diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000000..6a34e232a1 --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,3 @@ +# Lints are moved to Cargo.toml under [lints.clippy] +[net] +retry = 5 diff --git a/.cspell/custom-dictionary-workspace.txt b/.cspell/custom-dictionary-workspace.txt new file mode 100644 index 0000000000..b2d0437b2a --- /dev/null +++ b/.cspell/custom-dictionary-workspace.txt @@ -0,0 +1,10 @@ +# Custom Dictionary Words +betanet +bootnode +parachain +paritytech +polkadot +rustfmt +srtool +thiserror +clippy diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000..7dbbce57ad --- /dev/null +++ b/.dockerignore @@ -0,0 +1,8 @@ +.git +**/*.txt +**/*.md +# dotfiles in the repo root +/.* +**/node_modules/ +Dockerfile +**/*.dockerfile diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000..57d735bb38 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,47 @@ +root = true +[*] +indent_style=tab +indent_size=tab +tab_width=4 +end_of_line=lf +charset=utf-8 +trim_trailing_whitespace=true +max_line_length=100 +insert_final_newline=true + +[*.yml] +indent_style=space +indent_size=2 +tab_width=8 +end_of_line=lf + +[*.sh] +indent_style=space +indent_size=4 +tab_width=8 +end_of_line=lf + +[*.json] +indent_style=space +indent_size=2 +tab_width=8 +end_of_line=lf + +[*.js] +indent_style=space +indent_size=2 +tab_width=8 +end_of_line=lf +max_line_length=120 + +[*.ts] +indent_style=space +indent_size=2 +tab_width=8 +end_of_line=lf +max_line_length=120 + +[*.md] +trim_trailing_whitespace = true +indent_style = space + diff --git a/.env.sample b/.env.sample new file mode 100644 index 0000000000..d6a358acdf --- /dev/null +++ b/.env.sample @@ -0,0 +1,8 @@ +RUST_TOOLCHAIN=nightly +RELAY_CHAIN_SPEC=./resources/paseo-local.json +PARA_CHAIN_CONFIG=frequency-paseo-local +RAW_PARACHAIN_CHAIN_SPEC=./res/genesis/local/paseo-local-frequency-2000-raw.json +PARA_ID=2000 +DOCKER_ONBOARD=false +PARA_DOCKER_IMAGE_TAG="frequency-latest" +SRT_TOOL_VERSION=1.60.0 diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000000..950c218a95 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,5 @@ +# Global rule +* @wilwade + +# GitHub Workflows and Templates +.github/** @demisx diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..2c7d170839 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,7 @@ +version: 2 +updates: + # Maintain dependencies for GitHub Actions + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" diff --git a/.github/issues/dependabot-alert.template.md b/.github/issues/dependabot-alert.template.md new file mode 100644 index 0000000000..b160602c1e --- /dev/null +++ b/.github/issues/dependabot-alert.template.md @@ -0,0 +1,8 @@ +--- +title: "{{env.PR_TITLE}}" +labels: technical debt, dependencies, security +assignees: demisx, wilwade +--- + +The dependabot alert has detected that this repository uses a vulnerable dependency or malware and created new PR {{env.PR_URL}}. + diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000000..e05d91149f --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,17 @@ +# Goal +The goal of this PR is + +Closes + +# Discussion + +- + +# Checklist +- [ ] Updated Pallet Readme? +- [ ] Updated js/api-augment for Custom RPC APIs? +- [ ] Design doc(s) updated? +- [ ] Unit Tests added? +- [ ] e2e Tests added? +- [ ] Benchmarks added? +- [ ] Spec version incremented? diff --git a/.github/workflows/benchmarks-run.yml b/.github/workflows/benchmarks-run.yml new file mode 100644 index 0000000000..bca2118734 --- /dev/null +++ b/.github/workflows/benchmarks-run.yml @@ -0,0 +1,133 @@ +# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json +name: Benchmarks Run +run-name: Benchmarks Run for ${{github.event.inputs.branch}} +concurrency: + group: ${{github.workflow}}-${{github.ref}} + cancel-in-progress: true +on: + workflow_dispatch: + inputs: + branch: + description: "Branch" + required: true + pallets: + description: "Specific Pallets? (Ex: 'msa,messages')" + required: true + default: all + +jobs: + build: + if: github.repository == 'frequency-chain/frequency' + name: Build Benchmark Binary + runs-on: ubicloud-standard-16 + container: ghcr.io/frequency-chain/frequency/ci-base-image:1.5.7 + permissions: + contents: read + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + with: + ref: ${{github.event.inputs.branch}} + + - name: Build Binary for Benchmarks + run: | + echo "Running benchmark binary builder..." + ./scripts/run_benchmarks.sh -b + + - name: Upload Binary + uses: actions/upload-artifact@v4 + with: + name: benchmark-binary + path: target/release/frequency + retention-days: 3 + + - name: Upload WASM Build Artifacts + uses: actions/upload-artifact@v4 + with: + name: wasm-artifacts + path: target/release/wbuild + retention-days: 3 + + run-benchmarks: + if: github.repository == 'frequency-chain/frequency' + name: Run Benchmarks + needs: build + runs-on: [self-hosted, Linux, X64, benchmark] + permissions: + contents: write + statuses: write + pull-requests: write + steps: + - name: Print Info + run: | + echo "Running benchmarks..." + echo "Pallets: ${{github.event.inputs.pallets}}" + + - name: Check Out Repo + uses: actions/checkout@v4 + with: + ref: ${{github.event.inputs.branch}} + + - name: Create Target Directory + run: mkdir -p target/release + + - name: Download Benchmark Binary + uses: actions/download-artifact@v4 + with: + name: benchmark-binary + path: target/release + + - name: Download WASM Build Artifacts + uses: actions/download-artifact@v4 + with: + name: wasm-artifacts + path: target/release/wbuild + + - name: Make Binary Executable + run: chmod +x target/release/frequency + + - name: Update Weights + run: | + pallets_str="${{github.event.inputs.pallets}}" + echo "Pallets: $pallets_str" + if [ -z "${pallets_str}" -o $pallets_str = 'all' ]; then + echo "Running benchmarks for all pallets..." + ./scripts/run_benchmarks.sh -s -n + else + IFS=',' read -r -a pallets <<< "$pallets_str" + echo "Running benchmarks for pallets: ${pallets[*]}..." + ./scripts/run_benchmarks.sh -s -n "${pallets[@]}" + echo "Finished benchmarks for pallets: ${pallets[*]}." + fi + + - name: Print Updated Weights + run: | + git status + git diff + + - name: Commit Updated Weights + id: commit-updated-weights + uses: stefanzweifel/git-auto-commit-action@b863ae1933cb653a53c021fe36dbb774e1fb9403 + with: + commit_message: "Update weights" + file_pattern: "pallets/**/*.rs runtime/common/src/weights/*" + + test: + if: github.repository == 'frequency-chain/frequency' + name: Post Benchmark Tests + needs: run-benchmarks + runs-on: ubicloud-standard-16 + container: ghcr.io/frequency-chain/frequency/ci-base-image:1.5.7 + permissions: + contents: read + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + with: + ref: ${{github.event.inputs.branch}} + + - name: Current Commit + run: git log -n 1 + + - name: Run Tests + run: cargo test --features runtime-benchmarks,frequency-lint-check --workspace --release diff --git a/.github/workflows/check-migrations.yml b/.github/workflows/check-migrations.yml new file mode 100644 index 0000000000..dcbfc0d566 --- /dev/null +++ b/.github/workflows/check-migrations.yml @@ -0,0 +1,29 @@ +name: Check Migrations on Paseo + +on: + pull_request_target: + types: + - labeled + workflow_dispatch: +# Set default permissions as restrictive +permissions: + contents: read + packages: read + +jobs: + check-migrations: + if: github.event_name == 'workflow_dispatch' || contains(github.event.pull_request.labels.*.name, 'change/storage-migration') + name: Check Migrations on Paseo + continue-on-error: false + runs-on: ubicloud-standard-8 + container: ghcr.io/frequency-chain/frequency/ci-base-image:1.5.7 + steps: + - name: Checkout sources + uses: actions/checkout@v4 + + - name: Run Check Migrations Action + uses: ./.github/workflows/common/try-runtime-migrations + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + runtime-package: "frequency-runtime" + runtime-uri: ${{ vars.E2E_TESTNET_PASEO_RPC }} diff --git a/.github/workflows/check-polkadot-releases.yml b/.github/workflows/check-polkadot-releases.yml new file mode 100644 index 0000000000..6354875531 --- /dev/null +++ b/.github/workflows/check-polkadot-releases.yml @@ -0,0 +1,47 @@ +# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json +name: Check Polkadot Releases +on: + workflow_dispatch: + schedule: + - cron: "0 0 * * *" # midnight (UTC) +env: + REPO_URL: https://api.github.com/repos/paritytech/polkadot-sdk + TRACKING_GIT_BRANCH: ci/latest-polkadot-full-release + RELEASE_TRACK_FILENAME: .github/.latest-polkadot-full-release.txt + +# Set default permissions as restrictive +permissions: + contents: write + +jobs: + record-polkadot-latest-release-version: + runs-on: ubuntu-latest + steps: + - name: Timestamp + run: date + - name: Check Out Repo + uses: actions/checkout@v4 + with: + ref: ${{env.TRACKING_GIT_BRANCH}} + # While you can write to a branch without it, it will not trigger the workflow + token: ${{secrets.GHA_RECORD_POLKADOT_RELEASE}} + - name: Print Recorded Latest Polkadot Release + run: | + echo "Recorded Polkadot Latest Full Release:" + echo "--------------------------------------" + cat ${{env.RELEASE_TRACK_FILENAME}} + - name: Fetch Latest Release Version + run: | + curl -sL $REPO_URL/releases/latest | \ + jq -r ".tag_name" > ${{env.RELEASE_TRACK_FILENAME}} + echo "Fetched Polkadot Latest Full Release:" + echo "-------------------------------------" + cat ${{env.RELEASE_TRACK_FILENAME}} + - name: Commit Latest Release Version + id: commit-updated-release + uses: stefanzweifel/git-auto-commit-action@b863ae1933cb653a53c021fe36dbb774e1fb9403 + with: + commit_message: "Record new Polkadot release version" + commit_user_name: Frequency CI [bot] + commit_user_email: do-not-reply@users.noreply.github.com + commit_author: Frequency CI [bot] diff --git a/.github/workflows/common/codecov/action.yml b/.github/workflows/common/codecov/action.yml new file mode 100644 index 0000000000..c22bd1153d --- /dev/null +++ b/.github/workflows/common/codecov/action.yml @@ -0,0 +1,68 @@ +name: Run Generation of Code Coverage +description: Runs cargo grcov +inputs: + code-cov-token: + description: "codecov token" + required: true +runs: + using: "composite" + steps: + - name: Add llvm-tools + shell: bash + run: rustup component add llvm-tools-preview && rustup show && echo $PATH + + - name: Install grcov + shell: bash + run: | + cargo install --locked grcov --version 0.9.1 + which grcov + + - name: Build + shell: bash # Limited to 10 threads max + run: cargo build -j 10 --features frequency-lint-check + env: + RUSTC_BOOTSTRAP: 1 + CARGO_INCREMENTAL: "0" + RUSTFLAGS: "-Cinstrument-coverage -Ccodegen-units=1 -Copt-level=0 -Clink-dead-code -Coverflow-checks=off -Zpanic_abort_tests -Cpanic=abort" + RUSTDOCFLAGS: "-Cpanic=abort" + - name: Test + shell: bash # Limited to 10 threads max + run: cargo test -j 10 --features frequency-lint-check + env: + RUSTC_BOOTSTRAP: 1 + CARGO_INCREMENTAL: "0" + RUSTFLAGS: "-Cinstrument-coverage -Ccodegen-units=1 -Copt-level=0 -Clink-dead-code -Coverflow-checks=off -Zpanic_abort_tests -Cpanic=abort" + RUSTDOCFLAGS: "-Cpanic=abort" + # There are a lot of things ignored here to make it all work + # See the grcov docs for more information + # excl rpc traits, and error enums + # Only one of excl start and stop are allowed. + - name: Generate code coverage + shell: bash + run: | + grcov . -s . --binary-path ./target/debug/ -t lcov \ + --ignore-not-existing \ + --excl-start '(pub enum Error \{|#\[rpc\()' \ + --excl-stop '\s*}$' \ + --ignore "target/*" \ + --ignore "node/*" \ + --ignore "runtime/*" \ + --ignore "**/*weights.rs" \ + --ignore "**/benchmark*.rs" \ + --ignore "**/*tests.rs" \ + --ignore "**/tests/*.rs" \ + --ignore "**/*mock.rs" \ + --ignore "**/*runtime-api/src/lib.rs" \ + --ignore "*github.com*" \ + --ignore "*libcore*" \ + --ignore "*rustc*" \ + --ignore "*liballoc*" \ + --ignore "*cargo*" \ + -o ./target/debug/lcov.info + - name: Upload to codecov.io + uses: codecov/codecov-action@v5 + with: + token: ${{inputs.code-cov-token}} + files: ./target/debug/lcov.info + fail_ci_if_error: false # optional (default = false) + verbose: true # optional (default = false) diff --git a/.github/workflows/common/get-previous-full-release-version/action.yml b/.github/workflows/common/get-previous-full-release-version/action.yml new file mode 100644 index 0000000000..00e2e0b3c5 --- /dev/null +++ b/.github/workflows/common/get-previous-full-release-version/action.yml @@ -0,0 +1,24 @@ +name: Get Previous Full Release Version +description: Determines whether the version tag represents a full release +inputs: + full-release-version-tag: + description: "Tag pointing to the latest full release" + required: true +outputs: + version: + description: "Previous full release version" + value: ${{steps.get-version.outputs.previous_full_release_version}} +runs: + using: "composite" + steps: + - name: Get Version + id: get-version + shell: bash + run: | + git show-ref --tags -d + latest_tag_commit=$(git show-ref --tags -d | \ + grep ${{inputs.full-release-version-tag}}^{} | cut -d' ' -f1) + latest_full_release=$(git show-ref --tags -d | grep "^$latest_tag_commit" | \ + grep refs/tags/v | sed -e 's,.* refs/tags/,,' -e 's/\^{}//') + echo "latest_full_release: $latest_full_release" + echo "previous_full_release_version=$latest_full_release" >> $GITHUB_OUTPUT diff --git a/.github/workflows/common/is-full-release/action.yml b/.github/workflows/common/is-full-release/action.yml new file mode 100644 index 0000000000..9e17770c46 --- /dev/null +++ b/.github/workflows/common/is-full-release/action.yml @@ -0,0 +1,22 @@ +name: Is Full Release? +description: Determines whether the version tag represents a full release +inputs: + version-tag: + description: "Version tag in v#.#.#[-*] format" + required: true +outputs: + is-full-release: + description: "'true' if full release, 'false' otherwise" + value: ${{steps.is-full-release.outputs.is_full_release}} +runs: + using: "composite" + steps: + - name: Full Release? + id: is-full-release + shell: bash + run: | + version_tag=${{inputs.version-tag}} + is_full_release=$([[ "$version_tag" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]] && \ + echo 'true' || echo 'false') + echo "is_full_release: $is_full_release" + echo "is_full_release=$is_full_release" >> $GITHUB_OUTPUT diff --git a/.github/workflows/common/srtool/action.yml b/.github/workflows/common/srtool/action.yml new file mode 100644 index 0000000000..29e9b30445 --- /dev/null +++ b/.github/workflows/common/srtool/action.yml @@ -0,0 +1,231 @@ +# This is a copy of the action file from https://github.com/paritytech/srtool-actions/blob/9cf7232631d71f9510e05ab6297b1aa57e588fce/action.yml +# It is pulled in and modified for the following reasons: +# 1. We needed to add an additional environment variable to the docker run (CARGO_NET_RETRY=10) +# 2. Local for direct auditing of the action building the runtime + +name: "Srtool" +description: "Build WASM Runtime with SRTOOL" +author: chevdor & paritytech +branding: + icon: "package" + color: "blue" + +inputs: + chain: + description: > + Name of the chain, ie. polkadot + required: true + + package: + description: > + Runtime package to build, ie. polkadot-runtime. + If your runtime follows this pattern, you don't have and should not provide this input. + + If not provided, it will be set to -runtime + required: false + + image: + description: > + You can use an alternate image, use with caution! + default: "paritytech/srtool" + required: true + + tag: + description: > + Tag of the srtool image to use. Omit to use the latest (recommended) + required: false + + workdir: + description: > + Path of the project, this is where your main Cargo.toml is located. This is relative to $GITHUB_WORKSPACE. + default: "." + required: false + + runtime_dir: + description: > + Location of the runtime in your repo. The default is 'runtime/' + required: false + + profile: + description: > + Which profile to use with cargo build. + required: false + default: "release" + +outputs: + json: + description: > + The full json output of srtool. If you need more information than this action provides by default, + you can use this json output and extract some content using 'jq'. + value: ${{ steps.build.outputs.json }} + + proposal_hash: + description: The proposal hash as it will show on-chain + value: ${{ steps.build.outputs.proposal_hash }} + + version: + description: The version of srtool + value: ${{ steps.build.outputs.version }} + + info: + description: Some information from srtool about the current project + value: ${{ steps.build.outputs.info }} + + ipfs: + description: ipfs hash + value: ${{ steps.build.outputs.ipfs }} + + wasm: + description: Path of the produced compact runtime + value: ${{ steps.build.outputs.wasm }} + + wasm_compressed: + description: Path of the produced compressed runtime + value: ${{ steps.build.outputs.wasm_compressed }} + +runs: + using: "composite" + steps: + - id: check_latest_srtool + name: Check the version of the latest srtool + shell: bash + run: | + echo ::group::Inputs + echo "- image: ${{ inputs.image }}" + echo "- chain: ${{ inputs.chain }}" + echo ::endgroup:: + + RUSTC_VERSION_URL=https://raw.githubusercontent.com/${{ inputs.image }}/master/RUSTC_VERSION + echo Fetching RUSTC_VERSION from $RUSTC_VERSION_URL + RUSTC_VERSION=`curl -s $RUSTC_VERSION_URL` + + SRTOOL_VERSION_URL=https://raw.githubusercontent.com/${{ inputs.image }}/master/VERSION + echo Fetching SRTOOL_VERSION from $SRTOOL_VERSION_URL + SRTOOL_VERSION=`curl -s $SRTOOL_VERSION_URL` + + echo "RUSTC_VERSION=$RUSTC_VERSION" >> $GITHUB_ENV + echo "SRTOOL_VERSION=$SRTOOL_VERSION" >> $GITHUB_ENV + echo "SRTOOL_LATEST=$RUSTC_VERSION" >> $GITHUB_ENV + + - id: env_setup + name: Setting Env + shell: bash + run: | + echo ::group::Debug + echo "RUSTC_VERSION=$RUSTC_VERSION" + echo "SRTOOL_VERSION=$SRTOOL_VERSION" + echo "SRTOOL_LATEST=$RUSTC_VERSION" + echo ::endgroup:: + + echo ::group::Environment setup + SRTOOL_TAG=${{ inputs.tag || env.SRTOOL_LATEST }} + echo "SRTOOL_TAG=$SRTOOL_TAG" >> $GITHUB_ENV + echo "SRTOOL_IMAGE=${{ inputs.image }}:$SRTOOL_TAG" >> $GITHUB_ENV + echo "WORKDIR=${{ github.workspace }}/${{ inputs.workdir }}" >> $GITHUB_ENV + + RUNTIME_DIR=${{ inputs.runtime_dir }} + RUNTIME_DIR=${RUNTIME_DIR:-'runtime/'${{ inputs.chain }}} + echo "RUNTIME_DIR=$RUNTIME_DIR" >> $GITHUB_ENV + + PACKAGE=${{ inputs.package }} + PACKAGE=${PACKAGE:-${{ inputs.chain }}'-runtime'} + echo "PACKAGE=$PACKAGE" >> $GITHUB_ENV + + echo "BUILD_OPTS=${{ env.BUILD_OPTS }}" >> $GITHUB_ENV + + PROFILE=${{ inputs.profile }} + echo "PROFILE=$PROFILE" >> $GITHUB_ENV + + PARACHAIN_PALLET_ID=${{ env.PARACHAIN_PALLET_ID }} + PARACHAIN_PALLET_ID=${PARACHAIN_PALLET_ID:-0x01} + AUTHORIZE_UPGRADE_PREFIX=${{ env.AUTHORIZE_UPGRADE_PREFIX }} + AUTHORIZE_UPGRADE_PREFIX=${AUTHORIZE_UPGRADE_PREFIX:-0x02} + echo "PARACHAIN_PALLET_ID=$PARACHAIN_PALLET_ID" >> $GITHUB_ENV + echo "AUTHORIZE_UPGRADE_PREFIX=$AUTHORIZE_UPGRADE_PREFIX" >> $GITHUB_ENV + + echo ::endgroup:: + + - id: env_check + name: Checking Env + shell: bash + run: | + echo ::group::Environment check + + echo ℹ️ SRTOOL_LATEST: ${{ env.SRTOOL_LATEST }} + echo ℹ️ image: ${{ env.SRTOOL_IMAGE }} + echo ℹ️ chain: ${{ inputs.chain }} + echo ℹ️ package: ${{ env.PACKAGE }} + echo ℹ️ Github Workspace: ${{ github.workspace }} + echo ℹ️ workdir: ${{ env.WORKDIR }} + echo ℹ️ runtime_dir: ${{ env.RUNTIME_DIR }} + echo ℹ️ build_opts: ${{ env.BUILD_OPTS }} + echo ℹ️ parachain_pallet_id: ${{ env.PARACHAIN_PALLET_ID }} + echo ℹ️ profile: ${{ env.PROFILE }} + echo ℹ️ authorize_upgrade_prefix: ${{ env.AUTHORIZE_UPGRADE_PREFIX }} + echo ℹ️ .git folder: `ls -ald ${{ env.WORKDIR }}/.git` + echo ℹ️ Cargo.toml: `ls -al ${{ env.WORKDIR }}/Cargo.toml` + + echo ::endgroup:: + + - id: pulling_srtool + name: Build ${{ env.PACKAGE }} using ${{ env.SRTOOL_IMAGE }} + shell: bash + run: | + echo ::group::Pulling the srtool docker image: ${{ env.SRTOOL_IMAGE }} + docker pull ${{ env.SRTOOL_IMAGE }} + echo ::endgroup:: + + - id: version + shell: bash + run: | + echo ::group::Srtool version + CMD="docker run -i --rm -v ${{ env.WORKDIR }}:/build ${{ env.SRTOOL_IMAGE }} version -cM" + JSON=`$CMD` + echo $JSON | jq . + echo "version=$JSON" >> $GITHUB_OUTPUT + echo ::endgroup:: + + - id: info + shell: bash + run: | + echo ::group::srtool info + CMD="docker run -i --rm -v ${{ env.WORKDIR }}:/build ${{ env.SRTOOL_IMAGE }} info -cM" + JSON=`$CMD` + echo $JSON | jq . + echo "info=$JSON" >> $GITHUB_OUTPUT + echo ::endgroup:: + + - id: build + name: Build ${{ env.PACKAGE }} using ${{ env.SRTOOL_IMAGE }} + shell: bash + run: | + echo ::group::Srtool build of chain ${{ inputs.chain }} + CMD="docker run -i --rm -e CARGO_NET_RETRY=10 -e PACKAGE=${{ env.PACKAGE }} -e RUNTIME_DIR=${{ env.RUNTIME_DIR }} -e BUILD_OPTS -e + PARACHAIN_PALLET_ID -e AUTHORIZE_UPGRADE_PREFIX -e PROFILE -v ${{ env.WORKDIR }}:/build ${{ env.SRTOOL_IMAGE + }} build --app --json -cM" + + echo ::debug::build::docker_run $CMD + # here we keep streaming the progress and fetch the last line for the json result + stdbuf -oL $CMD | { + while IFS= read -r line + do + echo ║ $line + JSON="$line" + done + + echo "json=$JSON" >> $GITHUB_OUTPUT + echo $JSON | jq . + + PROP=`echo $JSON | jq -r .runtimes.compact.prop` + echo "proposal_hash=$PROP" >> $GITHUB_OUTPUT + + WASM=`echo $JSON | jq -r .runtimes.compact.wasm` + echo "wasm=$WASM" >> $GITHUB_OUTPUT + + Z_WASM=`echo $JSON | jq -r .runtimes.compressed.wasm` + echo "wasm_compressed=$Z_WASM" >> $GITHUB_OUTPUT + + IPFS=`echo $JSON | jq -r .runtimes.compact.ipfs` + echo "ipfs=$IPFS" >> $GITHUB_OUTPUT + } + echo ::endgroup:: diff --git a/.github/workflows/common/try-runtime-migrations/action.yml b/.github/workflows/common/try-runtime-migrations/action.yml new file mode 100644 index 0000000000..5685d92152 --- /dev/null +++ b/.github/workflows/common/try-runtime-migrations/action.yml @@ -0,0 +1,32 @@ +name: "Check Migrations for Frequency Runtime" +description: "An action to check runtime migrations" +inputs: + github-token: + description: "GitHub token" + required: true + runtime-package: + description: "The package name of the runtime" + required: true + runtime-uri: + description: "The URI of the runtime" + required: true + +runs: + using: "composite" + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Install required packages + run: | + apt-get update + apt install -y protobuf-compiler libclang-dev clang cmake unzip + shell: bash + + - name: Run runtime checks + uses: paritytech/try-runtime-gha@v0.2.0 + with: + runtime-package: ${{ inputs.runtime-package }} + node-uri: ${{ inputs.runtime-uri }} + checks: "pre-and-post" + extra-args: "--disable-spec-version-check --no-weight-warnings" diff --git a/.github/workflows/create-issue-dependabot-alert-pr.yml b/.github/workflows/create-issue-dependabot-alert-pr.yml new file mode 100644 index 0000000000..2cb08237d7 --- /dev/null +++ b/.github/workflows/create-issue-dependabot-alert-pr.yml @@ -0,0 +1,39 @@ +# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json +name: Create Issue for Dependabot Alert PR +on: + workflow_dispatch: + pull_request: + branches: + - main + types: [opened, reopened] + paths: + - .github/workflows +jobs: + create-issue: + runs-on: ubuntu-24.04 + permissions: + contents: write + env: + GITHUB_TOKEN: ${{ github.token }} + PR_TITLE: ${{github.event.pull_request.title}} + PR_NUMBER: ${{github.event.pull_request.number}} + PR_URL: ${{github.event.pull_request.url}} + steps: + - name: Check Out Repo + if: github.event.pull_request.user.login == 'dependabot[bot]' + uses: actions/checkout@v4 + - name: Create GitHub Issue + if: github.event.pull_request.user.login == 'dependabot[bot]' + id: create-issue + uses: JasonEtco/create-an-issue@1b14a70e4d8dc185e5cc76d3bec9eab20257b2c5 + with: + filename: .github/issues/dependabot-alert.template.md + - name: Link PR to New Issue + if: github.event.pull_request.user.login == 'dependabot[bot]' + env: + PR_BODY_FILENAME: /tmp/current-pr-body-${{github.run_id}}.txt + run: | + gh pr view ${{env.PR_URL}} --json body --jq '.body' > ${{env.PR_BODY_FILENAME}} + echo -e "\n\nResolves: #${{steps.create-issue.outputs.number}}" >> ${{env.PR_BODY_FILENAME}} + gh pr edit ${{env.PR_URL}} --body-file ${{env.PR_BODY_FILENAME}} + rm ${{env.PR_BODY_FILENAME}} diff --git a/.github/workflows/e2e-testnet.yml b/.github/workflows/e2e-testnet.yml new file mode 100644 index 0000000000..e7df2c549c --- /dev/null +++ b/.github/workflows/e2e-testnet.yml @@ -0,0 +1,113 @@ +# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json +name: Testnet Paseo E2E Tests +run-name: Testnet Paseo E2E Testing ${{github.event.inputs.release-version || github.ref_name}} +concurrency: + group: ${{github.workflow}}-${{github.ref}} + cancel-in-progress: true +on: + workflow_dispatch: + inputs: + release-version: + description: "Test Release version (v#.#.#[-rc#])" + required: true + ethereum-utils-version: + description: "Ethereum utils version to use (v#.#.#[-rc#])" + required: true + +env: + TAG_FROM_UI: ${{github.event.inputs.release-version}} + ETHEREUM_UTILS_FROM_UI: ${{github.event.inputs.ethereum-utils-version}} + +# Set default permissions as restrictive +permissions: + contents: read + +jobs: + run-e2e-setup: + name: Run E2E Test Prep + outputs: + test-files: ${{ steps.list-tests.outputs.files }} + runs-on: ubuntu-latest + steps: + - name: Validate + shell: bash + run: | + version=${{env.TAG_FROM_UI}} + ethereum_utils_version=${{env.ETHEREUM_UTILS_FROM_UI}} + echo "Release version entered in UI: $version" + echo "Ethereum utils version entered in UI: $ethereum_utils_version" + regex='^v([0-9]+)\.(0|([1-9][0-9]*))\.(0|([1-9][0-9]*))(-rc[1-9][0-9]*)?$' + if [[ ! $version =~ $regex ]] || [[ ! $ethereum_utils_version =~ $regex ]]; then + echo "ERROR: Entered version $version or ethereum_version $ethereum_utils_version is not valid." + echo "Please use v#.#.#[-rc#] format." + exit 1 + fi + - name: Check Out Repo + uses: actions/checkout@v4 + with: + fetch-depth: 0 + ref: ${{github.event.inputs.branch}} + - name: Set Env Vars + run: | + echo "API_AUGMENT_VERSION=$(echo ${{ env.TAG_FROM_UI }} | sed 's/^v//')" >> $GITHUB_ENV + echo "ETHEREUM_UTILS_VERSION=$(echo ${{ env.ETHEREUM_UTILS_FROM_UI }} | sed 's/^v//')" >> $GITHUB_ENV + - name: Set up NodeJs + uses: actions/setup-node@v4 + with: + node-version: 22 + cache: "npm" + cache-dependency-path: e2e/package-lock.json + - name: Install Built api-augment + run: npm install @frequency-chain/api-augment@${{ env.API_AUGMENT_VERSION }} @frequency-chain/ethereum-utils@${{ env.ETHEREUM_UTILS_VERSION }} + working-directory: e2e + - name: Fund e2e Tests + working-directory: e2e + env: + CHAIN_ENVIRONMENT: paseo-testnet + WS_PROVIDER_URL: ${{ vars.E2E_TESTNET_PASEO_RPC }} + FUNDING_ACCOUNT_SEED_PHRASE: ${{ secrets.PASEO_E2E_TEST_SEED_PHRASE }} + run: npm run test:relay-funding + + - name: Generate Test Matrix + working-directory: e2e + id: list-tests + # Assuming tests are all *.test.ts + run: | + npm run test:relay-list + echo "files=$(npm run --silent test:relay-list)" >> "$GITHUB_OUTPUT" + + run-e2e: + name: Run E2E Tests + needs: run-e2e-setup + strategy: + # Even if one fails, keep the others going + fail-fast: false + matrix: + test-file: ${{ fromJson(needs.run-e2e-setup.outputs.test-files) }} + runs-on: ubuntu-latest + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + with: + fetch-depth: 0 + ref: ${{github.event.inputs.branch}} + - name: Set Env Vars + run: | + echo "API_AUGMENT_VERSION=$(echo ${{ env.TAG_FROM_UI }} | sed 's/^v//')" >> $GITHUB_ENV + echo "ETHEREUM_UTILS_VERSION=$(echo ${{ env.ETHEREUM_UTILS_FROM_UI }} | sed 's/^v//')" >> $GITHUB_ENV + - name: Set up NodeJs + uses: actions/setup-node@v4 + with: + node-version: 22 + cache: "npm" + cache-dependency-path: e2e/package-lock.json + - name: Install Built api-augment + run: npm install @frequency-chain/api-augment@${{ env.API_AUGMENT_VERSION }} @frequency-chain/ethereum-utils@${{ env.ETHEREUM_UTILS_VERSION }} + working-directory: e2e + - name: E2E Test - ${{ matrix.test-file }} + working-directory: e2e + env: + CHAIN_ENVIRONMENT: paseo-testnet + WS_PROVIDER_URL: ${{ vars.E2E_TESTNET_PASEO_RPC }} + FUNDING_ACCOUNT_SEED_PHRASE: ${{ secrets.PASEO_E2E_TEST_SEED_PHRASE }} + run: npm run test:relay-single -- ${{ matrix.test-file }} diff --git a/.github/workflows/merge-pr.yml b/.github/workflows/merge-pr.yml new file mode 100644 index 0000000000..a2d4be6468 --- /dev/null +++ b/.github/workflows/merge-pr.yml @@ -0,0 +1,64 @@ +# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json +name: Merge PR +concurrency: + group: ${{github.workflow}}-${{github.ref}} + cancel-in-progress: true +on: + push: + branches: + - main +# Set default permissions as restrictive +permissions: + contents: read + packages: read + +jobs: + publish-js-api-augment-rc: + name: Merge - Publish JS API Augment Release Candidate + runs-on: ubicloud-standard-4 + container: ghcr.io/frequency-chain/frequency/ci-base-image:1.5.7 + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + - name: Output Metadata + # Run the cargo command and ignore any extra lines outside of the json result + run: CARGO_INCREMENTAL=0 RUSTFLAGS="-D warnings" cargo run --features frequency-local -- export-metadata --chain=frequency-paseo-local --tmp ./js/api-augment/metadata.json + - name: Set up NodeJs + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: "npm" + registry-url: "https://registry.npmjs.org" + cache-dependency-path: js/api-augment/package-lock.json + - name: Install + run: npm ci + working-directory: js/api-augment + - name: Build + run: npm run build + working-directory: js/api-augment + env: + FULL_SHA: ${{github.sha}} + - name: Version Package + env: + FULL_SHA: ${{github.sha}} + working-directory: js/api-augment/dist + shell: bash + run: npm version --new-version "v0.0.0-${FULL_SHA:0:6}" --no-git-tag-version + - name: Publish on NPM @next + run: npm publish --tag next --access public + working-directory: js/api-augment/dist + env: + NODE_AUTH_TOKEN: ${{secrets.NODE_AUTH_TOKEN}} + + calc-code-coverage: + name: Merge - Calculate Code Coverage + runs-on: ubicloud-standard-30 + container: ghcr.io/frequency-chain/frequency/ci-base-image:1.5.7 + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + - name: Generate and Upload Code Coverage + id: codecov + uses: ./.github/workflows/common/codecov + with: + code-cov-token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000000..57612a2804 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,1328 @@ +# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json +name: Release +run-name: Cut Release ${{github.event.inputs.release-version || github.ref_name}} +concurrency: + group: ${{github.workflow}}-${{github.ref}} + cancel-in-progress: false +on: + push: + tags: + - "v[0-9]+.[0-9]+.[0-9]+" # ex. v1.0.0 + - "v[0-9]+.[0-9]+.[0-9]+-rc[0-9]+" # ex. v1.1.0-rc1 + - "v0.0.1" # used for testing only + - "v0.0.1-rc[0-9]+" # used for testing only + workflow_dispatch: + inputs: + release-version: + description: "Release version (v#.#.#[-rc#])" + required: true + +permissions: + contents: write + statuses: write + +env: + NEW_RELEASE_TAG_FROM_UI: ${{github.event.inputs.release-version}} + NEW_RELEASE_TAG: ${{github.event.inputs.release-version || github.ref_name}} + RELEASE_BRANCH_NAME: release-${{github.event.inputs.release-version || github.ref_name}} + LATEST_FULL_RELEASE_TAG: _LATEST-FULL-RELEASE + TEST_RUN: ${{startsWith(github.event.inputs.release-version || github.ref_name, 'v0.0.1')}} + +jobs: + validate-release-version: + name: Validate Release Version + runs-on: ubuntu-24.04 + steps: + - name: Validate + if: env.NEW_RELEASE_TAG_FROM_UI != '' + shell: bash + run: | + version=${{env.NEW_RELEASE_TAG_FROM_UI}} + echo "Release version entered in UI: $version" + regex='^v([0-9]+)\.(0|([1-9][0-9]*))\.(0|([1-9][0-9]*))(-rc[1-9][0-9]*)?$' + if [[ ! $version =~ $regex ]]; then + echo "ERROR: Entered version $version is not valid." + echo "Please use v#.#.#[-rc#] format." + exit 1 + fi + + create-release-branch: + needs: validate-release-version + name: Create Release Branch + runs-on: ubuntu-24.04 + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Create Release Branch? + id: create-release-branch + run: | + set -x + full_branch=remotes/origin/${{env.RELEASE_BRANCH_NAME}} + branch_hash=$(git rev-parse --verify --quiet $full_branch || echo "") + create_branch=$([ -z $branch_hash ] && echo 'true' || echo 'false') + echo "create_branch: $create_branch" + echo "create=$create_branch" >> $GITHUB_OUTPUT + - name: Create Release Branch + if: steps.create-release-branch.outputs.create == 'true' + run: | + git status -s + git checkout -b ${{env.RELEASE_BRANCH_NAME}} + git push origin ${{env.RELEASE_BRANCH_NAME}} -u + + run-all-benchmarks-build: + needs: create-release-branch + name: Run All Benchmarks - Build + runs-on: ubicloud-standard-16 + container: ghcr.io/frequency-chain/frequency/ci-base-image:1.5.7 + permissions: + contents: read + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + with: + ref: ${{github.event.inputs.branch}} + + - name: Build Binary for Benchmarks + run: | + echo "Running benchmark binary builder..." + ./scripts/run_benchmarks.sh -b + + - name: Upload Binary + uses: actions/upload-artifact@v4 + with: + name: benchmark-binary + path: target/release/frequency + retention-days: 3 + + - name: Upload WASM Build Artifacts + uses: actions/upload-artifact@v4 + with: + name: wasm-artifacts + path: target/release/wbuild + retention-days: 3 + + run-all-benchmarks-bench: + needs: run-all-benchmarks-build + name: Run All Benchmarks + runs-on: [self-hosted, Linux, X64, benchmark] + permissions: + contents: write + statuses: write + pull-requests: write + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + with: + ref: ${{env.RELEASE_BRANCH_NAME}} + + - name: Create Target Directory + run: mkdir -p target/release + + - name: Download Benchmark Binary + uses: actions/download-artifact@v4 + with: + name: benchmark-binary + path: target/release + + - name: Download WASM Build Artifacts + uses: actions/download-artifact@v4 + with: + name: wasm-artifacts + path: target/release/wbuild + + - name: Make Binary Executable + run: chmod +x target/release/frequency + + - name: Update Weights for All Pallets + run: | + echo "Running benchmarks for all pallets..." + ./scripts/run_benchmarks.sh -s -n + + - name: Print Updated Weights + run: | + git status -s + git diff + - name: Commit Updated Weights + uses: stefanzweifel/git-auto-commit-action@b863ae1933cb653a53c021fe36dbb774e1fb9403 + with: + commit_message: "Update weights for release ${{env.NEW_RELEASE_TAG}}" + file_pattern: "pallets/**/*.rs runtime/common/src/weights/*" + + run-all-benchmarks-test: + needs: run-all-benchmarks-bench + name: Run All Benchmarks - Test + runs-on: ubicloud-standard-16 + container: ghcr.io/frequency-chain/frequency/ci-base-image:1.5.7 + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + with: + ref: ${{env.RELEASE_BRANCH_NAME}} + + - name: Full Release? + id: is-full-release + uses: ./.github/workflows/common/is-full-release + with: + version-tag: ${{env.NEW_RELEASE_TAG}} + + - name: Current Commit + run: git log -n 1 + + - name: Run Tests + if: steps.is-full-release.outputs.is-full-release == 'true' + run: cargo test --features runtime-benchmarks,frequency-lint-check --workspace --release + + version-code: + needs: run-all-benchmarks-test + name: Version Code + runs-on: ubuntu-24.04 + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + with: + ref: ${{env.RELEASE_BRANCH_NAME}} + fetch-depth: 0 + - name: Version Code + shell: bash + run: | + release_version=${{env.NEW_RELEASE_TAG}} + make version v=${release_version:1} + - name: Print Updated Version + run: | + git status + git diff + - name: Commit Updated Version + id: commit-updated-version + uses: stefanzweifel/git-auto-commit-action@b863ae1933cb653a53c021fe36dbb774e1fb9403 + with: + commit_message: "Update versions for release ${{env.NEW_RELEASE_TAG}}" + - name: Update Release Version Tag + uses: rickstaa/action-create-tag@a1c7777fcb2fee4f19b0f283ba888afa11678b72 + with: + tag: ${{env.NEW_RELEASE_TAG}} + force_push_tag: true + message: "Release version tag" + commit_sha: ${{steps.commit-updated-version.outputs.commit_hash}} + + build-binaries: + needs: version-code + name: Build ${{matrix.arch}} Binary for ${{matrix.network}} + strategy: + fail-fast: true + matrix: + network: [dev, local, testnet, mainnet] + arch: [amd64, arm64] + build-profile: [release] + include: + - network: dev + spec: frequency-no-relay + release-file-name-prefix: frequency-dev + - network: local + spec: frequency-local + release-file-name-prefix: frequency-local + - network: testnet + spec: frequency-testnet + release-file-name-prefix: frequency-testnet + - network: mainnet + spec: frequency + release-file-name-prefix: frequency + - arch: amd64 + runner: ubicloud-standard-16 + - arch: arm64 + runner: ubicloud-standard-16-arm + runs-on: ${{matrix.runner}} + container: ghcr.io/frequency-chain/frequency/ci-base-image:1.5.7 + env: + SIGNING_SUBKEY_FINGERPRINT: B6327D1474C6392032870E8EFA4FD1E73A0FE707 + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + with: + ref: ${{env.RELEASE_BRANCH_NAME}} + - name: Set Env Vars + run: | + echo "BIN_DIR=target/${{matrix.build-profile}}" >> $GITHUB_ENV + echo "BUILT_BIN_FILENAME=frequency" >> $GITHUB_ENV + echo "RELEASE_BIN_FILENAME=${{matrix.release-file-name-prefix}}.${{matrix.arch}}" >> $GITHUB_ENV + - name: Compile for ${{matrix.network}} + run: | + CARGO_INCREMENTAL=0 RUSTFLAGS="-D warnings" cargo build \ + --locked \ + --features ${{matrix.spec}} \ + --profile ${{matrix.build-profile}} + - name: Run Sanity Checks + run: | + file ${{env.BIN_DIR}}/${{env.BUILT_BIN_FILENAME}} && \ + ${{env.BIN_DIR}}/${{env.BUILT_BIN_FILENAME}} --version + - name: Rename Binary + run: | + cp -p ${{env.BIN_DIR}}/${{env.BUILT_BIN_FILENAME}} \ + ${{env.BIN_DIR}}/${{env.RELEASE_BIN_FILENAME}} + - name: Generate Binary Hash + working-directory: ${{env.BIN_DIR}} + run: sha256sum ${{env.RELEASE_BIN_FILENAME}} > ${{env.RELEASE_BIN_FILENAME}}.sha256 + - name: Import GPG key + id: import-gpg + uses: crazy-max/ghaction-import-gpg@cb9bde2e2525e640591a934b1fd28eef1dcaf5e5 + with: + gpg_private_key: ${{secrets.FREQUENCY_PGP_SECRET_SUBKEYS}} + passphrase: ${{secrets.FREQUENCY_PGP_MASTER_KEY_PASSWORD}} + fingerprint: ${{env.SIGNING_SUBKEY_FINGERPRINT}} + - name: List GPG Keys + run: gpg -k; gpg -K + # The error in this step may be due to expired signing subkey + # See https://github.com/frequency-chain/frequency/issues/1695 + - name: Generate Binary Signature + working-directory: ${{env.BIN_DIR}} + run: | + gpg --version + gpg --local-user ${{env.SIGNING_SUBKEY_FINGERPRINT}} \ + --sign --armor \ + --pinentry-mode=loopback \ + --passphrase="${{secrets.FREQUENCY_PGP_MASTER_KEY_PASSWORD}}" \ + --detach-sig \ + ${{env.RELEASE_BIN_FILENAME}} + - name: Verify Binary + working-directory: ${{env.BIN_DIR}} + run: gpg --verify ${{env.RELEASE_BIN_FILENAME}}.asc + - name: Upload Artifacts + uses: actions/upload-artifact@v4 + with: + name: artifacts-binary-${{matrix.network}}-${{matrix.arch}}-${{github.run_id}} + path: | + ${{env.BIN_DIR}}/${{env.RELEASE_BIN_FILENAME}} + ${{env.BIN_DIR}}/${{env.RELEASE_BIN_FILENAME}}.sha256 + ${{env.BIN_DIR}}/${{env.RELEASE_BIN_FILENAME}}.asc + if-no-files-found: error + + build-runtimes: + needs: version-code + name: Build Runtime for ${{matrix.network}} + outputs: + runtime_filename_dev: ${{steps.set-env-vars.outputs.runtime_filename_dev}} + runtime_filename_paseo: ${{steps.set-env-vars.outputs.runtime_filename_paseo}} + runtime_filename_mainnet: ${{steps.set-env-vars.outputs.runtime_filename_mainnet}} + # env: + # HOME: /root + strategy: + fail-fast: true + matrix: + # Remember, runtimes are separate for each relay chain + # We do not release frequency-*-local runtimes however + network: [dev, paseo, mainnet] + build-profile: [release] + package: [frequency-runtime] + runtime-dir: [runtime/frequency] + built-wasm-file-name-prefix: [frequency_runtime] + include: + - network: dev + release-wasm-file-name-prefix: frequency-dev_runtime + features: frequency-no-relay + wasm-core-version: frequency-testnet + - network: paseo + release-wasm-file-name-prefix: frequency-paseo_runtime + features: frequency-testnet + wasm-core-version: frequency-testnet + - network: mainnet + release-wasm-file-name-prefix: frequency_runtime + features: frequency + wasm-core-version: frequency + runs-on: ubicloud-standard-8 + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + with: + ref: ${{env.RELEASE_BRANCH_NAME}} + - name: Install Rust Toolchain + # Match installation steps to CI base docker image + run: | + curl https://sh.rustup.rs -sSf | bash -s -- -y + echo "PATH=$HOME/.cargo/bin:$PATH" >> $GITHUB_ENV + - name: Extract Runtime Spec Version + run: | + echo "RUNTIME_SPEC_VERSION=$(awk '/spec_version:/ {match($0, /[0-9]+/); print substr($0, RSTART, RLENGTH); exit}' \ + ${{matrix.runtime-dir}}/src/lib.rs)" >> $GITHUB_ENV + - name: Validate Extracted Version + shell: bash + run: | + echo "Runtime Spec Version: ${{env.RUNTIME_SPEC_VERSION}}" + [[ $RUNTIME_SPEC_VERSION == ?(-)+([0-9]) ]] || \ + (echo "ERROR: \"${{env.RUNTIME_SPEC_VERSION}}\" is not a valid integer" && exit 1) + - name: Set Env Vars + id: set-env-vars + run: | + echo "WASM_DIR=${{matrix.runtime-dir}}/target/srtool/${{matrix.build-profile}}/wbuild/${{matrix.package}}" >> $GITHUB_ENV + echo "BUILT_WASM_FILENAME=${{matrix.built-wasm-file-name-prefix}}.compact.compressed.wasm" >> $GITHUB_ENV + release_wasm_filename=${{matrix.release-wasm-file-name-prefix}}-v${{env.RUNTIME_SPEC_VERSION}}.${{env.NEW_RELEASE_TAG}}.compact.compressed.wasm + echo "RELEASE_WASM_FILENAME=$release_wasm_filename" >> $GITHUB_ENV + echo "runtime_filename_${{matrix.network}}=$release_wasm_filename" >> $GITHUB_OUTPUT + - name: Build Deterministic WASM + id: srtool_build + uses: ./.github/workflows/common/srtool + env: + BUILD_OPTS: "--features on-chain-release-build,no-metadata-docs,${{matrix.features}}" + with: + profile: ${{matrix.build-profile}} + package: ${{matrix.package}} + chain: ${{matrix.chain}} + tag: "1.84.1" + runtime_dir: ${{ matrix.runtime-dir }} + - name: Rename WASM file + run: | + cp -p ${{ steps.srtool_build.outputs.wasm_compressed }} \ + ./${{env.WASM_DIR}}/${{env.RELEASE_WASM_FILENAME}} + - name: Install Subwasm + run: | + cargo install --locked --git https://github.com/chevdor/subwasm --tag v0.21.3 --force + subwasm --version + - name: Test WASM file + run: | + file ${{env.WASM_DIR}}/${{env.RELEASE_WASM_FILENAME}} + subwasm info ${{env.WASM_DIR}}/${{env.RELEASE_WASM_FILENAME}} + subwasm info ${{env.WASM_DIR}}/${{env.RELEASE_WASM_FILENAME}} | grep "Core version:.*${{matrix.wasm-core-version}}-${{env.RUNTIME_SPEC_VERSION}}" || \ + (echo "ERROR: WASM Core version didn't match ${{matrix.wasm-core-version}}-${{env.RUNTIME_SPEC_VERSION}}" && exit 1) + - name: Upload Artifact + uses: actions/upload-artifact@v4 + with: + name: artifacts-wasm-${{matrix.network}}-${{github.run_id}} + path: ${{env.WASM_DIR}}/${{env.RELEASE_WASM_FILENAME}} + if-no-files-found: error + + build-rust-developer-docs: + needs: version-code + name: Build Rust Developer Docs + runs-on: ubicloud-standard-4 + container: ghcr.io/frequency-chain/frequency/ci-base-image:1.5.7 + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + with: + ref: ${{env.RELEASE_BRANCH_NAME}} + - name: Setup Pages + uses: actions/configure-pages@v5 + - name: Build Docs + run: | + RUSTC_BOOTSTRAP=1 RUSTDOCFLAGS="--enable-index-page -Zunstable-options" cargo doc --no-deps --workspace --features frequency + - name: Fix file permissions + shell: sh + run: | + chmod -c -R +rX "target/doc" | + while read line; do + echo "::warning title=Invalid file permissions automatically fixed::$line" + done + - name: Upload Docs + uses: actions/upload-pages-artifact@v3 + with: + path: ./target/doc + + build-js-api-augment: + needs: build-binaries + name: Build JS API Augment + env: + NETWORK: local + BUILD_PROFILE: release + BIN_DIR: target/release + RELEASE_FILENAME_PREFIX: frequency-local + ARCH: amd64 + runs-on: ubuntu-24.04 + container: ghcr.io/frequency-chain/frequency/ci-base-image:1.5.7 + steps: + - name: Set Env Vars + run: | + echo "BIN_DIR=target/${{env.BUILD_PROFILE}}" >> $GITHUB_ENV + echo "RELEASE_BIN_FILENAME=${{env.RELEASE_FILENAME_PREFIX}}.${{env.ARCH}}" >> $GITHUB_ENV + - name: Check Out Repo + uses: actions/checkout@v4 + with: + ref: ${{env.RELEASE_BRANCH_NAME}} + - name: Set up NodeJs + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: "npm" + registry-url: "https://registry.npmjs.org" + cache-dependency-path: js/api-augment/package-lock.json + - name: Install + run: npm install # DO NOT use `npm ci` as we want the latest polkadot/api possible + working-directory: js/api-augment + - name: Download Binaries + id: download-binaries + uses: actions/download-artifact@v4 + with: + pattern: artifacts-binary-${{env.NETWORK}}-amd64-${{github.run_id}} + path: . + - name: Extract and List Downloaded Binaries + run: | + download_dir=${{steps.download-binaries.outputs.download-path}} + mv "${download_dir}"/artifacts*/* "${download_dir}" + echo "Download dir: $download_dir" + echo "Downloaded binaries: $(ls -l $download_dir)" + - name: Move Binary to Target Dir + run: | + mkdir -p ${{env.BIN_DIR}} + mv ${{env.RELEASE_BIN_FILENAME}} ${{env.BIN_DIR}} + chmod 755 ${{env.BIN_DIR}}/${{env.RELEASE_BIN_FILENAME}} + - name: Output Metadata + run: ${{env.BIN_DIR}}/${{env.RELEASE_BIN_FILENAME}} export-metadata --chain=frequency-paseo-local --tmp ./js/api-augment/metadata.json + - name: Build + run: npm run build + working-directory: js/api-augment + - name: Upload Dist Dir + uses: actions/upload-artifact@v4 + with: + name: js-api-augment-${{github.run_id}} + path: js/api-augment/dist + if-no-files-found: error + + build-js-ethereum-utils: + name: Build JS Ethereum utils + runs-on: ubuntu-24.04 + container: ghcr.io/frequency-chain/frequency/ci-base-image:1.5.5 + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + with: + ref: ${{env.RELEASE_BRANCH_NAME}} + - name: Set up NodeJs + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: "npm" + registry-url: "https://registry.npmjs.org" + cache-dependency-path: js/ethereum-utils/package-lock.json + - name: Install + run: npm ci + working-directory: js/ethereum-utils + - name: Build + run: npm run build + working-directory: js/ethereum-utils + - name: Upload Dist Dir + uses: actions/upload-artifact@v4 + with: + name: js-ethereum-utils-${{github.run_id}} + path: js/ethereum-utils/dist + if-no-files-found: error + + build-js-schemas: + name: Build JS Schemas + runs-on: ubuntu-24.04 + container: ghcr.io/frequency-chain/frequency/ci-base-image:1.5.7 + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + with: + ref: ${{env.RELEASE_BRANCH_NAME}} + - name: Set up NodeJs + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: "npm" + registry-url: "https://registry.npmjs.org" + cache-dependency-path: js/schemas/package-lock.json + - name: Install + run: npm install + working-directory: js/schemas + - name: Build + run: npm run build + working-directory: js/schemas + - name: Upload Dist Dir + uses: actions/upload-artifact@v4 + with: + name: js-schemas-${{github.run_id}} + path: js/schemas/dist + if-no-files-found: error + + test-version-matches-release: + needs: build-binaries + name: Test Version Matches Release + strategy: + fail-fast: true + matrix: + os: [ubuntu-24.04] + network: [mainnet] + include: + - network: mainnet + spec: frequency + build-profile: release + release-file-name-prefix: frequency + - os: ubuntu-24.04 + arch: amd64 + runs-on: ${{matrix.os}} + steps: + - name: Set Env Vars + run: | + echo "BIN_DIR=target/${{matrix.build-profile}}" >> $GITHUB_ENV + echo "BUILT_BIN_FILENAME=frequency" >> $GITHUB_ENV + echo "RELEASE_BIN_FILENAME=${{matrix.release-file-name-prefix}}.${{matrix.arch}}" >> $GITHUB_ENV + - name: Check Out Repo + uses: actions/checkout@v4 + with: + ref: ${{env.RELEASE_BRANCH_NAME}} + fetch-depth: 0 + - name: Download Binaries + id: download-binaries + uses: actions/download-artifact@v4 + with: + pattern: artifacts-binary-${{matrix.network}}-${{matrix.arch}}-${{github.run_id}} + path: . + - name: Extract and List Downloaded Binaries + run: | + download_dir=${{steps.download-binaries.outputs.download-path}} + mv "${download_dir}"/artifacts*/* "${download_dir}" + echo "Download dir: $download_dir" + echo "Downloaded binaries: $(ls -l $download_dir)" + - name: Move Binary to Target Dir + run: | + mkdir -p ${{env.BIN_DIR}} + mv ${{env.RELEASE_BIN_FILENAME}} ${{env.BIN_DIR}}/${{env.BUILT_BIN_FILENAME}} + chmod +x ${{env.BIN_DIR}}/${{env.BUILT_BIN_FILENAME}} + - name: Testing Version Match + if: env.TEST_RUN != 'true' + shell: bash + run: | + EXPECTED_VERSION="${{env.NEW_RELEASE_TAG}}+polkadot$(make version-polkadot)" + ACTUAL_VERSION="v$(${{env.BIN_DIR}}/${{env.BUILT_BIN_FILENAME}} --version | cut -d " " -f 2)" + echo "Expected: ${EXPECTED_VERSION}" + echo " Actual: ${ACTUAL_VERSION%-*}" + [[ ${ACTUAL_VERSION%-*} == ${EXPECTED_VERSION} ]] + + # Could not port this job to container because the reference node will be started in a + # parallel container to the job polkadot-js-tools container and the latter will not + # be able to connect to the former without runner supporting DinD mode first. + # See https://github.com/frequency-chain/frequency/issues/1543 + compare-metadata: + needs: build-binaries + name: Compare Metadata + runs-on: ubuntu-24.04 + env: + BIN_DIR: target/release + BIN_FILENAME: frequency-local.amd64 + TEST_BIN_FILENAME: frequency-local.amd64 + TEST_DOWNLOAD_DIR: download-test + REF_BIN_FILENAME: frequency-ref.amd64 + REF_DOWNLOAD_DIR: download-ref + OUTPUT_DIR: target/release + FREQUENCY_PROCESS_NAME: frequency + steps: + - name: Set Env Vars + run: | + echo "OUTPUT_FILENAME=metadata-compare.txt" >> $GITHUB_ENV + - name: Check Out Repo + uses: actions/checkout@v4 + with: + ref: ${{env.RELEASE_BRANCH_NAME}} + fetch-depth: 0 + - name: Get Previous Full Release Version + id: get-previous-full-release-version + uses: ./.github/workflows/common/get-previous-full-release-version + with: + full-release-version-tag: ${{env.LATEST_FULL_RELEASE_TAG}} + - name: Fetch Reference Binary + uses: robinraju/release-downloader@a96f54c1b5f5e09e47d9504526e96febd949d4c2 + with: + tag: ${{steps.get-previous-full-release-version.outputs.version}} + fileName: ${{env.BIN_FILENAME}} + out-file-path: ${{env.REF_DOWNLOAD_DIR}} + - name: Download Test Binary + id: download-binaries + uses: actions/download-artifact@v4 + with: + pattern: artifacts-binary-local-amd64-${{github.run_id}} + path: ${{env.TEST_DOWNLOAD_DIR}} + - name: Rename and Move Binaries + run: | + download_dir=${{steps.download-binaries.outputs.download-path}} + mv "${download_dir}"/artifacts*/* "${download_dir}" + echo "Download dir: $download_dir" + echo "Downloaded binaries: $(ls -l $download_dir)" + mkdir -p ${{env.BIN_DIR}} + mv ${{env.REF_DOWNLOAD_DIR}}/${{env.BIN_FILENAME}} ${{env.BIN_DIR}}/${{env.REF_BIN_FILENAME}} + mv "${download_dir}/${{env.BIN_FILENAME}}" ${{env.BIN_DIR}}/${{env.TEST_BIN_FILENAME}} + - name: Set Binary Permissions + working-directory: ${{env.BIN_DIR}} + run: | + chmod 755 $TEST_BIN_FILENAME + chmod 755 $REF_BIN_FILENAME + echo "Binary Directory:" + ls -la ./ + - name: Docker network + run: docker network create net-${{env.RELEASE_BRANCH_NAME}} + - name: Start Test Node + working-directory: ${{env.BIN_DIR}} + run: | + docker run -d --rm --net=net-${{env.RELEASE_BRANCH_NAME}} \ + -v `pwd`:/app \ + --name test-node \ + ubuntu:24.04 \ + /bin/sh -c "chmod +x /app/${{env.TEST_BIN_FILENAME}} && /app/${{env.TEST_BIN_FILENAME}} \ + --rpc-external \ + --rpc-cors=all \ + --rpc-methods=Unsafe \ + --no-telemetry \ + --no-prometheus \ + --reserved-only \ + --no-hardware-benchmarks \ + --tmp \ + -- \ + --no-telemetry \ + --reserved-only" + - name: Start Reference Node + working-directory: ${{env.BIN_DIR}} + run: | + docker run -d --rm --net=net-${{env.RELEASE_BRANCH_NAME}} \ + -v `pwd`:/app \ + --name ref-node \ + ubuntu:24.04 \ + /bin/sh -c "chmod +x /app/${{env.REF_BIN_FILENAME}} && /app/${{env.REF_BIN_FILENAME}} \ + --rpc-external \ + --rpc-cors=all \ + --rpc-methods=Unsafe \ + --no-telemetry \ + --no-prometheus \ + --reserved-only \ + --no-hardware-benchmarks \ + --tmp \ + -- \ + --no-telemetry \ + --reserved-only" + - name: Prepare Output + working-directory: ${{env.OUTPUT_DIR}} + run: | + REF_VERSION=$(./${{env.REF_BIN_FILENAME}} --version) + BIN_VERSION=$(./${{env.TEST_BIN_FILENAME}} --version) + echo "Metadata comparison against previous full release:" >> ${{env.OUTPUT_FILENAME}} + echo "Date: $(date)" >> ${{env.OUTPUT_FILENAME}} + echo "Ref. version: $REF_VERSION" >> ${{env.OUTPUT_FILENAME}} + echo "Test version: $BIN_VERSION" >> ${{env.OUTPUT_FILENAME}} + echo "----------------------------------------------------------------------" >> ${{env.OUTPUT_FILENAME}} + - name: Compare Metadata + timeout-minutes: 10 + run: | + CMD="docker run --pull always --net=net-${{env.RELEASE_BRANCH_NAME}} jacogr/polkadot-js-tools:0.61.2 metadata ws://ref-node:9944 ws://test-node:9944" + echo -e "Running:\n$CMD" + $CMD >> ${{env.OUTPUT_DIR}}/${{env.OUTPUT_FILENAME}} + cat ${{env.OUTPUT_DIR}}/${{env.OUTPUT_FILENAME}} | egrep -n -i '' + SUMMARY=$(./tools/ci/scripts/extrinsic-ordering-filter.sh ${{env.OUTPUT_DIR}}/${{env.OUTPUT_FILENAME}}) + echo -e "$SUMMARY" + echo -e "$SUMMARY" >> ${{env.OUTPUT_DIR}}/${{env.OUTPUT_FILENAME}} + - name: Show Result + working-directory: ${{env.OUTPUT_DIR}} + run: | + cat ${{env.OUTPUT_FILENAME}} + - name: Upload Artifact + uses: actions/upload-artifact@v4 + with: + name: artifacts-metadata-${{github.run_id}} + path: ${{env.OUTPUT_DIR}}/${{env.OUTPUT_FILENAME}} + if-no-files-found: error + - name: Stop Local Nodes + if: always() + run: | + echo "Attempting to kill all frequency processes..." + docker stop ref-node || true + docker stop test-node || true + docker network rm net-${{env.RELEASE_BRANCH_NAME}} + + wait-for-all-builds: + needs: + [ + build-binaries, + build-runtimes, + compare-metadata, + test-version-matches-release, + build-rust-developer-docs, + build-js-api-augment, + build-js-ethereum-utils, + build-js-schemas, + ] + name: Wait for All Builds to Finish + runs-on: ubuntu-24.04 + outputs: + runtime_filename_dev: ${{needs.build-runtimes.outputs.runtime_filename_dev}} + runtime_filename_mainnet: ${{needs.build-runtimes.outputs.runtime_filename_mainnet}} + runtime_filename_paseo: ${{needs.build-runtimes.outputs.runtime_filename_paseo}} + steps: + - name: Proceed Forward + run: echo "All build jobs have finished, proceeding with the release" + + release-artifacts: + needs: wait-for-all-builds + name: Release Built Artifacts + runs-on: ubuntu-24.04 + container: ghcr.io/frequency-chain/frequency/ci-base-image:1.5.7 + permissions: + contents: write + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + with: + ref: ${{env.RELEASE_BRANCH_NAME}} + fetch-depth: 0 + - name: Full Release? + id: is-full-release + uses: ./.github/workflows/common/is-full-release + with: + version-tag: ${{env.NEW_RELEASE_TAG}} + - name: Get Previous Full Release Version + id: get-previous-full-release-version + uses: ./.github/workflows/common/get-previous-full-release-version + with: + full-release-version-tag: ${{env.LATEST_FULL_RELEASE_TAG}} + - name: Set Env Vars + run: | + echo "PREVIOUS_RELEASE_TAG=${{steps.get-previous-full-release-version.outputs.version}}" >> $GITHUB_ENV + - name: Install Tera CLI + run: | + cargo install --locked --git https://github.com/chevdor/tera-cli + echo "PATH=$HOME/.cargo/bin:$PATH" >> $GITHUB_ENV + - name: Verify Tera CLI Install + run: | + which tera + tera --version + - name: Build Changelog + id: build-changelog + uses: mikepenz/release-changelog-builder-action@e92187bd633e680ebfdd15961a7c30b2d097e7ad + env: + GITHUB_TOKEN: ${{ github.token }} + with: + fromTag: ${{env.PREVIOUS_RELEASE_TAG}} + toTag: ${{env.NEW_RELEASE_TAG}} + configurationJson: | + { + "categories": [ + { + "title": "### Breaking Changes|n|", + "labels": ["change/breaking"] + }, + { + "title": "### Major Changes|n|", + "labels": ["change/major"] + }, + { + "title": "### Storage Migrations|n|", + "labels": ["change/storage-migration"] + } + ], + "template": "#{{CHANGELOG}}|n||n|### Additional Changes|n||n| #{{UNCATEGORIZED}}", + "pr_template": "- #{{TITLE}} ##{{NUMBER}}", + "empty_template": "- No changes", + "transformers": [ + { + "pattern": "[\\-\\*] (.*)", + "target": "- $1|n|" + } + ] + } + - name: Sanitize Changelog + id: sanitize-changelog + shell: bash + env: + CHANGELOG: ${{steps.build-changelog.outputs.changelog}} + run: | + echo "-------------------------------------------------" + clean="${CHANGELOG//[\`\[\]$'\n']/}" + echo "sanitized: $clean" + echo "sanitized=$clean" >> $GITHUB_OUTPUT + - name: Get Polkadot Version + id: polkadot-version + run: echo "version=$(make version-polkadot)" >> $GITHUB_OUTPUT + - name: Get Rust Version + id: rust-version + run: echo "version=$(rustc --version | cut -f 2 -d " ")" >> $GITHUB_OUTPUT + - name: Download Artifacts + id: download + uses: actions/download-artifact@v4 + with: + pattern: artifacts-*-${{github.run_id}} + path: /tmp + merge-multiple: true + - name: Download api-augment artifacts + id: download-js + uses: actions/download-artifact@v4 + with: + name: js-api-augment-${{github.run_id}} + path: /tmp/polkadot-api-types-json + - name: List Downloaded Artifacts + working-directory: /tmp + run: | + ls -la + - name: Install subwasm + run: | + cargo install --locked --git https://github.com/chevdor/subwasm --tag v0.19.1 --force + subwasm --version + - name: Get Runtimes Info + id: get-runtimes-info + working-directory: /tmp + # Do NOT produce the dev version. That doesn't need to be part of the release notes, just in the artifacts + run: | + runtime_filename_paseo=${{needs.wait-for-all-builds.outputs.runtime_filename_paseo}} + runtime_info_paseo=$(subwasm info $runtime_filename_paseo | sed -Ez '$ s/\n+$//' | tr '\n' '|') + echo "runtime_info_paseo=$runtime_info_paseo" >> $GITHUB_OUTPUT + runtime_filename_mainnet=${{needs.wait-for-all-builds.outputs.runtime_filename_mainnet}} + runtime_info_mainnet=$(subwasm info $runtime_filename_mainnet | sed -Ez '$ s/\n+$//' | tr '\n' '|') + echo "runtime_info_mainnet=$runtime_info_mainnet" >> $GITHUB_OUTPUT + - name: Generate Release Notes + working-directory: tools/ci/release-notes + env: + CHANGELOG: ${{steps.sanitize-changelog.outputs.sanitized}} + RUNTIME_INFO_PASEO: ${{steps.get-runtimes-info.outputs.runtime_info_paseo}} + RUNTIME_INFO_MAINNET: ${{steps.get-runtimes-info.outputs.runtime_info_mainnet}} + IS_FULL_RELEASE: ${{steps.is-full-release.outputs.is-full-release}} + run: | + ./build-release-notes.sh '${{steps.polkadot-version.outputs.version}}' '${{steps.rust-version.outputs.version}}' \ + "${CHANGELOG}" \ + "${RUNTIME_INFO_MAINNET}" \ + "${RUNTIME_INFO_PASEO}" \ + "${IS_FULL_RELEASE}" \ + "/tmp/metadata-compare.txt" \ + > release-notes.md + - name: Publish Release Candidate on GitHub + if: steps.is-full-release.outputs.is-full-release != 'true' + uses: softprops/action-gh-release@da05d552573ad5aba039eaac05058a918a7bf631 + with: + name: "[Release Candidate] ${{env.NEW_RELEASE_TAG}}" + prerelease: true + body_path: tools/ci/release-notes/release-notes.md + tag_name: ${{env.NEW_RELEASE_TAG}} + files: | + /tmp/frequency*.* + /tmp/metadata-compare* + /tmp/polkadot-api-types-json/json/types.json + - name: Publish Full Release on GitHub + if: steps.is-full-release.outputs.is-full-release == 'true' + uses: softprops/action-gh-release@da05d552573ad5aba039eaac05058a918a7bf631 + with: + body_path: tools/ci/release-notes/release-notes.md + tag_name: ${{env.NEW_RELEASE_TAG}} + files: | + /tmp/frequency*.* + /tmp/metadata-compare* + /tmp/polkadot-api-types-json/json/types.json + - name: Get Latest Commit + id: get-latest-commit + run: | + set -x + latest_commit_sha=$(git rev-parse HEAD) + echo "sha=$latest_commit_sha" >> $GITHUB_OUTPUT + - name: Update Git Latest Tag + if: | + steps.is-full-release.outputs.is-full-release == 'true' && + env.TEST_RUN != 'true' + uses: rickstaa/action-create-tag@88dbf7ff6fe2405f8e8f6c6fdfd78829bc631f83 + with: + commit_sha: ${{steps.get-latest-commit.outputs.sha}} + tag: ${{env.LATEST_FULL_RELEASE_TAG}} + force_push_tag: true + message: Latest full release + - name: Dispatch Auto-signer Workflow + if: env.TEST_RUN != 'true' + uses: actions/github-script@v7 + with: + github-token: ${{secrets.GHA_WORKFLOW_TRIGGER}} + script: | + await github.rest.actions.createWorkflowDispatch({ + owner: 'frequency-chain', + repo: 'metadata-portal', + workflow_id: 'auto-sign.yml', + ref: 'main' + }) + + release-node-images: + needs: wait-for-all-builds + name: Release Node Docker Image for ${{matrix.network}} + strategy: + fail-fast: true + matrix: + network: [testnet, mainnet] + include: + - network: testnet + build-profile: release + release-file-name-prefix: frequency-testnet + - network: mainnet + build-profile: release + release-file-name-prefix: frequency + env: + DOCKER_HUB_PROFILE: frequencychain + IMAGE_NAME: parachain-node + runs-on: ubuntu-24.04 + steps: + - name: Set Env Vars + run: | + echo "BIN_DIR=target/${{matrix.build-profile}}" >> $GITHUB_ENV + echo "BUILT_BIN_FILENAME=frequency" >> $GITHUB_ENV + + - name: Check Out Repo + uses: actions/checkout@v4 + with: + ref: ${{env.RELEASE_BRANCH_NAME}} + + - name: Full Release? + id: is-full-release + uses: ./.github/workflows/common/is-full-release + with: + version-tag: ${{env.NEW_RELEASE_TAG}} + + # Download binaries for each architecture + - name: Download amd64 Binary + id: download-amd64 + uses: actions/download-artifact@v4 + with: + name: artifacts-binary-${{matrix.network}}-amd64-${{github.run_id}} + path: ./binaries-amd64 + + - name: Download arm64 Binary + id: download-arm64 + uses: actions/download-artifact@v4 + with: + name: artifacts-binary-${{matrix.network}}-arm64-${{github.run_id}} + path: ./binaries-arm64 + + # Create directory structure for Docker build context + - name: Prepare Binary and Docker Structure + run: | + # Create directory structure + mkdir -p ./docker-build/linux/amd64/ + mkdir -p ./docker-build/linux/arm64/ + mkdir -p ./docker-build/scripts/ + + cp scripts/healthcheck.sh ./docker-build/scripts/ || (echo "ERROR: healthcheck.sh not found" && false) + + # Copy binaries to the correct location + mv ./binaries-amd64/${{matrix.release-file-name-prefix}}.amd64 ./docker-build/linux/amd64/frequency + mv ./binaries-arm64/${{matrix.release-file-name-prefix}}.arm64 ./docker-build/linux/arm64/frequency + + # Make binaries executable + chmod +x ./docker-build/linux/amd64/frequency + chmod +x ./docker-build/linux/arm64/frequency + + echo "Binary structure prepared:" + ls -la ./docker-build/linux/amd64/ + ls -la ./docker-build/linux/arm64/ + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + with: + platforms: arm64,amd64 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{secrets.DOCKERHUB_USERNAME}} + password: ${{secrets.DOCKERHUB_TOKEN}} + + # Build and push using the multi-arch Dockerfile + - name: Build and Push Multi-Platform Image + uses: docker/build-push-action@v6 + with: + context: ./docker-build + platforms: linux/amd64,linux/arm64 + push: ${{env.TEST_RUN != 'true'}} + file: ./docker/${{env.IMAGE_NAME}}.dockerfile + tags: | + ${{env.DOCKER_HUB_PROFILE}}/${{env.IMAGE_NAME}}-${{matrix.network}}:${{env.NEW_RELEASE_TAG}} + + - name: Update DockerHub Latest Tag + if: steps.is-full-release.outputs.is-full-release == 'true' + uses: docker/build-push-action@v6 + with: + context: ./docker-build + platforms: linux/amd64,linux/arm64 + push: ${{env.TEST_RUN != 'true'}} + file: ./docker/${{env.IMAGE_NAME}}.dockerfile + tags: | + ${{env.DOCKER_HUB_PROFILE}}/${{env.IMAGE_NAME}}-${{matrix.network}}:latest + + - name: Update DockerHub Description + if: env.TEST_RUN != 'true' + uses: peter-evans/dockerhub-description@e98e4d1628a5f3be2be7c231e50981aee98723ae + with: + username: ${{secrets.DOCKERHUB_USERNAME}} + password: ${{secrets.DOCKERHUB_TOKEN}} + repository: ${{env.DOCKER_HUB_PROFILE}}/${{env.IMAGE_NAME}}-${{matrix.network}} + readme-filepath: docker/${{env.IMAGE_NAME}}-${{matrix.network}}.overview.md + + release-dev-images: + needs: wait-for-all-builds + name: Release Dev Docker Image for ${{matrix.node}} + strategy: + fail-fast: true + matrix: + node: [collator-node-local, standalone-node] + build-profile: [release] + include: + - node: collator-node-local + network: local + release-file-name-prefix: frequency-local + - node: standalone-node + network: dev + release-file-name-prefix: frequency-dev + env: + DOCKER_HUB_PROFILE: frequencychain + runs-on: ubuntu-24.04 + steps: + - name: Set Env Vars + run: | + echo "BIN_DIR=target/${{matrix.build-profile}}" >> $GITHUB_ENV + echo "BUILT_BIN_FILENAME=frequency" >> $GITHUB_ENV + + - name: Check Out Repo + uses: actions/checkout@v4 + with: + ref: ${{env.RELEASE_BRANCH_NAME}} + + - name: Full Release? + id: is-full-release + uses: ./.github/workflows/common/is-full-release + with: + version-tag: ${{env.NEW_RELEASE_TAG}} + + # Download binaries for each architecture + - name: Download amd64 Binary + id: download-amd64 + uses: actions/download-artifact@v4 + with: + name: artifacts-binary-${{matrix.network}}-amd64-${{github.run_id}} + path: ./binaries-amd64 + + - name: Download arm64 Binary + id: download-arm64 + uses: actions/download-artifact@v4 + with: + name: artifacts-binary-${{matrix.network}}-arm64-${{github.run_id}} + path: ./binaries-arm64 + + # Create directory structure for Docker build context + - name: Prepare Binary and Docker Structure + run: | + mkdir -p ./docker-build/linux/amd64/ + mkdir -p ./docker-build/linux/arm64/ + mkdir -p ./docker-build/scripts/ + mkdir -p ./docker-build/resources/ + + # Copy scripts needed for the Docker image + cp scripts/healthcheck.sh ./docker-build/scripts/ || (echo "ERROR: healthcheck.sh not found" && false) + cp docker/frequency-start.sh ./docker-build/scripts/ || (echo "ERROR: frequency-start.sh not found" && false) + cp scripts/init.sh ./docker-build/scripts/ || (echo "ERROR: init.sh not found" && false) + cp scripts/run_collator.sh ./docker-build/scripts/ || (echo "ERROR: run_collator.sh not found" && false) + + # Copy resources if needed + cp -r resources/* ./docker-build/resources/ || (echo "ERROR: resources directory not found" && false) + + # Move binaries to the right place + ls -la ./binaries-amd64/ + mv ./binaries-amd64/${{matrix.release-file-name-prefix}}.amd64 ./docker-build/linux/amd64/frequency + ls -la ./binaries-arm64/ + mv ./binaries-arm64/${{matrix.release-file-name-prefix}}.arm64 ./docker-build/linux/arm64/frequency + + chmod +x ./docker-build/linux/amd64/frequency + chmod +x ./docker-build/linux/arm64/frequency + + echo "Binary structure prepared:" + ls -la ./docker-build/linux/amd64/ + ls -la ./docker-build/linux/arm64/ + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + with: + platforms: arm64,amd64 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{secrets.DOCKERHUB_USERNAME}} + password: ${{secrets.DOCKERHUB_TOKEN}} + + # Build and push multi-arch images + - name: Build and Push Multi-Platform Image + uses: docker/build-push-action@v6 + with: + context: ./docker-build + platforms: linux/amd64,linux/arm64 + push: ${{env.TEST_RUN != 'true'}} + file: ./docker/${{matrix.node}}.dockerfile + tags: | + ${{env.DOCKER_HUB_PROFILE}}/${{matrix.node}}:${{env.NEW_RELEASE_TAG}} + + - name: Update DockerHub Latest Tag + if: steps.is-full-release.outputs.is-full-release == 'true' + uses: docker/build-push-action@v6 + with: + context: ./docker-build + platforms: linux/amd64,linux/arm64 + push: ${{env.TEST_RUN != 'true'}} + file: ./docker/${{matrix.node}}.dockerfile + tags: | + ${{env.DOCKER_HUB_PROFILE}}/${{matrix.node}}:latest + + - name: Update DockerHub Description + if: env.TEST_RUN != 'true' + uses: peter-evans/dockerhub-description@e98e4d1628a5f3be2be7c231e50981aee98723ae + with: + username: ${{secrets.DOCKERHUB_USERNAME}} + password: ${{secrets.DOCKERHUB_TOKEN}} + repository: ${{env.DOCKER_HUB_PROFILE}}/${{matrix.node}} + readme-filepath: docker/${{matrix.node}}.overview.md + + # Published to https://frequency-chain.github.io/frequency/ + release-rust-developer-docs: + needs: wait-for-all-builds + name: Release Rust Developer Docs + runs-on: ubuntu-24.04 + permissions: + contents: read + pages: write + id-token: write + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - name: Deploy to GitHub Pages + if: env.TEST_RUN != 'true' + id: deployment + uses: actions/deploy-pages@v4 + + release-js-api-augment: + needs: wait-for-all-builds + name: Release JS API Augment + runs-on: ubuntu-24.04 + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + with: + ref: ${{env.RELEASE_BRANCH_NAME}} + - name: Full Release? + id: is-full-release + uses: ./.github/workflows/common/is-full-release + with: + version-tag: ${{env.NEW_RELEASE_TAG}} + - name: Set up NodeJs + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: "npm" + registry-url: "https://registry.npmjs.org" + cache-dependency-path: js/api-augment/package-lock.json + - name: Download Dist Dir + id: download + uses: actions/download-artifact@v4 + with: + name: js-api-augment-${{github.run_id}} + path: js/api-augment/dist + - name: Version Package + if: env.TEST_RUN != 'true' + run: npm version --new-version "${{env.NEW_RELEASE_TAG}}" --no-git-tag-version + working-directory: js/api-augment/dist + - name: Release on NPM @latest + if: env.TEST_RUN != 'true' && + steps.is-full-release.outputs.is-full-release == 'true' + run: npm publish --tag latest --access public + working-directory: ./js/api-augment/dist + env: + NODE_AUTH_TOKEN: ${{secrets.NODE_AUTH_TOKEN}} + - name: Release Candidate on NPM + if: env.TEST_RUN != 'true' && + steps.is-full-release.outputs.is-full-release != 'true' + run: npm publish --tag next --access public + working-directory: ./js/api-augment/dist + env: + NODE_AUTH_TOKEN: ${{secrets.NODE_AUTH_TOKEN}} + + release-js-ethereum-utils: + needs: wait-for-all-builds + name: Release JS Ethereum utils + runs-on: ubuntu-24.04 + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + with: + ref: ${{env.RELEASE_BRANCH_NAME}} + - name: Full Release? + id: is-full-release + uses: ./.github/workflows/common/is-full-release + with: + version-tag: ${{env.NEW_RELEASE_TAG}} + - name: Set up NodeJs + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: "npm" + registry-url: "https://registry.npmjs.org" + cache-dependency-path: js/ethereum-utils/package-lock.json + - name: Download Dist Dir + id: download + uses: actions/download-artifact@v4 + with: + name: js-ethereum-utils-${{github.run_id}} + path: js/ethereum-utils/dist + - name: Version Package + if: env.TEST_RUN != 'true' + run: npm version --new-version "${{env.NEW_RELEASE_TAG}}" --no-git-tag-version + working-directory: js/ethereum-utils/dist + - name: Release on NPM @latest + if: env.TEST_RUN != 'true' && + steps.is-full-release.outputs.is-full-release == 'true' + run: npm publish --tag latest --access public + working-directory: ./js/ethereum-utils/dist + env: + NODE_AUTH_TOKEN: ${{secrets.NODE_AUTH_TOKEN}} + - name: Release Candidate on NPM + if: env.TEST_RUN != 'true' && + steps.is-full-release.outputs.is-full-release != 'true' + run: npm publish --tag next --access public + working-directory: ./js/ethereum-utils/dist + env: + NODE_AUTH_TOKEN: ${{secrets.NODE_AUTH_TOKEN}} + + release-js-schemas: + needs: wait-for-all-builds + name: Release JS Schemas + runs-on: ubuntu-24.04 + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + with: + ref: ${{env.RELEASE_BRANCH_NAME}} + - name: Full Release? + id: is-full-release + uses: ./.github/workflows/common/is-full-release + with: + version-tag: ${{env.NEW_RELEASE_TAG}} + - name: Set up NodeJs + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: "npm" + registry-url: "https://registry.npmjs.org" + cache-dependency-path: js/schemas/package-lock.json + - name: Download Dist Dir + id: download + uses: actions/download-artifact@v4 + with: + name: js-schemas-${{github.run_id}} + path: js/schemas/dist + - name: Version Package + if: env.TEST_RUN != 'true' + run: npm version --new-version "${{env.NEW_RELEASE_TAG}}" --no-git-tag-version + working-directory: js/schemas/dist + - name: Release on NPM @latest + if: env.TEST_RUN != 'true' && + steps.is-full-release.outputs.is-full-release == 'true' + run: npm publish --tag latest --access public + working-directory: ./js/schemas/dist + env: + NODE_AUTH_TOKEN: ${{secrets.NODE_AUTH_TOKEN}} + - name: Release Candidate on NPM + if: env.TEST_RUN != 'true' && + steps.is-full-release.outputs.is-full-release != 'true' + run: npm publish --tag next --access public + working-directory: ./js/schemas/dist + env: + NODE_AUTH_TOKEN: ${{secrets.NODE_AUTH_TOKEN}} diff --git a/.github/workflows/verify-pr-commit.yml b/.github/workflows/verify-pr-commit.yml new file mode 100644 index 0000000000..cc3294462a --- /dev/null +++ b/.github/workflows/verify-pr-commit.yml @@ -0,0 +1,926 @@ +# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json +name: Verify PR Commit +concurrency: + group: ${{github.workflow}}-${{github.ref}} + cancel-in-progress: true +on: + pull_request: + branches: + - main + - "**-development" # Feature Branches should suffix with -development + - hotfix/** +# Set default permissions as restrictive +permissions: + contents: read + packages: read +env: + BIN_DIR_DEBUG: target/debug + PR_LABEL_METADATA_CHANGED: metadata-changed + PR_LABEL_METADATA_VERSION_NOT_INCREMENTED: metadata-version-not-incremented + NIGHTLY_TOOLCHAIN: nightly-2025-04-03 + +jobs: + changes: + name: Determine Changed Files + runs-on: ubuntu-24.04 + outputs: + rust: ${{steps.filter.outputs.rust}} + build-binary: ${{steps.filter.outputs.build-binary}} + cargo-lock: ${{steps.filter.outputs.cargo-lock}} + run-e2e: ${{steps.filter.outputs.run-e2e}} + ci-docker-image: ${{steps.filter.outputs.ci-docker-image}} + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + - name: Check for Changed Files + uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 + id: filter + with: + filters: | + rust: + - '**/*.rs' + - '**/*.hbs' + - '.rustfmt.toml' + - '**/Cargo.toml' + - '**/Cargo.lock' + build-binary: + - '**/*.rs' + - '**/*.hbs' + - '.rustfmt.toml' + - '**/Cargo.toml' + - '**/Cargo.lock' + - 'js/api-augment/**' + - 'js/ethereum-utils/**' + - 'e2e/**/*.{ts,json}' + cargo-lock: + - '**/Cargo.toml' + - '**/Cargo.lock' + run-e2e: + - '**/*.rs' + - '**/Cargo.toml' + - 'e2e/**/*.{ts,json}' + + clear-metadata-labels: + name: Clear Metadata Labels + runs-on: ubuntu-24.04 + permissions: + pull-requests: write + steps: + - name: Clear Metadata Changed Label + if: contains(github.event.pull_request.labels.*.name, env.PR_LABEL_METADATA_CHANGED) + uses: RobinJesba/GitHub-Labeler-Action@2f69380bbf2ee60b2f0893ef0f40582c9a34a64d + with: + GITHUB_TOKEN: ${{ github.token }} + LABELS_TO_REMOVE: ${{env.PR_LABEL_METADATA_CHANGED}} + - name: Clear Metadata Version Not Incremented Label + if: contains(github.event.pull_request.labels.*.name, env.PR_LABEL_METADATA_VERSION_NOT_INCREMENTED) + uses: RobinJesba/GitHub-Labeler-Action@2f69380bbf2ee60b2f0893ef0f40582c9a34a64d + with: + GITHUB_TOKEN: ${{ github.token }} + LABELS_TO_REMOVE: ${{env.PR_LABEL_METADATA_VERSION_NOT_INCREMENTED}} + + # Workaround to handle skipped required check inside matrix + # https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/troubleshooting-required-status-checks + build-binaries-dummy: + needs: changes + if: needs.changes.outputs.build-binary != 'true' + runs-on: ubuntu-24.04 + name: Build ${{matrix.network}} Binary for ${{matrix.arch}} on ${{matrix.branch_alias}} Branch + strategy: + matrix: + # Match this to the real build-binaries job except the runners should all be GitHub not Ubicloud + include: + # amd64 builds for all networks + - network: dev + build-profile: debug + git_branch: ${{github.head_ref}} + spec: frequency-no-relay + branch_alias: pr + arch: amd64 + runner: ubuntu-24.04 + - network: local + build-profile: debug + git_branch: ${{github.head_ref}} + spec: frequency-local + branch_alias: pr + arch: amd64 + runner: ubuntu-24.04 + - network: local + build-profile: debug + git_branch: main + spec: frequency-local + branch_alias: main + arch: amd64 + runner: ubuntu-24.04 + - network: testnet + build-profile: debug + spec: frequency-testnet + branch_alias: pr + arch: amd64 + runner: ubuntu-24.04 + - network: mainnet + build-profile: debug + spec: frequency + branch_alias: pr + arch: amd64 + runner: ubuntu-24.04 + + # arm64 build only for mainnet + - network: mainnet + build-profile: debug + spec: frequency + branch_alias: pr + arch: arm64 + runner: ubuntu-24.04 + steps: + - run: echo "Just a dummy matrix to satisfy GitHub required checks that were skipped" + + build-binaries: + needs: changes + if: needs.changes.outputs.build-binary == 'true' + name: Build ${{matrix.network}} Binary for ${{matrix.arch}} on ${{matrix.branch_alias}} Branch + strategy: + fail-fast: true + matrix: + include: + # amd64 builds for all networks + - network: dev + build-profile: debug + git_branch: ${{github.head_ref}} + spec: frequency-no-relay + branch_alias: pr + arch: amd64 + runner: ubicloud-standard-8 + - network: local + build-profile: debug + git_branch: ${{github.head_ref}} + spec: frequency-local + branch_alias: pr + arch: amd64 + runner: ubicloud-standard-8 + - network: local + build-profile: debug + git_branch: main + spec: frequency-local + branch_alias: main + arch: amd64 + runner: ubicloud-standard-8 + - network: testnet + build-profile: debug + spec: frequency-testnet + branch_alias: pr + arch: amd64 + runner: ubicloud-standard-16 + - network: mainnet + build-profile: debug + spec: frequency + branch_alias: pr + arch: amd64 + runner: ubicloud-standard-16 + + # arm64 build only for mainnet + - network: mainnet + build-profile: debug + spec: frequency + branch_alias: pr + arch: arm64 + runner: ubicloud-standard-30-arm + runs-on: ${{matrix.runner}} + container: ghcr.io/frequency-chain/frequency/ci-base-image:1.5.7 + env: + NETWORK: mainnet + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + with: + ref: ${{matrix.git_branch}} + - name: Set Env Vars + run: | + export BUILT_BIN_FILENAME=frequency; echo "BUILT_BIN_FILENAME=$BUILT_BIN_FILENAME" >> $GITHUB_ENV + echo "FINAL_BIN_FILENAME=$BUILT_BIN_FILENAME.${{matrix.network}}.${{matrix.arch}}.${{matrix.spec}}.${{matrix.branch_alias}}" >> $GITHUB_ENV + # # XXX Keep this step as it lets us skip full binary builds during development/testing + # - name: Cache Binary for Testing + # id: cache-binary + # uses: actions/cache@v3 + # with: + # path: target/${{matrix.build-profile}}/${{env.FINAL_BIN_FILENAME}} + # key: binaries-${{runner.os}}-${{env.NETWORK}}-${{github.head_ref}} + - name: Compile Binary for ${{matrix.network}} on ${{matrix.arch}} + if: steps.cache-binary.outputs.cache-hit != 'true' + # The various rust flags here are for faster builds, but are not exactly the same as release builds + run: | + CARGO_INCREMENTAL=0 RUSTFLAGS="-D warnings -C debuginfo=0 -C opt-level=0 -C codegen-units=265" cargo build --locked \ + ${{ matrix.build-profile == 'release' && '--release' || '' }} \ + --features ${{matrix.spec}} + - name: Run Sanity Checks + if: steps.cache-binary.outputs.cache-hit != 'true' + working-directory: target/${{matrix.build-profile}} + run: | + file ${{env.BUILT_BIN_FILENAME}} && \ + ./${{env.BUILT_BIN_FILENAME}} --version + - name: Rename Reference Binary + if: steps.cache-binary.outputs.cache-hit != 'true' + working-directory: target/${{matrix.build-profile}} + run: cp ${{env.BUILT_BIN_FILENAME}} ${{env.FINAL_BIN_FILENAME}} + - name: Upload Artifact + uses: actions/upload-artifact@v4 + with: + name: artifacts-binary-${{matrix.network}}-${{matrix.arch}}-${{matrix.branch_alias}}-${{github.run_id}} + path: target/${{matrix.build-profile}}/${{env.FINAL_BIN_FILENAME}}* + if-no-files-found: error + + check-for-vulnerable-crates: + needs: changes + if: needs.changes.outputs.cargo-lock == 'true' + name: Check for Vulnerable Crates + runs-on: ubuntu-24.04 + container: ghcr.io/frequency-chain/frequency/ci-base-image:1.5.7 + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + - name: Set Up Cargo Deny + run: | + cargo install --force --locked cargo-deny@0.17.0 + cargo generate-lockfile + - name: Run Cargo Deny + run: cargo deny check --hide-inclusion-graph -c deny.toml + + verify-rust-code-format: + needs: changes + if: needs.changes.outputs.rust == 'true' + name: Verify Rust Code Format + runs-on: ubuntu-24.04 + container: ghcr.io/frequency-chain/frequency/ci-base-image-nightly:1.5.7 + steps: + - name: Check Out Repository + uses: actions/checkout@v4 + - name: Verify Rust Code Formatting + run: | + rustup +${{env.NIGHTLY_TOOLCHAIN}} show + cargo +${{env.NIGHTLY_TOOLCHAIN}} fmt --check + + lint-rust-code: + needs: changes + if: needs.changes.outputs.rust == 'true' + name: Lint Rust Code + runs-on: ubicloud-standard-4 + container: ghcr.io/frequency-chain/frequency/ci-base-image:1.5.7 + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + - name: Lint + # Fail on warnings + run: | + SKIP_WASM_BUILD=1 cargo clippy \ + --features runtime-benchmarks,frequency-lint-check \ + -- -Dwarnings + + verify-rust-developer-docs: + needs: changes + if: needs.changes.outputs.rust == 'true' + name: Verify Rust Developer Docs + runs-on: ubicloud-standard-4 + container: ghcr.io/frequency-chain/frequency/ci-base-image:1.5.7 + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + - name: Build Docs + run: | + RUSTC_BOOTSTRAP=1 RUSTDOCFLAGS="--enable-index-page --check -Zunstable-options" cargo doc --no-deps --workspace --features frequency + + verify-rust-packages-and-deps: + needs: changes + if: needs.changes.outputs.rust == 'true' + name: Verify Rust Packages and Dependencies + runs-on: ubicloud-standard-4 + container: ghcr.io/frequency-chain/frequency/ci-base-image:1.5.7 + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + - name: Check + run: SKIP_WASM_BUILD= cargo check --features runtime-benchmarks,frequency-lint-check + + run-rust-tests: + needs: changes + if: needs.changes.outputs.rust == 'true' + name: Run Rust Tests + runs-on: ubicloud-standard-8 + container: ghcr.io/frequency-chain/frequency/ci-base-image:1.5.7 + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + - name: Init Git + run: | + git config --global --add safe.directory /__w/frequency/frequency + - name: Run Tests + run: cargo test --features runtime-benchmarks,frequency-lint-check --workspace + + calc-code-coverage: + needs: changes + if: needs.changes.outputs.rust == 'true' + name: Calculate Code Coverage + runs-on: ubicloud-standard-30 + container: ghcr.io/frequency-chain/frequency/ci-base-image:1.5.7 + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + - name: Generate and Upload Code Coverage + id: codecov + uses: ./.github/workflows/common/codecov + with: + code-cov-token: ${{ secrets.CODECOV_TOKEN }} + + # Workaround to handle skipped required check inside matrix + # https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/troubleshooting-required-status-checks + verify-build-runtimes-dummy: + needs: changes + if: needs.changes.outputs.rust != 'true' + name: Verify Build Runtime for ${{matrix.network}} + strategy: + matrix: + # Should match `verify-build-runtimes` + network: [paseo, mainnet] + runs-on: ubuntu-24.04 + steps: + - run: echo "Just a dummy matrix to satisfy GitHub required checks that were skipped" + + verify-build-runtimes: + needs: changes + if: needs.changes.outputs.rust == 'true' + name: Verify Build Runtime for ${{matrix.network}} + strategy: + fail-fast: true + matrix: + # Remember, runtimes are separate for each relay chain + # Also should match `verify-build-runtimes-dummy` + # Only doing paseo-testnet and mainnet + network: [paseo, mainnet] + build-profile: [bench-dev] + runtime-dir: [runtime/frequency] + package: [frequency-runtime] + built-wasm-file-name-prefix: [frequency_runtime] + include: + - network: paseo + chain: frequency-paseo + features: frequency-testnet + wasm-core-version: frequency-testnet + - network: mainnet + chain: frequency + features: frequency + wasm-core-version: frequency + runs-on: ubicloud-standard-8 + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + - name: Install Rust Toolchain + # Match installation steps to CI base docker image + run: | + curl https://sh.rustup.rs -sSf | bash -s -- -y + echo "PATH=$HOME/.cargo/bin:$PATH" >> $GITHUB_ENV + - name: Extract Runtime Spec Version + run: | + echo "RUNTIME_SPEC_VERSION=$(awk '/spec_version:/ {match($0, /[0-9]+/); print substr($0, RSTART, RLENGTH); exit}' \ + ${{matrix.runtime-dir}}/src/lib.rs)" >> $GITHUB_ENV + - name: Validate Extracted Version + shell: bash + run: | + echo "Runtime Spec Version: ${{env.RUNTIME_SPEC_VERSION}}" + [[ $RUNTIME_SPEC_VERSION == ?(-)+([0-9]) ]] || \ + (echo "ERROR: \"${{env.RUNTIME_SPEC_VERSION}}\" is not a valid integer" && exit 1) + - name: Set Env Vars + run: | + echo "WASM_DIR=${{matrix.runtime-dir}}/target/srtool/${{matrix.build-profile}}/wbuild/${{matrix.package}}" >> $GITHUB_ENV + echo "BUILT_WASM_FILENAME=${{matrix.built-wasm-file-name-prefix}}.compact.compressed.wasm" >> $GITHUB_ENV + # # XXX Keep this step as it lets us skip WASM builds during development/testing + # - name: Cache WASM for Testing + # id: cache-wasm + # uses: actions/cache@v3 + # with: + # path: ${{env.WASM_DIR}}/${{env.BUILT_WASM_FILENAME}} + # key: runtimes-${{runner.os}}-${{matrix.network}}-${{github.head_ref}} + - name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{secrets.DOCKERHUB_USERNAME}} + password: ${{secrets.DOCKERHUB_TOKEN}} + - name: Build Deterministic WASM + id: srtool_build + if: steps.cache-wasm.outputs.cache-hit != 'true' + uses: ./.github/workflows/common/srtool + env: + BUILD_OPTS: "--features on-chain-release-build,no-metadata-docs,${{matrix.features}}" + with: + profile: ${{matrix.build-profile}} + package: ${{matrix.package}} + chain: ${{matrix.chain}} + runtime_dir: ${{ matrix.runtime-dir }} + tag: "1.84.1" + - name: Check Deterministic WASM Build Exists + if: steps.cache-wasm.outputs.cache-hit != 'true' + run: | + file ${{ steps.srtool_build.outputs.wasm }} + - name: Install Subwasm + run: | + cargo install --locked --git https://github.com/chevdor/subwasm --tag v0.21.3 --force + subwasm --version + - name: Test WASM file + run: | + subwasm info ${{ steps.srtool_build.outputs.wasm }} + subwasm info ${{ steps.srtool_build.outputs.wasm }} | grep "Core version:.*${{matrix.wasm-core-version}}-${{env.RUNTIME_SPEC_VERSION}}" || \ + (echo "ERROR: WASM Core version didn't match ${{matrix.wasm-core-version}}-${{env.RUNTIME_SPEC_VERSION}}" && exit 1) + + verify-js-api-augment: + needs: build-binaries + name: Verify JS API Augment + runs-on: ubuntu-24.04 + container: ghcr.io/frequency-chain/frequency/ci-base-image:1.5.7 + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + - name: Set Env Vars + run: | + echo "BIN_FILENAME=frequency.local.amd64.frequency-local.pr" >> $GITHUB_ENV + - name: Set up NodeJs + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: "npm" + cache-dependency-path: js/api-augment/package-lock.json + - name: Install Latest Versions + run: npm install # DO NOT use `npm ci` as we want the latest polkadot/api possible + working-directory: js/api-augment + - name: Lint + run: npm run lint + working-directory: js/api-augment + - name: Download Binaries + id: download-binaries + uses: actions/download-artifact@v4 + with: + pattern: artifacts-binary-local-amd64-pr-${{github.run_id}} + path: ${{env.BIN_DIR_DEBUG}} + - name: Extract and List Downloaded Binaries + run: | + download_dir=${{steps.download-binaries.outputs.download-path}} + mv "${download_dir}"/artifacts*/* "${download_dir}" + echo "Download dir: $download_dir" + echo "Downloaded binaries: $(ls -l $download_dir)" + - name: Set Binary Permissions + working-directory: ${{env.BIN_DIR_DEBUG}} + run: | + chmod 755 ${{env.BIN_FILENAME}} + - name: Output Metadata + run: ${{env.BIN_DIR_DEBUG}}/${{env.BIN_FILENAME}} export-metadata --chain=frequency-paseo-local --tmp ./js/api-augment/metadata.json + - name: Build + run: npm run build + working-directory: js/api-augment + - name: Test + run: npm test + working-directory: js/api-augment + - name: Build & Publish Dry Run + run: npm publish --dry-run + working-directory: js/api-augment/dist + - name: Generate npm tarball + run: npm pack + working-directory: js/api-augment/dist + - name: Upload Artifact + uses: actions/upload-artifact@v4 + with: + name: artifacts-api-augment-${{github.run_id}} + path: js/api-augment/dist/frequency-chain-api-augment-0.0.0.tgz + if-no-files-found: error + + verify-js-ethereum-utils: + needs: build-binaries + name: Verify Ethereum utils + runs-on: ubuntu-24.04 + container: ghcr.io/frequency-chain/frequency/ci-base-image:1.5.5 + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + - name: Set up NodeJs + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: "npm" + cache-dependency-path: js/ethereum-utils/package-lock.json + - name: Install Latest Versions + run: npm install + working-directory: js/ethereum-utils + - name: Lint + run: npm run lint + working-directory: js/ethereum-utils + - name: Test + run: npm test + working-directory: js/ethereum-utils + - name: Build + run: npm run build + working-directory: js/ethereum-utils + - name: Build & Publish Dry Run + run: npm publish --dry-run + working-directory: js/ethereum-utils/dist + - name: Generate npm tarball + run: npm pack + working-directory: js/ethereum-utils/dist + - name: Upload Artifact + uses: actions/upload-artifact@v4 + with: + name: artifacts-ethereum-utils-${{github.run_id}} + path: js/ethereum-utils/dist/frequency-chain-ethereum-utils-0.0.0.tgz + if-no-files-found: error + + verify-js-schemas: + name: Verify JS Schemas + runs-on: ubuntu-24.04 + container: ghcr.io/frequency-chain/frequency/ci-base-image:1.5.7 + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + - name: Set up NodeJs + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: "npm" + cache-dependency-path: js/schemas/package-lock.json + - name: Install Latest Versions + run: npm install + working-directory: js/schemas + - name: Lint + run: npm run lint + working-directory: js/schemas + - name: Test + run: npm test + working-directory: js/schemas + - name: Build + run: npm run build + working-directory: js/schemas + - name: Publish Dry Run + run: npm publish --dry-run + working-directory: js/schemas/dist + - name: Generate npm tarball + run: npm pack + working-directory: js/schemas/dist + - name: Upload Artifact + uses: actions/upload-artifact@v4 + with: + name: artifacts-schemas-${{github.run_id}} + path: js/schemas/dist/frequency-chain-schemas-0.0.0.tgz + if-no-files-found: error + + verify-node-docker-images: + needs: build-binaries + name: Verify Node Docker Images + runs-on: ubuntu-24.04 + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + + - name: Download amd64 Binaries + id: download-amd64-binaries + uses: actions/download-artifact@v4 + with: + name: artifacts-binary-mainnet-amd64-pr-${{github.run_id}} + path: ./binaries-amd64 + + # For PR verification, just use the mainnet arm64 build + - name: Download arm64 Binary + id: download-arm64 + uses: actions/download-artifact@v4 + with: + name: artifacts-binary-mainnet-arm64-pr-${{github.run_id}} + path: ./binaries-arm64 + + # Prepare directory structure for multi-platform docker build + - name: Prepare Docker Build Context + run: | + mkdir -p ./docker-build/linux/amd64/ + mkdir -p ./docker-build/linux/arm64/ + mkdir -p ./docker-build/scripts/ + + # Copy scripts needed for the Docker image + cp scripts/healthcheck.sh ./docker-build/scripts/ || (echo "ERROR: healthcheck.sh not found" && false) + cp docker/frequency-start.sh ./docker-build/scripts/ || (echo "ERROR: frequency-start.sh not found" && false) + cp scripts/init.sh ./docker-build/scripts/ || (echo "ERROR: init.sh not found" && false) + cp scripts/run_collator.sh ./docker-build/scripts/ || (echo "ERROR: run_collator.sh not found" && false) + + # Copy resources if needed + mkdir -p ./docker-build/resources/ + cp -r resources/* ./docker-build/resources/ || (echo "ERROR: resources directory not found" && false) + + # Move binaries to the right place + ls -la ./binaries-amd64/ + mv ./binaries-amd64/frequency.mainnet.amd64.frequency.pr ./docker-build/linux/amd64/frequency + ls -la ./binaries-arm64/ + mv ./binaries-arm64/frequency.mainnet.arm64.frequency.pr ./docker-build/linux/arm64/frequency + + chmod +x ./docker-build/linux/amd64/frequency + chmod +x ./docker-build/linux/arm64/frequency + + echo "Binary structure prepared:" + ls -la ./docker-build/linux/amd64/ + ls -la ./docker-build/linux/arm64/ + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + with: + platforms: "arm64,amd64" + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + # Uses the mainnet binary as this is testing the docker setup + - name: Build standalone node image + uses: docker/build-push-action@v6 + with: + context: ./docker-build + push: false + platforms: linux/amd64 # Only amd64 for the pr verify + file: ./docker/standalone-node.dockerfile + + # Uses the mainnet binary as this is testing the docker setup + - name: Build collator image for local relay chain + uses: docker/build-push-action@v6 + with: + context: ./docker-build + push: false + platforms: linux/amd64 # Only amd64 for the pr verify + file: ./docker/collator-node-local.dockerfile + + - name: Build parachain node image + uses: docker/build-push-action@v6 + with: + context: ./docker-build + push: false + platforms: linux/amd64,linux/arm64 # Testing both arch here + file: ./docker/parachain-node.dockerfile + + execute-binary-checks-dummy: + needs: build-binaries-dummy + name: Execute Mainnet Binary Checks for ${{matrix.arch}} + if: needs.changes.outputs.build-binary != 'true' + strategy: + fail-fast: true + matrix: + arch: [amd64, arm64] + bin-dir: [target/debug] + include: + - arch: amd64 + runner: ubuntu-24.04 + - arch: arm64 + runner: ubuntu-24.04-arm + runs-on: ubuntu-24.04 + steps: + - run: echo "Just a dummy matrix to satisfy GitHub required checks that were skipped" + + execute-binary-checks: + needs: build-binaries + name: Execute Mainnet Binary Checks for ${{matrix.arch}} + # If you change, also update execute-binary-checks-dummy + strategy: + fail-fast: true + matrix: + arch: [amd64, arm64] + bin-dir: [target/debug] + include: + - arch: amd64 + runner: ubuntu-24.04 + - arch: arm64 + runner: ubuntu-24.04-arm + runs-on: ${{matrix.runner}} + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + - name: Set Env Vars + run: | + echo "TEST_BIN_FILENAME=frequency.mainnet.${{matrix.arch}}.frequency.pr" >> $GITHUB_ENV + - name: Download Binaries + id: download-binaries + uses: actions/download-artifact@v4 + with: + pattern: artifacts-binary-mainnet-${{matrix.arch}}-pr-${{github.run_id}} + path: ${{matrix.bin-dir}} + - name: List Downloaded Binaries + run: | + download_dir=${{steps.download-binaries.outputs.download-path}} + mv "${download_dir}"/artifacts*/* "${download_dir}" + echo "Download dir: $download_dir" + echo "Downloaded binaries: $(ls -l $download_dir)" + - name: Set Binary Permissions + working-directory: ${{matrix.bin-dir}} + run: | + chmod 755 ${{env.TEST_BIN_FILENAME}} + - name: Output Binary Version + working-directory: ${{matrix.bin-dir}} + run: | + file ./${{env.TEST_BIN_FILENAME}} && ./${{env.TEST_BIN_FILENAME}} --version + + check-metadata-and-spec-version: + needs: build-binaries + name: Check Metadata and Spec Version + runs-on: ubuntu-24.04 + container: ghcr.io/frequency-chain/frequency/ci-base-image:1.5.7 + permissions: + pull-requests: write + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Set Env Vars + run: | + echo "TEST_BIN_FILENAME=frequency.local.amd64.frequency-local.pr" >> $GITHUB_ENV + echo "REF_BIN_FILENAME=frequency.local.amd64.frequency-local.main" >> $GITHUB_ENV + - name: Download Binaries + id: download-binaries + uses: actions/download-artifact@v4 + with: + pattern: artifacts-binary-local-*-${{github.run_id}} + path: ${{env.BIN_DIR_DEBUG}} + merge-multiple: true + - name: List Downloaded Binaries + run: | + download_dir=${{steps.download-binaries.outputs.download-path}} + echo "Download dir: $download_dir" + echo "Downloaded binaries: $(ls -l $download_dir)" + - name: Set Binary Permissions + working-directory: ${{env.BIN_DIR_DEBUG}} + run: | + chmod 755 $TEST_BIN_FILENAME + chmod 755 $REF_BIN_FILENAME + - name: Compare Metadata + id: compare-metadata + working-directory: ${{env.BIN_DIR_DEBUG}} + run: | + set -x + ./$REF_BIN_FILENAME export-metadata --chain=frequency-paseo-local --tmp metadata-ref.json + metadata_ref=$(cat metadata-ref.json | jq -r .result) + ./$TEST_BIN_FILENAME export-metadata --chain=frequency-paseo-local --tmp metadata.json + metadata=$(cat metadata.json | jq -r .result) + matches=$([ "$metadata" = "$metadata_ref" ] && echo 'true' || echo 'false') + echo "Metadata matches?: $match" + echo "metadata_matches=$matches" >> $GITHUB_OUTPUT + - name: Assign Metadata Changed Label + if: steps.compare-metadata.outputs.metadata_matches != 'true' + uses: RobinJesba/GitHub-Labeler-Action@2f69380bbf2ee60b2f0893ef0f40582c9a34a64d + with: + GITHUB_TOKEN: ${{ github.token }} + LABELS_TO_ADD: ${{env.PR_LABEL_METADATA_CHANGED}} + - name: Check Spec Version + if: steps.compare-metadata.outputs.metadata_matches != 'true' + id: check-spec-version + working-directory: ${{env.BIN_DIR_DEBUG}} + run: | + set -x + spec_version_ref=$(./$REF_BIN_FILENAME export-runtime-version | jq -r .specVersion) + spec_version=$(./$TEST_BIN_FILENAME export-runtime-version | jq -r .specVersion) + incremented=$([ $spec_version -gt $spec_version_ref ] && echo 'true' || echo 'false') + echo "spec_version_ref=$spec_version_ref" >> $GITHUB_OUTPUT + echo "spec_version=$spec_version" >> $GITHUB_OUTPUT + echo "metadata_version_incremented=$incremented" >> $GITHUB_OUTPUT + - name: Assign Metadata Version Not Incremented Label + if: | + (steps.compare-metadata.outputs.metadata_matches != 'true') && + (steps.check-spec-version.outputs.metadata_version_incremented != 'true') + uses: RobinJesba/GitHub-Labeler-Action@2f69380bbf2ee60b2f0893ef0f40582c9a34a64d + with: + GITHUB_TOKEN: ${{ github.token }} + LABELS_TO_ADD: ${{env.PR_LABEL_METADATA_VERSION_NOT_INCREMENTED}} + - name: Fail CI + if: | + (steps.compare-metadata.outputs.metadata_matches != 'true') && + (steps.check-spec-version.outputs.metadata_version_incremented != 'true') + working-directory: ${{env.BIN_DIR_DEBUG}} + run: | + spec_version=${{steps.check-spec-version.outputs.spec_version}} + spec_version_ref=${{steps.check-spec-version.outputs.spec_version_ref}} + echo "ERROR: When metadata is updated, the new spec version ($spec_version)\ + must be greater than the latest version on main branch ($spec_version_ref)" + exit 1 + + run-e2e: + if: needs.changes.outputs.run-e2e == 'true' + needs: [build-binaries, verify-js-api-augment, verify-js-ethereum-utils] + name: Run E2E Tests + runs-on: ubuntu-24.04 + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Set Env Vars + run: | + echo "BIN_FILENAME=frequency.dev.amd64.frequency-no-relay.pr" >> $GITHUB_ENV + echo "FREQUENCY_PROCESS_NAME=frequency" >> $GITHUB_ENV + - name: Download Binaries + id: download-binaries + uses: actions/download-artifact@v4 + with: + pattern: artifacts-binary-dev-amd64-pr-${{github.run_id}} + path: ${{env.BIN_DIR_DEBUG}} + - name: List Downloaded Binaries + run: | + download_dir=${{steps.download-binaries.outputs.download-path}} + mv "${download_dir}"/artifacts*/* "${download_dir}" + echo "Download dir: $download_dir" + echo "Downloaded binaries: $(ls -l $download_dir)" + - name: Download api-augment tarball + uses: actions/download-artifact@v4 + with: + name: artifacts-api-augment-${{github.run_id}} + path: js/api-augment/dist + - name: Download ethereum-utils tarball + uses: actions/download-artifact@v4 + with: + name: artifacts-ethereum-utils-${{github.run_id}} + path: js/ethereum-utils/dist + - name: Set Binaries Permissions + working-directory: ${{env.BIN_DIR_DEBUG}} + run: | + chmod 755 $BIN_FILENAME + - name: Start Local Node + working-directory: ${{env.BIN_DIR_DEBUG}} + run: | + ./${{env.BIN_FILENAME}} \ + -lruntime=debug \ + --dev \ + --sealing=instant \ + --wasm-execution=compiled \ + --no-telemetry \ + --no-prometheus \ + --port $((30333)) \ + --rpc-port $((9944)) \ + --rpc-external \ + --rpc-cors all \ + --rpc-methods=Unsafe \ + --tmp \ + & + - name: Set up NodeJs + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: "npm" + cache-dependency-path: e2e/package-lock.json + - name: Install Built api-augment and ethereum-utils + run: npm install ../js/api-augment/dist/frequency-chain-api-augment-0.0.0.tgz ../js/ethereum-utils/dist/frequency-chain-ethereum-utils-0.0.0.tgz + working-directory: e2e + - name: Install NPM Modules + run: npm ci + working-directory: e2e + - name: Lint + run: npm run lint + working-directory: e2e + - name: Run E2E Tests + working-directory: e2e + env: + CHAIN_ENVIRONMENT: dev + WS_PROVIDER_URL: ws://127.0.0.1:9944 + run: npm test + - name: Stop Local Node + if: always() + run: pkill ${{env.FREQUENCY_PROCESS_NAME}} + + verify-genesis-state: + needs: build-binaries + name: Verify Genesis State + runs-on: ubuntu-24.04 + steps: + - name: Set Env Vars + run: | + echo "EXPECTED_GENESIS_STATE_PASEO=0x000000000000000000000000000000000000000000000000000000000000000000805f6ddb6879aa31316a38c149e52ffe4e9f2a193e966ddcf3b6a2cb5846e96903170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c11131400" >> $GITHUB_ENV + echo "EXPECTED_GENESIS_STATE_MAINNET=0x000000000000000000000000000000000000000000000000000000000000000000393a2a0f7778716d006206c5a4787cbf2ea3b26a67379b7a38ee54519d7fd4be03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c11131400" >> $GITHUB_ENV + echo "BIN_FILENAME_TESTNET=frequency.testnet.amd64.frequency-testnet.pr" >> $GITHUB_ENV + echo "BIN_FILENAME_MAINNET=frequency.mainnet.amd64.frequency.pr" >> $GITHUB_ENV + - name: Download Binaries + id: download-binaries + uses: actions/download-artifact@v4 + with: + pattern: artifacts-binary-*-${{github.run_id}} + path: ${{env.BIN_DIR_DEBUG}} + merge-multiple: true + - name: List Downloaded Binaries + run: | + download_dir=${{steps.download-binaries.outputs.download-path}} + echo "Download dir: $download_dir" + echo "Downloaded binaries: $(ls -l $download_dir)" + - name: Set Binary Permissions + working-directory: ${{env.BIN_DIR_DEBUG}} + run: | + chmod 755 $BIN_FILENAME_TESTNET + chmod 755 $BIN_FILENAME_MAINNET + - name: Test Frequency Paseo Genesis State + working-directory: ${{env.BIN_DIR_DEBUG}} + run: | + expected_genesis_state=${{env.EXPECTED_GENESIS_STATE_PASEO}} + echo "Expected genesis state: $expected_genesis_state" + actual_genesis_state=$(./${{env.BIN_FILENAME_TESTNET}} export-genesis-state --chain=frequency-paseo) + echo "Actual genesis state: $actual_genesis_state" + [ $actual_genesis_state = $expected_genesis_state ] || \ + (echo "ERROR: The actual genesis state does not match the expected" && exit 1) + - name: Test Frequency Mainnet Genesis State + working-directory: ${{env.BIN_DIR_DEBUG}} + run: | + expected_genesis_state=${{env.EXPECTED_GENESIS_STATE_MAINNET}} + echo "Expected genesis state: $expected_genesis_state" + actual_genesis_state=$(./${{env.BIN_FILENAME_MAINNET}} export-genesis-state) + echo "Actual genesis state: $actual_genesis_state" + [ $actual_genesis_state = $expected_genesis_state ] || \ + (echo "ERROR: The actual genesis state does not match the expected" && exit 1) diff --git a/.gitignore b/.gitignore index 088ba6ba7d..2ce3ae95c0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,27 @@ # Generated by Cargo # will have compiled files and executables -/target/ - -# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries -# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html -Cargo.lock - +**/target/ +**/res # These are backup files generated by rustfmt **/*.rs.bk + +.idea +*.iws + +# General +.DS_Store +.env +.AppleDouble +.LSOverride + +**/node_modules/ + +res/ + +scratch/ + +frequency.log + +scripts/js/onboard/.yarnrc.yml +scripts/js/onboard/.yarn/cache +scripts/js/onboard/.yarn/*.gz diff --git a/.maintain/frame-system-extensions-weight-template.hbs b/.maintain/frame-system-extensions-weight-template.hbs new file mode 100644 index 0000000000..c692b4c1f5 --- /dev/null +++ b/.maintain/frame-system-extensions-weight-template.hbs @@ -0,0 +1,84 @@ +// Copied from: https://github.com/paritytech/polkadot-sdk/blob/polkadot-stable2503/substrate/.maintain/frame-weight-template.hbs + +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +{{header}} +//! Autogenerated weights for `{{pallet}}` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION {{version}} +//! DATE: {{date}}, STEPS: `{{cmd.steps}}`, REPEAT: `{{cmd.repeat}}`, LOW RANGE: `{{cmd.lowest_range_values}}`, HIGH RANGE: `{{cmd.highest_range_values}}` +//! WORST CASE MAP SIZE: `{{cmd.worst_case_map_values}}` +//! HOSTNAME: `{{hostname}}`, CPU: `{{cpuname}}` +//! WASM-EXECUTION: `{{cmd.wasm_execution}}`, CHAIN: `{{cmd.chain}}`, DB CACHE: `{{cmd.db_cache}}` + +// Executed Command: +{{#each args as |arg|}} +// {{arg}} +{{/each}} + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] +#![allow(dead_code)] + +use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; +use core::marker::PhantomData; + +/// Weights for `{{pallet}}` using the Substrate node and recommended hardware. +pub struct WeightInfo(PhantomData); +impl frame_system::ExtensionsWeightInfo for WeightInfo { + {{#each benchmarks as |benchmark|}} + {{#each benchmark.comments as |comment|}} + /// {{comment}} + {{/each}} + {{#each benchmark.component_ranges as |range|}} + /// The range of component `{{range.name}}` is `[{{range.min}}, {{range.max}}]`. + {{/each}} + fn {{benchmark.name~}} + ( + {{~#each benchmark.components as |c| ~}} + {{~#if (not c.is_used)}}_{{/if}}{{c.name}}: u32, {{/each~}} + ) -> Weight { + // Proof Size summary in bytes: + // Measured: `{{benchmark.base_recorded_proof_size}}{{#each benchmark.component_recorded_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}` + // Estimated: `{{benchmark.base_calculated_proof_size}}{{#each benchmark.component_calculated_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}` + // Minimum execution time: {{underscore benchmark.min_execution_time}}_000 picoseconds. + Weight::from_parts({{underscore benchmark.base_weight}}, {{benchmark.base_calculated_proof_size}}) + {{#each benchmark.component_weight as |cw|}} + // Standard Error: {{underscore cw.error}} + .saturating_add(Weight::from_parts({{underscore cw.slope}}, 0).saturating_mul({{cw.name}}.into())) + {{/each}} + {{#if (ne benchmark.base_reads "0")}} + .saturating_add(T::DbWeight::get().reads({{benchmark.base_reads}}_u64)) + {{/if}} + {{#each benchmark.component_reads as |cr|}} + .saturating_add(T::DbWeight::get().reads(({{cr.slope}}_u64).saturating_mul({{cr.name}}.into()))) + {{/each}} + {{#if (ne benchmark.base_writes "0")}} + .saturating_add(T::DbWeight::get().writes({{benchmark.base_writes}}_u64)) + {{/if}} + {{#each benchmark.component_writes as |cw|}} + .saturating_add(T::DbWeight::get().writes(({{cw.slope}}_u64).saturating_mul({{cw.name}}.into()))) + {{/each}} + {{#each benchmark.component_calculated_proof_size as |cp|}} + .saturating_add(Weight::from_parts(0, {{cp.slope}}).saturating_mul({{cp.name}}.into())) + {{/each}} + } + {{/each}} +} diff --git a/.maintain/frame-weight-template.hbs b/.maintain/frame-weight-template.hbs new file mode 100644 index 0000000000..cde7b7f8bf --- /dev/null +++ b/.maintain/frame-weight-template.hbs @@ -0,0 +1,162 @@ +{{header}} +//! Autogenerated weights for `{{pallet}}` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION {{version}} +//! DATE: {{date}}, STEPS: `{{cmd.steps}}`, REPEAT: `{{cmd.repeat}}`, LOW RANGE: `{{cmd.lowest_range_values}}`, HIGH RANGE: `{{cmd.highest_range_values}}` +//! WORST CASE MAP SIZE: `{{cmd.worst_case_map_values}}` +//! HOSTNAME: `{{hostname}}`, CPU: `{{cpuname}}` +//! WASM-EXECUTION: `{{cmd.wasm_execution}}`, CHAIN: `{{cmd.chain}}`, DB CACHE: `{{cmd.db_cache}}` + +// Executed Command: +{{#each args as |arg|}} +// {{arg}} +{{/each}} + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; +use core::marker::PhantomData; + +/// Weight functions needed for `{{pallet}}`. +pub trait WeightInfo { + {{#each benchmarks as |benchmark|}} + fn {{benchmark.name~}} + ( + {{~#each benchmark.components as |c| ~}} + {{c.name}}: u32, {{/each~}} + ) -> Weight; + {{/each}} +} + +/// Weights for `{{pallet}}` using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +{{#if (eq pallet "frame_system")}} +impl WeightInfo for SubstrateWeight { +{{else}} +impl WeightInfo for SubstrateWeight { +{{/if}} + {{#each benchmarks as |benchmark|}} + {{#each benchmark.comments as |comment|}} + /// {{comment}} + {{/each}} + {{#each benchmark.component_ranges as |range|}} + /// The range of component `{{range.name}}` is `[{{range.min}}, {{range.max}}]`. + {{/each}} + fn {{benchmark.name~}} + ( + {{~#each benchmark.components as |c| ~}} + {{~#if (not c.is_used)}}_{{/if}}{{c.name}}: u32, {{/each~}} + ) -> Weight { + // Proof Size summary in bytes: + // Measured: `{{benchmark.base_recorded_proof_size}}{{#each benchmark.component_recorded_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}` + // Estimated: `{{benchmark.base_calculated_proof_size}}{{#each benchmark.component_calculated_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}` + // Minimum execution time: {{underscore benchmark.min_execution_time}}_000 picoseconds. + Weight::from_parts({{underscore benchmark.base_weight}}, {{benchmark.base_calculated_proof_size}}) + {{#each benchmark.component_weight as |cw|}} + // Standard Error: {{underscore cw.error}} + .saturating_add(Weight::from_parts({{underscore cw.slope}}, 0).saturating_mul({{cw.name}}.into())) + {{/each}} + {{#if (ne benchmark.base_reads "0")}} + .saturating_add(T::DbWeight::get().reads({{benchmark.base_reads}}_u64)) + {{/if}} + {{#each benchmark.component_reads as |cr|}} + .saturating_add(T::DbWeight::get().reads(({{cr.slope}}_u64).saturating_mul({{cr.name}}.into()))) + {{/each}} + {{#if (ne benchmark.base_writes "0")}} + .saturating_add(T::DbWeight::get().writes({{benchmark.base_writes}}_u64)) + {{/if}} + {{#each benchmark.component_writes as |cw|}} + .saturating_add(T::DbWeight::get().writes(({{cw.slope}}_u64).saturating_mul({{cw.name}}.into()))) + {{/each}} + {{#each benchmark.component_calculated_proof_size as |cp|}} + .saturating_add(Weight::from_parts(0, {{cp.slope}}).saturating_mul({{cp.name}}.into())) + {{/each}} + } + {{/each}} +} + +// For backwards compatibility and tests. +impl WeightInfo for () { + {{#each benchmarks as |benchmark|}} + {{#each benchmark.comments as |comment|}} + /// {{comment}} + {{/each}} + {{#each benchmark.component_ranges as |range|}} + /// The range of component `{{range.name}}` is `[{{range.min}}, {{range.max}}]`. + {{/each}} + fn {{benchmark.name~}} + ( + {{~#each benchmark.components as |c| ~}} + {{~#if (not c.is_used)}}_{{/if}}{{c.name}}: u32, {{/each~}} + ) -> Weight { + // Proof Size summary in bytes: + // Measured: `{{benchmark.base_recorded_proof_size}}{{#each benchmark.component_recorded_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}` + // Estimated: `{{benchmark.base_calculated_proof_size}}{{#each benchmark.component_calculated_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}` + // Minimum execution time: {{underscore benchmark.min_execution_time}}_000 picoseconds. + Weight::from_parts({{underscore benchmark.base_weight}}, {{benchmark.base_calculated_proof_size}}) + {{#each benchmark.component_weight as |cw|}} + // Standard Error: {{underscore cw.error}} + .saturating_add(Weight::from_parts({{underscore cw.slope}}, 0).saturating_mul({{cw.name}}.into())) + {{/each}} + {{#if (ne benchmark.base_reads "0")}} + .saturating_add(RocksDbWeight::get().reads({{benchmark.base_reads}}_u64)) + {{/if}} + {{#each benchmark.component_reads as |cr|}} + .saturating_add(RocksDbWeight::get().reads(({{cr.slope}}_u64).saturating_mul({{cr.name}}.into()))) + {{/each}} + {{#if (ne benchmark.base_writes "0")}} + .saturating_add(RocksDbWeight::get().writes({{benchmark.base_writes}}_u64)) + {{/if}} + {{#each benchmark.component_writes as |cw|}} + .saturating_add(RocksDbWeight::get().writes(({{cw.slope}}_u64).saturating_mul({{cw.name}}.into()))) + {{/each}} + {{#each benchmark.component_calculated_proof_size as |cp|}} + .saturating_add(Weight::from_parts(0, {{cp.slope}}).saturating_mul({{cp.name}}.into())) + {{/each}} + } + {{/each}} +} + + +#[cfg(test)] +mod tests { + use frame_support::{traits::Get, weights::Weight, dispatch::DispatchClass}; + use common_runtime::constants::{MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO}; + use common_runtime::weights::extrinsic_weights::ExtrinsicBaseWeight; + + #[allow(dead_code)] + struct BlockWeights; + impl Get for BlockWeights { + fn get() -> frame_system::limits::BlockWeights { + frame_system::limits::BlockWeights::builder() + .base_block(Weight::zero()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::non_mandatory(), |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .build_or_panic() + } + } + + {{#each benchmarks as |benchmark|}} + {{#if (ne benchmark.base_calculated_proof_size "0")}} + #[test] + fn test_{{benchmark.name~}} () { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > {{benchmark.base_calculated_proof_size}} + ); + } + {{/if}} + {{/each}} +} diff --git a/.maintain/runtime-weight-template.hbs b/.maintain/runtime-weight-template.hbs new file mode 100644 index 0000000000..a15cbaf01a --- /dev/null +++ b/.maintain/runtime-weight-template.hbs @@ -0,0 +1,108 @@ +//! Autogenerated weights for {{pallet}} +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION {{version}} +//! DATE: {{date}}, STEPS: `{{cmd.steps}}`, REPEAT: `{{cmd.repeat}}`, LOW RANGE: `{{cmd.lowest_range_values}}`, HIGH RANGE: `{{cmd.highest_range_values}}` +//! WORST CASE MAP SIZE: `{{cmd.worst_case_map_values}}` +//! HOSTNAME: `{{hostname}}`, CPU: `{{cpuname}}` +//! EXECUTION: {{cmd.execution}}, WASM-EXECUTION: {{cmd.wasm_execution}}, CHAIN: {{cmd.chain}}, DB CACHE: {{cmd.db_cache}} + +// Executed Command: +{{#each args as |arg|}} +// {{arg}} +{{/each}} + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::Weight}; +use core::marker::PhantomData; + +/// Weights for `{{pallet}}` using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +{{#if (eq pallet "frame_system")}} +impl {{pallet}}::WeightInfo for SubstrateWeight { +{{else}} +impl {{pallet}}::WeightInfo for SubstrateWeight { +{{/if}} + {{#each benchmarks as |benchmark|}} + {{#each benchmark.comments as |comment|}} + /// {{comment}} + {{/each}} + {{#each benchmark.component_ranges as |range|}} + /// The range of component `{{range.name}}` is `[{{range.min}}, {{range.max}}]`. + {{/each}} + fn {{benchmark.name~}} + ( + {{~#each benchmark.components as |c| ~}} + {{~#if (not c.is_used)}}_{{/if}}{{c.name}}: u32, {{/each~}} + ) -> Weight { + // Proof Size summary in bytes: + // Measured: `{{benchmark.base_recorded_proof_size}}{{#each benchmark.component_recorded_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}` + // Estimated: `{{benchmark.base_calculated_proof_size}}{{#each benchmark.component_calculated_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}` + // Minimum execution time: {{underscore benchmark.min_execution_time}}_000 picoseconds. + Weight::from_parts({{underscore benchmark.base_weight}}, {{benchmark.base_calculated_proof_size}}) + {{#each benchmark.component_weight as |cw|}} + // Standard Error: {{underscore cw.error}} + .saturating_add(Weight::from_parts({{underscore cw.slope}}, 0).saturating_mul({{cw.name}}.into())) + {{/each}} + {{#if (ne benchmark.base_reads "0")}} + .saturating_add(T::DbWeight::get().reads({{benchmark.base_reads}}_u64)) + {{/if}} + {{#each benchmark.component_reads as |cr|}} + .saturating_add(T::DbWeight::get().reads(({{cr.slope}}_u64).saturating_mul({{cr.name}}.into()))) + {{/each}} + {{#if (ne benchmark.base_writes "0")}} + .saturating_add(T::DbWeight::get().writes({{benchmark.base_writes}}_u64)) + {{/if}} + {{#each benchmark.component_writes as |cw|}} + .saturating_add(T::DbWeight::get().writes(({{cw.slope}}_u64).saturating_mul({{cw.name}}.into()))) + {{/each}} + {{#each benchmark.component_calculated_proof_size as |cp|}} + .saturating_add(Weight::from_parts(0, {{cp.slope}}).saturating_mul({{cp.name}}.into())) + {{/each}} + } + {{/each}} +} + + +#[cfg(test)] +mod tests { + use frame_support::{traits::Get, weights::Weight, dispatch::DispatchClass}; + use crate::constants::{MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO}; + use crate::weights::extrinsic_weights::ExtrinsicBaseWeight; + + #[allow(dead_code)] + struct BlockWeights; + impl Get for BlockWeights { + fn get() -> frame_system::limits::BlockWeights { + frame_system::limits::BlockWeights::builder() + .base_block(Weight::zero()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::non_mandatory(), |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .build_or_panic() + } + } + + {{#each benchmarks as |benchmark|}} + {{#if (ne benchmark.base_calculated_proof_size "0")}} + #[test] + fn test_{{benchmark.name~}} () { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > {{benchmark.base_calculated_proof_size}} + ); + } + {{/if}} + {{/each}} +} diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000000..0165c89283 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,10 @@ +/target +**/artifacts +**/coverage +node_modules +*-lock.* +cache +logs +log +CODEOWNERS +.github/issues/* diff --git a/.rustfmt.toml b/.rustfmt.toml new file mode 100644 index 0000000000..3018614bb1 --- /dev/null +++ b/.rustfmt.toml @@ -0,0 +1,23 @@ +# Basic +hard_tabs = true +max_width = 100 +use_small_heuristics = "Max" + +# Imports +imports_granularity = "Crate" +reorder_imports = true + +# Consistency +newline_style = "Unix" + +# Misc +binop_separator = "Back" +chain_width = 80 +match_arm_blocks = false +match_arm_leading_pipes = "Preserve" +match_block_trailing_comma = true +reorder_impl_items = false +spaces_around_ranges = false +trailing_comma = "Vertical" +trailing_semicolon = false +use_field_init_shorthand = true diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 0000000000..db0f3f6622 --- /dev/null +++ b/.tool-versions @@ -0,0 +1,3 @@ +rust 1.84.1 +make 4.3 +cmake 3.24.1 diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000000..86546c6b19 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,414 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "lldb", + "request": "launch", + "name": "Debug No-relay w/cargo", + "cargo": { + "args": [ + "build", + "--features", + "frequency-no-relay", + ], + "filter": { + "name": "frequency", + "kind": "bin" + } + }, + "initCommands": [ + "settings set plugin.jit-loader.gdb.enable on" + ], + "args": [ + "--dev", + "-lruntime=debug", + "-lexecutor=trace", + "--sealing=instant", + "--wasm-execution=compiled", + "--execution=native", + "--no-telemetry", + "--no-prometheus", + "--port=30333", + "--rpc-port=9944", + "--rpc-external", + "--rpc-cors=all", + "--rpc-methods=unsafe", + "--tmp" + ], + "cwd": "${workspaceFolder}", + "env": { + "WASM_BUILD_TYPE": "debug", + } + }, + { + "type": "lldb", + "request": "attach", + "name": "Attach to Frequency", + "program": "${workspaceFolder}/target/debug/frequency", + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug unit tests in executable 'frequency'", + "cargo": { + "args": [ + "test", + "--no-run", + "--bin=frequency", + "--package=frequency" + ], + "filter": { + "name": "frequency", + "kind": "bin" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug unit tests in library 'frequency-cli'", + "cargo": { + "args": [ + "test", + "--no-run", + "--lib", + "--package=frequency-cli" + ], + "filter": { + "name": "frequency-cli", + "kind": "lib" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug unit tests in library 'common-primitives'", + "cargo": { + "args": [ + "test", + "--no-run", + "--lib", + "--package=common-primitives" + ], + "filter": { + "name": "common-primitives", + "kind": "lib" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug unit tests in library 'frequency-service'", + "cargo": { + "args": [ + "test", + "--no-run", + "--lib", + "--package=frequency-service" + ], + "filter": { + "name": "frequency-service", + "kind": "lib" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug unit tests in library 'common-helpers'", + "cargo": { + "args": [ + "test", + "--no-run", + "--lib", + "--package=common-helpers" + ], + "filter": { + "name": "common-helpers", + "kind": "lib" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug unit tests in library 'common-runtime'", + "cargo": { + "args": [ + "test", + "--no-run", + "--lib", + "--package=common-runtime" + ], + "filter": { + "name": "common-runtime", + "kind": "lib" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug unit tests in library 'frequency-runtime'", + "cargo": { + "args": [ + "test", + "--no-run", + "--lib", + "--package=frequency-runtime" + ], + "filter": { + "name": "frequency-runtime", + "kind": "lib" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug unit tests in library 'pallet-capacity'", + "cargo": { + "args": [ + "test", + "--no-run", + "--lib", + "--package=pallet-capacity" + ], + "filter": { + "name": "pallet-capacity", + "kind": "lib" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug unit tests in library 'pallet-msa'", + "cargo": { + "args": [ + "test", + "--no-run", + "--lib", + "--package=pallet-msa" + ], + "filter": { + "name": "pallet-msa", + "kind": "lib" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug unit tests in library 'pallet-schemas'", + "cargo": { + "args": [ + "test", + "--no-run", + "--lib", + "--package=pallet-schemas" + ], + "filter": { + "name": "pallet-schemas", + "kind": "lib" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug unit tests in library 'pallet-frequency-tx-payment'", + "cargo": { + "args": [ + "test", + "--no-run", + "--lib", + "--package=pallet-frequency-tx-payment" + ], + "filter": { + "name": "pallet-frequency-tx-payment", + "kind": "lib" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug unit tests in library 'pallet-messages'", + "cargo": { + "args": [ + "test", + "--no-run", + "--lib", + "--package=pallet-messages" + ], + "filter": { + "name": "pallet-messages", + "kind": "lib" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug unit tests in library 'pallet-messages-runtime-api'", + "cargo": { + "args": [ + "test", + "--no-run", + "--lib", + "--package=pallet-messages-runtime-api" + ], + "filter": { + "name": "pallet-messages-runtime-api", + "kind": "lib" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug unit tests in library 'pallet-msa-runtime-api'", + "cargo": { + "args": [ + "test", + "--no-run", + "--lib", + "--package=pallet-msa-runtime-api" + ], + "filter": { + "name": "pallet-msa-runtime-api", + "kind": "lib" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug unit tests in library 'pallet-schemas-runtime-api'", + "cargo": { + "args": [ + "test", + "--no-run", + "--lib", + "--package=pallet-schemas-runtime-api" + ], + "filter": { + "name": "pallet-schemas-runtime-api", + "kind": "lib" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug unit tests in library 'system-runtime-api'", + "cargo": { + "args": [ + "test", + "--no-run", + "--lib", + "--package=system-runtime-api" + ], + "filter": { + "name": "system-runtime-api", + "kind": "lib" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug unit tests in library 'pallet-messages-rpc'", + "cargo": { + "args": [ + "test", + "--no-run", + "--lib", + "--package=pallet-messages-rpc" + ], + "filter": { + "name": "pallet-messages-rpc", + "kind": "lib" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug unit tests in library 'pallet-msa-rpc'", + "cargo": { + "args": [ + "test", + "--no-run", + "--lib", + "--package=pallet-msa-rpc" + ], + "filter": { + "name": "pallet-msa-rpc", + "kind": "lib" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug unit tests in library 'pallet-schemas-rpc'", + "cargo": { + "args": [ + "test", + "--no-run", + "--lib", + "--package=pallet-schemas-rpc" + ], + "filter": { + "name": "pallet-schemas-rpc", + "kind": "lib" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000000..c1c33a9a34 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,24 @@ +{ + "cSpell.customDictionaries": { + "custom-dictionary-workspace": { + "name": "custom-dictionary-workspace", + "path": "${workspaceFolder:mrc}/.cspell/custom-dictionary-workspace.txt", + "addWords": true, + "scope": "workspace" + } + }, + "cSpell.ignoreWords": [ + "Swatinem", + "jacogr", + "lruntime", + "pkill" + ], + // Set the features to use for cargo commands + "rust-analyzer.cargo.features": [ + "runtime-benchmarks", + "frequency-lint-check" + ], + "lldb.launch.preRunCommands": [ + "script lldb.debugger.HandleCommand('settings set target.source-map /rustc/{} \"{}/lib/rustlib/src/rust\"'.format(os.popen('rustc --version --verbose').read().split('commit-hash: ')[1].split('\\n')[0].strip(), os.popen('rustc --print sysroot').readline().strip()))" + ] +} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000000..637ee2a1da --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,3 @@ +# CONTRIBUTING + +For contributing guidelines see the [Project Liberty Contributing Guidelines](https://github.com/LibertyDSNP/meta/blob/main/CONTRIBUTING.md). diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000000..4c48b23dfe --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,17213 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" +dependencies = [ + "lazy_static", + "regex", +] + +[[package]] +name = "addr2line" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" +dependencies = [ + "gimli 0.27.3", +] + +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli 0.31.1", +] + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + +[[package]] +name = "adler32" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" + +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common", + "generic-array 0.14.7", +] + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher 0.4.4", + "cpufeatures", +] + +[[package]] +name = "aes-gcm" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" +dependencies = [ + "aead", + "aes", + "cipher 0.4.4", + "ctr", + "ghash", + "subtle 2.6.1", +] + +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "getrandom 0.3.3", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "always-assert" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4436e0292ab1bb631b42973c61205e704475fe8126af845c8d923c0996328127" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anstream" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" + +[[package]] +name = "anstyle-parse" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6680de5231bd6ee4c6191b8a1325daa282b415391ec9d3a37bd34f2060dc73fa" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys 0.59.0", +] + +[[package]] +name = "anyhow" +version = "1.0.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" + +[[package]] +name = "apache-avro" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aef82843a0ec9f8b19567445ad2421ceeb1d711514384bdd3d49fe37102ee13" +dependencies = [ + "bigdecimal", + "crc32fast", + "digest 0.10.7", + "libflate", + "log", + "num-bigint", + "quad-rand", + "rand 0.8.5", + "regex-lite", + "serde", + "serde_bytes", + "serde_json", + "snap", + "strum 0.26.3", + "strum_macros 0.26.4", + "thiserror 1.0.69", + "typed-builder", + "uuid", +] + +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "aquamarine" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21cc1548309245035eb18aa7f0967da6bc65587005170c56e6ef2788a4cf3f4e" +dependencies = [ + "include_dir", + "itertools 0.10.5", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "ark-bls12-377" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb00293ba84f51ce3bd026bd0de55899c4e68f0a39a5728cebae3a73ffdc0a4f" +dependencies = [ + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-bls12-381" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" +dependencies = [ + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-bls12-381" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3df4dcc01ff89867cd86b0da835f23c3f02738353aaee7dde7495af71363b8d5" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff 0.4.2", + "ark-poly 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "hashbrown 0.13.2", + "itertools 0.10.5", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" +dependencies = [ + "ahash", + "ark-ff 0.5.0", + "ark-poly 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "educe", + "fnv", + "hashbrown 0.15.3", + "itertools 0.13.0", + "num-bigint", + "num-integer", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ed-on-bls12-381-bandersnatch" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1786b2e3832f6f0f7c8d62d5d5a282f6952a1ab99981c54cd52b6ac1d8f02df5" +dependencies = [ + "ark-bls12-381 0.5.0", + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-std 0.5.0", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint", + "num-traits", + "paste", + "rustc_version", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a177aba0ed1e0fbb62aa9f6d0502e9b46dad8c2eab04c14258a1212d2557ea70" +dependencies = [ + "ark-ff-asm 0.5.0", + "ark-ff-macros 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "arrayvec 0.7.6", + "digest 0.10.7", + "educe", + "itertools 0.13.0", + "num-bigint", + "num-traits", + "paste", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-asm" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" +dependencies = [ + "quote", + "syn 2.0.101", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09be120733ee33f7693ceaa202ca41accd5653b779563608f1234f78ae07c4b3" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "hashbrown 0.13.2", +] + +[[package]] +name = "ark-poly" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "579305839da207f02b89cd1679e50e67b4331e2f9294a57693e5051b7703fe27" +dependencies = [ + "ahash", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "educe", + "fnv", + "hashbrown 0.15.3", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive 0.4.2", + "ark-std 0.4.0", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-serialize" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" +dependencies = [ + "ark-serialize-derive 0.5.0", + "ark-std 0.5.0", + "arrayvec 0.7.6", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "ark-std" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "ark-transcript" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47c1c928edb9d8ff24cb5dcb7651d3a98494fff3099eee95c2404cd813a9139f" +dependencies = [ + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "digest 0.10.7", + "rand_core 0.6.4", + "sha3", +] + +[[package]] +name = "ark-vrf" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9501da18569b2afe0eb934fb7afd5a247d238b94116155af4dd068f319adfe6d" +dependencies = [ + "ark-bls12-381 0.5.0", + "ark-ec 0.5.0", + "ark-ed-on-bls12-381-bandersnatch", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "digest 0.10.7", + "rand_chacha 0.3.1", + "sha2 0.10.9", + "w3f-ring-proof", + "zeroize", +] + +[[package]] +name = "array-bytes" +version = "6.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d5dde061bd34119e902bbb2d9b90c5692635cf59fb91d582c2b68043f1b8293" + +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + +[[package]] +name = "arrayvec" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" +dependencies = [ + "nodrop", +] + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "asn1-rs" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048" +dependencies = [ + "asn1-rs-derive 0.5.1", + "asn1-rs-impl", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror 1.0.69", + "time", +] + +[[package]] +name = "asn1-rs" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56624a96882bb8c26d61312ae18cb45868e5a9992ea73c58e45c3101e56a1e60" +dependencies = [ + "asn1-rs-derive 0.6.0", + "asn1-rs-impl", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror 2.0.12", + "time", +] + +[[package]] +name = "asn1-rs-derive" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", + "synstructure 0.13.2", +] + +[[package]] +name = "asn1-rs-derive" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", + "synstructure 0.13.2", +] + +[[package]] +name = "asn1-rs-impl" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "assert_matches" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand 2.3.0", + "futures-lite 2.6.0", + "pin-project-lite", + "slab", +] + +[[package]] +name = "async-fs" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "blocking", + "futures-lite 1.13.0", +] + +[[package]] +name = "async-fs" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" +dependencies = [ + "async-lock 3.4.0", + "blocking", + "futures-lite 2.6.0", +] + +[[package]] +name = "async-io" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-lite 1.13.0", + "log", + "parking", + "polling 2.8.0", + "rustix 0.37.28", + "slab", + "socket2 0.4.10", + "waker-fn", +] + +[[package]] +name = "async-io" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1237c0ae75a0f3765f58910ff9cdd0a12eeb39ab2f4c7de23262f337f0aacbb3" +dependencies = [ + "async-lock 3.4.0", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite 2.6.0", + "parking", + "polling 3.8.0", + "rustix 1.0.7", + "slab", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener 2.5.3", +] + +[[package]] +name = "async-lock" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +dependencies = [ + "event-listener 5.4.0", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-net" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0434b1ed18ce1cf5769b8ac540e33f01fa9471058b5e89da9e06f3c882a8c12f" +dependencies = [ + "async-io 1.13.0", + "blocking", + "futures-lite 1.13.0", +] + +[[package]] +name = "async-net" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" +dependencies = [ + "async-io 2.4.1", + "blocking", + "futures-lite 2.6.0", +] + +[[package]] +name = "async-process" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" +dependencies = [ + "async-io 1.13.0", + "async-lock 2.8.0", + "async-signal", + "blocking", + "cfg-if", + "event-listener 3.1.0", + "futures-lite 1.13.0", + "rustix 0.38.44", + "windows-sys 0.48.0", +] + +[[package]] +name = "async-process" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cde3f4e40e6021d7acffc90095cbd6dc54cb593903d1de5832f435eb274b85dc" +dependencies = [ + "async-channel 2.3.1", + "async-io 2.4.1", + "async-lock 3.4.0", + "async-signal", + "async-task", + "blocking", + "cfg-if", + "event-listener 5.4.0", + "futures-lite 2.6.0", + "rustix 1.0.7", + "tracing", +] + +[[package]] +name = "async-signal" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7605a4e50d4b06df3898d5a70bf5fde51ed9059b0434b73105193bc27acce0d" +dependencies = [ + "async-io 2.4.1", + "async-lock 3.4.0", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix 1.0.7", + "signal-hook-registry", + "slab", + "windows-sys 0.59.0", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-trait" +version = "0.1.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "asynchronous-codec" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4057f2c32adbb2fc158e22fb38433c8e9bbf76b75a4732c7c0cbaf695fb65568" +dependencies = [ + "bytes", + "futures-sink", + "futures-util", + "memchr", + "pin-project-lite", +] + +[[package]] +name = "asynchronous-codec" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a860072022177f903e59730004fb5dc13db9275b79bb2aef7ba8ce831956c233" +dependencies = [ + "bytes", + "futures-sink", + "futures-util", + "memchr", + "pin-project-lite", +] + +[[package]] +name = "atomic-take" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8ab6b55fe97976e46f91ddbed8d147d966475dc29b2032757ba47e02376fbc3" + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "attohttpc" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d9a9bf8b79a749ee0b911b91b671cc2b6c670bdbc7e3dfd537576ddc94bb2a2" +dependencies = [ + "http 0.2.12", + "log", + "url", +] + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "backtrace" +version = "0.3.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" +dependencies = [ + "addr2line 0.24.2", + "cfg-if", + "libc", + "miniz_oxide", + "object 0.36.7", + "rustc-demangle", + "windows-targets 0.52.6", +] + +[[package]] +name = "base-x" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base58" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64-url" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e2b6c78c06f7288d5e3c3d683bde35a79531127c83b087e5d0d77c974b4b28" +dependencies = [ + "base64 0.22.1", +] + +[[package]] +name = "base64ct" +version = "1.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89e25b6adfb930f02d1981565a6e5d9c547ac15a96606256d3b59040e5cd4ca3" + +[[package]] +name = "bigdecimal" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a22f228ab7a1b23027ccc6c350b72868017af7ea8356fbdf19f8d991c690013" +dependencies = [ + "autocfg", + "libm", + "num-bigint", + "num-integer", + "num-traits", + "serde", +] + +[[package]] +name = "binary-merkle-tree" +version = "16.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "hash-db", + "log", + "parity-scale-codec", +] + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bindgen" +version = "0.65.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5" +dependencies = [ + "bitflags 1.3.2", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "peeking_take_while", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash 1.1.0", + "shlex", + "syn 2.0.101", +] + +[[package]] +name = "bip32" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db40d3dfbeab4e031d78c844642fa0caa0b0db11ce1607ac9d2986dff1405c69" +dependencies = [ + "bs58", + "hmac 0.12.1", + "k256", + "rand_core 0.6.4", + "ripemd", + "secp256k1 0.27.0", + "sha2 0.10.9", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "bip39" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33415e24172c1b7d6066f6d999545375ab8e1d95421d6784bdfff9496f292387" +dependencies = [ + "bitcoin_hashes 0.13.0", + "serde", + "unicode-normalization", +] + +[[package]] +name = "bitcoin-internals" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb" + +[[package]] +name = "bitcoin-io" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b47c4ab7a93edb0c7198c5535ed9b52b63095f4e9b45279c6736cec4b856baf" + +[[package]] +name = "bitcoin_hashes" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b" +dependencies = [ + "bitcoin-internals", + "hex-conservative 0.1.2", +] + +[[package]] +name = "bitcoin_hashes" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb18c03d0db0247e147a21a6faafd5a7eb851c743db062de72018b6b7e8e4d16" +dependencies = [ + "bitcoin-io", + "hex-conservative 0.2.1", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "serde", + "tap", + "wyz", +] + +[[package]] +name = "blake2" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94cb07b0da6a73955f8fb85d24c466778e70cda767a568229b104f0264089330" +dependencies = [ + "byte-tools", + "crypto-mac 0.7.0", + "digest 0.8.1", + "opaque-debug 0.2.3", +] + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "blake2-rfc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" +dependencies = [ + "arrayvec 0.4.12", + "constant_time_eq 0.1.5", +] + +[[package]] +name = "blake2b_simd" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06e903a20b159e944f91ec8499fe1e55651480c541ea0a584f5d967c49ad9d99" +dependencies = [ + "arrayref", + "arrayvec 0.7.6", + "constant_time_eq 0.3.1", +] + +[[package]] +name = "blake2s_simd" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e90f7deecfac93095eb874a40febd69427776e24e1bd7f87f33ac62d6f0174df" +dependencies = [ + "arrayref", + "arrayvec 0.7.6", + "constant_time_eq 0.3.1", +] + +[[package]] +name = "blake3" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" +dependencies = [ + "arrayref", + "arrayvec 0.7.6", + "cc", + "cfg-if", + "constant_time_eq 0.3.1", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "blocking" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +dependencies = [ + "async-channel 2.3.1", + "async-task", + "futures-io", + "futures-lite 2.6.0", + "piper", +] + +[[package]] +name = "bounded-collections" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ad8a0bed7827f0b07a5d23cec2e58cc02038a99e4ca81616cb2bb2025f804d" +dependencies = [ + "log", + "parity-scale-codec", + "scale-info", + "serde", +] + +[[package]] +name = "bounded-vec" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68534a48cbf63a4b1323c433cf21238c9ec23711e0df13b08c33e5c2082663ce" +dependencies = [ + "thiserror 1.0.69", +] + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "sha2 0.10.9", + "tinyvec", +] + +[[package]] +name = "build-helper" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdce191bf3fa4995ce948c8c83b4640a1745457a149e73c6db75b4ffe36aad5f" +dependencies = [ + "semver 0.6.0", +] + +[[package]] +name = "bumpalo" +version = "3.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" + +[[package]] +name = "byte-slice-cast" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" + +[[package]] +name = "byte-tools" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" + +[[package]] +name = "bytemuck" +version = "1.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9134a6ef01ce4b366b50689c94f82c14bc72bc5d0386829828a2e2752ef7958c" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" + +[[package]] +name = "bzip2-sys" +version = "0.1.13+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225bff33b2141874fe80d71e07d6eec4f85c5c216453dd96388240f96e1acc14" +dependencies = [ + "cc", + "pkg-config", +] + +[[package]] +name = "c2-chacha" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d27dae93fe7b1e0424dc57179ac396908c26b035a87234809f5c4dfd1b47dc80" +dependencies = [ + "cipher 0.2.5", + "ppv-lite86", +] + +[[package]] +name = "camino" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.26", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "cc" +version = "1.2.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16595d3be041c03b09d08d0858631facccee9221e579704070e6e9e4915d3bc7" +dependencies = [ + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "chacha" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddf3c081b5fba1e5615640aae998e0fbd10c24cbd897ee39ed754a77601a4862" +dependencies = [ + "byteorder", + "keystream", +] + +[[package]] +name = "chacha20" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +dependencies = [ + "cfg-if", + "cipher 0.4.4", + "cpufeatures", +] + +[[package]] +name = "chacha20poly1305" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" +dependencies = [ + "aead", + "chacha20", + "cipher 0.4.4", + "poly1305", + "zeroize", +] + +[[package]] +name = "chrono" +version = "0.4.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "wasm-bindgen", + "windows-link", +] + +[[package]] +name = "cid" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9b68e3193982cd54187d71afdb2a271ad4cf8af157858e9cb911b91321de143" +dependencies = [ + "core2", + "multibase", + "multihash 0.17.0", + "serde", + "unsigned-varint 0.7.2", +] + +[[package]] +name = "cid" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3147d8272e8fa0ccd29ce51194dd98f79ddfb8191ba9e3409884e751798acf3a" +dependencies = [ + "core2", + "multibase", + "multihash 0.19.3", + "unsigned-varint 0.8.0", +] + +[[package]] +name = "cipher" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", + "zeroize", +] + +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "clap" +version = "4.5.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed93b9805f8ba930df42c2590f05453d5ec36cbb85d018868a5b24d31f6ac000" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "379026ff283facf611b0ea629334361c4211d1b12ee01024eec1591133b04120" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", + "terminal_size", +] + +[[package]] +name = "clap_derive" +version = "4.5.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "clap_lex" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" + +[[package]] +name = "cli-opt" +version = "0.0.0" +dependencies = [ + "clap", +] + +[[package]] +name = "coarsetime" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91849686042de1b41cd81490edc83afbcb0abe5a9b6f2c4114f23ce8cca1bcf4" +dependencies = [ + "libc", + "wasix", + "wasm-bindgen", +] + +[[package]] +name = "codespan-reporting" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" +dependencies = [ + "serde", + "termcolor", + "unicode-width", +] + +[[package]] +name = "colorchoice" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "comfy-table" +version = "7.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a65ebfec4fb190b6f90e944a817d60499ee0744e582530e2c9900a22e591d9a" +dependencies = [ + "unicode-segmentation", + "unicode-width", +] + +[[package]] +name = "common-helpers" +version = "0.0.0" +dependencies = [ + "apache-avro", + "common-primitives", + "jsonrpsee", + "sp-api", + "sp-io", + "sp-runtime", + "thiserror 2.0.12", +] + +[[package]] +name = "common-path" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2382f75942f4b3be3690fe4f86365e9c853c1587d6ee58212cebf6e2a9ccd101" + +[[package]] +name = "common-primitives" +version = "0.0.0" +dependencies = [ + "enumflags2", + "frame-support", + "frame-system", + "impl-serde 0.4.0", + "lazy_static", + "libsecp256k1", + "log", + "numtoa", + "parity-scale-codec", + "scale-info", + "serde", + "serde_json", + "smallvec", + "sp-api", + "sp-core", + "sp-externalities", + "sp-io", + "sp-runtime", + "sp-runtime-interface", +] + +[[package]] +name = "common-runtime" +version = "0.0.0" +dependencies = [ + "common-primitives", + "cumulus-pallet-weight-reclaim", + "cumulus-primitives-core", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-collator-selection", + "pallet-collective", + "pallet-democracy", + "pallet-multisig", + "pallet-preimage", + "pallet-proxy", + "pallet-scheduler", + "pallet-session", + "pallet-sudo", + "pallet-time-release", + "pallet-timestamp", + "pallet-transaction-payment", + "pallet-treasury 27.0.0", + "pallet-utility", + "parity-scale-codec", + "scale-info", + "smallvec", + "sp-core", + "sp-runtime", + "sp-weights", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "console" +version = "0.15.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" +dependencies = [ + "encode_unicode", + "libc", + "once_cell", + "unicode-width", + "windows-sys 0.59.0", +] + +[[package]] +name = "const-hex" +version = "1.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83e22e0ed40b96a48d3db274f72fd365bd78f67af39b6bbd47e8a15e1c6207ff" +dependencies = [ + "cfg-if", + "cpufeatures", + "hex", + "proptest", + "serde", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "const-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom 0.2.16", + "once_cell", + "tiny-keccak", +] + +[[package]] +name = "const_format" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" +dependencies = [ + "memchr", +] + +[[package]] +name = "cpp_demangle" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eeaa953eaad386a53111e47172c2fedba671e5684c8dd601a5f474f4f118710f" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "cpu-time" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9e393a7668fe1fad3075085b86c781883000b4ede868f43627b34a87c8b7ded" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "cranelift-bforest" +version = "0.95.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1277fbfa94bc82c8ec4af2ded3e639d49ca5f7f3c7eeab2c66accd135ece4e70" +dependencies = [ + "cranelift-entity", +] + +[[package]] +name = "cranelift-codegen" +version = "0.95.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6e8c31ad3b2270e9aeec38723888fe1b0ace3bea2b06b3f749ccf46661d3220" +dependencies = [ + "bumpalo", + "cranelift-bforest", + "cranelift-codegen-meta", + "cranelift-codegen-shared", + "cranelift-entity", + "cranelift-isle", + "gimli 0.27.3", + "hashbrown 0.13.2", + "log", + "regalloc2 0.6.1", + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cranelift-codegen-meta" +version = "0.95.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ac5ac30d62b2d66f12651f6b606dbdfd9c2cfd0908de6b387560a277c5c9da" +dependencies = [ + "cranelift-codegen-shared", +] + +[[package]] +name = "cranelift-codegen-shared" +version = "0.95.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd82b8b376247834b59ed9bdc0ddeb50f517452827d4a11bccf5937b213748b8" + +[[package]] +name = "cranelift-entity" +version = "0.95.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40099d38061b37e505e63f89bab52199037a72b931ad4868d9089ff7268660b0" +dependencies = [ + "serde", +] + +[[package]] +name = "cranelift-frontend" +version = "0.95.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64a25d9d0a0ae3079c463c34115ec59507b4707175454f0eee0891e83e30e82d" +dependencies = [ + "cranelift-codegen", + "log", + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cranelift-isle" +version = "0.95.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80de6a7d0486e4acbd5f9f87ec49912bf4c8fb6aea00087b989685460d4469ba" + +[[package]] +name = "cranelift-native" +version = "0.95.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb6b03e0e03801c4b3fd8ce0758a94750c07a44e7944cc0ffbf0d3f2e7c79b00" +dependencies = [ + "cranelift-codegen", + "libc", + "target-lexicon", +] + +[[package]] +name = "cranelift-wasm" +version = "0.95.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff3220489a3d928ad91e59dd7aeaa8b3de18afb554a6211213673a71c90737ac" +dependencies = [ + "cranelift-codegen", + "cranelift-entity", + "cranelift-frontend", + "itertools 0.10.5", + "log", + "smallvec", + "wasmparser", + "wasmtime-types", +] + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + +[[package]] +name = "crossbeam-channel" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crunchy" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array 0.14.7", + "rand_core 0.6.4", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array 0.14.7", + "rand_core 0.6.4", + "typenum", +] + +[[package]] +name = "crypto-mac" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" +dependencies = [ + "generic-array 0.12.4", + "subtle 1.0.0", +] + +[[package]] +name = "crypto-mac" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +dependencies = [ + "generic-array 0.14.7", + "subtle 2.6.1", +] + +[[package]] +name = "crypto_secretbox" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d6cf87adf719ddf43a805e92c6870a531aedda35ff640442cbaf8674e141e1" +dependencies = [ + "aead", + "cipher 0.4.4", + "generic-array 0.14.7", + "poly1305", + "salsa20", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher 0.4.4", +] + +[[package]] +name = "cumulus-client-cli" +version = "0.22.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "clap", + "parity-scale-codec", + "sc-chain-spec", + "sc-cli", + "sc-client-api", + "sc-service", + "sp-blockchain", + "sp-core", + "sp-runtime", + "url", +] + +[[package]] +name = "cumulus-client-collator" +version = "0.22.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "cumulus-client-consensus-common", + "cumulus-client-network", + "cumulus-primitives-core", + "futures", + "parity-scale-codec", + "parking_lot 0.12.3", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-overseer", + "polkadot-primitives", + "sc-client-api", + "sp-api", + "sp-consensus", + "sp-core", + "sp-runtime", + "tracing", +] + +[[package]] +name = "cumulus-client-consensus-aura" +version = "0.22.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "cumulus-client-collator", + "cumulus-client-consensus-common", + "cumulus-client-consensus-proposer", + "cumulus-client-parachain-inherent", + "cumulus-primitives-aura", + "cumulus-primitives-core", + "cumulus-relay-chain-interface", + "futures", + "parity-scale-codec", + "parking_lot 0.12.3", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-overseer", + "polkadot-primitives", + "sc-client-api", + "sc-consensus", + "sc-consensus-aura", + "sc-consensus-babe", + "sc-consensus-slots", + "sc-telemetry", + "sc-utils", + "schnellru", + "sp-api", + "sp-application-crypto", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-consensus-aura", + "sp-core", + "sp-inherents", + "sp-keystore", + "sp-runtime", + "sp-state-machine", + "sp-timestamp", + "sp-trie", + "substrate-prometheus-endpoint", + "tokio", + "tracing", +] + +[[package]] +name = "cumulus-client-consensus-common" +version = "0.22.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "cumulus-client-pov-recovery", + "cumulus-primitives-core", + "cumulus-relay-chain-interface", + "dyn-clone", + "futures", + "log", + "parity-scale-codec", + "polkadot-primitives", + "sc-client-api", + "sc-consensus", + "sc-consensus-babe", + "schnellru", + "sp-blockchain", + "sp-consensus", + "sp-consensus-slots", + "sp-core", + "sp-runtime", + "sp-timestamp", + "sp-trie", + "sp-version", + "substrate-prometheus-endpoint", + "tracing", +] + +[[package]] +name = "cumulus-client-consensus-proposer" +version = "0.19.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "anyhow", + "async-trait", + "cumulus-primitives-parachain-inherent", + "sp-consensus", + "sp-inherents", + "sp-runtime", + "sp-state-machine", + "thiserror 1.0.69", +] + +[[package]] +name = "cumulus-client-network" +version = "0.22.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "cumulus-relay-chain-interface", + "futures", + "futures-timer", + "parity-scale-codec", + "parking_lot 0.12.3", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-parachain-primitives", + "polkadot-primitives", + "sc-client-api", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-runtime", + "sp-state-machine", + "sp-version", + "tracing", +] + +[[package]] +name = "cumulus-client-parachain-inherent" +version = "0.16.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "cumulus-primitives-core", + "cumulus-primitives-parachain-inherent", + "cumulus-relay-chain-interface", + "cumulus-test-relay-sproof-builder", + "parity-scale-codec", + "sc-client-api", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", + "sp-inherents", + "sp-runtime", + "sp-state-machine", + "sp-storage", + "tracing", +] + +[[package]] +name = "cumulus-client-pov-recovery" +version = "0.22.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "cumulus-primitives-core", + "cumulus-relay-chain-interface", + "futures", + "futures-timer", + "parity-scale-codec", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-overseer", + "polkadot-primitives", + "rand 0.8.5", + "sc-client-api", + "sc-consensus", + "sp-api", + "sp-consensus", + "sp-maybe-compressed-blob", + "sp-runtime", + "sp-version", + "tracing", +] + +[[package]] +name = "cumulus-client-service" +version = "0.23.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "cumulus-client-cli", + "cumulus-client-collator", + "cumulus-client-consensus-common", + "cumulus-client-network", + "cumulus-client-pov-recovery", + "cumulus-primitives-core", + "cumulus-primitives-proof-size-hostfunction", + "cumulus-relay-chain-inprocess-interface", + "cumulus-relay-chain-interface", + "cumulus-relay-chain-minimal-node", + "futures", + "polkadot-primitives", + "sc-client-api", + "sc-consensus", + "sc-network", + "sc-network-sync", + "sc-network-transactions", + "sc-rpc", + "sc-service", + "sc-sysinfo", + "sc-telemetry", + "sc-transaction-pool", + "sc-utils", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-io", + "sp-runtime", + "sp-transaction-pool", +] + +[[package]] +name = "cumulus-pallet-aura-ext" +version = "0.20.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "cumulus-pallet-parachain-system", + "frame-support", + "frame-system", + "pallet-aura", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-application-crypto", + "sp-consensus-aura", + "sp-runtime", +] + +[[package]] +name = "cumulus-pallet-parachain-system" +version = "0.20.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "bytes", + "cumulus-pallet-parachain-system-proc-macro", + "cumulus-primitives-core", + "cumulus-primitives-parachain-inherent", + "cumulus-primitives-proof-size-hostfunction", + "environmental", + "frame-benchmarking", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "pallet-message-queue", + "parity-scale-codec", + "polkadot-parachain-primitives", + "polkadot-runtime-parachains", + "scale-info", + "sp-core", + "sp-externalities", + "sp-inherents", + "sp-io", + "sp-runtime", + "sp-state-machine", + "sp-std", + "sp-trie", + "sp-version", + "staging-xcm", + "staging-xcm-builder", + "trie-db", +] + +[[package]] +name = "cumulus-pallet-parachain-system-proc-macro" +version = "0.6.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "proc-macro-crate 3.3.0", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "cumulus-pallet-session-benchmarking" +version = "21.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-session", + "parity-scale-codec", + "sp-runtime", +] + +[[package]] +name = "cumulus-pallet-weight-reclaim" +version = "0.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "cumulus-primitives-storage-weight-reclaim", + "derive-where", + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-trie", +] + +[[package]] +name = "cumulus-primitives-aura" +version = "0.17.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "sp-api", + "sp-consensus-aura", +] + +[[package]] +name = "cumulus-primitives-core" +version = "0.18.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "parity-scale-codec", + "polkadot-core-primitives", + "polkadot-parachain-primitives", + "polkadot-primitives", + "scale-info", + "sp-api", + "sp-runtime", + "sp-trie", + "staging-xcm", +] + +[[package]] +name = "cumulus-primitives-parachain-inherent" +version = "0.18.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "cumulus-primitives-core", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-inherents", + "sp-trie", +] + +[[package]] +name = "cumulus-primitives-proof-size-hostfunction" +version = "0.12.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "sp-externalities", + "sp-runtime-interface", + "sp-trie", +] + +[[package]] +name = "cumulus-primitives-storage-weight-reclaim" +version = "11.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "cumulus-primitives-core", + "cumulus-primitives-proof-size-hostfunction", + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-runtime", +] + +[[package]] +name = "cumulus-primitives-timestamp" +version = "0.19.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "cumulus-primitives-core", + "sp-inherents", + "sp-timestamp", +] + +[[package]] +name = "cumulus-relay-chain-inprocess-interface" +version = "0.23.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "cumulus-primitives-core", + "cumulus-relay-chain-interface", + "futures", + "futures-timer", + "polkadot-cli", + "polkadot-service", + "sc-cli", + "sc-client-api", + "sc-sysinfo", + "sc-telemetry", + "sc-tracing", + "sp-api", + "sp-consensus", + "sp-core", + "sp-runtime", + "sp-state-machine", +] + +[[package]] +name = "cumulus-relay-chain-interface" +version = "0.22.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "cumulus-primitives-core", + "futures", + "jsonrpsee-core", + "parity-scale-codec", + "polkadot-overseer", + "sc-client-api", + "sp-api", + "sp-blockchain", + "sp-state-machine", + "sp-version", + "thiserror 1.0.69", +] + +[[package]] +name = "cumulus-relay-chain-minimal-node" +version = "0.23.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "array-bytes", + "async-trait", + "cumulus-primitives-core", + "cumulus-relay-chain-interface", + "cumulus-relay-chain-rpc-interface", + "futures", + "polkadot-core-primitives", + "polkadot-network-bridge", + "polkadot-node-network-protocol", + "polkadot-node-subsystem-util", + "polkadot-overseer", + "polkadot-primitives", + "polkadot-service", + "sc-authority-discovery", + "sc-client-api", + "sc-network", + "sc-network-common", + "sc-service", + "sc-tracing", + "sc-utils", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-consensus-babe", + "sp-runtime", + "substrate-prometheus-endpoint", + "tracing", +] + +[[package]] +name = "cumulus-relay-chain-rpc-interface" +version = "0.22.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "cumulus-primitives-core", + "cumulus-relay-chain-interface", + "either", + "futures", + "futures-timer", + "jsonrpsee", + "parity-scale-codec", + "pin-project", + "polkadot-overseer", + "prometheus", + "rand 0.8.5", + "sc-client-api", + "sc-rpc-api", + "sc-service", + "schnellru", + "serde", + "serde_json", + "smoldot 0.11.0", + "smoldot-light 0.9.0", + "sp-authority-discovery", + "sp-consensus-babe", + "sp-core", + "sp-runtime", + "sp-state-machine", + "sp-storage", + "sp-version", + "substrate-prometheus-endpoint", + "thiserror 1.0.69", + "tokio", + "tokio-util", + "tracing", + "url", +] + +[[package]] +name = "cumulus-test-relay-sproof-builder" +version = "0.19.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "cumulus-primitives-core", + "parity-scale-codec", + "polkadot-primitives", + "sp-runtime", + "sp-state-machine", + "sp-trie", +] + +[[package]] +name = "curve25519-dalek" +version = "4.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "rustc_version", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "curve25519-dalek-ng" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c359b7249347e46fb28804470d071c921156ad62b3eef5d34e2ba867533dec8" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.6.4", + "subtle-ng", + "zeroize", +] + +[[package]] +name = "cxx" +version = "1.0.158" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a71ea7f29c73f7ffa64c50b83c9fe4d3a6d4be89a86b009eb80d5a6d3429d741" +dependencies = [ + "cc", + "cxxbridge-cmd", + "cxxbridge-flags", + "cxxbridge-macro", + "foldhash", + "link-cplusplus", +] + +[[package]] +name = "cxx-build" +version = "1.0.158" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36a8232661d66dcf713394726157d3cfe0a89bfc85f52d6e9f9bbc2306797fe7" +dependencies = [ + "cc", + "codespan-reporting", + "proc-macro2", + "quote", + "scratch", + "syn 2.0.101", +] + +[[package]] +name = "cxxbridge-cmd" +version = "1.0.158" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f44296c8693e9ea226a48f6a122727f77aa9e9e338380cb021accaeeb7ee279" +dependencies = [ + "clap", + "codespan-reporting", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "cxxbridge-flags" +version = "1.0.158" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c42f69c181c176981ae44ba9876e2ea41ce8e574c296b38d06925ce9214fb8e4" + +[[package]] +name = "cxxbridge-macro" +version = "1.0.158" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8faff5d4467e0709448187df29ccbf3b0982cc426ee444a193f87b11afb565a8" +dependencies = [ + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.101", +] + +[[package]] +name = "darling" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.101", +] + +[[package]] +name = "darling_macro" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "dary_heap" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04d2cd9c18b9f454ed67da600630b021a8a80bf33f8c95896ab33aaf1c26b728" + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core 0.9.10", +] + +[[package]] +name = "data-encoding" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" + +[[package]] +name = "data-encoding-macro" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47ce6c96ea0102f01122a185683611bd5ac8d99e62bc59dd12e6bda344ee673d" +dependencies = [ + "data-encoding", + "data-encoding-macro-internal", +] + +[[package]] +name = "data-encoding-macro-internal" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976" +dependencies = [ + "data-encoding", + "syn 2.0.101", +] + +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "der-parser" +version = "9.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" +dependencies = [ + "asn1-rs 0.6.2", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", +] + +[[package]] +name = "der-parser" +version = "10.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07da5016415d5a3c4dd39b11ed26f915f52fc4e0dc197d87908bc916e51bc1a6" +dependencies = [ + "asn1-rs 0.7.1", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", +] + +[[package]] +name = "deranged" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive-syn-parse" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d65d7ce8132b7c0e54497a4d9a55a1c2a0912a0d786cf894472ba818fba45762" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "derive-where" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e73f2692d4bd3cac41dca28934a39894200c9fabf49586d77d0e5954af1d7902" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "derive_more" +version = "0.99.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.101", +] + +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", + "unicode-xid", +] + +[[package]] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" + +[[package]] +name = "digest" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +dependencies = [ + "generic-array 0.12.4", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "const-oid", + "crypto-common", + "subtle 2.6.1", +] + +[[package]] +name = "directories" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "directories-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "docify" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a772b62b1837c8f060432ddcc10b17aae1453ef17617a99bc07789252d2a5896" +dependencies = [ + "docify_macros", +] + +[[package]] +name = "docify_macros" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60e6be249b0a462a14784a99b19bf35a667bb5e09de611738bb7362fa4c95ff7" +dependencies = [ + "common-path", + "derive-syn-parse", + "once_cell", + "proc-macro2", + "quote", + "regex", + "syn 2.0.101", + "termcolor", + "toml 0.8.22", + "walkdir", +] + +[[package]] +name = "downcast" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" + +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" + +[[package]] +name = "dtoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" + +[[package]] +name = "dyn-clonable" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a36efbb9bfd58e1723780aa04b61aba95ace6a05d9ffabfdb0b43672552f0805" +dependencies = [ + "dyn-clonable-impl", + "dyn-clone", +] + +[[package]] +name = "dyn-clonable-impl" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8671d54058979a37a26f3511fbf8d198ba1aa35ffb202c42587d918d77213a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "dyn-clone" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "serdect", + "signature", + "spki", +] + +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8", + "signature", +] + +[[package]] +name = "ed25519-dalek" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand_core 0.6.4", + "serde", + "sha2 0.10.9", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "ed25519-zebra" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" +dependencies = [ + "curve25519-dalek", + "ed25519", + "hashbrown 0.14.5", + "hex", + "rand_core 0.6.4", + "sha2 0.10.9", + "zeroize", +] + +[[package]] +name = "educe" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417" +dependencies = [ + "enum-ordinalize", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array 0.14.7", + "group", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "serdect", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "encode_unicode" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" + +[[package]] +name = "enum-as-inner" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "enum-ordinalize" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea0dcfa4e54eeb516fe454635a95753ddd39acda650ce703031c6973e315dd5" +dependencies = [ + "enum-ordinalize-derive", +] + +[[package]] +name = "enum-ordinalize-derive" +version = "4.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "enumflags2" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba2f4b465f5318854c6f8dd686ede6c0a9dc67d4b1ac241cf0eb51521a309147" +dependencies = [ + "enumflags2_derive", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc4caf64a58d7a6d65ab00639b046ff54399a39f5f2554728895ace4b297cd79" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "enumn" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "env_filter" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "env_logger" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" +dependencies = [ + "humantime", + "is-terminal", + "log", + "regex", + "termcolor", +] + +[[package]] +name = "env_logger" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "jiff", + "log", +] + +[[package]] +name = "environmental" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b" + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener" +version = "5.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +dependencies = [ + "event-listener 5.4.0", + "pin-project-lite", +] + +[[package]] +name = "exit-future" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5" +dependencies = [ + "futures", +] + +[[package]] +name = "expander" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2c470c71d91ecbd179935b24170459e926382eaaa86b590b78814e180d8a8e2" +dependencies = [ + "blake2 0.10.6", + "file-guard", + "fs-err", + "prettyplease", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + +[[package]] +name = "fallible-iterator" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "fatality" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec6f82451ff7f0568c6181287189126d492b5654e30a788add08027b6363d019" +dependencies = [ + "fatality-proc-macro", + "thiserror 1.0.69", +] + +[[package]] +name = "fatality-proc-macro" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb42427514b063d97ce21d5199f36c0c307d981434a6be32582bc79fe5bd2303" +dependencies = [ + "expander", + "indexmap 2.9.0", + "proc-macro-crate 3.3.0", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "fdlimit" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e182f7dbc2ef73d9ef67351c5fbbea084729c48362d3ce9dd44c28e32e277fe5" +dependencies = [ + "libc", + "thiserror 1.0.69", +] + +[[package]] +name = "ff" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +dependencies = [ + "rand_core 0.6.4", + "subtle 2.6.1", +] + +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + +[[package]] +name = "file-guard" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21ef72acf95ec3d7dbf61275be556299490a245f017cf084bd23b4f68cf9407c" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "file-per-thread-logger" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84f2e425d9790201ba4af4630191feac6dcc98765b118d4d18e91d23c2353866" +dependencies = [ + "env_logger 0.10.2", + "log", +] + +[[package]] +name = "filetime" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" +dependencies = [ + "cfg-if", + "libc", + "libredox", + "windows-sys 0.59.0", +] + +[[package]] +name = "finality-grandpa" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4f8f43dc520133541781ec03a8cab158ae8b7f7169cdf22e9050aa6cf0fbdfc" +dependencies = [ + "either", + "futures", + "futures-timer", + "log", + "num-traits", + "parity-scale-codec", + "parking_lot 0.12.3", + "scale-info", +] + +[[package]] +name = "fixed-hash" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +dependencies = [ + "byteorder", + "rand 0.8.5", + "rustc-hex", + "static_assertions", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "fixedbitset" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "fork-tree" +version = "13.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "parity-scale-codec", +] + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "forwarded-header-value" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8835f84f38484cc86f110a805655697908257fb9a7af005234060891557198e9" +dependencies = [ + "nonempty", + "thiserror 1.0.69", +] + +[[package]] +name = "fragile" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dd6caf6059519a65843af8fe2a3ae298b14b80179855aeb4adc2c1934ee619" + +[[package]] +name = "frame-benchmarking" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-support", + "frame-support-procedural", + "frame-system", + "linregress", + "log", + "parity-scale-codec", + "paste", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-io", + "sp-runtime", + "sp-runtime-interface", + "sp-storage", + "static_assertions", +] + +[[package]] +name = "frame-benchmarking-cli" +version = "47.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "Inflector", + "array-bytes", + "chrono", + "clap", + "comfy-table", + "cumulus-client-parachain-inherent", + "cumulus-primitives-proof-size-hostfunction", + "frame-benchmarking", + "frame-support", + "frame-system", + "gethostname", + "handlebars", + "itertools 0.11.0", + "linked-hash-map", + "log", + "parity-scale-codec", + "polkadot-parachain-primitives", + "polkadot-primitives", + "rand 0.8.5", + "rand_pcg", + "sc-block-builder", + "sc-chain-spec", + "sc-cli", + "sc-client-api", + "sc-client-db", + "sc-executor", + "sc-runtime-utilities", + "sc-service", + "sc-sysinfo", + "serde", + "serde_json", + "sp-api", + "sp-block-builder", + "sp-blockchain", + "sp-core", + "sp-database", + "sp-externalities", + "sp-genesis-builder", + "sp-inherents", + "sp-io", + "sp-keystore", + "sp-runtime", + "sp-state-machine", + "sp-storage", + "sp-timestamp", + "sp-transaction-pool", + "sp-trie", + "sp-version", + "sp-wasm-interface", + "subxt", + "subxt-signer", + "thiserror 1.0.69", + "thousands", +] + +[[package]] +name = "frame-decode" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6027a409bac4fe95b4d107f965fcdbc252fc89d884a360d076b3070b6128c094" +dependencies = [ + "frame-metadata 17.0.0", + "parity-scale-codec", + "scale-decode 0.14.0", + "scale-info", + "scale-type-resolver", + "sp-crypto-hashing 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "frame-election-provider-solution-type" +version = "16.1.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "proc-macro-crate 3.3.0", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "frame-election-provider-support" +version = "40.1.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-election-provider-solution-type", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-npos-elections", + "sp-runtime", +] + +[[package]] +name = "frame-executive" +version = "40.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "aquamarine", + "frame-support", + "frame-system", + "frame-try-runtime", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-tracing", +] + +[[package]] +name = "frame-metadata" +version = "17.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "701bac17e9b55e0f95067c428ebcb46496587f08e8cf4ccc0fe5903bea10dbb8" +dependencies = [ + "cfg-if", + "parity-scale-codec", + "scale-info", + "serde", +] + +[[package]] +name = "frame-metadata" +version = "20.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26de808fa6461f2485dc51811aefed108850064994fb4a62b3ac21ffa62ac8df" +dependencies = [ + "cfg-if", + "parity-scale-codec", + "scale-info", + "serde", +] + +[[package]] +name = "frame-metadata-hash-extension" +version = "0.8.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "array-bytes", + "const-hex", + "docify", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-runtime", +] + +[[package]] +name = "frame-support" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "aquamarine", + "array-bytes", + "binary-merkle-tree", + "bitflags 1.3.2", + "docify", + "environmental", + "frame-metadata 20.0.0", + "frame-support-procedural", + "impl-trait-for-tuples", + "k256", + "log", + "macro_magic", + "parity-scale-codec", + "paste", + "scale-info", + "serde", + "serde_json", + "sp-api", + "sp-arithmetic", + "sp-core", + "sp-crypto-hashing-proc-macro", + "sp-debug-derive", + "sp-genesis-builder", + "sp-inherents", + "sp-io", + "sp-metadata-ir", + "sp-runtime", + "sp-staking", + "sp-state-machine", + "sp-std", + "sp-tracing", + "sp-trie", + "sp-weights", + "tt-call", +] + +[[package]] +name = "frame-support-procedural" +version = "33.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "Inflector", + "cfg-expr", + "derive-syn-parse", + "docify", + "expander", + "frame-support-procedural-tools", + "itertools 0.11.0", + "macro_magic", + "proc-macro-warning", + "proc-macro2", + "quote", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", + "syn 2.0.101", +] + +[[package]] +name = "frame-support-procedural-tools" +version = "13.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-support-procedural-tools-derive", + "proc-macro-crate 3.3.0", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "frame-support-procedural-tools-derive" +version = "12.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "frame-system" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "cfg-if", + "docify", + "frame-support", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-version", + "sp-weights", +] + +[[package]] +name = "frame-system-benchmarking" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", +] + +[[package]] +name = "frame-system-rpc-runtime-api" +version = "36.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "docify", + "parity-scale-codec", + "sp-api", +] + +[[package]] +name = "frame-try-runtime" +version = "0.46.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-support", + "parity-scale-codec", + "sp-api", + "sp-runtime", +] + +[[package]] +name = "frequency" +version = "0.0.0" +dependencies = [ + "frequency-cli", + "frequency-service", + "substrate-build-script-utils", +] + +[[package]] +name = "frequency-cli" +version = "0.0.0" +dependencies = [ + "clap", + "cli-opt", + "common-primitives", + "common-runtime", + "cumulus-client-cli", + "cumulus-client-parachain-inherent", + "cumulus-client-service", + "cumulus-pallet-weight-reclaim", + "cumulus-primitives-core", + "derive_more 0.99.20", + "frame-benchmarking", + "frame-benchmarking-cli", + "frame-metadata-hash-extension", + "frame-support", + "frame-system", + "frequency-runtime", + "frequency-service", + "futures", + "hex-literal", + "log", + "pallet-balances", + "pallet-frequency-tx-payment", + "pallet-handles", + "pallet-msa", + "pallet-stateful-storage", + "pallet-transaction-payment", + "polkadot-cli", + "polkadot-parachain-primitives", + "polkadot-primitives", + "polkadot-service", + "sc-cli", + "sc-client-api", + "sc-executor", + "sc-service", + "sc-sysinfo", + "sc-telemetry", + "sc-tracing", + "serde", + "serde_json", + "sp-api", + "sp-core", + "sp-inherents", + "sp-io", + "sp-keyring", + "sp-runtime", + "sp-timestamp", + "substrate-build-script-utils", +] + +[[package]] +name = "frequency-runtime" +version = "0.0.0" +dependencies = [ + "common-primitives", + "common-runtime", + "cumulus-pallet-aura-ext", + "cumulus-pallet-parachain-system", + "cumulus-pallet-session-benchmarking", + "cumulus-pallet-weight-reclaim", + "cumulus-primitives-aura", + "cumulus-primitives-core", + "cumulus-primitives-timestamp", + "frame-benchmarking", + "frame-executive", + "frame-metadata-hash-extension", + "frame-support", + "frame-system", + "frame-system-benchmarking", + "frame-system-rpc-runtime-api", + "frame-try-runtime", + "hex", + "hex-literal", + "log", + "pallet-aura", + "pallet-authorship", + "pallet-balances", + "pallet-capacity", + "pallet-capacity-runtime-api", + "pallet-collator-selection", + "pallet-collective", + "pallet-democracy", + "pallet-frequency-tx-payment", + "pallet-frequency-tx-payment-runtime-api", + "pallet-handles", + "pallet-handles-runtime-api", + "pallet-messages", + "pallet-messages-runtime-api", + "pallet-msa", + "pallet-msa-runtime-api", + "pallet-multisig", + "pallet-passkey", + "pallet-preimage", + "pallet-proxy", + "pallet-scheduler", + "pallet-schemas", + "pallet-schemas-runtime-api", + "pallet-session", + "pallet-stateful-storage", + "pallet-stateful-storage-runtime-api", + "pallet-sudo", + "pallet-time-release", + "pallet-timestamp", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc-runtime-api", + "pallet-treasury 27.0.0", + "pallet-utility", + "parity-scale-codec", + "polkadot-parachain-primitives", + "polkadot-runtime-common", + "scale-info", + "serde", + "serde_json", + "smallvec", + "sp-api", + "sp-block-builder", + "sp-consensus-aura", + "sp-core", + "sp-debug-derive", + "sp-genesis-builder", + "sp-inherents", + "sp-io", + "sp-offchain", + "sp-runtime", + "sp-session", + "sp-transaction-pool", + "sp-version", + "staging-parachain-info", + "static_assertions", + "substrate-wasm-builder", + "system-runtime-api", +] + +[[package]] +name = "frequency-service" +version = "0.0.0" +dependencies = [ + "clap", + "cli-opt", + "common-helpers", + "common-primitives", + "common-runtime", + "cumulus-client-cli", + "cumulus-client-collator", + "cumulus-client-consensus-aura", + "cumulus-client-consensus-common", + "cumulus-client-consensus-proposer", + "cumulus-client-network", + "cumulus-client-service", + "cumulus-primitives-core", + "cumulus-relay-chain-inprocess-interface", + "cumulus-relay-chain-interface", + "cumulus-relay-chain-minimal-node", + "cumulus-relay-chain-rpc-interface", + "derive_more 0.99.20", + "frame-benchmarking", + "frame-benchmarking-cli", + "frame-system", + "frequency-runtime", + "futures", + "hex", + "hex-literal", + "jsonrpsee", + "log", + "pallet-frequency-tx-payment-rpc", + "pallet-frequency-tx-payment-runtime-api", + "pallet-handles-rpc", + "pallet-handles-runtime-api", + "pallet-messages-rpc", + "pallet-messages-runtime-api", + "pallet-msa-rpc", + "pallet-msa-runtime-api", + "pallet-schemas-rpc", + "pallet-schemas-runtime-api", + "pallet-stateful-storage-rpc", + "pallet-stateful-storage-runtime-api", + "pallet-transaction-payment-rpc", + "parity-scale-codec", + "polkadot-cli", + "polkadot-primitives", + "polkadot-service", + "sc-basic-authorship", + "sc-chain-spec", + "sc-cli", + "sc-client-api", + "sc-client-db", + "sc-consensus", + "sc-consensus-manual-seal", + "sc-executor", + "sc-keystore", + "sc-network", + "sc-network-common", + "sc-network-sync", + "sc-offchain", + "sc-rpc", + "sc-service", + "sc-sysinfo", + "sc-telemetry", + "sc-tracing", + "sc-transaction-pool", + "sc-transaction-pool-api", + "scale-info", + "serde", + "serde_json", + "sp-api", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-consensus-aura", + "sp-core", + "sp-inherents", + "sp-keystore", + "sp-offchain", + "sp-runtime", + "sp-session", + "sp-timestamp", + "sp-transaction-pool", + "sp-wasm-interface", + "substrate-build-script-utils", + "substrate-frame-rpc-system", + "substrate-prometheus-endpoint", + "system-runtime-api", + "tokio", +] + +[[package]] +name = "fs-err" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" +dependencies = [ + "autocfg", +] + +[[package]] +name = "fs2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "fs4" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29f9df8a11882c4e3335eb2d18a0137c505d9ca927470b0cac9c6f0ae07d28f7" +dependencies = [ + "rustix 0.38.44", + "windows-sys 0.48.0", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-bounded" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91f328e7fb845fc832912fb6a34f40cf6d1888c92f974d1893a54e97b5ff542e" +dependencies = [ + "futures-timer", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", + "num_cpus", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-lite" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" +dependencies = [ + "fastrand 2.3.0", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "futures-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f2f12607f92c69b12ed746fabf9ca4f5c482cba46679c1a75b874ed7c26adb" +dependencies = [ + "futures-io", + "rustls", + "rustls-pki-types", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "generator" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d18470a76cb7f8ff746cf1f7470914f900252ec36bbc40b569d74b1258446827" +dependencies = [ + "cc", + "cfg-if", + "libc", + "log", + "rustversion", + "windows 0.61.1", +] + +[[package]] +name = "generic-array" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +dependencies = [ + "typenum", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "gethostname" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", + "wasm-bindgen", +] + +[[package]] +name = "getrandom_or_panic" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea1015b5a70616b688dc230cfe50c8af89d972cb132d5a622814d29773b10b9" +dependencies = [ + "rand 0.8.5", + "rand_core 0.6.4", +] + +[[package]] +name = "ghash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" +dependencies = [ + "opaque-debug 0.3.1", + "polyval", +] + +[[package]] +name = "gimli" +version = "0.27.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" +dependencies = [ + "fallible-iterator 0.2.0", + "indexmap 1.9.3", + "stable_deref_trait", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +dependencies = [ + "fallible-iterator 0.3.0", + "stable_deref_trait", +] + +[[package]] +name = "glob" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" + +[[package]] +name = "governor" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68a7f542ee6b35af73b06abc0dad1c1bae89964e4e253bc4b587b91c9637867b" +dependencies = [ + "cfg-if", + "dashmap", + "futures", + "futures-timer", + "no-std-compat", + "nonzero_ext", + "parking_lot 0.12.3", + "portable-atomic", + "quanta", + "rand 0.8.5", + "smallvec", + "spinning_top", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle 2.6.1", +] + +[[package]] +name = "h2" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap 2.9.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9421a676d1b147b16b82c9225157dc629087ef8ec4d5e2960f9437a90dac0a5" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.3.1", + "indexmap 2.9.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "handlebars" +version = "5.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d08485b96a0e6393e9e4d1b8d48cf74ad6c063cd905eb33f42c1ce3f0377539b" +dependencies = [ + "log", + "pest", + "pest_derive", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "handles-utils" +version = "0.0.0" +dependencies = [ + "oorandom", + "phf", + "twox-hash", + "unicode-normalization", +] + +[[package]] +name = "hash-db" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e7d7786361d7425ae2fe4f9e407eb0efaa0840f5212d109cc018c40c35c6ab4" + +[[package]] +name = "hash256-std-hasher" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92c171d55b98633f4ed3860808f004099b36c1cc29c42cfc53aa8591b21efcf2" +dependencies = [ + "crunchy", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "allocator-api2", + "serde", +] + +[[package]] +name = "hashbrown" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + +[[package]] +name = "hashlink" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +dependencies = [ + "hashbrown 0.14.5", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hermit-abi" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f154ce46856750ed433c8649605bf7ed2de3bc35fd9d2a9f30cddd873c80cb08" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hex-conservative" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20" + +[[package]] +name = "hex-conservative" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5313b072ce3c597065a808dbf612c4c8e8590bdbf8b579508bf7a762c5eae6cd" +dependencies = [ + "arrayvec 0.7.6", +] + +[[package]] +name = "hex-literal" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" + +[[package]] +name = "hickory-proto" +version = "0.24.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92652067c9ce6f66ce53cc38d1169daa36e6e7eb7dd3b63b5103bd9d97117248" +dependencies = [ + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "idna", + "ipnet", + "once_cell", + "rand 0.8.5", + "socket2 0.5.10", + "thiserror 1.0.69", + "tinyvec", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "hickory-proto" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8a6fe56c0038198998a6f217ca4e7ef3a5e51f46163bd6dd60b5c71ca6c6502" +dependencies = [ + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "idna", + "ipnet", + "once_cell", + "rand 0.9.1", + "ring 0.17.14", + "thiserror 2.0.12", + "tinyvec", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "hickory-resolver" +version = "0.24.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbb117a1ca520e111743ab2f6688eddee69db4e0ea242545a604dce8a66fd22e" +dependencies = [ + "cfg-if", + "futures-util", + "hickory-proto 0.24.4", + "ipconfig", + "lru-cache", + "once_cell", + "parking_lot 0.12.3", + "rand 0.8.5", + "resolv-conf", + "smallvec", + "thiserror 1.0.69", + "tokio", + "tracing", +] + +[[package]] +name = "hickory-resolver" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc62a9a99b0bfb44d2ab95a7208ac952d31060efc16241c87eaf36406fecf87a" +dependencies = [ + "cfg-if", + "futures-util", + "hickory-proto 0.25.2", + "ipconfig", + "moka", + "once_cell", + "parking_lot 0.12.3", + "rand 0.9.1", + "resolv-conf", + "smallvec", + "thiserror 2.0.12", + "tokio", + "tracing", +] + +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac 0.12.1", +] + +[[package]] +name = "hmac" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" +dependencies = [ + "crypto-mac 0.8.0", + "digest 0.9.0", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "hmac-drbg" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" +dependencies = [ + "digest 0.9.0", + "generic-array 0.14.7", + "hmac 0.8.1", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.3.1", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http 1.3.1", + "http-body 1.0.1", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "humantime" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f" + +[[package]] +name = "hyper" +version = "0.14.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.5.10", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2 0.4.10", + "http 1.3.1", + "http-body 1.0.1", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03a01595e11bdcec50946522c32dde3fc6914743000a68b93000965f2f02406d" +dependencies = [ + "http 1.3.1", + "hyper 1.6.0", + "hyper-util", + "log", + "rustls", + "rustls-native-certs", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf9f1e950e0d9d1d3c47184416723cf29c0d1f93bd8cccf37e4beb6b44f31710" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "hyper 1.6.0", + "libc", + "pin-project-lite", + "socket2 0.5.10", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core 0.61.2", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_collections" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" + +[[package]] +name = "icu_properties" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "potential_utf", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" + +[[package]] +name = "icu_provider" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +dependencies = [ + "displaydoc", + "icu_locale_core", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "if-addrs" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cabb0019d51a643781ff15c9c8a3e5dedc365c47211270f4e8f82812fedd8f0a" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "if-watch" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdf9d64cfcf380606e64f9a0bcf493616b65331199f984151a6fa11a7b3cde38" +dependencies = [ + "async-io 2.4.1", + "core-foundation 0.9.4", + "fnv", + "futures", + "if-addrs", + "ipnet", + "log", + "netlink-packet-core", + "netlink-packet-route", + "netlink-proto", + "netlink-sys", + "rtnetlink", + "system-configuration", + "tokio", + "windows 0.53.0", +] + +[[package]] +name = "igd-next" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "064d90fec10d541084e7b39ead8875a5a80d9114a2b18791565253bae25f49e4" +dependencies = [ + "async-trait", + "attohttpc", + "bytes", + "futures", + "http 0.2.12", + "hyper 0.14.32", + "log", + "rand 0.8.5", + "tokio", + "url", + "xmltree", +] + +[[package]] +name = "impl-codec" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d40b9d5e17727407e55028eafc22b2dc68781786e6d7eb8a21103f5058e3a14" +dependencies = [ + "parity-scale-codec", +] + +[[package]] +name = "impl-num-traits" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "803d15461ab0dcc56706adf266158acbc44ccf719bf7d0af30705f58b90a4b8c" +dependencies = [ + "integer-sqrt", + "num-traits", + "uint 0.10.0", +] + +[[package]] +name = "impl-serde" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" +dependencies = [ + "serde", +] + +[[package]] +name = "impl-serde" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a143eada6a1ec4aefa5049037a26a6d597bfd64f8c026d07b77133e02b7dd0b" +dependencies = [ + "serde", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "include_dir" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "923d117408f1e49d914f1a379a309cffe4f18c05cf4e3d12e613a15fc81bd0dd" +dependencies = [ + "include_dir_macros", +] + +[[package]] +name = "include_dir_macros" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cab85a7ed0bd5f0e76d93846e0147172bed2e2d3f859bcc33a8d9699cad1a75" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" +dependencies = [ + "equivalent", + "hashbrown 0.15.3", +] + +[[package]] +name = "indexmap-nostd" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" + +[[package]] +name = "inout" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "integer-sqrt" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770" +dependencies = [ + "num-traits", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "ip_network" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2f047c0a98b2f299aa5d6d7088443570faae494e9ae1305e48be000c9e0eb1" + +[[package]] +name = "ipconfig" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +dependencies = [ + "socket2 0.5.10", + "widestring", + "windows-sys 0.48.0", + "winreg", +] + +[[package]] +name = "ipnet" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + +[[package]] +name = "is-terminal" +version = "0.4.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" +dependencies = [ + "hermit-abi 0.5.1", + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "is_executable" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4a1b5bad6f9072935961dfbf1cced2f3d129963d091b6f69f007fe04e758ae2" +dependencies = [ + "winapi", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "jiff" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a194df1107f33c79f4f93d02c80798520551949d59dfad22b6157048a88cca93" +dependencies = [ + "jiff-static", + "log", + "portable-atomic", + "portable-atomic-util", + "serde", +] + +[[package]] +name = "jiff-static" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c6e1db7ed32c6c71b759497fae34bf7933636f75a251b9e736555da426f6442" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "jobserver" +version = "0.1.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" +dependencies = [ + "getrandom 0.3.3", + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "jsonrpsee" +version = "0.24.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b26c20e2178756451cfeb0661fb74c47dd5988cb7e3939de7e9241fd604d42" +dependencies = [ + "jsonrpsee-client-transport", + "jsonrpsee-core", + "jsonrpsee-proc-macros", + "jsonrpsee-server", + "jsonrpsee-types", + "jsonrpsee-ws-client", + "tokio", + "tracing", +] + +[[package]] +name = "jsonrpsee-client-transport" +version = "0.24.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bacb85abf4117092455e1573625e21b8f8ef4dec8aff13361140b2dc266cdff2" +dependencies = [ + "base64 0.22.1", + "futures-util", + "http 1.3.1", + "jsonrpsee-core", + "pin-project", + "rustls", + "rustls-pki-types", + "rustls-platform-verifier", + "soketto 0.8.1", + "thiserror 1.0.69", + "tokio", + "tokio-rustls", + "tokio-util", + "tracing", + "url", +] + +[[package]] +name = "jsonrpsee-core" +version = "0.24.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456196007ca3a14db478346f58c7238028d55ee15c1df15115596e411ff27925" +dependencies = [ + "async-trait", + "bytes", + "futures-timer", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "jsonrpsee-types", + "parking_lot 0.12.3", + "pin-project", + "rand 0.8.5", + "rustc-hash 2.1.1", + "serde", + "serde_json", + "thiserror 1.0.69", + "tokio", + "tokio-stream", + "tracing", +] + +[[package]] +name = "jsonrpsee-proc-macros" +version = "0.24.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e65763c942dfc9358146571911b0cd1c361c2d63e2d2305622d40d36376ca80" +dependencies = [ + "heck 0.5.0", + "proc-macro-crate 3.3.0", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "jsonrpsee-server" +version = "0.24.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55e363146da18e50ad2b51a0a7925fc423137a0b1371af8235b1c231a0647328" +dependencies = [ + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "hyper 1.6.0", + "hyper-util", + "jsonrpsee-core", + "jsonrpsee-types", + "pin-project", + "route-recognizer", + "serde", + "serde_json", + "soketto 0.8.1", + "thiserror 1.0.69", + "tokio", + "tokio-stream", + "tokio-util", + "tower", + "tracing", +] + +[[package]] +name = "jsonrpsee-types" +version = "0.24.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08a8e70baf945b6b5752fc8eb38c918a48f1234daf11355e07106d963f860089" +dependencies = [ + "http 1.3.1", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "jsonrpsee-ws-client" +version = "0.24.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01b3323d890aa384f12148e8d2a1fd18eb66e9e7e825f9de4fa53bcc19b93eef" +dependencies = [ + "http 1.3.1", + "jsonrpsee-client-transport", + "jsonrpsee-core", + "jsonrpsee-types", + "url", +] + +[[package]] +name = "k256" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "serdect", + "sha2 0.10.9", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "keccak-hash" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e1b8590eb6148af2ea2d75f38e7d29f5ca970d5a4df456b3ef19b8b415d0264" +dependencies = [ + "primitive-types", + "tiny-keccak", +] + +[[package]] +name = "keystream" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c33070833c9ee02266356de0c43f723152bd38bd96ddf52c82b3af10c9138b28" + +[[package]] +name = "kvdb" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7d770dcb02bf6835887c3a979b5107a04ff4bbde97a5f0928d27404a155add9" +dependencies = [ + "smallvec", +] + +[[package]] +name = "kvdb-memorydb" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf7a85fe66f9ff9cd74e169fdd2c94c6e1e74c412c99a73b4df3200b5d3760b2" +dependencies = [ + "kvdb", + "parking_lot 0.12.3", +] + +[[package]] +name = "kvdb-rocksdb" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b644c70b92285f66bfc2032922a79000ea30af7bc2ab31902992a5dcb9b434f6" +dependencies = [ + "kvdb", + "num_cpus", + "parking_lot 0.12.3", + "regex", + "rocksdb", + "smallvec", +] + +[[package]] +name = "landlock" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9baa9eeb6e315942429397e617a190f4fdc696ef1ee0342939d641029cbb4ea7" +dependencies = [ + "enumflags2", + "libc", + "thiserror 1.0.69", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin 0.9.8", +] + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "libc" +version = "0.2.172" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" + +[[package]] +name = "libflate" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45d9dfdc14ea4ef0900c1cddbc8dcd553fbaacd8a4a282cf4018ae9dd04fb21e" +dependencies = [ + "adler32", + "core2", + "crc32fast", + "dary_heap", + "libflate_lz77", +] + +[[package]] +name = "libflate_lz77" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e0d73b369f386f1c44abd9c570d5318f55ccde816ff4b562fa452e5182863d" +dependencies = [ + "core2", + "hashbrown 0.14.5", + "rle-decode-fast", +] + +[[package]] +name = "libloading" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" +dependencies = [ + "cfg-if", + "windows-targets 0.53.0", +] + +[[package]] +name = "libm" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" + +[[package]] +name = "libp2p" +version = "0.54.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbbe80f9c7e00526cd6b838075b9c171919404a4732cb2fa8ece0a093223bfc4" +dependencies = [ + "bytes", + "either", + "futures", + "futures-timer", + "getrandom 0.2.16", + "libp2p-allow-block-list", + "libp2p-connection-limits", + "libp2p-core", + "libp2p-dns", + "libp2p-identify", + "libp2p-identity", + "libp2p-kad", + "libp2p-mdns", + "libp2p-metrics", + "libp2p-noise", + "libp2p-ping", + "libp2p-quic", + "libp2p-request-response", + "libp2p-swarm", + "libp2p-tcp", + "libp2p-upnp", + "libp2p-websocket", + "libp2p-yamux", + "multiaddr 0.18.2", + "pin-project", + "rw-stream-sink", + "thiserror 1.0.69", +] + +[[package]] +name = "libp2p-allow-block-list" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1027ccf8d70320ed77e984f273bc8ce952f623762cb9bf2d126df73caef8041" +dependencies = [ + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "void", +] + +[[package]] +name = "libp2p-connection-limits" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d003540ee8baef0d254f7b6bfd79bac3ddf774662ca0abf69186d517ef82ad8" +dependencies = [ + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "void", +] + +[[package]] +name = "libp2p-core" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a61f26c83ed111104cd820fe9bc3aaabbac5f1652a1d213ed6e900b7918a1298" +dependencies = [ + "either", + "fnv", + "futures", + "futures-timer", + "libp2p-identity", + "multiaddr 0.18.2", + "multihash 0.19.3", + "multistream-select", + "once_cell", + "parking_lot 0.12.3", + "pin-project", + "quick-protobuf", + "rand 0.8.5", + "rw-stream-sink", + "smallvec", + "thiserror 1.0.69", + "tracing", + "unsigned-varint 0.8.0", + "void", + "web-time", +] + +[[package]] +name = "libp2p-dns" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97f37f30d5c7275db282ecd86e54f29dd2176bd3ac656f06abf43bedb21eb8bd" +dependencies = [ + "async-trait", + "futures", + "hickory-resolver 0.24.4", + "libp2p-core", + "libp2p-identity", + "parking_lot 0.12.3", + "smallvec", + "tracing", +] + +[[package]] +name = "libp2p-identify" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1711b004a273be4f30202778856368683bd9a83c4c7dcc8f848847606831a4e3" +dependencies = [ + "asynchronous-codec 0.7.0", + "either", + "futures", + "futures-bounded", + "futures-timer", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "lru 0.12.5", + "quick-protobuf", + "quick-protobuf-codec", + "smallvec", + "thiserror 1.0.69", + "tracing", + "void", +] + +[[package]] +name = "libp2p-identity" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbb68ea10844211a59ce46230909fd0ea040e8a192454d4cc2ee0d53e12280eb" +dependencies = [ + "bs58", + "ed25519-dalek", + "hkdf", + "multihash 0.19.3", + "quick-protobuf", + "rand 0.8.5", + "sha2 0.10.9", + "thiserror 2.0.12", + "tracing", + "zeroize", +] + +[[package]] +name = "libp2p-kad" +version = "0.46.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced237d0bd84bbebb7c2cad4c073160dacb4fe40534963c32ed6d4c6bb7702a3" +dependencies = [ + "arrayvec 0.7.6", + "asynchronous-codec 0.7.0", + "bytes", + "either", + "fnv", + "futures", + "futures-bounded", + "futures-timer", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "quick-protobuf", + "quick-protobuf-codec", + "rand 0.8.5", + "sha2 0.10.9", + "smallvec", + "thiserror 1.0.69", + "tracing", + "uint 0.9.5", + "void", + "web-time", +] + +[[package]] +name = "libp2p-mdns" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14b8546b6644032565eb29046b42744aee1e9f261ed99671b2c93fb140dba417" +dependencies = [ + "data-encoding", + "futures", + "hickory-proto 0.24.4", + "if-watch", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "rand 0.8.5", + "smallvec", + "socket2 0.5.10", + "tokio", + "tracing", + "void", +] + +[[package]] +name = "libp2p-metrics" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ebafa94a717c8442d8db8d3ae5d1c6a15e30f2d347e0cd31d057ca72e42566" +dependencies = [ + "futures", + "libp2p-core", + "libp2p-identify", + "libp2p-identity", + "libp2p-kad", + "libp2p-ping", + "libp2p-swarm", + "pin-project", + "prometheus-client", + "web-time", +] + +[[package]] +name = "libp2p-noise" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36b137cb1ae86ee39f8e5d6245a296518912014eaa87427d24e6ff58cfc1b28c" +dependencies = [ + "asynchronous-codec 0.7.0", + "bytes", + "curve25519-dalek", + "futures", + "libp2p-core", + "libp2p-identity", + "multiaddr 0.18.2", + "multihash 0.19.3", + "once_cell", + "quick-protobuf", + "rand 0.8.5", + "sha2 0.10.9", + "snow", + "static_assertions", + "thiserror 1.0.69", + "tracing", + "x25519-dalek", + "zeroize", +] + +[[package]] +name = "libp2p-ping" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "005a34420359223b974ee344457095f027e51346e992d1e0dcd35173f4cdd422" +dependencies = [ + "either", + "futures", + "futures-timer", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "rand 0.8.5", + "tracing", + "void", + "web-time", +] + +[[package]] +name = "libp2p-quic" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46352ac5cd040c70e88e7ff8257a2ae2f891a4076abad2c439584a31c15fd24e" +dependencies = [ + "bytes", + "futures", + "futures-timer", + "if-watch", + "libp2p-core", + "libp2p-identity", + "libp2p-tls", + "parking_lot 0.12.3", + "quinn", + "rand 0.8.5", + "ring 0.17.14", + "rustls", + "socket2 0.5.10", + "thiserror 1.0.69", + "tokio", + "tracing", +] + +[[package]] +name = "libp2p-request-response" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1356c9e376a94a75ae830c42cdaea3d4fe1290ba409a22c809033d1b7dcab0a6" +dependencies = [ + "async-trait", + "futures", + "futures-bounded", + "futures-timer", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "rand 0.8.5", + "smallvec", + "tracing", + "void", + "web-time", +] + +[[package]] +name = "libp2p-swarm" +version = "0.45.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7dd6741793d2c1fb2088f67f82cf07261f25272ebe3c0b0c311e0c6b50e851a" +dependencies = [ + "either", + "fnv", + "futures", + "futures-timer", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm-derive", + "lru 0.12.5", + "multistream-select", + "once_cell", + "rand 0.8.5", + "smallvec", + "tokio", + "tracing", + "void", + "web-time", +] + +[[package]] +name = "libp2p-swarm-derive" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "206e0aa0ebe004d778d79fb0966aa0de996c19894e2c0605ba2f8524dd4443d8" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "libp2p-tcp" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad964f312c59dcfcac840acd8c555de8403e295d39edf96f5240048b5fcaa314" +dependencies = [ + "futures", + "futures-timer", + "if-watch", + "libc", + "libp2p-core", + "libp2p-identity", + "socket2 0.5.10", + "tokio", + "tracing", +] + +[[package]] +name = "libp2p-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b23dddc2b9c355f73c1e36eb0c3ae86f7dc964a3715f0731cfad352db4d847" +dependencies = [ + "futures", + "futures-rustls", + "libp2p-core", + "libp2p-identity", + "rcgen", + "ring 0.17.14", + "rustls", + "rustls-webpki 0.101.7", + "thiserror 1.0.69", + "x509-parser 0.16.0", + "yasna", +] + +[[package]] +name = "libp2p-upnp" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01bf2d1b772bd3abca049214a3304615e6a36fa6ffc742bdd1ba774486200b8f" +dependencies = [ + "futures", + "futures-timer", + "igd-next", + "libp2p-core", + "libp2p-swarm", + "tokio", + "tracing", + "void", +] + +[[package]] +name = "libp2p-websocket" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "888b2ff2e5d8dcef97283daab35ad1043d18952b65e05279eecbe02af4c6e347" +dependencies = [ + "either", + "futures", + "futures-rustls", + "libp2p-core", + "libp2p-identity", + "parking_lot 0.12.3", + "pin-project-lite", + "rw-stream-sink", + "soketto 0.8.1", + "thiserror 1.0.69", + "tracing", + "url", + "webpki-roots", +] + +[[package]] +name = "libp2p-yamux" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "788b61c80789dba9760d8c669a5bedb642c8267555c803fabd8396e4ca5c5882" +dependencies = [ + "either", + "futures", + "libp2p-core", + "thiserror 1.0.69", + "tracing", + "yamux 0.12.1", + "yamux 0.13.5", +] + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.9.1", + "libc", + "redox_syscall 0.5.12", +] + +[[package]] +name = "librocksdb-sys" +version = "0.11.0+8.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3386f101bcb4bd252d8e9d2fb41ec3b0862a15a62b478c355b2982efa469e3e" +dependencies = [ + "bindgen", + "bzip2-sys", + "cc", + "glob", + "libc", + "libz-sys", + "tikv-jemalloc-sys", +] + +[[package]] +name = "libsecp256k1" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79019718125edc905a079a70cfa5f3820bc76139fc91d6f9abc27ea2a887139" +dependencies = [ + "arrayref", + "base64 0.22.1", + "digest 0.9.0", + "hmac-drbg", + "libsecp256k1-core", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", + "rand 0.8.5", + "serde", + "sha2 0.9.9", + "typenum", +] + +[[package]] +name = "libsecp256k1-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" +dependencies = [ + "crunchy", + "digest 0.9.0", + "subtle 2.6.1", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libz-sys" +version = "1.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "link-cplusplus" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a6f6da007f968f9def0d65a05b187e2960183de70c160204ecfccf0ee330212" +dependencies = [ + "cc", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linked_hash_set" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bae85b5be22d9843c80e5fc80e9b64c8a3b1f98f867c709956eca3efff4e92e2" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "linregress" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9eda9dcf4f2a99787827661f312ac3219292549c2ee992bf9a6248ffb066bf7" +dependencies = [ + "nalgebra", +] + +[[package]] +name = "linux-raw-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" + +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "linux-raw-sys" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "linux-raw-sys" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" + +[[package]] +name = "lioness" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae926706ba42c425c9457121178330d75e273df2e82e28b758faf3de3a9acb9" +dependencies = [ + "arrayref", + "blake2 0.8.1", + "chacha", + "keystream", +] + +[[package]] +name = "litemap" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" + +[[package]] +name = "litep2p" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14fb10e63363204b89d91e1292df83322fd9de5d7fa76c3d5c78ddc2f8f3efa9" +dependencies = [ + "async-trait", + "bs58", + "bytes", + "cid 0.11.1", + "ed25519-dalek", + "futures", + "futures-timer", + "hickory-resolver 0.25.2", + "indexmap 2.9.0", + "libc", + "mockall", + "multiaddr 0.17.1", + "multihash 0.17.0", + "network-interface", + "parking_lot 0.12.3", + "pin-project", + "prost 0.13.5", + "prost-build", + "rand 0.8.5", + "serde", + "sha2 0.10.9", + "simple-dns", + "smallvec", + "snow", + "socket2 0.5.10", + "thiserror 2.0.12", + "tokio", + "tokio-stream", + "tokio-tungstenite", + "tokio-util", + "tracing", + "uint 0.10.0", + "unsigned-varint 0.8.0", + "url", + "x25519-dalek", + "x509-parser 0.17.0", + "yamux 0.13.5", + "yasna", + "zeroize", +] + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" + +[[package]] +name = "loom" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" +dependencies = [ + "cfg-if", + "generator", + "scoped-tls", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "lru" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a83fb7698b3643a0e34f9ae6f2e8f0178c0fd42f8b59d493aa271ff3a5bf21" + +[[package]] +name = "lru" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" +dependencies = [ + "hashbrown 0.15.3", +] + +[[package]] +name = "lru-cache" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + +[[package]] +name = "lz4" +version = "1.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a20b523e860d03443e98350ceaac5e71c6ba89aea7d960769ec3ce37f4de5af4" +dependencies = [ + "lz4-sys", +] + +[[package]] +name = "lz4-sys" +version = "1.11.1+lz4-1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bd8c0d6c6ed0cd30b3652886bb8711dc4bb01d637a68105a3d5158039b418e6" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] + +[[package]] +name = "macro_magic" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc33f9f0351468d26fbc53d9ce00a096c8522ecb42f19b50f34f2c422f76d21d" +dependencies = [ + "macro_magic_core", + "macro_magic_macros", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "macro_magic_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1687dc887e42f352865a393acae7cf79d98fab6351cde1f58e9e057da89bf150" +dependencies = [ + "const-random", + "derive-syn-parse", + "macro_magic_core_macros", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "macro_magic_core_macros" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b02abfe41815b5bd98dbd4260173db2c116dda171dc0fe7838cb206333b83308" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "macro_magic_macros" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ea28ee64b88876bf45277ed9a5817c1817df061a74f2b988971a12570e5869" +dependencies = [ + "macro_magic_core", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matrixmultiply" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08" +dependencies = [ + "autocfg", + "rawpointer", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memfd" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64" +dependencies = [ + "rustix 0.38.44", +] + +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + +[[package]] +name = "memmap2" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memory-db" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808b50db46293432a45e63bc15ea51e0ab4c0a1647b8eb114e31a3e698dd6fbe" +dependencies = [ + "hash-db", +] + +[[package]] +name = "merkleized-metadata" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc9b7ac0ce054412d9a85ff39bac27aec27483b06cef8756b57d9c29d448d081" +dependencies = [ + "array-bytes", + "blake3", + "frame-metadata 20.0.0", + "parity-scale-codec", + "scale-decode 0.13.1", + "scale-info", +] + +[[package]] +name = "merlin" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +dependencies = [ + "byteorder", + "keccak", + "rand_core 0.6.4", + "zeroize", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" +dependencies = [ + "adler2", +] + +[[package]] +name = "mio" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +dependencies = [ + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.59.0", +] + +[[package]] +name = "mixnet" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daa3eb39495d8e2e2947a1d862852c90cc6a4a8845f8b41c8829cb9fcc047f4a" +dependencies = [ + "arrayref", + "arrayvec 0.7.6", + "bitflags 1.3.2", + "blake2 0.10.6", + "c2-chacha", + "curve25519-dalek", + "either", + "hashlink", + "lioness", + "log", + "parking_lot 0.12.3", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_distr", + "subtle 2.6.1", + "thiserror 1.0.69", + "zeroize", +] + +[[package]] +name = "mmr-gadget" +version = "44.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "futures", + "log", + "parity-scale-codec", + "sc-client-api", + "sc-offchain", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-consensus-beefy", + "sp-core", + "sp-mmr-primitives", + "sp-runtime", +] + +[[package]] +name = "mmr-rpc" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "jsonrpsee", + "parity-scale-codec", + "serde", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-mmr-primitives", + "sp-runtime", +] + +[[package]] +name = "mockall" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39a6bfcc6c8c7eed5ee98b9c3e33adc726054389233e201c95dab2d41a3839d2" +dependencies = [ + "cfg-if", + "downcast", + "fragile", + "mockall_derive", + "predicates", + "predicates-tree", +] + +[[package]] +name = "mockall_derive" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25ca3004c2efe9011bd4e461bd8256445052b9615405b4f7ea43fc8ca5c20898" +dependencies = [ + "cfg-if", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "moka" +version = "0.12.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9321642ca94a4282428e6ea4af8cc2ca4eac48ac7a6a4ea8f33f76d0ce70926" +dependencies = [ + "crossbeam-channel", + "crossbeam-epoch", + "crossbeam-utils", + "loom", + "parking_lot 0.12.3", + "portable-atomic", + "rustc_version", + "smallvec", + "tagptr", + "thiserror 1.0.69", + "uuid", +] + +[[package]] +name = "multi-stash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685a9ac4b61f4e728e1d2c6a7844609c16527aeb5e6c865915c08e619c16410f" + +[[package]] +name = "multiaddr" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b36f567c7099511fa8612bbbb52dda2419ce0bdbacf31714e3a5ffdb766d3bd" +dependencies = [ + "arrayref", + "byteorder", + "data-encoding", + "log", + "multibase", + "multihash 0.17.0", + "percent-encoding", + "serde", + "static_assertions", + "unsigned-varint 0.7.2", + "url", +] + +[[package]] +name = "multiaddr" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe6351f60b488e04c1d21bc69e56b89cb3f5e8f5d22557d6e8031bdfd79b6961" +dependencies = [ + "arrayref", + "byteorder", + "data-encoding", + "libp2p-identity", + "multibase", + "multihash 0.19.3", + "percent-encoding", + "serde", + "static_assertions", + "unsigned-varint 0.8.0", + "url", +] + +[[package]] +name = "multibase" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" +dependencies = [ + "base-x", + "data-encoding", + "data-encoding-macro", +] + +[[package]] +name = "multihash" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835d6ff01d610179fbce3de1694d007e500bf33a7f29689838941d6bf783ae40" +dependencies = [ + "blake2b_simd", + "blake2s_simd", + "blake3", + "core2", + "digest 0.10.7", + "multihash-derive", + "sha2 0.10.9", + "sha3", + "unsigned-varint 0.7.2", +] + +[[package]] +name = "multihash" +version = "0.19.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d" +dependencies = [ + "core2", + "unsigned-varint 0.8.0", +] + +[[package]] +name = "multihash-derive" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db" +dependencies = [ + "proc-macro-crate 1.1.3", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", + "synstructure 0.12.6", +] + +[[package]] +name = "multimap" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084" + +[[package]] +name = "multistream-select" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea0df8e5eec2298a62b326ee4f0d7fe1a6b90a09dfcf9df37b38f947a8c42f19" +dependencies = [ + "bytes", + "futures", + "log", + "pin-project", + "smallvec", + "unsigned-varint 0.7.2", +] + +[[package]] +name = "nalgebra" +version = "0.33.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26aecdf64b707efd1310e3544d709c5c0ac61c13756046aaaba41be5c4f66a3b" +dependencies = [ + "approx", + "matrixmultiply", + "num-complex", + "num-rational", + "num-traits", + "simba", + "typenum", +] + +[[package]] +name = "names" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bddcd3bf5144b6392de80e04c347cd7fab2508f6df16a85fc496ecd5cec39bc" +dependencies = [ + "rand 0.8.5", +] + +[[package]] +name = "nanorand" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" + +[[package]] +name = "netlink-packet-core" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4" +dependencies = [ + "anyhow", + "byteorder", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-route" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053998cea5a306971f88580d0829e90f270f940befd7cf928da179d4187a5a66" +dependencies = [ + "anyhow", + "bitflags 1.3.2", + "byteorder", + "libc", + "netlink-packet-core", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-utils" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" +dependencies = [ + "anyhow", + "byteorder", + "paste", + "thiserror 1.0.69", +] + +[[package]] +name = "netlink-proto" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72452e012c2f8d612410d89eea01e2d9b56205274abb35d53f60200b2ec41d60" +dependencies = [ + "bytes", + "futures", + "log", + "netlink-packet-core", + "netlink-sys", + "thiserror 2.0.12", +] + +[[package]] +name = "netlink-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16c903aa70590cb93691bf97a767c8d1d6122d2cc9070433deb3bbf36ce8bd23" +dependencies = [ + "bytes", + "futures", + "libc", + "log", + "tokio", +] + +[[package]] +name = "network-interface" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3329f515506e4a2de3aa6e07027a6758e22e0f0e8eaf64fa47261cec2282602" +dependencies = [ + "cc", + "libc", + "thiserror 1.0.69", + "winapi", +] + +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", +] + +[[package]] +name = "nix" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +dependencies = [ + "bitflags 2.9.1", + "cfg-if", + "cfg_aliases 0.2.1", + "libc", +] + +[[package]] +name = "no-std-compat" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" + +[[package]] +name = "no-std-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nonempty" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9e591e719385e6ebaeb5ce5d3887f7d5676fceca6411d1925ccc95745f3d6f7" + +[[package]] +name = "nonzero_ext" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", + "serde", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "num-format" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" +dependencies = [ + "arrayvec 0.7.6", + "itoa", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi 0.3.9", + "libc", +] + +[[package]] +name = "numtoa" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aa2c4e539b869820a2b82e1aef6ff40aa85e65decdd5185e83fb4b1249cd00f" + +[[package]] +name = "object" +version = "0.30.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385" +dependencies = [ + "crc32fast", + "hashbrown 0.13.2", + "indexmap 1.9.3", + "memchr", +] + +[[package]] +name = "object" +version = "0.36.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +dependencies = [ + "memchr", +] + +[[package]] +name = "oid-registry" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d8034d9489cdaf79228eb9f6a3b8d7bb32ba00d6645ebd48eef4077ceb5bd9" +dependencies = [ + "asn1-rs 0.6.2", +] + +[[package]] +name = "oid-registry" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f40cff3dde1b6087cc5d5f5d4d65712f34016a03ed60e9c08dcc392736b5b7" +dependencies = [ + "asn1-rs 0.7.1", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +dependencies = [ + "critical-section", + "portable-atomic", +] + +[[package]] +name = "once_cell_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" + +[[package]] +name = "oorandom" +version = "11.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" + +[[package]] +name = "opaque-debug" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "openssl-probe" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "orchestra" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41f6bbacc8c189a3f2e45e0fd0436e5d97f194db888e721bdbc3973e7dbed4c2" +dependencies = [ + "async-trait", + "dyn-clonable", + "futures", + "futures-timer", + "orchestra-proc-macro", + "pin-project", + "prioritized-metered-channel", + "thiserror 1.0.69", + "tracing", +] + +[[package]] +name = "orchestra-proc-macro" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7b1d40dd8f367db3c65bec8d3dd47d4a604ee8874480738f93191bddab4e0e0" +dependencies = [ + "expander", + "indexmap 2.9.0", + "itertools 0.11.0", + "petgraph 0.6.5", + "proc-macro-crate 3.3.0", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2 0.10.9", +] + +[[package]] +name = "pallet-asset-conversion" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-asset-rate" +version = "19.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", +] + +[[package]] +name = "pallet-aura" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-support", + "frame-system", + "log", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-application-crypto", + "sp-consensus-aura", + "sp-runtime", +] + +[[package]] +name = "pallet-authority-discovery" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-support", + "frame-system", + "pallet-session", + "parity-scale-codec", + "scale-info", + "sp-application-crypto", + "sp-authority-discovery", + "sp-runtime", +] + +[[package]] +name = "pallet-authorship" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "parity-scale-codec", + "scale-info", + "sp-runtime", +] + +[[package]] +name = "pallet-babe" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-authorship", + "pallet-session", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-application-crypto", + "sp-consensus-babe", + "sp-core", + "sp-io", + "sp-runtime", + "sp-session", + "sp-staking", +] + +[[package]] +name = "pallet-bags-list" +version = "39.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "aquamarine", + "docify", + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-tracing", +] + +[[package]] +name = "pallet-balances" +version = "41.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", +] + +[[package]] +name = "pallet-beefy" +version = "41.1.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-support", + "frame-system", + "log", + "pallet-authorship", + "pallet-session", + "parity-scale-codec", + "scale-info", + "serde", + "sp-consensus-beefy", + "sp-runtime", + "sp-session", + "sp-staking", +] + +[[package]] +name = "pallet-beefy-mmr" +version = "41.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "array-bytes", + "binary-merkle-tree", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-beefy", + "pallet-mmr", + "pallet-session", + "parity-scale-codec", + "scale-info", + "serde", + "sp-api", + "sp-consensus-beefy", + "sp-core", + "sp-io", + "sp-runtime", + "sp-state-machine", +] + +[[package]] +name = "pallet-bounties" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-treasury 39.0.0", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-broker" +version = "0.19.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "bitvec", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-arithmetic", + "sp-core", + "sp-runtime", +] + +[[package]] +name = "pallet-capacity" +version = "0.0.0" +dependencies = [ + "common-primitives", + "common-runtime", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "pallet-msa", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-capacity-runtime-api" +version = "0.0.0" +dependencies = [ + "common-primitives", + "parity-scale-codec", + "sp-api", + "sp-runtime", +] + +[[package]] +name = "pallet-child-bounties" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-bounties", + "pallet-treasury 39.0.0", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-collator-selection" +version = "21.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-authorship", + "pallet-balances", + "pallet-session", + "parity-scale-codec", + "rand 0.8.5", + "scale-info", + "sp-runtime", + "sp-staking", +] + +[[package]] +name = "pallet-collective" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-conviction-voting" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "assert_matches", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "serde", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-delegated-staking" +version = "7.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-staking", +] + +[[package]] +name = "pallet-democracy" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-election-provider-multi-phase" +version = "39.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "log", + "pallet-election-provider-support-benchmarking", + "parity-scale-codec", + "rand 0.8.5", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-npos-elections", + "sp-runtime", + "strum 0.26.3", +] + +[[package]] +name = "pallet-election-provider-support-benchmarking" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-election-provider-support", + "frame-system", + "parity-scale-codec", + "sp-npos-elections", + "sp-runtime", +] + +[[package]] +name = "pallet-elections-phragmen" +version = "41.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-npos-elections", + "sp-runtime", + "sp-staking", +] + +[[package]] +name = "pallet-fast-unstake" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "docify", + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-staking", +] + +[[package]] +name = "pallet-frequency-tx-payment" +version = "0.0.0" +dependencies = [ + "common-primitives", + "common-runtime", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "pallet-capacity", + "pallet-msa", + "pallet-transaction-payment", + "pallet-utility", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-frequency-tx-payment-rpc" +version = "0.0.0" +dependencies = [ + "common-helpers", + "common-primitives", + "jsonrpsee", + "pallet-frequency-tx-payment-runtime-api", + "parity-scale-codec", + "rayon", + "sc-client-api", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-rpc", + "sp-runtime", + "sp-weights", + "tokio", +] + +[[package]] +name = "pallet-frequency-tx-payment-runtime-api" +version = "0.0.0" +dependencies = [ + "common-primitives", + "frame-support", + "pallet-transaction-payment", + "parity-scale-codec", + "sp-api", +] + +[[package]] +name = "pallet-grandpa" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-authorship", + "pallet-session", + "parity-scale-codec", + "scale-info", + "sp-application-crypto", + "sp-consensus-grandpa", + "sp-core", + "sp-io", + "sp-runtime", + "sp-session", + "sp-staking", +] + +[[package]] +name = "pallet-handles" +version = "0.0.0" +dependencies = [ + "common-primitives", + "common-runtime", + "env_logger 0.11.8", + "frame-benchmarking", + "frame-support", + "frame-system", + "handles-utils", + "log", + "numtoa", + "parity-scale-codec", + "pretty_assertions", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-keystore", + "sp-runtime", +] + +[[package]] +name = "pallet-handles-rpc" +version = "0.0.0" +dependencies = [ + "common-helpers", + "common-primitives", + "frame-support", + "jsonrpsee", + "pallet-handles-runtime-api", + "rayon", + "sc-client-api", + "sp-api", + "sp-blockchain", + "sp-runtime", + "tokio", +] + +[[package]] +name = "pallet-handles-runtime-api" +version = "0.0.0" +dependencies = [ + "common-primitives", + "sp-api", +] + +[[package]] +name = "pallet-identity" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "enumflags2", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-im-online" +version = "39.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-authorship", + "parity-scale-codec", + "scale-info", + "sp-application-crypto", + "sp-core", + "sp-io", + "sp-runtime", + "sp-staking", +] + +[[package]] +name = "pallet-indices" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-membership" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-message-queue" +version = "43.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "environmental", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-weights", +] + +[[package]] +name = "pallet-messages" +version = "0.0.0" +dependencies = [ + "cid 0.11.1", + "common-primitives", + "common-runtime", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "multibase", + "parity-scale-codec", + "pretty_assertions", + "rand 0.9.1", + "scale-info", + "serde", + "serde_json", + "sp-core", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-messages-rpc" +version = "0.0.0" +dependencies = [ + "common-helpers", + "common-primitives", + "frame-support", + "jsonrpsee", + "pallet-messages-runtime-api", + "sc-client-api", + "sp-api", + "sp-blockchain", + "sp-runtime", + "tokio", +] + +[[package]] +name = "pallet-messages-runtime-api" +version = "0.0.0" +dependencies = [ + "common-primitives", + "frame-support", + "sp-api", +] + +[[package]] +name = "pallet-meta-tx" +version = "0.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-migrations" +version = "10.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "parity-scale-codec", + "polkadot-sdk-frame", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-mmr" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "log", + "parity-scale-codec", + "polkadot-sdk-frame", + "scale-info", + "sp-mmr-primitives", +] + +[[package]] +name = "pallet-msa" +version = "0.0.0" +dependencies = [ + "common-primitives", + "common-runtime", + "frame-benchmarking", + "frame-support", + "frame-system", + "hex", + "lazy_static", + "log", + "pallet-collective", + "pallet-handles", + "pallet-schemas", + "parity-scale-codec", + "parking_lot 0.12.3", + "pretty_assertions", + "scale-info", + "serde", + "serde_json", + "sp-core", + "sp-io", + "sp-keyring", + "sp-keystore", + "sp-runtime", + "sp-weights", +] + +[[package]] +name = "pallet-msa-rpc" +version = "0.0.0" +dependencies = [ + "common-helpers", + "common-primitives", + "jsonrpsee", + "pallet-msa-runtime-api", + "parity-scale-codec", + "parking_lot 0.12.3", + "rayon", + "sc-client-api", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-offchain", + "sp-runtime", + "tokio", +] + +[[package]] +name = "pallet-msa-runtime-api" +version = "0.0.0" +dependencies = [ + "common-primitives", + "frame-support", + "parity-scale-codec", + "sp-api", +] + +[[package]] +name = "pallet-multisig" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "log", + "parity-scale-codec", + "polkadot-sdk-frame", + "scale-info", +] + +[[package]] +name = "pallet-nis" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "parity-scale-codec", + "polkadot-sdk-frame", + "scale-info", +] + +[[package]] +name = "pallet-nomination-pools" +version = "38.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-support", + "frame-system", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-staking", + "sp-tracing", +] + +[[package]] +name = "pallet-nomination-pools-benchmarking" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "pallet-bags-list", + "pallet-delegated-staking", + "pallet-nomination-pools", + "pallet-staking", + "parity-scale-codec", + "scale-info", + "sp-runtime", + "sp-runtime-interface", + "sp-staking", +] + +[[package]] +name = "pallet-nomination-pools-runtime-api" +version = "36.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "pallet-nomination-pools", + "parity-scale-codec", + "sp-api", +] + +[[package]] +name = "pallet-offences" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-runtime", + "sp-staking", +] + +[[package]] +name = "pallet-offences-benchmarking" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "log", + "pallet-babe", + "pallet-balances", + "pallet-grandpa", + "pallet-im-online", + "pallet-offences", + "pallet-session", + "pallet-staking", + "parity-scale-codec", + "scale-info", + "sp-runtime", + "sp-staking", +] + +[[package]] +name = "pallet-parameters" +version = "0.11.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "paste", + "scale-info", + "serde", + "sp-core", + "sp-runtime", +] + +[[package]] +name = "pallet-passkey" +version = "0.0.0" +dependencies = [ + "base64-url", + "common-primitives", + "common-runtime", + "frame-benchmarking", + "frame-support", + "frame-system", + "lazy_static", + "log", + "p256", + "pallet-balances", + "pallet-transaction-payment", + "parity-scale-codec", + "scale-info", + "serde_json", + "sp-core", + "sp-io", + "sp-keyring", + "sp-keystore", + "sp-runtime", +] + +[[package]] +name = "pallet-preimage" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-proxy" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "parity-scale-codec", + "polkadot-sdk-frame", + "scale-info", +] + +[[package]] +name = "pallet-ranked-collective" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-recovery" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-referenda" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "assert_matches", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-arithmetic", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-root-testing" +version = "16.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-scheduler" +version = "41.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-weights", +] + +[[package]] +name = "pallet-schemas" +version = "0.0.0" +dependencies = [ + "common-primitives", + "common-runtime", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "numtoa", + "pallet-collective", + "parity-scale-codec", + "scale-info", + "serde", + "serde_json", + "serial_test", + "smallvec", + "sp-core", + "sp-io", + "sp-keyring", + "sp-runtime", + "sp-weights", +] + +[[package]] +name = "pallet-schemas-rpc" +version = "0.0.0" +dependencies = [ + "common-helpers", + "common-primitives", + "frame-support", + "jsonrpsee", + "pallet-schemas-runtime-api", + "sc-client-api", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-rpc", + "sp-runtime", + "tokio", +] + +[[package]] +name = "pallet-schemas-runtime-api" +version = "0.0.0" +dependencies = [ + "common-primitives", + "frame-support", + "sp-api", + "sp-runtime", +] + +[[package]] +name = "pallet-session" +version = "40.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-state-machine", + "sp-trie", +] + +[[package]] +name = "pallet-session-benchmarking" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-session", + "pallet-staking", + "parity-scale-codec", + "rand 0.8.5", + "sp-runtime", + "sp-session", +] + +[[package]] +name = "pallet-society" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "rand_chacha 0.3.1", + "scale-info", + "sp-arithmetic", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-staking" +version = "40.1.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "log", + "pallet-authorship", + "pallet-session", + "parity-scale-codec", + "rand_chacha 0.3.1", + "scale-info", + "serde", + "sp-application-crypto", + "sp-io", + "sp-runtime", + "sp-staking", +] + +[[package]] +name = "pallet-staking-reward-fn" +version = "22.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "log", + "sp-arithmetic", +] + +[[package]] +name = "pallet-staking-runtime-api" +version = "26.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "parity-scale-codec", + "sp-api", + "sp-staking", +] + +[[package]] +name = "pallet-state-trie-migration" +version = "44.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-stateful-storage" +version = "0.0.0" +dependencies = [ + "common-primitives", + "common-runtime", + "env_logger 0.11.8", + "frame-benchmarking", + "frame-support", + "frame-system", + "hex", + "lazy_static", + "log", + "parity-scale-codec", + "pretty_assertions", + "scale-info", + "sp-core", + "sp-io", + "sp-keystore", + "sp-runtime", + "twox-hash", +] + +[[package]] +name = "pallet-stateful-storage-rpc" +version = "0.0.0" +dependencies = [ + "common-helpers", + "common-primitives", + "frame-support", + "jsonrpsee", + "pallet-stateful-storage-runtime-api", + "sc-client-api", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-rpc", + "sp-runtime", + "tokio", +] + +[[package]] +name = "pallet-stateful-storage-runtime-api" +version = "0.0.0" +dependencies = [ + "common-primitives", + "frame-support", + "sp-api", + "sp-runtime", +] + +[[package]] +name = "pallet-sudo" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-time-release" +version = "0.0.0" +dependencies = [ + "chrono", + "common-primitives", + "common-runtime", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "pallet-preimage", + "pallet-scheduler", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-timestamp" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-inherents", + "sp-io", + "sp-runtime", + "sp-storage", + "sp-timestamp", +] + +[[package]] +name = "pallet-tips" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-treasury 39.0.0", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-transaction-payment" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-transaction-payment-rpc" +version = "43.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "jsonrpsee", + "pallet-transaction-payment-rpc-runtime-api", + "parity-scale-codec", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-rpc", + "sp-runtime", + "sp-weights", +] + +[[package]] +name = "pallet-transaction-payment-rpc-runtime-api" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "pallet-transaction-payment", + "parity-scale-codec", + "sp-api", + "sp-runtime", + "sp-weights", +] + +[[package]] +name = "pallet-treasury" +version = "27.0.0" +dependencies = [ + "common-primitives", + "common-runtime", + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "pallet-balances", + "pallet-utility", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-treasury" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-runtime", +] + +[[package]] +name = "pallet-utility" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-verify-signature" +version = "0.3.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-weights", +] + +[[package]] +name = "pallet-vesting" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-runtime", +] + +[[package]] +name = "pallet-whitelist" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "parity-scale-codec", + "polkadot-sdk-frame", + "scale-info", +] + +[[package]] +name = "pallet-xcm" +version = "19.1.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "bounded-collections", + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", + "tracing", + "xcm-runtime-apis", +] + +[[package]] +name = "pallet-xcm-benchmarks" +version = "20.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", +] + +[[package]] +name = "parity-bip39" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e69bf016dc406eff7d53a7d3f7cf1c2e72c82b9088aac1118591e36dd2cd3e9" +dependencies = [ + "bitcoin_hashes 0.13.0", + "rand 0.8.5", + "rand_core 0.6.4", + "serde", + "unicode-normalization", +] + +[[package]] +name = "parity-db" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "592a28a24b09c9dc20ac8afaa6839abc417c720afe42c12e1e4a9d6aa2508d2e" +dependencies = [ + "blake2 0.10.6", + "crc32fast", + "fs2", + "hex", + "libc", + "log", + "lz4", + "memmap2 0.5.10", + "parking_lot 0.12.3", + "rand 0.8.5", + "siphasher 0.3.11", + "snap", + "winapi", +] + +[[package]] +name = "parity-scale-codec" +version = "3.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799781ae679d79a948e13d4824a40970bfa500058d245760dd857301059810fa" +dependencies = [ + "arrayvec 0.7.6", + "bitvec", + "byte-slice-cast", + "bytes", + "const_format", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "rustversion", + "serde", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34b4653168b563151153c9e4c08ebed57fb8262bebfa79711552fa983c623e7a" +dependencies = [ + "proc-macro-crate 3.3.0", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "parity-wasm" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1ad0aff30c1da14b1254fcb2af73e1fa9a28670e584a626f53a369d0e157304" + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core 0.8.6", +] + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core 0.9.10", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +dependencies = [ + "cfg-if", + "instant", + "libc", + "redox_syscall 0.2.16", + "smallvec", + "winapi", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.5.12", + "smallvec", + "windows-targets 0.52.6", +] + +[[package]] +name = "partial_sort" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7924d1d0ad836f665c9065e26d016c673ece3993f30d340068b16f282afc1156" + +[[package]] +name = "password-hash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" +dependencies = [ + "base64ct", + "rand_core 0.6.4", + "subtle 2.6.1", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pbkdf2" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +dependencies = [ + "digest 0.10.7", + "hmac 0.12.1", + "password-hash", +] + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[package]] +name = "pem" +version = "3.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38af38e8470ac9dee3ce1bae1af9c1671fffc44ddfd8bd1d0a3445bf349a8ef3" +dependencies = [ + "base64 0.22.1", + "serde", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pest" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "198db74531d58c70a361c42201efde7e2591e976d518caf7662a47dc5720e7b6" +dependencies = [ + "memchr", + "thiserror 2.0.12", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d725d9cfd79e87dccc9341a2ef39d1b6f6353d68c4b33c177febbe1a402c97c5" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db7d01726be8ab66ab32f9df467ae8b1148906685bbe75c82d1e65d7f5b3f841" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "pest_meta" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f9f832470494906d1fca5329f8ab5791cc60beb230c74815dff541cbd2b5ca0" +dependencies = [ + "once_cell", + "pest", + "sha2 0.10.9", +] + +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset 0.4.2", + "indexmap 2.9.0", +] + +[[package]] +name = "petgraph" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" +dependencies = [ + "fixedbitset 0.5.7", + "indexmap 2.9.0", +] + +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_macros", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared", + "rand 0.8.5", +] + +[[package]] +name = "phf_macros" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher 1.0.1", +] + +[[package]] +name = "pin-project" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand 2.3.0", + "futures-io", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "polkadot-approval-distribution" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "futures", + "futures-timer", + "itertools 0.11.0", + "polkadot-node-metrics", + "polkadot-node-network-protocol", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives", + "rand 0.8.5", + "tracing-gum", +] + +[[package]] +name = "polkadot-availability-bitfield-distribution" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "futures", + "futures-timer", + "polkadot-node-network-protocol", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives", + "rand 0.8.5", + "tracing-gum", +] + +[[package]] +name = "polkadot-availability-distribution" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "fatality", + "futures", + "parity-scale-codec", + "polkadot-erasure-coding", + "polkadot-node-network-protocol", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives", + "rand 0.8.5", + "sc-network", + "schnellru", + "sp-core", + "sp-keystore", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-availability-recovery" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "fatality", + "futures", + "parity-scale-codec", + "polkadot-erasure-coding", + "polkadot-node-network-protocol", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives", + "rand 0.8.5", + "sc-network", + "schnellru", + "thiserror 1.0.69", + "tokio", + "tracing-gum", +] + +[[package]] +name = "polkadot-ckb-merkle-mountain-range" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "221c71b432b38e494a0fdedb5f720e4cb974edf03a0af09e5b2238dbac7e6947" +dependencies = [ + "cfg-if", + "itertools 0.10.5", +] + +[[package]] +name = "polkadot-cli" +version = "23.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "clap", + "frame-benchmarking-cli", + "futures", + "log", + "polkadot-node-metrics", + "polkadot-node-primitives", + "polkadot-service", + "sc-cli", + "sc-service", + "sc-storage-monitor", + "sc-sysinfo", + "sc-tracing", + "sp-core", + "sp-keyring", + "sp-runtime", + "substrate-build-script-utils", + "thiserror 1.0.69", +] + +[[package]] +name = "polkadot-collator-protocol" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "bitvec", + "fatality", + "futures", + "futures-timer", + "polkadot-node-network-protocol", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives", + "schnellru", + "sp-core", + "sp-keystore", + "sp-runtime", + "thiserror 1.0.69", + "tokio-util", + "tracing-gum", +] + +[[package]] +name = "polkadot-core-primitives" +version = "17.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", +] + +[[package]] +name = "polkadot-dispute-distribution" +version = "22.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "fatality", + "futures", + "futures-timer", + "indexmap 2.9.0", + "parity-scale-codec", + "polkadot-node-network-protocol", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives", + "sc-network", + "sp-application-crypto", + "sp-keystore", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-erasure-coding" +version = "19.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "parity-scale-codec", + "polkadot-node-primitives", + "polkadot-primitives", + "reed-solomon-novelpoly", + "sp-core", + "sp-trie", + "thiserror 1.0.69", +] + +[[package]] +name = "polkadot-gossip-support" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "futures", + "futures-timer", + "polkadot-node-network-protocol", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives", + "rand 0.8.5", + "rand_chacha 0.3.1", + "sc-network", + "sp-application-crypto", + "sp-core", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", + "sp-keystore", + "tracing-gum", +] + +[[package]] +name = "polkadot-network-bridge" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "always-assert", + "async-trait", + "bytes", + "fatality", + "futures", + "parity-scale-codec", + "parking_lot 0.12.3", + "polkadot-node-metrics", + "polkadot-node-network-protocol", + "polkadot-node-subsystem", + "polkadot-overseer", + "polkadot-primitives", + "sc-network", + "sp-consensus", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-collation-generation" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "futures", + "parity-scale-codec", + "polkadot-erasure-coding", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives", + "schnellru", + "sp-core", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-approval-voting" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "bitvec", + "derive_more 0.99.20", + "futures", + "futures-timer", + "itertools 0.11.0", + "merlin", + "parity-scale-codec", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-overseer", + "polkadot-primitives", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_core 0.6.4", + "sc-keystore", + "schnellru", + "schnorrkel 0.11.4", + "sp-application-crypto", + "sp-consensus", + "sp-consensus-slots", + "sp-runtime", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-approval-voting-parallel" +version = "0.5.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "futures", + "itertools 0.11.0", + "polkadot-approval-distribution", + "polkadot-node-core-approval-voting", + "polkadot-node-metrics", + "polkadot-node-network-protocol", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-overseer", + "polkadot-primitives", + "rand 0.8.5", + "rand_core 0.6.4", + "sc-keystore", + "sp-consensus", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-av-store" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "bitvec", + "futures", + "futures-timer", + "parity-scale-codec", + "polkadot-erasure-coding", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives", + "sp-consensus", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-backing" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "bitvec", + "fatality", + "futures", + "polkadot-erasure-coding", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-parachain-primitives", + "polkadot-primitives", + "polkadot-statement-table", + "schnellru", + "sp-keystore", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-bitfield-signing" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "futures", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives", + "sp-keystore", + "thiserror 1.0.69", + "tracing-gum", + "wasm-timer", +] + +[[package]] +name = "polkadot-node-core-candidate-validation" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "futures", + "futures-timer", + "parity-scale-codec", + "polkadot-node-core-pvf", + "polkadot-node-metrics", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-overseer", + "polkadot-parachain-primitives", + "polkadot-primitives", + "sp-application-crypto", + "sp-keystore", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-chain-api" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "futures", + "polkadot-node-metrics", + "polkadot-node-subsystem", + "polkadot-node-subsystem-types", + "sc-client-api", + "sc-consensus-babe", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-chain-selection" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "futures", + "futures-timer", + "parity-scale-codec", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-dispute-coordinator" +version = "22.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "fatality", + "futures", + "parity-scale-codec", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives", + "sc-keystore", + "schnellru", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-parachains-inherent" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "futures", + "futures-timer", + "polkadot-node-subsystem", + "polkadot-overseer", + "polkadot-primitives", + "sp-blockchain", + "sp-inherents", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-prospective-parachains" +version = "21.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "fatality", + "futures", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-provisioner" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "bitvec", + "fatality", + "futures", + "futures-timer", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-pvf" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "always-assert", + "array-bytes", + "futures", + "futures-timer", + "parity-scale-codec", + "pin-project", + "polkadot-node-core-pvf-common", + "polkadot-node-metrics", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-parachain-primitives", + "polkadot-primitives", + "rand 0.8.5", + "sc-tracing", + "slotmap", + "sp-core", + "strum 0.26.3", + "tempfile", + "thiserror 1.0.69", + "tokio", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-pvf-checker" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "futures", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives", + "sp-keystore", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-pvf-common" +version = "19.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "cpu-time", + "futures", + "landlock", + "libc", + "nix 0.29.0", + "parity-scale-codec", + "polkadot-parachain-primitives", + "polkadot-primitives", + "sc-executor", + "sc-executor-common", + "sc-executor-wasmtime", + "seccompiler", + "sp-core", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", + "sp-externalities", + "sp-io", + "sp-tracing", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-core-runtime-api" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "futures", + "polkadot-node-metrics", + "polkadot-node-subsystem", + "polkadot-node-subsystem-types", + "polkadot-primitives", + "schnellru", + "sp-consensus-babe", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-metrics" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "bs58", + "futures", + "futures-timer", + "parity-scale-codec", + "polkadot-primitives", + "prioritized-metered-channel", + "sc-cli", + "sc-service", + "sc-tracing", + "substrate-prometheus-endpoint", +] + +[[package]] +name = "polkadot-node-network-protocol" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-channel 1.9.0", + "async-trait", + "bitvec", + "derive_more 0.99.20", + "fatality", + "futures", + "hex", + "parity-scale-codec", + "polkadot-node-primitives", + "polkadot-primitives", + "rand 0.8.5", + "sc-authority-discovery", + "sc-network", + "sc-network-types", + "sp-runtime", + "strum 0.26.3", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-node-primitives" +version = "19.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "bitvec", + "bounded-vec", + "futures", + "futures-timer", + "parity-scale-codec", + "polkadot-parachain-primitives", + "polkadot-primitives", + "sc-keystore", + "schnorrkel 0.11.4", + "serde", + "sp-application-crypto", + "sp-consensus-babe", + "sp-consensus-slots", + "sp-keystore", + "sp-maybe-compressed-blob", + "thiserror 1.0.69", + "zstd 0.12.4", +] + +[[package]] +name = "polkadot-node-subsystem" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "polkadot-node-subsystem-types", + "polkadot-overseer", +] + +[[package]] +name = "polkadot-node-subsystem-types" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "derive_more 0.99.20", + "fatality", + "futures", + "orchestra", + "polkadot-node-network-protocol", + "polkadot-node-primitives", + "polkadot-primitives", + "polkadot-statement-table", + "sc-client-api", + "sc-network", + "sc-network-types", + "sc-transaction-pool-api", + "smallvec", + "sp-api", + "sp-authority-discovery", + "sp-blockchain", + "sp-consensus-babe", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror 1.0.69", +] + +[[package]] +name = "polkadot-node-subsystem-util" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "fatality", + "futures", + "itertools 0.11.0", + "kvdb", + "parity-db", + "parity-scale-codec", + "parking_lot 0.12.3", + "polkadot-erasure-coding", + "polkadot-node-metrics", + "polkadot-node-network-protocol", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-types", + "polkadot-overseer", + "polkadot-primitives", + "prioritized-metered-channel", + "rand 0.8.5", + "sc-client-api", + "schnellru", + "sp-application-crypto", + "sp-core", + "sp-keystore", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-overseer" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "futures", + "futures-timer", + "orchestra", + "polkadot-node-metrics", + "polkadot-node-network-protocol", + "polkadot-node-primitives", + "polkadot-node-subsystem-types", + "polkadot-primitives", + "sc-client-api", + "sp-core", + "tikv-jemalloc-ctl", + "tracing-gum", +] + +[[package]] +name = "polkadot-parachain-primitives" +version = "16.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "bounded-collections", + "derive_more 0.99.20", + "parity-scale-codec", + "polkadot-core-primitives", + "scale-info", + "serde", + "sp-core", + "sp-runtime", + "sp-weights", +] + +[[package]] +name = "polkadot-primitives" +version = "18.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "bitvec", + "hex-literal", + "log", + "parity-scale-codec", + "polkadot-core-primitives", + "polkadot-parachain-primitives", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto", + "sp-arithmetic", + "sp-authority-discovery", + "sp-consensus-slots", + "sp-core", + "sp-inherents", + "sp-io", + "sp-keystore", + "sp-runtime", + "sp-staking", + "sp-std", + "thiserror 1.0.69", +] + +[[package]] +name = "polkadot-rpc" +version = "23.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "jsonrpsee", + "mmr-rpc", + "pallet-transaction-payment-rpc", + "polkadot-primitives", + "sc-chain-spec", + "sc-client-api", + "sc-consensus-babe", + "sc-consensus-babe-rpc", + "sc-consensus-beefy", + "sc-consensus-beefy-rpc", + "sc-consensus-grandpa", + "sc-consensus-grandpa-rpc", + "sc-rpc", + "sc-sync-state-rpc", + "sc-transaction-pool-api", + "sp-api", + "sp-application-crypto", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-consensus-babe", + "sp-consensus-beefy", + "sp-keystore", + "sp-runtime", + "substrate-frame-rpc-system", + "substrate-state-trie-migration-rpc", +] + +[[package]] +name = "polkadot-runtime-common" +version = "19.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "bitvec", + "frame-benchmarking", + "frame-election-provider-support", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "libsecp256k1", + "log", + "pallet-asset-rate", + "pallet-authorship", + "pallet-babe", + "pallet-balances", + "pallet-broker", + "pallet-election-provider-multi-phase", + "pallet-fast-unstake", + "pallet-identity", + "pallet-session", + "pallet-staking", + "pallet-staking-reward-fn", + "pallet-timestamp", + "pallet-transaction-payment", + "pallet-treasury 39.0.0", + "pallet-vesting", + "parity-scale-codec", + "polkadot-primitives", + "polkadot-runtime-parachains", + "rustc-hex", + "scale-info", + "serde", + "slot-range-helper", + "sp-api", + "sp-core", + "sp-inherents", + "sp-io", + "sp-keyring", + "sp-npos-elections", + "sp-runtime", + "sp-session", + "sp-staking", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", + "static_assertions", +] + +[[package]] +name = "polkadot-runtime-metrics" +version = "20.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "bs58", + "frame-benchmarking", + "parity-scale-codec", + "polkadot-primitives", + "sp-tracing", +] + +[[package]] +name = "polkadot-runtime-parachains" +version = "19.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "bitflags 1.3.2", + "bitvec", + "frame-benchmarking", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "pallet-authority-discovery", + "pallet-authorship", + "pallet-babe", + "pallet-balances", + "pallet-broker", + "pallet-message-queue", + "pallet-mmr", + "pallet-session", + "pallet-staking", + "pallet-timestamp", + "parity-scale-codec", + "polkadot-core-primitives", + "polkadot-parachain-primitives", + "polkadot-primitives", + "polkadot-runtime-metrics", + "rand 0.8.5", + "rand_chacha 0.3.1", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto", + "sp-arithmetic", + "sp-core", + "sp-inherents", + "sp-io", + "sp-keystore", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std", + "staging-xcm", + "staging-xcm-executor", + "static_assertions", +] + +[[package]] +name = "polkadot-sdk" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb819108697967452fa6d8d96ab4c0d48cbaa423b3156499dcb24f1cf95d6775" +dependencies = [ + "sp-crypto-hashing 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "polkadot-sdk-frame" +version = "0.9.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "docify", + "frame-benchmarking", + "frame-executive", + "frame-support", + "frame-system", + "frame-system-benchmarking", + "frame-system-rpc-runtime-api", + "frame-try-runtime", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-api", + "sp-arithmetic", + "sp-block-builder", + "sp-consensus-aura", + "sp-consensus-grandpa", + "sp-core", + "sp-genesis-builder", + "sp-inherents", + "sp-io", + "sp-keyring", + "sp-offchain", + "sp-runtime", + "sp-session", + "sp-storage", + "sp-transaction-pool", + "sp-version", +] + +[[package]] +name = "polkadot-service" +version = "23.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "frame-benchmarking", + "frame-benchmarking-cli", + "frame-system", + "frame-system-rpc-runtime-api", + "futures", + "is_executable", + "kvdb", + "kvdb-rocksdb", + "log", + "mmr-gadget", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc-runtime-api", + "parity-db", + "parity-scale-codec", + "parking_lot 0.12.3", + "polkadot-approval-distribution", + "polkadot-availability-bitfield-distribution", + "polkadot-availability-distribution", + "polkadot-availability-recovery", + "polkadot-collator-protocol", + "polkadot-core-primitives", + "polkadot-dispute-distribution", + "polkadot-gossip-support", + "polkadot-network-bridge", + "polkadot-node-collation-generation", + "polkadot-node-core-approval-voting", + "polkadot-node-core-approval-voting-parallel", + "polkadot-node-core-av-store", + "polkadot-node-core-backing", + "polkadot-node-core-bitfield-signing", + "polkadot-node-core-candidate-validation", + "polkadot-node-core-chain-api", + "polkadot-node-core-chain-selection", + "polkadot-node-core-dispute-coordinator", + "polkadot-node-core-parachains-inherent", + "polkadot-node-core-prospective-parachains", + "polkadot-node-core-provisioner", + "polkadot-node-core-pvf", + "polkadot-node-core-pvf-checker", + "polkadot-node-core-runtime-api", + "polkadot-node-network-protocol", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-types", + "polkadot-node-subsystem-util", + "polkadot-overseer", + "polkadot-primitives", + "polkadot-rpc", + "polkadot-runtime-parachains", + "polkadot-statement-distribution", + "rococo-runtime", + "sc-authority-discovery", + "sc-basic-authorship", + "sc-chain-spec", + "sc-client-api", + "sc-consensus", + "sc-consensus-babe", + "sc-consensus-beefy", + "sc-consensus-grandpa", + "sc-consensus-slots", + "sc-executor", + "sc-keystore", + "sc-network", + "sc-network-sync", + "sc-offchain", + "sc-service", + "sc-sync-state-rpc", + "sc-sysinfo", + "sc-telemetry", + "sc-transaction-pool", + "sc-transaction-pool-api", + "serde", + "serde_json", + "sp-api", + "sp-authority-discovery", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-consensus-babe", + "sp-consensus-beefy", + "sp-consensus-grandpa", + "sp-core", + "sp-genesis-builder", + "sp-inherents", + "sp-io", + "sp-keyring", + "sp-mmr-primitives", + "sp-offchain", + "sp-runtime", + "sp-session", + "sp-timestamp", + "sp-transaction-pool", + "sp-version", + "sp-weights", + "staging-xcm", + "substrate-prometheus-endpoint", + "thiserror 1.0.69", + "tracing-gum", + "westend-runtime", + "xcm-runtime-apis", +] + +[[package]] +name = "polkadot-statement-distribution" +version = "22.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "arrayvec 0.7.6", + "bitvec", + "fatality", + "futures", + "futures-timer", + "indexmap 2.9.0", + "parity-scale-codec", + "polkadot-node-network-protocol", + "polkadot-node-primitives", + "polkadot-node-subsystem", + "polkadot-node-subsystem-util", + "polkadot-primitives", + "sp-keystore", + "sp-staking", + "thiserror 1.0.69", + "tracing-gum", +] + +[[package]] +name = "polkadot-statement-table" +version = "19.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "parity-scale-codec", + "polkadot-primitives", + "tracing-gum", +] + +[[package]] +name = "polkavm" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd044ab1d3b11567ab6b98ca71259a992b4034220d5972988a0e96518e5d343d" +dependencies = [ + "libc", + "log", + "polkavm-assembler", + "polkavm-common", + "polkavm-linux-raw", +] + +[[package]] +name = "polkavm-assembler" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaad38dc420bfed79e6f731471c973ce5ff5e47ab403e63cf40358fef8a6368f" +dependencies = [ + "log", +] + +[[package]] +name = "polkavm-common" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31ff33982a807d8567645d4784b9b5d7ab87bcb494f534a57cadd9012688e102" +dependencies = [ + "log", + "polkavm-assembler", +] + +[[package]] +name = "polkavm-derive" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2eb703f3b6404c13228402e98a5eae063fd16b8f58afe334073ec105ee4117e" +dependencies = [ + "polkavm-derive-impl-macro", +] + +[[package]] +name = "polkavm-derive-impl" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f2116a92e6e96220a398930f4c8a6cda1264206f3e2034fc9982bfd93f261f7" +dependencies = [ + "polkavm-common", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "polkavm-derive-impl-macro" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c16669ddc7433e34c1007d31080b80901e3e8e523cb9d4b441c3910cf9294b" +dependencies = [ + "polkavm-derive-impl", + "syn 2.0.101", +] + +[[package]] +name = "polkavm-linker" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9bfe793b094d9ea5c99b7c43ba46e277b0f8f48f4bbfdbabf8d3ebf701a4bd3" +dependencies = [ + "dirs", + "gimli 0.31.1", + "hashbrown 0.14.5", + "log", + "object 0.36.7", + "polkavm-common", + "regalloc2 0.9.3", + "rustc-demangle", +] + +[[package]] +name = "polkavm-linux-raw" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23eff02c070c70f31878a3d915e88a914ecf3e153741e2fb572dde28cce20fde" + +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite", + "windows-sys 0.48.0", +] + +[[package]] +name = "polling" +version = "3.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b53a684391ad002dd6a596ceb6c74fd004fdce75f4be2e3f615068abbea5fd50" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi 0.5.1", + "pin-project-lite", + "rustix 1.0.7", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "poly1305" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +dependencies = [ + "cpufeatures", + "opaque-debug 0.3.1", + "universal-hash", +] + +[[package]] +name = "polyval" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" +dependencies = [ + "cfg-if", + "cpufeatures", + "opaque-debug 0.3.1", + "universal-hash", +] + +[[package]] +name = "portable-atomic" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" + +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "potential_utf" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "predicates" +version = "3.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5d19ee57562043d37e82899fade9a22ebab7be9cef5026b07fda9cdd4293573" +dependencies = [ + "anstyle", + "predicates-core", +] + +[[package]] +name = "predicates-core" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "727e462b119fe9c93fd0eb1429a5f7647394014cf3c04ab2c0350eeb09095ffa" + +[[package]] +name = "predicates-tree" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72dd2d6d381dfb73a193c7fca536518d7caee39fc8503f74e7dc0be0531b425c" +dependencies = [ + "predicates-core", + "termtree", +] + +[[package]] +name = "pretty_assertions" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" +dependencies = [ + "diff", + "yansi", +] + +[[package]] +name = "prettyplease" +version = "0.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "664ec5419c51e34154eec046ebcba56312d5a2fc3b09a06da188e1ad21afadf6" +dependencies = [ + "proc-macro2", + "syn 2.0.101", +] + +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + +[[package]] +name = "primitive-types" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d15600a7d856470b7d278b3fe0e311fe28c2526348549f8ef2ff7db3299c87f5" +dependencies = [ + "fixed-hash", + "impl-codec", + "impl-num-traits", + "impl-serde 0.5.0", + "scale-info", + "uint 0.10.0", +] + +[[package]] +name = "prioritized-metered-channel" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a172e6cc603231f2cf004232eabcecccc0da53ba576ab286ef7baa0cfc7927ad" +dependencies = [ + "coarsetime", + "crossbeam-queue", + "derive_more 0.99.20", + "futures", + "futures-timer", + "nanorand", + "thiserror 1.0.69", + "tracing", +] + +[[package]] +name = "proc-macro-crate" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" +dependencies = [ + "thiserror 1.0.69", + "toml 0.5.11", +] + +[[package]] +name = "proc-macro-crate" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "proc-macro-warning" +version = "1.84.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75eea531cfcd120e0851a3f8aed42c4841f78c889eefafd96339c72677ae42c3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "proc-macro2" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prometheus" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1" +dependencies = [ + "cfg-if", + "fnv", + "lazy_static", + "memchr", + "parking_lot 0.12.3", + "thiserror 1.0.69", +] + +[[package]] +name = "prometheus-client" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "504ee9ff529add891127c4827eb481bd69dc0ebc72e9a682e187db4caa60c3ca" +dependencies = [ + "dtoa", + "itoa", + "parking_lot 0.12.3", + "prometheus-client-derive-encode", +] + +[[package]] +name = "prometheus-client-derive-encode" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "proptest" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14cae93065090804185d3b75f0bf93b8eeda30c7a9b4a33d3bdb3988d6229e50" +dependencies = [ + "bitflags 2.9.1", + "lazy_static", + "num-traits", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_xorshift", + "regex-syntax 0.8.5", + "unarray", +] + +[[package]] +name = "prost" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" +dependencies = [ + "bytes", + "prost-derive 0.12.6", +] + +[[package]] +name = "prost" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" +dependencies = [ + "bytes", + "prost-derive 0.13.5", +] + +[[package]] +name = "prost-build" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be769465445e8c1474e9c5dac2018218498557af32d9ed057325ec9a41ae81bf" +dependencies = [ + "heck 0.5.0", + "itertools 0.14.0", + "log", + "multimap", + "once_cell", + "petgraph 0.7.1", + "prettyplease", + "prost 0.13.5", + "prost-types", + "regex", + "syn 2.0.101", + "tempfile", +] + +[[package]] +name = "prost-derive" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" +dependencies = [ + "anyhow", + "itertools 0.12.1", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "prost-derive" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" +dependencies = [ + "anyhow", + "itertools 0.14.0", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "prost-types" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16" +dependencies = [ + "prost 0.13.5", +] + +[[package]] +name = "psm" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e944464ec8536cd1beb0bbfd96987eb5e3b72f2ecdafdc5c769a37f1fa2ae1f" +dependencies = [ + "cc", +] + +[[package]] +name = "quad-rand" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a651516ddc9168ebd67b24afd085a718be02f8858fe406591b013d101ce2f40" + +[[package]] +name = "quanta" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bd1fe6824cea6538803de3ff1bc0cf3949024db3d43c9643024bfb33a807c0e" +dependencies = [ + "crossbeam-utils", + "libc", + "once_cell", + "raw-cpuid", + "wasi 0.11.0+wasi-snapshot-preview1", + "web-sys", + "winapi", +] + +[[package]] +name = "quick-protobuf" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d6da84cc204722a989e01ba2f6e1e276e190f22263d0cb6ce8526fcdb0d2e1f" +dependencies = [ + "byteorder", +] + +[[package]] +name = "quick-protobuf-codec" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15a0580ab32b169745d7a39db2ba969226ca16738931be152a3209b409de2474" +dependencies = [ + "asynchronous-codec 0.7.0", + "bytes", + "quick-protobuf", + "thiserror 1.0.69", + "unsigned-varint 0.8.0", +] + +[[package]] +name = "quinn" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8" +dependencies = [ + "bytes", + "cfg_aliases 0.2.1", + "futures-io", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash 2.1.1", + "rustls", + "socket2 0.5.10", + "thiserror 2.0.12", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-proto" +version = "0.11.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e" +dependencies = [ + "bytes", + "getrandom 0.3.3", + "lru-slab", + "rand 0.9.1", + "ring 0.17.14", + "rustc-hash 2.1.1", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.12", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee4e529991f949c5e25755532370b8af5d114acae52326361d68d47af64aa842" +dependencies = [ + "cfg_aliases 0.2.1", + "libc", + "once_cell", + "socket2 0.5.10", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "quote" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.16", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.3", +] + +[[package]] +name = "rand_distr" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "rand_pcg" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e" +dependencies = [ + "rand_core 0.6.4", +] + +[[package]] +name = "rand_xorshift" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +dependencies = [ + "rand_core 0.6.4", +] + +[[package]] +name = "raw-cpuid" +version = "11.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6df7ab838ed27997ba19a4664507e6f82b41fe6e20be42929332156e5e85146" +dependencies = [ + "bitflags 2.9.1", +] + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "rcgen" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52c4f3084aa3bc7dfbba4eff4fab2a54db4324965d8872ab933565e6fbd83bc6" +dependencies = [ + "pem", + "ring 0.16.20", + "time", + "yasna", +] + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.5.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" +dependencies = [ + "bitflags 2.9.1", +] + +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.16", + "libredox", + "thiserror 1.0.69", +] + +[[package]] +name = "reed-solomon-novelpoly" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87413ebb313323d431e85d0afc5a68222aaed972843537cbfe5f061cf1b4bcab" +dependencies = [ + "derive_more 0.99.20", + "fs-err", + "static_init", + "thiserror 1.0.69", +] + +[[package]] +name = "ref-cast" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "regalloc2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80535183cae11b149d618fbd3c37e38d7cda589d82d7769e196ca9a9042d7621" +dependencies = [ + "fxhash", + "log", + "slice-group-by", + "smallvec", +] + +[[package]] +name = "regalloc2" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad156d539c879b7a24a363a2016d77961786e71f48f2e2fc8302a92abd2429a6" +dependencies = [ + "hashbrown 0.13.2", + "log", + "rustc-hash 1.1.0", + "slice-group-by", + "smallvec", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-lite" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "resolv-conf" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95325155c684b1c89f7765e30bc1c42e4a6da51ca513615660cb8a62ef9a88e3" + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac 0.12.1", + "subtle 2.6.1", +] + +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin 0.5.2", + "untrusted 0.7.1", + "web-sys", + "winapi", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.16", + "libc", + "untrusted 0.9.0", + "windows-sys 0.52.0", +] + +[[package]] +name = "ripemd" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "rle-decode-fast" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3582f63211428f83597b51b2ddb88e2a91a9d52d12831f9d08f5e624e8977422" + +[[package]] +name = "rocksdb" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb6f170a4041d50a0ce04b0d2e14916d6ca863ea2e422689a5b694395d299ffe" +dependencies = [ + "libc", + "librocksdb-sys", +] + +[[package]] +name = "rococo-runtime" +version = "22.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "binary-merkle-tree", + "bitvec", + "frame-benchmarking", + "frame-executive", + "frame-metadata-hash-extension", + "frame-support", + "frame-system", + "frame-system-benchmarking", + "frame-system-rpc-runtime-api", + "frame-try-runtime", + "hex-literal", + "log", + "pallet-asset-rate", + "pallet-authority-discovery", + "pallet-authorship", + "pallet-babe", + "pallet-balances", + "pallet-beefy", + "pallet-beefy-mmr", + "pallet-bounties", + "pallet-child-bounties", + "pallet-conviction-voting", + "pallet-democracy", + "pallet-elections-phragmen", + "pallet-grandpa", + "pallet-identity", + "pallet-indices", + "pallet-message-queue", + "pallet-migrations", + "pallet-mmr", + "pallet-multisig", + "pallet-nis", + "pallet-offences", + "pallet-parameters", + "pallet-preimage", + "pallet-proxy", + "pallet-ranked-collective", + "pallet-recovery", + "pallet-referenda", + "pallet-root-testing", + "pallet-scheduler", + "pallet-session", + "pallet-society", + "pallet-staking", + "pallet-state-trie-migration", + "pallet-sudo", + "pallet-timestamp", + "pallet-tips", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc-runtime-api", + "pallet-treasury 39.0.0", + "pallet-utility", + "pallet-vesting", + "pallet-whitelist", + "pallet-xcm", + "pallet-xcm-benchmarks", + "parity-scale-codec", + "polkadot-parachain-primitives", + "polkadot-primitives", + "polkadot-runtime-common", + "polkadot-runtime-parachains", + "rococo-runtime-constants", + "scale-info", + "serde", + "serde_derive", + "serde_json", + "sp-api", + "sp-arithmetic", + "sp-authority-discovery", + "sp-block-builder", + "sp-consensus-babe", + "sp-consensus-beefy", + "sp-consensus-grandpa", + "sp-core", + "sp-genesis-builder", + "sp-inherents", + "sp-io", + "sp-keyring", + "sp-mmr-primitives", + "sp-offchain", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-storage", + "sp-transaction-pool", + "sp-version", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", + "substrate-wasm-builder", + "xcm-runtime-apis", +] + +[[package]] +name = "rococo-runtime-constants" +version = "20.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-support", + "polkadot-primitives", + "polkadot-runtime-common", + "smallvec", + "sp-core", + "sp-runtime", + "sp-weights", + "staging-xcm", + "staging-xcm-builder", +] + +[[package]] +name = "route-recognizer" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afab94fb28594581f62d981211a9a4d53cc8130bbcbbb89a0440d9b8e81a7746" + +[[package]] +name = "rpassword" +version = "7.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66d4c8b64f049c6721ec8ccec37ddfc3d641c4a7fca57e8f2a89de509c73df39" +dependencies = [ + "libc", + "rtoolbox", + "windows-sys 0.59.0", +] + +[[package]] +name = "rtnetlink" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a552eb82d19f38c3beed3f786bd23aa434ceb9ac43ab44419ca6d67a7e186c0" +dependencies = [ + "futures", + "log", + "netlink-packet-core", + "netlink-packet-route", + "netlink-packet-utils", + "netlink-proto", + "netlink-sys", + "nix 0.26.4", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "rtoolbox" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7cc970b249fbe527d6e02e0a227762c9108b2f49d81094fe357ffc6d14d7f6f" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver 1.0.26", +] + +[[package]] +name = "rusticata-macros" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" +dependencies = [ + "nom", +] + +[[package]] +name = "rustix" +version = "0.36.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "305efbd14fde4139eb501df5f136994bb520b033fa9fbdce287507dc23b8c7ed" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.1.4", + "windows-sys 0.45.0", +] + +[[package]] +name = "rustix" +version = "0.37.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "519165d378b97752ca44bbe15047d5d3409e875f39327546b42ac81d7e18c1b6" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.3.8", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustix" +version = "0.38.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +dependencies = [ + "bitflags 2.9.1", + "errno", + "libc", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustix" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" +dependencies = [ + "bitflags 2.9.1", + "errno", + "libc", + "linux-raw-sys 0.9.4", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustls" +version = "0.23.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "730944ca083c1c233a75c09f199e973ca499344a2b7ba9e755c457e86fb4a321" +dependencies = [ + "log", + "once_cell", + "ring 0.17.14", + "rustls-pki-types", + "rustls-webpki 0.103.3", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" +dependencies = [ + "openssl-probe", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pki-types" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +dependencies = [ + "web-time", + "zeroize", +] + +[[package]] +name = "rustls-platform-verifier" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19787cda76408ec5404443dc8b31795c87cd8fec49762dc75fa727740d34acc1" +dependencies = [ + "core-foundation 0.10.1", + "core-foundation-sys", + "jni", + "log", + "once_cell", + "rustls", + "rustls-native-certs", + "rustls-platform-verifier-android", + "rustls-webpki 0.103.3", + "security-framework", + "security-framework-sys", + "webpki-root-certs 0.26.11", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustls-platform-verifier-android" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring 0.17.14", + "untrusted 0.9.0", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" +dependencies = [ + "ring 0.17.14", + "rustls-pki-types", + "untrusted 0.9.0", +] + +[[package]] +name = "rustversion" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" + +[[package]] +name = "ruzstd" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3ffab8f9715a0d455df4bbb9d21e91135aab3cd3ca187af0cd0c3c3f868fdc" +dependencies = [ + "byteorder", + "thiserror-core", + "twox-hash", +] + +[[package]] +name = "ruzstd" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5174a470eeb535a721ae9fdd6e291c2411a906b96592182d05217591d5c5cf7b" +dependencies = [ + "byteorder", + "derive_more 0.99.20", +] + +[[package]] +name = "rw-stream-sink" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8c9026ff5d2f23da5e45bbc283f156383001bfb09c4e44256d02c1a685fe9a1" +dependencies = [ + "futures", + "pin-project", + "static_assertions", +] + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "safe_arch" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "salsa20" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" +dependencies = [ + "cipher 0.4.4", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "sc-allocator" +version = "31.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "log", + "sp-core", + "sp-wasm-interface", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-authority-discovery" +version = "0.49.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "futures", + "futures-timer", + "ip_network", + "linked_hash_set", + "log", + "parity-scale-codec", + "prost 0.12.6", + "prost-build", + "rand 0.8.5", + "sc-client-api", + "sc-network", + "sc-network-types", + "sp-api", + "sp-authority-discovery", + "sp-blockchain", + "sp-core", + "sp-keystore", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-basic-authorship" +version = "0.49.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "futures", + "log", + "parity-scale-codec", + "sc-block-builder", + "sc-proposer-metrics", + "sc-telemetry", + "sc-transaction-pool-api", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-inherents", + "sp-runtime", + "substrate-prometheus-endpoint", +] + +[[package]] +name = "sc-block-builder" +version = "0.44.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "parity-scale-codec", + "sp-api", + "sp-block-builder", + "sp-blockchain", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-trie", +] + +[[package]] +name = "sc-chain-spec" +version = "42.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "array-bytes", + "docify", + "memmap2 0.9.5", + "parity-scale-codec", + "sc-chain-spec-derive", + "sc-client-api", + "sc-executor", + "sc-network", + "sc-telemetry", + "serde", + "serde_json", + "sp-blockchain", + "sp-core", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", + "sp-genesis-builder", + "sp-io", + "sp-runtime", + "sp-state-machine", + "sp-tracing", +] + +[[package]] +name = "sc-chain-spec-derive" +version = "12.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "proc-macro-crate 3.3.0", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "sc-cli" +version = "0.51.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "array-bytes", + "chrono", + "clap", + "fdlimit", + "futures", + "itertools 0.11.0", + "libp2p-identity", + "log", + "names", + "parity-bip39", + "parity-scale-codec", + "rand 0.8.5", + "regex", + "rpassword", + "sc-client-api", + "sc-client-db", + "sc-keystore", + "sc-mixnet", + "sc-network", + "sc-service", + "sc-telemetry", + "sc-tracing", + "sc-transaction-pool", + "sc-utils", + "serde", + "serde_json", + "sp-blockchain", + "sp-core", + "sp-keyring", + "sp-keystore", + "sp-panic-handler", + "sp-runtime", + "sp-version", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "sc-client-api" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "fnv", + "futures", + "log", + "parity-scale-codec", + "parking_lot 0.12.3", + "sc-executor", + "sc-transaction-pool-api", + "sc-utils", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-database", + "sp-externalities", + "sp-runtime", + "sp-state-machine", + "sp-storage", + "sp-trie", + "substrate-prometheus-endpoint", +] + +[[package]] +name = "sc-client-db" +version = "0.46.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "hash-db", + "kvdb", + "kvdb-memorydb", + "kvdb-rocksdb", + "linked-hash-map", + "log", + "parity-db", + "parity-scale-codec", + "parking_lot 0.12.3", + "sc-client-api", + "sc-state-db", + "schnellru", + "sp-arithmetic", + "sp-blockchain", + "sp-core", + "sp-database", + "sp-runtime", + "sp-state-machine", + "sp-trie", +] + +[[package]] +name = "sc-consensus" +version = "0.48.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "futures", + "log", + "mockall", + "parking_lot 0.12.3", + "sc-client-api", + "sc-network-types", + "sc-utils", + "serde", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-runtime", + "sp-state-machine", + "substrate-prometheus-endpoint", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-consensus-aura" +version = "0.49.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "futures", + "log", + "parity-scale-codec", + "sc-block-builder", + "sc-client-api", + "sc-consensus", + "sc-consensus-slots", + "sc-telemetry", + "sp-api", + "sp-application-crypto", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-consensus-aura", + "sp-consensus-slots", + "sp-core", + "sp-inherents", + "sp-keystore", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-consensus-babe" +version = "0.49.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "fork-tree", + "futures", + "log", + "num-bigint", + "num-rational", + "num-traits", + "parity-scale-codec", + "parking_lot 0.12.3", + "sc-client-api", + "sc-consensus", + "sc-consensus-epochs", + "sc-consensus-slots", + "sc-telemetry", + "sc-transaction-pool-api", + "sp-api", + "sp-application-crypto", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-consensus-babe", + "sp-consensus-slots", + "sp-core", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", + "sp-inherents", + "sp-keystore", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-consensus-babe-rpc" +version = "0.49.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "futures", + "jsonrpsee", + "sc-consensus-babe", + "sc-consensus-epochs", + "sc-rpc-api", + "serde", + "sp-api", + "sp-application-crypto", + "sp-blockchain", + "sp-consensus", + "sp-consensus-babe", + "sp-core", + "sp-keystore", + "sp-runtime", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-consensus-beefy" +version = "28.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "array-bytes", + "async-channel 1.9.0", + "async-trait", + "futures", + "log", + "parity-scale-codec", + "parking_lot 0.12.3", + "sc-client-api", + "sc-consensus", + "sc-network", + "sc-network-gossip", + "sc-network-sync", + "sc-network-types", + "sc-utils", + "sp-api", + "sp-application-crypto", + "sp-arithmetic", + "sp-blockchain", + "sp-consensus", + "sp-consensus-beefy", + "sp-core", + "sp-keystore", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror 1.0.69", + "tokio", + "wasm-timer", +] + +[[package]] +name = "sc-consensus-beefy-rpc" +version = "28.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "futures", + "jsonrpsee", + "log", + "parity-scale-codec", + "parking_lot 0.12.3", + "sc-consensus-beefy", + "sc-rpc", + "serde", + "sp-application-crypto", + "sp-consensus-beefy", + "sp-core", + "sp-runtime", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-consensus-epochs" +version = "0.48.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "fork-tree", + "parity-scale-codec", + "sc-client-api", + "sc-consensus", + "sp-blockchain", + "sp-runtime", +] + +[[package]] +name = "sc-consensus-grandpa" +version = "0.34.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "ahash", + "array-bytes", + "async-trait", + "dyn-clone", + "finality-grandpa", + "fork-tree", + "futures", + "futures-timer", + "log", + "parity-scale-codec", + "parking_lot 0.12.3", + "rand 0.8.5", + "sc-block-builder", + "sc-chain-spec", + "sc-client-api", + "sc-consensus", + "sc-network", + "sc-network-common", + "sc-network-gossip", + "sc-network-sync", + "sc-network-types", + "sc-telemetry", + "sc-transaction-pool-api", + "sc-utils", + "serde_json", + "sp-api", + "sp-application-crypto", + "sp-arithmetic", + "sp-blockchain", + "sp-consensus", + "sp-consensus-grandpa", + "sp-core", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", + "sp-keystore", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-consensus-grandpa-rpc" +version = "0.34.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "finality-grandpa", + "futures", + "jsonrpsee", + "log", + "parity-scale-codec", + "sc-client-api", + "sc-consensus-grandpa", + "sc-rpc", + "serde", + "sp-blockchain", + "sp-core", + "sp-runtime", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-consensus-manual-seal" +version = "0.50.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "assert_matches", + "async-trait", + "futures", + "futures-timer", + "jsonrpsee", + "log", + "parity-scale-codec", + "sc-client-api", + "sc-consensus", + "sc-consensus-aura", + "sc-consensus-babe", + "sc-consensus-epochs", + "sc-transaction-pool", + "sc-transaction-pool-api", + "serde", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-consensus-aura", + "sp-consensus-babe", + "sp-consensus-slots", + "sp-core", + "sp-inherents", + "sp-keystore", + "sp-runtime", + "sp-timestamp", + "substrate-prometheus-endpoint", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-consensus-slots" +version = "0.48.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "futures", + "futures-timer", + "log", + "parity-scale-codec", + "sc-client-api", + "sc-consensus", + "sc-telemetry", + "sp-arithmetic", + "sp-blockchain", + "sp-consensus", + "sp-consensus-slots", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-state-machine", +] + +[[package]] +name = "sc-executor" +version = "0.42.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "parity-scale-codec", + "parking_lot 0.12.3", + "sc-executor-common", + "sc-executor-polkavm", + "sc-executor-wasmtime", + "schnellru", + "sp-api", + "sp-core", + "sp-externalities", + "sp-io", + "sp-panic-handler", + "sp-runtime-interface", + "sp-trie", + "sp-version", + "sp-wasm-interface", + "tracing", +] + +[[package]] +name = "sc-executor-common" +version = "0.38.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "polkavm", + "sc-allocator", + "sp-maybe-compressed-blob", + "sp-wasm-interface", + "thiserror 1.0.69", + "wasm-instrument", +] + +[[package]] +name = "sc-executor-polkavm" +version = "0.35.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "log", + "polkavm", + "sc-executor-common", + "sp-wasm-interface", +] + +[[package]] +name = "sc-executor-wasmtime" +version = "0.38.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "anyhow", + "log", + "parking_lot 0.12.3", + "rustix 0.36.17", + "sc-allocator", + "sc-executor-common", + "sp-runtime-interface", + "sp-wasm-interface", + "wasmtime", +] + +[[package]] +name = "sc-informant" +version = "0.48.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "console", + "futures", + "futures-timer", + "log", + "sc-client-api", + "sc-network", + "sc-network-sync", + "sp-blockchain", + "sp-runtime", +] + +[[package]] +name = "sc-keystore" +version = "35.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "array-bytes", + "parking_lot 0.12.3", + "serde_json", + "sp-application-crypto", + "sp-core", + "sp-keystore", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-mixnet" +version = "0.19.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "array-bytes", + "arrayvec 0.7.6", + "blake2 0.10.6", + "bytes", + "futures", + "futures-timer", + "log", + "mixnet", + "parity-scale-codec", + "parking_lot 0.12.3", + "sc-client-api", + "sc-network", + "sc-network-types", + "sc-transaction-pool-api", + "sp-api", + "sp-consensus", + "sp-core", + "sp-keystore", + "sp-mixnet", + "sp-runtime", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-network" +version = "0.49.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "array-bytes", + "async-channel 1.9.0", + "async-trait", + "asynchronous-codec 0.6.2", + "bytes", + "cid 0.9.0", + "either", + "fnv", + "futures", + "futures-timer", + "ip_network", + "libp2p", + "linked_hash_set", + "litep2p", + "log", + "mockall", + "parity-scale-codec", + "parking_lot 0.12.3", + "partial_sort", + "pin-project", + "prost 0.12.6", + "prost-build", + "rand 0.8.5", + "sc-client-api", + "sc-network-common", + "sc-network-types", + "sc-utils", + "schnellru", + "serde", + "serde_json", + "smallvec", + "sp-arithmetic", + "sp-blockchain", + "sp-core", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror 1.0.69", + "tokio", + "tokio-stream", + "unsigned-varint 0.7.2", + "void", + "wasm-timer", + "zeroize", +] + +[[package]] +name = "sc-network-common" +version = "0.48.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "bitflags 1.3.2", + "parity-scale-codec", + "sp-runtime", +] + +[[package]] +name = "sc-network-gossip" +version = "0.49.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "ahash", + "futures", + "futures-timer", + "log", + "sc-network", + "sc-network-common", + "sc-network-sync", + "sc-network-types", + "schnellru", + "sp-runtime", + "substrate-prometheus-endpoint", + "tracing", +] + +[[package]] +name = "sc-network-light" +version = "0.48.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "array-bytes", + "async-channel 1.9.0", + "futures", + "log", + "parity-scale-codec", + "prost 0.12.6", + "prost-build", + "sc-client-api", + "sc-network", + "sc-network-types", + "sp-blockchain", + "sp-core", + "sp-runtime", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-network-sync" +version = "0.48.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "array-bytes", + "async-channel 1.9.0", + "async-trait", + "fork-tree", + "futures", + "log", + "mockall", + "parity-scale-codec", + "prost 0.12.6", + "prost-build", + "sc-client-api", + "sc-consensus", + "sc-network", + "sc-network-common", + "sc-network-types", + "sc-utils", + "schnellru", + "smallvec", + "sp-arithmetic", + "sp-blockchain", + "sp-consensus", + "sp-consensus-grandpa", + "sp-core", + "sp-runtime", + "substrate-prometheus-endpoint", + "thiserror 1.0.69", + "tokio", + "tokio-stream", +] + +[[package]] +name = "sc-network-transactions" +version = "0.48.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "array-bytes", + "futures", + "log", + "parity-scale-codec", + "sc-network", + "sc-network-common", + "sc-network-sync", + "sc-network-types", + "sc-utils", + "sp-consensus", + "sp-runtime", + "substrate-prometheus-endpoint", +] + +[[package]] +name = "sc-network-types" +version = "0.15.3" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "bs58", + "bytes", + "ed25519-dalek", + "libp2p-identity", + "libp2p-kad", + "litep2p", + "log", + "multiaddr 0.18.2", + "multihash 0.19.3", + "rand 0.8.5", + "thiserror 1.0.69", + "zeroize", +] + +[[package]] +name = "sc-offchain" +version = "44.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "bytes", + "fnv", + "futures", + "futures-timer", + "http-body-util", + "hyper 1.6.0", + "hyper-rustls", + "hyper-util", + "num_cpus", + "once_cell", + "parity-scale-codec", + "parking_lot 0.12.3", + "rand 0.8.5", + "rustls", + "sc-client-api", + "sc-network", + "sc-network-types", + "sc-transaction-pool-api", + "sc-utils", + "sp-api", + "sp-core", + "sp-externalities", + "sp-keystore", + "sp-offchain", + "sp-runtime", + "threadpool", + "tracing", +] + +[[package]] +name = "sc-proposer-metrics" +version = "0.20.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "log", + "substrate-prometheus-endpoint", +] + +[[package]] +name = "sc-rpc" +version = "44.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "futures", + "jsonrpsee", + "log", + "parity-scale-codec", + "parking_lot 0.12.3", + "sc-block-builder", + "sc-chain-spec", + "sc-client-api", + "sc-mixnet", + "sc-rpc-api", + "sc-tracing", + "sc-transaction-pool-api", + "sc-utils", + "serde_json", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-keystore", + "sp-offchain", + "sp-rpc", + "sp-runtime", + "sp-session", + "sp-statement-store", + "sp-version", + "tokio", +] + +[[package]] +name = "sc-rpc-api" +version = "0.48.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "jsonrpsee", + "parity-scale-codec", + "sc-chain-spec", + "sc-mixnet", + "sc-transaction-pool-api", + "scale-info", + "serde", + "serde_json", + "sp-core", + "sp-rpc", + "sp-runtime", + "sp-version", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-rpc-server" +version = "21.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "dyn-clone", + "forwarded-header-value", + "futures", + "governor", + "http 1.3.1", + "http-body-util", + "hyper 1.6.0", + "ip_network", + "jsonrpsee", + "log", + "sc-rpc-api", + "serde", + "serde_json", + "substrate-prometheus-endpoint", + "tokio", + "tower", + "tower-http", +] + +[[package]] +name = "sc-rpc-spec-v2" +version = "0.49.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "array-bytes", + "futures", + "futures-util", + "hex", + "itertools 0.11.0", + "jsonrpsee", + "log", + "parity-scale-codec", + "parking_lot 0.12.3", + "rand 0.8.5", + "sc-chain-spec", + "sc-client-api", + "sc-rpc", + "sc-transaction-pool-api", + "schnellru", + "serde", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-rpc", + "sp-runtime", + "sp-version", + "thiserror 1.0.69", + "tokio", + "tokio-stream", +] + +[[package]] +name = "sc-runtime-utilities" +version = "0.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "parity-scale-codec", + "sc-executor", + "sc-executor-common", + "sp-core", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", + "sp-state-machine", + "sp-wasm-interface", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-service" +version = "0.50.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "directories", + "exit-future", + "futures", + "futures-timer", + "jsonrpsee", + "log", + "parity-scale-codec", + "parking_lot 0.12.3", + "pin-project", + "rand 0.8.5", + "sc-chain-spec", + "sc-client-api", + "sc-client-db", + "sc-consensus", + "sc-executor", + "sc-informant", + "sc-keystore", + "sc-network", + "sc-network-common", + "sc-network-light", + "sc-network-sync", + "sc-network-transactions", + "sc-network-types", + "sc-rpc", + "sc-rpc-server", + "sc-rpc-spec-v2", + "sc-sysinfo", + "sc-telemetry", + "sc-tracing", + "sc-transaction-pool", + "sc-transaction-pool-api", + "sc-utils", + "schnellru", + "serde", + "serde_json", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-externalities", + "sp-keystore", + "sp-runtime", + "sp-session", + "sp-state-machine", + "sp-storage", + "sp-transaction-pool", + "sp-transaction-storage-proof", + "sp-trie", + "sp-version", + "static_init", + "substrate-prometheus-endpoint", + "tempfile", + "thiserror 1.0.69", + "tokio", + "tracing", + "tracing-futures", +] + +[[package]] +name = "sc-state-db" +version = "0.38.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "log", + "parity-scale-codec", + "parking_lot 0.12.3", + "sp-core", +] + +[[package]] +name = "sc-storage-monitor" +version = "0.24.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "clap", + "fs4", + "log", + "sp-core", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "sc-sync-state-rpc" +version = "0.49.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "jsonrpsee", + "parity-scale-codec", + "sc-chain-spec", + "sc-client-api", + "sc-consensus-babe", + "sc-consensus-epochs", + "sc-consensus-grandpa", + "serde", + "serde_json", + "sp-blockchain", + "sp-runtime", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-sysinfo" +version = "42.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "derive_more 0.99.20", + "futures", + "libc", + "log", + "rand 0.8.5", + "rand_pcg", + "regex", + "sc-telemetry", + "serde", + "serde_json", + "sp-core", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", + "sp-io", +] + +[[package]] +name = "sc-telemetry" +version = "28.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "chrono", + "futures", + "libp2p", + "log", + "parking_lot 0.12.3", + "pin-project", + "rand 0.8.5", + "sc-utils", + "serde", + "serde_json", + "thiserror 1.0.69", + "wasm-timer", +] + +[[package]] +name = "sc-tracing" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "chrono", + "console", + "is-terminal", + "libc", + "log", + "parity-scale-codec", + "parking_lot 0.12.3", + "rustc-hash 1.1.0", + "sc-client-api", + "sc-tracing-proc-macro", + "serde", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-rpc", + "sp-runtime", + "sp-tracing", + "thiserror 1.0.69", + "tracing", + "tracing-log", + "tracing-subscriber", +] + +[[package]] +name = "sc-tracing-proc-macro" +version = "11.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "proc-macro-crate 3.3.0", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "sc-transaction-pool" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "futures", + "futures-timer", + "indexmap 2.9.0", + "itertools 0.11.0", + "linked-hash-map", + "log", + "parity-scale-codec", + "parking_lot 0.12.3", + "sc-client-api", + "sc-transaction-pool-api", + "sc-utils", + "serde", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", + "sp-runtime", + "sp-tracing", + "sp-transaction-pool", + "substrate-prometheus-endpoint", + "thiserror 1.0.69", + "tokio", + "tokio-stream", + "tracing", +] + +[[package]] +name = "sc-transaction-pool-api" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "futures", + "indexmap 2.9.0", + "log", + "parity-scale-codec", + "serde", + "sp-blockchain", + "sp-core", + "sp-runtime", + "thiserror 1.0.69", +] + +[[package]] +name = "sc-utils" +version = "18.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-channel 1.9.0", + "futures", + "futures-timer", + "log", + "parking_lot 0.12.3", + "prometheus", + "sp-arithmetic", +] + +[[package]] +name = "scale-bits" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57b1e7f6b65ed1f04e79a85a57d755ad56d76fdf1e9bddcc9ae14f71fcdcf54" +dependencies = [ + "parity-scale-codec", + "scale-info", + "scale-type-resolver", + "serde", +] + +[[package]] +name = "scale-decode" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e98f3262c250d90e700bb802eb704e1f841e03331c2eb815e46516c4edbf5b27" +dependencies = [ + "derive_more 0.99.20", + "parity-scale-codec", + "scale-bits", + "scale-type-resolver", + "smallvec", +] + +[[package]] +name = "scale-decode" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ae9cc099ae85ff28820210732b00f019546f36f33225f509fe25d5816864a0" +dependencies = [ + "derive_more 1.0.0", + "parity-scale-codec", + "primitive-types", + "scale-bits", + "scale-decode-derive", + "scale-type-resolver", + "smallvec", +] + +[[package]] +name = "scale-decode-derive" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ed9401effa946b493f9f84dc03714cca98119b230497df6f3df6b84a2b03648" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "scale-encode" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f9271284d05d0749c40771c46180ce89905fd95aa72a2a2fddb4b7c0aa424db" +dependencies = [ + "derive_more 1.0.0", + "parity-scale-codec", + "primitive-types", + "scale-bits", + "scale-encode-derive", + "scale-type-resolver", + "smallvec", +] + +[[package]] +name = "scale-encode-derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "102fbc6236de6c53906c0b262f12c7aa69c2bdc604862c12728f5f4d370bc137" +dependencies = [ + "darling", + "proc-macro-crate 3.3.0", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "scale-info" +version = "2.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346a3b32eba2640d17a9cb5927056b08f3de90f65b72fe09402c2ad07d684d0b" +dependencies = [ + "bitvec", + "cfg-if", + "derive_more 1.0.0", + "parity-scale-codec", + "scale-info-derive", + "serde", +] + +[[package]] +name = "scale-info-derive" +version = "2.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6630024bf739e2179b91fb424b28898baf819414262c5d376677dbff1fe7ebf" +dependencies = [ + "proc-macro-crate 3.3.0", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "scale-type-resolver" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0cded6518aa0bd6c1be2b88ac81bf7044992f0f154bfbabd5ad34f43512abcb" +dependencies = [ + "scale-info", + "smallvec", +] + +[[package]] +name = "scale-typegen" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc4c70c7fea2eef1740f0081d3fe385d8bee1eef11e9272d3bec7dc8e5438e0" +dependencies = [ + "proc-macro2", + "quote", + "scale-info", + "syn 2.0.101", + "thiserror 1.0.69", +] + +[[package]] +name = "scale-value" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5e0ef2a0ee1e02a69ada37feb87ea1616ce9808aca072befe2d3131bf28576e" +dependencies = [ + "base58", + "blake2 0.10.6", + "derive_more 1.0.0", + "either", + "parity-scale-codec", + "scale-bits", + "scale-decode 0.14.0", + "scale-encode", + "scale-info", + "scale-type-resolver", + "serde", + "yap", +] + +[[package]] +name = "schannel" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "schnellru" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "356285bbf17bea63d9e52e96bd18f039672ac92b55b8cb997d6162a2a37d1649" +dependencies = [ + "ahash", + "cfg-if", + "hashbrown 0.13.2", +] + +[[package]] +name = "schnorrkel" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "844b7645371e6ecdf61ff246ba1958c29e802881a749ae3fb1993675d210d28d" +dependencies = [ + "arrayref", + "arrayvec 0.7.6", + "curve25519-dalek-ng", + "merlin", + "rand_core 0.6.4", + "sha2 0.9.9", + "subtle-ng", + "zeroize", +] + +[[package]] +name = "schnorrkel" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de18f6d8ba0aad7045f5feae07ec29899c1112584a38509a84ad7b04451eaa0" +dependencies = [ + "aead", + "arrayref", + "arrayvec 0.7.6", + "curve25519-dalek", + "getrandom_or_panic", + "merlin", + "rand_core 0.6.4", + "serde_bytes", + "sha2 0.10.9", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "scratch" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f6280af86e5f559536da57a45ebc84948833b3bee313a7dd25232e09c878a52" + +[[package]] +name = "scrypt" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f" +dependencies = [ + "password-hash", + "pbkdf2", + "salsa20", + "sha2 0.10.9", +] + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array 0.14.7", + "pkcs8", + "serdect", + "subtle 2.6.1", + "zeroize", +] + +[[package]] +name = "seccompiler" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "345a3e4dddf721a478089d4697b83c6c0a8f5bf16086f6c13397e4534eb6e2e5" +dependencies = [ + "libc", +] + +[[package]] +name = "secp256k1" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25996b82292a7a57ed3508f052cfff8640d38d32018784acd714758b43da9c8f" +dependencies = [ + "secp256k1-sys 0.8.1", +] + +[[package]] +name = "secp256k1" +version = "0.28.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24b59d129cdadea20aea4fb2352fa053712e5d713eee47d700cd4b2bc002f10" +dependencies = [ + "secp256k1-sys 0.9.2", +] + +[[package]] +name = "secp256k1" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b50c5943d326858130af85e049f2661ba3c78b26589b8ab98e65e80ae44a1252" +dependencies = [ + "bitcoin_hashes 0.14.0", + "rand 0.8.5", + "secp256k1-sys 0.10.1", +] + +[[package]] +name = "secp256k1-sys" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70a129b9e9efbfb223753b9163c4ab3b13cff7fd9c7f010fbac25ab4099fa07e" +dependencies = [ + "cc", +] + +[[package]] +name = "secp256k1-sys" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d1746aae42c19d583c3c1a8c646bfad910498e2051c551a7f2e3c0c9fbb7eb" +dependencies = [ + "cc", +] + +[[package]] +name = "secp256k1-sys" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9" +dependencies = [ + "cc", +] + +[[package]] +name = "secrecy" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" +dependencies = [ + "zeroize", +] + +[[package]] +name = "secrecy" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e891af845473308773346dc847b2c23ee78fe442e0472ac50e22a18a93d3ae5a" +dependencies = [ + "zeroize", +] + +[[package]] +name = "security-framework" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" +dependencies = [ + "bitflags 2.9.1", + "core-foundation 0.10.1", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a3186ec9e65071a2095434b1f5bb24838d4e8e130f584c790f6033c79943537" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +dependencies = [ + "serde", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "serde" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_bytes" +version = "0.11.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "serde_json" +version = "1.0.140" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_spanned" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +dependencies = [ + "serde", +] + +[[package]] +name = "serdect" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" +dependencies = [ + "base16ct", + "serde", +] + +[[package]] +name = "serial_test" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e56dd856803e253c8f298af3f4d7eb0ae5e23a737252cd90bb4f3b435033b2d" +dependencies = [ + "dashmap", + "lazy_static", + "parking_lot 0.12.3", + "serial_test_derive", +] + +[[package]] +name = "serial_test_derive" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91d129178576168c589c9ec973feedf7d3126c01ac2bf08795109aa35b69fb8f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "sha-1" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug 0.3.1", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug 0.3.1", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest 0.10.7", + "keccak", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core 0.6.4", +] + +[[package]] +name = "simba" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3a386a501cd104797982c15ae17aafe8b9261315b5d07e3ec803f2ea26be0fa" +dependencies = [ + "approx", + "num-complex", + "num-traits", + "paste", + "wide", +] + +[[package]] +name = "simple-dns" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dee851d0e5e7af3721faea1843e8015e820a234f81fda3dea9247e15bac9a86a" +dependencies = [ + "bitflags 2.9.1", +] + +[[package]] +name = "simple-mermaid" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "620a1d43d70e142b1d46a929af51d44f383db9c7a2ec122de2cd992ccfcf3c18" + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "siphasher" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "slice-group-by" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" + +[[package]] +name = "slot-range-helper" +version = "17.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "enumn", + "parity-scale-codec", + "paste", + "sp-runtime", +] + +[[package]] +name = "slotmap" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" +dependencies = [ + "version_check", +] + +[[package]] +name = "smallvec" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" + +[[package]] +name = "smol" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13f2b548cd8447f8de0fdf1c592929f70f4fc7039a05e47404b0d096ec6987a1" +dependencies = [ + "async-channel 1.9.0", + "async-executor", + "async-fs 1.6.0", + "async-io 1.13.0", + "async-lock 2.8.0", + "async-net 1.8.0", + "async-process 1.8.1", + "blocking", + "futures-lite 1.13.0", +] + +[[package]] +name = "smol" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a33bd3e260892199c3ccfc487c88b2da2265080acb316cd920da72fdfd7c599f" +dependencies = [ + "async-channel 2.3.1", + "async-executor", + "async-fs 2.1.2", + "async-io 2.4.1", + "async-lock 3.4.0", + "async-net 2.0.0", + "async-process 2.3.1", + "blocking", + "futures-lite 2.6.0", +] + +[[package]] +name = "smoldot" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0bb30cf57b7b5f6109ce17c3164445e2d6f270af2cb48f6e4d31c2967c9a9f5" +dependencies = [ + "arrayvec 0.7.6", + "async-lock 2.8.0", + "atomic-take", + "base64 0.21.7", + "bip39", + "blake2-rfc", + "bs58", + "chacha20", + "crossbeam-queue", + "derive_more 0.99.20", + "ed25519-zebra", + "either", + "event-listener 2.5.3", + "fnv", + "futures-lite 1.13.0", + "futures-util", + "hashbrown 0.14.5", + "hex", + "hmac 0.12.1", + "itertools 0.11.0", + "libsecp256k1", + "merlin", + "no-std-net", + "nom", + "num-bigint", + "num-rational", + "num-traits", + "pbkdf2", + "pin-project", + "poly1305", + "rand 0.8.5", + "rand_chacha 0.3.1", + "ruzstd 0.4.0", + "schnorrkel 0.10.2", + "serde", + "serde_json", + "sha2 0.10.9", + "sha3", + "siphasher 0.3.11", + "slab", + "smallvec", + "soketto 0.7.1", + "twox-hash", + "wasmi 0.31.2", + "x25519-dalek", + "zeroize", +] + +[[package]] +name = "smoldot" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "966e72d77a3b2171bb7461d0cb91f43670c63558c62d7cf42809cae6c8b6b818" +dependencies = [ + "arrayvec 0.7.6", + "async-lock 3.4.0", + "atomic-take", + "base64 0.22.1", + "bip39", + "blake2-rfc", + "bs58", + "chacha20", + "crossbeam-queue", + "derive_more 0.99.20", + "ed25519-zebra", + "either", + "event-listener 5.4.0", + "fnv", + "futures-lite 2.6.0", + "futures-util", + "hashbrown 0.14.5", + "hex", + "hmac 0.12.1", + "itertools 0.13.0", + "libm", + "libsecp256k1", + "merlin", + "nom", + "num-bigint", + "num-rational", + "num-traits", + "pbkdf2", + "pin-project", + "poly1305", + "rand 0.8.5", + "rand_chacha 0.3.1", + "ruzstd 0.6.0", + "schnorrkel 0.11.4", + "serde", + "serde_json", + "sha2 0.10.9", + "sha3", + "siphasher 1.0.1", + "slab", + "smallvec", + "soketto 0.8.1", + "twox-hash", + "wasmi 0.32.3", + "x25519-dalek", + "zeroize", +] + +[[package]] +name = "smoldot-light" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "256b5bad1d6b49045e95fe87492ce73d5af81545d8b4d8318a872d2007024c33" +dependencies = [ + "async-channel 1.9.0", + "async-lock 2.8.0", + "base64 0.21.7", + "blake2-rfc", + "derive_more 0.99.20", + "either", + "event-listener 2.5.3", + "fnv", + "futures-channel", + "futures-lite 1.13.0", + "futures-util", + "hashbrown 0.14.5", + "hex", + "itertools 0.11.0", + "log", + "lru 0.11.1", + "no-std-net", + "parking_lot 0.12.3", + "pin-project", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "serde_json", + "siphasher 0.3.11", + "slab", + "smol 1.3.0", + "smoldot 0.11.0", + "zeroize", +] + +[[package]] +name = "smoldot-light" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a33b06891f687909632ce6a4e3fd7677b24df930365af3d0bcb078310129f3f" +dependencies = [ + "async-channel 2.3.1", + "async-lock 3.4.0", + "base64 0.22.1", + "blake2-rfc", + "bs58", + "derive_more 0.99.20", + "either", + "event-listener 5.4.0", + "fnv", + "futures-channel", + "futures-lite 2.6.0", + "futures-util", + "hashbrown 0.14.5", + "hex", + "itertools 0.13.0", + "log", + "lru 0.12.5", + "parking_lot 0.12.3", + "pin-project", + "rand 0.8.5", + "rand_chacha 0.3.1", + "serde", + "serde_json", + "siphasher 1.0.1", + "slab", + "smol 2.0.2", + "smoldot 0.18.0", + "zeroize", +] + +[[package]] +name = "snap" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" + +[[package]] +name = "snow" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "850948bee068e713b8ab860fe1adc4d109676ab4c3b621fd8147f06b261f2f85" +dependencies = [ + "aes-gcm", + "blake2 0.10.6", + "chacha20poly1305", + "curve25519-dalek", + "rand_core 0.6.4", + "ring 0.17.14", + "rustc_version", + "sha2 0.10.9", + "subtle 2.6.1", +] + +[[package]] +name = "socket2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "socket2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "soketto" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" +dependencies = [ + "base64 0.13.1", + "bytes", + "futures", + "httparse", + "log", + "rand 0.8.5", + "sha-1", +] + +[[package]] +name = "soketto" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e859df029d160cb88608f5d7df7fb4753fd20fdfb4de5644f3d8b8440841721" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures", + "http 1.3.1", + "httparse", + "log", + "rand 0.8.5", + "sha1", +] + +[[package]] +name = "sp-api" +version = "36.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "docify", + "hash-db", + "log", + "parity-scale-codec", + "scale-info", + "sp-api-proc-macro", + "sp-core", + "sp-externalities", + "sp-metadata-ir", + "sp-runtime", + "sp-runtime-interface", + "sp-state-machine", + "sp-trie", + "sp-version", + "thiserror 1.0.69", +] + +[[package]] +name = "sp-api-proc-macro" +version = "22.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "Inflector", + "blake2 0.10.6", + "expander", + "proc-macro-crate 3.3.0", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "sp-application-crypto" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", +] + +[[package]] +name = "sp-arithmetic" +version = "26.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "docify", + "integer-sqrt", + "num-traits", + "parity-scale-codec", + "scale-info", + "serde", + "static_assertions", +] + +[[package]] +name = "sp-authority-discovery" +version = "36.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-application-crypto", + "sp-runtime", +] + +[[package]] +name = "sp-block-builder" +version = "36.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "sp-api", + "sp-inherents", + "sp-runtime", +] + +[[package]] +name = "sp-blockchain" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "futures", + "parity-scale-codec", + "parking_lot 0.12.3", + "schnellru", + "sp-api", + "sp-consensus", + "sp-core", + "sp-database", + "sp-runtime", + "sp-state-machine", + "thiserror 1.0.69", + "tracing", +] + +[[package]] +name = "sp-consensus" +version = "0.42.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "futures", + "log", + "sp-inherents", + "sp-runtime", + "sp-state-machine", + "thiserror 1.0.69", +] + +[[package]] +name = "sp-consensus-aura" +version = "0.42.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-application-crypto", + "sp-consensus-slots", + "sp-inherents", + "sp-runtime", + "sp-timestamp", +] + +[[package]] +name = "sp-consensus-babe" +version = "0.42.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "parity-scale-codec", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto", + "sp-consensus-slots", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-timestamp", +] + +[[package]] +name = "sp-consensus-beefy" +version = "24.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "parity-scale-codec", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", + "sp-io", + "sp-keystore", + "sp-mmr-primitives", + "sp-runtime", + "sp-weights", + "strum 0.26.3", +] + +[[package]] +name = "sp-consensus-grandpa" +version = "23.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "finality-grandpa", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-keystore", + "sp-runtime", +] + +[[package]] +name = "sp-consensus-slots" +version = "0.42.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "parity-scale-codec", + "scale-info", + "serde", + "sp-timestamp", +] + +[[package]] +name = "sp-core" +version = "36.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "ark-vrf", + "array-bytes", + "bitflags 1.3.2", + "blake2 0.10.6", + "bounded-collections", + "bs58", + "dyn-clonable", + "ed25519-zebra", + "futures", + "hash-db", + "hash256-std-hasher", + "impl-serde 0.5.0", + "itertools 0.11.0", + "k256", + "libsecp256k1", + "log", + "merlin", + "parity-bip39", + "parity-scale-codec", + "parking_lot 0.12.3", + "paste", + "primitive-types", + "rand 0.8.5", + "scale-info", + "schnorrkel 0.11.4", + "secp256k1 0.28.2", + "secrecy 0.8.0", + "serde", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", + "sp-debug-derive", + "sp-externalities", + "sp-runtime-interface", + "sp-std", + "sp-storage", + "ss58-registry", + "substrate-bip39", + "thiserror 1.0.69", + "tracing", + "w3f-bls", + "zeroize", +] + +[[package]] +name = "sp-crypto-hashing" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc9927a7f81334ed5b8a98a4a978c81324d12bd9713ec76b5c68fd410174c5eb" +dependencies = [ + "blake2b_simd", + "byteorder", + "digest 0.10.7", + "sha2 0.10.9", + "sha3", + "twox-hash", +] + +[[package]] +name = "sp-crypto-hashing" +version = "0.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "blake2b_simd", + "byteorder", + "digest 0.10.7", + "sha2 0.10.9", + "sha3", + "twox-hash", +] + +[[package]] +name = "sp-crypto-hashing-proc-macro" +version = "0.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "quote", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", + "syn 2.0.101", +] + +[[package]] +name = "sp-database" +version = "10.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "kvdb", + "parking_lot 0.12.3", +] + +[[package]] +name = "sp-debug-derive" +version = "14.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "sp-externalities" +version = "0.30.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "environmental", + "parity-scale-codec", + "sp-storage", +] + +[[package]] +name = "sp-genesis-builder" +version = "0.17.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "parity-scale-codec", + "scale-info", + "serde_json", + "sp-api", + "sp-runtime", +] + +[[package]] +name = "sp-inherents" +version = "36.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "impl-trait-for-tuples", + "parity-scale-codec", + "scale-info", + "sp-runtime", + "thiserror 1.0.69", +] + +[[package]] +name = "sp-io" +version = "40.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "bytes", + "docify", + "ed25519-dalek", + "libsecp256k1", + "log", + "parity-scale-codec", + "polkavm-derive", + "rustversion", + "secp256k1 0.28.2", + "sp-core", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", + "sp-externalities", + "sp-keystore", + "sp-runtime-interface", + "sp-state-machine", + "sp-tracing", + "sp-trie", + "tracing", + "tracing-core", +] + +[[package]] +name = "sp-keyring" +version = "41.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "sp-core", + "sp-runtime", + "strum 0.26.3", +] + +[[package]] +name = "sp-keystore" +version = "0.42.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "parity-scale-codec", + "parking_lot 0.12.3", + "sp-core", + "sp-externalities", +] + +[[package]] +name = "sp-maybe-compressed-blob" +version = "11.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "thiserror 1.0.69", + "zstd 0.12.4", +] + +[[package]] +name = "sp-metadata-ir" +version = "0.10.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-metadata 20.0.0", + "parity-scale-codec", + "scale-info", +] + +[[package]] +name = "sp-mixnet" +version = "0.14.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-application-crypto", +] + +[[package]] +name = "sp-mmr-primitives" +version = "36.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "log", + "parity-scale-codec", + "polkadot-ckb-merkle-mountain-range", + "scale-info", + "serde", + "sp-api", + "sp-core", + "sp-debug-derive", + "sp-runtime", + "thiserror 1.0.69", +] + +[[package]] +name = "sp-npos-elections" +version = "36.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "parity-scale-codec", + "scale-info", + "serde", + "sp-arithmetic", + "sp-core", + "sp-runtime", +] + +[[package]] +name = "sp-offchain" +version = "36.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "sp-api", + "sp-core", + "sp-runtime", +] + +[[package]] +name = "sp-panic-handler" +version = "13.0.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "backtrace", + "regex", +] + +[[package]] +name = "sp-rpc" +version = "34.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "rustc-hash 1.1.0", + "serde", + "sp-core", +] + +[[package]] +name = "sp-runtime" +version = "41.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "binary-merkle-tree", + "docify", + "either", + "hash256-std-hasher", + "impl-trait-for-tuples", + "log", + "num-traits", + "parity-scale-codec", + "paste", + "rand 0.8.5", + "scale-info", + "serde", + "simple-mermaid", + "sp-application-crypto", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-std", + "sp-trie", + "sp-weights", + "tracing", + "tuplex", +] + +[[package]] +name = "sp-runtime-interface" +version = "29.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "bytes", + "impl-trait-for-tuples", + "parity-scale-codec", + "polkavm-derive", + "primitive-types", + "sp-externalities", + "sp-runtime-interface-proc-macro", + "sp-std", + "sp-storage", + "sp-tracing", + "sp-wasm-interface", + "static_assertions", +] + +[[package]] +name = "sp-runtime-interface-proc-macro" +version = "18.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "Inflector", + "expander", + "proc-macro-crate 3.3.0", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "sp-session" +version = "38.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-core", + "sp-keystore", + "sp-runtime", + "sp-staking", +] + +[[package]] +name = "sp-staking" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "impl-trait-for-tuples", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-runtime", +] + +[[package]] +name = "sp-state-machine" +version = "0.45.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "hash-db", + "log", + "parity-scale-codec", + "parking_lot 0.12.3", + "rand 0.8.5", + "smallvec", + "sp-core", + "sp-externalities", + "sp-panic-handler", + "sp-trie", + "thiserror 1.0.69", + "tracing", + "trie-db", +] + +[[package]] +name = "sp-statement-store" +version = "20.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "aes-gcm", + "curve25519-dalek", + "ed25519-dalek", + "hkdf", + "parity-scale-codec", + "rand 0.8.5", + "scale-info", + "sha2 0.10.9", + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", + "sp-externalities", + "sp-runtime", + "sp-runtime-interface", + "thiserror 1.0.69", + "x25519-dalek", +] + +[[package]] +name = "sp-std" +version = "14.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" + +[[package]] +name = "sp-storage" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "impl-serde 0.5.0", + "parity-scale-codec", + "ref-cast", + "serde", + "sp-debug-derive", +] + +[[package]] +name = "sp-timestamp" +version = "36.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "parity-scale-codec", + "sp-inherents", + "sp-runtime", + "thiserror 1.0.69", +] + +[[package]] +name = "sp-tracing" +version = "17.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "parity-scale-codec", + "tracing", + "tracing-core", + "tracing-subscriber", +] + +[[package]] +name = "sp-transaction-pool" +version = "36.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "sp-api", + "sp-runtime", +] + +[[package]] +name = "sp-transaction-storage-proof" +version = "36.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "async-trait", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-trie", +] + +[[package]] +name = "sp-trie" +version = "39.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "ahash", + "hash-db", + "memory-db", + "nohash-hasher", + "parity-scale-codec", + "parking_lot 0.12.3", + "rand 0.8.5", + "scale-info", + "schnellru", + "sp-core", + "sp-externalities", + "thiserror 1.0.69", + "tracing", + "trie-db", + "trie-root", +] + +[[package]] +name = "sp-version" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "impl-serde 0.5.0", + "parity-scale-codec", + "parity-wasm", + "scale-info", + "serde", + "sp-crypto-hashing-proc-macro", + "sp-runtime", + "sp-std", + "sp-version-proc-macro", + "thiserror 1.0.69", +] + +[[package]] +name = "sp-version-proc-macro" +version = "15.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "parity-scale-codec", + "proc-macro-warning", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "sp-wasm-interface" +version = "21.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "anyhow", + "impl-trait-for-tuples", + "log", + "parity-scale-codec", + "wasmtime", +] + +[[package]] +name = "sp-weights" +version = "31.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "bounded-collections", + "parity-scale-codec", + "scale-info", + "serde", + "smallvec", + "sp-arithmetic", + "sp-debug-derive", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "spinning_top" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d96d2d1d716fb500937168cc09353ffdc7a012be8475ac7308e1bdf0e3923300" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "ss58-registry" +version = "1.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19409f13998e55816d1c728395af0b52ec066206341d939e22e7766df9b494b8" +dependencies = [ + "Inflector", + "num-format", + "proc-macro2", + "quote", + "serde", + "serde_json", + "unicode-xid", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "staging-parachain-info" +version = "0.20.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "cumulus-primitives-core", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-runtime", +] + +[[package]] +name = "staging-xcm" +version = "16.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "array-bytes", + "bounded-collections", + "derive-where", + "environmental", + "frame-support", + "hex-literal", + "impl-trait-for-tuples", + "log", + "parity-scale-codec", + "scale-info", + "serde", + "sp-runtime", + "sp-weights", + "xcm-procedural", +] + +[[package]] +name = "staging-xcm-builder" +version = "20.1.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "environmental", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "pallet-asset-conversion", + "pallet-transaction-payment", + "parity-scale-codec", + "polkadot-parachain-primitives", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-weights", + "staging-xcm", + "staging-xcm-executor", + "tracing", +] + +[[package]] +name = "staging-xcm-executor" +version = "19.1.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "environmental", + "frame-benchmarking", + "frame-support", + "impl-trait-for-tuples", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-weights", + "staging-xcm", + "tracing", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "static_init" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bae1df58c5fea7502e8e352ec26b5579f6178e1fdb311e088580c980dee25ed" +dependencies = [ + "bitflags 1.3.2", + "cfg_aliases 0.2.1", + "libc", + "parking_lot 0.12.3", + "parking_lot_core 0.9.10", + "static_init_macro", + "winapi", +] + +[[package]] +name = "static_init_macro" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1389c88ddd739ec6d3f8f83343764a0e944cd23cfbf126a9796a714b0b6edd6f" +dependencies = [ + "cfg_aliases 0.1.1", + "memchr", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "string-interner" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c6a0d765f5807e98a091107bae0a56ea3799f66a5de47b2c84c94a39c09974e" +dependencies = [ + "cfg-if", + "hashbrown 0.14.5", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "strum" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" + +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +dependencies = [ + "strum_macros 0.26.4", +] + +[[package]] +name = "strum_macros" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "rustversion", + "syn 1.0.109", +] + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.101", +] + +[[package]] +name = "substrate-bip39" +version = "0.6.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "hmac 0.12.1", + "pbkdf2", + "schnorrkel 0.11.4", + "sha2 0.10.9", + "zeroize", +] + +[[package]] +name = "substrate-build-script-utils" +version = "11.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" + +[[package]] +name = "substrate-frame-rpc-system" +version = "43.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "docify", + "frame-system-rpc-runtime-api", + "futures", + "jsonrpsee", + "log", + "parity-scale-codec", + "sc-rpc-api", + "sc-transaction-pool-api", + "sp-api", + "sp-block-builder", + "sp-blockchain", + "sp-core", + "sp-runtime", +] + +[[package]] +name = "substrate-prometheus-endpoint" +version = "0.17.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "http-body-util", + "hyper 1.6.0", + "hyper-util", + "log", + "prometheus", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "substrate-state-trie-migration-rpc" +version = "42.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "jsonrpsee", + "parity-scale-codec", + "sc-client-api", + "sc-rpc-api", + "serde", + "sp-core", + "sp-runtime", + "sp-state-machine", + "sp-trie", + "trie-db", +] + +[[package]] +name = "substrate-wasm-builder" +version = "26.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "array-bytes", + "build-helper", + "cargo_metadata", + "console", + "filetime", + "frame-metadata 20.0.0", + "jobserver", + "merkleized-metadata", + "parity-scale-codec", + "parity-wasm", + "polkavm-linker", + "sc-executor", + "shlex", + "sp-core", + "sp-io", + "sp-maybe-compressed-blob", + "sp-tracing", + "sp-version", + "strum 0.26.3", + "tempfile", + "toml 0.8.22", + "walkdir", + "wasm-opt", +] + +[[package]] +name = "subtle" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "subtle-ng" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" + +[[package]] +name = "subxt" +version = "0.38.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c17d7ec2359d33133b63c97e28c8b7cd3f0a5bc6ce567ae3aef9d9e85be3433" +dependencies = [ + "async-trait", + "derive-where", + "either", + "frame-metadata 17.0.0", + "futures", + "hex", + "impl-serde 0.5.0", + "jsonrpsee", + "parity-scale-codec", + "polkadot-sdk", + "primitive-types", + "scale-bits", + "scale-decode 0.14.0", + "scale-encode", + "scale-info", + "scale-value", + "serde", + "serde_json", + "subxt-core", + "subxt-lightclient", + "subxt-macro", + "subxt-metadata", + "thiserror 1.0.69", + "tokio", + "tokio-util", + "tracing", + "url", + "web-time", +] + +[[package]] +name = "subxt-codegen" +version = "0.38.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6550ef451c77db6e3bc7c56fb6fe1dca9398a2c8fc774b127f6a396a769b9c5b" +dependencies = [ + "heck 0.5.0", + "parity-scale-codec", + "proc-macro2", + "quote", + "scale-info", + "scale-typegen", + "subxt-metadata", + "syn 2.0.101", + "thiserror 1.0.69", +] + +[[package]] +name = "subxt-core" +version = "0.38.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7a1bc6c9c1724971636a66e3225a7253cdb35bb6efb81524a6c71c04f08c59" +dependencies = [ + "base58", + "blake2 0.10.6", + "derive-where", + "frame-decode", + "frame-metadata 17.0.0", + "hashbrown 0.14.5", + "hex", + "impl-serde 0.5.0", + "keccak-hash", + "parity-scale-codec", + "polkadot-sdk", + "primitive-types", + "scale-bits", + "scale-decode 0.14.0", + "scale-encode", + "scale-info", + "scale-value", + "serde", + "serde_json", + "subxt-metadata", + "tracing", +] + +[[package]] +name = "subxt-lightclient" +version = "0.38.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ebc9131da4d0ba1f7814495b8cc79698798ccd52cacd7bcefe451e415bd945" +dependencies = [ + "futures", + "futures-util", + "serde", + "serde_json", + "smoldot-light 0.16.2", + "thiserror 1.0.69", + "tokio", + "tokio-stream", + "tracing", +] + +[[package]] +name = "subxt-macro" +version = "0.38.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7819c5e09aae0319981ee853869f2fcd1fac4db8babd0d004c17161297aadc05" +dependencies = [ + "darling", + "parity-scale-codec", + "proc-macro-error2", + "quote", + "scale-typegen", + "subxt-codegen", + "subxt-utils-fetchmetadata", + "syn 2.0.101", +] + +[[package]] +name = "subxt-metadata" +version = "0.38.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aacd4e7484fef58deaa2dcb32d94753a864b208a668c0dd0c28be1d8abeeadb2" +dependencies = [ + "frame-decode", + "frame-metadata 17.0.0", + "hashbrown 0.14.5", + "parity-scale-codec", + "polkadot-sdk", + "scale-info", +] + +[[package]] +name = "subxt-signer" +version = "0.38.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d680352d04665b1e4eb6f9d2a54b800c4d8e1b20478e69be1b7d975b08d9fc34" +dependencies = [ + "base64 0.22.1", + "bip32", + "bip39", + "cfg-if", + "crypto_secretbox", + "hex", + "hmac 0.12.1", + "keccak-hash", + "parity-scale-codec", + "pbkdf2", + "polkadot-sdk", + "regex", + "schnorrkel 0.11.4", + "scrypt", + "secp256k1 0.30.0", + "secrecy 0.10.3", + "serde", + "serde_json", + "sha2 0.10.9", + "subxt-core", + "zeroize", +] + +[[package]] +name = "subxt-utils-fetchmetadata" +version = "0.38.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3c53bc3eeaacc143a2f29ace4082edd2edaccab37b69ad20befba9fb00fdb3d" +dependencies = [ + "hex", + "parity-scale-codec", + "thiserror 1.0.69", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "synstructure" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "unicode-xid", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags 2.9.1", + "core-foundation 0.9.4", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "system-runtime-api" +version = "0.0.0" +dependencies = [ + "common-primitives", + "frame-support", + "frame-system", + "serde_json", + "sp-api", + "sp-runtime", +] + +[[package]] +name = "tagptr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + +[[package]] +name = "tempfile" +version = "3.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" +dependencies = [ + "fastrand 2.3.0", + "getrandom 0.3.3", + "once_cell", + "rustix 1.0.7", + "windows-sys 0.59.0", +] + +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "terminal_size" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45c6481c4829e4cc63825e62c49186a34538b7b2750b73b266581ffb612fb5ed" +dependencies = [ + "rustix 1.0.7", + "windows-sys 0.59.0", +] + +[[package]] +name = "termtree" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683" + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +dependencies = [ + "thiserror-impl 2.0.12", +] + +[[package]] +name = "thiserror-core" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c001ee18b7e5e3f62cbf58c7fe220119e68d902bb7443179c0c8aef30090e999" +dependencies = [ + "thiserror-core-impl", +] + +[[package]] +name = "thiserror-core-impl" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4c60d69f36615a077cc7663b9cb8e42275722d23e58a7fa3d2c7f2915d09d04" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "thousands" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820" + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "tikv-jemalloc-ctl" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "619bfed27d807b54f7f776b9430d4f8060e66ee138a28632ca898584d462c31c" +dependencies = [ + "libc", + "paste", + "tikv-jemalloc-sys", +] + +[[package]] +name = "tikv-jemalloc-sys" +version = "0.5.4+5.3.0-patched" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9402443cb8fd499b6f327e40565234ff34dbda27460c5b47db0db77443dd85d1" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "time" +version = "0.3.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" + +[[package]] +name = "time-macros" +version = "0.2.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinystr" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.45.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "parking_lot 0.12.3", + "pin-project-lite", + "signal-hook-registry", + "socket2 0.5.10", + "tokio-macros", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-macros" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", + "tokio-util", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" +dependencies = [ + "futures-util", + "log", + "rustls", + "rustls-native-certs", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tungstenite", +] + +[[package]] +name = "tokio-util" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" +dependencies = [ + "bytes", + "futures-core", + "futures-io", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "toml" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05ae329d1f08c4d17a59bed7ff5b5a769d062e64a62d34a3261b219e62cd5aae" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.22.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e" +dependencies = [ + "indexmap 2.9.0", + "serde", + "serde_spanned", + "toml_datetime", + "toml_write", + "winnow", +] + +[[package]] +name = "toml_write" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfb942dfe1d8e29a7ee7fcbde5bd2b9a25fb89aa70caea2eba3bee836ff41076" + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" +dependencies = [ + "bitflags 2.9.1", + "bytes", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "pin-project-lite", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "tracing-core" +version = "0.1.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-futures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +dependencies = [ + "pin-project", + "tracing", +] + +[[package]] +name = "tracing-gum" +version = "19.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "coarsetime", + "polkadot-primitives", + "tracing", + "tracing-gum-proc-macro", +] + +[[package]] +name = "tracing-gum-proc-macro" +version = "5.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "expander", + "proc-macro-crate 3.3.0", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "parking_lot 0.12.3", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "time", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "trie-db" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c0670ab45a6b7002c7df369fee950a27cf29ae0474343fd3a15aa15f691e7a6" +dependencies = [ + "hash-db", + "log", + "rustc-hex", + "smallvec", +] + +[[package]] +name = "trie-root" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4ed310ef5ab98f5fa467900ed906cb9232dd5376597e00fd4cba2a449d06c0b" +dependencies = [ + "hash-db", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "tt-call" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f195fd851901624eee5a58c4bb2b4f06399148fcd0ed336e6f1cb60a9881df" + +[[package]] +name = "tungstenite" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" +dependencies = [ + "bytes", + "data-encoding", + "http 1.3.1", + "httparse", + "log", + "rand 0.9.1", + "rustls", + "rustls-pki-types", + "sha1", + "thiserror 2.0.12", + "url", + "utf-8", +] + +[[package]] +name = "tuplex" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "676ac81d5454c4dcf37955d34fa8626ede3490f744b86ca14a7b90168d2a08aa" + +[[package]] +name = "twox-hash" +version = "1.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" +dependencies = [ + "cfg-if", + "digest 0.10.7", + "rand 0.8.5", + "static_assertions", +] + +[[package]] +name = "typed-builder" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06fbd5b8de54c5f7c91f6fe4cebb949be2125d7758e630bb58b1d831dbce600" +dependencies = [ + "typed-builder-macro", +] + +[[package]] +name = "typed-builder-macro" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9534daa9fd3ed0bd911d462a37f172228077e7abf18c18a5f67199d959205f8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "typenum" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" + +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + +[[package]] +name = "uint" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + +[[package]] +name = "uint" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "909988d098b2f738727b161a106cfc7cab00c539c2687a8836f8e565976fb53e" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + +[[package]] +name = "unicode-ident" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "unicode-width" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common", + "subtle 2.6.1", +] + +[[package]] +name = "unsigned-varint" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105" +dependencies = [ + "asynchronous-codec 0.6.2", + "bytes", + "futures-io", + "futures-util", +] + +[[package]] +name = "unsigned-varint" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb066959b24b5196ae73cb057f45598450d2c5f71460e98c49b738086eff9c06" +dependencies = [ + "bytes", + "tokio-util", +] + +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "uuid" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" +dependencies = [ + "getrandom 0.3.3", + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + +[[package]] +name = "w3f-bls" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6bfb937b3d12077654a9e43e32a4e9c20177dd9fea0f3aba673e7840bb54f32" +dependencies = [ + "ark-bls12-377", + "ark-bls12-381 0.4.0", + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-serialize-derive 0.4.2", + "arrayref", + "digest 0.10.7", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_core 0.6.4", + "sha2 0.10.9", + "sha3", + "zeroize", +] + +[[package]] +name = "w3f-pcs" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbe7a8d5c914b69392ab3b267f679a2e546fe29afaddce47981772ac71bd02e1" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-poly 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "merlin", +] + +[[package]] +name = "w3f-plonk-common" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aca389e494fe08c5c108b512e2328309036ee1c0bc7bdfdb743fef54d448c8c" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-poly 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "getrandom_or_panic", + "rand_core 0.6.4", + "w3f-pcs", +] + +[[package]] +name = "w3f-ring-proof" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a639379402ad51504575dbd258740383291ac8147d3b15859bdf1ea48c677de" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-poly 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "ark-transcript", + "w3f-pcs", + "w3f-plonk-common", +] + +[[package]] +name = "waker-fn" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + +[[package]] +name = "wasix" +version = "0.12.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1fbb4ef9bbca0c1170e0b00dd28abc9e3b68669821600cad1caaed606583c6d" +dependencies = [ + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn 2.0.101", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-instrument" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a47ecb37b9734d1085eaa5ae1a81e60801fd8c28d4cabdd8aedb982021918bc" +dependencies = [ + "parity-wasm", +] + +[[package]] +name = "wasm-opt" +version = "0.116.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fd87a4c135535ffed86123b6fb0f0a5a0bc89e50416c942c5f0662c645f679c" +dependencies = [ + "anyhow", + "libc", + "strum 0.24.1", + "strum_macros 0.24.3", + "tempfile", + "thiserror 1.0.69", + "wasm-opt-cxx-sys", + "wasm-opt-sys", +] + +[[package]] +name = "wasm-opt-cxx-sys" +version = "0.116.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c57b28207aa724318fcec6575fe74803c23f6f266fce10cbc9f3f116762f12e" +dependencies = [ + "anyhow", + "cxx", + "cxx-build", + "wasm-opt-sys", +] + +[[package]] +name = "wasm-opt-sys" +version = "0.116.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a1cce564dc768dacbdb718fc29df2dba80bd21cb47d8f77ae7e3d95ceb98cbe" +dependencies = [ + "anyhow", + "cc", + "cxx", + "cxx-build", +] + +[[package]] +name = "wasm-timer" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" +dependencies = [ + "futures", + "js-sys", + "parking_lot 0.11.2", + "pin-utils", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wasmi" +version = "0.31.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8281d1d660cdf54c76a3efa9ddd0c270cada1383a995db3ccb43d166456c7" +dependencies = [ + "smallvec", + "spin 0.9.8", + "wasmi_arena", + "wasmi_core 0.13.0", + "wasmparser-nostd", +] + +[[package]] +name = "wasmi" +version = "0.32.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50386c99b9c32bd2ed71a55b6dd4040af2580530fae8bdb9a6576571a80d0cca" +dependencies = [ + "arrayvec 0.7.6", + "multi-stash", + "num-derive", + "num-traits", + "smallvec", + "spin 0.9.8", + "wasmi_collections", + "wasmi_core 0.32.3", + "wasmparser-nostd", +] + +[[package]] +name = "wasmi_arena" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "104a7f73be44570cac297b3035d76b169d6599637631cf37a1703326a0727073" + +[[package]] +name = "wasmi_collections" +version = "0.32.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c128c039340ffd50d4195c3f8ce31aac357f06804cfc494c8b9508d4b30dca4" +dependencies = [ + "ahash", + "hashbrown 0.14.5", + "string-interner", +] + +[[package]] +name = "wasmi_core" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf1a7db34bff95b85c261002720c00c3a6168256dcb93041d3fa2054d19856a" +dependencies = [ + "downcast-rs", + "libm", + "num-traits", + "paste", +] + +[[package]] +name = "wasmi_core" +version = "0.32.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a23b3a7f6c8c3ceeec6b83531ee61f0013c56e51cbf2b14b0f213548b23a4b41" +dependencies = [ + "downcast-rs", + "libm", + "num-traits", + "paste", +] + +[[package]] +name = "wasmparser" +version = "0.102.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48134de3d7598219ab9eaf6b91b15d8e50d31da76b8519fe4ecfcec2cf35104b" +dependencies = [ + "indexmap 1.9.3", + "url", +] + +[[package]] +name = "wasmparser-nostd" +version = "0.100.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5a015fe95f3504a94bb1462c717aae75253e39b9dd6c3fb1062c934535c64aa" +dependencies = [ + "indexmap-nostd", +] + +[[package]] +name = "wasmtime" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f907fdead3153cb9bfb7a93bbd5b62629472dc06dee83605358c64c52ed3dda9" +dependencies = [ + "anyhow", + "bincode", + "cfg-if", + "indexmap 1.9.3", + "libc", + "log", + "object 0.30.4", + "once_cell", + "paste", + "psm", + "rayon", + "serde", + "target-lexicon", + "wasmparser", + "wasmtime-cache", + "wasmtime-cranelift", + "wasmtime-environ", + "wasmtime-jit", + "wasmtime-runtime", + "windows-sys 0.45.0", +] + +[[package]] +name = "wasmtime-asm-macros" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3b9daa7c14cd4fa3edbf69de994408d5f4b7b0959ac13fa69d465f6597f810d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "wasmtime-cache" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c86437fa68626fe896e5afc69234bb2b5894949083586535f200385adfd71213" +dependencies = [ + "anyhow", + "base64 0.21.7", + "bincode", + "directories-next", + "file-per-thread-logger", + "log", + "rustix 0.36.17", + "serde", + "sha2 0.10.9", + "toml 0.5.11", + "windows-sys 0.45.0", + "zstd 0.11.2+zstd.1.5.2", +] + +[[package]] +name = "wasmtime-cranelift" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1cefde0cce8cb700b1b21b6298a3837dba46521affd7b8c38a9ee2c869eee04" +dependencies = [ + "anyhow", + "cranelift-codegen", + "cranelift-entity", + "cranelift-frontend", + "cranelift-native", + "cranelift-wasm", + "gimli 0.27.3", + "log", + "object 0.30.4", + "target-lexicon", + "thiserror 1.0.69", + "wasmparser", + "wasmtime-cranelift-shared", + "wasmtime-environ", +] + +[[package]] +name = "wasmtime-cranelift-shared" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd041e382ef5aea1b9fc78442394f1a4f6d676ce457e7076ca4cb3f397882f8b" +dependencies = [ + "anyhow", + "cranelift-codegen", + "cranelift-native", + "gimli 0.27.3", + "object 0.30.4", + "target-lexicon", + "wasmtime-environ", +] + +[[package]] +name = "wasmtime-environ" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a990198cee4197423045235bf89d3359e69bd2ea031005f4c2d901125955c949" +dependencies = [ + "anyhow", + "cranelift-entity", + "gimli 0.27.3", + "indexmap 1.9.3", + "log", + "object 0.30.4", + "serde", + "target-lexicon", + "thiserror 1.0.69", + "wasmparser", + "wasmtime-types", +] + +[[package]] +name = "wasmtime-jit" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de48df552cfca1c9b750002d3e07b45772dd033b0b206d5c0968496abf31244" +dependencies = [ + "addr2line 0.19.0", + "anyhow", + "bincode", + "cfg-if", + "cpp_demangle", + "gimli 0.27.3", + "log", + "object 0.30.4", + "rustc-demangle", + "serde", + "target-lexicon", + "wasmtime-environ", + "wasmtime-jit-debug", + "wasmtime-jit-icache-coherence", + "wasmtime-runtime", + "windows-sys 0.45.0", +] + +[[package]] +name = "wasmtime-jit-debug" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e0554b84c15a27d76281d06838aed94e13a77d7bf604bbbaf548aa20eb93846" +dependencies = [ + "object 0.30.4", + "once_cell", + "rustix 0.36.17", +] + +[[package]] +name = "wasmtime-jit-icache-coherence" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aecae978b13f7f67efb23bd827373ace4578f2137ec110bbf6a4a7cde4121bbd" +dependencies = [ + "cfg-if", + "libc", + "windows-sys 0.45.0", +] + +[[package]] +name = "wasmtime-runtime" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "658cf6f325232b6760e202e5255d823da5e348fdea827eff0a2a22319000b441" +dependencies = [ + "anyhow", + "cc", + "cfg-if", + "indexmap 1.9.3", + "libc", + "log", + "mach", + "memfd", + "memoffset", + "paste", + "rand 0.8.5", + "rustix 0.36.17", + "wasmtime-asm-macros", + "wasmtime-environ", + "wasmtime-jit-debug", + "windows-sys 0.45.0", +] + +[[package]] +name = "wasmtime-types" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4f6fffd2a1011887d57f07654dd112791e872e3ff4a2e626aee8059ee17f06f" +dependencies = [ + "cranelift-entity", + "serde", + "thiserror 1.0.69", + "wasmparser", +] + +[[package]] +name = "web-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-root-certs" +version = "0.26.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75c7f0ef91146ebfb530314f5f1d24528d7f0767efbfd31dce919275413e393e" +dependencies = [ + "webpki-root-certs 1.0.0", +] + +[[package]] +name = "webpki-root-certs" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01a83f7e1a9f8712695c03eabe9ed3fbca0feff0152f33f12593e5a6303cb1a4" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + +[[package]] +name = "westend-runtime" +version = "22.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "binary-merkle-tree", + "bitvec", + "frame-benchmarking", + "frame-election-provider-support", + "frame-executive", + "frame-metadata-hash-extension", + "frame-support", + "frame-system", + "frame-system-benchmarking", + "frame-system-rpc-runtime-api", + "frame-try-runtime", + "hex-literal", + "log", + "pallet-asset-rate", + "pallet-authority-discovery", + "pallet-authorship", + "pallet-babe", + "pallet-bags-list", + "pallet-balances", + "pallet-beefy", + "pallet-beefy-mmr", + "pallet-conviction-voting", + "pallet-delegated-staking", + "pallet-election-provider-multi-phase", + "pallet-election-provider-support-benchmarking", + "pallet-elections-phragmen", + "pallet-fast-unstake", + "pallet-grandpa", + "pallet-identity", + "pallet-indices", + "pallet-membership", + "pallet-message-queue", + "pallet-meta-tx", + "pallet-migrations", + "pallet-mmr", + "pallet-multisig", + "pallet-nomination-pools", + "pallet-nomination-pools-benchmarking", + "pallet-nomination-pools-runtime-api", + "pallet-offences", + "pallet-offences-benchmarking", + "pallet-parameters", + "pallet-preimage", + "pallet-proxy", + "pallet-recovery", + "pallet-referenda", + "pallet-root-testing", + "pallet-scheduler", + "pallet-session", + "pallet-session-benchmarking", + "pallet-society", + "pallet-staking", + "pallet-staking-runtime-api", + "pallet-state-trie-migration", + "pallet-sudo", + "pallet-timestamp", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc-runtime-api", + "pallet-treasury 39.0.0", + "pallet-utility", + "pallet-verify-signature", + "pallet-vesting", + "pallet-whitelist", + "pallet-xcm", + "pallet-xcm-benchmarks", + "parity-scale-codec", + "polkadot-parachain-primitives", + "polkadot-primitives", + "polkadot-runtime-common", + "polkadot-runtime-parachains", + "scale-info", + "serde", + "serde_derive", + "serde_json", + "sp-api", + "sp-application-crypto", + "sp-arithmetic", + "sp-authority-discovery", + "sp-block-builder", + "sp-consensus-babe", + "sp-consensus-beefy", + "sp-consensus-grandpa", + "sp-core", + "sp-genesis-builder", + "sp-inherents", + "sp-io", + "sp-keyring", + "sp-mmr-primitives", + "sp-npos-elections", + "sp-offchain", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-storage", + "sp-transaction-pool", + "sp-version", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", + "substrate-wasm-builder", + "westend-runtime-constants", + "xcm-runtime-apis", +] + +[[package]] +name = "westend-runtime-constants" +version = "20.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-support", + "polkadot-primitives", + "polkadot-runtime-common", + "smallvec", + "sp-core", + "sp-runtime", + "sp-weights", + "staging-xcm", + "staging-xcm-builder", +] + +[[package]] +name = "wide" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41b5576b9a81633f3e8df296ce0063042a73507636cbe956c61133dd7034ab22" +dependencies = [ + "bytemuck", + "safe_arch", +] + +[[package]] +name = "widestring" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efc5cf48f83140dcaab716eeaea345f9e93d0018fb81162753a3f76c3397b538" +dependencies = [ + "windows-core 0.53.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows" +version = "0.61.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5ee8f3d025738cb02bad7868bbb5f8a6327501e870bf51f1b455b0a2454a419" +dependencies = [ + "windows-collections", + "windows-core 0.61.2", + "windows-future", + "windows-link", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" +dependencies = [ + "windows-core 0.61.2", +] + +[[package]] +name = "windows-core" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dcc5b895a6377f1ab9fa55acedab1fd5ac0db66ad1e6c7f47e28a22e446a5dd" +dependencies = [ + "windows-result 0.1.2", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result 0.3.4", + "windows-strings", +] + +[[package]] +name = "windows-future" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +dependencies = [ + "windows-core 0.61.2", + "windows-link", + "windows-threading", +] + +[[package]] +name = "windows-implement" +version = "0.60.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "windows-interface" +version = "0.59.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "windows-link" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" + +[[package]] +name = "windows-numerics" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +dependencies = [ + "windows-core 0.61.2", + "windows-link", +] + +[[package]] +name = "windows-result" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b" +dependencies = [ + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm 0.53.0", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", +] + +[[package]] +name = "windows-threading" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" + +[[package]] +name = "winnow" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06928c8748d81b05c9be96aad92e1b6ff01833332f281e8cfca3be4b35fc9ec" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "wit-bindgen-rt" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags 2.9.1", +] + +[[package]] +name = "writeable" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "x25519-dalek" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" +dependencies = [ + "curve25519-dalek", + "rand_core 0.6.4", + "serde", + "zeroize", +] + +[[package]] +name = "x509-parser" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcbc162f30700d6f3f82a24bf7cc62ffe7caea42c0b2cba8bf7f3ae50cf51f69" +dependencies = [ + "asn1-rs 0.6.2", + "data-encoding", + "der-parser 9.0.0", + "lazy_static", + "nom", + "oid-registry 0.7.1", + "rusticata-macros", + "thiserror 1.0.69", + "time", +] + +[[package]] +name = "x509-parser" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4569f339c0c402346d4a75a9e39cf8dad310e287eef1ff56d4c68e5067f53460" +dependencies = [ + "asn1-rs 0.7.1", + "data-encoding", + "der-parser 10.0.0", + "lazy_static", + "nom", + "oid-registry 0.8.1", + "rusticata-macros", + "thiserror 2.0.12", + "time", +] + +[[package]] +name = "xcm-procedural" +version = "11.0.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "Inflector", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "xcm-runtime-apis" +version = "0.7.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#3ce115d9a6810ed936426c5b351e8d523815def2" +dependencies = [ + "frame-support", + "parity-scale-codec", + "scale-info", + "sp-api", + "sp-weights", + "staging-xcm", + "staging-xcm-executor", +] + +[[package]] +name = "xml-rs" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a62ce76d9b56901b19a74f19431b0d8b3bc7ca4ad685a746dfd78ca8f4fc6bda" + +[[package]] +name = "xmltree" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7d8a75eaf6557bb84a65ace8609883db44a29951042ada9b393151532e41fcb" +dependencies = [ + "xml-rs", +] + +[[package]] +name = "yamux" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed0164ae619f2dc144909a9f082187ebb5893693d8c0196e8085283ccd4b776" +dependencies = [ + "futures", + "log", + "nohash-hasher", + "parking_lot 0.12.3", + "pin-project", + "rand 0.8.5", + "static_assertions", +] + +[[package]] +name = "yamux" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3da1acad1c2dc53f0dde419115a38bd8221d8c3e47ae9aeceaf453266d29307e" +dependencies = [ + "futures", + "log", + "nohash-hasher", + "parking_lot 0.12.3", + "pin-project", + "rand 0.9.1", + "static_assertions", + "web-time", +] + +[[package]] +name = "yansi" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" + +[[package]] +name = "yap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff4524214bc4629eba08d78ceb1d6507070cc0bcbbed23af74e19e6e924a24cf" + +[[package]] +name = "yasna" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" +dependencies = [ + "time", +] + +[[package]] +name = "yoke" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", + "synstructure 0.13.2", +] + +[[package]] +name = "zerocopy" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", + "synstructure 0.13.2", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "zstd" +version = "0.11.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +dependencies = [ + "zstd-safe 5.0.2+zstd.1.5.2", +] + +[[package]] +name = "zstd" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c" +dependencies = [ + "zstd-safe 6.0.6", +] + +[[package]] +name = "zstd-safe" +version = "5.0.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-safe" +version = "6.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.15+zstd.1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000000..9fd764c4e2 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,211 @@ +[workspace] +members = [ + "node", + "node/cli", + "node/service", + "pallets/*", + "runtime/*", + "common/helpers", +] +resolver = "2" + +[workspace.dependencies] +log = { version = "0.4.17", default-features = false } +env_logger = "0.11.7" +twox-hash = { version = "1.6.3", default-features = false, features = [ + "digest_0_10", +] } +thiserror = "2.0.12" +apache-avro = { version = "0.17.0", default-features = false } +rand = "0.9.0" +parking_lot = "0.12.1" +lazy_static = { version = "1.5", features = ["spin_no_std"] } + +# substrate wasm +parity-scale-codec = { version = "3.6.12", default-features = false } +frame-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +frame-executive = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +frame-support = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +frame-system = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +frame-system-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +frame-try-runtime = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +frame-metadata-hash-extension = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-api = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-core = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-io = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-session = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-weights = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-offchain = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +scale-info = { version = "2.10.0", default-features = false, features = [ + "derive", +] } +sp-keystore = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-keyring = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-version = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +substrate-wasm-builder = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +chrono = { version = "0.4.24" } +pretty_assertions = { version = "1.3.0" } +smallvec = "1.11.0" +numtoa = "0.2.4" +enumflags2 = "0.7.7" +docify = "0.2.8" +impl-trait-for-tuples = "0.2.2" +serde = { version = "1.0", default-features = false } +serde_json = { version = "1.0", default-features = false } +serial_test = { version = "2.0.0", default-features = false } +base64-url = { version = "3.0.0", default-features = false } +p256 = { version = "0.13.2", default-features = false, features = ["ecdsa"] } +libsecp256k1 = { version = "0.7", default-features = false } + +# substrate pallets +pallet-aura = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-authorship = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-balances = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-collective = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-democracy = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-multisig = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-preimage = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-scheduler = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-session = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-sudo = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-timestamp = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-transaction-payment = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-utility = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-proxy = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } + +# polkadot +polkadot-cli = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +polkadot-parachain-primitives = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +polkadot-service = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } + +# cumulus +cumulus-client-cli = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +cumulus-client-collator = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +cumulus-client-consensus-aura = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +cumulus-client-consensus-common = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +cumulus-client-consensus-proposer = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +cumulus-client-network = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +cumulus-client-service = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +cumulus-relay-chain-inprocess-interface = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +cumulus-relay-chain-interface = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +cumulus-relay-chain-minimal-node = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +cumulus-relay-chain-rpc-interface = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } + +cumulus-pallet-aura-ext = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +cumulus-pallet-parachain-system = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +cumulus-pallet-session-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +cumulus-pallet-weight-reclaim = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +cumulus-primitives-aura = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +cumulus-primitives-core = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +cumulus-client-parachain-inherent = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +cumulus-primitives-timestamp = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-collator-selection = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +parachain-info = { package = "staging-parachain-info", git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } + +# client +derive_more = "0.99.17" +futures = "0.3.25" +hex = { version = "0.4.3", default-features = false } +hex-literal = "0.4.1" +impl-serde = { version = "0.4.0", default-features = false } +jsonrpsee = { version = "0.24.3", default-features = false } +oorandom = "11.1.3" +phf = { version = "0.11", default-features = false, features = ["macros"] } +rayon = "1.5.3" +tokio = { version = "1.25.0", default-features = false } +unicode-normalization = { version = "0.1.22", default-features = false } +clap = { version = "4.2.5", features = ["derive"] } +static_assertions = { version = "1.1.0", default-features = false } + +sp-externalities = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false} +sp-runtime-interface = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false} +frame-benchmarking-cli = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +sc-basic-authorship = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +sc-chain-spec = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +sc-cli = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +sc-client-api = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +sc-client-db = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +sc-consensus = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +sc-consensus-manual-seal = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +sc-executor = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-keystore = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +sc-network = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +sc-network-common = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +sc-network-sync = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +sc-offchain = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +sc-rpc = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +sc-service = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +sc-sysinfo = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +sc-telemetry = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +sc-tracing = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +sc-transaction-pool = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +sc-transaction-pool-api = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +sp-block-builder = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-blockchain = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-consensus = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +sp-consensus-aura = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-genesis-builder = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-inherents = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-rpc = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-timestamp = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +sp-transaction-pool = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-wasm-interface = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +substrate-build-script-utils = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +substrate-test-utils = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } + +substrate-frame-rpc-system = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +substrate-prometheus-endpoint = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503" } +sp-debug-derive = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } + +# Lints: https://doc.rust-lang.org/rustc/lints/index.html +# Lint Levels: https://doc.rust-lang.org/rustc/lints/levels.html +# Clippy Lints: https://rust-lang.github.io/rust-clippy/master/index.html +[workspace.lints.rust] +nonstandard-style = "deny" + +[workspace.lints.clippy] +# We just deny everything so that we can then build up from there +correctness = { level = "deny", priority = -1 } +style = { level = "deny", priority = -1 } +complexity = { level = "deny", priority = -1 } +perf = { level = "deny", priority = -1 } +suspicious = { level = "deny", priority = -1 } +# These should stay +wildcard_dependencies = "deny" +from_over_into = "allow" +type_complexity = "allow" +identity_op = "allow" +derivable_impls = "allow" +assign_op_pattern = "allow" +too_many_arguments = "allow" +new_without_default = "allow" +get_first = "allow" +len_zero = "allow" +large_enum_variant = "allow" +empty_line_after_outer_attr = "allow" +enum_variant_names = "allow" + +# debug is profile.dev +# Defaults: https://doc.rust-lang.org/cargo/reference/profiles.html#default-profiles + +[profile.release] +panic = "unwind" +lto = true +codegen-units = 1 +strip = true + +[profile.production] +inherits = "release" + +# Faster build for bench-dev +[profile.bench-dev] +inherits = "release" +strip = false +codegen-units = 16 +lto = false diff --git a/HEADER-APACHE2 b/HEADER-APACHE2 new file mode 100644 index 0000000000..e9763b7403 --- /dev/null +++ b/HEADER-APACHE2 @@ -0,0 +1,16 @@ +// This file is part of Frequency. + +// Copyright (C) Frequency Network Foundation. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. diff --git a/LICENSE b/LICENSE index 261eeb9e9f..4181f602b1 100644 --- a/LICENSE +++ b/LICENSE @@ -186,7 +186,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright [yyyy] [name of copyright owner] + Copyright 2024 Frequency Network Foundation Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000..2dda41c293 --- /dev/null +++ b/Makefile @@ -0,0 +1,394 @@ +UNAME := $(shell uname) +NIGHTLY = +nightly-2025-04-03 + +.PHONY: all +all: build + +.PHONY: clean +clean: + cargo clean + +.PHONY: start start-frequency start-frequency-docker start-manual start-interval start-interval-short start-with-offchain start-frequency-with-offchain start-manual-with-offchain start-interval-with-offchain +start: + ./scripts/init.sh start-frequency-instant + +start-paseo-relay: + ./scripts/init.sh start-paseo-relay-chain + + +start-paseo-collator-alice: + ./scripts/init.sh start-paseo-collator-alice + +start-paseo-collator-bob: + ./scripts/init.sh start-paseo-collator-bob + +start-frequency: + ./scripts/init.sh start-frequency + +start-frequency-docker: + ./scripts/init.sh start-frequency-docker + +run-frequency-docker: start-frequency-docker register onboard-docker + +start-relay-chain-docker: + ./scripts/init.sh start-paseo-relay-chain + +stop-relay-chain-docker: + ./scripts/init.sh stop-paseo-relay-chain + +start-manual: + ./scripts/init.sh start-frequency-manual + +start-interval: + ./scripts/init.sh start-frequency-interval + +start-interval-short: + ./scripts/init.sh start-frequency-interval 0 1 + +start-with-offchain: + ./scripts/init.sh start-frequency-instant with-offchain + +start-frequency-with-offchain: + ./scripts/init.sh start-frequency with-offchain + +start-manual-with-offchain: + ./scripts/init.sh start-frequency-manual with-offchain + +start-interval-with-offchain: + ./scripts/init.sh start-frequency-interval with-offchain + +.PHONY: stop stop-relay stop-frequency-docker +stop-relay: + ./scripts/init.sh stop-relay-chain + +stop-paseo-relay: + ./scripts/init.sh stop-paseo-relay-chain + +stop-paseo-relay-prune: + env PRUNE="--volumes" ./scripts/init.sh stop-paseo-relay-chain + +stop-frequency-docker: + ./scripts/init.sh stop-frequency-docker + +stop-frequency-docker-prune: + env PRUNE="--volumes" ./scripts/init.sh stop-frequency-docker + +.PHONY: local-block +local-block: + curl http://localhost:9944 -H "Content-Type:application/json;charset=utf-8" -d '{ \ + "jsonrpc":"2.0", \ + "id":1, \ + "method":"engine_createBlock", \ + "params": [true, true] \ + }' | jq + +.PHONY: register +register: + ./scripts/init.sh register-frequency-paseo-local + +.PHONY: onboard +onboard: + ./scripts/init.sh onboard-frequency-paseo-local + +.PHONY: onboard-res-local +onboard-res-local: + ./scripts/init.sh onboard-res-local + +.PHONY: onboard-docker +onboard-docker: + env DOCKER_ONBOARD=true PARA_DOCKER_IMAGE=frequencychain/collator-node-local:latest ./scripts/init.sh onboard-frequency-paseo-local + +.PHONY: offboard +offboard: + ./scripts/init.sh offboard-frequency-paseo-local + +.PHONY: specs-frequency-paseo-local-debug specs-frequency-paseo-local-release + +specs-frequency-paseo-local-debug: + ./scripts/generate_specs.sh 2000 frequency-paseo-local debug + +specs-frequency-paseo-local-release: + ./scripts/generate_specs.sh 2000 frequency-paseo-local release + +.PHONY: format +format: + cargo $(NIGHTLY) fmt + +.PHONY: lint lint-audit lint-fix lint-clippy +lint: + cargo $(NIGHTLY) fmt --check + SKIP_WASM_BUILD=1 cargo clippy --features runtime-benchmarks,frequency-lint-check -- -Dwarnings + RUSTC_BOOTSTRAP=1 RUSTDOCFLAGS="--enable-index-page --check -Zunstable-options" cargo doc --no-deps --features frequency + +lint-clippy: + SKIP_WASM_BUILD=1 cargo clippy --features runtime-benchmarks,frequency-lint-check -- -Dwarnings + +lint-audit: + cargo deny check -c deny.toml + +lint-fix: + cargo $(NIGHTLY) fmt + SKIP_WASM_BUILD=1 cargo clippy --fix --features runtime-benchmarks,frequency-lint-check + +.PHONY: format-lint +format-lint: format lint + +.PHONY: ci-local +ci-local: check lint lint-audit test js e2e-tests + +.PHONY: upgrade-local upgrade-no-relay +upgrade-local: + ./scripts/init.sh upgrade-frequency-paseo-local + +upgrade-no-relay: + ./scripts/init.sh upgrade-frequency-no-relay + + +# +# We use hard-coded variables (rather than a pattern) so that smart shells with +# CLI auto-complete for Makefiles will pick up the targets and present as options for auto-complete. +# +# Note: to run benchmarks for > 1 but < all pallets, it is more efficient to call the `run_benchmarks.sh` +# script directly, as it is able to run the build stage just once for all benchmarks +# +BENCH_TARGETS=\ +benchmarks-messages \ +benchmarks-msa \ +benchmarks-frequency-tx-payment \ +benchmarks-overhead \ +benchmarks-schemas \ +benchmarks-stateful-storage \ +benchmarks-handles \ +benchmarks-time-release \ +benchmarks-passkey \ +benchmarks-cumulus_pallet_weight_reclaim \ +benchmarks-frame_system_extensions \ +benchmarks-pallet_balances \ +benchmarks-pallet_collator_selection \ +benchmarks-pallet_democracy \ +benchmarks-pallet_multisig \ +benchmarks-pallet_preimage \ +benchmarks-pallet_scheduler \ +benchmarks-pallet_session \ +benchmarks-pallet_timestamp \ +benchmarks-pallet_treasury \ +benchmarks-pallet_utility \ +benchmarks-pallet_proxy \ +benchmarks-pallet_transaction_payment + +BENCH_LOCAL_TARGETS=\ +benchmarks-messages-local \ +benchmarks-msa-local \ +benchmarks-overhead-local \ +benchmarks-schemas-local \ +benchmarks-frequency-tx-payment-local \ +benchmarks-stateful-storage-local \ +benchmarks-handles-local \ +benchmarks-passkey-local \ +benchmarks-time-release-local \ +benchmarks-cumulus_pallet_weight_reclaim-local \ +benchmarks-frame_system_extensions-local \ +benchmarks-pallet_balances-local \ +benchmarks-pallet_collator_selection-local \ +benchmarks-pallet_collective-local \ +benchmarks-pallet_democracy-local \ +benchmarks-pallet_multisig-local \ +benchmarks-pallet_preimage-local \ +benchmarks-pallet_scheduler-local \ +benchmarks-pallet_session-local \ +benchmarks-pallet_timestamp-local \ +benchmarks-pallet_treasury-local \ +benchmarks-pallet_utility-local \ +benchmarks-pallet_proxy-local \ +benchmarks-pallet_transaction_payment-local + +.PHONY: benchmarks +benchmarks: + ./scripts/run_benchmarks.sh + +# +# Target to run benchmarks for local development. Uses the "bench-dev" profile, +# since "release" is unnecessary in local development, and by using "bench-dev" +# (which is just a clone of "release"), we don't overwrite our "release" target used +# for development testing. +.PHONY: benchmarks-local +benchmarks-local: + ./scripts/run_benchmarks.sh -t bench-dev + +.PHONY: $(BENCH_TARGETS) +$(BENCH_TARGETS): + ./scripts/run_benchmarks.sh $(@:benchmarks-%=%) + +.PHONY: $(BENCH_LOCAL_TARGETS) +$(BENCH_LOCAL_TARGETS): + ./scripts/run_benchmarks.sh -t bench-dev $(@:benchmarks-%-local=%) + +# +# benchmarks-multi-* targets are for ease of use in running benchmarks for multiple +# (but not necessarily all) pallets with a single invocation. +# +.PHONY: benchmarks-multi +benchmarks-multi: + ./scripts/run_benchmarks.sh $(PALLETS) + +.PHONY: benchmarks-multi-local +benchmarks-multi-local: + ./scripts/run_benchmarks.sh -t bench-dev $(PALLETS) + +.PHONY: docs +docs: + RUSTC_BOOTSTRAP=1 RUSTDOCFLAGS="--enable-index-page -Zunstable-options" cargo doc --no-deps --workspace --features frequency + +# Cleans unused docker resources and artifacts +.PHONY: docs +docker-prune: + ./scripts/prune_all.sh + +.PHONY: check check-no-relay check-local check-testnet check-mainnet +check: + SKIP_WASM_BUILD= cargo check --features runtime-benchmarks,frequency-lint-check + +check-no-relay: + SKIP_WASM_BUILD= cargo check --features frequency-no-relay + +check-local: + SKIP_WASM_BUILD= cargo check --features frequency-local + +check-testnet: + SKIP_WASM_BUILD= cargo check --features frequency-testnet + +check-mainnet: + SKIP_WASM_BUILD= cargo check --features frequency + +.PHONY: js +js: + ./scripts/generate_js_definitions.sh + +.PHONY: build build-benchmarks build-no-relay build-local build-testnet build-mainnet build-testnet-release build-mainnet-release +build: + cargo build --features frequency-no-relay + +build-benchmarks: + cargo build --release --features runtime-benchmarks,frequency-lint-check --workspace + +build-no-relay: + cargo build --features frequency-no-relay + +build-local: + cargo build --features frequency-local + +build-testnet: + cargo build --features frequency-testnet + +build-mainnet: + cargo build --features frequency + +build-testnet-release: + cargo build --locked --features frequency-testnet --release + +build-mainnet-release: + cargo build --locked --features frequency --release + +.PHONY: test e2e-tests e2e-tests-serial e2e-tests-only e2e-tests-load e2e-tests-load-only e2e-tests-testnet-paseo e2e-tests-paseo-local +test: + cargo test --workspace --features runtime-benchmarks,frequency-lint-check + +e2e-tests: + ./scripts/run_e2e_tests.sh + +e2e-tests-serial: + ./scripts/run_e2e_tests.sh -c serial + +e2e-tests-only: + ./scripts/run_e2e_tests.sh -s + +e2e-tests-load: + ./scripts/run_e2e_tests.sh load + +e2e-tests-load-only: + ./scripts/run_e2e_tests.sh -s load + +e2e-tests-testnet-paseo: + ./scripts/run_e2e_tests.sh -c paseo_testnet + +e2e-tests-paseo-local: + ./scripts/run_e2e_tests.sh -c paseo_local + +check-try-runtime-installed: + @which try-runtime > /dev/null || (echo "try-runtime is not installed. Please install it" && exit 1) + +.PHONY: try-runtime-create-snapshot-mainnet try-runtime-upgrade-mainnet try-runtime-use-snapshot-mainnet try-runtime-create-snapshot-paseo-testnet try-runtime-use-snapshot-paseo-testnet try-runtime-upgrade-paseo-testnet + +try-runtime-create-snapshot-paseo-testnet: check-try-runtime-installed + try-runtime create-snapshot --uri wss://0.rpc.testnet.amplica.io:443 testnet-paseo-all-pallets.state + +# mainnet snapshot takes as many as 24 hours to complete +try-runtime-create-snapshot-mainnet: check-try-runtime-installed + try-runtime create-snapshot --uri wss://1.rpc.frequency.xyz:443 mainnet-all-pallets.state + +try-runtime-upgrade-paseo-testnet: check-try-runtime-installed + cargo build --release --features frequency-testnet,try-runtime && \ + try-runtime --runtime ./target/release/wbuild/frequency-runtime/frequency_runtime.wasm on-runtime-upgrade live --uri wss://0.rpc.testnet.amplica.io:443 + +try-runtime-upgrade-mainnet: check-try-runtime-installed + cargo build --release --features frequency,try-runtime && \ + try-runtime --runtime ./target/release/wbuild/frequency-runtime/frequency_runtime.wasm on-runtime-upgrade live --uri wss://1.rpc.frequency.xyz:443 + +try-runtime-use-snapshot-paseo-testnet: check-try-runtime-installed + cargo build --release --features frequency-testnet,try-runtime && \ + try-runtime --runtime ./target/release/wbuild/frequency-runtime/frequency_runtime.wasm on-runtime-upgrade snap --path testnet-paseo-all-pallets.state + +try-runtime-use-snapshot-mainnet: check-try-runtime-installed + cargo build --release --features frequency,try-runtime && \ + try-runtime --runtime ./target/release/wbuild/frequency-runtime/frequency_runtime.wasm on-runtime-upgrade snap --path mainnet-all-pallets.state + +try-runtime-check-migrations-paseo-testnet: check-try-runtime-installed + cargo build --release --features frequency-testnet,try-runtime -q --locked && \ + try-runtime --runtime ./target/release/wbuild/frequency-runtime/frequency_runtime.wasm on-runtime-upgrade --checks="pre-and-post" --disable-spec-version-check --no-weight-warnings live --uri wss://0.rpc.testnet.amplica.io:443 +# Pull the Polkadot version from the polkadot-cli package in the Cargo.lock file. +# This will break if the lock file format changes +POLKADOT_VERSION=$(shell grep "^polkadot-cli" Cargo.toml | grep -o 'branch[[:space:]]*=[[:space:]]*"\(.*\)"' | sed 's/branch *= *"\(.*\)"/\1/' | head -n 1) + +.PHONY: version +version: +ifndef v + @echo "Please set the version with v=#.#.#[-#]" + @exit 1 +endif +ifneq (,$(findstring v, $(v))) + @echo "Please don't prefix with a 'v'. Use: v=#.#.#[-#]" + @exit 1 +endif +ifeq (,$(POLKADOT_VERSION)) + @echo "Error: Having trouble finding the Polkadot version. Sorry about that.\nCheck my POLKADOT_VERSION variable command." + @exit 1 +endif + @echo "Setting the crate versions to "$(v)+polkadot$(POLKADOT_VERSION) +ifeq ($(UNAME), Linux) + $(eval $@_SED := -i -e) +endif +ifeq ($(UNAME), Darwin) + $(eval $@_SED := -i '') +endif + find . -type f -name "Cargo.toml" -print0 | xargs -0 sed $($@_SED) 's/^version = \"0\.0\.0\"/version = \"$(v)+polkadot$(POLKADOT_VERSION)\"/g'; + @echo "Doing cargo check for just examples seems to be the easiest way to update version in Cargo.lock" + cargo check --examples --quiet + @echo "All done. Don't forget to double check that the automated replacement worked." + +.PHONY: version-polkadot +version-polkadot: +ifeq (,$(POLKADOT_VERSION)) + @echo "Error: Having trouble finding the Polkadot version. Sorry about that.\nCheck my POLKADOT_VERSION variable command." + @exit 1 +endif + @echo $(POLKADOT_VERSION) + +.PHONY: version-reset +version-reset: + find ./ -type f -name 'Cargo.toml' -exec sed -i '' 's/^version = \".*+polkadot.*\"/version = \"0.0.0\"/g' {} \; + +.PHONY: genesis-schemas +genesis-schemas: + cd tools/genesis-data && \ + npm i && \ + npm run --silent schemas > ../../resources/genesis-schemas.json diff --git a/README.md b/README.md index b9ee0f9d93..6932af6fd4 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,392 @@ -# mrc -MRC Polkadot Parachain + + + +[![Release][release-shield]][release-url] +[![Docker][docker-shield]][docker-url] +[![Issues][issues-shield]][issues-url] +[![Codecov][codecov-shield]][codecov-url] + +Frequency is a [Polkadot](https://www.parity.io/technologies/polkadot) parachain for data distribution protocols such as [DSNP](https://www.dsnp.org). + +# Table of Contents + +- [Table of Contents](#table-of-contents) +- [Prerequisites](#prerequisites) + - [Hardware](#hardware) +- [Build](#build) + - [Local Desktop](#local-desktop) + - [asdf Support](#asdf-support) + - [Remote Instance such as AWS EC2](#remote-instance-such-as-aws-ec2) + - [Ubuntu](#ubuntu) +- [Run](#run) + - [1. Collator Node without a Relay Chain](#1-collator-node-without-a-relay-chain) + - [Manual Sealing](#manual-sealing) + - [Instant Sealing](#instant-sealing) + - [Interval Sealing](#interval-sealing) + - [2. Collator Node with Local Relay Chain](#2-collator-node-with-local-relay-chain) + - [Mixed Terminal/Docker](#mixed-terminaldocker) + - [Stop and Clean Environment](#stop-and-clean-environment) + - [All in Docker Container](#all-in-docker-container) + - [Run Tests](#run-tests) + - [E2E Tests](#e2e-tests) + - [Run Benchmarks](#run-benchmarks) + - [Run with offchain features](#run-with-offchain-features) +- [Format, Lint and Audit Source Code](#format-lint-and-audit-source-code) +- [Runtime](#runtime) + - [Verify Runtime](#verify-runtime) + - [Local Runtime Upgrade](#local-runtime-upgrade) + - [Local Relay Chain](#local-relay-chain) + - [Standalone Chain (No Relay)](#standalone-chain-no-relay) +- [Contributing](#contributing) +- [Security Issue Reporting](#security-issue-reporting) +- [Additional Resources](#additional-resources) +- [Miscellaneous](#miscellaneous) + +# Prerequisites + +1. [Docker Engine](https://docs.docker.com/engine/install/)\* +1. [Docker Compose](https://docs.docker.com/compose/install/) + +--- + +- For Mac users, [Docker Desktop](https://docs.docker.com/desktop/mac/install/) engine also installs docker compose environment, so no need to install it separately. + +## Hardware + +Benchmarks are run on an AWS `m6id.2xlarge` and recommend collators have generally the same [reference hardware specified by Parity for Validators](https://docs.polkadot.com/infrastructure/running-a-validator/requirements/#minimum-hardware-requirements). + +Non-Collator nodes may have less power, but low memory configurations may lead to out of memory errors. + +# Build + +## Local Desktop + +1. Install Rust using the [official instructions](https://www.rust-lang.org/tools/install). +2. Check out this repository +3. `rust-toolchain.toml` specifies the standard toolchain to use. If you have `rustup` installed, it will automatically install the correct toolchain when you run any cargo command. +4. Running `make check` will run cargo checks for all Frequency features. This is the recommended way to check your code before committing. Alternatively, you can run following for specific features: + + ```sh + make check-no-relay + make check-local + make check-testnet + make check-mainnet + ``` + +5. Build [Wasm](https://webassembly.org) and native code. + + _Note, if you get errors complaining about missing + dependencies (protobuf, cmake, yarn, node, jq, etc.) install them with your favorite package + manager(e.g. [Homebrew](https://brew.sh/) on macOS) and re-run the command again._ + + ```sh + rustup update + cargo clean + make build + ``` + + Above will build Frequency with all features. Alternatively you may run following command to build with specific features: + + ```sh + make build-no-relay + make build-local + make build-testnet + make build-mainnet + ``` + + To build local, paseo (testnet) or mainnet features respectively. + +At this point you should have `./target/debug` directory generated locally with compiled project files. (or `./target/release` for `make build-*-release`) + +### asdf Support + +Frequency optionally supports [asdf](https://asdf-vm.com) for managing dependencies of the following tools: +Install the required plugins for [asdf](https://asdf-vm.com): +Please note that if you use rustup, asdf may conflict and cause issues. It is recommended to use one or the other, but not both for rust. + +```sh +asdf plugin-add rust +asdf plugin-add make +asdf plugin-add cmake https://github.com/srivathsanmurali/asdf-cmake.git +``` + +Install the dependency versions declared in `.tool-versions` + +```sh +asdf install +``` + +NOTE: asdf does not support clang and it needs to be installed separately. + +## Remote Instance such as AWS EC2 + +For remote instances running Linux, if you want to check out and build such as on an [AWS EC2](https://aws.amazon.com/ec2) instance, the process is slightly different to what is in the [Substrate documentation](https://docs.substrate.io/main-docs/install/linux/). + +### Ubuntu + +1. Upgrade the instance and install missing packages with `apt`: + +```bash +sudo apt upgrade +sudo apt upgrade git +sudo apt install —-assume-yes build-essential +sudo apt install --assume-yes clang curl libssl-dev cmake +``` + +2. Follow [official instructions to install Rust](https://www.rust-lang.org/tools/install), but select `3. customize the installation`, then reply **n** to `Modify PATH variable? (Y/n)` +3. Follow steps 6-10 at [Substrate: Linux development](https://docs.substrate.io/main-docs/install/linux/) +4. Proceed with checking out and building Frequency as above. + +# Run + +There are 2 options to run the chain locally: + +_Note, Running Frequency via following options does not require binary to be built or chain specs to be generated separately, and is programmed within the scripts for simplicity._ + +1. Collator Node without a relay chain (in manual/instant/interval sealing mode) +2. Collator Node with a local relay chain + +## 1. Collator Node without a Relay Chain + +![](docs/images/local-dev-env-option-1.jpg) + +This option runs just one collator node without the need for a relay chain. + +This preloads into genesis all the schemas from mainnet. +Use `make genesis-schemas` if the genesis is out of date. + +### Manual Sealing + +a. Blocks can be triggered by calling the `engine_createBlock` RPC + +```sh +curl http://localhost:9944 -H "Content-Type:application/json;charset=utf-8" -d '{ \ + "jsonrpc":"2.0", \ + "id":1, \ + "method":"engine_createBlock", \ + "params": [true, true] \ + }' +``` + +b. Use the "start-manual" make target to call the RPC +Great for testing multiple items in the same block or other block formation tests. + +```sh +make start-manual +``` + +### Instant Sealing + +Same as Manual Sealing, but will also automatically trigger the formation of a block whenever a transaction is added to the validated transaction pool. +Great for most testing. + +```sh +make start +``` + +Also available as a Docker image: [`frequencychain/standalone-node`](https://hub.docker.com/r/frequencychain/standalone-node) + +```sh +docker run --rm -p 9944:9944 frequencychain/standalone-node +``` + +To stop running chain hit [Ctrl+C] in terminal where the chain was started. + +| **Node** | **Ports** | **Explorer URL** | +| ----------------------- | :---------------: | ----------------------------------------------------------------------------------------- | +| Frequency Collator Node | ws and rpc:`9944` | [127.0.0.1:9944](https://polkadot.js.org/apps/?rpc=ws%3A%2F%2F127.0.0.1%3A9944#/explorer) | + +### Interval Sealing + +This sealing mode will automatically trigger the formation of a block at a specified interval (default is every 12 seconds.) + +```sh +make start-interval +``` + +## 2. Collator Node with Local Relay Chain + +![](docs/images/local-dev-env-option-2.jpg) + +### Mixed Terminal/Docker + +This option runs two collator nodes as local host processes and two relay chain validator nodes, each in its own docker container. + +1. Start relay chain validator nodes. + + ```sh + make start-paseo-relay + ``` + + ALERT: You likely need to manually set the scheduling lookahead. `sudo(configuration.setSchedulingLookahead(3))` and wait for it to apply. + +1. Register a new parachain slot (parachain id) for Frequency. _Note, if parachain was + previously registered on a running relay chain and no new registration is required, + then you can skip the above step._ + + ```sh + make register + ``` + +1. Start Frequency as parachain with a single collator. + + ```sh + make start-paseo-collator-alice + ``` + ```sh + make start-paseo-collator-bob + ``` + +1. Generate genesis/wasm and onboard Frequency to the relay chain. + ```sh + make onboard + ``` + +#### Stop and Clean Environment + +1. Off-board Frequency from relay chain: `make offboard` +2. To stop Frequency running in the terminal: `[Ctrl+C] ` +3. Stop the relay chain. `make stop-relay` +4. Run to remove unused volumes. `make docker-prune` +5. Clean up temporary directory to avoid any conflicts with next onboarding: + `rm -fr /tmp/frequency` + +### All in Docker Container + +This option runs one collator node and two relay chain validator nodes, each in its own docker container. + +Start: + +```sh +make run-frequency-docker +``` + +Stop: + +```sh +make stop-frequency-docker +``` +or: +```sh +make stop-frequency-docker-prune # to remove associated Docked volumes +``` + +| **Node** | **Ports** | **Explorer URL** | +| -------------------- | ------------------------------- | ----------------------------------------------------------------------------------------- | +| Frequency Relay Node | ws and rpc: `9944`, p2p:`30333` | [127.0.0.1:9944](https://polkadot.js.org/apps/?rpc=ws%3A%2F%2F127.0.0.1%3A9944#/explorer) | +| Alice Relay Node | ws and rpc: `9946`, p2p:`30335` | [127.0.0.1:9946](https://polkadot.js.org/apps/?rpc=ws%3A%2F%2F127.0.0.1%3A9946#/explorer) | +| Bob Relay Node | ws and rpc: `9947`, p2p:`30336` | [127.0.0.1:9947](https://polkadot.js.org/apps/?rpc=ws%3A%2F%2F127.0.0.1%3A9947#/explorer) | + +## Run Tests + +```sh +# Run all the tests +make test +# Activate selected features +cargo test --features frequency +``` + +### E2E Tests + +To run the end-to-end tests, run `make e2e-tests`. + +## Run Benchmarks + +```sh +make benchmarks +``` + +## Run with offchain features + +```sh +make start-frequency-with-offchain +``` + +# Format, Lint and Audit Source Code + +- Format code with `make format` according to style guidelines and configurations in `rustfmt.toml`. +- Lint code with `make lint` to catch common mistakes and improve your [Rust](https://github.com/rust-lang/rust) code. + + \_Note, if you get errors complaining about the wasm build, then you may need to install + the wasm target for rust. You can do this with `rustup target add wasm32v1-none` + +- Alternatively, run `make format-lint` to run both at the same time. +- Run `make lint-audit` to audit `Cargo.lock` files with `cargo-deny` for crates with security vulnerabilities reported to the [RustSec Advisory Database](https://rustsec.org). [See cargo-deny installation instructions](https://github.com/EmbarkStudios/cargo-deny) + +# Runtime + +## Verify Runtime + +1. Check out the commit at which the runtime was built. +2. Use [srtool](https://github.com/paritytech/srtool) and [srtool-cli](https://github.com/chevdor/srtool-cli) to verify the runtime: + ```sh + SRTOOL_TAG="1.84.1" srtool build \ + --build-opts="'--features on-chain-release-build,no-metadata-docs,frequency'" \ + --profile=release \ + --package=frequency-runtime \ + --root + ``` + +## Local Runtime Upgrade + +To upgrade the runtime, run the following command: + +### Local Relay Chain + +```sh +make upgrade-local +``` + +### Standalone Chain (No Relay) + +```sh +make upgrade-no-relay +``` + +# Contributing + +Interested in contributing? +Wonderful! +Please check out [the information here](./CONTRIBUTING.md). + +# Security Issue Reporting + +Do you know of an on-chain vulnerability (or possible one) that can lead to economic loss, privacy loss, or instability of the network? +Please report it by following the steps mentioned in [here](./SECURITY.md). + +# Additional Resources + +- [Cumulus Project](https://github.com/paritytech/cumulus) +- [Cumulus Tutorials](https://docs.substrate.io/tutorials/) +- [Prep Substrate environment for development](https://docs.substrate.io/install/) + +# Miscellaneous + +```sh +# Clean up local docker resources +make docker-prune + +# View all listening ports +lsof -i -P | grep -i "listen" + +# View ports Frequency node is listening on +lsof -i -P | grep -i "listen" | grep frequency +``` + + + + +[issues-shield]: https://img.shields.io/github/issues/frequency-chain/frequency.svg?style=for-the-badge +[issues-url]: https://github.com/frequency-chain/frequency/issues +[codecov-shield]: https://img.shields.io/codecov/c/github/frequency-chain/frequency?style=for-the-badge +[codecov-url]: https://app.codecov.io/gh/frequency-chain/frequency +[release-shield]: https://img.shields.io/github/v/release/frequency-chain/frequency?style=for-the-badge +[release-url]: https://github.com/frequency-chain/frequency/releases +[docker-shield]: https://img.shields.io/docker/v/frequencychain/parachain-node-mainnet/latest?color=1c90ed&label=Docker&style=for-the-badge +[docker-url]: https://hub.docker.com/u/frequencychain diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000000..8603b6164c --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,91 @@ +# Security Policy + +We appreciate the efforts of security researchers and the broader community in helping us maintain a +secure environment for our users. If you discover a security vulnerability, we kindly request that +you report it to us privately before disclosing it publicly. This allows us to address the issue +promptly and protect our users. + +## Reporting Security Issues + +**Please do not report security vulnerabilities through public GitHub issues.** + +Instead, please report the vulnerability via [https://github.com/frequency-chain/frequency/security/advisories/new](https://github.com/frequency-chain/frequency/security/advisories/new). + +Alternatively, you can send email to [security@frequency.xyz](mailto:security@frequency.xyz). If +possible, encrypt your message with our PGP key; you can download it from [OpenGPG key server](https://keys.openpgp.org/vks/v1/by-fingerprint/0E50AE7CFD8195999CF45370B766E94411B9B734) +or copy from below. + +You should receive a response within 48 hours. If for some reason you do not, please follow up via +email to ensure we received your original message. + +## Report details + +Please include the requested information listed below (as much as you can provide) to help us better +understand the nature and scope of the possible issue: + +- Your name and contact information +- Description of the vulnerability +- Attack scenario (if any) +- Step-by-step instructions to reproduce the issue +- Any other details + +**Reminder: This process is only for security related vulnerabilities and if this is a generic issue +(no security implications) with Frequency or Polkadot-sdk or any other dependencies please open a +regular GitHub issue.** + +## Plaintext PGP Key + +``` +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQINBGVt5AsBEADN7Hu5MDzC+J2omxN2cJXiQlgtxyMet6eUcUvtvtmF8viVYLaG +Bf3pGFvsSX3oQEGVMj0Xwby9PdyA7y4eIgIZfAG6qBELpeOvum7LL2N6qbU0GPsY +8fl+aejxAPiWbg8jJRDVmIPi18FOV3xhU6D8VWSToYLEt/Gqw7hAAiW3pRNJIJX5 +0VpR7N6ZNZwY+yj/Dwx7g9YaWyVDiRYxhQ5zRK7OhdaH6BV6YWeY0QmTmaeJBFrb +WGBU7ub+/LmOGw7JG3Aqi3seyD39SpE3sae2rFpXrX4bNfkKi4nTTNm3P4+2Zr42 +uMKFlmCLiFna01/DD+yT6FOF4ovCyCQF+Vzezz593Phj8Cl1vNOFWLc8b77tNZjk +UnXGwdCXKC/FLWng0ASy4zHcJiPrC/i+8Yhr+o+jJIraG+yDaO1T1VWFOlFu7JBl +QZb+rSnnonfxzWSx7I6ug3nO4y0DKRgOt8tzKvMJPVkhLEIZibPzYMBM7hpycqfo +Cb4EvWUkEuK7VhSqZ56MsQ+ziF4VYDZn4t+7uB8WuJ9xo3Xd1R2Cl2gUTP7aEBCj +N6KGiddXbNFDN4UsVveKHrRwPHpjEiOy+e32CafoyG7+dJWX3klg/Os1hCkjw3hj +iOKBUUGdtELiMPqt84qmaGrQRaIy0p/2JEn7PSjJ2HAwzCL6CMwiMy1eAwARAQAB +tDVGcmVxdWVuY3kgU2VjdXJpdHkgUmVwb3J0aW5nIDxzZWN1cml0eUBmcmVxdWVu +Y3kueHl6PokCVAQTAQgAPhYhBA5Qrnz9gZWZnPRTcLdm6UQRubc0BQJlbeQLAhsD +BQkH0pYMBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJELdm6UQRubc0nmoP/2Dt +eDthwWTXVwoExxOJZ/035aq+wgIQ9Z04S2GyOgV8eNYIxSRiDfvhoyezJmtVsJNW +f4dyHYdhpC2yMlcT3jWFXJEQc4y72enhiyUzRHHrKuNLNioquV+3l614v5zhuROS +Yx/lUMHCgyg5viUe2EUyyhss/OkxLUrLT8S9Ggn4Aaf6eGUixag4DvLf7XWP8JhF +4trX5BSiCYwVhmKPu8HnxNa2TXBdprm/SnRTDmyYXsF/1MVbmaIaNzvTi0Tt+5iQ +tIjfxoCV5mX6eNPogQdkvpdBk2SSAO0CTLMP/qFVI2nsuTmyPuCO6dx+Sr8eaG2u +Aumk/tU2Rra5V9Mc0SSwYQj8nTMcgBh2PeIuVmOdznh18s/4/2Fp0teizjnqzbU0 +dreRNsqooVPqifumh2BoaNZcKOnuBp+/2xZid2B6VEjLFYHlrKmajQK8V1P0AHV+ +HFi6+z1Ahge6JCCl0MfhoO13wepmgBkyyhPnUR8pbSeUGqA9iYkJ8q+LeXztxiIO +rJ0f7Y0lpJBWkU6nu4LNdL8qOUDLZx2BKZZGjzemGV05vKh/aS2cv0Z6z/YWY97e +M0wGWp9LELxzGBpp0F9HkJ84rFEyW/fZ3f4yDSrwaRsb7eCrrWpBiqKsVj4vKfZz +XE5oWhk0eAFFMAcPCcRemlMTKEW1lt6kfF/8xLYBuQINBGVt5AsBEAC/mB66pftw +YCW4/PXAWI+TQk5/iR9DPX0RHNd8d7B41qo5KOnu8FGdGJuk60fR26C9qyMJOBxz +HhbEPlE5UHyaUn/QiDOyzB1eZmwSUH38Y5PTgXM1ZvB0taLjkCaNIe+AeEqMx6NT +xK989a3+1fiC1nro797urZ52JdzJvU1Krh6K8AsfEIfVqqmzSaNGee1jREL5HC3y +JpiN2h0/G0WX4s8mCOER5jOuu3vWa/qBV0qkwYBwgBV0n42DBE0/BHoQYXRNzpKV +unQ3wqqqln4XdyuQanfUEIGgZAgK0HYsO1/jG58yUhw8jw3VMjtqgzO9A0NA90RE +ZSimDD1RQuCJonDS2fZBewpDKgSNp9PqobkMEM60/uvrB7ZUGSAOkjnRLRbVGLyA +bHaMES0c6IP/FsRZUnJ9+0u7pp59Zvtqsn1pl46bN8s38EdZ/uyYN9P9C5cX/Tof +1fcPN6W45K1BVBvGhbRX6j/+J0CH0Ya9lGJmhVyb9My/YmusjjPRiEngyjcXN0lv +G9rrqFVwQLoGanF/YZE8VOPrC33NreocuF7ClK8Kkvwow71254inUYIw6VJVrwMW +97QYvDAJ8iRLh6fY2W1JaLNbJS89OcDfq8yaHhQlheT2moFONcx+IxrFQu/HEqGn +6DLCoYnNrHtVH2ZfRvE3T0dzJ/NtTr4QrQARAQABiQI8BBgBCAAmFiEEDlCufP2B +lZmc9FNwt2bpRBG5tzQFAmVt5AsCGwwFCQfSlgwACgkQt2bpRBG5tzQpWRAAirJZ +I1CQzk4+tYdFzPx9dWgvsO/J+y+tM3HJdeLKzBIeQGGJKvAmQC6RyMhhXwapznm8 +qS+KUj3/riBLuGRni1OJLABR0W+zilsVA9RMkAHdK8jGCCRjB7+HSAXKcN1k297j +mJwZstQuWlWOU315v2ebLSLW+SwBvHQVFnWRQZqu8oNm0uVWQBzZ0jAzoMXi/KDm +156L9CFowcHVwCHzkdgyQ6h5XxJfTwGlX5Kwed8SQD1eavRHiFstl6S4bqG9+xlB +YGFIKCMOSNO5DO+76NiqcgZb2huZ+9WHdcYB911j766uRHqPIAinWOARPYmtaLoT +kl96hi50EmtmFa0Roa5otbnw4TAXvlSsXXLqc30XoI3gKhnMLY846HVsU/PjCvgq +5WFDxT+fovLfd2IUfmSri8zGFdlAPSyRa1jPp9vtEeelKeMTTElRiz2e6LYMkhmF +YAfw4o1Gy+Io+Eu/Gu+CXfQuGRBU/sbIBwfe/mlk1e0NOO7u4sx5Q0QaRvl/XZ/P +oyjZstz48mfnFOTGbWRaX45rs/eBLYTggAFiNZXUrA0vH4iAxN1o+IsEzmnGFfRb +hVu9J6odTCsucHDKzqhPxbJdPP4rS9yKHwoYmilZq9NzwkX88raA7pWRX4tp6KPe +GK223m2Hg28/Y6p6JVrKZ/3w/Q8QFMkHFOeOSMs= +=oBQV +-----END PGP PUBLIC KEY BLOCK----- +``` diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 0000000000..5f81355d28 --- /dev/null +++ b/codecov.yml @@ -0,0 +1,27 @@ +coverage: + precision: 2 + round: down + range: "60...100" + status: # this controls whether a pull request will be blocked by a decrease in coverage + # Learn more at https://docs.codecov.com/docs/commit-status + project: + default: + threshold: 7% # allows coverage to drop by up to the percent noted and still post a success status + informational: false # If true is specified the resulting status will pass no matter what the coverage is or what other settings are specified + patch: + default: + target: 0% # No target for patches + only_pulls: true + # Patches should be informational only as many things can throw off the patch information + informational: true # If true is specified the resulting status will pass no matter what the coverage is or what other settings are specified + +ignore: + - "node" # ignore folders and all its contents + - "runtime" # ignore folders and all its contents + - "**/weights.rs" # Ignore weights + - "**/benchmarking.rs" # Ignore benchmarking + - "**/benchmarks.rs" # Ignore benchmarking + - "**/*tests.rs" # Ignore test files for coverage + - "**/tests/*.rs" # Ignore test files for coverage + - "**/*mock.rs" # Ignore test mock files for coverage + - "**/*runtime-api/src/lib.rs" # Ignore runtime-api libraries that are just traits diff --git a/common/helpers/Cargo.toml b/common/helpers/Cargo.toml new file mode 100644 index 0000000000..ecf058a18d --- /dev/null +++ b/common/helpers/Cargo.toml @@ -0,0 +1,29 @@ +[package] +authors = ["Frequency"] +description = "A package that defines common helper modules used in Frequency" +edition = "2021" +homepage = "https://frequency.xyz" +license = "Apache-2.0" +name = "common-helpers" +publish = false +repository = "https://github.com/frequency-chain/frequency/" +version = "0.0.0" + +[package.metadata.docs.rs] +targets = ['x86_64-unknown-linux-gnu'] + +[dependencies] +apache-avro = { workspace = true, features = ["snappy"] } +thiserror = { workspace = true } +jsonrpsee = { workspace = true, features = ["client-core", "server", "macros"] } +sp-runtime = { workspace = true } +sp-api = { workspace = true } +sp-io = { workspace = true } +common-primitives = { path = "../primitives", default-features = false } + +[features] +default = ['std'] +std = ['sp-runtime/std', 'sp-api/std', 'sp-io/std', 'common-primitives/std'] + +[lints] +workspace = true diff --git a/common/helpers/src/avro.rs b/common/helpers/src/avro.rs new file mode 100644 index 0000000000..30d818fb5e --- /dev/null +++ b/common/helpers/src/avro.rs @@ -0,0 +1,204 @@ +use crate::types::*; +use apache_avro::{from_avro_datum, schema::Schema, to_avro_datum, types::Record, Codec, Writer}; +use std::{collections::HashMap, io::Cursor, str}; + +/// Represents error types returned by the `avro` module. +#[derive(thiserror::Error, Debug)] +pub enum AvroError { + #[error("I/O error")] + Io(#[from] std::io::Error), + #[error("Avro error")] + Avro(#[from] apache_avro::Error), + #[error("Invalid avro schema: {0}")] + InvalidSchema(String), + #[error("Invalid avro records")] + InvalidRecords(), +} + +/// Function to convert a raw schema into serialized Avro schema. +/// If schema is malformed or invalid, returns an error. +/// +/// # Examples +/// ``` +/// use common_helpers::avro; +/// use common_helpers::types::*; +/// let raw_schema = r#"{"type": "record", "name": "User", "fields": [{"name": "name", "type": "string"}, {"name": "favorite_number", "type": "int"}]}"#; +/// let schema_result = avro::fingerprint_raw_schema(raw_schema); +/// assert!(schema_result.is_ok()); +/// let serialized_schema = schema_result.unwrap().1; +/// ``` +pub fn fingerprint_raw_schema(raw_schema: &str) -> Result<(Schema, Vec), AvroError> { + let schema_result = Schema::parse_str(raw_schema)?; + let schema_canonical_form = schema_result.canonical_form(); + Ok((schema_result, schema_canonical_form.as_bytes().to_vec())) +} + +///Function to convert a serialized Avro schema into Avro Schema type. +/// If schema is malformed or invalid, returns an error. +/// +/// # Examples +/// ``` +/// use common_helpers::avro; +/// use common_helpers::types::*; +/// let raw_schema = r#"{"type": "record", "name": "User", "fields": [{"name": "name", "type": "string"}, {"name": "favorite_number", "type": "int"}]}"#; +/// let serialized_schema = avro::fingerprint_raw_schema(raw_schema); +/// assert!(serialized_schema.is_ok()); +/// let schema = serialized_schema.unwrap().1; +/// let translated_schema = avro::translate_schema(schema); +/// assert!(translated_schema.is_ok()); +/// ``` +pub fn translate_schema(serialized_schema: Vec) -> Result { + match str::from_utf8(&serialized_schema) { + Ok(schema_str) => { + let schema = Schema::parse_str(schema_str)?; + Ok(schema) + }, + Err(error) => Err(AvroError::InvalidSchema(error.to_string())), + } +} + +/// Function to get the schema writer with default container as `Vec` +/// +/// # Examples +/// ``` +/// use common_helpers::avro; +/// use common_helpers::types::*; +/// let raw_schema = r#"{"type": "record", "name": "User", "fields": [{"name": "name", "type": "string"}, {"name": "favorite_number", "type": "int"}]}"#; +/// let schema_result = avro::fingerprint_raw_schema(raw_schema); +/// assert!(schema_result.is_ok()); +/// let avro_schema = schema_result.unwrap().0; +/// let schema_writer = avro::get_schema_data_writer(&avro_schema); +/// ``` +pub fn get_schema_data_writer(schema: &Schema) -> Writer> { + Writer::with_codec(schema, Vec::new(), Codec::Snappy) +} + +/// Function to populate a given schema with data and return serialized record. +/// +/// # Remarks +/// * `record` is the record to be written as HashMap where SchemaValue is common types +/// +/// # Examples +/// ``` +/// use common_helpers::avro; +/// use common_helpers::types::*; +/// use std::{collections::HashMap}; +/// let raw_schema = r#" +/// { +/// "type": "record", +/// "name": "test", +/// "fields": [ +/// {"name": "a", "type": "long", "default": 42}, +/// {"name": "b", "type": "string"} +/// ] +/// } +/// "#; +/// let schema_fingerprint = avro::fingerprint_raw_schema(raw_schema); +/// let mut hashmap_data = HashMap::new(); +/// let mut name = "name".to_string(); +/// let mut name_field = SchemaValue::String("John".to_string()); +/// hashmap_data.insert("a".to_string(), SchemaValue::Long(27i64)); +/// hashmap_data.insert("b".to_string(), SchemaValue::String("foo".to_string())); +/// assert!(schema_fingerprint.is_ok()); +/// let data_schema = schema_fingerprint.unwrap().0; +/// let serialized_record = avro::populate_schema_and_serialize(&data_schema, &hashmap_data); +/// assert!(serialized_record.is_ok()); +/// ``` +pub fn populate_schema_and_serialize( + schema: &Schema, + records: &HashMap, +) -> Result, AvroError> { + let writer = get_schema_data_writer(schema); + match Record::new(writer.schema()) { + None => + Err(AvroError::InvalidSchema("Could not create record from this schema".to_string())), + Some(mut record_list) => { + for (field_name, field_value) in records.iter() { + record_list.put(field_name, field_value.clone()); + } + let datum_res = to_avro_datum(schema, record_list)?; + Ok(datum_res) + }, + } +} + +/// Function to get serialized datum data for a given schema into hashmap. +/// +/// # Examples +/// ``` +/// use common_helpers::avro; +/// use common_helpers::types::*; +/// use std::{collections::HashMap}; +/// let raw_schema = r#" +/// { +/// "type": "record", +/// "name": "test", +/// "fields": [ +/// {"name": "a", "type": "long", "default": 42}, +/// {"name": "b", "type": "string"} +/// ] +/// } +/// "#; +/// let schema_fingerprint = avro::fingerprint_raw_schema(raw_schema); +/// let mut hashmap_data = HashMap::new(); +/// let mut name = "name".to_string(); +/// let mut name_field = SchemaValue::String("John".to_string()); +/// hashmap_data.insert("a".to_string(), SchemaValue::Long(27i64)); +/// hashmap_data.insert("b".to_string(), SchemaValue::String("foo".to_string())); +/// assert!(schema_fingerprint.is_ok()); +/// let data_schema = schema_fingerprint.unwrap().0; +/// let serialized_record = avro::populate_schema_and_serialize(&data_schema, &hashmap_data); +/// assert!(serialized_record.is_ok()); +/// let serialized_data = serialized_record.unwrap(); +/// let deserialized_data = avro::get_schema_data_map(&serialized_data, &data_schema); +/// assert!(deserialized_data.is_ok()); +/// ``` +pub fn get_schema_data_map<'a>( + serialized_data: &'a Vec, + schema: &'a Schema, +) -> Result, AvroError> { + let from_data_datum = from_avro_datum(schema, &mut Cursor::new(serialized_data), None)?; + let mut result_record = HashMap::::new(); + + match from_data_datum { + SchemaValue::Record(record) => + for (field_name, field_value) in record.iter() { + result_record.insert(field_name.clone(), field_value.clone()); + }, + _ => return Err(AvroError::InvalidRecords()), + } + + Ok(result_record) +} + +/// Function to validate incoming json serialized schema against avro schema. +/// +/// # Examples +/// ``` +/// use common_helpers::avro; +/// use common_helpers::types::*; +/// let raw_schema = r#" +/// { +/// "type": "record", +/// "name": "test", +/// "fields": [ +/// {"name": "a", "type": "long", "default": 42}, +/// {"name": "b", "type": "string"} +/// ] +/// } +/// "#; +/// let schema_fingerprint = avro::fingerprint_raw_schema(raw_schema); +/// assert!(schema_fingerprint.is_ok()); +/// ``` +pub fn validate_raw_avro_schema(json_schema: &[u8]) -> Result<(), AvroError> { + match String::from_utf8(json_schema.to_owned()) { + Err(_e) => Err(AvroError::InvalidSchema("Invalid schema".to_string())), + Ok(avro_schema) => { + let schema_fingerprint = fingerprint_raw_schema(&avro_schema); + if schema_fingerprint.is_err() { + return Err(AvroError::InvalidSchema("Invalid schema".to_string())); + } + Ok(()) + }, + } +} diff --git a/common/helpers/src/avro_tests.rs b/common/helpers/src/avro_tests.rs new file mode 100644 index 0000000000..fee7b9d1b4 --- /dev/null +++ b/common/helpers/src/avro_tests.rs @@ -0,0 +1,418 @@ +use std::collections::HashMap; + +use crate::avro; +use apache_avro::types::Record; + +pub type SchemaValue = apache_avro::types::Value; + +const VALID_SCHEMAS: [&str; 19] = [ + r#""null""#, + r#"{"type": "null"}"#, + r#""boolean""#, + r#"{"type": "boolean"}"#, + r#""string""#, + r#"{"type": "string"}"#, + r#""bytes""#, + r#"{"type": "bytes"}"#, + r#""int""#, + r#"{"type": "int"}"#, + r#""long""#, + r#"{"type": "long"}"#, + r#""float""#, + r#"{"type": "float"}"#, + r#""double""#, + r#"{"type": "double"}"#, + r#" + { + "type": "record", + "name": "test", + "fields": [ + {"name": "a", "type": "long", "default": 42}, + {"name": "b", "type": "string"} + ] + } + "#, + r#"{"type": "fixed", "name": "Test", "size": 1}"#, + r#"{ + "type": "fixed", + "name": "MyFixed", + "namespace": "org.apache.hadoop.avro", + "size": 1 + }"#, +]; + +const INVALID_SCHEMAS: [&str; 8] = [ + r#"{"type": "fixed", "name": "MissingSize"}"#, + r#""{}"#, + r#"true"#, + r#""true""#, + r#"{"type": "panther"}"#, + r#"{"no_type": "test"}"#, + r#"{"type": "fixed", "size": 314}"#, + r#" + { + "type": "record", + "name": "no_size_field", + "fields": [ + {"name": "a"}, + {"name": "b"} + ] + } + "#, +]; + +#[test] +fn test_fingerprint_valid() { + for valid_schema in VALID_SCHEMAS { + let schema_result = avro::fingerprint_raw_schema(valid_schema); + assert!( + schema_result.is_ok(), + "schema {} was supposed to be valid; error: {:?}", + valid_schema, + schema_result.err() + ); + } +} + +#[test] +fn test_fingerprint_invalid() { + for invalid_schema in INVALID_SCHEMAS { + let schema_result = avro::fingerprint_raw_schema(invalid_schema); + assert!( + schema_result.is_err(), + "schema {} was supposed to be invalid; error: {:?}", + invalid_schema, + schema_result.err() + ); + } +} + +#[test] +/// Test schema round trip: raw Avro schema -> serialized Avro -> raw Avro Schema. +fn test_fingerprint_raw_schema_has_valid_cast_to_string_after_parse() { + for valid_schema in VALID_SCHEMAS { + let schema_result = avro::fingerprint_raw_schema(valid_schema); + assert!( + schema_result.is_ok(), + "schema {} was supposed to be valid; error: {:?}", + valid_schema, + schema_result.err() + ); + let (schema, schema_vec) = schema_result.unwrap(); + + let translate_schema = avro::translate_schema(schema_vec); + assert!( + translate_schema.is_ok(), + "schema {} was supposed to be valid; error: {:?}", + valid_schema, + translate_schema.err() + ); + let translated_schema = translate_schema.unwrap(); + assert_eq!(translated_schema, schema); + } +} + +#[test] +fn test_fingerprint_raw_schema_errors_on_invalid_schema() { + for invalid_schema in INVALID_SCHEMAS { + let schema_result = avro::fingerprint_raw_schema(invalid_schema); + assert!( + schema_result.is_err(), + "schema {} was supposed to be invalid; error: {:?}", + invalid_schema, + schema_result.err() + ); + } +} + +#[test] +fn test_get_writer_with_schema() { + let schema_result = avro::fingerprint_raw_schema(r#"{"type": "int"}"#); + assert!(schema_result.is_ok()); + let schema_res = schema_result.unwrap(); + let translate_schema = avro::translate_schema(schema_res.1); + assert!(translate_schema.is_ok()); + let translated_schema = translate_schema.unwrap(); + let writer = avro::get_schema_data_writer(&translated_schema); + assert_eq!(writer.schema(), &translated_schema); +} + +#[test] +fn test_get_writer_with_data() { + let raw_schema = r#" + { + "type": "record", + "name": "test", + "fields": [ + {"name": "a", "type": "long", "default": 42}, + {"name": "b", "type": "string"} + ] + } + "#; + let raw_schema_vec = raw_schema.as_bytes().to_vec(); + let schema_string = String::from_utf8(raw_schema_vec).unwrap(); + let schema_result = avro::fingerprint_raw_schema(&schema_string); + assert!(schema_result.is_ok()); + let schema_res = schema_result.unwrap(); + let translate_schema = avro::translate_schema(schema_res.1); + assert!(translate_schema.is_ok()); + let translated_schema = translate_schema.unwrap(); + let mut writer = avro::get_schema_data_writer(&translated_schema); + assert_eq!(writer.schema(), &translated_schema); + // the Record type models our Record schema + let mut record = Record::new(writer.schema()).unwrap(); + record.put("a", 27i64); + record.put("b", "foo"); + let result_write = writer.append(record); + assert!(result_write.is_ok()); +} + +#[test] +fn test_set_writer_with_data() { + let raw_schema = r#" + { + "type": "record", + "name": "test", + "fields": [ + {"name": "a", "type": "long", "default": 42}, + {"name": "b", "type": "string"} + ] + } + "#; + let schema_result = avro::fingerprint_raw_schema(raw_schema); + assert!(schema_result.is_ok()); + let schema_res = schema_result.unwrap(); + let translate_schema = avro::translate_schema(schema_res.1); + assert!(translate_schema.is_ok()); + let translated_schema = translate_schema.unwrap(); + let mut writer = avro::get_schema_data_writer(&translated_schema); + assert_eq!(writer.schema(), &translated_schema); + // the Record type models our Record schema + let mut record = Record::new(writer.schema()).unwrap(); + record.put("a", 27i64); + record.put("b", "foo"); + let result_write = writer.append(record); + assert!(result_write.is_ok()); +} + +#[test] +fn test_populate_data_records() { + let raw_schema = r#" + { + "type": "record", + "name": "test", + "fields": [ + {"name": "a", "type": "long", "default": 42}, + {"name": "b", "type": "string"} + ] + } + "#; + let schema_result = avro::fingerprint_raw_schema(raw_schema); + assert!(schema_result.is_ok()); + let schema_res = schema_result.unwrap(); + let translate_schema = avro::translate_schema(schema_res.1); + assert!(translate_schema.is_ok()); + let translated_schema = translate_schema.unwrap(); + let writer = avro::get_schema_data_writer(&translated_schema); + assert_eq!(writer.schema(), &translated_schema); + // hashmap to store the data + let mut data_map = HashMap::new(); + // the Record type models our Record schema + data_map.insert("a".to_string(), SchemaValue::Long(27i64)); + data_map.insert("b".to_string(), SchemaValue::String("foo".to_string())); + + let result_write = avro::populate_schema_and_serialize(&translated_schema, &data_map); + assert!(result_write.is_ok()); +} + +#[test] +fn test_invalid_cast_to_string_after_parse() { + for invalid_schema in INVALID_SCHEMAS { + let actual = avro::fingerprint_raw_schema(invalid_schema); + assert!( + actual.is_err(), + "schema {} was supposed to be invalid; error: {:?}", + invalid_schema, + actual.err() + ); + } +} + +#[test] +fn test_invalid_translation() { + let bad_schema = "{\"something\": \"nothing\"}"; + let bad_bytes = bad_schema.as_bytes().to_vec(); + let schema_result = avro::translate_schema(bad_bytes); + assert!( + schema_result.is_err(), + "schema {} was supposed to be invalid; error: {:?}", + bad_schema, + schema_result.err() + ); +} + +#[test] +fn test_populate_data_serialized() { + let raw_schema = r#" + { + "type": "record", + "name": "test", + "fields": [ + {"name": "a", "type": "long", "default": 42}, + {"name": "b", "type": "string"} + ] + } + "#; + let schema_result = avro::fingerprint_raw_schema(raw_schema); + assert!(schema_result.is_ok()); + let schema_res = schema_result.unwrap(); + let translate_schema = avro::translate_schema(schema_res.1); + assert!(translate_schema.is_ok()); + let translated_schema = translate_schema.unwrap(); + let writer = avro::get_schema_data_writer(&translated_schema); + assert_eq!(writer.schema(), &translated_schema); + // hashmap to store the data + let mut data_map = HashMap::new(); + // the Record type models our Record schema + data_map.insert("a".to_string(), SchemaValue::Long(27i64)); + data_map.insert("b".to_string(), SchemaValue::String("foo".to_string())); + + let result_write = avro::populate_schema_and_serialize(&translated_schema, &data_map); + assert!(result_write.is_ok()); +} + +#[test] +fn test_reader_schema_with_data() { + let raw_schema = r#" + { + "type": "record", + "name": "test", + "fields": [ + {"name": "a", "type": "long", "default": 42}, + {"name": "b", "type": "string"} + ] + } + "#; + let schema_result = avro::fingerprint_raw_schema(raw_schema); + assert!(schema_result.is_ok()); + let schema_res = schema_result.unwrap(); + let translate_schema = avro::translate_schema(schema_res.1); + assert!(translate_schema.is_ok()); + let translated_schema = translate_schema.unwrap(); + let writer = avro::get_schema_data_writer(&translated_schema); + assert_eq!(writer.schema(), &translated_schema); + // hashmap to store the data + let mut data_map = HashMap::new(); + // the Record type models our Record schema + data_map.insert("a".to_string(), SchemaValue::Long(27i64)); + data_map.insert("b".to_string(), SchemaValue::String("foo".to_string())); + + let result_write = avro::populate_schema_and_serialize(&translated_schema, &data_map); + assert!(result_write.is_ok()); + let serialized_result = result_write.unwrap(); + let reader_res = avro::get_schema_data_map(&serialized_result, &translated_schema); + assert!(reader_res.is_ok()); +} + +#[test] +fn test_end_to_end_flow() { + // create a schema + let raw_schema = r#" + { + "type": "record", + "name": "test", + "fields": [ + {"name": "a", "type": "long", "default": 42}, + {"name": "b", "type": "string"} + ] + } + "#; + let schema_result = avro::fingerprint_raw_schema(raw_schema); + assert!(schema_result.is_ok()); + let schema_res = schema_result.unwrap(); + let translate_schema = avro::translate_schema(schema_res.1); + assert!(translate_schema.is_ok()); + let translated_schema = translate_schema.unwrap(); + let writer = avro::get_schema_data_writer(&translated_schema); + assert_eq!(writer.schema(), &translated_schema); + // hashmap to store the data + let mut data_map = HashMap::new(); + // the Record type models our Record schema + data_map.insert("a".to_string(), SchemaValue::Long(27i64)); + data_map.insert("b".to_string(), SchemaValue::String("foo".to_string())); + // write the data + let result_write = avro::populate_schema_and_serialize(&translated_schema, &data_map); + assert!(result_write.is_ok()); + let serialized_result = result_write.unwrap(); + // read the data + let reader_res = avro::get_schema_data_map(&serialized_result, &translated_schema); + assert!(reader_res.is_ok()); +} + +#[test] +fn test_end_to_end_flow_map() { + // create a schema + let raw_schema = r#" + { + "type": "record", + "name": "test", + "fields": [ + {"name": "a", "type": "long", "default": 42}, + {"name": "b", "type": "string"} + ] + } + "#; + let schema_result = avro::fingerprint_raw_schema(raw_schema); + assert!(schema_result.is_ok()); + let schema_res = schema_result.unwrap(); + let translate_schema = avro::translate_schema(schema_res.1); + assert!(translate_schema.is_ok()); + let translated_schema = translate_schema.unwrap(); + let writer = avro::get_schema_data_writer(&translated_schema); + assert_eq!(writer.schema(), &translated_schema); + // hashmap to store the data + let mut data_map = HashMap::new(); + // the Record type models our Record schema + data_map.insert("a".to_string(), SchemaValue::Long(27i64)); + data_map.insert("b".to_string(), SchemaValue::String("foo".to_string())); + // write the data + let result_write = avro::populate_schema_and_serialize(&translated_schema, &data_map); + assert!(result_write.is_ok()); + let serialized_result = result_write.unwrap(); + let reader_res = avro::get_schema_data_map(&serialized_result, &translated_schema); + assert!(reader_res.is_ok()); + let reader = reader_res.unwrap(); + assert_eq!(reader["a"], SchemaValue::Long(27i64)); + assert_eq!(reader["b"], SchemaValue::String("foo".to_string())); +} + +#[test] +fn test_bad_records() { + // create a schema + let schema_result = avro::fingerprint_raw_schema(VALID_SCHEMAS[16]); + assert!(schema_result.is_ok()); + let schema_res = schema_result.unwrap(); + let translate_schema = avro::translate_schema(schema_res.1); + assert!(translate_schema.is_ok()); + let translated_schema = translate_schema.unwrap(); + let writer = avro::get_schema_data_writer(&translated_schema); + assert_eq!(writer.schema(), &translated_schema); + let serialized_result = vec![0u8]; + let reader_res = avro::get_schema_data_map(&serialized_result, &translated_schema); + assert!(reader_res.is_err()); +} + +#[test] +fn test_json_serialized_avro_schema() { + // create a schema + let serialized_bytes = VALID_SCHEMAS[16].as_bytes().to_vec(); + let validation_res = avro::validate_raw_avro_schema(&serialized_bytes); + assert!(validation_res.is_ok()); +} + +#[test] +fn test_json_serialized_bad_avro_schema() { + let serialized_bytes = INVALID_SCHEMAS[6].as_bytes().to_vec(); + let validation_res = avro::validate_raw_avro_schema(&serialized_bytes); + assert!(validation_res.is_err()); +} diff --git a/common/helpers/src/lib.rs b/common/helpers/src/lib.rs new file mode 100644 index 0000000000..c3cf057eb8 --- /dev/null +++ b/common/helpers/src/lib.rs @@ -0,0 +1,9 @@ +pub mod avro; + +#[cfg(test)] +mod avro_tests; +/// Structs and traits specifically for RPC calls. +#[cfg(feature = "std")] +/// export rpc primitive types. +pub mod rpc; +pub mod types; diff --git a/common/helpers/src/rpc.rs b/common/helpers/src/rpc.rs new file mode 100644 index 0000000000..fdcfd6d949 --- /dev/null +++ b/common/helpers/src/rpc.rs @@ -0,0 +1,40 @@ +use core::result::Result as CoreResult; +use jsonrpsee::{ + core::RpcResult, + types::error::{ErrorCode, ErrorObject}, +}; +use sp_api::ApiError; + +/// Converts CoreResult to Result for RPC calls +pub fn map_rpc_result(response: CoreResult) -> RpcResult { + match response { + Ok(res) => Ok(res), + Err(e) => Err(ErrorObject::owned( + ErrorCode::ServerError(300).code(), // No real reason for this value + "Api Error", + Some(format!("{:?}", e)), + )), + } +} + +#[cfg(test)] +mod tests { + use super::*; + + // It is enough to test that we are getting into the correct match statement. + + #[test] + fn maps_ok_to_ok() { + let result = map_rpc_result(Ok(0)); + assert!(result.is_ok()); + assert_eq!(0, result.unwrap()); + } + + #[test] + fn maps_err_to_api_err() { + let result = map_rpc_result::(Err(ApiError::StateBackendIsNotTrie)); + assert!(result.is_err()); + let str = format!("{:?}", result.err().unwrap()); + assert!(str.contains("Api Error"), "Did not find in: {:?}", str); + } +} diff --git a/common/helpers/src/types.rs b/common/helpers/src/types.rs new file mode 100644 index 0000000000..e63a59ce6d --- /dev/null +++ b/common/helpers/src/types.rs @@ -0,0 +1,3 @@ +use apache_avro::types::Value; + +pub type SchemaValue = Value; diff --git a/common/primitives/Cargo.toml b/common/primitives/Cargo.toml new file mode 100644 index 0000000000..4d9d322794 --- /dev/null +++ b/common/primitives/Cargo.toml @@ -0,0 +1,58 @@ +[package] +authors = ["Frequency"] +description = "A package that defines common primitives used in runtime and RPCs" +edition = "2021" +homepage = "https://frequency.xyz" +license = "Apache-2.0" +name = "common-primitives" +publish = false +repository = "https://github.com/frequency-chain/frequency/" +version = "0.0.0" + +[package.metadata.docs.rs] +targets = ['x86_64-unknown-linux-gnu'] + +[dependencies] +parity-scale-codec = { workspace = true, features = ["derive"] } +frame-support = { workspace = true } +frame-system = { workspace = true } +impl-serde = { workspace = true } +scale-info = { workspace = true, features = ["derive"] } +serde = { workspace = true, features = ["derive"] } +serde_json = { workspace = true, features = ["alloc"] } +enumflags2 = { workspace = true } +smallvec = { workspace = true } +sp-api = { workspace = true } +sp-io = { workspace = true } +sp-core = { workspace = true } +sp-runtime = { workspace = true } +numtoa = { workspace = true } +sp-externalities = { workspace = true } +sp-runtime-interface = { workspace = true } +libsecp256k1 = { workspace = true, features = ["hmac"] } +log = "0.4.22" +lazy_static = { workspace = true } + +[features] +default = ['std'] +runtime-benchmarks = [] +serde = [] +std = [ + 'parity-scale-codec/std', + 'frame-support/std', + 'frame-system/std', + 'impl-serde/std', + 'scale-info/std', + 'serde_json/std', + 'sp-api/std', + 'sp-io/std', + 'sp-core/std', + 'sp-runtime/std', + 'sp-externalities/std', + 'sp-runtime-interface/std', + 'libsecp256k1/std', +] +test = [] + +[lints] +workspace = true diff --git a/common/primitives/src/benchmarks.rs b/common/primitives/src/benchmarks.rs new file mode 100644 index 0000000000..218e85c3c5 --- /dev/null +++ b/common/primitives/src/benchmarks.rs @@ -0,0 +1,83 @@ +use frame_support::dispatch::DispatchResult; +extern crate alloc; +use alloc::vec::Vec; + +use crate::{ + msa::{DelegatorId, MessageSourceId, ProviderId}, + schema::{ModelType, PayloadLocation, SchemaId}, +}; + +/// A trait for helping setup state for running benchmarks. +/// When implementing loosely coupled pallets accessing the dependent +/// pallet state is not possible. Therefore, an alternative solution to +/// setting up the state is necessary to run benchmarks on an extrinsic. +/// Implementing this trait and adding the runtime-benchmarks feature flag +/// makes it possible for the messages pallet to access functions that allow +/// one to set up the necessary state for running benchmarks for messages. +pub trait MsaBenchmarkHelper { + /// Sets the delegation relationship of between Provider and Delegator. + fn set_delegation_relationship( + provider: ProviderId, + delegator: DelegatorId, + schemas: Vec, + ) -> DispatchResult; + + /// Sets a public key to an MSA. + fn add_key(msa_id: MessageSourceId, key: AccountId) -> DispatchResult; +} + +impl MsaBenchmarkHelper for () { + /// Sets the delegation relationship of between Provider and Delegator. + fn set_delegation_relationship( + _provider: ProviderId, + _delegator: DelegatorId, + _schemas: Vec, + ) -> DispatchResult { + Ok(()) + } + + /// Sets a publickey to an MSA. + fn add_key(_msa_id: MessageSourceId, _key: AccountId) -> DispatchResult { + Ok(()) + } +} + +/// A trait for Schema pallet helping setup state for running benchmarks. +pub trait SchemaBenchmarkHelper { + /// Sets the schema count. + fn set_schema_count(schema_id: SchemaId); + + /// Creates a new schema. + fn create_schema( + model: Vec, + model_type: ModelType, + payload_location: PayloadLocation, + ) -> DispatchResult; +} + +impl SchemaBenchmarkHelper for () { + /// Sets the schema count. + fn set_schema_count(_schema_id: SchemaId) {} + + /// Adds a new schema. + fn create_schema( + _model: Vec, + _model_type: ModelType, + _payload_location: PayloadLocation, + ) -> DispatchResult { + Ok(()) + } +} + +/// A trait for helping setup state for running benchmarks in Capacity. +pub trait RegisterProviderBenchmarkHelper { + /// Registers a provider + fn create(target_id: MessageSourceId, name: Vec) -> DispatchResult; +} + +/// A blank implementation +impl RegisterProviderBenchmarkHelper for () { + fn create(_target_id: MessageSourceId, _name: Vec) -> DispatchResult { + Ok(()) + } +} diff --git a/common/primitives/src/capacity.rs b/common/primitives/src/capacity.rs new file mode 100644 index 0000000000..d253467e33 --- /dev/null +++ b/common/primitives/src/capacity.rs @@ -0,0 +1,81 @@ +use crate::msa::MessageSourceId; +use frame_support::traits::tokens::Balance; +use scale_info::TypeInfo; +use sp_core::{Decode, Encode, MaxEncodedLen, RuntimeDebug}; +use sp_runtime::DispatchError; + +/// The type of a Reward Era +pub type RewardEra = u32; + +/// A trait for checking that a target MSA can be staked to. +pub trait TargetValidator { + /// Checks if an MSA is a valid target. + fn validate(target: MessageSourceId) -> bool; +} + +/// A blanket implementation +impl TargetValidator for () { + fn validate(_target: MessageSourceId) -> bool { + false + } +} + +/// A trait for Non-transferable asset +pub trait Nontransferable { + /// Scalar type for representing balance of an account. + type Balance: Balance; + + /// The available Capacity for an MSA. + fn balance(msa_id: MessageSourceId) -> Self::Balance; + + /// The replenishable Capacity for an MSA (the total capacity currently issued) + fn replenishable_balance(msa_id: MessageSourceId) -> Self::Balance; + + /// Reduce Capacity of an MSA by amount. + fn deduct(msa_id: MessageSourceId, capacity_amount: Self::Balance) + -> Result<(), DispatchError>; + + /// Increase Staked Token + Capacity amounts of an MSA. (unused) + fn deposit( + msa_id: MessageSourceId, + token_amount: Self::Balance, + capacity_amount: Self::Balance, + ) -> Result<(), DispatchError>; +} + +/// A trait for replenishing Capacity. +pub trait Replenishable { + /// Scalar type for representing balance of an account. + type Balance: Balance; + + /// Replenish an MSA's Capacity by an amount. + fn replenish_by_amount( + msa_id: MessageSourceId, + amount: Self::Balance, + ) -> Result<(), DispatchError>; + + /// Replenish all Capacity balance for an MSA. + fn replenish_all_for(msa_id: MessageSourceId) -> Result<(), DispatchError>; + + /// Checks if an account can be replenished. + fn can_replenish(msa_id: MessageSourceId) -> bool; +} + +/// Result of checking a Boost History item to see if it's eligible for a reward. +#[derive( + Copy, Clone, Default, Encode, Eq, Decode, RuntimeDebug, MaxEncodedLen, PartialEq, TypeInfo, +)] + +pub struct UnclaimedRewardInfo { + /// The Reward Era for which this reward was earned + pub reward_era: RewardEra, + /// When this reward expires, i.e. can no longer be claimed + pub expires_at_block: BlockNumber, + /// The total staked in this era as of the current block + pub staked_amount: Balance, + /// The amount staked in this era that is eligible for rewards. Does not count additional amounts + /// staked in this era. + pub eligible_amount: Balance, + /// The amount in token of the reward (only if it can be calculated using only on chain data) + pub earned_amount: Balance, +} diff --git a/common/primitives/src/handles.rs b/common/primitives/src/handles.rs new file mode 100644 index 0000000000..4421b22264 --- /dev/null +++ b/common/primitives/src/handles.rs @@ -0,0 +1,157 @@ +use crate::msa::MessageSourceId; +#[cfg(feature = "std")] +use crate::utils::*; +use frame_support::BoundedVec; +use parity_scale_codec::{Decode, DecodeWithMemTracking, Encode}; +use scale_info::TypeInfo; +#[cfg(feature = "std")] +use serde::{Deserialize, Serialize}; +use sp_core::ConstU32; +extern crate alloc; +use crate::{ + node::EIP712Encode, signatures::get_eip712_encoding_prefix, utils::to_abi_compatible_number, +}; +use alloc::{boxed::Box, vec::Vec}; +use lazy_static::lazy_static; +use sp_core::U256; + +/// The minimum base and canonical handle (not including suffix or delimiter) length in characters +pub const HANDLE_CHARS_MIN: u32 = 3; +/// The minimum base and canonical handle (not including suffix or delimiter) length in bytes +pub const HANDLE_BYTES_MIN: u32 = 1 * HANDLE_CHARS_MIN; +/// The maximum base and canonical handle (not including suffix or delimiter) length in characters +pub const HANDLE_CHARS_MAX: u32 = 20; +/// The maximum base and canonical handle (not including suffix or delimiter) length in bytes +pub const HANDLE_BYTES_MAX: u32 = 32; // Hard limit of 32 bytes +/// The maximum number of digits in a suffix +pub const SUFFIX_MAX_DIGITS: usize = 5; // The max value of a HandleSuffix (u16) is 65535 which is 5 digits. +/// The maximum count of suffixes allowed to be requested at once +pub const MAX_SUFFIXES_COUNT: u16 = 100; +/// The default count of suffixes to request if none is provided +pub const DEFAULT_SUFFIX_COUNT: u16 = 1; +/// A generic handle type (base, canonical, or display) +type Handle = BoundedVec>; +/// A base handle, which is chosen by the user +pub type BaseHandle = Handle; +/// A canonical base, which is a reduced/translated version of the base handle +pub type CanonicalBase = Handle; +/// A display handle, which is a base handle with suffix separated by a delimiter +pub type DisplayHandle = + BoundedVec>; +/// The handle suffix +pub type HandleSuffix = u16; + +/// The handle suffix range type +pub type SuffixRangeType = u16; + +/// The cursor into the shuffled suffix sequence +pub type SequenceIndex = u16; + +/// Claim handle payload +#[derive(TypeInfo, Clone, Debug, Decode, DecodeWithMemTracking, Encode, PartialEq, Eq)] +pub struct ClaimHandlePayload { + /// The desired base handle + pub base_handle: Vec, + /// The block number at which the proof for grant_delegation expires. + pub expiration: BlockNumber, +} + +impl ClaimHandlePayload { + /// Create a new ClaimHandlePayload + pub fn new(base_handle: Vec, expiration: BlockNumber) -> Self { + ClaimHandlePayload { base_handle, expiration } + } +} + +impl EIP712Encode for ClaimHandlePayload +where + BlockNumber: Into + TryFrom + Copy, +{ + fn encode_eip_712(&self) -> Box<[u8]> { + lazy_static! { + // get prefix and domain separator + static ref PREFIX_DOMAIN_SEPARATOR: Box<[u8]> = + get_eip712_encoding_prefix("0xcccccccccccccccccccccccccccccccccccccccc"); + + // signed payload + static ref MAIN_TYPE_HASH: [u8; 32] = + sp_io::hashing::keccak_256(b"ClaimHandlePayload(string handle,uint32 expiration)"); + } + let coded_handle = sp_io::hashing::keccak_256(self.base_handle.as_ref()); + let expiration: U256 = self.expiration.into(); + let coded_expiration = to_abi_compatible_number(expiration.as_u128()); + let message = sp_io::hashing::keccak_256( + &[MAIN_TYPE_HASH.as_slice(), &coded_handle, &coded_expiration].concat(), + ); + let combined = [PREFIX_DOMAIN_SEPARATOR.as_ref(), &message].concat(); + combined.into_boxed_slice() + } +} + +/// RPC Response form for a Handle +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Clone, Encode, Decode, PartialEq, Debug, TypeInfo, Eq)] +pub struct HandleResponse { + /// Base handle (without delimiter or suffix) + #[cfg_attr(feature = "std", serde(with = "as_string"))] + pub base_handle: Vec, + /// Canonical handle (reduced/translated version of base) + #[cfg_attr(feature = "std", serde(with = "as_string"))] + pub canonical_base: Vec, + /// Suffix + pub suffix: HandleSuffix, +} + +/// A behavior that allows for retrieving a `Handle` for a given `MessageSourceAccount` +pub trait HandleProvider { + /// Validate a handle for a given `MessageSourceAccount` + fn get_handle_for_msa(key: MessageSourceId) -> Option; +} + +/// Blanket implementation for testing. +impl HandleProvider for () { + fn get_handle_for_msa(_key: MessageSourceId) -> Option { + None + } +} + +/// Output response for retrieving the next suffixes for a given handle +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Clone, Encode, Decode, PartialEq, Debug, TypeInfo, Eq)] +pub struct PresumptiveSuffixesResponse { + /// The base handle + #[cfg_attr(feature = "std", serde(with = "as_string"))] + pub base_handle: Vec, + /// The suffixes + pub suffixes: Vec, +} + +/// Output response for retrieving the next suffixes for a given handle +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Clone, Encode, Decode, PartialEq, Debug, TypeInfo, Eq)] +pub struct CheckHandleResponse { + /// The base handle + #[cfg_attr(feature = "std", serde(with = "as_string"))] + pub base_handle: Vec, + /// The canonical handle + #[cfg_attr(feature = "std", serde(with = "as_string"))] + pub canonical_base: Vec, + /// The current suffix index + pub suffix_index: u16, + /// Are additional suffixes available? + pub suffixes_available: bool, + /// Validity + pub valid: bool, +} + +impl Default for CheckHandleResponse { + fn default() -> Self { + Self { + base_handle: Vec::new(), + canonical_base: Vec::new(), + suffix_index: 0, + suffixes_available: false, + valid: false, + } + } +} diff --git a/common/primitives/src/lib.rs b/common/primitives/src/lib.rs new file mode 100644 index 0000000000..1db06f6efa --- /dev/null +++ b/common/primitives/src/lib.rs @@ -0,0 +1,46 @@ +//! # Frequency Primitives +//! +//! Primitives package contains many of the structs and trait implementations +//! for Pallets and utilities that need to be shared across packages + +#![cfg_attr(not(feature = "std"), no_std)] +// Strong Documentation Lints +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + missing_docs +)] +/// Types for the Handles pallet +pub mod handles; +/// macros +pub mod macros; +/// Structs and traits for the Messages pallet. +pub mod messages; +/// Structs and traits for the MSA pallet. +pub mod msa; +/// Node level primitives. +pub mod node; +/// Structs and traits for parquet +pub mod parquet; +/// Structs and traits for better RPCs +pub mod rpc; +/// Structs and traits for the Schema pallet +pub mod schema; +/// Types for the Stateful Storage pallet +pub mod stateful_storage; +/// Structs and traits for the utility package. +pub mod utils; + +/// Structs and traits for the Capacity pallet. +pub mod capacity; + +/// Constants and types for offchain data +pub mod offchain; + +#[cfg(feature = "runtime-benchmarks")] +/// Benchmarking helper trait +pub mod benchmarks; + +/// Signature support for ethereum +pub mod signatures; diff --git a/common/primitives/src/macros.rs b/common/primitives/src/macros.rs new file mode 100644 index 0000000000..d3476a5ba6 --- /dev/null +++ b/common/primitives/src/macros.rs @@ -0,0 +1,75 @@ +// This file is part of Substrate. + +// Copyright (C) 2022 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// macro_rules! impl_incrementable { +// ($($type:ty),+) => { +// $( +// impl Incrementable for $type { +// fn increment(&self) -> Self { +// let mut val = self.clone(); +// val.saturating_inc(); +// val +// } +// +// fn initial_value() -> Self { +// 0 +// } +// } +// )+ +// }; +// } +// pub(crate) use impl_incrementable; +#[macro_export] +#[doc(hidden)] +macro_rules! impl_codec_bitflags { + ($wrapper:ty, $size:ty, $bitflag_enum:ty) => { + impl MaxEncodedLen for $wrapper { + fn max_encoded_len() -> usize { + <$size>::max_encoded_len() + } + } + impl Encode for $wrapper { + fn using_encoded R>(&self, f: F) -> R { + self.0.bits().using_encoded(f) + } + } + impl EncodeLike for $wrapper {} + impl Decode for $wrapper { + fn decode( + input: &mut I, + ) -> core::result::Result { + let field = <$size>::decode(input)?; + Ok(Self(BitFlags::from_bits(field as $size).map_err(|_| "invalid value")?)) + } + } + + impl TypeInfo for $wrapper { + type Identity = Self; + + fn type_info() -> Type { + Type::builder() + .path(Path::new("BitFlags", module_path!())) + .type_params(vec![TypeParameter::new("T", Some(meta_type::<$bitflag_enum>()))]) + .composite( + Fields::unnamed() + .field(|f| f.ty::<$size>().type_name(stringify!($bitflag_enum))), + ) + } + } + }; +} +// pub(crate) use impl_codec_bitflags; diff --git a/common/primitives/src/messages.rs b/common/primitives/src/messages.rs new file mode 100644 index 0000000000..91c5b374e2 --- /dev/null +++ b/common/primitives/src/messages.rs @@ -0,0 +1,341 @@ +#[cfg(feature = "std")] +use crate::utils; +use crate::{msa::MessageSourceId, node::BlockNumber}; +use parity_scale_codec::{Decode, Encode}; +use scale_info::TypeInfo; +#[cfg(feature = "std")] +use serde::{Deserialize, Serialize}; +use sp_runtime::traits::One; +extern crate alloc; +use alloc::{vec, vec::Vec}; +#[cfg(feature = "std")] +use utils::*; + +/// A type for responding with an single Message in an RPC-call dependent on schema model +/// IPFS, Parquet: { index, block_number, provider_msa_id, cid, payload_length } +/// Avro, OnChain: { index, block_number, provider_msa_id, msa_id, payload } +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Default, Clone, Encode, Decode, PartialEq, Debug, TypeInfo, Eq)] +pub struct MessageResponse { + /// Message source account id of the Provider. This may be the same id as contained in `msa_id`, + /// indicating that the original source MSA is acting as its own provider. An id differing from that + /// of `msa_id` indicates that `provider_msa_id` was delegated by `msa_id` to send this message on + /// its behalf . + pub provider_msa_id: MessageSourceId, + /// Index in block to get total order. + pub index: u16, + /// Block-number for which the message was stored. + pub block_number: BlockNumber, + /// Message source account id (the original source). + #[cfg_attr(feature = "std", serde(skip_serializing_if = "Option::is_none", default))] + pub msa_id: Option, + /// Serialized data in a the schemas. + #[cfg_attr( + feature = "std", + serde(with = "as_hex_option", skip_serializing_if = "Option::is_none", default) + )] + pub payload: Option>, + /// The content address for an IPFS payload in Base32. Will always be CIDv1. + #[cfg_attr( + feature = "std", + serde(with = "as_string_option", skip_serializing_if = "Option::is_none", default) + )] + pub cid: Option>, + /// Offchain payload length (IPFS). + #[cfg_attr(feature = "std", serde(skip_serializing_if = "Option::is_none", default))] + pub payload_length: Option, +} +/// A type for requesting paginated messages. +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Default, Clone, Encode, Decode, PartialEq, Debug, TypeInfo, Eq)] +pub struct BlockPaginationRequest { + /// Starting block-number (inclusive). + pub from_block: BlockNumber, + /// Current page index starting from 0. + pub from_index: u32, + /// Ending block-number (exclusive). + pub to_block: BlockNumber, + /// The number of messages in a single page. + pub page_size: u32, +} + +impl BlockPaginationRequest { + /// Hard limit on the number of items per page that can be returned + pub const MAX_PAGE_SIZE: u32 = 10000; + /// Hard limit on the block range for a request (~7 days at 12 sec per block) + pub const MAX_BLOCK_RANGE: u32 = 50000; // ~3 days (6 sec per block)= ~7 days (12 sec per block) + + /// Helper function for request validation. + /// * Page size should not exceed MAX_PAGE_SIZE. + /// * Block range [from_block:to_block) should not exceed MAX_BLOCK_RANGE. + pub fn validate(&self) -> bool { + self.page_size > 0 && + self.page_size <= Self::MAX_PAGE_SIZE && + self.from_block < self.to_block && + self.to_block - self.from_block <= Self::MAX_BLOCK_RANGE + } +} + +/// A type for responding with a collection of paginated messages. +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Default, Clone, Encode, Decode, PartialEq, Debug, TypeInfo, Eq)] +pub struct BlockPaginationResponse { + /// Collection of messages for a given [`BlockPaginationRequest`]. + pub content: Vec, + /// Flag to indicate the end of paginated messages. + pub has_next: bool, + #[cfg_attr(feature = "std", serde(skip_serializing_if = "Option::is_none"))] + /// Flag to indicate the starting block number for the next page. + pub next_block: Option, + #[cfg_attr(feature = "std", serde(skip_serializing_if = "Option::is_none"))] + /// Flag to indicate the next index for the following request. + pub next_index: Option, +} + +impl BlockPaginationResponse { + /// Generates a new empty Pagination request + pub const fn new() -> BlockPaginationResponse { + BlockPaginationResponse { + content: vec![], + has_next: false, + next_block: None, + next_index: None, + } + } + + /// Checks if we are at the end of the pagination + /// if we are, update the response with the correct next information + pub fn check_end_condition_and_set_next_pagination( + &mut self, + block_number: BlockNumber, + current_index: u32, + list_size: u32, + request: &BlockPaginationRequest, + ) -> bool { + if self.content.len() as u32 == request.page_size { + let mut next_block = block_number; + let mut next_index = current_index + 1; + + // checking if it's end of current list + if next_index == list_size { + next_block = block_number + BlockNumber::one(); + next_index = 0; + } + + if next_block < request.to_block { + self.has_next = true; + self.next_block = Some(next_block); + self.next_index = Some(next_index); + } + return true + } + + false + } +} + +#[cfg(test)] +mod tests { + use crate::{ + messages::{BlockPaginationRequest, BlockPaginationResponse, MessageResponse}, + node::BlockNumber, + }; + + struct TestCase { + input: BlockPaginationRequest, + expected: T, + message: String, + } + + #[test] + fn as_hex_option_msg_ipfs_serialize_deserialize_test() { + // skip deserialize if Option::none works + let msg = MessageResponse { + payload: None, + msa_id: None, + provider_msa_id: 1, + index: 1, + block_number: 1, + cid: Some( + "bafkreidgvpkjawlxz6sffxzwgooowe5yt7i6wsyg236mfoks77nywkptdq" + .as_bytes() + .to_vec(), + ), + payload_length: Some(42), + }; + let serialized = serde_json::to_string(&msg).unwrap(); + assert_eq!(serialized, "{\"provider_msa_id\":1,\"index\":1,\"block_number\":1,\"cid\":\"bafkreidgvpkjawlxz6sffxzwgooowe5yt7i6wsyg236mfoks77nywkptdq\",\"payload_length\":42}"); + + let deserialized: MessageResponse = serde_json::from_str(&serialized).unwrap(); + assert_eq!(deserialized, msg); + } + + #[test] + fn as_hex_option_empty_payload_deserialize_as_default_value() { + let expected_msg = MessageResponse { + payload: None, + msa_id: Some(1), + provider_msa_id: 1, + index: 1, + block_number: 1, + cid: None, + payload_length: None, + }; + + // Notice Payload field is missing + let serialized_msg_without_payload = + "{\"provider_msa_id\":1,\"index\":1,\"block_number\":1,\"msa_id\":1}"; + + let deserialized_result: MessageResponse = + serde_json::from_str(serialized_msg_without_payload).unwrap(); + assert_eq!(deserialized_result, expected_msg); + } + + #[test] + fn block_pagination_request_validation_test() { + let test_cases: Vec> = vec![ + TestCase { + input: BlockPaginationRequest { from_block: 10, from_index: 0, to_block: 12, page_size: 1 }, + expected: true, + message: "Should be valid".to_string(), + }, + TestCase { + input: BlockPaginationRequest { from_block: 10, from_index: 0, to_block: 12, page_size: 0 }, + expected: false, + message: "Page with size 0 is invalid".to_string(), + }, + TestCase { + input: BlockPaginationRequest { from_block: 10, from_index: 0, to_block: 8, page_size: 1 }, + expected: false, + message: "from_block should be less than to_block".to_string(), + }, + TestCase { + input: BlockPaginationRequest { from_block: 10, from_index: 0, to_block: 8, page_size: 10000 + 1 }, + expected: false, + message: "page_size should be less than MAX_PAGE_SIZE".to_string(), + }, + TestCase { + input: BlockPaginationRequest { from_block: 1, from_index: 0, to_block: 50000 + 2, page_size: 1 }, + expected: false, + message: "the difference between from_block and to_block should be less than MAX_BLOCK_RANGE".to_string(), + }, + ]; + + for tc in test_cases { + assert_eq!(tc.expected, tc.input.validate(), "{}", tc.message); + } + } + + #[test] + fn check_end_condition_does_not_mutate_when_at_the_end() { + let mut resp = BlockPaginationResponse:: { + content: vec![1, 2, 3], + has_next: false, + next_block: None, + next_index: None, + }; + + let total_data_length: u32 = resp.content.len() as u32; + + let request = BlockPaginationRequest { + from_block: 1 as BlockNumber, + from_index: 0, + to_block: 5, + // Page is LARGER + page_size: total_data_length + 10, + }; + // We are at the LAST block + let current_block = 5; + // Index after content + let current_index = total_data_length - 1; + // Critical Bit: NO more data than index + let list_size = current_index; + let is_full = resp.check_end_condition_and_set_next_pagination( + current_block, + current_index, + list_size, + &request, + ); + // NOT FULL + assert!(!is_full); + // NOTHING MORE + assert!(!resp.has_next); + // None + assert_eq!(None, resp.next_block); + assert_eq!(None, resp.next_index); + } + + #[test] + fn check_end_condition_mutates_when_more_in_list_than_page() { + let mut resp = BlockPaginationResponse:: { + content: vec![1, 2, 3], + has_next: false, + next_block: None, + next_index: None, + }; + + let total_data_length: u32 = resp.content.len() as u32; + + let request = BlockPaginationRequest { + from_block: 1 as BlockNumber, + from_index: 0, + to_block: 5, + page_size: total_data_length, + }; + // We have not completed the block yet + let current_block = 1; + // End of the Block + let current_index = total_data_length - 1; + // Critical Bit: MORE Data to go in length than page_size + let list_size = total_data_length + 1; + let is_full = resp.check_end_condition_and_set_next_pagination( + current_block, + current_index, + list_size, + &request, + ); + assert!(is_full); + assert!(resp.has_next); + // SAME block + assert_eq!(Some(1), resp.next_block); + // NEXT index + assert_eq!(Some(current_index + 1), resp.next_index); + } + + #[test] + fn check_end_condition_mutates_when_more_than_page_but_none_left_in_block() { + let mut resp = BlockPaginationResponse:: { + content: vec![1, 2, 3], + has_next: false, + next_block: None, + next_index: None, + }; + + let total_data_length: u32 = resp.content.len() as u32; + + let request = BlockPaginationRequest { + from_block: 1 as BlockNumber, + from_index: 0, + to_block: 5, + page_size: total_data_length, + }; + // We have not completed the block yet + let current_block = 1; + // End of the Block + let current_index = total_data_length - 1; + // SAME in length than page_size + let list_size = total_data_length; + let is_full = resp.check_end_condition_and_set_next_pagination( + current_block, + current_index, + list_size, + &request, + ); + assert!(is_full); + assert!(resp.has_next); + // NEXT block + assert_eq!(Some(current_block + 1), resp.next_block); + // ZERO index + assert_eq!(Some(0), resp.next_index); + } +} diff --git a/common/primitives/src/msa.rs b/common/primitives/src/msa.rs new file mode 100644 index 0000000000..f5a5778a85 --- /dev/null +++ b/common/primitives/src/msa.rs @@ -0,0 +1,351 @@ +use frame_support::{dispatch::DispatchResult, traits::Get, BoundedBTreeMap, BoundedVec}; +use parity_scale_codec::{Decode, DecodeWithMemTracking, Encode, EncodeLike, Error, MaxEncodedLen}; +use scale_info::TypeInfo; +#[cfg(feature = "std")] +use serde::{Deserialize, Serialize}; +use sp_runtime::{ + traits::{AtLeast32BitUnsigned, Zero}, + DispatchError, MultiSignature, RuntimeDebug, +}; +extern crate alloc; +use alloc::vec::Vec; + +pub use crate::schema::SchemaId; + +/// Message Source Id or msaId is the unique identifier for Message Source Accounts +pub type MessageSourceId = u64; + +/// Ethereum address type alias +pub use sp_core::H160; + +/// Response type for getting Ethereum address as a 20-byte array and checksummed hex string +#[derive(TypeInfo, Encode, Decode)] +pub struct AccountId20Response { + /// Ethereum address as a 20-byte array + pub account_id: H160, + + /// Ethereum address as a checksummed 42-byte hex string (including 0x prefix) + pub account_id_checksummed: alloc::string::String, +} + +/// A DelegatorId an MSA Id serving the role of a Delegator. +/// Delegators delegate to Providers. +/// Encodes and Decodes as just a `u64` +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(TypeInfo, Default, Debug, Clone, Copy, PartialEq, MaxEncodedLen, Eq)] +pub struct DelegatorId(pub MessageSourceId); + +impl EncodeLike for DelegatorId {} + +impl Encode for DelegatorId { + fn encode(&self) -> Vec { + self.0.encode() + } +} + +impl DecodeWithMemTracking for DelegatorId {} + +impl Decode for DelegatorId { + fn decode( + input: &mut I, + ) -> Result { + match ::decode(input) { + Ok(x) => Ok(DelegatorId(x)), + _ => Err(Error::from("Could not decode DelegatorId")), + } + } +} + +impl From for DelegatorId { + fn from(t: MessageSourceId) -> Self { + DelegatorId(t) + } +} + +impl From for MessageSourceId { + fn from(t: DelegatorId) -> MessageSourceId { + t.0 + } +} + +/// RPC response for getting delegated providers with their permissions +#[cfg_attr(feature = "std", derive(Deserialize, Serialize))] +#[derive(TypeInfo, RuntimeDebug, Clone, Decode, Encode, MaxEncodedLen, Eq)] +pub struct DelegationResponse { + /// SchemaId of schema for which permission is/was granted + pub provider_id: ProviderId, + /// The list of schema permissions grants + pub permissions: Vec>, +} + +/// RPC response for getting schema permission grants +#[cfg_attr(feature = "std", derive(Deserialize, Serialize))] +#[derive(TypeInfo, RuntimeDebug, Clone, Decode, Encode, MaxEncodedLen, Eq)] +pub struct SchemaGrant { + /// SchemaId of schema for which permission is/was granted + pub schema_id: SchemaId, + /// Block number the permission was/will be revoked (0 = not revoked) + pub revoked_at: BlockNumber, +} + +impl PartialEq for DelegationResponse +where + SchemaId: PartialEq, + BlockNumber: PartialEq, +{ + fn eq(&self, other: &Self) -> bool { + self.provider_id == other.provider_id && self.permissions == other.permissions + } +} + +impl SchemaGrant { + /// Create a new SchemaGrant struct + pub fn new(schema_id: SchemaId, revoked_at: BlockNumber) -> Self { + SchemaGrant { schema_id, revoked_at } + } +} + +impl PartialEq for SchemaGrant +where + SchemaId: PartialEq, + BlockNumber: PartialEq, +{ + fn eq(&self, other: &Self) -> bool { + self.schema_id == other.schema_id && self.revoked_at == other.revoked_at + } +} + +/// Struct for the information of the relationship between an MSA and a Provider +#[derive(TypeInfo, RuntimeDebug, Clone, Decode, Encode, MaxEncodedLen, Eq)] +#[scale_info(skip_type_params(MaxSchemaGrantsPerDelegation))] +pub struct Delegation +where + MaxSchemaGrantsPerDelegation: Get, +{ + /// Block number the grant will be revoked. + pub revoked_at: BlockNumber, + /// Schemas that the provider is allowed to use for a delegated message. + pub schema_permissions: BoundedBTreeMap, +} + +// Cannot derive the PartialEq without a mess of impl PartialEq for MaxSchemaGrantsPerDelegation +impl PartialEq + for Delegation +where + SchemaId: PartialEq, + BlockNumber: PartialEq, + MaxSchemaGrantsPerDelegation: Get, +{ + fn eq(&self, other: &Self) -> bool { + self.revoked_at == other.revoked_at && self.schema_permissions == other.schema_permissions + } +} + +impl< + SchemaId: Ord + Default, + BlockNumber: Ord + Copy + Zero + AtLeast32BitUnsigned + Default, + MaxSchemaGrantsPerDelegation: Get, + > Default for Delegation +{ + /// Provides the default values for Delegation type. + fn default() -> Self { + Delegation { + revoked_at: BlockNumber::default(), + schema_permissions: BoundedBTreeMap::< + SchemaId, + BlockNumber, + MaxSchemaGrantsPerDelegation, + >::new(), + } + } +} + +/// Provider is the recipient of a delegation. +/// It is a subset of an MSA +/// Encodes and Decodes as just a `u64` +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(TypeInfo, Default, Debug, Clone, Copy, PartialEq, MaxEncodedLen, Eq)] +pub struct ProviderId(pub MessageSourceId); + +impl EncodeLike for ProviderId {} + +impl Encode for ProviderId { + fn encode(&self) -> Vec { + self.0.encode() + } +} + +impl DecodeWithMemTracking for ProviderId {} + +impl Decode for ProviderId { + fn decode( + input: &mut I, + ) -> Result { + match ::decode(input) { + Ok(x) => Ok(ProviderId(x)), + _ => Err(Error::from("Could not decode ProviderId")), + } + } +} + +impl From for ProviderId { + fn from(t: MessageSourceId) -> Self { + ProviderId(t) + } +} + +impl From for MessageSourceId { + fn from(t: ProviderId) -> MessageSourceId { + t.0 + } +} + +/// This is the metadata associated with a provider. As of now it is just a +/// name, but it will likely be expanded in the future +#[derive(MaxEncodedLen, TypeInfo, Debug, Clone, Decode, Encode, PartialEq, Eq)] +#[scale_info(skip_type_params(T))] +pub struct ProviderRegistryEntry +where + T: Get, +{ + /// The provider's name + pub provider_name: BoundedVec, +} + +/// The pointer value for the Signature Registry +#[derive(MaxEncodedLen, TypeInfo, Debug, Clone, Decode, Encode, PartialEq, Eq)] +pub struct SignatureRegistryPointer { + /// The newest signature that will be added to the registry when we get the next newest + pub newest: MultiSignature, + + /// Block number that `newest` expires at + pub newest_expires_at: BlockNumber, + + /// Pointer to the oldest signature in the list + pub oldest: MultiSignature, + + /// Count of signatures in the registry + /// Will eventually match the `MaxSignaturesStored`, but during initialization is needed to fill the list + pub count: u32, +} + +/// A behavior that allows looking up an MSA id +pub trait MsaLookup { + /// The association between key and MSA + type AccountId; + + /// Gets the MSA Id associated with this `AccountId` if any + fn get_msa_id(key: &Self::AccountId) -> Option; +} + +/// A behavior that allows for validating an MSA +pub trait MsaValidator { + /// The association between key and MSA + type AccountId; + + /// Check that a key is associated to an MSA and returns key information. + /// Returns a [`DispatchError`] if there is no MSA associated with the key + fn ensure_valid_msa_key(key: &Self::AccountId) -> Result; +} + +/// A behavior that allows for looking up delegator-provider relationships +pub trait ProviderLookup { + /// Type for block number. + type BlockNumber; + /// Type for maximum number of schemas that can be granted to a provider. + type MaxSchemaGrantsPerDelegation: Get; + /// Schema Id is the unique identifier for a Schema + type SchemaId; + + /// Gets the relationship information for this delegator, provider pair + fn get_delegation_of( + delegator: DelegatorId, + provider: ProviderId, + ) -> Option>; +} + +/// A behavior that allows for validating a delegator-provider relationship +pub trait DelegationValidator { + /// Type for block number. + type BlockNumber; + /// Type for maximum number of schemas that can be granted to a provider. + type MaxSchemaGrantsPerDelegation: Get; + /// Schema Id is the unique identifier for a Schema + type SchemaId; + + /// Validates that the delegator and provider have a relationship at this point + fn ensure_valid_delegation( + provider: ProviderId, + delegator: DelegatorId, + block_number: Option, + ) -> Result< + Delegation, + DispatchError, + >; +} + +/// A behavior that allows for validating a schema grant +pub trait SchemaGrantValidator { + /// Validates if the provider is allowed to use the particular schema id currently + fn ensure_valid_schema_grant( + provider_id: ProviderId, + delegator_id: DelegatorId, + schema_id: SchemaId, + block_number: BlockNumber, + ) -> DispatchResult; +} + +/// A trait that allows checking whether adding a key may be subsidized +pub trait MsaKeyProvider { + /// the type to use for looking up keys in storage. + type AccountId; + /// Returns whether adding `new_key` to `msa_id` may be subsidized + fn key_eligible_for_subsidized_addition( + old_key: Self::AccountId, + new_key: Self::AccountId, + msa_id: MessageSourceId, + ) -> bool; +} + +/// RPC Response for getting MSA keys +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(TypeInfo, Debug, Clone, Decode, Encode, PartialEq, Default, MaxEncodedLen)] +pub struct KeyInfoResponse { + /// The MSA associated with the `key` + pub msa_id: MessageSourceId, + /// The list of `AccountId` associated with the `msa_id` + pub msa_keys: Vec, +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn decoding_provider_id_failure() { + let mut da: &[u8] = b"\xf6\xf5"; + let decoded = DelegatorId::decode(&mut da); + assert!(decoded.is_err()); + } + + #[test] + fn decoding_provider_id_success() { + let val = 16777215_u64.encode(); + let decoded = ProviderId::decode(&mut &val[..]); + assert_eq!(decoded, Ok(ProviderId(16777215))) + } + + #[test] + fn decoding_delegate_id_failure() { + let mut da: &[u8] = b"\xf6\xf5"; + let decoded = DelegatorId::decode(&mut da); + assert!(decoded.is_err()); + } + + #[test] + fn decoding_delegator_id_success() { + let val = 42_u64.encode(); + let decoded = DelegatorId::decode(&mut &val[..]); + assert_eq!(decoded, Ok(DelegatorId(42))) + } +} diff --git a/common/primitives/src/node.rs b/common/primitives/src/node.rs new file mode 100644 index 0000000000..98c9a73581 --- /dev/null +++ b/common/primitives/src/node.rs @@ -0,0 +1,76 @@ +#![cfg_attr(not(feature = "std"), no_std)] +pub use sp_runtime::{ + generic, + traits::{BlakeTwo256, IdentifyAccount, Verify}, + DispatchError, MultiAddress, MultiSignature, OpaqueExtrinsic, +}; + +extern crate alloc; +use alloc::{boxed::Box, vec::Vec}; + +use crate::signatures::UnifiedSignature; +use frame_support::dispatch::DispatchResultWithPostInfo; + +/// Some way of identifying an account on the chain. We intentionally make it equivalent +/// to the public key of our transaction signing scheme. +pub type AccountId = <::Signer as IdentifyAccount>::AccountId; + +/// The address format for describing accounts. +pub type Address = MultiAddress; + +/// Balance is a generic type for the balance of an account. +pub type Balance = u128; + +/// Block type as expected by this runtime. +pub type Block = generic::Block; + +/// BlockId type as expected by this runtime. +pub type BlockId = generic::BlockId; + +/// An index to a block. +pub type BlockNumber = u32; + +/// Block header type as expected by this runtime. +pub type Header = generic::Header; + +/// Alias to 512-bit hash when used in the context of a transaction signature on the chain. +pub type Signature = UnifiedSignature; + +/// Index of a transaction in the chain. +pub type Index = u32; + +/// A hash of some data used by the chain. +pub type Hash = sp_core::H256; +/// The provider of a collective action interface, for example an instance of `pallet-collective`. +pub trait ProposalProvider { + /// Add a new proposal with a threshold number of council votes. + /// Returns a proposal length and active proposals count if successful. + fn propose( + who: AccountId, + threshold: u32, + proposal: Box, + ) -> Result<(u32, u32), DispatchError>; + + /// Add a new proposal with a simple majority (>50%) of council votes. + /// Returns a proposal length and active proposals count if successful. + fn propose_with_simple_majority( + who: AccountId, + proposal: Box, + ) -> Result<(u32, u32), DispatchError>; + + /// Get the number of proposals + #[cfg(any(feature = "runtime-benchmarks", feature = "test"))] + fn proposal_count() -> u32; +} + +/// The provider for interfacing into the Utility pallet. +pub trait UtilityProvider { + /// Passthrough into the Utility::batch_all call + fn batch_all(origin: Origin, calls: Vec) -> DispatchResultWithPostInfo; +} + +/// Trait that must be implemented to be able to encode the payload to eip-712 compatible signatures +pub trait EIP712Encode { + /// encodes the type without hashing it + fn encode_eip_712(&self) -> Box<[u8]>; +} diff --git a/common/primitives/src/offchain.rs b/common/primitives/src/offchain.rs new file mode 100644 index 0000000000..6832be216e --- /dev/null +++ b/common/primitives/src/offchain.rs @@ -0,0 +1,154 @@ +use crate::msa::MessageSourceId; +use numtoa::NumToA; +use parity_scale_codec::Decode; +#[cfg(feature = "std")] +use sp_externalities::ExternalitiesExt; +use sp_runtime::offchain::storage::{StorageRetrievalError, StorageValueRef}; +use sp_runtime_interface::runtime_interface; +extern crate alloc; +use alloc::vec::Vec; +use core::fmt::Debug; + +#[cfg(feature = "std")] +sp_externalities::decl_extension! { + /// Offchain worker custom extension + pub struct OcwCustomExt ( + // rpc address provided to offchain worker + Vec + ); +} + +/// runtime new customized +#[runtime_interface] +pub trait Custom: ExternalitiesExt { + /// another function + fn get_val(&mut self) -> Option> { + self.extension::().map(|ext| ext.0.clone()) + } +} +/// Lock expiration timeout in milli-seconds for msa pallet per msa account +pub const MSA_ACCOUNT_LOCK_TIMEOUT_EXPIRATION_MS: u64 = 50; +/// Lock name prefix for msa account +pub const MSA_ACCOUNT_LOCK_NAME_PREFIX: &[u8; 16] = b"Msa::ofw::lock::"; +/// Offchain storage prefix for msa account +pub const MSA_ACCOUNT_STORAGE_NAME_PREFIX: &[u8; 16] = b"Msa::ofw::keys::"; +/// msa account lock name +pub fn get_msa_account_lock_name(msa_id: MessageSourceId) -> Vec { + let mut buff = [0u8; 30]; + [MSA_ACCOUNT_LOCK_NAME_PREFIX, msa_id.numtoa(10, &mut buff)].concat() +} +/// msa account storage key name +pub fn get_msa_account_storage_key_name(msa_id: MessageSourceId) -> Vec { + let mut buff = [0u8; 30]; + [MSA_ACCOUNT_STORAGE_NAME_PREFIX, msa_id.numtoa(10, &mut buff)].concat() +} + +/// Locks the execution of the function +#[derive(Debug)] +pub enum LockStatus { + /// Lock is acquired + Locked, + /// Lock is released + Released, +} + +/// Wrapper for offchain get operations +pub fn get_index_value(key: &[u8]) -> Result, StorageRetrievalError> { + get_impl::(key) +} + +/// Gets a value by the key from persistent storage +fn get_impl(key: &[u8]) -> Result, StorageRetrievalError> { + let oci_mem = StorageValueRef::persistent(key); + match oci_mem.get::() { + Ok(Some(data)) => Ok(Some(data)), + Ok(None) => Ok(None), + Err(_) => Err(StorageRetrievalError::Undecodable), + } +} + +#[cfg(test)] +mod tests { + use super::*; + use sp_core::offchain::{testing, OffchainDbExt, OffchainWorkerExt}; + use sp_io::TestExternalities; + + #[test] + fn get_msa_account_lock_name_should_return_expected_value() { + let msa_id: MessageSourceId = 2_000_000; + let result = get_msa_account_lock_name(msa_id); + assert_eq!(result, b"Msa::ofw::lock::2000000".to_vec()); + } + + #[test] + fn get_msa_account_storage_name_should_return_expected_value() { + let msa_id: MessageSourceId = 2_000_000; + let result = get_msa_account_storage_key_name(msa_id); + assert_eq!(result, b"Msa::ofw::keys::2000000".to_vec()); + } + + #[test] + fn get_index_for_not_set_should_return_none() { + let (offchain, _state) = testing::TestOffchainExt::new(); + let mut t = TestExternalities::default(); + t.register_extension(OffchainDbExt::new(offchain.clone())); + t.register_extension(OffchainWorkerExt::new(offchain)); + + t.execute_with(|| { + let key = b"my_key"; + let result = get_index_value::(key); + assert_eq!(result, Ok(None)); + }); + } + + #[test] + fn get_index_for_set_should_return_expected() { + // arrange + let (offchain, _state) = testing::TestOffchainExt::new(); + let mut t = TestExternalities::default(); + t.register_extension(OffchainDbExt::new(offchain.clone())); + t.register_extension(OffchainWorkerExt::new(offchain)); + + t.execute_with(|| { + let key = b"my_key1"; + let msa_id: MessageSourceId = 1000000; + let oci_mem = StorageValueRef::persistent(key); + oci_mem.set(&msa_id); + + // act + let result = get_index_value::(key); + + // assert + assert_eq!(result, Ok(Some(msa_id))); + }); + } + + #[test] + fn get_index_for_not_decodable_should_return_error() { + let (offchain, _state) = testing::TestOffchainExt::new(); + let mut t = TestExternalities::default(); + t.register_extension(OffchainDbExt::new(offchain.clone())); + t.register_extension(OffchainWorkerExt::new(offchain)); + + #[derive(Debug, Decode, PartialEq)] + struct Testing { + pub a: u64, + pub b: u32, + pub c: u16, + } + + t.execute_with(|| { + // arrange + let key = b"my_key2"; + let msa_id: MessageSourceId = 1000000; + let oci_mem = StorageValueRef::persistent(key); + oci_mem.set(&msa_id); + + // act + let result = get_index_value::(key); + + // assert + assert_eq!(result, Err(StorageRetrievalError::Undecodable)); + }); + } +} diff --git a/common/primitives/src/parquet.rs b/common/primitives/src/parquet.rs new file mode 100644 index 0000000000..5b8e4c211f --- /dev/null +++ b/common/primitives/src/parquet.rs @@ -0,0 +1,22 @@ +extern crate alloc; +use alloc::vec::Vec; + +/// Importing all base types +pub mod base; +/// Importing column type +pub mod column; +/// Importing all compression codec types +pub mod column_compression_codec; +/// Importing all numeric types +pub mod numeric; +/// Importing all string types +pub mod string; +/// Importing all temporal types +pub mod temporal; +/// Importing all labels +pub mod types; + +use crate::parquet::column::ParquetColumn; + +/// Type for Parquet files. Files are just lists of columns. +pub type ParquetModel = Vec; diff --git a/common/primitives/src/parquet/base.rs b/common/primitives/src/parquet/base.rs new file mode 100644 index 0000000000..bdd6c1648d --- /dev/null +++ b/common/primitives/src/parquet/base.rs @@ -0,0 +1,21 @@ +use serde::{Deserialize, Serialize}; + +/// Base types +#[derive(Clone, PartialEq, Debug, Eq, Serialize, Deserialize)] +#[serde(rename_all = "SCREAMING_SNAKE_CASE")] +pub enum ParquetBaseType { + /// Encapsulates true / false values + Boolean, + /// Encapsulates 32 bit ints + Int32, + /// Encapsulates 64 bit ints + Int64, + /// Encapsulates floats + Float, + /// Encapsulates doubles + Double, + /// Encapsulates arrays + ByteArray, + /// Encapsulates fixed length arrays + FixedLenByteArray, +} diff --git a/common/primitives/src/parquet/column.rs b/common/primitives/src/parquet/column.rs new file mode 100644 index 0000000000..00a3ea76ea --- /dev/null +++ b/common/primitives/src/parquet/column.rs @@ -0,0 +1,30 @@ +/// The model for Parquet data +use scale_info::prelude::string::String; +use serde::{Deserialize, Serialize}; + +use crate::parquet::{column_compression_codec::ColumnCompressionCodec, types::ParquetType}; + +/// Encapsulation for a single Parquet column +#[derive(Clone, PartialEq, Debug, Eq, Serialize, Deserialize)] +pub struct ParquetColumn { + /// The label for what this column represents + name: String, + /// Parquet type labels + column_type: ParquetType, + /// Compression for column + compression: ColumnCompressionCodec, + /// Whether or not to use a bloom filter + bloom_filter: bool, +} + +impl ParquetColumn { + /// Creates instance of struct + pub fn new( + name: String, + column_type: ParquetType, + compression: ColumnCompressionCodec, + bloom_filter: bool, + ) -> ParquetColumn { + ParquetColumn { name, column_type, compression, bloom_filter } + } +} diff --git a/common/primitives/src/parquet/column_compression_codec.rs b/common/primitives/src/parquet/column_compression_codec.rs new file mode 100644 index 0000000000..3b9acaa25b --- /dev/null +++ b/common/primitives/src/parquet/column_compression_codec.rs @@ -0,0 +1,31 @@ +use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; +use scale_info::TypeInfo; +use serde::{Deserialize, Serialize}; + +/// Compression codecs: +#[derive( + Clone, Encode, Decode, PartialEq, Debug, TypeInfo, Eq, MaxEncodedLen, Serialize, Deserialize, +)] +#[serde(rename_all = "SCREAMING_SNAKE_CASE")] +pub enum ColumnCompressionCodec { + /// Uncompressed + Uncompressed, + /// Snappy, aka Zippy, compression + Snappy, + /// Gzip compression + Gzip, + /// Lempel-Zip-Obenhumer compression: + Lzo, + /// Brotli compression + Brotli, + /// Zstandard compression: + ZSTD, + /// Lz4 compression without block headers + Lz4Raw, +} + +impl Default for ColumnCompressionCodec { + fn default() -> Self { + Self::Uncompressed + } +} diff --git a/common/primitives/src/parquet/numeric.rs b/common/primitives/src/parquet/numeric.rs new file mode 100644 index 0000000000..4cfe56d45d --- /dev/null +++ b/common/primitives/src/parquet/numeric.rs @@ -0,0 +1,29 @@ +use serde::{Deserialize, Serialize}; + +/// Parquet numeric types: +#[derive(Clone, PartialEq, Debug, Eq, Serialize, Deserialize)] +#[serde(rename_all = "UPPERCASE")] +pub enum ParquetNumericType { + /// Integers + Integer(ParquetInteger), + /// Decimals + Decimal(ParquetDecimal), +} + +/// Parquet Integers +#[derive(Clone, PartialEq, Debug, Eq, Serialize, Deserialize)] +pub struct ParquetInteger { + /// The number of bits allocated to the parquet integer + pub bit_width: u8, + /// Whether the integer is signed + pub sign: bool, +} + +/// Parquet Decimals +#[derive(Clone, PartialEq, Debug, Eq, Serialize, Deserialize)] +pub struct ParquetDecimal { + scale: u8, + + // Note: in theory, precision is unbounded. But a u8 should be fine for practical cases + precision: u8, +} diff --git a/common/primitives/src/parquet/string.rs b/common/primitives/src/parquet/string.rs new file mode 100644 index 0000000000..1a4f5122f1 --- /dev/null +++ b/common/primitives/src/parquet/string.rs @@ -0,0 +1,13 @@ +use serde::{Deserialize, Serialize}; + +/// Parquet String types: +/// NOTE: We are not supporting ENUMs yet. + +#[derive(Clone, PartialEq, Debug, Eq, Serialize, Deserialize)] +#[serde(rename_all = "UPPERCASE")] +pub enum ParquetStringType { + /// Parquet strings + String, + /// Parquet UUIDs + UUID, +} diff --git a/common/primitives/src/parquet/temporal.rs b/common/primitives/src/parquet/temporal.rs new file mode 100644 index 0000000000..444217e559 --- /dev/null +++ b/common/primitives/src/parquet/temporal.rs @@ -0,0 +1,41 @@ +use serde::{Deserialize, Serialize}; + +/// Parquet temporal types: +#[derive(Clone, PartialEq, Debug, Eq, Serialize, Deserialize)] +#[serde(rename_all = "UPPERCASE")] +pub enum ParquetTemporalType { + /// Parquet dates + Date, + /// Parquet intervals: + Interval, + /// Time + Time(ParquetTime), + /// Timestamps + Timestamp(ParquetTimestamp), +} + +/// Parquet time: +#[derive(Clone, PartialEq, Debug, Eq, Serialize, Deserialize)] +pub struct ParquetTime { + is_adjusted_to_utc: bool, + unit: ParquetTimeUnit, +} + +/// Parquet timestamps: +#[derive(Clone, PartialEq, Debug, Eq, Serialize, Deserialize)] +pub struct ParquetTimestamp { + is_adjusted_to_utc: bool, + unit: ParquetTimeUnit, +} + +/// Units of time +#[derive(Clone, PartialEq, Debug, Eq, Serialize, Deserialize)] +#[serde(rename_all = "UPPERCASE")] +enum ParquetTimeUnit { + /// Millisecond precision for time: + Millis, + /// Microsecond precision for time: + Micros, + /// Manosecond precision for time: + Nanos, +} diff --git a/common/primitives/src/parquet/types.rs b/common/primitives/src/parquet/types.rs new file mode 100644 index 0000000000..be41508a57 --- /dev/null +++ b/common/primitives/src/parquet/types.rs @@ -0,0 +1,27 @@ +use serde::{Deserialize, Serialize}; + +use crate::parquet::base::ParquetBaseType; + +use crate::parquet::{ + numeric::ParquetNumericType, string::ParquetStringType, temporal::ParquetTemporalType, +}; + +/// Encapsulates label types for Parquet +#[derive(Clone, PartialEq, Debug, Eq, Serialize, Deserialize)] +#[serde(untagged)] +pub enum ParquetType { + /// Base types (bool, int, etc) + BaseType(ParquetBaseType), + /// Strings + StringType(ParquetStringType), + /// Numbers + NumericType(ParquetNumericType), + /// Time + TemporalType(ParquetTemporalType), +} + +impl Default for ParquetType { + fn default() -> Self { + Self::BaseType(ParquetBaseType::Boolean) + } +} diff --git a/common/primitives/src/rpc.rs b/common/primitives/src/rpc.rs new file mode 100644 index 0000000000..dc3b985472 --- /dev/null +++ b/common/primitives/src/rpc.rs @@ -0,0 +1,104 @@ +#[cfg(feature = "std")] +use crate::utils::as_hex; +#[cfg(feature = "std")] +use serde::{Deserialize, Serialize}; + +use frame_system::{EventRecord, Phase}; +use parity_scale_codec::{Codec, Decode, DecodeWithMemTracking, Encode, EncodeLike}; +use scale_info::TypeInfo; +extern crate alloc; +use alloc::vec::Vec; +use core::fmt::Debug; + +/// The Struct for the getEvents RPC +/// This handles the Scale encoding of ONLY the event +/// Making a standardized and easy way to get events only caring about +/// the SCALE types of the events you care about +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Debug, TypeInfo, Clone, Encode, Decode, PartialEq, Eq)] +pub struct RpcEvent { + /// Which extrinsic call/Aka block index + /// A None here means that it was in the Initialization or Finalization Phase + pub phase: Option, + /// Pallet index from the runtime + pub pallet: u8, + /// Index of the Event from the Pallet + pub event: u8, + /// The data of just the event SCALE Encoded + #[cfg_attr(feature = "std", serde(with = "as_hex",))] + pub data: Vec, +} + +impl From> for RpcEvent +where + RuntimeEvent: DecodeWithMemTracking + + Codec + + Sync + + Send + + TypeInfo + + Debug + + Eq + + Clone + + EncodeLike + + 'static, +{ + fn from(event: EventRecord) -> Self { + let phase = match event.phase { + Phase::ApplyExtrinsic(i) => Some(i), + _ => None, + }; + + // This requires that SCALE encoding does NOT change how it encodes u8s and indexes on enums + let full_encoding = Encode::encode(&event.event); + let pallet = full_encoding[0]; + let event = full_encoding[1]; + let data = &full_encoding[2..]; + + RpcEvent { phase, pallet, event, data: data.to_vec() } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[derive(Debug, TypeInfo, Clone, Encode, Decode, DecodeWithMemTracking, Eq, PartialEq)] + enum FakeRuntime { + #[codec(index = 60)] + FakePallet(FakePalletEvents), + } + + #[derive(Debug, TypeInfo, Clone, Encode, Decode, DecodeWithMemTracking, Eq, PartialEq)] + enum FakePalletEvents { + #[codec(index = 7)] + FakeEvent { msa_id: u64 }, + } + + #[test] + fn rpc_event_from_event_record() { + let event: EventRecord = EventRecord { + phase: Phase::ApplyExtrinsic(5), + event: FakeRuntime::FakePallet(FakePalletEvents::FakeEvent { msa_id: 42 }), + topics: vec![], + }; + let rpc_event: RpcEvent = event.into(); + assert_eq!( + rpc_event, + RpcEvent { phase: Some(5), pallet: 60, event: 7, data: vec![42, 0, 0, 0, 0, 0, 0, 0] } + ); + } + + #[test] + fn rpc_event_from_event_record_with_different_phase() { + let event: EventRecord = EventRecord { + phase: Phase::Finalization, + event: FakeRuntime::FakePallet(FakePalletEvents::FakeEvent { msa_id: 42 }), + topics: vec![], + }; + let rpc_event: RpcEvent = event.into(); + assert_eq!( + rpc_event, + RpcEvent { phase: None, pallet: 60, event: 7, data: vec![42, 0, 0, 0, 0, 0, 0, 0] } + ); + } +} diff --git a/common/primitives/src/schema.rs b/common/primitives/src/schema.rs new file mode 100644 index 0000000000..df807734d6 --- /dev/null +++ b/common/primitives/src/schema.rs @@ -0,0 +1,201 @@ +extern crate alloc; +use crate::impl_codec_bitflags; +#[cfg(feature = "std")] +use crate::utils; +use alloc::{vec, vec::Vec}; +use enumflags2::{bitflags, BitFlags}; +use parity_scale_codec::{Decode, DecodeWithMemTracking, Encode, EncodeLike, MaxEncodedLen}; +use scale_info::{build::Fields, meta_type, Path, Type, TypeInfo, TypeParameter}; +use serde::{Deserialize, Serialize}; +use sp_runtime::RuntimeDebug; +#[cfg(feature = "std")] +use utils::*; + +/// Schema Id is the unique identifier for a Schema +pub type SchemaId = u16; + +/// Schema version number +pub type SchemaVersion = u8; + +/// Types of modeling in which a message payload may be defined +#[derive( + Copy, + Clone, + Encode, + Decode, + DecodeWithMemTracking, + PartialEq, + Debug, + TypeInfo, + Eq, + MaxEncodedLen, + Serialize, + Deserialize, +)] +pub enum ModelType { + /// Message payload modeled with Apache Avro: + AvroBinary, + /// Message payload modeled with Apache Parquet: + Parquet, +} + +/// Types of payload locations +#[derive( + Copy, + Clone, + Encode, + Decode, + DecodeWithMemTracking, + PartialEq, + Debug, + TypeInfo, + Eq, + MaxEncodedLen, + Serialize, + Deserialize, +)] +pub enum PayloadLocation { + /// Message payload is located on chain + OnChain, + /// Message payload is located on IPFS + IPFS, + /// Itemized payload location for onchain storage in itemized form + Itemized, + /// Paginated payload location for onchain storage in paginated form + Paginated, +} + +/// Support for up to 16 user-enabled features on a collection. +#[bitflags] +#[repr(u16)] +#[derive( + Copy, + Clone, + RuntimeDebug, + PartialEq, + Eq, + Encode, + Decode, + DecodeWithMemTracking, + MaxEncodedLen, + TypeInfo, + Serialize, + Deserialize, +)] +pub enum SchemaSetting { + /// Schema setting to enforce append-only behavior on payload. + /// Applied to schemas of type `PayloadLocation::Itemized`. + AppendOnly, + /// Schema may enforce signature requirement on payload. + /// Applied to schemas of type `PayloadLocation::Itemized` or `PayloadLocation::Paginated`. + SignatureRequired, +} + +/// Wrapper type for `BitFlags` that implements `Codec`. +#[derive(Clone, Copy, PartialEq, Eq, Default, RuntimeDebug)] +pub struct SchemaSettings(pub BitFlags); + +/// RPC Response form for a Schema +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Clone, Encode, Decode, PartialEq, Debug, TypeInfo, Eq)] +pub struct SchemaResponse { + /// The unique identifier for this Schema + pub schema_id: SchemaId, + /// The data that represents how this schema is structured + #[cfg_attr(feature = "std", serde(with = "as_string"))] + pub model: Vec, + /// The model format type for how the schema model is represented + pub model_type: ModelType, + /// The payload location + pub payload_location: PayloadLocation, + /// grants for the schema + pub settings: Vec, +} + +/// RPC Response form for a Schema Info +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Clone, Encode, Decode, PartialEq, Debug, TypeInfo, Eq)] +pub struct SchemaInfoResponse { + /// The unique identifier for this Schema + pub schema_id: SchemaId, + /// The model format type for how the schema model is represented + pub model_type: ModelType, + /// The payload location + pub payload_location: PayloadLocation, + /// grants for the schema + pub settings: Vec, +} + +/// This allows other pallets to resolve Schema information. With generic SchemaId +pub trait SchemaProvider { + /// Gets the Schema details associated with this `SchemaId` if any + fn get_schema_by_id(schema_id: SchemaId) -> Option; + + /// Gets the Schema Info associated with this `SchemaId` if any + fn get_schema_info_by_id(schema_id: SchemaId) -> Option; +} + +/// This allows other Pallets to check validity of schema ids. +pub trait SchemaValidator { + /// Checks that a collection of SchemaIds are all valid + fn are_all_schema_ids_valid(schema_ids: &[SchemaId]) -> bool; + + /// Set the schema counter for testing purposes. + #[cfg(any(feature = "std", feature = "runtime-benchmarks", test))] + fn set_schema_count(n: SchemaId); +} + +impl SchemaSettings { + /// Returns new SchemaSettings with all settings disabled + pub fn all_disabled() -> Self { + Self(BitFlags::EMPTY) + } + /// Get all setting enabled + pub fn get_enabled(&self) -> BitFlags { + self.0 + } + /// Check if a setting is enabled + pub fn is_enabled(&self, grant: SchemaSetting) -> bool { + self.0.contains(grant) + } + /// Enable a setting + pub fn set(&mut self, grant: SchemaSetting) { + self.0.insert(grant) + } + /// Copy the settings from a BitFlags + pub fn from(settings: BitFlags) -> Self { + Self(settings) + } +} +impl_codec_bitflags!(SchemaSettings, u16, SchemaSetting); + +/// RPC Response from a schema name query +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Clone, Encode, Decode, PartialEq, Debug, TypeInfo, Eq)] +pub struct SchemaVersionResponse { + /// Schema name in following format: namespace.descriptor + #[cfg_attr(feature = "std", serde(with = "as_string"))] + pub schema_name: Vec, + /// The version for this schema + pub schema_version: SchemaVersion, + /// The unique identifier for this Schema + pub schema_id: SchemaId, +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn schema_settings_when_disabled_has_no_enabled() { + let settings = SchemaSettings::all_disabled(); + assert_eq!(settings.get_enabled(), BitFlags::EMPTY); + } + + #[test] + fn schema_settings_set_from_all_enabled_check() { + let settings = SchemaSettings::from(BitFlags::ALL); + assert!(settings.is_enabled(SchemaSetting::AppendOnly)); + assert!(settings.is_enabled(SchemaSetting::SignatureRequired)); + } +} diff --git a/common/primitives/src/signatures.rs b/common/primitives/src/signatures.rs new file mode 100644 index 0000000000..81e89c52fe --- /dev/null +++ b/common/primitives/src/signatures.rs @@ -0,0 +1,625 @@ +#![cfg_attr(not(feature = "std"), no_std)] +#[cfg(feature = "serde")] +use frame_support::{Deserialize, Serialize}; +use frame_support::{ + __private::{codec, RuntimeDebug}, + pallet_prelude::{Decode, Encode, MaxEncodedLen, TypeInfo}, +}; +use lazy_static::lazy_static; +use parity_scale_codec::{alloc::string::ToString, DecodeWithMemTracking}; +use sp_core::{ + bytes::from_hex, + crypto, + crypto::{AccountId32, FromEntropy}, + ecdsa, ed25519, + hexdisplay::HexDisplay, + sr25519, ByteArray, H256, +}; +use sp_runtime::{ + traits, + traits::{Lazy, Verify}, + MultiSignature, +}; +extern crate alloc; +use crate::{msa::H160, utils::to_abi_compatible_number}; +use alloc::boxed::Box; + +/// Ethereum message prefix eip-191 +const ETHEREUM_MESSAGE_PREFIX: &[u8; 26] = b"\x19Ethereum Signed Message:\n"; + +/// A trait that allows mapping of raw bytes to AccountIds +pub trait AccountAddressMapper { + /// mapping to the desired address + fn to_account_id(public_key_or_address: &[u8]) -> AccountId; + + /// mapping to bytes of a public key or an address + fn to_bytes32(public_key_or_address: &[u8]) -> [u8; 32]; + + /// reverses an accountId to it's 20 byte ethereum address + fn to_ethereum_address(account_id: AccountId) -> H160; + + /// returns whether `account_id` converts to a valid Ethereum address + fn is_ethereum_address(account_id: &AccountId) -> bool; +} + +/// converting raw address bytes to 32 bytes Ethereum compatible addresses +pub struct EthereumAddressMapper; + +impl AccountAddressMapper for EthereumAddressMapper { + fn to_account_id(public_key_or_address: &[u8]) -> AccountId32 { + Self::to_bytes32(public_key_or_address).into() + } + + /// In this function we are trying to convert different types of valid identifiers to valid + /// Substrate supported 32 bytes AccountIds + /// ref: + /// This function have 4 types of valid inputs + /// 1. 20 byte ETH address which gets appended with 12 bytes of 0xEE + /// 2. 32 byte address is returned unchanged + /// 3. 64 bytes Secp256k1 public key is converted to ETH address based on and appended 12 bytes of 0xEE + /// 4. 65 bytes Secp256k1 public key is also converted to ETH address after skipping first byte and appended 12 bytes of 0xEE + /// Anything else is invalid and would return default (all zeros) 32 bytes. + fn to_bytes32(public_key_or_address: &[u8]) -> [u8; 32] { + let mut hashed = [0u8; 32]; + match public_key_or_address.len() { + 20 => { + hashed[..20].copy_from_slice(public_key_or_address); + }, + 32 => { + hashed[..].copy_from_slice(public_key_or_address); + return hashed; + }, + 64 => { + let hashed_full = sp_io::hashing::keccak_256(public_key_or_address); + // Copy bytes 12..32 (20 bytes) from hashed_full to the beginning of hashed + hashed[..20].copy_from_slice(&hashed_full[12..]); + }, + 65 => { + let hashed_full = sp_io::hashing::keccak_256(&public_key_or_address[1..]); + // Copy bytes 12..32 (20 bytes) from hashed_full to the beginning of hashed + hashed[..20].copy_from_slice(&hashed_full[12..]); + }, + _ => { + log::error!("Invalid public key size provided for {:?}", public_key_or_address); + return [0u8; 32]; + }, + }; + + // Fill the rest (12 bytes) with 0xEE + hashed[20..].fill(0xEE); + hashed + } + + fn to_ethereum_address(account_id: AccountId32) -> H160 { + let mut eth_address = [0u8; 20]; + if Self::is_ethereum_address(&account_id) { + eth_address[..].copy_from_slice(&account_id.as_slice()[0..20]); + } else { + log::error!("Incompatible ethereum account id is provided {:?}", account_id); + } + eth_address.into() + } + + fn is_ethereum_address(account_id: &AccountId32) -> bool { + account_id.as_slice()[20..] == *[0xEE; 12].as_slice() + } +} + +/// Signature verify that can work with any known signature types. +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] +#[derive( + Eq, + PartialEq, + Clone, + Encode, + Decode, + DecodeWithMemTracking, + MaxEncodedLen, + RuntimeDebug, + TypeInfo, +)] +pub enum UnifiedSignature { + /// An Ed25519 signature. + Ed25519(ed25519::Signature), + /// An Sr25519 signature. + Sr25519(sr25519::Signature), + /// An ECDSA/SECP256k1 signature compatible with Ethereum + Ecdsa(ecdsa::Signature), +} + +impl From for UnifiedSignature { + fn from(x: ed25519::Signature) -> Self { + Self::Ed25519(x) + } +} + +impl TryFrom for ed25519::Signature { + type Error = (); + fn try_from(m: UnifiedSignature) -> Result { + if let UnifiedSignature::Ed25519(x) = m { + Ok(x) + } else { + Err(()) + } + } +} + +impl From for UnifiedSignature { + fn from(x: sr25519::Signature) -> Self { + Self::Sr25519(x) + } +} + +impl TryFrom for sr25519::Signature { + type Error = (); + fn try_from(m: UnifiedSignature) -> Result { + if let UnifiedSignature::Sr25519(x) = m { + Ok(x) + } else { + Err(()) + } + } +} + +impl From for UnifiedSignature { + fn from(x: ecdsa::Signature) -> Self { + Self::Ecdsa(x) + } +} + +impl TryFrom for ecdsa::Signature { + type Error = (); + fn try_from(m: UnifiedSignature) -> Result { + if let UnifiedSignature::Ecdsa(x) = m { + Ok(x) + } else { + Err(()) + } + } +} + +impl Verify for UnifiedSignature { + type Signer = UnifiedSigner; + fn verify>(&self, msg: L, signer: &AccountId32) -> bool { + match (self, signer) { + (Self::Ed25519(ref sig), who) => match ed25519::Public::from_slice(who.as_ref()) { + Ok(signer) => sig.verify(msg, &signer), + Err(()) => false, + }, + (Self::Sr25519(ref sig), who) => match sr25519::Public::from_slice(who.as_ref()) { + Ok(signer) => sig.verify(msg, &signer), + Err(()) => false, + }, + (Self::Ecdsa(ref sig), who) => check_ethereum_signature(sig, msg, who), + } + } +} + +/// Public key for any known crypto algorithm. +#[derive(Eq, PartialEq, Ord, PartialOrd, Clone, Encode, Decode, RuntimeDebug, TypeInfo)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] +pub enum UnifiedSigner { + /// An Ed25519 identity. + Ed25519(ed25519::Public), + /// An Sr25519 identity. + Sr25519(sr25519::Public), + /// An SECP256k1/ECDSA identity (12 bytes of zeros + 20 bytes of ethereum address). + Ecdsa(ecdsa::Public), +} + +impl FromEntropy for UnifiedSigner { + fn from_entropy(input: &mut impl codec::Input) -> Result { + Ok(match input.read_byte()? % 3 { + 0 => Self::Ed25519(FromEntropy::from_entropy(input)?), + 1 => Self::Sr25519(FromEntropy::from_entropy(input)?), + 2.. => Self::Ecdsa(FromEntropy::from_entropy(input)?), + }) + } +} + +/// NOTE: This implementations is required by `SimpleAddressDeterminer`, +/// we convert the hash into some AccountId, it's fine to use any scheme. +impl> crypto::UncheckedFrom for UnifiedSigner { + fn unchecked_from(x: T) -> Self { + ed25519::Public::unchecked_from(x.into()).into() + } +} + +impl AsRef<[u8]> for UnifiedSigner { + fn as_ref(&self) -> &[u8] { + match *self { + Self::Ed25519(ref who) => who.as_ref(), + Self::Sr25519(ref who) => who.as_ref(), + Self::Ecdsa(ref who) => who.as_ref(), + } + } +} + +impl traits::IdentifyAccount for UnifiedSigner { + type AccountId = AccountId32; + fn into_account(self) -> AccountId32 { + match self { + Self::Ed25519(who) => <[u8; 32]>::from(who).into(), + Self::Sr25519(who) => <[u8; 32]>::from(who).into(), + Self::Ecdsa(who) => { + let decompressed_result = libsecp256k1::PublicKey::parse_slice( + who.as_ref(), + Some(libsecp256k1::PublicKeyFormat::Compressed), + ); + match decompressed_result { + Ok(public_key) => { + // calculating ethereum address compatible with `pallet-revive` + let decompressed = public_key.serialize(); + EthereumAddressMapper::to_account_id(&decompressed) + }, + Err(_) => { + log::error!("Invalid compressed public key provided"); + AccountId32::new([0u8; 32]) + }, + } + }, + } + } +} + +impl From for UnifiedSigner { + fn from(x: ed25519::Public) -> Self { + Self::Ed25519(x) + } +} + +impl TryFrom for ed25519::Public { + type Error = (); + fn try_from(m: UnifiedSigner) -> Result { + if let UnifiedSigner::Ed25519(x) = m { + Ok(x) + } else { + Err(()) + } + } +} + +impl From for UnifiedSigner { + fn from(x: sr25519::Public) -> Self { + Self::Sr25519(x) + } +} + +impl TryFrom for sr25519::Public { + type Error = (); + fn try_from(m: UnifiedSigner) -> Result { + if let UnifiedSigner::Sr25519(x) = m { + Ok(x) + } else { + Err(()) + } + } +} + +impl From for UnifiedSigner { + fn from(x: ecdsa::Public) -> Self { + Self::Ecdsa(x) + } +} + +impl TryFrom for ecdsa::Public { + type Error = (); + fn try_from(m: UnifiedSigner) -> Result { + if let UnifiedSigner::Ecdsa(x) = m { + Ok(x) + } else { + Err(()) + } + } +} + +#[cfg(feature = "std")] +impl std::fmt::Display for UnifiedSigner { + fn fmt(&self, fmt: &mut std::fmt::Formatter) -> std::fmt::Result { + match *self { + Self::Ed25519(ref who) => write!(fmt, "ed25519: {}", who), + Self::Sr25519(ref who) => write!(fmt, "sr25519: {}", who), + Self::Ecdsa(ref who) => write!(fmt, "ecdsa: {}", who), + } + } +} + +impl Into for MultiSignature { + fn into(self: MultiSignature) -> UnifiedSignature { + match self { + MultiSignature::Ed25519(who) => UnifiedSignature::Ed25519(who), + MultiSignature::Sr25519(who) => UnifiedSignature::Sr25519(who), + MultiSignature::Ecdsa(who) => UnifiedSignature::Ecdsa(who), + } + } +} + +fn check_secp256k1_signature(signature: &[u8; 65], msg: &[u8; 32], signer: &AccountId32) -> bool { + match sp_io::crypto::secp256k1_ecdsa_recover(signature, msg) { + Ok(pubkey) => { + let hashed = EthereumAddressMapper::to_bytes32(&pubkey); + log::debug!(target:"ETHEREUM", "eth hashed={:?} signer={:?}", + HexDisplay::from(&hashed),HexDisplay::from(>::as_ref(signer)), + ); + &hashed == >::as_ref(signer) + }, + _ => false, + } +} + +fn eth_message_hash(message: &[u8]) -> [u8; 32] { + let only_len = (message.len() as u32).to_string().into_bytes(); + let concatenated = [ETHEREUM_MESSAGE_PREFIX.as_slice(), only_len.as_slice(), message].concat(); + log::debug!(target:"ETHEREUM", "prefixed {:?}",concatenated); + sp_io::hashing::keccak_256(concatenated.as_slice()) +} + +fn check_ethereum_signature>( + signature: &ecdsa::Signature, + mut msg: L, + signer: &AccountId32, +) -> bool { + let verify_signature = |signature: &[u8; 65], payload: &[u8; 32], signer: &AccountId32| { + check_secp256k1_signature(signature, payload, signer) + }; + + // signature of ethereum prefixed message eip-191 + let message_prefixed = eth_message_hash(msg.get()); + if verify_signature(signature.as_ref(), &message_prefixed, signer) { + return true + } + + // PolkadotJs raw payload signatures + // or Ethereum based EIP-712 compatible signatures + let hashed = sp_io::hashing::keccak_256(msg.get()); + verify_signature(signature.as_ref(), &hashed, signer) +} + +/// returns the ethereum encoded prefix and domain separator for EIP-712 signatures +pub fn get_eip712_encoding_prefix(verifier_contract_address: &str) -> Box<[u8]> { + lazy_static! { + // domain separator + static ref DOMAIN_TYPE_HASH: [u8; 32] = sp_io::hashing::keccak_256( + b"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)", + ); + + static ref DOMAIN_NAME: [u8; 32] = sp_io::hashing::keccak_256(b"Frequency"); + static ref DOMAIN_VERSION: [u8; 32] = sp_io::hashing::keccak_256(b"1"); + // TODO: USE correct chain ids for different networks + static ref CHAIN_ID: [u8; 32] = to_abi_compatible_number(420420420u32); + } + let verifier_contract: [u8; 20] = from_hex(verifier_contract_address) + .unwrap_or_default() + .try_into() + .unwrap_or_default(); + + // eip-712 prefix 0x1901 + let eip_712_prefix = [25, 1]; + + let mut zero_prefixed_verifier_contract = [0u8; 32]; + zero_prefixed_verifier_contract[12..].copy_from_slice(&verifier_contract); + + let domain_separator = sp_io::hashing::keccak_256( + &[ + DOMAIN_TYPE_HASH.as_slice(), + DOMAIN_NAME.as_slice(), + DOMAIN_VERSION.as_slice(), + CHAIN_ID.as_slice(), + &zero_prefixed_verifier_contract, + ] + .concat(), + ); + let combined = [eip_712_prefix.as_slice(), domain_separator.as_slice()].concat(); + combined.into_boxed_slice() +} + +#[cfg(test)] +mod tests { + use crate::{ + handles::ClaimHandlePayload, + node::EIP712Encode, + signatures::{UnifiedSignature, UnifiedSigner}, + }; + use impl_serde::serialize::from_hex; + use sp_core::{ecdsa, sr25519, Pair}; + use sp_runtime::{ + traits::{IdentifyAccount, Verify}, + AccountId32, + }; + + use super::{AccountAddressMapper, EthereumAddressMapper}; + + #[test] + fn polkadot_ecdsa_should_not_work_due_to_using_wrong_hash() { + let msg = &b"test-message"[..]; + let (pair, _) = ecdsa::Pair::generate(); + + let signature = pair.sign(msg); + let unified_sig = UnifiedSignature::from(signature); + let unified_signer = UnifiedSigner::from(pair.public()); + assert!(!unified_sig.verify(msg, &unified_signer.into_account())); + } + + #[test] + fn ethereum_prefixed_eip191_signatures_should_work() { + // payload is random and the signature is generated over that payload by a standard EIP-191 signer + let payload = b"test eip-191 message payload"; + let signature_raw = from_hex("0x276dcc9c69da24dd8441ba3acc9b60d8aae0cb39f0bc5ad92c723a31bf11575031d860978280191a0a97a1f74336ca0c79a8b1b3aab013fb58a27f113b73b2081b").expect("Should convert"); + let unified_signature = UnifiedSignature::from(ecdsa::Signature::from_raw( + signature_raw.try_into().expect("should convert"), + )); + + let public_key = ecdsa::Public::from_raw( + from_hex("0x03be5b145e12c5fb95151374ed919eb445ade57637d729dd2d73bf161d4bc10329") + .expect("should convert") + .try_into() + .expect("invalid size"), + ); + let unified_signer = UnifiedSigner::from(public_key); + assert!(unified_signature.verify(&payload[..], &unified_signer.into_account())); + } + + #[test] + fn ethereum_raw_signatures_should_work() { + // payload is random and the signature is generated over that payload by PolkadotJs and ethereum keypair + let payload = from_hex("0x0a0300e659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e028c7d0a3500000000830000000100000026c1147602cf6557f4e0068a78cd4b22b6f6b03e106d05618cde8537e4ffe454b63f7774106903a22684c02eeebe2fdc903ac945bf25962fd9d05e7e0ddfb44f00").expect("Should convert"); + let signature_raw = from_hex("0xd740c8294967b36236c5e05861a55bad75d0866c4a6f63d4918a39769a9582b872299a3411cc0f31b5f631261d669fc21ce427ee23999a91df5f0e74dfbbfc6c00").expect("Should convert"); + let unified_signature = UnifiedSignature::from(ecdsa::Signature::from_raw( + signature_raw.try_into().expect("should convert"), + )); + + let public_key = ecdsa::Public::from_raw( + from_hex("0x025b107c7f38d5ac7d618e626f9fa57eec683adf373b1352cd20e5e5c684747079") + .expect("should convert") + .try_into() + .expect("invalid size"), + ); + let unified_signer = UnifiedSigner::from(public_key); + assert!(unified_signature.verify(&payload[..], &unified_signer.into_account())); + } + + #[test] + fn ethereum_eip712_signatures_for_claim_handle_payload_should_work() { + let payload = ClaimHandlePayload { base_handle: b"Alice".to_vec(), expiration: 100u32 }; + let encoded_payload = payload.encode_eip_712(); + + // following signature is generated via Metamask using the same input to check compatibility + let signature_raw = from_hex("0x832d1f6870118f5fc6e3cc314152b87dc452bd607581f16b1e39142b553260f8397e80c9f7733aecf1bd46d4e84ad333c648e387b069fa93b4b1ca4fa0fd406b1c").expect("Should convert"); + let unified_signature = UnifiedSignature::from(ecdsa::Signature::from_raw( + signature_raw.try_into().expect("should convert"), + )); + + // Non-compressed public key associated with the keypair used in Metamask + // 0x509540919faacf9ab52146c9aa40db68172d83777250b28e4679176e49ccdd9fa213197dc0666e85529d6c9dda579c1295d61c417f01505765481e89a4016f02 + let public_key = ecdsa::Public::from_raw( + from_hex("0x02509540919faacf9ab52146c9aa40db68172d83777250b28e4679176e49ccdd9f") + .expect("should convert") + .try_into() + .expect("invalid size"), + ); + let unified_signer = UnifiedSigner::from(public_key); + assert!(unified_signature.verify(&encoded_payload[..], &unified_signer.into_account())); + } + + #[test] + fn ethereum_invalid_signatures_should_fail() { + let payload = from_hex("0x0a0300e659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e028c7d0a3500000000830000000100000026c1147602cf6557f4e0068a78cd4b22b6f6b03e106d05618cde8537e4ffe4548de1bcb12a1d42e58b218a7abb03cb629111625cf3449640d837c5aa98b87d8e00").expect("Should convert"); + let signature_raw = from_hex("0x9633e747bcd951bdb9d98ff84c65562e1f62bd059c578a942859e1695f2472aa0dbaab48c28f6dbc795baa73c27252d97e8dc2170fd7d69694d5cd1863fb968c01").expect("Should convert"); + let unified_signature = UnifiedSignature::from(ecdsa::Signature::from_raw( + signature_raw.try_into().expect("should convert"), + )); + + let public_key = ecdsa::Public::from_raw( + from_hex("0x025b107c7f38d5ac7d618e626f9fa57eec683adf373b1352cd20e5e5c684747079") + .expect("should convert") + .try_into() + .expect("invalid size"), + ); + let unified_signer = UnifiedSigner::from(public_key); + assert!(!unified_signature.verify(&payload[..], &unified_signer.into_account())); + } + + #[test] + fn ethereum_address_mapper_should_work_as_expected_for_eth_20_bytes_addresses() { + // arrange + let eth = from_hex("0x1111111111111111111111111111111111111111").expect("should work"); + + // act + let account_id = EthereumAddressMapper::to_account_id(ð); + let bytes = EthereumAddressMapper::to_bytes32(ð); + let reversed = EthereumAddressMapper::to_ethereum_address(account_id.clone()); + + // assert + let expected_address = + from_hex("0x1111111111111111111111111111111111111111eeeeeeeeeeeeeeeeeeeeeeee") + .expect("should be hex"); + assert_eq!(account_id, AccountId32::new(expected_address.clone().try_into().unwrap())); + assert_eq!(bytes.to_vec(), expected_address); + assert_eq!(reversed.0.to_vec(), eth); + } + + #[test] + fn ethereum_address_mapper_should_return_the_same_value_for_32_byte_addresses() { + // arrange + let eth = from_hex("0x1111111111111111111111111111111111111111111111111111111111111111") + .expect("should work"); + + // act + let account_id = EthereumAddressMapper::to_account_id(ð); + let bytes = EthereumAddressMapper::to_bytes32(ð); + + // assert + assert_eq!(account_id, AccountId32::new(eth.clone().try_into().unwrap())); + assert_eq!(bytes.to_vec(), eth); + } + + #[test] + fn ethereum_address_mapper_should_return_the_ethereum_address_with_suffixes_for_64_byte_public_keys( + ) { + // arrange + let public_key= from_hex("0x15b5e4aeac2086ee96ab2292ee2720da0b2d3c43b5c699ccdbfd38387e2f71dc167075a80a32fe2c78d7d8780ef1b2095810f12001fa2fcedcd1ffb0aa2ee2c7").expect("should work"); + + // act + let account_id = EthereumAddressMapper::to_account_id(&public_key); + let bytes = EthereumAddressMapper::to_bytes32(&public_key); + + // assert + // 0x917B536617B0A42B2ABE85AC88788825F29F0B29 is eth address associated with above public_key + let expected_address = + from_hex("0x917B536617B0A42B2ABE85AC88788825F29F0B29eeeeeeeeeeeeeeeeeeeeeeee") + .expect("should be hex"); + assert_eq!(account_id, AccountId32::new(expected_address.clone().try_into().unwrap())); + assert_eq!(bytes.to_vec(), expected_address); + } + + #[test] + fn ethereum_address_mapper_should_return_the_ethereum_address_with_suffixes_for_65_byte_public_keys( + ) { + // arrange + let public_key= from_hex("0x0415b5e4aeac2086ee96ab2292ee2720da0b2d3c43b5c699ccdbfd38387e2f71dc167075a80a32fe2c78d7d8780ef1b2095810f12001fa2fcedcd1ffb0aa2ee2c7").expect("should work"); + + // act + let account_id = EthereumAddressMapper::to_account_id(&public_key); + let bytes = EthereumAddressMapper::to_bytes32(&public_key); + + // assert + // 0x917B536617B0A42B2ABE85AC88788825F29F0B29 is eth address associated with above public_key + let expected_address = + from_hex("0x917B536617B0A42B2ABE85AC88788825F29F0B29eeeeeeeeeeeeeeeeeeeeeeee") + .expect("should be hex"); + assert_eq!(account_id, AccountId32::new(expected_address.clone().try_into().unwrap())); + assert_eq!(bytes.to_vec(), expected_address); + } + + #[test] + fn ethereum_address_mapper_should_return_the_default_zero_values_for_any_invalid_length() { + // arrange + let public_key = from_hex( + "0x010415b5e4aeac2086ee96ab2292ee2720da0b2d3c43b5c699ccdbfd38387e2f71dc167075a801", + ) + .expect("should work"); + + // act + let account_id = EthereumAddressMapper::to_account_id(&public_key); + let bytes = EthereumAddressMapper::to_bytes32(&public_key); + + // assert + let expected_address = vec![0u8; 32]; // zero default values + assert_eq!(account_id, AccountId32::new(expected_address.clone().try_into().unwrap())); + assert_eq!(bytes.to_vec(), expected_address); + } + + #[test] + fn ethereum_address_mapper_is_ethereum_address_correctly_detects() { + let valid_eth_address = + from_hex("0x917B536617B0A42B2ABE85AC88788825F29F0B29eeeeeeeeeeeeeeeeeeeeeeee") + .expect("should be hex"); + let valid_addr32 = AccountId32::new(valid_eth_address.clone().try_into().unwrap()); + + assert!(EthereumAddressMapper::is_ethereum_address(&valid_addr32)); + + let (pair, _) = sr25519::Pair::generate(); + let random_addr32 = AccountId32::from(pair.public()); + assert!(!EthereumAddressMapper::is_ethereum_address(&random_addr32)); + } +} diff --git a/common/primitives/src/stateful_storage.rs b/common/primitives/src/stateful_storage.rs new file mode 100644 index 0000000000..e7c327bb1b --- /dev/null +++ b/common/primitives/src/stateful_storage.rs @@ -0,0 +1,105 @@ +use crate::msa::{MessageSourceId, SchemaId}; +#[cfg(feature = "std")] +use crate::utils; +use parity_scale_codec::{Decode, Encode}; +use scale_info::TypeInfo; +#[cfg(feature = "std")] +use serde::{Deserialize, Serialize}; +extern crate alloc; +use alloc::vec::Vec; +#[cfg(feature = "std")] +use utils::*; + +/// PageId is the unique identifier for a Page in Stateful Storage +pub type PageId = u16; +/// PageHash is the type/size of hash of the page content. +pub type PageHash = u32; +/// PageNonce is the type/size of a nonce value embedded into a Page +pub type PageNonce = u16; + +/// A type to expose paginated type of stateful storage +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Default, Clone, Encode, Decode, PartialEq, Debug, TypeInfo, Eq)] +pub struct PaginatedStorageResponse { + /// id of the page + pub page_id: PageId, + /// Message source account id (the original source). + pub msa_id: MessageSourceId, + /// Schema id of requested storage + pub schema_id: SchemaId, + /// Hash of the page content + pub content_hash: PageHash, + /// Nonce of the page + pub nonce: PageNonce, + /// Serialized data in a the schemas. + #[cfg_attr(feature = "std", serde(with = "as_hex", default))] + pub payload: Vec, +} + +/// A type to expose itemized page of stateful storage +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Default, Clone, Encode, Decode, PartialEq, Debug, TypeInfo, Eq)] +pub struct ItemizedStoragePageResponse { + /// Message source account id (the original source). + pub msa_id: MessageSourceId, + /// Schema id of requested storage + pub schema_id: SchemaId, + /// Hash of the page content + pub content_hash: PageHash, + /// Nonce of the page + pub nonce: PageNonce, + /// Items in a page + pub items: Vec, +} + +/// A type to expose itemized type of stateful storage +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Default, Clone, Encode, Decode, PartialEq, Debug, TypeInfo, Eq)] +pub struct ItemizedStorageResponse { + /// index of item + pub index: u16, + /// Serialized data of item. + #[cfg_attr(feature = "std", serde(with = "as_hex", default))] + pub payload: Vec, +} + +impl PaginatedStorageResponse { + /// Returns a new instance with associated parameters + pub fn new( + index_number: u16, + msa_id: MessageSourceId, + schema_id: SchemaId, + content_hash: PageHash, + nonce: PageNonce, + payload: Vec, + ) -> Self { + PaginatedStorageResponse { + page_id: index_number, + msa_id, + schema_id, + payload, + content_hash, + nonce, + } + } +} + +impl ItemizedStorageResponse { + /// Returns a new instance with associated parameters + pub fn new(index: u16, payload: Vec) -> Self { + ItemizedStorageResponse { index, payload } + } +} + +impl ItemizedStoragePageResponse { + /// Returns a new instance with associated parameters + pub fn new( + msa_id: MessageSourceId, + schema_id: SchemaId, + content_hash: PageHash, + nonce: PageNonce, + items: Vec, + ) -> Self { + ItemizedStoragePageResponse { msa_id, schema_id, content_hash, items, nonce } + } +} diff --git a/common/primitives/src/utils.rs b/common/primitives/src/utils.rs new file mode 100644 index 0000000000..0fb5dc35b3 --- /dev/null +++ b/common/primitives/src/utils.rs @@ -0,0 +1,360 @@ +extern crate alloc; +use alloc::vec::Vec; + +/// Mainnet Genesis Hash 0x4a587bf17a404e3572747add7aab7bbe56e805a5479c6c436f07f36fcc8d3ae1 +pub const MAINNET_GENESIS_HASH: &[u8] = &[ + 74u8, 88, 123, 241, 122, 64, 78, 53, 114, 116, 122, 221, 122, 171, 123, 190, 86, 232, 5, 165, + 71, 156, 108, 67, 111, 7, 243, 111, 204, 141, 58, 225, +]; + +/// Frequency Testnet on Paseo Genesis Hash 0x203c6838fc78ea3660a2f298a58d859519c72a5efdc0f194abd6f0d5ce1838e0 +pub const TESTNET_ON_PASEO_GENESIS_HASH: &[u8] = &[ + 32, 60, 104, 56, 252, 120, 234, 54, 96, 162, 242, 152, 165, 141, 133, 149, 25, 199, 42, 94, + 253, 192, 241, 148, 171, 214, 240, 213, 206, 24, 56, 224, +]; + +/// An enum that shows the detected chain type +#[derive(Debug, Clone, PartialEq)] +pub enum DetectedChainType { + /// An unknown chain, it can be a local or development chain + Unknown, + /// Frequency Mainnet + FrequencyMainNet, + /// Frequency Paseo Testnet + FrequencyPaseoTestNet, +} + +/// Finds the chain type by genesis hash +pub fn get_chain_type_by_genesis_hash(genesis_hash: &[u8]) -> DetectedChainType { + match genesis_hash { + MAINNET_GENESIS_HASH => DetectedChainType::FrequencyMainNet, + TESTNET_ON_PASEO_GENESIS_HASH => DetectedChainType::FrequencyPaseoTestNet, + _ => DetectedChainType::Unknown, + } +} + +/// Generic function for converting any unsigned integer to a 32-byte array compatible with ETH abi +pub fn to_abi_compatible_number>(value: T) -> [u8; 32] { + let value_u128: u128 = value.into(); + let bytes = value_u128.to_be_bytes(); + let start_idx = 32 - bytes.len(); + let mut result = [0u8; 32]; + result[start_idx..].copy_from_slice(&bytes); + result +} + +/// Handle serializing and deserializing from `Vec` to hexadecimal +#[cfg(feature = "std")] +pub mod as_hex { + use serde::{Deserializer, Serializer}; + + /// Serializes a `Vec` into a hexadecimal string + pub fn serialize(bytes: &Vec, serializer: S) -> Result + where + S: Serializer, + { + impl_serde::serialize::serialize(bytes.as_slice(), serializer) + } + + /// Deserializes a hexadecimal string into a `Vec` + pub fn deserialize<'de, D: Deserializer<'de>>(deserializer: D) -> Result, D::Error> { + impl_serde::serialize::deserialize(deserializer) + } +} + +/// Handle serializing and deserializing from `Option>` to hexadecimal +#[cfg(feature = "std")] +pub mod as_hex_option { + use serde::{Deserializer, Serializer}; + + /// Serializes a `Vec` into a hexadecimal string + pub fn serialize(bytes: &Option>, serializer: S) -> Result + where + S: Serializer, + { + match bytes { + Some(bytes) => impl_serde::serialize::serialize(bytes.as_slice(), serializer), + None => serializer.serialize_none(), + } + } + + /// Deserializes a hexadecimal string into a `Vec` + pub fn deserialize<'de, D>(deserializer: D) -> Result>, D::Error> + where + D: Deserializer<'de>, + { + impl_serde::serialize::deserialize(deserializer).map(Some) + } +} +/// Handle serializing and deserializing from `Vec` to a UTF-8 string +#[cfg(feature = "std")] +pub mod as_string { + use super::*; + use serde::{ser::Error, Deserialize, Deserializer, Serialize, Serializer}; + + /// Serializes a `Vec` into a UTF-8 string + pub fn serialize(bytes: &[u8], serializer: S) -> Result { + std::str::from_utf8(bytes) + .map_err(|e| S::Error::custom(format!("Debug buffer contains invalid UTF8: {}", e)))? + .serialize(serializer) + } + + /// Serializes a UTF-8 string into a `Vec` + pub fn deserialize<'de, D: Deserializer<'de>>(deserializer: D) -> Result, D::Error> { + Ok(String::deserialize(deserializer)?.into_bytes()) + } +} + +/// Handle serializing and deserializing from `Option>` to a UTF-8 string +#[cfg(feature = "std")] +pub mod as_string_option { + use super::*; + use serde::{ser::Error, Deserialize, Deserializer, Serialize, Serializer}; + + /// Serializes a `Option>` into a UTF-8 string if Ok() + pub fn serialize( + bytes: &Option>, + serializer: S, + ) -> Result { + match bytes { + Some(bytes) => std::str::from_utf8(bytes) + .map_err(|e| { + S::Error::custom(format!("Debug buffer contains invalid UTF8: {}", e)) + })? + .serialize(serializer), + None => serializer.serialize_none(), + } + } + + /// Deserializes a UTF-8 string into a `Option>` + pub fn deserialize<'de, D: Deserializer<'de>>( + deserializer: D, + ) -> Result>, D::Error> { + let bytes = String::deserialize(deserializer)?.into_bytes(); + Ok(match bytes.len() { + 0 => None, + _ => Some(bytes), + }) + } +} + +const PREFIX: &str = ""; +const POSTFIX: &str = ""; + +/// Wraps `PREFIX` and `POSTFIX` around a `Vec` +/// Returns `PREFIX` ++ `data` ++ `POSTFIX` +pub fn wrap_binary_data(data: Vec) -> Vec { + let mut encapsuled = PREFIX.as_bytes().to_vec(); + encapsuled.append(&mut data.clone()); + encapsuled.append(&mut POSTFIX.as_bytes().to_vec()); + encapsuled +} + +#[cfg(test)] +mod tests { + use super::*; + use impl_serde::serialize::from_hex; + use parity_scale_codec::{Decode, Encode}; + use scale_info::TypeInfo; + use serde::{Deserialize, Serialize}; + use sp_core::U256; + + #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] + #[derive(Default, Clone, Encode, Decode, PartialEq, Debug, TypeInfo, Eq)] + struct TestAsHex { + #[cfg_attr(feature = "std", serde(with = "as_hex",))] + pub data: Vec, + } + + #[test] + fn as_hex_can_serialize() { + let test_data = TestAsHex { data: vec![1, 2, 3, 4] }; + let result = serde_json::to_string(&test_data); + assert!(result.is_ok()); + assert_eq!("{\"data\":\"0x01020304\"}", result.unwrap()); + } + + #[test] + fn as_hex_can_deserialize() { + let result: Result = + serde_json::from_str("{\"data\":\"0x01020304\"}"); + assert!(result.is_ok()); + assert_eq!(vec![1, 2, 3, 4], result.unwrap().data); + } + + #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] + #[derive(Default, Clone, Encode, Decode, PartialEq, Debug, TypeInfo, Eq)] + struct TestAsHexOption { + #[cfg_attr( + feature = "std", + serde(with = "as_hex_option", skip_serializing_if = "Option::is_none", default) + )] + pub data: Option>, + } + + #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] + #[derive(Default, Clone, Encode, Decode, PartialEq, Debug, TypeInfo, Eq)] + struct TestAsHexOptionNull { + #[cfg_attr(feature = "std", serde(with = "as_hex_option", default))] + pub data: Option>, + } + + #[test] + fn as_hex_option_can_serialize() { + let test_data = TestAsHexOption { data: Some(vec![1, 2, 3, 4]) }; + let result = serde_json::to_string(&test_data); + assert!(result.is_ok()); + assert_eq!("{\"data\":\"0x01020304\"}", result.unwrap()); + } + + #[test] + fn as_hex_option_can_deserialize() { + let result: Result = + serde_json::from_str("{\"data\":\"0x01020304\"}"); + assert!(result.is_ok()); + assert_eq!(Some(vec![1, 2, 3, 4]), result.unwrap().data); + } + + #[test] + fn as_hex_option_can_serialize_nothing_with_skip() { + let test_data = TestAsHexOption { data: None }; + let result = serde_json::to_string(&test_data); + assert!(result.is_ok()); + assert_eq!("{}", result.unwrap()); + } + + #[test] + fn as_hex_option_can_serialize_nothing_as_null() { + let test_data = TestAsHexOptionNull { data: None }; + let result = serde_json::to_string(&test_data); + assert!(result.is_ok()); + assert_eq!("{\"data\":null}", result.unwrap()); + } + + #[test] + fn as_hex_option_can_deserialize_nothing() { + let result: Result = serde_json::from_str("{}"); + assert!(result.is_ok()); + assert_eq!(None, result.unwrap().data); + } + + #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] + #[derive(Default, Clone, Encode, Decode, PartialEq, Debug, TypeInfo, Eq)] + struct TestAsString { + #[cfg_attr(feature = "std", serde(with = "as_string"))] + pub data: Vec, + } + + #[test] + fn as_string_can_serialize() { + let test_data = TestAsString { + data: vec![ + 0xe8, 0x95, 0x99, 0x49, 0xdd, 0x9d, 0xcd, 0x99, 0xe0, 0xbc, 0x8d, 0x4c, 0xd0, 0xbc, + ], + }; + let result = serde_json::to_string(&test_data); + assert!(result.is_ok()); + assert_eq!("{\"data\":\"蕙Iݝ͙།Lм\"}", result.unwrap()); + } + + #[test] + fn as_string_can_deserialize() { + let result: Result = + serde_json::from_str("{\"data\":\"蕙Iݝ͙།Lм\"}"); + assert!(result.is_ok()); + assert_eq!( + vec![ + 0xe8, 0x95, 0x99, 0x49, 0xdd, 0x9d, 0xcd, 0x99, 0xe0, 0xbc, 0x8d, 0x4c, 0xd0, 0xbc + ], + result.unwrap().data + ); + } + + #[test] + fn as_string_errors_for_bad_utf8_vec() { + let test_data = TestAsString { data: vec![0xc3, 0x28] }; + let result = serde_json::to_string(&test_data); + assert!(result.is_err()); + } + + #[test] + fn as_string_errors_for_bad_utf8_str() { + let result: Result = + serde_json::from_str("{\"data\":\"\\xa0\\xa1\"}"); + assert!(result.is_err()); + } + + #[test] + fn get_chain_type_by_genesis_hash_with_mainnet_genesis_should_get_mainnet() { + // arrange + let known_genesis = + from_hex("4a587bf17a404e3572747add7aab7bbe56e805a5479c6c436f07f36fcc8d3ae1").unwrap(); + + // act + let detected = get_chain_type_by_genesis_hash(&known_genesis); + + // assert + assert_eq!(detected, DetectedChainType::FrequencyMainNet); + } + + #[test] + fn get_chain_type_by_genesis_hash_with_paseo_genesis_should_get_paseo() { + // arrange + let known_genesis = + from_hex("203c6838fc78ea3660a2f298a58d859519c72a5efdc0f194abd6f0d5ce1838e0").unwrap(); + + // act + let detected = get_chain_type_by_genesis_hash(&known_genesis); + + // assert + assert_eq!(detected, DetectedChainType::FrequencyPaseoTestNet); + } + + #[test] + fn abi_compatible_number_should_work_with_different_types() { + // For u8 + let u8_val: u8 = 42; + let coded_u8_val = to_abi_compatible_number(u8_val); + let u8_val: U256 = u8_val.into(); + assert_eq!( + coded_u8_val.to_vec(), + sp_core::bytes::from_hex(&format!("0x{:064x}", u8_val)).unwrap() + ); + + // For u16 + let u16_val: u16 = 12345; + let coded_u16_val = to_abi_compatible_number(u16_val); + let u16_val: U256 = u16_val.into(); + assert_eq!( + coded_u16_val.to_vec(), + sp_core::bytes::from_hex(&format!("0x{:064x}", u16_val)).unwrap() + ); + + // For u32 + let u32_val: u32 = 305419896; + let coded_u32_val = to_abi_compatible_number(u32_val); + let u32_val: U256 = u32_val.into(); + assert_eq!( + coded_u32_val.to_vec(), + sp_core::bytes::from_hex(&format!("0x{:064x}", u32_val)).unwrap() + ); + + // For u64 + let u64_val: u64 = 1234567890123456789; + let coded_u64_val = to_abi_compatible_number(u64_val); + let u64_val: U256 = u64_val.into(); + assert_eq!( + coded_u64_val.to_vec(), + sp_core::bytes::from_hex(&format!("0x{:064x}", u64_val)).unwrap() + ); + + // For u128 + let u128_val: u128 = 340282366920938463463374607431768211455; // Max u128 value + let coded_u128_val = to_abi_compatible_number(u128_val); + let u128_val: U256 = u128_val.into(); + assert_eq!( + coded_u128_val.to_vec(), + sp_core::bytes::from_hex(&format!("0x{:064x}", u128_val)).unwrap() + ); + } +} diff --git a/deny.toml b/deny.toml new file mode 100644 index 0000000000..759c14dab4 --- /dev/null +++ b/deny.toml @@ -0,0 +1,253 @@ +# This template contains all of the possible sections and their default values + +# Note that all fields that take a lint level have these possible values: +# * deny - An error will be produced and the check will fail +# * warn - A warning will be produced, but the check will not fail +# * allow - No warning or error will be produced, though in some cases a note +# will be + +# The values provided in this template are the default values that will be used +# when any section or field is not specified in your own configuration + +# Root options + +# The graph table configures how the dependency graph is constructed and thus +# which crates the checks are performed against +[graph] +# If 1 or more target triples (and optionally, target_features) are specified, +# only the specified targets will be checked when running `cargo deny check`. +# This means, if a particular package is only ever used as a target specific +# dependency, such as, for example, the `nix` crate only being used via the +# `target_family = "unix"` configuration, that only having windows targets in +# this list would mean the nix crate, as well as any of its exclusive +# dependencies not shared by any other crates, would be ignored, as the target +# list here is effectively saying which targets you are building for. +targets = [ + # The triple can be any string, but only the target triples built in to + # rustc (as of 1.40) can be checked against actual config expressions + #"x86_64-unknown-linux-musl", + # You can also specify which target_features you promise are enabled for a + # particular target. target_features are currently not validated against + # the actual valid features supported by the target architecture. + #{ triple = "wasm32v1-none", features = ["atomics"] }, +] +# When creating the dependency graph used as the source of truth when checks are +# executed, this field can be used to prune crates from the graph, removing them +# from the view of cargo-deny. This is an extremely heavy hammer, as if a crate +# is pruned from the graph, all of its dependencies will also be pruned unless +# they are connected to another crate in the graph that hasn't been pruned, +# so it should be used with care. The identifiers are [Package ID Specifications] +# (https://doc.rust-lang.org/cargo/reference/pkgid-spec.html) +#exclude = [] +# If true, metadata will be collected with `--all-features`. Note that this can't +# be toggled off if true, if you want to conditionally enable `--all-features` it +# is recommended to pass `--all-features` on the cmd line instead +all-features = false +# If true, metadata will be collected with `--no-default-features`. The same +# caveat with `all-features` applies +no-default-features = false +# If set, these feature will be enabled when collecting metadata. If `--features` +# is specified on the cmd line they will take precedence over this option. +features = ["frequency-lint-check", "std"] + +# The output table provides options for how/if diagnostics are outputted +[output] +# When outputting inclusion graphs in diagnostics that include features, this +# option can be used to specify the depth at which feature edges will be added. +# This option is included since the graphs can be quite large and the addition +# of features from the crate(s) to all of the graph roots can be far too verbose. +# This option can be overridden via `--feature-depth` on the cmd line +feature-depth = 1 + +# This section is considered when running `cargo deny check advisories` +# More documentation for the advisories section can be found here: +# https://embarkstudios.github.io/cargo-deny/checks/advisories/cfg.html +[advisories] +ignore = [ + #"RUSTSEC-0000-0000", + #{ id = "RUSTSEC-0000-0000", reason = "you can specify a reason the advisory is ignored" }, + #"a-crate-that-is-yanked@0.1.1", # you can also ignore yanked crate versions if you wish + #{ crate = "a-crate-that-is-yanked@0.1.1", reason = "you can specify why you are ignoring the yanked crate" }, + { id = "RUSTSEC-2022-0061", reason = "Substrate Dependency deprecation. Eventually there will be an update. See https://github.com/paritytech/parity-wasm/pull/334 and https://github.com/paritytech/polkadot-sdk/issues/118" }, + { id = "RUSTSEC-2020-0168", reason = "There is no suitable replacement for mach and the mach2 crate has not been vetted." }, + { id = "RUSTSEC-2024-0370", reason = "proc-macro-error is used by a few dependencies, and while unmaintained, is not currently an issue." }, + { id = "RUSTSEC-2024-0384", reason = "This is an inner dependency that would get updated when libp2p v0.51.4 and wasm-timer v0.2.5 are updated to a newer version"}, + { id = "RUSTSEC-2024-0436", reason = "Unmaintained sub-dependency: paste, pending updates to dependencies."}, + { id = "RUSTSEC-2023-0091", reason = "'Users prior to 10.0.0 are unaffected', according to the advisory; we are on 8.0.1"}, + { id = "RUSTSEC-2024-0438", reason = "Windows only"} +] +# If this is true, then cargo deny will use the git executable to fetch advisory database. +# If this is false, then it uses a built-in git library. +# Setting this to true can be helpful if you have special authentication requirements that cargo-deny does not support. +# See Git Authentication for more information about setting up git authentication. +#git-fetch-with-cli = true + +# This section is considered when running `cargo deny check licenses` +# More documentation for the licenses section can be found here: +# https://embarkstudios.github.io/cargo-deny/checks/licenses/cfg.html +[licenses] +unused-allowed-license = "allow" +# List of explicitly allowed licenses +# See https://spdx.org/licenses/ for list of possible licenses +# [possible values: any SPDX 3.11 short identifier (+ optional exception)]. +allow = [ + "MIT", + "Apache-2.0", + "Apache-2.0 WITH LLVM-exception", + "BSD-2-Clause", + "BSD-3-Clause", + "CC0-1.0", + "MPL-2.0", + "ISC", + "GPL-3.0", + "GPL-3.0 WITH Classpath-exception-2.0", + "OpenSSL", + "Zlib", + "Unicode-3.0", + "CDLA-Permissive-2.0", +] +# The confidence threshold for detecting a license from license text. +# The higher the value, the more closely the license text must be to the +# canonical license text of a valid SPDX license file. +# [possible values: any between 0.0 and 1.0]. +confidence-threshold = 0.8 +# Allow 1 or more licenses on a per-crate basis, so that particular licenses +# aren't accepted for every possible crate as with the normal allow list +exceptions = [ + # Each entry is the crate and version constraint, and its specific allow + # list + #{ allow = ["Zlib"], crate = "adler32" }, +] + +[[licenses.clarify]] +name = "ring" +expression = "MIT AND ISC AND OpenSSL" +license-files = [{ path = "LICENSE", hash = 0xbd0eed23 }] + +# Some crates don't have (easily) machine readable licensing information, +# adding a clarification entry for it allows you to manually specify the +# licensing information +#[[licenses.clarify]] +# The package spec the clarification applies to +#crate = "ring" +# The SPDX expression for the license requirements of the crate +#expression = "MIT AND ISC AND OpenSSL" +# One or more files in the crate's source used as the "source of truth" for +# the license expression. If the contents match, the clarification will be used +# when running the license check, otherwise the clarification will be ignored +# and the crate will be checked normally, which may produce warnings or errors +# depending on the rest of your configuration +#license-files = [ +# Each entry is a crate relative path, and the (opaque) hash of its contents +#{ path = "LICENSE", hash = 0xbd0eed23 } +#] + +[licenses.private] +# If true, ignores workspace crates that aren't published, or are only +# published to private registries. +# To see how to mark a crate as unpublished (to the official registry), +# visit https://doc.rust-lang.org/cargo/reference/manifest.html#the-publish-field. +ignore = false +# One or more private registries that you might publish crates to, if a crate +# is only published to private registries, and ignore is true, the crate will +# not have its license(s) checked +registries = [ + #"https://sekretz.com/registry +] + +# This section is considered when running `cargo deny check bans`. +# More documentation about the 'bans' section can be found here: +# https://embarkstudios.github.io/cargo-deny/checks/bans/cfg.html +[bans] +# Lint level for when multiple versions of the same crate are detected +multiple-versions = "allow" +# Lint level for when a crate version requirement is `*` +wildcards = "allow" +# The graph highlighting used when creating dotgraphs for crates +# with multiple versions +# * lowest-version - The path to the lowest versioned duplicate is highlighted +# * simplest-path - The path to the version with the fewest edges is highlighted +# * all - Both lowest-version and simplest-path are used +highlight = "all" +# The default lint level for `default` features for crates that are members of +# the workspace that is being checked. This can be overridden by allowing/denying +# `default` on a crate-by-crate basis if desired. +workspace-default-features = "allow" +# The default lint level for `default` features for external crates that are not +# members of the workspace. This can be overridden by allowing/denying `default` +# on a crate-by-crate basis if desired. +external-default-features = "allow" +# List of crates that are allowed. Use with care! +allow = [ + #"ansi_term@0.11.0", + #{ crate = "ansi_term@0.11.0", reason = "you can specify a reason it is allowed" }, +] +# List of crates to deny +deny = [ + #"ansi_term@0.11.0", + #{ crate = "ansi_term@0.11.0", reason = "you can specify a reason it is banned" }, + # Wrapper crates can optionally be specified to allow the crate when it + # is a direct dependency of the otherwise banned crate + #{ crate = "ansi_term@0.11.0", wrappers = ["this-crate-directly-depends-on-ansi_term"] }, +] + +# List of features to allow/deny +# Each entry the name of a crate and a version range. If version is +# not specified, all versions will be matched. +#[[bans.features]] +#crate = "reqwest" +# Features to not allow +#deny = ["json"] +# Features to allow +#allow = [ +# "rustls", +# "__rustls", +# "__tls", +# "hyper-rustls", +# "rustls", +# "rustls-pemfile", +# "rustls-tls-webpki-roots", +# "tokio-rustls", +# "webpki-roots", +#] +# If true, the allowed features must exactly match the enabled feature set. If +# this is set there is no point setting `deny` +#exact = true + +# Certain crates/versions that will be skipped when doing duplicate detection. +skip = [ + #"ansi_term@0.11.0", + #{ crate = "ansi_term@0.11.0", reason = "you can specify a reason why it can't be updated/removed" }, +] +# Similarly to `skip` allows you to skip certain crates during duplicate +# detection. Unlike skip, it also includes the entire tree of transitive +# dependencies starting at the specified crate, up to a certain depth, which is +# by default infinite. +skip-tree = [ + #"ansi_term@0.11.0", # will be skipped along with _all_ of its direct and transitive dependencies + #{ crate = "ansi_term@0.11.0", depth = 20 }, +] + +# This section is considered when running `cargo deny check sources`. +# More documentation about the 'sources' section can be found here: +# https://embarkstudios.github.io/cargo-deny/checks/sources/cfg.html +[sources] +# Lint level for what to happen when a crate from a crate registry that is not +# in the allow list is encountered +unknown-registry = "deny" +# Lint level for what to happen when a crate from a git repository that is not +# in the allow list is encountered +unknown-git = "warn" +# List of URLs for allowed crate registries. Defaults to the crates.io index +# if not specified. If it is specified but empty, no registries are allowed. +allow-registry = ["https://github.com/rust-lang/crates.io-index"] +# List of URLs for allowed Git repositories +allow-git = [] + +[sources.allow-org] +# 1 or more github.com organizations to allow git sources for +github = ["paritytech"] +# 1 or more gitlab.com organizations to allow git sources for +# gitlab = [""] +# 1 or more bitbucket.org organizations to allow git sources for +# bitbucket = [""] diff --git a/designdocs/README.md b/designdocs/README.md new file mode 100644 index 0000000000..c67ed61e2f --- /dev/null +++ b/designdocs/README.md @@ -0,0 +1,65 @@ +# Design Documents + +To create a new design document, Please see the [Design Doc README](https://github.com/frequency-chain/meta/blob/main/DESIGN_DOCS.md) for details on what goes in each section, and use the provided template there. + +## Accepted Design Documents + +- [Accounts](./accounts.md) + - [PR](https://github.com/frequency-chain/frequency/pull/13) +- [On Chain Message Storage](message_storage.md) + - [Merged Pull Request](https://github.com/frequency-chain/frequency/pull/15) +- [Delegation](./delegation.md) + - [PR](https://github.com/frequency-chain/frequency/pull/14) +- [Message Schema(s)](./schema.md) + - [Merged Pull Request](https://github.com/frequency-chain/frequency/pull/17) +- [Provider Permissions and Grants](./provider_permissions.md) + - [Merged Pull Request](https://github.com/frequency-chain/frequency/pull/150) +- [Provider Registration](./provider_registration.md) + - [Merged Pull Request](https://github.com/frequency-chain/frequency/pull/208) +- [Capacity](./capacity.md) + - [Merged Pull Request](https://github.com/frequency-chain/frequency/pull/426) +- [Stateful Storage](./stateful_storage.md) + - [PR](https://github.com/frequency-chain/frequency/pull/900) +- [Graph Sdk](./graph_sdk.md) + - [PR](https://github.com/frequency-chain/frequency/pull/1159) + +## Basic Data Model + +There are three core data models in Frequency and each corresponds to a pallet. + +- [Message Source Account (MSA)](../pallets/msa/) + - Represents a pseudonymous identity that can be the source of messages or provide access to the chain to others + - Answers the question of Who when messages are sent +- [Schemas](../pallets/schemas/) + - Represents how to form a message and details about where it should be stored. + - Answers the question of How when messages are sent +- [Messages](../pallets/messages/) + - The metadata and payload or payload reference that a user sends that matches a particular schema. + - What and when a message is sent + +![Basic Data Model drawio](../docs/images/BasicDataModel.drawio.png?raw=true) + +## Frequency Glossary + +- `AccountId`: A public key that could be a `Token Account` and/or associated with an `MSA` +- `Announcer AccountId`: The `AccountId` that signs a capacity transaction and is associated with an MSA from which capacity will be deducted for that capacity transaction. +- `Announcer MSA`: The `MSA` associated with the `AccountId` that signs a capacity transaction. +- `Delegate` (verb): The action of an `MSA` (the `Delegator`) delegating to a `Provider`. _A verb only. Do not use as a noun!_ +- `Delegator`: An `MSA` that has delegated to a `Provider`. +- `MRC`: The old name for Frequency +- `MSA Id`: The 64 bit unsigned integer associated with an `MSA`. +- `MSA`: Message Source Account. A registered identifier with the MSA pallet. `AccountIds` (aka public keys) may only be associated with one `MSA` and that association is immutable. +- `Message`: A message that matches a registered `Schema` (on-chain or off-chain). +- `Payload`: The user data in a `Message` that matches a `Schema`. +- `Provider`: An `MSA` that is registered for being able to be delegated to and being the target of capacity rewards when a person stakes to the network for token rewards. +- `Schema`: A registered data structure and the settings around it. +- `Token Account`: An `AccountId` that is holding tokens. + +### External Terms + +- `IPFS`: [InterPlanetary File System](https://docs.ipfs.io/), a decentralized content-addressed file system. +- `CID`: [Content IDentifier](https://github.com/multiformats/cid/), Self-describing content-addressed identifiers for distributed systems. + +### Banned Terms + +- `Delegate` (Noun): Confusing due to being spelled the same as the verb and close to `Delegator`. Replaced with `Provider`. diff --git a/designdocs/accounts.md b/designdocs/accounts.md new file mode 100644 index 0000000000..b06d6dcc17 --- /dev/null +++ b/designdocs/accounts.md @@ -0,0 +1,72 @@ +## Context and Scope + +The ability to create an on-chain account without a token to increase user accessibility for Frequency. + +In Polkadot an on-chain account is created when an existential deposit is made to an address generated from cryptographic keys. In order to be able to make such deposit a user needs to acquire tokens via an exchange or transfer tokens into an account address. The process of creating an on-chain account can discourage users from using Frequency and by removing this overhead it allows Frequency to extend it services to a wider audience. + +## Goals + +To increase accessibility to users who want to participate in broadcasting messages without the need to acquire tokens to create an account. + +In addition, the message sender must preserve the following characteristics: + +- The sender of a message should be able to be identified pseudonymously. +- The sender of a message should be associated to all its messages. +- The sender of a message should be able to send messages from different devices. +- The sender of a message should be able to revoke keys associated to a device. + +## Proposal + +I propose a dual account system in Frequency. + +These two different types of accounts act as building blocks to facilitate the aforementioned goals. One type of account, [Token] Account, will be responsible for holding a balance, transferring tokens to other accounts, and pay certain transactions [list transactions]. Another account, Message Source Account (MSA), will be used to broadcast messages and delegate to another MSA account. + +### [Token] Account + +A token account has the ability to transfer value between accounts. More generally token accounts allow you to control funds associated to it. + +Similar to Bitcoin, an account address is derived from cryptographic keys and is created by sending token to a public key. It also carries an existential deposit that keeps an account from being pruned. More on the type of supported keys below. + +In Substrate a [Token] Account can be implemented by using the Balances Pallet to create a Frequency Token and storing a [Token] balance in System pallet. + +### Message Source Account (MSA) + +An account that can be the source of a message for itself or another message source account. + +An MSA account is deterministically created with a sequential identifier called MSAId that is 8 bytes. + +Unlike a token account, MSA can be created in two ways: + +1. One way involves creating a [Token] Account and submitting a transaction for creating a MSA. +2. The other way is to delegate authority to another MSA. + +Because of these two ways of creating an MSA it should be clear that keypairs assigned to a MSAId do not imply that these keys are associated to a Token Account. An MSA can exist independently of a Token Account. + +MSAId assist in allowing users to send messages for free by delegating another MSA account. For sake of keeping the scope narrow, delegation details will be posted in a separate design doc. + +![image](https://user-images.githubusercontent.com/3433442/162544133-9d163fa5-edcc-4cff-b060-9e8f4b3d9147.png) + +![image](https://user-images.githubusercontent.com/3433442/162544190-cfdfb02a-ea82-4b53-9d2e-188a747a7384.png) + +### Keys + +A [Token] Account has an 32-byte identifier called an **AccountID**. This identifier can be derived from the public-key of the following cryptographic schemes supported by [Substrate](https://docs.substrate.io/v3/advanced/cryptography/): + +- EDSA signatures using secp256k1 curve +- Ed25519 using Curve25519 +- SR25519 using Ristretto group + +An MSAId associated keys are also derived by the same cryptography. + +## Benefits and Risks + +The benefits are that it allow for users to create an MSA without the need to acquire token. Some risks are that a user has the responsibility of managing multiple keys. + +## Alternatives and Rationale: + +An alternative solution could be to combine both MSAId and AccountId into one identifier. + +This would require accounts to be created deterministically. This could become a bottleneck for adoption as most users are accustomed an Ethereum/Bitcoin account creation flow. + +Moreover, by combining an MSAId and AccountId into one identifier it limits the +ability to dissociate from an MSAId. diff --git a/designdocs/batched_messages.md b/designdocs/batched_messages.md new file mode 100644 index 0000000000..cb8c086e68 --- /dev/null +++ b/designdocs/batched_messages.md @@ -0,0 +1,235 @@ +# Batched Messages + +## Table of Contents + +- [Context and Scope](#context-and-scope) +- [Problem Statement](#problem-statement) +- [Goals and Non-Goals](#goals-and-non-goals) +- [Proposal](#proposal) +- [Benefits and Risks](#benefits-and-risks) +- [Alternatives and Rationale](#alternatives-and-rationale) +- [Glossary](#glossary) + +## Context and Scope + +This design document describes message schemas. It also will describe +batchability as a logical construct derived from schemas. + +We will also be updating the APIs for creating schemas. + +## Problem Statement + +In order to reduce costs for announcers of messages on-chain as well as reduce +network congestion, announcers collate messages into batches of the same type of +message and announce the batch location on-chain, instead of announcing each +individual message. + +However, this idea does not go far enough. Batching allows us to support posting +massive amounts of data, but it would still be expensive to post data of this +size on chain. + +We can leverage off chain storage to make posting large message collections cheap. +This document aims to explore what a system that does that could look like. + +## Goals and Non-Goals + +This specifies how messages are to be announced on chain; what is required and +how a batch may be partially verified based on on-chain information. + +This document specifies how messages can be inferred from both schema format type +and payload location. + +This document also specifies how schemas will constrain the shape of off chain +messages. + +This document does not describe the types of DSNP Announcements that will be +described by schemas. In theory, any message model can be supported. + +This document also does not discuss validation of either model or model type. If +this type of validation is necessary, it should be described elsewhere. + +## Proposal + +- All names are placeholders and may be changed. +- Types may change as needed during implementation phase +- Errors in the extrinsic(s) must have different, reasonably-named error enums for each type of error for ease of debugging. + +### Enums + +- `ModelType` - supported serialization formats for message payloads files. Currently only [Parquet](https://parquet.apache.org/docs/) and + [Avro](https://avro.apache.org/docs/current/) are supported. +- `PayloadLocation` - The location of the payload. Can be either `OnChain` or `IPFS`. + - `OnChain` + - `IPFS` +- `Payload` + - `OnChain` + - `source`: `MsaId` + - `payload`: `Vec` + - `IPFS` + - `payload_cidv1`: `Vec` + - `payload_byte_length`: `u64` + +### Traits + +- `Model` - TBD. A common interface for accessing message payload information. + - Derives `Encode`, `Decode`, `MaxEncodedLen` + - `max_length`: `SchemaMaxBytesBoundedVecLimit` + +### Types + +- `Schema`: generic + + - `model_type`: `ModelType` See enum section above. + - `model`: `Model` Defines the shape of the message payload. + - `payload_location`: `PayloadLocation` See enum section above. + +- `Message`: generic + - `schema_id`: `u16` + - `source`: `MsaId` Source of the message. + - `provider`: `MsaId` Public key of a capacity-providing account + - `payload`: `Payload` The payload. + +(See alternatives section for another way to structure payloads) + +### Extrinsics + +#### create_schema(origin, schema_params) + +Creates and posts a new schema on chain. The transaction fee is determined in part by the model size. + +- **Parameters** + + - origin: required for all extrinsics, the caller/sender. + - `schema_params`: `Schema`, the parameters to use in the batch announcement. + +- **Restrictions**: + - TBD + +### Custom RPCs + +#### get_schema(schema_id) + +Retrieves a `Schema`. + +- **Parameters** + + - `schema_id`: `u16` a schema identifier + +- **Returns** + - `None()` if no schemas meet the criteria. + - `Some(Schema)` + +#### MessagesPallet::add(origin, on_behalf_of, schema_id, payload, payload_location) + +This existing RPC call will need to change slightly. The `payload` param, at the +of this document's writing, is a `Vec`. This proposal will turn the +`payload` param's type to `Payload`. It will also add a 5th param for +`payload_location`. + +- **Parameters** + + - `origin`: `Origin` A signed transaction origin from the provider + - `on_behalf_of`: `Option` The msa id of delegate. + - `schema_id`: `u16` A schema identifier + - `payload`: `Payload` The message payload + +- **Returns** + - [DispatchResultWithPostInfo](https://paritytech.github.io/substrate/master/frame_support/dispatch/type.DispatchResultWithPostInfo.html) The return type of a Dispatchable in frame. + +### Batch as a Logical Construct + +We can circumvent defining a batch explicitly if we leverage the model type and +payload location included in the schema. + +Parquet files are lists by default, so consumers can assume that a message is +a batch if it has a Parquet model type. In this case, the "batch" will be +located off chain, because storing such a file on-chain would incur significant +cost. + +Avro files, on the other hand, have the option of being `record` types (see +[Avro docs](https://avro.apache.org/docs/current/spec.html#schemas)). These files +could be stored either on chain or off chain. If they are on chain, it would +make sense for the file to be small (lower cost). However, they could be large +and stored off chain. + +See below to see how the combination of format and location indicate possible +payload types: + +```txt +| Model Type | Location | Example Use Case | +------------------------------------------------------------------------- +| Avro | On-chain | DSNP Graph Change | +| Parquet | On-chain | Unknown | +| Avro | IPFS (Off-chain) | Larger Avro structures | +| Parquet | IPFS (Off-chain) | DSNP Broadcast or Reply Announcements | +``` + +### Benefits and Risks + +Please see [Batching Source Dependent Messages With Delegation](https://forums.projectliberty.io/t/04-batching-source-dependent-messages-with-delegation/216), for discussion about +the benefits of announcing batch files on chain rather than all types of +user-created messages. + +One risk is that providers on Frequency could simply register a new schema and +announce batches "unofficially". We have not decided whether or not to let everyone +with enough token balance register a schema. Other Frequency participants would need to +first learn about and evaluate new schemas, then update their software to +consume a new message type. + +There are some upsides to deriving batching logically from existing structures. +One is cost savings. Not having a batch structure means we don't need to worry +about any on-chain computation associated with batch messages -- we simply look +at the format and location on the parent schema and we can deduce whether the +file is singular or plural. + +### Alternatives and Rationale + +We discussed whether a batch message itself can be delegated, but this would +have complicated things and we cannot come up with a use case for delegating +batches. It also violates the idea of users delegating explicitly to every +provider that performs a service for them, which is a fundamental value we want +to apply to the network. + +We discussed whether to allow URLs such as HTTP/HTTPS or other URLs and instead opted for content-addressable URIs (CIDv1) which can be resolved by some other service. This allows us to put the file hash directly into a URI. It reduces message storage because we don't have to include both a URL and a file hash. A file hash is necessary as a check against file tampering. + +We revisited the idea of whether it really is necessary to include a file size. We will be charging a premium for larger files, however, there will be per-byte discount for larger files in order to create an incentive for posting batches while reducing the incentive for announcers to allow spam. Although the processing and downloading time for enormous files also serves as a disincentive for spam, we feel it would not be sufficient. + +Despite the fact that announcers can lie about the file size, the file_size +parameter also serves as an on-chain declaration that not only allows consumers +of batches to quickly discover if a batch announcer was honest, but the file +requestor can know in advance when to stop requesting data. + +#### Changes to `get_messages_by_schema_id` + +The `MessagesPallet::get_messages_by_schema_id` RPC returns a paginated +`MessageResponse`. It is possible that this document will change the structure +of the `MessageResponse` to be more like the following: + +```rust +pub struct MessageResponse { + /// Serialized data in the schemas. + #[cfg_attr(feature = "std", serde(with = "as_hex_option", skip_serializing_if = "Option::is_none", default))] + pub payload: Option>, + /// The content address for an IPFS payload + #[cfg_attr(feature = "std", serde(skip_serializing_if = "Option::is_none", default))] + pub cid: Option>, + /// Offchain payload length (IPFS). + #[cfg_attr(feature = "std", serde(skip_serializing_if = "Option::is_none", default))] + pub payload_length: Option, + /// Message source account id of the Provider. + pub provider_msa_id: MessageSourceId, + /// Message source account id (the original source). + #[cfg_attr(feature = "std", serde(skip_serializing_if = "Option::is_none", default))] + pub msa_id: Option, + /// Index in block to get total order + pub index: u16, + /// Block-number for which the message was stored. + pub block_number: BlockNumber, +} +``` + +### Glossary + +- _IPFS_ [InterPlanetary File System](https://docs.ipfs.io/), a decentralized file system for building the next generation of the internet +- _CID_ [Content IDentifier](https://github.com/multiformats/cid/), Self-describing content-addressed identifiers for distributed systems +- _MsaId_ [Message Source Account ID](https://github.com/frequency-chain/frequency/blob/main/designdocs/accounts.md) an identifier for a MSA. diff --git a/designdocs/capacity.md b/designdocs/capacity.md new file mode 100644 index 0000000000..8981306f8a --- /dev/null +++ b/designdocs/capacity.md @@ -0,0 +1,985 @@ +# Capacity Design Doc + +## Context and Scope + +Feeless transactions are essential in reaching mass adoption as it removes the overhead costs of transactions for app developers to acquire a far-reaching user base. + +In this document, I will introduce the concept of [Capacity](https://forums.projectliberty.io/t/05-what-is-capacity-frequency-economics-part-1/248), a non-transferable resource that is associated with a [Message Source Account (MSA)](./README.md#basic-data-model)) of a [Registered Provider](https://github.com/frequency-chain/frequency/blob/main/designdocs/provider_registration.md), and how Capacity can be acquired through staking, refills, and used to perform transactions such as: + +- Create an MSA. +- Add a key to an MSA. +- Delegate permissions to another MSA. +- Update Delegate Permissions. +- Send a message. +- Send a batch message. + +## Proposal + +Frequency explains how Capacity can be acquired through staking, refills, and used to perform certain transactions. This approach is addressed in each section below: + +- [Implementation of acquiring Capacity through staking](#staking) +- [Implementation of replenishing Capacity](#replenish) +- [Prioritization of Capacity transactions](#priority) +- [Block space allocation for Capacity transactions](#block-space) +- [Implementation of spending Capacity to perform transactions](#capacity-transactions) + +### **Implementation of how to acquire Capacity through staking:** + +This section is limited to the interfaces for staking and un-staking tokens. + +As a Registered Provider, you can receive Capacity by staking your tokens to the network or when others stake their tokens to the network. + +When staking tokens to the network, the network generates Capacity based on a Capacity-generating function that considers usage and other criteria. When you stake tokens, you will also provide a target Registered Provider to receive the Capacity generated. In exchange for staking Token to the network, you receive rewards. For more information on rewards, please see the [Tokenomics docs](https://docs.frequency.xyz/Tokenomics/index.html). You may increase your stake to network many times and target different Service Providers each time you stake. Note every time you stake to network your tokens are frozen until you decide to unstake. + +Unstaking tokens allow you to schedule a number of tokens to be unfrozen from your balance. There is no limit on the amount that you can schedule to be unfrozen (up to the amount staked), but there is a limit on how many scheduled requests you can make. After scheduling tokens to be unfrozen using **`unstake`**, you can withdraw those tokens after a thaw period has elapsed by using the **`withdraw_unstaked`** extrinsic. If the call is successful, all thawed tokens become unfrozen and increase the ability to make more scheduled requests. + +Note that the thaw period is measured in Epoch Periods. An Epoch Period is composed of a set number of blocks. The number of blocks for an Epoch will be approximately 100 blocks and can be adjusted through governance. + +#### **Interfaces for Staking-Pallet** + +#### **Config** + +```rust + #[pallet::config] + pub trait Config: frame_system::Config { + /// The overarching event type. + type RuntimeEvent: From> + IsType<::RuntimeEvent>; + + /// The overarching freeze reason. + type RuntimeFreezeReason: From; + + /// Weight information for extrinsics in this pallet. + type WeightInfo: WeightInfo; + + /// Functions that allow a fungible balance to be changed or frozen. + type Currency: MutateFreeze + + Mutate + + InspectFreeze + + InspectFungible; + + /// Function that checks if an MSA is a valid target. + type TargetValidator: TargetValidator; + + /// The minimum required token amount to stake. It facilitates cleaning dust when unstaking. + #[pallet::constant] + type MinimumStakingAmount: Get>; + + /// The minimum required token amount to remain in the account after staking. + #[pallet::constant] + type MinimumTokenBalance: Get>; + + /// The maximum number of unlocking chunks a StakingAccountLedger can have. + /// It determines how many concurrent unstaked chunks may exist. + #[pallet::constant] + type MaxUnlockingChunks: Get; + + #[cfg(feature = "runtime-benchmarks")] + /// A set of helper functions for benchmarking. + type BenchmarkHelper: RegisterProviderBenchmarkHelper; + + /// The number of Epochs before you can unlock tokens after unstaking. + #[pallet::constant] + type UnstakingThawPeriod: Get; + + /// Maximum number of blocks an epoch can be + #[pallet::constant] + type MaxEpochLength: Get>; + + /// A type that provides an Epoch number + /// traits pulled from frame_system::Config::BlockNumber + type EpochNumber: Parameter + + Member + + MaybeSerializeDeserialize + + MaybeDisplay + + AtLeast32BitUnsigned + + Default + + Copy + + core::hash::Hash + + MaxEncodedLen + + TypeInfo; + + /// How much FRQCY one unit of Capacity costs + #[pallet::constant] + type CapacityPerToken: Get; + + // ... + } +``` + +#### **Constants** + +FreezeReason is an enum that defines the reason for freezing funds in an account. + +```rust + + pub enum FreezeReason { + /// The account has staked tokens to the Frequency network. + CapacityStaking, + } + +``` + +#### **Calls** + +##### **Stake** + +Stakes some amount of tokens to the network and generates Capacity. + +```rust + +/// Stakes some amount of tokens to the network and generates Capacity. +/// +/// ### Errors +/// +/// - Returns Error::InvalidTarget if attempting to stake to an invalid target. +/// - Returns Error::StakingAmountBelowMinimum if attempting to stake an amount below the minimum amount. +/// - Returns Error::CannotChangeStakingType if the staking account is a ProviderBoost account +pub fn stake( origin: OriginFor, target: MessageSourceId, amount: BalanceOf,) -> DispatchResult {} + +``` + +Acceptance Criteria are listed below but can evolve: + +1. Dispatched origin is Signed by Staker. +2. A Target MSA must be a Registered Provider. +3. When stake amount is greater than the available free-balance, it stakes all available free-balance. +4. A Staker can stake multiple times and target different providers. +5. Additional staking increases total frozen amount. +6. The token amount staked is to remain [frozen](https://paritytech.github.io/polkadot-sdk/master/frame_support/traits/tokens/fungible/index.html). +7. Capacity generated by staking to a target is calculated by a configurable capacity-generation function. +8. Target Registered Provider is issued generated Capacity. +9. Target Registered Provider issued Capacity becomes available immediately. +10. Stakers can increase their staked amount for a given target. +11. Emits Stake event. +12. Note: MinimumStakingAmount should be greater or equal to the existential deposit. +13. Note: MinimumTokenBalance should be greater or equal to the existential deposit. + +Note that we are considering allowing frozen tokens to be used to pay transaction fees. + +##### **Unstake** + +Schedules an amount of the stake to be unlocked. + +```rust + +/// Schedules an amount of the stake to be unlocked. +/// ### Errors +/// +/// - Returns `Error::UnstakedAmountIsZero` if `amount` is not greater than zero. +/// - Returns `Error::MaxUnlockingChunksExceeded` if attempting to unlock more times than config::MaxUnlockingChunks. +/// - Returns `Error::AmountToUnstakeExceedsAmountStaked` if `amount` exceeds the amount currently staked. +/// - Returns `Error::InvalidTarget` if `target` is not a valid staking target (not a Provider) +/// - Returns `Error::NotAStakingAccount` if `origin` has nothing staked at all +/// - Returns `Error::StakerTargetRelationshipNotFound` if `origin` has nothing staked to `target` +pub fn unstake(origin: OriginFor, target: MessageSourceId, requested_amount: BalanceOf) -> DispatchResult {} + +``` + +Acceptance Criteria are listed below but can evolve: + +1. Dispatched origin is Signed by Staker. +2. Schedules a portion of the stake to be unfrozen and ready for transfer after the `confg::UnstakingThawPeriod` ends. +3. The amount unstaked must be greater than 0. +4. Issued Capacity to the target is reduced by using a weighted average: + + - `CapacityReduction = + TotalCapacity * (1 - (UnstakingAmount / TotalStakedAmount))` + +5. Remaining Capacity is reduced by the same amount as above. +6. The amount unstaked cannot exceed the amount staked. +7. If the result of the unstaking would be to leave a balance below `config::MinimumStakingAmount`, the entire amount will be unstaked to avoid leaving dust. +8. when an account has never been a staking account and an attempt to call unstake an error message of NotAStakingAccount should be returned. +9. If you have a staking account and your active balance is zero, then an error message of AmountToUnstakeExceedsAmountStaked should be returned (the test should include unfreezing). +10. Emits Unstake event. + +##### **withdraw_unstaked** + +Unfreeze unstaked chunks which have completed the UnstakingThawPeriod. + +```rust + +/// Removes all thawed UnlockChunks from caller's UnstakeUnlocks and thaws(unfreezes) the sum of the thawed values +/// in the caller's token account. +/// +/// ### Errors +/// - Returns `Error::NoUnstakedTokensAvailable` if the account has no unstaking chunks. +/// - Returns `Error::NoThawedTokenAvailable` if there are unstaking chunks, but none are thawed. +pub fn withdraw_unstaked(origin: OriginFor) -> DispatchResultWithPostInfo {} + +``` + +Acceptance Criteria are listed below but can evolve. + +1. Dispatched origin is Signed by Staker. +2. Sums all chunks that are less than or equal to the current Epoch and unfreezes by amount from the account balance. +3. Updates `StakingAccountLedger` total with new frozen amount. +4. If an account has nothing at stake, clean up storage by removing StakingLedger and TargetLedger entries. +5. Emits event Withdrawn to notify that a withdrawal was made. + +#### **Errors** + +```rust + + pub enum Error { + /// Staker attempted to stake to an invalid staking target. + InvalidTarget, + /// Capacity is not available for the given MSA. + InsufficientCapacityBalance, + /// Staker is attempting to stake an amount below the minimum amount. + StakingAmountBelowMinimum, + /// Staker is attempting to stake a zero amount. DEPRECATED + /// #[deprecated(since = "1.13.0", note = "Use StakingAmountBelowMinimum instead")] + ZeroAmountNotAllowed, + /// This AccountId does not have a staking account. + NotAStakingAccount, + /// No staked value is available for withdrawal; either nothing is being unstaked, + /// or nothing has passed the thaw period. (5) + NoUnstakedTokensAvailable, + /// Unstaking amount should be greater than zero. + UnstakedAmountIsZero, + /// Amount to unstake or change targets is greater than the amount staked. + InsufficientStakingBalance, + /// Attempted to get a staker / target relationship that does not exist. + StakerTargetRelationshipNotFound, + /// Attempted to get the target's capacity that does not exist. + TargetCapacityNotFound, + /// Staker has reached the limit of unlocking chunks and must wait for at least one thaw period + /// to complete. (10) + MaxUnlockingChunksExceeded, + /// Capacity increase exceeds the total available Capacity for target. + IncreaseExceedsAvailable, + /// Attempted to set the Epoch length to a value greater than the max Epoch length. + MaxEpochLengthExceeded, + /// Staker is attempting to stake an amount that leaves a token balance below the minimum amount. + BalanceTooLowtoStake, + /// There are no unstaked token amounts that have passed their thaw period. + NoThawedTokenAvailable, + /// ... + } + +``` + +#### **Events** + +```rust + + pub enum Event { + /// Tokens have been staked to the Frequency network. + Staked { + /// The token account that staked tokens to the network. + account: T::AccountId, + /// The MSA that a token account targeted to receive Capacity based on this staking amount. + target: MessageSourceId, + /// An amount that was staked. + amount: BalanceOf, + /// The Capacity amount issued to the target as a result of the stake. + capacity: BalanceOf, + }, + /// Unstaked token that has thawed was unlocked for the given account + StakeWithdrawn { + /// the account that withdrew its stake + account: T::AccountId, + /// the total amount withdrawn, i.e. put back into free balance. + amount: BalanceOf, + }, + /// A token account has unstaked the Frequency network. + UnStaked { + /// The token account that unstaked tokens from the network. + account: T::AccountId, + /// The MSA target that will have reduced Capacity as a result of unstaking. + target: MessageSourceId, + /// The amount that was unstaked. + amount: BalanceOf, + /// The Capacity amount that was reduced from a target. + capacity: BalanceOf, + }, + /// The Capacity epoch length was changed. + EpochLengthUpdated { + /// The new length of an epoch in blocks. + blocks: BlockNumberFor, + }, + /// Capacity has been withdrawn from a MessageSourceId. + CapacityWithdrawn { + /// The MSA from which Capacity has been withdrawn. + msa_id: MessageSourceId, + /// The amount of Capacity withdrawn from MSA. + amount: BalanceOf, + }, + /// ... + } + +``` + +#### **Storage** + +##### **Staking Storage** + +Storage for keeping records of staking accounting. + +```rust + +/// Storage for keeping a ledger of staked token amounts for accounts. +#[pallet::storage] +pub type StakingAccountLedger = + StorageMap<_, Twox64Concat, T::AccountId, StakingDetails>; + +``` + +Storage to record how many tokens were targeted to an MSA. + +```rust + +/// Storage to record how many tokens were targeted to an MSA. +#[pallet::storage] + pub type StakingTargetLedger = StorageDoubleMap< + _, + Twox64Concat, + T::AccountId, + Twox64Concat, + MessageSourceId, + StakingTargetDetails>, + >; +``` + +Storage for target Capacity usage. + +```rust +/// Storage for target Capacity usage. +/// - Keys: MSA Id +/// - Value: [`CapacityDetails`](types::CapacityDetails) +#[pallet::storage] +pub type CapacityLedger = + StorageMap<_, Twox64Concat, MessageSourceId, CapacityDetails, T::EpochNumber>>; +``` + +Storage for epoch length + +```rust +/// Storage for the epoch length +#[pallet::storage] + pub type EpochLength = StorageValue<_, BlockNumberFor::, ValueQuery, EpochLengthDefault>; +``` + +The type used for storing information about the targeted MSA that received Capacity. + +```rust +/// Details about the total token amount targeted to an MSA. +/// The Capacity that the target will receive. +#[derive(Default, PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug, TypeInfo, MaxEncodedLen)] +pub struct StakingTargetDetails +where + Balance: Default + Saturating + Copy + CheckedAdd + CheckedSub, +{ + /// The total amount of tokens that have been targeted to the MSA. + pub amount: Balance, + /// The total Capacity that an MSA received. + pub capacity: Balance, +} + +``` + +The type used for storing information about staking details. + +```rust + +#[derive( + TypeInfo, RuntimeDebugNoBound, PartialEqNoBound, EqNoBound, Clone, Decode, Encode, MaxEncodedLen, +)] +#[scale_info(skip_type_params(T))] +pub struct StakingDetails { + /// The amount a Staker has staked, minus the sum of all tokens in `unlocking`. + pub active: BalanceOf, + /// The type of staking for this staking account + pub staking_type: StakingType, +} + +``` + +The type that is used to record a single request for a number of tokens to be unfrozen. + +```rust + +#[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug, TypeInfo, MaxEncodedLen)] +pub struct UnlockChunk { + /// Amount to be unfrozen. + pub value: Balance, + /// Block number at which point funds are unfrozen. + pub thaw_at: EpochNumber, +} + +``` + +#### **Interfaces for Capacity-Pallet** + +#### **Calls** + +##### **Set_epoch_length** + +The extrinsic that sets the length of Epoch in number of blocks through governance. + +```rust + +/// Sets the epoch period length (in blocks). +/// +/// # Requires +/// * Root Origin +/// +/// ### Errors +/// - Returns `Error::MaxEpochLengthExceeded` if `length` is greater than T::MaxEpochLength. +pub fn set_epoch_length(origin: OriginFor, length: BlockNumberFor) -> DispatchResult {} + +``` + +Acceptance Criteria are listed below but can evolve: + +1. Origin is Root. +2. Sets the new Epoch-Period. +3. New Epoch-Period begins at the Next Epoch's start. + +##### **Capacity Storage** + +Storage for the issuance of Capacity to Registered Providers: + +```rust + +/// Storage for target Capacity usage. +/// - Keys: MSA Id +/// - Value: [`CapacityDetails`](types::CapacityDetails) +#[pallet::storage] +pub type CapacityLedger = + StorageMap<_, Twox64Concat, MessageSourceId, CapacityDetails, T::EpochNumber>>; + +``` + +The type for storing Registered Provider Capacity balance: + +```rust + +pub struct CapacityDetails { + /// The Capacity remaining for the `last_replenished_epoch`. + pub remaining_capacity: Balance, + /// The amount of tokens staked to an MSA. + pub total_tokens_staked: Balance, + /// The total Capacity issued to an MSA. + pub total_capacity_issued: Balance, + /// The last Epoch that an MSA was replenished with Capacity. + pub last_replenished_epoch: EpochNumber, +} + +``` + +#### **Traits** + +As mentioned above, Capacity is non-transferable and implements the following interface to reduce and increase capacity on an MSA. + +```rust + +pub trait Nontransferable { + /// Scalar type for representing balance of an account. + type Balance: Balance; + + /// The available Capacity for an MSA. + fn balance(msa_id: MessageSourceId) -> Self::Balance; + + /// Reduce Capacity of an MSA by amount. + fn deduct(msa_id: MessageSourceId, capacity_amount: Self::Balance) + -> Result<(), DispatchError>; + + /// Increase Staked Token + Capacity amounts of an MSA. (unused) + fn deposit( + msa_id: MessageSourceId, + token_amount: Self::Balance, + capacity_amount: Self::Balance, + ) -> Result<(), DispatchError>; +} + +``` + +### **Implementation of how to Replenish** + +Replenishable means that all Capacity is replenished after a fixed period called an Epoch Period. An Epoch Period is composed of a set number of blocks. In the example below, the Epoch Period is three blocks. The initial Epoch Period will be around 100 blocks. This Epoch Period may be modified through governance. + +To support scaling, Capacity is replenished lazily for each Capacity Target. When the Target attempts to post a message, their remaining capacity and last `replenished_epoch` is checked. If they are out of capacity **and** their `last_replenished_epoch` is less than the current epoch, then the Target's capacity is automatically replenished to their total allowed, minus the amount needed for the current transaction. The `last_replenished_epoch` is then set to the current epoch. + +Consumers of Capacity may choose a strategy for posting transactions: + +1. Query capacity remaining before posting any capacity-based transaction to ensure transactions never fail +2. Occasionally query, cache and track epoch info and capacity usage off-chain for faster transaction submission, at the risk of some transactions failing due to being out of sync + +![https://user-images.githubusercontent.com/3433442/189949840-cafc3b2f-5af7-4a65-8610-81dbe42a69ce.png](https://user-images.githubusercontent.com/3433442/189949840-cafc3b2f-5af7-4a65-8610-81dbe42a69ce.png) + +Capacity can be replenished by making your first Capacity transaction during a new Epoch Period. + +![https://user-images.githubusercontent.com/3433442/189948939-6b85465a-f9d9-4330-b887-561c7f0283b1.png](https://user-images.githubusercontent.com/3433442/189948939-6b85465a-f9d9-4330-b887-561c7f0283b1.png) + +The following interface is implemented on Capacity-Pallet to facilitate replenishment: + +#### **Hooks** + +```rust + +#[pallet::hooks] +impl Hooks> for Pallet { + fn on_initialize(_now: BlockNumberFor) -> Weight {} +} + +``` + +Acceptance Criteria are listed below but can evolve: + +1. After a fixed number of blocks, a new Epoch Period begins. +2. At the start of a new Epoch Period, `EpochNumber` storage is increased by 1. +3. At the start of a new block, `CurrentBlockUsedCapacity` storage is reset. + +#### Traits + +Replenishable trait implemented on Capacity-Pallet. This trait is used to replenish the Capacity of a Registered Provider. + +```rust + +trait Replenishable { + type Balance; + + /// Replenish an MSA's Capacity by an amount. + fn replenish_by_amount(msa_id: MessageSourceId, amount: Balance) -> Result {}; + + /// Replenish all Capacity balance for an MSA. + fn replenish_all_for(msa_id: MessageSourceId) -> Result; + + /// Checks if an account can be replenished. + fn can_replenish(msa_id: MessageSourceId) -> bool; +} +``` + +#### **Storage** + +`CurrentEpoch` help keep count of the number of Epoch-Periods: + +```rust +/// Storage for the current epoch number +#[pallet::storage] +#[pallet::whitelist_storage] +pub type CurrentEpoch = StorageValue<_, T::EpochNumber, ValueQuery>; +``` + +To facilitate keeping track of the Capacity consumed in a block. +*(Not yet implemented)* + +```rust + +/// Storage to keep track of the Capacity consumed in a block. +#[pallet::storage] +pub type CurrentBlockUsedCapacity = StorageValue<_, BalanceOf, ValueQuery>; + +``` + +### **Prioritization of Capacity transactions** + +Substrate default prioritization is composed of the transaction length, weight, and tip. Adding a tip allows you to increase your priority and thus increases the chance that your transaction is added to the next block. + +Capacity transactions do not have the ability to tip, unlike token transactions. This puts Capacity transactions at a disadvantage because in times of high congestion tokens transactions can prevent Capacity transactions from being included in a block. + +To prevent token transactions from dominating block space, we prioritize Capacity transactions over token transactions. Additionally, we put a limit on the amount of block space Capacity transactions can consume. This new priority allows Capacity transactions to fill up their allocated space first and once the limit has been reached allow for token transactions to fill up the remaining block. We flip the prioritization in this manner because we expect more Capacity transactions than non-capacity transactions. The following section will describe how the block space is filled. + +### **Block space allocation for Capacity transactions** (*not implemented yet*) + +We expect more Capacity transactions versus non-capacity transactions. To prevent Capacity transactions from dominating block space, we extend what Substrate does to distribute block space among Mandatory, Operational, and Normal transactions. + +In Substrate, a max limit is imposed on how much block space Mandatory, Operational, and Normal transactions can consume. Once that limit is reached, transactions are returned to the transaction pool for reprocessing. Below you can see that three Normal transactions have not reached the `max total`. + +![https://user-images.githubusercontent.com/3433442/189948974-5dc537ad-2e87-4425-9616-6e93e7b69c2b.png](https://user-images.githubusercontent.com/3433442/189948974-5dc537ad-2e87-4425-9616-6e93e7b69c2b.png) + +Similarly, we impose a limit on how much space Capacity transactions can consume from Normal transactions. This new configurable limit can be set by governance. + +![https://user-images.githubusercontent.com/3433442/189949020-7bdd2e34-5323-4264-a821-1dcbb0063c20.png](https://user-images.githubusercontent.com/3433442/189949020-7bdd2e34-5323-4264-a821-1dcbb0063c20.png) + +A [SignedExtension](https://paritytech.github.io/substrate/master/sp_runtime/traits/trait.SignedExtension.html) trait is implemented so that once the Capacity transaction has reached the `max_total` of allocated Capacity space, the transaction is put back into the transaction pool. Below illustrates the Capacity transaction SignedExtension flow. + +![https://user-images.githubusercontent.com/3433442/189949048-7d19a194-701d-4267-ae1a-0333ee665ae7.png](https://user-images.githubusercontent.com/3433442/189949048-7d19a194-701d-4267-ae1a-0333ee665ae7.png) + +A type for implementing the SignedExtension trait: + +```rust + +/// A type that implements SignedExtension that checks to see if Capacity transaction allocated +/// weight has been reached. +pub struct CheckCapacityWeight(core::market::PhantomData); + +``` + +```rust + +impl SignedExtension for CheckCapacityWeight + where T::RuntimeCall: Dispachable + IsSubtype>, +{ + type AccountId = T::AccountId; + type Call = T::RuntimeCall; + type AdditionalSigned = (); + type Pre = (); + + fn additional_signed(&self) -> core::result::Result<(), TransactionValidityError> { + Ok(()) + } + + fn pre_validate() -> Result<(), TransactionValidityError> {} + + /// Below describes the interfaces for validate, pres_dispatch and post_dispatch +} + +``` + +SignedExtension validate + +```rust + +/// Validates that extrinsic does not exceed max-total of Capacity transactions +/// +/// ### Errors +/// +/// - Returns InvalidTransaction::ExhaustsResource if transaction is greater than +/// max-total for Capacity Transactions +fn validate( + &self, + _who: &Self::AccountId, + call: &Self::Call, + info: &DispatchInfoOf, + len: usize, +) -> TransactionValidity {} + +``` + +Acceptance Criteria are listed below but can evolve: + +1. Checks that the extrinsic does not exceed the size of the `max_total` allocated space. + +SignedExtension pre-dispatch + +```rust + +/// Validates that extrinsic does not exceed max-total of Capacity transactions +/// +/// ### Errors +/// +/// - Returns InvalidTransaction::ExhaustsResource if transaction fails checks. +fn pre_dispatch( + self, + _who: &Self::AccountId, + _call: &Self::Call, + info: &DispatchInfoOf, + len: usize, +) -> Result<(), TransactionValidityError> {} + +``` + +Acceptance Criteria are listed below but can evolve: + +1. Only run validation, pre-dispatch, and post-dispatch on calls that match Capacity Transactions. +2. Adding the Capacity transaction weight to the block-weight total should not cause an overflow. +3. Given Call is a Capacity transaction, it checks that the extrinsic does not exceed the size of the `max_total` allocated weight. +4. Given Call is a Capacity Transaction, it checks that adding the transaction *length* will not exceed the [max length](https://paritytech.github.io/substrate/master/frame_system/limits/struct.BlockLength.html) for the Normal dispatch class. +5. Given the call is a Capacity transaction, checks that adding the weight of the transaction will not exceed the `max_total` weight of Normal transactions + 1. base_weight + transaction weight + total weight < current total weight of normal transactions. +6. Given Call is a Capacity transaction, check that adding the transaction weight will not exceed the `max_total` weight of Capacity Transactions. + 1. base_weight + transaction weight + total weight < current total weight of Capacity transactions. +7. Increases `CurrentBlockUsedCapacity` storage. + +SignedExtension post-dispatch + +```rust + +fn post_dispatch( + _pre: Option, + info: &DispatchInfoOf, + post_info: &PostDispatchInfoOf, + _len: usize, + result: &DispatchResult, +) -> Result<(), TransactionValidityError> {} + +``` + +Acceptance Criteria are listed below but can evolve: + +1. Subtract the actual weight of the transaction from the estimated weight to see if there was a difference and adjust `CurrentBlockUsedCapacity` by subtracting the difference. + +**Implementation of using Capacity** + +### **Transaction payment** + +When submitting a transaction, it is validated at the transaction pool before including it in a block. The validation is implemented with a [SignedExtension](https://docs.rs/sp-runtime/latest/sp_runtime/traits/trait.SignedExtension.html) that validates that the signer has enough token or Capacity to submit the transaction. + +![https://user-images.githubusercontent.com/3433442/189948536-ee02784f-7507-4e8c-b28a-0e8ec94de297.png](https://user-images.githubusercontent.com/3433442/189948536-ee02784f-7507-4e8c-b28a-0e8ec94de297.png) + +Capacity introduces an additional form of payment for transacting. As a result, FRAME's Transaction-Payment-Pallet can be modified or wrapped to toggle between token and Capacity transactions. The following implementation introduces the Dual-Payment-Pallet, a wrapper for the Transaction-Payment-Pallet, and augments it with additional functionality. In addition, it implements the `pay_with_capacity` extrinsic used to distinguish between Capacity transactions and Token transactions. + +### **Calls** + +`ChargeTransactionPayment` struct type is used to implement a SignedExtension which validates that the signer has enough Capacity or Token to transact. The struct is a named tuple that holds a tip amount. Note that tipping is limited to only Token transactions. Capacity transactions cannot tip. Any tip that is added to Capacity transactions is ignored. + +```rust + +/// A type that is used to implement a SignedExtension trait. It handles reducing +/// the balance of a Capacity or Token transaction. +#[derive(Encode, Decode, Clone, Eq, PartialEq, TypeInfo)] +#[scale_info(skip_type_params(T))] +pub struct ChargeTransactionPayment(#[codec(compact)] BalanceOf); + +``` + +`ChargeTransactionPayment` implements a `withdraw_fee` method to resolve and withdraw payment fees from either a Token or Capacity account. If the signer does not have enough to pay for transaction errors with a `TransactionValidityError` and drops the transaction from the pool during the validation phase. + +```rust + +impl ChargeFrqTransactionPayment +where + BalanceOf: Send + Sync + FixedPointOperand + IsType>, + ::RuntimeCall: + Dispatchable + IsSubType>, +{ + /// Withdraws fees from either Token or Capacity transactions. + /// + /// ### Errors + /// + /// - Returns InvalidTransaction::Payment if transaction + /// Capacity or Token does not have enough to cover the transaction fee. + fn withdraw_fee( + &self, + who: &T::AccountId, + call: &CallOf, + info: &DispatchInfoOf>, + len: usize, + ) -> Result<(BalanceOf, InitialPayment), TransactionValidityError> {} +} + +``` + +Acceptance Criteria are listed below but can evolve: + +1. Given a Capacity transaction, withdraw the fee from the Capacity account balance. +2. Given a Token transaction, withdraw the fee from the Token account balance using the Transaction-Payment-Pallet withdrawal function for Token accounts. +3. The result includes an enum describing how the payment was made. +4. Given a free transaction, skip any withdrawals. + +An enum is used for describing whether the payment was made with Capacity, Token or free. This enum becomes useful post-dispatch to issue a refund if there was an overcharge for the fee payment. + +```rust + +/// Types for handling how the payment will be processed. +/// This type is passed to Post-dispatch to be able to distinguish how to reimburse overcharges in fee payment. +#[derive(Encode, Decode, DefaultNoBound, TypeInfo)] +pub enum InitialPayment { + /// Pay no fee. + Free, + /// Pay fee with Token. + Token(LiquidityInfoOf), + /// Pay fee with Capacity. + Capacity, +} + +``` + +Below are the interfaces of the SignedExtension that ChargeTransactionPayment implements. + +```rust + +/// Implement signed extension SignedExtension to validate that a transaction payment can be withdrawn for a Capacity or Token account. This allows transactions to be dropped from the transaction pool if the signer does not have enough to pay the fee. Pre-dispatch withdraws the actual payment from the account, and Post-dispatch refunds over charges made at pre-dispatch. +impl SignedExtension for ChargeFrqTransactionPayment +where + ::RuntimeCall: + IsSubType> + Dispatchable, + + BalanceOf: Send + + Sync + + FixedPointOperand + + From + + IsType> + + IsType>, +{ + const IDENTIFIER: &'static str = "ChargeTransactionPayment"; + type AccountId = T::AccountId; + type Call = ::RuntimeCall; + type AdditionalSigned = (); + /// The type that gets past to post-dispatch. + /// The InitialPayment allows post-dispatch to know to what account + /// a refund should be applied. + type Pre = ( + // tip + BalanceOf, + Self::AccountId, + InitialPayment, + ); + + /// Below, you can find validate, pre-dispatch, and post-dispatch interfaces. + ... +} + +``` + +```rust + +/// Validate that payment can be withdrawn from the Capacity or Token account. +/// +/// ### Errors +/// +/// - Returns InvalidTransaction::Payment if transaction +/// Capacity or Token does not have enough to cover the transaction fee. +fn validate( + &self, + who: &Self::AccountId, + call: &Self::Call, + info: &DispatchInfoOf>, + len: usize, +) -> TransactionValidity {} + +``` + +Acceptance Criteria are listed below but can evolve: + +1. Checks if the fee can be withdrawn from Token or Capacity balances. +2. Resolves the priority based on weight, tip, and transaction length. Note that the transaction priority can be calculated using the `get_priority` function from Transaction-Payment-Pallet. + +```rust + +fn pre_dispatch( + self, + who: &Self::AccountId, + call: &Self::Call, + info: &DispatchInfoOf, + len: usize, +) -> Result {} + +``` + +Acceptance Criteria are listed below but can evolve: + +1. Validates that a withdrawal can be made from Token or Capacity balance. +2. Withdraws payment for the transaction fee from either Token or Capacity balance. + +Notice that Pre-dispatch returns a type `Pre`; this is the type that gets passed from pre-dispatch to post-dispatch function. The associated type consists of a tuple that includes: the tip, account, and how the initial payment was made. This lets post-dispatch know how the fee was paid for in Capacity, Token, or no cost. + +After the transaction is authored, the post-dispatch is responsible for refunding any overcharged Capacity or Token payment. Using the type associated type, `Pre`, that gets passed in from the pre-dispatch function, it corrects the fee refunding the amount overcharged. + +```rust + +fn post_dispatch( + pre: Self::Pre, + info: &DispatchInfoOf, + post_info: &PostDispatchInfoOf>, + len: usize, + result: &DispatchResult, +) -> Result<(), TransactionValidityError> {} + +``` + +Acceptance Criteria are listed below but can evolve: + +1. Issue overpayment for Token transaction. +2. Given transaction is free, nothing needs to be refunded. + +Note that Capacity transactions do not get refunded for overcharges. + +## Non-goals + +Rewards and re-staking are left for another design document. + +## Benefits and Risk + +The benefit of implementing Capacity is that it allows applications to increase their users by reducing costs. + +## Alternatives and Rationale + +Here I will discuss two alternative options for managing congestion with different ways to create new Epoch Periods: + +1. Create a new Epoch Period based on total Capacity usage. +2. Create a new Epoch Period based on the moving average of used Capacity. + +### **Create a new Epoch Period based on total Capacity usage** + +Epochs Periods are used to manage congestion on the network. Instead of having a contiguous fixed Epoch Period at the end of the current Epoch Period, we can change the length of the next Epoch based on network demand. We can calculate demand for Capacity based on the current Epoch “fullness.” The Epoch “fullness” is a target used to increase or decrease the next Epoch Period to keep the total Capacity used in an Epoch as close as possible to the target. + +This target would be configurable and can be called `config::epochTarget`. In addition, we also configure a multiplier function that calculates how much the next Epoch should increase or decrease. This can be defined as `config::epochUtilizationMultiplier`. + +![https://user-images.githubusercontent.com/3433442/189948635-b2817eae-d23c-4f5b-bef8-77643d5336ea.png](https://user-images.githubusercontent.com/3433442/189948635-b2817eae-d23c-4f5b-bef8-77643d5336ea.png) + +The above illustrates two epochs where the second one contracts because network congestion has decreased. As a result of the epoch decreasing, Capacity is replenished faster. + +Upon finalizing each block, we get the total Capacity used and update the total weight for an Epoch. + +![https://user-images.githubusercontent.com/3433442/189948747-03fbb85e-caff-4771-8d24-427406142c65.png](https://user-images.githubusercontent.com/3433442/189948747-03fbb85e-caff-4771-8d24-427406142c65.png) + +### **Storage** + +To facilitate keeping track of the Capacity consumed during an Epoch Period. + +```rust + +#[pallet::storage] +pub type CurrentEpochUsedCapacity = + StorageValue<_, BalanceOf, ValueQuery>; + +``` + +### **Hooks** + +```rust + +#[pallet::hooks] +impl Hooks> for Pallet { + fn on_initialize(_now: BlockNumberFor) -> Weight {} +} + +``` + +Acceptance Criteria are listed below but can evolve: + +1. After a fixed number of blocks, a new Epoch begins. +2. At the start of an Epoch Period, `CurrentEpoch` storage is increased by 1. +3. At the start of an Epoch Period, calculate the next epoch length. +4. At the start of a new block, `CurrentBlockUsedCapacity` storage is reset. +5. At the start of a new block, `CurrentEpochUsedCapacity` storage is incremented with the total Capacity used in the previous block. *(Not yet implemented)* + +### **Create a new Epoch based on the moving average of used Capacity** + +To manage congestion, the following solution uses the moving average of Capacity used after each block to calculate the next Epoch Period. Unlike the previous implementation, a new Epoch is created after the moving average of used Capacity goes below a configurable threshold called `config::MovingAverageBound`. An essential difference from the other solutions is that it becomes less predictable to know when a new Epoch Period starts. + +To compute the moving average, an additional configuration is necessary to set the window size of the moving average called `config::MovingAverageWindowSize`. + +A “circular queue” storage is used in the Capacity Pallet to track how much Capacity is used in a block. + +### Storage + +```rust + +/// Storage for used Capacity +#[pallet::storage] +pub type QueueUsedCapacity = + StorageValue<_, BoundedVec, T::MovingAverageWindowSize>, ValueQuery>; + +``` + +`QueueUsedCapacity` storage is updated similarly to the SignedExtension implemented for the solution above. However, a noticeable difference is that Capacity used for the current block is inserted into a circular queue. After inserting into the last index of the queue, used Capacity is inserted into the beginning of the queue and continues circularly. The index to store the current used Capacity can be computed by taking the modulus of the current block number with`T::MovingAverageWindowSize`. + +![https://user-images.githubusercontent.com/3433442/189948793-57d73dc2-9fee-4d74-ae7a-821b597c8ef0.png](https://user-images.githubusercontent.com/3433442/189948793-57d73dc2-9fee-4d74-ae7a-821b597c8ef0.png) + +Assuming that the target threshold is 2 for used Capacity, a new Epoch cannot be started since the moving average at block four is 4 ( 6 + 4 + 2 / 3). The moving average will begin to drop as time goes on and Registered Providers start to run out of Capacity. + +The illustration below shows that the moving average is calculated after every block. + +![https://user-images.githubusercontent.com/3433442/189948822-c2ac1c59-dd53-4888-9a15-1011c6246141.png](https://user-images.githubusercontent.com/3433442/189948822-c2ac1c59-dd53-4888-9a15-1011c6246141.png) + +### **Hooks** + +```rust + +#[pallet::hooks] +impl Hooks> for Pallet { + fn on_finalize(_now: BlockNumberFor) -> Weight {} +} + +``` + +Acceptance Criteria are listed below but can evolve: + +1. At the end of a block, compute the moving average and start a new Epoch Period if below `config::MovingAverageBound`. +2. Given the moving average goes below the threshold, start a new Epoch and increment Epoch number storage by one. + +Note that the moving average should start being calculated at the end of every block after filling up the queue. diff --git a/designdocs/delegation.md b/designdocs/delegation.md new file mode 100644 index 0000000000..88461ce9ab --- /dev/null +++ b/designdocs/delegation.md @@ -0,0 +1,216 @@ +# Delegations + +This document describes the permissioned delegation of actions, largely, but not limited to, account creation and announcing messages by the owner of an MSA id on chain on behalf of the owner of another MSA id. + +## Table of Contents + +- [Context and Scope](#context-and-scope) +- [Problem Statement](#problem-statement) +- [Goals and Non-Goals](#goals-and-non-goals) +- [Proposal](#proposal) +- [Benefits and Risks](#benefits-and-risks) +- [Alternatives and Rationale](#alternatives-and-rationale) +- [Glossary](#glossary) + +## Context and Scope + +This document describes how a delegation is created and validated on chain, and outlines an API. +Delegation to one account can be used to perform tasks on behalf of another account. +Some examples of delegated actions and delegated permissions are given. +It's expected that the actions and permissions that are implemented for delegation will evolve as needed. + +## Problem Statement + +The primary motivation for delegation is to support End Users of the DSNP platform, however, it is expected that delegation will be used in other ways. + +Market research makes it clear that End Users are extremely reluctant to pay to use applications, particularly social networks. +This means there needs to be some way to onboard End Users and relay their activity through the DSNP platform without charging them. +The use of authorized Delegates enables the creation of End User accounts as well as processing and storing user messages and other data for the End Users, paid for by a Provider, who can recoup these costs by other means (outside the scope of this Design Document). +The vast majority of this activity will not reside on chain, however, Frequency needs to be able to coordinate the exchange of data, and to securely allow an End User or any other type of account holder to manage their Delegates. +The delegation is managed by assigning each account, called a Message Source Account or MSA, an ID number, called an MsaId. + +## Goals and Non-Goals + +Delegation, roughly speaking, must allow all Create, Read, Update and Delete (CRUD) operations by a Delegating MSA to fulfill the purpose of giving other MSAs proper authority over their Delegates. +Put another way, delegation must have the following properties: + +- **Authorizable** - delegations can be authorized with specific permissions by MSAs. +- **Verifiable** - there is a way to check that Providers are doing things only when authorized and only what they are authorized to do. +- **Transparent** - delegations can be readable by anyone, in order to maximize opportunities to police Provider actions. +- **Changeable** - a Delegator can change Provider permissions to give MSAs control over what tasks are permitted to the Provider. https://github.com/frequency-chain/frequency/blob/main/designdocs/provider_permissions.md +- **Revocable** - a Delegator can withdraw permissions completely from the Provider. + +### Non-Goals + +- Doesn't cover handling the retirement of an MSA id, which is a possible future feature and would affect delegation validation and queries. +- Delegated removal would allow removing any other provider without substituting itself as the new provider. Such an endpoint presents serious enough issues that it should be discussed and designed separately, if it's to be implemented at all. +- Does not specify what the permissions are nor the permissions data type. +- Does not specify a value for pallet constants, only when there should be one. These values should be determined by such factors as storage costs and performance. +- Does not include a "block/ban" feature for delegation, which is under discussion; the belief is that a Provider also ought to be able to permanently refuse service to a given MSA id, which further supports the idea of a mutually agreed upon relationship. + +## Proposal + +The proposed solution is to give End Users the ability to create an on-chain MSA id through an authorized provider. End Users can also transparently authorize and manage their own Providers and permissions, either directly using a native token or through an explicitly authorized Provider. Additionally, we allow MSA ids` to be directly purchased using a native token. + +### API (extrinsics) + +- All names are placeholders and may be changed. +- All extrinsics must emit an appropriate event with all parameters for the call, unless otherwise specified. +- Errors in the extrinsics must have different, reasonably-named error enums for each type of error for ease of debugging. +- "Owner only" means the caller must own the delegatorMSA id. +- Events are not deposited for read-only extrinsic calls. + +#### create_sponsored_account_with_delegation + +Creates a new MSA on behalf of a delegator and adds the origin held MSA as its provider. + +- Parameters: + + 1. `add_provider_payload` - this is what the holder of delegator_key must sign and provide to the provider beforehand. + - `authorized_msa_id` - the provider, of type `MessageSourceId` + 2. `delegator_key` - The authorizing key used to create `proof` + 3. `proof` - The signature of the hash of `add_provider_payload` by the delegator + +- Events: + 1. `MsaCreated` + - `new_msa_id` - id of the newly created MSA + - `key` - the `delegator_key` + 2. `DelegationGranted` + - `delegator` - id of the newly created MSA + - `provider` - id of the MSA help by the provider + +#### revoke_delegation_by_provider + +Provider revokes its relationship from the specified `delegator` in the parameters. This function allows a provider to control access to its services, for example, in the case of an End User that violates Terms of Service. + +- Parameters: + + 1. `delegator` - the MSA id of the delegator + +- Events: + 1. `ProviderRevokedDelegation` + - `provider` - id of the MSA held by the delegator + - `delegator` - id of the MSA held by the provider + +#### create + +Directly creates an MSA for the origin (caller) without a provider. +This is a signed call directly from the caller, so the owner of the new MSA pays the fees for its creation. + +- Events: + 1. `DelegatorRevokedDelegation` + - `msa_id` - id of the newly created MSA + +#### revoke_delegation_by_delegator + +A delegator removes its relationship from a provider. +This is a signed call directly from the delegator's MSA. +This call incurs no fees. + +- Parameters: + + 1. `provider_msa_id` - id of the MSA held by the provider + +- Restrictions: **Owner only**. + +- Event: `DelegateRemoved` + 1. `delegator` - id of the MSA held by the delegator + 2. `provider` - id of the MSA held by the provider + +### Custom RPC endpoints + +#### get_msa_keys(msa_id) + +Retrieve a list of public keys of up to `MaxPublicKeysPerMsa` size for the provided MSA id, or an empty list if the MSA id does not exist. + +- Parameters: + 1. `msa_id`: the MSA id of which associated keys are to be retrieved + +#### check_delegations + +Validate that a provider can delegate for a list of MSA ids. +This call is intended for validating messages in a batch, so this function would be an all-or-nothing check. +If the permission stored for a given MSA id exceeds the parameter, the check for that MSA id passes. +For example, if a provider has _all_ permissions set, then querying for a subset of permissions will pass. +Verify that the provided provider `provider_msa_id` is a provider of the delegator, and has the given permission value. +Returns `Ok(true)` if provider is valid, `Ok(false)` if not. +Throws an Error enum indicating if either provider or delegator does not exist. + +- Parameters: + 1. `delegator_msa_ids`: a list of Delegator ids possible delegators + 2. `provider_msa_id`: the ProviderId to verify + +### Storage + +- Delegations are stored as a Double-key map of Delegator MSA id --> Provider MSA id. The data stored contains the `Permission` for that relationship: + +```rust + pub(super) type DelegatorAndProviderToDelegation = StorageDoubleMap< + _, + Twox64Concat, + Delegator, + Twox64Concat, + Provider, + Delegation, T::MaxSchemaGrantsPerDelegation>, + OptionQuery, + >; +``` + +## Benefits and Risks + +As stated earlier, one of the primary intended benefits of delegation is to allow feeless account creation and messaging. + +There is a risk of abuse with delegation of messages, since this makes it possible for a provider to, for example, modify the End User's messages before batching them. The message sender would have to be caught and the End User must react after the fact, instead of the message sender being technologically prevented from this type of dishonesty. + +There is another risk of abuse for any other type of delegated call if the wallet that provides the signing capability does not make it very clear to the End User what they're signing. + +## Alternatives and Rationale + +### End User pays for existential deposit + +We briefly discussed the possibility of requiring a small token deposit to create their account. We decided against this option because: + +1. As mentioned above, people don't expect and won't pay to use social media. +2. Onboarding would be a problem; even if they did want to pay even a small amount, getting people access to a token is tremendously difficult at this time, requiring unacceptable tradeoffs. +3. We would be unable to serve people who are unbanked or don't have access to crypto trading platforms. + +### dApp Developer pays for existential deposit + +One alternative to allow for account creation at no cost to the End User was the dApp developer MSA sends an existential deposit to the account to create it. +We decided against this option for a number of reasons. + +1. It could create a potential for abuse and token loss by those creating numerous fake accounts and then removing the dApp Public Key as a provider. +2. We have the ability not to require an existential deposit, and felt this to be a better option in this particular case. + +### End user pays to send messages, with no possibility of delegating + +An alternative for delegating messaging capabilities was to have each End User pay for their own messages. +This was ruled out as the sole solution because: + +1. The average person can't or won't pay to use social media. +2. Making End Users pay to send messages would require people to sign transactions every time they make any updates — all posts, all reactions, all replies, all profile changes, all follows/unfollows, etc. Having to do this would be too annoying for the End User. + +This design still includes some direct pay endpoints, so even if an End User did not want to trust a provider, they could still pay for all of their messages if they want to assume the cost of running a node and pay directly. + +### Permissioned delegation is an industry standard + +Furthermore, permissioned delegation via verifiable strong cryptographic signature is a well-known and tested feature in smart contracts of distributed blockchain-based applications. + +### Deferred features + +#### An "effective block range" for providers + +Including an effective block range in the provider storage data would allow providers to be expired, not just removed. A block range could better support features like Tombstone, blocking, and retiring an MSA id. Effective block range is deferred because those features have not been fully defined. + +#### add_provider(delegator, provider, permissions) + +Directly adding a provider, with or without a provider's permission, is not to be implemented at this time. The original use case was for a potential wallet app to support browsing and adding providers. Adding/replacing a provider for an existing account with an MSA id could still be done using the delegated methods, `add_self_as_delegate` or `replace_delegate_with_self`. A direct add brought up concerns about potential risks of adding a provider without the provider's knowledge. For example, if the provider has removed the delegator for legitimate reasons, such as if the End User violated the provider's Terms of Service, then the provider ought to be able to prevent them from adding the provider again just by paying for it. + +## Glossary + +- **Provider**: An MSA that has been granted specific permissions by its Delegator. A company or individual operating an on-chain Provider MSA in order to post Frequency transactions on behalf of other MSAs. +- **Delegator**: An MSA that has granted specific permissions to a Provider. +- **MSA**: Message Source Account. A collection of key pairs which can have a specific token balance. +- **Public Key**: A 32-byte (u256) number that is used to refer to an on-chain MSA and verify signatures. It is one of the keys of an MSA key pair +- **MsaId**: An 8-byte (u64) number used as a lookup and storage key for delegations, among other things +- **End User**: Groups or individuals that own an MSA that is not a Provider MSA. diff --git a/designdocs/graph_sdk.md b/designdocs/graph_sdk.md new file mode 100644 index 0000000000..b6ef0b89b4 --- /dev/null +++ b/designdocs/graph_sdk.md @@ -0,0 +1,189 @@ +# Graph SDK + +## Context and Scope + +The proposed design consists of changes that is going to be a separate [repository](https://github.com/LibertyDSNP/graph-sdk) to facilitate +graph related interactions with Frequency chain in test and production environments. + +## Problem Statement + +Implementing DSNP protocol on Frequency comes with its own challenges and tradeoffs. One of these +challenges is to decide what is the boundary between DSNP and Frequency and what should be +implemented directly in Frequency. + +To keep Frequency implementation as DSNP agnostic as possible we decided to store social graph +related data as blobs in Frequency and keep the details of how these blobs are created and modified +inside DSNP spec. Graph SDK is an implementation of mentioned DSNP spec for social graph, optimized +for storage and interaction with Frequency. +## Goals + +- Define operations +- Define interface of Graph SDK. +- Define the main entities in Graph SDK. +- Define the memory model of the graph. +- Define the algorithms to optimize the output regarding Frequency. + +## Operations +Following is a list of desired operations in this SDK: + +| Name | Description | +| ------------- | ------------- | +| **Initialise** | Creates in memory graph structure for a desired DSNP user. | +| **Import** | Import the blob(s) and keys from frequency into Graph SDK for desired DSNP user. | +| **Update** | Changes the current in-memory graph structure with incoming updates. | +| **Get Graph** | Exposes current state of in-memory graph to the consumer of the SDK. | +| **Has Updates** | Determines if the applied changes created some updates in graph that needs to be persisted on Frequency. | +| **Calculate Updates** | Applies the graph changes and generates optimized blobs to be applied to Frequency | + +#### Import actions +Steps necessary to import a social graph blob: + +| | sub action | Condition | +| ------------- | ------------- | ------------- | +| 1 | Deserialize the blob to specified schema. | Always | +| 2 | Decrypt encrypted fields using DSNP version specified algorithm. | If encrypted | +| 3 | Decompress compressed fields using DSNP version specified algorithm. | If Compressed | +| 4 | Verify plain data and PRI ids | If private friendship | +| 5 | Add verified plain data into in-memory graph data structure. | Always | + +#### Update related types +| Name | Types | +| ------------- | ------------- | +| Update types | - Add
- Remove | +| Privacy levels | - Public
- Private | +| Relationship types | - Follow
- Friendship | + +## Interface + +* ###### import + * params + * _**graph_data**_: A list of `Import` type + +* ###### getConnections + * params + * _**dsnp_user_id**_: Owner of the graph we are trying to read/write + * _**privacy_level**_: Public or Private + * _**relationship_type**_: Follow or Friendship + * _**include_local_changes**_: Include local changes in graph or just return the stable instance + * returns + * A list of `Connection` type + +* ###### SetPublicKeys + * usage + * This function allows calculating PRIds for Private Friendship connections + * params + * _**dsnp_keys**_: A list of DSNP user ids and their public keys to be able to calculate PRI ids of +`DsnpKey` type + +* ###### ApplyActions + * _**actions**_: a list of connect or disconnect actions of `Action` type + +* ###### CalculateUpdates + * returns + * A list of `Update` type + +* ###### RotateKeys + * params: + * a list of `Rotation` type + +## Concepts and entities + +```rust +type Page = Vec; + +pub enum PrivacyType { + Public, + Private, +} + +pub enum ConnectionType { + Follow, + Friendship, +} + +pub struct Import { + pub dsnp_user_id: MessageSourceId, + pub keys: Vec, // need to define KeyPair based on NaCl library + pub pages: Vec, +} + +pub struct Connection { + pub dsnp_user_id: MessageSourceId, + pub privacy_type: PrivacyType, + pub connection_type: ConnectionType, +} + +pub struct DsnpKey { + pub dsnp_user_id: MessageSourceId, + pub keys: Vec, // need to define PublicKey based on NaCl library +} + +pub enum Action { + Connect { + owner_dsnp_user_id: MessageSourceId, + connection: Connection, + connection_key: Option, // included only if PRId calculation is required + }, + Disconnect { + owner_dsnp_user_id: MessageSourceId, + connection: Connection, + }, +} + +pub enum Update { + Persist { + owner_dsnp_user_id: MessageSourceId, + schema_id: SchemaId, + page_id: PageId, + prev_hash: Vec, + payload: Vec, + }, + Delete { + owner_dsnp_user_id: MessageSourceId, + schema_id: SchemaId, + page_id: PageId, + prev_hash: Vec, + }, +} + +pub struct Rotation { + owner_dsnp_user_id: MessageSourceId, + prev_key: KeyPair, + new_key: KeyPair, +} +``` + +![Entities](https://user-images.githubusercontent.com/9152501/222261121-185d4d9d-1ecb-4ffa-8fe0-8612e58d7b27.png) + +* **Tracker**: This is used only to allow generating optimized pages for Frequency. + +## Memory model and usage +It is recommended to batch the graph changes for DSNP users as much as possible and initialize the +library with all the keys and page blobs related to desired users. Apply all changes to in-memory +graph and calculate and apply all page updates to Frequency chain. + +To ensure local graph state is in sync with the chain graph state, it is recommended to +only initialize and use the library in case there are any changes to the graph, instead of having a +long living in-memory instance of the graph. This would minimize the probability of having local +state being stale. + +## Algorithms + +We would like to minimize the number of transactions and related data which needs to be submitted to +Frequency. + +An example of such an algorithm would be as follows +1. apply all removes before adds to determine all pages that are required to be changed +2. apply adds to pages that are required to be changed and check the page size +3. if page size is bigger than supported try the next changing page +4. if there are no changing pages start with existing pages with the least data (or last page) +and do check in step 3. +5. if there are no pages like that create a new page + +#### Fullness check +To relax the optimization computation on pages we can define a threshold of fullness along with hard +cutoffs. If the newly added data causes this page to pass the defined threshold we will consider +that the page became full after addition. +Thresholds are helpful to reduce the possibility of adding a new data passing the hard cutoff point +in which requires the data to be calculated twice. First to ensure not passing the cutoff point and +then to actually add the data to the page. diff --git a/designdocs/message_storage.md b/designdocs/message_storage.md new file mode 100644 index 0000000000..1fb1dbbebc --- /dev/null +++ b/designdocs/message_storage.md @@ -0,0 +1,159 @@ +# On Chain Message Storage + +## Context and Scope +The proposed feature consists of changes that is going to be one (or more) pallet(s) in runtime of a +Substrate based blockchain, and it will be used in all environments including production. + +## Problem Statement +One of the core features of **Frequency** is to facilitate passing messages between different +participants. To implement this core feature, backed with guarantees provided by Blockchain +technology (in our case **Substrate**) we are looking for architectures and data structures +that will allow us to store these messages on chain. + +## Goals +- Allowing storage of messages with flexible schemas on chain +- Allowing high write throughput +- Allowing high read throughput +- Allowing some kind of retention mechanism to avoid infinite growth of chain database + +## Proposal +Storing messages on chain using **BlockNumber** and **SchemaId** as main and secondary keys +using [StorageDoubleMap](https://paritytech.github.io/substrate/master/frame_support/storage/trait.StorageDoubleMap.html) data structure provided in Substrate. + +![Data-Page-3 drawio](../docs/images/main_storage_type.png?raw=true) + + +### Main Storage types +- **Messages** + - _Type_: `DoubleStorageMap>` + - _Purpose_: Main structure To store all messages for a certain block number and schema id +- **RetentionPeriods** + - _Type_: `StorageMap` + - _Purpose_: To store the retention period for each SchemaId (allows future adjustments) + - _Defaults_: If a schema doesn't have any retention period it means there is no retention policy + for it, and it will remain in chain DB indefinitely. +- **StartingBlocks** + - _Type_: `StorageMap` + - _Usage_: To store the starting block number for each SchemaId (will allow future adjustments to + `RetentionPeriods`) + - _Defaults_: If any schemaId does not have a value inside this `StorageMap` then the Default + starting blockNumber for it is considered as **1**. + +### On Chain Structure +Following is a proposed data structure for storing a Message on chain. +```rust +pub struct Message { + pub payload: Vec, // Serialized data in a user-defined schemas format + pub provider_key: AccountId, // Signature of the signer + pub msa_id: u64, // Message source account id (the original source of the message) + pub index: u16, // Stores index of message in block to keep total order +} +``` + +### Serialization Concerns +The initial thought around serialization was that we might want to do it on chain after validation +of the schema on each message write but due to processing restrictions on chain along with not +so good pure rust implementations support for desired serialization libraries we decided to move +schema validation and serialization processing off-chain. + +Following is a list of considerations for choosing a serialization format. + +1. **Message Schema Validation** + - We should be able to validate any message against a posted schema +2. **Efficient storage** + - On chain data storage is a limited resource, and we need to minimize stored data +3. **Supported on popular Languages** + - To facilitate third-party integrations with **Frequency** the serialization format should be + widely supported in popular programming languages. + +#### Candidates + +| | Schema Validation
possibility | Efficient storage | Language
Support | +|------------------|----------------------------------|-------------------|-----------------------------------| +| Json | ✅ | ❌ | ✅ | +| Apache
Thrift | ⁉ Some
implementations | ✅ | ✅ | +| Protobuf | ✅ | ✅ | ✅ | + +After looking into multiple serialization formats, it appears that **Apache Thrift** and **Protobuf** +are suitable candidates. We are going to move forward with **Apache Thrift** for now since it's also +been used in other parts of the project like parquet batch files. + +### Operations +#### Write +1. Off-chain: Schema of the new message will be validated against the desired schema stored on chain. +2. Off-chain: Message will be serialized using chosen serialization format mentioned above. +3. Message will be added to **Messages** using `current_block_number` and `schema_id` +4. Send an `Event` for added message. + +#### Read +1. An RPC will get all messages using following params + - `StartingBlockNumber` (inclusive) + - `EndBlockNumber` (exclusive) + - `schemaId` + - `page` (starting from 0) + - `pageSize` +2. RPC will do some initial checks on submitted params and if all are valid it will get **Messages** +from `StartingBlockNumber` until is reaches one of values from `EndBlockNumber` or `pageSize`. +3. RPC returns values using following structure + - content: `Vec` + - hasNext: `bool` + - nextBlock: `Optional` (has value if hasNext is true) + - nextPage: `Optional` (has value if hasNext is true) + +#### Cleanup (Retention policy) +1. `on_initialize` remove all values from **Messages** for all blocks in following range +[`StartingBlock`, currentBlock - `StoragePeriod` - 1] +2. update `StartingBlock` to `max(StartingBlock, currentBlock - StoragePeriod - 1 ) + 1` +3. `on_initialize` calculate and return Weight for number of database read and writes for +`on_initialize` + `on_finalize` + +## Benefits and Risks +### Benefits +- High read throughput for any query involving a specific block number +- Built in Support for a flexible time-based retention policy per schema +### Risks +1. Pre-defined maximum number of messages per block number enforced by [BoundedVec](https://crates.parity.io/frame_support/storage/bounded_vec/struct.BoundedVec.html) data type. +2. Slow read throughput for sequential data access + +#### Mitigations +1. To be able to achieve high throughput we need to carefully calculate `pre-defined maximum number` +of messages per block. This number should be sufficiently big enough to satisfy **Frequency** +requirements without allowing any denial of service attacks. +2. One way to improve read throughput for sequential data is to index the block numbers that have +any messages, to eliminate unnecessary DB reads. We can use a BitArray per SchemaId storing +0 if the block has no messages of that schemaId and store 1 if it does. To sustain write throughput +we would need to store this indexing data off-chain, and we can create jobs to create or update +it periodically. + +![Data-OnChainAnnouncements drawio](../docs/images/message_storage_bitvector.png?raw=true) +## Alternatives and Rationale +Storing messages on chain using a map of `schemaId` and `staring` index to a sequential fixed sized +bucket. + +![Data-Page-2 drawio](../docs/images/message_storage_alternative.png?raw=true) + +### Main Storage types +- **Messages** + - _Type_: `DoubleStorageMap>` + - _Purpose_: Main structure To store all messages for a certain block number and schema id +- **MessageIndices** + - _Type_: `StorageMap` + - _Purpose_: To store current indices range for each schemaId. Tuple represents the range + (startingIndex, endingIndex) + +### Rationale +The main reason not to choose this solution is that in this architecture, writes are more expensive +compared to our proposed one and generally write throughput is more important than read. +The second drawback is that there is no direct read access from a block number to published messages +in that block without traversing through previous ones. + +### Storing as Events? +- There are no fast and easy way to query and filter messages based on schemaId. +Having indexers on top of the chain will mitigate this issue but it will reduce chain self-sufficiency +- On non-archive nodes only the last **256** (by default) blocks are queryable. +This is great in terms of garbage collection but it does not provide flexibility over retention period. +## Additional Resources + +* [Transaction Lifecycle](https://docs.substrate.io/learn/transaction-lifecycle/) Transaction lifecycle details in Substrate. +* [Substrate Runtime Storage](https://docs.substrate.io/build/runtime-storage/) Runtime Storage details provided by Substrate. +* [Off-Chain Operations](https://docs.substrate.io/learn/offchain-operations/) Off-Chain operations provided by Substrate. diff --git a/designdocs/message_storage_v2.md b/designdocs/message_storage_v2.md new file mode 100644 index 0000000000..bb2b8c3ec5 --- /dev/null +++ b/designdocs/message_storage_v2.md @@ -0,0 +1,47 @@ +# On Chain Message Storage + +## Context and Scope +The proposed feature consists of changes that is going to be one (or more) pallet(s) in runtime of a +Substrate based blockchain, and it will be used in all environments including production. + +## Problem Statement +After introduction of **Proof of Validity** or **PoV** in runtime weights, all pallets should be +re-evaluated and refactored if necessary to minimize the usage of **PoV**. This is to ensure all +important operations are scalable. +This document tries to propose some changes on **Messages** pallet to optimize the **PoV** size. + +## Goals +- Minimizing Weights including **execution times** and **PoV** size. + +## Proposal +Storing messages on chain using **BlockNumber** and **SchemaId** and **MessageIndex** as main and secondary + and tertiary keys using [StorageNMap](https://paritytech.github.io/substrate/master/frame_support/storage/trait.StorageNMap.html) data structure provided in Substrate. + +### Main Storage types +- **MessagesV2** + - _Type_: `StorageNMap<(BlockNumber, SchemaId, MessageIndex), Message>` + - _Purpose_: Main structure To store all messages for a certain block number and schema id and + index + + +### On Chain Structure +Following is a proposed data structure for storing a Message on chain. +```rust +/// only `index` is removed from old structure +pub struct Message { + pub payload: Vec, // Serialized data in a user-defined schemas format + pub provider_key: AccountId, // Signature of the signer + pub msa_id: u64, // Message source account id (the original source of the message) +} +``` +## Description + +The idea is to use existing **whitelisted** storage with `BlockMessageIndex` type to store and get +the index of each message to be able to use it as our third key for `StorageNMap`. + +We would store each message separately into `StorageNMap` with following keys +- primary key would be `block_number` +- secondary key would be `schema_id` +- tertiary key would be the `index` of the message for current block which starts from 0 + + diff --git a/designdocs/passkey_p256.md b/designdocs/passkey_p256.md new file mode 100644 index 0000000000..6fb4a26728 --- /dev/null +++ b/designdocs/passkey_p256.md @@ -0,0 +1,555 @@ +# Design Doc for P256 Passkey Support + +## Table of Contents + +- [Design Doc for P256 Passkey Support](#design-doc-for-p256-passkey-support) + - [Table of Contents](#table-of-contents) + - [1. Introduction](#1-introduction) + - [2. Benefits](#2-benefits) + - [3. Terminology](#3-terminology) + - [Accounts](#accounts) + - [Keys](#keys) + - [Signatures](#signatures) + - [4.1. Data Flow Diagram](#41-data-flow-diagram) + - [4.2. Data maps for Legal Teams](#42-data-maps-for-legal-teams) + - [Web Wallet backend](#web-wallet-backend) + - [Users Device](#users-device) + - [5. Specification](#5-specification) + - [Terms](#terms) + - [Passkey Transaction Payload](#passkey-transaction-payload) + - [Passkey Registration](#passkey-registration) + - [Transaction Submission Specification](#transaction-submission-specification) + - [Security Considerations](#security-considerations) + - [General](#general) + - [Front-end (client)](#front-end-client) + - [Backend](#backend) + - [On-chain](#on-chain) + - [6. Implementation](#6-implementation) + - [On-chain Implementation](#on-chain-implementation) + - [Extrinsic verification](#extrinsic-verification) + - [Signature verification](#signature-verification) + - [Backend Example Code](#backend-example-code) + - [Passkey Registration Verification](#passkey-registration-verification) + - [Transaction Authentication Verification](#transaction-authentication-verification) + - [7. Options for Discussion](#7-options-for-discussion) + - [Mortality of `account_sig_passkey_pk` i.e. Account Signature on Passkey Public Key](#mortality-of-account_sig_passkey_pk-ie-account-signature-on-passkey-public-key) + - [Pros/Cons](#proscons) + - [Unsigned Extensions vs Extending MultiSignature](#unsigned-extensions-vs-extending-multisignature) + - [Unsigned Extensions](#unsigned-extensions) + - [Pros/Cons](#proscons-1) + - [Extending MultiSignature](#extending-multisignature) + - [Pros/Cons](#proscons-2) + - [Generic Key Support](#generic-key-support) + - [Separate Pallet](#separate-pallet) + - [8. References](#8-references) + +## 1. Introduction + +This document outlines the design considerations and specifications for integrating P256 Passkey support for performing transactions on the Frequency chain. Passkey support aims to provide a novel non-custodial solution for managing user accounts and signing transactions on-chain. + +## 2. Benefits + +- **Non-Custodial Account Management**: Passkey support enables users to interact with the Frequency chain without actual seed access. This reduces the risk of seed exposure and enhances security. + +- **Functionality**: Passkey support provides a better user experience by enabling users to sign transactions without seed access. The proliferation of Passkey-enabled services can lead to a seamless user experience. + +- **Interoperability**: The use of standard cryptographic protocols (e.g., P256) ensures compatibility with other systems and services that also support these standards. This can facilitate integrations with existing wallets, security modules, and third-party applications. + +- **Backup and Recovery**: Passkey support can be used to facilitate account recovery and backup mechanisms. By signing the account Public Key, users can prove ownership of the account and recover access in case of a lost seed. + +## 3. Terminology + +### Accounts + +- **Passkey Account**: The user account associated with the Passkey. +- **Frequency Account**: The account used for on-chain transactions and interactions. This account is derived from a seed phrase generated by the Web Wallet. +- **Web Wallet**: The platform facilitating the management and interaction with user accounts. + +### Keys + +- **Passkey**: P256 key pair used for transaction signing and account management. This is the primary key used for transaction signing. +- **Passkey Public Key**: The Public Key retrieved from the Passkey registration process. +- **Account Key**: The key pair generated from a seed phrase. +- **Account Public Key**: The Public Key derived from the Account Key. + +### Signatures + +- **Account signature on Passkey Public Key**: A cryptographic signature generated using the Account Key. The data being signed is the Passkey Public Key. This is used to prove ownership of Account Key. +- **Passkey Signatures**: A cryptographic signature generated using the Passkey private key. This is presented to Passkey enabled services as a challenge-response mechanism. Passkeys are used to generate two signatures as follows: + - **Signature on Account Public Key**: Passkey signs a message containing the account Public Key. This signature is retained by a Web Wallet platform and/or maybe used for account recovery. + - **Signature on Transactions**: Passkey signs the transaction payload which needs to be submitted on-chain. This signature is used to verify the authenticity of the transaction. + +## 4.1. Data Flow Diagram + +- Simplified Registration Diagram + ![Registration Diagram](../docs/images/Passkey-Registration.png?raw=true) + +- Simplified Transaction Diagram + ![Transaction Diagram](../docs/images/Passkey-Transaction.png?raw=true) + +## 4.2. Data maps for Legal Teams + +### Web Wallet backend + +- Passkey Signature of Account Public Key (`passkey_sig_account_pk`) +- Passkey signature of transaction (`passkey_sig_tx`) +- Frequency Account key signature of Passkey Public Key (`account_sig_passkey_pk`) +- Generated Account Public Key (`account_pk`) +- `credentialPublicKey`: Passkey Public Key (`passkey_pk`) +- `UserName`: User's website-specific username (email, etc...) +- `UserId`: User's website-specific unique ID +- `CredentialId`: The credential's credential ID for the Passkey +- `Counter`: The number of times the authenticator reported it has been used. +- `credentialDeviceType`: Whether this is a single-device or multi-device credential. +- `credentialBackedUp`: Whether or not the multi-device credential has been backed up. Always false for single-device credentials. +- Transaction call + +### Users Device + +- Keypair for Passkey +- Keypair seed backup for Frequency Account +- All data included in the [Web Wallet backend](#web-wallet-backend) section + +## 5. Specification + +### Terms + +These are the following technical terms and specifications for the implementation of Passkey support on Frequency chain. + +- `account_keypair` : A cryptographic key pair generated from a seed phrase +- `account_pk` : Account Public Key +- `passkey_pk` : Passkey Public Key +- `passkey_sig_account_pk` : Signature generated by Passkey on `account_pk` for Web Wallet backend verification +- `account_sig_passkey_pk` : Signature generated by Account Key on `passkey_pk` +- `passkey_sig_tx` : Signature generated by Passkey on transaction payload, this is required for transaction submission. +- `passkey_authenticator_data` : Authenticator data generated by Passkey, this is required for transaction submission. +- `passkey_client_data` : Client data generated by Passkey, this is required for transaction submission. +- `nonce` : A unique number used to prevent replay attacks. + +### Passkey Transaction Payload + +- The transaction payload is a structure that contains the following fields: + + ```typescript + + interface PasskeyPayload { + passkeyPublicKey: `passkey_pk`; + passkeySignature: `passkey_sig_tx`; + passkeyAuthenticator: `passkey_authenticator_data`; + passkeyClientDataJson: `passkey_client_data`; + passkeyCall: PasskeyCall; + } + + interface PasskeyCall { + accountId: `account_pk`; + accountOwnershipProof: AccountOwnershipProof; + nonce: `nonce`; + call: Call; + } + + interface AccountOwnershipProof { + Sr25519: account_sig_passkey_pk; + } + ``` + +- The `PasskeyPayload` contains the following fields: +- `passkey_pk` : Passkey Public Key +- `passkeySignature` : Signature generated by Passkey on transaction payload +- `passkeyAuthenticator` : Authenticator data generated by Passkey +- `passkeyClientDataJson` : Client data generated by Passkey +- `passkeyCall` : The actual transaction call that needs to be submitted on-chain. +- `AccountOwnershipProof` : A proof of account ownership generated by the Account Key. This is used to prove ownership of the account. +- `nonce` : A unique number used to prevent replay attacks. + +### Passkey Registration + +1. **User visits "Wallet Setup Page"**: + - The browser JavaScript generates a seed phrase, using it to generate `account_keypair` and the corresponding account Public Key (`account_pk`). + +2. **Web Wallet requests creation of user Passkey**: + - A challenge containing the `account_pk` is sent to the Passkey generation process. + +3. **Browser JavaScript handles Passkey creation**: + - The Passkey generation process creates a Passkey and provides the `passkey_pk`. + - The Passkey signs the `account_pk`, resulting in `passkey_sig_account_pk`. + +4. **Browser JavaScript generates a signature using the seed phrase**: + - `account_keypair` is used to generate a signature on the `passkey_pk`, resulting in `account_sig_passkey_pk`. + + ```javascript + // Generate Account Key Pair + const mnemonic = "GENERATE SOME MNEMONIC HERE" + const keyring = new Keyring({ type: 'sr25519' }); + const account_keypair = keyring.fromMnemonic(mnemonic); + ... + ... + const account_pk = account_keypair.publicKey; + + // Generate Passkey and Sign Account Public Key + const options = generateRegistrationOptions(); + options.challenge = account_pk; + const registerPassKey = await SimpleWebAuthnBrowser.startRegistration(options); + ... + ... + // Sign Passkey Public Key using Account Key + const passkey_sig_account_pk = registerPassKey.signature; // obtained from the registration response + const passkey_pk = registerPassKey.publicKey; // obtained from the registration response + + // Sign Passkey Public Key using Account Key, this is used to prove ownership of the account + const account_sig_passkey_pk = account_keypair.sign(passkey_pk); + ``` + +5. **Backup options offered to the user**: + - The user is prompted to download the seed phrase or backup the seed phrase to a secure location. + +6. **Browser JavaScript transfers information to Web Wallet Backend**: + - The following data is sent: + - `passkey_pk` + - `account_pk` + - `account_sig_passkey_pk` + - `passkey_sig_account_pk` + +7. **Web Wallet validates and stores the data**: + - The backend validates the signatures to ensure ownership and integrity. + - The backend stores the following: + - `passkey_pk` + - `account_pk` + - `account_sig_passkey_pk` + - Optionally, `passkey_sig_account_pk` can be stored for account recovery. + +### Transaction Submission Specification + +Browser/Client receives the following data from the backend: + +- `passkey_pk` +- `account_pk` +- `account_sig_passkey_pk` + +1. **Transaction Formation**: + - The client initiates a transaction by providing the details needed for the transaction (e.g., recipient address, amount, nonce). + - The transaction payload includes the actual tx and proof of account ownership. + + ```javascript + // Form the transaction payload + + // an example transaction + const tx = api.tx.balances.transfer(..., ...); + + // Prepare the Passkey payload to be signed by Passkey + const account_ownership_proof = { + Sr25519: account_sig_passkey_pk, + }; + + let passkeyCallData = { + accountId: account_pk, + accountOwnershipProof: account_ownership_proof, + call: tx, + }; + + let passkeyCall = api.registry.createType('PalletFrequencyTxPaymentPasskeyCall', passkeyCallData); + ``` + +2. **Passkey Signing**: + - The transaction payload is sent to the Passkey for signing. + - The Passkey signs the transaction payload using its private key, producing a `passkey_sig_tx`. + + ```javascript + + // Sign the passkeyCall payload using Passkey + const passkeyTxSignature = await SimpleWebAuthnBrowser.startAssertion({ + challenge: passkeyCall.toU8a(), + // Additional options + }); + + // The signature generated by Passkey + passkey_sig_tx = passkeyTxSignature.signature; + passkey_authenticator_data = passkeyTxSignature.authenticatorData; + passkey_client_data = passkeyTxSignature.clientData; + // + ``` + +3. **Transaction Submission**: + - The transaction payload (consisting of `passkey_pk`, `passkey_sig_tx`, `passkey_authenticator_data`, `passkey_client_data`) is submitted to the chain. + - The transaction is submitted to the chain as an [`unsigned` extrinsic](#unsigned-extensions-vs-extending-multisignature) + + ```javascript + // Prepare the payload for the Passkey proxy call + let payload = { + passkeyPublicKey: Array.from(passkey_pk), + passkeySignature: Array.from(base64UrlToUint8Array(passkey_sig_tx)), + passkeyAuthenticator: Array.from(base64UrlToUint8Array(passkey_authenticator_data)), + passkeyClientDataJson: Array.from(base64UrlToUint8Array( + passkey_client_data)), + passkeyCall, + }; + + const passkey_payload = api.createType('PalletFrequencyTxPaymentPasskeyPayload', payload); + + // Submit the transaction to the chain without signature + const tx = api.tx.{frequecyPassKeyProxy}.submitPasskeyTx(passkey_payload); + await tx.send() + ``` + +4. **Backend Validation and Submission**: + - The backend can further validate the transaction payload before submitting it to the chain. + - The backend validates the `passkey_sig_tx` and the `passkey_authenticator_data` to ensure the authenticity of the transaction. + - For more secure operations, handling the transaction creation and submission on client side is recommended. + +### Security Considerations + +#### General + +- Never store or backup the seed phrase other than memory. +- Prefer more client side data processing and handling, backend should only store the necessary data. +- Choose vetted libraries, npm packages for handling cryptographic operations, such that signing with seed phrase, or handling of private keys is done securely. + +#### Front-end (client) + +- If key generation is done in front-end, it should ideally being done inside an isolated section such as iframe or Web Worker. +- Generated Keypair should not get stored permanently (except for back up options) and removed as soon as it is not required. + +#### Backend + +- Passkey registration response should get verified which checks the random challenge. Random Challenge +for registration is generated account Public Key (`account_pk`) +- Passkey Login response should get verified which checks the random challenge +- Passkey Transaction response should get verified which checks transaction related challenge. +- Any provided Frequency account signature should get verified. + +#### On-chain + +- Preferably using an audited crate to support p256 operations. Currently, we are using `p256` crate + which is not audited. + - After investigating other libraries it looks like the only audited alternative is `Openssl` library which is only +a wrapper around the Original C implementation and unfortunately it doesn't look like it is compatible with WASM. +- If signature checks implemented **on_validate** are expensive, then this would open a vulnerability + surface for DOS attacks. + +## 6. Implementation + +### On-chain Implementation + +#### Extrinsic verification + +Currently, the Frequency chain primarily makes use of _SignedExtrinsic_. Every signed extrinsic is validated by a list of SignedExtensions which each verify a different aspect of that extrinsic. The list of signed extensions includes: + +- **CheckNonce**: Checks the the nonce inside the payload to avoid replay attacks. +- **ChargeFrqTransactionPayment**: Checks that the transaction fee can be applied to the owner account inside +the payload. + +Depending on whether we choose to implement Passkey support using Signed or Unsigned extrinsics, the above extensions may need to be duplicated to check Unsigned extrinsics. Additionally, regardless of which route (signed vs unsigned) we take, we will require the following additional checks: + +- **CheckP256Signature**: Verify the P256 signature inside the payload. +- **Others**: We might also need to check the **Era**, **Mortality** and **Genesis hash** if we choose the +unsigned path. + +#### Signature verification + +- Non-optimal approach + +```rust + pub fn check_passkey_signature( + payload: &PasskeyPayload, + ) -> Result<(), TransactionValidityError> { + // deserialize to COSE key format and check the key + let cose_key = CoseKey::from_slice(&payload.passkey_public_key[..]); + let (_, x) = cose_key + .params + .iter() + .find(|(l, _)| l == &Label::Int(-2)); + let (_, y) = cose_key + .params + .iter() + .find(|(l, _)| l == &Label::Int(-3)); + + // convert COSE format to P256 verifying key + let encoded_point = + EncodedPoint::from_affine_coordinates( + GenericArray::from_slice(&x.clone().into_bytes()), + GenericArray::from_slice(&y.clone().into_bytes()), + false, + ); + let verify_key = p256::ecdsa::VerifyingKey::from_encoded_point(&encoded_point); + + let passkey_signature = + p256::ecdsa::DerSignature::from_bytes(&payload.passkey_signature[..]); + + // extract the challenge from client_data and + // ensure the that the challenge is the same as the call payload + let client_data: serde_json::Value = + serde_json::from_slice(&payload.passkey_client_data_json); + let extracted_challenge = match client_data { + serde_json::Value::Object(m) => { + let challenge = m + .get(&"challenge".to_string()); + if let serde_json::Value::String(base64_url_encoded) = challenge { + let decoded = base64_url::decode(&base64_url_encoded).map_err(|_| { + TransactionValidityError::Invalid(InvalidTransaction::Custom(9)) + })?; + Ok(decoded) + } + }, + _ => Err(TransactionValidityError::Invalid(InvalidTransaction::Custom(11))), + }?; + + let encoded_payload = payload.passkey_call.encode(); + ensure!( + encoded_payload == extracted_challenge, + TransactionValidityError::Invalid(InvalidTransaction::Custom(12)) + ); + + // prepare signing payload which is [authenticator || sha256(client_data_json)] + let mut passkey_signature_payload = payload.passkey_authenticator.to_vec(); + passkey_signature_payload.extend_from_slice(&sha2_256(&payload.passkey_client_data_json)); + + // finally verify the Passkey signature against the payload + verify_key + .verify(&passkey_signature_payload, &passkey_signature) + } +``` + +- Some possible optimizations + - **Compressed Public Key**: Currently passed Public Key is in **Cose** format, and it's between 70-73 bytes. + If the client is capable of parsing the Cose Public Key, it can extract the compressed encoded key. This process can reduce the size of the Public Key to just 33 bytes. + - **Challenge data deduplication**: Currently the challenge data is duplicated in `expected_challenge` and + in it's serialized format inside `passkey_client_data_json`. If the client is able to parse + `passkey_client_data_json` and replace the `challenge` field value with an empty string, then during the + signature check we can replace that empty string with `expected_challenge` which would allow us to + reduce the transaction size by around **40%**. It is important that the order of the field `passkey_client_data_json` does not change during this operation since that would generate a different signature. + - **Signing hash of payload**: Since there might be a size limit for the data that can get signed + via passkeys, it would make sense to only sign the cryptographic hash of the payload. This would also + reduce the challenge size to only 32 bytes if we decided not to implement the deduplication option. + +### Backend Example Code + +#### Passkey Registration Verification + +```typescript + // RegistrationResponseJSON is the data that Passkey authenticator returns after registration + const verification = await verifyRegistrationResponse({ + response: body as RegistrationResponseJSON, + // challenge that server expects and provided for registration + expectedChallenge: currentChallenge, + expectedOrigin: origin, + expectedRPID: rpID, + requireUserVerification: true, + }); + + if (verification.verified && verification.registrationInfo) { + const { credentialPublicKey, credentialID, counter } = verification.registrationInfo; + const transportsString = JSON.stringify(body.response.transports); + await credentialService.saveNewCredential( + loggedInUserId, + credentialID, + credentialPublicKey, + counter, + transportsString, + ); + } +``` + +#### Transaction Authentication Verification + +```typescript + // get AuthenticatorDevice data from database by credentialId + const dbCredential: AuthenticatorDevice | null = await credentialService.getCredentialByCredentialId(credentialId); + const authenticator: VerifyAuthenticationResponseOpts["authenticator"] = { + ...dbCredential, + credentialID: credentialId, + }; + const opts: VerifyAuthenticationResponseOpts = { + response: body, + expectedChallenge: currentChallenge, + expectedOrigin: origin, + expectedRPID: rpID, + authenticator, + }; + let verification: VerifiedAuthenticationResponse = await verifyAuthenticationResponse(opts); + const { verified, authenticationInfo } = verification; + + if (verified) { + // transaction authentication verification is successful + } +``` + +## 7. Options for Discussion + +### Mortality of `account_sig_passkey_pk` i.e. Account Signature on Passkey Public Key + +#### Pros/Cons + +- **Pro**: Mortality of `account_sig_passkey_pk` would ensure that the account signature on the Passkey Public Key is only valid for a certain period, albieit it would be a complex setup. + + >Wil wondered about a mortality as well, but I have two fears: + > + > 1. That people will not backup their other key and forget to regenerate before the deadline. + > 2. That it adds too much complexity to an already complex setup. + + >In the end, an equal key made the most sense to Wil. + +### Unsigned Extensions vs Extending MultiSignature + +#### Unsigned Extensions + +In this variant we will have an unsigned extrinsic and all the related checks would be done inside +`ValidateUnsigned` trait implementation for the pallet. + +##### Pros/Cons + +- **Pro**: Faster and already proven implementation +- **Pro**: Flexibility to be replaced with other implementations +- **Con**: Some duplication of code between existing checks on signed extensions and the checks + implemented on `ValidateUnsigned` +- **Con**: An unsigned extrinsic implementation might open up a new unknown attack vector. + +#### Extending MultiSignature + +In this variant we will extend `MultiSignature` enum and replace it with a new enum which will have +a new `P256` signature type. + +##### Pros/Cons + +- **Pro**: No need to use unsigned extrinsic and all extra checks would be done inside a new signed + extension. +- **Pro**: A uniform and generic solution which would allow having P256 signature scheme to be used + for other operations on chain. +- **Pro**: This would allow us to use P256 accounts to hold token (but that might not be desirable) +- **Pro**: We could use the P256 keys as MSA control keys. +- **Con**: Requires significant effort (in case if no hard constraints detected) to implement compared to using + unsigned extension and once deployed there would not be an easy way for a backwards compatible rollback. + Here is a quick breakdown for known issues: + - Signature size mismatch force us to implement a new `Signature` type with all required traits. + - Public Key size mismatch might force us to implement a new `PublicKey` type with all required traits. + - Reimplementing `MultiSignature`, `MultiSigner` and other types with `P265` functionality added. + - Adding signature and key generation support on polkadotJS and all frontend implementations + - Might require DB migration for already stored MultiSignatures + +### Generic Key Support + +_Question_: Should we be able to use any other key which is already inside a wallet instead +of generating new ones? + +There is an issue with the `account_key` generation flow since it would only support transactions +that do not require any Msa account. To be able to use the Passkey feature for the majority of +transactions, it might be better if the `account_key` was already in a wallet and the Msa account +was created for that key,and we register a Passkey using the same. + +If an already existing key is allowed to be used with a Passkey the challenge for registering a Passkey +should be a different and random value coming from server instead of the Public Key of mentioned key. + +### Separate Pallet + +_Question_: Should we implement this feature in a separate pallet or just use already existing `frequency-tx-payment` +pallet? + +One argument against having it in a separate pallet is since there is no extra data required to be +stored on-chain, it seems less necessary to split it into a separate pallet. +Another argument in favor of having it in a new pallet is to be able to share this pallet with other +para-chains in the Polkadot ecosystem. + +## 8. References + +- _**Frontend library for Passkeys**_: https://simplewebauthn.dev/docs/advanced/passkeys +- _**WebAuthn Guide**_: https://webauthn.guide/ +- _**WebAuthn spec**_: https://w3c.github.io/webauthn +- _**Cose Key format**_: https://www.iana.org/assignments/cose/cose.xhtml#key-type diff --git a/designdocs/provider_boosting_economic_model.md b/designdocs/provider_boosting_economic_model.md new file mode 100644 index 0000000000..ac81cb3d1c --- /dev/null +++ b/designdocs/provider_boosting_economic_model.md @@ -0,0 +1,98 @@ +# Provider Boosting Economic Model + +This document outlines the economic model to be used for: + +1. determining the token value of the Reward Pool for a given Era +2. how to calculate rewards for an individual participant in the Provider Boost program +3. when rewards are calculated +4. when rewards are paid out +5. where these calculations are performed + +## Context and Scope: + +The Frequency Transaction Payment system uses Capacity to pay for a limited number of specific transactions on chain. Accounts that wish to pay for transactions with Capacity must: + +1. Have an [MSA](https://github.com/frequency-chain/frequency/blob/main/designdocs/accounts.md) +2. Be a [Provider](https://github.com/frequency-chain/frequency/blob/main/designdocs/provider_registration.md) (see also [Provider Permissions and Grants](https://github.com/frequency-chain/frequency/blob/main/designdocs/provider_permissions.md)) +3. Lock up a minimum amount of FRQCY token to receive [Capacity](https://github.com/frequency-chain/frequency/blob/main/designdocs/capacity.md). + +There is also a business case for allowing any token holder to lock up its tokens in exchange for a reward - while also targeting a Provider to receive some Capacity. + +## Problem Statement: + +A system consisting only of providers and coinless users who delegate to providers will tend toward centralization. +To build a self-sustaining Frequency network where control is decentralized, a variety of economic solutions are needed. One of these is the ability to lock up FRQCY token in return for something; this creates an incentive for participation and involvement with the Frequency chain fundamentals and governance. + +How is that so? Capacity is how Frequency intends Providers to pay for the vast majority of their on-chain messages. In the proposed system, Providers receive Capacity when users lock up some FRQCY. These Providers would then lose Capacity if those users unlock. If a Provider's Capacity from Provider Boosting is significant, this gives Provider Boosters some power over their targeted Providers. If a Provider is utilizing all or nearly all their Capacity almost every Epoch -- which they should do if trying to be economical -- then even a small percentage of lost Capacity will literally cost them to replace it. This gives those end-users relying upon - and Boosting - their Providers the ability to exercise direct market power they did not previously have. + +Account holders on Frequency may receive FRQCY from different sources. Providers may offer airdrops in return for such bringing in new users or sharing links on other platforms, then encourage their users to participate in Provider Boosting. Rewards could potentially be exchanged for non-transferable, in-app-only benefits such as premium features, special emoji, avatar customization, and the like, similarly to platforms such as [Steam](https://store.steampowered.com). + +### Provider Boost Accounts are not required to have MSA + +Any Frequency account with an existential balance + the minimum staking amount in FRQCY may participate in in the Provider Boost program. An MSA is optional. + +## Assumptions + +- The exact formula for calculating rewards is determined in advance and used in the implementation of this design. + +## Economic Model + +"Economic model" means the formulas and inputs used to manage Provider Boost rewards to achieve the goals of decentralization, economic stabiilty, and sustainability. + +## Goals + +To specify the following: + +- In words or pseudo-code how the reward pool and individual rewards are calculated +- How and when rewards are minted and transferred +- What to do with leftover and/or unclaimed funds set aside for Provider Boost Rewards. +- Limitations on receiving rewards and reward amounts + +## Non-Goals + +This document does not: + +- specify implementation details or naming in code. +- specify reward amounts for all time; values and methods used for calculating rewards should be expected to change to meet economic goals of the Frequency Blockchain and any legal requirements. + +## Proposal: + +### Inputs to Provider Boost Reward Calculation + +- Rera is a predetermined amount of FRQCY available each Boost Era for Rewards +- Lu is the amount a given Provider Boost account has locked for Provider Boost Era e +- LT is the total that all Provider Boost accounts have locked for Provider Boost Era e +- Pmax is the maximum percentage of a Provider-Boosted amount that can be paid out in Era e + +### Formula + +The Provider Boost reward in FRQCY tokens for a given Era e is a simple interest model, with the following formula: + +R = min(Rera*Lu/LT, Lu*Pmax) + +Put into words, if the pool of Rewards per Era is + +Rera FRQCY, then the Reward amount in FRQCY earned by a given Provider Booster will be proportional to how much they've locked for Provider Boosting out of the total OR Pmax times the amount locked, whichever is less. + +Put another way, there is a fixed number of tokens to be rewarded each Era (Rera), split up according to each Provider Boost account holder's percentage of the locked total. However, the reward return each Era for every individual account (Pmax) is capped at some rate, for example, 10%. + +### Examples: + +Given the following values: + +- Rera = 2 Million FRQCY +- Rmax is 10% + +1. Ang has locked 100 FRQCY (Lu) for Provider Boosting. The total locked by everyone, LT for era e, is 10 Million FRQCY. The left side of the minimum is `2e6 * 100 / 10.0e6 = 100/5 = 20` (that is, 20% of what Ang has locked). The right side is `100 * 10% = 10`. Since 10 is less than 20, the reward amount is 10 FRQCY. +2. Bey has locked 1000 FRQCY (Lu) for Provider Boosting. The total locked by everyone, LT for era e, is 50 Million FRQCY. The left side of the minimum s `2e6 * 1000 / 50.0e6 = 1000/25 = 40` (that is, 4% of what Bey has locked). The right side is `1000 * 10% = 100`. Since 40 is less than 100, Bey's Provider Boost reward is 40 FRQCY. + +## Rewards are not issued for a partial Era + +Rewards are not prorated; they are calculated only for balances held for an entire Era. For example, if an amount is locked at the end of Era 100, and unlocked in Era 101, _no_ Reward will be issued. If an amount is locked in Era 100, and unlocked in Era 102, a Provider Boost Reward is available _only_ for Era 101. + +## Claiming Rewards + +- Provider Boost Rewards are not minted until they are explicitly claimed by the Provider Boost account holder, by calling a non-free extrinsic. +- Rewards must be claimed within a certain number of Provider Boost Eras. +- When claimed, all available, unexpired Rewards for each previous Era are minted and transferred to the same account that locked them. +- Currently there is no cap on how much can be claimed at once. diff --git a/designdocs/provider_boosting_implementation.md b/designdocs/provider_boosting_implementation.md new file mode 100644 index 0000000000..4f86ab9d36 --- /dev/null +++ b/designdocs/provider_boosting_implementation.md @@ -0,0 +1,409 @@ +# Capacity Provider Boost Implementation + +## Overview + +This document describes a new type of staking which allows token holders to stake FRQCY and split rewards with a Provider the staker chooses. + +Currently, when staking token for Capacity, the only choice is to assign all the generated Capacity to the designated target. +The target, who must be a Provider, may then spend this Capacity to pay for specific transactions. This is called **Maximized Capacity** staking. + +In this new type of staking, called **Provider Boosting**, the Provider receives a reward in Capacity and the staker receives a periodic return in FRQCY token. +The amount of Capacity that the Provider would receive in such case is a less than what they would get from a `MaximumCapacity` stake. + +The period of Capacity replenishment - the `Epoch` - and the period of token reward - the `RewardEra`- are different. +Epochs much necessarily be much shorter than rewards because Capacity replenishment needs to be multiple times a day to meet the needs of a high traffic network, and to allow Providers the ability to delay transactions to a time of day with lower network activity if necessary. +Reward eras need to be on a much longer scale, such as every two weeks, because there are potentially orders of magnitude more stakers, and calculating rewards is computationally more intensive than updating Capacity balances for the comparatively few Providers. +In addition, this lets the chain to store Reward history for much longer rather than forcing people to have to take steps to claim rewards. + +### Diagram + +This illustrates roughly -- not to scale and **NOT reflecting actual reward amounts** -- how Provider Boost staking is expected to work. Just like the current staking behavior, now called Maximium staking, The Capacity generated by staking is added to the Provider's Capacity ledger immediately so it can be used right away. The amount staked is locked in Alice's account, preventing transfer. + +Provider Boost token rewards are earned only for token staked for a complete Reward Era. So Alice does not begin earning rewards until Reward Era 5 in the diagram, and this means Alice must wait until Reward Era 6 to claim rewards for Reward Era 5. Unclaimed reward amounts are actually not minted or transferred until they are claimed, and may also not be calculated until then, depending on the economic model. + +This process will be described in more detail in the Economic Model Design Document. + +### NOTE: Actual reward amounts may differ; amounts are for illustration purposes only + +![Provider boosted staking](https://github.com/frequency-chain/frequency/assets/502640/ffb632f2-79c2-4a09-a906-e4de02e4f348) + +The proposed feature is a design for staking FRQCY token in exchange for Capacity and/or FRQCY. +It is specific to the Frequency Substrate parachain. +It consists of enhancements to the capacity pallet, needed traits and their implementations, and needed runtime configuration. + +This does _not_ outline the economic model for Provider Boosting; it describes the economic model as a black box, i.e. an interface. + +## Context and Scope: + +The Frequency Transaction Payment system allows certain transactions on chain to be paid for with Capacity. Accounts that wish to pay with Capacity must: + +1. Have an [MSA](https://github.com/frequency-chain/frequency/blob/main/designdocs/accounts.md) +2. Be a [Provider](https://github.com/frequency-chain/frequency/blob/main/designdocs/provider_registration.md) (see also [Provider Permissions and Grants](https://github.com/frequency-chain/frequency/blob/main/designdocs/provider_permissions.md)) +3. Stake a minimum amount of FRQCY (on mainnet, XRQCY on testnet) token to receive [Capacity](https://github.com/frequency-chain/frequency/blob/main/designdocs/capacity.md). + +# Problem Statement + +This document outlines how to implement the Staking for Rewards feature described in [Capacity Staking Rewards Economic Model](https://github.com/frequency-chain/frequency/blob/main/designdocs/provider_boosting_economic_model.md). + +## Glossary + +1. **FRQCY**: the native token of Frequency, a Substrate parachain in the Polkdaot blockhain ecosystem. +1. **Capacity**: the non-transferrable utility token which can be used only to pay for certain Frequency transactions. +1. **Account**: a Frequency System Account controlled by a private key and addressed by a public key, having at least a minimum balance (currently 0.01 FRQCY). +1. **Stake** (verb): to lock some amount of a token against transfer for a period of time in exchange for some reward. +1. **RewardEra**: the time period (TBD in blocks) that Provider Boost reweards are based upon. `RewardEra` is to distinguish it easily from Substrate's staking pallet Era, or the index of said time period. +1. **Staking Reward**: a per-RewardEra share of a staking reward pool of FRQCY tokens for a given staking account. +1. **Reward Pool**: a fixed amount of FRQCY that can be minted for rewards each RewardEra and distributed to stakers. +1. **ProviderBoostRewardsProvider**: a trait that encapsulates the economic model for Provider Boosting, providing functionality for calculating the reward pool and Provider Boosting. + +## Staking Token Rewards + +### StakingAccountDetails --> StakingDetails + +A new field, `staking_type` is added to indicate the type of staking the Account holder is doing in relation to this target. +Staking type may be `MaximumCapacity` or `ProviderBoost`. `MaximumCapacity` is the default value for `staking_type` and maps to 0. + +This is a second version of this storage, to replace StakingAccountDetails, and StakingAccountDetails data will need to be migrated. + +```rust +pub struct StakingDetails { + /// The amount a Staker has staked, minus the sum of all tokens in `unlocking`. + pub active: BalanceOf, + /// The type of staking for this staking account + pub staking_type: StakingType, +} +``` + +### ProviderBoostHistories + +```rust + /// Individual history for each account that has Provider-Boosted. + #[pallet::storage] + pub type ProviderBoostHistories = + StorageMap<_, Twox64Concat, T::AccountId, ProviderBoostHistory>; +``` + +**Unstaking thaw period** +Changes the thaw period to begin at the first block of next RewardEra instead of immediately. + +### Changes to extrinsics + +#### stake + +The parameters for the `stake` extrinsic remain the same and the behavior is the same, in that this creates or adds +more token to a staker-target relationship with type `MaximiumCapacity`. +However, if one calls `stake` with a `target` that `origin` already has a staker-target relationsip with, +it is _not_ a `MaximumCapacity` staking type, it will error with `Error::CannotChangeStakingType`. + +This means that a single Account Id must choose between staking for Maximum Capacity or staking for Provider Boost + Rewards. +Those who wish to do both types of staking must use two different accounts, one for each purpose. + +#### unstake + +The unstake parameters are the same, and unstake behavior is the same for `MaximumCapacity` as before, however +for a `ProviderBoost` staker-target relationship, the behavior must be different. The Provider-Boost account must +first claim all unpaid rewards before an unstake can succeed. + +```rust +pub fn unstake( + origin: OriginFor, + target: MessageSourceId, + requested_amount: BalanceOf, +) -> DispatchResult {} + +``` + +### NEW: ProviderBoostRewardsProvider - Economic Model trait +The ProviderBoostRewardsProvider trait implementation depends on the chosen economic model and must +implement the following: + +```rust +/// A trait that provides the Economic Model for Provider Boosting. +pub trait ProviderBoostRewardsProvider { + /// the AccountId this provider is using + type AccountId; + + /// the range of blocks over which a Reward Pool is determined and rewards are paid out + type RewardEra; + + /// The hasher to use for proofs + type Hash; + + /// The type for currency + type Balance; + + /// Return the size of the reward pool using the current economic model + fn reward_pool_size(total_staked: BalanceOf) -> BalanceOf; + + /// Return the list of unclaimed rewards for `accountId`, using the current economic model + fn staking_reward_totals( + account_id: Self::AccountId, + ) -> Result, DispatchError>; + + /// Calculate the reward for a single era. We don't care about the era number, + /// just the values. + fn era_staking_reward( + era_amount_staked: BalanceOf, // how much individual staked for a specific era + era_total_staked: BalanceOf, // how much everyone staked for the era + era_reward_pool_size: BalanceOf, // how much token in the reward pool that era + ) -> BalanceOf; + + + /// Return the effective amount when staked for a Provider Boost + /// The amount is multiplied by a factor > 0 and < 1. + fn capacity_boost(amount: BalanceOf) -> BalanceOf; +} +``` + +### NEW: Config items +The list below is not inclusive. Other structures and storage may be needed to support required +functionality. + +```rust +use common_primitives::capacity::RewardEra // a u32 + +pub trait Config: frame_system::Config { + // ... + + /// The number of blocks in a Staking RewardEra + type EraLength: Get; + + /// The maximum number of eras over which one can claim rewards + type ProviderBoostHistoryLimit: Get; + + /// The trait providing the ProviderBoost economic model calculations and values + type RewardsProvider: ProviderBoostRewardsProvider; + + /// A staker may not retarget more than MaxRetargetsPerRewardEra + type MaxRetargetsPerRewardEra: Get; + + /// The fixed size of the reward pool in each Reward Era. + type RewardPoolPerEra: Get>; + + /// the percentage cap per era of an individual Provider Boost reward + type RewardPercentCap: Get; + + /// The number of chunks of Reward Pool history we expect to store + /// MUST be a divisor of [`Self::ProviderBoostHistoryLimit`] + type RewardPoolChunkLength: Get; +}; +``` +### NEW: Retargets + +### NEW: ProviderBoostRewardPools, CurrentEraProviderBoostTotal +The storage of the total amount staked for the ProviderBoostHistoryLimit number of eras is divided into chunks of +BoundedBTreeMaps, which store Key = RewardEra, Value = Total stake for that era. The chunks are updated in rotating fashion +in order to minimize reads and writes for listing individual rewards, claiming individual rewards, and changing to a +new Reward Era, when necessary, during `on_initialize`. + +```rust + /// Reward Pool history is divided into chunks of size RewardPoolChunkLength. + /// ProviderBoostHistoryLimit is the total number of items, the key is the + /// chunk number. + #[pallet::storage] + pub type ProviderBoostRewardPools = + StorageMap<_, Twox64Concat, u32, RewardPoolHistoryChunk>; + + /// How much is staked this era + #[pallet::storage] + pub type CurrentEraProviderBoostTotal = StorageValue<_, BalanceOf, ValueQuery>; +``` + +### NEW: CurrentEraInfo, RewardEraInfo + +Incremented, like CurrentEpoch, tracks the current RewardEra number and the block when it started. +Storage is whitelisted because it's accessed every block and would improperly adversely impact all benchmarks. + +```rust +#[pallet::storage] +#[pallet::whitelist_storage] +/// Similar to CurrentEpoch +pub type CurrentEraInfo = StorageValue<_, T::RewardEraInfo, ValueQuery>; + +pub struct RewardEraInfo { + /// the index of this era + pub current_era: RewardEra, + /// the starting block of this era + pub era_start: BlockNumber, +} +``` + +### NEW: Error enums + +```rust +pub enum Error { + /// ... + /// Staker tried to change StakingType on an existing account + CannotChangeStakingType, + /// The Era specified is too far in the past or is in the future + EraOutOfRange, + /// Attempted to retarget but from and to Provider MSA Ids were the same + CannotRetargetToSameProvider, + /// There are no rewards eligible to claim. Rewards have expired, have already been + /// claimed, or the first ProviderBoost occurred in the current era. + NoRewardsEligibleToClaim, + /// Caller must claim rewards before unstaking. + MustFirstClaimRewards, + /// Too many change_staking_target calls made in this RewardEra. + MaxRetargetsExceeded, + /// Account either has no staking account at all or it is not a ProviderBoost type + NotAProviderBoostAccount, +} +``` + +### NEW: Events + +```rust + /// ... + /// The target of a staked amount was changed to a new MessageSourceId + StakingTargetChanged { + /// The account that retargeted the staking amount + account: T::AccountId, + /// The Provider MSA that the staking amount is taken from + from_msa: MessageSourceId, + /// The Provider MSA that the staking amount is retargeted to + to_msa: MessageSourceId, + /// The amount in token that was retargeted + amount: BalanceOf, + }, + /// Tokens have been staked on the network for Provider Boosting + ProviderBoosted { + /// The token account that staked tokens to the network. + account: T::AccountId, + /// The MSA that a token account targeted to receive Capacity based on this staking amount. + target: MessageSourceId, + /// An amount that was staked. + amount: BalanceOf, + /// The Capacity amount issued to the target as a result of the stake. + capacity: BalanceOf, + }, + /// Provider Boost Token Rewards have been minted and transferred to the staking account. + ProviderBoostRewardClaimed { + /// The token account claiming and receiving the reward from ProviderBoost staking + account: T::AccountId, + /// The reward amount + reward_amount: BalanceOf, + }, +``` + +### NEW Extrinsics + +#### provider_boost(origin, target, amount) + +Like `stake`, except this extrinsic creates or adds staked token to a `ProviderBoost` type staker-target relationship. +In the case of an increase in stake, `staking_type` MUST be a `ProviderBoost` type, or else it will error with `Error::CannotChangeStakingType`. + +This means that a single Account Id (origin) must choose between staking for Maximum Capacity or staking for Provider Boost + Rewards. +Those who wish to do both types of staking must use two different accounts, one for each purpose. + +The event `ProviderBoosted` is emitted with the parameters of the extrinsic on success. + + +```rust +pub fn provider_boost( + origin: OriginFor, + target: MessageSourceId, + amount: BalanceOf, +) -> DispatchResult {} +``` + +#### 1. claim_staking_rewards(origin) +Mints and transfers all unclaimed rewards to origin. +The event `ProviderBoostRewardClaimed` is emitted with the parameters of the extrinsic on success. + + +```rust +/// Claim all outstanding Provider Boost rewards, up to ProviderBoostHistoryLimit Reward Eras +/// in the past. Accounts should check for unclaimed rewards before calling this extrinsic +/// to avoid needless transaction fees. +/// Errors: +/// - NotAProviderBoostAccount: if Origin has nothing staked for ProviderBoost +/// - NothingToClaim: if Origin has no unclaimed rewards to pay out. +#[pallet::call_index(n)] +pub fn claim_staking_rewards( + origin: OriginFor, +); +``` + +#### 3. change_staking_target(origin, from, to, amount) + +Changes a staking account detail's target MSA Id to a new one by `amount` +Rules for this are similar to unstaking; if `amount` would leave less than the minimum staking amount for the `from` target, the entire amount is retargeted. +No more than `T::MaxUnlockingChunks` staking amounts may be retargeted within this Thawing Period. +Each call creates one chunk. Emits a `StakingTargetChanged` event with the parameters of the extrinsic on success. + +```rust +/// Sets the target of the staking capacity to a new target. +/// This adds a chunk to `StakingDetails.stake_change_unlocking chunks`, up to `T::MaxUnlockingChunks`. +/// The staked amount and Capacity generated by `amount` originally targeted to the `from` MSA Id is reassigned to the `to` MSA Id. +/// Does not affect unstaking process or additional stake amounts. +/// Changing a staking target to a Provider when Origin has nothing staked them will retain the staking type. +/// Changing a staking target to a Provider when Origin has any amount staked to them will error if the staking types are not the same. +/// ### Errors +/// - [`Error::NotAStakingAccount`] if origin does not have a staking account +/// - [`Error::MaxUnlockingChunksExceeded`] if `stake_change_unlocking_chunks` == `T::MaxUnlockingChunks` +/// - [`Error::StakerTargetRelationshipNotFound`] if `from` is not a target for Origin's staking account. +/// - [`Error::StakingAmountBelowMinimum`] if `amount` to retarget is below the minimum staking amount. +/// - [`Error::InsufficientStakingBalance`] if `amount` to retarget exceeds what the staker has targeted to `from` MSA Id. +/// - [`Error::InvalidTarget`] if `to` does not belong to a registered Provider. +/// - [`Error::CannotChangeStakingType`] if origin already has funds staked for `to` and the staking type for `from` is different. +#[pallet:call_index(n+1)] // n = current call index in the pallet +pub fn change_staking_target( + origin: OriginFor, + from: MessageSourceId, + to: MessageSourceId, + amount: BalanceOf +); +``` + +### NEW: Capacity pallet helper function + +#### has_unclaimed_rewards + +A shortcut for whether `account_id` can claim a reward at all. +This function will return false if there is no staker-target relationship. +Staking accounts may claim rewards: + +- Once per RewardEra - in which all outstanding rewards are paid out. +- Only for funds staked for a complete RewardEra, i.e. the balance at the end of the Era, + +```rust +fn has_unclaimed_rewards(account_id: AccountIdOf) -> bool; +``` + +#### list_unclaimed_rewards +This is used by the `CapacityRuntimeAPI::list_unclaimed_rewards` function and the `claim_rewards` extrinsic. +```rust +/// Get all unclaimed rewards information for each eligible Reward Era. +/// If no unclaimed rewards, returns empty list. +pub fn list_unclaimed_rewards( + account: &T::AccountId, +) -> Result< + BoundedVec< + UnclaimedRewardInfo, BlockNumberFor>, + T::ProviderBoostHistoryLimit, + >, + DispatchError> +``` + +### NEW RPCS + +Only a CapacityRuntimeAPI will be built; custom RPCs are deprecated for Polkadot parachains. Use a state call to access this function. + +```rust +pub struct UnclaimedRewardInfo { + /// The Reward Era for which this reward was earned + pub reward_era: T::RewardEra, + /// When this reward expires, i.e. can no longer be claimed + pub expires_at_block: BlockNumberFor, + /// The amount staked in this era that is eligible for rewards. Does not count additional amounts + /// staked in this era. + pub eligible_amount: BalanceOf, + /// The amount in token of the reward (only if it can be calculated using only on chain data) + pub earned_amount: BalanceOf, +} + + // state_call method: CapacityRuntimeApi_list_unclaimed_rewards + /// Get the list of unclaimed rewards information for each eligible Reward Era. + fn list_unclaimed_rewards(who: AccountId) -> Vec>; +``` diff --git a/designdocs/provider_permissions.md b/designdocs/provider_permissions.md new file mode 100644 index 0000000000..b31fd95d81 --- /dev/null +++ b/designdocs/provider_permissions.md @@ -0,0 +1,198 @@ +# Delegator <-> Provider Permissions/Grants + +## Context and Scope + +Frequency enables users(read delegators) to have control over their own data. While providers can send and receive messages on behalf of users, there is need for separation of control via **delegator->provider**, **provider<->delegator** relationships in form of Permissions and Grants respectively. This document describes the design of the two types of relationships and recommendation on how to implement them. + +## Problem Statement + +Data Access Pattern on Frequency, at-minimum, should provide ***RESTRICTED*** ```permissions``` at **delegator->provider**, as well as ***PUBLISH*** and, ***Block***, ```grants``` for specific ```schema_id``` at **provider<->delegator**.This entails users can enable specific permissions for provider to write data on their behalf, while also restricting grants to providers at schema level, rendering providers as restricted. Providers should also be able to opt into publish, on behalf of, users, or block from publication, on behalf of, at schema level. Primarily, the use case can be summarized in following way: + +- **As a provider**, I would want to publish data for specific ```schema_id``` on-behalf of a delegator. Defaults to ```publish``` permissions on all schemas registered by provider on behalf of delegator. +- **As a delegator**, I would like to restrict a provider, by allowing a provider to only publish data for specific ```schema_ids``` on-behalf of me. + +Note: A publish state would mean that a provider is able to publish data on behalf of a delegator on all public schemas by passing validation. While a restricted state would mean that a provider is not able to publish data on behalf of a delegator on a specific schema, would require additional validation. The default state would be restricted as provider must opt in (permissioned by user) to publish data for specific schema(s) on user's behalf before sending messages for said schema(s). + +## Goals and Non-Goals + +Frequency is a default read only for items stored on and off chain, requiring an explicit process to control writing or publishing of messages via some permissions and grants. Some of the major goals surrounding provider permissions and grants are: + +### Goals + +**Opt In and Duality**: Providers should register users with Frequency and delegate on behalf of them, while also specifically allowing a collection of schema(s) for which delegator provide them full publication rights. This ensures default state of providers is ***Restrict***. Delegators can also choose to restrict providers on per-schema basis by blocking them from publishing data on their behalf. This ensures default state of delegators is ***Block*** for all non provider preferred ```schema_ids```. Duality should be implemented at schema level grants. + +**ToS Baked In**: As a part of this design doc, it is recommended to discuss about baking in ***ToS*** for providers and delegators as a part of permission grants by including a hash of ToS unless there is a re-delegation. Such that Frequency can also act as proof of specific agreement established between a provider and a delegator. + +**Time Bound Grants**: Any grants given or revoked by a delegator (allowing provider to publish or block them for certain duration) or any grants are modified by a provider or delegator are valid for the duration of ***ToS***. This can be a control mechanism in Frequency which can be a fixed number for version 1 of this implementation and be extensible via a governance mechanism. This also brings the question about, if not time bounded, does permissions and grants are set till they are explicitly revoked. While un-delegation, definitely is an option for user to remove a provider completely from ever publishing on their behalf. + +### Non-Goals + +- Does not cover the case where a delegator or provider can restrict reading of data on their behalf. +- Frequency enables a valid provider or delegator to be able to read as a default. +- Only covers basic version 1 of permission and grant implementation details. +- Does not cover details of economics, governance mechanism. +- Does not cover details on dynamic expiry time for permissions/grants. + +## Proposal + +The proposed solution is to provide delegate level permissions and schema level grants to delegators and providers alike. This will enable a provider to publish data on behalf of a delegator, while also allowing a delegator to restrict a provider from publishing data on their behalf for specific schema. + +Note: The terminology and implementation are subject to change at issue resolution. + +### Permissions + +Permission is a generic option for any user. For version 1 of this implementation, the following options are available: + +- ***RESTRICTED***: Where a user grants a provider to publish data on their behalf for specific schema(s) only. This is the default state of a provider on Frequency, where a provider has to explicitly provide a list of schema(s) for which they are allowed to publish data on behalf of the user. + +An example of permission data structure is as follows: + +```rust +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum PermissionType { + Restricted, +} + +#[derive(Serialize, Deserialize, Debug, Clone)] +pub struct Permission { + pub permission_type: PermissionType, + pub tos_hash: Vec, + pub expiry_time: u64, +} +``` + +### Grants + +Grants enable delegators as well as providers to restrict one another from publishing data on specific schema(s). For version 1 of this implementation, the following options are available: + +- ***PUBLISH***: Where a delegator grants a provider to publish data on their behalf for specific schema(s) only. This is the default state of a provider on Frequency, where a provider has to explicitly provide a list of schema(s) for which they are allowed to publish data on behalf of the delegator. This also enables a delegator to opt in to publish their data. + +An example of grant data structure is as follows: + +```rust +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub enum GrantType { + Publish, +} + +#[derive(Serialize, Deserialize, Debug, Clone)] +pub struct Grant { + pub grant_type: GrantType, +} +``` + +### API (Extrinsic) + +- ***delegator_msa***: The MSA of a delegator/user. +- ***provider_msa***: The MSA of the provider/app. +- ***Permission***: The generic option for any user. Default mode of operation is ***Restricted*** for any provider. +- ***Grant***: The user level action/result. "A user grants a permission to a provider". +- ***ToS***: The hash of terms of service between a delegator and provider. +- ***expiry***: The expiry time of a permission/grant. +- ***schema_id***: The unique identifier of a registered schema on Frequency. + +### add_schema_grants() + +An extrinsic to allow a provider to request publish write to list of schemas. Rendering them **Restricted** status. + +- Parameters: + 1. **provider_msa**: The MSA of the provider/app. + 2. **delegator_msa**: The MSA of a user. + 3. **schemas**: The list of schemas for which the provider wants to grant publish write typically ```Vec```. + 4. **tos_hash**: The hash of terms of service between a delegator and provider. + +- Events: ```SchemaPermissionAdded``` where the event data is ```(delegator_msa, provider_msa, schemas)```. + +- Restrictions: origin must own provider ```msa_id``` delegated by delegator ```msa_id```. + +- Outcomes: Provider permissions are set to **Restricted** and grants have been set for selected schemas. + +- Notes: The weights of this extrinsic should account for required weights when revoking grants at schema level via provider/delegator. + +### add_frequency_publisher() : Not in the scope for version 1 of this implementation + +An extrinsic to allow (via governance) to set a provider as Frequency publisher. This in turn will give all publish rights on all schemas for any delegator delegating to this provider. Rending them **Publisher** status. + +- Parameters: + 1. **provider_msa**: The MSA of the provider/app. + 2. **delegator_msa**: The MSA of a user. + 3. **tos_hash**: The hash of terms of service between a delegator and provider. + +- Events: ```PublisherPermissionAdded``` where the event data is ```(delegator_msa, provider_msa, tos_hash)```. + +- Restrictions: + - This extrinsic is should only be available via governance or via some strict mechanism. + - Origin must own provider ```msa_id``` delegated by delegator ```msa_id```. + +- Outcomes: Provider permissions are set to **Publisher**. This can indicate to by pass schema level grants for delegator at this permission level. + +- Notes: The weights of this extrinsic should account for required weights when revoking grants at schema level via provider/delegator. This can then make the following an rpc instead of extrinsic. + +### revoke_schema_grants() + +An extrinsic (or rpc if revoking is paid off while adding) to allow a provider or delegator to block publishing rights on specific schemas. + +- Parameters: + 1. **provider_msa**: The MSA of the provider/app. + 2. **delegator_msa**: The MSA of a user. + 3. **schema_ids**: The list of schemas for which the provider/delegator wants to block publishing rights, typically ```Vec```. + +- Restrictions: Origin must own provider ```msa_id``` delegated by delegator ```msa_id```. + +- Outcomes: Provider permissions are set to **Restricted**. While schema level grants is set to blocked for a given ```schema_id```. + +- Notes: + - Revocation of grant should be free for the caller as long as caller have delegated to provider. The cost of revocation extrinsic should be accounted for, in ```add_schema_grants``` . + - If this action is already paid off while [adding schema grants](#add_schema_permissions), this can be done via rpc. + - Un-delegation of a provider by a delegator should revoke all grants from all schemas for that provider. + +## Time bounded permissions + +- Expiry time on permissions for version 1 can be a fixed number of blocks set in Frequency. +- This expiry time can be updated via governance or runtime upgrades. Since this is not important for the scope of the design doc, implementation details can define, how Frequency is handling expiry time in first version. +- However, expiry time can be baked in the above extrinsic call and can be set as a parameter. + +## Validation + +- If a provider has **Restricted** status, a check will be required to ensure delegator has given **Publish** grant for a given schema for which a message is being sent by provider. +- This can further be extended to act as an additional validation on publishing batched messages for a given list of delegators for a specific schema. + +## Benefits and Risks + +Enabling permissions and grants benefits both user and provider. While providers can be trusted to publish data on behalf of a delegator, it is not always the case and vice versa. Duality of opt in at the grant level solidify the trust relationship. + +Some risks are primarily at implementation level, such a storage pattern of such grants, and validation surrounding whether a provider is allowed to publish or not, adds additional overhead. Though this risk is easily minimized by using a storage pattern that is optimized for the use case. + +## Additional Resources + +## Discussion Notes from 2022-05-25 + +- Allowing a site to read my private data + - Not posting on my behalf, reading my (private) data instead of writing data + - Key management for reading private data +- Delegation for reading vs writing +- Do we need to have a way for the user to express how their data is used on "3rd party" sites (aka sites you don't have an explicit delegation with) + - Maybe not Frequency, but perhaps at the DSNP layer? + - DSNP data use policy for each announcement (We already assume friends/followers can see it even on 3rd party sites) +- Do we need extendable/modular permissions or "roles"? + - Grouping Schemas together somehow? + - Roles are useful for users, but hide complexity (see Android/iOS permission mess) + - What if there are 100's of schemas? + - Could the wallet solve that problem? +- Delegation is a wallet level action + - Users have a wallet interaction for delegation +- Do schemas have custom permissions? + - Sub-permissions CRUD? We really only have Create as a permission +- Could service permissions be set at the provider MSA level and the delegation only have exclusions? + - This is more auto-optin which I think is bad. +- Public "Read" permission (DSNP or Frequency?) + - Robots.txt + - Could this be on a per service basis? + - aka I grant the public ability to "read" schema 7 from service A but not schema 7 from service B + +- Core delegation model ideas + - Limited Schema Ids (User allows schema: x, y, z) + - Want to send a message -> Check delegate -> check schema "permission" + - Delegation permissions are "stored with" the delegation on-chain + - This data must be historically immutable and retained + - Active opt-in diff --git a/designdocs/provider_registration.md b/designdocs/provider_registration.md new file mode 100644 index 0000000000..fd8b91d402 --- /dev/null +++ b/designdocs/provider_registration.md @@ -0,0 +1,128 @@ +# Provider Registration + +## Table of Contents +* [Context and Scope](#context-and-scope) +* [Problem Statement](#problem-statement) +* [Goals and Non-Goals](#goals-and-non-goals) +* [Proposal](#proposal) +* [Benefits and Risks](#benefits-and-risks) +* [Alternatives and Rationale](#alternatives-and-rationale) +* [Glossary](#glossary) + +## Context and Scope +In order to properly implement Frequency, we need to describe how service providers +will participate on the network. + +## Problem Statement +Service providers are an integral part of how Frequency functions. However, there are +some open questions about how they operate, questions that this document hopes +to provide clarity on. + +Among those questions are: + +1. Who can become a provider? +1. How does a user become a provider? +1. What are the attributes of a provider? +1. How will providers be identified to other network actors? +1. How does one stop being a provider? +1. Can provider status be revoked from a provider? + +## Goals and Non-Goals +This document will discuss the ways in which service providers can register with +and participate in the Frequency network. + +This document will not discuss the specifics of how providers will process +service requests from users on the network. This document will also not discuss +specifics around creating and honoring transactions between users. + +## Proposal +The basic workflow for provider registration is as follows: +1. Any user can register to be a Provider. +1. User pays the balance to become a provider. This is called a "Registration Fee". +1. The "Registration Fee" is set by Governance. +1. The "Registration Fee" is credited to the Chain Treasury (TBD). +1. The provider's MSA id is added to storage on chain. + +Please note: +* All names are placeholders and may be changed. +* Types may change as needed during implementation phase +* Errors in the extrinsic(s) must have different, reasonably-named error enums + for each type of error for ease of debugging. + +### Types +* `ProviderRegistryEntry` + * `name`: `Vec` + +#### Events +* `ProviderCreated`, the resource that exists on-chain + * `provider_id`: `ProviderId` + +#### Storage +* `ProviderToRegistryEntry`: `StorageMap` + * Stores registered providers and provides lookup functionality via `MsaId`. + Existence in this storage structure implies that a provider's fee has been + paid and their registration was otherwise successful. + +### Extrinsics +#### create_provider(origin, provider_name) +Creates and posts a `ProviderCreated`. The `MsaId` +included in the registration must already exist. + +This extrinsic is responsible for storing the registered provider in the +`ProviderToRegistryEntry`. + +* **Parameters** + * `origin`: `Origin` required for all extrinsics, the caller/sender. + * `provider_name`: the name used for the provider. +* **Event**: `Event::::ProviderCreated(provider_id)` +* **Restrictions**: + * `origin`'s `msa_id` must have capacity to post the transaction (including fee) during the current epoch. + + +### Custom RPCs +#### get_provider(provider_id) +Retrieves a single provider. The `provider_id` should belong to a registered +provider. + +* **Parameters** + * `provider_id`: `ProviderId` the `MsaId` of the provider in question. + +* **Returns** + * `None()` if no messages meet the criteria. + * `Some(Provider)` + +## Benefits and Risks +### Provider Registry and Info +This structure allows for easy provider lookups, in the event actors on the +chain need to query provider information. As of the time of writing this +document, the only provider information required is a name (non-unique). In the +future, we may include other information like domain, logo, business address, etc. + +### Provider Verification +There should be a way to verify whether providers are legitimate entities. As of +now, there is no authority that we can query to verify providers, nor is there a +real-world counterpart that can verify provider information. + +In the future, we may require a business domain (w/ SSL certificate) to grant +provider status. However, doing so would bar entities that do not have +traditional business attributes from participating on the network as service +providers ("mom and pop" local businesses and/or "freelancers"). + +So to allow inclusion for all actors, it may be that the best way of verifying +legitimateness is through a fee that is high enough to discourage malicious actors. + +### Provider Commitment +Users can only delegate to Providers. Only Providers can have Capacity and can therefore generate capacity transactions. +### Archival Provider Information +If consumers want to examine provider registration events, they +must fetch them from an archival node. This document does not outline an RPC for +fetching registration events. + +## Alternatives +### Provider Fees +This document assumes that registration fees will be a fixed amount. It may be prudent, in the future, to determine whether or not registrations are fixed or vary based on the amount of verifiable information given on a registration attempt. The latter may allow us to place more trust in providers that do not have traditional business attributes. Further, the Provider could be required to post a bond instead of or in addition to fee payment. +### Provider Deregistration +Currently, the Provider MSA id cannot be retired once registered. The current version does not entirely outline a way to revoke the Provider's status. In the future, Provider can request to revoke their status as a service provider. Provider MSA id may be deregistered, with their MSA id removed from the Provider Registry and any associated delegations revoked. + +## Glossary +TBD. diff --git a/designdocs/schema.md b/designdocs/schema.md new file mode 100644 index 0000000000..f622b50e36 --- /dev/null +++ b/designdocs/schema.md @@ -0,0 +1,230 @@ +# Frequency Message Schemas + +## Context and Scope + +Messages on Frequency are validated and stored against pre-defined schema(s). In order to support a variety of message types, it is imperative to define an on-chain semantics, pallet(s) for example, to handle dynamic registration, validation, storage and retention schemes for schemas. + +This document describes how schemas are handled on chain in the following sections. + +## Problem Statement + +Message passing is a core functionality to networking protocols. The way to enforce a communication protocol between participants of network via services is done by messaging schema. Analogous to interfaces, schemas provide a strongly typed description for messages ensuring their correctness, validity, extensibility and interoperability between services interacting with Frequency. + +## Goals + +At a minimum, Frequency should implement procedures to register, validate, store and access variety of messaging schemas dynamically. Schemas on chain must have the following salient features: + +- **Registry**: Implement a schema registry, enabling participants to register and store validated schemas on chain. + +- **Validation**: Schema validation enables message consumers and producers to entrust Frequency with correctness of schema prior to storage and a valid ```schema_id``` is produced. Schema validation can be done on chain with following basic steps: + - Some sort of duplication checks to be put in place ensuring uniqueness of schemas. + - Total count of schemas does not exceed a pre-defined maximum count that can be stored on chain. + - Schema being registered should have a minimum size as defined by Frequency and should not exceed a pre-defined maximum size. + - Schema should not be malformed. + +Note: due to the [serialization concerns](./OnChainMessageStorage.md#serialization-concerns) pertaining to processing restrictions on chain as well as lack of better serialization rust libraries, schema integrity may be required to be validated off chain. + +- **Interfaces**: Implement appropriate procedural calls to perform read operations on schema registry. + +- **Retention**: Implement some sort of schema(s) retention logic for optimal on-chain message(s) storage. Retention periods per schema can be modified via super user permissions. + +- **Schema Retirement**: Schema retirement is a mechanism to enable deprecation/retirement or invalidating a given schema from use. This can be achieved via defined schema states such as Active, Deprecated or Retracted. Rationale behind such a mechanism is as follows: + + - Author of a given schema would want to retire or deprecate a schema. + - Schema itself has bug which was overlooked during registration. + - Cost of garbage collecting data would eventually be a factor. + +- **Evolution**: An important aspect of message passing is schema evolution. After initial schema is defined, network participants may need to evolve it over time depending on their respective use cases, it is critical to messaging system to handle data encoded with both old and new schema seamlessly. Schema evolution on Frequency can be achieved simply via various approaches, preferably some sort of retirement mechanism discussed in this proposal. See [additional notes](#additional-notes) for more details. + +## Proposal + +This document outlines various components of Frequency schemas, including, but not limited to, ability of network participants to register, validate and access message schemas dynamically via on chain semantics. + +## Schema Registry + +Schema registry provides an on chain repository for schemas, thereby allowing participants of the network to flexibly interact and exchange messages with each other without facing the challenge of sharing, managing and validating messages as well as schemas between them. + +Using schema registry, message producers no longer need to include full schema with the message payload, instead only include ID of that schema, resulting in efficient serialization and storage. + +![registry](https://user-images.githubusercontent.com/61435908/163263866-adf36d23-0968-42cd-8d50-6025bb7c455b.png) + +### Schema Primitives + +- **BlockNumber**: Chain specific primitive type for block number. Typically a 32-bit quantity. +- **Schema**: Serialized schema of type ```Vec```. +- **SchemaId**: A unique identifier of type ```u16``` for schemas that are successfully stored on chain. +- **BlockCount**: A primitive of type ```u16``` that represents count of blocks per schema. This is used to define for how many blocks; messages per schema are stored on chain. +- **SchemaState**: A type enumeration listing various state of a given schema[*](#disclaimer). + + ```rust + + pub enum SchemaState { + Active, + Deprecated, + Retracted, + } + + ``` + +- **SchemaValidity**: Defines a contract enabling definition of state of current ```schema_id``` and its validity range in terms of block number. Typically, a generic schema validity can be defined as follows[*](#disclaimer): + + ```rust + pub struct SchemaValidity { + pub state: SchemaState, + pub valid_from: BlockNumber, + pub valid_to: BlockNumber, + } + + ``` + +- **SchemaPolicy** : Defines a contract that encapsulate ```retention``` which is of type ```BlockCount``` and ```starting_block``` which of type ```BlockNumber```. A typical generic structure for schema policy is defined as follows[*](#disclaimer): + + ```rust + + pub struct SchemaPolicy { + pub retention: BlockCount, + pub starting_block: BlockNumber, + pub validity: SchemaValidity + } + + ``` + +### Schema Storage + +- **Type definition**: ```StorageMap<_, Twox64Concat, SchemaId, BoundedVec>``` +- **Description**: Schemas are stored as key-value pair of SchemaId vs Serialized schema payload allowed to a maximum size. +- **Implementation**: Frequency will expose a substrate extrinsic ``` create_schema ``` to allow participants store a schema on chain. On successful registration raise ```SchemaCreated``` event with ```schema_id``` and schema payload. Schema registration should also initialize default ```SchemaPolicy``` upon successful schema registration. + +### Schema Validation + +Schema registry, at least, performs following checks before onboarding a schema on Frequency: + +- Payload is signed by an authorizing AccountId. +- Frequency did not exceed maximum count of schemas that can be hosted on chain. +- A given schema adheres to minimum and maximum size limits allowed per schema. +- Schema itself is not broken or malformed. +- No duplicate schema(s) ever get registered. + +### Schema Access + +Schema registry should expose, at minimum, following procedural calls (as RPC and/or public trait for internal use) for network participants and off chain message validator. Depending on use case we might need to add more and modify these basic calls. + +- **get_schema** : given a ```schema_id```, return serialized schema payload of type ```Schema``` stored on chain. + +- **get_schema_state**: given a ```schema_id```, return the state and/or range of blocks between which the schema is valid, if it still exists on chain. + +### Schema Retention and Starting Block Storage + +Retention periods on a schema is designed for message(s) store to retain messages per schema to a specific block number. Retention periods can be updated via super user (sudo extrinsic on substrate) access. + +- **Type Definition**: ```StorageMap```. +- **Description**: Retention period are stored as a map of ```SchemaId``` and ```SchemaPolicy```. By default schemas have no retention policy and by default ```retention``` and ```starting_block``` is set to 1 signaling message store to retain messages on chain database indefinitely. +- **Implementation**: Frequency will expose a substrate sudo call ```update_schema_retention``` to update ```retention``` period for a given ```schema_id```. On successful execution, retention block count will be updated. +- **Read**: Schema registry should expose ```get_retention_period``` procedural call to return current state of retention period for a given ```schema_id```. + +Note: ```starting_block``` should only be modifiable via internal calls, for example, via message store and should not be exposed to consumers. Check out the following section for more details. + +### Starting Blocks Storage and Access + +- **Description**: On chain storage of starting block number for each schema. Required by message store. Defaults to block number 1. +- **Implementation**: Schema registry should provide some sort of procedural call (internal to Frequency) to read (```get_schema_starting_block```) and write (```set_schema_starting_block```) starting block number for a given ```schema_id```. This will be utilized by message store for further processing. +- **Rationale**: Message store periodically garbage collect messages per schema based on their retention period for on chain storage, upon successful garbage collection message store will update starting block to last block where messages were removed from on chain storage to chain database and new set of message will be store till ```starting_block + block_count-1```. + +### Schema Retirement/Deprecation + +Schema(s) being immutable on Frequency, would generally follow a cycle of deprecation/retirement for various reasons, such as, but not limited to, schema being wrong from consumer perspective , such as missing key fields that author intend to have and author would want to retire or deprecate a schema, even from chain perspective, the cost of garbage collection, processing feed or storage fees over time would require Frequency to regularly garbage collect stable/expired/deprecated schemas. In general, following salient features have been proposed to address schema retirement/deprecation: + + 1. Schema(s) are immutable. + 2. Schema(s) that are intended to be retired based on their usage or vulnerabilities can be proposed to be deprecated in bulk via some sort of off chain governance. + 3. Same process proposed above can be used for bulk schema deletion for old/outdated schema(s) which are deemed to be not active anymore for example. + 4. Schema retirement/deprecation should be done in bulk via governance. + +**Implementation**: ```SchemaValidity``` defines a generic structure of what encompasses a particular schema validity. Where ```SchemaState``` defines various stages of schema existence on chain. Schemas when registered should default to Active state. Some of the possible extrinsic calls that are required to realize this mechanism of schema retirement could be as follows[*](#disclaimer): + + 1. ***Update*** ```update_schema_state```: Given a ```schema_id```. A valid account with sufficient balance can mark a schema deprecated or retracted (terms may change for how we want to word these). Such an update should be an outcome of curation via governance mechanism and hence can be implemented as a substrate sudo extrinsic. Typically we want to update state to ```Deprecated``` and ```valid_from```, ```valid_to``` will be defined as range of blocks between which deprecated schema remains valid or in other words, a deprecation period. + 2. ***Delete***:```delete_schema```: Given a ```schema_id```. A valid account with sufficient balance can delete a schema from chain. Such an update should be an outcome of curation via governance mechanism and hence can be implemented as a substrate sudo extrinsic. Governance could also look at all the schemas that are past their validity range as discussed in 1. and decision around their deletion could be made, if not used anymore. + +Note: Given the nature of dependency on governance we might want these extrinsic to be implemented as a sudo call. More on governance will be discussed in future. + +### Schema Evolution + +With Schema Registry, different consumers of Frequency can evolve a given schema at different rates, changing the shape of data and entrusting schema registry to handle translations from one schema to another. Currently schema evolution is not directly supported on chain and can be achieved by different consumers via unique [schema retirement procedure](#schema-retirementdeprecation) for evolved schemas. This is work in progress and various suggestions for future reference and development are listed in [additional notes](#additional-notes), preferably [suggestion 4](#suggestion-4). + +## Benefits and Risks + +### Benefits + +- Schema registry allows message producers and consumers to efficiently share messages without having to store or manage schema text themselves. + +- It allows message store to serialize, deserialize as well as optimize storage pattern of messages much more effectively. + +- It also enable schema evolution and act as an interface to ensure contracts between consumers and producers is not broken, while promoting reusability of schemas. + +- Schema immutability prevents overly complicated implementation and evolution while schema retirement via governance mechanism simplifies the process. + +### Risks + +- Schema registration on Frequency should prevent DoS attempts given schema registration will be open to anyone with enough balance to pay for the same. Should schema registration be costly, or restricting it specific accounts would be worth considering. + +- Schema evolution is critical to any message passing system, how does Frequency intend to handle it or is it required , is still a question that needs to be ironed out. + +- Another factor to consider is who is permissioned to modify retention periods per schema, who will pay for such an update and what are the defaults, if any. + +- Is removing schema completely (deletion) a good idea? May be yes, for it is done via proper governance. No? ensuring right procedures to follow before deleting a schema. + +- How we will handle duplicates, simple approach on chain or off chain. Not a risk but more of an implementation concern. + +## Additional Resources + +- [On chain message storage](./OnChainMessageStorage.md) +- [Substrate storage](https://docs.substrate.io/build/runtime-storage/) +- [Substrate extrinsics](https://docs.substrate.io/learn/transaction-types) +- [Substrate custom rpc](https://docs.substrate.io/build/remote-procedure-calls) +- [Substrate sudo](https://www.shawntabrizi.com/substrate/the-sudo-story-in-substrate/) + +## Additional Notes + +### Disclaimer + +subject to change at implementation level, use it as a reference point. + +### Schema Evolution Discussion + +#### Suggestion 1 + +1. If we use a format that support schema evolution like Thrift or protobuf then we can basically replace existing schema with newer version which is backwards compatible with older one. here are risks and benefits + + - **risk**: we need to have a way preferably (on-chain) to validate if a new version is compatible with older version. I think we should look into this to see if it's possible or not. + - **benefit**: if we are able to do this then then total number of existing schemas will get reduced and based on how the message retention policy works, with less schemas we will have more block capacity to handle more messages. + +2. We just allow adding new schema for a new version of an old one. + + - **risk**: then number of schemas can get larger and would have more overhead on each block calculations due to retention policies of each schema. + - **risk**: since read caching is also directly dependent on schema Id then more schemas will cause more overhead on cache calculations and storage + - **benefit**: simpler process and no need to check for backwards compatibility + +#### Suggestion 2 + +- Schemas should be immutable +- Why? Just because the schema creator wants to change something, doesn't mean the users do. Think of this as a limited version of smart contracts. +- Schemas should communicate replacement +- This is a different path than that of evolution, but I think we have three things we need to know: + - 1. If the schema is replaced by a newer one. + - 2. Which schema (or schemas?) replaced the old one. + - 3. If the new schema is backward compatible with the old one. + +- Should `#3` is needed to be communicated by the chain. Instead that feels like a library issue as to if the library can use the same code path or not for both. + +- Should other items be communicated? If so by whom? The creator of the original schema or the replacement schema? I think that it is better to communicate on the fork than the original schema. It also allows it to be immutable. + +#### Suggestion 3 + +- Schema(s) are immutable. +- Schema(s) can retire at different rates. +- Updated schemas can be added as long they have some sort of reference to previous/older schema(s). +- If a schema is retired, it should be propagated to referring schemas and removed from references. +- Provide some rpc calls for consumers to get replacement schemaId(s)/schema(s) for given schemaId etc. + +#### Suggestion 4 + +Simple: Use retirement mechanism to have simpler less complicated evolution mechanism and make evolution synonym with schema retirement/deprecation. diff --git a/designdocs/schema_v2.md b/designdocs/schema_v2.md new file mode 100644 index 0000000000..aa114ca3b2 --- /dev/null +++ b/designdocs/schema_v2.md @@ -0,0 +1,46 @@ +# On Chain Message Storage + +## Context and Scope +The proposed feature consists of changes that is going to be one (or more) pallet(s) in runtime of a +Substrate based blockchain, and it will be used in all environments including production. + +## Problem Statement +After introduction of **Proof of Validity** or **PoV** in runtime weights, all pallets should be +re-evaluated and refactored if necessary to minimize the usage of **PoV**. This is to ensure all +important operations are scalable. +This document tries to propose some changes on **Schemas** pallet to optimize the **PoV** size. + +## Goals +- Minimizing Weights including **execution times** and **PoV** size. + +## Proposal +Split Schemas into `SchemaInfo` and `payload` would allow lower **PoV** when verifying schema existence +or compatibility. + +### Main Storage types +- **SchemaInfos** + - _Type_: `StorageMap` + - _Purpose_: Main structure To store related properties of any schema + index +- **SchemaPayloads** + - _Type_: `StorageMap>` + - _Purpose_: Stores the payload or model for each schema + + +### On Chain Structure +Following is a proposed data structure for storing schema information on chain. +```rust +pub struct SchemaInfo { + /// The type of model (AvroBinary, Parquet, etc.) + pub model_type: ModelType, + /// The payload location + pub payload_location: PayloadLocation, + /// additional control settings for the schema + pub settings: SchemaSettings, +} +``` +### Expected PoV improvements +This PoV improvement would not affect extrinsic weights in this pallet, but it would directly affect any +pallet that is dependent on **Schemas** pallet. Some of these pallets are **Messages** and +**Stateful-Storage**. After these changes we are expecting see to see around 30-60KiB decrease in PoV +for `MaxEncodedLen` mode. diff --git a/designdocs/stateful_storage.md b/designdocs/stateful_storage.md new file mode 100644 index 0000000000..f992e039c6 --- /dev/null +++ b/designdocs/stateful_storage.md @@ -0,0 +1,116 @@ +# On Chain Stateful Storage + +## Context and Scope +The proposed feature consists of changes that is going to be one (or more) pallet(s) in runtime of a +Substrate based blockchain, and it will be used in all environments including production. + +## Problem Statement +Every party using any medium of communication will need to deal with the storage of some kind of +stateful data. Some of these stateful data might be consensus critical and in a decentralized world +one option might be to store this type of data on a blockchain as long as it is required. +The scope for how long some of these stateful data should exist is dependent on the +type of data. For example, some of them might exist as long as an active channel exists between two +communicating parties and for some others it might be directly dependent on the existence of a +particular party. + +### DSNP Usecase +**Frequency** is the first implementation of [DSNP](https://dsnp.org) and most of the state +transitions in **DSNP** can be modeled via `Announcements`. For some of these state transitions we +only care about the latest state, and currently the only way to achieve this via announcements is to +have some kind of third party indexer to track the latest state for these types. +If there was a way to be able to mutate the state of a storage, then we could update it to its +latest version and potentially remove the need for an indexer. + +## Goals +1. Allowing storage of stateful data with flexible schemas on chain. +2. Data stored for any `MSA` should not have any effects like changing read/write access times or +storage costs for any data stored for another `MSA`. +3. Allowing high write throughput. +4. Allowing high read throughput. +5. Avoiding data races between consecutive updates of the same item. + +## Non-goals +- Defining an economic incentive to restrict infinite growth of on-chain database. + +## Glossary +* `DSNP`: Decentralized Social Networking Protocol +* `MSA`: Message Source Account. A registered identifier with the MSA pallet. + +### Modes of Storage +- **Itemized**: In this mode we are storing each entity of that schemaId as an item in a blob with a +maximum size of `MAX_ITEMIZED_BLOB_SIZE`. +This is recommended for entities which have relatively small size compared to +`MAX_ITEMIZED_BLOB_SIZE` and there are more than a few of them. +- **Paginated**: In this mode we are storing each entity individually and inside a separate page. +This mode is recommended for entities that are relatively large and there are a few of them. + +![image](https://user-images.githubusercontent.com/9152501/213291600-98229ee4-6358-4e0e-abe2-d6da9abe179e.png) + +The rationale behind separating these modes is based on two reasons: +- _Performance_: **Itemized** mode always needs 1 on-chain DB_READ and 1 DB_WRITE but **Paginated** +mode might be done with only 1 DB_WRITE. +- _Composability_: **Itemized** mode allows better composability due to on-chain read requirement +and smaller size of each. + +### On chain Storage Details +- **Itemized**: Creating a Map of `SchemaId` as keys and `vec` as stored value containing all +items. +- **Paginated**: Creating a DoubleMap of `SchemaId` and `PageNumber` as keys and `vec` as +stored page. + +To be able to achieve goal number 2 we will need to create a child-tree for each `MSA` and store +these Map and DoubleMap under these child trees for each `MSA`. + +### Actions +1. **Append Item** + - _Modes_: Itemized + - _input_: `SchemaId` and serialized data as `vec` + - _Purpose_: Appends a new item to existing blob +1. **Remove Item** + - _Modes_: Itemized + - _input_: `SchemaId` and Index of item in blob + - _Purpose_: Removes an existing item from array +1. **Upsert** + - _Modes_: Paginated + - _input_: `SchemaId` and `PageNumber` and serialized data as `vec` + - _Purpose_: Creates or updates an item +1. **RemovePage** + - _Modes_: Paginated + - _input_: `SchemaId` and `PageNumber` + - _Purpose_: Removes a Page + +For itemized Actions it is recommended to have a batch of actions for any schemaId to improve +performance and reduce the possibility of data races. + +### Pre Checks +1. Checking schema (id and structure) against submitted data +2. Checking schema permission and grants +3. Checking Hash of previous state to avoid data races + +To be able to achieve all mentioned goals we will need to be able to do all or most of the mentioned +checks offchain. (Permission grant check will need to be on-chain due to importance!) + +## Benefits and Risks +### Benefits +- Highly available and consistent and decentralized data storage +- `MSA` based data isolation +- Data format flexibility using different schemas +- Providing a protocol and usage agnostic consensus critical storage +### Risks +- Requires well-defined economical incentives to minimize the storage size and time to allow +scalability +- A mechanism to prune data for non-active users (maybe migrate data to IPFS or S3 for long term +storage) +- In Itemized Storage Mode the append action will fail if we've reached `MAX_ITEMIZED_BLOB_SIZE` +size limit. +- The responsibility of data format and page management will be shifted towards offchain side which +might compromise the integrity of stored data for malicious clients. + +## Using Itemized Storage for keys +To be able to add a new key we need a signature from valid control keys to ensure that this request +has end user's approval. To support this use case we will need to check if some schemas require +signature. + +In general, we will need to be able to store different settings for schemas when creating and check +those settings against the actions applied to any data stored for that schema. This will allow us to +customize actions and checks that need to happen for any certain schema. diff --git a/designdocs/user-handles.md b/designdocs/user-handles.md new file mode 100644 index 0000000000..4b68a27418 --- /dev/null +++ b/designdocs/user-handles.md @@ -0,0 +1,224 @@ +# Frequency Handles + +## Context and Scope + +The Frequency blockchain aims to provide a mechanism to register and retrieve user handles on chain to make it easier to use MSA Ids. +To achieve this, we propose the creation of a user handle ```registry``` system on Frequency chain, coupled with ```MessageSourceAccount```, that allows users to choose a handle for their MSA Ids. The Handle system would then append an available numeric suffix to the chosen user handle, separated by a delimiter[.], to make it unique and store the mapping of the handle to the MSA Id in the registry. +The user handle system will also enforce guidelines to ensure that handles are user-friendly and easy to remember, as well as prevent misuse and abuse. + +The goal of this proposal is to enable users to create unique handles on the Frequency blockchain using a registry, making it more accessible for users to engage with the network. + +## Assumptions + +* ```MessageSourceAccount``` exists for a user to create a handle. +* It is optional for a user to create a handle. +* Handles are unique and have a 1:1 mapping with ```MessageSourceAccount```. +* Handles have `n` digits of suffix and is defined by a window of suffixes as `HandleSuffixMin` to `HandleSuffixMax`. +* Handles should support capacity based transactions. +* Retirement should be feeless. + +## Requirements + +The high level requirements for user handles are: + +* Handles can be claimed as long as they are in allowed characters ranges configured on chain. +* Suffixes are randomly constrained and selected within a range configured on chain. +* Suffixes window must be runtime configurable. +* Ensure handles and suffixes are unique and non-conflicting. +* Make the system resistant to namespace exhaustion, homoglyphs and race conditions. +* Make the system easy to use and integrate with existing UI and wallet systems. +* Reduce the likelihood of abuse and misuse of the system for example secondary market trading of handles. + +### Handles Terminology + +* **Base Handle**: A base handle is a string of characters chosen by the user of Frequency. The base handle is the part of the handle that is not suffixed. +* **Canonical Base**: A canonical base is a reduced/translated version of a base handle that is used to identify a user on the Frequency blockchain. +* **Suffix**: A suffix is a numeric value that is appended to a base handle to make it unique. The suffix is randomly constrained and selected within a range configured on chain. +* **Delimiter**: A delimiter is a character that is used to separate the base handle and suffix. The delimiter is a period (.) by default. +* **Display Handle**: A display handle is formed by concatenating the base handle and suffix with the delimiter. The display handle is the handle that is displayed to the user. + +### Handle Guidelines + +* User handles must be unique and each MSA can only be mapped to one handle. +* User handles must be between 3 and 20 characters (32b limit) long. +* User handles cannot contain the following substrings (or homoglyphs): @, #, :, ., ``` (this is just a suggestion, we can add more if needed) +* User handles cannot match any in a blocklist. e.g. (@admin, @everyone, @all) and others (this is just a suggestion, we can add more if needed) +* Suffixes are numeric and contain digits without any leading zeros. +* Suffixes are `u16` limited to a range set as runtime `Config` parameters. +* Suffix will be randomly constrained. +* Homoglyph versions of handles should still resolve to the same ```msa_id``` (e.g. ```user.1234``` and ```u$er.1234``` should resolve to the same ```msa_id```). +* `Display Handle` is the handle that is displayed to the user and must be unique. +* `Base Handle` should have UTF-8 whitespace trimmed and concatenated (e.g. ``` u s \t\t e\tr ``` will be trimmed to ```u s e r```). + +## Proposal + +Handles```registry``` on Frequency chain. + +### General Steps + +* Create a randomly shuffled array of numeric suffixes. +* For each base handle requested, a storage map will be created with a randomly generated start index (in to the shuffled array) and a current index. The current index will be incremented each time a new suffix is requested. +* When the current index reaches the start index, all suffixes are exhausted and an error is returned. +* Alternativelty: Query the chain to check which values are possibly available, check if the handle with the suffix is available before claiming a handle. +* Chain validates the handle and generates the next suffix and maps the handle to the ```msa_id```. +* Chain maintains a reverse mapping from handle to MSA for offchain use. +* Chain provides a set of rpcs to query MSA for a given `DisplayHandle` and vice versa. +* Chain providers an rpc to get presumptive suffix for a given base handle. + +### Handle replay attack + +To prevent replay attacks, the chain will require a mortality period for handles. This can be included in the user's signed payload as an `expiration` field. The chain will check if the `expiration` is greater than the current block number. If not, the transaction will fail. + +### Handling Race Conditions + +There is an exceedingly small chance that two users may attempt to claim the same handle and suffix combination within the same block. In such cases, the transaction will succeed as the distribution of suffixes by chain is random as well as on a first come basis. + +## Sequence Diagram + +```mermaid +sequenceDiagram + participant Wallet + actor User + participant App + participant RPC + participant Frequency + User->>App: enter desired handle + loop until msa_id and handle successfully claimed + alt Optionally retrive n number of presumtive suffix + App->>RPC: get_next_suffixes(handle, n) + RPC->>Frequency: query state for current index for a base handle + Frequency-->>RPC: return current index + Frequency->>RPC: compute suffix options + RPC-->>App: return `n` presumptive suffixes + App->>User: submit base handle chosen by user + User->>App: confirm and submit + end + App->>Wallet: send signup data with base handle and expiration + Wallet->>Wallet: perform 2FA if first attempt + Wallet-->>App: return signed payload + App->>Frequency: claim_handle(.., signed_payload) + Frequency-->>Frequency: compute suffix options + Frequency-->>Frequency: check_handle_availability(...handle, suffix) + Frequency-->>Frequency: fail if available suffix does not match signed_payload suffix + Frequency-->>Frequency: submit transaction + Frequency-->>App: HandleClaimed event with (msa_id, handle+suffix) + end + App->>User: proceed with setup + User->>App: request to get msa_id + App->>Frequency: query state for msa_id (handle<->msa_id) + Frequency-->>App: return msa_id (State Query handle<->msa_id) + User->>App: request to get handle for msa_id + App->>RPC: get_handle_for_msa_id(msa_id) + RPC->>Frequency: query for handle given msa_id (index handle<->msa_id) + Frequency-->>RPC: return handle for msa_id + RPC-->>App: return handle for msa_id +``` + +## Storage + +* **HandleSuffixMin**: This storage value (```u32```) will keep track of the minimum suffix value allowed for a given handle. +* **HandleSuffixMax**: This storage value (```u32```) will keep track of the maximum suffix value allowed for a given handle. +* **MSAIdToDisplayName**: This storage will map MSAIds to their corresponding user display handles. +* **CanonicalBaseHandleAndSuffixToMSAId**: This storage will map user handles to their corresponding MSAIds. +* **CanonicalBaseHandleToSuffixIndex**: This storage will map canonical version of handles to their corresponding suffix index. This is used to keep track of the current suffix index for a given canonical base. + +## Required Extrinsics + +### Primitives + +``` rust + +ClaimHandlePayload { + base_handle: &[u8], + expiration: u32, +} +``` + +### Claim handle + + As a network, Frequency should allow users to choose their own handle, while the chain will generate a random numeric suffix within the range of suffixes allowed. The display handle will be the base handle with whitespace trimmed and consolidated, concatenated with the suffix. + +Input + +* origin - must be a signed origin +* msa_owner_key - the public key of the MSA owner. This is used to verify the signature and resolve the MSA ID. +* proof - the multi-signature proof for the payload. +* payload - the payload containing the information needed to claim the handle, including `base_handle` and `expiration` as a `ClaimHandlePayload`. + +Output + +* Event - `HandleClaimed` with the MSA ID and the handle. +* Errors - + * `HandleAlreadyExists` if the handle already exists. + * `InvalidHandleByteLength` if the base handle size exceeds the maximum allowed size. + * `InvalidMessageSourceAccount` if the caller does not have a valid MSA ID. + * `InvalidSignature` if the payload signature verification fails. + * `InvalidSuffix` if the suffix is invalid. + * `ProofNotValid` if the proof is not valid as of the current block. + * `ProofHasExpired` if the proof has expired. + +Validation requirements + +* Handle must follow handle guidelines. +* Handle must be unique. +* Handle must be available. +* Suffix must be available. +* Suffix must be in the range of the handle. +* MSA ID must exist. Signing keys must resolve to MSA ID. +* Payload signature must be valid. +* Base handle size must not exceed the maximum allowed size. + +Signature requirements + +The extrinsic must be signed by the MSA owner's private key. The signature must be verified on-chain to ensure that the user is the owner of the handle. Without the possibility of a replay attack, the chain can verify that the user is the owner of the handle and no special mechanism to handle signature reuse is required. + +### Retire handle + +As a network, Frequency should allow users to retire their handles. This extrinsic will allow users to retire their handles. + +Note: As of this implementation + +* Retiring display handle will not be available for reuse, given the unique nature of the display handle with the suffix. + +Input + +* origin - must be a signed origin and must be the owner of the handle. + +Output + +* Event - `HandleRetired` with the MSA ID and the handle. +* Errors - + * `InvalidMessageSourceAccount` if the caller does not have a valid MSA ID. + * `MSAHandleDoesNotExist` if the handle does not exist. + * `HandleWithinMortalityPeriod` if an early retirement on a handle is requested + +**Note:** + +* Claim handle should be Capacity possible transactions. +* Retire handle should be ```Pays::No```. +* An MSA cannot be retired (```retire_msa``` call) if a claimed user handle has not also been retired first. + +## RPCs + +* RPC to get the display handle (base handle + suffix) given a ```msa_id```. +* RPC to get the ```msa_id``` given a display handle. +* RPC to get a set of available suffixes given a base handle and count (limited to 100 and defaulted to 1) + +## Risks + +* **Risk**: The handle feature may not be used by users. + * **Mitigation**: The handle feature is not a core feature of the protocol. It is an optional feature that users can choose to use or not. If the feature is not used by users, it will not affect the protocol. +* **Risk**: Homoglpyhs. + * **Mitigation**: Frequency handles will use a PRNG to generate suffixes. This will prevent homoglyph attacks. However, a utility to check for homoglyphs will be provided to help users avoid homoglyphs. +* **Risk**: Unavailability of desired suffixes. + * **Mitigation**: The handle feature will provide a utility to check for available suffixes. This will allow users to check for available suffixes before attempting to create a new MSA. +* **Risk**: Claims on retired handles. + * **Mitigation**: Frequency would use a retirement period to prevent claims on retired handles. The retirement period would be set to some block number in future. This would allow users to claim their handles after the retirement period has ended. +* **Risk**: Handle merging. + * **Mitigation**: To be determined. This will be decided based on implementation requirements. + +## Additional Notes + +* **Suffix generation**: The suffix generation algorithm will be based on a lazy sequence of suffixes. The algorithm will take a seed and generate a sequence of suffixes. The sequence will be generated lazily, i.e. the algorithm will generate a new suffix only when the previous suffix has been used. This will prevent the generation of a large number of suffixes that may not be used. [An Example of Fisher Yates, and Lazy Sequence Shuffling](https://github.com/AmplicaLabs/magic-rs) + +* **Suffix Range (min, max)**: Ideally we should enforce suffixes window to be of a minimum size, say 10k. This will prevent the generation of a large number of suffixes that may not be used, while keeping the performance in acceptable limits. diff --git a/docker/collator-node-local.dockerfile b/docker/collator-node-local.dockerfile new file mode 100644 index 0000000000..f1a3048687 --- /dev/null +++ b/docker/collator-node-local.dockerfile @@ -0,0 +1,71 @@ +# Docker image for running collator node node locally against the local relay chain. +# Multi-architecture support for amd64 and arm64 +FROM ubuntu:24.04 +LABEL maintainer="Frequency" +LABEL description="Frequency collator node for local relay chain" + +# From QEMU +ARG TARGETARCH + +# Some Ubuntu images have an ubuntu user - don't error if it doesn't exist +RUN userdel -r ubuntu || true + +# Install required packages +RUN apt-get update && \ + apt-get install -y jq apt-utils apt-transport-https \ + software-properties-common readline-common curl vim wget gnupg gnupg2 \ + gnupg-agent ca-certificates tini file && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# Create frequency user and set up directories +RUN useradd -m -u 1000 -U -s /bin/bash -d /frequency frequency && \ + mkdir -p /data && \ + chown -R frequency:frequency /data + +WORKDIR /frequency + +# Create the directory structure expected by the scripts +RUN mkdir -p /frequency/target/release + +# Copy the appropriate binary based on the target platform +COPY linux/${TARGETARCH}/frequency /frequency/target/release/frequency + +# Add chain resources to image +COPY resources ./resources/ +COPY scripts ./scripts/ + +# Set execute permissions and correct ownership +RUN chmod +x ./target/release/frequency \ + ./scripts/run_collator.sh \ + ./scripts/init.sh \ + ./scripts/healthcheck.sh && \ + chown -R frequency:frequency /frequency + +# Run binary check after setting permissions +RUN file ./target/release/frequency && \ + ./target/release/frequency --version + +ENV Frequency_BINARY_PATH=./target/release/frequency + +# Switch to non-root user +USER frequency + +HEALTHCHECK --interval=300s --timeout=75s --start-period=30s --retries=3 \ + CMD ["./scripts/healthcheck.sh"] + +VOLUME ["/data"] + +# Frequency Chain Ports +# 9944 for Websocket and Rpc +# 30333 for P2P +# 9615 for Telemetry (prometheus) +# Relay Chain Ports +# 9945 for Websocket and Rpc +# 30334 for P2P +# 9616 for Telemetry (prometheus) +EXPOSE 9944 30333 9615 9945 30334 9616 + +# Using tini as init to properly handle signals and zombie processes +ENTRYPOINT ["/usr/bin/tini", "--"] +CMD ["/bin/bash", "./scripts/init.sh", "start-frequency-container"] diff --git a/docker/collator-node-local.overview.md b/docker/collator-node-local.overview.md new file mode 100644 index 0000000000..2fd86e377f --- /dev/null +++ b/docker/collator-node-local.overview.md @@ -0,0 +1,36 @@ +# Frequency Collator Node for Local Relay Chain + +Runs one collator node that connects to the local relay chain consisting of two validator nodes. + +![](https://github.com/frequency-chain/frequency/blob/main/docs/images/local-dev-env-option-2.jpg?raw=true) + +## Run + +1. Checkout project and generate local spec + + ``` + git clone git@github.com:frequency-chain/frequency.git + ``` + +1. Start relay chain and collator node + + ```sh + + make start-frequency-docker + ``` + +1. Stop all nodes + + ```sh + make stop-frequency-docker + ``` + +| **Node** | **Ports** | **Explorer URL** | +| -------------------- | ------------------------------- | ----------------------------------------------------------------------------------------- | +| Frequency Relay Node | ws and rpc: `9944`, p2p:`30333` | [127.0.0.1:9944](https://polkadot.js.org/apps/?rpc=ws%3A%2F%2F127.0.0.1%3A9944#/explorer) | +| Alice Relay Node | ws and rpc: `9946`, p2p:`30335` | [127.0.0.1:9946](https://polkadot.js.org/apps/?rpc=ws%3A%2F%2F127.0.0.1%3A9946#/explorer) | +| Bob Relay Node | ws and rpc: `9947`, p2p:`30336` | [127.0.0.1:9947](https://polkadot.js.org/apps/?rpc=ws%3A%2F%2F127.0.0.1%3A9947#/explorer) | + +``` + +``` diff --git a/docker/docker-compose-collator.yml b/docker/docker-compose-collator.yml new file mode 100644 index 0000000000..183c74b16f --- /dev/null +++ b/docker/docker-compose-collator.yml @@ -0,0 +1,31 @@ +services: + relay_paseo_alice: + container_name: alice + + relay_paseo_bob: + container_name: bob + + collator_frequency: + container_name: frequency + image: frequencychain/collator-node-local:latest + platform: linux/x86_64 + environment: + - HOST_ALICE=relay_alice + - HOST_BOB=relay_bob + - ALICE_RPC_PORT=9944 + - BOB_RPC_PORT=9944 + ports: + - "30333:30333" # p2p port + - "9944:9944" # ws and rpc port + depends_on: + relay_paseo_alice: + condition: service_healthy + relay_paseo_bob: + condition: service_healthy + volumes: + - collator_data:/data + - ../scripts:/frequency/scripts + +volumes: + collator_data: + collator_base_path: diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 0000000000..8a1c983226 --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,74 @@ +# Node Key Alice: `subkey inspect //Alice` +# Node Key Bob: `subkey inspect //Bob` +x-polkadot-image: &polkadot-image "parity/polkadot:stable2412" + +services: + relay_paseo_alice: + container_name: alice + image: *polkadot-image + platform: linux/x86_64 + hostname: relay_alice + ports: + - "30335:30335" # p2p port + - "9946:9944" # ws and rpc port + healthcheck: + test: ["CMD-SHELL", "bash -c 'exec 3<>/dev/tcp/localhost/9944 && echo -e \"GET /health HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: close\\r\\n\\r\\n\" >&3 && grep -q 200 <&3'"] + interval: 10s + timeout: 5s + retries: 3 + volumes: + - type: bind + source: ../resources/paseo-local.json + target: /chainspec.json + read_only: true + - alice_polkadot:/polkadot + command: > + --chain=/chainspec.json + --node-key=e5be9a5092b81bca64be81d212e7f2f9eba183bb7a90954f7b76361f6edb5c0a + --wasm-execution=compiled + --base-path=/data + --port=30335 + --rpc-port=9944 + --rpc-external + --rpc-cors=all + --rpc-methods=Unsafe + --alice + -ltxpool=trace + restart: unless-stopped + + relay_paseo_bob: + container_name: bob + image: *polkadot-image + platform: linux/x86_64 + hostname: relay_bob + ports: + - "30336:30336" # p2p port + - "9947:9944" # ws and rpc port + healthcheck: + test: ["CMD-SHELL", "bash -c 'exec 3<>/dev/tcp/localhost/9944 && echo -e \"GET /health HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: close\\r\\n\\r\\n\" >&3 && grep -q 200 <&3'"] + interval: 10s + timeout: 5s + retries: 3 + volumes: + - type: bind + source: ../resources/paseo-local.json + target: /chainspec.json + read_only: true + - bob_polkadot:/polkadot + command: > + --chain=/chainspec.json + --node-key=398f0c28f98885e046333d4a41c19cee4c37368a9832c6502f6cfd182e2aef89 + --base-path=/data + --wasm-execution=compiled + --port=30336 + --rpc-port=9944 + --rpc-external + --rpc-cors=all + --rpc-methods=Unsafe + --bob + --log="main,info" + restart: unless-stopped + +volumes: + alice_polkadot: + bob_polkadot: diff --git a/docker/frequency-start.sh b/docker/frequency-start.sh new file mode 100755 index 0000000000..80a4d414f5 --- /dev/null +++ b/docker/frequency-start.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +if [ -z "${SEALING_MODE}" ] +then + SEALING_MODE=instant +fi + +if [ -n "${SEALING_INTERVAL}" ] +then + SEALING_INTERVAL="--sealing-interval=${SEALING_INTERVAL}" +fi + +if [ "${CREATE_EMPTY_BLOCKS}" = true ] +then + CREATE_EMPTY_BLOCKS="--sealing-create-empty-blocks" +fi + +exec /frequency/frequency \ + --dev \ + -lruntime=debug \ + --no-telemetry \ + --no-prometheus \ + --rpc-port=9944 \ + --rpc-external \ + --rpc-cors=all \ + --rpc-methods=Unsafe \ + --base-path=/data \ + --sealing=${SEALING_MODE} \ + ${SEALING_INTERVAL} \ + ${CREATE_EMPTY_BLOCKS} \ + $* diff --git a/docker/parachain-node-mainnet.overview.md b/docker/parachain-node-mainnet.overview.md new file mode 100644 index 0000000000..c57190d544 --- /dev/null +++ b/docker/parachain-node-mainnet.overview.md @@ -0,0 +1,25 @@ +# Frequency Node for Mainnet + +Frequency node which connects to the Mainnet network. + +## Run Full Node + +Start full chain node that connects to Mainnet network: + +```sh +docker run -p 9944:9944 -p 30333:30333 frequencychain/parachain-node-mainnet: \ + --base-path=/chain-data \ + --rpc-external \ + --rpc-cors=all \ + --rpc-methods=safe +``` + +Remember that these nodes contain a full node of the relay chain as well, so plan available storage size accordingly. + +Using [Volumes](https://docs.docker.com/storage/volumes/) or [Bind Mounts](https://docs.docker.com/storage/bind-mounts/) is suggested to maintain the `--base-path` between restarts. + +To view all available options and arguments: + +```sh +docker run --rm frequencychain/parachain-node-mainnet: --help +``` diff --git a/docker/parachain-node-testnet.overview.md b/docker/parachain-node-testnet.overview.md new file mode 100644 index 0000000000..aa5c40b668 --- /dev/null +++ b/docker/parachain-node-testnet.overview.md @@ -0,0 +1,35 @@ +# Frequency for Testnets + +Frequency node which connects to Frequency testnets: + +- Frequency Paseo Testnet `--chain=frequency-paseo` (Default) + +To view all available options and arguments: + +```sh +docker run --rm frequencychain/parachain-node-testnet: --help +``` + +## Run Full Node + +### Frequency Paseo Testnet + +Start full chain node that connects to Paseo Testnet network and syncs with warp: + +```sh +docker run -p 9944:9944 -p 30333:30333 frequencychain/parachain-node-testnet: \ + --chain=frequency-paseo \ + --base-path=/chain-data \ + --rpc-external \ + --rpc-cors=all \ + --rpc-methods=safe \ + --sync=warp \ + -- \ + --sync=warp +``` + +## Storage + +Remember that these nodes contain a full node of the relay chain as well, so plan available storage size accordingly. + +Using [Volumes](https://docs.docker.com/storage/volumes/) or [Bind Mounts](https://docs.docker.com/storage/bind-mounts/) is suggested to maintain the `--base-path` between restarts. diff --git a/docker/parachain-node.dockerfile b/docker/parachain-node.dockerfile new file mode 100644 index 0000000000..28a9027048 --- /dev/null +++ b/docker/parachain-node.dockerfile @@ -0,0 +1,55 @@ +# Docker image for running Frequency parachain node container (without collating). +# Multi-architecture support for amd64 and arm64 +FROM ubuntu:24.04 AS base +LABEL maintainer="Frequency" +LABEL description="Frequency Parachain Node" + +RUN apt-get update && apt-get install -y ca-certificates && update-ca-certificates + +# This is the 2nd stage: a very small image where we copy the Frequency binary +FROM ubuntu:24.04 + +# From QEMU +ARG TARGETARCH + +# Some Ubuntu images have an ubuntu user - don't error if it doesn't exist +RUN userdel -r ubuntu || true + +# We want jq and curl in the final image, but we don't need the support files +RUN apt-get update && \ + apt-get install -y jq curl && \ + apt-get clean && \ + rm -rf /usr/share/doc /usr/share/man /usr/share/zsh + +RUN useradd -m -u 1000 -U -s /bin/sh -d /frequency frequency && \ + mkdir -p /chain-data /frequency/.local/share && \ + chown -R frequency:frequency /chain-data && \ + ln -s /chain-data /frequency/.local/share/frequency + +# Copy the appropriate binary based on the target platform +COPY --from=base /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt +COPY linux/${TARGETARCH}/frequency /frequency/frequency +COPY scripts/healthcheck.sh /frequency/scripts/healthcheck.sh + +# Set correct permissions and ownership +RUN chmod +x /frequency/frequency /frequency/scripts/healthcheck.sh && \ + chown -R frequency:frequency /frequency + +USER frequency + +# Frequency Chain Ports +# 9944 for Websocket and Rpc +# 30333 for P2P +# 9615 for Telemetry (prometheus) +# Relay Chain Ports +# 9945 for Websocket and Rpc +# 30334 for P2P +# 9616 for Telemetry (prometheus) +EXPOSE 9944 30333 9615 9945 30334 9616 + +HEALTHCHECK --interval=300s --timeout=75s --start-period=30s --retries=3 \ + CMD ["/frequency/scripts/healthcheck.sh"] + +VOLUME ["/chain-data"] + +ENTRYPOINT ["/frequency/frequency"] diff --git a/docker/standalone-node.dockerfile b/docker/standalone-node.dockerfile new file mode 100644 index 0000000000..a729d129e1 --- /dev/null +++ b/docker/standalone-node.dockerfile @@ -0,0 +1,52 @@ +# Docker image for running Frequency parachain node container (with collating) +# locally as a standalone node. Multi-architecture support for amd64 and arm64 +FROM ubuntu:24.04 AS base +LABEL maintainer="Frequency" +LABEL description="Frequency standalone node" + +RUN apt-get update && apt-get install -y ca-certificates && update-ca-certificates + +# This is the 2nd stage: a very small image where we copy the Frequency binary +FROM ubuntu:24.04 + +# From QEMU +ARG TARGETARCH + +# Some Ubuntu images have an ubuntu user +RUN userdel -r ubuntu || true + +# We want jq and curl in the final image, but we don't need the support files +RUN apt-get update && \ + apt-get install -y jq curl && \ + apt-get clean && \ + rm -rf /usr/share/doc /usr/share/man /usr/share/zsh + +RUN useradd -m -u 1000 -U -s /bin/sh -d /frequency frequency && \ + mkdir -p /data /frequency/.local/share && \ + chown -R frequency:frequency /data && \ + ln -s /data /frequency/.local/share/frequency + +# For local testing only +# COPY --chown=frequency target/x86_64-unknown-linux-gnu/debug/frequency ./frequency/frequency +# Copy the appropriate binary based on the target platform +COPY --from=base /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt +COPY linux/${TARGETARCH}/frequency /frequency/frequency +COPY scripts/frequency-start.sh /frequency/frequency-start.sh +COPY scripts/healthcheck.sh /frequency/scripts/healthcheck.sh + +# Set correct permissions and ownership BEFORE switching user +RUN chmod +x /frequency/frequency /frequency/frequency-start.sh /frequency/scripts/healthcheck.sh && \ + chown -R frequency:frequency /frequency + +# Switch to non-root user after setting permissions +USER frequency + +# 9944 for RPC call +EXPOSE 9944 + +HEALTHCHECK --interval=300s --timeout=75s --start-period=30s --retries=3 \ + CMD ["/frequency/scripts/healthcheck.sh"] + +VOLUME ["/data"] + +ENTRYPOINT ["/frequency/frequency-start.sh"] diff --git a/docker/standalone-node.overview.md b/docker/standalone-node.overview.md new file mode 100644 index 0000000000..41a2156158 --- /dev/null +++ b/docker/standalone-node.overview.md @@ -0,0 +1,77 @@ +# Frequency Collator Node in Local Only Sealing Mode + +Runs just one collator node that will not connect to any other nodes. +Defaults to running in instant sealing mode where a block will be triggered when a transaction enters the validated transaction pool. +A "collator node" is a Frequency parachain node that is actively collating (aka forming blocks to submit to the relay chain, although in this case without a relay chain). + +### Quick Run + +```sh +docker run --rm -p 9944:9944 frequencychain/standalone-node: +``` + + +## Trigger Block Manually + +If running in manual sealing mode or to form empty blocks in instant sealing mode, the `engine_createBlock` RPC can be used: + +```sh +curl http://localhost:9944 -H "Content-Type:application/json;charset=utf-8" -d '{ \ + "jsonrpc":"2.0", \ + "id":1, \ + "method":"engine_createBlock", \ + "params": [true, true] \ + }' +``` + + +## Default Arguments + +| Argument | Description | +| --- | --- | +| `--dev` | Specify the development chain. This flag sets `--chain=dev`, `--force-authoring`, `--rpc-cors=all`, `--alice`, and `--tmp` flags, unless explicitly overridden| +| `-lruntime=debug` | Sets a the custom logging filter for the 'runtime' target to 'debug'. Syntax is `=`, e.g. -lsync=debug. Log levels (least to most verbose) are error, warn, info, debug, and trace. By default, all targets log `info`. The global log level can be set with `-l`| +| `--no-telemetry` | Disable connecting to the Substrate telemetry server. Telemetry is on by default on global chains | +| `--no-prometheus` | Do not expose a Prometheus exporter endpoint. Prometheus metric endpoint is enabled by default | +| `--rpc-port=9944` | Specify JSON-RPC server TCP port | +| `--rpc-external`| Listen to all RPC interfaces. Default is local. Note: not all RPC methods are safe to be exposed publicly. Use an RPC proxy server to filter out dangerous methods. More details: . Use `--unsafe-rpc-external` to suppress the warning if you understand the risks| +| `--rpc-cors=all` | Specify browser Origins allowed to access the HTTP & WS RPC servers. A comma-separated list of origins (protocol://domain or special `null` value). Value of `all` will disable origin validation. Default is to allow localhost and origins. When running in --dev mode the default is to allow all origins | +| `--rpc-methods=Unsafe` | RPC methods to expose | +| `--base-path=/data` | Specify custom base path | +| `--sealing=instant` | Manual sealing + automatically form a block each time a transaction enters the validated transaction pool | + +### Run + +Note: Docker `--rm` removes the volume when stopped. + +```sh +docker run --rm -p 9944:9944 frequencychain/standalone-node: +``` + +## Environment Variables + +The following environment variables are supported by this image. The same behavior may be requested by overriding the command line arguments in the `CMD` of the container; however, certain use cases (GitHub Actions) do not support overriding `CMD` when instantiating a container-based service in a workflow. In such a case, injecting these environment variables is a viable workaround. + +| Environmnet Variable | Possible Values | Description | +| --- | --- | --- | +| `SEALING_MODE` | `instant`, `interval`, `manual` | Overrides `--sealing=SEALING_MODE` | +| `SEALING_INTERVAL` | integer > 0 | Adds `--sealing-interval=SEALING_INTERVAL`. The sealing interval in seconds (in `interval` sealing mode) | +| `CREATE_EMPTY_BLOCKS` | `true` | Add `--sealing-create-empty-blocks`. Create empty blocks in interval sealing modes | + + +## Overriding Arguments + +| Argument | Description | +| --- | --- | +| `--sealing=manual` | Only form a block when `engine_createBlock` RPC is called | +| `--help` | See all the options possible | + +### Run + +```sh +docker run --rm -p 9944:9944 frequencychain/standalone-node: -- --manual-seal +``` + +| **Node** | **Ports** | **Explorer URL** | +| ----------------------- | :-------------------------------: | ----------------------------------------------------------------------------------------- | +| Frequency Local-Only Node | ws and rpc :`9944` | [127.0.0.1:9944](https://polkadot.js.org/apps/?rpc=ws%3A%2F%2F127.0.0.1%3A9944#/explorer) | diff --git a/docs/images/BasicDataModel.drawio.png b/docs/images/BasicDataModel.drawio.png new file mode 100644 index 0000000000..0357f37805 Binary files /dev/null and b/docs/images/BasicDataModel.drawio.png differ diff --git a/docs/images/Passkey-Registration.png b/docs/images/Passkey-Registration.png new file mode 100644 index 0000000000..1612beafd3 Binary files /dev/null and b/docs/images/Passkey-Registration.png differ diff --git a/docs/images/Passkey-Transaction.png b/docs/images/Passkey-Transaction.png new file mode 100644 index 0000000000..f256fbb772 Binary files /dev/null and b/docs/images/Passkey-Transaction.png differ diff --git a/docs/images/local-dev-env-option-1.jpg b/docs/images/local-dev-env-option-1.jpg new file mode 100644 index 0000000000..475d329ea0 Binary files /dev/null and b/docs/images/local-dev-env-option-1.jpg differ diff --git a/docs/images/local-dev-env-option-2.jpg b/docs/images/local-dev-env-option-2.jpg new file mode 100644 index 0000000000..223633f807 Binary files /dev/null and b/docs/images/local-dev-env-option-2.jpg differ diff --git a/docs/images/main_storage_type.png b/docs/images/main_storage_type.png new file mode 100644 index 0000000000..303feaff30 Binary files /dev/null and b/docs/images/main_storage_type.png differ diff --git a/docs/images/message_storage_alternative.png b/docs/images/message_storage_alternative.png new file mode 100644 index 0000000000..261dfcce98 Binary files /dev/null and b/docs/images/message_storage_alternative.png differ diff --git a/docs/images/message_storage_bitvector.png b/docs/images/message_storage_bitvector.png new file mode 100644 index 0000000000..ef23514f97 Binary files /dev/null and b/docs/images/message_storage_bitvector.png differ diff --git a/e2e/.gitignore b/e2e/.gitignore new file mode 100644 index 0000000000..849ddff3b7 --- /dev/null +++ b/e2e/.gitignore @@ -0,0 +1 @@ +dist/ diff --git a/e2e/.load-test.mocharc.json b/e2e/.load-test.mocharc.json new file mode 100644 index 0000000000..2b0dede211 --- /dev/null +++ b/e2e/.load-test.mocharc.json @@ -0,0 +1,9 @@ +{ + "exit": true, + "extension": ["ts"], + "parallel": false, + "require": ["scaffolding/globalHooks.ts", "scaffolding/rootHooks.ts", "scaffolding/extrinsicHelpers.ts"], + "import": "tsx/esm", + "spec": ["./load-tests/**/*.test.ts"], + "timeout": 60000 +} diff --git a/e2e/.mocharc.json b/e2e/.mocharc.json new file mode 100644 index 0000000000..f7579529a5 --- /dev/null +++ b/e2e/.mocharc.json @@ -0,0 +1,10 @@ +{ + "exit": true, + "fullTrace": true, + "extension": ["ts"], + "parallel": true, + "require": ["scaffolding/globalHooks.ts", "scaffolding/rootHooks.ts", "scaffolding/extrinsicHelpers.ts"], + "import": "tsx/esm", + "spec": ["./{,!(node_modules|load-tests)/**}/*.test.ts"], + "timeout": 20000 +} diff --git a/e2e/.node-version b/e2e/.node-version new file mode 100644 index 0000000000..87834047a6 --- /dev/null +++ b/e2e/.node-version @@ -0,0 +1 @@ +20.12.2 diff --git a/e2e/.prettierignore b/e2e/.prettierignore new file mode 100644 index 0000000000..e00e777008 --- /dev/null +++ b/e2e/.prettierignore @@ -0,0 +1,11 @@ +# package.json is formatted by package managers, so we ignore it here +package.json +package-lock.json +build/* +dist/* +coverage/* +multimodules/* +/*.d.ts +/*.map +/*.js +**/*.md diff --git a/e2e/.prettierrc.json b/e2e/.prettierrc.json new file mode 100644 index 0000000000..cd87a91cb1 --- /dev/null +++ b/e2e/.prettierrc.json @@ -0,0 +1,8 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false, + "printWidth": 120 +} diff --git a/e2e/.relay-chain-all.mocharc.json b/e2e/.relay-chain-all.mocharc.json new file mode 100644 index 0000000000..8e5cbe9d96 --- /dev/null +++ b/e2e/.relay-chain-all.mocharc.json @@ -0,0 +1,10 @@ +{ + "exit": true, + "fullTrace": true, + "extension": ["ts"], + "parallel": true, + "require": ["scaffolding/globalHooks.ts", "scaffolding/rootHooks.ts", "scaffolding/extrinsicHelpers.ts"], + "import": "tsx/esm", + "spec": ["./{,!(node_modules|load-tests)/**}/*.test.ts"], + "timeout": 300000 +} diff --git a/e2e/.relay-chain.mocharc.json b/e2e/.relay-chain.mocharc.json new file mode 100644 index 0000000000..e15a8be02e --- /dev/null +++ b/e2e/.relay-chain.mocharc.json @@ -0,0 +1,8 @@ +{ + "exit": true, + "fullTrace": true, + "extension": ["ts"], + "require": ["scaffolding/rootHooks.ts", "scaffolding/extrinsicHelpers.ts"], + "import": "tsx/esm", + "timeout": 300000 +} diff --git a/e2e/.tool-versions b/e2e/.tool-versions new file mode 100644 index 0000000000..42738c54c9 --- /dev/null +++ b/e2e/.tool-versions @@ -0,0 +1 @@ +nodejs 22.12.0 diff --git a/e2e/README.md b/e2e/README.md new file mode 100644 index 0000000000..31c7638427 --- /dev/null +++ b/e2e/README.md @@ -0,0 +1,140 @@ +Running E2E Tests +========================= + +To run all tests (and automatically start up a Frequency node): + +`make e2e-tests` + +To run all tests (after starting up a Frequency node): + +`npm run test` + +To run an individual test (after starting up a Frequency node): + +Note: this is for the "createMsa" tests + +`npm run test:serial -- --grep createMsa` + +See below for running load tests and relay chain tests. + +Waiting for Finalization +============================ + +Some actions require waiting for finalization before the next action can happen. + +Example: Funding a key that will then take an action that uses that funding. + +While sometimes this is not needed, it creates a race condition and sometimes the transaction pool will reject the +second transaction as it is unfunded. + +The transaction pool doesn't know when two transactions are dependent if they are not from the same account with the +same nonce. + +Make sure to wait for finalization before attempting the next dependent transaction. + +Notes on E2E Testing +============================ + +1. Avoid using anonymous arrow functions for test blocks (`describe`, `it`, `before`, etc). +Though technically legal, it's discouraged in Mocha. See [here](https://mochajs.org/#arrow-functions) for details. +2. Avoid using the standard Substrate dev accounts ('//Alice', '//Bob', etc) for running tests. It causes interference +when multiple test suites are running in parallel, or against the same Frequency chain. Instead, create a new account & MSA +for each test and fund it from one of the well-known dev accounts. There are helper functions to assist in this, like so: +``` +/* In suite initialization */ +const keypair = createAndFundAccount(); // Creates keypair and transfers existential deposit into it. +await ExtrinsicHelper.createMsa(keypair).fundAndSend(); // see below for more details +``` +3. There are two types of error that can result from a call to an extrinsic using polkadot.js. The first is an `RpcError` +thrown due to some fundamental failure. The second is an `ExtrinsicFailed` event present in the returned event stream. The +extrinsic helper library parses the event stream and converts a `DispatchError` present in the stream into a thrown `EventError`. +Extrinsics which fail and include an `ExtrinsicFailed` event in the stream should also have a `DispatchError` present, and hence +it is not necessary to look for the `ExtrinsicFailed` event, but simply to expect the extrinsic call to throw (rejected Promise) +or not. +4. There are 2 environment variables that can be set: + `VERBOSE_TESTS`: 'true' or '1' enables verbose logging in tests using the `log()` function + `WS_PROVIDER_URL`: allows override of the default Frequency URL (localhost) +5. ExtrinsicHelpers: this is a static class that is initialized by the root hooks. Each helper method returns an Extrinsic object +with the following methods: + - getEstimatedTxFee(): Get payment info for the extrinsic call represented by the current object + - fundOperation(): Call getEstimatedTxFee() to estimate fee, and transfer tokens into the current account from one of the pre-funded dev accounts + - signAndSend(): Sign & submit the extrinsic call represented by the current object to the chain + - fundAndSend(): Combines fundOperation() and signAndSend() +6. Expiration block numbers + Rather than hard-coding block number expirations into test cases, it's better to query the last block in the chain for the current + block number & then add or subtract as the use case dictates. + + EXAMPLE: + ``` + const payload = { + authorizedMsaId: providerId, + schemaIds: [schemaId], + expiration: (await ExtrinsicHelper.getLastBlock()).block.header.number.toNumber() + 5, + } + ``` +7. Extrinsic helper methods & returned events +Many of the extrinsic helper methods pass an event type to the underlying Extrinsic object that can be used to parse the targeted event type +from the resulting stream and return it specifically. The `Extrinsic::signAndSend()` method returns an object of `{ target, eventMap }` where +`target` will be the parsed target event *if present*. The `eventMap` is a map of with the keys being `paletteName.eventName`. +A special key "defaultEvent" is added to also contain the target event, if present. +Events may be used with type guards to access the event-specific structure. Event types are in the `ApiRx.events..*` structure, and can be +accessed like so: + ``` + const extrinsic = ExtrinsicHelper.createMsa(keypair); + const { target: targetEvent, eventMap } = await extrinsic.fundAndSend(); + if (targetEvent) { + const msaId = targetEvent.data.msaId; + } + // OR null coalescing + const maybeMsaId = targetEvent?.data.msaId; + + // OR Throw unless defined + const throwIfNotMsaId = targetEvent!.data.msaId; + ``` + +Load Testing +================== +Load tests are located in the `load-tests/` directory. +The tests in that folder are NOT run with a normal test run. +It is configured to run in manual sealing mode only. To run the tests, do the following: + +``` +make e2e-tests-load +``` + +That make command does approximately the following: + +1. Start the chain in manual sealing mode +``` +make start-manual +``` + +2. Run tests +``` +cd e2e +npm run test:load +``` + +Relay Chain Testing +================== +There are a few tweaks to running the tests against the relay chain. + +1. The funding for the tests can be in a separate command +2. The tests can be run entirely separately + +Run the tests all in parallel +``` +npm run test:relay +``` + +Just do the funding +``` +npm run test:relay-funding +``` + +Run just one test +``` +npm run test:relay-single +``` + +See `.github/workflows/e2e-testnet.yml` for how it works in CI diff --git a/e2e/capacity/capacityFail.test.ts b/e2e/capacity/capacityFail.test.ts new file mode 100644 index 0000000000..f7efb715dd --- /dev/null +++ b/e2e/capacity/capacityFail.test.ts @@ -0,0 +1,233 @@ +import '@frequency-chain/api-augment'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { Bytes, u64, u16 } from '@polkadot/types'; +import assert from 'assert'; +import { AddKeyData, ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { + createKeys, + createAndFundKeypair, + createMsaAndProvider, + generateDelegationPayload, + getBlockNumber, + signPayloadSr25519, + stakeToProvider, + generateAddKeyPayload, + CENTS, + DOLLARS, + getOrCreateGraphChangeSchema, + getTestHandle, + assertAddNewKey, +} from '../scaffolding/helpers'; +import { getFundingSource } from '../scaffolding/funding'; +import { getUnifiedPublicKey } from '@frequency-chain/ethereum-utils'; + +const FUNDS_AMOUNT: bigint = 50n * DOLLARS; +const fundingSource = getFundingSource(import.meta.url); + +describe('Capacity Transaction Failures', function () { + describe('pay_with_capacity', function () { + describe('when caller does not have a Capacity account', function () { + let delegatorKeys: KeyringPair; + let delegatorProviderId: u64; + let schemaId: u16; + + beforeEach(async function () { + // Create and fund a keypair with EXISTENTIAL_DEPOSIT + // Use this keypair for delegator operations + delegatorKeys = createKeys('OtherProviderKeys'); + delegatorProviderId = await createMsaAndProvider(fundingSource, delegatorKeys, 'Delegator', FUNDS_AMOUNT); + schemaId = new u16(ExtrinsicHelper.api.registry, 0); + }); + + describe('but has an MSA account that has not been registered as a Provider', function () { + it('fails to pay for a transaction', async function () { + // Create a keypair with msaId, but no provider + const noProviderKeys = await createAndFundKeypair(fundingSource, FUNDS_AMOUNT, 'NoProviderKeys'); + + const createMsaOp = ExtrinsicHelper.createMsa(noProviderKeys); + + const { target: msaCreatedEvent } = await createMsaOp.fundAndSend(fundingSource); + assert.notEqual(msaCreatedEvent, undefined, 'should have returned MsaCreated event'); + + // When a user is not a registered provider and attempts to pay with Capacity, + // it should error with InvalidTransaction::Payment, which is a 1010 error, Inability to pay some fees. + const payload = await generateDelegationPayload({ + authorizedMsaId: delegatorProviderId, + schemaIds: [schemaId], + }); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + const grantDelegationOp = ExtrinsicHelper.grantDelegation( + delegatorKeys, + noProviderKeys, + signPayloadSr25519(delegatorKeys, addProviderData), + payload + ); + + await assert.rejects(grantDelegationOp.payWithCapacity('current'), { + name: 'RpcError', + message: '1010: Invalid Transaction: Inability to pay some fees , e.g. account balance too low', + }); + }); + }); + + describe('and does not have an MSA account associated to signing keys', function () { + it('fails to pay for a transaction', async function () { + const emptyKeys = await createAndFundKeypair(fundingSource, 50_000_000n); + + const payload = await generateDelegationPayload({ + authorizedMsaId: delegatorProviderId, + schemaIds: [schemaId], + }); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + const grantDelegationOp = ExtrinsicHelper.grantDelegation( + delegatorKeys, + emptyKeys, + signPayloadSr25519(delegatorKeys, addProviderData), + payload + ); + + await assert.rejects(grantDelegationOp.payWithCapacity('current'), { + name: 'RpcError', + message: '1010: Invalid Transaction: Custom error: 1', + }); + }); + }); + }); + + describe('when caller has a Capacity account', function () { + let schemaId: u16; + const amountStaked = 3n * DOLLARS; + + before(async function () { + // Create schemas for testing with Grant Delegation to test pay_with_capacity + schemaId = await getOrCreateGraphChangeSchema(fundingSource); + assert.notEqual(schemaId, undefined, 'setup should populate schemaId'); + }); + + it('fails when a provider makes an eligible extrinsic call using non-funded control key', async function () { + const capacityKeys = createKeys('CapacityKeysNSF'); + const capacityProvider = await createMsaAndProvider(fundingSource, capacityKeys, 'CapProvNSF', FUNDS_AMOUNT); + // this will first fund 'capacityKeys' before staking + await assert.doesNotReject(stakeToProvider(fundingSource, fundingSource, capacityProvider, amountStaked)); + + // As current owner, add a new set of control keys that do not have a balance. + const newControlKeypair = createKeys('NewKeyNoBalance'); + const newPublicKey = getUnifiedPublicKey(newControlKeypair); + const addKeyPayload: AddKeyData = await generateAddKeyPayload({ + msaId: capacityProvider, + newPublicKey: newPublicKey, + }); + await assertAddNewKey(capacityKeys, addKeyPayload, newControlKeypair); + + // attempt a capacity transaction using the new unfunded key: claimHandle + const handle = getTestHandle(); + const expiration = (await getBlockNumber()) + 10; + const handle_vec = new Bytes(ExtrinsicHelper.api.registry, handle); + const handlePayload = { + baseHandle: handle_vec, + expiration: expiration, + }; + const claimHandlePayload = ExtrinsicHelper.api.registry.createType( + 'CommonPrimitivesHandlesClaimHandlePayload', + handlePayload + ); + const claimHandle = ExtrinsicHelper.claimHandle(newControlKeypair, claimHandlePayload); + await assert.rejects(claimHandle.payWithCapacity('current'), { + name: 'RpcError', + message: '1010: Invalid Transaction: Inability to pay some fees , e.g. account balance too low', + }); + }); + + // When a user attempts to pay for a non-capacity transaction with Capacity, + // it should error and drop the transaction from the transaction-pool. + it('fails to pay with Capacity for a non-capacity transaction', async function () { + const capacityKeys = createKeys('CapacityKeys'); + const capacityProvider = await createMsaAndProvider( + fundingSource, + capacityKeys, + 'CapacityProvider', + FUNDS_AMOUNT + ); + const nonCapacityTxn = ExtrinsicHelper.stake(capacityKeys, capacityProvider, 1n * CENTS); + await assert.rejects(nonCapacityTxn.payWithCapacity('current'), { + name: 'RpcError', + message: '1010: Invalid Transaction: Custom error: 0', + }); + }); + + // When a user does not have enough capacity to pay for the transaction fee + // and is NOT eligible to replenish Capacity, it should error and be dropped + // from the transaction pool. + it('fails to pay for a transaction with empty capacity', async function () { + const noCapacityKeys = createKeys('noCapacityKeys'); + const noCapacityProvider = await createMsaAndProvider( + fundingSource, + noCapacityKeys, + 'NoCapProvider', + undefined, + false + ); + + const delegatorKeys = createKeys('delegatorKeys'); + + const payload = await generateDelegationPayload({ + authorizedMsaId: noCapacityProvider, + schemaIds: [schemaId], + }); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + const grantDelegationOp = ExtrinsicHelper.createSponsoredAccountWithDelegation( + delegatorKeys, + noCapacityKeys, + signPayloadSr25519(noCapacityKeys, addProviderData), + payload + ); + + await assert.rejects(grantDelegationOp.payWithCapacity('current'), { + name: 'RpcError', + message: '1010: Invalid Transaction: Inability to pay some fees , e.g. account balance too low', + }); + }); + + // *All keys should have at least an EXISTENTIAL_DEPOSIT = 1M. + it('fails to pay for transaction when key does has not met the min deposit', async function () { + const capacityKeys = createKeys('CapKeysUnder'); + const capacityProvider = await createMsaAndProvider(fundingSource, capacityKeys, 'CapProvUnder', FUNDS_AMOUNT); + const noTokensKeys = createKeys('noTokensKeys'); + const delegatorKeys = createKeys('delegatorKeys'); + + await assert.doesNotReject(stakeToProvider(fundingSource, fundingSource, capacityProvider, 1n * DOLLARS)); + + // Add new key + const newKeyPayload: AddKeyData = await generateAddKeyPayload({ + msaId: new u64(ExtrinsicHelper.api.registry, capacityProvider), + newPublicKey: getUnifiedPublicKey(noTokensKeys), + }); + const addKeyData = ExtrinsicHelper.api.registry.createType('PalletMsaAddKeyData', newKeyPayload); + + const ownerSig = signPayloadSr25519(capacityKeys, addKeyData); + const newSig = signPayloadSr25519(noTokensKeys, addKeyData); + const addPublicKeyOp = ExtrinsicHelper.addPublicKeyToMsa(capacityKeys, ownerSig, newSig, newKeyPayload); + + const { target: publicKeyEvent } = await addPublicKeyOp.fundAndSend(fundingSource); + assert.notEqual(publicKeyEvent, undefined, 'should have added public key'); + + const payload = await generateDelegationPayload({ + authorizedMsaId: capacityProvider, + schemaIds: [schemaId], + }); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + const grantDelegationOp = ExtrinsicHelper.createSponsoredAccountWithDelegation( + delegatorKeys, + noTokensKeys, + signPayloadSr25519(delegatorKeys, addProviderData), + payload + ); + + await assert.rejects(grantDelegationOp.payWithCapacity('current'), { + name: 'RpcError', + message: '1010: Invalid Transaction: Inability to pay some fees , e.g. account balance too low', + }); + }); + }); + }); +}); diff --git a/e2e/capacity/capacity_rpc.test.ts b/e2e/capacity/capacity_rpc.test.ts new file mode 100644 index 0000000000..8ca47c76ec --- /dev/null +++ b/e2e/capacity/capacity_rpc.test.ts @@ -0,0 +1,133 @@ +import '@frequency-chain/api-augment'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { u64, u16 } from '@polkadot/types'; +import assert from 'assert'; +import { AddProviderPayload, ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { + createKeys, + createMsaAndProvider, + generateDelegationPayload, + signPayloadSr25519, + DOLLARS, + getOrCreateGraphChangeSchema, +} from '../scaffolding/helpers'; +import { FeeDetails } from '@polkadot/types/interfaces'; +import { getFundingSource } from '../scaffolding/funding'; +import { getUnifiedPublicKey } from '@frequency-chain/ethereum-utils'; + +const FUNDS_AMOUNT: bigint = 50n * DOLLARS; +const fundingSource = getFundingSource(import.meta.url); + +describe('Capacity RPC', function () { + let capacityProviderKeys: KeyringPair; + let capacityProvider: u64; + let schemaId: u16; + let defaultPayload: AddProviderPayload; + + // Because this is testing non-executing code, we can do this beforeAll instead of beforeEach + before(async function () { + // Create schemas for testing with Grant Delegation to test pay_with_capacity + schemaId = await getOrCreateGraphChangeSchema(fundingSource); + assert.notEqual(schemaId, undefined, 'setup should populate schemaId'); + capacityProviderKeys = createKeys('CapacityProviderKeys'); + capacityProvider = await createMsaAndProvider( + fundingSource, + capacityProviderKeys, + 'CapacityProvider', + FUNDS_AMOUNT + ); + defaultPayload = { + authorizedMsaId: capacityProvider, + schemaIds: [schemaId], + }; + }); + + it('Returns `FeeDetails` when requesting capacity cost of a transaction', async function () { + const addProviderPayload = await generateDelegationPayload({ ...defaultPayload }); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', addProviderPayload); + const delegatorKeys = createKeys('delegatorKeys'); + const call = ExtrinsicHelper.api.tx.msa.createSponsoredAccountWithDelegation( + getUnifiedPublicKey(delegatorKeys), + signPayloadSr25519(delegatorKeys, addProviderData), + addProviderPayload + ); + + // Actual weights and fee + const { + weight: { refTime, proofSize }, + } = await ExtrinsicHelper.apiPromise.call.transactionPaymentApi.queryInfo(call.toU8a(), call.length); + // Why does it need to be call.toU8a() above instead of just call or call.toHex()? + // https://github.com/polkadot-js/apps/issues/10994 + + const weightFee = await ExtrinsicHelper.apiPromise.call.transactionPaymentApi.queryWeightToFee({ + refTime, + proofSize, + }); + + const feeDetails: FeeDetails = await ExtrinsicHelper.apiPromise.rpc.frequencyTxPayment.computeCapacityFeeDetails( + call.toHex(), + null + ); + assert.notEqual(feeDetails, undefined, 'should have returned a feeDetails'); + assert.notEqual(feeDetails.inclusionFee, undefined, 'should have returned a partialFee'); + assert(feeDetails.inclusionFee.isSome, 'should have returned a partialFee'); + const { baseFee, lenFee, adjustedWeightFee } = feeDetails.inclusionFee.toJSON() as any; + const baseFeeSnapshot = 124103; + assert( + Math.abs(baseFee - baseFeeSnapshot) < 50_000, + 'The base fee appears to be wrong or have changed more than expected' + ); + assert(Math.abs(lenFee - 1170000) < 100, 'The len fee appears to be wrong or have changed more than expected'); + // This is comparing stable weight, which has no impact from targeted_fee_adjustment, with actual weights. + assert( + Math.abs(adjustedWeightFee - weightFee.toNumber()) < 50_000, + 'The adjusted weight fee appears to be wrong or have changed more than expected' + ); + }); + + it('Returns `FeeDetails` when requesting capacity cost of a transaction when wrapped in payWithCapacity', async function () { + const addProviderPayload = await generateDelegationPayload({ ...defaultPayload }); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', addProviderPayload); + const delegatorKeys = createKeys('delegatorKeys'); + const insideTx = ExtrinsicHelper.api.tx.msa.createSponsoredAccountWithDelegation( + getUnifiedPublicKey(delegatorKeys), + signPayloadSr25519(delegatorKeys, addProviderData), + addProviderPayload + ); + const tx = ExtrinsicHelper.api.tx.frequencyTxPayment.payWithCapacity(insideTx); + const feeDetails: FeeDetails = await ExtrinsicHelper.apiPromise.rpc.frequencyTxPayment.computeCapacityFeeDetails( + tx.toHex(), + null + ); + assert.notEqual(feeDetails, undefined, 'should have returned a feeDetails'); + assert.notEqual(feeDetails.inclusionFee, undefined, 'should have returned a partialFee'); + assert(feeDetails.inclusionFee.isSome, 'should have returned a partialFee'); + const { baseFee, lenFee, adjustedWeightFee } = feeDetails.inclusionFee.toJSON() as any; + + // payWithCapacity costs will fluctuate, so just checking that they are valid positive numbers + assert(baseFee > 1, 'The base fee appears to be wrong.'); + assert(lenFee > 1, 'The len fee appears to be wrong.'); + assert(adjustedWeightFee > 1, 'The adjusted weight fee appears to be wrong'); + }); + + it('Returns nothing when requesting capacity cost of a non-capacity transaction', async function () { + const tx = ExtrinsicHelper.api.tx.msa.retireMsa(); + const feeDetails: FeeDetails = await ExtrinsicHelper.apiPromise.rpc.frequencyTxPayment.computeCapacityFeeDetails( + tx.toHex(), + null + ); + assert.notEqual(feeDetails, undefined, 'should have returned a feeDetails'); + assert(feeDetails.inclusionFee.isNone, 'should have returned None for the inclusionFee'); + }); + + it('Returns nothing when requesting pay with capacity call with a non-capacity transaction', async function () { + const insideTx = ExtrinsicHelper.api.tx.msa.retireMsa(); + const tx = ExtrinsicHelper.api.tx.frequencyTxPayment.payWithCapacity(insideTx); + const feeDetails: FeeDetails = await ExtrinsicHelper.apiPromise.rpc.frequencyTxPayment.computeCapacityFeeDetails( + tx.toHex(), + null + ); + assert.notEqual(feeDetails, undefined, 'should have returned a feeDetails'); + assert(feeDetails.inclusionFee.isNone, 'should have returned None for the inclusionFee'); + }); +}); diff --git a/e2e/capacity/change_staking_target.test.ts b/e2e/capacity/change_staking_target.test.ts new file mode 100644 index 0000000000..95549edf17 --- /dev/null +++ b/e2e/capacity/change_staking_target.test.ts @@ -0,0 +1,49 @@ +import '@frequency-chain/api-augment'; +import assert from 'assert'; +import { ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { getFundingSource } from '../scaffolding/funding'; +import { + createKeys, + createMsaAndProvider, + stakeToProvider, + CENTS, + DOLLARS, + createProviderKeysAndId, +} from '../scaffolding/helpers'; + +const fundingSource = getFundingSource(import.meta.url); + +describe('Capacity: change_staking_target', function () { + const tokenMinStake: bigint = 1n * CENTS; + + it('successfully stake tokens to a provider', async function () { + const providerBalance = 2n * DOLLARS; + const stakeKeys = createKeys('staker'); + + // Setup + const [oldProvider, [_bar, newProvider]] = await Promise.all([ + createMsaAndProvider(fundingSource, stakeKeys, 'Provider1', providerBalance), + createProviderKeysAndId(fundingSource, providerBalance), + ]); + + // Stake + await assert.doesNotReject(stakeToProvider(fundingSource, stakeKeys, oldProvider, tokenMinStake * 3n)); + + // Change Stake + const call = ExtrinsicHelper.changeStakingTarget(stakeKeys, oldProvider, newProvider, tokenMinStake); + const events = await call.signAndSend(); + assert.notEqual(events, undefined); + }); + + // not intended to be exhaustive, just check one error case + it("fails if 'to' is not a Provider", async function () { + const providerBalance = 2n * DOLLARS; + const stakeKeys = createKeys('staker'); + const oldProvider = await createMsaAndProvider(fundingSource, stakeKeys, 'Provider2', providerBalance); + + await assert.doesNotReject(stakeToProvider(fundingSource, stakeKeys, oldProvider, tokenMinStake * 6n)); + const notAProvider = 9999; + const call = ExtrinsicHelper.changeStakingTarget(stakeKeys, oldProvider, notAProvider, tokenMinStake * 2n); + await assert.rejects(call.signAndSend(), { name: 'InvalidTarget' }); + }); +}); diff --git a/e2e/capacity/list_unclaimed_rewards.test.ts b/e2e/capacity/list_unclaimed_rewards.test.ts new file mode 100644 index 0000000000..24c350388b --- /dev/null +++ b/e2e/capacity/list_unclaimed_rewards.test.ts @@ -0,0 +1,76 @@ +import '@frequency-chain/api-augment'; +import assert from 'assert'; +import { ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { getFundingSource } from '../scaffolding/funding'; +import { + createKeys, + createMsaAndProvider, + DOLLARS, + createAndFundKeypair, + boostProvider, + getNextRewardEraBlock, +} from '../scaffolding/helpers'; +import { isTestnet } from '../scaffolding/env'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { getUnifiedAddress } from '@frequency-chain/ethereum-utils'; + +const fundingSource = getFundingSource(import.meta.url); + +describe('Capacity: list_unclaimed_rewards', function () { + const providerBalance = 2n * DOLLARS; + + const setUpForBoosting = async (boosterName: string, providerName: string): Promise<[number, KeyringPair]> => { + const booster = await createAndFundKeypair(fundingSource, 5n * DOLLARS, boosterName); + const providerKeys = createKeys(providerName); + const provider = await createMsaAndProvider(fundingSource, providerKeys, providerName, providerBalance); + await assert.doesNotReject(boostProvider(fundingSource, booster, provider, 1n * DOLLARS)); + + return [provider.toNumber(), booster]; + }; + + it('can be called', async function () { + const [_provider, booster] = await setUpForBoosting('booster1', 'provider1'); + const result = await ExtrinsicHelper.apiPromise.call.capacityRuntimeApi.listUnclaimedRewards( + getUnifiedAddress(booster) + ); + assert.equal(result.length, 0, `result should have been empty but had ${result.length} items`); + }); + + it('returns correct rewards after enough eras have passed', async function () { + // this will be too long if run against testnet + if (isTestnet()) this.skip(); + + const [_provider, booster] = await setUpForBoosting('booster2', 'provider2'); + + // Move out of the era we boosted inside of + await ExtrinsicHelper.runToBlock(await getNextRewardEraBlock()); + // Have three eras where we get rewards + await ExtrinsicHelper.runToBlock(await getNextRewardEraBlock()); + await ExtrinsicHelper.runToBlock(await getNextRewardEraBlock()); + await ExtrinsicHelper.runToBlock(await getNextRewardEraBlock()); + + const result = await ExtrinsicHelper.apiPromise.call.capacityRuntimeApi.listUnclaimedRewards( + getUnifiedAddress(booster) + ); + + assert(result.length >= 4, `Length should be >= 4 but is ${result.length}`); + + // This is the era we first boosted in, shouldn't have any rewards + assert.equal(result[0].stakedAmount.toHuman(), '100,000,000'); + assert.equal(result[0].eligibleAmount.toHuman(), '0'); + assert.equal(result[0].earnedAmount.toHuman(), '0'); + + // Boosted entire eras, should have rewards + assert.equal(result[1].stakedAmount.toHuman(), '100,000,000'); + assert.equal(result[1].eligibleAmount.toHuman(), '100,000,000'); + assert.equal(result[1].earnedAmount.toHuman(), '575,000'); + + assert.equal(result[2].stakedAmount.toHuman(), '100,000,000'); + assert.equal(result[2].eligibleAmount.toHuman(), '100,000,000'); + assert.equal(result[2].earnedAmount.toHuman(), '575,000'); + + assert.equal(result[3].stakedAmount.toHuman(), '100,000,000'); + assert.equal(result[3].eligibleAmount.toHuman(), '100,000,000'); + assert.equal(result[3].earnedAmount.toHuman(), '575,000'); + }); +}); diff --git a/e2e/capacity/provider_boost.test.ts b/e2e/capacity/provider_boost.test.ts new file mode 100644 index 0000000000..0e22b50320 --- /dev/null +++ b/e2e/capacity/provider_boost.test.ts @@ -0,0 +1,51 @@ +import '@frequency-chain/api-augment'; +import assert from 'assert'; +import { getFundingSource } from '../scaffolding/funding'; +import { + createKeys, + createMsaAndProvider, + CENTS, + DOLLARS, + createAndFundKeypair, + boostProvider, + stakeToProvider, +} from '../scaffolding/helpers'; + +const fundingSource = getFundingSource(import.meta.url); +const tokenMinStake: bigint = 1n * CENTS; + +describe('Capacity: provider_boost extrinsic', function () { + const providerBalance = 2n * DOLLARS; + + it('An account can do a simple provider boost call', async function () { + const stakeKeys = createKeys('booster'); + const provider = await createMsaAndProvider(fundingSource, stakeKeys, 'Provider1', providerBalance); + const booster = await createAndFundKeypair(fundingSource, 5n * DOLLARS, 'booster'); + await assert.doesNotReject(boostProvider(fundingSource, booster, provider, 1n * DOLLARS)); + }); + + it('fails when staker is a Maximized Capacity staker', async function () { + const stakeKeys = createKeys('booster'); + const provider = await createMsaAndProvider(fundingSource, stakeKeys, 'Provider1', providerBalance); + await assert.doesNotReject(stakeToProvider(fundingSource, stakeKeys, provider, tokenMinStake)); + await assert.rejects(boostProvider(fundingSource, stakeKeys, provider, tokenMinStake), { + name: 'CannotChangeStakingType', + }); + }); + + it("fails when staker doesn't have enough token", async function () { + const stakeKeys = createKeys('booster'); + const provider = await createMsaAndProvider(fundingSource, stakeKeys, 'Provider1', providerBalance); + const booster = await createAndFundKeypair(fundingSource, 1n * DOLLARS, 'booster'); + await assert.rejects(boostProvider(booster, booster, provider, 1n * DOLLARS), { name: 'BalanceTooLowtoStake' }); + }); + + it('staker can boost multiple times', async function () { + const stakeKeys = createKeys('booster'); + const provider = await createMsaAndProvider(fundingSource, stakeKeys, 'Provider1', providerBalance); + const booster = await createAndFundKeypair(fundingSource, 10n * DOLLARS, 'booster'); + await assert.doesNotReject(boostProvider(fundingSource, booster, provider, 1n * DOLLARS)); + await assert.doesNotReject(boostProvider(fundingSource, booster, provider, 1n * DOLLARS)); + await assert.doesNotReject(boostProvider(fundingSource, booster, provider, 1n * DOLLARS)); + }); +}); diff --git a/e2e/capacity/replenishment.test.ts b/e2e/capacity/replenishment.test.ts new file mode 100644 index 0000000000..82d823d14d --- /dev/null +++ b/e2e/capacity/replenishment.test.ts @@ -0,0 +1,166 @@ +import '@frequency-chain/api-augment'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { u16, u64 } from '@polkadot/types'; +import assert from 'assert'; +import { Extrinsic, ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { + createKeys, + createMsaAndProvider, + stakeToProvider, + fundKeypair, + getNextEpochBlock, + getOrCreateGraphChangeSchema, + CENTS, + DOLLARS, + getTokenPerCapacity, + assertEvent, + getCapacity, + getNonce, +} from '../scaffolding/helpers'; +import { getFundingSource } from '../scaffolding/funding'; +import { isTestnet } from '../scaffolding/env'; + +const fundingSource = getFundingSource(import.meta.url); + +describe('Capacity Replenishment Testing: ', function () { + async function createAndStakeProvider(name: string, stakingAmount: bigint): Promise<[KeyringPair, u64]> { + const stakeKeys = createKeys(name); + const stakeProviderId = await createMsaAndProvider(fundingSource, stakeKeys, 'ReplProv', 50n * DOLLARS); + assert.notEqual(stakeProviderId, 0, 'stakeProviderId should not be zero'); + await stakeToProvider(fundingSource, stakeKeys, stakeProviderId, stakingAmount); + return [stakeKeys, stakeProviderId]; + } + + before(async function () { + // Replenishment requires the epoch length to be shorter than testnet (set in globalHooks) + if (isTestnet()) this.skip(); + }); + + describe('Capacity is replenished', function () { + it('after new epoch', async function () { + const schemaId = await getOrCreateGraphChangeSchema(fundingSource); + const totalStaked = 3n * DOLLARS; + const expectedCapacity = totalStaked / getTokenPerCapacity(); + const [stakeKeys, stakeProviderId] = await createAndStakeProvider('ReplFirst', totalStaked); + const payload = JSON.stringify({ changeType: 1, fromId: 1, objectId: 2 }); + const call = ExtrinsicHelper.addOnChainMessage(stakeKeys, schemaId, payload); + let nonce = await getNonce(stakeKeys); + + // confirm that we start with a full tank + await ExtrinsicHelper.runToBlock(await getNextEpochBlock()); + let remainingCapacity = (await getCapacity(stakeProviderId)).remainingCapacity.toBigInt(); + assert.equal(expectedCapacity, remainingCapacity, 'Our expected capacity from staking is wrong'); + + await call.payWithCapacity(nonce++); + remainingCapacity = (await getCapacity(stakeProviderId)).remainingCapacity.toBigInt(); + assert(expectedCapacity > remainingCapacity, 'Our remaining capacity is much higher than expected.'); + const capacityPerCall = expectedCapacity - remainingCapacity; + assert( + remainingCapacity > capacityPerCall, + `Not enough capacity! needed: ${capacityPerCall}, remaining: ${remainingCapacity}` + ); + + // one more txn to deplete capacity more so this current remaining is different from when + // we submitted the first message. + await call.payWithCapacity(nonce++); + await ExtrinsicHelper.runToBlock(await getNextEpochBlock()); + + // this should cause capacity to be refilled and then deducted by the cost of one message. + await call.payWithCapacity(nonce++); + const newRemainingCapacity = (await getCapacity(stakeProviderId)).remainingCapacity.toBigInt(); + + // this should be the same as after sending the first message, since it is the first message after + // the epoch. + assert.equal(remainingCapacity, newRemainingCapacity); + }); + }); + + function assert_capacity_call_fails_with_balance_too_low(call: Extrinsic) { + return assert.rejects(call.payWithCapacity('current'), { + name: 'RpcError', + message: /1010.+account balance too low/, + }); + } + + describe('Capacity is not replenished', function () { + it('if out of capacity and last_replenished_at is <= current epoch', async function () { + const schemaId = await getOrCreateGraphChangeSchema(fundingSource); + const [stakeKeys, stakeProviderId] = await createAndStakeProvider('NoSend', 150n * CENTS); + const payload = JSON.stringify({ changeType: 1, fromId: 1, objectId: 2 }); + const call = ExtrinsicHelper.addOnChainMessage(stakeKeys, schemaId, payload); + + // run until we can't afford to send another message. + await drainCapacity(call, stakeProviderId); + + await assert_capacity_call_fails_with_balance_too_low(call); + }); + }); + + describe("Regression test: when user attempts to stake tiny amounts before provider's first message of an epoch,", function () { + it('provider is still replenished and can send a message', async function () { + const providerStakeAmt = 3n * DOLLARS; + const userStakeAmt = 100n * CENTS; + const userIncrementAmt = 1n * CENTS; + + const [stakeKeys, stakeProviderId] = await createAndStakeProvider('TinyStake', providerStakeAmt); + // new user/msa stakes to provider + const userKeys = createKeys('userKeys'); + await fundKeypair(fundingSource, userKeys, 5n * DOLLARS); + const { eventMap } = await ExtrinsicHelper.stake(userKeys, stakeProviderId, userStakeAmt).signAndSend(); + assertEvent(eventMap, 'system.ExtrinsicSuccess'); + + const schemaId = await getOrCreateGraphChangeSchema(fundingSource); + const payload = JSON.stringify({ changeType: 1, fromId: 1, objectId: 2 }); + const call = ExtrinsicHelper.addOnChainMessage(stakeKeys, schemaId, payload); + + const expectedCapacity = (providerStakeAmt + userStakeAmt) / getTokenPerCapacity(); + const totalCapacity = (await getCapacity(stakeProviderId)).totalCapacityIssued.toBigInt(); + assert.equal(expectedCapacity, totalCapacity, `expected ${expectedCapacity} capacity, got ${totalCapacity}`); + + const callCapacityCost = await drainCapacity(call, stakeProviderId); + + // ensure provider can't send a message; they are out of capacity + await assert_capacity_call_fails_with_balance_too_low(call); + + // go to next epoch + const nextEpochBlock = await getNextEpochBlock(); + await ExtrinsicHelper.runToBlock(nextEpochBlock); + + let remainingCapacity = (await getCapacity(stakeProviderId)).remainingCapacity.toBigInt(); + // double check we still do not have enough to send another message + assert(remainingCapacity < callCapacityCost); + + // user stakes tiny additional amount + const { eventMap: hasStaked } = await ExtrinsicHelper.stake( + userKeys, + stakeProviderId, + userIncrementAmt + ).signAndSend(); + assertEvent(hasStaked, 'capacity.Staked'); + + // provider can now send a message + const { eventMap: hasCapacityWithdrawn } = await call.payWithCapacity(); + assertEvent(hasCapacityWithdrawn, 'capacity.CapacityWithdrawn'); + + remainingCapacity = (await getCapacity(stakeProviderId)).remainingCapacity.toBigInt(); + // show that capacity was replenished and then fee deducted. + const approxExpected = providerStakeAmt + userStakeAmt + userIncrementAmt - callCapacityCost; + assert(remainingCapacity <= approxExpected, `remainingCapacity = ${remainingCapacity.toString()}`); + }); + }); +}); + +async function drainCapacity(call, stakeProviderId: u64): Promise { + const totalCapacity = (await getCapacity(stakeProviderId)).totalCapacityIssued.toBigInt(); + let nonce = await getNonce(call.keys); + // Figure out the cost per call in Capacity + const { eventMap } = await call.payWithCapacity(nonce++); + + const callCapacityCost = eventMap['capacity.CapacityWithdrawn'].data.amount.toBigInt(); + + // // Run them out of funds, but don't flake just because it landed near an epoch boundary. + await ExtrinsicHelper.runToBlock(await getNextEpochBlock()); + const callsBeforeEmpty = Math.floor(Number(totalCapacity) / Number(callCapacityCost)); + await Promise.all(Array.from({ length: callsBeforeEmpty }, (_, k) => call.payWithCapacity(nonce + k))); + return callCapacityCost; +} diff --git a/e2e/capacity/staking.test.ts b/e2e/capacity/staking.test.ts new file mode 100644 index 0000000000..bcd0358a27 --- /dev/null +++ b/e2e/capacity/staking.test.ts @@ -0,0 +1,341 @@ +import '@frequency-chain/api-augment'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { u64 } from '@polkadot/types'; +import assert from 'assert'; +import { ExtrinsicHelper, ReleaseSchedule } from '../scaffolding/extrinsicHelpers'; +import { + createKeys, + createMsaAndProvider, + stakeToProvider, + getNextEpochBlock, + TEST_EPOCH_LENGTH, + CENTS, + DOLLARS, + createAndFundKeypair, + getCapacity, + createMsa, + calculateReleaseSchedule, + getSpendableBalance, +} from '../scaffolding/helpers'; +import { isDev } from '../scaffolding/env'; +import { getFundingSource } from '../scaffolding/funding'; +import { BigInt } from '@polkadot/x-bigint'; + +const accountBalance: bigint = 2n * DOLLARS; +const tokenMinStake: bigint = 1n * CENTS; +const capacityMin: bigint = tokenMinStake / 50n; +const fundingSource = getFundingSource(import.meta.url); + +describe('Capacity Staking Tests', function () { + // The frozen balance is initialized and tracked throughout the staking end to end tests + // to accommodate for the fact that withdrawing unstaked token tests are not executed + // against a relay chain. Since the length of time to wait for an epoch period to roll over could + // potentially be hours / days, that test is skipped. Therefore, we must track the frozen balance + // so that tests against it can pass regardless if withdrawing (the frozen balance decreasing) + // has happened or not. + let trackedFrozenBalance: bigint = 0n; + + describe('scenario: user staking, unstaking, and withdraw-unstaked', function () { + let stakeKeys: KeyringPair; + let stakeProviderId: u64; + + before(async function () { + stakeKeys = createKeys('StakeKeys'); + stakeProviderId = await createMsaAndProvider(fundingSource, stakeKeys, 'StakeProvider', accountBalance); + }); + + it('successfully stakes the minimum amount', async function () { + await assert.doesNotReject(stakeToProvider(fundingSource, stakeKeys, stakeProviderId, tokenMinStake)); + + // Confirm that the tokens were locked in the stakeKeys account using the query API + const stakedAcctInfo = await ExtrinsicHelper.getAccountInfo(stakeKeys); + assert.equal( + stakedAcctInfo.data.frozen, + tokenMinStake, + `expected ${tokenMinStake} frozen balance, got ${stakedAcctInfo.data.frozen}` + ); + + // Confirm that the capacity was added to the stakeProviderId using the query API + const capacityStaked = await getCapacity(stakeProviderId); + assert.equal( + capacityStaked.remainingCapacity, + capacityMin, + `expected capacityLedger.remainingCapacity = 1CENT, got ${capacityStaked.remainingCapacity}` + ); + assert.equal( + capacityStaked.totalTokensStaked, + tokenMinStake, + `expected capacityLedger.totalTokensStaked = 1CENT, got ${capacityStaked.totalTokensStaked}` + ); + assert.equal( + capacityStaked.totalCapacityIssued, + capacityMin, + `expected capacityLedger.totalCapacityIssued = 1CENT, got ${capacityStaked.totalCapacityIssued}` + ); + trackedFrozenBalance += tokenMinStake; + }); + + it('successfully unstakes the minimum amount', async function () { + const stakeObj = ExtrinsicHelper.unstake(stakeKeys, stakeProviderId, tokenMinStake); + const { target: unStakeEvent } = await stakeObj.signAndSend(); + assert.notEqual(unStakeEvent, undefined, 'should return an UnStaked event'); + assert.equal( + unStakeEvent?.data.capacity, + capacityMin, + 'should return an UnStaked event with 1 CENT reduced capacity' + ); + + // Confirm that the tokens were unstaked in the stakeProviderId account using the query API + const capacityStaked = await getCapacity(stakeProviderId); + assert.equal(capacityStaked.remainingCapacity, 0, 'should return a capacityLedger with 0 remainingCapacity'); + assert.equal(capacityStaked.totalTokensStaked, 0, 'should return a capacityLedger with 0 total tokens staked'); + assert.equal(capacityStaked.totalCapacityIssued, 0, 'should return a capacityLedger with 0 capacity issued'); + }); + + it('successfully withdraws the unstaked amount', async function () { + // Withdrawing unstaked token will only be executed against a Frequency + // node built for development due to the long length of time it would + // take to wait for an epoch period to roll over. + if (!isDev()) this.skip(); + + // Mine enough blocks to pass the unstake period = CapacityUnstakingThawPeriod = 2 epochs + const newEpochBlock = await getNextEpochBlock(); + await ExtrinsicHelper.runToBlock(newEpochBlock + TEST_EPOCH_LENGTH + 1); + + const withdrawObj = ExtrinsicHelper.withdrawUnstaked(stakeKeys); + const { target: withdrawEvent } = await withdrawObj.signAndSend(); + assert.notEqual(withdrawEvent, undefined, 'should return a StakeWithdrawn event'); + + const amount = withdrawEvent!.data.amount; + assert.equal(amount, tokenMinStake, 'should return a StakeWithdrawn event with 1M amount'); + + // Confirm that the tokens were unstaked in the stakeKeys account using the query API + const unStakedAcctInfo = await ExtrinsicHelper.getAccountInfo(stakeKeys); + assert.equal(unStakedAcctInfo.data.frozen, 0, 'should return an account with 0 frozen balance'); + + // Confirm that the staked capacity was removed from the stakeProviderId account using the query API + const capacityStaked = await getCapacity(stakeProviderId); + assert.equal(capacityStaked.remainingCapacity, 0, 'should return a capacityLedger with 0 remainingCapacity'); + assert.equal(capacityStaked.totalTokensStaked, 0, 'should return a capacityLedger with 0 total tokens staked'); + assert.equal(capacityStaked.totalCapacityIssued, 0, 'should return a capacityLedger with 0 capacity issued'); + + trackedFrozenBalance -= tokenMinStake; + }); + + describe('when staking to multiple times', function () { + describe('and targeting same provider', function () { + it('successfully increases the amount that was targeted to provider', async function () { + await assert.doesNotReject(stakeToProvider(fundingSource, stakeKeys, stakeProviderId, tokenMinStake)); + + const capacityStaked = await getCapacity(stakeProviderId); + assert.equal( + capacityStaked.remainingCapacity, + capacityMin, + `expected capacityStaked.remainingCapacity = ${capacityMin}, got ${capacityStaked.remainingCapacity}` + ); + assert.equal( + capacityStaked.totalTokensStaked, + tokenMinStake, + `expected capacityStaked.totalTokensStaked = ${tokenMinStake}, got ${capacityStaked.totalTokensStaked}` + ); + assert.equal( + capacityStaked.totalCapacityIssued, + capacityMin, + `expected capacityStaked.totalCapacityIssued = ${capacityMin}, got ${capacityStaked.totalCapacityIssued}` + ); + trackedFrozenBalance += tokenMinStake; + + // Confirm that the tokens were staked in the stakeKeys account using the query API + const stakedAcctInfo = await ExtrinsicHelper.getAccountInfo(stakeKeys); + + const increasedFrozen: bigint = stakedAcctInfo.data.frozen.toBigInt(); + + assert.equal( + increasedFrozen, + trackedFrozenBalance, + `expected frozen=${tokenMinStake}, got ${increasedFrozen}` + ); + }); + }); + + describe('and targeting different provider', function () { + let otherProviderKeys: KeyringPair; + let otherProviderId: u64; + + before(async function () { + otherProviderKeys = createKeys('OtherProviderKeys'); + otherProviderId = await createMsaAndProvider(fundingSource, otherProviderKeys, 'OtherProvider'); + }); + + it('does not change other targets amounts', async function () { + // Increase stake by 1 cent to a different target. + await assert.doesNotReject(stakeToProvider(fundingSource, stakeKeys, otherProviderId, 1n * CENTS)); + const expectedCapacity = CENTS / 50n; + + // Confirm that the staked capacity of the original stakeProviderId account is unchanged + // stakeProviderId should still have 1M from first test case in this describe. + // otherProvider should now have 1M + const origStaked = await getCapacity(stakeProviderId); + assert.equal( + origStaked.remainingCapacity, + expectedCapacity, + `expected 1/50 CENT remaining capacity, got ${origStaked.remainingCapacity}` + ); + assert.equal( + origStaked.totalTokensStaked, + 1n * CENTS, + `expected 1 CENT staked, got ${origStaked.totalTokensStaked}` + ); + assert.equal( + origStaked.totalCapacityIssued, + expectedCapacity, + `expected 1/50 CENT capacity issued, got ${origStaked.totalCapacityIssued}` + ); + + // Confirm that the staked capacity was added to the otherProviderId account using the query API + const capacityStaked = await getCapacity(otherProviderId); + assert.equal( + capacityStaked.remainingCapacity, + expectedCapacity, + 'should return a capacityLedger with 1/50M remainingCapacity' + ); + assert.equal( + capacityStaked.totalTokensStaked, + 1n * CENTS, + 'should return a capacityLedger with 1M total tokens staked' + ); + assert.equal( + capacityStaked.totalCapacityIssued, + expectedCapacity, + 'should return a capacityLedger with 1/50M capacity issued' + ); + }); + + it('successfully increases the amount that was targeted to provider from different accounts', async function () { + // Create a new account + const additionalKeys = await createAndFundKeypair(fundingSource, accountBalance); + const currentStaked = await getCapacity(stakeProviderId); + + await assert.doesNotReject(stakeToProvider(fundingSource, additionalKeys, stakeProviderId, tokenMinStake)); + + const capacityStaked = await getCapacity(stakeProviderId); + assert.equal( + capacityStaked.remainingCapacity, + currentStaked.remainingCapacity.toBigInt() + capacityMin, + `should return a capacityLedger with ${capacityMin} remaining, got ${capacityStaked.remainingCapacity}` + ); + assert.equal( + capacityStaked.totalTokensStaked, + currentStaked.totalTokensStaked.toBigInt() + tokenMinStake, + `should return a capacityLedger with ${tokenMinStake} total staked, got: ${capacityStaked.totalTokensStaked}` + ); + assert.equal( + capacityStaked.totalCapacityIssued, + currentStaked.totalCapacityIssued.toBigInt() + capacityMin, + `should return a capacityLedger with ${capacityMin} total issued, got ${capacityStaked.totalCapacityIssued}` + ); + + // Confirm that the tokens were not staked in the stakeKeys account using the query API + const stakedAcctInfo = await ExtrinsicHelper.getAccountInfo(additionalKeys); + + const increasedFrozen: bigint = stakedAcctInfo.data.frozen.toBigInt(); + + assert.equal(increasedFrozen, tokenMinStake, `expected frozen=${tokenMinStake}, got ${increasedFrozen}`); + }); + }); + }); + }); + + describe('when staking and targeting an InvalidTarget', function () { + it('fails to stake', async function () { + const stakeAmount = 10n * CENTS; + const [notProviderMsaId, stakeKeys] = await createMsa(fundingSource, 10n * CENTS); + + const failStakeObj = ExtrinsicHelper.stake(stakeKeys, notProviderMsaId, stakeAmount); + await assert.rejects(failStakeObj.signAndSend(), { name: 'InvalidTarget' }); + }); + }); + + describe('when attempting to stake below the minimum staking requirements', function () { + it('should fail to stake for StakingAmountBelowMinimum', async function () { + const stakingKeys = createKeys('stakingKeys'); + const providerId = await createMsaAndProvider(fundingSource, stakingKeys, 'stakingKeys', 150n * CENTS); + const stakeAmount = 1500n; + + const failStakeObj = ExtrinsicHelper.stake(stakingKeys, providerId, stakeAmount); + await assert.rejects(failStakeObj.signAndSend(), { name: 'StakingAmountBelowMinimum' }); + }); + }); + + describe('when attempting to stake a zero amount', function () { + it('fails to stake and errors ZeroAmountNotAllowed', async function () { + const stakingKeys = createKeys('stakingKeys'); + const providerId = await createMsaAndProvider(fundingSource, stakingKeys, 'stakingKeys', 10n * CENTS); + + const failStakeObj = ExtrinsicHelper.stake(stakingKeys, providerId, 0); + await assert.rejects(failStakeObj.signAndSend(), { name: 'ZeroAmountNotAllowed' }); + }); + }); + + describe('when staking an amount and account balance is too low', function () { + it('fails to stake and errors BalanceTooLowtoStake', async function () { + const stakingKeys = createKeys('stakingKeys'); + const providerId = await createMsaAndProvider(fundingSource, stakingKeys, 'stakingKeys', 1n * DOLLARS); + const stakingAmount = 2n * DOLLARS; + + const failStakeObj = ExtrinsicHelper.stake(stakingKeys, providerId, stakingAmount); + await assert.rejects(failStakeObj.signAndSend(), { name: 'BalanceTooLowtoStake' }); + }); + + it('fails to stake when stake is >= than stakable_amount + minimum token balance', async function () { + const stakingKeys = createKeys('stakingKeys'); + const providerId = await createMsaAndProvider(fundingSource, stakingKeys, 'stakingKeys', 1n * DOLLARS); + const stakingAmount = 1n * DOLLARS; + + const failStakeObj = ExtrinsicHelper.stake(stakingKeys, providerId, stakingAmount); + await assert.rejects(failStakeObj.signAndSend(), { name: 'BalanceTooLowtoStake' }); + }); + }); + + describe('staking when there are other freezes on the balance', function () { + let vesterKeys: KeyringPair; + let providerKeys: KeyringPair; + let providerId: u64; + + async function assertSpendable(keys: KeyringPair, amount: bigint) { + const spendable = await getSpendableBalance(keys); + assert.equal(spendable, amount, `Expected spendable ${amount}, got ${spendable}`); + } + + async function assertFrozen(keys: KeyringPair, amount: bigint) { + const accountInfo = await ExtrinsicHelper.getAccountInfo(keys); + assert.equal(accountInfo.data.frozen, amount, `Expected frozen ${amount}, got ${accountInfo.data.frozen}`); + } + + before(async function () { + vesterKeys = await createAndFundKeypair(fundingSource, 50_000_000n); + await assertSpendable(vesterKeys, 49n * BigInt(CENTS)); // less ED + await assertFrozen(vesterKeys, 0n); + providerKeys = await createAndFundKeypair(fundingSource, 10n * CENTS); + providerId = await createMsaAndProvider(fundingSource, providerKeys, 'Provider Whale', 10n * DOLLARS); + }); + + it('succeeds when there is a time-release freeze', async function () { + const vestingAmount = 100n * DOLLARS; + const schedule: ReleaseSchedule = calculateReleaseSchedule(vestingAmount); + + const vestedTransferTx = ExtrinsicHelper.timeReleaseTransfer(fundingSource, vesterKeys, schedule); + + await assert.doesNotReject(vestedTransferTx.signAndSend(undefined, undefined, false)); + await assertFrozen(vesterKeys, 100n * DOLLARS); + + await assert.doesNotReject( + ExtrinsicHelper.stake(vesterKeys, providerId, 80n * DOLLARS).signAndSend(undefined, undefined, false) + ); + + const spendable = await getSpendableBalance(vesterKeys); + // after txn fees + assert(spendable > 47n * CENTS, `Expected spendable > 47 CENTS, got ${spendable}`); + }); + }); +}); diff --git a/e2e/capacity/transactions.test.ts b/e2e/capacity/transactions.test.ts new file mode 100644 index 0000000000..7d2dd2ee83 --- /dev/null +++ b/e2e/capacity/transactions.test.ts @@ -0,0 +1,459 @@ +import '@frequency-chain/api-augment'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { Bytes, u64, u16 } from '@polkadot/types'; +import assert from 'assert'; +import { AddKeyData, EventMap, ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { base64 } from 'multiformats/bases/base64'; +import { SchemaId } from '@frequency-chain/api-augment/interfaces'; +import { + createKeys, + createAndFundKeypair, + createMsaAndProvider, + generateDelegationPayload, + getBlockNumber, + signPayloadSr25519, + stakeToProvider, + fundKeypair, + generateAddKeyPayload, + CENTS, + DOLLARS, + getOrCreateGraphChangeSchema, + getTokenPerCapacity, + assertEvent, + getCurrentItemizedHash, + getCurrentPaginatedHash, + generateItemizedSignaturePayload, + getOrCreateDummySchema, + getOrCreateAvroChatMessageItemizedSchema, + getOrCreateParquetBroadcastSchema, + getOrCreateAvroChatMessagePaginatedSchema, + generatePaginatedUpsertSignaturePayloadV2, + generatePaginatedDeleteSignaturePayloadV2, + getCapacity, + getTestHandle, + assertHasMessage, + createMsa, +} from '../scaffolding/helpers'; +import { ipfsCid } from '../messages/ipfs'; +import { getFundingSource } from '../scaffolding/funding'; +import { getUnifiedPublicKey } from '@frequency-chain/ethereum-utils'; + +const FUNDS_AMOUNT: bigint = 50n * DOLLARS; +const fundingSource = getFundingSource(import.meta.url); + +describe('Capacity Transactions', function () { + describe('pay_with_capacity', function () { + describe('when caller has a Capacity account', function () { + let schemaId: u16; + const amountStaked = 3n * DOLLARS; + + before(async function () { + // Create schemas for testing with Grant Delegation to test pay_with_capacity + schemaId = await getOrCreateGraphChangeSchema(fundingSource); + assert.notEqual(schemaId, undefined, 'setup should populate schemaId'); + }); + + describe('when capacity eligible transaction is from the msa pallet', function () { + let capacityKeys: KeyringPair; + let capacityProvider: u64; + let delegatorKeys: KeyringPair; + let payload: any = {}; + const stakedForMsa = 15n * DOLLARS; + + before(async function () { + capacityKeys = createKeys('CapacityKeys'); + capacityProvider = await createMsaAndProvider(fundingSource, capacityKeys, 'CapacityProvider', FUNDS_AMOUNT); + // Stake enough for all transactions + await assert.doesNotReject(stakeToProvider(fundingSource, fundingSource, capacityProvider, stakedForMsa)); + }); + + beforeEach(async function () { + delegatorKeys = createKeys('delegatorKeys'); + payload = await generateDelegationPayload({ + authorizedMsaId: capacityProvider, + schemaIds: [schemaId], + }); + }); + + it('successfully pays with Capacity for eligible transaction - addPublicKeytoMSA', async function () { + const authorizedKeys: KeyringPair[] = []; + const defaultPayload: AddKeyData = {}; + + authorizedKeys.push(await createAndFundKeypair(fundingSource, 50_000_000n)); + defaultPayload.msaId = capacityProvider; + defaultPayload.newPublicKey = getUnifiedPublicKey(authorizedKeys[0]); + + const payload = await generateAddKeyPayload(defaultPayload); + const addKeyData = ExtrinsicHelper.api.registry.createType('PalletMsaAddKeyData', payload); + const ownerSig = signPayloadSr25519(capacityKeys, addKeyData); + const newSig = signPayloadSr25519(authorizedKeys[0], addKeyData); + const addPublicKeyOp = ExtrinsicHelper.addPublicKeyToMsa(capacityKeys, ownerSig, newSig, payload); + + const { eventMap } = await addPublicKeyOp.payWithCapacity(); + assertEvent(eventMap, 'system.ExtrinsicSuccess'); + assertEvent(eventMap, 'capacity.CapacityWithdrawn'); + assertEvent(eventMap, 'msa.PublicKeyAdded'); + }); + + it('successfully pays with Capacity for eligible transaction - createSponsoredAccountWithDelegation', async function () { + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + const call = ExtrinsicHelper.createSponsoredAccountWithDelegation( + delegatorKeys, + capacityKeys, + signPayloadSr25519(delegatorKeys, addProviderData), + payload + ); + const { eventMap } = await call.payWithCapacity(); + assertEvent(eventMap, 'system.ExtrinsicSuccess'); + assertEvent(eventMap, 'capacity.CapacityWithdrawn'); + assertEvent(eventMap, 'msa.DelegationGranted'); + }); + + it('successfully pays with Capacity for eligible transaction - grantDelegation', async function () { + await fundKeypair(fundingSource, delegatorKeys, 10n * CENTS); + + let { eventMap } = await ExtrinsicHelper.createMsa(delegatorKeys).signAndSend(); + assertEvent(eventMap, 'msa.MsaCreated'); + + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + const grantDelegationOp = ExtrinsicHelper.grantDelegation( + delegatorKeys, + capacityKeys, + signPayloadSr25519(delegatorKeys, addProviderData), + payload + ); + + ({ eventMap } = await grantDelegationOp.payWithCapacity()); + + // Check for remaining capacity to be reduced + const capacityStaked = await getCapacity(capacityProvider); + + assertEvent(eventMap, 'system.ExtrinsicSuccess'); + assertEvent(eventMap, 'capacity.CapacityWithdrawn'); + assertEvent(eventMap, 'msa.DelegationGranted'); + + const fee = ExtrinsicHelper.getCapacityFee(eventMap); + // assuming no other txns charged against capacity (b/c of async tests), this should be the maximum amount left. + const maximumExpectedRemaining = stakedForMsa / getTokenPerCapacity() - fee; + + const remaining = capacityStaked.remainingCapacity.toBigInt(); + assert(remaining <= maximumExpectedRemaining, `expected ${remaining} to be <= ${maximumExpectedRemaining}`); + assert.equal(capacityStaked.totalTokensStaked.toBigInt(), stakedForMsa); + assert.equal(capacityStaked.totalCapacityIssued.toBigInt(), stakedForMsa / getTokenPerCapacity()); + }); + }); + + describe('when capacity eligible transaction is from the messages pallet', function () { + let starting_block: number; + let capacityKeys: KeyringPair; + let capacityProvider: u64; + + before(async function () { + capacityKeys = createKeys('CapacityKeys'); + capacityProvider = await createMsaAndProvider(fundingSource, capacityKeys, 'CapacityProvider', FUNDS_AMOUNT); + const numberOfTests = BigInt(this.test!.parent!.tests.length); + // Stake the amount for each test + await assert.doesNotReject( + stakeToProvider(fundingSource, fundingSource, capacityProvider, numberOfTests * amountStaked) + ); + }); + + beforeEach(async function () { + starting_block = (await ExtrinsicHelper.apiPromise.rpc.chain.getHeader()).number.toNumber(); + }); + + it('successfully pays with Capacity for eligible transaction - addIPFSMessage', async function () { + const schemaId = await getOrCreateParquetBroadcastSchema(fundingSource); + const ipfs_payload_data = 'This is a test of Frequency.'; + const ipfs_payload_len = ipfs_payload_data.length + 1; + const ipfs_cid_64 = (await ipfsCid(ipfs_payload_data, './e2e_test.txt')).toString(base64); + const call = ExtrinsicHelper.addIPFSMessage(capacityKeys, schemaId, ipfs_cid_64, ipfs_payload_len); + + const { eventMap } = await call.payWithCapacity(); + assertEvent(eventMap, 'capacity.CapacityWithdrawn'); + // messages.MessagesInBlock in block might not be on this transaction if there are others + assertEvent(eventMap, 'system.ExtrinsicSuccess'); + }); + + it('successfully pays with Capacity for eligible transaction - addOnchainMessage', async function () { + // Create a dummy on-chain schema + const dummySchemaId: u16 = await getOrCreateDummySchema(fundingSource); + const call = ExtrinsicHelper.addOnChainMessage(capacityKeys, dummySchemaId, '0xdeadbeef'); + const { eventMap } = await call.payWithCapacity(); + assertEvent(eventMap, 'capacity.CapacityWithdrawn'); + // messages.MessagesInBlock in block might not be on this transaction if there are others + assertEvent(eventMap, 'system.ExtrinsicSuccess'); + const get = await ExtrinsicHelper.apiPromise.rpc.messages.getBySchemaId(dummySchemaId, { + from_block: starting_block, + from_index: 0, + to_block: starting_block + 999, + page_size: 999, + }); + assertHasMessage(get, (x) => x.payload.isSome && x.payload.toString() === '0xdeadbeef'); + }); + }); + + describe('when capacity eligible transaction is from the StatefulStorage pallet', function () { + let delegatorKeys: KeyringPair; + let delegatorProviderId: u64; + let capacityKeys: KeyringPair; + let capacityProvider: u64; + + before(async function () { + capacityKeys = createKeys('CapacityKeys'); + capacityProvider = await createMsaAndProvider(fundingSource, capacityKeys, 'CapacityProvider', FUNDS_AMOUNT); + // Create a MSA for the delegator + [delegatorProviderId, delegatorKeys] = await createMsa(fundingSource); + assert.notEqual(delegatorKeys, undefined, 'setup should populate delegator_key'); + assert.notEqual(delegatorProviderId, undefined, 'setup should populate msa_id'); + + // Stake the amount for each test + const numberOfTests = BigInt(this.test!.parent!.tests.length); + await assert.doesNotReject( + stakeToProvider(fundingSource, fundingSource, capacityProvider, numberOfTests * amountStaked) + ); + }); + + it('successfully pays with Capacity for eligible transaction - applyItemActions', async function () { + // Create a schema to allow delete actions + const schemaId_deletable: SchemaId = await getOrCreateAvroChatMessageItemizedSchema(fundingSource); + + // Add and update actions + const payload_1 = new Bytes(ExtrinsicHelper.api.registry, 'Hello World From Frequency'); + const add_action = { + Add: payload_1, + }; + + const payload_2 = new Bytes(ExtrinsicHelper.api.registry, 'Hello World Again From Frequency'); + const update_action = { + Add: payload_2, + }; + + const target_hash = await getCurrentItemizedHash(capacityProvider, schemaId_deletable); + + const add_actions = [add_action, update_action]; + const call = ExtrinsicHelper.applyItemActions( + capacityKeys, + schemaId_deletable, + capacityProvider, + add_actions, + target_hash + ); + const { eventMap } = await call.payWithCapacity(); + assertEvent(eventMap, 'system.ExtrinsicSuccess'); + assertEvent(eventMap, 'capacity.CapacityWithdrawn'); + assertEvent(eventMap, 'statefulStorage.ItemizedPageUpdated'); + }); + + it('successfully pays with Capacity for eligible transaction - upsertPage; deletePage', async function () { + // Get a schema for Paginated PayloadLocation + schemaId = await getOrCreateAvroChatMessagePaginatedSchema(fundingSource); + const page_id = 0; + let target_hash = await getCurrentPaginatedHash(capacityProvider, schemaId, page_id); + + // Add and update actions + const payload_1 = new Bytes(ExtrinsicHelper.api.registry, 'Hello World From Frequency'); + const call = ExtrinsicHelper.upsertPage( + capacityKeys, + schemaId, + capacityProvider, + page_id, + payload_1, + target_hash + ); + const { eventMap } = await call.payWithCapacity(); + assertEvent(eventMap, 'system.ExtrinsicSuccess'); + assertEvent(eventMap, 'capacity.CapacityWithdrawn'); + assertEvent(eventMap, 'statefulStorage.PaginatedPageUpdated'); + + // Remove the page + target_hash = await getCurrentPaginatedHash(capacityProvider, schemaId, page_id); + const call2 = ExtrinsicHelper.removePage(capacityKeys, schemaId, capacityProvider, page_id, target_hash); + const { eventMap: eventMap2 } = await call2.payWithCapacity(); + assertEvent(eventMap2, 'system.ExtrinsicSuccess'); + assertEvent(eventMap2, 'capacity.CapacityWithdrawn'); + assertEvent(eventMap2, 'statefulStorage.PaginatedPageDeleted'); + }); + + it('successfully pays with Capacity for eligible transaction - applyItemActionsWithSignatureV2', async function () { + // Create a schema for Itemized PayloadLocation + const itemizedSchemaId: SchemaId = await getOrCreateAvroChatMessageItemizedSchema(fundingSource); + + // Add and update actions + const payload_1 = new Bytes(ExtrinsicHelper.api.registry, 'Hello World From Frequency'); + const add_action = { + Add: payload_1, + }; + + const payload_2 = new Bytes(ExtrinsicHelper.api.registry, 'Hello World Again From Frequency'); + const update_action = { + Add: payload_2, + }; + + const target_hash = await getCurrentItemizedHash(delegatorProviderId, itemizedSchemaId); + + const add_actions = [add_action, update_action]; + const payload = await generateItemizedSignaturePayload({ + targetHash: target_hash, + schemaId: itemizedSchemaId, + actions: add_actions, + }); + const itemizedPayloadData = ExtrinsicHelper.api.registry.createType( + 'PalletStatefulStorageItemizedSignaturePayloadV2', + payload + ); + const itemized_add_result_1 = ExtrinsicHelper.applyItemActionsWithSignatureV2( + delegatorKeys, + capacityKeys, + signPayloadSr25519(delegatorKeys, itemizedPayloadData), + payload + ); + const { target: pageUpdateEvent1, eventMap } = await itemized_add_result_1.payWithCapacity(); + assertEvent(eventMap, 'system.ExtrinsicSuccess'); + assertEvent(eventMap, 'capacity.CapacityWithdrawn'); + assert.notEqual( + pageUpdateEvent1, + undefined, + 'should have returned a PalletStatefulStorageItemizedActionApplied event' + ); + }); + + it('successfully pays with Capacity for eligible transaction - upsertPageWithSignatureV2; deletePageWithSignatureV2', async function () { + const paginatedSchemaId: SchemaId = await getOrCreateAvroChatMessagePaginatedSchema(fundingSource); + + const page_id = new u16(ExtrinsicHelper.api.registry, 1); + + // Add and update actions + let target_hash = await getCurrentPaginatedHash(delegatorProviderId, paginatedSchemaId, page_id.toNumber()); + const upsertPayload = await generatePaginatedUpsertSignaturePayloadV2({ + targetHash: target_hash, + schemaId: paginatedSchemaId, + pageId: page_id, + payload: new Bytes(ExtrinsicHelper.api.registry, 'Hello World From Frequency'), + }); + const upsertPayloadData = ExtrinsicHelper.api.registry.createType( + 'PalletStatefulStoragePaginatedUpsertSignaturePayloadV2', + upsertPayload + ); + const upsert_result = ExtrinsicHelper.upsertPageWithSignatureV2( + delegatorKeys, + capacityKeys, + signPayloadSr25519(delegatorKeys, upsertPayloadData), + upsertPayload + ); + const { target: pageUpdateEvent, eventMap: eventMap1 } = await upsert_result.payWithCapacity(); + assertEvent(eventMap1, 'system.ExtrinsicSuccess'); + assertEvent(eventMap1, 'capacity.CapacityWithdrawn'); + assert.notEqual( + pageUpdateEvent, + undefined, + 'should have returned a PalletStatefulStoragePaginatedPageUpdate event' + ); + + // Remove the page + target_hash = await getCurrentPaginatedHash(delegatorProviderId, paginatedSchemaId, page_id.toNumber()); + const deletePayload = await generatePaginatedDeleteSignaturePayloadV2({ + targetHash: target_hash, + schemaId: paginatedSchemaId, + pageId: page_id, + }); + const deletePayloadData = ExtrinsicHelper.api.registry.createType( + 'PalletStatefulStoragePaginatedDeleteSignaturePayloadV2', + deletePayload + ); + const remove_result = ExtrinsicHelper.deletePageWithSignatureV2( + delegatorKeys, + capacityKeys, + signPayloadSr25519(delegatorKeys, deletePayloadData), + deletePayload + ); + const { target: pageRemove, eventMap: eventMap2 } = await remove_result.payWithCapacity(); + assertEvent(eventMap2, 'system.ExtrinsicSuccess'); + assertEvent(eventMap2, 'capacity.CapacityWithdrawn'); + assert.notEqual(pageRemove, undefined, 'should have returned a event'); + + // no pages should exist + const result = await ExtrinsicHelper.getPaginatedStorage(delegatorProviderId, paginatedSchemaId); + assert.notEqual(result, undefined, 'should have returned a valid response'); + assert.equal(result.length, 0, 'should returned no paginated pages'); + }); + }); + + describe('when capacity eligible transaction is from the handles pallet', function () { + let capacityKeys: KeyringPair; + let capacityProvider: u64; + + before(async function () { + capacityKeys = createKeys('CapacityKeys'); + capacityProvider = await createMsaAndProvider(fundingSource, capacityKeys, 'CapacityProvider', FUNDS_AMOUNT); + }); + + it('successfully pays with Capacity for eligible transaction - claimHandle', async function () { + await assert.doesNotReject(stakeToProvider(fundingSource, fundingSource, capacityProvider, amountStaked)); + + const handle = getTestHandle(); + const expiration = (await getBlockNumber()) + 10; + const handle_vec = new Bytes(ExtrinsicHelper.api.registry, handle); + const handlePayload = { + baseHandle: handle_vec, + expiration: expiration, + }; + const claimHandlePayload = ExtrinsicHelper.api.registry.createType( + 'CommonPrimitivesHandlesClaimHandlePayload', + handlePayload + ); + const claimHandle = ExtrinsicHelper.claimHandle(capacityKeys, claimHandlePayload); + const { eventMap } = await claimHandle.payWithCapacity(); + assertEvent(eventMap, 'system.ExtrinsicSuccess'); + assertEvent(eventMap, 'capacity.CapacityWithdrawn'); + assertEvent(eventMap, 'handles.HandleClaimed'); + }); + }); + + describe('when capacity eligible transaction and balance less than ED', function () { + let capacityKeys: KeyringPair; + let capacityProvider: u64; + + before(async function () { + capacityKeys = createKeys('CapacityKeys'); + capacityProvider = await createMsaAndProvider(fundingSource, capacityKeys, 'CapacityProvider', FUNDS_AMOUNT); + }); + + it('successfully pays with Capacity for eligible transaction - claimHandle [available balance < ED]', async function () { + await assert.doesNotReject(stakeToProvider(fundingSource, capacityKeys, capacityProvider, amountStaked)); + // Empty the account to ensure the balance is less than ED + await ExtrinsicHelper.emptyAccount(capacityKeys, fundingSource).signAndSend(); + // Confirm that the available balance is less than ED + // The available balance is the free balance minus the frozen balance + const capacityAcctInfo = await ExtrinsicHelper.getAccountInfo(capacityKeys); + assert.equal(capacityAcctInfo.data.frozen.toBigInt(), amountStaked); + assert.equal(capacityAcctInfo.data.free.toBigInt(), amountStaked); + + // Confirm that a transfer fails because the available balance is 0 + const failTransferObj = ExtrinsicHelper.transferFunds(capacityKeys, fundingSource, 1n * CENTS); + assert.rejects(failTransferObj.signAndSend('current'), { + name: 'RpcError', + message: '1010: Invalid Transaction: Inability to pay some fees , e.g. account balance too low', + }); + + const handle = getTestHandle(); + const expiration = (await getBlockNumber()) + 10; + const handle_vec = new Bytes(ExtrinsicHelper.api.registry, handle); + const handlePayload = { + baseHandle: handle_vec, + expiration: expiration, + }; + const claimHandlePayload = ExtrinsicHelper.api.registry.createType( + 'CommonPrimitivesHandlesClaimHandlePayload', + handlePayload + ); + const claimHandle = ExtrinsicHelper.claimHandle(capacityKeys, claimHandlePayload); + const { eventMap } = await claimHandle.payWithCapacity(); + assertEvent(eventMap, 'system.ExtrinsicSuccess'); + assertEvent(eventMap, 'capacity.CapacityWithdrawn'); + assertEvent(eventMap, 'handles.HandleClaimed'); + }); + }); + }); + }); +}); diff --git a/e2e/capacity/transactionsBatch.test.ts b/e2e/capacity/transactionsBatch.test.ts new file mode 100644 index 0000000000..3dddadb7b8 --- /dev/null +++ b/e2e/capacity/transactionsBatch.test.ts @@ -0,0 +1,133 @@ +import '@frequency-chain/api-augment'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { Bytes, u64, u16 } from '@polkadot/types'; +import { u8aToHex } from '@polkadot/util/u8a/toHex'; +import { u8aWrapBytes } from '@polkadot/util'; +import assert from 'assert'; +import { AddProviderPayload, ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { + createKeys, + createMsaAndProvider, + generateDelegationPayload, + getBlockNumber, + signPayloadSr25519, + stakeToProvider, + DOLLARS, + getTestHandle, +} from '../scaffolding/helpers'; +import { getFundingSource } from '../scaffolding/funding'; +import { getUnifiedPublicKey } from '@frequency-chain/ethereum-utils'; + +const FUNDS_AMOUNT: bigint = 50n * DOLLARS; +const fundingSource = getFundingSource(import.meta.url); + +describe('Capacity Transactions Batch', function () { + describe('pay_with_capacity_batch_all', function () { + let capacityProviderKeys: KeyringPair; + let capacityProvider: u64; + let defaultPayload: AddProviderPayload; + const amountStaked = 9n * DOLLARS; + + beforeEach(async function () { + const schemaId: u16 = new u16(ExtrinsicHelper.api.registry, 1); + capacityProviderKeys = createKeys('CapacityProviderKeys'); + capacityProvider = await createMsaAndProvider( + fundingSource, + capacityProviderKeys, + 'CapacityProvider', + FUNDS_AMOUNT + ); + defaultPayload = { + authorizedMsaId: capacityProvider, + schemaIds: [schemaId], + }; + }); + + it('successfully pays with Capacity for a batch of eligible transactions - [createSponsoredAccountWithDelegation, claimHandle]', async function () { + await assert.doesNotReject(stakeToProvider(fundingSource, fundingSource, capacityProvider, amountStaked)); + + const addProviderPayload = await generateDelegationPayload({ ...defaultPayload }); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', addProviderPayload); + const delegatorKeys = createKeys('delegatorKeys'); + const createSponsoredAccountWithDelegation = ExtrinsicHelper.api.tx.msa.createSponsoredAccountWithDelegation( + getUnifiedPublicKey(delegatorKeys), + signPayloadSr25519(delegatorKeys, addProviderData), + addProviderPayload + ); + + const handle = getTestHandle(); + const handle_vec = new Bytes(ExtrinsicHelper.api.registry, handle); + const expiration = (await getBlockNumber()) + 5; + const handlePayload = { + baseHandle: handle_vec, + expiration: expiration, + }; + const claimHandlePayload: any = ExtrinsicHelper.api.registry.createType( + 'CommonPrimitivesHandlesClaimHandlePayload', + handlePayload + ); + const claimHandleProof = { + Sr25519: u8aToHex(delegatorKeys.sign(u8aWrapBytes(claimHandlePayload.toU8a()))), + }; + + const claimHandle = ExtrinsicHelper.api.tx.handles.claimHandle( + getUnifiedPublicKey(delegatorKeys), + claimHandleProof, + claimHandlePayload + ); + const calls = [createSponsoredAccountWithDelegation, claimHandle]; + + const payWithCapacityBatchAllOp = ExtrinsicHelper.payWithCapacityBatchAll(capacityProviderKeys, calls); + + const { target: batchCompletedEvent, eventMap } = await payWithCapacityBatchAllOp.signAndSend(); + + if (batchCompletedEvent && !ExtrinsicHelper.api.events.utility.BatchCompleted.is(batchCompletedEvent)) { + assert.fail('should return a BatchCompletedEvent'); + } + + assert.notEqual(eventMap['msa.DelegationGranted'], undefined, 'should have returned DelegationGranted event'); + assert.notEqual(eventMap['handles.HandleClaimed'], undefined, 'should have returned HandleClaimed event'); + }); + + it('batch fails if one transaction fails - [createSponsoredAccountWithDelegation, claimHandle]', async function () { + await assert.doesNotReject(stakeToProvider(fundingSource, fundingSource, capacityProvider, amountStaked)); + + const addProviderPayload = await generateDelegationPayload({ ...defaultPayload }); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', addProviderPayload); + const delegatorKeys = createKeys('delegatorKeys'); + const createSponsoredAccountWithDelegation = ExtrinsicHelper.api.tx.msa.createSponsoredAccountWithDelegation( + getUnifiedPublicKey(delegatorKeys), + signPayloadSr25519(delegatorKeys, addProviderData), + addProviderPayload + ); + + const handle = 'test_handle_that_exceeds_the_byte_limit'; + const handle_vec = new Bytes(ExtrinsicHelper.api.registry, handle); + const expiration = (await getBlockNumber()) + 5; + const handlePayload = { + baseHandle: handle_vec, + expiration: expiration, + }; + const claimHandlePayload: any = ExtrinsicHelper.api.registry.createType( + 'CommonPrimitivesHandlesClaimHandlePayload', + handlePayload + ); + const calimHandleProof = { + Sr25519: u8aToHex(delegatorKeys.sign(u8aWrapBytes(claimHandlePayload.toU8a()))), + }; + + const claimHandle = ExtrinsicHelper.api.tx.handles.claimHandle( + getUnifiedPublicKey(delegatorKeys), + calimHandleProof, + claimHandlePayload + ); + const calls = [createSponsoredAccountWithDelegation, claimHandle]; + + const payWithCapacityBatchAllOp = ExtrinsicHelper.payWithCapacityBatchAll(capacityProviderKeys, calls); + + await assert.rejects(payWithCapacityBatchAllOp.signAndSend(), { + name: 'InvalidHandleByteLength', + }); + }); + }); +}); diff --git a/e2e/capacity/unstaking.test.ts b/e2e/capacity/unstaking.test.ts new file mode 100644 index 0000000000..4bbfcc73cd --- /dev/null +++ b/e2e/capacity/unstaking.test.ts @@ -0,0 +1,54 @@ +import '@frequency-chain/api-augment'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { u64 } from '@polkadot/types'; +import assert from 'assert'; +import { ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { createKeys, createMsaAndProvider, CENTS, DOLLARS } from '../scaffolding/helpers'; +import { getFundingSource } from '../scaffolding/funding'; + +const accountBalance: bigint = 2n * DOLLARS; +const tokenMinStake: bigint = 1n * CENTS; +const fundingSource = getFundingSource(import.meta.url); + +describe('Capacity Unstaking Tests', function () { + describe('unstake()', function () { + let unstakeKeys: KeyringPair; + let providerId: u64; + + before(async function () { + const accountBalance: bigint = 100n * CENTS; + unstakeKeys = createKeys('stakingKeys'); + providerId = await createMsaAndProvider(fundingSource, unstakeKeys, 'stakingKeys', accountBalance); + }); + + describe('when attempting to unstake a Zero amount', function () { + it('errors with UnstakedAmountIsZero', async function () { + const failUnstakeObj = ExtrinsicHelper.unstake(unstakeKeys, providerId, 0); + await assert.rejects(failUnstakeObj.signAndSend(), { name: 'UnstakedAmountIsZero' }); + }); + }); + + describe('when account has not staked', function () { + it('errors with StakingAccountNotFound', async function () { + const failUnstakeObj = ExtrinsicHelper.unstake(unstakeKeys, providerId, tokenMinStake); + await assert.rejects(failUnstakeObj.signAndSend(), { name: 'NotAStakingAccount' }); + }); + }); + }); + + describe('withdraw_unstaked()', function () { + describe('when attempting to call withdrawUnstake before first calling unstake', function () { + it('errors with NoUnstakedTokensAvailable', async function () { + const stakingKeys: KeyringPair = createKeys('stakingKeys'); + const providerId: u64 = await createMsaAndProvider(fundingSource, stakingKeys, 'stakingKeys', accountBalance); + + const stakeObj = ExtrinsicHelper.stake(stakingKeys, providerId, tokenMinStake); + const { target: stakeEvent } = await stakeObj.signAndSend(); + assert.notEqual(stakeEvent, undefined, 'should return a Stake event'); + + const withdrawObj = ExtrinsicHelper.withdrawUnstaked(stakingKeys); + await assert.rejects(withdrawObj.signAndSend(), { name: 'NoUnstakedTokensAvailable' }); + }); + }); + }); +}); diff --git a/e2e/eslint.config.mjs b/e2e/eslint.config.mjs new file mode 100644 index 0000000000..cf90812a8f --- /dev/null +++ b/e2e/eslint.config.mjs @@ -0,0 +1,55 @@ +// @ts-check + +import eslint from '@eslint/js'; +import globals from 'globals'; +import tseslint from 'typescript-eslint'; +import mochaPlugin from 'eslint-plugin-mocha'; + +export default tseslint.config( + eslint.configs.recommended, + mochaPlugin.configs.recommended, + ...tseslint.configs.strict, + ...tseslint.configs.stylistic, + { + ignores: ['dist/'], + }, + { + languageOptions: { + globals: { ...globals.node }, + }, + rules: { + '@typescript-eslint/no-empty-interface': 'off', + '@typescript-eslint/no-unused-vars': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/no-inferrable-types': 'off', + '@typescript-eslint/no-extraneous-class': 'off', + semi: ['error', 'always'], + 'mocha/no-setup-in-describe': 'off', + 'no-use-before-define': 'off', + 'no-unused-vars': 'off', + 'no-var': 'error', + 'id-length': [ + 'error', + { + exceptionPatterns: ['[i-k]', 'e', 'c', 'x', 'y', 'r', 's', 'v', 'f', '_'], + properties: 'never', + }, + ], + 'allow-namespace': 'off', + 'no-restricted-syntax': [ + 'error', + { + message: + 'Direct usage of keyPair.address is not allowed in this file. please use getUnifiedAddress function.', + selector: 'MemberExpression[property.name="address"]', + }, + { + message: + 'Direct usage of keyPair.publicKey is not allowed in this file. please use getUnifiedPublicKey function', + selector: 'MemberExpression[property.name="publicKey"]', + }, + ], + }, + } +); diff --git a/e2e/handles/handles.test.ts b/e2e/handles/handles.test.ts new file mode 100644 index 0000000000..19a3b7921f --- /dev/null +++ b/e2e/handles/handles.test.ts @@ -0,0 +1,66 @@ +// Handles Basic test suite +import '@frequency-chain/api-augment'; +import assert from 'assert'; +import { CENTS, createMsa, DOLLARS, getTestHandle } from '../scaffolding/helpers'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { MessageSourceId } from '@frequency-chain/api-augment/interfaces'; +import { ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { Bytes } from '@polkadot/types'; +import { getBlockNumber } from '../scaffolding/helpers'; +import { hasRelayChain } from '../scaffolding/env'; +import { getFundingSource } from '../scaffolding/funding'; + +const fundingSource = getFundingSource(import.meta.url); +const expirationOffset = hasRelayChain() ? 4 : 100; + +describe('Handles: Claim and Retire', function () { + let msaId: MessageSourceId; + let msaOwnerKeys: KeyringPair; + + before(async function () { + // Create a MSA for the delegator + [msaId, msaOwnerKeys] = await createMsa(fundingSource, 50n * CENTS); + assert.notEqual(msaOwnerKeys, undefined, 'setup should populate delegator_key'); + assert.notEqual(msaId, undefined, 'setup should populate msaId'); + }); + + it('should be able to claim a handle', async function () { + const handle = getTestHandle('A-test'); + const currentBlock = await getBlockNumber(); + const handle_vec = new Bytes(ExtrinsicHelper.api.registry, handle); + const payload = { + baseHandle: handle_vec, + expiration: currentBlock + expirationOffset, + }; + const claimHandlePayload = ExtrinsicHelper.api.registry.createType( + 'CommonPrimitivesHandlesClaimHandlePayload', + payload + ); + const claimHandle = ExtrinsicHelper.claimHandle(msaOwnerKeys, claimHandlePayload); + const { target: event } = await claimHandle.fundAndSend(fundingSource); + assert.notEqual(event, undefined, 'claimHandle should return an event'); + assert.notEqual(event!.data.handle.toString(), '', 'claimHandle should emit a handle'); + }); + + it('should be able to retire a handle', async function () { + const handle_response = await ExtrinsicHelper.getHandleForMSA(msaId); + if (!handle_response.isSome) { + throw new Error('handle_response should be Some'); + } + const full_handle_state = handle_response.unwrap(); + const suffix_from_state = full_handle_state.suffix; + const suffix = suffix_from_state.toNumber(); + assert.notEqual(suffix, 0, 'suffix should not be 0'); + assert.notEqual(full_handle_state.canonical_base, undefined, 'canonical_base should not be undefined'); + assert.notEqual(full_handle_state.base_handle, undefined, 'base_handle should not be undefined'); + const currentBlock = await getBlockNumber(); + // Must be at least 6 > original expiration to make sure we get past the finalization + await ExtrinsicHelper.runToBlock(currentBlock + expirationOffset + 6); + + const retireHandle = ExtrinsicHelper.retireHandle(msaOwnerKeys); + const { target: event } = await retireHandle.signAndSend(); + assert.notEqual(event, undefined, 'retireHandle should return an event'); + const handle = event!.data.handle.toString(); + assert.notEqual(handle, '', 'retireHandle should return the correct handle'); + }); +}); diff --git a/e2e/handles/handlesAlt.test.ts b/e2e/handles/handlesAlt.test.ts new file mode 100644 index 0000000000..a64913fc8d --- /dev/null +++ b/e2e/handles/handlesAlt.test.ts @@ -0,0 +1,101 @@ +// Handles Alt test suite +import '@frequency-chain/api-augment'; +import assert from 'assert'; +import { CENTS, createMsa, getTestHandle } from '../scaffolding/helpers'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { MessageSourceId } from '@frequency-chain/api-augment/interfaces'; +import { ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { Bytes } from '@polkadot/types'; +import { getBlockNumber } from '../scaffolding/helpers'; +import { hasRelayChain } from '../scaffolding/env'; +import { getFundingSource } from '../scaffolding/funding'; + +const fundingSource = getFundingSource(import.meta.url); +const expirationOffset = hasRelayChain() ? 4 : 100; + +describe('Handles: Claim and Retire Alt', function () { + let msaId: MessageSourceId; + let msaOwnerKeys: KeyringPair; + + before(async function () { + // Create a MSA for the delegator + [msaId, msaOwnerKeys] = await createMsa(fundingSource, 50n * CENTS); + assert.notEqual(msaOwnerKeys, undefined, 'setup should populate delegator_key'); + assert.notEqual(msaId, undefined, 'setup should populate msaId'); + }); + + describe('Claim Handle with possible presumptive suffix/RPC test', function () { + it('should be able to claim a handle and check suffix (=suffix_assumed if available on chain)', async function () { + const handle = getTestHandle('B-test'); + const handle_bytes = new Bytes(ExtrinsicHelper.api.registry, handle); + /// Get presumptive suffix from chain (rpc) + const suffixes_response = await ExtrinsicHelper.getNextSuffixesForHandle(handle, 10); + const resp_base_handle = suffixes_response.base_handle.toString(); + assert.equal(resp_base_handle, handle, 'resp_base_handle should be equal to handle'); + const suffix_assumed = suffixes_response.suffixes[0]; + assert.notEqual(suffix_assumed, 0, 'suffix_assumed should not be 0'); + + const currentBlock = await getBlockNumber(); + /// Claim handle (extrinsic) + const payload_ext = { + baseHandle: handle_bytes, + expiration: currentBlock + expirationOffset, + }; + const claimHandlePayload = ExtrinsicHelper.api.registry.createType( + 'CommonPrimitivesHandlesClaimHandlePayload', + payload_ext + ); + const claimHandle = ExtrinsicHelper.claimHandle(msaOwnerKeys, claimHandlePayload); + const { target: event } = await claimHandle.fundAndSend(fundingSource); + assert.notEqual(event, undefined, 'claimHandle should return an event'); + const displayHandle = event!.data.handle.toUtf8(); + assert.notEqual(displayHandle, '', 'claimHandle should emit a handle'); + + // get handle using msa (rpc) + const handle_response = await ExtrinsicHelper.getHandleForMSA(msaId); + if (!handle_response.isSome) { + throw new Error('handle_response should be Some'); + } + const full_handle_state = handle_response.unwrap(); + const suffix_from_state = full_handle_state.suffix; + const suffix = suffix_from_state.toNumber(); + assert.notEqual(suffix, 0, 'suffix should not be 0'); + assert.equal(suffix, suffix_assumed, 'suffix should be equal to suffix_assumed'); + + /// Get MSA from full display handle (rpc) + const msaOption = await ExtrinsicHelper.getMsaForHandle(displayHandle); + assert(msaOption.isSome, 'msaOption should be Some'); + const msaFromHandle = msaOption.unwrap(); + assert.equal(msaFromHandle.toString(), msaId.toString(), 'msaFromHandle should be equal to msaId'); + + // Check that the rpc returns the index as > 0 + const apiCheck = await ExtrinsicHelper.apiPromise.call.handlesRuntimeApi.checkHandle(handle); + assert(apiCheck.suffixIndex.toNumber() > 0); + }); + }); + + describe('👇 Negative Test: Early retire handle', function () { + it('should not be able to retire a handle before expiration', async function () { + const handle_response = await ExtrinsicHelper.getHandleForMSA(msaId); + if (!handle_response.isSome) { + throw new Error('handle_response should be Some'); + } + + const full_handle_state = handle_response.unwrap(); + const suffix_from_state = full_handle_state.suffix; + const suffix = suffix_from_state.toNumber(); + assert.notEqual(suffix, 0, 'suffix should not be 0'); + + const currentBlock = await getBlockNumber(); + // Must be at least 6 > original expiration to make sure we get past the finalization + await ExtrinsicHelper.runToBlock(currentBlock + expirationOffset + 6); + try { + const retireHandle = ExtrinsicHelper.retireHandle(msaOwnerKeys); + const { target: event } = await retireHandle.fundAndSend(fundingSource); + assert.equal(event, undefined, 'retireHandle should not return an event'); + } catch (e) { + assert.notEqual(e, undefined, 'retireHandle should throw an error'); + } + }); + }); +}); diff --git a/e2e/handles/handlesRpcs.test.ts b/e2e/handles/handlesRpcs.test.ts new file mode 100644 index 0000000000..124018d967 --- /dev/null +++ b/e2e/handles/handlesRpcs.test.ts @@ -0,0 +1,64 @@ +// Handles RPC test suite +import '@frequency-chain/api-augment'; +import assert from 'assert'; +import { ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; + +describe('Handles RPCs', function () { + describe('Suffixes Integrity Check', function () { + it('should return same suffixes for `abcdefg` from chain as hardcoded', async function () { + const suffixes = await ExtrinsicHelper.getNextSuffixesForHandle('abcdefg', 10); + const suffixes_expected = [23, 65, 16, 53, 25, 75, 29, 26, 10, 87]; + const resp_suffixes_number = suffixes.suffixes.map((x) => x.toNumber()); + assert.deepEqual(resp_suffixes_number, suffixes_expected, 'suffixes should be equal to suffixes_expected'); + }); + }); + + describe('validateHandle basic test', function () { + it('returns true for good handle, and false for bad handle', async function () { + let res = await ExtrinsicHelper.validateHandle('Robert`DROP TABLE STUDENTS;--'); + assert.equal(res.toHuman(), false); + res = await ExtrinsicHelper.validateHandle('Little Bobby Tables'); + assert.equal(res.toHuman(), true); + res = await ExtrinsicHelper.validateHandle('Bobbay😀😀'); + assert.equal(res.toHuman(), false); + }); + }); + + describe('checkHandle basic test', function () { + it('expected outcome for a good handle', async function () { + const res = await ExtrinsicHelper.apiPromise.call.handlesRuntimeApi.checkHandle('Little Bobby Tables'); + assert(!res.isEmpty, 'Expected a response'); + assert.deepEqual(res.toHuman(), { + baseHandle: 'Little Bobby Tables', + canonicalBase: 'l1tt1eb0bbytab1es', + suffixIndex: '0', + suffixesAvailable: true, + valid: true, + }); + }); + + it('expected outcome for a bad handle', async function () { + const res = await ExtrinsicHelper.apiPromise.call.handlesRuntimeApi.checkHandle('Robert`DROP TABLE STUDENTS;--'); + assert(!res.isEmpty, 'Expected a response'); + assert.deepEqual(res.toHuman(), { + baseHandle: 'Robert`DROP TABLE STUDENTS;--', + canonicalBase: '', + suffixIndex: '0', + suffixesAvailable: false, + valid: false, + }); + }); + + it('expected outcome for a good handle with complex whitespace', async function () { + const res = await ExtrinsicHelper.apiPromise.call.handlesRuntimeApi.checkHandle('नी हुन्‍न् ।'); + assert(!res.isEmpty, 'Expected a response'); + assert.deepEqual(res.toHuman(), { + baseHandle: '0xe0a4a8e0a58020e0a4b9e0a581e0a4a8e0a58de2808de0a4a8e0a58d20e0a5a4', + canonicalBase: '0xe0a4a8e0a4b9e0a4a8e0a4a8e0a5a4', + suffixIndex: '0', + suffixesAvailable: true, + valid: true, + }); + }); + }); +}); diff --git a/e2e/load-tests/signatureRegistry.test.ts b/e2e/load-tests/signatureRegistry.test.ts new file mode 100644 index 0000000000..0d3e4ed5f8 --- /dev/null +++ b/e2e/load-tests/signatureRegistry.test.ts @@ -0,0 +1,167 @@ +import '@frequency-chain/api-augment'; +import assert from 'assert'; +import { + createKeys, + signPayloadSr25519, + getBlockNumber, + generateAddKeyPayload, + createAndFundKeypair, + getNonce, + getExistentialDeposit, +} from '../scaffolding/helpers'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { AddKeyData, ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { u64, Option } from '@polkadot/types'; +import { getFundingSource } from '../scaffolding/funding'; +import { getUnifiedAddress, getUnifiedPublicKey } from '@frequency-chain/ethereum-utils'; + +interface GeneratedMsa { + id: u64; + nonce: number; + controlKey: KeyringPair; +} + +describe('MSA Initializer Load Tests', function () { + beforeEach(async function () { + await createBlock(); + }); + + it('should successfully create 50k signatures within 100 blocks', async function () { + const msaKeys: GeneratedMsa[] = await generateMsas(2300); + + let blockNumber = await getBlockNumber(); + console.log('Starting Block Number:', blockNumber); + + let signatureCallTests: KeyringPair[] = []; + + // Make 50k signatures via 50k/2 loops + const loopCount = 25_000; + for (let i = 0; i < loopCount; i++) { + const ithMsaKey = i % msaKeys.length; + const { controlKey, nonce, id } = msaKeys[ithMsaKey]; + + // This call adds 2 signatures + signatureCallTests.push(await addSigs(id, controlKey, blockNumber, nonce)); + console.count('addSigs called (2 signatures)'); + msaKeys[ithMsaKey].nonce++; + + // Create block and check... + if (i > 0 && i % 330 === 0) { + await createBlock(200); + blockNumber++; + console.log(`Forming block...`); + await checkKeys(i - 330, [...signatureCallTests]); + signatureCallTests = []; + } + } + console.log(`Forming block...`); + await createBlock(); + + // Final Check + await checkKeys(loopCount - (loopCount % 330), signatureCallTests); + + const blockNumberEnd = await getBlockNumber(); + console.log('Ending Block Number:', blockNumberEnd); + }); +}); + +// Checks the keys to make sure they were associated with an MSA +// Also will form a block in case something was still inside the transaction queue +async function checkKeys(startingNumber: number, keysToTest: KeyringPair[]) { + console.log(`Testing MSA Key connections for ${keysToTest.length} keys...`); + for (let i = 0; i < keysToTest.length; i++) { + const key = keysToTest[i]; + let msaOption = await getMsaFromKey(key); + if (!msaOption.isSome) { + console.log( + `The ${startingNumber + i} key (${getUnifiedAddress(key)}) failed to be associated with an MSA. Trying another block...` + ); + await createBlock(); + msaOption = await getMsaFromKey(key); + } + assert( + msaOption.isSome, + `The ${startingNumber + i} key (${getUnifiedAddress(key)}) failed to be associated with an MSA.` + ); + } +} + +// Generate MSAs and give it 100 UNIT +async function generateMsas(count: number = 1): Promise { + // Make sure we are not on an edge + const createBlockEvery = count === 300 ? 290 : 300; + const fundingSource = getFundingSource(import.meta.url); + + // Create and fund the control keys + const controlKeyPromises: Promise[] = []; + let devAccountNonce = await getNonce(fundingSource); + const ed = await getExistentialDeposit(); + for (let i = 0; i < count; i++) { + controlKeyPromises.push(createAndFundKeypair(fundingSource, 100n * 10n * ed, undefined, devAccountNonce++)); + if (i > 0 && i % createBlockEvery === 0) await createBlock(100); + } + await createBlock(); + const controlKeys = await Promise.all(controlKeyPromises); + + // Create the msas + const msaPromises: Promise[] = []; + for (let i = 0; i < count; i++) { + msaPromises.push( + createMsa(controlKeys[i]).then((id) => ({ + controlKey: controlKeys[i], + id, + nonce: 1, + })) + ); + if (i > 0 && i % createBlockEvery === 0) { + await createBlock(200); + console.log('Generated Msas: ', i); + } + } + await createBlock(750); + // Create a second block in case there were more than could fit in ^ blocks + await createBlock(); + const msaIds = await Promise.all(msaPromises); + console.log('Generated Msas: ', count); + return msaIds; +} + +async function createBlock(wait: number = 300) { + // Wait ms before creating the block to give the chain time to process the transaction pool + await new Promise((r) => setTimeout(r, wait)); + return ExtrinsicHelper.apiPromise.rpc.engine.createBlock(true, true); +} + +function getMsaFromKey(keys: KeyringPair): Promise> { + return ExtrinsicHelper.apiPromise.query.msa.publicKeyToMsaId(getUnifiedAddress(keys)); +} + +async function createMsa(keys: KeyringPair): Promise { + const result = await ExtrinsicHelper.createMsa(keys).signAndSend(); + const msaRecord = result[1]['msa.MsaCreated']; + if (msaRecord) return msaRecord.data[0] as u64; + + // This doesn't always work likely due to the load causing the ws subscription to be dropped. + // So doing a backup call to help + const tryDirect = await getMsaFromKey(keys); + if (tryDirect.isSome) return tryDirect.value; + + throw 'Failed to get MSA Id...'; +} + +async function addSigs(msaId: u64, keys: KeyringPair, blockNumber: number, nonce: number): Promise { + const newKeys = createKeys(`${nonce} nonce control key`); + + const defaultPayload: AddKeyData = {}; + defaultPayload.msaId = msaId; + defaultPayload.newPublicKey = getUnifiedPublicKey(newKeys); + const payload = await generateAddKeyPayload(defaultPayload, 100, blockNumber); + + const addKeyData = ExtrinsicHelper.api.registry.createType('PalletMsaAddKeyData', payload); + + const ownerSig = signPayloadSr25519(keys, addKeyData); + const newSig = signPayloadSr25519(newKeys, addKeyData); + ExtrinsicHelper.addPublicKeyToMsa(keys, ownerSig, newSig, payload).signAndSend(nonce); + + return newKeys; +} diff --git a/e2e/messages/addIPFSMessage.test.ts b/e2e/messages/addIPFSMessage.test.ts new file mode 100644 index 0000000000..07ef56b0ea --- /dev/null +++ b/e2e/messages/addIPFSMessage.test.ts @@ -0,0 +1,155 @@ +import '@frequency-chain/api-augment'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { base64 } from 'multiformats/bases/base64'; +import { base32 } from 'multiformats/bases/base32'; +import { CID } from 'multiformats/cid'; +import { PARQUET_BROADCAST } from '../schemas/fixtures/parquetBroadcastSchemaType'; +import assert from 'assert'; +import { assertEvent, assertHasMessage, createAndFundKeypair, getOrCreateDummySchema } from '../scaffolding/helpers'; +import { ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { u16 } from '@polkadot/types'; +import { ipfsCid } from './ipfs'; +import { getFundingSource } from '../scaffolding/funding'; + +const fundingSource = getFundingSource(import.meta.url); +const ipfs_payload_data = 'This is a test of Frequency.'; +const ipfs_payload_len = ipfs_payload_data.length + 1; + +describe('Add Offchain Message', function () { + let keys: KeyringPair; + let schemaId: u16; + let dummySchemaId: u16; + + let ipfs_cid_64: string; + let ipfs_cid_32: string; + let starting_block: number; + + before(async function () { + starting_block = (await ExtrinsicHelper.apiPromise.rpc.chain.getHeader()).number.toNumber(); + + const cid = await ipfsCid(ipfs_payload_data, './e2e_test.txt'); + ipfs_cid_64 = cid.toString(base64); + ipfs_cid_32 = cid.toString(base32); + + keys = await createAndFundKeypair(fundingSource); + + [ + // Create a schema for IPFS + schemaId, + // Create a dummy on-chain schema + dummySchemaId, + ] = await Promise.all([ + ExtrinsicHelper.getOrCreateSchemaV3( + fundingSource, + PARQUET_BROADCAST, + 'Parquet', + 'IPFS', + [], + 'test.addIPFSMessage' + ), + getOrCreateDummySchema(fundingSource), + // Create a new MSA + ExtrinsicHelper.createMsa(keys).fundAndSend(fundingSource), + ]); + + // Make sure we are finalized before tests + await ExtrinsicHelper.waitForFinalization(); + }); + + it('should fail if insufficient funds', async function () { + await assert.rejects( + ExtrinsicHelper.addIPFSMessage(keys, schemaId, ipfs_cid_64, ipfs_payload_len).signAndSend('current'), + { + name: 'RpcError', + message: /Inability to pay some fees/, + } + ); + }); + + it('should fail if MSA is not valid (InvalidMessageSourceAccount)', async function () { + const accountWithNoMsa = await createAndFundKeypair(fundingSource); + await assert.rejects( + ExtrinsicHelper.addIPFSMessage(accountWithNoMsa, schemaId, ipfs_cid_64, ipfs_payload_len).fundAndSend( + fundingSource + ), + { + name: 'InvalidMessageSourceAccount', + section: 'messages', + } + ); + }); + + it('should fail if schema does not exist (InvalidSchemaId)', async function () { + // Pick an arbitrarily high schemaId, such that it won't exist on the test chain. + // If we ever create more than 999 schemas in a test suite/single Frequency instance, this test will fail. + const f = ExtrinsicHelper.addIPFSMessage(keys, 999, ipfs_cid_64, ipfs_payload_len); + await assert.rejects(f.fundAndSend(fundingSource), { + name: 'InvalidSchemaId', + section: 'messages', + }); + }); + + it('should fail if schema payload location is not IPFS (InvalidPayloadLocation)', async function () { + const op = ExtrinsicHelper.addIPFSMessage(keys, dummySchemaId, ipfs_cid_64, ipfs_payload_len); + await assert.rejects(op.fundAndSend(fundingSource), { name: 'InvalidPayloadLocation' }); + }); + + it('should fail if CID cannot be decoded (InvalidCid)', async function () { + const f = ExtrinsicHelper.addIPFSMessage(keys, schemaId, 'foo', ipfs_payload_len); + await assert.rejects(f.fundAndSend(fundingSource), { name: 'InvalidCid' }); + }); + + it('should fail if CID is CIDv0 (UnsupportedCidVersion)', async function () { + const cid = await ipfsCid(ipfs_payload_data, './e2e_test.txt'); + const cidV0 = CID.createV0(cid.multihash as any).toString(); + const f = ExtrinsicHelper.addIPFSMessage(keys, schemaId, cidV0, ipfs_payload_len); + await assert.rejects(f.fundAndSend(fundingSource), { name: 'UnsupportedCidVersion' }); + }); + + it('should successfully add an IPFS message', async function () { + const f = ExtrinsicHelper.addIPFSMessage(keys, schemaId, ipfs_cid_64, ipfs_payload_len); + const { target: event, eventMap } = await f.fundAndSend(fundingSource); + + // messages.MessagesInBlock in block might not be on this transaction if there are others + assertEvent(eventMap, 'system.ExtrinsicSuccess'); + + if (event) { + assert.notEqual(event, undefined, `should have returned a MessagesInBlock event, got: ${event?.toHuman()}`); + } + }); + + it('should successfully retrieve added message and returned CID should have Base32 encoding', async function () { + const f = await ExtrinsicHelper.apiPromise.rpc.messages.getBySchemaId(schemaId, { + from_block: starting_block, + from_index: 0, + to_block: starting_block + 999, + page_size: 999, + }); + assertHasMessage(f, (x) => { + const cid = x.cid.isSome && Buffer.from(x.cid.unwrap()).toString(); + return cid === ipfs_cid_32; + }); + }); + + describe('Add OnChain Message and successfully retrieve it', function () { + it('should successfully add and retrieve an onchain message', async function () { + const f = ExtrinsicHelper.addOnChainMessage(keys, dummySchemaId, '0xdeadbeef'); + const { target: event, eventMap } = await f.fundAndSend(fundingSource); + + // messages.MessagesInBlock in block might not be on this transaction if there are others + assertEvent(eventMap, 'system.ExtrinsicSuccess'); + + if (event) { + assert.notEqual(event, undefined, `should have returned a MessagesInBlock event, got: ${event?.toHuman()}`); + } + + const get = await ExtrinsicHelper.apiPromise.rpc.messages.getBySchemaId(dummySchemaId, { + from_block: starting_block, + from_index: 0, + to_block: starting_block + 999, + page_size: 999, + }); + assertHasMessage(get, (x) => x.payload.isSome && x.payload.toString() === '0xdeadbeef'); + }); + }); +}); diff --git a/e2e/messages/ipfs.ts b/e2e/messages/ipfs.ts new file mode 100644 index 0000000000..37a3f46fc4 --- /dev/null +++ b/e2e/messages/ipfs.ts @@ -0,0 +1,21 @@ +import { unixfs } from '@helia/unixfs'; +import { createHelia } from 'helia'; + +export async function ipfsCid(content: string, path: string) { + // create a Helia node + const helia = await createHelia({ start: false }); + + // create a filesystem on top of Helia, in this case it's UnixFS + const fs = unixfs(helia); + + // we will use this TextEncoder to turn strings into Uint8Arrays + const encoder = new TextEncoder(); + + // add the bytes to your node and receive a unique content identifier + const cid = await fs.addFile({ + path, + content: encoder.encode(content), + }); + + return cid; +} diff --git a/e2e/miscellaneous/balance.ethereum.test.ts b/e2e/miscellaneous/balance.ethereum.test.ts new file mode 100644 index 0000000000..bded4f32f9 --- /dev/null +++ b/e2e/miscellaneous/balance.ethereum.test.ts @@ -0,0 +1,67 @@ +import '@frequency-chain/api-augment'; +import assert from 'assert'; +import { DOLLARS, createAndFundKeypair, createKeys } from '../scaffolding/helpers'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { Extrinsic, ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { getFundingSource } from '../scaffolding/funding'; +import { getUnifiedAddress } from '@frequency-chain/ethereum-utils'; + +const fundingSource: KeyringPair = getFundingSource(import.meta.url); + +describe('Balance transfer ethereum', function () { + describe('setup', function () { + let senderSr25519Keys: KeyringPair; + let senderEthereumKeys: KeyringPair; + let ethereumKeys: KeyringPair; + let ethereumKeys2: KeyringPair; + let sr25519Keys: KeyringPair; + + before(async function () { + senderSr25519Keys = await createAndFundKeypair(fundingSource, 30n * DOLLARS); + senderEthereumKeys = await createAndFundKeypair(fundingSource, 30n * DOLLARS, undefined, undefined, 'ethereum'); + ethereumKeys = createKeys('balance-key-1', 'ethereum'); + ethereumKeys2 = createKeys('balance-key-2', 'ethereum'); + sr25519Keys = createKeys('another-sr25519', 'sr25519'); + }); + + it('should transfer from sr25519 to ethereum style key', async function () { + const transferAmount = 10n * DOLLARS; + const extrinsic = new Extrinsic( + () => ExtrinsicHelper.api.tx.balances.transferKeepAlive(getUnifiedAddress(ethereumKeys), transferAmount), + senderSr25519Keys, + ExtrinsicHelper.api.events.balances.Transfer + ); + const { target } = await extrinsic.signAndSend(); + assert.notEqual(target, undefined, 'should have returned Transfer event'); + const accountInfo = await ExtrinsicHelper.getAccountInfo(ethereumKeys); + assert(accountInfo.data.free.toBigInt() >= transferAmount); + }); + + it('should transfer from sr25519 to ethereum 20 byte address', async function () { + const transferAmount = 10n * DOLLARS; + const extrinsic = new Extrinsic( + // this is using MultiAddress::Address20 type in Rust since addressRaw is 20 bytes ethereum address + () => ExtrinsicHelper.api.tx.balances.transferKeepAlive(ethereumKeys2.addressRaw, transferAmount), + senderSr25519Keys, + ExtrinsicHelper.api.events.balances.Transfer + ); + const { target } = await extrinsic.signAndSend(); + assert.notEqual(target, undefined, 'should have returned Transfer event'); + const accountInfo = await ExtrinsicHelper.getAccountInfo(ethereumKeys2); + assert(accountInfo.data.free.toBigInt() >= transferAmount); + }); + + it('should transfer from an ethereum key to sr25519 key', async function () { + const transferAmount = 10n * DOLLARS; + const extrinsic = new Extrinsic( + () => ExtrinsicHelper.api.tx.balances.transferKeepAlive(getUnifiedAddress(sr25519Keys), transferAmount), + senderEthereumKeys, + ExtrinsicHelper.api.events.balances.Transfer + ); + const { target } = await extrinsic.signAndSend(); + assert.notEqual(target, undefined, 'should have returned Transfer event'); + const accountInfo = await ExtrinsicHelper.getAccountInfo(sr25519Keys); + assert(accountInfo.data.free.toBigInt() >= transferAmount); + }); + }); +}); diff --git a/e2e/miscellaneous/frequency.test.ts b/e2e/miscellaneous/frequency.test.ts new file mode 100644 index 0000000000..a0cb999848 --- /dev/null +++ b/e2e/miscellaneous/frequency.test.ts @@ -0,0 +1,84 @@ +import '@frequency-chain/api-augment'; +import assert from 'assert'; +import { DOLLARS, createAndFundKeypair, getBlockNumber, getNonce } from '../scaffolding/helpers'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { Extrinsic, ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { getFundingSource } from '../scaffolding/funding'; +import { u8, Option } from '@polkadot/types'; +import { u8aToHex } from '@polkadot/util/u8a/toHex'; +import { getUnifiedAddress, getUnifiedPublicKey } from '@frequency-chain/ethereum-utils'; + +const fundingSource: KeyringPair = getFundingSource(import.meta.url); + +describe('Frequency', function () { + describe('setup', function () { + let keypairA: KeyringPair; + let keypairB: KeyringPair; + + before(async function () { + keypairA = await createAndFundKeypair(fundingSource, 100n * DOLLARS); + keypairB = await createAndFundKeypair(fundingSource, 100n * DOLLARS); + }); + + it('Get events successfully', async function () { + const balance_pallet = new u8(ExtrinsicHelper.api.registry, 10); + const transfer_event = new u8(ExtrinsicHelper.api.registry, 2); + const dest_account = u8aToHex(getUnifiedPublicKey(keypairB)).slice(2); + const beforeBlockNumber = await getBlockNumber(); + + const extrinsic = new Extrinsic( + () => ExtrinsicHelper.api.tx.balances.transferKeepAlive(getUnifiedAddress(keypairB), 1n * DOLLARS), + keypairA, + ExtrinsicHelper.api.events.balances.Transfer + ); + const { target } = await extrinsic.signAndSend(); + assert.notEqual(target, undefined, 'should have returned Transfer event'); + + const afterBlockNumber = await getBlockNumber(); + let found = false; + + for (let i = beforeBlockNumber + 1; i <= afterBlockNumber; i++) { + const block = await ExtrinsicHelper.apiPromise.rpc.chain.getBlockHash(i); + const events = await ExtrinsicHelper.getFrequencyEvents(block); + if ( + events.find( + (e) => e.pallet.eq(balance_pallet) && e.event.eq(transfer_event) && e.data.toHex().includes(dest_account) + ) + ) { + found = true; + break; + } + } + + assert(found, 'Could not find the desired event'); + }); + + it('Get missing nonce successfully', async function () { + const nonce = await getNonce(keypairB); + for (let i = 0; i < 10; i += 2) { + const extrinsic = new Extrinsic( + () => ExtrinsicHelper.api.tx.balances.transferKeepAlive(getUnifiedAddress(keypairA), 1n * DOLLARS), + keypairB, + ExtrinsicHelper.api.events.balances.Transfer + ); + // intentionally we don't want an await here + extrinsic.signAndSend(nonce + i); + } + // wait a little for all of the above transactions to get queued + await new Promise((resolve) => setTimeout(resolve, 1000)); + const missingNonce = await ExtrinsicHelper.getMissingNonceValues(getUnifiedPublicKey(keypairB)); + assert.equal(missingNonce.length, 4, 'Could not get missing nonce values'); + + // applying the missing nonce values to next transactions to unblock the stuck ones + for (const missing of missingNonce) { + const extrinsic = new Extrinsic( + () => ExtrinsicHelper.api.tx.balances.transferKeepAlive(getUnifiedAddress(keypairA), 1n * DOLLARS), + keypairB, + ExtrinsicHelper.api.events.balances.Transfer + ); + const { target } = await extrinsic.signAndSend(missing.toNumber()); + assert.notEqual(target, undefined, 'should have returned Transfer event'); + } + }); + }); +}); diff --git a/e2e/miscellaneous/utilityBatch.test.ts b/e2e/miscellaneous/utilityBatch.test.ts new file mode 100644 index 0000000000..0805b3578a --- /dev/null +++ b/e2e/miscellaneous/utilityBatch.test.ts @@ -0,0 +1,142 @@ +import assert from 'assert'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { DOLLARS, createAndFundKeypair } from '../scaffolding/helpers'; +import { ApiTypes, SubmittableExtrinsic } from '@polkadot/api/types'; +import { getFundingSource } from '../scaffolding/funding'; +import { getUnifiedAddress } from '@frequency-chain/ethereum-utils'; + +const fundingSource = getFundingSource(import.meta.url); + +describe('Utility Batch Filtering', function () { + let sender: KeyringPair; + let recipient: KeyringPair; + + beforeEach(async function () { + sender = await createAndFundKeypair(fundingSource, 5n * DOLLARS, 'utility-sender'); + recipient = await createAndFundKeypair(fundingSource, 5n * DOLLARS, 'utility-recipient'); + }); + + it('should successfully execute ✅ batch with allowed calls', async function () { + // good batch: with only allowed calls + const goodBatch: SubmittableExtrinsic[] = []; + goodBatch.push(ExtrinsicHelper.api.tx.balances.transferAllowDeath(getUnifiedAddress(recipient), 1000)); + goodBatch.push(ExtrinsicHelper.api.tx.system.remark('Hello From Batch')); + goodBatch.push(ExtrinsicHelper.api.tx.msa.create()); + const batch = ExtrinsicHelper.executeUtilityBatchAll(sender, goodBatch); + const { target: event, eventMap } = await batch.fundAndSend(fundingSource); + assert.notEqual(event, undefined, 'should return an event'); + assert.notEqual(eventMap, undefined, 'should return an eventMap'); + }); + + it('should fail to execute ❌ batchAll with disallowed calls', async function () { + // bad batch: with a mix of allowed and disallowed calls + const badBatch: SubmittableExtrinsic[] = []; + //allowed + badBatch.push(ExtrinsicHelper.api.tx.balances.transferAllowDeath(getUnifiedAddress(recipient), 1000)); + badBatch.push(ExtrinsicHelper.api.tx.system.remark('Hello From Batch')); + // not allowed + badBatch.push(ExtrinsicHelper.api.tx.handles.retireHandle()); + badBatch.push(ExtrinsicHelper.api.tx.msa.retireMsa()); + + // batchAll + const batchAll = ExtrinsicHelper.executeUtilityBatchAll(sender, badBatch); + try { + await batchAll.fundAndSend(fundingSource); + assert.fail('batchAll should have caused an error'); + } catch (err) { + assert.notEqual(err, undefined, ' batchAll should return an error'); + } + }); + + it('should fail to execute ❌ batch with disallowed calls', async function () { + // bad batch: with a mix of allowed and disallowed calls + const badBatch: SubmittableExtrinsic[] = []; + badBatch.push(ExtrinsicHelper.api.tx.balances.transferAllowDeath(getUnifiedAddress(recipient), 1000)); + badBatch.push(ExtrinsicHelper.api.tx.system.remark('Hello From Batch')); + badBatch.push(ExtrinsicHelper.api.tx.handles.retireHandle()); + badBatch.push(ExtrinsicHelper.api.tx.msa.retireMsa()); + + // batch + const batch = ExtrinsicHelper.executeUtilityBatch(sender, badBatch); + const { target: ok, eventMap } = await batch.fundAndSend(fundingSource); + assert.equal(ok, undefined, 'should not return an ok event'); + assert.equal(eventMap['utility.BatchCompleted'], undefined, 'should not return a batch completed event'); + assert.notEqual(eventMap['utility.BatchInterrupted'], undefined, 'should return a batch interrupted event'); + }); + + it('should fail to execute ❌ forceBatch with disallowed calls', async function () { + // bad batch: with a mix of allowed and disallowed calls + const badBatch: SubmittableExtrinsic[] = []; + badBatch.push(ExtrinsicHelper.api.tx.balances.transferAllowDeath(getUnifiedAddress(recipient), 1000)); + badBatch.push(ExtrinsicHelper.api.tx.system.remark('Hello From Batch')); + badBatch.push(ExtrinsicHelper.api.tx.handles.retireHandle()); + badBatch.push(ExtrinsicHelper.api.tx.msa.retireMsa()); + + // forceBatch + const forceBatch = ExtrinsicHelper.executeUtilityForceBatch(sender, badBatch); + const { target: ok, eventMap } = await forceBatch.fundAndSend(fundingSource); + assert.equal(ok, undefined, 'should not return an ok event'); + assert.equal(eventMap['utility.BatchCompleted'], undefined, 'should not return a batch completed event'); + assert.notEqual( + eventMap['utility.BatchCompletedWithErrors'], + undefined, + 'should return a batch completed with error event' + ); + }); + + it('should fail to execute ❌ batch with `Pays::No` calls', async function () { + // bad batch: with frequency related Pays::No call + const badBatch: SubmittableExtrinsic[] = []; + badBatch.push(ExtrinsicHelper.api.tx.msa.retireMsa()); + const batch = ExtrinsicHelper.executeUtilityBatchAll(sender, badBatch); + try { + await batch.fundAndSend(fundingSource); + assert.fail('batch should have caused an error'); + } catch (err) { + assert.notEqual(err, undefined, 'should return an error'); + } + }); + + it('should fail to execute ❌ batch with `Pays::Yes` `create_provider`call blocked by Frequency', async function () { + // bad batch: with frequency related Pays::Yes call + const badBatch: SubmittableExtrinsic[] = []; + badBatch.push(ExtrinsicHelper.api.tx.msa.createProvider('I am a ba(tch)d provider')); + const batch = ExtrinsicHelper.executeUtilityBatchAll(sender, badBatch); + try { + await batch.fundAndSend(fundingSource); + assert.fail('batch should have caused an error'); + } catch (err) { + assert.notEqual(err, undefined, 'should return an error'); + } + }); + + it('should fail to execute ❌ batch with `Pays::Yes` `create_schema` call blocked by Frequency', async function () { + // bad batch: with frequency related Pays::Yes call + const badBatch: SubmittableExtrinsic[] = []; + badBatch.push(ExtrinsicHelper.api.tx.msa.createProvider('I am a ba(tch)d provider')); + const batch = ExtrinsicHelper.executeUtilityBatchAll(sender, badBatch); + try { + await batch.fundAndSend(fundingSource); + assert.fail('batch should have caused an error'); + } catch (err) { + assert.notEqual(err, undefined, 'should return an error'); + } + }); + + it('should fail to execute ❌ batch with nested batch', async function () { + // batch with nested batch + const nestedBatch: SubmittableExtrinsic[] = []; + const innerBatch: SubmittableExtrinsic[] = []; + innerBatch.push(ExtrinsicHelper.api.tx.balances.transferAllowDeath(getUnifiedAddress(recipient), 1000)); + innerBatch.push(ExtrinsicHelper.api.tx.system.remark('Hello From Batch')); + nestedBatch.push(ExtrinsicHelper.api.tx.utility.batch(innerBatch)); + const batch = ExtrinsicHelper.executeUtilityBatchAll(sender, nestedBatch); + try { + await batch.fundAndSend(fundingSource); + assert.fail('batch should have caused an error'); + } catch (err) { + assert.notEqual(err, undefined, 'should return an error'); + } + }); +}); diff --git a/e2e/msa/addKeyLowCost.ethereum.test.ts b/e2e/msa/addKeyLowCost.ethereum.test.ts new file mode 100644 index 0000000000..e68a243d6f --- /dev/null +++ b/e2e/msa/addKeyLowCost.ethereum.test.ts @@ -0,0 +1,131 @@ +import { KeyringPair } from '@polkadot/keyring/types'; +import { AddKeyData, Extrinsic, ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { + assertEvent, + CENTS, + createKeys, + createMsa, + createMsaAndProvider, + DOLLARS, + generateAddKeyPayload, + getEthereumKeyPairFromUnifiedAddress, + signPayloadSr25519, + stakeToProvider, +} from '../scaffolding/helpers'; +import { getUnifiedAddress, getUnifiedPublicKey } from '@frequency-chain/ethereum-utils'; +import assert from 'assert'; +import { getFundingSource } from '../scaffolding/funding'; +import { u64 } from '@polkadot/types'; +import { MessageSourceId } from '@frequency-chain/api-augment/interfaces'; +import { createAddKeyData, signEip712 } from '@frequency-chain/ethereum-utils'; +import { u8aToHex } from '@polkadot/util'; + +const fundingSource = getFundingSource(import.meta.url); + +describe('adding an Ethereum key for low cost', function () { + let providerKeys; + let providerMsaId; + + before(async function () { + providerKeys = await createKeys('KeyAdder'); + providerMsaId = await createMsaAndProvider(fundingSource, providerKeys, 'KeyAdder', 10n * CENTS); + await stakeToProvider(fundingSource, fundingSource, providerMsaId, 6n * DOLLARS); + }); + + // create a delegator MSA account with new keys, + // create a new Ethereum keypair, + // call generateAddKeyCallParamsUsingKeys, + // return the new keys, the resulting payload, and both signatures. + async function generateAddKeyCallParams() { + const ethereumKeyringPair = await createKeys('Ethereum', 'ethereum'); + const [delegatorMsaId, delegatorKeys] = await createMsa(fundingSource, 10n * CENTS); + const { addKeyPayload, delegatorSig, newSig } = await generateAddKeyCallParamsUsingKeys( + delegatorKeys, + delegatorMsaId, + ethereumKeyringPair + ); + return { delegatorKeys, addKeyPayload, delegatorSig, newSig }; + } + + // create AddKeyData using the provided keys. + // use the keys to sign the AddKeyData in an AddKey payload. + // return the new keys, the payload, and both signatures. + async function generateAddKeyCallParamsUsingKeys( + delegatorKeys: KeyringPair, + delegatorMsaId: u64, + ethereumKeyringPair: KeyringPair + ) { + const addKeyPayload = await generateAddKeyPayload({}); + addKeyPayload.msaId = delegatorMsaId; + addKeyPayload.newPublicKey = getUnifiedPublicKey(ethereumKeyringPair); + + const srSignatureaddKeyData = ExtrinsicHelper.api.registry.createType('PalletMsaAddKeyData', addKeyPayload); + const delegatorSrSignature = signPayloadSr25519(delegatorKeys, srSignatureaddKeyData); + + const ethereumSecretKey = u8aToHex( + getEthereumKeyPairFromUnifiedAddress(getUnifiedAddress(ethereumKeyringPair)).secretKey + ); + const eip712AddKeyData = createAddKeyData( + addKeyPayload.msaId.toBigInt(), + u8aToHex(addKeyPayload.newPublicKey), + addKeyPayload.expiration + ); + const ecdsaSignature = await signEip712(ethereumSecretKey, eip712AddKeyData); + + return { addKeyPayload, delegatorSig: delegatorSrSignature, newSig: ecdsaSignature }; + } + + it('addPublicKeyToMsa costs less for capacity call with eligibility conditions', async function () { + // SET UP + const { delegatorKeys, addKeyPayload, delegatorSig, newSig } = await generateAddKeyCallParams(); + + // the extrinsic will be called by a provider with stake. + const addPublicKeyOp = new Extrinsic( + () => + ExtrinsicHelper.api.tx.msa.addPublicKeyToMsa( + getUnifiedPublicKey(delegatorKeys), + delegatorSig, + newSig, + addKeyPayload + ), + providerKeys, + ExtrinsicHelper.api.events.msa.PublicKeyAdded + ); + + // ACT pay with capacity using the provider. + const { eventMap } = await addPublicKeyOp.payWithCapacity(); + + // ASSERT it's a very small fee, but not free. + assertEvent(eventMap, 'msa.PublicKeyAdded'); + const capacityFee = ExtrinsicHelper.getCapacityFee(eventMap); + assert(capacityFee > 0); + assert(capacityFee < 1_320_000n); // ~1.3 CENTS + + // add another key; this should cost a lot more + const thirdKeyEth = await createKeys('Eth2', 'ethereum'); + const delegatorMsaId: MessageSourceId = addKeyPayload.msaId || new u64(ExtrinsicHelper.api.registry, 0); + const newParams = await generateAddKeyCallParamsUsingKeys(delegatorKeys, delegatorMsaId, thirdKeyEth); + + // again to be submitted by provider. + const addThirdKeyOp = new Extrinsic( + () => + ExtrinsicHelper.api.tx.msa.addPublicKeyToMsa( + getUnifiedPublicKey(delegatorKeys), + newParams.delegatorSig, + newParams.newSig, + newParams.addKeyPayload + ), + providerKeys, + ExtrinsicHelper.api.events.msa.PublicKeyAdded + ); + + // ACT pay with capacity to add a third key + const { eventMap: eventMap2 } = await addThirdKeyOp.payWithCapacity(); + assertEvent(eventMap2, 'msa.PublicKeyAdded'); + const thirdKeyCapacityFee = ExtrinsicHelper.getCapacityFee(eventMap2); + // 4260363n vs + // 1278109n + assert(thirdKeyCapacityFee > capacityFee); + assert(thirdKeyCapacityFee < 5n * CENTS); + }); +}); diff --git a/e2e/msa/createMsa.test.ts b/e2e/msa/createMsa.test.ts new file mode 100644 index 0000000000..fb08646248 --- /dev/null +++ b/e2e/msa/createMsa.test.ts @@ -0,0 +1,39 @@ +import '@frequency-chain/api-augment'; +import assert from 'assert'; +import { assertExtrinsicSucceededAndFeesPaid, CENTS, createAndFundKeypair } from '../scaffolding/helpers'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { getFundingSource } from '../scaffolding/funding'; + +const fundingSource = getFundingSource(import.meta.url); + +describe('Create Accounts', function () { + let keys: KeyringPair; + + before(async function () { + keys = await createAndFundKeypair(fundingSource, 5n * CENTS); + }); + + describe('createMsa', function () { + it('should successfully create an MSA account', async function () { + const f = ExtrinsicHelper.createMsa(keys); + const { target: msaCreatedEvent, eventMap: chainEvents } = await f.fundAndSend(fundingSource); + + assert.notEqual( + chainEvents['system.ExtrinsicSuccess'], + undefined, + 'should have returned an ExtrinsicSuccess event' + ); + assert.notEqual(msaCreatedEvent, undefined, 'should have returned an MsaCreated event'); + assertExtrinsicSucceededAndFeesPaid(chainEvents); + assert.notEqual(msaCreatedEvent?.data.msaId, undefined, 'Failed to get the msaId from the event'); + }); + + it('should fail to create an MSA for a keypair already associated with an MSA', async function () { + const op = ExtrinsicHelper.createMsa(keys); + await assert.rejects(op.fundAndSend(fundingSource), { + name: 'KeyAlreadyRegistered', + }); + }); + }); +}); diff --git a/e2e/msa/keyManagement.ethereum.test.ts b/e2e/msa/keyManagement.ethereum.test.ts new file mode 100644 index 0000000000..e813e78328 --- /dev/null +++ b/e2e/msa/keyManagement.ethereum.test.ts @@ -0,0 +1,155 @@ +import '@frequency-chain/api-augment'; +import assert from 'assert'; +import { + createKeys, + generateAddKeyPayload, + signPayload, + MultiSignatureType, + DOLLARS, + createAndFundKeypairs, + getEthereumKeyPairFromUnifiedAddress, +} from '../scaffolding/helpers'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { AddKeyData, ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { u64 } from '@polkadot/types'; +import { Codec } from '@polkadot/types/types'; +import { getFundingSource } from '../scaffolding/funding'; +import { createAddKeyData, getUnifiedAddress, getUnifiedPublicKey, signEip712 } from '@frequency-chain/ethereum-utils'; +import { u8aToHex } from '@polkadot/util'; + +const maxU64 = 18_446_744_073_709_551_615n; +const fundingSource = getFundingSource(import.meta.url); + +describe('MSA Key management Ethereum', function () { + describe('addPublicKeyToMsa Ethereum', function () { + let keys: KeyringPair; + let msaId: u64; + let secondaryKey: KeyringPair; + const defaultPayload: AddKeyData = {}; + let payload: AddKeyData; + let ownerSig: MultiSignatureType; + let newSig: MultiSignatureType; + let badSig: MultiSignatureType; + let addKeyData: Codec; + + before(async function () { + // Setup an MSA with one key and a secondary funded key + [keys, secondaryKey] = await createAndFundKeypairs( + fundingSource, + ['keys', 'secondaryKey'], + 2n * DOLLARS, + 'ethereum' + ); + const { target } = await ExtrinsicHelper.createMsa(keys).signAndSend(); + assert.notEqual(target?.data.msaId, undefined, 'MSA Id not in expected event'); + msaId = target!.data.msaId; + + // Default payload making it easier to test `addPublicKeyToMsa` + defaultPayload.msaId = msaId; + defaultPayload.newPublicKey = getUnifiedPublicKey(secondaryKey); + }); + + beforeEach(async function () { + payload = await generateAddKeyPayload(defaultPayload); + }); + + it('should fail to add public key if origin is not one of the signers of the payload (MsaOwnershipInvalidSignature) for a Ethereum key', async function () { + const badKeys: KeyringPair = createKeys(); + addKeyData = ExtrinsicHelper.api.registry.createType('PalletMsaAddKeyData', payload); + newSig = signPayload(secondaryKey, addKeyData); + badSig = signPayload(badKeys, addKeyData); + const op = ExtrinsicHelper.addPublicKeyToMsa(keys, badSig, newSig, payload); + await assert.rejects(op.fundAndSend(fundingSource), { + name: 'MsaOwnershipInvalidSignature', + }); + }); + + it('should fail to add public key if origin does not own MSA (NotMsaOwner) for a Ethereum key', async function () { + const newPayload = await generateAddKeyPayload({ + ...defaultPayload, + msaId: new u64(ExtrinsicHelper.api.registry, maxU64), + }); + addKeyData = ExtrinsicHelper.api.registry.createType('PalletMsaAddKeyData', newPayload); + ownerSig = signPayload(keys, addKeyData); + newSig = signPayload(secondaryKey, addKeyData); + const op = ExtrinsicHelper.addPublicKeyToMsa(keys, ownerSig, newSig, newPayload); + await assert.rejects(op.fundAndSend(fundingSource), { + name: 'NotMsaOwner', + }); + }); + + it('should successfully add a new public key to an existing MSA & disallow duplicate signed payload submission (SignatureAlreadySubmitted) for a Ethereum key', async function () { + addKeyData = ExtrinsicHelper.api.registry.createType('PalletMsaAddKeyData', payload); + + ownerSig = signPayload(keys, addKeyData); + newSig = signPayload(secondaryKey, addKeyData); + const addPublicKeyOp = ExtrinsicHelper.addPublicKeyToMsa(keys, ownerSig, newSig, payload); + + const { target: publicKeyEvents } = await addPublicKeyOp.fundAndSend(fundingSource); + + assert.notEqual(publicKeyEvents, undefined, 'should have added public key'); + + await assert.rejects( + addPublicKeyOp.fundAndSend(fundingSource), + 'should reject sending the same signed payload twice' + ); + }); + + it('should fail if attempting to add the same key more than once (KeyAlreadyRegistered) for a Ethereum key', async function () { + const addKeyData = ExtrinsicHelper.api.registry.createType('PalletMsaAddKeyData', payload); + + const ownerSig = signPayload(keys, addKeyData); + const newSig = signPayload(secondaryKey, addKeyData); + const addPublicKeyOp = ExtrinsicHelper.addPublicKeyToMsa(keys, ownerSig, newSig, payload); + + await assert.rejects(addPublicKeyOp.fundAndSend(fundingSource), { + name: 'KeyAlreadyRegistered', + }); + }); + + it('should allow new keypair to act for/on MSA for a Ethereum key', async function () { + const thirdKey = createKeys(); + const newPayload = await generateAddKeyPayload({ + ...defaultPayload, + newPublicKey: getUnifiedPublicKey(thirdKey), + }); + addKeyData = ExtrinsicHelper.api.registry.createType('PalletMsaAddKeyData', newPayload); + ownerSig = signPayload(secondaryKey, addKeyData); + newSig = signPayload(thirdKey, addKeyData); + const op = ExtrinsicHelper.addPublicKeyToMsa(secondaryKey, ownerSig, newSig, newPayload); + const { target: event } = await op.fundAndSend(fundingSource, false); + assert.notEqual(event, undefined, 'should have added public key'); + + // Cleanup + await assert.doesNotReject(ExtrinsicHelper.deletePublicKey(keys, getUnifiedPublicKey(thirdKey)).signAndSend()); + }); + + it('should allow using eip-712 signatures to add a new key', async function () { + const thirdKey = createKeys('third-key', 'ethereum'); + const newPayload = await generateAddKeyPayload({ + ...defaultPayload, + newPublicKey: getUnifiedPublicKey(thirdKey), + }); + + const signingPayload = createAddKeyData( + payload.msaId!.toString(), + u8aToHex(newPayload.newPublicKey), + newPayload.expiration + ); + ownerSig = await signEip712( + u8aToHex(getEthereumKeyPairFromUnifiedAddress(getUnifiedAddress(secondaryKey)).secretKey), + signingPayload + ); + newSig = await signEip712( + u8aToHex(getEthereumKeyPairFromUnifiedAddress(getUnifiedAddress(thirdKey)).secretKey), + signingPayload + ); + const op = ExtrinsicHelper.addPublicKeyToMsa(secondaryKey, ownerSig, newSig, newPayload); + const { target: event } = await op.fundAndSend(fundingSource); + assert.notEqual(event, undefined, 'should have added public key via eip-712'); + + // Cleanup + await assert.doesNotReject(ExtrinsicHelper.deletePublicKey(keys, getUnifiedPublicKey(thirdKey)).signAndSend()); + }); + }); +}); diff --git a/e2e/msa/msaKeyManagement.test.ts b/e2e/msa/msaKeyManagement.test.ts new file mode 100644 index 0000000000..2aed23cb84 --- /dev/null +++ b/e2e/msa/msaKeyManagement.test.ts @@ -0,0 +1,187 @@ +import '@frequency-chain/api-augment'; +import assert from 'assert'; +import { + createKeys, + createAndFundKeypair, + createAndFundKeypairs, + signPayloadSr25519, + Sr25519Signature, + generateAddKeyPayload, + createProviderKeysAndId, + DOLLARS, +} from '../scaffolding/helpers'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { AddKeyData, ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { u64 } from '@polkadot/types'; +import { Codec } from '@polkadot/types/types'; +import { getFundingSource } from '../scaffolding/funding'; +import { getUnifiedPublicKey } from '@frequency-chain/ethereum-utils'; + +const maxU64 = 18_446_744_073_709_551_615n; +const fundingSource = getFundingSource(import.meta.url); + +describe('MSA Key management', function () { + describe('addPublicKeyToMsa', function () { + let keys: KeyringPair; + let msaId: u64; + let secondaryKey: KeyringPair; + const defaultPayload: AddKeyData = {}; + let payload: AddKeyData; + let ownerSig: Sr25519Signature; + let newSig: Sr25519Signature; + let badSig: Sr25519Signature; + let addKeyData: Codec; + + before(async function () { + // Setup an MSA with one key and a secondary funded key + [keys, secondaryKey] = await createAndFundKeypairs(fundingSource, ['keys', 'secondaryKey'], 2n * DOLLARS); + const { target } = await ExtrinsicHelper.createMsa(keys).signAndSend(); + assert.notEqual(target?.data.msaId, undefined, 'MSA Id not in expected event'); + msaId = target!.data.msaId; + + // Default payload making it easier to test `addPublicKeyToMsa` + defaultPayload.msaId = msaId; + defaultPayload.newPublicKey = getUnifiedPublicKey(secondaryKey); + }); + + beforeEach(async function () { + payload = await generateAddKeyPayload(defaultPayload); + }); + + it('should fail to add public key if origin is not one of the signers of the payload (MsaOwnershipInvalidSignature)', async function () { + const badKeys: KeyringPair = createKeys(); + addKeyData = ExtrinsicHelper.api.registry.createType('PalletMsaAddKeyData', payload); + newSig = signPayloadSr25519(secondaryKey, addKeyData); + badSig = signPayloadSr25519(badKeys, addKeyData); + const op = ExtrinsicHelper.addPublicKeyToMsa(keys, badSig, newSig, payload); + await assert.rejects(op.fundAndSend(fundingSource), { + name: 'MsaOwnershipInvalidSignature', + }); + }); + + it('should fail to add public key if new keypair is not one of the signers of the payload (NewKeyOwnershipInvalidSignature)', async function () { + const badKeys: KeyringPair = createKeys(); + addKeyData = ExtrinsicHelper.api.registry.createType('PalletMsaAddKeyData', payload); + ownerSig = signPayloadSr25519(keys, addKeyData); + badSig = signPayloadSr25519(badKeys, addKeyData); + const op = ExtrinsicHelper.addPublicKeyToMsa(keys, ownerSig, badSig, payload); + await assert.rejects(op.fundAndSend(fundingSource), { + name: 'NewKeyOwnershipInvalidSignature', + }); + }); + + it('should fail to add public key if origin does not have an MSA (NoKeyExists)', async function () { + const newOriginKeys = await createAndFundKeypair(fundingSource, 50_000_000n); + addKeyData = ExtrinsicHelper.api.registry.createType('PalletMsaAddKeyData', payload); + ownerSig = signPayloadSr25519(newOriginKeys, addKeyData); + newSig = signPayloadSr25519(secondaryKey, addKeyData); + const op = ExtrinsicHelper.addPublicKeyToMsa(newOriginKeys, ownerSig, newSig, payload); + await assert.rejects(op.fundAndSend(fundingSource), { + name: 'NoKeyExists', + }); + }); + + it('should fail to add public key if origin does not own MSA (NotMsaOwner)', async function () { + const newPayload = await generateAddKeyPayload({ + ...defaultPayload, + msaId: new u64(ExtrinsicHelper.api.registry, maxU64), + }); + addKeyData = ExtrinsicHelper.api.registry.createType('PalletMsaAddKeyData', newPayload); + ownerSig = signPayloadSr25519(keys, addKeyData); + newSig = signPayloadSr25519(secondaryKey, addKeyData); + const op = ExtrinsicHelper.addPublicKeyToMsa(keys, ownerSig, newSig, newPayload); + await assert.rejects(op.fundAndSend(fundingSource), { + name: 'NotMsaOwner', + }); + }); + + it('should fail if expiration has passed (ProofHasExpired)', async function () { + const newPayload = await generateAddKeyPayload({ + ...defaultPayload, + expiration: (await ExtrinsicHelper.getLastBlock()).block.header.number.toNumber(), + }); + addKeyData = ExtrinsicHelper.api.registry.createType('PalletMsaAddKeyData', newPayload); + ownerSig = signPayloadSr25519(keys, addKeyData); + newSig = signPayloadSr25519(secondaryKey, addKeyData); + const op = ExtrinsicHelper.addPublicKeyToMsa(keys, ownerSig, newSig, newPayload); + await assert.rejects(op.fundAndSend(fundingSource), { + name: 'ProofHasExpired', + }); + }); + + it('should fail if expiration is not yet valid (ProofNotYetValid)', async function () { + const maxMortality = ExtrinsicHelper.api.consts.msa.mortalityWindowSize.toNumber(); + const newPayload = await generateAddKeyPayload({ + ...defaultPayload, + expiration: (await ExtrinsicHelper.getLastBlock()).block.header.number.toNumber() + maxMortality + 999, + }); + addKeyData = ExtrinsicHelper.api.registry.createType('PalletMsaAddKeyData', newPayload); + ownerSig = signPayloadSr25519(keys, addKeyData); + newSig = signPayloadSr25519(secondaryKey, addKeyData); + const op = ExtrinsicHelper.addPublicKeyToMsa(keys, ownerSig, newSig, newPayload); + await assert.rejects(op.fundAndSend(fundingSource), { + name: 'ProofNotYetValid', + }); + }); + + it('should successfully add a new public key to an existing MSA & disallow duplicate signed payload submission (SignatureAlreadySubmitted)', async function () { + addKeyData = ExtrinsicHelper.api.registry.createType('PalletMsaAddKeyData', payload); + + ownerSig = signPayloadSr25519(keys, addKeyData); + newSig = signPayloadSr25519(secondaryKey, addKeyData); + const addPublicKeyOp = ExtrinsicHelper.addPublicKeyToMsa(keys, ownerSig, newSig, payload); + + const { target: publicKeyEvents } = await addPublicKeyOp.fundAndSend(fundingSource, false); + + assert.notEqual(publicKeyEvents, undefined, 'should have added public key'); + + await assert.rejects( + addPublicKeyOp.fundAndSend(fundingSource), + 'should reject sending the same signed payload twice' + ); + }); + + it('should fail if attempting to add the same key more than once (KeyAlreadyRegistered)', async function () { + const addKeyData = ExtrinsicHelper.api.registry.createType('PalletMsaAddKeyData', payload); + + const ownerSig = signPayloadSr25519(keys, addKeyData); + const newSig = signPayloadSr25519(secondaryKey, addKeyData); + const addPublicKeyOp = ExtrinsicHelper.addPublicKeyToMsa(keys, ownerSig, newSig, payload); + + await assert.rejects(addPublicKeyOp.fundAndSend(fundingSource), { + name: 'KeyAlreadyRegistered', + }); + }); + + it('should allow new keypair to act for/on MSA', async function () { + const thirdKey = createKeys(); + const newPayload = await generateAddKeyPayload({ + ...defaultPayload, + newPublicKey: getUnifiedPublicKey(thirdKey), + }); + addKeyData = ExtrinsicHelper.api.registry.createType('PalletMsaAddKeyData', newPayload); + ownerSig = signPayloadSr25519(secondaryKey, addKeyData); + newSig = signPayloadSr25519(thirdKey, addKeyData); + const op = ExtrinsicHelper.addPublicKeyToMsa(secondaryKey, ownerSig, newSig, newPayload); + // Need to wait for finalization to use the key + const { target: event } = await op.fundAndSend(fundingSource, false); + assert.notEqual(event, undefined, 'should have added public key'); + + // Cleanup + await assert.doesNotReject(ExtrinsicHelper.deletePublicKey(keys, getUnifiedPublicKey(thirdKey)).signAndSend()); + }); + }); + + describe('provider msa', function () { + it('should disallow retiring MSA belonging to a provider', async function () { + const [providerKeys] = await createProviderKeysAndId(fundingSource); + // Make sure we are finalized before trying to retire + await ExtrinsicHelper.waitForFinalization(); + const retireOp = ExtrinsicHelper.retireMsa(providerKeys); + await assert.rejects(retireOp.signAndSend('current'), { + name: 'RpcError', + message: /Custom error: 2/, + }); + }); + }); +}); diff --git a/e2e/msa/msaKeyManagementDelete.test.ts b/e2e/msa/msaKeyManagementDelete.test.ts new file mode 100644 index 0000000000..37ebb47b25 --- /dev/null +++ b/e2e/msa/msaKeyManagementDelete.test.ts @@ -0,0 +1,99 @@ +import '@frequency-chain/api-augment'; +import assert from 'assert'; +import { + createKeys, + signPayloadSr25519, + generateAddKeyPayload, + createProviderKeysAndId, + DOLLARS, + createAndFundKeypairs, +} from '../scaffolding/helpers'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { u64 } from '@polkadot/types'; +import { getFundingSource } from '../scaffolding/funding'; +import { getUnifiedPublicKey } from '@frequency-chain/ethereum-utils'; + +const fundingSource = getFundingSource(import.meta.url); + +describe('MSA Key management: delete keys and retire', function () { + let keys: KeyringPair; + let secondaryKey: KeyringPair; + let msaId: u64; + + before(async function () { + // Generates a msa with two control keys + // Fund all the different keys + [keys, secondaryKey] = await createAndFundKeypairs(fundingSource, ['keys', 'secondaryKey'], 2n * DOLLARS); + + const { target } = await ExtrinsicHelper.createMsa(keys).signAndSend(); + assert.notEqual(target?.data.msaId, undefined, 'MSA Id not in expected event'); + msaId = target!.data.msaId; + + const payload = await generateAddKeyPayload({ + msaId, + newPublicKey: getUnifiedPublicKey(secondaryKey), + }); + const payloadData = ExtrinsicHelper.api.registry.createType('PalletMsaAddKeyData', payload); + const ownerSig = signPayloadSr25519(keys, payloadData); + const newSig = signPayloadSr25519(secondaryKey, payloadData); + const op = ExtrinsicHelper.addPublicKeyToMsa(keys, ownerSig, newSig, payload); + const { target: event } = await op.signAndSend(); + assert.notEqual(event, undefined, 'should have added public key'); + + // Make sure we are finalized before all the tests + await ExtrinsicHelper.waitForFinalization(); + }); + + it('should disallow retiring an MSA with more than one key authorized', async function () { + const retireOp = ExtrinsicHelper.retireMsa(keys); + await assert.rejects(retireOp.signAndSend('current'), { + name: 'RpcError', + message: /Custom error: 3/, + }); + }); + + it('should fail to delete public key for self', async function () { + const op = ExtrinsicHelper.deletePublicKey(keys, getUnifiedPublicKey(keys)); + await assert.rejects(op.signAndSend('current'), { + name: 'RpcError', + message: /Custom error: 4/, + }); + }); + + it("should fail to delete key if not authorized for key's MSA", async function () { + const [providerKeys] = await createProviderKeysAndId(fundingSource, 1n * DOLLARS, false); + const op = ExtrinsicHelper.deletePublicKey(providerKeys, getUnifiedPublicKey(keys)); + await assert.rejects(op.signAndSend('current'), { + name: 'RpcError', + message: /Custom error: 5/, + }); + }); + + it("should test for 'NoKeyExists' error", async function () { + const key = createKeys('nothing key'); + const op = ExtrinsicHelper.deletePublicKey(keys, getUnifiedPublicKey(key)); + await assert.rejects(op.signAndSend('current'), { + name: 'RpcError', + message: /Custom error: 1/, + }); + }); + + it('should delete secondary key', async function () { + const op = ExtrinsicHelper.deletePublicKey(keys, getUnifiedPublicKey(secondaryKey)); + const { target: event } = await op.signAndSend(); + assert.notEqual(event, undefined, 'should have returned PublicKeyDeleted event'); + }); + + it('should allow retiring MSA after additional keys have been deleted', async function () { + const retireMsaOp = ExtrinsicHelper.retireMsa(keys); + + // Make sure we are finalized removing before trying to retire + await ExtrinsicHelper.waitForFinalization(); + + const { target: event, eventMap } = await retireMsaOp.signAndSend('current'); + + assert.notEqual(eventMap['msa.PublicKeyDeleted'], undefined, 'should have deleted public key (retired)'); + assert.notEqual(event, undefined, 'should have retired msa'); + }); +}); diff --git a/e2e/msa/msaTokens.test.ts b/e2e/msa/msaTokens.test.ts new file mode 100644 index 0000000000..86a63d5a15 --- /dev/null +++ b/e2e/msa/msaTokens.test.ts @@ -0,0 +1,107 @@ +import '@frequency-chain/api-augment'; +import assert from 'assert'; +import { ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { ethereumAddressToKeyringPair } from '@frequency-chain/ethereum-utils'; +import { getFundingSource } from '../scaffolding/funding'; +import { H160 } from '@polkadot/types/interfaces'; +import { bnToU8a, hexToU8a, stringToU8a } from '@polkadot/util'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { keccak256AsU8a } from '@polkadot/util-crypto'; +import { getExistentialDeposit } from '../scaffolding/helpers'; + +const fundingSource = getFundingSource(import.meta.url); + +/** + * + * @param msaId + * @returns Ethereum address generated from the MSA ID + * + * This function generates an Ethereum address based on the provided MSA ID, + * using a specific hashing algorithm and a salt value, as follows: + * + * Domain prefix: 0xD9 + * MSA ID: Big-endian bytes representation of the 64-bit MSA ID + * Salt: Keccak256 hash of the string "MSA Generated" + * + * Hash = keccak256(0xD9 || MSA ID bytes || Salt) + * + * Address = Hash[-20:] + */ +function generateMsaAddress(msaId: string | number | bigint): H160 { + const msa64 = ExtrinsicHelper.api.registry.createType('u64', msaId); + const msaBytes = bnToU8a(msa64.toBn(), { isLe: false, bitLength: 64 }); + const salt = keccak256AsU8a(stringToU8a('MSA Generated')); + const combined = new Uint8Array([0xd9, ...msaBytes, ...salt]); + const hash = keccak256AsU8a(combined); + + return ExtrinsicHelper.api.registry.createType('H160', hash.slice(-20)); +} + +describe('MSAs Holding Tokens', function () { + const MSA_ID_1234 = 1234; // MSA ID for testing + const CHECKSUMMED_ETH_ADDR_1234 = '0x65928b9a88Db189Eea76F72d86128Af834d64c32'; // Checksummed Ethereum address for MSA ID 1234 + let ethKeys: KeyringPair; + let ethAddress20: H160; + + before(async function () { + ethAddress20 = ExtrinsicHelper.apiPromise.createType('H160', hexToU8a(CHECKSUMMED_ETH_ADDR_1234)); + ethKeys = ethereumAddressToKeyringPair(ethAddress20); + }); + + describe('getEthereumAddressForMsaId', function () { + it('should return the correct address for a given MSA ID', async function () { + const expectedAddress = CHECKSUMMED_ETH_ADDR_1234.toLowerCase(); + const result: any = await ExtrinsicHelper.apiPromise.call.msaRuntimeApi.getEthereumAddressForMsaId(MSA_ID_1234); + const accountId = result?.accountId; + const accountIdChecksummed = result?.accountIdChecksummed; + + assert.equal(accountId.toHex(), expectedAddress, `Expected address ${expectedAddress}, but got ${accountId}`); + assert.equal( + accountIdChecksummed.toString(), + CHECKSUMMED_ETH_ADDR_1234, + `Expected checksummed address ${CHECKSUMMED_ETH_ADDR_1234}, but got ${accountIdChecksummed.toString()}` + ); + }); + + it('should validate the Ethereum address for an MSA ID', async function () { + const isValid = await ExtrinsicHelper.apiPromise.call.msaRuntimeApi.validateEthAddressForMsa( + generateMsaAddress(MSA_ID_1234), + MSA_ID_1234 + ); + assert.equal(isValid, true, 'Expected the Ethereum address to be valid for the given MSA ID'); + }); + + it('should fail to validate the Ethereum address for an incorrect MSA ID', async function () { + const isValid = await ExtrinsicHelper.apiPromise.call.msaRuntimeApi.validateEthAddressForMsa( + CHECKSUMMED_ETH_ADDR_1234, + 4321 + ); + assert.equal(isValid, false, 'Expected the Ethereum address to be invalid for a different MSA ID'); + }); + }); + + describe('Send tokens to MSA', function () { + it('should send tokens to the MSA', async function () { + const ed = await getExistentialDeposit(); + const transferAmount = 1n + ed; + let accountData = await ExtrinsicHelper.getAccountInfo(ethKeys); + const initialBalance = accountData.data.free.toBigInt(); + const op = ExtrinsicHelper.transferFunds( + fundingSource, + ethereumAddressToKeyringPair(ethAddress20), + transferAmount + ); + + const { target: transferEvent } = await op.fundAndSend(fundingSource); + assert.notEqual(transferEvent, undefined, 'should have transferred tokens'); + + accountData = await ExtrinsicHelper.getAccountInfo(ethKeys); + const finalBalance = accountData.data.free.toBigInt(); + assert.equal( + finalBalance, + initialBalance + transferAmount, + 'Final balance should be increased by transfer amount' + ); + }); + }); +}); diff --git a/e2e/package-lock.json b/e2e/package-lock.json new file mode 100644 index 0000000000..a4e6ea0a2a --- /dev/null +++ b/e2e/package-lock.json @@ -0,0 +1,9619 @@ +{ + "name": "frequency-e2e-tests", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "frequency-e2e-tests", + "version": "1.0.0", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@frequency-chain/api-augment": "file:../js/api-augment/dist/frequency-chain-api-augment-0.0.0.tgz", + "@frequency-chain/ethereum-utils": "file:../js/ethereum-utils/dist/frequency-chain-ethereum-utils-0.0.0.tgz", + "@helia/unixfs": "^5.0.3", + "@noble/curves": "^1.9.1", + "@polkadot-api/merkleize-metadata": "^1.1.17", + "@polkadot/api": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/util": "13.5.1", + "ethers": "^6.14.3", + "helia": "^5.4.2", + "multiformats": "^13.3.6", + "rxjs": "^7.8.2", + "workerpool": "^9.3.2" + }, + "devDependencies": { + "@eslint/js": "^9.27.0", + "@types/mocha": "^10.0.10", + "eslint": "^9.27.0", + "eslint-plugin-mocha": "^11.1.0", + "glob": "^11.0.2", + "globals": "^16.2.0", + "mocha": "^11.5.0", + "prettier": "^3.5.3", + "sinon": "^20.0.0", + "tsx": "^4.19.4", + "typescript": "^5.8.3", + "typescript-eslint": "^8.33.0" + }, + "optionalDependencies": { + "@esbuild/linux-x64": "0.25.5" + } + }, + "node_modules/@achingbrain/http-parser-js": { + "version": "0.5.9", + "license": "MIT", + "dependencies": { + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@achingbrain/nat-port-mapper": { + "version": "4.0.2", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@achingbrain/ssdp": "^4.1.0", + "@chainsafe/is-ip": "^2.0.2", + "@libp2p/logger": "^5.0.1", + "abort-error": "^1.0.0", + "err-code": "^3.0.1", + "netmask": "^2.0.2", + "p-defer": "^4.0.0", + "race-signal": "^1.1.0", + "xml2js": "^0.6.0" + } + }, + "node_modules/@achingbrain/ssdp": { + "version": "4.2.2", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "abort-error": "^1.0.0", + "freeport-promise": "^2.0.0", + "merge-options": "^3.0.4", + "xml2js": "^0.6.2" + } + }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "license": "MIT" + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@assemblyscript/loader": { + "version": "0.9.4", + "license": "Apache-2.0" + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.27.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.27.1", + "license": "MIT", + "peer": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.1", + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helpers": "^7.27.1", + "@babel/parser": "^7.27.1", + "@babel/template": "^7.27.1", + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.27.1", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/parser": "^7.27.1", + "@babel/types": "^7.27.1", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "license": "ISC", + "peer": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.27.1", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.1", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.27.2", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/types": "^7.27.1" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.27.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.27.1", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.1", + "@babel/parser": "^7.27.1", + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse--for-generate-function-map": { + "name": "@babel/traverse", + "version": "7.27.1", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.1", + "@babel/parser": "^7.27.1", + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse--for-generate-function-map/node_modules/globals": { + "version": "11.12.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.27.1", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@chainsafe/as-chacha20poly1305": { + "version": "0.1.0", + "license": "Apache-2.0" + }, + "node_modules/@chainsafe/as-sha256": { + "version": "1.0.1", + "license": "Apache-2.0" + }, + "node_modules/@chainsafe/is-ip": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/@chainsafe/libp2p-noise": { + "version": "16.1.3", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@chainsafe/as-chacha20poly1305": "^0.1.0", + "@chainsafe/as-sha256": "^1.0.0", + "@libp2p/crypto": "^5.0.0", + "@libp2p/interface": "^2.9.0", + "@libp2p/peer-id": "^5.0.0", + "@noble/ciphers": "^1.1.3", + "@noble/curves": "^1.1.0", + "@noble/hashes": "^1.3.1", + "it-length-prefixed": "^10.0.1", + "it-length-prefixed-stream": "^2.0.1", + "it-pair": "^2.0.6", + "it-pipe": "^3.0.1", + "it-stream-types": "^2.0.1", + "protons-runtime": "^5.5.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^5.0.0", + "wherearewe": "^2.0.1" + } + }, + "node_modules/@chainsafe/libp2p-yamux": { + "version": "7.0.1", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^2.0.0", + "@libp2p/utils": "^6.0.0", + "get-iterator": "^2.0.1", + "it-foreach": "^2.0.6", + "it-pushable": "^3.2.3", + "it-stream-types": "^2.0.1", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/@chainsafe/netmask": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "@chainsafe/is-ip": "^2.0.1" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", + "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", + "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", + "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", + "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.4", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", + "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", + "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", + "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", + "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", + "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", + "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", + "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", + "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", + "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", + "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", + "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", + "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", + "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", + "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", + "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", + "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", + "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", + "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", + "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", + "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.20.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.2.2", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.14.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.27.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.14.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@frequency-chain/api-augment": { + "version": "0.0.0", + "resolved": "file:../js/api-augment/dist/frequency-chain-api-augment-0.0.0.tgz", + "integrity": "sha512-4nM1gwXyFws6PdAEyV2RJKbr3Mz+APekbAlsPGd2PSRvZTFOxywdugn8sLnflrb9YmmN4jW1+aMqNtZq/J8t8A==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/api": "^16.1.1", + "@polkadot/rpc-provider": "^16.1.1", + "@polkadot/types": "^16.1.1", + "globals": "^16.2.0" + } + }, + "node_modules/@frequency-chain/ethereum-utils": { + "version": "0.0.0", + "resolved": "file:../js/ethereum-utils/dist/frequency-chain-ethereum-utils-0.0.0.tgz", + "integrity": "sha512-SF1KNDZub8LMywyFpqZUpTq7rejc3Nh1VmLXz+y32FQ7UwrF+Vs/WiqXj/uzGhaSZtQeP6rIJbbtZz2h6LJRdw==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/api": "^16.1.1", + "@polkadot/util": "13.5.1", + "ethers": "^6.14.3" + } + }, + "node_modules/@helia/bitswap": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@helia/bitswap/-/bitswap-2.1.2.tgz", + "integrity": "sha512-gleOYd5jJPA0jVkm/LKkfEh+Z/TQNviv4e8pCdPlD3V/Sg6q0htdO/ttlAlMyYGY6187fwsCP+fZkqWNao/h9Q==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@helia/interface": "^5.3.2", + "@helia/utils": "^1.3.2", + "@libp2p/interface": "^2.2.1", + "@libp2p/logger": "^5.1.4", + "@libp2p/peer-collections": "^6.0.12", + "@libp2p/utils": "^6.2.1", + "@multiformats/multiaddr": "^12.3.3", + "any-signal": "^4.1.1", + "interface-blockstore": "^5.3.1", + "interface-store": "^6.0.2", + "it-drain": "^3.0.7", + "it-length-prefixed": "^10.0.1", + "it-map": "^3.1.1", + "it-pipe": "^3.0.1", + "it-take": "^3.0.6", + "multiformats": "^13.3.1", + "p-defer": "^4.0.1", + "progress-events": "^1.0.1", + "protons-runtime": "^5.5.0", + "race-event": "^1.3.0", + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@helia/block-brokers": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@helia/block-brokers/-/block-brokers-4.2.2.tgz", + "integrity": "sha512-2Iq5basphEn8RcRK+wMiSfy5EJWgjI69wKH8CB66dSyaiduV7etP8E69eP5oGv43ShPycel4Xnmb2mNl6WWp5w==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@helia/bitswap": "^2.1.2", + "@helia/interface": "^5.3.2", + "@helia/utils": "^1.3.2", + "@libp2p/interface": "^2.2.1", + "@libp2p/utils": "^6.2.1", + "@multiformats/multiaddr": "^12.3.3", + "@multiformats/multiaddr-matcher": "^1.6.0", + "@multiformats/multiaddr-to-uri": "^11.0.0", + "interface-blockstore": "^5.3.1", + "interface-store": "^6.0.2", + "multiformats": "^13.3.1", + "progress-events": "^1.0.1" + } + }, + "node_modules/@helia/delegated-routing-v1-http-api-client": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@helia/delegated-routing-v1-http-api-client/-/delegated-routing-v1-http-api-client-4.2.5.tgz", + "integrity": "sha512-fFqVhs7a4TnpKQ1cZ4im3tj53v+8UZLFkQo85otl/GpbIVBmBoGbjkDHGPv4UdjJ2lmYM/cRdnHsYbfjuc5pwA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^2.2.0", + "@libp2p/logger": "^5.0.1", + "@libp2p/peer-id": "^5.0.1", + "@multiformats/multiaddr": "^12.3.1", + "any-signal": "^4.1.1", + "browser-readablestream-to-it": "^2.0.7", + "ipns": "^10.0.0", + "it-first": "^3.0.6", + "it-map": "^3.1.1", + "it-ndjson": "^1.0.7", + "multiformats": "^13.3.0", + "p-defer": "^4.0.1", + "p-queue": "^8.0.1", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@helia/interface": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/@helia/interface/-/interface-5.3.2.tgz", + "integrity": "sha512-+NOQrBxsz6i0FOsz16OgTlGAcyQ+cSYGzd9VJE7cMMrrGo9IcDEKp5Kvh980Ajg1LJFgeqYyqmxefnPExUUsBg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^2.2.1", + "@multiformats/dns": "^1.0.6", + "@multiformats/multiaddr": "^12.4.0", + "interface-blockstore": "^5.3.1", + "interface-datastore": "^8.3.1", + "interface-store": "^6.0.2", + "multiformats": "^13.3.1", + "progress-events": "^1.0.1" + } + }, + "node_modules/@helia/routers": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@helia/routers/-/routers-3.1.2.tgz", + "integrity": "sha512-Fq5mj7JkeDVHXUak+HJYIK7TGjKGErvWzyjjcOMNrCk0UyWCfLcw3iFwWWfkMOP+e8IN7bgPxXVxxyOir9iL+w==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@helia/delegated-routing-v1-http-api-client": "^4.2.1", + "@helia/interface": "^5.3.2", + "@libp2p/interface": "^2.2.1", + "@libp2p/peer-id": "^5.0.8", + "@multiformats/uri-to-multiaddr": "^9.0.1", + "ipns": "^10.0.0", + "it-first": "^3.0.6", + "it-map": "^3.1.1", + "multiformats": "^13.3.1", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@helia/unixfs": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@helia/unixfs/-/unixfs-5.0.3.tgz", + "integrity": "sha512-Z9R1l2Dso4CtgGqavwko2nEnNSSoOB8uWnkmmOE7C47uzQ2W/d5YIDmgPkptrSkT7h/OPH2O1ctKgLqsSLIAPQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@helia/interface": "^5.3.2", + "@ipld/dag-pb": "^4.1.3", + "@libp2p/interface": "^2.2.1", + "@libp2p/logger": "^5.1.4", + "@libp2p/utils": "^6.6.0", + "@multiformats/murmur3": "^2.1.8", + "hamt-sharding": "^3.0.6", + "interface-blockstore": "^5.3.1", + "ipfs-unixfs": "^11.2.0", + "ipfs-unixfs-exporter": "^13.6.1", + "ipfs-unixfs-importer": "^15.3.1", + "it-all": "^3.0.6", + "it-first": "^3.0.6", + "it-glob": "^3.0.1", + "it-last": "^3.0.6", + "it-pipe": "^3.0.1", + "multiformats": "^13.3.1", + "progress-events": "^1.0.1", + "sparse-array": "^1.3.2", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@helia/utils": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@helia/utils/-/utils-1.3.2.tgz", + "integrity": "sha512-epMlRqLyJ95NDem4jc6kNRUlWkW5+HOwxvgJzOn70mMdXFkyYIOx24BpZurCFi+Cg6/k9vSfKsU5V1teWxYfRQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@helia/interface": "^5.3.2", + "@ipld/dag-cbor": "^9.2.2", + "@ipld/dag-json": "^10.2.3", + "@ipld/dag-pb": "^4.1.3", + "@libp2p/interface": "^2.5.0", + "@libp2p/logger": "^5.1.8", + "@libp2p/utils": "^6.5.1", + "@multiformats/dns": "^1.0.6", + "@multiformats/multiaddr": "^12.4.0", + "any-signal": "^4.1.1", + "blockstore-core": "^5.0.2", + "cborg": "^4.2.6", + "interface-blockstore": "^5.3.1", + "interface-datastore": "^8.3.1", + "interface-store": "^6.0.2", + "it-drain": "^3.0.7", + "it-filter": "^3.1.1", + "it-foreach": "^2.1.1", + "it-merge": "^3.0.5", + "mortice": "^3.0.6", + "multiformats": "^13.3.1", + "p-defer": "^4.0.1", + "progress-events": "^1.0.1", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@ipld/dag-cbor": { + "version": "9.2.2", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "cborg": "^4.0.0", + "multiformats": "^13.1.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@ipld/dag-json": { + "version": "10.2.3", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "cborg": "^4.0.0", + "multiformats": "^13.1.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@ipld/dag-pb": { + "version": "4.1.3", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "multiformats": "^13.1.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@ipshipyard/libp2p-auto-tls": { + "version": "1.0.0", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@chainsafe/is-ip": "^2.0.2", + "@libp2p/crypto": "^5.0.9", + "@libp2p/http-fetch": "^2.1.0", + "@libp2p/interface": "^2.4.0", + "@libp2p/interface-internal": "^2.2.2", + "@libp2p/keychain": "^5.0.12", + "@libp2p/utils": "^6.3.1", + "@multiformats/multiaddr": "^12.3.3", + "@multiformats/multiaddr-matcher": "^1.6.0", + "@peculiar/x509": "^1.12.3", + "acme-client": "^5.4.0", + "any-signal": "^4.1.1", + "delay": "^6.0.0", + "interface-datastore": "^8.3.1", + "multiformats": "^13.3.1", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@ipshipyard/node-datachannel": { + "version": "0.26.6", + "hasInstallScript": true, + "license": "MPL 2.0", + "dependencies": { + "prebuild-install": "^7.1.3" + }, + "engines": { + "node": ">=18.20.0" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/ttlcache": { + "version": "1.4.1", + "license": "ISC", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "license": "ISC", + "peer": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "license": "MIT", + "peer": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "license": "MIT", + "peer": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "license": "MIT", + "peer": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "license": "MIT", + "peer": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "license": "MIT", + "peer": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/create-cache-key-function": { + "version": "29.7.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "license": "MIT", + "peer": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "license": "MIT", + "peer": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "license": "MIT" + }, + "node_modules/@libp2p/autonat": { + "version": "2.0.33", + "resolved": "https://registry.npmjs.org/@libp2p/autonat/-/autonat-2.0.33.tgz", + "integrity": "sha512-IND06PxRrw7Y4GuPqJENQXwr/eyyXkSMaOYdKhElJydGNddn9mkVqu++z+DCRPt0xUFLL4qYwXbm93lC2gtJyw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^2.10.2", + "@libp2p/interface-internal": "^2.3.14", + "@libp2p/peer-collections": "^6.0.30", + "@libp2p/peer-id": "^5.1.5", + "@libp2p/utils": "^6.6.5", + "@multiformats/multiaddr": "^12.4.0", + "any-signal": "^4.1.1", + "it-protobuf-stream": "^2.0.2", + "multiformats": "^13.3.4", + "protons-runtime": "^5.5.0", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/@libp2p/bootstrap": { + "version": "11.0.38", + "resolved": "https://registry.npmjs.org/@libp2p/bootstrap/-/bootstrap-11.0.38.tgz", + "integrity": "sha512-8yucPrXlBaRsPzhB35UI12leegCHyUPOCHYddwhO6PdRW1ofnniuJ+I62FBkZ221iKA84V4s9bZGaLv3VRG3nQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^2.10.2", + "@libp2p/interface-internal": "^2.3.14", + "@libp2p/peer-id": "^5.1.5", + "@multiformats/mafmt": "^12.1.6", + "@multiformats/multiaddr": "^12.4.0" + } + }, + "node_modules/@libp2p/circuit-relay-v2": { + "version": "3.2.14", + "resolved": "https://registry.npmjs.org/@libp2p/circuit-relay-v2/-/circuit-relay-v2-3.2.14.tgz", + "integrity": "sha512-l83ypEQyDVCnhrtrM2k7CjSLiHE6s4UeqYS0z5gRjAkmWbmayjiPSvXhEXs/6t5AAuC7l764ZREd8Z1lrKjW4g==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^5.1.4", + "@libp2p/interface": "^2.10.2", + "@libp2p/interface-internal": "^2.3.14", + "@libp2p/peer-collections": "^6.0.30", + "@libp2p/peer-id": "^5.1.5", + "@libp2p/peer-record": "^8.0.30", + "@libp2p/utils": "^6.6.5", + "@multiformats/multiaddr": "^12.4.0", + "@multiformats/multiaddr-matcher": "^1.7.2", + "any-signal": "^4.1.1", + "it-protobuf-stream": "^2.0.2", + "it-stream-types": "^2.0.2", + "multiformats": "^13.3.4", + "nanoid": "^5.1.5", + "progress-events": "^1.0.1", + "protons-runtime": "^5.5.0", + "retimeable-signal": "^1.0.1", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/config": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@libp2p/config/-/config-1.1.9.tgz", + "integrity": "sha512-amTyep6cENhs69r0fWDVMwD/T2eP8ZMuaa5J85lePmlVd+lv2GWIjf1fE8HdvooeHbySAB4Na5Pforvmmtvf+A==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^5.1.4", + "@libp2p/interface": "^2.10.2", + "@libp2p/keychain": "^5.2.4", + "@libp2p/logger": "^5.1.18", + "interface-datastore": "^8.3.1" + } + }, + "node_modules/@libp2p/crypto": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-5.1.4.tgz", + "integrity": "sha512-w9UNkjX7xhExr9PJeFeu6xy6q8ZR0FhoauI1qnN+dZsAlSQhRMzPvMdMJoSoGu/Ha9BbJ3Z2kpSS28GXHnL0rg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^2.10.2", + "@noble/curves": "^1.9.1", + "@noble/hashes": "^1.8.0", + "multiformats": "^13.3.4", + "protons-runtime": "^5.5.0", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/dcutr": { + "version": "2.0.32", + "resolved": "https://registry.npmjs.org/@libp2p/dcutr/-/dcutr-2.0.32.tgz", + "integrity": "sha512-XOzIWKSZPhCgl4g5T+gG33Edup+SI1XpC4ZJiqCZ11160ue/amgewOE9KOvrNMLL3QqQ1ff/j3XgnH8ZuS8dUw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^2.10.2", + "@libp2p/interface-internal": "^2.3.14", + "@libp2p/utils": "^6.6.5", + "@multiformats/multiaddr": "^12.4.0", + "@multiformats/multiaddr-matcher": "^1.7.2", + "delay": "^6.0.0", + "it-protobuf-stream": "^2.0.2", + "protons-runtime": "^5.5.0", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/@libp2p/http-fetch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@libp2p/http-fetch/-/http-fetch-2.2.2.tgz", + "integrity": "sha512-dMPo2pe2h/AHAljgwDEErdiB8JbiJM5b0LzuF/Yq4HcplfJZf33VtzUHN1n8x+3K+F8fntWUKN30SwSisSoVaw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@achingbrain/http-parser-js": "^0.5.8", + "@libp2p/crypto": "^5.0.6", + "@libp2p/interface": "^2.2.0", + "@libp2p/interface-internal": "^2.0.10", + "@libp2p/peer-id": "^5.0.7", + "@multiformats/multiaddr": "^12.3.0", + "@multiformats/multiaddr-to-uri": "^11.0.0", + "http-cookie-agent": "^6.0.7", + "p-defer": "^4.0.1", + "tough-cookie": "^5.0.0", + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0", + "undici": "^6.21.0" + } + }, + "node_modules/@libp2p/identify": { + "version": "3.0.32", + "resolved": "https://registry.npmjs.org/@libp2p/identify/-/identify-3.0.32.tgz", + "integrity": "sha512-5BEDG/0mkS45RVPoHcg9USmOh6v7MmRDOg8lPA2Bx0SAIRIPwsyaLKky3Fw6zfHJHkwBdqAb9hvPhm8oqJRrfw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^5.1.4", + "@libp2p/interface": "^2.10.2", + "@libp2p/interface-internal": "^2.3.14", + "@libp2p/peer-id": "^5.1.5", + "@libp2p/peer-record": "^8.0.30", + "@libp2p/utils": "^6.6.5", + "@multiformats/multiaddr": "^12.4.0", + "@multiformats/multiaddr-matcher": "^1.7.2", + "it-drain": "^3.0.9", + "it-parallel": "^3.0.11", + "it-protobuf-stream": "^2.0.2", + "protons-runtime": "^5.5.0", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/interface": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-2.10.2.tgz", + "integrity": "sha512-aQ9jZaZZq9/y9NFax0K8Z6tTqLg3Qsyv1EY0O+eFrltmIkoUOCeCAybUTiOTwieknznHc9AMrHifaK3BYb+bqg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@multiformats/multiaddr": "^12.4.0", + "it-pushable": "^3.2.3", + "it-stream-types": "^2.0.2", + "multiformats": "^13.3.4", + "progress-events": "^1.0.1", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/@libp2p/interface-internal": { + "version": "2.3.14", + "resolved": "https://registry.npmjs.org/@libp2p/interface-internal/-/interface-internal-2.3.14.tgz", + "integrity": "sha512-HPd5gTXADnWD6VoklBRCUtN+iyEc0a0kZiWZ7Rg8cnNl2o61OVgCqO95KMaeAg8PKU98HoPRxkQnupVmZ7pyuA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^2.10.2", + "@libp2p/peer-collections": "^6.0.30", + "@multiformats/multiaddr": "^12.4.0", + "progress-events": "^1.0.1" + } + }, + "node_modules/@libp2p/kad-dht": { + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@libp2p/kad-dht/-/kad-dht-15.1.2.tgz", + "integrity": "sha512-MlZxKCjJnpUeY+LnBlmREYOOupL+uemdO9rDJpvY19aj4tAfUMSbckOgJ24wH762D3rKPhsWeb7NJ3I3J+HZ8w==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^5.1.4", + "@libp2p/interface": "^2.10.2", + "@libp2p/interface-internal": "^2.3.14", + "@libp2p/peer-collections": "^6.0.30", + "@libp2p/peer-id": "^5.1.5", + "@libp2p/ping": "^2.0.32", + "@libp2p/record": "^4.0.6", + "@libp2p/utils": "^6.6.5", + "@multiformats/multiaddr": "^12.4.0", + "any-signal": "^4.1.1", + "interface-datastore": "^8.3.1", + "it-all": "^3.0.8", + "it-drain": "^3.0.9", + "it-length": "^3.0.8", + "it-length-prefixed": "^10.0.1", + "it-map": "^3.1.3", + "it-merge": "^3.0.11", + "it-parallel": "^3.0.11", + "it-pipe": "^3.0.1", + "it-protobuf-stream": "^2.0.2", + "it-pushable": "^3.2.3", + "it-take": "^3.0.8", + "mortice": "^3.0.6", + "multiformats": "^13.3.4", + "p-defer": "^4.0.1", + "p-event": "^6.0.1", + "progress-events": "^1.0.1", + "protons-runtime": "^5.5.0", + "race-signal": "^1.1.3", + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/keychain": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@libp2p/keychain/-/keychain-5.2.4.tgz", + "integrity": "sha512-re9+6ayALUqym+Y82wCDYLqg1B7tv0BV2DundKcLsLxPljrp0gLZu3uX9wzLGhHG8gisCNdwYZDvjS9eMWketg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^5.1.4", + "@libp2p/interface": "^2.10.2", + "@libp2p/utils": "^6.6.5", + "@noble/hashes": "^1.8.0", + "asn1js": "^3.0.6", + "interface-datastore": "^8.3.1", + "multiformats": "^13.3.4", + "sanitize-filename": "^1.6.3", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/logger": { + "version": "5.1.18", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-5.1.18.tgz", + "integrity": "sha512-venbhUr6riuMTu8c8bnphZ27XcOuDDq6fdYaRVggokQpwSC6QRejlaFnY8w0K1ZuwFv9uc19UA2ELtOBQ26AJw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^2.10.2", + "@multiformats/multiaddr": "^12.4.0", + "interface-datastore": "^8.3.1", + "multiformats": "^13.3.4", + "weald": "^1.0.4" + } + }, + "node_modules/@libp2p/mdns": { + "version": "11.0.38", + "resolved": "https://registry.npmjs.org/@libp2p/mdns/-/mdns-11.0.38.tgz", + "integrity": "sha512-/ILkFv4aV35khb7Bw+RSUb2zHYBeUDADxNLWNemG1oXBCpP29dO4prCSPMu1X7Co5giTCAFaQv6qE990+uqGlg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^2.10.2", + "@libp2p/interface-internal": "^2.3.14", + "@libp2p/peer-id": "^5.1.5", + "@libp2p/utils": "^6.6.5", + "@multiformats/multiaddr": "^12.4.0", + "@types/multicast-dns": "^7.2.4", + "dns-packet": "^5.6.1", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/@libp2p/mplex": { + "version": "11.0.38", + "resolved": "https://registry.npmjs.org/@libp2p/mplex/-/mplex-11.0.38.tgz", + "integrity": "sha512-D9nfe7M38SMxwNYgDEvjkZW6C5IEjbdbSUOSdIjLScfygyicepYql1xFOZOb0UHfHlbeO0CAJo/ICMJdHCRpMg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^2.10.2", + "@libp2p/utils": "^6.6.5", + "it-pipe": "^3.0.1", + "it-pushable": "^3.2.3", + "it-stream-types": "^2.0.2", + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/multistream-select": { + "version": "6.0.25", + "resolved": "https://registry.npmjs.org/@libp2p/multistream-select/-/multistream-select-6.0.25.tgz", + "integrity": "sha512-4vTw0EhIoXU52PmZODgD7ZeP15j8KVmh0GkDIWEyztmfSgQ0YwqoX0DTqcFvzO4ucbhJAHjuDGj25NbuBxcHzA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^2.10.2", + "it-length-prefixed": "^10.0.1", + "it-length-prefixed-stream": "^2.0.2", + "it-stream-types": "^2.0.2", + "p-defer": "^4.0.1", + "race-signal": "^1.1.3", + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/peer-collections": { + "version": "6.0.30", + "resolved": "https://registry.npmjs.org/@libp2p/peer-collections/-/peer-collections-6.0.30.tgz", + "integrity": "sha512-oN+ns04ka8X4gUdgXcxNwRsSuno2M9sWjrvOQ/L+TM96/H2dRK9wq/6Kva9rUQdszaP5rT8ooT2HjbyUt/omSw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^2.10.2", + "@libp2p/peer-id": "^5.1.5", + "@libp2p/utils": "^6.6.5", + "multiformats": "^13.3.4" + } + }, + "node_modules/@libp2p/peer-id": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-5.1.5.tgz", + "integrity": "sha512-WKlZLKkmzfAANR8mytvYz8hY8YOukMG5t4svsXvLMaVkWPFg9Mm+USTwVCCWRXOXAGQSxLuwpvzwOBJAZMb5IA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^5.1.4", + "@libp2p/interface": "^2.10.2", + "multiformats": "^13.3.4", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/peer-record": { + "version": "8.0.30", + "resolved": "https://registry.npmjs.org/@libp2p/peer-record/-/peer-record-8.0.30.tgz", + "integrity": "sha512-H7pJ5+qKzeMhIyO1JOPIrVsi3DTNfKUM4jYyUTi+o4X3a0ai9BlqQCmv+s/L6lOiziXwzU4URXjqiJvPjZKx6w==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^5.1.4", + "@libp2p/interface": "^2.10.2", + "@libp2p/peer-id": "^5.1.5", + "@libp2p/utils": "^6.6.5", + "@multiformats/multiaddr": "^12.4.0", + "multiformats": "^13.3.4", + "protons-runtime": "^5.5.0", + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/peer-store": { + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/@libp2p/peer-store/-/peer-store-11.2.2.tgz", + "integrity": "sha512-WW3SoGRVQ79uAHerjuOf8X/wYvRQvUH0JIiX6KO7QPuBuXENt7GQFyYx8QZKhilab5tQayZLIkNhOxCl/GIxBg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^5.1.4", + "@libp2p/interface": "^2.10.2", + "@libp2p/peer-id": "^5.1.5", + "@libp2p/peer-record": "^8.0.30", + "@multiformats/multiaddr": "^12.4.0", + "interface-datastore": "^8.3.1", + "it-all": "^3.0.8", + "mortice": "^3.0.6", + "multiformats": "^13.3.4", + "protons-runtime": "^5.5.0", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/ping": { + "version": "2.0.32", + "resolved": "https://registry.npmjs.org/@libp2p/ping/-/ping-2.0.32.tgz", + "integrity": "sha512-QdWg9PO2++ABHvQQTLnDtsAykQdUXWXCNRMOOKdgcReKDAaxw+M6SzTVIWKiAgBHBz2M6NSgkLuxIeXZFpcwpQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^5.1.4", + "@libp2p/interface": "^2.10.2", + "@libp2p/interface-internal": "^2.3.14", + "@multiformats/multiaddr": "^12.4.0", + "it-byte-stream": "^2.0.2", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/record": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@libp2p/record/-/record-4.0.6.tgz", + "integrity": "sha512-J1fWvecE2U2NhxvDyiP6BJmxJaGpzFpC6a3RxB00Az+lmF7lJuva3Uc7/eO+8V++k6KI60iHLRI0Zb+9t/2xig==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "protons-runtime": "^5.5.0", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/tcp": { + "version": "10.1.13", + "resolved": "https://registry.npmjs.org/@libp2p/tcp/-/tcp-10.1.13.tgz", + "integrity": "sha512-wa1che3+Tv9wTkuWYNp1+Vt/vUJ1winsP2VJefqtJCPPo+1XnT1ZmAFlux0Egb1lW284x2YBP32PQxw8hSScbg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^2.10.2", + "@libp2p/utils": "^6.6.5", + "@multiformats/multiaddr": "^12.4.0", + "@multiformats/multiaddr-matcher": "^1.7.2", + "@types/sinon": "^17.0.4", + "p-defer": "^4.0.1", + "p-event": "^6.0.1", + "progress-events": "^1.0.1", + "race-event": "^1.3.0", + "stream-to-it": "^1.0.1" + } + }, + "node_modules/@libp2p/tls": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@libp2p/tls/-/tls-2.2.3.tgz", + "integrity": "sha512-UXzkTz4ELQSKz/Kr110OLhF21Y5Gtbd2kM3WHD1PRr/C3lf0nhaoVTMbXAd8fqtN07BVh5nvovOvxV7XTWHhMQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^5.1.4", + "@libp2p/interface": "^2.10.2", + "@libp2p/peer-id": "^5.1.5", + "@peculiar/asn1-schema": "^2.3.15", + "@peculiar/asn1-x509": "^2.3.15", + "@peculiar/webcrypto": "^1.5.0", + "@peculiar/x509": "^1.12.3", + "asn1js": "^3.0.6", + "it-queueless-pushable": "^2.0.1", + "it-stream-types": "^2.0.2", + "protons-runtime": "^5.5.0", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/upnp-nat": { + "version": "3.1.16", + "resolved": "https://registry.npmjs.org/@libp2p/upnp-nat/-/upnp-nat-3.1.16.tgz", + "integrity": "sha512-XBY88LSQzcjnRfMiLHmd1My6jNKh19Snlm79mEOBkniemkO59pLzC3FEqB1vIsE5/B44TdAt0Kzn7je5LUYFnQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@achingbrain/nat-port-mapper": "^4.0.2", + "@chainsafe/is-ip": "^2.1.0", + "@libp2p/interface": "^2.10.2", + "@libp2p/interface-internal": "^2.3.14", + "@libp2p/utils": "^6.6.5", + "@multiformats/multiaddr": "^12.4.0", + "@multiformats/multiaddr-matcher": "^1.7.2", + "p-defer": "^4.0.1", + "race-signal": "^1.1.3" + } + }, + "node_modules/@libp2p/utils": { + "version": "6.6.5", + "resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-6.6.5.tgz", + "integrity": "sha512-QU0dpwNv2bDqUsSXe/5kpKi7gl0CDZC9eSQoueQb9eH4ePVh7SvQjt8gCq6zF6aDHfJ+h/trAKSRk8BiPWKSRA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@chainsafe/is-ip": "^2.1.0", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/crypto": "^5.1.4", + "@libp2p/interface": "^2.10.2", + "@libp2p/logger": "^5.1.18", + "@multiformats/multiaddr": "^12.4.0", + "@sindresorhus/fnv1a": "^3.1.0", + "any-signal": "^4.1.1", + "delay": "^6.0.0", + "get-iterator": "^2.0.1", + "is-loopback-addr": "^2.0.2", + "is-plain-obj": "^4.1.0", + "it-foreach": "^2.1.3", + "it-pipe": "^3.0.1", + "it-pushable": "^3.2.3", + "it-stream-types": "^2.0.2", + "netmask": "^2.0.2", + "p-defer": "^4.0.1", + "race-event": "^1.3.0", + "race-signal": "^1.1.3", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/utils/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@libp2p/webrtc": { + "version": "5.2.15", + "resolved": "https://registry.npmjs.org/@libp2p/webrtc/-/webrtc-5.2.15.tgz", + "integrity": "sha512-RLrNBM0LLIxFTC0zWn2+4E0wYxNDX4UdwzwVc4eOJo24pcZFbLy3O7iFAh46ZTawtBH5IQMRBrAFk6VoomCNXw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@chainsafe/is-ip": "^2.1.0", + "@chainsafe/libp2p-noise": "^16.1.3", + "@ipshipyard/node-datachannel": "^0.26.6", + "@libp2p/crypto": "^5.1.4", + "@libp2p/interface": "^2.10.2", + "@libp2p/interface-internal": "^2.3.14", + "@libp2p/keychain": "^5.2.4", + "@libp2p/peer-id": "^5.1.5", + "@libp2p/utils": "^6.6.5", + "@multiformats/multiaddr": "^12.4.0", + "@multiformats/multiaddr-matcher": "^1.7.2", + "@peculiar/webcrypto": "^1.5.0", + "@peculiar/x509": "^1.12.3", + "any-signal": "^4.1.1", + "detect-browser": "^5.3.0", + "get-port": "^7.1.0", + "interface-datastore": "^8.3.1", + "it-length-prefixed": "^10.0.1", + "it-protobuf-stream": "^2.0.2", + "it-pushable": "^3.2.3", + "it-stream-types": "^2.0.2", + "multiformats": "^13.3.4", + "p-defer": "^4.0.1", + "p-timeout": "^6.1.4", + "p-wait-for": "^5.0.2", + "progress-events": "^1.0.1", + "protons-runtime": "^5.5.0", + "race-event": "^1.3.0", + "race-signal": "^1.1.3", + "react-native-webrtc": "^124.0.5", + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/websockets": { + "version": "9.2.13", + "resolved": "https://registry.npmjs.org/@libp2p/websockets/-/websockets-9.2.13.tgz", + "integrity": "sha512-IyitLWVWA54wUCG+uOTxzzvtmEjGJPEvOzmCcDouFZpJkDb85eAg1Kc068IcFggU9W+XyyQFsUDkisycpWejwg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^2.10.2", + "@libp2p/utils": "^6.6.5", + "@multiformats/multiaddr": "^12.4.0", + "@multiformats/multiaddr-matcher": "^1.7.2", + "@multiformats/multiaddr-to-uri": "^11.0.0", + "@types/ws": "^8.18.1", + "it-ws": "^6.1.5", + "p-defer": "^4.0.1", + "p-event": "^6.0.1", + "progress-events": "^1.0.1", + "race-signal": "^1.1.3", + "ws": "^8.18.2" + } + }, + "node_modules/@multiformats/dns": { + "version": "1.0.6", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@types/dns-packet": "^5.6.5", + "buffer": "^6.0.3", + "dns-packet": "^5.6.1", + "hashlru": "^2.3.0", + "p-queue": "^8.0.1", + "progress-events": "^1.0.0", + "uint8arrays": "^5.0.2" + } + }, + "node_modules/@multiformats/mafmt": { + "version": "12.1.6", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@multiformats/multiaddr": "^12.0.0" + } + }, + "node_modules/@multiformats/multiaddr": { + "version": "12.4.0", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@multiformats/dns": "^1.0.3", + "multiformats": "^13.0.0", + "uint8-varint": "^2.0.1", + "uint8arrays": "^5.0.0" + } + }, + "node_modules/@multiformats/multiaddr-matcher": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr-matcher/-/multiaddr-matcher-1.7.2.tgz", + "integrity": "sha512-BJzHOBAAxGZKw+FY/MzeIKGKERAW/1XOrpj61wgzZVvR/iksyGTQhliyTgmuakpBJPSsCxlrk3eLemVhZuJIFQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@chainsafe/is-ip": "^2.0.1", + "@multiformats/multiaddr": "^12.0.0", + "multiformats": "^13.0.0" + } + }, + "node_modules/@multiformats/multiaddr-to-uri": { + "version": "11.0.0", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@multiformats/multiaddr": "^12.3.0" + } + }, + "node_modules/@multiformats/murmur3": { + "version": "2.1.8", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "multiformats": "^13.0.0", + "murmurhash3js-revisited": "^3.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@multiformats/uri-to-multiaddr": { + "version": "9.0.1", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@multiformats/multiaddr": "^12.1.14", + "is-ip": "^5.0.0" + } + }, + "node_modules/@noble/ciphers": { + "version": "1.3.0", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves": { + "version": "1.9.1", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@peculiar/asn1-cms": { + "version": "2.3.15", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.3.15", + "@peculiar/asn1-x509": "^2.3.15", + "@peculiar/asn1-x509-attr": "^2.3.15", + "asn1js": "^3.0.5", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-csr": { + "version": "2.3.15", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.3.15", + "@peculiar/asn1-x509": "^2.3.15", + "asn1js": "^3.0.5", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-ecc": { + "version": "2.3.15", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.3.15", + "@peculiar/asn1-x509": "^2.3.15", + "asn1js": "^3.0.5", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pfx": { + "version": "2.3.15", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.3.15", + "@peculiar/asn1-pkcs8": "^2.3.15", + "@peculiar/asn1-rsa": "^2.3.15", + "@peculiar/asn1-schema": "^2.3.15", + "asn1js": "^3.0.5", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pkcs8": { + "version": "2.3.15", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.3.15", + "@peculiar/asn1-x509": "^2.3.15", + "asn1js": "^3.0.5", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pkcs9": { + "version": "2.3.15", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.3.15", + "@peculiar/asn1-pfx": "^2.3.15", + "@peculiar/asn1-pkcs8": "^2.3.15", + "@peculiar/asn1-schema": "^2.3.15", + "@peculiar/asn1-x509": "^2.3.15", + "@peculiar/asn1-x509-attr": "^2.3.15", + "asn1js": "^3.0.5", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-rsa": { + "version": "2.3.15", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.3.15", + "@peculiar/asn1-x509": "^2.3.15", + "asn1js": "^3.0.5", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-schema": { + "version": "2.3.15", + "license": "MIT", + "dependencies": { + "asn1js": "^3.0.5", + "pvtsutils": "^1.3.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-x509": { + "version": "2.3.15", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.3.15", + "asn1js": "^3.0.5", + "pvtsutils": "^1.3.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-x509-attr": { + "version": "2.3.15", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.3.15", + "@peculiar/asn1-x509": "^2.3.15", + "asn1js": "^3.0.5", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/json-schema": { + "version": "1.1.12", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@peculiar/webcrypto": { + "version": "1.5.0", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.3.8", + "@peculiar/json-schema": "^1.1.12", + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2", + "webcrypto-core": "^1.8.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/@peculiar/x509": { + "version": "1.12.3", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.3.13", + "@peculiar/asn1-csr": "^2.3.13", + "@peculiar/asn1-ecc": "^2.3.14", + "@peculiar/asn1-pkcs9": "^2.3.13", + "@peculiar/asn1-rsa": "^2.3.13", + "@peculiar/asn1-schema": "^2.3.13", + "@peculiar/asn1-x509": "^2.3.13", + "pvtsutils": "^1.3.5", + "reflect-metadata": "^0.2.2", + "tslib": "^2.7.0", + "tsyringe": "^4.8.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@polkadot-api/json-rpc-provider": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider/-/json-rpc-provider-0.0.1.tgz", + "integrity": "sha512-/SMC/l7foRjpykLTUTacIH05H3mr9ip8b5xxfwXlVezXrNVLp3Cv0GX6uItkKd+ZjzVPf3PFrDF2B2/HLSNESA==", + "license": "MIT", + "optional": true + }, + "node_modules/@polkadot-api/json-rpc-provider-proxy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider-proxy/-/json-rpc-provider-proxy-0.1.0.tgz", + "integrity": "sha512-8GSFE5+EF73MCuLQm8tjrbCqlgclcHBSRaswvXziJ0ZW7iw3UEMsKkkKvELayWyBuOPa2T5i1nj6gFOeIsqvrg==", + "license": "MIT", + "optional": true + }, + "node_modules/@polkadot-api/merkleize-metadata": { + "version": "1.1.17", + "license": "MIT", + "dependencies": { + "@polkadot-api/metadata-builders": "0.12.1", + "@polkadot-api/substrate-bindings": "0.13.0", + "@polkadot-api/utils": "0.1.2" + } + }, + "node_modules/@polkadot-api/metadata-builders": { + "version": "0.12.1", + "license": "MIT", + "dependencies": { + "@polkadot-api/substrate-bindings": "0.13.0", + "@polkadot-api/utils": "0.1.2" + } + }, + "node_modules/@polkadot-api/observable-client": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@polkadot-api/observable-client/-/observable-client-0.3.2.tgz", + "integrity": "sha512-HGgqWgEutVyOBXoGOPp4+IAq6CNdK/3MfQJmhCJb8YaJiaK4W6aRGrdQuQSTPHfERHCARt9BrOmEvTXAT257Ug==", + "license": "MIT", + "optional": true, + "dependencies": { + "@polkadot-api/metadata-builders": "0.3.2", + "@polkadot-api/substrate-bindings": "0.6.0", + "@polkadot-api/utils": "0.1.0" + }, + "peerDependencies": { + "@polkadot-api/substrate-client": "0.1.4", + "rxjs": ">=7.8.0" + } + }, + "node_modules/@polkadot-api/observable-client/node_modules/@polkadot-api/metadata-builders": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@polkadot-api/metadata-builders/-/metadata-builders-0.3.2.tgz", + "integrity": "sha512-TKpfoT6vTb+513KDzMBTfCb/ORdgRnsS3TDFpOhAhZ08ikvK+hjHMt5plPiAX/OWkm1Wc9I3+K6W0hX5Ab7MVg==", + "license": "MIT", + "optional": true, + "dependencies": { + "@polkadot-api/substrate-bindings": "0.6.0", + "@polkadot-api/utils": "0.1.0" + } + }, + "node_modules/@polkadot-api/observable-client/node_modules/@polkadot-api/substrate-bindings": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-bindings/-/substrate-bindings-0.6.0.tgz", + "integrity": "sha512-lGuhE74NA1/PqdN7fKFdE5C1gNYX357j1tWzdlPXI0kQ7h3kN0zfxNOpPUN7dIrPcOFZ6C0tRRVrBylXkI6xPw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@noble/hashes": "^1.3.1", + "@polkadot-api/utils": "0.1.0", + "@scure/base": "^1.1.1", + "scale-ts": "^1.6.0" + } + }, + "node_modules/@polkadot-api/observable-client/node_modules/@polkadot-api/utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/utils/-/utils-0.1.0.tgz", + "integrity": "sha512-MXzWZeuGxKizPx2Xf/47wx9sr/uxKw39bVJUptTJdsaQn/TGq+z310mHzf1RCGvC1diHM8f593KrnDgc9oNbJA==", + "license": "MIT", + "optional": true + }, + "node_modules/@polkadot-api/substrate-bindings": { + "version": "0.13.0", + "license": "MIT", + "dependencies": { + "@noble/hashes": "^1.8.0", + "@polkadot-api/utils": "0.1.2", + "@scure/base": "^1.2.5", + "scale-ts": "^1.6.1" + } + }, + "node_modules/@polkadot-api/substrate-client": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-client/-/substrate-client-0.1.4.tgz", + "integrity": "sha512-MljrPobN0ZWTpn++da9vOvt+Ex+NlqTlr/XT7zi9sqPtDJiQcYl+d29hFAgpaeTqbeQKZwz3WDE9xcEfLE8c5A==", + "license": "MIT", + "optional": true, + "dependencies": { + "@polkadot-api/json-rpc-provider": "0.0.1", + "@polkadot-api/utils": "0.1.0" + } + }, + "node_modules/@polkadot-api/substrate-client/node_modules/@polkadot-api/utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/utils/-/utils-0.1.0.tgz", + "integrity": "sha512-MXzWZeuGxKizPx2Xf/47wx9sr/uxKw39bVJUptTJdsaQn/TGq+z310mHzf1RCGvC1diHM8f593KrnDgc9oNbJA==", + "license": "MIT", + "optional": true + }, + "node_modules/@polkadot-api/utils": { + "version": "0.1.2", + "license": "MIT" + }, + "node_modules/@polkadot/api": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-16.1.1.tgz", + "integrity": "sha512-atlnmcDjDZyoE9w460Rrve0LnRv9B0W1fuy1ay9vfBQ03ez3nwnoP4sP9ldYxcmU9QEs5/HTn6nvVSZXowCYKw==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/api-augment": "16.1.1", + "@polkadot/api-base": "16.1.1", + "@polkadot/api-derive": "16.1.1", + "@polkadot/keyring": "^13.5.1", + "@polkadot/rpc-augment": "16.1.1", + "@polkadot/rpc-core": "16.1.1", + "@polkadot/rpc-provider": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-augment": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/types-create": "16.1.1", + "@polkadot/types-known": "16.1.1", + "@polkadot/util": "^13.5.1", + "@polkadot/util-crypto": "^13.5.1", + "eventemitter3": "^5.0.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/api-augment": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-16.1.1.tgz", + "integrity": "sha512-VTj03C1iJEZ//IBKa4sRxfz3WObygXtyOqYCRMJEtH74roIZvJpIjhmZwJqGD8NijPO3mgZOTzaLzjoeLF1jMw==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/api-base": "16.1.1", + "@polkadot/rpc-augment": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-augment": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/api-base": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-16.1.1.tgz", + "integrity": "sha512-PUpc0Ir7ru51RuVhZMmbleicKMI43s5T1FHhOHmtzbMUTnwMbXtWHKzIfkHxqXJrg10EwO8mzcymJeHbA1TR+g==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/rpc-core": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/util": "^13.5.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/api-derive": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-16.1.1.tgz", + "integrity": "sha512-sC0j67RzDRwe3sHw0trDFz7tfFu68+3pQT89ash9TUVa8AD0i4USIirg4dNVWt7CrK9eW3Q4edqs1p6RXurz7g==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/api": "16.1.1", + "@polkadot/api-augment": "16.1.1", + "@polkadot/api-base": "16.1.1", + "@polkadot/rpc-core": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "@polkadot/util-crypto": "^13.5.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/keyring": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-13.5.1.tgz", + "integrity": "sha512-dEl679aoMv9gOzWJA13Jb2HUGqRi6/zKjEtg+qbiEryCSjUqfNKyO8liuwMFy0VP3qxJb1FkxNe6MnG1NwbU5Q==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/util": "13.5.1", + "@polkadot/util-crypto": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "13.5.1", + "@polkadot/util-crypto": "13.5.1" + } + }, + "node_modules/@polkadot/networks": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-13.5.1.tgz", + "integrity": "sha512-w5HS209pHZhqJ7AVqJqFApO4OcwlxjfQ7mp2dE/vL5qA5RnsEx/3fBYJ6h3z/k5Ggac0+Zl1vMZAF1gW8S/F9A==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/util": "13.5.1", + "@substrate/ss58-registry": "^1.51.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/rpc-augment": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-16.1.1.tgz", + "integrity": "sha512-o0CgmzQ06qV0nKlKPccumOmPsZ3f2VeQp2u8tndLOLG5A7C9k+XML92ldJHN2Dj+XKHLhjHG4syPEBET7ugZCg==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/rpc-core": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/rpc-core": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-16.1.1.tgz", + "integrity": "sha512-BUfY6868kJhPXCyQuRUg644pWGhynuWvPvglJXsOf+A3pRhKm+cNWEjs8puQmUc38adl6QocBeUJHfTnfrtKPg==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/rpc-augment": "16.1.1", + "@polkadot/rpc-provider": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/util": "^13.5.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/rpc-provider": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-16.1.1.tgz", + "integrity": "sha512-LH22P6OSw304pwvdpjuxc6ARtvrUUvkBF02n4FsJBo555y9d+2dcA5CA4FLI8WNvOXf3hOLwxz/UPxA7VATksw==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/keyring": "^13.5.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-support": "16.1.1", + "@polkadot/util": "^13.5.1", + "@polkadot/util-crypto": "^13.5.1", + "@polkadot/x-fetch": "^13.5.1", + "@polkadot/x-global": "^13.5.1", + "@polkadot/x-ws": "^13.5.1", + "eventemitter3": "^5.0.1", + "mock-socket": "^9.3.1", + "nock": "^13.5.5", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@substrate/connect": "0.8.11" + } + }, + "node_modules/@polkadot/types": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-16.1.1.tgz", + "integrity": "sha512-edEKvnCrWoPjW2sRUdER4gm8zm+gilVhZXqAtYH0gHJkBzbhCXZ5M27E62ztR1at9XyHDsTUeuq51ELHOUbbFQ==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/keyring": "^13.5.1", + "@polkadot/types-augment": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/types-create": "16.1.1", + "@polkadot/util": "^13.5.1", + "@polkadot/util-crypto": "^13.5.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-augment": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-16.1.1.tgz", + "integrity": "sha512-Ozh7nEyAnyHK9x1CnRYlG/rnarvuauAIbvUljtA7f/3RI570kRTpeOR83QkDWdaLywno96A4zdFXBfI0nmq1Yw==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/types": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-codec": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-16.1.1.tgz", + "integrity": "sha512-REcSkOfxFGPJWEbuCIr5EA0argnZwYVYkE14f97XVM9rV36/FEyu1al47fSjp8iHA3e8Fsd+V+WTZRwlUa51qA==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/util": "^13.5.1", + "@polkadot/x-bigint": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-create": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-16.1.1.tgz", + "integrity": "sha512-dpd5HKRfNQlDYMtMdofrhr99O7q8EWkqZyTadFuTYyd7LECb9FUD8nO6RbcmpXYA9F3r5g/EwvsmZFZaQW9LqA==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-known": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-16.1.1.tgz", + "integrity": "sha512-Qp6C+wppqvooDFU2T0Ynmgo72bQOUkY6dLVoGmZWq/OO6hXuLCg8SAncJP/CzcueEA2/Anzk3DQbfZVlBEr6Cg==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/networks": "^13.5.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/types-create": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-support": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-16.1.1.tgz", + "integrity": "sha512-pVEBVaXuIkhuMX6J4Cn+cGcLOPsz2qu4EuZXwwA/ioMIICclh+7q6+fOfInogIgmbcYHZFDDsyXG3wRw7ThZkA==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/util": { + "version": "13.5.1", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/x-bigint": "13.5.1", + "@polkadot/x-global": "13.5.1", + "@polkadot/x-textdecoder": "13.5.1", + "@polkadot/x-textencoder": "13.5.1", + "@types/bn.js": "^5.1.6", + "bn.js": "^5.2.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/util-crypto": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-13.5.1.tgz", + "integrity": "sha512-HIuTRpkulIzmgCU+GIXbEEkVbikvrK+5v8XZ7Ll45m1dLsxnrJeEbNsCLUwI/+D9Jd0iF3+T12GybuetlXeu+A==", + "license": "Apache-2.0", + "dependencies": { + "@noble/curves": "^1.3.0", + "@noble/hashes": "^1.3.3", + "@polkadot/networks": "13.5.1", + "@polkadot/util": "13.5.1", + "@polkadot/wasm-crypto": "^7.4.1", + "@polkadot/wasm-util": "^7.4.1", + "@polkadot/x-bigint": "13.5.1", + "@polkadot/x-randomvalues": "13.5.1", + "@scure/base": "^1.1.7", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "13.5.1" + } + }, + "node_modules/@polkadot/wasm-bridge": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-7.4.1.tgz", + "integrity": "sha512-tdkJaV453tezBxhF39r4oeG0A39sPKGDJmN81LYLf+Fihb7astzwju+u75BRmDrHZjZIv00un3razJEWCxze6g==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/wasm-crypto": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-7.4.1.tgz", + "integrity": "sha512-kHN/kF7hYxm1y0WeFLWeWir6oTzvcFmR4N8fJJokR+ajYbdmrafPN+6iLgQVbhZnDdxyv9jWDuRRsDnBx8tPMQ==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/wasm-bridge": "7.4.1", + "@polkadot/wasm-crypto-asmjs": "7.4.1", + "@polkadot/wasm-crypto-init": "7.4.1", + "@polkadot/wasm-crypto-wasm": "7.4.1", + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-asmjs": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.4.1.tgz", + "integrity": "sha512-pwU8QXhUW7IberyHJIQr37IhbB6DPkCG5FhozCiNTq4vFBsFPjm9q8aZh7oX1QHQaiAZa2m2/VjIVE+FHGbvHQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-init": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.4.1.tgz", + "integrity": "sha512-AVka33+f7MvXEEIGq5U0dhaA2SaXMXnxVCQyhJTaCnJ5bRDj0Xlm3ijwDEQUiaDql7EikbkkRtmlvs95eSUWYQ==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/wasm-bridge": "7.4.1", + "@polkadot/wasm-crypto-asmjs": "7.4.1", + "@polkadot/wasm-crypto-wasm": "7.4.1", + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-wasm": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.4.1.tgz", + "integrity": "sha512-PE1OAoupFR0ZOV2O8tr7D1FEUAwaggzxtfs3Aa5gr+yxlSOaWUKeqsOYe1KdrcjmZVV3iINEAXxgrbzCmiuONg==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/wasm-util": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-7.4.1.tgz", + "integrity": "sha512-RAcxNFf3zzpkr+LX/ItAsvj+QyM56TomJ0xjUMo4wKkHjwsxkz4dWJtx5knIgQz/OthqSDMR59VNEycQeNuXzA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/x-bigint": { + "version": "13.5.1", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-fetch": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-13.5.1.tgz", + "integrity": "sha512-2qTvxMdxlAnyY2xOulm5ZazWFRegUB6xOX7yTBxSvuAXiYGecuiZa5NikCYl+nB8iZW4ZGraLFyt9otzJHL5cw==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "node-fetch": "^3.3.2", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-global": { + "version": "13.5.1", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-randomvalues": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-13.5.1.tgz", + "integrity": "sha512-FT/A8EWIBNACWfxo+fDzRrkmK8TQxgaZjtr5E+/i8MYqscHFqiX9PmbMuoGC1T4w+piihHU1JD8rLTip2K8NIw==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "13.5.1", + "@polkadot/wasm-util": "*" + } + }, + "node_modules/@polkadot/x-textdecoder": { + "version": "13.5.1", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-textencoder": { + "version": "13.5.1", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-ws": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-13.5.1.tgz", + "integrity": "sha512-z9ks9qd3G78nnXcMRQN9GXtJ5BRAwRaRCVngY/ot0o4dmOdPyiciyNPOC8lNWvXF8Z1zyUqkKWwzQ33DzPFCWQ==", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0", + "ws": "^8.18.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/assets-registry": { + "version": "0.79.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/codegen": { + "version": "0.79.2", + "license": "MIT", + "peer": true, + "dependencies": { + "glob": "^7.1.1", + "hermes-parser": "0.25.1", + "invariant": "^2.2.4", + "nullthrows": "^1.1.1", + "yargs": "^17.6.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/@react-native/codegen/node_modules/glob": { + "version": "7.2.3", + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@react-native/community-cli-plugin": { + "version": "0.79.2", + "license": "MIT", + "peer": true, + "dependencies": { + "@react-native/dev-middleware": "0.79.2", + "chalk": "^4.0.0", + "debug": "^2.2.0", + "invariant": "^2.2.4", + "metro": "^0.82.0", + "metro-config": "^0.82.0", + "metro-core": "^0.82.0", + "semver": "^7.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@react-native-community/cli": "*" + }, + "peerDependenciesMeta": { + "@react-native-community/cli": { + "optional": true + } + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/ms": { + "version": "2.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/@react-native/debugger-frontend": { + "version": "0.79.2", + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/dev-middleware": { + "version": "0.79.2", + "license": "MIT", + "peer": true, + "dependencies": { + "@isaacs/ttlcache": "^1.4.1", + "@react-native/debugger-frontend": "0.79.2", + "chrome-launcher": "^0.15.2", + "chromium-edge-launcher": "^0.2.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "invariant": "^2.2.4", + "nullthrows": "^1.1.1", + "open": "^7.0.3", + "serve-static": "^1.16.2", + "ws": "^6.2.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/fresh": { + "version": "0.5.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/ms": { + "version": "2.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/@react-native/dev-middleware/node_modules/send": { + "version": "0.19.0", + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/send/node_modules/ms": { + "version": "2.1.3", + "license": "MIT", + "peer": true + }, + "node_modules/@react-native/dev-middleware/node_modules/serve-static": { + "version": "1.16.2", + "license": "MIT", + "peer": true, + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/ws": { + "version": "6.2.3", + "license": "MIT", + "peer": true, + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/@react-native/gradle-plugin": { + "version": "0.79.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/js-polyfills": { + "version": "0.79.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/normalize-colors": { + "version": "0.79.2", + "license": "MIT", + "peer": true + }, + "node_modules/@react-native/virtualized-lists": { + "version": "0.79.2", + "license": "MIT", + "peer": true, + "dependencies": { + "invariant": "^2.2.4", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/react": "^19.0.0", + "react": "*", + "react-native": "*" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@scure/base": { + "version": "1.2.5", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "license": "MIT", + "peer": true + }, + "node_modules/@sindresorhus/fnv1a": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@sinonjs/samsam": { + "version": "8.0.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1", + "lodash.get": "^4.4.2", + "type-detect": "^4.1.0" + } + }, + "node_modules/@sinonjs/samsam/node_modules/type-detect": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@substrate/connect": { + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.8.11.tgz", + "integrity": "sha512-ofLs1PAO9AtDdPbdyTYj217Pe+lBfTLltdHDs3ds8no0BseoLeAGxpz1mHfi7zB4IxI3YyAiLjH6U8cw4pj4Nw==", + "deprecated": "versions below 1.x are no longer maintained", + "license": "GPL-3.0-only", + "optional": true, + "dependencies": { + "@substrate/connect-extension-protocol": "^2.0.0", + "@substrate/connect-known-chains": "^1.1.5", + "@substrate/light-client-extension-helpers": "^1.0.0", + "smoldot": "2.0.26" + } + }, + "node_modules/@substrate/connect-extension-protocol": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@substrate/connect-extension-protocol/-/connect-extension-protocol-2.2.2.tgz", + "integrity": "sha512-t66jwrXA0s5Goq82ZtjagLNd7DPGCNjHeehRlE/gcJmJ+G56C0W+2plqOMRicJ8XGR1/YFnUSEqUFiSNbjGrAA==", + "license": "GPL-3.0-only", + "optional": true + }, + "node_modules/@substrate/connect-known-chains": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/@substrate/connect-known-chains/-/connect-known-chains-1.10.2.tgz", + "integrity": "sha512-oDtEbKjVOog6lxOLDzmm+2BoLC/KUzkHkeUPqJ6a0VQ4CB/XuoS0u3RGhA/cZ+kfMJAyHCG2qupbzgs1bcd/Ow==", + "license": "GPL-3.0-only", + "optional": true + }, + "node_modules/@substrate/light-client-extension-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@substrate/light-client-extension-helpers/-/light-client-extension-helpers-1.0.0.tgz", + "integrity": "sha512-TdKlni1mBBZptOaeVrKnusMg/UBpWUORNDv5fdCaJklP4RJiFOzBCrzC+CyVI5kQzsXBisZ+2pXm+rIjS38kHg==", + "license": "MIT", + "optional": true, + "dependencies": { + "@polkadot-api/json-rpc-provider": "^0.0.1", + "@polkadot-api/json-rpc-provider-proxy": "^0.1.0", + "@polkadot-api/observable-client": "^0.3.0", + "@polkadot-api/substrate-client": "^0.1.2", + "@substrate/connect-extension-protocol": "^2.0.0", + "@substrate/connect-known-chains": "^1.1.5", + "rxjs": "^7.8.1" + }, + "peerDependencies": { + "smoldot": "2.x" + } + }, + "node_modules/@substrate/ss58-registry": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.51.0.tgz", + "integrity": "sha512-TWDurLiPxndFgKjVavCniytBIw+t4ViOi7TYp9h/D0NMmkEc9klFTo+827eyEJ0lELpqO207Ey7uGxUa+BS1jQ==", + "license": "Apache-2.0" + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.7", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/bn.js": { + "version": "5.1.6", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/dns-packet": { + "version": "5.6.5", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "license": "MIT", + "peer": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mocha": { + "version": "10.0.10", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/multicast-dns": { + "version": "7.2.4", + "license": "MIT", + "dependencies": { + "@types/dns-packet": "*", + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "22.15.14", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/retry": { + "version": "0.12.2", + "license": "MIT" + }, + "node_modules/@types/sinon": { + "version": "17.0.4", + "license": "MIT", + "dependencies": { + "@types/sinonjs__fake-timers": "*" + } + }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.5", + "license": "MIT" + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "license": "MIT", + "peer": true + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "license": "MIT", + "peer": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.33.0", + "@typescript-eslint/type-utils": "8.33.0", + "@typescript-eslint/utils": "8.33.0", + "@typescript-eslint/visitor-keys": "8.33.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.33.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.33.0", + "@typescript-eslint/types": "8.33.0", + "@typescript-eslint/typescript-estree": "8.33.0", + "@typescript-eslint/visitor-keys": "8.33.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.33.0", + "@typescript-eslint/types": "^8.33.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.33.0", + "@typescript-eslint/visitor-keys": "8.33.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.33.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "8.33.0", + "@typescript-eslint/utils": "8.33.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.33.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.33.0", + "@typescript-eslint/tsconfig-utils": "8.33.0", + "@typescript-eslint/types": "8.33.0", + "@typescript-eslint/visitor-keys": "8.33.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.33.0", + "@typescript-eslint/types": "8.33.0", + "@typescript-eslint/typescript-estree": "8.33.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.33.0", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/abort-error": { + "version": "1.0.1", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/acme-client": { + "version": "5.4.0", + "license": "MIT", + "dependencies": { + "@peculiar/x509": "^1.11.0", + "asn1js": "^3.0.5", + "axios": "^1.7.2", + "debug": "^4.3.5", + "node-forge": "^1.3.1" + }, + "engines": { + "node": ">= 16" + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/aes-js": { + "version": "4.0.0-beta.5", + "license": "MIT" + }, + "node_modules/agent-base": { + "version": "7.1.3", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/anser": { + "version": "1.4.10", + "license": "MIT", + "peer": true + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-signal": { + "version": "4.1.1", + "license": "Apache-2.0 OR MIT", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "license": "ISC", + "peer": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/asap": { + "version": "2.0.6", + "license": "MIT", + "peer": true + }, + "node_modules/asn1js": { + "version": "3.0.6", + "license": "BSD-3-Clause", + "dependencies": { + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "license": "MIT", + "peer": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.9.0", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-plugin-syntax-hermes-parser": { + "version": "0.25.1", + "license": "MIT", + "peer": true, + "dependencies": { + "hermes-parser": "0.25.1" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.1.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "license": "MIT", + "peer": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bl": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/blockstore-core": { + "version": "5.0.4", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/logger": "^5.1.18", + "interface-blockstore": "^5.0.0", + "interface-store": "^6.0.0", + "it-filter": "^3.1.3", + "it-merge": "^3.0.11", + "multiformats": "^13.3.6" + } + }, + "node_modules/bn.js": { + "version": "5.2.2", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-readablestream-to-it": { + "version": "2.0.9", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "dev": true, + "license": "ISC" + }, + "node_modules/browserslist": { + "version": "4.24.5", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "caniuse-lite": "^1.0.30001716", + "electron-to-chromium": "^1.5.149", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "license": "MIT", + "peer": true + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/caller-callsite": { + "version": "2.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "callsites": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-callsite/node_modules/callsites": { + "version": "2.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-path": { + "version": "2.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "caller-callsite": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001717", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0", + "peer": true + }, + "node_modules/cborg": { + "version": "4.2.10", + "license": "Apache-2.0", + "bin": { + "cborg": "lib/bin.js" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "license": "ISC" + }, + "node_modules/chrome-launcher": { + "version": "0.15.2", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" + }, + "bin": { + "print-chrome-path": "bin/print-chrome-path.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/chromium-edge-launcher": { + "version": "0.2.0", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0", + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone-regexp": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "is-regexp": "^3.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "12.1.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/connect": { + "version": "3.7.0", + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/encodeurl": { + "version": "1.0.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/connect/node_modules/finalhandler": { + "version": "1.1.2", + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/connect/node_modules/on-finished": { + "version": "2.3.0", + "license": "MIT", + "peer": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/connect/node_modules/statuses": { + "version": "1.5.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-hrtime": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/cosmiconfig": { + "version": "5.2.1", + "license": "MIT", + "peer": true, + "dependencies": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "1.0.10", + "license": "MIT", + "peer": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/cosmiconfig/node_modules/import-fresh": { + "version": "2.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "3.14.1", + "license": "MIT", + "peer": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/cosmiconfig/node_modules/resolve-from": { + "version": "3.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/datastore-core": { + "version": "10.0.2", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/logger": "^5.0.1", + "interface-datastore": "^8.0.0", + "interface-store": "^6.0.0", + "it-drain": "^3.0.7", + "it-filter": "^3.1.1", + "it-map": "^3.1.1", + "it-merge": "^3.0.5", + "it-pipe": "^3.0.1", + "it-pushable": "^3.2.3", + "it-sort": "^3.0.6", + "it-take": "^3.0.6" + } + }, + "node_modules/debug": { + "version": "4.4.0", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/delay": { + "version": "6.0.0", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-browser": { + "version": "5.3.0", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.0.4", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "7.0.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "license": "MIT", + "peer": true + }, + "node_modules/electron-to-chromium": { + "version": "1.5.150", + "license": "ISC", + "peer": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "dev": true, + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/err-code": { + "version": "3.0.1", + "license": "MIT" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "license": "MIT", + "peer": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "license": "MIT", + "peer": true, + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.25.4", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.4", + "@esbuild/android-arm": "0.25.4", + "@esbuild/android-arm64": "0.25.4", + "@esbuild/android-x64": "0.25.4", + "@esbuild/darwin-arm64": "0.25.4", + "@esbuild/darwin-x64": "0.25.4", + "@esbuild/freebsd-arm64": "0.25.4", + "@esbuild/freebsd-x64": "0.25.4", + "@esbuild/linux-arm": "0.25.4", + "@esbuild/linux-arm64": "0.25.4", + "@esbuild/linux-ia32": "0.25.4", + "@esbuild/linux-loong64": "0.25.4", + "@esbuild/linux-mips64el": "0.25.4", + "@esbuild/linux-ppc64": "0.25.4", + "@esbuild/linux-riscv64": "0.25.4", + "@esbuild/linux-s390x": "0.25.4", + "@esbuild/linux-x64": "0.25.4", + "@esbuild/netbsd-arm64": "0.25.4", + "@esbuild/netbsd-x64": "0.25.4", + "@esbuild/openbsd-arm64": "0.25.4", + "@esbuild/openbsd-x64": "0.25.4", + "@esbuild/sunos-x64": "0.25.4", + "@esbuild/win32-arm64": "0.25.4", + "@esbuild/win32-ia32": "0.25.4", + "@esbuild/win32-x64": "0.25.4" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", + "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "license": "MIT", + "peer": true + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.27.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.20.0", + "@eslint/config-helpers": "^0.2.1", + "@eslint/core": "^0.14.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.27.0", + "@eslint/plugin-kit": "^0.3.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-mocha": { + "version": "11.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.1", + "globals": "^15.14.0" + }, + "peerDependencies": { + "eslint": ">=9.0.0" + } + }, + "node_modules/eslint-plugin-mocha/node_modules/globals": { + "version": "15.15.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-scope": { + "version": "8.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "license": "BSD-2-Clause", + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ethers": { + "version": "6.14.3", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "22.7.5", + "aes-js": "4.0.0-beta.5", + "tslib": "2.7.0", + "ws": "8.17.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ethers/node_modules/@noble/curves": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethers/node_modules/@noble/hashes": { + "version": "1.3.2", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethers/node_modules/@types/node": { + "version": "22.7.5", + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/ethers/node_modules/tslib": { + "version": "2.7.0", + "license": "0BSD" + }, + "node_modules/ethers/node_modules/undici-types": { + "version": "6.19.8", + "license": "MIT" + }, + "node_modules/ethers/node_modules/ws": { + "version": "8.17.1", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/event-iterator": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "license": "MIT" + }, + "node_modules/expand-template": { + "version": "2.0.3", + "license": "(MIT OR WTFPL)", + "engines": { + "node": ">=6" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.2", + "license": "Apache-2.0", + "peer": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "dev": true, + "license": "ISC" + }, + "node_modules/flow-enums-runtime": { + "version": "0.0.6", + "license": "MIT", + "peer": true + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.2", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data/node_modules/mime-db": { + "version": "1.52.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/form-data/node_modules/mime-types": { + "version": "2.1.35", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/freeport-promise": { + "version": "2.0.0", + "license": "Apache-2.0 OR MIT", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "license": "ISC", + "peer": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function-timeout": { + "version": "0.1.1", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-iterator": { + "version": "2.0.1", + "license": "MIT" + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-port": { + "version": "7.1.0", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-tsconfig": { + "version": "4.10.0", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "license": "MIT" + }, + "node_modules/glob": { + "version": "11.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "10.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "16.2.0", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "license": "ISC", + "peer": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/hamt-sharding": { + "version": "3.0.6", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "sparse-array": "^1.3.1", + "uint8arrays": "^5.0.1" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hashlru": { + "version": "2.3.0", + "license": "MIT" + }, + "node_modules/hasown": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/helia": { + "version": "5.4.2", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@chainsafe/libp2p-noise": "^16.0.1", + "@chainsafe/libp2p-yamux": "^7.0.1", + "@helia/block-brokers": "^4.2.2", + "@helia/delegated-routing-v1-http-api-client": "^4.2.1", + "@helia/interface": "^5.3.2", + "@helia/routers": "^3.1.2", + "@helia/utils": "^1.3.2", + "@ipshipyard/libp2p-auto-tls": "^1.0.0", + "@libp2p/autonat": "^2.0.19", + "@libp2p/bootstrap": "^11.0.20", + "@libp2p/circuit-relay-v2": "^3.1.10", + "@libp2p/config": "^1.0.3", + "@libp2p/dcutr": "^2.0.18", + "@libp2p/identify": "^3.0.18", + "@libp2p/interface": "^2.5.0", + "@libp2p/kad-dht": "^15.0.2", + "@libp2p/keychain": "^5.0.14", + "@libp2p/mdns": "^11.0.20", + "@libp2p/mplex": "^11.0.20", + "@libp2p/ping": "^2.0.18", + "@libp2p/tcp": "^10.0.18", + "@libp2p/tls": "^2.0.15", + "@libp2p/upnp-nat": "^3.1.1", + "@libp2p/webrtc": "^5.1.0", + "@libp2p/websockets": "^9.1.5", + "@multiformats/dns": "^1.0.6", + "blockstore-core": "^5.0.2", + "datastore-core": "^10.0.2", + "interface-blockstore": "^5.3.1", + "interface-datastore": "^8.3.1", + "ipns": "^10.0.0", + "libp2p": "^2.3.1", + "multiformats": "^13.3.1" + } + }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "license": "MIT", + "peer": true + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "license": "MIT", + "peer": true, + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "node_modules/http-cookie-agent": { + "version": "6.0.8", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.3" + }, + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/3846masa" + }, + "peerDependencies": { + "tough-cookie": "^4.0.0 || ^5.0.0", + "undici": "^5.11.0 || ^6.0.0" + }, + "peerDependenciesMeta": { + "undici": { + "optional": true + } + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "license": "MIT", + "peer": true, + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-size": { + "version": "1.2.1", + "license": "MIT", + "peer": true, + "dependencies": { + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=16.x" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "license": "ISC", + "peer": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "license": "ISC" + }, + "node_modules/interface-blockstore": { + "version": "5.3.1", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "interface-store": "^6.0.0", + "multiformats": "^13.2.3" + } + }, + "node_modules/interface-datastore": { + "version": "8.3.1", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "interface-store": "^6.0.0", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/interface-store": { + "version": "6.0.2", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/invariant": { + "version": "2.2.4", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ip-regex": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ipfs-unixfs": { + "version": "11.2.1", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "protons-runtime": "^5.5.0", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/ipfs-unixfs-exporter": { + "version": "13.6.2", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@ipld/dag-cbor": "^9.2.1", + "@ipld/dag-json": "^10.2.2", + "@ipld/dag-pb": "^4.1.2", + "@multiformats/murmur3": "^2.1.8", + "hamt-sharding": "^3.0.6", + "interface-blockstore": "^5.3.0", + "ipfs-unixfs": "^11.0.0", + "it-filter": "^3.1.1", + "it-last": "^3.0.6", + "it-map": "^3.1.1", + "it-parallel": "^3.0.8", + "it-pipe": "^3.0.1", + "it-pushable": "^3.2.3", + "multiformats": "^13.2.3", + "p-queue": "^8.0.1", + "progress-events": "^1.0.1" + } + }, + "node_modules/ipfs-unixfs-importer": { + "version": "15.3.2", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@ipld/dag-pb": "^4.1.2", + "@multiformats/murmur3": "^2.1.8", + "hamt-sharding": "^3.0.6", + "interface-blockstore": "^5.3.0", + "interface-store": "^6.0.0", + "ipfs-unixfs": "^11.0.0", + "it-all": "^3.0.6", + "it-batch": "^3.0.6", + "it-first": "^3.0.6", + "it-parallel-batch": "^3.0.6", + "multiformats": "^13.2.3", + "progress-events": "^1.0.1", + "rabin-wasm": "^0.1.5", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/ipns": { + "version": "10.0.2", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^5.0.0", + "@libp2p/interface": "^2.0.0", + "@libp2p/logger": "^5.0.0", + "cborg": "^4.2.3", + "interface-datastore": "^8.3.0", + "multiformats": "^13.2.2", + "protons-runtime": "^5.5.0", + "timestamp-nano": "^1.0.1", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "license": "MIT", + "peer": true + }, + "node_modules/is-directory": { + "version": "0.3.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "license": "MIT", + "peer": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-electron": { + "version": "2.2.2", + "license": "MIT" + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-ip": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "ip-regex": "^5.0.0", + "super-regex": "^0.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-loopback-addr": { + "version": "2.0.2", + "license": "MIT" + }, + "node_modules/is-network-error": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regexp": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "license": "MIT", + "peer": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/it-all": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/it-all/-/it-all-3.0.8.tgz", + "integrity": "sha512-TFAXqUjwuPFhyktbU7XIOjdvqjpc/c2xvDYfCrfHA6HP68+EQDCXuwGJ9YchvZTyXSaB2fkX3lI9aybcFUHWUw==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-batch": { + "version": "3.0.7", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-byte-stream": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-byte-stream/-/it-byte-stream-2.0.2.tgz", + "integrity": "sha512-YfT+dfbAKXB5VHlmvm5YUZNVA5WGP/j0CeVx09O8pqTNa9sK5aOLh17B7asJk6KSx2LwQwZuJ/JA6YN/gCc6GA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "abort-error": "^1.0.1", + "it-queueless-pushable": "^2.0.0", + "it-stream-types": "^2.0.2", + "race-signal": "^1.1.3", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/it-drain": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/it-drain/-/it-drain-3.0.9.tgz", + "integrity": "sha512-HKy+UVYAqSFm+naEkNg14BwKymjHK0SxYLi8H5nACTIgbemDMZ4SNa2omzMUuk2Nu3jhaHMoqUJfZ0aBcdn4oA==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-filter": { + "version": "3.1.3", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-peekable": "^3.0.0" + } + }, + "node_modules/it-first": { + "version": "3.0.7", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-foreach": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/it-foreach/-/it-foreach-2.1.3.tgz", + "integrity": "sha512-QfrD0Sjv0Uy664huiZevAgY1UEsJ1GlmPpjwy38vjSi4rCmdGkO7ef/KKG86ZXd9j+j1bXXGnfDLjCs7lU8A0A==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-peekable": "^3.0.0" + } + }, + "node_modules/it-glob": { + "version": "3.0.2", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "fast-glob": "^3.3.3" + } + }, + "node_modules/it-last": { + "version": "3.0.7", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-length": { + "version": "3.0.8", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-length-prefixed": { + "version": "10.0.1", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-reader": "^6.0.1", + "it-stream-types": "^2.0.1", + "uint8-varint": "^2.0.1", + "uint8arraylist": "^2.0.0", + "uint8arrays": "^5.0.1" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-length-prefixed-stream": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-length-prefixed-stream/-/it-length-prefixed-stream-2.0.2.tgz", + "integrity": "sha512-8zi1HjUWF5nxo+3ukwfNk2pm+0GiOP++l8iqGvar9sd/Ng1qfH/hFLiImCk3HVsLGfCgZus43U9IWb+48JiL2g==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "abort-error": "^1.0.1", + "it-byte-stream": "^2.0.0", + "it-stream-types": "^2.0.2", + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/it-map": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/it-map/-/it-map-3.1.3.tgz", + "integrity": "sha512-BAdTuPN/Ie5K4pKLShqyLGBvkLSPtraYXBrX8h+Ki1CZQI8o0dOcaLewISLTXmEJsOHcAjkwxJsVwxND4/Rkpg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-peekable": "^3.0.0" + } + }, + "node_modules/it-merge": { + "version": "3.0.11", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-queueless-pushable": "^2.0.0" + } + }, + "node_modules/it-ndjson": { + "version": "1.1.3", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/it-pair": { + "version": "2.0.6", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-stream-types": "^2.0.1", + "p-defer": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-parallel": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/it-parallel/-/it-parallel-3.0.11.tgz", + "integrity": "sha512-ABHAwLO6RMB9zBKUN1v7pJWupwGaMkUrtGNnygDqog5yB8PjyKWxUKLwca1OHuZrdnkOx0VzETEXMSzWrzX8bw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "p-defer": "^4.0.1" + } + }, + "node_modules/it-parallel-batch": { + "version": "3.0.7", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-batch": "^3.0.0" + } + }, + "node_modules/it-peekable": { + "version": "3.0.6", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-pipe": { + "version": "3.0.1", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-merge": "^3.0.0", + "it-pushable": "^3.1.2", + "it-stream-types": "^2.0.1" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-protobuf-stream": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-protobuf-stream/-/it-protobuf-stream-2.0.2.tgz", + "integrity": "sha512-40abXOZL3jQYkD/+VhabchZadtvq4cSRKMEhaXVYa58HPdkBSzyL3bUzMcERVcLq2ithLwrPyjLAVqMXud/mBA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "abort-error": "^1.0.1", + "it-length-prefixed-stream": "^2.0.0", + "it-stream-types": "^2.0.2", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/it-pushable": { + "version": "3.2.3", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "p-defer": "^4.0.0" + } + }, + "node_modules/it-queueless-pushable": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/it-queueless-pushable/-/it-queueless-pushable-2.0.1.tgz", + "integrity": "sha512-ZFX4ZHpzPwD0Ivpt3y98FtXk/KToO0ec5AjUDBQ4MOdkWVmnjEBfjq6ncvpuGtZ3776KSSK+i6uWkrSspdo/OQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "abort-error": "^1.0.1", + "p-defer": "^4.0.1", + "race-signal": "^1.1.3" + } + }, + "node_modules/it-reader": { + "version": "6.0.4", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-stream-types": "^2.0.1", + "uint8arraylist": "^2.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-sort": { + "version": "3.0.7", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-all": "^3.0.0" + } + }, + "node_modules/it-stream-types": { + "version": "2.0.2", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-take": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/it-take/-/it-take-3.0.8.tgz", + "integrity": "sha512-avNX5LYv+eUh80eOgCAB+Drg9m1qTt06hpC5w0hc/AVaCFzG5FIJ8dAzPYVzQoq5p7l7hXg1Inoj2RTHJRqCGA==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-ws": { + "version": "6.1.5", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@types/ws": "^8.2.2", + "event-iterator": "^2.0.0", + "it-stream-types": "^2.0.1", + "uint8arrays": "^5.0.0", + "ws": "^8.4.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/jackspeak": { + "version": "4.1.0", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "license": "MIT", + "peer": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "license": "MIT", + "peer": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsc-safe-url": { + "version": "0.2.4", + "license": "0BSD", + "peer": true + }, + "node_modules/jsesc": { + "version": "3.1.0", + "license": "MIT", + "peer": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "license": "MIT", + "peer": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "license": "ISC" + }, + "node_modules/json5": { + "version": "2.2.3", + "license": "MIT", + "peer": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/libp2p": { + "version": "2.8.5", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@chainsafe/is-ip": "^2.0.2", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/crypto": "^5.1.1", + "@libp2p/interface": "^2.9.0", + "@libp2p/interface-internal": "^2.3.11", + "@libp2p/logger": "^5.1.15", + "@libp2p/multistream-select": "^6.0.22", + "@libp2p/peer-collections": "^6.0.27", + "@libp2p/peer-id": "^5.1.2", + "@libp2p/peer-store": "^11.1.4", + "@libp2p/utils": "^6.6.2", + "@multiformats/dns": "^1.0.6", + "@multiformats/multiaddr": "^12.3.5", + "@multiformats/multiaddr-matcher": "^1.7.0", + "any-signal": "^4.1.1", + "datastore-core": "^10.0.2", + "interface-datastore": "^8.3.1", + "it-byte-stream": "^2.0.1", + "it-merge": "^3.0.5", + "it-parallel": "^3.0.8", + "merge-options": "^3.0.4", + "multiformats": "^13.3.1", + "p-defer": "^4.0.1", + "p-retry": "^6.2.1", + "progress-events": "^1.0.1", + "race-event": "^1.3.0", + "race-signal": "^1.1.2", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/lighthouse-logger": { + "version": "1.4.2", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "debug": "^2.6.9", + "marky": "^1.2.2" + } + }, + "node_modules/lighthouse-logger/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/lighthouse-logger/node_modules/ms": { + "version": "2.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/locate-path": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.throttle": { + "version": "4.1.1", + "license": "MIT", + "peer": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "license": "MIT", + "peer": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "11.1.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/marky": { + "version": "1.3.0", + "license": "Apache-2.0", + "peer": true + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/memoize-one": { + "version": "5.2.1", + "license": "MIT", + "peer": true + }, + "node_modules/merge-options": { + "version": "3.0.4", + "license": "MIT", + "dependencies": { + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/metro": { + "version": "0.82.3", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/core": "^7.25.2", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.3", + "@babel/types": "^7.25.2", + "accepts": "^1.3.7", + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "connect": "^3.6.5", + "debug": "^4.4.0", + "error-stack-parser": "^2.0.6", + "flow-enums-runtime": "^0.0.6", + "graceful-fs": "^4.2.4", + "hermes-parser": "0.28.1", + "image-size": "^1.0.2", + "invariant": "^2.2.4", + "jest-worker": "^29.7.0", + "jsc-safe-url": "^0.2.2", + "lodash.throttle": "^4.1.1", + "metro-babel-transformer": "0.82.3", + "metro-cache": "0.82.3", + "metro-cache-key": "0.82.3", + "metro-config": "0.82.3", + "metro-core": "0.82.3", + "metro-file-map": "0.82.3", + "metro-resolver": "0.82.3", + "metro-runtime": "0.82.3", + "metro-source-map": "0.82.3", + "metro-symbolicate": "0.82.3", + "metro-transform-plugins": "0.82.3", + "metro-transform-worker": "0.82.3", + "mime-types": "^2.1.27", + "nullthrows": "^1.1.1", + "serialize-error": "^2.1.0", + "source-map": "^0.5.6", + "throat": "^5.0.0", + "ws": "^7.5.10", + "yargs": "^17.6.2" + }, + "bin": { + "metro": "src/cli.js" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-babel-transformer": { + "version": "0.82.3", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "^7.25.2", + "flow-enums-runtime": "^0.0.6", + "hermes-parser": "0.28.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-babel-transformer/node_modules/hermes-estree": { + "version": "0.28.1", + "license": "MIT", + "peer": true + }, + "node_modules/metro-babel-transformer/node_modules/hermes-parser": { + "version": "0.28.1", + "license": "MIT", + "peer": true, + "dependencies": { + "hermes-estree": "0.28.1" + } + }, + "node_modules/metro-cache": { + "version": "0.82.3", + "license": "MIT", + "peer": true, + "dependencies": { + "exponential-backoff": "^3.1.1", + "flow-enums-runtime": "^0.0.6", + "https-proxy-agent": "^7.0.5", + "metro-core": "0.82.3" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-cache-key": { + "version": "0.82.3", + "license": "MIT", + "peer": true, + "dependencies": { + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-config": { + "version": "0.82.3", + "license": "MIT", + "peer": true, + "dependencies": { + "connect": "^3.6.5", + "cosmiconfig": "^5.0.5", + "flow-enums-runtime": "^0.0.6", + "jest-validate": "^29.7.0", + "metro": "0.82.3", + "metro-cache": "0.82.3", + "metro-core": "0.82.3", + "metro-runtime": "0.82.3" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-core": { + "version": "0.82.3", + "license": "MIT", + "peer": true, + "dependencies": { + "flow-enums-runtime": "^0.0.6", + "lodash.throttle": "^4.1.1", + "metro-resolver": "0.82.3" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-file-map": { + "version": "0.82.3", + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "^4.4.0", + "fb-watchman": "^2.0.0", + "flow-enums-runtime": "^0.0.6", + "graceful-fs": "^4.2.4", + "invariant": "^2.2.4", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "nullthrows": "^1.1.1", + "walker": "^1.0.7" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-minify-terser": { + "version": "0.82.3", + "license": "MIT", + "peer": true, + "dependencies": { + "flow-enums-runtime": "^0.0.6", + "terser": "^5.15.0" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-resolver": { + "version": "0.82.3", + "license": "MIT", + "peer": true, + "dependencies": { + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-runtime": { + "version": "0.82.3", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.25.0", + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-source-map": { + "version": "0.82.3", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/traverse": "^7.25.3", + "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3", + "@babel/types": "^7.25.2", + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "metro-symbolicate": "0.82.3", + "nullthrows": "^1.1.1", + "ob1": "0.82.3", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-symbolicate": { + "version": "0.82.3", + "license": "MIT", + "peer": true, + "dependencies": { + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "metro-source-map": "0.82.3", + "nullthrows": "^1.1.1", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + }, + "bin": { + "metro-symbolicate": "src/index.js" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-transform-plugins": { + "version": "0.82.3", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/generator": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.3", + "flow-enums-runtime": "^0.0.6", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-transform-worker": { + "version": "0.82.3", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/types": "^7.25.2", + "flow-enums-runtime": "^0.0.6", + "metro": "0.82.3", + "metro-babel-transformer": "0.82.3", + "metro-cache": "0.82.3", + "metro-cache-key": "0.82.3", + "metro-minify-terser": "0.82.3", + "metro-source-map": "0.82.3", + "metro-transform-plugins": "0.82.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro/node_modules/accepts": { + "version": "1.3.8", + "license": "MIT", + "peer": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/metro/node_modules/ci-info": { + "version": "2.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/metro/node_modules/hermes-estree": { + "version": "0.28.1", + "license": "MIT", + "peer": true + }, + "node_modules/metro/node_modules/hermes-parser": { + "version": "0.28.1", + "license": "MIT", + "peer": true, + "dependencies": { + "hermes-estree": "0.28.1" + } + }, + "node_modules/metro/node_modules/mime-db": { + "version": "1.52.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/metro/node_modules/mime-types": { + "version": "2.1.35", + "license": "MIT", + "peer": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/metro/node_modules/negotiator": { + "version": "0.6.3", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/metro/node_modules/ws": { + "version": "7.5.10", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "license": "MIT", + "peer": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "license": "MIT", + "peer": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "license": "MIT" + }, + "node_modules/mocha": { + "version": "11.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "browser-stdout": "^1.3.1", + "chokidar": "^4.0.1", + "debug": "^4.3.5", + "diff": "^7.0.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^10.4.5", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^9.0.5", + "ms": "^2.1.3", + "picocolors": "^1.1.1", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "10.4.5", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/jackspeak": { + "version": "3.4.3", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/mocha/node_modules/lru-cache": { + "version": "10.4.3", + "dev": true, + "license": "ISC" + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "9.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/path-scurry": { + "version": "1.11.1", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/mocha/node_modules/workerpool": { + "version": "6.5.1", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/mock-socket": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.3.1.tgz", + "integrity": "sha512-qxBgB7Qa2sEQgHFjj0dSigq7fX4k6Saisd5Nelwp2q8mlbAFh5dHV9JTTlF8viYJLSSWgMCZFUom8PJcMNBoJw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/mortice": { + "version": "3.0.6", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "observable-webworkers": "^2.0.1", + "p-queue": "^8.0.1", + "p-timeout": "^6.0.0" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/multiformats": { + "version": "13.3.6", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/murmurhash3js-revisited": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/nanoid": { + "version": "5.1.5", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/netmask": { + "version": "2.0.2", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/nock": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.6.tgz", + "integrity": "sha512-o2zOYiCpzRqSzPj0Zt/dQ/DqZeYoaQ7TUonc/xUPjCGl9WeHpNbxgVvOquXYAaJzI0M9BXV3HTzG0p8IUAbBTQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "propagate": "^2.0.0" + }, + "engines": { + "node": ">= 10.13" + } + }, + "node_modules/node-abi": { + "version": "3.75.0", + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "license": "MIT", + "peer": true + }, + "node_modules/node-releases": { + "version": "2.0.19", + "license": "MIT", + "peer": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nullthrows": { + "version": "1.1.1", + "license": "MIT", + "peer": true + }, + "node_modules/ob1": { + "version": "0.82.3", + "license": "MIT", + "peer": true, + "dependencies": { + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/observable-webworkers": { + "version": "2.0.1", + "license": "Apache-2.0 OR MIT", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "license": "MIT", + "peer": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/open": { + "version": "7.4.2", + "license": "MIT", + "peer": true, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-defer": { + "version": "4.0.1", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-event": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "p-timeout": "^6.1.2" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "8.1.0", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^6.1.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "6.2.1", + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "6.1.4", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-wait-for": { + "version": "5.0.2", + "license": "MIT", + "dependencies": { + "p-timeout": "^6.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "license": "MIT", + "peer": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "2.0.0", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.5.3", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/progress-events": { + "version": "1.0.1", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/promise": { + "version": "8.3.0", + "license": "MIT", + "peer": true, + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/propagate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/protons-runtime": { + "version": "5.5.0", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "uint8-varint": "^2.0.2", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^5.0.1" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.2", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pvtsutils": { + "version": "1.3.6", + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + } + }, + "node_modules/pvutils": { + "version": "1.1.3", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/queue": { + "version": "6.0.2", + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "~2.0.3" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/rabin-wasm": { + "version": "0.1.5", + "license": "MIT", + "dependencies": { + "@assemblyscript/loader": "^0.9.4", + "bl": "^5.0.0", + "debug": "^4.3.1", + "minimist": "^1.2.5", + "node-fetch": "^2.6.1", + "readable-stream": "^3.6.0" + }, + "bin": { + "rabin-wasm": "cli/bin.js" + } + }, + "node_modules/rabin-wasm/node_modules/node-fetch": { + "version": "2.7.0", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/race-event": { + "version": "1.3.0", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/race-signal": { + "version": "1.1.3", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "19.1.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-devtools-core": { + "version": "6.1.1", + "license": "MIT", + "peer": true, + "dependencies": { + "shell-quote": "^1.6.1", + "ws": "^7" + } + }, + "node_modules/react-devtools-core/node_modules/ws": { + "version": "7.5.10", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "license": "MIT", + "peer": true + }, + "node_modules/react-native": { + "version": "0.79.2", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/create-cache-key-function": "^29.7.0", + "@react-native/assets-registry": "0.79.2", + "@react-native/codegen": "0.79.2", + "@react-native/community-cli-plugin": "0.79.2", + "@react-native/gradle-plugin": "0.79.2", + "@react-native/js-polyfills": "0.79.2", + "@react-native/normalize-colors": "0.79.2", + "@react-native/virtualized-lists": "0.79.2", + "abort-controller": "^3.0.0", + "anser": "^1.4.9", + "ansi-regex": "^5.0.0", + "babel-jest": "^29.7.0", + "babel-plugin-syntax-hermes-parser": "0.25.1", + "base64-js": "^1.5.1", + "chalk": "^4.0.0", + "commander": "^12.0.0", + "event-target-shim": "^5.0.1", + "flow-enums-runtime": "^0.0.6", + "glob": "^7.1.1", + "invariant": "^2.2.4", + "jest-environment-node": "^29.7.0", + "memoize-one": "^5.0.0", + "metro-runtime": "^0.82.0", + "metro-source-map": "^0.82.0", + "nullthrows": "^1.1.1", + "pretty-format": "^29.7.0", + "promise": "^8.3.0", + "react-devtools-core": "^6.1.1", + "react-refresh": "^0.14.0", + "regenerator-runtime": "^0.13.2", + "scheduler": "0.25.0", + "semver": "^7.1.3", + "stacktrace-parser": "^0.1.10", + "whatwg-fetch": "^3.0.0", + "ws": "^6.2.3", + "yargs": "^17.6.2" + }, + "bin": { + "react-native": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/react": "^19.0.0", + "react": "^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-native-webrtc": { + "version": "124.0.5", + "license": "MIT", + "dependencies": { + "base64-js": "1.5.1", + "debug": "4.3.4", + "event-target-shim": "6.0.2" + }, + "peerDependencies": { + "react-native": ">=0.60.0" + } + }, + "node_modules/react-native-webrtc/node_modules/debug": { + "version": "4.3.4", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/react-native-webrtc/node_modules/event-target-shim": { + "version": "6.0.2", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/react-native-webrtc/node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/react-native/node_modules/glob": { + "version": "7.2.3", + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/react-native/node_modules/ws": { + "version": "6.2.3", + "license": "MIT", + "peer": true, + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "license": "Apache-2.0" + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "license": "MIT", + "peer": true + }, + "node_modules/require-directory": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/retimeable-signal": { + "version": "1.0.1", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/retry": { + "version": "0.13.1", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "license": "ISC", + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/sanitize-filename": { + "version": "1.6.3", + "license": "WTFPL OR ISC", + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/sax": { + "version": "1.4.1", + "license": "ISC" + }, + "node_modules/scale-ts": { + "version": "1.6.1", + "license": "MIT" + }, + "node_modules/scheduler": { + "version": "0.25.0", + "license": "MIT", + "peer": true + }, + "node_modules/semver": { + "version": "7.7.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-error": { + "version": "2.1.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "license": "ISC", + "peer": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/simple-get": { + "version": "4.0.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/sinon": { + "version": "20.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1", + "@sinonjs/fake-timers": "^13.0.5", + "@sinonjs/samsam": "^8.0.1", + "diff": "^7.0.0", + "supports-color": "^7.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" + } + }, + "node_modules/sinon/node_modules/@sinonjs/fake-timers": { + "version": "13.0.5", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/smoldot": { + "version": "2.0.26", + "resolved": "https://registry.npmjs.org/smoldot/-/smoldot-2.0.26.tgz", + "integrity": "sha512-F+qYmH4z2s2FK+CxGj8moYcd1ekSIKH8ywkdqlOz88Dat35iB1DIYL11aILN46YSGMzQW/lbJNS307zBSDN5Ig==", + "license": "GPL-3.0-or-later WITH Classpath-exception-2.0", + "optional": true, + "dependencies": { + "ws": "^8.8.1" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sparse-array": { + "version": "1.3.2", + "license": "ISC" + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "license": "MIT", + "peer": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "license": "MIT", + "peer": true + }, + "node_modules/stacktrace-parser": { + "version": "0.1.11", + "license": "MIT", + "peer": true, + "dependencies": { + "type-fest": "^0.7.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stream-to-it": { + "version": "1.0.1", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-stream-types": "^2.0.1" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/super-regex": { + "version": "0.2.0", + "license": "MIT", + "dependencies": { + "clone-regexp": "^3.0.0", + "function-timeout": "^0.1.0", + "time-span": "^5.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar-fs": { + "version": "2.1.2", + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/bl": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/tar-stream/node_modules/buffer": { + "version": "5.7.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/terser": { + "version": "5.39.0", + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "license": "MIT", + "peer": true + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "license": "ISC", + "peer": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/throat": { + "version": "5.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/thunky": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/time-span": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "convert-hrtime": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/timestamp-nano": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/tldts": { + "version": "6.1.86", + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.86" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.86", + "license": "MIT" + }, + "node_modules/tmpl": { + "version": "1.0.5", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "5.1.2", + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "license": "MIT" + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "license": "WTFPL", + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "license": "0BSD" + }, + "node_modules/tsx": { + "version": "4.19.4", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.25.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/tsyringe": { + "version": "4.10.0", + "license": "MIT", + "dependencies": { + "tslib": "^1.9.3" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/tsyringe/node_modules/tslib": { + "version": "1.14.1", + "license": "0BSD" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.7.1", + "license": "(MIT OR CC0-1.0)", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.33.0", + "@typescript-eslint/parser": "8.33.0", + "@typescript-eslint/utils": "8.33.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/uint8-varint": { + "version": "2.0.4", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "uint8arraylist": "^2.0.0", + "uint8arrays": "^5.0.0" + } + }, + "node_modules/uint8arraylist": { + "version": "2.4.8", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "uint8arrays": "^5.0.1" + } + }, + "node_modules/uint8arrays": { + "version": "5.1.0", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "multiformats": "^13.0.0" + } + }, + "node_modules/undici": { + "version": "6.21.2", + "license": "MIT", + "engines": { + "node": ">=18.17" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "license": "MIT" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/utf8-byte-length": { + "version": "1.0.5", + "license": "(WTFPL OR MIT)" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vlq": { + "version": "1.0.1", + "license": "MIT", + "peer": true + }, + "node_modules/walker": { + "version": "1.0.8", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/weald": { + "version": "1.0.4", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "ms": "^3.0.0-canary.1", + "supports-color": "^9.4.0" + } + }, + "node_modules/weald/node_modules/ms": { + "version": "3.0.0-canary.1", + "license": "MIT", + "engines": { + "node": ">=12.13" + } + }, + "node_modules/weald/node_modules/supports-color": { + "version": "9.4.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/webcrypto-core": { + "version": "1.8.1", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.3.13", + "@peculiar/json-schema": "^1.1.12", + "asn1js": "^3.0.5", + "pvtsutils": "^1.3.5", + "tslib": "^2.7.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "license": "MIT", + "peer": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wherearewe": { + "version": "2.0.1", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "is-electron": "^2.2.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workerpool": { + "version": "9.3.2", + "license": "Apache-2.0" + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "license": "ISC", + "peer": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "3.0.7", + "license": "ISC", + "peer": true + }, + "node_modules/ws": { + "version": "8.18.2", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml2js": { + "version": "0.6.2", + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "license": "ISC", + "peer": true + }, + "node_modules/yargs": { + "version": "17.7.2", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/node_modules/camelcase": { + "version": "6.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/e2e/package.json b/e2e/package.json new file mode 100644 index 0000000000..6c726aecd5 --- /dev/null +++ b/e2e/package.json @@ -0,0 +1,55 @@ +{ + "name": "frequency-e2e-tests", + "version": "1.0.0", + "description": "End to end tests for the Frequency project", + "type": "module", + "scripts": { + "clean": "rm -Rf dist", + "build": "tsc -p ./tsconfig.json", + "test": "mocha", + "test:serial": "mocha --parallel=false", + "test:relay-single": "mocha --config .relay-chain.mocharc.json --bail", + "test:relay-funding": "mocha --config .relay-chain-all.mocharc.json --dry-run", + "test:relay": "mocha --config .relay-chain-all.mocharc.json", + "test:relay-list": "node test-files.mjs", + "test:load": "mocha --config .load-test.mocharc.json", + "format": "tsc --noEmit --pretty && prettier --write . && eslint --fix .", + "lint": "tsc --noEmit --pretty && eslint . && prettier --check .", + "preinstall": "echo \"NOTICE: E2E tests REQUIRE ../js/api-augment to have been built and packaged\"" + }, + "keywords": [], + "author": "", + "license": "Apache-2.0", + "dependencies": { + "@frequency-chain/api-augment": "file:../js/api-augment/dist/frequency-chain-api-augment-0.0.0.tgz", + "@frequency-chain/ethereum-utils": "file:../js/ethereum-utils/dist/frequency-chain-ethereum-utils-0.0.0.tgz", + "@helia/unixfs": "^5.0.3", + "@noble/curves": "^1.9.1", + "@polkadot-api/merkleize-metadata": "^1.1.17", + "@polkadot/api": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/util": "13.5.1", + "ethers": "^6.14.3", + "helia": "^5.4.2", + "multiformats": "^13.3.6", + "rxjs": "^7.8.2", + "workerpool": "^9.3.2" + }, + "devDependencies": { + "@eslint/js": "^9.27.0", + "@types/mocha": "^10.0.10", + "eslint": "^9.27.0", + "eslint-plugin-mocha": "^11.1.0", + "glob": "^11.0.2", + "globals": "^16.2.0", + "mocha": "^11.5.0", + "prettier": "^3.5.3", + "sinon": "^20.0.0", + "tsx": "^4.19.4", + "typescript": "^5.8.3", + "typescript-eslint": "^8.33.0" + }, + "optionalDependencies": { + "@esbuild/linux-x64": "0.25.5" + } +} diff --git a/e2e/passkey/passkeyProxy.ethereum.test.ts b/e2e/passkey/passkeyProxy.ethereum.test.ts new file mode 100644 index 0000000000..34d0b74abb --- /dev/null +++ b/e2e/passkey/passkeyProxy.ethereum.test.ts @@ -0,0 +1,77 @@ +import '@frequency-chain/api-augment'; +import assert from 'assert'; +import { + createAndFundKeypair, + EcdsaSignature, + getBlockNumber, + getNonce, + Sr25519Signature, +} from '../scaffolding/helpers'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { getFundingSource } from '../scaffolding/funding'; +import { getUnifiedPublicKey, getUnifiedAddress } from '@frequency-chain/ethereum-utils'; +import { createPassKeyAndSignAccount, createPassKeyCall, createPasskeyPayload } from '../scaffolding/P256'; +import { u8aToHex, u8aWrapBytes } from '@polkadot/util'; +const fundingSource = getFundingSource(import.meta.url); + +describe('Passkey Pallet Ethereum Tests', function () { + describe('passkey ethereum tests', function () { + let fundedSr25519Keys: KeyringPair; + let fundedEthereumKeys: KeyringPair; + let receiverKeys: KeyringPair; + + before(async function () { + fundedSr25519Keys = await createAndFundKeypair(fundingSource, 400_000_000n); + fundedEthereumKeys = await createAndFundKeypair(fundingSource, 400_000_000n, 'passkey-1', undefined, 'ethereum'); + receiverKeys = await createAndFundKeypair(fundingSource); + }); + + it('should transfer via passkeys with root sr25519 key into an ethereum style account', async function () { + const initialReceiverBalance = await ExtrinsicHelper.getAccountInfo(receiverKeys); + const accountPKey = getUnifiedPublicKey(fundedSr25519Keys); + const nonce = await getNonce(fundedSr25519Keys); + const transferCalls = ExtrinsicHelper.api.tx.balances.transferKeepAlive( + getUnifiedAddress(receiverKeys), + 55_000_000n + ); + const { passKeyPrivateKey, passKeyPublicKey } = createPassKeyAndSignAccount(accountPKey); + const accountSignature = fundedSr25519Keys.sign(u8aWrapBytes(passKeyPublicKey)); + const multiSignature: Sr25519Signature = { Sr25519: u8aToHex(accountSignature) }; + const passkeyCall = await createPassKeyCall(accountPKey, nonce, multiSignature, transferCalls); + const passkeyPayload = await createPasskeyPayload(passKeyPrivateKey, passKeyPublicKey, passkeyCall, false); + const passkeyProxy = ExtrinsicHelper.executePassKeyProxy(fundedSr25519Keys, passkeyPayload); + await assert.doesNotReject(passkeyProxy.fundAndSendUnsigned(fundingSource)); + await ExtrinsicHelper.waitForFinalization((await getBlockNumber()) + 2); + // adding some delay before fetching the nonce to ensure it is updated + await new Promise((resolve) => setTimeout(resolve, 1000)); + const nonceAfter = (await ExtrinsicHelper.getAccountInfo(fundedSr25519Keys)).nonce.toNumber(); + assert.equal(nonce + 1, nonceAfter); + }); + + it('should transfer via passkeys with root ethereum style key into another one', async function () { + const initialReceiverBalance = await ExtrinsicHelper.getAccountInfo(receiverKeys); + const accountPKey = getUnifiedPublicKey(fundedEthereumKeys); + console.log(`accountPKey ${u8aToHex(accountPKey)}`); + const nonce = await getNonce(fundedEthereumKeys); + const transferCalls = ExtrinsicHelper.api.tx.balances.transferKeepAlive( + getUnifiedAddress(receiverKeys), + 66_000_000n + ); + const { passKeyPrivateKey, passKeyPublicKey } = createPassKeyAndSignAccount(accountPKey); + // ethereum keys should not have wrapping + const accountSignature = fundedEthereumKeys.sign(passKeyPublicKey); + console.log(`accountSignature ${u8aToHex(accountSignature)}`); + const multiSignature: EcdsaSignature = { Ecdsa: u8aToHex(accountSignature) }; + const passkeyCall = await createPassKeyCall(accountPKey, nonce, multiSignature, transferCalls); + const passkeyPayload = await createPasskeyPayload(passKeyPrivateKey, passKeyPublicKey, passkeyCall, false); + const passkeyProxy = ExtrinsicHelper.executePassKeyProxy(fundingSource, passkeyPayload); + await assert.doesNotReject(passkeyProxy.sendUnsigned()); + await ExtrinsicHelper.waitForFinalization((await getBlockNumber()) + 2); + // adding some delay before fetching the nonce to ensure it is updated + await new Promise((resolve) => setTimeout(resolve, 1000)); + const nonceAfter = (await ExtrinsicHelper.getAccountInfo(fundedEthereumKeys)).nonce.toNumber(); + assert.equal(nonce + 1, nonceAfter); + }); + }); +}); diff --git a/e2e/passkey/passkeyProxy.test.ts b/e2e/passkey/passkeyProxy.test.ts new file mode 100644 index 0000000000..9e4ef083fe --- /dev/null +++ b/e2e/passkey/passkeyProxy.test.ts @@ -0,0 +1,94 @@ +import '@frequency-chain/api-augment'; +import assert from 'assert'; +import { + createAndFundKeypair, + getBlockNumber, + getNextEpochBlock, + getNonce, + Sr25519Signature, +} from '../scaffolding/helpers'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { getFundingSource } from '../scaffolding/funding'; +import { u8aToHex, u8aWrapBytes } from '@polkadot/util'; +import { createPassKeyAndSignAccount, createPassKeyCall, createPasskeyPayload } from '../scaffolding/P256'; +import { getUnifiedPublicKey } from '@frequency-chain/ethereum-utils'; +const fundingSource = getFundingSource(import.meta.url); + +describe('Passkey Pallet Tests', function () { + describe('proxy basic tests', function () { + let fundedKeys: KeyringPair; + let receiverKeys: KeyringPair; + + before(async function () { + fundedKeys = await createAndFundKeypair(fundingSource, 300_000_000n); + receiverKeys = await createAndFundKeypair(fundingSource); + }); + + it('should fail due to unsupported call', async function () { + const accountPKey = getUnifiedPublicKey(fundedKeys); + const nonce = await getNonce(fundedKeys); + + const remarksCalls = ExtrinsicHelper.api.tx.system.remark('passkey-test'); + const { passKeyPrivateKey, passKeyPublicKey, passkeySignature } = createPassKeyAndSignAccount(accountPKey); + const accountSignature = fundedKeys.sign(u8aWrapBytes(passKeyPublicKey)); + const multiSignature: Sr25519Signature = { Sr25519: u8aToHex(accountSignature) }; + const passkeyCall = await createPassKeyCall(accountPKey, nonce, multiSignature, remarksCalls); + const passkeyPayload = await createPasskeyPayload(passKeyPrivateKey, passKeyPublicKey, passkeyCall, false); + + const passkeyProxy = ExtrinsicHelper.executePassKeyProxy(fundedKeys, passkeyPayload); + await assert.rejects(passkeyProxy.fundAndSendUnsigned(fundingSource, true)); + }); + + it('should fail to transfer balance due to bad account ownership proof', async function () { + const accountPKey = getUnifiedPublicKey(fundedKeys); + const nonce = await getNonce(fundedKeys); + const transferCalls = ExtrinsicHelper.api.tx.balances.transferKeepAlive(getUnifiedPublicKey(receiverKeys), 0n); + const { passKeyPrivateKey, passKeyPublicKey, passkeySignature } = createPassKeyAndSignAccount(accountPKey); + const accountSignature = fundedKeys.sign('badPasskeyPublicKey'); + const multiSignature: Sr25519Signature = { Sr25519: u8aToHex(accountSignature) }; + const passkeyCall = await createPassKeyCall(accountPKey, nonce, multiSignature, transferCalls); + const passkeyPayload = await createPasskeyPayload(passKeyPrivateKey, passKeyPublicKey, passkeyCall, false); + + const passkeyProxy = ExtrinsicHelper.executePassKeyProxy(fundedKeys, passkeyPayload); + await assert.rejects(passkeyProxy.fundAndSendUnsigned(fundingSource, true)); + }); + + it('should fail to transfer balance due to bad passkey signature', async function () { + const accountPKey = getUnifiedPublicKey(fundedKeys); + const nonce = await getNonce(fundedKeys); + const transferCalls = ExtrinsicHelper.api.tx.balances.transferKeepAlive(getUnifiedPublicKey(receiverKeys), 0n); + const { passKeyPrivateKey, passKeyPublicKey, passkeySignature } = createPassKeyAndSignAccount(accountPKey); + const accountSignature = fundedKeys.sign(u8aWrapBytes(passKeyPublicKey)); + const multiSignature: Sr25519Signature = { Sr25519: u8aToHex(accountSignature) }; + const passkeyCall = await createPassKeyCall(accountPKey, nonce, multiSignature, transferCalls); + const passkeyPayload = await createPasskeyPayload(passKeyPrivateKey, passKeyPublicKey, passkeyCall, true); + + const passkeyProxy = ExtrinsicHelper.executePassKeyProxy(fundedKeys, passkeyPayload); + await assert.rejects(passkeyProxy.fundAndSendUnsigned(fundingSource, true)); + }); + + it('should transfer small balance from fundedKeys to receiverKeys', async function () { + const accountPKey = getUnifiedPublicKey(fundedKeys); + const nonce = await getNonce(fundedKeys); + const transferCalls = ExtrinsicHelper.api.tx.balances.transferKeepAlive( + getUnifiedPublicKey(receiverKeys), + 100_000_000n + ); + const { passKeyPrivateKey, passKeyPublicKey } = createPassKeyAndSignAccount(accountPKey); + const accountSignature = fundedKeys.sign(u8aWrapBytes(passKeyPublicKey)); + const multiSignature: Sr25519Signature = { Sr25519: u8aToHex(accountSignature) }; + const passkeyCall = await createPassKeyCall(accountPKey, nonce, multiSignature, transferCalls); + const passkeyPayload = await createPasskeyPayload(passKeyPrivateKey, passKeyPublicKey, passkeyCall, false); + const passkeyProxy = ExtrinsicHelper.executePassKeyProxy(fundedKeys, passkeyPayload); + await assert.doesNotReject(passkeyProxy.fundAndSendUnsigned(fundingSource)); + await ExtrinsicHelper.waitForFinalization((await getBlockNumber()) + 2); + const receiverBalance = await ExtrinsicHelper.getAccountInfo(receiverKeys); + // adding some delay before fetching the nonce to ensure it is updated + await new Promise((resolve) => setTimeout(resolve, 2000)); + const nonceAfter = (await ExtrinsicHelper.getAccountInfo(fundedKeys)).nonce.toNumber(); + assert.equal(nonce + 1, nonceAfter); + assert(receiverBalance.data.free.toBigInt() > 0n); + }); + }); +}); diff --git a/e2e/passkey/passkeyProxyV2.ethereum.test.ts b/e2e/passkey/passkeyProxyV2.ethereum.test.ts new file mode 100644 index 0000000000..5fcc4b2057 --- /dev/null +++ b/e2e/passkey/passkeyProxyV2.ethereum.test.ts @@ -0,0 +1,197 @@ +import '@frequency-chain/api-augment'; +import assert from 'assert'; +import { createAndFundKeypair, EcdsaSignature, getNonce, log, Sr25519Signature } from '../scaffolding/helpers'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { Extrinsic, ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { getFundingSource } from '../scaffolding/funding'; +import { getUnifiedPublicKey, getUnifiedAddress } from '@frequency-chain/ethereum-utils'; +import { createPassKeyAndSignAccount, createPassKeyCallV2, createPasskeyPayloadV2 } from '../scaffolding/P256'; +import { u8aToHex, u8aWrapBytes } from '@polkadot/util'; +import { AccountId32 } from '@polkadot/types/interfaces'; +import { ISubmittableResult } from '@polkadot/types/types'; +const fundingSource = getFundingSource(import.meta.url); + +describe('Passkey Pallet Proxy V2 Ethereum Tests', function () { + describe('passkey ethereum tests', function () { + let fundedSr25519Keys: KeyringPair; + let fundedEthereumKeys: KeyringPair; + let receiverKeys: KeyringPair; + + before(async function () { + fundedSr25519Keys = await createAndFundKeypair(fundingSource, 300_000_000n); + fundedEthereumKeys = await createAndFundKeypair(fundingSource, 300_000_000n, undefined, undefined, 'ethereum'); + receiverKeys = await createAndFundKeypair(fundingSource); + }); + + it('should transfer via passkeys with root sr25519 key into an ethereum style account', async function () { + const startingBalance = (await ExtrinsicHelper.getAccountInfo(receiverKeys)).data.free.toBigInt(); + const accountPKey = getUnifiedPublicKey(fundedSr25519Keys); + const nonce = await getNonce(fundedSr25519Keys); + const transferAmount = 55_000_000n; + const transferCalls = ExtrinsicHelper.api.tx.balances.transferKeepAlive( + getUnifiedAddress(receiverKeys), + transferAmount + ); + const { passKeyPrivateKey, passKeyPublicKey } = createPassKeyAndSignAccount(accountPKey); + const accountSignature = fundedSr25519Keys.sign(u8aWrapBytes(passKeyPublicKey)); + const multiSignature: Sr25519Signature = { Sr25519: u8aToHex(accountSignature) }; + const passkeyCall = await createPassKeyCallV2(accountPKey, nonce, transferCalls); + const passkeyPayload = await createPasskeyPayloadV2( + multiSignature, + passKeyPrivateKey, + passKeyPublicKey, + passkeyCall, + false + ); + const passkeyProxy = ExtrinsicHelper.executePassKeyProxyV2(fundedSr25519Keys, passkeyPayload); + try { + const { + target, + eventMap: { 'balances.Transfer': transferEvent }, + } = await passkeyProxy.fundAndSendUnsigned(fundingSource); + assert.notEqual(target, undefined, 'Target event should not be undefined'); + assert.equal( + ExtrinsicHelper.api.events.balances.Transfer.is(transferEvent), + true, + 'Transfer event should be of correct type' + ); + if (transferEvent && ExtrinsicHelper.api.events.balances.Transfer.is(transferEvent)) { + const { from, to, amount } = transferEvent.data; + assert.equal( + from.toString(), + getUnifiedAddress(fundedSr25519Keys), + 'From address should be the funded sr25519 key' + ); + assert.equal(to.toString(), getUnifiedAddress(receiverKeys), 'To address should be the receiver key'); + assert.equal(amount.toBigInt(), transferAmount, `Transfer amount should be ${transferAmount}`); + } + } catch (e: any) { + assert.fail(e); + } + + /* + * Normally these checks would be unnecessary, but we are testing the passkey pallet + * which has additional logic surrounding mapping account keys, so we want to make sure + * that the nonce and balance are updated correctly. + */ + const nonceAfter = (await ExtrinsicHelper.getAccountInfo(fundedSr25519Keys)).nonce.toNumber(); + assert.equal(nonce + 1, nonceAfter, 'Nonce should be incremented by 1'); + + const balanceAfter = (await ExtrinsicHelper.getAccountInfo(receiverKeys)).data.free.toBigInt(); + assert.equal( + balanceAfter, + startingBalance + transferAmount, + 'Receiver balance should be incremented by transfer amount' + ); + }); + + describe('successful transfer via passkeys with root ethereum-style key into a polkadot-style key', function () { + let startingReceiverBalance: bigint; + let startingSenderBalance: bigint; + let accountPKey: Uint8Array; + let nonce: number; + let target: any; + let transferEvent: any; + let feeEvent: any; + let passkeyProxy: Extrinsic< + { + accountId: AccountId32; + }, + ISubmittableResult, + [accountId: AccountId32] + >; + + const transferAmount = 66_000_000n; + + before(async function () { + startingReceiverBalance = (await ExtrinsicHelper.getAccountInfo(receiverKeys)).data.free.toBigInt(); + startingSenderBalance = (await ExtrinsicHelper.getAccountInfo(fundedEthereumKeys)).data.free.toBigInt(); + accountPKey = getUnifiedPublicKey(fundedEthereumKeys); + log(`accountPKey ${u8aToHex(accountPKey)}`); + nonce = await getNonce(fundedEthereumKeys); + const transferCalls = ExtrinsicHelper.api.tx.balances.transferKeepAlive( + getUnifiedAddress(receiverKeys), + transferAmount + ); + const { passKeyPrivateKey, passKeyPublicKey } = createPassKeyAndSignAccount(accountPKey); + // ethereum keys should not have wrapping + const accountSignature = fundedEthereumKeys.sign(passKeyPublicKey); + log(`accountSignature ${u8aToHex(accountSignature)}`); + const multiSignature: EcdsaSignature = { Ecdsa: u8aToHex(accountSignature) }; + const passkeyCall = await createPassKeyCallV2(accountPKey, nonce, transferCalls); + const passkeyPayload = await createPasskeyPayloadV2( + multiSignature, + passKeyPrivateKey, + passKeyPublicKey, + passkeyCall, + false + ); + passkeyProxy = ExtrinsicHelper.executePassKeyProxyV2(fundingSource, passkeyPayload); + }); + + it('should successfully execute transfer extrinsic', async function () { + await assert.doesNotReject(async () => { + ({ + target, + eventMap: { 'balances.Transfer': transferEvent, 'balances.Withdraw': feeEvent }, + } = await passkeyProxy.sendUnsigned()); + }); + }); + + it('should have received a transaction execution success event', async function () { + assert.notEqual(target, undefined, 'Target event should not be undefined'); + assert.equal( + ExtrinsicHelper.api.events.passkey.TransactionExecutionSuccess.is(target), + true, + 'Target event should be of correct type' + ); + }); + + it('should have debited & credited correct accounts for the correct amount', async function () { + if (transferEvent && ExtrinsicHelper.api.events.balances.Transfer.is(transferEvent)) { + const { from, to, amount } = transferEvent.data; + assert.equal(from.toString(), getUnifiedAddress(fundedEthereumKeys), 'From address should be the funded key'); + assert.equal(to.toString(), getUnifiedAddress(receiverKeys), 'To address should be the receiver key'); + assert.equal(amount.toBigInt(), transferAmount, `Transfer amount should be ${transferAmount}`); + } else { + assert.fail('Transfer event not found'); + } + }); + + it('should have deducted fee from the sender', async function () { + if (feeEvent && ExtrinsicHelper.api.events.balances.Withdraw.is(feeEvent)) { + const { who, amount } = feeEvent.data; + assert.equal(who.toString(), getUnifiedAddress(fundedEthereumKeys), 'Fee should be deducted from the sender'); + assert.equal(amount.toBigInt() > 0, true, 'Fee should be greater than 0'); + } else { + assert.fail('Fee event not found'); + } + }); + + /* + * Normally these checks would be unnecessary, but we are testing the passkey pallet + * which has additional logic surrounding mapping account keys, so we want to make sure + * that the nonce and balance are updated correctly. + */ + it('should have incremented nonce by 1 for sender', async function () { + const nonceAfter = (await ExtrinsicHelper.getAccountInfo(fundedEthereumKeys)).nonce.toNumber(); + assert.equal(nonce + 1, nonceAfter, 'Nonce should be incremented by 1'); + }); + + it('should have changed account balances correctly', async function () { + const endingReceiverBalance = (await ExtrinsicHelper.getAccountInfo(receiverKeys)).data.free.toBigInt(); + const endingSenderBalance = (await ExtrinsicHelper.getAccountInfo(fundedEthereumKeys)).data.free.toBigInt(); + assert.equal( + endingReceiverBalance, + startingReceiverBalance + transferAmount, + 'Receiver balance should be incremented by transfer amount' + ); + assert.equal( + startingSenderBalance - transferAmount >= endingSenderBalance, + true, + 'Sender balance should be decremented by at least transfer amount' + ); + }); + }); + }); +}); diff --git a/e2e/passkey/passkeyProxyV2.test.ts b/e2e/passkey/passkeyProxyV2.test.ts new file mode 100644 index 0000000000..d708002b93 --- /dev/null +++ b/e2e/passkey/passkeyProxyV2.test.ts @@ -0,0 +1,191 @@ +import '@frequency-chain/api-augment'; +import assert from 'assert'; +import { createAndFundKeypair, getBlockNumber, getNonce, Sr25519Signature } from '../scaffolding/helpers'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { Extrinsic, ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { getFundingSource } from '../scaffolding/funding'; +import { u8aToHex, u8aWrapBytes } from '@polkadot/util'; +import { createPassKeyAndSignAccount, createPassKeyCallV2, createPasskeyPayloadV2 } from '../scaffolding/P256'; +import { getUnifiedAddress, getUnifiedPublicKey } from '@frequency-chain/ethereum-utils'; +import { AccountId32 } from '@polkadot/types/interfaces'; +import { ISubmittableResult } from '@polkadot/types/types'; +const fundingSource = getFundingSource(import.meta.url); + +describe('Passkey Pallet Proxy V2 Tests', function () { + describe('proxy basic tests', function () { + let fundedKeys: KeyringPair; + let receiverKeys: KeyringPair; + + before(async function () { + fundedKeys = await createAndFundKeypair(fundingSource, 300_000_000n); + receiverKeys = await createAndFundKeypair(fundingSource); + }); + + it('should fail due to unsupported call', async function () { + const accountPKey = getUnifiedPublicKey(fundedKeys); + const nonce = await getNonce(fundedKeys); + + const remarksCalls = ExtrinsicHelper.api.tx.system.remark('passkey-test'); + const { passKeyPrivateKey, passKeyPublicKey } = createPassKeyAndSignAccount(accountPKey); + const accountSignature = fundedKeys.sign(u8aWrapBytes(passKeyPublicKey)); + const multiSignature: Sr25519Signature = { Sr25519: u8aToHex(accountSignature) }; + const passkeyCall = await createPassKeyCallV2(accountPKey, nonce, remarksCalls); + const passkeyPayload = await createPasskeyPayloadV2( + multiSignature, + passKeyPrivateKey, + passKeyPublicKey, + passkeyCall, + false + ); + + const passkeyProxy = ExtrinsicHelper.executePassKeyProxyV2(fundedKeys, passkeyPayload); + await assert.rejects(passkeyProxy.fundAndSendUnsigned(fundingSource, true), /Transaction call is not expected/); + }); + + it('should fail to transfer balance due to bad account ownership proof', async function () { + const accountPKey = getUnifiedPublicKey(fundedKeys); + const nonce = await getNonce(fundedKeys); + const transferCalls = ExtrinsicHelper.api.tx.balances.transferKeepAlive(getUnifiedPublicKey(receiverKeys), 0n); + const { passKeyPrivateKey, passKeyPublicKey } = createPassKeyAndSignAccount(accountPKey); + const accountSignature = fundedKeys.sign('badPasskeyPublicKey'); + const multiSignature: Sr25519Signature = { Sr25519: u8aToHex(accountSignature) }; + const passkeyCall = await createPassKeyCallV2(accountPKey, nonce, transferCalls); + const passkeyPayload = await createPasskeyPayloadV2( + multiSignature, + passKeyPrivateKey, + passKeyPublicKey, + passkeyCall, + false + ); + + const passkeyProxy = ExtrinsicHelper.executePassKeyProxyV2(fundedKeys, passkeyPayload); + await assert.rejects(passkeyProxy.fundAndSendUnsigned(fundingSource, true), /Invalid signing address/); + }); + + it('should fail to transfer balance due to bad passkey signature', async function () { + const accountPKey = getUnifiedPublicKey(fundedKeys); + const nonce = await getNonce(fundedKeys); + const transferCalls = ExtrinsicHelper.api.tx.balances.transferKeepAlive(getUnifiedPublicKey(receiverKeys), 0n); + const { passKeyPrivateKey, passKeyPublicKey } = createPassKeyAndSignAccount(accountPKey); + const accountSignature = fundedKeys.sign(u8aWrapBytes(passKeyPublicKey)); + const multiSignature: Sr25519Signature = { Sr25519: u8aToHex(accountSignature) }; + const passkeyCall = await createPassKeyCallV2(accountPKey, nonce, transferCalls); + const passkeyPayload = await createPasskeyPayloadV2( + multiSignature, + passKeyPrivateKey, + passKeyPublicKey, + passkeyCall, + true + ); + + const passkeyProxy = ExtrinsicHelper.executePassKeyProxyV2(fundedKeys, passkeyPayload); + await assert.rejects(passkeyProxy.fundAndSendUnsigned(fundingSource, true), /Custom error: 4/); + }); + + describe('successful transfer small balance from fundedKeys to receiverKeys', function () { + let startingReceiverBalance: bigint; + let startingSenderBalance: bigint; + let accountPKey: Uint8Array; + let nonce: number; + let target: any; + let transferEvent: any; + let feeEvent: any; + let passkeyProxy: Extrinsic< + { + accountId: AccountId32; + }, + ISubmittableResult, + [accountId: AccountId32] + >; + + const transferAmount = 100_000_000n; + + before(async function () { + startingReceiverBalance = (await ExtrinsicHelper.getAccountInfo(receiverKeys)).data.free.toBigInt(); + startingSenderBalance = (await ExtrinsicHelper.getAccountInfo(fundedKeys)).data.free.toBigInt(); + accountPKey = getUnifiedPublicKey(fundedKeys); + nonce = await getNonce(fundedKeys); + const transferCalls = ExtrinsicHelper.api.tx.balances.transferKeepAlive( + getUnifiedPublicKey(receiverKeys), + transferAmount + ); + const { passKeyPrivateKey, passKeyPublicKey } = createPassKeyAndSignAccount(accountPKey); + const accountSignature = fundedKeys.sign(u8aWrapBytes(passKeyPublicKey)); + const multiSignature: Sr25519Signature = { Sr25519: u8aToHex(accountSignature) }; + const passkeyCall = await createPassKeyCallV2(accountPKey, nonce, transferCalls); + const passkeyPayload = await createPasskeyPayloadV2( + multiSignature, + passKeyPrivateKey, + passKeyPublicKey, + passkeyCall, + false + ); + passkeyProxy = ExtrinsicHelper.executePassKeyProxyV2(fundedKeys, passkeyPayload); + }); + + it('should successfully execute transfer extrinsic', async function () { + await assert.doesNotReject(async () => { + ({ + target, + eventMap: { 'balances.Transfer': transferEvent, 'balances.Withdraw': feeEvent }, + } = await passkeyProxy.fundAndSendUnsigned(fundingSource)); + }); + }); + + it('should have received a transaction execution success event', async function () { + assert.notEqual(target, undefined, 'Target event should not be undefined'); + assert.equal( + ExtrinsicHelper.api.events.balances.Transfer.is(transferEvent), + true, + 'Transfer event should be of correct type' + ); + }); + + it('should have debited and credited correct accounts for the correct amount', async function () { + if (transferEvent && ExtrinsicHelper.api.events.balances.Transfer.is(transferEvent)) { + const { from, to, amount } = transferEvent.data; + assert.equal(from.toString(), getUnifiedAddress(fundedKeys), 'From address should be the funded key'); + assert.equal(to.toString(), getUnifiedAddress(receiverKeys), 'To address should be the receiver key'); + assert.equal(amount.toBigInt(), transferAmount, `Transfer amount should be ${transferAmount}`); + } else { + assert.fail('Transfer event not found'); + } + }); + + it('should have deducted the correct fee from the sender', async function () { + if (feeEvent && ExtrinsicHelper.api.events.balances.Withdraw.is(feeEvent)) { + const { who, amount } = feeEvent.data; + assert.equal(who.toString(), getUnifiedAddress(fundedKeys), 'Fee should be deducted from the sender'); + assert.equal(amount.toBigInt() > 0n, true, 'Fee should be greater than 0'); + } else { + assert.fail('Fee event not found'); + } + }); + + /* + * Normally these checks would be unnecessary, but we are testing the passkey pallet + * which has additional logic surrounding mapping account keys, so we want to make sure + * that the nonce and balance are updated correctly. + */ + it('should have incremented nonce by 1 for sender', async function () { + const nonceAfter = (await ExtrinsicHelper.getAccountInfo(fundedKeys)).nonce.toNumber(); + assert.equal(nonce + 1, nonceAfter, 'Nonce should be incremented by 1'); + }); + + it('should have changed account balances correctly', async function () { + const endingReceiverBalance = (await ExtrinsicHelper.getAccountInfo(receiverKeys)).data.free.toBigInt(); + const endingSenderBalance = (await ExtrinsicHelper.getAccountInfo(fundedKeys)).data.free.toBigInt(); + assert.equal( + endingReceiverBalance, + startingReceiverBalance + transferAmount, + 'Receiver balance should be incremented by transfer amount' + ); + assert.equal( + startingSenderBalance - transferAmount >= endingSenderBalance, + true, + 'Sender balance should be decremented by at least transfer amount' + ); + }); + }); + }); +}); diff --git a/e2e/proxy-pallet/proxy.test.ts b/e2e/proxy-pallet/proxy.test.ts new file mode 100644 index 0000000000..9c5eaf9cf3 --- /dev/null +++ b/e2e/proxy-pallet/proxy.test.ts @@ -0,0 +1,131 @@ +import '@frequency-chain/api-augment'; +import assert from 'assert'; +import { createAndFundKeypair } from '../scaffolding/helpers'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { Extrinsic, ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { getFundingSource } from '../scaffolding/funding'; +import { getUnifiedAddress } from '@frequency-chain/ethereum-utils'; + +const DOLLARS = 100000000n; // 100_000_000 + +const fundingSource: KeyringPair = getFundingSource(import.meta.url); + +describe('Proxy', function () { + describe('Basic Any Proxy Successes', function () { + let stashKeys: KeyringPair; + let proxyKeys: KeyringPair; + + before(async function () { + stashKeys = await createAndFundKeypair(fundingSource, 100n * DOLLARS); + proxyKeys = await createAndFundKeypair(fundingSource, 1n * DOLLARS); + }); + + it('Creates a Proxy', async function () { + const extrinsic = new Extrinsic( + () => ExtrinsicHelper.api.tx.proxy.addProxy(getUnifiedAddress(proxyKeys), 'Any', 0), + stashKeys, + ExtrinsicHelper.api.events.proxy.ProxyAdded + ); + + const { target } = await extrinsic.signAndSend(); + assert.notEqual(target, undefined, 'should have returned ProxyAdded event'); + }); + + it('Sends a transfer', async function () { + const extrinsic = new Extrinsic( + () => + ExtrinsicHelper.api.tx.proxy.proxy( + getUnifiedAddress(stashKeys), + 'Any', + ExtrinsicHelper.api.tx.balances.transferAllowDeath(getUnifiedAddress(proxyKeys), 1n * DOLLARS) + ), + proxyKeys, + ExtrinsicHelper.api.events.balances.Transfer + ); + + const { target } = await extrinsic.signAndSend(); + assert.notEqual(target, undefined, 'should have returned Transfer event'); + }); + + it('Can remove the proxy', async function () { + const extrinsic = new Extrinsic( + () => ExtrinsicHelper.api.tx.proxy.removeProxy(getUnifiedAddress(proxyKeys), 'Any', 0), + stashKeys, + ExtrinsicHelper.api.events.proxy.ProxyRemoved + ); + + const { target } = await extrinsic.signAndSend(); + assert.notEqual(target, undefined, 'should have returned ProxyRemoved event'); + }); + }); + + describe('Basic NonTransfer Proxy', function () { + let stashKeys: KeyringPair; + let proxyKeys: KeyringPair; + + before(async function () { + stashKeys = await createAndFundKeypair(fundingSource, 100n * DOLLARS); + proxyKeys = await createAndFundKeypair(fundingSource, 1n * DOLLARS); + }); + + it('Creates a Proxy', async function () { + const extrinsic = new Extrinsic( + () => ExtrinsicHelper.api.tx.proxy.addProxy(getUnifiedAddress(proxyKeys), 'NonTransfer', 0), + stashKeys, + ExtrinsicHelper.api.events.proxy.ProxyAdded + ); + + const { target } = await extrinsic.signAndSend(); + assert.notEqual(target, undefined, 'should have returned ProxyAdded event'); + }); + + it('CANNOT send a transfer', async function () { + const extrinsic = new Extrinsic( + () => + ExtrinsicHelper.api.tx.proxy.proxy( + getUnifiedAddress(stashKeys), + 'Any', + ExtrinsicHelper.api.tx.balances.transferAllowDeath(getUnifiedAddress(proxyKeys), 1n * DOLLARS) + ), + proxyKeys, + ExtrinsicHelper.api.events.system.ExtrinsicFailed + ); + + // Filtered Out ExtrinsicFailed + await assert.rejects(extrinsic.signAndSend(), { + name: 'NotProxy', + }); + }); + + it('CANNOT send a transfer via utility batch', async function () { + const extrinsic = new Extrinsic( + () => + ExtrinsicHelper.api.tx.proxy.proxy( + getUnifiedAddress(stashKeys), + 'Any', + ExtrinsicHelper.api.tx.utility.batch([ + ExtrinsicHelper.api.tx.balances.transferAllowDeath(getUnifiedAddress(proxyKeys), 1n * DOLLARS), + ]) + ), + proxyKeys, + ExtrinsicHelper.api.events.system.ExtrinsicFailed + ); + + // Filtered Out ExtrinsicFailed + await assert.rejects(extrinsic.signAndSend(), { + name: 'NotProxy', + }); + }); + + it('Can remove the proxy', async function () { + const extrinsic = new Extrinsic( + () => ExtrinsicHelper.api.tx.proxy.removeProxy(getUnifiedAddress(proxyKeys), 'NonTransfer', 0), + stashKeys, + ExtrinsicHelper.api.events.proxy.ProxyRemoved + ); + + const { target } = await extrinsic.signAndSend(); + assert.notEqual(target, undefined, 'should have returned ProxyRemoved event'); + }); + }); +}); diff --git a/e2e/scaffolding/P256.ts b/e2e/scaffolding/P256.ts new file mode 100644 index 0000000000..3db0bbcf5f --- /dev/null +++ b/e2e/scaffolding/P256.ts @@ -0,0 +1,134 @@ +import { SubmittableExtrinsic } from '@polkadot/api/types'; +import { base64UrlToUint8Array, MultiSignatureType } from './helpers'; +import { secp256r1 } from '@noble/curves/p256'; +import { ISubmittableResult } from '@polkadot/types/types'; +import { u8aWrapBytes } from '@polkadot/util'; +import { ExtrinsicHelper } from './extrinsicHelpers'; +import { sha256 } from '@noble/hashes/sha256'; + +export function createPassKeyAndSignAccount(accountPKey: Uint8Array) { + const passKeyPrivateKey = secp256r1.utils.randomPrivateKey(); + const passKeyPublicKey = secp256r1.getPublicKey(passKeyPrivateKey, true); + const passkeySignature = secp256r1.sign(u8aWrapBytes(accountPKey), passKeyPrivateKey).toDERRawBytes(); + return { passKeyPrivateKey, passKeyPublicKey, passkeySignature }; +} + +export async function createPassKeyCall( + accountPKey: Uint8Array, + nonce: number, + accountSignature: MultiSignatureType, + call: SubmittableExtrinsic<'rxjs', ISubmittableResult> +) { + const ext_call_type = ExtrinsicHelper.api.registry.createType('Call', call); + const passkeyCall = { + accountId: accountPKey, + accountNonce: nonce, + accountOwnershipProof: accountSignature, + call: ext_call_type, + }; + + return passkeyCall; +} + +export async function createPassKeyCallV2( + accountPKey: Uint8Array, + nonce: number, + call: SubmittableExtrinsic<'rxjs', ISubmittableResult> +) { + const ext_call_type = ExtrinsicHelper.api.registry.createType('Call', call); + const passkeyCall = { + accountId: accountPKey, + accountNonce: nonce, + call: ext_call_type, + }; + + return passkeyCall; +} + +export async function createPasskeyPayload( + passKeyPrivateKey: Uint8Array, + passKeyPublicKey: Uint8Array, + passkeyCallPayload: any = {}, + set_invalid_passkey_data: boolean = false +) { + const authenticatorDataRaw = 'WJ8JTNbivTWn-433ubs148A7EgWowi4SAcYBjLWfo1EdAAAAAA'; + const replacedClientDataRaw = + 'eyJ0eXBlIjoid2ViYXV0aG4uZ2V0IiwiY2hhbGxlbmdlIjoiI3JwbGMjIiwib3JpZ2luIjoiaHR0cHM6Ly9wYXNza2V5LmFtcGxpY2EuaW86ODA4MCIsImNyb3NzT3JpZ2luIjpmYWxzZSwiYWxnIjoiSFMyNTYifQ'; + const challengeReplacer = '#rplc#'; + let clientData = base64UrlToUint8Array(replacedClientDataRaw); + let authenticatorData = base64UrlToUint8Array(authenticatorDataRaw); + + if (set_invalid_passkey_data) { + authenticatorData = new Uint8Array(0); + clientData = new Uint8Array(0); + } + const passkeyCallType = ExtrinsicHelper.api.createType('PalletPasskeyPasskeyCall', passkeyCallPayload); + + // Challenge is sha256(passkeyCallType) + const calculatedChallenge = sha256(passkeyCallType.toU8a()); + const calculatedChallengeBase64url = Buffer.from(calculatedChallenge).toString('base64url'); + // inject challenge inside clientData + const clientDataJSON = Buffer.from(clientData) + .toString('utf-8') + .replace(challengeReplacer, calculatedChallengeBase64url); + // prepare signing payload which is [authenticator || sha256(client_data_json)] + const passkeySha256 = sha256(new Uint8Array([...authenticatorData, ...sha256(Buffer.from(clientDataJSON))])); + const passKeySignature = secp256r1.sign(passkeySha256, passKeyPrivateKey).toDERRawBytes(); + const passkeyPayload = { + passkeyPublicKey: Array.from(passKeyPublicKey), + verifiablePasskeySignature: { + signature: Array.from(passKeySignature), + authenticatorData: Array.from(authenticatorData), + clientDataJson: Array.from(Buffer.from(clientDataJSON)), + }, + passkeyCall: passkeyCallType, + }; + const payload = ExtrinsicHelper.api.createType('PalletPasskeyPasskeyPayload', passkeyPayload); + + return payload; +} + +export async function createPasskeyPayloadV2( + accountSignature: MultiSignatureType, + passKeyPrivateKey: Uint8Array, + passKeyPublicKey: Uint8Array, + passkeyCallPayload: any = {}, + set_invalid_passkey_data: boolean = false +) { + const authenticatorDataRaw = 'WJ8JTNbivTWn-433ubs148A7EgWowi4SAcYBjLWfo1EdAAAAAA'; + const replacedClientDataRaw = + 'eyJ0eXBlIjoid2ViYXV0aG4uZ2V0IiwiY2hhbGxlbmdlIjoiI3JwbGMjIiwib3JpZ2luIjoiaHR0cHM6Ly9wYXNza2V5LmFtcGxpY2EuaW86ODA4MCIsImNyb3NzT3JpZ2luIjpmYWxzZSwiYWxnIjoiSFMyNTYifQ'; + const challengeReplacer = '#rplc#'; + let clientData = base64UrlToUint8Array(replacedClientDataRaw); + let authenticatorData = base64UrlToUint8Array(authenticatorDataRaw); + + if (set_invalid_passkey_data) { + authenticatorData = new Uint8Array(0); + clientData = new Uint8Array(0); + } + const passkeyCallType = ExtrinsicHelper.api.createType('PalletPasskeyPasskeyCallV2', passkeyCallPayload); + + // Challenge is sha256(passkeyCallType) + const calculatedChallenge = sha256(passkeyCallType.toU8a()); + const calculatedChallengeBase64url = Buffer.from(calculatedChallenge).toString('base64url'); + // inject challenge inside clientData + const clientDataJSON = Buffer.from(clientData) + .toString('utf-8') + .replace(challengeReplacer, calculatedChallengeBase64url); + // prepare signing payload which is [authenticator || sha256(client_data_json)] + const passkeySha256 = sha256(new Uint8Array([...authenticatorData, ...sha256(Buffer.from(clientDataJSON))])); + const passKeySignature = secp256r1.sign(passkeySha256, passKeyPrivateKey).toDERRawBytes(); + const passkeyPayload = { + passkeyPublicKey: Array.from(passKeyPublicKey), + verifiablePasskeySignature: { + signature: Array.from(passKeySignature), + authenticatorData: Array.from(authenticatorData), + clientDataJson: Array.from(Buffer.from(clientDataJSON)), + }, + accountOwnershipProof: accountSignature, + passkeyCall: passkeyCallType, + }; + const payload = ExtrinsicHelper.api.createType('PalletPasskeyPasskeyPayloadV2', passkeyPayload); + + return payload; +} diff --git a/e2e/scaffolding/apiConnection.ts b/e2e/scaffolding/apiConnection.ts new file mode 100644 index 0000000000..b5ff9e2e86 --- /dev/null +++ b/e2e/scaffolding/apiConnection.ts @@ -0,0 +1,17 @@ +import { options } from '@frequency-chain/api-augment'; +import { ApiRx, WsProvider, ApiPromise } from '@polkadot/api'; +import { firstValueFrom } from 'rxjs'; +import * as env from './env'; + +export async function connect(providerUrl?: string | string[] | undefined): Promise { + const provider = new WsProvider(providerUrl || env.providerUrl); + const apiObservable = ApiRx.create({ provider, ...options }); + return firstValueFrom(apiObservable); +} + +export async function connectPromise(providerUrl?: string | string[] | undefined): Promise { + const provider = new WsProvider(providerUrl || env.providerUrl); + const api = await ApiPromise.create({ provider, ...options }); + await api.isReady; + return api; +} diff --git a/e2e/scaffolding/autoNonce.ts b/e2e/scaffolding/autoNonce.ts new file mode 100644 index 0000000000..c4c66b17df --- /dev/null +++ b/e2e/scaffolding/autoNonce.ts @@ -0,0 +1,157 @@ +/** + * The AutoNonce Module keeps track of nonces used by tests + * Because all keys in the tests are managed by the tests, the nonces are determined by: + * 1. Prior transaction count + * 2. Not counting transactions that had RPC failures + */ + +import type { KeyringPair } from '@polkadot/keyring/types'; +import { ExtrinsicHelper } from './extrinsicHelpers'; +import { getUnifiedAddress } from '@frequency-chain/ethereum-utils'; + +export type AutoNonce = number | 'auto' | 'current'; + +// Fixed size mapping for addresses. Using a power of 2 for efficient modulo +const ADDRESSES_MASK = 0xff; // 256 addresses +// Create a dictionary from address to index +const addressIndices = new Map(); +let nextAddressIndex = 0; + +// Create shared buffer for nonce storage +// Format: [addressCount, addressIndex1, nonce1, addressIndex2, nonce2, ...] +// This allows us to store both nonces and maintain address mapping atomically +const MAX_ENTRIES = ADDRESSES_MASK + 1; +const HEADER_SIZE = 1; // Just storing address count for now +const ENTRY_SIZE = 2; // Each entry has index and nonce +const BUFFER_SIZE = HEADER_SIZE + MAX_ENTRIES * ENTRY_SIZE; + +const sharedBuffer = new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT * BUFFER_SIZE); +const sharedArray = new Int32Array(sharedBuffer); + +// Initialize the header +Atomics.store(sharedArray, 0, 0); // No addresses yet + +const getSlotOffset = (slot: number) => HEADER_SIZE + slot * ENTRY_SIZE; + +// Function to claim a slot for a new address +const claimAddressSlot = (address: string): number => { + // First check if we already have this address + if (addressIndices.has(address)) { + return addressIndices.get(address)!; + } + + // Get next available index atomically + const index = Atomics.add(sharedArray, 0, 1); + if (index >= MAX_ENTRIES) { + throw new Error(`autoNonce ERROR: Exceeded maximum number of addresses (${MAX_ENTRIES})`); + } + + // Store in our local map + const slot = index % MAX_ENTRIES; + addressIndices.set(address, slot); + + const slotOffset = getSlotOffset(slot); + // Use a unique identifier for this address + const addressId = nextAddressIndex++; + Atomics.store(sharedArray, slotOffset, addressId); + Atomics.store(sharedArray, slotOffset + 1, 0); // Initial nonce = 0 + + return slot; +}; + +const getAddressNonce = (address: string): number => { + if (!addressIndices.has(address)) { + return 0; + } + + const slot = addressIndices.get(address)!; + const slotOffset = getSlotOffset(slot); + + return Atomics.load(sharedArray, slotOffset + 1); +}; + +const setAddressNonce = (address: string, nonce: number): void => { + const slot = addressIndices.has(address) ? addressIndices.get(address)! : claimAddressSlot(address); + const slotOffset = getSlotOffset(slot); + + Atomics.store(sharedArray, slotOffset + 1, nonce); +}; + +const incrementAddressNonce = (address: string): number => { + const slot = addressIndices.has(address) ? addressIndices.get(address)! : claimAddressSlot(address); + const slotOffset = getSlotOffset(slot); + + return Atomics.add(sharedArray, slotOffset + 1, 1); +}; + +const getNonce = async (keys: KeyringPair) => { + return (await ExtrinsicHelper.getAccountInfo(keys)).nonce.toNumber(); +}; + +const reset = (keys: KeyringPair) => { + const address = getUnifiedAddress(keys); + if (addressIndices.has(address)) { + setAddressNonce(address, 0); + } +}; + +// Manage concurrent blockchain queries +const pendingQueries = new Map>(); + +const current = async (keys: KeyringPair): Promise => { + const address = getUnifiedAddress(keys); + + // If we already have a query in progress, return that + if (pendingQueries.has(address)) { + return pendingQueries.get(address)!; + } + + // Check for stored nonce + const storedNonce = getAddressNonce(address); + if (storedNonce > 0) { + return storedNonce; + } + + // Otherwise, we need to fetch from the blockchain + const promise = getNonce(keys).then((nonce) => { + setAddressNonce(address, nonce); + pendingQueries.delete(address); + return nonce; + }); + + pendingQueries.set(address, promise); + return promise; +}; + +const increment = async (keys: KeyringPair) => { + const address = getUnifiedAddress(keys); + await current(keys); + return incrementAddressNonce(address); +}; + +/** + * Use the auto nonce system + * @param keys The KeyringPair that will be used for sending a transaction + * @param inputNonce + * "auto" (default) for using the auto system + * "current" for just getting the current one instead of incrementing + * for just using a specific number (also sets it to increments for the future) + * @returns + */ +const auto = (keys: KeyringPair, inputNonce: AutoNonce = 'auto'): Promise => { + switch (inputNonce) { + case 'auto': + return increment(keys); + case 'current': + return current(keys); + default: + // Use a manual nonce if it is a number + setAddressNonce(getUnifiedAddress(keys), inputNonce + 1); + return Promise.resolve(inputNonce); + } +}; + +export default { + auto, + reset, +}; diff --git a/e2e/scaffolding/env.ts b/e2e/scaffolding/env.ts new file mode 100644 index 0000000000..1f7d2c630e --- /dev/null +++ b/e2e/scaffolding/env.ts @@ -0,0 +1,68 @@ +export const providerUrl: string = process.env.WS_PROVIDER_URL || 'ws://localhost:9944'; +export const verbose = process.env.VERBOSE_TESTS === 'true' || process.env.VERBOSE_TESTS === '1'; + +const CHAIN_ENVIRONMENT = { + DEVELOPMENT: 'dev', + PASEO_TESTNET: 'paseo-testnet', + PASEO_LOCAL: 'paseo-local', +}; + +export function isTestnet() { + switch (process.env.CHAIN_ENVIRONMENT) { + case CHAIN_ENVIRONMENT.PASEO_TESTNET: + return true; + } + return false; +} + +export function isDev() { + return process.env.CHAIN_ENVIRONMENT === CHAIN_ENVIRONMENT.DEVELOPMENT; +} + +export function hasRelayChain() { + switch (process.env.CHAIN_ENVIRONMENT) { + case CHAIN_ENVIRONMENT.PASEO_TESTNET: + case CHAIN_ENVIRONMENT.PASEO_LOCAL: + return true; + } + return false; +} + +export function getGraphChangeSchema() { + switch (process.env.CHAIN_ENVIRONMENT) { + case CHAIN_ENVIRONMENT.PASEO_TESTNET: + return 8; + } + return null; +} +export function getBroadcastSchema() { + switch (process.env.CHAIN_ENVIRONMENT) { + case CHAIN_ENVIRONMENT.PASEO_TESTNET: + return 2; + } + return null; +} + +export function getDummySchema() { + switch (process.env.CHAIN_ENVIRONMENT) { + case CHAIN_ENVIRONMENT.PASEO_TESTNET: + return 16_074; + } + return null; +} + +export function getAvroChatMessagePaginatedSchema() { + switch (process.env.CHAIN_ENVIRONMENT) { + case CHAIN_ENVIRONMENT.PASEO_TESTNET: + return 16_075; + } + return null; +} + +export function getAvroChatMessageItemizedSchema() { + switch (process.env.CHAIN_ENVIRONMENT) { + case CHAIN_ENVIRONMENT.PASEO_TESTNET: + return 16_073; + } + return null; +} diff --git a/e2e/scaffolding/extrinsicHelpers.ts b/e2e/scaffolding/extrinsicHelpers.ts new file mode 100644 index 0000000000..57171f048c --- /dev/null +++ b/e2e/scaffolding/extrinsicHelpers.ts @@ -0,0 +1,942 @@ +import '@frequency-chain/api-augment'; +import assert from 'assert'; +import { ApiPromise, ApiRx } from '@polkadot/api'; +import { ApiTypes, AugmentedEvent, SubmittableExtrinsic, SignerOptions } from '@polkadot/api/types'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { Compact, u128, u16, u32, u64, Vec, Option, Bool } from '@polkadot/types'; +import { + FrameSystemAccountInfo, + PalletTimeReleaseReleaseSchedule, + SpRuntimeDispatchError, + PalletSchedulerScheduled, +} from '@polkadot/types/lookup'; +import { AnyJson, AnyNumber, AnyTuple, Codec, IEvent, ISubmittableResult } from '@polkadot/types/types'; +import { firstValueFrom, filter, map, pipe, tap } from 'rxjs'; +import { getBlockNumber, getExistentialDeposit, getFinalizedBlockNumber, log, MultiSignatureType } from './helpers'; +import autoNonce, { AutoNonce } from './autoNonce'; +import { connect, connectPromise } from './apiConnection'; +import { BlockNumber, DispatchError, Event, Index, SignedBlock } from '@polkadot/types/interfaces'; +import { IsEvent } from '@polkadot/types/metadata/decorate/types'; +import { + HandleResponse, + ItemizedStoragePageResponse, + MessageSourceId, + PaginatedStorageResponse, + PresumptiveSuffixesResponse, + RpcEvent, + SchemaResponse, +} from '@frequency-chain/api-augment/interfaces'; +import { u8aToHex } from '@polkadot/util/u8a/toHex'; +import { u8aWrapBytes } from '@polkadot/util'; +import type { AccountId32, Call, H256 } from '@polkadot/types/interfaces/runtime'; +import { hasRelayChain } from './env'; +import { getUnifiedAddress, getUnifiedPublicKey } from '@frequency-chain/ethereum-utils'; + +export interface ReleaseSchedule { + start: number; + period: number; + periodCount: number; + perPeriod: bigint; +} + +export interface AddKeyData { + msaId?: u64; + expiration?: any; + newPublicKey?: any; +} +export interface AddProviderPayload { + authorizedMsaId?: u64; + schemaIds?: u16[]; + expiration?: any; +} +export interface ItemizedSignaturePayload { + msaId?: u64; + schemaId?: u16; + targetHash?: u32; + expiration?: any; + actions?: any; +} +export interface ItemizedSignaturePayloadV2 { + schemaId?: u16; + targetHash?: u32; + expiration?: any; + actions?: any; +} +export interface PaginatedUpsertSignaturePayload { + msaId?: u64; + schemaId?: u16; + pageId?: u16; + targetHash?: u32; + expiration?: any; + payload?: any; +} +export interface PaginatedUpsertSignaturePayloadV2 { + schemaId?: u16; + pageId?: u16; + targetHash?: u32; + expiration?: any; + payload?: any; +} +export interface PaginatedDeleteSignaturePayload { + msaId?: u64; + schemaId?: u16; + pageId?: u16; + targetHash?: u32; + expiration?: any; +} +export interface PaginatedDeleteSignaturePayloadV2 { + schemaId?: u16; + pageId?: u16; + targetHash?: u32; + expiration?: any; +} + +export class EventError extends Error { + name: string = ''; + message: string = ''; + stack?: string = ''; + section?: string = ''; + rawError: DispatchError | SpRuntimeDispatchError; + + constructor(source: DispatchError | SpRuntimeDispatchError) { + super(); + + if (source.isModule) { + const decoded = source.registry.findMetaError(source.asModule); + this.name = decoded.name; + this.message = decoded.docs.join(' '); + this.section = decoded.section; + } else { + this.name = source.type; + this.message = source.type; + this.section = ''; + } + this.rawError = source; + } + + public toString() { + return `${this.section}.${this.name}: ${this.message}`; + } +} + +class CallError extends Error { + message: string; + result: AnyJson; + + constructor(submittable: ISubmittableResult, msg?: string) { + super(); + this.result = submittable.toHuman(); + this.message = msg ?? 'Call Error'; + } +} + +export type EventMap = Record; + +function eventKey(event: Event): string { + return `${event.section}.${event.method}`; +} + +/** + * These helpers return a map of events, some of which contain useful data, some of which don't. + * Extrinsics that "create" records typically contain an ID of the entity they created, and this + * would be a useful value to return. However, this data seems to be nested inside an array of arrays. + * + * Ex: schemaId = events["schemas.SchemaCreated"][] + * + * To get the value associated with an event key, we would need to query inside that nested array with + * a set of arbitrary indices. Should an object at any level of that querying be undefined, the helper + * will throw an unchecked exception. + * + * To get type checking and cast a returned event as a specific event type, you can utilize TypeScripts + * type guard functionality like so: + * + * const msaCreatedEvent = events.defaultEvent; + * if (ExtrinsicHelper.api.events.msa.MsaCreated.is(msaCreatedEvent)) { + * msaId = msaCreatedEvent.data.msaId; + * } + * + * Normally, I'd say the best experience is for the helper to return both the ID of the created entity + * along with a map of emitted events. But in this case, returning that value will increase the complexity + * of each helper, since each would have to check for undefined values at every lookup. So, this may be + * a rare case when it is best to simply return the map of emitted events and trust the user to look them + * up in the test. + */ + +type ParsedEvent = IEvent; +export interface ParsedEventResult { + target?: ParsedEvent; + eventMap: EventMap; +} + +export class Extrinsic { + private event?: IsEvent; + public readonly extrinsic: () => SubmittableExtrinsic<'rxjs', T>; + private keys: KeyringPair; + public api: ApiRx; + + constructor(extrinsic: () => SubmittableExtrinsic<'rxjs', T>, keys: KeyringPair, targetEvent?: IsEvent) { + this.extrinsic = extrinsic; + this.keys = keys; + this.event = targetEvent; + this.api = ExtrinsicHelper.api; + } + + // This uses automatic nonce management by default. + public async signAndSend(inputNonce?: AutoNonce, options: Partial = {}, waitForInBlock = true) { + const nonce = await autoNonce.auto(this.keys, inputNonce); + + try { + const op = this.extrinsic(); + // Era is 0 for tests due to issues with BirthBlock + return await firstValueFrom( + op.signAndSend(this.keys, { nonce, era: 0, ...options }).pipe( + tap((result) => { + // If we learn a transaction has an error status (this does NOT include RPC errors) + // Then throw an error + if (result.status.isInvalid) { + console.error('SEND ALERT: INVALID FOUND', op.method.toHuman(), 'txHash', result.txHash.toHex()); + } + if (result.isError) { + throw new CallError( + result, + `Failed Transaction for ${this.event?.meta.name || 'unknown'}, status: ${result.status}` + ); + } + }), + filter(({ status }) => (waitForInBlock && status.isInBlock) || status.isFinalized), + this.parseResult(this.event) + ) + ); + } catch (e) { + if ((e as any).name === 'RpcError' && inputNonce === 'auto') { + console.error("WARNING: Unexpected RPC Error! If it is expected, use 'current' for the nonce."); + } + throw e; + } + } + + public async sudoSignAndSend(waitForInBlock = true) { + const nonce = await autoNonce.auto(this.keys); + // Era is 0 for tests due to issues with BirthBlock + return await firstValueFrom( + this.api.tx.sudo + .sudo(this.extrinsic()) + .signAndSend(this.keys, { nonce, era: 0 }) + .pipe( + filter(({ status }) => (waitForInBlock && status.isInBlock) || status.isFinalized), + this.parseResult(this.event) + ) + ); + } + + public async payWithCapacity(inputNonce?: AutoNonce, waitForInBlock = true) { + const nonce = await autoNonce.auto(this.keys, inputNonce); + // Era is 0 for tests due to issues with BirthBlock + return await firstValueFrom( + this.api.tx.frequencyTxPayment + .payWithCapacity(this.extrinsic()) + .signAndSend(this.keys, { nonce, era: 0 }) + .pipe( + tap((result) => { + if (result.status.isInvalid) { + console.error( + 'CAPACITY ALERT: INVALID FOUND', + this.extrinsic().method.toHuman(), + 'txHash', + result.txHash + ); + } + if (result.isError) { + throw new CallError( + result, + `Failed Transaction for ${this.event?.meta.name || 'unknown'}, status is ${result.status}` + ); + } + }), + // Can comment out filter to help debug hangs + filter(({ status }) => (waitForInBlock && status.isInBlock) || status.isFinalized), + this.parseResult(this.event) + ) + ); + } + + // check transaction cost difference between local+upgrade and testnet + public getEstimatedTxFee(): Promise { + return firstValueFrom( + this.extrinsic() + .paymentInfo(getUnifiedAddress(this.keys)) + .pipe(map((info) => info.partialFee.toBigInt())) + ); + } + + public getCall(): Call { + const call = ExtrinsicHelper.api.createType('Call', this.extrinsic.call); + return call; + } + + async fundOperation(source: KeyringPair) { + const [amount, accountInfo] = await Promise.all([ + this.getEstimatedTxFee(), + ExtrinsicHelper.getAccountInfo(this.keys), + ]); + const freeBalance = BigInt(accountInfo.data.free.toString()) - (await getExistentialDeposit()); + if (amount > freeBalance) { + await assert.doesNotReject( + ExtrinsicHelper.transferFunds(source, this.keys, amount).signAndSend(undefined, undefined, false) + ); + } + } + + public async fundAndSend(source: KeyringPair, waitForInBlock = true) { + await this.fundOperation(source); + log('Fund and Send', `${this.extrinsic().method.method} Fund Source: ${getUnifiedAddress(source)}`); + return this.signAndSend(undefined, undefined, waitForInBlock); + } + + public async fundAndSendUnsigned(source: KeyringPair, willError = false) { + await this.fundOperation(source); + log('Fund and Send', `Fund Source: ${getUnifiedAddress(source)}`); + return this.sendUnsigned(willError); + } + + public async sendUnsigned(willError = false) { + const op = this.extrinsic(); + try { + return await firstValueFrom( + op.send().pipe( + tap((result) => { + // If we learn a transaction has an error status (this does NOT include RPC errors) + // Then throw an error + if (result.status.isInvalid) { + console.error('UNSIGNED ALERT: INVALID FOUND', op.method.toHuman(), 'txHash', result.txHash); + } + if (result.isError) { + throw new CallError(result, `Failed Transaction for ${this.event?.meta.name || 'unknown'}`); + } + }), + filter(({ status }) => status.isInBlock || status.isFinalized), + this.parseResult(this.event) + ) + ); + } catch (e) { + if ((e as any).name === 'RpcError' && !willError) { + console.error("WARNING: Unexpected RPC Error! If it is expected, use 'current' for the nonce."); + } + throw e; + } + } + + private parseResult( + targetEvent?: AugmentedEvent + ) { + return pipe( + tap((result: ISubmittableResult) => { + if (result.dispatchError) { + const err = new EventError(result.dispatchError); + log(err.toString()); + throw err; + } + }), + map((result: ISubmittableResult) => { + const eventMap = result.events.reduce((acc, { event }) => { + acc[eventKey(event)] = event; + if (this.api.events.sudo.Sudid.is(event)) { + const { + data: [result], + } = event; + if (result.isErr) { + const err = new EventError(result.asErr); + log(err.toString()); + throw err; + } + } + return acc; + }, {} as EventMap); + + const target = targetEvent && result.events.find(({ event }) => targetEvent.is(event))?.event; + // Required for Typescript to be happy + if (target && targetEvent.is(target)) { + return { target, eventMap }; + } + + return { eventMap }; + }), + tap(({ eventMap }) => { + Object.entries(eventMap).map(([k, v]) => log(k, v.toHuman())); + }) + ); + } +} + +export class ExtrinsicHelper { + public static api: ApiRx; + public static apiPromise: ApiPromise; + + public static async initialize(providerUrl: string | string[]) { + ExtrinsicHelper.api = await connect(providerUrl); + // For single state queries (api.query), ApiPromise is better + ExtrinsicHelper.apiPromise = await connectPromise(providerUrl); + } + + public static async getLastFinalizedBlock(): Promise { + const finalized = await ExtrinsicHelper.apiPromise.rpc.chain.getFinalizedHead(); + return ExtrinsicHelper.apiPromise.rpc.chain.getBlock(finalized); + } + + public static getLastBlock(): Promise { + return ExtrinsicHelper.apiPromise.rpc.chain.getBlock(); + } + + /** Query Extrinsics */ + public static getAccountInfo(keyPair: KeyringPair): Promise { + return ExtrinsicHelper.apiPromise.query.system.account(getUnifiedAddress(keyPair)); + } + + public static getSchemaMaxBytes() { + return ExtrinsicHelper.apiPromise.query.schemas.governanceSchemaModelMaxBytes(); + } + + /** Balance Extrinsics */ + public static transferFunds(source: KeyringPair, dest: KeyringPair, amount: Compact | AnyNumber) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.balances.transferKeepAlive(getUnifiedAddress(dest), amount), + source, + ExtrinsicHelper.api.events.balances.Transfer + ); + } + + public static emptyAccount(source: KeyringPair, dest: KeyringPair) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.balances.transferAll(getUnifiedAddress(dest), false), + source, + ExtrinsicHelper.api.events.balances.Transfer + ); + } + + /** Schema Extrinsics */ + public static async getOrCreateSchemaV3( + keys: KeyringPair, + model: any, + modelType: 'AvroBinary' | 'Parquet', + payloadLocation: 'OnChain' | 'IPFS' | 'Itemized' | 'Paginated', + grant: ('AppendOnly' | 'SignatureRequired')[], + schemaNme: string + ): Promise { + // Check to see if the schema name already exists + const [group, name] = schemaNme.toLowerCase().split('.'); + const { ids } = await ExtrinsicHelper.apiPromise.query.schemas.schemaNameToIds(group, name); + if (ids.length > 0) { + return ids[ids.length - 1]; + } + // Not found? Create it! + const { target: event } = await ExtrinsicHelper.createSchemaV3( + keys, + model, + modelType, + payloadLocation, + grant, + schemaNme + ).signAndSend(undefined, undefined, false); + if (event?.data.schemaId) { + return event.data.schemaId; + } + throw new Error(`Tried to create a schema for ${schemaNme}, but it failed!`); + } + + /** Schema v3 Extrinsics */ + public static createSchemaV3( + keys: KeyringPair, + model: any, + modelType: 'AvroBinary' | 'Parquet', + payloadLocation: 'OnChain' | 'IPFS' | 'Itemized' | 'Paginated', + grant: ('AppendOnly' | 'SignatureRequired')[], + schemaNme: string | null + ) { + return new Extrinsic( + () => + ExtrinsicHelper.api.tx.schemas.createSchemaV3( + JSON.stringify(model), + modelType, + payloadLocation, + grant, + schemaNme + ), + keys, + ExtrinsicHelper.api.events.schemas.SchemaCreated + ); + } + + /** Generic Schema Extrinsics v2 */ + public static createSchemaWithSettingsGovV2( + keys: KeyringPair, + model: any, + modelType: 'AvroBinary' | 'Parquet', + payloadLocation: 'OnChain' | 'IPFS' | 'Itemized' | 'Paginated', + grant: 'AppendOnly' | 'SignatureRequired', + schemaName: string | null + ) { + return new Extrinsic( + () => + ExtrinsicHelper.api.tx.schemas.createSchemaViaGovernanceV2( + getUnifiedPublicKey(keys), + JSON.stringify(model), + modelType, + payloadLocation, + [grant], + schemaName + ), + keys, + ExtrinsicHelper.api.events.schemas.SchemaCreated + ); + } + + /** Get Schema RPC */ + public static getSchema(schemaId: u16): Promise> { + return ExtrinsicHelper.apiPromise.rpc.schemas.getBySchemaId(schemaId); + } + + /** MSA Extrinsics */ + public static createMsa(keys: KeyringPair) { + return new Extrinsic(() => ExtrinsicHelper.api.tx.msa.create(), keys, ExtrinsicHelper.api.events.msa.MsaCreated); + } + + public static addPublicKeyToMsa( + keys: KeyringPair, + ownerSignature: MultiSignatureType, + newSignature: MultiSignatureType, + payload: AddKeyData + ) { + return new Extrinsic( + () => + ExtrinsicHelper.api.tx.msa.addPublicKeyToMsa(getUnifiedPublicKey(keys), ownerSignature, newSignature, payload), + keys, + ExtrinsicHelper.api.events.msa.PublicKeyAdded + ); + } + + public static deletePublicKey(keys: KeyringPair, publicKey: Uint8Array) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.msa.deleteMsaPublicKey(publicKey), + keys, + ExtrinsicHelper.api.events.msa.PublicKeyDeleted + ); + } + + public static retireMsa(keys: KeyringPair) { + return new Extrinsic(() => ExtrinsicHelper.api.tx.msa.retireMsa(), keys, ExtrinsicHelper.api.events.msa.MsaRetired); + } + + public static createProvider(keys: KeyringPair, providerName: string) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.msa.createProvider(providerName), + keys, + ExtrinsicHelper.api.events.msa.ProviderCreated + ); + } + + public static createSponsoredAccountWithDelegation( + delegatorKeys: KeyringPair, + providerKeys: KeyringPair, + signature: MultiSignatureType, + payload: AddProviderPayload + ) { + return new Extrinsic( + () => + ExtrinsicHelper.api.tx.msa.createSponsoredAccountWithDelegation( + getUnifiedPublicKey(delegatorKeys), + signature, + payload + ), + providerKeys, + ExtrinsicHelper.api.events.msa.MsaCreated + ); + } + + public static grantDelegation( + delegatorKeys: KeyringPair, + providerKeys: KeyringPair, + signature: MultiSignatureType, + payload: AddProviderPayload + ) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.msa.grantDelegation(getUnifiedPublicKey(delegatorKeys), signature, payload), + providerKeys, + ExtrinsicHelper.api.events.msa.DelegationGranted + ); + } + + public static grantSchemaPermissions(delegatorKeys: KeyringPair, providerMsaId: any, schemaIds: any) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.msa.grantSchemaPermissions(providerMsaId, schemaIds), + delegatorKeys, + ExtrinsicHelper.api.events.msa.DelegationUpdated + ); + } + + public static revokeDelegationByDelegator(keys: KeyringPair, providerMsaId: any) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.msa.revokeDelegationByDelegator(providerMsaId), + keys, + ExtrinsicHelper.api.events.msa.DelegationRevoked + ); + } + + public static revokeDelegationByProvider(delegatorMsaId: u64, providerKeys: KeyringPair) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.msa.revokeDelegationByProvider(delegatorMsaId), + providerKeys, + ExtrinsicHelper.api.events.msa.DelegationRevoked + ); + } + + /** Messages Extrinsics */ + public static addIPFSMessage(keys: KeyringPair, schemaId: any, cid: string, payload_length: number) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.messages.addIpfsMessage(schemaId, cid, payload_length), + keys, + ExtrinsicHelper.api.events.messages.MessagesInBlock + ); + } + + /** Stateful Storage Extrinsics */ + public static applyItemActions( + keys: KeyringPair, + schemaId: any, + msa_id: MessageSourceId, + actions: any, + target_hash: any + ) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.statefulStorage.applyItemActions(msa_id, schemaId, target_hash, actions), + keys, + ExtrinsicHelper.api.events.statefulStorage.ItemizedPageUpdated + ); + } + + public static removePage(keys: KeyringPair, schemaId: any, msa_id: MessageSourceId, page_id: any, target_hash: any) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.statefulStorage.deletePage(msa_id, schemaId, page_id, target_hash), + keys, + ExtrinsicHelper.api.events.statefulStorage.PaginatedPageDeleted + ); + } + + public static upsertPage( + keys: KeyringPair, + schemaId: any, + msa_id: MessageSourceId, + page_id: any, + payload: any, + target_hash: any + ) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.statefulStorage.upsertPage(msa_id, schemaId, page_id, target_hash, payload), + keys, + ExtrinsicHelper.api.events.statefulStorage.PaginatedPageUpdated + ); + } + + public static applyItemActionsWithSignatureV2( + delegatorKeys: KeyringPair, + providerKeys: KeyringPair, + signature: MultiSignatureType, + payload: ItemizedSignaturePayloadV2 + ) { + return new Extrinsic( + () => + ExtrinsicHelper.api.tx.statefulStorage.applyItemActionsWithSignatureV2( + getUnifiedPublicKey(delegatorKeys), + signature, + payload + ), + providerKeys, + ExtrinsicHelper.api.events.statefulStorage.ItemizedPageUpdated + ); + } + + public static deletePageWithSignatureV2( + delegatorKeys: KeyringPair, + providerKeys: KeyringPair, + signature: MultiSignatureType, + payload: PaginatedDeleteSignaturePayloadV2 + ) { + return new Extrinsic( + () => + ExtrinsicHelper.api.tx.statefulStorage.deletePageWithSignatureV2( + getUnifiedPublicKey(delegatorKeys), + signature, + payload + ), + providerKeys, + ExtrinsicHelper.api.events.statefulStorage.PaginatedPageDeleted + ); + } + + public static upsertPageWithSignatureV2( + delegatorKeys: KeyringPair, + providerKeys: KeyringPair, + signature: MultiSignatureType, + payload: PaginatedUpsertSignaturePayloadV2 + ) { + return new Extrinsic( + () => + ExtrinsicHelper.api.tx.statefulStorage.upsertPageWithSignatureV2( + getUnifiedPublicKey(delegatorKeys), + signature, + payload + ), + providerKeys, + ExtrinsicHelper.api.events.statefulStorage.PaginatedPageUpdated + ); + } + + public static getItemizedStorage(msa_id: MessageSourceId, schemaId: any): Promise { + return ExtrinsicHelper.apiPromise.rpc.statefulStorage.getItemizedStorage(msa_id, schemaId); + } + + public static getPaginatedStorage(msa_id: MessageSourceId, schemaId: any): Promise> { + return ExtrinsicHelper.apiPromise.rpc.statefulStorage.getPaginatedStorage(msa_id, schemaId); + } + + public static timeReleaseTransfer(keys: KeyringPair, who: KeyringPair, schedule: ReleaseSchedule) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.timeRelease.transfer(getUnifiedAddress(who), schedule), + keys, + ExtrinsicHelper.api.events.timeRelease.ReleaseScheduleAdded + ); + } + + public static timeReleaseScheduleNamedTransfer( + keys: KeyringPair, + id: Uint8Array, + who: KeyringPair, + schedule: ReleaseSchedule, + when: number + ) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.timeRelease.scheduleNamedTransfer(id, getUnifiedAddress(who), schedule, when), + keys, + ExtrinsicHelper.api.events.scheduler.Scheduled + ); + } + + public static timeReleaseCancelScheduledNamedTransfer(keys: KeyringPair, id: Uint8Array) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.timeRelease.cancelScheduledNamedTransfer(id), + keys, + ExtrinsicHelper.api.events.scheduler.Canceled + ); + } + + public static claimHandle(delegatorKeys: KeyringPair, payload: any) { + const proof = { Sr25519: u8aToHex(delegatorKeys.sign(u8aWrapBytes(payload.toU8a()))) }; + return new Extrinsic( + () => ExtrinsicHelper.api.tx.handles.claimHandle(getUnifiedPublicKey(delegatorKeys), proof, payload), + delegatorKeys, + ExtrinsicHelper.api.events.handles.HandleClaimed + ); + } + + public static retireHandle(delegatorKeys: KeyringPair) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.handles.retireHandle(), + delegatorKeys, + ExtrinsicHelper.api.events.handles.HandleRetired + ); + } + + public static getHandleForMSA(msa_id: MessageSourceId): Promise> { + return ExtrinsicHelper.apiPromise.rpc.handles.getHandleForMsa(msa_id); + } + + public static getMsaForHandle(handle: string): Promise> { + return ExtrinsicHelper.apiPromise.rpc.handles.getMsaForHandle(handle); + } + + public static getNextSuffixesForHandle(base_handle: string, count: number): Promise { + return ExtrinsicHelper.apiPromise.rpc.handles.getNextSuffixes(base_handle, count); + } + + public static validateHandle(base_handle: string): Promise { + return ExtrinsicHelper.apiPromise.rpc.handles.validateHandle(base_handle); + } + + public static getFrequencyEvents(at: H256 | string): Promise> { + return ExtrinsicHelper.apiPromise.rpc.frequency.getEvents(at); + } + + public static getMissingNonceValues(accountId: AccountId32 | string | Uint8Array): Promise> { + return ExtrinsicHelper.apiPromise.rpc.frequency.getMissingNonceValues(accountId); + } + + public static addOnChainMessage(keys: KeyringPair, schemaId: any, payload: string) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.messages.addOnchainMessage(null, schemaId, payload), + keys, + ExtrinsicHelper.api.events.messages.MessagesInBlock + ); + } + + /** Capacity Extrinsics **/ + public static setEpochLength(keys: KeyringPair, epoch_length: any) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.capacity.setEpochLength(epoch_length), + keys, + ExtrinsicHelper.api.events.capacity.EpochLengthUpdated + ); + } + + public static stake(keys: KeyringPair, target: any, amount: any) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.capacity.stake(target, amount), + keys, + ExtrinsicHelper.api.events.capacity.Staked + ); + } + + public static unstake(keys: KeyringPair, target: any, amount: any) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.capacity.unstake(target, amount), + keys, + ExtrinsicHelper.api.events.capacity.UnStaked + ); + } + + public static withdrawUnstaked(keys: KeyringPair) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.capacity.withdrawUnstaked(), + keys, + ExtrinsicHelper.api.events.capacity.StakeWithdrawn + ); + } + + public static providerBoost(keys: KeyringPair, target: any, amount: any) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.capacity.providerBoost(target, amount), + keys, + ExtrinsicHelper.api.events.capacity.ProviderBoosted + ); + } + + public static changeStakingTarget(keys: KeyringPair, from: any, to: any, amount: any) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.capacity.changeStakingTarget(from, to, amount), + keys, + ExtrinsicHelper.api.events.capacity.StakingTargetChanged + ); + } + + public static payWithCapacityBatchAll(keys: KeyringPair, calls: any) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.frequencyTxPayment.payWithCapacityBatchAll(calls), + keys, + ExtrinsicHelper.api.events.utility.BatchCompleted + ); + } + + public static executeUtilityBatchAll(keys: KeyringPair, calls: any) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.utility.batchAll(calls), + keys, + ExtrinsicHelper.api.events.utility.BatchCompleted + ); + } + + public static executeUtilityBatch(keys: KeyringPair, calls: any) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.utility.batch(calls), + keys, + ExtrinsicHelper.api.events.utility.BatchCompleted + ); + } + + public static executeUtilityForceBatch(keys: KeyringPair, calls: any) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.utility.forceBatch(calls), + keys, + ExtrinsicHelper.api.events.utility.BatchCompleted + ); + } + + public static async waitForFinalization(ofBlockNumber?: number) { + const start = Date.now(); + const blockNumber = ofBlockNumber || (await getBlockNumber()); + let currentBlock = await getFinalizedBlockNumber(); + while (currentBlock < blockNumber) { + if (start + 120_000 < Date.now()) { + throw new Error( + `Waiting for Finalized Block took longer than 120s. Waiting for "${blockNumber.toString()}", Current: "${currentBlock.toString()}"` + ); + } + // In Testnet, just wait + if (hasRelayChain()) { + await new Promise((r) => setTimeout(r, 3_000)); + } else { + await ExtrinsicHelper.apiPromise.rpc.engine.createBlock(true, true); + } + currentBlock = await getFinalizedBlockNumber(); + } + } + + public static async runToBlock(blockNumber: number) { + const start = Date.now(); + let currentBlock = await getBlockNumber(); + while (currentBlock < blockNumber) { + if (start + 120_000 < Date.now()) { + throw new Error( + `Waiting to run to Block took longer than 120s. Waiting for "${blockNumber.toString()}", Current: "${currentBlock.toString()}"` + ); + } + // In Testnet, just wait + if (hasRelayChain()) { + await new Promise((r) => setTimeout(r, 3_000)); + } else { + await ExtrinsicHelper.apiPromise.rpc.engine.createBlock(true, true); + } + currentBlock = await getBlockNumber(); + } + } + + public static submitProposal(keys: KeyringPair, spendAmount: AnyNumber | Compact) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.treasury.proposeSpend(spendAmount, getUnifiedAddress(keys)), + keys, + ExtrinsicHelper.api.events.treasury.Proposed + ); + } + + public static rejectProposal(keys: KeyringPair, proposalId: any) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.treasury.rejectProposal(proposalId), + keys, + ExtrinsicHelper.api.events.treasury.Rejected + ); + } + + /** Passkey Extrinsics **/ + public static executePassKeyProxy(keys: KeyringPair, payload: any) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.passkey.proxy(payload), + keys, + ExtrinsicHelper.api.events.passkey.TransactionExecutionSuccess + ); + } + + public static executePassKeyProxyV2(keys: KeyringPair, payload: any) { + return new Extrinsic( + () => ExtrinsicHelper.api.tx.passkey.proxyV2(payload), + keys, + ExtrinsicHelper.api.events.passkey.TransactionExecutionSuccess + ); + } + + public static getCapacityFee(chainEvents: EventMap): bigint { + if ( + chainEvents['capacity.CapacityWithdrawn'] && + ExtrinsicHelper.api.events.capacity.CapacityWithdrawn.is(chainEvents['capacity.CapacityWithdrawn']) + ) { + return chainEvents['capacity.CapacityWithdrawn'].data.amount.toBigInt(); + } + return 0n; + } +} diff --git a/e2e/scaffolding/funding.ts b/e2e/scaffolding/funding.ts new file mode 100644 index 0000000000..0e8844933e --- /dev/null +++ b/e2e/scaffolding/funding.ts @@ -0,0 +1,54 @@ +import '@frequency-chain/api-augment'; +import { Keyring } from '@polkadot/api'; +import { isTestnet } from './env'; + +const coreFundingSourcesSeed = 'salt glare message absent guess transfer oblige refuse keen current lunar pilot'; +const keyring = new Keyring({ type: 'sr25519' }); + +// Get the correct key for this Funding Source +export function getFundingSource(name: string) { + // Check if we are getting a full path, and if we are, chop it off + // Every derived path should be either be a full path or relative to the e2e root + const derivedPath = (name.includes('/e2e/') ? name.replace(/.*\/e2e\//, '') : name).replaceAll('/', '-'); + if (!derivedPath.includes('.test.ts')) { + console.error("The requested funding source was not a test file, so it wouldn't be funded!", { derivedPath }); + throw new Error('Asked for a non-funded source'); + } + try { + return keyring.addFromUri(`${coreFundingSourcesSeed}//${derivedPath}`, { name: derivedPath }, 'sr25519'); + } catch (e) { + console.error('Failed to build funding source: ', { derivedPath }); + throw e; + } +} + +export function getSudo() { + if (isTestnet()) { + throw new Error('Sudo not available on testnet!'); + } + + return { + uri: '//Alice', + keys: keyring.addFromUri('//Alice'), + }; +} + +export function getRootFundingSource() { + if (isTestnet()) { + const seed_phrase = process.env.FUNDING_ACCOUNT_SEED_PHRASE; + if (seed_phrase === undefined) { + console.error('FUNDING_ACCOUNT_SEED_PHRASE must not be undefined when CHAIN_ENVIRONMENT is a testnet'); + process.exit(1); + } + + return { + uri: 'TestnetTestRunnerAccount', + keys: keyring.addFromMnemonic(seed_phrase), + }; + } + + return { + uri: '//Alice', + keys: keyring.addFromUri('//Alice'), + }; +} diff --git a/e2e/scaffolding/globalHooks.ts b/e2e/scaffolding/globalHooks.ts new file mode 100644 index 0000000000..84fbfa0677 --- /dev/null +++ b/e2e/scaffolding/globalHooks.ts @@ -0,0 +1,84 @@ +// These run ONCE per entire test run +import { cryptoWaitReady } from '@polkadot/util-crypto'; +import { globSync } from 'glob'; +import { ExtrinsicHelper } from './extrinsicHelpers'; +import { getFundingSource, getRootFundingSource, getSudo } from './funding'; +import { TEST_EPOCH_LENGTH, drainKeys, getNonce, setEpochLength } from './helpers'; +import { isDev, providerUrl } from './env'; +import { getUnifiedAddress } from '@frequency-chain/ethereum-utils'; +import type { KeyringPair } from '@polkadot/keyring/types'; + +const DEFAULT_AMOUNT = 100_000_000_000_000n; // 1,000,000 UNIT per source +const MINIMUM_DIFF_AMOUNT = 100_000_000n; // 1 UNIT + +// This will always include files that we don't care about, but that is ok. +// The reduction in complexity is worth the extra transfers +function getAllTestFiles() { + return globSync('**/*.test.ts', { ignore: 'node_modules/**' }); +} + +async function fundAccountAmount(dest: KeyringPair): Promise<{ dest: KeyringPair; amount: bigint }> { + const accountInfo = await ExtrinsicHelper.getAccountInfo(dest); + console.log( + 'Checking Funding: ', + getUnifiedAddress(dest).toString(), + 'Free Balance', + accountInfo.data.free.toHuman() + ); + const freeBalance = accountInfo.data.free.toBigInt(); + + // Only fund up to the amount needed, so that we don't have to drain the persistent accounts each time + if (freeBalance >= DEFAULT_AMOUNT - MINIMUM_DIFF_AMOUNT) { + return { dest, amount: 0n }; + } + return { dest, amount: DEFAULT_AMOUNT - (freeBalance - MINIMUM_DIFF_AMOUNT) }; +} + +function fundSourceTransfer(root: KeyringPair, dest: KeyringPair, amount: bigint, nonce: number) { + try { + // Only transfer the amount needed + return ExtrinsicHelper.transferFunds(root, dest, amount).signAndSend(nonce); + } catch (e) { + console.error('Unable to fund source', { dest }); + throw e; + } +} + +async function fundAccountsToDefault(dests: KeyringPair[]) { + const root = getRootFundingSource().keys; + console.log('Root funding source: ', getUnifiedAddress(root)); + const nonce = await getNonce(root); + const fundingList = await Promise.all(dests.map(fundAccountAmount)); + await Promise.all( + fundingList + .filter(({ amount }) => amount > 0n) + .map(({ amount, dest }, i) => fundSourceTransfer(root, dest, amount, nonce + i)) + ); + // Make sure we are finalized before trying to use the funds + await ExtrinsicHelper.waitForFinalization(); + console.log('Root funding complete!'); +} + +async function devSudoActions() { + // Because there is only one sudo, these actions must take place globally + const sudo = getSudo().keys; + await setEpochLength(sudo, TEST_EPOCH_LENGTH); +} + +export async function mochaGlobalSetup(context) { + await cryptoWaitReady(); + await ExtrinsicHelper.initialize(providerUrl); + await fundAccountsToDefault(getAllTestFiles().map(getFundingSource)); + + // Sudo is only when not on Testnet + if (isDev()) await devSudoActions(); + + console.log('Global Setup Complete'); +} + +export async function mochaGlobalTeardown() { + console.log('Global Teardown Start'); + await ExtrinsicHelper.api.disconnect(); + await ExtrinsicHelper.apiPromise.disconnect(); + console.log('Global Teardown Complete'); +} diff --git a/e2e/scaffolding/helpers.ts b/e2e/scaffolding/helpers.ts new file mode 100644 index 0000000000..0268e0cc73 --- /dev/null +++ b/e2e/scaffolding/helpers.ts @@ -0,0 +1,732 @@ +import { Keyring } from '@polkadot/api'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { u16, u32, u64, Option, Bytes } from '@polkadot/types'; +import type { FrameSystemAccountInfo, PalletCapacityCapacityDetails } from '@polkadot/types/lookup'; +import { Codec } from '@polkadot/types/types'; +import { u8aToHex, u8aWrapBytes } from '@polkadot/util'; +import { mnemonicGenerate } from '@polkadot/util-crypto'; +import { + verbose, + getGraphChangeSchema, + getBroadcastSchema, + getDummySchema, + getAvroChatMessageItemizedSchema, + getAvroChatMessagePaginatedSchema, +} from './env'; +import { + AddKeyData, + AddProviderPayload, + EventMap, + ExtrinsicHelper, + ItemizedSignaturePayloadV2, + PaginatedDeleteSignaturePayloadV2, + PaginatedUpsertSignaturePayloadV2, + ReleaseSchedule, +} from './extrinsicHelpers'; +import { + BlockPaginationResponseMessage, + HandleResponse, + MessageResponse, + MessageSourceId, + PageHash, + SchemaId, +} from '@frequency-chain/api-augment/interfaces'; +import assert from 'assert'; +import { AVRO_GRAPH_CHANGE } from '../schemas/fixtures/avroGraphChangeSchemaType'; +import { PARQUET_BROADCAST } from '../schemas/fixtures/parquetBroadcastSchemaType'; +import { AVRO_CHAT_MESSAGE } from '../stateful-pallet-storage/fixtures/itemizedSchemaType'; +import { getUnifiedAddress } from '@frequency-chain/ethereum-utils'; +import { KeypairType } from '@polkadot/util-crypto/types'; +import { BigInt } from '@polkadot/x-bigint'; +import { ethers } from 'ethers'; +import { secp256k1PairFromSeed } from '@polkadot/util-crypto/secp256k1/pair/fromSeed'; +import { Keypair } from '@polkadot/util-crypto/types'; +import { keccak256 } from '@polkadot/wasm-crypto'; + +export interface Account { + uri: string; + keys: KeyringPair; +} + +export interface Sr25519Signature { + Sr25519: `0x${string}`; +} + +export interface Ed25519Signature { + Ed25519: `0x${string}`; +} + +export interface EcdsaSignature { + Ecdsa: `0x${string}`; +} + +export type MultiSignatureType = Sr25519Signature | Ed25519Signature | EcdsaSignature; + +export interface Address20MultiAddress { + Address20: number[]; +} + +export const TEST_EPOCH_LENGTH = 50; +export const CENTS = 1000000n; +export const DOLLARS = 100n * CENTS; +export const BOOST_ADJUSTMENT = 2n; // divide by 2 or 50% of Maximum Capacity + +export function getTokenPerCapacity(): bigint { + // Perbil + return 1_000_000_000n / ExtrinsicHelper.api.consts.capacity.capacityPerToken.toBigInt(); +} + +export function getTestHandle(prefix = 'test-') { + return prefix + Math.random().toFixed(10).toString().replaceAll('0.', ''); +} + +export function signPayloadSr25519(keys: KeyringPair, data: Codec): Sr25519Signature { + return { Sr25519: u8aToHex(keys.sign(u8aWrapBytes(data.toU8a()))) }; +} + +export function signPayload(keys: KeyringPair, data: Codec): MultiSignatureType { + switch (keys.type) { + case 'ecdsa': + throw new Error('Ecdsa key type is not supported and it should be replaced with ethereum ones!'); + case 'sr25519': + return { Sr25519: u8aToHex(keys.sign(u8aWrapBytes(data.toU8a()))) }; + case 'ed25519': + return { Ed25519: u8aToHex(keys.sign(u8aWrapBytes(data.toU8a()))) }; + case 'ethereum': + return { Ecdsa: u8aToHex(keys.sign(data.toU8a())) }; + } +} + +export async function generateDelegationPayload( + payloadInputs: AddProviderPayload, + expirationOffset: number = 100, + blockNumber?: number +): Promise { + const { expiration, ...payload } = payloadInputs; + + return { + expiration: expiration || (blockNumber || (await getBlockNumber())) + expirationOffset, + ...payload, + }; +} + +export async function getFinalizedBlockNumber(): Promise { + return (await ExtrinsicHelper.getLastFinalizedBlock()).block.header.number.toNumber(); +} + +export async function getBlockNumber(): Promise { + return (await ExtrinsicHelper.getLastBlock()).block.header.number.toNumber(); +} + +let cacheED: null | bigint = null; + +export async function getExistentialDeposit(): Promise { + if (cacheED !== null) return cacheED; + return (cacheED = ExtrinsicHelper.api.consts.balances.existentialDeposit.toBigInt()); +} + +export async function generateAddKeyPayload( + payloadInputs: AddKeyData, + expirationOffset: number = 100, + blockNumber?: number +): Promise { + const { expiration, ...payload } = payloadInputs; + + return { + expiration: expiration || (blockNumber || (await getBlockNumber())) + expirationOffset, + ...payload, + }; +} + +export async function generateItemizedSignaturePayload( + payloadInputs: ItemizedSignaturePayloadV2, + expirationOffset: number = 100, + blockNumber?: number +): Promise { + const { expiration, ...payload } = payloadInputs; + + return { + expiration: expiration || (blockNumber || (await getBlockNumber())) + expirationOffset, + ...payload, + }; +} + +export function generateItemizedActions(items: { action: 'Add' | 'Update'; value: string }[]) { + return items.map(({ action, value }) => { + const actionObj = {}; + actionObj[action] = new Bytes(ExtrinsicHelper.api.registry, value); + return actionObj; + }); +} + +export async function generateItemizedActionsPayloadAndSignature( + payloadInput: ItemizedSignaturePayloadV2, + payloadType: 'PalletStatefulStorageItemizedSignaturePayloadV2', + signingKeys: KeyringPair +) { + const payloadData = await generateItemizedSignaturePayload(payloadInput); + const payload = ExtrinsicHelper.api.registry.createType(payloadType, payloadData); + const signature = signPayload(signingKeys, payload); + + return { payload: payloadData, signature }; +} + +export async function generateItemizedActionsSignedPayloadV2( + actions: any[], + schemaId: SchemaId, + signingKeys: KeyringPair, + msaId: MessageSourceId +) { + const payloadInput: ItemizedSignaturePayloadV2 = { + targetHash: await getCurrentItemizedHash(msaId, schemaId), + schemaId, + actions, + }; + + return generateItemizedActionsPayloadAndSignature( + payloadInput, + 'PalletStatefulStorageItemizedSignaturePayloadV2', + signingKeys + ); +} + +export async function generatePaginatedUpsertSignaturePayloadV2( + payloadInputs: PaginatedUpsertSignaturePayloadV2, + expirationOffset: number = 100, + blockNumber?: number +): Promise { + const { expiration, ...payload } = payloadInputs; + + return { + expiration: expiration || (blockNumber || (await getBlockNumber())) + expirationOffset, + ...payload, + }; +} + +export async function generatePaginatedDeleteSignaturePayloadV2( + payloadInputs: PaginatedDeleteSignaturePayloadV2, + expirationOffset: number = 100, + blockNumber?: number +): Promise { + const { expiration, ...payload } = payloadInputs; + + return { + expiration: expiration || (blockNumber || (await getBlockNumber())) + expirationOffset, + ...payload, + }; +} + +// Keep track of all the funded keys so that we can drain them at the end of the test +const createdKeys = new Map(); +const ethereumKeys = new Map(); + +export async function drainFundedKeys(dest: KeyringPair) { + // Make sure we are finalized before trying to drain + await ExtrinsicHelper.waitForFinalization(); + return drainKeys([...createdKeys.values()], dest); +} + +export function createKeys(name: string = 'first pair', keyType: KeypairType = 'sr25519'): KeyringPair { + const mnemonic = mnemonicGenerate(); + // create & add the pair to the keyring with the type and some additional + // metadata specified + const keyring = new Keyring({ type: keyType }); + let keyringPair; + if (keyType === 'ethereum') { + // since we don't have access to the secret key from inside the KeyringPair + const keypair = secp256k1PairFromSeed(keccak256(Buffer.from(mnemonic, 'utf8'))); + keyringPair = keyring.addFromPair(keypair, {}, keyType); + ethereumKeys.set(getUnifiedAddress(keyringPair), keypair); + } else { + keyringPair = keyring.addFromUri(mnemonic, { name }, keyType); + } + + createdKeys.set(getUnifiedAddress(keyringPair), keyringPair); + return keyringPair; +} + +export function getEthereumKeyPairFromUnifiedAddress(unifiedAddress: string): Keypair { + return ethereumKeys.get(unifiedAddress) as Keypair; +} + +function canDrainAccount(info: FrameSystemAccountInfo): boolean { + return ( + !info.isEmpty && + info.data.free.toNumber() > 1_500_000 && // ~Cost to do the transfer + info.data.reserved.toNumber() < 1 && + info.data.frozen.toNumber() < 1 + ); +} + +export async function drainKeys(keyPairs: KeyringPair[], dest: KeyringPair) { + try { + await Promise.all( + keyPairs.map(async (keypair) => { + const info = await ExtrinsicHelper.getAccountInfo(keypair); + // Only drain keys that can be + if (canDrainAccount(info)) await ExtrinsicHelper.emptyAccount(keypair, dest).signAndSend(); + }) + ); + } catch (e) { + console.log('Error draining accounts: ', e); + } +} + +export async function fundKeypair( + source: KeyringPair, + dest: KeyringPair, + amount: bigint, + nonce?: number +): Promise { + await ExtrinsicHelper.transferFunds(source, dest, amount).signAndSend(nonce, undefined, false); +} + +// create and Fund keys with existential deposit amount or the value provided. +export async function createAndFundKeypair( + source: KeyringPair, + amount?: bigint, + keyName?: string, + nonce?: number, + keyType: KeypairType = 'sr25519' +): Promise { + const keypair = createKeys(keyName, keyType); + + await fundKeypair(source, keypair, amount || (await getExistentialDeposit()), nonce); + log('Funded', `Name: ${keyName || 'None provided'}`, `Address: ${getUnifiedAddress(keypair)}`); + + return keypair; +} + +export async function createAndFundKeypairs( + source: KeyringPair, + keyNames: string[], + amountOverExDep: bigint = 100_000_000n, + keyType: KeypairType = 'sr25519' +): Promise { + const nonce = await getNonce(source); + const existentialDeposit = await getExistentialDeposit(); + + const wait: Promise[] = keyNames.map((keyName, i) => { + const keypair = createKeys(keyName + ` ${i}th`, keyType); + + return fundKeypair(source, keypair, existentialDeposit + amountOverExDep, nonce + i).then(() => keypair); + }); + return Promise.all(wait); +} + +export function log(...args: any[]) { + if (verbose) { + console.log(...args); + } +} + +export async function createProviderKeysAndId( + source: KeyringPair, + amount: bigint = 1n * DOLLARS, + waitForInBlock = true +): Promise<[KeyringPair, u64]> { + const providerKeys = await createAndFundKeypair(source, amount); + const { eventMap } = await ExtrinsicHelper.executeUtilityBatchAll(providerKeys, [ + ExtrinsicHelper.createMsa(providerKeys).extrinsic(), + ExtrinsicHelper.createProvider(providerKeys, 'PrivateProvider').extrinsic(), + ]).fundAndSend(source, waitForInBlock); + const providerCreatedEvent = eventMap['msa.ProviderCreated']; + if (ExtrinsicHelper.api.events.msa.ProviderCreated.is(providerCreatedEvent)) { + return [providerKeys, providerCreatedEvent.data.providerId]; + } + throw new Error('createProviderKeysAndId failed to return a ProviderCreated event!'); +} + +export async function createDelegatorAndDelegation( + source: KeyringPair, + schemaId: u16 | u16[], + providerId: u64, + providerKeys: KeyringPair, + keyType: KeypairType = 'sr25519', + createdDelegatorKeys?: KeyringPair +): Promise<[KeyringPair, u64]> { + // Create a delegator keys. + const delegatorKeys = createdDelegatorKeys || createKeys('delegator', keyType); + // Grant delegation to the provider + const payload = await generateDelegationPayload({ + authorizedMsaId: providerId, + schemaIds: Array.isArray(schemaId) ? schemaId : [schemaId], + }); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + + const grantDelegationOp = ExtrinsicHelper.createSponsoredAccountWithDelegation( + delegatorKeys, + providerKeys, + signPayload(delegatorKeys, addProviderData), + payload + ); + const { target: targetEvent } = await grantDelegationOp.fundAndSend(source, false); + + return [delegatorKeys, targetEvent!.data.msaId]; +} + +export async function getCurrentItemizedHash(msa_id: MessageSourceId, schemaId: u16): Promise { + const result = await ExtrinsicHelper.getItemizedStorage(msa_id, schemaId); + return result.content_hash; +} + +export async function getCurrentPaginatedHash(msa_id: MessageSourceId, schemaId: u16, page_id: number): Promise { + const result = await ExtrinsicHelper.getPaginatedStorage(msa_id, schemaId); + const page_response = result.filter((page) => page.page_id.toNumber() === page_id); + if (page_response.length <= 0) { + return new u32(ExtrinsicHelper.api.registry, 0); + } + + return page_response[0].content_hash; +} + +export async function getHandleForMsa(msa_id: MessageSourceId): Promise> { + const result = await ExtrinsicHelper.getHandleForMSA(msa_id); + return result; +} + +// 1. Creates and funds a key pair. +// 2. Key pair used to directly create its own MSA Id +// 3. returns MSA ID and the keys. +export async function createMsa( + source: KeyringPair, + amount?: bigint, + keyType: KeypairType = 'sr25519' +): Promise<[u64, KeyringPair]> { + const keys = await createAndFundKeypair(source, amount, undefined, undefined, keyType); + const createMsaOp = ExtrinsicHelper.createMsa(keys); + const { target } = await createMsaOp.fundAndSend(source, false); + assert.notEqual(target, undefined, 'createMsa: should have returned MsaCreated event'); + + return [target!.data.msaId, keys]; +} + +// Creates an MSA and a provider for the given keys +// Returns the MSA Id of the provider +export async function createMsaAndProvider( + source: KeyringPair, + keys: KeyringPair, + providerName: string, + amount: bigint | undefined = undefined, + waitForInBlock = true +): Promise { + const createMsaOp = ExtrinsicHelper.createMsa(keys); + const createProviderOp = ExtrinsicHelper.createProvider(keys, providerName); + const minimumFund = ( + await Promise.all([getExistentialDeposit(), createMsaOp.getEstimatedTxFee(), createProviderOp.getEstimatedTxFee()]) + ).reduce((i, j) => i + j, 100_000n); + // Create and fund a keypair with stakeAmount + // Use this keypair for stake operations + await fundKeypair(source, keys, amount || minimumFund); + + const { eventMap } = await ExtrinsicHelper.executeUtilityBatchAll(keys, [ + createMsaOp.extrinsic(), + createProviderOp.extrinsic(), + ]).signAndSend(undefined, undefined, waitForInBlock); + + const providerCreatedEvent = eventMap['msa.ProviderCreated']; + if (ExtrinsicHelper.api.events.msa.ProviderCreated.is(providerCreatedEvent)) { + return providerCreatedEvent.data.providerId; + } + return Promise.reject('Did not create provider with msa.ProviderCreated event'); +} + +// Stakes the given amount of tokens from the given keys to the given provider +export async function stakeToProvider( + source: KeyringPair, + keys: KeyringPair, + providerId: u64, + tokensToStake: bigint +): Promise { + const stakeOp = ExtrinsicHelper.stake(keys, providerId, tokensToStake); + // Wait for finalized capacity before continuing + const { target: stakeEvent } = await stakeOp.fundAndSend(source, false); + assert.notEqual(stakeEvent, undefined, 'stakeToProvider: should have returned Stake event'); + + if (stakeEvent) { + const stakedCapacity = stakeEvent.data.capacity; + + const expectedCapacity = tokensToStake / getTokenPerCapacity(); + + assert.equal( + stakedCapacity, + expectedCapacity, + `stakeToProvider: expected ${expectedCapacity}, got ${stakedCapacity}` + ); + } else { + return Promise.reject('stakeToProvider: stakeEvent should be capacity.Staked event'); + } +} + +export async function boostProvider( + source: KeyringPair, + keys: KeyringPair, + providerId: u64, + tokensToStake: bigint +): Promise { + const stakeOp = ExtrinsicHelper.providerBoost(keys, providerId, tokensToStake); + const { target: stakeEvent } = await stakeOp.fundAndSend(source); + assert.notEqual(stakeEvent, undefined, 'stakeToProvider: should have returned Stake event'); + if (stakeEvent) { + const stakedCapacity = stakeEvent.data.capacity; + + const expectedCapacity = tokensToStake / getTokenPerCapacity() / BOOST_ADJUSTMENT; + + assert.equal( + stakedCapacity, + expectedCapacity, + `stakeToProvider: expected ${expectedCapacity}, got ${stakedCapacity}` + ); + } else { + return Promise.reject('stakeToProvider: stakeEvent should be capacity.Staked event'); + } +} + +export async function getNextEpochBlock() { + const epochInfo = await ExtrinsicHelper.apiPromise.query.capacity.currentEpochInfo(); + const actualEpochLength = await ExtrinsicHelper.apiPromise.query.capacity.epochLength(); + return actualEpochLength.toNumber() + epochInfo.epochStart.toNumber() + 1; +} + +export async function setEpochLength(keys: KeyringPair, epochLength: number): Promise { + const setEpochLengthOp = ExtrinsicHelper.setEpochLength(keys, epochLength); + const { target: setEpochLengthEvent } = await setEpochLengthOp.sudoSignAndSend(); + if (setEpochLengthEvent) { + const epochLength = setEpochLengthEvent.data.blocks; + assert.equal(epochLength.toNumber(), TEST_EPOCH_LENGTH, 'should set epoch length to TEST_EPOCH_LENGTH blocks'); + const actualEpochLength = await ExtrinsicHelper.apiPromise.query.capacity.epochLength(); + assert.equal( + actualEpochLength, + TEST_EPOCH_LENGTH, + `should have set epoch length to TEST_EPOCH_LENGTH blocks, but it's ${actualEpochLength}` + ); + } else { + assert.fail('should return an EpochLengthUpdated event'); + } +} + +export async function getNextRewardEraBlock(): Promise { + const eraInfo = await ExtrinsicHelper.apiPromise.query.capacity.currentEraInfo(); + const actualEraLength: number = ExtrinsicHelper.api.consts.capacity.eraLength.toNumber(); + return actualEraLength + eraInfo.startedAt.toNumber() + 1; +} + +export async function getOrCreateGraphChangeSchema(source: KeyringPair): Promise { + const existingSchemaId = getGraphChangeSchema(); + if (existingSchemaId) { + return new u16(ExtrinsicHelper.api.registry, existingSchemaId); + } else { + const op = ExtrinsicHelper.createSchemaV3( + source, + AVRO_GRAPH_CHANGE, + 'AvroBinary', + 'OnChain', + [], + 'test.graphChangeSchema' + ); + const { target: createSchemaEvent, eventMap } = await op.fundAndSend(source, false); + assertExtrinsicSuccess(eventMap); + if (createSchemaEvent) { + return createSchemaEvent.data.schemaId; + } else { + assert.fail('failed to create a schema'); + } + } +} + +export async function getOrCreateParquetBroadcastSchema(source: KeyringPair): Promise { + const existingSchemaId = getBroadcastSchema(); + if (existingSchemaId) { + return new u16(ExtrinsicHelper.api.registry, existingSchemaId); + } else { + const createSchema = ExtrinsicHelper.createSchemaV3( + source, + PARQUET_BROADCAST, + 'Parquet', + 'IPFS', + [], + 'test.parquetBroadcast' + ); + const { target: event } = await createSchema.fundAndSend(source, false); + if (event) { + return event.data.schemaId; + } else { + assert.fail('failed to create a schema'); + } + } +} + +export async function getOrCreateDummySchema(source: KeyringPair): Promise { + const existingSchemaId = getDummySchema(); + if (existingSchemaId) { + return new u16(ExtrinsicHelper.api.registry, existingSchemaId); + } else { + const createDummySchema = ExtrinsicHelper.createSchemaV3( + source, + { type: 'record', name: 'Dummy on-chain schema', fields: [] }, + 'AvroBinary', + 'OnChain', + [], + 'test.dummySchema' + ); + const { target: dummySchemaEvent } = await createDummySchema.fundAndSend(source, false); + if (dummySchemaEvent) { + return dummySchemaEvent.data.schemaId; + } else { + assert.fail('failed to create a schema'); + } + } +} + +export async function getOrCreateAvroChatMessagePaginatedSchema(source: KeyringPair): Promise { + const existingSchemaId = getAvroChatMessagePaginatedSchema(); + if (existingSchemaId) { + return new u16(ExtrinsicHelper.api.registry, existingSchemaId); + } else { + // Create a schema for Paginated PayloadLocation + const createSchema = ExtrinsicHelper.createSchemaV3( + source, + AVRO_CHAT_MESSAGE, + 'AvroBinary', + 'Paginated', + [], + 'test.AvroChatMessagePaginated' + ); + const { target: event } = await createSchema.fundAndSend(source, false); + if (event) { + return event.data.schemaId; + } else { + assert.fail('failed to create a schema'); + } + } +} + +export async function getOrCreateAvroChatMessageItemizedSchema(source: KeyringPair): Promise { + const existingSchemaId = getAvroChatMessageItemizedSchema(); + if (existingSchemaId) { + return new u16(ExtrinsicHelper.api.registry, existingSchemaId); + } else { + // Create a schema for Paginated PayloadLocation + const createSchema = ExtrinsicHelper.createSchemaV3( + source, + AVRO_CHAT_MESSAGE, + 'AvroBinary', + 'Itemized', + [], + 'test.AvroChatMessageItemized' + ); + const { target: event } = await createSchema.fundAndSend(source, false); + if (event) { + return event.data.schemaId; + } else { + assert.fail('failed to create a schema'); + } + } +} + +export async function getCapacity(providerId: u64): Promise { + return (await ExtrinsicHelper.apiPromise.query.capacity.capacityLedger(providerId)).unwrap(); +} + +export async function getNonce(keys: KeyringPair): Promise { + const nonce = await ExtrinsicHelper.apiPromise.call.accountNonceApi.accountNonce(getUnifiedAddress(keys)); + return nonce.toNumber(); +} + +export function assertEvent(events: EventMap, eventName: string) { + assert(Object.hasOwn(events, eventName), `Could not find expected event: ${eventName}`); +} + +export function assertExtrinsicSuccess(eventMap: EventMap) { + assert.notEqual(eventMap['system.ExtrinsicSuccess'], undefined); +} + +export function assertHasMessage(response: BlockPaginationResponseMessage, testFn: (x: MessageResponse) => boolean) { + const messages = response.content; + assert(messages.length > 0, 'Expected some messages, but found none.'); + + const found = messages.find(testFn); + + if (found) { + assert.notEqual(found, undefined); + } else { + const allPayloads = messages.map((x) => x.payload.toString()); + assert.fail(`Unable to find message in response (length: ${messages.length}, Payloads: ${allPayloads.join(', ')})`); + } +} + +export async function assertAddNewKey( + capacityKeys: KeyringPair, + addKeyPayload: AddKeyData, + newControlKeypair: KeyringPair +) { + const addKeyPayloadCodec: Codec = ExtrinsicHelper.api.registry.createType('PalletMsaAddKeyData', addKeyPayload); + const ownerSig: MultiSignatureType = signPayload(capacityKeys, addKeyPayloadCodec); + const newSig: MultiSignatureType = signPayload(newControlKeypair, addKeyPayloadCodec); + const addPublicKeyOp = ExtrinsicHelper.addPublicKeyToMsa(capacityKeys, ownerSig, newSig, addKeyPayload); + const { eventMap } = await addPublicKeyOp.signAndSend(); + assertEvent(eventMap, 'system.ExtrinsicSuccess'); + assertEvent(eventMap, 'msa.PublicKeyAdded'); +} + +export function generateSchemaPartialName(length: number): string { + let result = ''; + const characters = 'abcdefghijklmnopqrstuvwxyz-'; + const charactersLength = characters.length; + let counter = 0; + while (counter < length) { + const randomChar = characters.charAt(Math.floor(Math.random() * charactersLength)); + if ((counter == 0 || counter == length - 1) && randomChar === '-') { + // avoid creating invalid name + continue; + } + result += randomChar; + counter += 1; + } + return result; +} + +export const base64UrlToUint8Array = (base64: string): Uint8Array => new Uint8Array(Buffer.from(base64, 'base64url')); + +export async function getFreeBalance(source: KeyringPair): Promise { + const accountInfo = await ExtrinsicHelper.getAccountInfo(source); + return BigInt(accountInfo.data.free.toString()) - (await getExistentialDeposit()); +} + +// spendable = free - max(frozen - on_hold, ED) +export async function getSpendableBalance(source: KeyringPair): Promise { + const ed = await getExistentialDeposit(); + const accountInfo = await ExtrinsicHelper.getAccountInfo(source); + const frozenLessReserved = accountInfo.data.frozen.toBigInt() - accountInfo.data.reserved.toBigInt(); + const maxVsED = frozenLessReserved > ed ? frozenLessReserved : ed; + return accountInfo.data.free.toBigInt() - maxVsED; +} + +export async function assertExtrinsicSucceededAndFeesPaid(chainEvents: any) { + assert.notEqual(chainEvents['system.ExtrinsicSuccess'], undefined, 'should have returned an ExtrinsicSuccess event'); + assert.notEqual(chainEvents['balances.Withdraw'], undefined, 'should have returned a balances.Withdraw event'); +} + +export function getBlocksInMonthPeriod(blockTime: number, periodInMonths: number) { + const secondsPerMonth = 2592000; // Assuming 30 days in a month + + // Calculate the number of blocks in the given period + const blocksInPeriod = Math.floor((periodInMonths * secondsPerMonth) / blockTime); + + return blocksInPeriod; +} + +export function calculateReleaseSchedule(amount: number | bigint): ReleaseSchedule { + const start = 0; + const period = getBlocksInMonthPeriod(6, 4); + const periodCount = 4; + + const perPeriod = BigInt(amount) / BigInt(periodCount); + + return { + start, + period, + periodCount, + perPeriod, + }; +} diff --git a/e2e/scaffolding/rootHooks.ts b/e2e/scaffolding/rootHooks.ts new file mode 100644 index 0000000000..9938eeed62 --- /dev/null +++ b/e2e/scaffolding/rootHooks.ts @@ -0,0 +1,35 @@ +// These run once per TEST FILE + +import { cryptoWaitReady } from '@polkadot/util-crypto'; +import { ExtrinsicHelper } from './extrinsicHelpers'; +import { drainFundedKeys } from './helpers'; +import { getRootFundingSource } from './funding'; +import { providerUrl } from './env'; + +// Make sure that we can serialize BigInts for Mocha +(BigInt.prototype as any).toJSON = function () { + return this.toString(); +}; + +export const mochaHooks = { + async beforeAll() { + try { + await cryptoWaitReady(); + await ExtrinsicHelper.initialize(providerUrl); + } catch (e) { + console.error('Failed to run beforeAll root hook: ', this.test.parent.suites[0].title, `${e}`); + } + }, + async afterAll() { + const testSuite = this.test.parent.suites[0].title; + console.log('Starting ROOT hook shutdown', testSuite); + try { + // Any key created using helpers `createKeys` is kept in the module + // then any value remaining is drained here at the end + await drainFundedKeys(getRootFundingSource().keys); + console.log('ENDING ROOT hook shutdown', testSuite); + } catch (e) { + console.error('Failed to run afterAll root hook: ', testSuite, `${e}`); + } + }, +}; diff --git a/e2e/scenarios/grantDelegation.ethereum.test.ts b/e2e/scenarios/grantDelegation.ethereum.test.ts new file mode 100644 index 0000000000..11dca9c2f3 --- /dev/null +++ b/e2e/scenarios/grantDelegation.ethereum.test.ts @@ -0,0 +1,183 @@ +import '@frequency-chain/api-augment'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { u16, u64 } from '@polkadot/types'; +import assert from 'assert'; +import { AddProviderPayload, Extrinsic, ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { + DOLLARS, + createAndFundKeypair, + createAndFundKeypairs, + generateDelegationPayload, + signPayload, +} from '../scaffolding/helpers'; +import { SchemaId } from '@frequency-chain/api-augment/interfaces'; +import { getFundingSource } from '../scaffolding/funding'; + +const fundingSource = getFundingSource(import.meta.url); + +describe('Delegation Scenario Tests Ethereum', function () { + let keys: KeyringPair; + let otherMsaKeys: KeyringPair; + let thirdMsaKeys: KeyringPair; + let noMsaKeys: KeyringPair; + let providerKeys: KeyringPair; + let otherProviderKeys: KeyringPair; + let schemaId: u16; + let schemaId2: SchemaId; + let providerId: u64; + let otherProviderId: u64; + let msaId: u64; + let otherMsaId: u64; + let thirdMsaId: u64; + + before(async function () { + // Fund all the different keys + [noMsaKeys, keys, otherMsaKeys, thirdMsaKeys, providerKeys, otherProviderKeys] = await createAndFundKeypairs( + fundingSource, + ['noMsaKeys', 'keys', 'otherMsaKeys', 'thirdMsaKeys', 'providerKeys', 'otherProviderKeys'], + 1n * DOLLARS, + 'ethereum' + ); + + const { target: msaCreatedEvent1 } = await ExtrinsicHelper.createMsa(keys).signAndSend(); + msaId = msaCreatedEvent1!.data.msaId; + + const { target: msaCreatedEvent2 } = await ExtrinsicHelper.createMsa(otherMsaKeys).signAndSend(); + otherMsaId = msaCreatedEvent2!.data.msaId; + + const { target: msaCreatedEvent3 } = await ExtrinsicHelper.createMsa(thirdMsaKeys).signAndSend(); + thirdMsaId = msaCreatedEvent3!.data.msaId; + + let createProviderMsaOp = ExtrinsicHelper.createMsa(providerKeys); + await createProviderMsaOp.signAndSend(); + let createProviderOp = ExtrinsicHelper.createProvider(providerKeys, 'MyPoster'); + let { target: providerEvent } = await createProviderOp.signAndSend(); + assert.notEqual(providerEvent, undefined, 'setup should return a ProviderCreated event'); + providerId = providerEvent!.data.providerId; + + createProviderMsaOp = ExtrinsicHelper.createMsa(otherProviderKeys); + await createProviderMsaOp.signAndSend(); + createProviderOp = ExtrinsicHelper.createProvider(otherProviderKeys, 'MyPoster'); + ({ target: providerEvent } = await createProviderOp.signAndSend()); + assert.notEqual(providerEvent, undefined, 'setup should return a ProviderCreated event'); + otherProviderId = providerEvent!.data.providerId; + + const schema = { + type: 'record', + name: 'Post', + fields: [ + { name: 'title', type: { name: 'Title', type: 'string' } }, + { name: 'content', type: { name: 'Content', type: 'string' } }, + { name: 'fromId', type: { name: 'DSNPId', type: 'fixed', size: 8 } }, + { name: 'objectId', type: 'DSNPId' }, + ], + }; + + schemaId = await ExtrinsicHelper.getOrCreateSchemaV3( + keys, + schema, + 'AvroBinary', + 'OnChain', + [], + 'test.grantDelegation' + ); + + schemaId2 = await ExtrinsicHelper.getOrCreateSchemaV3( + keys, + schema, + 'AvroBinary', + 'OnChain', + [], + 'test.grantDelegationSecond' + ); + }); + + describe('delegation grants for a Ethereum key', function () { + it('should fail to grant delegation if payload not signed by delegator (AddProviderSignatureVerificationFailed)', async function () { + const payload = await generateDelegationPayload({ + authorizedMsaId: providerId, + schemaIds: [schemaId], + }); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + + const grantDelegationOp = ExtrinsicHelper.grantDelegation( + keys, + providerKeys, + signPayload(providerKeys, addProviderData), + payload + ); + await assert.rejects(grantDelegationOp.fundAndSend(fundingSource), { + name: 'AddProviderSignatureVerificationFailed', + }); + }); + + it('should fail to grant delegation if ID in payload does not match origin (UnauthorizedDelegator)', async function () { + const payload = await generateDelegationPayload({ + authorizedMsaId: otherMsaId, + schemaIds: [schemaId], + }); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + + const grantDelegationOp = ExtrinsicHelper.grantDelegation( + keys, + providerKeys, + signPayload(keys, addProviderData), + payload + ); + await assert.rejects(grantDelegationOp.fundAndSend(fundingSource), { name: 'UnauthorizedDelegator' }); + }); + + it('should grant a delegation to a provider', async function () { + const payload = await generateDelegationPayload({ + authorizedMsaId: providerId, + schemaIds: [schemaId], + }); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + + const grantDelegationOp = ExtrinsicHelper.grantDelegation( + keys, + providerKeys, + signPayload(keys, addProviderData), + payload + ); + const { target: grantDelegationEvent } = await grantDelegationOp.fundAndSend(fundingSource); + assert.notEqual(grantDelegationEvent, undefined, 'should have returned DelegationGranted event'); + assert.deepEqual(grantDelegationEvent?.data.providerId, providerId, 'provider IDs should match'); + assert.deepEqual(grantDelegationEvent?.data.delegatorId, msaId, 'delegator IDs should match'); + }); + }); + + describe('createSponsoredAccountWithDelegation', function () { + let sponsorKeys: KeyringPair; + let op: Extrinsic; + let defaultPayload: AddProviderPayload; + + before(async function () { + sponsorKeys = await createAndFundKeypair(fundingSource, 50_000_000n, undefined, undefined, 'ethereum'); + defaultPayload = { + authorizedMsaId: providerId, + schemaIds: [schemaId], + }; + }); + + it('should successfully create a delegated account', async function () { + const payload = await generateDelegationPayload(defaultPayload); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + + op = ExtrinsicHelper.createSponsoredAccountWithDelegation( + sponsorKeys, + providerKeys, + signPayload(sponsorKeys, addProviderData), + payload + ); + const { target: event, eventMap } = await op.fundAndSend(fundingSource); + assert.notEqual(event, undefined, 'should have returned MsaCreated event'); + assert.notEqual(eventMap['msa.DelegationGranted'], undefined, 'should have returned DelegationGranted event'); + await assert.rejects( + op.fundAndSend(fundingSource), + { name: 'SignatureAlreadySubmitted' }, + 'should reject double submission' + ); + }); + }); +}); diff --git a/e2e/scenarios/grantDelegation.test.ts b/e2e/scenarios/grantDelegation.test.ts new file mode 100644 index 0000000000..72a3f49ff3 --- /dev/null +++ b/e2e/scenarios/grantDelegation.test.ts @@ -0,0 +1,238 @@ +import '@frequency-chain/api-augment'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { u16, u64 } from '@polkadot/types'; +import assert from 'assert'; +import { ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { + DOLLARS, + createAndFundKeypairs, + createMsaAndProvider, + generateDelegationPayload, + signPayloadSr25519, +} from '../scaffolding/helpers'; +import { SchemaId } from '@frequency-chain/api-augment/interfaces'; +import { getFundingSource } from '../scaffolding/funding'; + +const fundingSource = getFundingSource(import.meta.url); + +describe('Delegation Scenario Tests', function () { + let keys: KeyringPair; + let otherMsaKeys: KeyringPair; + let thirdMsaKeys: KeyringPair; + let providerKeys: KeyringPair; + let otherProviderKeys: KeyringPair; + let schemaId: u16; + let schemaId2: SchemaId; + let providerId: u64; + let otherProviderId: u64; + let msaId: u64; + let otherMsaId: u64; + let thirdMsaId: u64; + + before(async function () { + // Fund all the different keys + [keys, otherMsaKeys, thirdMsaKeys, providerKeys, otherProviderKeys] = await createAndFundKeypairs( + fundingSource, + ['keys', 'otherMsaKeys', 'thirdMsaKeys', 'providerKeys', 'otherProviderKeys'], + 2n * DOLLARS + ); + + const schema = { + type: 'record', + name: 'Post', + fields: [ + { name: 'title', type: { name: 'Title', type: 'string' } }, + { name: 'content', type: { name: 'Content', type: 'string' } }, + { name: 'fromId', type: { name: 'DSNPId', type: 'fixed', size: 8 } }, + { name: 'objectId', type: 'DSNPId' }, + ], + }; + + let msaCreatedEvent1, msaCreatedEvent2, msaCreatedEvent3; + [{ target: msaCreatedEvent1 }, { target: msaCreatedEvent2 }, { target: msaCreatedEvent3 }, schemaId, schemaId2] = + await Promise.all([ + ExtrinsicHelper.createMsa(keys).fundAndSend(fundingSource), + ExtrinsicHelper.createMsa(otherMsaKeys).fundAndSend(fundingSource), + ExtrinsicHelper.createMsa(thirdMsaKeys).fundAndSend(fundingSource), + ExtrinsicHelper.getOrCreateSchemaV3(fundingSource, schema, 'AvroBinary', 'OnChain', [], 'test.grantDelegation'), + ExtrinsicHelper.getOrCreateSchemaV3( + fundingSource, + schema, + 'AvroBinary', + 'OnChain', + [], + 'test.grantDelegationSecond' + ), + ]); + msaId = msaCreatedEvent1!.data.msaId; + otherMsaId = msaCreatedEvent2!.data.msaId; + thirdMsaId = msaCreatedEvent3!.data.msaId; + + [providerId, otherProviderId] = await Promise.all([ + createMsaAndProvider(fundingSource, providerKeys, 'MyPoster'), + createMsaAndProvider(fundingSource, otherProviderKeys, 'MyPoster2'), + ]); + assert.notEqual(providerId, undefined, 'setup should return a Provider Id for Provider 1'); + assert.notEqual(otherProviderId, undefined, 'setup should return a Provider Id for Provider 2'); + // Make sure we are finalized before all the tests + await ExtrinsicHelper.waitForFinalization(); + }); + + it('should fail to grant delegation if payload not signed by delegator (AddProviderSignatureVerificationFailed)', async function () { + const payload = await generateDelegationPayload({ + authorizedMsaId: providerId, + schemaIds: [schemaId], + }); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + + const grantDelegationOp = ExtrinsicHelper.grantDelegation( + keys, + providerKeys, + signPayloadSr25519(providerKeys, addProviderData), + payload + ); + await assert.rejects(grantDelegationOp.fundAndSend(fundingSource), { + name: 'AddProviderSignatureVerificationFailed', + }); + }); + + it('should fail to delegate to self (InvalidSelfProvider)', async function () { + const payload = await generateDelegationPayload({ + authorizedMsaId: providerId, + schemaIds: [schemaId], + }); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + + const grantDelegationOp = ExtrinsicHelper.grantDelegation( + providerKeys, + providerKeys, + signPayloadSr25519(providerKeys, addProviderData), + payload + ); + await assert.rejects(grantDelegationOp.fundAndSend(fundingSource), { name: 'InvalidSelfProvider' }); + }); + + it('should fail to grant delegation to an MSA that is not a registered provider (ProviderNotRegistered)', async function () { + const payload = await generateDelegationPayload({ + authorizedMsaId: otherMsaId, + schemaIds: [schemaId], + }); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + + const grantDelegationOp = ExtrinsicHelper.grantDelegation( + keys, + otherMsaKeys, + signPayloadSr25519(keys, addProviderData), + payload + ); + await assert.rejects(grantDelegationOp.fundAndSend(fundingSource), { name: 'ProviderNotRegistered' }); + }); + + it('should fail to grant delegation if ID in payload does not match origin (UnauthorizedDelegator)', async function () { + const payload = await generateDelegationPayload({ + authorizedMsaId: otherMsaId, + schemaIds: [schemaId], + }); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + + const grantDelegationOp = ExtrinsicHelper.grantDelegation( + keys, + providerKeys, + signPayloadSr25519(keys, addProviderData), + payload + ); + await assert.rejects(grantDelegationOp.fundAndSend(fundingSource), { name: 'UnauthorizedDelegator' }); + }); + + it('should grant a delegation to a provider', async function () { + const payload = await generateDelegationPayload({ + authorizedMsaId: providerId, + schemaIds: [schemaId], + }); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + + const grantDelegationOp = ExtrinsicHelper.grantDelegation( + keys, + providerKeys, + signPayloadSr25519(keys, addProviderData), + payload + ); + const { target: grantDelegationEvent } = await grantDelegationOp.fundAndSend(fundingSource); + assert.notEqual(grantDelegationEvent, undefined, 'should have returned DelegationGranted event'); + assert.deepEqual(grantDelegationEvent?.data.providerId, providerId, 'provider IDs should match'); + assert.deepEqual(grantDelegationEvent?.data.delegatorId, msaId, 'delegator IDs should match'); + }); + + it('initial granted schemas should be correct', async function () { + const schemaGrants = await ExtrinsicHelper.apiPromise.rpc.msa.grantedSchemaIdsByMsaId(msaId, providerId); + assert.equal(schemaGrants.isSome, true); + const schemaIds = schemaGrants + .unwrap() + .filter((grant) => grant.revoked_at.toBigInt() === 0n) + .map((grant) => grant.schema_id.toNumber()); + const expectedSchemaIds = [schemaId.toNumber()]; + assert.deepStrictEqual(schemaIds, expectedSchemaIds, 'granted schemas should equal initial set'); + }); + + it('should grant additional schema permissions', async function () { + const payload = await generateDelegationPayload({ + authorizedMsaId: providerId, + schemaIds: [schemaId, schemaId2], + }); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + + const grantDelegationOp = ExtrinsicHelper.grantDelegation( + keys, + providerKeys, + signPayloadSr25519(keys, addProviderData), + payload + ); + const { target: grantDelegationEvent } = await grantDelegationOp.fundAndSend(fundingSource); + assert.notEqual(grantDelegationEvent, undefined, 'should have returned DelegationGranted event'); + assert.deepEqual(grantDelegationEvent?.data.providerId, providerId, 'provider IDs should match'); + assert.deepEqual(grantDelegationEvent?.data.delegatorId, msaId, 'delegator IDs should match'); + const grants = await ExtrinsicHelper.apiPromise.rpc.msa.grantedSchemaIdsByMsaId(msaId, providerId); + const grantedSchemaIds = grants + .unwrap() + .filter((grant) => grant.revoked_at.toBigInt() === 0n) + .map((grant) => grant.schema_id.toNumber()); + const expectedSchemaIds = [schemaId.toNumber(), schemaId2.toNumber()]; + assert.deepStrictEqual(grantedSchemaIds, expectedSchemaIds); + }); + + it('should get all delegations and grants', async function () { + const payload = await generateDelegationPayload({ + authorizedMsaId: providerId, + schemaIds: [schemaId, schemaId2], + }); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + const grantDelegationOp = ExtrinsicHelper.grantDelegation( + thirdMsaKeys, + providerKeys, + signPayloadSr25519(thirdMsaKeys, addProviderData), + payload + ); + const { target: grantDelegationEvent } = await grantDelegationOp.fundAndSend(fundingSource); + assert.notEqual(grantDelegationEvent, undefined, 'should have returned DelegationGranted event'); + + const payload2 = await generateDelegationPayload({ + authorizedMsaId: otherProviderId, + schemaIds: [schemaId, schemaId2], + }); + const addProviderData2 = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload2); + const grantDelegationOp2 = ExtrinsicHelper.grantDelegation( + thirdMsaKeys, + otherProviderKeys, + signPayloadSr25519(thirdMsaKeys, addProviderData2), + payload2 + ); + const { target: grantDelegationEvent2 } = await grantDelegationOp2.fundAndSend(fundingSource); + assert.notEqual(grantDelegationEvent2, undefined, 'should have returned DelegationGranted event'); + + const grants = await ExtrinsicHelper.apiPromise.rpc.msa.getAllGrantedDelegationsByMsaId(thirdMsaId); + assert.deepStrictEqual(grants.length, 2); + const expectedProviderIds = [providerId.toNumber(), otherProviderId.toNumber()]; + assert(expectedProviderIds.indexOf(grants[0].provider_id.toNumber()) !== -1); + assert(expectedProviderIds.indexOf(grants[1].provider_id.toNumber()) !== -1); + }); +}); diff --git a/e2e/scenarios/grantDelegationRevoke.test.ts b/e2e/scenarios/grantDelegationRevoke.test.ts new file mode 100644 index 0000000000..b28be1109d --- /dev/null +++ b/e2e/scenarios/grantDelegationRevoke.test.ts @@ -0,0 +1,248 @@ +import '@frequency-chain/api-augment'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { u16, u64 } from '@polkadot/types'; +import assert from 'assert'; +import { ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { + DOLLARS, + createAndFundKeypair, + createAndFundKeypairs, + createKeys, + createMsaAndProvider, + generateDelegationPayload, + getBlockNumber, + signPayloadSr25519, +} from '../scaffolding/helpers'; +import { SchemaGrantResponse } from '@frequency-chain/api-augment/interfaces'; +import { getFundingSource } from '../scaffolding/funding'; + +const fundingSource = getFundingSource(import.meta.url); + +describe('Delegation Scenario Tests: Revocation', function () { + let keys: KeyringPair; + let revokeKeys: KeyringPair; + let providerKeys: KeyringPair; + let otherProviderKeys: KeyringPair; + let schemaId: u16; + let providerId: u64; + let otherProviderId: u64; + let msaId: u64; + + before(async function () { + // Fund all the different keys + [keys, revokeKeys, providerKeys, otherProviderKeys] = await createAndFundKeypairs( + fundingSource, + ['keys', 'revokeKeys', 'providerKeys', 'otherProviderKeys'], + 2n * DOLLARS + ); + + const schema = { + type: 'record', + name: 'Post', + fields: [ + { name: 'title', type: { name: 'Title', type: 'string' } }, + { name: 'content', type: { name: 'Content', type: 'string' } }, + { name: 'fromId', type: { name: 'DSNPId', type: 'fixed', size: 8 } }, + { name: 'objectId', type: 'DSNPId' }, + ], + }; + + let msaCreatedEvent1; + [{ target: msaCreatedEvent1 }, schemaId] = await Promise.all([ + ExtrinsicHelper.createMsa(keys).fundAndSend(fundingSource), + ExtrinsicHelper.getOrCreateSchemaV3(fundingSource, schema, 'AvroBinary', 'OnChain', [], 'test.grantDelegation'), + ]); + msaId = msaCreatedEvent1!.data.msaId; + + [providerId, otherProviderId] = await Promise.all([ + createMsaAndProvider(fundingSource, providerKeys, 'MyPoster'), + createMsaAndProvider(fundingSource, otherProviderKeys, 'MyPoster2'), + ]); + assert.notEqual(providerId, undefined, 'setup should return a Provider Id for Provider 1'); + assert.notEqual(otherProviderId, undefined, 'setup should return a Provider Id for Provider 2'); + + // Make sure we are finalized before all the tests + await ExtrinsicHelper.waitForFinalization(); + }); + + it('should fail to revoke a delegation if no MSA exists (InvalidMsaKey)', async function () { + const nonMsaKeys = await createAndFundKeypair(fundingSource); + const op = ExtrinsicHelper.revokeDelegationByDelegator(nonMsaKeys, providerId); + await assert.rejects(op.signAndSend('current'), { name: 'RpcError', message: /Custom error: 1$/ }); + }); + + describe('revocation path', function () { + before(async function () { + // Create Delegation + const payload = await generateDelegationPayload({ + authorizedMsaId: providerId, + schemaIds: [schemaId], + }); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + + const grantDelegationOp = ExtrinsicHelper.grantDelegation( + keys, + providerKeys, + signPayloadSr25519(keys, addProviderData), + payload + ); + const { target: grantDelegationEvent } = await grantDelegationOp.fundAndSend(fundingSource, false); + assert.notEqual(grantDelegationEvent, undefined, 'should have returned DelegationGranted event'); + }); + + it('should revoke a delegation by delegator', async function () { + // Revoke Delegation + const revokeDelegationOp = ExtrinsicHelper.revokeDelegationByDelegator(keys, providerId); + const { target: revokeDelegationEvent } = await revokeDelegationOp.signAndSend(); + assert.notEqual(revokeDelegationEvent, undefined, 'should have returned DelegationRevoked event'); + assert.deepEqual(revokeDelegationEvent?.data.providerId, providerId, 'provider ids should be equal'); + assert.deepEqual(revokeDelegationEvent?.data.delegatorId, msaId, 'delegator ids should be equal'); + const delegation = await ExtrinsicHelper.apiPromise.query.msa.delegatorAndProviderToDelegation(msaId, providerId); + assert(delegation.isSome); + assert.notEqual(delegation.unwrap().revokedAt.toNumber(), 0, 'delegation revokedAt should not be zero'); + }); + + it('should fail to revoke a delegation that has already been revoked (InvalidDelegation)', async function () { + const op = ExtrinsicHelper.revokeDelegationByDelegator(keys, providerId); + await assert.rejects(op.signAndSend('current'), { name: 'RpcError', message: /Custom error: 0$/ }); + }); + + it('should fail to revoke delegation where no delegation exists (DelegationNotFound)', async function () { + const op = ExtrinsicHelper.revokeDelegationByDelegator(keys, otherProviderId); + await assert.rejects(op.signAndSend('current'), { name: 'RpcError', message: /Custom error: 0$/ }); + }); + }); + + describe('Successful revocation', function () { + let revokeMsaId: u64 | undefined; + let revokedAtBlock: number; + + before(async function () { + const payload = await generateDelegationPayload({ authorizedMsaId: providerId, schemaIds: [schemaId] }); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + const op = ExtrinsicHelper.createSponsoredAccountWithDelegation( + revokeKeys, + providerKeys, + signPayloadSr25519(revokeKeys, addProviderData), + payload + ); + const { target: msaEvent } = await op.fundAndSend(fundingSource, false); + revokeMsaId = msaEvent?.data.msaId; + assert.notEqual(revokeMsaId, undefined, 'should have returned an MSA'); + }); + + it('schema permissions revoked block of delegation should be zero', async function () { + const delegationsResponse = await ExtrinsicHelper.apiPromise.rpc.msa.grantedSchemaIdsByMsaId( + revokeMsaId, + providerId + ); + assert(delegationsResponse.isSome); + const delegations: SchemaGrantResponse[] = delegationsResponse.unwrap().toArray(); + delegations.forEach((delegation) => { + assert(delegation.revoked_at.toBigInt() == 0n); + }); + }); + + it('should revoke a delegation by provider', async function () { + const op = ExtrinsicHelper.revokeDelegationByProvider(revokeMsaId as u64, providerKeys); + const { target: revokeEvent } = await op.signAndSend(); + assert.notEqual(revokeEvent, undefined, 'should have returned a DelegationRevoked event'); + assert.deepEqual(revokeEvent?.data.delegatorId, revokeMsaId, 'delegator ids should match'); + assert.deepEqual(revokeEvent?.data.providerId, providerId, 'provider ids should match'); + revokedAtBlock = await getBlockNumber(); + }); + + it('revoked delegation should be reflected in all previously-granted schema permissions', async function () { + // Make a block first to make sure the state has rolled to the next block + const currentBlock = await getBlockNumber(); + ExtrinsicHelper.runToBlock(currentBlock + 1); + const delegationsResponse = await ExtrinsicHelper.apiPromise.rpc.msa.grantedSchemaIdsByMsaId( + revokeMsaId, + providerId + ); + assert(delegationsResponse.isSome); + const delegations: SchemaGrantResponse[] = delegationsResponse.unwrap().toArray(); + delegations.forEach((delegation) => { + const diff = delegation.revoked_at.toNumber() - revokedAtBlock; + // Due to parallelization, this could be off by a few blocks + assert(Math.abs(Number(diff.toString())) < 20); + }); + }); + + it('should re-grant a previously revoked delegation', async function () { + const delegatorKeys = createKeys(); + const payload = await generateDelegationPayload({ authorizedMsaId: providerId, schemaIds: [schemaId] }); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + const op = ExtrinsicHelper.createSponsoredAccountWithDelegation( + delegatorKeys, + providerKeys, + signPayloadSr25519(delegatorKeys, addProviderData), + payload + ); + + const { target: msaEvent } = await op.fundAndSend(fundingSource, false); + const newMsaId = msaEvent?.data.msaId; + assert.notEqual(newMsaId, undefined, 'should have returned an MSA'); + await assert.doesNotReject( + ExtrinsicHelper.revokeDelegationByProvider(newMsaId!, providerKeys).signAndSend(undefined, undefined, false) + ); + + await assert.doesNotReject( + ExtrinsicHelper.grantDelegation( + delegatorKeys, + providerKeys, + signPayloadSr25519(delegatorKeys, addProviderData), + payload + ).signAndSend() + ); + + const delegation = await ExtrinsicHelper.apiPromise.query.msa.delegatorAndProviderToDelegation( + newMsaId!, + providerId + ); + + assert(delegation.isSome, 'delegation should exist'); + assert.equal(delegation.unwrap().revokedAt.toNumber(), 0, 'delegation revokedAt should be zero'); + }); + + it('should revoke a delegation by delegator and retire msa', async function () { + const delegatorKeys = createKeys(); + const payload = await generateDelegationPayload({ authorizedMsaId: providerId, schemaIds: [schemaId] }); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + const op = ExtrinsicHelper.createSponsoredAccountWithDelegation( + delegatorKeys, + providerKeys, + signPayloadSr25519(delegatorKeys, addProviderData), + payload + ); + const { target: msaEvent } = await op.fundAndSend(fundingSource, false); + const newMsaId = msaEvent?.data.msaId; + assert.notEqual(newMsaId, undefined, 'should have returned an MSA'); + await assert.doesNotReject( + ExtrinsicHelper.revokeDelegationByProvider(newMsaId!, providerKeys).signAndSend(undefined, undefined, false) + ); + + const retireMsaOp = ExtrinsicHelper.retireMsa(delegatorKeys); + const { target: retireMsaEvent } = await retireMsaOp.signAndSend(); + assert.notEqual(retireMsaEvent, undefined, 'should have returned MsaRetired event'); + assert.deepEqual(retireMsaEvent?.data.msaId, newMsaId, 'msaId should be equal'); + }); + + it('should fail to retire msa with any active delegations', async function () { + const delegatorKeys = createKeys(); + const payload = await generateDelegationPayload({ authorizedMsaId: providerId, schemaIds: [schemaId] }); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + const op = ExtrinsicHelper.createSponsoredAccountWithDelegation( + delegatorKeys, + providerKeys, + signPayloadSr25519(delegatorKeys, addProviderData), + payload + ); + const { target: msaEvent } = await op.fundAndSend(fundingSource, false); + const newMsaId = msaEvent?.data.msaId; + assert.notEqual(newMsaId, undefined, 'should have returned an MSA'); + const retireMsaOp = ExtrinsicHelper.retireMsa(delegatorKeys); + await assert.rejects(retireMsaOp.signAndSend('current'), { name: 'RpcError', message: /Custom error: 6$/ }); + }); + }); +}); diff --git a/e2e/scenarios/grantDelegationSponsored.test.ts b/e2e/scenarios/grantDelegationSponsored.test.ts new file mode 100644 index 0000000000..01604ccb5a --- /dev/null +++ b/e2e/scenarios/grantDelegationSponsored.test.ts @@ -0,0 +1,184 @@ +import '@frequency-chain/api-augment'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { u16, u64 } from '@polkadot/types'; +import assert from 'assert'; +import { AddProviderPayload, Extrinsic, ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { + DOLLARS, + createAndFundKeypairs, + createMsaAndProvider, + generateDelegationPayload, + signPayloadSr25519, +} from '../scaffolding/helpers'; +import { getFundingSource } from '../scaffolding/funding'; + +const fundingSource = getFundingSource(import.meta.url); + +describe('Delegation Scenario Tests createSponsoredAccountWithDelegation', function () { + let keys: KeyringPair; + let sponsorKeys: KeyringPair; + let otherMsaKeys: KeyringPair; + let noMsaKeys: KeyringPair; + let providerKeys: KeyringPair; + let otherProviderKeys: KeyringPair; + let schemaId: u16; + let providerId: u64; + let otherProviderId: u64; + let otherMsaId: u64; + let op: Extrinsic; + let defaultPayload: AddProviderPayload; + + before(async function () { + // Fund all the different keys + [noMsaKeys, sponsorKeys, keys, otherMsaKeys, providerKeys, otherProviderKeys] = await createAndFundKeypairs( + fundingSource, + ['noMsaKeys', 'sponsorKeys', 'keys', 'otherMsaKeys', 'providerKeys', 'otherProviderKeys'], + 1n * DOLLARS + ); + + const schema = { + type: 'record', + name: 'Post', + fields: [ + { name: 'title', type: { name: 'Title', type: 'string' } }, + { name: 'content', type: { name: 'Content', type: 'string' } }, + { name: 'fromId', type: { name: 'DSNPId', type: 'fixed', size: 8 } }, + { name: 'objectId', type: 'DSNPId' }, + ], + }; + + let msaCreatedEvent1, msaCreatedEvent2; + [{ target: msaCreatedEvent1 }, { target: msaCreatedEvent2 }, schemaId] = await Promise.all([ + ExtrinsicHelper.createMsa(keys).signAndSend(), + ExtrinsicHelper.createMsa(otherMsaKeys).signAndSend(), + ExtrinsicHelper.getOrCreateSchemaV3(fundingSource, schema, 'AvroBinary', 'OnChain', [], 'test.grantDelegation'), + ]); + + otherMsaId = msaCreatedEvent2!.data.msaId; + + [providerId, otherProviderId] = await Promise.all([ + createMsaAndProvider(fundingSource, providerKeys, 'MyPoster'), + createMsaAndProvider(fundingSource, otherProviderKeys, 'MyPoster2'), + ]); + assert.notEqual(providerId, undefined, 'setup should return a Provider Id for Provider 1'); + assert.notEqual(otherProviderId, undefined, 'setup should return a Provider Id for Provider 2'); + + defaultPayload = { + authorizedMsaId: providerId, + schemaIds: [schemaId], + }; + // Make sure we are finalized before all the tests + await ExtrinsicHelper.waitForFinalization(); + }); + + it("should fail to create delegated account if provider ids don't match (UnauthorizedProvider)", async function () { + const payload = await generateDelegationPayload({ ...defaultPayload, authorizedMsaId: otherProviderId }); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + + op = ExtrinsicHelper.createSponsoredAccountWithDelegation( + sponsorKeys, + providerKeys, + signPayloadSr25519(sponsorKeys, addProviderData), + payload + ); + await assert.rejects(op.fundAndSend(fundingSource), { name: 'UnauthorizedProvider' }); + }); + + it('should fail to create delegated account if payload signature cannot be verified (InvalidSignature)', async function () { + const payload = await generateDelegationPayload({ ...defaultPayload, schemaIds: [] }); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + + op = ExtrinsicHelper.createSponsoredAccountWithDelegation( + sponsorKeys, + providerKeys, + signPayloadSr25519(sponsorKeys, addProviderData), + { ...payload, ...defaultPayload } + ); + await assert.rejects(op.fundAndSend(fundingSource), { name: 'InvalidSignature' }); + }); + + it('should fail to create delegated account if no MSA exists for origin (NoKeyExists)', async function () { + const payload = await generateDelegationPayload(defaultPayload); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + + op = ExtrinsicHelper.createSponsoredAccountWithDelegation( + sponsorKeys, + noMsaKeys, + signPayloadSr25519(sponsorKeys, addProviderData), + payload + ); + await assert.rejects(op.fundAndSend(fundingSource), { name: 'NoKeyExists' }); + }); + + it('should fail to create delegated account if MSA already exists for delegator (KeyAlreadyRegistered)', async function () { + const payload = await generateDelegationPayload(defaultPayload); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + + op = ExtrinsicHelper.createSponsoredAccountWithDelegation( + keys, + providerKeys, + signPayloadSr25519(keys, addProviderData), + payload + ); + await assert.rejects(op.fundAndSend(fundingSource), { name: 'KeyAlreadyRegistered' }); + }); + + it('should fail to create delegated account if provider is not registered (ProviderNotRegistered)', async function () { + const payload = await generateDelegationPayload({ ...defaultPayload, authorizedMsaId: otherMsaId }); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + + op = ExtrinsicHelper.createSponsoredAccountWithDelegation( + keys, + otherMsaKeys, + signPayloadSr25519(keys, addProviderData), + payload + ); + await assert.rejects(op.fundAndSend(fundingSource), { name: 'ProviderNotRegistered' }); + }); + + it('should fail to create delegated account if provider if payload proof is too far in the future (ProofNotYetValid)', async function () { + const payload = await generateDelegationPayload(defaultPayload, 999); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + + op = ExtrinsicHelper.createSponsoredAccountWithDelegation( + sponsorKeys, + providerKeys, + signPayloadSr25519(sponsorKeys, addProviderData), + payload + ); + await assert.rejects(op.fundAndSend(fundingSource), { name: 'ProofNotYetValid' }); + }); + + it('should fail to create delegated account if provider if payload proof has expired (ProofHasExpired))', async function () { + const payload = await generateDelegationPayload(defaultPayload, -1); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + + op = ExtrinsicHelper.createSponsoredAccountWithDelegation( + sponsorKeys, + providerKeys, + signPayloadSr25519(sponsorKeys, addProviderData), + payload + ); + await assert.rejects(op.fundAndSend(fundingSource), { name: 'ProofHasExpired' }); + }); + + it('should successfully create a delegated account', async function () { + const payload = await generateDelegationPayload(defaultPayload); + const addProviderData = ExtrinsicHelper.api.registry.createType('PalletMsaAddProvider', payload); + + op = ExtrinsicHelper.createSponsoredAccountWithDelegation( + sponsorKeys, + providerKeys, + signPayloadSr25519(sponsorKeys, addProviderData), + payload + ); + const { target: event, eventMap } = await op.fundAndSend(fundingSource); + assert.notEqual(event, undefined, 'should have returned MsaCreated event'); + assert.notEqual(eventMap['msa.DelegationGranted'], undefined, 'should have returned DelegationGranted event'); + await assert.rejects( + op.fundAndSend(fundingSource), + { name: 'SignatureAlreadySubmitted' }, + 'should reject double submission' + ); + }); +}); diff --git a/e2e/schemas/createSchema.test.ts b/e2e/schemas/createSchema.test.ts new file mode 100644 index 0000000000..7de42c1e2f --- /dev/null +++ b/e2e/schemas/createSchema.test.ts @@ -0,0 +1,153 @@ +import '@frequency-chain/api-augment'; + +import assert from 'assert'; + +import { AVRO_GRAPH_CHANGE } from './fixtures/avroGraphChangeSchemaType'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { + createKeys, + createAndFundKeypair, + assertExtrinsicSuccess, + generateSchemaPartialName, +} from '../scaffolding/helpers'; +import { getFundingSource } from '../scaffolding/funding'; + +const fundingSource = getFundingSource(import.meta.url); + +describe('#createSchema', function () { + let keys: KeyringPair; + let accountWithNoFunds: KeyringPair; + + before(async function () { + keys = await createAndFundKeypair(fundingSource, 50_000_000n); + accountWithNoFunds = createKeys(); + }); + + it('should fail if account does not have enough tokens v3', async function () { + await assert.rejects( + ExtrinsicHelper.createSchemaV3( + accountWithNoFunds, + AVRO_GRAPH_CHANGE, + 'AvroBinary', + 'OnChain', + [], + 'unk.random_name' + ).signAndSend('current'), + { + name: 'RpcError', + message: /Inability to pay some fees/, + } + ); + }); + + it('should fail to create invalid schema v3', async function () { + const f = ExtrinsicHelper.createSchemaV3(keys, [1000, 3], 'AvroBinary', 'OnChain', [], 'unk.random_name'); + + await assert.rejects(f.fundAndSend(fundingSource), { + name: 'InvalidSchema', + }); + }); + + it('should fail to create schema less than minimum size v3', async function () { + const f = ExtrinsicHelper.createSchemaV3(keys, {}, 'AvroBinary', 'OnChain', [], 'unk.random_name'); + await assert.rejects(f.fundAndSend(fundingSource), { + name: 'LessThanMinSchemaModelBytes', + }); + }); + + it('should fail to create schema greater than maximum size v3', async function () { + const maxBytes = (await ExtrinsicHelper.getSchemaMaxBytes()).toNumber(); + + // Create a schema whose JSON representation is exactly 1 byte larger than the max allowed + const hugeSchema = { + type: 'record', + fields: [], + }; + const hugeSize = JSON.stringify(hugeSchema).length; + const sizeToFill = maxBytes - hugeSize - ',"name":""'.length + 1; + hugeSchema['name'] = Array.from(Array(sizeToFill).keys()) + .map(() => 'a') + .join(''); + + const f = ExtrinsicHelper.createSchemaV3(keys, hugeSchema, 'AvroBinary', 'OnChain', [], 'unk.random_name'); + await assert.rejects(f.fundAndSend(fundingSource), { + name: 'ExceedsMaxSchemaModelBytes', + }); + }); + + it('should successfully create a schema v3 with name', async function () { + const schemaName = 'e-e.' + generateSchemaPartialName(20); + const f = ExtrinsicHelper.createSchemaV3(keys, AVRO_GRAPH_CHANGE, 'AvroBinary', 'OnChain', [], schemaName); + const { target: createSchemaEvent, eventMap } = await f.fundAndSend(fundingSource); + + assertExtrinsicSuccess(eventMap); + assert.notEqual(createSchemaEvent, undefined); + assert.notEqual(eventMap['schemas.SchemaNameCreated'], undefined); + }); + + it('should successfully create a schema v3 without a name', async function () { + const f = ExtrinsicHelper.createSchemaV3(keys, AVRO_GRAPH_CHANGE, 'AvroBinary', 'OnChain', [], null); + const { target: createSchemaEvent, eventMap } = await f.fundAndSend(fundingSource); + + assertExtrinsicSuccess(eventMap); + assert.notEqual(createSchemaEvent, undefined); + assert.equal(eventMap['schemas.SchemaNameCreated'], undefined); + }); + + it('should fail to create schema with invalid character in name v3', async function () { + const f = ExtrinsicHelper.createSchemaV3(keys, AVRO_GRAPH_CHANGE, 'AvroBinary', 'OnChain', [], 'test2.invalid'); + await assert.rejects(f.fundAndSend(fundingSource), { + name: 'InvalidSchemaNameCharacters', + }); + }); + + it('should fail to create schema with invalid name structure v3', async function () { + const f = ExtrinsicHelper.createSchemaV3(keys, AVRO_GRAPH_CHANGE, 'AvroBinary', 'OnChain', [], 'test'); + // InvalidSchemaNameStructure is the rejection, but network differences means that it cannot be tested everywhere + await assert.rejects(f.fundAndSend(fundingSource)); + }); + + it('should fail to create schema with invalid name encoding v3', async function () { + const f = ExtrinsicHelper.createSchemaV3(keys, AVRO_GRAPH_CHANGE, 'AvroBinary', 'OnChain', [], 'ñòò.ò'); + await assert.rejects(f.fundAndSend(fundingSource), { + name: 'InvalidSchemaNameEncoding', + }); + }); + + it('should fail to create schema with invalid namespace length v3', async function () { + const f = ExtrinsicHelper.createSchemaV3(keys, AVRO_GRAPH_CHANGE, 'AvroBinary', 'OnChain', [], 'a.b'); + await assert.rejects(f.fundAndSend(fundingSource), { + name: 'InvalidSchemaNamespaceLength', + }); + }); + + it('get version rpc should return all schemas using the same name', async function () { + const namespace = generateSchemaPartialName(20); + const aliceSchemaName = namespace + '.alice'; + const bobSchemaName = namespace + '.bob'; + const f = ExtrinsicHelper.createSchemaV3(keys, AVRO_GRAPH_CHANGE, 'AvroBinary', 'OnChain', [], aliceSchemaName); + const { target: createSchemaEvent, eventMap } = await f.fundAndSend(fundingSource); + + assertExtrinsicSuccess(eventMap); + assert.notEqual(createSchemaEvent, undefined); + assert.notEqual(eventMap['schemas.SchemaNameCreated'], undefined); + + const f2 = ExtrinsicHelper.createSchemaV3(keys, AVRO_GRAPH_CHANGE, 'AvroBinary', 'OnChain', [], bobSchemaName); + const { target: createSchemaEvent2, eventMap: eventMap2 } = await f2.fundAndSend(fundingSource); + + assertExtrinsicSuccess(eventMap2); + assert.notEqual(createSchemaEvent2, undefined); + assert.notEqual(eventMap2['schemas.SchemaNameCreated'], undefined); + + // Make sure we are finalized before trying to get from the RPC + await ExtrinsicHelper.waitForFinalization(); + + const versions = await ExtrinsicHelper.apiPromise.rpc.schemas.getVersions(namespace); + assert(versions.isSome); + const versions_response_value = versions.unwrap(); + assert.equal(versions_response_value.length, 2); + assert(versions_response_value.toArray().some((v) => v.schema_name == aliceSchemaName)); + assert(versions_response_value.toArray().some((v) => v.schema_name == bobSchemaName)); + }); +}); diff --git a/e2e/schemas/fixtures/avroGraphChangeSchemaType.ts b/e2e/schemas/fixtures/avroGraphChangeSchemaType.ts new file mode 100644 index 0000000000..52154a7b37 --- /dev/null +++ b/e2e/schemas/fixtures/avroGraphChangeSchemaType.ts @@ -0,0 +1,27 @@ +export const AVRO_GRAPH_CHANGE = { + type: 'record', + name: 'GraphChange', + fields: [ + // When converting from Frequency Schema Message to DSNP Announcement, assume announcementType=1 + { + name: 'changeType', + type: { + name: 'ChangeTypeEnum', + type: 'enum', + symbols: ['Unfollow', 'Follow'], // Encoded as int + }, + }, + { + name: 'fromId', + type: { + name: 'DSNPId', + type: 'fixed', + size: 8, + }, + }, + { + name: 'objectId', + type: 'DSNPId', + }, + ], +}; diff --git a/e2e/schemas/fixtures/parquetBroadcastSchemaType.ts b/e2e/schemas/fixtures/parquetBroadcastSchemaType.ts new file mode 100644 index 0000000000..66bdb28558 --- /dev/null +++ b/e2e/schemas/fixtures/parquetBroadcastSchemaType.ts @@ -0,0 +1,36 @@ +export const PARQUET_BROADCAST = [ + { + name: 'announcementType', + column_type: { + INTEGER: { + bit_width: 32, + sign: true, + }, + }, + compression: 'GZIP', + bloom_filter: false, + }, + { + name: 'contentHash', + column_type: 'BYTE_ARRAY', + compression: 'GZIP', + bloom_filter: true, + }, + { + name: 'fromId', + column_type: { + INTEGER: { + bit_width: 64, + sign: false, + }, + }, + compression: 'GZIP', + bloom_filter: true, + }, + { + name: 'url', + column_type: 'STRING', + compression: 'GZIP', + bloom_filter: false, + }, +]; diff --git a/e2e/signed-extensions/checkMetadataHash.test.ts b/e2e/signed-extensions/checkMetadataHash.test.ts new file mode 100644 index 0000000000..7c554db4fd --- /dev/null +++ b/e2e/signed-extensions/checkMetadataHash.test.ts @@ -0,0 +1,59 @@ +import '@frequency-chain/api-augment'; + +import { KeyringPair } from '@polkadot/keyring/types'; +import { merkleizeMetadata } from '@polkadot-api/merkleize-metadata'; +import { Extrinsic, ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { + createKeys, + createAndFundKeypair, + assertExtrinsicSuccess, + generateSchemaPartialName, +} from '../scaffolding/helpers'; +import { getFundingSource } from '../scaffolding/funding'; +import { u8aToHex } from '@polkadot/util'; +import { getUnifiedAddress } from '@frequency-chain/ethereum-utils'; + +const fundingSource = getFundingSource(import.meta.url); + +// This is skipped as it requires the e2e tests to be run +// against a Frequency build that has the metadata-hash feature +// enabled. That feature is a large increase in compile time however. + +// eslint-disable-next-line mocha/no-pending-tests +describe.skip('Check Metadata Hash', function () { + let keys: KeyringPair; + let accountWithNoFunds: KeyringPair; + + before(async function () { + keys = await createAndFundKeypair(fundingSource, 10_000_000n); + accountWithNoFunds = createKeys(); + }); + + it('should successfully transfer funds', async function () { + const tx = ExtrinsicHelper.api.tx.balances.transferKeepAlive(getUnifiedAddress(accountWithNoFunds), 5_000_000n); + + const api = ExtrinsicHelper.apiPromise; + const metadata = await api.call.metadata.metadataAtVersion(15); + const { specName, specVersion } = api.runtimeVersion; + const merkleInfo = { + base58Prefix: api.consts.system.ss58Prefix.toNumber(), + decimals: api.registry.chainDecimals[0], + specName: specName.toString(), + specVersion: specVersion.toNumber(), + tokenSymbol: api.registry.chainTokens[0], + }; + + const merkleizedMetadata = merkleizeMetadata(metadata.toHex(), merkleInfo); + const metadataHash = u8aToHex(merkleizedMetadata.digest()); + + const extrinsic = new Extrinsic(() => tx, keys); + + const { eventMap } = await extrinsic.signAndSend('auto', { + withSignedTransaction: true, + mode: 1, + metadataHash, + }); + + assertExtrinsicSuccess(eventMap); + }); +}); diff --git a/e2e/stateful-pallet-storage/fixtures/itemizedSchemaType.ts b/e2e/stateful-pallet-storage/fixtures/itemizedSchemaType.ts new file mode 100644 index 0000000000..84becf1568 --- /dev/null +++ b/e2e/stateful-pallet-storage/fixtures/itemizedSchemaType.ts @@ -0,0 +1,28 @@ +export const AVRO_CHAT_MESSAGE = { + type: 'record', + name: 'ChatMessage', + fields: [ + { + name: 'fromId', + type: { + name: 'DSNPId', + type: 'fixed', + size: 8, + }, + }, + { + name: 'message', + type: 'string', + }, + { + name: 'inReplyTo', + type: ['null', 'DSNPId'], + default: null, + }, + { + name: 'url', + type: ['null', 'string'], + default: null, + }, + ], +}; diff --git a/e2e/stateful-pallet-storage/handleItemized.test.ts b/e2e/stateful-pallet-storage/handleItemized.test.ts new file mode 100644 index 0000000000..f68b00d6ab --- /dev/null +++ b/e2e/stateful-pallet-storage/handleItemized.test.ts @@ -0,0 +1,304 @@ +// E2E tests for pallets/stateful-pallet-storage/handleItemized.ts +import '@frequency-chain/api-augment'; +import assert from 'assert'; +import { + DOLLARS, + createDelegatorAndDelegation, + createMsa, + createProviderKeysAndId, + getCurrentItemizedHash, + getOrCreateAvroChatMessageItemizedSchema, + assertExtrinsicSucceededAndFeesPaid, + createAndFundKeypair, +} from '../scaffolding/helpers'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { AVRO_CHAT_MESSAGE } from '../stateful-pallet-storage/fixtures/itemizedSchemaType'; +import { MessageSourceId, SchemaId } from '@frequency-chain/api-augment/interfaces'; +import { Bytes, u16, u64 } from '@polkadot/types'; +import { getFundingSource } from '../scaffolding/funding'; + +const fundingSource = getFundingSource(import.meta.url); + +describe('📗 Stateful Pallet Storage Itemized', function () { + let schemaId_deletable: SchemaId; + let schemaId_unsupported: SchemaId; + let delegatorKeys: KeyringPair; + let msa_id: MessageSourceId; + let providerId: MessageSourceId; + let providerKeys: KeyringPair; + let badMsaId: u64; + + before(async function () { + [ + // Create a provider for the MSA, the provider will be used to grant delegation + [providerKeys, providerId], + // Delegator Keys + delegatorKeys, + schemaId_deletable, + schemaId_unsupported, + ] = await Promise.all([ + createProviderKeysAndId(fundingSource, 2n * DOLLARS), + createAndFundKeypair(fundingSource, 2n * DOLLARS), + getOrCreateAvroChatMessageItemizedSchema(fundingSource), + ExtrinsicHelper.getOrCreateSchemaV3( + fundingSource, + AVRO_CHAT_MESSAGE, + 'AvroBinary', + 'OnChain', + [], + 'test.handleItemizedUnsupported' + ), + ]); + assert.notEqual(providerId, undefined, 'setup should populate providerId'); + assert.notEqual(providerKeys, undefined, 'setup should populate providerKeys'); + + [ + // Create a MSA for the delegator and delegate to the provider + [delegatorKeys, msa_id], + // Create an MSA that is not a provider to be used for testing failure cases + [badMsaId], + ] = await Promise.all([ + createDelegatorAndDelegation( + fundingSource, + schemaId_deletable, + providerId, + providerKeys, + 'sr25519', + delegatorKeys + ), + createMsa(fundingSource), + ]); + assert.notEqual(msa_id, undefined, 'setup should populate msa_id'); + assert.notEqual(badMsaId, undefined, 'setup should populate badMsaId'); + }); + + describe('Itemized Storage Tests 😊/😥', function () { + it('✅ should be able to call applyItemizedAction and apply actions', async function () { + // Add and update actions + const payload_1 = new Bytes(ExtrinsicHelper.api.registry, 'Hello World From Frequency'); + + const add_action = { + Add: payload_1, + }; + + const payload_2 = new Bytes(ExtrinsicHelper.api.registry, 'Hello World Again From Frequency'); + + const update_action = { + Add: payload_2, + }; + + const target_hash = await getCurrentItemizedHash(msa_id, schemaId_deletable); + + const add_actions = [add_action, update_action]; + const itemized_add_result_1 = ExtrinsicHelper.applyItemActions( + providerKeys, + schemaId_deletable, + msa_id, + add_actions, + target_hash + ); + const { target: pageUpdateEvent1, eventMap: chainEvents } = + await itemized_add_result_1.fundAndSend(fundingSource); + assertExtrinsicSucceededAndFeesPaid(chainEvents); + assert.notEqual( + pageUpdateEvent1, + undefined, + 'should have returned a PalletStatefulStorageItemizedActionApplied event' + ); + }); + + it('🛑 should fail call to applyItemizedAction with invalid schemaId', async function () { + const payload_1 = new Bytes(ExtrinsicHelper.api.registry, 'Hello World From Frequency'); + const add_action = { + Add: payload_1, + }; + const add_actions = [add_action]; + const fake_schema_id = new u16(ExtrinsicHelper.api.registry, 65_534); + const itemized_add_result_1 = ExtrinsicHelper.applyItemActions( + delegatorKeys, + fake_schema_id, + msa_id, + add_actions, + 0 + ); + await assert.rejects(itemized_add_result_1.fundAndSend(fundingSource), { + name: 'InvalidSchemaId', + section: 'statefulStorage', + }); + }); + + it('🛑 should fail call to applyItemizedAction with invalid schema location', async function () { + const payload_1 = new Bytes(ExtrinsicHelper.api.registry, 'Hello World From Frequency'); + const add_action = { + Add: payload_1, + }; + const add_actions = [add_action]; + const itemized_add_result_1 = ExtrinsicHelper.applyItemActions( + delegatorKeys, + schemaId_unsupported, + msa_id, + add_actions, + 0 + ); + await assert.rejects(itemized_add_result_1.fundAndSend(fundingSource), { + name: 'SchemaPayloadLocationMismatch', + section: 'statefulStorage', + }); + }); + + it('🛑 should fail call to applyItemizedAction with for un-delegated attempts', async function () { + const payload_1 = new Bytes(ExtrinsicHelper.api.registry, 'Hello World From Frequency'); + const add_action = { + Add: payload_1, + }; + const add_actions = [add_action]; + + const itemized_add_result_1 = ExtrinsicHelper.applyItemActions( + providerKeys, + schemaId_deletable, + badMsaId, + add_actions, + 0 + ); + await assert.rejects(itemized_add_result_1.fundAndSend(fundingSource), { + name: 'UnauthorizedDelegate', + section: 'statefulStorage', + }); + }); + + it('🛑 should fail call to applyItemizedAction for target hash mismatch', async function () { + // Add and update actions + const payload_1 = new Bytes(ExtrinsicHelper.api.registry, 'Hello World From Frequency'); + + const add_action = { + Add: payload_1, + }; + + const payload_2 = new Bytes(ExtrinsicHelper.api.registry, 'Hello World Again From Frequency'); + + const update_action = { + Add: payload_2, + }; + + const add_actions = [add_action, update_action]; + const itemized_add_result_1 = ExtrinsicHelper.applyItemActions( + providerKeys, + schemaId_deletable, + msa_id, + add_actions, + 0 + ); + await assert.rejects(itemized_add_result_1.fundAndSend(fundingSource), { name: 'StalePageState' }); + }); + }); + + describe('Itemized Storage Remove Action Tests', function () { + it('✅ should be able to call applyItemizedAction and apply remove actions', async function () { + let target_hash = await getCurrentItemizedHash(msa_id, schemaId_deletable); + + // Delete action + const idx_1: u16 = new u16(ExtrinsicHelper.api.registry, 1); + const remove_action_1 = { + Delete: idx_1, + }; + + target_hash = await getCurrentItemizedHash(msa_id, schemaId_deletable); + + const remove_actions = [remove_action_1]; + const itemized_remove_result_1 = ExtrinsicHelper.applyItemActions( + providerKeys, + schemaId_deletable, + msa_id, + remove_actions, + target_hash + ); + const { target: pageUpdateEvent2, eventMap: chainEvents2 } = + await itemized_remove_result_1.fundAndSend(fundingSource); + assert.notEqual( + chainEvents2['system.ExtrinsicSuccess'], + undefined, + 'should have returned an ExtrinsicSuccess event' + ); + assert.notEqual(chainEvents2['balances.Withdraw'], undefined, 'should have returned a balances.Withdraw event'); + assert.notEqual(pageUpdateEvent2, undefined, 'should have returned a event'); + }); + + it('🛑 should fail call to remove action with invalid schemaId', async function () { + const idx_1: u16 = new u16(ExtrinsicHelper.api.registry, 1); + const remove_action_1 = { + Delete: idx_1, + }; + const remove_actions = [remove_action_1]; + const fake_schema_id = new u16(ExtrinsicHelper.api.registry, 65_534); + const itemized_remove_result_1 = ExtrinsicHelper.applyItemActions( + delegatorKeys, + fake_schema_id, + msa_id, + remove_actions, + 0 + ); + await assert.rejects(itemized_remove_result_1.fundAndSend(fundingSource), { + name: 'InvalidSchemaId', + section: 'statefulStorage', + }); + }); + + it('🛑 should fail call to remove action with invalid schema location', async function () { + const idx_1: u16 = new u16(ExtrinsicHelper.api.registry, 1); + const remove_action_1 = { + Delete: idx_1, + }; + const remove_actions = [remove_action_1]; + const itemized_remove_result_1 = ExtrinsicHelper.applyItemActions( + delegatorKeys, + schemaId_unsupported, + msa_id, + remove_actions, + 0 + ); + await assert.rejects(itemized_remove_result_1.fundAndSend(fundingSource), { + name: 'SchemaPayloadLocationMismatch', + section: 'statefulStorage', + }); + }); + + it('🛑 should fail call to remove action with invalid msa_id', async function () { + const idx_1: u16 = new u16(ExtrinsicHelper.api.registry, 1); + const remove_action_1 = { + Delete: idx_1, + }; + const remove_actions = [remove_action_1]; + + const itemized_remove_result_1 = ExtrinsicHelper.applyItemActions( + providerKeys, + schemaId_deletable, + badMsaId, + remove_actions, + 0 + ); + await assert.rejects(itemized_remove_result_1.fundAndSend(fundingSource), { + name: 'UnauthorizedDelegate', + section: 'statefulStorage', + }); + }); + + it('🛑 should fail call to remove action with stale state hash', async function () { + const idx_1: u16 = new u16(ExtrinsicHelper.api.registry, 1); + const remove_action = { + Delete: idx_1, + }; + const remove_actions = [remove_action]; + const op = ExtrinsicHelper.applyItemActions(providerKeys, schemaId_deletable, msa_id, remove_actions, 0); + await assert.rejects(op.fundAndSend(fundingSource), { name: 'StalePageState' }); + }); + }); + + describe('Itemized Storage RPC Tests', function () { + it('✅ should be able to call getItemizedStorage and get data for itemized schema', async function () { + const result = await ExtrinsicHelper.getItemizedStorage(msa_id, schemaId_deletable); + assert.notEqual(result.hash, undefined, 'should have returned a hash'); + assert.notEqual(result.size, undefined, 'should have returned a itemized responses'); + }); + }); +}); diff --git a/e2e/stateful-pallet-storage/handlePaginated.test.ts b/e2e/stateful-pallet-storage/handlePaginated.test.ts new file mode 100644 index 0000000000..9a2f6db321 --- /dev/null +++ b/e2e/stateful-pallet-storage/handlePaginated.test.ts @@ -0,0 +1,242 @@ +// E2E tests for pallets/stateful-pallet-storage/handlePaginated.ts +import '@frequency-chain/api-augment'; +import assert from 'assert'; +import { + createProviderKeysAndId, + createDelegatorAndDelegation, + getCurrentPaginatedHash, + createMsa, + DOLLARS, + getOrCreateAvroChatMessagePaginatedSchema, + assertExtrinsicSucceededAndFeesPaid, + createAndFundKeypair, +} from '../scaffolding/helpers'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { AVRO_CHAT_MESSAGE } from './fixtures/itemizedSchemaType'; +import { MessageSourceId, SchemaId } from '@frequency-chain/api-augment/interfaces'; +import { Bytes, u16, u64 } from '@polkadot/types'; +import { getFundingSource } from '../scaffolding/funding'; + +const badSchemaId = 65_534; +const fundingSource = getFundingSource(import.meta.url); + +describe('📗 Stateful Pallet Storage Paginated', function () { + let schemaId: SchemaId; + let schemaId_unsupported: SchemaId; + let delegatorKeys: KeyringPair; + let msa_id: MessageSourceId; + let providerId: MessageSourceId; + let providerKeys: KeyringPair; + let badMsaId: u64; + + before(async function () { + [ + // Create a provider for the MSA, the provider will be used to grant delegation + [providerKeys, providerId], + // Delegator Keys + delegatorKeys, + // Create a schema for Paginated PayloadLocation + schemaId, + // Create non supported schema + schemaId_unsupported, + ] = await Promise.all([ + createProviderKeysAndId(fundingSource, 2n * DOLLARS), + createAndFundKeypair(fundingSource, 2n * DOLLARS), + getOrCreateAvroChatMessagePaginatedSchema(fundingSource), + ExtrinsicHelper.getOrCreateSchemaV3( + fundingSource, + AVRO_CHAT_MESSAGE, + 'AvroBinary', + 'OnChain', + [], + 'test.handlePaginatedUnsupported' + ), + ]); + + assert.notEqual(providerId, undefined, 'setup should populate providerId'); + assert.notEqual(providerKeys, undefined, 'setup should populate providerKeys'); + + [ + // Create a MSA for the delegator and delegate to the provider + [delegatorKeys, msa_id], + // Create an MSA that is not a provider to be used for testing failure cases + [badMsaId], + ] = await Promise.all([ + createDelegatorAndDelegation(fundingSource, schemaId, providerId, providerKeys, 'sr25519', delegatorKeys), + createMsa(fundingSource), + ]); + + assert.notEqual(msa_id, undefined, 'setup should populate msa_id'); + assert.notEqual(badMsaId, undefined, 'setup should populate badMsaId'); + }); + + describe('Paginated Storage Upsert/Remove Tests 😊/😥', function () { + it('should be able to call upsert page and add a page and remove a page via id', async function () { + let page_id = 0; + let target_hash = await getCurrentPaginatedHash(msa_id, schemaId, page_id); + + // Add and update actions + const payload_1 = new Bytes(ExtrinsicHelper.api.registry, 'Hello World From Frequency'); + const paginated_add_result_1 = ExtrinsicHelper.upsertPage( + providerKeys, + schemaId, + msa_id, + page_id, + payload_1, + target_hash + ); + const { target: pageUpdateEvent1, eventMap: chainEvents } = + await paginated_add_result_1.fundAndSend(fundingSource); + assertExtrinsicSucceededAndFeesPaid(chainEvents); + assert.notEqual( + pageUpdateEvent1, + undefined, + 'should have returned a PalletStatefulStoragepaginatedActionApplied event' + ); + + // Add another page + page_id = 1; + target_hash = await getCurrentPaginatedHash(msa_id, schemaId, page_id); + const paginated_add_result_2 = ExtrinsicHelper.upsertPage( + providerKeys, + schemaId, + msa_id, + page_id, + payload_1, + target_hash + ); + const { target: pageUpdateEvent2, eventMap: chainEvents2 } = + await paginated_add_result_2.fundAndSend(fundingSource); + assert.notEqual( + chainEvents2['system.ExtrinsicSuccess'], + undefined, + 'should have returned an ExtrinsicSuccess event' + ); + assert.notEqual( + pageUpdateEvent2, + undefined, + 'should have returned a PalletStatefulStoragepaginatedActionApplied event' + ); + + // Remove the second page + target_hash = await getCurrentPaginatedHash(msa_id, schemaId, page_id); + const paginated_remove_result_1 = ExtrinsicHelper.removePage( + providerKeys, + schemaId, + msa_id, + page_id, + target_hash + ); + const { target: pageRemove, eventMap: chainEvents3 } = await paginated_remove_result_1.fundAndSend(fundingSource); + assert.notEqual( + chainEvents3['system.ExtrinsicSuccess'], + undefined, + 'should have returned an ExtrinsicSuccess event' + ); + assert.notEqual(pageRemove, undefined, 'should have returned a event'); + }); + + it('should fail call to upsert page with invalid schemaId', async function () { + const page_id = 0; + const target_hash = await getCurrentPaginatedHash(msa_id, schemaId, page_id); + const payload_1 = new Bytes(ExtrinsicHelper.api.registry, 'Hello World From Frequency'); + const fake_schema_id = new u16(ExtrinsicHelper.api.registry, badSchemaId); + const paginated_add_result_1 = ExtrinsicHelper.upsertPage( + delegatorKeys, + fake_schema_id, + msa_id, + page_id, + payload_1, + target_hash + ); + await assert.rejects(paginated_add_result_1.fundAndSend(fundingSource), { + name: 'InvalidSchemaId', + section: 'statefulStorage', + }); + }); + + it('should fail call to upsert page with invalid schema location', async function () { + const page_id = 0; + const target_hash = await getCurrentPaginatedHash(msa_id, schemaId, page_id); + const payload_1 = new Bytes(ExtrinsicHelper.api.registry, 'Hello World From Frequency'); + const paginated_add_result_1 = ExtrinsicHelper.upsertPage( + delegatorKeys, + schemaId_unsupported, + msa_id, + page_id, + payload_1, + target_hash + ); + await assert.rejects(paginated_add_result_1.fundAndSend(fundingSource), { + name: 'SchemaPayloadLocationMismatch', + section: 'statefulStorage', + }); + }); + + it('should fail call to upsert page with for un-delegated attempts', async function () { + const page_id = 0; + const payload_1 = new Bytes(ExtrinsicHelper.api.registry, 'Hello World From Frequency'); + + const target_hash = await getCurrentPaginatedHash(msa_id, schemaId, page_id); + const paginated_add_result_1 = ExtrinsicHelper.upsertPage( + providerKeys, + schemaId, + badMsaId, + page_id, + payload_1, + target_hash + ); + await assert.rejects(paginated_add_result_1.fundAndSend(fundingSource), { + name: 'UnauthorizedDelegate', + section: 'statefulStorage', + }); + }); + + it('should fail call to upsert page with stale target hash', async function () { + const page_id = 0; + const payload_1 = new Bytes(ExtrinsicHelper.api.registry, 'Hello World From Frequency'); + + const paginated_add_result_1 = ExtrinsicHelper.upsertPage(providerKeys, schemaId, msa_id, page_id, payload_1, 0); + await assert.rejects(paginated_add_result_1.signAndSend('current'), { + name: 'StalePageState', + section: 'statefulStorage', + }); + }); + }); + + describe('Paginated Storage Removal Negative Tests 😊/😥', function () { + it('should fail call to remove page with invalid schemaId', async function () { + const page_id = 0; + const paginated_add_result_1 = ExtrinsicHelper.removePage(delegatorKeys, badSchemaId, msa_id, page_id, 0); + await assert.rejects(paginated_add_result_1.fundAndSend(fundingSource), { + name: 'InvalidSchemaId', + section: 'statefulStorage', + }); + }); + + it('should fail call to remove page with invalid schema location', async function () { + const page_id = 0; + const paginated_add_result_1 = ExtrinsicHelper.removePage( + delegatorKeys, + schemaId_unsupported, + msa_id, + page_id, + 0 + ); + await assert.rejects(paginated_add_result_1.fundAndSend(fundingSource), { + name: 'SchemaPayloadLocationMismatch', + section: 'statefulStorage', + }); + }); + }); + + describe('Paginated Storage RPC Tests', function () { + it('✅ should be able to call get_paginated_storage and get paginated data', async function () { + const result = await ExtrinsicHelper.getPaginatedStorage(msa_id, schemaId); + assert.notEqual(result, undefined, 'should have returned a valid response'); + assert.notEqual(result.length, 0, 'should have returned paginated responses'); + assert.notEqual(result[0].hash, undefined, 'should have returned a valid page'); + }); + }); +}); diff --git a/e2e/stateful-pallet-storage/handleSignatureRequiredItemized.test.ts b/e2e/stateful-pallet-storage/handleSignatureRequiredItemized.test.ts new file mode 100644 index 0000000000..fa8034532f --- /dev/null +++ b/e2e/stateful-pallet-storage/handleSignatureRequiredItemized.test.ts @@ -0,0 +1,187 @@ +// E2E tests for pallets/stateful-pallet-storage/handleItemizedWithSignatureItemized.ts +import '@frequency-chain/api-augment'; +import assert from 'assert'; +import { + DOLLARS, + createDelegatorAndDelegation, + createProviderKeysAndId, + generateItemizedActions, + generateItemizedActionsSignedPayloadV2, + getCurrentItemizedHash, + assertExtrinsicSucceededAndFeesPaid, + createAndFundKeypair, +} from '../scaffolding/helpers'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { AVRO_CHAT_MESSAGE } from '../stateful-pallet-storage/fixtures/itemizedSchemaType'; +import { MessageSourceId, SchemaId } from '@frequency-chain/api-augment/interfaces'; +import { getFundingSource } from '../scaffolding/funding'; + +const fundingSource = getFundingSource(import.meta.url); + +describe('📗 Stateful Pallet Storage Signature Required Itemized', function () { + let itemizedSchemaId: SchemaId; + let msa_id: MessageSourceId; + let undelegatedProviderId: MessageSourceId; + let undelegatedProviderKeys: KeyringPair; + let delegatedProviderId: MessageSourceId; + let delegatedProviderKeys: KeyringPair; + let delegatorKeys: KeyringPair; + + let itemizedActionsSignedPayload; + + before(async function () { + [ + // Create a provider. This provider will NOT be granted delegations; + // methods requiring a payload signature do not require a delegation + [undelegatedProviderKeys, undelegatedProviderId], + // Create a provider for the MSA, the provider will be used to grant delegation + [delegatedProviderKeys, delegatedProviderId], + // Fund the Delegator Keys + delegatorKeys, + // Create a schema for Itemized PayloadLocation + itemizedSchemaId, + ] = await Promise.all([ + createProviderKeysAndId(fundingSource, 2n * DOLLARS), + createProviderKeysAndId(fundingSource, 2n * DOLLARS), + createAndFundKeypair(fundingSource, 2n * DOLLARS), + ExtrinsicHelper.getOrCreateSchemaV3( + fundingSource, + AVRO_CHAT_MESSAGE, + 'AvroBinary', + 'Itemized', + ['AppendOnly', 'SignatureRequired'], + 'test.ItemizedSignatureRequired' + ), + ]); + assert.notEqual(undelegatedProviderId, undefined, 'setup should populate undelegatedProviderId'); + assert.notEqual(undelegatedProviderKeys, undefined, 'setup should populate undelegatedProviderKeys'); + assert.notEqual(delegatedProviderId, undefined, 'setup should populate delegatedProviderId'); + assert.notEqual(delegatedProviderKeys, undefined, 'setup should populate delegatedProviderKeys'); + + // Create a MSA for the delegator + [delegatorKeys, msa_id] = await createDelegatorAndDelegation( + fundingSource, + [itemizedSchemaId], + delegatedProviderId, + delegatedProviderKeys, + 'sr25519', + delegatorKeys + ); + assert.notEqual(delegatorKeys, undefined, 'setup should populate delegator_key'); + assert.notEqual(msa_id, undefined, 'setup should populate msa_id'); + + itemizedActionsSignedPayload = await generateItemizedActionsSignedPayloadV2( + generateItemizedActions([ + { action: 'Add', value: 'Hello, world from Frequency' }, + { action: 'Add', value: 'Hello, world again from Frequency' }, + ]), + itemizedSchemaId, + delegatorKeys, + msa_id + ); + }); + + it('provider should be able to call applyItemizedActionWithSignatureV2 and apply actions', async function () { + const { payload, signature } = await generateItemizedActionsSignedPayloadV2( + generateItemizedActions([ + { action: 'Add', value: 'Hello, world from Frequency' }, + { action: 'Add', value: 'Hello, world again from Frequency' }, + ]), + itemizedSchemaId, + delegatorKeys, + msa_id + ); + + const itemized_add_result_1 = ExtrinsicHelper.applyItemActionsWithSignatureV2( + delegatorKeys, + undelegatedProviderKeys, + signature, + payload + ); + const { target: pageUpdateEvent1, eventMap: chainEvents } = await itemized_add_result_1.fundAndSend(fundingSource); + assertExtrinsicSucceededAndFeesPaid(chainEvents); + assert.notEqual( + pageUpdateEvent1, + undefined, + 'should have returned a PalletStatefulStorageItemizedActionApplied event' + ); + }); + + it('delegator (owner) should be able to call applyItemizedActionWithSignatureV2 and apply actions', async function () { + const { payload, signature } = await generateItemizedActionsSignedPayloadV2( + generateItemizedActions([ + { action: 'Add', value: 'Hello, world from Frequency' }, + { action: 'Add', value: 'Hello, world again from Frequency' }, + ]), + itemizedSchemaId, + delegatorKeys, + msa_id + ); + + const itemized_add_result_1 = ExtrinsicHelper.applyItemActionsWithSignatureV2( + delegatorKeys, + delegatorKeys, + signature, + payload + ); + const { target: pageUpdateEvent1, eventMap: chainEvents } = await itemized_add_result_1.fundAndSend(fundingSource); + assertExtrinsicSucceededAndFeesPaid(chainEvents); + assert.notEqual( + pageUpdateEvent1, + undefined, + 'should have returned a PalletStatefulStorageItemizedActionApplied event' + ); + }); + + it('provider should not be able to call applyItemizedAction', async function () { + const add_actions = generateItemizedActions([ + { action: 'Add', value: 'Hello, world from Frequency' }, + { action: 'Add', value: 'Hello, world again from Frequency' }, + ]); + + const target_hash = await getCurrentItemizedHash(msa_id, itemizedSchemaId); + + const itemized_add_result_1 = ExtrinsicHelper.applyItemActions( + undelegatedProviderKeys, + itemizedSchemaId, + msa_id, + add_actions, + target_hash + ); + await assert.rejects(itemized_add_result_1.fundAndSend(fundingSource), { name: 'UnauthorizedDelegate' }); + + const itemized_add_result_2 = ExtrinsicHelper.applyItemActions( + delegatedProviderKeys, + itemizedSchemaId, + msa_id, + add_actions, + target_hash + ); + await assert.rejects(itemized_add_result_2.fundAndSend(fundingSource), { name: 'UnsupportedOperationForSchema' }); + }); + + it('owner should be able to call applyItemizedAction', async function () { + const add_actions = generateItemizedActions([ + { action: 'Add', value: 'Hello, world from Frequency' }, + { action: 'Add', value: 'Hello, world again from Frequency' }, + ]); + + const target_hash = await getCurrentItemizedHash(msa_id, itemizedSchemaId); + + const itemized_add_result_1 = ExtrinsicHelper.applyItemActions( + delegatorKeys, + itemizedSchemaId, + msa_id, + add_actions, + target_hash + ); + const { target: pageUpdateEvent1, eventMap: chainEvents } = await itemized_add_result_1.fundAndSend(fundingSource); + assertExtrinsicSucceededAndFeesPaid(chainEvents); + assert.notEqual( + pageUpdateEvent1, + undefined, + 'should have returned a PalletStatefulStorageItemizedActionApplied event' + ); + }); +}); diff --git a/e2e/stateful-pallet-storage/handleSignatureRequiredPaginated.test.ts b/e2e/stateful-pallet-storage/handleSignatureRequiredPaginated.test.ts new file mode 100644 index 0000000000..db393eba55 --- /dev/null +++ b/e2e/stateful-pallet-storage/handleSignatureRequiredPaginated.test.ts @@ -0,0 +1,274 @@ +// E2E tests for pallets/stateful-pallet-storage/handleItemizedWithSignaturePaginated.ts +import '@frequency-chain/api-augment'; +import assert from 'assert'; +import { + DOLLARS, + createDelegatorAndDelegation, + createProviderKeysAndId, + generatePaginatedDeleteSignaturePayloadV2, + generatePaginatedUpsertSignaturePayloadV2, + getCurrentPaginatedHash, + signPayloadSr25519, + assertExtrinsicSucceededAndFeesPaid, + createMsa, + createAndFundKeypair, +} from '../scaffolding/helpers'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { AVRO_CHAT_MESSAGE } from '../stateful-pallet-storage/fixtures/itemizedSchemaType'; +import { MessageSourceId, SchemaId } from '@frequency-chain/api-augment/interfaces'; +import { Bytes, u16 } from '@polkadot/types'; +import { getFundingSource } from '../scaffolding/funding'; + +const fundingSource = getFundingSource(import.meta.url); + +describe('📗 Stateful Pallet Storage Signature Required Paginated', function () { + let paginatedSchemaId: SchemaId; + let msa_id: MessageSourceId; + let undelegatedProviderId: MessageSourceId; + let undelegatedProviderKeys: KeyringPair; + let delegatedProviderId: MessageSourceId; + let delegatedProviderKeys: KeyringPair; + let delegatorKeys: KeyringPair; + + before(async function () { + [ + // Create a provider. This provider will NOT be granted delegations; + // methods requiring a payload signature do not require a delegation + [undelegatedProviderKeys, undelegatedProviderId], + // Create a provider for the MSA, the provider will be used to grant delegation + [delegatedProviderKeys, delegatedProviderId], + // Fund the Delegator Keys + delegatorKeys, + // Create a schema for Paginated PayloadLocation + paginatedSchemaId, + ] = await Promise.all([ + createProviderKeysAndId(fundingSource, 2n * DOLLARS), + createProviderKeysAndId(fundingSource, 2n * DOLLARS), + createAndFundKeypair(fundingSource, 2n * DOLLARS), + ExtrinsicHelper.getOrCreateSchemaV3( + fundingSource, + AVRO_CHAT_MESSAGE, + 'AvroBinary', + 'Paginated', + ['SignatureRequired'], + 'test.PaginatedSignatureRequired' + ), + ]); + assert.notEqual(undelegatedProviderId, undefined, 'setup should populate undelegatedProviderId'); + assert.notEqual(undelegatedProviderKeys, undefined, 'setup should populate undelegatedProviderKeys'); + assert.notEqual(delegatedProviderId, undefined, 'setup should populate delegatedProviderId'); + assert.notEqual(delegatedProviderKeys, undefined, 'setup should populate delegatedProviderKeys'); + + // Create a MSA for the delegator + [delegatorKeys, msa_id] = await createDelegatorAndDelegation( + fundingSource, + [paginatedSchemaId], + delegatedProviderId, + delegatedProviderKeys, + 'sr25519', + delegatorKeys + ); + ExtrinsicHelper.transferFunds(fundingSource, delegatorKeys, 2n * DOLLARS); + assert.notEqual(delegatorKeys, undefined, 'setup should populate delegator_key'); + assert.notEqual(msa_id, undefined, 'setup should populate msa_id'); + }); + + it('provider should be able to call upsertPageWithSignatureV2 a page and deletePageWithSignatureV2 it successfully', async function () { + const page_id = new u16(ExtrinsicHelper.api.registry, 1); + + // Add and update actions + let target_hash = await getCurrentPaginatedHash(msa_id, paginatedSchemaId, page_id.toNumber()); + const upsertPayload = await generatePaginatedUpsertSignaturePayloadV2({ + targetHash: target_hash, + schemaId: paginatedSchemaId, + pageId: page_id, + payload: new Bytes(ExtrinsicHelper.api.registry, 'Hello World From Frequency'), + }); + const upsertPayloadData = ExtrinsicHelper.api.registry.createType( + 'PalletStatefulStoragePaginatedUpsertSignaturePayloadV2', + upsertPayload + ); + const upsert_result = ExtrinsicHelper.upsertPageWithSignatureV2( + delegatorKeys, + undelegatedProviderKeys, + signPayloadSr25519(delegatorKeys, upsertPayloadData), + upsertPayload + ); + const { target: pageUpdateEvent, eventMap: chainEvents1 } = await upsert_result.fundAndSend(fundingSource); + assertExtrinsicSucceededAndFeesPaid(chainEvents1); + + assert.notEqual( + pageUpdateEvent, + undefined, + 'should have returned a PalletStatefulStoragePaginatedPageUpdate event' + ); + + // Remove the page + target_hash = await getCurrentPaginatedHash(msa_id, paginatedSchemaId, page_id.toNumber()); + const deletePayload = await generatePaginatedDeleteSignaturePayloadV2({ + targetHash: target_hash, + schemaId: paginatedSchemaId, + pageId: page_id, + }); + const deletePayloadData = ExtrinsicHelper.api.registry.createType( + 'PalletStatefulStoragePaginatedDeleteSignaturePayloadV2', + deletePayload + ); + const remove_result = ExtrinsicHelper.deletePageWithSignatureV2( + delegatorKeys, + undelegatedProviderKeys, + signPayloadSr25519(delegatorKeys, deletePayloadData), + deletePayload + ); + const { target: pageRemove, eventMap: chainEvents2 } = await remove_result.fundAndSend(fundingSource); + assert.notEqual(pageRemove, undefined, 'should have returned a event'); + assertExtrinsicSucceededAndFeesPaid(chainEvents2); + // no pages should exist + const result = await ExtrinsicHelper.getPaginatedStorage(msa_id, paginatedSchemaId); + assert.notEqual(result, undefined, 'should have returned a valid response'); + const thePage = result.toArray().find((page) => page.page_id === page_id); + assert.equal(thePage, undefined, 'inserted page should not exist'); + }); + + it('delegator (owner) can upsertPageWithSignatureV2 a page and deletePageWithSignatureV2', async function () { + const page_id = new u16(ExtrinsicHelper.api.registry, 1); + + // Add and update actions + let target_hash = await getCurrentPaginatedHash(msa_id, paginatedSchemaId, page_id.toNumber()); + const upsertPayload = await generatePaginatedUpsertSignaturePayloadV2({ + targetHash: target_hash, + schemaId: paginatedSchemaId, + pageId: page_id, + payload: new Bytes(ExtrinsicHelper.api.registry, 'Hello World From Frequency'), + }); + const upsertPayloadData = ExtrinsicHelper.api.registry.createType( + 'PalletStatefulStoragePaginatedUpsertSignaturePayloadV2', + upsertPayload + ); + const upsert_result = ExtrinsicHelper.upsertPageWithSignatureV2( + delegatorKeys, + delegatorKeys, + signPayloadSr25519(delegatorKeys, upsertPayloadData), + upsertPayload + ); + const { target: pageUpdateEvent, eventMap: chainEvents1 } = await upsert_result.fundAndSend(fundingSource); + assert.notEqual( + chainEvents1['system.ExtrinsicSuccess'], + undefined, + 'should have returned an ExtrinsicSuccess event' + ); + assertExtrinsicSucceededAndFeesPaid(chainEvents1); + + // Remove the page + target_hash = await getCurrentPaginatedHash(msa_id, paginatedSchemaId, page_id.toNumber()); + const deletePayload = await generatePaginatedDeleteSignaturePayloadV2({ + targetHash: target_hash, + schemaId: paginatedSchemaId, + pageId: page_id, + }); + const deletePayloadData = ExtrinsicHelper.api.registry.createType( + 'PalletStatefulStoragePaginatedDeleteSignaturePayloadV2', + deletePayload + ); + const remove_result = ExtrinsicHelper.deletePageWithSignatureV2( + delegatorKeys, + delegatorKeys, + signPayloadSr25519(delegatorKeys, deletePayloadData), + deletePayload + ); + const { target: pageRemove, eventMap: chainEvents2 } = await remove_result.fundAndSend(fundingSource); + assertExtrinsicSucceededAndFeesPaid(chainEvents2); + assert.notEqual(pageRemove, undefined, 'should have returned a event'); + + // no pages should exist + const result = await ExtrinsicHelper.getPaginatedStorage(msa_id, paginatedSchemaId); + assert.notEqual(result, undefined, 'should have returned a valid response'); + const thePage = result.toArray().find((page) => page.page_id === page_id); + assert.equal(thePage, undefined, 'inserted page should not exist'); + }); + + it('provider cannot upsertPage', async function () { + const page_id = new u16(ExtrinsicHelper.api.registry, 1); + + const target_hash = await getCurrentPaginatedHash(msa_id, paginatedSchemaId, page_id.toNumber()); + + const upsert = ExtrinsicHelper.upsertPage( + undelegatedProviderKeys, + paginatedSchemaId, + msa_id, + page_id, + new Bytes(ExtrinsicHelper.api.registry, 'Hello World From Frequency'), + target_hash + ); + await assert.rejects(upsert.fundAndSend(fundingSource), { name: 'UnauthorizedDelegate' }); + + const upsert_2 = ExtrinsicHelper.upsertPage( + delegatedProviderKeys, + paginatedSchemaId, + msa_id, + page_id, + new Bytes(ExtrinsicHelper.api.registry, 'Hello World From Frequency'), + target_hash + ); + await assert.rejects(upsert_2.fundAndSend(fundingSource), { name: 'UnsupportedOperationForSchema' }); + }); + + it('owner can upsertPage', async function () { + const page_id = new u16(ExtrinsicHelper.api.registry, 1); + + const target_hash = await getCurrentPaginatedHash(msa_id, paginatedSchemaId, page_id.toNumber()); + + const upsert_result = ExtrinsicHelper.upsertPage( + delegatorKeys, + paginatedSchemaId, + msa_id, + page_id, + new Bytes(ExtrinsicHelper.api.registry, 'Hello World From Frequency'), + target_hash + ); + const { target: pageUpdateEvent, eventMap: chainEvents1 } = await upsert_result.fundAndSend(fundingSource); + assertExtrinsicSucceededAndFeesPaid(chainEvents1); + assert.notEqual( + pageUpdateEvent, + undefined, + 'should have returned a PalletStatefulStoragePaginatedPageUpdate event' + ); + }); + + it('Provider cannot deletePage directly', async function () { + const page_id = new u16(ExtrinsicHelper.api.registry, 1); + + const target_hash = await getCurrentPaginatedHash(msa_id, paginatedSchemaId, page_id.toNumber()); + + const remove_op = ExtrinsicHelper.removePage( + undelegatedProviderKeys, + paginatedSchemaId, + msa_id, + page_id, + target_hash + ); + await assert.rejects(remove_op.fundAndSend(fundingSource), { name: 'UnauthorizedDelegate' }); + + const remove_op_2 = ExtrinsicHelper.removePage( + delegatedProviderKeys, + paginatedSchemaId, + msa_id, + page_id, + target_hash + ); + await assert.rejects(remove_op_2.fundAndSend(fundingSource), { name: 'UnsupportedOperationForSchema' }); + }); + + // Fails to emit event but appears to pass + it('delegator (owner) can deletePage', async function () { + const page_id = new u16(ExtrinsicHelper.api.registry, 1); + + const target_hash = await getCurrentPaginatedHash(msa_id, paginatedSchemaId, page_id.toNumber()); + + const remove_result = ExtrinsicHelper.removePage(delegatorKeys, paginatedSchemaId, msa_id, page_id, target_hash); + const { target: pageUpdateEvent, eventMap: chainEvents1 } = await remove_result.fundAndSend(fundingSource); + assertExtrinsicSucceededAndFeesPaid(chainEvents1); + assert.notEqual(pageUpdateEvent, undefined, 'should have returned a PaginatedPageDeleted event'); + }); +}); diff --git a/e2e/stateful-pallet-storage/stateful.ethereum.test.ts b/e2e/stateful-pallet-storage/stateful.ethereum.test.ts new file mode 100644 index 0000000000..1ead404606 --- /dev/null +++ b/e2e/stateful-pallet-storage/stateful.ethereum.test.ts @@ -0,0 +1,174 @@ +// E2E tests for pallets/stateful-pallet-storage/handleItemizedWithSignature.ts +import '@frequency-chain/api-augment'; +import assert from 'assert'; +import { + DOLLARS, + createDelegatorAndDelegation, + createProviderKeysAndId, + generateItemizedActions, + generateItemizedActionsSignedPayloadV2, + generatePaginatedDeleteSignaturePayloadV2, + generatePaginatedUpsertSignaturePayloadV2, + getCurrentPaginatedHash, + signPayload, + assertExtrinsicSucceededAndFeesPaid, +} from '../scaffolding/helpers'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { AVRO_CHAT_MESSAGE } from '../stateful-pallet-storage/fixtures/itemizedSchemaType'; +import { MessageSourceId, SchemaId } from '@frequency-chain/api-augment/interfaces'; +import { Bytes, u16 } from '@polkadot/types'; +import { getFundingSource } from '../scaffolding/funding'; + +const fundingSource = getFundingSource(import.meta.url); + +describe('📗 Stateful Pallet Storage Ethereum', function () { + let itemizedSchemaId: SchemaId; + let paginatedSchemaId: SchemaId; + let msa_id: MessageSourceId; + let undelegatedProviderId: MessageSourceId; + let undelegatedProviderKeys: KeyringPair; + let delegatedProviderId: MessageSourceId; + let delegatedProviderKeys: KeyringPair; + let ethereumDelegatorKeys: KeyringPair; + + before(async function () { + // All the setup + [ + // Create a provider. This provider will NOT be granted delegations; + // methods requiring a payload signature do not require a delegation + [undelegatedProviderKeys, undelegatedProviderId], + // Create a provider for the MSA, the provider will be used to grant delegation + [delegatedProviderKeys, delegatedProviderId], + // Create a schema for Itemized PayloadLocation + itemizedSchemaId, + // Create a schema for Paginated PayloadLocation + paginatedSchemaId, + ] = await Promise.all([ + createProviderKeysAndId(fundingSource, 2n * DOLLARS), + createProviderKeysAndId(fundingSource, 2n * DOLLARS), + ExtrinsicHelper.getOrCreateSchemaV3( + fundingSource, + AVRO_CHAT_MESSAGE, + 'AvroBinary', + 'Itemized', + ['AppendOnly', 'SignatureRequired'], + 'test.ItemizedSignatureRequired' + ), + ExtrinsicHelper.getOrCreateSchemaV3( + fundingSource, + AVRO_CHAT_MESSAGE, + 'AvroBinary', + 'Paginated', + ['SignatureRequired'], + 'test.PaginatedSignatureRequired' + ), + ]); + assert.notEqual(undelegatedProviderId, undefined, 'setup should populate undelegatedProviderId'); + assert.notEqual(undelegatedProviderKeys, undefined, 'setup should populate undelegatedProviderKeys'); + + assert.notEqual(delegatedProviderId, undefined, 'setup should populate delegatedProviderId'); + assert.notEqual(delegatedProviderKeys, undefined, 'setup should populate delegatedProviderKeys'); + + // Create a MSA for the delegator + [ethereumDelegatorKeys, msa_id] = await createDelegatorAndDelegation( + fundingSource, + [itemizedSchemaId, paginatedSchemaId], + delegatedProviderId, + delegatedProviderKeys, + 'ethereum' + ); + assert.notEqual(ethereumDelegatorKeys, undefined, 'setup should populate delegator_key'); + assert.notEqual(msa_id, undefined, 'setup should populate msa_id'); + // Make sure we are finalized before all the tests + await ExtrinsicHelper.waitForFinalization(); + }); + + describe('Itemized With Signature Storage Tests', function () { + it('provider should be able to call applyItemizedActionWithSignatureV2 and apply actions with Ethereum keys', async function () { + const { payload, signature } = await generateItemizedActionsSignedPayloadV2( + generateItemizedActions([ + { action: 'Add', value: 'Hello, world from Frequency' }, + { action: 'Add', value: 'Hello, world again from Frequency' }, + ]), + itemizedSchemaId, + ethereumDelegatorKeys, + msa_id + ); + + const itemized_add_result_1 = ExtrinsicHelper.applyItemActionsWithSignatureV2( + ethereumDelegatorKeys, + undelegatedProviderKeys, + signature, + payload + ); + const { target: pageUpdateEvent1, eventMap: chainEvents } = + await itemized_add_result_1.fundAndSend(fundingSource); + assertExtrinsicSucceededAndFeesPaid(chainEvents); + assert.notEqual( + pageUpdateEvent1, + undefined, + 'should have returned a PalletStatefulStorageItemizedActionApplied event' + ); + }); + }); + + describe('Paginated With Signature Storage Tests with Ethereum keys', function () { + it('provider should be able to call upsertPageWithSignatureV2 a page and deletePageWithSignatureV2 it successfully with Ethereum keys', async function () { + const page_id = new u16(ExtrinsicHelper.api.registry, 1); + + // Add and update actions + let target_hash = await getCurrentPaginatedHash(msa_id, paginatedSchemaId, page_id.toNumber()); + const upsertPayload = await generatePaginatedUpsertSignaturePayloadV2({ + targetHash: target_hash, + schemaId: paginatedSchemaId, + pageId: page_id, + payload: new Bytes(ExtrinsicHelper.api.registry, 'Hello World From Frequency'), + }); + const upsertPayloadData = ExtrinsicHelper.api.registry.createType( + 'PalletStatefulStoragePaginatedUpsertSignaturePayloadV2', + upsertPayload + ); + const upsert_result = ExtrinsicHelper.upsertPageWithSignatureV2( + ethereumDelegatorKeys, + undelegatedProviderKeys, + signPayload(ethereumDelegatorKeys, upsertPayloadData), + upsertPayload + ); + const { target: pageUpdateEvent, eventMap: chainEvents1 } = await upsert_result.fundAndSend(fundingSource); + assertExtrinsicSucceededAndFeesPaid(chainEvents1); + assert.notEqual( + pageUpdateEvent, + undefined, + 'should have returned a PalletStatefulStoragePaginatedPageUpdate event' + ); + + // Remove the page + target_hash = await getCurrentPaginatedHash(msa_id, paginatedSchemaId, page_id.toNumber()); + const deletePayload = await generatePaginatedDeleteSignaturePayloadV2({ + targetHash: target_hash, + schemaId: paginatedSchemaId, + pageId: page_id, + }); + const deletePayloadData = ExtrinsicHelper.api.registry.createType( + 'PalletStatefulStoragePaginatedDeleteSignaturePayloadV2', + deletePayload + ); + const remove_result = ExtrinsicHelper.deletePageWithSignatureV2( + ethereumDelegatorKeys, + undelegatedProviderKeys, + signPayload(ethereumDelegatorKeys, deletePayloadData), + deletePayload + ); + const { target: pageRemove, eventMap: chainEvents2 } = await remove_result.fundAndSend(fundingSource); + assertExtrinsicSucceededAndFeesPaid(chainEvents2); + assert.notEqual(pageRemove, undefined, 'should have returned a event'); + + // no pages should exist + const result = await ExtrinsicHelper.getPaginatedStorage(msa_id, paginatedSchemaId); + assert.notEqual(result, undefined, 'should have returned a valid response'); + const thePage = result.toArray().find((page) => page.page_id === page_id); + assert.equal(thePage, undefined, 'inserted page should not exist'); + }); + }); +}); diff --git a/e2e/sudo/sudo.test.ts b/e2e/sudo/sudo.test.ts new file mode 100644 index 0000000000..5bf9dcc89a --- /dev/null +++ b/e2e/sudo/sudo.test.ts @@ -0,0 +1,263 @@ +// All the sudo required tests must be in one test for parallelization needs + +import '@frequency-chain/api-augment'; +import { MessageSourceId, SchemaId } from '@frequency-chain/api-augment/interfaces'; +import { KeyringPair } from '@polkadot/keyring/types'; +import assert from 'assert'; +import { Extrinsic, ExtrinsicHelper } from '../scaffolding/extrinsicHelpers'; +import { isTestnet } from '../scaffolding/env'; +import { getSudo, getFundingSource } from '../scaffolding/funding'; +import { AVRO_GRAPH_CHANGE } from '../schemas/fixtures/avroGraphChangeSchemaType'; +import { Bytes, u16, u64 } from '@polkadot/types'; +import { + DOLLARS, + createDelegatorAndDelegation, + createProviderKeysAndId, + getCurrentItemizedHash, + generateSchemaPartialName, + createKeys, + createMsaAndProvider, +} from '../scaffolding/helpers'; +import { AVRO_CHAT_MESSAGE } from '../stateful-pallet-storage/fixtures/itemizedSchemaType'; +import { stakeToProvider } from '../scaffolding/helpers'; + +describe('Sudo required', function () { + let sudoKey: KeyringPair; + let fundingSource: KeyringPair; + let schemaName: string; + + before(function () { + if (isTestnet()) this.skip(); + sudoKey = getSudo().keys; + fundingSource = getFundingSource(import.meta.url); + schemaName = 'e-e.sudo-' + generateSchemaPartialName(15); + }); + + describe('schema#setMaxSchemaModelBytes', function () { + it('should fail to set the schema size because of lack of root authority (BadOrigin)', async function () { + const operation = new Extrinsic(() => ExtrinsicHelper.api.tx.schemas.setMaxSchemaModelBytes(1000000), sudoKey); + await assert.rejects(operation.signAndSend(), { name: 'BadOrigin' }); + }); + + it('should fail to set max schema size > hard-coded limit (SchemaModelMaxBytesBoundedVecLimit)', async function () { + const limit = ExtrinsicHelper.api.consts.schemas.schemaModelMaxBytesBoundedVecLimit.toBigInt(); + const op = new Extrinsic(() => ExtrinsicHelper.api.tx.schemas.setMaxSchemaModelBytes(limit + 1n), sudoKey); + await assert.rejects(op.sudoSignAndSend(), { name: 'ExceedsMaxSchemaModelBytes' }); + }); + + it('should successfully set the max schema size', async function () { + const size = (await ExtrinsicHelper.apiPromise.query.schemas.governanceSchemaModelMaxBytes()).toBigInt(); + const op = new Extrinsic(() => ExtrinsicHelper.api.tx.schemas.setMaxSchemaModelBytes(size + 1n), sudoKey); + await op.sudoSignAndSend(); + assert.equal(true, true, 'operation should not have thrown error'); + const newSize = (await ExtrinsicHelper.apiPromise.query.schemas.governanceSchemaModelMaxBytes()).toBigInt(); + assert.equal(size + 1n, newSize, 'new size should have been set'); + }); + }); + + describe('schema-pallet ', function () { + it('should create schema with name using createSchemaWithSettingsGovV2', async function () { + if (isTestnet()) this.skip(); + const createSchema = ExtrinsicHelper.createSchemaWithSettingsGovV2( + sudoKey, + AVRO_GRAPH_CHANGE, + 'AvroBinary', + 'Itemized', + 'AppendOnly', + schemaName + ); + const { target: event, eventMap } = await createSchema.sudoSignAndSend(); + assert.notEqual(event, undefined); + const itemizedSchemaId: u16 = event?.data.schemaId || new u16(ExtrinsicHelper.api.registry, 0); + assert.notEqual(itemizedSchemaId.toNumber(), 0); + const schema_response = await ExtrinsicHelper.getSchema(itemizedSchemaId); + assert(schema_response.isSome); + const schema_response_value = schema_response.unwrap(); + const schema_settings = schema_response_value.settings; + assert.notEqual(schema_settings.length, 0); + assert.notEqual(eventMap['schemas.SchemaNameCreated'], undefined); + }); + }); + + describe('stateful-pallet-storage', function () { + it('should fail to create non itemized schema with AppendOnly settings', async function () { + if (isTestnet()) this.skip(); + + const ex = ExtrinsicHelper.createSchemaWithSettingsGovV2( + sudoKey, + AVRO_GRAPH_CHANGE, + 'AvroBinary', + 'Paginated', + 'AppendOnly', + schemaName + ); + await assert.rejects(ex.sudoSignAndSend(), { + name: 'InvalidSetting', + }); + }); + + it('should not fail to create itemized schema with AppendOnly settings', async function () { + if (isTestnet()) this.skip(); + + const createSchema = ExtrinsicHelper.createSchemaWithSettingsGovV2( + sudoKey, + AVRO_GRAPH_CHANGE, + 'AvroBinary', + 'Itemized', + 'AppendOnly', + schemaName + ); + const { target: event } = await createSchema.sudoSignAndSend(); + assert.notEqual(event, undefined); + const itemizedSchemaId: u16 = event?.data.schemaId || new u16(ExtrinsicHelper.api.registry, 0); + assert.notEqual(itemizedSchemaId.toNumber(), 0); + const schema_response = await ExtrinsicHelper.getSchema(itemizedSchemaId); + assert(schema_response.isSome); + const schema_response_value = schema_response.unwrap(); + const schema_settings = schema_response_value.settings; + assert.notEqual(schema_settings.length, 0); + }); + + describe('📗 Stateful Pallet Storage AppendOnly Schemas', function () { + // This requires schema creation abilities + + let itemizedSchemaId: SchemaId; + let msa_id: MessageSourceId; + let providerId: MessageSourceId; + let providerKeys: KeyringPair; + + before(async function () { + // Create a provider for the MSA, the provider will be used to grant delegation + [providerKeys, providerId] = await createProviderKeysAndId(fundingSource, 2n * DOLLARS); + assert.notEqual(providerId, undefined, 'setup should populate providerId'); + assert.notEqual(providerKeys, undefined, 'setup should populate providerKeys'); + + // Create a schema for Itemized PayloadLocation + const createSchema = ExtrinsicHelper.createSchemaWithSettingsGovV2( + sudoKey, + AVRO_CHAT_MESSAGE, + 'AvroBinary', + 'Itemized', + 'AppendOnly', + schemaName + ); + const { target: event } = await createSchema.sudoSignAndSend(); + itemizedSchemaId = event!.data.schemaId; + + // Create a MSA for the delegator and delegate to the provider for the itemized schema + [, msa_id] = await createDelegatorAndDelegation(fundingSource, itemizedSchemaId, providerId, providerKeys); + assert.notEqual(msa_id, undefined, 'setup should populate msa_id'); + }); + + describe('Itemized With AppendOnly Storage Tests', function () { + it('should not be able to call delete action', async function () { + // Add and update actions + const payload_1 = new Bytes(ExtrinsicHelper.api.registry, 'Hello World From Frequency'); + + const add_action = { + Add: payload_1, + }; + + const payload_2 = new Bytes(ExtrinsicHelper.api.registry, 'Hello World Again From Frequency'); + + const update_action = { + Add: payload_2, + }; + + const idx_1: u16 = new u16(ExtrinsicHelper.api.registry, 1); + + const delete_action = { + Delete: idx_1, + }; + const target_hash = await getCurrentItemizedHash(msa_id, itemizedSchemaId); + + const add_actions = [add_action, update_action, delete_action]; + + const itemized_add_result_1 = ExtrinsicHelper.applyItemActions( + providerKeys, + itemizedSchemaId, + msa_id, + add_actions, + target_hash + ); + await assert.rejects(itemized_add_result_1.fundAndSend(fundingSource), { + name: 'UnsupportedOperationForSchema', + section: 'statefulStorage', + }); + }); + }); + + describe('Capacity staking is affected by a hold being slashed', function () { + it('stake succeeds when overlapping tokens are on hold due to a proposal', async function () { + const accountBalance: bigint = 122n * DOLLARS; + const stakeBalance: bigint = 100n * DOLLARS; + const spendBalance: bigint = 20n * DOLLARS; + const proposalBond: bigint = 100n * DOLLARS; + + // Setup some keys and a provider for capacity staking + const stakeKeys: KeyringPair = createKeys('StakeKeys'); + const stakeProviderId: u64 = await createMsaAndProvider( + fundingSource, + stakeKeys, + 'StakeProvider', + accountBalance + ); + + // Create a treasury proposal which will result in a hold with minimum bond = 100 DOLLARS + const proposalExt = ExtrinsicHelper.submitProposal(stakeKeys, spendBalance); + const { target: proposalEvent } = await proposalExt.signAndSend(); + assert.notEqual(proposalEvent, undefined, 'should return a Proposal event'); + + // Confirm that the tokens were reserved/hold in the stakeKeys account using the query API + let stakedAcctInfo = await ExtrinsicHelper.getAccountInfo(stakeKeys); + assert.equal( + stakedAcctInfo.data.reserved, + proposalBond, + `expected ${proposalBond} reserved balance, got ${stakedAcctInfo.data.reserved}` + ); + + // Create a stake that will result in overlapping tokens being frozen + // stake will allow only the balance not on hold to be staked + await assert.doesNotReject(stakeToProvider(fundingSource, stakeKeys, stakeProviderId, stakeBalance)); + + // Slash the provider + const slashExt = ExtrinsicHelper.rejectProposal(sudoKey, proposalEvent?.data['proposalIndex']); + const { target: slashEvent } = await slashExt.sudoSignAndSend(); + assert.notEqual(slashEvent, undefined, 'should return a Treasury event'); + + // Confirm that the tokens were slashed from the stakeKeys account using the query API + stakedAcctInfo = await ExtrinsicHelper.getAccountInfo(stakeKeys); + assert.equal( + stakedAcctInfo.data.reserved, + 0n, + `expected 0 reserved balance, got ${stakedAcctInfo.data.reserved}` + ); + }); + + it('proposal fails when there is Capacity staking', async function () { + const accountBalance: bigint = 122n * DOLLARS; + const stakeBalance: bigint = 100n * DOLLARS; + const spendBalance: bigint = 20n * DOLLARS; + + // Setup some keys and a provider for capacity staking + const stakeKeys: KeyringPair = createKeys('StakeKeys'); + const stakeProviderId: u64 = await createMsaAndProvider( + fundingSource, + stakeKeys, + 'StakeProvider', + accountBalance + ); + + // Create a stake that will result in overlapping tokens being frozen + await assert.doesNotReject(stakeToProvider(fundingSource, stakeKeys, stakeProviderId, stakeBalance)); + + // Create a treasury proposal which will result in a hold with minimum bond = 100 DOLLARS + // The proposal should fail because the stakeKeys account doesn't have enough + // transferable to cover the deposit. + const proposalExt = ExtrinsicHelper.submitProposal(stakeKeys, spendBalance); + await assert.rejects(proposalExt.signAndSend()); + }); + }); + }); + }); +}); diff --git a/e2e/test-files.mjs b/e2e/test-files.mjs new file mode 100644 index 0000000000..f8670db818 --- /dev/null +++ b/e2e/test-files.mjs @@ -0,0 +1,6 @@ +// A quick file used by CI to list all the test files as an array for the matrix +import process from 'node:process'; +import { globSync } from 'glob'; + +const files = globSync('**/*.test.ts', { ignore: 'node_modules/**' }).filter((x) => !x.includes('load-tests/')); +process.stdout.write(JSON.stringify(files)); diff --git a/e2e/time-release/timeRelease.test.ts b/e2e/time-release/timeRelease.test.ts new file mode 100644 index 0000000000..f048ed8a4a --- /dev/null +++ b/e2e/time-release/timeRelease.test.ts @@ -0,0 +1,117 @@ +import '@frequency-chain/api-augment'; +import assert from 'assert'; +import { createAndFundKeypair, getBlockNumber, calculateReleaseSchedule } from '../scaffolding/helpers'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { ExtrinsicHelper, ReleaseSchedule } from '../scaffolding/extrinsicHelpers'; +import { getFundingSource } from '../scaffolding/funding'; + +const DOLLARS: number = 100000000; // 100_000_000 + +const fundingSource: KeyringPair = getFundingSource(import.meta.url); + +describe('TimeRelease', function () { + let vesterKeys: KeyringPair; + + before(async function () { + vesterKeys = await createAndFundKeypair(fundingSource, 50_000_000n); + }); + + describe('vested transfer and claim flow', function () { + it('creates a vested transfer', async function () { + const amount = 100000n * BigInt(DOLLARS); + const schedule: ReleaseSchedule = calculateReleaseSchedule(amount); + + const vestedTransferTx = ExtrinsicHelper.timeReleaseTransfer(fundingSource, vesterKeys, schedule); + const { target } = await vestedTransferTx.signAndSend(); + assert.notEqual(target, undefined, 'should have returned ReleaseScheduleAdded event'); + }); + }); + + describe('Schedule transfers', function () { + it('create a schedule transfer and cancel', async function () { + const amount = 100000n * BigInt(DOLLARS); + const schedule: ReleaseSchedule = calculateReleaseSchedule(amount); + const currentBlock = await getBlockNumber(); + + const scheduleName1 = new Uint8Array(32).fill(1); + const scheduleName2 = new Uint8Array(32).fill(2); + + const scheduleTransferTx1 = ExtrinsicHelper.timeReleaseScheduleNamedTransfer( + fundingSource, + scheduleName1, + vesterKeys, + schedule, + currentBlock + 20 + ); + const scheduleTransferTx2 = ExtrinsicHelper.timeReleaseScheduleNamedTransfer( + fundingSource, + scheduleName2, + vesterKeys, + schedule, + currentBlock + 20 + ); + const { target: target1 } = await scheduleTransferTx1.signAndSend(); + const { target: target2 } = await scheduleTransferTx2.signAndSend(); + assert.notEqual(target1, undefined, 'should have returned Scheduled event'); + assert.notEqual(target2, undefined, 'should have returned Scheduled event'); + + const reservedAmountBefore = + await ExtrinsicHelper.apiPromise.query.timeRelease.scheduleReservedAmounts(scheduleName1); + + assert.equal('10,000,000,000,000', reservedAmountBefore.toHuman()); + + await ExtrinsicHelper.runToBlock(currentBlock + 2); + + const cancelScheduleTransferTx1 = ExtrinsicHelper.timeReleaseCancelScheduledNamedTransfer( + fundingSource, + scheduleName1 + ); + const { target: cancelTarget1 } = await cancelScheduleTransferTx1.signAndSend(); + assert.notEqual(cancelTarget1, undefined, 'should have returned scheduler Canceled event'); + + const reservedAmountAfter = + await ExtrinsicHelper.apiPromise.query.timeRelease.scheduleReservedAmounts(scheduleName1); + assert.equal(true, reservedAmountAfter.isEmpty, 'reserved amount should be empty'); + + const cancelScheduleTransferTx2 = ExtrinsicHelper.timeReleaseCancelScheduledNamedTransfer( + fundingSource, + scheduleName2 + ); + + const { target: cancelTarget2 } = await cancelScheduleTransferTx2.signAndSend(); + + assert.notEqual(cancelTarget2, undefined, 'should have returned scheduler Canceled event'); + }); + }); + + describe('create schedule', function () { + it('create a schedule transfer', async function () { + const amount = 100000n * BigInt(DOLLARS); + const schedule: ReleaseSchedule = calculateReleaseSchedule(amount); + const currentBlock = await getBlockNumber(); + + const scheduleName1 = new Uint8Array(32).fill(1); + + const scheduleTransferTx1 = ExtrinsicHelper.timeReleaseScheduleNamedTransfer( + fundingSource, + scheduleName1, + vesterKeys, + schedule, + currentBlock + 10 + ); + const { target: target1 } = await scheduleTransferTx1.signAndSend(undefined, undefined, false); + assert.notEqual(target1, undefined, 'should have returned Scheduled event'); + + const reservedAmountBefore = + await ExtrinsicHelper.apiPromise.query.timeRelease.scheduleReservedAmounts(scheduleName1); + + assert.equal('10,000,000,000,000', reservedAmountBefore.toHuman()); + + await ExtrinsicHelper.runToBlock(currentBlock + 15); + + const reservedAmountAfter = + await ExtrinsicHelper.apiPromise.query.timeRelease.scheduleReservedAmounts(scheduleName1); + assert.equal(true, reservedAmountAfter.isEmpty, 'reserved amount should be empty'); + }); + }); +}); diff --git a/e2e/tsconfig.json b/e2e/tsconfig.json new file mode 100644 index 0000000000..b47422c11c --- /dev/null +++ b/e2e/tsconfig.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Base", + "compilerOptions": { + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "noImplicitAny": false, + "noImplicitThis": false, + "outDir": "dist", + "resolveJsonModule": true, + "sourceMap": false, + "strict": true, + "skipLibCheck": true, + "target": "es2022", + "typeRoots": ["node_modules/@types"] + }, + "include": ["./**/*.ts"], + "exclude": ["node_modules/**", "./dist/**"] +} diff --git a/js/api-augment/.gitignore b/js/api-augment/.gitignore new file mode 100644 index 0000000000..d1db1b8a78 --- /dev/null +++ b/js/api-augment/.gitignore @@ -0,0 +1,312 @@ +# Generated Files +metadata.* +interfaces/* + + +# Log Files +*.log + +# All of IDEA +.idea/* + +### Emacs ### +# -*- mode: gitignore; -*- +*~ +\#*\# +/.emacs.desktop +/.emacs.desktop.lock +*.elc +auto-save-list +tramp +.\#* + +# Org-mode +.org-id-locations +*_archive +ltximg/** + +# flymake-mode +*_flymake.* + +# eshell files +/eshell/history +/eshell/lastdir + +# elpa packages +/elpa/ + +# reftex files +*.rel + +# AUCTeX auto folder +/auto/ + +# cask packages +.cask/ +dist/ + +# Flycheck +flycheck_*.el + +# server auth directory +/server/ + +# projectiles files +.projectile + +# directory configuration +.dir-locals.el + +# network security +/network-security.data + + +### Git ### +# Created by git for backups. To disable backups in Git: +# $ git config --global mergetool.keepBackup false +*.orig + +# Created by git when using merge tools for conflicts +*.BACKUP.* +*.BASE.* +*.LOCAL.* +*.REMOTE.* +*_BACKUP_*.txt +*_BASE_*.txt +*_LOCAL_*.txt +*_REMOTE_*.txt + +### Intellij+all ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Intellij+all Patch ### +# Ignores the whole .idea folder and all .iml files +# See https://github.com/joeblau/gitignore.io/issues/186 and https://github.com/joeblau/gitignore.io/issues/360 + +.idea/ + +# Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-249601023 + +*.iml +modules.xml +.idea/misc.xml +*.ipr + +# Sonarlint plugin +.idea/sonarlint + +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test +.env*.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +### Vim ### +# Swap +[._]*.s[a-v][a-z] +!*.svg # comment out if you don't need vector files +[._]*.sw[a-p] +[._]s[a-rt-v][a-z] +[._]ss[a-gi-z] +[._]sw[a-p] + +# Session +Session.vim +Sessionx.vim + +# Temporary +.netrwhist +# Auto-generated tag files +tags +# Persistent undo +[._]*.un~ + +### vscode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# End of https://www.toptal.com/developers/gitignore/api/intellij+all,vim,emacs,vscode,git,node + +junit.xml diff --git a/js/api-augment/.mocharc.json b/js/api-augment/.mocharc.json new file mode 100644 index 0000000000..53ebf896a5 --- /dev/null +++ b/js/api-augment/.mocharc.json @@ -0,0 +1,5 @@ +{ + "$schema": "https://json.schemastore.org/mocharc", + "extension": ["ts"], + "spec": ["test"] +} diff --git a/js/api-augment/.node-version b/js/api-augment/.node-version new file mode 100644 index 0000000000..87834047a6 --- /dev/null +++ b/js/api-augment/.node-version @@ -0,0 +1 @@ +20.12.2 diff --git a/js/api-augment/.prettierignore b/js/api-augment/.prettierignore new file mode 100644 index 0000000000..2cf62f2962 --- /dev/null +++ b/js/api-augment/.prettierignore @@ -0,0 +1,10 @@ +# package.json is formatted by package managers, so we ignore it here +package.json +build/* +coverage/* +multimodules/* +/*.d.ts +/*.map +/*.js +*.md +eslint.config.mjs diff --git a/js/api-augment/.prettierrc.json b/js/api-augment/.prettierrc.json new file mode 100644 index 0000000000..cd87a91cb1 --- /dev/null +++ b/js/api-augment/.prettierrc.json @@ -0,0 +1,8 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false, + "printWidth": 120 +} diff --git a/js/api-augment/.tool-versions b/js/api-augment/.tool-versions new file mode 100644 index 0000000000..958fb36989 --- /dev/null +++ b/js/api-augment/.tool-versions @@ -0,0 +1 @@ +nodejs 20.12.2 diff --git a/js/api-augment/CHANGELOG.md b/js/api-augment/CHANGELOG.md new file mode 100644 index 0000000000..3fed1fa986 --- /dev/null +++ b/js/api-augment/CHANGELOG.md @@ -0,0 +1 @@ +Changelog is maintained in the [releases for Frequency](https://github.com/frequency-chain/frequency/releases). diff --git a/js/api-augment/CONTRIBUTING.md b/js/api-augment/CONTRIBUTING.md new file mode 100644 index 0000000000..f048c781cd --- /dev/null +++ b/js/api-augment/CONTRIBUTING.md @@ -0,0 +1,25 @@ +# CONTRIBUTING + +For contributing guidelines see the [Project Liberty Contributing Guidelines](https://github.com/LibertyDSNP/meta/blob/main/CONTRIBUTING.md). + +## Custom RPC Updates + +CI will build everything from metadata except the custom RPCs. These are stored in `js/api-augment/definitions/[pallet].ts`. +If you add a new pallet, don't forget to also add the new definitions file export to `js/api-augment/definitions/index.ts`. + +## Useful Links + +- [Type Definitions](https://github.com/polkadot-js/api/blob/master/packages/types/src/types/definitions.ts) + +## Running Tests + +Tests require getting the metadata and building first. + +### Chain is running +- `js/api-augment` folder +- `npm run fetch:local` Fetches the metadata from localhost +- `npm run build` + +### From CLI +- Frequency Project Root +- `make js` \ No newline at end of file diff --git a/js/api-augment/README.md b/js/api-augment/README.md new file mode 100644 index 0000000000..d7132edc67 --- /dev/null +++ b/js/api-augment/README.md @@ -0,0 +1,134 @@ +# Javascript Custom RPC + + + + +[![Contributors][contributors-shield]][contributors-url] +[![Forks][forks-shield]][forks-url] +[![Stargazers][stars-shield]][stars-url] +[![Issues][issues-shield]][issues-url] +[![MIT License][license-shield]][license-url] +[![NPM @latest][npm-shield]][npm-url] +[![NPM @next][npm-next-shield]][npm-next-url] + +# Frequency Custom RPC and Types for Polkadot JS API + +An easy way to get all the custom rpc and types config to be able to easily use [Frequency](https://github.com/frequency-chain/frequency/) with the [Polkadot JS API library](https://www.npmjs.com/package/@polkadot/api) with TypeScript. + + + +## Getting Started + +- `npm install @frequency-chain/api-augment` (API Augmentation Library) +- `npm install @polkadot/api` (Polkadot API Library) + +## Upgrades and Matching Versions + +Assuming you are using no deprecated methods, any release version should work against a release version of `@frequency-chain/api-augment`. +If you are working against a development version it is suggested that you match against the commit hash using `v0.0.0-[First 6 of the commit hash]`. + +Changelog is maintained in the [releases for Frequency](https://github.com/frequency-chain/frequency/releases). + +### Usage + +For details on use, see the [Polkadot API library documentation](https://polkadot.js.org/docs/api). + +```typescript +import { options } from "@frequency-chain/api-augment"; +import { ApiPromise } from "@polkadot/api"; +// ... + +const api = await ApiPromise.create({ + ...options, + // ... +}); +``` + + + +## Contributing + +See [CONTRIBUTING.md](CONTRIBUTING.md) for more information. + +### Updating Definitions + +Update `./definitions` if you have changed any types or RPC calls. + +To generate the JS api definitions, run + +``` +make js +``` + +This command will start a Frequency node in the background and fetch API definitions from it. To stop the Frequency process, use the PID output by the command. + +## Helpful Notes + +### Fails to Resolve Custom RPCs + +The api augmentation declares the modules used by `@polkadot/api`. +Thus the import for `@frequency-chain/api-augment` must come before any `@polkadot/api` so that the Frequency declarations resolve first. + +```typescript +import { options } from "@frequency-chain/api-augment"; +// Or +import "@frequency-chain/api-augment"; +// Must come BEFORE any imports from @polkadot/api +import { ApiPromise } from "@polkadot/api"; +``` + +Caches can also wreck this even if you reorder, so watch out. + +- Yarn cache can sometimes cause issues (if you are using yarn): `yarn cache clear` +- Sometimes I have found blowing away the `node_modules` helps as well: `rm -Rf node_modules` + +### Option + +Optional responses are not mapped to `null` and instead return an object with a few properties. +For more details see the [code for the Option class](https://github.com/polkadot-js/api/blob/master/packages/types-codec/src/base/Option.ts). + +```javascript +const optionalExample = await api.rpc.schemas.getBySchemaId(1); +// Does the Option have a value? +if (!optionalExample.isEmpty) { + // Get the value + return optionalExample.value; +} +return null; +``` + +### Vec + +Vector responses are not mapped directly to a JavaScript Array. +Instead they are mapped to the [Vec class](https://github.com/polkadot-js/api/blob/master/packages/types-codec/src/base/Vec.ts) which does extend [Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array). +Thus, you can still use `map`, `forEach`, etc... with responses or access the values directing via `.values()`. + + + +## License + +Distributed under the Apache 2.0 License. See `LICENSE` for more information. + + + + +[contributors-shield]: https://img.shields.io/github/contributors/frequency-chain/frequency.svg?style=for-the-badge +[contributors-url]: https://github.com/frequency-chain/frequency/graphs/contributors +[forks-shield]: https://img.shields.io/github/forks/frequency-chain/frequency.svg?style=for-the-badge +[forks-url]: https://github.com/frequency-chain/frequency/network/members +[stars-shield]: https://img.shields.io/github/stars/frequency-chain/frequency.svg?style=for-the-badge +[stars-url]: https://github.com/frequency-chain/frequency/stargazers +[issues-shield]: https://img.shields.io/github/issues/frequency-chain/frequency.svg?style=for-the-badge +[issues-url]: https://github.com/frequency-chain/frequency/issues +[license-shield]: https://img.shields.io/github/license/frequency-chain/frequency.svg?style=for-the-badge +[license-url]: https://github.com/frequency-chain/frequency/blob/master/LICENSE +[npm-shield]: https://img.shields.io/npm/v/@frequency-chain/api-augment?label=npm%20%40latest&style=for-the-badge +[npm-url]: https://www.npmjs.com/package/@frequency-chain/api-augment +[npm-next-shield]: https://img.shields.io/npm/v/@frequency-chain/api-augment/next?label=npm%20%40next&style=for-the-badge +[npm-next-url]: https://www.npmjs.com/package/@frequency-chain/api-augment diff --git a/js/api-augment/definitions/capacity.ts b/js/api-augment/definitions/capacity.ts new file mode 100644 index 0000000000..7c7c4d8cc3 --- /dev/null +++ b/js/api-augment/definitions/capacity.ts @@ -0,0 +1,15 @@ +export default { + rpc: { + dummy: { description: 'This API has no custom RPCs', params: [], type: 'undefined' }, + }, + types: { + RewardEra: 'u32', + UnclaimedRewardInfo: { + reward_era: 'RewardEra', + expires_at_block: 'BlockNumber', + staked_amount: 'Balance', + eligible_amount: 'Balance', + earned_amount: 'Balance', + }, + }, +}; diff --git a/js/api-augment/definitions/frequency.ts b/js/api-augment/definitions/frequency.ts new file mode 100644 index 0000000000..29665833d2 --- /dev/null +++ b/js/api-augment/definitions/frequency.ts @@ -0,0 +1,35 @@ +export default { + rpc: { + getEvents: { + description: 'Get block Events', + params: [ + { + name: 'at', + type: 'H256', + }, + ], + type: 'Vec', + }, + getMissingNonceValues: { + description: 'Get missing nonce values for an account', + params: [ + { + name: 'account', + type: 'AccountId32', + }, + ], + type: 'Vec', + }, + }, + types: { + RpcEvent: { + phase: 'Option', + pallet: 'u8', + event: 'u8', + data: 'Vec', + }, + // Part of the auraApi that is missing the type. + // Unsure why, but can safely be here. + SpConsensusSlotsSlotDuration: 'u64', + }, +}; diff --git a/js/api-augment/definitions/frequencyTxPayment.ts b/js/api-augment/definitions/frequencyTxPayment.ts new file mode 100644 index 0000000000..b0b09a2abf --- /dev/null +++ b/js/api-augment/definitions/frequencyTxPayment.ts @@ -0,0 +1,19 @@ +export default { + rpc: { + computeCapacityFeeDetails: { + description: 'Compute the capacity fee details for a given transaction', + params: [ + { + name: 'encoded_xt', + type: 'Vec', + }, + { + name: 'at', + type: 'Option', + }, + ], + type: 'FeeDetails', + }, + }, + types: {}, +}; diff --git a/js/api-augment/definitions/handles.ts b/js/api-augment/definitions/handles.ts new file mode 100644 index 0000000000..2be4ac2a9d --- /dev/null +++ b/js/api-augment/definitions/handles.ts @@ -0,0 +1,60 @@ +export default { + rpc: { + getHandleForMsa: { + description: 'Get handle for a given msa_id', + params: [ + { + name: 'msa_id', + type: 'MessageSourceId', + }, + ], + type: 'Option', + }, + getMsaForHandle: { + description: 'Get msa_id for a given handle', + params: [ + { + name: 'display_handle', + type: 'String', + }, + ], + type: 'Option', + }, + getNextSuffixes: { + description: 'Get next suffixes for a given handle and count', + params: [ + { + name: 'base_handle', + type: 'String', + }, + { + name: 'count', + type: 'u16', + }, + ], + type: 'PresumptiveSuffixesResponse', + }, + validateHandle: { + description: 'Check whether the supplied handle passes all the checks performed by claim_handle call.', + params: [ + { + name: 'base_handle', + type: 'String', + }, + ], + type: 'bool', + }, + }, + types: { + HandleSuffix: 'u16', + HandleResponse: { + base_handle: 'String', + canonical_base: 'String', + suffix: 'u16', + }, + PresumptiveSuffixesResponse: { + suffixes: 'Vec', + base_handle: 'String', + }, + }, +}; diff --git a/js/api-augment/definitions/index.ts b/js/api-augment/definitions/index.ts new file mode 100644 index 0000000000..7644dab34f --- /dev/null +++ b/js/api-augment/definitions/index.ts @@ -0,0 +1,11 @@ +// Add a default export here for each definition +// export { default as pallet } from "./pallet"; + +export { default as msa } from './msa.js'; +export { default as messages } from './messages.js'; +export { default as schemas } from './schemas.js'; +export { default as statefulStorage } from './statefulStorage.js'; +export { default as handles } from './handles.js'; +export { default as frequency } from './frequency.js'; +export { default as frequencyTxPayment } from './frequencyTxPayment.js'; +export { default as capacity } from './capacity.js'; diff --git a/js/api-augment/definitions/messages.ts b/js/api-augment/definitions/messages.ts new file mode 100644 index 0000000000..cdc0f0035d --- /dev/null +++ b/js/api-augment/definitions/messages.ts @@ -0,0 +1,41 @@ +export default { + rpc: { + getBySchemaId: { + description: 'Get messages by schemaId paginated', + params: [ + { + name: 'schema_id', + type: 'SchemaId', + }, + { + name: 'pagination', + type: 'BlockPaginationRequest', + }, + ], + type: 'BlockPaginationResponseMessage', + }, + }, + types: { + BlockPaginationRequest: { + from_block: 'BlockNumber', // inclusive + from_index: 'u32', // starts from 0 + to_block: 'BlockNumber', // exclusive + page_size: 'u32', + }, + MessageResponse: { + payload: 'Option>', // Serialized data in a user-defined schema format + cid: 'Option>', // The content address for an IPFS payload + provider_msa_id: 'MessageSourceId', // Message source account id of the Provider + msa_id: 'Option', // Message source account id (the original source) + index: 'u16', // index in block to get total order + block_number: 'BlockNumber', + payload_length: 'Option', // Length of IPFS payload file + }, + BlockPaginationResponseMessage: { + content: 'Vec', + has_next: 'bool', + next_block: 'Option', + next_index: 'Option', + }, + }, +}; diff --git a/js/api-augment/definitions/msa.ts b/js/api-augment/definitions/msa.ts new file mode 100644 index 0000000000..29162cc181 --- /dev/null +++ b/js/api-augment/definitions/msa.ts @@ -0,0 +1,81 @@ +export default { + rpc: { + checkDelegations: { + description: 'Test a list of MSAs to see if they have delegated to the provider MSA', + params: [ + { + name: 'delegator_msa_ids', + type: 'Vec', + }, + { + name: 'provider_msa_id', + type: 'ProviderId', + }, + { + name: 'block_number', + type: 'BlockNumber', + }, + { + name: 'schema_id', + type: 'Option', + }, + ], + type: 'Vec<(DelegatorId, bool)>', + }, + grantedSchemaIdsByMsaId: { + description: 'Fetch the list of schema ids that a delegator has granted to provider', + params: [ + { + name: 'delegator_msa_id', + type: 'DelegatorId', + }, + { + name: 'provider_msa_id', + type: 'ProviderId', + }, + ], + type: 'Option>', + }, + getKeysByMsaId: { + description: 'Fetch Keys for an MSA Id', + params: [ + { + name: 'msa_id', + type: 'MessageSourceId', + }, + ], + type: 'Option', + }, + getAllGrantedDelegationsByMsaId: { + description: 'Get the list of all delegated providers with schema permission grants', + params: [ + { + name: 'delegator_msa_id', + type: 'DelegatorId', + }, + ], + type: 'Vec', + }, + }, + types: { + MessageSourceId: 'u64', + DelegatorId: 'MessageSourceId', + ProviderId: 'MessageSourceId', + KeyInfoResponse: { + msa_keys: 'Vec', + msa_id: 'MessageSourceId', + }, + SchemaGrantResponse: { + schema_id: 'SchemaId', + revoked_at: 'BlockNumber', + }, + DelegationResponse: { + provider_id: 'ProviderId', + permissions: 'Vec', + }, + // Runtime types + // Not sure why these have to be noted here, but they do + CommonPrimitivesMsaDelegatorId: 'u64', + CommonPrimitivesMsaProviderId: 'u64', + }, +}; diff --git a/js/api-augment/definitions/schemas.ts b/js/api-augment/definitions/schemas.ts new file mode 100644 index 0000000000..8c6e75cf70 --- /dev/null +++ b/js/api-augment/definitions/schemas.ts @@ -0,0 +1,65 @@ +export default { + rpc: { + getBySchemaId: { + description: 'Get a Schema by Id', + params: [ + { + name: 'schema_id', + type: 'SchemaId', + }, + ], + type: 'Option', + }, + checkSchemaValidity: { + description: '', + params: [ + { + name: 'model', + type: 'SchemaModel', + }, + { + name: 'at', + type: 'BlockHash', + isOptional: true, + }, + ], + type: 'bool', + }, + getVersions: { + description: 'Get different versions and schema ids for a complete schema name or only a namespace', + params: [ + { + name: 'schema_name', + type: 'String', + }, + ], + type: 'Option>', + }, + }, + types: { + SchemaId: 'u16', + SchemaModel: 'Vec', + SchemaVersion: 'u8', + SchemaResponse: { + schema_id: 'SchemaId', + model: 'SchemaModel', + model_type: 'ModelType', + payload_location: 'PayloadLocation', + settings: 'Vec', + }, + ModelType: { + _enum: ['AvroBinary', 'Parquet'], + }, + PayloadLocation: { + _enum: ['OnChain', 'IPFS', 'Itemized', 'Paginated'], + }, + SchemaSetting: { + _enum: ['AppendOnly', 'SignatureRequired'], + }, + SchemaVersionResponse: { + schema_name: 'String', + schema_version: 'SchemaVersion', + schema_id: 'SchemaId', + }, + }, +}; diff --git a/js/api-augment/definitions/statefulStorage.ts b/js/api-augment/definitions/statefulStorage.ts new file mode 100644 index 0000000000..92919e7bdf --- /dev/null +++ b/js/api-augment/definitions/statefulStorage.ts @@ -0,0 +1,56 @@ +export default { + rpc: { + getPaginatedStorage: { + description: 'Gets pages of stateful storage', + params: [ + { + name: 'msa_id', + type: 'MessageSourceId', + }, + { + name: 'schema_id', + type: 'SchemaId', + }, + ], + type: 'Vec', + }, + getItemizedStorage: { + description: 'Gets itemized of stateful storage', + params: [ + { + name: 'msa_id', + type: 'MessageSourceId', + }, + { + name: 'schema_id', + type: 'SchemaId', + }, + ], + type: 'ItemizedStoragePageResponse', + }, + }, + types: { + PageId: 'u16', + PageHash: 'u32', + PageNonce: 'u16', + ItemizedStorageResponse: { + index: 'u16', + payload: 'Vec', + }, + PaginatedStorageResponse: { + page_id: 'PageId', + msa_id: 'MessageSourceId', + schema_id: 'SchemaId', + content_hash: 'PageHash', + nonce: 'PageNonce', + payload: 'Vec', + }, + ItemizedStoragePageResponse: { + msa_id: 'MessageSourceId', + schema_id: 'SchemaId', + content_hash: 'PageHash', + nonce: 'PageNonce', + items: 'Vec', + }, + }, +}; diff --git a/js/api-augment/eslint.config.mjs b/js/api-augment/eslint.config.mjs new file mode 100644 index 0000000000..6a871043ea --- /dev/null +++ b/js/api-augment/eslint.config.mjs @@ -0,0 +1,52 @@ +// @ts-check + +import eslint from '@eslint/js'; +import tseslint from 'typescript-eslint'; +import mochaPlugin from 'eslint-plugin-mocha'; +import globals from 'globals'; + +export default tseslint.config( + eslint.configs.recommended, + mochaPlugin.configs.recommended, + ...tseslint.configs.strict, + ...tseslint.configs.stylistic, + { + ignores: ['dist/', 'scripts/'], + }, + { + linterOptions: { + // Needed as the generated code uses this + reportUnusedDisableDirectives: false, + }, + }, + { + languageOptions: { + parserOptions: { + projectService: { + allowDefaultProject: ['eslint.config.mjs', 'test/*.ts'], + defaultProject: './tsconfig.eslint.json', + }, + }, + }, + }, + { + rules: { + '@typescript-eslint/no-empty-interface': 'off', + '@typescript-eslint/no-unused-vars': 'off', + '@typescript-eslint/no-explicit-any': 'off', + semi: ['error', 'always'], + 'mocha/no-setup-in-describe': 'off', + 'no-use-before-define': 'off', + 'no-unused-vars': 'off', + 'no-var': 'error', + 'id-length': [ + 'error', + { + exceptionPatterns: ['[i-k]', 'e', 'c', 'x', 'y', 'r', 's', 'v'], + properties: 'never', + }, + ], + 'allow-namespace': 'off', + }, + } +); diff --git a/js/api-augment/index.ts b/js/api-augment/index.ts new file mode 100644 index 0000000000..1a61267126 --- /dev/null +++ b/js/api-augment/index.ts @@ -0,0 +1,71 @@ +import { ExtDef } from '@polkadot/types/extrinsic/signedExtensions/types'; +import { DefinitionRpc } from '@polkadot/types/types'; +import './interfaces/types-lookup.js'; +import './interfaces/augment-api.js'; +import './interfaces/augment-types.js'; +import './interfaces/index.js'; +import * as definitions from './interfaces/definitions.js'; +import { v1SubstrateRpcs } from './substrate_v1_rpcs.js'; + +/** + * Build up the types for ApiPromise.create + */ +export const types = Object.entries(definitions).reduce((acc, [_key, value]) => { + return { + ...acc, + ...value.types, + }; +}, {}); + +/** + * Build up the rpc calls for ApiPromise.create + */ +export const rpc: Record> = Object.entries(definitions).reduce( + (acc, [key, value]) => { + return { + ...acc, + [key]: value.rpc, + }; + }, + // v1 rpc calls to be ignored + { ...v1SubstrateRpcs } +); + +/** + * Frequency Specific Signed Extensions + */ +export const signedExtensions: ExtDef = { + // `CheckFreeExtrinsicUse` has no payload or extrinsic requirements + CheckFreeExtrinsicUse: { + extrinsic: {}, + payload: {}, + }, + HandlesSignedExtension: { + extrinsic: {}, + payload: {}, + }, + StaleHashCheckExtension: { + extrinsic: {}, + payload: {}, + }, + StorageWeightReclaim: { + extrinsic: {}, + payload: {}, + }, +}; + +/** + * Export for easy use with Polkadot API's ApiPromise + * + * ```javascript + * const api = await ApiPromise.create({ + * ...options, + * provider + * }); + * ``` + */ +export const options = { + rpc, + types, + signedExtensions, +}; diff --git a/js/api-augment/interfaces/definitions.ts b/js/api-augment/interfaces/definitions.ts new file mode 100644 index 0000000000..085b2a3060 --- /dev/null +++ b/js/api-augment/interfaces/definitions.ts @@ -0,0 +1 @@ +export * from "../definitions/index.js"; diff --git a/js/api-augment/package-lock.json b/js/api-augment/package-lock.json new file mode 100644 index 0000000000..fea4ced886 --- /dev/null +++ b/js/api-augment/package-lock.json @@ -0,0 +1,3426 @@ +{ + "name": "@frequency-chain/api-augment", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@frequency-chain/api-augment", + "version": "0.0.0", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/api": "^16.1.1", + "@polkadot/rpc-provider": "^16.1.1", + "@polkadot/types": "^16.1.1", + "globals": "^16.2.0" + }, + "devDependencies": { + "@eslint/js": "^9.27.0", + "@polkadot/typegen": "^16.1.1", + "@types/mocha": "^10.0.10", + "eslint": "^9.27.0", + "eslint-plugin-mocha": "^11.1.0", + "mocha": "11.5.0", + "prettier": "^3.5.3", + "tsx": "^4.19.4", + "typescript": "^5.8.3", + "typescript-eslint": "^8.33.0" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", + "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", + "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", + "dev": true, + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz", + "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", + "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.27.0.tgz", + "integrity": "sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz", + "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==", + "dev": true, + "dependencies": { + "@eslint/core": "^0.14.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@noble/curves": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", + "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@polkadot-api/json-rpc-provider": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider/-/json-rpc-provider-0.0.1.tgz", + "integrity": "sha512-/SMC/l7foRjpykLTUTacIH05H3mr9ip8b5xxfwXlVezXrNVLp3Cv0GX6uItkKd+ZjzVPf3PFrDF2B2/HLSNESA==", + "optional": true + }, + "node_modules/@polkadot-api/json-rpc-provider-proxy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider-proxy/-/json-rpc-provider-proxy-0.1.0.tgz", + "integrity": "sha512-8GSFE5+EF73MCuLQm8tjrbCqlgclcHBSRaswvXziJ0ZW7iw3UEMsKkkKvELayWyBuOPa2T5i1nj6gFOeIsqvrg==", + "optional": true + }, + "node_modules/@polkadot-api/metadata-builders": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@polkadot-api/metadata-builders/-/metadata-builders-0.3.2.tgz", + "integrity": "sha512-TKpfoT6vTb+513KDzMBTfCb/ORdgRnsS3TDFpOhAhZ08ikvK+hjHMt5plPiAX/OWkm1Wc9I3+K6W0hX5Ab7MVg==", + "optional": true, + "dependencies": { + "@polkadot-api/substrate-bindings": "0.6.0", + "@polkadot-api/utils": "0.1.0" + } + }, + "node_modules/@polkadot-api/observable-client": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@polkadot-api/observable-client/-/observable-client-0.3.2.tgz", + "integrity": "sha512-HGgqWgEutVyOBXoGOPp4+IAq6CNdK/3MfQJmhCJb8YaJiaK4W6aRGrdQuQSTPHfERHCARt9BrOmEvTXAT257Ug==", + "optional": true, + "dependencies": { + "@polkadot-api/metadata-builders": "0.3.2", + "@polkadot-api/substrate-bindings": "0.6.0", + "@polkadot-api/utils": "0.1.0" + }, + "peerDependencies": { + "@polkadot-api/substrate-client": "0.1.4", + "rxjs": ">=7.8.0" + } + }, + "node_modules/@polkadot-api/substrate-bindings": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-bindings/-/substrate-bindings-0.6.0.tgz", + "integrity": "sha512-lGuhE74NA1/PqdN7fKFdE5C1gNYX357j1tWzdlPXI0kQ7h3kN0zfxNOpPUN7dIrPcOFZ6C0tRRVrBylXkI6xPw==", + "optional": true, + "dependencies": { + "@noble/hashes": "^1.3.1", + "@polkadot-api/utils": "0.1.0", + "@scure/base": "^1.1.1", + "scale-ts": "^1.6.0" + } + }, + "node_modules/@polkadot-api/substrate-client": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-client/-/substrate-client-0.1.4.tgz", + "integrity": "sha512-MljrPobN0ZWTpn++da9vOvt+Ex+NlqTlr/XT7zi9sqPtDJiQcYl+d29hFAgpaeTqbeQKZwz3WDE9xcEfLE8c5A==", + "optional": true, + "dependencies": { + "@polkadot-api/json-rpc-provider": "0.0.1", + "@polkadot-api/utils": "0.1.0" + } + }, + "node_modules/@polkadot-api/utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/utils/-/utils-0.1.0.tgz", + "integrity": "sha512-MXzWZeuGxKizPx2Xf/47wx9sr/uxKw39bVJUptTJdsaQn/TGq+z310mHzf1RCGvC1diHM8f593KrnDgc9oNbJA==", + "optional": true + }, + "node_modules/@polkadot/api": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-16.1.1.tgz", + "integrity": "sha512-atlnmcDjDZyoE9w460Rrve0LnRv9B0W1fuy1ay9vfBQ03ez3nwnoP4sP9ldYxcmU9QEs5/HTn6nvVSZXowCYKw==", + "dependencies": { + "@polkadot/api-augment": "16.1.1", + "@polkadot/api-base": "16.1.1", + "@polkadot/api-derive": "16.1.1", + "@polkadot/keyring": "^13.5.1", + "@polkadot/rpc-augment": "16.1.1", + "@polkadot/rpc-core": "16.1.1", + "@polkadot/rpc-provider": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-augment": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/types-create": "16.1.1", + "@polkadot/types-known": "16.1.1", + "@polkadot/util": "^13.5.1", + "@polkadot/util-crypto": "^13.5.1", + "eventemitter3": "^5.0.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/api-augment": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-16.1.1.tgz", + "integrity": "sha512-VTj03C1iJEZ//IBKa4sRxfz3WObygXtyOqYCRMJEtH74roIZvJpIjhmZwJqGD8NijPO3mgZOTzaLzjoeLF1jMw==", + "dependencies": { + "@polkadot/api-base": "16.1.1", + "@polkadot/rpc-augment": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-augment": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/api-base": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-16.1.1.tgz", + "integrity": "sha512-PUpc0Ir7ru51RuVhZMmbleicKMI43s5T1FHhOHmtzbMUTnwMbXtWHKzIfkHxqXJrg10EwO8mzcymJeHbA1TR+g==", + "dependencies": { + "@polkadot/rpc-core": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/util": "^13.5.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/api-derive": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-16.1.1.tgz", + "integrity": "sha512-sC0j67RzDRwe3sHw0trDFz7tfFu68+3pQT89ash9TUVa8AD0i4USIirg4dNVWt7CrK9eW3Q4edqs1p6RXurz7g==", + "dependencies": { + "@polkadot/api": "16.1.1", + "@polkadot/api-augment": "16.1.1", + "@polkadot/api-base": "16.1.1", + "@polkadot/rpc-core": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "@polkadot/util-crypto": "^13.5.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/keyring": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-13.5.1.tgz", + "integrity": "sha512-dEl679aoMv9gOzWJA13Jb2HUGqRi6/zKjEtg+qbiEryCSjUqfNKyO8liuwMFy0VP3qxJb1FkxNe6MnG1NwbU5Q==", + "dependencies": { + "@polkadot/util": "13.5.1", + "@polkadot/util-crypto": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "13.5.1", + "@polkadot/util-crypto": "13.5.1" + } + }, + "node_modules/@polkadot/networks": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-13.5.1.tgz", + "integrity": "sha512-w5HS209pHZhqJ7AVqJqFApO4OcwlxjfQ7mp2dE/vL5qA5RnsEx/3fBYJ6h3z/k5Ggac0+Zl1vMZAF1gW8S/F9A==", + "dependencies": { + "@polkadot/util": "13.5.1", + "@substrate/ss58-registry": "^1.51.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/rpc-augment": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-16.1.1.tgz", + "integrity": "sha512-o0CgmzQ06qV0nKlKPccumOmPsZ3f2VeQp2u8tndLOLG5A7C9k+XML92ldJHN2Dj+XKHLhjHG4syPEBET7ugZCg==", + "dependencies": { + "@polkadot/rpc-core": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/rpc-core": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-16.1.1.tgz", + "integrity": "sha512-BUfY6868kJhPXCyQuRUg644pWGhynuWvPvglJXsOf+A3pRhKm+cNWEjs8puQmUc38adl6QocBeUJHfTnfrtKPg==", + "dependencies": { + "@polkadot/rpc-augment": "16.1.1", + "@polkadot/rpc-provider": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/util": "^13.5.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/rpc-provider": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-16.1.1.tgz", + "integrity": "sha512-LH22P6OSw304pwvdpjuxc6ARtvrUUvkBF02n4FsJBo555y9d+2dcA5CA4FLI8WNvOXf3hOLwxz/UPxA7VATksw==", + "dependencies": { + "@polkadot/keyring": "^13.5.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-support": "16.1.1", + "@polkadot/util": "^13.5.1", + "@polkadot/util-crypto": "^13.5.1", + "@polkadot/x-fetch": "^13.5.1", + "@polkadot/x-global": "^13.5.1", + "@polkadot/x-ws": "^13.5.1", + "eventemitter3": "^5.0.1", + "mock-socket": "^9.3.1", + "nock": "^13.5.5", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@substrate/connect": "0.8.11" + } + }, + "node_modules/@polkadot/typegen": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/typegen/-/typegen-16.1.1.tgz", + "integrity": "sha512-6ohncFR2fq38/7QYt4wu9x/NsClDYGyHfaAcTWLFWopEDd22tiu+K/14o10oZnA2tBqPcdcnkYCLAZRLITUWGA==", + "dev": true, + "dependencies": { + "@polkadot/api": "16.1.1", + "@polkadot/api-augment": "16.1.1", + "@polkadot/api-derive": "16.1.1", + "@polkadot/rpc-augment": "16.1.1", + "@polkadot/rpc-provider": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-augment": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/types-create": "16.1.1", + "@polkadot/types-support": "16.1.1", + "@polkadot/util": "^13.5.1", + "@polkadot/util-crypto": "^13.5.1", + "@polkadot/x-ws": "^13.5.1", + "comment-parser": "^1.4.1", + "handlebars": "^4.7.8", + "tslib": "^2.8.1", + "yargs": "^17.7.2" + }, + "bin": { + "polkadot-types-chain-info": "scripts/polkadot-types-chain-info.mjs", + "polkadot-types-from-chain": "scripts/polkadot-types-from-chain.mjs", + "polkadot-types-from-defs": "scripts/polkadot-types-from-defs.mjs", + "polkadot-types-internal-interfaces": "scripts/polkadot-types-internal-interfaces.mjs", + "polkadot-types-internal-metadata": "scripts/polkadot-types-internal-metadata.mjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-16.1.1.tgz", + "integrity": "sha512-edEKvnCrWoPjW2sRUdER4gm8zm+gilVhZXqAtYH0gHJkBzbhCXZ5M27E62ztR1at9XyHDsTUeuq51ELHOUbbFQ==", + "dependencies": { + "@polkadot/keyring": "^13.5.1", + "@polkadot/types-augment": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/types-create": "16.1.1", + "@polkadot/util": "^13.5.1", + "@polkadot/util-crypto": "^13.5.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-augment": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-16.1.1.tgz", + "integrity": "sha512-Ozh7nEyAnyHK9x1CnRYlG/rnarvuauAIbvUljtA7f/3RI570kRTpeOR83QkDWdaLywno96A4zdFXBfI0nmq1Yw==", + "dependencies": { + "@polkadot/types": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-codec": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-16.1.1.tgz", + "integrity": "sha512-REcSkOfxFGPJWEbuCIr5EA0argnZwYVYkE14f97XVM9rV36/FEyu1al47fSjp8iHA3e8Fsd+V+WTZRwlUa51qA==", + "dependencies": { + "@polkadot/util": "^13.5.1", + "@polkadot/x-bigint": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-create": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-16.1.1.tgz", + "integrity": "sha512-dpd5HKRfNQlDYMtMdofrhr99O7q8EWkqZyTadFuTYyd7LECb9FUD8nO6RbcmpXYA9F3r5g/EwvsmZFZaQW9LqA==", + "dependencies": { + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-known": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-16.1.1.tgz", + "integrity": "sha512-Qp6C+wppqvooDFU2T0Ynmgo72bQOUkY6dLVoGmZWq/OO6hXuLCg8SAncJP/CzcueEA2/Anzk3DQbfZVlBEr6Cg==", + "dependencies": { + "@polkadot/networks": "^13.5.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/types-create": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-support": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-16.1.1.tgz", + "integrity": "sha512-pVEBVaXuIkhuMX6J4Cn+cGcLOPsz2qu4EuZXwwA/ioMIICclh+7q6+fOfInogIgmbcYHZFDDsyXG3wRw7ThZkA==", + "dependencies": { + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/util": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-13.5.1.tgz", + "integrity": "sha512-Anu4fsmMconvU+WXGFESNQp4qFjbvZnS4zD4I54W5gW70klrmrdfP2jGYhejVkm0Pf43RREN63G7Rew8+sXUmw==", + "dependencies": { + "@polkadot/x-bigint": "13.5.1", + "@polkadot/x-global": "13.5.1", + "@polkadot/x-textdecoder": "13.5.1", + "@polkadot/x-textencoder": "13.5.1", + "@types/bn.js": "^5.1.6", + "bn.js": "^5.2.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/util-crypto": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-13.5.1.tgz", + "integrity": "sha512-HIuTRpkulIzmgCU+GIXbEEkVbikvrK+5v8XZ7Ll45m1dLsxnrJeEbNsCLUwI/+D9Jd0iF3+T12GybuetlXeu+A==", + "dependencies": { + "@noble/curves": "^1.3.0", + "@noble/hashes": "^1.3.3", + "@polkadot/networks": "13.5.1", + "@polkadot/util": "13.5.1", + "@polkadot/wasm-crypto": "^7.4.1", + "@polkadot/wasm-util": "^7.4.1", + "@polkadot/x-bigint": "13.5.1", + "@polkadot/x-randomvalues": "13.5.1", + "@scure/base": "^1.1.7", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "13.5.1" + } + }, + "node_modules/@polkadot/wasm-bridge": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-7.4.1.tgz", + "integrity": "sha512-tdkJaV453tezBxhF39r4oeG0A39sPKGDJmN81LYLf+Fihb7astzwju+u75BRmDrHZjZIv00un3razJEWCxze6g==", + "dependencies": { + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/wasm-crypto": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-7.4.1.tgz", + "integrity": "sha512-kHN/kF7hYxm1y0WeFLWeWir6oTzvcFmR4N8fJJokR+ajYbdmrafPN+6iLgQVbhZnDdxyv9jWDuRRsDnBx8tPMQ==", + "dependencies": { + "@polkadot/wasm-bridge": "7.4.1", + "@polkadot/wasm-crypto-asmjs": "7.4.1", + "@polkadot/wasm-crypto-init": "7.4.1", + "@polkadot/wasm-crypto-wasm": "7.4.1", + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-asmjs": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.4.1.tgz", + "integrity": "sha512-pwU8QXhUW7IberyHJIQr37IhbB6DPkCG5FhozCiNTq4vFBsFPjm9q8aZh7oX1QHQaiAZa2m2/VjIVE+FHGbvHQ==", + "dependencies": { + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-init": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.4.1.tgz", + "integrity": "sha512-AVka33+f7MvXEEIGq5U0dhaA2SaXMXnxVCQyhJTaCnJ5bRDj0Xlm3ijwDEQUiaDql7EikbkkRtmlvs95eSUWYQ==", + "dependencies": { + "@polkadot/wasm-bridge": "7.4.1", + "@polkadot/wasm-crypto-asmjs": "7.4.1", + "@polkadot/wasm-crypto-wasm": "7.4.1", + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-wasm": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.4.1.tgz", + "integrity": "sha512-PE1OAoupFR0ZOV2O8tr7D1FEUAwaggzxtfs3Aa5gr+yxlSOaWUKeqsOYe1KdrcjmZVV3iINEAXxgrbzCmiuONg==", + "dependencies": { + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/wasm-util": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-7.4.1.tgz", + "integrity": "sha512-RAcxNFf3zzpkr+LX/ItAsvj+QyM56TomJ0xjUMo4wKkHjwsxkz4dWJtx5knIgQz/OthqSDMR59VNEycQeNuXzA==", + "dependencies": { + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/x-bigint": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-13.5.1.tgz", + "integrity": "sha512-5GiYznWm/GdCe9nQwL/EEVLXFqK2JZqcNnWC/r196lRujqKd24r90WPHYw18d9fsii/8J4DOKc8cCRfxjMBdCw==", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-fetch": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-13.5.1.tgz", + "integrity": "sha512-2qTvxMdxlAnyY2xOulm5ZazWFRegUB6xOX7yTBxSvuAXiYGecuiZa5NikCYl+nB8iZW4ZGraLFyt9otzJHL5cw==", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "node-fetch": "^3.3.2", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-global": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-13.5.1.tgz", + "integrity": "sha512-8A9dvyGmXtQf8jCqGSxa4R8JLh43K8T1//ht7UU6Bsv7we2svdQ+O1FXblwAnAHCcboYeyYqzrTwnRnQlyrdWQ==", + "dependencies": { + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-randomvalues": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-13.5.1.tgz", + "integrity": "sha512-FT/A8EWIBNACWfxo+fDzRrkmK8TQxgaZjtr5E+/i8MYqscHFqiX9PmbMuoGC1T4w+piihHU1JD8rLTip2K8NIw==", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "13.5.1", + "@polkadot/wasm-util": "*" + } + }, + "node_modules/@polkadot/x-textdecoder": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-13.5.1.tgz", + "integrity": "sha512-iInpeywdQDusB3fz7F+La74UQoTXC8F4CsmZYEoQeZekb6CoAgtLkQZhw7ckV5+MmscLeOvZCI1wYBRqCd+qqw==", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-textencoder": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-13.5.1.tgz", + "integrity": "sha512-2QS22Eqrsjo7BCMHnL0EGheflDXSW0xpI+Zi0ULvci4uzHK4ZUgfFtEzEFg1kbKZ8ShvRpkQbGzp8nJqwijjgQ==", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-ws": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-13.5.1.tgz", + "integrity": "sha512-z9ks9qd3G78nnXcMRQN9GXtJ5BRAwRaRCVngY/ot0o4dmOdPyiciyNPOC8lNWvXF8Z1zyUqkKWwzQ33DzPFCWQ==", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0", + "ws": "^8.18.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@scure/base": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.5.tgz", + "integrity": "sha512-9rE6EOVeIQzt5TSu4v+K523F8u6DhBsoZWPGKlnCshhlDhy0kJzUX4V+tr2dWmzF1GdekvThABoEQBGBQI7xZw==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@substrate/connect": { + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.8.11.tgz", + "integrity": "sha512-ofLs1PAO9AtDdPbdyTYj217Pe+lBfTLltdHDs3ds8no0BseoLeAGxpz1mHfi7zB4IxI3YyAiLjH6U8cw4pj4Nw==", + "deprecated": "versions below 1.x are no longer maintained", + "optional": true, + "dependencies": { + "@substrate/connect-extension-protocol": "^2.0.0", + "@substrate/connect-known-chains": "^1.1.5", + "@substrate/light-client-extension-helpers": "^1.0.0", + "smoldot": "2.0.26" + } + }, + "node_modules/@substrate/connect-extension-protocol": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@substrate/connect-extension-protocol/-/connect-extension-protocol-2.2.2.tgz", + "integrity": "sha512-t66jwrXA0s5Goq82ZtjagLNd7DPGCNjHeehRlE/gcJmJ+G56C0W+2plqOMRicJ8XGR1/YFnUSEqUFiSNbjGrAA==", + "optional": true + }, + "node_modules/@substrate/connect-known-chains": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@substrate/connect-known-chains/-/connect-known-chains-1.10.1.tgz", + "integrity": "sha512-NY+Pi6jd0WKq873dX5Ufo0h/jJ6RNpnDBsUWxCgOHkNpvmdnslKZW0pfKeUDlP412uaz2twPIDTzDw+LbTvvYQ==", + "optional": true + }, + "node_modules/@substrate/light-client-extension-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@substrate/light-client-extension-helpers/-/light-client-extension-helpers-1.0.0.tgz", + "integrity": "sha512-TdKlni1mBBZptOaeVrKnusMg/UBpWUORNDv5fdCaJklP4RJiFOzBCrzC+CyVI5kQzsXBisZ+2pXm+rIjS38kHg==", + "optional": true, + "dependencies": { + "@polkadot-api/json-rpc-provider": "^0.0.1", + "@polkadot-api/json-rpc-provider-proxy": "^0.1.0", + "@polkadot-api/observable-client": "^0.3.0", + "@polkadot-api/substrate-client": "^0.1.2", + "@substrate/connect-extension-protocol": "^2.0.0", + "@substrate/connect-known-chains": "^1.1.5", + "rxjs": "^7.8.1" + }, + "peerDependencies": { + "smoldot": "2.x" + } + }, + "node_modules/@substrate/ss58-registry": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.51.0.tgz", + "integrity": "sha512-TWDurLiPxndFgKjVavCniytBIw+t4ViOi7TYp9h/D0NMmkEc9klFTo+827eyEJ0lELpqO207Ey7uGxUa+BS1jQ==" + }, + "node_modules/@types/bn.js": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz", + "integrity": "sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/mocha": { + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", + "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", + "dev": true + }, + "node_modules/@types/node": { + "version": "22.15.23", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.23.tgz", + "integrity": "sha512-7Ec1zaFPF4RJ0eXu1YT/xgiebqwqoJz8rYPDi/O2BcZ++Wpt0Kq9cl0eg6NN6bYbPnR67ZLo7St5Q3UK0SnARw==", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.33.0.tgz", + "integrity": "sha512-CACyQuqSHt7ma3Ns601xykeBK/rDeZa3w6IS6UtMQbixO5DWy+8TilKkviGDH6jtWCo8FGRKEK5cLLkPvEammQ==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.33.0", + "@typescript-eslint/type-utils": "8.33.0", + "@typescript-eslint/utils": "8.33.0", + "@typescript-eslint/visitor-keys": "8.33.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.33.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz", + "integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.33.0.tgz", + "integrity": "sha512-JaehZvf6m0yqYp34+RVnihBAChkqeH+tqqhS0GuX1qgPpwLvmTPheKEs6OeCK6hVJgXZHJ2vbjnC9j119auStQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.33.0", + "@typescript-eslint/types": "8.33.0", + "@typescript-eslint/typescript-estree": "8.33.0", + "@typescript-eslint/visitor-keys": "8.33.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.0.tgz", + "integrity": "sha512-d1hz0u9l6N+u/gcrk6s6gYdl7/+pp8yHheRTqP6X5hVDKALEaTn8WfGiit7G511yueBEL3OpOEpD+3/MBdoN+A==", + "dev": true, + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.33.0", + "@typescript-eslint/types": "^8.33.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.33.0.tgz", + "integrity": "sha512-LMi/oqrzpqxyO72ltP+dBSP6V0xiUb4saY7WLtxSfiNEBI8m321LLVFU9/QDJxjDQG9/tjSqKz/E3380TEqSTw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.33.0", + "@typescript-eslint/visitor-keys": "8.33.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.0.tgz", + "integrity": "sha512-sTkETlbqhEoiFmGr1gsdq5HyVbSOF0145SYDJ/EQmXHtKViCaGvnyLqWFFHtEXoS0J1yU8Wyou2UGmgW88fEug==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.33.0.tgz", + "integrity": "sha512-lScnHNCBqL1QayuSrWeqAL5GmqNdVUQAAMTaCwdYEdWfIrSrOGzyLGRCHXcCixa5NK6i5l0AfSO2oBSjCjf4XQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "8.33.0", + "@typescript-eslint/utils": "8.33.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.33.0.tgz", + "integrity": "sha512-DKuXOKpM5IDT1FA2g9x9x1Ug81YuKrzf4mYX8FAVSNu5Wo/LELHWQyM1pQaDkI42bX15PWl0vNPt1uGiIFUOpg==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.0.tgz", + "integrity": "sha512-vegY4FQoB6jL97Tu/lWRsAiUUp8qJTqzAmENH2k59SJhw0Th1oszb9Idq/FyyONLuNqT1OADJPXfyUNOR8SzAQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/project-service": "8.33.0", + "@typescript-eslint/tsconfig-utils": "8.33.0", + "@typescript-eslint/types": "8.33.0", + "@typescript-eslint/visitor-keys": "8.33.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.33.0.tgz", + "integrity": "sha512-lPFuQaLA9aSNa7D5u2EpRiqdAUhzShwGg/nhpBlc4GR6kcTABttCuyjFs8BcEZ8VWrjCBof/bePhP3Q3fS+Yrw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.33.0", + "@typescript-eslint/types": "8.33.0", + "@typescript-eslint/typescript-estree": "8.33.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.0.tgz", + "integrity": "sha512-7RW7CMYoskiz5OOGAWjJFxgb7c5UNjTG292gYhWeOAcFmYCtVCSqjqSBj5zMhxbXo2JOW95YYrUWJfU0zrpaGQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.33.0", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/bn.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", + "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/comment-parser": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", + "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", + "dev": true, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/diff": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", + "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.4", + "@esbuild/android-arm": "0.25.4", + "@esbuild/android-arm64": "0.25.4", + "@esbuild/android-x64": "0.25.4", + "@esbuild/darwin-arm64": "0.25.4", + "@esbuild/darwin-x64": "0.25.4", + "@esbuild/freebsd-arm64": "0.25.4", + "@esbuild/freebsd-x64": "0.25.4", + "@esbuild/linux-arm": "0.25.4", + "@esbuild/linux-arm64": "0.25.4", + "@esbuild/linux-ia32": "0.25.4", + "@esbuild/linux-loong64": "0.25.4", + "@esbuild/linux-mips64el": "0.25.4", + "@esbuild/linux-ppc64": "0.25.4", + "@esbuild/linux-riscv64": "0.25.4", + "@esbuild/linux-s390x": "0.25.4", + "@esbuild/linux-x64": "0.25.4", + "@esbuild/netbsd-arm64": "0.25.4", + "@esbuild/netbsd-x64": "0.25.4", + "@esbuild/openbsd-arm64": "0.25.4", + "@esbuild/openbsd-x64": "0.25.4", + "@esbuild/sunos-x64": "0.25.4", + "@esbuild/win32-arm64": "0.25.4", + "@esbuild/win32-ia32": "0.25.4", + "@esbuild/win32-x64": "0.25.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.27.0.tgz", + "integrity": "sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.20.0", + "@eslint/config-helpers": "^0.2.1", + "@eslint/core": "^0.14.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.27.0", + "@eslint/plugin-kit": "^0.3.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-mocha": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-11.1.0.tgz", + "integrity": "sha512-rKntVWRsQFPbf8OkSgVNRVRrcVAPaGTyEgWCEyXaPDJkTl0v5/lwu1vTk5sWiUJU8l2sxwvGUZzSNrEKdVMeQw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.1", + "globals": "^15.14.0" + }, + "peerDependencies": { + "eslint": ">=9.0.0" + } + }, + "node_modules/eslint-plugin-mocha/node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-scope": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-tsconfig": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", + "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.2.0.tgz", + "integrity": "sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mocha": { + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.5.0.tgz", + "integrity": "sha512-VKDjhy6LMTKm0WgNEdlY77YVsD49LZnPSXJAaPNL9NRYQADxvORsyG1DIQY6v53BKTnlNbEE2MbVCDbnxr4K3w==", + "dev": true, + "dependencies": { + "browser-stdout": "^1.3.1", + "chokidar": "^4.0.1", + "debug": "^4.3.5", + "diff": "^7.0.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^10.4.5", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^9.0.5", + "ms": "^2.1.3", + "picocolors": "^1.1.1", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/mock-socket": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.3.1.tgz", + "integrity": "sha512-qxBgB7Qa2sEQgHFjj0dSigq7fX4k6Saisd5Nelwp2q8mlbAFh5dHV9JTTlF8viYJLSSWgMCZFUom8PJcMNBoJw==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/nock": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.6.tgz", + "integrity": "sha512-o2zOYiCpzRqSzPj0Zt/dQ/DqZeYoaQ7TUonc/xUPjCGl9WeHpNbxgVvOquXYAaJzI0M9BXV3HTzG0p8IUAbBTQ==", + "dependencies": { + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "propagate": "^2.0.0" + }, + "engines": { + "node": ">= 10.13" + } + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/propagate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/scale-ts": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/scale-ts/-/scale-ts-1.6.1.tgz", + "integrity": "sha512-PBMc2AWc6wSEqJYBDPcyCLUj9/tMKnLX70jLOSndMtcUoLQucP/DM0vnQo1wJAYjTrQiq8iG9rD0q6wFzgjH7g==", + "optional": true + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/smoldot": { + "version": "2.0.26", + "resolved": "https://registry.npmjs.org/smoldot/-/smoldot-2.0.26.tgz", + "integrity": "sha512-F+qYmH4z2s2FK+CxGj8moYcd1ekSIKH8ywkdqlOz88Dat35iB1DIYL11aILN46YSGMzQW/lbJNS307zBSDN5Ig==", + "optional": true, + "dependencies": { + "ws": "^8.8.1" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/tsx": { + "version": "4.19.4", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.4.tgz", + "integrity": "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==", + "dev": true, + "dependencies": { + "esbuild": "~0.25.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.33.0.tgz", + "integrity": "sha512-5YmNhF24ylCsvdNW2oJwMzTbaeO4bg90KeGtMjUw0AGtHksgEPLRTUil+coHwCfiu4QjVJFnjp94DmU6zV7DhQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.33.0", + "@typescript-eslint/parser": "8.33.0", + "@typescript-eslint/utils": "8.33.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==" + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, + "node_modules/workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ws": { + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/js/api-augment/package.json b/js/api-augment/package.json new file mode 100644 index 0000000000..beb100d2a5 --- /dev/null +++ b/js/api-augment/package.json @@ -0,0 +1,54 @@ +{ + "name": "@frequency-chain/api-augment", + "version": "0.0.0", + "bugs": { + "url": "https://github.com/frequency-chain/frequency/issues" + }, + "description": "RPC configuration for Frequency for use with Polkadotjs API", + "main": "index.js", + "type": "module", + "repository": { + "type": "git", + "url": "https://github.com/frequency-chain/frequency.git", + "directory": "js/api-augment" + }, + "scripts": { + "clean": "rm -Rf dist interfaces", + "clean:generated": "rm -Rf dist metadata.* interfaces", + "pregenerate": "npm run clean && node scripts/pre-gen.cjs", + "generate": "npm run generate:defs && npm run generate:meta", + "package": "node scripts/package.cjs", + "prepackage": "cp CONTRIBUTING.md README.md ../../LICENSE ./dist", + "prebuild": "npm run generate", + "build": "tsc -p ./tsconfig.types.json && tsc -p ./tsconfig.cjs.json && tsc -p ./tsconfig.esm.json", + "build:types-json": "node scripts/generate.mjs", + "postbuild": "npm run package && npm run build:types-json", + "fetch:local": "curl -H \"Content-Type: application/json\" -d '{\"id\":\"1\", \"jsonrpc\":\"2.0\", \"method\": \"state_call\", \"params\":[\"Metadata_metadata_at_version\", \"0x0f000000\"]}' http://localhost:9944 -o ./metadata.json", + "generate:defs": "node --import=tsx/esm node_modules/.bin/polkadot-types-from-defs --package @frequency-chain/api-augment --input ./interfaces --endpoint ./metadata.json", + "generate:meta": "node --import=tsx/esm node_modules/.bin/polkadot-types-from-chain --package @frequency-chain/api-augment --endpoint ./metadata.json --output ./interfaces", + "test": "mocha --import=tsx ./test/**/*.test.ts", + "test:only": "mocha --import=tsx", + "format": "tsc --noEmit --pretty && prettier --write . && eslint --fix", + "lint": "tsc --noEmit --pretty && prettier --check . && eslint" + }, + "author": "frequency-chain", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/api": "^16.1.1", + "@polkadot/rpc-provider": "^16.1.1", + "@polkadot/types": "^16.1.1", + "globals": "^16.2.0" + }, + "devDependencies": { + "@eslint/js": "^9.27.0", + "@polkadot/typegen": "^16.1.1", + "@types/mocha": "^10.0.10", + "eslint": "^9.27.0", + "eslint-plugin-mocha": "^11.1.0", + "mocha": "11.5.0", + "prettier": "^3.5.3", + "tsx": "^4.19.4", + "typescript": "^5.8.3", + "typescript-eslint": "^8.33.0" + } +} diff --git a/js/api-augment/scripts/generate.mjs b/js/api-augment/scripts/generate.mjs new file mode 100644 index 0000000000..6691f2c0b1 --- /dev/null +++ b/js/api-augment/scripts/generate.mjs @@ -0,0 +1,15 @@ +import { types } from '../dist/esm/index.js'; +import fs from 'fs'; +import path from 'path'; +import { fileURLToPath } from 'url'; +import { dirname } from 'path'; + +// Get the filename from the URL +const __filename = fileURLToPath(import.meta.url); +// Get the directory name from the filename +const __dirname = dirname(__filename); +const outdir = path.join(__dirname, '../dist/json/'); + +fs.mkdirSync(outdir, { recursive: true }); + +fs.writeFileSync(path.join(outdir, 'types.json'), JSON.stringify(types, null, 4)); diff --git a/js/api-augment/scripts/package.cjs b/js/api-augment/scripts/package.cjs new file mode 100644 index 0000000000..fba215a527 --- /dev/null +++ b/js/api-augment/scripts/package.cjs @@ -0,0 +1,59 @@ +/** + * Build the package.json for the actual publishing + */ +// eslint-disable-next-line +const fs = require('fs'); +// eslint-disable-next-line +const path = require('path'); + +// eslint-disable-next-line +const rootPackage = require('../package.json'); + +// Remove test related work +delete rootPackage['jest-junit']; +delete rootPackage['jest']; + +// Don't keep scripts +delete rootPackage['scripts']; + +// Don't keep dev dependencies +delete rootPackage['devDependencies']; + +// Setup the main and types correctly +rootPackage['main'] = './cjs/index.js'; +rootPackage['module'] = './esm/index.js'; +rootPackage['types'] = 'index.d.ts'; +(rootPackage['exports'] = { + '.': { + types: './index.d.ts', + require: './cjs/index.js', + import: './esm/index.js', + default: './esm/index.js', + }, +}), + // Write it out + fs.writeFileSync( + `${path.join(__dirname, '../dist', 'package.json')}`, + JSON.stringify(rootPackage, null, 2), + (err) => { + if (err) throw new Error(err); + } + ); + +// Write out a simple type override for the esm side of things +fs.writeFileSync( + `${path.join(__dirname, '../dist/esm', 'package.json')}`, + JSON.stringify({ type: 'module' }, null, 2), + (err) => { + if (err) throw new Error(err); + } +); + +// Write out a simple type override for the cjs side of things +fs.writeFileSync( + `${path.join(__dirname, '../dist/cjs', 'package.json')}`, + JSON.stringify({ type: 'commonjs' }, null, 2), + (err) => { + if (err) throw new Error(err); + } +); diff --git a/js/api-augment/scripts/pre-gen.cjs b/js/api-augment/scripts/pre-gen.cjs new file mode 100644 index 0000000000..06c2c8ca28 --- /dev/null +++ b/js/api-augment/scripts/pre-gen.cjs @@ -0,0 +1,25 @@ +/** + * Build the needed directories for the code generation + */ +// eslint-disable-next-line +const fs = require('fs'); +// eslint-disable-next-line +const path = require('path'); + +const interfacePath = path.join(__dirname, '../interfaces'); +if (!fs.existsSync(interfacePath)) fs.mkdirSync(interfacePath); + +const definitionsPath = path.join(__dirname, '../definitions'); +const files = fs.readdirSync(definitionsPath); + +// Create folders for each of the definitions +files.forEach((file) => { + const folder = file.replace('.ts', ''); + const newDir = path.join(interfacePath, folder); + console.log(`Making interfaces/${folder} if it doesn't exist...`); + if (!fs.existsSync(newDir)) fs.mkdirSync(newDir); +}); + +// Pipe over the exports into the interfaces +const definitionsExportFile = path.join(interfacePath, 'definitions.ts'); +fs.writeFileSync(definitionsExportFile, `export * from "../definitions/index.js";\n`); diff --git a/js/api-augment/substrate_v1_rpcs.ts b/js/api-augment/substrate_v1_rpcs.ts new file mode 100644 index 0000000000..5d9b966e2a --- /dev/null +++ b/js/api-augment/substrate_v1_rpcs.ts @@ -0,0 +1,75 @@ +import { DefinitionRpc } from '@polkadot/types/types'; + +export const v1SubstrateRpcs: Record> = { + transactionWatch_v1: { + submitAndWatch: { + description: '', + type: '', + params: [], + }, + unwatch: { + description: '', + type: '', + params: [], + }, + }, + transaction_v1: { + broadcast: { + description: '', + type: '', + params: [], + }, + stop: { + description: '', + type: '', + params: [], + }, + }, + chainHead_v1: { + body: { + description: '', + type: '', + params: [], + }, + call: { + description: '', + type: '', + params: [], + }, + continue: { + description: '', + type: '', + params: [], + }, + follow: { + description: '', + type: '', + params: [], + }, + header: { + description: '', + type: '', + params: [], + }, + stopOperation: { + description: '', + type: '', + params: [], + }, + storage: { + description: '', + type: '', + params: [], + }, + unfollow: { + description: '', + type: '', + params: [], + }, + unpin: { + description: '', + type: '', + params: [], + }, + }, +}; diff --git a/js/api-augment/test/index.test.ts b/js/api-augment/test/index.test.ts new file mode 100644 index 0000000000..692460fd5a --- /dev/null +++ b/js/api-augment/test/index.test.ts @@ -0,0 +1,33 @@ +import assert from 'assert'; +import { options } from '../index.js'; +import { ApiPromise } from '@polkadot/api'; +import { MockProvider } from '@polkadot/rpc-provider/mock'; +import { TypeRegistry } from '@polkadot/types'; +import metadataRaw from '../metadata.json' with { type: 'json' }; + +describe('index', function () { + let mock: MockProvider; + let api: ApiPromise; + + beforeEach(async function () { + mock = new MockProvider(new TypeRegistry()); + + api = await ApiPromise.create({ + ...options, + provider: mock, + metadata: metadataRaw as any, + }); + }); + + afterEach(async function () { + await api.disconnect(); + await mock.disconnect(); + }); + + it('should have rpc calls', async function () { + assert.notEqual(api.rpc.messages, undefined); + assert.notEqual(api.rpc.msa, undefined); + assert.notEqual(api.rpc.schemas, undefined); + assert.notEqual(api.rpc.frequency, undefined); + }); +}); diff --git a/js/api-augment/test/types.test.ts b/js/api-augment/test/types.test.ts new file mode 100644 index 0000000000..f9ad5b184e --- /dev/null +++ b/js/api-augment/test/types.test.ts @@ -0,0 +1,12 @@ +import assert from 'assert'; +import { TypeRegistry } from '@polkadot/types'; +import { types } from '../index.js'; + +describe('types', function () { + it('should be able to successfully register', function () { + const registry = new TypeRegistry(); + assert.doesNotThrow(() => { + registry.register(types); + }); + }); +}); diff --git a/js/api-augment/tsconfig.cjs.json b/js/api-augment/tsconfig.cjs.json new file mode 100644 index 0000000000..ebe4fe2b67 --- /dev/null +++ b/js/api-augment/tsconfig.cjs.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "lib": ["ES2020"], + "module": "CommonJS", + "outDir": "dist/cjs", + "declaration": false + } +} diff --git a/js/api-augment/tsconfig.eslint.json b/js/api-augment/tsconfig.eslint.json new file mode 100644 index 0000000000..2d2a3b3f8b --- /dev/null +++ b/js/api-augment/tsconfig.eslint.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["node_modules/**", "./scripts/**", "./dist/**"] +} diff --git a/js/api-augment/tsconfig.esm.json b/js/api-augment/tsconfig.esm.json new file mode 100644 index 0000000000..fc39b784b8 --- /dev/null +++ b/js/api-augment/tsconfig.esm.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "lib": ["ES2020"], + "module": "ES2022", + "outDir": "dist/esm", + "declaration": false + } +} diff --git a/js/api-augment/tsconfig.json b/js/api-augment/tsconfig.json new file mode 100644 index 0000000000..62ebe2f23d --- /dev/null +++ b/js/api-augment/tsconfig.json @@ -0,0 +1,25 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Base", + "compilerOptions": { + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "moduleResolution": "node", + "module": "esnext", + "noImplicitAny": true, + "outDir": "dist", + "resolveJsonModule": true, + "sourceMap": false, + "strict": true, + "skipLibCheck": true, + "target": "es2022", + "typeRoots": ["node_modules/@types"], + "paths": { + "@frequency-chain/api-augment/*": ["./interfaces/*"], + "@polkadot/api/augment": ["./interfaces/augment-api.ts"], + "@polkadot/types/augment": ["./interfaces/augment-types.ts"], + "@polkadot/types/lookup": ["./interfaces/types-lookup.ts"] + } + }, + "exclude": ["node_modules/**", "./test/**", "./scripts/**", "**/*.test.ts", "./dist/**"] +} diff --git a/js/api-augment/tsconfig.types.json b/js/api-augment/tsconfig.types.json new file mode 100644 index 0000000000..420c04d5fd --- /dev/null +++ b/js/api-augment/tsconfig.types.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "lib": ["ES2020"], + "target": "es2022", + "outDir": "dist", + "emitDeclarationOnly": true, + "declaration": true + } +} diff --git a/js/ethereum-utils/.gitignore b/js/ethereum-utils/.gitignore new file mode 100644 index 0000000000..d1db1b8a78 --- /dev/null +++ b/js/ethereum-utils/.gitignore @@ -0,0 +1,312 @@ +# Generated Files +metadata.* +interfaces/* + + +# Log Files +*.log + +# All of IDEA +.idea/* + +### Emacs ### +# -*- mode: gitignore; -*- +*~ +\#*\# +/.emacs.desktop +/.emacs.desktop.lock +*.elc +auto-save-list +tramp +.\#* + +# Org-mode +.org-id-locations +*_archive +ltximg/** + +# flymake-mode +*_flymake.* + +# eshell files +/eshell/history +/eshell/lastdir + +# elpa packages +/elpa/ + +# reftex files +*.rel + +# AUCTeX auto folder +/auto/ + +# cask packages +.cask/ +dist/ + +# Flycheck +flycheck_*.el + +# server auth directory +/server/ + +# projectiles files +.projectile + +# directory configuration +.dir-locals.el + +# network security +/network-security.data + + +### Git ### +# Created by git for backups. To disable backups in Git: +# $ git config --global mergetool.keepBackup false +*.orig + +# Created by git when using merge tools for conflicts +*.BACKUP.* +*.BASE.* +*.LOCAL.* +*.REMOTE.* +*_BACKUP_*.txt +*_BASE_*.txt +*_LOCAL_*.txt +*_REMOTE_*.txt + +### Intellij+all ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Intellij+all Patch ### +# Ignores the whole .idea folder and all .iml files +# See https://github.com/joeblau/gitignore.io/issues/186 and https://github.com/joeblau/gitignore.io/issues/360 + +.idea/ + +# Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-249601023 + +*.iml +modules.xml +.idea/misc.xml +*.ipr + +# Sonarlint plugin +.idea/sonarlint + +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test +.env*.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +### Vim ### +# Swap +[._]*.s[a-v][a-z] +!*.svg # comment out if you don't need vector files +[._]*.sw[a-p] +[._]s[a-rt-v][a-z] +[._]ss[a-gi-z] +[._]sw[a-p] + +# Session +Session.vim +Sessionx.vim + +# Temporary +.netrwhist +# Auto-generated tag files +tags +# Persistent undo +[._]*.un~ + +### vscode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# End of https://www.toptal.com/developers/gitignore/api/intellij+all,vim,emacs,vscode,git,node + +junit.xml diff --git a/js/ethereum-utils/.mocharc.json b/js/ethereum-utils/.mocharc.json new file mode 100644 index 0000000000..53ebf896a5 --- /dev/null +++ b/js/ethereum-utils/.mocharc.json @@ -0,0 +1,5 @@ +{ + "$schema": "https://json.schemastore.org/mocharc", + "extension": ["ts"], + "spec": ["test"] +} diff --git a/js/ethereum-utils/.node-version b/js/ethereum-utils/.node-version new file mode 100644 index 0000000000..87834047a6 --- /dev/null +++ b/js/ethereum-utils/.node-version @@ -0,0 +1 @@ +20.12.2 diff --git a/js/ethereum-utils/.prettierignore b/js/ethereum-utils/.prettierignore new file mode 100644 index 0000000000..2cf62f2962 --- /dev/null +++ b/js/ethereum-utils/.prettierignore @@ -0,0 +1,10 @@ +# package.json is formatted by package managers, so we ignore it here +package.json +build/* +coverage/* +multimodules/* +/*.d.ts +/*.map +/*.js +*.md +eslint.config.mjs diff --git a/js/ethereum-utils/.prettierrc.json b/js/ethereum-utils/.prettierrc.json new file mode 100644 index 0000000000..cd87a91cb1 --- /dev/null +++ b/js/ethereum-utils/.prettierrc.json @@ -0,0 +1,8 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false, + "printWidth": 120 +} diff --git a/js/ethereum-utils/.tool-versions b/js/ethereum-utils/.tool-versions new file mode 100644 index 0000000000..958fb36989 --- /dev/null +++ b/js/ethereum-utils/.tool-versions @@ -0,0 +1 @@ +nodejs 20.12.2 diff --git a/js/ethereum-utils/CONTRIBUTING.md b/js/ethereum-utils/CONTRIBUTING.md new file mode 100644 index 0000000000..0ea2841e68 --- /dev/null +++ b/js/ethereum-utils/CONTRIBUTING.md @@ -0,0 +1,8 @@ +# CONTRIBUTING + +For contributing guidelines see the [Project Liberty Contributing Guidelines](https://github.com/LibertyDSNP/meta/blob/main/CONTRIBUTING.md). + +## Running Tests +- `js/ethereum-utils` folder +- `npm run tests` + diff --git a/js/ethereum-utils/README.md b/js/ethereum-utils/README.md new file mode 100644 index 0000000000..9bd22ea0d0 --- /dev/null +++ b/js/ethereum-utils/README.md @@ -0,0 +1,74 @@ +# Ethereum Utility package + + + + +[![Contributors][contributors-shield]][contributors-url] +[![Forks][forks-shield]][forks-url] +[![Stargazers][stars-shield]][stars-url] +[![Issues][issues-shield]][issues-url] +[![MIT License][license-shield]][license-url] +[![NPM @latest][npm-shield]][npm-url] +[![NPM @next][npm-next-shield]][npm-next-url] + +# Description + +A package which facilitates use of Ethereum addresses, signatures and standards with Frequency chain. + + + +## Getting Started + +- `npm install @frequency-chain/ethereum-utils` + +### Usage in browser + +Simply include the library in your HTML from [jsDelivr](https://www.jsdelivr.com/package/npm/@frequency-chain/ethereum-utils) (update the version as needed): + +```html + +``` + +## Upgrades and Matching Versions + +Assuming you are using no deprecated methods, any release version of `@frequency-chain/ethereum-utils` should work against a release version of a Frequency node. +If you are working against a development node it is suggested that you match the package version against the commit hash using `v0.0.0-[First 6 of the commit hash]`. + +Changelog is maintained in the [releases for Frequency](https://github.com/frequency-chain/frequency/releases). + + + + +## Contributing + +See [CONTRIBUTING.md](CONTRIBUTING.md) for more information. + + + +## License + +Distributed under the Apache 2.0 License. See `LICENSE` for more information. + + + + +[contributors-shield]: https://img.shields.io/github/contributors/frequency-chain/frequency.svg?style=for-the-badge +[contributors-url]: https://github.com/frequency-chain/frequency/graphs/contributors +[forks-shield]: https://img.shields.io/github/forks/frequency-chain/frequency.svg?style=for-the-badge +[forks-url]: https://github.com/frequency-chain/frequency/network/members +[stars-shield]: https://img.shields.io/github/stars/frequency-chain/frequency.svg?style=for-the-badge +[stars-url]: https://github.com/frequency-chain/frequency/stargazers +[issues-shield]: https://img.shields.io/github/issues/frequency-chain/frequency.svg?style=for-the-badge +[issues-url]: https://github.com/frequency-chain/frequency/issues +[license-shield]: https://img.shields.io/github/license/frequency-chain/frequency.svg?style=for-the-badge +[license-url]: https://github.com/frequency-chain/frequency/blob/master/LICENSE +[npm-shield]: https://img.shields.io/npm/v/@frequency-chain/ethereum-utils?label=npm%20%40latest&style=for-the-badge +[npm-url]: https://www.npmjs.com/package/@frequency-chain/ethereum-utils +[npm-next-shield]: https://img.shields.io/npm/v/@frequency-chain/ethereum-utils/next?label=npm%20%40next&style=for-the-badge +[npm-next-url]: https://www.npmjs.com/package/@frequency-chain/ethereum-utils diff --git a/js/ethereum-utils/eslint.config.mjs b/js/ethereum-utils/eslint.config.mjs new file mode 100644 index 0000000000..e481bcf99d --- /dev/null +++ b/js/ethereum-utils/eslint.config.mjs @@ -0,0 +1,54 @@ +// @ts-check + +import eslint from '@eslint/js'; +import tseslint from 'typescript-eslint'; +import mochaPlugin from 'eslint-plugin-mocha'; +import globals from 'globals'; + +export default tseslint.config( + eslint.configs.recommended, + mochaPlugin.configs.recommended, + ...tseslint.configs.strict, + ...tseslint.configs.stylistic, + { + ignores: ['dist/', 'scripts/'], + }, + { + linterOptions: { + // Needed as the generated code uses this + reportUnusedDisableDirectives: false, + }, + }, + { + languageOptions: { + parserOptions: { + projectService: { + allowDefaultProject: ['eslint.config.mjs', 'test/*.ts', 'rollup.config.mjs'], + defaultProject: './tsconfig.eslint.json', + }, + }, + }, + }, + { + rules: { + '@typescript-eslint/no-empty-interface': 'off', + '@typescript-eslint/no-unused-vars': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-unused-expressions': 'off', + '@typescript-eslint/no-empty-function': 'off', + semi: ['error', 'always'], + 'mocha/no-setup-in-describe': 'off', + 'no-use-before-define': 'off', + 'no-unused-vars': 'off', + 'no-var': 'error', + 'id-length': [ + 'error', + { + exceptionPatterns: ['[i-k]', 'e', 'c', 'x', 'y', 'r', 's', 'v'], + properties: 'never', + }, + ], + 'allow-namespace': 'off', + }, + } +); diff --git a/js/ethereum-utils/package-lock.json b/js/ethereum-utils/package-lock.json new file mode 100644 index 0000000000..2199630a28 --- /dev/null +++ b/js/ethereum-utils/package-lock.json @@ -0,0 +1,4344 @@ +{ + "name": "@frequency-chain/ethereum-utils", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@frequency-chain/ethereum-utils", + "version": "0.0.0", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/api": "^16.1.1", + "@polkadot/util": "13.5.1", + "ethers": "^6.14.3" + }, + "devDependencies": { + "@eslint/js": "^9.27.0", + "@rollup/plugin-commonjs": "^28.0.3", + "@rollup/plugin-node-resolve": "^16.0.1", + "@rollup/plugin-typescript": "^12.1.2", + "@types/mocha": "^10.0.10", + "eslint": "^9.27.0", + "eslint-plugin-mocha": "^11.1.0", + "mocha": "11.5.0", + "prettier": "^3.5.3", + "rollup": "^4.41.1", + "tsx": "^4.19.4", + "typescript": "^5.8.3", + "typescript-eslint": "^8.33.0" + } + }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", + "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", + "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", + "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", + "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", + "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", + "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", + "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", + "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", + "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", + "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", + "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", + "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", + "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", + "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", + "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", + "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", + "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", + "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", + "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", + "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", + "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", + "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", + "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", + "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", + "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", + "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", + "dev": true, + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz", + "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", + "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.27.0.tgz", + "integrity": "sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz", + "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==", + "dev": true, + "dependencies": { + "@eslint/core": "^0.14.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@noble/curves": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", + "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@polkadot-api/json-rpc-provider": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider/-/json-rpc-provider-0.0.1.tgz", + "integrity": "sha512-/SMC/l7foRjpykLTUTacIH05H3mr9ip8b5xxfwXlVezXrNVLp3Cv0GX6uItkKd+ZjzVPf3PFrDF2B2/HLSNESA==", + "optional": true + }, + "node_modules/@polkadot-api/json-rpc-provider-proxy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider-proxy/-/json-rpc-provider-proxy-0.1.0.tgz", + "integrity": "sha512-8GSFE5+EF73MCuLQm8tjrbCqlgclcHBSRaswvXziJ0ZW7iw3UEMsKkkKvELayWyBuOPa2T5i1nj6gFOeIsqvrg==", + "optional": true + }, + "node_modules/@polkadot-api/metadata-builders": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@polkadot-api/metadata-builders/-/metadata-builders-0.3.2.tgz", + "integrity": "sha512-TKpfoT6vTb+513KDzMBTfCb/ORdgRnsS3TDFpOhAhZ08ikvK+hjHMt5plPiAX/OWkm1Wc9I3+K6W0hX5Ab7MVg==", + "optional": true, + "dependencies": { + "@polkadot-api/substrate-bindings": "0.6.0", + "@polkadot-api/utils": "0.1.0" + } + }, + "node_modules/@polkadot-api/observable-client": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@polkadot-api/observable-client/-/observable-client-0.3.2.tgz", + "integrity": "sha512-HGgqWgEutVyOBXoGOPp4+IAq6CNdK/3MfQJmhCJb8YaJiaK4W6aRGrdQuQSTPHfERHCARt9BrOmEvTXAT257Ug==", + "optional": true, + "dependencies": { + "@polkadot-api/metadata-builders": "0.3.2", + "@polkadot-api/substrate-bindings": "0.6.0", + "@polkadot-api/utils": "0.1.0" + }, + "peerDependencies": { + "@polkadot-api/substrate-client": "0.1.4", + "rxjs": ">=7.8.0" + } + }, + "node_modules/@polkadot-api/substrate-bindings": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-bindings/-/substrate-bindings-0.6.0.tgz", + "integrity": "sha512-lGuhE74NA1/PqdN7fKFdE5C1gNYX357j1tWzdlPXI0kQ7h3kN0zfxNOpPUN7dIrPcOFZ6C0tRRVrBylXkI6xPw==", + "optional": true, + "dependencies": { + "@noble/hashes": "^1.3.1", + "@polkadot-api/utils": "0.1.0", + "@scure/base": "^1.1.1", + "scale-ts": "^1.6.0" + } + }, + "node_modules/@polkadot-api/substrate-client": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-client/-/substrate-client-0.1.4.tgz", + "integrity": "sha512-MljrPobN0ZWTpn++da9vOvt+Ex+NlqTlr/XT7zi9sqPtDJiQcYl+d29hFAgpaeTqbeQKZwz3WDE9xcEfLE8c5A==", + "optional": true, + "dependencies": { + "@polkadot-api/json-rpc-provider": "0.0.1", + "@polkadot-api/utils": "0.1.0" + } + }, + "node_modules/@polkadot-api/utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/utils/-/utils-0.1.0.tgz", + "integrity": "sha512-MXzWZeuGxKizPx2Xf/47wx9sr/uxKw39bVJUptTJdsaQn/TGq+z310mHzf1RCGvC1diHM8f593KrnDgc9oNbJA==", + "optional": true + }, + "node_modules/@polkadot/api": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-16.1.1.tgz", + "integrity": "sha512-atlnmcDjDZyoE9w460Rrve0LnRv9B0W1fuy1ay9vfBQ03ez3nwnoP4sP9ldYxcmU9QEs5/HTn6nvVSZXowCYKw==", + "dependencies": { + "@polkadot/api-augment": "16.1.1", + "@polkadot/api-base": "16.1.1", + "@polkadot/api-derive": "16.1.1", + "@polkadot/keyring": "^13.5.1", + "@polkadot/rpc-augment": "16.1.1", + "@polkadot/rpc-core": "16.1.1", + "@polkadot/rpc-provider": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-augment": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/types-create": "16.1.1", + "@polkadot/types-known": "16.1.1", + "@polkadot/util": "^13.5.1", + "@polkadot/util-crypto": "^13.5.1", + "eventemitter3": "^5.0.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/api-augment": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-16.1.1.tgz", + "integrity": "sha512-VTj03C1iJEZ//IBKa4sRxfz3WObygXtyOqYCRMJEtH74roIZvJpIjhmZwJqGD8NijPO3mgZOTzaLzjoeLF1jMw==", + "dependencies": { + "@polkadot/api-base": "16.1.1", + "@polkadot/rpc-augment": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-augment": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/api-base": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-16.1.1.tgz", + "integrity": "sha512-PUpc0Ir7ru51RuVhZMmbleicKMI43s5T1FHhOHmtzbMUTnwMbXtWHKzIfkHxqXJrg10EwO8mzcymJeHbA1TR+g==", + "dependencies": { + "@polkadot/rpc-core": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/util": "^13.5.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/api-derive": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-16.1.1.tgz", + "integrity": "sha512-sC0j67RzDRwe3sHw0trDFz7tfFu68+3pQT89ash9TUVa8AD0i4USIirg4dNVWt7CrK9eW3Q4edqs1p6RXurz7g==", + "dependencies": { + "@polkadot/api": "16.1.1", + "@polkadot/api-augment": "16.1.1", + "@polkadot/api-base": "16.1.1", + "@polkadot/rpc-core": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "@polkadot/util-crypto": "^13.5.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/keyring": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-13.5.1.tgz", + "integrity": "sha512-dEl679aoMv9gOzWJA13Jb2HUGqRi6/zKjEtg+qbiEryCSjUqfNKyO8liuwMFy0VP3qxJb1FkxNe6MnG1NwbU5Q==", + "dependencies": { + "@polkadot/util": "13.5.1", + "@polkadot/util-crypto": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "13.5.1", + "@polkadot/util-crypto": "13.5.1" + } + }, + "node_modules/@polkadot/networks": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-13.5.1.tgz", + "integrity": "sha512-w5HS209pHZhqJ7AVqJqFApO4OcwlxjfQ7mp2dE/vL5qA5RnsEx/3fBYJ6h3z/k5Ggac0+Zl1vMZAF1gW8S/F9A==", + "dependencies": { + "@polkadot/util": "13.5.1", + "@substrate/ss58-registry": "^1.51.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/rpc-augment": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-16.1.1.tgz", + "integrity": "sha512-o0CgmzQ06qV0nKlKPccumOmPsZ3f2VeQp2u8tndLOLG5A7C9k+XML92ldJHN2Dj+XKHLhjHG4syPEBET7ugZCg==", + "dependencies": { + "@polkadot/rpc-core": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/rpc-core": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-16.1.1.tgz", + "integrity": "sha512-BUfY6868kJhPXCyQuRUg644pWGhynuWvPvglJXsOf+A3pRhKm+cNWEjs8puQmUc38adl6QocBeUJHfTnfrtKPg==", + "dependencies": { + "@polkadot/rpc-augment": "16.1.1", + "@polkadot/rpc-provider": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/util": "^13.5.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/rpc-provider": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-16.1.1.tgz", + "integrity": "sha512-LH22P6OSw304pwvdpjuxc6ARtvrUUvkBF02n4FsJBo555y9d+2dcA5CA4FLI8WNvOXf3hOLwxz/UPxA7VATksw==", + "dependencies": { + "@polkadot/keyring": "^13.5.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-support": "16.1.1", + "@polkadot/util": "^13.5.1", + "@polkadot/util-crypto": "^13.5.1", + "@polkadot/x-fetch": "^13.5.1", + "@polkadot/x-global": "^13.5.1", + "@polkadot/x-ws": "^13.5.1", + "eventemitter3": "^5.0.1", + "mock-socket": "^9.3.1", + "nock": "^13.5.5", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@substrate/connect": "0.8.11" + } + }, + "node_modules/@polkadot/types": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-16.1.1.tgz", + "integrity": "sha512-edEKvnCrWoPjW2sRUdER4gm8zm+gilVhZXqAtYH0gHJkBzbhCXZ5M27E62ztR1at9XyHDsTUeuq51ELHOUbbFQ==", + "dependencies": { + "@polkadot/keyring": "^13.5.1", + "@polkadot/types-augment": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/types-create": "16.1.1", + "@polkadot/util": "^13.5.1", + "@polkadot/util-crypto": "^13.5.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-augment": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-16.1.1.tgz", + "integrity": "sha512-Ozh7nEyAnyHK9x1CnRYlG/rnarvuauAIbvUljtA7f/3RI570kRTpeOR83QkDWdaLywno96A4zdFXBfI0nmq1Yw==", + "dependencies": { + "@polkadot/types": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-codec": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-16.1.1.tgz", + "integrity": "sha512-REcSkOfxFGPJWEbuCIr5EA0argnZwYVYkE14f97XVM9rV36/FEyu1al47fSjp8iHA3e8Fsd+V+WTZRwlUa51qA==", + "dependencies": { + "@polkadot/util": "^13.5.1", + "@polkadot/x-bigint": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-create": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-16.1.1.tgz", + "integrity": "sha512-dpd5HKRfNQlDYMtMdofrhr99O7q8EWkqZyTadFuTYyd7LECb9FUD8nO6RbcmpXYA9F3r5g/EwvsmZFZaQW9LqA==", + "dependencies": { + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-known": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-16.1.1.tgz", + "integrity": "sha512-Qp6C+wppqvooDFU2T0Ynmgo72bQOUkY6dLVoGmZWq/OO6hXuLCg8SAncJP/CzcueEA2/Anzk3DQbfZVlBEr6Cg==", + "dependencies": { + "@polkadot/networks": "^13.5.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/types-create": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-support": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-16.1.1.tgz", + "integrity": "sha512-pVEBVaXuIkhuMX6J4Cn+cGcLOPsz2qu4EuZXwwA/ioMIICclh+7q6+fOfInogIgmbcYHZFDDsyXG3wRw7ThZkA==", + "dependencies": { + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/util": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-13.5.1.tgz", + "integrity": "sha512-Anu4fsmMconvU+WXGFESNQp4qFjbvZnS4zD4I54W5gW70klrmrdfP2jGYhejVkm0Pf43RREN63G7Rew8+sXUmw==", + "dependencies": { + "@polkadot/x-bigint": "13.5.1", + "@polkadot/x-global": "13.5.1", + "@polkadot/x-textdecoder": "13.5.1", + "@polkadot/x-textencoder": "13.5.1", + "@types/bn.js": "^5.1.6", + "bn.js": "^5.2.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/util-crypto": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-13.5.1.tgz", + "integrity": "sha512-HIuTRpkulIzmgCU+GIXbEEkVbikvrK+5v8XZ7Ll45m1dLsxnrJeEbNsCLUwI/+D9Jd0iF3+T12GybuetlXeu+A==", + "dependencies": { + "@noble/curves": "^1.3.0", + "@noble/hashes": "^1.3.3", + "@polkadot/networks": "13.5.1", + "@polkadot/util": "13.5.1", + "@polkadot/wasm-crypto": "^7.4.1", + "@polkadot/wasm-util": "^7.4.1", + "@polkadot/x-bigint": "13.5.1", + "@polkadot/x-randomvalues": "13.5.1", + "@scure/base": "^1.1.7", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "13.5.1" + } + }, + "node_modules/@polkadot/wasm-bridge": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-7.4.1.tgz", + "integrity": "sha512-tdkJaV453tezBxhF39r4oeG0A39sPKGDJmN81LYLf+Fihb7astzwju+u75BRmDrHZjZIv00un3razJEWCxze6g==", + "dependencies": { + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/wasm-crypto": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-7.4.1.tgz", + "integrity": "sha512-kHN/kF7hYxm1y0WeFLWeWir6oTzvcFmR4N8fJJokR+ajYbdmrafPN+6iLgQVbhZnDdxyv9jWDuRRsDnBx8tPMQ==", + "dependencies": { + "@polkadot/wasm-bridge": "7.4.1", + "@polkadot/wasm-crypto-asmjs": "7.4.1", + "@polkadot/wasm-crypto-init": "7.4.1", + "@polkadot/wasm-crypto-wasm": "7.4.1", + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-asmjs": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.4.1.tgz", + "integrity": "sha512-pwU8QXhUW7IberyHJIQr37IhbB6DPkCG5FhozCiNTq4vFBsFPjm9q8aZh7oX1QHQaiAZa2m2/VjIVE+FHGbvHQ==", + "dependencies": { + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-init": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.4.1.tgz", + "integrity": "sha512-AVka33+f7MvXEEIGq5U0dhaA2SaXMXnxVCQyhJTaCnJ5bRDj0Xlm3ijwDEQUiaDql7EikbkkRtmlvs95eSUWYQ==", + "dependencies": { + "@polkadot/wasm-bridge": "7.4.1", + "@polkadot/wasm-crypto-asmjs": "7.4.1", + "@polkadot/wasm-crypto-wasm": "7.4.1", + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-wasm": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.4.1.tgz", + "integrity": "sha512-PE1OAoupFR0ZOV2O8tr7D1FEUAwaggzxtfs3Aa5gr+yxlSOaWUKeqsOYe1KdrcjmZVV3iINEAXxgrbzCmiuONg==", + "dependencies": { + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/wasm-util": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-7.4.1.tgz", + "integrity": "sha512-RAcxNFf3zzpkr+LX/ItAsvj+QyM56TomJ0xjUMo4wKkHjwsxkz4dWJtx5knIgQz/OthqSDMR59VNEycQeNuXzA==", + "dependencies": { + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/x-bigint": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-13.5.1.tgz", + "integrity": "sha512-5GiYznWm/GdCe9nQwL/EEVLXFqK2JZqcNnWC/r196lRujqKd24r90WPHYw18d9fsii/8J4DOKc8cCRfxjMBdCw==", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-fetch": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-13.5.1.tgz", + "integrity": "sha512-2qTvxMdxlAnyY2xOulm5ZazWFRegUB6xOX7yTBxSvuAXiYGecuiZa5NikCYl+nB8iZW4ZGraLFyt9otzJHL5cw==", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "node-fetch": "^3.3.2", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-global": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-13.5.1.tgz", + "integrity": "sha512-8A9dvyGmXtQf8jCqGSxa4R8JLh43K8T1//ht7UU6Bsv7we2svdQ+O1FXblwAnAHCcboYeyYqzrTwnRnQlyrdWQ==", + "dependencies": { + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-randomvalues": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-13.5.1.tgz", + "integrity": "sha512-FT/A8EWIBNACWfxo+fDzRrkmK8TQxgaZjtr5E+/i8MYqscHFqiX9PmbMuoGC1T4w+piihHU1JD8rLTip2K8NIw==", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "13.5.1", + "@polkadot/wasm-util": "*" + } + }, + "node_modules/@polkadot/x-textdecoder": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-13.5.1.tgz", + "integrity": "sha512-iInpeywdQDusB3fz7F+La74UQoTXC8F4CsmZYEoQeZekb6CoAgtLkQZhw7ckV5+MmscLeOvZCI1wYBRqCd+qqw==", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-textencoder": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-13.5.1.tgz", + "integrity": "sha512-2QS22Eqrsjo7BCMHnL0EGheflDXSW0xpI+Zi0ULvci4uzHK4ZUgfFtEzEFg1kbKZ8ShvRpkQbGzp8nJqwijjgQ==", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-ws": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-13.5.1.tgz", + "integrity": "sha512-z9ks9qd3G78nnXcMRQN9GXtJ5BRAwRaRCVngY/ot0o4dmOdPyiciyNPOC8lNWvXF8Z1zyUqkKWwzQ33DzPFCWQ==", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0", + "ws": "^8.18.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "28.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.3.tgz", + "integrity": "sha512-pyltgilam1QPdn+Zd9gaCfOLcnjMEJ9gV+bTw6/r73INdvzf1ah9zLIJBm+kW7R6IUFIQ1YO+VqZtYxZNWFPEQ==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "fdir": "^6.2.0", + "is-reference": "1.2.1", + "magic-string": "^0.30.3", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=16.0.0 || 14 >= 14.17" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.1.tgz", + "integrity": "sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-typescript": { + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-12.1.2.tgz", + "integrity": "sha512-cdtSp154H5sv637uMr1a8OTWB0L1SWDSm1rDGiyfcGcvQ6cuTs4MDk2BVEBGysUWago4OJN4EQZqOTl/QY3Jgg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.1.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.14.0||^3.0.0||^4.0.0", + "tslib": "*", + "typescript": ">=3.7.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + }, + "tslib": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.1.tgz", + "integrity": "sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.1.tgz", + "integrity": "sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.1.tgz", + "integrity": "sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.1.tgz", + "integrity": "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.1.tgz", + "integrity": "sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.1.tgz", + "integrity": "sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.1.tgz", + "integrity": "sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.1.tgz", + "integrity": "sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.1.tgz", + "integrity": "sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.1.tgz", + "integrity": "sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.1.tgz", + "integrity": "sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.1.tgz", + "integrity": "sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.1.tgz", + "integrity": "sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.1.tgz", + "integrity": "sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.1.tgz", + "integrity": "sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.1.tgz", + "integrity": "sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.1.tgz", + "integrity": "sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.1.tgz", + "integrity": "sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.1.tgz", + "integrity": "sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.1.tgz", + "integrity": "sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@scure/base": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", + "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@substrate/connect": { + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.8.11.tgz", + "integrity": "sha512-ofLs1PAO9AtDdPbdyTYj217Pe+lBfTLltdHDs3ds8no0BseoLeAGxpz1mHfi7zB4IxI3YyAiLjH6U8cw4pj4Nw==", + "deprecated": "versions below 1.x are no longer maintained", + "optional": true, + "dependencies": { + "@substrate/connect-extension-protocol": "^2.0.0", + "@substrate/connect-known-chains": "^1.1.5", + "@substrate/light-client-extension-helpers": "^1.0.0", + "smoldot": "2.0.26" + } + }, + "node_modules/@substrate/connect-extension-protocol": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@substrate/connect-extension-protocol/-/connect-extension-protocol-2.2.2.tgz", + "integrity": "sha512-t66jwrXA0s5Goq82ZtjagLNd7DPGCNjHeehRlE/gcJmJ+G56C0W+2plqOMRicJ8XGR1/YFnUSEqUFiSNbjGrAA==", + "optional": true + }, + "node_modules/@substrate/connect-known-chains": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/@substrate/connect-known-chains/-/connect-known-chains-1.10.2.tgz", + "integrity": "sha512-oDtEbKjVOog6lxOLDzmm+2BoLC/KUzkHkeUPqJ6a0VQ4CB/XuoS0u3RGhA/cZ+kfMJAyHCG2qupbzgs1bcd/Ow==", + "optional": true + }, + "node_modules/@substrate/light-client-extension-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@substrate/light-client-extension-helpers/-/light-client-extension-helpers-1.0.0.tgz", + "integrity": "sha512-TdKlni1mBBZptOaeVrKnusMg/UBpWUORNDv5fdCaJklP4RJiFOzBCrzC+CyVI5kQzsXBisZ+2pXm+rIjS38kHg==", + "optional": true, + "dependencies": { + "@polkadot-api/json-rpc-provider": "^0.0.1", + "@polkadot-api/json-rpc-provider-proxy": "^0.1.0", + "@polkadot-api/observable-client": "^0.3.0", + "@polkadot-api/substrate-client": "^0.1.2", + "@substrate/connect-extension-protocol": "^2.0.0", + "@substrate/connect-known-chains": "^1.1.5", + "rxjs": "^7.8.1" + }, + "peerDependencies": { + "smoldot": "2.x" + } + }, + "node_modules/@substrate/ss58-registry": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.51.0.tgz", + "integrity": "sha512-TWDurLiPxndFgKjVavCniytBIw+t4ViOi7TYp9h/D0NMmkEc9klFTo+827eyEJ0lELpqO207Ey7uGxUa+BS1jQ==" + }, + "node_modules/@types/bn.js": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz", + "integrity": "sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/mocha": { + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", + "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", + "dev": true + }, + "node_modules/@types/node": { + "version": "22.15.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.24.tgz", + "integrity": "sha512-w9CZGm9RDjzTh/D+hFwlBJ3ziUaVw7oufKA3vOFSOZlzmW9AkZnfjPb+DLnrV6qtgL/LNmP0/2zBNCFHL3F0ng==", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.33.0.tgz", + "integrity": "sha512-CACyQuqSHt7ma3Ns601xykeBK/rDeZa3w6IS6UtMQbixO5DWy+8TilKkviGDH6jtWCo8FGRKEK5cLLkPvEammQ==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.33.0", + "@typescript-eslint/type-utils": "8.33.0", + "@typescript-eslint/utils": "8.33.0", + "@typescript-eslint/visitor-keys": "8.33.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.33.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz", + "integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.33.0.tgz", + "integrity": "sha512-JaehZvf6m0yqYp34+RVnihBAChkqeH+tqqhS0GuX1qgPpwLvmTPheKEs6OeCK6hVJgXZHJ2vbjnC9j119auStQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.33.0", + "@typescript-eslint/types": "8.33.0", + "@typescript-eslint/typescript-estree": "8.33.0", + "@typescript-eslint/visitor-keys": "8.33.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.0.tgz", + "integrity": "sha512-d1hz0u9l6N+u/gcrk6s6gYdl7/+pp8yHheRTqP6X5hVDKALEaTn8WfGiit7G511yueBEL3OpOEpD+3/MBdoN+A==", + "dev": true, + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.33.0", + "@typescript-eslint/types": "^8.33.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.33.0.tgz", + "integrity": "sha512-LMi/oqrzpqxyO72ltP+dBSP6V0xiUb4saY7WLtxSfiNEBI8m321LLVFU9/QDJxjDQG9/tjSqKz/E3380TEqSTw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.33.0", + "@typescript-eslint/visitor-keys": "8.33.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.0.tgz", + "integrity": "sha512-sTkETlbqhEoiFmGr1gsdq5HyVbSOF0145SYDJ/EQmXHtKViCaGvnyLqWFFHtEXoS0J1yU8Wyou2UGmgW88fEug==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.33.0.tgz", + "integrity": "sha512-lScnHNCBqL1QayuSrWeqAL5GmqNdVUQAAMTaCwdYEdWfIrSrOGzyLGRCHXcCixa5NK6i5l0AfSO2oBSjCjf4XQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "8.33.0", + "@typescript-eslint/utils": "8.33.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.33.0.tgz", + "integrity": "sha512-DKuXOKpM5IDT1FA2g9x9x1Ug81YuKrzf4mYX8FAVSNu5Wo/LELHWQyM1pQaDkI42bX15PWl0vNPt1uGiIFUOpg==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.0.tgz", + "integrity": "sha512-vegY4FQoB6jL97Tu/lWRsAiUUp8qJTqzAmENH2k59SJhw0Th1oszb9Idq/FyyONLuNqT1OADJPXfyUNOR8SzAQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/project-service": "8.33.0", + "@typescript-eslint/tsconfig-utils": "8.33.0", + "@typescript-eslint/types": "8.33.0", + "@typescript-eslint/visitor-keys": "8.33.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.33.0.tgz", + "integrity": "sha512-lPFuQaLA9aSNa7D5u2EpRiqdAUhzShwGg/nhpBlc4GR6kcTABttCuyjFs8BcEZ8VWrjCBof/bePhP3Q3fS+Yrw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.33.0", + "@typescript-eslint/types": "8.33.0", + "@typescript-eslint/typescript-estree": "8.33.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.0.tgz", + "integrity": "sha512-7RW7CMYoskiz5OOGAWjJFxgb7c5UNjTG292gYhWeOAcFmYCtVCSqjqSBj5zMhxbXo2JOW95YYrUWJfU0zrpaGQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.33.0", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==" + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/bn.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", + "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/diff": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", + "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.5", + "@esbuild/android-arm": "0.25.5", + "@esbuild/android-arm64": "0.25.5", + "@esbuild/android-x64": "0.25.5", + "@esbuild/darwin-arm64": "0.25.5", + "@esbuild/darwin-x64": "0.25.5", + "@esbuild/freebsd-arm64": "0.25.5", + "@esbuild/freebsd-x64": "0.25.5", + "@esbuild/linux-arm": "0.25.5", + "@esbuild/linux-arm64": "0.25.5", + "@esbuild/linux-ia32": "0.25.5", + "@esbuild/linux-loong64": "0.25.5", + "@esbuild/linux-mips64el": "0.25.5", + "@esbuild/linux-ppc64": "0.25.5", + "@esbuild/linux-riscv64": "0.25.5", + "@esbuild/linux-s390x": "0.25.5", + "@esbuild/linux-x64": "0.25.5", + "@esbuild/netbsd-arm64": "0.25.5", + "@esbuild/netbsd-x64": "0.25.5", + "@esbuild/openbsd-arm64": "0.25.5", + "@esbuild/openbsd-x64": "0.25.5", + "@esbuild/sunos-x64": "0.25.5", + "@esbuild/win32-arm64": "0.25.5", + "@esbuild/win32-ia32": "0.25.5", + "@esbuild/win32-x64": "0.25.5" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.27.0.tgz", + "integrity": "sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.20.0", + "@eslint/config-helpers": "^0.2.1", + "@eslint/core": "^0.14.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.27.0", + "@eslint/plugin-kit": "^0.3.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-mocha": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-11.1.0.tgz", + "integrity": "sha512-rKntVWRsQFPbf8OkSgVNRVRrcVAPaGTyEgWCEyXaPDJkTl0v5/lwu1vTk5sWiUJU8l2sxwvGUZzSNrEKdVMeQw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.1", + "globals": "^15.14.0" + }, + "peerDependencies": { + "eslint": ">=9.0.0" + } + }, + "node_modules/eslint-plugin-mocha/node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-scope": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ethers": { + "version": "6.14.3", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.14.3.tgz", + "integrity": "sha512-qq7ft/oCJohoTcsNPFaXSQUm457MA5iWqkf1Mb11ujONdg7jBI6sAOrHaTi3j0CBqIGFSCeR/RMc+qwRRub7IA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "22.7.5", + "aes-js": "4.0.0-beta.5", + "tslib": "2.7.0", + "ws": "8.17.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ethers/node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethers/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethers/node_modules/@types/node": { + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/ethers/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" + }, + "node_modules/ethers/node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + }, + "node_modules/ethers/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz", + "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==", + "dev": true, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-tsconfig": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", + "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mocha": { + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.5.0.tgz", + "integrity": "sha512-VKDjhy6LMTKm0WgNEdlY77YVsD49LZnPSXJAaPNL9NRYQADxvORsyG1DIQY6v53BKTnlNbEE2MbVCDbnxr4K3w==", + "dev": true, + "dependencies": { + "browser-stdout": "^1.3.1", + "chokidar": "^4.0.1", + "debug": "^4.3.5", + "diff": "^7.0.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^10.4.5", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^9.0.5", + "ms": "^2.1.3", + "picocolors": "^1.1.1", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/mock-socket": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.3.1.tgz", + "integrity": "sha512-qxBgB7Qa2sEQgHFjj0dSigq7fX4k6Saisd5Nelwp2q8mlbAFh5dHV9JTTlF8viYJLSSWgMCZFUom8PJcMNBoJw==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/nock": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.6.tgz", + "integrity": "sha512-o2zOYiCpzRqSzPj0Zt/dQ/DqZeYoaQ7TUonc/xUPjCGl9WeHpNbxgVvOquXYAaJzI0M9BXV3HTzG0p8IUAbBTQ==", + "dependencies": { + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "propagate": "^2.0.0" + }, + "engines": { + "node": ">= 10.13" + } + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/propagate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.1.tgz", + "integrity": "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.7" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.41.1", + "@rollup/rollup-android-arm64": "4.41.1", + "@rollup/rollup-darwin-arm64": "4.41.1", + "@rollup/rollup-darwin-x64": "4.41.1", + "@rollup/rollup-freebsd-arm64": "4.41.1", + "@rollup/rollup-freebsd-x64": "4.41.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.41.1", + "@rollup/rollup-linux-arm-musleabihf": "4.41.1", + "@rollup/rollup-linux-arm64-gnu": "4.41.1", + "@rollup/rollup-linux-arm64-musl": "4.41.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.41.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.41.1", + "@rollup/rollup-linux-riscv64-gnu": "4.41.1", + "@rollup/rollup-linux-riscv64-musl": "4.41.1", + "@rollup/rollup-linux-s390x-gnu": "4.41.1", + "@rollup/rollup-linux-x64-gnu": "4.41.1", + "@rollup/rollup-linux-x64-musl": "4.41.1", + "@rollup/rollup-win32-arm64-msvc": "4.41.1", + "@rollup/rollup-win32-ia32-msvc": "4.41.1", + "@rollup/rollup-win32-x64-msvc": "4.41.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/scale-ts": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/scale-ts/-/scale-ts-1.6.1.tgz", + "integrity": "sha512-PBMc2AWc6wSEqJYBDPcyCLUj9/tMKnLX70jLOSndMtcUoLQucP/DM0vnQo1wJAYjTrQiq8iG9rD0q6wFzgjH7g==", + "optional": true + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/smoldot": { + "version": "2.0.26", + "resolved": "https://registry.npmjs.org/smoldot/-/smoldot-2.0.26.tgz", + "integrity": "sha512-F+qYmH4z2s2FK+CxGj8moYcd1ekSIKH8ywkdqlOz88Dat35iB1DIYL11aILN46YSGMzQW/lbJNS307zBSDN5Ig==", + "optional": true, + "dependencies": { + "ws": "^8.8.1" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/tsx": { + "version": "4.19.4", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.4.tgz", + "integrity": "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==", + "dev": true, + "dependencies": { + "esbuild": "~0.25.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.33.0.tgz", + "integrity": "sha512-5YmNhF24ylCsvdNW2oJwMzTbaeO4bg90KeGtMjUw0AGtHksgEPLRTUil+coHwCfiu4QjVJFnjp94DmU6zV7DhQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.33.0", + "@typescript-eslint/parser": "8.33.0", + "@typescript-eslint/utils": "8.33.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==" + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ws": { + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/js/ethereum-utils/package.json b/js/ethereum-utils/package.json new file mode 100644 index 0000000000..3df2909de6 --- /dev/null +++ b/js/ethereum-utils/package.json @@ -0,0 +1,49 @@ +{ + "name": "@frequency-chain/ethereum-utils", + "version": "0.0.0", + "bugs": { + "url": "https://github.com/frequency-chain/frequency/issues" + }, + "description": "A package which facilitates use of Ethereum addresses, signatures and standards with Frequency chain.", + "main": "index.js", + "type": "module", + "repository": { + "type": "git", + "url": "https://github.com/frequency-chain/frequency.git", + "directory": "js/ethereum-utils" + }, + "scripts": { + "clean": "rm -Rf dist", + "package": "node scripts/package.cjs", + "prepackage": "cp CONTRIBUTING.md README.md ../../LICENSE ./dist", + "build": "tsc -p ./tsconfig.types.json && tsc -p ./tsconfig.cjs.json && tsc -p ./tsconfig.esm.json", + "rollup:build": "rollup -c rollup.config.mjs", + "postbuild": "npm run package; npm run rollup:build;", + "pack": "cd dist; npm pack", + "test": "mocha --import=tsx ./test/**/*.test.ts", + "format": "tsc --noEmit --pretty && prettier --write . && eslint --fix", + "lint": "tsc --noEmit --pretty && prettier --check . && eslint" + }, + "author": "frequency-chain", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/api": "^16.1.1", + "@polkadot/util": "13.5.1", + "ethers": "^6.14.3" + }, + "devDependencies": { + "@eslint/js": "^9.27.0", + "@rollup/plugin-commonjs": "^28.0.3", + "@rollup/plugin-node-resolve": "^16.0.1", + "@rollup/plugin-typescript": "^12.1.2", + "@types/mocha": "^10.0.10", + "eslint": "^9.27.0", + "eslint-plugin-mocha": "^11.1.0", + "mocha": "11.5.0", + "prettier": "^3.5.3", + "rollup": "^4.41.1", + "tsx": "^4.19.4", + "typescript": "^5.8.3", + "typescript-eslint": "^8.33.0" + } +} diff --git a/js/ethereum-utils/rollup.config.mjs b/js/ethereum-utils/rollup.config.mjs new file mode 100644 index 0000000000..920e2a35d0 --- /dev/null +++ b/js/ethereum-utils/rollup.config.mjs @@ -0,0 +1,58 @@ +import resolve from '@rollup/plugin-node-resolve'; +import commonjs from '@rollup/plugin-commonjs'; +import typescript from '@rollup/plugin-typescript'; +import pkg from './package.json' assert { type: 'json' }; + +// Dependencies to exclude in ESM +const esmExternals = Object.keys(pkg.dependencies || {}).filter((dep) => dep !== '@polkadot/util' && dep !== 'ethers'); + +// Dependencies to exclude in UMD +const umdExternals = Object.keys(pkg.dependencies || {}).filter((dep) => dep !== '@polkadot/util'); + +/** + * Create external logic depending on format. + * For ESM: all deps are external (except relative paths). + * For UMD: only selected deps (e.g. bundle @polkadot/util). + */ +function makeExternal(format) { + return (id) => { + if (format === 'ESM') { + return esmExternals.includes(id); + } + return umdExternals.includes(id); + }; +} + +export default [ + { + input: 'src/index.ts', + output: { + file: 'dist/browser/frequency-ethereum-utils.esm.min.js', + format: 'esm', + sourcemap: false, + compact: true, + }, + external: makeExternal('ESM'), + plugins: [ + resolve({ browser: true, preferBuiltins: false }), + commonjs(), + typescript({ tsconfig: './tsconfig.json' }), + ], + }, + { + input: 'src/index.ts', + output: { + file: 'dist/browser/frequency-ethereum-utils.umd.min.js', + format: 'umd', + name: 'EthereumUtils', + sourcemap: false, + compact: true, + }, + external: makeExternal('UMD'), + plugins: [ + resolve({ browser: true, preferBuiltins: false }), + commonjs(), + typescript({ tsconfig: './tsconfig.json' }), + ], + }, +]; diff --git a/js/ethereum-utils/sample.html b/js/ethereum-utils/sample.html new file mode 100644 index 0000000000..8634cac7b9 --- /dev/null +++ b/js/ethereum-utils/sample.html @@ -0,0 +1,28 @@ + + + + + Title + + + + + + + diff --git a/js/ethereum-utils/scripts/package.cjs b/js/ethereum-utils/scripts/package.cjs new file mode 100644 index 0000000000..fba215a527 --- /dev/null +++ b/js/ethereum-utils/scripts/package.cjs @@ -0,0 +1,59 @@ +/** + * Build the package.json for the actual publishing + */ +// eslint-disable-next-line +const fs = require('fs'); +// eslint-disable-next-line +const path = require('path'); + +// eslint-disable-next-line +const rootPackage = require('../package.json'); + +// Remove test related work +delete rootPackage['jest-junit']; +delete rootPackage['jest']; + +// Don't keep scripts +delete rootPackage['scripts']; + +// Don't keep dev dependencies +delete rootPackage['devDependencies']; + +// Setup the main and types correctly +rootPackage['main'] = './cjs/index.js'; +rootPackage['module'] = './esm/index.js'; +rootPackage['types'] = 'index.d.ts'; +(rootPackage['exports'] = { + '.': { + types: './index.d.ts', + require: './cjs/index.js', + import: './esm/index.js', + default: './esm/index.js', + }, +}), + // Write it out + fs.writeFileSync( + `${path.join(__dirname, '../dist', 'package.json')}`, + JSON.stringify(rootPackage, null, 2), + (err) => { + if (err) throw new Error(err); + } + ); + +// Write out a simple type override for the esm side of things +fs.writeFileSync( + `${path.join(__dirname, '../dist/esm', 'package.json')}`, + JSON.stringify({ type: 'module' }, null, 2), + (err) => { + if (err) throw new Error(err); + } +); + +// Write out a simple type override for the cjs side of things +fs.writeFileSync( + `${path.join(__dirname, '../dist/cjs', 'package.json')}`, + JSON.stringify({ type: 'commonjs' }, null, 2), + (err) => { + if (err) throw new Error(err); + } +); diff --git a/js/ethereum-utils/src/address.ts b/js/ethereum-utils/src/address.ts new file mode 100644 index 0000000000..c5a1597531 --- /dev/null +++ b/js/ethereum-utils/src/address.ts @@ -0,0 +1,121 @@ +import { H160 } from '@polkadot/types/interfaces'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { encodeAddress, ethereumEncode } from '@polkadot/util-crypto'; +import { hexToU8a, u8aToHex } from '@polkadot/util'; +import { Address20MultiAddress, EthereumKeyPair, HexString } from './payloads'; +import { ethers } from 'ethers'; +import { Keyring } from '@polkadot/api'; +import { Keypair } from '@polkadot/util-crypto/types'; + +/** + * Creates a Random Ethereum key + */ +export function createRandomKey(): EthereumKeyPair { + const k = ethers.Wallet.createRandom(); + return { + publicKey: k.publicKey, + privateKey: k.privateKey, + address: { + ethereumAddress: k.address, + unifiedAddress: getUnified32BytesAddress(k.address), + unifiedAddressSS58: getSS58AccountFromEthereumAccount(k.address), + }, + mnemonic: k.mnemonic?.phrase ?? '', + } as EthereumKeyPair; +} + +/** + * Create a partial KeyringPair from an Ethereum address + */ +export function ethereumAddressToKeyringPair(ethereumAddress: H160): KeyringPair { + return { + type: 'ethereum', + address: ethereumAddress.toHex(), + addressRaw: ethereumAddress, + } as unknown as KeyringPair; +} + +/** + * Returns unified 32 bytes SS58 accountId + * @param pair + */ +export function getUnifiedAddress(pair: KeyringPair): string { + if ('ethereum' === pair.type) { + const etheAddressHex = ethereumEncode(pair.publicKey || pair.address); + return getSS58AccountFromEthereumAccount(etheAddressHex); + } + if (pair.type === 'ecdsa') { + throw new Error('Ecdsa key type is not supported and it should be replaced with ethereum ones!'); + } + return pair.address; +} + +/** + * Returns ethereum style public key with suffixed 0xee example: 0x19a701d23f0ee1748b5d5f883cb833943096c6c4eeeeeeeeeeeeeeeeeeeeeeee + * @param pair + */ +export function getUnifiedPublicKey(pair: KeyringPair): Uint8Array { + if ('ethereum' === pair.type) { + const unifiedHex = getUnified32BytesAddress(u8aToHex(pair.publicKey)); + return hexToU8a(unifiedHex); + } + if (pair.type === 'ecdsa') { + throw new Error('Ecdsa key type is not supported and it should be replaced with ethereum ones!'); + } + return pair.publicKey; +} + +export function reverseUnifiedAddressToEthereumAddress(unifiedAddress: HexString): HexString { + if (!unifiedAddress.toLowerCase().endsWith('ee'.repeat(12))) { + throw new Error(`Address ${unifiedAddress} is not reversible!`); + } + return `${unifiedAddress.substring(0, 42)}` as HexString; +} + +/** + * converts an ethereum account to SS58 format + * @param accountId20Hex + */ +export function getSS58AccountFromEthereumAccount(accountId20Hex: string): string { + const addressBytes = hexToU8a(accountId20Hex); + const suffix = new Uint8Array(12).fill(0xee); + const result = new Uint8Array(32); + result.set(addressBytes, 0); + result.set(suffix, 20); + return encodeAddress(result); +} + +/** + * + * @param secretKey of secp256k1 keypair exported from any wallet (should be 32 bytes) + */ +export function getKeyringPairFromSecp256k1PrivateKey(secretKey: Uint8Array): KeyringPair { + const publicKey = ethers.SigningKey.computePublicKey(secretKey, true); + const keypair: Keypair = { + secretKey, + publicKey: hexToU8a(publicKey), + }; + return new Keyring({ type: 'ethereum' }).createFromPair(keypair, undefined, 'ethereum'); +} + +/** + * Convert a keyPair into a 20 byte ethereum address + * @param pair + */ +export function getAccountId20MultiAddress(pair: KeyringPair): Address20MultiAddress { + if (pair.type !== 'ethereum') { + throw new Error(`Only ethereum keys are supported!`); + } + const etheAddress = ethereumEncode(pair.publicKey || pair.address); + const ethAddress20 = Array.from(hexToU8a(etheAddress)); + return { Address20: ethAddress20 }; +} + +function getUnified32BytesAddress(ethAddressOrPublicKey: string): HexString { + const ethAddressBytes = hexToU8a(ethereumEncode(ethAddressOrPublicKey)); + const suffix = new Uint8Array(12).fill(0xee); + const result = new Uint8Array(32); + result.set(ethAddressBytes, 0); + result.set(suffix, 20); + return u8aToHex(result); +} diff --git a/js/ethereum-utils/src/index.ts b/js/ethereum-utils/src/index.ts new file mode 100644 index 0000000000..87742acee1 --- /dev/null +++ b/js/ethereum-utils/src/index.ts @@ -0,0 +1,11 @@ +import * as address from './address'; +import * as payloads from './payloads'; +import * as signature from './signature'; +import * as signatureDefinitions from './signature.definitions'; + +export * from './payloads'; +export * from './signature'; +export * from './signature.definitions'; +export * from './address'; + +export default { ...payloads, ...address, ...signatureDefinitions, ...signature }; diff --git a/js/ethereum-utils/src/payloads.ts b/js/ethereum-utils/src/payloads.ts new file mode 100644 index 0000000000..a252ccb41a --- /dev/null +++ b/js/ethereum-utils/src/payloads.ts @@ -0,0 +1,147 @@ +export type HexString = `0x${string}`; + +export interface EcdsaSignature { + Ecdsa: HexString; +} + +export interface Address20MultiAddress { + Address20: number[]; +} + +export type ChainType = 'Mainnet-Frequency' | 'Paseo-Testnet-Frequency' | 'Dev'; + +export interface AddressWrapper { + // 20 byte ethereum address in hex + ethereumAddress: HexString; + // 32 byte unified address in hex + unifiedAddress: HexString; + // SS58 unified address + unifiedAddressSS58: string; +} + +export interface EthereumKeyPair { + // private key of ethereum key + privateKey: HexString; + // 33 bytes public key + publicKey: HexString; + // different address representations + address: AddressWrapper; + // 12 word mnemonic + mnemonic: string; +} + +export interface PaginatedUpsertSignaturePayloadV2 { + // type discriminator + type: 'PaginatedUpsertSignaturePayloadV2'; + // uint16 type schema id + schemaId: number; + // uint16 type page id + pageId: number; + // uint32 type page hash + targetHash: number; + // uint32 type payload expiration block number + expiration: number; + // hex encoded data to be stored on Paginated Storage + payload: HexString; +} + +export interface PaginatedDeleteSignaturePayloadV2 { + // type discriminator + type: 'PaginatedDeleteSignaturePayloadV2'; + // uint16 type schema id + schemaId: number; + // uint16 type page id + pageId: number; + // uint32 type page hash + targetHash: number; + // uint32 type payload expiration block number + expiration: number; +} + +export interface AddItemizedAction { + // action item type + actionType: 'Add'; + // data related to Add item + data: HexString; + // uint16 type index related to Delete item + index: 0; +} + +export interface DeleteItemizedAction { + // action item type + actionType: 'Delete'; + // data related to Add item + data: '0x'; + // uint16 type index related to Delete item + index: number; +} + +// Create a union type of the two action types +export type ItemizedAction = AddItemizedAction | DeleteItemizedAction; + +export interface ItemizedSignaturePayloadV2 { + // type discriminator + type: 'ItemizedSignaturePayloadV2'; + // uint16 type schema id + schemaId: number; + // uint32 type page hash + targetHash: number; + // uint32 type payload expiration block number + expiration: number; + // itemized actions for this payload + actions: ItemizedAction[]; +} + +export interface PasskeyPublicKey { + // type discriminator + type: 'PasskeyPublicKey'; + // hex encoded public key to be signed + publicKey: HexString; +} + +export interface ClaimHandlePayload { + // type discriminator + type: 'ClaimHandlePayload'; + // the handle to be claimed + handle: string; + // uint32 type payload expiration block number + expiration: number; +} + +export interface AddKeyData { + // type discriminator + type: 'AddKeyData'; + // uint64 type MessageSourceId + msaId: string; + // uint32 type payload expiration block number + expiration: number; + // hex encoded public key to be signed + newPublicKey: HexString; +} + +export interface AddProvider { + // type discriminator + type: 'AddProvider'; + // uint64 type MessageSourceId + authorizedMsaId: string; + // uint16[] type schema ids + schemaIds: number[]; + // uint32 type payload expiration block number + expiration: number; +} + +export type SupportedPayload = + | PaginatedUpsertSignaturePayloadV2 + | PaginatedDeleteSignaturePayloadV2 + | ItemizedSignaturePayloadV2 + | PasskeyPublicKey + | ClaimHandlePayload + | AddKeyData + | AddProvider; + +export interface EipDomainPayload { + name: string; + version: string; + chainId: HexString; + verifyingContract: HexString; +} diff --git a/js/ethereum-utils/src/signature.definitions.ts b/js/ethereum-utils/src/signature.definitions.ts new file mode 100644 index 0000000000..f17f005f42 --- /dev/null +++ b/js/ethereum-utils/src/signature.definitions.ts @@ -0,0 +1,158 @@ +import { EipDomainPayload } from './payloads'; + +export const EIP712_DOMAIN_DEFINITION = { + EIP712Domain: [ + { + name: 'name', + type: 'string', + }, + { + name: 'version', + type: 'string', + }, + { + name: 'chainId', + type: 'uint256', + }, + { + name: 'verifyingContract', + type: 'address', + }, + ], +}; + +// using pallet_revive test chain ID for now. +export const EIP712_DOMAIN_DEFAULT: EipDomainPayload = { + name: 'Frequency', + version: '1', + chainId: '0x190f1b44', + verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', +}; + +export const ADD_PROVIDER_DEFINITION = { + AddProvider: [ + { + name: 'authorizedMsaId', + type: 'uint64', + }, + { + name: 'schemaIds', + type: 'uint16[]', + }, + { + name: 'expiration', + type: 'uint32', + }, + ], +}; + +export const ADD_KEY_DATA_DEFINITION = { + AddKeyData: [ + { + name: 'msaId', + type: 'uint64', + }, + { + name: 'expiration', + type: 'uint32', + }, + { + name: 'newPublicKey', + type: 'address', + }, + ], +}; + +export const CLAIM_HANDLE_PAYLOAD_DEFINITION = { + ClaimHandlePayload: [ + { + name: 'handle', + type: 'string', + }, + { + name: 'expiration', + type: 'uint32', + }, + ], +}; + +export const PASSKEY_PUBLIC_KEY_DEFINITION = { + PasskeyPublicKey: [ + { + name: 'publicKey', + type: 'bytes', + }, + ], +}; + +export const PAGINATED_DELETE_SIGNATURE_PAYLOAD_DEFINITION_V2 = { + PaginatedDeleteSignaturePayloadV2: [ + { + name: 'schemaId', + type: 'uint16', + }, + { + name: 'pageId', + type: 'uint16', + }, + { + name: 'targetHash', + type: 'uint32', + }, + { + name: 'expiration', + type: 'uint32', + }, + ], +}; + +export const PAGINATED_UPSERT_SIGNATURE_PAYLOAD_DEFINITION_V2 = { + PaginatedUpsertSignaturePayloadV2: [ + { + name: 'schemaId', + type: 'uint16', + }, + { + name: 'pageId', + type: 'uint16', + }, + { + name: 'targetHash', + type: 'uint32', + }, + { + name: 'expiration', + type: 'uint32', + }, + { + name: 'payload', + type: 'bytes', + }, + ], +}; + +export const ITEMIZED_SIGNATURE_PAYLOAD_DEFINITION_V2 = { + ItemizedSignaturePayloadV2: [ + { + name: 'schemaId', + type: 'uint16', + }, + { + name: 'targetHash', + type: 'uint32', + }, + { + name: 'expiration', + type: 'uint32', + }, + { + name: 'actions', + type: 'ItemAction[]', + }, + ], + ItemAction: [ + { name: 'actionType', type: 'string' }, + { name: 'data', type: 'bytes' }, + { name: 'index', type: 'uint16' }, + ], +}; diff --git a/js/ethereum-utils/src/signature.ts b/js/ethereum-utils/src/signature.ts new file mode 100644 index 0000000000..3f85f9ef44 --- /dev/null +++ b/js/ethereum-utils/src/signature.ts @@ -0,0 +1,507 @@ +import { + AddKeyData, + AddProvider, + ChainType, + ClaimHandlePayload, + EcdsaSignature, + ItemizedSignaturePayloadV2, + PaginatedDeleteSignaturePayloadV2, + PaginatedUpsertSignaturePayloadV2, + PasskeyPublicKey, + SupportedPayload, + HexString, + AddItemizedAction, + DeleteItemizedAction, + ItemizedAction, + EipDomainPayload, +} from './payloads'; +import { assert, isHexString, isValidUint16, isValidUint32, isValidUint64String } from './utils'; +import { reverseUnifiedAddressToEthereumAddress } from './address'; +import { ethers, TypedDataField } from 'ethers'; +import { u8aToHex } from '@polkadot/util'; +import { + ADD_KEY_DATA_DEFINITION, + ADD_PROVIDER_DEFINITION, + CLAIM_HANDLE_PAYLOAD_DEFINITION, + EIP712_DOMAIN_DEFAULT, + EIP712_DOMAIN_DEFINITION, + ITEMIZED_SIGNATURE_PAYLOAD_DEFINITION_V2, + PAGINATED_DELETE_SIGNATURE_PAYLOAD_DEFINITION_V2, + PAGINATED_UPSERT_SIGNATURE_PAYLOAD_DEFINITION_V2, + PASSKEY_PUBLIC_KEY_DEFINITION, +} from './signature.definitions'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { Signer, SignerResult } from '@polkadot/types/types'; + +/** + * Signing EIP-712 compatible signature for payload + * @param secretKey + * @param payload + * @param chain + */ +export async function signEip712( + secretKey: HexString, + payload: SupportedPayload, + chain: ChainType = 'Mainnet-Frequency' +): Promise { + const types = getTypesFor(payload.type); + const normalizedPayload = normalizePayload(payload); + const wallet = new ethers.Wallet(secretKey); + // TODO: use correct chainID for different networks + // TODO: use correct contract address for different payloads + const signature = await wallet.signTypedData(EIP712_DOMAIN_DEFAULT, types, normalizedPayload); + return { Ecdsa: signature } as EcdsaSignature; +} + +/** + * Verify EIP-712 signatures + * @param ethereumAddress + * @param signature + * @param payload + * @param chain + */ +export function verifyEip712Signature( + ethereumAddress: HexString, + signature: HexString, + payload: SupportedPayload, + chain: ChainType = 'Mainnet-Frequency' +): boolean { + const types = getTypesFor(payload.type); + const normalizedPayload = normalizePayload(payload); + // TODO: use correct chainID for different networks + // TODO: use correct contract address for different payloads + const recoveredAddress = ethers.verifyTypedData(EIP712_DOMAIN_DEFAULT, types, normalizedPayload, signature); + return recoveredAddress.toLowerCase() === ethereumAddress.toLowerCase(); +} + +function normalizePayload(payload: SupportedPayload): Record { + const clonedPayload = Object.assign({}, payload); + switch (clonedPayload.type) { + case 'PaginatedUpsertSignaturePayloadV2': + case 'PaginatedDeleteSignaturePayloadV2': + case 'ItemizedSignaturePayloadV2': + case 'PasskeyPublicKey': + case 'ClaimHandlePayload': + case 'AddProvider': + break; + + case 'AddKeyData': + // convert to 20 bytes ethereum address for signature + if (clonedPayload.newPublicKey.length !== 42) { + clonedPayload.newPublicKey = reverseUnifiedAddressToEthereumAddress((payload as AddKeyData).newPublicKey); + } + clonedPayload.newPublicKey = clonedPayload.newPublicKey.toLowerCase() as HexString; + break; + + default: + throw new Error(`Unsupported payload type: ${JSON.stringify(payload)}`); + } + + // Remove the type field + const { type, ...payloadWithoutType } = clonedPayload; + + return payloadWithoutType; +} + +function getTypesFor(payloadType: string): Record { + const PAYLOAD_TYPE_DEFINITIONS: Record> = { + PaginatedUpsertSignaturePayloadV2: PAGINATED_UPSERT_SIGNATURE_PAYLOAD_DEFINITION_V2, + PaginatedDeleteSignaturePayloadV2: PAGINATED_DELETE_SIGNATURE_PAYLOAD_DEFINITION_V2, + ItemizedSignaturePayloadV2: ITEMIZED_SIGNATURE_PAYLOAD_DEFINITION_V2, + PasskeyPublicKey: PASSKEY_PUBLIC_KEY_DEFINITION, + ClaimHandlePayload: CLAIM_HANDLE_PAYLOAD_DEFINITION, + AddKeyData: ADD_KEY_DATA_DEFINITION, + AddProvider: ADD_PROVIDER_DEFINITION, + }; + + const definition = PAYLOAD_TYPE_DEFINITIONS[payloadType]; + + if (!definition) { + throw new Error(`Unsupported payload type: ${payloadType}`); + } + + return definition; +} + +/** + * Build an AddKeyData payload for signature. + * + * @param msaId MSA ID (uint64) to add the key + * @param newPublicKey 32 bytes public key to add in hex or Uint8Array + * @param expirationBlock Block number after which this payload is invalid + */ +export function createAddKeyData( + msaId: string | bigint, + newPublicKey: HexString | Uint8Array, + expirationBlock: number +): AddKeyData { + const parsedMsaId: string = typeof msaId === 'string' ? msaId : `${msaId}`; + const parsedNewPublicKey: HexString = typeof newPublicKey === 'object' ? u8aToHex(newPublicKey) : newPublicKey; + + assert(isValidUint64String(parsedMsaId), 'msaId should be a valid uint64'); + assert(isValidUint32(expirationBlock), 'expiration should be a valid uint32'); + assert(isHexString(parsedNewPublicKey), 'newPublicKey should be valid hex'); + return { + type: 'AddKeyData', + msaId: parsedMsaId, + expiration: expirationBlock, + newPublicKey: parsedNewPublicKey, + }; +} + +/** + * Build an AddProvider payload for signature. + * + * @param authorizedMsaId MSA ID (uint64) that will be granted provider rights + * @param schemaIds One or more schema IDs (uint16) the provider may use + * @param expirationBlock Block number after which this payload is invalid + */ +export function createAddProvider( + authorizedMsaId: string | bigint, + schemaIds: number[], + expirationBlock: number +): AddProvider { + assert(isValidUint64String(authorizedMsaId), 'authorizedMsaId should be a valid uint64'); + assert(isValidUint32(expirationBlock), 'expiration should be a valid uint32'); + schemaIds.forEach((schemaId) => { + assert(isValidUint16(schemaId), 'schemaId should be a valid uint16'); + }); + + return { + type: 'AddProvider', + authorizedMsaId: authorizedMsaId.toString(), + schemaIds, + expiration: expirationBlock, + }; +} + +/** + * Build a ClaimHandlePayload for signature. + * + * @param handle The handle the user wishes to claim + * @param expirationBlock Block number after which this payload is invalid + */ +export function createClaimHandlePayload(handle: string, expirationBlock: number): ClaimHandlePayload { + assert(handle.length > 0, 'handle should be a valid string'); + assert(isValidUint32(expirationBlock), 'expiration should be a valid uint32'); + + return { + type: 'ClaimHandlePayload', + handle, + expiration: expirationBlock, + }; +} + +/** + * Build a PasskeyPublicKey payload for signature. + * + * @param publicKey The passkey’s public key (hex string or raw bytes) + */ +export function createPasskeyPublicKey(publicKey: HexString | Uint8Array): PasskeyPublicKey { + const parsedNewPublicKey: HexString = typeof publicKey === 'object' ? u8aToHex(publicKey) : publicKey; + assert(isHexString(parsedNewPublicKey), 'publicKey should be valid hex'); + + return { + type: 'PasskeyPublicKey', + publicKey: parsedNewPublicKey, + }; +} + +export function createItemizedAddAction(data: HexString | Uint8Array): AddItemizedAction { + const parsedData: HexString = typeof data === 'object' ? u8aToHex(data) : data; + assert(isHexString(parsedData), 'itemized data should be valid hex'); + return { actionType: 'Add', data, index: 0 } as AddItemizedAction; +} + +export function createItemizedDeleteAction(index: number): DeleteItemizedAction { + assert(isValidUint16(index), 'itemized index should be a valid uint16'); + + return { actionType: 'Delete', data: '0x', index }; +} + +/** + * Build an ItemizedSignaturePayloadV2 for signing. + * + * @param schemaId uint16 schema identifier + * @param targetHash uint32 page hash + * @param expiration uint32 expiration block + * @param actions Array of Add/Delete itemized actions + */ +export function createItemizedSignaturePayloadV2( + schemaId: number, + targetHash: number, + expiration: number, + actions: ItemizedAction[] +): ItemizedSignaturePayloadV2 { + assert(isValidUint16(schemaId), 'schemaId should be a valid uint16'); + assert(isValidUint32(targetHash), 'targetHash should be a valid uint32'); + assert(isValidUint32(expiration), 'expiration should be a valid uint32'); + assert(actions.length > 0, 'At least one action is required for ItemizedSignaturePayloadV2'); + + return { + type: 'ItemizedSignaturePayloadV2', + schemaId, + targetHash, + expiration, + actions, + }; +} + +/** + * Build a PaginatedDeleteSignaturePayloadV2 for signing. + * + * @param schemaId uint16 schema identifier + * @param pageId uint16 page identifier + * @param targetHash uint32 page hash + * @param expiration uint32 expiration block + */ +export function createPaginatedDeleteSignaturePayloadV2( + schemaId: number, + pageId: number, + targetHash: number, + expiration: number +): PaginatedDeleteSignaturePayloadV2 { + assert(isValidUint16(schemaId), 'schemaId should be a valid uint16'); + assert(isValidUint16(pageId), 'pageId should be a valid uint16'); + assert(isValidUint32(targetHash), 'targetHash should be a valid uint32'); + assert(isValidUint32(expiration), 'expiration should be a valid uint32'); + + return { + type: 'PaginatedDeleteSignaturePayloadV2', + schemaId, + pageId, + targetHash, + expiration, + }; +} + +/** + * Build a PaginatedUpsertSignaturePayloadV2 for signing. + * + * @param schemaId uint16 schema identifier + * @param pageId uint16 page identifier + * @param targetHash uint32 page hash + * @param expiration uint32 expiration block + * @param payload HexString or Uint8Array data to upsert + */ +export function createPaginatedUpsertSignaturePayloadV2( + schemaId: number, + pageId: number, + targetHash: number, + expiration: number, + payload: HexString | Uint8Array +): PaginatedUpsertSignaturePayloadV2 { + const parsedPayload: HexString = typeof payload === 'object' ? u8aToHex(payload) : payload; + + assert(isValidUint16(schemaId), 'schemaId should be a valid uint16'); + assert(isValidUint16(pageId), 'pageId should be a valid uint16'); + assert(isValidUint32(targetHash), 'targetHash should be a valid uint32'); + assert(isValidUint32(expiration), 'expiration should be a valid uint32'); + assert(isHexString(parsedPayload), 'payload should be valid hex'); + + return { + type: 'PaginatedUpsertSignaturePayloadV2', + schemaId, + pageId, + targetHash, + expiration, + payload: parsedPayload, + }; +} + +/** + * Returns the EIP-712 browser request for a AddKeyData for signing. + * + * @param msaId MSA ID (uint64) to add the key + * @param newPublicKey 32 bytes public key to add in hex or Uint8Array + * @param expirationBlock Block number after which this payload is invalid + * @param domain + */ +export function getEip712BrowserRequestAddKeyData( + msaId: string | bigint, + newPublicKey: HexString | Uint8Array, + expirationBlock: number, + domain: EipDomainPayload = EIP712_DOMAIN_DEFAULT +): unknown { + const message = createAddKeyData(msaId, newPublicKey, expirationBlock); + const normalized = normalizePayload(message); + return createEip712Payload(ADD_KEY_DATA_DEFINITION, message.type, domain, normalized); +} + +/** + * Returns the EIP-712 browser request for a AddProvider for signing. + * + * @param authorizedMsaId MSA ID (uint64) that will be granted provider rights + * @param schemaIds One or more schema IDs (uint16) the provider may use + * @param expirationBlock Block number after which this payload is invalid + * @param domain + */ +export function getEip712BrowserRequestAddProvider( + authorizedMsaId: string | bigint, + schemaIds: number[], + expirationBlock: number, + domain: EipDomainPayload = EIP712_DOMAIN_DEFAULT +): unknown { + const message = createAddProvider(authorizedMsaId, schemaIds, expirationBlock); + const normalized = normalizePayload(message); + return createEip712Payload(ADD_PROVIDER_DEFINITION, message.type, domain, normalized); +} + +/** + * Returns the EIP-712 browser request for a PaginatedUpsertSignaturePayloadV2 for signing. + * + * @param schemaId uint16 schema identifier + * @param pageId uint16 page identifier + * @param targetHash uint32 page hash + * @param expiration uint32 expiration block + * @param payload HexString or Uint8Array data to upsert + * @param domain + */ +export function getEip712BrowserRequestPaginatedUpsertSignaturePayloadV2( + schemaId: number, + pageId: number, + targetHash: number, + expiration: number, + payload: HexString | Uint8Array, + domain: EipDomainPayload = EIP712_DOMAIN_DEFAULT +): unknown { + const message = createPaginatedUpsertSignaturePayloadV2(schemaId, pageId, targetHash, expiration, payload); + const normalized = normalizePayload(message); + return createEip712Payload(PAGINATED_UPSERT_SIGNATURE_PAYLOAD_DEFINITION_V2, message.type, domain, normalized); +} + +/** + * Returns the EIP-712 browser request for a PaginatedDeleteSignaturePayloadV2 for signing. + * + * @param schemaId uint16 schema identifier + * @param pageId uint16 page identifier + * @param targetHash uint32 page hash + * @param expiration uint32 expiration block + * @param domain + */ +export function getEip712BrowserRequestPaginatedDeleteSignaturePayloadV2( + schemaId: number, + pageId: number, + targetHash: number, + expiration: number, + domain: EipDomainPayload = EIP712_DOMAIN_DEFAULT +): unknown { + const message = createPaginatedDeleteSignaturePayloadV2(schemaId, pageId, targetHash, expiration); + const normalized = normalizePayload(message); + return createEip712Payload(PAGINATED_DELETE_SIGNATURE_PAYLOAD_DEFINITION_V2, message.type, domain, normalized); +} + +/** + * Returns the EIP-712 browser request for a ItemizedSignaturePayloadV2 for signing. + * + * @param schemaId uint16 schema identifier + * @param targetHash uint32 page hash + * @param expiration uint32 expiration block + * @param actions Array of Add/Delete itemized actions + * @param domain + */ +export function getEip712BrowserRequestItemizedSignaturePayloadV2( + schemaId: number, + targetHash: number, + expiration: number, + actions: ItemizedAction[], + domain: EipDomainPayload = EIP712_DOMAIN_DEFAULT +): unknown { + const message = createItemizedSignaturePayloadV2(schemaId, targetHash, expiration, actions); + const normalized = normalizePayload(message); + return createEip712Payload(ITEMIZED_SIGNATURE_PAYLOAD_DEFINITION_V2, message.type, domain, normalized); +} + +/** + * Returns the EIP-712 browser request for a ClaimHandlePayload for signing. + * + * @param handle The handle the user wishes to claim + * @param expirationBlock Block number after which this payload is invalid + * @param domain + */ +export function getEip712BrowserRequestClaimHandlePayload( + handle: string, + expirationBlock: number, + domain: EipDomainPayload = EIP712_DOMAIN_DEFAULT +): unknown { + const message = createClaimHandlePayload(handle, expirationBlock); + const normalized = normalizePayload(message); + return createEip712Payload(CLAIM_HANDLE_PAYLOAD_DEFINITION, message.type, domain, normalized); +} + +/** + * Returns the EIP-712 browser request for a PasskeyPublicKey for signing. + * + * @param publicKey The passkey’s public key (hex string or raw bytes) + * @param domain + */ +export function getEip712BrowserRequestPasskeyPublicKey( + publicKey: HexString | Uint8Array, + domain: EipDomainPayload = EIP712_DOMAIN_DEFAULT +): unknown { + const message = createPasskeyPublicKey(publicKey); + const normalized = normalizePayload(message); + return createEip712Payload(PASSKEY_PUBLIC_KEY_DEFINITION, message.type, domain, normalized); +} + +function createEip712Payload(typeDefinition: any, primaryType: any, domain: EipDomainPayload, message: any): unknown { + return { + types: { + ...EIP712_DOMAIN_DEFINITION, + ...typeDefinition, + }, + primaryType, + domain, + message, + }; +} + +/** + * Returns An ethereum compatible signature for the extrinsic + * @param ethereumPair + */ + +export function getEthereumRegularSigner(ethereumPair: KeyringPair): Signer { + return { + signRaw: async (payload): Promise => { + const sig = ethereumPair.sign(payload.data); + const prefixedSignature = new Uint8Array(sig.length + 1); + prefixedSignature[0] = 2; + prefixedSignature.set(sig, 1); + const hex = u8aToHex(prefixedSignature); + return { + signature: hex, + } as SignerResult; + }, + }; +} + +/** + * This custom signer can get used to mimic EIP-191 message signing. By replacing the `ethereumPair.sign` with + * any wallet call we can sign any extrinsic with any wallet + * @param ethereumPair + */ +export function getEthereumMessageSigner(ethereumPair: KeyringPair): Signer { + return { + signRaw: async (payload): Promise => { + const sig = ethereumPair.sign(prefixEthereumTags(payload.data)); + const prefixedSignature = new Uint8Array(sig.length + 1); + prefixedSignature[0] = 2; + prefixedSignature.set(sig, 1); + const hex = u8aToHex(prefixedSignature); + return { + signature: hex, + } as SignerResult; + }, + }; +} + +/** + * prefixing with the EIP-191 for personal_sign messages (this gets wrapped automatically in Metamask) + * @param hexPayload + */ +function prefixEthereumTags(hexPayload: string): Uint8Array { + const wrapped = `\x19Ethereum Signed Message:\n${hexPayload.length}${hexPayload}`; + const buffer = Buffer.from(wrapped, 'utf-8'); + return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.length); +} diff --git a/js/ethereum-utils/src/utils.ts b/js/ethereum-utils/src/utils.ts new file mode 100644 index 0000000000..fa96285ba9 --- /dev/null +++ b/js/ethereum-utils/src/utils.ts @@ -0,0 +1,44 @@ +import { HexString } from './payloads'; + +/** + * Validate that a number is a valid uint16 (0 to 65535) + */ +export function isValidUint16(value: number): boolean { + return Number.isInteger(value) && value >= 0 && value <= 65535; +} + +/** + * Validate that a number is a valid uint32 (0 to 4294967295) + */ +export function isValidUint32(value: number): boolean { + return Number.isInteger(value) && value >= 0 && value <= 4294967295; +} + +/** + * Validate that a number is a valid uint64 (0 to 18446744073709551615n) + */ +export function isValidUint64String(value: bigint | string): boolean { + const bigIntValue = typeof value === 'string' ? BigInt(value) : value; + return bigIntValue >= 0 && bigIntValue <= 18446744073709551615n; +} + +/** + * Validate that a string is a valid hex string + */ +export function isHexString(value: string): value is HexString { + // Check if string starts with '0x' and contains only hex characters + const hexRegex = /^0[xX][0-9a-fA-F]*$/; + const isHex = hexRegex.test(value); + return isHex && value.length % 2 === 0; +} + +/** + * Universal assert function + * @param condition + * @param message + */ +export function assert(condition: boolean, message?: string): asserts condition { + if (!condition) { + throw new Error(message || ' Assertion failed'); + } +} diff --git a/js/ethereum-utils/test/address.test.ts b/js/ethereum-utils/test/address.test.ts new file mode 100644 index 0000000000..7cd16fb045 --- /dev/null +++ b/js/ethereum-utils/test/address.test.ts @@ -0,0 +1,123 @@ +import assert from 'assert'; +import { + reverseUnifiedAddressToEthereumAddress, + HexString, + getSS58AccountFromEthereumAccount, + getUnifiedPublicKey, + getUnifiedAddress, + createRandomKey, +} from '../src'; +import { hexToU8a, u8aToHex } from '@polkadot/util'; + +describe('Address tests', function () { + it('should correctly extract the Ethereum address from a valid unified address', function () { + // Arrange + const validEthAddress = '0x1234567890123456789012345678901234567890' as HexString; + const unifiedAddress = `${validEthAddress}${'ee'.repeat(12)}` as HexString; + + // Act + const result = reverseUnifiedAddressToEthereumAddress(unifiedAddress); + + // Assert + assert.deepEqual(result, validEthAddress); + }); + + it('should throw an error when the unified address is not reversible', function () { + // Arrange + const invalidUnifiedAddress = '0x1234567890123456789012345678901234567890abcdef' as HexString; + + // Act & Assert + assert.throws( + () => { + reverseUnifiedAddressToEthereumAddress(invalidUnifiedAddress); + }, + new Error(`Address ${invalidUnifiedAddress} is not reversible!`) + ); + }); + + it('should correctly convert an Ethereum address to SS58 format', function () { + const ethereumAddress = '0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac'; + const ss58 = '5HYRCKHYJN9z5xUtfFkyMj4JUhsAwWyvuU8vKB1FcnYTf9ZQ'; + + const result = getSS58AccountFromEthereumAccount(ethereumAddress); + + assert.equal(result, ss58); + }); + + describe('getUnifiedPublicKey ', function () { + it('should return the original publicKey for sr25519 and ed25519', function () { + // Arrange + const originalPublicKey = new Uint8Array(32).fill(3); // Dummy public key + const ed25519Pair = { + type: 'ed25519', + publicKey: originalPublicKey, + }; + + // Act + const result = getUnifiedPublicKey(ed25519Pair); + + // Assert + assert.equal(result, originalPublicKey); + + // Also test with sr25519 type + const sr25519Pair = { + type: 'sr25519', + publicKey: originalPublicKey, + }; + + const result2 = getUnifiedPublicKey(sr25519Pair); + assert.equal(result2, originalPublicKey); + }); + + it('should throw an error for ecdsa key type', function () { + // Arrange + const ecdsaPair = { + type: 'ecdsa', + publicKey: new Uint8Array(32).fill(2), + }; + + // Act & Assert + assert.throws(() => { + getUnifiedPublicKey(ecdsaPair); + }, new Error('Ecdsa key type is not supported and it should be replaced with ethereum ones!')); + }); + + it('should properly handle ethereum key type', function () { + const ethPublicKey = '0x02509540919faacf9ab52146c9aa40db68172d83777250b28e4679176e49ccdd9f'; + const ethPair = { + type: 'ethereum', + publicKey: hexToU8a(ethPublicKey), + }; + const unifiedPublicKey = hexToU8a('0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566caceeeeeeeeeeeeeeeeeeeeeeee'); + + const result = getUnifiedPublicKey(ethPair); + assert.deepEqual(result, unifiedPublicKey); + }); + }); + + describe('getUnifiedAddress ', function () { + it('should properly handle ethereum key type', function () { + const ethPublicKey = '0x02509540919faacf9ab52146c9aa40db68172d83777250b28e4679176e49ccdd9f'; + const ethPair = { + type: 'ethereum', + publicKey: hexToU8a(ethPublicKey), + }; + const unifiedPublicKey = '5HYRCKHYJN9z5xUtfFkyMj4JUhsAwWyvuU8vKB1FcnYTf9ZQ'; + + const result = getUnifiedAddress(ethPair); + assert.deepEqual(result, unifiedPublicKey); + }); + }); + + describe('should create new keys', function () { + it('it should generate random keys', function () { + const key1 = createRandomKey(); + const key2 = createRandomKey(); + + assert.notDeepEqual(key1.publicKey, key2.publicKey); + assert.notDeepEqual(key1.privateKey, key2.privateKey); + assert.notDeepEqual(key1.address, key2.address); + assert.notDeepEqual(key1.mnemonic, key2.mnemonic); + }); + }); +}); diff --git a/js/ethereum-utils/test/signature.test.ts b/js/ethereum-utils/test/signature.test.ts new file mode 100644 index 0000000000..0790600dd6 --- /dev/null +++ b/js/ethereum-utils/test/signature.test.ts @@ -0,0 +1,253 @@ +import assert from 'assert'; +import { + createAddKeyData, + createAddProvider, + createClaimHandlePayload, + createItemizedAddAction, + createItemizedDeleteAction, + createItemizedSignaturePayloadV2, + createPaginatedDeleteSignaturePayloadV2, + createPaginatedUpsertSignaturePayloadV2, + createPasskeyPublicKey, + signEip712, + HexString, + verifyEip712Signature, +} from '../src'; + +describe('Signature related tests', function () { + describe('Signature Payload Creation tests', function () { + it('should create valid createAddKeyData payloads', function () { + const payload1 = createAddKeyData('27', '0x123456', 90); + const payload2 = createAddKeyData(27n, new Uint8Array([18, 52, 86]), 90); + + const expected = { + type: 'AddKeyData', + msaId: '27', + expiration: 90, + newPublicKey: '0x123456', + }; + + assert.deepEqual(payload1, expected); + assert.deepEqual(payload2, expected); + }); + + it('should create valid createAddProvider payloads', function () { + const payload1 = createAddProvider('27', [18, 52, 86], 90); + const payload2 = createAddProvider(27n, [18, 52, 86], 90); + + const expected = { + type: 'AddProvider', + authorizedMsaId: '27', + expiration: 90, + schemaIds: [18, 52, 86], + }; + + assert.deepEqual(payload1, expected); + assert.deepEqual(payload2, expected); + }); + + it('should create valid createClaimHandlePayload payloads', function () { + const payload1 = createClaimHandlePayload('test', 90); + + const expected = { + type: 'ClaimHandlePayload', + handle: 'test', + expiration: 90, + }; + + assert.deepEqual(payload1, expected); + }); + + it('should create valid createPasskeyPublicKey payloads', function () { + const payload1 = createPasskeyPublicKey('0x123456'); + const payload2 = createPasskeyPublicKey(new Uint8Array([18, 52, 86])); + + const expected = { + type: 'PasskeyPublicKey', + publicKey: '0x123456', + }; + + assert.deepEqual(payload1, expected); + assert.deepEqual(payload2, expected); + }); + + it('should create valid createItemizedSignaturePayloadV2 payloads', function () { + const addAction = createItemizedAddAction('0x123456'); + const addAction2 = createItemizedAddAction(new Uint8Array([18, 52, 86])); + const deleteAction = createItemizedDeleteAction(4); + const actions = [addAction, addAction2, deleteAction]; + const payload1 = createItemizedSignaturePayloadV2(64, 92187389, 90, actions); + + const expected = { + type: 'ItemizedSignaturePayloadV2', + schemaId: 64, + targetHash: 92187389, + expiration: 90, + actions, + }; + + assert.deepEqual(payload1, expected); + }); + + it('should create valid createPaginatedDeleteSignaturePayloadV2 payloads', function () { + const payload1 = createPaginatedDeleteSignaturePayloadV2(1, 2, 34324, 90); + + const expected = { + type: 'PaginatedDeleteSignaturePayloadV2', + schemaId: 1, + pageId: 2, + targetHash: 34324, + expiration: 90, + }; + + assert.deepEqual(payload1, expected); + }); + + it('should create valid createPaginatedUpsertSignaturePayloadV2 payloads', function () { + const payload1 = createPaginatedUpsertSignaturePayloadV2(1, 2, 34324, 90, '0x123456'); + const payload2 = createPaginatedUpsertSignaturePayloadV2(1, 2, 34324, 90, new Uint8Array([18, 52, 86])); + + const expected = { + type: 'PaginatedUpsertSignaturePayloadV2', + schemaId: 1, + pageId: 2, + targetHash: 34324, + expiration: 90, + payload: '0x123456', + }; + + assert.deepEqual(payload1, expected); + assert.deepEqual(payload2, expected); + }); + }); + + describe('EIP-712 Signing tests', function () { + const secretKey: HexString = '0x5fb92d6e98884f76de468fa3f6278f8807c48bebc13595d45af5bdc4da702133'; + + it('should create a valid signature for PaginatedUpsertSignaturePayloadV2', async function () { + const payload1 = createPaginatedUpsertSignaturePayloadV2( + 10, + 5, + 1982672367, + 100, + '0x0000f20f0efece05af6bee4fe6b24db6febe6988d24f62015e23d1f1ce9b7040301a8a3cefc00c1162067f70d004ed86588cd6183b3564b9d92e9924cba2244a9e9f85e334e1b8bb5e8f770a81866c4c406cfadaef2a8f93bf8b89a5f4efce86a3cfc1ff4d93a8d362d630bf16ac5766de75c5fef57af69b147cb629ad8c1359691c9ab6f5380527e3c18d71b0480747a9628693b86473f1e7f01abe5bb7eadb76fad361669241e74bffed13b49e5c7dd08a8d3a7722bcbfad494627256c7e77f2c9b2b596a5f468a82e06f5905d13707355e2dd77d9b9480ec959a7f870b68fce122ddad81e06fe4dec48e01206df9e6e3a4e0d928b722220ec199d22324fb2ce6a8b6581175476d940bd499435091c0b0b3d0303e3bf60732ff8e898223a39aa8623cf33a1623af2cfc8d6fc83f4b53ed32ef4fdab29035150d9dc3b7e60ac91fb1fbb6895a007913fee3940c8f8e3ececcf50b3076b65c62f8bd8c039f90182d89bf4c0a2f426e957a8732a9936f8a0aab8b3c18183eb605f5a0bac859eb7d6d88eea4c02444116a6dec0a790d83abce10de20bb29c3f980864eb23f555422ff36421e14df39bb53606cbb4dda195c321ce4fa4fc7143ac267ae811b6949d51f521ddaf08a3663dd3a1eb2b783b31dcbfc830f6f542499857767c39fb85a29ebf175e0f0877e89a9e564307a7d7eb9d1f8401f0a65382cfc051fa5d34829381f624e2a556e2c3002eea63e50ad8463bf8ac6096249983f8d1925c0d9392e67203be98daae7305b52962b95fbeca76c7db2ceec6208d21efb68350aedec3a48cba0c9112c93efb98d363dfa26471b163b05d1655f0af7d867fd25dcc4d5e1a5cb3934586ba7a418f489439f3f551c1017bde009dba49dbc132c7066eecea25e2e231491f136a1fe9a83f0f1091c7e9b2cf8d24541fe21af50a46e6537f80ed2065da8842b928cb27ec23169c129863d5540f05a4dac070f3c834cfe998503f4a42a7ae4e2b1ef694e7600027e48721560d8d66a46c5ac7899d71985c7ccb60d4225cd08307c497138b6cbb00803cf9be1251798c6ddd8c972f78455a43acc7bf6278dda25946dc8638c20042ba333ee6e6da605bb05b1d01c5715c1723a2d6147eca637f6a7f50b807476e482c29769e1b94b43ac7b1921e99c60c795cf034a706c28befbcbe448f926ca212eb4607157dd9dd30c89b9a885202789b2ac9a6e030c1d87d5341c59b64105a88caa13cdcc42bbdda752169234e39d94f6aadcfdd99e80e9eb3a10ea5a80ba4825370ad9935d5b8cda568d2c7db63a8e016cb78bd0d657f5d1f6916fb48a3678d973dc8835a49f5e2a0ff07698c360492f568def07397129d290a86cefd0524c826b73e85c48a8e525aafe77bd0c1e9a0c2a4a4ea96343adfe81fad9ef12200ed90c6c476906d710e16d3af77a4e18164' + ); + + const signature = await signEip712(secretKey, payload1); + + const expected = { + Ecdsa: + '0xbb182602012c1489a6b98af9d867d7c2c0ef111a1a20653a028e49d4ec60e2a64e4983270c6d9de76eaed3283a3f34a5829920e057b77bed6861b2616c22be381b', + }; + + assert.deepEqual(signature, expected); + assert( + verifyEip712Signature('0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac', expected.Ecdsa, payload1), + 'should verify' + ); + }); + + it('should create a valid signature for PaginatedDeleteSignaturePayloadV2', async function () { + const payload1 = createPaginatedDeleteSignaturePayloadV2(10, 5, 1982672367, 100); + const signature = await signEip712(secretKey, payload1); + + const expected = { + Ecdsa: + '0xd6f327427488e9f03bda92113a9d1c2e881bc3e8d1d6a065b727c154733983b3059ad4fa5cf28cdf1aae9e0faa3fde6427f92686cf55c3a12180610cb3effe371b', + }; + + assert.deepEqual(signature, expected); + assert( + verifyEip712Signature('0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac', expected.Ecdsa, payload1), + 'should verify' + ); + }); + + it('should create a valid signature for ItemizedSignaturePayloadV2', async function () { + const addAction = createItemizedAddAction('0x40a6836ea489047852d3f0297f8fe8ad6779793af4e9c6274c230c207b9b825026'); + const deleteAction = createItemizedDeleteAction(2); + const actions = [addAction, deleteAction]; + const payload1 = createItemizedSignaturePayloadV2(10, 1982672367, 100, actions); + const signature = await signEip712(secretKey, payload1); + + const expected = { + Ecdsa: + '0xc6c38093c57cd605ca5adfe5d538be89c7bbea4309c797078ed23fe4bb6ad8cb245ae12b19bb9c9b8c084b356b02f6f09f7e107c262c1aff0714a681bc3af5b51b', + }; + + assert.deepEqual(signature, expected); + assert( + verifyEip712Signature('0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac', expected.Ecdsa, payload1), + 'should verify' + ); + }); + + it('should create a valid signature for AddKeyData', async function () { + const payload1 = createAddKeyData( + 12876327n, + '0x7A23f8d62589aB9651722C7f4a0e998d7d3eF2A9eeeeeeeeeeeeeeeeeeeeeeee', + 100 + ); + const signature = await signEip712(secretKey, payload1); + + const expected = { + Ecdsa: + '0x7fb9df5e7f51875509456fe24de92c256c4dcaaaeb952fe36bb30f79c8cc3bbf2f988fa1c55efb6bf20825e98de5cc1ac0bdcf036ad1e0f9ee969a729540ff8d1c', + }; + + assert.deepEqual(signature, expected); + assert( + verifyEip712Signature('0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac', expected.Ecdsa, payload1), + 'should verify' + ); + }); + + it('should create a valid signature for AddProvider', async function () { + const payload1 = createAddProvider(12876327n, [2, 4, 5, 6, 7, 8], 100); + const signature = await signEip712(secretKey, payload1); + + const expected = { + Ecdsa: + '0x34ed5cc291815bdc7d95b418b341bbd3d9ca82c284d5f22d8016c27bb9d4eef8507cdb169a40e69dc5d7ee8ff0bff29fa0d8fc4e73cad6fc9bf1bf076f8e0a741c', + }; + + assert.deepEqual(signature, expected); + assert( + verifyEip712Signature('0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac', expected.Ecdsa, payload1), + 'should verify' + ); + }); + + it('should create a valid signature for ClaimHandlePayload', async function () { + const payload1 = createClaimHandlePayload('Alice', 100); + const signature = await signEip712(secretKey, payload1); + + const expected = { + Ecdsa: + '0x832d1f6870118f5fc6e3cc314152b87dc452bd607581f16b1e39142b553260f8397e80c9f7733aecf1bd46d4e84ad333c648e387b069fa93b4b1ca4fa0fd406b1c', + }; + + assert.deepEqual(signature, expected); + assert( + verifyEip712Signature('0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac', expected.Ecdsa, payload1), + 'should verify' + ); + }); + + it('should create a valid signature for PasskeyPublicKey', async function () { + const payload1 = createPasskeyPublicKey('0x40a6836ea489047852d3f0297f8fe8ad6779793af4e9c6274c230c207b9b825026'); + const signature = await signEip712(secretKey, payload1); + + const expected = { + Ecdsa: + '0xbafaf5e21695a502b2d356b4558da35245aa1be7161f01a5f0224fbfdf85b5c52898fc495ab1ca9b68c3b07e23d31a5fe1686165344b22bc14201f293d54f36b1b', + }; + + assert.deepEqual(signature, expected); + assert( + verifyEip712Signature('0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac', expected.Ecdsa, payload1), + 'should verify' + ); + }); + }); +}); diff --git a/js/ethereum-utils/tsconfig.cjs.json b/js/ethereum-utils/tsconfig.cjs.json new file mode 100644 index 0000000000..ebe4fe2b67 --- /dev/null +++ b/js/ethereum-utils/tsconfig.cjs.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "lib": ["ES2020"], + "module": "CommonJS", + "outDir": "dist/cjs", + "declaration": false + } +} diff --git a/js/ethereum-utils/tsconfig.eslint.json b/js/ethereum-utils/tsconfig.eslint.json new file mode 100644 index 0000000000..2d2a3b3f8b --- /dev/null +++ b/js/ethereum-utils/tsconfig.eslint.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["node_modules/**", "./scripts/**", "./dist/**"] +} diff --git a/js/ethereum-utils/tsconfig.esm.json b/js/ethereum-utils/tsconfig.esm.json new file mode 100644 index 0000000000..fc39b784b8 --- /dev/null +++ b/js/ethereum-utils/tsconfig.esm.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "lib": ["ES2020"], + "module": "ES2022", + "outDir": "dist/esm", + "declaration": false + } +} diff --git a/js/ethereum-utils/tsconfig.json b/js/ethereum-utils/tsconfig.json new file mode 100644 index 0000000000..ad486c3507 --- /dev/null +++ b/js/ethereum-utils/tsconfig.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Base", + "compilerOptions": { + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "moduleResolution": "node", + "module": "esnext", + "noImplicitAny": true, + "outDir": "dist", + "resolveJsonModule": true, + "sourceMap": false, + "strict": true, + "skipLibCheck": true, + "target": "es2022", + "typeRoots": ["node_modules/@types"] + }, + "exclude": ["node_modules/**", "./test/**", "./scripts/**", "**/*.test.ts", "./dist/**"] +} diff --git a/js/ethereum-utils/tsconfig.types.json b/js/ethereum-utils/tsconfig.types.json new file mode 100644 index 0000000000..420c04d5fd --- /dev/null +++ b/js/ethereum-utils/tsconfig.types.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "lib": ["ES2020"], + "target": "es2022", + "outDir": "dist", + "emitDeclarationOnly": true, + "declaration": true + } +} diff --git a/js/schemas/.gitignore b/js/schemas/.gitignore new file mode 100644 index 0000000000..d1db1b8a78 --- /dev/null +++ b/js/schemas/.gitignore @@ -0,0 +1,312 @@ +# Generated Files +metadata.* +interfaces/* + + +# Log Files +*.log + +# All of IDEA +.idea/* + +### Emacs ### +# -*- mode: gitignore; -*- +*~ +\#*\# +/.emacs.desktop +/.emacs.desktop.lock +*.elc +auto-save-list +tramp +.\#* + +# Org-mode +.org-id-locations +*_archive +ltximg/** + +# flymake-mode +*_flymake.* + +# eshell files +/eshell/history +/eshell/lastdir + +# elpa packages +/elpa/ + +# reftex files +*.rel + +# AUCTeX auto folder +/auto/ + +# cask packages +.cask/ +dist/ + +# Flycheck +flycheck_*.el + +# server auth directory +/server/ + +# projectiles files +.projectile + +# directory configuration +.dir-locals.el + +# network security +/network-security.data + + +### Git ### +# Created by git for backups. To disable backups in Git: +# $ git config --global mergetool.keepBackup false +*.orig + +# Created by git when using merge tools for conflicts +*.BACKUP.* +*.BASE.* +*.LOCAL.* +*.REMOTE.* +*_BACKUP_*.txt +*_BASE_*.txt +*_LOCAL_*.txt +*_REMOTE_*.txt + +### Intellij+all ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Intellij+all Patch ### +# Ignores the whole .idea folder and all .iml files +# See https://github.com/joeblau/gitignore.io/issues/186 and https://github.com/joeblau/gitignore.io/issues/360 + +.idea/ + +# Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-249601023 + +*.iml +modules.xml +.idea/misc.xml +*.ipr + +# Sonarlint plugin +.idea/sonarlint + +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test +.env*.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +### Vim ### +# Swap +[._]*.s[a-v][a-z] +!*.svg # comment out if you don't need vector files +[._]*.sw[a-p] +[._]s[a-rt-v][a-z] +[._]ss[a-gi-z] +[._]sw[a-p] + +# Session +Session.vim +Sessionx.vim + +# Temporary +.netrwhist +# Auto-generated tag files +tags +# Persistent undo +[._]*.un~ + +### vscode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# End of https://www.toptal.com/developers/gitignore/api/intellij+all,vim,emacs,vscode,git,node + +junit.xml diff --git a/js/schemas/.mocharc.json b/js/schemas/.mocharc.json new file mode 100644 index 0000000000..53ebf896a5 --- /dev/null +++ b/js/schemas/.mocharc.json @@ -0,0 +1,5 @@ +{ + "$schema": "https://json.schemastore.org/mocharc", + "extension": ["ts"], + "spec": ["test"] +} diff --git a/js/schemas/.node-version b/js/schemas/.node-version new file mode 100644 index 0000000000..87834047a6 --- /dev/null +++ b/js/schemas/.node-version @@ -0,0 +1 @@ +20.12.2 diff --git a/js/schemas/.prettierignore b/js/schemas/.prettierignore new file mode 100644 index 0000000000..2cf62f2962 --- /dev/null +++ b/js/schemas/.prettierignore @@ -0,0 +1,10 @@ +# package.json is formatted by package managers, so we ignore it here +package.json +build/* +coverage/* +multimodules/* +/*.d.ts +/*.map +/*.js +*.md +eslint.config.mjs diff --git a/js/schemas/.prettierrc.json b/js/schemas/.prettierrc.json new file mode 100644 index 0000000000..cd87a91cb1 --- /dev/null +++ b/js/schemas/.prettierrc.json @@ -0,0 +1,8 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false, + "printWidth": 120 +} diff --git a/js/schemas/.tool-versions b/js/schemas/.tool-versions new file mode 100644 index 0000000000..958fb36989 --- /dev/null +++ b/js/schemas/.tool-versions @@ -0,0 +1 @@ +nodejs 20.12.2 diff --git a/js/schemas/CONTRIBUTING.md b/js/schemas/CONTRIBUTING.md new file mode 100644 index 0000000000..de3c703d41 --- /dev/null +++ b/js/schemas/CONTRIBUTING.md @@ -0,0 +1,12 @@ +# CONTRIBUTING + +For contributing guidelines see the [Project Liberty Contributing Guidelines](https://github.com/LibertyDSNP/meta/blob/main/CONTRIBUTING.md). + +## Running Tests +- `js/schemas` folder +- `npm run tests` + +### To generate dsnp schemas from mainnet +- inside `js/schemas/scripts` +- run `npm run generate` +- check the newly generated `data.ts` file inside `js/schemas` diff --git a/js/schemas/README.md b/js/schemas/README.md new file mode 100644 index 0000000000..aad0734df8 --- /dev/null +++ b/js/schemas/README.md @@ -0,0 +1,89 @@ +# Static Schemas package + + + + +[![Contributors][contributors-shield]][contributors-url] +[![Forks][forks-shield]][forks-url] +[![Stargazers][stars-shield]][stars-url] +[![Issues][issues-shield]][issues-url] +[![MIT License][license-shield]][license-url] +[![NPM @latest][npm-shield]][npm-url] +[![NPM @next][npm-next-shield]][npm-next-url] + +# Static schemas + +A convenient way to get schema details locally with TypeScript. + + + +## Getting Started + +- `npm install @frequency-chain/schemas` (static schemas library) + +## Usage +After importing, any of the following **Maps** can be used to fetch desired schema information. + +- `ID_TO_SCHEMA_FULL_NAME` is a **Map** that returns full names from schema ids (example `dsnp.tombstone@v1`) +- `FULL_NAME_TO_ID` is a **Map** that returns schema id from full name +- `ID_TO_SCHEMA_INFO` is a **Map** that return `SchemaInfo` from schema id + +Here is an example of a schema info object + +```javascript + { + id: 7, + namespace: 'dsnp', + name: 'public-key-key-agreement', + version: 1, + deprecated: false, + modelType: 'AvroBinary', + payloadLocation: 'Itemized', + appendOnly: true, + signatureRequired: true, + }, +``` + +## Upgrades and Matching Versions + +Assuming you are using no deprecated methods, any release version of `@frequency-chain/schemas` should work against a release version of a Frequency node. +If you are working against a development node it is suggested that you match the package version against the commit hash using `v0.0.0-[First 6 of the commit hash]`. + +Changelog is maintained in the [releases for Frequency](https://github.com/frequency-chain/frequency/releases). + + + + +## Contributing + +See [CONTRIBUTING.md](CONTRIBUTING.md) for more information. + + + +## License + +Distributed under the Apache 2.0 License. See `LICENSE` for more information. + + + + +[contributors-shield]: https://img.shields.io/github/contributors/frequency-chain/frequency.svg?style=for-the-badge +[contributors-url]: https://github.com/frequency-chain/frequency/graphs/contributors +[forks-shield]: https://img.shields.io/github/forks/frequency-chain/frequency.svg?style=for-the-badge +[forks-url]: https://github.com/frequency-chain/frequency/network/members +[stars-shield]: https://img.shields.io/github/stars/frequency-chain/frequency.svg?style=for-the-badge +[stars-url]: https://github.com/frequency-chain/frequency/stargazers +[issues-shield]: https://img.shields.io/github/issues/frequency-chain/frequency.svg?style=for-the-badge +[issues-url]: https://github.com/frequency-chain/frequency/issues +[license-shield]: https://img.shields.io/github/license/frequency-chain/frequency.svg?style=for-the-badge +[license-url]: https://github.com/frequency-chain/frequency/blob/master/LICENSE +[npm-shield]: https://img.shields.io/npm/v/@frequency-chain/schemas?label=npm%20%40latest&style=for-the-badge +[npm-url]: https://www.npmjs.com/package/@frequency-chain/schemas +[npm-next-shield]: https://img.shields.io/npm/v/@frequency-chain/schemas/next?label=npm%20%40next&style=for-the-badge +[npm-next-url]: https://www.npmjs.com/package/@frequency-chain/schemas diff --git a/js/schemas/data.ts b/js/schemas/data.ts new file mode 100644 index 0000000000..5f472db662 --- /dev/null +++ b/js/schemas/data.ts @@ -0,0 +1,224 @@ +import { SchemaInfo } from './schemas'; + +export const SCHEMA_INFOS: SchemaInfo[] = [ + { + id: 11, + namespace: 'dsnp', + name: 'user-attribute-set', + version: 1, + deprecated: true, + modelType: 'Parquet', + payloadLocation: 'IPFS', + appendOnly: false, + signatureRequired: false, + }, + { + id: 20, + namespace: 'dsnp', + name: 'user-attribute-set', + version: 2, + deprecated: false, + modelType: 'Parquet', + payloadLocation: 'IPFS', + appendOnly: false, + signatureRequired: false, + }, + { + id: 15, + namespace: 'dsnp', + name: 'profile-resources', + version: 1, + deprecated: false, + modelType: 'AvroBinary', + payloadLocation: 'Itemized', + appendOnly: false, + signatureRequired: false, + }, + { + id: 7, + namespace: 'dsnp', + name: 'public-key-key-agreement', + version: 1, + deprecated: false, + modelType: 'AvroBinary', + payloadLocation: 'Itemized', + appendOnly: true, + signatureRequired: true, + }, + { + id: 4, + namespace: 'dsnp', + name: 'reaction', + version: 1, + deprecated: false, + modelType: 'Parquet', + payloadLocation: 'IPFS', + appendOnly: false, + signatureRequired: false, + }, + { + id: 5, + namespace: 'dsnp', + name: 'update', + version: 1, + deprecated: true, + modelType: 'Parquet', + payloadLocation: 'IPFS', + appendOnly: false, + signatureRequired: false, + }, + { + id: 19, + namespace: 'dsnp', + name: 'update', + version: 2, + deprecated: false, + modelType: 'Parquet', + payloadLocation: 'IPFS', + appendOnly: false, + signatureRequired: false, + }, + { + id: 8, + namespace: 'dsnp', + name: 'public-follows', + version: 1, + deprecated: false, + modelType: 'AvroBinary', + payloadLocation: 'Paginated', + appendOnly: false, + signatureRequired: false, + }, + { + id: 10, + namespace: 'dsnp', + name: 'private-connections', + version: 1, + deprecated: false, + modelType: 'AvroBinary', + payloadLocation: 'Paginated', + appendOnly: false, + signatureRequired: false, + }, + { + id: 13, + namespace: 'dsnp', + name: 'ext-content-attribute-set', + version: 1, + deprecated: false, + modelType: 'Parquet', + payloadLocation: 'IPFS', + appendOnly: false, + signatureRequired: false, + }, + { + id: 6, + namespace: 'dsnp', + name: 'profile', + version: 1, + deprecated: false, + modelType: 'Parquet', + payloadLocation: 'IPFS', + appendOnly: false, + signatureRequired: false, + }, + { + id: 3, + namespace: 'dsnp', + name: 'reply', + version: 1, + deprecated: true, + modelType: 'Parquet', + payloadLocation: 'IPFS', + appendOnly: false, + signatureRequired: false, + }, + { + id: 18, + namespace: 'dsnp', + name: 'reply', + version: 2, + deprecated: false, + modelType: 'Parquet', + payloadLocation: 'IPFS', + appendOnly: false, + signatureRequired: false, + }, + { + id: 1, + namespace: 'dsnp', + name: 'tombstone', + version: 1, + deprecated: true, + modelType: 'Parquet', + payloadLocation: 'IPFS', + appendOnly: false, + signatureRequired: false, + }, + { + id: 16, + namespace: 'dsnp', + name: 'tombstone', + version: 2, + deprecated: false, + modelType: 'Parquet', + payloadLocation: 'IPFS', + appendOnly: false, + signatureRequired: false, + }, + { + id: 9, + namespace: 'dsnp', + name: 'private-follows', + version: 1, + deprecated: false, + modelType: 'AvroBinary', + payloadLocation: 'Paginated', + appendOnly: false, + signatureRequired: false, + }, + { + id: 14, + namespace: 'dsnp', + name: 'public-key-assertion-method', + version: 1, + deprecated: false, + modelType: 'AvroBinary', + payloadLocation: 'Itemized', + appendOnly: false, + signatureRequired: true, + }, + { + id: 2, + namespace: 'dsnp', + name: 'broadcast', + version: 1, + deprecated: true, + modelType: 'Parquet', + payloadLocation: 'IPFS', + appendOnly: false, + signatureRequired: false, + }, + { + id: 17, + namespace: 'dsnp', + name: 'broadcast', + version: 2, + deprecated: false, + modelType: 'Parquet', + payloadLocation: 'IPFS', + appendOnly: false, + signatureRequired: false, + }, + { + id: 12, + namespace: 'dsnp', + name: 'dsnp-content-attribute-set', + version: 1, + deprecated: false, + modelType: 'Parquet', + payloadLocation: 'IPFS', + appendOnly: false, + signatureRequired: false, + }, +]; diff --git a/js/schemas/eslint.config.mjs b/js/schemas/eslint.config.mjs new file mode 100644 index 0000000000..94247b5a4b --- /dev/null +++ b/js/schemas/eslint.config.mjs @@ -0,0 +1,54 @@ +// @ts-check + +import eslint from '@eslint/js'; +import tseslint from 'typescript-eslint'; +import mochaPlugin from 'eslint-plugin-mocha'; +import globals from 'globals'; + +export default tseslint.config( + eslint.configs.recommended, + mochaPlugin.configs.recommended, + ...tseslint.configs.strict, + ...tseslint.configs.stylistic, + { + ignores: ['dist/', 'scripts/'], + }, + { + linterOptions: { + // Needed as the generated code uses this + reportUnusedDisableDirectives: false, + }, + }, + { + languageOptions: { + parserOptions: { + projectService: { + allowDefaultProject: ['eslint.config.mjs', 'test/*.ts'], + defaultProject: './tsconfig.eslint.json', + }, + }, + }, + }, + { + rules: { + '@typescript-eslint/no-empty-interface': 'off', + '@typescript-eslint/no-unused-vars': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-unused-expressions': 'off', + '@typescript-eslint/no-empty-function': 'off', + semi: ['error', 'always'], + 'mocha/no-setup-in-describe': 'off', + 'no-use-before-define': 'off', + 'no-unused-vars': 'off', + 'no-var': 'error', + 'id-length': [ + 'error', + { + exceptionPatterns: ['[i-k]', 'e', 'c', 'x', 'y', 'r', 's', 'v'], + properties: 'never', + }, + ], + 'allow-namespace': 'off', + }, + } +); diff --git a/js/schemas/index.ts b/js/schemas/index.ts new file mode 100644 index 0000000000..42369b9b57 --- /dev/null +++ b/js/schemas/index.ts @@ -0,0 +1,6 @@ +import * as data from './data'; +import * as schemas from './schemas'; + +export * from './data'; +export * from './schemas'; +export default { ...data, ...schemas }; diff --git a/js/schemas/package-lock.json b/js/schemas/package-lock.json new file mode 100644 index 0000000000..3f3356c8bc --- /dev/null +++ b/js/schemas/package-lock.json @@ -0,0 +1,3369 @@ +{ + "name": "@frequency-chain/schemas", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@frequency-chain/schemas", + "version": "0.0.0", + "license": "Apache-2.0", + "devDependencies": { + "@eslint/js": "^9.27.0", + "@polkadot/api": "^16.1.1", + "@polkadot/rpc-provider": "^16.1.1", + "@types/mocha": "^10.0.10", + "eslint": "^9.27.0", + "eslint-plugin-mocha": "^11.1.0", + "mocha": "11.5.0", + "prettier": "^3.5.3", + "tsx": "^4.19.4", + "typescript": "^5.8.3", + "typescript-eslint": "^8.33.0" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", + "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", + "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", + "dev": true, + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz", + "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", + "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.27.0.tgz", + "integrity": "sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz", + "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==", + "dev": true, + "dependencies": { + "@eslint/core": "^0.14.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@noble/curves": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", + "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", + "dev": true, + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "dev": true, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@polkadot-api/json-rpc-provider": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider/-/json-rpc-provider-0.0.1.tgz", + "integrity": "sha512-/SMC/l7foRjpykLTUTacIH05H3mr9ip8b5xxfwXlVezXrNVLp3Cv0GX6uItkKd+ZjzVPf3PFrDF2B2/HLSNESA==", + "dev": true, + "optional": true + }, + "node_modules/@polkadot-api/json-rpc-provider-proxy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider-proxy/-/json-rpc-provider-proxy-0.1.0.tgz", + "integrity": "sha512-8GSFE5+EF73MCuLQm8tjrbCqlgclcHBSRaswvXziJ0ZW7iw3UEMsKkkKvELayWyBuOPa2T5i1nj6gFOeIsqvrg==", + "dev": true, + "optional": true + }, + "node_modules/@polkadot-api/metadata-builders": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@polkadot-api/metadata-builders/-/metadata-builders-0.3.2.tgz", + "integrity": "sha512-TKpfoT6vTb+513KDzMBTfCb/ORdgRnsS3TDFpOhAhZ08ikvK+hjHMt5plPiAX/OWkm1Wc9I3+K6W0hX5Ab7MVg==", + "dev": true, + "optional": true, + "dependencies": { + "@polkadot-api/substrate-bindings": "0.6.0", + "@polkadot-api/utils": "0.1.0" + } + }, + "node_modules/@polkadot-api/observable-client": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@polkadot-api/observable-client/-/observable-client-0.3.2.tgz", + "integrity": "sha512-HGgqWgEutVyOBXoGOPp4+IAq6CNdK/3MfQJmhCJb8YaJiaK4W6aRGrdQuQSTPHfERHCARt9BrOmEvTXAT257Ug==", + "dev": true, + "optional": true, + "dependencies": { + "@polkadot-api/metadata-builders": "0.3.2", + "@polkadot-api/substrate-bindings": "0.6.0", + "@polkadot-api/utils": "0.1.0" + }, + "peerDependencies": { + "@polkadot-api/substrate-client": "0.1.4", + "rxjs": ">=7.8.0" + } + }, + "node_modules/@polkadot-api/substrate-bindings": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-bindings/-/substrate-bindings-0.6.0.tgz", + "integrity": "sha512-lGuhE74NA1/PqdN7fKFdE5C1gNYX357j1tWzdlPXI0kQ7h3kN0zfxNOpPUN7dIrPcOFZ6C0tRRVrBylXkI6xPw==", + "dev": true, + "optional": true, + "dependencies": { + "@noble/hashes": "^1.3.1", + "@polkadot-api/utils": "0.1.0", + "@scure/base": "^1.1.1", + "scale-ts": "^1.6.0" + } + }, + "node_modules/@polkadot-api/substrate-client": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-client/-/substrate-client-0.1.4.tgz", + "integrity": "sha512-MljrPobN0ZWTpn++da9vOvt+Ex+NlqTlr/XT7zi9sqPtDJiQcYl+d29hFAgpaeTqbeQKZwz3WDE9xcEfLE8c5A==", + "dev": true, + "optional": true, + "dependencies": { + "@polkadot-api/json-rpc-provider": "0.0.1", + "@polkadot-api/utils": "0.1.0" + } + }, + "node_modules/@polkadot-api/utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/utils/-/utils-0.1.0.tgz", + "integrity": "sha512-MXzWZeuGxKizPx2Xf/47wx9sr/uxKw39bVJUptTJdsaQn/TGq+z310mHzf1RCGvC1diHM8f593KrnDgc9oNbJA==", + "dev": true, + "optional": true + }, + "node_modules/@polkadot/api": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-16.1.1.tgz", + "integrity": "sha512-atlnmcDjDZyoE9w460Rrve0LnRv9B0W1fuy1ay9vfBQ03ez3nwnoP4sP9ldYxcmU9QEs5/HTn6nvVSZXowCYKw==", + "dev": true, + "dependencies": { + "@polkadot/api-augment": "16.1.1", + "@polkadot/api-base": "16.1.1", + "@polkadot/api-derive": "16.1.1", + "@polkadot/keyring": "^13.5.1", + "@polkadot/rpc-augment": "16.1.1", + "@polkadot/rpc-core": "16.1.1", + "@polkadot/rpc-provider": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-augment": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/types-create": "16.1.1", + "@polkadot/types-known": "16.1.1", + "@polkadot/util": "^13.5.1", + "@polkadot/util-crypto": "^13.5.1", + "eventemitter3": "^5.0.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/api-augment": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-16.1.1.tgz", + "integrity": "sha512-VTj03C1iJEZ//IBKa4sRxfz3WObygXtyOqYCRMJEtH74roIZvJpIjhmZwJqGD8NijPO3mgZOTzaLzjoeLF1jMw==", + "dev": true, + "dependencies": { + "@polkadot/api-base": "16.1.1", + "@polkadot/rpc-augment": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-augment": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/api-base": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-16.1.1.tgz", + "integrity": "sha512-PUpc0Ir7ru51RuVhZMmbleicKMI43s5T1FHhOHmtzbMUTnwMbXtWHKzIfkHxqXJrg10EwO8mzcymJeHbA1TR+g==", + "dev": true, + "dependencies": { + "@polkadot/rpc-core": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/util": "^13.5.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/api-derive": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-16.1.1.tgz", + "integrity": "sha512-sC0j67RzDRwe3sHw0trDFz7tfFu68+3pQT89ash9TUVa8AD0i4USIirg4dNVWt7CrK9eW3Q4edqs1p6RXurz7g==", + "dev": true, + "dependencies": { + "@polkadot/api": "16.1.1", + "@polkadot/api-augment": "16.1.1", + "@polkadot/api-base": "16.1.1", + "@polkadot/rpc-core": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "@polkadot/util-crypto": "^13.5.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/keyring": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-13.5.1.tgz", + "integrity": "sha512-dEl679aoMv9gOzWJA13Jb2HUGqRi6/zKjEtg+qbiEryCSjUqfNKyO8liuwMFy0VP3qxJb1FkxNe6MnG1NwbU5Q==", + "dev": true, + "dependencies": { + "@polkadot/util": "13.5.1", + "@polkadot/util-crypto": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "13.5.1", + "@polkadot/util-crypto": "13.5.1" + } + }, + "node_modules/@polkadot/networks": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-13.5.1.tgz", + "integrity": "sha512-w5HS209pHZhqJ7AVqJqFApO4OcwlxjfQ7mp2dE/vL5qA5RnsEx/3fBYJ6h3z/k5Ggac0+Zl1vMZAF1gW8S/F9A==", + "dev": true, + "dependencies": { + "@polkadot/util": "13.5.1", + "@substrate/ss58-registry": "^1.51.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/rpc-augment": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-16.1.1.tgz", + "integrity": "sha512-o0CgmzQ06qV0nKlKPccumOmPsZ3f2VeQp2u8tndLOLG5A7C9k+XML92ldJHN2Dj+XKHLhjHG4syPEBET7ugZCg==", + "dev": true, + "dependencies": { + "@polkadot/rpc-core": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/rpc-core": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-16.1.1.tgz", + "integrity": "sha512-BUfY6868kJhPXCyQuRUg644pWGhynuWvPvglJXsOf+A3pRhKm+cNWEjs8puQmUc38adl6QocBeUJHfTnfrtKPg==", + "dev": true, + "dependencies": { + "@polkadot/rpc-augment": "16.1.1", + "@polkadot/rpc-provider": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/util": "^13.5.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/rpc-provider": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-16.1.1.tgz", + "integrity": "sha512-LH22P6OSw304pwvdpjuxc6ARtvrUUvkBF02n4FsJBo555y9d+2dcA5CA4FLI8WNvOXf3hOLwxz/UPxA7VATksw==", + "dev": true, + "dependencies": { + "@polkadot/keyring": "^13.5.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-support": "16.1.1", + "@polkadot/util": "^13.5.1", + "@polkadot/util-crypto": "^13.5.1", + "@polkadot/x-fetch": "^13.5.1", + "@polkadot/x-global": "^13.5.1", + "@polkadot/x-ws": "^13.5.1", + "eventemitter3": "^5.0.1", + "mock-socket": "^9.3.1", + "nock": "^13.5.5", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@substrate/connect": "0.8.11" + } + }, + "node_modules/@polkadot/types": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-16.1.1.tgz", + "integrity": "sha512-edEKvnCrWoPjW2sRUdER4gm8zm+gilVhZXqAtYH0gHJkBzbhCXZ5M27E62ztR1at9XyHDsTUeuq51ELHOUbbFQ==", + "dev": true, + "dependencies": { + "@polkadot/keyring": "^13.5.1", + "@polkadot/types-augment": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/types-create": "16.1.1", + "@polkadot/util": "^13.5.1", + "@polkadot/util-crypto": "^13.5.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-augment": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-16.1.1.tgz", + "integrity": "sha512-Ozh7nEyAnyHK9x1CnRYlG/rnarvuauAIbvUljtA7f/3RI570kRTpeOR83QkDWdaLywno96A4zdFXBfI0nmq1Yw==", + "dev": true, + "dependencies": { + "@polkadot/types": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-codec": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-16.1.1.tgz", + "integrity": "sha512-REcSkOfxFGPJWEbuCIr5EA0argnZwYVYkE14f97XVM9rV36/FEyu1al47fSjp8iHA3e8Fsd+V+WTZRwlUa51qA==", + "dev": true, + "dependencies": { + "@polkadot/util": "^13.5.1", + "@polkadot/x-bigint": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-create": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-16.1.1.tgz", + "integrity": "sha512-dpd5HKRfNQlDYMtMdofrhr99O7q8EWkqZyTadFuTYyd7LECb9FUD8nO6RbcmpXYA9F3r5g/EwvsmZFZaQW9LqA==", + "dev": true, + "dependencies": { + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-known": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-16.1.1.tgz", + "integrity": "sha512-Qp6C+wppqvooDFU2T0Ynmgo72bQOUkY6dLVoGmZWq/OO6hXuLCg8SAncJP/CzcueEA2/Anzk3DQbfZVlBEr6Cg==", + "dev": true, + "dependencies": { + "@polkadot/networks": "^13.5.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/types-create": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-support": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-16.1.1.tgz", + "integrity": "sha512-pVEBVaXuIkhuMX6J4Cn+cGcLOPsz2qu4EuZXwwA/ioMIICclh+7q6+fOfInogIgmbcYHZFDDsyXG3wRw7ThZkA==", + "dev": true, + "dependencies": { + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/util": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-13.5.1.tgz", + "integrity": "sha512-Anu4fsmMconvU+WXGFESNQp4qFjbvZnS4zD4I54W5gW70klrmrdfP2jGYhejVkm0Pf43RREN63G7Rew8+sXUmw==", + "dev": true, + "dependencies": { + "@polkadot/x-bigint": "13.5.1", + "@polkadot/x-global": "13.5.1", + "@polkadot/x-textdecoder": "13.5.1", + "@polkadot/x-textencoder": "13.5.1", + "@types/bn.js": "^5.1.6", + "bn.js": "^5.2.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/util-crypto": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-13.5.1.tgz", + "integrity": "sha512-HIuTRpkulIzmgCU+GIXbEEkVbikvrK+5v8XZ7Ll45m1dLsxnrJeEbNsCLUwI/+D9Jd0iF3+T12GybuetlXeu+A==", + "dev": true, + "dependencies": { + "@noble/curves": "^1.3.0", + "@noble/hashes": "^1.3.3", + "@polkadot/networks": "13.5.1", + "@polkadot/util": "13.5.1", + "@polkadot/wasm-crypto": "^7.4.1", + "@polkadot/wasm-util": "^7.4.1", + "@polkadot/x-bigint": "13.5.1", + "@polkadot/x-randomvalues": "13.5.1", + "@scure/base": "^1.1.7", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "13.5.1" + } + }, + "node_modules/@polkadot/wasm-bridge": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-7.4.1.tgz", + "integrity": "sha512-tdkJaV453tezBxhF39r4oeG0A39sPKGDJmN81LYLf+Fihb7astzwju+u75BRmDrHZjZIv00un3razJEWCxze6g==", + "dev": true, + "dependencies": { + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/wasm-crypto": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-7.4.1.tgz", + "integrity": "sha512-kHN/kF7hYxm1y0WeFLWeWir6oTzvcFmR4N8fJJokR+ajYbdmrafPN+6iLgQVbhZnDdxyv9jWDuRRsDnBx8tPMQ==", + "dev": true, + "dependencies": { + "@polkadot/wasm-bridge": "7.4.1", + "@polkadot/wasm-crypto-asmjs": "7.4.1", + "@polkadot/wasm-crypto-init": "7.4.1", + "@polkadot/wasm-crypto-wasm": "7.4.1", + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-asmjs": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.4.1.tgz", + "integrity": "sha512-pwU8QXhUW7IberyHJIQr37IhbB6DPkCG5FhozCiNTq4vFBsFPjm9q8aZh7oX1QHQaiAZa2m2/VjIVE+FHGbvHQ==", + "dev": true, + "dependencies": { + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-init": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.4.1.tgz", + "integrity": "sha512-AVka33+f7MvXEEIGq5U0dhaA2SaXMXnxVCQyhJTaCnJ5bRDj0Xlm3ijwDEQUiaDql7EikbkkRtmlvs95eSUWYQ==", + "dev": true, + "dependencies": { + "@polkadot/wasm-bridge": "7.4.1", + "@polkadot/wasm-crypto-asmjs": "7.4.1", + "@polkadot/wasm-crypto-wasm": "7.4.1", + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-wasm": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.4.1.tgz", + "integrity": "sha512-PE1OAoupFR0ZOV2O8tr7D1FEUAwaggzxtfs3Aa5gr+yxlSOaWUKeqsOYe1KdrcjmZVV3iINEAXxgrbzCmiuONg==", + "dev": true, + "dependencies": { + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/wasm-util": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-7.4.1.tgz", + "integrity": "sha512-RAcxNFf3zzpkr+LX/ItAsvj+QyM56TomJ0xjUMo4wKkHjwsxkz4dWJtx5knIgQz/OthqSDMR59VNEycQeNuXzA==", + "dev": true, + "dependencies": { + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/x-bigint": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-13.5.1.tgz", + "integrity": "sha512-5GiYznWm/GdCe9nQwL/EEVLXFqK2JZqcNnWC/r196lRujqKd24r90WPHYw18d9fsii/8J4DOKc8cCRfxjMBdCw==", + "dev": true, + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-fetch": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-13.5.1.tgz", + "integrity": "sha512-2qTvxMdxlAnyY2xOulm5ZazWFRegUB6xOX7yTBxSvuAXiYGecuiZa5NikCYl+nB8iZW4ZGraLFyt9otzJHL5cw==", + "dev": true, + "dependencies": { + "@polkadot/x-global": "13.5.1", + "node-fetch": "^3.3.2", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-global": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-13.5.1.tgz", + "integrity": "sha512-8A9dvyGmXtQf8jCqGSxa4R8JLh43K8T1//ht7UU6Bsv7we2svdQ+O1FXblwAnAHCcboYeyYqzrTwnRnQlyrdWQ==", + "dev": true, + "dependencies": { + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-randomvalues": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-13.5.1.tgz", + "integrity": "sha512-FT/A8EWIBNACWfxo+fDzRrkmK8TQxgaZjtr5E+/i8MYqscHFqiX9PmbMuoGC1T4w+piihHU1JD8rLTip2K8NIw==", + "dev": true, + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "13.5.1", + "@polkadot/wasm-util": "*" + } + }, + "node_modules/@polkadot/x-textdecoder": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-13.5.1.tgz", + "integrity": "sha512-iInpeywdQDusB3fz7F+La74UQoTXC8F4CsmZYEoQeZekb6CoAgtLkQZhw7ckV5+MmscLeOvZCI1wYBRqCd+qqw==", + "dev": true, + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-textencoder": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-13.5.1.tgz", + "integrity": "sha512-2QS22Eqrsjo7BCMHnL0EGheflDXSW0xpI+Zi0ULvci4uzHK4ZUgfFtEzEFg1kbKZ8ShvRpkQbGzp8nJqwijjgQ==", + "dev": true, + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-ws": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-13.5.1.tgz", + "integrity": "sha512-z9ks9qd3G78nnXcMRQN9GXtJ5BRAwRaRCVngY/ot0o4dmOdPyiciyNPOC8lNWvXF8Z1zyUqkKWwzQ33DzPFCWQ==", + "dev": true, + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0", + "ws": "^8.18.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@scure/base": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.5.tgz", + "integrity": "sha512-9rE6EOVeIQzt5TSu4v+K523F8u6DhBsoZWPGKlnCshhlDhy0kJzUX4V+tr2dWmzF1GdekvThABoEQBGBQI7xZw==", + "dev": true, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@substrate/connect": { + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.8.11.tgz", + "integrity": "sha512-ofLs1PAO9AtDdPbdyTYj217Pe+lBfTLltdHDs3ds8no0BseoLeAGxpz1mHfi7zB4IxI3YyAiLjH6U8cw4pj4Nw==", + "deprecated": "versions below 1.x are no longer maintained", + "dev": true, + "optional": true, + "dependencies": { + "@substrate/connect-extension-protocol": "^2.0.0", + "@substrate/connect-known-chains": "^1.1.5", + "@substrate/light-client-extension-helpers": "^1.0.0", + "smoldot": "2.0.26" + } + }, + "node_modules/@substrate/connect-extension-protocol": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@substrate/connect-extension-protocol/-/connect-extension-protocol-2.2.2.tgz", + "integrity": "sha512-t66jwrXA0s5Goq82ZtjagLNd7DPGCNjHeehRlE/gcJmJ+G56C0W+2plqOMRicJ8XGR1/YFnUSEqUFiSNbjGrAA==", + "dev": true, + "optional": true + }, + "node_modules/@substrate/connect-known-chains": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/@substrate/connect-known-chains/-/connect-known-chains-1.10.2.tgz", + "integrity": "sha512-oDtEbKjVOog6lxOLDzmm+2BoLC/KUzkHkeUPqJ6a0VQ4CB/XuoS0u3RGhA/cZ+kfMJAyHCG2qupbzgs1bcd/Ow==", + "dev": true, + "optional": true + }, + "node_modules/@substrate/light-client-extension-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@substrate/light-client-extension-helpers/-/light-client-extension-helpers-1.0.0.tgz", + "integrity": "sha512-TdKlni1mBBZptOaeVrKnusMg/UBpWUORNDv5fdCaJklP4RJiFOzBCrzC+CyVI5kQzsXBisZ+2pXm+rIjS38kHg==", + "dev": true, + "optional": true, + "dependencies": { + "@polkadot-api/json-rpc-provider": "^0.0.1", + "@polkadot-api/json-rpc-provider-proxy": "^0.1.0", + "@polkadot-api/observable-client": "^0.3.0", + "@polkadot-api/substrate-client": "^0.1.2", + "@substrate/connect-extension-protocol": "^2.0.0", + "@substrate/connect-known-chains": "^1.1.5", + "rxjs": "^7.8.1" + }, + "peerDependencies": { + "smoldot": "2.x" + } + }, + "node_modules/@substrate/ss58-registry": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.51.0.tgz", + "integrity": "sha512-TWDurLiPxndFgKjVavCniytBIw+t4ViOi7TYp9h/D0NMmkEc9klFTo+827eyEJ0lELpqO207Ey7uGxUa+BS1jQ==", + "dev": true + }, + "node_modules/@types/bn.js": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz", + "integrity": "sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/mocha": { + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", + "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", + "dev": true + }, + "node_modules/@types/node": { + "version": "22.15.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.24.tgz", + "integrity": "sha512-w9CZGm9RDjzTh/D+hFwlBJ3ziUaVw7oufKA3vOFSOZlzmW9AkZnfjPb+DLnrV6qtgL/LNmP0/2zBNCFHL3F0ng==", + "dev": true, + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.33.0.tgz", + "integrity": "sha512-CACyQuqSHt7ma3Ns601xykeBK/rDeZa3w6IS6UtMQbixO5DWy+8TilKkviGDH6jtWCo8FGRKEK5cLLkPvEammQ==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.33.0", + "@typescript-eslint/type-utils": "8.33.0", + "@typescript-eslint/utils": "8.33.0", + "@typescript-eslint/visitor-keys": "8.33.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.33.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz", + "integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.33.0.tgz", + "integrity": "sha512-JaehZvf6m0yqYp34+RVnihBAChkqeH+tqqhS0GuX1qgPpwLvmTPheKEs6OeCK6hVJgXZHJ2vbjnC9j119auStQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.33.0", + "@typescript-eslint/types": "8.33.0", + "@typescript-eslint/typescript-estree": "8.33.0", + "@typescript-eslint/visitor-keys": "8.33.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.0.tgz", + "integrity": "sha512-d1hz0u9l6N+u/gcrk6s6gYdl7/+pp8yHheRTqP6X5hVDKALEaTn8WfGiit7G511yueBEL3OpOEpD+3/MBdoN+A==", + "dev": true, + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.33.0", + "@typescript-eslint/types": "^8.33.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.33.0.tgz", + "integrity": "sha512-LMi/oqrzpqxyO72ltP+dBSP6V0xiUb4saY7WLtxSfiNEBI8m321LLVFU9/QDJxjDQG9/tjSqKz/E3380TEqSTw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.33.0", + "@typescript-eslint/visitor-keys": "8.33.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.0.tgz", + "integrity": "sha512-sTkETlbqhEoiFmGr1gsdq5HyVbSOF0145SYDJ/EQmXHtKViCaGvnyLqWFFHtEXoS0J1yU8Wyou2UGmgW88fEug==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.33.0.tgz", + "integrity": "sha512-lScnHNCBqL1QayuSrWeqAL5GmqNdVUQAAMTaCwdYEdWfIrSrOGzyLGRCHXcCixa5NK6i5l0AfSO2oBSjCjf4XQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "8.33.0", + "@typescript-eslint/utils": "8.33.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.33.0.tgz", + "integrity": "sha512-DKuXOKpM5IDT1FA2g9x9x1Ug81YuKrzf4mYX8FAVSNu5Wo/LELHWQyM1pQaDkI42bX15PWl0vNPt1uGiIFUOpg==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.0.tgz", + "integrity": "sha512-vegY4FQoB6jL97Tu/lWRsAiUUp8qJTqzAmENH2k59SJhw0Th1oszb9Idq/FyyONLuNqT1OADJPXfyUNOR8SzAQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/project-service": "8.33.0", + "@typescript-eslint/tsconfig-utils": "8.33.0", + "@typescript-eslint/types": "8.33.0", + "@typescript-eslint/visitor-keys": "8.33.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.33.0.tgz", + "integrity": "sha512-lPFuQaLA9aSNa7D5u2EpRiqdAUhzShwGg/nhpBlc4GR6kcTABttCuyjFs8BcEZ8VWrjCBof/bePhP3Q3fS+Yrw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.33.0", + "@typescript-eslint/types": "8.33.0", + "@typescript-eslint/typescript-estree": "8.33.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.0.tgz", + "integrity": "sha512-7RW7CMYoskiz5OOGAWjJFxgb7c5UNjTG292gYhWeOAcFmYCtVCSqjqSBj5zMhxbXo2JOW95YYrUWJfU0zrpaGQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.33.0", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/bn.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", + "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/diff": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", + "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.4", + "@esbuild/android-arm": "0.25.4", + "@esbuild/android-arm64": "0.25.4", + "@esbuild/android-x64": "0.25.4", + "@esbuild/darwin-arm64": "0.25.4", + "@esbuild/darwin-x64": "0.25.4", + "@esbuild/freebsd-arm64": "0.25.4", + "@esbuild/freebsd-x64": "0.25.4", + "@esbuild/linux-arm": "0.25.4", + "@esbuild/linux-arm64": "0.25.4", + "@esbuild/linux-ia32": "0.25.4", + "@esbuild/linux-loong64": "0.25.4", + "@esbuild/linux-mips64el": "0.25.4", + "@esbuild/linux-ppc64": "0.25.4", + "@esbuild/linux-riscv64": "0.25.4", + "@esbuild/linux-s390x": "0.25.4", + "@esbuild/linux-x64": "0.25.4", + "@esbuild/netbsd-arm64": "0.25.4", + "@esbuild/netbsd-x64": "0.25.4", + "@esbuild/openbsd-arm64": "0.25.4", + "@esbuild/openbsd-x64": "0.25.4", + "@esbuild/sunos-x64": "0.25.4", + "@esbuild/win32-arm64": "0.25.4", + "@esbuild/win32-ia32": "0.25.4", + "@esbuild/win32-x64": "0.25.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.27.0.tgz", + "integrity": "sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.20.0", + "@eslint/config-helpers": "^0.2.1", + "@eslint/core": "^0.14.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.27.0", + "@eslint/plugin-kit": "^0.3.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-mocha": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-11.1.0.tgz", + "integrity": "sha512-rKntVWRsQFPbf8OkSgVNRVRrcVAPaGTyEgWCEyXaPDJkTl0v5/lwu1vTk5sWiUJU8l2sxwvGUZzSNrEKdVMeQw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.1", + "globals": "^15.14.0" + }, + "peerDependencies": { + "eslint": ">=9.0.0" + } + }, + "node_modules/eslint-plugin-mocha/node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-scope": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-tsconfig": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", + "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mocha": { + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.5.0.tgz", + "integrity": "sha512-VKDjhy6LMTKm0WgNEdlY77YVsD49LZnPSXJAaPNL9NRYQADxvORsyG1DIQY6v53BKTnlNbEE2MbVCDbnxr4K3w==", + "dev": true, + "dependencies": { + "browser-stdout": "^1.3.1", + "chokidar": "^4.0.1", + "debug": "^4.3.5", + "diff": "^7.0.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^10.4.5", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^9.0.5", + "ms": "^2.1.3", + "picocolors": "^1.1.1", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/mock-socket": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.3.1.tgz", + "integrity": "sha512-qxBgB7Qa2sEQgHFjj0dSigq7fX4k6Saisd5Nelwp2q8mlbAFh5dHV9JTTlF8viYJLSSWgMCZFUom8PJcMNBoJw==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/nock": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.6.tgz", + "integrity": "sha512-o2zOYiCpzRqSzPj0Zt/dQ/DqZeYoaQ7TUonc/xUPjCGl9WeHpNbxgVvOquXYAaJzI0M9BXV3HTzG0p8IUAbBTQ==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "propagate": "^2.0.0" + }, + "engines": { + "node": ">= 10.13" + } + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dev": true, + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/propagate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/scale-ts": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/scale-ts/-/scale-ts-1.6.1.tgz", + "integrity": "sha512-PBMc2AWc6wSEqJYBDPcyCLUj9/tMKnLX70jLOSndMtcUoLQucP/DM0vnQo1wJAYjTrQiq8iG9rD0q6wFzgjH7g==", + "dev": true, + "optional": true + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/smoldot": { + "version": "2.0.26", + "resolved": "https://registry.npmjs.org/smoldot/-/smoldot-2.0.26.tgz", + "integrity": "sha512-F+qYmH4z2s2FK+CxGj8moYcd1ekSIKH8ywkdqlOz88Dat35iB1DIYL11aILN46YSGMzQW/lbJNS307zBSDN5Ig==", + "dev": true, + "optional": true, + "dependencies": { + "ws": "^8.8.1" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true + }, + "node_modules/tsx": { + "version": "4.19.4", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.4.tgz", + "integrity": "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==", + "dev": true, + "dependencies": { + "esbuild": "~0.25.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.33.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.33.0.tgz", + "integrity": "sha512-5YmNhF24ylCsvdNW2oJwMzTbaeO4bg90KeGtMjUw0AGtHksgEPLRTUil+coHwCfiu4QjVJFnjp94DmU6zV7DhQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.33.0", + "@typescript-eslint/parser": "8.33.0", + "@typescript-eslint/utils": "8.33.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ws": { + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/js/schemas/package.json b/js/schemas/package.json new file mode 100644 index 0000000000..74a961c9e1 --- /dev/null +++ b/js/schemas/package.json @@ -0,0 +1,39 @@ +{ + "name": "@frequency-chain/schemas", + "version": "0.0.0", + "bugs": { + "url": "https://github.com/frequency-chain/frequency/issues" + }, + "description": "A static package which allows getting schemas locally", + "main": "index.js", + "type": "module", + "repository": { + "type": "git", + "url": "https://github.com/frequency-chain/frequency.git", + "directory": "js/schemas" + }, + "scripts": { + "package": "node scripts/package.cjs", + "prepackage": "cp CONTRIBUTING.md README.md ../../LICENSE ./dist", + "build": "tsc -p ./tsconfig.types.json && tsc -p ./tsconfig.cjs.json && tsc -p ./tsconfig.esm.json", + "postbuild": "npm run package", + "test": "mocha --import=tsx ./test/**/*.test.ts", + "format": "tsc --noEmit --pretty && prettier --write . && eslint --fix", + "lint": "tsc --noEmit --pretty && prettier --check . && eslint" + }, + "author": "frequency-chain", + "license": "Apache-2.0", + "devDependencies": { + "@polkadot/api": "^16.1.1", + "@polkadot/rpc-provider": "^16.1.1", + "@eslint/js": "^9.27.0", + "@types/mocha": "^10.0.10", + "eslint": "^9.27.0", + "eslint-plugin-mocha": "^11.1.0", + "mocha": "11.5.0", + "prettier": "^3.5.3", + "tsx": "^4.19.4", + "typescript": "^5.8.3", + "typescript-eslint": "^8.33.0" + } +} diff --git a/js/schemas/schemas.ts b/js/schemas/schemas.ts new file mode 100644 index 0000000000..6a83807cdc --- /dev/null +++ b/js/schemas/schemas.ts @@ -0,0 +1,47 @@ +import { SCHEMA_INFOS } from './data'; + +export interface SchemaInfo { + id: number; + name: string; + namespace: string; + version: number; + modelType: string; + payloadLocation: string; + appendOnly: boolean; + signatureRequired: boolean; + deprecated: boolean; +} + +const schemaFullName = (info: SchemaInfo): string => `${info.namespace}.${info.name}@v${info.version}`; +const schemaFullNameWithoutVersion = (info: SchemaInfo): string => `${info.namespace}.${info.name}`; + +/** + * Mapping that will allow us to get schema full names from their ids + */ +export const ID_TO_SCHEMA_FULL_NAME = new Map(SCHEMA_INFOS.map((x) => [x.id, schemaFullName(x)])); + +/** + * Mapping that will allow us to get schema ids from their full names + */ +export const FULL_NAME_TO_ID = new Map(SCHEMA_INFOS.map((x) => [schemaFullName(x), x.id])); + +/** + * Mapping that will allow us to get active schema ids from their names + * example input dsnp.public-key-key-agreement + */ +export const NAME_TO_ID_ACTIVE = new Map( + SCHEMA_INFOS.filter((info) => !info.deprecated).map((x) => [schemaFullNameWithoutVersion(x), x.id]) +); + +/** + * Mapping that will allow us to get schema infos from their IDs + */ +export const ID_TO_SCHEMA_INFO = new Map(SCHEMA_INFOS.map((x) => [x.id, x])); + +/** + * A method that can retrieve all versions of a given schema name without any version + * example input dsnp.public-key-key-agreement + */ +export const getAllVersionsFromSchemaName = (schemaName: string): SchemaInfo[] => { + return SCHEMA_INFOS.filter((info) => schemaFullNameWithoutVersion(info) === schemaName); +}; diff --git a/js/schemas/scripts/fetchSchemaData.mjs b/js/schemas/scripts/fetchSchemaData.mjs new file mode 100644 index 0000000000..9fcebd9ab6 --- /dev/null +++ b/js/schemas/scripts/fetchSchemaData.mjs @@ -0,0 +1,135 @@ +// Only way to silence PolkadotJS API warnings we don't want +console.warn = () => {}; +import { ApiPromise, WsProvider } from '@polkadot/api'; +import { promises as fs } from 'fs'; + +const options = { + rpc: { + schemas: { + getBySchemaId: { + description: 'Get a Schema by Id', + params: [ + { + name: 'schema_id', + type: 'SchemaId', + }, + ], + type: 'Option', + }, + getVersions: { + description: 'Get different versions and schema ids for a complete schema name or only a namespace', + params: [ + { + name: 'schema_name', + type: 'String', + }, + ], + type: 'Option>', + }, + }, + }, + types: { + SchemaId: 'u16', + SchemaModel: 'Vec', + SchemaVersion: 'u8', + SchemaResponse: { + schema_id: 'SchemaId', + model: 'SchemaModel', + model_type: 'ModelType', + payload_location: 'PayloadLocation', + settings: 'Vec', + }, + ModelType: { + _enum: ['AvroBinary', 'Parquet'], + }, + PayloadLocation: { + _enum: ['OnChain', 'IPFS', 'Itemized', 'Paginated'], + }, + SchemaSetting: { + _enum: ['AppendOnly', 'SignatureRequired'], + }, + SchemaVersionResponse: { + schema_name: 'String', + schema_version: 'SchemaVersion', + schema_id: 'SchemaId', + }, + }, +}; +const SOURCE_URL = 'wss://1.rpc.frequency.xyz'; +const GENERATED_FILE_NAME = '../data.ts'; + +async function main() { + try { + await getSchemas(SOURCE_URL); + process.exit(0); + } catch (error) { + console.error('Error:', error); + process.exit(1); + } +} + +main(); + +async function getSchemas(sourceUrl) { + const provider = new WsProvider(sourceUrl); + const api = await ApiPromise.create({ provider, ...options }); + const nameToIds = await api.rpc.schemas.getVersions('dsnp'); + + const idToSchemaInfo = new Map(); + const fullNameToVersions = new Map(); + + for (const v of JSON.parse(JSON.stringify(nameToIds))) { + const fullName = v.schema_name; + const names = fullName.split('.'); + const version = v.schema_version; + const id = v.schema_id; + + if (fullNameToVersions.has(fullName)) { + const arr = fullNameToVersions.get(fullName); + arr.push({ + version: version, + id: id, + }); + fullNameToVersions.set(fullName, arr); + } else { + fullNameToVersions.set(fullName, [ + { + version: version, + id: id, + }, + ]); + } + + const chainSchemaInfo = await api.query.schemas.schemaInfos(id); + const objSchemaInfo = JSON.parse(JSON.stringify(chainSchemaInfo)); + idToSchemaInfo.set(id, { + id: id, + namespace: names[0], + name: names[1], + version: version, + deprecated: false, + modelType: objSchemaInfo.modelType, + payloadLocation: objSchemaInfo.payloadLocation, + appendOnly: (objSchemaInfo.settings & 1) > 0, + signatureRequired: (objSchemaInfo.settings & 2) > 0, + }); + } + + for (let arr of fullNameToVersions.values()) { + arr.sort((a, b) => a.version - b.version); + for (let i = 0; i < arr.length; i++) { + const inner = arr[i]; + const info = idToSchemaInfo.get(inner.id); + info.deprecated = i < arr.length - 1; + } + } + + let generated = ''; + for (let v of idToSchemaInfo.values()) { + generated += `\n${JSON.stringify(v, null, 2).replace(/"([^"]+)":/g, '$1:')},`; + } + let output = `import { SchemaInfo } from './schemas';\n\nexport const SCHEMA_INFOS: SchemaInfo[] = [${generated}\n];\n`; + + console.log(output); + await fs.writeFile(GENERATED_FILE_NAME, output, 'utf8'); +} diff --git a/js/schemas/scripts/package.cjs b/js/schemas/scripts/package.cjs new file mode 100644 index 0000000000..fba215a527 --- /dev/null +++ b/js/schemas/scripts/package.cjs @@ -0,0 +1,59 @@ +/** + * Build the package.json for the actual publishing + */ +// eslint-disable-next-line +const fs = require('fs'); +// eslint-disable-next-line +const path = require('path'); + +// eslint-disable-next-line +const rootPackage = require('../package.json'); + +// Remove test related work +delete rootPackage['jest-junit']; +delete rootPackage['jest']; + +// Don't keep scripts +delete rootPackage['scripts']; + +// Don't keep dev dependencies +delete rootPackage['devDependencies']; + +// Setup the main and types correctly +rootPackage['main'] = './cjs/index.js'; +rootPackage['module'] = './esm/index.js'; +rootPackage['types'] = 'index.d.ts'; +(rootPackage['exports'] = { + '.': { + types: './index.d.ts', + require: './cjs/index.js', + import: './esm/index.js', + default: './esm/index.js', + }, +}), + // Write it out + fs.writeFileSync( + `${path.join(__dirname, '../dist', 'package.json')}`, + JSON.stringify(rootPackage, null, 2), + (err) => { + if (err) throw new Error(err); + } + ); + +// Write out a simple type override for the esm side of things +fs.writeFileSync( + `${path.join(__dirname, '../dist/esm', 'package.json')}`, + JSON.stringify({ type: 'module' }, null, 2), + (err) => { + if (err) throw new Error(err); + } +); + +// Write out a simple type override for the cjs side of things +fs.writeFileSync( + `${path.join(__dirname, '../dist/cjs', 'package.json')}`, + JSON.stringify({ type: 'commonjs' }, null, 2), + (err) => { + if (err) throw new Error(err); + } +); diff --git a/js/schemas/scripts/package.json b/js/schemas/scripts/package.json new file mode 100644 index 0000000000..6cdce10515 --- /dev/null +++ b/js/schemas/scripts/package.json @@ -0,0 +1,13 @@ +{ + "name": "schema-data", + "version": "1.0.0", + "description": "Gets data from mainnet and outputs them in the format used by schema package", + "scripts": { + "generate": "node fetchSchemaData.mjs" + }, + "author": "", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/api": "^13.2.1" + } +} diff --git a/js/schemas/test/schemas.test.ts b/js/schemas/test/schemas.test.ts new file mode 100644 index 0000000000..727042e2b5 --- /dev/null +++ b/js/schemas/test/schemas.test.ts @@ -0,0 +1,55 @@ +import assert from 'assert'; +import { + FULL_NAME_TO_ID, + getAllVersionsFromSchemaName, + ID_TO_SCHEMA_FULL_NAME, + ID_TO_SCHEMA_INFO, + NAME_TO_ID_ACTIVE, + SchemaInfo, +} from '../schemas'; + +describe('schemas', function () { + it('should be able to successfully get schemas from Id', function () { + const fullName = ID_TO_SCHEMA_FULL_NAME.get(7); + assert.equal(fullName, 'dsnp.public-key-key-agreement@v1'); + }); + + it('should be able to successfully get schema id from name', function () { + const id = FULL_NAME_TO_ID.get('dsnp.public-key-key-agreement@v1'); + assert.equal(id, 7); + }); + + it('should be able to successfully get schema info from ID', function () { + const info = ID_TO_SCHEMA_INFO.get(7); + const expected: SchemaInfo = { + id: 7, + namespace: 'dsnp', + name: 'public-key-key-agreement', + version: 1, + deprecated: false, + modelType: 'AvroBinary', + payloadLocation: 'Itemized', + appendOnly: true, + signatureRequired: true, + }; + assert.equal(info.id, expected.id); + assert.equal(info.namespace, expected.namespace); + assert.equal(info.name, expected.name); + assert.equal(info.version, expected.version); + assert.equal(info.deprecated, expected.deprecated); + assert.equal(info.modelType, expected.modelType); + assert.equal(info.payloadLocation, expected.payloadLocation); + assert.equal(info.appendOnly, expected.appendOnly); + assert.equal(info.signatureRequired, expected.signatureRequired); + }); + + it('should be able to successfully get all schema version from the schema name', function () { + const versions = getAllVersionsFromSchemaName('dsnp.tombstone'); + assert.deepEqual(versions, [ID_TO_SCHEMA_INFO.get(1), ID_TO_SCHEMA_INFO.get(16)]); + }); + + it('should be able to successfully get active schema version from the schema name', function () { + const id = NAME_TO_ID_ACTIVE.get('dsnp.tombstone'); + assert.equal(id, 16); + }); +}); diff --git a/js/schemas/tsconfig.cjs.json b/js/schemas/tsconfig.cjs.json new file mode 100644 index 0000000000..ebe4fe2b67 --- /dev/null +++ b/js/schemas/tsconfig.cjs.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "lib": ["ES2020"], + "module": "CommonJS", + "outDir": "dist/cjs", + "declaration": false + } +} diff --git a/js/schemas/tsconfig.eslint.json b/js/schemas/tsconfig.eslint.json new file mode 100644 index 0000000000..2d2a3b3f8b --- /dev/null +++ b/js/schemas/tsconfig.eslint.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["node_modules/**", "./scripts/**", "./dist/**"] +} diff --git a/js/schemas/tsconfig.esm.json b/js/schemas/tsconfig.esm.json new file mode 100644 index 0000000000..fc39b784b8 --- /dev/null +++ b/js/schemas/tsconfig.esm.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "lib": ["ES2020"], + "module": "ES2022", + "outDir": "dist/esm", + "declaration": false + } +} diff --git a/js/schemas/tsconfig.json b/js/schemas/tsconfig.json new file mode 100644 index 0000000000..ad486c3507 --- /dev/null +++ b/js/schemas/tsconfig.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Base", + "compilerOptions": { + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "moduleResolution": "node", + "module": "esnext", + "noImplicitAny": true, + "outDir": "dist", + "resolveJsonModule": true, + "sourceMap": false, + "strict": true, + "skipLibCheck": true, + "target": "es2022", + "typeRoots": ["node_modules/@types"] + }, + "exclude": ["node_modules/**", "./test/**", "./scripts/**", "**/*.test.ts", "./dist/**"] +} diff --git a/js/schemas/tsconfig.types.json b/js/schemas/tsconfig.types.json new file mode 100644 index 0000000000..420c04d5fd --- /dev/null +++ b/js/schemas/tsconfig.types.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "lib": ["ES2020"], + "target": "es2022", + "outDir": "dist", + "emitDeclarationOnly": true, + "declaration": true + } +} diff --git a/node/Cargo.toml b/node/Cargo.toml new file mode 100644 index 0000000000..86315e12a1 --- /dev/null +++ b/node/Cargo.toml @@ -0,0 +1,47 @@ +[package] +authors = ["Frequency"] +build = "build.rs" +description = "Substrate node for Frequency" +edition = "2021" +homepage = "https://frequency.xyz" +license = "Apache-2.0" +name = "frequency" +repository = "https://github.com/frequency-chain/frequency/" +version = "0.0.0" + +[[bin]] +name = "frequency" +path = "src/main.rs" + +[build-dependencies] +substrate-build-script-utils = { workspace = true } + +[dependencies] +# Frequency Runtime +frequency-cli = { path = "cli" } +frequency-service = { path = "service" } + +[features] +std = [] +default = [] +runtime-benchmarks = ["frequency-cli/runtime-benchmarks"] +frequency = ["frequency-service/frequency", "frequency-cli/frequency"] +frequency-no-relay = [ + "frequency-service/frequency-no-relay", + "frequency-cli/frequency-no-relay", +] +frequency-local = [ + "frequency-service/frequency-local", + "frequency-cli/frequency-local", +] +frequency-testnet = [ + "frequency-service/frequency-testnet", + "frequency-cli/frequency-testnet", +] +frequency-lint-check = [ + "frequency-service/frequency-lint-check", + "frequency-cli/frequency-lint-check", +] + +[lints] +workspace = true diff --git a/node/build.rs b/node/build.rs new file mode 100644 index 0000000000..e3bfe3116b --- /dev/null +++ b/node/build.rs @@ -0,0 +1,7 @@ +use substrate_build_script_utils::{generate_cargo_keys, rerun_if_git_head_changed}; + +fn main() { + generate_cargo_keys(); + + rerun_if_git_head_changed(); +} diff --git a/node/cli-opt/Cargo.toml b/node/cli-opt/Cargo.toml new file mode 100644 index 0000000000..153fbd3923 --- /dev/null +++ b/node/cli-opt/Cargo.toml @@ -0,0 +1,15 @@ +[package] +authors = ["Frequency"] +description = "Substrate CLI options for Frequency node" +edition = "2021" +homepage = "https://frequency.xyz/" +license = "Apache-2.0" +name = "cli-opt" +repository = "https://github.com/frequency-chain/frequency/" +version = "0.0.0" + +[dependencies] +clap = { workspace = true, features = ["derive"] } + +[lints] +workspace = true diff --git a/node/cli-opt/src/lib.rs b/node/cli-opt/src/lib.rs new file mode 100644 index 0000000000..ab6f2d35ae --- /dev/null +++ b/node/cli-opt/src/lib.rs @@ -0,0 +1,23 @@ +use clap::ValueEnum; +use std::fmt; + +/// Block authoring sealing scheme to be used by the dev service. +#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, ValueEnum)] +pub enum SealingMode { + /// Author a block immediately upon receiving a transaction into the transaction pool + Instant, + /// Author a block upon receiving an RPC command + Manual, + /// Author blocks at a regular interval specified in seconds + Interval, +} + +impl fmt::Display for SealingMode { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + SealingMode::Instant => write!(f, "Instant"), + SealingMode::Manual => write!(f, "Manual"), + SealingMode::Interval => write!(f, "Interval"), + } + } +} diff --git a/node/cli/Cargo.toml b/node/cli/Cargo.toml new file mode 100644 index 0000000000..9e87166510 --- /dev/null +++ b/node/cli/Cargo.toml @@ -0,0 +1,104 @@ +[package] +authors = ["Frequency"] +description = "Substrate cli for frequency node" +edition = "2021" +homepage = "https://frequency.xyz/" +license = "Apache-2.0" +name = "frequency-cli" +repository = "https://github.com/frequency-chain/frequency/" +version = "0.0.0" + +[dependencies] +clap = { workspace = true, features = ["derive"] } +derive_more = { workspace = true } +futures = { workspace = true, features = ["thread-pool"] } +hex-literal = { workspace = true } +log = { workspace = true } +serde_json = { workspace = true } +serde = { workspace = true, features = ["derive"] } +# Frequency Runtime +common-primitives = { default-features = false, path = "../../common/primitives" } +common-runtime = { package = "common-runtime", path = "../../runtime/common", default-features = false } +frequency-runtime = { package = "frequency-runtime", path = "../../runtime/frequency", default-features = false } +frequency-service = { package = "frequency-service", path = "../service", default-features = false, optional = true } +pallet-msa = { package = "pallet-msa", path = "../../pallets/msa", default-features = false } +pallet-frequency-tx-payment = { package = "pallet-frequency-tx-payment", path = "../../pallets/frequency-tx-payment", default-features = false } +pallet-handles = { package = "pallet-handles", path = "../../pallets/handles", default-features = false } +pallet-stateful-storage = { package = "pallet-stateful-storage", path = "../../pallets/stateful-storage", default-features = false } +cli-opt = { default-features = false, path = "../cli-opt" } + +# Substrate +frame-benchmarking-cli = { workspace = true, optional = true } +frame-benchmarking = { workspace = true, optional = true } +frame-support = { workspace = true } +frame-system = { workspace = true } +frame-metadata-hash-extension = { workspace = true } +pallet-balances = { workspace = true } +pallet-transaction-payment = { workspace = true } +sc-cli = { workspace = true, optional = true } +sc-client-api = { workspace = true } +sc-service = { workspace = true, optional = true } +sc-sysinfo = { workspace = true } +sc-telemetry = { workspace = true } +sc-tracing = { workspace = true } +sc-executor = { workspace = true } +sp-io = { workspace = true } +sp-api = { workspace = true } +sp-core = { workspace = true, optional = true } +sp-inherents = { workspace = true } +sp-keyring = { workspace = true } +sp-runtime = { workspace = true } +sp-timestamp = { workspace = true } + +# Polkadot +polkadot-cli = { workspace = true } +polkadot-parachain-primitives = { workspace = true } +polkadot-primitives = { workspace = true } +polkadot-service = { workspace = true } +# Cumulus +cumulus-client-cli = { workspace = true } +cumulus-client-service = { workspace = true } +cumulus-client-parachain-inherent = { workspace = true } +cumulus-primitives-core = { workspace = true } +cumulus-pallet-weight-reclaim = { workspace = true } + +[build-dependencies] +substrate-build-script-utils = { workspace = true } + +[features] +std = ["sp-io/std", "sp-api/std", "frame-support/std", "sp-runtime/std", "sp-core/std"] +cli = [ + "frequency-service", + "sp-core", + "sc-cli", + "sc-service", + "frame-benchmarking-cli", + "frame-benchmarking", +] +default = ["std", "cli"] +runtime-benchmarks = [ + "polkadot-cli/runtime-benchmarks", + "frequency-runtime/runtime-benchmarks", + "sc-service?/runtime-benchmarks", + "frame-benchmarking-cli/runtime-benchmarks", + "sp-runtime/runtime-benchmarks", +] +try-runtime = [ + "frequency-service/try-runtime", + "sp-runtime/try-runtime" +] +on-chain-release-build = ["sp-api/disable-logging"] +frequency = ["frequency-service/frequency"] +frequency-no-relay = ["frequency-service/frequency-no-relay"] +frequency-local = ["frequency-service/frequency-local"] +frequency-testnet = ["frequency-service/frequency-testnet"] +frequency-lint-check = [ + "frequency", + "frequency-no-relay", + "frequency-local", + "frequency-testnet", + "frequency-service/frequency-lint-check", +] + +[lints] +workspace = true diff --git a/node/cli/build.rs b/node/cli/build.rs new file mode 100644 index 0000000000..a4489fbe7b --- /dev/null +++ b/node/cli/build.rs @@ -0,0 +1,55 @@ +use substrate_build_script_utils::{generate_cargo_keys, rerun_if_git_head_changed}; + +#[cfg(not(any( + feature = "frequency", + feature = "frequency-local", + feature = "frequency-no-relay", + feature = "frequency-testnet" +)))] +compile_error!( + r#"You must enable one of these features: +- Mainnet: "frequency" +- Frequency Paseo: "frequency-testnet" +- Local: "frequency-local" +- No Relay: "frequency-no-relay", +- All: "frequency-lint-check"# +); + +// Don't allow more than one main feature (except for benchmark/lint/check) so that we always have a good mainnet runtime +#[cfg(all( + not(feature = "frequency-lint-check"), + feature = "frequency", + any( + feature = "frequency-no-relay", + feature = "frequency-local", + feature = "frequency-testnet" + ) +))] +compile_error!("\"Only one main feature can be enabled except for benchmark/lint/check with \"frequency-lint-check\""); + +#[cfg(all( + not(feature = "frequency-lint-check"), + feature = "frequency-no-relay", + any(feature = "frequency", feature = "frequency-local", feature = "frequency-testnet") +))] +compile_error!("\"Only one main feature can be enabled except for benchmark/lint/check with \"frequency-lint-check\""); + +#[cfg(all( + not(feature = "frequency-lint-check"), + feature = "frequency-local", + any(feature = "frequency", feature = "frequency-no-relay", feature = "frequency-testnet") +))] +compile_error!("\"Only one main feature can be enabled except for benchmark/lint/check with \"frequency-lint-check\""); + +#[cfg(all( + not(feature = "frequency-lint-check"), + feature = "frequency-testnet", + any(feature = "frequency", feature = "frequency-no-relay", feature = "frequency-local",) +))] +compile_error!("\"Only one main feature can be enabled except for benchmark/lint/check with \"frequency-lint-check\""); + +fn main() { + generate_cargo_keys(); + + rerun_if_git_head_changed(); +} diff --git a/node/cli/src/benchmarking.rs b/node/cli/src/benchmarking.rs new file mode 100644 index 0000000000..429256321b --- /dev/null +++ b/node/cli/src/benchmarking.rs @@ -0,0 +1,199 @@ +//! Setup code for [`super::command`] which would otherwise bloat that module. +//! +//! Should only be used for benchmarking as it may break in other contexts. +#![allow(clippy::unwrap_used, clippy::expect_used)] + +use common_primitives::node::{AccountId, Balance, Signature}; +use frame_support::pallet_prelude::InherentData; +use frame_system::{Call as SystemCall, Config}; +use frequency_service::service::{frequency_runtime as runtime, ParachainClient as FullClient}; +use sc_cli::Result; +use sc_client_api::BlockBackend; +use sp_core::{Encode, Pair}; +use sp_keyring::Sr25519Keyring; +use sp_runtime::{OpaqueExtrinsic, SaturatedConversion}; + +use pallet_balances::Call as BalancesCall; +use sp_inherents::InherentDataProvider; +#[allow(deprecated)] +use sp_runtime::traits::transaction_extension::AsTransactionExtension; +use std::{sync::Arc, time::Duration}; + +/// Generates extrinsics for the `benchmark overhead` command. +/// +/// Note: Should only be used for benchmarking. +pub struct RemarkBuilder { + client: Arc, +} + +impl RemarkBuilder { + /// Creates a new [`Self`] from the given client. + pub fn new(client: Arc) -> Self { + Self { client } + } +} + +impl frame_benchmarking_cli::ExtrinsicBuilder for RemarkBuilder { + fn pallet(&self) -> &str { + "system" + } + + fn extrinsic(&self) -> &str { + "remark" + } + + fn build(&self, nonce: u32) -> std::result::Result { + let acc = Sr25519Keyring::Bob.pair(); + let extrinsic: OpaqueExtrinsic = create_benchmark_extrinsic( + self.client.as_ref(), + acc, + SystemCall::remark { remark: vec![] }.into(), + nonce, + ) + .into(); + + Ok(extrinsic) + } +} + +/// Generates `Balances::TransferKeepAlive` extrinsics for the benchmarks. +/// +/// Note: Should only be used for benchmarking. +pub struct TransferKeepAliveBuilder { + client: Arc, + dest: AccountId, + value: Balance, +} + +impl TransferKeepAliveBuilder { + /// Creates a new [`Self`] from the given client. + pub fn new(client: Arc, dest: AccountId, value: Balance) -> Self { + Self { client, dest, value } + } +} + +impl frame_benchmarking_cli::ExtrinsicBuilder for TransferKeepAliveBuilder { + fn pallet(&self) -> &str { + "balances" + } + + fn extrinsic(&self) -> &str { + "transfer_keep_alive" + } + + fn build(&self, nonce: u32) -> std::result::Result { + let acc = Sr25519Keyring::Bob.pair(); + let extrinsic: OpaqueExtrinsic = create_benchmark_extrinsic( + self.client.as_ref(), + acc, + BalancesCall::transfer_keep_alive { dest: self.dest.clone().into(), value: self.value } + .into(), + nonce, + ) + .into(); + + Ok(extrinsic) + } +} + +/// Create a transaction using the given `call`. +/// +/// Note: Should only be used for benchmarking. +pub fn create_benchmark_extrinsic( + client: &FullClient, + sender: sp_core::sr25519::Pair, + call: runtime::RuntimeCall, + nonce: u32, +) -> runtime::UncheckedExtrinsic { + let genesis_hash = client.block_hash(0).ok().flatten().expect("Genesis block exists; qed"); + let best_hash = client.chain_info().best_hash; + let best_block = client.chain_info().best_number; + + let period = ::BlockHashCount::get() + .checked_next_power_of_two() + .map(|c| c / 2) + .unwrap_or(2) as u64; + + #[allow(deprecated)] + let extra: runtime::TxExtension = cumulus_pallet_weight_reclaim::StorageWeightReclaim::::new( + ( + frame_system::CheckNonZeroSender::::new(), + ( + frame_system::CheckSpecVersion::::new(), + frame_system::CheckTxVersion::::new(), + ), + frame_system::CheckGenesis::::new(), + frame_system::CheckEra::::from(sp_runtime::generic::Era::mortal( + period, + best_block.saturated_into(), + )), + #[allow(deprecated)] + AsTransactionExtension::from(common_runtime::extensions::check_nonce::CheckNonce::::from(nonce)), + #[allow(deprecated)] + AsTransactionExtension::from(pallet_frequency_tx_payment::ChargeFrqTransactionPayment::::from(0)), + #[allow(deprecated)] + AsTransactionExtension::from(pallet_msa::CheckFreeExtrinsicUse::::new()), + #[allow(deprecated)] + AsTransactionExtension::from(pallet_handles::handles_signed_extension::HandlesSignedExtension::::new()), + frame_metadata_hash_extension::CheckMetadataHash::::new(false), + frame_system::CheckWeight::::new(), + ), + ); + let raw_payload = sp_runtime::generic::SignedPayload::from_raw( + call.clone(), + extra.clone(), + ( + (), + (runtime::VERSION.spec_version, runtime::VERSION.transaction_version), + genesis_hash, + best_hash, + (), + (), + (), + (), + None, + (), + ), + ); + let signature = raw_payload.using_encoded(|e| sender.sign(e)); + + runtime::UncheckedExtrinsic::new_signed( + call.clone(), + sp_runtime::AccountId32::from(sender.public()).into(), + Signature::Sr25519(signature), + extra.clone(), + ) +} + +/// Generates inherent data for the `benchmark overhead` command. +/// +/// Note: Should only be used for benchmarking. +pub fn inherent_benchmark_data() -> Result { + let mut inherent_data = InherentData::new(); + let d = Duration::from_millis(0); + let timestamp = sp_timestamp::InherentDataProvider::new(d.into()); + let mock_para_inherent_provider = + cumulus_client_parachain_inherent::MockValidationDataInherentDataProvider { + para_id: 1000.into(), + current_para_block_head: Some(cumulus_primitives_core::relay_chain::HeadData::default()), + current_para_block: 0, + relay_offset: 1, + relay_blocks_per_para_block: 1, + xcm_config: Default::default(), + raw_downward_messages: Default::default(), + raw_horizontal_messages: Default::default(), + para_blocks_per_relay_epoch: 2, + relay_randomness_config: (), + additional_key_values: Some(vec![]), + upgrade_go_ahead: None, + }; + + futures::executor::block_on(timestamp.provide_inherent_data(&mut inherent_data)) + .map_err(|e| format!("creating inherent data: {:?}", e))?; + futures::executor::block_on( + mock_para_inherent_provider.provide_inherent_data(&mut inherent_data), + ) + .map_err(|e| format!("creating cumulus inherent data: {:?}", e))?; + + Ok(inherent_data) +} diff --git a/node/cli/src/cli.rs b/node/cli/src/cli.rs new file mode 100644 index 0000000000..a2e77cd4a1 --- /dev/null +++ b/node/cli/src/cli.rs @@ -0,0 +1,133 @@ +//! Frequency CLI library. + +// File originally from https://github.com/paritytech/cumulus/blob/master/parachain-template/node/src/cli.rs + +use crate::{ExportMetadataCmd, ExportRuntimeVersionCmd}; +use std::path::PathBuf; + +#[cfg(feature = "frequency-no-relay")] +use std::num::NonZeroU16; + +#[cfg(feature = "frequency-no-relay")] +use cli_opt::SealingMode; + +/// Sub-commands supported by the collator. +#[derive(Debug, clap::Subcommand)] +pub enum Subcommand { + /// Key management cli utilities + #[command(subcommand)] + Key(sc_cli::KeySubcommand), + /// Build a chain specification. + BuildSpec(sc_cli::BuildSpecCmd), + + /// Validate blocks. + CheckBlock(sc_cli::CheckBlockCmd), + + /// Export blocks. + ExportBlocks(sc_cli::ExportBlocksCmd), + + /// Export the state of a given block into a chain spec. + ExportState(sc_cli::ExportStateCmd), + + /// Import blocks. + ImportBlocks(sc_cli::ImportBlocksCmd), + + /// Export metadata. + ExportMetadata(ExportMetadataCmd), + + /// Revert the chain to a previous state. + Revert(sc_cli::RevertCmd), + + /// Remove the whole chain. + PurgeChain(cumulus_client_cli::PurgeChainCmd), + + /// Export the genesis state of the parachain. + #[command(alias = "export-genesis-state")] + ExportGenesisHead(cumulus_client_cli::ExportGenesisHeadCommand), + + /// Export the genesis wasm of the parachain. + ExportGenesisWasm(cumulus_client_cli::ExportGenesisWasmCommand), + + /// Sub-commands concerned with benchmarking. + /// The pallet benchmarking moved to the `pallet` sub-command. + #[clap(subcommand)] + Benchmark(frame_benchmarking_cli::BenchmarkCmd), + + /// Get current runtime spec version. + ExportRuntimeVersion(ExportRuntimeVersionCmd), +} + +#[derive(Debug, clap::Parser)] +#[clap( + propagate_version = true, + args_conflicts_with_subcommands = true, + subcommand_negates_reqs = true +)] +pub struct Cli { + #[clap(subcommand)] + pub subcommand: Option, + + #[clap(flatten)] + pub run: cumulus_client_cli::RunCmd, + + /// Disable automatic hardware benchmarks. + /// + /// By default these benchmarks are automatically ran at startup and measure + /// the CPU speed, the memory bandwidth and the disk speed. + /// + /// The results are then printed out in the logs, and also sent as part of + /// telemetry, if telemetry is enabled. + #[clap(long)] + pub no_hardware_benchmarks: bool, + + /// Relay chain arguments + #[clap(raw = true)] + pub relay_chain_args: Vec, + + /// Instant block sealing + /// Blocks are triggered to be formed each time a transaction hits the validated transaction pool + /// Empty blocks can also be formed using the `engine_createBlock` RPC + #[cfg(feature = "frequency-no-relay")] + #[clap(long, value_enum, help = "The sealing mode", default_value_t=SealingMode::Instant)] + pub sealing: SealingMode, + + /// Interval in seconds for interval sealing. + #[cfg(feature = "frequency-no-relay")] + #[clap(long, help = "The interval in seconds", default_value = "6", value_name = "SECONDS")] + pub sealing_interval: NonZeroU16, + + /// Whether to create empty blocks in manual and interval sealing modes. + #[cfg(feature = "frequency-no-relay")] + #[clap(long, help = "Create empty blocks in interval sealing modes", default_value = "false")] + pub sealing_create_empty_blocks: bool, +} + +#[derive(Debug)] +pub struct RelayChainCli { + /// The actual relay chain cli object. + pub base: polkadot_cli::RunCmd, + + /// Optional chain id that should be passed to the relay chain. + pub chain_id: Option, + + /// The base path that should be used by the relay chain. + pub base_path: Option, +} + +impl RelayChainCli { + /// Parse the relay chain CLI parameters using the para chain `Configuration`. + pub fn new<'a>( + para_config: &sc_service::Configuration, + relay_chain_args: impl Iterator, + ) -> Self { + let extension = + frequency_service::chain_spec::Extensions::try_get(&*para_config.chain_spec); + let chain_id = extension.map(|e| e.relay_chain.clone()); + let base_path = para_config.base_path.path().join("polkadot"); + Self { + base_path: Some(base_path), + chain_id, + base: clap::Parser::parse_from(relay_chain_args), + } + } +} diff --git a/node/cli/src/command.rs b/node/cli/src/command.rs new file mode 100644 index 0000000000..fbd9eb4b57 --- /dev/null +++ b/node/cli/src/command.rs @@ -0,0 +1,530 @@ +// File originally from https://github.com/paritytech/cumulus/blob/master/parachain-template/node/src/command.rs + +use crate::{ + benchmarking::{inherent_benchmark_data, RemarkBuilder}, + cli::{Cli, RelayChainCli, Subcommand}, +}; +use common_primitives::node::Block; +use cumulus_client_service::storage_proof_size::HostFunctions as ReclaimHostFunctions; +use frame_benchmarking_cli::BenchmarkCmd; +use frequency_service::{ + chain_spec, + service::{frequency_runtime::VERSION, new_partial}, +}; +use sc_cli::{ + ChainSpec, CliConfiguration, DefaultConfigurationValues, ImportParams, KeystoreParams, + NetworkParams, Result, RuntimeVersion, SharedParams, SubstrateCli, +}; +use sc_service::config::{BasePath, PrometheusConfig}; +use sp_runtime::traits::HashingFor; + +enum ChainIdentity { + Frequency, + FrequencyPaseo, + FrequencyLocal, + FrequencyDev, +} + +trait IdentifyChain { + fn identify(&self) -> ChainIdentity; +} + +impl IdentifyChain for dyn sc_service::ChainSpec { + fn identify(&self) -> ChainIdentity { + if self.id() == "frequency" { + ChainIdentity::Frequency + } else if self.id() == "frequency-paseo" { + ChainIdentity::FrequencyPaseo + } else if self.id() == "frequency-local" { + ChainIdentity::FrequencyLocal + } else if self.id() == "dev" { + ChainIdentity::FrequencyDev + } else { + panic!("Unknown chain identity") + } + } +} + +impl PartialEq for ChainIdentity { + fn eq(&self, other: &Self) -> bool { + #[allow(clippy::match_like_matches_macro)] + match (self, other) { + (ChainIdentity::Frequency, ChainIdentity::Frequency) => true, + (ChainIdentity::FrequencyPaseo, ChainIdentity::FrequencyPaseo) => true, + (ChainIdentity::FrequencyLocal, ChainIdentity::FrequencyLocal) => true, + (ChainIdentity::FrequencyDev, ChainIdentity::FrequencyDev) => true, + _ => false, + } + } +} + +impl IdentifyChain for T { + fn identify(&self) -> ChainIdentity { + ::identify(self) + } +} + +fn load_spec(id: &str) -> std::result::Result, String> { + match id { + #[cfg(feature = "runtime-benchmarks")] + "frequency-bench" => Ok(Box::new(chain_spec::frequency::benchmark_mainnet_config())), + #[cfg(feature = "frequency")] + "frequency" => Ok(Box::new(chain_spec::frequency::load_frequency_spec())), + #[cfg(feature = "frequency-no-relay")] + "dev" | "frequency-no-relay" => Ok(Box::new(chain_spec::frequency_dev::development_config())), + #[cfg(feature = "frequency-local")] + "frequency-paseo-local" => + Ok(Box::new(chain_spec::frequency_paseo_local::local_paseo_testnet_config())), + #[cfg(feature = "frequency-testnet")] + "frequency-testnet" | "frequency-paseo" | "paseo" | "testnet" => + Ok(Box::new(chain_spec::frequency_paseo::load_frequency_paseo_spec())), + path => { + if path.is_empty() { + if cfg!(feature = "frequency") { + #[cfg(feature = "frequency")] + { + return Ok(Box::new(chain_spec::frequency::load_frequency_spec())); + } + #[cfg(not(feature = "frequency"))] + return Err("Frequency runtime is not available.".into()); + } else if cfg!(feature = "frequency-no-relay") { + #[cfg(feature = "frequency-no-relay")] + { + return Ok(Box::new(chain_spec::frequency_dev::development_config())); + } + #[cfg(not(feature = "frequency-no-relay"))] + return Err("Frequency Development (no relay) runtime is not available.".into()); + } else if cfg!(feature = "frequency-local") { + #[cfg(feature = "frequency-local")] + { + return Ok(Box::new( + chain_spec::frequency_paseo_local::local_paseo_testnet_config(), + )); + } + #[cfg(not(feature = "frequency-local"))] + return Err("Frequency Local runtime is not available.".into()); + } else if cfg!(feature = "frequency-testnet") { + #[cfg(feature = "frequency-testnet")] + { + return Ok(Box::new( + chain_spec::frequency_paseo::load_frequency_paseo_spec(), + )); + } + #[cfg(not(feature = "frequency-testnet"))] + return Err("Frequency Paseo runtime is not available.".into()); + } else { + return Err("No chain spec is available.".into()); + } + } + let path_buf = std::path::PathBuf::from(path); + let spec = Box::new(chain_spec::DummyChainSpec::from_json_file(path_buf.clone())?) + as Box; + if ChainIdentity::Frequency == spec.identify() { + #[cfg(feature = "frequency")] + { + Ok(Box::new(chain_spec::frequency::ChainSpec::from_json_file(path_buf)?)) + } + #[cfg(not(feature = "frequency"))] + return Err("Frequency runtime is not available.".into()); + } else if ChainIdentity::FrequencyPaseo == spec.identify() { + #[cfg(feature = "frequency-testnet")] + { + return Ok(Box::new(chain_spec::frequency_paseo::ChainSpec::from_json_file( + path_buf, + )?)); + } + #[cfg(not(feature = "frequency-testnet"))] + return Err("Frequency Paseo runtime is not available.".into()); + } else if ChainIdentity::FrequencyLocal == spec.identify() { + #[cfg(feature = "frequency-local")] + { + return Ok(Box::new( + chain_spec::frequency_paseo_local::ChainSpec::from_json_file(path_buf)?, + )); + } + #[cfg(not(feature = "frequency-local"))] + return Err("Frequency Local runtime is not available.".into()); + } else if ChainIdentity::FrequencyDev == spec.identify() { + #[cfg(feature = "frequency-no-relay")] + { + return Ok(Box::new( + chain_spec::frequency_paseo_local::ChainSpec::from_json_file(path_buf)?, + )); + } + #[cfg(not(feature = "frequency-no-relay"))] + return Err("Frequency Dev (no relay) runtime is not available.".into()); + } else { + return Err("Unknown chain spec.".into()); + } + }, + } +} + +fn chain_name() -> String { + "Frequency".into() +} + +impl SubstrateCli for Cli { + fn impl_name() -> String { + format!("{} Node", chain_name()) + } + + fn impl_version() -> String { + env!("SUBSTRATE_CLI_IMPL_VERSION").into() + } + + fn description() -> String { + "Frequency\n\nThe command-line arguments provided first will be \ + passed to the parachain node, while the arguments provided after -- will be passed \ + to the relay chain node.\n\n\ + frequency -- " + .into() + } + + fn author() -> String { + env!("CARGO_PKG_AUTHORS").into() + } + + fn support_url() -> String { + "https://github.com/frequency-chain/frequency/issues/new".into() + } + + fn copyright_start_year() -> i32 { + 2020 + } + + fn load_spec(&self, id: &str) -> std::result::Result, String> { + load_spec(id) + } +} + +impl Cli { + /// Returns a reference to the runtime version. + fn runtime_version() -> &'static RuntimeVersion { + &VERSION + } +} + +impl SubstrateCli for RelayChainCli { + fn impl_name() -> String { + "Frequency".into() + } + + fn impl_version() -> String { + env!("SUBSTRATE_CLI_IMPL_VERSION").into() + } + + fn description() -> String { + "Frequency\n\nThe command-line arguments provided first will be \ + passed to the parachain node, while the arguments provided after -- will be passed \ + to the relay chain node.\n\n\ + frequency -- " + .into() + } + + fn author() -> String { + env!("CARGO_PKG_AUTHORS").into() + } + + fn support_url() -> String { + "https://github.com/paritytech/cumulus/issues/new".into() + } + + fn copyright_start_year() -> i32 { + 2020 + } + + fn load_spec(&self, id: &str) -> std::result::Result, String> { + match id { + // TODO: Remove once on a Polkadot-SDK with Paseo-Local + #[cfg(feature = "frequency-local")] + "paseo-local" => Ok(Box::new(chain_spec::frequency_paseo_local::load_paseo_local_spec())), + // TODO: Remove once on a Polkadot-SDK with Paseo + #[cfg(feature = "frequency-testnet")] + "paseo" => Ok(Box::new(chain_spec::frequency_paseo::load_paseo_spec())), + _ => polkadot_cli::Cli::from_iter([RelayChainCli::executable_name()].iter()) + .load_spec(id), + } + } +} + +macro_rules! construct_async_run { + (|$components:ident, $cli:ident, $cmd:ident, $config:ident| $( $code:tt )* ) => {{ + let runner = $cli.create_runner($cmd)?; + runner.async_run(|$config| { + let $components = new_partial(&$config, false, None)?; + let task_manager = $components.task_manager; + { $( $code )* }.map(|v| (v, task_manager)) + }) + }} +} + +/// Parse command line arguments into service configuration. +pub fn run() -> Result<()> { + let cli = Cli::from_args(); + + match &cli.subcommand { + Some(Subcommand::Key(cmd)) => cmd.run(&cli), + Some(Subcommand::BuildSpec(cmd)) => { + let runner = cli.create_runner(cmd)?; + runner.sync_run(|config| cmd.run(config.chain_spec, config.network)) + }, + Some(Subcommand::CheckBlock(cmd)) => { + construct_async_run!(|components, cli, cmd, config| { + Ok(cmd.run(components.client, components.import_queue)) + }) + }, + Some(Subcommand::ExportBlocks(cmd)) => { + construct_async_run!(|components, cli, cmd, config| { + Ok(cmd.run(components.client, config.database)) + }) + }, + Some(Subcommand::ExportState(cmd)) => { + construct_async_run!(|components, cli, cmd, config| { + Ok(cmd.run(components.client, config.chain_spec)) + }) + }, + Some(Subcommand::ImportBlocks(cmd)) => { + construct_async_run!(|components, cli, cmd, config| { + Ok(cmd.run(components.client, components.import_queue)) + }) + }, + Some(Subcommand::ExportMetadata(cmd)) => { + construct_async_run!(|components, cli, cmd, config| Ok(cmd.run(components.client))) + }, + Some(Subcommand::PurgeChain(cmd)) => { + let runner = cli.create_runner(cmd)?; + + runner.sync_run(|config| { + let polkadot_cli = RelayChainCli::new( + &config, + [RelayChainCli::executable_name()].iter().chain(cli.relay_chain_args.iter()), + ); + + let polkadot_config = SubstrateCli::create_configuration( + &polkadot_cli, + &polkadot_cli, + config.tokio_handle.clone(), + ) + .map_err(|err| format!("Relay chain argument error: {}", err))?; + + cmd.run(config, polkadot_config) + }) + }, + Some(Subcommand::Revert(cmd)) => { + construct_async_run!(|components, cli, cmd, config| { + Ok(cmd.run(components.client, components.backend, None)) + }) + }, + Some(Subcommand::ExportGenesisHead(cmd)) => { + let runner = cli.create_runner(cmd)?; + runner.sync_run(|config| { + let partials = new_partial(&config, false, None)?; + + cmd.run(partials.client) + }) + }, + Some(Subcommand::ExportGenesisWasm(cmd)) => { + let runner = cli.create_runner(cmd)?; + runner.sync_run(|_config| { + let spec = cli.load_spec(&cmd.shared_params.chain.clone().unwrap_or_default())?; + cmd.run(&*spec) + }) + }, + Some(Subcommand::Benchmark(cmd)) => { + let runner = cli.create_runner(cmd)?; + + match cmd { + BenchmarkCmd::Pallet(cmd) => + if cfg!(feature = "runtime-benchmarks") { + runner.sync_run(|config| { + cmd.run_with_spec::, ReclaimHostFunctions>(Some( + config.chain_spec, + )) + }) + } else { + Err("Benchmarking wasn't enabled when building the node. \ + You can enable it with `--features runtime-benchmarks`." + .into()) + }, + BenchmarkCmd::Block(cmd) => runner.sync_run(|config| { + let partials = new_partial(&config, false, None)?; + cmd.run(partials.client) + }), + #[cfg(not(feature = "runtime-benchmarks"))] + BenchmarkCmd::Storage(_) => + return Err(sc_cli::Error::Input( + "Compile with --features=runtime-benchmarks \ + to enable storage benchmarks." + .into(), + ) + .into()), + #[cfg(feature = "runtime-benchmarks")] + BenchmarkCmd::Storage(cmd) => runner.sync_run(|config| { + let partials = new_partial(&config, false, None)?; + let db = partials.backend.expose_db(); + let storage = partials.backend.expose_storage(); + + cmd.run(config, partials.client.clone(), db, storage) + }), + BenchmarkCmd::Overhead(cmd) => runner.sync_run(|config| { + let partials = new_partial(&config, false, None)?; + let ext_builder = RemarkBuilder::new(partials.client.clone()); + let should_record_proof = false; + + cmd.run( + chain_name(), + partials.client, + inherent_benchmark_data()?, + Vec::new(), + &ext_builder, + should_record_proof, + ) + }), + BenchmarkCmd::Machine(cmd) => runner.sync_run(|config| { + cmd.run(&config, frame_benchmarking_cli::SUBSTRATE_REFERENCE_HARDWARE.clone()) + }), + BenchmarkCmd::Extrinsic(_cmd) => + Err("Benchmarking command not implemented.".into()), + } + }, + + Some(Subcommand::ExportRuntimeVersion(cmd)) => { + let runner = cli.create_runner(cmd)?; + + runner.async_run(|config| { + let version = Cli::runtime_version(); + // grab the task manager. + let registry = config.prometheus_config.as_ref().map(|cfg| &cfg.registry); + let task_manager = + sc_service::TaskManager::new(config.tokio_handle.clone(), registry) + .map_err(|e| format!("Error: {:?}", e))?; + Ok((cmd.run(version), task_manager)) + }) + }, + None => run_chain(cli), + } +} + +// This appears messy but due to layers of Rust complexity, it's necessary. +pub fn run_chain(cli: Cli) -> sc_service::Result<(), sc_cli::Error> { + #[allow(unused)] + let mut result: sc_service::Result<(), polkadot_cli::Error> = Ok(()); + #[cfg(feature = "frequency-no-relay")] + { + result = crate::run_as_localchain::run_as_localchain(cli); + } + #[cfg(not(feature = "frequency-no-relay"))] + { + result = crate::run_as_parachain::run_as_parachain(cli); + } + + result +} + +impl DefaultConfigurationValues for RelayChainCli { + fn p2p_listen_port() -> u16 { + 30334 + } + + fn rpc_listen_port() -> u16 { + 9945 + } + + fn prometheus_listen_port() -> u16 { + 9616 + } +} + +impl CliConfiguration for RelayChainCli { + fn shared_params(&self) -> &SharedParams { + self.base.base.shared_params() + } + + fn import_params(&self) -> Option<&ImportParams> { + self.base.base.import_params() + } + + fn network_params(&self) -> Option<&NetworkParams> { + self.base.base.network_params() + } + + fn keystore_params(&self) -> Option<&KeystoreParams> { + self.base.base.keystore_params() + } + + fn base_path(&self) -> Result> { + Ok(self + .shared_params() + .base_path()? + .or_else(|| self.base_path.clone().map(Into::into))) + } + + fn prometheus_config( + &self, + default_listen_port: u16, + chain_spec: &Box, + ) -> Result> { + self.base.base.prometheus_config(default_listen_port, chain_spec) + } + + fn init(&self, _support_url: &String, _impl_version: &String, _logger_hook: F) -> Result<()> + where + F: FnOnce(&mut sc_cli::LoggerBuilder), + { + unreachable!("PolkadotCli is never initialized; qed"); + } + + fn chain_id(&self, is_dev: bool) -> Result { + let chain_id = self.base.base.chain_id(is_dev)?; + + Ok(if chain_id.is_empty() { self.chain_id.clone().unwrap_or_default() } else { chain_id }) + } + + fn role(&self, is_dev: bool) -> Result { + self.base.base.role(is_dev) + } + + fn transaction_pool(&self, is_dev: bool) -> Result { + self.base.base.transaction_pool(is_dev) + } + + fn trie_cache_maximum_size(&self) -> Result> { + self.base.base.trie_cache_maximum_size() + } + + fn rpc_methods(&self) -> Result { + self.base.base.rpc_methods() + } + + fn rpc_cors(&self, is_dev: bool) -> Result>> { + self.base.base.rpc_cors(is_dev) + } + + fn default_heap_pages(&self) -> Result> { + self.base.base.default_heap_pages() + } + + fn disable_grandpa(&self) -> Result { + self.base.base.disable_grandpa() + } + + fn max_runtime_instances(&self) -> Result> { + self.base.base.max_runtime_instances() + } + + fn announce_block(&self) -> Result { + self.base.base.announce_block() + } + + fn telemetry_endpoints( + &self, + chain_spec: &Box, + ) -> Result> { + self.base.base.telemetry_endpoints(chain_spec) + } + + fn node_name(&self) -> Result { + self.base.base.node_name() + } +} diff --git a/node/cli/src/export_metadata_cmd.rs b/node/cli/src/export_metadata_cmd.rs new file mode 100644 index 0000000000..860d3836e6 --- /dev/null +++ b/node/cli/src/export_metadata_cmd.rs @@ -0,0 +1,78 @@ +use clap::Parser; +use sc_cli::{CliConfiguration, Error, GenericNumber, SharedParams}; +use sc_client_api::HeaderBackend; +use serde_json::{json, to_writer}; +use sp_api::{Metadata, ProvideRuntimeApi}; +use sp_core::Bytes; +use sp_runtime::traits::{Block as BlockT, Header as HeaderT}; +use std::{fmt::Debug, fs, io, path::PathBuf, str::FromStr, sync::Arc}; + +/// The `export-metadata` command used to export chain metadata. +/// Remember that this uses the chain database. So it will pull the _current_ metadata from that database. +#[derive(Debug, Clone, Parser)] +pub struct ExportMetadataCmd { + /// Output file name or stdout if unspecified. + #[clap(value_parser)] + pub output: Option, + + /// Specify starting block number. + /// + /// Default is 0. + #[clap(long, value_name = "BLOCK")] + pub from: Option, + + #[allow(missing_docs)] + #[clap(flatten)] + pub shared_params: SharedParams, + + /// Use a temporary directory for the db + /// + /// A temporary directory will be created to store the configuration and will be deleted + /// at the end of the process. + /// + /// Note: the directory is random per process execution. This directory is used as base path + /// which includes: database, node key and keystore. + #[arg(long, conflicts_with = "base_path")] + pub tmp: bool, +} + +#[allow(clippy::unwrap_used)] +impl ExportMetadataCmd { + /// Run the export-metadata command + pub async fn run(&self, client: Arc) -> Result<(), Error> + where + B: BlockT, + C: ProvideRuntimeApi + HeaderBackend, + C::Api: Metadata + 'static, + <::Number as FromStr>::Err: Debug, + { + let api = client.runtime_api(); + + let block_number = self.from.as_ref().and_then(|f| f.parse().ok()).unwrap_or(0u32); + let maybe_hash = client.hash(block_number.into())?; + let block_hash = maybe_hash.ok_or_else(|| Error::from("Block not found"))?; + + let metadata: Bytes = api.metadata_at_version(block_hash, 15u32).unwrap().unwrap().into(); + let result = json!({ "result": metadata }); + + let file: Box = match &self.output { + Some(filename) => Box::new(fs::File::create(filename)?), + None => Box::new(io::stdout()), + }; + to_writer(file, &result).map_err(|_| Error::from("Failed Encoding")) + } +} + +impl CliConfiguration for ExportMetadataCmd { + fn shared_params(&self) -> &SharedParams { + &self.shared_params + } + + // Enabling `--tmp` on this command + fn base_path(&self) -> Result, sc_cli::Error> { + match &self.tmp { + true => Ok(Some(sc_service::BasePath::new_temp_dir()?)), + false => self.shared_params.base_path(), + } + } +} diff --git a/node/cli/src/lib.rs b/node/cli/src/lib.rs new file mode 100644 index 0000000000..1abf194783 --- /dev/null +++ b/node/cli/src/lib.rs @@ -0,0 +1,39 @@ +//! Frequency CLI library. + +#![allow(missing_docs)] +#[cfg(feature = "cli")] +mod benchmarking; + +#[cfg(feature = "cli")] +mod cli; + +#[cfg(feature = "cli")] +mod command; + +#[cfg(feature = "cli")] +mod export_metadata_cmd; + +#[cfg(feature = "cli")] +mod runtime_version_cmd; + +#[cfg(feature = "cli")] +pub use benchmarking::*; + +#[cfg(feature = "cli")] +pub use cli::*; + +#[cfg(feature = "cli")] +pub use command::*; + +#[cfg(feature = "cli")] +pub use export_metadata_cmd::*; + +#[cfg(feature = "cli")] +pub use runtime_version_cmd::*; + +#[cfg(feature = "cli")] +pub use sc_cli::{Error, Result}; +#[cfg(feature = "frequency-no-relay")] +pub mod run_as_localchain; +#[cfg(any(not(feature = "frequency-no-relay"), feature = "frequency-lint-check"))] +pub mod run_as_parachain; diff --git a/node/cli/src/run_as_localchain.rs b/node/cli/src/run_as_localchain.rs new file mode 100644 index 0000000000..4b9a6aa5e4 --- /dev/null +++ b/node/cli/src/run_as_localchain.rs @@ -0,0 +1,26 @@ +use crate::cli::Cli; +use frequency_service::block_sealing::start_frequency_dev_sealing_node; +use polkadot_service::TransactionPoolOptions; +use sc_cli::{SubstrateCli, TransactionPoolType}; + +pub fn run_as_localchain(cli: Cli) -> sc_service::Result<(), sc_cli::Error> { + let runner = cli.create_runner(&cli.run.normalize())?; + let override_pool_config = TransactionPoolOptions::new_with_params( + cli.run.base.pool_config.pool_limit, + cli.run.base.pool_config.pool_kbytes * 1024, + cli.run.base.pool_config.tx_ban_seconds, + TransactionPoolType::SingleState.into(), + true, + ); + + runner.run_node_until_exit(|config| async move { + start_frequency_dev_sealing_node( + config, + cli.sealing, + u16::from(cli.sealing_interval), + cli.sealing_create_empty_blocks, + Some(override_pool_config), + ) + .map_err(Into::into) + }) +} diff --git a/node/cli/src/run_as_parachain.rs b/node/cli/src/run_as_parachain.rs new file mode 100644 index 0000000000..87e77df6da --- /dev/null +++ b/node/cli/src/run_as_parachain.rs @@ -0,0 +1,60 @@ +use crate::cli::{Cli, RelayChainCli}; +use cumulus_primitives_core::ParaId; +use frame_benchmarking_cli::SUBSTRATE_REFERENCE_HARDWARE; +use frequency_service::chain_spec; +use log::info; +use polkadot_service::TransactionPoolOptions; +use sc_cli::{SubstrateCli, TransactionPoolType}; + +pub fn run_as_parachain(cli: Cli) -> sc_service::Result<(), sc_cli::Error> { + let runner = cli.create_runner(&cli.run.normalize())?; + let collator_options = cli.run.collator_options(); + let override_pool_config = TransactionPoolOptions::new_with_params( + cli.run.base.pool_config.pool_limit, + cli.run.base.pool_config.pool_kbytes * 1024, + cli.run.base.pool_config.tx_ban_seconds, + TransactionPoolType::ForkAware.into(), + false, + ); + + runner.run_node_until_exit(|config| async move { + let hwbench = (!cli.no_hardware_benchmarks) + .then_some(config.database.path().map(|database_path| { + let _ = std::fs::create_dir_all(database_path); + sc_sysinfo::gather_hwbench(Some(database_path), &SUBSTRATE_REFERENCE_HARDWARE) + })) + .flatten(); + + let para_id = chain_spec::Extensions::try_get(&*config.chain_spec) + .map(|e: &chain_spec::Extensions| e.para_id) + .ok_or("Could not find parachain ID in chain-spec.")?; + + let polkadot_cli = RelayChainCli::new( + &config, + [RelayChainCli::executable_name()].iter().chain(cli.relay_chain_args.iter()), + ); + + let id = ParaId::from(para_id); + + let tokio_handle = config.tokio_handle.clone(); + + let polkadot_config = + SubstrateCli::create_configuration(&polkadot_cli, &polkadot_cli, tokio_handle) + .map_err(|err| format!("Relay chain argument error: {}", err))?; + + info!("Parachain id: {:?}", id); + info!("Is collating: {}", if config.role.is_authority() { "yes" } else { "no" }); + + frequency_service::service::start_parachain_node( + config, + polkadot_config, + collator_options, + id, + hwbench, + Some(override_pool_config), + ) + .await + .map(|r| r.0) + .map_err(Into::into) + }) +} diff --git a/node/cli/src/runtime_version_cmd.rs b/node/cli/src/runtime_version_cmd.rs new file mode 100644 index 0000000000..234ce2a1cc --- /dev/null +++ b/node/cli/src/runtime_version_cmd.rs @@ -0,0 +1,34 @@ +use clap::Parser; +use sc_cli::{CliConfiguration, Error, RuntimeVersion, SharedParams}; +use serde_json::{json, to_writer}; +use std::{fmt::Debug, fs, io, path::PathBuf}; + +/// The `export-runtime-version` command used to export the runtime version. +#[derive(Debug, Clone, Parser)] +pub struct ExportRuntimeVersionCmd { + /// Output file name or stdout if unspecified. + #[clap(value_parser)] + pub output: Option, + + #[allow(missing_docs)] + #[clap(flatten)] + pub shared_params: SharedParams, +} + +impl ExportRuntimeVersionCmd { + /// Run the export-runtime-version command. + pub async fn run(&self, runtime_version: &RuntimeVersion) -> Result<(), Error> { + let result = json!(runtime_version); + let file: Box = match &self.output { + Some(filename) => Box::new(fs::File::create(filename)?), + None => Box::new(io::stdout()), + }; + to_writer(file, &result).map_err(|_| Error::from("export-runtime-version: failed encoding")) + } +} + +impl CliConfiguration for ExportRuntimeVersionCmd { + fn shared_params(&self) -> &SharedParams { + &self.shared_params + } +} diff --git a/node/service/Cargo.toml b/node/service/Cargo.toml new file mode 100644 index 0000000000..01017bea2a --- /dev/null +++ b/node/service/Cargo.toml @@ -0,0 +1,138 @@ +[package] +authors = ["Frequency"] +description = "Substrate node for frequency" +edition = "2021" +homepage = "https://frequency.xyz" +license = "Apache-2.0" +name = "frequency-service" +repository = "https://github.com/frequency-chain/frequency/" +version = "0.0.0" + +[dependencies] +clap = { workspace = true, features = ["derive"] } +parity-scale-codec = { workspace = true } + +derive_more = { workspace = true } +futures = { workspace = true } +hex = { workspace = true, default-features = true } +hex-literal = { workspace = true } + +jsonrpsee = { workspace = true, features = ["server"] } +log = { workspace = true } +serde = { workspace = true, features = ["derive"] } +tokio = { workspace = true, features = ["macros", "time", "parking_lot"] } +serde_json = { workspace = true } + +# Frequency Runtime +frequency-runtime = { path = "../../runtime/frequency", optional = true } +common-runtime = { path = "../../runtime/common" } +cli-opt = { default-features = false, path = "../cli-opt" } +# Substrate +frame-benchmarking = { workspace = true } +frame-benchmarking-cli = { workspace = true } +frame-system = { workspace = true } +pallet-transaction-payment-rpc = { workspace = true } +sc-basic-authorship = { workspace = true } +sc-chain-spec = { workspace = true } +sc-executor = { workspace = true } +sc-cli = { workspace = true } +sc-keystore = { workspace = true } + +sc-service = { workspace = true } +sc-client-api = { workspace = true } + +sc-client-db = { workspace = true } +sc-consensus = { workspace = true } +sc-consensus-manual-seal = { workspace = true } +sc-network = { workspace = true } +sc-network-common = { workspace = true } +sc-network-sync = { workspace = true } +sc-offchain = { workspace = true } + +sc-sysinfo = { workspace = true } + +sc-rpc = { workspace = true } +sc-telemetry = { workspace = true } +sc-tracing = { workspace = true } +sc-transaction-pool = { workspace = true } +sc-transaction-pool-api = { workspace = true } +sp-api = { workspace = true } +sp-block-builder = { workspace = true } +sp-blockchain = { workspace = true } +sp-consensus = { workspace = true } +sp-consensus-aura = { workspace = true } +sp-core = { workspace = true } +sp-inherents = { workspace = true } +sp-keystore = { workspace = true } +sp-offchain = { workspace = true } +sp-runtime = { workspace = true } +sp-session = { workspace = true } +sp-timestamp = { workspace = true } +sp-transaction-pool = { workspace = true } +sp-wasm-interface = { workspace = true } + +substrate-frame-rpc-system = { workspace = true } +substrate-prometheus-endpoint = { workspace = true } + +# Polkadot +polkadot-cli = { workspace = true } +polkadot-primitives = { workspace = true } +polkadot-service = { workspace = true } +# Cumulus +cumulus-client-cli = { workspace = true } +cumulus-client-collator = { workspace = true } +cumulus-client-consensus-aura = { workspace = true } +cumulus-client-consensus-common = { workspace = true } +cumulus-client-consensus-proposer = { workspace = true } +cumulus-client-network = { workspace = true } +cumulus-client-service = { workspace = true } +cumulus-primitives-core = { workspace = true } +cumulus-relay-chain-inprocess-interface = { workspace = true } +cumulus-relay-chain-interface = { workspace = true } +cumulus-relay-chain-minimal-node = { workspace = true } +cumulus-relay-chain-rpc-interface = { workspace = true } +# Frequency +common-helpers = { default-features = false, path = "../../common/helpers" } +common-primitives = { default-features = false, path = "../../common/primitives" } +pallet-messages-rpc = { path = "../../pallets/messages/src/rpc" } +pallet-messages-runtime-api = { path = "../../pallets/messages/src/runtime-api" } +pallet-msa-rpc = { path = "../../pallets/msa/src/rpc" } +pallet-msa-runtime-api = { path = "../../pallets/msa/src/runtime-api" } +pallet-schemas-rpc = { path = "../../pallets/schemas/src/rpc" } +pallet-schemas-runtime-api = { path = "../../pallets/schemas/src/runtime-api" } +pallet-stateful-storage-rpc = { path = "../../pallets/stateful-storage/src/rpc" } +pallet-stateful-storage-runtime-api = { path = "../../pallets/stateful-storage/src/runtime-api" } +pallet-handles-rpc = { path = "../../pallets/handles/src/rpc" } +pallet-handles-runtime-api = { path = "../../pallets/handles/src/runtime-api" } +pallet-frequency-tx-payment-rpc = { path = "../../pallets/frequency-tx-payment/src/rpc" } +pallet-frequency-tx-payment-runtime-api = { path = "../../pallets/frequency-tx-payment/src/runtime-api" } +system-runtime-api = { path = "../../runtime/system-runtime-api" } + +[build-dependencies] +substrate-build-script-utils = { workspace = true } + +[dev-dependencies] +sc-client-api = { workspace = true } +scale-info = { workspace = true, features = ["derive"] } + +[features] +default = ["std"] +std = ["sp-api/std", "sp-core/std"] +runtime-benchmarks = [ + "frequency-runtime/runtime-benchmarks", + "polkadot-service/runtime-benchmarks", +] +frequency = ["frequency-runtime"] +frequency-no-relay = ["frequency-runtime"] +frequency-local = ["frequency-runtime"] +frequency-testnet = ["frequency-runtime"] +frequency-lint-check = [ + "frequency", + "frequency-no-relay", + "frequency-local", + "frequency-testnet", +] +try-runtime = ["frequency-runtime/try-runtime", "polkadot-service/try-runtime"] + +[lints] +workspace = true diff --git a/node/service/src/block_sealing.rs b/node/service/src/block_sealing.rs new file mode 100644 index 0000000000..1d72eead5c --- /dev/null +++ b/node/service/src/block_sealing.rs @@ -0,0 +1,275 @@ +use crate::service::new_partial; +use cli_opt::SealingMode; +pub use futures::stream::StreamExt; +use sc_consensus::block_import::BlockImport; + +use common_primitives::node::{Block, Hash}; +use core::marker::PhantomData; +use futures::Stream; +use sc_client_api::backend::{Backend as ClientBackend, Finalizer}; +use sc_consensus_manual_seal::{ + finalize_block, EngineCommand, FinalizeBlockParams, ManualSealParams, MANUAL_SEAL_ENGINE_ID, +}; + +use crate::common::start_offchain_workers; +use sc_network::NetworkBackend; +use sc_service::{Configuration, TaskManager}; +use sc_transaction_pool::TransactionPoolOptions; +use sc_transaction_pool_api::{OffchainTransactionPoolFactory, TransactionPool}; +use sp_api::ProvideRuntimeApi; +use sp_blockchain::HeaderBackend; +use sp_consensus::{Environment, Proposer, SelectChain}; +use sp_inherents::CreateInherentDataProviders; +use sp_runtime::traits::Block as BlockT; +use std::{sync::Arc, task::Poll}; + +/// Function to start Frequency in dev mode without a relay chain +/// This function is called when --chain dev --sealing= is passed. +#[allow(clippy::expect_used)] +pub fn start_frequency_dev_sealing_node( + config: Configuration, + sealing_mode: SealingMode, + sealing_interval: u16, + sealing_create_empty_blocks: bool, + override_pool_config: Option, +) -> Result { + let extra: String = if sealing_mode == SealingMode::Interval { + format!(" ({}s interval)", sealing_interval) + } else { + String::from("") + }; + log::info!("📎 Development mode (no relay chain) with {} sealing{}", sealing_mode, extra); + + let net_config = sc_network::config::FullNetworkConfiguration::< + _, + _, + sc_network::NetworkWorker, + >::new(&config.network, None); // 2nd param, metrics_registry: Option + let sc_service::PartialComponents { + client, + backend, + mut task_manager, + import_queue, + keystore_container, + select_chain: maybe_select_chain, + transaction_pool, + other: (_block_import, mut telemetry, _), + } = new_partial(&config, true, override_pool_config)?; + let metrics = sc_network::NetworkWorker::::register_notification_metrics( + config.prometheus_config.as_ref().map(|cfg| &cfg.registry), + ); + + // Build the network components required for the blockchain. + let (network, system_rpc_tx, tx_handler_controller, sync_service) = + sc_service::build_network(sc_service::BuildNetworkParams { + config: &config, + net_config, + client: client.clone(), + transaction_pool: transaction_pool.clone(), + spawn_handle: task_manager.spawn_handle(), + import_queue, + block_announce_validator_builder: None, + warp_sync_config: None, + block_relay: None, + metrics, + })?; + + // Start off-chain workers if enabled + if config.offchain_worker.enabled { + log::info!("OFFCHAIN WORKER is Enabled!"); + start_offchain_workers( + &client, + &config, + Some(keystore_container.keystore()), + &backend, + Some(OffchainTransactionPoolFactory::new(transaction_pool.clone())), + Arc::new(network.clone()), + &task_manager, + ); + } + + let prometheus_registry = config.prometheus_registry().cloned(); + + let role = config.role; + + let select_chain = maybe_select_chain + .expect("In frequency dev mode, `new_partial` will return some `select_chain`; qed"); + + // Only block authoring nodes create, seal and finalize blocks + let command_sink = if role.is_authority() { + let proposer_factory = sc_basic_authorship::ProposerFactory::new( + task_manager.spawn_handle(), + client.clone(), + transaction_pool.clone(), + prometheus_registry.as_ref(), + telemetry.as_ref().map(|x| x.handle()), + ); + + // Channel for the RPC handler to communicate with the authorship task. + let (command_sink, commands_stream) = futures::channel::mpsc::channel(1024); + + let pool = transaction_pool.clone(); + + // For instant sealing, set up a stream that automatically creates and finalizes + // blocks as soon as transactions arrive. + // For manual sealing, there's an empty stream. + // For interval sealing, set up a timed poll. + + let import_stream = match sealing_mode { + SealingMode::Manual => futures::stream::empty().boxed(), + SealingMode::Instant => + Box::pin(pool.import_notification_stream().map(|_| EngineCommand::SealNewBlock { + create_empty: true, + finalize: true, + parent_hash: None, + sender: None, + })), + SealingMode::Interval => { + let interval = std::time::Duration::from_secs(sealing_interval.into()); + let mut interval_stream = tokio::time::interval(interval); + + Box::pin(futures::stream::poll_fn(move |cx| { + let engine_seal_cmd = EngineCommand::SealNewBlock { + create_empty: sealing_create_empty_blocks, + finalize: true, + parent_hash: None, + sender: None, + }; + match interval_stream.poll_tick(cx) { + Poll::Ready(_instant) => { + log::info!("⏳ Interval timer triggered"); + Poll::Ready(Some(engine_seal_cmd)) + }, + Poll::Pending => Poll::Pending, + } + })) + }, + }; + + // Prepare the future for manual sealing block authoring + let authorship_future = run_seal_command(sc_consensus_manual_seal::ManualSealParams { + block_import: client.clone(), + env: proposer_factory, + client: client.clone(), + pool: transaction_pool.clone(), + commands_stream: futures::stream_select!(commands_stream, import_stream), + select_chain, + consensus_data_provider: None, + create_inherent_data_providers: |_, _| async { + Ok((sp_timestamp::InherentDataProvider::from_system_time(),)) + }, + }); + + // Spawn a background task for block authoring + task_manager.spawn_essential_handle().spawn_blocking( + match sealing_mode { + SealingMode::Manual => "manual-seal", + SealingMode::Instant => "instant-seal", + SealingMode::Interval => "interval-seal", + }, + Some("block-authoring"), + authorship_future, + ); + Some(command_sink) + } else { + None + }; + + // Build the RPC + let rpc_extensions_builder = { + let client = client.clone(); + let transaction_pool = transaction_pool.clone(); + let backend = match config.offchain_worker.enabled { + true => backend.offchain_storage(), + false => None, + }; + + Box::new(move |_| { + let deps = crate::rpc::FullDeps { + client: client.clone(), + pool: transaction_pool.clone(), + command_sink: command_sink.clone(), + }; + crate::rpc::create_full(deps, backend.clone()).map_err(Into::into) + }) + }; + + sc_service::spawn_tasks(sc_service::SpawnTasksParams { + rpc_builder: rpc_extensions_builder, + client: client.clone(), + transaction_pool: transaction_pool.clone(), + task_manager: &mut task_manager, + config, + keystore: keystore_container.keystore(), + backend, + network: network.clone(), + sync_service: sync_service.clone(), + system_rpc_tx, + tx_handler_controller, + telemetry: telemetry.as_mut(), + })?; + + Ok(task_manager) +} + +/// Override manual sealing to handle creating non-empty blocks for interval sealing mode without nuisance warning logs +async fn run_seal_command( + ManualSealParams { + mut block_import, + mut env, + client, + pool, + mut commands_stream, + select_chain, + consensus_data_provider, + create_inherent_data_providers, + }: ManualSealParams, +) where + B: BlockT + 'static, + BI: BlockImport + Send + Sync + 'static, + C: HeaderBackend + Finalizer + ProvideRuntimeApi + 'static, + CB: ClientBackend + 'static, + E: Environment + 'static, + E::Proposer: Proposer, + CS: Stream::Hash>> + Unpin + 'static, + SC: SelectChain + 'static, + TP: TransactionPool, + CIDP: CreateInherentDataProviders, + P: parity_scale_codec::Encode + Send + Sync + 'static, +{ + while let Some(command) = commands_stream.next().await { + match command { + EngineCommand::SealNewBlock { create_empty, finalize, parent_hash, sender } => + // To keep the logs quieter, don't even attempt to create empty blocks unless there are transactions in the pool + if create_empty || pool.ready().count() > 0 { + sc_consensus_manual_seal::seal_block( + sc_consensus_manual_seal::SealBlockParams { + sender, + parent_hash, + finalize, + create_empty, + env: &mut env, + select_chain: &select_chain, + block_import: &mut block_import, + consensus_data_provider: consensus_data_provider.as_deref(), + pool: pool.clone(), + client: client.clone(), + create_inherent_data_providers: &create_inherent_data_providers, + }, + ) + .await; + }, + EngineCommand::FinalizeBlock { hash, sender, justification } => { + let justification = justification.map(|j| (MANUAL_SEAL_ENGINE_ID, j)); + finalize_block(FinalizeBlockParams { + hash, + sender, + justification, + finalizer: client.clone(), + _phantom: PhantomData, + }) + .await + }, + } + } +} diff --git a/node/service/src/chain_spec.rs b/node/service/src/chain_spec.rs new file mode 100644 index 0000000000..c65e87211b --- /dev/null +++ b/node/service/src/chain_spec.rs @@ -0,0 +1,74 @@ +#![allow(missing_docs)] +use common_primitives::node::{AccountId, Signature}; +use sc_chain_spec::{ChainSpecExtension, ChainSpecGroup}; +use sc_service::Properties; +use serde::{Deserialize, Serialize}; +pub use sp_consensus_aura::sr25519::AuthorityId as AuraId; +use sp_core::{Pair, Public}; +use sp_runtime::traits::{IdentifyAccount, Verify}; + +/// Dummy chain spec for building and checking +pub type DummyChainSpec = sc_service::GenericChainSpec; + +#[cfg(feature = "frequency")] +pub mod frequency; + +#[cfg(feature = "frequency-testnet")] +pub mod frequency_paseo; + +#[cfg(any(feature = "frequency-local", feature = "frequency-no-relay"))] +pub mod frequency_paseo_local; + +#[cfg(feature = "frequency-no-relay")] +pub mod frequency_dev; + +#[allow(clippy::expect_used)] +/// Helper function to generate a crypto pair from seed +pub fn get_public_from_seed(seed: &str) -> ::Public { + TPublic::Pair::from_string(&format!("//{}", seed), None) + .expect("static values are valid; qed") + .public() +} + +type AccountPublic = ::Signer; + +/// Generate collator keys from seed. +/// +/// This function's return type must always match the session keys of the chain in tuple format. +pub fn get_collator_keys_from_seed(seed: &str) -> AuraId { + get_public_from_seed::(seed) +} + +/// Helper function to generate an account ID from seed +pub fn get_account_id_from_seed(seed: &str) -> AccountId +where + AccountPublic: From<::Public>, +{ + AccountPublic::from(get_public_from_seed::(seed)).into_account() +} + +/// The extensions for the [`sc_service::ChainSpec`]. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ChainSpecGroup, ChainSpecExtension)] +#[serde(deny_unknown_fields)] +pub struct Extensions { + /// The relay chain of the Parachain. + pub relay_chain: String, + /// The id of the Parachain. + pub para_id: u32, +} + +impl Extensions { + /// Try to get the extension from the given `ChainSpec`. + pub fn try_get(chain_spec: &dyn sc_service::ChainSpec) -> Option<&Self> { + sc_chain_spec::get_extension(chain_spec.extensions()) + } +} + +pub fn get_properties(symbol: &str, decimals: u32, ss58format: u32) -> Properties { + let mut properties = Properties::new(); + properties.insert("tokenSymbol".into(), symbol.into()); + properties.insert("tokenDecimals".into(), decimals.into()); + properties.insert("ss58Format".into(), ss58format.into()); + + properties +} diff --git a/node/service/src/chain_spec/frequency.rs b/node/service/src/chain_spec/frequency.rs new file mode 100644 index 0000000000..660e2734e7 --- /dev/null +++ b/node/service/src/chain_spec/frequency.rs @@ -0,0 +1,44 @@ +#![allow(missing_docs)] +use super::Extensions; + +/// Specialized `ChainSpec` for the normal parachain runtime. +pub type ChainSpec = sc_service::GenericChainSpec; + +#[allow(clippy::unwrap_used)] +pub fn load_frequency_spec() -> ChainSpec { + ChainSpec::from_json_bytes(&include_bytes!("../../../../resources/frequency.raw.json")[..]) + .unwrap() +} + +#[cfg(feature = "runtime-benchmarks")] +#[allow(clippy::unwrap_used)] +pub fn benchmark_mainnet_config() -> ChainSpec { + use super::get_properties; + use common_runtime::constants::{Ss58Prefix, FREQUENCY_TOKEN, TOKEN_DECIMALS}; + use cumulus_primitives_core::ParaId; + use sc_service::ChainType; + use sc_telemetry::TelemetryEndpoints; + + let properties = + get_properties(FREQUENCY_TOKEN, TOKEN_DECIMALS as u32, Ss58Prefix::get().into()); + let para_id: ParaId = 2091.into(); + ChainSpec::builder( + frequency_runtime::wasm_binary_unwrap(), + Extensions { relay_chain: "polkadot".into(), para_id: para_id.into() }, + ).with_name( + "Frequency", + ).with_protocol_id( + "frequency", + ).with_properties( + properties, + ).with_chain_type( + ChainType::Live + ).with_telemetry_endpoints( + TelemetryEndpoints::new(vec![("wss://telemetry.polkadot.io/submit/".into(), 0), ("wss://telemetry.frequency.xyz/submit/".into(), 0)]).unwrap() + ).with_boot_nodes(vec![ + "/dns4/0.boot.frequency.xyz/tcp/30333/ws/p2p/12D3KooWBd4aEArNvXECtt2JHQACBdFmeafpyfre3q81iM1xCcpP".parse().unwrap(), + "/dns4/1.boot.frequency.xyz/tcp/30333/ws/p2p/12D3KooWCW8d7Yz2d3Jcb49rWcNppRNEs1K2NZitCpPtrHSQb6dw".parse().unwrap(), + ]) + .with_genesis_config_preset_name("frequency") + .build() +} diff --git a/node/service/src/chain_spec/frequency_dev.rs b/node/service/src/chain_spec/frequency_dev.rs new file mode 100644 index 0000000000..566f1afc3e --- /dev/null +++ b/node/service/src/chain_spec/frequency_dev.rs @@ -0,0 +1,30 @@ +#![allow(missing_docs)] +use common_runtime::constants::{FREQUENCY_LOCAL_TOKEN, TOKEN_DECIMALS}; +use frequency_runtime::Ss58Prefix; +use sc_service::ChainType; +/// Specialized `ChainSpec` for the normal parachain runtime. +pub type ChainSpec = sc_service::GenericChainSpec; + +use super::{get_properties, Extensions}; + +/// Generates the chain spec for a development (no relay) +pub fn development_config() -> ChainSpec { + // Give your base currency a unit name and decimal places + let properties = + get_properties(FREQUENCY_LOCAL_TOKEN, TOKEN_DECIMALS as u32, Ss58Prefix::get().into()); + + ChainSpec::builder( + frequency_runtime::wasm_binary_unwrap(), + Extensions { + relay_chain: "dev".into(), // You MUST set this to the correct network! + para_id: 1000, + }, + ) + .with_name("Frequency Development (No Relay)") + .with_id("dev") + .with_properties(properties) + .with_chain_type(ChainType::Development) + .with_protocol_id("dev") + .with_genesis_config_preset_name("development") + .build() +} diff --git a/node/service/src/chain_spec/frequency_paseo.rs b/node/service/src/chain_spec/frequency_paseo.rs new file mode 100644 index 0000000000..0b49b40e9b --- /dev/null +++ b/node/service/src/chain_spec/frequency_paseo.rs @@ -0,0 +1,27 @@ +#![allow(missing_docs)] +use polkadot_service::chain_spec::Extensions as RelayChainExtensions; + +use super::Extensions; + +/// Specialized `ChainSpec` for the normal parachain runtime. +pub type ChainSpec = sc_service::GenericChainSpec; + +// Generic chain spec, in case when we don't have the native runtime. +pub type RelayChainSpec = sc_service::GenericChainSpec; + +#[allow(clippy::unwrap_used)] +/// Generates the Frequency Paseo chain spec from the raw json +pub fn load_frequency_paseo_spec() -> ChainSpec { + ChainSpec::from_json_bytes( + &include_bytes!("../../../../resources/frequency-paseo.raw.json")[..], + ) + .unwrap() +} + +// TODO: Remove once on a Polkadot-SDK with Paseo +#[allow(clippy::unwrap_used)] +/// Generates the Paseo Relay chain spec from the json +pub fn load_paseo_spec() -> RelayChainSpec { + RelayChainSpec::from_json_bytes(&include_bytes!("../../../../resources/paseo.json")[..]) + .unwrap() +} diff --git a/node/service/src/chain_spec/frequency_paseo_local.rs b/node/service/src/chain_spec/frequency_paseo_local.rs new file mode 100644 index 0000000000..8c78ae001e --- /dev/null +++ b/node/service/src/chain_spec/frequency_paseo_local.rs @@ -0,0 +1,41 @@ +#![allow(missing_docs)] +use common_runtime::constants::{FREQUENCY_TESTNET_TOKEN, TOKEN_DECIMALS}; +use frequency_runtime::Ss58Prefix; +use polkadot_service::chain_spec::Extensions as RelayChainExtensions; +use sc_service::ChainType; + +use super::{get_properties, Extensions}; + +/// Specialized `ChainSpec` for the normal parachain runtime. +pub type ChainSpec = sc_service::GenericChainSpec; + +// Generic chain spec, in case when we don't have the native runtime. +pub type RelayChainSpec = sc_service::GenericChainSpec; + +/// Generates the Paseo-Local Relay chain spec from the json +pub fn load_paseo_local_spec() -> RelayChainSpec { + RelayChainSpec::from_json_bytes(&include_bytes!("../../../../resources/paseo-local.json")[..]) + .unwrap() +} + +/// Generates the chain spec for a local testnet +pub fn local_paseo_testnet_config() -> ChainSpec { + // Give your base currency a unit name and decimal places + let properties = + get_properties(FREQUENCY_TESTNET_TOKEN, TOKEN_DECIMALS as u32, Ss58Prefix::get().into()); + + ChainSpec::builder( + frequency_runtime::wasm_binary_unwrap(), + Extensions { + relay_chain: "paseo-local".into(), // You MUST set this to the correct network! + para_id: 2000, + }, + ) + .with_name("Frequency Local Testnet") + .with_id("frequency-local") + .with_protocol_id("frequency-paseo-local") + .with_properties(properties) + .with_chain_type(ChainType::Local) + .with_genesis_config_preset_name("frequency-local") + .build() +} diff --git a/node/service/src/common.rs b/node/service/src/common.rs new file mode 100644 index 0000000000..f1ba2ee445 --- /dev/null +++ b/node/service/src/common.rs @@ -0,0 +1,72 @@ +#![allow(missing_docs)] +use crate::service::ParachainClient; +use common_primitives::{node::Block, offchain::OcwCustomExt}; +use sc_client_api::Backend; +use sc_offchain::NetworkProvider; +use sc_service::{config::RpcEndpoint, TFullBackend, TaskManager}; +use sc_transaction_pool_api::OffchainTransactionPoolFactory; +use sp_keystore::KeystorePtr; +use std::{net::SocketAddr, sync::Arc}; + +const HTTP_PREFIX: &str = "http://"; + +/// Normalize and convert SocketAddr to string +pub fn listen_addrs_to_normalized_strings(addr: &Option>) -> Option>> { + match addr { + None => None, + Some(rpc_endpoints) => { + let endpoints = rpc_endpoints + .iter() + .map(|endpoint| { + let socket_addr = endpoint.listen_addr; + let mut address = match socket_addr { + SocketAddr::V4(v4) => v4.to_string(), + SocketAddr::V6(v6) => v6.to_string(), + }; + if !address.starts_with(HTTP_PREFIX) { + address = format!("{}{}", HTTP_PREFIX, address); + } + address.into_bytes() + }) + .filter(|addr| addr.len() > 0) + .collect(); + Some(endpoints) + }, + } +} +type ParachainBackend = TFullBackend; +#[allow(clippy::expect_used)] +pub fn start_offchain_workers( + client: &Arc, + parachain_config: &sc_service::Configuration, + keystore: Option, + backend: &Arc, + transaction_pool: Option>, + network_provider: Arc, + task_manager: &TaskManager, +) { + use futures::FutureExt; + let rpc_addresses = listen_addrs_to_normalized_strings(¶chain_config.rpc.addr) + .expect("config.rpc.addr has invalid input"); + let rpc_address = rpc_addresses.get(0).expect("no rpc addresses in config").clone(); + let is_validator = parachain_config.role.is_authority(); + let offchain_workers = sc_offchain::OffchainWorkers::new(sc_offchain::OffchainWorkerOptions { + runtime_api_provider: client.clone(), + is_validator, + keystore, + offchain_db: backend.offchain_storage(), + transaction_pool, + network_provider, + enable_http_requests: true, + custom_extensions: move |_hash| vec![Box::new(OcwCustomExt(rpc_address.clone())) as Box<_>], + }) + .expect("Could not create Offchain Worker"); + + // Spawn a task to handle off-chain notifications. + // This task is responsible for processing off-chain events or data for the blockchain. + task_manager.spawn_handle().spawn( + "offchain-workers-runner", + "offchain-work", + offchain_workers.run(client.clone(), task_manager.spawn_handle()).boxed(), + ); +} diff --git a/node/service/src/lib.rs b/node/service/src/lib.rs new file mode 100644 index 0000000000..d67b9e9b56 --- /dev/null +++ b/node/service/src/lib.rs @@ -0,0 +1,12 @@ +//! Frequency Client library. + +#![warn(missing_docs)] +#![warn(unused_extern_crates)] + +/// Block sealing +#[cfg(feature = "frequency-no-relay")] +pub mod block_sealing; +pub mod chain_spec; +pub mod common; +pub mod rpc; +pub mod service; diff --git a/node/service/src/rpc/frequency_rpc.rs b/node/service/src/rpc/frequency_rpc.rs new file mode 100644 index 0000000000..c8597323bc --- /dev/null +++ b/node/service/src/rpc/frequency_rpc.rs @@ -0,0 +1,140 @@ +// Strong Documentation Lints +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + missing_docs +)] + +use common_helpers::rpc::map_rpc_result; +use common_primitives::rpc::RpcEvent; +use jsonrpsee::{ + core::{async_trait, RpcResult}, + proc_macros::rpc, + types::error::ErrorObject, +}; +use parity_scale_codec::{Codec, Decode, Encode}; +use sc_transaction_pool_api::{InPoolTransaction, TransactionPool}; +use sp_api::ProvideRuntimeApi; +use sp_blockchain::HeaderBackend; +use sp_runtime::traits::{AtLeast32Bit, Block as BlockT, One}; +use std::sync::Arc; +use substrate_frame_rpc_system::AccountNonceApi; +use system_runtime_api::AdditionalRuntimeApi; + +/// This is an upper limit to restrict the number of returned nonce holes to eliminate a potential +/// attack vector +const MAX_RETURNED_MISSING_NONCE_SIZE: usize = 1000; +/// Frequency MSA Custom RPC API +#[rpc(client, server)] +pub trait FrequencyRpcApi { + /// gets the events for a block hash + #[method(name = "frequency_getEvents")] + fn get_events(&self, at: B::Hash) -> RpcResult>; + /// returns a list of missing nonce values from Future transaction pool. + #[method(name = "frequency_getMissingNonceValues")] + fn get_missing_nonce_values(&self, account: AccountId) -> RpcResult>; +} + +/// The client handler for the API used by Frequency Service RPC with `jsonrpsee` +pub struct FrequencyRpcHandler { + client: Arc, + pool: Arc

, + _marker: std::marker::PhantomData, +} + +impl FrequencyRpcHandler { + /// Create new instance with the given reference to the client. + pub fn new(client: Arc, pool: Arc

) -> Self { + Self { client, pool, _marker: Default::default() } + } +} + +#[async_trait] +impl FrequencyRpcApiServer + for FrequencyRpcHandler +where + Block: BlockT, + C: HeaderBackend, + C: Send + Sync + 'static, + C: ProvideRuntimeApi, + C::Api: AdditionalRuntimeApi, + C::Api: AccountNonceApi, + P: TransactionPool + 'static, + AccountId: Clone + Codec, + Nonce: Clone + Encode + Decode + AtLeast32Bit + 'static, +{ + fn get_events(&self, at: ::Hash) -> RpcResult> { + let api = self.client.runtime_api(); + map_rpc_result(api.get_events(at)) + } + + fn get_missing_nonce_values(&self, account: AccountId) -> RpcResult> { + let api = self.client.runtime_api(); + let best = self.client.info().best_hash; + + let nonce = api + .account_nonce(best, account.clone()) + .map_err(|e| ErrorObject::owned(1, "Unable to query nonce.", Some(e.to_string())))?; + Ok(get_missing_nonces(&*self.pool, account, nonce)) + } +} + +/// Finds any missing nonce values inside Future pool and return them as result +fn get_missing_nonces(pool: &P, account: AccountId, nonce: Nonce) -> Vec +where + P: TransactionPool, + AccountId: Clone + Encode, + Nonce: Clone + Encode + Decode + AtLeast32Bit + 'static, +{ + // Now we need to query the transaction pool + // and find transactions originating from the same sender. + // Since extrinsics are opaque to us, we look for them using + // `provides` tag. And increment the nonce if we find a transaction + // that matches the current one. + let mut current_nonce = nonce.clone(); + let encoded_account = account.clone().encode(); + let mut current_tag = (account.clone(), nonce).encode(); + for tx in pool.ready() { + // since transactions in `ready()` need to be ordered by nonce + // it's fine to continue with current iterator. + if tx.provides().get(0) == Some(¤t_tag) { + current_nonce += One::one(); + current_tag = (account.clone(), current_nonce.clone()).encode(); + } + } + + let mut result = vec![]; + let mut my_in_future: Vec<_> = pool + .futures() + .into_iter() + .filter_map(|x| match x.provides().get(0) { + // filtering transactions by account + Some(tag) if tag.starts_with(&encoded_account) => { + if let Ok(nonce) = Nonce::decode(&mut &tag[encoded_account.len()..]) { + return Some(nonce) + } + None + }, + _ => None, + }) + .collect(); + my_in_future.sort(); + + for future_nonce in my_in_future { + while current_nonce < future_nonce { + result.push(current_nonce.clone()); + current_nonce += One::one(); + + // short circuit if we reached the limit + if result.len() == MAX_RETURNED_MISSING_NONCE_SIZE { + return result + } + } + + // progress the current_nonce + current_nonce += One::one(); + } + + result +} diff --git a/node/service/src/rpc/mod.rs b/node/service/src/rpc/mod.rs new file mode 100644 index 0000000000..3b59361784 --- /dev/null +++ b/node/service/src/rpc/mod.rs @@ -0,0 +1,95 @@ +//! A collection of node-specific RPC methods. +//! Substrate provides the `sc-rpc` crate, which defines the core RPC layer +//! used by Substrate nodes. This file extends those RPC definitions with +//! capabilities that are specific to this project's runtime configuration. + +#![warn(missing_docs)] + +use std::sync::Arc; + +use common_primitives::node::{AccountId, Balance, Block, Hash, Index as Nonce}; + +use sc_client_api::{AuxStore, StorageProvider}; +use sc_client_db::Backend as DbBackend; +use sc_consensus_manual_seal::rpc::{EngineCommand, ManualSeal, ManualSealApiServer}; +pub use sc_rpc::{DenyUnsafe, SubscriptionTaskExecutor}; +use sc_transaction_pool_api::TransactionPool; +use sp_api::ProvideRuntimeApi; +use sp_block_builder::BlockBuilder; +use sp_blockchain::{Error as BlockChainError, HeaderBackend, HeaderMetadata}; + +mod frequency_rpc; + +/// A type representing all RPC extensions. +pub type RpcExtension = jsonrpsee::RpcModule<()>; + +/// Full client dependencies +pub struct FullDeps { + /// The client instance to use. + pub client: Arc, + /// Transaction pool instance. + pub pool: Arc

, + /// Manual seal command sink + pub command_sink: Option>>, +} + +/// Instantiate all RPC extensions. +pub fn create_full( + deps: FullDeps, + offchain: Option, +) -> Result> +where + C: ProvideRuntimeApi + + HeaderBackend + + AuxStore + + HeaderMetadata + + StorageProvider> + + Send + + Sync + + 'static, + C::Api: pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi, + C::Api: pallet_frequency_tx_payment_rpc::CapacityTransactionPaymentRuntimeApi, + C::Api: substrate_frame_rpc_system::AccountNonceApi, + C::Api: BlockBuilder, + C::Api: pallet_messages_runtime_api::MessagesRuntimeApi, + C::Api: pallet_schemas_runtime_api::SchemasRuntimeApi, + C::Api: system_runtime_api::AdditionalRuntimeApi, + C::Api: pallet_msa_runtime_api::MsaRuntimeApi, + C::Api: pallet_stateful_storage_runtime_api::StatefulStorageRuntimeApi, + C::Api: pallet_handles_runtime_api::HandlesRuntimeApi, + OffchainDB: sp_core::offchain::OffchainStorage + 'static, + P: TransactionPool + Sync + Send + 'static, +{ + use pallet_transaction_payment_rpc::{TransactionPayment, TransactionPaymentApiServer}; + use substrate_frame_rpc_system::{System, SystemApiServer}; + + // Frequency RPCs + use frequency_rpc::{FrequencyRpcApiServer, FrequencyRpcHandler}; + use pallet_frequency_tx_payment_rpc::{CapacityPaymentApiServer, CapacityPaymentHandler}; + use pallet_handles_rpc::{HandlesApiServer, HandlesHandler}; + use pallet_messages_rpc::{MessagesApiServer, MessagesHandler}; + use pallet_msa_rpc::{MsaApiServer, MsaHandler}; + use pallet_schemas_rpc::{SchemasApiServer, SchemasHandler}; + use pallet_stateful_storage_rpc::{StatefulStorageApiServer, StatefulStorageHandler}; + + let mut module = RpcExtension::new(()); + let FullDeps { client, pool, command_sink } = deps; + + module.merge(System::new(client.clone(), pool.clone()).into_rpc())?; + module.merge(TransactionPayment::new(client.clone()).into_rpc())?; + module.merge(MessagesHandler::new(client.clone()).into_rpc())?; + module.merge(SchemasHandler::new(client.clone()).into_rpc())?; + module.merge(MsaHandler::new(client.clone(), offchain).into_rpc())?; + module.merge(StatefulStorageHandler::new(client.clone()).into_rpc())?; + module.merge(HandlesHandler::new(client.clone()).into_rpc())?; + module.merge(CapacityPaymentHandler::new(client.clone()).into_rpc())?; + module.merge(FrequencyRpcHandler::new(client, pool).into_rpc())?; + if let Some(command_sink) = command_sink { + module.merge( + // We provide the rpc handler with the sending end of the channel to allow the rpc + // send EngineCommands to the background block authorship task. + ManualSeal::new(command_sink).into_rpc(), + )?; + } + Ok(module) +} diff --git a/node/service/src/service.rs b/node/service/src/service.rs new file mode 100644 index 0000000000..6aa4dd7ea6 --- /dev/null +++ b/node/service/src/service.rs @@ -0,0 +1,474 @@ +#![allow(unused_imports)] +//! Service and ServiceFactory implementation. Specialized wrapper over substrate service. + +// Originally from https://github.com/paritytech/cumulus/blob/master/parachain-template/node/src/service.rs + +// std +use cumulus_client_cli::CollatorOptions; +use frequency_runtime::RuntimeApi; +use sc_client_api::Backend; +use std::{ptr::addr_eq, sync::Arc, time::Duration}; + +// RPC +use common_primitives::node::{AccountId, Balance, Block, Hash, Index as Nonce}; +use jsonrpsee::RpcModule; +use substrate_prometheus_endpoint::Registry; + +// Cumulus Imports +use cumulus_client_collator::service::CollatorService; +use cumulus_client_consensus_aura::{AuraConsensus, SlotProportion}; +use cumulus_client_consensus_common::{ + ParachainBlockImport as TParachainBlockImport, ParachainConsensus, +}; +use cumulus_client_consensus_proposer::Proposer; +use cumulus_client_network::RequireSecondedInBlockAnnounce; +use cumulus_client_service::{ + build_network, build_relay_chain_interface, prepare_node_config, start_relay_chain_tasks, + BuildNetworkParams, CollatorSybilResistance, DARecoveryProfile, StartCollatorParams, + StartFullNodeParams, StartRelayChainTasksParams, +}; +use cumulus_primitives_core::{ + relay_chain::{CollatorPair, ValidationCode}, + ParaId, +}; +use cumulus_relay_chain_interface::{OverseerHandle, RelayChainError, RelayChainInterface}; +use sc_service::TransactionPoolOptions; + +// Substrate Imports +use frame_benchmarking_cli::SUBSTRATE_REFERENCE_HARDWARE; +use futures::FutureExt; +use sc_consensus::{ImportQueue, LongestChain}; +use sc_executor::{HeapAllocStrategy, WasmExecutor, DEFAULT_HEAP_ALLOC_STRATEGY}; + +use sc_network::{config::FullNetworkConfiguration, NetworkBackend, NetworkBlock, NetworkService}; +use sc_network_sync::SyncingService; +use sc_service::{Configuration, PartialComponents, TFullBackend, TFullClient, TaskManager}; +use sc_telemetry::{Telemetry, TelemetryHandle, TelemetryWorker, TelemetryWorkerHandle}; +use sc_transaction_pool_api::OffchainTransactionPoolFactory; +use sp_blockchain::HeaderBackend; +use sp_keystore::KeystorePtr; + +use common_runtime::prod_or_testnet_or_local; + +type FullBackend = TFullBackend; + +type MaybeFullSelectChain = Option>; + +#[cfg(not(feature = "runtime-benchmarks"))] +type HostFunctions = ( + cumulus_client_service::ParachainHostFunctions, + common_primitives::offchain::custom::HostFunctions, +); + +#[cfg(feature = "runtime-benchmarks")] +type HostFunctions = ( + cumulus_client_service::ParachainHostFunctions, + frame_benchmarking::benchmarking::HostFunctions, + common_primitives::offchain::custom::HostFunctions, +); + +use crate::common::start_offchain_workers; +pub use frequency_runtime; + +type ParachainExecutor = WasmExecutor; + +/// Frequency parachain +pub type ParachainClient = TFullClient; + +type ParachainBackend = TFullBackend; + +type ParachainBlockImport = TParachainBlockImport, ParachainBackend>; + +/// Starts a `ServiceBuilder` for a full service. +/// +/// Use this macro if you don't actually need the full service, but just the builder in order to +/// be able to perform chain operations. +#[allow(deprecated)] +pub fn new_partial( + config: &Configuration, + instant_sealing: bool, + override_pool_config: Option, +) -> Result< + PartialComponents< + ParachainClient, + ParachainBackend, + MaybeFullSelectChain, + sc_consensus::DefaultImportQueue, + sc_transaction_pool::TransactionPoolHandle, + (ParachainBlockImport, Option, Option), + >, + sc_service::Error, +> { + let telemetry = config + .telemetry_endpoints + .clone() + .filter(|x| !x.is_empty()) + .map(|endpoints| -> Result<_, sc_telemetry::Error> { + let worker = TelemetryWorker::new(16)?; + let telemetry = worker.handle().new_telemetry(endpoints); + Ok((worker, telemetry)) + }) + .transpose()?; + + let heap_pages = config + .executor + .default_heap_pages + .map_or(DEFAULT_HEAP_ALLOC_STRATEGY, |h| HeapAllocStrategy::Static { extra_pages: h as _ }); + + let executor = ParachainExecutor::builder() + .with_execution_method(config.executor.wasm_method) + .with_onchain_heap_alloc_strategy(heap_pages) + .with_offchain_heap_alloc_strategy(heap_pages) + .with_max_runtime_instances(config.executor.max_runtime_instances) + .with_runtime_cache_size(config.executor.runtime_cache_size) + .build(); + + let (client, backend, keystore_container, task_manager) = + sc_service::new_full_parts_record_import::( + config, + telemetry.as_ref().map(|(_, telemetry)| telemetry.handle()), + executor, + true, + )?; + let client = Arc::new(client); + + let telemetry_worker_handle = telemetry.as_ref().map(|(worker, _)| worker.handle()); + + let telemetry = telemetry.map(|(worker, telemetry)| { + task_manager.spawn_handle().spawn("telemetry", None, worker.run()); + telemetry + }); + + let transaction_pool_option = override_pool_config.unwrap_or(config.transaction_pool.clone()); + + // See https://github.com/paritytech/polkadot-sdk/pull/4639 for how to enable the fork-aware pool. + let transaction_pool = Arc::from( + sc_transaction_pool::Builder::new( + task_manager.spawn_essential_handle(), + client.clone(), + config.role.is_authority().into(), + ) + .with_options(transaction_pool_option) + .with_prometheus(config.prometheus_registry()) + .build(), + ); + + let block_import = ParachainBlockImport::new(client.clone(), backend.clone()); + + #[cfg(feature = "frequency-no-relay")] + let import_queue = sc_consensus_manual_seal::import_queue( + Box::new(client.clone()), + &task_manager.spawn_essential_handle(), + config.prometheus_registry(), + ); + + #[cfg(not(feature = "frequency-no-relay"))] + let import_queue = build_import_queue( + client.clone(), + block_import.clone(), + config, + telemetry.as_ref().map(|telemetry| telemetry.handle()), + &task_manager, + ); + + let select_chain = + if instant_sealing { Some(LongestChain::new(backend.clone())) } else { None }; + + let params = PartialComponents { + backend, + client, + import_queue, + keystore_container, + task_manager, + transaction_pool, + select_chain, + other: (block_import, telemetry, telemetry_worker_handle), + }; + + Ok(params) +} + +/// Start a node with the given parachain `Configuration` and relay chain `Configuration`. +/// +/// This is the actual implementation that is abstract over the executor and the runtime api. +#[allow(clippy::expect_used)] +#[sc_tracing::logging::prefix_logs_with("Parachain")] +#[cfg(any(not(feature = "frequency-no-relay"), feature = "frequency-lint-check"))] +pub async fn start_parachain_node( + parachain_config: Configuration, + polkadot_config: Configuration, + collator_options: CollatorOptions, + para_id: ParaId, + hwbench: Option, + override_pool_config: Option, +) -> sc_service::error::Result<(TaskManager, Arc)> { + use crate::common::listen_addrs_to_normalized_strings; + use common_primitives::offchain::OcwCustomExt; + use sc_client_db::Backend; + + let parachain_config = prepare_node_config(parachain_config); + + let params = new_partial(¶chain_config, false, override_pool_config)?; + let (block_import, mut telemetry, telemetry_worker_handle) = params.other; + + let prometheus_registry = parachain_config.prometheus_registry().cloned(); + let net_config = FullNetworkConfiguration::<_, _, sc_network::NetworkWorker>::new( + ¶chain_config.network, + prometheus_registry, + ); + + let client = params.client.clone(); + let backend = params.backend.clone(); + let mut task_manager = params.task_manager; + + let (relay_chain_interface, collator_key) = build_relay_chain_interface( + polkadot_config, + ¶chain_config, + telemetry_worker_handle, + &mut task_manager, + collator_options.clone(), + hwbench.clone(), + ) + .await + .map_err(|e| sc_service::Error::Application(Box::new(e) as Box<_>))?; + + let validator = parachain_config.role.is_authority(); + let prometheus_registry = parachain_config.prometheus_registry().cloned(); + let transaction_pool = params.transaction_pool.clone(); + let import_queue_service = params.import_queue.service(); + + // NOTE: because we use Aura here explicitly, we can use `CollatorSybilResistance::Resistant` + // when starting the network. + let (network, system_rpc_tx, tx_handler_controller, sync_service) = + build_network(BuildNetworkParams { + parachain_config: ¶chain_config, + net_config, + client: client.clone(), + transaction_pool: transaction_pool.clone(), + para_id, + spawn_handle: task_manager.spawn_handle(), + relay_chain_interface: relay_chain_interface.clone(), + import_queue: params.import_queue, + sybil_resistance_level: CollatorSybilResistance::Resistant, + }) + .await?; + + // Start off-chain workers if enabled + if parachain_config.offchain_worker.enabled { + log::info!("OFFCHAIN WORKER is Enabled!"); + start_offchain_workers( + &client, + ¶chain_config, + Some(params.keystore_container.keystore()), + &backend, + Some(OffchainTransactionPoolFactory::new(transaction_pool.clone())), + Arc::new(network.clone()), + &task_manager, + ); + } + + let rpc_builder = { + let client = client.clone(); + let transaction_pool = transaction_pool.clone(); + + let backend = match parachain_config.offchain_worker.enabled { + true => backend.offchain_storage(), + false => None, + }; + + Box::new(move |_| { + let deps = crate::rpc::FullDeps { + client: client.clone(), + pool: transaction_pool.clone(), + command_sink: None, + }; + + crate::rpc::create_full(deps, backend.clone()).map_err(Into::into) + }) + }; + + sc_service::spawn_tasks(sc_service::SpawnTasksParams { + rpc_builder, + client: client.clone(), + transaction_pool: transaction_pool.clone(), + task_manager: &mut task_manager, + config: parachain_config, + keystore: params.keystore_container.keystore(), + backend: backend.clone(), + network: network.clone(), + sync_service: sync_service.clone(), + system_rpc_tx, + tx_handler_controller, + telemetry: telemetry.as_mut(), + })?; + + if let Some(hwbench) = hwbench { + sc_sysinfo::print_hwbench(&hwbench); + let is_rc_authority = false; + // Here you can check whether the hardware meets your chains' requirements. Putting a link + // in there and swapping out the requirements for your own are probably a good idea. The + // requirements for a para-chain are dictated by its relay-chain. + if validator && + SUBSTRATE_REFERENCE_HARDWARE.check_hardware(&hwbench, is_rc_authority).is_err() + { + log::warn!( + "⚠️ The hardware does not meet the minimal requirements for role 'Authority'." + ); + } + + if let Some(ref mut telemetry) = telemetry { + let telemetry_handle = telemetry.handle(); + task_manager.spawn_handle().spawn( + "telemetry_hwbench", + None, + sc_sysinfo::initialize_hwbench_telemetry(telemetry_handle, hwbench), + ); + } + } + + let announce_block = { + let sync_service = sync_service.clone(); + Arc::new(move |hash, data| sync_service.announce_block(hash, data)) + }; + + let relay_chain_slot_duration = Duration::from_secs(6); + + let overseer_handle = relay_chain_interface + .overseer_handle() + .map_err(|e| sc_service::Error::Application(Box::new(e)))?; + + start_relay_chain_tasks(StartRelayChainTasksParams { + client: client.clone(), + announce_block: announce_block.clone(), + para_id, + relay_chain_interface: relay_chain_interface.clone(), + task_manager: &mut task_manager, + da_recovery_profile: if validator { + DARecoveryProfile::Collator + } else { + DARecoveryProfile::FullNode + }, + import_queue: import_queue_service, + relay_chain_slot_duration, + recovery_handle: Box::new(overseer_handle.clone()), + sync_service: sync_service.clone(), + })?; + + if validator { + start_consensus( + client.clone(), + backend.clone(), + block_import, + prometheus_registry.as_ref(), + telemetry.as_ref().map(|t| t.handle()), + &task_manager, + relay_chain_interface.clone(), + transaction_pool, + sync_service.clone(), + params.keystore_container.keystore(), + relay_chain_slot_duration, + para_id, + collator_key.expect("Command line arguments do not allow this. qed"), + overseer_handle, + announce_block, + )?; + } + + Ok((task_manager, client)) +} + +/// Build the import queue for the parachain runtime. +#[cfg(not(feature = "frequency-no-relay"))] +/// Build the import queue for the parachain runtime. +fn build_import_queue( + client: Arc, + block_import: ParachainBlockImport, + config: &Configuration, + telemetry: Option, + task_manager: &TaskManager, +) -> sc_consensus::DefaultImportQueue { + cumulus_client_consensus_aura::equivocation_import_queue::fully_verifying_import_queue::< + sp_consensus_aura::sr25519::AuthorityPair, + _, + _, + _, + _, + >( + client, + block_import, + move |_, _| async move { + let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); + Ok(timestamp) + }, + &task_manager.spawn_essential_handle(), + config.prometheus_registry(), + telemetry, + ) +} + +#[cfg(any(not(feature = "frequency-no-relay"), feature = "frequency-lint-check"))] +fn start_consensus( + client: Arc, + backend: Arc, + block_import: ParachainBlockImport, + prometheus_registry: Option<&Registry>, + telemetry: Option, + task_manager: &TaskManager, + relay_chain_interface: Arc, + transaction_pool: Arc>, + _sync_oracle: Arc>, + keystore: KeystorePtr, + relay_chain_slot_duration: Duration, + para_id: ParaId, + collator_key: CollatorPair, + overseer_handle: OverseerHandle, + announce_block: Arc>) + Send + Sync>, +) -> Result<(), sc_service::Error> { + use cumulus_client_consensus_aura::collators::lookahead::{self as aura, Params as AuraParams}; + + let proposer_factory = sc_basic_authorship::ProposerFactory::with_proof_recording( + task_manager.spawn_handle(), + client.clone(), + transaction_pool, + prometheus_registry, + telemetry.clone(), + ); + + let proposer = Proposer::new(proposer_factory); + + let collator_service = CollatorService::new( + client.clone(), + Arc::new(task_manager.spawn_handle()), + announce_block, + client.clone(), + ); + + let params = AuraParams { + create_inherent_data_providers: move |_, ()| async move { Ok(()) }, + block_import, + para_client: client.clone(), + para_backend: backend.clone(), + relay_client: relay_chain_interface, + code_hash_provider: move |block_hash| { + client.code_at(block_hash).ok().map(|c| ValidationCode::from(c).hash()) + }, + keystore, + collator_key, + para_id, + overseer_handle, + relay_chain_slot_duration, + proposer, + collator_service, + authoring_duration: Duration::from_millis(prod_or_testnet_or_local!(500, 2000, 2000)), + reinitialize: false, + max_pov_percentage: None, // default 50% + }; + + let fut = aura::run::( + params, + ); + + task_manager.spawn_essential_handle().spawn("aura", None, fut); + + Ok(()) +} diff --git a/node/src/main.rs b/node/src/main.rs new file mode 100644 index 0000000000..4d7c796d7e --- /dev/null +++ b/node/src/main.rs @@ -0,0 +1,7 @@ +//! Substrate Parachain Node Template CLI + +#![warn(missing_docs)] + +fn main() -> frequency_cli::Result<()> { + frequency_cli::run() +} diff --git a/pallets/README.md b/pallets/README.md new file mode 100644 index 0000000000..80759e3843 --- /dev/null +++ b/pallets/README.md @@ -0,0 +1,46 @@ +# Creating New Pallets + +## Pallet Documentation Template + +- The pallet should have a `README.md` file in the root. See `README.template.md` for a template. +- The Readme file should strictly follow the standard as the contents may be used elsewhere. +- The Readme file _must only_ use full links so the links work where ever the content is used. +- Any additional technical notes for Frequency developers may be placed in the docs after the Readme is included. + +The standard documentation header for `lib.rs`: + +```rust +//! Super short description +//! +//! ## Quick Links +//! - [Configuration: `Config`](Config) +//! - [Extrinsics: `Call`](Call) +//! - [Runtime API: `PALLETRuntimeApi`](../pallet_PALLET_runtime_api/trait.PALLETRuntimeApi.html) +//! - [Custom RPC API: `PALLETApiServer`](../pallet_PALLET_rpc/trait.PALLETApiServer.html) +//! - [Event Enum: `Event`](Event) +//! - [Error Enum: `Error`](Error) +#![doc = include_str!("../README.md")] +//! Optional additional Rust developer documentation +``` + +Feel free to add additional Rust developer documentation after the Readme. + +## Add Documentation Lints + +In these files: + +- `src/lib.rs` +- `src/runtime-api/src/lib.rs` +- `src/rpc/src/lib.rs` + +Add these lines: + +```rust +// Strong Documentation Lints +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + missing_docs +)] +``` diff --git a/pallets/README.template.md b/pallets/README.template.md new file mode 100644 index 0000000000..9fa6e0ebda --- /dev/null +++ b/pallets/README.template.md @@ -0,0 +1,49 @@ +# {Name} Pallet + +{Short description of the pallet} + +## Summary + +{What does this pallet do?} + +### {Key Concept} + +{Description} + +### Actions + +The {Name} pallet provides for: + +- {Feature} +- {Feature} +- {Feature} + +## Interactions + +### Extrinsics + +| Name/Description | Caller | Payment | Key Events | Runtime Added | +| -------------------------------- | ------------- | ------- | ------------------------------------------------------------------------------------------------------------- | ------------- | +| `{extrinsic}`
{Description} | Token Account | Tokens | [`{Event}`](https://frequency-chain.github.io/frequency/{pallet_name}/pallet/enum.Event.html#variant.{Event}) | 1 | + +See [Rust Docs](https://frequency-chain.github.io/frequency/{pallet_name}/pallet/struct.Pallet.html) for more details. + +### State Queries + +| Name | Description | Query | Runtime Added | +| --------- | ------------------- | ------------------------ | ------------- | +| {Query 1} | {Query Description} | `{queryCallInCamelCase}` | 1 | + +See the [Rust Docs](https://frequency-chain.github.io/frequency/{pallet_name}/pallet/storage_types/index.html) for additional state queries and details. + +### RPCs + +Note: May be restricted based on node settings and configuration. + +| Name | Description | Call | Node Version | +| ------- | ----------------- | ---------------------------------------------------------------------------------------------------- | ------------ | +| {RPC 1} | {RPC Description} | [`checkDelegations`]({link to the ApiServer method on https://frequency-chain.github.io/frequency/}) | v1.0.0+ | + +\* Must be enabled with off-chain indexing + +See [Rust Docs]({link to the ApiServer on https://frequency-chain.github.io/frequency/}) for more details. diff --git a/pallets/capacity/Cargo.toml b/pallets/capacity/Cargo.toml new file mode 100644 index 0000000000..13d40cae21 --- /dev/null +++ b/pallets/capacity/Cargo.toml @@ -0,0 +1,58 @@ +[package] +authors = ["Frequency"] +description = "Pallet for Capacity" +edition = "2021" +homepage = "https://frequency.xyz" +license = "Apache-2.0" +name = "pallet-capacity" +publish = false +repository = "https://github.com/frequency-chain/frequency/" +version = "0.0.0" + + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[dependencies] +parity-scale-codec = { workspace = true, features = ["derive"] } +common-primitives = { default-features = false, path = "../../common/primitives" } +frame-benchmarking = { workspace = true, optional = true } +frame-support = { workspace = true } +frame-system = { workspace = true } +scale-info = { workspace = true, features = ["derive"] } +log = { workspace = true, default-features = false } +sp-core = { workspace = true } +sp-io = { workspace = true } +sp-runtime = { workspace = true } + +[dev-dependencies] +common-runtime = { path = '../../runtime/common', default-features = false } +pallet-balances = { workspace = true } +pallet-msa = { path = '../msa' } + +[features] +default = ["std"] +runtime-benchmarks = [ + "frame-benchmarking/runtime-benchmarks", + "common-primitives/runtime-benchmarks", + "common-runtime/runtime-benchmarks", + "pallet-msa/runtime-benchmarks", +] +std = [ + "parity-scale-codec/std", + "scale-info/std", + "frame-support/std", + "frame-system/std", + "frame-benchmarking/std", + "sp-runtime/std", + "sp-core/std", + "common-primitives/std", + "common-runtime/std", + "log/std", + "sp-io/std", +] +try-runtime = ["frame-support/try-runtime"] +test = [] + +[lints] +workspace = true diff --git a/pallets/capacity/README.md b/pallets/capacity/README.md new file mode 100644 index 0000000000..3e7fc3a27f --- /dev/null +++ b/pallets/capacity/README.md @@ -0,0 +1,84 @@ +# Capacity Pallet + +The Capacity Pallet manages the staking and balances for Capacity, an alternative payment system on Frequency. + +## Summary + +Capacity is an alternative to paying with tokens for a limited set of calls. +These Capacity eligible extrinsics are noted in each pallet's documentation with "Capacity" in the Payment column of the extrinsics section. +Tokens can be staked to generate Capacity for a targeted Provider. +The generated Capacity renews each [Epoch](#capacity-epoch). +[Learn more about Capacity](https://docs.frequency.xyz/Tokenomics/ProviderIncentives.html#capacity-model). + +### Staking & Unstaking +Currently, the token to Capacity ratio is 50:1. +For example, for a 5 token stake, a Provider would receive 0.1 Capacity. +Staking and unstaking affect available Capacity immediately. + +### Capacity Epoch + +A Capacity Epoch is a period consisting of a specific number of blocks, during which a Provider's utilization of network Capacity is capped at the amount of generated Capacity targeted to that Provider. +At the start of each new Epoch, the available Capacity is renewed for each Provider, regardless of how much they consumed in the prior Epoch. +The duration of a Capacity Epoch is determined by Governance, and is currently set to 7200 blocks. +With the current average block time of approximately 12 seconds, one Capacity Epoch lasts around 24 hours on Mainnet. + +### Thaw Period + +After unstaking, the tokens will still be frozen for a set amount of time before they are unencumbered and able to be transferred. +The `UnstakingThawPeriod` constant defines the number of Epochs that must pass before the tokens may be reclaimed for any use via `withdrawUnstaked()`. +Currently it is set to 30 Epochs or ~30 days after unstaking. + +### Actions + +The Capacity Pallet provides for: + +- Staking to receive Capacity +- Unstaking & Thaw Period +- Capacity Epoch management + +## Interactions + +### Extrinsics + +| Name/Description | Caller | Payment | Key Events | Runtime Added | +|----------------------------------------------------------------------------------------------------------------------| ------------- | ------- |-------------------------------------------------------------------------------------------------------------------------------------------| ------------- | +| `change_staking_target`
Change the target of a stake from one Provider to the other. | Token Account | Tokens | [`StakingTargetChanged`](https://frequency-chain.github.io/frequency/pallet_capacity/pallet/enum.Event.html#variant.StakingTargetChanged) | 1 | +| `claim_staking_rewards`
Mint and pay out eligible staking rewards from Provider Boosting. | Token Account | Tokens | [`ProviderBoostRewardClaimed`](https://frequency-chain.github.io/frequency/pallet_capacity/pallet/enum.Event.html#variant.ProviderBoostRewardClaimed) | 1 | +| `provider_boost`
Lock tokens to grant Capacity to a Provider and earn token Rewards | Token Account | Tokens | [`ProviderBoosted`](https://frequency-chain.github.io/frequency/pallet_capacity/pallet/enum.Event.html#variant.Staked) | 1 | +| `stake`
Lock tokens to grant Capacity to a Provider | Token Account | Tokens | [`Staked`](https://frequency-chain.github.io/frequency/pallet_capacity/pallet/enum.Event.html#variant.Staked) | 1 | +| `unstake`
Begin the process of unlocking tokens by unstaking currently staked tokens | Token Account | Tokens | [`UnStaked`](https://frequency-chain.github.io/frequency/pallet_capacity/pallet/enum.Event.html#variant.UnStaked) | 1 | +| `withdraw_unstaked`
Complete the process of unlocking tokens staked by releasing locks on expired unlock chunks | Token Account | Tokens | [`StakeWithdrawn`](https://frequency-chain.github.io/frequency/pallet_capacity/pallet/enum.Event.html#variant.StakeWithdrawn) | 1 | + +See [Rust Docs](https://frequency-chain.github.io/frequency/pallet_capacity/pallet/struct.Pallet.html) for more details. + +### State Queries + +| Name | Description | Query | Runtime Added | +|----------------------------------|---------------------------------------------------------------------------------------------------|-----------------------------|---------------| +| Get Capacity Ledger | Returns the Capacity balance details for a Provider's MSA Id | `capacityLedger` | 1 | +| Get Current Epoch | Returns the current Capacity Epoch number | `currentEpoch` | 1 | +| Get Current Epoch Info | Returns information about the current Capacity Epoch such as the starting block number | `currentEpochInfo` | 1 | +| Current Era Info | Returns the index of the current era and the block when it started | `currentEraInfo` | 1 | +| Current Era Provider Boost Total | Returns the total amount of token staked this Reward Era, as of the current block | `currentProviderBoostTotal` | 1 | +| Provider Boost Histories | Returns the ProviderBoostHistory stored for the provided AccountId | `providerBoostHistories` | 1 | +| Provider Boost Reward Pool | Returns the Provider Boost Reward Pool Chunk at the given index | `providerBoostRewardBools` | 1 | +| Retargets | Returns the count of retargets and what era was the last retarget, for the provided AccountId. | `retargets` | 1 | +| Get Staking Account Ledger | Returns information about an account's current staking details | `stakingAccountLedger` | 1 | +| Staking Target Ledger | Returns information about an account's current staking details for a specific target Provider MSA Id | `stakingTargetLedger` | 1 | +| Get Unstake Information | Returns the information about an account's current unstaking details and the unlocking chunks | `unstakeUnlocks` | 1 | + +### RPCs +Custom RPCs are not enabled for this pallet. The following RuntimeAPI functions may be accessed by making a state call, for example: +```javascript + const encodedAddr = api.registry.createType('AccountId32', booster.address); // where booster is a polkadot/keyring Keypair type + let result = await api.rcp.state.call('CapacityRuntimeApi_list_unclaimed_rewards', encodedAddr); + const decodedResult: Vec = api.registry.createType('Vec', result); +``` + +| Name | Description | Query | Runtime Added | +|------------------------|---------------------------------------------------------------------|---------------------------------------------|---------------| +| List unclaimed rewards | Returns a list of `UnclaimedRewardInfo` for the provided `AccountId`. | `CapacityRuntimeApi_list_unclaimed_rewards` | 1 | + + + +See the [Rust Docs](https://frequency-chain.github.io/frequency/pallet_capacity/pallet/storage_types/index.html) for additional state queries and details. diff --git a/pallets/capacity/src/benchmarking.rs b/pallets/capacity/src/benchmarking.rs new file mode 100644 index 0000000000..0629c16793 --- /dev/null +++ b/pallets/capacity/src/benchmarking.rs @@ -0,0 +1,340 @@ +use super::*; +use crate::Pallet as Capacity; + +use crate::StakingType::*; +use frame_benchmarking::{ + v1::{account, whitelist_account, BenchmarkError}, + v2::*, +}; +use frame_support::{assert_ok, BoundedVec}; +use frame_system::{pallet_prelude::BlockNumberFor, RawOrigin}; +use parity_scale_codec::alloc::vec::Vec; +const SEED: u32 = 0; +const REWARD_POOL_TOTAL: u32 = 2_000_000; + +fn assert_last_event(generic_event: ::RuntimeEvent) { + frame_system::Pallet::::assert_last_event(generic_event.into()); +} + +#[allow(clippy::expect_used)] +pub fn register_provider(target_id: MessageSourceId, name: &'static str) { + #[allow(clippy::useless_conversion)] + let name = Vec::from(name).try_into().expect("error"); + assert_ok!(T::BenchmarkHelper::create(target_id, name)); +} +pub fn create_funded_account( + string: &'static str, + n: u32, + balance_factor: u32, +) -> T::AccountId { + let user = account(string, n, SEED); + whitelist_account!(user); + let balance = T::Currency::minimum_balance() * balance_factor.into(); + T::Currency::set_balance(&user, balance); + assert_eq!(T::Currency::balance(&user), balance); + user +} + +// In the benchmarks we expect a new epoch to always start so as to test worst case scenario. +pub fn set_up_epoch(current_block: BlockNumberFor, current_epoch: T::EpochNumber) { + CurrentEpoch::::set(current_epoch); + let epoch_start = current_block.saturating_sub(EpochLength::::get()); + CurrentEpochInfo::::set(EpochInfo { epoch_start }); +} + +pub fn set_era_and_reward_pool_at_block( + era_index: RewardEra, + started_at: BlockNumberFor, + total_staked_token: BalanceOf, +) { + let era_info: RewardEraInfo> = + RewardEraInfo { era_index, started_at }; + CurrentEraInfo::::set(era_info); + CurrentEraProviderBoostTotal::::set(total_staked_token) +} + +// caller stakes the given amount to the given target +pub fn setup_provider_stake( + caller: &T::AccountId, + target: &MessageSourceId, + staking_amount: BalanceOf, + is_provider_boost: bool, +) { + let capacity_amount: BalanceOf = Capacity::::capacity_generated(staking_amount); + + let mut staking_account = StakingDetails::::default(); + if is_provider_boost { + staking_account.staking_type = ProviderBoost; + } + let mut target_details = StakingTargetDetails::>::default(); + let mut capacity_details = + CapacityDetails::, ::EpochNumber>::default(); + + staking_account.deposit(staking_amount); + target_details.deposit(staking_amount, capacity_amount); + capacity_details.deposit(&staking_amount, &capacity_amount); + + Capacity::::set_staking_account_and_lock(caller, &staking_account) + .expect("Failed to set staking account"); + Capacity::::set_target_details_for(caller, *target, target_details); + Capacity::::set_capacity_for(*target, capacity_details); +} + +// fill up unlock chunks to max bound - 1 +fn fill_unlock_chunks(caller: &T::AccountId, count: u32) { + let mut unlocking: UnlockChunkList = BoundedVec::default(); + for _i in 0..count { + let unlock_chunk: UnlockChunk, T::EpochNumber> = + UnlockChunk { value: 1u32.into(), thaw_at: 3u32.into() }; + assert_ok!(unlocking.try_push(unlock_chunk)); + } + UnstakeUnlocks::::set(caller, Some(unlocking)); +} + +fn fill_reward_pool_chunks(current_era: RewardEra) { + let history_limit: RewardEra = ::ProviderBoostHistoryLimit::get(); + let starting_era: RewardEra = current_era - history_limit - 1u32; + for era in starting_era..current_era { + Capacity::::update_provider_boost_reward_pool(era, REWARD_POOL_TOTAL.into()); + } +} + +fn fill_boost_history( + caller: &T::AccountId, + amount: BalanceOf, + current_era: RewardEra, +) { + let max_history: RewardEra = ::ProviderBoostHistoryLimit::get(); + let starting_era = current_era - max_history - 1u32; + for i in starting_era..current_era { + assert_ok!(Capacity::::upsert_boost_history(caller, i, amount, true)); + } +} + +fn unclaimed_rewards_total(caller: &T::AccountId) -> BalanceOf { + let zero_balance: BalanceOf = 0u32.into(); + let rewards: Vec, BlockNumberFor>> = + Capacity::::list_unclaimed_rewards(caller).unwrap_or_default().to_vec(); + rewards + .iter() + .fold(zero_balance, |acc, reward_info| acc.saturating_add(reward_info.earned_amount)) +} + +#[benchmarks] +mod benchmarks { + use super::*; + + #[benchmark] + fn stake() -> Result<(), BenchmarkError> { + let caller: T::AccountId = create_funded_account::("account", SEED, 105u32); + let amount: BalanceOf = T::MinimumStakingAmount::get(); + let capacity: BalanceOf = Capacity::::capacity_generated(amount); + let target = 1; + + set_era_and_reward_pool_at_block::(1u32, 1u32.into(), 1_000u32.into()); + register_provider::(target, "Foo"); + + #[extrinsic_call] + _(RawOrigin::Signed(caller.clone()), target, amount); + + assert!(StakingAccountLedger::::contains_key(&caller)); + assert!(StakingTargetLedger::::contains_key(&caller, target)); + assert!(CapacityLedger::::contains_key(target)); + assert_last_event::( + Event::::Staked { account: caller, amount, target, capacity }.into(), + ); + Ok(()) + } + + #[benchmark] + fn withdraw_unstaked() -> Result<(), BenchmarkError> { + let caller: T::AccountId = create_funded_account::("account", SEED, 5u32); + fill_unlock_chunks::(&caller, T::MaxUnlockingChunks::get()); + + CurrentEpoch::::set(T::EpochNumber::from(5u32)); + #[extrinsic_call] + _(RawOrigin::Signed(caller.clone())); + + let total = T::MaxUnlockingChunks::get(); + assert_last_event::( + Event::::StakeWithdrawn { account: caller, amount: total.into() }.into(), + ); + Ok(()) + } + + #[benchmark] + fn start_new_epoch_if_needed() -> Result<(), BenchmarkError> { + let current_block: BlockNumberFor = 100_000u32.into(); + let current_epoch: T::EpochNumber = 10_000u32.into(); + set_up_epoch::(current_block, current_epoch); + + #[block] + { + Capacity::::start_new_epoch_if_needed(current_block); + } + + assert_eq!(current_epoch.saturating_add(1u32.into()), CurrentEpoch::::get()); + assert_eq!(current_block, CurrentEpochInfo::::get().epoch_start); + Ok(()) + } + + #[benchmark] + fn start_new_reward_era_if_needed() -> Result<(), BenchmarkError> { + let current_block: BlockNumberFor = 1_209_600u32.into(); + let history_limit: u32 = ::ProviderBoostHistoryLimit::get(); + let started_at: BlockNumberFor = + current_block.saturating_sub(::EraLength::get().into()); + + let current_era: RewardEra = history_limit + 1u32; + CurrentEraInfo::::set(RewardEraInfo { era_index: current_era, started_at }); + fill_reward_pool_chunks::(current_era); + + #[block] + { + Capacity::::start_new_reward_era_if_needed(current_block); + } + + let new_era_info = CurrentEraInfo::::get(); + assert_eq!(current_era.saturating_add(1u32), new_era_info.era_index); + assert_eq!(current_block, new_era_info.started_at); + Ok(()) + } + + #[benchmark] + fn unstake() -> Result<(), BenchmarkError> { + let caller: T::AccountId = create_funded_account::("account", SEED, 5u32); + let staking_amount: BalanceOf = + T::MinimumStakingAmount::get().saturating_add(20u32.into()); + let unstaking_amount = 9u32; + let capacity_amount: BalanceOf = Capacity::::capacity_generated(staking_amount); + let target = 1; + + // Adds a boost history entry for this era only so unstake succeeds and there is an update + // to provider boost history. + let mut pbh: ProviderBoostHistory = ProviderBoostHistory::new(); + pbh.add_era_balance(&1u32, &staking_amount); + ProviderBoostHistories::::set(caller.clone(), Some(pbh)); + set_era_and_reward_pool_at_block::(1u32, 1u32.into(), 1_000u32.into()); + + setup_provider_stake::(&caller, &target, staking_amount, true); + + fill_unlock_chunks::(&caller, T::MaxUnlockingChunks::get() - 1); + + #[extrinsic_call] + _(RawOrigin::Signed(caller.clone()), target, unstaking_amount.into()); + + assert_last_event::( + Event::::UnStaked { + account: caller.clone(), + target, + amount: unstaking_amount.into(), + capacity: Capacity::::calculate_capacity_reduction( + unstaking_amount.into(), + staking_amount, + capacity_amount, + ), + } + .into(), + ); + Ok(()) + } + + #[benchmark] + fn set_epoch_length() -> Result<(), BenchmarkError> { + let epoch_length: BlockNumberFor = 9u32.into(); + + #[extrinsic_call] + _(RawOrigin::Root, epoch_length); + + assert_eq!(EpochLength::::get(), 9u32.into()); + assert_last_event::(Event::::EpochLengthUpdated { blocks: epoch_length }.into()); + Ok(()) + } + + #[benchmark] + fn change_staking_target() -> Result<(), BenchmarkError> { + let caller: T::AccountId = create_funded_account::("account", SEED, 5u32); + let from_msa = 33; + let to_msa = 34; + // amount in addition to minimum + let from_msa_amount: BalanceOf = + T::MinimumStakingAmount::get().saturating_add(31u32.into()); + let to_msa_amount: BalanceOf = + T::MinimumStakingAmount::get().saturating_add(1u32.into()); + + set_era_and_reward_pool_at_block::(1u32, 1u32.into(), 1_000u32.into()); + register_provider::(from_msa, "frommsa"); + register_provider::(to_msa, "tomsa"); + setup_provider_stake::(&caller, &from_msa, from_msa_amount, false); + setup_provider_stake::(&caller, &to_msa, to_msa_amount, false); + let restake_amount: BalanceOf = from_msa_amount.saturating_sub(10u32.into()); + + #[extrinsic_call] + _(RawOrigin::Signed(caller.clone()), from_msa, to_msa, restake_amount); + + assert_last_event::( + Event::::StakingTargetChanged { + account: caller, + from_msa, + to_msa, + amount: restake_amount, + } + .into(), + ); + Ok(()) + } + + #[benchmark] + fn provider_boost() -> Result<(), BenchmarkError> { + let caller: T::AccountId = create_funded_account::("boostaccount", SEED, 260u32); + let boost_amount: BalanceOf = T::MinimumStakingAmount::get().saturating_add(1u32.into()); + let capacity: BalanceOf = + Capacity::::capacity_generated(::RewardsProvider::capacity_boost(boost_amount)); + let target = 1; + + set_era_and_reward_pool_at_block::(1u32, 1u32.into(), 1_000u32.into()); + register_provider::(target, "Foo"); + + #[extrinsic_call] + _(RawOrigin::Signed(caller.clone()), target, boost_amount); + + assert_last_event::( + Event::::ProviderBoosted { account: caller, amount: boost_amount, target, capacity } + .into(), + ); + Ok(()) + } + + // TODO: vary the boost_history to get better weight estimates. + #[benchmark] + fn claim_staking_rewards() -> Result<(), BenchmarkError> { + let caller: T::AccountId = create_funded_account::("account", SEED, 5u32); + let from_msa = 33; + let boost_amount: BalanceOf = T::MinimumStakingAmount::get(); + setup_provider_stake::(&caller, &from_msa, boost_amount, false); + frame_system::Pallet::::set_block_number(1002u32.into()); + let current_era: RewardEra = 100; + set_era_and_reward_pool_at_block::( + current_era, + 1001u32.into(), + REWARD_POOL_TOTAL.into(), + ); + fill_reward_pool_chunks::(current_era); + fill_boost_history::(&caller, 100u32.into(), current_era); + let unclaimed_rewards = unclaimed_rewards_total::(&caller); + + #[extrinsic_call] + _(RawOrigin::Signed(caller.clone())); + + assert_last_event::( + Event::::ProviderBoostRewardClaimed { + account: caller.clone(), + reward_amount: unclaimed_rewards, + } + .into(), + ); + Ok(()) + } + + impl_benchmark_test_suite!(Capacity, tests::mock::new_test_ext(), tests::mock::Test); +} diff --git a/pallets/capacity/src/lib.rs b/pallets/capacity/src/lib.rs new file mode 100644 index 0000000000..971553c8c1 --- /dev/null +++ b/pallets/capacity/src/lib.rs @@ -0,0 +1,1338 @@ +//! Managages staking to the network for Capacity +//! +//! ## Quick Links +//! - [Configuration: `Config`](Config) +//! - [Extrinsics: `Call`](Call) +//! - [Runtime API: `CapacityRuntimeApi`](../pallet_capacity_runtime_api/trait.CapacityRuntimeApi.html) +//! - [Event Enum: `Event`](Event) +//! - [Error Enum: `Error`](Error) +#![doc = include_str!("../README.md")] +//! +//! ## Lazy Capacity Refill +//! +//! Capacity is refilled on an as needed basis. +//! Thus, the provider's capacity balance retains the information of the last epoch. +//! Upon use, if the last Epoch is less than the current Epoch, the balance is assumed to be the maximum as the reload "has" happened. +//! Thus, the first use of Capacity in an Epoch will update the last Epoch number to match the current Epoch. +//! If a provider does not use any Capacity in an Epoch, the provider's capacity balance information is never updated for that Epoch. +//! +// Substrate macros are tripping the clippy::expect_used lint. +#![allow(clippy::expect_used)] +#![cfg_attr(not(feature = "std"), no_std)] +// Strong Documentation Lints +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + missing_docs +)] + +use core::ops::Mul; + +use frame_support::{ + ensure, + traits::{ + tokens::fungible::{Inspect as InspectFungible, InspectFreeze, Mutate, MutateFreeze}, + Get, Hooks, + }, + weights::Weight, +}; + +use sp_runtime::{ + traits::{CheckedAdd, CheckedDiv, One, Saturating, Zero}, + ArithmeticError, BoundedVec, DispatchError, Perbill, Permill, +}; + +pub use common_primitives::{ + capacity::*, + msa::MessageSourceId, + node::{AccountId, Balance, BlockNumber}, + utils::wrap_binary_data, +}; + +use frame_system::pallet_prelude::*; + +#[cfg(feature = "runtime-benchmarks")] +use common_primitives::benchmarks::RegisterProviderBenchmarkHelper; + +pub use pallet::*; +pub use types::*; +pub use weights::*; + +pub mod types; + +#[cfg(feature = "runtime-benchmarks")] +mod benchmarking; + +#[cfg(test)] +mod tests; + +pub mod weights; +type BalanceOf = + <::Currency as InspectFungible<::AccountId>>::Balance; +type ChunkIndex = u32; + +#[frame_support::pallet] +pub mod pallet { + use super::*; + + use crate::StakingType::*; + use common_primitives::capacity::RewardEra; + use frame_support::{ + pallet_prelude::{StorageVersion, *}, + Twox64Concat, + }; + use sp_runtime::traits::{AtLeast32BitUnsigned, MaybeDisplay}; + + /// A reason for freezing funds. + /// Creates a freeze reason for this pallet that is aggregated by `construct_runtime`. + #[pallet::composite_enum] + pub enum FreezeReason { + /// The account has staked tokens to the Frequency network. + CapacityStaking, + } + + /// the storage version for this pallet + pub const STORAGE_VERSION: StorageVersion = StorageVersion::new(4); + + #[pallet::config] + pub trait Config: frame_system::Config { + /// The overarching event type. + type RuntimeEvent: From> + IsType<::RuntimeEvent>; + + /// The overarching freeze reason. + type RuntimeFreezeReason: From; + + /// Weight information for extrinsics in this pallet. + type WeightInfo: WeightInfo; + + /// Functions that allow a fungible balance to be changed or frozen. + type Currency: MutateFreeze + + Mutate + + InspectFreeze + + InspectFungible; + + /// Function that checks if an MSA is a valid target. + type TargetValidator: TargetValidator; + + /// The minimum required token amount to stake. It facilitates cleaning dust when unstaking. + #[pallet::constant] + type MinimumStakingAmount: Get>; + + /// The minimum required token amount to remain in the account after staking. + #[pallet::constant] + type MinimumTokenBalance: Get>; + + /// The maximum number of unlocking chunks a StakingAccountLedger can have. + /// It determines how many concurrent unstaked chunks may exist. + #[pallet::constant] + type MaxUnlockingChunks: Get; + + #[cfg(feature = "runtime-benchmarks")] + /// A set of helper functions for benchmarking. + type BenchmarkHelper: RegisterProviderBenchmarkHelper; + + /// The number of Epochs before you can unlock tokens after unstaking. + #[pallet::constant] + type UnstakingThawPeriod: Get; + + /// Maximum number of blocks an epoch can be + #[pallet::constant] + type MaxEpochLength: Get>; + + /// A type that provides an Epoch number + /// traits pulled from frame_system::Config::BlockNumber + type EpochNumber: Parameter + + Member + + MaybeSerializeDeserialize + + MaybeDisplay + + AtLeast32BitUnsigned + + Default + + Copy + + core::hash::Hash + + MaxEncodedLen + + TypeInfo; + + /// How much FRQCY one unit of Capacity costs + #[pallet::constant] + type CapacityPerToken: Get; + + /// The number of blocks in a RewardEra + #[pallet::constant] + type EraLength: Get; + + /// The maximum number of eras over which one can claim rewards + /// Note that you can claim rewards even if you no longer are boosting, because you + /// may claim rewards for past eras up to the history limit. + /// MUST be a multiple of [`Self::RewardPoolChunkLength`] + #[pallet::constant] + type ProviderBoostHistoryLimit: Get; + + /// The ProviderBoostRewardsProvider used by this pallet in a given runtime + type RewardsProvider: ProviderBoostRewardsProvider; + + /// A staker may not retarget more than MaxRetargetsPerRewardEra + #[pallet::constant] + type MaxRetargetsPerRewardEra: Get; + + /// The fixed size of the reward pool in each Reward Era. + #[pallet::constant] + type RewardPoolPerEra: Get>; + + /// the percentage cap per era of an individual Provider Boost reward + #[pallet::constant] + type RewardPercentCap: Get; + + /// The number of chunks of Reward Pool history we expect to store + /// Is a divisor of [`Self::ProviderBoostHistoryLimit`] + #[pallet::constant] + type RewardPoolChunkLength: Get; + } + + /// Storage for keeping a ledger of staked token amounts for accounts. + /// - Keys: AccountId + /// - Value: [`StakingDetails`](types::StakingDetails) + #[pallet::storage] + pub type StakingAccountLedger = + StorageMap<_, Twox64Concat, T::AccountId, StakingDetails>; + + /// Storage to record how many tokens were targeted to an MSA. + /// - Keys: AccountId, MSA Id + /// - Value: [`StakingTargetDetails`](types::StakingTargetDetails) + #[pallet::storage] + pub type StakingTargetLedger = StorageDoubleMap< + _, + Twox64Concat, + T::AccountId, + Twox64Concat, + MessageSourceId, + StakingTargetDetails>, + >; + + /// Storage for target Capacity usage. + /// - Keys: MSA Id + /// - Value: [`CapacityDetails`](types::CapacityDetails) + #[pallet::storage] + pub type CapacityLedger = + StorageMap<_, Twox64Concat, MessageSourceId, CapacityDetails, T::EpochNumber>>; + + /// Storage for the current epoch number + #[pallet::storage] + #[pallet::whitelist_storage] + pub type CurrentEpoch = StorageValue<_, T::EpochNumber, ValueQuery>; + + /// Storage for the current epoch info + #[pallet::storage] + pub type CurrentEpochInfo = + StorageValue<_, EpochInfo>, ValueQuery>; + + #[pallet::type_value] + /// EpochLength defaults to 100 blocks when not set + pub fn EpochLengthDefault() -> BlockNumberFor { + 100u32.into() + } + + /// Storage for the epoch length + #[pallet::storage] + pub type EpochLength = + StorageValue<_, BlockNumberFor, ValueQuery, EpochLengthDefault>; + + #[pallet::storage] + pub type UnstakeUnlocks = + StorageMap<_, Twox64Concat, T::AccountId, UnlockChunkList>; + + /// stores how many times an account has retargeted, and when it last retargeted. + #[pallet::storage] + pub type Retargets = StorageMap<_, Twox64Concat, T::AccountId, RetargetInfo>; + + /// Information about the current reward era. Checked every block. + #[pallet::storage] + #[pallet::whitelist_storage] + pub type CurrentEraInfo = + StorageValue<_, RewardEraInfo>, ValueQuery>; + + /// Reward Pool history is divided into chunks of size RewardPoolChunkLength. + /// ProviderBoostHistoryLimit is the total number of items, the key is the + /// chunk number. + #[pallet::storage] + pub type ProviderBoostRewardPools = + StorageMap<_, Twox64Concat, ChunkIndex, RewardPoolHistoryChunk>; + + /// How much is staked this era + #[pallet::storage] + pub type CurrentEraProviderBoostTotal = StorageValue<_, BalanceOf, ValueQuery>; + + /// Individual history for each account that has Provider-Boosted. + #[pallet::storage] + pub type ProviderBoostHistories = + StorageMap<_, Twox64Concat, T::AccountId, ProviderBoostHistory>; + + // Simple declaration of the `Pallet` type. It is placeholder we use to implement traits and + // method. + #[pallet::pallet] + #[pallet::storage_version(STORAGE_VERSION)] + pub struct Pallet(_); + + #[pallet::event] + #[pallet::generate_deposit(pub (super) fn deposit_event)] + pub enum Event { + /// Tokens have been staked to the Frequency network. + Staked { + /// The token account that staked tokens to the network. + account: T::AccountId, + /// The MSA that a token account targeted to receive Capacity based on this staking amount. + target: MessageSourceId, + /// An amount that was staked. + amount: BalanceOf, + /// The Capacity amount issued to the target as a result of the stake. + capacity: BalanceOf, + }, + /// Unstaked token that has thawed was unlocked for the given account + StakeWithdrawn { + /// the account that withdrew its stake + account: T::AccountId, + /// the total amount withdrawn, i.e. put back into free balance. + amount: BalanceOf, + }, + /// A token account has unstaked the Frequency network. + UnStaked { + /// The token account that unstaked tokens from the network. + account: T::AccountId, + /// The MSA target that will now have Capacity reduced as a result of unstaking. + target: MessageSourceId, + /// The amount that was unstaked. + amount: BalanceOf, + /// The Capacity amount that was reduced from a target. + capacity: BalanceOf, + }, + /// The Capacity epoch length was changed. + EpochLengthUpdated { + /// The new length of an epoch in blocks. + blocks: BlockNumberFor, + }, + /// Capacity has been withdrawn from a MessageSourceId. + CapacityWithdrawn { + /// The MSA from which Capacity has been withdrawn. + msa_id: MessageSourceId, + /// The amount of Capacity withdrawn from MSA. + amount: BalanceOf, + }, + /// The target of a staked amount was changed to a new MessageSourceId + StakingTargetChanged { + /// The account that retargeted the staking amount + account: T::AccountId, + /// The Provider MSA that the staking amount is taken from + from_msa: MessageSourceId, + /// The Provider MSA that the staking amount is retargeted to + to_msa: MessageSourceId, + /// The amount in token that was retargeted + amount: BalanceOf, + }, + /// Tokens have been staked on the network for Provider Boosting + ProviderBoosted { + /// The token account that staked tokens to the network. + account: T::AccountId, + /// The MSA that a token account targeted to receive Capacity based on this staking amount. + target: MessageSourceId, + /// An amount that was staked. + amount: BalanceOf, + /// The Capacity amount issued to the target as a result of the stake. + capacity: BalanceOf, + }, + /// Provider Boost Token Rewards have been minted and transferred to the staking account. + ProviderBoostRewardClaimed { + /// The token account claiming and receiving the reward from ProviderBoost staking + account: T::AccountId, + /// The reward amount + reward_amount: BalanceOf, + }, + } + + #[pallet::error] + pub enum Error { + /// Staker attempted to stake to an invalid staking target. + InvalidTarget, + /// Capacity is not available for the given MSA. + InsufficientCapacityBalance, + /// Staker is attempting to stake an amount below the minimum amount. + StakingAmountBelowMinimum, + /// Staker is attempting to stake a zero amount. DEPRECATED + /// #[deprecated(since = "1.13.0", note = "Use StakingAmountBelowMinimum instead")] + ZeroAmountNotAllowed, + /// This AccountId does not have a staking account. + NotAStakingAccount, + /// No staked value is available for withdrawal; either nothing is being unstaked, + /// or nothing has passed the thaw period. (5) + NoUnstakedTokensAvailable, + /// Unstaking amount should be greater than zero. + UnstakedAmountIsZero, + /// Amount to unstake or change targets is greater than the amount staked. + InsufficientStakingBalance, + /// Attempted to get a staker / target relationship that does not exist. + StakerTargetRelationshipNotFound, + /// Attempted to get the target's capacity that does not exist. + TargetCapacityNotFound, + /// Staker has reached the limit of unlocking chunks and must wait for at least one thaw period + /// to complete. (10) + MaxUnlockingChunksExceeded, + /// Capacity increase exceeds the total available Capacity for target. + IncreaseExceedsAvailable, + /// Attempted to set the Epoch length to a value greater than the max Epoch length. + MaxEpochLengthExceeded, + /// Staker is attempting to stake an amount that leaves a token balance below the minimum amount. + BalanceTooLowtoStake, + /// There are no unstaked token amounts that have passed their thaw period. + NoThawedTokenAvailable, + /// Staker tried to change StakingType on an existing account + CannotChangeStakingType, + /// The Era specified is too far in the past or is in the future (15) + EraOutOfRange, + /// Attempted to retarget but from and to Provider MSA Ids were the same + CannotRetargetToSameProvider, + /// There are no rewards eligible to claim. Rewards have expired, have already been + /// claimed, or boosting has never been done before the current era. + NoRewardsEligibleToClaim, + /// Caller must claim rewards before unstaking. + MustFirstClaimRewards, + /// Too many change_staking_target calls made in this RewardEra. (20) + MaxRetargetsExceeded, + /// Tried to exceed bounds of a some Bounded collection + CollectionBoundExceeded, + /// This origin has nothing staked for ProviderBoost. + NotAProviderBoostAccount, + } + + #[pallet::hooks] + impl Hooks> for Pallet { + fn on_initialize(current: BlockNumberFor) -> Weight { + Self::start_new_epoch_if_needed(current) + .saturating_add(Self::start_new_reward_era_if_needed(current)) + } + } + + #[pallet::call] + impl Pallet { + /// Stakes some amount of tokens to the network and generates Capacity. + /// + /// ### Errors + /// + /// - Returns Error::InvalidTarget if attempting to stake to an invalid target. + /// - Returns Error::StakingAmountBelowMinimum if attempting to stake an amount below the minimum amount. + /// - Returns Error::CannotChangeStakingType if the staking account is a ProviderBoost account + #[pallet::call_index(0)] + #[pallet::weight(T::WeightInfo::stake())] + pub fn stake( + origin: OriginFor, + target: MessageSourceId, + amount: BalanceOf, + ) -> DispatchResult { + let staker = ensure_signed(origin)?; + + let (mut staking_account, actual_amount) = + Self::ensure_can_stake(&staker, target, amount, MaximumCapacity)?; + + let capacity = Self::increase_stake_and_issue_capacity( + &staker, + &mut staking_account, + target, + actual_amount, + )?; + + Self::deposit_event(Event::Staked { + account: staker, + amount: actual_amount, + target, + capacity, + }); + + Ok(()) + } + + /// Removes all thawed UnlockChunks from caller's UnstakeUnlocks and thaws(unfreezes) the sum of the thawed values + /// in the caller's token account. + /// + /// ### Errors + /// - Returns `Error::NoUnstakedTokensAvailable` if the account has no unstaking chunks. + /// - Returns `Error::NoThawedTokenAvailable` if there are unstaking chunks, but none are thawed. + #[pallet::call_index(1)] + #[pallet::weight(T::WeightInfo::withdraw_unstaked())] + pub fn withdraw_unstaked(origin: OriginFor) -> DispatchResult { + let staker = ensure_signed(origin)?; + let amount_withdrawn = Self::do_withdraw_unstaked(&staker)?; + Self::deposit_event(Event::::StakeWithdrawn { + account: staker, + amount: amount_withdrawn, + }); + Ok(()) + } + + /// Schedules an amount of the stake to be unlocked. + /// ### Errors + /// + /// - Returns `Error::UnstakedAmountIsZero` if `amount` is not greater than zero. + /// - Returns `Error::MaxUnlockingChunksExceeded` if attempting to unlock more times than config::MaxUnlockingChunks. + /// - Returns `Error::AmountToUnstakeExceedsAmountStaked` if `amount` exceeds the amount currently staked. + /// - Returns `Error::InvalidTarget` if `target` is not a valid staking target (not a Provider) + /// - Returns `Error::NotAStakingAccount` if `origin` has nothing staked at all + /// - Returns `Error::StakerTargetRelationshipNotFound` if `origin` has nothing staked to `target` + #[pallet::call_index(2)] + #[pallet::weight(T::WeightInfo::unstake())] + pub fn unstake( + origin: OriginFor, + target: MessageSourceId, + requested_amount: BalanceOf, + ) -> DispatchResult { + let unstaker = ensure_signed(origin)?; + + ensure!(requested_amount > Zero::zero(), Error::::UnstakedAmountIsZero); + + ensure!(!Self::has_unclaimed_rewards(&unstaker), Error::::MustFirstClaimRewards); + + let (actual_amount, staking_type) = + Self::decrease_active_staking_balance(&unstaker, requested_amount)?; + Self::add_unlock_chunk(&unstaker, actual_amount)?; + + let capacity_reduction = + Self::reduce_capacity(&unstaker, target, actual_amount, staking_type)?; + + Self::deposit_event(Event::UnStaked { + account: unstaker, + target, + amount: actual_amount, + capacity: capacity_reduction, + }); + Ok(()) + } + + /// Sets the epoch period length (in blocks). + /// + /// # Requires + /// * Root Origin + /// + /// ### Errors + /// - Returns `Error::MaxEpochLengthExceeded` if `length` is greater than T::MaxEpochLength. + #[pallet::call_index(3)] + #[pallet::weight(T::WeightInfo::set_epoch_length())] + pub fn set_epoch_length(origin: OriginFor, length: BlockNumberFor) -> DispatchResult { + ensure_root(origin)?; + ensure!(length <= T::MaxEpochLength::get(), Error::::MaxEpochLengthExceeded); + + EpochLength::::set(length); + + Self::deposit_event(Event::EpochLengthUpdated { blocks: length }); + Ok(()) + } + + /// Sets the target of the staking capacity to a new target. + /// This adds a chunk to `StakingDetails.stake_change_unlocking chunks`, up to `T::MaxUnlockingChunks`. + /// The staked amount and Capacity generated by `amount` originally targeted to the `from` MSA Id is reassigned to the `to` MSA Id. + /// Does not affect unstaking process or additional stake amounts. + /// Changing a staking target to a Provider when Origin has nothing staked them will retain the staking type. + /// Changing a staking target to a Provider when Origin has any amount staked to them will error if the staking types are not the same. + /// ### Errors + /// - [`Error::MaxUnlockingChunksExceeded`] if `stake_change_unlocking_chunks` == `T::MaxUnlockingChunks` + /// - [`Error::StakerTargetRelationshipNotFound`] if `from` is not a target for Origin's staking account. + /// - [`Error::StakingAmountBelowMinimum`] if `amount` to retarget is below the minimum staking amount. + /// - [`Error::InsufficientStakingBalance`] if `amount` to retarget exceeds what the staker has targeted to `from` MSA Id. + /// - [`Error::InvalidTarget`] if `to` does not belong to a registered Provider. + /// - [`Error::MaxRetargetsExceeded`] if origin has reached the maximimum number of retargets for the current RewardEra. + #[pallet::call_index(4)] + #[pallet::weight(T::WeightInfo::change_staking_target())] + pub fn change_staking_target( + origin: OriginFor, + from: MessageSourceId, + to: MessageSourceId, + amount: BalanceOf, + ) -> DispatchResult { + let staker = ensure_signed(origin)?; + // This will bounce immediately if they've tried to do this too many times. + Self::update_retarget_record(&staker)?; + ensure!(from.ne(&to), Error::::CannotRetargetToSameProvider); + ensure!( + amount >= T::MinimumStakingAmount::get(), + Error::::StakingAmountBelowMinimum + ); + + ensure!(T::TargetValidator::validate(to), Error::::InvalidTarget); + + Self::do_retarget(&staker, &from, &to, &amount)?; + + Self::deposit_event(Event::StakingTargetChanged { + account: staker, + from_msa: from, + to_msa: to, + amount, + }); + Ok(()) + } + /// Stakes some amount of tokens to the network and generates a comparatively small amount of Capacity + /// for the target, and gives periodic rewards to origin. + /// ### Errors + /// + /// - Error::InvalidTarget if attempting to stake to an invalid target. + /// - Error::StakingAmountBelowMinimum if attempting to stake an amount below the minimum amount. + /// - Error::CannotChangeStakingType if the staking account exists and staking_type is MaximumCapacity + #[pallet::call_index(5)] + #[pallet::weight(T::WeightInfo::provider_boost())] + pub fn provider_boost( + origin: OriginFor, + target: MessageSourceId, + amount: BalanceOf, + ) -> DispatchResult { + let staker = ensure_signed(origin)?; + let (mut boosting_details, actual_amount) = + Self::ensure_can_boost(&staker, &target, &amount)?; + + let capacity = Self::increase_stake_and_issue_boost_capacity( + &staker, + &mut boosting_details, + &target, + &actual_amount, + )?; + + Self::deposit_event(Event::ProviderBoosted { + account: staker, + amount: actual_amount, + target, + capacity, + }); + + Ok(()) + } + + /// Claim all outstanding Provider Boost rewards, up to ProviderBoostHistoryLimit Reward Eras + /// in the past. Accounts should check for unclaimed rewards before calling this extrinsic + /// to avoid needless transaction fees. + /// ### Errors: + /// - NotAProviderBoostAccount: if Origin has nothing staked for ProviderBoost + /// - NoRewardsEligibleToClaim: if Origin has no unclaimed rewards to pay out. + #[pallet::call_index(6)] + #[pallet::weight(T::WeightInfo::claim_staking_rewards())] + pub fn claim_staking_rewards(origin: OriginFor) -> DispatchResult { + let staker = ensure_signed(origin)?; + ensure!( + ProviderBoostHistories::::contains_key(staker.clone()), + Error::::NotAProviderBoostAccount + ); + let total_to_mint = Self::do_claim_rewards(&staker)?; + Self::deposit_event(Event::ProviderBoostRewardClaimed { + account: staker.clone(), + reward_amount: total_to_mint, + }); + Ok(()) + } + } +} + +impl Pallet { + /// Checks to see if staker has sufficient free-balance to stake the minimum required staking amount, + /// and leave the minimum required free balance after staking. + /// + /// # Errors + /// * [`Error::ZeroAmountNotAllowed`] + /// * [`Error::InvalidTarget`] + /// * [`Error::CannotChangeStakingType`] + /// * [`Error::BalanceTooLowtoStake`] + /// * [`Error::StakingAmountBelowMinimum`] + /// + fn ensure_can_stake( + staker: &T::AccountId, + target: MessageSourceId, + amount: BalanceOf, + staking_type: StakingType, + ) -> Result<(StakingDetails, BalanceOf), DispatchError> { + ensure!(amount > Zero::zero(), Error::::ZeroAmountNotAllowed); + ensure!(T::TargetValidator::validate(target), Error::::InvalidTarget); + + let staking_details = StakingAccountLedger::::get(staker).unwrap_or_default(); + if !staking_details.active.is_zero() { + ensure!( + staking_details.staking_type.eq(&staking_type), + Error::::CannotChangeStakingType + ); + } + + let stakable_amount = Self::get_stakable_amount_for(staker, amount); + + ensure!(stakable_amount > Zero::zero(), Error::::BalanceTooLowtoStake); + ensure!( + stakable_amount >= T::MinimumStakingAmount::get(), + Error::::StakingAmountBelowMinimum + ); + + Ok((staking_details, stakable_amount)) + } + + fn ensure_can_boost( + staker: &T::AccountId, + target: &MessageSourceId, + amount: &BalanceOf, + ) -> Result<(StakingDetails, BalanceOf), DispatchError> { + let (mut staking_details, stakable_amount) = + Self::ensure_can_stake(staker, *target, *amount, StakingType::ProviderBoost)?; + staking_details.staking_type = StakingType::ProviderBoost; + Ok((staking_details, stakable_amount)) + } + + /// Increase a staking account and target account balances by amount. + /// Additionally, it issues Capacity to the MSA target. + fn increase_stake_and_issue_capacity( + staker: &T::AccountId, + staking_account: &mut StakingDetails, + target: MessageSourceId, + amount: BalanceOf, + ) -> Result, DispatchError> { + staking_account.deposit(amount).ok_or(ArithmeticError::Overflow)?; + + let capacity = Self::capacity_generated(amount); + let mut target_details = StakingTargetLedger::::get(staker, target).unwrap_or_default(); + target_details.deposit(amount, capacity).ok_or(ArithmeticError::Overflow)?; + + let mut capacity_details = CapacityLedger::::get(target).unwrap_or_default(); + capacity_details.deposit(&amount, &capacity).ok_or(ArithmeticError::Overflow)?; + + Self::set_staking_account_and_lock(staker, staking_account)?; + + Self::set_target_details_for(staker, target, target_details); + Self::set_capacity_for(target, capacity_details); + + Ok(capacity) + } + + fn increase_stake_and_issue_boost_capacity( + staker: &T::AccountId, + staking_details: &mut StakingDetails, + target: &MessageSourceId, + amount: &BalanceOf, + ) -> Result, DispatchError> { + staking_details.deposit(*amount).ok_or(ArithmeticError::Overflow)?; + Self::set_staking_account_and_lock(staker, staking_details)?; + + // get the capacity generated by a Provider Boost + let capacity = Self::capacity_generated(T::RewardsProvider::capacity_boost(*amount)); + + let mut target_details = StakingTargetLedger::::get(staker, target).unwrap_or_default(); + + target_details.deposit(*amount, capacity).ok_or(ArithmeticError::Overflow)?; + Self::set_target_details_for(staker, *target, target_details); + + let mut capacity_details = CapacityLedger::::get(target).unwrap_or_default(); + capacity_details.deposit(amount, &capacity).ok_or(ArithmeticError::Overflow)?; + Self::set_capacity_for(*target, capacity_details); + + let era = CurrentEraInfo::::get().era_index; + Self::upsert_boost_history(staker, era, *amount, true)?; + + let reward_pool_total = CurrentEraProviderBoostTotal::::get(); + CurrentEraProviderBoostTotal::::set(reward_pool_total.saturating_add(*amount)); + + Ok(capacity) + } + + /// Sets staking account details after a deposit + fn set_staking_account_and_lock( + staker: &T::AccountId, + staking_account: &StakingDetails, + ) -> Result<(), DispatchError> { + let unlocks = UnstakeUnlocks::::get(staker).unwrap_or_default(); + let total_to_lock: BalanceOf = staking_account + .active + .checked_add(&unlock_chunks_total::(&unlocks)) + .ok_or(ArithmeticError::Overflow)?; + T::Currency::set_freeze(&FreezeReason::CapacityStaking.into(), staker, total_to_lock)?; + Self::set_staking_account(staker, staking_account); + Ok(()) + } + + fn set_staking_account(staker: &T::AccountId, staking_account: &StakingDetails) { + if staking_account.active.is_zero() { + StakingAccountLedger::::set(staker, None); + } else { + StakingAccountLedger::::insert(staker, staking_account); + } + } + + /// Sets target account details. + fn set_target_details_for( + staker: &T::AccountId, + target: MessageSourceId, + target_details: StakingTargetDetails>, + ) { + if target_details.amount.is_zero() { + StakingTargetLedger::::remove(staker, target); + } else { + StakingTargetLedger::::insert(staker, target, target_details); + } + } + + /// Sets targets Capacity. + pub fn set_capacity_for( + target: MessageSourceId, + capacity_details: CapacityDetails, T::EpochNumber>, + ) { + CapacityLedger::::insert(target, capacity_details); + } + + /// Decrease a staking account's active token and reap if it goes below the minimum. + /// Returns: actual amount unstaked, plus the staking type + StakingDetails, + /// since StakingDetails may be reaped and staking type must be used to calculate the + /// capacity reduction later. + fn decrease_active_staking_balance( + unstaker: &T::AccountId, + amount: BalanceOf, + ) -> Result<(BalanceOf, StakingType), DispatchError> { + let mut staking_account = + StakingAccountLedger::::get(unstaker).ok_or(Error::::NotAStakingAccount)?; + ensure!(amount <= staking_account.active, Error::::InsufficientStakingBalance); + + let actual_unstaked_amount = staking_account.withdraw(amount)?; + Self::set_staking_account(unstaker, &staking_account); + + let staking_type = staking_account.staking_type; + if staking_type == StakingType::ProviderBoost { + let era = CurrentEraInfo::::get().era_index; + Self::upsert_boost_history(unstaker, era, actual_unstaked_amount, false)?; + let reward_pool_total = CurrentEraProviderBoostTotal::::get(); + CurrentEraProviderBoostTotal::::set( + reward_pool_total.saturating_sub(actual_unstaked_amount), + ); + } + Ok((actual_unstaked_amount, staking_type)) + } + + fn add_unlock_chunk( + unstaker: &T::AccountId, + actual_unstaked_amount: BalanceOf, + ) -> Result<(), DispatchError> { + let current_epoch: T::EpochNumber = CurrentEpoch::::get(); + let thaw_at = + current_epoch.saturating_add(T::EpochNumber::from(T::UnstakingThawPeriod::get())); + let mut unlocks = UnstakeUnlocks::::get(unstaker).unwrap_or_default(); + + match unlocks.iter_mut().find(|chunk| chunk.thaw_at == thaw_at) { + Some(chunk) => { + chunk.value += actual_unstaked_amount; + }, + None => { + let unlock_chunk: UnlockChunk, T::EpochNumber> = + UnlockChunk { value: actual_unstaked_amount, thaw_at }; + unlocks + .try_push(unlock_chunk) + .map_err(|_| Error::::MaxUnlockingChunksExceeded)?; + }, + } + + UnstakeUnlocks::::set(unstaker, Some(unlocks)); + Ok(()) + } + + // Calculates a stakable amount from a proposed amount. + pub(crate) fn get_stakable_amount_for( + staker: &T::AccountId, + proposed_amount: BalanceOf, + ) -> BalanceOf { + let freezable_balance = T::Currency::balance_freezable(staker); + let current_staking_balance = + StakingAccountLedger::::get(staker).unwrap_or_default().active; + let stakable_amount = freezable_balance + .saturating_sub(current_staking_balance) + .saturating_sub(T::MinimumTokenBalance::get()); + if stakable_amount >= proposed_amount { + proposed_amount + } else { + Zero::zero() + } + } + + pub(crate) fn do_withdraw_unstaked( + staker: &T::AccountId, + ) -> Result, DispatchError> { + let current_epoch = CurrentEpoch::::get(); + let mut total_unlocking: BalanceOf = Zero::zero(); + + let mut unlocks = + UnstakeUnlocks::::get(staker).ok_or(Error::::NoUnstakedTokensAvailable)?; + let amount_withdrawn = unlock_chunks_reap_thawed::(&mut unlocks, current_epoch); + ensure!(!amount_withdrawn.is_zero(), Error::::NoThawedTokenAvailable); + + if unlocks.is_empty() { + UnstakeUnlocks::::set(staker, None); + } else { + total_unlocking = unlock_chunks_total::(&unlocks); + UnstakeUnlocks::::set(staker, Some(unlocks)); + } + + let staking_account = StakingAccountLedger::::get(staker).unwrap_or_default(); + let total_locked = staking_account.active.saturating_add(total_unlocking); + if total_locked.is_zero() { + T::Currency::thaw(&FreezeReason::CapacityStaking.into(), staker)?; + } else { + T::Currency::set_freeze(&FreezeReason::CapacityStaking.into(), staker, total_locked)?; + } + Ok(amount_withdrawn) + } + + #[allow(unused)] + fn get_thaw_at_epoch() -> ::EpochNumber { + let current_epoch: T::EpochNumber = CurrentEpoch::::get(); + let thaw_period = T::UnstakingThawPeriod::get(); + current_epoch.saturating_add(thaw_period.into()) + } + + /// Reduce available capacity of target and return the amount of capacity reduction. + fn reduce_capacity( + unstaker: &T::AccountId, + target: MessageSourceId, + amount: BalanceOf, + staking_type: StakingType, + ) -> Result, DispatchError> { + let mut staking_target_details = StakingTargetLedger::::get(unstaker, target) + .ok_or(Error::::StakerTargetRelationshipNotFound)?; + + ensure!(amount.le(&staking_target_details.amount), Error::::InsufficientStakingBalance); + + let mut capacity_details = + CapacityLedger::::get(target).ok_or(Error::::TargetCapacityNotFound)?; + + let capacity_to_withdraw = if staking_target_details.amount.eq(&amount) { + staking_target_details.capacity + } else if staking_type.eq(&StakingType::ProviderBoost) { + Perbill::from_rational(amount, staking_target_details.amount) + .mul_ceil(staking_target_details.capacity) + } else { + // this call will return an amount > than requested if the resulting StakingTargetDetails balance + // is below the minimum. This ensures we withdraw the same amounts as for staking_target_details. + Self::calculate_capacity_reduction( + amount, + capacity_details.total_tokens_staked, + capacity_details.total_capacity_issued, + ) + }; + + let (actual_amount, actual_capacity) = staking_target_details.withdraw( + amount, + capacity_to_withdraw, + T::MinimumStakingAmount::get(), + ); + + capacity_details.withdraw(actual_capacity, actual_amount); + + Self::set_capacity_for(target, capacity_details); + Self::set_target_details_for(unstaker, target, staking_target_details); + + Ok(capacity_to_withdraw) + } + + /// Calculates Capacity generated for given FRQCY + fn capacity_generated(amount: BalanceOf) -> BalanceOf { + let cpt = T::CapacityPerToken::get(); + cpt.mul(amount) + } + + /// Determine the capacity reduction when given total_capacity, unstaking_amount, and total_amount_staked, + /// based on ratios + fn calculate_capacity_reduction( + unstaking_amount: BalanceOf, + total_amount_staked: BalanceOf, + total_capacity: BalanceOf, + ) -> BalanceOf { + Perbill::from_rational(unstaking_amount, total_amount_staked).mul_ceil(total_capacity) + } + + fn start_new_epoch_if_needed(current_block: BlockNumberFor) -> Weight { + // Should we start a new epoch? + if current_block.saturating_sub(CurrentEpochInfo::::get().epoch_start) >= + EpochLength::::get() + { + let current_epoch = CurrentEpoch::::get(); + CurrentEpoch::::set(current_epoch.saturating_add(1u32.into())); + CurrentEpochInfo::::set(EpochInfo { epoch_start: current_block }); + T::WeightInfo::start_new_epoch_if_needed() + } else { + // 1 for get_current_epoch_info, 1 for get_epoch_length + T::DbWeight::get().reads(2u64).saturating_add(T::DbWeight::get().writes(1)) + } + } + + fn start_new_reward_era_if_needed(current_block: BlockNumberFor) -> Weight { + let current_era_info: RewardEraInfo> = + CurrentEraInfo::::get(); // 1r + + if current_block.saturating_sub(current_era_info.started_at) >= T::EraLength::get().into() { + // 1r + let new_era_info = RewardEraInfo { + era_index: current_era_info.era_index.saturating_add(One::one()), + started_at: current_block, + }; + CurrentEraInfo::::set(new_era_info); // 1w + + // carry over the current reward pool total + let current_reward_pool_total: BalanceOf = CurrentEraProviderBoostTotal::::get(); // 1 + Self::update_provider_boost_reward_pool( + current_era_info.era_index, + current_reward_pool_total, + ); + T::WeightInfo::start_new_reward_era_if_needed() + } else { + T::DbWeight::get().reads(1) + } + } + + /// attempts to increment number of retargets this RewardEra + /// Returns: + /// Error::MaxRetargetsExceeded if they try to retarget too many times in one era. + fn update_retarget_record(staker: &T::AccountId) -> Result<(), DispatchError> { + let current_era: RewardEra = CurrentEraInfo::::get().era_index; + let mut retargets = Retargets::::get(staker).unwrap_or_default(); + ensure!(retargets.update(current_era).is_some(), Error::::MaxRetargetsExceeded); + Retargets::::set(staker, Some(retargets)); + Ok(()) + } + + /// Performs the work of withdrawing the requested amount from the old staker-provider target details, and + /// from the Provider's capacity details, and depositing it into the new staker-provider target details. + pub(crate) fn do_retarget( + staker: &T::AccountId, + from_msa: &MessageSourceId, + to_msa: &MessageSourceId, + amount: &BalanceOf, + ) -> Result<(), DispatchError> { + let staking_type = StakingAccountLedger::::get(staker).unwrap_or_default().staking_type; + let capacity_withdrawn = Self::reduce_capacity(staker, *from_msa, *amount, staking_type)?; + + let mut to_msa_target = StakingTargetLedger::::get(staker, to_msa).unwrap_or_default(); + + to_msa_target + .deposit(*amount, capacity_withdrawn) + .ok_or(ArithmeticError::Overflow)?; + + let mut capacity_details = CapacityLedger::::get(to_msa).unwrap_or_default(); + capacity_details + .deposit(amount, &capacity_withdrawn) + .ok_or(ArithmeticError::Overflow)?; + + Self::set_target_details_for(staker, *to_msa, to_msa_target); + Self::set_capacity_for(*to_msa, capacity_details); + Ok(()) + } + + /// updates or inserts a new boost history record for current_era. Pass 'add' = true for an increase (provider_boost), + /// pass 'false' for a decrease (unstake) + pub(crate) fn upsert_boost_history( + account: &T::AccountId, + current_era: RewardEra, + boost_amount: BalanceOf, + add: bool, + ) -> Result<(), DispatchError> { + let mut boost_history = ProviderBoostHistories::::get(account).unwrap_or_default(); + + let upsert_result = if add { + boost_history.add_era_balance(¤t_era, &boost_amount) + } else { + boost_history.subtract_era_balance(¤t_era, &boost_amount) + }; + match upsert_result { + Some(0usize) => ProviderBoostHistories::::remove(account), + None => return Err(DispatchError::from(Error::::EraOutOfRange)), + _ => ProviderBoostHistories::::set(account, Some(boost_history)), + } + Ok(()) + } + + pub(crate) fn has_unclaimed_rewards(account: &T::AccountId) -> bool { + let current_era = CurrentEraInfo::::get().era_index; + match ProviderBoostHistories::::get(account) { + Some(provider_boost_history) => { + match provider_boost_history.count() { + 0usize => false, + 1usize => { + // if there is just one era entry and: + // it's for the previous era, it means we've already paid out rewards for that era, or they just staked in the last era. + // or if it's for the current era, they only just started staking. + provider_boost_history + .get_entry_for_era(¤t_era.saturating_sub(1u32)) + .is_none() && provider_boost_history + .get_entry_for_era(¤t_era) + .is_none() + }, + _ => true, + } + }, + None => false, + } // 1r + } + + /// Get all unclaimed rewards information for each eligible Reward Era. + /// If no unclaimed rewards, returns empty list. + pub fn list_unclaimed_rewards( + account: &T::AccountId, + ) -> Result< + BoundedVec< + UnclaimedRewardInfo, BlockNumberFor>, + T::ProviderBoostHistoryLimit, + >, + DispatchError, + > { + if !Self::has_unclaimed_rewards(account) { + return Ok(BoundedVec::new()); + } + + let staking_history = ProviderBoostHistories::::get(account) + .ok_or(Error::::NotAProviderBoostAccount)?; // cached read + + let current_era_info = CurrentEraInfo::::get(); // cached read, ditto + let max_history: u32 = T::ProviderBoostHistoryLimit::get(); + + let start_era = current_era_info.era_index.saturating_sub(max_history); + let end_era = current_era_info.era_index.saturating_sub(One::one()); // stop at previous era + + // start with how much was staked in the era before the earliest for which there are eligible rewards. + let mut previous_amount: BalanceOf = match start_era { + 0 => 0u32.into(), + _ => staking_history.get_amount_staked_for_era(&(start_era.saturating_sub(1u32))), + }; + let mut unclaimed_rewards: BoundedVec< + UnclaimedRewardInfo, BlockNumberFor>, + T::ProviderBoostHistoryLimit, + > = BoundedVec::new(); + for reward_era in start_era..=end_era { + let staked_amount = staking_history.get_amount_staked_for_era(&reward_era); + if !staked_amount.is_zero() { + let expires_at_era = reward_era.saturating_add(max_history); + let expires_at_block = Self::block_at_end_of_era(expires_at_era); + let eligible_amount = staked_amount.min(previous_amount); + let total_for_era = + Self::get_total_stake_for_past_era(reward_era, current_era_info.era_index)?; + let earned_amount = ::RewardsProvider::era_staking_reward( + eligible_amount, + total_for_era, + T::RewardPoolPerEra::get(), + ); + unclaimed_rewards + .try_push(UnclaimedRewardInfo { + reward_era, + expires_at_block, + staked_amount, + eligible_amount, + earned_amount, + }) + .map_err(|_e| Error::::CollectionBoundExceeded)?; + // ^^ there's no good reason for this ever to fail in production but it must be handled. + previous_amount = staked_amount; + } + } // 1r * up to ProviderBoostHistoryLimit-1, if they staked every RewardEra. + Ok(unclaimed_rewards) + } + + // Returns the block number for the end of the provided era. Assumes `era` is at least this + // era or in the future + pub(crate) fn block_at_end_of_era(era: RewardEra) -> BlockNumberFor { + let current_era_info = CurrentEraInfo::::get(); + let era_length: BlockNumberFor = T::EraLength::get().into(); + + let era_diff = if current_era_info.era_index.eq(&era) { + 1u32 + } else { + era.saturating_sub(current_era_info.era_index).saturating_add(1u32) + }; + current_era_info.started_at + era_length.mul(era_diff.into()) - 1u32.into() + } + + // Figure out the history chunk that a given era is in and pull out the total stake for that era. + pub(crate) fn get_total_stake_for_past_era( + reward_era: RewardEra, + current_era: RewardEra, + ) -> Result, DispatchError> { + // Make sure that the past era is not too old + let era_range = current_era.saturating_sub(reward_era); + ensure!( + current_era.gt(&reward_era) && era_range.le(&T::ProviderBoostHistoryLimit::get()), + Error::::EraOutOfRange + ); + + let chunk_idx: ChunkIndex = Self::get_chunk_index_for_era(reward_era); + let reward_pool_chunk = ProviderBoostRewardPools::::get(chunk_idx).unwrap_or_default(); // 1r + let total_for_era = + reward_pool_chunk.total_for_era(&reward_era).ok_or(Error::::EraOutOfRange)?; + Ok(*total_for_era) + } + + /// Get the index of the chunk for a given era, history limit, and chunk length + /// Example with history limit of 6 and chunk length 3: + /// - Arrange the chunks such that we overwrite a complete chunk only when it is not needed + /// - The cycle is thus era modulo (history limit + chunk length) + /// - `[0,1,2],[3,4,5],[6,7,8],[]` + /// + /// Note Chunks stored = (History Length / Chunk size) + 1 + /// - The second step is which chunk to add to: + /// - Divide the cycle by the chunk length and take the floor + /// - Floor(5 / 3) = 1 + /// + /// Chunk Index = Floor((era % (History Length + chunk size)) / chunk size) + pub(crate) fn get_chunk_index_for_era(era: RewardEra) -> u32 { + let history_limit: u32 = T::ProviderBoostHistoryLimit::get(); + let chunk_len = T::RewardPoolChunkLength::get(); + let era_u32: u32 = era; + + // Add one chunk so that we always have the full history limit in our chunks + let cycle: u32 = era_u32 % history_limit.saturating_add(chunk_len); + cycle.saturating_div(chunk_len) + } + + // This is where the reward pool gets updated. + pub(crate) fn update_provider_boost_reward_pool(era: RewardEra, boost_total: BalanceOf) { + // Current era is this era + let chunk_idx: ChunkIndex = Self::get_chunk_index_for_era(era); + let mut new_chunk = ProviderBoostRewardPools::::get(chunk_idx).unwrap_or_default(); // 1r + + // If it is full we are resetting. + // This assumes that the chunk length is a divisor of the history limit + if new_chunk.is_full() { + new_chunk = RewardPoolHistoryChunk::new(); + }; + + if new_chunk.try_insert(era, boost_total).is_err() { + // Handle the error case that should never happen + log::warn!("could not insert a new chunk into provider boost reward pool") + } + ProviderBoostRewardPools::::set(chunk_idx, Some(new_chunk)); // 1w + } + fn do_claim_rewards(staker: &T::AccountId) -> Result, DispatchError> { + let rewards = Self::list_unclaimed_rewards(staker)?; + ensure!(!rewards.len().is_zero(), Error::::NoRewardsEligibleToClaim); + let zero_balance: BalanceOf = 0u32.into(); + let total_to_mint: BalanceOf = rewards + .iter() + .fold(zero_balance, |acc, reward_info| acc.saturating_add(reward_info.earned_amount)); + ensure!(total_to_mint.gt(&Zero::zero()), Error::::NoRewardsEligibleToClaim); + let _minted_unused = T::Currency::mint_into(staker, total_to_mint)?; + + let mut new_history: ProviderBoostHistory = ProviderBoostHistory::new(); + let last_staked_amount = + rewards.last().unwrap_or(&UnclaimedRewardInfo::default()).staked_amount; + let current_era = CurrentEraInfo::::get().era_index; + // We have already paid out for the previous era. Put one entry for the previous era as if that is when they staked, + // so they will be credited for current_era. + ensure!( + new_history + .add_era_balance(¤t_era.saturating_sub(1u32), &last_staked_amount) + .is_some(), + Error::::CollectionBoundExceeded + ); + ProviderBoostHistories::::set(staker, Some(new_history)); + + Ok(total_to_mint) + } +} + +/// Nontransferable functions are intended for capacity spend and recharge. +/// Implementations of Nontransferable MUST NOT be concerned with StakingType. +impl Nontransferable for Pallet { + type Balance = BalanceOf; + + /// Return the remaining capacity for the Provider MSA Id + fn balance(msa_id: MessageSourceId) -> Self::Balance { + match CapacityLedger::::get(msa_id) { + Some(capacity_details) => capacity_details.remaining_capacity, + None => BalanceOf::::zero(), + } + } + + fn replenishable_balance(msa_id: MessageSourceId) -> Self::Balance { + match CapacityLedger::::get(msa_id) { + Some(capacity_details) => capacity_details.total_capacity_issued, + None => BalanceOf::::zero(), + } + } + + /// Spend capacity: reduce remaining capacity by the given amount + fn deduct(msa_id: MessageSourceId, amount: Self::Balance) -> Result<(), DispatchError> { + let mut capacity_details = + CapacityLedger::::get(msa_id).ok_or(Error::::TargetCapacityNotFound)?; + + capacity_details + .deduct_capacity_by_amount(amount) + .map_err(|_| Error::::InsufficientCapacityBalance)?; + + Self::set_capacity_for(msa_id, capacity_details); + + Self::deposit_event(Event::CapacityWithdrawn { msa_id, amount }); + Ok(()) + } + + /// Increase all totals for the MSA's CapacityDetails. + fn deposit( + msa_id: MessageSourceId, + token_amount: Self::Balance, + capacity_amount: Self::Balance, + ) -> Result<(), DispatchError> { + let mut capacity_details = + CapacityLedger::::get(msa_id).ok_or(Error::::TargetCapacityNotFound)?; + capacity_details.deposit(&token_amount, &capacity_amount); + Self::set_capacity_for(msa_id, capacity_details); + Ok(()) + } +} + +impl Replenishable for Pallet { + type Balance = BalanceOf; + + fn replenish_all_for(msa_id: MessageSourceId) -> Result<(), DispatchError> { + let mut capacity_details = + CapacityLedger::::get(msa_id).ok_or(Error::::TargetCapacityNotFound)?; + + capacity_details.replenish_all(&CurrentEpoch::::get()); + + Self::set_capacity_for(msa_id, capacity_details); + + Ok(()) + } + + /// Change: now calls new fn replenish_by_amount on the capacity_details, + /// which does what this (actually Self::deposit) used to do + /// Currently unused. + fn replenish_by_amount( + msa_id: MessageSourceId, + amount: Self::Balance, + ) -> Result<(), DispatchError> { + let mut capacity_details = + CapacityLedger::::get(msa_id).ok_or(Error::::TargetCapacityNotFound)?; + capacity_details.replenish_by_amount(amount, &CurrentEpoch::::get()); + Ok(()) + } + + fn can_replenish(msa_id: MessageSourceId) -> bool { + if let Some(capacity_details) = CapacityLedger::::get(msa_id) { + return capacity_details.can_replenish(CurrentEpoch::::get()); + } + false + } +} + +impl ProviderBoostRewardsProvider for Pallet { + type Balance = BalanceOf; + + fn reward_pool_size(_total_staked: Self::Balance) -> Self::Balance { + T::RewardPoolPerEra::get() + } + + /// Calculate the reward for a single era. We don't care about the era number, + /// just the values. + fn era_staking_reward( + era_amount_staked: Self::Balance, + era_total_staked: Self::Balance, + era_reward_pool_size: Self::Balance, + ) -> Self::Balance { + let capped_reward = T::RewardPercentCap::get().mul(era_amount_staked); + let proportional_reward = era_reward_pool_size + .saturating_mul(era_amount_staked) + .checked_div(&era_total_staked) + .unwrap_or_else(Zero::zero); + proportional_reward.min(capped_reward) + } + + /// How much, as a percentage of staked token, to boost a targeted Provider when staking. + fn capacity_boost(amount: Self::Balance) -> Self::Balance { + Perbill::from_percent(STAKED_PERCENTAGE_TO_BOOST).mul(amount) + } +} diff --git a/pallets/capacity/src/runtime-api/Cargo.toml b/pallets/capacity/src/runtime-api/Cargo.toml new file mode 100644 index 0000000000..ae85e3b7b9 --- /dev/null +++ b/pallets/capacity/src/runtime-api/Cargo.toml @@ -0,0 +1,28 @@ +[package] +name = "pallet-capacity-runtime-api" +version = "0.0.0" +description = "A package that adds Runtime Api for the Capacity pallet" +authors = ["Frequency"] +license = "Apache-2.0" +publish = false +homepage = "https://frequency.xyz" +repository = "https://github.com/frequency-chain/frequency/" +edition = "2021" + + +[dependencies] +parity-scale-codec = { workspace = true, features = ["derive"] } +sp-api = { workspace = true, default-features = false } +sp-runtime = { workspace = true, default-features = false } +common-primitives = { path="../../../../common/primitives", default-features = false} + +[features] +default = ["std"] +std = [ + "parity-scale-codec/std", + "sp-api/std", + "sp-runtime/std" +] + +[lints] +workspace = true diff --git a/pallets/capacity/src/runtime-api/src/lib.rs b/pallets/capacity/src/runtime-api/src/lib.rs new file mode 100644 index 0000000000..75c1b100f3 --- /dev/null +++ b/pallets/capacity/src/runtime-api/src/lib.rs @@ -0,0 +1,43 @@ +#![cfg_attr(not(feature = "std"), no_std)] +#![allow(clippy::too_many_arguments)] +#![allow(clippy::unnecessary_mut_passed)] +#![allow(rustdoc::bare_urls)] +// Strong Documentation Lints +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + missing_docs +)] + +//! Runtime API definition for [Capacity](../pallet_capacity/index.html) +//! +//! This api must be implemented by the node runtime. +//! Runtime APIs Provide: +//! - An interface between the runtime and Custom RPCs. +//! - Runtime interfaces for end users beyond just State Queries + +use common_primitives::capacity::UnclaimedRewardInfo; +use parity_scale_codec::Codec; +use sp_runtime::traits::MaybeDisplay; +extern crate alloc; +use alloc::vec::Vec; + +// Here we declare the runtime API. It is implemented it the `impl` block in +// runtime files (the `runtime` folder) +sp_api::decl_runtime_apis! { + /// Runtime Version for Capacity + /// - MUST be incremented if anything changes + /// - See: https://paritytech.github.io/polkadot/doc/polkadot_primitives/runtime_api/index.html + #[api_version(1)] + /// Runtime APIs for [Capacity](../pallet_capacity/index.html) + pub trait CapacityRuntimeApi where + AccountId: Codec + MaybeDisplay, + Balance: Codec + MaybeDisplay, + BlockNumber: Codec + MaybeDisplay, + { + // state_call method: CapacityRuntimeApi_list_unclaimed_rewards + /// Get the list of unclaimed rewards information for each eligible Reward Era. + fn list_unclaimed_rewards(who: AccountId) -> Vec>; + } +} diff --git a/pallets/capacity/src/tests/capacity_details_tests.rs b/pallets/capacity/src/tests/capacity_details_tests.rs new file mode 100644 index 0000000000..817367aa95 --- /dev/null +++ b/pallets/capacity/src/tests/capacity_details_tests.rs @@ -0,0 +1,20 @@ +use super::mock::*; +use crate::*; + +#[test] +fn impl_staking_capacity_details_deposit() { + let mut capacity_details = + CapacityDetails::, ::EpochNumber>::default(); + + assert_eq!(capacity_details.deposit(&10, &1), Some(())); + + assert_eq!( + capacity_details, + CapacityDetails::, ::EpochNumber> { + total_tokens_staked: 10u64, + remaining_capacity: 1u64, + total_capacity_issued: 1u64, + last_replenished_epoch: 0u32 + } + ) +} diff --git a/pallets/capacity/src/tests/change_staking_target_tests.rs b/pallets/capacity/src/tests/change_staking_target_tests.rs new file mode 100644 index 0000000000..b664cc792a --- /dev/null +++ b/pallets/capacity/src/tests/change_staking_target_tests.rs @@ -0,0 +1,459 @@ +use super::{ + mock::*, + testing_utils::{capacity_events, setup_provider}, +}; +use crate::*; +use common_primitives::msa::MessageSourceId; +use frame_support::{assert_noop, assert_ok, traits::Get}; + +// staker is unused unless amount > 0 +type TestCapacityDetails = CapacityDetails, u32>; +type TestTargetDetails = StakingTargetDetails>; + +fn assert_capacity_details( + msa_id: MessageSourceId, + remaining_capacity: u64, + total_tokens_staked: u64, + total_capacity_issued: u64, +) { + let expected_from_details: TestCapacityDetails = CapacityDetails { + remaining_capacity, + total_tokens_staked, + total_capacity_issued, + last_replenished_epoch: 0, + }; + let from_capacity_details: TestCapacityDetails = CapacityLedger::::get(msa_id).unwrap(); + assert_eq!(from_capacity_details, expected_from_details); +} + +fn assert_target_details(staker: u64, msa_id: MessageSourceId, amount: u64, capacity: u64) { + let expected_from_target_details: TestTargetDetails = StakingTargetDetails { amount, capacity }; + let from_target_details = StakingTargetLedger::::get(staker, msa_id).unwrap(); + assert_eq!(from_target_details, expected_from_target_details); +} + +#[test] +fn do_retarget_happy_path() { + new_test_ext().execute_with(|| { + let staker = 10_000; + let from_msa: MessageSourceId = 1; + let from_amount = 600u64; + let to_amount = 300u64; + let to_msa: MessageSourceId = 2; + let staking_type = StakingType::ProviderBoost; + setup_provider(&staker, &from_msa, &from_amount, staking_type); + setup_provider(&staker, &to_msa, &to_amount, staking_type); + + // retarget half the stake to to_msa + assert_ok!(Capacity::do_retarget(&staker, &from_msa, &to_msa, &to_amount)); + + // expect from stake amounts to be halved + assert_capacity_details(from_msa, 15, 300, 15); + + // expect to stake amounts to be increased by the retarget amount + assert_capacity_details(to_msa, 30, 600, 30); + + assert_target_details(staker, from_msa, 300, 15); + + assert_target_details(staker, to_msa, 600, 30); + }) +} + +#[test] +fn do_retarget_flip_flop() { + new_test_ext().execute_with(|| { + let staker = 10_000; + let from_msa: MessageSourceId = 1; + let from_amount = 600u64; + let to_amount = 300u64; + let to_msa: MessageSourceId = 2; + setup_provider(&staker, &from_msa, &from_amount, StakingType::ProviderBoost); + setup_provider(&staker, &to_msa, &to_amount, StakingType::ProviderBoost); + + for i in 0..4 { + if i % 2 == 0 { + assert_ok!(Capacity::do_retarget(&staker, &from_msa, &to_msa, &to_amount,)); + } else { + assert_ok!(Capacity::do_retarget(&staker, &to_msa, &from_msa, &to_amount,)); + } + } + assert_capacity_details(from_msa, 30, 600, 30); + assert_capacity_details(to_msa, 15, 300, 15); + }) +} + +#[test] +// check that no capacity is minted or burned just by retargeting. +fn check_retarget_rounding_errors() { + new_test_ext().execute_with(|| { + let staker = 10_000; + let from_msa: MessageSourceId = 1; + let from_amount = 666u64; + let to_amount = 301u64; + let to_msa: MessageSourceId = 2; + + setup_provider(&staker, &from_msa, &from_amount, StakingType::ProviderBoost); + setup_provider(&staker, &to_msa, &to_amount, StakingType::ProviderBoost); + assert_capacity_details(from_msa, 33, 666, 33); + assert_capacity_details(to_msa, 15, 301, 15); + // 666+301= 967, 3+1=4 + + assert_ok!(Capacity::do_retarget(&staker, &from_msa, &to_msa, &301u64)); + assert_capacity_details(from_msa, 18, 365, 18); + assert_capacity_details(to_msa, 30, 602, 30); + // 602+365 = 967, 3+1 = 4 + + assert_ok!(Capacity::do_retarget(&staker, &to_msa, &from_msa, &151u64)); + assert_capacity_details(from_msa, 26, 516, 26); + assert_capacity_details(to_msa, 22, 451, 22); + // 451+516 = 967, 2+2 = 4 + }) +} + +fn assert_total_capacity(msas: Vec, total: u64) { + let sum = msas + .into_iter() + .map(|a| { + let capacity_details: TestCapacityDetails = CapacityLedger::::get(a).unwrap(); + capacity_details.total_capacity_issued + }) + .sum::(); + assert_eq!(total, sum); +} + +// Tests that the total stake remains the same after retargets +#[test] +fn check_retarget_multiple_stakers() { + new_test_ext().execute_with(|| { + let staker_10k = 10_000; + let staker_600 = 600u64; + let staker_500 = 500u64; + let staker_400 = 400u64; + + let from_msa: MessageSourceId = 1; + let to_msa: MessageSourceId = 2; + let amt1 = 192u64; + let amt2 = 313u64; + + setup_provider(&staker_10k, &from_msa, &647u64, StakingType::ProviderBoost); + setup_provider(&staker_500, &to_msa, &293u64, StakingType::ProviderBoost); + assert_ok!(Capacity::provider_boost(RuntimeOrigin::signed(staker_600), from_msa, 479u64,)); + assert_ok!(Capacity::provider_boost(RuntimeOrigin::signed(staker_400), to_msa, 211u64,)); + + // 647 * .10 * .5 = 32 (rounded) + // 293 * .10 * .5 = 15 (rounded) + // 479 * .10 * .5 = 24 (round) + // 211 * .10 * .5 = 10 (rounded down) + // total capacity should be sum of above + let expected_total = 81u64; + + assert_total_capacity(vec![from_msa, to_msa], expected_total); + + assert_ok!(Capacity::do_retarget(&staker_10k, &from_msa, &to_msa, &amt2)); + assert_ok!(Capacity::do_retarget(&staker_600, &from_msa, &to_msa, &amt1)); + assert_ok!(Capacity::do_retarget(&staker_500, &to_msa, &from_msa, &amt1)); + assert_ok!(Capacity::do_retarget(&staker_400, &to_msa, &from_msa, &amt1)); + assert_total_capacity(vec![from_msa, to_msa], expected_total); + }) +} + +#[test] +fn do_retarget_deletes_staking_target_details_if_zero_balance() { + new_test_ext().execute_with(|| { + let staker = 200u64; + let from_msa: MessageSourceId = 1; + let to_msa: MessageSourceId = 2; + let amount = 10u64; + setup_provider(&staker, &from_msa, &amount, StakingType::MaximumCapacity); + setup_provider(&staker, &to_msa, &amount, StakingType::MaximumCapacity); + + // stake additional to provider from another Msa, doesn't matter which type. + // total staked to from_msa is now 22u64. + assert_ok!(Capacity::stake(RuntimeOrigin::signed(300u64), from_msa, 12u64,)); + + assert_ok!(Capacity::do_retarget(&staker, &from_msa, &to_msa, &amount)); + + let expected_from_details: TestCapacityDetails = CapacityDetails { + remaining_capacity: 1, + total_tokens_staked: 12, + total_capacity_issued: 1, + last_replenished_epoch: 0, + }; + let from_capacity_details: TestCapacityDetails = + CapacityLedger::::get(from_msa).unwrap(); + assert_eq!(from_capacity_details, expected_from_details); + + let expected_to_details: TestCapacityDetails = CapacityDetails { + remaining_capacity: 2, + total_tokens_staked: 2 * amount, + total_capacity_issued: 2, + last_replenished_epoch: 0, + }; + + let to_capacity_details = CapacityLedger::::get(to_msa).unwrap(); + assert_eq!(to_capacity_details, expected_to_details); + + assert!(StakingTargetLedger::::get(staker, from_msa).is_none()); + + let expected_to_target_details: TestTargetDetails = + StakingTargetDetails { amount: 2 * amount, capacity: 2 }; + let to_target_details = StakingTargetLedger::::get(staker, to_msa).unwrap(); + assert_eq!(to_target_details, expected_to_target_details); + + assert!(StakingTargetLedger::::get(staker, from_msa).is_none()); + }) +} + +#[test] +fn change_staking_starget_emits_event_on_success() { + new_test_ext().execute_with(|| { + let staker = 200u64; + let from_msa: MessageSourceId = 1; + let from_amount = 20u64; + let to_amount = from_amount / 2; + let to_msa: MessageSourceId = 2; + setup_provider(&staker, &from_msa, &from_amount, StakingType::ProviderBoost); + setup_provider(&staker, &to_msa, &to_amount, StakingType::ProviderBoost); + + assert_ok!(Capacity::change_staking_target( + RuntimeOrigin::signed(staker), + from_msa, + to_msa, + to_amount + )); + let events = capacity_events(); + + assert_eq!( + events.last().unwrap(), + &Event::StakingTargetChanged { account: staker, from_msa, to_msa, amount: to_amount } + ); + }) +} + +#[test] +fn change_staking_target_errors_if_too_many_changes_before_thaw() { + new_test_ext().execute_with(|| { + let staker = 200u64; + let from_msa: MessageSourceId = 1; + let to_msa: MessageSourceId = 2; + + let max_chunks: u32 = ::MaxRetargetsPerRewardEra::get(); + let staking_amount = ((max_chunks + 2u32) * 10u32) as u64; + setup_provider(&staker, &from_msa, &staking_amount, StakingType::ProviderBoost); + setup_provider(&staker, &to_msa, &10u64, StakingType::ProviderBoost); + + let retarget_amount = 10u64; + for _i in 0..max_chunks { + assert_ok!(Capacity::change_staking_target( + RuntimeOrigin::signed(staker), + from_msa, + to_msa, + retarget_amount + )); + } + + assert_noop!( + Capacity::change_staking_target( + RuntimeOrigin::signed(staker), + from_msa, + to_msa, + retarget_amount + ), + Error::::MaxRetargetsExceeded + ); + }); +} + +#[test] +fn change_staking_target_garbage_collects_thawed_chunks() { + new_test_ext().execute_with(|| { + let staked_amount = 50u64; + let staking_account = 200u64; + let from_target: MessageSourceId = 3; + let to_target: MessageSourceId = 4; + + setup_provider(&staking_account, &from_target, &staked_amount, StakingType::ProviderBoost); + setup_provider(&staking_account, &to_target, &staked_amount, StakingType::ProviderBoost); + + CurrentEraInfo::::set(RewardEraInfo { era_index: 20, started_at: 100 }); + let max_chunks = ::MaxUnlockingChunks::get(); + for _i in 0..max_chunks { + assert_ok!(Capacity::change_staking_target( + RuntimeOrigin::signed(staking_account), + from_target, + to_target, + 10u64, + )); + } + CurrentEraInfo::::set(RewardEraInfo { era_index: 25, started_at: 100 }); + assert_ok!(Capacity::change_staking_target( + RuntimeOrigin::signed(staking_account), + from_target, + to_target, + 10u64, + )); + }) +} + +#[test] +fn change_staking_target_test_parametric_validity() { + new_test_ext().execute_with(|| { + let staked_amount = 10u64; + let from_account = 200u64; + + StakingAccountLedger::::insert( + from_account, + StakingDetails { active: 20, staking_type: StakingType::ProviderBoost }, + ); + let from_account_not_staking = 100u64; + let from_target_not_staked: MessageSourceId = 1; + let to_target_not_provider: MessageSourceId = 2; + let from_target: MessageSourceId = 3; + let to_target: MessageSourceId = 4; + setup_provider(&from_account, &from_target_not_staked, &0u64, StakingType::ProviderBoost); + setup_provider(&from_account, &from_target, &staked_amount, StakingType::ProviderBoost); + setup_provider(&from_account, &to_target, &staked_amount, StakingType::ProviderBoost); + + assert_ok!(Capacity::provider_boost( + RuntimeOrigin::signed(from_account), + from_target, + staked_amount, + )); + + struct TestCase { + from_account: u64, + from_target: MessageSourceId, + to_target: MessageSourceId, + retarget_amount: u64, + expected_err: Error, + } + let test_cases: Vec = vec![ + // from is a provider but account is not staking to it + TestCase { + from_account, + from_target: from_target_not_staked, + to_target, + retarget_amount: staked_amount, + expected_err: Error::::StakerTargetRelationshipNotFound, + }, + // from_account is not staking at all. + TestCase { + from_account: from_account_not_staking, + from_target, + to_target, + retarget_amount: staked_amount, + expected_err: Error::::StakerTargetRelationshipNotFound, + }, + // from and to providers are valid, but zero amount too small + TestCase { + from_account, + from_target, + to_target, + retarget_amount: 0, + expected_err: Error::::StakingAmountBelowMinimum, + }, + // nonzero amount below minimum is still too small + TestCase { + from_account, + from_target, + to_target, + retarget_amount: 9, + expected_err: Error::::StakingAmountBelowMinimum, + }, + // account is staked with from-target, but to-target is not a provider + TestCase { + from_account, + from_target, + to_target: to_target_not_provider, + retarget_amount: staked_amount, + expected_err: Error::::InvalidTarget, + }, + // account doesn't have enough staked to make the transfer + TestCase { + from_account, + from_target, + to_target, + retarget_amount: 999, + expected_err: Error::::InsufficientStakingBalance, + }, + TestCase { + from_account, + from_target, + to_target: from_target, + retarget_amount: 999, + expected_err: Error::::CannotRetargetToSameProvider, + }, + ]; + + for tc in test_cases { + assert_noop!( + Capacity::change_staking_target( + RuntimeOrigin::signed(tc.from_account), + tc.from_target, + tc.to_target, + tc.retarget_amount, + ), + tc.expected_err + ); + } + }); +} + +#[test] +fn impl_retarget_info_errors_when_attempt_to_update_past_bounded_max() { + new_test_ext().execute_with(|| { + struct TestCase { + era: u32, + retargets: u32, + last_retarget: u32, + expected: Option<()>, + } + for tc in [ + TestCase { era: 1u32, retargets: 0u32, last_retarget: 1, expected: Some(()) }, + TestCase { era: 1u32, retargets: 1u32, last_retarget: 1, expected: Some(()) }, + TestCase { era: 1u32, retargets: 1u32, last_retarget: 3, expected: Some(()) }, + TestCase { era: 1u32, retargets: 1u32, last_retarget: 4, expected: Some(()) }, + TestCase { era: 2u32, retargets: 5u32, last_retarget: 1, expected: Some(()) }, + TestCase { era: 1u32, retargets: 5u32, last_retarget: 1, expected: None }, + ] { + let mut retarget_info: RetargetInfo = + RetargetInfo::new(tc.retargets, tc.last_retarget); + assert_eq!(retarget_info.update(tc.era), tc.expected); + } + }) +} + +#[test] +fn impl_retarget_info_updates_values_correctly() { + new_test_ext().execute_with(|| { + struct TestCase { + era: u32, + retargets: u32, + last_retarget: u32, + expected_retargets: u32, + } + for tc in [ + TestCase { era: 5, retargets: 0, last_retarget: 5, expected_retargets: 1 }, + TestCase { era: 1, retargets: 1, last_retarget: 1, expected_retargets: 2 }, + TestCase { era: 3, retargets: 1, last_retarget: 1, expected_retargets: 1 }, + TestCase { era: 2, retargets: 5, last_retarget: 1, expected_retargets: 1 }, + TestCase { era: 1, retargets: 5, last_retarget: 1, expected_retargets: 5 }, + ] { + let mut retarget_info: RetargetInfo = + RetargetInfo::new(tc.retargets, tc.last_retarget); + retarget_info.update(tc.era); + assert_eq!(retarget_info.retarget_count, tc.expected_retargets); + } + }) +} + +#[test] +fn impl_retarget_chunks_cleanup_when_new_reward_era() { + new_test_ext().execute_with(|| { + let current_era = 2u32; + let mut retarget_info: RetargetInfo = RetargetInfo::new(5, 1); + assert!(retarget_info.update(current_era).is_some()); + let expected: RetargetInfo = RetargetInfo::new(1, 2); + assert_eq!(retarget_info, expected); + }); +} diff --git a/pallets/capacity/src/tests/claim_staking_rewards_tests.rs b/pallets/capacity/src/tests/claim_staking_rewards_tests.rs new file mode 100644 index 0000000000..d66d8dbf29 --- /dev/null +++ b/pallets/capacity/src/tests/claim_staking_rewards_tests.rs @@ -0,0 +1,158 @@ +use crate::{ + tests::{ + mock::{ + assert_transferable, get_balance, new_test_ext, Capacity, RuntimeOrigin, System, Test, + }, + testing_utils::{run_to_block, setup_provider}, + }, + CurrentEraInfo, Error, Event, + Event::ProviderBoostRewardClaimed, + MessageSourceId, ProviderBoostHistories, + StakingType::*, +}; +use frame_support::{assert_noop, assert_ok}; + +#[test] +fn claim_staking_rewards_leaves_one_history_item_for_current_era() { + new_test_ext().execute_with(|| { + let account = 10_000u64; + let target: MessageSourceId = 10; + let amount = 1_000u64; + + setup_provider(&account, &target, &amount, ProviderBoost); + run_to_block(31); + assert_eq!(CurrentEraInfo::::get().era_index, 3u32); + + let current_history = ProviderBoostHistories::::get(account).unwrap(); + assert_eq!(current_history.count(), 1usize); + let history_item = current_history.get_entry_for_era(&0u32).unwrap(); + assert_eq!(*history_item, amount); + }) +} + +#[test] +fn claim_staking_rewards_allows_unstake() { + new_test_ext().execute_with(|| { + let account = 10_000u64; + let target: MessageSourceId = 10; + let amount = 1_000u64; + + setup_provider(&account, &target, &amount, ProviderBoost); + run_to_block(31); + assert_noop!( + Capacity::unstake(RuntimeOrigin::signed(account), target, 100u64), + Error::::MustFirstClaimRewards + ); + assert_ok!(Capacity::claim_staking_rewards(RuntimeOrigin::signed(account))); + assert_ok!(Capacity::unstake(RuntimeOrigin::signed(account), target, 400u64)); + }) +} + +#[test] +fn claim_staking_rewards_mints_and_transfers_expected_total() { + new_test_ext().execute_with(|| { + let account = 10_000u64; + let target: MessageSourceId = 10; + let amount = 1_000u64; + + setup_provider(&account, &target, &amount, ProviderBoost); + run_to_block(31); + assert_eq!(CurrentEraInfo::::get().era_index, 3u32); + assert_ok!(Capacity::claim_staking_rewards(RuntimeOrigin::signed(account))); + System::assert_last_event( + Event::::ProviderBoostRewardClaimed { account, reward_amount: 8u64 }.into(), + ); + + // should have 2 era's worth of payouts: 4 each for eras 1, 2 + assert_eq!(get_balance::(&account), 10_008u64); + + // the reward value is unlocked + assert_transferable::(&account, 8u64); + + run_to_block(41); + assert_eq!(CurrentEraInfo::::get().era_index, 4u32); + assert_ok!(Capacity::claim_staking_rewards(RuntimeOrigin::signed(account))); + // rewards available for one more era + System::assert_last_event( + ProviderBoostRewardClaimed { account, reward_amount: 4u64 }.into(), + ); + // should have 4 for eras 1-3 + assert_eq!(get_balance::(&account), 10_012u64); + assert_transferable::(&account, 12u64); + }) +} + +#[test] +fn claim_staking_rewards_has_expected_total_when_other_stakers() { + new_test_ext().execute_with(|| { + let account = 10_000u64; + let target: MessageSourceId = 10; + let amount = 1_000u64; + + let other_staker = 600_u64; + let other_amount = 300_u64; + setup_provider(&other_staker, &target, &other_amount, ProviderBoost); + assert_ok!(Capacity::provider_boost(RuntimeOrigin::signed(account), target, amount)); + run_to_block(31); // 4 + assert_ok!(Capacity::claim_staking_rewards(RuntimeOrigin::signed(account))); + assert_eq!(get_balance::(&account), 10_008u64); + }) +} + +#[test] +fn claim_staking_rewards_has_expected_total_if_amount_should_be_capped() { + new_test_ext().execute_with(|| { + let account = 10_000u64; + let target: MessageSourceId = 10; + let amount = 9_900u64; + setup_provider(&account, &target, &amount, ProviderBoost); + run_to_block(31); + assert_ok!(Capacity::claim_staking_rewards(RuntimeOrigin::signed(account))); + assert_eq!(get_balance::(&account), 10_076u64); // cap is 0.38%,*2 = 76, rounded + assert_transferable::(&account, 76u64); + }) +} + +#[test] +fn claim_staking_rewards_fails_if_no_available_rewards() { + new_test_ext().execute_with(|| { + let account = 10_000u64; + let target: MessageSourceId = 10; + let amount = 1_000u64; + + setup_provider(&account, &target, &amount, ProviderBoost); + // Unclaimed rewards should have zero length b/c it's still Era 1. + // Nothing will be in history + assert_noop!( + Capacity::claim_staking_rewards(RuntimeOrigin::signed(account)), + Error::::NoRewardsEligibleToClaim + ); + + run_to_block(15); // Era is 2, but still not available for staking rewards until era 3. + assert_noop!( + Capacity::claim_staking_rewards(RuntimeOrigin::signed(account)), + Error::::NoRewardsEligibleToClaim + ); + }) +} + +#[test] +fn claim_staking_rewards_fails_if_stake_maximized() { + new_test_ext().execute_with(|| { + let account = 10_000u64; + let target: MessageSourceId = 10; + let amount = 1_000u64; + + assert_noop!( + Capacity::claim_staking_rewards(RuntimeOrigin::signed(account)), + Error::::NotAProviderBoostAccount + ); + + setup_provider(&account, &target, &amount, MaximumCapacity); + + assert_noop!( + Capacity::claim_staking_rewards(RuntimeOrigin::signed(account)), + Error::::NotAProviderBoostAccount + ); + }) +} diff --git a/pallets/capacity/src/tests/epochs_tests.rs b/pallets/capacity/src/tests/epochs_tests.rs new file mode 100644 index 0000000000..fec2863253 --- /dev/null +++ b/pallets/capacity/src/tests/epochs_tests.rs @@ -0,0 +1,112 @@ +use super::mock::*; +use crate::{ + tests::testing_utils::{run_to_block, system_run_to_block}, + Config, CurrentEpoch, CurrentEpochInfo, EpochLength, Error, Event, +}; +use frame_support::{assert_noop, assert_ok, traits::Get}; +use frame_system::pallet_prelude::BlockNumberFor; +use sp_runtime::DispatchError::BadOrigin; + +#[test] +fn set_epoch_length_happy_path() { + new_test_ext().execute_with(|| { + let epoch_length: BlockNumberFor = 9; + assert_ok!(Capacity::set_epoch_length(RuntimeOrigin::root(), epoch_length)); + + let storage_epoch_length: BlockNumberFor = EpochLength::::get(); + assert_eq!(epoch_length, storage_epoch_length); + + System::assert_last_event(Event::EpochLengthUpdated { blocks: epoch_length }.into()); + }); +} + +#[test] +fn set_epoch_length_errors_when_greater_than_max_epoch_length() { + new_test_ext().execute_with(|| { + let epoch_length: BlockNumberFor = 101; + + assert_noop!( + Capacity::set_epoch_length(RuntimeOrigin::root(), epoch_length), + Error::::MaxEpochLengthExceeded + ); + }); +} + +#[test] +fn set_epoch_length_errors_when_not_submitted_as_root() { + new_test_ext().execute_with(|| { + let epoch_length: BlockNumberFor = 11; + + assert_noop!(Capacity::set_epoch_length(RuntimeOrigin::signed(1), epoch_length), BadOrigin); + }); +} + +#[test] +fn get_epoch_length_should_return_max_epoch_length_when_unset() { + new_test_ext().execute_with(|| { + let epoch_length: BlockNumberFor = EpochLength::::get(); + let max_epoch_length: BlockNumberFor = ::MaxEpochLength::get(); + + assert_eq!(epoch_length, max_epoch_length); + }); +} +#[test] +fn get_epoch_length_should_return_storage_epoch_length() { + new_test_ext().execute_with(|| { + EpochLength::::set(101u32); + let epoch_length: BlockNumberFor = EpochLength::::get(); + + assert_eq!(epoch_length, 101u32); + }); +} + +#[test] +fn start_new_epoch_if_needed_when_not_starting_from_zero() { + new_test_ext().execute_with(|| { + EpochLength::::set(100u32); + let epoch_info = CurrentEpochInfo::::get(); + let cur_epoch = CurrentEpoch::::get(); + // Run the system to block 999 before initializing Capacity to emulate + // deploying to an existing network where blockheight is greater than 0. + system_run_to_block(999); + run_to_block(1000); + let after_epoch = CurrentEpoch::::get(); + let after_epoch_info = CurrentEpochInfo::::get(); + assert_eq!(epoch_info.epoch_start, 0); + assert_eq!(after_epoch_info.epoch_start, 1000); + assert_eq!(after_epoch, cur_epoch + 1); + }) +} + +#[test] +fn start_new_epoch_if_needed_when_epoch_length_changes() { + new_test_ext().execute_with(|| { + EpochLength::::set(100u32); + // Starting block = 100 + system_run_to_block(100); + let epoch_info = CurrentEpochInfo::::get(); + let cur_epoch = CurrentEpoch::::get(); + assert_eq!(epoch_info.epoch_start, 0); + assert_eq!(cur_epoch, 0); + run_to_block(150); + let middle_epoch = CurrentEpoch::::get(); + let middle_epoch_info = CurrentEpochInfo::::get(); + assert_eq!(middle_epoch, 1); + assert_eq!(middle_epoch_info.epoch_start, 101); + // Change epoch length = 20 + EpochLength::::set(20u32); + run_to_block(151); + let after_epoch = CurrentEpoch::::get(); + let after_epoch_info = CurrentEpochInfo::::get(); + // epoch 1 starts at 101 + // epoch 2 starts at 151 (First block after epoch length change) + assert_eq!(after_epoch_info.epoch_start, 151); + assert_eq!(after_epoch, 2); + run_to_block(171); + let last_epoch = CurrentEpoch::::get(); + let last_epoch_info = CurrentEpochInfo::::get(); + assert_eq!(last_epoch, 3); + // epoch 3 starts at 171 (151 + 20) + assert_eq!(last_epoch_info.epoch_start, 171); + }) +} diff --git a/pallets/capacity/src/tests/eras_tests.rs b/pallets/capacity/src/tests/eras_tests.rs new file mode 100644 index 0000000000..b1d2d1de7d --- /dev/null +++ b/pallets/capacity/src/tests/eras_tests.rs @@ -0,0 +1,218 @@ +use super::mock::*; +use crate::{ + tests::testing_utils::*, BalanceOf, Config, CurrentEraInfo, CurrentEraProviderBoostTotal, + ProviderBoostRewardPools, RewardEraInfo, +}; +use common_primitives::{capacity::RewardEra, msa::MessageSourceId}; +use frame_support::{assert_ok, traits::Get}; + +pub fn boost_provider_and_run_to_end_of_era( + staker: u64, + provider_msa: MessageSourceId, + stake_amount: u64, + era: u32, +) { + assert_ok!(Capacity::provider_boost(RuntimeOrigin::signed(staker), provider_msa, stake_amount)); + // want to run to the first block of era so we get the on_initialize updates + let first_block_of_era: u32 = ((era + 1u32) * 10) + 1; + run_to_block(first_block_of_era); + let expected_stake = stake_amount * ((era + 1u32) as u64); + assert_eq!(CurrentEraProviderBoostTotal::::get(), expected_stake); + // system_run to end of era. we don't need the on_initialize updates + let era_length: RewardEra = ::EraLength::get(); + system_run_to_block(first_block_of_era + era_length - 1); +} + +#[test] +fn start_new_era_if_needed_updates_era_info() { + new_test_ext().execute_with(|| { + system_run_to_block(9); + for i in 1..=4 { + let block_decade = (i * 10) + 1; + run_to_block(block_decade); + + let current_era_info = CurrentEraInfo::::get(); + + let expected_era = i; + assert_eq!( + current_era_info, + RewardEraInfo { era_index: expected_era, started_at: block_decade } + ); + system_run_to_block(block_decade + 9); + } + }) +} + +// checks that the chunk indicated has an earliest era matching `era`, +// asserts whether it is full (or not) and asserts that its total stored matches `total` +fn assert_chunk_is_full_and_has_earliest_era_total( + chunk_index: u32, + is_full: bool, + era: RewardEra, + total: BalanceOf, +) { + let chunk = ProviderBoostRewardPools::::get(chunk_index).unwrap(); + assert_eq!(chunk.is_full(), is_full, "Chunk {:?} should be full: {:?}", chunk_index, chunk); + assert_eq!(chunk.earliest_era(), Some(&era), "Earliest era should be {:?}, {:?}", era, chunk); + assert_eq!( + chunk.total_for_era(&era), + Some(&total), + "Chunk total should be {:?}, {:?}", + total, + chunk + ); +} + +// gets the last (i.e. latest non-current) stored reward pool era, which is in chunk 0. +// asserts that it is the same as `era`, and that it has amount `total` +fn assert_last_era_total(era: RewardEra, total: BalanceOf) { + let chunk_idx = Capacity::get_chunk_index_for_era(era); + let chunk_opt = ProviderBoostRewardPools::::get(chunk_idx); + assert!(chunk_opt.is_some(), "No pool for Era: {:?} with chunk index: {:?}", era, chunk_idx); + let chunk = chunk_opt.unwrap(); + let (_earliest, latest) = chunk.era_range(); + assert_eq!(latest, era); + assert_eq!( + chunk.total_for_era(&era), + Some(&total), + "Chunk total should be {:?}, {:?}", + total, + chunk + ); +} + +fn assert_chunk_is_empty(chunk_index: u32) { + let chunk_opt = ProviderBoostRewardPools::::get(chunk_index); + if chunk_opt.is_some() { + let chunk = chunk_opt.unwrap(); + assert!( + chunk.earliest_era().is_none(), + "Earliest era for chunk {:?} should be None but it is {:?}", + chunk_index, + chunk + ) + } else { + assert!(chunk_opt.is_none(), "Expected chunk {:?} to be empty, but it's not", chunk_index); + } +} + +// Test that additional stake is carried over to the next era's RewardPoolInfo. +#[test] +fn start_new_era_if_needed_updates_reward_pool() { + new_test_ext().execute_with(|| { + system_run_to_block(8); + let staker = 10_000; + let provider_msa: MessageSourceId = 1; + let stake_amount = 100u64; + + register_provider(provider_msa, "Binky".to_string()); + + for i in 0u32..=2u32 { + boost_provider_and_run_to_end_of_era(staker, provider_msa, stake_amount, i); + } + // check that first chunk is filled correctly. + assert_chunk_is_full_and_has_earliest_era_total(0, true, 0, 100); + for i in 1u32..=4u32 { + assert_chunk_is_empty(i); + } + + for i in [3u32, 4u32, 5u32] { + boost_provider_and_run_to_end_of_era(staker, provider_msa, stake_amount, i); + } + // No change + assert_chunk_is_full_and_has_earliest_era_total(0, true, 0, 100); + // New Chunk + assert_chunk_is_full_and_has_earliest_era_total(1, true, 3, 400); + assert_chunk_is_empty(2); + assert_last_era_total(5, 600); + + for i in [6u32, 7u32, 8u32, 9u32, 10u32, 11u32, 12u32, 13u32, 14u32] { + boost_provider_and_run_to_end_of_era(staker, provider_msa, stake_amount, i); + } + // No changes + assert_chunk_is_full_and_has_earliest_era_total(0, true, 0, 100); + assert_chunk_is_full_and_has_earliest_era_total(1, true, 3, 400); + // New + assert_chunk_is_full_and_has_earliest_era_total(2, true, 6, 700); + assert_chunk_is_full_and_has_earliest_era_total(3, true, 9, 1000); + assert_chunk_is_full_and_has_earliest_era_total(4, true, 12, 1300); + assert_last_era_total(14, 1500); + + // check that it all rolls over properly. + for i in [15u32, 16u32] { + boost_provider_and_run_to_end_of_era(staker, provider_msa, stake_amount, i); + } + // No Changes in chunk content for these eras + assert_chunk_is_full_and_has_earliest_era_total(1, true, 3, 400); + assert_chunk_is_full_and_has_earliest_era_total(2, true, 6, 700); + assert_chunk_is_full_and_has_earliest_era_total(3, true, 9, 1000); + assert_chunk_is_full_and_has_earliest_era_total(4, true, 12, 1300); + // New + assert_chunk_is_full_and_has_earliest_era_total(0, false, 15, 1600); + assert_last_era_total(16, 1700); + // There shouldn't be a chunk 5 ever with this config + assert_chunk_is_empty(5); + }); +} + +#[test] +fn get_expiration_block_for_era_works() { + new_test_ext().execute_with(|| { + assert_eq!(CurrentEraInfo::::get().era_index, 0u32); + assert_eq!(Capacity::block_at_end_of_era(9u32), 100); + + set_era_and_reward_pool(7, 63, 0); + assert_eq!(Capacity::block_at_end_of_era(7u32), 72); + assert_eq!(Capacity::block_at_end_of_era(10u32), 102); + + set_era_and_reward_pool(10, 91, 0); + assert_eq!(Capacity::block_at_end_of_era(10u32), 100); + + set_era_and_reward_pool(99, 2342, 0); + assert_eq!(Capacity::block_at_end_of_era(99), 2351); + + assert_eq!(Capacity::block_at_end_of_era(108), 2441); + }) +} + +#[test] +fn get_chunk_index_for_era_works() { + new_test_ext().execute_with(|| { + #[derive(Debug)] + struct TestCase { + era: u32, + expected: u32, + } + // assuming history limit is 12, chunk length is 3 + // [1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15] + // [16],[4,5,6],[7,8,9],[10,11,12],[13,14,15] + for test in { + vec![ + TestCase { era: 0, expected: 0 }, + TestCase { era: 1, expected: 0 }, + TestCase { era: 2, expected: 0 }, + TestCase { era: 3, expected: 1 }, + TestCase { era: 4, expected: 1 }, + TestCase { era: 5, expected: 1 }, + TestCase { era: 6, expected: 2 }, + TestCase { era: 7, expected: 2 }, + TestCase { era: 8, expected: 2 }, + TestCase { era: 9, expected: 3 }, + TestCase { era: 10, expected: 3 }, + TestCase { era: 11, expected: 3 }, + TestCase { era: 12, expected: 4 }, // This is not wrong; there is an extra chunk to leave space for cycling + TestCase { era: 13, expected: 4 }, + TestCase { era: 14, expected: 4 }, + TestCase { era: 15, expected: 0 }, // So cycle restarts here, not at 12. + TestCase { era: 16, expected: 0 }, + TestCase { era: 17, expected: 0 }, + TestCase { era: 18, expected: 1 }, + TestCase { era: 22, expected: 2 }, + TestCase { era: 55, expected: 3 }, + TestCase { era: 998, expected: 2 }, + ] + } { + assert_eq!(Capacity::get_chunk_index_for_era(test.era), test.expected, "{:?}", test); + } + }) +} diff --git a/pallets/capacity/src/tests/mock.rs b/pallets/capacity/src/tests/mock.rs new file mode 100644 index 0000000000..611e140c41 --- /dev/null +++ b/pallets/capacity/src/tests/mock.rs @@ -0,0 +1,246 @@ +use crate as pallet_capacity; + +use crate::{ + tests::testing_utils::set_era_and_reward_pool, BalanceOf, Config, ProviderBoostRewardPools, + ProviderBoostRewardsProvider, RewardPoolHistoryChunk, STAKED_PERCENTAGE_TO_BOOST, +}; +use common_primitives::{ + node::{AccountId, ProposalProvider}, + schema::{SchemaId, SchemaValidator}, +}; +use common_runtime::weights; +use core::ops::Mul; +use frame_support::{ + construct_runtime, parameter_types, + traits::{ + tokens::{fungible::Inspect, WithdrawConsequence}, + ConstU16, ConstU32, ConstU64, + }, +}; +use frame_system::EnsureSigned; +use sp_core::{ConstU8, H256}; +use sp_runtime::{ + traits::{BlakeTwo256, Convert, Get, IdentityLookup}, + AccountId32, BuildStorage, DispatchError, Perbill, Permill, +}; + +type Block = frame_system::mocking::MockBlockU32; + +// Configure a mock runtime to test the pallet. +construct_runtime!( + pub enum Test + { + System: frame_system::{Pallet, Call, Config, Storage, Event}, + Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, + Msa: pallet_msa::{Pallet, Call, Storage, Event}, + Capacity: pallet_capacity::{Pallet, Call, Storage, Event, FreezeReason}, + } +); + +impl frame_system::Config for Test { + type BaseCallFilter = frame_support::traits::Everything; + type BlockWeights = (); + type BlockLength = (); + type DbWeight = (); + type RuntimeOrigin = RuntimeOrigin; + type RuntimeCall = RuntimeCall; + type Nonce = u64; + type Block = Block; + type Hash = H256; + type Hashing = BlakeTwo256; + type AccountId = u64; + type Lookup = IdentityLookup; + type RuntimeEvent = RuntimeEvent; + type RuntimeTask = RuntimeTask; + type BlockHashCount = ConstU32<250>; + type Version = (); + type PalletInfo = PalletInfo; + type AccountData = pallet_balances::AccountData; + type OnNewAccount = (); + type OnKilledAccount = (); + type SystemWeightInfo = (); + type SS58Prefix = ConstU16<42>; + type OnSetCode = (); + type MaxConsumers = frame_support::traits::ConstU32<16>; + type SingleBlockMigrations = (); + type MultiBlockMigrator = (); + type PreInherents = (); + type PostInherents = (); + type PostTransactions = (); + type ExtensionsWeightInfo = weights::frame_system_extensions::WeightInfo; +} + +impl pallet_balances::Config for Test { + type MaxReserves = (); + type ReserveIdentifier = [u8; 8]; + type MaxLocks = ConstU32<10>; + type Balance = u64; + type RuntimeEvent = RuntimeEvent; + type DustRemoval = (); + type ExistentialDeposit = ConstU64<1>; + type AccountStore = System; + type WeightInfo = (); + type FreezeIdentifier = RuntimeFreezeReason; + type MaxFreezes = ConstU32<2>; + type RuntimeHoldReason = (); + type RuntimeFreezeReason = (); + type DoneSlashHandler = (); +} + +pub type MaxSchemaGrantsPerDelegation = ConstU32<30>; + +pub struct TestAccountId; + +impl Convert for TestAccountId { + fn convert(_x: u64) -> AccountId32 { + AccountId32::new([1u8; 32]) + } +} +pub struct Schemas; +impl SchemaValidator for Schemas { + fn are_all_schema_ids_valid(_schema_id: &[SchemaId]) -> bool { + true + } + + fn set_schema_count(_n: SchemaId) {} +} +pub struct CouncilProposalProvider; + +impl ProposalProvider for CouncilProposalProvider { + fn propose( + _who: u64, + _threshold: u32, + _proposal: Box, + ) -> Result<(u32, u32), DispatchError> { + Ok((1u32, 1u32)) + } + + fn propose_with_simple_majority( + _who: u64, + _proposal: Box, + ) -> Result<(u32, u32), DispatchError> { + Ok((1u32, 1u32)) + } + + #[cfg(any(feature = "runtime-benchmarks", feature = "test"))] + fn proposal_count() -> u32 { + 1u32 + } +} + +impl pallet_msa::Config for Test { + type RuntimeEvent = RuntimeEvent; + type WeightInfo = (); + type ConvertIntoAccountId32 = TestAccountId; + type MaxPublicKeysPerMsa = ConstU8<255>; + type MaxSchemaGrantsPerDelegation = MaxSchemaGrantsPerDelegation; + type MaxProviderNameSize = ConstU32<16>; + type SchemaValidator = Schemas; + type HandleProvider = (); + type MortalityWindowSize = ConstU32<100>; + type Proposal = RuntimeCall; + type ProposalProvider = CouncilProposalProvider; + type CreateProviderViaGovernanceOrigin = EnsureSigned; + /// This MUST ALWAYS be MaxSignaturesPerBucket * NumberOfBuckets. + type MaxSignaturesStored = ConstU32<8000>; +} + +// not used yet +pub struct TestRewardsProvider {} + +impl ProviderBoostRewardsProvider for TestRewardsProvider { + type Balance = BalanceOf; + + // To reflect new economic model behavior of having a constant RewardPool amount. + fn reward_pool_size(_total_staked: Self::Balance) -> Self::Balance { + 10_000u64 + } + + // use the pallet version of the era calculation. + fn era_staking_reward( + amount_staked: Self::Balance, + total_staked: Self::Balance, + reward_pool_size: Self::Balance, + ) -> Self::Balance { + Capacity::era_staking_reward(amount_staked, total_staked, reward_pool_size) + } + + fn capacity_boost(amount: Self::Balance) -> Self::Balance { + Perbill::from_percent(STAKED_PERCENTAGE_TO_BOOST).mul(amount) + } +} + +// Needs parameter_types! for the Perbill +parameter_types! { + pub const TestCapacityPerToken: Perbill = Perbill::from_percent(10); + pub const TestRewardCap: Permill = Permill::from_parts(3_800); // 0.38% or 0.0038 per RewardEra +} +impl Config for Test { + type RuntimeEvent = RuntimeEvent; + type WeightInfo = (); + type RuntimeFreezeReason = RuntimeFreezeReason; + type Currency = pallet_balances::Pallet; + type TargetValidator = Msa; + // In test, this must be >= Token:Capacity ratio since unit is plancks + type MinimumStakingAmount = ConstU64<10>; + type MinimumTokenBalance = ConstU64<10>; + type MaxUnlockingChunks = ConstU32<4>; + + #[cfg(feature = "runtime-benchmarks")] + type BenchmarkHelper = Msa; + + type UnstakingThawPeriod = ConstU16<2>; + type MaxEpochLength = ConstU32<100>; + type EpochNumber = u32; + type CapacityPerToken = TestCapacityPerToken; + type EraLength = ConstU32<10>; + type ProviderBoostHistoryLimit = ConstU32<12>; + type RewardsProvider = Capacity; + type MaxRetargetsPerRewardEra = ConstU32<5>; + type RewardPoolPerEra = ConstU64<10_000>; + type RewardPercentCap = TestRewardCap; + type RewardPoolChunkLength = ConstU32<3>; +} + +fn initialize_reward_pool() { + let history_limit: u32 = ::ProviderBoostHistoryLimit::get(); + let chunks = history_limit.saturating_div(::RewardPoolChunkLength::get()); + for i in 0u32..chunks { + ProviderBoostRewardPools::::insert(i, RewardPoolHistoryChunk::::new()) + } +} + +pub fn get_balance(who: &T::AccountId) -> BalanceOf { + T::Currency::balance(who) +} + +pub fn assert_transferable(who: &T::AccountId, amount: BalanceOf) { + assert_eq!(T::Currency::can_withdraw(who, amount), WithdrawConsequence::Success); +} + +pub fn new_test_ext() -> sp_io::TestExternalities { + let mut t = frame_system::GenesisConfig::::default().build_storage().unwrap(); + pallet_balances::GenesisConfig:: { + balances: vec![ + (50, 5), + (100, 100), + (200, 200), + (300, 300), + (400, 400), + (500, 500), + (600, 600), + (10_000, 10_000), + ], + ..Default::default() + } + .assimilate_storage(&mut t) + .unwrap(); + + let mut ext = sp_io::TestExternalities::new(t); + ext.execute_with(|| { + System::set_block_number(1); + initialize_reward_pool(); + set_era_and_reward_pool(0, 1, 0); + }); + ext +} diff --git a/pallets/capacity/src/tests/mod.rs b/pallets/capacity/src/tests/mod.rs new file mode 100644 index 0000000000..a8382fa6a1 --- /dev/null +++ b/pallets/capacity/src/tests/mod.rs @@ -0,0 +1,20 @@ +pub mod capacity_details_tests; +mod change_staking_target_tests; +mod claim_staking_rewards_tests; +pub mod epochs_tests; +mod eras_tests; +pub mod mock; +pub mod other_tests; +mod provider_boost_history_tests; +mod provider_boost_tests; +pub mod replenishment_tests; +mod reward_pool_tests; +mod rewards_provider_tests; +pub mod stake_and_deposit_tests; +pub mod staking_account_details_tests; +pub mod staking_target_details_tests; +pub mod testing_utils; +mod unlock_chunks_tests; +pub mod unstaking_tests; +pub mod withdraw_unstaked_tests; +pub mod withdrawal_tests; diff --git a/pallets/capacity/src/tests/other_tests.rs b/pallets/capacity/src/tests/other_tests.rs new file mode 100644 index 0000000000..a81eadcc88 --- /dev/null +++ b/pallets/capacity/src/tests/other_tests.rs @@ -0,0 +1,216 @@ +use frame_support::traits::{ + fungible::{Inspect, InspectFreeze}, + Get, +}; +use frame_system::pallet_prelude::BlockNumberFor; +use sp_runtime::traits::Zero; + +use common_primitives::{capacity::Nontransferable, msa::MessageSourceId}; + +use crate::{ + BalanceOf, CapacityDetails, CapacityLedger, Config, CurrentEpoch, CurrentEpochInfo, EpochInfo, + FreezeReason, StakingDetails, StakingTargetDetails, StakingTargetLedger, +}; + +use super::{mock::*, testing_utils::*}; + +struct TestCase { + name: &'static str, + starting_epoch: ::EpochNumber, + epoch_start_block: BlockNumberFor, + expected_epoch: ::EpochNumber, + expected_epoch_start_block: BlockNumberFor, + at_block: BlockNumberFor, +} + +#[test] +fn start_new_epoch_works() { + new_test_ext().execute_with(|| { + // assumes the mock epoch length is 100 blocks. + let test_cases: Vec> = vec![ + TestCase { + name: "epoch changes at the right time", + starting_epoch: 2, + epoch_start_block: 201, + expected_epoch: 3, + expected_epoch_start_block: 301, + at_block: 301, + }, + TestCase { + // + name: "epoch does not change", + starting_epoch: 2, + epoch_start_block: 201, + expected_epoch: 2, + expected_epoch_start_block: 201, + at_block: 215, + }, + ]; + for tc in test_cases { + CurrentEpoch::::set(tc.starting_epoch); + CurrentEpochInfo::::set(EpochInfo { epoch_start: tc.epoch_start_block }); + Capacity::start_new_epoch_if_needed(tc.at_block); + assert_eq!( + tc.expected_epoch, + CurrentEpoch::::get(), + "{}: had wrong current epoch", + tc.name + ); + assert_eq!( + tc.expected_epoch_start_block, + CurrentEpochInfo::::get().epoch_start, + "{}: had wrong epoch start block", + tc.name + ); + } + }); +} + +#[test] +fn set_staking_account_is_successful() { + new_test_ext().execute_with(|| { + let staker = 100; + let mut staking_account = StakingDetails::::default(); + staking_account.deposit(55); + + Capacity::set_staking_account_and_lock(&staker, &staking_account) + .expect("Failed to set staking account and lock"); + + let frozen_balance = ::Currency::balance_frozen( + &(FreezeReason::CapacityStaking).into(), + &staker, + ); + assert_eq!(frozen_balance, 55); + }); +} + +#[test] +fn set_target_details_is_successful() { + new_test_ext().execute_with(|| { + let staker = 100; + let target: MessageSourceId = 1; + + assert_eq!(StakingTargetLedger::::get(staker, target), None); + + let mut target_details = StakingTargetDetails::>::default(); + target_details.amount = 10; + target_details.capacity = 10; + + Capacity::set_target_details_for(&staker, target, target_details); + + let stored_target_details = StakingTargetLedger::::get(staker, target).unwrap(); + + assert_eq!(stored_target_details.amount, 10); + assert_eq!(stored_target_details.capacity, 10); + }); +} + +#[test] +fn set_capacity_details_is_successful() { + new_test_ext().execute_with(|| { + let target: MessageSourceId = 1; + + assert_eq!(CapacityLedger::::get(target), None); + + let capacity_details: CapacityDetails, ::EpochNumber> = + CapacityDetails { + remaining_capacity: 10u64, + total_tokens_staked: 10u64, + total_capacity_issued: 10u64, + last_replenished_epoch: 1u32, + }; + + Capacity::set_capacity_for(target, capacity_details); + + let stored_capacity_details = CapacityLedger::::get(target).unwrap(); + + assert_eq!(stored_capacity_details.remaining_capacity, 10); + assert_eq!(stored_capacity_details.total_capacity_issued, 10); + assert_eq!(stored_capacity_details.last_replenished_epoch, 1); + }); +} + +#[test] +fn it_configures_staking_minimum_greater_than_or_equal_to_existential_deposit() { + new_test_ext().execute_with(|| { + let minimum_staking_balance_config: BalanceOf = + ::MinimumStakingAmount::get(); + assert!(minimum_staking_balance_config >= ::Currency::minimum_balance()); + }); +} + +#[derive(Debug, Default)] +struct UnstakingTestCase { + unstaking: u64, + total_staked: u64, + total_capacity: u64, + expected_reduction: BalanceOf, +} + +#[test] +fn calculate_capacity_reduction_determines_the_correct_capacity_reduction_amount() { + let test_cases: Vec> = vec![ + UnstakingTestCase { + unstaking: 10, + total_staked: 100, + total_capacity: 200, + expected_reduction: 20, + }, + UnstakingTestCase { + unstaking: 5, + total_staked: 300, + total_capacity: 30, + expected_reduction: 1, + }, + UnstakingTestCase { + unstaking: 15, + total_staked: 30, + total_capacity: 2, + expected_reduction: 1, + }, + UnstakingTestCase { + unstaking: 99, + total_staked: 100, + total_capacity: 2001, + expected_reduction: 1981, + }, + ]; + for tc in test_cases { + let capacity_reduction = Capacity::calculate_capacity_reduction( + tc.unstaking, + tc.total_staked, + tc.total_capacity, + ); + assert_eq!( + tc.expected_reduction, capacity_reduction, + "In case {:?} expected {:?}, got {:?}", + tc, tc.expected_reduction, capacity_reduction + ); + } +} + +#[test] +fn impl_balance_is_successful() { + new_test_ext().execute_with(|| { + let target_msa_id = 1; + let remaining_amount = 10u64; + let total_available_amount = 10u64; + + let _ = create_capacity_account_and_fund( + target_msa_id, + remaining_amount, + total_available_amount, + 1u32, + ); + + assert_eq!(Capacity::balance(target_msa_id), 10u64); + }); +} + +#[test] +fn impl_balance_returns_zero_when_target_capacity_is_not_found() { + new_test_ext().execute_with(|| { + let msa_id = 1; + assert_eq!(Capacity::balance(msa_id), BalanceOf::::zero()); + }); +} diff --git a/pallets/capacity/src/tests/provider_boost_history_tests.rs b/pallets/capacity/src/tests/provider_boost_history_tests.rs new file mode 100644 index 0000000000..ebd12ff05a --- /dev/null +++ b/pallets/capacity/src/tests/provider_boost_history_tests.rs @@ -0,0 +1,133 @@ +use crate::{ + tests::{ + mock::{new_test_ext, Capacity, RuntimeOrigin, Test}, + testing_utils::{run_to_block, setup_provider, system_run_to_block}, + }, + Config, ProviderBoostHistories, ProviderBoostHistory, + StakingType::{MaximumCapacity, ProviderBoost}, +}; +use common_primitives::capacity::RewardEra; +use frame_support::assert_ok; +use sp_runtime::traits::{Get, Zero}; + +#[test] +fn provider_boost_adds_to_staking_history() { + new_test_ext().execute_with(|| { + let staker = 10_000u64; + let target = 1u64; + + setup_provider(&staker, &target, &1_000u64, ProviderBoost); + let history = ProviderBoostHistories::::get(staker); + assert!(history.is_some()); + }) +} + +#[test] +fn multiple_provider_boosts_updates_history_correctly() { + new_test_ext().execute_with(|| { + let staker = 10_000u64; + let target = 1u64; + setup_provider(&staker, &target, &500u64, ProviderBoost); + + assert_ok!(Capacity::provider_boost(RuntimeOrigin::signed(staker), target, 200)); + + // should update era 1 history + let mut history = ProviderBoostHistories::::get(staker).unwrap(); + assert_eq!(history.count(), 1); + assert_eq!(history.get_entry_for_era(&0u32).unwrap(), &700u64); + + system_run_to_block(10); + run_to_block(11); + + assert_ok!(Capacity::provider_boost(RuntimeOrigin::signed(staker), target, 200)); + + // should add an era 2 history + history = ProviderBoostHistories::::get(staker).unwrap(); + assert_eq!(history.count(), 2); + assert_eq!(history.get_entry_for_era(&1u32).unwrap(), &900u64); + }) +} + +#[test] +fn stake_does_not_add_to_staking_history() { + new_test_ext().execute_with(|| { + let staker = 10_000u64; + let target = 1u64; + + setup_provider(&staker, &target, &1_000u64, MaximumCapacity); + let history = ProviderBoostHistories::::get(staker); + assert!(history.is_none()); + }) +} + +#[test] +fn provider_boost_history_add_era_balance_adds_entries_and_deletes_old_if_full() { + let mut pbh = ProviderBoostHistory::::new(); + let bound: u32 = ::ProviderBoostHistoryLimit::get(); + + for era in 1..bound + 1u32 { + let add_amount: u64 = 1_000 * era as u64; + pbh.add_era_balance(&era, &add_amount); + assert_eq!(pbh.count(), era as usize); + } + assert_eq!(pbh.count(), bound as usize); + + let new_era: RewardEra = 99; + pbh.add_era_balance(&new_era, &1000u64); + assert_eq!(pbh.count(), bound as usize); + assert!(pbh.get_entry_for_era(&new_era).is_some()); + + let first_era: RewardEra = 1; + assert!(pbh.get_entry_for_era(&first_era).is_none()); +} + +#[test] +fn provider_boost_history_add_era_balance_in_same_era_updates_entry() { + let mut pbh = ProviderBoostHistory::::new(); + let add_amount: u64 = 1_000u64; + let era = 2u32; + pbh.add_era_balance(&era, &add_amount); + pbh.add_era_balance(&era, &add_amount); + assert_eq!(pbh.get_entry_for_era(&era).unwrap(), &2_000u64) +} + +#[test] +fn provider_boost_history_subtract_era_balance_in_same_era_updates_entry() { + let mut pbh = ProviderBoostHistory::::new(); + let era = 2u32; + pbh.add_era_balance(&era, &1000u64); + pbh.subtract_era_balance(&era, &300u64); + assert_eq!(pbh.get_entry_for_era(&(era)).unwrap(), &700u64); +} + +#[test] +fn provider_boost_history_add_era_balance_in_new_era_correctly_adds_value() { + let mut pbh = ProviderBoostHistory::::new(); + let add_amount: u64 = 1_000u64; + let era = 2u32; + pbh.add_era_balance(&era, &add_amount); + pbh.add_era_balance(&(era + 1), &add_amount); + assert_eq!(pbh.get_entry_for_era(&(era + 1)).unwrap(), &2_000u64) +} + +#[test] +fn provider_boost_history_subtract_era_balance_in_new_era_correctly_subtracts_value() { + let mut pbh = ProviderBoostHistory::::new(); + let era = 2u32; + pbh.add_era_balance(&era, &1000u64); + + pbh.subtract_era_balance(&(era + 1), &400u64); + assert_eq!(pbh.get_entry_for_era(&(era + 1)).unwrap(), &600u64); + + pbh.subtract_era_balance(&(era + 2), &600u64); + assert!(pbh.get_entry_for_era(&(era + 2)).unwrap().is_zero()); +} + +#[test] +fn provider_boost_history_subtract_all_balance_on_only_entry_returns_some_0() { + let mut pbh = ProviderBoostHistory::::new(); + let era = 22u32; + let amount = 1000u64; + pbh.add_era_balance(&era, &amount); + assert_eq!(pbh.subtract_era_balance(&(era), &amount), Some(0usize)); +} diff --git a/pallets/capacity/src/tests/provider_boost_tests.rs b/pallets/capacity/src/tests/provider_boost_tests.rs new file mode 100644 index 0000000000..e30871d533 --- /dev/null +++ b/pallets/capacity/src/tests/provider_boost_tests.rs @@ -0,0 +1,108 @@ +use super::{mock::*, testing_utils::*}; +use crate::{ + CapacityLedger, Config, CurrentEraProviderBoostTotal, Error, Event, FreezeReason, + StakingAccountLedger, StakingDetails, StakingTargetLedger, StakingType, +}; +use common_primitives::msa::MessageSourceId; +use frame_support::{assert_noop, assert_ok, traits::fungible::InspectFreeze}; + +#[test] +fn provider_boost_works() { + new_test_ext().execute_with(|| { + let account = 600; + let target: MessageSourceId = 1; + let amount = 200; + let capacity = 10; // Maximized stake (10% of staked amount) * 50% (in trait impl) + register_provider(target, String::from("Foo")); + assert_ok!(Capacity::provider_boost(RuntimeOrigin::signed(account), target, amount)); + + // Check that StakingAccountLedger is updated. + let boost_account: StakingDetails = + StakingAccountLedger::::get(account).unwrap(); + + // Check that the staking account has the correct staking type. + assert_eq!(boost_account.active, 200); + assert_eq!(boost_account.staking_type, StakingType::ProviderBoost); + + // Check that the capacity generated is correct. (5% of amount staked, since 10% is what's in the mock) + let capacity_details = CapacityLedger::::get(target).unwrap(); + assert_eq!(capacity_details.total_capacity_issued, capacity); + + let events = capacity_events(); + assert_eq!( + events.first().unwrap(), + &Event::ProviderBoosted { account, target, amount, capacity } + ); + + assert_eq!( + ::Currency::balance_frozen( + &FreezeReason::CapacityStaking.into(), + &account + ), + 200u64 + ); + + let target_details = StakingTargetLedger::::get(account, target).unwrap(); + assert_eq!(target_details.amount, amount); + }); +} + +#[test] +fn provider_boost_updates_reward_pool_history() { + // two accounts staking to the same target + new_test_ext().execute_with(|| { + let account1 = 600; + let account2 = 500; + let target: MessageSourceId = 1; + let amount1 = 500; + let amount2 = 200; + register_provider(target, String::from("Foo")); + + assert_ok!(Capacity::provider_boost(RuntimeOrigin::signed(account1), target, amount1)); + assert_ok!(Capacity::provider_boost(RuntimeOrigin::signed(account2), target, amount2)); + assert_eq!(CurrentEraProviderBoostTotal::::get(), 700u64); + }); +} + +#[test] +fn provider_boost_updates_staking_details() { + new_test_ext().execute_with(|| { + let account = 600; + let target: MessageSourceId = 1; + let amount = 500; + register_provider(target, String::from("Foo")); + assert_ok!(Capacity::provider_boost(RuntimeOrigin::signed(account), target, amount)); + let boost_details: StakingDetails = + StakingAccountLedger::::get(account).unwrap(); + assert_eq!(boost_details.active, 500); + }) +} + +#[test] +fn calling_stake_on_provider_boost_target_errors() { + new_test_ext().execute_with(|| { + let account = 600; + let target: MessageSourceId = 1; + let amount = 200; + register_provider(target, String::from("Bear")); + assert_ok!(Capacity::provider_boost(RuntimeOrigin::signed(account), target, amount)); + assert_noop!( + Capacity::stake(RuntimeOrigin::signed(account), target, 50), + Error::::CannotChangeStakingType + ); + }) +} +#[test] +fn calling_provider_boost_on_staked_target_errors() { + new_test_ext().execute_with(|| { + let account = 600; + let target: MessageSourceId = 1; + let amount = 200; + register_provider(target, String::from("Foobear")); + assert_ok!(Capacity::stake(RuntimeOrigin::signed(account), target, amount)); + assert_noop!( + Capacity::provider_boost(RuntimeOrigin::signed(account), target, 50), + Error::::CannotChangeStakingType + ); + }) +} diff --git a/pallets/capacity/src/tests/replenishment_tests.rs b/pallets/capacity/src/tests/replenishment_tests.rs new file mode 100644 index 0000000000..259135798b --- /dev/null +++ b/pallets/capacity/src/tests/replenishment_tests.rs @@ -0,0 +1,91 @@ +use super::{mock::*, testing_utils::*}; +use common_primitives::capacity::Replenishable; +use frame_support::{assert_noop, assert_ok}; + +use crate::{BalanceOf, CapacityDetails, CapacityLedger, Config, CurrentEpoch, Error}; + +#[test] +fn impl_replenish_all_for_account_is_successful() { + new_test_ext().execute_with(|| { + let target_msa_id = 1; + let remaining_amount = 3u64; + let total_available_amount = 10u64; + let _ = create_capacity_account_and_fund( + target_msa_id, + remaining_amount, + total_available_amount, + 1u32, + ); + + CurrentEpoch::::set(1u32); + + assert_ok!(Capacity::replenish_all_for(target_msa_id)); + + let mut capacity_details = + CapacityDetails::, ::EpochNumber>::default(); + + capacity_details.remaining_capacity = 10u32.into(); + capacity_details.total_tokens_staked = 10u32.into(); + capacity_details.total_capacity_issued = 10u32.into(); + capacity_details.last_replenished_epoch = 1u32; + + assert_eq!(CapacityLedger::::get(target_msa_id).unwrap(), capacity_details); + }); +} + +#[test] +fn impl_replenish_all_for_account_errors_target_capacity_not_found() { + new_test_ext().execute_with(|| { + let target_msa_id = 1; + assert_noop!( + Capacity::replenish_all_for(target_msa_id), + Error::::TargetCapacityNotFound + ); + }); +} + +#[test] +fn impl_can_replenish_is_false_when_last_replenished_at_is_greater_or_equal_current_epoch() { + new_test_ext().execute_with(|| { + let target_msa_id = 1; + let remaining_amount = 3u64; + let total_available_amount = 10u64; + let last_replenished_at = 1u32; + + let _ = create_capacity_account_and_fund( + target_msa_id, + remaining_amount, + total_available_amount, + last_replenished_at, + ); + + assert_eq!(CurrentEpoch::::get(), 0); + + assert!(!Capacity::can_replenish(target_msa_id)); + + CurrentEpoch::::set(1); + + assert!(!Capacity::can_replenish(target_msa_id)); + }); +} + +#[test] +fn impl_can_replenish_is_true_when_last_replenished_at_is_less_than_current_epoch() { + new_test_ext().execute_with(|| { + let target_msa_id = 1; + let remaining_amount = 3u64; + let total_available_amount = 10u64; + let last_replenished_at = 2u32; + + let _ = create_capacity_account_and_fund( + target_msa_id, + remaining_amount, + total_available_amount, + last_replenished_at, + ); + + CurrentEpoch::::set(3); + + assert!(Capacity::can_replenish(target_msa_id)); + }); +} diff --git a/pallets/capacity/src/tests/reward_pool_tests.rs b/pallets/capacity/src/tests/reward_pool_tests.rs new file mode 100644 index 0000000000..849c6475ea --- /dev/null +++ b/pallets/capacity/src/tests/reward_pool_tests.rs @@ -0,0 +1,116 @@ +use crate::{ + tests::{mock::*, testing_utils::set_era_and_reward_pool}, + BalanceOf, Config, ProviderBoostRewardPools, RewardPoolHistoryChunk, +}; +use common_primitives::capacity::RewardEra; +use frame_support::{assert_ok, traits::Get}; +use std::ops::Add; + +// Check eras_tests for how reward pool chunks are expected to be filled during runtime. + +// Fill up a reward pool history chunk by adding 100 in each new era from the starting value. +fn fill_reward_pool_history_chunk( + chunk_index: u32, + starting_era: RewardEra, + number_of_items: u32, + starting_total_stake: BalanceOf, +) { + let mut chunk: RewardPoolHistoryChunk = RewardPoolHistoryChunk::new(); + for i in 0u32..number_of_items { + let additional_stake: BalanceOf = (i * 100u32).into(); + let total_stake: BalanceOf = starting_total_stake.add(additional_stake); + let era = starting_era + i; + assert_ok!(chunk.try_insert(era, total_stake)); + } + ProviderBoostRewardPools::set(chunk_index, Some(chunk)); +} + +#[test] +fn reward_pool_history_chunk_default_tests() { + let chunk: RewardPoolHistoryChunk = RewardPoolHistoryChunk::new(); + assert!(!chunk.is_full()); + assert!(chunk.total_for_era(&0u32).is_none()); + let default: RewardPoolHistoryChunk = RewardPoolHistoryChunk::default(); + assert!(default.total_for_era(&032).is_none()); + assert_eq!(default.era_range(), (0u32, 0u32)); +} + +#[test] +fn reward_pool_history_chunk_insert_range_remove() { + let mut chunk: RewardPoolHistoryChunk = RewardPoolHistoryChunk::new(); + assert_eq!(chunk.try_insert(22u32, 100u64), Ok(None)); + assert_eq!(chunk.try_insert(22u32, 110u64), Ok(Some(100u64))); + assert!(chunk.try_insert(23u32, 123u64).is_ok()); + assert!(chunk.try_insert(24u32, 99u64).is_ok()); + // For the limit is 3 + assert_eq!(chunk.try_insert(25u32, 99u64), Err((25u32, 99u64))); + assert_eq!(chunk.total_for_era(&23u32), Some(&123u64)); + assert_eq!(chunk.era_range(), (22u32, 24u32)); +} + +// Check boundary behavior for the first reward eras before hitting maximum history, +// then check behavior once the reward pool chunks are always full. +#[test] +fn get_total_stake_for_past_era_works_with_partly_filled_single_chunk() { + new_test_ext().execute_with(|| { + set_era_and_reward_pool(3, 21, 1000); + System::set_block_number(22); + fill_reward_pool_history_chunk(0, 1, 2, 100); + assert_eq!(Capacity::get_total_stake_for_past_era(1, 3), Ok(100)); + assert_eq!(Capacity::get_total_stake_for_past_era(2, 3), Ok(200)); + assert!(Capacity::get_total_stake_for_past_era(3, 3).is_err()); + assert!(Capacity::get_total_stake_for_past_era(99, 3).is_err()); + }) +} + +#[test] +fn get_total_stake_for_past_era_works_with_1_full_chunk() { + new_test_ext().execute_with(|| { + System::set_block_number(52); + set_era_and_reward_pool(6, 51, 1000); + fill_reward_pool_history_chunk(0, 0, 3, 0); // eras 1-3 + fill_reward_pool_history_chunk(1, 3, 2, 300); // eras 4,5 + for i in 2u32..=4u32 { + let expected_total: BalanceOf = (i * 100u32).into(); + let actual = Capacity::get_total_stake_for_past_era(i, 5); + assert_eq!(actual, Ok(expected_total)); + } + assert!(Capacity::get_total_stake_for_past_era(6, 6).is_err()); + }) +} + +#[test] +fn get_total_stake_for_past_era_works_with_2_full_chunks() { + new_test_ext().execute_with(|| { + System::set_block_number(72); + set_era_and_reward_pool(7, 71, 1000); + fill_reward_pool_history_chunk(0, 0, 3, 0); + fill_reward_pool_history_chunk(1, 3, 3, 300); + fill_reward_pool_history_chunk(2, 6, 1, 600); + for i in 0u32..=6u32 { + let expected_total: BalanceOf = (i * 100u32).into(); + assert_eq!(Capacity::get_total_stake_for_past_era(i, 7), Ok(expected_total)); + } + assert!(Capacity::get_total_stake_for_past_era(7, 7).is_err()); + }) +} + +#[test] +fn get_total_stake_for_past_era_works_with_full_reward_pool() { + new_test_ext().execute_with(|| { + System::set_block_number(121); + let history_limit: u32 = ::ProviderBoostHistoryLimit::get(); + set_era_and_reward_pool(12, 121, (2000u32).into()); + + fill_reward_pool_history_chunk(0, 0, 3, 1); + fill_reward_pool_history_chunk(1, 3, 3, 301); + fill_reward_pool_history_chunk(2, 6, 3, 601); + fill_reward_pool_history_chunk(3, 9, 3, 901); + + (0u32..history_limit).for_each(|era| { + let expected_total: BalanceOf = ((era * 100u32) + 1u32).into(); + assert_eq!(Capacity::get_total_stake_for_past_era(era, 12), Ok(expected_total)); + }); + assert!(Capacity::get_total_stake_for_past_era(12, 12).is_err()); + }) +} diff --git a/pallets/capacity/src/tests/rewards_provider_tests.rs b/pallets/capacity/src/tests/rewards_provider_tests.rs new file mode 100644 index 0000000000..c85660cb83 --- /dev/null +++ b/pallets/capacity/src/tests/rewards_provider_tests.rs @@ -0,0 +1,322 @@ +use super::mock::*; +use crate::{ + tests::testing_utils::{ + run_to_block, set_era_and_reward_pool, setup_provider, system_run_to_block, + }, + BalanceOf, Config, CurrentEraInfo, ProviderBoostHistories, ProviderBoostHistory, + ProviderBoostRewardsProvider, + StakingType::*, + UnclaimedRewardInfo, +}; +use common_primitives::msa::MessageSourceId; +use frame_support::{assert_ok, traits::Len}; +use frame_system::pallet_prelude::BlockNumberFor; +use sp_core::Get; + +// This tests Capacity implementation of the trait, but uses the mock's constants, +// to ensure that it's correctly specified in the pallet. +#[test] +fn era_staking_reward_implementation() { + struct TestCase { + total_staked: u64, // by all boosters + amount_staked: u64, // by a single booster + expected_reward: u64, // for a single era + reward_pool: u64, // reward pool size + } + let test_cases: Vec = vec![ + TestCase { + total_staked: 1_000_000, + amount_staked: 0, + expected_reward: 0, + reward_pool: 10_000, + }, // shouldn't happen, but JIC + TestCase { + total_staked: 1_000_000, + amount_staked: 30, + expected_reward: 0, + reward_pool: 10_000, + }, // truncated result + TestCase { + total_staked: 1_000_000, + amount_staked: 150, + expected_reward: 1, + reward_pool: 10_000, + }, // truncated result + TestCase { + total_staked: 1_000_000, + amount_staked: 1000, + expected_reward: 4, + reward_pool: 10_000, + }, // hits the cap starting with this example + TestCase { + total_staked: 1_000_000, + amount_staked: 11000, + expected_reward: 42, + reward_pool: 10_000, + }, // > 0.0038% of total, reward = 11000*.0038 + TestCase { + total_staked: 20_000_000, + amount_staked: 888_889, + expected_reward: 3378, + reward_pool: 11_000_000, + }, // testnet/mainnet values + ]; + for tc in test_cases { + assert_eq!( + Capacity::era_staking_reward(tc.amount_staked, tc.total_staked, tc.reward_pool), + tc.expected_reward + ); + } +} + +#[test] +fn list_unclaimed_rewards_returns_empty_set_when_no_staking() { + new_test_ext().execute_with(|| { + let account = 500u64; + let history: ProviderBoostHistory = ProviderBoostHistory::new(); + ProviderBoostHistories::::set(account, Some(history)); + let rewards = Capacity::list_unclaimed_rewards(&account).unwrap(); + assert!(rewards.is_empty()) + }) +} +#[test] +fn list_unclaimed_rewards_returns_empty_set_when_only_staked_this_era() { + new_test_ext().execute_with(|| { + system_run_to_block(5); + set_era_and_reward_pool(5u32, 1u32, 1000u64); + let account = 500u64; + let mut history: ProviderBoostHistory = ProviderBoostHistory::new(); + history.add_era_balance(&5u32, &100u64); + ProviderBoostHistories::::set(account, Some(history)); + let rewards = Capacity::list_unclaimed_rewards(&account).unwrap(); + assert!(rewards.is_empty()) + }) +} + +// Check that eligible amounts are only for what's staked an entire era. +#[test] +fn list_unclaimed_rewards_has_eligible_rewards() { + new_test_ext().execute_with(|| { + let account = 10_000u64; + let target: MessageSourceId = 10; + let amount = 1_000u64; + + // staking 1k as of block 1, era 1 (1-10) + setup_provider(&account, &target, &amount, ProviderBoost); + + // staking 2k as of block 11, era 2 (11-20) + run_to_block(11); + assert_ok!(Capacity::provider_boost(RuntimeOrigin::signed(account), target, amount)); + + // staking 3k as of era 4, block 31, first block of era (31-40) + run_to_block(31); + assert_ok!(Capacity::provider_boost(RuntimeOrigin::signed(account), target, amount)); + + run_to_block(51); // era 5 + assert_eq!(CurrentEraInfo::::get().era_index, 5u32); + assert_eq!(CurrentEraInfo::::get().started_at, 51u32); + + // rewards for era 6 should not be returned; era 6 is current era and therefore ineligible. + // eligible amounts for rewards for eras should be: 1=0, 2=1k, 3=2k, 4=2k, 5=3k + let rewards = Capacity::list_unclaimed_rewards(&account).unwrap(); + assert_eq!(rewards.len(), 5usize); + let expected_info: Vec, BlockNumberFor>> = [ + UnclaimedRewardInfo { + reward_era: 0u32, + expires_at_block: 130, + staked_amount: 1000, + eligible_amount: 0, + earned_amount: 0, + }, + UnclaimedRewardInfo { + reward_era: 1u32, + expires_at_block: 140, + staked_amount: 2000, + eligible_amount: 1000, + earned_amount: 4, + }, + UnclaimedRewardInfo { + reward_era: 2u32, + expires_at_block: 150, + staked_amount: 2000, + eligible_amount: 2_000, + earned_amount: 8, + }, + UnclaimedRewardInfo { + reward_era: 3u32, + expires_at_block: 160, + staked_amount: 3000, + eligible_amount: 2000, + earned_amount: 8, + }, + UnclaimedRewardInfo { + reward_era: 4u32, + expires_at_block: 170, + staked_amount: 3000, + eligible_amount: 3_000, + earned_amount: 11, + }, + ] + .to_vec(); + for i in 0..expected_info.len() { + assert_eq!(rewards.get(i).unwrap(), &expected_info[i]); + } + + run_to_block(141); // current era = 14 + let rewards = Capacity::list_unclaimed_rewards(&account).unwrap(); + let max_history: u32 = ::ProviderBoostHistoryLimit::get(); + // the earliest eras, 0 and 1, should no longer be stored. + assert_eq!(rewards.len(), max_history as usize); + assert_eq!(rewards.get(0).unwrap().reward_era, 2u32); + + // there was no change in stake, so the eligible and earned amounts + // for era 13 should be the same as in reward era 5. + assert_eq!( + rewards.get((max_history - 1) as usize).unwrap(), + &UnclaimedRewardInfo { + reward_era: 13u32, + expires_at_block: 260, + staked_amount: 3_000, + eligible_amount: 3_000, + earned_amount: 11, + } + ) + }) +} + +// "Set and forget" test. +// Check that if an account boosted and then let it run for more than the number +// of history retention eras, eligible rewards are correct. +#[test] +fn list_unclaimed_rewards_returns_correctly_for_old_single_boost() { + new_test_ext().execute_with(|| { + let account = 10_000u64; + let target: MessageSourceId = 10; + let amount = 1_000u64; + + assert!(!Capacity::has_unclaimed_rewards(&account)); + + // boost 1k as of block 1, era 1 + setup_provider(&account, &target, &amount, ProviderBoost); + assert!(!Capacity::has_unclaimed_rewards(&account)); + + run_to_block(131); // era 13 + assert_eq!(CurrentEraInfo::::get().era_index, 13u32); + assert_eq!(CurrentEraInfo::::get().started_at, 131u32); + + let boost_history = ProviderBoostHistories::::get(account).unwrap(); + assert!(boost_history.get_entry_for_era(&0u32).is_some()); + + let rewards = Capacity::list_unclaimed_rewards(&account).unwrap(); + + let max_history: u32 = ::ProviderBoostHistoryLimit::get(); + assert_eq!(rewards.len(), max_history as usize); + + // the earliest era should not be returned. + assert_eq!(rewards.get(0).unwrap().reward_era, 1u32); + + for era in 1u32..=max_history { + let expires_at_era = era.saturating_add(max_history); + let expires_at_block = Capacity::block_at_end_of_era(expires_at_era); + let expected_info: UnclaimedRewardInfo, BlockNumberFor> = + UnclaimedRewardInfo { + reward_era: era, + expires_at_block, + staked_amount: 1000, + eligible_amount: 1000, + earned_amount: 4, + }; + let era_index: usize = (era - 1u32) as usize; + assert_eq!(rewards.get(era_index).unwrap(), &expected_info); + } + }) +} + +// this is to check that our 0-indexed era + when a Current Era starts at something besides one, +// that the calculations are still correct +#[test] +fn list_unclaimed_rewards_current_era_starts_at_later_block_works() { + new_test_ext().execute_with(|| { + let account = 10_000u64; + let target: MessageSourceId = 10; + let amount = 1000u64; + + System::set_block_number(9900); + set_era_and_reward_pool(0, 9898, 10_000); + setup_provider(&account, &target, &amount, ProviderBoost); + + run_to_block(9910); // middle of era 1 + assert_eq!(CurrentEraInfo::::get().era_index, 1u32); + assert_eq!(CurrentEraInfo::::get().started_at, 9908u32); + + run_to_block(9920); // middle of era 2, now some rewards can be claimed + assert_eq!(CurrentEraInfo::::get().era_index, 2u32); + assert_eq!(CurrentEraInfo::::get().started_at, 9918u32); + + let expected_info_era_0: UnclaimedRewardInfo, BlockNumberFor> = + UnclaimedRewardInfo { + reward_era: 0, + expires_at_block: 9898u32 + 129u32, + staked_amount: 1000, + eligible_amount: 0, + earned_amount: 0, + }; + let expected_info_era_1: UnclaimedRewardInfo, BlockNumberFor> = + UnclaimedRewardInfo { + reward_era: 1, + expires_at_block: 9908u32 + 129u32, + staked_amount: 1000, + eligible_amount: 1000, + earned_amount: 4, + }; + + let rewards = Capacity::list_unclaimed_rewards(&account).unwrap(); + assert_eq!(rewards.get(0).unwrap(), &expected_info_era_0); + assert_eq!(rewards.get(1).unwrap(), &expected_info_era_1); + }) +} + +#[test] +fn has_unclaimed_rewards_works() { + new_test_ext().execute_with(|| { + let account = 10_000u64; + let target: MessageSourceId = 10; + let amount = 1_000u64; + + assert!(!Capacity::has_unclaimed_rewards(&account)); + + // staking 1k as of block 1, era 1 + setup_provider(&account, &target, &amount, ProviderBoost); + assert!(!Capacity::has_unclaimed_rewards(&account)); + + // staking 2k as of block 11, era 2 + run_to_block(11); + assert_ok!(Capacity::provider_boost(RuntimeOrigin::signed(account), target, amount)); + assert!(Capacity::has_unclaimed_rewards(&account)); + + // staking 3k as of era 4, block 31 + run_to_block(31); + assert!(Capacity::has_unclaimed_rewards(&account)); + + run_to_block(61); + assert!(Capacity::has_unclaimed_rewards(&account)); + }) +} + +#[test] +fn has_unclaimed_rewards_returns_true_with_old_single_boost() { + new_test_ext().execute_with(|| { + let account = 10_000u64; + let target: MessageSourceId = 10; + let amount = 1_000u64; + + assert!(!Capacity::has_unclaimed_rewards(&account)); + + // boost 1k as of block 1, era 1 + setup_provider(&account, &target, &amount, ProviderBoost); + assert!(!Capacity::has_unclaimed_rewards(&account)); + + run_to_block(71); + assert!(Capacity::has_unclaimed_rewards(&account)); + }); +} diff --git a/pallets/capacity/src/tests/stake_and_deposit_tests.rs b/pallets/capacity/src/tests/stake_and_deposit_tests.rs new file mode 100644 index 0000000000..b1d9bed2f3 --- /dev/null +++ b/pallets/capacity/src/tests/stake_and_deposit_tests.rs @@ -0,0 +1,468 @@ +use super::{mock::*, testing_utils::*}; +use crate::{ + CapacityDetails, CapacityLedger, Config, Error, Event, FreezeReason, StakingAccountLedger, + StakingDetails, StakingTargetLedger, StakingType::MaximumCapacity, +}; +use common_primitives::{capacity::Nontransferable, msa::MessageSourceId}; +use frame_support::{assert_noop, assert_ok, traits::fungible::InspectFreeze}; +use sp_runtime::ArithmeticError; + +#[test] +fn stake_works() { + new_test_ext().execute_with(|| { + let account = 200; + let target: MessageSourceId = 1; + let amount = 50; + let capacity = 5; + register_provider(target, String::from("Foo")); + assert_ok!(Capacity::stake(RuntimeOrigin::signed(account), target, amount)); + + // Check that StakingAccountLedger is updated. + assert_eq!(StakingAccountLedger::::get(account).unwrap().active, 50); + + // Check that StakingTargetLedger is updated. + assert_eq!(StakingTargetLedger::::get(account, target).unwrap().amount, 50); + assert_eq!(StakingTargetLedger::::get(account, target).unwrap().capacity, 5); + + // Check that CapacityLedger is updated. + let capacity_details = CapacityLedger::::get(target).unwrap(); + + assert_eq!( + CapacityDetails { + remaining_capacity: 5, + total_tokens_staked: 50, + total_capacity_issued: 5, + last_replenished_epoch: 0, + }, + capacity_details + ); + + let events = capacity_events(); + assert_eq!(events.first().unwrap(), &Event::Staked { account, target, amount, capacity }); + + assert_eq!( + ::Currency::balance_frozen( + &FreezeReason::CapacityStaking.into(), + &account + ), + amount + ); + }); +} + +#[test] +fn stake_errors_invalid_target_when_target_is_not_registered_provider() { + new_test_ext().execute_with(|| { + let account = 100; + let target: MessageSourceId = 1; + let amount = 1; + assert_noop!( + Capacity::stake(RuntimeOrigin::signed(account), target, amount), + Error::::InvalidTarget + ); + }); +} + +#[test] +fn stake_errors_insufficient_staking_amount_when_staking_below_minimum_staking_amount() { + new_test_ext().execute_with(|| { + let account = 200; + let target: MessageSourceId = 1; + let amount = 1; + register_provider(target, String::from("Foo")); + assert_noop!( + Capacity::stake(RuntimeOrigin::signed(account), target, amount), + Error::::StakingAmountBelowMinimum + ); + }); +} + +#[test] +fn stake_errors_zero_amount_not_allowed() { + new_test_ext().execute_with(|| { + let account = 100; + let target: MessageSourceId = 1; + let amount = 0; + assert_noop!( + Capacity::stake(RuntimeOrigin::signed(account), target, amount), + Error::::ZeroAmountNotAllowed + ); + }); +} + +#[test] +fn stake_increase_stake_amount_works() { + new_test_ext().execute_with(|| { + let account = 300; + let target: MessageSourceId = 1; + let initial_amount = 50; + let capacity = 5; + register_provider(target, String::from("Foo")); + + // First Stake + assert_ok!(Capacity::stake(RuntimeOrigin::signed(account), target, initial_amount)); + let events = capacity_events(); + assert_eq!( + events.first().unwrap(), + &Event::Staked { account, target, amount: initial_amount, capacity } + ); + assert_eq!( + ::Currency::balance_frozen( + &FreezeReason::CapacityStaking.into(), + &account + ), + 50 + ); + + assert_ok!(Capacity::set_epoch_length(RuntimeOrigin::root(), 10)); + + // run to epoch 2 + run_to_block(21); + + let additional_amount = 100; + let capacity = 10; + // Additional Stake + assert_ok!(Capacity::stake(RuntimeOrigin::signed(account), target, additional_amount)); + + // Check that StakingAccountLedger is updated. + assert_eq!(StakingAccountLedger::::get(account).unwrap().active, 150); + + // Check that StakingTargetLedger is updated. + assert_eq!(StakingTargetLedger::::get(account, target).unwrap().amount, 150); + assert_eq!(StakingTargetLedger::::get(account, target).unwrap().capacity, 15); + + // Check that CapacityLedger is updated. + assert_eq!(CapacityLedger::::get(target).unwrap().remaining_capacity, 15); + assert_eq!(CapacityLedger::::get(target).unwrap().total_capacity_issued, 15); + assert_eq!(CapacityLedger::::get(target).unwrap().last_replenished_epoch, 0); + + let events = capacity_events(); + assert_eq!( + events.last().unwrap(), + &Event::Staked { account, target, amount: additional_amount, capacity } + ); + + assert_eq!( + ::Currency::balance_frozen( + &FreezeReason::CapacityStaking.into(), + &account + ), + 150 + ); + }); +} + +#[test] +fn stake_multiple_accounts_can_stake_to_the_same_target() { + new_test_ext().execute_with(|| { + new_test_ext().execute_with(|| { + let target: MessageSourceId = 1; + register_provider(target, String::from("Foo")); + let account_1 = 200; + let stake_amount_1 = 50; + + assert_ok!(Capacity::stake(RuntimeOrigin::signed(account_1), target, stake_amount_1)); + + // Check that StakingAccountLedger is updated. + assert_eq!(StakingAccountLedger::::get(account_1).unwrap().active, 50); + + // Check that StakingTargetLedger is updated. + assert_eq!(StakingTargetLedger::::get(account_1, target).unwrap().amount, 50); + assert_eq!(StakingTargetLedger::::get(account_1, target).unwrap().capacity, 5); + + // Check that CapacityLedger is updated. + assert_eq!(CapacityLedger::::get(target).unwrap().remaining_capacity, 5); + assert_eq!(CapacityLedger::::get(target).unwrap().total_capacity_issued, 5); + assert_eq!(CapacityLedger::::get(target).unwrap().last_replenished_epoch, 0); + + assert_ok!(Capacity::set_epoch_length(RuntimeOrigin::root(), 10)); + + // run to epoch 2 + run_to_block(21); + + let account_2 = 300; + let stake_amount_2 = 100; + + assert_ok!(Capacity::stake(RuntimeOrigin::signed(account_2), target, stake_amount_2)); + + // Check that StakingAccountLedger is updated. + assert_eq!(StakingAccountLedger::::get(account_2).unwrap().active, 100); + + // Check that StakingTargetLedger is updated. + assert_eq!(StakingTargetLedger::::get(account_2, target).unwrap().amount, 100); + assert_eq!(StakingTargetLedger::::get(account_2, target).unwrap().capacity, 10); + + // Check that CapacityLedger is updated. + assert_eq!(CapacityLedger::::get(target).unwrap().remaining_capacity, 15); + assert_eq!(CapacityLedger::::get(target).unwrap().total_capacity_issued, 15); + assert_eq!(CapacityLedger::::get(target).unwrap().last_replenished_epoch, 0); + }); + }); +} + +#[test] +fn stake_an_account_can_stake_to_multiple_targets() { + new_test_ext().execute_with(|| { + let target_1: MessageSourceId = 1; + let target_2: MessageSourceId = 2; + register_provider(target_1, String::from("Foo")); + register_provider(target_2, String::from("Boo")); + + let account = 400; + let amount_1 = 100; + let amount_2 = 200; + + assert_ok!(Capacity::stake(RuntimeOrigin::signed(account), target_1, amount_1)); + + assert_ok!(Capacity::set_epoch_length(RuntimeOrigin::root(), 10)); + + // run to epoch 2 + run_to_block(21); + assert_ok!(Capacity::stake(RuntimeOrigin::signed(account), target_2, amount_2)); + + // Check that StakingAccountLedger is updated. + assert_eq!(StakingAccountLedger::::get(account).unwrap().active, 300); + + // Check that StakingTargetLedger is updated for target 1. + assert_eq!(StakingTargetLedger::::get(account, target_1).unwrap().amount, 100); + assert_eq!(StakingTargetLedger::::get(account, target_1).unwrap().capacity, 10); + + // Check that StakingTargetLedger is updated for target 2. + assert_eq!(StakingTargetLedger::::get(account, target_2).unwrap().amount, 200); + assert_eq!(StakingTargetLedger::::get(account, target_2).unwrap().capacity, 20); + + // Check that CapacityLedger is updated for target 1. + assert_eq!(CapacityLedger::::get(target_1).unwrap().remaining_capacity, 10); + assert_eq!(CapacityLedger::::get(target_1).unwrap().total_capacity_issued, 10); + assert_eq!(CapacityLedger::::get(target_1).unwrap().last_replenished_epoch, 0); + + // Check that CapacityLedger is updated for target 2. + assert_eq!(CapacityLedger::::get(target_2).unwrap().remaining_capacity, 20); + assert_eq!(CapacityLedger::::get(target_2).unwrap().total_capacity_issued, 20); + assert_eq!(CapacityLedger::::get(target_2).unwrap().last_replenished_epoch, 0); + }); +} + +#[test] +fn stake_when_staking_amount_is_greater_than_free_balance_it_stakes_zero() { + new_test_ext().execute_with(|| { + let target: MessageSourceId = 1; + register_provider(target, String::from("Foo")); + let account = 200; + // An amount greater than the free balance + let amount = 230; + + assert_noop!( + Capacity::stake(RuntimeOrigin::signed(account), target, amount), + Error::::BalanceTooLowtoStake + ); + assert_ok!(Capacity::stake(RuntimeOrigin::signed(account), target, 189)); + + // Check that StakingAccountLedger is updated. + assert_eq!(StakingAccountLedger::::get(account).unwrap().active, 189); + + // Check that StakingTargetLedger is updated. + assert_eq!(StakingTargetLedger::::get(account, target).unwrap().amount, 189); + assert_eq!(StakingTargetLedger::::get(account, target).unwrap().capacity, 19); + + // Check that CapacityLedger is updated. + assert_eq!(CapacityLedger::::get(target).unwrap().remaining_capacity, 19); + assert_eq!(CapacityLedger::::get(target).unwrap().total_capacity_issued, 19); + assert_eq!(CapacityLedger::::get(target).unwrap().last_replenished_epoch, 0); + }); +} + +#[test] +fn get_stakable_amount_works_with_one_freeze_type() { + new_test_ext().execute_with(|| { + let account = 200; + let target = 100; + register_provider(target, String::from("Foo")); + // An amount greater than the free balance should not be stakable + assert_eq!(Capacity::get_stakable_amount_for(&account, 230), 0); + // less than free balance should be stakable + assert_eq!(Capacity::get_stakable_amount_for(&account, 189), 189); + assert_ok!(Capacity::stake(RuntimeOrigin::signed(account), target, 189)); + // remains correct after a stake + assert_eq!(Capacity::get_stakable_amount_for(&account, 189), 0); + }) +} + +#[test] +fn stake_when_staking_amount_is_less_than_min_token_balance_it_errors() { + new_test_ext().execute_with(|| { + let target: MessageSourceId = 1; + register_provider(target, String::from("Foo")); + let account = 50; + // An amount that leaves less than the minimum token balance + let amount = 4; + + assert_noop!( + Capacity::stake(RuntimeOrigin::signed(account), target, amount), + Error::::BalanceTooLowtoStake + ); + }); +} + +#[test] +fn ensure_can_stake_errors_with_zero_amount_not_allowed() { + new_test_ext().execute_with(|| { + let account = 100; + let target: MessageSourceId = 1; + let amount = 0; + assert_noop!( + Capacity::ensure_can_stake(&account, target, amount, MaximumCapacity), + Error::::ZeroAmountNotAllowed + ); + }); +} + +#[test] +fn increase_stake_and_issue_capacity_errors_with_overflow() { + new_test_ext().execute_with(|| { + let target: MessageSourceId = 1; + let staker = 200; + let amount = 10; + register_provider(target, String::from("Foo")); + assert_ok!(Capacity::stake(RuntimeOrigin::signed(staker), target, amount)); + let mut staking_account = StakingAccountLedger::::get(staker).unwrap_or_default(); + + let overflow_amount = u64::MAX; + + assert_noop!( + Capacity::increase_stake_and_issue_capacity( + &staker, + &mut staking_account, + target, + overflow_amount + ), + ArithmeticError::Overflow + ); + }); +} + +#[test] +fn ensure_can_stake_errors_invalid_target() { + new_test_ext().execute_with(|| { + let account = 100; + let target: MessageSourceId = 1; + let amount = 1; + + assert_noop!( + Capacity::ensure_can_stake(&account, target, amount, MaximumCapacity), + Error::::InvalidTarget + ); + }); +} + +#[test] +fn ensure_can_stake_errors_insufficient_staking_amount() { + new_test_ext().execute_with(|| { + let account = 200; + let target: MessageSourceId = 1; + let amount = 4; + register_provider(target, String::from("Foo")); + + assert_noop!( + Capacity::ensure_can_stake(&account, target, amount, MaximumCapacity), + Error::::StakingAmountBelowMinimum + ); + }); +} + +#[test] +fn ensure_can_stake_is_successful() { + new_test_ext().execute_with(|| { + let account = 200; + let target: MessageSourceId = 1; + let amount = 10; + register_provider(target, String::from("Foo")); + + let staking_details = StakingDetails::::default(); + assert_ok!( + Capacity::ensure_can_stake(&account, target, amount, MaximumCapacity), + (staking_details, 10u64) + ); + }); +} + +#[test] +fn increase_stake_and_issue_capacity_is_successful() { + new_test_ext().execute_with(|| { + let staker = 10_000; // has 10_000 token + let target: MessageSourceId = 1; + let amount = 550; + let mut staking_account = StakingDetails::::default(); + + assert_ok!(Capacity::increase_stake_and_issue_capacity( + &staker, + &mut staking_account, + target, + amount + )); + + assert_eq!(staking_account.active, amount); + + let capacity_details = CapacityLedger::::get(target).unwrap(); + + assert_eq!(capacity_details.remaining_capacity, 55); + assert_eq!(capacity_details.total_capacity_issued, 55); + assert_eq!(capacity_details.last_replenished_epoch, 0); + + let target_details = StakingTargetLedger::::get(staker, target).unwrap(); + + assert_eq!(target_details.amount, amount); + assert_eq!(target_details.capacity, 55); + }); +} + +#[test] +fn stake_when_there_are_unlocks_sets_lock_correctly() { + new_test_ext().execute_with(|| { + let staker = 600; + let target1 = 2; + let target2 = 3; + register_provider(target1, String::from("target1")); + register_provider(target2, String::from("target2")); + assert_ok!(Capacity::stake(RuntimeOrigin::signed(staker), target1, 20)); + + assert_ok!(Capacity::unstake(RuntimeOrigin::signed(staker), target1, 5)); + + assert_ok!(Capacity::stake(RuntimeOrigin::signed(staker), target2, 20)); + + // should all still be locked. + assert_eq!(Balances::balance_frozen(&FreezeReason::CapacityStaking.into(), &staker), 40); + }) +} + +#[test] +fn impl_deposit_is_successful() { + new_test_ext().execute_with(|| { + let target_msa_id = 1; + let remaining_amount = 5u64; + let total_available_amount = 10u64; + let _ = create_capacity_account_and_fund( + target_msa_id, + remaining_amount, + total_available_amount, + 1u32, + ); + let amount = 5u64; + let capacity = 1u64; + assert_ok!(Capacity::deposit(target_msa_id, amount, capacity)); + }); +} + +#[test] +fn impl_deposit_errors_target_capacity_not_found() { + new_test_ext().execute_with(|| { + let target_msa_id = 1; + let amount = 10u64; + let capacity = 5u64; + + assert_noop!( + Capacity::deposit(target_msa_id, amount, capacity), + Error::::TargetCapacityNotFound + ); + }); +} diff --git a/pallets/capacity/src/tests/staking_account_details_tests.rs b/pallets/capacity/src/tests/staking_account_details_tests.rs new file mode 100644 index 0000000000..c0e0f9bd6c --- /dev/null +++ b/pallets/capacity/src/tests/staking_account_details_tests.rs @@ -0,0 +1,51 @@ +use super::mock::*; +use crate::*; +#[test] +fn staking_account_details_withdraw_reduces_active_staking_balance() { + let mut staking_account_details = + StakingDetails:: { active: 15u64, staking_type: StakingType::MaximumCapacity }; + assert_eq!(Ok(3u64), staking_account_details.withdraw(3)); + + assert_eq!( + staking_account_details, + StakingDetails:: { active: 12u64, staking_type: StakingType::MaximumCapacity } + ) +} + +#[test] +fn staking_account_details_withdraw_goes_to_zero_when_result_below_minimum() { + let mut staking_account_details = + StakingDetails:: { active: 10u64, staking_type: StakingType::MaximumCapacity }; + assert_eq!(Ok(10u64), staking_account_details.withdraw(6)); + assert_eq!(0u64, staking_account_details.active); + + staking_account_details.deposit(10); + assert_eq!(Ok(10u64), staking_account_details.withdraw(9)); + assert_eq!(0u64, staking_account_details.active); + + staking_account_details.deposit(10); + assert_eq!(Ok(10u64), staking_account_details.withdraw(11)); + assert_eq!(0u64, staking_account_details.active); +} + +#[test] +fn impl_staking_account_details_increase_by() { + let mut staking_account = StakingDetails::::default(); + assert_eq!(staking_account.deposit(10), Some(())); + + assert_eq!( + staking_account, + StakingDetails:: { active: 10u64, staking_type: StakingType::MaximumCapacity } + ) +} + +#[test] +fn impl_staking_account_details_default() { + assert_eq!( + StakingDetails::::default(), + StakingDetails:: { + active: BalanceOf::::zero(), + staking_type: StakingType::MaximumCapacity, + }, + ); +} diff --git a/pallets/capacity/src/tests/staking_target_details_tests.rs b/pallets/capacity/src/tests/staking_target_details_tests.rs new file mode 100644 index 0000000000..f5508c2176 --- /dev/null +++ b/pallets/capacity/src/tests/staking_target_details_tests.rs @@ -0,0 +1,108 @@ +use super::mock::*; +use crate::*; +use frame_support::{assert_err, assert_ok}; + +#[test] +fn impl_staking_target_details_increase_by() { + let mut staking_target = StakingTargetDetails::>::default(); + assert_eq!(staking_target.deposit(10, 10), Some(())); + + assert_eq!( + staking_target, + StakingTargetDetails::> { amount: 10u64, capacity: 10 } + ) +} + +#[test] +fn staking_target_details_withdraw_reduces_staking_and_capacity_amounts() { + let mut staking_target_details = + StakingTargetDetails::> { amount: 25u64, capacity: 30u64 }; + staking_target_details.withdraw(10, 10, ::MinimumStakingAmount::get()); + + assert_eq!( + staking_target_details, + StakingTargetDetails::> { amount: 15u64, capacity: 20u64 } + ) +} + +#[test] +fn staking_target_details_withdraw_reduces_to_zero_if_balance_is_below_minimum() { + let mut staking_target_details = + StakingTargetDetails::> { amount: 10u64, capacity: 20u64 }; + staking_target_details.withdraw(8, 16, ::MinimumStakingAmount::get()); + assert_eq!(staking_target_details, StakingTargetDetails::>::default()); +} + +#[test] +fn staking_target_details_withdraw_reduces_total_tokens_staked_and_total_tokens_available() { + let mut capacity_details = CapacityDetails::, ::EpochNumber> { + remaining_capacity: 10u64, + total_tokens_staked: 10u64, + total_capacity_issued: 10u64, + last_replenished_epoch: 0u32, + }; + capacity_details.withdraw(4, 5); + + assert_eq!( + capacity_details, + CapacityDetails::, ::EpochNumber> { + remaining_capacity: 6u64, + total_tokens_staked: 5u64, + total_capacity_issued: 6u64, + last_replenished_epoch: 0u32 + } + ) +} + +#[test] +fn staking_target_details_replenish_all_resets_remaining_capacity_to_total_capacity_issued() { + let mut capacity_details = CapacityDetails::, ::EpochNumber> { + total_tokens_staked: 22u64, + total_capacity_issued: 12u64, + remaining_capacity: 10u64, + last_replenished_epoch: 3u32, + }; + let current_epoch: u32 = 5; + capacity_details.replenish_all(¤t_epoch); + + assert_eq!(12u64, capacity_details.total_capacity_issued); + assert_eq!(capacity_details.total_capacity_issued, capacity_details.remaining_capacity); + assert_eq!(current_epoch, capacity_details.last_replenished_epoch); + assert_eq!(22u64, capacity_details.total_tokens_staked); +} + +#[test] +fn staking_target_details_replenish_by_amount_sets_new_capacity_and_touches_last_replenished_epoch() +{ + let mut capacity_details = CapacityDetails::, ::EpochNumber> { + total_tokens_staked: 65_000u64, + total_capacity_issued: 32_500u64, + remaining_capacity: 1_000u64, + last_replenished_epoch: 3_000u32, + }; + let current_epoch: u32 = 3434; + capacity_details.replenish_by_amount(2001, ¤t_epoch); + + assert_eq!(32_500u64, capacity_details.total_capacity_issued); + assert_eq!(3_001u64, capacity_details.remaining_capacity); + assert_eq!(current_epoch, capacity_details.last_replenished_epoch); + assert_eq!(65_000u64, capacity_details.total_tokens_staked); +} + +#[test] +fn staking_target_details_deduct_capacity_by_amount_can_do_math() { + let mut capacity_details = CapacityDetails::, ::EpochNumber> { + total_tokens_staked: 5u64, + total_capacity_issued: 7u64, + remaining_capacity: 6u64, + last_replenished_epoch: 2u32, + }; + assert_ok!(capacity_details.deduct_capacity_by_amount(2u64)); + + assert_eq!(5u64, capacity_details.total_tokens_staked); + assert_eq!(7u64, capacity_details.total_capacity_issued); + assert_eq!(4u64, capacity_details.remaining_capacity); + assert_eq!(2u32, capacity_details.last_replenished_epoch); + + assert_err!(capacity_details.deduct_capacity_by_amount(99u64), ArithmeticError::Underflow); +} diff --git a/pallets/capacity/src/tests/testing_utils.rs b/pallets/capacity/src/tests/testing_utils.rs new file mode 100644 index 0000000000..075ade4d84 --- /dev/null +++ b/pallets/capacity/src/tests/testing_utils.rs @@ -0,0 +1,106 @@ +use super::mock::*; +use frame_support::{assert_ok, traits::Hooks}; + +#[allow(unused)] +#[allow(deprecated)] +use sp_runtime::traits::SignedExtension; + +use crate::{ + BalanceOf, CapacityDetails, Config, CurrentEraInfo, CurrentEraProviderBoostTotal, Event, + RewardEraInfo, StakingAccountLedger, StakingTargetLedger, StakingType, +}; +use common_primitives::msa::MessageSourceId; + +pub fn capacity_events() -> Vec> { + let result = System::events() + .into_iter() + .map(|r| r.event) + .filter_map(|e| { + if let RuntimeEvent::Capacity(inner) = e { + log::warn!("inner: {:?}", inner); + Some(inner) + } else { + log::warn!("nothing"); + None + } + }) + .collect::>(); + + System::reset_events(); + result +} + +pub fn run_to_block(n: u32) { + while System::block_number() < n { + if System::block_number() > 1 { + System::on_finalize(System::block_number()); + } + System::set_block_number(System::block_number() + 1); + System::on_initialize(System::block_number()); + Capacity::on_initialize(System::block_number()); + } +} + +// Remove capacity on_initialize, needed to emulate pre-existing block height +pub fn system_run_to_block(n: u32) { + while System::block_number() < n { + if System::block_number() > 1 { + System::on_finalize(System::block_number()); + } + System::set_block_number(System::block_number() + 1); + System::on_initialize(System::block_number()); + } +} + +pub fn register_provider(target_id: MessageSourceId, name: String) { + let name = Vec::from(name).try_into().expect("error"); + assert_ok!(Msa::create_registered_provider(target_id.into(), name)); +} + +/// Create Capacity account and set remaining and available amounts. +pub fn create_capacity_account_and_fund( + target_msa_id: MessageSourceId, + remaining: BalanceOf, + available: BalanceOf, + last_replenished: ::EpochNumber, +) -> CapacityDetails, ::EpochNumber> { + let mut capacity_details = + CapacityDetails::, ::EpochNumber>::default(); + + capacity_details.remaining_capacity = remaining; + capacity_details.total_tokens_staked = available; + capacity_details.total_capacity_issued = available; + capacity_details.last_replenished_epoch = last_replenished; + + Capacity::set_capacity_for(target_msa_id, capacity_details.clone()); + + capacity_details.clone() +} + +pub fn setup_provider( + staker: &u64, + target: &MessageSourceId, + amount: &u64, + staking_type: StakingType, +) { + let provider_name = String::from("Cst-") + target.to_string().as_str(); + register_provider(*target, provider_name); + if amount.gt(&0u64) { + if staking_type == StakingType::MaximumCapacity { + assert_ok!(Capacity::stake(RuntimeOrigin::signed(*staker), *target, *amount,)); + } else { + assert_ok!(Capacity::provider_boost(RuntimeOrigin::signed(*staker), *target, *amount)); + } + let target = StakingTargetLedger::::get(staker, target).unwrap(); + assert_eq!(target.amount, *amount); + let account_staking_type = StakingAccountLedger::::get(staker).unwrap().staking_type; + assert_eq!(account_staking_type, staking_type); + } +} + +// Currently the reward pool is a constant, however it could change in the future. +pub fn set_era_and_reward_pool(era_index: u32, started_at: u32, total_staked_token: u64) { + let era_info = RewardEraInfo { era_index, started_at }; + CurrentEraInfo::::set(era_info); + CurrentEraProviderBoostTotal::::set(total_staked_token); +} diff --git a/pallets/capacity/src/tests/unlock_chunks_tests.rs b/pallets/capacity/src/tests/unlock_chunks_tests.rs new file mode 100644 index 0000000000..423e0db3de --- /dev/null +++ b/pallets/capacity/src/tests/unlock_chunks_tests.rs @@ -0,0 +1,38 @@ +use crate::{ + tests::mock::{new_test_ext, Test}, + unlock_chunks_from_vec, unlock_chunks_reap_thawed, unlock_chunks_total, UnlockChunkList, +}; +use sp_runtime::BoundedVec; + +#[test] +fn unlock_chunks_reap_thawed_happy_path() { + new_test_ext().execute_with(|| { + // 10 token total, 6 token unstaked + let new_unlocks: Vec<(u32, u32)> = vec![(1u32, 2u32), (2u32, 3u32), (3u32, 4u32)]; + let mut chunks = unlock_chunks_from_vec::(&new_unlocks); + assert_eq!(3, chunks.len()); + + // At epoch 3, the first two chunks should be thawed. + let reaped = unlock_chunks_reap_thawed::(&mut chunks, 3); + assert_eq!(3, reaped); + assert_eq!(1, chunks.len()); + assert_eq!(3, unlock_chunks_total::(&chunks)); + + // At epoch 5, all unstaking is done. + assert_eq!(3u64, unlock_chunks_reap_thawed::(&mut chunks, 5u32)); + assert_eq!(0, chunks.len()); + + assert_eq!(0u64, unlock_chunks_reap_thawed::(&mut chunks, 5u32)); + }) +} + +#[test] +fn unlock_chunks_total_works() { + new_test_ext().execute_with(|| { + let mut chunks: UnlockChunkList = BoundedVec::default(); + assert_eq!(0u64, unlock_chunks_total::(&chunks)); + let new_unlocks: Vec<(u32, u32)> = vec![(1u32, 2u32), (2u32, 3u32), (3u32, 4u32)]; + chunks = unlock_chunks_from_vec::(&new_unlocks); + assert_eq!(6u64, unlock_chunks_total::(&chunks)); + }) +} diff --git a/pallets/capacity/src/tests/unstaking_tests.rs b/pallets/capacity/src/tests/unstaking_tests.rs new file mode 100644 index 0000000000..867e2bdf69 --- /dev/null +++ b/pallets/capacity/src/tests/unstaking_tests.rs @@ -0,0 +1,586 @@ +use super::{mock::*, testing_utils::*}; +use crate as pallet_capacity; +use crate::{ + CapacityDetails, CapacityLedger, CurrentEpoch, CurrentEraProviderBoostTotal, FreezeReason, + ProviderBoostHistories, ProviderBoostHistory, StakingAccountLedger, StakingDetails, + StakingTargetDetails, StakingTargetLedger, StakingType, StakingType::ProviderBoost, + UnlockChunk, UnstakeUnlocks, +}; +use common_primitives::msa::MessageSourceId; +use frame_support::{ + assert_noop, assert_ok, + traits::{fungible::InspectFreeze, Get}, +}; +use pallet_capacity::{BalanceOf, Config, Error, Event}; +use sp_core::bounded::BoundedVec; + +#[test] +fn unstake_happy_path() { + new_test_ext().execute_with(|| { + let token_account = 200; + let target: MessageSourceId = 1; + let staking_amount = 100; + let unstaking_amount = 40; + + register_provider(target, String::from("Test Target")); + + assert_ok!(Capacity::stake(RuntimeOrigin::signed(token_account), target, staking_amount)); + assert_ok!(Capacity::unstake( + RuntimeOrigin::signed(token_account), + target, + unstaking_amount + )); + + // Assert that staking account detail values are decremented correctly after unstaking + let staking_account_details = StakingAccountLedger::::get(token_account).unwrap(); + + let expected_unlocking_chunks: BoundedVec< + UnlockChunk, ::EpochNumber>, + ::MaxUnlockingChunks, + > = BoundedVec::try_from(vec![UnlockChunk { value: unstaking_amount, thaw_at: 2u32 }]) + .unwrap(); + + let unlocking = UnstakeUnlocks::::get(token_account).unwrap(); + assert_eq!(unlocking, expected_unlocking_chunks); + + assert_eq!( + StakingDetails:: { active: 60u64, staking_type: StakingType::MaximumCapacity }, + staking_account_details, + ); + + // Assert that staking target detail values are decremented correctly after unstaking + let staking_target_details = + StakingTargetLedger::::get(token_account, target).unwrap(); + + assert_eq!( + staking_target_details, + StakingTargetDetails::> { amount: 60u64, capacity: 6u64 } + ); + + // Assert that the capacity detail values for the target are decremented properly after unstaking + let capacity_details = CapacityLedger::::get(target).unwrap(); + + assert_eq!( + capacity_details, + CapacityDetails::, ::EpochNumber> { + remaining_capacity: 6u64, + total_tokens_staked: 60u64, + total_capacity_issued: 6u64, + last_replenished_epoch: 0u32, + } + ); + + let events = capacity_events(); + assert_eq!( + events.last().unwrap(), + &Event::UnStaked { + account: token_account, + target, + amount: unstaking_amount, + capacity: 4u64 + } + ); + }); +} + +// This test checks that when two accounts stake to a target, and one +// account unstakes everything, that all the capacity generated is removed AND that +// the remaining capacity is correct +#[test] +fn unstaking_all_by_one_staker_reaps_target() { + new_test_ext().execute_with(|| { + let token_account = 200; + let token_account2 = 400; + let staking_amount1 = 100; + let staking_amount2 = 101; + let target: MessageSourceId = 1; + + register_provider(target, String::from("Test Target")); + + assert_ok!(Capacity::stake(RuntimeOrigin::signed(token_account), target, staking_amount1)); + assert_ok!(Capacity::stake(RuntimeOrigin::signed(token_account2), target, staking_amount2)); + + let mut capacity_details = CapacityLedger::::get(target).unwrap(); + assert_eq!( + capacity_details, + CapacityDetails { + remaining_capacity: 20, + total_tokens_staked: 201, + total_capacity_issued: 20, + last_replenished_epoch: 0, + } + ); + + assert_ok!(Capacity::unstake( + RuntimeOrigin::signed(token_account), + target, + staking_amount1 + )); + + // Assert that the staking details is reaped + assert!(StakingAccountLedger::::get(token_account).is_none()); + + // Assert target details is reaped + assert!(StakingTargetLedger::::get(token_account, target).is_none()); + + // Assert that capacity account is adjusted correctly + capacity_details = CapacityLedger::::get(target).unwrap(); + assert_eq!( + capacity_details, + CapacityDetails { + remaining_capacity: 10, + total_tokens_staked: 101, + total_capacity_issued: 10, + last_replenished_epoch: 0, + } + ); + }) +} + +#[test] +fn unstake_errors_unstaking_amount_is_zero() { + new_test_ext().execute_with(|| { + let token_account = 200; + let target: MessageSourceId = 1; + let staking_amount = 10; + let unstaking_amount = 0; + + register_provider(target, String::from("Test Target")); + + assert_ok!(Capacity::stake(RuntimeOrigin::signed(token_account), target, staking_amount)); + assert_noop!( + Capacity::unstake(RuntimeOrigin::signed(token_account), target, unstaking_amount), + Error::::UnstakedAmountIsZero + ); + }); +} + +fn fill_unstake_unlock_chunks( + token_account: u64, + target: MessageSourceId, + unstaking_amount: u64, + use_new_epoch: bool, +) { + for _n in 0..::MaxUnlockingChunks::get() { + assert_ok!(Capacity::unstake( + RuntimeOrigin::signed(token_account), + target, + unstaking_amount + )); + if use_new_epoch { + // this would force the thaw_at to be different + CurrentEpoch::::set(CurrentEpoch::::get() + 1); + } + } +} +#[test] +fn unstake_errors_max_unlocking_chunks_exceeded_stake_with_different_epochs() { + new_test_ext().execute_with(|| { + let token_account = 200; + let target: MessageSourceId = 1; + let staking_amount = 60; + let unstaking_amount = 10; + + register_provider(target, String::from("Test Target")); + + assert_ok!(Capacity::stake(RuntimeOrigin::signed(token_account), target, staking_amount)); + + fill_unstake_unlock_chunks(token_account, target, unstaking_amount, true); + + assert_noop!( + Capacity::unstake(RuntimeOrigin::signed(token_account), target, unstaking_amount), + Error::::MaxUnlockingChunksExceeded + ); + }); +} + +#[test] +fn unstake_should_work_with_more_than_max_unlocking_chunks_exceeded_in_the_same_epochs() { + new_test_ext().execute_with(|| { + let token_account = 200; + let target: MessageSourceId = 1; + let staking_amount = 70; + let unstaking_amount = 10; + + register_provider(target, String::from("Test Target")); + + assert_ok!(Capacity::stake(RuntimeOrigin::signed(token_account), target, staking_amount)); + + fill_unstake_unlock_chunks(token_account, target, unstaking_amount, false); + + assert_ok!(Capacity::unstake( + RuntimeOrigin::signed(token_account), + target, + unstaking_amount + )); + + let max_unlocking: u32 = ::MaxUnlockingChunks::get(); + let expected_unlocking_chunks: BoundedVec< + UnlockChunk, ::EpochNumber>, + ::MaxUnlockingChunks, + > = BoundedVec::try_from(vec![UnlockChunk { + value: unstaking_amount * (max_unlocking as u64 + 1), + thaw_at: 2u32, + }]) + .unwrap(); + + let unlocking = UnstakeUnlocks::::get(token_account).unwrap(); + assert_eq!(unlocking, expected_unlocking_chunks); + }); +} + +#[test] +fn unstake_errors_max_unlocking_chunks_exceeded_provider_boost() { + new_test_ext().execute_with(|| { + let token_account = 200; + let target: MessageSourceId = 1; + let staking_amount = 60; + let unstaking_amount = 10; + + register_provider(target, String::from("Test Target")); + + assert_ok!(Capacity::provider_boost( + RuntimeOrigin::signed(token_account), + target, + staking_amount + )); + + fill_unstake_unlock_chunks(token_account, target, unstaking_amount, true); + + assert_noop!( + Capacity::unstake(RuntimeOrigin::signed(token_account), target, unstaking_amount), + Error::::MaxUnlockingChunksExceeded + ); + }); +} + +#[test] +fn unstake_should_work_with_more_than_max_unlocking_chunks_exceeded_in_the_same_epochs_provider_boost( +) { + new_test_ext().execute_with(|| { + let token_account = 200; + let target: MessageSourceId = 1; + let staking_amount = 70; + let unstaking_amount = 10; + + register_provider(target, String::from("Test Target")); + + assert_ok!(Capacity::provider_boost( + RuntimeOrigin::signed(token_account), + target, + staking_amount + )); + + fill_unstake_unlock_chunks(token_account, target, unstaking_amount, false); + + assert_ok!(Capacity::unstake( + RuntimeOrigin::signed(token_account), + target, + unstaking_amount + )); + + let max_unlocking: u32 = ::MaxUnlockingChunks::get(); + let expected_unlocking_chunks: BoundedVec< + UnlockChunk, ::EpochNumber>, + ::MaxUnlockingChunks, + > = BoundedVec::try_from(vec![UnlockChunk { + value: unstaking_amount * (max_unlocking as u64 + 1), + thaw_at: 2u32, + }]) + .unwrap(); + + let unlocking = UnstakeUnlocks::::get(token_account).unwrap(); + assert_eq!(unlocking, expected_unlocking_chunks); + }); +} + +#[test] +fn unstake_errors_amount_to_unstake_exceeds_amount_staked() { + new_test_ext().execute_with(|| { + let token_account = 200; + let target: MessageSourceId = 1; + let staking_amount = 10; + let unstaking_amount = 11; + + register_provider(target, String::from("Test Target")); + + assert_ok!(Capacity::stake(RuntimeOrigin::signed(token_account), target, staking_amount)); + assert_noop!( + Capacity::unstake(RuntimeOrigin::signed(token_account), target, unstaking_amount), + Error::::InsufficientStakingBalance + ); + }); +} + +#[test] +fn unstake_errors_not_a_staking_account() { + new_test_ext().execute_with(|| { + let token_account = 200; + let target: MessageSourceId = 1; + + let unstaking_amount = 11; + + register_provider(target, String::from("Test Target")); + + assert_noop!( + Capacity::unstake(RuntimeOrigin::signed(token_account), target, unstaking_amount), + Error::::NotAStakingAccount + ); + }); +} + +#[test] +fn unstaking_everything_reaps_staking_account() { + new_test_ext().execute_with(|| { + let staker = 500; + let booster = 600; + let target = 1; + let amount = 20; + assert_ok!(Capacity::set_epoch_length(RuntimeOrigin::root(), 10)); + + register_provider(target, String::from("WithdrawUnst")); + assert_ok!(Capacity::stake(RuntimeOrigin::signed(staker), target, amount)); + assert_ok!(Capacity::provider_boost(RuntimeOrigin::signed(booster), target, amount)); + + run_to_block(1); + // unstake everything + assert_ok!(Capacity::unstake(RuntimeOrigin::signed(staker), target, 20)); + assert_eq!(20u64, Balances::balance_frozen(&FreezeReason::CapacityStaking.into(), &staker)); + assert_ok!(Capacity::unstake(RuntimeOrigin::signed(booster), target, 20)); + assert_eq!(20u64, Balances::balance_frozen(&FreezeReason::CapacityStaking.into(), &staker)); + + // it should reap the staking account right away + assert!(StakingAccountLedger::::get(staker).is_none()); + assert!(StakingAccountLedger::::get(booster).is_none()); + }) +} + +#[test] +fn unstake_when_not_staking_to_target_errors() { + new_test_ext().execute_with(|| { + let staker = 500; + let target = 1; + let amount = 20; + register_provider(target, String::from("WithdrawUnst")); + + assert_ok!(Capacity::stake(RuntimeOrigin::signed(staker), target, amount)); + assert_noop!( + Capacity::unstake(RuntimeOrigin::signed(staker), 2, 20), + Error::::StakerTargetRelationshipNotFound + ); + }) +} + +#[test] +fn unstake_provider_boosted_target_in_same_era_adjusts_reward_pool_total() { + new_test_ext().execute_with(|| { + // two accounts staking to the same target + let account1 = 600; + let target: MessageSourceId = 1; + let amount1 = 500; + let unstake_amount = 200; + register_provider(target, String::from("Foo")); + run_to_block(5); // ensures Capacity::on_initialize is run + + assert_ok!(Capacity::provider_boost(RuntimeOrigin::signed(account1), target, amount1)); + assert_ok!(Capacity::unstake(RuntimeOrigin::signed(account1), target, unstake_amount)); + + assert_eq!(CurrentEraProviderBoostTotal::::get(), 300u64); + }); +} + +#[test] +fn unstake_maximum_does_not_change_reward_pool() { + new_test_ext().execute_with(|| { + // two accounts staking to the same target + let account1 = 600; + let a_booster = 10_000; + let target: MessageSourceId = 1; + let amount1 = 500; + let unstake_amount = 200; + + register_provider(target, String::from("Foo")); + run_to_block(5); // ensures Capacity::on_initialize is run + + assert_ok!(Capacity::stake(RuntimeOrigin::signed(account1), target, amount1)); + assert_ok!(Capacity::provider_boost(RuntimeOrigin::signed(a_booster), target, amount1)); + + assert_eq!(CurrentEraProviderBoostTotal::::get(), amount1); + + assert_ok!(Capacity::unstake(RuntimeOrigin::signed(account1), target, unstake_amount)); + assert_eq!(CurrentEraProviderBoostTotal::::get(), amount1); + }); +} + +#[test] +fn unstake_should_increase_the_unlock_chunk_for_any_target() { + new_test_ext().execute_with(|| { + let staker = 10_000; + + let target1 = 1; + let target2 = 2; + register_provider(target1, String::from("Test Target")); + register_provider(target2, String::from("Test Target")); + + assert_ok!(Capacity::provider_boost(RuntimeOrigin::signed(staker), target1, 1_000)); + assert_ok!(Capacity::provider_boost(RuntimeOrigin::signed(staker), target2, 2_000)); + + // max unlock chunks in mock is 4 + for _i in 0..2 { + assert_ok!(Capacity::unstake(RuntimeOrigin::signed(staker), target1, 50)); + assert_ok!(Capacity::unstake(RuntimeOrigin::signed(staker), target2, 50)); + } + assert_ok!(Capacity::unstake(RuntimeOrigin::signed(staker), target1, 50),); + + let expected_unlocking_chunks: BoundedVec< + UnlockChunk, ::EpochNumber>, + ::MaxUnlockingChunks, + > = BoundedVec::try_from(vec![UnlockChunk { value: 250, thaw_at: 2u32 }]).unwrap(); + + let unlocking = UnstakeUnlocks::::get(staker).unwrap(); + assert_eq!(unlocking, expected_unlocking_chunks); + }) +} + +#[test] +fn unstake_by_a_booster_updates_provider_boost_history_with_correct_amount() { + new_test_ext().execute_with(|| { + let staker = 10_000; + let target1 = 1; + register_provider(target1, String::from("Test Target")); + + assert_ok!(Capacity::provider_boost(RuntimeOrigin::signed(staker), target1, 1_000)); + let mut pbh = ProviderBoostHistories::::get(staker).unwrap(); + assert_eq!(pbh.count(), 1); + + // If unstaking in the next era, this should add a new staking history entry. + system_run_to_block(10); // last block of era 0 + run_to_block(41); // beginning of era 4 + assert_ok!(Capacity::claim_staking_rewards(RuntimeOrigin::signed(staker))); + pbh = ProviderBoostHistories::::get(staker).unwrap(); + assert_eq!(pbh.count(), 1); + + // This adds a new history item for the unstake, in current era, 4 + assert_ok!(Capacity::unstake(RuntimeOrigin::signed(staker), target1, 400u64)); + + // earned 4 in rewards for eras 3,2,1 + assert_eq!(get_balance::(&staker), 10_012u64); + assert_transferable::(&staker, 12u64); + + pbh = ProviderBoostHistories::::get(staker).unwrap(); + assert_eq!(pbh.count(), 2); + let entry = pbh.get_entry_for_era(&4u32).unwrap(); + assert_eq!(entry, &600u64); + }) +} + +#[test] +fn unstake_all_by_booster_reaps_boost_history() { + new_test_ext().execute_with(|| { + let staker = 10_000; + let target1 = 1; + register_provider(target1, String::from("Test Target")); + + // Era 0, block 1. + assert_ok!(Capacity::provider_boost(RuntimeOrigin::signed(staker), target1, 1_000)); + let pbh = ProviderBoostHistories::::get(staker).unwrap(); + assert_eq!(pbh.count(), 1); + + // If unstaking in the next era, this should add a new staking history entry. + system_run_to_block(10); // last block of era 0 + run_to_block(41); // First block of Era 4. + assert_ok!(Capacity::claim_staking_rewards(RuntimeOrigin::signed(staker))); + assert_ok!(Capacity::unstake(RuntimeOrigin::signed(staker), target1, 1_000)); + assert!(ProviderBoostHistories::::get(staker).is_none()); + // earn 4 each for 3 past eras, 3,2,1 + assert_eq!(get_balance::(&staker), 10_012u64); + assert_transferable::(&staker, 12u64); + }) +} + +#[test] +fn unstake_maximum_immediately_after_staking_does_not_create_provider_boost_history() { + new_test_ext().execute_with(|| { + let staker = 10_000; + let target1 = 1; + register_provider(target1, String::from("Test Target")); + + assert_ok!(Capacity::stake(RuntimeOrigin::signed(staker), target1, 1_000)); + assert_ok!(Capacity::unstake(RuntimeOrigin::signed(staker), target1, 500)); + assert!(ProviderBoostHistories::::get(staker).is_none()); + }) +} + +// Simulate a series of stake/unstake events over 10 eras then check for +// correct staking values, including for eras that do not have an explicit entry. +#[test] +fn get_amount_staked_for_era_works() { + let mut staking_history: ProviderBoostHistory = ProviderBoostHistory::new(); + + for i in 0u32..5u32 { + staking_history.add_era_balance(&i, &10u64); + } + assert_eq!(staking_history.get_amount_staked_for_era(&0u32), 10u64); + assert_eq!(staking_history.get_amount_staked_for_era(&4u32), 50u64); + + staking_history.subtract_era_balance(&4u32, &50u64); + assert_eq!(staking_history.get_amount_staked_for_era(&5u32), 0u64); + + for i in 10u32..=13u32 { + staking_history.add_era_balance(&i, &5u64); + } + assert_eq!(staking_history.get_amount_staked_for_era(&10u32), 5u64); + assert_eq!(staking_history.get_amount_staked_for_era(&13u32), 20u64); + + staking_history.subtract_era_balance(&14u32, &7u64); + assert_eq!(staking_history.get_amount_staked_for_era(&14u32), 13u64); + assert_eq!(staking_history.get_amount_staked_for_era(&15u32), 13u64); + + staking_history.add_era_balance(&15u32, &10u64); + + let expected_balance = 23u64; + assert_eq!(staking_history.get_amount_staked_for_era(&15u32), expected_balance); + + // unstake everything + staking_history.subtract_era_balance(&20u32, &expected_balance); + + assert_eq!(staking_history.get_amount_staked_for_era(&16u32), expected_balance); + assert_eq!(staking_history.get_amount_staked_for_era(&17u32), expected_balance); + assert_eq!(staking_history.get_amount_staked_for_era(&18u32), expected_balance); + assert_eq!(staking_history.get_amount_staked_for_era(&19u32), expected_balance); + + // from 20 onward, should return 0. + assert_eq!(staking_history.get_amount_staked_for_era(&20u32), 0u64); + assert_eq!(staking_history.get_amount_staked_for_era(&31u32), 0u64); + + // ensure reporting from earlier is still correct. + assert_eq!(staking_history.get_amount_staked_for_era(&14u32), 13u64); + + // querying for an era that has been cleared due to the hitting the bound + // (ProviderBoostHistoryLimit = 5 in mock) returns zero. + assert_eq!(staking_history.get_amount_staked_for_era(&9u32), 0u64); +} + +#[test] +fn unstake_fails_if_provider_boosted_and_have_unclaimed_rewards() { + new_test_ext().execute_with(|| { + let account = 10_000u64; + let target: MessageSourceId = 10; + let amount = 1_000u64; + + // staking 1k as of block 1, era 1 + setup_provider(&account, &target, &amount, ProviderBoost); + + // staking 2k as of block 11, era 2 + run_to_block(11); + assert_ok!(Capacity::provider_boost(RuntimeOrigin::signed(account), target, amount)); + + // staking 3k as of era 4, block 31 + run_to_block(31); + + assert_noop!( + Capacity::unstake(RuntimeOrigin::signed(account), target, amount), + Error::::MustFirstClaimRewards + ); + }) +} diff --git a/pallets/capacity/src/tests/withdraw_unstaked_tests.rs b/pallets/capacity/src/tests/withdraw_unstaked_tests.rs new file mode 100644 index 0000000000..03f2a1cbdd --- /dev/null +++ b/pallets/capacity/src/tests/withdraw_unstaked_tests.rs @@ -0,0 +1,130 @@ +use super::{ + mock::*, + testing_utils::{register_provider, run_to_block}, +}; +use crate::{ + self as pallet_capacity, unlock_chunks_from_vec, CurrentEpoch, CurrentEpochInfo, EpochInfo, + Error, Event, FreezeReason, UnstakeUnlocks, +}; +use frame_support::{assert_noop, assert_ok, traits::fungible::InspectFreeze}; +use pallet_capacity::Config; + +#[test] +fn withdraw_unstaked_happy_path() { + new_test_ext().execute_with(|| { + let staker = 500; + CurrentEpoch::::set(0); + CurrentEpochInfo::::set(EpochInfo { epoch_start: 0 }); + assert_ok!(Capacity::set_epoch_length(RuntimeOrigin::root(), 10)); + + // set new unlock chunks using tuples of (value, thaw_at in number of Epochs) + let new_unlocks: Vec<(u32, u32)> = vec![(1u32, 2u32), (2u32, 3u32), (3u32, 4u32)]; + let unlocking = unlock_chunks_from_vec::(&new_unlocks); + UnstakeUnlocks::::set(staker, Some(unlocking)); + + // We want to advance to epoch 3 to unlock the first two sets. + run_to_block(31); + assert_eq!(3u32, CurrentEpoch::::get()); + assert_ok!(Capacity::withdraw_unstaked(RuntimeOrigin::signed(staker))); + + let expected_reaped_value = 3u64; + System::assert_last_event( + Event::StakeWithdrawn { account: staker, amount: expected_reaped_value }.into(), + ); + }) +} + +#[test] +fn withdraw_unstaked_correctly_sets_new_lock_state() { + new_test_ext().execute_with(|| { + let staker = 500; + let target = 1; + let amount = 20; + assert_ok!(Capacity::set_epoch_length(RuntimeOrigin::root(), 10)); + + register_provider(target, String::from("WithdrawUnst")); + assert_ok!(Capacity::stake(RuntimeOrigin::signed(staker), target, amount)); + + run_to_block(1); + assert_ok!(Capacity::unstake(RuntimeOrigin::signed(staker), target, 1)); + assert_eq!(20, Balances::balance_frozen(&FreezeReason::CapacityStaking.into(), &staker)); + + // thaw period in mock is 2 Epochs * 10 blocks = 20 blocks. + run_to_block(21); + assert_ok!(Capacity::unstake(RuntimeOrigin::signed(staker), target, 2)); + assert_ok!(Capacity::withdraw_unstaked(RuntimeOrigin::signed(staker))); + assert_eq!(19u64, Balances::balance_frozen(&FreezeReason::CapacityStaking.into(), &staker)); + + run_to_block(41); + assert_ok!(Capacity::unstake(RuntimeOrigin::signed(staker), target, 3)); + assert_ok!(Capacity::withdraw_unstaked(RuntimeOrigin::signed(staker))); + assert_eq!(17u64, Balances::balance_frozen(&FreezeReason::CapacityStaking.into(), &staker)); + + run_to_block(61); + assert_ok!(Capacity::withdraw_unstaked(RuntimeOrigin::signed(staker))); + assert_eq!( + 14u64, + ::Currency::balance_frozen( + &FreezeReason::CapacityStaking.into(), + &staker + ) + ); + }) +} + +#[test] +fn withdraw_unstaked_cleans_up_storage_and_removes_all_locks_if_no_stake_left() { + new_test_ext().execute_with(|| { + let staker = 500; + let target = 1; + let amount = 20; + assert_ok!(Capacity::set_epoch_length(RuntimeOrigin::root(), 10)); + + register_provider(target, String::from("WithdrawUnst")); + assert_ok!(Capacity::stake(RuntimeOrigin::signed(staker), target, amount)); + + run_to_block(1); + // unstake everything + assert_ok!(Capacity::unstake(RuntimeOrigin::signed(staker), target, 20)); + // wait for thaw + run_to_block(21); + assert_ok!(Capacity::withdraw_unstaked(RuntimeOrigin::signed(staker))); + + assert_eq!( + ::Currency::balance_frozen( + &FreezeReason::CapacityStaking.into(), + &staker + ), + 0u64 + ); + + assert!(UnstakeUnlocks::::get(staker).is_none()); + }); +} + +#[test] +fn withdraw_unstaked_cannot_withdraw_if_no_unstaking_chunks() { + new_test_ext().execute_with(|| { + assert_noop!( + Capacity::withdraw_unstaked(RuntimeOrigin::signed(500)), + Error::::NoUnstakedTokensAvailable + ); + }) +} +#[test] +fn withdraw_unstaked_cannot_withdraw_if_unstaking_chunks_not_thawed() { + new_test_ext().execute_with(|| { + let staker = 500; + let target = 1; + let amount = 10; + assert_ok!(Capacity::set_epoch_length(RuntimeOrigin::root(), 10)); + register_provider(target, String::from("WithdrawUnst")); + assert_ok!(Capacity::stake(RuntimeOrigin::signed(staker), target, amount)); + + run_to_block(11); + assert_noop!( + Capacity::withdraw_unstaked(RuntimeOrigin::signed(500)), + Error::::NoUnstakedTokensAvailable + ); + }) +} diff --git a/pallets/capacity/src/tests/withdrawal_tests.rs b/pallets/capacity/src/tests/withdrawal_tests.rs new file mode 100644 index 0000000000..3b0533e724 --- /dev/null +++ b/pallets/capacity/src/tests/withdrawal_tests.rs @@ -0,0 +1,79 @@ +use super::{mock::*, testing_utils::*}; +use crate::{BalanceOf, CapacityDetails, CapacityLedger, Config, Error, Event}; +use common_primitives::capacity::Nontransferable; +use frame_support::{assert_noop, assert_ok}; + +#[test] +fn impl_withdraw_is_successful() { + new_test_ext().execute_with(|| { + let target_msa_id = 1; + let remaining_amount = 10u64; + let total_available_amount = 10u64; + let _ = create_capacity_account_and_fund( + target_msa_id, + remaining_amount, + total_available_amount, + 1u32, + ); + + assert_ok!(Capacity::deduct(target_msa_id, 5u64)); + let events = capacity_events(); + + assert_eq!( + events.last().unwrap(), + &Event::CapacityWithdrawn { msa_id: target_msa_id, amount: 5u64 } + ); + + let mut capacity_details = + CapacityDetails::, ::EpochNumber>::default(); + + capacity_details.remaining_capacity = 5u64; + capacity_details.total_tokens_staked = 10u64; + capacity_details.total_capacity_issued = 10u64; + capacity_details.last_replenished_epoch = 1u32; + + assert_eq!(CapacityLedger::::get(target_msa_id).unwrap(), capacity_details); + }); +} + +#[test] +fn impl_withdraw_errors_target_capacity_not_found() { + new_test_ext().execute_with(|| { + let target_msa_id = 1; + let amount = 10u64; + assert_noop!( + Capacity::deduct(target_msa_id, amount), + Error::::TargetCapacityNotFound + ); + }); +} + +#[test] +fn impl_withdraw_errors_insufficient_balance() { + new_test_ext().execute_with(|| { + let target_msa_id = 1; + let remaining_amount = 10u64; + let total_available_amount = 10u64; + let _ = create_capacity_account_and_fund( + target_msa_id, + remaining_amount, + total_available_amount, + 1u32, + ); + + assert_noop!( + Capacity::deduct(target_msa_id, 20u32.into()), + Error::::InsufficientCapacityBalance + ); + + let mut capacity_details = + CapacityDetails::, ::EpochNumber>::default(); + + capacity_details.remaining_capacity = 10u64; + capacity_details.total_tokens_staked = 10u64; + capacity_details.total_capacity_issued = 10u64; + capacity_details.last_replenished_epoch = 1u32; + + assert_eq!(CapacityLedger::::get(target_msa_id).unwrap(), capacity_details); + }); +} diff --git a/pallets/capacity/src/types.rs b/pallets/capacity/src/types.rs new file mode 100644 index 0000000000..70235a6482 --- /dev/null +++ b/pallets/capacity/src/types.rs @@ -0,0 +1,541 @@ +//! Types for the Capacity Pallet +use super::*; +use common_primitives::capacity::RewardEra; +use frame_support::{ + pallet_prelude::PhantomData, BoundedVec, EqNoBound, PartialEqNoBound, RuntimeDebugNoBound, +}; +use parity_scale_codec::{Decode, Encode, EncodeLike, MaxEncodedLen}; +use scale_info::TypeInfo; +use sp_runtime::{ + traits::{AtLeast32BitUnsigned, CheckedAdd, CheckedSub, Get, Saturating, Zero}, + BoundedBTreeMap, RuntimeDebug, +}; +#[cfg(any(feature = "runtime-benchmarks", test))] +extern crate alloc; +#[cfg(any(feature = "runtime-benchmarks", test))] +use alloc::vec::Vec; + +/// How much, as a percentage of staked token, to boost a targeted Provider when staking. +/// this value should be between 0 and 100 +pub const STAKED_PERCENTAGE_TO_BOOST: u32 = 50; + +#[derive( + Clone, Copy, Debug, Decode, Encode, TypeInfo, Eq, MaxEncodedLen, PartialEq, PartialOrd, +)] +/// The type of staking a given Staking Account is doing. +pub enum StakingType { + /// Staking account targets Providers for capacity only, no token reward + MaximumCapacity, + /// Staking account targets Providers and splits reward between capacity to the Provider + /// and token for the account holder + ProviderBoost, +} + +/// The type used for storing information about staking details. +#[derive( + TypeInfo, RuntimeDebugNoBound, PartialEqNoBound, EqNoBound, Clone, Decode, Encode, MaxEncodedLen, +)] +#[scale_info(skip_type_params(T))] +pub struct StakingDetails { + /// The amount a Staker has staked, minus the sum of all tokens in `unlocking`. + pub active: BalanceOf, + /// The type of staking for this staking account + pub staking_type: StakingType, +} + +/// The type that is used to record a single request for a number of tokens to be unlocked. +#[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug, TypeInfo, MaxEncodedLen)] +pub struct UnlockChunk { + /// Amount to be unfrozen. + pub value: Balance, + /// Block number at which point funds are unfrozen. + pub thaw_at: EpochNumber, +} + +impl StakingDetails { + /// Increases total and active balances by an amount. + pub fn deposit(&mut self, amount: BalanceOf) -> Option<()> { + self.active = amount.checked_add(&self.active)?; + Some(()) + } + + /// Decrease the amount of active stake by an amount and create an UnlockChunk. + pub fn withdraw(&mut self, amount: BalanceOf) -> Result, DispatchError> { + let current_active = self.active; + + let mut new_active = self.active.saturating_sub(amount); + let mut actual_unstaked: BalanceOf = amount; + + if new_active.le(&T::MinimumStakingAmount::get()) { + actual_unstaked = current_active; + new_active = Zero::zero(); + } + + self.active = new_active; + Ok(actual_unstaked) + } +} + +impl Default for StakingDetails { + fn default() -> Self { + Self { active: Zero::zero(), staking_type: StakingType::MaximumCapacity } + } +} + +/// Details about the total token amount targeted to an MSA. +/// The Capacity that the target will receive. +#[derive(Default, PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug, TypeInfo, MaxEncodedLen)] +pub struct StakingTargetDetails +where + Balance: Default + Saturating + Copy + CheckedAdd + CheckedSub, +{ + /// The total amount of tokens that have been targeted to the MSA. + pub amount: Balance, + /// The total Capacity that an MSA received. + pub capacity: Balance, +} + +impl + StakingTargetDetails +{ + /// Increase an MSA target Staking total and Capacity amount. + pub fn deposit(&mut self, amount: Balance, capacity: Balance) -> Option<()> { + self.amount = amount.checked_add(&self.amount)?; + self.capacity = capacity.checked_add(&self.capacity)?; + Some(()) + } + + /// Decrease an MSA target Staking total and Capacity amount. + /// If the amount would put you below the minimum, zero out the amount. + /// Return the actual amounts withdrawn. + pub fn withdraw( + &mut self, + amount: Balance, + capacity: Balance, + minimum: Balance, + ) -> (Balance, Balance) { + let entire_amount = self.amount; + let entire_capacity = self.capacity; + self.amount = self.amount.saturating_sub(amount); + if self.amount.lt(&minimum) { + *self = Self::default(); + return (entire_amount, entire_capacity); + } else { + self.capacity = self.capacity.saturating_sub(capacity); + } + (amount, capacity) + } +} + +/// The type for storing Registered Provider Capacity balance: +#[derive(PartialEq, Eq, Clone, Default, Encode, Decode, RuntimeDebug, TypeInfo, MaxEncodedLen)] +pub struct CapacityDetails { + /// The Capacity remaining for the `last_replenished_epoch`. + pub remaining_capacity: Balance, + /// The amount of tokens staked to an MSA. + pub total_tokens_staked: Balance, + /// The total Capacity issued to an MSA. + pub total_capacity_issued: Balance, + /// The last Epoch that an MSA was replenished with Capacity. + pub last_replenished_epoch: EpochNumber, +} + +impl CapacityDetails +where + Balance: Saturating + Copy + CheckedAdd + CheckedSub, + EpochNumber: Clone + PartialOrd + PartialEq, +{ + /// Increase a targets total Tokens staked and Capacity total issuance by an amount. + /// To be called on a stake + pub fn deposit(&mut self, amount: &Balance, capacity: &Balance) -> Option<()> { + self.total_tokens_staked = amount.checked_add(&self.total_tokens_staked)?; + self.remaining_capacity = capacity.checked_add(&self.remaining_capacity)?; + self.total_capacity_issued = capacity.checked_add(&self.total_capacity_issued)?; + + // We do not touch last_replenished epoch here, because it would create a DoS vulnerability. + // Since capacity is lazily replenished, an attacker could stake + // a minimum amount, then at the very beginning of each epoch, stake a tiny additional amount, + // thus preventing replenishment when "last_replenished_at" is checked on the next provider's + // message. + Some(()) + } + + /// Return whether capacity can be replenished, given the current epoch. + pub fn can_replenish(&self, current_epoch: EpochNumber) -> bool { + self.last_replenished_epoch.lt(¤t_epoch) + } + + /// Completely refill all available capacity. + /// To be called lazily when a Capacity message is sent in a new epoch. + pub fn replenish_all(&mut self, current_epoch: &EpochNumber) { + self.remaining_capacity = self.total_capacity_issued; + self.last_replenished_epoch = current_epoch.clone(); + } + + /// Replenish remaining capacity by the provided amount and + /// touch last_replenished_epoch with the current epoch. + pub fn replenish_by_amount(&mut self, amount: Balance, current_epoch: &EpochNumber) { + self.remaining_capacity = amount.saturating_add(self.remaining_capacity); + self.last_replenished_epoch = current_epoch.clone(); + } + + /// Deduct the given amount from the remaining capacity that can be used to pay for messages. + /// To be called when a message is paid for with capacity. + pub fn deduct_capacity_by_amount(&mut self, amount: Balance) -> Result<(), ArithmeticError> { + let new_remaining = + self.remaining_capacity.checked_sub(&amount).ok_or(ArithmeticError::Underflow)?; + self.remaining_capacity = new_remaining; + Ok(()) + } + + /// Decrease a target's total available capacity. + /// To be called on an unstake. + pub fn withdraw(&mut self, capacity_deduction: Balance, tokens_staked_deduction: Balance) { + self.total_tokens_staked = self.total_tokens_staked.saturating_sub(tokens_staked_deduction); + self.total_capacity_issued = self.total_capacity_issued.saturating_sub(capacity_deduction); + self.remaining_capacity = self.remaining_capacity.saturating_sub(capacity_deduction); + } +} + +/// The type for storing details about an epoch. +/// May evolve to store other needed data such as epoch_end. +#[derive( + PartialEq, Eq, Clone, Default, PartialOrd, Encode, Decode, RuntimeDebug, TypeInfo, MaxEncodedLen, +)] +pub struct EpochInfo { + /// The block number when this epoch started. + pub epoch_start: BlockNumber, +} + +/// A BoundedVec containing UnlockChunks +pub type UnlockChunkList = BoundedVec< + UnlockChunk, ::EpochNumber>, + ::MaxUnlockingChunks, +>; + +/// Computes and returns the total token held in an UnlockChunkList. +pub fn unlock_chunks_total(unlock_chunks: &UnlockChunkList) -> BalanceOf { + unlock_chunks + .iter() + .fold(Zero::zero(), |acc: BalanceOf, chunk| acc.saturating_add(chunk.value)) +} + +/// Deletes thawed chunks +/// Caller is responsible for updating free/locked balance on the token account. +/// Returns: the total amount reaped from `unlocking` +pub fn unlock_chunks_reap_thawed( + unlock_chunks: &mut UnlockChunkList, + current_epoch: ::EpochNumber, +) -> BalanceOf { + let mut total_reaped: BalanceOf = 0u32.into(); + unlock_chunks.retain(|chunk| { + if current_epoch.ge(&chunk.thaw_at) { + total_reaped = total_reaped.saturating_add(chunk.value); + false + } else { + true + } + }); + total_reaped +} +#[cfg(any(feature = "runtime-benchmarks", test))] +#[allow(clippy::unwrap_used)] +/// set unlock chunks with (balance, thaw_at). Does not check BoundedVec limit. +/// returns true on success, false on failure (?) +/// For testing and benchmarks ONLY, note possible panic via BoundedVec::try_from + unwrap +pub fn unlock_chunks_from_vec(chunks: &[(u32, u32)]) -> UnlockChunkList { + let result: Vec, ::EpochNumber>> = chunks + .iter() + .map(|chunk| UnlockChunk { value: chunk.0.into(), thaw_at: chunk.1.into() }) + .collect(); + // CAUTION + BoundedVec::try_from(result).unwrap() +} + +/// The information needed to track a Reward Era +#[derive( + PartialEq, + Eq, + Clone, + Copy, + Default, + PartialOrd, + Encode, + Decode, + RuntimeDebug, + TypeInfo, + MaxEncodedLen, +)] +pub struct RewardEraInfo +where + RewardEra: AtLeast32BitUnsigned + EncodeLike, + BlockNumber: AtLeast32BitUnsigned + EncodeLike, +{ + /// the index of this era + pub era_index: RewardEra, + /// the starting block of this era + pub started_at: BlockNumber, +} + +/// A chunk of Reward Pool history items consists of a BoundedBTreeMap, +/// RewardEra is the key and the total stake for the RewardPool is the value. +/// the map has up to T::RewardPoolChunkLength items, however, the chunk storing the current era +/// has only that one. +#[derive(PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, MaxEncodedLen)] +#[scale_info(skip_type_params(T))] +pub struct RewardPoolHistoryChunk( + BoundedBTreeMap, T::RewardPoolChunkLength>, +); +impl Default for RewardPoolHistoryChunk { + fn default() -> Self { + Self::new() + } +} + +impl Clone for RewardPoolHistoryChunk { + fn clone(&self) -> Self { + Self(self.0.clone()) + } +} + +impl RewardPoolHistoryChunk { + /// Constructs a new empty RewardPoolHistoryChunk + pub fn new() -> Self { + RewardPoolHistoryChunk(BoundedBTreeMap::new()) + } + + /// A wrapper for retrieving how much was provider_boosted in the given era + /// from the BoundedBTreeMap + pub fn total_for_era(&self, reward_era: &RewardEra) -> Option<&BalanceOf> { + self.0.get(reward_era) + } + + /// returns the range of eras in this chunk + #[cfg(test)] + pub fn era_range(&self) -> (RewardEra, RewardEra) { + let zero_reward_era: RewardEra = Zero::zero(); + let zero_balance: BalanceOf = Zero::zero(); + let (first, _vf) = self.0.first_key_value().unwrap_or((&zero_reward_era, &zero_balance)); + let (last, _vl) = self.0.last_key_value().unwrap_or((&zero_reward_era, &zero_balance)); + (*first, *last) + } + + /// A wrapper for adding a new reward_era_entry to the BoundedBTreeMap + pub fn try_insert( + &mut self, + reward_era: RewardEra, + total: BalanceOf, + ) -> Result>, (RewardEra, BalanceOf)> { + self.0.try_insert(reward_era, total) + } + + /// Get the earliest reward era stored in this BoundedBTreeMap + #[cfg(test)] + pub fn earliest_era(&self) -> Option<&RewardEra> { + if let Some((first_era, _first_total)) = self.0.first_key_value() { + return Some(first_era); + } + None + } + + /// Is this chunk full? It should always be yes once there is enough RewardPool history. + pub fn is_full(&self) -> bool { + self.0.len().eq(&(T::RewardPoolChunkLength::get() as usize)) + } +} + +/// A record of staked amounts for a complete RewardEra +#[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug, TypeInfo, MaxEncodedLen)] +#[scale_info(skip_type_params(T))] +pub struct ProviderBoostHistory( + BoundedBTreeMap, T::ProviderBoostHistoryLimit>, +); + +impl Default for ProviderBoostHistory { + fn default() -> Self { + Self::new() + } +} + +impl ProviderBoostHistory { + /// Constructs a new empty ProviderBoostHistory + pub fn new() -> Self { + ProviderBoostHistory(BoundedBTreeMap::new()) + } + + /// Adds `add_amount` to the entry for `reward_era`. + /// Updates entry, or creates a new entry if it does not exist + /// returns the total number of history items + pub fn add_era_balance( + &mut self, + reward_era: &RewardEra, + add_amount: &BalanceOf, + ) -> Option { + if let Some(entry) = self.0.get_mut(reward_era) { + // update + *entry = entry.saturating_add(*add_amount); + } else { + // insert + self.remove_oldest_entry_if_full(); // this guarantees a try_insert never fails + let current_staking_amount = self.get_last_staking_amount(); + if self + .0 + .try_insert(*reward_era, current_staking_amount.saturating_add(*add_amount)) + .is_err() + { + return None; + }; + } + + Some(self.count()) + } + + /// Subtracts `subtract_amount` from the entry for `reward_era`. Zero values are still retained. + /// Returns None if there is no entry for the reward era. + /// Returns Some(0) if they unstaked everything and this is the only entry + /// Otherwise returns Some(history_count) + pub fn subtract_era_balance( + &mut self, + reward_era: &RewardEra, + subtract_amount: &BalanceOf, + ) -> Option { + if self.count().is_zero() { + return None; + }; + + let current_staking_amount = self.get_last_staking_amount(); + if current_staking_amount.eq(subtract_amount) && self.count().eq(&1usize) { + // Should not get here unless rewards have all been claimed, and provider boost history was + // correctly updated. This && condition is to protect stakers against loss of rewards in the + // case of some bug with payouts and boost history. + return Some(0usize); + } + + if let Some(entry) = self.0.get_mut(reward_era) { + *entry = entry.saturating_sub(*subtract_amount); + } else { + self.remove_oldest_entry_if_full(); + if self + .0 + .try_insert(*reward_era, current_staking_amount.saturating_sub(*subtract_amount)) + .is_err() + { + return None; + } + } + Some(self.count()) + } + + /// A wrapper for the key/value retrieval of the BoundedBTreeMap. + pub(crate) fn get_entry_for_era(&self, reward_era: &RewardEra) -> Option<&BalanceOf> { + self.0.get(reward_era) + } + + /// Returns how much was staked during the given era, even if there is no explicit entry for that era. + /// If there is no history entry for `reward_era`, returns the next earliest entry's staking balance. + /// + /// Note there is no sense of what the current era is; subsequent calls could return a different result + /// if 'reward_era' is the current era and there has been a boost or unstake. + pub(crate) fn get_amount_staked_for_era(&self, reward_era: &RewardEra) -> BalanceOf { + // this gives an ordered-by-key Iterator + let bmap_iter = self.0.iter(); + let mut eligible_amount: BalanceOf = Zero::zero(); + for (era, balance) in bmap_iter { + if era.eq(reward_era) { + return *balance; + } + // there was a boost or unstake in this era. + else if era.gt(reward_era) { + return eligible_amount; + } // eligible_amount has been staked through reward_era + eligible_amount = *balance; + } + eligible_amount + } + + /// Returns the number of history items + pub fn count(&self) -> usize { + self.0.len() + } + + fn remove_oldest_entry_if_full(&mut self) { + if self.is_full() { + // compiler errors with unwrap + if let Some((earliest_key, _earliest_val)) = self.0.first_key_value() { + self.0.remove(&earliest_key.clone()); + } + } + } + + fn get_last_staking_amount(&self) -> BalanceOf { + // compiler errors with unwrap + if let Some((_last_key, last_value)) = self.0.last_key_value() { + return *last_value; + }; + Zero::zero() + } + + fn is_full(&self) -> bool { + self.count().eq(&(T::ProviderBoostHistoryLimit::get() as usize)) + } +} + +/// Struct with utilities for storing and updating unlock chunks +#[derive(Debug, TypeInfo, PartialEqNoBound, EqNoBound, Clone, Decode, Encode, MaxEncodedLen)] +#[scale_info(skip_type_params(T))] +pub struct RetargetInfo { + /// How many times the account has retargeted this RewardEra + pub retarget_count: u32, + /// The last RewardEra they retargeted + pub last_retarget_at: RewardEra, + _marker: PhantomData, +} + +impl Default for RetargetInfo { + fn default() -> Self { + Self { retarget_count: 0u32, last_retarget_at: Zero::zero(), _marker: Default::default() } + } +} + +impl RetargetInfo { + /// Constructor + pub fn new(retarget_count: u32, last_retarget_at: RewardEra) -> Self { + Self { retarget_count, last_retarget_at, _marker: Default::default() } + } + /// Increment retarget count and return Some() or + /// If there are too many, return None + pub fn update(&mut self, current_era: RewardEra) -> Option<()> { + let max_retargets = T::MaxRetargetsPerRewardEra::get(); + if self.retarget_count.ge(&max_retargets) && self.last_retarget_at.eq(¤t_era) { + return None; + } + if self.last_retarget_at.lt(¤t_era) { + self.last_retarget_at = current_era; + self.retarget_count = 1; + } else { + self.retarget_count = self.retarget_count.saturating_add(1u32); + } + Some(()) + } +} + +/// A trait that provides the Economic Model for Provider Boosting. +pub trait ProviderBoostRewardsProvider { + /// The type for currency + type Balance; + + /// Return the size of the reward pool using the current economic model + fn reward_pool_size(total_staked: BalanceOf) -> BalanceOf; + + /// Calculate the reward for a single era. We don't care about the era number, + /// just the values. + fn era_staking_reward( + era_amount_staked: BalanceOf, // how much individual staked for a specific era + era_total_staked: BalanceOf, // how much everyone staked for the era + era_reward_pool_size: BalanceOf, // how much token in the reward pool that era + ) -> BalanceOf; + + /// Return the effective amount when staked for a Provider Boost + /// The amount is multiplied by a factor > 0 and < 1. + fn capacity_boost(amount: BalanceOf) -> BalanceOf; +} diff --git a/pallets/capacity/src/weights.rs b/pallets/capacity/src/weights.rs new file mode 100644 index 0000000000..7a5c62984f --- /dev/null +++ b/pallets/capacity/src/weights.rs @@ -0,0 +1,487 @@ + +//! Autogenerated weights for `pallet_capacity` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-04-18, STEPS: `20`, REPEAT: `10`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `ip-10-173-0-75`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` +//! WASM-EXECUTION: `Compiled`, CHAIN: `None`, DB CACHE: `1024` + +// Executed Command: +// ./scripts/../target/release/frequency +// benchmark +// pallet +// --pallet=pallet_capacity +// --extrinsic +// * +// --heap-pages=4096 +// --steps=20 +// --repeat=10 +// --output=./scripts/../pallets/capacity/src/weights.rs +// --template=./scripts/../.maintain/frame-weight-template.hbs +// --additional-trie-layers=3 +// --runtime=./scripts/../target/release/wbuild/frequency-runtime/frequency_runtime.wasm +// --genesis-builder=runtime + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; +use core::marker::PhantomData; + +/// Weight functions needed for `pallet_capacity`. +pub trait WeightInfo { + fn stake() -> Weight; + fn withdraw_unstaked() -> Weight; + fn start_new_epoch_if_needed() -> Weight; + fn start_new_reward_era_if_needed() -> Weight; + fn unstake() -> Weight; + fn set_epoch_length() -> Weight; + fn change_staking_target() -> Weight; + fn provider_boost() -> Weight; + fn claim_staking_rewards() -> Weight; +} + +/// Weights for `pallet_capacity` using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl WeightInfo for SubstrateWeight { + /// Storage: `Msa::ProviderToRegistryEntry` (r:1 w:0) + /// Proof: `Msa::ProviderToRegistryEntry` (`max_values`: None, `max_size`: Some(33), added: 2508, mode: `MaxEncodedLen`) + /// Storage: `Capacity::StakingAccountLedger` (r:1 w:1) + /// Proof: `Capacity::StakingAccountLedger` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) + /// Storage: `Capacity::StakingTargetLedger` (r:1 w:1) + /// Proof: `Capacity::StakingTargetLedger` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) + /// Storage: `Capacity::CapacityLedger` (r:1 w:1) + /// Proof: `Capacity::CapacityLedger` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) + /// Storage: `Capacity::UnstakeUnlocks` (r:1 w:0) + /// Proof: `Capacity::UnstakeUnlocks` (`max_values`: None, `max_size`: Some(121), added: 2596, mode: `MaxEncodedLen`) + /// Storage: `Balances::Freezes` (r:1 w:1) + /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + /// Storage: `Balances::Locks` (r:1 w:0) + /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) + fn stake() -> Weight { + // Proof Size summary in bytes: + // Measured: `106` + // Estimated: `5259` + // Minimum execution time: 43_793_000 picoseconds. + Weight::from_parts(44_490_000, 5259) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) + } + /// Storage: `Capacity::UnstakeUnlocks` (r:1 w:1) + /// Proof: `Capacity::UnstakeUnlocks` (`max_values`: None, `max_size`: Some(121), added: 2596, mode: `MaxEncodedLen`) + /// Storage: `Capacity::StakingAccountLedger` (r:1 w:0) + /// Proof: `Capacity::StakingAccountLedger` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) + /// Storage: `Balances::Freezes` (r:1 w:1) + /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + /// Storage: `Balances::Locks` (r:1 w:0) + /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) + fn withdraw_unstaked() -> Weight { + // Proof Size summary in bytes: + // Measured: `155` + // Estimated: `5259` + // Minimum execution time: 26_962_000 picoseconds. + Weight::from_parts(27_956_000, 5259) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: `Capacity::CurrentEpochInfo` (r:1 w:1) + /// Proof: `Capacity::CurrentEpochInfo` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Capacity::EpochLength` (r:1 w:0) + /// Proof: `Capacity::EpochLength` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + fn start_new_epoch_if_needed() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `1984` + // Minimum execution time: 2_746_000 picoseconds. + Weight::from_parts(2_879_000, 1984) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Capacity::CurrentEraProviderBoostTotal` (r:1 w:0) + /// Proof: `Capacity::CurrentEraProviderBoostTotal` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) + /// Storage: `Capacity::ProviderBoostRewardPools` (r:1 w:1) + /// Proof: `Capacity::ProviderBoostRewardPools` (`max_values`: None, `max_size`: Some(113), added: 2588, mode: `MaxEncodedLen`) + fn start_new_reward_era_if_needed() -> Weight { + // Proof Size summary in bytes: + // Measured: `229` + // Estimated: `4073` + // Minimum execution time: 9_006_000 picoseconds. + Weight::from_parts(9_353_000, 4073) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Capacity::ProviderBoostHistories` (r:1 w:1) + /// Proof: `Capacity::ProviderBoostHistories` (`max_values`: None, `max_size`: Some(641), added: 3116, mode: `MaxEncodedLen`) + /// Storage: `Capacity::StakingAccountLedger` (r:1 w:1) + /// Proof: `Capacity::StakingAccountLedger` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) + /// Storage: `Capacity::CurrentEraProviderBoostTotal` (r:1 w:1) + /// Proof: `Capacity::CurrentEraProviderBoostTotal` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) + /// Storage: `Capacity::UnstakeUnlocks` (r:1 w:1) + /// Proof: `Capacity::UnstakeUnlocks` (`max_values`: None, `max_size`: Some(121), added: 2596, mode: `MaxEncodedLen`) + /// Storage: `Capacity::StakingTargetLedger` (r:1 w:1) + /// Proof: `Capacity::StakingTargetLedger` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) + /// Storage: `Capacity::CapacityLedger` (r:1 w:1) + /// Proof: `Capacity::CapacityLedger` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) + fn unstake() -> Weight { + // Proof Size summary in bytes: + // Measured: `359` + // Estimated: `4601` + // Minimum execution time: 42_772_000 picoseconds. + Weight::from_parts(44_044_000, 4601) + .saturating_add(T::DbWeight::get().reads(6_u64)) + .saturating_add(T::DbWeight::get().writes(6_u64)) + } + /// Storage: `Capacity::EpochLength` (r:0 w:1) + /// Proof: `Capacity::EpochLength` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + fn set_epoch_length() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 5_058_000 picoseconds. + Weight::from_parts(5_363_000, 0) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Capacity::Retargets` (r:1 w:1) + /// Proof: `Capacity::Retargets` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::ProviderToRegistryEntry` (r:1 w:0) + /// Proof: `Msa::ProviderToRegistryEntry` (`max_values`: None, `max_size`: Some(33), added: 2508, mode: `MaxEncodedLen`) + /// Storage: `Capacity::StakingAccountLedger` (r:1 w:0) + /// Proof: `Capacity::StakingAccountLedger` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) + /// Storage: `Capacity::StakingTargetLedger` (r:2 w:2) + /// Proof: `Capacity::StakingTargetLedger` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) + /// Storage: `Capacity::CapacityLedger` (r:2 w:2) + /// Proof: `Capacity::CapacityLedger` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) + fn change_staking_target() -> Weight { + // Proof Size summary in bytes: + // Measured: `353` + // Estimated: `6611` + // Minimum execution time: 41_569_000 picoseconds. + Weight::from_parts(43_167_000, 6611) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(5_u64)) + } + /// Storage: `Msa::ProviderToRegistryEntry` (r:1 w:0) + /// Proof: `Msa::ProviderToRegistryEntry` (`max_values`: None, `max_size`: Some(33), added: 2508, mode: `MaxEncodedLen`) + /// Storage: `Capacity::StakingAccountLedger` (r:1 w:1) + /// Proof: `Capacity::StakingAccountLedger` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) + /// Storage: `Capacity::UnstakeUnlocks` (r:1 w:0) + /// Proof: `Capacity::UnstakeUnlocks` (`max_values`: None, `max_size`: Some(121), added: 2596, mode: `MaxEncodedLen`) + /// Storage: `Balances::Freezes` (r:1 w:1) + /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + /// Storage: `Balances::Locks` (r:1 w:0) + /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) + /// Storage: `Capacity::StakingTargetLedger` (r:1 w:1) + /// Proof: `Capacity::StakingTargetLedger` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) + /// Storage: `Capacity::CapacityLedger` (r:1 w:1) + /// Proof: `Capacity::CapacityLedger` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) + /// Storage: `Capacity::ProviderBoostHistories` (r:1 w:1) + /// Proof: `Capacity::ProviderBoostHistories` (`max_values`: None, `max_size`: Some(641), added: 3116, mode: `MaxEncodedLen`) + /// Storage: `Capacity::CurrentEraProviderBoostTotal` (r:1 w:1) + /// Proof: `Capacity::CurrentEraProviderBoostTotal` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) + fn provider_boost() -> Weight { + // Proof Size summary in bytes: + // Measured: `143` + // Estimated: `5259` + // Minimum execution time: 52_795_000 picoseconds. + Weight::from_parts(53_225_000, 5259) + .saturating_add(T::DbWeight::get().reads(9_u64)) + .saturating_add(T::DbWeight::get().writes(6_u64)) + } + /// Storage: `Capacity::ProviderBoostHistories` (r:1 w:1) + /// Proof: `Capacity::ProviderBoostHistories` (`max_values`: None, `max_size`: Some(641), added: 3116, mode: `MaxEncodedLen`) + /// Storage: `Capacity::ProviderBoostRewardPools` (r:6 w:0) + /// Proof: `Capacity::ProviderBoostRewardPools` (`max_values`: None, `max_size`: Some(113), added: 2588, mode: `MaxEncodedLen`) + fn claim_staking_rewards() -> Weight { + // Proof Size summary in bytes: + // Measured: `1516` + // Estimated: `17013` + // Minimum execution time: 126_876_000 picoseconds. + Weight::from_parts(129_866_000, 17013) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } +} + +// For backwards compatibility and tests. +impl WeightInfo for () { + /// Storage: `Msa::ProviderToRegistryEntry` (r:1 w:0) + /// Proof: `Msa::ProviderToRegistryEntry` (`max_values`: None, `max_size`: Some(33), added: 2508, mode: `MaxEncodedLen`) + /// Storage: `Capacity::StakingAccountLedger` (r:1 w:1) + /// Proof: `Capacity::StakingAccountLedger` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) + /// Storage: `Capacity::StakingTargetLedger` (r:1 w:1) + /// Proof: `Capacity::StakingTargetLedger` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) + /// Storage: `Capacity::CapacityLedger` (r:1 w:1) + /// Proof: `Capacity::CapacityLedger` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) + /// Storage: `Capacity::UnstakeUnlocks` (r:1 w:0) + /// Proof: `Capacity::UnstakeUnlocks` (`max_values`: None, `max_size`: Some(121), added: 2596, mode: `MaxEncodedLen`) + /// Storage: `Balances::Freezes` (r:1 w:1) + /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + /// Storage: `Balances::Locks` (r:1 w:0) + /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) + fn stake() -> Weight { + // Proof Size summary in bytes: + // Measured: `106` + // Estimated: `5259` + // Minimum execution time: 43_793_000 picoseconds. + Weight::from_parts(44_490_000, 5259) + .saturating_add(RocksDbWeight::get().reads(7_u64)) + .saturating_add(RocksDbWeight::get().writes(4_u64)) + } + /// Storage: `Capacity::UnstakeUnlocks` (r:1 w:1) + /// Proof: `Capacity::UnstakeUnlocks` (`max_values`: None, `max_size`: Some(121), added: 2596, mode: `MaxEncodedLen`) + /// Storage: `Capacity::StakingAccountLedger` (r:1 w:0) + /// Proof: `Capacity::StakingAccountLedger` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) + /// Storage: `Balances::Freezes` (r:1 w:1) + /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + /// Storage: `Balances::Locks` (r:1 w:0) + /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) + fn withdraw_unstaked() -> Weight { + // Proof Size summary in bytes: + // Measured: `155` + // Estimated: `5259` + // Minimum execution time: 26_962_000 picoseconds. + Weight::from_parts(27_956_000, 5259) + .saturating_add(RocksDbWeight::get().reads(4_u64)) + .saturating_add(RocksDbWeight::get().writes(2_u64)) + } + /// Storage: `Capacity::CurrentEpochInfo` (r:1 w:1) + /// Proof: `Capacity::CurrentEpochInfo` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Capacity::EpochLength` (r:1 w:0) + /// Proof: `Capacity::EpochLength` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + fn start_new_epoch_if_needed() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `1984` + // Minimum execution time: 2_746_000 picoseconds. + Weight::from_parts(2_879_000, 1984) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: `Capacity::CurrentEraProviderBoostTotal` (r:1 w:0) + /// Proof: `Capacity::CurrentEraProviderBoostTotal` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) + /// Storage: `Capacity::ProviderBoostRewardPools` (r:1 w:1) + /// Proof: `Capacity::ProviderBoostRewardPools` (`max_values`: None, `max_size`: Some(113), added: 2588, mode: `MaxEncodedLen`) + fn start_new_reward_era_if_needed() -> Weight { + // Proof Size summary in bytes: + // Measured: `229` + // Estimated: `4073` + // Minimum execution time: 9_006_000 picoseconds. + Weight::from_parts(9_353_000, 4073) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: `Capacity::ProviderBoostHistories` (r:1 w:1) + /// Proof: `Capacity::ProviderBoostHistories` (`max_values`: None, `max_size`: Some(641), added: 3116, mode: `MaxEncodedLen`) + /// Storage: `Capacity::StakingAccountLedger` (r:1 w:1) + /// Proof: `Capacity::StakingAccountLedger` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) + /// Storage: `Capacity::CurrentEraProviderBoostTotal` (r:1 w:1) + /// Proof: `Capacity::CurrentEraProviderBoostTotal` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) + /// Storage: `Capacity::UnstakeUnlocks` (r:1 w:1) + /// Proof: `Capacity::UnstakeUnlocks` (`max_values`: None, `max_size`: Some(121), added: 2596, mode: `MaxEncodedLen`) + /// Storage: `Capacity::StakingTargetLedger` (r:1 w:1) + /// Proof: `Capacity::StakingTargetLedger` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) + /// Storage: `Capacity::CapacityLedger` (r:1 w:1) + /// Proof: `Capacity::CapacityLedger` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) + fn unstake() -> Weight { + // Proof Size summary in bytes: + // Measured: `359` + // Estimated: `4601` + // Minimum execution time: 42_772_000 picoseconds. + Weight::from_parts(44_044_000, 4601) + .saturating_add(RocksDbWeight::get().reads(6_u64)) + .saturating_add(RocksDbWeight::get().writes(6_u64)) + } + /// Storage: `Capacity::EpochLength` (r:0 w:1) + /// Proof: `Capacity::EpochLength` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + fn set_epoch_length() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 5_058_000 picoseconds. + Weight::from_parts(5_363_000, 0) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: `Capacity::Retargets` (r:1 w:1) + /// Proof: `Capacity::Retargets` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::ProviderToRegistryEntry` (r:1 w:0) + /// Proof: `Msa::ProviderToRegistryEntry` (`max_values`: None, `max_size`: Some(33), added: 2508, mode: `MaxEncodedLen`) + /// Storage: `Capacity::StakingAccountLedger` (r:1 w:0) + /// Proof: `Capacity::StakingAccountLedger` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) + /// Storage: `Capacity::StakingTargetLedger` (r:2 w:2) + /// Proof: `Capacity::StakingTargetLedger` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) + /// Storage: `Capacity::CapacityLedger` (r:2 w:2) + /// Proof: `Capacity::CapacityLedger` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) + fn change_staking_target() -> Weight { + // Proof Size summary in bytes: + // Measured: `353` + // Estimated: `6611` + // Minimum execution time: 41_569_000 picoseconds. + Weight::from_parts(43_167_000, 6611) + .saturating_add(RocksDbWeight::get().reads(7_u64)) + .saturating_add(RocksDbWeight::get().writes(5_u64)) + } + /// Storage: `Msa::ProviderToRegistryEntry` (r:1 w:0) + /// Proof: `Msa::ProviderToRegistryEntry` (`max_values`: None, `max_size`: Some(33), added: 2508, mode: `MaxEncodedLen`) + /// Storage: `Capacity::StakingAccountLedger` (r:1 w:1) + /// Proof: `Capacity::StakingAccountLedger` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) + /// Storage: `Capacity::UnstakeUnlocks` (r:1 w:0) + /// Proof: `Capacity::UnstakeUnlocks` (`max_values`: None, `max_size`: Some(121), added: 2596, mode: `MaxEncodedLen`) + /// Storage: `Balances::Freezes` (r:1 w:1) + /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + /// Storage: `Balances::Locks` (r:1 w:0) + /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) + /// Storage: `Capacity::StakingTargetLedger` (r:1 w:1) + /// Proof: `Capacity::StakingTargetLedger` (`max_values`: None, `max_size`: Some(88), added: 2563, mode: `MaxEncodedLen`) + /// Storage: `Capacity::CapacityLedger` (r:1 w:1) + /// Proof: `Capacity::CapacityLedger` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) + /// Storage: `Capacity::ProviderBoostHistories` (r:1 w:1) + /// Proof: `Capacity::ProviderBoostHistories` (`max_values`: None, `max_size`: Some(641), added: 3116, mode: `MaxEncodedLen`) + /// Storage: `Capacity::CurrentEraProviderBoostTotal` (r:1 w:1) + /// Proof: `Capacity::CurrentEraProviderBoostTotal` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) + fn provider_boost() -> Weight { + // Proof Size summary in bytes: + // Measured: `143` + // Estimated: `5259` + // Minimum execution time: 52_795_000 picoseconds. + Weight::from_parts(53_225_000, 5259) + .saturating_add(RocksDbWeight::get().reads(9_u64)) + .saturating_add(RocksDbWeight::get().writes(6_u64)) + } + /// Storage: `Capacity::ProviderBoostHistories` (r:1 w:1) + /// Proof: `Capacity::ProviderBoostHistories` (`max_values`: None, `max_size`: Some(641), added: 3116, mode: `MaxEncodedLen`) + /// Storage: `Capacity::ProviderBoostRewardPools` (r:6 w:0) + /// Proof: `Capacity::ProviderBoostRewardPools` (`max_values`: None, `max_size`: Some(113), added: 2588, mode: `MaxEncodedLen`) + fn claim_staking_rewards() -> Weight { + // Proof Size summary in bytes: + // Measured: `1516` + // Estimated: `17013` + // Minimum execution time: 126_876_000 picoseconds. + Weight::from_parts(129_866_000, 17013) + .saturating_add(RocksDbWeight::get().reads(7_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } +} + + +#[cfg(test)] +mod tests { + use frame_support::{traits::Get, weights::Weight, dispatch::DispatchClass}; + use common_runtime::constants::{MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO}; + use common_runtime::weights::extrinsic_weights::ExtrinsicBaseWeight; + + #[allow(dead_code)] + struct BlockWeights; + impl Get for BlockWeights { + fn get() -> frame_system::limits::BlockWeights { + frame_system::limits::BlockWeights::builder() + .base_block(Weight::zero()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::non_mandatory(), |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .build_or_panic() + } + } + + #[test] + fn test_stake() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 5259 + ); + } + #[test] + fn test_withdraw_unstaked() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 5259 + ); + } + #[test] + fn test_start_new_epoch_if_needed() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 1984 + ); + } + #[test] + fn test_start_new_reward_era_if_needed() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4073 + ); + } + #[test] + fn test_unstake() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4601 + ); + } + #[test] + fn test_change_staking_target() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 6611 + ); + } + #[test] + fn test_provider_boost() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 5259 + ); + } + #[test] + fn test_claim_staking_rewards() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 17013 + ); + } +} \ No newline at end of file diff --git a/pallets/frequency-tx-payment/Cargo.toml b/pallets/frequency-tx-payment/Cargo.toml new file mode 100644 index 0000000000..8ec5f9e9d9 --- /dev/null +++ b/pallets/frequency-tx-payment/Cargo.toml @@ -0,0 +1,73 @@ +[package] +authors = ["Frequency"] +description = "Pallet for paying fees" +edition = "2021" +homepage = "https://frequency.xyz" +license = "Apache-2.0" +name = "pallet-frequency-tx-payment" +publish = false +repository = "https://github.com/frequency-chain/frequency/" +version = "0.0.0" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[dependencies] +parity-scale-codec = { workspace = true, features = ["derive"] } +frame-benchmarking = { workspace = true, optional = true } +frame-support = { workspace = true } +frame-system = { workspace = true } +pallet-capacity = { default-features = false, path = "../capacity" } +pallet-msa = { default-features = false, path = "../msa" } +pallet-transaction-payment = { workspace = true } +scale-info = { workspace = true, features = ["derive"] } +sp-core = { workspace = true } +sp-io = { workspace = true } +sp-runtime = { workspace = true } +log = { workspace = true } + +# Frequency related dependencies +common-primitives = { default-features = false, path = "../../common/primitives" } + +[dev-dependencies] +common-runtime = { path = "../../runtime/common", default-features = false } +pallet-balances = { workspace = true } +pallet-utility = { workspace = true } + + +[features] +default = ["std"] +runtime-benchmarks = [ + "frame-benchmarking/runtime-benchmarks", + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "pallet-capacity/runtime-benchmarks", + "pallet-msa/runtime-benchmarks", + "pallet-transaction-payment/runtime-benchmarks", + "common-primitives/runtime-benchmarks", + "common-runtime/runtime-benchmarks", + "pallet-balances/runtime-benchmarks", + "pallet-utility/runtime-benchmarks", +] +std = [ + "parity-scale-codec/std", + "frame-benchmarking/std", + "frame-support/std", + "frame-system/std", + "pallet-capacity/std", + "pallet-msa/std", + "pallet-transaction-payment/std", + "scale-info/std", + "sp-core/std", + "sp-io/std", + "sp-runtime/std", + "common-primitives/std", + "common-runtime/std", + "pallet-balances/std", + "pallet-utility/std", +] +try-runtime = ["frame-support/try-runtime"] +test = [] + +[lints] +workspace = true diff --git a/pallets/frequency-tx-payment/README.md b/pallets/frequency-tx-payment/README.md new file mode 100644 index 0000000000..e1ef84dea0 --- /dev/null +++ b/pallets/frequency-tx-payment/README.md @@ -0,0 +1,55 @@ +# Frequency Transaction Pallet + +Allows users to perform transactions using Capacity. + +## Summary + +Frequency supports the following alternative payments: + +- Capacity: A refillable resource limited to a subset of transactions. + +The Frequency Transaction Pallet proxies or nests one or more calls inside of the root call to enable them to be paid using an alternative method. +For example, to call something like `add_ipfs_message(params)` with Capacity, one would call `pay_with_capacity(add_ipfs_message(params))`. +The `pay_with_capacity` will verify that the inner call is allowed with Capacity. + +### Requirements for Paying with Capacity + +The account must: +1. Be a current control key on a Provider. +2. Have a minimum balance of the existential deposit. +3. Must have enough Capacity for the call remaining in the current Epoch. + +### Capacity Stable Weights + +Token costs on a specific transaction can fluctuate due to benchmark changes, but the costs of Capacity calls are setup to be relatively consistent. +This consistency is because the price of a Capacity transaction uses a separate set of benchmark weights, which are kept constant at a given point in time. +While periodic updates do occur, the costs typically stay the same or may even decrease over time. + +### Actions + +The Frequency Transaction pallet provides for: + +- Transacting using only Capacity + +## Interactions + +### Extrinsics + +| Name/Description | Caller | Payment | Key Events | Runtime Added | +| -------------------------------- | ------------- | ------- | ------------------------------------------------------------------------------------------------------------- | ------------- | +| `pay_with_capacity`
Proxies a single Capacity allowed call | Provider | Capacity | [`CapacityWithdrawn`](https://frequency-chain.github.io/frequency/pallet_capacity/pallet/enum.Event.html#variant.CapacityWithdrawn)* | 1 | +| `pay_with_capacity_batch_all`
Proxies a batch (limit 10) of Capacity allowed calls | Provider | Capacity | [`CapacityWithdrawn`](https://frequency-chain.github.io/frequency/pallet_capacity/pallet/enum.Event.html#variant.CapacityWithdrawn)* | 1 | + +\* Note: This is just the event noting the use of Capacity. Additional events for the call being proxied will still occur. + +See [Rust Docs](https://frequency-chain.github.io/frequency/pallet_frequency_tx_payment/pallet/struct.Pallet.html) for more details. + +### RPCs + +Note: May be restricted based on node settings and configuration. + +| Name | Description | Call | Node Version | +| ------- | ----------------- | ---------------------------------------------------------------------------------------------------- | ------------ | +| Compute Capacity Fee | Calculates the expected Capacity cost of the supplied transaction | [`computeCapacityFeeDetails`](https://frequency-chain.github.io/frequency/pallet_frequency_tx_payment_rpc/trait.CapacityPaymentApiServer.html#tymethod.compute_capacity_fee_details) | v1.8.0+ | + +See [Rust Docs](https://frequency-chain.github.io/frequency/pallet_frequency_tx_payment_rpc/trait.CapacityPaymentApiServer.html) for more details. diff --git a/pallets/frequency-tx-payment/src/benchmarking.rs b/pallets/frequency-tx-payment/src/benchmarking.rs new file mode 100644 index 0000000000..c54cb85e95 --- /dev/null +++ b/pallets/frequency-tx-payment/src/benchmarking.rs @@ -0,0 +1,46 @@ +use super::*; + +use frame_benchmarking::v2::*; +use frame_system::{Call as SystemCall, RawOrigin}; + +#[benchmarks] +mod benchmarks { + use super::*; + + #[benchmark] + fn pay_with_capacity() -> Result<(), BenchmarkError> { + let sender: T::AccountId = whitelisted_caller(); + let call: Box<::RuntimeCall> = + Box::new(SystemCall::remark { remark: vec![] }.into()); + + #[extrinsic_call] + _(RawOrigin::Signed(sender), call); + + Ok(()) + } + + #[benchmark] + fn pay_with_capacity_batch_all( + n: Linear<0, { T::MaximumCapacityBatchLength::get() as u32 }>, + ) -> Result<(), BenchmarkError> { + let sender: T::AccountId = whitelisted_caller(); + + let mut batched_calls: Vec<::RuntimeCall> = vec![]; + + for _ in 0..n { + let call: ::RuntimeCall = SystemCall::remark { remark: vec![] }.into(); + batched_calls.push(call); + } + + #[extrinsic_call] + _(RawOrigin::Signed(sender), batched_calls); + + Ok(()) + } + + impl_benchmark_test_suite!( + Pallet, + crate::tests::mock::ExtBuilder::default().build(), + crate::tests::mock::Test + ); +} diff --git a/pallets/frequency-tx-payment/src/capacity_stable_weights.rs b/pallets/frequency-tx-payment/src/capacity_stable_weights.rs new file mode 100644 index 0000000000..a8588ce6c1 --- /dev/null +++ b/pallets/frequency-tx-payment/src/capacity_stable_weights.rs @@ -0,0 +1,317 @@ +//! Fixes the Weight values for Capacity transactions as static values +//! Any change in actual weight does not adjust the cost, but will still adjust the block space +//! + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow( + rustdoc::all, + missing_docs, + unused_parens, + unused_imports +)] + +use frame_support::{traits::Get, weights::{Weight, constants::WEIGHT_REF_TIME_PER_NANOS}}; +use core::marker::PhantomData; + +/// The base fee for extrinsics is calculated by running benchmarks. +/// Capacity needs the base fee to remain stable and not change when benchmarks are run. +/// CAPACITY_EXTRINSIC_BASE_WEIGHT is a snapshot of the ExtrinsicBaseWeight +/// taken from: runtime/common/src/weights/extrinsic_weights.rs +/// +/// Time to execute a NO-OP extrinsic, for example `System::remark`. +/// Calculated by multiplying the *Average* with `1.0` and adding `0`. +/// +/// Stats nanoseconds: +/// Min, Max: 104_713, 111_324 +/// Average: 105_455 +/// Median: 105_091 +/// Std-Dev: 1133.64 +/// +/// Percentiles nanoseconds: +/// 99th: 110_219 +/// 95th: 106_592 +/// 75th: 105_471 +pub const CAPACITY_EXTRINSIC_BASE_WEIGHT: Weight = + Weight::from_parts(WEIGHT_REF_TIME_PER_NANOS.saturating_mul(105_455), 0); + +/// Weight functions needed for pallet_msa. +pub trait WeightInfo { + // MSA + fn create_sponsored_account_with_delegation(s: u32) -> Weight; + fn add_public_key_to_msa() -> Weight; + fn grant_delegation(s: u32) -> Weight; + // Messages + fn add_onchain_message(n: u32) -> Weight; + fn add_ipfs_message() -> Weight; + // Stateful-storage + fn apply_item_actions(n: u32) -> Weight; + fn upsert_page(s: u32) -> Weight; + fn delete_page() -> Weight; + fn apply_item_actions_with_signature(s: u32) -> Weight; + fn upsert_page_with_signature(s: u32) -> Weight; + fn delete_page_with_signature() -> Weight; + // Handles + fn claim_handle(b: u32) -> Weight; + fn change_handle(b: u32) -> Weight; +} + +// Update test as well to ensure static weight values `tests/stable_weights_test.rs` + +// Updated to match v1.7.4 released weights + +/// Weights for pallet_msa using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl WeightInfo for SubstrateWeight { + /// Storage: Msa PayloadSignatureRegistryList (r:2 w:2) + /// Proof: Msa PayloadSignatureRegistryList (max_values: Some(50000), max_size: Some(144), added: 2124, mode: MaxEncodedLen) + /// Storage: Msa PayloadSignatureRegistryPointer (r:1 w:1) + /// Proof: Msa PayloadSignatureRegistryPointer (max_values: Some(1), max_size: Some(140), added: 635, mode: MaxEncodedLen) + /// Storage: Msa PublicKeyToMsaId (r:2 w:1) + /// Proof: Msa PublicKeyToMsaId (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) + /// Storage: Msa ProviderToRegistryEntry (r:1 w:0) + /// Proof: Msa ProviderToRegistryEntry (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + /// Storage: Msa CurrentMsaIdentifierMaximum (r:1 w:1) + /// Proof: Msa CurrentMsaIdentifierMaximum (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen) + /// Storage: Msa PublicKeyCountForMsaId (r:1 w:1) + /// Proof: Msa PublicKeyCountForMsaId (max_values: None, max_size: Some(17), added: 2492, mode: MaxEncodedLen) + /// Storage: Msa DelegatorAndProviderToDelegation (r:1 w:1) + /// Proof: Msa DelegatorAndProviderToDelegation (max_values: None, max_size: Some(217), added: 2692, mode: MaxEncodedLen) + /// Storage: Schemas CurrentSchemaIdentifierMaximum (r:1 w:0) + /// Proof Skipped: Schemas CurrentSchemaIdentifierMaximum (max_values: Some(1), max_size: None, mode: Measured) + /// The range of component `s` is `[0, 30]`. + fn create_sponsored_account_with_delegation(s: u32) -> Weight { + // Proof Size summary in bytes: + // Measured: `1393` + // Estimated: `14946` + // Minimum execution time: 119_384_000 picoseconds. + Weight::from_parts(123_084_817, 14946) + // Standard Error: 20_681 + .saturating_add(Weight::from_parts(138_668, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(10_u64)) + .saturating_add(T::DbWeight::get().writes(7_u64)) + } + /// Storage: Msa PayloadSignatureRegistryList (r:4 w:4) + /// Proof: Msa PayloadSignatureRegistryList (max_values: Some(50000), max_size: Some(144), added: 2124, mode: MaxEncodedLen) + /// Storage: Msa PayloadSignatureRegistryPointer (r:1 w:1) + /// Proof: Msa PayloadSignatureRegistryPointer (max_values: Some(1), max_size: Some(140), added: 635, mode: MaxEncodedLen) + /// Storage: Msa PublicKeyToMsaId (r:2 w:1) + /// Proof: Msa PublicKeyToMsaId (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) + /// Storage: Msa PublicKeyCountForMsaId (r:1 w:1) + /// Proof: Msa PublicKeyCountForMsaId (max_values: None, max_size: Some(17), added: 2492, mode: MaxEncodedLen) + fn add_public_key_to_msa() -> Weight { + // Proof Size summary in bytes: + // Measured: `1677` + // Estimated: `18396` + // Minimum execution time: 175_288_000 picoseconds. + Weight::from_parts(177_629_000, 18396) + .saturating_add(T::DbWeight::get().reads(8_u64)) + .saturating_add(T::DbWeight::get().writes(7_u64)) + } + /// Storage: Msa PayloadSignatureRegistryList (r:2 w:2) + /// Proof: Msa PayloadSignatureRegistryList (max_values: Some(50000), max_size: Some(144), added: 2124, mode: MaxEncodedLen) + /// Storage: Msa PayloadSignatureRegistryPointer (r:1 w:1) + /// Proof: Msa PayloadSignatureRegistryPointer (max_values: Some(1), max_size: Some(140), added: 635, mode: MaxEncodedLen) + /// Storage: Msa PublicKeyToMsaId (r:2 w:0) + /// Proof: Msa PublicKeyToMsaId (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) + /// Storage: Msa ProviderToRegistryEntry (r:1 w:0) + /// Proof: Msa ProviderToRegistryEntry (max_values: None, max_size: Some(33), added: 2508, mode: MaxEncodedLen) + /// Storage: Msa DelegatorAndProviderToDelegation (r:1 w:1) + /// Proof: Msa DelegatorAndProviderToDelegation (max_values: None, max_size: Some(217), added: 2692, mode: MaxEncodedLen) + /// Storage: Schemas CurrentSchemaIdentifierMaximum (r:1 w:0) + /// Proof Skipped: Schemas CurrentSchemaIdentifierMaximum (max_values: Some(1), max_size: None, mode: Measured) + /// The range of component `s` is `[0, 30]`. + fn grant_delegation(s: u32) -> Weight { + // Proof Size summary in bytes: + // Measured: `1443` + // Estimated: `14946` + // Minimum execution time: 111_571_000 picoseconds. + Weight::from_parts(115_947_313, 14946) + // Standard Error: 18_186 + .saturating_add(Weight::from_parts(192_710, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(8_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) + } + /// Storage: Schemas Schemas (r:1 w:0) + /// Proof Skipped: Schemas Schemas (max_values: None, max_size: None, mode: Measured) + /// Storage: Msa PublicKeyToMsaId (r:1 w:0) + /// Proof: Msa PublicKeyToMsaId (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) + /// Storage: Msa DelegatorAndProviderToDelegation (r:1 w:0) + /// Proof: Msa DelegatorAndProviderToDelegation (max_values: None, max_size: Some(217), added: 2692, mode: MaxEncodedLen) + /// Storage: Messages Messages (r:1 w:1) + /// Proof Skipped: Messages Messages (max_values: None, max_size: None, mode: Measured) + /// The range of component `n` is `[0, 51199]`. + fn add_onchain_message(n: u32) -> Weight { + // Proof Size summary in bytes: + // Measured: `46773` + // Estimated: `59148` + // Minimum execution time: 164_198_000 picoseconds. + Weight::from_parts(174_064_230, 59148) + // Standard Error: 48 + .saturating_add(Weight::from_parts(1_527, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: Schemas Schemas (r:1 w:0) + /// Proof Skipped: Schemas Schemas (max_values: None, max_size: None, mode: Measured) + /// Storage: Msa PublicKeyToMsaId (r:1 w:0) + /// Proof: Msa PublicKeyToMsaId (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) + /// Storage: Messages Messages (r:1 w:1) + /// Proof Skipped: Messages Messages (max_values: None, max_size: None, mode: Measured) + fn add_ipfs_message() -> Weight { + // Proof Size summary in bytes: + // Measured: `36289` + // Estimated: `48664` + // Minimum execution time: 156_648_000 picoseconds. + Weight::from_parts(159_242_000, 48664) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: Schemas Schemas (r:1 w:0) + /// Proof Skipped: Schemas Schemas (max_values: None, max_size: None, mode: Measured) + /// Storage: Msa PublicKeyToMsaId (r:1 w:0) + /// Proof: Msa PublicKeyToMsaId (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) + /// Storage: Msa DelegatorAndProviderToDelegation (r:1 w:0) + /// Proof: Msa DelegatorAndProviderToDelegation (max_values: None, max_size: Some(217), added: 2692, mode: MaxEncodedLen) + /// Storage: unknown `0xbd1557c8db6bd8599a811a7175fbc2fc6400` (r:1 w:1) + /// Proof Skipped: unknown `0xbd1557c8db6bd8599a811a7175fbc2fc6400` (r:1 w:1) + /// The range of component `s` is `[1, 5121]`. + fn apply_item_actions(s: u32) -> Weight { + // Proof Size summary in bytes: + // Measured: `33370` + // Estimated: `45745` + // Minimum execution time: 105_792_000 picoseconds. + Weight::from_parts(104_137_090, 45745) + // Standard Error: 315 + .saturating_add(Weight::from_parts(7_325, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: Schemas Schemas (r:1 w:0) + /// Proof Skipped: Schemas Schemas (max_values: None, max_size: None, mode: Measured) + /// Storage: Msa PublicKeyToMsaId (r:1 w:0) + /// Proof: Msa PublicKeyToMsaId (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) + /// Storage: Msa DelegatorAndProviderToDelegation (r:1 w:0) + /// Proof: Msa DelegatorAndProviderToDelegation (max_values: None, max_size: Some(217), added: 2692, mode: MaxEncodedLen) + /// Storage: unknown `0x0763c98381dc89abe38627fe2f98cb7af1577fbf1d628fdddb4ebfc6e8d95fb1` (r:1 w:1) + /// Proof Skipped: unknown `0x0763c98381dc89abe38627fe2f98cb7af1577fbf1d628fdddb4ebfc6e8d95fb1` (r:1 w:1) + /// The range of component `s` is `[1, 1024]`. + fn upsert_page(s: u32) -> Weight { + // Proof Size summary in bytes: + // Measured: `416` + // Estimated: `12791` + // Minimum execution time: 30_996_000 picoseconds. + Weight::from_parts(32_297_181, 12791) + // Standard Error: 203 + .saturating_add(Weight::from_parts(594, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: Schemas Schemas (r:1 w:0) + /// Proof Skipped: Schemas Schemas (max_values: None, max_size: None, mode: Measured) + /// Storage: Msa PublicKeyToMsaId (r:1 w:0) + /// Proof: Msa PublicKeyToMsaId (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) + /// Storage: Msa DelegatorAndProviderToDelegation (r:1 w:0) + /// Proof: Msa DelegatorAndProviderToDelegation (max_values: None, max_size: Some(217), added: 2692, mode: MaxEncodedLen) + /// Storage: unknown `0x0763c98381dc89abe38627fe2f98cb7af1577fbf1d628fdddb4ebfc6e8d95fb1` (r:1 w:1) + /// Proof Skipped: unknown `0x0763c98381dc89abe38627fe2f98cb7af1577fbf1d628fdddb4ebfc6e8d95fb1` (r:1 w:1) + fn delete_page() -> Weight { + // Proof Size summary in bytes: + // Measured: `1575` + // Estimated: `13950` + // Minimum execution time: 36_810_000 picoseconds. + Weight::from_parts(37_792_000, 13950) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: Msa PublicKeyToMsaId (r:1 w:0) + /// Proof: Msa PublicKeyToMsaId (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) + /// Storage: Schemas Schemas (r:1 w:0) + /// Proof Skipped: Schemas Schemas (max_values: None, max_size: None, mode: Measured) + /// Storage: unknown `0xbd1557c8db6bd8599a811a7175fbc2fc6400` (r:1 w:1) + /// Proof Skipped: unknown `0xbd1557c8db6bd8599a811a7175fbc2fc6400` (r:1 w:1) + /// The range of component `s` is `[1, 5121]`. + fn apply_item_actions_with_signature(s: u32) -> Weight { + // Proof Size summary in bytes: + // Measured: `33377` + // Estimated: `45752` + // Minimum execution time: 165_956_000 picoseconds. + Weight::from_parts(158_947_612, 45752) + // Standard Error: 426 + .saturating_add(Weight::from_parts(13_664, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: Msa PublicKeyToMsaId (r:1 w:0) + /// Proof: Msa PublicKeyToMsaId (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) + /// Storage: Schemas Schemas (r:1 w:0) + /// Proof Skipped: Schemas Schemas (max_values: None, max_size: None, mode: Measured) + /// Storage: unknown `0x0763c98381dc89abe38627fe2f98cb7af1577fbf1d628fdddb4ebfc6e8d95fb1` (r:1 w:1) + /// Proof Skipped: unknown `0x0763c98381dc89abe38627fe2f98cb7af1577fbf1d628fdddb4ebfc6e8d95fb1` (r:1 w:1) + /// The range of component `s` is `[1, 1024]`. + fn upsert_page_with_signature(s: u32) -> Weight { + // Proof Size summary in bytes: + // Measured: `349` + // Estimated: `12724` + // Minimum execution time: 85_227_000 picoseconds. + Weight::from_parts(87_768_259, 12724) + // Standard Error: 543 + .saturating_add(Weight::from_parts(6_648, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: Msa PublicKeyToMsaId (r:1 w:0) + /// Proof: Msa PublicKeyToMsaId (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) + /// Storage: Schemas Schemas (r:1 w:0) + /// Proof Skipped: Schemas Schemas (max_values: None, max_size: None, mode: Measured) + /// Storage: unknown `0x0763c98381dc89abe38627fe2f98cb7af1577fbf1d628fdddb4ebfc6e8d95fb1` (r:1 w:1) + /// Proof Skipped: unknown `0x0763c98381dc89abe38627fe2f98cb7af1577fbf1d628fdddb4ebfc6e8d95fb1` (r:1 w:1) + fn delete_page_with_signature() -> Weight { + // Proof Size summary in bytes: + // Measured: `1508` + // Estimated: `13883` + // Minimum execution time: 88_824_000 picoseconds. + Weight::from_parts(90_631_000, 13883) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: Msa PublicKeyToMsaId (r:1 w:0) + /// Proof: Msa PublicKeyToMsaId (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) + /// Storage: Handles MSAIdToDisplayName (r:1 w:1) + /// Proof: Handles MSAIdToDisplayName (max_values: None, max_size: Some(59), added: 2534, mode: MaxEncodedLen) + /// Storage: Handles CanonicalBaseHandleToSuffixIndex (r:1 w:1) + /// Proof: Handles CanonicalBaseHandleToSuffixIndex (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + /// Storage: Handles CanonicalBaseHandleAndSuffixToMSAId (r:0 w:1) + /// Proof: Handles CanonicalBaseHandleAndSuffixToMSAId (max_values: None, max_size: Some(67), added: 2542, mode: MaxEncodedLen) + /// The range of component `b` is `[3, 30]`. + fn claim_handle(b: u32) -> Weight { + // Proof Size summary in bytes: + // Measured: `191` + // Estimated: `12434` + // Minimum execution time: 83_175_000 picoseconds. + Weight::from_parts(85_480_476, 12434) + // Standard Error: 25_131 + .saturating_add(Weight::from_parts(107_272, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } + /// Storage: Msa PublicKeyToMsaId (r:1 w:0) + /// Proof: Msa PublicKeyToMsaId (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen) + /// Storage: Handles MSAIdToDisplayName (r:1 w:1) + /// Proof: Handles MSAIdToDisplayName (max_values: None, max_size: Some(59), added: 2534, mode: MaxEncodedLen) + /// Storage: Handles CanonicalBaseHandleToSuffixIndex (r:1 w:1) + /// Proof: Handles CanonicalBaseHandleToSuffixIndex (max_values: None, max_size: Some(53), added: 2528, mode: MaxEncodedLen) + /// Storage: Handles CanonicalBaseHandleAndSuffixToMSAId (r:0 w:2) + /// Proof: Handles CanonicalBaseHandleAndSuffixToMSAId (max_values: None, max_size: Some(67), added: 2542, mode: MaxEncodedLen) + /// The range of component `b` is `[3, 30]`. + fn change_handle(b: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `297 + b * (1 ±0)` + // Estimated: `12434` + // Minimum execution time: 93_749_000 picoseconds. + Weight::from_parts(95_748_064, 12434) + // Standard Error: 9_821 + .saturating_add(Weight::from_parts(212_118, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) + } +} diff --git a/pallets/frequency-tx-payment/src/lib.rs b/pallets/frequency-tx-payment/src/lib.rs new file mode 100644 index 0000000000..6139a40c60 --- /dev/null +++ b/pallets/frequency-tx-payment/src/lib.rs @@ -0,0 +1,636 @@ +//! Allows transactions in alternative payment methods such as capacity +//! +//! ## Quick Links +//! - [Configuration: `Config`](Config) +//! - [Extrinsics: `Call`](Call) +//! - [Runtime API: `CapacityTransactionPaymentRuntimeApi`](../pallet_frequency_tx_payment_runtime_api/trait.CapacityTransactionPaymentRuntimeApi.html) +//! - [Custom RPC API: `CapacityPaymentApiServer`](../pallet_frequency_tx_payment_rpc/trait.CapacityPaymentApiServer.html) +//! - [Event Enum: `Event`](Event) +//! - [Error Enum: `Error`](Error) +#![doc = include_str!("../README.md")] +// Substrate macros are tripping the clippy::expect_used lint. +#![allow(clippy::expect_used)] +#![cfg_attr(not(feature = "std"), no_std)] + +use frame_support::{ + dispatch::{DispatchInfo, GetDispatchInfo, PostDispatchInfo}, + pallet_prelude::*, + traits::{IsSubType, IsType}, + weights::{Weight, WeightToFee}, + DefaultNoBound, +}; +use frame_system::pallet_prelude::*; +use pallet_transaction_payment::{FeeDetails, InclusionFee, OnChargeTransaction}; +use parity_scale_codec::{Decode, Encode}; +use scale_info::TypeInfo; +#[allow(deprecated)] +use sp_runtime::{ + traits::{ + DispatchInfoOf, Dispatchable, PostDispatchInfoOf, SignedExtension, TransactionExtension, + Zero, + }, + transaction_validity::{TransactionValidity, TransactionValidityError}, + FixedPointOperand, Saturating, +}; +extern crate alloc; +use alloc::{boxed::Box, vec, vec::Vec}; +use common_primitives::{ + capacity::{Nontransferable, Replenishable}, + msa::MsaKeyProvider, + node::UtilityProvider, +}; +use core::ops::Mul; +pub use pallet::*; +use sp_runtime::Permill; +pub use weights::*; + +mod payment; +pub use payment::*; + +pub use types::GetStableWeight; +pub mod types; + +pub mod capacity_stable_weights; + +use crate::types::GetAddKeyData; +use capacity_stable_weights::CAPACITY_EXTRINSIC_BASE_WEIGHT; + +/// Type aliases used for interaction with `OnChargeTransaction`. +pub(crate) type OnChargeTransactionOf = + ::OnChargeTransaction; + +/// Balance type alias. +pub(crate) type BalanceOf = as OnChargeTransaction>::Balance; + +/// Liquidity info type alias (imbalances). +pub(crate) type LiquidityInfoOf = + as OnChargeTransaction>::LiquidityInfo; + +/// Capacity Balance type +pub(crate) type CapacityOf = ::Capacity; + +/// Capacity Balance alias +pub(crate) type CapacityBalanceOf = as Nontransferable>::Balance; + +pub(crate) type ChargeCapacityBalanceOf = + <::OnChargeCapacityTransaction as OnChargeCapacityTransaction>::Balance; + +/// Used to pass the initial payment info from pre- to post-dispatch. +#[derive(Encode, Decode, DefaultNoBound, TypeInfo)] +pub enum InitialPayment { + /// No initial fee was paid. + #[default] + Free, + /// The initial fee was paid in the native currency. + Token(LiquidityInfoOf), + /// The initial fee was paid in an asset. + Capacity, +} + +#[cfg(feature = "std")] +impl InitialPayment { + pub fn is_free(&self) -> bool { + matches!(*self, InitialPayment::Free) + } + + pub fn is_capacity(&self) -> bool { + matches!(*self, InitialPayment::Capacity) + } + + pub fn is_token(&self) -> bool { + matches!(*self, InitialPayment::Token(_)) + } +} + +impl core::fmt::Debug for InitialPayment { + #[cfg(feature = "std")] + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + match *self { + InitialPayment::Free => write!(f, "Nothing"), + InitialPayment::Capacity => write!(f, "Token"), + InitialPayment::Token(_) => write!(f, "Imbalance"), + } + } + + #[cfg(not(feature = "std"))] + fn fmt(&self, _: &mut core::fmt::Formatter) -> core::fmt::Result { + Ok(()) + } +} + +#[cfg(test)] +mod tests; + +#[cfg(feature = "runtime-benchmarks")] +mod benchmarking; + +pub mod weights; + +#[allow(dead_code)] +#[frame_support::pallet] +pub mod pallet { + use super::*; + use common_primitives::msa::{MessageSourceId, MsaKeyProvider}; + + // Simple declaration of the `Pallet` type. It is placeholder we use to implement traits and + // method. + #[pallet::pallet] + pub struct Pallet(_); + + #[pallet::config] + pub trait Config: frame_system::Config + pallet_transaction_payment::Config { + /// The overarching event type. + type RuntimeEvent: From> + IsType<::RuntimeEvent>; + + /// The overarching call type. + type RuntimeCall: Parameter + + Dispatchable + + GetDispatchInfo + + From> + + IsSubType> + + IsType<::RuntimeCall>; + + /// The type that replenishes and keeps capacity balances. + type Capacity: Replenishable + Nontransferable; + + /// Weight information for extrinsics in this pallet. + type WeightInfo: WeightInfo; + + /// The type that checks what transactions are capacity with their stable weights. + type CapacityCalls: GetStableWeight<::RuntimeCall, Weight>; + + /// Charge Capacity for transaction payments. + type OnChargeCapacityTransaction: OnChargeCapacityTransaction; + + /// The maxmimum number of capacity calls that can be batched together. + #[pallet::constant] + type MaximumCapacityBatchLength: Get; + + type BatchProvider: UtilityProvider, ::RuntimeCall>; + + type MsaKeyProvider: MsaKeyProvider; + type MsaCallFilter: GetAddKeyData< + ::RuntimeCall, + Self::AccountId, + MessageSourceId, + >; + } + + #[pallet::event] + #[pallet::generate_deposit(pub (super) fn deposit_event)] + pub enum Event {} + + #[pallet::error] + pub enum Error { + /// The maximum amount of requested batched calls was exceeded + BatchedCallAmountExceedsMaximum, + } + + #[pallet::call] + impl Pallet { + /// Dispatch the given call as a sub_type of pay_with_capacity. Calls dispatched in this + /// fashion, if allowed, will pay with Capacity. + // The weight calculation is a temporary adjustment because overhead benchmarks do not account + // for capacity calls. We count reads and writes for a pay_with_capacity call, + // then subtract one of each for regular transactions since overhead benchmarks account for these. + #[pallet::call_index(0)] + #[pallet::weight({ + let dispatch_info = call.get_dispatch_info(); + let capacity_overhead = Pallet::::get_capacity_overhead_weight(); + let total = capacity_overhead.saturating_add(dispatch_info.call_weight); + (< T as Config >::WeightInfo::pay_with_capacity().saturating_add(total), dispatch_info.class) + })] + pub fn pay_with_capacity( + origin: OriginFor, + call: Box<::RuntimeCall>, + ) -> DispatchResultWithPostInfo { + ensure_signed(origin.clone())?; + + call.dispatch(origin) + } + + /// Dispatch the given call as a sub_type of pay_with_capacity_batch_all. Calls dispatched in this + /// fashion, if allowed, will pay with Capacity. + #[pallet::call_index(1)] + #[pallet::weight({ + let dispatch_infos = calls.iter().map(|call| call.get_dispatch_info()).collect::>(); + let dispatch_weight = dispatch_infos.iter() + .map(|di| di.call_weight) + .fold(Weight::zero(), |total: Weight, weight: Weight| total.saturating_add(weight)); + + let capacity_overhead = Pallet::::get_capacity_overhead_weight(); + let total = capacity_overhead.saturating_add(dispatch_weight); + (< T as Config >::WeightInfo::pay_with_capacity_batch_all(calls.len() as u32).saturating_add(total), DispatchClass::Normal) + })] + pub fn pay_with_capacity_batch_all( + origin: OriginFor, + calls: Vec<::RuntimeCall>, + ) -> DispatchResultWithPostInfo { + ensure_signed(origin.clone())?; + ensure!( + calls.len() <= T::MaximumCapacityBatchLength::get().into(), + Error::::BatchedCallAmountExceedsMaximum + ); + + T::BatchProvider::batch_all(origin, calls) + } + } +} + +impl Pallet { + /// The weight calculation is a temporary adjustment because overhead benchmarks do not account + /// for capacity calls. We count reads and writes for a pay_with_capacity call, + /// then subtract one of each for regular transactions since overhead benchmarks account for these. + /// Storage: Msa PublicKeyToMsaId (r:1) + /// Storage: Capacity CapacityLedger(r:1, w:2) + /// Storage: Capacity CurrentEpoch(r:1) ? maybe cached in on_initialize + /// Storage: System Account(r:1) + /// Total (r: 4-1=3, w: 2-1=1) + pub fn get_capacity_overhead_weight() -> Weight { + T::DbWeight::get().reads(2).saturating_add(T::DbWeight::get().writes(1)) + } + + /// Compute the capacity fee for a transaction. + /// The fee is computed as the sum of the following: + /// - the weight fee, which is proportional to the weight of the transaction. + /// - the length fee, which is proportional to the length of the transaction; + /// - the base fee, which accounts for the overhead of an extrinsic. + /// + /// NOTE: Changing CAPACITY_EXTRINSIC_BASE_WEIGHT will also change static capacity weights. + pub fn compute_capacity_fee(len: u32, extrinsic_weight: Weight) -> BalanceOf { + let weight_fee = Self::weight_to_fee(extrinsic_weight); + + let len_fee = Self::length_to_fee(len); + let base_fee = Self::weight_to_fee(CAPACITY_EXTRINSIC_BASE_WEIGHT); + + base_fee.saturating_add(weight_fee).saturating_add(len_fee) + } + + /// Compute the capacity fee details for a transaction. + /// # Arguments + /// * `runtime_call` - The runtime call to be dispatched. + /// * `weight` - The weight of the transaction. + /// * `len` - The length of the transaction. + /// + /// # Returns + /// `FeeDetails` - The fee details for the transaction. + pub fn compute_capacity_fee_details( + runtime_call: &::RuntimeCall, + dispatch_weight: &Weight, + len: u32, + ) -> FeeDetails> { + let calls = T::CapacityCalls::get_inner_calls(runtime_call) + .expect("A collection of calls is expected at minimum one."); + + let mut calls_weight_sum = Weight::zero(); + for inner_call in calls { + let call_weight = T::CapacityCalls::get_stable_weight(inner_call).unwrap_or_default(); + calls_weight_sum = calls_weight_sum.saturating_add(call_weight); + } + + let mut fees = FeeDetails { inclusion_fee: None, tip: Zero::zero() }; + if !calls_weight_sum.is_zero() { + if let Some(weight) = calls_weight_sum.checked_add(dispatch_weight) { + let weight_fee = Self::weight_to_fee(weight); + let len_fee = Self::length_to_fee(len); + let base_fee = Self::weight_to_fee(CAPACITY_EXTRINSIC_BASE_WEIGHT); + + let tip = Zero::zero(); + fees = FeeDetails { + inclusion_fee: Some(InclusionFee { + base_fee, + len_fee, + adjusted_weight_fee: weight_fee, + }), + tip, + }; + } + } + fees + } + /// Compute the length portion of a fee by invoking the configured `LengthToFee` impl. + pub fn length_to_fee(length: u32) -> BalanceOf { + T::LengthToFee::weight_to_fee(&Weight::from_parts(length as u64, 0)) + } + + /// Compute the unadjusted portion of the weight fee by invoking the configured `WeightToFee` + /// impl. Note that the input `weight` is capped by the maximum block weight before computation. + pub fn weight_to_fee(weight: Weight) -> BalanceOf { + // cap the weight to the maximum defined in runtime, otherwise it will be the + // `Bounded` maximum of its data type, which is not desired. + let capped_weight = weight.min(T::BlockWeights::get().max_block); + T::WeightToFee::weight_to_fee(&capped_weight) + } +} + +/// Custom Transaction Validity Errors for ChargeFrqTransactionPayment +pub enum ChargeFrqTransactionPaymentError { + /// The call is not eligible to be paid for with Capacity + CallIsNotCapacityEligible, + /// The account key is not associated with an MSA + InvalidMsaKey, + /// The Capacity Target does not exist + TargetCapacityNotFound, + /// The minimum balance required for keys used to pay with Capacity + BelowMinDeposit, +} + +/// Require the transactor pay for themselves and maybe include a tip to gain additional priority +/// in the queue. +/// +/// # Transaction Validity +/// +/// This extension sets the `priority` field of `TransactionValidity` depending on the amount +/// of tip being paid per weight unit. +/// +/// Operational transactions will receive an additional priority bump, so that they are normally +/// considered before regular transactions. +#[derive(Encode, Decode, DecodeWithMemTracking, Clone, Eq, PartialEq, TypeInfo)] +#[scale_info(skip_type_params(T))] +pub struct ChargeFrqTransactionPayment(#[codec(compact)] BalanceOf); + +impl ChargeFrqTransactionPaymentError { + pub fn into(self) -> TransactionValidityError { + TransactionValidityError::from(InvalidTransaction::Custom(self as u8)) + } +} + +impl ChargeFrqTransactionPayment +where + BalanceOf: Send + Sync + FixedPointOperand + IsType>, + ::RuntimeCall: + Dispatchable + IsSubType>, +{ + /// Utility construct from tip. + pub fn from(tip: BalanceOf) -> Self { + Self(tip) + } + + /// Return the tip as being chosen by the transaction sender. + pub fn tip(&self, call: &::RuntimeCall) -> BalanceOf { + match call.is_sub_type() { + Some(Call::pay_with_capacity { .. }) | + Some(Call::pay_with_capacity_batch_all { .. }) => Zero::zero(), + _ => self.0, + } + } + + // simulates fee calculation and withdrawal without applying any changes + fn dryrun_withdraw_fee( + &self, + who: &T::AccountId, + call: &::RuntimeCall, + info: &DispatchInfoOf<::RuntimeCall>, + len: usize, + ) -> Result, TransactionValidityError> { + match call.is_sub_type() { + Some(Call::pay_with_capacity { call }) => + self.dryrun_withdraw_capacity_fee(who, &vec![*call.clone()], len), + + Some(Call::pay_with_capacity_batch_all { calls }) => + self.dryrun_withdraw_capacity_fee(who, calls, len), + + _ => self.dryrun_withdraw_token_fee(who, call, info, len, self.tip(call)), + } + } + + fn dryrun_withdraw_capacity_fee( + &self, + who: &T::AccountId, + calls: &Vec<::RuntimeCall>, + len: usize, + ) -> Result, TransactionValidityError> { + let mut calls_weight_sum = Weight::zero(); + for call in calls { + let call_weight = T::CapacityCalls::get_stable_weight(call) + .ok_or(ChargeFrqTransactionPaymentError::CallIsNotCapacityEligible.into())?; + calls_weight_sum = calls_weight_sum.saturating_add(call_weight); + } + let fee = Pallet::::compute_capacity_fee(len as u32, calls_weight_sum); + T::OnChargeCapacityTransaction::can_withdraw_fee(who, fee.into())?; + Ok(fee) + } + + fn dryrun_withdraw_token_fee( + &self, + who: &T::AccountId, + call: &::RuntimeCall, + info: &DispatchInfoOf<::RuntimeCall>, + len: usize, + tip: BalanceOf, + ) -> Result, TransactionValidityError> { + let fee = pallet_transaction_payment::Pallet::::compute_fee(len as u32, info, tip); + if fee.is_zero() { + return Ok(Default::default()); + } + T::OnChargeTransaction::can_withdraw_fee(who, call, info, fee, tip)?; + Ok(fee) + } + + /// Withdraws fee from either Capacity ledger or Token account. + fn withdraw_fee( + &self, + who: &T::AccountId, + call: &::RuntimeCall, + info: &DispatchInfoOf<::RuntimeCall>, + len: usize, + ) -> Result<(BalanceOf, InitialPayment), TransactionValidityError> { + match call.is_sub_type() { + Some(Call::pay_with_capacity { call }) => + self.withdraw_capacity_fee(who, &vec![*call.clone()], len), + Some(Call::pay_with_capacity_batch_all { calls }) => + self.withdraw_capacity_fee(who, calls, len), + _ => self.withdraw_token_fee(who, call, info, len, self.tip(call)), + } + } + + /// Withdraws the transaction fee paid in Capacity using a key associated to an MSA. + fn withdraw_capacity_fee( + &self, + key: &T::AccountId, + calls: &Vec<::RuntimeCall>, + len: usize, + ) -> Result<(BalanceOf, InitialPayment), TransactionValidityError> { + let mut calls_weight_sum = Weight::zero(); + let mut subsidized_calls_weight_sum = Weight::zero(); + + for call in calls { + let call_weight = T::CapacityCalls::get_stable_weight(call) + .ok_or(ChargeFrqTransactionPaymentError::CallIsNotCapacityEligible.into())?; + calls_weight_sum = calls_weight_sum.saturating_add(call_weight); + + if self.call_is_adding_eligible_key_to_msa(call) { + subsidized_calls_weight_sum = + subsidized_calls_weight_sum.saturating_add(call_weight); + } + } + let capacity_fee = Pallet::::compute_capacity_fee(len as u32, calls_weight_sum) + .saturating_sub(Self::subsidized_calls_reduction(len, subsidized_calls_weight_sum)); + let fee = T::OnChargeCapacityTransaction::withdraw_fee(key, capacity_fee.into())?; + + Ok((fee.into(), InitialPayment::Capacity)) + } + + // Give a 70% discount for eligible calls + fn subsidized_calls_reduction(len: usize, eligible_call_weight: Weight) -> BalanceOf { + if eligible_call_weight.is_zero() { + 0u32.into() + } else { + let reduction: Permill = Permill::from_percent(70u32); + reduction.mul(Pallet::::compute_capacity_fee(len as u32, eligible_call_weight)) + } + } + + fn call_is_adding_eligible_key_to_msa(&self, call: &::RuntimeCall) -> bool { + if let Some((owner_account_id, new_account_id, msa_id)) = + T::MsaCallFilter::get_add_key_data(call) + { + return T::MsaKeyProvider::key_eligible_for_subsidized_addition( + owner_account_id, + new_account_id, + msa_id, + ) + } + false + } + + /// Withdraws transaction fee paid with tokens from an. + fn withdraw_token_fee( + &self, + who: &T::AccountId, + call: &::RuntimeCall, + info: &DispatchInfoOf<::RuntimeCall>, + len: usize, + tip: BalanceOf, + ) -> Result<(BalanceOf, InitialPayment), TransactionValidityError> { + let fee = pallet_transaction_payment::Pallet::::compute_fee(len as u32, info, tip); + if fee.is_zero() { + return Ok((fee, InitialPayment::Free)); + } + + as OnChargeTransaction>::withdraw_fee( + who, call, info, fee, tip, + ) + .map(|i| (fee, InitialPayment::Token(i))) + .map_err(|_| -> TransactionValidityError { InvalidTransaction::Payment.into() }) + } +} + +impl core::fmt::Debug for ChargeFrqTransactionPayment { + #[cfg(feature = "std")] + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + write!(f, "ChargeFrqTransactionPayment<{:?}>", self.0) + } + #[cfg(not(feature = "std"))] + fn fmt(&self, _: &mut core::fmt::Formatter) -> core::fmt::Result { + Ok(()) + } +} + +#[allow(deprecated)] +impl SignedExtension for ChargeFrqTransactionPayment +where + ::RuntimeCall: + IsSubType> + Dispatchable, + + BalanceOf: Send + + Sync + + FixedPointOperand + + From + + IsType> + + IsType>, +{ + const IDENTIFIER: &'static str = "ChargeTransactionPayment"; + type AccountId = T::AccountId; + type Call = ::RuntimeCall; + type AdditionalSigned = (); + #[allow(deprecated)] + type Pre = ( + // tip + BalanceOf, + Self::AccountId, + InitialPayment, + ); + + /// Construct any additional data that should be in the signed payload of the transaction. Can + /// also perform any pre-signature-verification checks and return an error if needed. + fn additional_signed(&self) -> Result<(), TransactionValidityError> { + Ok(()) + } + + /// Frequently called by the transaction queue to validate all extrinsics: + #[allow(deprecated)] + fn validate( + &self, + who: &Self::AccountId, + call: &Self::Call, + info: &DispatchInfoOf, + len: usize, + ) -> TransactionValidity { + let fee = self.dryrun_withdraw_fee(who, call, info, len)?; + + let priority = pallet_transaction_payment::ChargeTransactionPayment::::get_priority( + info, + len, + self.tip(call), + fee, + ); + + Ok(ValidTransaction { priority, ..Default::default() }) + } + + /// Do any pre-flight stuff for a signed transaction. + #[allow(deprecated)] + fn pre_dispatch( + self, + who: &Self::AccountId, + call: &Self::Call, + info: &DispatchInfoOf, + len: usize, + ) -> Result { + let (_fee, initial_payment) = self.withdraw_fee(who, call, info, len)?; + + Ok((self.tip(call), who.clone(), initial_payment)) + } + + /// Do any post-flight stuff for an extrinsic. + #[allow(deprecated)] + fn post_dispatch( + maybe_pre: Option, + info: &DispatchInfoOf, + post_info: &PostDispatchInfoOf, + len: usize, + result: &DispatchResult, + ) -> Result<(), TransactionValidityError> { + if let Some((tip, who, initial_payment)) = maybe_pre { + match initial_payment { + // If this is a Token transaction, passthrough + InitialPayment::Token(already_withdrawn) => { + // post_dispatch_details eliminated the Option from the first param. + // TransactionExtension implementers are expected to customize Pre to separate signed from unsigned. + // https://github.com/paritytech/polkadot-sdk/pull/3685/files?#diff-be5f002cca427d36cd5322cc1af56544cce785482d69721b976aebf5821a78e3L875 + pallet_transaction_payment::ChargeTransactionPayment::::post_dispatch_details( + pallet_transaction_payment::Pre::Charge { tip, who, imbalance: already_withdrawn }, + info, + post_info, + len, + result, + )?; + }, + // If it's capacity, do nothing + InitialPayment::Capacity => { + debug_assert!(tip.is_zero(), "tip should be zero for Capacity tx."); + }, + // If it's a free txn, do nothing + InitialPayment::Free => { + // `actual_fee` should be zero here for any signed extrinsic. It would be + // non-zero here in case of unsigned extrinsics as they don't pay fees but + // `compute_actual_fee` is not aware of them. In both cases it's fine to just + // move ahead without adjusting the fee, though, so we do nothing. + debug_assert!(tip.is_zero(), "tip should be zero if initial fee was zero."); + }, + } + } + Ok(()) + } +} diff --git a/pallets/frequency-tx-payment/src/payment.rs b/pallets/frequency-tx-payment/src/payment.rs new file mode 100644 index 0000000000..a9d49d4e43 --- /dev/null +++ b/pallets/frequency-tx-payment/src/payment.rs @@ -0,0 +1,89 @@ +use common_primitives::msa::MsaValidator; +use core::marker::PhantomData; +use frame_support::traits::tokens::{fungible::Inspect as InspectFungible, Balance}; + +use super::*; +use crate::Config; + +/// A trait used for the withdrawal of Capacity. +pub trait OnChargeCapacityTransaction { + /// Scalar type for representing balance of an account. + type Balance: Balance; + + /// Handles withdrawal of Capacity from an Account. + fn withdraw_fee( + key: &T::AccountId, + fee: Self::Balance, + ) -> Result; + + /// Checks if there is enough Capacity balance to cover the fee. + fn can_withdraw_fee( + key: &T::AccountId, + fee: Self::Balance, + ) -> Result<(), TransactionValidityError>; +} + +/// A type used to withdraw Capacity from an account. +pub struct CapacityAdapter(PhantomData<(Curr, Msa)>); + +impl OnChargeCapacityTransaction for CapacityAdapter +where + T: Config, + Curr: InspectFungible<::AccountId>, + Msa: MsaValidator::AccountId>, + BalanceOf: Send + Sync + FixedPointOperand + IsType> + MaxEncodedLen, +{ + type Balance = BalanceOf; + + /// Handle withdrawal of Capacity using a key associated to an MSA. + /// It attempts to replenish an account of Capacity before withdrawing the fee. + fn withdraw_fee( + key: &T::AccountId, + fee: Self::Balance, + ) -> Result { + let msa_id = Msa::ensure_valid_msa_key(key) + .map_err(|_| ChargeFrqTransactionPaymentError::InvalidMsaKey.into())?; + + if T::Capacity::can_replenish(msa_id) { + ensure!( + T::Capacity::replenish_all_for(msa_id).is_ok(), + TransactionValidityError::Invalid(InvalidTransaction::Payment) + ); + } + + ensure!( + T::Capacity::deduct(msa_id, fee.into()).is_ok(), + TransactionValidityError::Invalid(InvalidTransaction::Payment) + ); + + Ok(fee) + } + + /// Check that there is enough capacity to cover the transaction. + /// Returns: Msa ID for the AccountId, or TransactionValidityError. + fn can_withdraw_fee( + key: &T::AccountId, + fee: Self::Balance, + ) -> Result<(), TransactionValidityError> { + let minimum_balance = Curr::minimum_balance(); + ensure!( + Curr::total_balance(key) >= minimum_balance, + TransactionValidityError::Invalid(InvalidTransaction::Payment) + ); + + let msa_id = Msa::ensure_valid_msa_key(key) + .map_err(|_| ChargeFrqTransactionPaymentError::InvalidMsaKey.into())?; + + let available_capacity: Self::Balance = if T::Capacity::can_replenish(msa_id) { + T::Capacity::replenishable_balance(msa_id).into() + } else { + T::Capacity::balance(msa_id).into() + }; + + ensure!( + fee <= available_capacity, + TransactionValidityError::Invalid(InvalidTransaction::Payment) + ); + Ok(()) + } +} diff --git a/pallets/frequency-tx-payment/src/rpc/Cargo.toml b/pallets/frequency-tx-payment/src/rpc/Cargo.toml new file mode 100644 index 0000000000..914d25671b --- /dev/null +++ b/pallets/frequency-tx-payment/src/rpc/Cargo.toml @@ -0,0 +1,45 @@ +[package] +name = "pallet-frequency-tx-payment-rpc" +version = "0.0.0" +description = "A package that adds RPC to payment pallet" +authors = ["Frequency"] +license = "Apache-2.0" +publish = false +homepage = "https://frequency.xyz" +repository = "https://github.com/frequency-chain/frequency/" +edition = "2021" + +[dependencies] +parity-scale-codec = { workspace = true } +jsonrpsee = { workspace = true, features = ["client-core", "server", "macros"] } +rayon = { workspace = true } +# Frequency crates +pallet-frequency-tx-payment-runtime-api = { default-features = false, path = "../runtime-api" } +common-primitives = { default-features = false, path = "../../../../common/primitives" } +common-helpers = { default-features = false, path = "../../../../common/helpers" } +# Substrate crates +sp-core = { workspace = true } +sp-api = { workspace = true } +sp-blockchain = { workspace = true } +sp-runtime = { workspace = true } +sp-rpc = { workspace = true } +sp-weights = { workspace = true } + +[dev-dependencies] +tokio = { workspace = true, features = ["macros", "time", "parking_lot"] } +sc-client-api = { workspace = true } + +[features] +default = ["std"] +std = [ + "sp-core/std", + "parity-scale-codec/std", + "sp-api/std", + "sp-runtime/std", + "pallet-frequency-tx-payment-runtime-api/std", + "common-primitives/std", + "common-helpers/std", +] + +[lints] +workspace = true diff --git a/pallets/frequency-tx-payment/src/rpc/src/lib.rs b/pallets/frequency-tx-payment/src/rpc/src/lib.rs new file mode 100644 index 0000000000..f6d1eada43 --- /dev/null +++ b/pallets/frequency-tx-payment/src/rpc/src/lib.rs @@ -0,0 +1,139 @@ +#![cfg_attr(not(feature = "std"), no_std)] +#![allow(clippy::too_many_arguments)] +#![allow(clippy::unnecessary_mut_passed)] +#![allow(rustdoc::bare_urls)] +// Strong Documentation Lints +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + missing_docs +)] + +//! Runtime API definition for [Capacity](../pallet_capacity/index.html) +//! +//! This api must be implemented by the node runtime. +//! Runtime APIs Provide: +//! - An interface between the runtime and Custom RPCs. +//! - Runtime interfaces for end users beyond just State Queries + +use std::{convert::TryInto, sync::Arc}; + +use jsonrpsee::{ + core::{async_trait, RpcResult}, + proc_macros::rpc, + types::{error::ErrorCode, ErrorObject}, +}; +use pallet_frequency_tx_payment_runtime_api::{FeeDetails, InclusionFee}; +use parity_scale_codec::{Codec, Decode}; +use sp_api::ProvideRuntimeApi; +use sp_blockchain::HeaderBackend; +use sp_core::Bytes; +use sp_rpc::number::NumberOrHex; +use sp_runtime::traits::{Block as BlockT, MaybeDisplay}; + +pub use pallet_frequency_tx_payment_runtime_api::CapacityTransactionPaymentRuntimeApi; + +#[cfg(test)] +mod tests; + +/// CapacityTransactionPayment RPC methods. +#[rpc(client, server)] +pub trait CapacityPaymentApi { + /// Query the capcity fee details for a given extrinsic. + #[method(name = "frequencyTxPayment_computeCapacityFeeDetails")] + fn compute_capacity_fee_details( + &self, + encoded_xt: Bytes, + at: Option, + ) -> RpcResult>; +} + +/// Provides RPC methods to query a dispatchable's class, weight and fee. +pub struct CapacityPaymentHandler { + /// Shared reference to the client. + client: Arc, + _marker: std::marker::PhantomData

, +} + +impl CapacityPaymentHandler { + /// Creates a new instance of the TransactionPayment Rpc helper. + pub fn new(client: Arc) -> Self { + Self { client, _marker: Default::default() } + } +} + +/// Error type of this RPC api. +pub enum Error { + /// The transaction was not decodable. + DecodeError, + /// The call to runtime failed. + RuntimeError, +} + +impl From for i32 { + fn from(e: Error) -> i32 { + match e { + Error::RuntimeError => 1, + Error::DecodeError => 2, + } + } +} + +#[async_trait] +impl CapacityPaymentApiServer<::Hash, Balance> + for CapacityPaymentHandler +where + Block: BlockT, + C: Send + Sync + 'static + ProvideRuntimeApi + HeaderBackend, + C::Api: CapacityTransactionPaymentRuntimeApi, + Balance: Codec + MaybeDisplay + Copy + TryInto + Send + Sync + 'static, +{ + fn compute_capacity_fee_details( + &self, + encoded_xt: Bytes, + at: Option, + ) -> RpcResult> { + let api = self.client.runtime_api(); + let at_hash = at.unwrap_or_else(|| self.client.info().best_hash); + + let encoded_len = encoded_xt.len() as u32; + let uxt: Block::Extrinsic = Decode::decode(&mut &*encoded_xt).map_err(|e| { + ErrorObject::owned( + Error::DecodeError.into(), + "Unable to query capacity fee details.", + Some(format!("{:?}", e)), + ) + })?; + let fee_details = api.compute_capacity_fee(at_hash, uxt, encoded_len).map_err(|e| { + ErrorObject::owned( + Error::RuntimeError.into(), + "Unable to query capacity fee details.", + Some(format!("{:?}", e)), + ) + })?; + + let try_into_rpc_balance = |value: Balance| { + value.try_into().map_err(|_| { + ErrorObject::owned( + ErrorCode::InvalidParams.code(), + format!("{} doesn't fit in NumberOrHex representation", value), + None::<()>, + ) + }) + }; + + Ok(FeeDetails { + inclusion_fee: if let Some(inclusion_fee) = fee_details.inclusion_fee { + Some(InclusionFee { + base_fee: try_into_rpc_balance(inclusion_fee.base_fee)?, + len_fee: try_into_rpc_balance(inclusion_fee.len_fee)?, + adjusted_weight_fee: try_into_rpc_balance(inclusion_fee.adjusted_weight_fee)?, + }) + } else { + None + }, + tip: Default::default(), + }) + } +} diff --git a/pallets/frequency-tx-payment/src/rpc/src/tests/mod.rs b/pallets/frequency-tx-payment/src/rpc/src/tests/mod.rs new file mode 100644 index 0000000000..16eac50a63 --- /dev/null +++ b/pallets/frequency-tx-payment/src/rpc/src/tests/mod.rs @@ -0,0 +1,34 @@ +mod rpc_mock; + +use super::*; +use common_primitives::node::{Balance, Block}; +use pallet_frequency_tx_payment_runtime_api::CapacityTransactionPaymentRuntimeApi; +use rpc_mock::*; +use sp_runtime::{traits::Zero, OpaqueExtrinsic}; +use std::sync::Arc; + +sp_api::mock_impl_runtime_apis! { + impl CapacityTransactionPaymentRuntimeApi for TestRuntimeApi { + fn compute_capacity_fee(_uxt: OpaqueExtrinsic, _len: u32) -> FeeDetails { + let inclusion_fee = InclusionFee { + base_fee: Zero::zero(), + len_fee: Zero::zero(), + adjusted_weight_fee: Zero::zero(), + }; + FeeDetails { + inclusion_fee: Some(inclusion_fee), + tip: Zero::zero(), + } + } + } +} + +#[tokio::test] +async fn should_compute_capacity_fee() { + let client = Arc::new(TestApi {}); + let api = CapacityPaymentHandler::::new(client); + + let bad_encoded_xt = Bytes::from(b"hello".to_vec()); + let result = api.compute_capacity_fee_details(bad_encoded_xt, None); + assert!(result.is_err()); +} diff --git a/pallets/frequency-tx-payment/src/rpc/src/tests/rpc_mock.rs b/pallets/frequency-tx-payment/src/rpc/src/tests/rpc_mock.rs new file mode 100644 index 0000000000..54c23bdd22 --- /dev/null +++ b/pallets/frequency-tx-payment/src/rpc/src/tests/rpc_mock.rs @@ -0,0 +1,61 @@ +use common_primitives::node::Block; +use sp_api::{ApiRef, ProvideRuntimeApi}; + +use sp_blockchain::HeaderBackend; +use sp_runtime::traits::{Block as BlockT, NumberFor, Zero}; + +pub struct TestApi {} + +pub struct TestRuntimeApi {} + +impl ProvideRuntimeApi for TestApi { + type Api = TestRuntimeApi; + + fn runtime_api(&self) -> ApiRef<'_, Self::Api> { + TestRuntimeApi {}.into() + } +} + +/// Blockchain database header backend. Does not perform any validation. +impl HeaderBackend for TestApi { + fn header( + &self, + _id: Block::Hash, + ) -> std::result::Result, sp_blockchain::Error> { + Ok(None) + } + + fn info(&self) -> sc_client_api::blockchain::Info { + sc_client_api::blockchain::Info { + best_hash: Default::default(), + best_number: Zero::zero(), + finalized_hash: Default::default(), + finalized_number: Zero::zero(), + genesis_hash: Default::default(), + number_leaves: Default::default(), + finalized_state: None, + block_gap: None, + } + } + + fn status( + &self, + _id: Block::Hash, + ) -> std::result::Result { + Ok(sc_client_api::blockchain::BlockStatus::Unknown) + } + + fn number( + &self, + _hash: Block::Hash, + ) -> std::result::Result>, sp_blockchain::Error> { + Ok(None) + } + + fn hash( + &self, + _number: NumberFor, + ) -> std::result::Result, sp_blockchain::Error> { + Ok(None) + } +} diff --git a/pallets/frequency-tx-payment/src/runtime-api/Cargo.toml b/pallets/frequency-tx-payment/src/runtime-api/Cargo.toml new file mode 100644 index 0000000000..4804052999 --- /dev/null +++ b/pallets/frequency-tx-payment/src/runtime-api/Cargo.toml @@ -0,0 +1,32 @@ +[package] +name = "pallet-frequency-tx-payment-runtime-api" +version = "0.0.0" +description = "A package that adds Runtime Api for payment pallet" +authors = ["Frequency"] +license = "Apache-2.0" +publish = false +homepage = "https://frequency.xyz" +repository = "https://github.com/frequency-chain/frequency/" +edition = "2021" + +[dependencies] +parity-scale-codec = { workspace = true, features = ["derive"] } +# Substrate +sp-api = { workspace = true } +frame-support = { workspace = true } +# Frequency related dependencies +common-primitives = { default-features = false, path = "../../../../common/primitives" } +pallet-transaction-payment = { workspace = true } + +[features] +default = ['std'] +std = [ + "parity-scale-codec/std", + "sp-api/std", + "frame-support/std", + "common-primitives/std", + "pallet-transaction-payment/std", +] + +[lints] +workspace = true diff --git a/pallets/frequency-tx-payment/src/runtime-api/src/lib.rs b/pallets/frequency-tx-payment/src/runtime-api/src/lib.rs new file mode 100644 index 0000000000..c287e105e2 --- /dev/null +++ b/pallets/frequency-tx-payment/src/runtime-api/src/lib.rs @@ -0,0 +1,36 @@ +#![cfg_attr(not(feature = "std"), no_std)] +#![allow(clippy::too_many_arguments)] +#![allow(clippy::unnecessary_mut_passed)] +#![allow(rustdoc::bare_urls)] +// Strong Documentation Lints +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + missing_docs +)] +//! Runtime API definition for [Capacity](../pallet_capacity/index.html) +//! +//! This api must be implemented by the node runtime. +//! Runtime APIs Provide: +//! - An interface between the runtime and Custom RPCs. +//! - Runtime interfaces for end users beyond just State Queries + +use frame_support::sp_runtime; +use parity_scale_codec::Codec; +use sp_runtime::traits::MaybeDisplay; + +pub use pallet_transaction_payment::{FeeDetails, InclusionFee}; + +// Here we declare the runtime API. It is implemented in the `impl` block in +// runtime files (the `runtime` folder) +sp_api::decl_runtime_apis! { + /// Runtime Version for Frequency Payment + #[api_version(1)] + pub trait CapacityTransactionPaymentRuntimeApi where + Balance: Codec + MaybeDisplay, + { + /// Query the capacity fee details for a given extrinsic. + fn compute_capacity_fee(uxt: Block::Extrinsic, len: u32) ->FeeDetails; + } +} diff --git a/pallets/frequency-tx-payment/src/tests/mock.rs b/pallets/frequency-tx-payment/src/tests/mock.rs new file mode 100644 index 0000000000..d8cc3c7c20 --- /dev/null +++ b/pallets/frequency-tx-payment/src/tests/mock.rs @@ -0,0 +1,422 @@ +use crate as pallet_frequency_tx_payment; +use crate::*; + +use common_primitives::{ + msa::MessageSourceId, + node::{AccountId, ProposalProvider}, + schema::{SchemaId, SchemaValidator}, +}; +use frame_system::EnsureSigned; +use pallet_transaction_payment::FungibleAdapter; +use sp_core::{ConstU8, H256}; +use sp_runtime::{ + traits::{BlakeTwo256, Convert, IdentityLookup, SaturatedConversion}, + AccountId32, BuildStorage, Perbill, Permill, +}; + +use frame_support::{ + parameter_types, + traits::{ConstU16, ConstU64}, + weights::WeightToFee as WeightToFeeTrait, +}; + +use pallet_capacity::CapacityLedger; + +pub use common_runtime::{ + constants::{MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO}, + weights::rocksdb_weights::constants::RocksDbWeight, +}; + +use frame_support::weights::Weight; + +type Block = frame_system::mocking::MockBlockU32; + +// Configure a mock runtime to test the pallet. +frame_support::construct_runtime!( + pub enum Test + { + System: frame_system::{Pallet, Call, Config, Storage, Event}, + Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, + Msa: pallet_msa::{Pallet, Call, Storage, Event}, + Capacity: pallet_capacity::{Pallet, Call, Storage, Event, FreezeReason}, + TransactionPayment: pallet_transaction_payment::{Pallet, Storage, Event}, + FrequencyTxPayment: pallet_frequency_tx_payment::{Pallet, Call, Event}, + Utility: pallet_utility::{Pallet, Call, Storage, Event}, + } +); + +#[allow(dead_code)] +pub struct BlockWeights; +impl Get for BlockWeights { + fn get() -> frame_system::limits::BlockWeights { + frame_system::limits::BlockWeights::builder() + .base_block(Weight::zero()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::non_mandatory(), |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .build_or_panic() + } +} + +impl frame_system::Config for Test { + type BaseCallFilter = frame_support::traits::Everything; + type BlockWeights = BlockWeights; + type BlockLength = (); + type DbWeight = RocksDbWeight; + type RuntimeOrigin = RuntimeOrigin; + type RuntimeCall = RuntimeCall; + type Nonce = u64; + type Block = Block; + type Hash = H256; + type Hashing = BlakeTwo256; + type AccountId = u64; + type Lookup = IdentityLookup; + type RuntimeEvent = RuntimeEvent; + type RuntimeTask = RuntimeTask; + type BlockHashCount = ConstU32<250>; + type Version = (); + type PalletInfo = PalletInfo; + type AccountData = pallet_balances::AccountData; + type OnNewAccount = (); + type OnKilledAccount = (); + type SystemWeightInfo = (); + type SS58Prefix = ConstU16<42>; + type OnSetCode = (); + type MaxConsumers = frame_support::traits::ConstU32<16>; + type SingleBlockMigrations = (); + type MultiBlockMigrator = (); + type PreInherents = (); + type PostInherents = (); + type PostTransactions = (); + type ExtensionsWeightInfo = (); +} + +impl pallet_balances::Config for Test { + type DustRemoval = (); + type RuntimeEvent = RuntimeEvent; + type Balance = u64; + type MaxLocks = (); + type WeightInfo = (); + type ReserveIdentifier = [u8; 8]; + type ExistentialDeposit = ConstU64<1>; + type AccountStore = System; + type MaxReserves = (); + type FreezeIdentifier = RuntimeFreezeReason; + type RuntimeFreezeReason = (); + type MaxFreezes = ConstU32<1>; + type RuntimeHoldReason = (); + type DoneSlashHandler = (); +} + +pub type MaxSchemaGrantsPerDelegation = ConstU32<30>; +pub type MaximumCapacityBatchLength = ConstU8<10>; + +pub struct TestAccountId; +impl Convert for TestAccountId { + fn convert(x: u64) -> AccountId32 { + // force this key to be an ethereum-compatible key + if x == 999 { + let eth = sp_core::bytes::from_hex("0x9999999999999999999999999999999999999999") + .expect("should return a Vec"); + return EthereumAddressMapper::to_account_id(ð); + } + AccountId32::new([1u8; 32]) + } +} + +pub struct Schemas; +impl SchemaValidator for Schemas { + fn are_all_schema_ids_valid(_schema_id: &[SchemaId]) -> bool { + true + } + + fn set_schema_count(_n: SchemaId) {} +} + +pub struct CouncilProposalProvider; + +impl ProposalProvider for CouncilProposalProvider { + fn propose( + _who: u64, + _threshold: u32, + _proposal: Box, + ) -> Result<(u32, u32), DispatchError> { + Ok((1u32, 1u32)) + } + + fn propose_with_simple_majority( + _who: u64, + _proposal: Box, + ) -> Result<(u32, u32), DispatchError> { + Ok((1u32, 1u32)) + } + + #[cfg(any(feature = "runtime-benchmarks", feature = "test"))] + fn proposal_count() -> u32 { + 1u32 + } +} + +impl pallet_msa::Config for Test { + type RuntimeEvent = RuntimeEvent; + type WeightInfo = (); + type ConvertIntoAccountId32 = TestAccountId; + type MaxPublicKeysPerMsa = ConstU8<255>; + type MaxSchemaGrantsPerDelegation = MaxSchemaGrantsPerDelegation; + type MaxProviderNameSize = ConstU32<16>; + type SchemaValidator = Schemas; + type HandleProvider = (); + type MortalityWindowSize = ConstU32<100>; + type Proposal = RuntimeCall; + type ProposalProvider = CouncilProposalProvider; + type CreateProviderViaGovernanceOrigin = EnsureSigned; + /// This MUST ALWAYS be MaxSignaturesPerBucket * NumberOfBuckets. + type MaxSignaturesStored = ConstU32<8000>; +} + +// Needs parameter_types! for the impls below +parameter_types! { + pub static WeightToFee: u64 = 1; + pub static TransactionByteFee: u64 = 1; + static ExtrinsicBaseWeight: Weight = Weight::zero(); +} + +impl WeightToFeeTrait for WeightToFee { + type Balance = u64; + + fn weight_to_fee(weight: &Weight) -> Self::Balance { + Self::Balance::saturated_from(weight.ref_time()) + .saturating_mul(WEIGHT_TO_FEE.with(|v| *v.borrow())) + } +} + +impl WeightToFeeTrait for TransactionByteFee { + type Balance = u64; + + fn weight_to_fee(weight: &Weight) -> Self::Balance { + Self::Balance::saturated_from(weight.ref_time()) + .saturating_mul(TRANSACTION_BYTE_FEE.with(|v| *v.borrow())) + } +} + +impl pallet_transaction_payment::Config for Test { + type RuntimeEvent = RuntimeEvent; + type OnChargeTransaction = FungibleAdapter; + type WeightToFee = WeightToFee; + type LengthToFee = TransactionByteFee; + type FeeMultiplierUpdate = (); + type OperationalFeeMultiplier = ConstU8<5>; + type WeightInfo = (); +} + +// so the value can be used by create_capacity_for below, without having to pass it a Config. +pub const TEST_TOKEN_PER_CAPACITY: u32 = 10; + +// Needs parameter_types! for the Perbill +parameter_types! { + pub const TestCapacityPerToken: Perbill = Perbill::from_percent(TEST_TOKEN_PER_CAPACITY); + pub const TestRewardCap: Permill = Permill::from_parts(3_800); // 0.38% or 0.0038 per RewardEra +} + +impl pallet_capacity::Config for Test { + type RuntimeEvent = RuntimeEvent; + type WeightInfo = (); + type Currency = pallet_balances::Pallet; + type TargetValidator = (); + // In test, this must be >= Token:Capacity ratio since unit is plancks + type MinimumStakingAmount = ConstU64<10>; + type MinimumTokenBalance = ConstU64<10>; + type MaxUnlockingChunks = ConstU32<4>; + + #[cfg(feature = "runtime-benchmarks")] + type BenchmarkHelper = (); + + type UnstakingThawPeriod = ConstU16<2>; + type MaxEpochLength = ConstU32<100>; + type EpochNumber = u32; + type CapacityPerToken = TestCapacityPerToken; + type RuntimeFreezeReason = RuntimeFreezeReason; + type EraLength = ConstU32<5>; + type ProviderBoostHistoryLimit = ConstU32<6>; + type RewardsProvider = Capacity; + type MaxRetargetsPerRewardEra = ConstU32<5>; + type RewardPoolPerEra = ConstU64<10_000>; + type RewardPercentCap = TestRewardCap; + type RewardPoolChunkLength = ConstU32<2>; +} + +use crate::types::GetAddKeyData; +use common_primitives::signatures::{AccountAddressMapper, EthereumAddressMapper}; +use pallet_balances::Call as BalancesCall; + +pub struct TestCapacityCalls; + +impl GetStableWeight for TestCapacityCalls { + fn get_stable_weight(call: &RuntimeCall) -> Option { + match call { + RuntimeCall::Balances(BalancesCall::transfer_allow_death { .. }) => + Some(Weight::from_parts(11, 0)), + RuntimeCall::Msa(pallet_msa::Call::create { .. }) => Some(Weight::from_parts(12, 0)), + RuntimeCall::Msa(pallet_msa::Call::add_public_key_to_msa { .. }) => + Some(Weight::from_parts(177_629_000, 18396)), // from stable_weights + _ => None, + } + } + + fn get_inner_calls(_call: &RuntimeCall) -> Option> { + Some(vec![&RuntimeCall::Msa(pallet_msa::Call::create {})]) + } +} + +pub struct CapacityBatchProvider; + +impl UtilityProvider for CapacityBatchProvider { + fn batch_all(origin: RuntimeOrigin, calls: Vec) -> DispatchResultWithPostInfo { + Utility::batch_all(origin, calls) + } +} + +impl pallet_utility::Config for Test { + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; + type PalletsOrigin = OriginCaller; + type WeightInfo = (); +} + +pub struct MockMsaCallFilter; +impl GetAddKeyData<::RuntimeCall, u64, MessageSourceId> + for MockMsaCallFilter +{ + // Always returns same account ID and msa. + fn get_add_key_data( + call: &::RuntimeCall, + ) -> Option<(u64, u64, MessageSourceId)> { + match call { + RuntimeCall::Msa(pallet_msa::Call::add_public_key_to_msa { + add_key_payload, + new_key_owner_proof: _, + msa_owner_public_key, + msa_owner_proof: _, + }) => Some(( + msa_owner_public_key.clone(), + add_key_payload.new_public_key, + add_key_payload.msa_id, + )), + _ => None, + } + } +} + +impl Config for Test { + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; + type Capacity = Capacity; + type WeightInfo = (); + type CapacityCalls = TestCapacityCalls; + type OnChargeCapacityTransaction = payment::CapacityAdapter; + type MaximumCapacityBatchLength = MaximumCapacityBatchLength; + type BatchProvider = CapacityBatchProvider; + type MsaKeyProvider = Msa; + type MsaCallFilter = MockMsaCallFilter; +} + +pub struct ExtBuilder { + balance_factor: u64, + base_weight: Weight, + byte_fee: u64, + weight_to_fee: u64, +} + +impl Default for ExtBuilder { + fn default() -> Self { + Self { + balance_factor: 1, + base_weight: Weight::from_parts(0, 0), + byte_fee: 1, + weight_to_fee: 1, + } + } +} + +impl ExtBuilder { + fn set_constants(&self) { + ExtrinsicBaseWeight::mutate(|v| *v = self.base_weight); + TRANSACTION_BYTE_FEE.with(|v| *v.borrow_mut() = self.byte_fee); + WEIGHT_TO_FEE.with(|v| *v.borrow_mut() = self.weight_to_fee); + } + + pub fn base_weight(mut self, base_weight: Weight) -> Self { + self.base_weight = base_weight; + self + } + + pub fn balance_factor(mut self, factor: u64) -> Self { + self.balance_factor = factor; + self + } + + pub fn build(self) -> sp_io::TestExternalities { + self.set_constants(); + + let mut t = frame_system::GenesisConfig::::default().build_storage().unwrap(); + pallet_balances::GenesisConfig:: { + balances: if self.balance_factor > 0 { + vec![ + (1, 10 * self.balance_factor), + (2, 20 * self.balance_factor), + (3, 30 * self.balance_factor), + (4, 40 * self.balance_factor), + (5, 50 * self.balance_factor), + (6, 60 * self.balance_factor), + ] + } else { + vec![] + }, + ..Default::default() + } + .assimilate_storage(&mut t) + .unwrap(); + + let mut t: sp_io::TestExternalities = t.into(); + + // Create MSA account 1 - 6 and add Balance to them with Capacity balance + t.execute_with(|| { + let msa_accounts: Vec<( + ::AccountId, + ::Balance, + )> = vec![ + (1, 100 * self.balance_factor), + (2, 200 * self.balance_factor), + (3, 300 * self.balance_factor), + (4, 400 * self.balance_factor), + (5, 500 * self.balance_factor), + (6, 600 * self.balance_factor), + ]; + msa_accounts.iter().for_each(|(account, balance)| { + let msa_id = create_msa_account(*account); + create_capacity_for(msa_id, *balance); + }); + }); + + t + } +} + +pub fn create_msa_account( + account_id: ::AccountId, +) -> MessageSourceId { + pub const EMPTY_FUNCTION: fn(MessageSourceId) -> DispatchResult = |_| Ok(()); + let (msa_id, _) = Msa::create_account(account_id, EMPTY_FUNCTION).unwrap(); + + msa_id +} + +fn create_capacity_for(target: MessageSourceId, amount: u64) { + let mut capacity_details = CapacityLedger::::get(target).unwrap_or_default(); + let capacity: u64 = amount / (TEST_TOKEN_PER_CAPACITY as u64); + capacity_details.deposit(&amount, &capacity).unwrap(); + Capacity::set_capacity_for(target, capacity_details); +} diff --git a/pallets/frequency-tx-payment/src/tests/mod.rs b/pallets/frequency-tx-payment/src/tests/mod.rs new file mode 100644 index 0000000000..1b925b1f2c --- /dev/null +++ b/pallets/frequency-tx-payment/src/tests/mod.rs @@ -0,0 +1,4 @@ +pub mod mock; +mod pallet_tests; +mod payment_tests; +mod stable_weights_tests; diff --git a/pallets/frequency-tx-payment/src/tests/pallet_tests.rs b/pallets/frequency-tx-payment/src/tests/pallet_tests.rs new file mode 100644 index 0000000000..1d592eb63f --- /dev/null +++ b/pallets/frequency-tx-payment/src/tests/pallet_tests.rs @@ -0,0 +1,1072 @@ +use crate::{ + self as pallet_frequency_tx_payment, tests::mock::*, ChargeFrqTransactionPayment, DispatchInfo, + *, +}; +use frame_support::{assert_noop, assert_ok, dispatch::DispatchErrorWithPostInfo, weights::Weight}; +use frame_system::RawOrigin; +use pallet_capacity::{CapacityDetails, CurrentEpoch, Nontransferable}; + +use sp_runtime::{testing::TestXt, transaction_validity::TransactionValidityError, MultiSignature}; + +use pallet_balances::Call as BalancesCall; +use pallet_capacity::CapacityLedger; +use pallet_frequency_tx_payment::Call as FrequencyTxPaymentCall; +use pallet_msa::{AddKeyData, Call as MsaCall}; +use sp_core::{sr25519, Pair, H256}; + +#[test] +#[allow(deprecated)] +fn transaction_payment_validate_is_succesful() { + let balance_factor = 10; + + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(Weight::from_parts(5, 0)) + .build() + .execute_with(|| { + let account_id = 1u64; + let balances_call: &::RuntimeCall = + &RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }); + let dispatch_info = + DispatchInfo { call_weight: Weight::from_parts(5, 0), ..Default::default() }; + let len = 10; + + assert_ok!(ChargeFrqTransactionPayment::::from(0u64).validate( + &account_id, + balances_call, + &dispatch_info, + len, + )); + }); +} + +#[test] +#[allow(deprecated)] +fn transaction_payment_validate_errors_when_balance_is_cannot_pay_for_fee() { + let balance_factor = 1; + + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(Weight::from_parts(5, 0)) + .build() + .execute_with(|| { + let account_id = 1u64; + let balances_call: &::RuntimeCall = + &RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }); + let dispatch_info = + DispatchInfo { call_weight: Weight::from_parts(5, 0), ..Default::default() }; + let len = 10; + + assert_noop!( + ChargeFrqTransactionPayment::::from(0u64).validate( + &account_id, + balances_call, + &dispatch_info, + len, + ), + TransactionValidityError::Invalid(InvalidTransaction::Payment) + ); + }); +} + +#[test] +#[allow(deprecated)] +fn transaction_payment_with_token_and_no_overcharge_post_dispatch_refund_is_succesful() { + let balance_factor = 10; + + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(Weight::from_parts(5, 0)) + .build() + .execute_with(|| { + let account_id = 1u64; + let balances_call: &::RuntimeCall = + &RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }); + let dispatch_info = + DispatchInfo { call_weight: Weight::from_parts(5, 0), ..Default::default() }; + let len = 10; + + assert_eq!(Balances::free_balance(1), 100); + + let pre = ChargeFrqTransactionPayment::::from(0u64) + .pre_dispatch(&account_id, balances_call, &dispatch_info, len) + .unwrap(); + + // account_balance = free_balance - base_weight(5) + // - extrinsic_weight(5) * WeightToFee(1) + // - TransactionByteFee(1)* len(10) = 80 + assert_eq!(Balances::free_balance(1), 100 - 5 - 5 - 10); + + let post_info: PostDispatchInfo = + PostDispatchInfo { actual_weight: None, pays_fee: Default::default() }; + + assert_ok!(ChargeFrqTransactionPayment::::post_dispatch( + Some(pre), + &dispatch_info, + &post_info, + len, + &Ok(()), + )); + + // Checking balance was not modified after post-dispatch. + assert_eq!(Balances::free_balance(1), 100 - 5 - 5 - 10); + }); +} + +#[test] +#[allow(deprecated)] +fn transaction_payment_with_token_and_post_dispatch_refund_is_succesful() { + let balance_factor = 10; + + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(Weight::from_parts(5, 0)) + .build() + .execute_with(|| { + let account_id = 1u64; + let balances_call: &::RuntimeCall = + &RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }); + let dispatch_info = + DispatchInfo { call_weight: Weight::from_parts(5, 0), ..Default::default() }; + let len = 10; + + assert_eq!(Balances::free_balance(1), 100); + + let pre = ChargeFrqTransactionPayment::::from(0u64) + .pre_dispatch(&account_id, balances_call, &dispatch_info, len) + .unwrap(); + + // account_balance = free_balance - base_weight(5) + // - extrinsic_weight(5) * WeightToFee(1) + // - TransactionByteFee(1)* len(10) = 80 + assert_eq!(Balances::free_balance(1), 100 - 5 - 5 - 10); + + let post_info: PostDispatchInfo = PostDispatchInfo { + actual_weight: Some(Weight::from_parts(2, 0)), + pays_fee: Default::default(), + }; + + assert_ok!(ChargeFrqTransactionPayment::::post_dispatch( + Some(pre), + &dispatch_info, + &post_info, + len, + &Ok(()), + )); + + // account_balance = free_balance - base_weight(5) + // - extrinsic_weight(5) * WeightToFee(1) + // - TransactionByteFee(1)* len(10) + // + difference_of_actual_weight(5 - 2) = 83 + assert_eq!(Balances::free_balance(1), 100 - 5 - 5 - 10 + 3); + }); +} + +#[test] +#[allow(deprecated)] +fn transaction_payment_with_capacity_and_no_overcharge_post_dispatch_refund_is_succesful() { + let balance_factor = 100_000_000; + + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(Weight::from_parts(5, 0)) + .build() + .execute_with(|| { + let account_id = 1u64; + let balances_call: &::RuntimeCall = + &RuntimeCall::FrequencyTxPayment(Call::pay_with_capacity { + call: Box::new(RuntimeCall::Balances(BalancesCall::transfer_allow_death { + dest: 2, + value: 100, + })), + }); + + let dispatch_info = + DispatchInfo { call_weight: Weight::from_parts(5, 0), ..Default::default() }; + let len = 10; + + assert_eq!(Capacity::balance(1), 1_000_000_000); + + let pre = ChargeFrqTransactionPayment::::from(0u64) + .pre_dispatch(&account_id, balances_call, &dispatch_info, len) + .unwrap(); + + // Token account Balance is not effected + assert_eq!(Balances::free_balance(1), 1_000_000_000); + + // capacity_balance = free_balance - base_weight(CAPACITY_EXTRINSIC_BASE_WEIGHT) + // - extrinsic_weight(11) * WeightToFee(1) + // - TransactionByteFee(1)* len(10) = 80 + assert_eq!(Capacity::balance(1), 1_000_000_000 - 105_455_000 - 11 - 10); + + let post_info: PostDispatchInfo = + PostDispatchInfo { actual_weight: None, pays_fee: Default::default() }; + + assert_ok!(ChargeFrqTransactionPayment::::post_dispatch( + Some(pre), + &dispatch_info, + &post_info, + len, + &Ok(()), + )); + + // Checking balance was not modified after post-dispatch. + assert_eq!(Capacity::balance(1), 1_000_000_000 - 105_455_000 - 11 - 10); + }); +} + +#[test] +#[allow(deprecated)] +fn pay_with_capacity_happy_path() { + let balance_factor = 10; + + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(Weight::from_parts(5, 0)) + .build() + .execute_with(|| { + let key_without_msa = 20u64; + let create_msa_call = Box::new(RuntimeCall::Msa(MsaCall::::create {})); + + assert_ok!(FrequencyTxPayment::pay_with_capacity( + RuntimeOrigin::signed(key_without_msa), + create_msa_call + )); + }); +} + +#[test] +#[allow(deprecated)] +fn pay_with_capacity_errors_with_call_error() { + let balance_factor = 10; + + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(Weight::from_parts(5, 0)) + .build() + .execute_with(|| { + let existing_key_with_msa = 1u64; + let create_msa_call = Box::new(RuntimeCall::Msa(MsaCall::::create {})); + + assert_noop!( + FrequencyTxPayment::pay_with_capacity( + RuntimeOrigin::signed(existing_key_with_msa), + create_msa_call + ), + pallet_msa::Error::::KeyAlreadyRegistered + ); + }); +} + +#[test] +#[allow(deprecated)] +fn pay_with_capacity_returns_weight_of_child_call() { + let create_msa_call = Box::new(RuntimeCall::Msa(MsaCall::::create {})); + let create_msa_dispatch_info = create_msa_call.get_dispatch_info(); + + let pay_with_capacity_call = Box::new(RuntimeCall::FrequencyTxPayment( + FrequencyTxPaymentCall::::pay_with_capacity { call: create_msa_call }, + )); + let pay_with_capacity_dispatch_info = pay_with_capacity_call.get_dispatch_info(); + + assert!(pay_with_capacity_dispatch_info + .call_weight + .ref_time() + .gt(&create_msa_dispatch_info.call_weight.ref_time())); +} + +#[test] +#[allow(deprecated)] +fn charge_frq_transaction_payment_withdraw_fee_for_capacity_batch_tx_returns_tuple_with_fee_and_enum( +) { + let balance_factor = 100_000_000; + + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(Weight::from_parts(5, 0)) + .build() + .execute_with(|| { + let charge_tx_payment = ChargeFrqTransactionPayment::::from(0u64); + let who = 1u64; + let call: &::RuntimeCall = + &RuntimeCall::FrequencyTxPayment(Call::pay_with_capacity_batch_all { + calls: vec![RuntimeCall::Balances(BalancesCall::transfer_allow_death { + dest: 2, + value: 100, + })], + }); + + let info = DispatchInfo { call_weight: Weight::from_parts(5, 0), ..Default::default() }; + let len = 10; + + // fee = base_weight(CAPACITY_EXTRINSIC_BASE_WEIGHT) + // + extrinsic_weight(11) * WeightToFee(1) + // + TransactionByteFee(1)* len(10) = CAPACITY_EXTRINSIC_BASE_WEIGHT + 21 + let res = charge_tx_payment.withdraw_fee(&who, call, &info, len); + assert_ok!(&res); + assert_eq!(res.unwrap().0, 105_455_000 + 21); + assert!(charge_tx_payment + .withdraw_fee(&who, call, &info, len) + .unwrap() + .1 + .is_capacity()); + }); +} + +#[test] +#[allow(deprecated)] +fn charge_frq_transaction_payment_withdraw_fee_for_capacity_tx_returns_tupple_with_fee_and_enum() { + let balance_factor = 100_000_000; + + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(Weight::from_parts(5, 0)) + .build() + .execute_with(|| { + let charge_tx_payment = ChargeFrqTransactionPayment::::from(0u64); + let who = 1u64; + let call: &::RuntimeCall = + &RuntimeCall::FrequencyTxPayment(Call::pay_with_capacity { + call: Box::new(RuntimeCall::Balances(BalancesCall::transfer_allow_death { + dest: 2, + value: 100, + })), + }); + + let info = DispatchInfo { call_weight: Weight::from_parts(5, 0), ..Default::default() }; + let len = 10; + + // fee = base_weight(CAPACITY_EXTRINSIC_BASE_WEIGHT) + // + extrinsic_weight(11) * WeightToFee(1) + // + TransactionByteFee(1)* len(10) = 20 + assert_eq!( + charge_tx_payment.withdraw_fee(&who, call, &info, len).unwrap().0, + (105_455_000 + 21u64) + ); + assert!(charge_tx_payment + .withdraw_fee(&who, call, &info, len) + .unwrap() + .1 + .is_capacity()); + }); +} + +#[test] +fn charge_frq_transaction_payment_withdraw_fee_errors_for_capacity_tx_when_user_does_not_have_enough_funds( +) { + let balance_factor = 1; + + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(Weight::from_parts(100, 0)) + .build() + .execute_with(|| { + let charge_tx_payment = ChargeFrqTransactionPayment::::from(0u64); + let who = 1u64; + let call: &::RuntimeCall = + &RuntimeCall::FrequencyTxPayment(Call::pay_with_capacity { + call: Box::new(RuntimeCall::Balances(BalancesCall::transfer_allow_death { + dest: 2, + value: 100, + })), + }); + + let info = DispatchInfo { call_weight: Weight::from_parts(5, 0), ..Default::default() }; + let len = 10; + let result = charge_tx_payment.withdraw_fee(&who, call, &info, len); + assert_eq!( + result.unwrap_err(), + TransactionValidityError::Invalid(InvalidTransaction::Payment) + ); + }); +} + +#[test] +fn charge_frq_transaction_payment_withdraw_fee_errors_for_non_capacity_tx_when_user_does_not_have_enough_funds( +) { + let balance_factor = 10; + + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(Weight::from_parts(100, 0)) + .build() + .execute_with(|| { + let charge_tx_payment = ChargeFrqTransactionPayment::::from(0u64); + let who = 1u64; + let call: &::RuntimeCall = + &RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }); + + let info = DispatchInfo { call_weight: Weight::from_parts(5, 0), ..Default::default() }; + let len = 10; + let error = charge_tx_payment.withdraw_fee(&who, call, &info, len).unwrap_err(); + assert_eq!(error, TransactionValidityError::Invalid(InvalidTransaction::Payment)); + }); +} + +#[test] +fn charge_frq_transaction_payment_withdraw_fee_for_non_capacity_tx_returns_tupple_with_fee_and_initial_payment_token_enum( +) { + let balance_factor = 10; + + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(Weight::from_parts(5, 0)) + .build() + .execute_with(|| { + let charge_tx_payment = ChargeFrqTransactionPayment::::from(0u64); + let who = 1u64; + let call: &::RuntimeCall = + &RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }); + + let info = DispatchInfo { call_weight: Weight::from_parts(5, 0), ..Default::default() }; + let len = 10; + let result = charge_tx_payment.withdraw_fee(&who, call, &info, len).unwrap(); + + // fee = base_weight(5) + // + extrinsic_weight(5) * WeightToFee(1) + // + TransactionByteFee(1)* len(10) = 20 + assert_eq!(result.0, 20); + let expected = match result.1 { + InitialPayment::Token(_) => true, + _ => false, + }; + + assert!(expected); + }); +} + +#[test] +fn charge_frq_transaction_payment_withdraw_fee_for_free_non_capacity_tx_returns_tupple_with_fee_and_free_enum( +) { + let balance_factor = 10; + + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(Weight::from_parts(5, 0)) + .build() + .execute_with(|| { + let charge_tx_payment = ChargeFrqTransactionPayment::::from(0u64); + let who = 1u64; + let call: &::RuntimeCall = + &RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }); + + let info = DispatchInfo { + call_weight: Weight::from_parts(5, 0), + pays_fee: Pays::No, + ..Default::default() + }; + let len = 10; + let result = charge_tx_payment.withdraw_fee(&who, call, &info, len).unwrap(); + + // fee = base_weight(5) + // + extrinsic_weight(5) * WeightToFee(1) + // + TransactionByteFee(1)* len(10) = 20 + assert_eq!(result.0, 0); + let expected = match result.1 { + InitialPayment::Free => true, + _ => false, + }; + + assert!(expected); + }); +} + +#[test] +fn charge_frq_transaction_payment_tip_is_zero_for_capacity_calls() { + let fake_tip = 100; + let charge_tx_payment = ChargeFrqTransactionPayment::::from(fake_tip); + let call: &::RuntimeCall = + &RuntimeCall::FrequencyTxPayment(Call::pay_with_capacity { + call: Box::new(RuntimeCall::Balances(BalancesCall::transfer_allow_death { + dest: 2, + value: 100, + })), + }); + + let result = charge_tx_payment.tip(call); + + assert_eq!(result, 0u64); +} + +#[test] +fn charge_frq_transaction_payment_tip_is_some_amount_for_non_capacity_calls() { + let tip = 200; + let charge_tx_payment = ChargeFrqTransactionPayment::::from(tip); + let call: &::RuntimeCall = + &RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }); + + let result = charge_tx_payment.tip(call); + + assert_eq!(result, 200u64); +} + +/// Test Helper Function +/// Asserts that the `withdraw_fee` function returns the expected result. +pub fn assert_withdraw_fee_result( + account_id: ::AccountId, + call: &::RuntimeCall, + expected_err: Option, +) { + let dispatch_info = + DispatchInfo { call_weight: Weight::from_parts(5, 0), ..Default::default() }; + + let call: &::RuntimeCall = + &RuntimeCall::FrequencyTxPayment(Call::pay_with_capacity { call: Box::new(call.clone()) }); + + let withdraw_fee = ChargeFrqTransactionPayment::::from(0u64).withdraw_fee( + &account_id, + call, + &dispatch_info, + 10, + ); + + match expected_err { + None => assert!(withdraw_fee.is_ok()), + Some(err) => { + assert!(withdraw_fee.is_err()); + assert_eq!(err, withdraw_fee.err().unwrap()) + }, + } +} + +#[test] +fn withdraw_fee_allows_only_configured_capacity_calls() { + let balance_factor = 100_000_000; + + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(Weight::from_parts(5, 0)) + .build() + .execute_with(|| { + let account_id = 1u64; + let allowed_call: &::RuntimeCall = + &RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }); + + let forbidden_call: &::RuntimeCall = + &RuntimeCall::Balances(BalancesCall::transfer_all { dest: 2, keep_alive: false }); + + assert_withdraw_fee_result(account_id, allowed_call, None); + + let expected_err = TransactionValidityError::Invalid(InvalidTransaction::Custom( + ChargeFrqTransactionPaymentError::CallIsNotCapacityEligible as u8, + )); + assert_withdraw_fee_result(account_id, forbidden_call, Some(expected_err)); + }); +} + +#[test] +fn withdraw_fee_returns_custom_error_when_the_account_key_does_not_have_the_required_deposit() { + let balance_factor = 10; + + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(Weight::from_parts(5, 0)) + .build() + .execute_with(|| { + // An account that has an MSA but has not bet the min balance for key deposit. + let account_id = 10u64; + let _ = tests::mock::create_msa_account(account_id); + + let call: &::RuntimeCall = + &RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }); + + let expected_err = TransactionValidityError::Invalid(InvalidTransaction::Payment); + assert_withdraw_fee_result(account_id, call, Some(expected_err)); + }); +} + +#[test] +fn withdraw_fee_returns_custom_error_when_the_account_key_is_not_associated_with_an_msa() { + let balance_factor = 10; + + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(Weight::from_parts(5, 0)) + .build() + .execute_with(|| { + let account_id_not_associated_with_msa = 10u64; + + // This allows it not to fail on the requirement of an existential deposit. + assert_ok!(Balances::force_set_balance( + RawOrigin::Root.into(), + account_id_not_associated_with_msa, + 1u32.into(), + )); + + let call: &::RuntimeCall = + &RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }); + + let expected_err = TransactionValidityError::Invalid(InvalidTransaction::Custom( + ChargeFrqTransactionPaymentError::InvalidMsaKey as u8, + )); + + assert_withdraw_fee_result( + account_id_not_associated_with_msa, + call, + Some(expected_err), + ); + }); +} + +#[test] +fn withdraw_fee_replenishes_capacity_account_on_new_epoch_before_deducting_fee() { + let balance_factor = 100_000_000; + + // uses funded account with MSA Id + let provider_msa_id = 2u64; + let provider_account_id = 2u64; + let current_epoch = 11u32; + let total_capacity_issued = 3_000_000_000u64; + let total_tokens_staked = 3_000_000_000u64; + + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(Weight::from_parts(5, 0)) + .build() + .execute_with(|| { + CurrentEpoch::::set(current_epoch); + + let capacity_details = CapacityDetails { + remaining_capacity: 1_000_000_000, + total_tokens_staked, + total_capacity_issued, + last_replenished_epoch: 10, + }; + Capacity::set_capacity_for(provider_msa_id, capacity_details); + + let call: &::RuntimeCall = + &RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }); + + assert_withdraw_fee_result(provider_msa_id, call, None); + + let actual_capacity = CapacityLedger::::get(provider_account_id).unwrap(); + + assert_eq!( + actual_capacity, + CapacityDetails { + remaining_capacity: total_capacity_issued.saturating_sub(105_455_000 + 21), + total_tokens_staked, + total_capacity_issued, + last_replenished_epoch: current_epoch, + } + ); + }); +} + +#[test] +fn withdraw_fee_does_not_replenish_if_not_new_epoch() { + let balance_factor = 100_000_000; + + // uses funded account with MSA Id + let provider_msa_id = 2u64; + let provider_account_id = 2u64; + let total_capacity_issued = 3_000_000_000u64; + let total_tokens_staked = 3_000_000_000u64; + let last_replenished_epoch = 10u32; + let current_epoch = last_replenished_epoch; + + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(Weight::from_parts(5, 0)) + .build() + .execute_with(|| { + CurrentEpoch::::set(current_epoch); + + let capacity_details = CapacityDetails { + remaining_capacity: 2_700_000_000, + total_tokens_staked, + total_capacity_issued, + last_replenished_epoch, + }; + Capacity::set_capacity_for(provider_msa_id, capacity_details); + + let call: &::RuntimeCall = + &RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }); + + assert_withdraw_fee_result(provider_msa_id, call, None); + + let actual_capacity = CapacityLedger::::get(provider_account_id).unwrap(); + + // Capacity details should have only the fee taken out + assert_eq!( + actual_capacity, + CapacityDetails { + remaining_capacity: 2_700_000_000.saturating_sub(105_455_000 + 21), + total_tokens_staked, + total_capacity_issued, + last_replenished_epoch, + } + ); + }); +} + +#[test] +fn compute_capacity_fee_successful() { + let balance_factor = 10; + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(Weight::from_parts(5, 0)) + .build() + .execute_with(|| { + let call: &::RuntimeCall = + &RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }); + + // fee = base_weight + extrinsic weight + len = CAPACITY_EXTRINSIC_BASE_WEIGHT + 11 + 10 = CAPACITY_EXTRINSIC_BASE_WEIGHT + 21 + let fee = FrequencyTxPayment::compute_capacity_fee( + 10u32, + ::CapacityCalls::get_stable_weight(call).unwrap(), + ); + + assert_eq!(fee, 105_455_000 + 21); + }); +} + +#[test] +fn pay_with_capacity_batch_all_happy_path() { + let balance_factor = 10; + + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(Weight::from_parts(5, 0)) + .build() + .execute_with(|| { + let origin = 1u64; + + let calls = vec![ + RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 10 }), + RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 10 }), + ]; + + let token_balance_before_call = Balances::free_balance(origin); + + assert_ok!(FrequencyTxPayment::pay_with_capacity_batch_all( + RuntimeOrigin::signed(origin), + calls + )); + + let token_balance_after_call = Balances::free_balance(origin); + assert_eq!(token_balance_before_call - 20u64, token_balance_after_call); + }); +} + +#[test] +fn pay_with_capacity_batch_all_errors_when_transaction_amount_exceeds_maximum() { + let balance_factor = 10; + + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(Weight::from_parts(5, 0)) + .build() + .execute_with(|| { + let origin = 1u64; + + let token_balance_before_call = Balances::free_balance(origin); + + let too_many_calls = vec![ + RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }), + RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }), + RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }), + RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }), + RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }), + RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }), + RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }), + RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }), + RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }), + RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }), + RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }), + ]; + assert_noop!( + FrequencyTxPayment::pay_with_capacity_batch_all( + RuntimeOrigin::signed(origin), + too_many_calls + ), + Error::::BatchedCallAmountExceedsMaximum + ); + + let token_balance_after_call = Balances::free_balance(origin); + + assert_eq!(token_balance_before_call, token_balance_after_call); + }); +} + +#[test] +fn pay_with_capacity_batch_all_transactions_will_all_fail_if_one_fails() { + let balance_factor = 10; + + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(Weight::from_parts(5, 0)) + .build() + .execute_with(|| { + let origin = 1u64; + let successful_balance_transfer_call = + RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }); + + let balance_transfer_call_insufficient_funds = + RuntimeCall::Balances(BalancesCall::transfer_allow_death { + dest: 2, + value: 100000000, + }); + + let token_balance_before_call = Balances::free_balance(origin); + + let calls_to_batch = + vec![successful_balance_transfer_call, balance_transfer_call_insufficient_funds]; + + let result = FrequencyTxPayment::pay_with_capacity_batch_all( + RuntimeOrigin::signed(origin), + calls_to_batch, + ); + + assert!(match result { + Err(DispatchErrorWithPostInfo { .. }) => { + true + }, + _ => { + false + }, + }); + + let token_balance_after_call = Balances::free_balance(origin); + + assert_eq!(token_balance_before_call, token_balance_after_call); + }); +} + +#[test] +fn compute_capacity_fee_returns_zero_when_call_is_not_capacity_eligible() { + let balance_factor = 10; + let call: &::RuntimeCall = + &RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }); + // since we are not checking the signature in FrequencyTxPayment here we can use TestXt::new_bare for simplicity eventhough the Call would be signed one in reality + let xt: TestXt, ()> = TestXt::new_bare(call.clone()); + let ext = xt.encode(); + let len = ext.len() as u32; + let dispatch_info = call.get_dispatch_info(); + + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(Weight::from_parts(5, 0)) + .build() + .execute_with(|| { + let fee = FrequencyTxPayment::compute_capacity_fee_details( + call, + &dispatch_info.call_weight, + len, + ); + assert!(fee.inclusion_fee.is_some()); + assert!(fee.tip == 0); + }); +} + +#[test] +fn compute_capacity_fee_returns_fee_when_call_is_capacity_eligible() { + let balance_factor = 10; + let call: &::RuntimeCall = + &RuntimeCall::FrequencyTxPayment(Call::pay_with_capacity { + call: Box::new(RuntimeCall::Msa(MsaCall::::create {})), + }); + // since we are not checking the signature in FrequencyTxPayment here we can use TestXt::new_bare for simplicity eventhough the Call would be signed one in reality + let xt: TestXt, ()> = TestXt::new_bare(call.clone()); + let ext = xt.encode(); + let len = ext.len() as u32; + let dispatch_info = call.get_dispatch_info(); + assert!(!dispatch_info.call_weight.is_zero()); + + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(Weight::from_parts(5, 0)) + .build() + .execute_with(|| { + let fee_res = FrequencyTxPayment::compute_capacity_fee_details( + call, + &dispatch_info.call_weight, + len, + ); + assert!(fee_res.inclusion_fee.is_some()); + }); +} + +pub fn assert_dryrun_withdraw_fee_result( + account_id: ::AccountId, + call: &::RuntimeCall, + expected_err: Option, +) { + let dispatch_info = + DispatchInfo { call_weight: Weight::from_parts(5, 0), ..Default::default() }; + + let call: &::RuntimeCall = + &RuntimeCall::FrequencyTxPayment(Call::pay_with_capacity { call: Box::new(call.clone()) }); + + let dryrun_withdraw_fee = ChargeFrqTransactionPayment::::from(0u64).dryrun_withdraw_fee( + &account_id, + call, + &dispatch_info, + 10, + ); + + match expected_err { + None => assert!(dryrun_withdraw_fee.is_ok()), + Some(err) => { + assert!(dryrun_withdraw_fee.is_err()); + assert_eq!(err, dryrun_withdraw_fee.err().unwrap()) + }, + } +} + +/// can_withdraw_fee, token transactions +#[test] +fn can_withdraw_fee_allows_configured_capacity_calls() { + let balance_factor = 100_000_000; + + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(Weight::from_parts(5, 0)) + .build() + .execute_with(|| { + let account_id = 1u64; + let allowed_call: &::RuntimeCall = + &RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }); + + let forbidden_call: &::RuntimeCall = + &RuntimeCall::Balances(BalancesCall::transfer_all { dest: 2, keep_alive: false }); + + assert_dryrun_withdraw_fee_result(account_id, allowed_call, None); + + let expected_err = TransactionValidityError::Invalid(InvalidTransaction::Custom( + ChargeFrqTransactionPaymentError::CallIsNotCapacityEligible as u8, + )); + assert_dryrun_withdraw_fee_result(account_id, forbidden_call, Some(expected_err)); + }); +} +#[test] +fn can_withdraw_fee_errors_on_capacity_transaction_without_enough_funds() { + let balance_factor = 10; + + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(Weight::from_parts(5, 0)) + .build() + .execute_with(|| { + // An account that has an MSA but has not bet the min balance for key deposit. + let account_id = 10u64; + let _ = tests::mock::create_msa_account(account_id); + + let call: &::RuntimeCall = + &RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }); + + let expected_err = TransactionValidityError::Invalid(InvalidTransaction::Payment); + assert_dryrun_withdraw_fee_result(account_id, call, Some(expected_err)); + }); +} +#[test] +fn can_withdraw_fee_errors_for_capacity_txn_when_invalid_msa() { + let balance_factor = 100_000_000; + + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(Weight::from_parts(5, 0)) + .build() + .execute_with(|| { + // An account that has an MSA but has not bet the min balance for key deposit. + let account_id_not_associated_with_msa = 10u64; + // This allows it not to fail on the requirement of an existential deposit. + assert_ok!(Balances::force_set_balance( + RawOrigin::Root.into(), + account_id_not_associated_with_msa, + 1u32.into(), + )); + + let call: &::RuntimeCall = + &RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }); + + let expected_err = TransactionValidityError::Invalid(InvalidTransaction::Custom( + ChargeFrqTransactionPaymentError::InvalidMsaKey as u8, + )); + assert_dryrun_withdraw_fee_result( + account_id_not_associated_with_msa, + call, + Some(expected_err), + ); + }); +} + +#[test] +fn can_withdraw_fee_errors_on_token_txn_witout_enough_funds() { + let balance_factor = 10; + + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(Weight::from_parts(100, 0)) + .build() + .execute_with(|| { + let charge_tx_payment = ChargeFrqTransactionPayment::::from(0u64); + let who = 1u64; + let call: &::RuntimeCall = + &RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 2, value: 100 }); + + let info = DispatchInfo { call_weight: Weight::from_parts(5, 0), ..Default::default() }; + let len = 10; + let error = charge_tx_payment.dryrun_withdraw_fee(&who, call, &info, len).unwrap_err(); + assert_eq!(error, TransactionValidityError::Invalid(InvalidTransaction::Payment)); + }); +} + +pub fn generate_test_signature() -> MultiSignature { + let (key_pair, _) = sr25519::Pair::generate(); + let fake_data = H256::random(); + key_pair.sign(fake_data.as_bytes()).into() +} + +pub fn generate_add_public_key_call(msa_id: u64, owner_id: u64) -> Box { + let designated_ethereum_key = 999u64; + let proof1: MultiSignature = generate_test_signature(); + let proof2: MultiSignature = generate_test_signature(); + let payload: AddKeyData = + AddKeyData { msa_id, expiration: 99u32, new_public_key: designated_ethereum_key }; + let add_public_key_inner = RuntimeCall::Msa(MsaCall::::add_public_key_to_msa { + msa_owner_public_key: owner_id, + msa_owner_proof: proof1, + new_key_owner_proof: proof2, + add_key_payload: payload.into(), + }); + + let add_public_key_call = Box::new(add_public_key_inner); + Box::new(RuntimeCall::FrequencyTxPayment(FrequencyTxPaymentCall::::pay_with_capacity { + call: add_public_key_call, + })) +} + +#[test] +fn add_public_key_to_msa_has_lower_capacity_charge_if_is_ethereum_compatible() { + let balance_factor = 100_000_000; + let dispatch_info = + DispatchInfo { call_weight: Weight::from_parts(5, 0), ..Default::default() }; + + // uses funded account already with MSA Id + ExtBuilder::default() + .balance_factor(balance_factor) + .base_weight(Weight::from_parts(5, 0)) + .build() + .execute_with(|| { + let msa_id = 2u64; + let owner_id = 2u64; + // creates a call with "magic" new account id that will return 'true' for being an + // ethereum-compatible key + let pay_with_capacity_add_public_key_call = + generate_add_public_key_call(msa_id, owner_id); + let withdraw_fee = ChargeFrqTransactionPayment::::from(0u64) + .withdraw_fee(&owner_id, &pay_with_capacity_add_public_key_call, &dispatch_info, 10) + .unwrap(); + + // this fails eligibility for not matching the msa id to the owner account id, so + // although adding the key would fail, it's fine for the purpose of this test. + let another_msa = 99u64; + let pay_with_capacity_add_public_key_call = + generate_add_public_key_call(another_msa, owner_id); + let ineligible_withdraw_fee = ChargeFrqTransactionPayment::::from(0u64) + .withdraw_fee(&owner_id, &pay_with_capacity_add_public_key_call, &dispatch_info, 10) + .unwrap(); + assert!(ineligible_withdraw_fee.0.gt(&withdraw_fee.0)); + }); +} diff --git a/pallets/frequency-tx-payment/src/tests/payment_tests.rs b/pallets/frequency-tx-payment/src/tests/payment_tests.rs new file mode 100644 index 0000000000..b22a3f9898 --- /dev/null +++ b/pallets/frequency-tx-payment/src/tests/payment_tests.rs @@ -0,0 +1,30 @@ +use super::mock::{ExtBuilder, Test}; + +use crate::InitialPayment; + +#[test] +fn test_initial_payment_is_capacity() { + ExtBuilder::default().build().execute_with(|| { + assert!(InitialPayment::Capacity::.is_capacity()); + assert!(!InitialPayment::Capacity::.is_free()); + assert!(!InitialPayment::Capacity::.is_token()); + }); +} + +#[test] +fn test_initial_payment_is_token() { + ExtBuilder::default().build().execute_with(|| { + assert!(!InitialPayment::Token::(Default::default()).is_capacity()); + assert!(!InitialPayment::Token::(Default::default()).is_free()); + assert!(InitialPayment::Token::(Default::default()).is_token()); + }); +} + +#[test] +fn test_initial_payment_is_free() { + ExtBuilder::default().build().execute_with(|| { + assert!(!InitialPayment::Free::.is_capacity()); + assert!(InitialPayment::Free::.is_free()); + assert!(!InitialPayment::Free::.is_token()); + }); +} diff --git a/pallets/frequency-tx-payment/src/tests/stable_weights_tests.rs b/pallets/frequency-tx-payment/src/tests/stable_weights_tests.rs new file mode 100644 index 0000000000..cb47682319 --- /dev/null +++ b/pallets/frequency-tx-payment/src/tests/stable_weights_tests.rs @@ -0,0 +1,63 @@ +use crate::tests::mock::*; +use frame_support::weights::Weight; + +use crate::capacity_stable_weights::{SubstrateWeight, WeightInfo}; + +#[test] +fn test_weights_are_stable() { + ExtBuilder::default().build().execute_with(|| { + let table = vec![ + ( + "create_sponsored_account_with_delegation", + SubstrateWeight::::create_sponsored_account_with_delegation(100), + 1130383617, + 14946, + ), + ( + "add_public_key_to_msa", + SubstrateWeight::::add_public_key_to_msa(), + 1076501000, + 18396, + ), + ("grant_delegation", SubstrateWeight::::grant_delegation(100), 810962313, 14946), + ( + "add_onchain_message", + SubstrateWeight::::add_onchain_message(100), + 437712930, + 59148, + ), + ("add_ipfs_message", SubstrateWeight::::add_ipfs_message(), 375458000, 48664), + ( + "apply_item_actions", + SubstrateWeight::::apply_item_actions(100), + 368365590, + 45745, + ), + ("upsert_page", SubstrateWeight::::upsert_page(100), 295852581, 12791), + ("delete_page", SubstrateWeight::::delete_page(), 301288000, 13950), + ( + "apply_item_actions_with_signature", + SubstrateWeight::::apply_item_actions_with_signature(100), + 376530012, + 45752, + ), + ( + "upsert_page_with_signature", + SubstrateWeight::::upsert_page_with_signature(100), + 304649059, + 12724, + ), + ( + "delete_page_with_signature", + SubstrateWeight::::delete_page_with_signature(), + 306847000, + 13883, + ), + ("claim_handle", SubstrateWeight::::claim_handle(100), 461175676, 12434), + ("change_handle", SubstrateWeight::::change_handle(100), 556303864, 12434), + ]; + for t in table { + assert_eq!(t.1, Weight::from_parts(t.2, t.3), "{}", t.0); + } + }); +} diff --git a/pallets/frequency-tx-payment/src/types.rs b/pallets/frequency-tx-payment/src/types.rs new file mode 100644 index 0000000000..ca11430d33 --- /dev/null +++ b/pallets/frequency-tx-payment/src/types.rs @@ -0,0 +1,19 @@ +extern crate alloc; +use alloc::vec::Vec; + +/// Gets stable weights for a capacity Call +pub trait GetStableWeight { + /// Get stable weights for Call + fn get_stable_weight(call: &RuntimeCall) -> Option; + + /// Get inner calls from a Call if any exist, + /// e.g. in case of `pay_with_capacity` and `pay_with_capacity_batch_all` + fn get_inner_calls(outer_call: &RuntimeCall) -> Option>; +} + +/// Filters calls that match Msa::add_public_key_to_msa +pub trait GetAddKeyData { + /// If the call matches Msa::add_public_key_to_msa, return the owner account id and msa id + /// from the call parameters + fn get_add_key_data(call: &RuntimeCall) -> Option<(AccountId, AccountId, MessageSourceId)>; +} diff --git a/pallets/frequency-tx-payment/src/weights.rs b/pallets/frequency-tx-payment/src/weights.rs new file mode 100644 index 0000000000..ef98e2cb47 --- /dev/null +++ b/pallets/frequency-tx-payment/src/weights.rs @@ -0,0 +1,106 @@ + +//! Autogenerated weights for `pallet_frequency_tx_payment` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-04-18, STEPS: `20`, REPEAT: `10`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `ip-10-173-0-75`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` +//! WASM-EXECUTION: `Compiled`, CHAIN: `None`, DB CACHE: `1024` + +// Executed Command: +// ./scripts/../target/release/frequency +// benchmark +// pallet +// --pallet=pallet_frequency-tx-payment +// --extrinsic +// * +// --heap-pages=4096 +// --steps=20 +// --repeat=10 +// --output=./scripts/../pallets/frequency-tx-payment/src/weights.rs +// --template=./scripts/../.maintain/frame-weight-template.hbs +// --additional-trie-layers=3 +// --runtime=./scripts/../target/release/wbuild/frequency-runtime/frequency_runtime.wasm +// --genesis-builder=runtime + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; +use core::marker::PhantomData; + +/// Weight functions needed for `pallet_frequency_tx_payment`. +pub trait WeightInfo { + fn pay_with_capacity() -> Weight; + fn pay_with_capacity_batch_all(n: u32, ) -> Weight; +} + +/// Weights for `pallet_frequency_tx_payment` using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl WeightInfo for SubstrateWeight { + fn pay_with_capacity() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_988_000 picoseconds. + Weight::from_parts(4_217_000, 0) + } + /// The range of component `n` is `[0, 10]`. + fn pay_with_capacity_batch_all(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 6_436_000 picoseconds. + Weight::from_parts(7_716_837, 0) + // Standard Error: 13_223 + .saturating_add(Weight::from_parts(3_382_984, 0).saturating_mul(n.into())) + } +} + +// For backwards compatibility and tests. +impl WeightInfo for () { + fn pay_with_capacity() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_988_000 picoseconds. + Weight::from_parts(4_217_000, 0) + } + /// The range of component `n` is `[0, 10]`. + fn pay_with_capacity_batch_all(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 6_436_000 picoseconds. + Weight::from_parts(7_716_837, 0) + // Standard Error: 13_223 + .saturating_add(Weight::from_parts(3_382_984, 0).saturating_mul(n.into())) + } +} + + +#[cfg(test)] +mod tests { + use frame_support::{traits::Get, weights::Weight, dispatch::DispatchClass}; + use common_runtime::constants::{MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO}; + use common_runtime::weights::extrinsic_weights::ExtrinsicBaseWeight; + + #[allow(dead_code)] + struct BlockWeights; + impl Get for BlockWeights { + fn get() -> frame_system::limits::BlockWeights { + frame_system::limits::BlockWeights::builder() + .base_block(Weight::zero()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::non_mandatory(), |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .build_or_panic() + } + } + +} \ No newline at end of file diff --git a/pallets/handles/Cargo.toml b/pallets/handles/Cargo.toml new file mode 100644 index 0000000000..ae1aab85d5 --- /dev/null +++ b/pallets/handles/Cargo.toml @@ -0,0 +1,63 @@ +[package] +authors = ["Frequency"] +description = "Handles Pallet" +edition = "2021" +homepage = "https://frequency.xyz" +license = "Apache-2.0" +name = "pallet-handles" +version = "0.0.0" +publish = false +repository = "https://github.com/frequency-chain/frequency/" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[dependencies] +parity-scale-codec = { workspace = true, features = ["derive"] } +log = { workspace = true } +scale-info = { workspace = true, features = ["derive"] } +numtoa = { workspace = true } +# Substrate +frame-benchmarking = { workspace = true, optional = true } +frame-support = { workspace = true } +frame-system = { workspace = true } +sp-core = { workspace = true } +sp-io = { workspace = true } +sp-runtime = { workspace = true } +# Frequency related dependencies +common-primitives = { default-features = false, path = "../../common/primitives" } +handles-utils = { default-features = false, path = "src/handles-utils" } +common-runtime = { path = "../../runtime/common", default-features = false } + +[dev-dependencies] +env_logger = { workspace = true } +pretty_assertions = { workspace = true } +serde = { workspace = true, features = ["derive"] } +sp-keystore = { workspace = true } + +[features] +default = ['std'] +runtime-benchmarks = [ + "frame-benchmarking/runtime-benchmarks", + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "common-primitives/runtime-benchmarks", + "common-runtime/runtime-benchmarks", +] +std = [ + 'parity-scale-codec/std', + 'scale-info/std', + 'sp-core/std', + 'sp-io/std', + 'sp-runtime/std', + 'frame-support/std', + 'frame-system/std', + 'frame-benchmarking/std', + 'common-primitives/std', + 'common-runtime/std', +] +try-runtime = ['frame-support/try-runtime'] +test = [] + +[lints] +workspace = true diff --git a/pallets/handles/README.md b/pallets/handles/README.md new file mode 100644 index 0000000000..15f382dade --- /dev/null +++ b/pallets/handles/README.md @@ -0,0 +1,104 @@ +# Handles Pallet + +Creates human-readable, homoglyph-attack resistant handles for MSAs. + +## Summary + +Provides MSAs with an optional, but unique handle. + +A handle consists of: +- **Base Handle:** The user's chosen handle. It is *not* guaranteed to be unique without the suffix. It is linked to a normalized version for Handle to MSA Id resolution. See [Normalization Details](#normalization-details) below. +- **Suffix:** The suffix is a numeric value appended to the user's base handle to ensure the display handle (base handle + suffix) is unique. +- **Display Handle:** The user's original (un-normalized, but with whitespace trimmed and consolidated) base handle string and the suffix together (`base`.`suffix`) constitute a unique identifier for a user. + +### Suffixes + +In order to allow multiple users to select the same base handle, a unique numeric suffix is appended to the Base Handle to form the Display Handle. +The suffix is generated from a random sequence such that each suffix is unique based on the normalized version of the handle. +For example, if there are two users who choose the handle `alice`, one would be `alice.57` and the other `alice.84`. + +## Normalization Details + +For safety, user handles are normalized for lookup purposes. An end user can therefore be reasonably assured that a display handle with the correct numeric suffix resolves to the desired user, regardless of the variant of the displayed base. (ie, for the suffix `.25`, all variants of the normalized base `a1ice` resolve to the same user: `a1ice`, `alice`, `alicë`, `a1icé`, etc...) + + +### Character Normalization + +Normalization removes diacriticals and converts to the lowercase version of the character. +For example, `Zaë` will be normalized `zae`. + +### Homoglyph Normalization + +Two or more characters that appear the same to the user are [homoglyphs](https://en.wikipedia.org/wiki/Homoglyph). +To prevent most homoglyph attacks where one user attempts to impersonate another, the normalization converts all known homoglyphs to a single character. +Thus, any version that normalizes to the same value are considered to be the same. +For example, for the suffix `.25`, all variants of the normalized base `a1ice` resolve to the same user: `a1ice`, `alice`, `alicë`, `a1icé`, etc... + +## Handle Requirements + +To programmatically check if a handle is valid, see the [`validate_handle` RPC](#RPCs). + +### Pre-Normalization Validation + +- MUST be UTF-8 +- MUST NOT be more than 26 bytes +- MUST not contain one of the blocked characters: ``" # % ( ) , . / : ; < > @ \ ` { }`` + +### Post-Normalization Validation + +- MUST have a character length of at least 3 and no more than 20 +- MUST not be a reserved word or a [homoglyph](#homoglyph-normalization) of it: + - `adm1n` (`admin`) + - `every0ne` (`everyone`) + - `a11` (`all`) + - `adm1n1strat0r` (`administrator`) + - `m0d` (`mod`) + - `m0derat0r` (`moderator`) + - `here` (`here`) + - `channe1` (`channel`) +- MUST only contain characters from the allowed unicode ranges (See [`ALLOWED_UNICODE_CHARACTER_RANGES`](https://github.com/frequency-chain/frequency/blob/main/pallets/handles/src/handles-utils/constants.rs) for the full list) + +### Actions + +The Handles pallet provides for: + +- Unique identifier for an MSA +- Creation by proxy +- Tokenless handle removal +- Shuffled sequences for Suffixes + +## Interactions + +### Extrinsics + +| Name/Description | Caller | Payment | Key Events | Runtime Added | +| -------------------------------- | ------------- | ------- | ------------------------------------------------------------------------------------------------------------- | ------------- | +| `claim_handle`
Claim a handle with the given | Provider or MSA Owner | Capacity or Tokens | [`HandleClaimed`](https://frequency-chain.github.io/frequency/pallet_handles/pallet/enum.Event.html#variant.HandleClaimed) | 27 | +| `retire_handle`
Retire a handle. Retired handles + suffix are never reused. | MSA Owner | Free | [`HandleRetired`](https://frequency-chain.github.io/frequency/pallet_handles/pallet/enum.Event.html#variant.HandleRetired) | 27 | +| `change_handle`
Convenience method to retire and then claim a new handle | Provider or MSA Owner | Capacity or Tokens | [`HandleRetired`](https://frequency-chain.github.io/frequency/pallet_handles/pallet/enum.Event.html#variant.HandleRetired), [`HandleClaimed`](https://frequency-chain.github.io/frequency/{pallet_name}/pallet/enum.Event.html#variant.HandleClaimed) | 47 | + +See [Rust Docs](https://frequency-chain.github.io/frequency/pallet_handles/pallet/struct.Pallet.html) for more details. + +### State Queries + +Note: RPC use is suggested over the direct state queries for handles. + +| Name | Description | Query | Runtime Added | +| --------- | ------------------- | ------------------------ | ------------- | +| Get Handle by MSA Id | Returns the Display Handle and the block number in which it was claimed | `msaIdToDisplayName` | 29 | +| Get MSA Id by Canonical Base and Suffix | Uses the stored canonical lookup string NOT the display handle with the suffix to retrieve the MSA Id | `canonicalBaseHandleAndSuffixToMSAId` | 29 | + +See the [Rust Docs](https://frequency-chain.github.io/frequency/pallet_handles/pallet/storage_types/index.html) for additional state queries and details. + +### RPCs + +Note: May be restricted based on node settings and configuration. + +| Name | Description | Call | Node Version | +| ------- | ----------------- | ---------------------------------------------------------------------------------------------------- | ------------ | +| Get Handle by MSA Id | Returns the base handle and suffix as well as the canonical version of the handle | [`getHandleforMSA`](https://frequency-chain.github.io/frequency/pallet_handles_rpc/trait.HandlesApiServer.html#tymethod.get_handle_for_msa) | v1.6.0+ | +| Get MSA Id by Display Handle | Returns the MSA Id for a given Display Handle | [`getMsaForHandle`](https://frequency-chain.github.io/frequency/pallet_handles_rpc/trait.HandlesApiServer.html#tymethod.get_handle_for_msa) | v1.6.0+ | +| Validate Handle String | Checks to see if the handle string validates | [`validateHandle`](https://frequency-chain.github.io/frequency/pallet_handles_rpc/trait.HandlesApiServer.html#tymethod.validate_handle) | v1.8.0+ | +| Get Next Suffixes | Given a Base Handle and count, returns the next suffixes that will be used for claimed handles | [`getNextSuffixes`](https://frequency-chain.github.io/frequency/pallet_handles_rpc/trait.HandlesApiServer.html#tymethod.get_next_suffixes) | v1.8.0+ | + +See [Rust Docs](https://frequency-chain.github.io/frequency/pallet_handles_rpc/trait.HandlesApiServer.html) for more details. diff --git a/pallets/handles/src/benchmarking.rs b/pallets/handles/src/benchmarking.rs new file mode 100644 index 0000000000..8e45ab4f5c --- /dev/null +++ b/pallets/handles/src/benchmarking.rs @@ -0,0 +1,140 @@ +#![allow(clippy::unwrap_used)] + +use super::*; +use crate::Pallet as Handles; +use common_primitives::utils::wrap_binary_data; +use frame_benchmarking::{v2::*, whitelisted_caller}; +use frame_support::assert_ok; +use frame_system::RawOrigin; +use sp_core::crypto::KeyTypeId; +use sp_runtime::RuntimeAppPublic; +pub const TEST_KEY_TYPE_ID: KeyTypeId = KeyTypeId(*b"test"); + +mod app_sr25519 { + use super::TEST_KEY_TYPE_ID; + use sp_core::sr25519; + use sp_runtime::app_crypto::app_crypto; + app_crypto!(sr25519, TEST_KEY_TYPE_ID); +} + +type SignerId = app_sr25519::Public; + +fn create_signed_claims_payload( + delegator_account_public: SignerId, + byte_size: u32, +) -> (ClaimHandlePayload>, MultiSignature, T::AccountId, MessageSourceId) { + // create a generic handle example with expanding size + let base_handle = b"b".to_vec(); + let max_chars = 20; + + // calculate maximum byte size based on maximum number of allowed characters + // 32 + let max_32_bytes = max_chars * 3 / 2; + + // limit byte size to a maximum of 80 bytes + let byte_size = byte_size.min(max_32_bytes); + + // create handle with limited number of characters + let mut handle = base_handle.clone(); + handle.resize(byte_size as usize, b'b'); + let handle_str = core::str::from_utf8(&handle).unwrap_or_default(); + let truncated_handle: Vec = handle_str + .chars() + .take(max_chars as usize) + .flat_map(|c| c.encode_utf8(&mut [0; 4]).as_bytes().to_vec()) + .collect(); + let signature_expires_at: BlockNumberFor = 10u32.into(); + let handle_claims_payload = + ClaimHandlePayload::>::new(truncated_handle, signature_expires_at); + let encode_handle_claims_data = wrap_binary_data(handle_claims_payload.encode()); + let acc = T::AccountId::decode(&mut &delegator_account_public.encode()[..]).unwrap(); + let msa_id = MessageSourceId::decode(&mut &delegator_account_public.encode()[..]).unwrap(); + + let signature = delegator_account_public.sign(&encode_handle_claims_data).unwrap(); + (handle_claims_payload, MultiSignature::Sr25519(signature.into()), acc, msa_id) +} + +#[benchmarks] +mod benchmarks { + use super::*; + + #[benchmark] + fn claim_handle( + b: Linear, + ) -> Result<(), BenchmarkError> { + // claim a handle + let caller: T::AccountId = whitelisted_caller(); + let delegator_account_public = SignerId::generate_pair(None); + let (payload, proof, key, delegator_msa_id) = + create_signed_claims_payload::(delegator_account_public, b); + assert_ok!(T::MsaBenchmarkHelper::add_key(delegator_msa_id, caller.clone())); + assert_ok!(T::MsaBenchmarkHelper::add_key(delegator_msa_id, key.clone())); + + #[extrinsic_call] + _(RawOrigin::Signed(caller.clone()), key.clone(), proof, payload); + + let stored_handle = Handles::::get_handle_for_msa(delegator_msa_id); + assert!(stored_handle.is_some()); + Ok(()) + } + + #[benchmark] + fn change_handle( + b: Linear, + ) -> Result<(), BenchmarkError> { + // claim a handle to be changed + let caller: T::AccountId = whitelisted_caller(); + let delegator_account_public = SignerId::generate_pair(None); + let (payload, proof, key, delegator_msa_id) = + create_signed_claims_payload::(delegator_account_public.clone(), b); + assert_ok!(T::MsaBenchmarkHelper::add_key(delegator_msa_id, caller.clone())); + assert_ok!(T::MsaBenchmarkHelper::add_key(delegator_msa_id, key.clone())); + assert_ok!(Handles::::claim_handle( + RawOrigin::Signed(caller.clone()).into(), + key.clone(), + proof.clone(), + payload.clone() + )); + + #[extrinsic_call] + _(RawOrigin::Signed(caller.clone()), key.clone(), proof, payload); + + let stored_handle = Handles::::get_handle_for_msa(delegator_msa_id); + assert!(stored_handle.is_some()); + Ok(()) + } + + #[benchmark] + fn retire_handle() -> Result<(), BenchmarkError> { + // claim a handle to be retired + let caller: T::AccountId = whitelisted_caller(); + let delegator_account_public = SignerId::generate_pair(None); + let (payload, proof, key, delegator_msa_id) = + create_signed_claims_payload::(delegator_account_public.clone(), 32); + assert_ok!(T::MsaBenchmarkHelper::add_key(delegator_msa_id, caller.clone())); + assert_ok!(T::MsaBenchmarkHelper::add_key(delegator_msa_id, key.clone())); + assert_ok!(Handles::::claim_handle( + RawOrigin::Signed(caller.clone()).into(), + key.clone(), + proof, + payload + )); + let stored_handle = Handles::::get_handle_for_msa(delegator_msa_id); + assert!(stored_handle.is_some()); + + frame_system::Pallet::::set_block_number(500u32.into()); + + // retire the handle + #[extrinsic_call] + _(RawOrigin::Signed(key.clone())); + + let stored_handle = Handles::::get_handle_for_msa(delegator_msa_id); + assert!(stored_handle.is_none()); + Ok(()) + } + impl_benchmark_test_suite!( + Handles, + crate::tests::mock::new_test_ext_keystore(), + crate::tests::mock::Test, + ); +} diff --git a/pallets/handles/src/handles-utils/Cargo.toml b/pallets/handles/src/handles-utils/Cargo.toml new file mode 100644 index 0000000000..aa43f267d4 --- /dev/null +++ b/pallets/handles/src/handles-utils/Cargo.toml @@ -0,0 +1,24 @@ +[package] +authors = ["Frequency"] +description = "Handles Utilities" +edition = "2021" +build = "build.rs" +homepage = "https://frequency.xyz" +license = "Apache-2.0" +name = "handles-utils" +version = "0.0.0" +publish = false +repository = "https://github.com/frequency-chain/frequency/" + +[dependencies] +phf = { workspace = true, features = ["macros"] } +oorandom = { workspace = true } +unicode-normalization = { workspace = true } +twox-hash = { workspace = true, features = ["digest_0_10"] } + +[features] +default = ["std"] +std = [] + +[lints] +workspace = true diff --git a/pallets/handles/src/handles-utils/build.rs b/pallets/handles/src/handles-utils/build.rs new file mode 100644 index 0000000000..17969d12db --- /dev/null +++ b/pallets/handles/src/handles-utils/build.rs @@ -0,0 +1,64 @@ +use std::{ + env, + fs::File, + io::{BufRead, BufReader, BufWriter, Write}, + path::Path, +}; + +mod constants; +use constants::ALLOWED_UNICODE_CHARACTER_RANGES; + +fn allowed_char(c: char) -> bool { + ALLOWED_UNICODE_CHARACTER_RANGES.iter().any(|range| range.contains(&(c as u16))) +} + +#[allow(clippy::unwrap_used)] +fn main() { + println!("cargo:rerun-if-changed=build.rs"); + println!("cargo:rerun-if-changed=src/data/confusable_characters.txt"); + println!("cargo:rerun-if-changed=constants.rs"); + + let input_file = File::open("src/data/confusable_characters.txt"); + assert!(input_file.is_ok()); + let path = Path::new(&env::var("OUT_DIR").unwrap()).join("confusables.rs"); + let mut output_file = BufWriter::new(File::create(&path).unwrap()); + + let reader = BufReader::new(input_file.ok().unwrap()); + + _ = output_file + .write_all(b"// This module provides utilities for handling confusable characters.\n\n"); + _ = output_file.write_all(b"// ******************************************************\n"); + _ = output_file.write_all(b"// ***** THIS FILE IS AUTO-GENERATED. DO NOT EDIT! *****\n"); + _ = output_file.write_all(b"// ******************************************************\n"); + _ = output_file.write_all(b"\n\n"); + _ = output_file.write_all(b"/// Map it\n"); + _ = output_file.write_all(b"use phf::phf_map;\n"); + _ = output_file + .write_all(b"/// The mapping from homoglyph character to canonical Unicode character\n"); + _ = output_file.write_all(b"pub static CONFUSABLES: phf::Map = phf_map! {\n"); + + for line_result in reader.lines() { + let original_line = line_result.ok().unwrap(); + let mut original_line_characters = original_line.chars(); + + // The first character in the line will be the value of each key + let normalized_character = original_line_characters.next().unwrap(); + + // Skip if the normalized is not in the allowed range + if !allowed_char(normalized_character) { + continue + } + + for homoglyph in original_line_characters { + // Skip if the homoglyph is not in the allowed range + if allowed_char(homoglyph) { + let line = format!( + "\'\\u{{{:x}}}\' => \'\\u{{{:x}}}\',\n", + homoglyph as u32, normalized_character as u32 + ); + _ = output_file.write_all(line.as_bytes()); + } + } + } + _ = output_file.write_all(b"};\n\n"); +} diff --git a/pallets/handles/src/handles-utils/constants.rs b/pallets/handles/src/handles-utils/constants.rs new file mode 100644 index 0000000000..c931d78ed0 --- /dev/null +++ b/pallets/handles/src/handles-utils/constants.rs @@ -0,0 +1,184 @@ +// We need the ALLOWED_UNICODE_CHARACTER_RANGES for the build as well as in the source, so here it is. + +use core::ops::RangeInclusive; + +#[cfg(test)] +#[allow(dead_code)] +pub fn build_allowed_char_ranges() -> Vec> { + let mut new_allowed: Vec> = Vec::new(); + let mut last: RangeInclusive = RangeInclusive::new(0u16, 0u16); + // assumes the list is sorted! + for allowed in ALLOWED_UNICODE_CHARACTER_RANGES { + let last_start = last.start(); + let last_end = last.end(); + let allowed_start = allowed.start(); + let allowed_end = allowed.end(); + if *allowed_start == *last_end + 1u16 { + println!( + "joining {last_start:#X}..{last_end:#X} with {allowed_start:#X}..#{allowed_end:#X}" + ); + last = RangeInclusive::new(*last.start(), *allowed.end()); + } else { + println!("adding {last_start:#X}..{last_end:#4X}"); + if *last_end > 0u16 { + new_allowed.push(last.clone()); + } + last = allowed.clone() + } + } + new_allowed +} + +/// Characters that are allowed. +/// This is generated using test_build_allowed_char_ranges +#[rustfmt::skip] +pub const ALLOWED_UNICODE_CHARACTER_RANGES: [RangeInclusive; 54] = [ +0x0020..=0x007A, +0x0080..=0x024F, +0x02B0..=0x04FF, +0x0531..=0x058A, +0x0591..=0x05F4, +0x0600..=0x07B1, +0x07C0..=0x07FA, +0x0900..=0x097F, +0x0981..=0x09FB, +0x0A01..=0x0A75, +0x0A81..=0x0AF1, +0x0B01..=0x0B77, +0x0B82..=0x0BFA, +0x0C01..=0x0C7F, +0x0C82..=0x0CF2, +0x0D02..=0x0D7F, +0x0D82..=0x0DF4, +0x0E01..=0x0E5B, +0x0E81..=0x0EDD, +0x0F00..=0x0FDA, +0x1000..=0x10FC, +0x1100..=0x137C, +0x1380..=0x1399, +0x13A0..=0x13F4, +0x1400..=0x167F, +0x1700..=0x1714, +0x1720..=0x1736, +0x1740..=0x1753, +0x1760..=0x1773, +0x1780..=0x17F9, +0x1800..=0x18AA, +0x18B0..=0x18F5, +0x1900..=0x1974, +0x1980..=0x1AAD, +0x1B00..=0x1B7C, +0x1B80..=0x1BB9, +0x1BC0..=0x1C7F, +0x1E00..=0x1FFF, +0x200C..=0x200D, +0x2C80..=0x2CFF, +0x2D30..=0x2D7F, +0x3040..=0x30FF, +0x3400..=0x4DBF, +0x4E00..=0x9FFF, +0xA500..=0xA62B, +0xA880..=0xA8D9, +0xA8E0..=0xA8FB, +0xA900..=0xA95F, +0xA980..=0xA9DF, +0xAA00..=0xAA7B, +0xAA80..=0xAADF, +0xABC0..=0xABF9, +0xAC00..=0xD7AF, +0xF900..=0xFAFF, +]; + +// Keep this to show what languages are supported and to generate a new compact +// list whenever the list is updated. +// pub const ALLOWED_UNICODE_CHARACTER_RANGES: [RangeInclusive; 75] = [ +// 0x0020..=0x007A, // BasicLatin +// 0x0080..=0x00FF, // Latin-1 Supplement +// 0x0100..=0x017F, // Latin Extended-A +// 0x0180..=0x024F, // Latin Extended-B +// 0x02B0..=0x02FF, // Spacing Modifier Letters +// 0x0300..=0x036F, // Combining diacritical marks +// 0x0370..=0x03FF, // Greek and Coptic +// 0x0400..=0x04FF, // Cyrillic +// 0x0531..=0x058A, // Armenian +// 0x0591..=0x05F4, // Hebrew +// 0x0600..=0x06FF, // Arabic +// 0x0700..=0x074F, // Syriac +// 0x0750..=0x077F, // ArabicSupplement +// 0x0780..=0x07B1, // Thaana +// 0x07C0..=0x07FA, // N'Ko +// 0x0900..=0x097F, // Devanagari +// 0x0981..=0x09FB, // Bengali +// 0x0A01..=0x0A75, // Gurmukhi +// 0x0A81..=0x0AF1, // Gujarati +// 0x0B01..=0x0B77, // Oriya +// 0x0B82..=0x0BFA, // Tamil +// 0x0C01..=0x0C7F, // Telugu +// 0x0C82..=0x0CF2, // Kannada +// 0x0D02..=0x0D7F, // Malayalam +// 0x0D82..=0x0DF4, // Sinhala +// 0x0E01..=0x0E5B, // Thai +// 0x0E81..=0x0EDD, // Lao +// 0x0F00..=0x0FDA, // Tibetan +// 0x1000..=0x109F, // Myanmar +// 0x10A0..=0x10FC, // Georgian +// 0x1100..=0x11FF, // HangulJamo +// 0x1200..=0x137C, // Ethiopic +// 0x1380..=0x1399, // EthiopicSupplement +// 0x13A0..=0x13F4, // Cherokee +// 0x1400..=0x167F, // UnifiedCanadianAboriginalSyllabics +// 0x1700..=0x1714, // Tagalog +// 0x1720..=0x1736, // Hanunoo +// 0x1740..=0x1753, // Buhid +// 0x1760..=0x1773, // Tagbanwa +// 0x1780..=0x17F9, // Khmer +// 0x1800..=0x18AA, // Mongolian +// 0x18B0..=0x18F5, // Unified Canadian Aboriginal Syllabics Extended +// 0x1900..=0x194F, // Limbu +// 0x1950..=0x1974, // Tai Le +// 0x1980..=0x19DF, // New Tai Le +// 0x19E0..=0x19FF, // Khmer Symbols +// 0x1A00..=0x1A1F, // Buginese +// 0x1A20..=0x1AAD, // Tai Tham +// 0x1B00..=0x1B7C, // Balinese +// 0x1B80..=0x1BB9, // Sundanese +// 0x1BC0..=0x1BFF, // Batak +// 0x1C00..=0x1C4F, // Lepcha +// 0x1C50..=0x1C7F, // Ol Chiki +// 0x1E00..=0x1EFF, // Latin Extended Additional +// 0x1F00..=0x1FFF, // Greek Extended +// 0x200C..=0x200D, // General punctuation Limited to the Zero-width Joiners +// 0x2C80..=0x2CFF, // Coptic +// 0x2D30..=0x2D7F, // Tifinagh +// 0x3040..=0x309F, // Hiragana +// 0x30A0..=0x30FF, // Katakana +// 0x3400..=0x4DBF, // CJK Unified Ideographs Extension A +// 0x4E00..=0x9FFF, // CJK Unified Ideographs +// 0xA500..=0xA62B, // Vai +// 0xA880..=0xA8D9, // Saurashtra +// 0xA8E0..=0xA8FB, // Devanagari Extended +// 0xA900..=0xA92F, // Kayah Li +// 0xA930..=0xA95F, // Rejang +// 0xA980..=0xA9DF, // Javanese +// 0xAA00..=0xAA5F, // Cham +// 0xAA60..=0xAA7B, // Myanmar Extended-A +// 0xAA80..=0xAADF, // Tai Viet +// 0xABC0..=0xABF9, // Meetei Mayek +// 0xAC00..=0xD7AF, // Hangul Syllables +// 0xF900..=0xFAFF, // CJK Compatibility Ideographs +// 0xFB50..=0xFDFF, // Arabic Presentation Forms-A +// ]; + +// You can comment out the current one and uncomment the original, specific one +// for all the languages supported. +#[test] +#[ignore = "use only to regenerate compacted ALLOWED_UNICODE_CHARACTER_RANGES"] +fn test_build_allowed_char_ranges() { + let res = build_allowed_char_ranges(); + assert_eq!(res.len(), 54usize); + for range in res { + let start = range.start(); + let end = range.end(); + println!("{start:#4X}..={end:#4X},") + } +} diff --git a/pallets/handles/src/handles-utils/src/converter.rs b/pallets/handles/src/handles-utils/src/converter.rs new file mode 100644 index 0000000000..9018773399 --- /dev/null +++ b/pallets/handles/src/handles-utils/src/converter.rs @@ -0,0 +1,132 @@ +//! # Handle Converter +//! +//! `handle_converter` provides functions to detect confusable Unicode characters in a +//! given input string and return its canonical form. + +use unicode_normalization::{char::is_combining_mark, UnicodeNormalization}; +extern crate alloc; +use crate::types::HandleSuffix; +use alloc::{ + string::{String, ToString}, + vec::Vec, +}; + +// Will load `CONFUSABLES` with all the confusables at build time. +// See build.rs +include!(concat!(env!("OUT_DIR"), "/confusables.rs")); + +/// Delimiter for handles +pub const HANDLE_DELIMITER: char = '.'; + +/// Creates a new `HandleConverter` instance with a built confusables map. +/// Converts a given string to its canonical form by stripping Unicode whitespace, +/// replacing confusable characters, and stripping diacritical marks. +/// The resulting string is converted to lowercase ASCII characters. +/// +/// # Arguments +/// +/// * `input_str` - The input string to convert to canonical form. +/// +/// # Returns +/// +/// A new string in canonical form. +/// +pub fn convert_to_canonical(input_str: &str) -> alloc::string::String { + let white_space_stripped = strip_unicode_whitespace(input_str); + let diacriticals_stripped = strip_diacriticals(&white_space_stripped); + let confusables_removed = replace_confusables(&diacriticals_stripped); + confusables_removed.to_lowercase() +} + +/// Replaces any characters in the input string that are confusable with a different character. +/// +/// # Arguments +/// +/// * `input_str` - A reference to the input string to replace confusable characters. +/// +/// # Returns +/// +/// A new string where any confusable characters have been replaced with their corresponding non-confusable characters. +pub fn replace_confusables(input_str: &str) -> alloc::string::String { + input_str + .chars() + .map(|character| CONFUSABLES.get(&character).map_or(character, |&value| value)) + .collect::() +} + +/// This function removes diacritical marks from the input string and returns a new `String` without them. +/// +/// # Arguments +/// * `input_str` - A string slice that contains the input string from which the diacritical marks need to be removed. +/// +/// # Notes +/// This function uses the NFKD normalization form and filtering of combining marks to strip the diacritical marks from the input string. +/// Combining marks are Unicode characters that are intended to modify the appearance of another character. +/// +pub fn strip_diacriticals(input_str: &str) -> alloc::string::String { + input_str + .nfkd() + .filter(|character| !is_combining_mark(*character)) + .collect::() +} + +/// Splits the given display name into its base handle and handle suffix. +/// +/// # Arguments +/// +/// * `display_name_str` - The display name to split. +/// +/// # Returns +/// +/// A tuple containing the base handle string and the handle suffix as a `HandleSuffix` enum. +/// +pub fn split_display_name(display_name_str: &str) -> Option<(String, HandleSuffix)> { + let parts: Vec<&str> = display_name_str.split(HANDLE_DELIMITER).collect(); + let base_handle_str = parts[0].to_string(); + if parts.len() != 2 { + return None; + } + + let suffix = parts[1]; + let suffix_num = suffix.parse::().ok()?; + + Some((base_handle_str, suffix_num)) +} + +/// Strips any Unicode whitespace characters from the provided string and returns the resulting string. +/// +/// # Arguments +/// +/// * `input_str` - A string slice that holds the input string from which the Unicode whitespace characters need to be stripped. +/// +/// # Returns +/// +/// A new string without any Unicode whitespace characters. +pub fn strip_unicode_whitespace(input_str: &str) -> String { + input_str + .chars() + // U+200C is a zero-width Non-joiner needed for some writing systems + // U+200D is a zero-width joiner needed for some writing systems + .filter(|character| { + !character.is_whitespace() && character.ne(&'\u{200C}') && character.ne(&'\u{200D}') + }) + .collect::() +} + +/// Trims whitespace from the head and tail and collapses all other whitespace to just a single space +/// +/// # Arguments +/// +/// * `input_str` - A string slice that holds the input string from which the whitespace characters need to be trimmed and collapsed +/// +/// # Returns +/// +/// A new string without any Unicode whitespace characters. +pub fn trim_and_collapse_whitespace(input_str: &str) -> String { + // Benchmarked as slightly faster than https://crates.io/crates/collapse + input_str + .split_whitespace() + .filter(|s| !s.is_empty()) + .collect::>() + .join(" ") +} diff --git a/pallets/handles/src/handles-utils/src/data/confusable_characters.txt b/pallets/handles/src/handles-utils/src/data/confusable_characters.txt new file mode 100644 index 0000000000..447f35cddb --- /dev/null +++ b/pallets/handles/src/handles-utils/src/data/confusable_characters.txt @@ -0,0 +1,1851 @@ +!ǃⵑ! +$$ +%% +&ꝸ& +'`´ʹʻʼʽʾˈˊˋ˴ʹ΄՚՝י׳ߴߵᑊᛌ᾽᾿`´῾‘’‛′‵ꞌ'`𖽑𖽒 +(❨❲〔﴾([ +)❩❳〕﴿)] +*٭⁎∗*𐌟 ++᛭➕+𐊛 +,¸؍٫‚ꓹ, +-˗۔‐‑‒–⁃−➖Ⲻ﹘ +.٠۰܁܂․ꓸ꘎.𐩐𝅭 +/᜵⁁⁄∕╱⟋⧸Ⳇ⼃〳ノ㇓丿/𝈺 +0OoΟοσОоՕօסه٥ھہە۵߀०০੦૦ଠ୦௦ం౦ಂ೦ംഠ൦ං๐໐ဝ၀ჿዐᴏᴑℴⲞⲟⵔ〇ꓳꬽﮦﮧﮨﮩﮪﮫﮬﮭﻩﻪﻫﻬ0Oo𐊒𐊫𐐄𐐬𐓂𐓪𐔖𑓐𑢵𑣈𑣗𑣠𝐎𝐨𝑂𝑜𝑶𝒐𝒪𝓞𝓸𝔒𝔬𝕆𝕠𝕺𝖔𝖮𝗈𝗢𝗼𝘖𝘰𝙊𝙤𝙾𝚘𝚶𝛐𝛔𝛰𝜊𝜎𝜪𝝄𝝈𝝤𝝾𝞂𝞞𝞸𝞼𝟎𝟘𝟢𝟬𝟶𞸤𞹤𞺄🯰 +1Iil|ıƖǀɩɪ˛ͺΙιІіӀӏ׀וןا١۱ߊᎥᛁιℐℑℓℹⅈⅠⅰⅼ∣⍳⏽Ⲓⵏꓲꙇꭵﺍﺎ1Iil│𐊊𐌉𐌠𑣃𖼨𝐈𝐢𝐥𝐼𝑖𝑙𝑰𝒊𝒍𝒾𝓁𝓘𝓲𝓵𝔦𝔩𝕀𝕚𝕝𝕴𝖎𝖑𝖨𝗂𝗅𝗜𝗶𝗹𝘐𝘪𝘭𝙄𝙞𝙡𝙸𝚒𝚕𝚤𝚰𝛊𝛪𝜄𝜤𝜾𝝞𝝸𝞘𝞲𝟏𝟙𝟣𝟭𝟷𞣇𞸀𞺀🯱 +2ƧϨᒿꙄꛯꝚ2𝟐𝟚𝟤𝟮𝟸🯲 +3ƷȜЗӠⳌꝪꞫ3𑣊𖼻𝈆𝟑𝟛𝟥𝟯𝟹🯳 +4Ꮞ4𑢯𝟒𝟜𝟦𝟰𝟺🯴 +5Ƽ5𑢻𝟓𝟝𝟧𝟱𝟻🯵 +6бᏮⳒ6𑣕𝟔𝟞𝟨𝟲𝟼🯶 +77𐓒𑣆𝈒𝟕𝟟𝟩𝟳𝟽🯷 +8Ȣȣ৪੪ଃ8𐌚𝟖𝟠𝟪𝟴𝟾𞣋🯸 +9৭੧୨൭ⳊꝮ9𑢬𑣌𑣖𝟗𝟡𝟫𝟵𝟿🯹 +:ː˸։׃܃܄ःઃ᛬᠃᠉⁚∶ꓽ꞉︰: +;;; +<˂ᐸᚲ‹❮<𝈶 +=᐀⹀゠꓿= +>˃ᐳ›❯>𖼿𝈷 +?ɁʔॽᎮꛫ? +@@ +AΑАᎪᗅᴀꓮꭺA𐊠𖽀𝐀𝐴𝑨𝒜𝓐𝔄𝔸𝕬𝖠𝗔𝘈𝘼𝙰𝚨𝛢𝜜𝝖𝞐 +BʙΒВвᏴᏼᗷᛒℬꓐꞴB𐊂𐊡𐌁𝐁𝐵𝑩𝓑𝔅𝔹𝕭𝖡𝗕𝘉𝘽𝙱𝚩𝛣𝜝𝝗𝞑 +CϹСᏟᑕℂℭⅭ⊂Ⲥ⸦ꓚC𐊢𐌂𐐕𐔜𑣩𑣲𝐂𝐶𝑪𝒞𝓒𝕮𝖢𝗖𝘊𝘾𝙲🝌 +DᎠᗞᗪᴅⅅⅮꓓꭰD𝐃𝐷𝑫𝒟𝓓𝔇𝔻𝕯𝖣𝗗𝘋𝘿𝙳 +EΕЕᎬᴇℰ⋿ⴹꓰꭼE𐊆𑢦𑢮𝐄𝐸𝑬𝓔𝔈𝔼𝕰𝖤𝗘𝘌𝙀𝙴𝚬𝛦𝜠𝝚𝞔 +FϜᖴℱꓝꞘF𐊇𐊥𐔥𑢢𑣂𝈓𝐅𝐹𝑭𝓕𝔉𝔽𝕱𝖥𝗙𝘍𝙁𝙵𝟊 +GɢԌԍᏀᏳᏻꓖꮐG𝐆𝐺𝑮𝒢𝓖𝔊𝔾𝕲𝖦𝗚𝘎𝙂𝙶 +HʜΗНнᎻᕼℋℌℍⲎꓧꮋH𐋏𝐇𝐻𝑯𝓗𝕳𝖧𝗛𝘏𝙃𝙷𝚮𝛨𝜢𝝜𝞖 +JͿЈᎫᒍᴊꓙꞲꭻJ𝐉𝐽𝑱𝒥𝓙𝔍𝕁𝕵𝖩𝗝𝘑𝙅𝙹 +KΚКᏦᛕKⲔꓗK𐔘𝐊𝐾𝑲𝒦𝓚𝔎𝕂𝕶𝖪𝗞𝘒𝙆𝙺𝚱𝛫𝜥𝝟𝞙 +LʟᏞᒪℒⅬⳐⳑꓡꮮL𐐛𐑃𐔦𑢣𑢲𖼖𝈪𝐋𝐿𝑳𝓛𝔏𝕃𝕷𝖫𝗟𝘓𝙇𝙻 +MΜϺМᎷᗰᛖℳⅯⲘꓟM𐊰𐌑𝐌𝑀𝑴𝓜𝔐𝕄𝕸𝖬𝗠𝘔𝙈𝙼𝚳𝛭𝜧𝝡𝞛 +NɴΝℕⲚꓠN𐔓𝐍𝑁𝑵𝒩𝓝𝔑𝕹𝖭𝗡𝘕𝙉𝙽𝚴𝛮𝜨𝝢𝞜 +PΡРᏢᑭᴘᴩℙⲢꓑꮲP𐊕𝐏𝑃𝑷𝒫𝓟𝔓𝕻𝖯𝗣𝘗𝙋𝙿𝚸𝛲𝜬𝝦𝞠 +QℚⵕQ𝐐𝑄𝑸𝒬𝓠𝔔𝕼𝖰𝗤𝘘𝙌𝚀 +RƦʀᎡᏒᖇᚱℛℜℝꓣꭱꮢR𐒴𖼵𝈖𝐑𝑅𝑹𝓡𝕽𝖱𝗥𝘙𝙍𝚁 +SЅՏᏕᏚꓢS𐊖𐐠𖼺𝐒𝑆𝑺𝒮𝓢𝔖𝕊𝕾𝖲𝗦𝘚𝙎𝚂 +TΤτТтᎢᴛ⊤⟙ⲦꓔꭲT𐊗𐊱𐌕𑢼𖼊𝐓𝑇𝑻𝒯𝓣𝔗𝕋𝕿𝖳𝗧𝘛𝙏𝚃𝚻𝛕𝛵𝜏𝜯𝝉𝝩𝞃𝞣𝞽🝨 +UՍሀᑌ∪⋃ꓴU𐓎𑢸𖽂𝐔𝑈𝑼𝒰𝓤𝔘𝕌𝖀𝖴𝗨𝘜𝙐𝚄 +VѴ٧۷ᏙᐯⅤⴸꓦꛟV𐔝𑢠𖼈𝈍𝐕𝑉𝑽𝒱𝓥𝔙𝕍𝖁𝖵𝗩𝘝𝙑𝚅 +WԜᎳᏔꓪW𑣦𑣯𝐖𝑊𝑾𝒲𝓦𝔚𝕎𝖂𝖶𝗪𝘞𝙒𝚆 +XΧХ᙭ᚷⅩ╳ⲬⵝꓫꞳX𐊐𐊴𐌗𐌢𐔧𑣬𝐗𝑋𝑿𝒳𝓧𝔛𝕏𝖃𝖷𝗫𝘟𝙓𝚇𝚾𝛸𝜲𝝬𝞦 +YΥϒУҮᎩᎽⲨꓬY𐊲𑢤𖽃𝐘𝑌𝒀𝒴𝓨𝔜𝕐𝖄𝖸𝗬𝘠𝙔𝚈𝚼𝛶𝜰𝝪𝞤 +ZΖᏃℤℨꓜZ𐋵𑢩𑣥𝐙𝑍𝒁𝒵𝓩𝖅𝖹𝗭𝘡𝙕𝚉𝚭𝛧𝜡𝝛𝞕 +\∖⟍⧵⧹⼂㇔丶﹨\𝈏𝈻 +^˄ˆ +_ߺ﹍﹎﹏_ +aɑαа⍺a𝐚𝑎𝒂𝒶𝓪𝔞𝕒𝖆𝖺𝗮𝘢𝙖𝚊𝛂𝛼𝜶𝝰𝞪 +bƄЬᏏᑲᖯb𝐛𝑏𝒃𝒷𝓫𝔟𝕓𝖇𝖻𝗯𝘣𝙗𝚋 +cϲсᴄⅽⲥꮯc𐐽𝐜𝑐𝒄𝒸𝓬𝔠𝕔𝖈𝖼𝗰𝘤𝙘𝚌 +dԁᏧᑯⅆⅾꓒd𝐝𝑑𝒅𝒹𝓭𝔡𝕕𝖉𝖽𝗱𝘥𝙙𝚍 +eеҽ℮ℯⅇꬲe𝐞𝑒𝒆𝓮𝔢𝕖𝖊𝖾𝗲𝘦𝙚𝚎 +fſϝքẝꞙꬵf𝐟𝑓𝒇𝒻𝓯𝔣𝕗𝖋𝖿𝗳𝘧𝙛𝚏𝟋 +gƍɡցᶃℊg𝐠𝑔𝒈𝓰𝔤𝕘𝖌𝗀𝗴𝘨𝙜𝚐 +hһհᏂℎh𝐡𝒉𝒽𝓱𝔥𝕙𝖍𝗁𝗵𝘩𝙝𝚑 +jϳјⅉj𝐣𝑗𝒋𝒿𝓳𝔧𝕛𝖏𝗃𝗷𝘫𝙟𝚓 +kk𝐤𝑘𝒌𝓀𝓴𝔨𝕜𝖐𝗄𝗸𝘬𝙠𝚔 +mm +nոռn𝐧𝑛𝒏𝓃𝓷𝔫𝕟𝖓𝗇𝗻𝘯𝙣𝚗 +pρϱр⍴ⲣp𝐩𝑝𝒑𝓅𝓹𝔭𝕡𝖕𝗉𝗽𝘱𝙥𝚙𝛒𝛠𝜌𝜚𝝆𝝔𝞀𝞎𝞺𝟈 +qԛգզq𝐪𝑞𝒒𝓆𝓺𝔮𝕢𝖖𝗊𝗾𝘲𝙦𝚚 +rгᴦⲅꭇꭈꮁr𝐫𝑟𝒓𝓇𝓻𝔯𝕣𝖗𝗋𝗿𝘳𝙧𝚛 +sƽѕꜱꮪs𐑈𑣁𝐬𝑠𝒔𝓈𝓼𝔰𝕤𝖘𝗌𝘀𝘴𝙨𝚜 +tt𝐭𝑡𝒕𝓉𝓽𝔱𝕥𝖙𝗍𝘁𝘵𝙩𝚝 +uʋυսᴜꞟꭎꭒu𐓶𑣘𝐮𝑢𝒖𝓊𝓾𝔲𝕦𝖚𝗎𝘂𝘶𝙪𝚞𝛖𝜐𝝊𝞄𝞾 +vνѵטᴠⅴ∨⋁ꮩv𑜆𑣀𝐯𝑣𝒗𝓋𝓿𝔳𝕧𝖛𝗏𝘃𝘷𝙫𝚟𝛎𝜈𝝂𝝼𝞶 +wɯѡԝաᴡꮃw𑜊𑜎𑜏𝐰𝑤𝒘𝓌𝔀𝔴𝕨𝖜𝗐𝘄𝘸𝙬𝚠 +x×хᕁᕽ᙮ⅹ⤫⤬⨯x𝐱𝑥𝒙𝓍𝔁𝔵𝕩𝖝𝗑𝘅𝘹𝙭𝚡 +yɣʏγуүყᶌỿℽꭚy𑣜𝐲𝑦𝒚𝓎𝔂𝔶𝕪𝖞𝗒𝘆𝘺𝙮𝚢𝛄𝛾𝜸𝝲𝞬 +zᴢꮓz𑣄𝐳𝑧𝒛𝓏𝔃𝔷𝕫𝖟𝗓𝘇𝘻𝙯𝚣 +{❴{𝄔 +}❵} +~˜῀⁓∼ +£₤ +©Ⓒ +®Ⓡ +¯ˉ‾▔﹉﹊﹋﹌ ̄ +°˚∘○◦⸰ +µμ𝛍𝜇𝝁𝝻𝞵 +¶⸿ +··ᐧ᛫•‧∙⋅⸱・ꞏ・𐄁 +ºᵒ⁰ +ÄӒ +ÅȦ +ÖŐӦ +ÞϷ𐓄 +ßβϐᏰꞵ𝛃𝛽𝜷𝝱𝞫 +äӓ +åȧ +öӧةۃ⍥ﺓﺔ +÷➗ +þƿϸ +ĂǍ +ăǎ +ĔĚ +ĕě +ĞǦ +ğǧ +ģǵ +ĬǏ +ĭǐ +ĸκϰкᴋⲕꮶ𝛋𝛞𝜅𝜘𝜿𝝒𝝹𝞌𝞳𝟆 +ņɲ +ŎǑ +ŏǒ +ŢȚ +ţƫțᎿ +ŬǓ +ŭǔ +ƅьꮟ +ƆϽↃꓛ𐐣 +Ǝ∃ⴺꓱ +ƏӘ +ƐԐᏋℇ𐐁𖼭𝈡 +ƨϩᴤꙅ +ƩΣ⅀∑ⵉ𝚺𝛴𝜮𝝨𝞢 +Ʊᘮᘴ℧ +ǝəә +ǶԊ +ȝʒӡჳⳍꝫ +ȷյ𝚥 +ɂꭾ +ɅΛЛ٨۸ᐱⴷꓥꛎ𐊍𐒰𖼽𝚲𝛬𝜦𝝠𝞚 +ɋᶐ +ɔͻᴐↄ𐑋 +ɛεϵєԑ⋴ⲉꞓꮛ𐐩𑣎𝛆𝛜𝜀𝜖𝜺𝝐𝝴𝞊𝞮𝟄 +ɜзᴈ +ɞ𐑂 +ɰպሣ +ɷ𐐿 +ɸφϕфⲫ𝛗𝛟𝜑𝜙𝝋𝝓𝞅𝞍𝞿𝟇 +ɿ℩ +ʃ∫ꭍ +ʌᴧ𐓘 +ʍмᴍꮇ +ʘ⊙☉⨀ⵙꙨ𐓃 +ʚꞝ𐐪 +ʡꛍ +ʳᣴ +ʿ˓ՙ +ˁˤ +ˇ˘꙾ +ˏ͵ +˙ॱൎ +ˡᣳ +ˢᣛᣵ +˪˻꜖ +˫꜔ +˳。 +̀̀॓ +ؘَ́́֜֝݇॔ +̂̑ٛ߮᳐꛰ +̃͂ٓ +̄̅ٙ߫᳒꛱ +̆̌ͮ٘ٚ꙼ +ֹֺׁׂ̇ׄ۬݀݁߭࣪͘ंਂં் +̈߳࣫ +̉〬 +ْ̊ͦ֯۟ஂํໍံំ៓゚ⷪ𑌀 +ًࣰ̋ +ٰ̍ +̎᳚ +̒ٗ +ؙُ̓̓ࣳ̕ +̔ٝ +̖᳭ +ؚِ̗ +̠̱॒ +̡̧̦̹ +̢̨᪷ͅ +़়਼઼଼𑇊𑓃ִ̣ׅٜ࣭᳝𐨺 +̤࣮᳞ +̥༷〭 +̩ٖ᳜ +̫᳕ +̭᳙ +̮᳘ +̳͇ +̵̶ +̷̸ +͐͗ࣸࣿ +͒ऀ +͔ࣹ +͕ࣺ +ͣⷶ +ͤⷷ +ͨⷭ +ͯⷯ +ͰᎨᎰⱵꚱ +ͶИꚡ𐐥𝈋 +ͷиᴎ𐑍 +ͽꜿ +ΓГᎱᒥℾⲄ𖼇𝚪𝛤𝜞𝝘𝞒 +Δᐃ∆△Ⲇⵠ𐊅𐊣𖼚𝚫𝛥𝜟𝝙𝞓🜂 +Ξ𝚵𝛯𝜩𝝣𝞝 +ΠПℿ∏Ⲡꛛ𝚷𝛱𝜫𝝥𝞟 +ΦФՓቀᛰⲪ𐊳𝚽𝛷𝜱𝝫𝞥 +ΨѰᛘⲮ𐊵𐓑𝚿𝛹𝜳𝝭𝞧 +ΩᘯᘵΩ𐊶𝛀𝛺𝜴𝝮𝞨 +δծᕷẟ⸹𝛅𝛿𝜹𝝳𝞭 +ζ𝛇𝜁𝜻𝝵𝞯 +λⲖ𐓛𝛌𝜆𝝀𝝺𝞴 +ξ𝛏𝜉𝝃𝝽𝞷 +πϖпᴨℼ𝛑𝛡𝜋𝜛𝝅𝝕𝝿𝞏𝞹𝟉 +ςϛ𝛓𝜍𝝇𝞁𝞻 +χⲭꭓꭕ𝛘𝜒𝝌𝞆𝟀 +ψѱ𐓹𝛙𝜓𝝍𝞇𝟁 +ω⍵ⲱꙍꞷ𝛚𝜔𝝎𝞈𝟂 +ϗⳤ +Ϙ𐊭𐌒 +ϬⳜ +ϿꜾ +Є€ⲈꞒ +Ћ𐓍 +ЍЙ +ШⲼ +Э℈ +йѝ +лᴫ +шⲽ +яᴙ +љꭠ +ѠᏇᗯ𝈢 +ҶӋ +ҷӌ +Ӄ𐒼 +Ӿ𝈂 +Իኮ +Մሆ +Ոበᑎ∩⋂ꓵ𝉅 +Պጣ +Ռቡ +Ք₽ +ձኔ +֖֭ +֮֘ +֙֨ +֤֚ +אℵﬡ +בℶ +גℷ +דℸﬢ +הﬣ +כﬤ +לﬥ +םﬦ +עﬠ +רﬧ +תﬨ +،٬⸲ +؏عﻉﻊﻋﻌ𞸏𞸯𞹏𞹯𞺏𞺯 +؛⸵ +؟⸮ +ءﺀ +آﺁﺂ +بﺏﺐﺑﺒ𞸁𞸡𞹡𞺁𞺡 +تﺕﺖﺗﺘ𞸕𞸵𞹵𞺕𞺵 +جﺝﺞﺟﺠ𞸂𞸢𞹂𞹢𞺂𞺢 +حﺡﺢﺣﺤ𞸇𞸧𞹇𞹧𞺇𞺧 +خﺥﺦﺧﺨ𞸗𞸷𞹗𞹷𞺗𞺷 +دﺩﺪ𐋡𞸃𞺃𞺣 +ذﺫﺬ𞸘𞺘𞺸 +رﺭﺮ𞸓𞺓𞺳 +زﺯﺰ𞸆𞺆𞺦 +سﺱﺲﺳﺴ𞸎𞸮𞹎𞹮𞺎𞺮 +صﺹﺺﺻﺼ𐋲𞸑𞸱𞹑𞹱𞺑𞺱 +ضﺽﺾﺿﻀ𞸙𞸹𞹙𞹹𞺙𞺹 +طﻁﻂﻃﻄ𐋨𞸈𞹨𞺈𞺨 +ظﻅﻆﻇﻈ𞸚𞹺𞺚𞺺 +غﻍﻎﻏﻐ𞸛𞸻𞹛𞹻𞺛𞺻 +فڧﻑﻒﻓﻔ𞸐𞸰𞹰𞺐𞺰 +قﻕﻖﻗﻘ𞸒𞸲𞹒𞹲𞺒𞺲 +كکڪﮎﮏﮐﮑﻙﻚﻛﻜ𞸊𞸪𞹪 +لﻝﻞﻟﻠ𞸋𞸫𞹋𞺋𞺫 +مﻡﻢﻣﻤ𞸌𞸬𞹬𞺌𞺬 +نﻥﻦﻧﻨ𞸍𞸭𞹍𞹭𞺍𞺭 +وࢱﻭﻮ𐋤𞸅𞺅𞺥 +ىيٮںیےࢽﮞﮟﮮﮯﯨﯩﯼﯽﯾﯿﻯﻰﻱﻲﻳﻴ𞸉𞸜𞸝𞸩𞹉𞹝𞹩𞹼𞺉𞺩 +ٌࣱࣥࣨ +ٍࣲ +ٕٟ +٢۲ꧏ +٣۳𞣉 +٤۴ +٦۶ +٩۹१𑣤 +ٯڡࢻࢼ𞸞𞸟𞹟𞹾 +ٱﭐﭑ +ٺﭞﭟﭠﭡ +ٻېﭒﭓﭔﭕﯤﯥﯦﯧ +ٿﭢﭣﭤﭥ +ڀﭚﭛﭜﭝ +ڃﭶﭷﭸﭹ +ڄﭲﭳﭴﭵ +چﭺﭻﭼﭽ +ڇﭾﭿﮀﮁ +ڌﮄﮅ +ڍﮂﮃ +ڦﭮﭯﭰﭱ +ڬݢ +گࢰﮒﮓﮔﮕ +ڱﮚﮛﮜﮝ +ڳﮖﮗﮘﮙ +ۀۂﮤﮥ +ۅﯠﯡ +ۓﮰﮱ +ۛ᪴⃛ +ܼ݂ +ݔݧࢩ +ऺ𑇋 +ऽઽ +ुુ +ूૂ +ॆੋ +्੍્ +।꠰ +२૨ +३૩ +४૪ +८૮ +॰૰⚬𑂻𑇇 +ঃਃఃಃഃඃး𑓁 +ঘ𑒒 +চ𑒔 +জ𑒖 +ঞ𑒘 +ট𑒙 +ড𑒛 +ণ𑒪 +ত𑒞 +থ𑒟 +দ𑒠 +ধ𑒡 +ন𑒢 +প𑒣 +ব𑒩 +ম𑒧 +য𑒨 +র𑒫 +ল𑒝 +ষ𑒭 +স𑒮 +ঽ𑓄 +া𑒰 +ি𑒱 +ে𑒹 +ো𑒼 +ৌ𑒾 +্𑓂 +ৗ𑒽 +১𑓑 +২𑓒 +৬𑓖 +அ௮ +ஈரா +உ௨ഉ +எ௭ +ஐஜജ +க௧ +ச௪ +ணണ +னை +ய௰ +ளௗ +ழഴ +ஶശ +ஷ௸ +ிിീ +௳௵ +అಅ +ఆಆ +ఇಇ +ఒಒ +జಜ +ఞಞ +ణಣ +యಯ +ఱಱ +లಲ +౧೧ +౨೨ +౯೯ +ഞൡ +രറ +ുൂൃ +ජ෪ +ද෫ +ขฃ +คดต +ฆม +จຈ +ชซ +ฎฏ +ฑท +บບ +ปປ +ฝຝ +พພ +ฟຟ +ภฦ +ยຍ +ฯ។ +าๅ +ิិ +ีី +ึឹ +ืឺ +ุຸ +ูູ +่່់ +้້ +๊໊ +๋໋ +๏៙ +๚៕ +๛៚ +་༌ +རཪ +࿕卐 +࿖卍 +၁ၥ +ႠꞆ +ᄀᆨㄱ +ᄂᆫㄴ +ᄃᆮㄷ +ᄅᆯㄹ +ᄆᆷㅁ +ᄇᆸㅂ +ᄉᆺㅅ +ᄋᆼㅇ +ᄌᆽㅈ +ᄎᆾㅊ +ᄏᆿㅋ +ᄐᇀㅌ +ᄑᇁㅍ +ᄒᇂㅎ +ᅀᇫㅿ +ᅌᇰㆁ +ᅙᇹㆆ +ᅠㅤ +ᅡㅏ +ᅣㅑ +ᅥㅓ +ᅧㅕ +ᅩㅗ +ᅭㅛ +ᅮㅜ +ᅲㅠ +ᅳ—―─━⼀ーㅡ㇐一ꟷ- +ᅵ⎜⎟⎢⎥⎪⎮⼁ㅣ㇑丨 +ᆞㆍ +Ꮿῶ +ᐡᓑ +ᐩᕀ +ᐵ⍩ +ᑐ⊃⸧ +ᒉᘃ +ᒐᘂ +ᓓᘄ +ᓚᘇ +ᕃᘢ +ᕆᘣ +ᕊᘤ +ᖵℲꓞ +ᖷꟻ𝈰 +ᗄ∀Ɐꓯ𝈗 +ᗒ⪫ +ᗕ⪪ +ᗡꓷ +ᙆᶻ +ᙠꓭ +ᚹꚰ +ᚼᛡ +ᚽᛂ⍿ +ᛋ𝈿 +ᛏ↑ +ᛐ↿ +ᛚ↾⨡ +ᛜ⋄◇◊♢𐊔𑢷🝔 +ᛞ⋈⨝ +ᛦ𐓐 +ᛨ↕ +ᛯⵣ +អឣ +ᠵᡕ +ᡜᢖ +ᣔᶺ +ᣖᴾ +ᦞ᧐ +ᦱ᧑ +ᩅ᪀᪐ +ᬍ᭒ +ᬑ᭓ +ᬨ᭘ +᭐᭜ +ᴴᵸ +ᵋᶟ +ᵍᶢ +ᷟⷨ +ᷮⷬ +ṃꭑ +ẚả +ώῴ +⁝⋮ⵗ︙ +⁞⦙ⵂ⸽ +⁹ꝰ +₸〒〶 +⃩꙯ +℗Ⓟ +⅁ꓨ +⅂ꓶ𐐑𖼦𝈕𝈫 +⅃𖼀 +⅄𝈛 +↞⯬ +↟⯭ +↠⯮ +↡⯯ +↲↵ +↺🄎 +∂𝛛𝜕𝝏𝞉𝟃𞣌 +∅⌀ +∇𑢨𝛁𝛻𝜵𝝯𝞩 +∎█■ +∐⨿ +∠𞣈 +∧⋀ +∴⸫ +∵⸪ +∷⸬ +≈𑇞 +≏♎🝞 +≡≣ +⊍⨃ +⊎⨄ +⊏𝈸 +⊐𝈹 +⊓⨅ +⊔⨆ +⊕⨁Ꚛ𐊨🜨 +⊗⨂ +⊛⍟ +⊠🝱 +⊡🝕 +⊥⟂ꓕꞱ𝈜 +⊲◁ +⊳▷ +⌇︴ +⌒◠ +⌙⨽ +⌤⌥ +〈❬⟨〈く㇛𡿨 +〉❭⟩〉 +⌻⧇ +⌾◎⦾ +⍁⧄〼 +⍂⧅ +⍉⦰ +⍋⏃ +⍎⏂ +⍕⏁ +⍭⏆ +⎈☸ +⏜︵ +⏝︶ +⏞︷ +⏟︸ +⏠︹ +⏡︺ +⏥▱ +⏻⏼ +⏾☾🌘 +①➀ +②➁ +③➂ +④➃ +⑤➄ +⑥➅ +⑦➆ +⑧➇ +⑨➈ +⑩➉ +Ⓘⓛ +⓪🄍 +│┃︱| +┌┏ +├┣ +▌▐ +▖▗ +▘▝ +□☐ +▪■ +▶▸► +▽𐊼𝈔🜄 +☥𐦞𓋹 +☧⳩ +☩🜊 +☰Ⲷ +☽🌒🌙 +⟦〚 +⟧〛 +⦚⧙ +⧖𐋀 +⧟🜺 +⨟⨾ +ⰿꦒ +Ɒ𐐟 +ⱶꮀ +⳨𐆠 +ⵀ𐊸 +⺂㇖乛 +⺃㇟乚 +⺅イ亻 +⺉刂 +⺋㔾 +⺎兀兀 +⺏尣 +⺐⼪尢尢 +⺒巳 +⺓⼳幺 +⺔彑 +⺖忄 +⺗㣺 +⺘扌 +⺙攵 +⺛旡 +⺞歺 +⺟母 +⺠民 +⺡氵 +⺢氺 +⺣灬 +⺤爫爫 +⺦丬 +⺨犭 +⺫⺲罒 +⺭礻 +⺯糹 +⺱罓 +⺹耂 +⺺肀 +⺾⺿⻀艹艹艹 +⻁虎 +⻂衤 +⻃覀 +⻄西 +⻅见 +⻈讠 +⻉贝 +⻋车 +⻌⻍辶辶 +⻏⻖阝 +⻐钅 +⻑⾧長 +⻒镸 +⻓长 +⻔门 +⻘青 +⻙韦 +⻚页 +⻛风 +⻜飞 +⻝⾷食 +⻟飠 +⻠饣 +⻢马 +⻤⿁鬼 +⻥鱼 +⻨麦 +⻩黄 +⻫斉 +⻬齐 +⻭歯 +⻮齿 +⻯竜 +⻰龙 +⻲亀 +⻳龟 +⼄㇠乙 +⼅㇚亅 +⼆ニ二 +⼇亠 +⼈人 +⼉儿 +⼊入 +⼋ハ八 +⼌冂 +⼍冖 +⼎冫 +⼏几 +⼐凵凵 +⼑刀 +⼒カ力力 +⼓勹 +⼔匕 +⼕匚 +⼖匸 +⼗〸十 +⼘ト卜 +⼙卩 +⼚厂 +⼛厶 +⼜又 +⼝⼞ロ口囗 +⼟⼠土士 +⼡夂 +⼢夊 +⼣タ夕 +⼤大 +⼥女女 +⼦子 +⼧宀 +⼨寸 +⼩小 +⼫尸 +⼬屮屮屮 +⼭山 +⼮巛 +⼯エ工 +⼰己 +⼱巾 +⼲干 +⼴广 +⼵廴 +⼶廾廾 +⼷弋 +⼸弓 +⼹彐 +⼺彡 +⼻彳 +⼼心 +⼽戈 +⼾戶戸 +⼿手 +⽀支 +⽁攴 +⽂文 +⽃斗 +⽄斤 +⽅方 +⽆无 +⽇日 +⽈曰 +⽉月 +⽊木 +⽋欠 +⽌止 +⽍歹歹 +⽎殳 +⽏毋 +⽐比 +⽑毛 +⽒氏 +⽓气 +⽔水 +⽕火 +⽖爪 +⽗父 +⽘爻 +⽙爿 +⽚片 +⽛牙 +⽜牛 +⽝犬 +⽞玄 +⽟玉 +⽠瓜 +⽡瓦 +⽢甘 +⽣生 +⽤用 +⽥田 +⽦疋 +⽧疒 +⽨癶 +⽩白 +⽪皮 +⽫皿 +⽬目 +⽭矛 +⽮矢 +⽯石 +⽰示 +⽱禸 +⽲禾 +⽳穴 +⽴立立 +⽵竹 +⽶米 +⽷糸 +⽸缶 +⽹网 +⽺羊 +⽻羽羽 +⽼老老 +⽽而 +⽾耒 +⽿耳 +⾀聿 +⾁肉 +⾂臣 +⾃自 +⾄至 +⾅臼 +⾆舌 +⾇舛 +⾈舟 +⾉艮 +⾊色 +⾋艸 +⾌虍 +⾍虫 +⾎血 +⾏行行 +⾐衣衣 +⾑襾 +⾒見見 +⾓角 +⾔言 +⾕谷 +⾖豆 +⾗豕豕 +⾘豸 +⾙貝 +⾚赤 +⾛走 +⾜足 +⾝身 +⾞車車 +⾟辛 +⾠辰辰 +⾡辵 +⾢邑 +⾣酉 +⾤釆 +⾥里里 +⾦金金 +⾨門 +⾩阜 +⾪隶 +⾫隹 +⾬雨 +⾭靑 +⾮非 +⾯面 +⾰革 +⾱韋 +⾲韭 +⾳音 +⾴頁 +⾵風 +⾶飛 +⾸首 +⾹香 +⾺馬 +⾻骨 +⾼高 +⾽髟 +⾾鬥 +⾿鬯 +⿀鬲 +⿂魚 +⿃鳥 +⿄鹵 +⿅鹿鹿 +⿆麥 +⿇麻麻 +⿈黃 +⿉黍 +⿊黑黒 +⿋黹黹 +⿌黽 +⿍鼎 +⿎鼓 +⿏鼠 +⿐鼻鼻 +⿑齊 +⿒齒 +⿓龍龍 +⿔龜龜龜龜 +⿕龠 +〜~ +〹卄 +〺卅 +へヘ +゛゙ +゜゚ +㒞㒞 +㒹㒹 +㒻㒻 +㓟㓟 +㔕㔕 +㖈䎛 +㘽㦳 +㛮㛮 +㛼㛼 +㞁㞁 +㠯㠯 +㡢㡢 +㡼㡼 +㣇㣇 +㣣㣣 +㤜㤜 +㤺㤺 +㨮㨮 +㩁搉 +㩬㩬 +㫚曶 +㫤㫤 +㬈㬈 +㬙㬙 +㬵胶 +㬺幐 +㬻䐠 +㭉㭉 +㮝㮝㮝 +㮣槩 +㰘㰘 +㱎㱎 +㴳㴳 +㶖㶖 +㺬㺬 +㺸㺸㺸 +㼛㼛 +㿼㿼 +䀈䀈 +䀘䀘 +䀹鿃䀹䀹 +䀿晣 +䁆䁆 +䂖䂖 +䃣䃣 +䄯䄯 +䈂䈂 +䈧䈧 +䊠䊠 +䌁䌁 +䌴䌴 +䍙䍙 +䏕䏕 +䏙䏙 +䐋䐋 +䑃朦 +䑫䑫 +䔫䔫 +䕝䕝 +䕡䕡 +䕫䕫 +䗗䗗 +䗹䗹 +䘵䘵 +䚶訞 +䚾䚾 +䛇䛇 +䦕䦕 +䧦䧦 +䩮䩮 +䩶䩶 +䪲䪲 +䬳䬳 +䯎䯎 +䳎䳎 +䳭䳭 +䳸䳸 +䵖䵖 +不不 +並並 +串串 +丸丸 +丹丹 +丽丽 +乁乁 +亂亂 +了了 +亮亮 +什什 +仌仌 +令令 +你你 +併倂倂 +侀侀 +來來 +例例 +侮侮侮 +侻侻 +便便 +値值 +倫倫 +偺偺 +備備 +像像 +僚僚 +僧僧僧 +充充 +免免免 +兔兔 +兤兤 +內內 +全全 +兩兩 +六六 +具具 +冀冀 +再再 +冒冒 +冕冕 +冗冗 +冤冤 +冬冬 +况况况 +冷冷 +凉凉 +凌凌 +凜凜 +凞凞 +刃刃 +切切切 +列列 +利利 +刺刺 +刻刻 +剆剆 +割割 +剷剷 +劉劉 +劣劣 +劳劳 +勇勇勇 +勉勉勉 +勒勒 +勞勞 +勤勤勤 +勵勵 +勺勺勺 +包包 +匆匆 +北北北 +匿匿 +卉卉 +卑卑卑 +博博 +即即 +卵卵 +卽卽 +卿卿卿卿 +參參 +及及 +叟叟 +句句 +叫叫 +叱叱 +吆吆 +吏吏 +吝吝 +吸吸 +呂呂 +呈呈 +周周 +咞咞 +咢咢 +咽咽 +哶哶 +唐唐 +啓啟啓 +啕啕 +啣啣 +善善善 +喇喇 +喙喙喙 +喝喝喝 +喫喫 +喳喳 +嗀嗀 +嗂嗂 +嗢嗢 +嘆嘆嘆 +噑噑 +器器 +噴噴 +囹囹 +圖圖 +圗圗 +型型 +城城 +埴埴 +堍堍 +報報 +堲堲 +塀塀 +塚塚塚 +塞塞 +塡填 +墨墨 +墫壿 +墬墬 +墳墳 +壘壘 +壟壟 +壮壮 +売売 +壷壷 +夆夆 +多多 +夢夢 +奄奄 +奈奈 +契契 +奔奔 +奢奢 +姘姘 +姬姬 +娛娛 +娧娧 +婢婢 +婦婦 +媯嬀 +媵媵 +嬈嬈 +嬨嬨 +嬾嬾嬾 +宅宅 +寃寃 +寘寘 +寧寧寧寧 +寮寮 +寳寳 +寿寿 +将将 +尿尿 +屠屠 +屢屢 +層層 +履履 +岍岍 +峀峀 +崙崙 +嵃嵃 +嵐嵐 +嵫嵫 +嵮嵮 +嵼嵼 +嶲嶲 +嶺嶺 +巡巡 +巢巢 +巽巽 +帡帲 +帨帨 +帽帽 +幩幩 +年年 +度度 +庰庰 +庳庳 +庶庶 +廉廉 +廊廊廊 +廒廒 +廓廓 +廙廙 +廬廬 +弄弄 +弢弢弢 +当当 +形形 +彩彩 +彫彫 +律律 +徚徚 +復復 +徭徭 +忍忍 +志志 +念念 +忹忹 +怒怒 +怜怜 +恵恵 +悁悁 +悔悔悔 +惇惇 +惘惘 +惡惡 +愈愈 +慄慄 +慈慈 +慌慌慌 +慎慎慎 +慠慠 +慨慨 +慺慺 +憎憎憎憎 +憐憐 +憤憤 +憯憯 +憲憲 +懞懞 +懲懲懲懲 +懶懶懶 +戀戀 +成成 +戛戛 +戮戮 +戴戴 +扝扝 +抱抱 +拉拉 +拏拏 +拓拓 +拔拔 +拼拼 +拾拾 +挽挽 +捐捐 +捨捨 +捻捻 +掃掃 +掠掠 +掩掩 +揄揄 +揅揅 +揤揤 +搜搜 +搢搢 +摒摒 +摩摩 +摷摷 +摾摾 +撚撚 +撝撝 +擄擄 +敏敏敏 +敖敖 +敬敬 +數數 +料料 +旅旅 +既既 +旣旣 +易易 +晉晉 +晚晩 +晴晴晴 +暈暈 +暑暑暑 +暜暜 +暴暴 +曆曆 +更更 +書書 +最最 +朌肦 +朏胐 +朐胊 +朓脁 +朗朗朗朗 +朘脧 +望望望 +朡朡 +朣膧 +李李 +杓杓 +杖杖 +杞杞 +杮柿 +杻杻 +枅枅 +林林 +柳柳 +柺柺 +栗栗 +栟栟 +桒桒 +梁梁 +梅梅梅 +梎梎 +梨梨 +椔椔 +楂楂 +榝樧 +榣榣 +槪槪 +樂樂樂樂 +樓樓 +檨檨 +櫓櫓 +櫛櫛 +欄欄 +次次 +歔歔 +歲歲 +歷歷 +殟殟 +殮殮 +殺殺殺殺 +殻殻 +汎汎 +汧汧 +沈沈 +沿沿 +泌泌 +泍泍 +泥泥 +洖洖 +洛洛 +洞洞 +洴洴 +派派 +流流流流 +浩浩 +浪浪 +海海海 +浸浸 +涅涅 +淋淋 +淚淚 +淪淪 +淹淹 +渚渚 +港港 +湮湮 +溈潙 +溜溜 +溺溺 +滇滇 +滋滋滋 +滑滑 +滛滛 +漏漏 +漢漢漢 +漣漣 +潮潮 +濆濆 +濫濫 +濾濾 +瀛瀛 +瀞瀞瀞 +瀹瀹 +灊灊 +灰灰 +灷灷 +災災 +炙炙 +炭炭 +烈烈 +烙烙 +煅煅 +煉煉 +煮煮煮 +熜熜 +燎燎 +燐燐 +爐爐 +爛爛 +爨爨 +爵爵爵 +牐牐 +牢牢 +犀犀 +犕犕 +犯犯 +狀狀 +狼狼 +猪猪猪 +獵獵 +獺獺 +率率率 +王王 +玥玥 +玲玲 +珞珞 +理理 +琉琉 +琢琢 +瑇瑇 +瑜瑜 +瑩瑩 +瑱瑱瑱 +璅璅 +璉璉 +璘璘 +瓊瓊 +甆甆 +甤甤 +画画 +甾甾 +留留 +略略 +異異異 +痢痢 +瘐瘐 +瘝瘝 +瘟瘟 +療療 +癩癩 +益益益 +盛盛 +盧盧 +直直直 +省省 +眞眞 +真真真 +着着 +睊睊睊 +瞋瞋 +瞧瞧 +研硏 +硎硎 +硫硫 +碌碌碌 +碑碑 +磊磊 +磌磌磌 +磻磻 +礪礪 +礼礼 +社社 +祈祈 +祉祉 +祐祐 +祖祖祖 +祝祝 +神神 +祥祥 +祿祿 +禍禍 +禎禎 +福福福 +禮禮 +秊秊 +秫秫 +稜稜 +穀穀穀 +穊穊 +穏穏 +突突 +窱窱 +竮竮 +笠笠 +節節節 +篆篆 +築築 +簾簾 +籠籠 +类类 +粒粒 +精精 +糒糒 +糖糖 +糣糣 +糧糧 +糨糨 +紀紀 +紐紐 +索索 +累累 +絕絶 +絛絛 +絣絣 +綠綠 +綾綾 +緇緇 +練練練練 +縂縂 +縉縉 +縷縷 +繁繁 +繅繅 +缾缾 +署署 +罹罹 +罺罺 +羅羅 +羕羕 +羚羚 +翺翺 +者者者者 +聆聆 +聠聠 +聯聯 +聰聰 +聾聾 +肋肋 +肭肭 +育育 +胼腁 +脃脃 +脾脾 +臘臘 +臨臨 +臭臭 +舁舁舁 +舄舄 +舘舘 +良良 +芋芋 +芑芑 +芝芝 +花花 +芳芳 +芽芽 +若若若 +苦苦 +茝茝 +茣茣 +茶茶 +荒荒 +荓荓 +荣荣 +莭莭 +莽莽 +菉菉 +菊菊 +菌菌 +菜菜 +菧菧 +華華 +菱菱 +落落 +葉葉 +著著著 +蒍蔿 +蓮蓮 +蓱蓱 +蓳蓳 +蓼蓼 +蔖蔖 +蕤蕤 +藍藍 +藺藺 +蘆蘆 +蘒蘒 +蘭蘭 +蘷虁 +蘿蘿 +虐虐 +虜虜虜 +虧虧 +虩虩 +蚈蚈 +蚩蚩 +蛢蛢 +蜎蜎 +蜨蜨 +蝫蝫 +蝹蝹蝹 +螆螆 +螺螺 +蟡蟡 +蠁蠁 +蠟蠟 +衠衠 +裂裂 +裏裏 +裗裗 +裞裞 +裡裡 +裸裸 +裺裺 +褐褐 +襁襁 +襤襤 +覆覆 +視視視 +訮詽 +誠誠 +說說說 +調調 +請請 +諒諒 +論論 +諭諭諭 +諸諸諸 +諾諾諾 +謁謁謁 +謹謹謹 +識識 +讀讀 +讆讏 +變變變 +豈豈 +豜豣 +貫貫 +賁賁 +賂賂 +賈賈 +賓賓 +贈贈贈 +贛贛 +起起 +赿趆 +趼趼 +跋跋 +跥跺 +路路 +跰跰 +躗躛 +軔軔 +軿輧 +輦輦 +輪輪 +輸輸輸 +輻輻 +轢轢 +辞辞 +連連 +逸逸逸 +遲遲 +遼遼 +邏邏 +邔邔 +郎郞郎郞 +郱郱 +都都 +鄑鄑 +鄛鄛 +酪酪 +醙醙 +醴醴 +量量 +鈴鈴 +鈸鈸 +鉶鉶 +鉼鉼 +鋗鋗 +鋘鋘 +錄錄 +鍊鍊 +鎭鎮 +鏹鏹 +鐕鐕 +開開 +閭閭 +閷閷 +阮阮 +陋陋 +降降 +陵陵 +陸陸 +陼陼 +隆隆 +隣隣 +隷隸隸隷 +雃雃 +離離 +難難難 +零零 +雷雷 +霣霣 +露露 +靈靈 +靖靖靖 +韛韛 +韠韠 +響響響 +頋頋頋頋 +領領 +頩頩 +頻頻頻 +類類 +飢飢 +飯飯 +飼飼 +館館 +餩餩 +馧馧 +駂駂 +駱駱 +駾駾 +驪驪 +鬒鬒鬒 +魯魯 +鱀鱀 +鱗鱗 +鳽鳽 +鵧鵧 +鶴鶴 +鷺鷺 +鸞鸞 +鹂鹃 +麗麗 +麟麟 +黎黎 +黾黾 +鼅鼅 +鼏鼏 +鼖鼖 +齃齃 +龎龎 +ꁊ꒞ +ꁐ꒬ +ꃀ꒜ +ꄲ꒨ +ꉙ꒿ +ꊱ꒾ +ꋍ꒔ +ꎫ꓀ +ꎵ꓂ +ꎿ꒺ +ꏂ꒰ +ꑘ꒧ +ꓤꞞ +ꙌꞶ +Ꙙ𖼜🜁 +ꙩ𐓫 +ꜧꞕ +Ꝺꝺ +Ꞛ𐐒 +ꞛ𐐺 +ꣻ𑇜 +꣼𑇛 +ꦝꦣ +꧆꧐ +ꨁ꩓ +ꨣ꩖ +𤋮𤋮 +𢡊𢡊 +𢡄𢡄 +𣏕𣏕 +𥉉𥉉 +𥳐𥳐 +𧻓𧻓 +יִיּ +שׁשׂשּ +שּׁשּׂ +אַאָאּ +︿^ +𐎂𐏑 +𐎓𐏓 +𐎚𒀸 +𐒆𐒠 +𐲂𐳼 +𐲥𐳺 +𑖂𑗘𑗙 +𑖃𑗚 +𑖄𑗛 +𑖲𑗜 +𑖳𑗝 +𑲪𑲲 +𠄢𠄢 +𠔜𠔜 +𠔥𠔥 +𠕋𠕋 +𠘺𠘺 +𠠄𠠄 +𠣞𠣞 +𠨬𠨬 +𠭣𠭣 +𡓤𡓤 +𡚨𡚨 +𡛪𡛪 +𡧈𡧈 +𡬘𡬘 +𡴋𡴋 +𡷤𡷤 +𡷦𡷦 +𢆃𢆃 +𢆟𢆟 +𢌱𢌱𢌱 +𢛔𢛔 +𢬌𢬌 +𢯱𢯱 +𣀊𣀊 +𣊸𣊸 +𣍟𣍟 +𣎓𣎓 +𣎜𣎜 +𣏃𣏃 +𣑭𣑭 +𣚣𣚣 +𣢧𣢧 +𣪍𣪍 +𣫺𣫺 +𣲼𣲼 +𣴞𣴞 +𣻑𣻑 +𣽞𣽞 +𣾎𣾎 +𤉣𤉣 +𤎫𤎫 +𤘈𤘈 +𤜵𤜵 +𤠔𤠔 +𤰶𤰶 +𤲒𤲒 +𤾡𤾡 +𤾸𤾸 +𥁄𥁄 +𥃲𥃲 +𥃳𥃳 +𥄙𥄙 +𥄳𥄳 +𥐝𥐝 +𥘦𥘦 +𥚚𥚚 +𥛅𥛅 +𥥼𥥼 +𥪧𥪧𥪧 +𥮫𥮫 +𥲀𥲀 +𥾆𥾆 +𦇚𦇚 +𦈨𦈨 +𦉇𦉇 +𦋙𦋙 +𦌾𦌾 +𦓚𦓚 +𦔣𦔣 +𦖨𦖨 +𦞧𦞧 +𦞵𦞵 +𦬼𦬼 +𦰶𦰶 +𦳕𦳕 +𦵫𦵫 +𦼬𦼬 +𦾱𦾱 +𧃒𧃒 +𧏊𧏊 +𧙧𧙧 +𧢮𧢮 +𧥦𧥦 +𧲨𧲨 +𧼯𧼯 +𨗒𨗒 +𨗭𨗭 +𨜮𨜮 +𨯺𨯺 +𨵷𨵷 +𩅅𩅅 +𩇟𩇟 +𩈚𩈚 +𩐊𩐊 +𩒖𩒖 +𩖶𩖶 +𩬰𩬰 +𪃎𪃎 +𪄅𪄅 +𪈎𪈎 +𪊑𪊑 +𪎒𪎒 +𪘀𪘀 diff --git a/pallets/handles/src/handles-utils/src/lib.rs b/pallets/handles/src/handles-utils/src/lib.rs new file mode 100644 index 0000000000..037a76c679 --- /dev/null +++ b/pallets/handles/src/handles-utils/src/lib.rs @@ -0,0 +1,20 @@ +//! This package provides utilities for handling handles. + +#![cfg_attr(not(feature = "std"), no_std)] +// Strong Documentation Lints +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + missing_docs +)] + +pub mod converter; +pub mod suffix; +mod types; +pub mod validator; + +pub use converter::*; +pub use validator::*; +#[cfg(test)] +mod tests; diff --git a/pallets/handles/src/handles-utils/src/suffix.rs b/pallets/handles/src/handles-utils/src/suffix.rs new file mode 100644 index 0000000000..2a1f674385 --- /dev/null +++ b/pallets/handles/src/handles-utils/src/suffix.rs @@ -0,0 +1,68 @@ +//! # Suffix Generator +//! +//! `suffix_generator` provides a `SuffixGenerator` struct to generate unique suffix sequences for a given range +//! and seed, excluding already used suffixes. + +use oorandom::Rand32; +use twox_hash::XxHash64; +extern crate alloc; +use alloc::vec::Vec; +use core::hash::Hasher; +/// Generate a unique, shuffled suffix iterator. +/// +/// # Returns +/// +/// An iterator over the unique, shuffled sequence of suffixes. +/// +/// # Examples +/// +/// ``` +/// let min = 100; +/// let max = 150; +/// let canonical_base = "myhandle"; +/// +/// let lazy_sequence = handles_utils::suffix::generate_unique_suffixes(min, max, canonical_base); +/// let suffixes: Vec = lazy_sequence.collect(); +/// ``` +/// +/// This will output a unique, shuffled sequence of suffixes. +/// Note: This is a lazy iterator, so it will not be evaluated until it is consumed. +pub fn generate_unique_suffixes( + min: u16, + max: u16, + canonical_base: &str, +) -> impl Iterator + '_ { + let seed = generate_seed(canonical_base); + let mut rng = Rand32::new(seed); + + let mut indices: Vec = (min..=max).collect(); + (min..=max).rev().map(move |i| { + let j = rng.rand_range((min as u32)..(i + 1) as u32) as u16; + indices.swap((i - min) as usize, (j - min) as usize); + indices[(i - min) as usize] + }) +} + +/// Generate a seed from a unique canonical base handle. +/// +/// # Arguments +/// +/// * `canonical_base` - The canonical base as a string slice. +/// +/// # Returns +/// +/// A 64-bit seed. +/// +/// # Examples +/// ``` +/// let canonical_base = "myuser"; +/// +/// let seed = handles_utils::suffix::generate_seed(canonical_base); +/// ``` +pub fn generate_seed(canonical_base: &str) -> u64 { + let mut hasher = XxHash64::with_seed(0); + hasher.write(canonical_base.as_bytes()); + let value_bytes: [u8; 4] = [0; 4]; + hasher.write(&value_bytes); + hasher.finish() +} diff --git a/pallets/handles/src/handles-utils/src/tests/converter_tests.rs b/pallets/handles/src/handles-utils/src/tests/converter_tests.rs new file mode 100644 index 0000000000..2cfee1cfd3 --- /dev/null +++ b/pallets/handles/src/handles-utils/src/tests/converter_tests.rs @@ -0,0 +1,159 @@ +use crate::{ + convert_to_canonical, + converter::{ + replace_confusables, split_display_name, strip_diacriticals, strip_unicode_whitespace, + trim_and_collapse_whitespace, + }, +}; + +use crate::validator::consists_of_supported_unicode_character_sets; + +use std::{ + fs::File, + io::{BufRead, BufReader}, +}; + +#[test] +fn test_replace_confusables() { + let file = File::open("src/data/confusable_characters.txt"); + assert!(file.is_ok()); + + let reader = BufReader::new(file.ok().unwrap()); + for line_result in reader.lines() { + let original_line = line_result.ok().unwrap(); + + // The first character in `confusable_characters.txt` is the normalized character + // that each subsequent character may be confused with + let first_character = original_line.chars().next().unwrap(); + + let normalized_line = replace_confusables(&original_line); + for normalized_character in normalized_line.chars() { + let normalized_character_codepoint = + format!("\'\\u{{{:x}}}\'", normalized_character as u32); + let first_character_codepoint = format!("\'\\u{{{:x}}}\'", first_character as u32); + // println!("normalized_character_codepoint: {} first_character_codepoint: {}", normalized_character_codepoint, first_character_codepoint); + + if consists_of_supported_unicode_character_sets( + format!("{}{}", normalized_character, first_character).as_str(), + ) { + assert_eq!(first_character_codepoint, normalized_character_codepoint); + } + } + } +} + +#[test] +fn test_strip_diacriticals() { + let diacritical_string = "ÄÅÖäåöĂăĔĚĕĞğģĬĭŎŏŬǓŭàáâñ⁰⁴⁵₀₁₂ด้้้้้็็็็็้้้้้็็็็Z̮̞̠͙͔ͅḀ̗̞͈̻̗Ḷ͙͎̯̹̞͓G̻O̭̗̮𝕿"; + let stripped_string = strip_diacriticals(diacritical_string); + assert_eq!(stripped_string, "AAOaaoAaEEeGggIiOoUUuaaan045012ดZALGOT"); +} + +#[test] +fn test_strip_unicode_whitespace() { + let whitespace_chars = vec![ + '\u{0009}', // tab + '\u{000A}', // line feed + '\u{000B}', // vertical tab + '\u{000C}', // form feed + '\u{000D}', // carriage return + '\u{0020}', // space + '\u{0085}', // next line + '\u{00A0}', // no-break space + '\u{1680}', // ogham space mark + '\u{2000}', // en quad + '\u{2001}', // em quad + '\u{2002}', // en space + '\u{2003}', // em space + '\u{2004}', // three-per-em space + '\u{2005}', // four-per-em space + '\u{2006}', // six-per-em space + '\u{2007}', // figure space + '\u{2008}', // punctuation space + '\u{2009}', // thin space + '\u{200A}', // hair space + '\u{2028}', // line separator + '\u{2029}', // paragraph separator + '\u{202F}', // narrow no-break space + '\u{205F}', // medium mathematical space + '\u{3000}', // ideographic space + '\u{200C}', // Zero-width Non Joiner + '\u{200D}', // Zero-width Joiner + ]; + let whitespace_string: String = whitespace_chars.into_iter().collect(); + let string_with_whitespace = + format_args!("{}hello{}world!{}", whitespace_string, whitespace_string, whitespace_string) + .to_string(); + println!("String with whitespace: {}", string_with_whitespace); + let whitespace_stripped_string = strip_unicode_whitespace(&string_with_whitespace); + println!("Whitespace stripped string: {}", whitespace_stripped_string); + assert_eq!(whitespace_stripped_string, "helloworld!"); +} + +#[test] +fn test_convert_to_canonical_combining_marks_reduce_to_the_same_canonical_form() { + // Construct a handle "Álvaro" where the first character consists of + // a base character and a combining mark for an accute accent + let mut handle_with_combining_mark = String::new(); + handle_with_combining_mark.push('\u{0041}'); + handle_with_combining_mark.push('\u{0301}'); + handle_with_combining_mark.push_str("lvaro"); + + // Construct the handle "Álvaro" where the first character consists + // of the Latin-1 Supplement character 0x00C1, which contains both + // the base character `A` and the accute diacritical in one character + let mut handle_without_combining_mark = String::new(); + handle_without_combining_mark.push('\u{00C1}'); + handle_without_combining_mark.push_str("lvaro"); + + let canonical_with_combining_mark = convert_to_canonical(&handle_with_combining_mark); + let canonical_without_combining_mark = convert_to_canonical(&handle_without_combining_mark); + + let expected_canonical_form = String::from("a1var0"); + assert_eq!(canonical_with_combining_mark, canonical_without_combining_mark); + assert_eq!(canonical_with_combining_mark, expected_canonical_form); +} + +#[test] +fn test_convert_to_canonical_handles_whitespace() { + let all_spaces = String::from(" "); + + let canonical_all_spaces = convert_to_canonical(&all_spaces); + assert_eq!(canonical_all_spaces, String::from("")); + + let has_spaces = String::from(" hello world "); + let canonical_has_spaces = convert_to_canonical(&has_spaces); + assert_eq!(canonical_has_spaces, String::from("he110w0r1d")); +} + +#[test] +fn test_split_display_name_success() { + assert_eq!(split_display_name("hello.123"), Some((String::from("hello"), 123u16))); + assert_eq!(split_display_name("hello.0"), Some((String::from("hello"), 0))); + assert_eq!(split_display_name("español.123"), Some((String::from("español"), 123))); + assert_eq!(split_display_name("日本語.123"), Some((String::from("日本語"), 123))); +} + +#[test] +fn test_split_display_name_failure() { + assert_eq!(split_display_name("hello123"), None); + assert_eq!(split_display_name("hello.-123"), None); + assert_eq!(split_display_name("hello.abc"), None); + assert_eq!(split_display_name("hello.abc123"), None); + assert_eq!(split_display_name("hello.12.3"), None); + assert_eq!(split_display_name("hello."), None); + assert_eq!(split_display_name("hello.0xffff"), None); + // u16::MAX + 1 + assert_eq!(split_display_name("hello.65536"), None); + assert_eq!(split_display_name("hello.999999999"), None); +} + +#[test] +fn test_trim_and_collapse_whitespace() { + assert_eq!(trim_and_collapse_whitespace(" h e llo "), "h e llo"); + assert_eq!(trim_and_collapse_whitespace(" h e l lo "), "h e l lo"); + assert_eq!( + trim_and_collapse_whitespace("\u{3000}h\u{2000}e\u{000D}l\u{2002}l\u{000C}o\u{0009}"), + "h e l l o" + ); +} diff --git a/pallets/handles/src/handles-utils/src/tests/mod.rs b/pallets/handles/src/handles-utils/src/tests/mod.rs new file mode 100644 index 0000000000..df4ca6d1b6 --- /dev/null +++ b/pallets/handles/src/handles-utils/src/tests/mod.rs @@ -0,0 +1,3 @@ +mod converter_tests; +mod suffix_tests; +mod validator_tests; diff --git a/pallets/handles/src/handles-utils/src/tests/suffix_tests.rs b/pallets/handles/src/handles-utils/src/tests/suffix_tests.rs new file mode 100644 index 0000000000..6e3864a329 --- /dev/null +++ b/pallets/handles/src/handles-utils/src/tests/suffix_tests.rs @@ -0,0 +1,31 @@ +use crate::suffix::{generate_seed, generate_unique_suffixes}; +use std::collections::HashSet; + +#[test] +fn should_always_have_the_same_seed() { + assert_eq!(generate_seed("abcdefg"), 15079896798642598352u64); + assert_eq!(generate_seed("gfedcba"), 9497970330616778036u64); +} + +#[test] +fn should_generate_the_same_sequence() { + assert_eq!( + generate_unique_suffixes(10, 99, "abcdefg").take(10).collect::>(), + vec![23, 65, 16, 53, 25, 75, 29, 26, 10, 87] + ); + assert_eq!( + generate_unique_suffixes(10, 99, "gfedcba").take(10).collect::>(), + vec![64, 95, 99, 87, 44, 74, 20, 93, 43, 46] + ); +} + +#[test] +fn should_generate_unique_sequence() { + let mut suffix_set = HashSet::new(); + let suffixes = generate_unique_suffixes(0, 99, "abcdefg"); + + for suffix in suffixes { + let unique = suffix_set.insert(suffix); + assert!(unique, "Duplicate suffix generated: {}", suffix); + } +} diff --git a/pallets/handles/src/handles-utils/src/tests/validator_tests.rs b/pallets/handles/src/handles-utils/src/tests/validator_tests.rs new file mode 100644 index 0000000000..459f1677c5 --- /dev/null +++ b/pallets/handles/src/handles-utils/src/tests/validator_tests.rs @@ -0,0 +1,169 @@ +use crate::validator::{ + consists_of_supported_unicode_character_sets, contains_blocked_characters, + is_reserved_canonical_handle, +}; + +#[test] +fn test_is_reserved_canonical_handle_happy_path() { + let reserved_handles: Vec<&str> = + vec!["admin", "everyone", "all", "mod", "moderator", "administrator", "here", "channel"]; + + for handle in reserved_handles { + assert!(is_reserved_canonical_handle(crate::convert_to_canonical(handle).as_str())); + } +} + +#[test] +fn test_is_reserved_canonical_handle_negative() { + let handles: Vec<&str> = vec!["albert", "coca_cola", "freemont"]; + for handle in handles { + assert!(!is_reserved_canonical_handle(crate::convert_to_canonical(handle).as_str())); + } +} + +#[test] +fn test_contains_blocked_characters_happy_path() { + let handles: Vec<&str> = + vec!["@lbert", "coca:cola", "#freemont", "charles.darwin", "`String`", ":(){ :|:& };:/"]; + for handle in handles { + assert!(contains_blocked_characters(handle)); + } +} + +#[test] +fn test_contains_blocked_characters_negative() { + let handles: Vec<&str> = + vec!["albert", "coca_cola", "freemont", "charles-darwin", "Single Quote'd"]; + for handle in handles { + assert!(!contains_blocked_characters(handle)); + } +} + +// To validate new test cases, add a string/sentence in the new language, run the test +// A test of a sentence can reveal character ranges needed for language rendering. +// Unicode groups: https://www.unicodepedia.com/groups/ for character ranges +// If you don't know why a test is failing, decode the string here to check the range: +// https://unicodedecode.com/ +// Translations of "I can eat glass" from https://www.kermitproject.org/utf8.html +// Some translations: https://translate.glosbe.com/ +// Others from Wikipedia +// Many are (supposed to be) common names or greetings, or translations of "beautiful flower" +// Helpful tool to convert strings into points for testing: +// https://onlinetools.com/utf8/convert-utf8-to-code-points +#[rustfmt::skip] +#[test] +fn test_consists_of_supported_unicode_character_sets_happy_path() { + let strings_containing_characters_in_supported_unicode_character_sets = Vec::from([ + "John", // Basic Latin + "Álvaro", // Latin-1 Supplement + "가영", // Hangul Syllables + "가나다", // Hangul Syllables + "アキラ", // Katakana + "あいこ", // Hiragana + "私はガラスを食べられますそれは私を傷つけません", // Japanese: + "李明", // CJK Unified Ideographs + "严勇", // CJK Unified Ideographs + "龍", // CJK Unified Ideographs + "Αλέξανδρος", // Greek and Coptic + "AaĄąBbCcĆćDdEeĘęFfGgHhIiJjKkLlŁłMmNnŃńOoÓóRrSsŚśYyZzŹźŻż", // Polish + "ÄäÖöÜüẞß", // German + "AÁBCČDĎEÉĚFGHChIÍJKLMNŇOÓPQRŘSŠTŤUÚŮVWXYÝZŽaábcčdďeéěfghchiíjklmnňoópqrřsštťuúůvwxyýzž", // Czech + "αιαιαιᾳειειηιῃοιοιυιυιωιῳαυαυᾹυᾱυευευηυηυουουωυωυγγγγγκγκγξγξγχγχμπμπντντΖζΤΖτζ", // Greek + "ÅåÄäÖö", // Swedish + "ÅåÄäÖöŠšŽž", // Finnish + "ÆæØøÅå", // Danish + "Александр", // Cyrillic + "Կրնամ ապակի ուտել և ինծի անհանգիստ չըներ։", // Armenian + "דָּנִיֵּאלאבּבגּגדּדהווּוֹזחטי ִיכּךּכךלמםנןסעפּףּפףצץקרשׁשׂתּת", // Hebrew + "ابجدهوزحطيكلمنسعفصقرشتثخذضظغءعمر", // Arabic + "ܐܠܦ ܒܝܬ ܣܘܪܝܝܐ", // Syriac + "ދިވެހިބަސް", // Thaana + "ߒߞߏ ߞߊ߲ߜߍ", // N'Ko + "शक्नोम्यत्तुम्", // Devanagari + "म काँच खान सक्छू र मलाई केहि नी हुन्‍न् ।", // Nepali + "আমিকাঁচখেতেপারিতাতেআমারকোনোক্ষতিহয়না।", // Bengali + "मीकाचखाऊशकतोमलातेदुखतनाही", // Marathi + "ನನಗೆಹಾನಿಆಗದೆ,ನಾನುಗಜನ್ನುತಿನಬಹುದು", // Kannada + "मैंकाँचखासकतीहूँऔरमुझेउससेकोईचोटनहींपहुंचती", // Hindi + "நான்கண்ணாடிசாப்பிடுவேன்,அதனால்எனக்குஒருகேடும்வராது", // Tamil + "నేనుగాజుతినగలనుమరియుఅలాచేసినానాకుఏమిఇబ్బందిలేదు", // Telugu + " මටවීදුරුකෑමටහැකියි.එයින්මටකිසිහානියක්සිදුනොවේ", // Sinhalese + "Ἀναξαγόρας", // Greek Extended + " 我能吞下玻璃而不伤身体", // Chinese + " 我能吞下玻璃而不傷身體", // Chinese (Traditional) + "ฉันกินกระจกได้แต่มันไม่ทำให้ฉันเจ็บ", // Thai + "ຂອ້ຍກິນແກ້ວໄດ້ໂດຍທີ່ມັນບໍ່ໄດ້ເຮັດໃຫ້ຂອ້ຍເຈັບ", // Lao + " ཤེལ་སྒོ་ཟ་ནས་ང་ན་གི་མ་རེད།", // Tibetan + "က္ယ္ဝန္‌တော္‌၊က္ယ္ဝန္‌မ မ္ယက္‌စားနုိင္‌သည္‌။ ၎က္ရောင္‌့ ထိခုိက္‌မ္ဟု မရ္ဟိပာ။", // Burmese (Unicode 4.0) + "ကျွန်တော် ကျွန်မ မှန်စားနိုင်တယ်။ ၎င်းကြောင့် ထိခိုက်မှုမရှိပါ။", // Burmese (Unicode 5.0) + "თამარი მადლობა", // Georgian + "እናመሰግናለን አቢታ መልካም ቀን", // Ethiopian + "ᜀᜆᜇ᜔ ᜇᜃᜓ", // Hanunoo + "ᝊᝓᝑᝒᝇ ᝌᝃ ᝈᝅᝋ ", // Buhid + "ᝐᝓᝆᝎᝓ ᝐᝆᝓ", // Tagbanwa + "Би шил идэй чадна, надад хортой биш", // Mongolian (Cyrillic) + "ᠪᠢ ᠰᠢᠯᠢ ᠢᠳᠡᠶᠦ ᠴᠢᠳᠠᠨᠠ ᠂ ᠨᠠᠳᠤᠷ ᠬᠣᠤᠷᠠᠳᠠᠢ ᠪᠢᠰᠢ", // Mongolian (Classic) (5) + " ᐊᓕᒍᖅ ᓂᕆᔭᕌᖓᒃᑯ ᓱᕋᙱᑦᑐᓐᓇᖅᑐᖓ", // Inuktitut + "ᤋᤠᤱᤛᤠ ᤕᤠᤰᤁᤢ ", // Limbu + "ᥕᥤᥒᥱ ᥘᥦᥝᥲ", // Tai Le + "ᦉᦱᧃ ᦃᦺᦟᦹ", // New Tai Le + "ᨆᨗᨕᨚ ᨅᨔᨒᨀ", // Buginese + "ᨠᩯᩬ ᨴᩱᨶᩣ ᨧᩥᨶᩬᩁᩣ", // Tai Tham + "ᬳᬸᬜ ᬳᬶᬦ ᬳᬸᬢ᭄ᬤᬸᬳ᭄ᬯᬸᬭ᭄", // Balinese + "ᮞᮀᮛᮥᮔ᮪ ᮞᮩᮞᮤ ᮊᮔ᮪ᮓᮥ", // Sundanese + "ᯀᯩᯖ᯲ᯔ ᯂᯞᯒ ᯊᯭᯉᯮ ᯂᯪᯒᯖᯮ ᯘᯮ", // Batak + "ᰗᰱᰠ ᰛᰥᰧ ᰛᰣᰵ ᰔᰠᰯ", // Lepcha + "ᱪᱮᱫᱮ ᱨᱩᱜ ᱢᱟᱦᱟᱭ ᱚᱲᱤᱠ", // Ol Chiki + "ⲙⲁⲣⲓⲁ ⲟⲩⲁⲣⲉⲟⲩ ⲡⲉⲗⲓⲛⲟⲛ", // Coptic + "ⴰⵎⵎⵉⵙⵏⴰ ⴰⵎⵍⵓⵍ ⵉⵎⴰⵍⵉⵏ", // Tifinagh http://tifinaghtools.eazypo.ca/ + "ꕉꕜꕮ ꔔꘋ ꖸ ꔰ ꗋꘋ ꕮꕨ ꔔꘋ ꖸ ꕎ ꕉꖸꕊ ꕴꖃ ꕃꔤꘂ ꗱ, ꕉꖷ ꗪꗡ ꔻꔤ ꗏꗒꗡ ꕎ ꗪ ꕉꖸꕊ ꖏꕎ", // Vai + "ꢪꢶꢥꢳ ꢥ꣄ꢳꢯꢳ", // Saurashtra + "ꤊꤢꤛꤢ꤭ ꤜꤟꤤ꤬ ꤞ꤮ꤣ ꤟꤢꤨ꤭ ꤊꤢ", // Kayah Li + " ꤰꥍꤲꥒ ꤿꥍꥎꥂ ꥆꤰ꥓ꤼꤽ ꤽꥍꤺꥏ ", // Rejang + "ꦲꦏ꧀ꦱꦫ ꦮꦾꦚ꧀ꦗꦤ ꦩꦒꦢꦁ ꦧꦸꦭꦏ꧀ꦭꦏ꧀", // Javanese + "ꨀꨇꩉ ꨌꩌ ꨤꨨꨪꩀ ꨎꨳꨯꨮꩆ ꨕꨴꨭꩅ ꨕꨴꨭꩈ ꨨꨕꨯꩌ ꨨꨣꨬ", // Cham + "ꪎꪳ ꪼꪕ ꪣꪱ꫁ꪙ ꪕꪴ", // Tai Viet + "ꯁꯤꯗꯤ ꯑꯩꯁꯨ ꯃꯩꯇꯩ ꯃꯌꯦꯛ ꯏꯕ ꯍꯩꯔꯅꯤ ꯕꯨ", // Meetei Mayek https://abhisanoujam.github.io/meitei_mayek/ + "ᏌᏃᏂ ᎣᏏᏲ ᏙᎯᏧ ᏣᎳᎩ ᎦᏬᏂᎯᏍᏗ ᏓᎾᏁᎵᏗᎲᎢ", // Cherokee https://language.cherokee.org/word-list/ and https://chren.cs.unc.edu/ + "Tsésǫʼ yishą́ągo bííníshghah dóó doo shił neezgai da.", // Navajo + "ᜋᜄᜇᜅ᜔ᜇᜅ᜔ ᜊᜓᜎᜃ᜔ᜃᜎᜃ᜔", // Tagalog + "میں کانچکھاسکتاہوںورمجھےتکلیفنہیںہوتی", // Urdu + "شيشهخوړلېشمهغه ما نه خوږوي", // Pashto + " .من می توانم بدونِ احساس درد شيشه بخورم", // Farsi / Persian(3) + "أنا قادر على أكل الزجاج و هذا لا يؤلمني. ", // Arabic + " إِنا إِىَ تَونَر غِلَاشِ كُمَ إِن غَمَا لَافِىَا", // Hausa + "Tôi có thể ăn thủy tinh mà không hại gì.", // Vietnamese (quốc ngữ) + " ខ្ញុំអាចញុំកញ្ចក់បាន ដោយគ្មានបញ្ហារ ", // Khmer + "Góa ē-tàng chia̍h po-lê mā bē tio̍h-siong", // Taiwanese + " 나는 유리를 먹을 수 있어요. 그래도 아프지 않아요", // Korean + "mi kakne le nu citka le blaci .iku'i le se go'i na xrani mi", // Lojban + " Ljœr ye caudran créneþ ý jor cẃran.", // Nórdicg + " Ég get etið gler án þess að meiða mig.", // Íslenska / Icelandic + " Mogę jeść szkło, i mi nie szkodzi.", // Polish + " Pot să mănânc sticlă și ea nu mă rănește.", // Romanian + " Я можу їсти шкло, й воно мені не пошкодить.", // Ukrainian + ]); + + for string in strings_containing_characters_in_supported_unicode_character_sets { + assert!(consists_of_supported_unicode_character_sets(string), "failed at {string}",); + } +} + +#[test] +fn test_consists_of_supported_unicode_character_sets_rejects_emojis() { + // Constructing a string that with the smiling face emoji + let string_containing_emojis = format_args!("John{}", '\u{1F600}').to_string(); + + assert!(!consists_of_supported_unicode_character_sets(&string_containing_emojis)); +} + +// Will load `CONFUSABLES` with all the confusables at build time. +// See build.rs +include!(concat!(env!("OUT_DIR"), "/confusables.rs")); + +#[test] +fn test_confusables_map_does_not_contain_keys_in_unsupported_character_sets() { + for key in CONFUSABLES.keys() { + assert!(consists_of_supported_unicode_character_sets(&key.to_string())); + } +} diff --git a/pallets/handles/src/handles-utils/src/types.rs b/pallets/handles/src/handles-utils/src/types.rs new file mode 100644 index 0000000000..91227a1e6d --- /dev/null +++ b/pallets/handles/src/handles-utils/src/types.rs @@ -0,0 +1,2 @@ +/// The handle suffix +pub type HandleSuffix = u16; diff --git a/pallets/handles/src/handles-utils/src/validator.rs b/pallets/handles/src/handles-utils/src/validator.rs new file mode 100644 index 0000000000..13c85d40a3 --- /dev/null +++ b/pallets/handles/src/handles-utils/src/validator.rs @@ -0,0 +1,82 @@ +//! # Handle Validator +//! +//! `handle_validator` provides a `HandleValidator` struct to determine the validity of a given +//! user handle. + +// We need the ALLOWED_UNICODE_CHARACTER_RANGES for the build +#[path = "../constants.rs"] +mod constants; +use constants::ALLOWED_UNICODE_CHARACTER_RANGES; + +/// Reserved words that cannot be used as the handle. +const RESERVED_WORDS: [&str; 8] = + ["adm1n", "every0ne", "a11", "adm1n1strat0r", "m0d", "m0derat0r", "here", "channe1"]; + +// We MUST have the RESERVED_WORDS constant as canonical. +// Cannot easily be canonicalized at compile time currently +#[test] +fn ensure_reserved_words_canonical() { + for &word in &RESERVED_WORDS { + let canonical = crate::convert_to_canonical(word); + assert_eq!( + word, canonical, + "The reserved word '{}' MUST match canonical form: '{}'", + word, canonical + ); + } +} + +/// Characters that cannot be used in the handle. +const BLOCKED_CHARACTERS: [char; 17] = + ['"', '#', '%', '(', ')', ',', '.', '/', ':', ';', '<', '>', '@', '\\', '`', '{', '}']; + +// We MUST have the BLOCKED_CHARACTERS constant sorted or we cannot use the faster `binary_search` function. +// Cannot easily be sorted at compile time currently +#[test] +fn ensure_sorted_blocked_characters() { + let mut sorted = BLOCKED_CHARACTERS; + sorted.sort(); + assert_eq!(BLOCKED_CHARACTERS, sorted); +} + +/// Determines whether a given canonicalized string is a reserved handle in the current context. +/// +/// # Arguments +/// +/// * `input_str` - A string slice representing the canonicalized handle to check. +/// +/// # Returns +/// +/// A boolean value indicating whether the string is a reserved handle (`true`) or not (`false`). +pub fn is_reserved_canonical_handle(input_str: &str) -> bool { + RESERVED_WORDS.contains(&input_str) +} + +/// Checks if the given string contains any blocked characters. +/// +/// # Arguments +/// +/// * `input_str` - A string slice to check for blocked characters.\ +/// +/// # Returns +/// +/// A boolean value indicating whether the string contains any blocked characters (`true`) or not (`false`). +pub fn contains_blocked_characters(input_str: &str) -> bool { + input_str.chars().any(|c| BLOCKED_CHARACTERS.binary_search(&c).is_ok()) +} + +/// Checks that the given string contains characters within the ranges of supported +/// unicode character sets. +/// +/// # Arguments +/// +/// * `input_str` - A string slice to check for characters within the allowed unicode character sets.. +/// +/// # Returns +/// +/// A boolean value indicating whether the string contains characters within the allowed unicode character sets (`true`) or not (`false`). +pub fn consists_of_supported_unicode_character_sets(input_str: &str) -> bool { + input_str + .chars() + .all(|c| ALLOWED_UNICODE_CHARACTER_RANGES.iter().any(|range| range.contains(&(c as u16)))) +} diff --git a/pallets/handles/src/handles_signed_extension.rs b/pallets/handles/src/handles_signed_extension.rs new file mode 100644 index 0000000000..d244d9df1b --- /dev/null +++ b/pallets/handles/src/handles_signed_extension.rs @@ -0,0 +1,135 @@ +//! Substrate Signed Extension for validating requests to the handles pallet +use crate::{Call, Config, Error, MSAIdToDisplayName}; +use common_primitives::msa::MsaValidator; +use core::marker::PhantomData; +use frame_support::{ + dispatch::DispatchInfo, ensure, pallet_prelude::ValidTransaction, traits::IsSubType, + unsigned::UnknownTransaction, +}; +use parity_scale_codec::{Decode, DecodeWithMemTracking, Encode}; +use scale_info::TypeInfo; +#[allow(deprecated)] +use sp_runtime::{ + traits::{DispatchInfoOf, Dispatchable, SignedExtension}, + transaction_validity::{InvalidTransaction, TransactionValidity, TransactionValidityError}, + DispatchError, ModuleError, +}; +/// The SignedExtension trait is implemented on CheckFreeExtrinsicUse to validate the request. The +/// purpose of this is to ensure that the retire_handle extrinsic cannot be +/// repeatedly called to flood the network. +#[derive(Encode, Decode, DecodeWithMemTracking, Clone, Eq, PartialEq, TypeInfo)] +#[scale_info(skip_type_params(T))] +pub struct HandlesSignedExtension(PhantomData); + +impl HandlesSignedExtension { + /// Create new `SignedExtension`. + pub fn new() -> Self { + Self(core::marker::PhantomData) + } + + /// Validates the following criteria for the retire_handle() extrinsic: + /// + /// * The delegator must already have a MSA id + /// * The MSA must already have a handle associated with it + /// + /// Returns a `ValidTransaction` or wrapped `pallet::Error` + /// + /// # Errors (as u8 wrapped by `InvalidTransaction::Custom`) + /// * [`Error::InvalidMessageSourceAccount`] + /// * [`Error::MSAHandleDoesNotExist`] + fn validate_retire_handle(delegator_key: &T::AccountId) -> TransactionValidity { + const TAG_PREFIX: &str = "HandlesRetireHandle"; + + // Validation: The delegator must already have a MSA id + let delegator_msa_id = + T::MsaInfoProvider::ensure_valid_msa_key(delegator_key).map_err(map_dispatch_error)?; + // Validation: The MSA must already have a handle associated with it + let handle_from_state = MSAIdToDisplayName::::try_get(delegator_msa_id) + .map_err(|_| UnknownTransaction::CannotLookup)?; + let expiration = handle_from_state.1; + let current_block = frame_system::Pallet::::block_number(); + + let is_past_min_lifetime = current_block >= expiration; + ensure!( + is_past_min_lifetime, + map_dispatch_error(DispatchError::Other( + Error::::HandleWithinMortalityPeriod.into() + )) + ); + + ValidTransaction::with_tag_prefix(TAG_PREFIX).build() + } +} + +impl core::fmt::Debug for HandlesSignedExtension { + #[cfg(feature = "std")] + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + write!(f, "HandlesSignedExtension<{:?}>", self.0) + } + #[cfg(not(feature = "std"))] + fn fmt(&self, _: &mut core::fmt::Formatter) -> core::fmt::Result { + Ok(()) + } +} + +/// Map a module DispatchError to an InvalidTransaction::Custom error +pub fn map_dispatch_error(err: DispatchError) -> InvalidTransaction { + InvalidTransaction::Custom(match err { + DispatchError::Module(ModuleError { error, .. }) => error[0], + _ => 255u8, + }) +} + +#[allow(deprecated)] +impl SignedExtension for HandlesSignedExtension +where + T::RuntimeCall: Dispatchable + IsSubType>, +{ + type AccountId = T::AccountId; + type Call = T::RuntimeCall; + type AdditionalSigned = (); + type Pre = (); + const IDENTIFIER: &'static str = "HandlesSignedExtension"; + + /// Additional signed + fn additional_signed(&self) -> core::result::Result<(), TransactionValidityError> { + Ok(()) + } + + /// Pre dispatch + #[allow(deprecated)] + fn pre_dispatch( + self, + who: &Self::AccountId, + call: &Self::Call, + info: &DispatchInfoOf, + len: usize, + ) -> Result { + self.validate(who, call, info, len).map(|_| ()) + } + + /// Frequently called by the transaction queue to validate all free Handles extrinsics: + /// Returns a `ValidTransaction` or wrapped [`TransactionValidityError`] + /// * retire_handle + /// + /// Validate functions for the above MUST prevent errors in the extrinsic logic to prevent spam. + /// + /// Arguments: + /// who: AccountId calling the extrinsic + /// call: The pallet extrinsic being called + /// unused: _info, _len + /// + #[allow(deprecated)] + fn validate( + &self, + who: &Self::AccountId, + call: &Self::Call, + _info: &DispatchInfoOf, + _len: usize, + ) -> TransactionValidity { + match call.is_sub_type() { + Some(Call::retire_handle {}) => Self::validate_retire_handle(who), + _ => Ok(Default::default()), + } + } +} diff --git a/pallets/handles/src/lib.rs b/pallets/handles/src/lib.rs new file mode 100644 index 0000000000..9b6af3eb7a --- /dev/null +++ b/pallets/handles/src/lib.rs @@ -0,0 +1,830 @@ +//! Unique human-readable strings for MSAs +//! +//! ## Quick Links +//! - [Configuration: `Config`](Config) +//! - [Extrinsics: `Call`](Call) +//! - [Runtime API: `HandlesRuntimeApi`](../pallet_handles_runtime_api/trait.HandlesRuntimeApi.html) +//! - [Custom RPC API: `HandlesApiServer`](../pallet_handles_rpc/trait.HandlesApiServer.html) +//! - [Event Enum: `Event`](Event) +//! - [Error Enum: `Error`](Error) +#![doc = include_str!("../README.md")] +//! +//! ## Shuffled Sequences +//! +//! To limit the human value of low or particular suffixes, the pallet uses a shuffled sequence to choose a semi-randon suffix for a specific canonical handle string. +//! The shuffle only requires storage of the current index, same as an ordered suffix system. +//! The computational cost is greater the larger the index grows as it is lazy evaluation of the Rand32 given a deterministic seed generated from the canonical handle string. +//! See more details at [`handles_utils::suffix`] +//! +// Substrate macros are tripping the clippy::expect_used lint. +#![allow(clippy::expect_used)] +#![cfg_attr(not(feature = "std"), no_std)] +// Strong Documentation Lints +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + missing_docs +)] +extern crate alloc; + +use alloc::{string::String, vec}; + +#[cfg(feature = "runtime-benchmarks")] +mod benchmarking; + +use handles_utils::{ + converter::{convert_to_canonical, split_display_name, HANDLE_DELIMITER}, + suffix::generate_unique_suffixes, + validator::{ + consists_of_supported_unicode_character_sets, contains_blocked_characters, + is_reserved_canonical_handle, + }, +}; + +#[cfg(test)] +mod tests; + +use alloc::vec::Vec; +#[cfg(feature = "runtime-benchmarks")] +use common_primitives::benchmarks::MsaBenchmarkHelper; +use common_primitives::{ + handles::*, + msa::{MessageSourceId, MsaLookup, MsaValidator}, + node::EIP712Encode, +}; +use frame_support::{dispatch::DispatchResult, ensure, pallet_prelude::*, traits::Get}; +use frame_system::pallet_prelude::*; +use numtoa::*; +pub use pallet::*; +use sp_core::crypto::AccountId32; +use sp_runtime::{traits::Convert, DispatchError, MultiSignature}; + +pub mod handles_signed_extension; + +use common_runtime::signature::check_signature; + +pub mod weights; +pub use weights::*; + +impl HandleProvider for Pallet { + fn get_handle_for_msa(msa_id: MessageSourceId) -> Option { + Self::get_handle_for_msa(msa_id) + } +} + +#[frame_support::pallet] +pub mod pallet { + + use handles_utils::trim_and_collapse_whitespace; + + use super::*; + #[pallet::config] + pub trait Config: frame_system::Config { + /// The overarching event type. + type RuntimeEvent: From> + IsType<::RuntimeEvent>; + + /// Weight information for extrinsics in this pallet. + type WeightInfo: WeightInfo; + + /// AccountId truncated to 32 bytes + type ConvertIntoAccountId32: Convert; + + /// A type that will supply MSA related information + type MsaInfoProvider: MsaLookup + MsaValidator; + + /// The minimum suffix value + #[pallet::constant] + type HandleSuffixMin: Get; + + /// The maximum suffix value + #[pallet::constant] + type HandleSuffixMax: Get; + + /// The number of blocks before a signature can be ejected from the PayloadSignatureRegistryList + #[pallet::constant] + type MortalityWindowSize: Get; + + #[cfg(feature = "runtime-benchmarks")] + /// A set of helper functions for benchmarking. + type MsaBenchmarkHelper: MsaBenchmarkHelper; + } + + // Storage + #[pallet::pallet] + pub struct Pallet(_); + + /// - Keys: k1: `CanonicalBase`, k2: `HandleSuffix` + /// - Value: `MessageSourceId` + #[pallet::storage] + pub type CanonicalBaseHandleAndSuffixToMSAId = StorageDoubleMap< + _, + Blake2_128Concat, + CanonicalBase, + Twox64Concat, + HandleSuffix, + MessageSourceId, + OptionQuery, + >; + + /// - Key: `MessageSourceId` + /// - Value: `DisplayHandle` + #[pallet::storage] + pub type MSAIdToDisplayName = StorageMap< + _, + Twox64Concat, + MessageSourceId, + (DisplayHandle, BlockNumberFor), + OptionQuery, + >; + + /// - Key: `CanonicalBase` + /// - Value: (Sequence Index, Suffix Min) + /// - Sequence Index: The index of the next suffix to be used for this handle + /// - Suffix Min: The minimum suffix value for this handle + #[pallet::storage] + pub type CanonicalBaseHandleToSuffixIndex = StorageMap< + _, + Blake2_128Concat, + CanonicalBase, + (SequenceIndex, SuffixRangeType), + OptionQuery, + >; + + #[derive(PartialEq, Eq)] // for testing + #[pallet::error] + pub enum Error { + /// Invalid handle encoding (should be UTF-8) + InvalidHandleEncoding, + /// Invalid handle byte length + InvalidHandleByteLength, + /// Invalid handle character length + InvalidHandleCharacterLength, + /// The handle name is reserved for chain use only + HandleIsNotAllowed, + /// The handle contains characters that are not allowed + HandleContainsBlockedCharacters, + /// The handle does not contain characters in the supported ranges of unicode characters + HandleDoesNotConsistOfSupportedCharacterSets, + /// Suffixes exhausted + SuffixesExhausted, + /// Invalid MSA + InvalidMessageSourceAccount, + /// Cryptographic signature failed verification + InvalidSignature, + /// The MSA already has a handle + MSAHandleAlreadyExists, + /// The MSA does not have a handle needed to retire it. + MSAHandleDoesNotExist, + /// The submitted proof has expired; the current block is less the expiration block + ProofHasExpired, + /// The submitted proof expiration block is too far in the future + ProofNotYetValid, + /// The handle is still in mortaility window + HandleWithinMortalityPeriod, + /// The handle is invalid + InvalidHandle, + } + + #[pallet::event] + #[pallet::generate_deposit(pub (super) fn deposit_event)] + pub enum Event { + /// Deposited when a handle is claimed. [MSA id, display handle in UTF-8 bytes] + HandleClaimed { + /// MSA id of handle owner + msa_id: MessageSourceId, + /// UTF-8 string in bytes of the display handle + handle: Vec, + }, + /// Deposited when a handle is retired. [MSA id, display handle in UTF-8 bytes] + HandleRetired { + /// MSA id of handle owner + msa_id: MessageSourceId, + /// UTF-8 string in bytes + handle: Vec, + }, + } + + impl Pallet { + /// Gets the next suffix index for a canonical base. + /// + /// This function takes a canonical base as input and returns the next available + /// suffix index for that handle. If no current suffix index is found for the handle, + /// it starts from 0. If a current suffix index is found, it increments it by 1 to + /// get the next suffix index. If the increment operation fails due to overflow, it + /// returns an error indicating that the suffixes are exhausted. + /// + /// # Arguments + /// + /// * `canonical_base` - The canonical base to get the next suffix index for. + /// + /// # Returns + /// + /// * `Ok(SequenceIndex)` - The next suffix index for the canonical base. + /// * `Err(DispatchError)` - The suffixes are exhausted. + pub fn get_next_suffix_index_for_canonical_handle( + canonical_base: CanonicalBase, + ) -> Result { + let next: SequenceIndex; + match CanonicalBaseHandleToSuffixIndex::::get(canonical_base) { + None => { + next = 0; + }, + Some((current, suffix_min)) => { + let current_suffix_min = T::HandleSuffixMin::get(); + // if saved suffix min has changed, reset the suffix index + if current_suffix_min != suffix_min { + next = 0; + } else { + next = current.checked_add(1).ok_or(Error::::SuffixesExhausted)?; + } + }, + } + + Ok(next) + } + + /// Verifies that the signature is not expired. + /// + /// This function takes a signature expiration block as input and verifies that + /// the signature is not expired. It returns an error if the signature is expired. + /// + /// # Arguments + /// + /// * `signature_expires_at` - The block number at which the signature expires. + /// + /// # Returns + /// + /// * `Ok(())` - The signature is not expired. + /// * `Err(DispatchError)` - The signature is expired. + pub fn verify_signature_mortality( + signature_expires_at: BlockNumberFor, + ) -> DispatchResult { + let current_block = frame_system::Pallet::::block_number(); + + let mortality_period = Self::mortality_block_limit(current_block); + ensure!(mortality_period > signature_expires_at, Error::::ProofNotYetValid); + ensure!(current_block < signature_expires_at, Error::::ProofHasExpired); + Ok(()) + } + + /// Verifies the signature of a given payload, using the provided `signature` + /// and `signer` information. + /// + /// # Arguments + /// + /// * `signature` - The `MultiSignature` to verify against the payload. + /// * `signer` - The `T::AccountId` of the signer that signed the payload. + /// * `payload` - The payload to verify the signature against. + /// + /// # Errors + /// * [`Error::InvalidSignature`] + pub fn verify_signed_payload

( + signature: &MultiSignature, + signer: &T::AccountId, + payload: &P, + ) -> DispatchResult + where + P: Encode + EIP712Encode, + { + let key = T::ConvertIntoAccountId32::convert(signer.clone()); + + ensure!(check_signature(signature, key, payload), Error::::InvalidSignature); + + Ok(()) + } + + /// Verifies max user handle size in bytes to address potential panic condition + /// + /// # Arguments + /// + /// * `handle` - The user handle. + /// + /// # Errors + /// * [`Error::InvalidHandleByteLength`] + pub fn verify_max_handle_byte_length(handle: Vec) -> DispatchResult { + ensure!(handle.len() as u32 <= HANDLE_BYTES_MAX, Error::::InvalidHandleByteLength); + Ok(()) + } + + /// The furthest in the future a mortality_block value is allowed + /// to be for current_block + /// This is calculated to be past the risk of a replay attack + fn mortality_block_limit(current_block: BlockNumberFor) -> BlockNumberFor { + let mortality_size = T::MortalityWindowSize::get(); + current_block + BlockNumberFor::::from(mortality_size) + } + /// Generates a suffix for a canonical base, using the provided `canonical_base` + /// and `cursor` information. + /// + /// # Arguments + /// + /// * `canonical_base` - The canonical base to generate a suffix for. + /// * `cursor` - The cursor position in the sequence of suffixes to use for generation. + /// + /// # Returns + /// + /// The generated suffix as a `u16`. + /// + pub fn generate_suffix_for_canonical_handle( + canonical_base: &str, + cursor: usize, + ) -> Result { + let mut lazy_suffix_sequence = generate_unique_suffixes( + T::HandleSuffixMin::get(), + T::HandleSuffixMax::get(), + canonical_base, + ); + match lazy_suffix_sequence.nth(cursor) { + Some(suffix) => Ok(suffix), + None => Err(Error::::SuffixesExhausted.into()), + } + } + } + + #[pallet::call] + impl Pallet { + /// Claims a handle for a caller's MSA (Message Source Account) based on the provided payload. + /// This function performs several validations before claiming the handle, including checking + /// the size of the base_handle, ensuring the caller have valid MSA keys, + /// verifying the payload signature, and finally calling the internal `do_claim_handle` function + /// to claim the handle. + /// + /// # Arguments + /// + /// * `origin` - The origin of the caller. + /// * `msa_owner_key` - The public key of the MSA owner. + /// * `proof` - The multi-signature proof for the payload. + /// * `payload` - The payload containing the information needed to claim a new handle. + /// + /// # Errors + /// + /// This function may return an error as part of `DispatchResult` if any of the following + /// validations fail: + /// + /// * [`Error::InvalidHandleByteLength`] - The base_handle size exceeds the maximum allowed size. + /// * [`Error::InvalidMessageSourceAccount`] - The caller does not have a valid `MessageSourceId`. + /// * [`Error::InvalidSignature`] - The payload signature verification fails. + /// + /// # Events + /// * [`Event::HandleClaimed`] + /// + #[pallet::call_index(0)] + #[pallet::weight(T::WeightInfo::claim_handle(payload.base_handle.len() as u32))] + pub fn claim_handle( + origin: OriginFor, + msa_owner_key: T::AccountId, + proof: MultiSignature, + payload: ClaimHandlePayload>, + ) -> DispatchResult { + let _ = ensure_signed(origin)?; + + // Validation: Check for base_handle size to address potential panic condition + Self::verify_max_handle_byte_length(payload.base_handle.clone())?; + + // Validation: caller must already have a MSA id + let msa_id = T::MsaInfoProvider::ensure_valid_msa_key(&msa_owner_key) + .map_err(|_| Error::::InvalidMessageSourceAccount)?; + + // Validation: The signature is within the mortality window + Self::verify_signature_mortality(payload.expiration)?; + + // Validation: Verify the payload was signed + Self::verify_signed_payload(&proof, &msa_owner_key, &payload)?; + + let display_handle = Self::do_claim_handle(msa_id, payload)?; + + Self::deposit_event(Event::HandleClaimed { msa_id, handle: display_handle.clone() }); + Ok(()) + } + + /// Retire a handle for a given `DisplayHandle` owner. + /// + /// # Arguments + /// + /// * `origin` - The origin of the call. + /// + /// # Errors + /// + /// This function can return the following errors: + /// + /// * `InvalidHandleByteLength` - If the length of the `payload.display_handle` exceeds the maximum allowed size. + /// * `InvalidMessageSourceAccount` - If caller of this extrinsic does not have a valid MSA (Message Source Account) ID. + /// + /// # Events + /// * [`Event::HandleRetired`] + /// + #[pallet::call_index(1)] + #[pallet::weight((T::WeightInfo::retire_handle(), DispatchClass::Normal, Pays::No))] + pub fn retire_handle(origin: OriginFor) -> DispatchResult { + let msa_owner_key = ensure_signed(origin)?; + + // Validation: The caller must already have a MSA id + let msa_id = T::MsaInfoProvider::ensure_valid_msa_key(&msa_owner_key) + .map_err(|_| Error::::InvalidMessageSourceAccount)?; + + let display_handle: Vec = Self::do_retire_handle(msa_id)?; + + Self::deposit_event(Event::HandleRetired { msa_id, handle: display_handle }); + Ok(()) + } + + /// Changes the handle for a caller's MSA (Message Source Account) based on the provided payload. + /// This function performs several validations before claiming the handle, including checking + /// the size of the base_handle, ensuring the caller has valid MSA keys, + /// verifying the payload signature, and finally calling the internal `do_retire_handle` and `do_claim_handle` functions + /// to retire the current handle and claim the new one. + /// + /// # Arguments + /// + /// * `origin` - The origin of the caller. + /// * `msa_owner_key` - The public key of the MSA owner. + /// * `proof` - The multi-signature proof for the payload. + /// * `payload` - The payload containing the information needed to change an existing handle. + /// + /// # Errors + /// + /// This function may return an error as part of `DispatchResult` if any of the following + /// validations fail: + /// + /// * [`Error::InvalidHandleByteLength`] - The base_handle size exceeds the maximum allowed size. + /// * [`Error::InvalidMessageSourceAccount`] - The caller does not have a valid `MessageSourceId`. + /// * [`Error::InvalidSignature`] - The payload signature verification fails. + /// + /// # Events + /// * [`Event::HandleRetired`] + /// * [`Event::HandleClaimed`] + /// + #[pallet::call_index(2)] + #[pallet::weight(T::WeightInfo::change_handle(payload.base_handle.len() as u32))] + pub fn change_handle( + origin: OriginFor, + msa_owner_key: T::AccountId, + proof: MultiSignature, + payload: ClaimHandlePayload>, + ) -> DispatchResult { + let _ = ensure_signed(origin)?; + + // Validation: Check for base_handle size to address potential panic condition + Self::verify_max_handle_byte_length(payload.base_handle.clone())?; + + // Validation: caller must already have a MSA id + let msa_id = T::MsaInfoProvider::ensure_valid_msa_key(&msa_owner_key) + .map_err(|_| Error::::InvalidMessageSourceAccount)?; + + // Validation: The signature is within the mortality window + Self::verify_signature_mortality(payload.expiration)?; + + // Validation: Verify the payload was signed + Self::verify_signed_payload(&proof, &msa_owner_key, &payload)?; + + // Get existing handle to retire + MSAIdToDisplayName::::get(msa_id).ok_or(Error::::MSAHandleDoesNotExist)?; + + // Retire old handle + let old_display_handle: Vec = Self::do_retire_handle(msa_id)?; + Self::deposit_event(Event::HandleRetired { msa_id, handle: old_display_handle }); + + let display_handle = Self::do_claim_handle(msa_id, payload.clone())?; + + Self::deposit_event(Event::HandleClaimed { msa_id, handle: display_handle.clone() }); + + Ok(()) + } + } + + impl Pallet { + /// Retrieves a handle for a given MSA (MessageSourceId). + /// + /// # Arguments + /// + /// * `msa_id` - The MSA ID to retrieve the handle for. + /// + /// # Returns + /// + /// * `Option` - The handle response if the MSA ID is valid. + /// + pub fn get_handle_for_msa(msa_id: MessageSourceId) -> Option { + let display_handle = match MSAIdToDisplayName::::get(msa_id) { + Some((handle, _)) => handle, + _ => return None, + }; + // convert to string + let display_handle_str = core::str::from_utf8(&display_handle) + .map_err(|_| Error::::InvalidHandleEncoding) + .ok()?; + + let (base_handle_str, suffix) = split_display_name(display_handle_str)?; + let base_handle = base_handle_str.as_bytes().to_vec(); + // Convert base handle into a canonical base + let (_, canonical_base) = + Self::get_canonical_string_vec_from_base_handle(&base_handle_str); + Some(HandleResponse { base_handle, suffix, canonical_base: canonical_base.into() }) + } + + /// Get the next available suffixes for a given handle. + /// + /// This function takes a `Vec` handle and generates the next available + /// suffixes for that handle. The number of suffixes to generate is determined + /// by the `count` parameter, which is of type `u16`. + /// + /// # Arguments + /// + /// * `handle` - The handle to generate the next available suffixes for. + /// * `count` - The number of suffixes to generate. + /// + /// # Returns + /// + /// * `PresumptiveSuffixesResponse` - The response containing the next available suffixes. + /// + pub fn get_next_suffixes( + base_handle: BaseHandle, + count: u16, + ) -> PresumptiveSuffixesResponse { + let base_handle_str = core::str::from_utf8(&base_handle).unwrap_or_default(); + + // Convert base handle into a canonical base + let (canonical_handle_str, canonical_base) = + Self::get_canonical_string_vec_from_base_handle(base_handle_str); + + let suffix_index = + Self::get_next_suffix_index_for_canonical_handle(canonical_base.clone()) + .unwrap_or_default(); + + let lazy_suffix_sequence = generate_unique_suffixes( + T::HandleSuffixMin::get(), + T::HandleSuffixMax::get(), + &canonical_handle_str, + ) + .enumerate(); + + let mut suffixes: Vec = vec![]; + + for (i, suffix) in lazy_suffix_sequence { + if i >= suffix_index as usize && i < (suffix_index as usize + count as usize) { + suffixes.push(suffix); + } + if suffixes.len() == count as usize { + break; + } + } + PresumptiveSuffixesResponse { base_handle: base_handle.into(), suffixes } + } + + /// Check a base handle for validity and collect information on it + /// + /// This function takes a `Vec` handle and checks to make sure it is: + /// - Valid + /// - Has suffixes remaining + /// + /// It also returns the original input as well as the canonical version + /// + /// # Arguments + /// + /// * `handle` - The handle to check. + /// + /// # Returns + /// + /// * `CheckHandleResponse` + /// + pub fn check_handle(base_handle: Vec) -> CheckHandleResponse { + let valid = Self::validate_handle(base_handle.to_vec()); + + if !valid { + return CheckHandleResponse { base_handle, ..Default::default() }; + } + + let base_handle_str = core::str::from_utf8(&base_handle).unwrap_or_default(); + + let base_handle_trimmed = trim_and_collapse_whitespace(base_handle_str); + + // Convert base handle into a canonical base + let (_canonical_handle_str, canonical_base) = + Self::get_canonical_string_vec_from_base_handle(base_handle_str); + + let suffix_index = + Self::get_next_suffix_index_for_canonical_handle(canonical_base.clone()) + .unwrap_or_default(); + + let suffixes_available = suffix_index < T::HandleSuffixMax::get(); + + CheckHandleResponse { + base_handle: base_handle_trimmed.into(), + suffix_index, + suffixes_available, + valid, + canonical_base: canonical_base.into(), + } + } + + /// Retrieve a `MessageSourceId` for a given handle. + /// + /// # Arguments + /// + /// * `display_handle` - The full display handle to retrieve the `MessageSourceId` for. + /// + /// # Returns + /// + /// * `Option` - The `MessageSourceId` if the handle is valid. + /// + pub fn get_msa_id_for_handle(display_handle: DisplayHandle) -> Option { + let display_handle_str = core::str::from_utf8(&display_handle).unwrap_or_default(); + let (base_handle_str, suffix) = split_display_name(display_handle_str)?; + // Convert base handle into a canonical base + let (_, canonical_base) = + Self::get_canonical_string_vec_from_base_handle(&base_handle_str); + CanonicalBaseHandleAndSuffixToMSAId::::get(canonical_base, suffix) + } + + /// Claims a handle for a given MSA (MessageSourceId) by validating and storing the base handle, + /// generating a canonical base, generating a suffix, and composing the full display handle. + /// + /// # Arguments + /// + /// * `msa_id` - The MSA (MessageSourceId) to claim the handle for. + /// * `payload` - The payload containing the base handle to claim. + /// + /// # Returns + /// + /// * `DisplayHandle` - The full display handle. + /// + pub fn do_claim_handle( + msa_id: MessageSourceId, + payload: ClaimHandlePayload>, + ) -> Result, DispatchError> { + // Validation: The MSA must not already have a handle associated with it + ensure!( + MSAIdToDisplayName::::get(msa_id).is_none(), + Error::::MSAHandleAlreadyExists + ); + + let base_handle_str = Self::validate_base_handle(payload.base_handle)?; + + // Convert base handle into a canonical base + let (canonical_handle_str, canonical_base) = + Self::get_canonical_string_vec_from_base_handle(&base_handle_str); + + Self::validate_canonical_handle(&canonical_handle_str)?; + + // Generate suffix from the next available index into the suffix sequence + let suffix_sequence_index = + Self::get_next_suffix_index_for_canonical_handle(canonical_base.clone())?; + + let suffix = Self::generate_suffix_for_canonical_handle( + &canonical_handle_str, + suffix_sequence_index as usize, + )?; + + let display_handle = Self::build_full_display_handle(&base_handle_str, suffix)?; + + // Store canonical base and suffix to MSA id + CanonicalBaseHandleAndSuffixToMSAId::::insert( + canonical_base.clone(), + suffix, + msa_id, + ); + // Store canonical base to suffix sequence index + CanonicalBaseHandleToSuffixIndex::::set( + canonical_base.clone(), + Some((suffix_sequence_index, T::HandleSuffixMin::get())), + ); + + // Store the full display handle to MSA id + MSAIdToDisplayName::::insert(msa_id, (display_handle.clone(), payload.expiration)); + + Ok(display_handle.into_inner()) + } + + /// Checks that handle base string is valid before canonicalization + fn validate_base_handle(base_handle: Vec) -> Result { + // Convert base handle to UTF-8 string slice while validating. + let base_handle_str = + String::from_utf8(base_handle).map_err(|_| Error::::InvalidHandleEncoding)?; + + // Validation: The handle length must be valid. + // Note: the count() can panic but won't because the base_handle byte length is already checked + let len = base_handle_str.chars().count() as u32; + + // Validation: `BaseHandle` character length must be within range + ensure!( + (HANDLE_CHARS_MIN..=HANDLE_CHARS_MAX).contains(&len), + Error::::InvalidHandleCharacterLength + ); + + ensure!( + !contains_blocked_characters(&base_handle_str), + Error::::HandleContainsBlockedCharacters + ); + Ok(base_handle_str) + } + + /// Validate that the canonical handle: + /// - contains characters ONLY in supported ranges + /// - Does NOT contain reserved words + /// - Is between (inclusive) `HANDLE_CHARS_MIN` and `HANDLE_CHARS_MAX` + fn validate_canonical_handle(canonical_base_handle_str: &str) -> DispatchResult { + // Validation: The handle must consist of characters not containing reserved words or blocked characters + ensure!( + consists_of_supported_unicode_character_sets(canonical_base_handle_str), + Error::::HandleDoesNotConsistOfSupportedCharacterSets + ); + ensure!( + !is_reserved_canonical_handle(canonical_base_handle_str), + Error::::HandleIsNotAllowed + ); + + let len = canonical_base_handle_str.chars().count() as u32; + + // Validation: `Canonical` character length must be within range + ensure!( + (HANDLE_CHARS_MIN..=HANDLE_CHARS_MAX).contains(&len), + Error::::InvalidHandleCharacterLength + ); + + Ok(()) + } + + /// Creates a full display handle by combining a base handle string with supplied suffix + /// + /// # Arguments + /// + /// * `base_handle_str` - The base handle string. + /// * `suffix` - The numeric suffix . + /// + /// # Returns + /// + /// * `DisplayHandle` - The full display handle. + /// + pub fn build_full_display_handle( + base_handle: &str, + suffix: HandleSuffix, + ) -> Result { + let base_handle_trimmed = trim_and_collapse_whitespace(base_handle); + let mut full_handle_vec: Vec = vec![]; + full_handle_vec.extend(base_handle_trimmed.as_bytes()); + full_handle_vec.push(HANDLE_DELIMITER as u8); // The delimiter + let mut buff = [0u8; SUFFIX_MAX_DIGITS]; + full_handle_vec.extend(suffix.numtoa(10, &mut buff)); + let res = full_handle_vec.try_into().map_err(|_| Error::::InvalidHandleEncoding)?; + Ok(res) + } + + /// Retires a handle associated with a given MessageSourceId (MSA) in the dispatch module. + /// + /// # Arguments + /// + /// * `msa_id` - The MSA (MessageSourceId) to retire the handle for. + /// + /// # Returns + /// + /// * `DispatchResult` - Returns `Ok` if the handle was successfully retired. + pub fn do_retire_handle(msa_id: MessageSourceId) -> Result, DispatchError> { + // Validation: The MSA must already have a handle associated with it + let handle_from_state = + MSAIdToDisplayName::::get(msa_id).ok_or(Error::::MSAHandleDoesNotExist)?; + let display_name_handle = handle_from_state.0; + let display_name_str = core::str::from_utf8(&display_name_handle) + .map_err(|_| Error::::InvalidHandleEncoding)?; + + let (base_handle_str, suffix_num) = + split_display_name(display_name_str).ok_or(Error::::InvalidHandle)?; + + // Convert base handle into a canonical base + let (_, canonical_base) = + Self::get_canonical_string_vec_from_base_handle(&base_handle_str); + + // Remove handle from storage but not from CanonicalBaseHandleToSuffixIndex because retired handles can't be reused + MSAIdToDisplayName::::remove(msa_id); + CanonicalBaseHandleAndSuffixToMSAId::::remove(canonical_base, suffix_num); + + Ok(display_name_str.as_bytes().to_vec()) + } + + /// Checks whether the supplied handle passes all the checks performed by a + /// claim_handle call. + /// # Returns + /// * true if it is valid or false if invalid + pub fn validate_handle(handle: Vec) -> bool { + match Self::validate_base_handle(handle) { + Ok(base_handle_str) => { + // Convert base handle into a canonical base + let (canonical_handle_str, _) = + Self::get_canonical_string_vec_from_base_handle(&base_handle_str); + + Self::validate_canonical_handle(&canonical_handle_str).is_ok() + }, + _ => false, + } + } + + /// Converts a base handle to a canonical base. + fn get_canonical_string_vec_from_base_handle( + base_handle_str: &str, + ) -> (String, CanonicalBase) { + let canonical_handle_str = convert_to_canonical(base_handle_str); + let canonical_handle_vec = canonical_handle_str.as_bytes().to_vec(); + let canonical_base: CanonicalBase = canonical_handle_vec.try_into().unwrap_or_default(); + (canonical_handle_str, canonical_base) + } + } +} diff --git a/pallets/handles/src/rpc/Cargo.toml b/pallets/handles/src/rpc/Cargo.toml new file mode 100644 index 0000000000..dc3ca3a5a2 --- /dev/null +++ b/pallets/handles/src/rpc/Cargo.toml @@ -0,0 +1,41 @@ +[package] +name = "pallet-handles-rpc" +version = "0.0.0" +description = "A package that adds RPC to Handles pallet" +authors = ["Frequency"] +license = "Apache-2.0" +publish = false +homepage = "https://frequency.xyz" +repository = "https://github.com/frequency-chain/frequency/" +edition = "2021" + +[dependencies] +jsonrpsee = { workspace = true, features = ["client-core", "server", "macros"] } +rayon = { workspace = true } +# Frequency crates +pallet-handles-runtime-api = { default-features = false, path = "../runtime-api" } +common-primitives = { default-features = false, path = "../../../../common/primitives" } +common-helpers = { default-features = false, path = "../../../../common/helpers" } +# Substrate crates +sp-api = { workspace = true } +sp-blockchain = { workspace = true } +sp-runtime = { workspace = true } +frame-support = { workspace = true } + +[dev-dependencies] +tokio = { workspace = true, features = ["macros", "time", "parking_lot"] } +sc-client-api = { workspace = true } + +[features] +default = ["std"] +std = [ + 'sp-api/std', + 'sp-runtime/std', + "frame-support/std", + 'pallet-handles-runtime-api/std', + 'common-primitives/std', + 'common-helpers/std', +] + +[lints] +workspace = true diff --git a/pallets/handles/src/rpc/src/lib.rs b/pallets/handles/src/rpc/src/lib.rs new file mode 100644 index 0000000000..8bc7087955 --- /dev/null +++ b/pallets/handles/src/rpc/src/lib.rs @@ -0,0 +1,136 @@ +// Strong Documentation Lints +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + missing_docs +)] + +//! Custom APIs for [User-Handles](../pallet_handles/index.html) + +use common_helpers::rpc::map_rpc_result; +use common_primitives::{ + handles::{ + BaseHandle, DisplayHandle, HandleResponse, PresumptiveSuffixesResponse, + DEFAULT_SUFFIX_COUNT, MAX_SUFFIXES_COUNT, + }, + msa::MessageSourceId, +}; +use jsonrpsee::{ + core::{async_trait, RpcResult}, + proc_macros::rpc, + types::{error::ErrorObjectOwned, ErrorObject}, +}; +use pallet_handles_runtime_api::HandlesRuntimeApi; +use sp_api::ProvideRuntimeApi; +use sp_blockchain::HeaderBackend; +use sp_runtime::traits::Block as BlockT; +use std::sync::Arc; + +#[cfg(test)] +mod tests; + +/// Frequency Handles Custom RPC API +#[rpc(client, server)] +pub trait HandlesApi { + /// retrieve `HandleResponse` for a given `MessageSourceId` + #[method(name = "handles_getHandleForMsa")] + fn get_handle_for_msa(&self, msa_id: MessageSourceId) -> RpcResult>; + + /// retrieve next `n` suffixes for a given handle + #[method(name = "handles_getNextSuffixes")] + fn get_next_suffixes( + &self, + base_handle: String, + count: Option, + ) -> RpcResult; + + /// retrieve `MessageSourceId` for a given handle + #[method(name = "handles_getMsaForHandle")] + fn get_msa_for_handle(&self, display_handle: String) -> RpcResult>; + + /// validate a handle + #[method(name = "handles_validateHandle")] + fn validate_handle(&self, base_handle: String) -> RpcResult; +} + +/// The client handler for the API used by Frequency Service RPC with `jsonrpsee` +pub struct HandlesHandler { + client: Arc, + _marker: std::marker::PhantomData, +} + +impl HandlesHandler { + /// Create new instance with the given reference to the client. + pub fn new(client: Arc) -> Self { + Self { client, _marker: Default::default() } + } +} + +/// Errors that occur on the client RPC +#[derive(Debug)] +pub enum HandlesRpcError { + /// InvalidHandle + InvalidHandle, +} + +impl From for ErrorObjectOwned { + fn from(e: HandlesRpcError) -> Self { + let msg = format!("{:?}", e); + + match e { + HandlesRpcError::InvalidHandle => ErrorObject::owned(1, msg, None::<()>), + } + } +} + +#[async_trait] +impl HandlesApiServer<::Hash> for HandlesHandler +where + Block: BlockT, + C: Send + Sync + 'static + ProvideRuntimeApi + HeaderBackend, + C::Api: HandlesRuntimeApi, +{ + fn get_handle_for_msa(&self, msa_id: MessageSourceId) -> RpcResult> { + let api = self.client.runtime_api(); + let at = self.client.info().best_hash; + let result = api.get_handle_for_msa(at, msa_id); + map_rpc_result(result) + } + + fn get_next_suffixes( + &self, + base_handle: String, + count: Option, + ) -> RpcResult { + let api = self.client.runtime_api(); + let at = self.client.info().best_hash; + let base_handle: BaseHandle = base_handle + .into_bytes() + .try_into() + .map_err(|_| HandlesRpcError::InvalidHandle)?; + let max_count = MAX_SUFFIXES_COUNT; + let count = count.unwrap_or(DEFAULT_SUFFIX_COUNT).min(max_count); + let suffixes_result = api.get_next_suffixes(at, base_handle, count); + map_rpc_result(suffixes_result) + } + + fn get_msa_for_handle(&self, display_handle: String) -> RpcResult> { + let api = self.client.runtime_api(); + let at = self.client.info().best_hash; + let handle: DisplayHandle = display_handle + .into_bytes() + .try_into() + .map_err(|_| HandlesRpcError::InvalidHandle)?; + let result = api.get_msa_for_handle(at, handle); + map_rpc_result(result) + } + + fn validate_handle(&self, base_handle: String) -> RpcResult { + let api = self.client.runtime_api(); + let at = self.client.info().best_hash; + let base_handle: BaseHandle = base_handle.into_bytes().try_into().unwrap_or_default(); + let result = api.validate_handle(at, base_handle); + map_rpc_result(result) + } +} diff --git a/pallets/handles/src/rpc/src/tests/mod.rs b/pallets/handles/src/rpc/src/tests/mod.rs new file mode 100644 index 0000000000..bdfae40081 --- /dev/null +++ b/pallets/handles/src/rpc/src/tests/mod.rs @@ -0,0 +1,96 @@ +mod rpc_mock; + +use super::*; +use rpc_mock::*; + +use common_primitives::{ + handles::{BaseHandle, DisplayHandle, PresumptiveSuffixesResponse}, + node::Block, +}; +use pallet_handles_runtime_api::HandlesRuntimeApi; +use std::sync::Arc; + +const VALID_MSA_ID: u64 = 1; + +sp_api::mock_impl_runtime_apis! { + impl HandlesRuntimeApi for TestRuntimeApi { + fn get_handle_for_msa(&self, msa_id: MessageSourceId) -> Option { + match msa_id { + VALID_MSA_ID => Some(HandleResponse { + base_handle: b"base_handle".to_vec(), + canonical_base: b"canonical_base".to_vec(), + suffix: 1, + }), + _ => None, + } + } + + fn get_next_suffixes(base_handle: BaseHandle, count: u16) -> PresumptiveSuffixesResponse { + let mut suffixes = Vec::new(); + for i in 0..count { + suffixes.push(i); + } + PresumptiveSuffixesResponse { base_handle: base_handle.into(), suffixes } + } + + fn get_msa_for_handle(_display_handle: DisplayHandle) -> Option{ + Some(VALID_MSA_ID) + } + + fn validate_handle(_base_handle: BaseHandle) -> bool { + true + } + } +} + +type HandleResult = Result, jsonrpsee::types::ErrorObjectOwned>; + +#[tokio::test] +async fn get_handle_with_non_existent_msa_id_should_return_none() { + let client = Arc::new(TestApi {}); + let api = HandlesHandler::new(client); + + let result: HandleResult = api.get_handle_for_msa( + 1233, // Non-existing MSA Id + ); + + assert!(result.is_ok()); + assert!(result.unwrap().is_none()); +} + +#[tokio::test] +async fn get_handle_with_success() { + let client = Arc::new(TestApi {}); + let api = HandlesHandler::new(client); + + let result: HandleResult = api.get_handle_for_msa( + VALID_MSA_ID, // MSA Id + ); + + assert!(result.is_ok()); + let response = result.unwrap().unwrap(); + assert_eq!(b"base_handle".to_vec(), response.base_handle); + assert_eq!(b"canonical_base".to_vec(), response.canonical_base); + assert_eq!(1, response.suffix); +} + +#[tokio::test] +async fn get_next_suffixes_with_success() { + let client = Arc::new(TestApi {}); + let api = HandlesHandler::new(client); + let result = api.get_next_suffixes("base_handle".to_string(), Some(3)); + + assert!(result.is_ok()); + let response = result.unwrap(); + assert_eq!(3, response.suffixes.len()); +} + +#[tokio::test] +async fn get_msa_for_handle_with_success() { + let client = Arc::new(TestApi {}); + let api = HandlesHandler::new(client); + let result = api.get_msa_for_handle("base_handle".to_string()); + + assert!(result.is_ok()); + assert_eq!(Some(VALID_MSA_ID), result.unwrap()); +} diff --git a/pallets/handles/src/rpc/src/tests/rpc_mock.rs b/pallets/handles/src/rpc/src/tests/rpc_mock.rs new file mode 100644 index 0000000000..54c23bdd22 --- /dev/null +++ b/pallets/handles/src/rpc/src/tests/rpc_mock.rs @@ -0,0 +1,61 @@ +use common_primitives::node::Block; +use sp_api::{ApiRef, ProvideRuntimeApi}; + +use sp_blockchain::HeaderBackend; +use sp_runtime::traits::{Block as BlockT, NumberFor, Zero}; + +pub struct TestApi {} + +pub struct TestRuntimeApi {} + +impl ProvideRuntimeApi for TestApi { + type Api = TestRuntimeApi; + + fn runtime_api(&self) -> ApiRef<'_, Self::Api> { + TestRuntimeApi {}.into() + } +} + +/// Blockchain database header backend. Does not perform any validation. +impl HeaderBackend for TestApi { + fn header( + &self, + _id: Block::Hash, + ) -> std::result::Result, sp_blockchain::Error> { + Ok(None) + } + + fn info(&self) -> sc_client_api::blockchain::Info { + sc_client_api::blockchain::Info { + best_hash: Default::default(), + best_number: Zero::zero(), + finalized_hash: Default::default(), + finalized_number: Zero::zero(), + genesis_hash: Default::default(), + number_leaves: Default::default(), + finalized_state: None, + block_gap: None, + } + } + + fn status( + &self, + _id: Block::Hash, + ) -> std::result::Result { + Ok(sc_client_api::blockchain::BlockStatus::Unknown) + } + + fn number( + &self, + _hash: Block::Hash, + ) -> std::result::Result>, sp_blockchain::Error> { + Ok(None) + } + + fn hash( + &self, + _number: NumberFor, + ) -> std::result::Result, sp_blockchain::Error> { + Ok(None) + } +} diff --git a/pallets/handles/src/runtime-api/Cargo.toml b/pallets/handles/src/runtime-api/Cargo.toml new file mode 100644 index 0000000000..44d40c0773 --- /dev/null +++ b/pallets/handles/src/runtime-api/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "pallet-handles-runtime-api" +version = "0.0.0" +description = "A package that adds Runtime Api for the Handles pallet" +authors = ["Frequency"] +license = "Apache-2.0" +publish = false +homepage = "https://frequency.xyz" +repository = "https://github.com/frequency-chain/frequency/" +edition = "2021" + +[dependencies] +# Substrate +sp-api = { workspace = true } +# Frequency related dependencies +common-primitives = { default-features = false, path = "../../../../common/primitives" } + +[features] +default = ["std"] +std = ['sp-api/std', 'common-primitives/std'] + +[lints] +workspace = true diff --git a/pallets/handles/src/runtime-api/src/lib.rs b/pallets/handles/src/runtime-api/src/lib.rs new file mode 100644 index 0000000000..36c8e5bb96 --- /dev/null +++ b/pallets/handles/src/runtime-api/src/lib.rs @@ -0,0 +1,55 @@ +#![cfg_attr(not(feature = "std"), no_std)] +#![allow(clippy::too_many_arguments)] +#![allow(clippy::unnecessary_mut_passed)] +#![allow(rustdoc::bare_urls)] +// Strong Documentation Lints +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + missing_docs +)] + +//! Runtime API definition for [Stateful Storage](../pallet_stateful_storage/index.html) +//! +//! This api must be implemented by the node runtime. +//! Runtime APIs Provide: +//! - An interface between the runtime and Custom RPCs. +//! - Runtime interfaces for end users beyond just State Queries + +use common_primitives::{ + handles::{ + BaseHandle, CheckHandleResponse, DisplayHandle, HandleResponse, PresumptiveSuffixesResponse, + }, + msa::MessageSourceId, +}; + +// Here we declare the runtime API. It is implemented it the `impl` block in +// runtime files (the `runtime` folder) +sp_api::decl_runtime_apis! { + + /// Runtime Version for Handles + /// - MUST be incremented if anything changes + /// - See: https://paritytech.github.io/polkadot/doc/polkadot_primitives/runtime_api/index.html + #[api_version(2)] + + /// Runtime APIs for [Handles](../pallet_handles/index.html) + pub trait HandlesRuntimeApi + { + /// Retrieve handle for a particular msa + fn get_handle_for_msa(msa_id: MessageSourceId) -> Option; + + /// Retrieve the next `n` suffixes for a given handle + fn get_next_suffixes(base_handle: BaseHandle, count: u16) -> PresumptiveSuffixesResponse; + + /// Retrieve msa for a particular handle + fn get_msa_for_handle(display_handle: DisplayHandle) -> Option; + + /// Check if a handle is valid + fn validate_handle(base_handle: BaseHandle) -> bool; + + #[api_version(3)] + /// Return information about a given handle + fn check_handle(base_handle: BaseHandle) -> CheckHandleResponse; + } +} diff --git a/pallets/handles/src/tests/handle_change_tests.rs b/pallets/handles/src/tests/handle_change_tests.rs new file mode 100644 index 0000000000..6694d6295e --- /dev/null +++ b/pallets/handles/src/tests/handle_change_tests.rs @@ -0,0 +1,62 @@ +use crate::{tests::mock::*, Error, Event}; +use common_primitives::msa::MessageSourceId; +use frame_support::{assert_err, assert_ok}; +use parity_scale_codec::Decode; +use sp_core::{sr25519, Encode, Pair}; + +#[test] +fn change_handle_happy_path() { + new_test_ext().execute_with(|| { + let handle_str = "MyHandle"; + let handle = handle_str.as_bytes().to_vec(); + let alice = sr25519::Pair::from_seed(&[0; 32]); + let expiry = 100; + let (payload, proof) = get_signed_claims_payload(&alice, handle.clone(), expiry); + assert_ok!(Handles::claim_handle( + RuntimeOrigin::signed(alice.public().into()), + alice.public().into(), + proof, + payload + )); + + // Confirm that HandleClaimed event was deposited + let msa_id = MessageSourceId::decode(&mut &alice.public().encode()[..]).unwrap(); + let full_handle = create_full_handle_for_index(handle_str, 0); + System::assert_last_event( + Event::HandleClaimed { msa_id, handle: full_handle.clone() }.into(), + ); + + let new_handle = "MyNewHandle"; + let (payload, proof) = + get_signed_claims_payload(&alice, new_handle.as_bytes().to_vec(), expiry); + assert_ok!(Handles::change_handle( + RuntimeOrigin::signed(alice.public().into()), + alice.public().into(), + proof, + payload + )); + let changed_handle = create_full_handle_for_index(new_handle, 0); + System::assert_has_event(Event::HandleRetired { msa_id, handle: full_handle }.into()); + System::assert_last_event(Event::HandleClaimed { msa_id, handle: changed_handle }.into()); + }); +} + +#[test] +fn change_handle_no_handle() { + new_test_ext().execute_with(|| { + let handle = "MyNewHandleWithoutAnOldOne"; + let alice = sr25519::Pair::from_seed(&[0; 32]); + let expiry = 100; + let (payload, proof) = + get_signed_claims_payload(&alice, handle.as_bytes().to_vec(), expiry); + assert_err!( + Handles::change_handle( + RuntimeOrigin::signed(alice.public().into()), + alice.public().into(), + proof, + payload + ), + Error::::MSAHandleDoesNotExist + ); + }); +} diff --git a/pallets/handles/src/tests/handle_creation_tests.rs b/pallets/handles/src/tests/handle_creation_tests.rs new file mode 100644 index 0000000000..90fd422c71 --- /dev/null +++ b/pallets/handles/src/tests/handle_creation_tests.rs @@ -0,0 +1,471 @@ +use crate::{tests::mock::*, Error, Event}; +use common_primitives::{ + handles::{CheckHandleResponse, HANDLE_BYTES_MAX}, + msa::MessageSourceId, +}; +use frame_support::{assert_err, assert_noop, assert_ok, dispatch::DispatchResult}; +use parity_scale_codec::Decode; +use sp_core::{sr25519, Encode, Pair}; +extern crate alloc; +use alloc::collections::btree_set::BTreeSet; + +struct TestCase { + handle: &'static str, + expected: T, +} + +#[test] +fn test_full_handle_creation() { + new_test_ext().execute_with(|| { + // Min is 10, Max is 99 inclusive + for sequence_index in 0..89 { + let display_handle = create_full_handle_for_index("test", sequence_index); + assert_ok!(core::str::from_utf8(&display_handle)); + } + }) +} + +#[test] +fn claim_handle_happy_path() { + new_test_ext().execute_with(|| { + let alice = sr25519::Pair::from_seed(&[0; 32]); + let expiry = 100; + let (payload, proof) = + get_signed_claims_payload(&alice, "test1".as_bytes().to_vec(), expiry); + assert_ok!(Handles::claim_handle( + RuntimeOrigin::signed(alice.public().into()), + alice.public().into(), + proof, + payload + )); + + // Confirm that HandleClaimed event was deposited + let msa_id = MessageSourceId::decode(&mut &alice.public().encode()[..]).unwrap(); + let handle = create_full_handle_for_index("test1", 0); + System::assert_last_event(Event::HandleClaimed { msa_id, handle }.into()); + }); +} + +#[test] +fn claim_handle_already_claimed() { + new_test_ext().execute_with(|| { + let alice = sr25519::Pair::from_seed(&[0; 32]); + let expiration = 100; + + let test_cases: [TestCase; 2] = [ + TestCase { handle: "test1", expected: Ok(()) }, + TestCase { + handle: "test1", + expected: Err(Error::::MSAHandleAlreadyExists.into()), + }, + ]; + + for test_case in test_cases { + let (payload, proof) = + get_signed_claims_payload(&alice, test_case.handle.as_bytes().to_vec(), expiration); + + assert_eq!( + Handles::claim_handle( + RuntimeOrigin::signed(alice.public().into()), + alice.public().into(), + proof, + payload + ), + test_case.expected + ); + } + }); +} + +#[test] +fn claim_handle_already_claimed_with_different_case() { + new_test_ext().execute_with(|| { + let alice = sr25519::Pair::from_seed(&[0; 32]); + let expiration = 100; + + let test_cases: [TestCase; 2] = [ + TestCase { handle: "test1", expected: Ok(()) }, + TestCase { + handle: "TEST1", + expected: Err(Error::::MSAHandleAlreadyExists.into()), + }, + ]; + + for test_case in test_cases { + let (payload, proof) = + get_signed_claims_payload(&alice, test_case.handle.as_bytes().to_vec(), expiration); + + assert_eq!( + Handles::claim_handle( + RuntimeOrigin::signed(alice.public().into()), + alice.public().into(), + proof, + payload + ), + test_case.expected + ); + } + }); +} + +#[test] +fn claim_handle_already_claimed_with_homoglyph() { + new_test_ext().execute_with(|| { + let alice = sr25519::Pair::from_seed(&[0; 32]); + let expiration = 100; + + let test_cases: [TestCase; 2] = [ + TestCase { handle: "test1", expected: Ok(()) }, + TestCase { + handle: "tést1", + expected: Err(Error::::MSAHandleAlreadyExists.into()), + }, + ]; + + for test_case in test_cases { + let (payload, proof) = + get_signed_claims_payload(&alice, test_case.handle.as_bytes().to_vec(), expiration); + + assert_eq!( + Handles::claim_handle( + RuntimeOrigin::signed(alice.public().into()), + alice.public().into(), + proof, + payload + ), + test_case.expected + ); + } + }); +} + +#[test] +fn claim_handle_get_msa_handle() { + new_test_ext().execute_with(|| { + let alice = sr25519::Pair::from_seed(&[0; 32]); + let expiration = 100; + let (payload, proof) = + get_signed_claims_payload(&alice, "test1".as_bytes().to_vec(), expiration); + assert_ok!(Handles::claim_handle( + RuntimeOrigin::signed(alice.public().into()), + alice.public().into(), + proof, + payload + )); + let msa_id = MessageSourceId::decode(&mut &alice.public().encode()[..]).unwrap(); + let handle = Handles::get_handle_for_msa(msa_id); + assert!(handle.is_some()); + let handle_result = handle.unwrap(); + let base_handle = handle_result.base_handle; + assert_eq!(base_handle, "test1".as_bytes().to_vec()); + let suffix = handle_result.suffix; + assert!(suffix > 0); + }); +} + +#[test] +fn claim_handle_invalid_length_too_long() { + // Try to claim a 36 byte handle which is over the byte and character limit + new_test_ext().execute_with(|| { + let alice = sr25519::Pair::from_seed(&[0; 32]); + let expiration = 100; + let (payload, proof) = get_signed_claims_payload( + &alice, + "abcdefghijklmnopqrstuvwxyz0123456789".as_bytes().to_vec(), + expiration, + ); + assert_noop!( + Handles::claim_handle( + RuntimeOrigin::signed(alice.public().into()), + alice.public().into(), + proof, + payload + ), + Error::::InvalidHandleByteLength + ); + }); +} + +#[test] +fn claim_handle_invalid_length_too_short() { + // Try to claim a 1 character handle which is under the character limit + new_test_ext().execute_with(|| { + let alice = sr25519::Pair::from_seed(&[0; 32]); + let expiration = 100; + let (payload, proof) = + get_signed_claims_payload(&alice, "a".as_bytes().to_vec(), expiration); + assert_noop!( + Handles::claim_handle( + RuntimeOrigin::signed(alice.public().into()), + alice.public().into(), + proof, + payload + ), + Error::::InvalidHandleCharacterLength + ); + }); +} + +#[test] +fn claim_handle_canonical_invalid_length_too_short() { + // Try to claim a 1 character handle which is under the character limit + new_test_ext().execute_with(|| { + let alice = sr25519::Pair::from_seed(&[0; 32]); + let expiration = 100; + let (payload, proof) = + get_signed_claims_payload(&alice, "a b".as_bytes().to_vec(), expiration); + assert_noop!( + Handles::claim_handle( + RuntimeOrigin::signed(alice.public().into()), + alice.public().into(), + proof, + payload + ), + Error::::InvalidHandleCharacterLength + ); + }); +} + +#[test] +fn claim_handle_invalid_byte_length() { + // Try to claim a character handle which is over the byte limit but under the character limit + // ℂн𝔸RℒℰᏕ𝔇𝔸𐒴𑣯1𝒩𝓐𑣯𝔸R𝔻Ꮥ is 19 characters but 61 bytes + new_test_ext().execute_with(|| { + let alice = sr25519::Pair::from_seed(&[0; 32]); + let expiration = 100; + let (payload, proof) = get_signed_claims_payload( + &alice, + "ℂн𝔸RℒℰᏕ𝔇𝔸𐒴𑣯1𝒩𝓐𑣯𝔸R𝔻Ꮥ".as_bytes().to_vec(), + expiration, + ); + assert_noop!( + Handles::claim_handle( + RuntimeOrigin::signed(alice.public().into()), + alice.public().into(), + proof, + payload + ), + Error::::InvalidHandleByteLength + ); + }); +} + +#[test] +fn test_get_next_suffixes() { + new_test_ext().execute_with(|| { + let alice = sr25519::Pair::from_seed(&[0; 32]); + let expiration = 100; + let (payload, proof) = + get_signed_claims_payload(&alice, "test1".as_bytes().to_vec(), expiration); + assert_ok!(Handles::claim_handle( + RuntimeOrigin::signed(alice.public().into()), + alice.public().into(), + proof, + payload + )); + let msa_id = MessageSourceId::decode(&mut &alice.public().encode()[..]).unwrap(); + let handle = Handles::get_handle_for_msa(msa_id); + assert!(handle.is_some()); + let handle_result = handle.unwrap(); + let base_handle = handle_result.base_handle; + assert_eq!(base_handle, "test1".as_bytes().to_vec()); + let suffix = handle_result.suffix; + assert!(suffix > 0); + let next_suffixes = Handles::get_next_suffixes(base_handle.try_into().unwrap(), 5); + assert_eq!(next_suffixes.suffixes.len(), 5); + let mut presumptive_suffixes = BTreeSet::new(); + for suffix in next_suffixes.suffixes { + assert!(suffix > 0 && suffix != handle_result.suffix); + presumptive_suffixes.insert(suffix); + } + assert_eq!(presumptive_suffixes.len(), 5); + }); +} + +#[test] +fn claim_handle_supports_stripping_diacriticals_from_utf8_with_combining_marks() { + new_test_ext().execute_with(|| { + let alice = sr25519::Pair::from_seed(&[0; 32]); + let expiration = 100; + + // Construct a handle "Álvaro" where the first character consists of + // a base character and a combining mark for an accute accent + let mut handle_with_combining_mark = String::new(); + handle_with_combining_mark.push('\u{0041}'); + handle_with_combining_mark.push('\u{0301}'); + handle_with_combining_mark.push_str("lvaro"); + + let (payload, proof) = get_signed_claims_payload( + &alice, + handle_with_combining_mark.as_bytes().to_vec(), + expiration, + ); + assert_ok!(Handles::claim_handle( + RuntimeOrigin::signed(alice.public().into()), + alice.public().into(), + proof, + payload.clone() + )); + }); +} + +#[test] +fn claim_handle_fails_when_handle_contains_unsupported_unicode_characters() { + new_test_ext().execute_with(|| { + let alice = sr25519::Pair::from_seed(&[0; 32]); + let expiration = 100; + let handle_with_unsupported_unicode_characters = "𓅓𓅱𓅱𓆑𓆷"; + let (payload, proof) = get_signed_claims_payload( + &alice, + handle_with_unsupported_unicode_characters.as_bytes().to_vec(), + expiration, + ); + assert_noop!( + Handles::claim_handle( + RuntimeOrigin::signed(alice.public().into()), + alice.public().into(), + proof, + payload.clone() + ), + Error::::HandleDoesNotConsistOfSupportedCharacterSets + ); + }); +} + +#[test] +fn claim_handle_with_max_bytes_should_get_correct_display_handle() { + new_test_ext().execute_with(|| { + let alice = sr25519::Pair::from_seed(&[0; 32]); + let expiration = 100; + // use 4 bytes character to build a handle with 32 bytes + let handle = "𝔸".repeat(8); + let (payload, proof) = + get_signed_claims_payload(&alice, handle.as_bytes().to_vec(), expiration); + assert_ok!(Handles::claim_handle( + RuntimeOrigin::signed(alice.public().into()), + alice.public().into(), + proof, + payload.clone() + )); + let msa_id = MessageSourceId::decode(&mut &alice.public().encode()[..]).unwrap(); + let handle = Handles::get_handle_for_msa(msa_id); + assert!(handle.is_some()); + let handle_result = handle.unwrap(); + assert_eq!(handle_result.base_handle, "𝔸".repeat(8).as_bytes().to_vec()); + assert!(handle_result.suffix > 0); + let display_handle = "𝔸".repeat(8) + "." + &handle_result.suffix.to_string(); + let display_handle_vec = display_handle.as_bytes().to_vec(); + let msa_id_from_state = + Handles::get_msa_id_for_handle(display_handle_vec.try_into().unwrap()); + assert!(msa_id_from_state.is_some()); + assert_eq!(msa_id_from_state.unwrap(), msa_id); + }); +} + +#[test] +fn claim_handle_with_various_spaces_should_get_correct_display_handle() { + new_test_ext().execute_with(|| { + let alice = sr25519::Pair::from_seed(&[0; 32]); + let expiration = 100; + let handle = "\u{2000}\u{3000}\u{2000}w\u{2000}h\u{000D}itesp\u{2002}a\u{000C}ce\u{0009}\u{2002}\u{0009}"; + let (payload, proof) = + get_signed_claims_payload(&alice, handle.as_bytes().to_vec(), expiration); + assert_ok!(Handles::claim_handle( + RuntimeOrigin::signed(alice.public().into()), + alice.public().into(), + proof, + payload.clone() + )); + let msa_id = MessageSourceId::decode(&mut &alice.public().encode()[..]).unwrap(); + let handle = Handles::get_handle_for_msa(msa_id); + assert!(handle.is_some()); + let handle_result = handle.unwrap(); + assert_eq!(handle_result.base_handle, "w h itesp a ce".as_bytes().to_vec()); + assert!(handle_result.suffix > 0); + let display_handle = "whitespace.".to_owned() + &handle_result.suffix.to_string(); + let display_handle_vec = display_handle.as_bytes().to_vec(); + let msa_id_from_state = + Handles::get_msa_id_for_handle(display_handle_vec.try_into().unwrap()); + assert!(msa_id_from_state.is_some()); + assert_eq!(msa_id_from_state.unwrap(), msa_id); + }); +} + +#[test] +fn test_verify_handle_length() { + new_test_ext().execute_with(|| { + // Max bytes handle is ok + let handle_str: String = "*".repeat((HANDLE_BYTES_MAX) as usize); + let handle = handle_str.as_bytes().to_vec(); + assert_ok!(Handles::verify_max_handle_byte_length(handle)); + + // However, max bytes handle plus 1 is not ok + let handle_str: String = "*".repeat((HANDLE_BYTES_MAX + 1) as usize); + let handle = handle_str.as_bytes().to_vec(); + assert_err!( + Handles::verify_max_handle_byte_length(handle), + Error::::InvalidHandleByteLength + ); + }); +} + +#[test] +fn test_validate_handle() { + new_test_ext().execute_with(|| { + let good_handle: String = String::from("MyBonny"); + assert!(Handles::validate_handle(good_handle.as_bytes().to_vec())); + + let too_long_handle: String = "*".repeat((HANDLE_BYTES_MAX + 1) as usize); + assert!(!Handles::validate_handle(too_long_handle.as_bytes().to_vec())); + + let handle_with_emoji = format_args!("John{}", '\u{1F600}').to_string(); + assert!(!Handles::validate_handle(handle_with_emoji.as_bytes().to_vec())); + }) +} + +#[test] +fn test_check_handle() { + new_test_ext().execute_with(|| { + let good_handle: String = String::from("MyBonny"); + assert_eq!( + Handles::check_handle(good_handle.as_bytes().to_vec()), + CheckHandleResponse { + base_handle: good_handle.as_bytes().to_vec(), + suffix_index: 0, + suffixes_available: true, + valid: true, + canonical_base: String::from("myb0nny").as_bytes().to_vec(), + } + ); + + let good_whitespace_handle: String = String::from(" hel lo "); + assert_eq!( + Handles::check_handle(good_whitespace_handle.as_bytes().to_vec()), + CheckHandleResponse { + base_handle: "hel lo".as_bytes().to_vec(), + suffix_index: 0, + suffixes_available: true, + valid: true, + canonical_base: String::from("he110").as_bytes().to_vec(), + } + ); + + let too_long_handle: String = "*".repeat((HANDLE_BYTES_MAX + 1) as usize); + assert_eq!( + Handles::check_handle(too_long_handle.as_bytes().to_vec()), + CheckHandleResponse { + base_handle: too_long_handle.as_bytes().to_vec(), + ..Default::default() + } + ); + + let handle_with_emoji = format_args!("John{}", '\u{1F600}').to_string(); + assert_eq!( + Handles::check_handle(handle_with_emoji.as_bytes().to_vec()), + CheckHandleResponse { + base_handle: handle_with_emoji.as_bytes().to_vec(), + ..Default::default() + } + ); + }) +} diff --git a/pallets/handles/src/tests/handle_retirements_tests.rs b/pallets/handles/src/tests/handle_retirements_tests.rs new file mode 100644 index 0000000000..59677b82f7 --- /dev/null +++ b/pallets/handles/src/tests/handle_retirements_tests.rs @@ -0,0 +1,136 @@ +use crate::{handles_signed_extension::HandlesSignedExtension, tests::mock::*, Error, Event}; +use common_primitives::{handles::*, msa::MessageSourceId}; +use frame_support::{ + assert_noop, assert_ok, + dispatch::{DispatchInfo, GetDispatchInfo, Pays}, +}; +use numtoa::*; +use parity_scale_codec::Decode; +use sp_core::{sr25519, Encode, Pair}; +#[allow(deprecated)] +use sp_runtime::traits::SignedExtension; + +#[test] +fn claim_and_retire_handle_happy_path() { + new_test_ext().execute_with(|| { + let base_handle_str = "test1"; + + let alice = sr25519::Pair::from_seed(&[0; 32]); + let expiration = 10; + let (payload, proof) = + get_signed_claims_payload(&alice, base_handle_str.as_bytes().to_vec(), expiration); + assert_ok!(Handles::claim_handle( + RuntimeOrigin::signed(alice.public().into()), + alice.public().into(), + proof, + payload + )); + let msa_id = MessageSourceId::decode(&mut &alice.public().encode()[..]).unwrap(); + let handle = Handles::get_handle_for_msa(msa_id); + assert!(handle.is_some()); + + // Compose the full display handle from the base handle, "." delimiter and suffix + let handle_result = handle.unwrap(); + let suffix = handle_result.suffix; + let mut full_handle_vec: Vec = vec![]; + full_handle_vec.extend(base_handle_str.as_bytes()); + full_handle_vec.extend(b"."); // The delimiter + let mut buff = [0u8; SUFFIX_MAX_DIGITS]; + full_handle_vec.extend(suffix.numtoa(10, &mut buff)); // Use base 10 + + run_to_block(200); + // Retire the handle + assert_ok!(Handles::retire_handle(RuntimeOrigin::signed(alice.public().into()))); + + // Confirm that HandleRetired event was deposited + System::assert_last_event( + Event::HandleRetired { msa_id, handle: full_handle_vec.clone() }.into(), + ); + + // Try to retire again which should fail + assert_noop!( + Handles::retire_handle(RuntimeOrigin::signed(alice.public().into()),), + Error::::MSAHandleDoesNotExist + ); + }); +} + +#[test] +fn test_handle_early_retirement_fails() { + new_test_ext().execute_with(|| { + let base_handle_str = "test1"; + + let alice = sr25519::Pair::from_seed(&[0; 32]); + let expiration = 50; + let (payload, proof) = + get_signed_claims_payload(&alice, base_handle_str.as_bytes().to_vec(), expiration); + assert_ok!(Handles::claim_handle( + RuntimeOrigin::signed(alice.public().into()), + alice.public().into(), + proof.clone(), + payload.clone() + )); + let msa_id = MessageSourceId::decode(&mut &alice.public().encode()[..]).unwrap(); + let handle = Handles::get_handle_for_msa(msa_id); + assert!(handle.is_some()); + + // Compose the full display handle from the base handle, "." delimeter and suffix + let handle_result = handle.unwrap(); + let suffix: HandleSuffix = handle_result.suffix; + let mut full_handle_vec: Vec = vec![]; + full_handle_vec.extend(base_handle_str.as_bytes()); + full_handle_vec.extend(b"."); // The delimeter + let mut buff = [0u8; SUFFIX_MAX_DIGITS]; + full_handle_vec.extend(suffix.numtoa(10, &mut buff)); // Use base 10 + + // Fail to retire due to mortality + let call_retire_handle: &::RuntimeCall = + &RuntimeCall::Handles(HandlesCall::retire_handle {}); + let info = DispatchInfo::default(); + let len = 0_usize; + #[allow(deprecated)] + let early_retire_result = HandlesSignedExtension::::new().validate( + &alice.public().into(), + call_retire_handle, + &info, + len, + ); + assert!(early_retire_result.is_err()); + + // Retire the handle after the mortality period + run_to_block(200); + assert_ok!(Handles::retire_handle(RuntimeOrigin::signed(alice.public().into()),)); + + // Confirm that HandleRetired event was deposited + System::assert_last_event( + Event::HandleRetired { msa_id, handle: full_handle_vec.clone() }.into(), + ); + + // Try to retire the same handle again which should fail + assert_noop!( + Handles::retire_handle(RuntimeOrigin::signed(alice.public().into()),), + Error::::MSAHandleDoesNotExist + ); + }); +} + +#[test] +fn retire_handle_no_handle() { + new_test_ext().execute_with(|| { + let delegator_key_pair = sr25519::Pair::generate().0; + let delegator_account = delegator_key_pair.public(); + + // Payload + assert_noop!( + Handles::retire_handle(RuntimeOrigin::signed(delegator_account.into()),), + Error::::MSAHandleDoesNotExist + ); + }); +} + +#[test] +fn check_free_extrinsic_use() { + let call = HandlesCall::::retire_handle {}; + let dispatch_info = call.get_dispatch_info(); + assert_eq!(dispatch_info.pays_fee, Pays::No); +} diff --git a/pallets/handles/src/tests/handles_replay_attack_test.rs b/pallets/handles/src/tests/handles_replay_attack_test.rs new file mode 100644 index 0000000000..41103cf6bb --- /dev/null +++ b/pallets/handles/src/tests/handles_replay_attack_test.rs @@ -0,0 +1,188 @@ +use crate::{tests::mock::*, Error}; +use common_primitives::{handles::*, msa::MessageSourceId}; +use frame_support::{assert_noop, assert_ok}; +use numtoa::*; +use parity_scale_codec::Decode; +use sp_core::{sr25519, Encode, Pair}; + +#[test] +fn test_claim_handle_fails_if_claim_is_replayed_with_different_account() { + new_test_ext().execute_with(|| { + let base_handle_str = "test1"; + + let alice = sr25519::Pair::from_seed(&[0; 32]); + let expiration = 100; + let (payload, proof) = + get_signed_claims_payload(&alice, base_handle_str.as_bytes().to_vec(), expiration); + assert_ok!(Handles::claim_handle( + RuntimeOrigin::signed(alice.public().into()), + alice.public().into(), + proof.clone(), + payload.clone() + )); + let msa_id = MessageSourceId::decode(&mut &alice.public().encode()[..]).unwrap(); + let handle = Handles::get_handle_for_msa(msa_id); + assert!(handle.is_some()); + + // Compose the full display handle from the base handle, "." delimeter and suffix + let handle_result = handle.unwrap(); + let suffix: HandleSuffix = handle_result.suffix; + let mut full_handle_vec: Vec = vec![]; + full_handle_vec.extend(base_handle_str.as_bytes()); + full_handle_vec.extend(b"."); // The delimeter + let mut buff = [0u8; SUFFIX_MAX_DIGITS]; + full_handle_vec.extend(suffix.numtoa(10, &mut buff)); // Use base 10 + + // Try to claim the base handle again with a different account which should fail + let bob = sr25519::Pair::from_seed(&[1; 32]); + assert_noop!( + Handles::claim_handle( + RuntimeOrigin::signed(bob.public().into()), + bob.public().into(), + proof, + payload + ), + Error::::InvalidSignature + ); + }); +} + +#[test] +fn test_claim_handle_fails_with_replay_attack_using_different_payload() { + new_test_ext().execute_with(|| { + let base_handle_str = "test1"; + + let alice = sr25519::Pair::from_seed(&[0; 32]); + let expiration = 100; + let (payload, proof) = + get_signed_claims_payload(&alice, base_handle_str.as_bytes().to_vec(), expiration); + assert_ok!(Handles::claim_handle( + RuntimeOrigin::signed(alice.public().into()), + alice.public().into(), + proof.clone(), + payload.clone() + )); + let msa_id = MessageSourceId::decode(&mut &alice.public().encode()[..]).unwrap(); + let handle = Handles::get_handle_for_msa(msa_id); + assert!(handle.is_some()); + + // Compose the full display handle from the base handle, "." delimeter and suffix + let handle_result = handle.unwrap(); + let suffix: HandleSuffix = handle_result.suffix; + let mut full_handle_vec: Vec = vec![]; + full_handle_vec.extend(base_handle_str.as_bytes()); + full_handle_vec.extend(b"."); // The delimeter + let mut buff = [0u8; SUFFIX_MAX_DIGITS]; + full_handle_vec.extend(suffix.numtoa(10, &mut buff)); // Use base 10 + + // Try to claim the base handle again with a different payload which should fail + let (payload2, proof2) = + get_signed_claims_payload(&alice, b"another-handle".to_vec(), expiration); + assert_noop!( + Handles::claim_handle( + RuntimeOrigin::signed(alice.public().into()), + alice.public().into(), + proof2, + payload2 + ), + Error::::MSAHandleAlreadyExists + ); + }); +} + +#[test] +fn test_retire_handle_fails_with_replay_attack_using_different_account() { + new_test_ext().execute_with(|| { + let base_handle_str = "test1"; + + let alice = sr25519::Pair::from_seed(&[0; 32]); + let expiration = 100; + let (payload, proof) = + get_signed_claims_payload(&alice, base_handle_str.as_bytes().to_vec(), expiration); + assert_ok!(Handles::claim_handle( + RuntimeOrigin::signed(alice.public().into()), + alice.public().into(), + proof.clone(), + payload.clone() + )); + let msa_id = MessageSourceId::decode(&mut &alice.public().encode()[..]).unwrap(); + let handle = Handles::get_handle_for_msa(msa_id); + assert!(handle.is_some()); + + // Try to retire the handle with a different account which should fail + let bob = sr25519::Pair::from_seed(&[1; 32]); + assert_noop!( + Handles::retire_handle(RuntimeOrigin::signed(bob.public().into()),), + Error::::MSAHandleDoesNotExist + ); + }); +} + +#[test] +fn test_claim_handle_fails_when_claiming_for_another_msa_with_no_existing_handle() { + new_test_ext().execute_with(|| { + let base_handle_str = "test1"; + + let alice = sr25519::Pair::from_seed(&[0; 32]); + let expiration = 100; + // Try to claim the base handle for another MSA with a different account which should fail + let bob = sr25519::Pair::from_seed(&[1; 32]); + let (payload_spoofed, proof_spoofed) = + get_signed_claims_payload(&bob, base_handle_str.as_bytes().to_vec(), expiration); + assert_noop!( + Handles::claim_handle( + RuntimeOrigin::signed(bob.public().into()), + alice.public().into(), + proof_spoofed, + payload_spoofed + ), + Error::::InvalidSignature + ); + }); +} + +#[test] +fn test_claim_handle_fails_when_proof_has_expired() { + new_test_ext().execute_with(|| { + let base_handle_str = "test1"; + + let alice = sr25519::Pair::from_seed(&[0; 32]); + let expiration = 10; + let (payload, proof) = + get_signed_claims_payload(&alice, base_handle_str.as_bytes().to_vec(), expiration); + // run to block 10 + run_to_block(11); + assert_noop!( + Handles::claim_handle( + RuntimeOrigin::signed(alice.public().into()), + alice.public().into(), + proof, + payload + ), + Error::::ProofHasExpired + ); + }); +} + +#[test] +fn test_claim_handle_fails_when_proof_is_not_yet_valid() { + new_test_ext().execute_with(|| { + let base_handle_str = "test1"; + + let alice = sr25519::Pair::from_seed(&[0; 32]); + let expiration = 200; + let (payload, proof) = + get_signed_claims_payload(&alice, base_handle_str.as_bytes().to_vec(), expiration); + // run to block 9 + run_to_block(9); + assert_noop!( + Handles::claim_handle( + RuntimeOrigin::signed(alice.public().into()), + alice.public().into(), + proof, + payload + ), + Error::::ProofNotYetValid + ); + }); +} diff --git a/pallets/handles/src/tests/mock.rs b/pallets/handles/src/tests/mock.rs new file mode 100644 index 0000000000..9873af2ace --- /dev/null +++ b/pallets/handles/src/tests/mock.rs @@ -0,0 +1,197 @@ +use crate as pallet_handles; +pub use pallet_handles::Call as HandlesCall; +use parity_scale_codec::Decode; + +use common_primitives::{ + handles::*, + msa::{MessageSourceId, MsaLookup, MsaValidator}, + node::AccountId, + utils::wrap_binary_data, +}; +use frame_support::traits::{ConstU16, ConstU32, OnFinalize, OnInitialize}; +use sp_core::{crypto::AccountId32, sr25519, ByteArray, Encode, Pair, H256}; +use sp_runtime::{ + traits::{BlakeTwo256, ConvertInto, IdentityLookup}, + BuildStorage, DispatchError, MultiSignature, +}; + +use handles_utils::converter::convert_to_canonical; +pub const INVALID_MSA_ID: MessageSourceId = 100; + +type Block = frame_system::mocking::MockBlockU32; + +pub struct MsaInfoHandler; + +impl MsaLookup for MsaInfoHandler { + type AccountId = AccountId; + + fn get_msa_id(key: &AccountId) -> Option { + if *key == test_public(INVALID_MSA_ID as u8) { + return None; + } + + Some(MessageSourceId::decode(&mut key.as_slice()).unwrap()) + } +} + +impl MsaValidator for MsaInfoHandler { + type AccountId = AccountId; + + fn ensure_valid_msa_key(key: &Self::AccountId) -> Result { + if *key == test_public(INVALID_MSA_ID as u8) { + return Err(DispatchError::Other("some error")); + } + + Ok(MessageSourceId::decode(&mut key.as_slice()).unwrap()) + } +} + +// Configure a mock runtime to test the pallet. +frame_support::construct_runtime!( + pub enum Test + { + System: frame_system::{Pallet, Call, Config, Storage, Event}, + Handles: pallet_handles::{Pallet, Call, Storage, Event}, + } +); + +impl frame_system::Config for Test { + type BaseCallFilter = frame_support::traits::Everything; + type BlockWeights = (); + type BlockLength = (); + type DbWeight = (); + type RuntimeOrigin = RuntimeOrigin; + type RuntimeCall = RuntimeCall; + type Nonce = u64; + type Hash = H256; + type Hashing = BlakeTwo256; + type AccountId = AccountId; + type Lookup = IdentityLookup; + type Block = Block; + type RuntimeTask = RuntimeTask; + type RuntimeEvent = RuntimeEvent; + type BlockHashCount = ConstU32<250>; + type Version = (); + type PalletInfo = PalletInfo; + type AccountData = (); + type OnNewAccount = (); + type OnKilledAccount = (); + type SystemWeightInfo = (); + type SS58Prefix = ConstU16<42>; + type OnSetCode = (); + type MaxConsumers = frame_support::traits::ConstU32<16>; + type SingleBlockMigrations = (); + type MultiBlockMigrator = (); + type PreInherents = (); + type PostInherents = (); + type PostTransactions = (); + type ExtensionsWeightInfo = (); +} + +impl pallet_handles::Config for Test { + type RuntimeEvent = RuntimeEvent; + + /// Weight information for extrinsics in this pallet. + type WeightInfo = (); + + /// The conversion to a 32 byte AccountId + type ConvertIntoAccountId32 = ConvertInto; + + /// A type that will supply MSA related information + type MsaInfoProvider = MsaInfoHandler; + + /// The minimum suffix value + type HandleSuffixMin = ConstU16<10>; + + /// The maximum suffix value + type HandleSuffixMax = ConstU16<99>; + + /// The mortality window for a handle claim + type MortalityWindowSize = ConstU32<150>; + + /// A set of helper functions for benchmarking. + #[cfg(feature = "runtime-benchmarks")] + type MsaBenchmarkHelper = (); +} + +// Build genesis storage according to the mock runtime. +pub fn new_test_ext() -> sp_io::TestExternalities { + let t = frame_system::GenesisConfig::::default().build_storage().unwrap(); + let mut ext = sp_io::TestExternalities::new(t); + ext.execute_with(|| System::set_block_number(1)); + ext +} + +#[cfg(feature = "runtime-benchmarks")] +pub fn new_test_ext_keystore() -> sp_io::TestExternalities { + use sp_keystore::{testing::MemoryKeystore, KeystoreExt, KeystorePtr}; + extern crate alloc; + use alloc::sync::Arc; + + let t = frame_system::GenesisConfig::::default().build_storage().unwrap(); + let mut ext = sp_io::TestExternalities::new(t); + ext.register_extension(KeystoreExt(Arc::new(MemoryKeystore::new()) as KeystorePtr)); + + ext +} + +// Create and return a simple test AccountId32 constructed with the desired integer. +pub fn test_public(n: u8) -> AccountId32 { + AccountId32::new([n; 32]) +} + +// Run to the given block number +pub fn run_to_block(n: u32) { + while System::block_number() < n { + if System::block_number() > 1 { + System::on_finalize(System::block_number()); + } + System::set_block_number(System::block_number() + 1); + System::on_initialize(System::block_number()); + Handles::on_initialize(System::block_number()); + } +} + +// Create a signed claim handle payload +pub fn get_signed_claims_payload( + account: &sr25519::Pair, + handle: Vec, + signature_expiration: u32, +) -> (ClaimHandlePayload, MultiSignature) { + let base_handle = handle; + let payload = ClaimHandlePayload::new(base_handle.clone(), signature_expiration); + let encoded_payload = wrap_binary_data(payload.encode()); + let proof: MultiSignature = account.sign(&encoded_payload).into(); + + (payload, proof) +} + +/// Creates a full display handle by combining a base handle string with a suffix generated +/// from an index into the suffix sequence. +/// +/// # Arguments +/// +/// * `base_handle_str` - The base handle string. +/// * `suffix_sequence_index` - The index into the suffix sequence. +/// +/// # Returns +/// +/// * `DisplayHandle` - The full display handle. +/// +pub fn create_full_handle_for_index( + base_handle_str: &str, + suffix_sequence_index: SequenceIndex, +) -> Vec { + // Convert base handle into a canonical base + let canonical_handle_str = convert_to_canonical(base_handle_str); + + // Generate suffix from index into the suffix sequence + let suffix = Handles::generate_suffix_for_canonical_handle( + &canonical_handle_str, + suffix_sequence_index as usize, + ) + .unwrap_or_default(); + + let display_handle = Handles::build_full_display_handle(base_handle_str, suffix).unwrap(); + display_handle.into_inner() +} diff --git a/pallets/handles/src/tests/mod.rs b/pallets/handles/src/tests/mod.rs new file mode 100644 index 0000000000..d54931d1da --- /dev/null +++ b/pallets/handles/src/tests/mod.rs @@ -0,0 +1,7 @@ +pub mod mock; + +mod handle_change_tests; +mod handle_creation_tests; +mod handle_retirements_tests; +mod handles_replay_attack_test; +mod signed_extension_tests; diff --git a/pallets/handles/src/tests/signed_extension_tests.rs b/pallets/handles/src/tests/signed_extension_tests.rs new file mode 100644 index 0000000000..4ead98a5a2 --- /dev/null +++ b/pallets/handles/src/tests/signed_extension_tests.rs @@ -0,0 +1,98 @@ +use crate::{handles_signed_extension::HandlesSignedExtension, tests::mock::*}; +use frame_support::{assert_ok, dispatch::DispatchInfo}; +use sp_core::{sr25519, Pair}; +#[allow(deprecated)] +use sp_runtime::traits::SignedExtension; + +/// Assert that retiring a handle passes the signed extension HandlesSignedExtension +#[test] +fn signed_extension_retire_handle_success() { + new_test_ext().execute_with(|| { + let base_handle_str = "test1"; + + // Claim the handle + let alice = sr25519::Pair::from_seed(&[0; 32]); + let expiration = 10; + let (payload, proof) = + get_signed_claims_payload(&alice, base_handle_str.as_bytes().to_vec(), expiration); + assert_ok!(Handles::claim_handle( + RuntimeOrigin::signed(alice.public().into()), + alice.public().into(), + proof, + payload + )); + + run_to_block(11); + + // Retire the handle + let call_retire_handle: &::RuntimeCall = + &RuntimeCall::Handles(HandlesCall::retire_handle {}); + let info = DispatchInfo::default(); + let len = 0_usize; + #[allow(deprecated)] + let result = HandlesSignedExtension::::new().validate( + &alice.public().into(), + call_retire_handle, + &info, + len, + ); + assert_ok!(result); + }); +} + +/// Assert that retiring a handle w/o existing one fails the signed extension HandlesSignedExtension +#[test] +#[allow(deprecated)] +fn signed_extension_retire_handle_failure() { + new_test_ext().execute_with(|| { + let alice = sr25519::Pair::from_seed(&[0; 32]); + + // Retire the handle + let call_retire_handle: &::RuntimeCall = + &RuntimeCall::Handles(HandlesCall::retire_handle {}); + let info = DispatchInfo::default(); + let len = 0_usize; + let result = HandlesSignedExtension::::new().validate( + &alice.public().into(), + call_retire_handle, + &info, + len, + ); + assert!(result.is_err()); + }); +} + +#[test] +#[allow(deprecated)] +fn test_early_retirement_should_fail() { + new_test_ext().execute_with(|| { + let base_handle_str = "test1"; + + // Claim the handle + let alice = sr25519::Pair::from_seed(&[0; 32]); + let expiration = 10; + let (payload, proof) = + get_signed_claims_payload(&alice, base_handle_str.as_bytes().to_vec(), expiration); + assert_ok!(Handles::claim_handle( + RuntimeOrigin::signed(alice.public().into()), + alice.public().into(), + proof, + payload + )); + + run_to_block(9); + + // Retire the handle + let call_retire_handle: &::RuntimeCall = + &RuntimeCall::Handles(HandlesCall::retire_handle {}); + let info = DispatchInfo::default(); + let len = 0_usize; + let result = HandlesSignedExtension::::new().validate( + &alice.public().into(), + call_retire_handle, + &info, + len, + ); + assert!(result.is_err()); + }); +} diff --git a/pallets/handles/src/weights.rs b/pallets/handles/src/weights.rs new file mode 100644 index 0000000000..8a8a5d4b24 --- /dev/null +++ b/pallets/handles/src/weights.rs @@ -0,0 +1,219 @@ + +//! Autogenerated weights for `pallet_handles` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-04-18, STEPS: `20`, REPEAT: `10`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `ip-10-173-0-75`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` +//! WASM-EXECUTION: `Compiled`, CHAIN: `None`, DB CACHE: `1024` + +// Executed Command: +// ./scripts/../target/release/frequency +// benchmark +// pallet +// --pallet=pallet_handles +// --extrinsic +// * +// --heap-pages=4096 +// --steps=20 +// --repeat=10 +// --output=./scripts/../pallets/handles/src/weights.rs +// --template=./scripts/../.maintain/frame-weight-template.hbs +// --additional-trie-layers=3 +// --runtime=./scripts/../target/release/wbuild/frequency-runtime/frequency_runtime.wasm +// --genesis-builder=runtime + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; +use core::marker::PhantomData; + +/// Weight functions needed for `pallet_handles`. +pub trait WeightInfo { + fn claim_handle(b: u32, ) -> Weight; + fn change_handle(b: u32, ) -> Weight; + fn retire_handle() -> Weight; +} + +/// Weights for `pallet_handles` using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl WeightInfo for SubstrateWeight { + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Handles::MSAIdToDisplayName` (r:1 w:1) + /// Proof: `Handles::MSAIdToDisplayName` (`max_values`: None, `max_size`: Some(59), added: 2534, mode: `MaxEncodedLen`) + /// Storage: `Handles::CanonicalBaseHandleToSuffixIndex` (r:1 w:1) + /// Proof: `Handles::CanonicalBaseHandleToSuffixIndex` (`max_values`: None, `max_size`: Some(53), added: 2528, mode: `MaxEncodedLen`) + /// Storage: `Handles::CanonicalBaseHandleAndSuffixToMSAId` (r:0 w:1) + /// Proof: `Handles::CanonicalBaseHandleAndSuffixToMSAId` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) + /// The range of component `b` is `[3, 30]`. + fn claim_handle(b: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `116` + // Estimated: `4019` + // Minimum execution time: 116_176_000 picoseconds. + Weight::from_parts(118_886_061, 4019) + // Standard Error: 25_129 + .saturating_add(Weight::from_parts(80_447, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Handles::MSAIdToDisplayName` (r:1 w:1) + /// Proof: `Handles::MSAIdToDisplayName` (`max_values`: None, `max_size`: Some(59), added: 2534, mode: `MaxEncodedLen`) + /// Storage: `Handles::CanonicalBaseHandleToSuffixIndex` (r:1 w:1) + /// Proof: `Handles::CanonicalBaseHandleToSuffixIndex` (`max_values`: None, `max_size`: Some(53), added: 2528, mode: `MaxEncodedLen`) + /// Storage: `Handles::CanonicalBaseHandleAndSuffixToMSAId` (r:0 w:2) + /// Proof: `Handles::CanonicalBaseHandleAndSuffixToMSAId` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) + /// The range of component `b` is `[3, 30]`. + fn change_handle(b: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `222 + b * (1 ±0)` + // Estimated: `4019` + // Minimum execution time: 134_075_000 picoseconds. + Weight::from_parts(137_497_120, 4019) + // Standard Error: 31_174 + .saturating_add(Weight::from_parts(163_023, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Handles::MSAIdToDisplayName` (r:1 w:1) + /// Proof: `Handles::MSAIdToDisplayName` (`max_values`: None, `max_size`: Some(59), added: 2534, mode: `MaxEncodedLen`) + /// Storage: `Handles::CanonicalBaseHandleAndSuffixToMSAId` (r:0 w:1) + /// Proof: `Handles::CanonicalBaseHandleAndSuffixToMSAId` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) + fn retire_handle() -> Weight { + // Proof Size summary in bytes: + // Measured: `231` + // Estimated: `4019` + // Minimum execution time: 23_036_000 picoseconds. + Weight::from_parts(23_914_000, 4019) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } +} + +// For backwards compatibility and tests. +impl WeightInfo for () { + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Handles::MSAIdToDisplayName` (r:1 w:1) + /// Proof: `Handles::MSAIdToDisplayName` (`max_values`: None, `max_size`: Some(59), added: 2534, mode: `MaxEncodedLen`) + /// Storage: `Handles::CanonicalBaseHandleToSuffixIndex` (r:1 w:1) + /// Proof: `Handles::CanonicalBaseHandleToSuffixIndex` (`max_values`: None, `max_size`: Some(53), added: 2528, mode: `MaxEncodedLen`) + /// Storage: `Handles::CanonicalBaseHandleAndSuffixToMSAId` (r:0 w:1) + /// Proof: `Handles::CanonicalBaseHandleAndSuffixToMSAId` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) + /// The range of component `b` is `[3, 30]`. + fn claim_handle(b: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `116` + // Estimated: `4019` + // Minimum execution time: 116_176_000 picoseconds. + Weight::from_parts(118_886_061, 4019) + // Standard Error: 25_129 + .saturating_add(Weight::from_parts(80_447, 0).saturating_mul(b.into())) + .saturating_add(RocksDbWeight::get().reads(3_u64)) + .saturating_add(RocksDbWeight::get().writes(3_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Handles::MSAIdToDisplayName` (r:1 w:1) + /// Proof: `Handles::MSAIdToDisplayName` (`max_values`: None, `max_size`: Some(59), added: 2534, mode: `MaxEncodedLen`) + /// Storage: `Handles::CanonicalBaseHandleToSuffixIndex` (r:1 w:1) + /// Proof: `Handles::CanonicalBaseHandleToSuffixIndex` (`max_values`: None, `max_size`: Some(53), added: 2528, mode: `MaxEncodedLen`) + /// Storage: `Handles::CanonicalBaseHandleAndSuffixToMSAId` (r:0 w:2) + /// Proof: `Handles::CanonicalBaseHandleAndSuffixToMSAId` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) + /// The range of component `b` is `[3, 30]`. + fn change_handle(b: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `222 + b * (1 ±0)` + // Estimated: `4019` + // Minimum execution time: 134_075_000 picoseconds. + Weight::from_parts(137_497_120, 4019) + // Standard Error: 31_174 + .saturating_add(Weight::from_parts(163_023, 0).saturating_mul(b.into())) + .saturating_add(RocksDbWeight::get().reads(3_u64)) + .saturating_add(RocksDbWeight::get().writes(4_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Handles::MSAIdToDisplayName` (r:1 w:1) + /// Proof: `Handles::MSAIdToDisplayName` (`max_values`: None, `max_size`: Some(59), added: 2534, mode: `MaxEncodedLen`) + /// Storage: `Handles::CanonicalBaseHandleAndSuffixToMSAId` (r:0 w:1) + /// Proof: `Handles::CanonicalBaseHandleAndSuffixToMSAId` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) + fn retire_handle() -> Weight { + // Proof Size summary in bytes: + // Measured: `231` + // Estimated: `4019` + // Minimum execution time: 23_036_000 picoseconds. + Weight::from_parts(23_914_000, 4019) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(2_u64)) + } +} + + +#[cfg(test)] +mod tests { + use frame_support::{traits::Get, weights::Weight, dispatch::DispatchClass}; + use common_runtime::constants::{MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO}; + use common_runtime::weights::extrinsic_weights::ExtrinsicBaseWeight; + + #[allow(dead_code)] + struct BlockWeights; + impl Get for BlockWeights { + fn get() -> frame_system::limits::BlockWeights { + frame_system::limits::BlockWeights::builder() + .base_block(Weight::zero()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::non_mandatory(), |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .build_or_panic() + } + } + + #[test] + fn test_claim_handle() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4019 + ); + } + #[test] + fn test_change_handle() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4019 + ); + } + #[test] + fn test_retire_handle() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4019 + ); + } +} \ No newline at end of file diff --git a/pallets/messages/Cargo.toml b/pallets/messages/Cargo.toml new file mode 100644 index 0000000000..e2495179be --- /dev/null +++ b/pallets/messages/Cargo.toml @@ -0,0 +1,64 @@ +[package] +authors = ["Frequency"] +description = "Message Storage Pallet" +edition = "2021" +homepage = "https://frequency.xyz" +license = "Apache-2.0" +name = "pallet-messages" +publish = false +repository = "https://github.com/frequency-chain/frequency/" +version = "0.0.0" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[dependencies] +parity-scale-codec = { workspace = true, features = ["derive"] } +log = { workspace = true } +scale-info = { workspace = true, features = ["derive"] } +# Substrate +frame-benchmarking = { workspace = true, optional = true } +frame-support = { workspace = true } +frame-system = { workspace = true } +sp-core = { workspace = true } +sp-io = { workspace = true } +sp-runtime = { workspace = true } +# Frequency related dependencies +common-primitives = { default-features = false, path = "../../common/primitives" } +cid = { version = "0.11", default-features = false } +multibase = { version = "0.9", default-features = false } + +[dev-dependencies] +common-runtime = { path = '../../runtime/common', default-features = false } +# Testing dependencies +rand = { workspace = true } +pretty_assertions = { workspace = true } +serde = { workspace = true, features = ["derive"] } +serde_json = { workspace = true } + +[features] +default = ['std'] +runtime-benchmarks = [ + "frame-benchmarking/runtime-benchmarks", + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "common-primitives/runtime-benchmarks", + "common-runtime/runtime-benchmarks", +] +std = [ + 'parity-scale-codec/std', + 'scale-info/std', + 'sp-core/std', + 'sp-io/std', + 'sp-runtime/std', + 'frame-support/std', + 'frame-system/std', + 'frame-benchmarking/std', + 'common-primitives/std', + 'common-runtime/std', +] +try-runtime = ['frame-support/try-runtime'] +test = [] + +[lints] +workspace = true diff --git a/pallets/messages/README.md b/pallets/messages/README.md new file mode 100644 index 0000000000..46c490b694 --- /dev/null +++ b/pallets/messages/README.md @@ -0,0 +1,65 @@ +# Messages Pallet + +Stores block-indexed data for a Schema using `OnChain` or `IPFS` payload location. + +## Summary + +Messages stores metadata and message payload data for a set Schema. +Message payloads are meant for streaming data, where when the message was sent is the focus. +Discovery is via the `MessagesInBlock` on new blocks or requesting messages from a block. +Retrieval is via RPC. + +### Metadata vs Payload + +Messages have both metadata and payloads. +The payload should always match the data structure or the message is considered invalid. +The metadata is the Block Number, Schema Id, and other data useful for discovering and organizing the payload information. + +### Payload Options + +- `IPFS`: Storage of the CID and length of the file on IPFS +- `OnChain`: Storage of the entire payload data, usually for sub-256 byte payloads + +### Message Ordering + +Messages are ordered by block number, and within each block, they follow a specific order based on their transaction sequence within that block. +This order is immutable. + +### Actions + +The Messages pallet provides for: + +- Adding messages for a given schema +- Enabling the retrieval of messages for a given schema + +## Interactions + +### Extrinsics + +| Name/Description | Caller | Payment | Key Events | Runtime Added | +| ---------------------------------------------------------------------------------------- | -------- | ------------------ | --------------------------------------------------------------------------------------------------------------------------------- | ------------- | +| `add_ipfs_message`
Add a message to a Schema with an `IPFS` payload location | Provider | Capacity or Tokens | [`MessagesInBlock`](https://frequency-chain.github.io/frequency/pallet_messages/pallet/enum.Event.html#variant.MessagesInBlock)\* | 1 | +| `add_onchain_message`
Add a message to a Schema with an `ON_CHAIN` payload location | Provider | Capacity or Tokens | [`MessagesInBlock`](https://frequency-chain.github.io/frequency/pallet_messages/pallet/enum.Event.html#variant.MessagesInBlock)\* | 1 | + +\* The `MessagesInBlock` may not occur more than once per block and does _not_ indicate which schema received messages. + +See [Rust Docs](https://frequency-chain.github.io/frequency/pallet_messages/pallet/struct.Pallet.html) for more details. + +### State Queries + +| Name | Description | Query | Runtime Added | +| --------------- | ----------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------- | +| Get Messages v2 | _Suggested_: Use RPC instead of this storage directly. Storage for the messages by Block number, Schema Id, and Message Index | `messagesV2` | 61 | +| Get Messages v1 | Removed in Runtime 60 | `messages` | 1-60 | + +See the [Rust Docs](https://frequency-chain.github.io/frequency/pallet_messages/pallet/storage_types/index.html) for additional state queries and details. + +### RPCs + +Note: May be restricted based on node settings and configuration. + +| Name | Description | Call | Node Version | +| ------------------------- | ------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | +| Get Messages by Schema Id | Fetch paginated messages for a specific Schema Id in the given block range for a given Schema Id | [`getBySchemaId`](https://frequency-chain.github.io/frequency/pallet_messages_rpc/trait.MessagesApiServer.html#tymethod.get_messages_by_schema_id) | v1.0.0+ | + +See [Rust Docs](https://frequency-chain.github.io/frequency/pallet_messages_rpc/trait.MessagesApiServer.html) for more details. diff --git a/pallets/messages/src/benchmarking.rs b/pallets/messages/src/benchmarking.rs new file mode 100644 index 0000000000..1d3da084e7 --- /dev/null +++ b/pallets/messages/src/benchmarking.rs @@ -0,0 +1,151 @@ +#![allow(clippy::expect_used)] + +use super::*; +#[allow(unused)] +use crate::Pallet as MessagesPallet; +use common_primitives::{ + msa::{DelegatorId, ProviderId}, + schema::*, +}; +use frame_benchmarking::v2::*; +use frame_support::{assert_ok, pallet_prelude::DispatchResult}; +use frame_system::{pallet_prelude::BlockNumberFor, RawOrigin}; +use sp_runtime::traits::One; +extern crate alloc; +use alloc::vec; + +const SCHEMA_SIZE: u16 = 50; +const IPFS_PAYLOAD_LENGTH: u32 = 10; +const MAX_MESSAGES_IN_BLOCK: u32 = 500; +const ON_CHAIN_SCHEMA_ID: u16 = 16001; +// this value should be the same as the one used in mocks tests +const IPFS_SCHEMA_ID: u16 = 20; + +fn onchain_message(schema_id: SchemaId) -> DispatchResult { + let message_source_id = DelegatorId(1); + let provider_id = ProviderId(1); + let payload = Vec::from( + "{'fromId': 123, 'content': '232323', 'fromId': 123, 'content': '232323'}".as_bytes(), + ); + let bounded_payload: BoundedVec = + payload.try_into().expect("Invalid payload"); + MessagesPallet::::add_message( + provider_id.into(), + Some(message_source_id.into()), + bounded_payload, + schema_id, + BlockNumberFor::::one(), + )?; + Ok(()) +} + +/// Helper function to call MessagesPallet::::add_ipfs_message +fn ipfs_message(schema_id: SchemaId) -> DispatchResult { + let payload = + Vec::from("bafkreidgvpkjawlxz6sffxzwgooowe5yt7i6wsyg236mfoks77nywkptdq".as_bytes()); + let provider_id = ProviderId(1); + let bounded_payload: BoundedVec = + payload.try_into().expect("Invalid payload"); + + MessagesPallet::::add_message( + provider_id.into(), + None, + bounded_payload, + schema_id, + BlockNumberFor::::one(), + )?; + + Ok(()) +} + +fn create_schema(location: PayloadLocation) -> DispatchResult { + T::SchemaBenchmarkHelper::create_schema( + Vec::from(r#"{"Name": "Bond", "Code": "007"}"#.as_bytes()), + ModelType::AvroBinary, + location, + ) +} + +#[benchmarks] +mod benchmarks { + use super::*; + + #[benchmark] + fn add_onchain_message( + n: Linear<0, { T::MessagesMaxPayloadSizeBytes::get() - 1 }>, + ) -> Result<(), BenchmarkError> { + let message_source_id = DelegatorId(2); + let caller: T::AccountId = whitelisted_caller(); + let schema_id = ON_CHAIN_SCHEMA_ID; + + // schema ids start from 1, and we need to add that many to make sure our desired id exists + for _ in 0..=SCHEMA_SIZE { + assert_ok!(create_schema::(PayloadLocation::OnChain)); + } + + assert_ok!(T::MsaBenchmarkHelper::add_key(ProviderId(1).into(), caller.clone())); + assert_ok!(T::MsaBenchmarkHelper::set_delegation_relationship( + ProviderId(1), + message_source_id, + [schema_id].to_vec() + )); + + let payload = vec![1; n as usize]; + for _ in 1..MAX_MESSAGES_IN_BLOCK { + assert_ok!(onchain_message::(schema_id)); + } + + #[extrinsic_call] + _(RawOrigin::Signed(caller), Some(message_source_id.into()), schema_id, payload); + + assert_eq!( + MessagesPallet::::get_messages_by_schema_and_block( + schema_id, + PayloadLocation::OnChain, + BlockNumberFor::::one() + ) + .len(), + MAX_MESSAGES_IN_BLOCK as usize + ); + + Ok(()) + } + + #[benchmark] + fn add_ipfs_message() -> Result<(), BenchmarkError> { + let caller: T::AccountId = whitelisted_caller(); + let cid = "bafkreidgvpkjawlxz6sffxzwgooowe5yt7i6wsyg236mfoks77nywkptdq" + .as_bytes() + .to_vec(); + let schema_id = IPFS_SCHEMA_ID; + + // schema ids start from 1, and we need to add that many to make sure our desired id exists + for _ in 0..=SCHEMA_SIZE { + assert_ok!(create_schema::(PayloadLocation::IPFS)); + } + assert_ok!(T::MsaBenchmarkHelper::add_key(ProviderId(1).into(), caller.clone())); + for _ in 1..MAX_MESSAGES_IN_BLOCK { + assert_ok!(ipfs_message::(schema_id)); + } + + #[extrinsic_call] + _(RawOrigin::Signed(caller), schema_id, cid, IPFS_PAYLOAD_LENGTH); + + assert_eq!( + MessagesPallet::::get_messages_by_schema_and_block( + schema_id, + PayloadLocation::IPFS, + BlockNumberFor::::one() + ) + .len(), + MAX_MESSAGES_IN_BLOCK as usize + ); + Ok(()) + } + + impl_benchmark_test_suite!( + MessagesPallet, + crate::tests::mock::new_test_ext(), + crate::tests::mock::Test + ); +} diff --git a/pallets/messages/src/lib.rs b/pallets/messages/src/lib.rs new file mode 100644 index 0000000000..df46c198b8 --- /dev/null +++ b/pallets/messages/src/lib.rs @@ -0,0 +1,385 @@ +//! Stores messages for `IPFS` and `OnChain` Schema payload locations +//! +//! ## Quick Links +//! - [Configuration: `Config`](Config) +//! - [Extrinsics: `Call`](Call) +//! - [Runtime API: `MessagesRuntimeApi`](../pallet_messages_runtime_api/trait.MessagesRuntimeApi.html) +//! - [Custom RPC API: `MessagesApiServer`](../pallet_messages_rpc/trait.MessagesApiServer.html) +//! - [Event Enum: `Event`](Event) +//! - [Error Enum: `Error`](Error) +#![doc = include_str!("../README.md")] +// Substrate macros are tripping the clippy::expect_used lint. +#![allow(clippy::expect_used)] +// Ensure we're `no_std` when compiling for Wasm. +#![cfg_attr(not(feature = "std"), no_std)] +// Strong Documentation Lints +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + missing_docs +)] + +#[cfg(feature = "runtime-benchmarks")] +mod benchmarking; +#[cfg(test)] +mod tests; + +pub mod weights; + +mod types; + +use core::{convert::TryInto, fmt::Debug}; +use frame_support::{ensure, pallet_prelude::Weight, traits::Get, BoundedVec}; +use sp_runtime::DispatchError; + +extern crate alloc; +use alloc::vec::Vec; +use common_primitives::{ + messages::*, + msa::{ + DelegatorId, MessageSourceId, MsaLookup, MsaValidator, ProviderId, SchemaGrantValidator, + }, + schema::*, +}; +use frame_support::dispatch::DispatchResult; +use parity_scale_codec::Encode; + +#[cfg(feature = "runtime-benchmarks")] +use common_primitives::benchmarks::{MsaBenchmarkHelper, SchemaBenchmarkHelper}; + +pub use pallet::*; +pub use types::*; +pub use weights::*; + +use cid::Cid; +use frame_system::pallet_prelude::*; + +#[frame_support::pallet] +pub mod pallet { + use super::*; + use frame_support::pallet_prelude::*; + + /// The current storage version. + pub const STORAGE_VERSION: StorageVersion = StorageVersion::new(2); + + #[pallet::config] + pub trait Config: frame_system::Config { + /// The overarching event type. + type RuntimeEvent: From> + IsType<::RuntimeEvent>; + + /// Weight information for extrinsics in this pallet. + type WeightInfo: WeightInfo; + + /// A type that will supply MSA related information + type MsaInfoProvider: MsaLookup + MsaValidator; + + /// A type that will validate schema grants + type SchemaGrantValidator: SchemaGrantValidator>; + + /// A type that will supply schema related information. + type SchemaProvider: SchemaProvider; + + /// The maximum size of a message payload bytes. + #[pallet::constant] + type MessagesMaxPayloadSizeBytes: Get + Clone + Debug + MaxEncodedLen; + + #[cfg(feature = "runtime-benchmarks")] + /// A set of helper functions for benchmarking. + type MsaBenchmarkHelper: MsaBenchmarkHelper; + + #[cfg(feature = "runtime-benchmarks")] + /// A set of helper functions for benchmarking. + type SchemaBenchmarkHelper: SchemaBenchmarkHelper; + } + + #[pallet::pallet] + #[pallet::storage_version(STORAGE_VERSION)] + pub struct Pallet(_); + + /// A temporary storage for getting the index for messages + /// At the start of the next block this storage is set to 0 + #[pallet::storage] + #[pallet::whitelist_storage] + pub(super) type BlockMessageIndex = StorageValue<_, MessageIndex, ValueQuery>; + + #[pallet::storage] + pub(super) type MessagesV2 = StorageNMap< + _, + ( + storage::Key>, + storage::Key, + storage::Key, + ), + Message, + OptionQuery, + >; + + #[pallet::error] + pub enum Error { + /// Deprecated: Too many messages are added to existing block + TooManyMessagesInBlock, + + /// Message payload size is too large + ExceedsMaxMessagePayloadSizeBytes, + + /// Type Conversion Overflow + TypeConversionOverflow, + + /// Invalid Message Source Account + InvalidMessageSourceAccount, + + /// Invalid SchemaId or Schema not found + InvalidSchemaId, + + /// UnAuthorizedDelegate + UnAuthorizedDelegate, + + /// Invalid payload location + InvalidPayloadLocation, + + /// Unsupported CID version + UnsupportedCidVersion, + + /// Invalid CID + InvalidCid, + } + + #[pallet::event] + #[pallet::generate_deposit(pub(super) fn deposit_event)] + pub enum Event { + /// Deprecated: please use [`Event::MessagesInBlock`] + /// Messages are stored for a specified schema id and block number + MessagesStored { + /// The schema for these messages + schema_id: SchemaId, + /// The block number for these messages + block_number: BlockNumberFor, + }, + /// Messages stored in the current block + MessagesInBlock, + } + + #[pallet::hooks] + impl Hooks> for Pallet { + fn on_initialize(_current: BlockNumberFor) -> Weight { + >::set(0u16); + // allocates 1 read and 1 write for any access of `MessageIndex` in every block + T::DbWeight::get().reads(1u64).saturating_add(T::DbWeight::get().writes(1u64)) + // TODO: add retention policy execution GitHub Issue: #126 and #25 + } + } + + #[pallet::call] + impl Pallet { + /// Adds a message for a resource hosted on IPFS. The input consists of + /// both a Base32-encoded [CID](https://docs.ipfs.tech/concepts/content-addressing/#version-1-v1) + /// as well as a 32-bit content length. The stored payload will contain the + /// CID encoded as binary, as well as the 32-bit message content length. + /// The actual message content will be on IPFS. + /// + /// # Events + /// * [`Event::MessagesInBlock`] - Messages Stored in the block + /// + /// # Errors + /// * [`Error::ExceedsMaxMessagePayloadSizeBytes`] - Payload is too large + /// * [`Error::InvalidSchemaId`] - Schema not found + /// * [`Error::InvalidPayloadLocation`] - The schema is not an IPFS payload location + /// * [`Error::InvalidMessageSourceAccount`] - Origin must be from an MSA + /// * [`Error::TypeConversionOverflow`] - Failed to add the message to storage as it is very full + /// * [`Error::UnsupportedCidVersion`] - CID version is not supported (V0) + /// * [`Error::InvalidCid`] - Unable to parse provided CID + /// + #[pallet::call_index(0)] + #[pallet::weight(T::WeightInfo::add_ipfs_message())] + pub fn add_ipfs_message( + origin: OriginFor, + #[pallet::compact] schema_id: SchemaId, + cid: Vec, + #[pallet::compact] payload_length: u32, + ) -> DispatchResult { + let provider_key = ensure_signed(origin)?; + let cid_binary = Self::validate_cid(&cid)?; + let payload_tuple: OffchainPayloadType = (cid_binary, payload_length); + let bounded_payload: BoundedVec = payload_tuple + .encode() + .try_into() + .map_err(|_| Error::::ExceedsMaxMessagePayloadSizeBytes)?; + + if let Some(schema) = T::SchemaProvider::get_schema_info_by_id(schema_id) { + ensure!( + schema.payload_location == PayloadLocation::IPFS, + Error::::InvalidPayloadLocation + ); + + let provider_msa_id = Self::find_msa_id(&provider_key)?; + let current_block = frame_system::Pallet::::block_number(); + if Self::add_message( + provider_msa_id, + None, + bounded_payload, + schema_id, + current_block, + )? { + Self::deposit_event(Event::MessagesInBlock); + } + Ok(()) + } else { + Err(Error::::InvalidSchemaId.into()) + } + } + + /// Add an on-chain message for a given schema id. + /// + /// # Events + /// * [`Event::MessagesInBlock`] - In the next block + /// + /// # Errors + /// * [`Error::ExceedsMaxMessagePayloadSizeBytes`] - Payload is too large + /// * [`Error::InvalidSchemaId`] - Schema not found + /// * [`Error::InvalidPayloadLocation`] - The schema is not an IPFS payload location + /// * [`Error::InvalidMessageSourceAccount`] - Origin must be from an MSA + /// * [`Error::UnAuthorizedDelegate`] - Trying to add a message without a proper delegation between the origin and the on_behalf_of MSA + /// * [`Error::TypeConversionOverflow`] - Failed to add the message to storage as it is very full + /// + #[pallet::call_index(1)] + #[pallet::weight(T::WeightInfo::add_onchain_message(payload.len() as u32))] + pub fn add_onchain_message( + origin: OriginFor, + on_behalf_of: Option, + #[pallet::compact] schema_id: SchemaId, + payload: Vec, + ) -> DispatchResult { + let provider_key = ensure_signed(origin)?; + + let bounded_payload: BoundedVec = + payload.try_into().map_err(|_| Error::::ExceedsMaxMessagePayloadSizeBytes)?; + + if let Some(schema) = T::SchemaProvider::get_schema_info_by_id(schema_id) { + ensure!( + schema.payload_location == PayloadLocation::OnChain, + Error::::InvalidPayloadLocation + ); + + let provider_msa_id = Self::find_msa_id(&provider_key)?; + let provider_id = ProviderId(provider_msa_id); + + let current_block = frame_system::Pallet::::block_number(); + // On-chain messages either are sent from the user themselves, or on behalf of another MSA Id + let maybe_delegator = match on_behalf_of { + Some(delegator_msa_id) => { + let delegator_id = DelegatorId(delegator_msa_id); + T::SchemaGrantValidator::ensure_valid_schema_grant( + provider_id, + delegator_id, + schema_id, + current_block, + ) + .map_err(|_| Error::::UnAuthorizedDelegate)?; + delegator_id + }, + None => DelegatorId(provider_msa_id), // Delegate is also the Provider + }; + + if Self::add_message( + provider_msa_id, + Some(maybe_delegator.into()), + bounded_payload, + schema_id, + current_block, + )? { + Self::deposit_event(Event::MessagesInBlock); + } + + Ok(()) + } else { + Err(Error::::InvalidSchemaId.into()) + } + } + } +} + +impl Pallet { + /// Stores a message for a given schema id. + /// returns true if it needs to emit an event + /// # Errors + /// * [`Error::TypeConversionOverflow`] + /// + pub fn add_message( + provider_msa_id: MessageSourceId, + msa_id: Option, + payload: BoundedVec, + schema_id: SchemaId, + current_block: BlockNumberFor, + ) -> Result { + let index = BlockMessageIndex::::get(); + let first = index == 0; + let msg = Message { + payload, // size is checked on top of extrinsic + provider_msa_id, + msa_id, + }; + + >::insert((current_block, schema_id, index), msg); + BlockMessageIndex::::set(index.saturating_add(1)); + Ok(first) + } + + /// Resolve an MSA from an account key(key) + /// An MSA Id associated with the account key is returned, if one exists. + /// + /// # Errors + /// * [`Error::InvalidMessageSourceAccount`] + /// + pub fn find_msa_id(key: &T::AccountId) -> Result { + Ok(T::MsaInfoProvider::ensure_valid_msa_key(key) + .map_err(|_| Error::::InvalidMessageSourceAccount)?) + } + + /// Gets a messages for a given schema-id and block-number. + /// + /// Payload location is included to map to correct response (To avoid fetching the schema in this method) + /// + /// Result is a vector of [`MessageResponse`]. + /// + pub fn get_messages_by_schema_and_block( + schema_id: SchemaId, + schema_payload_location: PayloadLocation, + block_number: BlockNumberFor, + ) -> Vec { + let block_number_value: u32 = block_number.try_into().unwrap_or_default(); + + match schema_payload_location { + PayloadLocation::Itemized | PayloadLocation::Paginated => Vec::new(), + _ => { + let mut messages: Vec<_> = >::iter_prefix((block_number, schema_id)) + .map(|(index, msg)| { + msg.map_to_response(block_number_value, schema_payload_location, index) + }) + .collect(); + messages.sort_by(|a, b| a.index.cmp(&b.index)); + messages + }, + } + } + + /// Validates a CID to conform to IPFS CIDv1 (or higher) formatting (does not validate decoded CID fields) + /// + /// # Errors + /// * [`Error::UnsupportedCidVersion`] - CID version is not supported (V0) + /// * [`Error::InvalidCid`] - Unable to parse provided CID + /// + pub fn validate_cid(in_cid: &[u8]) -> Result, DispatchError> { + // Decode SCALE encoded CID into string slice + let cid_str: &str = core::str::from_utf8(in_cid).map_err(|_| Error::::InvalidCid)?; + ensure!(cid_str.len() > 2, Error::::InvalidCid); + // starts_with handles Unicode multibyte characters safely + ensure!(!cid_str.starts_with("Qm"), Error::::UnsupportedCidVersion); + + // Assume it's a multibase-encoded string. Decode it to a byte array so we can parse the CID. + let cid_b = multibase::decode(cid_str).map_err(|_| Error::::InvalidCid)?.1; + ensure!(Cid::read_bytes(&cid_b[..]).is_ok(), Error::::InvalidCid); + + Ok(cid_b) + } +} diff --git a/pallets/messages/src/rpc/Cargo.toml b/pallets/messages/src/rpc/Cargo.toml new file mode 100644 index 0000000000..8fee89c165 --- /dev/null +++ b/pallets/messages/src/rpc/Cargo.toml @@ -0,0 +1,40 @@ +[package] +name = "pallet-messages-rpc" +version = "0.0.0" +description = "A package that adds RPC to Messages pallet" +authors = ["Frequency"] +license = "Apache-2.0" +publish = false +homepage = "https://frequency.xyz" +repository = "https://github.com/frequency-chain/frequency/" +edition = "2021" + +[dependencies] +jsonrpsee = { workspace = true, features = ["client-core", "server", "macros"] } +# Frequency crates +pallet-messages-runtime-api = { default-features = false, path = "../runtime-api" } +common-primitives = { default-features = false, path = "../../../../common/primitives" } +common-helpers = { default-features = false, path = "../../../../common/helpers" } +# Substrate crates +sp-api = { workspace = true } +sp-blockchain = { workspace = true } +sp-runtime = { workspace = true } +frame-support = { workspace = true } + +[dev-dependencies] +tokio = { workspace = true, features = ["macros", "time", "parking_lot"] } +sc-client-api = { workspace = true } + +[features] +default = ["std"] +std = [ + "sp-api/std", + "sp-runtime/std", + 'frame-support/std', + "pallet-messages-runtime-api/std", + 'common-primitives/std', + "common-helpers/std", +] + +[lints] +workspace = true diff --git a/pallets/messages/src/rpc/src/lib.rs b/pallets/messages/src/rpc/src/lib.rs new file mode 100644 index 0000000000..fac23c9e7f --- /dev/null +++ b/pallets/messages/src/rpc/src/lib.rs @@ -0,0 +1,137 @@ +// Strong Documentation Lints +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + missing_docs +)] + +//! Custom APIs for [Messages](../pallet_messages/index.html) + +#[cfg(feature = "std")] +use common_helpers::rpc::map_rpc_result; +use common_primitives::{messages::*, schema::*}; +use frame_support::{ensure, fail}; +use jsonrpsee::{ + core::{async_trait, RpcResult}, + proc_macros::rpc, + types::{ErrorObject, ErrorObjectOwned}, +}; +use pallet_messages_runtime_api::MessagesRuntimeApi; +use sp_api::ProvideRuntimeApi; +use sp_blockchain::HeaderBackend; +use sp_runtime::traits::Block as BlockT; +use std::sync::Arc; + +#[cfg(test)] +mod tests; + +/// Frequency Messages Custom RPC API +#[rpc(client, server)] +pub trait MessagesApi { + /// Retrieve paginated messages by schema id + #[method(name = "messages_getBySchemaId")] + fn get_messages_by_schema_id( + &self, + schema_id: SchemaId, + pagination: BlockPaginationRequest, + ) -> RpcResult>; +} + +/// The client handler for the API used by Frequency Service RPC with `jsonrpsee` +pub struct MessagesHandler { + client: Arc, + _marker: std::marker::PhantomData, +} + +impl MessagesHandler { + /// Create new instance with the given reference to the client. + pub fn new(client: Arc) -> Self { + Self { client, _marker: Default::default() } + } +} + +/// Errors that occur on the client RPC +#[derive(Debug)] +pub enum MessageRpcError { + /// Pagination request is bad + InvalidPaginationRequest, + /// Likely passed u32 block count + TypeConversionOverflow, + /// Schema Id doesn't exist or errored when retrieving from state + InvalidSchemaId, +} + +impl From for ErrorObjectOwned { + fn from(e: MessageRpcError) -> Self { + let msg = format!("{:?}", e); + match e { + MessageRpcError::InvalidPaginationRequest => ErrorObject::owned(1, msg, None::<()>), + MessageRpcError::TypeConversionOverflow => ErrorObject::owned(2, msg, None::<()>), + MessageRpcError::InvalidSchemaId => ErrorObject::owned(3, msg, None::<()>), + } + } +} + +#[async_trait] +impl MessagesApiServer for MessagesHandler +where + Block: BlockT, + C: ProvideRuntimeApi + HeaderBackend + 'static, + C::Api: MessagesRuntimeApi, +{ + fn get_messages_by_schema_id( + &self, + schema_id: SchemaId, + pagination: BlockPaginationRequest, + ) -> RpcResult> { + // Request Validation + ensure!(pagination.validate(), MessageRpcError::InvalidPaginationRequest); + + // Connect to on-chain data + let api = self.client.runtime_api(); + let at = self.client.info().best_hash; + + // Schema Fetch and Check + let schema: SchemaResponse = match api.get_schema_by_id(at, schema_id) { + Ok(Some(s)) => s, + _ => fail!(MessageRpcError::InvalidSchemaId), + }; + + let mut response = BlockPaginationResponse::new(); + let from: u32 = pagination.from_block; + let to: u32 = pagination.to_block; + let mut from_index = pagination.from_index; + + 'loops: for block_number in from..to { + let list: Vec = api + .get_messages_by_schema_and_block( + at, + schema.schema_id, + schema.payload_location, + block_number, + ) + .unwrap_or_default(); + + let list_size: u32 = + list.len().try_into().map_err(|_| MessageRpcError::TypeConversionOverflow)?; + for i in from_index..list_size { + response.content.push(list[i as usize].clone()); + + if response.check_end_condition_and_set_next_pagination( + block_number, + i, + list_size, + &pagination, + ) { + break 'loops + } + } + + // next block starts from 0 + from_index = 0; + } + + map_rpc_result(Ok(response)) + } +} diff --git a/pallets/messages/src/rpc/src/tests/mod.rs b/pallets/messages/src/rpc/src/tests/mod.rs new file mode 100644 index 0000000000..805c2349de --- /dev/null +++ b/pallets/messages/src/rpc/src/tests/mod.rs @@ -0,0 +1,116 @@ +mod rpc_mock; + +use super::*; +use rpc_mock::*; + +use common_primitives::node::{Block, BlockNumber}; +use pallet_messages_runtime_api::MessagesRuntimeApi; +use std::sync::Arc; + +const SCHEMA_ID_EMPTY: u16 = 1; +const SCHEMA_ID_HAS_MESSAGES: u16 = 2; +const DUMMY_CID: &str = "bafkreidgvpkjawlxz6sffxzwgooowe5yt7i6wsyg236mfoks77nywkptdq"; + +fn test_messages() -> Vec { + vec![ + MessageResponse { + payload: None, + msa_id: None, + provider_msa_id: 1, + index: 0, + block_number: 1, + cid: Some(DUMMY_CID.as_bytes().to_vec()), + payload_length: Some(42), + }, + MessageResponse { + payload: None, + msa_id: None, + provider_msa_id: 1, + index: 1, + block_number: 1, + cid: Some(DUMMY_CID.as_bytes().to_vec()), + payload_length: Some(42), + }, + ] +} + +sp_api::mock_impl_runtime_apis! { + impl MessagesRuntimeApi for TestRuntimeApi { + fn get_schema_by_id(schema_id: SchemaId) -> Option { + match schema_id { + SCHEMA_ID_EMPTY | SCHEMA_ID_HAS_MESSAGES => Some(SchemaResponse { + schema_id, + model: b"schema".to_vec(), + model_type: ModelType::AvroBinary, + payload_location: PayloadLocation::OnChain, + settings: Vec::new(), + }), + _ => None, + } + } + + fn get_messages_by_schema_and_block(schema_id: SchemaId, _schema_payload_location: PayloadLocation, _block_number: BlockNumber) -> + Vec { + match schema_id { + SCHEMA_ID_HAS_MESSAGES => test_messages(), + _ => vec![] + } + } + } +} + +type GetMessagesBySchemaResult = Result< + common_primitives::messages::BlockPaginationResponse< + common_primitives::messages::MessageResponse, + >, + jsonrpsee::types::ErrorObjectOwned, +>; + +#[tokio::test] +async fn get_messages_by_schema_with_invalid_request_should_panic() { + let client = Arc::new(TestApi {}); + let api = MessagesHandler::new(client); + + let result: GetMessagesBySchemaResult = api.get_messages_by_schema_id( + SCHEMA_ID_EMPTY, // Schema Id + BlockPaginationRequest { from_block: 1, to_block: 2, from_index: 0, page_size: 0 }, + ); + + assert!(result.is_err()); + assert_eq!("InvalidPaginationRequest", result.unwrap_err().message()); +} + +#[tokio::test] +async fn get_messages_by_schema_with_bad_schema_id_should_err() { + let client = Arc::new(TestApi {}); + let api = MessagesHandler::new(client); + + let result: GetMessagesBySchemaResult = api.get_messages_by_schema_id( + 0, // Schema Id + BlockPaginationRequest { from_block: 1, to_block: 5, from_index: 0, page_size: 10 }, + ); + + assert!(result.clone().is_err()); + assert_eq!("InvalidSchemaId", result.unwrap_err().message()); +} + +#[tokio::test] +async fn get_messages_by_schema_with_success() { + let client = Arc::new(TestApi {}); + let api = MessagesHandler::new(client); + + let result: GetMessagesBySchemaResult = api.get_messages_by_schema_id( + SCHEMA_ID_HAS_MESSAGES, // Schema Id + BlockPaginationRequest { from_block: 1, to_block: 5, from_index: 0, page_size: 2 }, + ); + + assert!(result.is_ok()); + let response = result.unwrap(); + // Because the page size is set to 2, we only get one set of messages + assert_eq!(test_messages(), response.content); + // There is more because we haven't done all the blocks yet + assert!(response.has_next); + // Next block is 2 and index 0 as block 1 just has those two messages + assert_eq!(Some(2), response.next_block); + assert_eq!(Some(0), response.next_index); +} diff --git a/pallets/messages/src/rpc/src/tests/rpc_mock.rs b/pallets/messages/src/rpc/src/tests/rpc_mock.rs new file mode 100644 index 0000000000..54c23bdd22 --- /dev/null +++ b/pallets/messages/src/rpc/src/tests/rpc_mock.rs @@ -0,0 +1,61 @@ +use common_primitives::node::Block; +use sp_api::{ApiRef, ProvideRuntimeApi}; + +use sp_blockchain::HeaderBackend; +use sp_runtime::traits::{Block as BlockT, NumberFor, Zero}; + +pub struct TestApi {} + +pub struct TestRuntimeApi {} + +impl ProvideRuntimeApi for TestApi { + type Api = TestRuntimeApi; + + fn runtime_api(&self) -> ApiRef<'_, Self::Api> { + TestRuntimeApi {}.into() + } +} + +/// Blockchain database header backend. Does not perform any validation. +impl HeaderBackend for TestApi { + fn header( + &self, + _id: Block::Hash, + ) -> std::result::Result, sp_blockchain::Error> { + Ok(None) + } + + fn info(&self) -> sc_client_api::blockchain::Info { + sc_client_api::blockchain::Info { + best_hash: Default::default(), + best_number: Zero::zero(), + finalized_hash: Default::default(), + finalized_number: Zero::zero(), + genesis_hash: Default::default(), + number_leaves: Default::default(), + finalized_state: None, + block_gap: None, + } + } + + fn status( + &self, + _id: Block::Hash, + ) -> std::result::Result { + Ok(sc_client_api::blockchain::BlockStatus::Unknown) + } + + fn number( + &self, + _hash: Block::Hash, + ) -> std::result::Result>, sp_blockchain::Error> { + Ok(None) + } + + fn hash( + &self, + _number: NumberFor, + ) -> std::result::Result, sp_blockchain::Error> { + Ok(None) + } +} diff --git a/pallets/messages/src/runtime-api/Cargo.toml b/pallets/messages/src/runtime-api/Cargo.toml new file mode 100644 index 0000000000..66be98f46a --- /dev/null +++ b/pallets/messages/src/runtime-api/Cargo.toml @@ -0,0 +1,24 @@ +[package] +name = "pallet-messages-runtime-api" +version = "0.0.0" +description = "A package that adds Runtime Api for Messages pallet" +authors = ["Frequency"] +license = "Apache-2.0" +publish = false +homepage = "https://frequency.xyz" +repository = "https://github.com/frequency-chain/frequency/" +edition = "2021" + +[dependencies] +# Substrate +sp-api= { workspace = true } +frame-support = { workspace = true } +# Frequency related dependencies +common-primitives = { default-features = false, path = "../../../../common/primitives" } + +[features] +default = ["std"] +std = ["frame-support/std", "sp-api/std", "common-primitives/std"] + +[lints] +workspace = true diff --git a/pallets/messages/src/runtime-api/src/lib.rs b/pallets/messages/src/runtime-api/src/lib.rs new file mode 100644 index 0000000000..8879655c84 --- /dev/null +++ b/pallets/messages/src/runtime-api/src/lib.rs @@ -0,0 +1,43 @@ +#![cfg_attr(not(feature = "std"), no_std)] +#![allow(clippy::too_many_arguments)] +#![allow(clippy::unnecessary_mut_passed)] +#![allow(rustdoc::bare_urls)] +// Strong Documentation Lints +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + missing_docs +)] + +//! Runtime API definition for [Messages](../pallet_messages/index.html) +//! +//! This api must be implemented by the node runtime. +//! Runtime APIs Provide: +//! - An interface between the runtime and Custom RPCs. +//! - Runtime interfaces for end users beyond just State Queries + +use common_primitives::{messages::*, node::BlockNumber, schema::*}; +extern crate alloc; +use alloc::vec::Vec; + +// Here we declare the runtime API. It is implemented it the `impl` block in +// runtime files (the `runtime` folder) +sp_api::decl_runtime_apis! { + + /// Runtime Version for Messages + /// - MUST be incremented if anything changes + /// - See: https://paritytech.github.io/polkadot/doc/polkadot_primitives/runtime_api/index.html + #[api_version(1)] + + /// Runtime APIs for [Messages](../pallet_messages/index.html) + pub trait MessagesRuntimeApi + { + /// Retrieve the messages for a particular schema and block number + fn get_messages_by_schema_and_block(schema_id: SchemaId, schema_payload_location: PayloadLocation, block_number: BlockNumber) -> + Vec; + + /// Retrieve a schema by id + fn get_schema_by_id(schema_id: SchemaId) -> Option; + } +} diff --git a/pallets/messages/src/tests/mock.rs b/pallets/messages/src/tests/mock.rs new file mode 100644 index 0000000000..25fef2446c --- /dev/null +++ b/pallets/messages/src/tests/mock.rs @@ -0,0 +1,271 @@ +use crate as pallet_messages; +use common_primitives::{ + msa::{ + Delegation, DelegationValidator, DelegatorId, MessageSourceId, MsaLookup, MsaValidator, + ProviderId, ProviderLookup, SchemaGrantValidator, + }, + schema::*, +}; + +use frame_support::{ + dispatch::DispatchResult, + parameter_types, + traits::{ConstU16, ConstU32, OnFinalize, OnInitialize}, +}; +use frame_system as system; +use parity_scale_codec::{Encode, MaxEncodedLen}; +use sp_core::H256; +use sp_runtime::{ + traits::{BlakeTwo256, IdentityLookup}, + BuildStorage, DispatchError, +}; +use std::fmt::Formatter; + +type Block = frame_system::mocking::MockBlockU32; + +pub const INVALID_SCHEMA_ID: SchemaId = 65534; +// this value should be the same as the one used in benchmarking +pub const IPFS_SCHEMA_ID: SchemaId = 20; + +pub const IPFS_PAYLOAD_LENGTH: u32 = 1200; + +pub const DUMMY_CID_BASE32: &[u8; 59] = + b"bafkreieb2x7yyuhy6hmct4j7tkmgnthrfpqyo4mt5nscx7pvc6oiweiwjq"; +pub const DUMMY_CID_BASE64: &[u8; 49] = b"mAVUSIIHV/4xQ+PHYKfE/mphmzPEr4Ydxk+tkK/31F5yLERZM"; + +// Configure a mock runtime to test the pallet. +frame_support::construct_runtime!( + pub enum Test + { + System: frame_system::{Pallet, Call, Config, Storage, Event}, + MessagesPallet: pallet_messages::{Pallet, Call, Storage, Event}, + } +); + +impl system::Config for Test { + type BaseCallFilter = frame_support::traits::Everything; + type BlockWeights = (); + type BlockLength = (); + type DbWeight = (); + type RuntimeOrigin = RuntimeOrigin; + type RuntimeCall = RuntimeCall; + type Nonce = u64; + type Block = Block; + type Hash = H256; + type Hashing = BlakeTwo256; + type AccountId = u64; + type Lookup = IdentityLookup; + type RuntimeEvent = RuntimeEvent; + type BlockHashCount = ConstU32<250>; + type RuntimeTask = RuntimeTask; + type Version = (); + type PalletInfo = PalletInfo; + type AccountData = (); + type OnNewAccount = (); + type OnKilledAccount = (); + type SystemWeightInfo = (); + type SS58Prefix = ConstU16<42>; + type OnSetCode = (); + type MaxConsumers = ConstU32<16>; + type SingleBlockMigrations = (); + type MultiBlockMigrator = (); + type PreInherents = (); + type PostInherents = (); + type PostTransactions = (); + type ExtensionsWeightInfo = (); +} + +pub type MaxSchemaGrantsPerDelegation = ConstU32<30>; + +// Needs parameter_types! for the impls below +parameter_types! { + // Max payload size was picked specifically to be large enough to accommodate + // a CIDv1 using SHA2-256, but too small to accommodate CIDv1 w/SHA2-512. + // This is purely so that we can test the error condition. Real world configuration + // should have this set large enough to accommodate the largest possible CID. + // Take care when adding new tests for on-chain (not IPFS) messages that the payload + // is not too big. + pub const MessagesMaxPayloadSizeBytes: u32 = 73; + +} + +impl std::fmt::Debug for MessagesMaxPayloadSizeBytes { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + f.debug_struct("MessagesMaxPayloadSizeBytes") + .field("v", &MessagesMaxPayloadSizeBytes::get()) + .finish() + } +} + +impl PartialEq for MessagesMaxPayloadSizeBytes { + fn eq(&self, _other: &Self) -> bool { + true + } +} + +impl Clone for MessagesMaxPayloadSizeBytes { + fn clone(&self) -> Self { + MessagesMaxPayloadSizeBytes {} + } +} + +impl Encode for MessagesMaxPayloadSizeBytes {} + +impl MaxEncodedLen for MessagesMaxPayloadSizeBytes { + fn max_encoded_len() -> usize { + u32::max_encoded_len() + } +} + +pub struct MsaInfoHandler; +pub struct DelegationInfoHandler; +pub struct SchemaGrantValidationHandler; +impl MsaLookup for MsaInfoHandler { + type AccountId = u64; + + fn get_msa_id(key: &Self::AccountId) -> Option { + if *key == 1000 { + return None + } + if *key == 2000 { + return Some(2000 as MessageSourceId) + } + Some(get_msa_from_account(*key) as MessageSourceId) + } +} + +impl MsaValidator for MsaInfoHandler { + type AccountId = u64; + + fn ensure_valid_msa_key(key: &Self::AccountId) -> Result { + if *key == 1000 { + return Err(DispatchError::Other("some error")) + } + if *key == 2000 { + return Ok(2000) + } + + Ok(get_msa_from_account(*key)) + } +} +impl ProviderLookup for DelegationInfoHandler { + type BlockNumber = u32; + type MaxSchemaGrantsPerDelegation = MaxSchemaGrantsPerDelegation; + type SchemaId = SchemaId; + + fn get_delegation_of( + _delegator: DelegatorId, + provider: ProviderId, + ) -> Option> { + if provider == ProviderId(2000) { + return None + }; + Some(Delegation { revoked_at: 100, schema_permissions: Default::default() }) + } +} +impl DelegationValidator for DelegationInfoHandler { + type BlockNumber = u32; + type MaxSchemaGrantsPerDelegation = MaxSchemaGrantsPerDelegation; + type SchemaId = SchemaId; + + fn ensure_valid_delegation( + provider: ProviderId, + _delegator: DelegatorId, + _block_number: Option, + ) -> Result< + Delegation, + DispatchError, + > { + if provider == ProviderId(2000) { + return Err(DispatchError::Other("some delegation error")) + }; + + Ok(Delegation { schema_permissions: Default::default(), revoked_at: Default::default() }) + } +} +impl SchemaGrantValidator for SchemaGrantValidationHandler { + fn ensure_valid_schema_grant( + provider: ProviderId, + delegator: DelegatorId, + _schema_id: SchemaId, + _block_number: BlockNumber, + ) -> DispatchResult { + match DelegationInfoHandler::get_delegation_of(delegator, provider) { + Some(_) => Ok(()), + None => Err(DispatchError::Other("no schema grant or delegation")), + } + } +} + +pub struct SchemaHandler; +impl SchemaProvider for SchemaHandler { + fn get_schema_by_id(schema_id: SchemaId) -> Option { + if schema_id == INVALID_SCHEMA_ID { + return None + } + if schema_id == IPFS_SCHEMA_ID { + return Some(SchemaResponse { + schema_id, + model: r#"schema"#.to_string().as_bytes().to_vec(), + model_type: ModelType::Parquet, + payload_location: PayloadLocation::IPFS, + settings: Vec::new(), + }) + } + + Some(SchemaResponse { + schema_id, + model: r#"schema"#.to_string().as_bytes().to_vec(), + model_type: ModelType::AvroBinary, + payload_location: PayloadLocation::OnChain, + settings: Vec::new(), + }) + } + + fn get_schema_info_by_id(schema_id: u16) -> Option { + Self::get_schema_by_id(schema_id).map(|schema| SchemaInfoResponse { + schema_id: schema.schema_id, + settings: schema.settings, + model_type: schema.model_type, + payload_location: schema.payload_location, + }) + } +} + +impl pallet_messages::Config for Test { + type RuntimeEvent = RuntimeEvent; + type MsaInfoProvider = MsaInfoHandler; + type SchemaGrantValidator = SchemaGrantValidationHandler; + type SchemaProvider = SchemaHandler; + type WeightInfo = (); + type MessagesMaxPayloadSizeBytes = MessagesMaxPayloadSizeBytes; + + /// A set of helper functions for benchmarking. + #[cfg(feature = "runtime-benchmarks")] + type MsaBenchmarkHelper = (); + #[cfg(feature = "runtime-benchmarks")] + type SchemaBenchmarkHelper = (); +} + +pub fn new_test_ext() -> sp_io::TestExternalities { + let t = system::GenesisConfig::::default().build_storage().unwrap(); + let mut ext = sp_io::TestExternalities::new(t); + ext.execute_with(|| System::set_block_number(1)); + ext +} + +pub fn run_to_block(n: u32) { + while System::block_number() < n { + if System::block_number() > 1 { + MessagesPallet::on_finalize(System::block_number()); + System::on_finalize(System::block_number()); + } + System::set_block_number(System::block_number() + 1); + System::on_initialize(System::block_number()); + MessagesPallet::on_initialize(System::block_number()); + } +} + +pub fn get_msa_from_account(account_id: u64) -> u64 { + account_id + 100 +} diff --git a/pallets/messages/src/tests/mod.rs b/pallets/messages/src/tests/mod.rs new file mode 100644 index 0000000000..a665b57f93 --- /dev/null +++ b/pallets/messages/src/tests/mod.rs @@ -0,0 +1,2 @@ +pub mod mock; +mod other_tests; diff --git a/pallets/messages/src/tests/other_tests.rs b/pallets/messages/src/tests/other_tests.rs new file mode 100644 index 0000000000..9a7ce42e05 --- /dev/null +++ b/pallets/messages/src/tests/other_tests.rs @@ -0,0 +1,626 @@ +use crate::{tests::mock::*, BlockMessageIndex, Error, Event as MessageEvent, Message, MessagesV2}; +use common_primitives::{messages::MessageResponse, schema::*}; +use frame_support::{assert_err, assert_noop, assert_ok, traits::OnInitialize, BoundedVec}; +use frame_system::{EventRecord, Phase}; +use multibase::Base; +use parity_scale_codec::Encode; +#[allow(unused_imports)] +use pretty_assertions::{assert_eq, assert_ne, assert_str_eq}; +use rand::Rng; +use serde::Serialize; +use sp_core::ConstU32; +extern crate alloc; +use alloc::vec::Vec; + +#[derive(Serialize)] +#[allow(non_snake_case)] +struct Payload { + // Normally would be u64, but we keep it to u8 in order to keep payload size down in tests. + fromId: u8, + content: String, +} + +pub const DUMMY_CID_SHA512: &str = "bafkrgqb76pscorjihsk77zpyst3p364zlti6aojlu4nga34vhp7t5orzwbwwytvp7ej44r5yhjzneanqwb5arcnvuvfwo2d4qgzyx5hymvto4"; + +/// Populate mocked Messages storage with message data. +/// +/// # Arguments +/// * `schema_id` - Registered schema id to which stored messages should adhere +/// * `message_per_block` - A signed transaction origin from the provider +/// * `payload_location` - Determines how a message payload is encoded. PayloadLocation::IPFS +/// will encode (mock CID, IPFS_PAYLOAD_LENGTH) on the message payload. +fn populate_messages( + schema_id: SchemaId, + message_per_block: Vec, + payload_location: PayloadLocation, + cid_in: Option<&[u8]>, +) { + let cid = match cid_in { + Some(val) => val, + None => &DUMMY_CID_BASE32[..], + }; + + let payload = match payload_location { + // Just stick Itemized & Paginated here for coverage; we don't use them for Messages + PayloadLocation::OnChain | PayloadLocation::Itemized | PayloadLocation::Paginated => + generate_payload(1, None), + PayloadLocation::IPFS => + (multibase::decode(core::str::from_utf8(cid).unwrap()).unwrap().1, IPFS_PAYLOAD_LENGTH) + .encode(), + }; + + let mut counter = 0; + for (idx, count) in message_per_block.iter().enumerate() { + for _ in 0..*count { + MessagesV2::::set( + (idx as u32, schema_id, counter), + Some(Message { + msa_id: Some(10), + payload: payload.clone().try_into().unwrap(), + provider_msa_id: 1, + }), + ); + counter += 1; + } + } +} + +/// Helper function to generate message payloads +/// +/// # Arguments +/// * `num_items` - Number of message to include in payload +/// * `content_len` - Length of content string to generate +fn generate_payload(num_items: u8, content_len: Option) -> Vec { + let mut result_str = String::new(); + let size = content_len.unwrap_or(3); + let mut rng = rand::rng(); + + for _ in 0..num_items { + let payload = serde_json::to_string(&Payload { + fromId: rng.random(), + content: (0..size).map(|_| "X").collect::(), + }) + .unwrap(); + + result_str.push_str(payload.as_str()); + } + + result_str.as_bytes().to_vec() +} + +#[test] +fn add_message_should_store_message_in_storage() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = 5; + let caller_2 = 2; + let schema_id_1: SchemaId = 1; + let schema_id_2: SchemaId = 2; + let message_payload_1 = generate_payload(1, None); + let message_payload_2 = generate_payload(1, None); + let message_payload_3 = generate_payload(1, None); + + // act + assert_ok!(MessagesPallet::add_onchain_message( + RuntimeOrigin::signed(caller_1), + None, + schema_id_1, + message_payload_1.clone() + )); + + assert_ok!(MessagesPallet::add_onchain_message( + RuntimeOrigin::signed(caller_2), + None, + schema_id_2, + message_payload_2.clone() + )); + + assert_ok!(MessagesPallet::add_onchain_message( + RuntimeOrigin::signed(caller_2), + None, + schema_id_2, + message_payload_3.clone() + )); + + // assert messages + let msg1 = MessagesV2::::get((1, schema_id_1, 0u16)); + let msg2 = MessagesV2::::get((1, schema_id_2, 1u16)); + let msg3 = MessagesV2::::get((1, schema_id_2, 2u16)); + + assert_eq!( + msg1, + Some(Message { + msa_id: Some(get_msa_from_account(caller_1)), + payload: message_payload_1.try_into().unwrap(), + provider_msa_id: get_msa_from_account(caller_1) + }) + ); + + assert_eq!( + msg2, + Some(Message { + msa_id: Some(get_msa_from_account(caller_2)), + payload: message_payload_2.try_into().unwrap(), + provider_msa_id: get_msa_from_account(caller_2) + }) + ); + + assert_eq!( + msg3, + Some(Message { + msa_id: Some(get_msa_from_account(caller_2)), + payload: message_payload_3.try_into().unwrap(), + provider_msa_id: get_msa_from_account(caller_2) + }) + ); + + // assert events + let events_occurred = System::events(); + assert_eq!( + events_occurred, + vec![EventRecord { + phase: Phase::Initialization, + event: RuntimeEvent::MessagesPallet(MessageEvent::MessagesInBlock), + topics: vec![] + },] + ); + }); +} + +#[test] +fn add_message_with_too_large_message_should_panic() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = 5; + let schema_id_1: SchemaId = 1; + let message_payload_1 = generate_payload(3, None); + + // act + assert_noop!( + MessagesPallet::add_onchain_message( + RuntimeOrigin::signed(caller_1), + None, + schema_id_1, + message_payload_1 + ), + Error::::ExceedsMaxMessagePayloadSizeBytes + ); + }); +} + +#[test] +fn add_message_with_invalid_msa_account_errors() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = 1000; + let schema_id_1: SchemaId = 1; + let message_payload_1 = generate_payload(2, None); + + // act + assert_noop!( + MessagesPallet::add_onchain_message( + RuntimeOrigin::signed(caller_1), + None, + schema_id_1, + message_payload_1 + ), + Error::::InvalidMessageSourceAccount + ); + }); +} + +#[test] +fn add_ipfs_message_with_invalid_msa_account_errors() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = 1000; + let schema_id_1: SchemaId = IPFS_SCHEMA_ID; + + // act + assert_noop!( + MessagesPallet::add_ipfs_message( + RuntimeOrigin::signed(caller_1), + schema_id_1, + DUMMY_CID_BASE32.to_vec(), + 15 + ), + Error::::InvalidMessageSourceAccount + ); + }); +} + +/// Assert that MessageResponse for IPFS messages returns the payload_length of the offchain message. +#[test] +fn get_messages_by_schema_with_ipfs_payload_location_should_return_offchain_payload_length() { + new_test_ext().execute_with(|| { + // Setup + let schema_id: SchemaId = IPFS_SCHEMA_ID; + let current_block = 1; + + // Populate + populate_messages(schema_id, vec![1], PayloadLocation::IPFS, None); + + // Run to the block + + run_to_block(current_block + 1); + + let list = + MessagesPallet::get_messages_by_schema_and_block(schema_id, PayloadLocation::IPFS, 0); + + // IPFS messages should return the payload length that was encoded in a tuple along + // with the CID: (cid, payload_length). + assert_eq!(list.len(), 1); + assert_eq!( + list[0], + MessageResponse { + payload: None, + index: 0, + provider_msa_id: 1, + block_number: 0, + payload_length: Some(IPFS_PAYLOAD_LENGTH), + msa_id: None, + cid: Some(DUMMY_CID_BASE32.to_vec()) + } + ); + }); +} + +#[test] +fn retrieved_ipfs_message_should_always_be_in_base32() { + new_test_ext().execute_with(|| { + let schema_id = IPFS_SCHEMA_ID; + let current_block: u32 = 1; + + // Populate message storage using Base64-encoded CID + populate_messages(schema_id, vec![1], PayloadLocation::IPFS, Some(DUMMY_CID_BASE64)); + + // Run to the block + run_to_block(current_block + 1); + + let list = + MessagesPallet::get_messages_by_schema_and_block(schema_id, PayloadLocation::IPFS, 0); + + assert_eq!(list[0].cid.as_ref().unwrap(), &DUMMY_CID_BASE32.to_vec()); + }) +} + +#[test] +fn get_messages_by_schema_with_ipfs_payload_location_should_fail_bad_schema() { + new_test_ext().execute_with(|| { + let bad_message: Message = Message { + payload: BoundedVec::try_from( + [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16].to_vec(), + ) + .unwrap(), + msa_id: Some(0), + provider_msa_id: 1, + }; + let mapped_response = bad_message.map_to_response(0, PayloadLocation::IPFS, 0); + assert_eq!( + mapped_response.cid, + Some(multibase::encode(Base::Base32Lower, Vec::new()).as_bytes().to_vec()) + ); + }); +} + +#[test] +fn add_message_via_non_delegate_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let message_producer = 1; + let message_provider = 2000; + let schema_id_1: SchemaId = 1; + let message_payload_1 = generate_payload(1, None); + // act + assert_err!( + MessagesPallet::add_onchain_message( + RuntimeOrigin::signed(message_provider), + Some(message_producer), + schema_id_1, + message_payload_1 + ), + Error::::UnAuthorizedDelegate + ); + + // assert + let msg = MessagesV2::::get((1, schema_id_1, 0)); + assert_eq!(msg, None); + }); +} + +#[test] +fn add_message_with_invalid_schema_id_should_error() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = 5; + let schema_id_1: SchemaId = INVALID_SCHEMA_ID; + let message_payload_1 = generate_payload(2, None); + + // act + assert_err!( + MessagesPallet::add_onchain_message( + RuntimeOrigin::signed(caller_1), + None, + schema_id_1, + message_payload_1 + ), + Error::::InvalidSchemaId + ); + }); +} + +#[test] +fn add_ipfs_message_with_invalid_schema_id_should_error() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = 5; + let schema_id_1: SchemaId = INVALID_SCHEMA_ID; + + // act + assert_err!( + MessagesPallet::add_ipfs_message( + RuntimeOrigin::signed(caller_1), + schema_id_1, + DUMMY_CID_BASE32.to_vec(), + 15 + ), + Error::::InvalidSchemaId + ); + }); +} + +#[test] +fn valid_payload_location_ipfs() { + new_test_ext().execute_with(|| { + let caller_1 = 5; + let schema_id_1: SchemaId = IPFS_SCHEMA_ID; + assert_ok!(MessagesPallet::add_ipfs_message( + RuntimeOrigin::signed(caller_1), + schema_id_1, + DUMMY_CID_BASE32.to_vec(), + 1, + )); + }); +} + +#[test] +fn invalid_payload_location_ipfs() { + new_test_ext().execute_with(|| { + let caller_1 = 5; + let schema_id_1: SchemaId = 1; + + assert_noop!( + MessagesPallet::add_ipfs_message( + RuntimeOrigin::signed(caller_1), + schema_id_1, + DUMMY_CID_BASE32.to_vec(), + 1 + ), + Error::::InvalidPayloadLocation + ); + }); +} + +#[test] +fn invalid_payload_location_onchain() { + new_test_ext().execute_with(|| { + let caller_1 = 5; + let payload = generate_payload(1, None); + + assert_noop!( + MessagesPallet::add_onchain_message( + RuntimeOrigin::signed(caller_1), + None, + IPFS_SCHEMA_ID, + payload, + ), + Error::::InvalidPayloadLocation + ); + }); +} + +#[test] +fn add_ipfs_message_with_large_payload_errors() { + new_test_ext().execute_with(|| { + let caller_1 = 5u64; + + assert_noop!( + MessagesPallet::add_ipfs_message( + RuntimeOrigin::signed(caller_1), + IPFS_SCHEMA_ID, + // We've deliberately mocked MaxMessagePayloadSizeBytes to be too small to contain a CIDv1 with a SHA2-512 hash. + DUMMY_CID_SHA512.as_bytes().to_vec(), + 15 + ), + Error::::ExceedsMaxMessagePayloadSizeBytes + ); + }) +} + +#[test] +fn add_ipfs_message_cid_v0_errors() { + new_test_ext().execute_with(|| { + let caller_1 = 5u64; + const CIDV0: &str = "QmYzm8KGxRHr7nGn5g5Z9Zv9r8nN5WNn7Ajya6x7RxmAB1"; + + assert_noop!( + MessagesPallet::add_ipfs_message( + RuntimeOrigin::signed(caller_1), + IPFS_SCHEMA_ID, + CIDV0.as_bytes().to_vec(), + 15 + ), + Error::::UnsupportedCidVersion + ); + }) +} + +#[test] +fn add_ipfs_message_bad_cid_errors() { + new_test_ext().execute_with(|| { + let caller_1 = 5u64; + + assert_noop!( + MessagesPallet::add_ipfs_message( + RuntimeOrigin::signed(caller_1), + IPFS_SCHEMA_ID, + "foo".as_bytes().to_vec(), + 15 + ), + Error::::InvalidCid + ); + }) +} + +#[test] +fn on_initialize_should_clean_up_temporary_storage() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = 5; + let caller_2 = 2; + let schema_id_1: SchemaId = 1; + let schema_id_2: SchemaId = 2; + let message_payload_1 = generate_payload(1, None); + let message_payload_2 = generate_payload(1, None); + assert_ok!(MessagesPallet::add_onchain_message( + RuntimeOrigin::signed(caller_1), + None, + schema_id_1, + message_payload_1.clone() + )); + assert_ok!(MessagesPallet::add_onchain_message( + RuntimeOrigin::signed(caller_2), + None, + schema_id_2, + message_payload_2.clone() + )); + + // act + MessagesPallet::on_initialize(System::block_number() + 1); + + // assert + assert_eq!(BlockMessageIndex::::get(), 0); + }); +} + +#[test] +fn validate_cid_invalid_utf8_errors() { + new_test_ext().execute_with(|| { + let bad_cid = vec![0xfc, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1]; + + assert_noop!(MessagesPallet::validate_cid(&bad_cid), Error::::InvalidCid); + }) +} + +#[test] +fn validate_cid_too_short_errors() { + new_test_ext().execute_with(|| { + let bad_cid = "a".as_bytes().to_vec(); + + assert_noop!(MessagesPallet::validate_cid(&bad_cid), Error::::InvalidCid); + }) +} + +#[test] +fn validate_cid_v0_errors() { + new_test_ext().execute_with(|| { + let bad_cid = "Qmxxx".as_bytes().to_vec(); + + assert_noop!(MessagesPallet::validate_cid(&bad_cid), Error::::UnsupportedCidVersion); + }) +} + +#[test] +fn validate_cid_invalid_multibase_errors() { + new_test_ext().execute_with(|| { + let bad_cid = "aaaa".as_bytes().to_vec(); + + assert_noop!(MessagesPallet::validate_cid(&bad_cid), Error::::InvalidCid); + }) +} + +#[test] +fn validate_cid_invalid_cid_errors() { + new_test_ext().execute_with(|| { + let bad_cid = multibase::encode(Base::Base32Lower, "foo").as_bytes().to_vec(); + + assert_noop!(MessagesPallet::validate_cid(&bad_cid), Error::::InvalidCid); + }) +} + +#[test] +fn validate_cid_valid_cid_succeeds() { + new_test_ext().execute_with(|| { + let bad_cid = DUMMY_CID_BASE32.to_vec(); + + assert_ok!(MessagesPallet::validate_cid(&bad_cid)); + }) +} + +#[test] +fn validate_cid_not_utf8_aligned_errors() { + new_test_ext().execute_with(|| { + // This should not panic, but should return an error. + let bad_cid = vec![55, 197, 136, 0, 0, 0, 0, 0, 0, 0, 0]; + + assert_noop!(MessagesPallet::validate_cid(&bad_cid), Error::::InvalidCid); + }) +} + +#[test] +fn validate_cid_not_correct_format_errors() { + new_test_ext().execute_with(|| { + // This should not panic, but should return an error. + let bad_cid = vec![0, 1, 0, 1, 203, 155, 0, 0, 0, 5, 67]; + + assert_noop!(MessagesPallet::validate_cid(&bad_cid), Error::::InvalidCid); + // This should not panic, but should return an error. + let another_bad_cid = vec![241, 0, 0, 0, 0, 0, 128, 132, 132, 132, 58]; + + assert_noop!(MessagesPallet::validate_cid(&another_bad_cid), Error::::InvalidCid); + }) +} + +#[test] +fn validate_cid_unwrap_panics() { + new_test_ext().execute_with(|| { + // This should not panic, but should return an error. + let bad_cid = vec![102, 70, 70, 70, 70, 70, 70, 70, 70, 48, 48, 48, 54, 53, 53, 48, 48]; + + assert_noop!(MessagesPallet::validate_cid(&bad_cid), Error::::InvalidCid); + }) +} + +#[test] +fn map_to_response_on_chain() { + let payload_vec = b"123456789012345678901234567890".to_vec(); + let payload_bounded = BoundedVec::>::try_from(payload_vec.clone()).unwrap(); + let msg = Message { payload: payload_bounded, provider_msa_id: 10u64, msa_id: None }; + let expected = MessageResponse { + provider_msa_id: 10u64, + index: 1u16, + block_number: 42, + msa_id: None, + payload: Some(payload_vec), + cid: None, + payload_length: None, + }; + assert_eq!(msg.map_to_response(42, PayloadLocation::OnChain, 1), expected); +} + +#[test] +fn map_to_response_ipfs() { + let cid = DUMMY_CID_SHA512; + let payload_tuple: crate::OffchainPayloadType = (multibase::decode(cid).unwrap().1, 10); + let payload = BoundedVec::>::try_from(payload_tuple.encode()).unwrap(); + let msg = Message { payload, provider_msa_id: 10u64, msa_id: None }; + let expected = MessageResponse { + provider_msa_id: 10u64, + index: 1u16, + block_number: 42, + msa_id: None, + payload: None, + cid: Some(cid.as_bytes().to_vec()), + payload_length: Some(10), + }; + assert_eq!(msg.map_to_response(42, PayloadLocation::IPFS, 1), expected); +} diff --git a/pallets/messages/src/types.rs b/pallets/messages/src/types.rs new file mode 100644 index 0000000000..2d92af899d --- /dev/null +++ b/pallets/messages/src/types.rs @@ -0,0 +1,81 @@ +use common_primitives::{ + messages::MessageResponse, msa::MessageSourceId, node::BlockNumber, schema::PayloadLocation, +}; +use core::fmt::Debug; +use frame_support::{traits::Get, BoundedVec}; +use multibase::Base; +use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; +use scale_info::TypeInfo; +extern crate alloc; +use alloc::vec::Vec; + +/// Payloads stored offchain contain a tuple of (bytes(the payload reference), payload length). +pub type OffchainPayloadType = (Vec, u32); +/// Index of message in the block +pub type MessageIndex = u16; + +/// A single message type definition. +#[derive(Default, Encode, Decode, PartialEq, Debug, TypeInfo, Eq, MaxEncodedLen)] +#[scale_info(skip_type_params(MaxDataSize))] +#[codec(mel_bound(MaxDataSize: MaxEncodedLen))] +pub struct Message +where + MaxDataSize: Get + Debug, +{ + /// Data structured by the associated schema's model. + pub payload: BoundedVec, + /// Message source account id of the Provider. This may be the same id as contained in `msa_id`, + /// indicating that the original source MSA is acting as its own provider. An id differing from that + /// of `msa_id` indicates that `provider_msa_id` was delegated by `msa_id` to send this message on + /// its behalf. + pub provider_msa_id: MessageSourceId, + /// Message source account id (the original source). + pub msa_id: Option, +} + +impl Message +where + MaxDataSize: Get + Debug, +{ + /// Helper function to handle response type [`MessageResponse`] depending on the Payload Location (on chain or IPFS) + pub fn map_to_response( + &self, + block_number: BlockNumber, + payload_location: PayloadLocation, + index: u16, + ) -> MessageResponse { + match payload_location { + PayloadLocation::OnChain => MessageResponse { + provider_msa_id: self.provider_msa_id, + index, + block_number, + msa_id: self.msa_id, + payload: Some(self.payload.to_vec()), + cid: None, + payload_length: None, + }, + PayloadLocation::IPFS => { + let (binary_cid, payload_length) = + OffchainPayloadType::decode(&mut &self.payload[..]).unwrap_or_default(); + MessageResponse { + provider_msa_id: self.provider_msa_id, + index, + block_number, + cid: Some(multibase::encode(Base::Base32Lower, binary_cid).as_bytes().to_vec()), + payload_length: Some(payload_length), + msa_id: None, + payload: None, + } + }, // Message types of Itemized and Paginated are retrieved differently + _ => MessageResponse { + provider_msa_id: self.provider_msa_id, + index, + block_number, + msa_id: None, + payload: None, + cid: None, + payload_length: None, + }, + } + } +} diff --git a/pallets/messages/src/weights.rs b/pallets/messages/src/weights.rs new file mode 100644 index 0000000000..e2138e5426 --- /dev/null +++ b/pallets/messages/src/weights.rs @@ -0,0 +1,166 @@ + +//! Autogenerated weights for `pallet_messages` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-04-18, STEPS: `20`, REPEAT: `10`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `ip-10-173-0-75`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` +//! WASM-EXECUTION: `Compiled`, CHAIN: `None`, DB CACHE: `1024` + +// Executed Command: +// ./scripts/../target/release/frequency +// benchmark +// pallet +// --pallet=pallet_messages +// --extrinsic +// * +// --heap-pages=4096 +// --steps=20 +// --repeat=10 +// --output=./scripts/../pallets/messages/src/weights.rs +// --template=./scripts/../.maintain/frame-weight-template.hbs +// --additional-trie-layers=3 +// --runtime=./scripts/../target/release/wbuild/frequency-runtime/frequency_runtime.wasm +// --genesis-builder=runtime + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; +use core::marker::PhantomData; + +/// Weight functions needed for `pallet_messages`. +pub trait WeightInfo { + fn add_onchain_message(n: u32, ) -> Weight; + fn add_ipfs_message() -> Weight; +} + +/// Weights for `pallet_messages` using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl WeightInfo for SubstrateWeight { + /// Storage: `Schemas::SchemaInfos` (r:1 w:0) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::DelegatorAndProviderToDelegation` (r:1 w:0) + /// Proof: `Msa::DelegatorAndProviderToDelegation` (`max_values`: None, `max_size`: Some(217), added: 2692, mode: `MaxEncodedLen`) + /// Storage: `Messages::MessagesV2` (r:0 w:1) + /// Proof: `Messages::MessagesV2` (`max_values`: None, `max_size`: Some(3123), added: 5598, mode: `MaxEncodedLen`) + /// The range of component `n` is `[0, 3071]`. + fn add_onchain_message(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `881` + // Estimated: `4177` + // Minimum execution time: 39_659_000 picoseconds. + Weight::from_parts(40_839_700, 4177) + // Standard Error: 159 + .saturating_add(Weight::from_parts(842, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Schemas::SchemaInfos` (r:1 w:0) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Messages::MessagesV2` (r:0 w:1) + /// Proof: `Messages::MessagesV2` (`max_values`: None, `max_size`: Some(3123), added: 5598, mode: `MaxEncodedLen`) + fn add_ipfs_message() -> Weight { + // Proof Size summary in bytes: + // Measured: `814` + // Estimated: `4008` + // Minimum execution time: 31_213_000 picoseconds. + Weight::from_parts(32_351_000, 4008) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } +} + +// For backwards compatibility and tests. +impl WeightInfo for () { + /// Storage: `Schemas::SchemaInfos` (r:1 w:0) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::DelegatorAndProviderToDelegation` (r:1 w:0) + /// Proof: `Msa::DelegatorAndProviderToDelegation` (`max_values`: None, `max_size`: Some(217), added: 2692, mode: `MaxEncodedLen`) + /// Storage: `Messages::MessagesV2` (r:0 w:1) + /// Proof: `Messages::MessagesV2` (`max_values`: None, `max_size`: Some(3123), added: 5598, mode: `MaxEncodedLen`) + /// The range of component `n` is `[0, 3071]`. + fn add_onchain_message(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `881` + // Estimated: `4177` + // Minimum execution time: 39_659_000 picoseconds. + Weight::from_parts(40_839_700, 4177) + // Standard Error: 159 + .saturating_add(Weight::from_parts(842, 0).saturating_mul(n.into())) + .saturating_add(RocksDbWeight::get().reads(3_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: `Schemas::SchemaInfos` (r:1 w:0) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Messages::MessagesV2` (r:0 w:1) + /// Proof: `Messages::MessagesV2` (`max_values`: None, `max_size`: Some(3123), added: 5598, mode: `MaxEncodedLen`) + fn add_ipfs_message() -> Weight { + // Proof Size summary in bytes: + // Measured: `814` + // Estimated: `4008` + // Minimum execution time: 31_213_000 picoseconds. + Weight::from_parts(32_351_000, 4008) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } +} + + +#[cfg(test)] +mod tests { + use frame_support::{traits::Get, weights::Weight, dispatch::DispatchClass}; + use common_runtime::constants::{MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO}; + use common_runtime::weights::extrinsic_weights::ExtrinsicBaseWeight; + + #[allow(dead_code)] + struct BlockWeights; + impl Get for BlockWeights { + fn get() -> frame_system::limits::BlockWeights { + frame_system::limits::BlockWeights::builder() + .base_block(Weight::zero()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::non_mandatory(), |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .build_or_panic() + } + } + + #[test] + fn test_add_onchain_message() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4177 + ); + } + #[test] + fn test_add_ipfs_message() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4008 + ); + } +} \ No newline at end of file diff --git a/pallets/msa/Cargo.toml b/pallets/msa/Cargo.toml new file mode 100644 index 0000000000..399764e89d --- /dev/null +++ b/pallets/msa/Cargo.toml @@ -0,0 +1,75 @@ +[package] +authors = ["Frequency"] +description = "Pallet for creating MSA" +edition = "2021" +homepage = "https://frequency.xyz" +license = "Apache-2.0" +name = "pallet-msa" +publish = false +repository = "https://github.com/frequency-chain/frequency/" +version = "0.0.0" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[dependencies] +log = { workspace = true } +parity-scale-codec = { workspace = true, features = ["derive"] } +frame-benchmarking = { workspace = true, optional = true } +frame-support = { workspace = true } +frame-system = { workspace = true } +lazy_static = { workspace = true } + +scale-info = { workspace = true, features = ["derive"] } +sp-core = { workspace = true } +sp-io = { workspace = true } +sp-runtime = { workspace = true } +sp-weights = { workspace = true } +# Frequency related dependencies +common-primitives = { default-features = false, path = "../../common/primitives" } +serde = { workspace = true, features = ["derive"] } +serde_json = { workspace = true, features = ["alloc"] } +hex = { workspace = true, default-features = false, features = ["alloc"] } +common-runtime = { path = "../../runtime/common", default-features = false } + +[dev-dependencies] +pallet-schemas = { path = "../schemas", default-features = false } +pallet-handles = { path = "../handles", default-features = false } +pallet-collective = { workspace = true } +sp-keystore = { workspace = true } +sp-keyring = { workspace = true } +pretty_assertions = { workspace = true } +parking_lot = { workspace = true } + +[features] +default = ["std"] +frequency = [] +frequency-testnet = [] +runtime-benchmarks = [ + "frame-benchmarking/runtime-benchmarks", + "pallet-schemas/runtime-benchmarks", + "common-primitives/runtime-benchmarks", + "pallet-handles/runtime-benchmarks", + "pallet-collective/runtime-benchmarks", +] +std = [ + "parity-scale-codec/std", + "scale-info/std", + "frame-support/std", + "frame-system/std", + "frame-benchmarking/std", + "sp-runtime/std", + "sp-core/std", + "pallet-schemas/std", + "pallet-handles/std", + "common-primitives/std", + "common-runtime/std", + "pallet-collective/std", + "log/std", + "sp-io/std", +] +try-runtime = ["frame-support/try-runtime"] +test = [] + +[lints] +workspace = true diff --git a/pallets/msa/README.md b/pallets/msa/README.md new file mode 100644 index 0000000000..3361828911 --- /dev/null +++ b/pallets/msa/README.md @@ -0,0 +1,89 @@ +# MSA Pallet + +The MSA Pallet provides functionality for handling Message Source Accounts. + +## Summary + +The Message Source Account (MSA) is the primary user account system on Frequency for Messages and Stateful Storage. +All users on Frequency must have an MSA in order to: + +1. Acquire a User Handle +2. Delegate tasks to Providers (defining specific tasks for specific providers) +3. Become a Provider so they may do Provider level tasks on their own behalf +4. Have Message or Stateful Storage data + +### MSA Id and Keys + +Once a user creates an MSA, they are assigned an MSA Id, a unique number the time of creation with one or more keys attached for control. +(A control key may only be attached to ONE MSA at any single point in time.) + +#### MSA Id and Addresses + +Each MSA Id has a unique 20-byte address associated with it. This address can be queried using an MSA pallet runtime call, or computed using the following algorithm: +```ignore +Address = keccak256(0xD9 + + keccak256(b"MSA Generated"))[12..] +``` + +### Actions + +The MSA pallet provides for: + +- Creating, reading, updating, and deleting operations for MSAs. +- Managing delegation relationships for MSAs. +- Managing keys associated with MSAs. + +## Interactions + +### Extrinsics + +| Name/Description | Caller | Payment | Key Events | Runtime Added | +| --------------------------------------------------------------------------------------------- | ------------------------------------------ | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------- | +| `add_public_key_to_msa`
Add MSA control key | MSA Control Key or Provider with Signature | Capacity or Tokens | [`PublicKeyAdded`](https://frequency-chain.github.io/frequency/pallet_msa/pallet/enum.Event.html#variant.PublicKeyAdded) | 1 | +| `create`
Create new MSA | Token Account | Tokens | [`MsaCreated`](https://frequency-chain.github.io/frequency/pallet_msa/pallet/enum.Event.html#variant.MsaCreated) | 1 | +| `create_provider`
Convert an MSA into a Provider | Testnet: Provider or Mainnet: Governance | Tokens | [`ProviderCreated`](https://frequency-chain.github.io/frequency/pallet_msa/pallet/enum.Event.html#variant.ProviderCreated) | 1 | +| `create_provider_via_governance`
Convert an MSA into a Provider | Frequency Council | Tokens | [`ProviderCreated`](https://frequency-chain.github.io/frequency/pallet_msa/pallet/enum.Event.html#variant.ProviderCreated) | 12 | +| `create_sponsored_account_with_delegation`
Create new MSA via Provider with a Delegation | Provider | Capacity or Tokens | [`MsaCreated`](https://frequency-chain.github.io/frequency/pallet_msa/pallet/enum.Event.html#variant.MsaCreated), [`DelegationGranted`](https://frequency-chain.github.io/frequency/pallet_msa/pallet/enum.Event.html#variant.DelegationGranted) | 1 | +| `delete_msa_public_key`
Remove MSA control key | Delegator | Free | [`PublicKeyDeleted`](https://frequency-chain.github.io/frequency/pallet_msa/pallet/enum.Event.html#variant.PublicKeyDeleted) | 1 | +| `grant_delegation`
Create or alter a delegation | Provider with Signature | Capacity | [`DelegationGranted`](https://frequency-chain.github.io/frequency/pallet_msa/pallet/enum.Event.html#variant.DelegationGranted) | 1 | +| `propose_to_be_provider`
Request the council to convert an MSA to a Provider | Token Account | Tokens | [`Proposed`](https://paritytech.github.io/polkadot-sdk/master/pallet_collective/pallet/enum.Event.html#variant.Proposed) | 12 | +| `retire_msa`
Remove all keys and mark the MSA as retired | Delegator | Free | [`PublicKeyDeleted`](https://frequency-chain.github.io/frequency/pallet_msa/pallet/enum.Event.html#variant.PublicKeyDeleted), [`MsaRetired`](https://frequency-chain.github.io/frequency/pallet_msa/pallet/enum.Event.html#variant.MsaRetired) | 18 | +| `revoke_delegation_by_delegator`
Remove delegation | Delegator | Free | [`DelegationRevoked`](https://frequency-chain.github.io/frequency/pallet_msa/pallet/enum.Event.html#variant.DelegationRevoked) | 1 | +| `revoke_delegation_by_provider`
Remove delegation | Provider | Free | [`DelegationRevoked`](https://frequency-chain.github.io/frequency/pallet_msa/pallet/enum.Event.html#variant.DelegationRevoked) | 1 | + +See [Rust Docs](https://frequency-chain.github.io/frequency/pallet_msa/pallet/struct.Pallet.html) for more details. + +### State Queries + +| Name | Description | Query | Runtime Added | +| --------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ---------------------------------- | ------------- | +| Get MSA Id | Returns the MSA Id connected to the given control key | `publicKeyToMsaId` | 1 | +| Get Current Maximum MSA Id | Returns the maximum MSA Id in existence | `currentMsaIdentifierMaximum` | 1 | +| Get Current Delegator to Provider | Returns the current relationship between the specified Delegator and specified Provider at the given block number | `delegatorAndProviderToDelegation` | 1 | +| Get Public Key Count for MSA Id | Returns the number of public keys for the given MSA Id | `publicKeyCountforMsaId` | 1 | + +See the [Rust Docs](https://frequency-chain.github.io/frequency/pallet_msa/pallet/storage_types/index.html) for additional state queries and details. + +### RPCs + +Note: May be restricted based on node settings and configuration. + +| Name | Description | Call | Node Version | +| ----------------------------- | -------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | +| Check Delegations | Test a list of MSAs to see if they have delegated to the provider MSA | [`checkDelegations`](https://frequency-chain.github.io/frequency/pallet_msa_rpc/trait.MsaApiServer.html#tymethod.check_delegations ) | v1.0.0+ | +| Delegation Schema Grants | Fetch the list of Schema Ids that a delegator has granted to a provider | [`grantedSchemaIdsByMsaId`](https://frequency-chain.github.io/frequency/pallet_msa_rpc/trait.MsaApiServer.html#tymethod.get_granted_schemas_by_msa_id) | v1.0.0+ | +| Get Control Keys by MSA Id\* | Fetch the list of current control keys for an MSA from the off-chain index | [`getKeysByMsaId`](https://frequency-chain.github.io/frequency/pallet_msa_rpc/trait.MsaApiServer.html#tymethod.get_keys_by_msa_id) | v1.10.0+ | +| Get All Delegations by MSA Id | Retreives all delegations and schemas, active and inactive, for an MSA ID | ['getAllGrantedDelegationsByMsaId'](https://frequency-chain.github.io/frequency/pallet_msa_rpc/trait.MsaApiServer.html#tymethod.get_all_granted_delegations_by_msa_id) | v1.13.0+ | + +\* Must be enabled with off-chain indexing + +See [Rust Docs](https://frequency-chain.github.io/frequency/pallet_msa_rpc/trait.MsaApiServer.html) for more details. + +### Runtime API + +| Name | Description | Call | Runtime Added | MSA Runtime API Version Added | +| ------------------------------------- | -------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | ------------------------- | +| Has Delegation | Check to see if a delegation existed between the given delegator and provider at a given block | ['hasDelegation'](https://frequency-chain.github.io/frequency/pallet_msa_runtime_api/trait.MsaRuntimeApi.html#method.has_delegation) | 1 | 1 | +| Get Granted Schemas by MSA ID | Get the list of schema permission grants (if any) that exist in any delegation between the delegator and provider. | ['getGrantedSchemasByMsaId'](https://frequency-chain.github.io/frequency/pallet_msa_runtime_api/trait.MsaRuntimeApi.html#method.get_granted_schemas_by_msa_id) | 1 | 1 | +| Get All Granted Delegations by MSA ID | Get the list of all delegated providers with schema permission grants (if any) that exist in any delegation between the delegator and provider. | ['getAllGrantedDelegationsByMsaId'](https://frequency-chain.github.io/frequency/pallet_msa_runtime_api/trait.MsaRuntimeApi.html#method.get_all_granted_delegations_by_msa_id) | 83 | 2 | +| Get Ethereum Address for MSA ID | Get the Ethereum address of the given MSA. | ['getEthereumAddressForMsaId'](https://frequency-chain.github.io/frequency/pallet_msa_runtime_api/trait.MsaRuntimeApi.html#method.get_ethereum_address_for_msa_id) | 156 | 3 | +| Validate Ethereum Address for MSA ID | Validate if the given Ethereum address is associated with the given MSA. | ['validateEthAddressForMsa'](https://frequency-chain.github.io/frequency/pallet_msa_runtime_api/trait.MsaRuntimeApi.html#method.validate_eth_address_for_msa) | 156 | 3 | diff --git a/pallets/msa/src/benchmarking.rs b/pallets/msa/src/benchmarking.rs new file mode 100644 index 0000000000..7ba02c919a --- /dev/null +++ b/pallets/msa/src/benchmarking.rs @@ -0,0 +1,377 @@ +#![allow(clippy::unwrap_used)] +use super::*; + +use crate::types::EMPTY_FUNCTION; +#[allow(unused)] +use crate::Pallet as Msa; +use common_primitives::utils::wrap_binary_data; +use frame_benchmarking::{account, v2::*}; +use frame_support::assert_ok; +use frame_system::RawOrigin; +use sp_core::{crypto::KeyTypeId, Encode}; +use sp_runtime::RuntimeAppPublic; + +pub const TEST_KEY_TYPE_ID: KeyTypeId = KeyTypeId(*b"test"); + +mod app_sr25519 { + use super::TEST_KEY_TYPE_ID; + use sp_core::sr25519; + use sp_runtime::app_crypto::app_crypto; + app_crypto!(sr25519, TEST_KEY_TYPE_ID); +} + +type SignerId = app_sr25519::Public; + +const SEED: u32 = 0; + +fn create_account(name: &'static str, index: u32) -> T::AccountId { + account(name, index, SEED) +} + +fn create_payload_and_signature( + schemas: Vec, + authorized_msa_id: MessageSourceId, +) -> (AddProvider, MultiSignature, T::AccountId) { + let delegator_account = SignerId::generate_pair(None); + let expiration = 10u32; + let add_provider_payload = AddProvider::new(authorized_msa_id, Some(schemas), expiration); + let encode_add_provider_data = wrap_binary_data(add_provider_payload.encode()); + + let signature = delegator_account.sign(&encode_add_provider_data).unwrap(); + let acc = T::AccountId::decode(&mut &delegator_account.encode()[..]).unwrap(); + (add_provider_payload, MultiSignature::Sr25519(signature.into()), acc) +} + +fn add_key_payload_and_signature( + msa_id: u64, +) -> (AddKeyData, MultiSignature, T::AccountId) { + let new_keys = SignerId::generate_pair(None); + let public_key = T::AccountId::decode(&mut &new_keys.encode()[..]).unwrap(); + let add_key_payload = + AddKeyData:: { msa_id, expiration: 10u32.into(), new_public_key: public_key }; + + let encoded_add_key_payload = wrap_binary_data(add_key_payload.encode()); + + let signature = new_keys.sign(&encoded_add_key_payload).unwrap(); + let acc = T::AccountId::decode(&mut &new_keys.encode()[..]).unwrap(); + (add_key_payload, MultiSignature::Sr25519(signature.into()), acc) +} + +fn create_msa_account_and_keys() -> (T::AccountId, SignerId, MessageSourceId) { + let key_pair = SignerId::generate_pair(None); + let account_id = T::AccountId::decode(&mut &key_pair.encode()[..]).unwrap(); + + let (msa_id, _) = Msa::::create_account(account_id.clone(), EMPTY_FUNCTION).unwrap(); + + (account_id, key_pair, msa_id) +} + +fn generate_fake_signature(i: u8) -> MultiSignature { + let sig = [i; 64]; + MultiSignature::Sr25519(sp_core::sr25519::Signature::from_raw(sig)) +} + +fn prep_signature_registry() { + // Add it with an 0 block expiration + let signatures: Vec = (1..=50u8).map(generate_fake_signature).collect(); + let signature_expires_at: BlockNumberFor = 0u32.into(); + let len = signatures.len(); + for (i, sig) in signatures.iter().enumerate() { + if i < (len - 1) { + >::insert( + sig, + (signature_expires_at, signatures[i + 1].clone()), + ); + } + } + PayloadSignatureRegistryPointer::::put(SignatureRegistryPointer { + // The count doesn't change if list is full, so fake the count + count: T::MaxSignaturesStored::get().unwrap_or(3), + newest: signatures.last().unwrap().clone(), + newest_expires_at: signature_expires_at, + oldest: signatures.first().unwrap().clone(), + }); +} + +#[benchmarks] +mod benchmarks { + use super::*; + + #[benchmark] + fn create() -> Result<(), BenchmarkError> { + let caller: T::AccountId = whitelisted_caller(); + + #[extrinsic_call] + _(RawOrigin::Signed(caller.clone())); + + assert!(PublicKeyToMsaId::::get(caller).is_some()); + assert_eq!(frame_system::Pallet::::events().len(), 1); + Ok(()) + } + + #[benchmark] + fn create_sponsored_account_with_delegation( + s: Linear<0, { T::MaxSchemaGrantsPerDelegation::get() }>, + ) -> Result<(), BenchmarkError> { + prep_signature_registry::(); + + let caller: T::AccountId = whitelisted_caller(); + assert_ok!(Msa::::create(RawOrigin::Signed(caller.clone()).into())); + assert_ok!(Msa::::create_provider( + RawOrigin::Signed(caller.clone()).into(), + Vec::from("Foo") + )); + + let schemas: Vec = (0..s as u16).collect(); + T::SchemaValidator::set_schema_count(schemas.len().try_into().unwrap()); + let (payload, signature, key) = create_payload_and_signature::(schemas, 1u64); + + #[extrinsic_call] + _(RawOrigin::Signed(caller), key.clone(), signature, payload); + + assert!(PublicKeyToMsaId::::get(key).is_some()); + Ok(()) + } + + #[benchmark] + fn revoke_delegation_by_provider() -> Result<(), BenchmarkError> { + let provider_account = create_account::("account", 0); + let (provider_msa_id, provider_public_key) = + Msa::::create_account(provider_account, EMPTY_FUNCTION).unwrap(); + + let delegator_account = create_account::("account", 1); + let (delegator_msa_id, _) = + Msa::::create_account(delegator_account, EMPTY_FUNCTION).unwrap(); + + assert_ok!(Msa::::add_provider( + ProviderId(provider_msa_id), + DelegatorId(delegator_msa_id), + vec![] + )); + + #[extrinsic_call] + _(RawOrigin::Signed(provider_public_key), delegator_msa_id); + + assert_eq!(frame_system::Pallet::::events().len(), 1); + assert_eq!( + DelegatorAndProviderToDelegation::::get( + DelegatorId(delegator_msa_id), + ProviderId(provider_msa_id) + ) + .unwrap() + .revoked_at, + BlockNumberFor::::from(1u32) + ); + Ok(()) + } + + #[benchmark] + fn add_public_key_to_msa() -> Result<(), BenchmarkError> { + prep_signature_registry::(); + + let (provider_public_key, _, _) = create_msa_account_and_keys::(); + let (delegator_public_key, delegator_key_pair, delegator_msa_id) = + create_msa_account_and_keys::(); + + let (add_key_payload, new_public_key_signature, new_public_key) = + add_key_payload_and_signature::(delegator_msa_id); + + let encoded_add_key_payload = wrap_binary_data(add_key_payload.encode()); + let owner_signature = MultiSignature::Sr25519( + delegator_key_pair.sign(&encoded_add_key_payload).unwrap().into(), + ); + + #[extrinsic_call] + _( + RawOrigin::Signed(provider_public_key.clone()), + delegator_public_key.clone(), + owner_signature, + new_public_key_signature, + add_key_payload, + ); + + assert!(PublicKeyToMsaId::::get(new_public_key).is_some()); + Ok(()) + } + + #[benchmark] + fn delete_msa_public_key() -> Result<(), BenchmarkError> { + frame_system::Pallet::::set_block_number(1u32.into()); + prep_signature_registry::(); + + let (provider_public_key, _, _) = create_msa_account_and_keys::(); + let (caller_and_delegator_public_key, delegator_key_pair, delegator_msa_id) = + create_msa_account_and_keys::(); + + let (add_key_payload, new_public_key_signature, new_public_key) = + add_key_payload_and_signature::(delegator_msa_id); + + let encoded_add_key_payload = wrap_binary_data(add_key_payload.encode()); + let owner_signature = MultiSignature::Sr25519( + delegator_key_pair.sign(&encoded_add_key_payload).unwrap().into(), + ); + + assert_ok!(Msa::::add_public_key_to_msa( + RawOrigin::Signed(provider_public_key).into(), + caller_and_delegator_public_key.clone(), + owner_signature, + new_public_key_signature, + add_key_payload + )); + + #[extrinsic_call] + _(RawOrigin::Signed(caller_and_delegator_public_key), new_public_key.clone()); + + assert!(PublicKeyToMsaId::::get(new_public_key).is_none()); + Ok(()) + } + + #[benchmark] + fn retire_msa() -> Result<(), BenchmarkError> { + let (delegator_account, _, _) = create_msa_account_and_keys::(); + + #[block] + { + assert_ok!(Msa::::retire_msa(RawOrigin::Signed(delegator_account.clone()).into())); + } + // Assert that the MSA has no accounts + let key_count = PublicKeyCountForMsaId::::get(1); + assert_eq!(key_count, 0); + Ok(()) + } + + #[benchmark] + fn grant_delegation( + s: Linear<0, { T::MaxSchemaGrantsPerDelegation::get() }>, + ) -> Result<(), BenchmarkError> { + prep_signature_registry::(); + + let provider_caller: T::AccountId = whitelisted_caller(); + + let schemas: Vec = (0..s as u16).collect(); + T::SchemaValidator::set_schema_count(schemas.len().try_into().unwrap()); + + let (provider_msa_id, _) = + Msa::::create_account(provider_caller.clone(), EMPTY_FUNCTION).unwrap(); + assert_ok!(Msa::::create_provider( + RawOrigin::Signed(provider_caller.clone()).into(), + Vec::from("Foo") + )); + + let (payload, signature, delegator_key) = + create_payload_and_signature::(schemas, provider_msa_id); + let (delegator_msa_id, _) = + Msa::::create_account(delegator_key.clone(), EMPTY_FUNCTION).unwrap(); + + #[extrinsic_call] + _(RawOrigin::Signed(provider_caller), delegator_key, signature, payload); + + assert_eq!(frame_system::Pallet::::events().len(), 1); + assert!(DelegatorAndProviderToDelegation::::get( + DelegatorId(delegator_msa_id), + ProviderId(provider_msa_id) + ) + .is_some()); + Ok(()) + } + + #[benchmark] + fn revoke_delegation_by_delegator() -> Result<(), BenchmarkError> { + let provider_account = create_account::("account", 0); + let (provider_msa_id, _) = + Msa::::create_account(provider_account, EMPTY_FUNCTION).unwrap(); + + let delegator_account = create_account::("account", 1); + let (delegator_msa_id, delegator_public_key) = + Msa::::create_account(delegator_account, EMPTY_FUNCTION).unwrap(); + + assert_ok!(Msa::::add_provider( + ProviderId(provider_msa_id), + DelegatorId(delegator_msa_id), + vec![] + )); + + #[extrinsic_call] + _(RawOrigin::Signed(delegator_public_key), provider_msa_id); + + assert_eq!(frame_system::Pallet::::events().len(), 1); + assert_eq!( + DelegatorAndProviderToDelegation::::get( + DelegatorId(delegator_msa_id), + ProviderId(provider_msa_id) + ) + .unwrap() + .revoked_at, + BlockNumberFor::::from(1u32) + ); + Ok(()) + } + + #[benchmark] + fn create_provider() -> Result<(), BenchmarkError> { + let s = T::MaxProviderNameSize::get(); + + let provider_name = (1..s as u8).collect::>(); + let account = create_account::("account", 0); + let (provider_msa_id, provider_public_key) = + Msa::::create_account(account, EMPTY_FUNCTION).unwrap(); + + #[extrinsic_call] + _(RawOrigin::Signed(provider_public_key), provider_name); + + assert!(ProviderToRegistryEntry::::get(ProviderId(provider_msa_id)).is_some()); + Ok(()) + } + + #[benchmark] + fn create_provider_via_governance() -> Result<(), BenchmarkError> { + let s = T::MaxProviderNameSize::get(); + + let provider_name = (1..s as u8).collect::>(); + let account = create_account::("account", 0); + let (provider_msa_id, provider_public_key) = + Msa::::create_account(account, EMPTY_FUNCTION).unwrap(); + + #[extrinsic_call] + _(RawOrigin::Root, provider_public_key, provider_name); + + assert!(Msa::::is_registered_provider(provider_msa_id)); + Ok(()) + } + + #[benchmark] + fn propose_to_be_provider() -> Result<(), BenchmarkError> { + let s = T::MaxProviderNameSize::get(); + + let provider_name = (1..s as u8).collect::>(); + let account = create_account::("account", 0); + let (_, provider_public_key) = Msa::::create_account(account, EMPTY_FUNCTION).unwrap(); + + #[extrinsic_call] + _(RawOrigin::Signed(provider_public_key), provider_name); + + assert_eq!(frame_system::Pallet::::events().len(), 1); + Ok(()) + } + + #[benchmark] + fn reindex_offchain() -> Result<(), BenchmarkError> { + let key = create_account::("account", 0); + let caller = whitelisted_caller(); + let msa_id = 1u64; + let event = OffchainReplayEvent::MsaPallet(MsaOffchainReplayEvent::KeyReIndex { + msa_id, + index_key: Some(key), + }); + + #[extrinsic_call] + _(RawOrigin::Signed(caller), event); + + Ok(()) + } + impl_benchmark_test_suite!( + Msa, + crate::tests::mock::new_test_ext_keystore(), + crate::tests::mock::Test + ); +} diff --git a/pallets/msa/src/lib.rs b/pallets/msa/src/lib.rs new file mode 100644 index 0000000000..71fe7b0e51 --- /dev/null +++ b/pallets/msa/src/lib.rs @@ -0,0 +1,1946 @@ +//! Message Source Account Management +//! +//! ## Quick Links +//! - [Configuration: `Config`](Config) +//! - [Extrinsics: `Call`](Call) +//! - [Runtime API: `MsaRuntimeApi`](../pallet_msa_runtime_api/trait.MsaRuntimeApi.html) +//! - [Custom RPC API: `MsaApiServer`](../pallet_msa_rpc/trait.MsaApiServer.html) +//! - [Event Enum: `Event`](Event) +//! - [Error Enum: `Error`](Error) +#![doc = include_str!("../README.md")] +//! +//! ## Implementations +//! +//! - [`MsaLookup`](../common_primitives/msa/trait.MsaLookup.html): Functions for accessing MSAs. +//! - [`MsaValidator`](../common_primitives/msa/trait.MsaValidator.html): Functions for validating MSAs. +//! - [`ProviderLookup`](../common_primitives/msa/trait.ProviderLookup.html): Functions for accessing Provider info. +//! - [`DelegationValidator`](../common_primitives/msa/trait.DelegationValidator.html): Functions for validating delegations. +//! - [`SchemaGrantValidator`](../common_primitives/msa/trait.SchemaGrantValidator.html): Functions for validating schema grants. +//! +//! ## Assumptions +//! +//! - Total MSA keys should be less than the constant `Config::MSA::MaxPublicKeysPerMsa`. +//! - Maximum schemas, for which any single provider has publishing rights on behalf of a single user, must be less than `Config::MSA::MaxSchemaGrantsPerDelegation` +#![allow(clippy::expect_used)] +#![cfg_attr(not(feature = "std"), no_std)] +// Strong Documentation Lints +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + missing_docs +)] + +use frame_support::{ + dispatch::{DispatchInfo, DispatchResult, PostDispatchInfo}, + pallet_prelude::*, + traits::IsSubType, +}; +use lazy_static::lazy_static; +use parity_scale_codec::{Decode, Encode}; + +use common_runtime::signature::check_signature; + +#[cfg(feature = "runtime-benchmarks")] +use common_primitives::benchmarks::{MsaBenchmarkHelper, RegisterProviderBenchmarkHelper}; + +use common_primitives::{ + capacity::TargetValidator, + handles::HandleProvider, + msa::*, + node::{EIP712Encode, ProposalProvider}, + schema::{SchemaId, SchemaValidator}, + signatures::{AccountAddressMapper, EthereumAddressMapper}, +}; +use frame_system::pallet_prelude::*; +use scale_info::TypeInfo; +use sp_core::crypto::AccountId32; +use sp_io::hashing::keccak_256; +#[allow(deprecated)] +#[allow(unused)] +use sp_runtime::{ + traits::{ + BlockNumberProvider, Convert, DispatchInfoOf, DispatchOriginOf, Dispatchable, + SignedExtension, TransactionExtension, ValidateResult, Zero, + }, + ArithmeticError, DispatchError, MultiSignature, +}; +extern crate alloc; +use alloc::{boxed::Box, vec, vec::Vec}; + +pub use pallet::*; +pub use types::{AddKeyData, AddProvider, PermittedDelegationSchemas, EMPTY_FUNCTION}; +pub use weights::*; + +/// Offchain storage for MSA pallet +pub mod offchain_storage; +pub use offchain_storage::*; + +#[cfg(feature = "runtime-benchmarks")] +mod benchmarking; + +#[cfg(test)] +mod tests; + +pub mod types; + +pub mod weights; + +#[frame_support::pallet] +pub mod pallet { + use super::*; + + #[pallet::config] + pub trait Config: frame_system::Config { + /// The overarching event type. + type RuntimeEvent: From> + IsType<::RuntimeEvent>; + + /// Weight information for extrinsics in this pallet. + type WeightInfo: WeightInfo; + + /// AccountId truncated to 32 bytes + type ConvertIntoAccountId32: Convert; + + /// Maximum count of keys allowed per MSA + #[pallet::constant] + type MaxPublicKeysPerMsa: Get; + + /// Maximum count of schemas granted for publishing data per Provider + #[pallet::constant] + type MaxSchemaGrantsPerDelegation: Get; + + /// Maximum provider name size allowed per MSA association + #[pallet::constant] + type MaxProviderNameSize: Get; + + /// A type that will supply schema related information. + type SchemaValidator: SchemaValidator; + + /// A type that will supply `Handle` related information. + type HandleProvider: HandleProvider; + + /// The number of blocks before a signature can be ejected from the PayloadSignatureRegistryList + #[pallet::constant] + type MortalityWindowSize: Get; + + /// The maximum number of signatures that can be stored in PayloadSignatureRegistryList. + #[pallet::constant] + type MaxSignaturesStored: Get>; + + /// The origin that is allowed to create providers via governance + type CreateProviderViaGovernanceOrigin: EnsureOrigin; + + /// The runtime call dispatch type. + type Proposal: Parameter + + Dispatchable + + From>; + + /// The Council proposal provider interface + type ProposalProvider: ProposalProvider; + } + + const STORAGE_VERSION: StorageVersion = StorageVersion::new(1); + + #[pallet::pallet] + #[pallet::storage_version(STORAGE_VERSION)] + pub struct Pallet(_); + + /// Storage type for the current MSA identifier maximum. + /// We need to track this value because the identifier maximum + /// is incremented each time a new identifier is created. + /// - Value: The current maximum MSA Id + #[pallet::storage] + pub type CurrentMsaIdentifierMaximum = StorageValue<_, MessageSourceId, ValueQuery>; + + /// Storage type for mapping the relationship between a Delegator and its Provider. + /// - Keys: Delegator MSA, Provider MSA + /// - Value: [`Delegation`](common_primitives::msa::Delegation) + #[pallet::storage] + pub type DelegatorAndProviderToDelegation = StorageDoubleMap< + _, + Twox64Concat, + DelegatorId, + Twox64Concat, + ProviderId, + Delegation, T::MaxSchemaGrantsPerDelegation>, + OptionQuery, + >; + + /// Provider registration information + /// - Key: Provider MSA Id + /// - Value: [`ProviderRegistryEntry`](common_primitives::msa::ProviderRegistryEntry) + #[pallet::storage] + pub type ProviderToRegistryEntry = StorageMap< + _, + Twox64Concat, + ProviderId, + ProviderRegistryEntry, + OptionQuery, + >; + + /// Storage type for key to MSA information + /// - Key: AccountId + /// - Value: [`MessageSourceId`] + #[pallet::storage] + pub type PublicKeyToMsaId = + StorageMap<_, Twox64Concat, T::AccountId, MessageSourceId, OptionQuery>; + + /// Storage type for a reference counter of the number of keys associated to an MSA + /// - Key: MSA Id + /// - Value: [`u8`] Counter of Keys associated with the MSA + #[pallet::storage] + pub(super) type PublicKeyCountForMsaId = + StorageMap<_, Twox64Concat, MessageSourceId, u8, ValueQuery>; + + /// PayloadSignatureRegistryList is used to prevent replay attacks for extrinsics + /// that take an externally-signed payload. + /// For this to work, the payload must include a mortality block number, which + /// is used in lieu of a monotonically increasing nonce. + /// + /// The list is forwardly linked. (Example has a list size of 3) + /// - signature, forward pointer -> n = new signature + /// - 1,2 -> 2,3 (oldest) + /// - 2,3 -> 3,4 + /// - 3,4 -> 4,5 + /// - 5 -> n (newest in pointer data) + /// ### Storage + /// - Key: Signature + /// - Value: Tuple + /// - `BlockNumber` when the keyed signature can be ejected from the registry + /// - [`MultiSignature`] the forward linked list pointer. This pointer is the next "newest" value. + #[pallet::storage] + pub(super) type PayloadSignatureRegistryList = StorageMap< + _, // prefix + Twox64Concat, // hasher for key1 + MultiSignature, // An externally-created Signature for an external payload, provided by an extrinsic + (BlockNumberFor, MultiSignature), // An actual flipping block number and the oldest signature at write time + OptionQuery, // The type for the query + GetDefault, // OnEmpty return type, defaults to None + T::MaxSignaturesStored, // Maximum total signatures to store + >; + + /// This is the pointer for the Payload Signature Registry + /// Contains the pointers to the data stored in the `PayloadSignatureRegistryList` + /// - Value: [`SignatureRegistryPointer`] + #[pallet::storage] + pub(super) type PayloadSignatureRegistryPointer = + StorageValue<_, SignatureRegistryPointer>>; + + /// A temporary storage for looking up relevant events from off-chain index + /// At the start of the next block this storage is set to 0 + #[pallet::storage] + #[pallet::whitelist_storage] + pub(super) type OffchainIndexEventCount = StorageValue<_, u16, ValueQuery>; + + #[pallet::event] + #[pallet::generate_deposit(pub (super) fn deposit_event)] + pub enum Event { + /// A new Message Service Account was created with a new MessageSourceId + MsaCreated { + /// The MSA for the Event + msa_id: MessageSourceId, + + /// The key added to the MSA + key: T::AccountId, + }, + /// An AccountId has been associated with a MessageSourceId + PublicKeyAdded { + /// The MSA for the Event + msa_id: MessageSourceId, + + /// The key added to the MSA + key: T::AccountId, + }, + /// An AccountId had all permissions revoked from its MessageSourceId + PublicKeyDeleted { + /// The key no longer approved for the associated MSA + key: T::AccountId, + }, + /// A delegation relationship was added with the given provider and delegator + DelegationGranted { + /// The Provider MSA Id + provider_id: ProviderId, + + /// The Delegator MSA Id + delegator_id: DelegatorId, + }, + /// A Provider-MSA relationship was registered + ProviderCreated { + /// The MSA id associated with the provider + provider_id: ProviderId, + }, + /// The Delegator revoked its delegation to the Provider + DelegationRevoked { + /// The Provider MSA Id + provider_id: ProviderId, + + /// The Delegator MSA Id + delegator_id: DelegatorId, + }, + /// The MSA has been retired. + MsaRetired { + /// The MSA id for the Event + msa_id: MessageSourceId, + }, + /// A an update to the delegation occurred (ex. schema permissions where updated). + DelegationUpdated { + /// The Provider MSA Id + provider_id: ProviderId, + + /// The Delegator MSA Id + delegator_id: DelegatorId, + }, + } + + #[pallet::error] + pub enum Error { + /// Tried to add a key that was already registered to an MSA + KeyAlreadyRegistered, + + /// MsaId values have reached the maximum + MsaIdOverflow, + + /// Cryptographic signature verification failed for adding a key to MSA + MsaOwnershipInvalidSignature, + + /// Ony the MSA Owner may perform the operation + NotMsaOwner, + + /// Cryptographic signature failed verification + InvalidSignature, + + /// Only the KeyOwner may perform the operation + NotKeyOwner, + + /// An operation was attempted with an unknown Key + NoKeyExists, + + /// The number of key values has reached its maximum + KeyLimitExceeded, + + /// A transaction's Origin (AccountId) may not remove itself + InvalidSelfRemoval, + + /// An MSA may not be its own delegate + InvalidSelfProvider, + + /// An invalid schema Id was provided + InvalidSchemaId, + + /// The delegation relationship already exists for the given MSA Ids + DuplicateProvider, + + /// Cryptographic signature verification failed for adding the Provider as delegate + AddProviderSignatureVerificationFailed, + + /// Origin attempted to add a delegate for someone else's MSA + UnauthorizedDelegator, + + /// Origin attempted to add a different delegate than what was in the payload + UnauthorizedProvider, + + /// The operation was attempted with a revoked delegation + DelegationRevoked, + + /// The operation was attempted with an unknown delegation + DelegationNotFound, + + /// The MSA id submitted for provider creation has already been associated with a provider + DuplicateProviderRegistryEntry, + + /// The maximum length for a provider name has been exceeded + ExceedsMaxProviderNameSize, + + /// The maximum number of schema grants has been exceeded + ExceedsMaxSchemaGrantsPerDelegation, + + /// Provider is not permitted to publish for given schema_id + SchemaNotGranted, + + /// The operation was attempted with a non-provider MSA + ProviderNotRegistered, + + /// The submitted proof has expired; the current block is less the expiration block + ProofHasExpired, + + /// The submitted proof expiration block is too far in the future + ProofNotYetValid, + + /// Attempted to add a signature when the signature is already in the registry + SignatureAlreadySubmitted, + + /// Cryptographic signature verification failed for proving ownership of new public-key. + NewKeyOwnershipInvalidSignature, + + /// Attempted to request validity of schema permission or delegation in the future. + CannotPredictValidityPastCurrentBlock, + + /// Attempted to add a new signature to a full signature registry + SignatureRegistryLimitExceeded, + + /// Attempted to add a new signature to a corrupt signature registry + SignatureRegistryCorrupted, + } + + impl BlockNumberProvider for Pallet { + type BlockNumber = BlockNumberFor; + + fn current_block_number() -> Self::BlockNumber { + frame_system::Pallet::::block_number() + } + } + + #[pallet::hooks] + impl Hooks> for Pallet { + fn on_initialize(_block_number: BlockNumberFor) -> Weight { + >::set(0u16); + // allocates 1 read and 1 write for any access of `MSAEventCount` in every block + T::DbWeight::get().reads_writes(1u64, 1u64) + } + + fn offchain_worker(block_number: BlockNumberFor) { + log::info!("Running offchain workers! {:?}", block_number); + do_offchain_worker::(block_number) + } + } + + #[pallet::call] + impl Pallet { + /// Creates an MSA for the Origin (sender of the transaction). Origin is assigned an MSA ID. + /// + /// # Events + /// * [`Event::MsaCreated`] + /// + /// # Errors + /// + /// * [`Error::KeyAlreadyRegistered`] - MSA is already registered to the Origin. + /// + #[pallet::call_index(0)] + #[pallet::weight(T::WeightInfo::create())] + pub fn create(origin: OriginFor) -> DispatchResult { + let public_key = ensure_signed(origin)?; + + let (new_msa_id, new_public_key) = + Self::create_account(public_key, |_| -> DispatchResult { Ok(()) })?; + + let event = Event::MsaCreated { msa_id: new_msa_id, key: new_public_key }; + offchain_index_event::(Some(&event), new_msa_id); + Self::deposit_event(event); + Ok(()) + } + + /// `Origin` MSA creates an MSA on behalf of `delegator_key`, creates a Delegation with the `delegator_key`'s MSA as the Delegator and `origin` as `Provider`. Deposits events [`MsaCreated`](Event::MsaCreated) and [`DelegationGranted`](Event::DelegationGranted). + /// + /// # Remarks + /// * Origin MUST be the provider + /// * Signatures should be over the [`AddProvider`] struct + /// + /// # Events + /// * [`Event::MsaCreated`] + /// * [`Event::DelegationGranted`] + /// + /// # Errors + /// + /// * [`Error::UnauthorizedProvider`] - payload's MSA does not match given provider MSA. + /// * [`Error::InvalidSignature`] - `proof` verification fails; `delegator_key` must have signed `add_provider_payload` + /// * [`Error::NoKeyExists`] - there is no MSA for `origin`. + /// * [`Error::KeyAlreadyRegistered`] - there is already an MSA for `delegator_key`. + /// * [`Error::ProviderNotRegistered`] - the a non-provider MSA is used as the provider + /// * [`Error::ProofNotYetValid`] - `add_provider_payload` expiration is too far in the future + /// * [`Error::ProofHasExpired`] - `add_provider_payload` expiration is in the past + /// * [`Error::SignatureAlreadySubmitted`] - signature has already been used + /// + #[pallet::call_index(1)] + #[pallet::weight(T::WeightInfo::create_sponsored_account_with_delegation( + add_provider_payload.schema_ids.len() as u32 + ))] + pub fn create_sponsored_account_with_delegation( + origin: OriginFor, + delegator_key: T::AccountId, + proof: MultiSignature, + add_provider_payload: AddProvider, + ) -> DispatchResult { + let provider_key = ensure_signed(origin)?; + + ensure!( + Self::verify_signature(&proof, &delegator_key, &add_provider_payload), + Error::::InvalidSignature + ); + + Self::register_signature(&proof, add_provider_payload.expiration.into())?; + + let provider_msa_id = Self::ensure_valid_msa_key(&provider_key)?; + ensure!( + add_provider_payload.authorized_msa_id == provider_msa_id, + Error::::UnauthorizedProvider + ); + + // Verify that the provider is a registered provider + ensure!( + Self::is_registered_provider(provider_msa_id), + Error::::ProviderNotRegistered + ); + + let (new_delegator_msa_id, new_delegator_public_key) = + Self::create_account(delegator_key, |new_msa_id| -> DispatchResult { + Self::add_provider( + ProviderId(provider_msa_id), + DelegatorId(new_msa_id), + add_provider_payload.schema_ids, + )?; + Ok(()) + })?; + + let event = + Event::MsaCreated { msa_id: new_delegator_msa_id, key: new_delegator_public_key }; + offchain_index_event::(Some(&event), new_delegator_msa_id); + Self::deposit_event(event); + Self::deposit_event(Event::DelegationGranted { + delegator_id: DelegatorId(new_delegator_msa_id), + provider_id: ProviderId(provider_msa_id), + }); + Ok(()) + } + + /// Adds an association between MSA id and ProviderRegistryEntry. As of now, the + /// only piece of metadata we are recording is provider name. + /// + /// # Events + /// * [`Event::ProviderCreated`] + /// + /// # Errors + /// * [`Error::NoKeyExists`] - origin does not have an MSA + /// * [`Error::ExceedsMaxProviderNameSize`] - Too long of a provider name + /// * [`Error::DuplicateProviderRegistryEntry`] - a ProviderRegistryEntry associated with the given MSA id already exists. + /// + #[pallet::call_index(2)] + #[pallet::weight(T::WeightInfo::create_provider())] + pub fn create_provider(origin: OriginFor, provider_name: Vec) -> DispatchResult { + let provider_key = ensure_signed(origin)?; + let provider_msa_id = Self::ensure_valid_msa_key(&provider_key)?; + Self::create_provider_for(provider_msa_id, provider_name)?; + Self::deposit_event(Event::ProviderCreated { + provider_id: ProviderId(provider_msa_id), + }); + Ok(()) + } + + /// Creates a new Delegation for an existing MSA, with `origin` as the Provider and `delegator_key` is the delegator. + /// Since it is being sent on the Delegator's behalf, it requires the Delegator to authorize the new Delegation. + /// + /// # Remarks + /// * Origin MUST be the provider + /// * Signatures should be over the [`AddProvider`] struct + /// + /// # Events + /// * [`Event::DelegationGranted`] + /// + /// # Errors + /// * [`Error::AddProviderSignatureVerificationFailed`] - `origin`'s MSA ID does not equal `add_provider_payload.authorized_msa_id`. + /// * [`Error::DuplicateProvider`] - there is already a Delegation for `origin` MSA and `delegator_key` MSA. + /// * [`Error::UnauthorizedProvider`] - `add_provider_payload.authorized_msa_id` does not match MSA ID of `delegator_key`. + /// * [`Error::InvalidSelfProvider`] - Cannot delegate to the same MSA + /// * [`Error::InvalidSignature`] - `proof` verification fails; `delegator_key` must have signed `add_provider_payload` + /// * [`Error::NoKeyExists`] - there is no MSA for `origin` or `delegator_key`. + /// * [`Error::ProviderNotRegistered`] - the a non-provider MSA is used as the provider + /// * [`Error::UnauthorizedDelegator`] - Origin attempted to add a delegate for someone else's MSA + /// + #[pallet::call_index(3)] + #[pallet::weight(T::WeightInfo::grant_delegation(add_provider_payload.schema_ids.len() as u32))] + pub fn grant_delegation( + origin: OriginFor, + delegator_key: T::AccountId, + proof: MultiSignature, + add_provider_payload: AddProvider, + ) -> DispatchResult { + let provider_key = ensure_signed(origin)?; + + ensure!( + Self::verify_signature(&proof, &delegator_key, &add_provider_payload), + Error::::AddProviderSignatureVerificationFailed + ); + + Self::register_signature(&proof, add_provider_payload.expiration.into())?; + let (provider_id, delegator_id) = + Self::ensure_valid_registered_provider(&delegator_key, &provider_key)?; + + ensure!( + add_provider_payload.authorized_msa_id == provider_id.0, + Error::::UnauthorizedDelegator + ); + + Self::upsert_schema_permissions( + provider_id, + delegator_id, + add_provider_payload.schema_ids, + )?; + Self::deposit_event(Event::DelegationGranted { delegator_id, provider_id }); + + Ok(()) + } + + /// Delegator (Origin) MSA terminates a delegation relationship with the `Provider` MSA. Deposits event[`DelegationRevoked`](Event::DelegationRevoked). + /// + /// # Events + /// * [`Event::DelegationRevoked`] + /// + /// # Errors + /// + /// * [`Error::NoKeyExists`] - origin does not have an MSA + /// * [`Error::DelegationRevoked`] - the delegation has already been revoked. + /// * [`Error::DelegationNotFound`] - there is not delegation relationship between Origin and Delegator or Origin and Delegator are the same. + /// + #[pallet::call_index(4)] + #[pallet::weight((T::WeightInfo::revoke_delegation_by_delegator(), DispatchClass::Normal, Pays::No))] + pub fn revoke_delegation_by_delegator( + origin: OriginFor, + #[pallet::compact] provider_msa_id: MessageSourceId, + ) -> DispatchResult { + let who = ensure_signed(origin)?; + + match PublicKeyToMsaId::::get(&who) { + Some(delegator_msa_id) => { + let delegator_id = DelegatorId(delegator_msa_id); + let provider_id = ProviderId(provider_msa_id); + Self::revoke_provider(provider_id, delegator_id)?; + Self::deposit_event(Event::DelegationRevoked { delegator_id, provider_id }); + }, + None => { + log::error!( + "SignedExtension did not catch invalid MSA for account {:?}, ", + who + ); + }, + } + + Ok(()) + } + + /// Adds a new public key to an existing Message Source Account (MSA). This functionality enables the MSA owner to manage multiple keys + /// for their account or rotate keys for enhanced security. + /// + /// The `origin` parameter represents the account from which the function is called and can be either the MSA owner's account or a delegated provider's account, + /// depending on the intended use. + /// + /// The function requires two signatures: `msa_owner_proof` and `new_key_owner_proof`, which serve as proofs of ownership for the existing MSA + /// and the new public key account, respectively. This ensures that a new key cannot be added without permission of both the MSA owner and the owner of the new key. + /// + /// The necessary information for the key addition, the new public key and the MSA ID, is contained in the `add_key_payload` parameter of type [AddKeyData]. + /// It also contains an expiration block number for both proofs, ensuring they are valid and must be greater than the current block. + /// + /// # Events + /// * [`Event::PublicKeyAdded`] + /// + /// # Errors + /// + /// * [`Error::MsaOwnershipInvalidSignature`] - `key` is not a valid signer of the provided `add_key_payload`. + /// * [`Error::NewKeyOwnershipInvalidSignature`] - `key` is not a valid signer of the provided `add_key_payload`. + /// * [`Error::NoKeyExists`] - the MSA id for the account in `add_key_payload` does not exist. + /// * [`Error::NotMsaOwner`] - Origin's MSA is not the same as 'add_key_payload` MSA. Essentially you can only add a key to your own MSA. + /// * [`Error::ProofHasExpired`] - the current block is less than the `expired` block number set in `AddKeyData`. + /// * [`Error::ProofNotYetValid`] - the `expired` block number set in `AddKeyData` is greater than the current block number plus mortality_block_limit(). + /// * [`Error::SignatureAlreadySubmitted`] - signature has already been used. + /// + #[pallet::call_index(5)] + #[pallet::weight(T::WeightInfo::add_public_key_to_msa())] + pub fn add_public_key_to_msa( + origin: OriginFor, + msa_owner_public_key: T::AccountId, + msa_owner_proof: MultiSignature, + new_key_owner_proof: MultiSignature, + add_key_payload: AddKeyData, + ) -> DispatchResult { + let _ = ensure_signed(origin)?; + + ensure!( + Self::verify_signature(&msa_owner_proof, &msa_owner_public_key, &add_key_payload), + Error::::MsaOwnershipInvalidSignature + ); + + ensure!( + Self::verify_signature( + &new_key_owner_proof, + &add_key_payload.new_public_key, + &add_key_payload + ), + Error::::NewKeyOwnershipInvalidSignature + ); + + Self::register_signature(&msa_owner_proof, add_key_payload.expiration)?; + Self::register_signature(&new_key_owner_proof, add_key_payload.expiration)?; + + let msa_id = add_key_payload.msa_id; + + Self::ensure_msa_owner(&msa_owner_public_key, msa_id)?; + + Self::add_key( + msa_id, + &add_key_payload.new_public_key.clone(), + |msa_id| -> DispatchResult { + let event = Event::PublicKeyAdded { + msa_id, + key: add_key_payload.new_public_key.clone(), + }; + offchain_index_event::(Some(&event), msa_id); + Self::deposit_event(event); + Ok(()) + }, + )?; + + Ok(()) + } + + /// Remove a key associated with an MSA by expiring it at the current block. + /// + /// # Remarks + /// * Removal of key deletes the association of the key with the MSA. + /// * The key can be re-added to same or another MSA if needed. + /// + /// # Events + /// * [`Event::PublicKeyDeleted`] + /// + /// # Errors + /// * [`Error::InvalidSelfRemoval`] - `origin` and `key` are the same. + /// * [`Error::NotKeyOwner`] - `origin` does not own the MSA ID associated with `key`. + /// * [`Error::NoKeyExists`] - `origin` or `key` are not associated with `origin`'s MSA ID. + /// + #[pallet::call_index(6)] + #[pallet::weight((T::WeightInfo::delete_msa_public_key(), DispatchClass::Normal, Pays::No))] + pub fn delete_msa_public_key( + origin: OriginFor, + public_key_to_delete: T::AccountId, + ) -> DispatchResult { + let who = ensure_signed(origin)?; + + match PublicKeyToMsaId::::get(&who) { + Some(who_msa_id) => { + Self::delete_key_for_msa(who_msa_id, &public_key_to_delete)?; + + // Deposit the event + let event = Event::PublicKeyDeleted { key: public_key_to_delete }; + offchain_index_event::(Some(&event), who_msa_id); + Self::deposit_event(event); + }, + None => { + log::error!( + "SignedExtension did not catch invalid MSA for account {:?}, ", + who + ); + }, + } + Ok(()) + } + + /// Provider MSA terminates Delegation with a Delegator MSA by expiring the Delegation at the current block. + /// + /// # Events + /// * [`Event::DelegationRevoked`] + /// + /// # Errors + /// + /// * [`Error::NoKeyExists`] - `provider_key` does not have an MSA key. + /// * [`Error::DelegationRevoked`] - delegation is already revoked + /// * [`Error::DelegationNotFound`] - no Delegation found between origin MSA and delegator MSA. + /// + #[pallet::call_index(7)] + #[pallet::weight((T::WeightInfo::revoke_delegation_by_provider(), DispatchClass::Normal, Pays::No))] + pub fn revoke_delegation_by_provider( + origin: OriginFor, + #[pallet::compact] delegator: MessageSourceId, + ) -> DispatchResult { + let who = ensure_signed(origin)?; + + // Revoke delegation relationship entry in the delegation registry by expiring it + // at the current block + // validity checks are in SignedExtension so in theory this should never error. + match PublicKeyToMsaId::::get(&who) { + Some(msa_id) => { + let provider_id = ProviderId(msa_id); + let delegator_id = DelegatorId(delegator); + Self::revoke_provider(provider_id, delegator_id)?; + Self::deposit_event(Event::DelegationRevoked { provider_id, delegator_id }) + }, + None => { + log::error!( + "SignedExtension did not catch invalid MSA for account {:?}, ", + who + ); + }, + } + + Ok(()) + } + + // REMOVED grant_schema_permissions() at call index 8 + // REMOVED revoke_schema_permissions() at call index 9 + + /// Retires a MSA + /// + /// When a user wants to disassociate themselves from Frequency, they can retire their MSA for free provided that: + /// (1) They own the MSA + /// (2) The MSA is not a registered provider. + /// (3) They retire their user handle (if they have one) + /// (4) There is only one account key + /// (5) The user has already deleted all delegations to providers + /// + /// This does not currently remove any messages related to the MSA. + /// + /// # Events + /// * [`Event::PublicKeyDeleted`] + /// * [`Event::MsaRetired`] + /// + /// # Errors + /// * [`Error::NoKeyExists`] - `delegator` does not have an MSA key. + /// + #[pallet::call_index(10)] + #[pallet::weight((T::WeightInfo::retire_msa(), DispatchClass::Normal, Pays::No))] + pub fn retire_msa(origin: OriginFor) -> DispatchResult { + // Check and get the account id from the origin + let who = ensure_signed(origin)?; + + // Delete the last and only account key and deposit the "PublicKeyDeleted" event + // check for valid MSA is in SignedExtension. + match PublicKeyToMsaId::::get(&who) { + Some(msa_id) => { + Self::delete_key_for_msa(msa_id, &who)?; + let event = Event::PublicKeyDeleted { key: who }; + offchain_index_event::(Some(&event), msa_id); + Self::deposit_event(event); + Self::deposit_event(Event::MsaRetired { msa_id }); + }, + None => { + log::error!( + "SignedExtension did not catch invalid MSA for account {:?}, ", + who + ); + }, + } + Ok(()) + } + + /// Propose to be a provider. Creates a proposal for council approval to create a provider from a MSA + /// + /// # Errors + /// - [`NoKeyExists`](Error::NoKeyExists) - If there is not MSA for `origin`. + #[pallet::call_index(11)] + #[pallet::weight(T::WeightInfo::propose_to_be_provider())] + pub fn propose_to_be_provider( + origin: OriginFor, + provider_name: Vec, + ) -> DispatchResult { + let bounded_name: BoundedVec = + provider_name.try_into().map_err(|_| Error::::ExceedsMaxProviderNameSize)?; + + let proposer = ensure_signed(origin)?; + Self::ensure_valid_msa_key(&proposer)?; + + let proposal: Box = Box::new( + (Call::::create_provider_via_governance { + provider_key: proposer.clone(), + provider_name: bounded_name.into(), + }) + .into(), + ); + let threshold = 1; + T::ProposalProvider::propose(proposer, threshold, proposal)?; + Ok(()) + } + + /// Create a provider by means of governance approval + /// + /// # Events + /// * [`Event::ProviderCreated`] + /// + /// # Errors + /// * [`Error::NoKeyExists`] - account does not have an MSA + /// * [`Error::ExceedsMaxProviderNameSize`] - Too long of a provider name + /// * [`Error::DuplicateProviderRegistryEntry`] - a ProviderRegistryEntry associated with the given MSA id already exists. + #[pallet::call_index(12)] + #[pallet::weight(T::WeightInfo::create_provider_via_governance())] + pub fn create_provider_via_governance( + origin: OriginFor, + provider_key: T::AccountId, + provider_name: Vec, + ) -> DispatchResult { + T::CreateProviderViaGovernanceOrigin::ensure_origin(origin)?; + let provider_msa_id = Self::ensure_valid_msa_key(&provider_key)?; + Self::create_provider_for(provider_msa_id, provider_name)?; + Self::deposit_event(Event::ProviderCreated { + provider_id: ProviderId(provider_msa_id), + }); + Ok(()) + } + + /// A generic endpoint to replay any offchain related event to fix any potential issues + #[pallet::call_index(13)] + #[pallet::weight(T::WeightInfo::reindex_offchain())] + pub fn reindex_offchain( + origin: OriginFor, + event: OffchainReplayEvent, + ) -> DispatchResult { + let _ = ensure_signed(origin)?; + match event { + OffchainReplayEvent::MsaPallet(MsaOffchainReplayEvent::KeyReIndex { + msa_id, + index_key, + }) => { + // don't need to check existence of msa_id since it would get checked on offchain side + match index_key { + Some(key) => { + let event = Event::PublicKeyAdded { msa_id, key }; + offchain_index_event::(Some(&event), msa_id); + }, + None => { + offchain_index_event::(None, msa_id); + }, + } + }, + } + + Ok(()) + } + } +} + +impl Pallet { + /// Create the account for the `key` + /// + /// # Errors + /// * [`Error::MsaIdOverflow`] + /// * [`Error::KeyLimitExceeded`] + /// * [`Error::KeyAlreadyRegistered`] + /// + pub fn create_account( + key: T::AccountId, + on_success: F, + ) -> Result<(MessageSourceId, T::AccountId), DispatchError> + where + F: FnOnce(MessageSourceId) -> DispatchResult, + { + let next_msa_id = Self::get_next_msa_id()?; + Self::add_key(next_msa_id, &key, on_success)?; + let _ = Self::set_msa_identifier(next_msa_id); + + Ok((next_msa_id, key)) + } + + /// Generate the next MSA Id + /// + /// # Errors + /// * [`Error::MsaIdOverflow`] + /// + pub fn get_next_msa_id() -> Result { + let next = CurrentMsaIdentifierMaximum::::get() + .checked_add(1) + .ok_or(Error::::MsaIdOverflow)?; + + Ok(next) + } + + /// Set the current identifier in storage + pub fn set_msa_identifier(identifier: MessageSourceId) -> DispatchResult { + CurrentMsaIdentifierMaximum::::set(identifier); + + Ok(()) + } + + /// Create Register Provider + pub fn create_registered_provider( + provider_id: ProviderId, + name: BoundedVec, + ) -> DispatchResult { + ProviderToRegistryEntry::::try_mutate(provider_id, |maybe_metadata| -> DispatchResult { + ensure!(maybe_metadata.take().is_none(), Error::::DuplicateProviderRegistryEntry); + *maybe_metadata = Some(ProviderRegistryEntry { provider_name: name }); + Ok(()) + }) + } + + /// Adds a list of schema permissions to a delegation relationship. + pub fn grant_permissions_for_schemas( + delegator_id: DelegatorId, + provider_id: ProviderId, + schema_ids: Vec, + ) -> DispatchResult { + Self::try_mutate_delegation(delegator_id, provider_id, |delegation, is_new_delegation| { + ensure!(!is_new_delegation, Error::::DelegationNotFound); + Self::ensure_all_schema_ids_are_valid(&schema_ids)?; + + PermittedDelegationSchemas::::try_insert_schemas(delegation, schema_ids)?; + + Ok(()) + }) + } + + /// Revokes a list of schema permissions from a delegation relationship. + pub fn revoke_permissions_for_schemas( + delegator_id: DelegatorId, + provider_id: ProviderId, + schema_ids: Vec, + ) -> DispatchResult { + Self::try_mutate_delegation(delegator_id, provider_id, |delegation, is_new_delegation| { + ensure!(!is_new_delegation, Error::::DelegationNotFound); + Self::ensure_all_schema_ids_are_valid(&schema_ids)?; + + let current_block = frame_system::Pallet::::block_number(); + + PermittedDelegationSchemas::::try_get_mut_schemas( + delegation, + schema_ids, + current_block, + )?; + + Ok(()) + }) + } + + /// Add a new key to the MSA + /// + /// # Errors + /// * [`Error::KeyLimitExceeded`] + /// * [`Error::KeyAlreadyRegistered`] + /// + pub fn add_key(msa_id: MessageSourceId, key: &T::AccountId, on_success: F) -> DispatchResult + where + F: FnOnce(MessageSourceId) -> DispatchResult, + { + PublicKeyToMsaId::::try_mutate(key, |maybe_msa_id| { + ensure!(maybe_msa_id.is_none(), Error::::KeyAlreadyRegistered); + *maybe_msa_id = Some(msa_id); + + // Increment the key counter + >::try_mutate(msa_id, |key_count| { + // key_count:u8 should default to 0 if it does not exist + let incremented_key_count = + key_count.checked_add(1).ok_or(ArithmeticError::Overflow)?; + + ensure!( + incremented_key_count <= T::MaxPublicKeysPerMsa::get(), + Error::::KeyLimitExceeded + ); + + *key_count = incremented_key_count; + on_success(msa_id) + }) + }) + } + + /// Check that schema ids are all valid + /// + /// # Errors + /// * [`Error::InvalidSchemaId`] + /// * [`Error::ExceedsMaxSchemaGrantsPerDelegation`] + /// + pub fn ensure_all_schema_ids_are_valid(schema_ids: &[SchemaId]) -> DispatchResult { + ensure!( + schema_ids.len() <= T::MaxSchemaGrantsPerDelegation::get() as usize, + Error::::ExceedsMaxSchemaGrantsPerDelegation + ); + + let are_schemas_valid = T::SchemaValidator::are_all_schema_ids_valid(schema_ids); + + ensure!(are_schemas_valid, Error::::InvalidSchemaId); + + Ok(()) + } + + /// Returns if provider is registered by checking if the [`ProviderToRegistryEntry`] contains the MSA id + pub fn is_registered_provider(msa_id: MessageSourceId) -> bool { + ProviderToRegistryEntry::::contains_key(ProviderId(msa_id)) + } + + /// Checks that a provider and delegator keys are valid + /// and that a provider and delegator are not the same + /// and that a provider has authorized a delegator to create a delegation relationship. + /// + /// # Errors + /// * [`Error::ProviderNotRegistered`] + /// * [`Error::InvalidSelfProvider`] + /// * [`Error::NoKeyExists`] + /// + pub fn ensure_valid_registered_provider( + delegator_key: &T::AccountId, + provider_key: &T::AccountId, + ) -> Result<(ProviderId, DelegatorId), DispatchError> { + let provider_msa_id = Self::ensure_valid_msa_key(provider_key)?; + let delegator_msa_id = Self::ensure_valid_msa_key(delegator_key)?; + + // Ensure that the delegator is not the provider. You cannot delegate to yourself. + ensure!(delegator_msa_id != provider_msa_id, Error::::InvalidSelfProvider); + + // Verify that the provider is a registered provider + ensure!(Self::is_registered_provider(provider_msa_id), Error::::ProviderNotRegistered); + + Ok((provider_msa_id.into(), delegator_msa_id.into())) + } + + /// Checks that the MSA for `who` is the same as `msa_id` + /// + /// # Errors + /// * [`Error::NotMsaOwner`] + /// * [`Error::NoKeyExists`] + /// + pub fn ensure_msa_owner(who: &T::AccountId, msa_id: MessageSourceId) -> DispatchResult { + let provider_msa_id = Self::ensure_valid_msa_key(who)?; + ensure!(provider_msa_id == msa_id, Error::::NotMsaOwner); + + Ok(()) + } + + /// Verify the `signature` was signed by `signer` on `payload` by a wallet + /// Note the `wrap_binary_data` follows the Polkadot wallet pattern of wrapping with `` tags. + /// + /// # Errors + /// * [`Error::InvalidSignature`] + /// + pub fn verify_signature

( + signature: &MultiSignature, + signer: &T::AccountId, + payload: &P, + ) -> bool + where + P: Encode + EIP712Encode, + { + let key = T::ConvertIntoAccountId32::convert((*signer).clone()); + + check_signature(signature, key, payload) + } + + /// Add a provider to a delegator with the default permissions + /// + /// # Errors + /// * [`Error::ExceedsMaxSchemaGrantsPerDelegation`] + /// + pub fn add_provider( + provider_id: ProviderId, + delegator_id: DelegatorId, + schema_ids: Vec, + ) -> DispatchResult { + Self::try_mutate_delegation(delegator_id, provider_id, |delegation, is_new_delegation| { + ensure!(is_new_delegation, Error::::DuplicateProvider); + Self::ensure_all_schema_ids_are_valid(&schema_ids)?; + + PermittedDelegationSchemas::::try_insert_schemas(delegation, schema_ids)?; + + Ok(()) + }) + } + + /// Modify delegation's schema permissions + /// + /// # Errors + /// * [`Error::ExceedsMaxSchemaGrantsPerDelegation`] + pub fn upsert_schema_permissions( + provider_id: ProviderId, + delegator_id: DelegatorId, + schema_ids: Vec, + ) -> DispatchResult { + Self::try_mutate_delegation(delegator_id, provider_id, |delegation, _is_new_delegation| { + Self::ensure_all_schema_ids_are_valid(&schema_ids)?; + + // Create revoke and insert lists + let mut revoke_ids: Vec = Vec::new(); + let mut update_ids: Vec = Vec::new(); + let mut insert_ids: Vec = Vec::new(); + + let existing_keys = delegation.schema_permissions.keys(); + + for existing_schema_id in existing_keys { + if !schema_ids.contains(existing_schema_id) { + if let Some(block) = delegation.schema_permissions.get(existing_schema_id) { + if *block == BlockNumberFor::::zero() { + revoke_ids.push(*existing_schema_id); + } + } + } + } + for schema_id in &schema_ids { + if !delegation.schema_permissions.contains_key(schema_id) { + insert_ids.push(*schema_id); + } else { + update_ids.push(*schema_id); + } + } + + let current_block = frame_system::Pallet::::block_number(); + + // Revoke any that are not in the new list that are not already revoked + PermittedDelegationSchemas::::try_get_mut_schemas( + delegation, + revoke_ids, + current_block, + )?; + + // Update any that are in the list but are not new + PermittedDelegationSchemas::::try_get_mut_schemas( + delegation, + update_ids, + BlockNumberFor::::zero(), + )?; + + // Insert any new ones that are not in the existing list + PermittedDelegationSchemas::::try_insert_schemas(delegation, insert_ids)?; + delegation.revoked_at = BlockNumberFor::::zero(); + Ok(()) + }) + } + + /// Adds an association between MSA id and ProviderRegistryEntry. As of now, the + /// only piece of metadata we are recording is provider name. + /// + /// # Events + /// * [`Event::ProviderCreated`] + /// + /// # Errors + /// * [`Error::NoKeyExists`] - account does not have an MSA + /// * [`Error::ExceedsMaxProviderNameSize`] - Too long of a provider name + /// * [`Error::DuplicateProviderRegistryEntry`] - a ProviderRegistryEntry associated with the given MSA id already exists. + /// + pub fn create_provider_for( + provider_msa_id: MessageSourceId, + provider_name: Vec, + ) -> DispatchResult { + let bounded_name: BoundedVec = + provider_name.try_into().map_err(|_| Error::::ExceedsMaxProviderNameSize)?; + + ProviderToRegistryEntry::::try_mutate( + ProviderId(provider_msa_id), + |maybe_metadata| -> DispatchResult { + ensure!( + maybe_metadata.take().is_none(), + Error::::DuplicateProviderRegistryEntry + ); + *maybe_metadata = Some(ProviderRegistryEntry { provider_name: bounded_name }); + Ok(()) + }, + )?; + Ok(()) + } + + /// Mutates the delegation relationship storage item only when the supplied function returns an 'Ok()' result. + /// The callback function 'f' takes the value (a delegation) and a reference to a boolean variable. This callback + /// sets the boolean variable to 'true' if the value is to be inserted and to 'false' if it is to be updated. + pub fn try_mutate_delegation>( + delegator_id: DelegatorId, + provider_id: ProviderId, + f: impl FnOnce( + &mut Delegation, T::MaxSchemaGrantsPerDelegation>, + bool, + ) -> Result, + ) -> Result { + DelegatorAndProviderToDelegation::::try_mutate_exists( + delegator_id, + provider_id, + |maybe_delegation_info| { + let is_new = maybe_delegation_info.is_none(); + let mut delegation = maybe_delegation_info.take().unwrap_or_default(); + + let result = f(&mut delegation, is_new)?; + + // only set the value if execution of 'f' is successful + *maybe_delegation_info = Some(delegation); + Ok(result) + }, + ) + } + + /// Deletes a key associated with a given MSA + /// + /// # Errors + /// * [`Error::NoKeyExists`] + /// + pub fn delete_key_for_msa(msa_id: MessageSourceId, key: &T::AccountId) -> DispatchResult { + PublicKeyToMsaId::::try_mutate_exists(key, |maybe_msa_id| { + ensure!(maybe_msa_id.is_some(), Error::::NoKeyExists); + + // Delete the key if it exists + *maybe_msa_id = None; + + >::try_mutate_exists(msa_id, |key_count| { + match key_count { + Some(1) => *key_count = None, + Some(count) => *count = *count - 1u8, + None => (), + } + + Ok(()) + }) + }) + } + + /// Revoke the grant for permissions from the delegator to the provider + /// + /// # Errors + /// * [`Error::DelegationRevoked`] + /// * [`Error::DelegationNotFound`] + /// + pub fn revoke_provider(provider_id: ProviderId, delegator_id: DelegatorId) -> DispatchResult { + DelegatorAndProviderToDelegation::::try_mutate_exists( + delegator_id, + provider_id, + |maybe_info| -> DispatchResult { + let mut info = maybe_info.take().ok_or(Error::::DelegationNotFound)?; + + ensure!( + info.revoked_at == BlockNumberFor::::default(), + Error::::DelegationRevoked + ); + + let current_block = frame_system::Pallet::::block_number(); + info.revoked_at = current_block; + *maybe_info = Some(info); + Ok(()) + }, + )?; + + Ok(()) + } + + /// Retrieves the MSA Id for a given `AccountId` + pub fn get_owner_of(key: &T::AccountId) -> Option { + PublicKeyToMsaId::::get(key) + } + + /// Retrieve MSA Id associated with `key` or return `NoKeyExists` + pub fn ensure_valid_msa_key(key: &T::AccountId) -> Result { + let msa_id = PublicKeyToMsaId::::get(key).ok_or(Error::::NoKeyExists)?; + Ok(msa_id) + } + + /// Get a list of Schema Ids that a provider has been granted access to + /// + /// # Errors + /// * [`Error::DelegationNotFound`] + /// * [`Error::SchemaNotGranted`] + /// + pub fn get_granted_schemas_by_msa_id( + delegator: DelegatorId, + provider: Option, + ) -> Result>>, DispatchError> { + let delegations = match provider { + Some(provider_id) => vec![( + provider_id, + Self::get_delegation_of(delegator, provider_id) + .ok_or(Error::::DelegationNotFound)?, + )], + None => DelegatorAndProviderToDelegation::::iter_prefix(delegator).collect(), + }; + + let mut result = vec![]; + for (provider_id, provider_info) in delegations { + let schema_permissions = provider_info.schema_permissions; + // checking only if this is called for a specific provider + if provider.is_some() && schema_permissions.is_empty() { + return Err(Error::::SchemaNotGranted.into()); + } + + let mut schema_list = Vec::new(); + for (schema_id, revoked_at) in schema_permissions { + if provider_info.revoked_at > BlockNumberFor::::zero() && + (revoked_at > provider_info.revoked_at || + revoked_at == BlockNumberFor::::zero()) + { + schema_list + .push(SchemaGrant { schema_id, revoked_at: provider_info.revoked_at }); + } else { + schema_list.push(SchemaGrant { schema_id, revoked_at }); + } + } + + result.push(DelegationResponse { provider_id, permissions: schema_list }); + } + + Ok(result) + } + + /// Converts an MSA ID into a synthetic Ethereum address (raw 20-byte format) by + /// taking the last 20 bytes of the keccak256 hash of the following: + /// [0..1]: 0xD9 (first byte of the keccak256 hash of the domain prefix "Frequency") + /// [1..9]: u64 (big endian) + /// [9..41]: keccack256("MSA Generated") + pub fn msa_id_to_eth_address(id: MessageSourceId) -> H160 { + /// First byte of the keccak256 hash of the domain prefix "Frequency" + /// This "domain separator" ensures that the generated address will not collide with Ethereum addresses + /// generated by the standard 'CREATE2' opcode. + const DOMAIN_PREFIX: u8 = 0xD9; + + lazy_static! { + /// Salt used to generate MSA addresses + static ref MSA_ADDRESS_SALT: [u8; 32] = keccak_256(b"MSA Generated"); + } + let input_value = id.to_be_bytes(); + + let mut hash_input = [0u8; 41]; + hash_input[0] = DOMAIN_PREFIX; + hash_input[1..9].copy_from_slice(&input_value); + hash_input[9..].copy_from_slice(&(*MSA_ADDRESS_SALT)); + + let hash = keccak_256(&hash_input); + H160::from_slice(&hash[12..]) + } + + /// Returns a boolean indicating whether the given Ethereum address was generated from the given MSA ID. + pub fn validate_eth_address_for_msa(address: &H160, msa_id: MessageSourceId) -> bool { + let generated_address = Self::msa_id_to_eth_address(msa_id); + *address == generated_address + } + + /// Converts a 20-byte synthetic Ethereum address into a checksummed string format, + /// using ERC-55 checksum rules. + /// Formats a 20-byte address into an EIP-55 checksummed `0x...` string. + pub fn eth_address_to_checksummed_string(address: &H160) -> alloc::string::String { + let addr_bytes = address.0; + let addr_hex = hex::encode(addr_bytes); + let hash = keccak_256(addr_hex.as_bytes()); + + let mut result = alloc::string::String::with_capacity(42); + result.push_str("0x"); + + for (i, c) in addr_hex.chars().enumerate() { + let hash_byte = hash[i / 2]; + let bit = if i % 2 == 0 { (hash_byte >> 4) & 0xf } else { hash_byte & 0xf }; + + result.push(if c.is_ascii_hexdigit() && c.is_ascii_alphabetic() { + if bit >= 8 { + c.to_ascii_uppercase() + } else { + c + } + } else { + c + }); + } + + result + } + + /// Adds a signature to the `PayloadSignatureRegistryList` + /// Check that mortality_block is within bounds. If so, proceed and add the new entry. + /// Raises `SignatureAlreadySubmitted` if the signature exists in the registry. + /// Raises `SignatureRegistryLimitExceeded` if the oldest signature of the list has not yet expired. + /// + /// Example list: + /// - `1,2 (oldest)` + /// - `2,3` + /// - `3,4` + /// - 4 (newest in pointer storage)` + /// + /// # Errors + /// * [`Error::ProofNotYetValid`] + /// * [`Error::ProofHasExpired`] + /// * [`Error::SignatureAlreadySubmitted`] + /// * [`Error::SignatureRegistryLimitExceeded`] + /// + pub fn register_signature( + signature: &MultiSignature, + signature_expires_at: BlockNumberFor, + ) -> DispatchResult { + let current_block = frame_system::Pallet::::block_number(); + + let max_lifetime = Self::mortality_block_limit(current_block); + ensure!(max_lifetime > signature_expires_at, Error::::ProofNotYetValid); + ensure!(current_block < signature_expires_at, Error::::ProofHasExpired); + + // Make sure it is not in the registry + ensure!( + !>::contains_key(signature), + Error::::SignatureAlreadySubmitted + ); + + Self::enqueue_signature(signature, signature_expires_at, current_block) + } + + /// Do the actual enqueuing into the list storage and update the pointer + fn enqueue_signature( + signature: &MultiSignature, + signature_expires_at: BlockNumberFor, + current_block: BlockNumberFor, + ) -> DispatchResult { + // Get the current pointer, or if this is the initialization, generate an empty pointer + let pointer = + PayloadSignatureRegistryPointer::::get().unwrap_or(SignatureRegistryPointer { + newest: signature.clone(), + newest_expires_at: signature_expires_at, + oldest: signature.clone(), + count: 0, + }); + + // Make sure it is not sitting as the `newest` in the pointer + ensure!( + !(pointer.count != 0 && pointer.newest.eq(signature)), + Error::::SignatureAlreadySubmitted + ); + + // Default to the current oldest signature in case we are still filling up + let mut oldest: MultiSignature = pointer.oldest.clone(); + + // We are now wanting to overwrite prior signatures + let is_registry_full: bool = pointer.count == T::MaxSignaturesStored::get().unwrap_or(0); + + // Maybe remove the oldest signature and update the oldest + if is_registry_full { + let (expire_block_number, next_oldest) = + PayloadSignatureRegistryList::::get(pointer.oldest.clone()) + .ok_or(Error::::SignatureRegistryCorrupted)?; + + ensure!( + current_block.gt(&expire_block_number), + Error::::SignatureRegistryLimitExceeded + ); + + // Move the oldest in the list to the next oldest signature + oldest = next_oldest.clone(); + + >::remove(pointer.oldest); + } + + // Add the newest signature if we are not the first + if pointer.count != 0 { + >::insert( + pointer.newest, + (pointer.newest_expires_at, signature.clone()), + ); + } + + // Update the pointer.newest to have the signature that just came in + PayloadSignatureRegistryPointer::::put(SignatureRegistryPointer { + // The count doesn't change if list is full + count: if is_registry_full { pointer.count } else { pointer.count + 1 }, + newest: signature.clone(), + newest_expires_at: signature_expires_at, + oldest, + }); + + Ok(()) + } + + /// The furthest in the future a mortality_block value is allowed + /// to be for current_block + /// This is calculated to be past the risk of a replay attack + fn mortality_block_limit(current_block: BlockNumberFor) -> BlockNumberFor { + let mortality_size = T::MortalityWindowSize::get(); + current_block + BlockNumberFor::::from(mortality_size) + } +} + +#[cfg(feature = "runtime-benchmarks")] +impl MsaBenchmarkHelper for Pallet { + /// adds delegation relationship with permitted schema ids + fn set_delegation_relationship( + provider: ProviderId, + delegator: DelegatorId, + schemas: Vec, + ) -> DispatchResult { + Self::add_provider(provider, delegator, schemas)?; + Ok(()) + } + + /// adds a new key to specified msa + fn add_key(msa_id: MessageSourceId, key: T::AccountId) -> DispatchResult { + Self::add_key(msa_id, &key, EMPTY_FUNCTION)?; + Ok(()) + } +} + +#[cfg(feature = "runtime-benchmarks")] +impl RegisterProviderBenchmarkHelper for Pallet { + /// Create a registered provider for benchmarks + fn create(provider_id: MessageSourceId, name: Vec) -> DispatchResult { + let name = BoundedVec::::try_from(name).expect("error"); + Self::create_registered_provider(provider_id.into(), name)?; + + Ok(()) + } +} + +impl MsaLookup for Pallet { + type AccountId = T::AccountId; + + fn get_msa_id(key: &Self::AccountId) -> Option { + Self::get_owner_of(key) + } +} + +impl MsaValidator for Pallet { + type AccountId = T::AccountId; + + fn ensure_valid_msa_key(key: &T::AccountId) -> Result { + Self::ensure_valid_msa_key(key) + } +} + +impl ProviderLookup for Pallet { + type BlockNumber = BlockNumberFor; + type MaxSchemaGrantsPerDelegation = T::MaxSchemaGrantsPerDelegation; + type SchemaId = SchemaId; + + fn get_delegation_of( + delegator: DelegatorId, + provider: ProviderId, + ) -> Option> { + DelegatorAndProviderToDelegation::::get(delegator, provider) + } +} + +impl DelegationValidator for Pallet { + type BlockNumber = BlockNumberFor; + type MaxSchemaGrantsPerDelegation = T::MaxSchemaGrantsPerDelegation; + type SchemaId = SchemaId; + + /// Check that the delegator has an active delegation to the provider. + /// `block_number`: Provide `None` to know if the delegation is active at the current block. + /// Provide Some(N) to know if the delegation was or will be active at block N. + /// + /// # Errors + /// * [`Error::DelegationNotFound`] + /// * [`Error::DelegationRevoked`] + /// * [`Error::CannotPredictValidityPastCurrentBlock`] + /// + fn ensure_valid_delegation( + provider_id: ProviderId, + delegator_id: DelegatorId, + block_number: Option>, + ) -> Result< + Delegation, T::MaxSchemaGrantsPerDelegation>, + DispatchError, + > { + let info = DelegatorAndProviderToDelegation::::get(delegator_id, provider_id) + .ok_or(Error::::DelegationNotFound)?; + let current_block = frame_system::Pallet::::block_number(); + let requested_block = match block_number { + Some(block_number) => { + ensure!( + current_block >= block_number, + Error::::CannotPredictValidityPastCurrentBlock + ); + block_number + }, + None => current_block, + }; + + if info.revoked_at == BlockNumberFor::::zero() { + return Ok(info); + } + ensure!(info.revoked_at >= requested_block, Error::::DelegationRevoked); + + Ok(info) + } +} + +impl TargetValidator for Pallet { + fn validate(target: MessageSourceId) -> bool { + Self::is_registered_provider(target) + } +} + +impl SchemaGrantValidator> for Pallet { + /// Check if provider is allowed to publish for a given schema_id for a given delegator + /// + /// # Errors + /// * [`Error::DelegationNotFound`] + /// * [`Error::DelegationRevoked`] + /// * [`Error::SchemaNotGranted`] + /// * [`Error::CannotPredictValidityPastCurrentBlock`] + /// + fn ensure_valid_schema_grant( + provider: ProviderId, + delegator: DelegatorId, + schema_id: SchemaId, + block_number: BlockNumberFor, + ) -> DispatchResult { + let provider_info = Self::ensure_valid_delegation(provider, delegator, Some(block_number))?; + + let schema_permission_revoked_at_block_number = provider_info + .schema_permissions + .get(&schema_id) + .ok_or(Error::::SchemaNotGranted)?; + + if *schema_permission_revoked_at_block_number == BlockNumberFor::::zero() { + return Ok(()); + } + + ensure!( + block_number <= *schema_permission_revoked_at_block_number, + Error::::SchemaNotGranted + ); + + Ok(()) + } +} + +impl MsaKeyProvider for Pallet { + type AccountId = T::AccountId; + // Returns true if ALL of the following are true: + // - The new key is Ethereum-compatible + // - Msa exists + // - The stored msa_id for the key == `msa_id` + // - It has only one key associated with it + fn key_eligible_for_subsidized_addition( + old_key: Self::AccountId, + new_key: Self::AccountId, + msa_id: MessageSourceId, + ) -> bool { + let new_address32 = T::ConvertIntoAccountId32::convert((new_key).clone()); + if EthereumAddressMapper::is_ethereum_address(&new_address32) { + if let Some(stored_msa_id) = Self::get_msa_id(&old_key) { + return stored_msa_id == msa_id && PublicKeyCountForMsaId::::get(msa_id).eq(&1u8); + } + } + false + } +} + +/// The SignedExtension trait is implemented on CheckFreeExtrinsicUse to validate that a provider +/// has not already been revoked if the calling extrinsic is revoking a provider to an MSA. The +/// purpose of this is to ensure that the revoke_delegation_by_delegator extrinsic cannot be +/// repeatedly called and flood the network. +#[derive(Encode, Decode, DecodeWithMemTracking, Clone, Eq, PartialEq, TypeInfo)] +#[scale_info(skip_type_params(T))] +pub struct CheckFreeExtrinsicUse(PhantomData); + +impl CheckFreeExtrinsicUse { + /// Validates the delegation by making sure that the MSA ids used are valid and the delegation is + /// is still active. Returns a `ValidTransaction` or wrapped [`ValidityError`] + /// # Arguments: + /// * `account_id`: the account id of the delegator that is revoking the delegation relationship + /// * `provider_msa_id` the MSA ID of the provider (the "other end" of the delegation). + /// + /// # Errors + /// * [`ValidityError::InvalidMsaKey`] - if `account_id` does not have an MSA + /// * [`ValidityError::InvalidDelegation`] - if the delegation with `delegator_msa_id` is invalid + /// + pub fn validate_delegation_by_delegator( + account_id: &T::AccountId, + provider_msa_id: &MessageSourceId, + ) -> TransactionValidity { + const TAG_PREFIX: &str = "DelegatorDelegationRevocation"; + let delegator_msa_id: DelegatorId = Pallet::::ensure_valid_msa_key(account_id) + .map_err(|_| InvalidTransaction::Custom(ValidityError::InvalidMsaKey as u8))? + .into(); + let provider_msa_id = ProviderId(*provider_msa_id); + + Pallet::::ensure_valid_delegation(provider_msa_id, delegator_msa_id, None) + .map_err(|_| InvalidTransaction::Custom(ValidityError::InvalidDelegation as u8))?; + ValidTransaction::with_tag_prefix(TAG_PREFIX).and_provides(account_id).build() + } + + /// Validates the delegation by making sure that the MSA ids used are valid and that the delegation + /// is still active. Returns a `ValidTransaction` or wrapped [`ValidityError`] + /// # Arguments: + /// * `account_id`: the account id of the provider that is revoking the delegation relationship + /// * `delegator_msa_id` the MSA ID of the delegator (the "other end" of the delegation). + /// + /// # Errors + /// * [`ValidityError::InvalidMsaKey`] - if `account_id` does not have an MSA + /// * [`ValidityError::InvalidDelegation`] - if the delegation with `delegator_msa_id` is invalid + /// + pub fn validate_delegation_by_provider( + account_id: &T::AccountId, + delegator_msa_id: &MessageSourceId, + ) -> TransactionValidity { + const TAG_PREFIX: &str = "ProviderDelegationRevocation"; + + let provider_msa_id: ProviderId = Pallet::::ensure_valid_msa_key(account_id) + .map_err(|_| InvalidTransaction::Custom(ValidityError::InvalidMsaKey as u8))? + .into(); + let delegator_msa_id = DelegatorId(*delegator_msa_id); + + // Verify the delegation exists and is active + Pallet::::ensure_valid_delegation(provider_msa_id, delegator_msa_id, None) + .map_err(|_| InvalidTransaction::Custom(ValidityError::InvalidDelegation as u8))?; + ValidTransaction::with_tag_prefix(TAG_PREFIX).and_provides(account_id).build() + } + + /// Validates that a key being revoked is both valid and owned by a valid MSA account. + /// Returns a `ValidTransaction` or wrapped [`ValidityError::InvalidMsaKey`] + /// Arguments: + /// * `signing_public_key`: the account id calling for revoking the key, and which + /// owns the msa also associated with `key` + /// * `public_key_to_delete`: the account id to revoke as an access key for account_id's msa + /// + /// # Errors + /// * [`ValidityError::InvalidSelfRemoval`] - if `signing_public_key` and `public_key_to_delete` are the same. + /// * [`ValidityError::InvalidMsaKey`] - if `account_id` does not have an MSA or if + /// 'public_key_to_delete' does not have an MSA. + /// * [`ValidityError::NotKeyOwner`] - if the `signing_public_key` and `public_key_to_delete` do not belong to the same MSA ID. + pub fn validate_key_delete( + signing_public_key: &T::AccountId, + public_key_to_delete: &T::AccountId, + ) -> TransactionValidity { + const TAG_PREFIX: &str = "KeyRevocation"; + + ensure!( + signing_public_key != public_key_to_delete, + InvalidTransaction::Custom(ValidityError::InvalidSelfRemoval as u8) + ); + + let maybe_owner_msa_id: MessageSourceId = + Pallet::::ensure_valid_msa_key(signing_public_key) + .map_err(|_| InvalidTransaction::Custom(ValidityError::InvalidMsaKey as u8))?; + + let msa_id_for_key_to_delete: MessageSourceId = + Pallet::::ensure_valid_msa_key(public_key_to_delete) + .map_err(|_| InvalidTransaction::Custom(ValidityError::InvalidMsaKey as u8))?; + + ensure!( + maybe_owner_msa_id == msa_id_for_key_to_delete, + InvalidTransaction::Custom(ValidityError::NotKeyOwner as u8) + ); + + ValidTransaction::with_tag_prefix(TAG_PREFIX) + .and_provides(signing_public_key) + .build() + } + + /// Validates that a MSA being retired exists, does not belong to a registered provider, + /// that `account_id` is the only access key associated with the MSA, + /// and that there are no delegations to providers. + /// Returns a `ValidTransaction` or wrapped [`ValidityError] + /// # Arguments: + /// * account_id: the account id associated with the MSA to retire + /// + /// # Errors + /// * [`ValidityError::InvalidMsaKey`] + /// * [`ValidityError::InvalidRegisteredProviderCannotBeRetired`] + /// * [`ValidityError::InvalidMoreThanOneKeyExists`] + /// * [`ValidityError::InvalidNonZeroProviderDelegations`] + /// + pub fn ensure_msa_can_retire(account_id: &T::AccountId) -> TransactionValidity { + const TAG_PREFIX: &str = "MSARetirement"; + let msa_id = Pallet::::ensure_valid_msa_key(account_id) + .map_err(|_| InvalidTransaction::Custom(ValidityError::InvalidMsaKey as u8))?; + + ensure!( + !Pallet::::is_registered_provider(msa_id), + InvalidTransaction::Custom( + ValidityError::InvalidRegisteredProviderCannotBeRetired as u8 + ) + ); + + let msa_handle = T::HandleProvider::get_handle_for_msa(msa_id); + ensure!( + msa_handle.is_none(), + InvalidTransaction::Custom(ValidityError::HandleNotRetired as u8) + ); + + let key_count = PublicKeyCountForMsaId::::get(msa_id); + ensure!( + key_count == 1, + InvalidTransaction::Custom(ValidityError::InvalidMoreThanOneKeyExists as u8) + ); + + let delegator_id = DelegatorId(msa_id); + let has_active_delegations: bool = DelegatorAndProviderToDelegation::::iter_key_prefix( + delegator_id, + ) + .any(|provider_id| { + Pallet::::ensure_valid_delegation(provider_id, delegator_id, None).is_ok() + }); + + ensure!( + !has_active_delegations, + InvalidTransaction::Custom(ValidityError::InvalidNonZeroProviderDelegations as u8) + ); + + ValidTransaction::with_tag_prefix(TAG_PREFIX).and_provides(account_id).build() + } +} + +/// Errors related to the validity of the CheckFreeExtrinsicUse signed extension. +pub enum ValidityError { + /// Delegation to provider is not found or expired. + InvalidDelegation, + /// MSA key as been revoked. + InvalidMsaKey, + /// Cannot retire a registered provider MSA + InvalidRegisteredProviderCannotBeRetired, + /// More than one account key exists for the MSA during retire attempt + InvalidMoreThanOneKeyExists, + /// A transaction's Origin (AccountId) may not remove itself + InvalidSelfRemoval, + /// NotKeyOwner + NotKeyOwner, + /// InvalidNonZeroProviderDelegations + InvalidNonZeroProviderDelegations, + /// HandleNotRetired + HandleNotRetired, +} + +impl CheckFreeExtrinsicUse { + /// Create new `SignedExtension` to check runtime version. + pub fn new() -> Self { + Self(PhantomData) + } +} + +impl core::fmt::Debug for CheckFreeExtrinsicUse { + #[cfg(feature = "std")] + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + write!(f, "CheckFreeExtrinsicUse<{:?}>", self.0) + } + #[cfg(not(feature = "std"))] + fn fmt(&self, _: &mut core::fmt::Formatter) -> core::fmt::Result { + Ok(()) + } +} + +#[allow(deprecated)] +impl SignedExtension for CheckFreeExtrinsicUse +where + T::RuntimeCall: Dispatchable + IsSubType>, +{ + type AccountId = T::AccountId; + type Call = T::RuntimeCall; + type AdditionalSigned = (); + type Pre = (); + const IDENTIFIER: &'static str = "CheckFreeExtrinsicUse"; + + fn additional_signed(&self) -> core::result::Result<(), TransactionValidityError> { + Ok(()) + } + + #[allow(deprecated)] + fn pre_dispatch( + self, + who: &Self::AccountId, + call: &Self::Call, + info: &DispatchInfoOf, + len: usize, + ) -> Result { + self.validate(who, call, info, len).map(|_| ()) + } + + /// Frequently called by the transaction queue to validate all free MSA extrinsics: + /// Returns a `ValidTransaction` or wrapped [`ValidityError`] + /// * revoke_delegation_by_provider + /// * revoke_delegation_by_delegator + /// * delete_msa_public_key + /// * retire_msa + /// + /// Validate functions for the above MUST prevent errors in the extrinsic logic to prevent spam. + /// + /// Arguments: + /// who: AccountId calling the extrinsic + /// call: The pallet extrinsic being called + /// unused: _info, _len + /// + #[allow(deprecated)] + fn validate( + &self, + who: &Self::AccountId, + call: &Self::Call, + _info: &DispatchInfoOf, + _len: usize, + ) -> TransactionValidity { + match call.is_sub_type() { + Some(Call::revoke_delegation_by_provider { delegator, .. }) => + CheckFreeExtrinsicUse::::validate_delegation_by_provider(who, delegator), + Some(Call::revoke_delegation_by_delegator { provider_msa_id, .. }) => + CheckFreeExtrinsicUse::::validate_delegation_by_delegator(who, provider_msa_id), + Some(Call::delete_msa_public_key { public_key_to_delete, .. }) => + CheckFreeExtrinsicUse::::validate_key_delete(who, public_key_to_delete), + Some(Call::retire_msa { .. }) => CheckFreeExtrinsicUse::::ensure_msa_can_retire(who), + _ => Ok(Default::default()), + } + } +} diff --git a/pallets/msa/src/offchain_storage.rs b/pallets/msa/src/offchain_storage.rs new file mode 100644 index 0000000000..5958eda968 --- /dev/null +++ b/pallets/msa/src/offchain_storage.rs @@ -0,0 +1,577 @@ +use crate::{pallet::OffchainIndexEventCount, Config, Event, Pallet, PublicKeyToMsaId}; +pub use common_primitives::msa::MessageSourceId; +/// Offchain Storage for MSA +use common_primitives::offchain::{ + self as offchain_common, get_msa_account_lock_name, get_msa_account_storage_key_name, + LockStatus, MSA_ACCOUNT_LOCK_TIMEOUT_EXPIRATION_MS, +}; +use frame_support::{RuntimeDebugNoBound, Twox128}; +use frame_system::pallet_prelude::BlockNumberFor; +use parity_scale_codec::{Decode, Encode}; +use sp_core::serde::{Deserialize, Serialize}; +extern crate alloc; +use alloc::{collections::btree_map::BTreeMap, string::String, vec, vec::Vec}; +use core::fmt::Debug; +use frame_support::{ + pallet_prelude::{DecodeWithMemTracking, TypeInfo}, + StorageHasher, +}; +use sp_io::offchain_index; +use sp_runtime::{ + offchain::{ + storage::StorageValueRef, + storage_lock::{BlockAndTime, StorageLock, Time}, + Duration, + }, + traits::One, + Saturating, +}; + +/// Block event storage prefix +const BLOCK_EVENT_KEY: &[u8] = b"frequency::block_event::msa::"; +/// Block event storage prefix for fork-aware events +const BLOCK_EVENT_FORK_AWARE_KEY: &[u8] = b"frequency::block_event_fork::msa::"; +/// number of buckets to map the events for fork-aware storage +const MAX_FORK_AWARE_BUCKET: u32 = 1000; +/// max number of events to check from storage +const MAX_NUMBER_OF_STORAGE_CHECKS: u16 = 1000; +/// Lock expiration timeout in in milli-seconds for initial data import msa pallet +const MSA_INITIAL_LOCK_TIMEOUT_EXPIRATION_MS: u64 = 6000; + +/// Lock expiration block for initial data import msa pallet +const MSA_INITIAL_LOCK_BLOCK_EXPIRATION_BLOCKS: u32 = 120; + +/// Lock name for initial data index for msa pallet +const MSA_INITIAL_LOCK_NAME: &[u8; 28] = b"Msa::ofw::initial-index-lock"; + +/// storage name for initial data import storage +pub const MSA_INITIAL_INDEXED_STORAGE_NAME: &[u8; 25] = b"Msa::ofw::initial-indexed"; + +/// Lock name for last processed block number events +const LAST_PROCESSED_BLOCK_LOCK_NAME: &[u8; 35] = b"Msa::ofw::last-processed-block-lock"; + +/// lst processed block storage name +pub const LAST_PROCESSED_BLOCK_STORAGE_NAME: &[u8; 30] = b"Msa::ofw::last-processed-block"; + +/// Lock expiration timeout in milliseconds for last processed block +const LAST_PROCESSED_BLOCK_LOCK_TIMEOUT_EXPIRATION_MS: u64 = 5000; + +/// Lock expiration for last processed block +const LAST_PROCESSED_BLOCK_LOCK_BLOCK_EXPIRATION_BLOCKS: u32 = 20; + +/// number of previous blocks to check to mitigate offchain worker skips processing any block +const NUMBER_OF_PREVIOUS_BLOCKS_TO_CHECK: u32 = 5u32; + +/// number of blocks to explore when trying to find the block number from block hash +const NUMBER_OF_BLOCKS_TO_EXPLORE: u32 = 1000; + +/// HTTP request deadline in milliseconds +pub const HTTP_REQUEST_DEADLINE_MS: u64 = 2000; + +/// LOCAL RPC URL and port +/// warning: this should be updated if rpc port is set to anything different from 9944 +pub const RPC_FINALIZED_BLOCK_REQUEST_URL: &str = "http://localhost:9944"; +/// request body for getting last finalized block from rpc +pub const RPC_FINALIZED_BLOCK_REQUEST_BODY: &[u8; 78] = + b"{\"id\": 10, \"jsonrpc\": \"2.0\", \"method\": \"chain_getFinalizedHead\", \"params\": []}"; + +/// The overarching Offchain replay type that can allow replay of different events across different pallets +#[derive( + TypeInfo, RuntimeDebugNoBound, Clone, Decode, DecodeWithMemTracking, Encode, PartialEq, Eq, +)] +#[scale_info(skip_type_params(T))] +pub enum OffchainReplayEvent { + /// Msa pallet related replay event + MsaPallet(MsaOffchainReplayEvent), +} +/// The Offchain replay type for Msa Pallet that can allow replay of different events +#[derive( + TypeInfo, RuntimeDebugNoBound, Clone, Decode, DecodeWithMemTracking, Encode, PartialEq, Eq, +)] +#[scale_info(skip_type_params(T))] +pub enum MsaOffchainReplayEvent { + /// Key re-indexing event + KeyReIndex { + /// Message Source Id that we like to reindex + msa_id: MessageSourceId, + /// optional key to index + index_key: Option, + }, +} + +/// offchain worker main execution function +pub fn do_offchain_worker(block_number: BlockNumberFor) { + if let Some(finalized_block_number) = get_finalized_block_number::(block_number) { + match offchain_index_initial_state::(finalized_block_number) { + LockStatus::Locked => { + log::info!("initiating-index is still locked in {:?}", block_number); + }, + LockStatus::Released => { + apply_offchain_events::(finalized_block_number); + }, + } + }; +} +/// stores the event into offchain DB using offchain indexing +pub fn offchain_index_event(event: Option<&Event>, msa_id: MessageSourceId) { + if let Some(event) = IndexedEvent::map(event, msa_id) { + let block_number: u32 = + >::block_number().try_into().unwrap_or_default(); + let current_event_count: u16 = >::get().saturating_add(1); + >::put(current_event_count); + let event_key = get_indexed_event_key(block_number, current_event_count); + // set the event in offchain storage + set_offchain_index(&event_key, event.clone()); + + // to ensure we can handle the issues due to forking and overriding stored events we double + // index an event, and we choose to use or discard it on offchain worker side + let fork_aware_key = get_fork_aware_event_key(block_number, get_bucket_number(&event)); + + set_offchain_index(&fork_aware_key, event); + } +} + +/// Offchain indexes all existing data in chain state +/// returns the LockStatus +fn offchain_index_initial_state(block_number: BlockNumberFor) -> LockStatus { + let mut lock = StorageLock::>>::with_block_and_time_deadline( + MSA_INITIAL_LOCK_NAME, + MSA_INITIAL_LOCK_BLOCK_EXPIRATION_BLOCKS, + Duration::from_millis(MSA_INITIAL_LOCK_TIMEOUT_EXPIRATION_MS), + ); + if let Ok(mut guard) = lock.try_lock() { + let processed_storage = StorageValueRef::persistent(MSA_INITIAL_INDEXED_STORAGE_NAME); + let is_initial_indexed = processed_storage.get::().unwrap_or(None); + + if !is_initial_indexed.unwrap_or_default() { + log::info!("Msa::ofw::initial-indexed is {:?}", is_initial_indexed); + + // setting last processed block so we can start indexing from that block after + // initial index is done + init_last_processed_block::(block_number); + + let mut counter = 0u64; + for (account_id, msa_id) in PublicKeyToMsaId::::iter() { + process_offchain_events::( + msa_id, + vec![IndexedEvent::IndexedPublicKeyAdded { key: account_id, msa_id }], + ); + + // extend the initial index lock + counter += 1; + if counter % 1000 == 0 { + log::info!("Added {} more keys!", counter); + if guard.extend_lock().is_err() { + log::warn!("lock is expired in block {:?}", block_number); + return LockStatus::Released; + } + } + } + + processed_storage.set(&true); + log::info!("Finished adding {} keys!", counter); + } + } else { + return LockStatus::Locked; + }; + LockStatus::Released +} + +/// apply offchain event into offchain DB +fn apply_offchain_events(block_number: BlockNumberFor) { + let mut lock = StorageLock::>>::with_block_and_time_deadline( + LAST_PROCESSED_BLOCK_LOCK_NAME, + LAST_PROCESSED_BLOCK_LOCK_BLOCK_EXPIRATION_BLOCKS, + Duration::from_millis(LAST_PROCESSED_BLOCK_LOCK_TIMEOUT_EXPIRATION_MS), + ); + + if let Ok(mut guard) = lock.try_lock() { + log::info!("processing events in {:?}", block_number); + + let last_processed_block_storage = + StorageValueRef::persistent(LAST_PROCESSED_BLOCK_STORAGE_NAME); + let default_starting_block_number = block_number + .saturating_sub(BlockNumberFor::::from(NUMBER_OF_PREVIOUS_BLOCKS_TO_CHECK)); + let mut start_block_number = last_processed_block_storage + .get::>() + .unwrap_or(Some(default_starting_block_number)) + .unwrap_or(default_starting_block_number); + + // since this is the last processed block number we already processed it and starting from the next one + start_block_number += BlockNumberFor::::one(); + while start_block_number <= block_number { + if reverse_map_msa_keys::(start_block_number) && guard.extend_lock().is_err() { + log::warn!("last processed block lock is expired in block {:?}", block_number); + break; + } + last_processed_block_storage.set(&start_block_number); + start_block_number += BlockNumberFor::::one(); + } + } else { + log::info!("skip processing events on {:?} due to existing lock!", block_number); + }; +} + +/// Set offchain index value, used to store MSA Events to be process by offchain worker +fn set_offchain_index(key: &[u8], value: V) +where + V: Encode + Clone + Decode + Eq + Debug, +{ + offchain_index::set(key, value.encode().as_slice()); +} + +/// Get offchain index value, used to store MSA Events to be process by offchain worker +fn get_offchain_index(key: &[u8]) -> Option +where + V: Encode + Clone + Decode + Eq + Debug, +{ + let value = offchain_common::get_index_value::(key); + value.unwrap_or_else(|e| { + log::error!("Error getting offchain index value: {:?}", e); + None + }) +} + +/// Offchain indexed compatible Event type +#[derive(Encode, Decode, Clone, PartialEq, Eq, RuntimeDebugNoBound)] +pub enum IndexedEvent { + /// A new Message Service Account was created with a new MessageSourceId + IndexedMsaCreated { + /// The MSA for the Event + msa_id: MessageSourceId, + + /// The key added to the MSA + key: T::AccountId, + }, + /// An AccountId has been associated with a MessageSourceId + IndexedPublicKeyAdded { + /// The MSA for the Event + msa_id: MessageSourceId, + + /// The key added to the MSA + key: T::AccountId, + }, + /// An AccountId had all permissions revoked from its MessageSourceId + IndexedPublicKeyDeleted { + /// The MSA for the Event + msa_id: MessageSourceId, + /// The key no longer approved for the associated MSA + key: T::AccountId, + }, + /// The offchain MSA->PubKey index has been marked invalid for the indicated MessageSourceId. + MsaIndexInvalidated { + /// The MSA for the Event + msa_id: MessageSourceId, + }, +} + +impl IndexedEvent { + /// maps a pallet event to indexed event type + pub fn map(event: Option<&Event>, event_msa_id: MessageSourceId) -> Option { + match event { + Some(Event::MsaCreated { msa_id, key }) => + Some(Self::IndexedMsaCreated { msa_id: *msa_id, key: key.clone() }), + Some(Event::PublicKeyAdded { msa_id, key }) => + Some(Self::IndexedPublicKeyAdded { msa_id: *msa_id, key: key.clone() }), + Some(Event::PublicKeyDeleted { key }) => + Some(Self::IndexedPublicKeyDeleted { msa_id: event_msa_id, key: key.clone() }), + None => Some(Self::MsaIndexInvalidated { msa_id: event_msa_id }), + _ => None, + } + } +} + +/// Initializes the last_process_block value in offchain DB +fn init_last_processed_block(current_block_number: BlockNumberFor) { + let mut last_processed_block_lock = StorageLock::<'_, Time>::with_deadline( + LAST_PROCESSED_BLOCK_LOCK_NAME, + Duration::from_millis(LAST_PROCESSED_BLOCK_LOCK_TIMEOUT_EXPIRATION_MS), + ); + let _ = last_processed_block_lock.lock(); + let last_processed_block_storage = + StorageValueRef::persistent(LAST_PROCESSED_BLOCK_STORAGE_NAME); + + // setting current_block-1 as the last processed so that we start indexing from current_block + let target_block: BlockNumberFor = + current_block_number.saturating_sub(BlockNumberFor::::one()); + last_processed_block_storage.set(&target_block); +} + +fn read_offchain_events( + block_number: BlockNumberFor, +) -> Vec<(IndexedEvent, Vec)> { + let current_block: u32 = block_number.try_into().unwrap_or_default(); + let mut events = vec![]; + + for i in 1..=MAX_NUMBER_OF_STORAGE_CHECKS { + let key = get_indexed_event_key(current_block, i); + match get_offchain_index::>(&key) { + Some(decoded_event) => { + events.push((decoded_event, key)); + }, + None => { + // no more events for this block + break; + }, + } + } + + for i in 1u16..=MAX_FORK_AWARE_BUCKET.try_into().unwrap_or_default() { + let key = get_fork_aware_event_key(current_block, i); + if let Some(decoded_event) = get_offchain_index::>(&key) { + events.push((decoded_event, key)); + } + } + events +} + +/// cleans the events from offchain storage +fn clean_offchain_events(storage_keys: &Vec>) { + for key in storage_keys { + offchain_index::clear(key); + } +} + +/// offchain worker callback for indexing msa keys +/// return true if there are events and false if not +fn reverse_map_msa_keys(block_number: BlockNumberFor) -> bool { + // read the events indexed for the current block + let events_to_process: Vec<(IndexedEvent, Vec)> = read_offchain_events(block_number); + let events_exists = !events_to_process.is_empty(); + if events_exists { + log::info!( + "found {} double indexed events for block {:?}", + events_to_process.len(), + block_number + ); + } + + // collect a replay of all events by MSA id + let mut events_by_msa_id: BTreeMap>> = BTreeMap::new(); + + // collect relevant events + for (event, _) in events_to_process.iter() { + match event { + IndexedEvent::IndexedPublicKeyAdded { msa_id, .. } | + IndexedEvent::IndexedMsaCreated { msa_id, .. } | + IndexedEvent::IndexedPublicKeyDeleted { msa_id, .. } | + IndexedEvent::MsaIndexInvalidated { msa_id } => { + let events = events_by_msa_id.entry(*msa_id).or_default(); + events.push(event.clone()); + }, + } + } + + // process and save to offchain db + for (msa_id, events) in events_by_msa_id { + if !events.is_empty() { + process_offchain_events(msa_id, events); + } + } + + if events_exists { + let storage_keys = events_to_process.iter().map(|(_, key)| key.clone()).collect(); + clean_offchain_events(&storage_keys); + } + + events_exists +} + +fn process_offchain_events(msa_id: MessageSourceId, events: Vec>) { + // Lock will specifically prevent multiple offchain workers from + // processing the same msa events at the same time + let msa_lock_name = get_msa_account_lock_name(msa_id); + let mut msa_lock = StorageLock::<'_, Time>::with_deadline( + &msa_lock_name, + Duration::from_millis(MSA_ACCOUNT_LOCK_TIMEOUT_EXPIRATION_MS), + ); + let _lock = msa_lock.lock(); + let msa_storage_name = get_msa_account_storage_key_name(msa_id); + let mut msa_storage = StorageValueRef::persistent(&msa_storage_name); + + let mut msa_keys = msa_storage.get::>().unwrap_or(None).unwrap_or_default(); + let mut old_msa_keys = msa_keys.clone(); + let mut changed = false; + + for event in events { + match &event { + IndexedEvent::IndexedPublicKeyAdded { key, .. } | + IndexedEvent::IndexedMsaCreated { key, .. } => { + if let Some(on_chain_msa_id) = PublicKeyToMsaId::::get(key) { + if on_chain_msa_id != msa_id { + log::warn!( + "{:?} forked onchain-MsaId={:?}, forked-MsaId=={:?}", + key, + on_chain_msa_id, + msa_id + ); + } else if !msa_keys.contains(key) { + msa_keys.push(key.clone()); + changed = true; + } + } + }, + IndexedEvent::IndexedPublicKeyDeleted { key, .. } => { + if PublicKeyToMsaId::::get(key).is_none() && msa_keys.contains(key) { + msa_keys.retain(|k| k != key); + old_msa_keys.retain(|k| k != key); + changed = true; + } + }, + IndexedEvent::MsaIndexInvalidated { .. } => { + // nothing to do since we take care of removing extra keys for all events anyway + }, + } + } + + // check old keys to ensure they are valid + for old_key in &old_msa_keys { + match PublicKeyToMsaId::::get(old_key) { + Some(on_chain_msa_id) if on_chain_msa_id == msa_id => { + // everything is as expected. Do nothing + }, + _ => { + msa_keys.retain(|k| k != old_key); + changed = true; + }, + } + } + + if changed { + if msa_keys.len() > 0 { + msa_storage.set(&msa_keys); + } else { + msa_storage.clear(); + } + } +} +/// Response type of rpc to get finalized block +#[derive(Serialize, Deserialize, Encode, Decode, Default, Debug)] +pub struct FinalizedBlockResponse { + /// Hex encoded hash of last finalized block + pub result: String, +} + +/// fetches finalized block hash from rpc +fn fetch_finalized_block_hash() -> Result { + // we are not able to use the custom extension in benchmarks due to feature conflict + let rpc_address = if cfg!(feature = "runtime-benchmarks") { + RPC_FINALIZED_BLOCK_REQUEST_URL.into() + } else { + // rpc address provided to offchain worker via custom extension + common_primitives::offchain::custom::get_val() + .unwrap_or(RPC_FINALIZED_BLOCK_REQUEST_URL.into()) + }; + let url = core::str::from_utf8(&rpc_address) + .map_err(|_| sp_runtime::offchain::http::Error::Unknown)?; + // We want to keep the offchain worker execution time reasonable, so we set a hard-coded + // deadline to 2s to complete the external call. + // You can also wait indefinitely for the response, however you may still get a timeout + // coming from the host machine. + let deadline = + sp_io::offchain::timestamp().add(Duration::from_millis(HTTP_REQUEST_DEADLINE_MS)); + let body = vec![RPC_FINALIZED_BLOCK_REQUEST_BODY]; + let request = sp_runtime::offchain::http::Request::post(url, body); + let pending = request + .add_header("Content-Type", "application/json") + .deadline(deadline) + .send() + .map_err(|_| sp_runtime::offchain::http::Error::IoError)?; + + let response = pending + .try_wait(deadline) + .map_err(|_| sp_runtime::offchain::http::Error::DeadlineReached)??; + // Let's check the status code before we proceed to reading the response. + if response.code != 200 { + log::warn!("Unexpected status code: {}", response.code); + return Err(sp_runtime::offchain::http::Error::Unknown); + } + + // Next we want to fully read the response body and collect it to a vector of bytes. + // Note that the return object allows you to read the body in chunks as well + // with a way to control the deadline. + let body = response.body().collect::>(); + + // Create a str slice from the body. + let body_str = core::str::from_utf8(&body).map_err(|_| { + log::warn!("No UTF8 body"); + sp_runtime::offchain::http::Error::Unknown + })?; + + log::debug!("{}", body_str); + let finalized_block_response: FinalizedBlockResponse = + serde_json::from_str(body_str).map_err(|_| sp_runtime::offchain::http::Error::Unknown)?; + + // skipping 0x on front + let decoded_from_hex = hex::decode(&finalized_block_response.result[2..]) + .map_err(|_| sp_runtime::offchain::http::Error::Unknown)?; + + let val = T::Hash::decode(&mut &decoded_from_hex[..]) + .map_err(|_| sp_runtime::offchain::http::Error::Unknown)?; + Ok(val) +} + +/// fetch finalized block hash and convert it to block number +fn get_finalized_block_number( + current_block: BlockNumberFor, +) -> Option> { + let mut finalized_block_number = None; + let last_finalized_hash = match fetch_finalized_block_hash::() { + Ok(hash) => hash, + Err(e) => { + log::error!("failure to get the finalized hash {:?}", e); + return finalized_block_number; + }, + }; + + // iterates on imported blocks to find the block_number from block_hash + let mut current_block_number = current_block; + let last_block_number = + current_block.saturating_sub(BlockNumberFor::::from(NUMBER_OF_BLOCKS_TO_EXPLORE)); + while current_block_number > last_block_number { + if last_finalized_hash == frame_system::Pallet::::block_hash(current_block_number) { + finalized_block_number = Some(current_block_number); + break; + } + current_block_number.saturating_dec(); + } + + match finalized_block_number { + None => { + log::error!( + "Not able to find any imported block with {:?} hash and {:?} block", + last_finalized_hash, + current_block + ); + }, + Some(inner) => { + log::info!( + "last finalized block number {:?} and hash {:?}", + inner, + last_finalized_hash + ); + }, + } + finalized_block_number +} + +/// converts an event to a number between [1, `MAX_FORK_AWARE_BUCKET`] +pub fn get_bucket_number(event: &IndexedEvent) -> u16 { + let hashed = Twox128::hash(&event.encode()); + // Directly combine the first 4 bytes into a u32 using shifts and bitwise OR + let num = (hashed[0] as u32) << 24 | + (hashed[1] as u32) << 16 | + (hashed[2] as u32) << 8 | + (hashed[3] as u32); + + ((num % MAX_FORK_AWARE_BUCKET) + 1u32) as u16 +} + +fn get_fork_aware_event_key(block_number: u32, event_index: u16) -> Vec { + [BLOCK_EVENT_FORK_AWARE_KEY, block_number.encode().as_slice(), event_index.encode().as_slice()] + .concat() +} + +fn get_indexed_event_key(block_number: u32, event_index: u16) -> Vec { + [BLOCK_EVENT_KEY, block_number.encode().as_slice(), event_index.encode().as_slice()].concat() +} diff --git a/pallets/msa/src/rpc/Cargo.toml b/pallets/msa/src/rpc/Cargo.toml new file mode 100644 index 0000000000..88e912ff8f --- /dev/null +++ b/pallets/msa/src/rpc/Cargo.toml @@ -0,0 +1,46 @@ +[package] +name = "pallet-msa-rpc" +version = "0.0.0" +description = "A package that adds RPC to Msa pallet" +authors = ["Frequency"] +license = "Apache-2.0" +publish = false +homepage = "https://frequency.xyz" +repository = "https://github.com/frequency-chain/frequency/" +edition = "2021" + +[dependencies] +parity-scale-codec = { workspace = true } +jsonrpsee = { workspace = true, features = ["client-core", "server", "macros"] } +rayon = { workspace = true } +# Frequency crates +pallet-msa-runtime-api = { default-features = false, path = "../runtime-api" } +common-primitives = { default-features = false, path = "../../../../common/primitives" } +common-helpers = { default-features = false, path = "../../../../common/helpers" } +# Substrate crates +sp-api = { workspace = true } +sp-blockchain = { workspace = true } +sp-runtime = { workspace = true } +sp-core = { workspace = true } +sp-offchain = { workspace = true } +parking_lot = { workspace = true } + +[dev-dependencies] +tokio = { workspace = true, features = ["macros", "time", "parking_lot"] } +sc-client-api = { workspace = true } + +[features] +default = ["std"] +std = [ + 'parity-scale-codec/std', + "sp-api/std", + "sp-runtime/std", + "sp-offchain/std", + "sp-core/std", + "pallet-msa-runtime-api/std", + 'common-primitives/std', + "common-helpers/std", +] + +[lints] +workspace = true diff --git a/pallets/msa/src/rpc/src/lib.rs b/pallets/msa/src/rpc/src/lib.rs new file mode 100644 index 0000000000..8b8305aab8 --- /dev/null +++ b/pallets/msa/src/rpc/src/lib.rs @@ -0,0 +1,204 @@ +// Strong Documentation Lints +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + missing_docs +)] + +//! Custom APIs for [MSA](../pallet_msa/index.html) + +use common_helpers::rpc::map_rpc_result; +use common_primitives::{ + msa::{ + DelegationResponse, DelegatorId, KeyInfoResponse, MessageSourceId, ProviderId, SchemaGrant, + }, + node::BlockNumber, + offchain::get_msa_account_storage_key_name, + schema::SchemaId, +}; +use jsonrpsee::{ + core::{async_trait, RpcResult}, + proc_macros::rpc, + tracing::warn, + types::{error::ErrorObjectOwned, ErrorObject}, +}; +use pallet_msa_runtime_api::MsaRuntimeApi; +use parity_scale_codec::{Codec, Decode}; +use parking_lot::RwLock; +use rayon::prelude::*; +use sp_api::ProvideRuntimeApi; +use sp_blockchain::HeaderBackend; +use sp_core::Bytes; +use sp_runtime::traits::Block as BlockT; +use std::sync::Arc; + +#[cfg(test)] +mod tests; + +/// Frequency MSA Custom RPC API +#[rpc(client, server)] +pub trait MsaApi { + /// Check for a list of delegations + /// Given a single provider, test a list of potential delegators + /// At a given block number + #[method(name = "msa_checkDelegations")] + fn check_delegations( + &self, + delegator_msa_ids: Vec, + provider_msa_id: ProviderId, + block_number: BlockNumber, + schema_id: Option, + ) -> RpcResult>; + + /// Retrieve the list of currently granted schemas given a delegator and provider pair + #[method(name = "msa_grantedSchemaIdsByMsaId")] + fn get_granted_schemas_by_msa_id( + &self, + delegator_msa_id: DelegatorId, + provider_msa_id: ProviderId, + ) -> RpcResult>>>; + + /// Retrieve the list of all delegations for a MsaId + #[method(name = "msa_getAllGrantedDelegationsByMsaId")] + fn get_all_granted_delegations_by_msa_id( + &self, + delegator_msa_id: DelegatorId, + ) -> RpcResult>>; + + /// Retrieve the list of keys for msa id + #[method(name = "msa_getKeysByMsaId")] + fn get_keys_by_msa_id( + &self, + msa_id: MessageSourceId, + ) -> RpcResult>>; +} + +/// The client handler for the API used by Frequency Service RPC with `jsonrpsee` +pub struct MsaHandler { + client: Arc, + offchain: Arc>>, + _marker: std::marker::PhantomData, +} + +impl MsaHandler +where + OffchainDB: Send + Sync, +{ + /// Create new instance with the given reference to the client. + pub fn new(client: Arc, offchain: Option) -> Self { + Self { client, offchain: Arc::new(RwLock::new(offchain)), _marker: Default::default() } + } +} + +/// Errors that occur on the client RPC +#[derive(Debug)] +pub enum MsaOffchainRpcError { + /// Error acquiring lock + ErrorAcquiringLock, + /// Error decoding data + ErrorDecodingData, + /// Offchain indexing is not enabled + OffchainIndexingNotEnabled, +} + +impl From for ErrorObjectOwned { + fn from(e: MsaOffchainRpcError) -> Self { + let msg = format!("{:?}", e); + + match e { + MsaOffchainRpcError::ErrorAcquiringLock => ErrorObject::owned(1, msg, None::<()>), + MsaOffchainRpcError::ErrorDecodingData => ErrorObject::owned(2, msg, None::<()>), + MsaOffchainRpcError::OffchainIndexingNotEnabled => + ErrorObject::owned(3, msg, None::<()>), + } + } +} + +#[async_trait] +impl MsaApiServer<::Hash, AccountId> + for MsaHandler +where + Block: BlockT, + C: Send + Sync + 'static, + C: ProvideRuntimeApi, + C: HeaderBackend, + C::Api: MsaRuntimeApi, + AccountId: Codec, + OffchainDB: sp_core::offchain::OffchainStorage + 'static, +{ + fn check_delegations( + &self, + delegator_msa_ids: Vec, + provider_msa_id: ProviderId, + block_number: BlockNumber, + schema_id: Option, + ) -> RpcResult> { + let at = self.client.info().best_hash; + let results = delegator_msa_ids + .par_iter() + .map(|delegator_msa_id| { + let api = self.client.runtime_api(); + // api.has_delegation returns Result), so _or(false) should not happen, + // but just in case, protect against panic + let has_delegation: bool = match api.has_delegation( + at, + *delegator_msa_id, + provider_msa_id, + block_number, + schema_id, + ) { + Ok(result) => result, + Err(e) => { + warn!("ApiError from has_delegation! {:?}", e); + false + }, + }; + (*delegator_msa_id, has_delegation) + }) + .collect(); + Ok(results) + } + + fn get_granted_schemas_by_msa_id( + &self, + delegator_msa_id: DelegatorId, + provider_msa_id: ProviderId, + ) -> RpcResult>>> { + let api = self.client.runtime_api(); + let at = self.client.info().best_hash; + let runtime_api_result = + api.get_granted_schemas_by_msa_id(at, delegator_msa_id, provider_msa_id); + map_rpc_result(runtime_api_result) + } + + fn get_all_granted_delegations_by_msa_id( + &self, + delegator_msa_id: DelegatorId, + ) -> RpcResult>> { + let api = self.client.runtime_api(); + let at = self.client.info().best_hash; + let runtime_api_result = api.get_all_granted_delegations_by_msa_id(at, delegator_msa_id); + map_rpc_result(runtime_api_result) + } + + fn get_keys_by_msa_id( + &self, + msa_id: MessageSourceId, + ) -> RpcResult>> { + let msa_key = get_msa_account_storage_key_name(msa_id); + let reader = self.offchain.try_read().ok_or(MsaOffchainRpcError::ErrorAcquiringLock)?; + let raw: Option = reader + .as_ref() + .ok_or(MsaOffchainRpcError::OffchainIndexingNotEnabled)? + .get(sp_offchain::STORAGE_PREFIX, &msa_key) + .map(Into::into); + if let Some(rr) = raw { + let inside = rr.0; + let keys = Vec::::decode(&mut &inside[..]) + .map_err(|_| MsaOffchainRpcError::ErrorDecodingData)?; + return Ok(Some(KeyInfoResponse { msa_id, msa_keys: keys })) + } + Ok(None) + } +} diff --git a/pallets/msa/src/rpc/src/tests/mod.rs b/pallets/msa/src/rpc/src/tests/mod.rs new file mode 100644 index 0000000000..258627281a --- /dev/null +++ b/pallets/msa/src/rpc/src/tests/mod.rs @@ -0,0 +1,275 @@ +mod rpc_mock; + +use super::*; +use rpc_mock::*; + +use common_primitives::node::{AccountId, Block, BlockNumber}; +use pallet_msa_runtime_api::MsaRuntimeApi; +use parity_scale_codec::Encode; +use sp_core::offchain::{testing::TestPersistentOffchainDB, OffchainStorage}; + +use sp_runtime::traits::Zero; +use std::{sync::Arc, vec}; + +const PROVIDER_WITH_DELEGATE_A: ProviderId = ProviderId(1); +const DELEGATE_A: DelegatorId = DelegatorId(2); +const DELEGATE_B: DelegatorId = DelegatorId(3); +const PROVIDER_WITH_DELEGATE_A_AND_B: ProviderId = ProviderId(4); +const SCHEMA_FOR_A: u16 = 1; +const SCHEMA_FOR_A_AND_B: u16 = 2; +const SCHEMA_FOR_B: u16 = 3; +const NOT_EXIST_MSA: u64 = 100; + +sp_api::mock_impl_runtime_apis! { + impl MsaRuntimeApi for TestRuntimeApi { + fn has_delegation(delegator: DelegatorId, provider: ProviderId, block_number: BlockNumber, schema_id: Option) -> bool { + if block_number > 1000 { + return false + } + match (delegator, provider, schema_id) { + (DELEGATE_A, PROVIDER_WITH_DELEGATE_A, Some(SCHEMA_FOR_A)) => true, + (DELEGATE_A, PROVIDER_WITH_DELEGATE_A_AND_B, Some(SCHEMA_FOR_A_AND_B)) => true, + (DELEGATE_B, PROVIDER_WITH_DELEGATE_A_AND_B, Some(SCHEMA_FOR_A_AND_B)) => true, + (DELEGATE_B, PROVIDER_WITH_DELEGATE_A_AND_B, Some(SCHEMA_FOR_B)) => true, + _ => false, + } + } + + /// Get the list of schema ids (if any) that exist in any delegation between the delegator and provider + fn get_granted_schemas_by_msa_id(delegator: DelegatorId, provider: ProviderId) -> Option>>{ + match (delegator, provider) { + (DELEGATE_A, PROVIDER_WITH_DELEGATE_A) => Some(vec![SchemaGrant::new(SCHEMA_FOR_A, BlockNumber::zero())]), + (DELEGATE_A, PROVIDER_WITH_DELEGATE_A_AND_B) => Some(vec![SchemaGrant::new(SCHEMA_FOR_A_AND_B, BlockNumber::zero())]), + (DELEGATE_B, PROVIDER_WITH_DELEGATE_A_AND_B) => Some(vec![SchemaGrant::new(SCHEMA_FOR_A_AND_B, BlockNumber::zero()), SchemaGrant::new(SCHEMA_FOR_B, BlockNumber::zero())]), + _ => None, + } + } + + /// Get the list of all delegations and grants + fn get_all_granted_delegations_by_msa_id(delegator: DelegatorId) -> Vec> { + #[allow(clippy::match_like_matches_macro)] + match delegator { + DELEGATE_A => vec![DelegationResponse{ provider_id: ProviderId(1), permissions: vec![SchemaGrant::new(SCHEMA_FOR_A, BlockNumber::zero())]}], + DELEGATE_B => vec![ + DelegationResponse{ provider_id: ProviderId(2), permissions: vec![SchemaGrant::new(SCHEMA_FOR_A_AND_B, BlockNumber::zero()), SchemaGrant::new(SCHEMA_FOR_B, BlockNumber::zero())]}, + DelegationResponse{ provider_id: ProviderId(3), permissions: vec![SchemaGrant::new(SCHEMA_FOR_A_AND_B, BlockNumber::zero())]} + ], + _ => vec![], + } + } + } +} + +#[tokio::test] +async fn check_delegations_can_success_with_multiple() { + let client = Arc::new(TestApi {}); + let api = MsaHandler::::new(client, None); + + let result = api.check_delegations( + vec![DELEGATE_A, DELEGATE_B], + PROVIDER_WITH_DELEGATE_A_AND_B, + 100, + Some(SCHEMA_FOR_A_AND_B), + ); + + assert!(result.is_ok()); + let arr = result.unwrap(); + assert_eq!(vec![(DELEGATE_A, true), (DELEGATE_B, true)], arr); +} + +#[tokio::test] +async fn check_delegations_with_good_and_bad_responses() { + let client = Arc::new(TestApi {}); + let api = MsaHandler::::new(client, None); + + let result = api.check_delegations( + vec![DELEGATE_A, DELEGATE_B], + PROVIDER_WITH_DELEGATE_A, + 100, + Some(SCHEMA_FOR_A), + ); + + assert!(result.is_ok()); + let arr = result.unwrap(); + assert_eq!(vec![(DELEGATE_A, true), (DELEGATE_B, false)], arr); +} + +#[tokio::test] +async fn check_delegations_with_bad_delegate_msa() { + let client = Arc::new(TestApi {}); + let api = MsaHandler::::new(client, None); + + let result = api.check_delegations( + vec![DelegatorId(NOT_EXIST_MSA)], + PROVIDER_WITH_DELEGATE_A, + 100, + Some(SCHEMA_FOR_A_AND_B), + ); + + assert!(result.is_ok()); + let arr = result.unwrap(); + assert_eq!(vec![(DelegatorId(NOT_EXIST_MSA), false)], arr); +} + +#[tokio::test] +async fn check_delegations_with_bad_provider() { + let client = Arc::new(TestApi {}); + let api = MsaHandler::::new(client, None); + + let result = api.check_delegations( + vec![DELEGATE_A, DELEGATE_B], + ProviderId(NOT_EXIST_MSA), + 100, + Some(SCHEMA_FOR_A_AND_B), + ); + + assert!(result.is_ok()); + let arr = result.unwrap(); + assert_eq!(vec![(DELEGATE_A, false), (DELEGATE_B, false)], arr); +} + +#[tokio::test] +async fn check_delegations_returns_fail_if_after_block() { + let client = Arc::new(TestApi {}); + let api = MsaHandler::::new(client, None); + + let result = api.check_delegations( + vec![DELEGATE_A, DELEGATE_B], + PROVIDER_WITH_DELEGATE_A_AND_B, + 1001, + Some(SCHEMA_FOR_A_AND_B), + ); + + assert!(result.is_ok()); + let arr = result.unwrap(); + assert_eq!(vec![(DELEGATE_A, false), (DELEGATE_B, false)], arr); +} + +#[tokio::test] +async fn get_granted_schemas_by_msa_id_with_success() { + let client = Arc::new(TestApi {}); + let api = MsaHandler::::new(client, None); + + let result = api.get_granted_schemas_by_msa_id(DELEGATE_A, PROVIDER_WITH_DELEGATE_A); + + assert!(result.is_ok()); + let response = result.unwrap().unwrap(); + assert_eq!(vec![SchemaGrant::new(SCHEMA_FOR_A, BlockNumber::zero())], response); +} + +#[tokio::test] +async fn get_all_granted_delegations_by_msa_id_with_success() { + let client = Arc::new(TestApi {}); + let api = MsaHandler::::new(client, None); + + let result = api.get_all_granted_delegations_by_msa_id(DELEGATE_B); + + assert!(result.is_ok()); + let response = result.unwrap(); + assert_eq!( + vec![ + DelegationResponse { + provider_id: ProviderId(2), + permissions: vec![ + SchemaGrant::new(SCHEMA_FOR_A_AND_B, BlockNumber::zero()), + SchemaGrant::new(SCHEMA_FOR_B, BlockNumber::zero()) + ] + }, + DelegationResponse { + provider_id: ProviderId(3), + permissions: vec![SchemaGrant::new(SCHEMA_FOR_A_AND_B, BlockNumber::zero())] + } + ], + response + ); +} + +#[tokio::test] +async fn get_granted_schemas_by_msa_id_with_none() { + let client = Arc::new(TestApi {}); + let api = MsaHandler::::new(client, None); + + let result = api.get_granted_schemas_by_msa_id(DELEGATE_B, PROVIDER_WITH_DELEGATE_A_AND_B); + + assert!(result.is_ok()); + let response = result.unwrap().unwrap(); + assert_eq!( + vec![ + SchemaGrant::new(SCHEMA_FOR_A_AND_B, BlockNumber::zero()), + SchemaGrant::new(SCHEMA_FOR_B, BlockNumber::zero()) + ], + response + ); +} + +#[tokio::test] +async fn get_granted_schemas_by_msa_id_with_no_delegation() { + let client = Arc::new(TestApi {}); + let api = MsaHandler::::new(client, None); + + let result = api.get_granted_schemas_by_msa_id(DELEGATE_B, PROVIDER_WITH_DELEGATE_A); + + assert!(result.is_ok()); + let response = result.unwrap(); + assert!(response.is_none()); +} + +#[tokio::test] +async fn get_granted_schemas_by_msa_id_with_bad_provider_id() { + let client = Arc::new(TestApi {}); + let api = MsaHandler::::new(client, None); + + let result = api.get_granted_schemas_by_msa_id(DELEGATE_A, ProviderId(NOT_EXIST_MSA)); + + assert!(result.is_ok()); + let response = result.unwrap(); + assert!(response.is_none()); +} + +#[tokio::test] +async fn get_keys_by_msa_id_with_disabled_offchain_should_fail() { + let client = Arc::new(TestApi {}); + let api = MsaHandler::::new(client, None); + + let result = api.get_keys_by_msa_id(NOT_EXIST_MSA); + + assert!(result.clone().is_err()); + assert_eq!("OffchainIndexingNotEnabled", result.unwrap_err().message()); +} + +#[tokio::test] +async fn get_keys_by_msa_id_with_empty_value_should_work() { + let client = Arc::new(TestApi {}); + let api = MsaHandler::::new( + client, + Some(TestPersistentOffchainDB::new()), + ); + + let result = api.get_keys_by_msa_id(NOT_EXIST_MSA); + + assert!(result.is_ok()); + let response = result.unwrap(); + assert_eq!(None, response); +} + +#[tokio::test] +async fn get_keys_by_msa_id_with_value_should_work() { + let msa_id: MessageSourceId = 10; + let accounts = + vec![AccountId::from([1u8; 32]), AccountId::from([2u8; 32]), AccountId::from([5u8; 32])]; + let client = Arc::new(TestApi {}); + let mut db = TestPersistentOffchainDB::new(); + db.set( + sp_offchain::STORAGE_PREFIX, + &get_msa_account_storage_key_name(msa_id), + &accounts.encode(), + ); + let api = MsaHandler::::new(client, Some(db)); + + let result = api.get_keys_by_msa_id(msa_id); + + assert!(result.is_ok()); + let response = result.unwrap(); + assert!(response.is_some()); + assert_eq!(KeyInfoResponse { msa_id, msa_keys: accounts }, response.unwrap()); +} diff --git a/pallets/msa/src/rpc/src/tests/rpc_mock.rs b/pallets/msa/src/rpc/src/tests/rpc_mock.rs new file mode 100644 index 0000000000..54c23bdd22 --- /dev/null +++ b/pallets/msa/src/rpc/src/tests/rpc_mock.rs @@ -0,0 +1,61 @@ +use common_primitives::node::Block; +use sp_api::{ApiRef, ProvideRuntimeApi}; + +use sp_blockchain::HeaderBackend; +use sp_runtime::traits::{Block as BlockT, NumberFor, Zero}; + +pub struct TestApi {} + +pub struct TestRuntimeApi {} + +impl ProvideRuntimeApi for TestApi { + type Api = TestRuntimeApi; + + fn runtime_api(&self) -> ApiRef<'_, Self::Api> { + TestRuntimeApi {}.into() + } +} + +/// Blockchain database header backend. Does not perform any validation. +impl HeaderBackend for TestApi { + fn header( + &self, + _id: Block::Hash, + ) -> std::result::Result, sp_blockchain::Error> { + Ok(None) + } + + fn info(&self) -> sc_client_api::blockchain::Info { + sc_client_api::blockchain::Info { + best_hash: Default::default(), + best_number: Zero::zero(), + finalized_hash: Default::default(), + finalized_number: Zero::zero(), + genesis_hash: Default::default(), + number_leaves: Default::default(), + finalized_state: None, + block_gap: None, + } + } + + fn status( + &self, + _id: Block::Hash, + ) -> std::result::Result { + Ok(sc_client_api::blockchain::BlockStatus::Unknown) + } + + fn number( + &self, + _hash: Block::Hash, + ) -> std::result::Result>, sp_blockchain::Error> { + Ok(None) + } + + fn hash( + &self, + _number: NumberFor, + ) -> std::result::Result, sp_blockchain::Error> { + Ok(None) + } +} diff --git a/pallets/msa/src/runtime-api/Cargo.toml b/pallets/msa/src/runtime-api/Cargo.toml new file mode 100644 index 0000000000..d701097f7d --- /dev/null +++ b/pallets/msa/src/runtime-api/Cargo.toml @@ -0,0 +1,31 @@ +[package] +name = "pallet-msa-runtime-api" +version = "0.0.0" +description = "A package that adds Runtime Api for Msa pallet" +authors = ["Frequency"] +license = "Apache-2.0" +publish = false +homepage = "https://frequency.xyz" +repository = "https://github.com/frequency-chain/frequency/" +edition = "2021" + +[dependencies] +parity-scale-codec = { workspace = true, features = ["derive"] } +# Substrate +sp-api = { workspace = true } +frame-support = { workspace = true } +# Frequency related dependencies +common-primitives = { default-features = false, path = "../../../../common/primitives" } + +[features] +default = ["std"] +std = [ + "parity-scale-codec/std", + "sp-api/std", + "frame-support/std", + 'common-primitives/std', +] +test = [] + +[lints] +workspace = true diff --git a/pallets/msa/src/runtime-api/src/lib.rs b/pallets/msa/src/runtime-api/src/lib.rs new file mode 100644 index 0000000000..f7228e04cd --- /dev/null +++ b/pallets/msa/src/runtime-api/src/lib.rs @@ -0,0 +1,56 @@ +#![cfg_attr(not(feature = "std"), no_std)] +#![allow(clippy::too_many_arguments)] +#![allow(clippy::unnecessary_mut_passed)] +#![allow(rustdoc::bare_urls)] +// Strong Documentation Lints +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + missing_docs +)] + +//! Runtime API definition for [MSA](../pallet_msa/index.html) +//! +//! This api must be implemented by the node runtime. +//! Runtime APIs Provide: +//! - An interface between the runtime and Custom RPCs. +//! - Runtime interfaces for end users beyond just State Queries + +use common_primitives::{msa::*, node::BlockNumber}; +use parity_scale_codec::Codec; +extern crate alloc; +use alloc::vec::Vec; + +// Here we declare the runtime API. It is implemented it the `impl` block in +// runtime files (the `runtime` folder) +sp_api::decl_runtime_apis! { + + /// Runtime Version for MSAs + /// - MUST be incremented if anything changes + /// - See: https://paritytech.github.io/polkadot/doc/polkadot_primitives/runtime_api/index.html + #[api_version(3)] + + /// Runtime API definition for [MSA](../pallet_msa/index.html) + pub trait MsaRuntimeApi where + AccountId: Codec, + { + /// Check to see if a delegation existed between the given delegator and provider at a given block + fn has_delegation(delegator: DelegatorId, provider: ProviderId, block_number: BlockNumber, schema_id: Option) -> bool; + + /// Get the list of schema permission grants (if any) that exist in any delegation between the delegator and provider + /// The returned list contains both schema id and the block number at which permission was revoked (0 if currently not revoked) + fn get_granted_schemas_by_msa_id(delegator: DelegatorId, provider: ProviderId) -> Option>>; + + /// Get the list of all delegated providers with schema permission grants (if any) that exist in any delegation between the delegator and provider + /// The returned list contains both schema id and the block number at which permission was revoked (0 if currently not revoked) + fn get_all_granted_delegations_by_msa_id(delegator: DelegatorId) -> Vec>; + + /// Get the Ethereum address of the given MSA. + /// The address is returned as both a 20-byte binary address and a hex-encoded checksummed string (ERC-55). + fn get_ethereum_address_for_msa_id(msa_id: MessageSourceId) -> AccountId20Response; + + /// Validate if the given Ethereum address is associated with the given MSA + fn validate_eth_address_for_msa(eth_address: &H160, msa_id: MessageSourceId) -> bool; + } +} diff --git a/pallets/msa/src/tests/creation_tests.rs b/pallets/msa/src/tests/creation_tests.rs new file mode 100644 index 0000000000..1b87ac9a29 --- /dev/null +++ b/pallets/msa/src/tests/creation_tests.rs @@ -0,0 +1,322 @@ +use sp_core::{crypto::AccountId32, sr25519, Encode, Pair}; +use sp_runtime::MultiSignature; + +use frame_support::{assert_noop, assert_ok, dispatch::GetDispatchInfo}; + +use sp_weights::Weight; + +use crate::{ + ensure, tests::mock::*, types::AddProvider, CurrentMsaIdentifierMaximum, + DelegatorAndProviderToDelegation, DispatchResult, Error, Event, PublicKeyToMsaId, +}; + +use common_primitives::{ + msa::{DelegatorId, MessageSourceId, ProviderId}, + node::BlockNumber, + utils::wrap_binary_data, +}; + +#[test] +pub fn create_sponsored_account_with_delegation_with_valid_input_should_succeed() { + new_test_ext().execute_with(|| { + // arrange + let (provider_msa, provider_key_pair) = create_account(); + let provider_account = provider_key_pair.public(); + // Register provider + assert_ok!(Msa::create_provider( + RuntimeOrigin::signed(provider_account.into()), + Vec::from("Foo") + )); + + let (key_pair_delegator, _) = sr25519::Pair::generate(); + let delegator_account = key_pair_delegator.public(); + + let expiration: BlockNumber = 10; + + let add_provider_payload = AddProvider::new(provider_msa, None, expiration); + let encode_add_provider_data = wrap_binary_data(add_provider_payload.encode()); + + let signature: MultiSignature = key_pair_delegator.sign(&encode_add_provider_data).into(); + + // act + assert_ok!(Msa::create_sponsored_account_with_delegation( + RuntimeOrigin::signed(provider_account.into()), + delegator_account.into(), + signature, + add_provider_payload + )); + + // assert + let delegator_msa = + PublicKeyToMsaId::::get(AccountId32::new(delegator_account.0)).unwrap(); + + let provider_info = + DelegatorAndProviderToDelegation::::get(DelegatorId(2), ProviderId(1)); + assert!(provider_info.is_some()); + + let events_occured = System::events(); + let created_event = &events_occured.as_slice()[1]; + let provider_event = &events_occured.as_slice()[2]; + assert_eq!( + created_event.event, + Event::MsaCreated { msa_id: delegator_msa, key: delegator_account.into() }.into() + ); + assert_eq!( + provider_event.event, + Event::DelegationGranted { + provider_id: provider_msa.into(), + delegator_id: delegator_msa.into() + } + .into() + ); + }); +} + +#[test] +fn create_sponsored_account_with_delegation_with_invalid_signature_should_fail() { + new_test_ext().execute_with(|| { + let (key_pair, _) = sr25519::Pair::generate(); + let provider_account = key_pair.public(); + + let (key_pair_delegator, _) = sr25519::Pair::generate(); + let delegator_account = key_pair_delegator.public(); + + let (signer_pair, _) = sr25519::Pair::generate(); + + let expiration: BlockNumber = 10; + let add_provider_payload = AddProvider::new(1u64, None, expiration); + let encode_add_provider_data = wrap_binary_data(add_provider_payload.encode()); + + let signature: MultiSignature = signer_pair.sign(&encode_add_provider_data).into(); + + assert_ok!(Msa::create(RuntimeOrigin::signed(provider_account.into()))); + + // act + assert_noop!( + Msa::create_sponsored_account_with_delegation( + RuntimeOrigin::signed(provider_account.into()), + delegator_account.into(), + signature, + add_provider_payload + ), + Error::::InvalidSignature + ); + }); +} + +#[test] +pub fn create_sponsored_account_with_delegation_with_invalid_add_provider_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let (key_pair, _) = sr25519::Pair::generate(); + let provider_account = key_pair.public(); + + let (key_pair_delegator, _) = sr25519::Pair::generate(); + let delegator_account = key_pair_delegator.public(); + + let expiration: BlockNumber = 10; + let add_provider_payload = AddProvider::new(1u64, None, expiration); + let encode_add_provider_data = wrap_binary_data(add_provider_payload.encode()); + + let signature: MultiSignature = key_pair_delegator.sign(&encode_add_provider_data).into(); + + assert_ok!(Msa::create(RuntimeOrigin::signed(provider_account.into()))); + assert_ok!(Msa::create(RuntimeOrigin::signed(delegator_account.into()))); + + // Register provider + assert_ok!(Msa::create_provider( + RuntimeOrigin::signed(provider_account.into()), + Vec::from("Foo") + )); + + // act + assert_noop!( + Msa::create_sponsored_account_with_delegation( + RuntimeOrigin::signed(provider_account.into()), + delegator_account.into(), + signature, + add_provider_payload + ), + Error::::KeyAlreadyRegistered + ); + }); +} + +#[test] +pub fn create_sponsored_account_with_delegation_with_different_authorized_msa_id_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let (key_pair, _) = sr25519::Pair::generate(); + let provider_account = key_pair.public(); + + let (key_pair_delegator, _) = sr25519::Pair::generate(); + let delegator_account = key_pair_delegator.public(); + + let expiration: BlockNumber = 10; + let add_provider_payload = AddProvider::new(3u64, None, expiration); + let encode_add_provider_data = wrap_binary_data(add_provider_payload.encode()); + + let signature: MultiSignature = key_pair_delegator.sign(&encode_add_provider_data).into(); + + assert_ok!(Msa::create(RuntimeOrigin::signed(provider_account.into()))); + + // act + assert_noop!( + Msa::create_sponsored_account_with_delegation( + RuntimeOrigin::signed(provider_account.into()), + delegator_account.into(), + signature, + add_provider_payload + ), + Error::::UnauthorizedProvider + ); + }); +} + +#[test] +pub fn create_sponsored_account_with_delegation_expired() { + new_test_ext().execute_with(|| { + // arrange + let (key_pair, _) = sr25519::Pair::generate(); + let provider_account = key_pair.public(); + + let (key_pair_delegator, _) = sr25519::Pair::generate(); + let delegator_account = key_pair_delegator.public(); + + let expiration: BlockNumber = 0; + + let add_provider_payload = AddProvider::new(1u64, None, expiration); + let encode_add_provider_data = wrap_binary_data(add_provider_payload.encode()); + + let signature: MultiSignature = key_pair_delegator.sign(&encode_add_provider_data).into(); + + assert_ok!(Msa::create(RuntimeOrigin::signed(provider_account.into()))); + + // Register provider + assert_ok!(Msa::create_provider( + RuntimeOrigin::signed(provider_account.into()), + Vec::from("Foo") + )); + + // act + assert_noop!( + Msa::create_sponsored_account_with_delegation( + RuntimeOrigin::signed(provider_account.into()), + delegator_account.into(), + signature, + add_provider_payload + ), + Error::::ProofHasExpired + ); + }); +} + +#[test] +pub fn create_account_with_panic_in_on_success_should_revert_everything() { + new_test_ext().execute_with(|| { + // arrange + let msa_id = 1u64; + let key = test_public(msa_id as u8); + let next_msa_id = Msa::get_next_msa_id().unwrap(); + + // act + assert_noop!( + Msa::create_account(key, |new_msa_id| -> DispatchResult { + ensure!(new_msa_id != msa_id, Error::::InvalidSelfRemoval); + Ok(()) + }), + Error::::InvalidSelfRemoval + ); + + // assert + assert_eq!(next_msa_id, Msa::get_next_msa_id().unwrap()); + }); +} + +#[test] +fn it_create_has_weight() { + new_test_ext().execute_with(|| { + let call = MsaCall::::create {}; + let dispatch_info = call.get_dispatch_info(); + + assert!( + dispatch_info.call_weight.ref_time() > Weight::from_parts(10_000_u64, 0).ref_time() + ); + }); +} + +#[test] +fn it_creates_an_msa_account() { + new_test_ext().execute_with(|| { + assert_ok!(Msa::create(test_origin_signed(1))); + + assert_eq!(PublicKeyToMsaId::::get(test_public(1)), Some(1 as MessageSourceId)); + + assert_eq!(CurrentMsaIdentifierMaximum::::get(), 1); + + System::assert_last_event(Event::MsaCreated { msa_id: 1, key: test_public(1) }.into()); + }); +} + +#[test] +fn it_throws_msa_identifier_overflow() { + new_test_ext().execute_with(|| { + CurrentMsaIdentifierMaximum::::set(u64::MAX); + + assert_noop!(Msa::create(test_origin_signed(1)), Error::::MsaIdOverflow); + }); +} + +#[test] +#[allow(unused_must_use)] +fn it_does_not_allow_duplicate_keys() { + new_test_ext().execute_with(|| { + Msa::create(test_origin_signed(1)); + + assert_noop!(Msa::create(test_origin_signed(1)), Error::::KeyAlreadyRegistered); + + assert_eq!(CurrentMsaIdentifierMaximum::::get(), 1); + }); +} + +#[test] +fn verify_signature_with_wrapped_bytes() { + new_test_ext().execute_with(|| { + let provider_msa = 1; + let (key_pair_delegator, _) = sr25519::Pair::generate(); + + let expiration: BlockNumber = 10; + + let add_provider_payload = AddProvider::new(provider_msa, None, expiration); + let encode_add_provider_data = wrap_binary_data(add_provider_payload.encode()); + + let signature: MultiSignature = key_pair_delegator.sign(&encode_add_provider_data).into(); + + assert!(Msa::verify_signature( + &signature, + &key_pair_delegator.public().into(), + &add_provider_payload + )); + }); +} + +#[test] +fn verify_signature_without_wrapped_bytes() { + new_test_ext().execute_with(|| { + let provider_msa = 1; + let (key_pair_delegator, _) = sr25519::Pair::generate(); + + let expiration: BlockNumber = 10; + + let add_provider_payload = AddProvider::new(provider_msa, None, expiration); + + let signature: MultiSignature = + key_pair_delegator.sign(&add_provider_payload.encode()).into(); + + assert!(Msa::verify_signature( + &signature, + &key_pair_delegator.public().into(), + &add_provider_payload + )); + }); +} diff --git a/pallets/msa/src/tests/delegation_tests.rs b/pallets/msa/src/tests/delegation_tests.rs new file mode 100644 index 0000000000..2f1581db30 --- /dev/null +++ b/pallets/msa/src/tests/delegation_tests.rs @@ -0,0 +1,574 @@ +use frame_support::{ + assert_noop, assert_ok, + dispatch::{GetDispatchInfo, Pays}, + BoundedBTreeMap, +}; + +use sp_runtime::MultiSignature; + +use crate::{ + tests::{mock::*, other_tests::set_schema_count}, + types::AddProvider, + DelegatorAndProviderToDelegation, Error, Event, +}; +use common_primitives::{ + msa::{Delegation, DelegationValidator, DelegatorId, ProviderId}, + node::BlockNumber, + schema::SchemaId, + utils::wrap_binary_data, +}; +use sp_core::{crypto::AccountId32, sr25519, Encode, Pair}; + +fn create_two_keypairs() -> (sr25519::Pair, sr25519::Pair) { + // fn create_two_keypairs() -> (Public, Public) { + let (pair1, _) = sr25519::Pair::generate(); + let (pair2, _) = sr25519::Pair::generate(); + (pair1, pair2) +} + +#[test] +pub fn grant_delegation_changes_schema_permissions() { + new_test_ext().execute_with(|| { + let (key_pair, _) = sr25519::Pair::generate(); + let provider_account = key_pair.public(); + + let (delegator_pair, _) = sr25519::Pair::generate(); + let delegator_account = delegator_pair.public(); + + // Create provider account and get its MSA ID (u64) + assert_ok!(Msa::create(RuntimeOrigin::signed(provider_account.into()))); + let provider_msa = + Msa::ensure_valid_msa_key(&AccountId32::new(provider_account.0)).unwrap(); + + // Create delegator account and get its MSA ID (u64) + assert_ok!(Msa::create(RuntimeOrigin::signed(delegator_account.into()))); + let delegator_msa = + Msa::ensure_valid_msa_key(&AccountId32::new(delegator_account.0)).unwrap(); + + // Register provider + assert_ok!(Msa::create_provider( + RuntimeOrigin::signed(provider_account.into()), + Vec::from("Foo") + )); + + let block_expiration: BlockNumber = 110; + + System::set_block_number(90); + set_schema_count::(10); + + // Create delegation without any schema permissions + let (delegator_signature, add_provider_payload) = + create_and_sign_add_provider_payload_with_schemas( + delegator_pair.clone(), + provider_msa, + None, + block_expiration, + ); + + assert_ok!(Msa::grant_delegation( + RuntimeOrigin::signed(provider_account.into()), + delegator_account.into(), + delegator_signature, + add_provider_payload + )); + + let provider = ProviderId(provider_msa); + let delegator = DelegatorId(delegator_msa); + + assert_eq!( + DelegatorAndProviderToDelegation::::get(delegator, provider), + Some(Delegation { revoked_at: 0, schema_permissions: Default::default() }) + ); + + System::assert_last_event( + Event::DelegationGranted { + delegator_id: delegator_msa.into(), + provider_id: provider_msa.into(), + } + .into(), + ); + + // Grant delegation w/schemas 1, 2, and 3 (implies block 0) + let (delegator_signature, add_provider_payload) = + create_and_sign_add_provider_payload_with_schemas( + delegator_pair.clone(), + provider_msa, + Some(vec![1, 2, 3]), + block_expiration, + ); + + assert_ok!(Msa::grant_delegation( + RuntimeOrigin::signed(provider_account.into()), + delegator_account.into(), + delegator_signature, + add_provider_payload + )); + + let mut sp = BoundedBTreeMap::::new(); + assert_ok!(sp.try_insert(1u16, 0u32)); + assert_ok!(sp.try_insert(2u16, 0u32)); + assert_ok!(sp.try_insert(3u16, 0u32)); + + let expected = Delegation { revoked_at: 0u32, schema_permissions: sp }; + + assert_eq!( + DelegatorAndProviderToDelegation::::get(delegator, provider), + Some(expected) + ); + + let revoked_block_number: u32 = 100; + System::set_block_number(revoked_block_number); + // Revoke all schema ids. + let (delegator_signature, add_provider_payload) = + create_and_sign_add_provider_payload_with_schemas( + delegator_pair.clone(), + provider_msa, + None, + block_expiration, + ); + + assert_ok!(Msa::grant_delegation( + RuntimeOrigin::signed(provider_account.into()), + delegator_account.into(), + delegator_signature, + add_provider_payload + )); + + let mut sp = BoundedBTreeMap::::new(); + assert_ok!(sp.try_insert(1u16, revoked_block_number)); // schema id 1 revoked at revoked_block_number + assert_ok!(sp.try_insert(2u16, revoked_block_number)); // schema id 2 revoked at revoked_block_number + assert_ok!(sp.try_insert(3u16, revoked_block_number)); // schema id 3 revoked at revoked_block_number + + let expected = Delegation { revoked_at: 0, schema_permissions: sp }; + + assert_eq!( + DelegatorAndProviderToDelegation::::get(delegator, provider), + Some(expected) + ); + + System::set_block_number(revoked_block_number + 1); + // Grant 2, 3, 4 + let (delegator_signature, add_provider_payload) = + create_and_sign_add_provider_payload_with_schemas( + delegator_pair.clone(), + provider_msa, + Some(vec![2, 3, 4]), + block_expiration, + ); + + assert_ok!(Msa::grant_delegation( + RuntimeOrigin::signed(provider_account.into()), + delegator_account.into(), + delegator_signature, + add_provider_payload + )); + + let mut sp = BoundedBTreeMap::::new(); + assert_ok!(sp.try_insert(1u16, 100u32)); // schema id 1 revoked at block 100 + assert_ok!(sp.try_insert(2u16, 0u32)); // schema id 2 granted (block 0) + assert_ok!(sp.try_insert(3u16, 0u32)); // schema id 3 granted (block 0) + assert_ok!(sp.try_insert(4u16, 0u32)); // schema id 4 granted (block 0) + + let expected = Delegation { revoked_at: 0, schema_permissions: sp }; + assert_eq!( + DelegatorAndProviderToDelegation::::get(delegator, provider), + Some(expected) + ); + }); +} + +#[test] +pub fn grant_delegation_to_msa_throws_add_provider_verification_failed() { + new_test_ext().execute_with(|| { + let (key_pair, _) = sr25519::Pair::generate(); + let account = key_pair.public(); + let expiration: BlockNumber = 10; + let add_provider_payload = AddProvider::new(2, None, expiration); + let encode_add_provider_data = wrap_binary_data(add_provider_payload.encode()); + + let signature: MultiSignature = key_pair.sign(&encode_add_provider_data).into(); + let fake_provider_payload = AddProvider::new(3, None, expiration); + assert_noop!( + Msa::grant_delegation( + RuntimeOrigin::signed(account.into()), + account.into(), + signature, + fake_provider_payload + ), + Error::::AddProviderSignatureVerificationFailed + ); + }); +} + +#[test] +pub fn grant_delegation_throws_no_key_exist_error() { + new_test_ext().execute_with(|| { + let (key_pair, _) = sr25519::Pair::generate(); + let provider_account = key_pair.public(); + + let expiration: BlockNumber = 10; + let add_provider_payload = AddProvider::new(2, None, expiration); + let encode_add_provider_data = wrap_binary_data(add_provider_payload.encode()); + + let signature: MultiSignature = key_pair.sign(&encode_add_provider_data).into(); + + assert_noop!( + Msa::grant_delegation( + test_origin_signed(1), + provider_account.into(), + signature, + add_provider_payload + ), + Error::::NoKeyExists + ); + }); +} + +#[test] +pub fn grant_delegation_throws_key_revoked_error() { + new_test_ext().execute_with(|| { + let (key_pair, _) = sr25519::Pair::generate(); + let provider_account = key_pair.public(); + + let expiration: BlockNumber = 10; + let add_provider_payload = AddProvider::new(2, None, expiration); + let encode_add_provider_data = wrap_binary_data(add_provider_payload.encode()); + + let signature: MultiSignature = key_pair.sign(&encode_add_provider_data).into(); + + assert_ok!(Msa::create(test_origin_signed(1))); + assert_ok!(Msa::create(RuntimeOrigin::signed(provider_account.into()))); + assert_ok!(Msa::delete_key_for_msa(1, &test_public(1))); + + assert_noop!( + Msa::grant_delegation( + test_origin_signed(1), + provider_account.into(), + signature, + add_provider_payload + ), + Error::::NoKeyExists + ); + }); +} + +#[test] +pub fn grant_delegation_throws_invalid_self_provider_error() { + new_test_ext().execute_with(|| { + let (key_pair, _) = sr25519::Pair::generate(); + let provider_account = key_pair.public(); + + let expiration: BlockNumber = 10; + let add_provider_payload = AddProvider::new(1, None, expiration); + let encode_add_provider_data = wrap_binary_data(add_provider_payload.encode()); + let signature: MultiSignature = key_pair.sign(&encode_add_provider_data).into(); + + assert_ok!(Msa::create(RuntimeOrigin::signed(provider_account.into()))); + + assert_noop!( + Msa::grant_delegation( + RuntimeOrigin::signed(provider_account.into()), + provider_account.into(), + signature, + add_provider_payload + ), + Error::::InvalidSelfProvider + ); + }); +} + +#[test] +pub fn grant_delegation_throws_unauthorized_delegator_error() { + new_test_ext().execute_with(|| { + // Generate a key pair for the provider + let (provider_key_pair, _) = sr25519::Pair::generate(); + let provider_account = provider_key_pair.public(); + + // Generate a key pair for the delegator + let (delegator_key_pair, _) = sr25519::Pair::generate(); + let delegator_account = delegator_key_pair.public(); + assert_ok!(Msa::create(RuntimeOrigin::signed(delegator_account.into()))); + let delegator_msa_id = + Msa::ensure_valid_msa_key(&AccountId32::new(delegator_account.0)).unwrap(); + + let expiration: BlockNumber = 10; + let add_provider_payload = AddProvider::new(delegator_msa_id, None, expiration); + let encode_add_provider_data = wrap_binary_data(add_provider_payload.encode()); + let signature: MultiSignature = delegator_key_pair.sign(&encode_add_provider_data).into(); + + assert_ok!(Msa::create(RuntimeOrigin::signed(provider_account.into()))); + + // Register provider + assert_ok!(Msa::create_provider( + RuntimeOrigin::signed(provider_account.into()), + Vec::from("Foo") + )); + + assert_noop!( + Msa::grant_delegation( + RuntimeOrigin::signed(provider_account.into()), + delegator_account.into(), + signature, + add_provider_payload + ), + Error::::UnauthorizedDelegator + ); + }); +} + +#[test] +pub fn revoke_delegation_by_provider_happy_path() { + new_test_ext().execute_with(|| { + let (delegator_pair, _) = sr25519::Pair::generate(); + let delegator_account = delegator_pair.public(); + + let (provider_msa_id, provider_pair) = create_account(); + let provider_account = provider_pair.public(); + + assert_ok!(Msa::create_provider( + RuntimeOrigin::signed(provider_account.into()), + Vec::from("provider") + )); + + // 3. create delegator MSA and provider to provider + let (signature, add_provider_payload) = + create_and_sign_add_provider_payload(delegator_pair, provider_msa_id); + + // 3.5 create the user's MSA + add provider as provider + assert_ok!(Msa::create_sponsored_account_with_delegation( + RuntimeOrigin::signed(AccountId32::from(provider_account)), + delegator_account.into(), + signature, + add_provider_payload + )); + let retrieved_delegator = Msa::get_owner_of(&AccountId32::from(delegator_account)).unwrap(); + + // 4. set some block number to ensure it's not a default value + System::set_block_number(System::block_number() + 25); + + // 5. assert_ok! fn as 2 to remove provider 1 + assert_ok!(Msa::revoke_delegation_by_provider( + RuntimeOrigin::signed(AccountId32::from(provider_account)), + retrieved_delegator + )); + + // 6. verify that the provider is revoked + let provider_info = + DelegatorAndProviderToDelegation::::get(DelegatorId(2), ProviderId(1)); + assert_eq!( + provider_info, + Some(Delegation { revoked_at: 26, schema_permissions: Default::default() }) + ); + + // 7. verify the event + System::assert_last_event( + Event::DelegationRevoked { provider_id: ProviderId(1), delegator_id: DelegatorId(2) } + .into(), + ); + }) +} + +#[test] +pub fn grant_new_after_revoke_restores_valid_delegation() { + new_test_ext().execute_with(|| { + let (delegator_pair, _) = sr25519::Pair::generate(); + let delegator_account = delegator_pair.public(); + + let (provider_msa_id, provider_pair) = create_account(); + let provider_account = provider_pair.public(); + + assert_ok!(Msa::create_provider( + RuntimeOrigin::signed(provider_account.into()), + Vec::from("provider") + )); + + // 3. create delegator MSA and provider to provider + let (signature, add_provider_payload) = + create_and_sign_add_provider_payload(delegator_pair.clone(), provider_msa_id); + + // 3.5 create the user's MSA + add provider as provider + assert_ok!(Msa::create_sponsored_account_with_delegation( + RuntimeOrigin::signed(AccountId32::from(provider_account)), + delegator_account.into(), + signature, + add_provider_payload + )); + let retrieved_delegator = Msa::get_owner_of(&AccountId32::from(delegator_account)).unwrap(); + + // 4. set some block number to ensure it's not a default value + System::set_block_number(System::block_number() + 1); + + // 5. assert_ok! fn as 2 to remove provider 1 + assert_ok!(Msa::revoke_delegation_by_provider( + RuntimeOrigin::signed(AccountId32::from(provider_account)), + retrieved_delegator + )); + + // 6. verify that the provider is revoked + let provider_info = + DelegatorAndProviderToDelegation::::get(DelegatorId(2), ProviderId(1)); + assert_eq!( + provider_info, + Some(Delegation { revoked_at: 2, schema_permissions: Default::default() }) + ); + + // 7. set some block number to ensure it's not a default value + System::set_block_number(System::block_number() + 1); + + // 8. create new delegation payload and signature + let (signature, add_provider_payload) = + create_and_sign_add_provider_payload(delegator_pair, provider_msa_id); + + // 9. Add a new delegation to the same provider for the same MSA + assert_ok!(Msa::grant_delegation( + RuntimeOrigin::signed(AccountId32::from(provider_account)), + delegator_account.into(), + signature, + add_provider_payload + )); + + // 10. Verify that delegation is now valid + let provider_info = + DelegatorAndProviderToDelegation::::get(DelegatorId(2), ProviderId(1)); + assert_eq!( + provider_info, + Some(Delegation { revoked_at: 0, schema_permissions: Default::default() }) + ) + }) +} + +#[test] +pub fn revoke_delegation_by_provider_has_correct_costs() { + new_test_ext().execute_with(|| { + let call = MsaCall::::revoke_delegation_by_provider { delegator: 2 }; + let dispatch_info = call.get_dispatch_info(); + + assert_eq!(dispatch_info.pays_fee, Pays::No); + }) +} + +#[test] +pub fn revoke_delegation_by_provider_does_nothing_when_no_msa() { + new_test_ext().execute_with(|| { + let (delegator_pair, provider_pair) = create_two_keypairs(); + let delegator_account = delegator_pair.public(); + let provider_account = provider_pair.public(); + + let none_retrieved_delegator = Msa::get_owner_of(&AccountId32::from(delegator_account)); + assert_eq!(none_retrieved_delegator, None); + + let not_an_msa_id = 777u64; + + assert_ok!(Msa::create(RuntimeOrigin::signed(AccountId32::from(provider_account)))); + + System::set_block_number(System::block_number() + 19); + + // 1. when delegator msa_id not found + assert_noop!( + Msa::revoke_delegation_by_provider( + RuntimeOrigin::signed(AccountId32::from(provider_account)), + not_an_msa_id + ), + Error::::DelegationNotFound + ); + + assert_ok!(Msa::create(RuntimeOrigin::signed(AccountId32::from(delegator_account)))); + let delegator_msa_id = Msa::get_owner_of(&AccountId32::from(delegator_account)).unwrap(); + // 2. when no delegation relationship + assert_noop!( + Msa::revoke_delegation_by_provider( + RuntimeOrigin::signed(AccountId32::from(provider_account)), + delegator_msa_id + ), + Error::::DelegationNotFound + ); + + assert_ok!(Msa::add_provider(ProviderId(1), DelegatorId(2), Vec::default())); + assert_ok!(Msa::revoke_provider(ProviderId(1), DelegatorId(2))); + + // 3. when_delegation_expired + assert_noop!( + Msa::revoke_delegation_by_provider( + RuntimeOrigin::signed(AccountId32::from(provider_account)), + delegator_msa_id + ), + Error::::DelegationRevoked + ); + }) +} + +#[test] +pub fn valid_delegation() { + new_test_ext().execute_with(|| { + let provider = ProviderId(1); + let delegator = DelegatorId(2); + + assert_ok!(Msa::add_provider(provider, delegator, Vec::default())); + + System::set_block_number(System::block_number() + 1); + + assert_ok!(Msa::ensure_valid_delegation(provider, delegator, None)); + }) +} + +#[test] +pub fn delegation_not_found() { + new_test_ext().execute_with(|| { + let provider = ProviderId(1); + let delegator = DelegatorId(2); + + assert_noop!( + Msa::ensure_valid_delegation(provider, delegator, None), + Error::::DelegationNotFound + ); + }) +} + +#[test] +pub fn delegation_expired() { + new_test_ext().execute_with(|| { + let provider = ProviderId(1); + let delegator = DelegatorId(2); + + assert_ok!(Msa::add_provider(provider, delegator, Vec::default())); + + System::set_block_number(System::block_number() + 1); + assert_ok!(Msa::ensure_valid_delegation(provider, delegator, None)); + + assert_ok!(Msa::revoke_provider(provider, delegator)); + + System::set_block_number(System::block_number() + 1); + + assert_noop!( + Msa::ensure_valid_delegation(provider, delegator, None), + Error::::DelegationRevoked + ); + }) +} + +#[test] +pub fn delegation_expired_long_back() { + new_test_ext().execute_with(|| { + let provider = ProviderId(1); + let delegator = DelegatorId(2); + + assert_ok!(Msa::add_provider(provider, delegator, Vec::default())); + + System::set_block_number(System::block_number() + 100); + assert_ok!(Msa::ensure_valid_delegation(provider, delegator, None)); + + assert_ok!(Msa::revoke_provider(provider, delegator)); + + System::set_block_number(System::block_number() + 150); + + assert_noop!( + Msa::ensure_valid_delegation(provider, delegator, Some(151)), + Error::::DelegationRevoked + ); + assert_ok!(Msa::ensure_valid_delegation(provider, delegator, Some(6))); + assert_noop!( + Msa::ensure_valid_delegation(provider, delegator, Some(1000)), + Error::::CannotPredictValidityPastCurrentBlock + ); + }) +} diff --git a/pallets/msa/src/tests/governance_tests.rs b/pallets/msa/src/tests/governance_tests.rs new file mode 100644 index 0000000000..c850c170cb --- /dev/null +++ b/pallets/msa/src/tests/governance_tests.rs @@ -0,0 +1,135 @@ +use frame_support::{assert_noop, assert_ok, traits::ChangeMembers}; + +use pallet_collective::ProposalOf; +use sp_weights::Weight; + +use pretty_assertions::assert_eq; +use sp_core::{Encode, Pair}; + +use crate::{tests::mock::*, Error}; + +#[test] +fn create_provider_via_governance_happy_path() { + new_test_ext().execute_with(|| { + let (_new_msa_id, key_pair) = create_account(); + + // Create the provider based on 1 yes vote by the council + assert_ok!(Msa::create_provider_via_governance( + RuntimeOrigin::from(pallet_collective::RawOrigin::Members(1, 1)), + key_pair.public().into(), + Vec::from("ACME Widgets") + )); + // Confirm that the MSA is now a provider + assert!(Msa::is_registered_provider(_new_msa_id)); + }) +} + +/// Test that a request to be a provider, makes the MSA a provider after the council approves it. +#[test] +fn propose_to_be_provider_happy_path() { + new_test_ext().execute_with(|| { + // Create a new MSA account and request that it become a provider + let (_new_msa_id, key_pair) = create_account(); + _ = Msa::propose_to_be_provider( + RuntimeOrigin::signed(key_pair.public().into()), + Vec::from("ACME Widgets"), + ); + + // Find the Proposed event and get it's hash and index so it can be voted on + let proposed_events: Vec<(u32, ::Hash)> = System::events() + .iter() + .filter_map(|event| match event.event { + RuntimeEvent::Council(pallet_collective::Event::Proposed { + account: _, + proposal_index, + proposal_hash, + threshold: _, + }) => Some((proposal_index, proposal_hash)), + _ => None, + }) + .collect(); + + assert_eq!(proposed_events.len(), 1); + + let proposal_index = proposed_events[0].0; + let proposal_hash = proposed_events[0].1; + let proposal = ProposalOf::::get(proposal_hash).unwrap(); + let proposal_len: u32 = proposal.encoded_size() as u32; + + // Set up the council members + let council_member = test_public(1); // Use ALICE as the council member + + let incoming = vec![]; + let outgoing = vec![]; + Council::change_members(&incoming, &outgoing, vec![council_member.clone()]); + + // Vote YES on the proposal + assert_ok!(Council::vote( + RuntimeOrigin::signed(council_member.clone()), + proposal_hash, + proposal_index, + true + )); + + // Find the Voted event and check if it passed + let voted_events: Vec<(bool, u32, u32)> = System::events() + .iter() + .filter_map(|event| match event.event { + RuntimeEvent::Council(pallet_collective::Event::Voted { + account: _, + proposal_hash: _, + voted, + yes, + no, + }) => Some((voted, yes, no)), + _ => None, + }) + .collect(); + + assert_eq!(voted_events.len(), 1); + assert_eq!(voted_events[0].0, true); // Was it voted on? + assert_eq!(voted_events[0].1, 1); // There should be one YES vote to pass + + // Close the voting + assert_ok!(Council::close( + RuntimeOrigin::signed(test_public(5)), + proposal_hash, + proposal_index, + Weight::MAX, + proposal_len + )); + + // Find the Closed event and check if it passed + let closed_events: Vec<(u32, u32)> = System::events() + .iter() + .filter_map(|event| match event.event { + RuntimeEvent::Council(pallet_collective::Event::Closed { + proposal_hash: _, + yes, + no, + }) => Some((yes, no)), + _ => None, + }) + .collect(); + + assert_eq!(closed_events.len(), 1); + assert_eq!(closed_events[0].0, 1); // There should be one YES vote to pass + + // Confirm that the MSA is now a provider + assert!(Msa::is_registered_provider(_new_msa_id)); + }) +} + +#[test] +fn propose_to_be_provider_long_name_should_fail() { + new_test_ext().execute_with(|| { + // Create a new MSA account and request that it become a provider + let (_new_msa_id, key_pair) = create_account(); + let proposal_res = Msa::propose_to_be_provider( + RuntimeOrigin::signed(key_pair.public().into()), + Vec::from("this_is_a_really_long_name_that_should_fail"), + ); + + assert_noop!(proposal_res, Error::::ExceedsMaxProviderNameSize); + }) +} diff --git a/pallets/msa/src/tests/mock.rs b/pallets/msa/src/tests/mock.rs new file mode 100644 index 0000000000..87f167abc6 --- /dev/null +++ b/pallets/msa/src/tests/mock.rs @@ -0,0 +1,378 @@ +use crate::{self as pallet_msa, types::EMPTY_FUNCTION, AddProvider}; +use common_primitives::{ + msa::MessageSourceId, node::BlockNumber, schema::SchemaId, utils::wrap_binary_data, +}; +use common_runtime::constants::DAYS; +use frame_support::{ + assert_ok, parameter_types, + traits::{ConstU16, ConstU32, EitherOfDiverse, OnFinalize, OnInitialize}, + weights::Weight, +}; +use frame_system::EnsureRoot; +use pallet_collective::{self, Members}; +use parity_scale_codec::MaxEncodedLen; +use sp_core::{ + offchain::{testing, testing::OffchainState, OffchainDbExt, OffchainWorkerExt}, + sr25519, + sr25519::Public, + Encode, Pair, H256, +}; +use sp_runtime::{ + traits::{BlakeTwo256, ConvertInto, IdentityLookup}, + AccountId32, BuildStorage, DispatchError, MultiSignature, +}; +extern crate alloc; +use alloc::sync::Arc; + +pub use pallet_msa::Call as MsaCall; + +#[cfg(feature = "runtime-benchmarks")] +use pallet_collective::ProposalCount; + +use common_primitives::node::AccountId; + +type Block = frame_system::mocking::MockBlockU32; + +// Configure a mock runtime to test the pallet. +frame_support::construct_runtime!( + pub enum Test + { + System: frame_system::{Pallet, Call, Config, Storage, Event}, + Msa: pallet_msa::{Pallet, Call, Storage, Event}, + Schemas: pallet_schemas::{Pallet, Call, Storage, Event}, + Council: pallet_collective::::{Pallet, Call, Config, Storage, Event, Origin}, + Handles: pallet_handles::{Pallet, Call, Storage, Event}, + } +); + +// See https://paritytech.github.io/substrate/master/pallet_collective/index.html for +// the descriptions of these configs. +parameter_types! { + pub BlockWeights: frame_system::limits::BlockWeights = + frame_system::limits::BlockWeights::simple_max(Weight::MAX); + pub MaxProposalWeight: frame_support::weights::Weight = sp_runtime::Perbill::from_percent(50) * BlockWeights::get().max_block; + pub const SchemaModelMaxBytesBoundedVecLimit: u32 = 10; +} + +impl Encode for SchemaModelMaxBytesBoundedVecLimit {} + +impl MaxEncodedLen for SchemaModelMaxBytesBoundedVecLimit { + fn max_encoded_len() -> usize { + u32::max_encoded_len() + } +} + +pub type CouncilCollective = pallet_collective::Instance1; +impl pallet_collective::Config for Test { + type RuntimeOrigin = RuntimeOrigin; + type Proposal = RuntimeCall; + type RuntimeEvent = RuntimeEvent; + type MotionDuration = ConstU32<{ 5 * DAYS }>; + type MaxProposals = ConstU32<25>; + type MaxMembers = ConstU32<10>; + type DefaultVote = pallet_collective::PrimeDefaultVote; + type WeightInfo = (); + type SetMembersOrigin = frame_system::EnsureRoot; + type MaxProposalWeight = MaxProposalWeight; + type DisapproveOrigin = EnsureRoot; + type KillOrigin = EnsureRoot; + type Consideration = (); +} + +impl frame_system::Config for Test { + type BaseCallFilter = frame_support::traits::Everything; + type BlockWeights = (); + type BlockLength = (); + type DbWeight = (); + type RuntimeOrigin = RuntimeOrigin; + type RuntimeCall = RuntimeCall; + type Nonce = u64; + type Hash = H256; + type Hashing = BlakeTwo256; + type AccountId = AccountId; + type Lookup = IdentityLookup; + type Block = Block; + type RuntimeEvent = RuntimeEvent; + type RuntimeTask = RuntimeTask; + type BlockHashCount = ConstU32<250>; + type Version = (); + type PalletInfo = PalletInfo; + type AccountData = (); + type OnNewAccount = (); + type OnKilledAccount = (); + type SystemWeightInfo = (); + type SS58Prefix = ConstU16<42>; + type OnSetCode = (); + type MaxConsumers = frame_support::traits::ConstU32<16>; + type SingleBlockMigrations = (); + type MultiBlockMigrator = (); + type PreInherents = (); + type PostInherents = (); + type PostTransactions = (); + type ExtensionsWeightInfo = (); +} + +impl pallet_schemas::Config for Test { + type RuntimeEvent = RuntimeEvent; + type WeightInfo = (); + type MinSchemaModelSizeBytes = ConstU32<10>; + type SchemaModelMaxBytesBoundedVecLimit = SchemaModelMaxBytesBoundedVecLimit; + type MaxSchemaRegistrations = ConstU16<10>; + type MaxSchemaSettingsPerSchema = ConstU32<1>; + // The proposal type + type Proposal = RuntimeCall; + // The Council proposal provider interface + type ProposalProvider = CouncilProposalProvider; + // The origin that is allowed to create schemas via governance + // It has to be this way so benchmarks will pass in CI. + type CreateSchemaViaGovernanceOrigin = EitherOfDiverse< + EnsureRoot, + pallet_collective::EnsureProportionMoreThan, + >; +} + +impl pallet_handles::Config for Test { + type RuntimeEvent = RuntimeEvent; + + /// Weight information for extrinsics in this pallet. + type WeightInfo = (); + + /// The conversion to a 32 byte AccountId + type ConvertIntoAccountId32 = ConvertInto; + + /// A type that will supply MSA related information + type MsaInfoProvider = Msa; + + /// The minimum suffix value + type HandleSuffixMin = ConstU16<10>; + + /// The maximum suffix value + type HandleSuffixMax = ConstU16<99>; + + /// The mortality window for a handle claim + type MortalityWindowSize = ConstU32<150>; + + /// A set of helper functions for benchmarking. + #[cfg(feature = "runtime-benchmarks")] + type MsaBenchmarkHelper = (); +} + +// Needs parameter_types! for the Option and statics +parameter_types! { + pub static MaxPublicKeysPerMsa: u8 = 255; + pub static MaxSignaturesStored: Option = Some(8000); +} +pub type MaxProviderNameSize = ConstU32<16>; +pub type MaxSchemaGrantsPerDelegation = ConstU32<30>; + +/// Interface to collective pallet to propose a proposal. +pub struct CouncilProposalProvider; + +impl pallet_msa::ProposalProvider for CouncilProposalProvider { + fn propose( + who: AccountId, + threshold: u32, + proposal: Box, + ) -> Result<(u32, u32), DispatchError> { + let length_bound: u32 = proposal.using_encoded(|p| p.len() as u32); + Council::do_propose_proposed(who, threshold, proposal, length_bound) + } + + fn propose_with_simple_majority( + who: AccountId, + proposal: Box, + ) -> Result<(u32, u32), DispatchError> { + let members = Members::::get(); + let threshold: u32 = ((members.len() / 2) + 1) as u32; + let length_bound: u32 = proposal.using_encoded(|p| p.len() as u32); + Council::do_propose_proposed(who, threshold, proposal, length_bound) + } + + #[cfg(any(feature = "runtime-benchmarks", feature = "test"))] + fn proposal_count() -> u32 { + ProposalCount::::get() + } +} + +impl pallet_msa::Config for Test { + type RuntimeEvent = RuntimeEvent; + type WeightInfo = (); + type ConvertIntoAccountId32 = ConvertInto; + type MaxPublicKeysPerMsa = MaxPublicKeysPerMsa; + type MaxSchemaGrantsPerDelegation = MaxSchemaGrantsPerDelegation; + type MaxProviderNameSize = MaxProviderNameSize; + type SchemaValidator = Schemas; + type HandleProvider = Handles; + type MortalityWindowSize = ConstU32<100>; + type MaxSignaturesStored = MaxSignaturesStored; + // The proposal type + type Proposal = RuntimeCall; + // The Council proposal provider interface + type ProposalProvider = CouncilProposalProvider; + // The origin that is allowed to create providers via governance + // It has to be this way so benchmarks will pass in CI. + type CreateProviderViaGovernanceOrigin = EitherOfDiverse< + EnsureRoot, + pallet_collective::EnsureMembers, + >; +} + +pub fn set_max_signature_stored(max: u32) { + MAX_SIGNATURES_STORED.with(|v| *v.borrow_mut() = Some(max)); +} + +pub fn set_max_public_keys_per_msa(max: u8) { + MAX_PUBLIC_KEYS_PER_MSA.with(|v| *v.borrow_mut() = max); +} + +pub fn new_test_ext() -> sp_io::TestExternalities { + set_max_signature_stored(8000); + set_max_public_keys_per_msa(255); + let t = frame_system::GenesisConfig::::default().build_storage().unwrap(); + let mut ext = sp_io::TestExternalities::new(t); + ext.execute_with(|| System::set_block_number(1)); + ext +} + +pub fn new_test_with_offchain_ext( +) -> (sp_io::TestExternalities, Arc>) { + set_max_signature_stored(8000); + set_max_public_keys_per_msa(255); + let t = frame_system::GenesisConfig::::default().build_storage().unwrap(); + let mut ext = sp_io::TestExternalities::new(t); + let (offchain, state) = testing::TestOffchainExt::with_offchain_db(ext.offchain_db()); + ext.register_extension(OffchainDbExt::new(offchain.clone())); + ext.register_extension(OffchainWorkerExt::new(offchain)); + ext.execute_with(|| System::set_block_number(1)); + (ext, state) +} + +pub fn run_to_block(n: u32) { + while System::block_number() < n { + if System::block_number() > 1 { + System::on_finalize(System::block_number()); + } + System::set_block_number(System::block_number() + 1); + System::on_initialize(System::block_number()); + Msa::on_initialize(System::block_number()); + } +} + +/// Create and return a simple test AccountId32 constructed with the desired integer. +pub fn test_public(n: u8) -> AccountId32 { + AccountId32::new([n; 32]) +} + +/// Create and return a simple signed origin from a test_public constructed with the desired integer, +/// for passing to an extrinsic call +pub fn test_origin_signed(n: u8) -> RuntimeOrigin { + RuntimeOrigin::signed(test_public(n)) +} + +/// Create a new keypair and an MSA associated with its public key. +/// # Returns +/// (MessageSourceId, Pair) - a tuple with the MSA and the new Account key pair +pub fn create_account() -> (MessageSourceId, sr25519::Pair) { + let (key_pair, _) = sr25519::Pair::generate(); + let result_key = Msa::create_account(AccountId32::from(key_pair.public()), EMPTY_FUNCTION); + assert_ok!(&result_key); + let (msa_id, _) = result_key.unwrap(); + (msa_id, key_pair) +} + +/// Creates and signs an `AddProvider` struct using the provided delegator keypair and provider MSA +/// # Returns +/// (MultiSignature, AddProvider) - Returns a tuple with the signature and the AddProvider struct +pub fn create_and_sign_add_provider_payload( + delegator_pair: sr25519::Pair, + provider_msa: MessageSourceId, +) -> (MultiSignature, AddProvider) { + create_and_sign_add_provider_payload_with_schemas(delegator_pair, provider_msa, None, 10) +} + +/// Creates and signs an `AddProvider` struct using the provided delegator keypair, provider MSA and schema ids +/// # Returns +/// (MultiSignature, AddProvider) - Returns a tuple with the signature and the AddProvider struct +pub fn create_and_sign_add_provider_payload_with_schemas( + delegator_pair: sr25519::Pair, + provider_msa: MessageSourceId, + schema_ids: Option>, + expiration: BlockNumber, +) -> (MultiSignature, AddProvider) { + let add_provider_payload = AddProvider::new(provider_msa, schema_ids, expiration); + let encode_add_provider_data = wrap_binary_data(add_provider_payload.encode()); + let signature: MultiSignature = delegator_pair.sign(&encode_add_provider_data).into(); + (signature, add_provider_payload) +} + +/// Creates a provider and delegator MSA and sets the delegation relationship. +// create and set up delegations for a delegator and provider, but for convenience only +/// # Returns +/// * (u8, Public) - Returns a provider_msa_id and a delegator account. +pub fn create_provider_msa_and_delegator() -> (u64, Public) { + let (provider_msa_id, _, _, delegator_account) = create_provider_delegator_msas(); + (provider_msa_id, delegator_account) +} + +// create and set up delegations for a delegator and provider, but for convenience only +// return delegator msa and provider account for testing delegator-submitted extrinsics +/// # Returns +/// * (u8, Public) - Returns a delegator_msa_id and a provider_account. +pub fn create_delegator_msa_and_provider() -> (u64, Public) { + let (_, provider_account, delegator_msa_id, _) = create_provider_delegator_msas(); + (delegator_msa_id, provider_account) +} + +// create and set up delegations for a delegator and provider and return it all +pub fn create_provider_delegator_msas() -> (u64, Public, u64, Public) { + let (provider_msa_id, provider_pair) = create_account(); + let provider_account = provider_pair.public(); + + let (delegator_msa_id, delegator_pair) = create_account(); + let delegator_account = delegator_pair.public(); + + let (delegator_signature, add_provider_payload) = + create_and_sign_add_provider_payload(delegator_pair, provider_msa_id); + + // Register provider + assert_ok!(Msa::create_provider( + RuntimeOrigin::signed(provider_account.into()), + Vec::from("Foo") + )); + + assert_ok!(Msa::grant_delegation( + RuntimeOrigin::signed(provider_account.into()), + delegator_account.into(), + delegator_signature, + add_provider_payload + )); + (provider_msa_id, provider_account, delegator_msa_id, delegator_account) +} + +// Create a provider with given name +pub fn create_provider_with_name(name: &str) -> (u64, Public) { + let (provider_msa_id, provider_pair) = create_account(); + let provider_account = provider_pair.public(); + // Register provider + assert_ok!(Msa::create_provider( + RuntimeOrigin::signed(provider_account.into()), + Vec::from(name) + )); + (provider_msa_id, provider_account) +} + +pub fn generate_test_signature() -> MultiSignature { + let (key_pair, _) = sr25519::Pair::generate(); + let fake_data = H256::random(); + key_pair.sign(fake_data.as_bytes()).into() +} + +#[cfg(feature = "runtime-benchmarks")] +pub fn new_test_ext_keystore() -> sp_io::TestExternalities { + use sp_keystore::{testing::MemoryKeystore, KeystoreExt, KeystorePtr}; + let t = frame_system::GenesisConfig::::default().build_storage().unwrap(); + let mut ext = sp_io::TestExternalities::new(t); + ext.register_extension(KeystoreExt(Arc::new(MemoryKeystore::new()) as KeystorePtr)); + + ext +} diff --git a/pallets/msa/src/tests/mod.rs b/pallets/msa/src/tests/mod.rs new file mode 100644 index 0000000000..98fad21e12 --- /dev/null +++ b/pallets/msa/src/tests/mod.rs @@ -0,0 +1,14 @@ +pub mod mock; + +mod creation_tests; +mod delegation_tests; +mod governance_tests; +mod offchain_tests; +mod other_tests; +mod public_key_tests; +mod replay_tests; +mod retirement_tests; +mod schema_permission_tests; +mod signature_registry_tests; +mod signed_extension_tests; +mod subsidized_add_key_tests; diff --git a/pallets/msa/src/tests/offchain_tests.rs b/pallets/msa/src/tests/offchain_tests.rs new file mode 100644 index 0000000000..1a43c3b86e --- /dev/null +++ b/pallets/msa/src/tests/offchain_tests.rs @@ -0,0 +1,242 @@ +use frame_support::{assert_ok, pallet_prelude::Hooks, traits::OriginTrait}; + +use crate::{ + get_bucket_number, tests::mock::*, Config, DispatchResult, FinalizedBlockResponse, + IndexedEvent, MsaOffchainReplayEvent, OffchainReplayEvent, Pallet, + LAST_PROCESSED_BLOCK_STORAGE_NAME, MSA_INITIAL_INDEXED_STORAGE_NAME, + RPC_FINALIZED_BLOCK_REQUEST_BODY, RPC_FINALIZED_BLOCK_REQUEST_URL, +}; +use frame_system::pallet_prelude::BlockNumberFor; +use parity_scale_codec::{Decode, Encode}; + +use common_primitives::{ + msa::MessageSourceId, + node::AccountId, + offchain::{get_index_value, get_msa_account_storage_key_name}, +}; +use pretty_assertions::assert_eq; +use sp_core::{crypto::AccountId32, offchain::testing::PendingRequest, sr25519, Pair}; +use sp_runtime::offchain::storage::StorageValueRef; + +fn fill_accounts(accounts: usize, with_indexing: bool) -> Vec +where + ::AccountId: From, +{ + let mut result = vec![]; + for _ in 1..=accounts { + let (key_pair, _) = sr25519::Pair::generate(); + let account = key_pair.public(); + let public_key = T::AccountId::decode(&mut &account.encode()[..]).expect("should decode"); + result.push(public_key.clone()); + match with_indexing { + false => { + assert_ok!(Pallet::::create_account(public_key, |_| -> DispatchResult { + Ok(()) + })); + }, + true => { + assert_ok!(Pallet::::create(T::RuntimeOrigin::signed(account.into()))); + }, + } + } + result +} + +fn retire_accounts(accounts: Vec) +where + ::AccountId: From, +{ + for account in accounts { + assert_ok!(Pallet::::retire_msa(T::RuntimeOrigin::signed(account.into()))); + } +} + +#[test] +pub fn offchain_worker_should_populate_accounts_with_initial_state() { + let (mut ext, state) = new_test_with_offchain_ext(); + ext.execute_with(|| { + // arrange + let accounts = fill_accounts::(10, false); + let block_number = BlockNumberFor::::from(10u32); + let response = FinalizedBlockResponse { + result: "0x5685c63b9df72b59f6fa8e1223532c041d15a1abbe39a6d2a48d6565a091839b" + .to_string(), + }; + let decoded_from_hex = hex::decode(&response.result[2..]).expect("should decode hex"); + let val = <::Hash>::decode(&mut &decoded_from_hex[..]) + .expect("should decode hash"); + frame_system::BlockHash::::set(block_number, val); + let serialized_block = serde_json::to_string(&response).expect("should serialize"); + let response_bytes = serialized_block.as_bytes().to_vec(); + state.write().expect_request(PendingRequest { + method: "POST".into(), + uri: RPC_FINALIZED_BLOCK_REQUEST_URL.into(), + headers: vec![("Content-Type".into(), "application/json".into())], + sent: true, + body: RPC_FINALIZED_BLOCK_REQUEST_BODY.to_vec(), + response: Some(response_bytes), + ..Default::default() + }); + + // act + Msa::offchain_worker(block_number); + + // assert + for (i, account) in accounts.into_iter().enumerate() { + let msa_key = get_msa_account_storage_key_name((i + 1) as MessageSourceId); + let result = get_index_value::>(&msa_key); + assert_eq!(result, Ok(Some(vec![account]))); + } + + let last_processed_block = + get_index_value::>(&LAST_PROCESSED_BLOCK_STORAGE_NAME[..]); + assert_eq!(last_processed_block, Ok(Some(block_number))); + + let initial_state_indexed = get_index_value::(&MSA_INITIAL_INDEXED_STORAGE_NAME[..]); + assert_eq!(initial_state_indexed, Ok(Some(true))); + }); +} + +#[test] +pub fn offchain_worker_should_populate_accounts_with_offchain_indexed_events() { + // arrange + let (mut ext, state) = new_test_with_offchain_ext(); + let mut accounts = vec![]; + let mut block_number = 0; + ext.execute_with(|| { + accounts = fill_accounts::(10, true); + block_number = BlockNumberFor::::from(1u32); + let response = FinalizedBlockResponse { + result: "0x5685c63b9df72b59f6fa8e1223532c041d15a1abbe39a6d2a48d6565a091839b" + .to_string(), + }; + let decoded_from_hex = hex::decode(&response.result[2..]).expect("should decode hex"); + let val = <::Hash>::decode(&mut &decoded_from_hex[..]) + .expect("should decode hash"); + frame_system::BlockHash::::set(block_number, val); + let serialized_block = serde_json::to_string(&response).expect("should serialize"); + let response_bytes = serialized_block.as_bytes().to_vec(); + state.write().expect_request(PendingRequest { + method: "POST".into(), + uri: RPC_FINALIZED_BLOCK_REQUEST_URL.into(), + headers: vec![("Content-Type".into(), "application/json".into())], + sent: true, + body: RPC_FINALIZED_BLOCK_REQUEST_BODY.to_vec(), + response: Some(response_bytes), + ..Default::default() + }); + let storage = StorageValueRef::persistent(MSA_INITIAL_INDEXED_STORAGE_NAME); + storage.set(&true); + }); + + ext.persist_offchain_overlay(); + + ext.execute_with(|| { + // act + Msa::offchain_worker(block_number); + + // assert + for (i, account) in accounts.iter().enumerate() { + let msa_key = get_msa_account_storage_key_name((i + 1) as MessageSourceId); + let result = get_index_value::>(&msa_key); + assert_eq!(result, Ok(Some(vec![account.clone()]))); + } + + let last_processed_block = + get_index_value::>(&LAST_PROCESSED_BLOCK_STORAGE_NAME[..]); + assert_eq!(last_processed_block, Ok(Some(block_number))); + }); + + ext.execute_with(|| { + block_number += 1; + System::set_block_number(block_number); + retire_accounts::(accounts.clone()); + let response = FinalizedBlockResponse { + result: "0x5685c63b9df72b59f6fa8e1223532c041d15a1abbe39a6d2a48d6565a091839d" + .to_string(), + }; + let decoded_from_hex = hex::decode(&response.result[2..]).expect("should decode hex"); + let val = <::Hash>::decode(&mut &decoded_from_hex[..]) + .expect("should decode hash"); + frame_system::BlockHash::::set(block_number, val); + let serialized_block = serde_json::to_string(&response).expect("should serialize"); + let response_bytes = serialized_block.as_bytes().to_vec(); + state.write().expect_request(PendingRequest { + method: "POST".into(), + uri: RPC_FINALIZED_BLOCK_REQUEST_URL.into(), + headers: vec![("Content-Type".into(), "application/json".into())], + sent: true, + body: RPC_FINALIZED_BLOCK_REQUEST_BODY.to_vec(), + response: Some(response_bytes), + ..Default::default() + }); + }); + + ext.persist_offchain_overlay(); + + ext.execute_with(|| { + // act + Msa::offchain_worker(block_number); + + // assert + for (i, _) in accounts.into_iter().enumerate() { + let msa_key = get_msa_account_storage_key_name((i + 1) as MessageSourceId); + let result = get_index_value::>(&msa_key); + assert_eq!(result, Ok(None)); + } + + let last_processed_block = + get_index_value::>(&LAST_PROCESSED_BLOCK_STORAGE_NAME[..]); + assert_eq!(last_processed_block, Ok(Some(block_number))); + }); +} + +#[test] +fn get_bucket_number_should_return_pseudo_random_value() { + new_test_ext().execute_with(|| { + let event1: IndexedEvent = IndexedEvent::IndexedMsaCreated { + msa_id: 100, + key: AccountId::new([ + 1u8, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1u8, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1u8, 2, 3, 4, 5, + 6, 7, 8, 9, 10, 1, 2, + ]), + }; + let event2: IndexedEvent = IndexedEvent::IndexedMsaCreated { + msa_id: 101, + key: AccountId::new([ + 1u8, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1u8, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1u8, 2, 3, 4, 5, + 6, 7, 8, 9, 10, 1, 2, + ]), + }; + + let bucket_1 = get_bucket_number(&event1); + let bucket_2 = get_bucket_number(&event2); + + assert_ne!(bucket_1, bucket_2); + assert!(1 <= bucket_1 && bucket_1 <= 1000); + assert!(1 <= bucket_2 && bucket_2 <= 1000); + }); +} + +#[test] +fn reindex_offchain_should_always_succeed() { + new_test_ext().execute_with(|| { + let (new_msa_id, key_pair) = create_account(); + + assert_ok!(Msa::reindex_offchain( + test_origin_signed(1), + OffchainReplayEvent::MsaPallet(MsaOffchainReplayEvent::KeyReIndex { + msa_id: new_msa_id, + index_key: Some(key_pair.public().into()), + }), + )); + + assert_ok!(Msa::reindex_offchain( + test_origin_signed(1), + OffchainReplayEvent::MsaPallet(MsaOffchainReplayEvent::KeyReIndex { + msa_id: new_msa_id, + index_key: None, + }), + )); + }) +} diff --git a/pallets/msa/src/tests/other_tests.rs b/pallets/msa/src/tests/other_tests.rs new file mode 100644 index 0000000000..a931da3011 --- /dev/null +++ b/pallets/msa/src/tests/other_tests.rs @@ -0,0 +1,849 @@ +use frame_support::{ + assert_err, assert_noop, assert_ok, + dispatch::{GetDispatchInfo, Pays}, + BoundedBTreeMap, +}; + +use frame_system::pallet_prelude::BlockNumberFor; + +use sp_core::{crypto::AccountId32, ecdsa, sr25519, Encode, Pair}; +use sp_runtime::{traits::Zero, MultiSignature}; + +use crate::{ + ensure, + tests::mock::*, + types::{AddProvider, PermittedDelegationSchemas, EMPTY_FUNCTION}, + AddKeyData, Config, DelegatorAndProviderToDelegation, DispatchResult, Error, Event, + ProviderToRegistryEntry, PublicKeyToMsaId, +}; +use common_primitives::signatures::AccountAddressMapper; + +use common_primitives::{ + msa::{ + Delegation, DelegationResponse, DelegatorId, MessageSourceId, ProviderId, + ProviderRegistryEntry, SchemaGrant, SchemaGrantValidator, H160, + }, + node::{BlockNumber, EIP712Encode}, + schema::{SchemaId, SchemaValidator}, + signatures::{EthereumAddressMapper, UnifiedSignature, UnifiedSigner}, + utils::wrap_binary_data, +}; +use pretty_assertions::assert_eq; +use sp_core::bytes::from_hex; +use sp_runtime::traits::{IdentifyAccount, Verify}; +extern crate alloc; +use alloc::vec; + +pub fn assert_revoke_delegation_by_delegator_no_effect( + test_account: AccountId32, + provider_msa_id: u64, +) { + let event_count = System::event_count(); + assert_ok!(Msa::revoke_delegation_by_delegator( + RuntimeOrigin::signed(test_account.clone()), + provider_msa_id + )); + assert_eq!(event_count, System::event_count()) +} + +#[test] +pub fn test_get_owner_of() { + new_test_ext().execute_with(|| { + assert_eq!(Msa::get_owner_of(&test_public(1)), None); + + assert_ok!(Msa::create(test_origin_signed(1))); + + assert_eq!(Msa::get_owner_of(&test_public(1)), Some(1)); + }); +} + +#[test] +pub fn test_ensure_msa_owner() { + new_test_ext().execute_with(|| { + assert_noop!(Msa::ensure_msa_owner(&test_public(1), 1), Error::::NoKeyExists); + + assert_ok!(Msa::add_key(1, &test_public(1), EMPTY_FUNCTION)); + + assert_eq!(Msa::ensure_msa_owner(&test_public(1), 1), Ok(())); + }); +} + +#[test] +pub fn add_provider_to_msa_is_success() { + new_test_ext().execute_with(|| { + let (key_pair, _) = sr25519::Pair::generate(); + let provider_account = key_pair.public(); + + let (delegator_pair, _) = sr25519::Pair::generate(); + let delegator_account = delegator_pair.public(); + + // Create provider account and get its MSA ID (u64) + assert_ok!(Msa::create(RuntimeOrigin::signed(provider_account.into()))); + let provider_msa = + Msa::ensure_valid_msa_key(&AccountId32::new(provider_account.0)).unwrap(); + + // Create delegator account and get its MSA ID (u64) + assert_ok!(Msa::create(RuntimeOrigin::signed(delegator_account.into()))); + let delegator_msa = + Msa::ensure_valid_msa_key(&AccountId32::new(delegator_account.0)).unwrap(); + + // Register provider + assert_ok!(Msa::create_provider( + RuntimeOrigin::signed(provider_account.into()), + Vec::from("Foo") + )); + + let (delegator_signature, add_provider_payload) = + create_and_sign_add_provider_payload(delegator_pair, provider_msa); + + set_schema_count::(10); + + assert_ok!(Msa::grant_delegation( + RuntimeOrigin::signed(provider_account.into()), + delegator_account.into(), + delegator_signature, + add_provider_payload + )); + + let provider = ProviderId(provider_msa); + let delegator = DelegatorId(delegator_msa); + + assert_eq!( + DelegatorAndProviderToDelegation::::get(delegator, provider), + Some(Delegation { revoked_at: 0, schema_permissions: Default::default() }) + ); + + System::assert_last_event( + Event::DelegationGranted { + delegator_id: delegator_msa.into(), + provider_id: provider_msa.into(), + } + .into(), + ); + }); +} + +#[test] +pub fn ensure_valid_msa_key_is_successfull() { + new_test_ext().execute_with(|| { + assert_noop!(Msa::ensure_valid_msa_key(&test_public(1)), Error::::NoKeyExists); + + assert_ok!(Msa::create(test_origin_signed(1))); + + assert_ok!(Msa::ensure_valid_msa_key(&test_public(1))); + }); +} + +#[test] +pub fn add_key_with_panic_in_on_success_should_revert_everything() { + new_test_ext().execute_with(|| { + // arrange + let msa_id = 1u64; + let key = test_public(msa_id as u8); + + // act + assert_noop!( + Msa::add_key(msa_id, &key, |new_msa_id| -> DispatchResult { + ensure!(new_msa_id != msa_id, Error::::InvalidSelfRemoval); + Ok(()) + }), + Error::::InvalidSelfRemoval + ); + + // assert + assert_eq!(PublicKeyToMsaId::::get(&key), None); + }); +} + +#[test] +pub fn revoke_delegation_by_delegator_is_successful() { + new_test_ext().execute_with(|| { + let (key_pair, _) = sr25519::Pair::generate(); + let provider_account = key_pair.public(); + + let (delegator_pair, _) = sr25519::Pair::generate(); + let delegator_account = delegator_pair.public(); + + assert_ok!(Msa::create(RuntimeOrigin::signed(delegator_account.into()))); + assert_ok!(Msa::create(RuntimeOrigin::signed(provider_account.into()))); + + // Register provider + assert_ok!(Msa::create_provider( + RuntimeOrigin::signed(provider_account.into()), + Vec::from("Foo") + )); + + let provider_msa = + Msa::ensure_valid_msa_key(&AccountId32::new(provider_account.0)).unwrap(); + + let (delegator_signature, add_provider_payload) = + create_and_sign_add_provider_payload(delegator_pair, provider_msa); + + assert_ok!(Msa::grant_delegation( + RuntimeOrigin::signed(provider_account.into()), + delegator_account.into(), + delegator_signature, + add_provider_payload + )); + + assert_ok!(Msa::revoke_delegation_by_delegator( + RuntimeOrigin::signed(delegator_account.into()), + 2 + )); + + System::assert_last_event( + Event::DelegationRevoked { delegator_id: 1.into(), provider_id: 2.into() }.into(), + ); + }); +} + +#[test] +pub fn revoke_provider_is_successful() { + new_test_ext().execute_with(|| { + let (key_pair, _) = sr25519::Pair::generate(); + let provider_account = key_pair.public(); + + let (delegator_pair, _) = sr25519::Pair::generate(); + let delegator_account = delegator_pair.public(); + + assert_ok!(Msa::create(RuntimeOrigin::signed(delegator_account.into()))); + assert_ok!(Msa::create(RuntimeOrigin::signed(provider_account.into()))); + + let provider_msa = + Msa::ensure_valid_msa_key(&AccountId32::new(provider_account.0)).unwrap(); + + let (delegator_signature, add_provider_payload) = + create_and_sign_add_provider_payload(delegator_pair, provider_msa); + + // Register provider + assert_ok!(Msa::create_provider( + RuntimeOrigin::signed(provider_account.into()), + Vec::from("Foo") + )); + + assert_ok!(Msa::grant_delegation( + RuntimeOrigin::signed(provider_account.into()), + delegator_account.into(), + delegator_signature, + add_provider_payload + )); + + let delegator_msa = + Msa::ensure_valid_msa_key(&AccountId32::new(delegator_account.0)).unwrap(); + + let provider = ProviderId(provider_msa); + let delegator = DelegatorId(delegator_msa); + + assert_ok!(Msa::revoke_provider(provider, delegator)); + + assert_eq!( + DelegatorAndProviderToDelegation::::get(delegator, provider).unwrap(), + Delegation { revoked_at: 1, schema_permissions: Default::default() }, + ); + }); +} + +#[test] +fn revoke_delegation_by_delegator_does_nothing_when_no_msa() { + new_test_ext() + .execute_with(|| assert_revoke_delegation_by_delegator_no_effect(test_public(3), 333u64)); +} + +#[test] +pub fn revoke_delegation_by_delegator_does_nothing_if_only_key_is_revoked() { + new_test_ext().execute_with(|| { + assert_ok!(Msa::create(RuntimeOrigin::signed(test_public(2)))); + assert_ok!(Msa::delete_key_for_msa(1, &test_public(2))); + assert_revoke_delegation_by_delegator_no_effect(test_public(2), 1u64) + }) +} + +#[test] +pub fn revoke_delegation_by_delegator_fails_if_has_msa_but_no_delegation() { + new_test_ext().execute_with(|| { + assert_ok!(Msa::create(test_origin_signed(1))); + assert_ok!(Msa::create(test_origin_signed(2))); + assert_noop!( + Msa::revoke_delegation_by_delegator(test_origin_signed(1), 2), + Error::::DelegationNotFound + ); + }) +} + +#[test] +fn revoke_delegation_by_delegator_throws_error_when_delegation_already_revoked() { + new_test_ext().execute_with(|| { + let (key_pair, _) = sr25519::Pair::generate(); + let provider_account = key_pair.public(); + + let (delegator_pair, _) = sr25519::Pair::generate(); + let delegator_account = delegator_pair.public(); + + assert_ok!(Msa::create(RuntimeOrigin::signed(delegator_account.into()))); + assert_ok!(Msa::create(RuntimeOrigin::signed(provider_account.into()))); + + let provider_msa = + Msa::ensure_valid_msa_key(&AccountId32::new(provider_account.0)).unwrap(); + + let (delegator_signature, add_provider_payload) = + create_and_sign_add_provider_payload(delegator_pair, provider_msa); + + // Register provider + assert_ok!(Msa::create_provider( + RuntimeOrigin::signed(provider_account.into()), + Vec::from("Foo") + )); + + assert_ok!(Msa::grant_delegation( + RuntimeOrigin::signed(provider_account.into()), + delegator_account.into(), + delegator_signature, + add_provider_payload + )); + + assert_ok!(Msa::revoke_delegation_by_delegator( + RuntimeOrigin::signed(delegator_account.into()), + provider_msa + )); + + assert_noop!( + Msa::revoke_delegation_by_delegator( + RuntimeOrigin::signed(delegator_account.into()), + provider_msa + ), + Error::::DelegationRevoked + ); + }); +} + +/// Assert that the call to revoke a delegation is free. +#[test] +pub fn revoke_provider_call_has_no_cost() { + new_test_ext().execute_with(|| { + let (key_pair, _) = sr25519::Pair::generate(); + let provider_account = key_pair.public(); + + let expiration: BlockNumber = 10; + let add_provider_payload = AddProvider::new(1, None, expiration); + let encode_add_provider_data = wrap_binary_data(add_provider_payload.encode()); + + let signature: MultiSignature = key_pair.sign(&encode_add_provider_data).into(); + + assert_ok!(Msa::create(test_origin_signed(1))); + assert_ok!(Msa::create(RuntimeOrigin::signed(provider_account.into()))); + + // Register provider + assert_ok!(Msa::create_provider(test_origin_signed(1), Vec::from("Foo"))); + + assert_ok!(Msa::grant_delegation( + test_origin_signed(1), + provider_account.into(), + signature, + add_provider_payload + )); + + let call = MsaCall::::revoke_delegation_by_delegator { provider_msa_id: 2 }; + let dispatch_info = call.get_dispatch_info(); + + assert_eq!(dispatch_info.pays_fee, Pays::No); + }) +} + +#[test] +fn create_provider() { + new_test_ext().execute_with(|| { + let (_new_msa_id, key_pair) = create_account(); + + assert_ok!(Msa::create_provider( + RuntimeOrigin::signed(key_pair.public().into()), + Vec::from("Foo") + )); + }) +} + +#[test] +fn create_provider_max_size_exceeded() { + new_test_ext().execute_with(|| { + let (_new_msa_id, key_pair) = create_account(); + + assert_err!( + Msa::create_provider( + RuntimeOrigin::signed(key_pair.public().into()), + Vec::from("12345678901234567") + ), + Error::::ExceedsMaxProviderNameSize + ); + }) +} + +#[test] +fn create_provider_duplicate() { + new_test_ext().execute_with(|| { + let (key_pair, _) = sr25519::Pair::generate(); + let (_new_msa_id, _) = + Msa::create_account(key_pair.public().into(), EMPTY_FUNCTION).unwrap(); + assert_ok!(Msa::create_provider( + RuntimeOrigin::signed(key_pair.public().into()), + Vec::from("Foo") + )); + + assert_err!( + Msa::create_provider(RuntimeOrigin::signed(key_pair.public().into()), Vec::from("Foo")), + Error::::DuplicateProviderRegistryEntry + ) + }) +} + +pub fn set_schema_count(n: u16) { + ::SchemaValidator::set_schema_count(n); +} + +#[test] +pub fn valid_schema_grant() { + new_test_ext().execute_with(|| { + set_schema_count::(2); + + let provider = ProviderId(1); + let delegator = DelegatorId(2); + let schema_grants = vec![1, 2]; + assert_ok!(Msa::add_provider(provider, delegator, schema_grants)); + + System::set_block_number(System::block_number() + 1); + + assert_ok!(Msa::ensure_valid_schema_grant(provider, delegator, 2u16, 1u32)); + }) +} + +#[test] +pub fn error_invalid_schema_id() { + struct TestCase { + schema: Vec, + expected: T, + } + new_test_ext().execute_with(|| { + set_schema_count::(12); + + let provider = ProviderId(1); + let delegator = DelegatorId(2); + let test_cases: [TestCase>; 3] = [ + TestCase { schema: vec![15, 16], expected: Error::::InvalidSchemaId }, + TestCase { schema: vec![16, 17], expected: Error::::InvalidSchemaId }, + TestCase { schema: vec![18], expected: Error::::InvalidSchemaId }, + ]; + for tc in test_cases { + assert_noop!(Msa::add_provider(provider, delegator, tc.schema), tc.expected); + } + }) +} + +#[test] +pub fn error_exceeding_max_schema_under_minimum_schema_grants() { + new_test_ext().execute_with(|| { + set_schema_count::(16); + + let provider = ProviderId(1); + let delegator = DelegatorId(2); + assert_noop!( + Msa::add_provider(provider, delegator, (1..32_u16).collect::>()), + Error::::ExceedsMaxSchemaGrantsPerDelegation + ); + }) +} + +#[test] +pub fn error_not_delegated_rpc() { + new_test_ext().execute_with(|| { + let provider = ProviderId(1); + let delegator = DelegatorId(2); + assert_err!( + Msa::get_granted_schemas_by_msa_id(delegator, Some(provider)), + Error::::DelegationNotFound + ); + }) +} + +#[test] +pub fn error_schema_not_granted_rpc() { + new_test_ext().execute_with(|| { + let provider = ProviderId(1); + let delegator = DelegatorId(2); + assert_ok!(Msa::add_provider(provider, delegator, Vec::default())); + assert_err!( + Msa::get_granted_schemas_by_msa_id(delegator, Some(provider)), + Error::::SchemaNotGranted + ); + }) +} + +#[test] +pub fn schema_granted_success_rpc() { + new_test_ext().execute_with(|| { + set_schema_count::(2); + + let provider = ProviderId(1); + let delegator = DelegatorId(2); + let schema_grants = vec![1, 2]; + assert_ok!(Msa::add_provider(provider, delegator, schema_grants)); + let schemas_granted = Msa::get_granted_schemas_by_msa_id(delegator, Some(provider)); + let expected_schemas_granted = vec![ + SchemaGrant::new(1, BlockNumber::zero()), + SchemaGrant::new(2, BlockNumber::zero()), + ]; + let expected_delegations = vec![DelegationResponse { + provider_id: provider, + permissions: expected_schemas_granted, + }]; + let output_schemas = schemas_granted.unwrap(); + assert_eq!(output_schemas, expected_delegations); + }) +} + +#[test] +pub fn schema_granted_success_multiple_providers_rpc() { + new_test_ext().execute_with(|| { + set_schema_count::(4); + + let provider_1 = ProviderId(1); + let provider_2 = ProviderId(2); + let delegator = DelegatorId(2); + let schema_grants_1 = vec![1, 2]; + let schema_grants_2 = vec![3, 4]; + assert_ok!(Msa::add_provider(provider_1, delegator, schema_grants_1)); + assert_ok!(Msa::add_provider(provider_2, delegator, schema_grants_2)); + let schemas_granted = Msa::get_granted_schemas_by_msa_id(delegator, None); + let expected_schemas_granted_1 = vec![ + SchemaGrant::new(1, BlockNumber::zero()), + SchemaGrant::new(2, BlockNumber::zero()), + ]; + let expected_schemas_granted_2 = vec![ + SchemaGrant::new(3, BlockNumber::zero()), + SchemaGrant::new(4, BlockNumber::zero()), + ]; + let expected_delegation_1 = + DelegationResponse { provider_id: provider_1, permissions: expected_schemas_granted_1 }; + let expected_delegation_2 = + DelegationResponse { provider_id: provider_2, permissions: expected_schemas_granted_2 }; + let output_schemas = schemas_granted.unwrap(); + assert_eq!(output_schemas, vec![expected_delegation_1, expected_delegation_2]); + }) +} + +#[test] +pub fn schema_revoked_rpc() { + new_test_ext().execute_with(|| { + set_schema_count::(2); + + let provider = ProviderId(1); + let delegator = DelegatorId(2); + let mut schema_grants = vec![1, 2]; + assert_ok!(Msa::add_provider(provider, delegator, schema_grants)); + let mut schemas_granted = Msa::get_granted_schemas_by_msa_id(delegator, Some(provider)); + let mut expected_schemas_granted = vec![ + SchemaGrant::new(1, BlockNumber::zero()), + SchemaGrant::new(2, BlockNumber::zero()), + ]; + let expected_delegations = vec![DelegationResponse { + provider_id: provider, + permissions: expected_schemas_granted, + }]; + let mut output_schemas = schemas_granted.unwrap(); + assert_eq!(output_schemas, expected_delegations); + + // Now revoke a schema and check that it is reported correctly by the RPC + run_to_block(5); + schema_grants = vec![1]; + assert_ok!(Msa::upsert_schema_permissions(provider, delegator, schema_grants)); + schemas_granted = Msa::get_granted_schemas_by_msa_id(delegator, Some(provider)); + expected_schemas_granted = + vec![SchemaGrant::new(1, BlockNumber::zero()), SchemaGrant::new(2, 5)]; + let expected_delegations = vec![DelegationResponse { + provider_id: provider, + permissions: expected_schemas_granted, + }]; + output_schemas = schemas_granted.unwrap(); + assert_eq!(output_schemas, expected_delegations); + }) +} + +#[test] +pub fn add_provider_expired() { + new_test_ext().execute_with(|| { + // 1. create two key pairs + let (provider_pair, _) = sr25519::Pair::generate(); + let (user_pair, _) = sr25519::Pair::generate(); + + let provider_key = provider_pair.public(); + let delegator_key = user_pair.public(); + + // 2. create provider MSA + assert_ok!(Msa::create(RuntimeOrigin::signed(provider_key.into()))); // MSA = 1 + + // Register provider + assert_ok!(Msa::create_provider( + RuntimeOrigin::signed(provider_key.into()), + Vec::from("Foo") + )); + + // 3. create delegator MSA and provider to provider + let expiration: BlockNumber = 0; + + let add_provider_payload = AddProvider::new(1u64, None, expiration); + let encode_add_provider_data = wrap_binary_data(add_provider_payload.encode()); + let signature: MultiSignature = user_pair.sign(&encode_add_provider_data).into(); + // 3.5 create the user's MSA + add provider as provider + assert_err!( + Msa::grant_delegation( + test_origin_signed(1), + delegator_key.into(), + signature, + add_provider_payload + ), + Error::::ProofHasExpired + ); + }) +} + +#[test] +pub fn ensure_all_schema_ids_are_valid_errors() { + new_test_ext().execute_with(|| { + let schema_ids = vec![1]; + assert_noop!( + Msa::ensure_all_schema_ids_are_valid(&schema_ids), + Error::::InvalidSchemaId + ); + + let schema_ids = (1..32).collect::>(); + assert_noop!( + Msa::ensure_all_schema_ids_are_valid(&schema_ids), + Error::::ExceedsMaxSchemaGrantsPerDelegation + ); + }) +} +#[test] +pub fn ensure_all_schema_ids_are_valid_success() { + new_test_ext().execute_with(|| { + let schema_ids = vec![1]; + set_schema_count::(1); + + assert_ok!(Msa::ensure_all_schema_ids_are_valid(&schema_ids)); + }); +} + +#[test] +pub fn is_registered_provider_is_true() { + new_test_ext().execute_with(|| { + let provider = ProviderId(1); + let provider_name = Vec::from("frequency".as_bytes()).try_into().unwrap(); + + let provider_meta = ProviderRegistryEntry { provider_name }; + ProviderToRegistryEntry::::insert(provider, provider_meta); + + assert!(Msa::is_registered_provider(provider.into())); + }); +} + +#[test] +fn delegation_default_trait_impl() { + new_test_ext().execute_with(|| { + let delegation: Delegation< + SchemaId, + BlockNumberFor, + ::MaxSchemaGrantsPerDelegation, + > = Default::default(); + + let expected = Delegation { + schema_permissions: BoundedBTreeMap::< + SchemaId, + BlockNumberFor, + ::MaxSchemaGrantsPerDelegation, + >::default(), + revoked_at: Default::default(), + }; + + assert_eq!(delegation, expected); + }); +} + +#[test] +fn try_mutate_delegation_success() { + new_test_ext().execute_with(|| { + let delegator = DelegatorId(1); + let provider = ProviderId(2); + + assert_ok!(Msa::try_mutate_delegation( + delegator, + provider, + |delegation, _is_new_provider| -> Result<(), &'static str> { + let schema_id = 1; + let _a = + PermittedDelegationSchemas::::try_insert_schema(delegation, schema_id); + + Ok(()) + }, + )); + + assert!(DelegatorAndProviderToDelegation::::get(delegator, provider).is_some()); + }); +} + +#[test] +fn msa_id_to_eth_address_binary() { + let msa_ids: [MessageSourceId; 2] = [1234u64, 4321u64]; + let expected = [ + H160( + hex::decode("65928b9a88db189eea76f72d86128af834d64c32") + .unwrap() + .try_into() + .unwrap(), + ), + H160( + hex::decode("f2f77409b0054b4b14911f00961140deb316ab39") + .unwrap() + .try_into() + .unwrap(), + ), + ]; + + for i in 0..msa_ids.len() { + let eth_address = Msa::msa_id_to_eth_address(msa_ids[i]); + assert_eq!(eth_address, expected[i]); + } +} + +#[test] +fn validate_eth_address_for_msa_good() { + let msa_ids: [MessageSourceId; 2] = [1234u64, 4321u64]; + let expected = msa_ids.map(|msa_id| Msa::msa_id_to_eth_address(msa_id)); + + for i in 0..msa_ids.len() { + let status = Msa::validate_eth_address_for_msa(&expected[i], msa_ids[i]); + assert_eq!(status, true); + } +} + +#[test] +fn validate_eth_address_for_msa_bad() { + let msa_ids = [1234u64, 4321u64]; + let expected: [H160; 2] = msa_ids + .map(|msa_id| Msa::msa_id_to_eth_address(msa_id)) + .iter() + .rev() + .cloned() + .collect::>() + .try_into() + .unwrap(); + + for i in 0..msa_ids.len() { + let status = Msa::validate_eth_address_for_msa(&expected[i], msa_ids[i]); + assert_eq!(status, false); + } +} + +#[test] +fn eth_address_to_checksummed_string() { + let eth_addresses: [H160; 5] = [ + H160( + hex::decode("5aaeb6053f3e94c9b9a09f33669435e7ef1beaed") + .unwrap() + .try_into() + .unwrap(), + ), + H160( + hex::decode("fb6916095ca1df60bb79ce92ce3ea74c37c5d359") + .unwrap() + .try_into() + .unwrap(), + ), + H160( + hex::decode("dbf03b407c01e7cd3cbea99509d93f8dddc8c6fb") + .unwrap() + .try_into() + .unwrap(), + ), + H160( + hex::decode("d1220a0cf47c7b9be7a2e6ba89f429762e7b9adb") + .unwrap() + .try_into() + .unwrap(), + ), + H160( + hex::decode("f5b82ff246a2f4226749bd78b1bdae28cfffb9f7") + .unwrap() + .try_into() + .unwrap(), + ), + ]; + + // Test values from https://github.com/ethereum/ercs/blob/master/ERCS/erc-55.md + let eth_results: [alloc::string::String; 5] = [ + "0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed".to_string(), + "0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359".to_string(), + "0xdbF03B407c01E7cD3CBea99509d93f8DDDC8C6FB".to_string(), + "0xD1220A0cf47c7B9Be7A2E6BA89F429762e7b9aDb".to_string(), + "0xF5b82ff246a2F4226749bd78B1bDaE28Cfffb9f7".to_string(), + ]; + + for i in 0..eth_addresses.len() { + let generated_result = Msa::eth_address_to_checksummed_string(ð_addresses[i]); + assert_eq!(generated_result, eth_results[i]); + } +} + +#[test] +fn ethereum_eip712_signatures_for_add_key_should_work() { + new_test_ext().execute_with(|| { + let address = EthereumAddressMapper::to_account_id(&from_hex("0x7A23F8D62589aB9651722C7F4a0E998D7d3Ef2A9").unwrap_or_default()); + let payload: AddKeyData = AddKeyData { + msa_id: 12876327, + expiration: 100, + new_public_key: address.into(), + }; + let encoded_payload = payload.encode_eip_712(); + + // following signature is generated via Metamask using the same input to check compatibility + let signature_raw = from_hex("0x7fb9df5e7f51875509456fe24de92c256c4dcaaaeb952fe36bb30f79c8cc3bbf2f988fa1c55efb6bf20825e98de5cc1ac0bdcf036ad1e0f9ee969a729540ff8d1c").expect("Should convert"); + let unified_signature = UnifiedSignature::from(ecdsa::Signature::from_raw( + signature_raw.try_into().expect("should convert"), + )); + + // Non-compressed public key associated with the keypair used in Metamask + // 0x509540919faacf9ab52146c9aa40db68172d83777250b28e4679176e49ccdd9fa213197dc0666e85529d6c9dda579c1295d61c417f01505765481e89a4016f02 + let public_key = ecdsa::Public::from_raw( + from_hex("0x02509540919faacf9ab52146c9aa40db68172d83777250b28e4679176e49ccdd9f") + .expect("should convert") + .try_into() + .expect("invalid size"), + ); + let unified_signer = UnifiedSigner::from(public_key); + assert!(unified_signature.verify(&encoded_payload[..], &unified_signer.into_account())); + }); +} + +#[test] +fn ethereum_eip712_signatures_for_add_provider_should_work() { + new_test_ext().execute_with(|| { + let payload = AddProvider { + authorized_msa_id: 12876327, + schema_ids: vec![2,4,5,6,7,8], + expiration: 100, + }; + let encoded_payload = payload.encode_eip_712(); + + // following signature is generated via Metamask using the same input to check compatibility + let signature_raw = from_hex("0x34ed5cc291815bdc7d95b418b341bbd3d9ca82c284d5f22d8016c27bb9d4eef8507cdb169a40e69dc5d7ee8ff0bff29fa0d8fc4e73cad6fc9bf1bf076f8e0a741c").expect("Should convert"); + let unified_signature = UnifiedSignature::from(ecdsa::Signature::from_raw( + signature_raw.try_into().expect("should convert"), + )); + + // Non-compressed public key associated with the keypair used in Metamask + // 0x509540919faacf9ab52146c9aa40db68172d83777250b28e4679176e49ccdd9fa213197dc0666e85529d6c9dda579c1295d61c417f01505765481e89a4016f02 + let public_key = ecdsa::Public::from_raw( + from_hex("0x02509540919faacf9ab52146c9aa40db68172d83777250b28e4679176e49ccdd9f") + .expect("should convert") + .try_into() + .expect("invalid size"), + ); + let unified_signer = UnifiedSigner::from(public_key); + assert!(unified_signature.verify(&encoded_payload[..], &unified_signer.into_account())); + }); +} diff --git a/pallets/msa/src/tests/public_key_tests.rs b/pallets/msa/src/tests/public_key_tests.rs new file mode 100644 index 0000000000..baba494b01 --- /dev/null +++ b/pallets/msa/src/tests/public_key_tests.rs @@ -0,0 +1,468 @@ +use frame_support::{ + assert_noop, assert_ok, + dispatch::{GetDispatchInfo, Pays}, +}; + +use sp_core::{crypto::AccountId32, sr25519, Encode, Pair}; +use sp_runtime::{ArithmeticError, MultiSignature}; + +use crate::{ + tests::mock::*, + types::{AddKeyData, EMPTY_FUNCTION}, + Config, Error, Event, PayloadSignatureRegistryList, PayloadSignatureRegistryPointer, + PublicKeyCountForMsaId, PublicKeyToMsaId, +}; + +use common_primitives::{ + msa::{MessageSourceId, SignatureRegistryPointer}, + utils::wrap_binary_data, +}; + +#[test] +fn it_throws_error_when_new_key_verification_fails() { + new_test_ext().execute_with(|| { + let (new_msa_id, owner_key_pair) = create_account(); + let (new_key_pair, _) = sr25519::Pair::generate(); + let (fake_key_pair, _) = sr25519::Pair::generate(); + + let add_new_key_data = AddKeyData { + msa_id: new_msa_id, + expiration: 10, + new_public_key: new_key_pair.public().into(), + }; + + let encode_data_new_key_data = wrap_binary_data(add_new_key_data.encode()); + + let owner_signature: MultiSignature = owner_key_pair.sign(&encode_data_new_key_data).into(); + let fake_new_key_signature: MultiSignature = + fake_key_pair.sign(&encode_data_new_key_data).into(); + + assert_noop!( + Msa::add_public_key_to_msa( + test_origin_signed(1), + owner_key_pair.public().into(), + owner_signature, + fake_new_key_signature, + add_new_key_data + ), + Error::::NewKeyOwnershipInvalidSignature + ); + }); +} + +#[test] +fn it_throws_error_when_msa_ownership_verification_fails() { + new_test_ext().execute_with(|| { + let (new_msa_id, owner_key_pair) = create_account(); + let (new_key_pair, _) = sr25519::Pair::generate(); + let (fake_owner_pair, _) = sr25519::Pair::generate(); + + let add_new_key_data = AddKeyData { + msa_id: new_msa_id, + expiration: 10, + new_public_key: new_key_pair.public().into(), + }; + + let encode_data_new_key_data = wrap_binary_data(add_new_key_data.encode()); + + let fake_owner_signature: MultiSignature = + fake_owner_pair.sign(&encode_data_new_key_data).into(); + let new_key_signature: MultiSignature = new_key_pair.sign(&encode_data_new_key_data).into(); + + assert_noop!( + Msa::add_public_key_to_msa( + test_origin_signed(1), + owner_key_pair.public().into(), + fake_owner_signature, + new_key_signature, + add_new_key_data + ), + Error::::MsaOwnershipInvalidSignature + ); + }); +} + +#[test] +fn it_throws_error_when_not_msa_owner() { + new_test_ext().execute_with(|| { + let (new_msa_id, _) = create_account(); + let (new_key_pair, _) = sr25519::Pair::generate(); + let (_fake_msa_id, fake_key_pair) = create_account(); + + assert_ok!(Msa::create_account(test_public(1), EMPTY_FUNCTION)); + + let add_new_key_data = AddKeyData { + msa_id: new_msa_id, + expiration: 10, + new_public_key: new_key_pair.public().into(), + }; + + let encode_data_new_key_data = wrap_binary_data(add_new_key_data.encode()); + + let fake_owner_signature: MultiSignature = + fake_key_pair.sign(&encode_data_new_key_data).into(); + let new_key_signature: MultiSignature = new_key_pair.sign(&encode_data_new_key_data).into(); + + assert_noop!( + Msa::add_public_key_to_msa( + test_origin_signed(1), + fake_key_pair.public().into(), + fake_owner_signature, + new_key_signature, + add_new_key_data + ), + Error::::NotMsaOwner + ); + }); +} + +#[test] +fn it_throws_error_when_for_duplicate_key() { + new_test_ext().execute_with(|| { + let (new_msa_id, owner_key_pair) = create_account(); + let (new_key_pair, _) = sr25519::Pair::generate(); + + let _ = Msa::add_key(new_msa_id, &new_key_pair.public().into(), EMPTY_FUNCTION); + + let add_new_key_data = AddKeyData { + msa_id: new_msa_id, + expiration: 10, + new_public_key: new_key_pair.public().into(), + }; + + let encode_data_new_key_data = wrap_binary_data(add_new_key_data.encode()); + + let owner_signature: MultiSignature = owner_key_pair.sign(&encode_data_new_key_data).into(); + let new_key_signature: MultiSignature = new_key_pair.sign(&encode_data_new_key_data).into(); + + assert_noop!( + Msa::add_public_key_to_msa( + test_origin_signed(1), + owner_key_pair.public().into(), + owner_signature, + new_key_signature, + add_new_key_data + ), + Error::::KeyAlreadyRegistered + ); + }); +} + +#[test] +fn add_key_with_more_than_allowed_should_panic() { + new_test_ext().execute_with(|| { + // arrange + let (new_msa_id, owner_key_pair) = create_account(); + + for _ in 1..::MaxPublicKeysPerMsa::get() { + let (new_key_pair, _) = sr25519::Pair::generate(); + + let add_new_key_data = AddKeyData { + msa_id: new_msa_id, + expiration: 10, + new_public_key: new_key_pair.public().into(), + }; + let encode_data_new_key_data = wrap_binary_data(add_new_key_data.encode()); + + let owner_signature: MultiSignature = + owner_key_pair.sign(&encode_data_new_key_data).into(); + + let public_key_ownership_signature = + new_key_pair.sign(&encode_data_new_key_data).into(); + + assert_ok!(Msa::add_public_key_to_msa( + test_origin_signed(1), + owner_key_pair.public().into(), + owner_signature, + public_key_ownership_signature, + add_new_key_data + )); + } + + // act + let (final_key_pair, _) = sr25519::Pair::generate(); + + let add_new_key_data = AddKeyData { + msa_id: new_msa_id, + expiration: 10, + new_public_key: final_key_pair.public().into(), + }; + let encode_data_new_key_data = wrap_binary_data(add_new_key_data.encode()); + + let owner_signature: MultiSignature = owner_key_pair.sign(&encode_data_new_key_data).into(); + let new_key_signature: MultiSignature = + final_key_pair.sign(&encode_data_new_key_data).into(); + + assert_noop!( + Msa::add_public_key_to_msa( + test_origin_signed(1), + owner_key_pair.public().into(), + owner_signature, + new_key_signature, + add_new_key_data + ), + ArithmeticError::Overflow + ); + }); +} + +#[test] +fn add_key_with_valid_request_should_store_value_and_event() { + new_test_ext().execute_with(|| { + // arrange + let (new_msa_id, owner_key_pair) = create_account(); + let (new_key_pair, _) = sr25519::Pair::generate(); + + let add_new_key_data = AddKeyData { + msa_id: new_msa_id, + expiration: 10, + new_public_key: new_key_pair.public().into(), + }; + let encode_data_new_key_data = wrap_binary_data(add_new_key_data.encode()); + + let owner_signature: MultiSignature = owner_key_pair.sign(&encode_data_new_key_data).into(); + let new_key_signature: MultiSignature = new_key_pair.sign(&encode_data_new_key_data).into(); + + // act + assert_ok!(Msa::add_public_key_to_msa( + test_origin_signed(1), + owner_key_pair.public().into(), + owner_signature, + new_key_signature, + add_new_key_data + )); + + // assert + let keys_count = PublicKeyCountForMsaId::::get(new_msa_id); + assert_eq!(keys_count, 2); + System::assert_last_event( + Event::PublicKeyAdded { msa_id: 1, key: new_key_pair.public().into() }.into(), + ); + }); +} + +/// Assert that when attempting to add a key to an MSA with an expired proof that the key is NOT added. +/// Expected error: ProofHasExpired +#[test] +fn add_key_with_expired_proof_fails() { + new_test_ext().execute_with(|| { + // arrange + let (new_msa_id, owner_key_pair) = create_account(); + let (new_key_pair, _) = sr25519::Pair::generate(); + + // The current block is 1, therefore setting the proof expiration to 1 should cause + // the extrinsic to fail because the proof has expired. + let add_new_key_data = AddKeyData { + msa_id: new_msa_id, + expiration: 1, + new_public_key: new_key_pair.public().into(), + }; + + let encode_data_new_key_data = wrap_binary_data(add_new_key_data.encode()); + + let owner_signature: MultiSignature = owner_key_pair.sign(&encode_data_new_key_data).into(); + let new_key_signature: MultiSignature = new_key_pair.sign(&encode_data_new_key_data).into(); + + assert_noop!( + Msa::add_public_key_to_msa( + test_origin_signed(1), + owner_key_pair.public().into(), + owner_signature, + new_key_signature, + add_new_key_data + ), + Error::::ProofHasExpired + ); + }) +} + +/// Assert that when attempting to add a key to an MSA with a proof expiration too far into the future the key is NOT added. +/// Expected error: ProofNotYetValid +#[test] +fn add_key_with_proof_too_far_into_future_fails() { + new_test_ext().execute_with(|| { + // arrange + let (new_msa_id, owner_key_pair) = create_account(); + let (new_key_pair, _) = sr25519::Pair::generate(); + + // The current block is 1, therefore setting the proof expiration to EXPIRATION_BLOCK_VALIDITY_GAP + 1 + // should cause the extrinsic to fail because the proof is only valid for EXPIRATION_BLOCK_VALIDITY_GAP + // more blocks. + let add_new_key_data = AddKeyData { + msa_id: new_msa_id, + expiration: 202, + new_public_key: new_key_pair.public().into(), + }; + + let encode_data_new_key_data = wrap_binary_data(add_new_key_data.encode()); + + let owner_signature: MultiSignature = owner_key_pair.sign(&encode_data_new_key_data).into(); + let new_key_signature: MultiSignature = new_key_pair.sign(&encode_data_new_key_data).into(); + + assert_noop!( + Msa::add_public_key_to_msa( + test_origin_signed(1), + owner_key_pair.public().into(), + owner_signature, + new_key_signature, + add_new_key_data + ), + Error::::ProofNotYetValid + ); + }) +} + +/// Assert that when a key has been added to an MSA, that it my NOT be added to any other MSA. +/// Expected error: KeyAlreadyRegistered +#[test] +fn double_add_key_two_msa_fails() { + new_test_ext().execute_with(|| { + let (msa_id1, owner_key_pair) = create_account(); + let (_msa_id2, msa_2_owner_key_pair) = create_account(); + + let add_new_key_data = AddKeyData { + msa_id: msa_id1, + expiration: 10, + new_public_key: msa_2_owner_key_pair.public().into(), + }; + let encode_data_new_key_data = wrap_binary_data(add_new_key_data.encode()); + + let owner_signature: MultiSignature = owner_key_pair.sign(&encode_data_new_key_data).into(); + let new_key_signature: MultiSignature = + msa_2_owner_key_pair.sign(&encode_data_new_key_data).into(); + + assert_noop!( + Msa::add_public_key_to_msa( + test_origin_signed(1), + owner_key_pair.public().into(), + owner_signature, + new_key_signature, + add_new_key_data + ), + Error::::KeyAlreadyRegistered + ); + }) +} + +#[test] +fn add_public_key_to_msa_registers_two_signatures() { + new_test_ext().execute_with(|| { + System::set_block_number(1); + let (msa_id1, owner_key_pair) = create_account(); + let (_msa_id2, _msa_2_owner_key_pair) = create_account(); + let (new_key_pair, _) = sr25519::Pair::generate(); + + let add_new_key_data = AddKeyData { + msa_id: msa_id1, + expiration: 10, + new_public_key: new_key_pair.public().into(), + }; + let encode_data_new_key_data = wrap_binary_data(add_new_key_data.encode()); + + let owner_signature: MultiSignature = owner_key_pair.sign(&encode_data_new_key_data).into(); + let new_key_signature: MultiSignature = new_key_pair.sign(&encode_data_new_key_data).into(); + + assert_ok!(Msa::add_public_key_to_msa( + test_origin_signed(1), + owner_key_pair.public().into(), + owner_signature.clone(), + new_key_signature.clone(), + add_new_key_data + )); + + assert_eq!( + PayloadSignatureRegistryList::::get(owner_signature.clone()).unwrap().0, + 10 + ); + assert_eq!( + PayloadSignatureRegistryPointer::::get().unwrap(), + SignatureRegistryPointer { + newest: new_key_signature, + newest_expires_at: 10u32, + oldest: owner_signature, + count: 2, + } + ); + }); +} + +/// Assert that when a key has been deleted from one MSA, that it may be added to a different MSA. +#[test] +fn add_removed_key_to_msa_pass() { + new_test_ext().execute_with(|| { + let (msa_getting_a_second_key, owner_key_pair) = create_account(); + let (msa_used_to_have_a_key, prior_msa_key) = create_account(); + + assert_ok!(Msa::delete_key_for_msa(msa_used_to_have_a_key, &prior_msa_key.public().into())); + + let add_new_key_data = AddKeyData { + msa_id: msa_getting_a_second_key, + expiration: 10, + new_public_key: prior_msa_key.public().into(), + }; + let encode_data_new_key_data = wrap_binary_data(add_new_key_data.encode()); + let owner_signature: MultiSignature = owner_key_pair.sign(&encode_data_new_key_data).into(); + let new_key_signature: MultiSignature = + prior_msa_key.sign(&encode_data_new_key_data).into(); + + assert_ok!(Msa::add_public_key_to_msa( + test_origin_signed(1), + owner_key_pair.public().into(), + owner_signature, + new_key_signature, + add_new_key_data + )); + }); +} + +#[test] +fn it_deletes_msa_key_successfully() { + new_test_ext().execute_with(|| { + assert_ok!(Msa::add_key(2, &test_public(1), EMPTY_FUNCTION)); + assert_ok!(Msa::add_key(2, &test_public(2), EMPTY_FUNCTION)); + + assert_ok!(Msa::delete_msa_public_key(test_origin_signed(1), test_public(2))); + + let info = PublicKeyToMsaId::::get(test_public(2)); + + assert_eq!(info, None); + + System::assert_last_event(Event::PublicKeyDeleted { key: test_public(2) }.into()); + }) +} + +#[test] +pub fn delete_msa_public_key_call_has_correct_costs() { + new_test_ext().execute_with(|| { + let (key_pair, _) = sr25519::Pair::generate(); + let new_key = key_pair.public(); + + let call = MsaCall::::delete_msa_public_key { + public_key_to_delete: AccountId32::from(new_key), + }; + let dispatch_info = call.get_dispatch_info(); + assert_eq!(dispatch_info.pays_fee, Pays::No); + }) +} + +#[test] +pub fn test_delete_key() { + new_test_ext().execute_with(|| { + assert_ok!(Msa::add_key(1, &test_public(1), EMPTY_FUNCTION)); + + let info = PublicKeyToMsaId::::get(test_public(1)); + + assert_eq!(info, Some(1 as MessageSourceId)); + + assert_ok!(Msa::delete_key_for_msa(info.unwrap(), &test_public(1))); + }); +} + +#[test] +pub fn test_delete_key_errors() { + new_test_ext().execute_with(|| { + assert_ok!(Msa::add_key(1, &test_public(1), EMPTY_FUNCTION)); + + assert_ok!(Msa::delete_key_for_msa(1, &test_public(1))); + }); +} diff --git a/pallets/msa/src/tests/replay_tests.rs b/pallets/msa/src/tests/replay_tests.rs new file mode 100644 index 0000000000..30714b5481 --- /dev/null +++ b/pallets/msa/src/tests/replay_tests.rs @@ -0,0 +1,327 @@ +use crate::{tests::mock::*, AddKeyData, AddProvider, Error}; + +use common_primitives::{node::BlockNumber, utils::wrap_binary_data}; +use frame_support::{assert_err, assert_noop, assert_ok}; +use sp_core::{sr25519, Encode, Pair}; +use sp_runtime::MultiSignature; + +fn create_add_provider_payload(signature_expiration: BlockNumber) -> (AddProvider, Vec) { + let add_provider_payload = AddProvider::new(1u64, None, signature_expiration); + let encode_add_provider_data = wrap_binary_data(add_provider_payload.encode()); + (add_provider_payload, encode_add_provider_data) +} + +pub fn user_creates_and_delegates_to_provider( + delegator_keypair: sp_core::sr25519::Pair, + provider_keypair: sp_core::sr25519::Pair, + signature_expiration: BlockNumber, +) -> (MultiSignature, AddProvider) { + let delegator_key = delegator_keypair.public(); + let provider_key = provider_keypair.public(); + + let (payload, encode_add_provider_data) = create_add_provider_payload(signature_expiration); + + let signature: MultiSignature = delegator_keypair.sign(&encode_add_provider_data).into(); + assert_ok!(Msa::create_sponsored_account_with_delegation( + RuntimeOrigin::signed(provider_key.into()), + delegator_key.into(), + signature.clone(), + payload.clone() + )); + (signature.clone(), payload.clone()) +} + +pub fn user_adds_key_to_msa( + delegator_pair: sp_core::sr25519::Pair, + new_pair: sp_core::sr25519::Pair, +) { + let add_key_payload = + AddKeyData { msa_id: 2, expiration: 109, new_public_key: new_pair.public().into() }; + let encode_add_key_data = wrap_binary_data(add_key_payload.encode()); + let msa_owner_signature = delegator_pair.sign(&encode_add_key_data); + let signature_new_key: MultiSignature = new_pair.sign(&encode_add_key_data).into(); + + assert_ok!(Msa::add_public_key_to_msa( + RuntimeOrigin::signed(delegator_pair.public().into()), + delegator_pair.public().into(), + msa_owner_signature.into(), + signature_new_key, + add_key_payload + )); +} + +fn create_user_and_provider() -> (sr25519::Pair, sr25519::Pair) { + let (provider_keypair, _) = sr25519::Pair::generate(); + + let (delegator_keypair, _) = sr25519::Pair::generate(); + + // create MSA for provider and register them + assert_ok!(Msa::create(RuntimeOrigin::signed(provider_keypair.public().into()))); + assert_ok!(Msa::create_provider( + RuntimeOrigin::signed(provider_keypair.public().into()), + Vec::from("Foo") + )); + (delegator_keypair, provider_keypair) +} + +// This scenario must fail: +// 1. User creates MSA and delegates to provider +// 2. User revokes msa delegation +// 3. User adds a key to their msa +// 4. User deletes first key from msa +// 5. Provider successfully calls "create_sponsored_account_with_delegation", OR +// Provider successfully calls "grant_delegation" with same payload and proof/signature, +// using first (deleted) key +#[test] +pub fn replaying_create_sponsored_account_with_delegation_fails() { + new_test_ext().execute_with(|| { + let (delegator_keypair, provider_keypair) = create_user_and_provider(); + let provider_key = provider_keypair.public(); + let delegator_key = delegator_keypair.public(); + + // Step 1 + let (signature, add_provider_payload) = user_creates_and_delegates_to_provider( + delegator_keypair.clone(), + provider_keypair, + 99u32, + ); + run_to_block(25); + + // Step 2 + assert_ok!(Msa::revoke_delegation_by_delegator( + RuntimeOrigin::signed(delegator_key.into()), + 1 + )); + run_to_block(40); + + // Step 3 + let (new_keypair, _) = sr25519::Pair::generate(); + user_adds_key_to_msa(delegator_keypair, new_keypair.clone()); + + assert_ok!(Msa::delete_msa_public_key( + RuntimeOrigin::signed(new_keypair.public().into()), + delegator_key.into(), + )); + run_to_block(75); + + // expect call create with same signature to fail + assert_err!( + Msa::create_sponsored_account_with_delegation( + RuntimeOrigin::signed(provider_key.into()), + delegator_key.into(), + signature.clone(), + add_provider_payload.clone(), + ), + Error::::SignatureAlreadySubmitted + ); + run_to_block(98); + + // expect this to fail for the same reason + assert_err!( + Msa::grant_delegation( + RuntimeOrigin::signed(provider_key.into()), + delegator_key.into(), + signature.clone(), + add_provider_payload.clone(), + ), + Error::::SignatureAlreadySubmitted + ); + }) +} + +// This scenario should fail: +// 1. provider authorizes being added as provider to MSA and MSA account adds them. +// 2. provider removes them as MSA (say by quickly discovering MSA is undesirable) +// 3. MSA account replays the add, using the previous signed payload + signature. +#[test] +fn replaying_grant_delegation_fails() { + new_test_ext().execute_with(|| { + let (delegator_keypair, provider_keypair) = create_user_and_provider(); + let provider_key = provider_keypair.public(); + let delegator_key = delegator_keypair.public(); + + // add_provider_payload in this case has delegator's msa_id as authorized_msa_id + let (add_provider_payload, encode_add_provider_data) = create_add_provider_payload(99u32); + + // DELEGATOR signs to add the provider + let signature: MultiSignature = delegator_keypair.sign(&encode_add_provider_data).into(); + + // create MSA for delegator + assert_ok!(Msa::create(RuntimeOrigin::signed(delegator_key.into()))); + + assert_ok!(Msa::grant_delegation( + RuntimeOrigin::signed(provider_key.into()), + delegator_key.into(), + signature.clone(), + add_provider_payload.clone(), + )); + + // provider revokes the delegation. + assert_ok!(Msa::revoke_delegation_by_provider( + RuntimeOrigin::signed(provider_key.into()), + 2 + )); + System::set_block_number(System::block_number() + 1); + + // Expected to fail because revoking the delegation just expires it at a given block number. + assert_err!( + Msa::grant_delegation( + RuntimeOrigin::signed(provider_key.into()), + delegator_key.into(), + signature.clone(), + add_provider_payload.clone(), + ), + Error::::SignatureAlreadySubmitted + ); + }) +} + +#[test] +pub fn add_signature_replay_boundary_checks() { + struct TestCase { + current: u32, + mortality: u32, + run_to: u32, + } + new_test_ext().execute_with(|| { + // This tests signature replay attacks for mortality window size = 100 and 2 buckets, + // by looking at different boundary cases. It checks that they can't + // be resubmitted at the expiration block. We assume if they cannot be replayed at a + // boundary that they can't be replayed earlier than that boundary, given that we are + // checking explicitly for the error `SignatureAlreadySubmitted`. + let test_cases: Vec = vec![ + // 1-block expiration for bucket 0, mortality crosses no boundary + TestCase { current: 1u32, mortality: 3u32, run_to: 2u32 }, + // expiration for bucket 1, mortality is fast, crosses a 100-block boundary, we check at the boundary. + // at block 100, on_initialize's bucket-clearing has happened by the time register_extrinsic is called, + // so this should make sure that the signature is still there and the wrong bucket was not cleared. + TestCase { current: 99u32, mortality: 101u32, run_to: 100u32 }, + // This does the same as above, only it's a different bucket. + TestCase { current: 11_149u32, mortality: 11_201u32, run_to: 11_200u32 }, + // This sets mortality at a boundary + TestCase { current: 11_149u32, mortality: 11_200u32, run_to: 11_199u32 }, + // This does the same as above, but for a different bucket. + TestCase { current: 11_249u32, mortality: 11_300u32, run_to: 11_299u32 }, + // This case sets current block at a boundary, and sets the mortality to the very last block before the boundary + TestCase { current: 1_100u32, mortality: 1_199u32, run_to: 1_198u32 }, + // This case has current block right before a boundary, and sets expiration to the very last possible block + TestCase { current: 1_699u32, mortality: 1_798u32, run_to: 1_797u32 }, + ]; + for tc in test_cases { + System::set_block_number(tc.current); + let sig1 = &generate_test_signature(); + assert_ok!(Msa::register_signature(sig1, tc.mortality)); + run_to_block(tc.run_to); + assert_noop!( + Msa::register_signature(sig1, tc.mortality), + Error::::SignatureAlreadySubmitted, + ); + run_to_block(tc.mortality); + assert_noop!( + Msa::register_signature(sig1, tc.mortality), + Error::::ProofHasExpired, + ); + } + }); +} + +#[test] +// This scenario must fail: +// 1. User Signed Request to Provider: create_sponsored_account_with_delegation +// 2. User Request Direct to Chain: retire_msa +// 3. The Provider from Step 1 attempts to create a NEW MSA with (key from Step 1) +// 4. Transaction 1-3 all executed before Step 1's payload expireBlock +fn replaying_create_sponsored_account_with_delegation_fails_02() { + new_test_ext().execute_with(|| { + let (delegator_keypair, provider_keypair) = create_user_and_provider(); + let provider_key = provider_keypair.public(); + let delegator_key = delegator_keypair.public(); + + // Step 1 + let (signature, add_provider_payload) = user_creates_and_delegates_to_provider( + delegator_keypair.clone(), + provider_keypair, + 99u32, + ); + run_to_block(2); + + // Step 2 + assert_ok!(Msa::retire_msa(RuntimeOrigin::signed(delegator_key.into()))); + run_to_block(3); + + // Step 3 + assert_noop!( + Msa::create_sponsored_account_with_delegation( + RuntimeOrigin::signed(provider_key.into()), + delegator_key.into(), + signature.clone(), + add_provider_payload.clone() + ), + Error::::SignatureAlreadySubmitted + ); + }); +} + +#[test] +// This scenario must fail: +// 1. User Signed Request to Provider: create_sponsored_account_with_delegation +// 2. User Request Direct to Chain: add_public_key_to_msa +// 3. User Wallet: delete_key_from_msa (using the original delegator key from Step 1) +// 4. The Provider from Step 1 attempts to create a NEW MSA with the original delegator key from Step 1 +// Transaction 1-4 all executed before Step 1's payload expireBlock +fn replaying_create_sponsored_account_with_delegation_fails_03() { + new_test_ext().execute_with(|| { + let (delegator_keypair, provider_keypair) = create_user_and_provider(); + let provider_key = provider_keypair.public(); + let delegator_key = delegator_keypair.public(); + + // Step 1 + let (original_msa_creation_signature, add_provider_payload) = + user_creates_and_delegates_to_provider( + delegator_keypair.clone(), + provider_keypair, + 99u32, + ); + + run_to_block(5); + + let (new_key_pair, _) = sr25519::Pair::generate(); + let new_public_key = new_key_pair.public(); + + let add_new_key_data = + AddKeyData { msa_id: 2, expiration: 10, new_public_key: new_key_pair.public().into() }; + + let encode_add_key_data = wrap_binary_data(add_new_key_data.encode()); + + let msa_owner_signature = delegator_keypair.sign(&encode_add_key_data); + let new_key_owner_signature = new_key_pair.sign(&encode_add_key_data); + + // Step 2. + assert_ok!(Msa::add_public_key_to_msa( + RuntimeOrigin::signed(delegator_key.into()), + delegator_key.into(), + msa_owner_signature.into(), + new_key_owner_signature.into(), + add_new_key_data.clone() + )); + run_to_block(75); + + // Step 3 + assert_ok!(Msa::delete_msa_public_key( + RuntimeOrigin::signed(new_public_key.into()), + delegator_key.into() + )); + run_to_block(98); + + // Step 4 + assert_noop!( + Msa::create_sponsored_account_with_delegation( + RuntimeOrigin::signed(provider_key.into()), + delegator_key.into(), + original_msa_creation_signature.clone(), + add_provider_payload.clone() + ), + Error::::SignatureAlreadySubmitted + ); + }); +} diff --git a/pallets/msa/src/tests/retirement_tests.rs b/pallets/msa/src/tests/retirement_tests.rs new file mode 100644 index 0000000000..bb9b86ef1d --- /dev/null +++ b/pallets/msa/src/tests/retirement_tests.rs @@ -0,0 +1,215 @@ +use frame_support::{assert_err, assert_noop, assert_ok, pallet_prelude::InvalidTransaction}; + +use frame_system::pallet_prelude::BlockNumberFor; +use sp_core::{crypto::AccountId32, sr25519, Encode, Pair}; +use sp_runtime::MultiSignature; + +use crate::{ + tests::mock::*, + types::{AddKeyData, EMPTY_FUNCTION}, + CheckFreeExtrinsicUse, Error, Event, PublicKeyCountForMsaId, ValidityError, +}; + +use crate::tests::other_tests::{ + assert_revoke_delegation_by_delegator_no_effect, set_schema_count, +}; +use common_primitives::{ + handles::ClaimHandlePayload, + msa::{DelegatorId, ProviderId}, + utils::wrap_binary_data, +}; + +#[test] +fn test_retire_msa_success() { + new_test_ext().execute_with(|| { + let (test_account_key_pair, _) = sr25519::Pair::generate(); + + // Create an account + let test_account = AccountId32::new(test_account_key_pair.public().into()); + let origin = RuntimeOrigin::signed(test_account.clone()); + + // Create an MSA so this account has one key associated with it + assert_ok!(Msa::create(origin.clone())); + let msa_id = Msa::get_owner_of(&test_account).unwrap(); + + // Retire the MSA + assert_ok!(Msa::retire_msa(origin)); + + // Check if PublicKeyDeleted event was dispatched. + System::assert_has_event(Event::PublicKeyDeleted { key: test_account.clone() }.into()); + + // Check if MsaRetired event was dispatched. + System::assert_last_event(Event::MsaRetired { msa_id }.into()); + + // Assert that the MSA has no accounts + let key_count = PublicKeyCountForMsaId::::get(msa_id); + assert_eq!(key_count, 0); + + // MSA has been retired, perform additional tests + + // [TEST] Adding an account to the retired MSA should fail + let (key_pair1, _) = sr25519::Pair::generate(); + let new_account1 = key_pair1.public(); + let (msa_id2, _) = create_account(); + + let add_new_key_data = + AddKeyData { msa_id: msa_id2, expiration: 10, new_public_key: new_account1.into() }; + + let encode_data_new_key_data = wrap_binary_data(add_new_key_data.encode()); + let old_msa_owner_signature: MultiSignature = + test_account_key_pair.sign(&encode_data_new_key_data).into(); + let new_key_signature: MultiSignature = key_pair1.sign(&encode_data_new_key_data).into(); + assert_noop!( + Msa::add_public_key_to_msa( + RuntimeOrigin::signed(test_account.clone()), + test_account_key_pair.public().into(), + old_msa_owner_signature.clone(), + new_key_signature, + add_new_key_data + ), + Error::::NoKeyExists + ); + + // [TEST] Adding a provider to the retired MSA should fail + let (provider_key_pair, _) = sr25519::Pair::generate(); + let provider_account = provider_key_pair.public(); + + // Create provider account and get its MSA ID (u64) + assert_ok!(Msa::create(RuntimeOrigin::signed(provider_account.into()))); + let provider_msa_id = + Msa::ensure_valid_msa_key(&AccountId32::new(provider_account.0)).unwrap(); + + assert_ok!(Msa::create_provider( + RuntimeOrigin::signed(provider_account.into()), + Vec::from("Foo") + )); + + let (delegator_signature, add_provider_payload) = + create_and_sign_add_provider_payload(test_account_key_pair, provider_msa_id); + + assert_noop!( + Msa::grant_delegation( + RuntimeOrigin::signed(provider_account.into()), + test_account.clone(), + delegator_signature, + add_provider_payload + ), + Error::::NoKeyExists + ); + + // [TEST] Revoking a delegation (modifying permissions) should not do anything + assert_revoke_delegation_by_delegator_no_effect(test_account, provider_msa_id) + }) +} + +#[test] +fn test_retire_msa_does_nothing_when_no_msa() { + new_test_ext().execute_with(|| { + let (test_pair, _) = sr25519::Pair::generate(); + let first_account_key = test_pair.public(); + let origin = RuntimeOrigin::signed(first_account_key.into()); + + // 1. when there's no MSA at all + let event_count = System::event_count(); + assert_ok!(Msa::retire_msa(origin.clone())); + assert_eq!(event_count, System::event_count()); + }); +} + +#[test] +fn test_ensure_msa_can_retire_fails_if_registered_provider() { + new_test_ext().execute_with(|| { + // Create an account + let (test_account_key_pair, _) = sr25519::Pair::generate(); + let test_account = AccountId32::new(test_account_key_pair.public().into()); + let origin = RuntimeOrigin::signed(test_account.clone()); + + // Add an account to the MSA + assert_ok!(Msa::add_key(2, &test_account, EMPTY_FUNCTION)); + + // Register provider + assert_ok!(Msa::create_provider(origin, Vec::from("Foo"))); + + // Retire MSA + assert_noop!( + CheckFreeExtrinsicUse::::ensure_msa_can_retire(&test_account), + InvalidTransaction::Custom( + ValidityError::InvalidRegisteredProviderCannotBeRetired as u8 + ) + ); + }) +} + +#[test] +fn test_ensure_msa_can_retire_fails_if_more_than_one_account_exists() { + new_test_ext().execute_with(|| { + let msa_id = 2; + let (test_account_1_key_pair, _) = sr25519::Pair::generate(); + let (test_account_2_key_pair, _) = sr25519::Pair::generate(); + + // Create accounts + let test_account_1 = AccountId32::new(test_account_1_key_pair.public().into()); + let test_account_2 = AccountId32::new(test_account_2_key_pair.public().into()); + + // Add two accounts to the MSA + assert_ok!(Msa::add_key(msa_id, &test_account_1, EMPTY_FUNCTION)); + assert_ok!(Msa::add_key(msa_id, &test_account_2, EMPTY_FUNCTION)); + + // Retire the MSA + assert_noop!( + CheckFreeExtrinsicUse::::ensure_msa_can_retire(&test_account_1), + InvalidTransaction::Custom(ValidityError::InvalidMoreThanOneKeyExists as u8) + ); + }) +} + +#[test] +fn test_ensure_msa_can_retire_fails_if_any_active_delegations_exist() { + new_test_ext().execute_with(|| { + // Create delegator + let msa_id = 2; + let (test_account_key_pair, _) = sr25519::Pair::generate(); + let test_account = AccountId32::new(test_account_key_pair.public().into()); + assert_ok!(Msa::add_key(msa_id, &test_account, EMPTY_FUNCTION)); + + // Create provider + let (provider_id, _provider_key) = create_provider_with_name("test"); + let schema_ids = vec![1]; + set_schema_count::(1); + assert_ok!(Msa::add_provider(ProviderId(provider_id), DelegatorId(msa_id), schema_ids)); + + // Retire the MSA + assert_err!( + CheckFreeExtrinsicUse::::ensure_msa_can_retire(&test_account), + InvalidTransaction::Custom(ValidityError::InvalidNonZeroProviderDelegations as u8) + ); + }) +} + +#[test] +fn test_ensure_msa_cannot_retire_if_handle_exists() { + new_test_ext().execute_with(|| { + let msa_id = 1; + let (test_account_1_key_pair, _) = sr25519::Pair::generate(); + + // Create accounts + let test_account_1 = AccountId32::new(test_account_1_key_pair.public().into()); + + // Add two accounts to the MSA + assert_ok!(Msa::add_key(msa_id, &test_account_1, EMPTY_FUNCTION)); + + let claim_payload = ClaimHandlePayload::> { + base_handle: "hello".into(), + expiration: 2, + }; + + assert_ok!(pallet_handles::Pallet::::do_claim_handle(msa_id, claim_payload)); + + // Assumption: handle exists + // Retire the MSA + assert_noop!( + CheckFreeExtrinsicUse::::ensure_msa_can_retire(&test_account_1), + InvalidTransaction::Custom(ValidityError::HandleNotRetired as u8) + ); + }) +} diff --git a/pallets/msa/src/tests/schema_permission_tests.rs b/pallets/msa/src/tests/schema_permission_tests.rs new file mode 100644 index 0000000000..9e9f247381 --- /dev/null +++ b/pallets/msa/src/tests/schema_permission_tests.rs @@ -0,0 +1,410 @@ +use frame_support::{assert_err, assert_noop, assert_ok, BoundedBTreeMap}; +use frame_system::pallet_prelude::BlockNumberFor; + +use crate::{ + tests::{mock::*, other_tests::set_schema_count}, + types::PermittedDelegationSchemas, + Config, DelegatorAndProviderToDelegation, Error, +}; + +use common_primitives::{ + msa::{Delegation, DelegatorId, ProviderId, SchemaGrantValidator}, + schema::SchemaId, +}; + +#[test] +fn grant_permissions_for_schemas_errors_when_no_delegation() { + new_test_ext().execute_with(|| { + let delegator = DelegatorId(2); + let provider = ProviderId(1); + let schema_ids = vec![1, 2]; + let result = Msa::grant_permissions_for_schemas(delegator, provider, schema_ids); + + assert_noop!(result, Error::::DelegationNotFound); + }); +} + +#[test] +fn grant_permissions_for_schemas_errors_when_invalid_schema_id() { + new_test_ext().execute_with(|| { + set_schema_count::(1); + let delegator = DelegatorId(2); + let provider = ProviderId(1); + let schema_grants = vec![1]; + + assert_ok!(Msa::add_provider(provider, delegator, schema_grants)); + + let additional_grants = vec![2]; + let result = Msa::grant_permissions_for_schemas(delegator, provider, additional_grants); + + assert_noop!(result, Error::::InvalidSchemaId); + }); +} + +#[test] +fn grant_permissions_for_schemas_errors_when_exceeds_max_schema_grants() { + new_test_ext().execute_with(|| { + set_schema_count::(31); + + let delegator = DelegatorId(2); + let provider = ProviderId(1); + let schema_grants = vec![1]; + + assert_ok!(Msa::add_provider(provider, delegator, schema_grants)); + + let additional_grants = (2..32_u16).collect::>(); + let result = Msa::grant_permissions_for_schemas(delegator, provider, additional_grants); + + assert_noop!(result, Error::::ExceedsMaxSchemaGrantsPerDelegation); + }); +} + +#[test] +fn grant_permissions_for_schema_success() { + new_test_ext().execute_with(|| { + set_schema_count::(3); + + let delegator = DelegatorId(2); + let provider = ProviderId(1); + let schema_grants = vec![1]; + + assert_ok!(Msa::add_provider(provider, delegator, schema_grants)); + + let delegation_relationship = + DelegatorAndProviderToDelegation::::get(delegator, provider).unwrap(); + let mut expected = BoundedBTreeMap::< + SchemaId, + BlockNumberFor, + ::MaxSchemaGrantsPerDelegation, + >::new(); + + expected.try_insert(1, Default::default()).expect("testing expected"); + + assert_eq!(delegation_relationship.schema_permissions, expected); + + // Add new schema ids + let additional_grants = vec![2]; + let result = Msa::grant_permissions_for_schemas(delegator, provider, additional_grants); + + assert_ok!(result); + + let delegation_relationship = + DelegatorAndProviderToDelegation::::get(delegator, provider).unwrap(); + let mut expected = BoundedBTreeMap::< + SchemaId, + BlockNumberFor, + ::MaxSchemaGrantsPerDelegation, + >::new(); + + expected.try_insert(1, Default::default()).expect("testing expected"); + expected.try_insert(2, Default::default()).expect("testing expected"); + + assert_eq!(delegation_relationship.schema_permissions, expected); + }); +} + +#[test] +fn schema_permissions_trait_impl_try_insert_schema_success() { + new_test_ext().execute_with(|| { + let mut delegation: Delegation< + SchemaId, + BlockNumberFor, + ::MaxSchemaGrantsPerDelegation, + > = Default::default(); + + let schema_id = 1; + assert_ok!(PermittedDelegationSchemas::::try_insert_schema( + &mut delegation, + schema_id + )); + assert_eq!(delegation.schema_permissions.len(), 1); + }); +} + +#[test] +fn schema_permissions_trait_impl_try_insert_schemas_errors_when_exceeds_max_schema_grants() { + new_test_ext().execute_with(|| { + let mut delegation: Delegation< + SchemaId, + BlockNumberFor, + ::MaxSchemaGrantsPerDelegation, + > = Default::default(); + + let schema_ids = (1..32).collect::>(); + assert_noop!( + PermittedDelegationSchemas::::try_insert_schemas(&mut delegation, schema_ids), + Error::::ExceedsMaxSchemaGrantsPerDelegation + ); + }); +} + +#[test] +fn revoke_permissions_for_schema_success() { + new_test_ext().execute_with(|| { + set_schema_count::(3); + + let delegator = DelegatorId(2); + let provider = ProviderId(1); + let schema_grants = vec![1]; + + assert_ok!(Msa::add_provider(provider, delegator, schema_grants)); + + let delegation_relationship = + DelegatorAndProviderToDelegation::::get(delegator, provider).unwrap(); + let mut expected = BoundedBTreeMap::< + SchemaId, + BlockNumberFor, + ::MaxSchemaGrantsPerDelegation, + >::new(); + + expected.try_insert(1, Default::default()).expect("testing expected"); + + assert_eq!(delegation_relationship.schema_permissions, expected); + + // Revoke schema ids + let schemas_to_be_revoked = vec![1]; + let result = + Msa::revoke_permissions_for_schemas(delegator, provider, schemas_to_be_revoked); + + assert_ok!(result); + + let delegation_relationship = + DelegatorAndProviderToDelegation::::get(delegator, provider).unwrap(); + let mut expected = BoundedBTreeMap::< + SchemaId, + BlockNumberFor, + ::MaxSchemaGrantsPerDelegation, + >::new(); + + expected.try_insert(1, 1u32).expect("testing expected"); + + assert_eq!(delegation_relationship.schema_permissions, expected); + }); +} + +#[test] +fn revoke_permissions_for_schemas_errors_when_no_delegation() { + new_test_ext().execute_with(|| { + let delegator = DelegatorId(2); + let provider = ProviderId(1); + let schema_ids = vec![1, 2]; + let result = Msa::revoke_permissions_for_schemas(delegator, provider, schema_ids); + + assert_noop!(result, Error::::DelegationNotFound); + }); +} + +#[test] +fn revoke_permissions_for_schemas_errors_when_schema_does_not_exist_in_list_of_schema_grants() { + new_test_ext().execute_with(|| { + set_schema_count::(31); + + let delegator = DelegatorId(2); + let provider = ProviderId(1); + let schema_grants = vec![1, 2]; + + assert_ok!(Msa::add_provider(provider, delegator, schema_grants)); + + let additional_grants = (3..32_u16).collect::>(); + let result = Msa::revoke_permissions_for_schemas(delegator, provider, additional_grants); + + assert_noop!(result, Error::::SchemaNotGranted); + + let result = DelegatorAndProviderToDelegation::::get(delegator, provider); + + let mut expected = Delegation { + revoked_at: 0u32, + schema_permissions: BoundedBTreeMap::< + SchemaId, + BlockNumberFor, + ::MaxSchemaGrantsPerDelegation, + >::new(), + }; + + expected.schema_permissions.try_insert(1, 0u32).expect("testing expected"); + + expected.schema_permissions.try_insert(2, 0u32).expect("testing expected"); + + assert_eq!(result.unwrap(), expected); + }); +} + +#[test] +fn schema_permissions_trait_impl_try_get_mut_schema_success() { + new_test_ext().execute_with(|| { + let mut delegation: Delegation< + SchemaId, + BlockNumberFor, + ::MaxSchemaGrantsPerDelegation, + > = Default::default(); + + let schema_id = 1; + assert_ok!(PermittedDelegationSchemas::::try_insert_schema( + &mut delegation, + schema_id + )); + let default_block_number = 0u32; + + assert_eq!(delegation.schema_permissions.len(), 1); + assert_eq!(delegation.schema_permissions.get(&schema_id).unwrap(), &default_block_number); + + let revoked_block_number = 2u32; + + assert_ok!(PermittedDelegationSchemas::::try_get_mut_schema( + &mut delegation, + schema_id, + revoked_block_number + )); + + assert_eq!(delegation.schema_permissions.get(&schema_id).unwrap(), &revoked_block_number); + }); +} + +#[test] +pub fn ensure_valid_schema_grant_success() { + new_test_ext().execute_with(|| { + set_schema_count::(2); + + let provider = ProviderId(1); + let delegator = DelegatorId(2); + let schema_grants = vec![1, 2]; + assert_ok!(Msa::add_provider(provider, delegator, schema_grants)); + + System::set_block_number(System::block_number() + 1); + + assert_ok!(Msa::ensure_valid_schema_grant(provider, delegator, 1_u16, 1u32)); + }) +} + +#[test] +pub fn ensure_valid_schema_grant_errors_when_delegation_relationship_is_valid_and_grant_does_not_exist( +) { + new_test_ext().execute_with(|| { + set_schema_count::(2); + + let provider = ProviderId(1); + let delegator = DelegatorId(2); + let schema_grants = vec![1, 2]; + + // Add delegation relationship with schema grants. + assert_ok!(Msa::add_provider(provider, delegator, schema_grants)); + + // Set block number to 2. + System::set_block_number(System::block_number() + 1); + + assert_err!( + Msa::ensure_valid_schema_grant(provider, delegator, 3_u16, 1u32), + Error::::SchemaNotGranted + ); + }) +} + +#[test] +pub fn ensure_valid_schema_grant_errors_when_delegation_relationship_is_valid_and_schema_grant_is_revoked( +) { + new_test_ext().execute_with(|| { + set_schema_count::(2); + + // Create delegation relationship. + let provider = ProviderId(1); + let delegator = DelegatorId(2); + let schema_grants = vec![1, 2]; + assert_ok!(Msa::add_provider(provider, delegator, schema_grants)); + + // Set block number to 6. + System::set_block_number(System::block_number() + 5); + + // revoke schema permission at block 6. + assert_ok!(Msa::revoke_permissions_for_schemas(delegator, provider, vec![1])); + + // Schemas is valid for the current block that is revoked 6 + assert_ok!(Msa::ensure_valid_schema_grant(provider, delegator, 1, 6)); + + // Checking that asking for validity past the current block, 6, errors. + assert_noop!( + Msa::ensure_valid_schema_grant(provider, delegator, 1, 7), + Error::::CannotPredictValidityPastCurrentBlock + ); + + // Set block number to 6. + System::set_block_number(System::block_number() + 5); + assert_eq!(System::block_number(), 11); + + assert_noop!( + Msa::ensure_valid_schema_grant(provider, delegator, 1, 7), + Error::::SchemaNotGranted + ); + }); +} + +#[test] +pub fn ensure_valid_schema_grant_errors_delegation_revoked_when_delegation_relationship_has_been_revoked( +) { + new_test_ext().execute_with(|| { + // Set the schemas counts so that it passes validation. + set_schema_count::(2); + + // Create delegation relationship. + let provider = ProviderId(1); + let delegator = DelegatorId(2); + let schema_grants = vec![1, 2]; + + // Create delegation relationship. + assert_ok!(Msa::add_provider(provider, delegator, schema_grants)); + + // Move forward to block 6. + System::set_block_number(System::block_number() + 5); + + // Revoke delegation relationship at block 6. + assert_ok!(Msa::revoke_provider(provider, delegator)); + + // Schemas is valid for the current block that is revoked 6. + assert_ok!(Msa::ensure_valid_schema_grant(provider, delegator, 1, 6)); + assert_ok!(Msa::ensure_valid_schema_grant(provider, delegator, 1, 5)); + + // Checking that asking for validity past the current block, 6, errors. + assert_noop!( + Msa::ensure_valid_schema_grant(provider, delegator, 1, 8), + Error::::CannotPredictValidityPastCurrentBlock + ); + + // Move forward to block 11. + System::set_block_number(System::block_number() + 5); + + // Check that schema is not valid after delegation revocation + assert_noop!( + Msa::ensure_valid_schema_grant(provider, delegator, 1, 7), + Error::::DelegationRevoked + ); + }); +} + +#[test] +pub fn ensure_delegation_revocation_reflects_in_schema_permissions() { + new_test_ext().execute_with(|| { + // Set the schemas counts so that it passes validation. + set_schema_count::(2); + + // Create delegation relationship. + let provider = ProviderId(1); + let delegator = DelegatorId(2); + let schema_grants = vec![1, 2]; + + // Create delegation relationship. + assert_ok!(Msa::add_provider(provider, delegator, schema_grants)); + + // Move forward to block 6. + System::set_block_number(System::block_number() + 5); + + // Revoke delegation relationship at block 6. + assert_ok!(Msa::revoke_provider(provider, delegator)); + + let grants_result = Msa::get_granted_schemas_by_msa_id(delegator, Some(provider)); + assert!(grants_result.is_ok()); + let grants_option = grants_result.unwrap(); + assert!(grants_option.len() == 1); + let grants = grants_option.into_iter().next().unwrap(); + assert!(grants.permissions[0].revoked_at == 6); + assert!(grants.permissions[1].revoked_at == 6); + }); +} diff --git a/pallets/msa/src/tests/signature_registry_tests.rs b/pallets/msa/src/tests/signature_registry_tests.rs new file mode 100644 index 0000000000..0f16939d47 --- /dev/null +++ b/pallets/msa/src/tests/signature_registry_tests.rs @@ -0,0 +1,245 @@ +use crate::{ + tests::mock::*, types::AddKeyData, Config, Error, PayloadSignatureRegistryPointer, + SignatureRegistryPointer, +}; + +use frame_support::{assert_noop, assert_ok}; + +use common_primitives::{node::BlockNumber, utils::wrap_binary_data}; + +use sp_core::{sr25519, Encode, Pair}; +use sp_runtime::{BuildStorage, MultiSignature}; + +pub fn new_test_ext() -> sp_io::TestExternalities { + set_max_signature_stored(20); + set_max_public_keys_per_msa(10); + + let t = frame_system::GenesisConfig::::default().build_storage().unwrap(); + let mut ext = sp_io::TestExternalities::new(t); + ext.execute_with(|| System::set_block_number(1)); + ext +} + +#[test] +pub fn cannot_register_too_many_signatures() { + new_test_ext().execute_with(|| { + System::set_block_number(1); + let mortality_block: BlockNumber = 3; + + let limit: u32 = ::MaxSignaturesStored::get().unwrap_or(0); + for _i in 0..limit { + let sig = &generate_test_signature(); + assert_ok!(Msa::register_signature(sig, mortality_block)); + } + + let sig1 = &generate_test_signature(); + assert_noop!( + Msa::register_signature(sig1, mortality_block), + Error::::SignatureRegistryLimitExceeded + ); + }) +} + +#[test] +pub fn stores_signature_and_increments_count() { + new_test_ext().execute_with(|| { + System::set_block_number(1); + let mortality_block: BlockNumber = 51; + let signature = generate_test_signature(); + assert_ok!(Msa::register_signature(&signature, mortality_block)); + + assert_eq!( + Some(SignatureRegistryPointer { + newest: signature.clone(), + newest_expires_at: mortality_block, + oldest: signature.clone(), + count: 1, + }), + >::get() + ); + + let oldest: MultiSignature = signature.clone(); + + // Expect that the newest changes + let signature_1 = generate_test_signature(); + assert_ok!(Msa::register_signature(&signature_1, mortality_block)); + + assert_eq!( + Some(SignatureRegistryPointer { + newest: signature_1.clone(), + newest_expires_at: mortality_block, + oldest: signature.clone(), + count: 2, + }), + >::get() + ); + + let mut newest: MultiSignature = signature_1.clone(); + + // Fill up the registry + let limit: u32 = ::MaxSignaturesStored::get().unwrap_or(0); + for _i in 2..limit { + let sig = &generate_test_signature(); + assert_ok!(Msa::register_signature(sig, mortality_block)); + newest = sig.clone(); + } + + assert_eq!( + Some(SignatureRegistryPointer { + newest: newest.clone(), + newest_expires_at: mortality_block, + oldest: oldest.clone(), + count: limit + }), + >::get() + ); + + run_to_block(mortality_block + 1); + + // Test that the next one changes the oldest signature. + let signature_n = generate_test_signature(); + assert_ok!(Msa::register_signature(&signature_n, mortality_block + 10)); + + assert_eq!( + Some(SignatureRegistryPointer { + newest: signature_n.clone(), + newest_expires_at: (mortality_block + 10), + oldest: signature_1.clone(), + count: limit, + }), + >::get() + ); + }) +} + +#[test] +pub fn clears_stale_signatures_after_mortality_limit() { + new_test_ext().execute_with(|| { + System::set_block_number(1); + let mortality_block: BlockNumber = 3; + + let limit: u32 = ::MaxSignaturesStored::get().unwrap_or(0); + for _i in 0..limit { + let sig = &generate_test_signature(); + assert_ok!(Msa::register_signature(sig, mortality_block)); + } + + run_to_block(mortality_block); + + // Cannot do it yet as we are at the mortality_block + + let sig1 = &generate_test_signature(); + assert_noop!( + Msa::register_signature(sig1, mortality_block + 10), + Error::::SignatureRegistryLimitExceeded + ); + + run_to_block(mortality_block + 1); + + // Now it is OK as we are +1 past the mortality_block + assert_ok!(Msa::register_signature(sig1, mortality_block + 10)); + }) +} + +#[test] +pub fn cannot_register_signature_with_mortality_out_of_bounds() { + new_test_ext().execute_with(|| { + System::set_block_number(11_122); + let mut mortality_block: BlockNumber = 11_323; + + let sig1 = &generate_test_signature(); + assert_noop!( + Msa::register_signature(sig1, mortality_block), + Error::::ProofNotYetValid + ); + + mortality_block = 11_122; + assert_noop!( + Msa::register_signature(sig1, mortality_block), + Error::::ProofHasExpired + ); + }) +} + +struct TestCase { + current: u32, + mortality: u32, + run_to: u32, + expected_ok: bool, +} + +#[test] +pub fn add_msa_key_replay_fails() { + new_test_ext().execute_with(|| { + // these should all fail replay + let test_cases: Vec = vec![ + TestCase { + current: 10_949u32, + mortality: 11_001u32, + run_to: 10_848u32, + expected_ok: true, + }, + TestCase { current: 1u32, mortality: 3u32, run_to: 5u32, expected_ok: false }, + TestCase { current: 99u32, mortality: 101u32, run_to: 100u32, expected_ok: true }, + TestCase { + current: 1_100u32, + mortality: 1_199u32, + run_to: 1_198u32, + expected_ok: true, + }, + TestCase { + current: 1_102u32, + mortality: 1_201u32, + run_to: 1_200u32, + expected_ok: true, + }, + TestCase { + current: 1_099u32, + mortality: 1_148u32, + run_to: 1_101u32, + expected_ok: true, + }, + TestCase { + current: 1_000_000u32, + mortality: 1_000_000u32, + run_to: 1_000_000u32, + expected_ok: false, + }, + ]; + + let (new_msa_id, key_pair_provider) = create_account(); + let account_provider = key_pair_provider.public(); + for tc in test_cases { + System::set_block_number(tc.current); + + let (new_key_pair, _) = sr25519::Pair::generate(); + + let add_new_key_data = AddKeyData { + msa_id: new_msa_id, + expiration: tc.mortality, + new_public_key: new_key_pair.public().into(), + }; + + let encode_data_new_key_data = wrap_binary_data(add_new_key_data.encode()); + + let signature_owner: MultiSignature = + key_pair_provider.sign(&encode_data_new_key_data).into(); + + let signature_new_key: MultiSignature = + new_key_pair.sign(&encode_data_new_key_data).into(); + + run_to_block(tc.run_to); + + let add_key_response: bool = Msa::add_public_key_to_msa( + RuntimeOrigin::signed(account_provider.into()), + account_provider.into(), + signature_owner.clone(), + signature_new_key, + add_new_key_data.clone(), + ) + .is_ok(); + + assert_eq!(add_key_response, tc.expected_ok); + } + }) +} diff --git a/pallets/msa/src/tests/signed_extension_tests.rs b/pallets/msa/src/tests/signed_extension_tests.rs new file mode 100644 index 0000000000..7e65ddcbf7 --- /dev/null +++ b/pallets/msa/src/tests/signed_extension_tests.rs @@ -0,0 +1,450 @@ +use crate::{tests::mock::*, types::EMPTY_FUNCTION, CheckFreeExtrinsicUse, ValidityError}; +use common_runtime::extensions::check_nonce::CheckNonce; +use frame_support::{ + assert_err, assert_ok, + dispatch::{DispatchInfo, GetDispatchInfo}, + pallet_prelude::InvalidTransaction, +}; +use sp_core::{crypto::AccountId32, sr25519, sr25519::Public, Pair}; +#[allow(deprecated)] +use sp_runtime::{traits::SignedExtension, transaction_validity::TransactionValidity}; + +// Assert that CheckFreeExtrinsicUse::validate fails with `expected_err_enum`, +// for the "delete_msa_public_key" call, given extrinsic caller = caller_key, +// when attempting to delete `public_key_to_delete` +#[allow(deprecated)] +fn assert_validate_key_delete_fails( + caller_key: &AccountId32, + public_key_to_delete: AccountId32, + expected_err_enum: ValidityError, +) { + let call_delete_msa_public_key: &::RuntimeCall = + &RuntimeCall::Msa(MsaCall::delete_msa_public_key { public_key_to_delete }); + + let expected_err: TransactionValidity = + InvalidTransaction::Custom(expected_err_enum as u8).into(); + + assert_eq!( + CheckFreeExtrinsicUse::::new().validate( + caller_key, + call_delete_msa_public_key, + &DispatchInfo::default(), + 0_usize, + ), + expected_err + ); +} + +#[allow(deprecated)] +fn assert_revoke_delegation_by_provider_err( + expected_err: InvalidTransaction, + provider_account: Public, + delegator_msa_id: u64, +) { + let call_revoke_delegation: &::RuntimeCall = + &RuntimeCall::Msa(MsaCall::revoke_delegation_by_provider { delegator: delegator_msa_id }); + let info = DispatchInfo::default(); + let len = 0_usize; + let result = CheckFreeExtrinsicUse::::new().validate( + &provider_account.into(), + call_revoke_delegation, + &info, + len, + ); + assert_err!(result, expected_err); +} + +/// Assert that revoking an MSA delegation passes the signed extension CheckFreeExtrinsicUse +/// validation when a valid delegation exists. +#[test] +#[allow(deprecated)] +fn signed_extension_revoke_delegation_by_delegator_success() { + new_test_ext().execute_with(|| { + let (provider_msa_id, delegator_account) = create_provider_msa_and_delegator(); + let call_revoke_delegation: &::RuntimeCall = + &RuntimeCall::Msa(MsaCall::revoke_delegation_by_delegator { provider_msa_id }); + let info = DispatchInfo::default(); + let len = 0_usize; + let result = CheckFreeExtrinsicUse::::new().validate( + &delegator_account.into(), + call_revoke_delegation, + &info, + len, + ); + assert_ok!(result); + }); +} + +/// Assert that revoking an MSA delegation fails the signed extension CheckFreeExtrinsicUse +/// validation when no valid delegation exists. +#[test] +#[allow(deprecated)] +fn signed_extension_fails_when_revoke_delegation_by_delegator_called_twice() { + new_test_ext().execute_with(|| { + let (provider_msa_id, delegator_account) = create_provider_msa_and_delegator(); + let call_revoke_delegation: &::RuntimeCall = + &RuntimeCall::Msa(MsaCall::revoke_delegation_by_delegator { provider_msa_id }); + let info = DispatchInfo::default(); + let len = 0_usize; + let result = CheckFreeExtrinsicUse::::new().validate( + &delegator_account.into(), + call_revoke_delegation, + &info, + len, + ); + assert_ok!(result); + assert_ok!(Msa::revoke_delegation_by_delegator( + RuntimeOrigin::signed(delegator_account.into()), + provider_msa_id + )); + + System::set_block_number(System::block_number() + 1); + let call_revoke_delegation: &::RuntimeCall = + &RuntimeCall::Msa(MsaCall::revoke_delegation_by_delegator { provider_msa_id }); + let info = DispatchInfo::default(); + let len = 0_usize; + let result_revoked = CheckFreeExtrinsicUse::::new().validate( + &delegator_account.into(), + call_revoke_delegation, + &info, + len, + ); + assert!(result_revoked.is_err()); + }); +} + +#[test] +#[allow(deprecated)] +fn signed_extension_revoke_delegation_by_provider_success() { + new_test_ext().execute_with(|| { + let (delegator_msa_id, provider_account) = create_delegator_msa_and_provider(); + let call_revoke_delegation: &::RuntimeCall = + &RuntimeCall::Msa(MsaCall::revoke_delegation_by_provider { + delegator: delegator_msa_id, + }); + let info = DispatchInfo::default(); + let len = 0_usize; + let result = CheckFreeExtrinsicUse::::new().validate( + &provider_account.into(), + call_revoke_delegation, + &info, + len, + ); + assert_ok!(result); + }) +} + +#[test] +#[allow(deprecated)] +fn signed_extension_revoke_delegation_by_provider_fails_when_no_delegator_msa() { + new_test_ext().execute_with(|| { + let (_, provider_pair) = create_account(); + let provider_account = provider_pair.public(); + + let delegator_msa_id = 33u64; + let expected_err = InvalidTransaction::Custom(ValidityError::InvalidDelegation as u8); + assert_revoke_delegation_by_provider_err(expected_err, provider_account, delegator_msa_id); + }) +} + +#[test] +#[allow(deprecated)] +fn signed_extension_revoke_delegation_by_provider_fails_when_no_provider_msa() { + new_test_ext().execute_with(|| { + let (provider_pair, _) = sr25519::Pair::generate(); + let provider_account = provider_pair.public(); + + let (delegator_msa, _) = create_account(); + + let expected_err = InvalidTransaction::Custom(ValidityError::InvalidMsaKey as u8); + assert_revoke_delegation_by_provider_err(expected_err, provider_account, delegator_msa); + }); +} + +#[test] +#[allow(deprecated)] +fn signed_extension_revoke_delegation_by_provider_fails_when_no_delegation() { + new_test_ext().execute_with(|| { + let (_, provider_pair) = create_account(); + let provider_account = provider_pair.public(); + let (delegator_msa, _) = create_account(); + + let expected_err = InvalidTransaction::Custom(ValidityError::InvalidDelegation as u8); + assert_revoke_delegation_by_provider_err(expected_err, provider_account, delegator_msa); + }) +} + +/// Assert that a call that is not one of the matches passes the signed extension +/// CheckFreeExtrinsicUse validation. +#[test] +#[allow(deprecated)] +fn signed_extension_validation_valid_for_other_extrinsics() { + let random_call_should_pass: &::RuntimeCall = + &RuntimeCall::Msa(MsaCall::create {}); + let info = DispatchInfo::default(); + let len = 0_usize; + let result = CheckFreeExtrinsicUse::::new().validate( + &test_public(1), + random_call_should_pass, + &info, + len, + ); + assert_ok!(result); +} + +// Assert that check nonce validation does not create a token account for delete_msa_public_key call. +#[test] +#[allow(deprecated)] +fn signed_ext_check_nonce_delete_msa_public_key() { + new_test_ext().execute_with(|| { + // Generate a key pair for MSA account + let (msa_key_pair, _) = sr25519::Pair::generate(); + let msa_new_key = msa_key_pair.public(); + + let len = 0_usize; + + // Test the delete_msa_public_key() call + let call_delete_msa_public_key: &::RuntimeCall = + &RuntimeCall::Msa(MsaCall::delete_msa_public_key { + public_key_to_delete: AccountId32::from(msa_new_key), + }); + let info = call_delete_msa_public_key.get_dispatch_info(); + + // Call delete_msa_public_key() using the Alice account + let who = test_public(1); + assert_ok!(CheckNonce::(0).pre_dispatch( + &who, + call_delete_msa_public_key, + &info, + len + )); + + // Did the call create a token account? + let created_token_account: bool; + match frame_system::Account::::try_get(who) { + Ok(_) => { + created_token_account = true; + }, + Err(_) => { + created_token_account = false; + }, + }; + + // Assert that the call did not create a token account + assert!(!created_token_account); + }) +} + +// Assert that check nonce validation does not create a token account for revoke_delegation_by_delegator call. +#[test] +#[allow(deprecated)] +fn signed_ext_check_nonce_revoke_delegation_by_delegator() { + new_test_ext().execute_with(|| { + let (provider_msa_id, _) = create_provider_msa_and_delegator(); + + // We are testing the revoke_delegation_by_delegator() call. + let call_revoke_delegation_by_delegator: &::RuntimeCall = + &RuntimeCall::Msa(MsaCall::revoke_delegation_by_delegator { provider_msa_id }); + + let len = 0_usize; + + // Get the dispatch info for the call. + let info = call_revoke_delegation_by_delegator.get_dispatch_info(); + + // Call revoke_delegation_by_delegator() using the Alice account + let who = test_public(1); + assert_ok!(CheckNonce::(0).pre_dispatch( + &who, + call_revoke_delegation_by_delegator, + &info, + len + )); + + // Did the call create a token account? + let created_token_account: bool; + match frame_system::Account::::try_get(who) { + Ok(_) => { + created_token_account = true; + }, + Err(_) => { + created_token_account = false; + }, + }; + + // Assert that the call did not create a token account + assert!(!created_token_account); + }) +} + +// Assert that check nonce validation does create a token account for a paying call. +#[test] +#[allow(deprecated)] +fn signed_ext_check_nonce_creates_token_account_if_paying() { + new_test_ext().execute_with(|| { + // Test that a "pays" extrinsic creates a token account + let who = test_public(1); + let len = 0_usize; + let pays_call_should_pass: &::RuntimeCall = + &RuntimeCall::Msa(MsaCall::create {}); + + // Get the dispatch info for the create() call. + let pays_call_should_pass_info = pays_call_should_pass.get_dispatch_info(); + + // Call create() using the Alice account + assert_ok!(CheckNonce::(0).pre_dispatch( + &who, + pays_call_should_pass, + &pays_call_should_pass_info, + len + )); + + // Did the call create a token account? + let created_token_account: bool; + match frame_system::Account::::try_get(who) { + Ok(_) => { + created_token_account = true; + }, + Err(_) => { + created_token_account = false; + }, + }; + // Assert that the call created a token account + assert!(created_token_account); + }) +} + +#[test] +#[allow(deprecated)] +fn signed_ext_check_nonce_increases_nonce_for_an_existing_account_for_free_transactions() { + new_test_ext().execute_with(|| { + // arrange + let who = test_public(1); + let len = 0_usize; + let free_call: &::RuntimeCall = + &RuntimeCall::Msa(MsaCall::delete_msa_public_key { public_key_to_delete: who.clone() }); + let free_call_info = free_call.get_dispatch_info(); + let mut account = frame_system::Account::::get(who.clone()); + account.consumers += 1; + frame_system::Account::::insert(who.clone(), account); + + // act + assert_ok!(CheckNonce::(0).pre_dispatch( + &who.clone(), + free_call, + &free_call_info, + len + )); + + // assert + let account_after = frame_system::Account::::try_get(who).expect("should resolve"); + assert_eq!(account_after.nonce, 1); + }) +} + +#[test] +#[allow(deprecated)] +fn signed_extension_validation_delete_msa_public_key_success() { + new_test_ext().execute_with(|| { + let (msa_id, original_key_pair) = create_account(); + + let (new_key_pair, _) = sr25519::Pair::generate(); + let new_key: AccountId32 = new_key_pair.public().into(); + assert_ok!(Msa::add_key(msa_id, &new_key, EMPTY_FUNCTION)); + + let original_key: AccountId32 = original_key_pair.public().into(); + + // set up call for new key to delete original key + let call_delete_msa_public_key: &::RuntimeCall = + &RuntimeCall::Msa(MsaCall::delete_msa_public_key { + public_key_to_delete: original_key.clone(), + }); + + let info = DispatchInfo::default(); + let len = 0_usize; + assert_ok!(CheckFreeExtrinsicUse::::new().validate( + &new_key, + call_delete_msa_public_key, + &info, + len, + )); + + // validate other direction + let call_delete_msa_public_key2: &::RuntimeCall = + &RuntimeCall::Msa(MsaCall::delete_msa_public_key { public_key_to_delete: new_key }); + assert_ok!(CheckFreeExtrinsicUse::::new().validate( + &original_key, + call_delete_msa_public_key2, + &info, + len, + )); + }); +} + +#[test] +#[allow(deprecated)] +fn signed_extension_validate_fails_when_delete_msa_public_key_called_twice() { + new_test_ext().execute_with(|| { + let (owner_msa_id, owner_key_pair) = create_account(); + + let (new_key_pair, _) = sr25519::Pair::generate(); + let new_key: AccountId32 = new_key_pair.public().into(); + assert_ok!(Msa::add_key(owner_msa_id, &new_key, EMPTY_FUNCTION)); + + let call_delete_msa_public_key: &::RuntimeCall = + &RuntimeCall::Msa(MsaCall::delete_msa_public_key { + public_key_to_delete: owner_key_pair.public().into(), + }); + + // check that it's okay to delete the original key + assert_ok!(CheckFreeExtrinsicUse::::new().validate( + &new_key, + call_delete_msa_public_key, + &DispatchInfo::default(), + 0_usize, + )); + + // new key deletes the old key + assert_ok!(Msa::delete_msa_public_key( + RuntimeOrigin::signed(new_key.clone()), + owner_key_pair.public().into() + )); + + assert_validate_key_delete_fails( + &new_key, + owner_key_pair.public().into(), + ValidityError::InvalidMsaKey, + ); + }); +} + +#[test] +#[allow(deprecated)] +fn signed_extension_validate_fails_when_delete_msa_public_key_called_on_only_key() { + new_test_ext().execute_with(|| { + let (_, original_pair) = create_account(); + let original_key: AccountId32 = original_pair.public().into(); + + assert_validate_key_delete_fails( + &original_key, + original_key.clone(), + ValidityError::InvalidSelfRemoval, + ) + }) +} + +#[test] +#[allow(deprecated)] +fn signed_extension_validate_fails_when_delete_msa_public_key_called_by_non_owner() { + new_test_ext().execute_with(|| { + let (_, original_pair) = create_account(); + let original_key: AccountId32 = original_pair.public().into(); + + let (_, non_owner_pair) = create_account(); + let non_owner_key: AccountId32 = non_owner_pair.public().into(); + assert_validate_key_delete_fails( + &non_owner_key, + original_key.clone(), + ValidityError::NotKeyOwner, + ) + }) +} diff --git a/pallets/msa/src/tests/subsidized_add_key_tests.rs b/pallets/msa/src/tests/subsidized_add_key_tests.rs new file mode 100644 index 0000000000..0f252c7376 --- /dev/null +++ b/pallets/msa/src/tests/subsidized_add_key_tests.rs @@ -0,0 +1,111 @@ +use crate::{ + tests::mock::{create_account, new_test_ext, test_origin_signed, Msa}, + AddKeyData, +}; +use common_primitives::{msa::MsaKeyProvider, utils::wrap_binary_data}; +use frame_support::assert_ok; +use sp_core::{bytes::from_hex, crypto::AccountId32, sr25519, Encode, Pair}; +use sp_runtime::MultiSignature; + +#[test] +fn key_not_eligible_for_subsidized_addition_when_more_than_one_key() { + new_test_ext().execute_with(|| { + let (msa_id, key_pair) = create_account(); + let public_key = key_pair.public(); + let account_id32 = AccountId32::from(public_key); + + let (new_key_pair, _) = sr25519::Pair::generate(); + let new_public_key: AccountId32 = new_key_pair.public().into(); + + let add_new_key_data = + AddKeyData { msa_id, expiration: 10, new_public_key: new_public_key.clone() }; + let encode_data_new_key_data = wrap_binary_data(add_new_key_data.encode()); + let owner_signature: MultiSignature = key_pair.sign(&encode_data_new_key_data).into(); + let new_key_signature: MultiSignature = new_key_pair.sign(&encode_data_new_key_data).into(); + + assert_ok!(Msa::add_public_key_to_msa( + test_origin_signed(1), + key_pair.public().into(), + owner_signature, + new_key_signature, + add_new_key_data + )); + + let valid_eth_address = + from_hex("0x9999999999999999999999999999999999999999eeeeeeeeeeeeeeeeeeeeeeee") + .expect("should be hex"); + let ethereum_key = AccountId32::new(valid_eth_address.clone().try_into().unwrap()); + + pretty_assertions::assert_eq!( + Msa::key_eligible_for_subsidized_addition(account_id32.into(), ethereum_key, msa_id), + false + ); + }); +} + +#[test] +fn key_eligible_for_subsidized_addition_is_false_when() { + new_test_ext().execute_with(|| { + // Set up valid msa_id and control keys + let (msa_id, valid_keypair) = create_account(); + let msa_control_key = AccountId32::from(valid_keypair.public()); + + // set up msa_id not associated with the control key + let invalid_msa_id = msa_id + 1; + + // control key not associated with the msa id + let (key_pair1, _) = sr25519::Pair::generate(); + let not_msa_control_key = AccountId32::from(key_pair1.public()); + + // a new key that isn't an ethereum compatible key + let (key_pair2, _) = sr25519::Pair::generate(); + let non_ethereum_key = AccountId32::from(key_pair2.public()); + + // a new key that is an ethereum compatible key + let valid_eth_address = + from_hex("0x917B536617B0A42B2ABE85AC88788825F29F0B29eeeeeeeeeeeeeeeeeeeeeeee") + .expect("should be hex"); + let ethereum_key = AccountId32::new(valid_eth_address.clone().try_into().unwrap()); + + // can't get a free transaction when msa_id exists but this is not the correct owner key + pretty_assertions::assert_eq!( + Msa::key_eligible_for_subsidized_addition( + not_msa_control_key.clone(), + ethereum_key.clone(), + msa_id + ), + false + ); + // can't get a free transaction if the new key isn't an ethereum-compatible key + pretty_assertions::assert_eq!( + Msa::key_eligible_for_subsidized_addition( + msa_control_key.clone(), + non_ethereum_key.clone(), + msa_id + ), + false + ); + // can't get a free transaction if the owner key exists but msa id provided is wrong + pretty_assertions::assert_eq!( + Msa::key_eligible_for_subsidized_addition( + msa_control_key.clone(), + ethereum_key.clone(), + invalid_msa_id + ), + false + ); + }); +} + +#[test] +fn key_eligible_for_subsidized_addition_when_only_one_key_and_ethereum_compatible() { + new_test_ext().execute_with(|| { + let (msa_id, key_pair) = create_account(); + let account_id = key_pair.public(); + let valid_eth_address = + from_hex("0x1111111111111111111111111111111111111111eeeeeeeeeeeeeeeeeeeeeeee") + .expect("should be hex"); + let ethereum_key = AccountId32::new(valid_eth_address.clone().try_into().unwrap()); + assert!(Msa::key_eligible_for_subsidized_addition(account_id.into(), ethereum_key, msa_id)); + }); +} diff --git a/pallets/msa/src/types.rs b/pallets/msa/src/types.rs new file mode 100644 index 0000000000..1d2bd8e568 --- /dev/null +++ b/pallets/msa/src/types.rs @@ -0,0 +1,186 @@ +//! Types for the MSA Pallet +#![cfg_attr(not(feature = "std"), no_std)] + +use super::*; +use parity_scale_codec::{Decode, Encode}; + +use core::fmt::Debug; + +pub use common_primitives::msa::{ + Delegation, DelegatorId, KeyInfoResponse, MessageSourceId, ProviderId, +}; +use common_primitives::{node::BlockNumber, schema::SchemaId}; + +use common_primitives::{ + signatures::{get_eip712_encoding_prefix, AccountAddressMapper, EthereumAddressMapper}, + utils::to_abi_compatible_number, +}; +use scale_info::TypeInfo; +use sp_core::U256; + +/// Dispatch Empty +pub const EMPTY_FUNCTION: fn(MessageSourceId) -> DispatchResult = |_| Ok(()); + +/// A type definition for the payload of adding an MSA key - `pallet_msa::add_public_key_to_msa` +#[derive( + TypeInfo, RuntimeDebugNoBound, Clone, Decode, DecodeWithMemTracking, Encode, PartialEq, Eq, +)] +#[scale_info(skip_type_params(T))] +pub struct AddKeyData { + /// Message Source Account identifier + pub msa_id: MessageSourceId, + /// The block number at which the signed proof for add_public_key_to_msa expires. + pub expiration: BlockNumberFor, + /// The public key to be added. + pub new_public_key: T::AccountId, +} + +impl EIP712Encode for AddKeyData { + fn encode_eip_712(&self) -> Box<[u8]> { + lazy_static! { + // get prefix and domain separator + static ref PREFIX_DOMAIN_SEPARATOR: Box<[u8]> = + get_eip712_encoding_prefix("0xcccccccccccccccccccccccccccccccccccccccc"); + + // signed payload + static ref MAIN_TYPE_HASH: [u8; 32] = sp_io::hashing::keccak_256( + b"AddKeyData(uint64 msaId,uint32 expiration,address newPublicKey)", + ); + } + let coded_owner_msa_id = to_abi_compatible_number(self.msa_id); + let expiration: U256 = self.expiration.into(); + let coded_expiration = to_abi_compatible_number(expiration.as_u128()); + let converted_public_key = T::ConvertIntoAccountId32::convert(self.new_public_key.clone()); + let mut zero_prefixed_address = [0u8; 32]; + zero_prefixed_address[12..] + .copy_from_slice(&EthereumAddressMapper::to_ethereum_address(converted_public_key).0); + let message = sp_io::hashing::keccak_256( + &[ + MAIN_TYPE_HASH.as_slice(), + &coded_owner_msa_id, + &coded_expiration, + &zero_prefixed_address, + ] + .concat(), + ); + let combined = [PREFIX_DOMAIN_SEPARATOR.as_ref(), &message].concat(); + combined.into_boxed_slice() + } +} + +/// Structure that is signed for granting permissions to a Provider +#[derive(TypeInfo, Clone, Debug, Decode, DecodeWithMemTracking, Encode, PartialEq, Eq)] +pub struct AddProvider { + /// The provider being granted permissions + pub authorized_msa_id: MessageSourceId, + /// Schemas for which publishing grants are authorized. + /// This is private intended for internal use only. + pub schema_ids: Vec, + /// The block number at which the proof for grant_delegation expires. + pub expiration: BlockNumber, +} + +impl EIP712Encode for AddProvider { + fn encode_eip_712(&self) -> Box<[u8]> { + lazy_static! { + // get prefix and domain separator + static ref PREFIX_DOMAIN_SEPARATOR: Box<[u8]> = + get_eip712_encoding_prefix("0xcccccccccccccccccccccccccccccccccccccccc"); + + // signed payload + static ref MAIN_TYPE_HASH: [u8; 32] = sp_io::hashing::keccak_256( + b"AddProvider(uint64 authorizedMsaId,uint16[] schemaIds,uint32 expiration)" + ); + } + let coded_authorized_msa_id = to_abi_compatible_number(self.authorized_msa_id); + let schema_ids: Vec = self + .schema_ids + .iter() + .flat_map(|schema_id| to_abi_compatible_number(*schema_id)) + .collect(); + let schema_ids = sp_io::hashing::keccak_256(&schema_ids); + let coded_expiration = to_abi_compatible_number(self.expiration); + let message = sp_io::hashing::keccak_256( + &[MAIN_TYPE_HASH.as_slice(), &coded_authorized_msa_id, &schema_ids, &coded_expiration] + .concat(), + ); + let combined = [PREFIX_DOMAIN_SEPARATOR.as_ref(), &message].concat(); + combined.into_boxed_slice() + } +} + +impl AddProvider { + /// Create new `AddProvider` + pub fn new( + authorized_msa_id: MessageSourceId, + schema_ids: Option>, + expiration: BlockNumber, + ) -> Self { + let schema_ids = schema_ids.unwrap_or_default(); + + Self { authorized_msa_id, schema_ids, expiration } + } +} + +/// The interface for mutating schemas permissions in a delegation relationship. +pub trait PermittedDelegationSchemas { + /// Attempt to insert a new schema. Dispatches error when the max allowed schemas are exceeded. + fn try_insert_schema(&mut self, schema_id: SchemaId) -> Result<(), DispatchError>; + + /// Attempt to insert a collection of schemas. Dispatches error when the max allowed schemas are exceeded. + fn try_insert_schemas(&mut self, schema_ids: Vec) -> Result<(), DispatchError> { + for schema_id in schema_ids.into_iter() { + self.try_insert_schema(schema_id)?; + } + + Ok(()) + } + + /// Attempt get and mutate a collection of schemas. Dispatches error when a schema cannot be found. + fn try_get_mut_schemas( + &mut self, + schema_ids: Vec, + block_number: BlockNumberFor, + ) -> Result<(), DispatchError> { + for schema_id in schema_ids.into_iter() { + self.try_get_mut_schema(schema_id, block_number)?; + } + Ok(()) + } + + /// Attempt get and mutate a schema. Dispatches error when a schema cannot be found. + fn try_get_mut_schema( + &mut self, + schema_id: SchemaId, + block_number: BlockNumberFor, + ) -> Result<(), DispatchError>; +} + +/// Implementation of SchemaPermission trait on Delegation type. +impl PermittedDelegationSchemas + for Delegation, T::MaxSchemaGrantsPerDelegation> +{ + /// Attempt to insert a new schema. Dispatches error when the max allowed schemas are exceeded. + fn try_insert_schema(&mut self, schema_id: SchemaId) -> Result<(), DispatchError> { + self.schema_permissions + .try_insert(schema_id, Default::default()) + .map_err(|_| Error::::ExceedsMaxSchemaGrantsPerDelegation)?; + Ok(()) + } + + /// Attempt get and mutate a schema. Dispatches error when a schema cannot be found. + fn try_get_mut_schema( + &mut self, + schema_id: SchemaId, + block_number: BlockNumberFor, + ) -> Result<(), DispatchError> { + let schema = self + .schema_permissions + .get_mut(&schema_id) + .ok_or(Error::::SchemaNotGranted)?; + + *schema = block_number; + + Ok(()) + } +} diff --git a/pallets/msa/src/weights.rs b/pallets/msa/src/weights.rs new file mode 100644 index 0000000000..db27906009 --- /dev/null +++ b/pallets/msa/src/weights.rs @@ -0,0 +1,590 @@ + +//! Autogenerated weights for `pallet_msa` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-04-18, STEPS: `20`, REPEAT: `10`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `ip-10-173-0-75`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` +//! WASM-EXECUTION: `Compiled`, CHAIN: `None`, DB CACHE: `1024` + +// Executed Command: +// ./scripts/../target/release/frequency +// benchmark +// pallet +// --pallet=pallet_msa +// --extrinsic +// * +// --heap-pages=4096 +// --steps=20 +// --repeat=10 +// --output=./scripts/../pallets/msa/src/weights.rs +// --template=./scripts/../.maintain/frame-weight-template.hbs +// --additional-trie-layers=3 +// --runtime=./scripts/../target/release/wbuild/frequency-runtime/frequency_runtime.wasm +// --genesis-builder=runtime + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; +use core::marker::PhantomData; + +/// Weight functions needed for `pallet_msa`. +pub trait WeightInfo { + fn create() -> Weight; + fn create_sponsored_account_with_delegation(s: u32, ) -> Weight; + fn revoke_delegation_by_provider() -> Weight; + fn add_public_key_to_msa() -> Weight; + fn delete_msa_public_key() -> Weight; + fn retire_msa() -> Weight; + fn grant_delegation(s: u32, ) -> Weight; + fn revoke_delegation_by_delegator() -> Weight; + fn create_provider() -> Weight; + fn create_provider_via_governance() -> Weight; + fn propose_to_be_provider() -> Weight; + fn reindex_offchain() -> Weight; +} + +/// Weights for `pallet_msa` using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl WeightInfo for SubstrateWeight { + /// Storage: `Msa::CurrentMsaIdentifierMaximum` (r:1 w:1) + /// Proof: `Msa::CurrentMsaIdentifierMaximum` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:1) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::PublicKeyCountForMsaId` (r:1 w:1) + /// Proof: `Msa::PublicKeyCountForMsaId` (`max_values`: None, `max_size`: Some(17), added: 2492, mode: `MaxEncodedLen`) + fn create() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `4008` + // Minimum execution time: 13_786_000 picoseconds. + Weight::from_parts(14_239_000, 4008) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } + /// Storage: `Msa::PayloadSignatureRegistryList` (r:2 w:2) + /// Proof: `Msa::PayloadSignatureRegistryList` (`max_values`: Some(50000), `max_size`: Some(144), added: 2124, mode: `MaxEncodedLen`) + /// Storage: `Msa::PayloadSignatureRegistryPointer` (r:1 w:1) + /// Proof: `Msa::PayloadSignatureRegistryPointer` (`max_values`: Some(1), `max_size`: Some(140), added: 635, mode: `MaxEncodedLen`) + /// Storage: `Msa::PublicKeyToMsaId` (r:2 w:1) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::ProviderToRegistryEntry` (r:1 w:0) + /// Proof: `Msa::ProviderToRegistryEntry` (`max_values`: None, `max_size`: Some(33), added: 2508, mode: `MaxEncodedLen`) + /// Storage: `Msa::CurrentMsaIdentifierMaximum` (r:1 w:1) + /// Proof: `Msa::CurrentMsaIdentifierMaximum` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `Msa::PublicKeyCountForMsaId` (r:1 w:1) + /// Proof: `Msa::PublicKeyCountForMsaId` (`max_values`: None, `max_size`: Some(17), added: 2492, mode: `MaxEncodedLen`) + /// Storage: `Msa::DelegatorAndProviderToDelegation` (r:1 w:1) + /// Proof: `Msa::DelegatorAndProviderToDelegation` (`max_values`: None, `max_size`: Some(217), added: 2692, mode: `MaxEncodedLen`) + /// Storage: `Schemas::CurrentSchemaIdentifierMaximum` (r:1 w:0) + /// Proof: `Schemas::CurrentSchemaIdentifierMaximum` (`max_values`: Some(1), `max_size`: Some(2), added: 497, mode: `MaxEncodedLen`) + /// The range of component `s` is `[0, 30]`. + fn create_sponsored_account_with_delegation(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `1360` + // Estimated: `6531` + // Minimum execution time: 148_041_000 picoseconds. + Weight::from_parts(153_193_182, 6531) + // Standard Error: 25_921 + .saturating_add(Weight::from_parts(99_880, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(10_u64)) + .saturating_add(T::DbWeight::get().writes(7_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::DelegatorAndProviderToDelegation` (r:1 w:1) + /// Proof: `Msa::DelegatorAndProviderToDelegation` (`max_values`: None, `max_size`: Some(217), added: 2692, mode: `MaxEncodedLen`) + fn revoke_delegation_by_provider() -> Weight { + // Proof Size summary in bytes: + // Measured: `161` + // Estimated: `4177` + // Minimum execution time: 16_577_000 picoseconds. + Weight::from_parts(17_236_000, 4177) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Msa::PayloadSignatureRegistryList` (r:4 w:4) + /// Proof: `Msa::PayloadSignatureRegistryList` (`max_values`: Some(50000), `max_size`: Some(144), added: 2124, mode: `MaxEncodedLen`) + /// Storage: `Msa::PayloadSignatureRegistryPointer` (r:1 w:1) + /// Proof: `Msa::PayloadSignatureRegistryPointer` (`max_values`: Some(1), `max_size`: Some(140), added: 635, mode: `MaxEncodedLen`) + /// Storage: `Msa::PublicKeyToMsaId` (r:2 w:1) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::PublicKeyCountForMsaId` (r:1 w:1) + /// Proof: `Msa::PublicKeyCountForMsaId` (`max_values`: None, `max_size`: Some(17), added: 2492, mode: `MaxEncodedLen`) + fn add_public_key_to_msa() -> Weight { + // Proof Size summary in bytes: + // Measured: `1569` + // Estimated: `9981` + // Minimum execution time: 224_456_000 picoseconds. + Weight::from_parts(230_504_000, 9981) + .saturating_add(T::DbWeight::get().reads(8_u64)) + .saturating_add(T::DbWeight::get().writes(7_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:2 w:1) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::PublicKeyCountForMsaId` (r:1 w:1) + /// Proof: `Msa::PublicKeyCountForMsaId` (`max_values`: None, `max_size`: Some(17), added: 2492, mode: `MaxEncodedLen`) + fn delete_msa_public_key() -> Weight { + // Proof Size summary in bytes: + // Measured: `254` + // Estimated: `6531` + // Minimum execution time: 30_387_000 picoseconds. + Weight::from_parts(31_261_000, 6531) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:1) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::PublicKeyCountForMsaId` (r:1 w:1) + /// Proof: `Msa::PublicKeyCountForMsaId` (`max_values`: None, `max_size`: Some(17), added: 2492, mode: `MaxEncodedLen`) + fn retire_msa() -> Weight { + // Proof Size summary in bytes: + // Measured: `71` + // Estimated: `4008` + // Minimum execution time: 20_427_000 picoseconds. + Weight::from_parts(21_113_000, 4008) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: `Msa::PayloadSignatureRegistryList` (r:2 w:2) + /// Proof: `Msa::PayloadSignatureRegistryList` (`max_values`: Some(50000), `max_size`: Some(144), added: 2124, mode: `MaxEncodedLen`) + /// Storage: `Msa::PayloadSignatureRegistryPointer` (r:1 w:1) + /// Proof: `Msa::PayloadSignatureRegistryPointer` (`max_values`: Some(1), `max_size`: Some(140), added: 635, mode: `MaxEncodedLen`) + /// Storage: `Msa::PublicKeyToMsaId` (r:2 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::ProviderToRegistryEntry` (r:1 w:0) + /// Proof: `Msa::ProviderToRegistryEntry` (`max_values`: None, `max_size`: Some(33), added: 2508, mode: `MaxEncodedLen`) + /// Storage: `Msa::DelegatorAndProviderToDelegation` (r:1 w:1) + /// Proof: `Msa::DelegatorAndProviderToDelegation` (`max_values`: None, `max_size`: Some(217), added: 2692, mode: `MaxEncodedLen`) + /// Storage: `Schemas::CurrentSchemaIdentifierMaximum` (r:1 w:0) + /// Proof: `Schemas::CurrentSchemaIdentifierMaximum` (`max_values`: Some(1), `max_size`: Some(2), added: 497, mode: `MaxEncodedLen`) + /// The range of component `s` is `[0, 30]`. + fn grant_delegation(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `1407` + // Estimated: `6531` + // Minimum execution time: 135_443_000 picoseconds. + Weight::from_parts(140_519_618, 6531) + // Standard Error: 27_750 + .saturating_add(Weight::from_parts(132_909, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(8_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::DelegatorAndProviderToDelegation` (r:1 w:1) + /// Proof: `Msa::DelegatorAndProviderToDelegation` (`max_values`: None, `max_size`: Some(217), added: 2692, mode: `MaxEncodedLen`) + fn revoke_delegation_by_delegator() -> Weight { + // Proof Size summary in bytes: + // Measured: `161` + // Estimated: `4177` + // Minimum execution time: 16_230_000 picoseconds. + Weight::from_parts(17_209_000, 4177) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::ProviderToRegistryEntry` (r:1 w:1) + /// Proof: `Msa::ProviderToRegistryEntry` (`max_values`: None, `max_size`: Some(33), added: 2508, mode: `MaxEncodedLen`) + fn create_provider() -> Weight { + // Proof Size summary in bytes: + // Measured: `67` + // Estimated: `4008` + // Minimum execution time: 12_595_000 picoseconds. + Weight::from_parts(13_269_000, 4008) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::ProviderToRegistryEntry` (r:1 w:1) + /// Proof: `Msa::ProviderToRegistryEntry` (`max_values`: None, `max_size`: Some(33), added: 2508, mode: `MaxEncodedLen`) + fn create_provider_via_governance() -> Weight { + // Proof Size summary in bytes: + // Measured: `67` + // Estimated: `4008` + // Minimum execution time: 12_529_000 picoseconds. + Weight::from_parts(13_173_000, 4008) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Council::ProposalOf` (r:1 w:1) + /// Proof: `Council::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Council::Proposals` (r:1 w:1) + /// Proof: `Council::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::ProposalCount` (r:1 w:1) + /// Proof: `Council::ProposalCount` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::Voting` (r:0 w:1) + /// Proof: `Council::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn propose_to_be_provider() -> Weight { + // Proof Size summary in bytes: + // Measured: `147` + // Estimated: `4107` + // Minimum execution time: 21_968_000 picoseconds. + Weight::from_parts(22_510_000, 4107) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) + } + fn reindex_offchain() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 4_000_000 picoseconds. + Weight::from_parts(8_000_000, 0) + } +} + +// For backwards compatibility and tests. +impl WeightInfo for () { + /// Storage: `Msa::CurrentMsaIdentifierMaximum` (r:1 w:1) + /// Proof: `Msa::CurrentMsaIdentifierMaximum` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:1) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::PublicKeyCountForMsaId` (r:1 w:1) + /// Proof: `Msa::PublicKeyCountForMsaId` (`max_values`: None, `max_size`: Some(17), added: 2492, mode: `MaxEncodedLen`) + fn create() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `4008` + // Minimum execution time: 13_786_000 picoseconds. + Weight::from_parts(14_239_000, 4008) + .saturating_add(RocksDbWeight::get().reads(3_u64)) + .saturating_add(RocksDbWeight::get().writes(3_u64)) + } + /// Storage: `Msa::PayloadSignatureRegistryList` (r:2 w:2) + /// Proof: `Msa::PayloadSignatureRegistryList` (`max_values`: Some(50000), `max_size`: Some(144), added: 2124, mode: `MaxEncodedLen`) + /// Storage: `Msa::PayloadSignatureRegistryPointer` (r:1 w:1) + /// Proof: `Msa::PayloadSignatureRegistryPointer` (`max_values`: Some(1), `max_size`: Some(140), added: 635, mode: `MaxEncodedLen`) + /// Storage: `Msa::PublicKeyToMsaId` (r:2 w:1) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::ProviderToRegistryEntry` (r:1 w:0) + /// Proof: `Msa::ProviderToRegistryEntry` (`max_values`: None, `max_size`: Some(33), added: 2508, mode: `MaxEncodedLen`) + /// Storage: `Msa::CurrentMsaIdentifierMaximum` (r:1 w:1) + /// Proof: `Msa::CurrentMsaIdentifierMaximum` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `Msa::PublicKeyCountForMsaId` (r:1 w:1) + /// Proof: `Msa::PublicKeyCountForMsaId` (`max_values`: None, `max_size`: Some(17), added: 2492, mode: `MaxEncodedLen`) + /// Storage: `Msa::DelegatorAndProviderToDelegation` (r:1 w:1) + /// Proof: `Msa::DelegatorAndProviderToDelegation` (`max_values`: None, `max_size`: Some(217), added: 2692, mode: `MaxEncodedLen`) + /// Storage: `Schemas::CurrentSchemaIdentifierMaximum` (r:1 w:0) + /// Proof: `Schemas::CurrentSchemaIdentifierMaximum` (`max_values`: Some(1), `max_size`: Some(2), added: 497, mode: `MaxEncodedLen`) + /// The range of component `s` is `[0, 30]`. + fn create_sponsored_account_with_delegation(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `1360` + // Estimated: `6531` + // Minimum execution time: 148_041_000 picoseconds. + Weight::from_parts(153_193_182, 6531) + // Standard Error: 25_921 + .saturating_add(Weight::from_parts(99_880, 0).saturating_mul(s.into())) + .saturating_add(RocksDbWeight::get().reads(10_u64)) + .saturating_add(RocksDbWeight::get().writes(7_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::DelegatorAndProviderToDelegation` (r:1 w:1) + /// Proof: `Msa::DelegatorAndProviderToDelegation` (`max_values`: None, `max_size`: Some(217), added: 2692, mode: `MaxEncodedLen`) + fn revoke_delegation_by_provider() -> Weight { + // Proof Size summary in bytes: + // Measured: `161` + // Estimated: `4177` + // Minimum execution time: 16_577_000 picoseconds. + Weight::from_parts(17_236_000, 4177) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: `Msa::PayloadSignatureRegistryList` (r:4 w:4) + /// Proof: `Msa::PayloadSignatureRegistryList` (`max_values`: Some(50000), `max_size`: Some(144), added: 2124, mode: `MaxEncodedLen`) + /// Storage: `Msa::PayloadSignatureRegistryPointer` (r:1 w:1) + /// Proof: `Msa::PayloadSignatureRegistryPointer` (`max_values`: Some(1), `max_size`: Some(140), added: 635, mode: `MaxEncodedLen`) + /// Storage: `Msa::PublicKeyToMsaId` (r:2 w:1) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::PublicKeyCountForMsaId` (r:1 w:1) + /// Proof: `Msa::PublicKeyCountForMsaId` (`max_values`: None, `max_size`: Some(17), added: 2492, mode: `MaxEncodedLen`) + fn add_public_key_to_msa() -> Weight { + // Proof Size summary in bytes: + // Measured: `1569` + // Estimated: `9981` + // Minimum execution time: 224_456_000 picoseconds. + Weight::from_parts(230_504_000, 9981) + .saturating_add(RocksDbWeight::get().reads(8_u64)) + .saturating_add(RocksDbWeight::get().writes(7_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:2 w:1) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::PublicKeyCountForMsaId` (r:1 w:1) + /// Proof: `Msa::PublicKeyCountForMsaId` (`max_values`: None, `max_size`: Some(17), added: 2492, mode: `MaxEncodedLen`) + fn delete_msa_public_key() -> Weight { + // Proof Size summary in bytes: + // Measured: `254` + // Estimated: `6531` + // Minimum execution time: 30_387_000 picoseconds. + Weight::from_parts(31_261_000, 6531) + .saturating_add(RocksDbWeight::get().reads(3_u64)) + .saturating_add(RocksDbWeight::get().writes(2_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:1) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::PublicKeyCountForMsaId` (r:1 w:1) + /// Proof: `Msa::PublicKeyCountForMsaId` (`max_values`: None, `max_size`: Some(17), added: 2492, mode: `MaxEncodedLen`) + fn retire_msa() -> Weight { + // Proof Size summary in bytes: + // Measured: `71` + // Estimated: `4008` + // Minimum execution time: 20_427_000 picoseconds. + Weight::from_parts(21_113_000, 4008) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(2_u64)) + } + /// Storage: `Msa::PayloadSignatureRegistryList` (r:2 w:2) + /// Proof: `Msa::PayloadSignatureRegistryList` (`max_values`: Some(50000), `max_size`: Some(144), added: 2124, mode: `MaxEncodedLen`) + /// Storage: `Msa::PayloadSignatureRegistryPointer` (r:1 w:1) + /// Proof: `Msa::PayloadSignatureRegistryPointer` (`max_values`: Some(1), `max_size`: Some(140), added: 635, mode: `MaxEncodedLen`) + /// Storage: `Msa::PublicKeyToMsaId` (r:2 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::ProviderToRegistryEntry` (r:1 w:0) + /// Proof: `Msa::ProviderToRegistryEntry` (`max_values`: None, `max_size`: Some(33), added: 2508, mode: `MaxEncodedLen`) + /// Storage: `Msa::DelegatorAndProviderToDelegation` (r:1 w:1) + /// Proof: `Msa::DelegatorAndProviderToDelegation` (`max_values`: None, `max_size`: Some(217), added: 2692, mode: `MaxEncodedLen`) + /// Storage: `Schemas::CurrentSchemaIdentifierMaximum` (r:1 w:0) + /// Proof: `Schemas::CurrentSchemaIdentifierMaximum` (`max_values`: Some(1), `max_size`: Some(2), added: 497, mode: `MaxEncodedLen`) + /// The range of component `s` is `[0, 30]`. + fn grant_delegation(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `1407` + // Estimated: `6531` + // Minimum execution time: 135_443_000 picoseconds. + Weight::from_parts(140_519_618, 6531) + // Standard Error: 27_750 + .saturating_add(Weight::from_parts(132_909, 0).saturating_mul(s.into())) + .saturating_add(RocksDbWeight::get().reads(8_u64)) + .saturating_add(RocksDbWeight::get().writes(4_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::DelegatorAndProviderToDelegation` (r:1 w:1) + /// Proof: `Msa::DelegatorAndProviderToDelegation` (`max_values`: None, `max_size`: Some(217), added: 2692, mode: `MaxEncodedLen`) + fn revoke_delegation_by_delegator() -> Weight { + // Proof Size summary in bytes: + // Measured: `161` + // Estimated: `4177` + // Minimum execution time: 16_230_000 picoseconds. + Weight::from_parts(17_209_000, 4177) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::ProviderToRegistryEntry` (r:1 w:1) + /// Proof: `Msa::ProviderToRegistryEntry` (`max_values`: None, `max_size`: Some(33), added: 2508, mode: `MaxEncodedLen`) + fn create_provider() -> Weight { + // Proof Size summary in bytes: + // Measured: `67` + // Estimated: `4008` + // Minimum execution time: 12_595_000 picoseconds. + Weight::from_parts(13_269_000, 4008) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::ProviderToRegistryEntry` (r:1 w:1) + /// Proof: `Msa::ProviderToRegistryEntry` (`max_values`: None, `max_size`: Some(33), added: 2508, mode: `MaxEncodedLen`) + fn create_provider_via_governance() -> Weight { + // Proof Size summary in bytes: + // Measured: `67` + // Estimated: `4008` + // Minimum execution time: 12_529_000 picoseconds. + Weight::from_parts(13_173_000, 4008) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Council::ProposalOf` (r:1 w:1) + /// Proof: `Council::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Council::Proposals` (r:1 w:1) + /// Proof: `Council::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::ProposalCount` (r:1 w:1) + /// Proof: `Council::ProposalCount` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::Voting` (r:0 w:1) + /// Proof: `Council::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn propose_to_be_provider() -> Weight { + // Proof Size summary in bytes: + // Measured: `147` + // Estimated: `4107` + // Minimum execution time: 21_968_000 picoseconds. + Weight::from_parts(22_510_000, 4107) + .saturating_add(RocksDbWeight::get().reads(4_u64)) + .saturating_add(RocksDbWeight::get().writes(4_u64)) + } + fn reindex_offchain() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 4_000_000 picoseconds. + Weight::from_parts(8_000_000, 0) + } +} + + +#[cfg(test)] +mod tests { + use frame_support::{traits::Get, weights::Weight, dispatch::DispatchClass}; + use common_runtime::constants::{MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO}; + use common_runtime::weights::extrinsic_weights::ExtrinsicBaseWeight; + + #[allow(dead_code)] + struct BlockWeights; + impl Get for BlockWeights { + fn get() -> frame_system::limits::BlockWeights { + frame_system::limits::BlockWeights::builder() + .base_block(Weight::zero()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::non_mandatory(), |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .build_or_panic() + } + } + + #[test] + fn test_create() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4008 + ); + } + #[test] + fn test_create_sponsored_account_with_delegation() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 6531 + ); + } + #[test] + fn test_revoke_delegation_by_provider() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4177 + ); + } + #[test] + fn test_add_public_key_to_msa() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 9981 + ); + } + #[test] + fn test_delete_msa_public_key() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 6531 + ); + } + #[test] + fn test_retire_msa() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4008 + ); + } + #[test] + fn test_grant_delegation() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 6531 + ); + } + #[test] + fn test_revoke_delegation_by_delegator() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4177 + ); + } + #[test] + fn test_create_provider() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4008 + ); + } + #[test] + fn test_create_provider_via_governance() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4008 + ); + } + #[test] + fn test_propose_to_be_provider() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4107 + ); + } +} diff --git a/pallets/passkey/Cargo.toml b/pallets/passkey/Cargo.toml new file mode 100644 index 0000000000..f3d151bac2 --- /dev/null +++ b/pallets/passkey/Cargo.toml @@ -0,0 +1,65 @@ +[package] +name = "pallet-passkey" +description = "Provides a way to execute transactions using passkey signatures." +authors = ["Frequency"] +edition = "2021" +homepage = "https://frequency.xyz" +license = "Apache-2.0" +repository = "https://github.com/frequency-chain/frequency/" +publish = false +version = "0.0.0" + +[dependencies] +parity-scale-codec = { workspace = true, features = ["max-encoded-len"] } +scale-info = { workspace = true, features = ["derive"] } + +frame-support = { workspace = true } +frame-system = { workspace = true } +sp-io = { workspace = true } +sp-runtime = { workspace = true } +frame-benchmarking = { workspace = true, optional = true } +sp-core = { workspace = true } +log = { workspace = true, default-features = false } +p256 = { workspace = true } +base64-url = { workspace = true } +serde_json = { workspace = true, features = ["alloc"] } +pallet-transaction-payment = { workspace = true } + +# Frequency related dependencies +common-primitives = { default-features = false, path = "../../common/primitives" } +common-runtime = { path = "../../runtime/common", default-features = false } +lazy_static = { workspace = true } + +[dev-dependencies] +pallet-balances = { workspace = true } +sp-keystore = { workspace = true } +sp-keyring = { workspace = true } + +[features] +default = ["std"] +std = [ + "parity-scale-codec/std", + "frame-support/std", + "frame-system/std", + "scale-info/std", + "sp-core/std", + "sp-io/std", + "sp-runtime/std", + "frame-benchmarking/std", + "common-primitives/std", + "common-runtime/std", + "pallet-transaction-payment/std" +] +runtime-benchmarks = [ + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "sp-runtime/runtime-benchmarks", + "frame-benchmarking/runtime-benchmarks", + "common-primitives/runtime-benchmarks", + "common-runtime/runtime-benchmarks", +] +try-runtime = ["frame-support/try-runtime", "frame-system/try-runtime"] +test = [] + +[lints] +workspace = true diff --git a/pallets/passkey/README.md b/pallets/passkey/README.md new file mode 100644 index 0000000000..48fb285497 --- /dev/null +++ b/pallets/passkey/README.md @@ -0,0 +1,37 @@ +# Passkey Pallet + +Provides a way to execute transactions using passkey signatures. + +## Summary + +Passkeys are a secure alternative to passwords for authentication. Due to its ease of use for the +users and having a well established support in different platforms, Frequency chain supports passkey +p256 signatures for select transactions. With this feature users would be able to execute a +transactions by authenticating themselves with a Passkey P256 signature. + +### Actions + +The Passkey pallet provides for: + +- Executing supported transactions with a valid Passkey P256 signature + +## Interactions + +### Extrinsic verification + +Because the Polkadot SDK currently lacks support for P256 signatures, we had to use an unsigned +extrinsic to allow this custom verification before dispatching transactions. To achieve this, we +added P256 signature verification within the `ValidateUnsigned` trait implementation for the pallet. + +Since **unsigned extrinsics** bypass verification by `SignedExtensions`, we've added the necessary +checks within the ValidateUnsigned trait implementation to mitigate potential vulnerabilities. + +### Extrinsics + +| Name/Description | Caller | Payment | Key Events | Runtime Added | +| ------------------------------------------------------------------------------------------------------------------------------------------- | --------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------- | +| `proxy`
Proxies an extrinsic call | Anyone | Tokens | [`TransactionExecutionSuccess`](https://frequency-chain.github.io/frequency/pallet_passkey/module/enum.Event.html#variant.TransactionExecutionSuccess) | 92 | +| ------------------------------------------------------------------------------------------------------------------------------------------- | --------------- | +| `proxy_v2`
Proxies an extrinsic call | Anyone | Tokens | [`TransactionExecutionSuccess`](https://frequency-chain.github.io/frequency/pallet_passkey/module/enum.Event.html#variant.TransactionExecutionSuccess) | 92 | + +See [Rust Docs](https://frequency-chain.github.io/frequency/pallet_passkey/module/struct.Pallet.html) for more details. diff --git a/pallets/passkey/src/benchmarking.rs b/pallets/passkey/src/benchmarking.rs new file mode 100644 index 0000000000..5de7eb0ffe --- /dev/null +++ b/pallets/passkey/src/benchmarking.rs @@ -0,0 +1,105 @@ +#![allow(clippy::unwrap_used)] +use super::*; + +#[allow(unused)] +use crate::Pallet as Passkey; +use crate::{ + test_common::{ + constants::{AUTHENTICATOR_DATA, REPLACED_CLIENT_DATA_JSON}, + utilities::{get_p256_public_key, passkey_sign}, + }, + types::*, +}; +use common_primitives::utils::wrap_binary_data; +use frame_benchmarking::v2::*; +use frame_support::assert_ok; +use sp_core::{crypto::KeyTypeId, Encode}; +use sp_runtime::{traits::Zero, MultiSignature, RuntimeAppPublic}; +extern crate alloc; +use alloc::boxed::Box; + +pub const TEST_KEY_TYPE_ID: KeyTypeId = KeyTypeId(*b"test"); + +mod app_sr25519 { + use super::TEST_KEY_TYPE_ID; + use sp_core::sr25519; + use sp_runtime::app_crypto::app_crypto; + app_crypto!(sr25519, TEST_KEY_TYPE_ID); +} + +type SignerId = app_sr25519::Public; + +fn generate_payload() -> PasskeyPayloadV2 { + let test_account_1_pk = SignerId::generate_pair(None); + let test_account_1_account_id = + T::AccountId::decode(&mut &test_account_1_pk.encode()[..]).unwrap(); + T::Currency::set_balance(&test_account_1_account_id.clone(), 4_000_000_000u32.into()); + let secret = p256::SecretKey::from_slice(&[ + 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, + ]) + .unwrap(); + let passkey_public_key = get_p256_public_key(&secret).unwrap(); + let wrapped_binary = wrap_binary_data(passkey_public_key.inner().to_vec()); + let signature: MultiSignature = + MultiSignature::Sr25519(test_account_1_pk.sign(&wrapped_binary).unwrap().into()); + let client_data = base64_url::decode(REPLACED_CLIENT_DATA_JSON).unwrap(); + let authenticator = base64_url::decode(AUTHENTICATOR_DATA).unwrap(); + + let inner_call: ::RuntimeCall = + frame_system::Call::::remark { remark: vec![] }.into(); + + let call: PasskeyCallV2 = PasskeyCallV2 { + account_id: test_account_1_account_id, + account_nonce: T::Nonce::zero(), + call: Box::new(inner_call), + }; + + let passkey_signature = + passkey_sign(&secret, &call.encode(), &client_data, &authenticator).unwrap(); + + PasskeyPayloadV2 { + passkey_public_key, + verifiable_passkey_signature: VerifiablePasskeySignature { + signature: passkey_signature, + client_data_json: client_data.try_into().unwrap(), + authenticator_data: authenticator.try_into().unwrap(), + }, + account_ownership_proof: signature, + passkey_call: call, + } +} + +#[benchmarks( + where + BalanceOf: From, + ::RuntimeCall: From> + Dispatchable, + ::RuntimeOrigin: AsTransactionAuthorizedOrigin, +)] +mod benchmarks { + use super::*; + + #[benchmark] + fn validate() -> Result<(), BenchmarkError> { + let payload = generate_payload::(); + #[block] + { + assert_ok!(Passkey::validate_unsigned( + TransactionSource::InBlock, + &Call::proxy_v2 { payload } + )); + } + Ok(()) + } + + #[benchmark] + fn pre_dispatch() -> Result<(), BenchmarkError> { + let payload = generate_payload::(); + #[block] + { + assert_ok!(Passkey::pre_dispatch(&Call::proxy_v2 { payload })); + } + Ok(()) + } + + impl_benchmark_test_suite!(Passkey, crate::mock::new_test_ext_keystore(), crate::mock::Test); +} diff --git a/pallets/passkey/src/lib.rs b/pallets/passkey/src/lib.rs new file mode 100644 index 0000000000..b16fb9eaed --- /dev/null +++ b/pallets/passkey/src/lib.rs @@ -0,0 +1,581 @@ +//! Using Passkeys to execute transactions +//! +//! ## Quick Links +//! - [Configuration: `Config`](Config) +//! - [Extrinsics: `Call`](Call) +//! - [Event Enum: `Event`](Event) +//! - [Error Enum: `Error`](Error) +#![doc = include_str!("../README.md")] +// Substrate macros are tripping the clippy::expect_used lint. +#![allow(clippy::expect_used)] +#![cfg_attr(not(feature = "std"), no_std)] +// Strong Documentation Lints +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + missing_docs +)] +// allowing deprecated until moving to Extrinsic V5 structure +#![allow(deprecated)] +use common_primitives::node::EIP712Encode; +use common_runtime::{extensions::check_nonce::CheckNonce, signature::check_signature}; +use frame_support::{ + dispatch::{DispatchInfo, GetDispatchInfo, PostDispatchInfo, RawOrigin}, + pallet_prelude::*, + traits::Contains, +}; +use frame_system::pallet_prelude::*; +use pallet_transaction_payment::OnChargeTransaction; +use sp_runtime::{ + generic::Era, + traits::{ + AsTransactionAuthorizedOrigin, Convert, Dispatchable, SignedExtension, TxBaseImplication, + Zero, + }, + transaction_validity::{TransactionValidity, TransactionValidityError}, + AccountId32, MultiSignature, +}; +extern crate alloc; +use alloc::vec; + +/// Type aliases used for interaction with `OnChargeTransaction`. +pub(crate) type OnChargeTransactionOf = + ::OnChargeTransaction; + +/// Balance type alias. +pub(crate) type BalanceOf = as OnChargeTransaction>::Balance; + +#[cfg(any(feature = "runtime-benchmarks", test))] +mod test_common; + +#[cfg(test)] +mod mock; +#[cfg(test)] +mod tests; +#[cfg(test)] +mod tests_v2; + +pub mod weights; +pub use weights::*; + +#[cfg(feature = "runtime-benchmarks")] +use frame_support::traits::tokens::fungible::Mutate; +use frame_system::CheckWeight; +use sp_runtime::traits::{DispatchTransaction, TransactionExtension}; + +#[cfg(feature = "runtime-benchmarks")] +mod benchmarking; + +/// defines all new types for this pallet +pub mod types; +pub use types::*; + +pub use module::*; + +#[frame_support::pallet] +pub mod module { + + use super::*; + + /// the storage version for this pallet + pub const STORAGE_VERSION: StorageVersion = StorageVersion::new(0); + + #[pallet::config] + pub trait Config: + frame_system::Config + pallet_transaction_payment::Config + Send + Sync + { + /// The overarching event type. + type RuntimeEvent: From> + IsType<::RuntimeEvent>; + + /// The overarching call type. + type RuntimeCall: Parameter + + Dispatchable + + GetDispatchInfo + + From> + + IsType<::RuntimeCall> + + From>; + + /// Weight information for extrinsics in this pallet. + type WeightInfo: WeightInfo; + + /// AccountId truncated to 32 bytes + type ConvertIntoAccountId32: Convert; + + /// Filters the inner calls for passkey which is set in runtime + type PasskeyCallFilter: Contains<::RuntimeCall>; + + /// Helper Currency method for benchmarking + #[cfg(feature = "runtime-benchmarks")] + type Currency: Mutate; + } + + #[pallet::error] + pub enum Error { + /// InvalidAccountSignature + InvalidAccountSignature, + } + + #[pallet::event] + #[pallet::generate_deposit(fn deposit_event)] + pub enum Event { + /// When a passkey transaction is successfully executed + TransactionExecutionSuccess { + /// transaction account id + account_id: T::AccountId, + }, + } + + #[pallet::pallet] + #[pallet::storage_version(STORAGE_VERSION)] + pub struct Pallet(_); + + #[pallet::call] + impl Pallet { + /// Proxies an extrinsic call by changing the origin to `account_id` inside the payload. + /// Since this is an unsigned extrinsic all the verification checks are performed inside + /// `validate_unsigned` and `pre_dispatch` hooks. + #[deprecated(since = "1.15.2", note = "Use proxy_v2 instead")] + #[pallet::call_index(0)] + #[pallet::weight({ + let dispatch_info = payload.passkey_call.call.get_dispatch_info(); + let overhead = ::WeightInfo::pre_dispatch(); + let total = overhead.saturating_add(dispatch_info.call_weight); + (total, dispatch_info.class) + })] + #[allow(deprecated)] + pub fn proxy( + origin: OriginFor, + payload: PasskeyPayload, + ) -> DispatchResultWithPostInfo { + Self::proxy_v2(origin, payload.into()) + } + + /// Proxies an extrinsic call by changing the origin to `account_id` inside the payload. + /// Since this is an unsigned extrinsic all the verification checks are performed inside + /// `validate_unsigned` and `pre_dispatch` hooks. + #[pallet::call_index(1)] + #[pallet::weight({ + let dispatch_info = payload.passkey_call.call.get_dispatch_info(); + let overhead = ::WeightInfo::pre_dispatch(); + let total = overhead.saturating_add(dispatch_info.call_weight); + (total, dispatch_info.class) + })] + pub fn proxy_v2( + origin: OriginFor, + payload: PasskeyPayloadV2, + ) -> DispatchResultWithPostInfo { + ensure_none(origin)?; + let transaction_account_id = payload.passkey_call.account_id.clone(); + let main_origin = T::RuntimeOrigin::from(frame_system::RawOrigin::Signed( + transaction_account_id.clone(), + )); + let result = payload.passkey_call.call.dispatch(main_origin); + if let Ok(_inner) = result { + // all post-dispatch logic should be included in here + Self::deposit_event(Event::TransactionExecutionSuccess { + account_id: transaction_account_id, + }); + } + result + } + } + + #[pallet::validate_unsigned] + impl ValidateUnsigned for Pallet + where + BalanceOf: Send + Sync + From, + ::RuntimeCall: + From> + Dispatchable, + ::RuntimeOrigin: AsTransactionAuthorizedOrigin, + { + type Call = Call; + + /// Validating the regular checks of an extrinsic plus verifying the P256 Passkey signature + /// The majority of these checks are the same as `SignedExtra` list in defined in runtime + fn validate_unsigned(_source: TransactionSource, call: &Self::Call) -> TransactionValidity { + let valid_tx = ValidTransaction::default(); + let (payload, is_legacy_call) = Self::filter_valid_calls(call)?; + + let frame_system_validity = + FrameSystemChecks(payload.passkey_call.account_id.clone(), call.clone()) + .validate()?; + let nonce_validity = PasskeyNonceCheck::new(payload.passkey_call.clone()).validate()?; + let weight_validity = + PasskeyWeightCheck::new(payload.passkey_call.account_id.clone(), call.clone()) + .validate()?; + let tx_payment_validity = ChargeTransactionPayment::( + payload.passkey_call.account_id.clone(), + call.clone(), + ) + .validate()?; + // this is the last since it is the heaviest + let signature_validity = + PasskeySignatureCheck::new(payload.clone(), is_legacy_call).validate()?; + + let valid_tx = valid_tx + .combine_with(frame_system_validity) + .combine_with(nonce_validity) + .combine_with(weight_validity) + .combine_with(tx_payment_validity) + .combine_with(signature_validity); + Ok(valid_tx) + } + + /// Checking and executing a list of operations pre_dispatch + /// The majority of these checks are the same as `SignedExtra` list in defined in runtime + fn pre_dispatch(call: &Self::Call) -> Result<(), TransactionValidityError> { + let (payload, is_legacy_call) = Self::filter_valid_calls(call)?; + FrameSystemChecks(payload.passkey_call.account_id.clone(), call.clone()) + .pre_dispatch()?; + PasskeyNonceCheck::new(payload.passkey_call.clone()).pre_dispatch()?; + PasskeyWeightCheck::new(payload.passkey_call.account_id.clone(), call.clone()) + .pre_dispatch()?; + ChargeTransactionPayment::(payload.passkey_call.account_id.clone(), call.clone()) + .pre_dispatch()?; + // this is the last since it is the heaviest + PasskeySignatureCheck::new(payload.clone(), is_legacy_call).pre_dispatch() + } + } +} + +impl Pallet +where + BalanceOf: Send + Sync + From, + ::RuntimeCall: + From> + Dispatchable, +{ + /// Filtering the valid calls and extracting the Payload V2 from inside the call and returning if this + /// is a legacy call or not + fn filter_valid_calls( + call: &Call, + ) -> Result<(PasskeyPayloadV2, bool), TransactionValidityError> { + match call { + Call::proxy { payload } + if T::PasskeyCallFilter::contains(&payload.clone().passkey_call.call) => + Ok((payload.clone().into(), true)), + Call::proxy_v2 { payload } + if T::PasskeyCallFilter::contains(&payload.clone().passkey_call.call) => + Ok((payload.clone(), false)), + _ => Err(InvalidTransaction::Call.into()), + } + } +} + +/// Passkey specific nonce check which is a wrapper around `CheckNonce` extension +#[derive(Encode, Decode, Clone, TypeInfo)] +#[scale_info(skip_type_params(T))] +struct PasskeyNonceCheck(pub PasskeyCallV2); + +impl PasskeyNonceCheck +where + ::RuntimeCall: Dispatchable, +{ + pub fn new(passkey_call: PasskeyCallV2) -> Self { + Self(passkey_call) + } + + pub fn validate(&self) -> TransactionValidity { + let who = self.0.account_id.clone(); + let nonce = self.0.account_nonce; + let some_call: &::RuntimeCall = &self.0.call; + let info = &some_call.get_dispatch_info(); + + let passkey_nonce = CheckNonce::::from(nonce); + passkey_nonce.validate(&who, &some_call.clone().into(), info, 0usize) + } + + pub fn pre_dispatch(&self) -> Result<(), TransactionValidityError> { + let who = self.0.account_id.clone(); + let nonce = self.0.account_nonce; + let some_call: &::RuntimeCall = &self.0.call; + let info = &some_call.get_dispatch_info(); + + let passkey_nonce = CheckNonce::::from(nonce); + passkey_nonce.pre_dispatch(&who, &some_call.clone().into(), info, 0usize) + } +} + +/// Passkey signatures check which verifies 2 signatures +/// 1. Account signature of the P256 public key +/// 2. Passkey P256 signature of the account public key +#[derive(Encode, Decode, Clone, TypeInfo)] +#[scale_info(skip_type_params(T))] +struct PasskeySignatureCheck { + payload: PasskeyPayloadV2, + is_legacy_payload: bool, +} + +impl PasskeySignatureCheck { + pub fn new(passkey_payload: PasskeyPayloadV2, is_legacy_payload: bool) -> Self { + Self { payload: passkey_payload, is_legacy_payload } + } + + pub fn validate(&self) -> TransactionValidity { + // checking account signature to verify ownership of the account used + let signed_data = self.payload.passkey_public_key.clone(); + let signature = self.payload.account_ownership_proof.clone(); + let signer = &self.payload.passkey_call.account_id; + + Self::check_account_signature(signer, &signed_data, &signature) + .map_err(|_e| TransactionValidityError::Invalid(InvalidTransaction::BadSigner))?; + + // checking the passkey signature to ensure access to the passkey + let p256_signed_data = match self.is_legacy_payload { + true => PasskeyPayload::from(self.payload.clone()).passkey_call.encode(), + false => self.payload.passkey_call.encode(), + }; + let p256_signature = self.payload.verifiable_passkey_signature.clone(); + let p256_signer = self.payload.passkey_public_key.clone(); + + p256_signature + .try_verify(&p256_signed_data, &p256_signer) + .map_err(|e| match e { + PasskeyVerificationError::InvalidProof => + TransactionValidityError::Invalid(InvalidTransaction::BadSigner), + _ => TransactionValidityError::Invalid(InvalidTransaction::Custom(e.into())), + })?; + + Ok(ValidTransaction::default()) + } + + pub fn pre_dispatch(&self) -> Result<(), TransactionValidityError> { + let _ = self.validate()?; + Ok(()) + } + + /// Check the signature on passkey public key by the account id + /// Returns Ok(()) if the signature is valid + /// Returns Err(InvalidAccountSignature) if the signature is invalid + /// # Arguments + /// * `signer` - The account id of the signer + /// * `signed_data` - The signed data + /// * `signature` - The signature + /// # Return + /// * `Ok(())` if the signature is valid + /// * `Err(InvalidAccountSignature)` if the signature is invalid + fn check_account_signature

( + signer: &T::AccountId, + payload: &P, + signature: &MultiSignature, + ) -> DispatchResult + where + P: Encode + EIP712Encode, + { + let key = T::ConvertIntoAccountId32::convert((*signer).clone()); + + if !check_signature(signature, key, payload) { + return Err(Error::::InvalidAccountSignature.into()); + } + + Ok(()) + } +} + +/// Passkey related tx payment +#[derive(Encode, Decode, Clone, TypeInfo)] +#[scale_info(skip_type_params(T))] +pub struct ChargeTransactionPayment(pub T::AccountId, pub Call); + +impl ChargeTransactionPayment +where + BalanceOf: Send + Sync + From, + ::RuntimeCall: + From> + Dispatchable, + ::RuntimeOrigin: AsTransactionAuthorizedOrigin, +{ + /// Validates the transaction fee paid with tokens. + pub fn pre_dispatch(&self) -> Result<(), TransactionValidityError> { + let info = &self.1.get_dispatch_info(); + let len = self.1.using_encoded(|c| c.len()); + let runtime_call: ::RuntimeCall = + ::RuntimeCall::from(self.1.clone()); + + let raw_origin = RawOrigin::from(Some(self.0.clone())); + let who = ::RuntimeOrigin::from(raw_origin); + pallet_transaction_payment::ChargeTransactionPayment::::from(Zero::zero()) + .validate_and_prepare(who, &runtime_call, info, len, 4)?; + Ok(()) + } + + /// Validates the transaction fee paid with tokens. + pub fn validate(&self) -> TransactionValidity { + let info = &self.1.get_dispatch_info(); + let len = self.1.using_encoded(|c| c.len()); + let runtime_call: ::RuntimeCall = + ::RuntimeCall::from(self.1.clone()); + let raw_origin = RawOrigin::from(Some(self.0.clone())); + let who = ::RuntimeOrigin::from(raw_origin); + + let (res, _, _) = + pallet_transaction_payment::ChargeTransactionPayment::::from(Zero::zero()) + .validate( + who, + &runtime_call, + info, + len, + (), + &TxBaseImplication(runtime_call.clone()), // implication + TransactionSource::External, + )?; + Ok(res) + } +} + +/// Frame system related checks +#[derive(Encode, Decode, Clone, TypeInfo)] +#[scale_info(skip_type_params(T))] +pub struct FrameSystemChecks(pub T::AccountId, pub Call); + +impl FrameSystemChecks +where + ::RuntimeCall: + From> + Dispatchable, +{ + /// Validates the transaction fee paid with tokens. + pub fn pre_dispatch(&self) -> Result<(), TransactionValidityError> { + let info = &self.1.get_dispatch_info(); + let len = self.1.using_encoded(|c| c.len()); + let runtime_call: ::RuntimeCall = + ::RuntimeCall::from(self.1.clone()); + + let raw_origin = RawOrigin::from(Some(self.0.clone())); + let who = ::RuntimeOrigin::from(raw_origin); + + let non_zero_sender_check = frame_system::CheckNonZeroSender::::new(); + let spec_version_check = frame_system::CheckSpecVersion::::new(); + let tx_version_check = frame_system::CheckTxVersion::::new(); + let genesis_hash_check = frame_system::CheckGenesis::::new(); + let era_check = frame_system::CheckEra::::from(Era::immortal()); + + // currently (in stable2412) these implement the default version of `prepare`, which always returns Ok(...) + // val, origin, call, info, len (?) + non_zero_sender_check.prepare((), &who, &runtime_call, info, len)?; + spec_version_check.prepare((), &who, &runtime_call, info, len)?; + tx_version_check.prepare((), &who, &runtime_call, info, len)?; + genesis_hash_check.prepare((), &who, &runtime_call, info, len)?; + era_check.prepare((), &who, &runtime_call, info, len) + } + + /// Validates the transaction fee paid with tokens. + pub fn validate(&self) -> TransactionValidity { + let info = &self.1.get_dispatch_info(); + let len = self.1.using_encoded(|c| c.len()); + let runtime_call: ::RuntimeCall = + ::RuntimeCall::from(self.1.clone()); + let implication = TxBaseImplication(runtime_call.clone()); + let raw_origin = RawOrigin::from(Some(self.0.clone())); + let who = ::RuntimeOrigin::from(raw_origin); + + let non_zero_sender_check = frame_system::CheckNonZeroSender::::new(); + let spec_version_check = frame_system::CheckSpecVersion::::new(); + let tx_version_check = frame_system::CheckTxVersion::::new(); + let genesis_hash_check = frame_system::CheckGenesis::::new(); + let era_check = frame_system::CheckEra::::from(Era::immortal()); + + let (non_zero_sender_validity, _, origin) = non_zero_sender_check.validate( + who.clone(), + &runtime_call, + info, + len, + (), + &implication, + TransactionSource::External, + )?; + + let (spec_version_validity, _, origin) = spec_version_check.validate( + origin, + &runtime_call, + info, + len, + spec_version_check.implicit()?, + &implication, + TransactionSource::External, + )?; + + let (tx_version_validity, _, origin) = tx_version_check.validate( + origin, + &runtime_call, + info, + len, + tx_version_check.implicit()?, + &implication, + TransactionSource::External, + )?; + + let (genesis_hash_validity, _, origin) = genesis_hash_check.validate( + origin, + &runtime_call, + info, + len, + genesis_hash_check.implicit()?, + &implication, + TransactionSource::External, + )?; + + let (era_validity, _, _) = era_check.validate( + origin, + &runtime_call, + info, + len, + era_check.implicit()?, + &implication, + TransactionSource::External, + )?; + + Ok(non_zero_sender_validity + .combine_with(spec_version_validity) + .combine_with(tx_version_validity) + .combine_with(genesis_hash_validity) + .combine_with(era_validity)) + } +} + +/// Block resource (weight) limit check. +#[derive(Encode, Decode, Clone, TypeInfo)] +#[scale_info(skip_type_params(T))] +pub struct PasskeyWeightCheck(pub T::AccountId, pub Call); + +impl PasskeyWeightCheck +where + ::RuntimeCall: + From> + Dispatchable, +{ + /// creating a new instance + pub fn new(account_id: T::AccountId, call: Call) -> Self { + Self(account_id, call) + } + + /// Validate the transaction + pub fn validate(&self) -> TransactionValidity { + let info = &self.1.get_dispatch_info(); + let len = self.1.using_encoded(|c| c.len()); + let runtime_call: ::RuntimeCall = + ::RuntimeCall::from(self.1.clone()); + let implication = TxBaseImplication(runtime_call.clone()); + let raw_origin = RawOrigin::from(Some(self.0.clone())); + let who = ::RuntimeOrigin::from(raw_origin); + + let check_weight = CheckWeight::::new(); + let (result, _, _) = check_weight.validate( + who, + &runtime_call, + info, + len, + (), + &implication, + TransactionSource::External, + )?; + Ok(result) + } + + /// Pre-dispatch transaction checks + pub fn pre_dispatch(&self) -> Result<(), TransactionValidityError> { + let info = &self.1.get_dispatch_info(); + let len = self.1.using_encoded(|c| c.len()); + let runtime_call: ::RuntimeCall = + ::RuntimeCall::from(self.1.clone()); + + CheckWeight::::bare_validate_and_prepare(&runtime_call, info, len) + } +} diff --git a/pallets/passkey/src/mock.rs b/pallets/passkey/src/mock.rs new file mode 100644 index 0000000000..d1879a8145 --- /dev/null +++ b/pallets/passkey/src/mock.rs @@ -0,0 +1,156 @@ +//! Mocks for the Passkey module. +use crate as pallet_passkey; +use crate::*; +use frame_support::{ + construct_runtime, parameter_types, + traits::{ConstU32, ConstU64, Contains, Everything}, + weights::WeightToFee as WeightToFeeTrait, +}; +use pallet_transaction_payment::FungibleAdapter; +use sp_core::{ConstU8, H256}; +use sp_runtime::{ + traits::{ConvertInto, IdentityLookup}, + BuildStorage, SaturatedConversion, +}; + +use common_primitives::node::AccountId; + +type Block = frame_system::mocking::MockBlockU32; + +// Needs parameter_types! for the impls below +parameter_types! { + pub static WeightToFee: u64 = 1; + pub static TransactionByteFee: u64 = 1; +} + +impl WeightToFeeTrait for WeightToFee { + type Balance = u64; + + fn weight_to_fee(weight: &Weight) -> Self::Balance { + Self::Balance::saturated_from(weight.ref_time()) + .saturating_mul(WEIGHT_TO_FEE.with(|v| *v.borrow())) + } +} + +impl WeightToFeeTrait for TransactionByteFee { + type Balance = u64; + + fn weight_to_fee(weight: &Weight) -> Self::Balance { + Self::Balance::saturated_from(weight.ref_time()) + .saturating_mul(TRANSACTION_BYTE_FEE.with(|v| *v.borrow())) + } +} + +construct_runtime!( + pub enum Test + { + System: frame_system::{Pallet, Call, Storage, Config, Event}, + Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, + Passkey: pallet_passkey::{Pallet, Storage, Call, Event, ValidateUnsigned}, + TransactionPayment: pallet_transaction_payment::{Pallet, Storage, Event}, + } +); + +impl frame_system::Config for Test { + type RuntimeOrigin = RuntimeOrigin; + type RuntimeCall = RuntimeCall; + type Nonce = u64; + type Hash = H256; + type Hashing = ::sp_runtime::traits::BlakeTwo256; + type AccountId = AccountId; + type Lookup = IdentityLookup; + type RuntimeEvent = RuntimeEvent; + type Block = Block; + type RuntimeTask = RuntimeTask; + type BlockHashCount = ConstU32<250>; + type BlockWeights = (); + type BlockLength = (); + type Version = (); + type PalletInfo = PalletInfo; + type AccountData = pallet_balances::AccountData; + type OnNewAccount = (); + type OnKilledAccount = (); + type DbWeight = (); + type BaseCallFilter = Everything; + type SystemWeightInfo = (); + type SS58Prefix = (); + type OnSetCode = (); + type MaxConsumers = ConstU32<16>; + type SingleBlockMigrations = (); + type MultiBlockMigrator = (); + type PreInherents = (); + type PostInherents = (); + type PostTransactions = (); + type ExtensionsWeightInfo = (); +} + +impl pallet_transaction_payment::Config for Test { + type RuntimeEvent = RuntimeEvent; + type OnChargeTransaction = FungibleAdapter; + type WeightToFee = WeightToFee; + type LengthToFee = TransactionByteFee; + type FeeMultiplierUpdate = (); + type OperationalFeeMultiplier = ConstU8<5>; + type WeightInfo = (); +} + +impl pallet_passkey::Config for Test { + type RuntimeEvent = RuntimeEvent; + type WeightInfo = (); + type RuntimeCall = RuntimeCall; + type ConvertIntoAccountId32 = ConvertInto; + type PasskeyCallFilter = MockPasskeyCallFilter; + #[cfg(feature = "runtime-benchmarks")] + type Currency = Balances; +} + +impl pallet_balances::Config for Test { + type DustRemoval = (); + type RuntimeEvent = RuntimeEvent; + type Balance = u64; + type MaxLocks = (); + type WeightInfo = (); + type ReserveIdentifier = [u8; 8]; + type ExistentialDeposit = ConstU64<1>; + type AccountStore = System; + type MaxReserves = (); + type FreezeIdentifier = RuntimeFreezeReason; + type RuntimeFreezeReason = (); + type MaxFreezes = ConstU32<1>; + type RuntimeHoldReason = (); + type DoneSlashHandler = (); +} + +pub struct MockPasskeyCallFilter; + +impl Contains for MockPasskeyCallFilter { + fn contains(call: &RuntimeCall) -> bool { + match call { + RuntimeCall::System(frame_system::Call::remark { .. }) | + RuntimeCall::Balances(pallet_balances::Call::transfer_keep_alive { .. }) | + RuntimeCall::Balances(pallet_balances::Call::transfer_allow_death { .. }) | + RuntimeCall::Balances(pallet_balances::Call::transfer_all { .. }) => true, + _ => false, + } + } +} + +pub fn new_test_ext() -> sp_io::TestExternalities { + let mut ext: sp_io::TestExternalities = + frame_system::GenesisConfig::::default().build_storage().unwrap().into(); + ext.execute_with(|| System::set_block_number(1)); + ext +} + +#[cfg(feature = "runtime-benchmarks")] +pub fn new_test_ext_keystore() -> sp_io::TestExternalities { + use sp_keystore::{testing::MemoryKeystore, KeystoreExt, KeystorePtr}; + extern crate alloc; + use alloc::sync::Arc; + + let t = frame_system::GenesisConfig::::default().build_storage().unwrap(); + let mut ext = sp_io::TestExternalities::new(t); + ext.register_extension(KeystoreExt(Arc::new(MemoryKeystore::new()) as KeystorePtr)); + + ext +} diff --git a/pallets/passkey/src/test_common.rs b/pallets/passkey/src/test_common.rs new file mode 100644 index 0000000000..528b2ad0f1 --- /dev/null +++ b/pallets/passkey/src/test_common.rs @@ -0,0 +1,56 @@ +/// +/// Constants used both in benchmarks and tests +/// +#[allow(unused)] +pub mod constants { + use super::*; + /// client data json in base64-url format, the challenged is replaced with `#rplc#` + pub const REPLACED_CLIENT_DATA_JSON: &str = "eyJ0eXBlIjoid2ViYXV0aG4uZ2V0IiwiY2hhbGxlbmdlIjoiI3JwbGMjIiwib3JpZ2luIjoiaHR0cHM6Ly9wYXNza2V5LmFtcGxpY2EuaW86ODA4MCIsImNyb3NzT3JpZ2luIjpmYWxzZSwiYWxnIjoiSFMyNTYifQ"; + /// authenticator data in base64-url format + pub const AUTHENTICATOR_DATA: &str = "WJ8JTNbivTWn-433ubs148A7EgWowi4SAcYBjLWfo1EdAAAAAA"; +} + +/// Utility functions to be used across tests and benchmarks +#[allow(unused)] +pub mod utilities { + use crate::{PasskeyPublicKey, PasskeySignature, CHALLENGE_PLACEHOLDER}; + use p256::{ + ecdsa::{signature::Signer, SigningKey}, + elliptic_curve::sec1::ToEncodedPoint, + }; + use sp_io::hashing::sha2_256; + + /// get PasskeyPublicKey from Secret key + pub fn get_p256_public_key(secret: &p256::SecretKey) -> Result { + let encoded = secret.public_key().to_encoded_point(true); + let passkey_public_key: PasskeyPublicKey = encoded.try_into().map_err(|_| ())?; + Ok(passkey_public_key) + } + /// getting a passkey specific signature + pub fn passkey_sign( + secret: &p256::SecretKey, + payload: &[u8], + client_data_json: &[u8], + authenticator_data: &[u8], + ) -> Result { + let signing_key: SigningKey = secret.into(); + let calculated_challenge = sha2_256(payload); + let calculated_challenge_base64url = base64_url::encode(&calculated_challenge); + + // inject challenge inside clientJsonData + let str_of_json = core::str::from_utf8(client_data_json).map_err(|_| ())?; + let original_client_data_json = + str_of_json.replace(CHALLENGE_PLACEHOLDER, &calculated_challenge_base64url); + + // prepare signing payload which is [authenticator || sha256(client_data_json)] + let mut passkey_signature_payload = authenticator_data.to_vec(); + passkey_signature_payload + .extend_from_slice(&sha2_256(original_client_data_json.as_bytes())); + + let (signature, _) = signing_key.try_sign(&passkey_signature_payload).map_err(|_| ())?; + let der_sig = p256::ecdsa::DerSignature::from(signature); + let passkey_signature: PasskeySignature = + der_sig.as_bytes().to_vec().try_into().map_err(|_| ())?; + Ok(passkey_signature) + } +} diff --git a/pallets/passkey/src/tests.rs b/pallets/passkey/src/tests.rs new file mode 100644 index 0000000000..af74e64382 --- /dev/null +++ b/pallets/passkey/src/tests.rs @@ -0,0 +1,587 @@ +//! Unit tests for the passkey module. +use super::*; +use crate::mock::Passkey; +use common_primitives::utils::wrap_binary_data; +use frame_support::{assert_err, assert_noop, assert_ok, dispatch::RawOrigin}; +use frame_system::{limits::BlockLength, Call as SystemCall}; +use mock::*; + +use crate::test_common::{ + constants::{AUTHENTICATOR_DATA, REPLACED_CLIENT_DATA_JSON}, + utilities::*, +}; +use common_primitives::signatures::{UnifiedSignature, UnifiedSigner}; +use pallet_balances::Call as BalancesCall; +use sp_core::{bytes::from_hex, ecdsa, sr25519, sr25519::Public, Pair}; +use sp_runtime::{ + traits::{IdentifyAccount, One, Verify}, + DispatchError::BadOrigin, +}; + +struct TestPasskeyPayloadBuilder { + secret: p256::SecretKey, + key_pair: sr25519::Pair, + passkey_public_key: PasskeyPublicKey, + payload_to_sign: Vec, + nonce: u32, + call: ::RuntimeCall, + invalid_passkey_signature: bool, +} + +impl TestPasskeyPayloadBuilder { + pub fn new() -> Self { + let (key_pair, _) = sr25519::Pair::generate(); + Self { + secret: p256::SecretKey::from_slice(&[ + 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, + ]) + .unwrap(), + key_pair, + passkey_public_key: PasskeyPublicKey([0u8; 33]), + payload_to_sign: vec![], + nonce: 0u32, + call: RuntimeCall::System(SystemCall::remark { remark: vec![1, 2, 3u8] }), + invalid_passkey_signature: false, + } + } + + pub fn with_a_valid_passkey(mut self) -> Self { + self.passkey_public_key = get_p256_public_key(&self.secret).unwrap(); + self + } + + pub fn with_custom_payload(mut self, payload: Vec) -> Self { + self.payload_to_sign = payload; + self + } + + pub fn with_passkey_as_payload(mut self) -> Self { + self.payload_to_sign = self.passkey_public_key.inner().to_vec(); + self + } + + pub fn with_account_nonce(mut self, nonce: u32) -> Self { + self.nonce = nonce; + self + } + + pub fn with_call(mut self, call: ::RuntimeCall) -> Self { + self.call = call; + self + } + + pub fn with_invalid_passkey_signature(mut self) -> Self { + self.invalid_passkey_signature = true; + self + } + + pub fn with_funded_account(self, amount: u64) -> Self { + assert_ok!(Balances::force_set_balance( + RawOrigin::Root.into(), + self.key_pair.public().into(), + amount + )); + self + } + + pub fn build(&self) -> (PasskeyPayload, Public) { + let wrapped_binary = wrap_binary_data(self.payload_to_sign.clone()); + let signature: MultiSignature = self.key_pair.sign(wrapped_binary.as_slice()).into(); + let client_data = base64_url::decode(REPLACED_CLIENT_DATA_JSON).unwrap(); + let authenticator = base64_url::decode(AUTHENTICATOR_DATA).unwrap(); + let bad_authenticator = b"bad_auth".to_vec(); + let call: PasskeyCall = PasskeyCall { + account_id: self.key_pair.public().into(), + account_nonce: self.nonce.into(), + account_ownership_proof: signature, + call: Box::new(self.call.clone()), + }; + let passkey_signature = passkey_sign( + &self.secret, + &call.encode(), + &client_data, + match self.invalid_passkey_signature { + true => &bad_authenticator, + false => &authenticator, + }, + ) + .unwrap(); + let payload = PasskeyPayload { + passkey_public_key: self.passkey_public_key.clone(), + verifiable_passkey_signature: VerifiablePasskeySignature { + signature: passkey_signature, + client_data_json: client_data.try_into().unwrap(), + authenticator_data: authenticator.try_into().unwrap(), + }, + passkey_call: call, + }; + (payload, self.key_pair.public()) + } +} + +#[test] +#[allow(deprecated)] +fn proxy_call_with_signed_origin_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let (test_account_2_key_pair, _) = sr25519::Pair::generate(); + let (payload, account_pk) = TestPasskeyPayloadBuilder::new() + .with_passkey_as_payload() + .with_call(RuntimeCall::Balances(BalancesCall::transfer_allow_death { + dest: test_account_2_key_pair.public().into(), + value: 100, + })) + .build(); + + // assert + assert_noop!(Passkey::proxy(RuntimeOrigin::signed(account_pk.into()), payload), BadOrigin); + }); +} + +#[test] +#[allow(deprecated)] +fn proxy_call_with_unsigned_origin_should_work() { + new_test_ext().execute_with(|| { + // arrange + let (payload, _) = TestPasskeyPayloadBuilder::new() + .with_passkey_as_payload() + .with_call(RuntimeCall::System(SystemCall::remark { remark: vec![1, 2, 3u8] })) + .build(); + + // assert + assert_ok!(Passkey::proxy(RuntimeOrigin::none(), payload)); + }); +} + +#[test] +fn validate_unsigned_with_bad_account_signature_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let (payload, _) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_custom_payload("bad data".as_bytes().to_vec()) + .with_call(RuntimeCall::System(SystemCall::remark { remark: vec![1, 2, 3u8] })) + .with_funded_account(10000000000) + .build(); + + let res = Passkey::validate_unsigned(TransactionSource::InBlock, &Call::proxy { payload }); + // assert + assert_eq!(res, InvalidTransaction::BadSigner.into()); + }); +} + +#[test] +fn validate_unsigned_with_bad_passkey_signature_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let amount = 10000000000; + let (payload, _) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::System(SystemCall::remark { remark: vec![1, 2, 3u8] })) + .with_funded_account(amount) + .with_invalid_passkey_signature() + .build(); + + let res = Passkey::validate_unsigned(TransactionSource::InBlock, &Call::proxy { payload }); + // assert + assert_eq!(res, InvalidTransaction::BadSigner.into()); + }); +} + +#[test] +fn validate_unsigned_with_low_funds_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let (payload, _) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::System(SystemCall::remark { remark: vec![1, 2, 3u8] })) + .build(); + + // act + let res = Passkey::validate_unsigned(TransactionSource::InBlock, &Call::proxy { payload }); + // assert + assert_eq!(res, InvalidTransaction::Payment.into()); + }); +} + +#[test] +fn validate_unsigned_with_funds_should_pass() { + new_test_ext().execute_with(|| { + // arrange + let (payload, _) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::System(SystemCall::remark { remark: vec![1, 2, 3u8] })) + .with_funded_account(10000000000) + .build(); + + // act + let res = Passkey::validate_unsigned(TransactionSource::InBlock, &Call::proxy { payload }); + + // assert + assert!(res.is_ok()); + }); +} + +#[test] +fn pre_dispatch_with_funds_should_pass() { + new_test_ext().execute_with(|| { + // arrange + let (payload, _) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::System(SystemCall::remark { remark: vec![1, 2, 3u8] })) + .with_funded_account(10000000000) + .build(); + + // act + let res = Passkey::pre_dispatch(&Call::proxy { payload }); + + // assert + assert!(res.is_ok()); + }); +} + +#[test] +fn pre_dispatch_with_low_funds_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let (payload, _) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::System(SystemCall::remark { remark: vec![1, 2, 3u8] })) + .build(); + + // act + let res = Passkey::pre_dispatch(&Call::proxy { payload }); + + // assert + assert_err!(res, InvalidTransaction::Payment); + }); +} + +#[test] +fn validate_unsigned_should_not_remove_fee_on_successful_validation() { + new_test_ext().execute_with(|| { + // arrange + let (test_account_2_key_pair, _) = sr25519::Pair::generate(); + let (payload, account_pk) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::Balances(BalancesCall::transfer_allow_death { + dest: test_account_2_key_pair.public().into(), + value: 100, + })) + .with_funded_account(10000000000) + .build(); + + let account_id: ::AccountId = account_pk.into(); + let initial_balance = Balances::free_balance(&account_id); + + // act + let res = Passkey::validate_unsigned(TransactionSource::InBlock, &Call::proxy { payload }); + + // assert + assert!(res.is_ok()); + let final_balance = Balances::free_balance(&account_id); + assert_eq!(final_balance, initial_balance); + }); +} + +#[test] +fn pre_dispatch_should_remove_fee_on_successful_validation() { + new_test_ext().execute_with(|| { + // arrange + let (test_account_2_key_pair, _) = sr25519::Pair::generate(); + let (payload, account_pk) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::Balances(BalancesCall::transfer_allow_death { + dest: test_account_2_key_pair.public().into(), + value: 100, + })) + .with_funded_account(10000000000) + .build(); + + let account_id: ::AccountId = account_pk.into(); + let initial_balance = Balances::free_balance(&account_id); + + // act + let res = Passkey::pre_dispatch(&Call::proxy { payload }); + + // assert + assert!(res.is_ok()); + let final_balance = Balances::free_balance(&account_id); + assert!(final_balance < initial_balance); + }); +} + +#[test] +#[allow(deprecated)] +fn fee_withdrawn_for_failed_call() { + new_test_ext().execute_with(|| { + // arrange + let amount = 10000000000; + let (test_account_2_key_pair, _) = sr25519::Pair::generate(); + let (payload, account_pk) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::Balances(BalancesCall::transfer_allow_death { + dest: test_account_2_key_pair.public().into(), + value: amount, + })) + .with_funded_account(amount) + .build(); + + let account_id: ::AccountId = account_pk.into(); + let initial_balance = Balances::free_balance(&account_id); + + // act + let validate_result = Passkey::pre_dispatch(&Call::proxy { payload: payload.clone() }); + let extrinsic_result = Passkey::proxy(RuntimeOrigin::none(), payload); + + // assert + assert!(validate_result.is_ok()); + assert!(extrinsic_result.is_err()); + let final_balance = Balances::free_balance(&account_id); + assert!(final_balance < initial_balance); + }); +} + +#[test] +fn validate_unsigned_with_unsupported_call_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let (payload, _) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + // remark_with_event is an unsupported call + .with_call(RuntimeCall::System(SystemCall::remark_with_event { + remark: vec![1, 2, 3u8], + })) + .build(); + + // act + let v = Passkey::validate_unsigned(TransactionSource::InBlock, &Call::proxy { payload }); + + // assert + assert_err!(v, InvalidTransaction::Call); + }); +} + +#[test] +fn validate_unsigned_with_used_nonce_should_fail_with_stale() { + new_test_ext().execute_with(|| { + // arrange + let (test_account_2_key_pair, _) = sr25519::Pair::generate(); + let (payload, account_pk) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::Balances(BalancesCall::transfer_allow_death { + dest: test_account_2_key_pair.public().into(), + value: 10000, + })) + .with_funded_account(10000000000) + .with_account_nonce(0) + .build(); + + let who: ::AccountId = account_pk.into(); + let mut account = frame_system::Account::::get(&who); + account.nonce += 1; + frame_system::Account::::insert(who, account); + + // act + let v = Passkey::validate_unsigned(TransactionSource::InBlock, &Call::proxy { payload }); + + // assert + assert_err!(v, InvalidTransaction::Stale); + }); +} + +#[test] +fn validate_unsigned_with_correct_nonce_should_work() { + new_test_ext().execute_with(|| { + // arrange + let (test_account_2_key_pair, _) = sr25519::Pair::generate(); + let (payload, account_pk) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::Balances(BalancesCall::transfer_allow_death { + dest: test_account_2_key_pair.public().into(), + value: 10000, + })) + .with_funded_account(10000000000) + .with_account_nonce(2) + .build(); + + let who: ::AccountId = account_pk.into(); + let mut account = frame_system::Account::::get(&who); + account.nonce += 1; + frame_system::Account::::insert(who.clone(), account); + + // act + let v = Passkey::validate_unsigned(TransactionSource::InBlock, &Call::proxy { payload }); + + // assert + assert!(v.is_ok()); + assert!(v.clone().unwrap().priority > 0); + assert_eq!(v.clone().unwrap().requires, vec![Encode::encode(&(who.clone(), 1u64))]); + assert_eq!(v.clone().unwrap().provides, vec![Encode::encode(&(who, 2u64))]); + }); +} + +#[test] +fn validate_unsigned_with_exceeding_weights_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let block_length = BlockLength::default(); + let max = block_length.max.get(DispatchClass::Normal); + let (payload, _) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::System(SystemCall::remark { remark: vec![1u8; *max as usize] })) + .with_funded_account(10000000000) + .build(); + + // act + let v = Passkey::validate_unsigned(TransactionSource::InBlock, &Call::proxy { payload }); + + // assert + assert_err!(v, InvalidTransaction::ExhaustsResources); + }); +} + +#[test] +fn pre_dispatch_unsigned_with_used_nonce_should_fail_with_stale() { + new_test_ext().execute_with(|| { + // arrange + let (test_account_2_key_pair, _) = sr25519::Pair::generate(); + let (payload, account_pk) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::Balances(BalancesCall::transfer_allow_death { + dest: test_account_2_key_pair.public().into(), + value: 10000, + })) + .with_funded_account(10000000000) + .with_account_nonce(0) + .build(); + let who: ::AccountId = account_pk.into(); + let mut account = frame_system::Account::::get(&who); + account.nonce += 1; + frame_system::Account::::insert(who, account); + + // act + let v = Passkey::pre_dispatch(&Call::proxy { payload }); + + // assert + assert_err!(v, InvalidTransaction::Stale); + }); +} + +#[test] +fn pre_dispatch_unsigned_with_future_nonce_should_fail_with_future() { + new_test_ext().execute_with(|| { + // arrange + let (test_account_2_key_pair, _) = sr25519::Pair::generate(); + let (payload, _) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::Balances(BalancesCall::transfer_allow_death { + dest: test_account_2_key_pair.public().into(), + value: 10000, + })) + .with_funded_account(10000000000) + // setting a future nonce + .with_account_nonce(2) + .build(); + + // act + let v = Passkey::pre_dispatch(&Call::proxy { payload }); + + // assert + assert_err!(v, InvalidTransaction::Future); + }); +} + +#[test] +fn pre_dispatch_unsigned_should_increment_nonce_on_success() { + new_test_ext().execute_with(|| { + // arrange + let (payload, account_pk) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::System(SystemCall::remark { remark: vec![1u8; 3usize] })) + .with_funded_account(10000000000) + .build(); + let account_1_pk: ::AccountId = account_pk.into(); + + // act + assert_ok!(Passkey::pre_dispatch(&Call::proxy { payload })); + + // assert + let account = frame_system::Account::::get(&account_1_pk); + assert_eq!(account.nonce, ::Nonce::one()); + }); +} + +#[test] +fn pre_dispatch_with_exceeding_weight_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let block_length = BlockLength::default(); + let max = block_length.max.get(DispatchClass::Normal); + let (payload, _) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::System(SystemCall::remark { remark: vec![1u8; *max as usize] })) + .with_funded_account(10000000000) + .build(); + + // act + let v = Passkey::pre_dispatch(&Call::proxy { payload }); + + // assert + assert_err!(v, InvalidTransaction::ExhaustsResources); + }); +} + +#[test] +fn passkey_public_key_scale_and_eip712_compatibility_guard() { + let public_key = [ + 0u8, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, + ]; + let pass_key = PasskeyPublicKey(public_key.clone()); + + assert_eq!(pass_key.encode(), pass_key.inner().encode()); + assert_eq!(pass_key.encode(), pass_key.inner()); + assert_eq!(pass_key.encode(), public_key); +} + +#[test] +fn ethereum_eip712_signatures_for_passkey_publickey_should_work() { + new_test_ext().execute_with(|| { + let payload = PasskeyPublicKey (from_hex("0x40a6836ea489047852d3f0297f8fe8ad6779793af4e9c6274c230c207b9b825026").unwrap().try_into().unwrap()); + let encoded_payload = payload.encode_eip_712(); + + // following signature is generated via Metamask using the same input to check compatibility + let signature_raw = from_hex("0xbafaf5e21695a502b2d356b4558da35245aa1be7161f01a5f0224fbfdf85b5c52898fc495ab1ca9b68c3b07e23d31a5fe1686165344b22bc14201f293d54f36b1b").expect("Should convert"); + let unified_signature = UnifiedSignature::from(ecdsa::Signature::from_raw( + signature_raw.try_into().expect("should convert"), + )); + + // Non-compressed public key associated with the keypair used in Metamask + // 0x509540919faacf9ab52146c9aa40db68172d83777250b28e4679176e49ccdd9fa213197dc0666e85529d6c9dda579c1295d61c417f01505765481e89a4016f02 + let public_key = ecdsa::Public::from_raw( + from_hex("0x02509540919faacf9ab52146c9aa40db68172d83777250b28e4679176e49ccdd9f") + .expect("should convert") + .try_into() + .expect("invalid size"), + ); + let unified_signer = UnifiedSigner::from(public_key); + assert!(unified_signature.verify(&encoded_payload[..], &unified_signer.into_account())); + }); +} diff --git a/pallets/passkey/src/tests_v2.rs b/pallets/passkey/src/tests_v2.rs new file mode 100644 index 0000000000..1be0340f1f --- /dev/null +++ b/pallets/passkey/src/tests_v2.rs @@ -0,0 +1,585 @@ +//! Unit tests for the passkey module. +use super::*; +use crate::mock::Passkey; +use common_primitives::utils::wrap_binary_data; +use frame_support::{assert_err, assert_noop, assert_ok, dispatch::RawOrigin}; +use frame_system::{limits::BlockLength, Call as SystemCall}; +use mock::*; + +use crate::test_common::{ + constants::{AUTHENTICATOR_DATA, REPLACED_CLIENT_DATA_JSON}, + utilities::*, +}; +use pallet_balances::Call as BalancesCall; +use sp_core::{bytes::from_hex, ecdsa, sr25519, sr25519::Public, Pair}; +use sp_runtime::{traits::One, DispatchError::BadOrigin}; + +struct TestPasskeyPayloadBuilder { + secret: p256::SecretKey, + key_pair: sr25519::Pair, + passkey_public_key: PasskeyPublicKey, + payload_to_sign: Vec, + nonce: u32, + call: ::RuntimeCall, + invalid_passkey_signature: bool, +} + +impl TestPasskeyPayloadBuilder { + pub fn new() -> Self { + let (key_pair, _) = sr25519::Pair::generate(); + Self { + secret: p256::SecretKey::from_slice(&[ + 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, + ]) + .unwrap(), + key_pair, + passkey_public_key: PasskeyPublicKey([0u8; 33]), + payload_to_sign: vec![], + nonce: 0u32, + call: RuntimeCall::System(SystemCall::remark { remark: vec![1, 2, 3u8] }), + invalid_passkey_signature: false, + } + } + + pub fn with_a_valid_passkey(mut self) -> Self { + self.passkey_public_key = get_p256_public_key(&self.secret).unwrap(); + self + } + + pub fn with_custom_payload(mut self, payload: Vec) -> Self { + self.payload_to_sign = payload; + self + } + + pub fn with_passkey_as_payload(mut self) -> Self { + self.payload_to_sign = self.passkey_public_key.inner().to_vec(); + self + } + + pub fn with_account_nonce(mut self, nonce: u32) -> Self { + self.nonce = nonce; + self + } + + pub fn with_call(mut self, call: ::RuntimeCall) -> Self { + self.call = call; + self + } + + pub fn with_invalid_passkey_signature(mut self) -> Self { + self.invalid_passkey_signature = true; + self + } + + pub fn with_funded_account(self, amount: u64) -> Self { + assert_ok!(Balances::force_set_balance( + RawOrigin::Root.into(), + self.key_pair.public().into(), + amount + )); + self + } + + pub fn build(&self) -> (PasskeyPayloadV2, Public) { + let wrapped_binary = wrap_binary_data(self.payload_to_sign.clone()); + let signature: MultiSignature = self.key_pair.sign(wrapped_binary.as_slice()).into(); + let client_data = base64_url::decode(REPLACED_CLIENT_DATA_JSON).unwrap(); + let authenticator = base64_url::decode(AUTHENTICATOR_DATA).unwrap(); + let bad_authenticator = b"bad_auth".to_vec(); + let call: PasskeyCallV2 = PasskeyCallV2 { + account_id: self.key_pair.public().into(), + account_nonce: self.nonce.into(), + call: Box::new(self.call.clone()), + }; + let passkey_signature = passkey_sign( + &self.secret, + &call.encode(), + &client_data, + match self.invalid_passkey_signature { + true => &bad_authenticator, + false => &authenticator, + }, + ) + .unwrap(); + let payload = PasskeyPayloadV2 { + passkey_public_key: self.passkey_public_key.clone(), + verifiable_passkey_signature: VerifiablePasskeySignature { + signature: passkey_signature, + client_data_json: client_data.try_into().unwrap(), + authenticator_data: authenticator.try_into().unwrap(), + }, + account_ownership_proof: signature, + passkey_call: call, + }; + (payload, self.key_pair.public()) + } +} + +#[test] +fn proxy_call_with_signed_origin_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let (test_account_2_key_pair, _) = sr25519::Pair::generate(); + let (payload, account_pk) = TestPasskeyPayloadBuilder::new() + .with_passkey_as_payload() + .with_call(RuntimeCall::Balances(BalancesCall::transfer_allow_death { + dest: test_account_2_key_pair.public().into(), + value: 100, + })) + .build(); + + // assert + assert_noop!( + Passkey::proxy_v2(RuntimeOrigin::signed(account_pk.into()), payload), + BadOrigin + ); + }); +} + +#[test] +fn proxy_call_with_unsigned_origin_should_work() { + new_test_ext().execute_with(|| { + // arrange + let (payload, _) = TestPasskeyPayloadBuilder::new() + .with_passkey_as_payload() + .with_call(RuntimeCall::System(SystemCall::remark { remark: vec![1, 2, 3u8] })) + .build(); + + // assert + assert_ok!(Passkey::proxy_v2(RuntimeOrigin::none(), payload)); + }); +} + +#[test] +fn validate_unsigned_with_bad_account_signature_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let (payload, _) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_custom_payload("bad data".as_bytes().to_vec()) + .with_call(RuntimeCall::System(SystemCall::remark { remark: vec![1, 2, 3u8] })) + .with_funded_account(10000000000) + .build(); + + let res = + Passkey::validate_unsigned(TransactionSource::InBlock, &Call::proxy_v2 { payload }); + // assert + assert_eq!(res, InvalidTransaction::BadSigner.into()); + }); +} + +#[test] +fn validate_unsigned_with_bad_passkey_signature_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let amount = 10000000000; + let (payload, _) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::System(SystemCall::remark { remark: vec![1, 2, 3u8] })) + .with_funded_account(amount) + .with_invalid_passkey_signature() + .build(); + + let res = + Passkey::validate_unsigned(TransactionSource::InBlock, &Call::proxy_v2 { payload }); + // assert + assert_eq!(res, InvalidTransaction::BadSigner.into()); + }); +} + +#[test] +fn validate_unsigned_with_low_funds_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let (payload, _) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::System(SystemCall::remark { remark: vec![1, 2, 3u8] })) + .build(); + + // act + let res = + Passkey::validate_unsigned(TransactionSource::InBlock, &Call::proxy_v2 { payload }); + // assert + assert_eq!(res, InvalidTransaction::Payment.into()); + }); +} + +#[test] +fn validate_unsigned_with_funds_should_pass() { + new_test_ext().execute_with(|| { + // arrange + let (payload, _) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::System(SystemCall::remark { remark: vec![1, 2, 3u8] })) + .with_funded_account(10000000000) + .build(); + + // act + let res = + Passkey::validate_unsigned(TransactionSource::InBlock, &Call::proxy_v2 { payload }); + + // assert + assert!(res.is_ok()); + }); +} + +#[test] +fn pre_dispatch_with_funds_should_pass() { + new_test_ext().execute_with(|| { + // arrange + let (payload, _) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::System(SystemCall::remark { remark: vec![1, 2, 3u8] })) + .with_funded_account(10000000000) + .build(); + + // act + let res = Passkey::pre_dispatch(&Call::proxy_v2 { payload }); + + // assert + assert!(res.is_ok()); + }); +} + +#[test] +fn pre_dispatch_with_low_funds_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let (payload, _) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::System(SystemCall::remark { remark: vec![1, 2, 3u8] })) + .build(); + + // act + let res = Passkey::pre_dispatch(&Call::proxy_v2 { payload }); + + // assert + assert_err!(res, InvalidTransaction::Payment); + }); +} + +#[test] +fn validate_unsigned_fee_should_not_get_removed_on_successful_validation() { + new_test_ext().execute_with(|| { + // arrange + let (test_account_2_key_pair, _) = sr25519::Pair::generate(); + let (payload, account_pk) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::Balances(BalancesCall::transfer_allow_death { + dest: test_account_2_key_pair.public().into(), + value: 100, + })) + .with_funded_account(10000000000) + .build(); + + let account_id: ::AccountId = account_pk.into(); + let initial_balance = Balances::free_balance(&account_id); + + // act + let res = + Passkey::validate_unsigned(TransactionSource::InBlock, &Call::proxy_v2 { payload }); + + // assert + assert!(res.is_ok()); + let final_balance = Balances::free_balance(&account_id); + assert_eq!(final_balance, initial_balance); + }); +} + +#[test] +fn pre_dispatch_fee_should_get_removed_on_successful_validation() { + new_test_ext().execute_with(|| { + // arrange + let (test_account_2_key_pair, _) = sr25519::Pair::generate(); + let (payload, account_pk) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::Balances(BalancesCall::transfer_allow_death { + dest: test_account_2_key_pair.public().into(), + value: 100, + })) + .with_funded_account(10000000000) + .build(); + + let account_id: ::AccountId = account_pk.into(); + let initial_balance = Balances::free_balance(&account_id); + + // act + let res = Passkey::pre_dispatch(&Call::proxy_v2 { payload }); + + // assert + assert!(res.is_ok()); + let final_balance = Balances::free_balance(&account_id); + assert!(final_balance < initial_balance); + }); +} + +#[test] +fn fee_withdrawn_for_failed_call() { + new_test_ext().execute_with(|| { + // arrange + let amount = 10000000000; + let (test_account_2_key_pair, _) = sr25519::Pair::generate(); + let (payload, account_pk) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::Balances(BalancesCall::transfer_allow_death { + dest: test_account_2_key_pair.public().into(), + value: amount, + })) + .with_funded_account(amount) + .build(); + + let account_id: ::AccountId = account_pk.into(); + let initial_balance = Balances::free_balance(&account_id); + + // act + let validate_result = Passkey::pre_dispatch(&Call::proxy_v2 { payload: payload.clone() }); + let extrinsic_result = Passkey::proxy_v2(RuntimeOrigin::none(), payload); + + // assert + assert!(validate_result.is_ok()); + assert!(extrinsic_result.is_err()); + let final_balance = Balances::free_balance(&account_id); + assert!(final_balance < initial_balance); + }); +} + +#[test] +fn validate_unsigned_with_unsupported_call_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let (payload, _) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + // remark_with_event is an unsupported call + .with_call(RuntimeCall::System(SystemCall::remark_with_event { + remark: vec![1, 2, 3u8], + })) + .build(); + + // act + let v = Passkey::validate_unsigned(TransactionSource::InBlock, &Call::proxy_v2 { payload }); + + // assert + assert_err!(v, InvalidTransaction::Call); + }); +} + +#[test] +fn validate_unsigned_with_used_nonce_should_fail_with_stale() { + new_test_ext().execute_with(|| { + // arrange + let (test_account_2_key_pair, _) = sr25519::Pair::generate(); + let (payload, account_pk) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::Balances(BalancesCall::transfer_allow_death { + dest: test_account_2_key_pair.public().into(), + value: 10000, + })) + .with_funded_account(10000000000) + .with_account_nonce(0) + .build(); + + let who: ::AccountId = account_pk.into(); + let mut account = frame_system::Account::::get(&who); + account.nonce += 1; + frame_system::Account::::insert(who, account); + + // act + let v = Passkey::validate_unsigned(TransactionSource::InBlock, &Call::proxy_v2 { payload }); + + // assert + assert_err!(v, InvalidTransaction::Stale); + }); +} + +#[test] +fn validate_unsigned_with_correct_nonce_should_work() { + new_test_ext().execute_with(|| { + // arrange + let (test_account_2_key_pair, _) = sr25519::Pair::generate(); + let (payload, account_pk) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::Balances(BalancesCall::transfer_allow_death { + dest: test_account_2_key_pair.public().into(), + value: 10000, + })) + .with_funded_account(10000000000) + .with_account_nonce(2) + .build(); + + let who: ::AccountId = account_pk.into(); + let mut account = frame_system::Account::::get(&who); + account.nonce += 1; + frame_system::Account::::insert(who.clone(), account); + + // act + let v = Passkey::validate_unsigned(TransactionSource::InBlock, &Call::proxy_v2 { payload }); + + // assert + assert!(v.is_ok()); + assert!(v.clone().unwrap().priority > 0); + assert_eq!(v.clone().unwrap().requires, vec![Encode::encode(&(who.clone(), 1u64))]); + assert_eq!(v.clone().unwrap().provides, vec![Encode::encode(&(who, 2u64))]); + }); +} + +#[test] +fn validate_unsigned_with_exceeding_weights_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let block_length = BlockLength::default(); + let max = block_length.max.get(DispatchClass::Normal); + let (payload, _) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::System(SystemCall::remark { remark: vec![1u8; *max as usize] })) + .with_funded_account(10000000000) + .build(); + + // act + let v = Passkey::validate_unsigned(TransactionSource::InBlock, &Call::proxy_v2 { payload }); + + // assert + assert_err!(v, InvalidTransaction::ExhaustsResources); + }); +} + +#[test] +fn pre_dispatch_unsigned_with_used_nonce_should_fail_with_stale() { + new_test_ext().execute_with(|| { + // arrange + let (test_account_2_key_pair, _) = sr25519::Pair::generate(); + let (payload, account_pk) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::Balances(BalancesCall::transfer_allow_death { + dest: test_account_2_key_pair.public().into(), + value: 10000, + })) + .with_funded_account(10000000000) + .with_account_nonce(0) + .build(); + let who: ::AccountId = account_pk.into(); + let mut account = frame_system::Account::::get(&who); + account.nonce += 1; + frame_system::Account::::insert(who, account); + + // act + let v = Passkey::pre_dispatch(&Call::proxy_v2 { payload }); + + // assert + assert_err!(v, InvalidTransaction::Stale); + }); +} + +#[test] +fn pre_dispatch_unsigned_with_future_nonce_should_fail_with_future() { + new_test_ext().execute_with(|| { + // arrange + let (test_account_2_key_pair, _) = sr25519::Pair::generate(); + let (payload, _) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::Balances(BalancesCall::transfer_allow_death { + dest: test_account_2_key_pair.public().into(), + value: 10000, + })) + .with_funded_account(10000000000) + // setting a future nonce + .with_account_nonce(2) + .build(); + + // act + let v = Passkey::pre_dispatch(&Call::proxy_v2 { payload }); + + // assert + assert_err!(v, InvalidTransaction::Future); + }); +} + +#[test] +fn pre_dispatch_unsigned_should_increment_nonce_on_success() { + new_test_ext().execute_with(|| { + // arrange + let (payload, account_pk) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::System(SystemCall::remark { remark: vec![1u8; 3usize] })) + .with_funded_account(10000000000) + .build(); + let account_1_pk: ::AccountId = account_pk.into(); + + // act + assert_ok!(Passkey::pre_dispatch(&Call::proxy_v2 { payload })); + + // assert + let account = frame_system::Account::::get(&account_1_pk); + assert_eq!(account.nonce, ::Nonce::one()); + }); +} + +#[test] +fn pre_dispatch_with_exceeding_weight_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let block_length = BlockLength::default(); + let max = block_length.max.get(DispatchClass::Normal); + let (payload, _) = TestPasskeyPayloadBuilder::new() + .with_a_valid_passkey() + .with_passkey_as_payload() + .with_call(RuntimeCall::System(SystemCall::remark { remark: vec![1u8; *max as usize] })) + .with_funded_account(10000000000) + .build(); + + // act + let v = Passkey::pre_dispatch(&Call::proxy_v2 { payload }); + + // assert + assert_err!(v, InvalidTransaction::ExhaustsResources); + }); +} + +#[test] +fn passkey_example_should_work() { + new_test_ext().execute_with(|| { + // arrange + let account_id = AccountId32::new(from_hex("0xcf613044ccd8c1c60f561b99bd1fd2daef89625feeeeeeeeeeeeeeeeeeeeeeee").unwrap().try_into().unwrap()); + let pass_key_public_key = PasskeyPublicKey(from_hex("0x029bd263885e5eeaea31fa3b2e78ab1106d2cb1995045777fca3b38913a755d250").unwrap().try_into().unwrap()); + let payload = PasskeyPayloadV2 { + passkey_public_key: pass_key_public_key, + verifiable_passkey_signature: VerifiablePasskeySignature { + signature: from_hex("0x30440220498c9d752c98f4cec77bb386f48dc52ccc6523f386c8942b3d50ff9dbdb4046a02205d2f2e3fa8bf27fd5c8f0d7f1ae8724a30dab1dac758019459114a447357c54b").unwrap().try_into().unwrap(), + authenticator_data: from_hex("0x49960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97630500000003").unwrap().try_into().unwrap(), + client_data_json: from_hex("0x7b2274797065223a22776562617574686e2e676574222c226368616c6c656e6765223a227372576f2d4a49393564336332393362774e756469747a53687a4f636849577a584d336478376d554f4351222c226f726967696e223a22687474703a2f2f6c6f63616c686f73743a3536353135222c2263726f73734f726967696e223a66616c73657d").unwrap().try_into().unwrap(), + }, + account_ownership_proof: MultiSignature::Ecdsa(ecdsa::Signature::from_raw(from_hex("0xa0d9b3fe775b4be9d2b52f37f8a21c30be037a858f85cca82bce58ac05a95d9621063978dc086a83532e839882e701f2b7134541a4814526c888b8650c3eb5f81b").unwrap().try_into().unwrap())), + passkey_call: PasskeyCallV2 { + account_id: account_id.clone(), + account_nonce: 0, + call: Box::new(RuntimeCall::System(SystemCall::remark { remark: vec![1, 2, 3u8] })), + }, + }; + assert_ok!(Balances::force_set_balance( + RawOrigin::Root.into(), + account_id, + 10000000000 + )); + + // act + let res = + Passkey::validate_unsigned(TransactionSource::InBlock, &Call::proxy_v2 { payload }); + + // assert + assert!(res.is_ok()); + }); +} diff --git a/pallets/passkey/src/types.rs b/pallets/passkey/src/types.rs new file mode 100644 index 0000000000..eb21c7b56f --- /dev/null +++ b/pallets/passkey/src/types.rs @@ -0,0 +1,328 @@ +use crate::Config; +use frame_support::{ + pallet_prelude::{ConstU32, Decode, Encode, MaxEncodedLen, TypeInfo}, + BoundedVec, RuntimeDebugNoBound, +}; +use p256::{ecdsa::signature::Verifier, EncodedPoint}; +use parity_scale_codec::DecodeWithMemTracking; +use sp_io::hashing::sha2_256; +use sp_runtime::MultiSignature; +extern crate alloc; +#[allow(unused)] +use alloc::{boxed::Box, sync::Arc, vec::Vec}; +use common_primitives::{node::EIP712Encode, signatures::get_eip712_encoding_prefix}; +use lazy_static::lazy_static; + +/// This is the placeholder value that should be replaced by calculated challenge for +/// evaluation of a Passkey signature. +pub const CHALLENGE_PLACEHOLDER: &str = "#rplc#"; +/// Passkey AuthenticatorData type. The length is 37 bytes or more +/// +pub type PasskeyAuthenticatorData = BoundedVec>; +/// Passkey ClientDataJson type +/// Note: The `challenge` field inside this json MUST be replaced with `CHALLENGE_PLACEHOLDER` +/// before submission to the chain +/// +pub type PasskeyClientDataJson = BoundedVec>; +/// PassKey Public Key type in compressed encoded point format +/// the first byte is the tag indicating compressed format +#[derive( + Encode, + Decode, + DecodeWithMemTracking, + TypeInfo, + MaxEncodedLen, + PartialEq, + RuntimeDebugNoBound, + Clone, +)] +pub struct PasskeyPublicKey(pub [u8; 33]); + +impl EIP712Encode for PasskeyPublicKey { + fn encode_eip_712(&self) -> Box<[u8]> { + lazy_static! { + // get prefix and domain separator + static ref PREFIX_DOMAIN_SEPARATOR: Box<[u8]> = + get_eip712_encoding_prefix("0xcccccccccccccccccccccccccccccccccccccccc"); + + // signed payload + static ref MAIN_TYPE_HASH: [u8; 32] = + sp_io::hashing::keccak_256(b"PasskeyPublicKey(bytes publicKey)"); + } + let coded_public_key = sp_io::hashing::keccak_256(self.0.as_slice()); + let message = + sp_io::hashing::keccak_256(&[MAIN_TYPE_HASH.as_slice(), &coded_public_key].concat()); + let combined = [PREFIX_DOMAIN_SEPARATOR.as_ref(), &message].concat(); + combined.into_boxed_slice() + } +} +/// PassKey Signature type +#[derive( + Encode, + Decode, + DecodeWithMemTracking, + TypeInfo, + MaxEncodedLen, + PartialEq, + RuntimeDebugNoBound, + Clone, + Default, +)] +pub struct PasskeySignature(pub BoundedVec>); + +/// Passkey Payload +#[derive( + Encode, + Decode, + DecodeWithMemTracking, + TypeInfo, + MaxEncodedLen, + PartialEq, + RuntimeDebugNoBound, + Clone, +)] +#[scale_info(skip_type_params(T))] +pub struct PasskeyPayload { + /// passkey public key + pub passkey_public_key: PasskeyPublicKey, + /// a self-contained verifiable passkey signature with all required metadata + pub verifiable_passkey_signature: VerifiablePasskeySignature, + /// PassKey Call + pub passkey_call: PasskeyCall, +} + +/// Passkey Payload V2 +#[derive( + Encode, + Decode, + DecodeWithMemTracking, + TypeInfo, + MaxEncodedLen, + PartialEq, + RuntimeDebugNoBound, + Clone, +)] +#[scale_info(skip_type_params(T))] +pub struct PasskeyPayloadV2 { + /// passkey public key + pub passkey_public_key: PasskeyPublicKey, + /// a self-contained verifiable passkey signature with all required metadata + pub verifiable_passkey_signature: VerifiablePasskeySignature, + /// passkey_public_key signed by account_id's private key + pub account_ownership_proof: MultiSignature, + /// PassKey Call + pub passkey_call: PasskeyCallV2, +} + +/// A verifiable Pass key contains all the required information to verify a passkey signature +#[derive( + Encode, + Decode, + DecodeWithMemTracking, + TypeInfo, + MaxEncodedLen, + PartialEq, + RuntimeDebugNoBound, + Clone, +)] +pub struct VerifiablePasskeySignature { + /// passkey signature of `passkey_call` + pub signature: PasskeySignature, + /// passkey authenticator data + pub authenticator_data: PasskeyAuthenticatorData, + /// passkey client data in json format + pub client_data_json: PasskeyClientDataJson, +} + +/// Inner Passkey call +#[derive( + Encode, + Decode, + DecodeWithMemTracking, + TypeInfo, + MaxEncodedLen, + PartialEq, + RuntimeDebugNoBound, + Clone, +)] +#[scale_info(skip_type_params(T))] +pub struct PasskeyCall { + /// account id which is the origin of this call + pub account_id: T::AccountId, + /// account nonce + pub account_nonce: T::Nonce, + /// passkey_public_key signed by account_id's private key + pub account_ownership_proof: MultiSignature, + /// Extrinsic call + pub call: Box<::RuntimeCall>, +} + +/// Inner Passkey call V2 +#[derive( + Encode, + Decode, + DecodeWithMemTracking, + TypeInfo, + MaxEncodedLen, + PartialEq, + RuntimeDebugNoBound, + Clone, +)] +#[scale_info(skip_type_params(T))] +pub struct PasskeyCallV2 { + /// account id which is the origin of this call + pub account_id: T::AccountId, + /// account nonce + pub account_nonce: T::Nonce, + /// Extrinsic call + pub call: Box<::RuntimeCall>, +} + +impl From> for PasskeyPayloadV2 { + fn from(payload: PasskeyPayload) -> Self { + PasskeyPayloadV2 { + passkey_public_key: payload.passkey_public_key, + verifiable_passkey_signature: payload.verifiable_passkey_signature, + account_ownership_proof: payload.passkey_call.account_ownership_proof, + passkey_call: PasskeyCallV2 { + account_id: payload.passkey_call.account_id, + account_nonce: payload.passkey_call.account_nonce, + call: payload.passkey_call.call, + }, + } + } +} + +impl From> for PasskeyPayload { + fn from(payload: PasskeyPayloadV2) -> Self { + PasskeyPayload { + passkey_public_key: payload.passkey_public_key, + verifiable_passkey_signature: payload.verifiable_passkey_signature, + passkey_call: PasskeyCall { + account_id: payload.passkey_call.account_id, + account_ownership_proof: payload.account_ownership_proof, + account_nonce: payload.passkey_call.account_nonce, + call: payload.passkey_call.call, + }, + } + } +} + +impl PasskeySignature { + /// returns the inner raw data as a vector + pub fn to_vec(&self) -> Vec { + self.0.to_vec() + } +} + +impl TryFrom for p256::ecdsa::DerSignature { + type Error = (); + + fn try_from(value: PasskeySignature) -> Result { + let result = p256::ecdsa::DerSignature::from_bytes(&value.to_vec()[..]).map_err(|_| ())?; + Ok(result) + } +} + +impl PasskeyPublicKey { + /// returns the inner raw data + pub fn inner(&self) -> [u8; 33] { + self.0 + } +} + +impl TryFrom for PasskeyPublicKey { + type Error = (); + + fn try_from(value: EncodedPoint) -> Result { + let bytes = value.as_bytes().to_vec(); + let inner: [u8; 33] = bytes.try_into().map_err(|_| ())?; + Ok(PasskeyPublicKey(inner)) + } +} + +impl TryFrom<&PasskeyPublicKey> for p256::ecdsa::VerifyingKey { + type Error = (); + + fn try_from(value: &PasskeyPublicKey) -> Result { + let encoded_point = EncodedPoint::from_bytes(&value.inner()[..]).map_err(|_| ())?; + + let result = + p256::ecdsa::VerifyingKey::from_encoded_point(&encoded_point).map_err(|_| ())?; + + Ok(result) + } +} + +impl TryFrom> for PasskeySignature { + type Error = (); + + fn try_from(value: Vec) -> Result { + let inner: BoundedVec> = value.try_into().map_err(|_| ())?; + Ok(PasskeySignature(inner)) + } +} + +/// Passkey verification error types +pub enum PasskeyVerificationError { + /// Invalid Passkey signature + InvalidSignature, + /// Invalid Passkey public key + InvalidPublicKey, + /// Invalid Client data json + InvalidClientDataJson, + /// Invalid proof + InvalidProof, + /// Invalid authenticator data + InvalidAuthenticatorData, +} + +impl From for u8 { + fn from(value: PasskeyVerificationError) -> Self { + match value { + PasskeyVerificationError::InvalidSignature => 0u8, + PasskeyVerificationError::InvalidPublicKey => 1u8, + PasskeyVerificationError::InvalidClientDataJson => 2u8, + PasskeyVerificationError::InvalidProof => 3u8, + PasskeyVerificationError::InvalidAuthenticatorData => 4u8, + } + } +} + +impl VerifiablePasskeySignature { + /// verifying a P256 Passkey signature + pub fn try_verify( + &self, + msg: &[u8], + signer: &PasskeyPublicKey, + ) -> Result<(), PasskeyVerificationError> { + let verifying_key: p256::ecdsa::VerifyingKey = + signer.try_into().map_err(|_| PasskeyVerificationError::InvalidPublicKey)?; + let passkey_signature: p256::ecdsa::DerSignature = self + .signature + .clone() + .try_into() + .map_err(|_| PasskeyVerificationError::InvalidSignature)?; + let calculated_challenge = sha2_256(msg); + let calculated_challenge_base64url = base64_url::encode(&calculated_challenge); + + // inject challenge inside clientJsonData + let str_of_json = core::str::from_utf8(&self.client_data_json) + .map_err(|_| PasskeyVerificationError::InvalidClientDataJson)?; + let original_client_data_json = + str_of_json.replace(CHALLENGE_PLACEHOLDER, &calculated_challenge_base64url); + + // prepare signing payload which is [authenticator || sha256(client_data_json)] + let mut passkey_signature_payload = self.authenticator_data.to_vec(); + if passkey_signature_payload.len() < 37 { + return Err(PasskeyVerificationError::InvalidAuthenticatorData); + } + passkey_signature_payload + .extend_from_slice(&sha2_256(original_client_data_json.as_bytes())); + + // finally verify the passkey signature against the payload + verifying_key + .verify(&passkey_signature_payload, &passkey_signature) + .map_err(|_| PasskeyVerificationError::InvalidProof) + } +} diff --git a/pallets/passkey/src/weights.rs b/pallets/passkey/src/weights.rs new file mode 100644 index 0000000000..3c9f9b2340 --- /dev/null +++ b/pallets/passkey/src/weights.rs @@ -0,0 +1,142 @@ + +//! Autogenerated weights for `pallet_passkey` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-04-18, STEPS: `20`, REPEAT: `10`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `ip-10-173-0-75`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` +//! WASM-EXECUTION: `Compiled`, CHAIN: `None`, DB CACHE: `1024` + +// Executed Command: +// ./scripts/../target/release/frequency +// benchmark +// pallet +// --pallet=pallet_passkey +// --extrinsic +// * +// --heap-pages=4096 +// --steps=20 +// --repeat=10 +// --output=./scripts/../pallets/passkey/src/weights.rs +// --template=./scripts/../.maintain/frame-weight-template.hbs +// --additional-trie-layers=3 +// --runtime=./scripts/../target/release/wbuild/frequency-runtime/frequency_runtime.wasm +// --genesis-builder=runtime + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; +use core::marker::PhantomData; + +/// Weight functions needed for `pallet_passkey`. +pub trait WeightInfo { + fn validate() -> Weight; + fn pre_dispatch() -> Weight; +} + +/// Weights for `pallet_passkey` using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl WeightInfo for SubstrateWeight { + /// Storage: `System::BlockHash` (r:1 w:0) + /// Proof: `System::BlockHash` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + fn validate() -> Weight { + // Proof Size summary in bytes: + // Measured: `170` + // Estimated: `4088` + // Minimum execution time: 1_810_745_000 picoseconds. + Weight::from_parts(1_812_169_000, 4088) + .saturating_add(T::DbWeight::get().reads(2_u64)) + } + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + fn pre_dispatch() -> Weight { + // Proof Size summary in bytes: + // Measured: `140` + // Estimated: `4088` + // Minimum execution time: 1_800_650_000 picoseconds. + Weight::from_parts(1_812_623_000, 4088) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } +} + +// For backwards compatibility and tests. +impl WeightInfo for () { + /// Storage: `System::BlockHash` (r:1 w:0) + /// Proof: `System::BlockHash` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:0) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + fn validate() -> Weight { + // Proof Size summary in bytes: + // Measured: `170` + // Estimated: `4088` + // Minimum execution time: 1_810_745_000 picoseconds. + Weight::from_parts(1_812_169_000, 4088) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + } + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + fn pre_dispatch() -> Weight { + // Proof Size summary in bytes: + // Measured: `140` + // Estimated: `4088` + // Minimum execution time: 1_800_650_000 picoseconds. + Weight::from_parts(1_812_623_000, 4088) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } +} + + +#[cfg(test)] +mod tests { + use frame_support::{traits::Get, weights::Weight, dispatch::DispatchClass}; + use common_runtime::constants::{MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO}; + use common_runtime::weights::extrinsic_weights::ExtrinsicBaseWeight; + + #[allow(dead_code)] + struct BlockWeights; + impl Get for BlockWeights { + fn get() -> frame_system::limits::BlockWeights { + frame_system::limits::BlockWeights::builder() + .base_block(Weight::zero()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::non_mandatory(), |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .build_or_panic() + } + } + + #[test] + fn test_validate() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4088 + ); + } + #[test] + fn test_pre_dispatch() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4088 + ); + } +} \ No newline at end of file diff --git a/pallets/schemas/Cargo.toml b/pallets/schemas/Cargo.toml new file mode 100644 index 0000000000..313524316c --- /dev/null +++ b/pallets/schemas/Cargo.toml @@ -0,0 +1,65 @@ +[package] +authors = ["Frequency"] +description = "Schema operations" +edition = "2021" +homepage = "https://frequency.xyz" +license = "Apache-2.0" +name = "pallet-schemas" +publish = false +repository = "https://github.com/frequency-chain/frequency/" +version = "0.0.0" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +[dependencies] +parity-scale-codec = { workspace = true, features = ["derive"] } +log = { workspace = true } +frame-benchmarking = { workspace = true, optional = true } +frame-support = { workspace = true } +frame-system = { workspace = true } +numtoa = { workspace = true, optional = true } +scale-info = { workspace = true, features = ["derive"] } +serde = { workspace = true, features = ["derive"] } +serde_json = { workspace = true, features = ["alloc"] } +smallvec = { workspace = true } +sp-core = { workspace = true } +sp-io = { workspace = true } +sp-runtime = { workspace = true } +sp-weights = { workspace = true } +# Frequency related dependencies +common-primitives = { default-features = false, path = "../../common/primitives" } + +[dev-dependencies] +common-runtime = { path = '../../runtime/common', default-features = false } +serial_test = { workspace = true } +sp-keyring = { workspace = true } +pallet-collective = { workspace = true } + +[features] +default = ["std"] +runtime-benchmarks = [ + "frame-benchmarking/runtime-benchmarks", + "pallet-collective/runtime-benchmarks", + "common-primitives/runtime-benchmarks", + "numtoa", +] +std = [ + "parity-scale-codec/std", + "scale-info/std", + "frame-support/std", + "frame-system/std", + "frame-benchmarking/std", + "sp-runtime/std", + "sp-core/std", + 'common-primitives/std', + 'pallet-collective/std', + 'common-runtime/std', + 'sp-io/std', +] +try-runtime = ["frame-support/try-runtime"] +test = [] + +[lints] +workspace = true diff --git a/pallets/schemas/README.md b/pallets/schemas/README.md new file mode 100644 index 0000000000..a09b71bb79 --- /dev/null +++ b/pallets/schemas/README.md @@ -0,0 +1,100 @@ +# Schemas Pallet + +The Schemas Pallet provides universal schema registration for data flowing through Frequency. + +## Summary + +This pallet provides an on chain repository for schemas, thereby allowing participants of the network to flexibly interact and exchange messages with each other with the correct human intent and data structure. +All Messages and Stateful Storage content must be attached to a Schema Identifier so that the content can be correctly parsed and interpreted. + +### Data Structure vs Human Intent + +Schemas provide for both consistent data structures, but also human intent of the message. +Some schemas may be structurally the same, but have a different interpretation of the contents. +For example, two schemas might both only have a hash for contents, but one is a recording of the hash for time validation purposes, while the other is to mark an off-chain vote. + +### Schema Parameters + +- Model: The actual JSON representing the data structure. +- Model Type: The type of serialization used. (Parquet, Avro, etc...) +- Settings: Various options for the Schema like signature requirements. +- Payload Location: The location the data for this Schema is stored. + +#### Model Types + +- [`Parquet`](https://frequency-chain.github.io/frequency/common_primitives/schema/enum.ModelType.html#variant.Parquet): Designed for lists and when a Provider is collecting items from many different MSAs and publishing them together. +- [`AvroBinary`](https://frequency-chain.github.io/frequency/common_primitives/schema/enum.ModelType.html#variant.AvroBinary): Useful for most generic data structures. + +#### Settings + +- [`AppendOnly`](https://frequency-chain.github.io/frequency/common_primitives/schema/enum.SchemaSetting.html#variant.AppendOnly) + - Prior data is immutable and all new data is appended to existing data. + - For Payload Locations: `Itemized` +- [`SignatureRequired`](https://frequency-chain.github.io/frequency/common_primitives/schema/enum.SchemaSetting.html#variant.SignatureRequired) + - An MSA control key signature is required instead of a delegation. + - For Payload Locations: `Itemized` or `Paginated` + +#### Payload Locations + +- [`OnChain`](https://frequency-chain.github.io/frequency/common_primitives/schema/enum.PayloadLocation.html#variant.OnChain): Data is stored directly in the Messages pallet data storage, usually as `AvroBinary`. +- [`IPFS`](https://frequency-chain.github.io/frequency/common_primitives/schema/enum.PayloadLocation.html#variant.IPFS): Data is stored in IPFS and Messages pallet stores the CID. +- [`Itemized`](https://frequency-chain.github.io/frequency/common_primitives/schema/enum.PayloadLocation.html#variant.Itemized): Data is stored in the Stateful Storage pallet as an array of individual items. +- [`Paginated`](https://frequency-chain.github.io/frequency/common_primitives/schema/enum.PayloadLocation.html#variant.Paginated): Data is stored in the Stateful Storage pallet as a list of paged blobs. + +### Mainnet vs Testnet Schema Creation + +Mainnet schemas must be approved by the Frequency Council. +This is to prevent malicious schemas and increase the documentation around the schemas available. + +On Testnets, schemas can be created by anyone, so there are _no_ guarantees around schema correctness or quality. +If you want to use a particular schema on a testnet, it is suggested that you use specific Schema Ids or publish the needed schema yourself. + +### Actions + +The Schemas pallet provides for: + +- Registering or proposing new Schemas. +- Retrieving schemas by their Id or name. +- Validating a Schema model. +- Retrieving last registered Schema Id. + +## Interactions + +### Extrinsics + +| Name/Description | Caller | Payment | Key Events | Runtime Added | +| ----------------------------------------------------------------------------------------------------- | ----------------------------------------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ------------- | +| `set_max_schema_model_bytes`
Governance action to alter the maximum byte length of Schema models | Governance | Tokens | [`SchemaMaxSizeChanged`](https://frequency-chain.github.io/frequency/pallet_schemas/pallet/enum.Event.html#variant.SchemaMaxSizeChanged) | 1 | +| `propose_to_create_schema_v2`
Creates a proposal to the Frequency Council for a new schema | Token Account | Tokens | [`Proposed`](https://paritytech.github.io/polkadot-sdk/master/pallet_collective/pallet/enum.Event.html#variant.Proposed) | 66 | +| `create_schema_via_governance_v2`
Governance action version of `create_schema_v3` | Frequency Council | Tokens | [`SchemaCreated`](https://frequency-chain.github.io/frequency/pallet_schemas/pallet/enum.Event.html#variant.SchemaCreated) | 66 | +| `create_schema_v3`
Creates a new Schema. | Mainnet: Governance
Testnet: Token Account | Tokens | [`SchemaCreated`](https://frequency-chain.github.io/frequency/pallet_schemas/pallet/enum.Event.html#variant.SchemaCreated) | 1 | +| `propose_to_create_schema_name`
Creates a Council proposal to set the name of a Schema | Token Account | Tokens | [`Proposed`](https://paritytech.github.io/polkadot-sdk/master/pallet_collective/pallet/enum.Event.html#variant.Proposed) | 1 | +| `create_schema_name_via_governance`
Governance action to set the name of a Schema | Frequency Council | Tokens | [`SchemaNameCreated`](https://frequency-chain.github.io/frequency/pallet_schemas/pallet/enum.Event.html#variant.SchemaNameCreated) | 66 | + +See [Rust Docs](https://frequency-chain.github.io/frequency/pallet_schemas/pallet/struct.Pallet.html) for more details. + +### State Queries + +| Name | Description | Query | Runtime Added | +| --------------------------------- | ------------------------------------------------------------------- | -------------------------------- | ------------- | +| Get Max Current Schema Identifier | Fetch current Schema Identifier maximum | `currentSchemaIdentifierMaximum` | 1 | +| Get Schema Model Max Bytes | Fetch maximum number of bytes per Schema Model as set by Governance | `governanceSchemaModelMaxBytes` | 1 | +| Get a Schema Info | Fetch the metadata and settings for a schema | `schemaInfos` | 62 | +| Get Schema Ids by Name | Fetch matching Schemas Ids by namespace and name | `schemaNameToIds` | 62 | +| Get Schema Payload/Model | Fetch the payload/model JSON for the specified Schema | `schemaPayloads` | 62 | + +See the [Rust Docs](https://frequency-chain.github.io/frequency/pallet_schemas/pallet/storage_types/index.html) for additional state queries and details. + +### RPCs + +Note: May be restricted based on node settings and configuration. + +| Name | Description | Call | Node Version | +| --------------------- | ------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | +| Get Schema by Id | Retrieves the schema for the given Schema Id | [`getBySchemaId`](https://frequency-chain.github.io/frequency/pallet_schemas_rpc/trait.SchemasApiServer.html#tymethod.get_by_schema_id) | v1.0.0+ | +| Check Schema Validity | Validates a schema model and returns “true” if the model is correct | [`checkSchemaValidity`](https://frequency-chain.github.io/frequency/pallet_schemas_rpc/trait.SchemasApiServer.html#tymethod.check_schema_validity) | v1.0.0+ | +| Get Schema Versions | Returns an array of schema versions | [`getVersions`](https://frequency-chain.github.io/frequency/pallet_schemas_rpc/trait.SchemasApiServer.html#tymethod.get_versions) | v1.10.0+ | + +\* Must be enabled with off-chain indexing + +See [Rust Docs](https://frequency-chain.github.io/frequency/pallet_schemas_rpc/trait.SchemasApiServer.html) for more details. diff --git a/pallets/schemas/src/benchmarking.rs b/pallets/schemas/src/benchmarking.rs new file mode 100644 index 0000000000..b24f3ee49e --- /dev/null +++ b/pallets/schemas/src/benchmarking.rs @@ -0,0 +1,347 @@ +#![allow(clippy::unwrap_used)] +use frame_benchmarking::{v2::*, whitelisted_caller}; +use frame_support::{assert_ok, ensure, BoundedVec}; +use frame_system::RawOrigin; +use numtoa::NumToA; +extern crate alloc; +use alloc::vec; + +use crate::Pallet as SchemasPallet; + +use super::*; + +fn generate_schema( + size: usize, +) -> BoundedVec { + let mut json: Vec = vec![]; + json.extend(b"{"); + for i in 0..size { + let mut item: Vec = vec![]; + item.extend(b"\"key"); + let mut buff = [0u8; 30]; + item.extend(i.numtoa(10, &mut buff)); + item.extend(b"\":\"val\","); + if item.len() + json.len() < size { + json.extend(item); + } else { + break + } + } + json.pop(); // removing last , + json.extend(b"}"); + json.try_into().unwrap() +} + +#[benchmarks] +mod benchmarks { + use super::*; + + #[benchmark] + fn create_schema_v3_with_name( + m: Linear< + { T::MinSchemaModelSizeBytes::get() + 8 }, + { T::SchemaModelMaxBytesBoundedVecLimit::get() - 1 }, + >, + ) -> Result<(), BenchmarkError> { + let sender: T::AccountId = whitelisted_caller(); + let namespace = vec![b'a'; NAMESPACE_MIN as usize]; + let descriptor = vec![b'b'; DESCRIPTOR_MAX as usize]; + let name: Vec = namespace + .into_iter() + .chain(vec![b'.'].into_iter()) + .chain(descriptor.into_iter()) + .collect(); + let bounded_name = BoundedVec::try_from(name).expect("should resolve"); + let model_type = ModelType::AvroBinary; + let payload_location = PayloadLocation::OnChain; + assert_ok!(SchemasPallet::::set_max_schema_model_bytes( + RawOrigin::Root.into(), + T::SchemaModelMaxBytesBoundedVecLimit::get() + )); + let schema_input = generate_schema::(m as usize); + + #[extrinsic_call] + create_schema_v3( + RawOrigin::Signed(sender), + schema_input, + model_type, + payload_location, + BoundedVec::default(), + Some(bounded_name), + ); + + ensure!( + CurrentSchemaIdentifierMaximum::::get() > 0, + "Created schema count should be > 0" + ); + ensure!(SchemaInfos::::get(1).is_some(), "Created schema should exist"); + Ok(()) + } + + #[benchmark] + fn create_schema_v3_without_name( + m: Linear< + { T::MinSchemaModelSizeBytes::get() + 8 }, + { T::SchemaModelMaxBytesBoundedVecLimit::get() - 1 }, + >, + ) -> Result<(), BenchmarkError> { + let sender: T::AccountId = whitelisted_caller(); + let model_type = ModelType::AvroBinary; + let payload_location = PayloadLocation::OnChain; + assert_ok!(SchemasPallet::::set_max_schema_model_bytes( + RawOrigin::Root.into(), + T::SchemaModelMaxBytesBoundedVecLimit::get() + )); + let schema_input = generate_schema::(m as usize); + + #[extrinsic_call] + create_schema_v3( + RawOrigin::Signed(sender), + schema_input, + model_type, + payload_location, + BoundedVec::default(), + None, + ); + + ensure!( + CurrentSchemaIdentifierMaximum::::get() > 0, + "Created schema count should be > 0" + ); + ensure!(SchemaInfos::::get(1).is_some(), "Created schema should exist"); + Ok(()) + } + + #[benchmark] + fn set_max_schema_model_bytes() -> Result<(), BenchmarkError> { + let sender = RawOrigin::Root; + let max_size = T::SchemaModelMaxBytesBoundedVecLimit::get(); + + #[extrinsic_call] + _(sender, max_size); + + ensure!( + GovernanceSchemaModelMaxBytes::::get() == + T::SchemaModelMaxBytesBoundedVecLimit::get(), + "Schema model max should be updated!" + ); + Ok(()) + } + + #[benchmark] + fn create_schema_via_governance_v2_with_name( + m: Linear< + { T::MinSchemaModelSizeBytes::get() + 8 }, + { T::SchemaModelMaxBytesBoundedVecLimit::get() - 1 }, + >, + ) -> Result<(), BenchmarkError> { + let sender: T::AccountId = whitelisted_caller(); + let namespace = vec![b'a'; NAMESPACE_MIN as usize]; + let descriptor = vec![b'b'; DESCRIPTOR_MAX as usize]; + let name: Vec = namespace + .into_iter() + .chain(vec![b'.'].into_iter()) + .chain(descriptor.into_iter()) + .collect(); + let bounded_name = BoundedVec::try_from(name).expect("should resolve"); + let model_type = ModelType::AvroBinary; + let payload_location = PayloadLocation::OnChain; + assert_ok!(SchemasPallet::::set_max_schema_model_bytes( + RawOrigin::Root.into(), + T::SchemaModelMaxBytesBoundedVecLimit::get() + )); + let schema_input = generate_schema::(m as usize); + + #[extrinsic_call] + create_schema_via_governance_v2( + RawOrigin::Root, + sender.clone(), + schema_input, + model_type, + payload_location, + BoundedVec::default(), + Some(bounded_name), + ); + + ensure!( + CurrentSchemaIdentifierMaximum::::get() > 0, + "Created schema count should be > 0" + ); + ensure!(SchemaInfos::::get(1).is_some(), "Created schema should exist"); + Ok(()) + } + + #[benchmark] + fn create_schema_via_governance_v2_without_name( + m: Linear< + { T::MinSchemaModelSizeBytes::get() + 8 }, + { T::SchemaModelMaxBytesBoundedVecLimit::get() - 1 }, + >, + ) -> Result<(), BenchmarkError> { + let sender: T::AccountId = whitelisted_caller(); + let model_type = ModelType::AvroBinary; + let payload_location = PayloadLocation::OnChain; + assert_ok!(SchemasPallet::::set_max_schema_model_bytes( + RawOrigin::Root.into(), + T::SchemaModelMaxBytesBoundedVecLimit::get() + )); + let schema_input = generate_schema::(m as usize); + + #[extrinsic_call] + create_schema_via_governance_v2( + RawOrigin::Root, + sender.clone(), + schema_input, + model_type, + payload_location, + BoundedVec::default(), + None, + ); + + ensure!( + CurrentSchemaIdentifierMaximum::::get() > 0, + "Created schema count should be > 0" + ); + ensure!(SchemaInfos::::get(1).is_some(), "Created schema should exist"); + Ok(()) + } + + #[benchmark] + fn propose_to_create_schema_v2_with_name( + m: Linear< + { T::MinSchemaModelSizeBytes::get() + 8 }, + { T::SchemaModelMaxBytesBoundedVecLimit::get() - 1 }, + >, + ) -> Result<(), BenchmarkError> { + let sender: T::AccountId = whitelisted_caller(); + let model_type = ModelType::AvroBinary; + let payload_location = PayloadLocation::OnChain; + let namespace = vec![b'a'; NAMESPACE_MIN as usize]; + let descriptor = vec![b'b'; DESCRIPTOR_MAX as usize]; + let name: Vec = namespace + .into_iter() + .chain(vec![b'.'].into_iter()) + .chain(descriptor.into_iter()) + .collect(); + let bounded_name = BoundedVec::try_from(name).expect("should resolve"); + assert_ok!(SchemasPallet::::set_max_schema_model_bytes( + RawOrigin::Root.into(), + T::SchemaModelMaxBytesBoundedVecLimit::get() + )); + let schema_input = generate_schema::(m as usize); + + #[extrinsic_call] + propose_to_create_schema_v2( + RawOrigin::Signed(sender), + schema_input, + model_type, + payload_location, + BoundedVec::default(), + Some(bounded_name), + ); + + assert_eq!(T::ProposalProvider::proposal_count(), 1); + Ok(()) + } + + #[benchmark] + fn propose_to_create_schema_v2_without_name( + m: Linear< + { T::MinSchemaModelSizeBytes::get() + 8 }, + { T::SchemaModelMaxBytesBoundedVecLimit::get() - 1 }, + >, + ) -> Result<(), BenchmarkError> { + let sender: T::AccountId = whitelisted_caller(); + let model_type = ModelType::AvroBinary; + let payload_location = PayloadLocation::OnChain; + assert_ok!(SchemasPallet::::set_max_schema_model_bytes( + RawOrigin::Root.into(), + T::SchemaModelMaxBytesBoundedVecLimit::get() + )); + let schema_input = generate_schema::(m as usize); + + #[extrinsic_call] + propose_to_create_schema_v2( + RawOrigin::Signed(sender), + schema_input, + model_type, + payload_location, + BoundedVec::default(), + None, + ); + + assert_eq!(T::ProposalProvider::proposal_count(), 1); + Ok(()) + } + + #[benchmark] + fn propose_to_create_schema_name() -> Result<(), BenchmarkError> { + let sender: T::AccountId = whitelisted_caller(); + let model = generate_schema::(100_usize); + let namespace = vec![b'a'; NAMESPACE_MIN as usize]; + let descriptor = vec![b'b'; DESCRIPTOR_MAX as usize]; + let name: Vec = namespace + .into_iter() + .chain(vec![b'.'].into_iter()) + .chain(descriptor.into_iter()) + .collect(); + let schema_name = SchemaNamePayload::try_from(name).expect("should resolve"); + assert_ok!(SchemasPallet::::set_max_schema_model_bytes( + RawOrigin::Root.into(), + T::SchemaModelMaxBytesBoundedVecLimit::get() + )); + let schema_id = SchemasPallet::::add_schema( + model, + ModelType::AvroBinary, + PayloadLocation::OnChain, + BoundedVec::default(), + None, + ) + .map_err(|e| BenchmarkError::Stop(e.into()))?; + + #[extrinsic_call] + _(RawOrigin::Signed(sender), schema_id, schema_name); + + assert_eq!(T::ProposalProvider::proposal_count(), 1); + Ok(()) + } + + #[benchmark] + fn create_schema_name_via_governance() -> Result<(), BenchmarkError> { + let model = generate_schema::(100_usize); + let namespace = vec![b'a'; NAMESPACE_MIN as usize]; + let descriptor = vec![b'b'; DESCRIPTOR_MAX as usize]; + let name: Vec = namespace + .into_iter() + .chain(vec![b'.'].into_iter()) + .chain(descriptor.into_iter()) + .collect(); + let schema_name = SchemaNamePayload::try_from(name).expect("should resolve"); + assert_ok!(SchemasPallet::::set_max_schema_model_bytes( + RawOrigin::Root.into(), + T::SchemaModelMaxBytesBoundedVecLimit::get() + )); + let schema_id = SchemasPallet::::add_schema( + model, + ModelType::AvroBinary, + PayloadLocation::OnChain, + BoundedVec::default(), + None, + ) + .map_err(|e| BenchmarkError::Stop(e.into()))?; + + #[extrinsic_call] + _(RawOrigin::Root, schema_id, schema_name.clone()); + + let versions = SchemasPallet::::get_schema_versions(schema_name.into_inner()); + ensure!(versions.is_some(), "Created schema name should exist"); + ensure!(versions.unwrap().len() == 1, "Version should be added!"); + Ok(()) + } + + impl_benchmark_test_suite!( + SchemasPallet, + crate::tests::mock::new_test_ext(), + crate::tests::mock::Test + ); +} diff --git a/pallets/schemas/src/lib.rs b/pallets/schemas/src/lib.rs new file mode 100644 index 0000000000..951c26c1bc --- /dev/null +++ b/pallets/schemas/src/lib.rs @@ -0,0 +1,807 @@ +//! Schema Management for Message and Stateful Storage +//! +//! ## Quick Links +//! - [Configuration: `Config`](Config) +//! - [Extrinsics: `Call`](Call) +//! - [Runtime API: `SchemasRuntimeApi`](../pallet_schemas_runtime_api/trait.SchemasRuntimeApi.html) +//! - [Custom RPC API: `SchemasApiServer`](../pallet_schemas_rpc/trait.SchemasApiServer.html) +//! - [Event Enum: `Event`](Event) +//! - [Error Enum: `Error`](Error) +#![doc = include_str!("../README.md")] +//! +//! ## Implementations +//! +//! - [`SchemaValidator`](../common_primitives/schema/trait.SchemaValidator.html): Functions for accessing and validating Schemas. This implementation is what is used in the runtime. +//! - [`SchemaProvider`](../common_primitives/schema/trait.SchemaProvider.html): Allows another pallet to resolve schema information. +// Substrate macros are tripping the clippy::expect_used lint. +#![allow(clippy::expect_used)] +#![cfg_attr(not(feature = "std"), no_std)] +#![allow(rustdoc::private_intra_doc_links)] +// Strong Documentation Lints +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + missing_docs +)] + +use common_primitives::{ + node::ProposalProvider, + parquet::ParquetModel, + schema::{ + ModelType, PayloadLocation, SchemaId, SchemaProvider, SchemaResponse, SchemaSetting, + SchemaSettings, SchemaValidator, + }, +}; +use frame_support::{ + dispatch::{DispatchResult, PostDispatchInfo}, + ensure, + traits::{BuildGenesisConfig, Get}, +}; +use sp_runtime::{traits::Dispatchable, BoundedVec, DispatchError}; +extern crate alloc; +use alloc::{boxed::Box, vec::Vec}; + +#[cfg(test)] +mod tests; + +#[cfg(feature = "runtime-benchmarks")] +mod benchmarking; +#[cfg(feature = "runtime-benchmarks")] +use common_primitives::benchmarks::SchemaBenchmarkHelper; +use common_primitives::schema::{SchemaInfoResponse, SchemaVersionResponse}; +mod types; + +pub use pallet::*; +pub mod weights; +pub use types::*; +pub use weights::*; + +mod serde; + +#[frame_support::pallet] +pub mod pallet { + use super::*; + use frame_support::pallet_prelude::*; + use frame_system::pallet_prelude::*; + + #[pallet::config] + pub trait Config: frame_system::Config { + /// The overarching event type. + type RuntimeEvent: From> + IsType<::RuntimeEvent>; + + /// Weight information for extrinsics in this pallet. + type WeightInfo: WeightInfo; + + /// Minimum length of Schema model size in bytes + #[pallet::constant] + type MinSchemaModelSizeBytes: Get; + + /// Maximum length of a Schema model Bounded Vec + #[pallet::constant] + type SchemaModelMaxBytesBoundedVecLimit: Get + MaxEncodedLen; + + /// Maximum number of schemas that can be registered + #[pallet::constant] + type MaxSchemaRegistrations: Get; + + /// The origin that is allowed to create providers via governance + type CreateSchemaViaGovernanceOrigin: EnsureOrigin; + + /// The runtime call dispatch type. + type Proposal: Parameter + + Dispatchable + + From>; + + /// The Council proposal provider interface + type ProposalProvider: ProposalProvider; + + /// Maximum number of schema settings that can be registered per schema (if any) + #[pallet::constant] + type MaxSchemaSettingsPerSchema: Get; + } + + #[pallet::event] + #[pallet::generate_deposit(pub (super) fn deposit_event)] + pub enum Event { + /// Emitted when a schema is registered. [who, schemas id] + SchemaCreated { + /// Account ID + key: T::AccountId, + + /// Schema ID of newly-created schema + schema_id: SchemaId, + }, + + /// Emitted when maximum size for schema model is changed. + SchemaMaxSizeChanged { + /// Max size of schema document + max_size: u32, + }, + + /// Emitted when a schema is assigned a name + SchemaNameCreated { + /// Schema ID which a name is assigned + schema_id: SchemaId, + /// ASCII string in bytes of the assigned name + name: Vec, + }, + } + + #[derive(PartialEq, Eq)] // for testing + #[pallet::error] + pub enum Error { + /// Schema is malformed + InvalidSchema, + + /// The schema model exceeds the maximum length allowed + ExceedsMaxSchemaModelBytes, + + /// The schema is less than the minimum length allowed + LessThanMinSchemaModelBytes, + + /// CurrentSchemaIdentifierMaximum was attempted to overflow max, means MaxSchemaRegistrations is too big + SchemaCountOverflow, + + /// Invalid setting for schema + InvalidSetting, + + /// Invalid schema name encoding + InvalidSchemaNameEncoding, + + /// Invalid schema name characters + InvalidSchemaNameCharacters, + + /// Invalid schema name structure + InvalidSchemaNameStructure, + + /// Invalid schema name length + InvalidSchemaNameLength, + + /// Invalid schema namespace length + InvalidSchemaNamespaceLength, + + /// Invalid schema descriptor length + InvalidSchemaDescriptorLength, + + /// Schema version exceeds the maximum allowed number + ExceedsMaxNumberOfVersions, + + /// Inserted schema id already exists + SchemaIdAlreadyExists, + + /// SchemaId does not exist + SchemaIdDoesNotExist, + + /// SchemaId has a name already + SchemaIdAlreadyHasName, + } + + #[pallet::pallet] + #[pallet::storage_version(SCHEMA_STORAGE_VERSION)] + pub struct Pallet(_); + + /// Storage for the Governance managed max bytes for schema model + /// Allows for altering the max bytes without a full chain upgrade + /// - Value: Max Bytes + #[pallet::storage] + pub(super) type GovernanceSchemaModelMaxBytes = StorageValue<_, u32, ValueQuery>; + + /// Storage type for current number of schemas + /// Useful for retrieving latest schema id + /// - Value: Last Schema Id + #[pallet::storage] + pub(super) type CurrentSchemaIdentifierMaximum = + StorageValue<_, SchemaId, ValueQuery>; + + /// Storage for message schema info struct data + /// - Key: Schema Id + /// - Value: [`SchemaInfo`](SchemaInfo) + #[pallet::storage] + pub(super) type SchemaInfos = + StorageMap<_, Twox64Concat, SchemaId, SchemaInfo, OptionQuery>; + + /// Storage for message schema struct data + /// - Key: Schema Id + /// - Value: [`BoundedVec`](BoundedVec) + #[pallet::storage] + pub(super) type SchemaPayloads = StorageMap< + _, + Twox64Concat, + SchemaId, + BoundedVec, + OptionQuery, + >; + + /// Storage for message schema info struct data + /// - Key: Schema Id + /// - Value: [`SchemaInfo`](SchemaInfo) + #[pallet::storage] + pub(super) type SchemaNameToIds = StorageDoubleMap< + _, + Blake2_128Concat, + SchemaNamespace, + Blake2_128Concat, + SchemaDescriptor, + SchemaVersionId, + ValueQuery, + >; + + #[pallet::genesis_config] + pub struct GenesisConfig { + /// Maximum schema size in bytes at genesis + pub initial_schema_identifier_max: u16, + /// Maximum schema size in bytes at genesis + pub initial_max_schema_model_size: u32, + /// Genesis Schemas to load for development + pub initial_schemas: Vec, + /// Phantom type + #[serde(skip)] + pub _config: PhantomData, + } + + impl core::default::Default for GenesisConfig { + fn default() -> Self { + Self { + initial_schema_identifier_max: 16_000, + initial_max_schema_model_size: 1024, + initial_schemas: Default::default(), + _config: Default::default(), + } + } + } + #[pallet::genesis_build] + impl BuildGenesisConfig for GenesisConfig { + fn build(&self) { + GovernanceSchemaModelMaxBytes::::put(self.initial_max_schema_model_size); + + // Load in the Genesis Schemas + for schema in self.initial_schemas.iter() { + let model: BoundedVec = + BoundedVec::try_from(schema.model.clone().into_bytes()).expect( + "Genesis Schema Model larger than SchemaModelMaxBytesBoundedVecLimit", + ); + let name_payload: SchemaNamePayload = + BoundedVec::try_from(schema.name.clone().into_bytes()) + .expect("Genesis Schema Name larger than SCHEMA_NAME_BYTES_MAX"); + let parsed_name: Option = if name_payload.len() > 0 { + Some( + SchemaName::try_parse::(name_payload, true) + .expect("Bad Genesis Schema Name"), + ) + } else { + None + }; + let settings: BoundedVec = + BoundedVec::try_from(schema.settings.clone()).expect( + "Bad Genesis Schema Settings. Perhaps larger than MaxSchemaSettingsPerSchema" + ); + + let _ = Pallet::::add_schema( + model, + schema.model_type, + schema.payload_location, + settings, + parsed_name, + ) + .expect("Failed to set Schema in Genesis!"); + } + + // Set the maximum manually + CurrentSchemaIdentifierMaximum::::put(self.initial_schema_identifier_max); + } + } + + #[pallet::call] + impl Pallet { + /// REMOVED create_schema() at call index 0 + + /// Root and Governance can set a new max value for Schema bytes. + /// Must be <= the limit of the Schema BoundedVec used for registration. + /// + /// # Requires + /// * Root Origin + /// + /// # Events + /// * [`Event::SchemaMaxSizeChanged`] + /// + /// # Errors + /// * [`Error::ExceedsMaxSchemaModelBytes`] - Cannot set to above the hard coded maximum [`Config::SchemaModelMaxBytesBoundedVecLimit`] + /// + #[pallet::call_index(1)] + #[pallet::weight((T::WeightInfo::set_max_schema_model_bytes(), DispatchClass::Operational))] + pub fn set_max_schema_model_bytes( + origin: OriginFor, + #[pallet::compact] max_size: u32, + ) -> DispatchResult { + ensure_root(origin)?; + ensure!( + max_size <= T::SchemaModelMaxBytesBoundedVecLimit::get(), + Error::::ExceedsMaxSchemaModelBytes + ); + GovernanceSchemaModelMaxBytes::::set(max_size); + Self::deposit_event(Event::SchemaMaxSizeChanged { max_size }); + Ok(()) + } + + // REMOVED propose_to_create_schema() at call index 2 + // REMOVED create_schema_via_governance() at call index 3 + // REMOVED create_schema_v2() at call index 4 + + /// Propose to create a schema. Creates a proposal for council approval to create a schema + /// + #[pallet::call_index(5)] + #[pallet::weight( + match schema_name { + Some(_) => T::WeightInfo::propose_to_create_schema_v2_with_name(model.len() as u32), + None => T::WeightInfo::propose_to_create_schema_v2_without_name(model.len() as u32) + } + )] + pub fn propose_to_create_schema_v2( + origin: OriginFor, + model: BoundedVec, + model_type: ModelType, + payload_location: PayloadLocation, + settings: BoundedVec, + schema_name: Option, + ) -> DispatchResult { + let proposer = ensure_signed(origin)?; + + let proposal: Box = Box::new( + (Call::::create_schema_via_governance_v2 { + creator_key: proposer.clone(), + model, + model_type, + payload_location, + settings, + schema_name, + }) + .into(), + ); + T::ProposalProvider::propose_with_simple_majority(proposer, proposal)?; + Ok(()) + } + + /// Create a schema by means of council approval + /// + /// # Events + /// * [`Event::SchemaCreated`] + /// * [`Event::SchemaNameCreated`] + /// + /// # Errors + /// * [`Error::LessThanMinSchemaModelBytes`] - The schema's length is less than the minimum schema length + /// * [`Error::ExceedsMaxSchemaModelBytes`] - The schema's length is greater than the maximum schema length + /// * [`Error::InvalidSchema`] - Schema is malformed in some way + /// * [`Error::SchemaCountOverflow`] - The schema count has exceeded its bounds + /// * [`Error::InvalidSchemaNameEncoding`] - The schema name has invalid encoding + /// * [`Error::InvalidSchemaNameCharacters`] - The schema name has invalid characters + /// * [`Error::InvalidSchemaNameStructure`] - The schema name has invalid structure + /// * [`Error::InvalidSchemaNameLength`] - The schema name has invalid length + /// * [`Error::InvalidSchemaNamespaceLength`] - The schema namespace has invalid length + /// * [`Error::InvalidSchemaDescriptorLength`] - The schema descriptor has invalid length + /// * [`Error::ExceedsMaxNumberOfVersions`] - The schema name reached max number of versions + /// + #[pallet::call_index(6)] + #[pallet::weight( + match schema_name { + Some(_) => T::WeightInfo::create_schema_via_governance_v2_with_name(model.len() as u32+ settings.len() as u32), + None => T::WeightInfo::create_schema_via_governance_v2_without_name(model.len() as u32+ settings.len() as u32) + } + )] + pub fn create_schema_via_governance_v2( + origin: OriginFor, + creator_key: T::AccountId, + model: BoundedVec, + model_type: ModelType, + payload_location: PayloadLocation, + settings: BoundedVec, + schema_name: Option, + ) -> DispatchResult { + T::CreateSchemaViaGovernanceOrigin::ensure_origin(origin)?; + let (schema_id, schema_name) = Self::create_schema_for( + model, + model_type, + payload_location, + settings, + schema_name, + )?; + + Self::deposit_event(Event::SchemaCreated { key: creator_key, schema_id }); + if let Some(inner_name) = schema_name { + Self::deposit_event(Event::SchemaNameCreated { + schema_id, + name: inner_name.get_combined_name(), + }); + } + Ok(()) + } + + /// Adds a given schema to storage. The schema in question must be of length + /// between the min and max model size allowed for schemas (see pallet + /// constants above). If the pallet's maximum schema limit has been + /// fulfilled by the time this extrinsic is called, a SchemaCountOverflow error + /// will be thrown. + /// + /// # Events + /// * [`Event::SchemaCreated`] + /// * [`Event::SchemaNameCreated`] + /// + /// # Errors + /// * [`Error::LessThanMinSchemaModelBytes`] - The schema's length is less than the minimum schema length + /// * [`Error::ExceedsMaxSchemaModelBytes`] - The schema's length is greater than the maximum schema length + /// * [`Error::InvalidSchema`] - Schema is malformed in some way + /// * [`Error::SchemaCountOverflow`] - The schema count has exceeded its bounds + /// * [`Error::InvalidSetting`] - Invalid setting is provided + /// * [`Error::InvalidSchemaNameEncoding`] - The schema name has invalid encoding + /// * [`Error::InvalidSchemaNameCharacters`] - The schema name has invalid characters + /// * [`Error::InvalidSchemaNameStructure`] - The schema name has invalid structure + /// * [`Error::InvalidSchemaNameLength`] - The schema name has invalid length + /// * [`Error::InvalidSchemaNamespaceLength`] - The schema namespace has invalid length + /// * [`Error::InvalidSchemaDescriptorLength`] - The schema descriptor has invalid length + /// * [`Error::ExceedsMaxNumberOfVersions`] - The schema name reached max number of versions + /// + #[pallet::call_index(7)] + #[pallet::weight( + match schema_name { + Some(_) => T::WeightInfo::create_schema_v3_with_name(model.len() as u32 + settings.len() as u32), + None => T::WeightInfo::create_schema_v3_without_name(model.len() as u32 + settings.len() as u32) + } + )] + pub fn create_schema_v3( + origin: OriginFor, + model: BoundedVec, + model_type: ModelType, + payload_location: PayloadLocation, + settings: BoundedVec, + schema_name: Option, + ) -> DispatchResult { + let sender = ensure_signed(origin)?; + + let (schema_id, schema_name) = Self::create_schema_for( + model, + model_type, + payload_location, + settings, + schema_name, + )?; + + Self::deposit_event(Event::SchemaCreated { key: sender, schema_id }); + if let Some(inner_name) = schema_name { + Self::deposit_event(Event::SchemaNameCreated { + schema_id, + name: inner_name.get_combined_name(), + }); + } + Ok(()) + } + + /// Propose to create a schema name. Creates a proposal for council approval to create a schema name + /// * [`Error::LessThanMinSchemaModelBytes`] - The schema's length is less than the minimum schema length + /// * [`Error::ExceedsMaxSchemaModelBytes`] - The schema's length is greater than the maximum schema length + /// * [`Error::InvalidSchema`] - Schema is malformed in some way + /// * [`Error::InvalidSchemaNameEncoding`] - The schema name has invalid encoding + /// * [`Error::InvalidSchemaNameCharacters`] - The schema name has invalid characters + /// * [`Error::InvalidSchemaNameStructure`] - The schema name has invalid structure + /// * [`Error::InvalidSchemaNameLength`] - The schema name has invalid length + /// * [`Error::InvalidSchemaNamespaceLength`] - The schema namespace has invalid length + /// * [`Error::InvalidSchemaDescriptorLength`] - The schema descriptor has invalid length + /// * [`Error::ExceedsMaxNumberOfVersions`] - The schema name reached max number of versions + /// * [`Error::SchemaIdDoesNotExist`] - The schema id does not exist + /// * [`Error::SchemaIdAlreadyHasName`] - The schema id already has a name + #[pallet::call_index(8)] + #[pallet::weight(T::WeightInfo::propose_to_create_schema_name())] + pub fn propose_to_create_schema_name( + origin: OriginFor, + schema_id: SchemaId, + schema_name: SchemaNamePayload, + ) -> DispatchResult { + let proposer = ensure_signed(origin)?; + + let _ = Self::parse_and_verify_schema_name(schema_id, &schema_name)?; + + let proposal: Box = Box::new( + (Call::::create_schema_name_via_governance { schema_id, schema_name }).into(), + ); + T::ProposalProvider::propose_with_simple_majority(proposer, proposal)?; + Ok(()) + } + + /// Assigns a name to a schema without any name + /// + /// # Events + /// * [`Event::SchemaNameCreated`] + /// + /// # Errors + /// * [`Error::LessThanMinSchemaModelBytes`] - The schema's length is less than the minimum schema length + /// * [`Error::ExceedsMaxSchemaModelBytes`] - The schema's length is greater than the maximum schema length + /// * [`Error::InvalidSchema`] - Schema is malformed in some way + /// * [`Error::SchemaCountOverflow`] - The schema count has exceeded its bounds + /// * [`Error::InvalidSchemaNameEncoding`] - The schema name has invalid encoding + /// * [`Error::InvalidSchemaNameCharacters`] - The schema name has invalid characters + /// * [`Error::InvalidSchemaNameStructure`] - The schema name has invalid structure + /// * [`Error::InvalidSchemaNameLength`] - The schema name has invalid length + /// * [`Error::InvalidSchemaNamespaceLength`] - The schema namespace has invalid length + /// * [`Error::InvalidSchemaDescriptorLength`] - The schema descriptor has invalid length + /// * [`Error::ExceedsMaxNumberOfVersions`] - The schema name reached max number of versions + /// * [`Error::SchemaIdDoesNotExist`] - The schema id does not exist + /// * [`Error::SchemaIdAlreadyHasName`] - The schema id already has a name + /// + #[pallet::call_index(9)] + #[pallet::weight(T::WeightInfo::create_schema_name_via_governance())] + pub fn create_schema_name_via_governance( + origin: OriginFor, + schema_id: SchemaId, + schema_name: SchemaNamePayload, + ) -> DispatchResult { + T::CreateSchemaViaGovernanceOrigin::ensure_origin(origin)?; + + let parsed_name = Self::parse_and_verify_schema_name(schema_id, &schema_name)?; + SchemaNameToIds::::try_mutate( + &parsed_name.namespace, + &parsed_name.descriptor, + |schema_version_id| -> DispatchResult { + schema_version_id.add::(schema_id)?; + + Self::deposit_event(Event::SchemaNameCreated { + schema_id, + name: parsed_name.get_combined_name(), + }); + Ok(()) + }, + ) + } + } + + impl Pallet { + /// Set the schema count to something in particular. + #[cfg(any(feature = "std", feature = "runtime-benchmarks", test))] + pub fn set_schema_count(n: SchemaId) { + >::set(n); + } + + /// Inserts both the [`SchemaInfo`] and Schema Payload into storage + /// Updates the `CurrentSchemaIdentifierMaximum` storage + pub fn add_schema( + model: BoundedVec, + model_type: ModelType, + payload_location: PayloadLocation, + settings: BoundedVec, + schema_name_option: Option, + ) -> Result { + let schema_id = Self::get_next_schema_id()?; + let has_name = schema_name_option.is_some(); + let mut set_settings = SchemaSettings::all_disabled(); + if !settings.is_empty() { + for i in settings.into_inner() { + set_settings.set(i); + } + } + + if let Some(schema_name) = schema_name_option { + SchemaNameToIds::::try_mutate( + schema_name.namespace, + schema_name.descriptor, + |schema_version_id| -> Result<(), DispatchError> { + schema_version_id.add::(schema_id)?; + Ok(()) + }, + )?; + }; + + let schema_info = + SchemaInfo { model_type, payload_location, settings: set_settings, has_name }; + >::set(schema_id); + >::insert(schema_id, schema_info); + >::insert(schema_id, model); + + Ok(schema_id) + } + + /// Retrieve a schema by id + pub fn get_schema_by_id(schema_id: SchemaId) -> Option { + match (SchemaInfos::::get(schema_id), SchemaPayloads::::get(schema_id)) { + (Some(schema_info), Some(payload)) => { + let model_vec: Vec = payload.into_inner(); + let saved_settings = schema_info.settings; + let settings = saved_settings.0.iter().collect::>(); + let response = SchemaResponse { + schema_id, + model: model_vec, + model_type: schema_info.model_type, + payload_location: schema_info.payload_location, + settings, + }; + Some(response) + }, + (None, Some(_)) | (Some(_), None) => { + log::error!("Corrupted state for schema {:?}, Should never happen!", schema_id); + None + }, + (None, None) => None, + } + } + + /// Retrieve a schema info by id + pub fn get_schema_info_by_id(schema_id: SchemaId) -> Option { + if let Some(schema_info) = SchemaInfos::::get(schema_id) { + let saved_settings = schema_info.settings; + let settings = saved_settings.0.iter().collect::>(); + let response = SchemaInfoResponse { + schema_id, + model_type: schema_info.model_type, + payload_location: schema_info.payload_location, + settings, + }; + return Some(response); + } + None + } + + /// Ensures that a given u8 Vector conforms to a recognized Parquet shape + /// + /// # Errors + /// * [`Error::InvalidSchema`] + /// * [`Error::SchemaCountOverflow`] + /// + pub fn ensure_valid_model( + model_type: &ModelType, + model: &BoundedVec, + ) -> DispatchResult { + match *model_type { + ModelType::Parquet => { + serde_json::from_slice::(model) + .map_err(|_| Error::::InvalidSchema)?; + }, + ModelType::AvroBinary => serde::validate_json_model(model.clone().into_inner()) + .map_err(|_| Error::::InvalidSchema)?, + }; + Ok(()) + } + + /// Get the next available schema id + /// + /// # Errors + /// * [`Error::SchemaCountOverflow`] + /// + fn get_next_schema_id() -> Result { + let next = CurrentSchemaIdentifierMaximum::::get() + .checked_add(1) + .ok_or(Error::::SchemaCountOverflow)?; + + Ok(next) + } + + /// Adds a given schema to storage. The schema in question must be of length + /// between the min and max model size allowed for schemas (see pallet + /// constants above). If the pallet's maximum schema limit has been + /// fulfilled by the time this extrinsic is called, a SchemaCountOverflow error + /// will be thrown. + /// + /// # Errors + /// * [`Error::LessThanMinSchemaModelBytes`] - The schema's length is less than the minimum schema length + /// * [`Error::ExceedsMaxSchemaModelBytes`] - The schema's length is greater than the maximum schema length + /// * [`Error::InvalidSchema`] - Schema is malformed in some way + /// * [`Error::SchemaCountOverflow`] - The schema count has exceeded its bounds + /// * [`Error::InvalidSetting`] - Invalid setting is provided + pub fn create_schema_for( + model: BoundedVec, + model_type: ModelType, + payload_location: PayloadLocation, + settings: BoundedVec, + optional_schema_name: Option, + ) -> Result<(SchemaId, Option), DispatchError> { + Self::ensure_valid_model(&model_type, &model)?; + ensure!( + model.len() >= T::MinSchemaModelSizeBytes::get() as usize, + Error::::LessThanMinSchemaModelBytes + ); + ensure!( + model.len() <= GovernanceSchemaModelMaxBytes::::get() as usize, + Error::::ExceedsMaxSchemaModelBytes + ); + // AppendOnly is only valid for Itemized payload location + ensure!( + !settings.contains(&SchemaSetting::AppendOnly) || + payload_location == PayloadLocation::Itemized, + Error::::InvalidSetting + ); + // SignatureRequired is only valid for Itemized and Paginated payload locations + ensure!( + !settings.contains(&SchemaSetting::SignatureRequired) || + payload_location == PayloadLocation::Itemized || + payload_location == PayloadLocation::Paginated, + Error::::InvalidSetting + ); + let schema_name = match optional_schema_name { + None => None, + Some(name_payload) => { + let parsed_name = SchemaName::try_parse::(name_payload, true)?; + Some(parsed_name) + }, + }; + let schema_id = Self::add_schema( + model, + model_type, + payload_location, + settings, + schema_name.clone(), + )?; + Ok((schema_id, schema_name)) + } + + /// a method to return all versions of a schema name with their schemaIds + /// Warning: Must only get called from RPC, since the number of DB accesses is not deterministic + pub fn get_schema_versions(schema_name: Vec) -> Option> { + let bounded_name = BoundedVec::try_from(schema_name).ok()?; + let parsed_name = SchemaName::try_parse::(bounded_name, false).ok()?; + let versions: Vec<_> = match parsed_name.descriptor_exists() { + true => SchemaNameToIds::::get(&parsed_name.namespace, &parsed_name.descriptor) + .convert_to_response(&parsed_name), + false => SchemaNameToIds::::iter_prefix(&parsed_name.namespace) + .flat_map(|(descriptor, val)| { + val.convert_to_response(&parsed_name.new_with_descriptor(descriptor)) + }) + .collect(), + }; + Some(versions) + } + + /// Parses the schema name and makes sure the schema does not have a name + fn parse_and_verify_schema_name( + schema_id: SchemaId, + schema_name: &SchemaNamePayload, + ) -> Result { + let schema_option = SchemaInfos::::get(schema_id); + ensure!(schema_option.is_some(), Error::::SchemaIdDoesNotExist); + if let Some(info) = schema_option { + ensure!(!info.has_name, Error::::SchemaIdAlreadyHasName); + } + let parsed_name = SchemaName::try_parse::(schema_name.clone(), true)?; + Ok(parsed_name) + } + } +} + +#[allow(clippy::unwrap_used)] +#[cfg(feature = "runtime-benchmarks")] +impl SchemaBenchmarkHelper for Pallet { + /// Sets schema count. + fn set_schema_count(schema_id: SchemaId) { + Self::set_schema_count(schema_id); + } + + /// Creates a schema. + fn create_schema( + model: Vec, + model_type: ModelType, + payload_location: PayloadLocation, + ) -> DispatchResult { + let model: BoundedVec = + model.try_into().unwrap(); + Self::ensure_valid_model(&model_type, &model)?; + Self::add_schema(model, model_type, payload_location, BoundedVec::default(), None)?; + Ok(()) + } +} + +impl SchemaValidator for Pallet { + fn are_all_schema_ids_valid(schema_ids: &[SchemaId]) -> bool { + let latest_issue_schema_id = CurrentSchemaIdentifierMaximum::::get(); + schema_ids.iter().all(|id| id <= &latest_issue_schema_id) + } + + #[cfg(any(feature = "std", feature = "runtime-benchmarks", test))] + fn set_schema_count(n: SchemaId) { + Self::set_schema_count(n); + } +} + +impl SchemaProvider for Pallet { + fn get_schema_by_id(schema_id: SchemaId) -> Option { + Self::get_schema_by_id(schema_id) + } + + fn get_schema_info_by_id(schema_id: SchemaId) -> Option { + Self::get_schema_info_by_id(schema_id) + } +} diff --git a/pallets/schemas/src/rpc/Cargo.toml b/pallets/schemas/src/rpc/Cargo.toml new file mode 100644 index 0000000000..f1a547a282 --- /dev/null +++ b/pallets/schemas/src/rpc/Cargo.toml @@ -0,0 +1,43 @@ +[package] +name = "pallet-schemas-rpc" +version = "0.0.0" +description = "RPC package for schemas" +authors = ["Frequency"] +license = "Apache-2.0" +publish = false +homepage = "https://frequency.xyz" +repository = "https://github.com/frequency-chain/frequency/" +edition = "2021" + +[dependencies] +jsonrpsee = { workspace = true, features = ["client-core", "server", "macros"] } +# Frequency crates +pallet-schemas-runtime-api = { path = "../runtime-api", default-features = false } +common-primitives = { path = '../../../../common/primitives', default-features = false } +common-helpers = { path = '../../../../common/helpers', default-features = false } +# Substrate crates +frame-support = { workspace = true } +sp-core = { workspace = true } +sp-api = { workspace = true } +sp-rpc = { workspace = true } +sp-runtime = { workspace = true } +sp-blockchain = { workspace = true } + +[dev-dependencies] +tokio = { workspace = true, features = ["macros", "time", "parking_lot"] } +sc-client-api = { workspace = true } + +[features] +default = ["std"] +std = [ + "sp-api/std", + "sp-core/std", + "sp-runtime/std", + "frame-support/std", + "pallet-schemas-runtime-api/std", + "common-primitives/std", + "common-helpers/std", +] + +[lints] +workspace = true diff --git a/pallets/schemas/src/rpc/src/lib.rs b/pallets/schemas/src/rpc/src/lib.rs new file mode 100644 index 0000000000..77124c1580 --- /dev/null +++ b/pallets/schemas/src/rpc/src/lib.rs @@ -0,0 +1,113 @@ +// Strong Documentation Lints +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + missing_docs +)] + +//! Custom APIs for [Schemas](../pallet_schemas/index.html) + +use common_helpers::{avro, rpc::map_rpc_result}; +use common_primitives::schema::*; +use jsonrpsee::{ + core::{async_trait, RpcResult}, + proc_macros::rpc, + types::error::ErrorObject, +}; +use pallet_schemas_runtime_api::SchemasRuntimeApi; +use sp_api::ProvideRuntimeApi; +use sp_blockchain::HeaderBackend; +use sp_runtime::traits::Block as BlockT; +extern crate alloc; +use alloc::{sync::Arc, vec::Vec}; + +#[cfg(test)] +mod tests; + +/// Errors that occur on the client RPC +pub enum SchemaRpcError { + /// No schema was found for the given id. + SchemaNotFound, + /// Failed to fetch latest schema. + SchemaSearchError, + /// Schema model did not validate + SchemaValidationError, +} + +impl From for i32 { + fn from(e: SchemaRpcError) -> i32 { + match e { + SchemaRpcError::SchemaNotFound => 1, + SchemaRpcError::SchemaSearchError => 2, + SchemaRpcError::SchemaValidationError => 3, + } + } +} + +/// Frequency Schema Custom RPC API +#[rpc(client, server)] +pub trait SchemasApi { + /// retrieving schema by schema id + #[method(name = "schemas_getBySchemaId")] + fn get_by_schema_id(&self, schema_id: SchemaId) -> RpcResult>; + + /// validates a schema model and returns `true` if the model is correct. + #[method(name = "schemas_checkSchemaValidity")] + fn check_schema_validity(&self, model: Vec, at: Option) -> RpcResult; + + /// returns an array of schema versions + #[method(name = "schemas_getVersions")] + fn get_versions(&self, schema_name: String) -> RpcResult>>; +} + +/// The client handler for the API used by Frequency Service RPC with `jsonrpsee` +pub struct SchemasHandler { + client: Arc, + _marker: std::marker::PhantomData, +} + +impl SchemasHandler { + /// Create new instance with the given reference to the client. + pub fn new(client: Arc) -> Self { + Self { client, _marker: Default::default() } + } +} + +#[async_trait] +impl SchemasApiServer<::Hash> for SchemasHandler +where + Block: BlockT, + C: 'static + ProvideRuntimeApi + HeaderBackend, + C::Api: SchemasRuntimeApi, +{ + fn check_schema_validity( + &self, + model: Vec, + _at: Option<::Hash>, + ) -> RpcResult { + let validated_schema = avro::validate_raw_avro_schema(&model); + match validated_schema { + Ok(_) => Ok(true), + Err(e) => Err(ErrorObject::owned( + SchemaRpcError::SchemaValidationError.into(), + "Unable to validate schema", + Some(format!("{:?}", e)), + )), + } + } + + fn get_by_schema_id(&self, schema_id: SchemaId) -> RpcResult> { + let api = self.client.runtime_api(); + let at = self.client.info().best_hash; + let schema_api_result = api.get_by_schema_id(at, schema_id); + map_rpc_result(schema_api_result) + } + + fn get_versions(&self, schema_name: String) -> RpcResult>> { + let api = self.client.runtime_api(); + let at = self.client.info().best_hash; + let schema_api_result = api.get_schema_versions_by_name(at, schema_name.into_bytes()); + map_rpc_result(schema_api_result) + } +} diff --git a/pallets/schemas/src/rpc/src/tests/mod.rs b/pallets/schemas/src/rpc/src/tests/mod.rs new file mode 100644 index 0000000000..0ce360508e --- /dev/null +++ b/pallets/schemas/src/rpc/src/tests/mod.rs @@ -0,0 +1,140 @@ +mod rpc_mock; + +use super::*; +use common_primitives::node::Block; +use rpc_mock::*; +use std::string::ToString; + +use pallet_schemas_runtime_api::SchemasRuntimeApi; +use std::sync::Arc; + +const SUCCESSFUL_SCHEMA_ID: u16 = 1; +const SUCCESSFUL_SCHEMA_NAME: &str = "namespace.descriptor"; + +sp_api::mock_impl_runtime_apis! { + impl SchemasRuntimeApi for TestRuntimeApi { + fn get_by_schema_id(schema_id: SchemaId) -> Option { + match schema_id { + SUCCESSFUL_SCHEMA_ID => Some(SchemaResponse { + schema_id, + model: b"schema".to_vec(), + model_type: ModelType::AvroBinary, + payload_location: PayloadLocation::OnChain, + settings: Vec::new(), + }), + _ => None, + } + } + + fn get_schema_versions_by_name(schema_name: Vec) -> Option> { + let successful_name_bytes = SUCCESSFUL_SCHEMA_NAME.to_string().into_bytes(); + if successful_name_bytes == schema_name { + Some( + vec![ + SchemaVersionResponse { + schema_id: 1, + schema_version: 1, + schema_name: successful_name_bytes.clone() + }, + SchemaVersionResponse { + schema_id: 10, + schema_version: 2, + schema_name: successful_name_bytes.clone() + }, + ] + ) + } else { + None + } + } + } +} + +type SchemaResult = Result, jsonrpsee::types::ErrorObjectOwned>; +type VersionResult = Result>, jsonrpsee::types::ErrorObjectOwned>; + +#[tokio::test] +async fn get_schema_with_non_existent_schema_id_should_return_none() { + let client = Arc::new(TestApi {}); + let api = SchemasHandler::new(client); + + let result: SchemaResult = api.get_by_schema_id( + 1233, // Non-existing Schema Id + ); + + assert!(result.is_ok()); + assert!(result.unwrap().is_none()); +} + +#[tokio::test] +async fn get_schema_with_success() { + let client = Arc::new(TestApi {}); + let api = SchemasHandler::new(client); + + let result: SchemaResult = api.get_by_schema_id( + SUCCESSFUL_SCHEMA_ID, // Schema Id + ); + + assert!(result.is_ok()); + let response = result.unwrap().unwrap(); + assert_eq!(1, response.schema_id); + assert_eq!(ModelType::AvroBinary, response.model_type); + assert_eq!(PayloadLocation::OnChain, response.payload_location); +} + +#[tokio::test] +async fn get_schema_versions_with_success() { + let client = Arc::new(TestApi {}); + let api = SchemasHandler::new(client); + + let result: VersionResult = api.get_versions(SUCCESSFUL_SCHEMA_NAME.to_string()); + + assert!(result.is_ok()); + let response = result.unwrap().unwrap(); + assert_eq!(response.len(), 2); +} + +#[tokio::test] +async fn check_schema_validity_success() { + let client = Arc::new(TestApi {}); + let api = SchemasHandler::new(client); + + let result = api.check_schema_validity( + r#" + { + "type": "record", + "name": "test", + "fields": [ + {"name": "a", "type": "long", "default": 42}, + {"name": "b", "type": "string"} + ] + } + "# + .as_bytes() + .to_vec(), + None, + ); + + assert!(result.is_ok()); + assert!(result.unwrap()); +} + +#[tokio::test] +async fn check_schema_validity_fail() { + let client = Arc::new(TestApi {}); + let api = SchemasHandler::new(client); + + let result = api.check_schema_validity( + r#" + { + "type": "NOT A REAL TYPE", + "name": "test", + } + "# + .as_bytes() + .to_vec(), + None, + ); + + assert!(result.is_err()); +} diff --git a/pallets/schemas/src/rpc/src/tests/rpc_mock.rs b/pallets/schemas/src/rpc/src/tests/rpc_mock.rs new file mode 100644 index 0000000000..54c23bdd22 --- /dev/null +++ b/pallets/schemas/src/rpc/src/tests/rpc_mock.rs @@ -0,0 +1,61 @@ +use common_primitives::node::Block; +use sp_api::{ApiRef, ProvideRuntimeApi}; + +use sp_blockchain::HeaderBackend; +use sp_runtime::traits::{Block as BlockT, NumberFor, Zero}; + +pub struct TestApi {} + +pub struct TestRuntimeApi {} + +impl ProvideRuntimeApi for TestApi { + type Api = TestRuntimeApi; + + fn runtime_api(&self) -> ApiRef<'_, Self::Api> { + TestRuntimeApi {}.into() + } +} + +/// Blockchain database header backend. Does not perform any validation. +impl HeaderBackend for TestApi { + fn header( + &self, + _id: Block::Hash, + ) -> std::result::Result, sp_blockchain::Error> { + Ok(None) + } + + fn info(&self) -> sc_client_api::blockchain::Info { + sc_client_api::blockchain::Info { + best_hash: Default::default(), + best_number: Zero::zero(), + finalized_hash: Default::default(), + finalized_number: Zero::zero(), + genesis_hash: Default::default(), + number_leaves: Default::default(), + finalized_state: None, + block_gap: None, + } + } + + fn status( + &self, + _id: Block::Hash, + ) -> std::result::Result { + Ok(sc_client_api::blockchain::BlockStatus::Unknown) + } + + fn number( + &self, + _hash: Block::Hash, + ) -> std::result::Result>, sp_blockchain::Error> { + Ok(None) + } + + fn hash( + &self, + _number: NumberFor, + ) -> std::result::Result, sp_blockchain::Error> { + Ok(None) + } +} diff --git a/pallets/schemas/src/runtime-api/Cargo.toml b/pallets/schemas/src/runtime-api/Cargo.toml new file mode 100644 index 0000000000..b8d07cb040 --- /dev/null +++ b/pallets/schemas/src/runtime-api/Cargo.toml @@ -0,0 +1,25 @@ +[package] +name = "pallet-schemas-runtime-api" +version = "0.0.0" +description = "RPC runtime package for schemas" +authors = ["Frequency"] +license = "Apache-2.0" +publish = false +homepage = "https://frequency.xyz" +repository = "https://github.com/frequency-chain/frequency/" +edition = "2021" + +[dependencies] +# Substrate +sp-runtime = { workspace = true } +sp-api = { workspace = true } +frame-support = { workspace = true } +# Frequency related dependencies +common-primitives = { default-features = false, path = "../../../../common/primitives" } + +[features] +default = ["std"] +std = ["sp-api/std", "frame-support/std", "common-primitives/std"] + +[lints] +workspace = true diff --git a/pallets/schemas/src/runtime-api/src/lib.rs b/pallets/schemas/src/runtime-api/src/lib.rs new file mode 100644 index 0000000000..c5ddfd0b34 --- /dev/null +++ b/pallets/schemas/src/runtime-api/src/lib.rs @@ -0,0 +1,39 @@ +#![cfg_attr(not(feature = "std"), no_std)] +#![allow(clippy::too_many_arguments)] +#![allow(clippy::unnecessary_mut_passed)] +#![allow(rustdoc::bare_urls)] +// Strong Documentation Lints +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + missing_docs +)] + +//! Runtime API definition for [Schemas](../pallet_schemas/index.html) +//! +//! This api must be implemented by the node runtime. +//! Runtime APIs Provide: +//! - An interface between the runtime and Custom RPCs. +//! - Runtime interfaces for end users beyond just State Queries + +use common_primitives::schema::*; +extern crate alloc; +use alloc::vec::Vec; + +sp_api::decl_runtime_apis! { + + /// Runtime Version for Schemas + /// - MUST be incremented if anything changes + /// - See: https://paritytech.github.io/polkadot/doc/polkadot_primitives/runtime_api/index.html + #[api_version(2)] + + /// Runtime API definition for [Schemas](../pallet_schemas/index.html) + pub trait SchemasRuntimeApi + { + /// Fetch the schema by id + fn get_by_schema_id(schema_id: SchemaId) -> Option; + /// Fetch the schema versions by name + fn get_schema_versions_by_name(schema_name: Vec) -> Option>; + } +} diff --git a/pallets/schemas/src/serde.rs b/pallets/schemas/src/serde.rs new file mode 100644 index 0000000000..a3ca5b8c1a --- /dev/null +++ b/pallets/schemas/src/serde.rs @@ -0,0 +1,20 @@ +use serde_json::{from_slice, Value}; +extern crate alloc; +use alloc::vec::Vec; + +#[derive(Debug, PartialEq)] +pub enum SerdeError { + InvalidNullSchema, + InvalidSchema, + DeserializationError, +} + +pub fn validate_json_model(json_schema: Vec) -> Result<(), SerdeError> { + let result: Value = from_slice(&json_schema).map_err(|_| SerdeError::DeserializationError)?; + + match result { + Value::Null => Err(SerdeError::InvalidNullSchema), + Value::Object(_) => Ok(()), + _ => Err(SerdeError::InvalidSchema), + } +} diff --git a/pallets/schemas/src/tests/mock.rs b/pallets/schemas/src/tests/mock.rs new file mode 100644 index 0000000000..f0e6055a3c --- /dev/null +++ b/pallets/schemas/src/tests/mock.rs @@ -0,0 +1,206 @@ +use frame_support::{ + assert_ok, + dispatch::RawOrigin, + traits::{ConstU16, ConstU32, EitherOfDiverse}, + weights::{Weight, WeightToFeeCoefficient, WeightToFeeCoefficients, WeightToFeePolynomial}, + BoundedVec, +}; +use frame_system::EnsureRoot; +use parity_scale_codec::MaxEncodedLen; + +use common_primitives::node::AccountId; +use common_runtime::constants::DAYS; +use pallet_collective::{self, Members}; +use smallvec::smallvec; +use sp_core::{parameter_types, Encode, H256}; +use sp_runtime::{ + traits::{BlakeTwo256, IdentityLookup}, + AccountId32, BuildStorage, DispatchError, Perbill, +}; + +use crate as pallet_schemas; + +type Block = frame_system::mocking::MockBlockU32; + +frame_support::construct_runtime!( + pub enum Test + { + System: frame_system::{Pallet, Call, Config, Storage, Event}, + SchemasPallet: pallet_schemas::{Pallet, Call, Storage, Event}, + Council: pallet_collective::::{Pallet, Call, Config, Storage, Event, Origin}, + } +); + +// See https://paritytech.github.io/substrate/master/pallet_collective/index.html for +// the descriptions of these configs. + +parameter_types! { + pub BlockWeights: frame_system::limits::BlockWeights = + frame_system::limits::BlockWeights::simple_max(Weight::MAX); + pub MaxProposalWeight: frame_support::weights::Weight = sp_runtime::Perbill::from_percent(50) * BlockWeights::get().max_block; + pub const SchemaModelMaxBytesBoundedVecLimit :u32 = 65_500; +} + +impl Encode for SchemaModelMaxBytesBoundedVecLimit {} + +impl MaxEncodedLen for SchemaModelMaxBytesBoundedVecLimit { + fn max_encoded_len() -> usize { + u32::max_encoded_len() + } +} + +pub type CouncilCollective = pallet_collective::Instance1; +impl pallet_collective::Config for Test { + type RuntimeOrigin = RuntimeOrigin; + type Proposal = RuntimeCall; + type RuntimeEvent = RuntimeEvent; + type MotionDuration = ConstU32<{ 5 * DAYS }>; + type MaxProposals = ConstU32<25>; + type MaxMembers = ConstU32<10>; + type DefaultVote = pallet_collective::PrimeDefaultVote; + type WeightInfo = (); + + type SetMembersOrigin = frame_system::EnsureRoot; + type MaxProposalWeight = MaxProposalWeight; + type DisapproveOrigin = EnsureRoot; + type KillOrigin = EnsureRoot; + type Consideration = (); +} + +pub type MaxSchemaRegistrations = ConstU16<64_000>; + +pub struct WeightToFee; + +impl WeightToFeePolynomial for WeightToFee { + type Balance = u64; + + fn polynomial() -> WeightToFeeCoefficients { + smallvec![WeightToFeeCoefficient { + degree: 1, + coeff_frac: Perbill::zero(), + coeff_integer: 1, + negative: false, + }] + } +} + +/// Interface to collective pallet to propose a proposal. +pub struct CouncilProposalProvider; + +impl pallet_schemas::ProposalProvider for CouncilProposalProvider { + fn propose( + who: AccountId, + threshold: u32, + proposal: Box, + ) -> Result<(u32, u32), DispatchError> { + let length_bound: u32 = proposal.using_encoded(|p| p.len() as u32); + Council::do_propose_proposed(who, threshold, proposal, length_bound) + } + + fn propose_with_simple_majority( + who: AccountId, + proposal: Box, + ) -> Result<(u32, u32), DispatchError> { + let members = Members::::get(); + let threshold: u32 = ((members.len() / 2) + 1) as u32; + let length_bound: u32 = proposal.using_encoded(|p| p.len() as u32); + Council::do_propose_proposed(who, threshold, proposal, length_bound) + } + + #[cfg(any(feature = "runtime-benchmarks", feature = "test"))] + fn proposal_count() -> u32 { + use pallet_collective::ProposalCount; + ProposalCount::::get() + } +} + +impl pallet_schemas::Config for Test { + type RuntimeEvent = RuntimeEvent; + type WeightInfo = (); + type MinSchemaModelSizeBytes = ConstU32<8>; + // a very high limit on incoming schema size, expected to be much higher than what + // is actually allowed. + type SchemaModelMaxBytesBoundedVecLimit = SchemaModelMaxBytesBoundedVecLimit; + type MaxSchemaRegistrations = MaxSchemaRegistrations; + type MaxSchemaSettingsPerSchema = ConstU32<2>; + // The proposal type + type Proposal = RuntimeCall; + // The Council proposal provider interface + type ProposalProvider = CouncilProposalProvider; + // The origin that is allowed to create schemas via governance + // It has to be this way so benchmarks will pass in CI. + type CreateSchemaViaGovernanceOrigin = EitherOfDiverse< + EnsureRoot, + pallet_collective::EnsureProportionMoreThan, + >; +} + +impl frame_system::Config for Test { + type AccountData = (); + type BaseCallFilter = frame_support::traits::Everything; + type BlockWeights = (); + type BlockLength = (); + type RuntimeCall = RuntimeCall; + type DbWeight = (); + type RuntimeOrigin = RuntimeOrigin; + type Nonce = u64; + type Hash = H256; + type Hashing = BlakeTwo256; + type AccountId = AccountId; + type Lookup = IdentityLookup; + type RuntimeEvent = RuntimeEvent; + type RuntimeTask = RuntimeTask; + type Block = Block; + type BlockHashCount = ConstU32<250>; + type Version = (); + type PalletInfo = PalletInfo; + type OnNewAccount = (); + type OnKilledAccount = (); + type SystemWeightInfo = (); + type SS58Prefix = ConstU16<42>; + type OnSetCode = (); + type MaxConsumers = frame_support::traits::ConstU32<16>; + type SingleBlockMigrations = (); + type MultiBlockMigrator = (); + type PreInherents = (); + type PostInherents = (); + type PostTransactions = (); + type ExtensionsWeightInfo = (); +} + +pub fn new_test_ext() -> sp_io::TestExternalities { + let mut ext: sp_io::TestExternalities = + frame_system::GenesisConfig::::default().build_storage().unwrap().into(); + ext.execute_with(|| System::set_block_number(1)); + ext +} + +/// Create and return a simple test AccountId32 constructed with the desired integer. +pub fn test_public(n: u8) -> AccountId32 { + AccountId32::new([n; 32]) +} + +/// Create and return a simple signed origin from a test_public constructed with the desired integer, +/// for passing to an extrinsic call +pub fn test_origin_signed(n: u8) -> RuntimeOrigin { + RuntimeOrigin::signed(test_public(n)) +} + +/// creates a bounded vec schema +pub fn create_bounded_schema_vec( + from_string: &str, +) -> BoundedVec::SchemaModelMaxBytesBoundedVecLimit> { + let fields_vec = Vec::from(from_string.as_bytes()); + BoundedVec::try_from(fields_vec).unwrap() +} + +/// sets max schema size +pub fn sudo_set_max_schema_size() { + assert_ok!(SchemasPallet::set_max_schema_model_bytes(RawOrigin::Root.into(), 70)); +} + +/// struct which encapsulates a test case and expected result +pub struct TestCase { + pub input: &'static str, + pub expected: T, +} diff --git a/pallets/schemas/src/tests/mod.rs b/pallets/schemas/src/tests/mod.rs new file mode 100644 index 0000000000..baaa2f1243 --- /dev/null +++ b/pallets/schemas/src/tests/mod.rs @@ -0,0 +1,3 @@ +pub mod mock; +mod other_tests; +mod serde_tests; diff --git a/pallets/schemas/src/tests/other_tests.rs b/pallets/schemas/src/tests/other_tests.rs new file mode 100644 index 0000000000..84fffe9c12 --- /dev/null +++ b/pallets/schemas/src/tests/other_tests.rs @@ -0,0 +1,1108 @@ +use common_primitives::{ + node::AccountId, + parquet::{ + column::ParquetColumn, + column_compression_codec::ColumnCompressionCodec, + numeric::{ParquetInteger, ParquetNumericType}, + types::ParquetType, + ParquetModel, + }, + schema::{ + ModelType, PayloadLocation, SchemaId, SchemaSetting, SchemaVersion, SchemaVersionResponse, + }, +}; +use frame_support::{ + assert_noop, assert_ok, dispatch::RawOrigin, traits::ChangeMembers, weights::Weight, BoundedVec, +}; +use pallet_collective::ProposalOf; +use parity_scale_codec::Encode; +use serial_test::serial; +use sp_runtime::{BuildStorage, DispatchError::BadOrigin}; + +use crate::{ + CurrentSchemaIdentifierMaximum, Error, Event as AnnouncementEvent, + GovernanceSchemaModelMaxBytes, SchemaDescriptor, SchemaName, SchemaNamePayload, + SchemaNamespace, SchemaVersionId, MAX_NUMBER_OF_VERSIONS, +}; + +use super::mock::*; + +#[test] +fn set_max_schema_size_works_if_root() { + new_test_ext().execute_with(|| { + let new_size: u32 = 42; + assert_ok!(SchemasPallet::set_max_schema_model_bytes(RawOrigin::Root.into(), new_size)); + let new_schema_size = GovernanceSchemaModelMaxBytes::::get(); + assert_eq!(new_size, new_schema_size); + }) +} + +#[test] +fn set_max_schema_size_fails_if_not_root() { + new_test_ext().execute_with(|| { + let new_size: u32 = 42; + let sender: AccountId = test_public(1); + let expected_err = BadOrigin; + assert_noop!( + SchemasPallet::set_max_schema_model_bytes(RuntimeOrigin::signed(sender), new_size), + expected_err + ); + }) +} + +#[test] +fn set_max_schema_size_fails_if_larger_than_bound() { + new_test_ext().execute_with(|| { + let new_size: u32 = 68_000; + let expected_err = Error::::ExceedsMaxSchemaModelBytes; + assert_noop!( + SchemasPallet::set_max_schema_model_bytes(RawOrigin::Root.into(), new_size), + expected_err + ); + }) +} + +#[test] +fn get_non_existing_schema_by_id_should_return_none() { + new_test_ext().execute_with(|| { + // act + let res = SchemasPallet::get_schema_by_id(1); + + // assert + assert!(res.as_ref().is_none()); + }) +} + +#[test] +fn validate_schema_is_acceptable() { + new_test_ext().execute_with(|| { + let test_str_raw = r#"{"name":"John Doe"}"#; + let result = SchemasPallet::ensure_valid_model( + &ModelType::AvroBinary, + &create_bounded_schema_vec(test_str_raw), + ); + assert_ok!(result); + }); +} + +#[test] +fn reject_null_json_schema() { + new_test_ext().execute_with(|| { + assert_noop!( + SchemasPallet::ensure_valid_model( + &ModelType::AvroBinary, + &create_bounded_schema_vec("") + ), + Error::::InvalidSchema + ); + }) +} + +#[test] +fn serialize_parquet_column() { + new_test_ext().execute_with(|| { + let p: ParquetColumn = ParquetColumn::new( + "Foo".to_string(), + ParquetType::default(), + ColumnCompressionCodec::default(), + true, + ); + assert_eq!( + serde_json::to_string(&p).unwrap(), + r#"{"name":"Foo","column_type":"BOOLEAN","compression":"UNCOMPRESSED","bloom_filter":true}"# + ); + }) +} + +#[test] +fn validate_parquet_model() { + new_test_ext().execute_with(|| { + let test_str_raw = r#"[{"name": "Foo", "column_type": "BOOLEAN", "compression": "UNCOMPRESSED", "bloom_filter": true}]"#; + let result = SchemasPallet::ensure_valid_model(&ModelType::Parquet, &create_bounded_schema_vec(test_str_raw)); + assert_ok!(result); + }); +} + +#[test] +fn reject_incorrect_parquet_model() { + new_test_ext().execute_with(|| { + let test_str_raw = r#"{"name":"John Doe"}"#; + assert_noop!( + SchemasPallet::ensure_valid_model( + &ModelType::Parquet, + &create_bounded_schema_vec(test_str_raw) + ), + Error::::InvalidSchema + ); + }) +} + +#[test] +fn serialize_parquet_model() { + new_test_ext().execute_with(|| { + let p: ParquetModel = vec![ParquetColumn::new( + "Baz".to_string(), + ParquetType::default(), + ColumnCompressionCodec::default(), + true, + )]; + assert_eq!( + serde_json::to_string(&p).unwrap(), + r#"[{"name":"Baz","column_type":"BOOLEAN","compression":"UNCOMPRESSED","bloom_filter":true}]"# + ); + }); +} + +#[test] +fn serialize_parquet_model_integer() { + new_test_ext().execute_with(|| { + let p: ParquetModel = vec![ParquetColumn::new( + "Baz".to_string(), + ParquetType::NumericType(ParquetNumericType::Integer( + ParquetInteger { + bit_width: 32, + sign: false, + } + )), + ColumnCompressionCodec::default(), + true, + )]; + assert_eq!( + serde_json::to_string(&p).unwrap(), + r#"[{"name":"Baz","column_type":{"INTEGER":{"bit_width":32,"sign":false}},"compression":"UNCOMPRESSED","bloom_filter":true}]"# + ); + }); +} + +#[test] +fn validate_parquet_model_integer() { + new_test_ext().execute_with(|| { + let test_str_raw = r#"[{"name":"Baz","column_type":{"INTEGER":{"bit_width":32,"sign":false}},"compression":"UNCOMPRESSED","bloom_filter":true}]"#; + let result = SchemasPallet::ensure_valid_model(&ModelType::Parquet, &create_bounded_schema_vec(test_str_raw)); + assert_ok!(result); + }); +} + +#[test] +fn dsnp_broadcast() { + let test_str_raw = r#" + [ + { + "name": "announcementType", + "column_type": { + "INTEGER": { + "bit_width": 32, + "sign": true + } + }, + "compression": "GZIP", + "bloom_filter": false + }, + { + "name": "contentHash", + "column_type": "BYTE_ARRAY", + "compression": "SNAPPY", + "bloom_filter": true + }, + { + "name": "fromId", + "column_type": { + "INTEGER": { + "bit_width": 64, + "sign": false + } + }, + "compression": "UNCOMPRESSED", + "bloom_filter": true + }, + { + "name": "url", + "column_type": "STRING", + "compression": "LZO", + "bloom_filter": false + } + ] + "#; + let result = SchemasPallet::ensure_valid_model( + &ModelType::Parquet, + &create_bounded_schema_vec(test_str_raw), + ); + assert_ok!(result); +} + +#[test] +fn schema_name_try_parse_with_strict_invalid_names_should_fail() { + new_test_ext().execute_with(|| { + let test_cases = [ + TestCase { + input: r#"¥¤¤.©©©"#, expected: Error::::InvalidSchemaNameEncoding + }, + TestCase { + input: r#"1asbd.hgd"#, + expected: Error::::InvalidSchemaNameCharacters, + }, + TestCase { + input: r#"asbd.hg1d"#, + expected: Error::::InvalidSchemaNameCharacters, + }, + TestCase { + input: r#"asbd.hg@d"#, + expected: Error::::InvalidSchemaNameCharacters, + }, + TestCase { input: r#"asbd"#, expected: Error::::InvalidSchemaNameStructure }, + TestCase { + input: r#"asbd.sdhks.shd"#, + expected: Error::::InvalidSchemaNameStructure, + }, + TestCase { + input: r#"-asbdsdhks.shd"#, + expected: Error::::InvalidSchemaNameStructure, + }, + TestCase { + input: r#"asbdsdhks-.shd"#, + expected: Error::::InvalidSchemaNameStructure, + }, + TestCase { + input: r#"asbdsdhks.-shd"#, + expected: Error::::InvalidSchemaNameStructure, + }, + TestCase { + input: r#"asbdsdhks.shd-"#, + expected: Error::::InvalidSchemaNameStructure, + }, + TestCase { + input: r#"hjsagdhjsagjhgdshjagsadhjsaaaaa."#, + expected: Error::::InvalidSchemaNamespaceLength, + }, + TestCase { input: r#"a.sdhks"#, expected: Error::::InvalidSchemaNamespaceLength }, + TestCase { + input: r#"aa.sdhks"#, + expected: Error::::InvalidSchemaNamespaceLength, + }, + TestCase { input: r#".sdhks"#, expected: Error::::InvalidSchemaNamespaceLength }, + TestCase { input: r#"hjs."#, expected: Error::::InvalidSchemaDescriptorLength }, + ]; + for tc in test_cases { + let payload: SchemaNamePayload = + BoundedVec::try_from(tc.input.to_string().into_bytes()).expect("should convert"); + assert_noop!(SchemaName::try_parse::(payload, true), tc.expected); + } + }); +} + +#[test] +fn schema_name_try_parse_with_non_strict_invalid_names_should_fail() { + new_test_ext().execute_with(|| { + let test_cases = [ + TestCase { + input: r#"¥¤¤.©©©"#, expected: Error::::InvalidSchemaNameEncoding + }, + TestCase { input: r#"¥¤¤"#, expected: Error::::InvalidSchemaNameEncoding }, + TestCase { + input: r#"1asbd.hgd"#, + expected: Error::::InvalidSchemaNameCharacters, + }, + TestCase { input: r#"1asbd"#, expected: Error::::InvalidSchemaNameCharacters }, + TestCase { + input: r#"asbd.hg1d"#, + expected: Error::::InvalidSchemaNameCharacters, + }, + TestCase { + input: r#"asbd.hg@d"#, + expected: Error::::InvalidSchemaNameCharacters, + }, + TestCase { input: r#"hg@d"#, expected: Error::::InvalidSchemaNameCharacters }, + TestCase { + input: r#"asbd.sdhks.shd"#, + expected: Error::::InvalidSchemaNameStructure, + }, + TestCase { + input: r#"-asbdsdhks.shd"#, + expected: Error::::InvalidSchemaNameStructure, + }, + TestCase { + input: r#"asbdsdhks-.shd"#, + expected: Error::::InvalidSchemaNameStructure, + }, + TestCase { + input: r#"hjsagdhjsagjhgdshjagsadhjsaaaaa."#, + expected: Error::::InvalidSchemaNamespaceLength, + }, + TestCase { + input: r#"hjsagdhjsagjhgdshjagsadhjsaaaaa"#, + expected: Error::::InvalidSchemaNamespaceLength, + }, + TestCase { input: r#"a.sdhks"#, expected: Error::::InvalidSchemaNamespaceLength }, + TestCase { input: r#"a"#, expected: Error::::InvalidSchemaNamespaceLength }, + TestCase { + input: r#"aa.sdhks"#, + expected: Error::::InvalidSchemaNamespaceLength, + }, + TestCase { input: r#".sdhks"#, expected: Error::::InvalidSchemaNamespaceLength }, + TestCase { input: r#"aa"#, expected: Error::::InvalidSchemaNamespaceLength }, + TestCase { input: r#"hjs."#, expected: Error::::InvalidSchemaDescriptorLength }, + ]; + for tc in test_cases { + let payload: SchemaNamePayload = + BoundedVec::try_from(tc.input.to_string().into_bytes()).expect("should convert"); + assert_noop!(SchemaName::try_parse::(payload, false), tc.expected); + } + }); +} + +#[test] +fn schema_name_try_parse_with_strict_valid_names_should_succeed() { + new_test_ext().execute_with(|| { + let valid_names = ["Abc.a", "a-v.D-D", "aZxcvBnmkjhgfds.asdfghKkloiuyTre"]; + let parsed_names = vec![ + SchemaName { + namespace: SchemaNamespace::try_from("abc".to_string().into_bytes()).unwrap(), + descriptor: SchemaDescriptor::try_from("a".to_string().into_bytes()).unwrap(), + }, + SchemaName { + namespace: SchemaNamespace::try_from("a-v".to_string().into_bytes()).unwrap(), + descriptor: SchemaDescriptor::try_from("d-d".to_string().into_bytes()).unwrap(), + }, + SchemaName { + namespace: SchemaNamespace::try_from("azxcvbnmkjhgfds".to_string().into_bytes()) + .unwrap(), + descriptor: SchemaDescriptor::try_from("asdfghkkloiuytre".to_string().into_bytes()) + .unwrap(), + }, + ]; + for (name, result) in valid_names.iter().zip(parsed_names) { + let payload: SchemaNamePayload = + BoundedVec::try_from(name.to_string().into_bytes()).expect("should convert"); + assert_eq!(SchemaName::try_parse::(payload, true), Ok(result)); + } + }); +} + +#[test] +fn schema_name_try_parse_with_non_strict_valid_names_should_succeed() { + new_test_ext().execute_with(|| { + let valid_names = ["Abc", "a-v", "aZxcvBnmkjhgfds"]; + let parsed_names = vec![ + SchemaName { + namespace: SchemaNamespace::try_from("abc".to_string().into_bytes()).unwrap(), + descriptor: SchemaDescriptor::default(), + }, + SchemaName { + namespace: SchemaNamespace::try_from("a-v".to_string().into_bytes()).unwrap(), + descriptor: SchemaDescriptor::default(), + }, + SchemaName { + namespace: SchemaNamespace::try_from("azxcvbnmkjhgfds".to_string().into_bytes()) + .unwrap(), + descriptor: SchemaDescriptor::default(), + }, + ]; + for (name, result) in valid_names.iter().zip(parsed_names) { + let payload: SchemaNamePayload = + BoundedVec::try_from(name.to_string().into_bytes()).expect("should convert"); + assert_eq!(SchemaName::try_parse::(payload, false), Ok(result)); + } + }); +} + +#[test] +fn schema_name_get_combined_name_with_valid_names_should_succeed() { + new_test_ext().execute_with(|| { + let valid_names = ["Abc.a", "a-v.D-D", "aZxcvBnmkjhgfds.asdfghKkloiuyTre"]; + let results = vec!["abc.a", "a-v.d-d", "azxcvbnmkjhgfds.asdfghkkloiuytre"]; + for (name, result) in valid_names.iter().zip(results) { + let payload: SchemaNamePayload = + BoundedVec::try_from(name.to_string().into_bytes()).expect("should convert"); + let parsed = SchemaName::try_parse::(payload, true).expect("should work"); + assert_eq!(parsed.get_combined_name(), result.to_string().into_bytes()); + } + }); +} + +#[test] +fn schema_version_id_add_should_work() { + new_test_ext().execute_with(|| { + let mut val = SchemaVersionId::default(); + let schema_id_1: SchemaId = 55; + let schema_id_2: SchemaId = 200; + let schema_name = SchemaName { + namespace: SchemaNamespace::try_from("abc".to_string().into_bytes()).unwrap(), + descriptor: SchemaDescriptor::try_from("d-d".to_string().into_bytes()).unwrap(), + }; + assert_ok!(val.add::(schema_id_1)); + assert_ok!(val.add::(schema_id_2)); + + let response = val.convert_to_response(&schema_name); + assert_eq!( + response, + vec![ + SchemaVersionResponse { + schema_id: schema_id_1, + schema_version: 1, + schema_name: schema_name.clone().get_combined_name() + }, + SchemaVersionResponse { + schema_id: schema_id_2, + schema_version: 2, + schema_name: schema_name.get_combined_name() + }, + ] + ); + }); +} + +#[test] +fn schema_version_id_add_with_duplicate_should_fail() { + new_test_ext().execute_with(|| { + let mut val = SchemaVersionId::default(); + let schema_id_1: SchemaId = 55; + + assert_ok!(val.add::(schema_id_1)); + assert_noop!(val.add::(schema_id_1), Error::::SchemaIdAlreadyExists); + }); +} + +#[test] +fn schema_version_id_add_with_max_len_should_fail() { + new_test_ext().execute_with(|| { + let mut val = SchemaVersionId::default(); + for i in 1..=MAX_NUMBER_OF_VERSIONS { + let res = val.add::(i as SchemaId); + assert_eq!(res, Ok(i as SchemaVersion)); + } + + assert_noop!( + val.add::((MAX_NUMBER_OF_VERSIONS + 1) as SchemaId), + Error::::ExceedsMaxNumberOfVersions + ); + }); +} + +#[test] +fn create_schema_v3_requires_valid_schema_size() { + new_test_ext().execute_with(|| { + sudo_set_max_schema_size(); + let test_cases: [TestCase<(Error, u8)>; 2] = [ + TestCase { + input: r#"{"a":1}"#, + expected: (Error::::LessThanMinSchemaModelBytes, 3), + }, + TestCase { + input: r#"{"id": "long", "title": "I am a very very very very long schema", "properties": "just way too long to live a long life", "description": "Just a never ending stream of bytes that goes on for a minute too long"}"#, + expected: (Error::::ExceedsMaxSchemaModelBytes, 2), + }, + ]; + for tc in test_cases { + assert_noop!( + SchemasPallet::create_schema_v3(RuntimeOrigin::signed(test_public(1)), create_bounded_schema_vec(tc.input), ModelType::AvroBinary, PayloadLocation::OnChain, BoundedVec::default(), None), + tc.expected.0); + } + }) +} + +#[test] +fn create_schema_v3_happy_path() { + new_test_ext().execute_with(|| { + // arrange + sudo_set_max_schema_size(); + let sender: AccountId = test_public(1); + let name = "namespace.descriptor"; + let schema_name: SchemaNamePayload = + BoundedVec::try_from(name.to_string().into_bytes()).expect("should convert"); + + // act + assert_ok!(SchemasPallet::create_schema_v3( + RuntimeOrigin::signed(sender.clone()), + create_bounded_schema_vec(r#"{"name": "Doe", "type": "lost"}"#), + ModelType::AvroBinary, + PayloadLocation::OnChain, + BoundedVec::default(), + Some(schema_name.clone()), + )); + let res = SchemasPallet::get_schema_by_id(1); + let versions = SchemasPallet::get_schema_versions(schema_name.clone().into_inner()); + + // assert + System::assert_has_event( + AnnouncementEvent::SchemaCreated { key: sender, schema_id: 1 }.into(), + ); + System::assert_last_event( + AnnouncementEvent::SchemaNameCreated { + schema_id: 1, + name: name.to_string().into_bytes(), + } + .into(), + ); + assert!(res.as_ref().is_some()); + assert_eq!( + versions, + Some(vec![SchemaVersionResponse { + schema_id: 1, + schema_name: schema_name.into_inner(), + schema_version: 1 + }]) + ); + }) +} + +#[test] +#[serial] +fn create_schema_v3_increments_schema_id_and_version_for_same_name() { + new_test_ext().execute_with(|| { + // arrange + sudo_set_max_schema_size(); + let sender: AccountId = test_public(1); + let name = "namespace.descriptor"; + let schema_name: SchemaNamePayload = + BoundedVec::try_from(name.to_string().into_bytes()).expect("should convert"); + let mut last_schema_id: SchemaId = 0; + + // act and assert + for fields in [ + r#"{"Name": "Bond", "Code": "007"}"#, + r#"{"type": "num","minimum": -90,"maximum": 90}"#, + r#"{"latitude": 48.858093,"longitude": 2.294694}"#, + ] { + let expected_schema_id = last_schema_id + 1; + assert_ok!(SchemasPallet::create_schema_v3( + RuntimeOrigin::signed(sender.clone()), + create_bounded_schema_vec(fields), + ModelType::AvroBinary, + PayloadLocation::OnChain, + BoundedVec::default(), + Some(schema_name.clone()), + )); + System::assert_has_event( + AnnouncementEvent::SchemaCreated { + key: sender.clone(), + schema_id: expected_schema_id, + } + .into(), + ); + System::assert_last_event( + AnnouncementEvent::SchemaNameCreated { + schema_id: expected_schema_id, + name: name.to_string().into_bytes(), + } + .into(), + ); + last_schema_id = expected_schema_id; + } + let versions = SchemasPallet::get_schema_versions(schema_name.clone().into_inner()); + assert_eq!( + versions, + Some(vec![ + SchemaVersionResponse { + schema_id: 1, + schema_name: schema_name.clone().into_inner(), + schema_version: 1 + }, + SchemaVersionResponse { + schema_id: 2, + schema_name: schema_name.clone().into_inner(), + schema_version: 2 + }, + SchemaVersionResponse { + schema_id: 3, + schema_name: schema_name.into_inner(), + schema_version: 3 + } + ]) + ); + }) +} + +#[test] +fn get_schema_versions_for_namespace_should_return_all_descriptors() { + new_test_ext().execute_with(|| { + // arrange + sudo_set_max_schema_size(); + let sender: AccountId = test_public(1); + let namespace = "namespace"; + let name_1 = format!("{}.alice", namespace); + let schema_name_1: SchemaNamePayload = + BoundedVec::try_from(name_1.to_string().into_bytes()).expect("should convert"); + let name_2 = format!("{}.bob", namespace); + let schema_name_2: SchemaNamePayload = + BoundedVec::try_from(name_2.to_string().into_bytes()).expect("should convert"); + assert_ok!(SchemasPallet::create_schema_v3( + RuntimeOrigin::signed(sender.clone()), + create_bounded_schema_vec(r#"{"name": "Doe", "type": "lost"}"#), + ModelType::AvroBinary, + PayloadLocation::OnChain, + BoundedVec::default(), + Some(schema_name_1.clone()), + )); + assert_ok!(SchemasPallet::create_schema_v3( + RuntimeOrigin::signed(sender.clone()), + create_bounded_schema_vec(r#"{"name": "Doe", "type": "lost"}"#), + ModelType::AvroBinary, + PayloadLocation::OnChain, + BoundedVec::default(), + Some(schema_name_2.clone()), + )); + + // act + let versions = SchemasPallet::get_schema_versions(String::from(namespace).into_bytes()); + + // assert + assert!(versions.is_some()); + + let mut inner = versions.clone().unwrap(); + inner.sort_by(|a, b| a.schema_name.cmp(&b.schema_name)); + assert_eq!( + versions, + Some(vec![ + SchemaVersionResponse { + schema_id: 1, + schema_name: schema_name_1.into_inner(), + schema_version: 1 + }, + SchemaVersionResponse { + schema_id: 2, + schema_name: schema_name_2.into_inner(), + schema_version: 1 + }, + ]) + ); + }) +} + +#[test] +fn create_schema_via_governance_v2_happy_path() { + new_test_ext().execute_with(|| { + // arrange + sudo_set_max_schema_size(); + let settings = vec![SchemaSetting::AppendOnly]; + let sender: AccountId = test_public(5); + let name = "namespace.descriptor"; + let schema_name: SchemaNamePayload = + BoundedVec::try_from(name.to_string().into_bytes()).expect("should convert"); + + // act + assert_ok!(SchemasPallet::create_schema_via_governance_v2( + RuntimeOrigin::from(pallet_collective::RawOrigin::Members(2, 3)), + sender, + create_bounded_schema_vec(r#"{"name": "Doe", "type": "lost"}"#), + ModelType::AvroBinary, + PayloadLocation::Itemized, + BoundedVec::try_from(settings.clone()).unwrap(), + Some(schema_name.clone()), + )); + + // assert + let res = SchemasPallet::get_schema_by_id(1); + let versions = SchemasPallet::get_schema_versions(schema_name.clone().into_inner()); + + assert_eq!(res.unwrap().settings, settings); + assert_eq!( + versions, + Some(vec![SchemaVersionResponse { + schema_id: 1, + schema_name: schema_name.into_inner(), + schema_version: 1 + }]) + ); + }) +} + +#[test] +fn create_schema_via_governance_v2_with_append_only_setting_and_non_itemized_should_fail() { + new_test_ext().execute_with(|| { + sudo_set_max_schema_size(); + + // arrange + let settings = vec![SchemaSetting::AppendOnly]; + let sender: AccountId = test_public(1); + // act and assert + assert_noop!( + SchemasPallet::create_schema_via_governance_v2( + RuntimeOrigin::from(pallet_collective::RawOrigin::Members(2, 3)), + sender.clone(), + create_bounded_schema_vec(r#"{"name":"John Doe"}"#), + ModelType::AvroBinary, + PayloadLocation::Paginated, + BoundedVec::try_from(settings.clone()).unwrap(), + None, + ), + Error::::InvalidSetting + ); + + // act and assert + assert_noop!( + SchemasPallet::create_schema_via_governance_v2( + RuntimeOrigin::from(pallet_collective::RawOrigin::Members(2, 3)), + sender.clone(), + create_bounded_schema_vec(r#"{"name":"John Doe"}"#), + ModelType::AvroBinary, + PayloadLocation::OnChain, + BoundedVec::try_from(settings.clone()).unwrap(), + None, + ), + Error::::InvalidSetting + ); + + assert_noop!( + SchemasPallet::create_schema_via_governance_v2( + RuntimeOrigin::from(pallet_collective::RawOrigin::Members(2, 3)), + sender, + create_bounded_schema_vec(r#"{"name":"John Doe"}"#), + ModelType::AvroBinary, + PayloadLocation::IPFS, + BoundedVec::try_from(settings.clone()).unwrap(), + None, + ), + Error::::InvalidSetting + ); + }) +} +#[test] +fn create_schema_via_governance_v2_with_signature_required_setting_and_wrong_location_should_fail() +{ + new_test_ext().execute_with(|| { + sudo_set_max_schema_size(); + + // arrange + let settings = vec![SchemaSetting::SignatureRequired]; + let sender: AccountId = test_public(1); + + for location in [PayloadLocation::OnChain, PayloadLocation::IPFS] { + // act and assert + assert_noop!( + SchemasPallet::create_schema_via_governance_v2( + RuntimeOrigin::from(pallet_collective::RawOrigin::Members(2, 3)), + sender.clone(), + create_bounded_schema_vec(r#"{"name":"John Doe"}"#), + ModelType::AvroBinary, + location, + BoundedVec::try_from(settings.clone()).unwrap(), + None, + ), + Error::::InvalidSetting + ); + } + }) +} +/// Test that a request to be a provider, makes the MSA a provider after the council approves it. +#[test] +fn propose_to_create_schema_v2_happy_path() { + new_test_ext().execute_with(|| { + sudo_set_max_schema_size(); + + let test_model = r#"{"foo": "bar", "bar": "buzz"}"#; + let serialized_fields = Vec::from(test_model.as_bytes()); + let schema_name = + SchemaNamePayload::try_from("namespace.descriptor".to_string().into_bytes()) + .expect("should work"); + // Propose a new schema + _ = SchemasPallet::propose_to_create_schema_v2( + test_origin_signed(5), + create_bounded_schema_vec(test_model), + ModelType::AvroBinary, + PayloadLocation::OnChain, + BoundedVec::default(), + Some(schema_name.clone()), + ); + + // Find the Proposed event and get it's hash and index so it can be voted on + let proposed_events: Vec<(u32, ::Hash)> = System::events() + .iter() + .filter_map(|event| match event.event { + RuntimeEvent::Council(pallet_collective::Event::Proposed { + account: _, + proposal_index, + proposal_hash, + threshold: _, + }) => Some((proposal_index, proposal_hash)), + _ => None, + }) + .collect(); + + assert_eq!(proposed_events.len(), 1); + + let proposal_index = proposed_events[0].0; + let proposal_hash = proposed_events[0].1; + let proposal = ProposalOf::::get(proposal_hash).unwrap(); + let proposal_len: u32 = proposal.encoded_size() as u32; + + // Set up the council members + let council_member_1 = test_public(1); // Use ALICE as a council member + let council_member_2 = test_public(2); // Use BOB as a council member + let council_member_3 = test_public(3); // Use CHARLIE as a council member + + let incoming = vec![]; + let outgoing = vec![]; + Council::change_members( + &incoming, + &outgoing, + vec![council_member_1.clone(), council_member_2.clone(), council_member_3.clone()], + ); + + // Council member #1 votes AYE on the proposal + assert_ok!(Council::vote( + RuntimeOrigin::signed(council_member_1.clone()), + proposal_hash, + proposal_index, + true + )); + // Council member #2 votes AYE on the proposal + assert_ok!(Council::vote( + RuntimeOrigin::signed(council_member_2.clone()), + proposal_hash, + proposal_index, + true + )); + // Council member #3 votes NAY on the proposal + assert_ok!(Council::vote( + RuntimeOrigin::signed(council_member_3.clone()), + proposal_hash, + proposal_index, + false + )); + + // Find the Voted event and check if it passed + let voted_events: Vec<(bool, u32, u32)> = System::events() + .iter() + .filter_map(|event| match event.event { + RuntimeEvent::Council(pallet_collective::Event::Voted { + account: _, + proposal_hash: _, + voted, + yes, + no, + }) => Some((voted, yes, no)), + _ => None, + }) + .collect(); + + assert_eq!(voted_events.len(), 3); + assert_eq!(voted_events[1].1, 2); // There should be two AYE (out of three) votes to pass + + // Close the voting + assert_ok!(Council::close( + RuntimeOrigin::signed(test_public(5)), + proposal_hash, + proposal_index, + Weight::MAX, + proposal_len + )); + + // Find the Closed event and check if it passed + let closed_events: Vec<(u32, u32)> = System::events() + .iter() + .filter_map(|event| match event.event { + RuntimeEvent::Council(pallet_collective::Event::Closed { + proposal_hash: _, + yes, + no, + }) => Some((yes, no)), + _ => None, + }) + .collect(); + + assert_eq!(closed_events.len(), 1); + assert_eq!(closed_events[0].0, 2); // There should be two YES votes to pass + + // Find the SchemaCreated event and check if it passed + let schema_events: Vec = System::events() + .iter() + .filter_map(|event| match event.event { + RuntimeEvent::SchemasPallet(AnnouncementEvent::SchemaCreated { + key: _, + schema_id, + }) | + RuntimeEvent::SchemasPallet(AnnouncementEvent::SchemaNameCreated { + name: _, + schema_id, + }) => Some(schema_id), + _ => None, + }) + .collect(); + + // Confirm that the schema was created + assert_eq!(schema_events.len(), 2); + + let last_schema_id = schema_events[0]; + let created_schema = SchemasPallet::get_schema_by_id(last_schema_id); + assert!(created_schema.as_ref().is_some()); + assert_eq!(created_schema.as_ref().unwrap().clone().model, serialized_fields); + }) +} + +#[test] +fn propose_to_create_schema_name_happy_path() { + new_test_ext().execute_with(|| { + sudo_set_max_schema_size(); + let schema_name = + SchemaNamePayload::try_from("namespace.descriptor".to_string().into_bytes()) + .expect("should work"); + let sender: AccountId = test_public(1); + + assert_ok!(SchemasPallet::create_schema_v3( + RuntimeOrigin::signed(sender.clone()), + create_bounded_schema_vec(r#"{"name": "Doe", "type": "lost"}"#), + ModelType::AvroBinary, + PayloadLocation::OnChain, + BoundedVec::default(), + None, + )); + // Propose a new schema + _ = SchemasPallet::propose_to_create_schema_name( + test_origin_signed(5), + 1, + schema_name.clone(), + ); + + // Find the Proposed event and get it's hash and index so it can be voted on + let proposed_events: Vec<(u32, ::Hash)> = System::events() + .iter() + .filter_map(|event| match event.event { + RuntimeEvent::Council(pallet_collective::Event::Proposed { + account: _, + proposal_index, + proposal_hash, + threshold: _, + }) => Some((proposal_index, proposal_hash)), + _ => None, + }) + .collect(); + + assert_eq!(proposed_events.len(), 1); + + let proposal_index = proposed_events[0].0; + let proposal_hash = proposed_events[0].1; + let proposal = ProposalOf::::get(proposal_hash).unwrap(); + let proposal_len: u32 = proposal.encoded_size() as u32; + + // Set up the council members + let council_member_1 = test_public(1); // Use ALICE as a council member + let council_member_2 = test_public(2); // Use BOB as a council member + let council_member_3 = test_public(3); // Use CHARLIE as a council member + + let incoming = vec![]; + let outgoing = vec![]; + Council::change_members( + &incoming, + &outgoing, + vec![council_member_1.clone(), council_member_2.clone(), council_member_3.clone()], + ); + + // Council member #1 votes AYE on the proposal + assert_ok!(Council::vote( + RuntimeOrigin::signed(council_member_1.clone()), + proposal_hash, + proposal_index, + true + )); + // Council member #2 votes AYE on the proposal + assert_ok!(Council::vote( + RuntimeOrigin::signed(council_member_2.clone()), + proposal_hash, + proposal_index, + true + )); + // Council member #3 votes NAY on the proposal + assert_ok!(Council::vote( + RuntimeOrigin::signed(council_member_3.clone()), + proposal_hash, + proposal_index, + false + )); + + // Find the Voted event and check if it passed + let voted_events: Vec<(bool, u32, u32)> = System::events() + .iter() + .filter_map(|event| match event.event { + RuntimeEvent::Council(pallet_collective::Event::Voted { + account: _, + proposal_hash: _, + voted, + yes, + no, + }) => Some((voted, yes, no)), + _ => None, + }) + .collect(); + + assert_eq!(voted_events.len(), 3); + assert_eq!(voted_events[1].1, 2); // There should be two AYE (out of three) votes to pass + + // Close the voting + assert_ok!(Council::close( + RuntimeOrigin::signed(test_public(5)), + proposal_hash, + proposal_index, + Weight::MAX, + proposal_len + )); + + // Find the Closed event and check if it passed + let closed_events: Vec<(u32, u32)> = System::events() + .iter() + .filter_map(|event| match event.event { + RuntimeEvent::Council(pallet_collective::Event::Closed { + proposal_hash: _, + yes, + no, + }) => Some((yes, no)), + _ => None, + }) + .collect(); + + assert_eq!(closed_events.len(), 1); + assert_eq!(closed_events[0].0, 2); // There should be two YES votes to pass + + // Find the SchemaCreated event and check if it passed + let schema_events: Vec = System::events() + .iter() + .filter_map(|event| match event.event { + RuntimeEvent::SchemasPallet(AnnouncementEvent::SchemaNameCreated { + name: _, + schema_id, + }) => Some(schema_id), + _ => None, + }) + .collect(); + + // Confirm that the schema was created + assert_eq!(schema_events.len(), 1); + + let versions = SchemasPallet::get_schema_versions(schema_name.clone().into_inner()); + assert_eq!( + versions, + Some(vec![SchemaVersionResponse { + schema_id: 1, + schema_name: schema_name.into_inner(), + schema_version: 1 + }]) + ); + }) +} + +#[test] +fn genesis_config_build_genesis_schemas() { + let mut t = frame_system::GenesisConfig::::default().build_storage().unwrap(); + crate::GenesisConfig:: { + initial_schemas: serde_json::from_slice(include_bytes!( + "../../../../resources/genesis-schemas.json" + )) + .unwrap(), + ..Default::default() + } + .assimilate_storage(&mut t) + .unwrap(); + + let mut ext: sp_io::TestExternalities = t.into(); + + ext.execute_with(|| { + System::set_block_number(1); + let res = CurrentSchemaIdentifierMaximum::::get(); + + // Should be set to 16_000 + assert!(res == 16_000); + + // Check that the first schema exists + let res = SchemasPallet::get_schema_by_id(1); + assert!(res.is_some()); + }); +} diff --git a/pallets/schemas/src/tests/serde_tests.rs b/pallets/schemas/src/tests/serde_tests.rs new file mode 100644 index 0000000000..0ede09fef0 --- /dev/null +++ b/pallets/schemas/src/tests/serde_tests.rs @@ -0,0 +1,71 @@ +use crate::{serde::*, tests::mock::*}; +use frame_support::assert_noop; + +fn create_schema_vec(from_string: &str) -> Vec { + Vec::from(from_string.as_bytes()) +} + +#[test] +fn serde_helper_valid_schema() { + for test_str_raw in [ + r#"{"name":"John Doe"}"#, + r#"{"minimum": -90,"maximum": 90}"#, + r#"{"a":0}"#, + r#"{"fruits":[ "apple",{"fruitName": "orange","fruitLike": true }]}"#, + r#"{ "links": { + "self": "http://example.com/articles?page[number]=3&page[size]=1", + "first": "http://example.com/articles?page[number]=1&page[size]=1" + }}"#, + r#"{ "alias": "0xd8f3" }"#, + ] { + assert!(validate_json_model(create_schema_vec(test_str_raw)).is_ok()); + } +} + +#[test] +fn serde_helper_invalid_schema() { + for test_str_raw in [ + "true", + "567", + r#"string"#, + "", + r#"["this","is","a","weird","array"], + r#"{ "name", "John Doe" }"#, + r#"{ "minimum": -90, 90 }"#, + r#"{ "fruits": [ "apple", {"fruitName": "orange" "fruitLike": true }}"#, + ] { + assert!(validate_json_model(create_schema_vec(test_str_raw)).is_err()); + } +} + +#[test] +fn serde_helper_deserialzer_error() { + new_test_ext().execute_with(|| { + for test_str_raw in [ + r#"{ "name": "#, // ExpectedSomeValue + r#"{ 56: "number" }"#, // KeyMustBeAString + r#"{ "file address": "file path" \r\n}"#, // EofWhileParsingObject + r#"{ "unicode code point": "\ud83f" }"#, // InvalidUnicodeCodePoint + // r#"{ "v": 300e715100 }"#, // NumberOutOfRange + ] { + assert_noop!( + validate_json_model(create_schema_vec(test_str_raw)), + SerdeError::DeserializationError + ); + } + }); +} + +#[test] +fn serde_helper_null_schema() { + new_test_ext().execute_with(|| { + assert_noop!(validate_json_model(create_schema_vec("null")), SerdeError::InvalidNullSchema); + }); +} + +#[test] +fn serde_helper_utf8_encoding_schema() { + let utf8_schema = r#"{"a":"Espíritu navideño"}"#; + let result = validate_json_model(create_schema_vec(utf8_schema)); + assert!(result.is_ok()); +} diff --git a/pallets/schemas/src/types.rs b/pallets/schemas/src/types.rs new file mode 100644 index 0000000000..0bf2652beb --- /dev/null +++ b/pallets/schemas/src/types.rs @@ -0,0 +1,190 @@ +//! Types for the Schema Pallet +use crate::{Config, Error}; +use common_primitives::schema::{ + ModelType, PayloadLocation, SchemaId, SchemaSetting, SchemaSettings, SchemaVersion, + SchemaVersionResponse, +}; +use core::fmt::Debug; +use frame_support::{ensure, pallet_prelude::ConstU32, traits::StorageVersion, BoundedVec}; +use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; +use scale_info::TypeInfo; +use sp_runtime::DispatchError; +extern crate alloc; +use alloc::{string::String, vec, vec::Vec}; +use frame_support::traits::Len; + +/// Current storage version of the schemas pallet. +pub const SCHEMA_STORAGE_VERSION: StorageVersion = StorageVersion::new(4); + +/// The maximum size of schema name including all parts +pub const SCHEMA_NAME_BYTES_MAX: u32 = 32; // Hard limit of 32 bytes +/// A schema name following following structure NAMESPACE.DESCRIPTOR +pub type SchemaNamePayload = BoundedVec>; +/// schema namespace type +pub type SchemaNamespace = BoundedVec>; +/// schema descriptor type +pub type SchemaDescriptor = BoundedVec>; +/// The minimum size of a namespace in schema +pub const NAMESPACE_MIN: u32 = 3; +/// The maximum size of a namespace in schema +pub const NAMESPACE_MAX: u32 = SCHEMA_NAME_BYTES_MAX - (DESCRIPTOR_MIN + 1); +/// The minimum size of a schema descriptor +pub const DESCRIPTOR_MIN: u32 = 1; +/// The maximum size of a schema descriptor +pub const DESCRIPTOR_MAX: u32 = SCHEMA_NAME_BYTES_MAX - (NAMESPACE_MIN + 1); +/// separator character +pub const SEPARATOR_CHAR: char = '.'; +/// maximum number of versions for a certain schema name +/// -1 is to avoid overflow when converting the (index + 1) to `SchemaVersion` in `SchemaVersionId` +pub const MAX_NUMBER_OF_VERSIONS: u32 = SchemaVersion::MAX as u32 - 1; + +#[derive(Debug, serde::Serialize, serde::Deserialize)] +/// Genesis Schemas need a way to load up and this is it! +pub struct GenesisSchema { + /// The type of model (AvroBinary, Parquet, etc.) + pub model_type: ModelType, + /// The payload location + pub payload_location: PayloadLocation, + /// The Payload Model + pub model: String, + /// Schema Full Name: {Namespace}.{Descriptor} + pub name: String, + /// Settings + pub settings: Vec, +} + +#[derive(Clone, Encode, Decode, PartialEq, Debug, TypeInfo, Eq, MaxEncodedLen)] +/// A structure defining a Schema information (excluding the payload) +pub struct SchemaInfo { + /// The type of model (AvroBinary, Parquet, etc.) + pub model_type: ModelType, + /// The payload location + pub payload_location: PayloadLocation, + /// additional control settings for the schema + pub settings: SchemaSettings, + /// Defines if a schema has a name or not + pub has_name: bool, +} + +#[derive(Clone, Encode, Decode, PartialEq, Debug, TypeInfo, Eq, MaxEncodedLen)] +/// A structure defining name of a schema +pub struct SchemaName { + /// namespace or domain of the schema + pub namespace: SchemaNamespace, + /// name or descriptor of this schema + pub descriptor: SchemaDescriptor, +} + +#[derive(Clone, Encode, Decode, PartialEq, Debug, TypeInfo, Eq, MaxEncodedLen, Default)] +/// A structure defining name of a schema +pub struct SchemaVersionId { + /// the index of each item + 1 is considered as their version. + /// Ex: the schemaId located in `ids[2]` is for version number 3 + pub ids: BoundedVec>, +} + +impl SchemaName { + /// parses and verifies the request and returns the SchemaName type if successful + pub fn try_parse( + payload: SchemaNamePayload, + is_strict: bool, + ) -> Result { + // check if all ascii + let mut str = String::from_utf8(payload.into_inner()) + .map_err(|_| Error::::InvalidSchemaNameEncoding)?; + ensure!(str.is_ascii(), Error::::InvalidSchemaNameEncoding); + + // to canonical form + str = String::from(str.to_lowercase().trim()); + + // check if alphabetic or - or separator character + ensure!( + str.chars().all(|c| c.is_ascii_alphabetic() || c == '-' || c == SEPARATOR_CHAR), + Error::::InvalidSchemaNameCharacters + ); + + // split to namespace and descriptor + let chunks: Vec<_> = str.split(SEPARATOR_CHAR).collect(); + ensure!( + chunks.len() == 2 || (chunks.len() == 1 && !is_strict), + Error::::InvalidSchemaNameStructure + ); + + // check namespace + let namespace = BoundedVec::try_from(chunks[0].as_bytes().to_vec()) + .map_err(|_| Error::::InvalidSchemaNamespaceLength)?; + ensure!(NAMESPACE_MIN <= namespace.len() as u32, Error::::InvalidSchemaNamespaceLength); + // should not start or end with - + ensure!( + !(namespace.starts_with(b"-") || namespace.ends_with(b"-")), + Error::::InvalidSchemaNameStructure + ); + + // check descriptor + let descriptor = match chunks.len() == 2 { + true => { + let descriptor = BoundedVec::try_from(chunks[1].as_bytes().to_vec()) + .map_err(|_| Error::::InvalidSchemaDescriptorLength)?; + ensure!( + DESCRIPTOR_MIN <= descriptor.len() as u32, + Error::::InvalidSchemaDescriptorLength + ); + // should not start or end with - + ensure!( + !(descriptor.starts_with(b"-") || descriptor.ends_with(b"-")), + Error::::InvalidSchemaNameStructure + ); + descriptor + }, + false => BoundedVec::default(), + }; + + Ok(SchemaName { namespace, descriptor }) + } + + /// get the combined name namespace.descriptor + pub fn get_combined_name(&self) -> Vec { + [ + self.namespace.clone().into_inner(), + vec![SEPARATOR_CHAR as u8], + self.descriptor.clone().into_inner(), + ] + .concat() + } + + /// creates a new SchemaName using provided descriptor + pub fn new_with_descriptor(&self, descriptor: SchemaDescriptor) -> Self { + Self { namespace: self.namespace.clone(), descriptor } + } + + /// returns true if the descriptor exists + pub fn descriptor_exists(&self) -> bool { + self.descriptor.len() > 0 + } +} + +impl SchemaVersionId { + /// adds a new schema id and returns the version for that schema_id + pub fn add(&mut self, schema_id: SchemaId) -> Result { + let is_new = !self.ids.iter().any(|id| id == &schema_id); + ensure!(is_new, Error::::SchemaIdAlreadyExists); + self.ids + .try_push(schema_id) + .map_err(|_| Error::::ExceedsMaxNumberOfVersions)?; + let version = self.ids.len() as SchemaVersion; + Ok(version) + } + + /// convert into a response vector + pub fn convert_to_response(&self, schema_name: &SchemaName) -> Vec { + self.ids + .iter() + .enumerate() + .map(|(index, schema_id)| SchemaVersionResponse { + schema_name: schema_name.get_combined_name(), + schema_id: *schema_id, + schema_version: (index + 1) as SchemaVersion, + }) + .collect() + } +} diff --git a/pallets/schemas/src/weights.rs b/pallets/schemas/src/weights.rs new file mode 100644 index 0000000000..61cc1b59af --- /dev/null +++ b/pallets/schemas/src/weights.rs @@ -0,0 +1,519 @@ + +//! Autogenerated weights for `pallet_schemas` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-04-18, STEPS: `20`, REPEAT: `10`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `ip-10-173-0-75`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` +//! WASM-EXECUTION: `Compiled`, CHAIN: `None`, DB CACHE: `1024` + +// Executed Command: +// ./scripts/../target/release/frequency +// benchmark +// pallet +// --pallet=pallet_schemas +// --extrinsic +// * +// --heap-pages=4096 +// --steps=20 +// --repeat=10 +// --output=./scripts/../pallets/schemas/src/weights.rs +// --template=./scripts/../.maintain/frame-weight-template.hbs +// --additional-trie-layers=3 +// --runtime=./scripts/../target/release/wbuild/frequency-runtime/frequency_runtime.wasm +// --genesis-builder=runtime + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; +use core::marker::PhantomData; + +/// Weight functions needed for `pallet_schemas`. +pub trait WeightInfo { + fn create_schema_v3_with_name(m: u32, ) -> Weight; + fn create_schema_v3_without_name(m: u32, ) -> Weight; + fn set_max_schema_model_bytes() -> Weight; + fn create_schema_via_governance_v2_with_name(m: u32, ) -> Weight; + fn create_schema_via_governance_v2_without_name(m: u32, ) -> Weight; + fn propose_to_create_schema_v2_with_name(m: u32, ) -> Weight; + fn propose_to_create_schema_v2_without_name(m: u32, ) -> Weight; + fn propose_to_create_schema_name() -> Weight; + fn create_schema_name_via_governance() -> Weight; +} + +/// Weights for `pallet_schemas` using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl WeightInfo for SubstrateWeight { + /// Storage: `Schemas::GovernanceSchemaModelMaxBytes` (r:1 w:0) + /// Proof: `Schemas::GovernanceSchemaModelMaxBytes` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Schemas::CurrentSchemaIdentifierMaximum` (r:1 w:1) + /// Proof: `Schemas::CurrentSchemaIdentifierMaximum` (`max_values`: Some(1), `max_size`: Some(2), added: 497, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaNameToIds` (r:1 w:1) + /// Proof: `Schemas::SchemaNameToIds` (`max_values`: None, `max_size`: Some(602), added: 3077, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaInfos` (r:0 w:1) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaPayloads` (r:0 w:1) + /// Proof: `Schemas::SchemaPayloads` (`max_values`: None, `max_size`: Some(65514), added: 67989, mode: `MaxEncodedLen`) + /// The range of component `m` is `[16, 65499]`. + fn create_schema_v3_with_name(m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `316` + // Estimated: `4562` + // Minimum execution time: 26_804_000 picoseconds. + Weight::from_parts(18_715_708, 4562) + // Standard Error: 53 + .saturating_add(Weight::from_parts(34_038, 0).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) + } + /// Storage: `Schemas::GovernanceSchemaModelMaxBytes` (r:1 w:0) + /// Proof: `Schemas::GovernanceSchemaModelMaxBytes` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Schemas::CurrentSchemaIdentifierMaximum` (r:1 w:1) + /// Proof: `Schemas::CurrentSchemaIdentifierMaximum` (`max_values`: Some(1), `max_size`: Some(2), added: 497, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaInfos` (r:0 w:1) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaPayloads` (r:0 w:1) + /// Proof: `Schemas::SchemaPayloads` (`max_values`: None, `max_size`: Some(65514), added: 67989, mode: `MaxEncodedLen`) + /// The range of component `m` is `[16, 65499]`. + fn create_schema_v3_without_name(m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `261` + // Estimated: `1984` + // Minimum execution time: 16_599_000 picoseconds. + Weight::from_parts(5_162_715, 1984) + // Standard Error: 54 + .saturating_add(Weight::from_parts(34_014, 0).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } + /// Storage: `Schemas::GovernanceSchemaModelMaxBytes` (r:0 w:1) + /// Proof: `Schemas::GovernanceSchemaModelMaxBytes` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + fn set_max_schema_model_bytes() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 5_337_000 picoseconds. + Weight::from_parts(5_658_000, 0) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Schemas::GovernanceSchemaModelMaxBytes` (r:1 w:0) + /// Proof: `Schemas::GovernanceSchemaModelMaxBytes` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Schemas::CurrentSchemaIdentifierMaximum` (r:1 w:1) + /// Proof: `Schemas::CurrentSchemaIdentifierMaximum` (`max_values`: Some(1), `max_size`: Some(2), added: 497, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaNameToIds` (r:1 w:1) + /// Proof: `Schemas::SchemaNameToIds` (`max_values`: None, `max_size`: Some(602), added: 3077, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaInfos` (r:0 w:1) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaPayloads` (r:0 w:1) + /// Proof: `Schemas::SchemaPayloads` (`max_values`: None, `max_size`: Some(65514), added: 67989, mode: `MaxEncodedLen`) + /// The range of component `m` is `[16, 65499]`. + fn create_schema_via_governance_v2_with_name(m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `316` + // Estimated: `4562` + // Minimum execution time: 26_616_000 picoseconds. + Weight::from_parts(20_235_554, 4562) + // Standard Error: 47 + .saturating_add(Weight::from_parts(35_293, 0).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) + } + /// Storage: `Schemas::GovernanceSchemaModelMaxBytes` (r:1 w:0) + /// Proof: `Schemas::GovernanceSchemaModelMaxBytes` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Schemas::CurrentSchemaIdentifierMaximum` (r:1 w:1) + /// Proof: `Schemas::CurrentSchemaIdentifierMaximum` (`max_values`: Some(1), `max_size`: Some(2), added: 497, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaInfos` (r:0 w:1) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaPayloads` (r:0 w:1) + /// Proof: `Schemas::SchemaPayloads` (`max_values`: None, `max_size`: Some(65514), added: 67989, mode: `MaxEncodedLen`) + /// The range of component `m` is `[16, 65499]`. + fn create_schema_via_governance_v2_without_name(m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `261` + // Estimated: `1984` + // Minimum execution time: 16_628_000 picoseconds. + Weight::from_parts(7_280_854, 1984) + // Standard Error: 53 + .saturating_add(Weight::from_parts(35_300, 0).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } + /// Storage: `Council::Members` (r:1 w:0) + /// Proof: `Council::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::ProposalOf` (r:1 w:1) + /// Proof: `Council::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Council::Proposals` (r:1 w:1) + /// Proof: `Council::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::ProposalCount` (r:1 w:1) + /// Proof: `Council::ProposalCount` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::Voting` (r:0 w:1) + /// Proof: `Council::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `m` is `[16, 65499]`. + fn propose_to_create_schema_v2_with_name(m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `166` + // Estimated: `4126` + // Minimum execution time: 20_683_000 picoseconds. + Weight::from_parts(4_575_208, 4126) + // Standard Error: 46 + .saturating_add(Weight::from_parts(3_454, 0).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) + } + /// Storage: `Council::Members` (r:1 w:0) + /// Proof: `Council::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::ProposalOf` (r:1 w:1) + /// Proof: `Council::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Council::Proposals` (r:1 w:1) + /// Proof: `Council::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::ProposalCount` (r:1 w:1) + /// Proof: `Council::ProposalCount` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::Voting` (r:0 w:1) + /// Proof: `Council::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `m` is `[16, 65499]`. + fn propose_to_create_schema_v2_without_name(m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `166` + // Estimated: `4126` + // Minimum execution time: 19_644_000 picoseconds. + Weight::from_parts(4_341_735, 4126) + // Standard Error: 47 + .saturating_add(Weight::from_parts(3_469, 0).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) + } + /// Storage: `Schemas::SchemaInfos` (r:1 w:0) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: `Council::Members` (r:1 w:0) + /// Proof: `Council::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::ProposalOf` (r:1 w:1) + /// Proof: `Council::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Council::Proposals` (r:1 w:1) + /// Proof: `Council::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::ProposalCount` (r:1 w:1) + /// Proof: `Council::ProposalCount` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::Voting` (r:0 w:1) + /// Proof: `Council::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn propose_to_create_schema_name() -> Weight { + // Proof Size summary in bytes: + // Measured: `680` + // Estimated: `4640` + // Minimum execution time: 32_253_000 picoseconds. + Weight::from_parts(33_975_000, 4640) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) + } + /// Storage: `Schemas::SchemaInfos` (r:1 w:0) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaNameToIds` (r:1 w:1) + /// Proof: `Schemas::SchemaNameToIds` (`max_values`: None, `max_size`: Some(602), added: 3077, mode: `MaxEncodedLen`) + fn create_schema_name_via_governance() -> Weight { + // Proof Size summary in bytes: + // Measured: `569` + // Estimated: `4562` + // Minimum execution time: 22_682_000 picoseconds. + Weight::from_parts(22_893_000, 4562) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } +} + +// For backwards compatibility and tests. +impl WeightInfo for () { + /// Storage: `Schemas::GovernanceSchemaModelMaxBytes` (r:1 w:0) + /// Proof: `Schemas::GovernanceSchemaModelMaxBytes` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Schemas::CurrentSchemaIdentifierMaximum` (r:1 w:1) + /// Proof: `Schemas::CurrentSchemaIdentifierMaximum` (`max_values`: Some(1), `max_size`: Some(2), added: 497, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaNameToIds` (r:1 w:1) + /// Proof: `Schemas::SchemaNameToIds` (`max_values`: None, `max_size`: Some(602), added: 3077, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaInfos` (r:0 w:1) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaPayloads` (r:0 w:1) + /// Proof: `Schemas::SchemaPayloads` (`max_values`: None, `max_size`: Some(65514), added: 67989, mode: `MaxEncodedLen`) + /// The range of component `m` is `[16, 65499]`. + fn create_schema_v3_with_name(m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `316` + // Estimated: `4562` + // Minimum execution time: 26_804_000 picoseconds. + Weight::from_parts(18_715_708, 4562) + // Standard Error: 53 + .saturating_add(Weight::from_parts(34_038, 0).saturating_mul(m.into())) + .saturating_add(RocksDbWeight::get().reads(3_u64)) + .saturating_add(RocksDbWeight::get().writes(4_u64)) + } + /// Storage: `Schemas::GovernanceSchemaModelMaxBytes` (r:1 w:0) + /// Proof: `Schemas::GovernanceSchemaModelMaxBytes` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Schemas::CurrentSchemaIdentifierMaximum` (r:1 w:1) + /// Proof: `Schemas::CurrentSchemaIdentifierMaximum` (`max_values`: Some(1), `max_size`: Some(2), added: 497, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaInfos` (r:0 w:1) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaPayloads` (r:0 w:1) + /// Proof: `Schemas::SchemaPayloads` (`max_values`: None, `max_size`: Some(65514), added: 67989, mode: `MaxEncodedLen`) + /// The range of component `m` is `[16, 65499]`. + fn create_schema_v3_without_name(m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `261` + // Estimated: `1984` + // Minimum execution time: 16_599_000 picoseconds. + Weight::from_parts(5_162_715, 1984) + // Standard Error: 54 + .saturating_add(Weight::from_parts(34_014, 0).saturating_mul(m.into())) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(3_u64)) + } + /// Storage: `Schemas::GovernanceSchemaModelMaxBytes` (r:0 w:1) + /// Proof: `Schemas::GovernanceSchemaModelMaxBytes` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + fn set_max_schema_model_bytes() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 5_337_000 picoseconds. + Weight::from_parts(5_658_000, 0) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: `Schemas::GovernanceSchemaModelMaxBytes` (r:1 w:0) + /// Proof: `Schemas::GovernanceSchemaModelMaxBytes` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Schemas::CurrentSchemaIdentifierMaximum` (r:1 w:1) + /// Proof: `Schemas::CurrentSchemaIdentifierMaximum` (`max_values`: Some(1), `max_size`: Some(2), added: 497, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaNameToIds` (r:1 w:1) + /// Proof: `Schemas::SchemaNameToIds` (`max_values`: None, `max_size`: Some(602), added: 3077, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaInfos` (r:0 w:1) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaPayloads` (r:0 w:1) + /// Proof: `Schemas::SchemaPayloads` (`max_values`: None, `max_size`: Some(65514), added: 67989, mode: `MaxEncodedLen`) + /// The range of component `m` is `[16, 65499]`. + fn create_schema_via_governance_v2_with_name(m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `316` + // Estimated: `4562` + // Minimum execution time: 26_616_000 picoseconds. + Weight::from_parts(20_235_554, 4562) + // Standard Error: 47 + .saturating_add(Weight::from_parts(35_293, 0).saturating_mul(m.into())) + .saturating_add(RocksDbWeight::get().reads(3_u64)) + .saturating_add(RocksDbWeight::get().writes(4_u64)) + } + /// Storage: `Schemas::GovernanceSchemaModelMaxBytes` (r:1 w:0) + /// Proof: `Schemas::GovernanceSchemaModelMaxBytes` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Schemas::CurrentSchemaIdentifierMaximum` (r:1 w:1) + /// Proof: `Schemas::CurrentSchemaIdentifierMaximum` (`max_values`: Some(1), `max_size`: Some(2), added: 497, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaInfos` (r:0 w:1) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaPayloads` (r:0 w:1) + /// Proof: `Schemas::SchemaPayloads` (`max_values`: None, `max_size`: Some(65514), added: 67989, mode: `MaxEncodedLen`) + /// The range of component `m` is `[16, 65499]`. + fn create_schema_via_governance_v2_without_name(m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `261` + // Estimated: `1984` + // Minimum execution time: 16_628_000 picoseconds. + Weight::from_parts(7_280_854, 1984) + // Standard Error: 53 + .saturating_add(Weight::from_parts(35_300, 0).saturating_mul(m.into())) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(3_u64)) + } + /// Storage: `Council::Members` (r:1 w:0) + /// Proof: `Council::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::ProposalOf` (r:1 w:1) + /// Proof: `Council::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Council::Proposals` (r:1 w:1) + /// Proof: `Council::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::ProposalCount` (r:1 w:1) + /// Proof: `Council::ProposalCount` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::Voting` (r:0 w:1) + /// Proof: `Council::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `m` is `[16, 65499]`. + fn propose_to_create_schema_v2_with_name(m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `166` + // Estimated: `4126` + // Minimum execution time: 20_683_000 picoseconds. + Weight::from_parts(4_575_208, 4126) + // Standard Error: 46 + .saturating_add(Weight::from_parts(3_454, 0).saturating_mul(m.into())) + .saturating_add(RocksDbWeight::get().reads(4_u64)) + .saturating_add(RocksDbWeight::get().writes(4_u64)) + } + /// Storage: `Council::Members` (r:1 w:0) + /// Proof: `Council::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::ProposalOf` (r:1 w:1) + /// Proof: `Council::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Council::Proposals` (r:1 w:1) + /// Proof: `Council::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::ProposalCount` (r:1 w:1) + /// Proof: `Council::ProposalCount` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::Voting` (r:0 w:1) + /// Proof: `Council::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `m` is `[16, 65499]`. + fn propose_to_create_schema_v2_without_name(m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `166` + // Estimated: `4126` + // Minimum execution time: 19_644_000 picoseconds. + Weight::from_parts(4_341_735, 4126) + // Standard Error: 47 + .saturating_add(Weight::from_parts(3_469, 0).saturating_mul(m.into())) + .saturating_add(RocksDbWeight::get().reads(4_u64)) + .saturating_add(RocksDbWeight::get().writes(4_u64)) + } + /// Storage: `Schemas::SchemaInfos` (r:1 w:0) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: `Council::Members` (r:1 w:0) + /// Proof: `Council::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::ProposalOf` (r:1 w:1) + /// Proof: `Council::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Council::Proposals` (r:1 w:1) + /// Proof: `Council::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::ProposalCount` (r:1 w:1) + /// Proof: `Council::ProposalCount` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::Voting` (r:0 w:1) + /// Proof: `Council::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn propose_to_create_schema_name() -> Weight { + // Proof Size summary in bytes: + // Measured: `680` + // Estimated: `4640` + // Minimum execution time: 32_253_000 picoseconds. + Weight::from_parts(33_975_000, 4640) + .saturating_add(RocksDbWeight::get().reads(5_u64)) + .saturating_add(RocksDbWeight::get().writes(4_u64)) + } + /// Storage: `Schemas::SchemaInfos` (r:1 w:0) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaNameToIds` (r:1 w:1) + /// Proof: `Schemas::SchemaNameToIds` (`max_values`: None, `max_size`: Some(602), added: 3077, mode: `MaxEncodedLen`) + fn create_schema_name_via_governance() -> Weight { + // Proof Size summary in bytes: + // Measured: `569` + // Estimated: `4562` + // Minimum execution time: 22_682_000 picoseconds. + Weight::from_parts(22_893_000, 4562) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } +} + + +#[cfg(test)] +mod tests { + use frame_support::{traits::Get, weights::Weight, dispatch::DispatchClass}; + use common_runtime::constants::{MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO}; + use common_runtime::weights::extrinsic_weights::ExtrinsicBaseWeight; + + #[allow(dead_code)] + struct BlockWeights; + impl Get for BlockWeights { + fn get() -> frame_system::limits::BlockWeights { + frame_system::limits::BlockWeights::builder() + .base_block(Weight::zero()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::non_mandatory(), |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .build_or_panic() + } + } + + #[test] + fn test_create_schema_v3_with_name() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4562 + ); + } + #[test] + fn test_create_schema_v3_without_name() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 1984 + ); + } + #[test] + fn test_create_schema_via_governance_v2_with_name() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4562 + ); + } + #[test] + fn test_create_schema_via_governance_v2_without_name() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 1984 + ); + } + #[test] + fn test_propose_to_create_schema_v2_with_name() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4126 + ); + } + #[test] + fn test_propose_to_create_schema_v2_without_name() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4126 + ); + } + #[test] + fn test_propose_to_create_schema_name() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4640 + ); + } + #[test] + fn test_create_schema_name_via_governance() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4562 + ); + } +} \ No newline at end of file diff --git a/pallets/stateful-storage/Cargo.toml b/pallets/stateful-storage/Cargo.toml new file mode 100644 index 0000000000..c34f82d334 --- /dev/null +++ b/pallets/stateful-storage/Cargo.toml @@ -0,0 +1,63 @@ +[package] +authors = ["Frequency"] +description = "Stateful Storage Pallet" +edition = "2021" +homepage = "https://frequency.xyz" +license = "Apache-2.0" +name = "pallet-stateful-storage" +publish = false +repository = "https://github.com/frequency-chain/frequency/" +version = "0.0.0" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[dependencies] +parity-scale-codec = { workspace = true, features = ["derive"] } +log = { workspace = true } +lazy_static = { workspace = true } +scale-info = { workspace = true, features = ["derive"] } +twox-hash = { workspace = true, features = ["digest_0_10"] } +# Substrate +frame-benchmarking = { workspace = true, optional = true } +frame-support = { workspace = true } +frame-system = { workspace = true } +sp-core = { workspace = true } +sp-io = { workspace = true } +sp-runtime = { workspace = true } +# Frequency related dependencies +common-primitives = { default-features = false, path = "../../common/primitives" } +common-runtime = { path = "../../runtime/common", default-features = false } + +[dev-dependencies] +env_logger = { workspace = true } +pretty_assertions = { workspace = true } +sp-keystore = { workspace = true } +hex = { workspace = true, default-features = false, features = ["alloc"] } + +[features] +default = ['std'] +runtime-benchmarks = [ + "frame-benchmarking/runtime-benchmarks", + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "common-primitives/runtime-benchmarks", + "common-runtime/runtime-benchmarks", +] +std = [ + 'parity-scale-codec/std', + 'scale-info/std', + 'sp-core/std', + 'sp-io/std', + 'sp-runtime/std', + 'frame-support/std', + 'frame-system/std', + 'frame-benchmarking/std', + 'common-primitives/std', + "common-runtime/std", +] +try-runtime = ['frame-support/try-runtime'] +test = [] + +[lints] +workspace = true diff --git a/pallets/stateful-storage/README.md b/pallets/stateful-storage/README.md new file mode 100644 index 0000000000..30528d5641 --- /dev/null +++ b/pallets/stateful-storage/README.md @@ -0,0 +1,64 @@ +# Stateful Storage Pallet + +The Stateful Storage Pallet provides per-MSA functionality for reading and writing stateful data where only the latest state is relevant. + +## Summary + +When a Schema uses `Paginated` or `Itemized`, the payload data is stored in this pallet. +Data stored is user-centric instead of time-centric as with the Messages Pallet. +The pallet storage uses [child storage](https://paritytech.github.io/polkadot-sdk/master/frame_support/storage/child/index.html) making direct query access complex. +Custom RPCs are provided for easy access to data. + +### Paginated Data (`PayloadLocation:Paginated`) + +Data is stored in multiple pages, each `1_024` bytes in size (as defined by `constants::MaxPaginatedPageSizeBytes`). +Each page contains a single item of the associated schema. +Page count is limited to `33` per Schema Id, though there may be holes in that range (limit defined by `constants::MaxPaginatedPageId`). +This is most useful for schemas with a larger per-item size and smaller potential item count. + +### Itemized Data (`PayloadLocation:Itemized`) + +Data is stored in a single page with a max size of `10_240` bytes (defined by `constants::MaxItemizedPageSizeBytes`). +The page contains multiple items of the associated schema. +The maximum size of each items is `1_024` bytes (defined by `constants::MaxItemizedBlobSizeBytes`) . +This is most useful for schemas with a relatively small item size and higher potential item count. +The read and write complexity is O(n) when n is the number of bytes for all items. + + + +### Actions + +The Stateful Storage pallet provides for: + +- Per MSA and Schema storage of stateful data +- Read/write access storage cost limited to a single MSA Id and Schema Id pair +- A high write throughput +- A high read throughput +- Data race condition protection + + +## Interactions + +### Extrinsics + +| Name/Description | Caller | Payment | Key Events | Runtime Added | +| -------------------------------- | ------------- | ------- | ------------------------------------------------------------------------------------------------------------- | ------------- | +| `apply_item_actions`
Applies a set of actions to an itemized storage array | Provider or MSA Owner | Capacity or Tokens | [`ItemizedPageUpdated`](https://frequency-chain.github.io/frequency/{pallet_name}/pallet/enum.Event.html#variant.ItemizedPageUpdated)
[`ItemizedPageDeleted`](https://frequency-chain.github.io/frequency/{pallet_name}/pallet/enum.Event.html#variant.ItemizedPageDeleted) | 22 | +| `apply_item_actions_with_signature_v2`
Applies a set of actions to an itemized storage array with a signature authorization | Provider or MSA Owner | Capacity or Tokens | [`ItemizedPageUpdated`](https://frequency-chain.github.io/frequency/{pallet_name}/pallet/enum.Event.html#variant.ItemizedPageUpdated)
[`ItemizedPageDeleted`](https://frequency-chain.github.io/frequency/{pallet_name}/pallet/enum.Event.html#variant.ItemizedPageDeleted) | 45 | +| `upsert_page`
Sets the data for a specific page index | Provider or MSA Owner | Capacity or Tokens | [`PaginatedPageUpdated`](https://frequency-chain.github.io/frequency/{pallet_name}/pallet/enum.Event.html#variant.PaginatedPageUpdated) | 22 | +| `delete_page`
Deletes a specific page index | Provider or MSA Owner | Capacity or Tokens | [`PaginatedPageDeleted`](https://frequency-chain.github.io/frequency/{pallet_name}/pallet/enum.Event.html#variant.PaginatedPageDeleted)| 22 | +| `upsert_page_with_signature_v2`
Sets the data for a specific page index with a signature authorization | Provider or MSA Owner | Capacity or Tokens | [`PaginatedPageUpdated`](https://frequency-chain.github.io/frequency/{pallet_name}/pallet/enum.Event.html#variant.PaginatedPageUpdated) | 46 | +| `delete_page_with_signature_v2`
Deletes a specific page index with a signature authorization | Provider or MSA Owner | Capacity or Tokens | [`PaginatedPageDeleted`](https://frequency-chain.github.io/frequency/{pallet_name}/pallet/enum.Event.html#variant.PaginatedPageDeleted)| 46 | + +See [Rust Docs](https://frequency-chain.github.io/frequency/{pallet_name}/pallet/struct.Pallet.html) for more details. + +### RPCs + +Note: May be restricted based on node settings and configuration. + +| Name | Description | Call | Node Version | +| ------- | ----------------- | ---------------------------------------------------------------------------------------------------- | ------------ | +| Get Paginated Storage | Retrieves the paginated storage for the given MSA Id and Schema Id | [`getPaginatedStorage`](https://frequency-chain.github.io/frequency/pallet_stateful_storage_rpc/trait.StatefulStorageApiServer.html#tymethod.get_paginated_storage) | v1.4.0+ | +| Get Itemized Storage | Retrieves the itemized storage for the given MSA Id and Schema Id | [`getItemizedStorage`](https://frequency-chain.github.io/frequency/pallet_stateful_storage_rpc/trait.StatefulStorageApiServer.html#tymethod.get_itemized_storage) | v1.4.0+ | + +See [Rust Docs](https://frequency-chain.github.io/frequency/pallet_stateful_storage_rpc/trait.StatefulStorageApiServer.html) for more details. diff --git a/pallets/stateful-storage/src/benchmarking.rs b/pallets/stateful-storage/src/benchmarking.rs new file mode 100644 index 0000000000..d2efe3c466 --- /dev/null +++ b/pallets/stateful-storage/src/benchmarking.rs @@ -0,0 +1,578 @@ +#![allow(clippy::unwrap_used, clippy::expect_used)] +use super::*; +use crate::{types::ItemAction, Pallet as StatefulStoragePallet}; +use common_primitives::{ + schema::{ModelType, PayloadLocation}, + stateful_storage::{PageHash, PageId}, + utils::wrap_binary_data, +}; +use frame_benchmarking::{v2::*, whitelisted_caller}; +use frame_support::assert_ok; +use frame_system::RawOrigin; +use parity_scale_codec::{Decode, Encode}; +use sp_core::{bounded::BoundedVec, crypto::KeyTypeId}; +use sp_runtime::RuntimeAppPublic; +use stateful_child_tree::StatefulChildTree; +use test_common::constants; +extern crate alloc; +use alloc::vec; + +pub const TEST_KEY_TYPE_ID: KeyTypeId = KeyTypeId(*b"test"); + +mod app_sr25519 { + use super::TEST_KEY_TYPE_ID; + use sp_core::sr25519; + use sp_runtime::app_crypto::app_crypto; + app_crypto!(sr25519, TEST_KEY_TYPE_ID); +} + +type SignerId = app_sr25519::Public; +pub const NONEXISTENT_PAGE_HASH: PageHash = 0; + +fn itemized_actions_populate( + n: u32, + s: usize, + delete_actions: u32, +) -> BoundedVec, T::MaxItemizedActionsCount> { + let mut actions = vec![]; + for _ in 0..n { + let payload = vec![0u8; s]; + actions.push(ItemAction::Add { data: payload.try_into().unwrap() }); + } + for i in 0..delete_actions { + actions.push(ItemAction::Delete { index: i as u16 }); + } + actions.try_into().expect("Invalid actions") +} + +fn create_schema(location: PayloadLocation) -> DispatchResult { + T::SchemaBenchmarkHelper::create_schema( + Vec::from(r#"{"Message": "some-random-hash"}"#.as_bytes()), + ModelType::AvroBinary, + location, + ) +} + +fn get_itemized_page( + msa_id: MessageSourceId, + schema_id: SchemaId, +) -> Option> { + let key: ItemizedKey = (schema_id,); + StatefulChildTree::::try_read::<_, ItemizedPage>( + &msa_id, + PALLET_STORAGE_PREFIX, + ITEMIZED_STORAGE_PREFIX, + &key, + ) + .unwrap_or(None) +} + +fn get_paginated_page( + msa_id: MessageSourceId, + schema_id: SchemaId, + page_id: PageId, +) -> Option> { + let key: PaginatedKey = (schema_id, page_id); + StatefulChildTree::::try_read::<_, PaginatedPage>( + &msa_id, + PALLET_STORAGE_PREFIX, + PAGINATED_STORAGE_PREFIX, + &key, + ) + .unwrap_or(None) +} + +#[benchmarks] +mod benchmarks { + use super::*; + + #[benchmark] + fn apply_item_actions_add( + s: Linear< + { T::MaxItemizedBlobSizeBytes::get() }, + { T::MaxItemizedBlobSizeBytes::get() * T::MaxItemizedActionsCount::get() }, + >, + ) -> Result<(), BenchmarkError> { + let provider_msa_id = 1u64; + let delegator_msa_id = 2u64; + let schema_id = constants::ITEMIZED_SCHEMA; + let caller: T::AccountId = whitelisted_caller(); + let num_of_items = s / T::MaxItemizedBlobSizeBytes::get(); + + T::SchemaBenchmarkHelper::set_schema_count(schema_id - 1); + assert_ok!(create_schema::(PayloadLocation::Itemized)); + assert_ok!(T::MsaBenchmarkHelper::add_key(provider_msa_id, caller.clone())); + assert_ok!(T::MsaBenchmarkHelper::set_delegation_relationship( + provider_msa_id.into(), + delegator_msa_id.into(), + [schema_id].to_vec() + )); + + let actions = itemized_actions_populate::( + num_of_items, + T::MaxItemizedBlobSizeBytes::get() as usize, + 0, + ); + #[block] + { + assert_ok!(StatefulStoragePallet::::apply_item_actions( + RawOrigin::Signed(caller).into(), + delegator_msa_id, + schema_id, + NONEXISTENT_PAGE_HASH, + actions + )); + } + + let page_result = get_itemized_page::(delegator_msa_id, schema_id); + assert!(page_result.is_some()); + assert!(page_result.unwrap().data.len() > 0); + Ok(()) + } + + #[benchmark] + fn apply_item_actions_delete( + n: Linear<1, { T::MaxItemizedActionsCount::get() }>, + ) -> Result<(), BenchmarkError> { + let provider_msa_id = 1u64; + let delegator_msa_id = 2u64; + let schema_id = constants::ITEMIZED_SCHEMA; + let caller: T::AccountId = whitelisted_caller(); + let num_of_items = n; + // removed 2 bytes are for ItemHeader size which is currently 2 bytes per item + let num_of_existing_items = + T::MaxItemizedPageSizeBytes::get() / (T::MaxItemizedBlobSizeBytes::get() + 2); + let key = (schema_id,); + + T::SchemaBenchmarkHelper::set_schema_count(schema_id - 1); + assert_ok!(create_schema::(PayloadLocation::Itemized)); + assert_ok!(T::MsaBenchmarkHelper::add_key(provider_msa_id, caller.clone())); + assert_ok!(T::MsaBenchmarkHelper::set_delegation_relationship( + provider_msa_id.into(), + delegator_msa_id.into(), + [schema_id].to_vec() + )); + + for _ in 0..num_of_existing_items { + let actions = + itemized_actions_populate::(1, T::MaxItemizedBlobSizeBytes::get() as usize, 0); + let content_hash = StatefulChildTree::::try_read::<_, ItemizedPage>( + &delegator_msa_id, + PALLET_STORAGE_PREFIX, + ITEMIZED_STORAGE_PREFIX, + &key, + ) + .unwrap() + .unwrap_or_default() + .get_hash(); + assert_ok!(StatefulStoragePallet::::apply_item_actions( + RawOrigin::Signed(caller.clone()).into(), + delegator_msa_id, + schema_id, + content_hash, + actions + )); + } + + let content_hash = StatefulChildTree::::try_read::<_, ItemizedPage>( + &delegator_msa_id, + PALLET_STORAGE_PREFIX, + ITEMIZED_STORAGE_PREFIX, + &key, + ) + .unwrap() + .unwrap_or_default() + .get_hash(); + let actions = itemized_actions_populate::(0, 0, num_of_items); + #[block] + { + assert_ok!(StatefulStoragePallet::::apply_item_actions( + RawOrigin::Signed(caller).into(), + delegator_msa_id, + schema_id, + content_hash, + actions + )); + } + + let page_result = get_itemized_page::(delegator_msa_id, schema_id); + assert!(page_result.is_some()); + assert!(page_result.unwrap().data.len() > 0); + Ok(()) + } + + #[benchmark] + fn upsert_page( + s: Linear<1, { T::MaxPaginatedPageSizeBytes::get() }>, + ) -> Result<(), BenchmarkError> { + let provider_msa_id = 1u64; + let delegator_msa_id = 2u64; + let page_id: PageId = 1; + let schema_id = constants::PAGINATED_SCHEMA; + let caller: T::AccountId = whitelisted_caller(); + let payload = vec![1u8; s as usize]; + let max_payload = vec![1u8; T::MaxPaginatedPageSizeBytes::get() as usize]; + let page = PaginatedPage::::from(BoundedVec::try_from(max_payload).unwrap()); + + T::SchemaBenchmarkHelper::set_schema_count(schema_id - 1); + assert_ok!(create_schema::(PayloadLocation::Paginated)); + assert_ok!(T::MsaBenchmarkHelper::add_key(provider_msa_id, caller.clone())); + assert_ok!(T::MsaBenchmarkHelper::set_delegation_relationship( + provider_msa_id.into(), + delegator_msa_id.into(), + [schema_id].to_vec() + )); + + let key = (schema_id, page_id); + StatefulChildTree::::write( + &delegator_msa_id, + PALLET_STORAGE_PREFIX, + PAGINATED_STORAGE_PREFIX, + &key, + &page, + ); + let content_hash = StatefulChildTree::::try_read::<_, PaginatedPage>( + &delegator_msa_id, + PALLET_STORAGE_PREFIX, + PAGINATED_STORAGE_PREFIX, + &key, + ) + .expect("error reading") + .expect("no data") + .get_hash(); + + #[extrinsic_call] + _( + RawOrigin::Signed(caller), + delegator_msa_id, + schema_id, + page_id, + content_hash, + payload.try_into().unwrap(), + ); + + let page_result = get_paginated_page::(delegator_msa_id, schema_id, page_id); + assert!(page_result.is_some()); + assert!(page_result.unwrap().data.len() > 0); + Ok(()) + } + + #[benchmark] + fn delete_page() -> Result<(), BenchmarkError> { + let provider_msa_id = 1u64; + let delegator_msa_id = 2u64; + let schema_id = constants::PAGINATED_SCHEMA; + let page_id: PageId = 1; + let caller: T::AccountId = whitelisted_caller(); + let payload = vec![0u8; T::MaxPaginatedPageSizeBytes::get() as usize]; + + T::SchemaBenchmarkHelper::set_schema_count(schema_id - 1); + assert_ok!(create_schema::(PayloadLocation::Paginated)); + assert_ok!(T::MsaBenchmarkHelper::add_key(provider_msa_id, caller.clone())); + assert_ok!(T::MsaBenchmarkHelper::set_delegation_relationship( + provider_msa_id.into(), + delegator_msa_id.into(), + [schema_id].to_vec() + )); + + let key = (schema_id, page_id); + StatefulChildTree::::write( + &delegator_msa_id, + PALLET_STORAGE_PREFIX, + PAGINATED_STORAGE_PREFIX, + &key, + payload.clone(), + ); + let content_hash = StatefulChildTree::::try_read::<_, PaginatedPage>( + &delegator_msa_id, + PALLET_STORAGE_PREFIX, + PAGINATED_STORAGE_PREFIX, + &key, + ) + .unwrap() + .unwrap() + .get_hash(); + + #[extrinsic_call] + _(RawOrigin::Signed(caller), delegator_msa_id, schema_id, page_id, content_hash); + + let page_result = get_paginated_page::(delegator_msa_id, schema_id, page_id); + assert!(page_result.is_none()); + Ok(()) + } + + #[benchmark] + fn apply_item_actions_with_signature_v2_add( + s: Linear< + { T::MaxItemizedBlobSizeBytes::get() }, + { T::MaxItemizedBlobSizeBytes::get() * T::MaxItemizedActionsCount::get() }, + >, + ) -> Result<(), BenchmarkError> { + let msa_id = 1u64; + let schema_id = constants::ITEMIZED_SCHEMA; + let caller: T::AccountId = whitelisted_caller(); + let num_of_items = s / T::MaxItemizedBlobSizeBytes::get(); + let expiration = BlockNumberFor::::from(10u32); + + let delegator_account_public = SignerId::generate_pair(Some( + constants::BENCHMARK_SIGNATURE_ACCOUNT_SEED.as_bytes().to_vec(), + )); + let delegator_account = + T::AccountId::decode(&mut &delegator_account_public.encode()[..]).unwrap(); + let delegator_msa_id = constants::SIGNATURE_MSA_ID; + + T::SchemaBenchmarkHelper::set_schema_count(schema_id - 1); + assert_ok!(create_schema::(PayloadLocation::Itemized)); + assert_ok!(T::MsaBenchmarkHelper::add_key(msa_id, caller.clone())); + assert_ok!(T::MsaBenchmarkHelper::add_key(delegator_msa_id, delegator_account.clone())); + assert_ok!(T::MsaBenchmarkHelper::set_delegation_relationship( + msa_id.into(), + delegator_msa_id.into(), + [schema_id].to_vec() + )); + + let actions = itemized_actions_populate::( + num_of_items, + T::MaxItemizedBlobSizeBytes::get() as usize, + 0, + ); + let payload = ItemizedSignaturePayloadV2 { + actions, + target_hash: NONEXISTENT_PAGE_HASH, + expiration, + schema_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let signature = delegator_account_public.sign(&encode_data_new_key_data).unwrap(); + #[block] + { + assert_ok!(StatefulStoragePallet::::apply_item_actions_with_signature_v2( + RawOrigin::Signed(caller).into(), + delegator_account, + MultiSignature::Sr25519(signature.into()), + payload + )); + } + + let page_result = get_itemized_page::(delegator_msa_id, schema_id); + assert!(page_result.is_some()); + assert!(page_result.unwrap().data.len() > 0); + + Ok(()) + } + + #[benchmark] + fn apply_item_actions_with_signature_v2_delete( + n: Linear<1, { T::MaxItemizedActionsCount::get() }>, + ) -> Result<(), BenchmarkError> { + let msa_id = 1u64; + let schema_id = constants::ITEMIZED_SCHEMA; + let caller: T::AccountId = whitelisted_caller(); + let num_of_items = n; + let num_of_existing_items = + T::MaxItemizedPageSizeBytes::get() / (T::MaxItemizedBlobSizeBytes::get() + 2); + let key = (schema_id,); + let expiration = BlockNumberFor::::from(10u32); + + let delegator_account_public = SignerId::generate_pair(Some( + constants::BENCHMARK_SIGNATURE_ACCOUNT_SEED.as_bytes().to_vec(), + )); + let delegator_account = + T::AccountId::decode(&mut &delegator_account_public.encode()[..]).unwrap(); + let delegator_msa_id = constants::SIGNATURE_MSA_ID; + + T::SchemaBenchmarkHelper::set_schema_count(schema_id - 1); + assert_ok!(create_schema::(PayloadLocation::Itemized)); + assert_ok!(T::MsaBenchmarkHelper::add_key(msa_id, caller.clone())); + assert_ok!(T::MsaBenchmarkHelper::add_key(delegator_msa_id, delegator_account.clone())); + assert_ok!(T::MsaBenchmarkHelper::set_delegation_relationship( + msa_id.into(), + delegator_msa_id.into(), + [schema_id].to_vec() + )); + + for _ in 0..num_of_existing_items { + let actions = + itemized_actions_populate::(1, T::MaxItemizedBlobSizeBytes::get() as usize, 0); + let content_hash = StatefulChildTree::::try_read::<_, ItemizedPage>( + &delegator_msa_id, + PALLET_STORAGE_PREFIX, + ITEMIZED_STORAGE_PREFIX, + &key, + ) + .unwrap() + .unwrap_or_default() + .get_hash(); + assert_ok!(StatefulStoragePallet::::apply_item_actions( + RawOrigin::Signed(caller.clone()).into(), + delegator_msa_id, + schema_id, + content_hash, + actions + )); + } + + let content_hash = StatefulChildTree::::try_read::<_, ItemizedPage>( + &delegator_msa_id, + PALLET_STORAGE_PREFIX, + ITEMIZED_STORAGE_PREFIX, + &key, + ) + .unwrap() + .unwrap_or_default() + .get_hash(); + let actions = itemized_actions_populate::(0, 0, num_of_items); + let payload = ItemizedSignaturePayloadV2 { + actions, + target_hash: content_hash, + expiration, + schema_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let signature = delegator_account_public.sign(&encode_data_new_key_data).unwrap(); + #[block] + { + assert_ok!(StatefulStoragePallet::::apply_item_actions_with_signature_v2( + RawOrigin::Signed(caller).into(), + delegator_account, + MultiSignature::Sr25519(signature.into()), + payload + )); + } + + let page_result = get_itemized_page::(delegator_msa_id, schema_id); + assert!(page_result.is_some()); + assert!(page_result.unwrap().data.len() > 0); + Ok(()) + } + + #[benchmark] + fn upsert_page_with_signature_v2( + s: Linear<1, { T::MaxPaginatedPageSizeBytes::get() }>, + ) -> Result<(), BenchmarkError> { + let page_id: PageId = 1; + let schema_id = constants::PAGINATED_SCHEMA; + let caller: T::AccountId = whitelisted_caller(); + let payload = vec![0u8; s as usize]; + let max_payload = vec![1u8; T::MaxPaginatedPageSizeBytes::get() as usize]; + let page = PaginatedPage::::from(BoundedVec::try_from(max_payload).unwrap()); + let expiration = BlockNumberFor::::from(10u32); + + let delegator_account_public = SignerId::generate_pair(Some( + constants::BENCHMARK_SIGNATURE_ACCOUNT_SEED.as_bytes().to_vec(), + )); + let delegator_account = + T::AccountId::decode(&mut &delegator_account_public.encode()[..]).unwrap(); + let delegator_msa_id = constants::SIGNATURE_MSA_ID; + + T::SchemaBenchmarkHelper::set_schema_count(schema_id - 1); + assert_ok!(create_schema::(PayloadLocation::Paginated)); + assert_ok!(T::MsaBenchmarkHelper::add_key(delegator_msa_id, delegator_account.clone())); + + let key = (schema_id, page_id); + StatefulChildTree::::write( + &delegator_msa_id, + PALLET_STORAGE_PREFIX, + PAGINATED_STORAGE_PREFIX, + &key, + &page, + ); + let content_hash = StatefulChildTree::::try_read::<_, PaginatedPage>( + &delegator_msa_id, + PALLET_STORAGE_PREFIX, + PAGINATED_STORAGE_PREFIX, + &key, + ) + .expect("error reading") + .expect("no data") + .get_hash(); + + let payload = PaginatedUpsertSignaturePayloadV2 { + payload: BoundedVec::try_from(payload).unwrap(), + target_hash: content_hash, + expiration, + schema_id, + page_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let signature = delegator_account_public.sign(&encode_data_new_key_data).unwrap(); + + #[extrinsic_call] + _( + RawOrigin::Signed(caller), + delegator_account, + MultiSignature::Sr25519(signature.into()), + payload, + ); + + let page_result = get_paginated_page::(delegator_msa_id, schema_id, page_id); + assert!(page_result.is_some()); + assert!(page_result.unwrap().data.len() > 0); + Ok(()) + } + + #[benchmark] + fn delete_page_with_signature_v2() -> Result<(), BenchmarkError> { + let schema_id = constants::PAGINATED_SCHEMA; + let page_id: PageId = 1; + let caller: T::AccountId = whitelisted_caller(); + let payload = vec![0u8; T::MaxPaginatedPageSizeBytes::get() as usize]; + let expiration = BlockNumberFor::::from(10u32); + + let delegator_account_public = SignerId::generate_pair(Some( + constants::BENCHMARK_SIGNATURE_ACCOUNT_SEED.as_bytes().to_vec(), + )); + let delegator_account = + T::AccountId::decode(&mut &delegator_account_public.encode()[..]).unwrap(); + let delegator_msa_id = constants::SIGNATURE_MSA_ID; + + T::SchemaBenchmarkHelper::set_schema_count(schema_id - 1); + assert_ok!(create_schema::(PayloadLocation::Paginated)); + assert_ok!(T::MsaBenchmarkHelper::add_key(delegator_msa_id, delegator_account.clone())); + + let key = (schema_id, page_id); + StatefulChildTree::::write( + &delegator_msa_id, + PALLET_STORAGE_PREFIX, + PAGINATED_STORAGE_PREFIX, + &key, + payload.clone(), + ); + let content_hash = StatefulChildTree::::try_read::<_, PaginatedPage>( + &delegator_msa_id, + PALLET_STORAGE_PREFIX, + PAGINATED_STORAGE_PREFIX, + &key, + ) + .unwrap() + .unwrap() + .get_hash(); + + let payload = PaginatedDeleteSignaturePayloadV2 { + target_hash: content_hash, + expiration, + schema_id, + page_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let signature = delegator_account_public.sign(&encode_data_new_key_data).unwrap(); + + #[extrinsic_call] + _( + RawOrigin::Signed(caller), + delegator_account, + MultiSignature::Sr25519(signature.into()), + payload, + ); + + let page_result = get_paginated_page::(delegator_msa_id, schema_id, page_id); + assert!(page_result.is_none()); + Ok(()) + } + + impl_benchmark_test_suite!( + StatefulStoragePallet, + crate::tests::mock::new_test_ext_keystore(), + crate::tests::mock::Test + ); +} diff --git a/pallets/stateful-storage/src/lib.rs b/pallets/stateful-storage/src/lib.rs new file mode 100644 index 0000000000..0f6865ac22 --- /dev/null +++ b/pallets/stateful-storage/src/lib.rs @@ -0,0 +1,851 @@ +//! MSA-centric Storage for [`PayloadLocation::Paginated`] and [`PayloadLocation::Itemized`] +//! +//! ## Quick Links +//! - [Configuration: `Config`](Config) +//! - [Extrinsics: `Call`](Call) +//! - [Runtime API: `StatefulStorageRuntimeApi`](../pallet_stateful_storage_runtime_api/trait.StatefulStorageRuntimeApi.html) +//! - [Custom RPC API: `StatefulStorageApiServer`](../pallet_stateful_storage_rpc/trait.StatefulStorageApiServer.html) +//! - [Event Enum: `Event`](Event) +//! - [Error Enum: `Error`](Error) +#![doc = include_str!("../README.md")] +//! +//! ## Terminology +//! - [`Page`](../pallet_stateful_storage/types/struct.Page.html): Block of on-chain data of a fixed size, which is the underlying type for Itemized and Paginated storage. +//! - [`ItemizedPage`](../pallet_stateful_storage/types/type.ItemizedPage.html): A page containing itemized data +//! - [`PaginatedPage`](../pallet_stateful_storage/types/type.PaginatedPage.html): A page containing paginated data +//! + +// Substrate macros are tripping the clippy::expect_used lint. +#![allow(clippy::expect_used)] +// Ensure we're `no_std` when compiling for Wasm. +#![cfg_attr(not(feature = "std"), no_std)] +// Strong Documentation Lints +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + missing_docs +)] + +#[cfg(feature = "runtime-benchmarks")] +mod benchmarking; +#[cfg(any(feature = "runtime-benchmarks", test))] +mod test_common; +#[cfg(test)] +mod tests; +#[cfg(feature = "runtime-benchmarks")] +use common_primitives::benchmarks::{MsaBenchmarkHelper, SchemaBenchmarkHelper}; + +mod stateful_child_tree; +pub mod types; +pub mod weights; + +extern crate alloc; +use alloc::vec::Vec; + +use crate::{stateful_child_tree::StatefulChildTree, types::*}; +use common_primitives::{ + msa::{ + DelegatorId, MessageSourceId, MsaLookup, MsaValidator, ProviderId, SchemaGrantValidator, + }, + node::EIP712Encode, + schema::{PayloadLocation, SchemaId, SchemaInfoResponse, SchemaProvider, SchemaSetting}, + stateful_storage::{ + ItemizedStoragePageResponse, ItemizedStorageResponse, PageHash, PageId, + PaginatedStorageResponse, + }, +}; + +use frame_support::{dispatch::DispatchResult, ensure, pallet_prelude::*, traits::Get}; +use frame_system::pallet_prelude::*; +pub use pallet::*; +use sp_core::{bounded::BoundedVec, crypto::AccountId32}; +use sp_runtime::{traits::Convert, DispatchError, MultiSignature}; +pub use weights::*; + +#[frame_support::pallet] +pub mod pallet { + use super::*; + + #[pallet::config] + pub trait Config: frame_system::Config { + /// The overarching event type. + type RuntimeEvent: From> + IsType<::RuntimeEvent>; + + /// Weight information for extrinsics in this pallet. + type WeightInfo: WeightInfo; + + /// A type that will supply MSA related information + type MsaInfoProvider: MsaLookup + MsaValidator; + + /// A type that will validate schema grants + type SchemaGrantValidator: SchemaGrantValidator>; + + /// A type that will supply schema related information. + type SchemaProvider: SchemaProvider; + + /// The maximum size of a page (in bytes) for an Itemized storage model + #[pallet::constant] + type MaxItemizedPageSizeBytes: Get + Default; + + /// The maximum size of a page (in bytes) for a Paginated storage model + #[pallet::constant] + type MaxPaginatedPageSizeBytes: Get + Default; + + /// The maximum size of a single item in an itemized storage model (in bytes) + #[pallet::constant] + type MaxItemizedBlobSizeBytes: Get + Clone + core::fmt::Debug + PartialEq; + + /// The maximum number of pages in a Paginated storage model + #[pallet::constant] + type MaxPaginatedPageId: Get; + + /// The maximum number of actions in itemized actions + #[pallet::constant] + type MaxItemizedActionsCount: Get; + + #[cfg(feature = "runtime-benchmarks")] + /// A set of helper functions for benchmarking. + type MsaBenchmarkHelper: MsaBenchmarkHelper; + + #[cfg(feature = "runtime-benchmarks")] + /// A set of helper functions for benchmarking. + type SchemaBenchmarkHelper: SchemaBenchmarkHelper; + + /// Hasher to use for MultipartKey + type KeyHasher: stateful_child_tree::MultipartKeyStorageHasher; + + /// AccountId truncated to 32 bytes + type ConvertIntoAccountId32: Convert; + + /// The number of blocks that we allow for a signed payload to be valid. This is mainly used + /// to make sure a signed payload would not be replayable. + #[pallet::constant] + type MortalityWindowSize: Get; + } + + // Simple declaration of the `Pallet` type. It is placeholder we use to implement traits and + // method. + #[pallet::pallet] + #[pallet::storage_version(STATEFUL_STORAGE_VERSION)] + pub struct Pallet(_); + + /// A temporary storage for migration + #[pallet::storage] + pub(super) type MigrationPageIndex = StorageValue<_, u32, ValueQuery>; + + #[pallet::error] + pub enum Error { + /// Page would exceed the highest allowable PageId + PageIdExceedsMaxAllowed, + + /// Page size exceeds max allowable page size + PageExceedsMaxPageSizeBytes, + + /// Invalid SchemaId or Schema not found + InvalidSchemaId, + + /// Unsupported operation for schema + UnsupportedOperationForSchema, + + /// Schema is not valid for storage model + SchemaPayloadLocationMismatch, + + /// Invalid Message Source Account + InvalidMessageSourceAccount, + + /// UnauthorizedDelegate + UnauthorizedDelegate, + + /// Corrupted State + CorruptedState, + + /// Invalid item action + InvalidItemAction, + + /// Target page hash does not match current page hash + StalePageState, + + /// Invalid Signature for payload + InvalidSignature, + + /// The submitted proof has expired; the current block is less the expiration block + ProofHasExpired, + + /// The submitted proof expiration block is too far in the future + ProofNotYetValid, + } + + #[pallet::event] + #[pallet::generate_deposit(pub(super) fn deposit_event)] + pub enum Event { + /// An event for when an itemized storage is updated + ItemizedPageUpdated { + /// message source id of storage owner + msa_id: MessageSourceId, + /// schema related to the storage + schema_id: SchemaId, + /// previous content hash before update + prev_content_hash: PageHash, + /// current content hash after update + curr_content_hash: PageHash, + }, + + /// An event for when an itemized storage is deleted + ItemizedPageDeleted { + /// message source id of storage owner + msa_id: MessageSourceId, + /// schema related to the storage + schema_id: SchemaId, + /// previous content hash before removal + prev_content_hash: PageHash, + }, + + /// An event for when an paginated storage is updated + PaginatedPageUpdated { + /// message source id of storage owner + msa_id: MessageSourceId, + /// schema related to the storage + schema_id: SchemaId, + /// id of updated page + page_id: PageId, + /// previous content hash before update + prev_content_hash: PageHash, + /// current content hash after update + curr_content_hash: PageHash, + }, + + /// An event for when an paginated storage is deleted + PaginatedPageDeleted { + /// message source id of storage owner + msa_id: MessageSourceId, + /// schema related to the storage + schema_id: SchemaId, + /// id of updated page + page_id: PageId, + /// previous content hash before removal + prev_content_hash: PageHash, + }, + } + + #[pallet::hooks] + impl Hooks> for Pallet { + fn on_initialize(_current: BlockNumberFor) -> Weight { + Weight::zero() + } + } + + #[pallet::call] + impl Pallet { + /// Applies the Add or Delete Actions on the requested Itemized page. + /// This is treated as a transaction so either all actions succeed or none will be executed. + /// + /// Note: if called by the state owner, call may succeed even on `SignatureRequired` schemas. + /// The fact that the entire (signed) transaction is submitted by the owner's keypair is + /// considered equivalent to supplying a separate signature. Note in that case that a delegate + /// submitting this extrinsic on behalf of a user would fail. + /// + /// # Events + /// * [`Event::ItemizedPageUpdated`] + /// * [`Event::ItemizedPageDeleted`] + /// + #[pallet::call_index(0)] + #[pallet::weight( + T::WeightInfo::apply_item_actions_delete(actions.len() as u32) + .max(T::WeightInfo::apply_item_actions_add(Pallet::::sum_add_actions_bytes(actions))) + )] + pub fn apply_item_actions( + origin: OriginFor, + #[pallet::compact] state_owner_msa_id: MessageSourceId, + #[pallet::compact] schema_id: SchemaId, + #[pallet::compact] target_hash: PageHash, + actions: BoundedVec< + ItemAction, + T::MaxItemizedActionsCount, + >, + ) -> DispatchResult { + let key = ensure_signed(origin)?; + let is_pruning = actions.iter().any(|a| matches!(a, ItemAction::Delete { .. })); + let caller_msa_id = Self::check_msa_and_grants(key, state_owner_msa_id, schema_id)?; + let caller_is_state_owner = caller_msa_id == state_owner_msa_id; + Self::check_schema_for_write( + schema_id, + PayloadLocation::Itemized, + caller_is_state_owner, + is_pruning, + )?; + Self::update_itemized(state_owner_msa_id, schema_id, target_hash, actions)?; + Ok(()) + } + + /// Creates or updates an Paginated storage with new payload + /// + /// Note: if called by the state owner, call may succeed even on `SignatureRequired` schemas. + /// The fact that the entire (signed) transaction is submitted by the owner's keypair is + /// considered equivalent to supplying a separate signature. Note in that case that a delegate + /// submitting this extrinsic on behalf of a user would fail. + /// + /// # Events + /// * [`Event::PaginatedPageUpdated`] + /// + #[pallet::call_index(1)] + #[pallet::weight(T::WeightInfo::upsert_page(payload.len() as u32))] + pub fn upsert_page( + origin: OriginFor, + #[pallet::compact] state_owner_msa_id: MessageSourceId, + #[pallet::compact] schema_id: SchemaId, + #[pallet::compact] page_id: PageId, + #[pallet::compact] target_hash: PageHash, + payload: BoundedVec::MaxPaginatedPageSizeBytes>, + ) -> DispatchResult { + let provider_key = ensure_signed(origin)?; + ensure!(page_id <= T::MaxPaginatedPageId::get(), Error::::PageIdExceedsMaxAllowed); + let caller_msa_id = + Self::check_msa_and_grants(provider_key, state_owner_msa_id, schema_id)?; + let caller_is_state_owner = caller_msa_id == state_owner_msa_id; + Self::check_schema_for_write( + schema_id, + PayloadLocation::Paginated, + caller_is_state_owner, + false, + )?; + Self::update_paginated( + state_owner_msa_id, + schema_id, + page_id, + target_hash, + PaginatedPage::::from(payload), + )?; + Ok(()) + } + + /// Deletes a Paginated storage + /// + /// Note: if called by the state owner, call may succeed even on `SignatureRequired` schemas. + /// The fact that the entire (signed) transaction is submitted by the owner's keypair is + /// considered equivalent to supplying a separate signature. Note in that case that a delegate + /// submitting this extrinsic on behalf of a user would fail. + /// + /// # Events + /// * [`Event::PaginatedPageDeleted`] + /// + #[pallet::call_index(2)] + #[pallet::weight(T::WeightInfo::delete_page())] + pub fn delete_page( + origin: OriginFor, + #[pallet::compact] state_owner_msa_id: MessageSourceId, + #[pallet::compact] schema_id: SchemaId, + #[pallet::compact] page_id: PageId, + #[pallet::compact] target_hash: PageHash, + ) -> DispatchResult { + let provider_key = ensure_signed(origin)?; + ensure!(page_id <= T::MaxPaginatedPageId::get(), Error::::PageIdExceedsMaxAllowed); + let caller_msa_id = + Self::check_msa_and_grants(provider_key, state_owner_msa_id, schema_id)?; + let caller_is_state_owner = caller_msa_id == state_owner_msa_id; + Self::check_schema_for_write( + schema_id, + PayloadLocation::Paginated, + caller_is_state_owner, + true, + )?; + Self::delete_paginated(state_owner_msa_id, schema_id, page_id, target_hash)?; + Ok(()) + } + + // REMOVED apply_item_actions_with_signature() at call index 3 + // REMOVED upsert_page_with_signature() at call index 4 + // REMOVED delete_page_with_signature() at call index 5 + + /// Applies the Add or Delete Actions on the requested Itemized page that requires signature + /// since the signature of delegator is checked there is no need for delegation validation + /// This is treated as a transaction so either all actions succeed or none will be executed. + /// + /// # Events + /// * [`Event::ItemizedPageUpdated`] + /// * [`Event::ItemizedPageDeleted`] + /// + #[pallet::call_index(6)] + #[pallet::weight( + T::WeightInfo::apply_item_actions_with_signature_v2_delete(payload.actions.len() as u32) + .max(T::WeightInfo::apply_item_actions_with_signature_v2_add(Pallet::::sum_add_actions_bytes(&payload.actions))) + )] + pub fn apply_item_actions_with_signature_v2( + origin: OriginFor, + delegator_key: T::AccountId, + proof: MultiSignature, + payload: ItemizedSignaturePayloadV2, + ) -> DispatchResult { + ensure_signed(origin)?; + + let is_pruning = payload.actions.iter().any(|a| matches!(a, ItemAction::Delete { .. })); + Self::check_payload_expiration( + frame_system::Pallet::::block_number(), + payload.expiration, + )?; + Self::check_signature(&proof, &delegator_key.clone(), &payload)?; + let state_owner_msa_id = T::MsaInfoProvider::ensure_valid_msa_key(&delegator_key) + .map_err(|_| Error::::InvalidMessageSourceAccount)?; + Self::check_schema_for_write( + payload.schema_id, + PayloadLocation::Itemized, + true, + is_pruning, + )?; + Self::update_itemized( + state_owner_msa_id, + payload.schema_id, + payload.target_hash, + payload.actions, + )?; + Ok(()) + } + + /// Creates or updates an Paginated storage with new payload that requires signature + /// since the signature of delegator is checked there is no need for delegation validation + /// + /// # Events + /// * [`Event::PaginatedPageUpdated`] + /// + #[pallet::call_index(7)] + #[pallet::weight(T::WeightInfo::upsert_page_with_signature_v2(payload.payload.len() as u32))] + pub fn upsert_page_with_signature_v2( + origin: OriginFor, + delegator_key: T::AccountId, + proof: MultiSignature, + payload: PaginatedUpsertSignaturePayloadV2, + ) -> DispatchResult { + ensure_signed(origin)?; + ensure!( + payload.page_id <= T::MaxPaginatedPageId::get(), + Error::::PageIdExceedsMaxAllowed + ); + Self::check_payload_expiration( + frame_system::Pallet::::block_number(), + payload.expiration, + )?; + Self::check_signature(&proof, &delegator_key.clone(), &payload)?; + let state_owner_msa_id = T::MsaInfoProvider::ensure_valid_msa_key(&delegator_key) + .map_err(|_| Error::::InvalidMessageSourceAccount)?; + Self::check_schema_for_write( + payload.schema_id, + PayloadLocation::Paginated, + true, + false, + )?; + Self::update_paginated( + state_owner_msa_id, + payload.schema_id, + payload.page_id, + payload.target_hash, + PaginatedPage::::from(payload.payload), + )?; + Ok(()) + } + + /// Deletes a Paginated storage that requires signature + /// since the signature of delegator is checked there is no need for delegation validation + /// + /// # Events + /// * [`Event::PaginatedPageDeleted`] + /// + #[pallet::call_index(8)] + #[pallet::weight(T::WeightInfo::delete_page_with_signature_v2())] + pub fn delete_page_with_signature_v2( + origin: OriginFor, + delegator_key: T::AccountId, + proof: MultiSignature, + payload: PaginatedDeleteSignaturePayloadV2, + ) -> DispatchResult { + ensure_signed(origin)?; + ensure!( + payload.page_id <= T::MaxPaginatedPageId::get(), + Error::::PageIdExceedsMaxAllowed + ); + Self::check_payload_expiration( + frame_system::Pallet::::block_number(), + payload.expiration, + )?; + Self::check_signature(&proof, &delegator_key.clone(), &payload)?; + let state_owner_msa_id = T::MsaInfoProvider::ensure_valid_msa_key(&delegator_key) + .map_err(|_| Error::::InvalidMessageSourceAccount)?; + Self::check_schema_for_write( + payload.schema_id, + PayloadLocation::Paginated, + true, + true, + )?; + Self::delete_paginated( + state_owner_msa_id, + payload.schema_id, + payload.page_id, + payload.target_hash, + )?; + Ok(()) + } + } +} + +impl Pallet { + /// Sums the total bytes of each item actions + pub fn sum_add_actions_bytes( + actions: &BoundedVec< + ItemAction<::MaxItemizedBlobSizeBytes>, + ::MaxItemizedActionsCount, + >, + ) -> u32 { + actions.iter().fold(0, |acc, a| { + acc.saturating_add(match a { + ItemAction::Add { data } => data.len() as u32, + _ => 0, + }) + }) + } + + /// This function returns all the paginated storage associated with `msa_id` and `schema_id` + /// + /// Warning: since this function iterates over all the potential keys it should never called + /// from runtime. + pub fn get_paginated_storage( + msa_id: MessageSourceId, + schema_id: SchemaId, + ) -> Result, DispatchError> { + Self::check_schema_for_read(schema_id, PayloadLocation::Paginated)?; + let prefix: PaginatedPrefixKey = (schema_id,); + Ok(StatefulChildTree::::prefix_iterator::< + PaginatedPage, + PaginatedKey, + PaginatedPrefixKey, + >(&msa_id, PALLET_STORAGE_PREFIX, PAGINATED_STORAGE_PREFIX, &prefix) + .map(|(k, v)| { + let content_hash = v.get_hash(); + let nonce = v.nonce; + PaginatedStorageResponse::new( + k.1, + msa_id, + schema_id, + content_hash, + nonce, + v.data.into_inner(), + ) + }) + .collect()) + } + + /// This function returns all the itemized storage associated with `msa_id` and `schema_id` + pub fn get_itemized_storage( + msa_id: MessageSourceId, + schema_id: SchemaId, + ) -> Result { + Self::check_schema_for_read(schema_id, PayloadLocation::Itemized)?; + let page = Self::get_itemized_page_for(msa_id, schema_id)?.unwrap_or_default(); + let items: Vec = ItemizedOperations::::try_parse(&page, false) + .map_err(|_| Error::::CorruptedState)? + .items + .iter() + .map(|(key, v)| ItemizedStorageResponse::new(*key, v.to_vec())) + .collect(); + Ok(ItemizedStoragePageResponse::new(msa_id, schema_id, page.get_hash(), page.nonce, items)) + } + + /// This function checks to ensure `payload_expire_block` is in a valid range + /// + /// # Errors + /// * [`Error::ProofHasExpired`] + /// * [`Error::ProofNotYetValid`] + /// + pub fn check_payload_expiration( + current_block: BlockNumberFor, + payload_expire_block: BlockNumberFor, + ) -> Result<(), DispatchError> { + ensure!(payload_expire_block > current_block, Error::::ProofHasExpired); + let max_supported_signature_block = Self::mortality_block_limit(current_block); + ensure!(payload_expire_block < max_supported_signature_block, Error::::ProofNotYetValid); + Ok(()) + } + + /// Verify the `signature` was signed by `signer` on `payload` by a wallet + /// Note the `wrap_binary_data` follows the Polkadot wallet pattern of wrapping with `` tags. + /// + /// # Errors + /// * [`Error::InvalidSignature`] + /// + pub fn check_signature

( + signature: &MultiSignature, + signer: &T::AccountId, + payload: &P, + ) -> DispatchResult + where + P: Encode + EIP712Encode, + { + let key = T::ConvertIntoAccountId32::convert(signer.clone()); + + ensure!( + common_runtime::signature::check_signature(signature, key, payload), + Error::::InvalidSignature + ); + + Ok(()) + } + + /// The furthest in the future a mortality_block value is allowed + /// to be for current_block + /// This is calculated to be past the risk of a replay attack + fn mortality_block_limit(current_block: BlockNumberFor) -> BlockNumberFor { + current_block + BlockNumberFor::::from(T::MortalityWindowSize::get()) + } + + /// Checks that the schema is valid for is action + /// + /// # Errors + /// * [`Error::InvalidSchemaId`] + /// * [`Error::SchemaPayloadLocationMismatch`] + /// + fn check_schema_for_read( + schema_id: SchemaId, + expected_payload_location: PayloadLocation, + ) -> Result { + let schema = T::SchemaProvider::get_schema_info_by_id(schema_id) + .ok_or(Error::::InvalidSchemaId)?; + + // Ensure that the schema's payload location matches the expected location. + ensure!( + schema.payload_location == expected_payload_location, + Error::::SchemaPayloadLocationMismatch + ); + + Ok(schema) + } + + /// Checks that the schema is valid for is action + /// + /// # Errors + /// * [`Error::InvalidSchemaId`] + /// * [`Error::SchemaPayloadLocationMismatch`] + /// * [`Error::UnsupportedOperationForSchema`] + /// + fn check_schema_for_write( + schema_id: SchemaId, + expected_payload_location: PayloadLocation, + is_payload_signed: bool, + is_deleting: bool, + ) -> DispatchResult { + let schema = Self::check_schema_for_read(schema_id, expected_payload_location)?; + + // Ensure that the schema allows signed payloads. + // If so, calling extrinsic must be of signature type. + if schema.settings.contains(&SchemaSetting::SignatureRequired) { + ensure!(is_payload_signed, Error::::UnsupportedOperationForSchema); + } + + // Ensure that the schema does not allow deletion for AppendOnly SchemaSetting. + if schema.settings.contains(&SchemaSetting::AppendOnly) { + ensure!(!is_deleting, Error::::UnsupportedOperationForSchema); + } + + Ok(()) + } + + /// Checks that existence of Msa for certain key and if the grant is valid when the caller Msa + /// is different from the state owner Msa + /// + /// # Errors + /// * [`Error::InvalidMessageSourceAccount`] + /// * [`Error::UnauthorizedDelegate`] + /// + fn check_msa_and_grants( + key: T::AccountId, + state_owner_msa_id: MessageSourceId, + schema_id: SchemaId, + ) -> Result { + let caller_msa_id = T::MsaInfoProvider::ensure_valid_msa_key(&key) + .map_err(|_| Error::::InvalidMessageSourceAccount)?; + + // if caller and owner are the same no delegation is needed + if caller_msa_id != state_owner_msa_id { + let current_block = frame_system::Pallet::::block_number(); + T::SchemaGrantValidator::ensure_valid_schema_grant( + ProviderId(caller_msa_id), + DelegatorId(state_owner_msa_id), + schema_id, + current_block, + ) + .map_err(|_| Error::::UnauthorizedDelegate)?; + } + + Ok(caller_msa_id) + } + + /// Updates an itemized storage by applying provided actions and deposit events + /// + /// # Events + /// * [`Event::ItemizedPageUpdated`] + /// * [`Event::ItemizedPageDeleted`] + /// + fn update_itemized( + state_owner_msa_id: MessageSourceId, + schema_id: SchemaId, + target_hash: PageHash, + actions: BoundedVec, T::MaxItemizedActionsCount>, + ) -> DispatchResult { + let key: ItemizedKey = (schema_id,); + let existing_page = + Self::get_itemized_page_for(state_owner_msa_id, schema_id)?.unwrap_or_default(); + + let prev_content_hash = existing_page.get_hash(); + ensure!(target_hash == prev_content_hash, Error::::StalePageState); + + let mut updated_page = + ItemizedOperations::::apply_item_actions(&existing_page, &actions[..]).map_err( + |e| match e { + PageError::ErrorParsing(err) => { + log::warn!( + "failed parsing Itemized msa={:?} schema_id={:?} {:?}", + state_owner_msa_id, + schema_id, + err + ); + Error::::CorruptedState + }, + _ => Error::::InvalidItemAction, + }, + )?; + updated_page.nonce = existing_page.nonce.wrapping_add(1); + + match updated_page.is_empty() { + true => { + StatefulChildTree::::kill( + &state_owner_msa_id, + PALLET_STORAGE_PREFIX, + ITEMIZED_STORAGE_PREFIX, + &key, + ); + Self::deposit_event(Event::ItemizedPageDeleted { + msa_id: state_owner_msa_id, + schema_id, + prev_content_hash, + }); + }, + false => { + StatefulChildTree::::write( + &state_owner_msa_id, + PALLET_STORAGE_PREFIX, + ITEMIZED_STORAGE_PREFIX, + &key, + &updated_page, + ); + Self::deposit_event(Event::ItemizedPageUpdated { + msa_id: state_owner_msa_id, + schema_id, + curr_content_hash: updated_page.get_hash(), + prev_content_hash, + }); + }, + }; + Ok(()) + } + + /// Updates a page from paginated storage by provided new page + /// + /// # Events + /// * [`Event::PaginatedPageUpdated`] + /// + fn update_paginated( + state_owner_msa_id: MessageSourceId, + schema_id: SchemaId, + page_id: PageId, + target_hash: PageHash, + mut new_page: PaginatedPage, + ) -> DispatchResult { + let keys: PaginatedKey = (schema_id, page_id); + let existing_page: PaginatedPage = + Self::get_paginated_page_for(state_owner_msa_id, schema_id, page_id)? + .unwrap_or_default(); + + let prev_content_hash: PageHash = existing_page.get_hash(); + ensure!(target_hash == prev_content_hash, Error::::StalePageState); + + new_page.nonce = existing_page.nonce.wrapping_add(1); + + StatefulChildTree::::write( + &state_owner_msa_id, + PALLET_STORAGE_PREFIX, + PAGINATED_STORAGE_PREFIX, + &keys, + &new_page, + ); + Self::deposit_event(Event::PaginatedPageUpdated { + msa_id: state_owner_msa_id, + schema_id, + page_id, + curr_content_hash: new_page.get_hash(), + prev_content_hash, + }); + Ok(()) + } + + /// Deletes a page from paginated storage + /// + /// # Events + /// * [`Event::PaginatedPageDeleted`] + /// + fn delete_paginated( + state_owner_msa_id: MessageSourceId, + schema_id: SchemaId, + page_id: PageId, + target_hash: PageHash, + ) -> DispatchResult { + let keys: PaginatedKey = (schema_id, page_id); + if let Some(existing_page) = + Self::get_paginated_page_for(state_owner_msa_id, schema_id, page_id)? + { + let prev_content_hash: PageHash = existing_page.get_hash(); + ensure!(target_hash == prev_content_hash, Error::::StalePageState); + StatefulChildTree::::kill( + &state_owner_msa_id, + PALLET_STORAGE_PREFIX, + PAGINATED_STORAGE_PREFIX, + &keys, + ); + Self::deposit_event(Event::PaginatedPageDeleted { + msa_id: state_owner_msa_id, + schema_id, + page_id, + prev_content_hash, + }); + } + + Ok(()) + } + + /// Gets a paginated storage for desired parameters + pub fn get_paginated_page_for( + msa_id: MessageSourceId, + schema_id: SchemaId, + page_id: PageId, + ) -> Result>, DispatchError> { + let keys: PaginatedKey = (schema_id, page_id); + Ok(StatefulChildTree::::try_read::<_, PaginatedPage>( + &msa_id, + PALLET_STORAGE_PREFIX, + PAGINATED_STORAGE_PREFIX, + &keys, + ) + .map_err(|_| Error::::CorruptedState)?) + } + + /// Gets an itemized storage for desired parameters + pub fn get_itemized_page_for( + msa_id: MessageSourceId, + schema_id: SchemaId, + ) -> Result>, DispatchError> { + let keys: ItemizedKey = (schema_id,); + Ok(StatefulChildTree::::try_read::<_, ItemizedPage>( + &msa_id, + PALLET_STORAGE_PREFIX, + ITEMIZED_STORAGE_PREFIX, + &keys, + ) + .map_err(|_| Error::::CorruptedState)?) + } +} diff --git a/pallets/stateful-storage/src/rpc/Cargo.toml b/pallets/stateful-storage/src/rpc/Cargo.toml new file mode 100644 index 0000000000..42498174d4 --- /dev/null +++ b/pallets/stateful-storage/src/rpc/Cargo.toml @@ -0,0 +1,43 @@ +[package] +name = "pallet-stateful-storage-rpc" +version = "0.0.0" +description = "RPC package for stateful storage" +authors = ["Frequency"] +license = "Apache-2.0" +publish = false +homepage = "https://frequency.xyz" +repository = "https://github.com/frequency-chain/frequency/" +edition = "2021" + +[dependencies] +jsonrpsee = { workspace = true, features = ["client-core", "server", "macros"] } +# Frequency crates +pallet-stateful-storage-runtime-api = { path = "../runtime-api", default-features = false } +common-primitives = { path = '../../../../common/primitives', default-features = false } +common-helpers = { path = '../../../../common/helpers', default-features = false } +# Substrate crates +frame-support = { workspace = true } +sp-core = { workspace = true } +sp-api = { workspace = true } +sp-rpc = { workspace = true } +sp-runtime = { workspace = true } +sp-blockchain = { workspace = true } + +[dev-dependencies] +tokio = { workspace = true, features = ["macros", "time", "parking_lot"] } +sc-client-api = { workspace = true } + +[features] +default = ["std"] +std = [ + "sp-api/std", + "sp-core/std", + "sp-runtime/std", + "pallet-stateful-storage-runtime-api/std", + "common-primitives/std", + "common-helpers/std", + "frame-support/std", +] + +[lints] +workspace = true diff --git a/pallets/stateful-storage/src/rpc/src/lib.rs b/pallets/stateful-storage/src/rpc/src/lib.rs new file mode 100644 index 0000000000..e43b4b398b --- /dev/null +++ b/pallets/stateful-storage/src/rpc/src/lib.rs @@ -0,0 +1,109 @@ +// Strong Documentation Lints +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + missing_docs +)] + +//! Custom APIs for [Stateful-Storage](../pallet_stateful_storage/index.html) + +use common_primitives::{ + msa::MessageSourceId, + schema::*, + stateful_storage::{ItemizedStoragePageResponse, PaginatedStorageResponse}, +}; +use jsonrpsee::{ + core::{async_trait, RpcResult}, + proc_macros::rpc, + types::error::{ErrorCode, ErrorObject}, +}; +use pallet_stateful_storage_runtime_api::StatefulStorageRuntimeApi; +use sp_api::{ApiError, ProvideRuntimeApi}; +use sp_blockchain::HeaderBackend; +use sp_runtime::{traits::Block as BlockT, DispatchError}; +extern crate alloc; +use alloc::{sync::Arc, vec::Vec}; + +#[cfg(test)] +mod tests; + +/// Frequency Stateful Storage Custom RPC API +#[rpc(client, server)] +pub trait StatefulStorageApi { + /// retrieving pages of stateful storage + #[method(name = "statefulStorage_getPaginatedStorage")] + fn get_paginated_storage( + &self, + msa_id: MessageSourceId, + schema_id: SchemaId, + ) -> RpcResult>; + + /// retrieving itemized storage of stateful storage + #[method(name = "statefulStorage_getItemizedStorage")] + fn get_itemized_storage( + &self, + msa_id: MessageSourceId, + schema_id: SchemaId, + ) -> RpcResult; +} + +/// The client handler for the API used by Frequency Service RPC with `jsonrpsee` +pub struct StatefulStorageHandler { + client: Arc, + _marker: std::marker::PhantomData, +} + +impl StatefulStorageHandler { + /// Create new instance with the given reference to the client. + pub fn new(client: Arc) -> Self { + Self { client, _marker: Default::default() } + } +} + +#[async_trait] +impl StatefulStorageApiServer<::Hash> + for StatefulStorageHandler +where + Block: BlockT, + C: 'static + ProvideRuntimeApi + HeaderBackend, + C::Api: StatefulStorageRuntimeApi, +{ + fn get_paginated_storage( + &self, + msa_id: MessageSourceId, + schema_id: SchemaId, + ) -> RpcResult> { + let api = self.client.runtime_api(); + let at = self.client.info().best_hash; + let api_result = api.get_paginated_storage(at, msa_id, schema_id); + map_result(api_result) + } + + fn get_itemized_storage( + &self, + msa_id: MessageSourceId, + schema_id: SchemaId, + ) -> RpcResult { + let api = self.client.runtime_api(); + let at = self.client.info().best_hash; + let api_result = api.get_itemized_storage(at, msa_id, schema_id); + map_result(api_result) + } +} + +fn map_result(api_result: Result, ApiError>) -> RpcResult { + match api_result { + Ok(Ok(result)) => Ok(result), + Ok(Err(e)) => Err(ErrorObject::owned( + ErrorCode::ServerError(300).code(), // No real reason for this value + "Runtime Error", + Some(format!("{:?}", e)), + )), + Err(e) => Err(ErrorObject::owned( + ErrorCode::ServerError(301).code(), // No real reason for this value + "Api Error", + Some(format!("{:?}", e)), + )), + } +} diff --git a/pallets/stateful-storage/src/rpc/src/tests/mod.rs b/pallets/stateful-storage/src/rpc/src/tests/mod.rs new file mode 100644 index 0000000000..3c8093a3b0 --- /dev/null +++ b/pallets/stateful-storage/src/rpc/src/tests/mod.rs @@ -0,0 +1,142 @@ +mod rpc_mock; + +use super::*; +use rpc_mock::*; + +use common_primitives::{node::Block, stateful_storage::*}; +use pallet_stateful_storage_runtime_api::StatefulStorageRuntimeApi; +use sp_runtime::DispatchError; +use std::sync::Arc; + +const SUCCESSFUL_SCHEMA_ID: u16 = 1; +const SUCCESSFUL_MSA_ID: MessageSourceId = 1; +const NONCE: PageNonce = 1; +const SUCCESSFUL_PAYLOAD: &[u8; 33] = b"{'body':827, 'val':'another val'}"; +const DUMMY_STATE_HASH: u32 = 32767; + +sp_api::mock_impl_runtime_apis! { + impl StatefulStorageRuntimeApi for TestRuntimeApi { + /// Retrieve the itemized storage for a particular msa and schema + fn get_paginated_storage(msa_id: MessageSourceId, schema_id: SchemaId) -> Result, DispatchError> { + match (msa_id, schema_id) { + (SUCCESSFUL_MSA_ID, SUCCESSFUL_SCHEMA_ID) => Ok(vec![PaginatedStorageResponse::new( + 0, + msa_id, + schema_id, + DUMMY_STATE_HASH, + NONCE, + SUCCESSFUL_PAYLOAD.to_vec(), + )]), + _ => Err(DispatchError::Other("some error")), + } + } + + fn get_itemized_storage(msa_id: MessageSourceId, schema_id: SchemaId) -> Result { + match (msa_id, schema_id) { + (SUCCESSFUL_MSA_ID, SUCCESSFUL_SCHEMA_ID) => Ok(ItemizedStoragePageResponse::new( + msa_id, + schema_id, + DUMMY_STATE_HASH, + NONCE, + vec![ItemizedStorageResponse::new(0,SUCCESSFUL_PAYLOAD.to_vec())])), + _ => Err(DispatchError::Other("some error")), + } + } + } +} + +type PaginatedStateResult = + Result, jsonrpsee::types::ErrorObjectOwned>; +type ItemizedStateResult = Result; + +#[tokio::test] +async fn get_paginated_storage_with_non_existent_schema_id_should_return_error() { + let client = Arc::new(TestApi {}); + let api = StatefulStorageHandler::new(client); + + let result: PaginatedStateResult = api.get_paginated_storage( + 1, 1233, // Non-existing Schema Id + ); + + assert!(result.is_err()); +} + +#[tokio::test] +async fn get_paginated_storage_with_non_existent_msa_id_should_return_error() { + let client = Arc::new(TestApi {}); + let api = StatefulStorageHandler::new(client); + + let result: PaginatedStateResult = api.get_paginated_storage( + 1029, // Non-existing Msa Id + 1, + ); + + assert!(result.is_err()); +} + +#[tokio::test] +async fn get_paginated_storage_with_success() { + let client = Arc::new(TestApi {}); + let api = StatefulStorageHandler::new(client); + + let result: PaginatedStateResult = api.get_paginated_storage( + SUCCESSFUL_MSA_ID, // Msa Id + SUCCESSFUL_SCHEMA_ID, // Schema Id + ); + + assert!(result.is_ok()); + let response = result.unwrap(); + assert_eq!(1, response.len()); + let page = &response[0]; + assert_eq!(0, page.page_id); + assert_eq!(SUCCESSFUL_MSA_ID, page.msa_id); + assert_eq!(SUCCESSFUL_SCHEMA_ID, page.schema_id); + assert_eq!(NONCE, page.nonce); + assert_eq!(SUCCESSFUL_PAYLOAD.to_vec(), page.payload); +} + +#[tokio::test] +async fn get_itemized_storage_with_non_existent_schema_id_should_return_error() { + let client = Arc::new(TestApi {}); + let api = StatefulStorageHandler::new(client); + + let result: ItemizedStateResult = api.get_itemized_storage( + 1, 1233, // Non-existing Schema Id + ); + + assert!(result.is_err()); +} + +#[tokio::test] +async fn get_itemized_storage_with_non_existent_msa_id_should_return_error() { + let client = Arc::new(TestApi {}); + let api = StatefulStorageHandler::new(client); + + let result: ItemizedStateResult = api.get_itemized_storage( + 1029, // Non-existing Msa Id + 1, + ); + + assert!(result.is_err()); +} + +#[tokio::test] +async fn get_itemized_storage_with_success() { + let client = Arc::new(TestApi {}); + let api = StatefulStorageHandler::new(client); + + let result: ItemizedStateResult = api.get_itemized_storage( + SUCCESSFUL_MSA_ID, // Msa Id + SUCCESSFUL_SCHEMA_ID, // Schema Id + ); + + assert!(result.is_ok()); + let page = result.unwrap(); + let items = page.items; + assert_eq!(1, items.len()); + assert_eq!(SUCCESSFUL_MSA_ID, page.msa_id); + assert_eq!(SUCCESSFUL_SCHEMA_ID, page.schema_id); + assert_eq!(NONCE, page.nonce); + assert_eq!(DUMMY_STATE_HASH, page.content_hash); + assert_eq!(ItemizedStorageResponse::new(0, SUCCESSFUL_PAYLOAD.to_vec()), items[0]); +} diff --git a/pallets/stateful-storage/src/rpc/src/tests/rpc_mock.rs b/pallets/stateful-storage/src/rpc/src/tests/rpc_mock.rs new file mode 100644 index 0000000000..54c23bdd22 --- /dev/null +++ b/pallets/stateful-storage/src/rpc/src/tests/rpc_mock.rs @@ -0,0 +1,61 @@ +use common_primitives::node::Block; +use sp_api::{ApiRef, ProvideRuntimeApi}; + +use sp_blockchain::HeaderBackend; +use sp_runtime::traits::{Block as BlockT, NumberFor, Zero}; + +pub struct TestApi {} + +pub struct TestRuntimeApi {} + +impl ProvideRuntimeApi for TestApi { + type Api = TestRuntimeApi; + + fn runtime_api(&self) -> ApiRef<'_, Self::Api> { + TestRuntimeApi {}.into() + } +} + +/// Blockchain database header backend. Does not perform any validation. +impl HeaderBackend for TestApi { + fn header( + &self, + _id: Block::Hash, + ) -> std::result::Result, sp_blockchain::Error> { + Ok(None) + } + + fn info(&self) -> sc_client_api::blockchain::Info { + sc_client_api::blockchain::Info { + best_hash: Default::default(), + best_number: Zero::zero(), + finalized_hash: Default::default(), + finalized_number: Zero::zero(), + genesis_hash: Default::default(), + number_leaves: Default::default(), + finalized_state: None, + block_gap: None, + } + } + + fn status( + &self, + _id: Block::Hash, + ) -> std::result::Result { + Ok(sc_client_api::blockchain::BlockStatus::Unknown) + } + + fn number( + &self, + _hash: Block::Hash, + ) -> std::result::Result>, sp_blockchain::Error> { + Ok(None) + } + + fn hash( + &self, + _number: NumberFor, + ) -> std::result::Result, sp_blockchain::Error> { + Ok(None) + } +} diff --git a/pallets/stateful-storage/src/runtime-api/Cargo.toml b/pallets/stateful-storage/src/runtime-api/Cargo.toml new file mode 100644 index 0000000000..a6e56ef1a4 --- /dev/null +++ b/pallets/stateful-storage/src/runtime-api/Cargo.toml @@ -0,0 +1,30 @@ +[package] +name = "pallet-stateful-storage-runtime-api" +version = "0.0.0" +description = "A package that adds Runtime Api for the Stateful Storage pallet" +authors = ["Frequency"] +license = "Apache-2.0" +publish = false +homepage = "https://frequency.xyz" +repository = "https://github.com/frequency-chain/frequency/" +edition = "2021" + +[dependencies] +# Substrate +sp-api = { workspace = true } +frame-support = { workspace = true } +sp-runtime = { workspace = true } +# Frequency related dependencies +common-primitives = { default-features = false, path = "../../../../common/primitives" } + +[features] +default = ["std"] +std = [ + "sp-api/std", + "frame-support/std", + 'common-primitives/std', + 'sp-runtime/std', +] + +[lints] +workspace = true diff --git a/pallets/stateful-storage/src/runtime-api/src/lib.rs b/pallets/stateful-storage/src/runtime-api/src/lib.rs new file mode 100644 index 0000000000..916e0be111 --- /dev/null +++ b/pallets/stateful-storage/src/runtime-api/src/lib.rs @@ -0,0 +1,46 @@ +#![cfg_attr(not(feature = "std"), no_std)] +#![allow(clippy::too_many_arguments)] +#![allow(clippy::unnecessary_mut_passed)] +#![allow(rustdoc::bare_urls)] +// Strong Documentation Lints +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + missing_docs +)] + +//! Runtime API definition for [Stateful Storage](../pallet_stateful_storage/index.html) +//! +//! This api must be implemented by the node runtime. +//! Runtime APIs Provide: +//! - An interface between the runtime and Custom RPCs. +//! - Runtime interfaces for end users beyond just State Queries + +use common_primitives::{ + msa::MessageSourceId, + schema::SchemaId, + stateful_storage::{ItemizedStoragePageResponse, PaginatedStorageResponse}, +}; +use sp_runtime::DispatchError; +extern crate alloc; +use alloc::vec::Vec; + +// Here we declare the runtime API. It is implemented it the `impl` block in +// runtime files (the `runtime` folder) +sp_api::decl_runtime_apis! { + + /// Runtime Version for Stateful Storage + /// - MUST be incremented if anything changes + /// - See: https://paritytech.github.io/polkadot/doc/polkadot_primitives/runtime_api/index.html + #[api_version(1)] + + /// Runtime APIs for [Stateful Storage](../pallet_stateful_storage/index.html) + pub trait StatefulStorageRuntimeApi + { + /// Retrieve the paginated storage for a particular msa and schema + fn get_paginated_storage(msa_id: MessageSourceId, schema_id: SchemaId) -> Result, DispatchError>; + /// Retrieve the itemized storage for a particular msa and schema + fn get_itemized_storage(msa_id: MessageSourceId, schema_id: SchemaId) -> Result; + } +} diff --git a/pallets/stateful-storage/src/stateful_child_tree.rs b/pallets/stateful-storage/src/stateful_child_tree.rs new file mode 100644 index 0000000000..6247d1bab6 --- /dev/null +++ b/pallets/stateful-storage/src/stateful_child_tree.rs @@ -0,0 +1,400 @@ +use core::marker::PhantomData; + +use common_primitives::msa::MessageSourceId; +use core::fmt::Debug; +use frame_support::{ + storage::{child, child::ChildInfo, ChildTriePrefixIterator}, + Blake2_128, Blake2_256, Hashable, StorageHasher, Twox128, Twox256, +}; +use parity_scale_codec::{Decode, Encode}; +use sp_core::{ConstU8, Get}; +use sp_io::hashing::twox_64; +extern crate alloc; +use alloc::{boxed::Box, vec::Vec}; + +/// Hasher to use to hash keys to insert to storage. +pub trait MultipartKeyStorageHasher: StorageHasher { + type HashSize: Get; + /// Split the hash part out of the input. + /// + /// I.e. for input `&[hash ++ hash ++ key]` returns `&[key]` + fn reverse(x: &[u8], num_key_parts: u8) -> &[u8] { + let hash_len: usize = (Self::HashSize::get() * num_key_parts).into(); + if x.len() < hash_len { + log::error!("Invalid reverse: hash length too short"); + return &[] + } + &x[hash_len..] + } +} +/// 128-bit Blake2 hash. +impl MultipartKeyStorageHasher for Blake2_128 { + type HashSize = ConstU8<16>; +} +/// 256-bit Blake2 hash. +impl MultipartKeyStorageHasher for Blake2_256 { + type HashSize = ConstU8<32>; +} +/// 128-bit XX hash. +impl MultipartKeyStorageHasher for Twox128 { + type HashSize = ConstU8<16>; +} +/// 256-bit XX hash. +impl MultipartKeyStorageHasher for Twox256 { + type HashSize = ConstU8<32>; +} + +pub trait MultipartStorageKeyPart: + Clone + Debug + Default + Decode + Encode + Eq + PartialEq + Hashable +{ +} +impl MultipartStorageKeyPart for T where + T: Clone + Debug + Default + Decode + Encode + Eq + PartialEq + Hashable +{ +} + +/// A trait that defines operations for a multi-part key in child storage that allows to retrieve +/// all different prefix combinations +pub trait MultipartKey: MultipartStorageKeyPart { + type Arity: Get; + + fn hash(&self) -> Vec; + fn hash_prefix_only(&self) -> Vec; + + #[allow(dead_code)] + fn decode(hash: &[u8]) -> Result { + let mut key_material = H::reverse(hash, Self::Arity::get()); + ::decode(&mut key_material) + } + + fn decode_without_prefix( + hash: &[u8], + prefix_len: u8, + ) -> Result { + if prefix_len > Self::Arity::get() { + return Err("Prefix longer than total key length".into()) + } + + let mut key_material = H::reverse(hash, Self::Arity::get() - prefix_len); + ::decode(&mut key_material) + } +} + +impl MultipartKey for () { + type Arity = ConstU8<0>; + + fn hash(&self) -> Vec { + Vec::new() + } + + fn hash_prefix_only(&self) -> Vec { + Vec::new() + } + + fn decode(_hash: &[u8]) -> Result { + Ok(()) + } +} + +impl MultipartKey for (T1,) { + type Arity = ConstU8<1>; + + fn hash(&self) -> Vec { + let encoded_1 = self.0.encode(); + ::hash(&encoded_1) + .as_ref() + .iter() + .chain(self.encode().iter()) + .cloned() + .collect::>() + } + + fn hash_prefix_only(&self) -> Vec { + let encoded_1 = self.0.encode(); + ::hash(&encoded_1).as_ref().to_vec() + } +} + +impl + MultipartKey for (T1, T2) +{ + type Arity = ConstU8<2>; + + fn hash(&self) -> Vec { + let encoded_1 = self.0.encode(); + let encoded_2 = self.1.encode(); + H::hash(&encoded_1) + .as_ref() + .iter() + .chain(H::hash(&encoded_2).as_ref().iter()) + .chain(self.encode().iter()) + .cloned() + .collect::>() + } + + fn hash_prefix_only(&self) -> Vec { + let encoded_1 = self.0.encode(); + let encoded_2 = self.1.encode(); + ::hash(&encoded_1) + .as_ref() + .iter() + .chain(H::hash(&encoded_2).as_ref().iter()) + .cloned() + .collect::>() + } +} + +impl< + H: MultipartKeyStorageHasher, + T1: MultipartStorageKeyPart, + T2: MultipartStorageKeyPart, + T3: MultipartStorageKeyPart, + > MultipartKey for (T1, T2, T3) +{ + type Arity = ConstU8<3>; + + fn hash(&self) -> Vec { + let encoded_1 = self.0.encode(); + let encoded_2 = self.1.encode(); + let encoded_3 = self.2.encode(); + H::hash(&encoded_1) + .as_ref() + .iter() + .chain(H::hash(&encoded_2).as_ref().iter()) + .chain(H::hash(&encoded_3).as_ref().iter()) + .chain(self.encode().iter()) + .cloned() + .collect::>() + } + + fn hash_prefix_only(&self) -> Vec { + let encoded_1 = self.0.encode(); + let encoded_2 = self.1.encode(); + let encoded_3 = self.2.encode(); + ::hash(&encoded_1) + .as_ref() + .iter() + .chain(H::hash(&encoded_2).as_ref().iter()) + .chain(H::hash(&encoded_3).as_ref().iter()) + .cloned() + .collect::>() + } +} + +impl< + H: MultipartKeyStorageHasher, + T1: MultipartStorageKeyPart, + T2: MultipartStorageKeyPart, + T3: MultipartStorageKeyPart, + T4: MultipartStorageKeyPart, + > MultipartKey for (T1, T2, T3, T4) +{ + type Arity = ConstU8<4>; + + fn hash(&self) -> Vec { + let encoded_1 = self.0.encode(); + let encoded_2 = self.1.encode(); + let encoded_3 = self.2.encode(); + let encoded_4 = self.3.encode(); + H::hash(&encoded_1) + .as_ref() + .iter() + .chain(H::hash(&encoded_2).as_ref().iter()) + .chain(H::hash(&encoded_3).as_ref().iter()) + .chain(H::hash(&encoded_4).as_ref().iter()) + .chain(self.encode().iter()) + .cloned() + .collect::>() + } + + fn hash_prefix_only(&self) -> Vec { + let encoded_1 = self.0.encode(); + let encoded_2 = self.1.encode(); + let encoded_3 = self.2.encode(); + let encoded_4 = self.3.encode(); + ::hash(&encoded_1) + .as_ref() + .iter() + .chain(H::hash(&encoded_2).as_ref().iter()) + .chain(H::hash(&encoded_3).as_ref().iter()) + .chain(H::hash(&encoded_4).as_ref().iter()) + .cloned() + .collect::>() + } +} + +/// A trait that allows to iterate on the prefix of a multi-part key +pub trait IsTuplePrefix: + MultipartKey +{ +} +impl IsTuplePrefix for () {} +impl + IsTuplePrefix for () +{ +} +impl + IsTuplePrefix for (T1,) +{ +} +impl< + H: MultipartKeyStorageHasher, + T1: MultipartStorageKeyPart, + T2: MultipartStorageKeyPart, + T3: MultipartStorageKeyPart, + > IsTuplePrefix for () +{ +} +impl< + H: MultipartKeyStorageHasher, + T1: MultipartStorageKeyPart, + T2: MultipartStorageKeyPart, + T3: MultipartStorageKeyPart, + > IsTuplePrefix for (T1,) +{ +} +impl< + H: MultipartKeyStorageHasher, + T1: MultipartStorageKeyPart, + T2: MultipartStorageKeyPart, + T3: MultipartStorageKeyPart, + > IsTuplePrefix for (T1, T2) +{ +} +impl< + H: MultipartKeyStorageHasher, + T1: MultipartStorageKeyPart, + T2: MultipartStorageKeyPart, + T3: MultipartStorageKeyPart, + T4: MultipartStorageKeyPart, + > IsTuplePrefix for () +{ +} +impl< + H: MultipartKeyStorageHasher, + T1: MultipartStorageKeyPart, + T2: MultipartStorageKeyPart, + T3: MultipartStorageKeyPart, + T4: MultipartStorageKeyPart, + > IsTuplePrefix for (T1,) +{ +} +impl< + H: MultipartKeyStorageHasher, + T1: MultipartStorageKeyPart, + T2: MultipartStorageKeyPart, + T3: MultipartStorageKeyPart, + T4: MultipartStorageKeyPart, + > IsTuplePrefix for (T1, T2) +{ +} +impl< + H: MultipartKeyStorageHasher, + T1: MultipartStorageKeyPart, + T2: MultipartStorageKeyPart, + T3: MultipartStorageKeyPart, + T4: MultipartStorageKeyPart, + > IsTuplePrefix for (T1, T2, T3) +{ +} + +/// Paginated Stateful data access utility +pub struct StatefulChildTree { + hasher: PhantomData, +} +impl StatefulChildTree { + /// Reads a child tree node and tries to decode it + /// + /// The read is performed from the `msa_id` only. The `key` is not required. If the + /// data doesn't store under the given `key` `None` is returned. + pub fn try_read, V: Decode + Sized>( + msa_id: &MessageSourceId, + pallet_name: &[u8], + storage_name: &[u8], + keys: &K, + ) -> Result, ()> { + let child = Self::get_child_tree_for_storage(*msa_id, pallet_name, storage_name); + let value = child::get_raw(&child, &keys.hash()); + match value { + None => Ok(None), + Some(v) => Ok(Decode::decode(&mut &v[..]).map(Some).map_err(|_| ())?), + } + } + + /// Prefix Iterator for a child tree + /// + /// Allows getting all the keys having the same prefix + /// Warning: This should not be used from any on-chain transaction! + pub fn prefix_iterator< + V: Decode + Sized, + K: MultipartKey + Sized, + PrefixKey: IsTuplePrefix, + >( + msa_id: &MessageSourceId, + pallet_name: &[u8], + storage_name: &[u8], + prefix_keys: &PrefixKey, + ) -> Box> { + let child = Self::get_child_tree_for_storage(*msa_id, pallet_name, storage_name); + let result = ChildTriePrefixIterator::<(Vec, V)>::with_prefix( + &child, + &prefix_keys.hash_prefix_only(), + ) + .filter_map(|(k, v)| { + if let Ok(key) = + >::decode_without_prefix(&k, PrefixKey::Arity::get()) + { + Some((key, v)) + } else { + None + } + }); + Box::new(result) + } + + /// Writes directly into child tree node + pub fn write, V: Encode + Sized>( + msa_id: &MessageSourceId, + pallet_name: &[u8], + storage_name: &[u8], + keys: &K, + new_value: V, + ) { + let child_trie_info = &Self::get_child_tree_for_storage(*msa_id, pallet_name, storage_name); + child::put_raw(child_trie_info, &keys.hash(), new_value.encode().as_ref()); + } + + /// Kills a child tree node + pub fn kill>( + msa_id: &MessageSourceId, + pallet_name: &[u8], + storage_name: &[u8], + keys: &K, + ) { + let child_trie_info = &Self::get_child_tree_for_storage(*msa_id, pallet_name, storage_name); + child::kill(child_trie_info, &keys.hash()); + } + + /// These hashes should be consistent across the chain so we are hardcoding them + fn get_child_tree_for_storage( + msa_id: MessageSourceId, + pallet_name: &[u8], + storage_name: &[u8], + ) -> ChildInfo { + let trie_root = Self::get_tree_prefix(msa_id); + // child tree root should be hashed by Blake128 to avoid probability of conflict + let hashed_keys: Vec = [ + Blake2_128::hash(&trie_root[..]).as_ref(), + twox_64(pallet_name).as_ref(), + twox_64(storage_name).as_ref(), + ] + .concat(); + child::ChildInfo::new_default(&hashed_keys) + } + + /// Storage Prefix for a given MSA Id + fn get_tree_prefix(msa_id: MessageSourceId) -> Vec { + let arr = [&msa_id.encode()[..], b"::"].concat(); + arr.to_vec() + } +} diff --git a/pallets/stateful-storage/src/test_common.rs b/pallets/stateful-storage/src/test_common.rs new file mode 100644 index 0000000000..776d4b36a8 --- /dev/null +++ b/pallets/stateful-storage/src/test_common.rs @@ -0,0 +1,88 @@ +use common_primitives::{msa::MessageSourceId, schema::SchemaId}; + +/// +/// Constants used both in benchmarks and tests +/// +#[allow(unused)] +pub mod constants { + use super::*; + /// itemized schema id + pub const ITEMIZED_SCHEMA: SchemaId = 100; + /// paginated schema id + pub const PAGINATED_SCHEMA: SchemaId = 101; + /// Is used in benchmarks and mocks to sign and verify a payload + pub const BENCHMARK_SIGNATURE_ACCOUNT_SEED: &str = + "replace rhythm attend tank sister accuse ancient piece tornado benefit rubber horror"; + /// Account mentioned above maps to the following msa id + pub const SIGNATURE_MSA_ID: MessageSourceId = 105; + + // additional unit test schemas + + /// Itemized + pub const UNDELEGATED_ITEMIZED_APPEND_ONLY_SCHEMA: SchemaId = 102; + pub const ITEMIZED_APPEND_ONLY_SCHEMA: SchemaId = 103; + pub const ITEMIZED_SIGNATURE_REQUIRED_SCHEMA: SchemaId = 104; + pub const UNDELEGATED_ITEMIZED_SCHEMA: SchemaId = 105; + /// Paginated + pub const PAGINATED_SIGNED_SCHEMA: SchemaId = 106; + pub const PAGINATED_APPEND_ONLY_SCHEMA: SchemaId = 107; + pub const UNDELEGATED_PAGINATED_SCHEMA: SchemaId = 108; +} + +#[cfg(test)] +pub mod test_utility { + use crate::{pallet, tests::mock::Test, Config, ItemHeader, ItemizedPage, Page}; + use common_primitives::{ + schema::{ModelType, PayloadLocation}, + stateful_storage::PageNonce, + }; + use frame_support::BoundedVec; + use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; + use scale_info::TypeInfo; + use sp_core::Get; + + pub type ItemizedPageSize = ::MaxItemizedPageSizeBytes; + pub type PaginatedPageSize = ::MaxPaginatedPageSizeBytes; + pub type ItemizedBlobSize = ::MaxItemizedBlobSizeBytes; + + pub const NONEXISTENT_PAGE_HASH: u32 = 0; + + pub fn generate_payload_bytes>(id: Option) -> BoundedVec { + let value = id.unwrap_or(1); + format!("{{'type':{value}, 'description':'another test description {value}'}}") + .as_bytes() + .to_vec() + .try_into() + .unwrap() + } + + pub fn generate_page>(in_nonce: Option, id: Option) -> Page { + let nonce = in_nonce.unwrap_or_default(); + Page:: { nonce, data: generate_payload_bytes(id) } + } + + pub fn add_itemized_payload_to_buffer(buffer: &mut Vec, payload: &[u8]) { + buffer.extend_from_slice(&ItemHeader { payload_len: payload.len() as u16 }.encode()[..]); + buffer.extend_from_slice(payload); + } + + pub fn create_itemized_page_from( + nonce_in: Option, + payloads: &[BoundedVec], + ) -> ItemizedPage { + let nonce = nonce_in.unwrap_or_default(); + let mut buffer: Vec = vec![]; + for p in payloads { + add_itemized_payload_to_buffer::(&mut buffer, p.as_slice()); + } + let data = BoundedVec::::try_from(buffer).unwrap(); + ItemizedPage:: { nonce, data } + } + #[derive(Clone, Encode, Decode, PartialEq, Debug, TypeInfo, MaxEncodedLen)] + /// A structure defining a Schema + pub struct TestStruct { + pub model_type: ModelType, + pub payload_location: PayloadLocation, + pub number: u64, + } +} diff --git a/pallets/stateful-storage/src/tests/apply_item_actions_tests.rs b/pallets/stateful-storage/src/tests/apply_item_actions_tests.rs new file mode 100644 index 0000000000..cee5ea3605 --- /dev/null +++ b/pallets/stateful-storage/src/tests/apply_item_actions_tests.rs @@ -0,0 +1,879 @@ +use crate::{ + stateful_child_tree::StatefulChildTree, + test_common::{constants::*, test_utility::*}, + tests::mock::*, + types::*, + Config, Error, Event as StatefulEvent, +}; +use common_primitives::{ + stateful_storage::{PageHash, PageNonce}, + utils::wrap_binary_data, +}; +use frame_support::{assert_err, assert_ok, BoundedVec}; +use parity_scale_codec::Encode; +#[allow(unused_imports)] +use pretty_assertions::{assert_eq, assert_ne, assert_str_eq}; +use sp_core::{sr25519, Get, Pair}; +use sp_runtime::{AccountId32, MultiSignature}; + +#[test] +fn apply_item_actions_with_invalid_msa_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let msa_id = 1; + let caller_1 = test_public(INVALID_MSA_ID); // hard-coded in mocks to return None for MSA + let schema_id = ITEMIZED_SCHEMA; + let payload = vec![1; 5]; + let actions = vec![ItemAction::Add { data: payload.try_into().unwrap() }]; + + // act + assert_err!( + StatefulStoragePallet::apply_item_actions( + RuntimeOrigin::signed(caller_1), + msa_id, + schema_id, + NONEXISTENT_PAGE_HASH, + BoundedVec::try_from(actions).unwrap(), + ), + Error::::InvalidMessageSourceAccount + ) + }); +} + +#[test] +fn apply_item_actions_with_invalid_schema_id_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let msa_id = 1; + let caller_1 = test_public(msa_id); + let schema_id = INVALID_SCHEMA_ID; + let payload = vec![1; 5]; + let actions = vec![ItemAction::Add { data: payload.try_into().unwrap() }]; + + // act + assert_err!( + StatefulStoragePallet::apply_item_actions( + RuntimeOrigin::signed(caller_1), + msa_id, + schema_id, + NONEXISTENT_PAGE_HASH, + BoundedVec::try_from(actions).unwrap(), + ), + Error::::InvalidSchemaId + ) + }); +} + +#[test] +fn apply_item_actions_with_invalid_schema_location_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let msa_id = 1; + let caller_1 = test_public(msa_id); + let schema_id = PAGINATED_SCHEMA; + let payload = vec![1; 5]; + let actions = vec![ItemAction::Add { data: payload.try_into().unwrap() }]; + + // act + assert_err!( + StatefulStoragePallet::apply_item_actions( + RuntimeOrigin::signed(caller_1), + msa_id, + schema_id, + NONEXISTENT_PAGE_HASH, + BoundedVec::try_from(actions).unwrap(), + ), + Error::::SchemaPayloadLocationMismatch + ) + }); +} + +#[test] +fn apply_item_actions_with_no_delegation_and_different_caller_from_owner_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let msa_id = 1; + let caller_1 = test_public(2); + let schema_id = UNDELEGATED_ITEMIZED_SCHEMA; + let payload = vec![1; 5]; + let actions = vec![ItemAction::Add { data: payload.try_into().unwrap() }]; + + // act + assert_err!( + StatefulStoragePallet::apply_item_actions( + RuntimeOrigin::signed(caller_1), + msa_id, + schema_id, + NONEXISTENT_PAGE_HASH, + BoundedVec::try_from(actions).unwrap(), + ), + Error::::UnauthorizedDelegate + ) + }); +} + +#[test] +fn apply_item_actions_with_corrupted_state_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let msa_id = 1; + let caller_1 = test_public(msa_id); + let schema_id = ITEMIZED_SCHEMA; + let payload = vec![1; 5]; + let page: ItemizedPage = generate_page(None, None); + let actions1 = vec![ItemAction::Add { data: payload.clone().try_into().unwrap() }]; + let key = (schema_id,); + StatefulChildTree::<::KeyHasher>::write( + &msa_id, + PALLET_STORAGE_PREFIX, + ITEMIZED_STORAGE_PREFIX, + &key, + &page, + ); + let previous_page: ItemizedPage = + StatefulChildTree::<::KeyHasher>::try_read( + &msa_id, + PALLET_STORAGE_PREFIX, + ITEMIZED_STORAGE_PREFIX, + &key, + ) + .unwrap() + .unwrap(); + let previous_hash = previous_page.get_hash(); + + // act + assert_err!( + StatefulStoragePallet::apply_item_actions( + RuntimeOrigin::signed(caller_1), + msa_id, + schema_id, + previous_hash, + BoundedVec::try_from(actions1).unwrap(), + ), + Error::::CorruptedState + ) + }); +} + +#[test] +fn apply_item_actions_initial_state_with_stale_hash_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let msa_id = 1; + let caller_1 = test_public(msa_id); + let schema_id = ITEMIZED_SCHEMA; + let payload = vec![1; 5]; + let actions1 = vec![ItemAction::Add { data: payload.try_into().unwrap() }]; + + // act + assert_err!( + StatefulStoragePallet::apply_item_actions( + RuntimeOrigin::signed(caller_1), + msa_id, + schema_id, + 1u32, // any non-zero value + BoundedVec::try_from(actions1).unwrap(), + ), + Error::::StalePageState + ) + }); +} + +#[test] +fn apply_item_actions_initial_state_with_valid_input_should_update_storage() { + new_test_ext().execute_with(|| { + // arrange + let msa_id = 1; + let caller_1 = test_public(msa_id); + let schema_id = ITEMIZED_SCHEMA; + let payload = vec![1; 5]; + let prev_content_hash: PageHash = 0; + let actions = vec![ItemAction::Add { data: payload.try_into().unwrap() }]; + + // act + assert_ok!(StatefulStoragePallet::apply_item_actions( + RuntimeOrigin::signed(caller_1), + msa_id, + schema_id, + prev_content_hash, + BoundedVec::try_from(actions).unwrap(), + )); + + // assert + let updated_page: Option> = + StatefulChildTree::<::KeyHasher>::try_read( + &msa_id, + PALLET_STORAGE_PREFIX, + ITEMIZED_STORAGE_PREFIX, + &(schema_id,), + ) + .unwrap(); + assert!(updated_page.is_some()); + let updated_page = updated_page.unwrap(); + let curr_content_hash = updated_page.get_hash(); + assert_eq!(updated_page.nonce, PageNonce::default() + 1); + System::assert_last_event( + StatefulEvent::ItemizedPageUpdated { + msa_id, + schema_id, + prev_content_hash, + curr_content_hash, + } + .into(), + ); + }); +} + +#[test] +fn apply_item_actions_existing_page_with_valid_input_should_update_storage() { + new_test_ext().execute_with(|| { + // arrange + let msa_id = 1; + let caller_1 = test_public(msa_id); + let schema_id = ITEMIZED_SCHEMA; + let payload = vec![1; 5]; + let nonce = 10; + let actions = vec![ItemAction::Add { data: payload.clone().try_into().unwrap() }]; + let page = create_itemized_page_from::(Some(nonce), &[payload.try_into().unwrap()]); + let prev_content_hash = page.get_hash(); + let key = (schema_id,); + + // act + ::write( + &msa_id, + PALLET_STORAGE_PREFIX, + ITEMIZED_STORAGE_PREFIX, + &key, + &page, + ); + assert_ok!(StatefulStoragePallet::apply_item_actions( + RuntimeOrigin::signed(caller_1), + msa_id, + schema_id, + prev_content_hash, + BoundedVec::try_from(actions).unwrap(), + )); + + // assert + let updated_page: Option> = + StatefulChildTree::<::KeyHasher>::try_read( + &msa_id, + PALLET_STORAGE_PREFIX, + ITEMIZED_STORAGE_PREFIX, + &(schema_id,), + ) + .unwrap(); + assert!(updated_page.is_some()); + let updated_page = updated_page.unwrap(); + let curr_content_hash = updated_page.get_hash(); + assert_eq!(nonce + 1, updated_page.nonce); + System::assert_last_event( + StatefulEvent::ItemizedPageUpdated { + msa_id, + schema_id, + prev_content_hash, + curr_content_hash, + } + .into(), + ); + }); +} + +#[test] +fn apply_item_actions_with_valid_input_and_empty_items_should_remove_storage() { + new_test_ext().execute_with(|| { + // arrange + let msa_id = 1; + let caller_1 = test_public(msa_id); + let schema_id = ITEMIZED_SCHEMA; + let payload = vec![1; 5]; + let actions1 = vec![ItemAction::Add { data: payload.try_into().unwrap() }]; + let actions2 = vec![ItemAction::Delete { index: 0 }]; + let keys = (schema_id,); + assert_ok!(StatefulStoragePallet::apply_item_actions( + RuntimeOrigin::signed(caller_1.clone()), + msa_id, + schema_id, + NONEXISTENT_PAGE_HASH, + BoundedVec::try_from(actions1).unwrap(), + )); + + let items1: Option> = + StatefulChildTree::<::KeyHasher>::try_read( + &msa_id, + PALLET_STORAGE_PREFIX, + ITEMIZED_STORAGE_PREFIX, + &keys, + ) + .unwrap(); + assert!(items1.is_some()); + let content_hash = items1.unwrap().get_hash(); + + // act + assert_ok!(StatefulStoragePallet::apply_item_actions( + RuntimeOrigin::signed(caller_1), + msa_id, + schema_id, + content_hash, + BoundedVec::try_from(actions2).unwrap(), + )); + + // assert + let items2: Option> = + StatefulChildTree::<::KeyHasher>::try_read( + &msa_id, + PALLET_STORAGE_PREFIX, + ITEMIZED_STORAGE_PREFIX, + &(schema_id,), + ) + .unwrap(); + assert!(items2.is_none()); + System::assert_last_event( + StatefulEvent::ItemizedPageDeleted { + msa_id, + schema_id, + prev_content_hash: content_hash, + } + .into(), + ); + }); +} + +#[test] +fn apply_item_actions_on_signature_schema_fails_for_non_owner() { + new_test_ext().execute_with(|| { + // arrange + // Note: normal use case for this test would be called by a delegate; + // we don't bother setting up the delegation because the call should fail + // before we check the delegation, as long as the owner_msa_id != caller_msa_id + let (caller_msa_id, caller_keys) = get_signature_account(); + let owner_msa_id = caller_msa_id.saturating_add(1); + let caller_1: AccountId32 = caller_keys.public().into(); + let schema_id = ITEMIZED_SIGNATURE_REQUIRED_SCHEMA; + let payload = vec![1; 5]; + let actions1 = vec![ItemAction::Add { data: payload.try_into().unwrap() }]; + assert_err!( + StatefulStoragePallet::apply_item_actions( + RuntimeOrigin::signed(caller_1), + owner_msa_id, + schema_id, + NONEXISTENT_PAGE_HASH, + BoundedVec::try_from(actions1).unwrap(), + ), + Error::::UnsupportedOperationForSchema + ); + }); +} + +#[test] +fn apply_item_actions_on_signature_schema_succeeds_for_owner() { + new_test_ext().execute_with(|| { + // arrange + let (msa_id, caller_keys) = get_signature_account(); + let caller_1: AccountId32 = caller_keys.public().into(); + let schema_id = ITEMIZED_SIGNATURE_REQUIRED_SCHEMA; + let payload = vec![1; 5]; + let actions1 = vec![ItemAction::Add { data: payload.try_into().unwrap() }]; + assert_ok!(StatefulStoragePallet::apply_item_actions( + RuntimeOrigin::signed(caller_1), + msa_id, + schema_id, + NONEXISTENT_PAGE_HASH, + BoundedVec::try_from(actions1).unwrap(), + )); + }); +} + +#[test] +fn apply_item_actions_existing_page_with_stale_hash_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let msa_id = 1; + let caller_1 = test_public(msa_id); + let schema_id = ITEMIZED_SCHEMA; + let payload = vec![1; 5]; + let actions1 = vec![ItemAction::Add { data: payload.clone().try_into().unwrap() }]; + + let page = ItemizedPage::::default(); + let page_hash = page.get_hash(); + let mut new_page = + ItemizedOperations::::apply_item_actions(&page, &actions1).unwrap(); + new_page.nonce = 1; + let key = (schema_id,); + ::write( + &msa_id, + PALLET_STORAGE_PREFIX, + ITEMIZED_STORAGE_PREFIX, + &key, + &new_page, + ); + + // act + assert_err!( + StatefulStoragePallet::apply_item_actions( + RuntimeOrigin::signed(caller_1), + msa_id, + schema_id, + page_hash, + BoundedVec::try_from(actions1).unwrap(), + ), + Error::::StalePageState + ) + }); +} + +#[test] +fn apply_delete_item_on_append_only_fails() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let msa_id = 1; + let schema_id = ITEMIZED_APPEND_ONLY_SCHEMA; + let payload = vec![1; 5]; + let actions1 = vec![ItemAction::Add { data: payload.try_into().unwrap() }]; + let actions2 = vec![ItemAction::Delete { index: 0 }]; + let keys = (schema_id,); + assert_ok!(StatefulStoragePallet::apply_item_actions( + RuntimeOrigin::signed(caller_1.clone()), + msa_id, + schema_id, + NONEXISTENT_PAGE_HASH, + BoundedVec::try_from(actions1).unwrap(), + )); + + let items1: Option> = + StatefulChildTree::<::KeyHasher>::try_read( + &msa_id, + PALLET_STORAGE_PREFIX, + ITEMIZED_STORAGE_PREFIX, + &keys, + ) + .unwrap(); + assert!(items1.is_some()); + let content_hash = items1.unwrap().get_hash(); + + // assert + assert_err!( + StatefulStoragePallet::apply_item_actions( + RuntimeOrigin::signed(caller_1), + msa_id, + schema_id, + content_hash, + BoundedVec::try_from(actions2).unwrap(), + ), + Error::::UnsupportedOperationForSchema + ); + }); +} + +#[test] +fn apply_item_actions_with_signature_v2_having_wrong_signature_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let (_, pair) = get_signature_account(); + let delegator_key = pair.public(); + let (signature_key, _) = sr25519::Pair::generate(); + let schema_id = ITEMIZED_SCHEMA; + let payload = vec![1; 5]; + let actions = vec![ItemAction::Add { data: payload.try_into().unwrap() }]; + let payload = ItemizedSignaturePayloadV2 { + actions: BoundedVec::try_from(actions).unwrap(), + target_hash: PageHash::default(), + expiration: 10, + schema_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let owner_signature: MultiSignature = signature_key.sign(&encode_data_new_key_data).into(); + + // act + assert_err!( + StatefulStoragePallet::apply_item_actions_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_signature, + payload + ), + Error::::InvalidSignature + ) + }); +} + +#[test] +fn apply_item_actions_with_signature_v2_having_too_far_expiration_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let (_, pair) = get_signature_account(); + let delegator_key = pair.public(); + let schema_id = ITEMIZED_SCHEMA; + let payload = vec![1; 5]; + let actions = vec![ItemAction::Add { data: payload.try_into().unwrap() }]; + let mortality_window: u32 = ::MortalityWindowSize::get(); + let payload = ItemizedSignaturePayloadV2 { + actions: BoundedVec::try_from(actions).unwrap(), + target_hash: PageHash::default(), + expiration: (mortality_window + 1).into(), + schema_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let owner_signature: MultiSignature = pair.sign(&encode_data_new_key_data).into(); + + // act + assert_err!( + StatefulStoragePallet::apply_item_actions_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_signature, + payload + ), + Error::::ProofNotYetValid + ) + }); +} + +#[test] +fn apply_item_actions_with_signature_v2_having_expired_payload_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let (_, pair) = get_signature_account(); + let delegator_key = pair.public(); + let schema_id = ITEMIZED_SCHEMA; + let payload = vec![1; 5]; + let actions = vec![ItemAction::Add { data: payload.try_into().unwrap() }]; + let block_number = 10; + let payload = ItemizedSignaturePayloadV2 { + actions: BoundedVec::try_from(actions).unwrap(), + target_hash: PageHash::default(), + expiration: block_number, + schema_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let owner_signature: MultiSignature = pair.sign(&encode_data_new_key_data).into(); + + // act + System::set_block_number(block_number); + assert_err!( + StatefulStoragePallet::apply_item_actions_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_signature, + payload + ), + Error::::ProofHasExpired + ) + }); +} + +#[test] +fn apply_item_actions_with_signature_v2_having_correct_input_should_work() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let (msa_id, pair) = get_signature_account(); + let delegator_key = pair.public(); + let schema_id = ITEMIZED_SCHEMA; + let prev_content_hash = PageHash::default(); + let payload = vec![1; 5]; + let actions = vec![ItemAction::Add { data: payload.try_into().unwrap() }]; + let payload = ItemizedSignaturePayloadV2 { + actions: BoundedVec::try_from(actions).unwrap(), + target_hash: prev_content_hash, + expiration: 10, + schema_id, + }; + + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let owner_signature: MultiSignature = pair.sign(&encode_data_new_key_data).into(); + + // act + assert_ok!(StatefulStoragePallet::apply_item_actions_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_signature, + payload + )); + + // assert + let updated_page: Option> = + StatefulChildTree::<::KeyHasher>::try_read( + &msa_id, + PALLET_STORAGE_PREFIX, + ITEMIZED_STORAGE_PREFIX, + &(schema_id,), + ) + .unwrap(); + assert!(updated_page.is_some()); + let curr_content_hash = updated_page.unwrap().get_hash(); + System::assert_last_event( + StatefulEvent::ItemizedPageUpdated { + msa_id, + schema_id, + prev_content_hash, + curr_content_hash, + } + .into(), + ); + }); +} + +#[test] +fn apply_item_actions_with_signature_v2_having_non_existing_msa_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let pair = get_invalid_msa_signature_account(); // hardcoded key that returns None Msa + let delegator_key = pair.public(); + let schema_id = ITEMIZED_SCHEMA; + let payload = vec![1; 5]; + let actions = vec![ItemAction::Add { data: payload.try_into().unwrap() }]; + let payload = ItemizedSignaturePayloadV2 { + actions: BoundedVec::try_from(actions).unwrap(), + target_hash: PageHash::default(), + expiration: 10, + schema_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let owner_signature: MultiSignature = pair.sign(&encode_data_new_key_data).into(); + + // act + assert_err!( + StatefulStoragePallet::apply_item_actions_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_signature, + payload + ), + Error::::InvalidMessageSourceAccount + ) + }); +} + +#[test] +fn apply_item_actions_with_signature_v2_having_invalid_schema_id_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let (_, pair) = get_signature_account(); + let delegator_key = pair.public(); + let schema_id = INVALID_SCHEMA_ID; + let payload = vec![1; 5]; + let actions = vec![ItemAction::Add { data: payload.try_into().unwrap() }]; + let payload = ItemizedSignaturePayloadV2 { + actions: BoundedVec::try_from(actions).unwrap(), + target_hash: PageHash::default(), + expiration: 10, + schema_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let owner_signature: MultiSignature = pair.sign(&encode_data_new_key_data).into(); + + // act + assert_err!( + StatefulStoragePallet::apply_item_actions_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_signature, + payload + ), + Error::::InvalidSchemaId + ) + }); +} + +#[test] +fn apply_item_actions_with_signature_v2_having_invalid_schema_location_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let (_, pair) = get_signature_account(); + let delegator_key = pair.public(); + let schema_id = PAGINATED_SCHEMA; + let payload = vec![1; 5]; + let actions = vec![ItemAction::Add { data: payload.try_into().unwrap() }]; + let payload = ItemizedSignaturePayloadV2 { + actions: BoundedVec::try_from(actions).unwrap(), + target_hash: PageHash::default(), + expiration: 10, + schema_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let owner_signature: MultiSignature = pair.sign(&encode_data_new_key_data).into(); + + // act + assert_err!( + StatefulStoragePallet::apply_item_actions_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_signature, + payload + ), + Error::::SchemaPayloadLocationMismatch + ) + }); +} + +#[test] +fn apply_item_actions_with_signature_v2_having_valid_input_and_empty_items_should_remove_storage() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let (msa_id, pair) = get_signature_account(); + let delegator_key = pair.public(); + let schema_id = ITEMIZED_SCHEMA; + let payload = vec![1; 5]; + let actions1 = vec![ItemAction::Add { data: payload.try_into().unwrap() }]; + let actions2 = vec![ItemAction::Delete { index: 0 }]; + let keys = (schema_id,); + assert_ok!(StatefulStoragePallet::apply_item_actions( + RuntimeOrigin::signed(caller_1.clone()), + msa_id, + schema_id, + NONEXISTENT_PAGE_HASH, + BoundedVec::try_from(actions1).unwrap(), + )); + + let items1: Option> = + StatefulChildTree::<::KeyHasher>::try_read( + &msa_id, + PALLET_STORAGE_PREFIX, + ITEMIZED_STORAGE_PREFIX, + &keys, + ) + .unwrap(); + assert!(items1.is_some()); + let content_hash = items1.unwrap().get_hash(); + + let payload = ItemizedSignaturePayloadV2 { + actions: BoundedVec::try_from(actions2).unwrap(), + target_hash: content_hash, + expiration: 10, + schema_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let owner_signature: MultiSignature = pair.sign(&encode_data_new_key_data).into(); + + // act + assert_ok!(StatefulStoragePallet::apply_item_actions_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_signature, + payload + )); + + // assert + let items2: Option> = + StatefulChildTree::<::KeyHasher>::try_read( + &msa_id, + PALLET_STORAGE_PREFIX, + ITEMIZED_STORAGE_PREFIX, + &(schema_id,), + ) + .unwrap(); + assert!(items2.is_none()); + System::assert_last_event( + StatefulEvent::ItemizedPageDeleted { + msa_id, + schema_id, + prev_content_hash: content_hash, + } + .into(), + ); + }); +} + +#[test] +fn apply_item_actions_with_signature_v2_having_corrupted_state_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let (msa_id, pair) = get_signature_account(); + let delegator_key = pair.public(); + let schema_id = ITEMIZED_SCHEMA; + let payload = vec![1; 5]; + let page: ItemizedPage = generate_page(None, None); + let actions = vec![ItemAction::Add { data: payload.clone().try_into().unwrap() }]; + let key = (schema_id,); + StatefulChildTree::<::KeyHasher>::write( + &msa_id, + PALLET_STORAGE_PREFIX, + ITEMIZED_STORAGE_PREFIX, + &key, + &page, + ); + let previous_page: ItemizedPage = + StatefulChildTree::<::KeyHasher>::try_read( + &msa_id, + PALLET_STORAGE_PREFIX, + ITEMIZED_STORAGE_PREFIX, + &key, + ) + .unwrap() + .unwrap(); + let previous_hash = previous_page.get_hash(); + + let payload = ItemizedSignaturePayloadV2 { + actions: BoundedVec::try_from(actions).unwrap(), + target_hash: previous_hash, + expiration: 10, + schema_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let owner_signature: MultiSignature = pair.sign(&encode_data_new_key_data).into(); + + // act + assert_err!( + StatefulStoragePallet::apply_item_actions_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_signature, + payload + ), + Error::::CorruptedState + ) + }); +} + +#[test] +fn apply_item_actions_with_signature_v2_having_page_with_stale_hash_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let (msa_id, pair) = get_signature_account(); + let delegator_key = pair.public(); + let schema_id = ITEMIZED_SCHEMA; + let payload = vec![1; 5]; + let actions = vec![ItemAction::Add { data: payload.clone().try_into().unwrap() }]; + let page = ItemizedPage::::default(); + let page_hash = page.get_hash(); + let page = ItemizedOperations::::apply_item_actions(&page, &actions).unwrap(); + let key = (schema_id,); + ::write( + &msa_id, + PALLET_STORAGE_PREFIX, + ITEMIZED_STORAGE_PREFIX, + &key, + page, + ); + let payload = ItemizedSignaturePayloadV2 { + actions: BoundedVec::try_from(actions).unwrap(), + target_hash: page_hash, + expiration: 10, + schema_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let owner_signature: MultiSignature = pair.sign(&encode_data_new_key_data).into(); + + // act + assert_err!( + StatefulStoragePallet::apply_item_actions_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_signature, + payload + ), + Error::::StalePageState + ) + }); +} diff --git a/pallets/stateful-storage/src/tests/child_tree_tests.rs b/pallets/stateful-storage/src/tests/child_tree_tests.rs new file mode 100644 index 0000000000..e0dab57121 --- /dev/null +++ b/pallets/stateful-storage/src/tests/child_tree_tests.rs @@ -0,0 +1,131 @@ +use crate::{stateful_child_tree::StatefulChildTree, test_common::test_utility::*, tests::mock::*}; +use common_primitives::schema::{ModelType, PayloadLocation, SchemaId}; +use frame_support::BoundedVec; +#[allow(unused_imports)] +use pretty_assertions::{assert_eq, assert_ne, assert_str_eq}; +use sp_core::ConstU32; +extern crate alloc; +use alloc::collections::btree_set::BTreeSet; + +#[test] +fn child_tree_write_read() { + new_test_ext().execute_with(|| { + // arrange + let pallet_name: &[u8] = b"test-pallet"; + let storage_name_1: &[u8] = b"storage1"; + let msa_id = 1; + let schema_id: SchemaId = 2; + let page_id: u8 = 3; + let keys = &(schema_id, page_id); + let val = TestStruct { + model_type: ModelType::AvroBinary, + payload_location: PayloadLocation::OnChain, + number: 8276387272, + }; + + // act + ::write(&msa_id, pallet_name, storage_name_1, keys, &val); + + // assert + let read = + ::try_read(&msa_id, pallet_name, storage_name_1, keys).unwrap(); + assert_eq!(Some(val), read); + }); +} + +type TestKeyString = BoundedVec>; +type TestKey = (TestKeyString, TestKeyString, u64); + +#[test] +fn child_tree_iterator() { + new_test_ext().execute_with(|| { + // arrange + let msa_id = 1; + let mut arr: Vec<(TestKey, TestKey)> = Vec::new(); + let pallet_name: &[u8] = b"test-pallet"; + let storage_name_1: &[u8] = b"storage1"; + let storage_name_2: &[u8] = b"storage2"; + let prefix_1 = TestKeyString::try_from(b"part_1".to_vec()).unwrap(); + let prefix_2a = TestKeyString::try_from(b"part_2a".to_vec()).unwrap(); + let prefix_2b = TestKeyString::try_from(b"part_2b".to_vec()).unwrap(); + + for i in 1u64..=10u64 { + let k: TestKey = ( + prefix_1.clone(), + match i % 2 { + 0 => prefix_2a.clone(), + _ => prefix_2b.clone(), + }, + i.clone(), + ); + let s = k.clone(); + arr.push((k.clone(), s.clone())); + ::write(&msa_id, pallet_name, storage_name_1, &k, s); + } + + // Try empty prefix + let all_nodes = ::prefix_iterator::( + &msa_id, + pallet_name, + storage_name_1, + &(), + ); + let r: BTreeSet = all_nodes.map(|(_k, s)| s.2).collect::>(); + + // Should return all items + assert_eq!( + r, + arr.iter().map(|(_k, s)| s.2).collect(), + "iterator with empty prefix should have returned all items with full key" + ); + + // Try 1-level prefix + let prefix_key = (prefix_1.clone(),); + let mut nodes = ::prefix_iterator::( + &msa_id, + pallet_name, + storage_name_1, + &prefix_key.clone(), + ); + let r0: BTreeSet = nodes.by_ref().map(|(_k, v)| v.2).collect(); + + assert_eq!( + r0, + arr.iter().map(|(_k, s)| s.2).collect(), + "iterator over topmost key should have returned all items" + ); + + for (k, s) in nodes { + assert_eq!(k, (s.0, s.1, s.2), "iterated keys should have been decoded properly"); + } + + // Try 2-level prefix + let prefix_key = (prefix_1.clone(), prefix_2a.clone()); + let nodes2 = ::prefix_iterator::( + &msa_id, + pallet_name, + storage_name_1, + &prefix_key, + ); + let r1: BTreeSet = nodes2.map(|(_, v)| v.2).collect(); + + // Should return only even-numbered items + assert_eq!( + r1, + arr.iter().filter(|(k, _s)| k.2 % 2 == 0).map(|(k, _s)| k.2).collect(), + "iterator over second-level key should have returned only even-numbered items" + ); + + // Try on another storage + let nodes3 = ::prefix_iterator::( + &msa_id, + pallet_name, + storage_name_2, + &prefix_key, + ); + let r3: BTreeSet = nodes3.map(|(_, v)| v.2).collect(); + + // Should return empty + assert_eq!(r3.len(), 0, "iterator over another storage shoudl return empty items"); + }); +} diff --git a/pallets/stateful-storage/src/tests/delete_page_tests.rs b/pallets/stateful-storage/src/tests/delete_page_tests.rs new file mode 100644 index 0000000000..ac87c34c6b --- /dev/null +++ b/pallets/stateful-storage/src/tests/delete_page_tests.rs @@ -0,0 +1,668 @@ +use crate::{ + stateful_child_tree::StatefulChildTree, + test_common::{constants::*, test_utility::*}, + tests::mock::*, + types::*, + Config, Error, Event as StatefulEvent, +}; +use common_primitives::{stateful_storage::PageHash, utils::wrap_binary_data}; +use frame_support::{assert_err, assert_ok, assert_storage_noop}; +use parity_scale_codec::Encode; +#[allow(unused_imports)] +use pretty_assertions::{assert_eq, assert_ne, assert_str_eq}; +use sp_core::{sr25519, Get, Pair}; +use sp_runtime::{AccountId32, MultiSignature}; + +#[test] +fn delete_page_id_out_of_bounds_errors() { + new_test_ext().execute_with(|| { + // setup + let msa_id = 1; + let caller_1 = test_public(msa_id); + let schema_id = PAGINATED_SCHEMA; + let page_id = ::MaxPaginatedPageId::get() + 1; + + assert_err!( + StatefulStoragePallet::delete_page( + RuntimeOrigin::signed(caller_1), + msa_id, + schema_id, + page_id.into(), + NONEXISTENT_PAGE_HASH, + ), + Error::::PageIdExceedsMaxAllowed + ); + }) +} + +#[test] +fn delete_page_with_invalid_msa_errors() { + new_test_ext().execute_with(|| { + // setup + let caller_1 = test_public(INVALID_MSA_ID); // hard-coded in mocks to return None for MSA + let msa_id = 1; + let schema_id = PAGINATED_SCHEMA; + let page_id = 1; + + assert_err!( + StatefulStoragePallet::delete_page( + RuntimeOrigin::signed(caller_1), + msa_id, + schema_id, + page_id, + NONEXISTENT_PAGE_HASH, + ), + Error::::InvalidMessageSourceAccount + ) + }) +} + +#[test] +fn delete_page_with_invalid_schema_id_errors() { + new_test_ext().execute_with(|| { + // setup + let msa_id = 1; + let caller_1 = test_public(1); + let schema_id = INVALID_SCHEMA_ID; + let page_id = 1; + + assert_err!( + StatefulStoragePallet::delete_page( + RuntimeOrigin::signed(caller_1), + msa_id, + schema_id, + page_id, + NONEXISTENT_PAGE_HASH, + ), + Error::::InvalidSchemaId + ) + }) +} + +#[test] +fn delete_page_with_invalid_schema_payload_location_errors() { + new_test_ext().execute_with(|| { + // setup + let msa_id = 1; + let caller_1 = test_public(msa_id); + let schema_id = ITEMIZED_SCHEMA; + let page_id = 1; + + assert_err!( + StatefulStoragePallet::delete_page( + RuntimeOrigin::signed(caller_1), + msa_id, + schema_id, + page_id, + NONEXISTENT_PAGE_HASH, + ), + Error::::SchemaPayloadLocationMismatch + ) + }) +} + +#[test] +fn delete_page_with_no_delegation_errors() { + new_test_ext().execute_with(|| { + // setup + let msa_id = 1; + let caller_1 = test_public(2); + let schema_id = UNDELEGATED_PAGINATED_SCHEMA; + let page_id = 1; + + assert_err!( + StatefulStoragePallet::delete_page( + RuntimeOrigin::signed(caller_1), + msa_id, + schema_id, + page_id, + NONEXISTENT_PAGE_HASH, + ), + Error::::UnauthorizedDelegate + ) + }) +} + +#[test] +fn delete_nonexistent_page_succeeds_noop() { + new_test_ext().execute_with(|| { + // setup + let msa_id = 1; + let caller_1 = test_public(msa_id); + let schema_id = PAGINATED_SCHEMA; + let page_id = 10; + + assert_ok!(StatefulStoragePallet::delete_page( + RuntimeOrigin::signed(caller_1), + msa_id, + schema_id, + page_id, + NONEXISTENT_PAGE_HASH, + )); + }) +} + +#[test] +fn delete_existing_page_with_bad_hash_errors() { + new_test_ext().execute_with(|| { + // setup + let msa_id = 1; + let caller_1 = test_public(msa_id); + let schema_id = PAGINATED_SCHEMA; + let page_id = 11; + let page: PaginatedPage = generate_page(None, None); + + let keys = (schema_id, page_id); + ::write( + &msa_id, + PALLET_STORAGE_PREFIX, + PAGINATED_STORAGE_PREFIX, + &keys, + &page, + ); + + assert_err!( + StatefulStoragePallet::delete_page( + RuntimeOrigin::signed(caller_1), + msa_id, + schema_id, + page_id, + 0u32, + ), + Error::::StalePageState + ); + }) +} + +#[test] +fn delete_existing_page_succeeds() { + new_test_ext().execute_with(|| { + // setup + let msa_id = 1; + let caller_1 = test_public(msa_id); + let schema_id = PAGINATED_SCHEMA; + let page_id = 11; + let page: PaginatedPage = generate_page(None, None); + let page_hash = page.get_hash(); + let keys = (schema_id, page_id); + + ::write( + &msa_id, + PALLET_STORAGE_PREFIX, + PAGINATED_STORAGE_PREFIX, + &keys, + &page, + ); + + assert_ok!(StatefulStoragePallet::delete_page( + RuntimeOrigin::signed(caller_1), + msa_id, + schema_id, + page_id, + page_hash + )); + + System::assert_last_event( + crate::Event::PaginatedPageDeleted { + msa_id, + schema_id, + page_id, + prev_content_hash: page_hash, + } + .into(), + ); + + let page: Option> = ::try_read( + &msa_id, + PALLET_STORAGE_PREFIX, + PAGINATED_STORAGE_PREFIX, + &keys, + ) + .unwrap(); + assert_eq!(page, None); + }) +} + +#[test] +fn delete_page_fails_for_append_only() { + new_test_ext().execute_with(|| { + // setup + let caller_1 = test_public(1); + let msa_id = 1; + let schema_id = PAGINATED_APPEND_ONLY_SCHEMA; + let page_id = 11; + let payload = generate_payload_bytes::(None); + let page: PaginatedPage = payload.clone().into(); + let page_hash = page.get_hash(); + + // assert + assert_ok!(StatefulStoragePallet::upsert_page( + RuntimeOrigin::signed(caller_1.clone()), + msa_id, + schema_id, + page_id, + NONEXISTENT_PAGE_HASH, + payload.into(), + )); + + assert_err!( + StatefulStoragePallet::delete_page( + RuntimeOrigin::signed(caller_1), + msa_id, + schema_id, + page_id, + page_hash + ), + Error::::UnsupportedOperationForSchema + ); + }); +} + +#[test] +fn delete_page_with_signature_v2_having_page_id_out_of_bounds_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let (_, pair) = get_signature_account(); + let delegator_key = pair.public(); + let schema_id = UNDELEGATED_PAGINATED_SCHEMA; + let page_id = (::MaxPaginatedPageId::get() + 1).into(); + let payload = PaginatedDeleteSignaturePayloadV2 { + target_hash: PageHash::default(), + expiration: 10, + schema_id, + page_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let owner_signature: MultiSignature = pair.sign(&encode_data_new_key_data).into(); + + // act + assert_err!( + StatefulStoragePallet::delete_page_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_signature, + payload + ), + Error::::PageIdExceedsMaxAllowed + ) + }) +} + +#[test] +fn delete_page_with_signature_v2_having_expired_payload_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let (_, pair) = get_signature_account(); + let delegator_key = pair.public(); + let schema_id = UNDELEGATED_PAGINATED_SCHEMA; + let page_id = 1; + let block_number = 10; + let payload = PaginatedDeleteSignaturePayloadV2 { + target_hash: PageHash::default(), + expiration: 10, + schema_id, + page_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let owner_signature: MultiSignature = pair.sign(&encode_data_new_key_data).into(); + + // act + System::set_block_number(block_number); + assert_err!( + StatefulStoragePallet::delete_page_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_signature, + payload + ), + Error::::ProofHasExpired + ) + }) +} + +#[test] +fn delete_page_with_signature_v2_having_out_of_window_payload_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let (_, pair) = get_signature_account(); + let delegator_key = pair.public(); + let schema_id = UNDELEGATED_PAGINATED_SCHEMA; + let page_id = 1; + let mortality_window: u32 = ::MortalityWindowSize::get(); + let payload = PaginatedDeleteSignaturePayloadV2 { + target_hash: PageHash::default(), + expiration: (mortality_window + 1).into(), + schema_id, + page_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let owner_signature: MultiSignature = pair.sign(&encode_data_new_key_data).into(); + + // act + assert_err!( + StatefulStoragePallet::delete_page_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_signature, + payload + ), + Error::::ProofNotYetValid + ) + }) +} + +#[test] +fn delete_page_with_signature_v2_having_wrong_signature_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let (_, pair) = get_signature_account(); + let delegator_key = pair.public(); + let (signature_key, _) = sr25519::Pair::generate(); + let schema_id = UNDELEGATED_PAGINATED_SCHEMA; + let page_id = 1; + let payload = PaginatedDeleteSignaturePayloadV2 { + target_hash: PageHash::default(), + expiration: 10, + schema_id, + page_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let owner_signature: MultiSignature = signature_key.sign(&encode_data_new_key_data).into(); + + // act + assert_err!( + StatefulStoragePallet::delete_page_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_signature, + payload + ), + Error::::InvalidSignature + ) + }) +} + +#[test] +fn delete_page_with_signature_v2_having_non_existing_msa_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let pair = get_invalid_msa_signature_account(); // hardcoded key that returns None Msa + let delegator_key = pair.public(); + let schema_id = UNDELEGATED_PAGINATED_SCHEMA; + let page_id = 1; + let payload = PaginatedDeleteSignaturePayloadV2 { + target_hash: PageHash::default(), + expiration: 10, + schema_id, + page_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let owner_signature: MultiSignature = pair.sign(&encode_data_new_key_data).into(); + + // act + assert_err!( + StatefulStoragePallet::delete_page_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_signature, + payload + ), + Error::::InvalidMessageSourceAccount + ) + }) +} + +#[test] +fn delete_page_with_signature_v2_having_invalid_schema_id_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let (_, pair) = get_signature_account(); + let delegator_key = pair.public(); + let schema_id = INVALID_SCHEMA_ID; + let page_id = 1; + let payload = PaginatedDeleteSignaturePayloadV2 { + target_hash: PageHash::default(), + expiration: 10, + schema_id, + page_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let owner_signature: MultiSignature = pair.sign(&encode_data_new_key_data).into(); + + // act + assert_err!( + StatefulStoragePallet::delete_page_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_signature, + payload + ), + Error::::InvalidSchemaId + ) + }) +} + +#[test] +fn delete_page_with_signature_v2_having_invalid_schema_location_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let (_, pair) = get_signature_account(); + let delegator_key = pair.public(); + let schema_id = ITEMIZED_SCHEMA; + let page_id = 1; + let payload = PaginatedDeleteSignaturePayloadV2 { + target_hash: PageHash::default(), + expiration: 10, + schema_id, + page_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let owner_signature: MultiSignature = pair.sign(&encode_data_new_key_data).into(); + + // act + assert_err!( + StatefulStoragePallet::delete_page_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_signature, + payload + ), + Error::::SchemaPayloadLocationMismatch + ) + }) +} + +#[test] +fn delete_page_with_signature_v2_having_invalid_hash_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let (msa_id, pair) = get_signature_account(); + let delegator_key = pair.public(); + let schema_id = PAGINATED_SCHEMA; + let page_id = 1; + let payload = generate_payload_bytes::(Some(100)); + assert_ok!(StatefulStoragePallet::upsert_page( + RuntimeOrigin::signed(caller_1.clone()), + msa_id, + schema_id, + page_id, + NONEXISTENT_PAGE_HASH, + payload.into(), + )); + + let payload = PaginatedDeleteSignaturePayloadV2 { + target_hash: PageHash::default(), + expiration: 10, + schema_id, + page_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let owner_signature: MultiSignature = pair.sign(&encode_data_new_key_data).into(); + + // act + assert_err!( + StatefulStoragePallet::delete_page_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_signature, + payload + ), + Error::::StalePageState + ) + }) +} + +#[test] +fn delete_page_with_signature_v2_with_non_existing_page_should_noop() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let (_, pair) = get_signature_account(); + let delegator_key = pair.public(); + let schema_id = PAGINATED_SCHEMA; + let page_id = 1; + let payload = PaginatedDeleteSignaturePayloadV2 { + target_hash: PageHash::default(), + expiration: 10, + schema_id, + page_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let owner_signature: MultiSignature = pair.sign(&encode_data_new_key_data).into(); + + // act + assert_storage_noop!(assert_eq!( + StatefulStoragePallet::delete_page_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_signature, + payload + ), + Ok(()) + )); + }) +} + +#[test] +fn delete_page_with_signature_v2_having_valid_inputs_should_remove_page() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let (msa_id, pair) = get_signature_account(); + let delegator_key = pair.public(); + let schema_id = PAGINATED_SCHEMA; + let page_id = 1; + let page = generate_page::(Some(1), Some(100)); + ::write( + &msa_id, + PALLET_STORAGE_PREFIX, + PAGINATED_STORAGE_PREFIX, + &(schema_id, page_id), + &page, + ); + + let payload = PaginatedDeleteSignaturePayloadV2 { + target_hash: page.get_hash(), + expiration: 10, + schema_id, + page_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let owner_signature: MultiSignature = pair.sign(&encode_data_new_key_data).into(); + + // act + assert_ok!(StatefulStoragePallet::delete_page_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_signature, + payload + )); + + // assert + let removed_page: Option> = + StatefulChildTree::<::KeyHasher>::try_read( + &msa_id, + PALLET_STORAGE_PREFIX, + PAGINATED_STORAGE_PREFIX, + &(schema_id, page_id), + ) + .unwrap(); + assert!(removed_page.is_none()); + System::assert_last_event( + StatefulEvent::PaginatedPageDeleted { + msa_id, + schema_id, + page_id, + prev_content_hash: page.get_hash(), + } + .into(), + ); + }) +} + +#[test] +fn delete_page_on_signature_schema_fails_for_non_owner() { + new_test_ext().execute_with(|| { + // arrange + // Note: normal use case for this test would be called by a delegate; + // we don't bother setting up the delegation because the call should fail + // before we check the delegation, as long as the owner_msa_id != caller_msa_id + let (caller_msa_id, caller_keys) = get_signature_account(); + let owner_msa_id = caller_msa_id.saturating_add(1); + let caller_1: AccountId32 = caller_keys.public().into(); + let schema_id = PAGINATED_SIGNED_SCHEMA; + let page_id = 1; + let page = generate_page::(Some(1), Some(100)); + ::write( + &owner_msa_id, + PALLET_STORAGE_PREFIX, + PAGINATED_STORAGE_PREFIX, + &(schema_id, page_id), + &page, + ); + assert_err!( + StatefulStoragePallet::delete_page( + RuntimeOrigin::signed(caller_1), + owner_msa_id, + schema_id, + page_id, + page.get_hash() + ), + Error::::UnsupportedOperationForSchema + ); + }); +} + +#[test] +fn delete_page_on_signature_schema_succeeds_for_owner() { + new_test_ext().execute_with(|| { + // arrange + let (msa_id, caller_keys) = get_signature_account(); + let caller_1: AccountId32 = caller_keys.public().into(); + let schema_id = PAGINATED_SIGNED_SCHEMA; + let page_id = 1; + let page = generate_page::(Some(1), Some(100)); + ::write( + &msa_id, + PALLET_STORAGE_PREFIX, + PAGINATED_STORAGE_PREFIX, + &(schema_id, page_id), + &page, + ); + assert_ok!(StatefulStoragePallet::delete_page( + RuntimeOrigin::signed(caller_1), + msa_id, + schema_id, + page_id, + page.get_hash() + )); + }); +} diff --git a/pallets/stateful-storage/src/tests/itemized_operations_tests.rs b/pallets/stateful-storage/src/tests/itemized_operations_tests.rs new file mode 100644 index 0000000000..bec9a7db4b --- /dev/null +++ b/pallets/stateful-storage/src/tests/itemized_operations_tests.rs @@ -0,0 +1,134 @@ +use crate::{test_common::test_utility::*, tests::mock::*, types::*, Config}; +use common_primitives::stateful_storage::PageNonce; +use frame_support::{assert_ok, traits::Len}; +use parity_scale_codec::{Encode, MaxEncodedLen}; +#[allow(unused_imports)] +use pretty_assertions::{assert_eq, assert_ne, assert_str_eq}; + +#[test] +fn parsing_a_well_formed_item_page_should_work() { + // arrange + let payloads = vec![ + generate_payload_bytes::(Some(1)), + generate_payload_bytes::(Some(2)), + ]; + let page = create_itemized_page_from::(None, &payloads); + + // act + let parsed = ItemizedOperations::::try_parse(&page, true); + + // assert + assert_ok!(&parsed); + assert_eq!( + parsed.as_ref().unwrap().page_size, + payloads.len() * ItemHeader::max_encoded_len() + + payloads.iter().map(|p| p.len()).sum::() + ); + + let items = parsed.unwrap().items; + for index in 0..payloads.len() { + assert_eq!( + items.get(&(index as u16)).unwrap()[ItemHeader::max_encoded_len()..], + payloads[index][..] + ); + } +} + +#[test] +fn parsing_item_with_wrong_payload_size_should_return_parsing_error() { + // arrange + let payload = generate_payload_bytes::(Some(1)); + let mut buffer: Vec = vec![]; + buffer.extend_from_slice(&ItemHeader { payload_len: (payload.len() + 1) as u16 }.encode()[..]); + buffer.extend_from_slice(&payload); + let page: ItemizedPage = ItemizedPage::::try_from(buffer).unwrap(); + + // act + let parsed = ItemizedOperations::::try_parse(&page, true); + + // assert + assert_eq!(parsed, Err(PageError::ErrorParsing("wrong payload size"))); +} + +#[test] +fn applying_delete_action_with_existing_index_should_delete_item() { + // arrange + let payloads = vec![ + generate_payload_bytes::(Some(2)), + generate_payload_bytes::(Some(4)), + ]; + let page = create_itemized_page_from::(None, payloads.as_slice()); + let expecting_page = create_itemized_page_from::(None, &payloads[1..]); + let actions = vec![ItemAction::Delete { index: 0 }]; + + // act + let result = ItemizedOperations::::apply_item_actions(&page, &actions); + + // assert + assert_ok!(&result); + let updated = result.unwrap(); + assert_eq!(expecting_page.data, updated.data); +} + +#[test] +fn applying_add_action_should_add_item_to_the_end_of_the_page() { + // arrange + let payload1 = + vec![generate_payload_bytes::<::MaxItemizedBlobSizeBytes>(Some(2))]; + let page = create_itemized_page_from::(None, payload1.as_slice()); + let payload2 = + vec![generate_payload_bytes::<::MaxItemizedBlobSizeBytes>(Some(4))]; + let expecting_page = create_itemized_page_from::( + None, + &vec![payload1[0].clone(), payload2[0].clone()][..], + ); + let actions = vec![ItemAction::Add { data: payload2[0].clone().into() }]; + + // act + let result = ItemizedOperations::::apply_item_actions(&page, &actions[..]); + + // assert + assert_ok!(&result); + let updated = result.unwrap(); + assert_eq!(expecting_page.data, updated.data); +} + +#[test] +fn applying_delete_action_with_non_existing_index_should_fail() { + // arrange + let payloads = vec![ + generate_payload_bytes::(Some(2)), + generate_payload_bytes::(Some(4)), + ]; + let page = create_itemized_page_from::(None, payloads.as_slice()); + let actions = vec![ItemAction::Delete { index: 2 }]; + + // act + let result = ItemizedOperations::::apply_item_actions(&page, &actions[..]); + + // assert + assert_eq!(result.is_err(), true); +} + +#[test] +fn applying_add_action_with_full_page_should_fail() { + // arrange + let payload: Vec = vec![1u8; ItemizedBlobSize::get() as usize]; + let size_to_fill = (::MaxItemizedPageSizeBytes::get() as usize) - + core::mem::size_of::(); + let mut item_buffer = Vec::::with_capacity(size_to_fill); + while (size_to_fill as i32).saturating_sub(item_buffer.len().try_into().unwrap()) > + ItemizedBlobSize::get().try_into().unwrap() + { + add_itemized_payload_to_buffer::(&mut item_buffer, &payload.as_slice()); + } + let page: ItemizedPage = + ItemizedPage:: { nonce: 0, data: item_buffer.try_into().unwrap() }; + let actions = vec![ItemAction::Add { data: payload.try_into().unwrap() }]; + + // act + let result = ItemizedOperations::::apply_item_actions(&page, &actions[..]); + + // assert + assert_eq!(result, Err(PageError::PageSizeOverflow)); +} diff --git a/pallets/stateful-storage/src/tests/mock.rs b/pallets/stateful-storage/src/tests/mock.rs new file mode 100644 index 0000000000..f2f8018f49 --- /dev/null +++ b/pallets/stateful-storage/src/tests/mock.rs @@ -0,0 +1,411 @@ +use crate as pallet_stateful_storage; +use parity_scale_codec::Decode; + +use crate::test_common::{ + constants, + constants::{BENCHMARK_SIGNATURE_ACCOUNT_SEED, SIGNATURE_MSA_ID}, +}; +use common_primitives::{ + msa::{ + Delegation, DelegationValidator, DelegatorId, MessageSourceId, MsaLookup, MsaValidator, + ProviderId, ProviderLookup, SchemaGrantValidator, + }, + node::AccountId, + schema::{ + ModelType, PayloadLocation, SchemaId, SchemaInfoResponse, SchemaProvider, SchemaResponse, + SchemaSetting, + }, +}; +use common_runtime::weights::rocksdb_weights::constants::RocksDbWeight; +use frame_support::{ + dispatch::DispatchResult, + parameter_types, + traits::{ConstU16, ConstU32}, + Twox128, +}; +use frame_system as system; +use sp_core::{crypto::AccountId32, sr25519, ByteArray, Pair, H256}; +use sp_runtime::{ + traits::{BlakeTwo256, ConvertInto, IdentityLookup}, + BuildStorage, DispatchError, +}; + +type Block = frame_system::mocking::MockBlockU32; + +pub const INVALID_SCHEMA_ID: SchemaId = SchemaId::MAX; +pub const INVALID_MSA_ID: MessageSourceId = 100_000_000; +pub const TEST_ACCOUNT_SEED: [u8; 32] = [0; 32]; + +// Configure a mock runtime to test the pallet. +frame_support::construct_runtime!( + pub enum Test + { + System: frame_system::{Pallet, Call, Config, Storage, Event}, + StatefulStoragePallet: pallet_stateful_storage::{Pallet, Call, Storage, Event}, + } +); + +impl system::Config for Test { + type BaseCallFilter = frame_support::traits::Everything; + type BlockWeights = (); + type BlockLength = (); + type DbWeight = RocksDbWeight; + type RuntimeOrigin = RuntimeOrigin; + type RuntimeCall = RuntimeCall; + type Nonce = u64; + type Block = Block; + type Hash = H256; + type Hashing = BlakeTwo256; + type AccountId = AccountId; + type Lookup = IdentityLookup; + type RuntimeTask = RuntimeTask; + type RuntimeEvent = RuntimeEvent; + type BlockHashCount = ConstU32<250>; + type Version = (); + type PalletInfo = PalletInfo; + type AccountData = (); + type OnNewAccount = (); + type OnKilledAccount = (); + type SystemWeightInfo = (); + type SS58Prefix = ConstU16<42>; + type OnSetCode = (); + type MaxConsumers = frame_support::traits::ConstU32<16>; + type SingleBlockMigrations = (); + type MultiBlockMigrator = (); + type PreInherents = (); + type PostInherents = (); + type PostTransactions = (); + type ExtensionsWeightInfo = (); +} + +pub type MaxItemizedActionsCount = ConstU32<6>; +pub type MaxSchemaGrantsPerDelegation = ConstU32<30>; +pub type StatefulMortalityWindowSize = ConstU32<10>; + +// Needs parameter_types! for the impls below +parameter_types! { + pub const MaxItemizedPageSizeBytes: u32 = 1024; + pub const MaxItemizedBlobSizeBytes: u32 = 64; + pub const MaxPaginatedPageSizeBytes: u32 = 1024; + pub const MaxPaginatedPageId: u16 = 32; +} + +impl Default for MaxItemizedPageSizeBytes { + fn default() -> Self { + Self + } +} + +impl Default for MaxPaginatedPageSizeBytes { + fn default() -> Self { + Self + } +} + +pub struct MsaInfoHandler; +pub struct DelegationInfoHandler; +pub struct SchemaGrantValidationHandler; +impl MsaLookup for MsaInfoHandler { + type AccountId = AccountId; + + fn get_msa_id(key: &AccountId) -> Option { + if *key == test_public(INVALID_MSA_ID) || + *key == get_invalid_msa_signature_account().public().into() + { + return None + } + + if *key == get_signature_benchmarks_public_account().into() || + *key == get_signature_account().1.public().into() + { + return Some(constants::SIGNATURE_MSA_ID) + } + + Some(MessageSourceId::decode(&mut key.as_slice()).unwrap()) + } +} + +impl MsaValidator for MsaInfoHandler { + type AccountId = AccountId; + + fn ensure_valid_msa_key(key: &Self::AccountId) -> Result { + if *key == test_public(INVALID_MSA_ID) || + *key == get_invalid_msa_signature_account().public().into() + { + return Err(DispatchError::Other("some error")) + } + + if *key == get_signature_benchmarks_public_account().into() || + *key == get_signature_account().1.public().into() + { + return Ok(constants::SIGNATURE_MSA_ID) + } + + Ok(MessageSourceId::decode(&mut key.as_slice()).unwrap()) + } +} + +impl ProviderLookup for DelegationInfoHandler { + type BlockNumber = u32; + type MaxSchemaGrantsPerDelegation = MaxSchemaGrantsPerDelegation; + type SchemaId = SchemaId; + + fn get_delegation_of( + _delegator: DelegatorId, + provider: ProviderId, + ) -> Option> { + if provider == ProviderId(2000) { + return None + }; + Some(Delegation { revoked_at: 100, schema_permissions: Default::default() }) + } +} +impl DelegationValidator for DelegationInfoHandler { + type BlockNumber = u32; + type MaxSchemaGrantsPerDelegation = MaxSchemaGrantsPerDelegation; + type SchemaId = SchemaId; + + fn ensure_valid_delegation( + provider: ProviderId, + _delegator: DelegatorId, + _block_number: Option, + ) -> Result< + Delegation, + DispatchError, + > { + if provider == ProviderId(2000) { + return Err(DispatchError::Other("some delegation error")) + }; + + Ok(Delegation { schema_permissions: Default::default(), revoked_at: Default::default() }) + } +} +impl SchemaGrantValidator for SchemaGrantValidationHandler { + fn ensure_valid_schema_grant( + provider: ProviderId, + delegator: DelegatorId, + schema_id: SchemaId, + _block_number: BlockNumber, + ) -> DispatchResult { + if schema_id == constants::UNDELEGATED_PAGINATED_SCHEMA || + schema_id == constants::UNDELEGATED_ITEMIZED_APPEND_ONLY_SCHEMA || + schema_id == constants::UNDELEGATED_ITEMIZED_SCHEMA + { + return Err(DispatchError::Other("no schema grant or delegation")) + } + + match DelegationInfoHandler::get_delegation_of(delegator, provider) { + Some(_) => Ok(()), + None => Err(DispatchError::Other("no schema grant or delegation")), + } + } +} + +pub struct SchemaHandler; +impl SchemaProvider for SchemaHandler { + // For testing/benchmarking. Zero value returns None, Odd for Itemized, Even for Paginated + fn get_schema_by_id(schema_id: SchemaId) -> Option { + match schema_id { + constants::ITEMIZED_SCHEMA | constants::UNDELEGATED_ITEMIZED_SCHEMA => + Some(SchemaResponse { + schema_id, + model: r#"schema"#.to_string().as_bytes().to_vec(), + model_type: ModelType::AvroBinary, + payload_location: PayloadLocation::Itemized, + settings: Vec::new(), + }), + constants::ITEMIZED_APPEND_ONLY_SCHEMA | + constants::UNDELEGATED_ITEMIZED_APPEND_ONLY_SCHEMA => Some(SchemaResponse { + schema_id, + model: r#"schema"#.to_string().as_bytes().to_vec(), + model_type: ModelType::AvroBinary, + payload_location: PayloadLocation::Itemized, + settings: Vec::try_from(vec![SchemaSetting::AppendOnly]).unwrap(), + }), + constants::ITEMIZED_SIGNATURE_REQUIRED_SCHEMA => Some(SchemaResponse { + schema_id, + model: r#"schema"#.to_string().as_bytes().to_vec(), + model_type: ModelType::AvroBinary, + payload_location: PayloadLocation::Itemized, + settings: Vec::try_from(vec![SchemaSetting::SignatureRequired]).unwrap(), + }), + constants::PAGINATED_SCHEMA | constants::UNDELEGATED_PAGINATED_SCHEMA => + Some(SchemaResponse { + schema_id, + model: r#"schema"#.to_string().as_bytes().to_vec(), + model_type: ModelType::AvroBinary, + payload_location: PayloadLocation::Paginated, + settings: Vec::new(), + }), + constants::PAGINATED_SIGNED_SCHEMA => Some(SchemaResponse { + schema_id, + model: r#"schema"#.to_string().as_bytes().to_vec(), + model_type: ModelType::AvroBinary, + payload_location: PayloadLocation::Paginated, + settings: Vec::try_from(vec![SchemaSetting::SignatureRequired]).unwrap(), + }), + constants::PAGINATED_APPEND_ONLY_SCHEMA => Some(SchemaResponse { + schema_id, + model: r#"schema"#.to_string().as_bytes().to_vec(), + model_type: ModelType::AvroBinary, + payload_location: PayloadLocation::Paginated, + settings: Vec::try_from(vec![SchemaSetting::AppendOnly]).unwrap(), + }), + INVALID_SCHEMA_ID => None, + + _ => Some(SchemaResponse { + schema_id, + model: r#"schema"#.to_string().as_bytes().to_vec(), + model_type: ModelType::AvroBinary, + payload_location: PayloadLocation::OnChain, + settings: Vec::from(vec![SchemaSetting::AppendOnly]), + }), + } + } + + fn get_schema_info_by_id(schema_id: SchemaId) -> Option { + Self::get_schema_by_id(schema_id).and_then(|schema| { + Some(SchemaInfoResponse { + schema_id: schema.schema_id, + settings: schema.settings, + model_type: schema.model_type, + payload_location: schema.payload_location, + }) + }) + } +} + +impl Clone for MaxPaginatedPageId { + fn clone(&self) -> Self { + MaxPaginatedPageId {} + } +} + +impl PartialEq for MaxPaginatedPageId { + fn eq(&self, _other: &Self) -> bool { + true + } +} + +impl core::fmt::Debug for MaxPaginatedPageId { + fn fmt(&self, _: &mut core::fmt::Formatter) -> core::fmt::Result { + Ok(()) + } +} + +impl Clone for MaxItemizedPageSizeBytes { + fn clone(&self) -> Self { + MaxItemizedPageSizeBytes {} + } +} + +impl PartialEq for MaxItemizedPageSizeBytes { + fn eq(&self, _other: &Self) -> bool { + true + } +} + +impl core::fmt::Debug for MaxItemizedPageSizeBytes { + fn fmt(&self, _: &mut core::fmt::Formatter) -> core::fmt::Result { + Ok(()) + } +} + +impl Clone for MaxPaginatedPageSizeBytes { + fn clone(&self) -> Self { + MaxPaginatedPageSizeBytes {} + } +} + +impl PartialEq for MaxPaginatedPageSizeBytes { + fn eq(&self, _other: &Self) -> bool { + true + } +} + +impl core::fmt::Debug for MaxPaginatedPageSizeBytes { + fn fmt(&self, _: &mut core::fmt::Formatter) -> core::fmt::Result { + Ok(()) + } +} + +impl Clone for MaxItemizedBlobSizeBytes { + fn clone(&self) -> Self { + MaxItemizedBlobSizeBytes {} + } +} + +impl PartialEq for MaxItemizedBlobSizeBytes { + fn eq(&self, _other: &Self) -> bool { + true + } +} + +impl core::fmt::Debug for MaxItemizedBlobSizeBytes { + fn fmt(&self, _: &mut core::fmt::Formatter) -> core::fmt::Result { + Ok(()) + } +} + +impl pallet_stateful_storage::Config for Test { + type RuntimeEvent = RuntimeEvent; + type MsaInfoProvider = MsaInfoHandler; + type SchemaGrantValidator = SchemaGrantValidationHandler; + type SchemaProvider = SchemaHandler; + type WeightInfo = (); + type MaxItemizedBlobSizeBytes = MaxItemizedBlobSizeBytes; + type MaxPaginatedPageId = MaxPaginatedPageId; + type MaxItemizedPageSizeBytes = MaxItemizedPageSizeBytes; + type MaxPaginatedPageSizeBytes = MaxPaginatedPageSizeBytes; + type MaxItemizedActionsCount = MaxItemizedActionsCount; + /// A set of helper functions for benchmarking. + #[cfg(feature = "runtime-benchmarks")] + type MsaBenchmarkHelper = (); + #[cfg(feature = "runtime-benchmarks")] + type SchemaBenchmarkHelper = (); + type KeyHasher = Twox128; + /// The conversion to a 32 byte AccountId + type ConvertIntoAccountId32 = ConvertInto; + /// The number of blocks per virtual bucket + type MortalityWindowSize = StatefulMortalityWindowSize; +} + +pub fn new_test_ext() -> sp_io::TestExternalities { + let t = system::GenesisConfig::::default().build_storage().unwrap(); + let mut ext = sp_io::TestExternalities::new(t); + ext.execute_with(|| System::set_block_number(1)); + ext +} + +pub fn get_signature_account() -> (MessageSourceId, sr25519::Pair) { + (SIGNATURE_MSA_ID, sr25519::Pair::from_seed_slice(TEST_ACCOUNT_SEED.as_slice()).unwrap()) +} + +pub fn get_invalid_msa_signature_account() -> sr25519::Pair { + sr25519::Pair::from_seed_slice([1; 32].as_slice()).unwrap() +} + +fn get_signature_benchmarks_public_account() -> sr25519::Public { + sr25519::Pair::from_string(BENCHMARK_SIGNATURE_ACCOUNT_SEED, None) + .unwrap() + .public() +} + +pub fn test_public(n: MessageSourceId) -> AccountId32 { + let mut array = [0u8; 32]; + array[0..8].copy_from_slice(&n.to_le_bytes()); + AccountId32::new(array) +} + +#[cfg(feature = "runtime-benchmarks")] +pub fn new_test_ext_keystore() -> sp_io::TestExternalities { + use sp_keystore::{testing::MemoryKeystore, KeystoreExt, KeystorePtr}; + extern crate alloc; + use alloc::sync::Arc; + + let t = frame_system::GenesisConfig::::default().build_storage().unwrap(); + let mut ext = sp_io::TestExternalities::new(t); + ext.register_extension(KeystoreExt(Arc::new(MemoryKeystore::new()) as KeystorePtr)); + + ext +} diff --git a/pallets/stateful-storage/src/tests/mod.rs b/pallets/stateful-storage/src/tests/mod.rs new file mode 100644 index 0000000000..333aa74e56 --- /dev/null +++ b/pallets/stateful-storage/src/tests/mod.rs @@ -0,0 +1,8 @@ +pub mod mock; + +mod apply_item_actions_tests; +mod child_tree_tests; +mod delete_page_tests; +mod itemized_operations_tests; +mod other_tests; +mod upsert_page_tests; diff --git a/pallets/stateful-storage/src/tests/other_tests.rs b/pallets/stateful-storage/src/tests/other_tests.rs new file mode 100644 index 0000000000..ae28c84320 --- /dev/null +++ b/pallets/stateful-storage/src/tests/other_tests.rs @@ -0,0 +1,267 @@ +use crate::{ + stateful_child_tree::StatefulChildTree, + test_common::{constants::*, test_utility::*}, + tests::mock::*, + types::*, + Config, Error, +}; +use common_primitives::{ + node::EIP712Encode, + signatures::{UnifiedSignature, UnifiedSigner}, + utils::wrap_binary_data, +}; +use frame_support::{assert_err, assert_ok}; +use parity_scale_codec::Encode; +#[allow(unused_imports)] +use pretty_assertions::{assert_eq, assert_ne, assert_str_eq}; +use sp_core::{bytes::from_hex, ecdsa, Pair}; +use sp_runtime::{ + traits::{IdentifyAccount, Verify}, + MultiSignature, +}; + +#[test] +fn is_empty_false_for_non_empty_page() { + let page: ItemizedPage = + create_itemized_page_from::(None, &[generate_payload_bytes(None)]); + + assert_eq!(page.is_empty(), false); +} + +#[test] +fn is_empty_true_for_empty_page() { + let page: ItemizedPage = create_itemized_page_from::(None, &[]); + + assert_eq!(page.is_empty(), true); +} + +#[test] +fn signature_v2_replay_on_existing_page_errors() { + new_test_ext().execute_with(|| { + // Setup + let caller_1 = test_public(1); + let (msa_id, pair) = get_signature_account(); + let delegator_key = pair.public(); + let schema_id = PAGINATED_SCHEMA; + let page_id = 1; + let keys = (schema_id, page_id); + let page_a: PaginatedPage = generate_page(Some(1), Some(1)); + let page_b: PaginatedPage = generate_page(Some(2), Some(2)); + let payload_a_to_b = PaginatedUpsertSignaturePayloadV2 { + expiration: 10, + schema_id, + page_id, + target_hash: page_a.get_hash(), + payload: page_b.data.clone(), + }; + + // Set up initial state A + ::write( + &msa_id, + PALLET_STORAGE_PREFIX, + PAGINATED_STORAGE_PREFIX, + &keys, + &page_a, + ); + + // Make sure we successfully apply state transition A -> B + let encoded_payload = wrap_binary_data(payload_a_to_b.encode()); + let owner_a_to_b_signature: MultiSignature = pair.sign(&encoded_payload).into(); + assert_ok!(StatefulStoragePallet::upsert_page_with_signature_v2( + RuntimeOrigin::signed(caller_1.clone()), + delegator_key.into(), + owner_a_to_b_signature.clone(), + payload_a_to_b.clone() + )); + + // Read back page state & get hash + let current_page: PaginatedPage = + StatefulChildTree::<::KeyHasher>::try_read( + &msa_id, + PALLET_STORAGE_PREFIX, + PAGINATED_STORAGE_PREFIX, + &keys, + ) + .unwrap() + .expect("no page read"); + + // Make sure we successfully apply state transition B -> A + assert_ok!(StatefulStoragePallet::upsert_page( + RuntimeOrigin::signed(caller_1.clone()), + msa_id, + schema_id, + page_id, + current_page.get_hash(), + page_a.data + )); + + // Signature replay A -> B should fail + assert_err!( + StatefulStoragePallet::upsert_page_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_a_to_b_signature, + payload_a_to_b + ), + Error::::StalePageState + ); + }) +} + +// NOTE: This is a known issue. When it's fixed, this test will start failing & we can change the test assertion. +#[test] +fn signature_v2_replay_on_deleted_page_check() { + new_test_ext().execute_with(|| { + // Setup + let caller_1 = test_public(1); + let (msa_id, pair) = get_signature_account(); + let delegator_key = pair.public(); + let schema_id = PAGINATED_SCHEMA; + let page_id = 1; + let keys = (schema_id, page_id); + let page_a: PaginatedPage = generate_page(Some(1), Some(1)); + let payload_null_to_a = PaginatedUpsertSignaturePayloadV2 { + expiration: 10, + schema_id, + page_id, + target_hash: NONEXISTENT_PAGE_HASH, + payload: page_a.data.clone(), + }; + + // Make sure we successfully apply state transition Null -> A + let encoded_payload = wrap_binary_data(payload_null_to_a.encode()); + let owner_null_to_a_signature: MultiSignature = pair.sign(&encoded_payload).into(); + assert_ok!(StatefulStoragePallet::upsert_page_with_signature_v2( + RuntimeOrigin::signed(caller_1.clone()), + delegator_key.into(), + owner_null_to_a_signature.clone(), + payload_null_to_a.clone() + )); + + // Read back page state & get hash + let current_page: PaginatedPage = + StatefulChildTree::<::KeyHasher>::try_read( + &msa_id, + PALLET_STORAGE_PREFIX, + PAGINATED_STORAGE_PREFIX, + &keys, + ) + .unwrap() + .expect("no page read"); + + // Make sure we successfully delete the page + assert_ok!(StatefulStoragePallet::delete_page( + RuntimeOrigin::signed(caller_1.clone()), + msa_id, + schema_id, + page_id, + current_page.get_hash(), + )); + + // Signature replay A -> B (change assertion when this vulnerability is fixed) + assert_ok!(StatefulStoragePallet::upsert_page_with_signature_v2( + RuntimeOrigin::signed(caller_1.clone()), + delegator_key.into(), + owner_null_to_a_signature, + payload_null_to_a + )); + }) +} + +#[test] +fn ethereum_eip712_signatures_for_paginated_delete_signature_should_work() { + new_test_ext().execute_with(|| { + let payload: PaginatedDeleteSignaturePayloadV2 = PaginatedDeleteSignaturePayloadV2 { + schema_id: 10, + page_id: 5, + target_hash: 1982672367, + expiration: 100, + }; + let encoded_payload = payload.encode_eip_712(); + + // following signature is generated via Metamask using the same input to check compatibility + let signature_raw = from_hex("0xd6f327427488e9f03bda92113a9d1c2e881bc3e8d1d6a065b727c154733983b3059ad4fa5cf28cdf1aae9e0faa3fde6427f92686cf55c3a12180610cb3effe371b").expect("Should convert"); + let unified_signature = UnifiedSignature::from(ecdsa::Signature::from_raw( + signature_raw.try_into().expect("should convert"), + )); + + // Non-compressed public key associated with the keypair used in Metamask + // 0x509540919faacf9ab52146c9aa40db68172d83777250b28e4679176e49ccdd9fa213197dc0666e85529d6c9dda579c1295d61c417f01505765481e89a4016f02 + let public_key = ecdsa::Public::from_raw( + from_hex("0x02509540919faacf9ab52146c9aa40db68172d83777250b28e4679176e49ccdd9f") + .expect("should convert") + .try_into() + .expect("invalid size"), + ); + let unified_signer = UnifiedSigner::from(public_key); + assert!(unified_signature.verify(&encoded_payload[..], &unified_signer.into_account())); + }); +} + +#[test] +fn ethereum_eip712_signatures_for_paginated_upsert_signature_should_work() { + new_test_ext().execute_with(|| { + let payload: PaginatedUpsertSignaturePayloadV2 = PaginatedUpsertSignaturePayloadV2 { + schema_id: 10, + page_id: 5, + target_hash: 1982672367, + expiration: 100, + payload: from_hex("0x0000f20f0efece05af6bee4fe6b24db6febe6988d24f62015e23d1f1ce9b7040301a8a3cefc00c1162067f70d004ed86588cd6183b3564b9d92e9924cba2244a9e9f85e334e1b8bb5e8f770a81866c4c406cfadaef2a8f93bf8b89a5f4efce86a3cfc1ff4d93a8d362d630bf16ac5766de75c5fef57af69b147cb629ad8c1359691c9ab6f5380527e3c18d71b0480747a9628693b86473f1e7f01abe5bb7eadb76fad361669241e74bffed13b49e5c7dd08a8d3a7722bcbfad494627256c7e77f2c9b2b596a5f468a82e06f5905d13707355e2dd77d9b9480ec959a7f870b68fce122ddad81e06fe4dec48e01206df9e6e3a4e0d928b722220ec199d22324fb2ce6a8b6581175476d940bd499435091c0b0b3d0303e3bf60732ff8e898223a39aa8623cf33a1623af2cfc8d6fc83f4b53ed32ef4fdab29035150d9dc3b7e60ac91fb1fbb6895a007913fee3940c8f8e3ececcf50b3076b65c62f8bd8c039f90182d89bf4c0a2f426e957a8732a9936f8a0aab8b3c18183eb605f5a0bac859eb7d6d88eea4c02444116a6dec0a790d83abce10de20bb29c3f980864eb23f555422ff36421e14df39bb53606cbb4dda195c321ce4fa4fc7143ac267ae811b6949d51f521ddaf08a3663dd3a1eb2b783b31dcbfc830f6f542499857767c39fb85a29ebf175e0f0877e89a9e564307a7d7eb9d1f8401f0a65382cfc051fa5d34829381f624e2a556e2c3002eea63e50ad8463bf8ac6096249983f8d1925c0d9392e67203be98daae7305b52962b95fbeca76c7db2ceec6208d21efb68350aedec3a48cba0c9112c93efb98d363dfa26471b163b05d1655f0af7d867fd25dcc4d5e1a5cb3934586ba7a418f489439f3f551c1017bde009dba49dbc132c7066eecea25e2e231491f136a1fe9a83f0f1091c7e9b2cf8d24541fe21af50a46e6537f80ed2065da8842b928cb27ec23169c129863d5540f05a4dac070f3c834cfe998503f4a42a7ae4e2b1ef694e7600027e48721560d8d66a46c5ac7899d71985c7ccb60d4225cd08307c497138b6cbb00803cf9be1251798c6ddd8c972f78455a43acc7bf6278dda25946dc8638c20042ba333ee6e6da605bb05b1d01c5715c1723a2d6147eca637f6a7f50b807476e482c29769e1b94b43ac7b1921e99c60c795cf034a706c28befbcbe448f926ca212eb4607157dd9dd30c89b9a885202789b2ac9a6e030c1d87d5341c59b64105a88caa13cdcc42bbdda752169234e39d94f6aadcfdd99e80e9eb3a10ea5a80ba4825370ad9935d5b8cda568d2c7db63a8e016cb78bd0d657f5d1f6916fb48a3678d973dc8835a49f5e2a0ff07698c360492f568def07397129d290a86cefd0524c826b73e85c48a8e525aafe77bd0c1e9a0c2a4a4ea96343adfe81fad9ef12200ed90c6c476906d710e16d3af77a4e18164").unwrap().try_into().unwrap() + }; + let encoded_payload = payload.encode_eip_712(); + + // following signature is generated via Metamask using the same input to check compatibility + let signature_raw = from_hex("0xbb182602012c1489a6b98af9d867d7c2c0ef111a1a20653a028e49d4ec60e2a64e4983270c6d9de76eaed3283a3f34a5829920e057b77bed6861b2616c22be381b").expect("Should convert"); + let unified_signature = UnifiedSignature::from(ecdsa::Signature::from_raw( + signature_raw.try_into().expect("should convert"), + )); + + // Non-compressed public key associated with the keypair used in Metamask + // 0x509540919faacf9ab52146c9aa40db68172d83777250b28e4679176e49ccdd9fa213197dc0666e85529d6c9dda579c1295d61c417f01505765481e89a4016f02 + let public_key = ecdsa::Public::from_raw( + from_hex("0x02509540919faacf9ab52146c9aa40db68172d83777250b28e4679176e49ccdd9f") + .expect("should convert") + .try_into() + .expect("invalid size"), + ); + let unified_signer = UnifiedSigner::from(public_key); + assert!(unified_signature.verify(&encoded_payload[..], &unified_signer.into_account())); + }); +} + +#[test] +fn ethereum_eip712_signatures_for_itemized_signature_should_work() { + new_test_ext().execute_with(|| { + let payload: ItemizedSignaturePayloadV2 = ItemizedSignaturePayloadV2 { + schema_id: 10, + target_hash: 1982672367, + expiration: 100, + actions: vec![ + ItemAction::Add { + data: from_hex("0x40a6836ea489047852d3f0297f8fe8ad6779793af4e9c6274c230c207b9b825026").unwrap().try_into().unwrap() + }, + ItemAction::Delete { + index: 2 + } + ].try_into().unwrap() + }; + let encoded_payload = payload.encode_eip_712(); + + // following signature is generated via Metamask using the same input to check compatibility + let signature_raw = from_hex("0xc6c38093c57cd605ca5adfe5d538be89c7bbea4309c797078ed23fe4bb6ad8cb245ae12b19bb9c9b8c084b356b02f6f09f7e107c262c1aff0714a681bc3af5b51b").expect("Should convert"); + let unified_signature = UnifiedSignature::from(ecdsa::Signature::from_raw( + signature_raw.try_into().expect("should convert"), + )); + + // Non-compressed public key associated with the keypair used in Metamask + // 0x509540919faacf9ab52146c9aa40db68172d83777250b28e4679176e49ccdd9fa213197dc0666e85529d6c9dda579c1295d61c417f01505765481e89a4016f02 + let public_key = ecdsa::Public::from_raw( + from_hex("0x02509540919faacf9ab52146c9aa40db68172d83777250b28e4679176e49ccdd9f") + .expect("should convert") + .try_into() + .expect("invalid size"), + ); + let unified_signer = UnifiedSigner::from(public_key); + assert!(unified_signature.verify(&encoded_payload[..], &unified_signer.into_account())); + }); +} diff --git a/pallets/stateful-storage/src/tests/upsert_page_tests.rs b/pallets/stateful-storage/src/tests/upsert_page_tests.rs new file mode 100644 index 0000000000..8252ed34be --- /dev/null +++ b/pallets/stateful-storage/src/tests/upsert_page_tests.rs @@ -0,0 +1,667 @@ +use crate::{ + stateful_child_tree::StatefulChildTree, + test_common::{constants::*, test_utility::*}, + tests::mock::*, + types::*, + Config, Error, Event as StatefulEvent, +}; +use common_primitives::{ + schema::SchemaId, + stateful_storage::{PageHash, PageId}, + utils::wrap_binary_data, +}; +use core::hash::Hasher; +use frame_support::{assert_err, assert_ok}; +use parity_scale_codec::Encode; +#[allow(unused_imports)] +use pretty_assertions::{assert_eq, assert_ne, assert_str_eq}; +use sp_core::{sr25519, Get, Pair}; +use sp_runtime::{AccountId32, MultiSignature}; +use twox_hash::XxHash64; + +pub fn hash_payload(data: &[u8]) -> PageHash { + let mut hasher = XxHash64::with_seed(0); + core::hash::Hash::hash(&data, &mut hasher); + let value_bytes: [u8; 4] = + hasher.finish().to_be_bytes()[..4].try_into().expect("incorrect hash size"); + PageHash::from_be_bytes(value_bytes) +} + +#[test] +fn upsert_page_id_out_of_bounds_errors() { + new_test_ext().execute_with(|| { + // setup + let msa_id = 1; + let caller_1 = test_public(msa_id); + let schema_id = 1; + let page_id = ::MaxPaginatedPageId::get() + 1; + let payload = generate_payload_bytes::(Some(100)); + + assert_err!( + StatefulStoragePallet::upsert_page( + RuntimeOrigin::signed(caller_1), + msa_id.into(), + schema_id, + page_id.into(), + hash_payload(&payload), + payload + ), + Error::::PageIdExceedsMaxAllowed + ) + }) +} + +#[test] +fn upsert_page_with_invalid_msa_errors() { + new_test_ext().execute_with(|| { + // setup + let msa_id = INVALID_MSA_ID; + let caller_1 = test_public(msa_id); // hard-coded in mocks to return None for MSA + let schema_id = PAGINATED_SCHEMA; + let page_id = 1; + let payload = generate_payload_bytes::(Some(100)); + + assert_err!( + StatefulStoragePallet::upsert_page( + RuntimeOrigin::signed(caller_1), + msa_id.into(), + schema_id, + page_id, + hash_payload(&payload), + payload + ), + Error::::InvalidMessageSourceAccount + ) + }) +} + +#[test] +fn upsert_page_with_invalid_schema_id_errors() { + new_test_ext().execute_with(|| { + // setup + let msa_id = 1; + let caller_1 = test_public(msa_id); + let schema_id = INVALID_SCHEMA_ID; + let page_id = 1; + let payload = generate_payload_bytes::(Some(100)); + + assert_err!( + StatefulStoragePallet::upsert_page( + RuntimeOrigin::signed(caller_1), + msa_id.into(), + schema_id, + page_id, + hash_payload(&payload), + payload + ), + Error::::InvalidSchemaId + ) + }) +} + +#[test] +fn upsert_page_with_invalid_schema_payload_location_errors() { + new_test_ext().execute_with(|| { + // setup + let msa_id = 1; + let caller_1 = test_public(msa_id); + let schema_id = ITEMIZED_SCHEMA; + let page_id = 1; + let payload = generate_payload_bytes::(Some(100)); + + assert_err!( + StatefulStoragePallet::upsert_page( + RuntimeOrigin::signed(caller_1), + msa_id.into(), + schema_id, + page_id, + hash_payload(&payload), + payload + ), + Error::::SchemaPayloadLocationMismatch + ) + }) +} + +#[test] +fn upsert_page_with_no_delegation_errors() { + new_test_ext().execute_with(|| { + // setup + let caller_1 = test_public(1); + let msa_id = 2; + let schema_id = UNDELEGATED_PAGINATED_SCHEMA; + let page_id = 1; + let payload = generate_payload_bytes::(Some(100)); + + assert_err!( + StatefulStoragePallet::upsert_page( + RuntimeOrigin::signed(caller_1), + msa_id, + schema_id, + page_id, + PageHash::default(), + payload + ), + Error::::UnauthorizedDelegate + ) + }) +} + +#[test] +fn upsert_new_page_with_bad_state_hash_errors() { + new_test_ext().execute_with(|| { + // setup + let msa_id = 1; + let caller_1 = test_public(msa_id); + let schema_id = PAGINATED_SCHEMA; + let page_id = 1; + let payload = generate_payload_bytes::(Some(100)); + + assert_err!( + StatefulStoragePallet::upsert_page( + RuntimeOrigin::signed(caller_1), + msa_id.into(), + schema_id, + page_id, + hash_payload(&payload), + payload + ), + Error::::StalePageState + ) + }) +} + +#[test] +fn upsert_existing_page_with_bad_state_hash_errors() { + new_test_ext().execute_with(|| { + // setup + let msa_id = 1; + let caller_1 = test_public(msa_id); + let schema_id = PAGINATED_SCHEMA; + let page_id = 1; + let page = generate_page::(None, Some(100)); + + let key = (schema_id, page_id); + ::write( + &msa_id, + PALLET_STORAGE_PREFIX, + PAGINATED_STORAGE_PREFIX, + &key, + &page, + ); + + assert_err!( + StatefulStoragePallet::upsert_page( + RuntimeOrigin::signed(caller_1), + msa_id, + schema_id, + page_id, + 0u32, + page.data, + ), + Error::::StalePageState + ) + }) +} + +#[test] +fn upsert_new_page_succeeds() { + new_test_ext().execute_with(|| { + // setup + let msa_id = 1; + let caller_1 = test_public(msa_id); + let schema_id = PAGINATED_SCHEMA; + let page_id = 1; + let payload = generate_payload_bytes::(Some(100)); + let page: PaginatedPage = payload.clone().into(); + + assert_ok!(StatefulStoragePallet::upsert_page( + RuntimeOrigin::signed(caller_1), + msa_id, + schema_id, + page_id, + 0u32, + payload.into() + )); + + let keys = (schema_id, page_id); + let new_page: PaginatedPage = ::try_read( + &msa_id, + PALLET_STORAGE_PREFIX, + PAGINATED_STORAGE_PREFIX, + &keys, + ) + .unwrap() + .expect("new page is empty"); + assert_eq!(page.data, new_page.data, "new page contents incorrect"); + assert_eq!(new_page.nonce, 1, "new page nonce incorrect"); + }) +} + +#[test] +fn upsert_existing_page_modifies_page() { + new_test_ext().execute_with(|| { + // setup + let msa_id = 1; + let caller_1 = test_public(msa_id); + let schema_id: SchemaId = PAGINATED_SCHEMA; + let page_id: PageId = 1; + let old_nonce = 3; + let old_content = generate_payload_bytes(Some(200)); + let new_content = generate_payload_bytes::(Some(201)); + let mut old_page: PaginatedPage = old_content.clone().into(); + old_page.nonce = old_nonce; + + let keys = (schema_id, page_id); + ::write( + &msa_id, + PALLET_STORAGE_PREFIX, + PAGINATED_STORAGE_PREFIX, + &keys, + old_page, + ); + let old_page: PaginatedPage = ::try_read( + &msa_id, + PALLET_STORAGE_PREFIX, + PAGINATED_STORAGE_PREFIX, + &keys, + ) + .unwrap() + .unwrap(); + + assert_eq!(old_content, old_page.data); + assert_eq!(old_nonce, old_page.nonce); + assert_ok!(StatefulStoragePallet::upsert_page( + RuntimeOrigin::signed(caller_1), + msa_id, + schema_id, + page_id, + old_page.get_hash(), + new_content.clone().into() + )); + + let new_page: PaginatedPage = ::try_read( + &msa_id, + PALLET_STORAGE_PREFIX, + PAGINATED_STORAGE_PREFIX, + &keys, + ) + .unwrap() + .unwrap(); + assert_eq!(new_content, new_page.data); + assert_eq!(old_nonce + 1, new_page.nonce); + }) +} + +#[test] +fn upsert_page_on_signature_schema_fails_for_non_owner() { + new_test_ext().execute_with(|| { + // setup + // Note: normal use case for this test would be called by a delegate; + // we don't bother setting up the delegation because the call should fail + // before we check the delegation, as long as the owner_msa_id != caller_msa_id + let (caller_msa_id, caller_keys) = get_signature_account(); + let caller_1: AccountId32 = caller_keys.public().into(); + let owner_msa_id = caller_msa_id.saturating_add(1); + let schema_id = PAGINATED_SIGNED_SCHEMA; + let page_id = 11; + let payload = generate_payload_bytes::(None); + + // assert + assert_err!( + StatefulStoragePallet::upsert_page( + RuntimeOrigin::signed(caller_1), + owner_msa_id, + schema_id, + page_id, + NONEXISTENT_PAGE_HASH, + payload.into(), + ), + Error::::UnsupportedOperationForSchema + ); + }); +} + +#[test] +fn upsert_page_on_signature_schema_succeeds_for_owner() { + new_test_ext().execute_with(|| { + // setup + let (msa_id, caller_keys) = get_signature_account(); + let caller_1: AccountId32 = caller_keys.public().into(); + let schema_id = PAGINATED_SIGNED_SCHEMA; + let page_id = 11; + let payload = generate_payload_bytes::(None); + + // assert + assert_ok!(StatefulStoragePallet::upsert_page( + RuntimeOrigin::signed(caller_1), + msa_id, + schema_id, + page_id, + NONEXISTENT_PAGE_HASH, + payload.into(), + )); + }); +} + +#[test] +fn upsert_page_with_signature_v2_having_page_id_out_of_bounds_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let (_, pair) = get_signature_account(); + let delegator_key = pair.public(); + let schema_id = UNDELEGATED_PAGINATED_SCHEMA; + let page_id = (::MaxPaginatedPageId::get() + 1).into(); + let payload = generate_payload_bytes::(Some(100)); + let payload = PaginatedUpsertSignaturePayloadV2 { + payload, + target_hash: PageHash::default(), + expiration: 10, + schema_id, + page_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let owner_signature: MultiSignature = pair.sign(&encode_data_new_key_data).into(); + + // act + assert_err!( + StatefulStoragePallet::upsert_page_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_signature, + payload + ), + Error::::PageIdExceedsMaxAllowed + ) + }) +} + +#[test] +fn upsert_page_with_signature_v2_having_expired_payload_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let (_, pair) = get_signature_account(); + let delegator_key = pair.public(); + let schema_id = UNDELEGATED_PAGINATED_SCHEMA; + let page_id = 1; + let block_number = 10; + let payload = generate_payload_bytes::(Some(100)); + let payload = PaginatedUpsertSignaturePayloadV2 { + payload, + target_hash: PageHash::default(), + expiration: block_number, + schema_id, + page_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let owner_signature: MultiSignature = pair.sign(&encode_data_new_key_data).into(); + + // act + System::set_block_number(block_number); + assert_err!( + StatefulStoragePallet::upsert_page_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_signature, + payload + ), + Error::::ProofHasExpired + ) + }) +} + +#[test] +fn upsert_page_with_signature_v2_having_out_of_window_payload_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let (_, pair) = get_signature_account(); + let delegator_key = pair.public(); + let schema_id = UNDELEGATED_PAGINATED_SCHEMA; + let page_id = 1; + let payload = generate_payload_bytes::(Some(100)); + let mortality_window: u32 = ::MortalityWindowSize::get(); + let payload = PaginatedUpsertSignaturePayloadV2 { + payload, + target_hash: PageHash::default(), + expiration: (mortality_window + 1).into(), + schema_id, + page_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let owner_signature: MultiSignature = pair.sign(&encode_data_new_key_data).into(); + + // act + assert_err!( + StatefulStoragePallet::upsert_page_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_signature, + payload + ), + Error::::ProofNotYetValid + ) + }) +} + +#[test] +fn upsert_page_with_signature_v2_having_wrong_signature_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let (_, pair) = get_signature_account(); + let delegator_key = pair.public(); + let (signature_key, _) = sr25519::Pair::generate(); + let schema_id = UNDELEGATED_PAGINATED_SCHEMA; + let page_id = 1; + let payload = generate_payload_bytes::(Some(100)); + let payload = PaginatedUpsertSignaturePayloadV2 { + payload, + target_hash: PageHash::default(), + expiration: 10, + schema_id, + page_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let owner_signature: MultiSignature = signature_key.sign(&encode_data_new_key_data).into(); + + // act + assert_err!( + StatefulStoragePallet::upsert_page_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_signature, + payload + ), + Error::::InvalidSignature + ) + }) +} + +#[test] +fn upsert_page_with_signature_v2_having_non_existing_msa_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let pair = get_invalid_msa_signature_account(); // hardcoded key that returns None Msa + let delegator_key = pair.public(); + let schema_id = UNDELEGATED_PAGINATED_SCHEMA; + let page_id = 1; + let payload = generate_payload_bytes::(Some(100)); + let payload = PaginatedUpsertSignaturePayloadV2 { + payload, + target_hash: PageHash::default(), + expiration: 10, + schema_id, + page_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let owner_signature: MultiSignature = pair.sign(&encode_data_new_key_data).into(); + + // act + assert_err!( + StatefulStoragePallet::upsert_page_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_signature, + payload + ), + Error::::InvalidMessageSourceAccount + ) + }) +} + +#[test] +fn upsert_page_with_signature_v2_having_invalid_schema_id_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let (_, pair) = get_signature_account(); + let delegator_key = pair.public(); + let schema_id = INVALID_SCHEMA_ID; + let page_id = 1; + let payload = generate_payload_bytes::(Some(100)); + let payload = PaginatedUpsertSignaturePayloadV2 { + payload, + target_hash: PageHash::default(), + expiration: 10, + schema_id, + page_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let owner_signature: MultiSignature = pair.sign(&encode_data_new_key_data).into(); + + // act + assert_err!( + StatefulStoragePallet::upsert_page_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_signature, + payload + ), + Error::::InvalidSchemaId + ) + }) +} + +#[test] +fn upsert_page_with_signature_v2_having_invalid_schema_location_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let (_, pair) = get_signature_account(); + let delegator_key = pair.public(); + let schema_id = ITEMIZED_SCHEMA; + let page_id = 1; + let payload = generate_payload_bytes::(Some(100)); + let payload = PaginatedUpsertSignaturePayloadV2 { + payload, + target_hash: PageHash::default(), + expiration: 10, + schema_id, + page_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let owner_signature: MultiSignature = pair.sign(&encode_data_new_key_data).into(); + + // act + assert_err!( + StatefulStoragePallet::upsert_page_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_signature, + payload + ), + Error::::SchemaPayloadLocationMismatch + ) + }) +} + +#[test] +fn upsert_page_with_signature_v2_having_invalid_hash_should_fail() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let (_, pair) = get_signature_account(); + let delegator_key = pair.public(); + let schema_id = PAGINATED_SCHEMA; + let page_id = 1; + let payload = generate_payload_bytes::(Some(100)); + let payload = PaginatedUpsertSignaturePayloadV2 { + payload, + target_hash: PageHash::default() + 1, // any non default hash value + expiration: 10, + schema_id, + page_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let owner_signature: MultiSignature = pair.sign(&encode_data_new_key_data).into(); + + // act + assert_err!( + StatefulStoragePallet::upsert_page_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_signature, + payload + ), + Error::::StalePageState + ) + }) +} + +#[test] +fn upsert_page_with_signature_v2_having_valid_inputs_should_work() { + new_test_ext().execute_with(|| { + // arrange + let caller_1 = test_public(1); + let (msa_id, pair) = get_signature_account(); + let delegator_key = pair.public(); + let schema_id = PAGINATED_SCHEMA; + let page_id = 1; + let payload = generate_payload_bytes::(Some(100)); + let page: PaginatedPage = payload.clone().into(); + let payload = PaginatedUpsertSignaturePayloadV2 { + payload, + target_hash: PageHash::default(), + expiration: 10, + schema_id, + page_id, + }; + let encode_data_new_key_data = wrap_binary_data(payload.encode()); + let owner_signature: MultiSignature = pair.sign(&encode_data_new_key_data).into(); + + // act + assert_ok!(StatefulStoragePallet::upsert_page_with_signature_v2( + RuntimeOrigin::signed(caller_1), + delegator_key.into(), + owner_signature, + payload + )); + + // assert + let keys = (schema_id, page_id); + let new_page: PaginatedPage = ::try_read( + &msa_id, + PALLET_STORAGE_PREFIX, + PAGINATED_STORAGE_PREFIX, + &keys, + ) + .expect("new page could not be read") + .expect("new page is empty"); + assert_eq!(page.data, new_page.data, "new page contents incorrect"); + assert_eq!(new_page.nonce, 1, "new page nonce incorrect"); + System::assert_last_event( + StatefulEvent::PaginatedPageUpdated { + msa_id, + schema_id, + page_id, + prev_content_hash: PageHash::default(), + curr_content_hash: new_page.get_hash(), + } + .into(), + ); + }) +} diff --git a/pallets/stateful-storage/src/types.rs b/pallets/stateful-storage/src/types.rs new file mode 100644 index 0000000000..dc9d6c8544 --- /dev/null +++ b/pallets/stateful-storage/src/types.rs @@ -0,0 +1,484 @@ +//! Types for the Stateful Storage Pallet +use crate::Config; +use alloc::boxed::Box; +use common_primitives::{ + node::EIP712Encode, + schema::SchemaId, + stateful_storage::{PageHash, PageId, PageNonce}, +}; +use frame_support::pallet_prelude::*; +use frame_system::pallet_prelude::*; +use lazy_static::lazy_static; +use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; +use scale_info::TypeInfo; +use sp_core::bounded::BoundedVec; +extern crate alloc; +use alloc::{collections::btree_map::BTreeMap, vec::Vec}; +use core::{ + cmp::*, + fmt::Debug, + hash::{Hash, Hasher}, +}; +use sp_core::U256; + +use common_primitives::{signatures::get_eip712_encoding_prefix, utils::to_abi_compatible_number}; +use twox_hash::XxHash64; + +/// Migration page size +pub const MIGRATION_PAGE_SIZE: u32 = 20; +/// Current storage version of the pallet. +pub const STATEFUL_STORAGE_VERSION: StorageVersion = StorageVersion::new(1); +/// pallet storage prefix +pub const PALLET_STORAGE_PREFIX: &[u8] = b"stateful-storage"; +/// itemized storage prefix +pub const ITEMIZED_STORAGE_PREFIX: &[u8] = b"itemized"; +/// paginated storage prefix +pub const PAGINATED_STORAGE_PREFIX: &[u8] = b"paginated"; + +/// MultipartKey type for Itemized storage +pub type ItemizedKey = (SchemaId,); +/// MultipartKey type for Paginated storage (full key) +pub type PaginatedKey = (SchemaId, PageId); +/// MultipartKey type for Paginated storage (prefix lookup) +pub type PaginatedPrefixKey = (SchemaId,); +/// Itemized page type +pub type ItemizedPage = Page<::MaxItemizedPageSizeBytes>; +/// Paginated Page type +pub type PaginatedPage = Page<::MaxPaginatedPageSizeBytes>; + +/// Operations on Itemized storage +pub trait ItemizedOperations { + /// Applies all actions to specified page and returns the updated page + fn apply_item_actions( + &self, + actions: &[ItemAction], + ) -> Result, PageError>; + + /// Parses all the items inside an ItemPage + fn try_parse(&self, include_header: bool) -> Result; +} +/// Defines the actions that can be applied to an Itemized storage +#[derive( + Clone, Encode, Decode, DecodeWithMemTracking, Debug, TypeInfo, MaxEncodedLen, PartialEq, +)] +#[scale_info(skip_type_params(DataSize))] +#[codec(mel_bound(DataSize: MaxEncodedLen))] +pub enum ItemAction + Clone + core::fmt::Debug + PartialEq> { + /// Adding new Item into page + Add { + /// The data to add + data: BoundedVec, + }, + /// Removing an existing item by index number. Index number starts from 0 + Delete { + /// Index (0+) to delete + index: u16, + }, +} + +/// This header is used to specify the byte size of an item stored inside the buffer +/// All items will require this header to be inserted before the item data +#[derive(Encode, Decode, PartialEq, MaxEncodedLen, Debug)] +pub struct ItemHeader { + /// The length of this item, not including the size of this header. + pub payload_len: u16, +} + +/// Errors dedicated to parsing or modifying pages +#[derive(Debug, PartialEq)] +pub enum PageError { + /// Unable to decode the data in the item + ErrorParsing(&'static str), + /// Add or Delete Operation was not possible + InvalidAction(&'static str), + /// ItemPage count overflow catch + ArithmeticOverflow, + /// Page byte length over the max size + PageSizeOverflow, +} + +// REMOVED ItemizedSignaturePayload + +/// Payload containing all necessary fields to verify Itemized related signatures +#[derive( + Encode, + Decode, + DecodeWithMemTracking, + TypeInfo, + MaxEncodedLen, + PartialEq, + RuntimeDebugNoBound, + Clone, +)] +#[scale_info(skip_type_params(T))] +pub struct ItemizedSignaturePayloadV2 { + /// Schema id of this storage + #[codec(compact)] + pub schema_id: SchemaId, + + /// Hash of targeted page to avoid race conditions + #[codec(compact)] + pub target_hash: PageHash, + + /// The block number at which the signed proof will expire + pub expiration: BlockNumberFor, + + /// Actions to apply to storage from possible: [`ItemAction`] + pub actions: BoundedVec< + ItemAction<::MaxItemizedBlobSizeBytes>, + ::MaxItemizedActionsCount, + >, +} + +impl EIP712Encode for ItemizedSignaturePayloadV2 { + fn encode_eip_712(&self) -> Box<[u8]> { + lazy_static! { + // get prefix and domain separator + static ref PREFIX_DOMAIN_SEPARATOR: Box<[u8]> = + get_eip712_encoding_prefix("0xcccccccccccccccccccccccccccccccccccccccc"); + + // signed payload + static ref MAIN_TYPE_HASH: [u8; 32] = + sp_io::hashing::keccak_256(b"ItemizedSignaturePayloadV2(uint16 schemaId,uint32 targetHash,uint32 expiration,ItemAction[] actions)ItemAction(string actionType,bytes data,uint16 index)"); + + static ref SUB_TYPE_HASH: [u8; 32] = + sp_io::hashing::keccak_256(b"ItemAction(string actionType,bytes data,uint16 index)"); + + static ref ITEM_ACTION_ADD: [u8; 32] = sp_io::hashing::keccak_256(b"Add"); + static ref ITEM_ACTION_DELETE: [u8; 32] = sp_io::hashing::keccak_256(b"Delete"); + + static ref EMPTY_BYTES_HASH: [u8; 32] = sp_io::hashing::keccak_256([].as_slice()); + } + let coded_schema_id = to_abi_compatible_number(self.schema_id); + let coded_target_hash = to_abi_compatible_number(self.target_hash); + let expiration: U256 = self.expiration.into(); + let coded_expiration = to_abi_compatible_number(expiration.as_u128()); + let coded_actions = { + let values: Vec = self + .actions + .iter() + .flat_map(|a| match a { + ItemAction::Add { data } => sp_io::hashing::keccak_256( + &[ + SUB_TYPE_HASH.as_slice(), + ITEM_ACTION_ADD.as_slice(), + &sp_io::hashing::keccak_256(data.as_slice()), + [0u8; 32].as_slice(), + ] + .concat(), + ), + ItemAction::Delete { index } => sp_io::hashing::keccak_256( + &[ + SUB_TYPE_HASH.as_slice(), + ITEM_ACTION_DELETE.as_slice(), + EMPTY_BYTES_HASH.as_slice(), + to_abi_compatible_number(*index).as_slice(), + ] + .concat(), + ), + }) + .collect(); + sp_io::hashing::keccak_256(&values) + }; + let message = sp_io::hashing::keccak_256( + &[ + MAIN_TYPE_HASH.as_slice(), + &coded_schema_id, + &coded_target_hash, + &coded_expiration, + &coded_actions, + ] + .concat(), + ); + let combined = [PREFIX_DOMAIN_SEPARATOR.as_ref(), &message].concat(); + combined.into_boxed_slice() + } +} + +// REMOVED PaginatedSignaturePayload + +/// Payload containing all necessary fields to verify signatures to upsert a Paginated storage +#[derive( + Encode, + Decode, + DecodeWithMemTracking, + TypeInfo, + MaxEncodedLen, + PartialEq, + RuntimeDebugNoBound, + Clone, +)] +#[scale_info(skip_type_params(T))] +pub struct PaginatedUpsertSignaturePayloadV2 { + /// Schema id of this storage + #[codec(compact)] + pub schema_id: SchemaId, + + /// Page id of this storage + #[codec(compact)] + pub page_id: PageId, + + /// Hash of targeted page to avoid race conditions + #[codec(compact)] + pub target_hash: PageHash, + + /// The block number at which the signed proof will expire + pub expiration: BlockNumberFor, + + /// payload to update the page with + pub payload: BoundedVec::MaxPaginatedPageSizeBytes>, +} + +impl EIP712Encode for PaginatedUpsertSignaturePayloadV2 { + fn encode_eip_712(&self) -> Box<[u8]> { + lazy_static! { + // get prefix and domain separator + static ref PREFIX_DOMAIN_SEPARATOR: Box<[u8]> = + get_eip712_encoding_prefix("0xcccccccccccccccccccccccccccccccccccccccc"); + + // signed payload + static ref MAIN_TYPE_HASH: [u8; 32] = + sp_io::hashing::keccak_256(b"PaginatedUpsertSignaturePayloadV2(uint16 schemaId,uint16 pageId,uint32 targetHash,uint32 expiration,bytes payload)"); + } + let coded_schema_id = to_abi_compatible_number(self.schema_id); + let coded_page_id = to_abi_compatible_number(self.page_id); + let coded_target_hash = to_abi_compatible_number(self.target_hash); + let expiration: U256 = self.expiration.into(); + let coded_expiration = to_abi_compatible_number(expiration.as_u128()); + let coded_payload = sp_io::hashing::keccak_256(self.payload.as_slice()); + let message = sp_io::hashing::keccak_256( + &[ + MAIN_TYPE_HASH.as_slice(), + &coded_schema_id, + &coded_page_id, + &coded_target_hash, + &coded_expiration, + &coded_payload, + ] + .concat(), + ); + let combined = [PREFIX_DOMAIN_SEPARATOR.as_ref(), &message].concat(); + combined.into_boxed_slice() + } +} + +// REMOVED PaginatedDeleteSignaturePayload + +/// Payload containing all necessary fields to verify signatures to delete a Paginated storage +#[derive( + Encode, + Decode, + DecodeWithMemTracking, + TypeInfo, + MaxEncodedLen, + PartialEq, + RuntimeDebugNoBound, + Clone, +)] +#[scale_info(skip_type_params(T))] +pub struct PaginatedDeleteSignaturePayloadV2 { + /// Schema id of this storage + #[codec(compact)] + pub schema_id: SchemaId, + + /// Page id of this storage + #[codec(compact)] + pub page_id: PageId, + + /// Hash of targeted page to avoid race conditions + #[codec(compact)] + pub target_hash: PageHash, + + /// The block number at which the signed proof will expire + pub expiration: BlockNumberFor, +} + +impl EIP712Encode for PaginatedDeleteSignaturePayloadV2 { + fn encode_eip_712(&self) -> Box<[u8]> { + lazy_static! { + // get prefix and domain separator + static ref PREFIX_DOMAIN_SEPARATOR: Box<[u8]> = + get_eip712_encoding_prefix("0xcccccccccccccccccccccccccccccccccccccccc"); + + // signed payload + static ref MAIN_TYPE_HASH: [u8; 32] = + sp_io::hashing::keccak_256(b"PaginatedDeleteSignaturePayloadV2(uint16 schemaId,uint16 pageId,uint32 targetHash,uint32 expiration)"); + } + let coded_schema_id = to_abi_compatible_number(self.schema_id); + let coded_page_id = to_abi_compatible_number(self.page_id); + let coded_target_hash = to_abi_compatible_number(self.target_hash); + let expiration: U256 = self.expiration.into(); + let coded_expiration = to_abi_compatible_number(expiration.as_u128()); + let message = sp_io::hashing::keccak_256( + &[ + MAIN_TYPE_HASH.as_slice(), + &coded_schema_id, + &coded_page_id, + &coded_target_hash, + &coded_expiration, + ] + .concat(), + ); + let combined = [PREFIX_DOMAIN_SEPARATOR.as_ref(), &message].concat(); + combined.into_boxed_slice() + } +} + +/// A generic page of data which supports both Itemized and Paginated +#[derive(Encode, Decode, TypeInfo, MaxEncodedLen, Debug, Default)] +#[scale_info(skip_type_params(PageDataSize))] +#[codec(mel_bound(PageDataSize: MaxEncodedLen))] +pub struct Page> { + /// Incremental nonce to eliminate of signature replay attacks + pub nonce: PageNonce, + /// Data for the page + /// - Itemized is limited by [`Config::MaxItemizedPageSizeBytes`] + /// - Paginated is limited by [`Config::MaxPaginatedPageSizeBytes`] + pub data: BoundedVec, +} + +/// An internal struct which contains the parsed items in a page +#[derive(Debug, PartialEq)] +pub struct ParsedItemPage<'a> { + /// Page current size + pub page_size: usize, + /// A map of item index to a slice of blob (including header is optional) + pub items: BTreeMap, +} + +impl> Page { + /// Check if the page is empty + pub fn is_empty(&self) -> bool { + self.data.is_empty() + } + + /// Retrieve the hash of the page + pub fn get_hash(&self) -> PageHash { + if self.is_empty() { + return PageHash::default(); + } + let mut hasher = XxHash64::with_seed(0); + self.hash(&mut hasher); + let value_bytes: [u8; 4] = + hasher.finish().to_be_bytes()[..4].try_into().expect("incorrect hash size"); + PageHash::from_be_bytes(value_bytes) + } +} + +/// PartialEq and Hash should be both derived or implemented manually based on clippy rules +impl> Hash for Page { + fn hash(&self, state: &mut H) { + state.write(&self.nonce.encode()); + state.write(&self.data[..]); + } +} + +/// PartialEq and Hash should be both derived or implemented manually based on clippy rules +impl> PartialEq for Page { + fn eq(&self, other: &Self) -> bool { + self.nonce.eq(&other.nonce) && self.data.eq(&other.data) + } +} + +/// Deserializing a Page from a BoundedVec is used for the input payload-- +/// so there is no nonce to be read, just the raw data. +impl> From> for Page { + fn from(bounded: BoundedVec) -> Self { + Self { nonce: PageNonce::default(), data: bounded } + } +} + +/// Deserializing a Page from a `Vec` is used for reading from storage-- +/// so we must first read the nonce, then the data payload. +impl> TryFrom> for Page { + type Error = (); + + fn try_from(data: Vec) -> Result { + let nonce: PageNonce = + PageNonce::decode(&mut &data[..PageNonce::max_encoded_len()]).map_err(|_| ())?; + let bounded: BoundedVec = + BoundedVec::try_from(data[PageNonce::max_encoded_len()..].to_vec()).map_err(|_| ())?; + Ok(Self { nonce, data: bounded }) + } +} + +impl ItemizedOperations for ItemizedPage { + /// Applies all actions to specified page and returns the updated page + /// This has O(n) complexity when n is the number of all the bytes in that itemized storage + fn apply_item_actions( + &self, + actions: &[ItemAction], + ) -> Result { + let mut parsed = ItemizedOperations::::try_parse(self, true)?; + + let mut updated_page_buffer = Vec::with_capacity(parsed.page_size); + let mut add_buffer = Vec::new(); + + for action in actions { + match action { + ItemAction::Delete { index } => { + ensure!( + parsed.items.contains_key(index), + PageError::InvalidAction("item index is invalid") + ); + parsed.items.remove(index); + }, + ItemAction::Add { data } => { + let header = ItemHeader { + payload_len: data + .len() + .try_into() + .map_err(|_| PageError::InvalidAction("invalid payload size"))?, + }; + add_buffer.extend_from_slice(&header.encode()[..]); + add_buffer.extend_from_slice(&data[..]); + }, + } + } + + // since BTreeMap is sorted by key, all items will be kept in their existing order + for (_, slice) in parsed.items.iter() { + updated_page_buffer.extend_from_slice(slice); + } + updated_page_buffer.append(&mut add_buffer); + + Ok(ItemizedPage::::from( + BoundedVec::try_from(updated_page_buffer).map_err(|_| PageError::PageSizeOverflow)?, + )) + } + + /// Parses all the items inside an ItemPage + /// This has O(n) complexity when n is the number of all the bytes in that itemized storage + fn try_parse(&self, include_header: bool) -> Result { + let mut count = 0u16; + let mut items = BTreeMap::new(); + let mut offset = 0; + while offset < self.data.len() { + ensure!( + offset + ItemHeader::max_encoded_len() <= self.data.len(), + PageError::ErrorParsing("wrong header size") + ); + let header = ::decode(&mut &self.data[offset..]) + .map_err(|_| PageError::ErrorParsing("decoding header"))?; + let item_total_length = ItemHeader::max_encoded_len() + header.payload_len as usize; + ensure!( + offset + item_total_length <= self.data.len(), + PageError::ErrorParsing("wrong payload size") + ); + + items.insert( + count, + match include_header { + true => &self.data[offset..(offset + item_total_length)], + false => + &self.data + [(offset + ItemHeader::max_encoded_len())..(offset + item_total_length)], + }, + ); + offset += item_total_length; + count = count.checked_add(1).ok_or(PageError::ArithmeticOverflow)?; + } + + Ok(ParsedItemPage { page_size: self.data.len(), items }) + } +} diff --git a/pallets/stateful-storage/src/weights.rs b/pallets/stateful-storage/src/weights.rs new file mode 100644 index 0000000000..299bfa90da --- /dev/null +++ b/pallets/stateful-storage/src/weights.rs @@ -0,0 +1,458 @@ + +//! Autogenerated weights for `pallet_stateful_storage` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-04-18, STEPS: `20`, REPEAT: `10`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `ip-10-173-0-75`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` +//! WASM-EXECUTION: `Compiled`, CHAIN: `None`, DB CACHE: `1024` + +// Executed Command: +// ./scripts/../target/release/frequency +// benchmark +// pallet +// --pallet=pallet_stateful-storage +// --extrinsic +// * +// --heap-pages=4096 +// --steps=20 +// --repeat=10 +// --output=./scripts/../pallets/stateful-storage/src/weights.rs +// --template=./scripts/../.maintain/frame-weight-template.hbs +// --additional-trie-layers=6 +// --runtime=./scripts/../target/release/wbuild/frequency-runtime/frequency_runtime.wasm +// --genesis-builder=runtime + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; +use core::marker::PhantomData; + +/// Weight functions needed for `pallet_stateful_storage`. +pub trait WeightInfo { + fn apply_item_actions_add(s: u32, ) -> Weight; + fn apply_item_actions_delete(n: u32, ) -> Weight; + fn upsert_page(s: u32, ) -> Weight; + fn delete_page() -> Weight; + fn apply_item_actions_with_signature_v2_add(s: u32, ) -> Weight; + fn apply_item_actions_with_signature_v2_delete(n: u32, ) -> Weight; + fn upsert_page_with_signature_v2(s: u32, ) -> Weight; + fn delete_page_with_signature_v2() -> Weight; +} + +/// Weights for `pallet_stateful_storage` using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl WeightInfo for SubstrateWeight { + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::DelegatorAndProviderToDelegation` (r:1 w:0) + /// Proof: `Msa::DelegatorAndProviderToDelegation` (`max_values`: None, `max_size`: Some(217), added: 2692, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaInfos` (r:1 w:0) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0xbd1557c8db6bd8599a811a7175fbc2fc6400` (r:1 w:1) + /// Proof: UNKNOWN KEY `0xbd1557c8db6bd8599a811a7175fbc2fc6400` (r:1 w:1) + /// The range of component `s` is `[1024, 5120]`. + fn apply_item_actions_add(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `632` + // Estimated: `6077` + // Minimum execution time: 37_627_000 picoseconds. + Weight::from_parts(38_268_987, 6077) + // Standard Error: 149 + .saturating_add(Weight::from_parts(1_159, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::DelegatorAndProviderToDelegation` (r:1 w:0) + /// Proof: `Msa::DelegatorAndProviderToDelegation` (`max_values`: None, `max_size`: Some(217), added: 2692, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaInfos` (r:1 w:0) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0xbd1557c8db6bd8599a811a7175fbc2fc6400` (r:1 w:1) + /// Proof: UNKNOWN KEY `0xbd1557c8db6bd8599a811a7175fbc2fc6400` (r:1 w:1) + /// The range of component `n` is `[1, 5]`. + fn apply_item_actions_delete(_n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `11010` + // Estimated: `16455` + // Minimum execution time: 50_139_000 picoseconds. + Weight::from_parts(55_089_556, 16455) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::DelegatorAndProviderToDelegation` (r:1 w:0) + /// Proof: `Msa::DelegatorAndProviderToDelegation` (`max_values`: None, `max_size`: Some(217), added: 2692, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaInfos` (r:1 w:0) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0x0763c98381dc89abe38627fe2f98cb7af1577fbf1d628fdddb4ebfc6e8d95fb1` (r:1 w:1) + /// Proof: UNKNOWN KEY `0x0763c98381dc89abe38627fe2f98cb7af1577fbf1d628fdddb4ebfc6e8d95fb1` (r:1 w:1) + /// The range of component `s` is `[1, 1024]`. + fn upsert_page(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `1790` + // Estimated: `7235` + // Minimum execution time: 40_959_000 picoseconds. + Weight::from_parts(42_939_403, 7235) + // Standard Error: 380 + .saturating_add(Weight::from_parts(910, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::DelegatorAndProviderToDelegation` (r:1 w:0) + /// Proof: `Msa::DelegatorAndProviderToDelegation` (`max_values`: None, `max_size`: Some(217), added: 2692, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaInfos` (r:1 w:0) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0x0763c98381dc89abe38627fe2f98cb7af1577fbf1d628fdddb4ebfc6e8d95fb1` (r:1 w:1) + /// Proof: UNKNOWN KEY `0x0763c98381dc89abe38627fe2f98cb7af1577fbf1d628fdddb4ebfc6e8d95fb1` (r:1 w:1) + fn delete_page() -> Weight { + // Proof Size summary in bytes: + // Measured: `1788` + // Estimated: `7233` + // Minimum execution time: 39_941_000 picoseconds. + Weight::from_parts(41_416_000, 7233) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaInfos` (r:1 w:0) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0xbd1557c8db6bd8599a811a7175fbc2fc6400` (r:1 w:1) + /// Proof: UNKNOWN KEY `0xbd1557c8db6bd8599a811a7175fbc2fc6400` (r:1 w:1) + /// The range of component `s` is `[1024, 5120]`. + fn apply_item_actions_with_signature_v2_add(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `639` + // Estimated: `6084` + // Minimum execution time: 127_992_000 picoseconds. + Weight::from_parts(116_107_817, 6084) + // Standard Error: 381 + .saturating_add(Weight::from_parts(10_913, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaInfos` (r:1 w:0) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0xbd1557c8db6bd8599a811a7175fbc2fc6400` (r:1 w:1) + /// Proof: UNKNOWN KEY `0xbd1557c8db6bd8599a811a7175fbc2fc6400` (r:1 w:1) + /// The range of component `n` is `[1, 5]`. + fn apply_item_actions_with_signature_v2_delete(_n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `11017` + // Estimated: `16462` + // Minimum execution time: 132_800_000 picoseconds. + Weight::from_parts(138_374_987, 16462) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaInfos` (r:1 w:0) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0x0763c98381dc89abe38627fe2f98cb7af1577fbf1d628fdddb4ebfc6e8d95fb1` (r:1 w:1) + /// Proof: UNKNOWN KEY `0x0763c98381dc89abe38627fe2f98cb7af1577fbf1d628fdddb4ebfc6e8d95fb1` (r:1 w:1) + /// The range of component `s` is `[1, 1024]`. + fn upsert_page_with_signature_v2(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `1723` + // Estimated: `7168` + // Minimum execution time: 119_649_000 picoseconds. + Weight::from_parts(123_336_699, 7168) + // Standard Error: 822 + .saturating_add(Weight::from_parts(10_528, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaInfos` (r:1 w:0) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0x0763c98381dc89abe38627fe2f98cb7af1577fbf1d628fdddb4ebfc6e8d95fb1` (r:1 w:1) + /// Proof: UNKNOWN KEY `0x0763c98381dc89abe38627fe2f98cb7af1577fbf1d628fdddb4ebfc6e8d95fb1` (r:1 w:1) + fn delete_page_with_signature_v2() -> Weight { + // Proof Size summary in bytes: + // Measured: `1721` + // Estimated: `7166` + // Minimum execution time: 119_832_000 picoseconds. + Weight::from_parts(122_349_000, 7166) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } +} + +// For backwards compatibility and tests. +impl WeightInfo for () { + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::DelegatorAndProviderToDelegation` (r:1 w:0) + /// Proof: `Msa::DelegatorAndProviderToDelegation` (`max_values`: None, `max_size`: Some(217), added: 2692, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaInfos` (r:1 w:0) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0xbd1557c8db6bd8599a811a7175fbc2fc6400` (r:1 w:1) + /// Proof: UNKNOWN KEY `0xbd1557c8db6bd8599a811a7175fbc2fc6400` (r:1 w:1) + /// The range of component `s` is `[1024, 5120]`. + fn apply_item_actions_add(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `632` + // Estimated: `6077` + // Minimum execution time: 37_627_000 picoseconds. + Weight::from_parts(38_268_987, 6077) + // Standard Error: 149 + .saturating_add(Weight::from_parts(1_159, 0).saturating_mul(s.into())) + .saturating_add(RocksDbWeight::get().reads(4_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::DelegatorAndProviderToDelegation` (r:1 w:0) + /// Proof: `Msa::DelegatorAndProviderToDelegation` (`max_values`: None, `max_size`: Some(217), added: 2692, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaInfos` (r:1 w:0) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0xbd1557c8db6bd8599a811a7175fbc2fc6400` (r:1 w:1) + /// Proof: UNKNOWN KEY `0xbd1557c8db6bd8599a811a7175fbc2fc6400` (r:1 w:1) + /// The range of component `n` is `[1, 5]`. + fn apply_item_actions_delete(_n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `11010` + // Estimated: `16455` + // Minimum execution time: 50_139_000 picoseconds. + Weight::from_parts(55_089_556, 16455) + .saturating_add(RocksDbWeight::get().reads(4_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::DelegatorAndProviderToDelegation` (r:1 w:0) + /// Proof: `Msa::DelegatorAndProviderToDelegation` (`max_values`: None, `max_size`: Some(217), added: 2692, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaInfos` (r:1 w:0) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0x0763c98381dc89abe38627fe2f98cb7af1577fbf1d628fdddb4ebfc6e8d95fb1` (r:1 w:1) + /// Proof: UNKNOWN KEY `0x0763c98381dc89abe38627fe2f98cb7af1577fbf1d628fdddb4ebfc6e8d95fb1` (r:1 w:1) + /// The range of component `s` is `[1, 1024]`. + fn upsert_page(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `1790` + // Estimated: `7235` + // Minimum execution time: 40_959_000 picoseconds. + Weight::from_parts(42_939_403, 7235) + // Standard Error: 380 + .saturating_add(Weight::from_parts(910, 0).saturating_mul(s.into())) + .saturating_add(RocksDbWeight::get().reads(4_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Msa::DelegatorAndProviderToDelegation` (r:1 w:0) + /// Proof: `Msa::DelegatorAndProviderToDelegation` (`max_values`: None, `max_size`: Some(217), added: 2692, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaInfos` (r:1 w:0) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0x0763c98381dc89abe38627fe2f98cb7af1577fbf1d628fdddb4ebfc6e8d95fb1` (r:1 w:1) + /// Proof: UNKNOWN KEY `0x0763c98381dc89abe38627fe2f98cb7af1577fbf1d628fdddb4ebfc6e8d95fb1` (r:1 w:1) + fn delete_page() -> Weight { + // Proof Size summary in bytes: + // Measured: `1788` + // Estimated: `7233` + // Minimum execution time: 39_941_000 picoseconds. + Weight::from_parts(41_416_000, 7233) + .saturating_add(RocksDbWeight::get().reads(4_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaInfos` (r:1 w:0) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0xbd1557c8db6bd8599a811a7175fbc2fc6400` (r:1 w:1) + /// Proof: UNKNOWN KEY `0xbd1557c8db6bd8599a811a7175fbc2fc6400` (r:1 w:1) + /// The range of component `s` is `[1024, 5120]`. + fn apply_item_actions_with_signature_v2_add(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `639` + // Estimated: `6084` + // Minimum execution time: 127_992_000 picoseconds. + Weight::from_parts(116_107_817, 6084) + // Standard Error: 381 + .saturating_add(Weight::from_parts(10_913, 0).saturating_mul(s.into())) + .saturating_add(RocksDbWeight::get().reads(3_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaInfos` (r:1 w:0) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0xbd1557c8db6bd8599a811a7175fbc2fc6400` (r:1 w:1) + /// Proof: UNKNOWN KEY `0xbd1557c8db6bd8599a811a7175fbc2fc6400` (r:1 w:1) + /// The range of component `n` is `[1, 5]`. + fn apply_item_actions_with_signature_v2_delete(_n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `11017` + // Estimated: `16462` + // Minimum execution time: 132_800_000 picoseconds. + Weight::from_parts(138_374_987, 16462) + .saturating_add(RocksDbWeight::get().reads(3_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaInfos` (r:1 w:0) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0x0763c98381dc89abe38627fe2f98cb7af1577fbf1d628fdddb4ebfc6e8d95fb1` (r:1 w:1) + /// Proof: UNKNOWN KEY `0x0763c98381dc89abe38627fe2f98cb7af1577fbf1d628fdddb4ebfc6e8d95fb1` (r:1 w:1) + /// The range of component `s` is `[1, 1024]`. + fn upsert_page_with_signature_v2(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `1723` + // Estimated: `7168` + // Minimum execution time: 119_649_000 picoseconds. + Weight::from_parts(123_336_699, 7168) + // Standard Error: 822 + .saturating_add(Weight::from_parts(10_528, 0).saturating_mul(s.into())) + .saturating_add(RocksDbWeight::get().reads(3_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: `Msa::PublicKeyToMsaId` (r:1 w:0) + /// Proof: `Msa::PublicKeyToMsaId` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Schemas::SchemaInfos` (r:1 w:0) + /// Proof: `Schemas::SchemaInfos` (`max_values`: None, `max_size`: Some(15), added: 2490, mode: `MaxEncodedLen`) + /// Storage: UNKNOWN KEY `0x0763c98381dc89abe38627fe2f98cb7af1577fbf1d628fdddb4ebfc6e8d95fb1` (r:1 w:1) + /// Proof: UNKNOWN KEY `0x0763c98381dc89abe38627fe2f98cb7af1577fbf1d628fdddb4ebfc6e8d95fb1` (r:1 w:1) + fn delete_page_with_signature_v2() -> Weight { + // Proof Size summary in bytes: + // Measured: `1721` + // Estimated: `7166` + // Minimum execution time: 119_832_000 picoseconds. + Weight::from_parts(122_349_000, 7166) + .saturating_add(RocksDbWeight::get().reads(3_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } +} + + +#[cfg(test)] +mod tests { + use frame_support::{traits::Get, weights::Weight, dispatch::DispatchClass}; + use common_runtime::constants::{MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO}; + use common_runtime::weights::extrinsic_weights::ExtrinsicBaseWeight; + + #[allow(dead_code)] + struct BlockWeights; + impl Get for BlockWeights { + fn get() -> frame_system::limits::BlockWeights { + frame_system::limits::BlockWeights::builder() + .base_block(Weight::zero()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::non_mandatory(), |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .build_or_panic() + } + } + + #[test] + fn test_apply_item_actions_add() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 6077 + ); + } + #[test] + fn test_apply_item_actions_delete() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 16455 + ); + } + #[test] + fn test_upsert_page() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 7235 + ); + } + #[test] + fn test_delete_page() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 7233 + ); + } + #[test] + fn test_apply_item_actions_with_signature_v2_add() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 6084 + ); + } + #[test] + fn test_apply_item_actions_with_signature_v2_delete() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 16462 + ); + } + #[test] + fn test_upsert_page_with_signature_v2() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 7168 + ); + } + #[test] + fn test_delete_page_with_signature_v2() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 7166 + ); + } +} diff --git a/pallets/time-release/Cargo.toml b/pallets/time-release/Cargo.toml new file mode 100644 index 0000000000..472a5f2c84 --- /dev/null +++ b/pallets/time-release/Cargo.toml @@ -0,0 +1,59 @@ +[package] +name = "pallet-time-release" +description = "Provides scheduled balance freezing mechanism, in a *graded release* way." +authors = ["Frequency"] +edition = "2021" +homepage = "https://frequency.xyz" +license = "Apache-2.0" +repository = "https://github.com/frequency-chain/frequency/" +publish = false +version = "0.0.0" + +[dependencies] +parity-scale-codec = { workspace = true, features = ["max-encoded-len"] } +scale-info = { workspace = true, features = ["derive"] } + +frame-support = { workspace = true } +frame-system = { workspace = true } +sp-io = { workspace = true } +sp-runtime = { workspace = true } +frame-benchmarking = { workspace = true, optional = true } +sp-core = { workspace = true } +log = { workspace = true, default-features = false } + +[dev-dependencies] +common-runtime = { path = "../../runtime/common", default-features = false } +chrono = { workspace = true } +pallet-balances = { workspace = true } +common-primitives = { default-features = false, path = "../../common/primitives" } +pallet-scheduler = { workspace = true } +pallet-preimage = { workspace = true } + +[features] +default = ["std"] +std = [ + "parity-scale-codec/std", + "frame-support/std", + "frame-system/std", + "scale-info/std", + "sp-io/std", + "sp-runtime/std", + "sp-core/std", + "frame-benchmarking/std", + "common-primitives/std", + "pallet-balances/std", + "common-runtime/std", +] +runtime-benchmarks = [ + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "sp-runtime/runtime-benchmarks", + "frame-benchmarking/runtime-benchmarks", + "common-primitives/runtime-benchmarks", + "common-runtime/runtime-benchmarks", +] +try-runtime = ["frame-support/try-runtime", "frame-system/try-runtime"] +test = [] + +[lints] +workspace = true diff --git a/pallets/time-release/README.md b/pallets/time-release/README.md new file mode 100644 index 0000000000..c18c31dd04 --- /dev/null +++ b/pallets/time-release/README.md @@ -0,0 +1,57 @@ +# Time-Release Pallet + +Provides a way to schedule a balance freeze on an account. + +## Summary + +The `time-release` pallet employs a _graded release_ approach, which thaws a specific amount of balance every period of time, until all balance is thawed. + +Note: This pallet is a fork and modification of the [ORML-vesting](<[vesting](https://github.com/open-web3-stack/open-runtime-module-library/tree/master/vesting)>). + +### Release Schedule + +The schedule of a release on hold is described by the data structure `ReleaseSchedule`. Starting from the specified block number denoted as `start`, the schedule operates on a periodic basis. For each `period` amount of blocks, a designated `per_period` amount of balance is unfrozen. This process continues until the specified number of periods, denoted as `period_count`, is reached. It's important to highlight that in release schedules, the concept of time is measured in terms of block numbers. Accessing all `ReleaseSchedule` instances associated with an account is possible through querying the chain state. + +### Actions + +The Time-Release pallet provides for: + +- Creating a transfer with a schedule for release + - Transfers for scheduled release may be pre-scheduled +- Claiming balances that are released +- Governance updates of schedules + + +#### Creating a transfer with a schedule for release +In this model, tokens are transferred to a recipient's account using the `transfer` extrinsic and added to a "frozen" balance with a vesting schedule. Tokens in the frozen balance are available for claiming based on the defined vesting schedule they were initially transferred with. + +##### Pre-scheduled time-release transfers +Transfers intended for time-release may be pre-scheduled using the `schedule_transfer` extrinsic. In this workflow, tokens are locked in the _sender's_ account balance, in order to guarantee sufficient funds for a subsequent execution of the `transfer` extrinsic at a pre-determined block number. + +### Claiming balances that are released +When a particular amount of tokens become eligible for release based on their vesting schedule, those "thawed" tokens may be claimed by the recipient in one of two ways: +- Manual claim: by executing the `claim` extrinsic +- Opportunistic auto-claim: when new vesting schedules with token amounts are added to a recipient's account, any amounts then eligible for redemption are auto-claimed on the user's behalf + +## Interactions + +### Extrinsics + +| Name/Description | Caller | Payment | Key Events | Runtime Added | +| ------------------------------------------------------------------------------------------- | ----------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | +| `transfer`
Transfer tokens to another account with an unlock schedule | Token Account | Tokens | [`ReleaseScheduleAdded`](https://frequency-chain.github.io/frequency/pallet_time_release/pallet/enum.Event.html#variant.ReleaseScheduleAdded) | 24 | +| `schedule_transfer`
Lock tokens in a sender's account for later execution of the `execute_scheduled_named_transfer` extrinsic at a pre-determined block number | Token Account | Tokens | \| 144 +| `execute_scheduled_named_transfer`
Executes a scheduled transfer that was previously scheduled using the `schedule_transfer` extrinsic. | Scheduler pallet | Tokens | `ReleaseScheduleAdded` | 144 +| `claim`
Remove the lock on tokens for the calling account when the schedule allows | Account with Lock | Tokens | [`Claimed`](https://frequency-chain.github.io/frequency/pallet_time_release/pallet/enum.Event.html#variant.Claimed) | 24 | +| `claim_for`
Remove the lock on tokens for a different account when the schedule allows | Any Token Account | Tokens | [`Claimed`](https://frequency-chain.github.io/frequency/pallet_time_release/pallet/enum.Event.html#variant.Claimed) | 24 | +| `update_release_schedules`
Governance action to update existing schedules | Governance | Tokens | [`ReleaseSchedulesUpdated`](https://frequency-chain.github.io/frequency/pallet_time_release/pallet/enum.Event.html#variant.ReleaseSchedulesUpdated) | 24 | + +See [Rust Docs](https://frequency-chain.github.io/frequency/pallet_time_release/pallet/struct.Pallet.html) for more details. + +### State Queries + +| Name | Description | Query | Runtime Added | +| ---------------- | --------------------------------------------- | ------------------ | ------------- | +| Release Schedule | Retrieves the release schedule for an account | `releaseSchedules` | 24 | + +See the [Rust Docs](https://frequency-chain.github.io/frequency/pallet_time_release/pallet/storage_types/index.html) for additional state queries and details. diff --git a/pallets/time-release/src/benchmarking.rs b/pallets/time-release/src/benchmarking.rs new file mode 100644 index 0000000000..ccb23fc527 --- /dev/null +++ b/pallets/time-release/src/benchmarking.rs @@ -0,0 +1,238 @@ +#![allow(clippy::unwrap_used)] +use super::*; + +use crate::Pallet as TimeReleasePallet; + +use frame_benchmarking::{account, v2::*, whitelist_account, whitelisted_caller}; +use frame_support::traits::fungible::InspectHold; +use frame_system::{pallet_prelude::BlockNumberFor, RawOrigin}; +use sp_runtime::{traits::TrailingZeroInput, SaturatedConversion}; +extern crate alloc; +use alloc::vec; + +pub const DOLLARS: u32 = 10u32.saturating_pow(8u32); + +pub use crate::types::ReleaseSchedule; +pub type Schedule = ReleaseSchedule, BalanceOf>; + +const SEED: u32 = 0; + +fn set_balance(who: &T::AccountId, balance: BalanceOf) { + let actual_deposit = T::Currency::set_balance(who, balance.saturated_into()); + assert_eq!(balance, actual_deposit); +} + +fn lookup_of_account( + who: T::AccountId, +) -> <::Lookup as StaticLookup>::Source { + ::Lookup::unlookup(who) +} + +#[benchmarks( + where + ::RuntimeOrigin: From> + From<::RuntimeOrigin>, +)] +mod benchmarks { + use super::*; + + #[benchmark] + fn transfer() -> Result<(), BenchmarkError> { + let schedule = Schedule:: { + start: 0u32.into(), + period: 2u32.into(), + period_count: 3, + per_period: T::MinReleaseTransfer::get(), + }; + + let from = T::AccountId::decode(&mut TrailingZeroInput::zeroes()).unwrap(); + whitelist_account!(from); + let total = schedule.total_amount().unwrap(); + set_balance::(&from, total * DOLLARS.into()); + + let to: T::AccountId = account("to", 1, SEED); + let to_lookup = lookup_of_account::(to.clone()); + + #[extrinsic_call] + _(RawOrigin::Signed(from), to_lookup, schedule.clone()); + + assert_eq!(T::Currency::total_balance(&to), schedule.total_amount().unwrap()); + Ok(()) + } + + #[benchmark] + fn schedule_named_transfer() -> Result<(), BenchmarkError> { + let schedule = Schedule:: { + start: 0u32.into(), + period: 2u32.into(), + period_count: 3, + per_period: T::MinReleaseTransfer::get(), + }; + + let from = T::AccountId::decode(&mut TrailingZeroInput::zeroes()).unwrap(); + whitelist_account!(from); + set_balance::(&from, DOLLARS.into()); + + let to: T::AccountId = account("to", 1, SEED); + let to_lookup = lookup_of_account::(to.clone()); + let when = 10u32.into(); + + #[extrinsic_call] + _(RawOrigin::Signed(from.clone()), [1u8; 32], to_lookup, schedule.clone(), when); + + assert_eq!( + T::Currency::balance_on_hold(&HoldReason::TimeReleaseScheduledVesting.into(), &from), + schedule.total_amount().unwrap() + ); + Ok(()) + } + + #[benchmark] + fn execute_scheduled_named_transfer() -> Result<(), BenchmarkError> { + let schedule = Schedule:: { + start: 0u32.into(), + period: 2u32.into(), + period_count: 3, + per_period: DOLLARS.into(), + }; + + let from = T::AccountId::decode(&mut TrailingZeroInput::zeroes()).unwrap(); + let to: T::AccountId = account("to", 1, SEED); + + whitelist_account!(from); + + // set hold balance of sender + let total = schedule.total_amount().unwrap(); + set_balance::(&from, total * 2u32.into() * DOLLARS.into()); + let _ = T::Currency::hold( + &HoldReason::TimeReleaseScheduledVesting.into(), + &from, + total * DOLLARS.into(), + ); + + let to_lookup = lookup_of_account::(to.clone()); + let origin = Origin::::TimeRelease(from.clone()); + + #[extrinsic_call] + _(origin, [1u8; 32], to_lookup, schedule.clone()); + + assert_eq!(T::Currency::total_balance(&to), schedule.total_amount().unwrap()); + Ok(()) + } + + #[benchmark] + fn claim(i: Linear<1, { T::MaxReleaseSchedules::get() }>) -> Result<(), BenchmarkError> { + let mut schedule = Schedule:: { + start: 0u32.into(), + period: 2u32.into(), + period_count: 3, + per_period: T::MinReleaseTransfer::get(), + }; + + let from = T::AccountId::decode(&mut TrailingZeroInput::zeroes()).unwrap(); + set_balance::( + &from, + schedule.total_amount().unwrap() * BalanceOf::::from(i) + DOLLARS.into(), + ); + + let to: T::AccountId = whitelisted_caller(); + let to_lookup = lookup_of_account::(to.clone()); + + for _ in 0..i { + schedule.start = i.into(); + TimeReleasePallet::::transfer( + RawOrigin::Signed(from.clone()).into(), + to_lookup.clone(), + schedule.clone(), + )?; + } + T::BlockNumberProvider::set_block_number(schedule.end().unwrap() + 1u32.into()); + + #[extrinsic_call] + _(RawOrigin::Signed(to.clone())); + + assert_eq!( + T::Currency::balance(&to), + schedule.total_amount().unwrap() * BalanceOf::::from(i), + ); + Ok(()) + } + + #[benchmark] + fn update_release_schedules( + i: Linear<1, { T::MaxReleaseSchedules::get() }>, + ) -> Result<(), BenchmarkError> { + let mut schedule = Schedule:: { + start: 0u32.into(), + period: 2u32.into(), + period_count: 3, + per_period: T::MinReleaseTransfer::get(), + }; + + let to: T::AccountId = account("to", 0, SEED); + set_balance::(&to, schedule.total_amount().unwrap() * BalanceOf::::from(i)); + let to_lookup = lookup_of_account::(to.clone()); + + let mut schedules = vec![]; + for _ in 0..i { + schedule.start = i.into(); + schedules.push(schedule.clone()); + } + + #[extrinsic_call] + _(RawOrigin::Root, to_lookup, schedules); + + assert_eq!( + T::Currency::balance(&to), + schedule.total_amount().unwrap() * BalanceOf::::from(i) + ); + Ok(()) + } + + #[benchmark] + fn cancel_scheduled_named_transfer( + i: Linear<1, { T::MaxReleaseSchedules::get() }>, + ) -> Result<(), BenchmarkError> { + let mut schedule = Schedule:: { + start: 0u32.into(), + period: 2u32.into(), + period_count: 2, + per_period: T::MinReleaseTransfer::get(), + }; + + let from = T::AccountId::decode(&mut TrailingZeroInput::zeroes()).unwrap(); + set_balance::( + &from, + schedule.total_amount().unwrap() * BalanceOf::::from(i) + DOLLARS.into(), + ); + + let to: T::AccountId = whitelisted_caller(); + let to_lookup = lookup_of_account::(to.clone()); + + for j in 0..i { + schedule.start = i.into(); + + TimeReleasePallet::::schedule_named_transfer( + RawOrigin::Signed(from.clone()).into(), + [j as u8; 32], + to_lookup.clone(), + schedule.clone(), + 4u32.into(), + )?; + } + + let origin = RawOrigin::Signed(from.clone()); + let schedule_name = [0u8; 32]; + + #[extrinsic_call] + _(origin, schedule_name); + + ensure!(ScheduleReservedAmounts::::get([0u8; 32]).is_none(), "Schedule not canceled"); + Ok(()) + } + + impl_benchmark_test_suite!( + TimeReleasePallet, + crate::mock::ExtBuilder::build(), + crate::mock::Test + ); +} diff --git a/pallets/time-release/src/lib.rs b/pallets/time-release/src/lib.rs new file mode 100644 index 0000000000..d78aa1dc98 --- /dev/null +++ b/pallets/time-release/src/lib.rs @@ -0,0 +1,794 @@ +//! Transfer Funds as Frozen with a Time Delayed Release +//! +//! ## Quick Links +//! - [Configuration: `Config`](Config) +//! - [Extrinsics: `Call`](Call) +//! - [Event Enum: `Event`](Event) +//! - [Error Enum: `Error`](Error) +#![doc = include_str!("../README.md")] +// Substrate macros are tripping the clippy::expect_used lint. +#![allow(clippy::expect_used)] +#![cfg_attr(not(feature = "std"), no_std)] +// Strong Documentation Lints +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + missing_docs +)] + +use frame_support::{ + dispatch::DispatchResult, + ensure, + pallet_prelude::*, + traits::{ + tokens::{ + fungible::{Inspect as InspectFungible, InspectHold, Mutate, MutateFreeze, MutateHold}, + Balance, + Fortitude::Polite, + Precision::Exact, + Preservation, + Restriction::Free, + }, + BuildGenesisConfig, EnsureOrigin, Get, + }, + BoundedVec, +}; +use frame_system::{ensure_root, ensure_signed, pallet_prelude::*}; +use sp_runtime::{ + traits::{BlockNumberProvider, CheckedAdd, StaticLookup, Zero}, + ArithmeticError, +}; +extern crate alloc; +use alloc::{boxed::Box, vec::Vec}; + +#[cfg(test)] +mod mock; +#[cfg(test)] +mod tests; + +pub mod types; +pub use types::*; + +pub mod weights; +pub use weights::*; + +#[cfg(feature = "runtime-benchmarks")] +mod benchmarking; + +pub use module::*; + +#[frame_support::pallet] +pub mod module { + use frame_support::{dispatch::PostDispatchInfo, traits::fungible::InspectHold}; + use sp_runtime::traits::Dispatchable; + + use super::*; + + pub(crate) type BalanceOf = <::Currency as InspectFungible< + ::AccountId, + >>::Balance; + pub(crate) type ReleaseScheduleOf = ReleaseSchedule, BalanceOf>; + + /// Scheduled item used for configuring genesis. + pub type ScheduledItem = ( + ::AccountId, + BlockNumberFor, + BlockNumberFor, + u32, + BalanceOf, + ); + + /// A reason for freezing funds. + /// Creates a freeze reason for this pallet that is aggregated by `construct_runtime`. + #[pallet::composite_enum] + pub enum FreezeReason { + /// Funds are currently frozen and are not yet liquid. + TimeReleaseVesting, + } + + /// A reason for holding funds + /// Create a hold reason for this pallet that is aggregated by 'contract_runtime'. + #[pallet::composite_enum] + pub enum HoldReason { + /// Funds reserved/held for scheduled transfers + TimeReleaseScheduledVesting, + } + + /// the storage version for this pallet + pub const STORAGE_VERSION: StorageVersion = StorageVersion::new(2); + + /// Custom origin to be used when scheduling a transfer + #[derive( + PartialEq, + Eq, + Clone, + MaxEncodedLen, + Encode, + Decode, + DecodeWithMemTracking, + TypeInfo, + RuntimeDebug, + )] + #[pallet::origin] + pub enum Origin { + /// A scheduled release triggered by the TimeRelease pallet. + TimeRelease(T::AccountId), + } + + #[pallet::config] + pub trait Config: frame_system::Config { + /// The overarching event type. + type RuntimeEvent: From> + IsType<::RuntimeEvent>; + + /// The overarching freeze reason. + type RuntimeFreezeReason: From; + + /// Overarching hold reason. + type RuntimeHoldReason: From; + + /// runtime origin + type RuntimeOrigin: From> + From<::RuntimeOrigin>; + + /// We need MaybeSerializeDeserialize because of the genesis config. + type Balance: Balance + MaybeSerializeDeserialize; + + /// The currency trait used to set a freeze on a balance. + type Currency: MutateFreeze + + InspectFungible + + Mutate + + MutateHold + + InspectHold; + + #[pallet::constant] + /// The minimum amount transferred to call `transfer`. + type MinReleaseTransfer: Get>; + + /// Required origin for time-release transfer. + type TransferOrigin: EnsureOrigin< + ::RuntimeOrigin, + Success = Self::AccountId, + >; + + /// Timerelase origin + type TimeReleaseOrigin: EnsureOrigin< + ::RuntimeOrigin, + Success = Self::AccountId, + >; + + /// Weight information for extrinsics in this module. + type WeightInfo: WeightInfo; + + /// The maximum release schedules. + type MaxReleaseSchedules: Get; + + /// The block-number provider. + type BlockNumberProvider: BlockNumberProvider>; + + /// The aggregate call type + type RuntimeCall: Parameter + + Dispatchable< + RuntimeOrigin = ::RuntimeOrigin, + PostInfo = PostDispatchInfo, + > + From> + + IsType<::RuntimeCall>; + + /// The scheduler provider + type SchedulerProvider: SchedulerProviderTrait< + ::RuntimeOrigin, + BlockNumberFor, + ::RuntimeCall, + >; + } + + #[pallet::error] + pub enum Error { + /// Release period is zero + ZeroReleasePeriod, + /// Period-count is zero + ZeroReleasePeriodCount, + /// Insufficient amount of balance to freeze + InsufficientBalanceToFreeze, + /// This account have too many release schedules + TooManyReleaseSchedules, + /// The transfer amount is too low + AmountLow, + /// Failed because the maximum release schedules was exceeded + MaxReleaseSchedulesExceeded, + /// A scheduled transfer with the same identifier already exists. + DuplicateScheduleName, + /// No scheduled transfer found for the given identifier. + NotFound, + } + + #[pallet::event] + #[pallet::generate_deposit(fn deposit_event)] + pub enum Event { + /// Added new release schedule. + ReleaseScheduleAdded { + /// The account-id of the sender. + from: T::AccountId, + /// The account-id of the receiver. + to: T::AccountId, + /// The schedule indicating when transfer releases happen. + release_schedule: ReleaseScheduleOf, + }, + /// Claimed release. + Claimed { + /// The account-id of the claimed amount. + who: T::AccountId, + /// The amount claimed. + amount: BalanceOf, + }, + /// Updated release schedules. + ReleaseSchedulesUpdated { + /// The account-id for which a release schedule updated was made for. + who: T::AccountId, + }, + } + + /// Release schedules of an account. + /// + /// ReleaseSchedules: `map AccountId => Vec` + #[pallet::storage] + pub type ReleaseSchedules = StorageMap< + _, + Blake2_128Concat, + T::AccountId, + BoundedVec, T::MaxReleaseSchedules>, + ValueQuery, + >; + + /// Tracks the amount of funds reserved for each scheduled transfer, keyed by the transfer's identifier. + #[pallet::storage] + pub type ScheduleReservedAmounts = + StorageMap<_, Twox64Concat, ScheduleName, BalanceOf>; + + #[pallet::genesis_config] + #[derive(frame_support::DefaultNoBound)] + pub struct GenesisConfig { + /// Phantom data. + #[serde(skip)] + pub _config: core::marker::PhantomData, + /// A list of schedules to include. + pub schedules: Vec>, + } + + #[pallet::genesis_build] + impl BuildGenesisConfig for GenesisConfig { + fn build(&self) { + self.schedules + .iter() + .for_each(|(who, start, period, period_count, per_period)| { + let mut bounded_schedules = ReleaseSchedules::::get(who); + bounded_schedules + .try_push(ReleaseSchedule { + start: *start, + period: *period, + period_count: *period_count, + per_period: *per_period, + }) + .expect("Max release schedules exceeded"); + let total_amount = bounded_schedules + .iter() + .try_fold::<_, _, Result, DispatchError>>( + Zero::zero(), + |acc_amount, schedule| { + let amount = ensure_valid_release_schedule::(schedule)?; + acc_amount + .checked_add(&amount) + .ok_or_else(|| ArithmeticError::Overflow.into()) + }, + ) + .expect("Invalid release schedule"); + + assert!( + T::Currency::balance(who) >= total_amount, + "Account does not have enough balance." + ); + + T::Currency::set_freeze( + &FreezeReason::TimeReleaseVesting.into(), + who, + total_amount, + ) + .expect("Failed to set freeze"); + ReleaseSchedules::::insert(who, bounded_schedules); + }); + } + } + + #[pallet::pallet] + #[pallet::storage_version(STORAGE_VERSION)] + pub struct Pallet(_); + + #[pallet::hooks] + impl Hooks> for Pallet {} + + #[pallet::call] + impl Pallet { + /// Claim thawed balances. + /// + /// # Events + /// * [`Event::Claimed`] + /// + #[pallet::call_index(0)] + #[pallet::weight(T::WeightInfo::claim(::MaxReleaseSchedules::get() / 2))] + pub fn claim(origin: OriginFor) -> DispatchResult { + let who = ensure_signed(origin)?; + let frozen_amount = Self::claim_frozen_balance(&who)?; + + Self::deposit_event(Event::Claimed { who, amount: frozen_amount }); + Ok(()) + } + + /// Add a new release schedule for an account. + /// + /// # Events + /// * [`Event::ReleaseScheduleAdded] + /// + /// # Errors + /// + /// * [`Error::InsufficientBalanceToFreeze] - Insufficient amount of balance to freeze. + /// * [`Error::MaxReleaseSchedulesExceeded] - Failed because the maximum release schedules was exceeded- + /// * [`ArithmeticError::Overflow] - Failed because of an overflow. + /// + #[pallet::call_index(1)] + #[pallet::weight(T::WeightInfo::transfer())] + pub fn transfer( + origin: OriginFor, + dest: ::Source, + schedule: ReleaseScheduleOf, + ) -> DispatchResult { + let from = T::TransferOrigin::ensure_origin(origin)?; + let to = T::Lookup::lookup(dest)?; + + let total_amount = schedule.total_amount().ok_or(ArithmeticError::Overflow)?; + Self::ensure_sufficient_free_balance(&from, &to, total_amount)?; + + Self::finalize_vesting_transfer( + &from, + &to, + schedule.clone(), + Self::transfer_from_free_balance, + )?; + + Self::deposit_event(Event::ReleaseScheduleAdded { + from, + to, + release_schedule: schedule, + }); + Ok(()) + } + + /// Update all release schedules under an account, `root` origin required. + /// + /// # Events + /// * [`Event::ReleaseSchedulesUpdated] - Updated release schedules. + /// + /// # Errors + /// + /// * [`Error::InsufficientBalanceToFreeze] - Insufficient amount of balance to freeze. + /// * [`Error::MaxReleaseSchedulesExceeded] - Failed because the maximum release schedules was exceeded- + /// * [`ArithmeticError::Overflow] - Failed because of an overflow. + /// + #[pallet::call_index(2)] + #[pallet::weight(T::WeightInfo::update_release_schedules(release_schedules.len() as u32))] + pub fn update_release_schedules( + origin: OriginFor, + who: ::Source, + release_schedules: Vec>, + ) -> DispatchResult { + ensure_root(origin)?; + + let account = T::Lookup::lookup(who)?; + Self::do_update_release_schedules(&account, release_schedules)?; + + Self::deposit_event(Event::ReleaseSchedulesUpdated { who: account }); + Ok(()) + } + + /// Claim thawed balances on behalf for an account. + /// + /// # Events + /// * [`Event::Claimed`] + /// + #[pallet::call_index(3)] + #[pallet::weight(T::WeightInfo::claim(::MaxReleaseSchedules::get() / 2))] + pub fn claim_for( + origin: OriginFor, + dest: ::Source, + ) -> DispatchResult { + ensure_signed(origin)?; + let who = T::Lookup::lookup(dest)?; + let frozen_amount = Self::claim_frozen_balance(&who)?; + + Self::deposit_event(Event::Claimed { who, amount: frozen_amount }); + Ok(()) + } + + /// This function schedules a transfer by calling the `Scheduler` pallet's `schedule` function. + /// The transfer will be executed at the specified block number. + /// + /// * [`Error::InsufficientBalanceToFreeze`] - Insufficient amount of balance to freeze. + /// * [`Error::MaxReleaseSchedulesExceeded`] - Failed because the maximum release schedules was exceeded- + /// * [`ArithmeticError::Overflow] - Failed because of an overflow. + /// + #[pallet::call_index(4)] + #[pallet::weight(T::WeightInfo::schedule_named_transfer().saturating_add(T::WeightInfo::execute_scheduled_named_transfer()))] + pub fn schedule_named_transfer( + origin: OriginFor, + id: ScheduleName, + dest: ::Source, + schedule: ReleaseScheduleOf, + when: BlockNumberFor, + ) -> DispatchResult { + let from = T::TransferOrigin::ensure_origin(origin)?; + let to = T::Lookup::lookup(dest.clone())?; + + ensure!( + !ScheduleReservedAmounts::::contains_key(id), + Error::::DuplicateScheduleName + ); + + let total_amount = Self::validate_and_get_schedule_amount(&schedule)?; + Self::ensure_sufficient_free_balance(&from, &to, total_amount)?; + + Self::hold_funds_for_scheduled_vesting( + &from, + schedule.total_amount().ok_or(ArithmeticError::Overflow)?, + )?; + + Self::insert_reserved_amount( + id, + schedule.total_amount().ok_or(ArithmeticError::Overflow)?, + )?; + + Self::schedule_transfer_for(id, from.clone(), dest, schedule, when)?; + + Ok(()) + } + + /// Cancels a scheduled transfer by its unique identifier. + /// Releases any funds held for the specified transfer. + #[pallet::call_index(6)] + #[pallet::weight(T::WeightInfo::cancel_scheduled_named_transfer(::MaxReleaseSchedules::get() / 2))] + pub fn cancel_scheduled_named_transfer( + origin: OriginFor, + id: ScheduleName, + ) -> DispatchResult { + let who = T::TransferOrigin::ensure_origin(origin)?; + + T::SchedulerProvider::cancel(Origin::::TimeRelease(who.clone()).into(), id)?; + + Self::release_reserved_funds_by_id(id, &who)?; + + Ok(()) + } + + /// Execute a scheduled transfer + /// + /// This function is called to execute a transfer that was previously scheduled. + /// It ensures that the origin is valid, the destination account exists, and the + /// release schedule is valid. It then finalizes the vesting transfer from the + /// hold balance and emits an event indicating that the release schedule was added. + /// + /// # Arguments + /// + /// * `origin` - The origin of the call, which must be the TimeRelease origin. + /// * `dest` - The destination account to which the funds will be transferred. + /// * `schedule` - The release schedule that specifies the amount and timing of the transfer. + /// + /// # Errors + /// + /// * [`ArithmeticError::Overflow`] - If the total amount in the schedule overflows. + /// * [`Error::InsufficientBalanceToFreeze`] - If the hold balance is insufficient. + /// * [`Error::ZeroReleasePeriod`] - If the release period is zero. + /// * [`Error::ZeroReleasePeriodCount`] - If the release period count is zero. + /// * [`Error::AmountLow`] - If the total amount is below the minimum release transfer amount. + /// + /// # Events + /// + /// * [`Event::ReleaseScheduleAdded`] - Indicates that a new release schedule was added. + #[pallet::call_index(5)] + #[pallet::weight(T::WeightInfo::execute_scheduled_named_transfer())] + pub fn execute_scheduled_named_transfer( + origin: OriginFor, + id: ScheduleName, + dest: ::Source, + schedule: ReleaseScheduleOf, + ) -> DispatchResult { + let from = T::TimeReleaseOrigin::ensure_origin(origin)?; + let to = T::Lookup::lookup(dest)?; + + let total_amount = Self::validate_and_get_schedule_amount(&schedule)?; + Self::ensure_sufficient_hold_balance(&from, total_amount)?; + + Self::finalize_vesting_transfer( + &from, + &to, + schedule.clone(), + Self::transfer_from_hold_balance, + )?; + + ScheduleReservedAmounts::::remove(id); + + Self::deposit_event(Event::ReleaseScheduleAdded { + from, + to, + release_schedule: schedule, + }); + + Ok(()) + } + } +} + +impl Pallet { + fn claim_frozen_balance(who: &T::AccountId) -> Result, DispatchError> { + let frozen = Self::prune_and_get_frozen_balance(who); + if frozen.is_zero() { + Self::delete_freeze(who)?; + } else { + Self::update_freeze(who, frozen)?; + } + + Ok(frozen) + } + + /// Deletes schedules that have released all funds up to a block-number. + fn prune_schedules_for( + who: &T::AccountId, + block_number: BlockNumberFor, + ) -> BoundedVec, T::MaxReleaseSchedules> { + let mut schedules = ReleaseSchedules::::get(who); + schedules.retain(|schedule| !schedule.frozen_amount(block_number).is_zero()); + + if schedules.is_empty() { + ReleaseSchedules::::remove(who); + } else { + Self::set_schedules_for(who, schedules.clone()); + } + + schedules + } + + /// Returns frozen balance based on current block number. + fn prune_and_get_frozen_balance(who: &T::AccountId) -> BalanceOf { + let now = T::BlockNumberProvider::current_block_number(); + + let schedules = Self::prune_schedules_for(who, now); + + let total = schedules + .iter() + .fold(BalanceOf::::zero(), |acc, schedule| acc + schedule.frozen_amount(now)); + + total + } + + fn schedule_transfer_for( + id: ScheduleName, + from: T::AccountId, + dest: ::Source, + schedule: ReleaseScheduleOf, + when: BlockNumberFor, + ) -> DispatchResult { + let schedule_call = + ::RuntimeCall::from(Call::::execute_scheduled_named_transfer { + id, + dest, + schedule, + }); + + T::SchedulerProvider::schedule( + Origin::::TimeRelease(from).into(), + id, + when, + Box::new(schedule_call), + )?; + + Ok(()) + } + + fn do_update_release_schedules( + who: &T::AccountId, + schedules: Vec>, + ) -> DispatchResult { + let bounded_schedules = + BoundedVec::, T::MaxReleaseSchedules>::try_from(schedules) + .map_err(|_| Error::::MaxReleaseSchedulesExceeded)?; + + // empty release schedules cleanup the storage and thaw the funds + if bounded_schedules.is_empty() { + Self::delete_release_schedules(who)?; + return Ok(()); + } + + let total_amount = + bounded_schedules.iter().try_fold::<_, _, Result, DispatchError>>( + Zero::zero(), + |acc_amount, schedule| { + let amount = ensure_valid_release_schedule::(schedule)?; + acc_amount.checked_add(&amount).ok_or_else(|| ArithmeticError::Overflow.into()) + }, + )?; + + ensure!(T::Currency::balance(who) >= total_amount, Error::::InsufficientBalanceToFreeze,); + + Self::update_freeze(who, total_amount)?; + Self::set_schedules_for(who, bounded_schedules); + + Ok(()) + } + + fn update_freeze(who: &T::AccountId, frozen: BalanceOf) -> DispatchResult { + T::Currency::set_freeze(&FreezeReason::TimeReleaseVesting.into(), who, frozen)?; + Ok(()) + } + + fn hold_funds_for_scheduled_vesting( + who: &T::AccountId, + hold_amount: BalanceOf, + ) -> DispatchResult { + T::Currency::hold(&HoldReason::TimeReleaseScheduledVesting.into(), who, hold_amount)?; + Ok(()) + } + + fn release_reserved_funds_by_id(id: ScheduleName, who: &T::AccountId) -> DispatchResult { + let amount = ScheduleReservedAmounts::::take(id).ok_or(Error::::NotFound)?; + + T::Currency::release(&HoldReason::TimeReleaseScheduledVesting.into(), who, amount, Exact)?; + + Ok(()) + } + + fn insert_reserved_amount(id: ScheduleName, amount: BalanceOf) -> DispatchResult { + ScheduleReservedAmounts::::insert(id, amount); + + Ok(()) + } + + fn delete_freeze(who: &T::AccountId) -> DispatchResult { + T::Currency::thaw(&FreezeReason::TimeReleaseVesting.into(), who)?; + Ok(()) + } + + fn set_schedules_for( + who: &T::AccountId, + schedules: BoundedVec, T::MaxReleaseSchedules>, + ) { + ReleaseSchedules::::insert(who, schedules); + } + + fn delete_release_schedules(who: &T::AccountId) -> DispatchResult { + >::remove(who); + Self::delete_freeze(who)?; + Ok(()) + } + + fn hold_balance_for(who: &T::AccountId) -> BalanceOf { + T::Currency::balance_on_hold(&HoldReason::TimeReleaseScheduledVesting.into(), who) + } + + fn ensure_sufficient_hold_balance(from: &T::AccountId, amount: BalanceOf) -> DispatchResult { + ensure!(Self::hold_balance_for(from) >= amount, Error::::InsufficientBalanceToFreeze); + + Ok(()) + } + + fn validate_and_get_schedule_amount( + schedule: &ReleaseScheduleOf, + ) -> Result, DispatchError> { + ensure_valid_release_schedule::(schedule) + } + + fn append_release_schedule( + recipient: &T::AccountId, + schedule: ReleaseScheduleOf, + ) -> DispatchResult { + >::try_append(recipient, schedule) + .map_err(|_| Error::::MaxReleaseSchedulesExceeded)?; + Ok(()) + } + + fn transfer_from_free_balance( + from: &T::AccountId, + to: &T::AccountId, + schedule_amount: BalanceOf, + ) -> DispatchResult { + T::Currency::transfer(from, to, schedule_amount, Preservation::Expendable)?; + + Ok(()) + } + + /// Transfers the specified amount from the hold balance of the `from` account to the `to` account. + /// + /// # Arguments + /// + /// * `from` - The account from which the funds will be transferred. + /// * `to` - The account to which the funds will be transferred. + /// * `schedule_amount` - The amount to be transferred. + /// + /// # Errors + /// + /// * `ArithmeticError::Overflow` - If the transfer amount overflows. + fn transfer_from_hold_balance( + from: &T::AccountId, + to: &T::AccountId, + schedule_amount: BalanceOf, + ) -> DispatchResult { + // Transfer held funds into a destination account. + // + // If `mode` is `OnHold`, then the destination account must already exist and the assets + // transferred will still be on hold in the destination account. If not, then the destination + // account need not already exist, but must be creatable. + // + // If `precision` is `BestEffort`, then an amount less than `amount` may be transferred without + // error. + // + // If `force` is `Force`, then other fund-locking mechanisms may be disregarded. It should be + // left as `Polite` in most circumstances, but when you want the same power as a `slash`, it + // may be `Force`. + // + // The actual amount transferred is returned, or `Err` in the case of error and nothing is + // changed. + T::Currency::transfer_on_hold( + &HoldReason::TimeReleaseScheduledVesting.into(), + from, + to, + schedule_amount, + Exact, + Free, + Polite, + )?; + + Ok(()) + } + + fn ensure_sufficient_free_balance( + from: &T::AccountId, + to: &T::AccountId, + amount: BalanceOf, + ) -> DispatchResult { + if to == from { + ensure!(T::Currency::balance(from) >= amount, Error::::InsufficientBalanceToFreeze,); + } + + Ok(()) + } + + fn finalize_vesting_transfer( + from: &T::AccountId, + to: &T::AccountId, + schedule: ReleaseScheduleOf, + transfer_fn: fn(&T::AccountId, &T::AccountId, BalanceOf) -> DispatchResult, + ) -> DispatchResult { + let schedule_amount = Self::validate_and_get_schedule_amount(&schedule)?; + + let total_amount = Self::prune_and_get_frozen_balance(to) + .checked_add(&schedule_amount) + .ok_or(ArithmeticError::Overflow)?; + + transfer_fn(from, to, schedule_amount)?; + Self::update_freeze(to, total_amount)?; + + Self::append_release_schedule(to, schedule)?; + + Ok(()) + } +} + +/// Returns `Ok(total_total)` if valid schedule, or error. +fn ensure_valid_release_schedule( + schedule: &ReleaseScheduleOf, +) -> Result, DispatchError> { + ensure!(!schedule.period.is_zero(), Error::::ZeroReleasePeriod); + ensure!(!schedule.period_count.is_zero(), Error::::ZeroReleasePeriodCount); + ensure!(schedule.end().is_some(), ArithmeticError::Overflow); + + let total_total = schedule.total_amount().ok_or(ArithmeticError::Overflow)?; + + ensure!(total_total >= T::MinReleaseTransfer::get(), Error::::AmountLow); + + Ok(total_total) +} diff --git a/pallets/time-release/src/mock.rs b/pallets/time-release/src/mock.rs new file mode 100644 index 0000000000..d585b10c9c --- /dev/null +++ b/pallets/time-release/src/mock.rs @@ -0,0 +1,264 @@ +//! Mocks for the Time-release module. + +use super::*; +use frame_support::{ + construct_runtime, parameter_types, + traits::{ + schedule::LOWEST_PRIORITY, ConstU32, ConstU64, EitherOfDiverse, EnsureOrigin, + EqualPrivilegeOnly, Everything, + }, +}; +use frame_system::{EnsureRoot, RawOrigin}; +use sp_core::H256; +use sp_runtime::{traits::IdentityLookup, BuildStorage, Perbill}; + +use crate as pallet_time_release; + +pub type AccountId = u128; +impl frame_system::Config for Test { + type RuntimeOrigin = RuntimeOrigin; + type RuntimeCall = RuntimeCall; + type Nonce = u64; + type Hash = H256; + type Hashing = ::sp_runtime::traits::BlakeTwo256; + type AccountId = AccountId; + type Lookup = IdentityLookup; + type RuntimeEvent = RuntimeEvent; + type Block = Block; + type BlockHashCount = ConstU32<250>; + type BlockWeights = (); + type BlockLength = (); + type Version = (); + type PalletInfo = PalletInfo; + type AccountData = pallet_balances::AccountData; + type OnNewAccount = (); + type OnKilledAccount = (); + type DbWeight = (); + type RuntimeTask = RuntimeTask; + type BaseCallFilter = Everything; + type SystemWeightInfo = (); + type SS58Prefix = (); + type OnSetCode = (); + type MaxConsumers = ConstU32<16>; + type SingleBlockMigrations = (); + type MultiBlockMigrator = (); + type PreInherents = (); + type PostInherents = (); + type PostTransactions = (); + type ExtensionsWeightInfo = (); +} + +type Balance = u64; + +impl pallet_balances::Config for Test { + type Balance = Balance; + type DustRemoval = (); + type RuntimeEvent = RuntimeEvent; + type ExistentialDeposit = ConstU64<1>; + type AccountStore = frame_system::Pallet; + type MaxLocks = (); + type MaxReserves = (); + type ReserveIdentifier = [u8; 8]; + type WeightInfo = (); + type FreezeIdentifier = RuntimeFreezeReason; + type MaxFreezes = ConstU32<1>; + type RuntimeHoldReason = RuntimeHoldReason; + type RuntimeFreezeReason = RuntimeFreezeReason; + type DoneSlashHandler = (); +} + +impl pallet_preimage::Config for Test { + type RuntimeEvent = RuntimeEvent; + type WeightInfo = (); + type Currency = (); + type ManagerOrigin = EnsureRoot; + type Consideration = (); +} + +parameter_types! { + pub BlockWeights: frame_system::limits::BlockWeights = + frame_system::limits::BlockWeights::simple_max( + Weight::from_parts(2_000_000_000_000, u64::MAX), + ); +} + +parameter_types! { + pub MaximumSchedulerWeight: Weight = Perbill::from_percent(80) * + BlockWeights::get().max_block; +} + +pub struct EnsureTimeReleaseOrigin; + +impl EnsureOrigin for EnsureTimeReleaseOrigin { + type Success = AccountId; + + fn try_origin(o: RuntimeOrigin) -> Result { + match o.clone().into() { + Ok(pallet_time_release::Origin::::TimeRelease(who)) => Ok(who), + _ => Err(o), + } + } + + #[cfg(feature = "runtime-benchmarks")] + fn try_successful_origin() -> Result { + Ok(RuntimeOrigin::root()) + } +} + +impl pallet_scheduler::Config for Test { + type BlockNumberProvider = System; + type RuntimeEvent = RuntimeEvent; + type RuntimeOrigin = RuntimeOrigin; + type PalletsOrigin = OriginCaller; + type RuntimeCall = RuntimeCall; + type MaximumWeight = MaximumSchedulerWeight; + /// Origin to schedule or cancel calls + /// Set to Root or a simple majority of the Frequency Council + type ScheduleOrigin = EitherOfDiverse>; + type MaxScheduledPerBlock = ConstU32<50>; + type WeightInfo = common_runtime::weights::pallet_scheduler::SubstrateWeight; + type OriginPrivilegeCmp = EqualPrivilegeOnly; + type Preimages = Preimage; +} + +pub struct EnsureAliceOrBob; +impl EnsureOrigin for EnsureAliceOrBob { + type Success = AccountId; + + fn try_origin(o: RuntimeOrigin) -> Result { + Into::, RuntimeOrigin>>::into(o).and_then(|o| match o { + RawOrigin::Signed(ALICE) => Ok(ALICE), + RawOrigin::Signed(BOB) => Ok(BOB), + r => Err(RuntimeOrigin::from(r)), + }) + } + + #[cfg(feature = "runtime-benchmarks")] + fn try_successful_origin() -> Result { + let zero_account_id = + AccountId::decode(&mut sp_runtime::traits::TrailingZeroInput::zeroes()) + .map_err(|_| ())?; + + Ok(RuntimeOrigin::from(RawOrigin::Signed(zero_account_id))) + } +} + +// Needs parameter_types! for the impls below +parameter_types! { + pub static MockBlockNumberProvider: u32 = 0; +} + +impl BlockNumberProvider for MockBlockNumberProvider { + type BlockNumber = u32; + + fn current_block_number() -> Self::BlockNumber { + Self::get() + } +} + +impl Config for Test { + type RuntimeEvent = RuntimeEvent; + type RuntimeOrigin = RuntimeOrigin; + type RuntimeHoldReason = RuntimeHoldReason; + type Currency = PalletBalances; + type MinReleaseTransfer = ConstU64<1u64>; + type TransferOrigin = EnsureAliceOrBob; + type WeightInfo = (); + type MaxReleaseSchedules = ConstU32<50>; + type BlockNumberProvider = MockBlockNumberProvider; + type RuntimeFreezeReason = RuntimeFreezeReason; + type Balance = Balance; + type RuntimeCall = RuntimeCall; + type SchedulerProvider = SchedulerProvider; + type TimeReleaseOrigin = EnsureTimeReleaseOrigin; +} + +type Block = frame_system::mocking::MockBlockU32; + +construct_runtime!( + pub enum Test + { + System: frame_system::{Pallet, Call, Storage, Config, Event}, + TimeRelease: pallet_time_release::{Pallet, Storage, Call, Event, Config, FreezeReason, HoldReason, Origin}, + PalletBalances: pallet_balances::{Pallet, Call, Storage, Config, Event}, + Preimage: pallet_preimage::{Pallet, Call, Storage, Event, HoldReason}, + Scheduler: pallet_scheduler::{Pallet, Call, Storage, Event} + } +); + +pub const ALICE: AccountId = 0; +pub const BOB: AccountId = 2; +pub const CHARLIE: AccountId = 3; +pub const DAVE: AccountId = 4; + +pub const ALICE_BALANCE: u64 = 100; +pub const CHARLIE_BALANCE: u64 = 30; +pub const DAVE_BALANCE: u64 = 200; + +pub struct SchedulerProvider; + +impl SchedulerProviderTrait for SchedulerProvider { + fn schedule( + origin: RuntimeOrigin, + id: ScheduleName, + when: u32, + call: Box, + ) -> Result<(), DispatchError> { + Scheduler::schedule_named(origin, id, when, None, LOWEST_PRIORITY, call)?; + + Ok(()) + } + + fn cancel(origin: RuntimeOrigin, id: ScheduleName) -> Result<(), DispatchError> { + Scheduler::cancel_named(origin, id)?; + + Ok(()) + } +} + +// Remove capacity on_initialize, needed to emulate pre-existing block height +pub fn run_to_block(n: u32) { + while System::block_number() < n { + if System::block_number() > 1 { + System::on_finalize(System::block_number()); + } + System::set_block_number(System::block_number() + 1); + Scheduler::on_initialize(System::block_number()); + System::on_initialize(System::block_number()); + } +} + +#[derive(Default)] +pub struct ExtBuilder; + +impl ExtBuilder { + pub fn build() -> sp_io::TestExternalities { + let mut t = frame_system::GenesisConfig::::default().build_storage().unwrap(); + + MockBlockNumberProvider::set(0); + + pallet_balances::GenesisConfig:: { + balances: vec![ + (ALICE, ALICE_BALANCE), + (CHARLIE, CHARLIE_BALANCE), + (DAVE, DAVE_BALANCE), + ], + ..Default::default() + } + .assimilate_storage(&mut t) + .unwrap(); + + pallet_time_release::GenesisConfig:: { + _config: Default::default(), + schedules: vec![ + // who, start, period, period_count, per_period + (CHARLIE, 2, 3, 1, 5), + (CHARLIE, 2 + 3, 3, 3, 5), + ], + } + .assimilate_storage(&mut t) + .unwrap(); + + t.into() + } +} diff --git a/pallets/time-release/src/tests.rs b/pallets/time-release/src/tests.rs new file mode 100644 index 0000000000..5616906130 --- /dev/null +++ b/pallets/time-release/src/tests.rs @@ -0,0 +1,1308 @@ +//! Unit tests for the time-release module. +use super::*; +use chrono::{DateTime, Days, Duration, TimeZone, Utc}; +use frame_support::{ + assert_noop, assert_ok, + error::BadOrigin, + traits::{ + fungible::{Inspect, InspectFreeze, InspectHold}, + tokens::{Fortitude, WithdrawConsequence}, + }, +}; +use mock::*; +use pallet_scheduler::Agenda; +use sp_runtime::{traits::Dispatchable, SaturatedConversion, TokenError}; + +#[test] +fn time_release_from_chain_spec_works() { + ExtBuilder::build().execute_with(|| { + // Charlie has 30 tokens in total + // 20 are frozen + // 10 are free + assert_eq!(PalletBalances::can_withdraw(&CHARLIE, 10), WithdrawConsequence::Success); + + // Charlie cannot withdraw more than 10 tokens + assert_eq!(PalletBalances::can_withdraw(&CHARLIE, 11), WithdrawConsequence::Frozen); + + // Check that the release schedules built at genesis are correct + assert_eq!( + ReleaseSchedules::::get(CHARLIE), + vec![ + ReleaseSchedule { start: 2u32, period: 3u32, period_count: 1u32, per_period: 5u64 }, + ReleaseSchedule { + start: 2u32 + 3u32, + period: 3u32, + period_count: 3u32, + per_period: 5u64, + } + ] + ); + + MockBlockNumberProvider::set(13); + + // 15 tokens will be released after 13 blocks + // 25 = 10(free) + 15(released) + assert_ok!(TimeRelease::claim(RuntimeOrigin::signed(CHARLIE))); + assert_eq!(PalletBalances::can_withdraw(&CHARLIE, 25), WithdrawConsequence::Success); + assert_eq!(PalletBalances::can_withdraw(&CHARLIE, 26), WithdrawConsequence::Frozen); + + MockBlockNumberProvider::set(14); + + // The final 5 tokens are released after 14 = (5[start] + 3[period] x 3[period count]) blocks + assert_ok!(TimeRelease::claim(RuntimeOrigin::signed(CHARLIE))); + + // Charlie can now withdraw all 30 tokens + // However, if Charlie doesn't leave an ED, the account will be reaped + assert_eq!( + PalletBalances::can_withdraw(&CHARLIE, 30), + WithdrawConsequence::ReducedToZero(0) + ); + assert_eq!(PalletBalances::can_withdraw(&CHARLIE, 29), WithdrawConsequence::Success); + }); +} + +#[test] +fn transfer_works() { + ExtBuilder::build().execute_with(|| { + System::set_block_number(1); + + let schedule = + ReleaseSchedule { start: 0u32, period: 10u32, period_count: 1u32, per_period: 100u64 }; + assert_ok!(TimeRelease::transfer(RuntimeOrigin::signed(ALICE), BOB, schedule.clone())); + assert_eq!(ReleaseSchedules::::get(BOB), vec![schedule.clone()]); + System::assert_last_event(RuntimeEvent::TimeRelease(crate::Event::ReleaseScheduleAdded { + from: ALICE, + to: BOB, + release_schedule: schedule, + })); + }); +} + +#[test] +fn self_releasing() { + ExtBuilder::build().execute_with(|| { + System::set_block_number(1); + + let schedule = ReleaseSchedule { + start: 0u32, + period: 10u32, + period_count: 1u32, + per_period: ALICE_BALANCE, + }; + + let bad_schedule = ReleaseSchedule { + start: 0u32, + period: 10u32, + period_count: 1u32, + per_period: 64 * ALICE_BALANCE, + }; + + assert_noop!( + TimeRelease::transfer(RuntimeOrigin::signed(ALICE), ALICE, bad_schedule), + crate::Error::::InsufficientBalanceToFreeze + ); + + assert_ok!(TimeRelease::transfer(RuntimeOrigin::signed(ALICE), ALICE, schedule.clone())); + + assert_eq!(ReleaseSchedules::::get(ALICE), vec![schedule.clone()]); + System::assert_last_event(RuntimeEvent::TimeRelease(crate::Event::ReleaseScheduleAdded { + from: ALICE, + to: ALICE, + release_schedule: schedule, + })); + }); +} + +#[test] +fn add_new_release_schedule_merges_with_current_frozen_balance_and_until() { + ExtBuilder::build().execute_with(|| { + let schedule = + ReleaseSchedule { start: 0u32, period: 10u32, period_count: 2u32, per_period: 10u64 }; + assert_ok!(TimeRelease::transfer(RuntimeOrigin::signed(ALICE), BOB, schedule)); + + MockBlockNumberProvider::set(12); + + let another_schedule = + ReleaseSchedule { start: 10u32, period: 13u32, period_count: 1u32, per_period: 7u64 }; + assert_ok!(TimeRelease::transfer(RuntimeOrigin::signed(ALICE), BOB, another_schedule)); + + assert_eq!( + ::Currency::balance_frozen( + &FreezeReason::TimeReleaseVesting.into(), + &BOB + ), + 17u64 + ); + }); +} + +#[test] +fn cannot_use_fund_if_not_claimed() { + ExtBuilder::build().execute_with(|| { + let schedule = + ReleaseSchedule { start: 10u32, period: 10u32, period_count: 1u32, per_period: 50u64 }; + assert_ok!(TimeRelease::transfer(RuntimeOrigin::signed(ALICE), BOB, schedule)); + assert_eq!(PalletBalances::can_withdraw(&BOB, 1), WithdrawConsequence::Frozen); + }); +} + +#[test] +fn transfer_fails_if_zero_period_or_count() { + ExtBuilder::build().execute_with(|| { + let schedule = + ReleaseSchedule { start: 1u32, period: 0u32, period_count: 1u32, per_period: 100u64 }; + assert_noop!( + TimeRelease::transfer(RuntimeOrigin::signed(ALICE), BOB, schedule), + Error::::ZeroReleasePeriod + ); + + let schedule = + ReleaseSchedule { start: 1u32, period: 1u32, period_count: 0u32, per_period: 100u64 }; + assert_noop!( + TimeRelease::transfer(RuntimeOrigin::signed(ALICE), BOB, schedule), + Error::::ZeroReleasePeriodCount + ); + }); +} + +#[test] +fn transfer_fails_if_transfer_err() { + ExtBuilder::build().execute_with(|| { + let schedule = + ReleaseSchedule { start: 1u32, period: 1u32, period_count: 1u32, per_period: 100u64 }; + assert_noop!( + TimeRelease::transfer(RuntimeOrigin::signed(BOB), ALICE, schedule), + TokenError::FundsUnavailable + ); + }); +} + +#[test] +fn transfer_fails_if_overflow() { + ExtBuilder::build().execute_with(|| { + let schedule = + ReleaseSchedule { start: 1u32, period: 1u32, period_count: 2u32, per_period: u64::MAX }; + assert_noop!( + TimeRelease::transfer(RuntimeOrigin::signed(ALICE), BOB, schedule), + ArithmeticError::Overflow, + ); + + let another_schedule = + ReleaseSchedule { start: u32::MAX, period: 1u32, period_count: 2u32, per_period: 1u64 }; + assert_noop!( + TimeRelease::transfer(RuntimeOrigin::signed(ALICE), BOB, another_schedule), + ArithmeticError::Overflow, + ); + }); +} + +#[test] +fn transfer_fails_if_bad_origin() { + ExtBuilder::build().execute_with(|| { + let schedule = + ReleaseSchedule { start: 0u32, period: 10u32, period_count: 1u32, per_period: 100u64 }; + assert_noop!( + TimeRelease::transfer(RuntimeOrigin::signed(CHARLIE), BOB, schedule), + BadOrigin + ); + }); +} + +#[test] +fn claim_works() { + ExtBuilder::build().execute_with(|| { + let schedule = + ReleaseSchedule { start: 0u32, period: 10u32, period_count: 2u32, per_period: 10u64 }; + assert_ok!(TimeRelease::transfer(RuntimeOrigin::signed(ALICE), BOB, schedule)); + + MockBlockNumberProvider::set(11); + // remain frozen if not claimed + assert!( + PalletBalances::transfer_allow_death(RuntimeOrigin::signed(BOB), ALICE, 10).is_err() + ); + // thawed after claiming + assert_ok!(TimeRelease::claim(RuntimeOrigin::signed(BOB))); + assert!(ReleaseSchedules::::contains_key(BOB)); + assert_ok!(PalletBalances::transfer_allow_death(RuntimeOrigin::signed(BOB), ALICE, 10)); + // more are still frozen + assert!(PalletBalances::transfer_allow_death(RuntimeOrigin::signed(BOB), ALICE, 1).is_err()); + + MockBlockNumberProvider::set(21); + // claim more + assert_ok!(TimeRelease::claim(RuntimeOrigin::signed(BOB))); + assert!(!ReleaseSchedules::::contains_key(BOB)); + assert_ok!(PalletBalances::transfer_allow_death(RuntimeOrigin::signed(BOB), ALICE, 10)); + // all used up + assert_eq!(::Currency::balance(&BOB), 0); + + // none frozen anymore + assert_eq!( + ::Currency::balance_frozen( + &FreezeReason::TimeReleaseVesting.into(), + &BOB + ), + 0 + ); + }); +} + +#[test] +fn claim_for_works() { + ExtBuilder::build().execute_with(|| { + let schedule = + ReleaseSchedule { start: 0u32, period: 10u32, period_count: 2u32, per_period: 10u64 }; + assert_ok!(TimeRelease::transfer(RuntimeOrigin::signed(ALICE), BOB, schedule)); + + assert_ok!(TimeRelease::claim_for(RuntimeOrigin::signed(ALICE), BOB)); + + assert_eq!( + ::Currency::balance_frozen( + &FreezeReason::TimeReleaseVesting.into(), + &BOB + ), + 20u64 + ); + assert!(ReleaseSchedules::::contains_key(BOB)); + + MockBlockNumberProvider::set(21); + + assert_ok!(TimeRelease::claim_for(RuntimeOrigin::signed(ALICE), BOB)); + + // none frozen anymore + assert_eq!( + ::Currency::balance_frozen( + &FreezeReason::TimeReleaseVesting.into(), + &BOB + ), + 0 + ); + assert!(!ReleaseSchedules::::contains_key(BOB)); + }); +} + +#[test] +fn update_release_schedules_works() { + ExtBuilder::build().execute_with(|| { + let schedule = + ReleaseSchedule { start: 0u32, period: 10u32, period_count: 2u32, per_period: 10u64 }; + assert_ok!(TimeRelease::transfer(RuntimeOrigin::signed(ALICE), BOB, schedule)); + + let updated_schedule = + ReleaseSchedule { start: 0u32, period: 20u32, period_count: 2u32, per_period: 10u64 }; + assert_ok!(TimeRelease::update_release_schedules( + RuntimeOrigin::root(), + BOB, + vec![updated_schedule] + )); + + MockBlockNumberProvider::set(11); + assert_ok!(TimeRelease::claim(RuntimeOrigin::signed(BOB))); + assert!(PalletBalances::transfer_allow_death(RuntimeOrigin::signed(BOB), ALICE, 1).is_err()); + + MockBlockNumberProvider::set(21); + assert_ok!(TimeRelease::claim(RuntimeOrigin::signed(BOB))); + assert_ok!(PalletBalances::transfer_allow_death(RuntimeOrigin::signed(BOB), ALICE, 10)); + + // empty release schedules cleanup the storage and thaw the funds + assert!(ReleaseSchedules::::contains_key(BOB)); + assert_eq!( + ::Currency::balance_frozen( + &FreezeReason::TimeReleaseVesting.into(), + &BOB + ), + 10u64 + ); + assert_ok!(TimeRelease::update_release_schedules(RuntimeOrigin::root(), BOB, vec![])); + assert!(!ReleaseSchedules::::contains_key(BOB)); + assert_eq!( + ::Currency::balance_frozen( + &FreezeReason::TimeReleaseVesting.into(), + &BOB + ), + 0 + ); + }); +} + +#[test] +fn update_release_schedules_fails_if_unexpected_existing_freezes() { + ExtBuilder::build().execute_with(|| { + assert_ok!(PalletBalances::transfer_allow_death(RuntimeOrigin::signed(ALICE), BOB, 1)); + let _ = ::Currency::set_freeze( + &FreezeReason::TimeReleaseVesting.into(), + &BOB, + 0u64, + ); + }); +} + +#[test] +fn transfer_check_for_min() { + ExtBuilder::build().execute_with(|| { + let schedule = + ReleaseSchedule { start: 1u32, period: 1u32, period_count: 1u32, per_period: 3u64 }; + assert_noop!( + TimeRelease::transfer(RuntimeOrigin::signed(BOB), ALICE, schedule), + TokenError::FundsUnavailable + ); + }); +} + +#[test] +fn multiple_release_schedule_claim_works() { + ExtBuilder::build().execute_with(|| { + let schedule = + ReleaseSchedule { start: 0u32, period: 10u32, period_count: 2u32, per_period: 10u64 }; + assert_ok!(TimeRelease::transfer(RuntimeOrigin::signed(ALICE), BOB, schedule.clone())); + + let schedule2 = + ReleaseSchedule { start: 0u32, period: 10u32, period_count: 3u32, per_period: 10u64 }; + assert_ok!(TimeRelease::transfer(RuntimeOrigin::signed(ALICE), BOB, schedule2.clone())); + + assert_eq!(ReleaseSchedules::::get(BOB), vec![schedule, schedule2.clone()]); + + MockBlockNumberProvider::set(21); + + assert_ok!(TimeRelease::claim(RuntimeOrigin::signed(BOB))); + + assert_eq!(ReleaseSchedules::::get(BOB), vec![schedule2]); + + MockBlockNumberProvider::set(31); + + assert_ok!(TimeRelease::claim(RuntimeOrigin::signed(BOB))); + + assert!(!ReleaseSchedules::::contains_key(BOB)); + + assert_eq!( + ::Currency::balance_frozen( + &FreezeReason::TimeReleaseVesting.into(), + &BOB + ), + 0 + ); + }); +} + +#[test] +fn exceeding_maximum_schedules_should_fail() { + ExtBuilder::build().execute_with(|| { + set_balance::(&ALICE, 1000); + + let schedule = + ReleaseSchedule { start: 0u32, period: 10u32, period_count: 2u32, per_period: 10u64 }; + + for _ in 0..49 { + assert_ok!(TimeRelease::transfer(RuntimeOrigin::signed(ALICE), BOB, schedule.clone())); + } + + assert_ok!(TimeRelease::transfer(RuntimeOrigin::signed(ALICE), BOB, schedule.clone())); + + let create = RuntimeCall::TimeRelease(crate::Call::::transfer { + dest: BOB, + schedule: schedule.clone(), + }); + + assert_noop!( + create.dispatch(RuntimeOrigin::signed(ALICE)), + Error::::MaxReleaseSchedulesExceeded + ); + + let schedules = vec![schedule.clone(); 51]; + + assert_noop!( + TimeRelease::update_release_schedules(RuntimeOrigin::root(), BOB, schedules), + Error::::MaxReleaseSchedulesExceeded + ); + }); +} + +#[test] +fn schedule_transfer_success() { + ExtBuilder::build().execute_with(|| { + let current_relay_block_number = 15u32; + let current_frequency_block_number = 5u32; + + run_to_block(current_frequency_block_number); + MockBlockNumberProvider::set(current_relay_block_number); + + let schedule = ReleaseSchedule { + // relay block number + start: 25u32, + period: 5u32, + period_count: 2u32, + per_period: 10u64, + }; + + let schedule_frequency_blocknumber = + BlockNumberFor::::from(current_relay_block_number + 5); + + assert_ok!(TimeRelease::schedule_named_transfer( + RuntimeOrigin::signed(ALICE), + [1u8; 32], + BOB, + schedule, + schedule_frequency_blocknumber, + )); + + let schedules = Agenda::::get(schedule_frequency_blocknumber); + assert_eq!(schedules.len(), 1); + + let hold_balance = PalletBalances::balance_on_hold( + &HoldReason::TimeReleaseScheduledVesting.into(), + &ALICE, + ); + assert_eq!(hold_balance, 20u64); + + run_to_block(current_relay_block_number + 5); + let schedules = Agenda::::get(4u32); + assert_eq!(schedules.len(), 0); + + let hold_balance_at_execution = PalletBalances::balance_on_hold( + &HoldReason::TimeReleaseScheduledVesting.into(), + &ALICE, + ); + assert_eq!(hold_balance_at_execution, 0u64); + + assert_eq!(PalletBalances::free_balance(BOB), 20u64); + assert_eq!( + PalletBalances::balance_frozen(&FreezeReason::TimeReleaseVesting.into(), &BOB), + 20u64 + ); + }); +} + +#[test] +fn multiple_schedule_transfer_with_same_schedule_name_fails() { + ExtBuilder::build().execute_with(|| { + let schedule = + ReleaseSchedule { start: 6u32, period: 10u32, period_count: 2u32, per_period: 10u64 }; + + let when = BlockNumberFor::::from(4u32); + + assert_ok!(TimeRelease::schedule_named_transfer( + RuntimeOrigin::signed(ALICE), + [1u8; 32], + BOB, + schedule, + when + )); + let schedules = Agenda::::get(4u32); + assert_eq!(schedules.len(), 1); + let hold_balance = PalletBalances::balance_on_hold( + &HoldReason::TimeReleaseScheduledVesting.into(), + &ALICE, + ); + assert_eq!(hold_balance, 20u64); + + // Adding another schedule increases the hold + + let schedule_2 = + ReleaseSchedule { start: 6u32, period: 10u32, period_count: 2u32, per_period: 10u64 }; + + let when = BlockNumberFor::::from(4u32); + + assert_noop!( + TimeRelease::schedule_named_transfer( + RuntimeOrigin::signed(ALICE), + [1u8; 32], + BOB, + schedule_2, + when + ), + Error::::DuplicateScheduleName + ); + }); +} + +#[test] +fn multiple_schedule_transfer_success() { + ExtBuilder::build().execute_with(|| { + let schedule = + ReleaseSchedule { start: 6u32, period: 10u32, period_count: 2u32, per_period: 10u64 }; + + let when = BlockNumberFor::::from(4u32); + + assert_ok!(TimeRelease::schedule_named_transfer( + RuntimeOrigin::signed(ALICE), + [1u8; 32], + BOB, + schedule, + when + )); + let schedules = Agenda::::get(4u32); + assert_eq!(schedules.len(), 1); + let hold_balance = PalletBalances::balance_on_hold( + &HoldReason::TimeReleaseScheduledVesting.into(), + &ALICE, + ); + assert_eq!(hold_balance, 20u64); + + // Adding another schedule increases the hold + + let schedule_2 = + ReleaseSchedule { start: 6u32, period: 10u32, period_count: 2u32, per_period: 10u64 }; + + let when = BlockNumberFor::::from(4u32); + + assert_ok!(TimeRelease::schedule_named_transfer( + RuntimeOrigin::signed(ALICE), + [2u8; 32], + BOB, + schedule_2, + when + )); + let schedules = Agenda::::get(4u32); + assert_eq!(schedules.len(), 2); + let hold_balance = PalletBalances::balance_on_hold( + &HoldReason::TimeReleaseScheduledVesting.into(), + &ALICE, + ); + assert_eq!(hold_balance, 40u64); + }); +} + +#[test] +fn schedule_transfer_fails_if_invalid_block_number() { + ExtBuilder::build().execute_with(|| { + let schedule = + ReleaseSchedule { start: 6u32, period: 10u32, period_count: 2u32, per_period: 10u64 }; + let invalid_block_number = 0u32; + assert_noop!( + TimeRelease::schedule_named_transfer( + RuntimeOrigin::signed(ALICE), + [1u8; 32], + BOB, + schedule, + invalid_block_number + ), + pallet_scheduler::Error::::TargetBlockNumberInPast + ); + }); +} + +#[test] +fn schedule_transfer_fails_if_bad_origin() { + ExtBuilder::build().execute_with(|| { + let schedule = + ReleaseSchedule { start: 6u32, period: 10u32, period_count: 2u32, per_period: 10u64 }; + let when = BlockNumberFor::::from(4u32); + assert_noop!( + TimeRelease::schedule_named_transfer( + RuntimeOrigin::signed(CHARLIE), + [1u8; 32], + BOB, + schedule, + when + ), + BadOrigin + ); + }); +} + +#[test] +fn execute_scheduled_named_transfer_success() { + ExtBuilder::build().execute_with(|| { + let schedule = + ReleaseSchedule { start: 6u32, period: 10u32, period_count: 2u32, per_period: 10u64 }; + let when = BlockNumberFor::::from(4u32); + assert_ok!(TimeRelease::schedule_named_transfer( + RuntimeOrigin::signed(ALICE), + [1u8; 32], + BOB, + schedule.clone(), + when + )); + + let amount = ScheduleReservedAmounts::::get([1u8; 32]); + assert_eq!(20u64, amount.unwrap()); + + assert_ok!(TimeRelease::execute_scheduled_named_transfer( + Origin::::TimeRelease(ALICE).into(), + [1u8; 32], + BOB, + schedule + )); + + assert_eq!(PalletBalances::free_balance(BOB), 20u64); + assert_eq!(None, ScheduleReservedAmounts::::get([1u8; 32])); + }); +} + +#[test] +fn cancel_schedule_named_transfer_success() { + ExtBuilder::build().execute_with(|| { + run_to_block(2u32); + + let schedule = + ReleaseSchedule { start: 6u32, period: 10u32, period_count: 2u32, per_period: 10u64 }; + let when = BlockNumberFor::::from(4u32); + assert_ok!(TimeRelease::schedule_named_transfer( + RuntimeOrigin::signed(ALICE), + [1u8; 32], + BOB, + schedule.clone(), + when + )); + + let agendas = Agenda::::get(4u32); + assert_eq!(agendas.len(), 1); + assert_eq!(ScheduleReservedAmounts::::get([1u8; 32]), Some(20u64)); + + assert_ok!(TimeRelease::cancel_scheduled_named_transfer( + RuntimeOrigin::signed(ALICE), + [1u8; 32] + )); + + assert_eq!(ScheduleReservedAmounts::::get([1u8; 32]), None); + assert_eq!(Agenda::::get(4u32).len(), 0); + }); +} +#[test] +fn cancel_schedule_transfer_errors_not_found() { + ExtBuilder::build().execute_with(|| { + assert_noop!( + TimeRelease::cancel_scheduled_named_transfer(RuntimeOrigin::signed(BOB), [1u8; 32]), + pallet_scheduler::Error::::NotFound + ); + }); +} + +#[test] +fn cancel_schedule_transfer_bad_origin_fails() { + ExtBuilder::build().execute_with(|| { + run_to_block(2u32); + + let schedule = + ReleaseSchedule { start: 6u32, period: 10u32, period_count: 2u32, per_period: 10u64 }; + let when = BlockNumberFor::::from(4u32); + assert_ok!(TimeRelease::schedule_named_transfer( + RuntimeOrigin::signed(ALICE), + [1u8; 32], + BOB, + schedule.clone(), + when + )); + + let agendas = Agenda::::get(4u32); + assert_eq!(agendas.len(), 1); + + assert_noop!( + TimeRelease::cancel_scheduled_named_transfer(RuntimeOrigin::signed(BOB), [1u8; 32]), + BadOrigin + ); + }); +} + +#[test] +fn execute_scheduled_named_transfer_fails_if_insufficient_hold_balance() { + ExtBuilder::build().execute_with(|| { + let schedule = + ReleaseSchedule { start: 6u32, period: 10u32, period_count: 2u32, per_period: 10u64 }; + let when = BlockNumberFor::::from(4u32); + assert_ok!(TimeRelease::schedule_named_transfer( + RuntimeOrigin::signed(ALICE), + [1u8; 32], + BOB, + schedule.clone(), + when + )); + + let bad_schedule = + ReleaseSchedule { start: 6u32, period: 10u32, period_count: 2u32, per_period: 1000u64 }; + + assert_noop!( + TimeRelease::execute_scheduled_named_transfer( + Origin::::TimeRelease(ALICE).into(), + [1u8; 32], + BOB, + bad_schedule + ), + Error::::InsufficientBalanceToFreeze + ); + }); +} + +#[test] +fn execute_scheduled_named_transfer_fails_if_bad_origin() { + ExtBuilder::build().execute_with(|| { + let schedule = + ReleaseSchedule { start: 6u32, period: 10u32, period_count: 2u32, per_period: 10u64 }; + let when = BlockNumberFor::::from(4u32); + assert_ok!(TimeRelease::schedule_named_transfer( + RuntimeOrigin::signed(ALICE), + [1u8; 32], + BOB, + schedule.clone(), + when + )); + + assert_noop!( + TimeRelease::execute_scheduled_named_transfer( + RuntimeOrigin::signed(CHARLIE), + [1u8; 32], + BOB, + schedule + ), + BadOrigin + ); + }); +} + +#[test] +fn cliff_release_works() { + const VESTING_AMOUNT: u64 = 12; + const VESTING_PERIOD: u32 = 20; + + ExtBuilder::build().execute_with(|| { + let cliff_schedule = ReleaseSchedule { + start: VESTING_PERIOD - 1, + period: 1, + period_count: 1, + per_period: VESTING_AMOUNT, + }; + + assert_eq!(::Currency::balance(&BOB), 0); + assert_ok!(TimeRelease::transfer(RuntimeOrigin::signed(ALICE), BOB, cliff_schedule)); + assert_eq!(::Currency::balance(&BOB), VESTING_AMOUNT); + assert_eq!( + ::Currency::balance_frozen( + &FreezeReason::TimeReleaseVesting.into(), + &BOB + ), + VESTING_AMOUNT + ); + + for i in 1..VESTING_PERIOD { + MockBlockNumberProvider::set(i); + assert_ok!(TimeRelease::claim(RuntimeOrigin::signed(BOB))); + assert_eq!(::Currency::balance(&BOB), VESTING_AMOUNT); + assert_eq!( + ::Currency::balance_frozen( + &FreezeReason::TimeReleaseVesting.into(), + &BOB + ), + VESTING_AMOUNT + ); + assert_noop!( + PalletBalances::transfer_allow_death( + RuntimeOrigin::signed(BOB), + CHARLIE, + VESTING_AMOUNT + ), + TokenError::Frozen, + ); + } + + MockBlockNumberProvider::set(VESTING_PERIOD); + assert_ok!(TimeRelease::claim(RuntimeOrigin::signed(BOB))); + assert_eq!( + ::Currency::balance_frozen( + &FreezeReason::TimeReleaseVesting.into(), + &BOB + ), + 0 + ); + assert_ok!(PalletBalances::transfer_allow_death( + RuntimeOrigin::signed(BOB), + CHARLIE, + VESTING_AMOUNT + )); + }); +} + +/// Example: +/// Alice has 100k tokens +/// Alice gets 25k tokens on April 1 +/// Note: 25k = 1/4th = 6/24ths of total +/// Alice's 25k tokens will thaw: +/// - 1/24th of total (1/6th of the 25k) on July 1st 2024 +/// - 2/24th of total (2/6th of the 25k) on Aug 1st 2024 (+432_000 blocks) +/// - 3/24th of total (3/6th of the 25k) on Sep 1st 2024 +/// - 4/24th of total (4/6th of the 25k) on Oct 1st 2024 +/// - 5/24th of total (5/6th of the 25k) on Nov 1st 2024 +/// - 6/24th of total (6/6th of the 25k) on Dec 1st 2024 +/// - 7/24th of total (2/3rd of quarterly) on Jan 1st 2025 (Q1 Award) +/// - 15/48th of total (1/3rd of quarterly) on Feb 1st 2025 (Q1 Award) +/// - 8/24th of total (1/3rd of quarterly) on Feb 1st 2025 (Q2 Award) +/// - 9/24th of total (2/3rd of quarterly) on Mar 1st 2025 (Q2 Award) +#[test] +fn alice_time_releases_schedule() { + ExtBuilder::build().execute_with(|| { + // First Thaw = ~ July 1, 2024 + // Thaw monthly + // "Start" freeze June 1, 2024 + let total_award: u64 = 100_000; + let amount_released_per_period = total_award / 24; + let number_of_periods = 6u32; + let period_duration = Duration::days(30); + + let july_2024_first_release_date = Utc.with_ymd_and_hms(2024, 7, 1, 0, 0, 0).unwrap(); + let june_2024_release_start = july_2024_first_release_date - Days::new(30); // block_number: 21_041_037 + + let schedule = build_time_release_schedule::( + june_2024_release_start, + period_duration, + number_of_periods, + amount_released_per_period, + ); + + set_balance::(&ALICE, total_award); + + // Bob starts with zero balance and zero frozen. + assert_eq!(get_balance::(&BOB), 0); + assert_eq!( + ::Currency::balance_frozen( + &FreezeReason::TimeReleaseVesting.into(), + &BOB + ), + 0 + ); + + // Time release transfer is initiated by Alice to Bob. As a result, Bobs free-balance + // increases by the total amount scheduled to be time-released. + // However, it cannot spent because a freeze is put on the balance. + assert_ok!(TimeRelease::transfer(RuntimeOrigin::signed(ALICE), BOB, schedule)); + assert_eq!(get_balance::(&BOB), 24_996); + assert_eq!( + ::Currency::balance_frozen( + &FreezeReason::TimeReleaseVesting.into(), + &BOB + ), + 24996 + ); + assert_eq!( + ::Currency::reducible_balance( + &BOB, + Preservation::Expendable, + Fortitude::Polite + ), + 0 + ); + + // Bob naively attempts to claim the transfer before the scheduled release date + // and nothing happens because the schedule release has yet to start. + assert_ok!(TimeRelease::claim(RuntimeOrigin::signed(BOB))); + assert_eq!( + ::Currency::balance_frozen( + &FreezeReason::TimeReleaseVesting.into(), + &BOB + ), + 24_996 + ); + + let time_release_transfer_data: Vec<(DateTime, _)> = time_release_transfers_data(); + + // quarters 1 - 5 + let july_1_2023_to_july_1_2024_data = &time_release_transfer_data[0..4]; + + // time travel and create transfer for each date. These transfers increase the total amount frozen in Bobs account. + let mut total_frozen = amount_released_per_period * 6; + for transfer in july_1_2023_to_july_1_2024_data.iter() { + let transfer_1 = transfer.1.get(0).unwrap().clone(); + let transfer_2 = transfer.1.get(1).unwrap().clone(); + total_frozen += transfer_1.per_period + transfer_2.per_period; + + assert_ok!(TimeRelease::transfer(RuntimeOrigin::signed(ALICE), BOB, transfer_1,)); + assert_ok!(TimeRelease::transfer(RuntimeOrigin::signed(ALICE), BOB, transfer_2)); + } + + // Bob thinks he can claim tokens because time-release transfer has started. + // However, Bob notices he still can't spend it. That is because he has not + // gone through 1 period =(. + MockBlockNumberProvider::set(date_to_approximate_block_number(june_2024_release_start)); + // Doing a claim does not do anything + assert_ok!(TimeRelease::claim(RuntimeOrigin::signed(BOB))); + // Since the first issuance the total amount frozen increases by the new transfers: 24_996; + assert_eq!( + ::Currency::balance_frozen( + &FreezeReason::TimeReleaseVesting.into(), + &BOB + ), + total_frozen + ); + + let july_2024_sept_2024: Vec> = vec![ + Utc.with_ymd_and_hms(2024, 7, 1, 0, 0, 0).unwrap(), + Utc.with_ymd_and_hms(2024, 8, 1, 0, 0, 0).unwrap(), + Utc.with_ymd_and_hms(2024, 9, 1, 0, 0, 0).unwrap(), + ]; + + for month in july_2024_sept_2024.iter() { + // Bob tries again at the end of the first period. Bob is now + // happy because he has thawed 4_166 tokens every month and can spend them. + // The total amount is reduced by the amount released per period. + MockBlockNumberProvider::set(date_to_approximate_block_number(*month)); + assert_ok!(TimeRelease::claim(RuntimeOrigin::signed(BOB))); + total_frozen -= 4_166_u64; + assert_eq!( + ::Currency::balance_frozen( + &FreezeReason::TimeReleaseVesting.into(), + &BOB + ), + total_frozen + ); + } + + // quarter-6: time-release transfer AND monthly claim + // Note that when submitting a transfer it also makes a claim and releases transfers. + let oct_2024_quarterly_data = &time_release_transfer_data[5]; + MockBlockNumberProvider::set(date_to_approximate_block_number(oct_2024_quarterly_data.0)); + + let transfer_1 = oct_2024_quarterly_data.1.get(0).unwrap(); + assert_ok!(TimeRelease::transfer(RuntimeOrigin::signed(ALICE), BOB, transfer_1.clone(),)); + + let transfer_2 = oct_2024_quarterly_data.1.get(1).unwrap(); + assert_ok!(TimeRelease::transfer(RuntimeOrigin::signed(ALICE), BOB, transfer_2.clone(),)); + let total_transfered = + transfer_1.total_amount().unwrap() + transfer_2.total_amount().unwrap(); + + // new transfer_total - one_month_of_time_release + total_frozen += total_transfered; + total_frozen -= 4_166; + assert_eq!( + ::Currency::balance_frozen( + &FreezeReason::TimeReleaseVesting.into(), + &BOB + ), + total_frozen + ); + + // quarter-7-12: time-release transfer AND monthly claim + let jan_2025_to_april_2026_quarterly_data = &time_release_transfer_data[6..]; + for quarter in jan_2025_to_april_2026_quarterly_data.iter() { + MockBlockNumberProvider::set(date_to_approximate_block_number(quarter.0)); + + let transfer_1 = quarter.1.get(0).unwrap(); + assert_ok!(TimeRelease::transfer( + RuntimeOrigin::signed(ALICE), + BOB, + transfer_1.clone(), + )); + + let transfer_2 = quarter.1.get(1).unwrap(); + assert_ok!(TimeRelease::transfer( + RuntimeOrigin::signed(ALICE), + BOB, + transfer_2.clone(), + )); + } + + MockBlockNumberProvider::set(date_to_approximate_block_number( + Utc.with_ymd_and_hms(2026, 6, 1, 0, 0, 6).unwrap(), + )); + assert_ok!(TimeRelease::claim(RuntimeOrigin::signed(BOB))); + assert_eq!( + ::Currency::balance_frozen( + &FreezeReason::TimeReleaseVesting.into(), + &BOB + ), + 0 + ); + }); +} + +fn get_balance(who: &T::AccountId) -> BalanceOf { + T::Currency::balance(who) +} + +fn set_balance(who: &T::AccountId, balance: BalanceOf) { + let actual_deposit = T::Currency::mint_into(who, balance.saturated_into()); + assert_eq!(balance, actual_deposit.unwrap()); +} + +fn build_time_release_schedule( + start_date: DateTime, + period: Duration, + period_count: u32, + per_period: BalanceOf, +) -> ReleaseSchedule, BalanceOf> { + let start_block_number = date_to_approximate_block_number(start_date); + + let days_in_seconds = period.num_seconds(); + let number_of_blocks_in_days = days_in_seconds / 6; + + ReleaseSchedule::, BalanceOf> { + start: start_block_number.into(), + period: (number_of_blocks_in_days as u32).into(), + period_count, + per_period, + } +} + +fn date_to_approximate_block_number(input_date: DateTime) -> u32 { + let average_block_time = 6; + + let initial_block_time = Utc.with_ymd_and_hms(2023, 3, 24, 22, 42, 0).unwrap(); + let block_number_at_initial_block_time: i64 = 14_790_657; + + let duration = input_date.signed_duration_since(initial_block_time); + let seconds_elapsed = duration.num_seconds(); + + let block_number = (seconds_elapsed / average_block_time) + block_number_at_initial_block_time; + + block_number as u32 +} + +// Bob also receives additional transfers quarterly transfers for +// (6,250 tokens transfer quarterly for 12 quarters for a total of 75,000 totals vested) +// Quarter 1: July 2023 +// Quarter 2: Oct 2023 +// Quarter 3: Jan 2024 +// Quarter 4 : April 2024 +// Quarter 5 : July 2024 +// Quarter 6: Oct 2024 +// Quarter 7: Jan 2025 +// Quarter 8: April 2025 +// Quarter 9: July 2025 +// Quarter 10: Oct 2025 +// Quarter 11: Jan 2026 +// Quarter 12: April 2026 +// Time-Release schedules: +// Monthly thaws 1 / 24 of 100K starting July 1, 2024 +fn time_release_transfers_data() -> Vec<(DateTime, Vec>)> { + let total_award: u64 = 100_000; + vec![ + ( + // Quarter 1: July 2023: Time-release transfer = 6_250 Release schedule of 1/24 of 100K per month + Utc.with_ymd_and_hms(2023, 7, 1, 0, 0, 0).unwrap(), + vec![ + // 7/24 + build_time_release_schedule::( + Utc.with_ymd_and_hms(2025, 1, 1, 0, 0, 0).unwrap(), + Duration::seconds(6), + 1u32, + total_award * 1 / 24, // Max amount available for release: 100k / 24 ~ 4_166 + ), + // 8/24 + build_time_release_schedule::( + Utc.with_ymd_and_hms(2025, 2, 1, 0, 0, 0).unwrap(), + Duration::seconds(6), + 1, + total_award * 1 / 24 * 1 / 2, // Remaining vested: 6_250 - 4_166 ~ 2_084/ + ), // Note 2_084 is short of the total amount that could be released from 4_166. + ], + ), + ( + // Quarter 2: Oct 2023: Time-release transfer = 6_250 + Utc.with_ymd_and_hms(2023, 10, 1, 0, 0, 0).unwrap(), + vec![ + // 8/24 + build_time_release_schedule::( + // 6_250 is issue and can be partially released on 2025-2-1 to complete the amount eligible for release. + Utc.with_ymd_and_hms(2025, 2, 1, 0, 0, 0).unwrap(), + Duration::seconds(6), + 1, + total_award * 1 / 24 * 1 / 2, // total_reward is 6_250 - 4_166 ~ 2_084 + ), + // 9/24 + build_time_release_schedule::( + Utc.with_ymd_and_hms(2025, 3, 1, 0, 0, 0).unwrap(), + Duration::seconds(6), + 1, + total_award * 1 / 24, // ~ 4_166 + ), + ], + ), + ( + // Quarter 3: Jan 2024: Time-release transfer = 6_250 + Utc.with_ymd_and_hms(2024, 1, 1, 0, 0, 0).unwrap(), // Max amount available for release: 100k / 24 ~ 4_166 + vec![ + // 10/24 + build_time_release_schedule::( + Utc.with_ymd_and_hms(2025, 4, 1, 0, 0, 0).unwrap(), + Duration::seconds(6), + 1, + total_award * 1 / 24, + ), + // 11/24 + build_time_release_schedule::( + Utc.with_ymd_and_hms(2025, 5, 1, 0, 0, 0).unwrap(), + Duration::seconds(6), + 1, // Remaining vested: 6_250 - 4_166 ~ 2_084/ + total_award * 1 / 24 * 1 / 2, // Note 2_084 is short of the total amount that could be released from 4_166. + ), + ], + ), + ( + // Quarter 4 : April 2024 + Utc.with_ymd_and_hms(2024, 4, 1, 0, 0, 0).unwrap(), + vec![ + // 11/24 + build_time_release_schedule::( + // previous bucket + Utc.with_ymd_and_hms(2025, 5, 1, 0, 0, 0).unwrap(), + Duration::seconds(6), + 1, + total_award * 1 / 24 * 1 / 2, + ), + // 12/24 + build_time_release_schedule::( + Utc.with_ymd_and_hms(2025, 6, 1, 0, 0, 0).unwrap(), + Duration::seconds(6), + 1, + total_award * 1 / 24, + ), + ], + ), + ( + // Quarter 5: Jul 2024 + Utc.with_ymd_and_hms(2024, 7, 1, 0, 0, 0).unwrap(), + vec![ + // 13/24 + build_time_release_schedule::( + Utc.with_ymd_and_hms(2025, 7, 1, 0, 0, 0).unwrap(), + Duration::seconds(6), + 1, + total_award * 1 / 24, + ), + // 14/24 + build_time_release_schedule::( + Utc.with_ymd_and_hms(2025, 8, 1, 0, 0, 0).unwrap(), + Duration::seconds(6), + 1, + total_award * 1 / 24 * 1 / 2, + ), + ], + ), + ( + // Quarter 6: Oct 2024 + Utc.with_ymd_and_hms(2024, 10, 1, 0, 0, 0).unwrap(), + vec![ + // 14/24 + build_time_release_schedule::( + Utc.with_ymd_and_hms(2025, 8, 1, 0, 0, 0).unwrap(), + Duration::seconds(6), + 1, + total_award * 1 / 24 * 1 / 2, + ), + // 15/24 + build_time_release_schedule::( + Utc.with_ymd_and_hms(2025, 9, 1, 0, 0, 0).unwrap(), + Duration::seconds(6), + 1, + total_award * 1 / 24, + ), + ], + ), + ( + // Quarter 7: Jan 2025 + Utc.with_ymd_and_hms(2025, 1, 1, 0, 0, 0).unwrap(), + vec![ + // 16/24 + build_time_release_schedule::( + Utc.with_ymd_and_hms(2025, 10, 1, 0, 0, 0).unwrap(), + Duration::seconds(6), + 1, + total_award * 1 / 24, + ), + // 17/24 + build_time_release_schedule::( + Utc.with_ymd_and_hms(2025, 11, 1, 0, 0, 0).unwrap(), + Duration::seconds(6), + 1, + total_award * 1 / 24 * 1 / 2, + ), + ], + ), + ( + // Quarter 8: April 2025 + Utc.with_ymd_and_hms(2025, 4, 1, 0, 0, 0).unwrap(), // issued 6_250 + vec![ + // 17/24 + build_time_release_schedule::( + Utc.with_ymd_and_hms(2025, 11, 1, 0, 0, 0).unwrap(), + Duration::seconds(6), + 1, + total_award * 1 / 24 * 1 / 2, // 6_250 - 4_166 ~ 2_084 + ), + // 18/24 + build_time_release_schedule::( + Utc.with_ymd_and_hms(2025, 12, 1, 0, 0, 0).unwrap(), + Duration::seconds(6), + 1, + total_award * 1 / 24, // ~ 100K / 24 ~ 4_166 + ), + ], + ), + ( + // Quarter 9: July 2025 + Utc.with_ymd_and_hms(2025, 7, 1, 0, 0, 0).unwrap(), // issued 6_250 + vec![ + // 19/24 + build_time_release_schedule::( + Utc.with_ymd_and_hms(2026, 1, 1, 0, 0, 0).unwrap(), + Duration::seconds(6), + 1, + total_award * 1 / 24, // ~ 100K / 24 ~ 4_166 + ), + // 20/24 + build_time_release_schedule::( + Utc.with_ymd_and_hms(2026, 2, 1, 0, 0, 0).unwrap(), + Duration::seconds(6), + 1, + total_award * 1 / 24 * 1 / 2, // 6_250 - 4_166 ~ 2_084 + ), + ], + ), + ( + // Quarter 10: Oct 2025 + Utc.with_ymd_and_hms(2025, 10, 1, 0, 0, 0).unwrap(), // issued 6_250 + vec![ + // 20/24 + build_time_release_schedule::( + Utc.with_ymd_and_hms(2026, 2, 1, 0, 0, 0).unwrap(), + Duration::seconds(6), + 1, + total_award * 1 / 24 * 1 / 2, // 6_250 - 4_166 ~ 2_084 + ), + // 21/24 + build_time_release_schedule::( + Utc.with_ymd_and_hms(2026, 3, 1, 0, 0, 0).unwrap(), + Duration::seconds(6), + 1, + total_award * 1 / 24, // ~ 100K / 24 ~ 4_166 + ), + ], + ), + ( + // Quarter 11: Jan 2026 + Utc.with_ymd_and_hms(2026, 1, 1, 0, 0, 0).unwrap(), // issued 6_250 + vec![ + // 22/24 + build_time_release_schedule::( + Utc.with_ymd_and_hms(2026, 4, 1, 0, 0, 0).unwrap(), + Duration::seconds(6), + 1, + total_award * 1 / 24, // ~ 100K / 24 ~ 4_166 + ), + // 23/24 + build_time_release_schedule::( + Utc.with_ymd_and_hms(2026, 5, 1, 0, 0, 0).unwrap(), + Duration::seconds(6), + 1, + total_award * 1 / 24 * 1 / 2, // 6_250 - 4_166 ~ 2_084 + ), + ], + ), + ( + // Quarter 12: April 2026 + Utc.with_ymd_and_hms(2026, 4, 1, 0, 0, 0).unwrap(), + vec![ + // 23/24 + build_time_release_schedule::( + Utc.with_ymd_and_hms(2026, 5, 1, 0, 0, 0).unwrap(), + Duration::seconds(6), + 1, + total_award * 1 / 24 * 1 / 2, // 6_250 - 4_166 ~ 2_084 + ), + // 24/24 + build_time_release_schedule::( + Utc.with_ymd_and_hms(2026, 6, 1, 0, 0, 0).unwrap(), + Duration::seconds(6), + 1, + total_award * 1 / 24, // ~ 100K / 24 ~ 4_166 + ), + ], + ), + ] +} diff --git a/pallets/time-release/src/types.rs b/pallets/time-release/src/types.rs new file mode 100644 index 0000000000..a65be58282 --- /dev/null +++ b/pallets/time-release/src/types.rs @@ -0,0 +1,105 @@ +//! Types for the TimeRelease Pallet +#![cfg_attr(not(feature = "std"), no_std)] + +use parity_scale_codec::{Decode, DecodeWithMemTracking, Encode, HasCompact, MaxEncodedLen}; +use sp_runtime::{traits::AtLeast32Bit, DispatchError, RuntimeDebug}; +extern crate alloc; +use alloc::boxed::Box; +use core::cmp::{Eq, PartialEq}; + +use scale_info::TypeInfo; + +/// Alias for a schedule identifier +pub type ScheduleName = [u8; 32]; + +/// The release schedule. +/// +/// Benefits would be granted gradually, `per_period` amount every `period` +/// of blocks after `start`. +#[derive( + Clone, + Encode, + Decode, + DecodeWithMemTracking, + PartialEq, + Eq, + RuntimeDebug, + MaxEncodedLen, + TypeInfo, +)] +pub struct ReleaseSchedule +where + Balance: MaxEncodedLen + HasCompact, +{ + /// Vesting starting block + pub start: BlockNumber, + /// Number of blocks between vest + pub period: BlockNumber, + /// Number of vest + pub period_count: u32, + /// Amount of tokens to release per vest + #[codec(compact)] + pub per_period: Balance, +} + +impl + ReleaseSchedule +{ + /// Returns the end of all periods, `None` if calculation overflows. + pub fn end(&self) -> Option { + // period * period_count + start + self.period.checked_mul(&self.period_count.into())?.checked_add(&self.start) + } + + /// Returns all frozen amount, `None` if calculation overflows. + pub fn total_amount(&self) -> Option { + self.per_period.checked_mul(&self.period_count.into()) + } + + /// Returns frozen amount for a given `time`. + /// + /// Note this func assumes schedule is a valid one(non-zero period and + /// non-overflow total amount), and it should be guaranteed by callers. + #[allow(clippy::expect_used)] + pub fn frozen_amount(&self, time: BlockNumber) -> Balance { + // full = (time - start) / period + // unrealized = period_count - full + // per_period * unrealized + let full = time + .saturating_sub(self.start) + .checked_div(&self.period) + .expect("ensured non-zero period; qed"); + let unrealized = self.period_count.saturating_sub(full.unique_saturated_into()); + self.per_period + .checked_mul(&unrealized.into()) + .expect("ensured non-overflow total amount; qed") + } +} + +/// A trait that defines a scheduler provider for scheduling calls to be executed at a specific block number. +pub trait SchedulerProviderTrait { + /// Schedules a call to be executed at a specified block number. + /// + /// # Returns + /// - `Ok(())` if the call was successfully scheduled. + /// - `Err(DispatchError)` if there was an error scheduling the call. + /// + /// # Errors + /// This function may return a `DispatchError` for various reasons, such as: + /// - Insufficient permissions or invalid origin. + /// - Invalid block number or scheduling conflicts. + /// - Other runtime-specific errors. + fn schedule( + origin: Origin, + id: ScheduleName, + when: BlockNumber, + call: Box, + ) -> Result<(), DispatchError>; + + /// Cancels a scheduled call with an specific schedule-name. + /// + /// # Returns + /// - `Ok(())` if the call was successfully canceled. + /// - `Err(DispatchError)` if there was an error canceling the call. + fn cancel(origin: Origin, id: ScheduleName) -> Result<(), DispatchError>; +} diff --git a/pallets/time-release/src/weights.rs b/pallets/time-release/src/weights.rs new file mode 100644 index 0000000000..246527aa03 --- /dev/null +++ b/pallets/time-release/src/weights.rs @@ -0,0 +1,404 @@ + +//! Autogenerated weights for `pallet_time_release` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-04-18, STEPS: `20`, REPEAT: `10`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `ip-10-173-0-75`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` +//! WASM-EXECUTION: `Compiled`, CHAIN: `None`, DB CACHE: `1024` + +// Executed Command: +// ./scripts/../target/release/frequency +// benchmark +// pallet +// --pallet=pallet_time-release +// --extrinsic +// * +// --heap-pages=4096 +// --steps=20 +// --repeat=10 +// --output=./scripts/../pallets/time-release/src/weights.rs +// --template=./scripts/../.maintain/frame-weight-template.hbs +// --additional-trie-layers=3 +// --runtime=./scripts/../target/release/wbuild/frequency-runtime/frequency_runtime.wasm +// --genesis-builder=runtime + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; +use core::marker::PhantomData; + +/// Weight functions needed for `pallet_time_release`. +pub trait WeightInfo { + fn transfer() -> Weight; + fn schedule_named_transfer() -> Weight; + fn execute_scheduled_named_transfer() -> Weight; + fn claim(i: u32, ) -> Weight; + fn update_release_schedules(i: u32, ) -> Weight; + fn cancel_scheduled_named_transfer(i: u32, ) -> Weight; +} + +/// Weights for `pallet_time_release` using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl WeightInfo for SubstrateWeight { + /// Storage: `ParachainSystem::ValidationData` (r:1 w:0) + /// Proof: `ParachainSystem::ValidationData` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `ParachainSystem::LastRelayChainBlockNumber` (r:1 w:0) + /// Proof: `ParachainSystem::LastRelayChainBlockNumber` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TimeRelease::ReleaseSchedules` (r:1 w:1) + /// Proof: `TimeRelease::ReleaseSchedules` (`max_values`: None, `max_size`: Some(1449), added: 3924, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Balances::Freezes` (r:1 w:1) + /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + /// Storage: `Balances::Locks` (r:1 w:0) + /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) + fn transfer() -> Weight { + // Proof Size summary in bytes: + // Measured: `253` + // Estimated: `5409` + // Minimum execution time: 73_581_000 picoseconds. + Weight::from_parts(75_237_000, 5409) + .saturating_add(T::DbWeight::get().reads(6_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } + /// Storage: `TimeRelease::ScheduleReservedAmounts` (r:1 w:1) + /// Proof: `TimeRelease::ScheduleReservedAmounts` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`) + /// Storage: `Balances::Holds` (r:1 w:1) + /// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Lookup` (r:1 w:1) + /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Agenda` (r:1 w:1) + /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(10463), added: 12938, mode: `MaxEncodedLen`) + fn schedule_named_transfer() -> Weight { + // Proof Size summary in bytes: + // Measured: `252` + // Estimated: `14423` + // Minimum execution time: 61_227_000 picoseconds. + Weight::from_parts(62_307_000, 14423) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) + } + /// Storage: `Balances::Holds` (r:1 w:1) + /// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + /// Storage: `ParachainSystem::ValidationData` (r:1 w:0) + /// Proof: `ParachainSystem::ValidationData` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `ParachainSystem::LastRelayChainBlockNumber` (r:1 w:0) + /// Proof: `ParachainSystem::LastRelayChainBlockNumber` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TimeRelease::ReleaseSchedules` (r:1 w:1) + /// Proof: `TimeRelease::ReleaseSchedules` (`max_values`: None, `max_size`: Some(1449), added: 3924, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Balances::Freezes` (r:1 w:1) + /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + /// Storage: `Balances::Locks` (r:1 w:0) + /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) + /// Storage: `TimeRelease::ScheduleReservedAmounts` (r:0 w:1) + /// Proof: `TimeRelease::ScheduleReservedAmounts` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`) + fn execute_scheduled_named_transfer() -> Weight { + // Proof Size summary in bytes: + // Measured: `308` + // Estimated: `5409` + // Minimum execution time: 77_678_000 picoseconds. + Weight::from_parts(79_865_000, 5409) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(5_u64)) + } + /// Storage: `ParachainSystem::ValidationData` (r:1 w:0) + /// Proof: `ParachainSystem::ValidationData` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TimeRelease::ReleaseSchedules` (r:1 w:1) + /// Proof: `TimeRelease::ReleaseSchedules` (`max_values`: None, `max_size`: Some(1449), added: 3924, mode: `MaxEncodedLen`) + /// Storage: `Balances::Freezes` (r:1 w:1) + /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + /// Storage: `Balances::Locks` (r:1 w:0) + /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) + /// The range of component `i` is `[1, 50]`. + fn claim(i: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `313 + i * (16 ±0)` + // Estimated: `5409 + i * (16 ±0)` + // Minimum execution time: 37_229_000 picoseconds. + Weight::from_parts(38_422_601, 5409) + // Standard Error: 6_370 + .saturating_add(Weight::from_parts(69_223, 0).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + .saturating_add(Weight::from_parts(0, 16).saturating_mul(i.into())) + } + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Balances::Freezes` (r:1 w:1) + /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + /// Storage: `Balances::Locks` (r:1 w:0) + /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) + /// Storage: `TimeRelease::ReleaseSchedules` (r:0 w:1) + /// Proof: `TimeRelease::ReleaseSchedules` (`max_values`: None, `max_size`: Some(1449), added: 3924, mode: `MaxEncodedLen`) + /// The range of component `i` is `[1, 50]`. + fn update_release_schedules(i: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `141` + // Estimated: `5259` + // Minimum execution time: 30_733_000 picoseconds. + Weight::from_parts(31_390_188, 5259) + // Standard Error: 6_558 + .saturating_add(Weight::from_parts(45_369, 0).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } + /// Storage: `Scheduler::Lookup` (r:1 w:1) + /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Agenda` (r:1 w:1) + /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(10463), added: 12938, mode: `MaxEncodedLen`) + /// Storage: `TimeRelease::ScheduleReservedAmounts` (r:1 w:1) + /// Proof: `TimeRelease::ScheduleReservedAmounts` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Balances::Holds` (r:1 w:1) + /// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Retries` (r:0 w:1) + /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`) + /// The range of component `i` is `[1, 50]`. + fn cancel_scheduled_named_transfer(i: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `967 + i * (170 ±0)` + // Estimated: `14423` + // Minimum execution time: 61_954_000 picoseconds. + Weight::from_parts(67_330_719, 14423) + // Standard Error: 17_407 + .saturating_add(Weight::from_parts(824_851, 0).saturating_mul(i.into())) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(6_u64)) + } +} + +// For backwards compatibility and tests. +impl WeightInfo for () { + /// Storage: `ParachainSystem::ValidationData` (r:1 w:0) + /// Proof: `ParachainSystem::ValidationData` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `ParachainSystem::LastRelayChainBlockNumber` (r:1 w:0) + /// Proof: `ParachainSystem::LastRelayChainBlockNumber` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TimeRelease::ReleaseSchedules` (r:1 w:1) + /// Proof: `TimeRelease::ReleaseSchedules` (`max_values`: None, `max_size`: Some(1449), added: 3924, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Balances::Freezes` (r:1 w:1) + /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + /// Storage: `Balances::Locks` (r:1 w:0) + /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) + fn transfer() -> Weight { + // Proof Size summary in bytes: + // Measured: `253` + // Estimated: `5409` + // Minimum execution time: 73_581_000 picoseconds. + Weight::from_parts(75_237_000, 5409) + .saturating_add(RocksDbWeight::get().reads(6_u64)) + .saturating_add(RocksDbWeight::get().writes(3_u64)) + } + /// Storage: `TimeRelease::ScheduleReservedAmounts` (r:1 w:1) + /// Proof: `TimeRelease::ScheduleReservedAmounts` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`) + /// Storage: `Balances::Holds` (r:1 w:1) + /// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Lookup` (r:1 w:1) + /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Agenda` (r:1 w:1) + /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(10463), added: 12938, mode: `MaxEncodedLen`) + fn schedule_named_transfer() -> Weight { + // Proof Size summary in bytes: + // Measured: `252` + // Estimated: `14423` + // Minimum execution time: 61_227_000 picoseconds. + Weight::from_parts(62_307_000, 14423) + .saturating_add(RocksDbWeight::get().reads(4_u64)) + .saturating_add(RocksDbWeight::get().writes(4_u64)) + } + /// Storage: `Balances::Holds` (r:1 w:1) + /// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + /// Storage: `ParachainSystem::ValidationData` (r:1 w:0) + /// Proof: `ParachainSystem::ValidationData` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `ParachainSystem::LastRelayChainBlockNumber` (r:1 w:0) + /// Proof: `ParachainSystem::LastRelayChainBlockNumber` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TimeRelease::ReleaseSchedules` (r:1 w:1) + /// Proof: `TimeRelease::ReleaseSchedules` (`max_values`: None, `max_size`: Some(1449), added: 3924, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Balances::Freezes` (r:1 w:1) + /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + /// Storage: `Balances::Locks` (r:1 w:0) + /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) + /// Storage: `TimeRelease::ScheduleReservedAmounts` (r:0 w:1) + /// Proof: `TimeRelease::ScheduleReservedAmounts` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`) + fn execute_scheduled_named_transfer() -> Weight { + // Proof Size summary in bytes: + // Measured: `308` + // Estimated: `5409` + // Minimum execution time: 77_678_000 picoseconds. + Weight::from_parts(79_865_000, 5409) + .saturating_add(RocksDbWeight::get().reads(7_u64)) + .saturating_add(RocksDbWeight::get().writes(5_u64)) + } + /// Storage: `ParachainSystem::ValidationData` (r:1 w:0) + /// Proof: `ParachainSystem::ValidationData` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TimeRelease::ReleaseSchedules` (r:1 w:1) + /// Proof: `TimeRelease::ReleaseSchedules` (`max_values`: None, `max_size`: Some(1449), added: 3924, mode: `MaxEncodedLen`) + /// Storage: `Balances::Freezes` (r:1 w:1) + /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + /// Storage: `Balances::Locks` (r:1 w:0) + /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) + /// The range of component `i` is `[1, 50]`. + fn claim(i: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `313 + i * (16 ±0)` + // Estimated: `5409 + i * (16 ±0)` + // Minimum execution time: 37_229_000 picoseconds. + Weight::from_parts(38_422_601, 5409) + // Standard Error: 6_370 + .saturating_add(Weight::from_parts(69_223, 0).saturating_mul(i.into())) + .saturating_add(RocksDbWeight::get().reads(4_u64)) + .saturating_add(RocksDbWeight::get().writes(2_u64)) + .saturating_add(Weight::from_parts(0, 16).saturating_mul(i.into())) + } + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Balances::Freezes` (r:1 w:1) + /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + /// Storage: `Balances::Locks` (r:1 w:0) + /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) + /// Storage: `TimeRelease::ReleaseSchedules` (r:0 w:1) + /// Proof: `TimeRelease::ReleaseSchedules` (`max_values`: None, `max_size`: Some(1449), added: 3924, mode: `MaxEncodedLen`) + /// The range of component `i` is `[1, 50]`. + fn update_release_schedules(i: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `141` + // Estimated: `5259` + // Minimum execution time: 30_733_000 picoseconds. + Weight::from_parts(31_390_188, 5259) + // Standard Error: 6_558 + .saturating_add(Weight::from_parts(45_369, 0).saturating_mul(i.into())) + .saturating_add(RocksDbWeight::get().reads(3_u64)) + .saturating_add(RocksDbWeight::get().writes(3_u64)) + } + /// Storage: `Scheduler::Lookup` (r:1 w:1) + /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Agenda` (r:1 w:1) + /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(10463), added: 12938, mode: `MaxEncodedLen`) + /// Storage: `TimeRelease::ScheduleReservedAmounts` (r:1 w:1) + /// Proof: `TimeRelease::ScheduleReservedAmounts` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Balances::Holds` (r:1 w:1) + /// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Retries` (r:0 w:1) + /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`) + /// The range of component `i` is `[1, 50]`. + fn cancel_scheduled_named_transfer(i: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `967 + i * (170 ±0)` + // Estimated: `14423` + // Minimum execution time: 61_954_000 picoseconds. + Weight::from_parts(67_330_719, 14423) + // Standard Error: 17_407 + .saturating_add(Weight::from_parts(824_851, 0).saturating_mul(i.into())) + .saturating_add(RocksDbWeight::get().reads(5_u64)) + .saturating_add(RocksDbWeight::get().writes(6_u64)) + } +} + + +#[cfg(test)] +mod tests { + use frame_support::{traits::Get, weights::Weight, dispatch::DispatchClass}; + use common_runtime::constants::{MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO}; + use common_runtime::weights::extrinsic_weights::ExtrinsicBaseWeight; + + #[allow(dead_code)] + struct BlockWeights; + impl Get for BlockWeights { + fn get() -> frame_system::limits::BlockWeights { + frame_system::limits::BlockWeights::builder() + .base_block(Weight::zero()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::non_mandatory(), |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .build_or_panic() + } + } + + #[test] + fn test_transfer() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 5409 + ); + } + #[test] + fn test_schedule_named_transfer() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 14423 + ); + } + #[test] + fn test_execute_scheduled_named_transfer() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 5409 + ); + } + #[test] + fn test_claim() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 5409 + ); + } + #[test] + fn test_update_release_schedules() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 5259 + ); + } + #[test] + fn test_cancel_scheduled_named_transfer() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 14423 + ); + } +} diff --git a/pallets/treasury/Cargo.toml b/pallets/treasury/Cargo.toml new file mode 100644 index 0000000000..616ce8b0a8 --- /dev/null +++ b/pallets/treasury/Cargo.toml @@ -0,0 +1,75 @@ +[package] +authors = ["Frequency"] +description = "FRAME pallet to manage treasury" +edition = "2021" +homepage = "https://substrate.io" +license = "Apache-2.0" +name = "pallet-treasury" +publish = false +repository = "https://github.com/frequency-chain/frequency/" +version = "27.0.0" +readme = "README.md" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[dependencies] +parity-scale-codec = { workspace = true, features = ["derive", "max-encoded-len"] } +docify = { workspace = true } +impl-trait-for-tuples = { workspace = true } +scale-info = { workspace = true, features = ["derive"] } +serde = { features = ["derive"], optional = true, workspace = true, default-features = true } +frame-benchmarking = { workspace = true, default-features = false, optional = true } +frame-support = { workspace = true, default-features = false } +frame-system = { workspace = true, default-features = false } +pallet-balances = { workspace = true, default-features = false } +sp-runtime = { workspace = true } +sp-core = { workspace = true, optional = true } + +# Frequency related dependencies +common-primitives = { default-features = false, path = "../../common/primitives" } + +[dev-dependencies] +sp-io = { workspace = true } +pallet-utility = { workspace = true } +common-runtime = { path = "../../runtime/common", default-features = false } + +[features] +default = ["std"] +std = [ + "parity-scale-codec/std", + "frame-benchmarking?/std", + "frame-support/std", + "frame-system/std", + "pallet-balances/std", + "pallet-utility/std", + "scale-info/std", + "serde", + "sp-core?/std", + "sp-io/std", + "sp-runtime/std", + "common-primitives/std", + "common-runtime/std", +] +runtime-benchmarks = [ + "dep:sp-core", + "frame-benchmarking/runtime-benchmarks", + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "pallet-balances/runtime-benchmarks", + "pallet-utility/runtime-benchmarks", + "sp-runtime/runtime-benchmarks", + "common-primitives/runtime-benchmarks", + "common-runtime/runtime-benchmarks", +] +try-runtime = [ + "frame-support/try-runtime", + "frame-system/try-runtime", + "pallet-balances/try-runtime", + "pallet-utility/try-runtime", + "sp-runtime/try-runtime", +] +test = [] + +[lints] +workspace = true diff --git a/pallets/treasury/README.md b/pallets/treasury/README.md new file mode 100644 index 0000000000..4945d79d14 --- /dev/null +++ b/pallets/treasury/README.md @@ -0,0 +1,31 @@ +# Treasury Pallet + +The Treasury pallet provides a "pot" of funds that can be managed by stakeholders in the system and +a structure for making spending proposals from this pot. + +## Overview + +The Treasury Pallet itself provides the pot to store funds, and a means for stakeholders to propose, +approve, and deny expenditures. The chain will need to provide a method (e.g.inflation, fees) for +collecting funds. + +By way of example, the Council could vote to fund the Treasury with a portion of the block reward +and use the funds to pay developers. + +### Terminology + +- **Proposal:** A suggestion to allocate funds from the pot to a beneficiary. +- **Beneficiary:** An account who will receive the funds from a proposal if the proposal is + approved. +- **Deposit:** Funds that a proposer must lock when making a proposal. The deposit will be returned + or slashed if the proposal is approved or rejected respectively. +- **Pot:** Unspent funds accumulated by the treasury pallet. + +## Interface + +### Dispatchable Functions + +General spending/proposal protocol: +- `propose_spend` - Make a spending proposal and stake the required deposit. +- `reject_proposal` - Reject a proposal, slashing the deposit. +- `approve_proposal` - Accept the proposal, returning the deposit. diff --git a/pallets/treasury/src/benchmarking.rs b/pallets/treasury/src/benchmarking.rs new file mode 100644 index 0000000000..27aa272ce0 --- /dev/null +++ b/pallets/treasury/src/benchmarking.rs @@ -0,0 +1,342 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#![allow(clippy::unwrap_used, clippy::expect_used)] +//! Treasury pallet benchmarking. + +#![cfg(feature = "runtime-benchmarks")] + +use super::{Pallet as Treasury, *}; + +use frame_benchmarking::{ + v1::{account, BenchmarkError}, + v2::*, +}; +use frame_support::{ + ensure, + traits::{ + tokens::{ConversionFromAssetBalance, PaymentStatus}, + EnsureOrigin, OnInitialize, + }, +}; +use frame_system::RawOrigin; +use sp_core::crypto::FromEntropy; + +/// Trait describing factory functions for dispatchables' parameters. +pub trait ArgumentsFactory { + /// Factory function for an asset kind. + fn create_asset_kind(seed: u32) -> AssetKind; + /// Factory function for a beneficiary. + fn create_beneficiary(seed: [u8; 32]) -> Beneficiary; +} + +/// Implementation that expects the parameters implement the [`FromEntropy`] trait. +impl ArgumentsFactory for () +where + AssetKind: FromEntropy, + Beneficiary: FromEntropy, +{ + fn create_asset_kind(seed: u32) -> AssetKind { + AssetKind::from_entropy(&mut seed.encode().as_slice()).unwrap() + } + fn create_beneficiary(seed: [u8; 32]) -> Beneficiary { + Beneficiary::from_entropy(&mut seed.as_slice()).unwrap() + } +} + +const SEED: u32 = 0; + +// Create the pre-requisite information needed to create a treasury `propose_spend`. +fn setup_proposal, I: 'static>( + u: u32, +) -> (T::AccountId, BalanceOf, AccountIdLookupOf) { + let caller = account("caller", u, SEED); + let value: BalanceOf = T::ProposalBondMinimum::get().saturating_mul(100u32.into()); + let _ = T::Currency::make_free_balance_be(&caller, value); + let beneficiary = account("beneficiary", u, SEED); + let beneficiary_lookup = T::Lookup::unlookup(beneficiary); + (caller, value, beneficiary_lookup) +} + +// Create proposals that are approved for use in `on_initialize`. +fn create_approved_proposals, I: 'static>(n: u32) -> Result<(), &'static str> { + for i in 0..n { + let (caller, value, lookup) = setup_proposal::(i); + #[allow(deprecated)] + Treasury::::propose_spend(RawOrigin::Signed(caller).into(), value, lookup)?; + let proposal_id = >::get() - 1; + Approvals::::try_append(proposal_id).unwrap(); + } + ensure!(>::get().len() == n as usize, "Not all approved"); + Ok(()) +} + +fn setup_pot_account, I: 'static>() { + let pot_account = Treasury::::account_id(); + let value = T::Currency::minimum_balance().saturating_mul(1_000_000_000u32.into()); + let _ = T::Currency::make_free_balance_be(&pot_account, value); +} + +fn assert_last_event, I: 'static>(generic_event: >::RuntimeEvent) { + frame_system::Pallet::::assert_last_event(generic_event.into()); +} + +// Create the arguments for the `spend` dispatchable. +fn create_spend_arguments, I: 'static>( + seed: u32, +) -> (T::AssetKind, AssetBalanceOf, T::Beneficiary, BeneficiaryLookupOf) { + let asset_kind = T::BenchmarkHelper::create_asset_kind(seed); + let beneficiary = T::BenchmarkHelper::create_beneficiary([seed.try_into().unwrap(); 32]); + let beneficiary_lookup = T::BeneficiaryLookup::unlookup(beneficiary.clone()); + (asset_kind, 100u32.into(), beneficiary, beneficiary_lookup) +} + +#[instance_benchmarks] +mod benchmarks { + use super::*; + + // This benchmark is short-circuited if `SpendOrigin` cannot provide + // a successful origin, in which case `spend` is un-callable and can use weight=0. + #[benchmark] + fn spend_local() -> Result<(), BenchmarkError> { + let (_, value, beneficiary_lookup) = setup_proposal::(SEED); + let origin = + T::SpendOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?; + let beneficiary = T::Lookup::lookup(beneficiary_lookup.clone()).unwrap(); + + #[extrinsic_call] + _(origin as T::RuntimeOrigin, value, beneficiary_lookup); + + assert_last_event::( + Event::SpendApproved { proposal_index: 0, amount: value, beneficiary }.into(), + ); + Ok(()) + } + + #[benchmark] + fn propose_spend() -> Result<(), BenchmarkError> { + let (caller, value, beneficiary_lookup) = setup_proposal::(SEED); + // Whitelist caller account from further DB operations. + let caller_key = frame_system::Account::::hashed_key_for(&caller); + frame_benchmarking::benchmarking::add_to_whitelist(caller_key.into()); + + #[extrinsic_call] + _(RawOrigin::Signed(caller), value, beneficiary_lookup); + + Ok(()) + } + + #[benchmark] + fn reject_proposal() -> Result<(), BenchmarkError> { + let (caller, value, beneficiary_lookup) = setup_proposal::(SEED); + #[allow(deprecated)] + Treasury::::propose_spend( + RawOrigin::Signed(caller).into(), + value, + beneficiary_lookup, + )?; + let proposal_id = Treasury::::proposal_count() - 1; + let reject_origin = + T::RejectOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?; + + #[extrinsic_call] + _(reject_origin as T::RuntimeOrigin, proposal_id); + + Ok(()) + } + + #[benchmark] + fn approve_proposal( + p: Linear<0, { T::MaxApprovals::get() - 1 }>, + ) -> Result<(), BenchmarkError> { + let approve_origin = + T::ApproveOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?; + create_approved_proposals::(p)?; + let (caller, value, beneficiary_lookup) = setup_proposal::(SEED); + #[allow(deprecated)] + Treasury::::propose_spend( + RawOrigin::Signed(caller).into(), + value, + beneficiary_lookup, + )?; + let proposal_id = Treasury::::proposal_count() - 1; + + #[extrinsic_call] + _(approve_origin as T::RuntimeOrigin, proposal_id); + + Ok(()) + } + + #[benchmark] + fn remove_approval() -> Result<(), BenchmarkError> { + let (caller, value, beneficiary_lookup) = setup_proposal::(SEED); + #[allow(deprecated)] + Treasury::::propose_spend( + RawOrigin::Signed(caller).into(), + value, + beneficiary_lookup, + )?; + let proposal_id = Treasury::::proposal_count() - 1; + Approvals::::try_append(proposal_id).unwrap(); + let reject_origin = + T::RejectOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?; + + #[extrinsic_call] + _(reject_origin as T::RuntimeOrigin, proposal_id); + + Ok(()) + } + + #[benchmark] + fn on_initialize_proposals( + p: Linear<0, { T::MaxApprovals::get() - 1 }>, + ) -> Result<(), BenchmarkError> { + setup_pot_account::(); + create_approved_proposals::(p)?; + + #[block] + { + Treasury::::on_initialize(0u32.into()); + } + + Ok(()) + } + + #[benchmark] + fn spend() -> Result<(), BenchmarkError> { + let origin = + T::SpendOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?; + let (asset_kind, amount, beneficiary, beneficiary_lookup) = + create_spend_arguments::(SEED); + T::BalanceConverter::ensure_successful(asset_kind.clone()); + + #[extrinsic_call] + _( + origin as T::RuntimeOrigin, + Box::new(asset_kind.clone()), + amount, + Box::new(beneficiary_lookup), + None, + ); + + let valid_from = frame_system::Pallet::::block_number(); + let expire_at = valid_from.saturating_add(T::PayoutPeriod::get()); + assert_last_event::( + Event::AssetSpendApproved { + index: 0, + asset_kind, + amount, + beneficiary, + valid_from, + expire_at, + } + .into(), + ); + Ok(()) + } + + #[benchmark] + fn payout() -> Result<(), BenchmarkError> { + let origin = T::SpendOrigin::try_successful_origin().map_err(|_| "No origin")?; + let (asset_kind, amount, beneficiary, beneficiary_lookup) = + create_spend_arguments::(SEED); + T::BalanceConverter::ensure_successful(asset_kind.clone()); + Treasury::::spend( + origin, + Box::new(asset_kind.clone()), + amount, + Box::new(beneficiary_lookup), + None, + )?; + T::Paymaster::ensure_successful(&beneficiary, asset_kind, amount); + let caller: T::AccountId = account("caller", 0, SEED); + + #[extrinsic_call] + _(RawOrigin::Signed(caller.clone()), 0u32); + + let id = match Spends::::get(0).unwrap().status { + PaymentState::Attempted { id, .. } => { + assert_ne!(T::Paymaster::check_payment(id), PaymentStatus::Failure); + id + }, + _ => panic!("No payout attempt made"), + }; + assert_last_event::(Event::Paid { index: 0, payment_id: id }.into()); + assert!(Treasury::::payout(RawOrigin::Signed(caller).into(), 0u32).is_err()); + Ok(()) + } + + #[benchmark] + fn check_status() -> Result<(), BenchmarkError> { + let origin = T::SpendOrigin::try_successful_origin().map_err(|_| "No origin")?; + let (asset_kind, amount, beneficiary, beneficiary_lookup) = + create_spend_arguments::(SEED); + T::BalanceConverter::ensure_successful(asset_kind.clone()); + Treasury::::spend( + origin, + Box::new(asset_kind.clone()), + amount, + Box::new(beneficiary_lookup), + None, + )?; + T::Paymaster::ensure_successful(&beneficiary, asset_kind, amount); + let caller: T::AccountId = account("caller", 0, SEED); + Treasury::::payout(RawOrigin::Signed(caller.clone()).into(), 0u32)?; + match Spends::::get(0).unwrap().status { + PaymentState::Attempted { id, .. } => { + T::Paymaster::ensure_concluded(id); + }, + _ => panic!("No payout attempt made"), + }; + + #[extrinsic_call] + _(RawOrigin::Signed(caller.clone()), 0u32); + + if let Some(s) = Spends::::get(0) { + assert!(!matches!(s.status, PaymentState::Attempted { .. })); + } + Ok(()) + } + + #[benchmark] + fn void_spend() -> Result<(), BenchmarkError> { + let origin = T::SpendOrigin::try_successful_origin().map_err(|_| "No origin")?; + let (asset_kind, amount, _, beneficiary_lookup) = create_spend_arguments::(SEED); + T::BalanceConverter::ensure_successful(asset_kind.clone()); + Treasury::::spend( + origin, + Box::new(asset_kind.clone()), + amount, + Box::new(beneficiary_lookup), + None, + )?; + assert!(Spends::::get(0).is_some()); + let origin = + T::RejectOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?; + + #[extrinsic_call] + _(origin as T::RuntimeOrigin, 0u32); + + assert!(Spends::::get(0).is_none()); + Ok(()) + } + + impl_benchmark_test_suite!( + Treasury, + crate::tests::ExtBuilder::default().build(), + crate::tests::Test + ); +} diff --git a/pallets/treasury/src/lib.rs b/pallets/treasury/src/lib.rs new file mode 100644 index 0000000000..176d77c0ef --- /dev/null +++ b/pallets/treasury/src/lib.rs @@ -0,0 +1,1138 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//! This is copied from [![github]](https://github.com/paritytech/polkadot-sdk/tree/release-polkadot-v1.13.0) +//! Git Hash d5160c1d567cc73c7df6c816d41e21aa3adb188d +//! > Made with *Substrate*, for *Polkadot*. +//! +//! [![github]](https://github.com/paritytech/substrate/frame/fast-unstake) - +//! [![polkadot]](https://polkadot.network) +//! +//! [polkadot]: https://img.shields.io/badge/polkadot-E6007A?style=for-the-badge&logo=polkadot&logoColor=white +//! [github]: https://img.shields.io/badge/github-8da0cb?style=for-the-badge&labelColor=555555&logo=github +//! +//! # Treasury Pallet +//! +//! The Treasury pallet provides a "pot" of funds that can be managed by stakeholders in the system +//! and a structure for making spending proposals from this pot. +//! +//! ## Overview +//! +//! The Treasury Pallet itself provides the pot to store funds, and a means for stakeholders to +//! propose and claim expenditures (aka spends). The chain will need to provide a method to approve +//! spends (e.g. public referendum) and a method for collecting funds (e.g. inflation, fees). +//! +//! By way of example, stakeholders could vote to fund the Treasury with a portion of the block +//! reward and use the funds to pay developers. +//! +//! ### Terminology +//! +//! - **Proposal:** A suggestion to allocate funds from the pot to a beneficiary. +//! - **Beneficiary:** An account who will receive the funds from a proposal iff the proposal is +//! approved. +//! - **Pot:** Unspent funds accumulated by the treasury pallet. +//! - **Spend** An approved proposal for transferring a specific amount of funds to a designated +//! beneficiary. +//! +//! ### Example +//! +//! 1. Multiple local spends approved by spend origins and received by a beneficiary. +#![doc = docify::embed!("src/tests.rs", spend_local_origin_works)] +//! +//! 2. Approve a spend of some asset kind and claim it. +#![doc = docify::embed!("src/tests.rs", spend_payout_works)] +//! +//! ## Pallet API +//! +//! See the [`pallet`] module for more information about the interfaces this pallet exposes, +//! including its configuration trait, dispatchables, storage items, events and errors. +//! +//! ## Low Level / Implementation Details +//! +//! Spends can be initiated using either the `spend_local` or `spend` dispatchable. The +//! `spend_local` dispatchable enables the creation of spends using the native currency of the +//! chain, utilizing the funds stored in the pot. These spends are automatically paid out every +//! [`pallet::Config::SpendPeriod`]. On the other hand, the `spend` dispatchable allows spending of +//! any asset kind managed by the treasury, with payment facilitated by a designated +//! [`pallet::Config::Paymaster`]. To claim these spends, the `payout` dispatchable should be called +//! within some temporal bounds, starting from the moment they become valid and within one +//! [`pallet::Config::PayoutPeriod`]. + +#![cfg_attr(not(feature = "std"), no_std)] +#![allow(clippy::expect_used)] + +mod benchmarking; +#[cfg(test)] +mod tests; +pub mod weights; +use core::marker::PhantomData; + +#[cfg(feature = "runtime-benchmarks")] +pub use benchmarking::ArgumentsFactory; + +use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; +use scale_info::TypeInfo; + +use sp_runtime::{ + traits::{AccountIdConversion, CheckedAdd, Saturating, StaticLookup, Zero}, + Permill, RuntimeDebug, +}; +extern crate alloc; +use alloc::{boxed::Box, collections::btree_map::BTreeMap}; + +use frame_support::{ + dispatch::{DispatchResult, DispatchResultWithPostInfo}, + ensure, print, + traits::{ + tokens::Pay, Currency, ExistenceRequirement::KeepAlive, Get, Imbalance, OnUnbalanced, + ReservableCurrency, WithdrawReasons, + }, + weights::Weight, + PalletId, +}; + +pub use pallet::*; +pub use weights::WeightInfo; + +pub type BalanceOf = + <>::Currency as Currency<::AccountId>>::Balance; +pub type AssetBalanceOf = <>::Paymaster as Pay>::Balance; +pub type PositiveImbalanceOf = <>::Currency as Currency< + ::AccountId, +>>::PositiveImbalance; +pub type NegativeImbalanceOf = <>::Currency as Currency< + ::AccountId, +>>::NegativeImbalance; +type AccountIdLookupOf = <::Lookup as StaticLookup>::Source; +type BeneficiaryLookupOf = <>::BeneficiaryLookup as StaticLookup>::Source; + +/// A trait to allow the Treasury Pallet to spend it's funds for other purposes. +/// There is an expectation that the implementer of this trait will correctly manage +/// the mutable variables passed to it: +/// * `budget_remaining`: How much available funds that can be spent by the treasury. As funds are +/// spent, you must correctly deduct from this value. +/// * `imbalance`: Any imbalances that you create should be subsumed in here to maximize efficiency +/// of updating the total issuance. (i.e. `deposit_creating`) +/// * `total_weight`: Track any weight that your `spend_fund` implementation uses by updating this +/// value. +/// * `missed_any`: If there were items that you want to spend on, but there were not enough funds, +/// mark this value as `true`. This will prevent the treasury from burning the excess funds. +#[impl_trait_for_tuples::impl_for_tuples(30)] +pub trait SpendFunds, I: 'static = ()> { + fn spend_funds( + budget_remaining: &mut BalanceOf, + imbalance: &mut PositiveImbalanceOf, + total_weight: &mut Weight, + missed_any: &mut bool, + ); +} + +/// An index of a proposal. Just a `u32`. +pub type ProposalIndex = u32; + +/// A spending proposal. +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] +#[derive(Encode, Decode, Clone, PartialEq, Eq, MaxEncodedLen, RuntimeDebug, TypeInfo)] +pub struct Proposal { + /// The account proposing it. + proposer: AccountId, + /// The (total) amount that should be paid if the proposal is accepted. + value: Balance, + /// The account to whom the payment should be made if the proposal is accepted. + beneficiary: AccountId, + /// The amount held on deposit (reserved) for making this proposal. + bond: Balance, +} + +/// The state of the payment claim. +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] +#[derive(Encode, Decode, Clone, PartialEq, Eq, MaxEncodedLen, RuntimeDebug, TypeInfo)] +pub enum PaymentState { + /// Pending claim. + Pending, + /// Payment attempted with a payment identifier. + Attempted { id: Id }, + /// Payment failed. + Failed, +} + +/// Info regarding an approved treasury spend. +#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] +#[derive(Encode, Decode, Clone, PartialEq, Eq, MaxEncodedLen, RuntimeDebug, TypeInfo)] +pub struct SpendStatus { + // The kind of asset to be spent. + asset_kind: AssetKind, + /// The asset amount of the spend. + amount: AssetBalance, + /// The beneficiary of the spend. + beneficiary: Beneficiary, + /// The block number from which the spend can be claimed. + valid_from: BlockNumber, + /// The block number by which the spend has to be claimed. + expire_at: BlockNumber, + /// The status of the payout/claim. + status: PaymentState, +} + +/// Index of an approved treasury spend. +pub type SpendIndex = u32; + +#[frame_support::pallet] +pub mod pallet { + use super::*; + use frame_support::{ + dispatch_context::with_context, + pallet_prelude::*, + traits::tokens::{ConversionFromAssetBalance, PaymentStatus}, + }; + use frame_system::pallet_prelude::*; + + #[pallet::pallet] + pub struct Pallet(PhantomData<(T, I)>); + + #[pallet::config] + pub trait Config: frame_system::Config { + /// The staking balance. + type Currency: Currency + ReservableCurrency; + + /// Origin from which approvals must come. + type ApproveOrigin: EnsureOrigin; + + /// Origin from which rejections must come. + type RejectOrigin: EnsureOrigin; + + /// The overarching event type. + type RuntimeEvent: From> + + IsType<::RuntimeEvent>; + + /// Handler for the unbalanced decrease when slashing for a rejected proposal or bounty. + type OnSlash: OnUnbalanced>; + + /// Fraction of a proposal's value that should be bonded in order to place the proposal. + /// An accepted proposal gets these back. A rejected proposal does not. + #[pallet::constant] + type ProposalBond: Get; + + /// Minimum amount of funds that should be placed in a deposit for making a proposal. + #[pallet::constant] + type ProposalBondMinimum: Get>; + + /// Maximum amount of funds that should be placed in a deposit for making a proposal. + #[pallet::constant] + type ProposalBondMaximum: Get>>; + + /// Period between successive spends. + #[pallet::constant] + type SpendPeriod: Get>; + + /// Percentage of spare funds (if any) that are burnt per spend period. + #[pallet::constant] + type Burn: Get; + + /// The treasury's pallet id, used for deriving its sovereign account ID. + #[pallet::constant] + type PalletId: Get; + + /// Handler for the unbalanced decrease when treasury funds are burned. + type BurnDestination: OnUnbalanced>; + + /// Weight information for extrinsics in this pallet. + type WeightInfo: WeightInfo; + + /// Runtime hooks to external pallet using treasury to compute spend funds. + type SpendFunds: SpendFunds; + + /// The maximum number of approvals that can wait in the spending queue. + /// + /// NOTE: This parameter is also used within the Bounties Pallet extension if enabled. + #[pallet::constant] + type MaxApprovals: Get; + + /// The origin required for approving spends from the treasury outside of the proposal + /// process. The `Success` value is the maximum amount in a native asset that this origin + /// is allowed to spend at a time. + type SpendOrigin: EnsureOrigin>; + + /// Type parameter representing the asset kinds to be spent from the treasury. + type AssetKind: Parameter + MaxEncodedLen; + + /// Type parameter used to identify the beneficiaries eligible to receive treasury spends. + type Beneficiary: Parameter + MaxEncodedLen; + + /// Converting trait to take a source type and convert to [`Self::Beneficiary`]. + type BeneficiaryLookup: StaticLookup; + + /// Type for processing spends of [Self::AssetKind] in favor of [`Self::Beneficiary`]. + type Paymaster: Pay; + + /// Type for converting the balance of an [Self::AssetKind] to the balance of the native + /// asset, solely for the purpose of asserting the result against the maximum allowed spend + /// amount of the [`Self::SpendOrigin`]. + type BalanceConverter: ConversionFromAssetBalance< + ::Balance, + Self::AssetKind, + BalanceOf, + >; + + /// The period during which an approved treasury spend has to be claimed. + #[pallet::constant] + type PayoutPeriod: Get>; + + /// Helper type for benchmarks. + #[cfg(feature = "runtime-benchmarks")] + type BenchmarkHelper: ArgumentsFactory; + } + + /// Number of proposals that have been made. + #[pallet::storage] + #[pallet::getter(fn proposal_count)] + pub(crate) type ProposalCount = StorageValue<_, ProposalIndex, ValueQuery>; + + /// Proposals that have been made. + #[pallet::storage] + #[pallet::getter(fn proposals)] + pub type Proposals, I: 'static = ()> = StorageMap< + _, + Twox64Concat, + ProposalIndex, + Proposal>, + OptionQuery, + >; + + /// The amount which has been reported as inactive to Currency. + #[pallet::storage] + pub type Deactivated, I: 'static = ()> = + StorageValue<_, BalanceOf, ValueQuery>; + + /// Proposal indices that have been approved but not yet awarded. + #[pallet::storage] + #[pallet::getter(fn approvals)] + pub type Approvals, I: 'static = ()> = + StorageValue<_, BoundedVec, ValueQuery>; + + /// The count of spends that have been made. + #[pallet::storage] + pub(crate) type SpendCount = StorageValue<_, SpendIndex, ValueQuery>; + + /// Spends that have been approved and being processed. + // Hasher: Twox safe since `SpendIndex` is an internal count based index. + #[pallet::storage] + pub type Spends, I: 'static = ()> = StorageMap< + _, + Twox64Concat, + SpendIndex, + SpendStatus< + T::AssetKind, + AssetBalanceOf, + T::Beneficiary, + BlockNumberFor, + ::Id, + >, + OptionQuery, + >; + + #[pallet::genesis_config] + #[derive(frame_support::DefaultNoBound)] + pub struct GenesisConfig, I: 'static = ()> { + #[serde(skip)] + _config: PhantomData<(T, I)>, + } + + #[pallet::genesis_build] + impl, I: 'static> BuildGenesisConfig for GenesisConfig { + fn build(&self) { + // Create Treasury account + let account_id = >::account_id(); + let min = T::Currency::minimum_balance(); + if T::Currency::free_balance(&account_id) < min { + let _ = T::Currency::make_free_balance_be(&account_id, min); + } + } + } + + #[pallet::event] + #[pallet::generate_deposit(pub(super) fn deposit_event)] + pub enum Event, I: 'static = ()> { + /// New proposal. + Proposed { proposal_index: ProposalIndex }, + /// We have ended a spend period and will now allocate funds. + Spending { budget_remaining: BalanceOf }, + /// Some funds have been allocated. + Awarded { proposal_index: ProposalIndex, award: BalanceOf, account: T::AccountId }, + /// A proposal was rejected; funds were slashed. + Rejected { proposal_index: ProposalIndex, slashed: BalanceOf }, + /// Some of our funds have been burnt. + Burnt { burnt_funds: BalanceOf }, + /// Spending has finished; this is the amount that rolls over until next spend. + Rollover { rollover_balance: BalanceOf }, + /// Some funds have been deposited. + Deposit { value: BalanceOf }, + /// A new spend proposal has been approved. + SpendApproved { + proposal_index: ProposalIndex, + amount: BalanceOf, + beneficiary: T::AccountId, + }, + /// The inactive funds of the pallet have been updated. + UpdatedInactive { reactivated: BalanceOf, deactivated: BalanceOf }, + /// A new asset spend proposal has been approved. + AssetSpendApproved { + index: SpendIndex, + asset_kind: T::AssetKind, + amount: AssetBalanceOf, + beneficiary: T::Beneficiary, + valid_from: BlockNumberFor, + expire_at: BlockNumberFor, + }, + /// An approved spend was voided. + AssetSpendVoided { index: SpendIndex }, + /// A payment happened. + Paid { index: SpendIndex, payment_id: ::Id }, + /// A payment failed and can be retried. + PaymentFailed { index: SpendIndex, payment_id: ::Id }, + /// A spend was processed and removed from the storage. It might have been successfully + /// paid or it may have expired. + SpendProcessed { index: SpendIndex }, + } + + /// Error for the treasury pallet. + #[pallet::error] + pub enum Error { + /// Proposer's balance is too low. + InsufficientProposersBalance, + /// No proposal, bounty or spend at that index. + InvalidIndex, + /// Too many approvals in the queue. + TooManyApprovals, + /// The spend origin is valid but the amount it is allowed to spend is lower than the + /// amount to be spent. + InsufficientPermission, + /// Proposal has not been approved. + ProposalNotApproved, + /// The balance of the asset kind is not convertible to the balance of the native asset. + FailedToConvertBalance, + /// The spend has expired and cannot be claimed. + SpendExpired, + /// The spend is not yet eligible for payout. + EarlyPayout, + /// The payment has already been attempted. + AlreadyAttempted, + /// There was some issue with the mechanism of payment. + PayoutError, + /// The payout was not yet attempted/claimed. + NotAttempted, + /// The payment has neither failed nor succeeded yet. + Inconclusive, + } + + #[pallet::hooks] + impl, I: 'static> Hooks> for Pallet { + /// ## Complexity + /// - `O(A)` where `A` is the number of approvals + fn on_initialize(n: frame_system::pallet_prelude::BlockNumberFor) -> Weight { + let pot = Self::pot(); + let deactivated = Deactivated::::get(); + if pot != deactivated { + T::Currency::reactivate(deactivated); + T::Currency::deactivate(pot); + Deactivated::::put(pot); + Self::deposit_event(Event::::UpdatedInactive { + reactivated: deactivated, + deactivated: pot, + }); + } + + // Check to see if we should spend some funds! + if (n % T::SpendPeriod::get()).is_zero() { + Self::spend_funds() + } else { + Weight::zero() + } + } + + #[cfg(feature = "try-runtime")] + fn try_state( + _: frame_system::pallet_prelude::BlockNumberFor, + ) -> Result<(), sp_runtime::TryRuntimeError> { + Self::do_try_state()?; + Ok(()) + } + } + + #[derive(Default)] + struct SpendContext { + spend_in_context: BTreeMap, + } + + #[pallet::call] + impl, I: 'static> Pallet { + /// Put forward a suggestion for spending. + /// + /// ## Dispatch Origin + /// + /// Must be signed. + /// + /// ## Details + /// A deposit proportional to the value is reserved and slashed if the proposal is rejected. + /// It is returned once the proposal is awarded. + /// + /// ### Complexity + /// - O(1) + /// + /// ## Events + /// + /// Emits [`Event::Proposed`] if successful. + #[pallet::call_index(0)] + #[pallet::weight(T::WeightInfo::propose_spend())] + #[allow(deprecated)] + #[deprecated( + note = "`propose_spend` will be removed in February 2024. Use `spend` instead." + )] + pub fn propose_spend( + origin: OriginFor, + #[pallet::compact] value: BalanceOf, + beneficiary: AccountIdLookupOf, + ) -> DispatchResult { + let proposer = ensure_signed(origin)?; + let beneficiary = T::Lookup::lookup(beneficiary)?; + + let bond = Self::calculate_bond(value); + T::Currency::reserve(&proposer, bond) + .map_err(|_| Error::::InsufficientProposersBalance)?; + + let c = Self::proposal_count(); + >::put(c + 1); + >::insert(c, Proposal { proposer, value, beneficiary, bond }); + + Self::deposit_event(Event::Proposed { proposal_index: c }); + Ok(()) + } + + /// Reject a proposed spend. + /// + /// ## Dispatch Origin + /// + /// Must be [`Config::RejectOrigin`]. + /// + /// ## Details + /// The original deposit will be slashed. + /// + /// ### Complexity + /// - O(1) + /// + /// ## Events + /// + /// Emits [`Event::Rejected`] if successful. + #[pallet::call_index(1)] + #[pallet::weight((T::WeightInfo::reject_proposal(), DispatchClass::Operational))] + #[allow(deprecated)] + #[deprecated( + note = "`reject_proposal` will be removed in February 2024. Use `spend` instead." + )] + pub fn reject_proposal( + origin: OriginFor, + #[pallet::compact] proposal_id: ProposalIndex, + ) -> DispatchResult { + T::RejectOrigin::ensure_origin(origin)?; + + let proposal = + >::take(proposal_id).ok_or(Error::::InvalidIndex)?; + let value = proposal.bond; + let imbalance = T::Currency::slash_reserved(&proposal.proposer, value).0; + T::OnSlash::on_unbalanced(imbalance); + + Self::deposit_event(Event::::Rejected { + proposal_index: proposal_id, + slashed: value, + }); + Ok(()) + } + + /// Approve a proposal. + /// + /// ## Dispatch Origin + /// + /// Must be [`Config::ApproveOrigin`]. + /// + /// ## Details + /// + /// At a later time, the proposal will be allocated to the beneficiary and the original + /// deposit will be returned. + /// + /// ### Complexity + /// - O(1). + /// + /// ## Events + /// + /// No events are emitted from this dispatch. + #[pallet::call_index(2)] + #[pallet::weight((T::WeightInfo::approve_proposal(T::MaxApprovals::get()), DispatchClass::Operational))] + #[allow(deprecated)] + #[deprecated( + note = "`approve_proposal` will be removed in February 2024. Use `spend` instead." + )] + pub fn approve_proposal( + origin: OriginFor, + #[pallet::compact] proposal_id: ProposalIndex, + ) -> DispatchResult { + T::ApproveOrigin::ensure_origin(origin)?; + + ensure!(>::contains_key(proposal_id), Error::::InvalidIndex); + Approvals::::try_append(proposal_id) + .map_err(|_| Error::::TooManyApprovals)?; + Ok(()) + } + + /// Propose and approve a spend of treasury funds. + /// + /// ## Dispatch Origin + /// + /// Must be [`Config::SpendOrigin`] with the `Success` value being at least `amount`. + /// + /// ### Details + /// NOTE: For record-keeping purposes, the proposer is deemed to be equivalent to the + /// beneficiary. + /// + /// ### Parameters + /// - `amount`: The amount to be transferred from the treasury to the `beneficiary`. + /// - `beneficiary`: The destination account for the transfer. + /// + /// ## Events + /// + /// Emits [`Event::SpendApproved`] if successful. + #[pallet::call_index(3)] + #[pallet::weight(T::WeightInfo::spend_local())] + pub fn spend_local( + origin: OriginFor, + #[pallet::compact] amount: BalanceOf, + beneficiary: AccountIdLookupOf, + ) -> DispatchResult { + let max_amount = T::SpendOrigin::ensure_origin(origin)?; + ensure!(amount <= max_amount, Error::::InsufficientPermission); + + with_context::>, _>(|v| { + let context = v.or_default(); + + // We group based on `max_amount`, to distinguish between different kind of + // origins. (assumes that all origins have different `max_amount`) + // + // Worst case is that we reject some "valid" request. + let spend = context.spend_in_context.entry(max_amount).or_default(); + + // Ensure that we don't overflow nor use more than `max_amount` + if spend.checked_add(&amount).map(|s| s > max_amount).unwrap_or(true) { + Err(Error::::InsufficientPermission) + } else { + *spend = spend.saturating_add(amount); + + Ok(()) + } + }) + .unwrap_or(Ok(()))?; + + let beneficiary = T::Lookup::lookup(beneficiary)?; + let proposal_index = Self::proposal_count(); + Approvals::::try_append(proposal_index) + .map_err(|_| Error::::TooManyApprovals)?; + let proposal = Proposal { + proposer: beneficiary.clone(), + value: amount, + beneficiary: beneficiary.clone(), + bond: Default::default(), + }; + Proposals::::insert(proposal_index, proposal); + ProposalCount::::put(proposal_index + 1); + + Self::deposit_event(Event::SpendApproved { proposal_index, amount, beneficiary }); + Ok(()) + } + + /// Force a previously approved proposal to be removed from the approval queue. + /// + /// ## Dispatch Origin + /// + /// Must be [`Config::RejectOrigin`]. + /// + /// ## Details + /// + /// The original deposit will no longer be returned. + /// + /// ### Parameters + /// - `proposal_id`: The index of a proposal + /// + /// ### Complexity + /// - O(A) where `A` is the number of approvals + /// + /// ### Errors + /// - [`Error::ProposalNotApproved`]: The `proposal_id` supplied was not found in the + /// approval queue, i.e., the proposal has not been approved. This could also mean the + /// proposal does not exist altogether, thus there is no way it would have been approved + /// in the first place. + #[pallet::call_index(4)] + #[pallet::weight((T::WeightInfo::remove_approval(), DispatchClass::Operational))] + pub fn remove_approval( + origin: OriginFor, + #[pallet::compact] proposal_id: ProposalIndex, + ) -> DispatchResult { + T::RejectOrigin::ensure_origin(origin)?; + + Approvals::::try_mutate(|v| -> DispatchResult { + if let Some(index) = v.iter().position(|x| x == &proposal_id) { + v.remove(index); + Ok(()) + } else { + Err(Error::::ProposalNotApproved.into()) + } + })?; + + Ok(()) + } + + /// Propose and approve a spend of treasury funds. + /// + /// ## Dispatch Origin + /// + /// Must be [`Config::SpendOrigin`] with the `Success` value being at least + /// `amount` of `asset_kind` in the native asset. The amount of `asset_kind` is converted + /// for assertion using the [`Config::BalanceConverter`]. + /// + /// ## Details + /// + /// Create an approved spend for transferring a specific `amount` of `asset_kind` to a + /// designated beneficiary. The spend must be claimed using the `payout` dispatchable within + /// the [`Config::PayoutPeriod`]. + /// + /// ### Parameters + /// - `asset_kind`: An indicator of the specific asset class to be spent. + /// - `amount`: The amount to be transferred from the treasury to the `beneficiary`. + /// - `beneficiary`: The beneficiary of the spend. + /// - `valid_from`: The block number from which the spend can be claimed. It can refer to + /// the past if the resulting spend has not yet expired according to the + /// [`Config::PayoutPeriod`]. If `None`, the spend can be claimed immediately after + /// approval. + /// + /// ## Events + /// + /// Emits [`Event::AssetSpendApproved`] if successful. + #[pallet::call_index(5)] + #[pallet::weight(T::WeightInfo::spend())] + pub fn spend( + origin: OriginFor, + asset_kind: Box, + #[pallet::compact] amount: AssetBalanceOf, + beneficiary: Box>, + valid_from: Option>, + ) -> DispatchResult { + let max_amount = T::SpendOrigin::ensure_origin(origin)?; + let beneficiary = T::BeneficiaryLookup::lookup(*beneficiary)?; + + let now = frame_system::Pallet::::block_number(); + let valid_from = valid_from.unwrap_or(now); + let expire_at = valid_from.saturating_add(T::PayoutPeriod::get()); + ensure!(expire_at > now, Error::::SpendExpired); + + let native_amount = + T::BalanceConverter::from_asset_balance(amount, *asset_kind.clone()) + .map_err(|_| Error::::FailedToConvertBalance)?; + + ensure!(native_amount <= max_amount, Error::::InsufficientPermission); + + with_context::>, _>(|v| { + let context = v.or_default(); + // We group based on `max_amount`, to distinguish between different kind of + // origins. (assumes that all origins have different `max_amount`) + // + // Worst case is that we reject some "valid" request. + let spend = context.spend_in_context.entry(max_amount).or_default(); + + // Ensure that we don't overflow nor use more than `max_amount` + if spend.checked_add(&native_amount).map(|s| s > max_amount).unwrap_or(true) { + Err(Error::::InsufficientPermission) + } else { + *spend = spend.saturating_add(native_amount); + Ok(()) + } + }) + .unwrap_or(Ok(()))?; + + let index = SpendCount::::get(); + Spends::::insert( + index, + SpendStatus { + asset_kind: *asset_kind.clone(), + amount, + beneficiary: beneficiary.clone(), + valid_from, + expire_at, + status: PaymentState::Pending, + }, + ); + SpendCount::::put(index + 1); + + Self::deposit_event(Event::AssetSpendApproved { + index, + asset_kind: *asset_kind, + amount, + beneficiary, + valid_from, + expire_at, + }); + Ok(()) + } + + /// Claim a spend. + /// + /// ## Dispatch Origin + /// + /// Must be signed. + /// + /// ## Details + /// + /// Spends must be claimed within some temporal bounds. A spend may be claimed within one + /// [`Config::PayoutPeriod`] from the `valid_from` block. + /// In case of a payout failure, the spend status must be updated with the `check_status` + /// dispatchable before retrying with the current function. + /// + /// ### Parameters + /// - `index`: The spend index. + /// + /// ## Events + /// + /// Emits [`Event::Paid`] if successful. + #[pallet::call_index(6)] + #[pallet::weight(T::WeightInfo::payout())] + pub fn payout(origin: OriginFor, index: SpendIndex) -> DispatchResult { + ensure_signed(origin)?; + let mut spend = Spends::::get(index).ok_or(Error::::InvalidIndex)?; + let now = frame_system::Pallet::::block_number(); + ensure!(now >= spend.valid_from, Error::::EarlyPayout); + ensure!(spend.expire_at > now, Error::::SpendExpired); + ensure!( + matches!(spend.status, PaymentState::Pending | PaymentState::Failed), + Error::::AlreadyAttempted + ); + + let id = T::Paymaster::pay(&spend.beneficiary, spend.asset_kind.clone(), spend.amount) + .map_err(|_| Error::::PayoutError)?; + + spend.status = PaymentState::Attempted { id }; + Spends::::insert(index, spend); + + Self::deposit_event(Event::::Paid { index, payment_id: id }); + + Ok(()) + } + + /// Check the status of the spend and remove it from the storage if processed. + /// + /// ## Dispatch Origin + /// + /// Must be signed. + /// + /// ## Details + /// + /// The status check is a prerequisite for retrying a failed payout. + /// If a spend has either succeeded or expired, it is removed from the storage by this + /// function. In such instances, transaction fees are refunded. + /// + /// ### Parameters + /// - `index`: The spend index. + /// + /// ## Events + /// + /// Emits [`Event::PaymentFailed`] if the spend payout has failed. + /// Emits [`Event::SpendProcessed`] if the spend payout has succeed. + #[pallet::call_index(7)] + #[pallet::weight(T::WeightInfo::check_status())] + pub fn check_status(origin: OriginFor, index: SpendIndex) -> DispatchResultWithPostInfo { + use PaymentState as State; + use PaymentStatus as Status; + + ensure_signed(origin)?; + let mut spend = Spends::::get(index).ok_or(Error::::InvalidIndex)?; + let now = frame_system::Pallet::::block_number(); + + if now > spend.expire_at && !matches!(spend.status, State::Attempted { .. }) { + // spend has expired and no further status update is expected. + Spends::::remove(index); + Self::deposit_event(Event::::SpendProcessed { index }); + return Ok(Pays::No.into()); + } + + let payment_id = match spend.status { + State::Attempted { id } => id, + _ => return Err(Error::::NotAttempted.into()), + }; + + match T::Paymaster::check_payment(payment_id) { + Status::Failure => { + spend.status = PaymentState::Failed; + Spends::::insert(index, spend); + Self::deposit_event(Event::::PaymentFailed { index, payment_id }); + }, + Status::Success | Status::Unknown => { + Spends::::remove(index); + Self::deposit_event(Event::::SpendProcessed { index }); + return Ok(Pays::No.into()); + }, + Status::InProgress => return Err(Error::::Inconclusive.into()), + } + return Ok(Pays::Yes.into()); + } + + /// Void previously approved spend. + /// + /// ## Dispatch Origin + /// + /// Must be [`Config::RejectOrigin`]. + /// + /// ## Details + /// + /// A spend void is only possible if the payout has not been attempted yet. + /// + /// ### Parameters + /// - `index`: The spend index. + /// + /// ## Events + /// + /// Emits [`Event::AssetSpendVoided`] if successful. + #[pallet::call_index(8)] + #[pallet::weight(T::WeightInfo::void_spend())] + pub fn void_spend(origin: OriginFor, index: SpendIndex) -> DispatchResult { + T::RejectOrigin::ensure_origin(origin)?; + let spend = Spends::::get(index).ok_or(Error::::InvalidIndex)?; + ensure!( + matches!(spend.status, PaymentState::Pending | PaymentState::Failed), + Error::::AlreadyAttempted + ); + + Spends::::remove(index); + Self::deposit_event(Event::::AssetSpendVoided { index }); + Ok(()) + } + } +} + +impl, I: 'static> Pallet { + // Add public immutables and private mutables. + + /// The account ID of the treasury pot. + /// + /// This actually does computation. If you need to keep using it, then make sure you cache the + /// value and only call this once. + pub fn account_id() -> T::AccountId { + T::PalletId::get().into_account_truncating() + } + + /// The needed bond for a proposal whose spend is `value`. + fn calculate_bond(value: BalanceOf) -> BalanceOf { + let mut r = T::ProposalBondMinimum::get().max(T::ProposalBond::get() * value); + if let Some(m) = T::ProposalBondMaximum::get() { + r = r.min(m); + } + r + } + + /// Spend some money! returns number of approvals before spend. + pub fn spend_funds() -> Weight { + let mut total_weight = Weight::zero(); + + let mut budget_remaining = Self::pot(); + Self::deposit_event(Event::Spending { budget_remaining }); + let account_id = Self::account_id(); + + let mut missed_any = false; + let mut imbalance = >::zero(); + let proposals_len = Approvals::::mutate(|v| { + let proposals_approvals_len = v.len() as u32; + v.retain(|&index| { + // Should always be true, but shouldn't panic if false or we're screwed. + if let Some(p) = Self::proposals(index) { + if p.value <= budget_remaining { + budget_remaining -= p.value; + >::remove(index); + + // return their deposit. + let err_amount = T::Currency::unreserve(&p.proposer, p.bond); + debug_assert!(err_amount.is_zero()); + + // provide the allocation. + imbalance.subsume(T::Currency::deposit_creating(&p.beneficiary, p.value)); + + Self::deposit_event(Event::Awarded { + proposal_index: index, + award: p.value, + account: p.beneficiary, + }); + false + } else { + missed_any = true; + true + } + } else { + false + } + }); + proposals_approvals_len + }); + + total_weight += T::WeightInfo::on_initialize_proposals(proposals_len); + + // Call Runtime hooks to external pallet using treasury to compute spend funds. + T::SpendFunds::spend_funds( + &mut budget_remaining, + &mut imbalance, + &mut total_weight, + &mut missed_any, + ); + + if !missed_any { + // burn some proportion of the remaining budget if we run a surplus. + let burn = (T::Burn::get() * budget_remaining).min(budget_remaining); + budget_remaining -= burn; + + let (debit, credit) = T::Currency::pair(burn); + imbalance.subsume(debit); + T::BurnDestination::on_unbalanced(credit); + Self::deposit_event(Event::Burnt { burnt_funds: burn }) + } + + // Must never be an error, but better to be safe. + // proof: budget_remaining is account free balance minus ED; + // Thus we can't spend more than account free balance minus ED; + // Thus account is kept alive; qed; + if let Err(problem) = + T::Currency::settle(&account_id, imbalance, WithdrawReasons::TRANSFER, KeepAlive) + { + print("Inconsistent state - couldn't settle imbalance for funds spent by treasury"); + // Nothing else to do here. + drop(problem); + } + + Self::deposit_event(Event::Rollover { rollover_balance: budget_remaining }); + + total_weight + } + + /// Return the amount of money in the pot. + // The existential deposit is not part of the pot so treasury account never gets deleted. + pub fn pot() -> BalanceOf { + T::Currency::free_balance(&Self::account_id()) + // Must never be less than 0 but better be safe. + .saturating_sub(T::Currency::minimum_balance()) + } + + /// Ensure the correctness of the state of this pallet. + #[cfg(any(feature = "try-runtime", test))] + fn do_try_state() -> Result<(), sp_runtime::TryRuntimeError> { + Self::try_state_proposals()?; + Self::try_state_spends()?; + + Ok(()) + } + + /// ### Invariants of proposal storage items + /// + /// 1. [`ProposalCount`] >= Number of elements in [`Proposals`]. + /// 2. Each entry in [`Proposals`] should be saved under a key strictly less than current [`ProposalCount`]. + /// 3. Each [`ProposalIndex`] contained in [`Approvals`] should exist in [`Proposals`]. + /// + /// Note, that this automatically implies [`Approvals`].count() <= [`Proposals`].count(). + #[cfg(any(feature = "try-runtime", test))] + fn try_state_proposals() -> Result<(), sp_runtime::TryRuntimeError> { + let current_proposal_count = ProposalCount::::get(); + ensure!( + current_proposal_count as usize >= Proposals::::iter().count(), + "Actual number of proposals exceeds `ProposalCount`." + ); + + Proposals::::iter_keys().try_for_each(|proposal_index| -> DispatchResult { + ensure!( + current_proposal_count > proposal_index, + "`ProposalCount` should by strictly greater than any ProposalIndex used as a key for `Proposals`." + ); + Ok(()) + })?; + + Approvals::::get() + .iter() + .try_for_each(|proposal_index| -> DispatchResult { + ensure!( + Proposals::::contains_key(proposal_index), + "Proposal indices in `Approvals` must also be contained in `Proposals`." + ); + Ok(()) + })?; + + Ok(()) + } + + /// ## Invariants of spend storage items + /// + /// 1. [`SpendCount`] >= Number of elements in [`Spends`]. + /// 2. Each entry in [`Spends`] should be saved under a key strictly less than current [`SpendCount`]. + /// 3. For each spend entry contained in [`Spends`] we should have spend.expire_at + /// > spend.valid_from. + #[cfg(any(feature = "try-runtime", test))] + fn try_state_spends() -> Result<(), sp_runtime::TryRuntimeError> { + let current_spend_count = SpendCount::::get(); + ensure!( + current_spend_count as usize >= Spends::::iter().count(), + "Actual number of spends exceeds `SpendCount`." + ); + + Spends::::iter_keys().try_for_each(|spend_index| -> DispatchResult { + ensure!( + current_spend_count > spend_index, + "`SpendCount` should by strictly greater than any SpendIndex used as a key for `Spends`." + ); + Ok(()) + })?; + + Spends::::iter().try_for_each(|(_index, spend)| -> DispatchResult { + ensure!( + spend.valid_from < spend.expire_at, + "Spend cannot expire before it becomes valid." + ); + Ok(()) + })?; + + Ok(()) + } +} + +impl, I: 'static> OnUnbalanced> for Pallet { + fn on_nonzero_unbalanced(amount: NegativeImbalanceOf) { + let numeric_amount = amount.peek(); + + // Must resolve into existing but better to be safe. + T::Currency::resolve_creating(&Self::account_id(), amount); + + Self::deposit_event(Event::Deposit { value: numeric_amount }); + } +} + +/// TypedGet implementation to get the AccountId of the Treasury. +pub struct TreasuryAccountId(PhantomData); +impl sp_runtime::traits::TypedGet for TreasuryAccountId +where + R: crate::Config, +{ + type Type = ::AccountId; + fn get() -> Self::Type { + >::account_id() + } +} diff --git a/pallets/treasury/src/tests.rs b/pallets/treasury/src/tests.rs new file mode 100644 index 0000000000..a83157cff7 --- /dev/null +++ b/pallets/treasury/src/tests.rs @@ -0,0 +1,1147 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Treasury pallet tests. + +use core::{cell::RefCell, marker::PhantomData}; +use sp_runtime::{ + traits::{BadOrigin, Dispatchable, IdentityLookup}, + BuildStorage, +}; + +use frame_support::{ + assert_err_ignore_postinfo, assert_noop, assert_ok, derive_impl, + pallet_prelude::Pays, + parameter_types, + traits::{ + tokens::{ConversionFromAssetBalance, PaymentStatus}, + ConstU32, ConstU64, OnInitialize, + }, + PalletId, +}; + +use super::*; +use crate as treasury; + +type Block = frame_system::mocking::MockBlock; +type UtilityCall = pallet_utility::Call; +type TreasuryCall = crate::Call; + +frame_support::construct_runtime!( + pub enum Test + { + System: frame_system, + Balances: pallet_balances, + Treasury: treasury, + Utility: pallet_utility, + } +); + +#[derive_impl(frame_system::config_preludes::TestDefaultConfig)] +impl frame_system::Config for Test { + type AccountId = u128; // u64 is not enough to hold bytes used to generate bounty account + type Lookup = IdentityLookup; + type Block = Block; + type AccountData = pallet_balances::AccountData; +} +impl pallet_balances::Config for Test { + type MaxLocks = (); + type MaxReserves = (); + type ReserveIdentifier = [u8; 8]; + type Balance = u64; + type RuntimeEvent = RuntimeEvent; + type DustRemoval = (); + type ExistentialDeposit = ConstU64<1>; + type AccountStore = System; + type WeightInfo = (); + type FreezeIdentifier = (); + type MaxFreezes = (); + type RuntimeHoldReason = (); + type RuntimeFreezeReason = (); + type DoneSlashHandler = (); +} + +impl pallet_utility::Config for Test { + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; + type PalletsOrigin = OriginCaller; + type WeightInfo = (); +} + +thread_local! { + pub static PAID: RefCell> = const { RefCell::new(BTreeMap::new()) }; + pub static STATUS: RefCell> = const { RefCell::new(BTreeMap::new()) }; + pub static LAST_ID: RefCell = const { RefCell::new(0u64) }; +} + +/// paid balance for a given account and asset ids +fn paid(who: u128, asset_id: u32) -> u64 { + PAID.with(|p| p.borrow().get(&(who, asset_id)).cloned().unwrap_or(0)) +} + +/// reduce paid balance for a given account and asset ids +fn unpay(who: u128, asset_id: u32, amount: u64) { + PAID.with(|p| p.borrow_mut().entry((who, asset_id)).or_default().saturating_reduce(amount)) +} + +/// set status for a given payment id +fn set_status(id: u64, s: PaymentStatus) { + STATUS.with(|m| m.borrow_mut().insert(id, s)); +} + +pub struct TestPay; +impl Pay for TestPay { + type Beneficiary = u128; + type Balance = u64; + type Id = u64; + type AssetKind = u32; + type Error = (); + + fn pay( + who: &Self::Beneficiary, + asset_kind: Self::AssetKind, + amount: Self::Balance, + ) -> Result { + PAID.with(|paid| *paid.borrow_mut().entry((*who, asset_kind)).or_default() += amount); + Ok(LAST_ID.with(|lid| { + let x = *lid.borrow(); + lid.replace(x + 1); + x + })) + } + fn check_payment(id: Self::Id) -> PaymentStatus { + STATUS.with(|s| s.borrow().get(&id).cloned().unwrap_or(PaymentStatus::Unknown)) + } + #[cfg(feature = "runtime-benchmarks")] + fn ensure_successful(_: &Self::Beneficiary, _: Self::AssetKind, _: Self::Balance) {} + #[cfg(feature = "runtime-benchmarks")] + fn ensure_concluded(id: Self::Id) { + set_status(id, PaymentStatus::Failure) + } +} + +parameter_types! { + pub const ProposalBond: Permill = Permill::from_percent(5); + pub const Burn: Permill = Permill::from_percent(50); + pub const TreasuryPalletId: PalletId = PalletId(*b"py/trsry"); + pub TreasuryAccount: u128 = Treasury::account_id(); + pub const SpendPayoutPeriod: u64 = 5; +} +pub struct TestSpendOrigin; +impl frame_support::traits::EnsureOrigin for TestSpendOrigin { + type Success = u64; + fn try_origin(o: RuntimeOrigin) -> Result { + Result::, RuntimeOrigin>::from(o).and_then(|o| match o { + frame_system::RawOrigin::Root => Ok(u64::MAX), + frame_system::RawOrigin::Signed(10) => Ok(5), + frame_system::RawOrigin::Signed(11) => Ok(10), + frame_system::RawOrigin::Signed(12) => Ok(20), + frame_system::RawOrigin::Signed(13) => Ok(50), + r => Err(RuntimeOrigin::from(r)), + }) + } + #[cfg(feature = "runtime-benchmarks")] + fn try_successful_origin() -> Result { + Ok(RuntimeOrigin::root()) + } +} + +pub struct MulBy(PhantomData); +impl> ConversionFromAssetBalance for MulBy { + type Error = (); + fn from_asset_balance(balance: u64, _asset_id: u32) -> Result { + balance.checked_mul(N::get()).ok_or(()) + } + #[cfg(feature = "runtime-benchmarks")] + fn ensure_successful(_: u32) {} +} + +impl Config for Test { + type PalletId = TreasuryPalletId; + type Currency = pallet_balances::Pallet; + type ApproveOrigin = frame_system::EnsureRoot; + type RejectOrigin = frame_system::EnsureRoot; + type RuntimeEvent = RuntimeEvent; + type OnSlash = (); + type ProposalBond = ProposalBond; + type ProposalBondMinimum = ConstU64<1>; + type ProposalBondMaximum = (); + type SpendPeriod = ConstU64<2>; + type Burn = Burn; + type BurnDestination = (); // Just gets burned. + type WeightInfo = (); + type SpendFunds = (); + type MaxApprovals = ConstU32<100>; + type SpendOrigin = TestSpendOrigin; + type AssetKind = u32; + type Beneficiary = u128; + type BeneficiaryLookup = IdentityLookup; + type Paymaster = TestPay; + type BalanceConverter = MulBy>; + type PayoutPeriod = SpendPayoutPeriod; + #[cfg(feature = "runtime-benchmarks")] + type BenchmarkHelper = (); +} + +pub struct ExtBuilder {} + +impl Default for ExtBuilder { + fn default() -> Self { + Self {} + } +} + +impl ExtBuilder { + pub fn build(self) -> sp_io::TestExternalities { + let mut t = frame_system::GenesisConfig::::default().build_storage().unwrap(); + pallet_balances::GenesisConfig:: { + // Total issuance will be 200 with treasury account initialized at ED. + balances: vec![(0, 100), (1, 98), (2, 1)], + ..Default::default() + } + .assimilate_storage(&mut t) + .unwrap(); + crate::GenesisConfig::::default().assimilate_storage(&mut t).unwrap(); + let mut ext = sp_io::TestExternalities::new(t); + ext.execute_with(|| System::set_block_number(1)); + ext + } +} + +fn get_payment_id(i: SpendIndex) -> Option { + let spend = Spends::::get(i).expect("no spend"); + match spend.status { + PaymentState::Attempted { id } => Some(id), + _ => None, + } +} + +#[test] +fn genesis_config_works() { + ExtBuilder::default().build().execute_with(|| { + assert_eq!(Treasury::pot(), 0); + assert_eq!(Treasury::proposal_count(), 0); + }); +} + +#[test] +fn spend_local_origin_permissioning_works() { + ExtBuilder::default().build().execute_with(|| { + assert_noop!(Treasury::spend_local(RuntimeOrigin::signed(1), 1, 1), BadOrigin); + assert_noop!( + Treasury::spend_local(RuntimeOrigin::signed(10), 6, 1), + Error::::InsufficientPermission + ); + assert_noop!( + Treasury::spend_local(RuntimeOrigin::signed(11), 11, 1), + Error::::InsufficientPermission + ); + assert_noop!( + Treasury::spend_local(RuntimeOrigin::signed(12), 21, 1), + Error::::InsufficientPermission + ); + assert_noop!( + Treasury::spend_local(RuntimeOrigin::signed(13), 51, 1), + Error::::InsufficientPermission + ); + }); +} + +#[docify::export] +#[test] +fn spend_local_origin_works() { + ExtBuilder::default().build().execute_with(|| { + // Check that accumulate works when we have Some value in Dummy already. + Balances::make_free_balance_be(&Treasury::account_id(), 101); + // approve spend of some amount to beneficiary `6`. + assert_ok!(Treasury::spend_local(RuntimeOrigin::signed(10), 5, 6)); + assert_ok!(Treasury::spend_local(RuntimeOrigin::signed(10), 5, 6)); + assert_ok!(Treasury::spend_local(RuntimeOrigin::signed(10), 5, 6)); + assert_ok!(Treasury::spend_local(RuntimeOrigin::signed(10), 5, 6)); + assert_ok!(Treasury::spend_local(RuntimeOrigin::signed(11), 10, 6)); + assert_ok!(Treasury::spend_local(RuntimeOrigin::signed(12), 20, 6)); + assert_ok!(Treasury::spend_local(RuntimeOrigin::signed(13), 50, 6)); + // free balance of `6` is zero, spend period has not passed. + >::on_initialize(1); + assert_eq!(Balances::free_balance(6), 0); + // free balance of `6` is `100`, spend period has passed. + >::on_initialize(2); + assert_eq!(Balances::free_balance(6), 100); + // `100` spent, `1` burned. + assert_eq!(Treasury::pot(), 0); + }); +} + +#[test] +fn minting_works() { + ExtBuilder::default().build().execute_with(|| { + // Check that accumulate works when we have Some value in Dummy already. + Balances::make_free_balance_be(&Treasury::account_id(), 101); + assert_eq!(Treasury::pot(), 100); + }); +} + +#[test] +fn spend_proposal_takes_min_deposit() { + ExtBuilder::default().build().execute_with(|| { + assert_ok!({ + #[allow(deprecated)] + Treasury::propose_spend(RuntimeOrigin::signed(0), 1, 3) + }); + assert_eq!(Balances::free_balance(0), 99); + assert_eq!(Balances::reserved_balance(0), 1); + }); +} + +#[test] +fn spend_proposal_takes_proportional_deposit() { + ExtBuilder::default().build().execute_with(|| { + assert_ok!({ + #[allow(deprecated)] + Treasury::propose_spend(RuntimeOrigin::signed(0), 100, 3) + }); + assert_eq!(Balances::free_balance(0), 95); + assert_eq!(Balances::reserved_balance(0), 5); + }); +} + +#[test] +fn spend_proposal_fails_when_proposer_poor() { + ExtBuilder::default().build().execute_with(|| { + assert_noop!( + { + #[allow(deprecated)] + Treasury::propose_spend(RuntimeOrigin::signed(2), 100, 3) + }, + Error::::InsufficientProposersBalance, + ); + }); +} + +#[test] +fn accepted_spend_proposal_ignored_outside_spend_period() { + ExtBuilder::default().build().execute_with(|| { + Balances::make_free_balance_be(&Treasury::account_id(), 101); + + assert_ok!({ + #[allow(deprecated)] + Treasury::propose_spend(RuntimeOrigin::signed(0), 100, 3) + }); + assert_ok!({ + #[allow(deprecated)] + Treasury::approve_proposal(RuntimeOrigin::root(), 0) + }); + + >::on_initialize(1); + assert_eq!(Balances::free_balance(3), 0); + assert_eq!(Treasury::pot(), 100); + }); +} + +#[test] +fn unused_pot_should_diminish() { + ExtBuilder::default().build().execute_with(|| { + let init_total_issuance = Balances::total_issuance(); + Balances::make_free_balance_be(&Treasury::account_id(), 101); + assert_eq!(Balances::total_issuance(), init_total_issuance + 100); + + >::on_initialize(2); + assert_eq!(Treasury::pot(), 50); + assert_eq!(Balances::total_issuance(), init_total_issuance + 50); + }); +} + +#[test] +fn rejected_spend_proposal_ignored_on_spend_period() { + ExtBuilder::default().build().execute_with(|| { + Balances::make_free_balance_be(&Treasury::account_id(), 101); + + assert_ok!({ + #[allow(deprecated)] + Treasury::propose_spend(RuntimeOrigin::signed(0), 100, 3) + }); + assert_ok!({ + #[allow(deprecated)] + Treasury::reject_proposal(RuntimeOrigin::root(), 0) + }); + + >::on_initialize(2); + assert_eq!(Balances::free_balance(3), 0); + assert_eq!(Treasury::pot(), 50); + }); +} + +#[test] +fn reject_already_rejected_spend_proposal_fails() { + ExtBuilder::default().build().execute_with(|| { + Balances::make_free_balance_be(&Treasury::account_id(), 101); + + assert_ok!({ + #[allow(deprecated)] + Treasury::propose_spend(RuntimeOrigin::signed(0), 100, 3) + }); + assert_ok!({ + #[allow(deprecated)] + Treasury::reject_proposal(RuntimeOrigin::root(), 0) + }); + assert_noop!( + { + #[allow(deprecated)] + Treasury::reject_proposal(RuntimeOrigin::root(), 0) + }, + Error::::InvalidIndex + ); + }); +} + +#[test] +fn reject_non_existent_spend_proposal_fails() { + ExtBuilder::default().build().execute_with(|| { + assert_noop!( + { + #[allow(deprecated)] + Treasury::reject_proposal(RuntimeOrigin::root(), 0) + }, + Error::::InvalidIndex + ); + }); +} + +#[test] +fn accept_non_existent_spend_proposal_fails() { + ExtBuilder::default().build().execute_with(|| { + assert_noop!( + { + #[allow(deprecated)] + Treasury::approve_proposal(RuntimeOrigin::root(), 0) + }, + Error::::InvalidIndex + ); + }); +} + +#[test] +fn accept_already_rejected_spend_proposal_fails() { + ExtBuilder::default().build().execute_with(|| { + Balances::make_free_balance_be(&Treasury::account_id(), 101); + + assert_ok!({ + #[allow(deprecated)] + Treasury::propose_spend(RuntimeOrigin::signed(0), 100, 3) + }); + assert_ok!({ + #[allow(deprecated)] + Treasury::reject_proposal(RuntimeOrigin::root(), 0) + }); + assert_noop!( + { + #[allow(deprecated)] + Treasury::approve_proposal(RuntimeOrigin::root(), 0) + }, + Error::::InvalidIndex + ); + }); +} + +#[test] +fn accepted_spend_proposal_enacted_on_spend_period() { + ExtBuilder::default().build().execute_with(|| { + Balances::make_free_balance_be(&Treasury::account_id(), 101); + assert_eq!(Treasury::pot(), 100); + + assert_ok!({ + #[allow(deprecated)] + Treasury::propose_spend(RuntimeOrigin::signed(0), 100, 3) + }); + assert_ok!({ + #[allow(deprecated)] + Treasury::approve_proposal(RuntimeOrigin::root(), 0) + }); + + >::on_initialize(2); + assert_eq!(Balances::free_balance(3), 100); + assert_eq!(Treasury::pot(), 0); + }); +} + +#[test] +fn pot_underflow_should_not_diminish() { + ExtBuilder::default().build().execute_with(|| { + Balances::make_free_balance_be(&Treasury::account_id(), 101); + assert_eq!(Treasury::pot(), 100); + + assert_ok!({ + #[allow(deprecated)] + Treasury::propose_spend(RuntimeOrigin::signed(0), 150, 3) + }); + assert_ok!({ + #[allow(deprecated)] + Treasury::approve_proposal(RuntimeOrigin::root(), 0) + }); + + >::on_initialize(2); + assert_eq!(Treasury::pot(), 100); // Pot hasn't changed + + let _ = Balances::deposit_into_existing(&Treasury::account_id(), 100).unwrap(); + >::on_initialize(4); + assert_eq!(Balances::free_balance(3), 150); // Fund has been spent + assert_eq!(Treasury::pot(), 25); // Pot has finally changed + }); +} + +// Treasury account doesn't get deleted if amount approved to spend is all its free balance. +// i.e. pot should not include existential deposit needed for account survival. +#[test] +fn treasury_account_doesnt_get_deleted() { + ExtBuilder::default().build().execute_with(|| { + Balances::make_free_balance_be(&Treasury::account_id(), 101); + assert_eq!(Treasury::pot(), 100); + let treasury_balance = Balances::free_balance(Treasury::account_id()); + + assert_ok!({ + #[allow(deprecated)] + Treasury::propose_spend(RuntimeOrigin::signed(0), treasury_balance, 3) + }); + assert_ok!({ + #[allow(deprecated)] + Treasury::approve_proposal(RuntimeOrigin::root(), 0) + }); + + >::on_initialize(2); + assert_eq!(Treasury::pot(), 100); // Pot hasn't changed + + assert_ok!({ + #[allow(deprecated)] + Treasury::propose_spend(RuntimeOrigin::signed(0), Treasury::pot(), 3) + }); + assert_ok!({ + #[allow(deprecated)] + Treasury::approve_proposal(RuntimeOrigin::root(), 1) + }); + + >::on_initialize(4); + assert_eq!(Treasury::pot(), 0); // Pot is emptied + assert_eq!(Balances::free_balance(Treasury::account_id()), 1); // but the account is still there + }); +} + +// In case treasury account is not existing then it works fine. +// This is useful for chain that will just update runtime. +#[test] +fn inexistent_account_works() { + let mut t = frame_system::GenesisConfig::::default().build_storage().unwrap(); + pallet_balances::GenesisConfig:: { + balances: vec![(0, 100), (1, 99), (2, 1)], + ..Default::default() + } + .assimilate_storage(&mut t) + .unwrap(); + // Treasury genesis config is not build thus treasury account does not exist + let mut t: sp_io::TestExternalities = t.into(); + + t.execute_with(|| { + assert_eq!(Balances::free_balance(Treasury::account_id()), 0); // Account does not exist + assert_eq!(Treasury::pot(), 0); // Pot is empty + + assert_ok!({ + #[allow(deprecated)] + Treasury::propose_spend(RuntimeOrigin::signed(0), 99, 3) + }); + assert_ok!({ + #[allow(deprecated)] + Treasury::approve_proposal(RuntimeOrigin::root(), 0) + }); + assert_ok!({ + #[allow(deprecated)] + Treasury::propose_spend(RuntimeOrigin::signed(0), 1, 3) + }); + assert_ok!({ + #[allow(deprecated)] + Treasury::approve_proposal(RuntimeOrigin::root(), 1) + }); + >::on_initialize(2); + assert_eq!(Treasury::pot(), 0); // Pot hasn't changed + assert_eq!(Balances::free_balance(3), 0); // Balance of `3` hasn't changed + + Balances::make_free_balance_be(&Treasury::account_id(), 100); + assert_eq!(Treasury::pot(), 99); // Pot now contains funds + assert_eq!(Balances::free_balance(Treasury::account_id()), 100); // Account does exist + + >::on_initialize(4); + + assert_eq!(Treasury::pot(), 0); // Pot has changed + assert_eq!(Balances::free_balance(3), 99); // Balance of `3` has changed + }); +} + +#[test] +fn genesis_funding_works() { + let mut t = frame_system::GenesisConfig::::default().build_storage().unwrap(); + let initial_funding = 100; + pallet_balances::GenesisConfig:: { + // Total issuance will be 200 with treasury account initialized with 100. + balances: vec![(0, 100), (Treasury::account_id(), initial_funding)], + ..Default::default() + } + .assimilate_storage(&mut t) + .unwrap(); + crate::GenesisConfig::::default().assimilate_storage(&mut t).unwrap(); + let mut t: sp_io::TestExternalities = t.into(); + + t.execute_with(|| { + assert_eq!(Balances::free_balance(Treasury::account_id()), initial_funding); + assert_eq!(Treasury::pot(), initial_funding - Balances::minimum_balance()); + }); +} + +#[test] +fn max_approvals_limited() { + ExtBuilder::default().build().execute_with(|| { + Balances::make_free_balance_be(&Treasury::account_id(), u64::MAX); + Balances::make_free_balance_be(&0, u64::MAX); + + for _ in 0..::MaxApprovals::get() { + assert_ok!({ + #[allow(deprecated)] + Treasury::propose_spend(RuntimeOrigin::signed(0), 100, 3) + }); + assert_ok!({ + #[allow(deprecated)] + Treasury::approve_proposal(RuntimeOrigin::root(), 0) + }); + } + + // One too many will fail + assert_ok!({ + #[allow(deprecated)] + Treasury::propose_spend(RuntimeOrigin::signed(0), 100, 3) + }); + assert_noop!( + { + #[allow(deprecated)] + Treasury::approve_proposal(RuntimeOrigin::root(), 0) + }, + Error::::TooManyApprovals + ); + }); +} + +#[test] +fn remove_already_removed_approval_fails() { + ExtBuilder::default().build().execute_with(|| { + Balances::make_free_balance_be(&Treasury::account_id(), 101); + + assert_ok!({ + #[allow(deprecated)] + Treasury::propose_spend(RuntimeOrigin::signed(0), 100, 3) + }); + assert_ok!({ + #[allow(deprecated)] + Treasury::approve_proposal(RuntimeOrigin::root(), 0) + }); + assert_eq!(Treasury::approvals(), vec![0]); + assert_ok!(Treasury::remove_approval(RuntimeOrigin::root(), 0)); + assert_eq!(Treasury::approvals(), vec![]); + + assert_noop!( + Treasury::remove_approval(RuntimeOrigin::root(), 0), + Error::::ProposalNotApproved + ); + }); +} + +#[test] +fn spending_local_in_batch_respects_max_total() { + ExtBuilder::default().build().execute_with(|| { + // Respect the `max_total` for the given origin. + assert_ok!(RuntimeCall::from(UtilityCall::batch_all { + calls: vec![ + RuntimeCall::from(TreasuryCall::spend_local { amount: 2, beneficiary: 100 }), + RuntimeCall::from(TreasuryCall::spend_local { amount: 2, beneficiary: 101 }) + ] + }) + .dispatch(RuntimeOrigin::signed(10))); + + assert_err_ignore_postinfo!( + RuntimeCall::from(UtilityCall::batch_all { + calls: vec![ + RuntimeCall::from(TreasuryCall::spend_local { amount: 2, beneficiary: 100 }), + RuntimeCall::from(TreasuryCall::spend_local { amount: 4, beneficiary: 101 }) + ] + }) + .dispatch(RuntimeOrigin::signed(10)), + Error::::InsufficientPermission + ); + }) +} + +#[test] +fn spending_in_batch_respects_max_total() { + ExtBuilder::default().build().execute_with(|| { + // Respect the `max_total` for the given origin. + assert_ok!(RuntimeCall::from(UtilityCall::batch_all { + calls: vec![ + RuntimeCall::from(TreasuryCall::spend { + asset_kind: Box::new(1), + amount: 1, + beneficiary: Box::new(100), + valid_from: None, + }), + RuntimeCall::from(TreasuryCall::spend { + asset_kind: Box::new(1), + amount: 1, + beneficiary: Box::new(101), + valid_from: None, + }) + ] + }) + .dispatch(RuntimeOrigin::signed(10))); + + assert_err_ignore_postinfo!( + RuntimeCall::from(UtilityCall::batch_all { + calls: vec![ + RuntimeCall::from(TreasuryCall::spend { + asset_kind: Box::new(1), + amount: 2, + beneficiary: Box::new(100), + valid_from: None, + }), + RuntimeCall::from(TreasuryCall::spend { + asset_kind: Box::new(1), + amount: 2, + beneficiary: Box::new(101), + valid_from: None, + }) + ] + }) + .dispatch(RuntimeOrigin::signed(10)), + Error::::InsufficientPermission + ); + }) +} + +#[test] +fn spend_origin_works() { + ExtBuilder::default().build().execute_with(|| { + assert_ok!(Treasury::spend(RuntimeOrigin::signed(10), Box::new(1), 1, Box::new(6), None)); + assert_ok!(Treasury::spend(RuntimeOrigin::signed(10), Box::new(1), 2, Box::new(6), None)); + assert_noop!( + Treasury::spend(RuntimeOrigin::signed(10), Box::new(1), 3, Box::new(6), None), + Error::::InsufficientPermission + ); + assert_ok!(Treasury::spend(RuntimeOrigin::signed(11), Box::new(1), 5, Box::new(6), None)); + assert_noop!( + Treasury::spend(RuntimeOrigin::signed(11), Box::new(1), 6, Box::new(6), None), + Error::::InsufficientPermission + ); + assert_ok!(Treasury::spend(RuntimeOrigin::signed(12), Box::new(1), 10, Box::new(6), None)); + assert_noop!( + Treasury::spend(RuntimeOrigin::signed(12), Box::new(1), 11, Box::new(6), None), + Error::::InsufficientPermission + ); + + assert_eq!(SpendCount::::get(), 4); + assert_eq!(Spends::::iter().count(), 4); + }); +} + +#[test] +fn spend_works() { + ExtBuilder::default().build().execute_with(|| { + System::set_block_number(1); + assert_ok!(Treasury::spend(RuntimeOrigin::signed(10), Box::new(1), 2, Box::new(6), None)); + + assert_eq!(SpendCount::::get(), 1); + assert_eq!( + Spends::::get(0).unwrap(), + SpendStatus { + asset_kind: 1, + amount: 2, + beneficiary: 6, + valid_from: 1, + expire_at: 6, + status: PaymentState::Pending, + } + ); + System::assert_last_event( + Event::::AssetSpendApproved { + index: 0, + asset_kind: 1, + amount: 2, + beneficiary: 6, + valid_from: 1, + expire_at: 6, + } + .into(), + ); + }); +} + +#[test] +fn spend_expires() { + ExtBuilder::default().build().execute_with(|| { + assert_eq!(::PayoutPeriod::get(), 5); + + // spend `0` expires in 5 blocks after the creating. + System::set_block_number(1); + assert_ok!(Treasury::spend(RuntimeOrigin::signed(10), Box::new(1), 2, Box::new(6), None)); + System::set_block_number(6); + assert_noop!(Treasury::payout(RuntimeOrigin::signed(1), 0), Error::::SpendExpired); + + // spend cannot be approved since its already expired. + assert_noop!( + Treasury::spend(RuntimeOrigin::signed(10), Box::new(1), 2, Box::new(6), Some(0)), + Error::::SpendExpired + ); + }); +} + +#[docify::export] +#[test] +fn spend_payout_works() { + ExtBuilder::default().build().execute_with(|| { + System::set_block_number(1); + // approve a `2` coins spend of asset `1` to beneficiary `6`, the spend valid from now. + assert_ok!(Treasury::spend(RuntimeOrigin::signed(10), Box::new(1), 2, Box::new(6), None)); + // payout the spend. + assert_ok!(Treasury::payout(RuntimeOrigin::signed(1), 0)); + // beneficiary received `2` coins of asset `1`. + assert_eq!(paid(6, 1), 2); + assert_eq!(SpendCount::::get(), 1); + let payment_id = get_payment_id(0).expect("no payment attempt"); + System::assert_last_event(Event::::Paid { index: 0, payment_id }.into()); + set_status(payment_id, PaymentStatus::Success); + // the payment succeed. + assert_ok!(Treasury::check_status(RuntimeOrigin::signed(1), 0)); + System::assert_last_event(Event::::SpendProcessed { index: 0 }.into()); + // cannot payout the same spend twice. + assert_noop!(Treasury::payout(RuntimeOrigin::signed(1), 0), Error::::InvalidIndex); + }); +} + +#[test] +fn payout_retry_works() { + ExtBuilder::default().build().execute_with(|| { + System::set_block_number(1); + assert_ok!(Treasury::spend(RuntimeOrigin::signed(10), Box::new(1), 2, Box::new(6), None)); + assert_ok!(Treasury::payout(RuntimeOrigin::signed(1), 0)); + assert_eq!(paid(6, 1), 2); + let payment_id = get_payment_id(0).expect("no payment attempt"); + // spend payment is failed + set_status(payment_id, PaymentStatus::Failure); + unpay(6, 1, 2); + // cannot payout a spend in the attempted state + assert_noop!( + Treasury::payout(RuntimeOrigin::signed(1), 0), + Error::::AlreadyAttempted + ); + // check status and update it to retry the payout again + assert_ok!(Treasury::check_status(RuntimeOrigin::signed(1), 0)); + System::assert_last_event(Event::::PaymentFailed { index: 0, payment_id }.into()); + // the payout can be retried now + assert_ok!(Treasury::payout(RuntimeOrigin::signed(1), 0)); + assert_eq!(paid(6, 1), 2); + }); +} + +#[test] +fn spend_valid_from_works() { + ExtBuilder::default().build().execute_with(|| { + assert_eq!(::PayoutPeriod::get(), 5); + System::set_block_number(1); + + // spend valid from block `2`. + assert_ok!(Treasury::spend( + RuntimeOrigin::signed(10), + Box::new(1), + 2, + Box::new(6), + Some(2) + )); + assert_noop!(Treasury::payout(RuntimeOrigin::signed(1), 0), Error::::EarlyPayout); + System::set_block_number(2); + assert_ok!(Treasury::payout(RuntimeOrigin::signed(1), 0)); + + System::set_block_number(5); + // spend approved even if `valid_from` in the past since the payout period has not passed. + assert_ok!(Treasury::spend( + RuntimeOrigin::signed(10), + Box::new(1), + 2, + Box::new(6), + Some(4) + )); + // spend paid. + assert_ok!(Treasury::payout(RuntimeOrigin::signed(1), 1)); + }); +} + +#[test] +fn void_spend_works() { + ExtBuilder::default().build().execute_with(|| { + System::set_block_number(1); + // spend cannot be voided if already attempted. + assert_ok!(Treasury::spend( + RuntimeOrigin::signed(10), + Box::new(1), + 2, + Box::new(6), + Some(1) + )); + assert_ok!(Treasury::payout(RuntimeOrigin::signed(1), 0)); + assert_noop!( + Treasury::void_spend(RuntimeOrigin::root(), 0), + Error::::AlreadyAttempted + ); + + // void spend. + assert_ok!(Treasury::spend( + RuntimeOrigin::signed(10), + Box::new(1), + 2, + Box::new(6), + Some(10) + )); + assert_ok!(Treasury::void_spend(RuntimeOrigin::root(), 1)); + assert_eq!(Spends::::get(1), None); + }); +} + +#[test] +fn check_status_works() { + ExtBuilder::default().build().execute_with(|| { + assert_eq!(::PayoutPeriod::get(), 5); + System::set_block_number(1); + + // spend `0` expired and can be removed. + assert_ok!(Treasury::spend(RuntimeOrigin::signed(10), Box::new(1), 2, Box::new(6), None)); + System::set_block_number(7); + let info = Treasury::check_status(RuntimeOrigin::signed(1), 0).unwrap(); + assert_eq!(info.pays_fee, Pays::No); + System::assert_last_event(Event::::SpendProcessed { index: 0 }.into()); + + // spend `1` payment failed and expired hence can be removed. + assert_ok!(Treasury::spend(RuntimeOrigin::signed(10), Box::new(1), 2, Box::new(6), None)); + assert_noop!( + Treasury::check_status(RuntimeOrigin::signed(1), 1), + Error::::NotAttempted + ); + assert_ok!(Treasury::payout(RuntimeOrigin::signed(1), 1)); + let payment_id = get_payment_id(1).expect("no payment attempt"); + set_status(payment_id, PaymentStatus::Failure); + // spend expired. + System::set_block_number(13); + let info = Treasury::check_status(RuntimeOrigin::signed(1), 1).unwrap(); + assert_eq!(info.pays_fee, Pays::Yes); + System::assert_last_event(Event::::PaymentFailed { index: 1, payment_id }.into()); + let info = Treasury::check_status(RuntimeOrigin::signed(1), 1).unwrap(); + assert_eq!(info.pays_fee, Pays::No); + System::assert_last_event(Event::::SpendProcessed { index: 1 }.into()); + + // spend `2` payment succeed. + assert_ok!(Treasury::spend(RuntimeOrigin::signed(10), Box::new(1), 2, Box::new(6), None)); + assert_ok!(Treasury::payout(RuntimeOrigin::signed(1), 2)); + let payment_id = get_payment_id(2).expect("no payment attempt"); + set_status(payment_id, PaymentStatus::Success); + let info = Treasury::check_status(RuntimeOrigin::signed(1), 2).unwrap(); + assert_eq!(info.pays_fee, Pays::No); + System::assert_last_event(Event::::SpendProcessed { index: 2 }.into()); + + // spend `3` payment in process. + assert_ok!(Treasury::spend(RuntimeOrigin::signed(10), Box::new(1), 2, Box::new(6), None)); + assert_ok!(Treasury::payout(RuntimeOrigin::signed(1), 3)); + let payment_id = get_payment_id(3).expect("no payment attempt"); + set_status(payment_id, PaymentStatus::InProgress); + assert_noop!( + Treasury::check_status(RuntimeOrigin::signed(1), 3), + Error::::Inconclusive + ); + + // spend `4` removed since the payment status is unknown. + assert_ok!(Treasury::spend(RuntimeOrigin::signed(10), Box::new(1), 2, Box::new(6), None)); + assert_ok!(Treasury::payout(RuntimeOrigin::signed(1), 4)); + let payment_id = get_payment_id(4).expect("no payment attempt"); + set_status(payment_id, PaymentStatus::Unknown); + let info = Treasury::check_status(RuntimeOrigin::signed(1), 4).unwrap(); + assert_eq!(info.pays_fee, Pays::No); + System::assert_last_event(Event::::SpendProcessed { index: 4 }.into()); + }); +} + +#[test] +fn try_state_proposals_invariant_1_works() { + ExtBuilder::default().build().execute_with(|| { + use frame_support::pallet_prelude::DispatchError::Other; + // Add a proposal using `propose_spend` + assert_ok!({ + #[allow(deprecated)] + Treasury::propose_spend(RuntimeOrigin::signed(0), 1, 3) + }); + assert_eq!(Proposals::::iter().count(), 1); + assert_eq!(ProposalCount::::get(), 1); + // Check invariant 1 holds + assert!(ProposalCount::::get() as usize >= Proposals::::iter().count()); + // Break invariant 1 by decreasing `ProposalCount` + ProposalCount::::put(0); + // Invariant 1 should be violated + assert_eq!( + Treasury::do_try_state(), + Err(Other("Actual number of proposals exceeds `ProposalCount`.")) + ); + }); +} + +#[test] +fn try_state_proposals_invariant_2_works() { + ExtBuilder::default().build().execute_with(|| { + use frame_support::pallet_prelude::DispatchError::Other; + // Add a proposal using `propose_spend` + assert_ok!({ + #[allow(deprecated)] + Treasury::propose_spend(RuntimeOrigin::signed(0), 1, 3) + }); + assert_eq!(Proposals::::iter().count(), 1); + let current_proposal_count = ProposalCount::::get(); + assert_eq!(current_proposal_count, 1); + // Check invariant 2 holds + assert!( + Proposals::::iter_keys() + .all(|proposal_index| { + proposal_index < current_proposal_count + }) + ); + // Break invariant 2 by inserting the proposal under key = 1 + let proposal = Proposals::::take(0).unwrap(); + Proposals::::insert(1, proposal); + // Invariant 2 should be violated + assert_eq!( + Treasury::do_try_state(), + Err(Other("`ProposalCount` should by strictly greater than any ProposalIndex used as a key for `Proposals`.")) + ); + }); +} + +#[test] +fn try_state_proposals_invariant_3_works() { + ExtBuilder::default().build().execute_with(|| { + use frame_support::pallet_prelude::DispatchError::Other; + // Add a proposal using `propose_spend` + assert_ok!({ + #[allow(deprecated)] + Treasury::propose_spend(RuntimeOrigin::signed(0), 10, 3) + }); + assert_eq!(Proposals::::iter().count(), 1); + // Approve the proposal + assert_ok!({ + #[allow(deprecated)] + Treasury::approve_proposal(RuntimeOrigin::root(), 0) + }); + assert_eq!(Approvals::::get().len(), 1); + // Check invariant 3 holds + assert!(Approvals::::get() + .iter() + .all(|proposal_index| { Proposals::::contains_key(proposal_index) })); + // Break invariant 3 by adding another key to `Approvals` + let mut approvals_modified = Approvals::::get(); + approvals_modified.try_push(2).unwrap(); + Approvals::::put(approvals_modified); + // Invariant 3 should be violated + assert_eq!( + Treasury::do_try_state(), + Err(Other("Proposal indices in `Approvals` must also be contained in `Proposals`.")) + ); + }); +} + +#[test] +fn try_state_spends_invariant_1_works() { + ExtBuilder::default().build().execute_with(|| { + use frame_support::pallet_prelude::DispatchError::Other; + // Propose and approve a spend + assert_ok!({ + Treasury::spend(RuntimeOrigin::signed(10), Box::new(1), 1, Box::new(6), None) + }); + assert_eq!(Spends::::iter().count(), 1); + assert_eq!(SpendCount::::get(), 1); + // Check invariant 1 holds + assert!(SpendCount::::get() as usize >= Spends::::iter().count()); + // Break invariant 1 by decreasing `SpendCount` + SpendCount::::put(0); + // Invariant 1 should be violated + assert_eq!( + Treasury::do_try_state(), + Err(Other("Actual number of spends exceeds `SpendCount`.")) + ); + }); +} + +#[test] +fn try_state_spends_invariant_2_works() { + ExtBuilder::default().build().execute_with(|| { + use frame_support::pallet_prelude::DispatchError::Other; + // Propose and approve a spend + assert_ok!({ + Treasury::spend(RuntimeOrigin::signed(10), Box::new(1), 1, Box::new(6), None) + }); + assert_eq!(Spends::::iter().count(), 1); + let current_spend_count = SpendCount::::get(); + assert_eq!(current_spend_count, 1); + // Check invariant 2 holds + assert!( + Spends::::iter_keys() + .all(|spend_index| { + spend_index < current_spend_count + }) + ); + // Break invariant 2 by inserting the spend under key = 1 + let spend = Spends::::take(0).unwrap(); + Spends::::insert(1, spend); + // Invariant 2 should be violated + assert_eq!( + Treasury::do_try_state(), + Err(Other("`SpendCount` should by strictly greater than any SpendIndex used as a key for `Spends`.")) + ); + }); +} + +#[test] +fn try_state_spends_invariant_3_works() { + ExtBuilder::default().build().execute_with(|| { + use frame_support::pallet_prelude::DispatchError::Other; + // Propose and approve a spend + assert_ok!({ + Treasury::spend(RuntimeOrigin::signed(10), Box::new(1), 1, Box::new(6), None) + }); + assert_eq!(Spends::::iter().count(), 1); + let current_spend_count = SpendCount::::get(); + assert_eq!(current_spend_count, 1); + // Check invariant 3 holds + assert!(Spends::::iter_values() + .all(|SpendStatus { valid_from, expire_at, .. }| { valid_from < expire_at })); + // Break invariant 3 by reversing spend.expire_at and spend.valid_from + let spend = Spends::::take(0).unwrap(); + Spends::::insert( + 0, + SpendStatus { valid_from: spend.expire_at, expire_at: spend.valid_from, ..spend }, + ); + // Invariant 3 should be violated + assert_eq!( + Treasury::do_try_state(), + Err(Other("Spend cannot expire before it becomes valid.")) + ); + }); +} diff --git a/pallets/treasury/src/weights.rs b/pallets/treasury/src/weights.rs new file mode 100644 index 0000000000..82277e2d28 --- /dev/null +++ b/pallets/treasury/src/weights.rs @@ -0,0 +1,367 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Autogenerated weights for `pallet_treasury` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 32.0.0 +//! DATE: 2024-04-09, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `runner-anb7yjbi-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` +//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` + +// Executed Command: +// ./target/production/substrate-node +// benchmark +// pallet +// --chain=dev +// --steps=50 +// --repeat=20 +// --pallet=pallet_treasury +// --no-storage-info +// --no-median-slopes +// --no-min-squares +// --extrinsic=* +// --wasm-execution=compiled +// --heap-pages=4096 +// --output=./substrate/frame/treasury/src/weights.rs +// --header=./substrate/HEADER-APACHE2 +// --template=./substrate/.maintain/frame-weight-template.hbs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; +use core::marker::PhantomData; + +/// Weight functions needed for `pallet_treasury`. +pub trait WeightInfo { + fn spend_local() -> Weight; + fn propose_spend() -> Weight; + fn reject_proposal() -> Weight; + fn approve_proposal(p: u32, ) -> Weight; + fn remove_approval() -> Weight; + fn on_initialize_proposals(p: u32, ) -> Weight; + fn spend() -> Weight; + fn payout() -> Weight; + fn check_status() -> Weight; + fn void_spend() -> Weight; +} + +/// Weights for `pallet_treasury` using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl WeightInfo for SubstrateWeight { + /// Storage: `Treasury::ProposalCount` (r:1 w:1) + /// Proof: `Treasury::ProposalCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Treasury::Approvals` (r:1 w:1) + /// Proof: `Treasury::Approvals` (`max_values`: Some(1), `max_size`: Some(402), added: 897, mode: `MaxEncodedLen`) + /// Storage: `Treasury::Proposals` (r:0 w:1) + /// Proof: `Treasury::Proposals` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) + fn spend_local() -> Weight { + // Proof Size summary in bytes: + // Measured: `76` + // Estimated: `1887` + // Minimum execution time: 11_910_000 picoseconds. + Weight::from_parts(12_681_000, 1887) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } + /// Storage: `Treasury::ProposalCount` (r:1 w:1) + /// Proof: `Treasury::ProposalCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Treasury::Proposals` (r:0 w:1) + /// Proof: `Treasury::Proposals` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) + fn propose_spend() -> Weight { + // Proof Size summary in bytes: + // Measured: `177` + // Estimated: `1489` + // Minimum execution time: 24_704_000 picoseconds. + Weight::from_parts(25_484_000, 1489) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: `Treasury::Proposals` (r:1 w:1) + /// Proof: `Treasury::Proposals` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + fn reject_proposal() -> Weight { + // Proof Size summary in bytes: + // Measured: `335` + // Estimated: `3593` + // Minimum execution time: 26_632_000 picoseconds. + Weight::from_parts(27_325_000, 3593) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: `Treasury::Proposals` (r:1 w:0) + /// Proof: `Treasury::Proposals` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) + /// Storage: `Treasury::Approvals` (r:1 w:1) + /// Proof: `Treasury::Approvals` (`max_values`: Some(1), `max_size`: Some(402), added: 897, mode: `MaxEncodedLen`) + /// The range of component `p` is `[0, 99]`. + fn approve_proposal(p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `504 + p * (8 ±0)` + // Estimated: `3573` + // Minimum execution time: 8_436_000 picoseconds. + Weight::from_parts(11_268_438, 3573) + // Standard Error: 1_039 + .saturating_add(Weight::from_parts(70_903, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Treasury::Approvals` (r:1 w:1) + /// Proof: `Treasury::Approvals` (`max_values`: Some(1), `max_size`: Some(402), added: 897, mode: `MaxEncodedLen`) + fn remove_approval() -> Weight { + // Proof Size summary in bytes: + // Measured: `161` + // Estimated: `1887` + // Minimum execution time: 6_372_000 picoseconds. + Weight::from_parts(6_567_000, 1887) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Treasury::Deactivated` (r:1 w:1) + /// Proof: `Treasury::Deactivated` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) + /// Storage: `Treasury::Approvals` (r:1 w:1) + /// Proof: `Treasury::Approvals` (`max_values`: Some(1), `max_size`: Some(402), added: 897, mode: `MaxEncodedLen`) + /// Storage: `Treasury::Proposals` (r:99 w:99) + /// Proof: `Treasury::Proposals` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:198 w:198) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Bounties::BountyApprovals` (r:1 w:1) + /// Proof: `Bounties::BountyApprovals` (`max_values`: Some(1), `max_size`: Some(402), added: 897, mode: `MaxEncodedLen`) + /// The range of component `p` is `[0, 99]`. + fn on_initialize_proposals(p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `451 + p * (251 ±0)` + // Estimated: `1887 + p * (5206 ±0)` + // Minimum execution time: 33_150_000 picoseconds. + Weight::from_parts(41_451_020, 1887) + // Standard Error: 19_018 + .saturating_add(Weight::from_parts(34_410_759, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(p.into()))) + .saturating_add(T::DbWeight::get().writes(3_u64)) + .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(p.into()))) + .saturating_add(Weight::from_parts(0, 5206).saturating_mul(p.into())) + } + /// Storage: `AssetRate::ConversionRateToNative` (r:1 w:0) + /// Proof: `AssetRate::ConversionRateToNative` (`max_values`: None, `max_size`: Some(36), added: 2511, mode: `MaxEncodedLen`) + /// Storage: `Treasury::SpendCount` (r:1 w:1) + /// Proof: `Treasury::SpendCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Treasury::Spends` (r:0 w:1) + /// Proof: `Treasury::Spends` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) + fn spend() -> Weight { + // Proof Size summary in bytes: + // Measured: `140` + // Estimated: `3501` + // Minimum execution time: 14_233_000 picoseconds. + Weight::from_parts(14_842_000, 3501) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: `Treasury::Spends` (r:1 w:1) + /// Proof: `Treasury::Spends` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) + /// Storage: `Assets::Asset` (r:1 w:1) + /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) + /// Storage: `Assets::Account` (r:2 w:2) + /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + fn payout() -> Weight { + // Proof Size summary in bytes: + // Measured: `709` + // Estimated: `6208` + // Minimum execution time: 58_857_000 picoseconds. + Weight::from_parts(61_291_000, 6208) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(5_u64)) + } + /// Storage: `Treasury::Spends` (r:1 w:1) + /// Proof: `Treasury::Spends` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) + fn check_status() -> Weight { + // Proof Size summary in bytes: + // Measured: `198` + // Estimated: `3538` + // Minimum execution time: 12_116_000 picoseconds. + Weight::from_parts(12_480_000, 3538) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Treasury::Spends` (r:1 w:1) + /// Proof: `Treasury::Spends` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) + fn void_spend() -> Weight { + // Proof Size summary in bytes: + // Measured: `198` + // Estimated: `3538` + // Minimum execution time: 10_834_000 picoseconds. + Weight::from_parts(11_427_000, 3538) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } +} + +// For backwards compatibility and tests. +impl WeightInfo for () { + /// Storage: `Treasury::ProposalCount` (r:1 w:1) + /// Proof: `Treasury::ProposalCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Treasury::Approvals` (r:1 w:1) + /// Proof: `Treasury::Approvals` (`max_values`: Some(1), `max_size`: Some(402), added: 897, mode: `MaxEncodedLen`) + /// Storage: `Treasury::Proposals` (r:0 w:1) + /// Proof: `Treasury::Proposals` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) + fn spend_local() -> Weight { + // Proof Size summary in bytes: + // Measured: `76` + // Estimated: `1887` + // Minimum execution time: 11_910_000 picoseconds. + Weight::from_parts(12_681_000, 1887) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(3_u64)) + } + /// Storage: `Treasury::ProposalCount` (r:1 w:1) + /// Proof: `Treasury::ProposalCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Treasury::Proposals` (r:0 w:1) + /// Proof: `Treasury::Proposals` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) + fn propose_spend() -> Weight { + // Proof Size summary in bytes: + // Measured: `177` + // Estimated: `1489` + // Minimum execution time: 24_704_000 picoseconds. + Weight::from_parts(25_484_000, 1489) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(2_u64)) + } + /// Storage: `Treasury::Proposals` (r:1 w:1) + /// Proof: `Treasury::Proposals` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + fn reject_proposal() -> Weight { + // Proof Size summary in bytes: + // Measured: `335` + // Estimated: `3593` + // Minimum execution time: 26_632_000 picoseconds. + Weight::from_parts(27_325_000, 3593) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(2_u64)) + } + /// Storage: `Treasury::Proposals` (r:1 w:0) + /// Proof: `Treasury::Proposals` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) + /// Storage: `Treasury::Approvals` (r:1 w:1) + /// Proof: `Treasury::Approvals` (`max_values`: Some(1), `max_size`: Some(402), added: 897, mode: `MaxEncodedLen`) + /// The range of component `p` is `[0, 99]`. + fn approve_proposal(p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `504 + p * (8 ±0)` + // Estimated: `3573` + // Minimum execution time: 8_436_000 picoseconds. + Weight::from_parts(11_268_438, 3573) + // Standard Error: 1_039 + .saturating_add(Weight::from_parts(70_903, 0).saturating_mul(p.into())) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: `Treasury::Approvals` (r:1 w:1) + /// Proof: `Treasury::Approvals` (`max_values`: Some(1), `max_size`: Some(402), added: 897, mode: `MaxEncodedLen`) + fn remove_approval() -> Weight { + // Proof Size summary in bytes: + // Measured: `161` + // Estimated: `1887` + // Minimum execution time: 6_372_000 picoseconds. + Weight::from_parts(6_567_000, 1887) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: `Treasury::Deactivated` (r:1 w:1) + /// Proof: `Treasury::Deactivated` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) + /// Storage: `Treasury::Approvals` (r:1 w:1) + /// Proof: `Treasury::Approvals` (`max_values`: Some(1), `max_size`: Some(402), added: 897, mode: `MaxEncodedLen`) + /// Storage: `Treasury::Proposals` (r:99 w:99) + /// Proof: `Treasury::Proposals` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:198 w:198) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Bounties::BountyApprovals` (r:1 w:1) + /// Proof: `Bounties::BountyApprovals` (`max_values`: Some(1), `max_size`: Some(402), added: 897, mode: `MaxEncodedLen`) + /// The range of component `p` is `[0, 99]`. + fn on_initialize_proposals(p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `451 + p * (251 ±0)` + // Estimated: `1887 + p * (5206 ±0)` + // Minimum execution time: 33_150_000 picoseconds. + Weight::from_parts(41_451_020, 1887) + // Standard Error: 19_018 + .saturating_add(Weight::from_parts(34_410_759, 0).saturating_mul(p.into())) + .saturating_add(RocksDbWeight::get().reads(3_u64)) + .saturating_add(RocksDbWeight::get().reads((3_u64).saturating_mul(p.into()))) + .saturating_add(RocksDbWeight::get().writes(3_u64)) + .saturating_add(RocksDbWeight::get().writes((3_u64).saturating_mul(p.into()))) + .saturating_add(Weight::from_parts(0, 5206).saturating_mul(p.into())) + } + /// Storage: `AssetRate::ConversionRateToNative` (r:1 w:0) + /// Proof: `AssetRate::ConversionRateToNative` (`max_values`: None, `max_size`: Some(36), added: 2511, mode: `MaxEncodedLen`) + /// Storage: `Treasury::SpendCount` (r:1 w:1) + /// Proof: `Treasury::SpendCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Treasury::Spends` (r:0 w:1) + /// Proof: `Treasury::Spends` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) + fn spend() -> Weight { + // Proof Size summary in bytes: + // Measured: `140` + // Estimated: `3501` + // Minimum execution time: 14_233_000 picoseconds. + Weight::from_parts(14_842_000, 3501) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(2_u64)) + } + /// Storage: `Treasury::Spends` (r:1 w:1) + /// Proof: `Treasury::Spends` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) + /// Storage: `Assets::Asset` (r:1 w:1) + /// Proof: `Assets::Asset` (`max_values`: None, `max_size`: Some(210), added: 2685, mode: `MaxEncodedLen`) + /// Storage: `Assets::Account` (r:2 w:2) + /// Proof: `Assets::Account` (`max_values`: None, `max_size`: Some(134), added: 2609, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + fn payout() -> Weight { + // Proof Size summary in bytes: + // Measured: `709` + // Estimated: `6208` + // Minimum execution time: 58_857_000 picoseconds. + Weight::from_parts(61_291_000, 6208) + .saturating_add(RocksDbWeight::get().reads(5_u64)) + .saturating_add(RocksDbWeight::get().writes(5_u64)) + } + /// Storage: `Treasury::Spends` (r:1 w:1) + /// Proof: `Treasury::Spends` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) + fn check_status() -> Weight { + // Proof Size summary in bytes: + // Measured: `198` + // Estimated: `3538` + // Minimum execution time: 12_116_000 picoseconds. + Weight::from_parts(12_480_000, 3538) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } + /// Storage: `Treasury::Spends` (r:1 w:1) + /// Proof: `Treasury::Spends` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`) + fn void_spend() -> Weight { + // Proof Size summary in bytes: + // Measured: `198` + // Estimated: `3538` + // Minimum execution time: 10_834_000 picoseconds. + Weight::from_parts(11_427_000, 3538) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } +} diff --git a/resources/frequency-paseo.json b/resources/frequency-paseo.json new file mode 100644 index 0000000000..d037f75dad --- /dev/null +++ b/resources/frequency-paseo.json @@ -0,0 +1,155 @@ +{ + "name": "Frequency Paseo", + "id": "frequency-paseo", + "chainType": "Live", + "bootNodes": [ + "/dns4/0.boot.testnet.amplica.io/tcp/30333/ws/p2p/12D3KooWArmKDbY8Y6XXHGodosWAjRWWxSw5YxWEjSZTBNjJXVSC" + ], + "telemetryEndpoints": [ + [ + "/dns/telemetry.frequency.xyz/tcp/443/x-parity-wss/%2Fsubmit%2F", + 0 + ] + ], + "protocolId": "frequency-paseo", + "properties": { + "ss58Format": 42, + "tokenDecimals": 8, + "tokenSymbol": "XRQCY" + }, + "relay_chain": "paseo", + "para_id": 4000, + "codeSubstitutes": {}, + "genesis": { + "runtime": { + "system": { + "code": "0x52bc537646db8e0528b52ffd0058346805eec4061915562056324a3af5c2c9e233e93f689b7dcd1a1700e93d31ec49422429bc0401e4bfd5a474338bf6600bfd017cc50c01dc1ff11ef8eb2d12c3a2ea06f2e326efb2efd92ddca4435fec0ee23f22ad11421ad984ecbde59601d516f414e713a7fdb175b7473c4b4e2d9c41f7f9b48f29cdf761d5264da1d2fc19580561d7d0eb658ad11646e936e908377af6261d61a597e60d2825140d02cba993062dd04959591036c00b0618896376f9bced87b61221f5fee3c3ed609294377a93a4809152b4b4d43428b91b58bd9cfa64b31a9e3d2d7241f356d87b3208a4ac4201817dfdaa9453f0dbf0d383bd3cb20e756c020d025d3c0fc17ff10ca1772b40b840b4b5c0d6b2b5d3ee4c0e48a401b9c6cb79f1598502c28f8fd7e125abbef9a178f9ebd729abf8da1a888198052dd069a723a8f4c24a39252faf9d881021b5bc7c10116c5937a02dc7d3b22a9ebd97e96414d296559b24854a6ffc7ef33428834eeb4d32a28a865f93b66c041530fcb32a3eca8ef13c51ac74fcc6aad8f1ffe1d5b7f5473b3e3a29e24b6f12116df477eaf801f42611d1a5b513ab3f3e1c32042b6a886c78d9f02ce59713f2416979598986b0868fd0086d1ba82b69dbcc87fcc81f8a0dd028abbe78f98de7cfe7dc0add10bcfcac1ffcfc37abe6a38b97f14392c53002daf27c3e1daf82d26ab55a92e3b66ddca32da7fd93f9d735beeaf478c4e582643da7e27170e263f30f5a818aa8c1f6d8feb861052ae28b8d611bd68f7fd58e3d9bd8fc6f1bc23dc4df6c58c5f583bf1ee5bfebf3dae5d9702a7e7a1da7e2f6b7753c3c106f9d0dab76320f4ec5438f8753f1b21e96d149ba3cf182328cb63cdae317fedb9a7d74f044e08762a5d0e324ee07fcf7c18edf6bd1aba18b41b6524eed8158e30d7ab2b7fd5104c93411d64f684eb1b927d716a69f6ca6fd51045bcd5f8e886cb51a0ae95a0dbfc133430e4294dc13bf577afbb6f6ecda422edd261571456bbfae3de3c3d6569bdb72414a9fdfbc6f7e88fb760da8bbc61b50771dd140ddaad1cc09d91b9069f5d7a4d54ea296565fdf2b1a1e88b5d5e2b6dc10ecf4d21bc22a4ac8753ef60fb63cada821d7f9f4f2bc4943b0a261358a2deb87fd096c79a008c4d42b9569e995ca34065b1babe27769c0fe5da797e7a3e3befec98ed72037041ac183d678839c10eea1ab4a4ec5631e1fc183d6a04629fd753d6230c2335f37ba9a3f2e62881d88215f18f6ebe2c11c10f96b5b7a1ff6ab7e9737745dbba65dcfae6d1be4805cd7bedc90ebda81f8aa1ff7a629a1c3aeed2f8f5e939bf4b6316fb92098840efb7244b04c4be6806095e18daebeae5da61b5d4d84f5515f3f9984d861035043a4bece3980d55c81c069239cc6ea6e0f5a3f16e48064bf0e1425c6ddc002a377797cdbb303d1be7d3921dab7ed40acd10d7241368c560b088682beb4e97db2b95f1c900da3d5eaab16112d9956ab8d689a3e46a3ade9b12f47a409e615112da0797b7037ba1afbb8b95f5e1176a3abe9971b62a4af0331f58876f475cc235a40c3edc111c1327d7d7a1f6cee5b777970753e4e2fdbbc6dcd1b92e797bc8f0f2f3920f2fc8d55f2f19255fc78caaaf9784d7ad8b5e570e05f971e563fdaf297f7752dafab3ea1b0639ca6ff2286d52774765796d527388dfdc39ad25fdffd5184dd68b6909c268265fa6381d1d8e7214704250a1143b4ba88d6ddd475aceea63ed957fde4e181a210da7cc8054d660d6ed3832dbd05e2b841ce086d79be6e39f551eee1efb5fdd15d870d4dd06d12115b7a9388a8d2dfa9f906e84d1a024c3317a4bace97aca2e7538db9207a5dd7e0065b83dc75edf28c205190e494bc90aeaf43ce86edebcb052da7beade1ac1fab27a5078ad4fb647ff246b1b12f17340fc49ab65cacdf51c753ef7bd35fdeb79c82d2f4df72ea6bd2f4dff5e5d4e743d303c5e86195e8a8e32f6f9b7a9f4ecb6b70c3bcedcbdb5e8e88ece911c58e97de720a56c929f80e83718921cad01692a0dba421bee8ed14abbe0d87555faaf97c1e435cd17c1b5671f3977fe0ead3c941091c6c8f6d20de58b5e72f0fd7219fde1758c0fc1863847c208ecc87cc1ccf11c2d3861535045e1ec6fac1e60861176d2114dd26b5c274c7aa3d65d526b5bef47e6315fcd9d567d3fbe5590881b42d40b787df4c5b56c185bdd74ecbaaed8ff65e83393928d1657b6c6b7039bec65b7ccecb74f2f1f0910b8275e14c0e4890e1d4363f7acba9782d6ed083cd1c7f3959975340bc5c90e4543c1043ee0656f3970b624108a3a02dcff78ed796864edb1fdd72eaeb3a1e7eb92078c80181d26ab58668788d37c92af8fdb28abf5f8e722a1e88a1b7712a1e01dd67d3f17cf98f76bc66c32ac9a97d3c0eab60c7ebb00a3e5e831b0eabb6e3978307622096de931ded84459b4f9b2b6a085f9e2fab116c5857083cd78f0f0fc440bc3cb10ebdf705164398036de9ccc6a9e5d487d3f05a6f52cb88b6e114fcea684b67364e2da73e9c869fbd49ad56db700a7e75346d77260724d2e0d4b6e4d47eb9a0e5d41e8857475bd620131dfc26b5aaf47e4dda26a083df6f761ec02ec20041e95138120e8527e162be8437e14cf8114e842be1629ccb6bf0a48371183c06dfe227b8094e8297e0586ee5543c8a1d69bcb5a3cc8e2decd0c28e2cecc0c25bb0e38d1d6cec50e3479c881ba173c68bd841051d21eca8820e1174b6ec68c20e323b58764ab043c50e0976aeec8c60678a1d2976acec44b123829d10ecd86087cb8e0c76b4d889c10e0c765eb0a365c7053b59ec60b173c54e0b7658b0f3c48e133b2ad849c14e153b28d839c18e0976a4ecb4769276c0d8a9c10e0d76bed8f162a78b1d2e76b6ec6cb133831d267696d8a1b2a3c48e113b45ec44d9196287089d2ce86041870d9d313a50d09182ce13749aa063049d20e87cd1f1810e1074d0d019828e0a74a8d02181ce15d803780408860e123a527488404501450695064a0d54105063a06e8002c1102a0b1412396de44c21470a396ce45c9183829ca49c1ae49020278c1c31726e9033468e0d72bae49041b3464e0a72a2c8b9c22ea055d01450145015d013e8d042470c724c907382cd0c1d4ca0be309699116c32b8516243814e185a13b42f342fb42e341ae88842e32247131a0c74884047086e58a0a3091d20c0298323e5660adc166ea4b0f5a0e4c50d1ba72f94e82802074c51fc70a3e52689d2163bdc5c71d3826e0938d0e8c4dc8cb951e3c6899b2c3849dc840067ca4d959b2666a6f00b6e5c9003073463702041a70438bee028020e23e020c2cd1368d20d14680d68d4287541c304ca85a609346950306ed6c031841b27e010c28c084e5d9446704ad2d2d0e1848e236c4c403d31a3851bc3b5c15da1e301aa89cd095c15b829e878425ba394824d8c0e30272e383634364a54d014a139e1e4054705cd04372fd8d2d8d4a899420d1b3543a8f95283066a8d9a20ec80023482ce0974b0746a6c5e689c4043051a28d0b0d13581e6093456409501c3d0e4e00608a5266666302383192266869869d9b0d195a969a3db4207054e0b9d134e5b4e5b7451e8c6a0bad0e1e24adc78711306bf7153062785530d3828e87043c70bea0c1a299c64705a81e90a0e12a62826292623b637b62cd0b44113858e095c199a299886e0de301561aa6222820607373b2839716386a6c64d9792951b314a50dc7cb18971d3c5cc959b1c64656eb8d07c71738313971b1cdcf4a0f4c4cd163347e8dc40b6b824c9c4c7904f482864086e924a48d054011681632247041c129c113751e088e086e8d2c8c9410e0eb61fe440714326e7899c10d090d9cec0516243434715ee09da1472b4a00941fba2f3031b32ef7224b42cda13252d94ae50ca42e98d52190d04a52d68ad9c2a34126857b411e880429b62068a0d6832d0623033c54c14373c9861e2868b9924180a388280e38c1924669cd0b4d8e186b6c58c941b1fe8b4a133059b29cc34714383db60c6881c4ee894a1b3839b1ae89051fae206063898d896a09d4043418e1b3731c8b942e9882c4b76822c4c86835fc96e607a02e7882c0b5a051a06ed42c9a039a038a0635031e817aa83ac0a1912b23432266454c8c6645ac8dec8b2905921bb428685cc8dcc0919143231191b5913b2286449c8c8646d646b6452c8d4c8c8c8c4c8c6c8c2c896903d215342b6856c0ab44ad6020a027a06fd818e096816b405f40a8a05e5410e971c30680f280be80aa80fe817d40bee017b611eb019bc032e8375c039601c70172683c76031380cbe01db80b9701283c135601acc14b1a4332307116886c821041d39e07480830a94183321c02145534287049314dc14a8217065dc9c8132e2e6073435e8aca08ad842806304310b39b2c059a1b9c18c959c22688880e3089a22e088028a0a6781c606a8177459945a9a14b61a705128594123460e11373aa001c3f94013b3c30a3352cc54d9c8d871858d063434a009e3437453e840a1898184dbc116831c4de8b4743bd8acdc8c716383ad8b36831c57d872c0797133039d2270643829720c6183c137b3444e940d073764a08880c3081d514a25d0c8a086d041048e29b218dc6ce1689063091b14190c664070a2c18d0c664870a3c50d118fc27d71e345070e3611f02034f3440e26d010b1bd608b6246891b304a577498d0c64011a19181da4247171c40388191bd2073018e2b9d143354b835b626e880d17922670b3759e4c0820e0f741411cb645a4c563a179494b8c1424b423621412095d8210519859c428a408e404a9143c822e21b510b710b27431211dd8849442fe21791061189c8445c227211bb884a442af1087683afc05588adbf80ad1087885222114c052683fa01ca07dc064b81d9e019701a2827a084c06278093e839bc0326034580b8e016f6114b012580b0a089c04970035869de02638045c859fe02d7809500b44013c0144c211ac2204bc010401c4024b00a7804d40273e0097805474a630719284c8871e7440f0c40888263a55749ad071a20886017da0430528e0002113c841021128f2001c6e18f2a39ac1000d60c001e0950b8c067b21d744c651c809920d18698244c8072346341879582264c448a986065ecd178bc4c90f5eac1321284938c001209cbc50d3c52271f2839122261c30e283121e9620b181a7860b0f24f941c82809016ab62c9225497a40d2c48891500f1250020407848c90184920869a2d968724469038f9810721a325488a7a306224d4c3006a66b03d082911e2c18813243e207182834e8d0cd689d112a127424a902c6192c428090f3cf48e1a2d56e807244b8c04b101233d6a62b03c249140ad81c1f290c448101b78a1e605487e10f26107274682d880911f8c1809f5e044a807244e9c08e160801a2d3b1861c2812542942861c200a31d84942861c28001d4b860072342464034f981490482304ab2039226481880809a2c7c30ea618990122c564888034698181931f2a18724421de8a9b9629d284982c44888072342421c80a1a605cb84034b921809a2480808a2209014790d0b566887254c9618416224499316da61099307182d0182c90e3bf44ecd0a7860b283100f3b6aac582741080d1971e22408a1214b982471e24448025e4d96ed4092265d243454c4a40244bc1a15ac112120848080400e3c08f5d003921c065093827532b483900f3b54b14e8c96081509f9b024c96b50b0240907503527d81d92385992a4c8088a90912094346982c44891100f4a9200b11ada818992954e8d09d6494e0d96456244a7a604fb83112446487840622484c34c0d151e48a2044912a3244b92e0a82101103b084111a2a9b9b2454c18b0d58c609730690284111e9424016203469620d9c14892266db444e8871e8424c083100f4028d9614992251340520444c35033c53a114a6294a488890f464020a9a991629730496284a408081e8c183151e2c44892268da40888c6d16561877660a2640346848c90f09044099227a685424a3680c46809101c3062b4835051121e9624316244478fa60516e60c25cee865699bd46a3564451dd75584ab08b009c4a40bd4a3d4f33c1728a594de709c3bafbd3672737737469694b13837deb973a7c4366edcb971c6c825cc5483491cbc034300361a8e11cba40d86719b8c31ca4bc62b639e171699e1c68d1c331763843c25ef9c5da4716eeca29472230081dd1959529e14c2394f58649e72576e135b26003637cac87c1339cac934b29c0b574a2999772796e2999999991821735cc636ca8d51aedcedc1b28d7399794e2a63a4544ac6242601a0a3a3a3636333993189a126c69063b654d2f0c836ee623b77461c149b3445e2014e07889da41b77194a661c6689e2d8b33d1142beb9b961e6994919b328e36e6cb3bb31db8c668619208470d249310c4208539ce29999f1648e93219dbbbb6ddb961500c79622c7e5ddc588c8c8dbc1f86e17c36634408c715d8839628c1dec208439208410ca18cff1011c631723c61d1663641c985dc071414a8c9971386e17a701b039e3f266196773d298c52c3273cc94b2a63186cdc8d81f4301649853060977638c7179ce19b1186344c9c8734e2d2e840c314cca9d33eeeebc8139469a95d8c209396c576610a30c61904358aedcddb831f24678edc2dd4bd62cef4ad3c20897e332c3183966bb13420877576e716271c685cb739e1c80b32c238430c2b8bbf0b472e7743af9b0cfe9144f3bae192fe60985c48d9026e362c498e7e48df2144b1ba35ce6853046b8630786edec30843be3c218e75c4c2ee419797723cbb8bb706e8434c209e72ea5702733c7b81143edca5d09e16271318c935b0f8945c93472c458dac4b93a52326392513144186324c08c91c6c8317296ed628c49b96d72dba49471db30c6366cc3329949893163590400cfb951dacc39e7461999b118b9492546e5eaa092312997b18861988c329e4e51469692522a7729cf0861646619a394514a1963cc308961366012c332293946b8706e8c4be9ceb9bb93658c1106e11d31468e30728c71593286ed9c73ca8cb139b72ccbb62dcbb62cdbb66dc3300ccb326ceece39e3ee7294bb7377e5728c9277460cc37677e74a4c6e1c26331becba2e662cc6c9329331f2ce39a9e4dd19a564de5de6b830eec6185962189645006c8cd126ce189727944c21a45332cf3925c71899a5648e32c60c837002993c79b0884d66663927c5e88c413c34b2010ce09994529a3971ac6603cd05400a29cda4d89c1bcf391942deb873c649e79c9b023096184f4999e7eee418e5765d9452ce8ba5cc244b3997997952c991638c57943ce7ee8ce7c17b10732c0751c4e407a11fae92d013212546a020f961074e0f4c9418e96149921e7a60a24487a9c90f488c9c08fd90c4e8498c960061a4899090122715c7492a01a91a785882c488501192263f3099a153826407264a0490930449077a9c2c61d2c409015ee081c9068c08192529ea000106d0f382100f48847c30c2030f488c183911028248a8c8481323231f08f04312a3254014d51a0e1801b123e48311a325498a9a18d9c149921f740ca0444992211f1e30d090fa91cae1910303020430001f1d3c2849e2c30e468c9400818403423cf41c8a100f4b9218599204890f3b7080034cea0caa1d284c3a60e482ea0005780e1f0590a18725497c7082c4871721317202830e273a6e72867640b201254a981409c00712a1a29c2a3464c4088ad01217eaca20d4838e1c4e8c9c248122a473ad0c4b982431da01899325488a8c8c1825f9e10726a99c2d0094241c102a6a526b8a900829d901a563655822d4a4091223423d20296262e44407fee0c20a1571c048111323243b3051a204894e015ef85919848c9014092d11eaa10800da16800721274e848a9afcc064072345424f98ec2054640489131e76103222c390ea000568b28390931f01ac0c4170204991d013230890e1000728000f424698183509a26807234650845e78b24428aab60046963049e2a448e8891123264c8a8cf0205424c443111323aa0314c0480184869028d98011a1244546468ca00809e0c912a168806e0bbc2c24248ac4c22e24248a743ac282484812e988158f58120922b1188985248fb02012121f41822c24163312766459487c645917126b4ad69545a4888484c49ada1116844716090909292221b1e491454262958e2c120b09291e41822c78840591e0c5a24716091e61411612128b8f2c12128b258f20c13dc2822cec081264b1f8080bee91655d475890c56245d63cb27b840559f2c8b2587c64592c563cc2822c786459f0880466147077e10f4e906c97988534c034c0f49ee1cfaef62548836cf5c26b8b514ae9c5944648299d2913fc15841e6fec54e9aed8d2e7eb401a602fe03cacfa6268781e0dbf7d69f88e5510e701a62d5a7045dbe8681b7f585e5461850a445869c3882a50304414a048230d29a22cb1da6ffd2721131d9fb6008ae66f36904a07bf07e2c845de42f973446410ac7e6fec19d7cf28367ce936acda1e377a5df5bb5efa4555f4900b3280969ce2eac7bd746a14796134514ea558b5dbe3d369f8789dfa615a8450f3b64b1e5d40e619cd8636cd41ae43efa3bd91db39c32d9dd938457f4ed1ea49ef834d0437f67eebacdd66f394f4b67558f58ee7b13ffef1b4066717dade83543656f1583846b7492ea0d2b0d5bb3c1f6c355ffb81db7ad005dd506c716f920bae346c78e686c0566ffd60ab6390fc7a4f64efa527a4eb7df43e564779949052cb4a74eafda2d13efd6d190f82e9e0612f1f600f39a213751dab0e6c99a1c12f8f0799e8f87b1b4ef1683ee3acb79ce2c12a1f04c002379abbf6f4b7f5870341c0822b5ddd48a377f426ada04baf60cbbc273bd5f33c3ae75e4e7e881fff75ffaef3b972ac43d7b7bf4e62d173bd21be7ce470e0d82cb8a2bfaea7cda7d3b30ec5f3bff79cdf702067038c873470471c7ca2164d7edbc0c10a31cd8f2b88d2fc78925be9d92577c3e4c74b4ffa7429be044bf1dbe488c4d2e3f66dab5f7ca9f4a879f0a52f1efee228402f04ad42d06f911bc28f14a017900257f4424881abebba10d7b1eb402f04d5811e93304ad16774fcd1c5591146c7c7f9d2af99c7331704d6995f5e11f4d7a787545acdeffec07e55a4d2ea7ae4889cb6c894ecf370957958102de00491e84a97821d0bedadd26a5efef45d2bb4d0be69a64b0e083ccdf6cf1b52a27d3bf7b8794bb473078ad0dba6f13e56cfc09f4eefbcedcbdd00eba902d1f5275b2d78d3350fa57159de68af37490563b28c699edea42c5db26c999be6a14c1c7771d8a67928cde4a1348e3b104f0ee38670b7624a63dc9052047675d522683d62ad4a550a76b89a59a6605bd50ed4b31e5df3587655a4397ffd0889feaa53beba3ee5abac22d13ae5ab59a54c59c0ca08d66a7e1ebba2568726c09a476912a9a3471d945951dae73c8415a5cdcac2d2cc05c5c339ebc61e8a743155435b4845b7494f7469de92b0a0d24db71a24abf874241d561d05b823d9300e771c9c9a73d797d3813b8eb7c1ec7b1d8e8458d51c78d55d6ecbe52044ceb70bd13de7cbe590f3ad1e99decd2fa743f745c743155cd1f1717239d47ce69bc7dde4095173d32777011de77e7939d47ca61e998ee3bb3fbceded3b7e64d271ae1ed57c3379bba2f184d8aee33b3c2174bce6383c218eb6d71cf33e56b75450a5b5e582b04f6f494948a9e7715cd3207701d371fce40961fae933de91e933efbc23d3bb2f77819aeb3810e3f08e4edff1cd63b5f6d2356c9bcb5de068e6dc8f4ea7f97239d45c473deaceedf084383ae2de1d755ed178421c1d6dbb3a79473b3ff27ef4bbf0194f08ef42fc42b8f0232421744e731c3fc2f9518e1fd9bc9b5c0ea6cf7c723a74afa947acd5e939de115c9deaf47230cdcf5421bacf5cc3b6c85160bb8e2a0477d331eeaa39d45c88eda7e37847dc4d1549889befd061ab45e8f8f653452aad66ce7948a55537ebe7d359a698be55a4d26afbf519eff4cee3e02a083cfd7214e8ead176ae4a311d8bab0e2999c77e7de6fb43ab9f4f632f55e680c0c763de92088bd0f1997a0457b50a81aa47393f42fde8f499ef78e6d16f5e113abee337de11ce6fae5d4b60e935a3cab50496be3e5b7615647a7bd0f088eec3f9ba27b638618514904941520ab4a8a00c1580490196145449416bdba687a27548d6d761971a4ba3570c96465f8fcdbd9c9015d35702a224c92460d1eaeb585fad99b6e9a1e6a9879a55485fcf9af672426240c306ad8d13928028497d9951c5f41df508ae8ebcbaa3fbd177b8d055249d73dfa9483a5860ef8ea38b869ff1a67c35739437e5abed270fe9741ccfa948db71cc54a4d34fe7aec33b62ad6aaa1453c58268013df42d8ce1dba429b634fcfc365ce17853be3aa2473f9af215d276ee35bff18e7254a46d3b8e1f21d11c479df295e93675ca57351589a64ef96aab52666a110b58cd7c3b578b38952953a6ccca5437f67c9b34859686d58823b23d68587fe8cce86f66d1d24ad64b9f85a5b36dbbe997a71c054c3fbd8b3f459c6eaa53662a16d7592b798cbb81d543b30e617502ac55c72bd32552478f60abd541d9a48a9a375dca57a65fff9af45551b3e6d0c17f471afe5485e0be5d9e421a60fdc55dc0c4e5b0dd548f4cdf4cdc76c3a2dc912145988e2f5d493d4b43a4f0d2cb82712b791fecebdb234724be94a4cd0d720f00a26b083da3aeb16b25e680409fdefd21830cbd5ce96335a4bf3822a57fb087e04bb4c4875fe97cc90db9b82022c8118987f5e2828882e0b56bd8063920b035c83d3b77f632613679ce391fb3b7ae4df3606b3a3e45abe34b47715290e978ba6ddf68960384e34c1b843ba713ca850be9502eec70500bc7ed709cb7639adcceb31dd3a90685dae13350281a897a8ea34edd06a1cd8ee8c60e14cae366228afbcdb96b9c87ba8255a8cf6b5dcd50ce4bf7e91a0e48ce4b9fdc90f8d2359a8d79dbd1e1b822219b0bdfba0b399d7e7361fbd6d58fe8c4793b9508a95187deb76d1e6c1d14ea40bce36d6f41a8478e08f7751d6f7beba9a13e51dc71ce5d930d2107049e1e28eaf03ed839dc733c1d3abc6d9c1b6f5ae1d47c0e2fb6c129cef3bea39ef1be231aef3b3279df119c565805a31b3d0f631b7c46cf6bd756f2b635cddb865ca9a284c40f5d1efb72365cf2f00a56719fd7388e3b7387de182898a2ca1458a4d022051629aa7453befaf6975e8fbef5e4b803b1c66ddc10d834bbe9d94da6cf6ba636954aa777db5624a454d24e5f2a954eeba76ddee9f24ade76673295bced93c994714352dce1b90aafe0d4fcef95a00881f4d7d7dafa3dcff3760569c9bb87c5f5ed8b2332b9a027beb41177a9a761bdbee0d43c7338645daa5f075801f72017b41d094ac3df8397f2d5d18f74840228c6b456de5b11cc1a50b456af51a47cf5d3fa49edd71634b89dfe9b5760845ef69217af791f94cebe1c0ea9ce84944a5efcf505abb2cf6f5ee9f9cc632f9c9a136ae9098b98672f50cb845af4b4e9f9eedf9e87577c7e6305fc53723978ff2397c37f54ffea7dd6a12ba9f705a4c842710a8988d3714fc16c6d03abb11bc9c7fa190999df51d113faab1ac95f678e48aa3fa49e1f14a21d44268f21a5e3796ed88c13869e0762c905c5fa84d621f86dcc9b8ff53bed941fdf881b3504365fc8a547b4a3e1597dd4d717af8f1f3ff7dec76a7ee486a4d87b3289945a0d3118a100a38831a6b5659129616999f33d853460613a3ec7fbb851dffde1d3a79cbfd1a1eed31f44fd90a1f96f74d77dfae3a687dc10d43f6e0ef66e0f78beb61c1004b02eef03c26a7879ac861eea27efcb39ebe0f0d375747474a28e0b3ad7e2a6a37320ee3a175c70e11adc3acf0517ce5c900ba793c964ba06b79367825178e9f8084dd796b5f31c1b0e4e08f775fa2057a595d5d0fb8efaa7733f79df517f710c764d2a30479aae7141a69fbcedcedbd66e36c8c1e368907bc0fcf5e560b5615ea36fcc9defecececcc9d1ddfb1f39d9d1d3b3b3a375dc764d23458458ef7c1463dba70d35d307df7c7e7d33aff50e75f1c9078146c9d9b74e4ec98e2981d93c964f276d85451436ebef39bef7cbc9383aad14cdaceac62dad9d176763c6ddbf94e450dc1b9769c6bd774bc22d93a47e9d85c5a9cbe1c0eb0af12911e1d3f5dc74fd74e9e761d8f36c4b2e1307dc709ab4dd817d83b26d8cb05694374bc6df80ce5e51c28e678db3a3cec0c4ec9e37897164ec9df78938af71d95bcef68f3bea3cdf1d37354ea06a7e44f1547ec0ffbd2f2d40dec8b8d078be8b8b13358052f2d5a1e7a351e2ca2837d6961d5e99b555a5e8b69b06a66a6543a3704862ea5c1aad2a5c6cc5d4a672ea8740e8355f0f21af43ed85dd7bdfb7240dc65316e1faca2bb472ea83bf4b667bcedae72189c928758b42c83d965e65d63f5053d20d6ae2d2b8aa4eed19b1445152b5bfaa72545ab55bd4956ba44d16a1d3167f44e6f9208b4681154d13abd492238a2359a0df33ed8d8b5d5b46d397ae879de94afbc0d7af5c83b5269b57c004aaf699be7ed0a7af217855966c3fc7514fc36ab5143e8af07a1714ccbc3c3fa1d353cab2117040f143d236e788c23d2a3fd74eda73aa9704a6a97d7348c1b02436bdce1e92127e43ae40eaf0aab11f766bab6dca97e487dfae5418ff38a8470a7174273eecb2a5abf2221f43317d29d9ea3a9cb29ee5cfde44cfd886073a7f5ebea02c593b75522a4d60ebd8fbec179db268f08b6f6e580c0d6ce79db9ba769dc90546b1535a4f4eca51ad3e0947cf6d215566597cff9e81b2d9f79100ba7e4b51ca4ee3a1252077b08fbb6fc720e6015d10dd16f7f710c77c9814574d0866d5a310f88ae8dbabe6a96295f1db11658766082d60a49a6c1650a1bac8408e288b5e2f9113e2b293e2b2ce0271556c531ac827da5b7bf48a6b94bcb73192fc4345ee02eac801760152d0fada81c468555b002eae573fe4607adf4f64755a8eb59a67ce57d5157cda1f3ce0d15e05d1e7a383006f8e9e52c0ff8c9e1c0e550ef3d723978e7a9472fdc3b7310d8d50bb58b3df09083c0ae6ae520b02baf6eec812f49d60ec78005c4c2aaecb1be4c07b1b4fc52f8ecb066871e2dc1cebced58bab6b0154bdedc4c25c9df4a7c6db98bd2974a747244525d822f79db2f0fbbae97bc59afd2b5ed947240b8971e3dfacdd30e14a956f2f69ab7cd79dfdee47dd0889bb5d576831ef7cc430d89cf1eeba73d3ebb163d0cca631c9154c7facd6b59ba0371f4e6b5e5b6fa1df5563a848f9d37e5abeecb0ae8ea11d2e9cb0728fd68f900f1dde3e19713926a58f2f6d0d3be79fccedbd5c9c362bb063dae7eb2e1376fbd0fb6f692977140aec347af74cda3078a257a79a0986db367c43d8f795cd0fce57d460c39223d3dbf9c10fefc1b1dc4d2db10cbc6d71257bcc13010c3a73d6a0cb74cbd495068d1dbc2ac6c929cf21c3844c7bd4950b47a3bc6cede27316fca57d88661f5083b520c68d8a0b5c2b06d22da505bd84ab5063788c5887b080c1d9f851e88d95b56b7496280e994c6db51cbb347bd295fd18d4ef9eafa551540eb113d12f6e503b0f488b03265cabcd1f21a6feceda9b7abe588c4e6cb4a14cb942953a63f56c763def201be4db2824a1b7133162e12e9e95821164e2d1146056d595bd6b4dd5831a703cf810f1a5b084d153878c24707e4a7129e8e97cd46dc4274b6b02146094f4b0881a0ad0637de1ee33538e7639cde598a0650543290d3f154076e7ce90fa7e1cf2a986aa80337ba34bc0ee46928e1cf5fc447940e0bfe57437fdb0562a093bd494e7c697838e774e28c9e73d64f098f8422373af1838e3a3a9ec63317148374a274572fab2e207662077dc9254c4a1c810d3260b8600b0d606049f142c50d3498b0b28425784300d8af126d93e8eadb2ebddfaf6bee3d0eab747a5fc447fcd924badf2129302cdef426393103ae42154c3c81095950010a2b794411469880045524610c170148010b7474a29857327a726204fdf978c1762005a6b3441473892b196a8922b6254040a98f20724e52874a15302a5ab85ee84d6ac28dc6e94d6a224c7f38fde178a1504042e604ea5121021535382a5e70f42635a18337f589db05eebca40ab60da7648c3152b941476e15a3e49ef858af9ce00c10647903062378629583660034d7808b1c44610919889181192b3e0ebfe1758ae8746cd1840de2174a032a8c808a18314b54f912001444a18c35b04c61230a1e2a2ba0545e4043e40a6d54210512ba2c21893782b00226b80053460b122f5049a2a332c5090421e881941c90818420680132a24c97307e80832a54a94a58a14465884c09294c1d25909029e104da8416580f9a40c10c372105e47a939aa0e2a5a3360035a08922b2d83c50b240b979a05841f2402183f140d9a41312faf3f132c748a273a1f4e133439521f040a1fcb33f7255c54ba9e5bf3fb679a06c928edea42a5b74d69b54258ba8830600d9a0441124f665f20eb2a0a2091b00a109348830758045136510b1c41398e029e1e5522208ac83a955b1d2b437a94a95fe7cbc5c5d94b4e0c3d8ce2b5e5e37bdcd261e884fb005e123e6a5b8e668426b60fae3f1b99887e0a5a33a38676139c10db0d040093920020f8cb25081023750800229b41c06a6246d87122e88584e3b30010c9723104104135cb0925d50b172a58a133898c20c76282105a60496d389308226c860610b25769082c5021623207105192198620917deb89420e20608274ad4123636349d22cc249210654e12609c9230e3c4a54f30e8cfc74ba9954477061f1f3780411b65904086165d0081e70a643c21461190e0b2c48e0a68163333f8f0f1d93e9f6edb523c9c8249a8de2426a2e88f27491aa1c17ffba5af7f35f46e19bd2f127f68ecd91f1b7d34603fbde8e1785f2845b7494888e999dea429647ab92040cc46abcb116c68e10a2ed00892e2440fbe903923042ad081e24a628a4de7383840713e2621c524df00e9d920ff6d5267c11e7fb08ac33df0506e524329e571da68791d56692d939028d3f23cfc83ade479f08f5c491d4ec107d12d0effc0164ec35fde0cdc03cf9e0fa7e069845f56e918d16d6fd2125d3aa73769092db4a937698928f4e7d3f0cb03919835795e69c2118e20bb969bd4fc19beebfafc27e575f96f86beea726a487e064e710dacbace686ccff6475b022dc183edd996f5bb8e5dbbbc1a7c74bdfdcdc00969d2f333b04a62975c1016b91b5833f04f5743d7f34bf0a0eb4fcacb1c2b742e9456b0ebe2cfaee8eaeb1a062029f240db1f1d6dd8dafee8e661630d5b3b2d0fa7f81fed65d547fb7aac1fedfdf1306fb767de031d1d82f5d075b9fb338f790ae04208599091832946f86215b9a0495b7e9bbfceb3c6ea816e1eeb4f365f7a2f131fb9a038e7b19ee7e7dc0a1f8675cecb74f3f2b0979b95724a62cd5d36b52aa02574b0a9ed2f76c41a09b226472528800851f0800b08748003346abec84209495ea6444903a5021e60a670828a1628418d14b0a81833861690000195294fe45cf583bd9cba7ed58f36845fecd7f5f9eb1bf3afeb7c7f409ebeae5d1e94ee3ae66dfc59318cb8f284293481454b1356d769fc41c28335b0b04265064d6c595def58a5a3afe3fca9f8b349575ff553e2a367dd38251f44b7fdc99697fc035b527e42cea2c52fcfb75e9aaf45cfcac76af9e87db06317f6e97cb06a8f03d3885c109c4107cfaacfc7c707ffbcd56ab5567c20fef98a6f03ab68f36fd81fb1f9a433254cf36d7878b0ea668f70a439200ba6f75adce419729b5fccede282b460db5503ffecaa0a4d5e73f905d33e5cbf0f52c1a4e91fbda6d50f52e9eba59faf55cc548db8b96aff6835e2c6585573ed925536d7eae9da9713224b95e1395698c4141803768c0b62ba86c32bddc69b798dd7fd741d289a60d58166d34c34a7d340133c99928059ecd23fa378bd5487b263d7fe95aec5ec18cda1674a02d280fd3af4626cd3af974ea577de72aafb8c2739d5d5cf287227cc54b95f3009aec224600cd74bd7a1749844e9930b2a412a99b78d5d4d8368ed71f34af55b309d65184c6206d27c69a3dfcb450b2b6420a67d7ab9c8408bd6c24a0fa0970b0cb07ce9ad6fce5d5a6ec1d207e8e5b2451acd658b2d9deae5b24595e6b24597d61ade0a4cea49c3655c769df9951928f65cf5268e88d6cc05a97976c92abe0eb7e1f9ba2eaf6f5cd09579920b8275b5ed38bc995fde76ccabb98d97dd671e07e4eb40b6c3ea47215ff5c3b92a3dc430cc886db0fab1be2a401132665387e231290248c3cd67844384d68f1b3b8eb482a362f4f1625a87623c67df8ec49ed904f51c383fe9789773d3affa09e15fbfb20b7b99ce88fbdab2d7781b17e4e69776e37db039cb7194e939f5c3e9aea37edde938f5faf6dd64f565ba6fe382f087609d79c611d99a0fb564f093eb37b36537396afd70fa8355ba0aeba9d22ed7d53488beaeeb5c3fd97c2cf21114088dba8afeb61bb190d8f1da9e5d420169e0677539757df24a7f1b51ec0f762482d58fbbe636ffa495deb66bdcd83f583f69a5b71b715f97f0d8e1f970c3ead0f59af3b76b70f319f3e3137be63f16d338e0f58dd2ae8b3db167d6fcbabebde62c3b7ad7214764f6f59aed120a18c3758c0b5273ec9bc7078a38bc99db78a7d7d4545985533ef1e7c84f177be693e23f1cad447338f323f1076ae9e24f93d8334fb3d53038385dd75fc7f5a31e8a7e1beb361a0821ecea50e9d969202c3da339101bcd2e9da6a2e84fbf0eb5c41fa026f10756893df3530b0e4ed7c59eecd7735ea6fb4ca7fa329dd16cb8fd3af7196f3975fae482c00f6db5bbe4886c3f927b4e9f8755b64f583f27accede9d6a76130ecef6afdbb8d5cf6876f6eb557a5e5661d53677290248c336f7c80571561af364695e4dbf20ba240248c3f5e58fc3347f9c4673fd8caec9defe19c9cf48360cd397d1ecad0e958e3dfb67341b9ed2aefb703afbeecf6e0f1f7b4972ca28b2e9fb40979e79a5474ec8ec52a59e6c2a446bac4a11c018ae0a6fe08e29d80b1e54612f1a9ebd30e38b1cec45b367830387195b7274f4725c6b9051c6b546c35f6b8c11c60bd71acd9e57eb18492f74f45e887157ee561d4e718a75a041301360adf842c41b11eb110b58f1b922313c34c0ca20250cfdb12645ea5582473f3d0ac480069732abbd9cf1056456b4b6d68c2af25fd61186fd721780a17de00f7e7e989097a8eb1b650a5dd167c7bc2974857dbd0f29076eade8334f8a8f15861202b1f49c572d827d3b876e45afab129d7ad62cb4d514f32673951f2aa43745aee4a39743b792df8db1129d3a8b64862518418c385c21018c818a9f2bda6eab63fd60ab9723d2b57cf49ec896f1bb71210934d8821574871b07b0678f08f61164414e80065b7e4a4a1d2fafc5fac9cf9ae5bae4826c6799f2151651d6af48c798353f68f7c7fed8e6c80c8556c4871d3dd490ace365abb9d5daa968dba88b57526a3e0eb2d55afde2a1f7b17afb49d75c9594b28ef52bc25cd0e45633fc26d0bb3df645b0b168449f67cf09ecac0ec1675c58d145707bcc1bd126da32db4b250d56c8dff5f9cc5bf98d8b2dbd69197b1f8bb321f2db2137446e900b825dcbbced921b420f0feb6e0ff871cdae791f674f6813c52db43e23c8ba20af210f1fe507d09b946589de42a6af47bae970648b2b3d3f032440111db67c11090026a2aec72f8462be08ab3e1e1d58f5a58ef8c0aa0f67bbdcb0c51b3d0bb05d64e86fc18821407f3be667aebe14abe22784105e8fd77761f3b06a16ed8dae21469a7ff1177e97070c1abab81bbef1107ea0af1f0921041245e2fab1e266f5e30fd1fac5efbf0bc8f538e4aa4278ecc56b9087c45f7508c46115f6799dce2669066df4e5cdee0eb5b0852df4726596c7fef260995eaeb53cf6407c79dc1aa2e13992c9b2a0acfae487641c9a525eb26c19bb7edc725e17f78007507a6d191744462e6dd2fbb8e5372e4852eff64009e1cf6f520cace88ffba25c8146e3cfe99caa74ed7b9df3a458759dd5258f3be6b134adf4f8cd4361cfce8969f9d2192d9f5d5b1624a3dba41968d1d7ab68796e0661b4bc76adb45d9ebca6b1607c96795383dbd48e11c5d6b64fda875043e8e729cd2a87438966268a5dcb4adfce4a1508f6ecd97608a4349f954a44e44b7508e3880c5d97a7f5bbbed5ec17ecebe44596b22b035c45395dcaae0cd7e10a286e5ea9121dc59fbc5d69da76f27655f2b63f5663de90ac0e719741d742c73d0e91bf1e3921daaffa71d72a4a3bfd3c7342b88ad2ea10ec57e914a343180e11a359fdbc6f3b2afba2b20a645ebb56b737edd9874ad7ea07fbbb886875b747258265b24722f29a07bb946dcfb0a71ba48187e8bdc987551009b24abc8180ebc76afee4f773ce39a79c92e116548b4162e55d1e314ae951b0889a96799bc4acf116b7ccdb30dc0d92231277c5d1012c103425e2b3641e00d4f4911bc2a7c6aec169fa90aab00d404dcf5c90254d842464eb1d8d6dcc39805582a64058589ae80834993e242c7d2d8f8f1e3a001ea35b89d60fee4acbb692b7abccdb157342f857fd4a1f526b11a5af77de635d4e5d9139221c51eca1f889f5f8e2611c82470df9824062d6c5d38d188c8931b012469415f360cbb33c1063525ed78561d5c9fcf2f49468124ac72154cefa4120d7777b7cf3fcae430c842f2bd1514fc8556870cec01874fb6fd3d693cd3da13971bded8fdd352d11d912d20515d165b6028696bcdbe3c27eed4bfb03ab1fc50e8f55f852c379dee6de978868b5b43d18b69abfdb8379889eb583816fa0c11874f09ab670079dec5e40a6a1ac3da10699bb613b7bf09b37c441f8f01006ad2ead185774a9b76b5adc2017843e7bc9fbb20fb1f7958ee2963b7bcc9bdced71fa3c7ba69fbc8fff01e19bea079903c2ef0e143b0f35846f3adf543dd49052f34bcd35677b60f1a79bbe8e48a9b7e7ec8f0ff686da1ef15bcd311d8861ab970b025b59660ec45dfc99a9f2543fdad787f8a57f07e21b5860944aa50331106b92b301e8cc09e197be43a6ed117fda1eb1d5727b441174b23544735aa671f5f4dd1ed9e9a6ccfb626b3769a64c3be715994ea7ed268ddb9e791f6c6dabbb3cb49abd77e70c563b4e5db5f6ac3626c648a0c118bc408d1874b337e90562767b00405bdedeb377c5126d73802ccb327aec599665d99727ab02866118866151f0989bbfdcf698ec514ecdc3f9f5600a3ad9739edb1f41bc3fd2c8f64750fcee0ca7d3c974eedbb59f4ea7d3e9089aa6959e9d1ebba6699a7686c684b6d926b40d91acdc7adcf6c0b6ed811d7ab08aeec2b06ffb838f9ddb1fcb83e1c0667568f3d7b5b8ec9590807cb4bda9bd49a9b5baa4c41f5f09ac42cfbaa4c497f52b9d96fa0567f4ecd235b9f197237275a95e3372250fce5981f8a37d7176f618c6705d93f062be16c49bd45c3fa0e66bd936bdf94dea4d7a0114bde7d25c25a7ae2ba398f729d97afe0a92358333094d0876794d7a983c26b367672ee8a21ae63d818d310f511ce8af67557a527a1a8510ca5308213c957c0a213ce58c29533ee4cb137b28797879f650f26c0350eff290de02e163970cc444b04c91d1d644c811072c0ffa21f998c91295cf4a2579a3ab4bff8a4a59f692a43293f357951e85c760ef838a64a5581b715e9b1e0c63a545ea7dfc8d5e64ec912bd1d13e7adb91283684d889748628d31ae514cd8e791f2639459f61585d4ed1fa197113c1375afeca1ebd2ffe49d74a646b88fee889b0378628d34fa876ac526fc3fe51ec1f3d118d42c4105df4e46af827583b613576a08879d7e9478491e9f9ebf2194a084c0ae25f1efcb05f67ef09d373cfd32f0784e88b10f38eeda137042be645a6f583df63b13f27ac06b22deb50ac437b3ebc9ea041263a7821d7af5fd9e7b36ff6d277bd92d765d713d8d705ebb7c70537ec5b09b656ba4f6787f0ba56da30ac4a4e9d363be4200cbab8158753fbacc2de52fd585d82cf0e1459d34a19a50d9f79d8b53cf8532e0f06221b56a2a38ecfbcc8cb83ff39800546c3e5c1770067a5cd3cf8822e0ae9d8db7978eaa16025828dd501f4e8fd75d5409b555a7ecec3d0dfdcde16da1f453e9d65cf5a261c7eeb55a348e9b1ba3ea566458555362d9ff337ba4f49cffbf467d351ae4348e58aee83545afedb25b4fcd1be8b3d54b8b24509b6d012a6d55a5d87dad5922d600205449c8006ab28527aace0a7d4acf651a4f00afb1405ace02f6f8a02564758e4007f5424f6c8c36fec91bf7e84450ed8af7a04147be4b17a84450ed7613d7aec91bfaacfc69e24f86fbd6c158ec04196270c810548f0c15bfe59e876c50a411934a0820a2e5f603085d5aef69f4f0e6fb556900aab606809ab304b1368308b2ef67cb467bf395e10450b13fac717cf2fc94b89d4f1708a6959e777c963758992f802323deb927fb1fe7af4cca8d2d7fc87d41f7c9c57c2bad2d89235a34acf7f1ee80bab4b564ccf6b4902a224f5ac5eaca8410c68d8a07e503a1eeea517bfdc058038cbd11ee954a64c992bab2c4b6b6789144081a50800585cd0a565d464c57496560c68d8a0f524015192a0b4d68c2aabfde7819e44ac9855565b2b66b5ff8e3a6e0cdf26b9808a36829da595c3082f28428d566bb5f5688fb4840a13086188375aad15adad4f36e9f819241841055b88d26aad70a869768126bf3c72bd14c9418705d35ac077f424a7e2758031c4e7c0a9f8229c2a127fce3df171bd7424c2cb3915a57433fd9d3afedb3071bbbc431ab8e379e0467ad892ef041894ac12d815bd7c6c29ef81fd211f7f24fe941eef43fc81abf826f1877b3c144803f6786d1e25390f254b1e4a964a7025bd22dab129b3a3aeeda8ab16d9686cad545193d28c4a1ac0d6f4429b9f1dabe8f7df1f9810f9796d7ada970b322f8178425e4d6ecb05c167bffeb17ada785393de13d81f7c025bca6bbc70599a66e943f0f1f1462dbf354ac88a694d4369cb09c1d268ad2e8ce1e39e17e48da68531cc283d255bbc7ed5a1ebf1dbebd3fbccf3e997ae4f0f6ad1c1e3706aaf97e82147445b677beca9d7716a8f79df1e5bf7aab2f2b795a07c439b5f9e8f926141f7d1a424566197a761b08a2f4fbbb08a5efea365b4bc16a601d09bc4822dadc52de0f4b6243a194f4fc348ba619e56da05124026c51f5a857be4651234a29ba749b40aa7e4e1946e5694106eb53a1ea9d5eaa1fae1e827d24b1522ab85a49e55c93cca86ed493fdba8b1b80269d896144bcb736b71d3426e9847abb4a455200ddcf2148a17b43cb5c2aad8f21a8c0ca3893d143fcb9405acb2c39e1e6ccc43496057d951fc4d628196de2416b8a085c49e8f3d2b9213f6c7bc3cf5127fb4cbd32ff107aee46998f863ba3c4d03d2402faf5d47cd77a08cee800edae4a1e6e18a579a879a1502f452e04afbe16a7a45b653efebc00efa92ad45861ba5e96335aa48e928ecb263a320c01d85d5225c2d62cbb8915d36376c208ebd7945c095565157253a95e92c536658652fe254660b2b2970953d0a2dd522b03265ca702f87041e7a3480a7647a5f40ba58933121680b85b6e1140bc2034429bd7908b139afc763734e1df804c94798974157d591d2832d9981a0c1d3fd012b0bacd0369c8aa7fb23298b316d43245b677b6c8f3de482c018649b08966156843005f14bf7c7fc5e9b1146fa783d5e8fd8e3e9151fafc71835ccd3e1d4c54ed8791d5e47c9c3e6464935ae4facea70eaa23c917da0edbcdc1fd7f7737f406f064ecd8b691f4ecd2f17bfed04dba6c33fa5cfd7b03fbe3de8e779b0aae314fdbc8f1eca3df443f5fcb1e11efaf94dea6f869e47ed0fd853cb3c1d4ed1472400f1ce99c7677145e3708a428e1e85a1b0ba495980e94dcae2086dc329fa8b487656753845e7f6d81e0bdb05dace197820a53e71dcc80c8968d7b50b724125cce33eaf691e10567fdb4b43d8f79bf76187ef4dcae24bcbed313d3ee761cf3cd89a46afc56d3d7a6e1b6efde8b76bbc518fb77ed778dbbc52bf1435ee5b3fdabb6d444e589dfdeb4016b450a69dac172ba048a2b3bad56fb5d5e6463dd62eb56ba31e7fb92043b8fa41696dabfbc901296d2f6d0f95be5b898efa8b5dfa7242686b75889e3f3a844fb3034520969ec7d2a0f4425b08c5f4c1aaf9b38a003d8f9385969ed7f1e939dfd9cc6f9b64840699e8766db49d331ba7a4cd6d28920515e97386fc3c36dfd8d7f5751c20567dd406567ddd115661af81550468ec3a7c69ec1960556c6cbf3416838fc6beac8aa1bf2d6339350fc43a1a7b1816484563dc585c61b8d14404cbf476ac8ac76ec32a79ec9455f0d8b12f0f5687964c64018f4efcb9e37bec8f7ddcfdd775136d4d5abc3c2c12c508218c6084972a4690610431ab8d3d46740f60f04419695cc10a5c561b7bf81b6764e5542a52daf5155ab4a4f392ef03bb2baa34df8653cd3534c76e5b3a33ebd69b7485152dab0da7206b418331e8e44cd731f26015013abebb224ac7dbc4d32d031a34a36317f426d92004cd25e84d02a30a9dea4d024305428c8a20d31feb8bab3f209a18a3573b4133ba6883de242fc4340ca337a90b2ccda337898b2e900b52da4198263ad2fb20253254341192a93fa3241801a704fd195951022d09fd19299184d99f1321c860005d78e9cfc9162fbda7ad966cb57acbf49edecb2178a3271a1daf9d8860cf21f25c3f1f78e99e5ef45043261a0dff3961116d993265a6978e618c696f7a138d666f47432ec89fe088d588df7c1ee20d714509819fe7cb8a1a023f2f1f6735d2ba0765b4113f811d0f14bd8e9ed7ec6d43cf48eb3d6b4216a3fd80adde4afb834bbddfa561610cf2a7fdb15af8b9e0c2cb0b480c2bb6873c271b0289a1828d81eb87d44fb87b28820d9fd9943a6ddb36a905579ae8d44fe80569d8ef82563a780d72308a8ee19ac161402e8848b65a1b466e99600233700a5e7a3e9ca21c37e9e311a33f1f1d500110a660030b165a1061f5753178d98113567021416b8ad597ea28c61852985001982f33587d3e596c181d7f177414e30924c084008a35b490c16a9368f3182aa0330b5f9471fa647f4ab68ee7795d181186c94bf267f4f8d18353e01f97f9104ac81c2b110657468652b5f59cda53f1051965f4007ab98ca185bde97d461b33f3c42e4ef18c9792cfac8a719e794e22ac27cbc891eb3925c108b303677be00f107d01870747e7192892830e3914d18153371882112725d42238b08d2d9011c50b0cc488828c0f2facf8d28328d6f8011737f841a784aa739c522d127be02f33a8a0021d706961a1628c1576860aba808215aa0082166c200424601082961772d0c14b111c560ca0e00615bc90c00a65b4586138c04116241001852aec20cb7219b37d7163460767069fc83ce08be880f3548e5e2e6354e9cf270c9df2d5f4fe6c7bda1f9fd8034f37fb57c3cdb761f41acdfed6d900e18d9ee9e5028429bd4a74377c4a7cf4754c851dbe0136b00aab0de01404b281534630616f00e6d980958e95ea866118c6e50b0f1ac3b8a04185c6e20ac3a470a53c9e6e8b4ca5b3e1675750470c22f40bbd5cc4d8d21f0fe549c69441166af145186554a1ed0f29bffb639e93282010f6e57c02144fb8f2842a9e7045f462c3346f0b7b6ebd9fb0b5b8c1285810c1322d2f85aeb27fb4b39d35005f8acf6ac7cac0d7b107e0e3d05fa7df96879f941e513a67f7a4156e6a486c4ae725ad45f446b4777b5c18a5f46315e96c0fe6ef6c0cccbdb0e2708a1f2bea081dd07e2952430358f5f9b881d94733df074efc19b2c615dbb35ad035780dc9ad30185f4db43a9e3217d4952217443383cf4c877ddb0c5c900f10a7a2d6ab03d2b0f3ef6a0867d6fbc5f688ff268e8ea541fb1eb53f4adfebec8fec7b1f35b0caf4e58154f8a7061866e87a7c00e0a93ebc1323b5a1b979031a00d4801a6a68407423070e7403c36c66662016373afea6a6e6405c03ff6c036a1eafcd7cb9a0ee405c71dcc78e7f3e64e8f9bc96d7b152c7e5e7fe70e1f217a46147e7a8f35c1e677fe45cd64f490d0dc904f1a93e60eb7adcd35edf51bf1d2e7842b647fc8ee7001843bc8e7703a7e2515e114ec5f37839704fe7d40c6c8f781d9e0d52e88050ec0fee781db2869b1c52d6a0d271f95d151624612bfebcf0fa53f54ebff1e7e77f0667fb056fc81828b667bb7a43c65cd99e6dcf1b32a68aedd9a6debd2163aed89e6df63e9cc6f18ad0f1375e0eefa38dc3877fa80f08856efbb2a98934187606183163c6c899a42ede4a77d8e29f4d825358b5300c04c3a91a7c6aa8418bedd9315fd03161541953068f86adf1c692a397b53379a82152569b865f3815b9a0d346bdddd4f6cb939bda4e95e8f421b14f1b0c532198f81b5895011b8ae870a4861a6a58a38c35ce5803cc1a62e445bfd97b6d6ef3df94fb036b969bc2b820b2898e9a7e53d8ca8e1c107855d8621f743c5a8ed99e6d83aef146b7fb33644c6a555790e4115403a722dc127be2bb6ecb96edd2abfe200fbabb7484490dbfc49ef8b8658b90373dfc127f602bf6c4d32f7dd31f6cdd3476cd831b03f69217b707f6cc93db039bdb833dea4481a3b1730d69855338158b6094ed11e1111d0f8dd818a29415b638d5800a843a42f7c12f1dffd5d0f1100cabbe3886559fcf970f62e9f808c9b0ea8b5efaf3d9a26ac59f2163dad89e1df3068db23ddbad1ef2042adbb3fd412bb2d5f0dc9aac1d7e018cbc16cfadba49bd6ee48044522f971f7ce98fabb43c244325b75a42375ad2d9751fce9f4a7db4376a45f7d9f4720ed8d634b861569a1544afc16b5c45d9b0cd3dc83677566fde772f7adf918ee7bced9a57da3cec9ac7eae819cd2e61cfbc8fc1509bf745b37017dd07b7b4845be2acac050adaf230dc197af4fe03c0b7f324f67e6df607fc1ec7fe6c9474ebe0d290c9b3b731c8de1ef91976f4c00140cb1d9b8d3fa9d813694f9c1dfdede8296991d8334fb794562452eaa57e385afec3f19a4db0da6c0ff9dd96eea6644a2ae91a36845b75e0945794c3a2d1f313d8188a706ade0bb871fba15f591425bb14baa2d732af5b19a248f96ad7001f8e9e97e2b3da95e1bb3900ac1b121d9f5f1403bc114e6c79d42c9b8948b8a9f981e6d98d5d63a258e60d1c60992ec26e44793ee108579a88229c36d02bea8a8cbaeef9998d615e833d957dd03df29452925e7a5efbe1f95ee3f1a2608145e91a7fe93efe523a7c9695e072f47b23741addb4c95f4a1bb669fc657fbc115b3dafbd085df6ac76f2d0cb2ebd20f099c43a1b21ec8fb4127b2623a1e777598daeff988d9e9710963c1b2bf107877be6abc4d2b3e31414dd11a7e6a1fcd2817f8eec8fed1fb83df5733331b5428fbfb00a8c771ed37d9ebfcc339830ac2a7d9ec5b08a4fdbf8f88d9edbf3c528cd5fbc0331c61509f1ba54539caac7718d559076de07bbd2cac3a97a2d6e1be42d9a767bd497bc6c2b7118fec26044d069bffead1bfca556edf138bc6d3ad371ea8a9e9e57b3f01c87075b52896eac1beb064ffd7c3c88738a737ab9d1cc0528d7c505eda0992c412bd28a8853aa5faa9356a8b442aba646274fe7964aa3374cb73f3a407af8299d1d7e81987af41b8d42b7bfe482765c074843e9f317d81fd9e731b0aafac9f38ffe00e05ff783667be8695ebdb829fa92b71b03bddcd1f400b8697a9e53d3671ce42dbd4f7b293b9d5ebb30fa02005e3810d77aba556659767a569f0cc17758c93be52b588b8d57f25ef0b80ba7e601e07119dc33af454a5f8455a52a54a8509155f4a4d2f3d20aabea7f783e2fab905ae4169924ad9057482de4173deb8158cba41569455e915832251bfc13d9f444a7a6f5e69123723aad4f60bfabc9e4e7a1c41fd9f2dcd88ab00ad6afa46543de8d60d797ea77d07ddbc5f3e494eac928d9b69b15ee995f0641875de73b8fe799491dacb2c2aa9d4f9c7f704a4f48a5a1d0f907aff4fc77d00dc1771f925338356f045b46993f62151fb67a6a2b23c39da6d2abc73c1e2771cfb4a271fce32f3d2f3d580552e1d47ce6c129adebf3ba575b3d0f145d2855289c9af47fce5187c23fac56abd59ad26ab58858cdc316abfe79188555fbd1cec1fdeb3a074ee7f86e8e7bf20aa7e6a927b1706a5e7250e28f0eb1679e66f5eb68dd51a5ce77fe492b43d04361958ec911c139fdc50dc1391456e9f8fc116ced8fc539cd9ec0ceea3773ed40d1056f7bc7d3417939debc0e6f65169ee7f0be0e87f741287adec6fbb61aaf08eb6fbf749e11ec53bd8153f33a98ea47b9fa65fbd2f336c41f9ebadc233feb47bb9ba5ec5faabfae27d6a558b5294ec14b2f3b38004368cbf3b196beb4dd9ac49f9be3f8f68d3f39aee9b8f1e0f6c4e798e9781cde6ecf97758c07d369ab5d9b49ce7435978761f607e671731456c563da8bd0c12dc73cf89317043b04821d1e56205b58150f91b03f5decb98ea3c6d9d8d415faea3a1c9c8bc3ae615d33e375f1c727f65cc7c1b96ab88831a54d8f525e90da24e974691e2f7dbd44e5c6cfb93c6c6a6a6a3e43c4f49afa04b64dfd3020d34ac70f613f4939a6b4c12aa699d3a92ea76291d873c9ef1f4fd93253bfee8aa96ed9a26dd93615b74498f42ed5116e399da0b75d900bc2bddb23d6cfa73f253c8d22828d9de8d4104a8e88e9b03e818d9db6e8c12a9cba7cd0aeab07dd973279f00b4e5df7893f30897bae1f07a7bbe0164e5d6728bad3210c1365cb0f8e5f700c6ce30dbe82559f0f476115f6fe60189c2a3abed2d737437f308c15a6d2174fe9eb38bc22b1e7fac9936bf27c6c2a7e53df9ea1c54a1858cab062cfe8787de36e6041ec26cf07a7e20c1a862d771f7461409106ab96cb0dbe340d7d1d8661d5720983ca05c7f4758d6e1133e21f4ca3afc720acfa702ad60c2c9c32f27e480dc35c8762763fda7db73b9ca16baa0fa760cd00e4a8b76133345f2e3668f507b7f4f50f86d902e60b3249acfad64b1855bab0ea3a0c73fddade69ff3a1c0805abb85f34de8c9705c73bcf08b6a9f250a549fca1db137f69d771ae1f893f38aeeb19c83ce915b9be3c571d622d277641071adc76dfe1e0bce3b75d6e6095761bb417c98155f1da33c03f38b1473b15d31ace189fd6fe6d1bad418f0b1732bd637ab97089d21ae4a8941bad92533304d13ac38c90e7cecb84127235bd6c4c3b3663c3a9ebcb25894c7f35b4f65983a6d2de001bdea50b4efc91db03bfd56fa358fd6c3a5ab52fddb75d82c086d5064e695fc6c1f9fe4329f6c5ea6fd06e83761b56d16b5f1ead0ec1960db4653261ca20e3259269be1693e83f9cefa986495e6252fc8162b887affaa5fa8b49b37eef2f26e1c031cdcf62122c42f7c966303d1b866135baad52188666d8d6a818a56198d8c305858958fd3a4a5b5618a60fd3d81fb089209956a3b3cb30500cabd2d81fdb2ce931ba710aab9453329221436327baecd8cbb842526f196e8819406f196e6c69eda423ffd9707cece1c7fd743e9ede6fbb30e7ea5aadd6102b785a372ca89387fd519caac329865c7c3ceff575f0fdbe9458c02edd72490ad3d99fd16b12b674dc684aa6a90fb1871e1a91c1ec823e2d9b39e8d33ec4d23f9afdc369786de3ccc6a9f96fd3687abe0ff44a58959dbe09abe0e98d8ef8c747eca1a74f23294ae7058aa69f4738450f3d1e384533c0292a67364ed14f1f94b28fa6998f20ef2c83d92517c459ccb22c1ba7e86d28a5f76115767a1a7fb44a753aab94a7298fa65f1e5a872096c8d718da2ac1695e82d343f172054fa7ace0356dd60fe7f234fe6497c78a44318245450dba20e10b183ef052c62aab1b7b8c58217c21c6165050c41b2770c28ad658374886155d0eccd22d172254e96f6bae41071f3d7e328de6149eccbde4121f3d14bfc54d83d8e959898fa6cf3cda46877d338fb664fa0436c4ea121f7dd521f95969c755d60a4eb80118643031a50666fc488a320535c468d940075756fb5522972ef66da36c74f39b62ba6173962953a68cece5ae8a12c2b33e6122683b255f73ce4bc618a394315e45b421665e8b6197b7db2356d92e50c2b884b61ca594d206e765e664963268ceeb9272638c71774241c28d979e13d8527a0bc930b39452b2642e0359b2784c339f999967640821c32a5c73d21ae075c94bcadddddddddddddddd955998f29ee48282a20f9ca2b7c1d1b934ca055d58b7492929bcac688b51aca9176fa531af0876aca2d9a3d82546e5d69512c3e6bcd468719820dbdb83659c32c62823133dce9832c625c8990c64dab7ad748e83bd75f202333b593f29e5f4969be92e05e1ce19276f5c3e425b795dfb38569cd18153f49fe41217a4cd69c32a29cff2d9b74d4eee0656cbc3e9953c1a63bcb8a039e36e31c6ddbdaeba71e5c6cf867777f793cd1bebaf1f6c1844c46bcaafbcb0a53a365eaa8c525e97bc649c32c6286398d54e129b13f382506dc374b699324e19f28679dc1bab26b65d1dbda69427829c8c6152a7e79c1836316cce39a794dab28ad64f521ae735a594530ea16d0dbe7c2c0d0ed15b832eadf126af8b2e3623cfda2ef9b1ea835eca94911d563f8985a05b2e6090698de1d690728a059fe8960b18611ace2ca7a09c54183e21c618df6ab58c66fc120423e656abd53262349e50c3cc943050504310e02184103e91906b8cdfe65895d4d0f0901b3233258c1334bc3c62967e65501a3bf4b0a654802286d47366447410c2c3637a389c92a79e0ea7e439d5f2708d8efedb5abee39fa32652be82494003c0cb6f477542a4c6788d4e62d56361706269b5d7cb650660626045d7fbd9506e935c257f39ec1aac2bb90950cb0e2b856a74df3bca2d720b99d00d619ffdbdb56307e2b32a2b9db4093fd6721aac3a700a5e02c5594d1e8e8e0d8e0eaf9c4d9073c234baebb03f1b1d56658f874ce860cfd2e37d4c8f1fec0f26016380e7328332fa7b0d1d1fb9cc208c8ee7e1b15ca9c2293006a903a724916992d7386ff324a7a62c7d103bf53e239ef55b30cb13399871a1c16df913d653bc92b8aeeb9abf2eb9a0eb0ba028b92038832615c92a1937c6ebd724a2c5aa03a7f6aa5e96999bbc2c53be9ab9b661d74e571aada397cb1765b416b789455e8956180ad8335e0738a5422a9c8aa5c3cff96ffb8c9f1c10d892def46f8fcdcfd46f9ed30e6fe24c9f8fdecb74b41ac5e6b6964ef5c3e26573758856eefa86cdbe3821b3b9caf49123323bd6cfa00c8846afce9bf9756d5dd7389bb73de3d19c7ad82fea5def3c9a2f0744ab1c6c1a4f72cf46bb739eb6357de749eea1d73cc801c14eafc1851c4ddba547b907bee47536383ad1abf1f197f7b1fa929228b6448a2c8e392d64df29f21aacdf76de6bdb2ea5bcb69d26d3ecd9b66570cbe096c12d8399097eb2b7ec1c5781e296dd887b0362d3f65269c674ee5f775376d16834a6edd9a97e2713cf94fe7526aed28c5fcaaac4ea77cd861d5f35f8e28b16402f972fbe683564a2974b17645aa278e94d97a97e97bce455bfd365f6d34956e19ea70cfb64d350d9db7532994ca61993e974eaba0a144fd7970b3255a238e37d483d7422c2dd66e6ddbf9acfd0cb2fffe0f867147178cb3d33f5a2a946dc19fd0ccdfc8cb4399dfb57538db861fde0cc69bce5d44cfd3ad355ba3ce76d5daa5f46e705938031d8cc8a0459338c35d145985d39afbd765d5d78e9c28a2eac74017ab97021e6aa1cc7f3dc758e0f142feedb3cb15f44b1b9c9016135764d8be7bcaf6b6e63fd625f5f2b0c45152abd46dc173cc7fdbae2f55885ab4431e756e83eeefbe526c771b7c2d42a776efbfcc7a6734357fda0f6c5d3af7797a91a653f6dd528b6563f5629a395da6c1c63557071061757b476927c236e2eae340cbd5cb6b421a60dd0cb658b96d65693fdc1fa7dbdaf6bd61152c3bd0e42343cb6b1a3374474d4d8b7972f3988d50fb6fc6467df7fb02effe282b020eccbedcc3fedf4cb3fddb11eeedb9755a59b7ae64fde72ca7455a3d857a4decb745a352acd20571d8a9539ab94320ffdda5a7235f1dcc284c12f20952dd34ada4b90cab14b56cd1cab1f5c3050ab377144e0392e880983d7b6b52fa4c22aedf01b1704b16b5c90a6699ee99ad4308c628f513b50d4721c3b51649804a4815e93f554a93476296b8cff8c22f65887e8b5cb4bec30478d5845f1e5af6b9a10ec10bb84d76afc72fcba69e382980e25fc7589c91cd5044d252e08f621594d5835d12fe86cbe288418768e7ca46956fabb300c938753200dd825acd2dfa5c1c7a6cda8b40a7415ba448f92902944233323090005431400304020160b4744325193751f14000ea7ba52561e8ad320c8610a19438c318400010000100010186d1b0007b258e90ba19d38804d04313431ff4013395411f1099e2f8859b0b1021fb1d74f181bd3c7305287bf61bfcba5ce19fce10a08f1baeab98aa4a73a93297aa39faba66313caca092a726c2f66eeecfdfa83ed678e94f81de7128a1a44f831e749d9aaa9cfb865793ec6adf02c7b5b79fc86e7dad977dfd2d4c7e9e44203a5bd691ffc40c39c5a95ead1f18312a223e6da38ce23cb589f5a71a316144c482875ca27bffe0335c7ba4807de13fd23a095455d62412bfc5855656aa500c6c1cd3f06502939cf5a263bd37e42d3ed981c6e095c189147e0147dfc4ed5eedd2031459fa75cf20f9b0f9e07352896e1eebb61e3065527f153d531139b179d141432c6a9f01aab470d3ea332f94b3c6b7ef6b4364ca0a6ce2ac1e4ad68019acec71bccedb75f9246bf7d0ce7e894897398bf13ac8779c41cfbf134b12785768eed3ee27adb7dbee0e40b345eeec87e270e6cb71bb705cda9745098c8b17e19dd39fce3087bf3170c41b9b70243006ac0eacf8e93b2661e0936e6f520173137702ead1da3f8d74273d7e906162ffe6bc036a4d062904981d83298f8258536f239219000fef0cd002c05eccbd65008e06b46372f9fa7bcc5a8061ecb3c2fb2f8362f7f84eb20925dd452f6b6337de59267f5fa4dd50c7f5be1a4f35390c38371f24b40f68af0c4d71af5375ff3796a50cc85a90ba0d46ea41863338026db7fbadffc33a4a6bafbf1f919da32a2d2df77a83d4b4d03b83f8b83197af80e246ff42676f8d335cb7a21cc0a0e41c6c509720db8666ca4d28d56d4a91cde70a7fadf1a8ac056402577c02d7b6bd70d6a9ebd464c319afbf0fb93e25ab9d99583b05210ca7f1423d8dbfb9118f5fccca165d57e821f12eee13448c7e0b7cf4d40dc033ccb2565c379ea72d4eb830e5633bd835a1f6218f170a74e7d51f43b0f282a888ef9696e3cc442231c28d545cb92213109814bddd4b97020931c02da37fcde02a4c0551e83ced7046f2fd8c46668e77046b1d7889d448468ad2b9dde8aea04e7b215ae6bbaac67f252eac6baace1c35b8a5071b5c7dcc624c4fdc2e724492f42bb4e1703cecc153b886fcf7751cf2fd044e4202bbe1a02403fb35d04f7b4d1a9b29d2a809f6881547b82a1e6d8e9eb49e8168868311471c87047400aa41295d9488dc1a4e38d1ac5d21d1a7519d3a7f30535410e245e2a5e1d25d046a046a2920cb3faaa1f1a4822019e60cf2e82047e7898108a7d95d7c628d257ec5c391a5e712c01240beacfb4475602e4eec020fdca1730672a2dce5edfd3ada91a3d2d83acabea1527aab454fd90aebc73f8c41b063dd32aea7a8f63f3bcceef15efaca9029d02845957f143531545612ca96c715ec0c0bdd5d24c4e8958b12e6fe45818b0950b2638e22ecf817bf4815c1cc5ea2e77f71a2e1ae312e5495c75ead6ca2649af53d5b5c05c41748299170298ebd40e21538b3a2914102c66451b149be9fb8ca162a5fcaa460a2d84821dfa3155e68447f86da42882038ba4224be34c03f46ded55f54b5809a680928237ada43148120bb41ed57b746b859f73182a34861c22b1ffdd3035c289fe04d6f55de13c320d16a3c8fcfc54718148f79728b2957d17cb1f987fee3117efe411cbd7af4370e7afcbbf7091eaee95ab859b8e2d1ae8ed58acaae5195119e0a5fdc222ecf940f7536be4d406037c99728de86a3b45df25dad038a0b4b597026f09437bda0d58bd65ac43305cef542fdc18a5fb0cdc04e8851589d9c9d3bc94c15f9e87ae7dd9b6e4d1be94e71d270579fb5d9941f3f28b184c41604b1e6ac7380988d4ad19ec6ae3f736f88fd04be86a44780f3a5c504f4efed686a3817875c45e64ce1a26f665f665b67cda37ec747cb80d1326376ade51592432a76824aaf631c712dc4aa302dd84e4242601b3ff57c56d4ba502a982125b523b8e49f8f943e935d9d03964dac7c6f57af31d9cf83433049c5d1e591f8e79d3dcf9b9c1dd9e979b4f996ed79aba78815a3c25fb3bd25e39ba04db52ba7aefe27f3adb16f281c3757507cd00ec1f8ebc6b690c240f9af55ba02618e0b44985d3dce0ef97503fc1c1883c3cc7b31100f40924dae971a9944aa604e110f06fb59120ed5d13b65252adf78824c473cbdc3425e31ee7a8dee662688ff5de85b975fa1357569de78b65873346fb622ba57ffe795a490710dce4965803cb951fbf3ff36b46fc3c7e3c11f708df1206077d4d45c636c6c9bdddbb1f0120c3f4166124ef8b51cbd5bfbcd7ce55237ac904c9263046d76e26c88fd6a8b13dd4058632181375184d49d82f5256c56be141a08061ceed0c15b28db34a1da57ece018ff9aadc8a9a5fb415d4bc886b005c5f5c1f098800c66daa52a4c9e5afb828bb9247eae3d2dda3ef645756e1b8def99a82075ae3f36e37c52520b39c39d83ff792c3826012655718b08414358f989fe8aac9fb2d058d28aba5567efcee39ecb65465b30dc724d4eb99e0628fba1a48231f030e0ecb324e66f76a6d27707e867e0812dd4ea48768dad14898a7c2580191300075d9be04b43ca4e6cf76422c65a50178fe25b32be047947cdd2a3420ccf032a163fa76899057cbe62d248abb2fd0de0931ac9ab02688ad07b106d5af3f274ed0caa92d9c3871d5a9b354d3dfb6d2041ef83653c41bf90b35198f27370e40ab42ce142f36678840f5b21c229d0b15ae574cc3a795380a14c5f70d78810a57e846e3b24a7bf3641f5bf02a1001d74e764b4ebbb051348d3b2b1580dc0254ef6e03f84adefac82822a4a3ec6dd19c997907e6b521ca7b5337fca6c8fa5b13d105665c028c01d3338c2eac13c162db88ed68a22592967b4d30e5f160f32a498c70064be8fc0e6d60a1a7149311b7289dce34993a7159b7a5997e5fe81fec8e9175a4df0599b54738f1161478dc0a76fefa11389ceec05c97b1470af47038f518b19d54b501843b7bf1355223731db6b3962108da99481af28d40f751dbe2d1623722498a371983d010489636c0fa585c33164ee8ffc506ba0f135412eb6ce6cba68ef5f64ea4bfba1844191c431fbd3a9da21bbf626124b360f621cab5c8c73e0486c1f60812ca1cc442ea8cc4aa09d0424e52c8e50e98571fc9d867c81b9d5ae8427f1dd15b29787735d2f2584533aaaaef54ad7b4583447760774fc888136a2cbe2dde5082dc24dd73881ca9a759c6cc1d6b8611c8c44fa537c766efaa8a2d389aab975715c3c9ea5d8650a56751e881d88273057d302daa55740708d26992adf97df43cce3f2756f0b38e017d462da97d89c7ad3bb366470c1cc01e9719254ac2a24424ea92164085501b474db517f5263d30a7b1708307c982c8b24004f43ca9bfecb4666e5c8356f44329c9805ee6555dd648cf6dd0fb216b10263e8522c6c9b27a3991142ec741d87c5a390fca903c7bd37ffba10fce991e59cdc0bd61a805e39644df45a35519483ef6c690cba7256704a827b6c8bc09e581c149b372adde704c3c549842142b2b56c66a27c7217bb89f18dd68d50a7b5ed743b37c16a5aa7e419f679abd4329b8071c913586960a98c5ba5677cfe2651f4a8410e16e501dfe17301e93d3297fbd847ac1fc6030386110c7955fdde96ca9795bf4c0309265ced8c7ddd335c7a72dc6d90571306d947674b414e1fca93791755f60813915d0e32a246b21d206d2efbaad69332724b38348413ccd445a8a4595b4d05943d8eb42af5292e29feac33cfe30bc6dabc899c8b25ba2dddf4deac93a440523e42f833a90c8f34bda7fcaaa3e8e5874818bccef1c8f0b49bebd2cdeb006f74455f744917c9682852db2222c2010a5e8f992bc04585ac3966994a88b67a024164ab260d806ec10bc8f7800f7c5ffee2ede1623c1251ada9bc16fe2b3414f08dae317c8d2d60eeb530f8a48cf0c2f3d3a7914e16686ac2d0864acd1a047189a9ded7002a1ddf3f6a95cd63f7b1eb77edca646ce7caf7da57cd5ea237ec9e82fef02d7844c74bb9f4fba004a33e0b78e6db6cd30687d66028d025a36264c64351bfea0d3a16e8b501406c024bceb654f3641b359e6bdf7ca3853d95601b3a2ab5eed997098dfe837333c50041a6704f4b6e959a075e890fb4c6b7fc11da1d617417159bc5606c2ec19b4deb4dd98f6a2653c81b27b09d8432255bcb9f61e73585d7f387600022810d24441975fd57522127f838772c0c1b4496fff0036f6425fdebc600adbd37fcfe1d7c93cc05677fafbef034c833f53681facef86d711da001b4b9b104a18090d17f1a3bb8882970b8c2e55f64f010f42271a85d89e62315e0aee51911abc46f9a91f119395ae904074f025d8e19038a3ef0ab6c4386e1e80fae47208b8eac9584ba4b33d8ca88268311cbaf2ae5f4dbaa29060ba216a91c8bb9622b65e75a268b0622563aceb16a5f25ef0a692ec348b48fa4a4ee04e6b217e4d0d6aa65ab78d3fad642e2ee14bd2f1893eb1185f16f03345a510acf4937bf0b472c47c4bd48541ec171ab57d89edfbbe8001fa98ac1aa8502210544f02a2dc17720a81cc98629b50986002d3e9662601a9e6d70025091d456f8806dec5caa9d815bc0c31a877bbd3f59d95e1f60e7f1e6e380963dc061252eadb70ad8d7a747af55e58f00c7403beed46447b5fb00b624021cad8c6a092c93357da4b9950f57c72727629430f082366915f51416d0e1b9d39a8de55aab6bedb315c751619b8eae5b73473e90e47fa8550f4c0bd36703a30a1308ac83f660823223bb81e433cba977144938e50fa7ae1692f20b267161cf1fb07ce86fe7781a24e3390f6cfc9e526cf7f120d6f0376114814ec5e9386814c4c8f9955db2647bdc45b9663444bf5b5b07b79d09e38584cf09b52434241c77b8a9a07894f5268f264636690b18c2b5fad27516d4702b525a41c8c078970e0b451022875922a87cb03726ca64800e2b92b7436252e8dcb0fb4e182cb341724576ee9e3b362e0118e791a00884448e8140f2a40981525106635a843d2f97493803a8d2cd06b17f4551774e4f79733e364041f219dc6758d8d9006e966c7d86a0cf84cbb30b5fe16c7b7b400052c36469bda3302b0af8238b33a1c92b8a4aa2c85262358359327a76d56e667dc121ce1130352205682a7317af2551392adf024a92041e254127bf0aecb12d62b8db7d12eb82bf12c0d70232c5a0f05baeb52b87d76dfc99e6995921c1f90523f1bd4866471414747fb1ce1d3554a67f681fb9a9cc1d19efba3fe54e402b16883c7fd4ac45ec43db07b276cffcf5d612fa006d9a697be67406b30713b0a2ade7ed1d9a6a70b386504890472af09a4032c35fa10c20f3d7a9f341f7edf49df1c689df7e2689fd608d4e0b3c912cb3f80ee05a2178b706feedda071416222764b5895307074d5f563ab6c4ffc45e1ad1ce13afa388cb69a4ea6739b7bb0b94775d3b481009b53b906f6f6343531ea61dadd5b91ba295d08f2e0af2ffacc613978ba73fa5f3cba211ef04e6f24f55b405c3ea07b2bcb3d0a679c49b6260d5e3542e18340fddeb941d5f759fdeabb942f15fbf85dc2f62af082e7e83bc64667d1a1635a1d1dad0ae4a9d2af207daa4569401dedda012eaafe2bd19541dcbcd7b32f2f8e6e5da5311c4bd841cd9f623b1860e52abd96bd228be8056348372f1e6e5a804cb1923ef2acd1f9dfd8e1fec616d92e24bfecf3ab3e84394ef45869e41f817499d8ae777d3f8d1502f68a0257243731983d60904100edd44bf761ed91faccbe18a60d4786db69ac66c0352c692684d3008a8356aa0e4fd9c189e451938ac6b9be55170b3d8b9e3482a5b80ac40474f6b9bc5fe3ad25e3908b8f88e18ee36c7b0343b5454843f442c36c869e80a114eca36fed1c2c46963f9ab82d8ba9df6ddf898a7b6768c0d7a93dddda520097362a24f899ba2e80b01f884e004262307d6a4453c167226ddd04153893b008b5d6fd1d527533606d4e98d2aa1ddff7e018cefd4d91deeef6f537088175b3601632c50175e5b56c7e9a17f3f5e3ef95b01f2249d420d065404c35950c8e4ac800f880c2e6da01f04fdf86d8ddea223e9983c1ad844816d66dc95d3c7056b8eb84549d1f9558f922a77f2cd9d74b202b3d85943ead06502a1bd14372b87c12544d2616bfeed3575afa07dbfa3739f1c2c6358c3f2589d23f11007ad50b6661d98a50e72fa4bc12c68289515029df50820d0495c7630c01da6281cd9ad5c5398f938d671bda9e16ccd8153757d85ec875db556e4f35e9eff798810df189a24f9884e065f3c9297d52344c5af466cb44fc49ecd64e4f78625e7847f8a235f23a7a9df1e2d964063f71a22d980012d4f6b52bbec0f1d5f78b63482f24a7ce2abed32da9442ac2462f6749a0e168332cab96c1b4f0074e1054952adfb1954cb3b31f344e52e372dd41014f79a8d646e46785b984abca8c138bf6aeed5b5702e826bd8012701a7c60dea0e616ac14712090b4435c8f8f65c582a905696d78ceb2e1163325cf6d5b2dbc896183311a973f97c54ce0029131ce00e592780f22feb6415ca121282c9a12a93a28dc16cfabc5138fee0eabccbd44c2dcf0130e1eaf8cc50a222d874194920ef87a3c03e0aed3a0520896c3cfea5ad91a1e71840166d083f429cada61044aa92676f5739c4646319bf1af2daae93efaa25ae4805941f70d00a7ed3584b9743d155de252173eeb781a667dd6c4ad3f262f60032370e504fa0a0d4d9e816029d81e0e093ed6ff65ae0c2f6f8178a422e461ab450a9079559af0466b82bc39f31356a7b4cbc44b8aaf5040774b42bf68c5e59c445999e25e6d16a4a669dd1a980a3f6c68e64a21975b6854ee75af8e875cb1e75873b116f61d5970640e4e1ab68695473b9ac67ec65cc02dfe6017f0e0de6de1971bb54ce9cbb12eaaf9114baad5e9d239f6128dd2946103f8bd3661fba62e22d03b035e95b3a39b37e47dd791fe46925ecd8bddadfba70c593d5144404ea24a45401dd398f246bd66bdc520f740915f3d7d67a5bba69d6e34715a0e96da614f73c513b7f6cef7a67c0b4c9b81fbf2f15b56263c02e8125008f747df34d2c6be2915904c1a1ef1649a015aa0737b76fba4f1e91ccb5f9ec4adf04b2a84fe344b12eb9cef467ca3cbec3ee2438c22000fd2d0ba777a47b71797df77229a4a4466d1dfab2f20443b17fbec898500d34ebd2b61a75171b2e338358adccf83ca844ee79ddd3036e0c11ac267d2b3c0e863910df5b487edd5b62d23d8b1b39ac6b66f8596736e5a3200ec6cd263adf33746cf19b8e353bbb2f1f1a84ec64a448c0d652f8f1d6f7e0a813759c01c000ad62786a8f8bb0d09f69aa21031fa0e18b62b5a1454febd100043be2b12272f1081c2b71b3dc2c1f9c542f29003216be065f2f584a742977626add3f89aa654fa4b7477432d4aabf306cd09f93648270fd2663d98c267d0e3ba9713782618b9980c0d39239afda5f75f5965cd3daa87f0ee00612e3f0be97713c3db782561f9e29802837ca676167a3db135d9c483785aca3e16c8472498aea19b5586f45eafd64f56a146d7d8b1f390102ea657018c840f40b9222b9c1d87ef8b85996afd31cdcaee1b7d69aab0ebc8f4c6fc7c9b4003146804710b5e214683eaea10ccb127ba569cb6e895c6ff7145bb5a0fef64c3c4c7641b0c1e89b886ac0ab14431ef1320bed8135b519c8b44fb393bb116eaa26aad13b1235af6bb59592491890286312c3cd2cc2cfa3c7f7df051c4cfcbdaef518e8841393ed61e3d729e436409a6839dba95d5cb429a398a3786e3f435daab6fa0811d46da21030dda3a4c0b74106ca2c0a5a986d53031d8836990c036f166c06397f534e53dcbc6afc80510747d93a064cea9844d26c469d503a7de971203141a63e40a9924d6dc7f41c9bac1b1351d428caac08a6c2c0e25d9c09e22181d555bbe88f2ca682f021225de890ac8cf01d5a06363c7e3a1691cf7384d1f9046ae69a5160d676521a48188dfefde7040a59e9ff738750a5a4a3f7e30619e68c6c60bce69f71072a66d3fa61ee1ded34b61cf4c8f7a86c4fc6ed0f327c14493df441f520d5b36134f0bc6fc6d422798ccff19e20f2a7688e2a83e81f1a0a30cab208a612b21d9e9c1967d74b3302b38925b708846afca6611ffca4ac2a002eaec9e13c875765a92109697d603e95e079b48dc83343332de1f96d59c7a091ccb8b236261ddf0cb4ed1b3ee6d4e1b1c02b949d842616c5b94b412254df5b1b0b60d35724ae15326a08ec817607ca008677b8a7e82de4f54de4df76e47e1694fdbef749d32d870616d512743f30d8963a37f428609644c24c6a461e838d347f510ec745cd247c120949dc1c1ddb2b08dc0c76c10f88e186a0f77f25abdca602b0171aef6fcdf2c586a8188805ef96aa08958714e03681ddab145fc51317ab497f938923692369f08a6d4e5614290406d075b4bbb9da96645e2a69e6adde583f2e8f900598c729dcc83289139752a42dab10edadc3a017a18bc8c92100b233f85c3c7e6bb878984e3f42f32a18c3d7432dfa6feaf9474537a854d7df4eef83c78c0881ab04373753f8a7eeb031ef9e20e90b6eefdcd10d3a333590d9df9457f484cd11ec2c17088e99f87d9463f3744c7c5241d445c1a5b011cc281694697f71d3cc2009d6490f1a97ec466efe308b0866c8ab1444954960a03241a1dab5604cbc1ff2427ea24d36e160ca8381f897ad6f97f5e9ff85d7ced718216a9a9aefdfc7b8fdc8a6b6d301d165194a1e55a4ea4f8f2effbf34b4c4416ce17d118f8a36a16fd427dc297864a8a854cb1bb943d30cb2a0654b75c0a554079dff8bbb0cf45b97c9557024dc58ef3864e2cc5a7ad6a67aac891b35243b3aedadeffda0b063e3469d95df3f5ad44c9f5aab7ba851e3a0f51007ab0b573b885039d1980de2a255942d47e78950cb884bf4753c3d651a7ddbabd846d951b684704c200d2ad0807677348ada28a940db3654d2c3ee2daa368354debf0a1381f0b21405449c711f55cf0109de7359e574d76e14eb0dd1ea63fb7a5ff788c3b5d8563b630239c6149abc003842f8c60046d1cf1de38edc20c85374c5f7fbec606091aa7090dad749010b504fb88e9526626d19f70d1d4294808474bdce21f48b54b39d19b886fcb14712042a0988da005886a655171742adc59df69d262fc2e725657c6b7b0f138ae60ad6144d3878c01794c035611b9198179c5264123b4dcb90ead570603bee46a75fda70d3de0834ae6896b358cec4260f830d5695bef2b6ebfa885e6328bb5c7a59f458f27aba74562ad0615ca6a75fad3f740a24a345a958c6253b9ea5e1a572ad74029b290755811b41546a85eaa1741c2c61ec2a6944b9b45623a7cd1307facbe843fcaadc268a5f1154937ea78cbd3eb26a7f397bda2971be0e2a0dbd23080b2990398219179d909d8804c9005cd0ea5d5bd016fece003f787d18b9b7ee8ca4fe17220be1870580feebbacf8a0a46e10f9f85455c9729494484686d06ffb92e6a00d0516d4ddcf973f0db120d3401520ff9ff4bd0a136fe979644a8fe5721bee70959d6315acbad3253e08d9da49724f28d77e06312814b0a34df05c35ee7cd37ca7f84ef4ad04e8d05624a58a9061ae8bc66b3297f66983efab8986fa9f325777f5570ee9c7bb106ecfc7050c11ad410297870428cb9091105d40efa322a2c2bfa9ab320e1c31b50145a4bfb901ed5a387bb7a8832d153541668df1dec9440afc1d5c6dbc240c66c3db6bf10fa8d9fc483f02f013077ca16243a83a4d2484d90410c0dcd90cd66d9f1b2a2bd5ac9f6a021ec4009959e8b686844783435eef97082e1407eac9c162326f0c0c692b8c734ab067ee6bae18771869a2ae000ed411ac4df19833bf32c58671fb2e704892659811c9ac4f1ebd666bc94cfcc1f1d02def4ed7f93abb259a5f8cd9a82751ed8a2e4bbcc8b0dd4207d971fd8bec5a08ddf921b66f4b8ab72841e09384536b6e393c0c91214766935f97f0b971f2f89374ce511120f18282852463ca78c2ca83e6cf91030198d7349bbd2a2d4299bc81a5661720e619cd880a25ef365064579722d6eeb4ae2fa298e6e04fc3b13bfe255b19a170eacd53398adc2459f5363f736264a5cdca2b4916fda174c7de60b984356cb6ac3422b9d183ae38b2bf883b362990848b2f9761c6cb72ade9024e58dd3511510e6eeb1c134d4d1e515faa01055a6f9ca3fa159d3db9dcfb084aca38b95fbb5919ec46a37d2ea56e423905b8e251f0425e78c4516e645f8f62e347bbf08180aef88d8be68aadb202012006cd4547f0d617f48e9e64f0d99f32c84819bc26bc245456845a3d1b06ca411b2828dd1bfc0d3f63dd3ea485c11d8ca39b0b2c92e2c43d6abf86175893bfa1492e47621aa781b8bd9f2f6308a364b52e969e139064963d4a1c3c3ddf00e8307de95fdb9f6c9a13993f8d99d001c465d90c00d011faf18c88deb4593951b917c53dfe125603c06b704d2787993c555146ffa05df5f25f7499d08fd2838a0ae2504fe9963388948d8e1373b62db20d8e0996134904c11722300f9344c98bd666cb0d07fa6ff5b121cff20802c5fea254e5c7b3df800d3034af27283b99d2180e59191d06d0b4196baeb553f441e37944a1b99b2547551328b45f99052dc064f9e370d08191eee96e1071c8d89c022fc00f3bc1e244ccb00081aa3cfdad541f2f476ccb00334c1c88df554a7804a51009931ddd345148f1abc302800d7827e0480fcabcf2c8a8e3d9eccac195ef5102da75fd0e19f849a47aa98bb8d3b15dfd46ef65306565f44037b0638df39ffeb2afd88a63747d3afcc48a275a5ddd8007356cafcfa0586c6b1af66e989ad5b866ac5ce858c17a8afd4c838061ea91eb39eb01c5eac147dfeda74146ea3dc1a3151b8f35b2ed284894415b97a15f93e896eac006237cbfc853a98df58bea58a06a0536886327bb6a30015646a511b9d750da0d0e0e537918da7284881cc0dbc708a13a05ab1cd8c19d31c1b0cbb15062a9f055f473840fb0eb39dffc3b3d68866d4a1b4c326ea8f7d840cae0b34cc2b6a7c487340dc752e94cdbd7c9bd6097c8fbe9ea234c25c1661b40daab26b34dc54e48e157fa76d29902751d1e03fca051b205aa8cf0f8ff00776e52f8c7581ab333264055010c6e29733a8fb3a3eaf83334ad7fb195c30c22f07008df3c9cca894d431ede920baf1e8b67f4de5da222a4295788ad57191e0e8851800595d8e8a296d87e3fcf180f3baf525e624b1c4c8989826b2113515f55633fa3feb7e705c414b2cd58702555c12f3fa72ea45d230b284fa1c580f8c025a2e37b80132a9f60e9528b16d9b092300c42ba8f6021e40ea1357f500816fb096644867dcec0288805c6974e63b4d614e200a7c770cb8e475f7d8fd68eafc125cd6fba70893ddb703cbc20777550a4739b49f7a6080eef00ea84b18902df906235f8aea3229c8fb5f40a2c9f916bfecbdc5704bdbfef9eea5a140fb7816d75f80bbc9985409c23860274fb8cb55038dfc018faf7aaffe5474881ecd36afa260bcfa3327abb06a3cb81695233379d975e8d402e4787ec1b69129942d62021ea4d571467483e3a8a00c93a44ccfea809aca5bec400596a1440751d8e6c73a123948f3b648faf1809ae2ff10586c74232741448c862c9a0f661ed8860f02da95ae3e1492483467c3da908c2b454cf5626735532ffdf8e3a5841bd4fc112b35d459f9984a0eb82ac073a589ca6d83e5f1ec24e1e641ba99b3d2b2fb09c865c76c161b9561641914d74335210809817ccd91db90de67b54c4e62844339f190c36ed77b8e308765d074c5015154f6967b2bac32302c8a8a13502f022b0a09a917d115853c1a8737022aa2ef28ed038186166046a96904f53eb51d351f5447114430704479eba165b36d1724aa1041a9d97328fcd98c14abde18750d32f1a33d57b14cc40a5a860fbd8a315c01f254b794080f5971997863ee891cc1baca9ee9192576e528fcc72289b0b234061f88b6ab30db03d5d0d4500a511e9479fe743ea89363cceda819004402fe2634a25f4e24802625bf726e57cc6ad25bbf98f47d26d235530bfbb5a6851ec47f4e6d57b85218e9638e51817f319b1f7fc6bc05b407c7b483aa15d2a38779427ded4f68eed95011bd8829bc4f7e1c42d2e14f98c9b3be37a8ea6d69778612337627cef2ee0e7ed2fc95efbc722481f966031d29956b4d4ec7ab8a27494711c8866cf5af96580a3282ffe2849b253d86d6592c4546fc60c505189d9f0a27a010afe772f2c9949c5f3bb58a90953755b92ac159d76d17e6c5b90c50b11c078576e841a0974cfb5624cd6777be4d6dc6510e8f1c51d801a688110cc3ba1de415998bb060c821bd7f77ee32cb29aa4323117c7c2594c6195543ed920ecdc8885c41b7b7259b2446cf1579d553f3e182f36bd00d6eb1bd66d51e8ea1602e4b3e32f46a75cbafc07e254742df15b8a9c1a18bc56345753d840dc2765c5a8495ceaff1c663185c740324a50f62bcf77b9c457b340a95b1d1177411761e04c56fb214174d1647a6c96948de9a0193e5ba2890afcabb531987e005e1004e02606897c92f9e82189de2cae8256256b512250d047ca7448d3ab8fb8ffb6235a15236a8b3c919f78c4f33a1eb0b497d6b730f3c4d94b11b858d20650b49083a8ceba3e92daf611d4e8a58222159b124669888c224bd855bf940fba5957baffb6e6a609a9a31078e23abe79a2aa17953e48d8c94b5d2e4b9782d2c1df2a9b3e796a0a80c0316ed31873ef4b2da5c605b438bb6003b481b2ae2123455149e26455ff97c51b6599aa6c5918ca5157be8f6cf126925c3649adb68db52a6e34d9fde0499e2488f222d22f9349947c7e663ca81983049a8c76a2014b06ccc998516d8e4f22490a885b9e51d48efd61a12fac710051e4013ff026f26964ae6258ee6083f8374842bc6222221a24b434f084acb981301df558538f5d099d4b504426aaca76224afc79f0f4c16d27d9a3d83e23cb668890cf91b438a6cc9f3ae594d703d4254e882dcf25a3e7a923c1fcd7ab809ff1869318de1f0a8842924122ec74058b37bf6eb1d0ec687f20cd9eddfb39fff5bae3ae4d5d94b050aee0b043a9a2fa6e5c5ded5c238b930d98b132265ac7981b18eecb7315fd2cbb2fa91630cd0e788eb7335d290b8ca174e2ab5f9106785bddb054acc926c34f94d6b74265164bfcfa46d11ec8e76566acf6936547938098e24d34d5a437a119eb1cf9b6babe32e486cf9e33937700b4909e10a7163783a83ea675690337fda1cd5ddd5f9ad70d78fdbc0c4529b02f548b893602ed9613f7e3e4cc343b0dec539e15e43f1570cd3266639108b8d812e841533b864d6ebe74ad2240e788d15ceabddfd8a24a45aedfa0345df74d6498eb880bbb54e46b5c995764a49615def254c84fa25206fff6cd13d6afb502a1f4073ec50aa01064a1e9c2cdc3b3e85ae8c835753f3fd72ffa905230d4ccfcbd3bf61979b3ae4fafa233ff8ea3ea6ce81063dbbbd15a2777c4915cbbb8de1d3b7b0334f90b0642925dca9848118310bcd1b9b202a23e77099cfa928f1d9473f6ddddf18605e347603dcfa72108becd18b16a6af61ae1b2065229752333c46430279447c5af601b5e688d4dc880e922350986ba43be194260c20c8f71127f34179295e03077a1795ccc8339b810c067547d7e0cf6164ee044bf05ab7614ef62dea0ade3372fe8f959203900f09c8febf68eb31b565c089891afce1071daf9196333e1e6272cc032392e1c72dccfe346c1b0fdf60196dce6c1ad337f51086355fcc925d328165e0d295873dd782b13f891dd78e5dd0cec8c22818647d67c2cef74bc1644b8af19dedd53064410bc9bd815d1a5e0a6a502b6f920d85af3abe07e3ab543f30df003f8394e5e954939c65113077f0d6e3eb0d5d1de123a390c1802a52de580dcc0593fb0102faab800ad1f64f1c3dc4349701cf50d49a9f20cf3d9c39c528848b929bca8ba4a9f50e986e7a914c5a651e537ec56dd5de09ad6768eb83a54e09ad60882ae28486bf3b83408027a56d064b409a529d5cc677d4aa8602425ea7bcd997e821fde2e7e13e8298c7ee51bd7da31fd9bcb0f4896dba6ee3af2bc86518f9d0475392b025c5b4831c4e882d0567ceb326fd88b8498449acd5428e25c3d483308e38a70eaab957eac29ce91f0c9849a02fae9a6f4cdb0575557bb04372dbf3f8990af638955898f8ffea4550f4cfb5bf189f2f680a799000de89ee80e853f0945d2e82a374885b6f8810e72b2b4b5f4cd56078907081291e85623f1a1d26f1bdec578156fb7b3953a0708d4a638c35abf7a560860afe91fad3338d5feeb7ea9fd9cc433666dde6d82005f8f31abeeca2b07486d2c0b76b47a1f5f4111211a36faca94bd463df241c7db5a39ec8002e844f3225582c02b861b0cba5d6c9c47aec59ff62cf40c0df954793a2b5c3dfc9c8b1f04895001bb17239b72205db3cccdfccda262eafdf571c0fed0bfceacbff18b2622a831b3eed6a6a56f5eb2495597927f1c282ec12d68ffe1b4de514de420e2947da1fe05050df63c794fb007c77e979241f6b13f2aa50f63d8dfbc56280bc0924f3523dd2a606df27b525db2731a236111dbfd993ea5311c7309d771659ea02c9e73184098a3701e833e72f0f73e7f865a8e702a1c51a9cc41a8496800d504de6b5e6500879a0d31ad329685228cbd17c5d128c1cc10b6f9da9f7d58ff6f0d578c0c4f7db295223cfc5842416718202d302e6aecb7f8175aae18113c7a60532cf5f6b0041d1d48c01816082b4f9202f9ac9389db0d0a5c6713b78a61813770c7f8e59bb4e40562fa8781ff27217e19122b408395ea9607651a2bb031de52a7fb23cdaf643b6f8ace83b2f8dec99be9292eedc1ce2036c394f51597e521acb67b52b5db65ce1f37f90ea22775a82d344dcb8bf95934b8b8f02d55edda0f6b9b5d278e2f213ab4928bfa84d231f3ba064a044139541d2231017a098595928a5919c6a186c641a510961819c341222474658f2a10fcbac0bb89bea62c2e5b5050fc8915c425e32297c3ec366a3261f99ea1498bc501b92257c4bcaeadd82683eb45e7c8eb3b890678fc0b6a0112a51ce58d91d89ef1769ada95779f2049b653c8bbb00f5e2adbe8519b57e9a0bb55a0a357078d700b7558345a5cd18f60f6a9133dbb234d9458f36c9cb13ef12a2d5afe44bb21fe8d24a60e4750a84a8dae81e8bfef578732346e04915d061786d21ddf75de9aad4d4ed299b2f8748ac10e222fa27609983908bf1a78771a9857c81caf57d3b9c2a4acf54ddb50a0c7ccc2ee47177a271d3105823ca328e01603e368e053d15aca31c62e5e0e8b4938f3b850dd21f22c84199c2307d4916d831eb759722f8eef3dfc0442bd4a00b16dba09df4999147314238cff80a0adf07b1ab59db98a500df31286fd11150c9845cd7871a172312aec6d1df1cec56845e41f984113b8bb8a6e18c81382095748b58cc1ae646e4c76471638f480036cb61b6945a1de393c396b690486b951c2ade208a07b6aec5800ee0ff145e6249bf0cd6921515f1f6df7f8028808c315320c160159fda82540be3de8366d50e14b051f54465ee0d413f1f8136aeea416a3ae5a627d7bc66259732bbfb3a63ac39a28e9bcf0539fc54b85bfac03bce337b2993aa5a43e8180bbe21e8d5b8f6205c235d7c1162e8d8d815dd7d0b443a32705bca198a0c0f6a423cab91eb4dc85b52a3d1ce0a2c03f9224cbccd6b520ab05b23ac406a5d2084352d61b0a1beff9b3841ea8923a7088f776265bf061158039c88e7607ff02a409be3ca5cfb806b1cf7e19c5ed3394aa23b5622157c74952664c6bf1d86097c986daf86b7eb7d845171ec7b9cf4b87b91653a927c5026d7a6760df82e599ce85d3096ce41e572f9e48aebac44f2b6a3252a4e1b610daaadaf424c1b4040174e97e35556cd85618a8eb50b87e8c54ca8d88e1897235114e992c82d9d1f3cb00d8c8194f01a568c4df2110d2bcd120544c613183a4fd113f4c308ca820ed60050bff837e1eb1741e33aa69bb2ff8e3698507ac9b3ee7b22338fe20845cfa05aa405cd07eaf7218095ff0d9d316e007a44841df2a6a3596a59f050d9fddfe0ab44de5391d8da41c36ca002e90d1b77e9fbb3105a4ab291f1a3de0d2c52eb748214d621750e18173b5b08775e8a290aa248fe52bdb51360c16bac0df3a26c2371974b8d2d019a2414fa1f16c0197fb747e6e20c983ee068a1b3be20c69525240c164154ee42fa49923b634623883d11eb750168f630ec24a2e8e663ccc3863c353c55677496bd05b5f2d0d18315f230d18b9486e3e195cf7476c7e0c77e08ef2883b42bf92a9809cdc8e8a514c3e7e0aa5ddd2e1b4473cac8cce580b84c1a02636235c88004a7c1a64fe87c4fe05fb8f3160c8f6e7cce3308655703b6476e4ec16674d879c2825ee1909c317a1a562c2d9259d40a34f33db7984eba9a17cf2d8a4511c42961dc703722a6fec5681216f5e64d704f7d2cc705f5d0e0b234896116fdb26ee760d4a6428300018673cb23f0b5eaca27f53a8aa1ce0642fcb10f5b26746e34fd002d9ddf51a65a3ace9fefdf035cba57c386998d08de2542f23158b52a0f943b72fba54fc0b2261a54dc376711f00ff41174cbbbdf8c955e630ea04c27369baadc71552ca14a0076c286009dd7412b7ed6d8e4edca69c554f782576e631c1c9892f7830fb70611f092ee885729fd47429fbcb46905a5adfd693f5f72e0b8c8792268463bff84a1854e2e68950d12be08e65df49dcc03de16b4dd23534c7da6639611be531d4ef802cdfda79588665c1c53dbc85554bb214d2627f823d5f6263be75170c36c5e823c9269a4d536210ce91351484d4d85d9da5b8729d5c364dfbbc165340c7e52c27301c0d0434439e5625784a863161677336c1f95abe46d04b32e0ee241a93543c7a2719297bdc8d28d04726dd4a9795361980c9e8767aecd78e6bb603b5bd0afc663945ab27ce6541a9894d87e009434e1afd88bcbd17c85d622e055c828f0343f001b61db35e686a65e2113fd78aac2123da56f0d438bd40539433b789853aac41ba917342f505a3d73902537e88720aa2978cf4dbf60403023d0a14d50c035a17467e8959038fbbcea7de460ad10cff7c6af6a0b2ac9b46df77eb6cb119830257254056f045b90bf2d48e7848e61dd96274d0b3a0f25f6b61a5e2b817ce0ba217acaa16f7cb158a39cb112a2e3e542094241cdb8a403be1a61d1f1002f3fa43f6a24bd1215d8f6e5a6b3fde9e511ef0458df2fd7d2d71444843e349ae286f7a60fd6eaca083d6ddbcb1ea0eaefc83c7e62ba4f68d892a7cc192b1f87e6074141557364a8f9ad62628933500addc09ce10d5414f85caa684f2fdb894860b838df5e156caf9eecfa6ed780afa10e6c441afa6581584976cbc35e846d3dc55851c83ecbf80fe76d557e178be8bce4015941f4792b02f6077a5e2d36d3f7a10ff64bccb58c8f972ffc051062b30026a20a42029bfc655cb59c7ba72accd473a062482e50a215a4db5bd9a292c176183b3019ca0ed0d9a1e1138479d7ddc6326129e04b048de9e4fd473281570e0867bca5ecaf8ded156d0de059e623f64d658148dc59c0a4e9c969145a403a49bb9df59cc23ffe56f0db582e1d07cf10b530d817a088c712d4f8fc7bdad4988063688fef5b84abce98d6103c544ae63868f92a6f52fc23c9201bf3801690c9ea12ba7fe6ed8da07b3fe6b64d2838fe043e5f5ab901c0710ca83417f25bd5d5247bd1b86553a0bba839c42a6a8bc8428a32050107903349b5c49835a94ea45b683c735eeae3249f74d488d168b4a02b017600ba90308d8f3147d5fefff64d09ecfc34efa4d6089dbce0d750641331dc1aee45465f6b70d85ddb5957f380f87eee6c4cc0dfa7f75bbcf5b3549567ef241fbba883f69ce6efa1556966982ddd016606d3635a24df00c72e3056c22ef5ec00b58fb8a882e447de52ea07a1aa723cdee49ce3901bdc3debe0c9192b31f215d1852e568d76d0d689e8440853f59b0011935446ae7e69770b468768974151fcf3138c31d74dad638f263603f6f79471dc585a0f8409e58511887811f66bc2b11b5cc7cd671718481d1f36684e320868a7351021f26a1a4fbab73780366a2ea67d83049309854ca384fbca3c855d0512738968ab13c47525f5e399fad944bbf970126858bd0efda5f6c92159918e9ee7e3bb9bc681fce8c0aad0161dd89a282a8eb1c80416284584bfca6932c7e04e2b3428b5992779fd48a2cd684dd3a9fac872e422ad8ee961d0050095dd754b173b5309327b0a0c7654e5df4fa34b75273659153fb6d391b227d9e575a50f63a470e408e22b1bccfaf26254bbdf35b3ce0732da43aa80f85f9ee6136e1294696204e44812e456d3556e0d6db4827e2ca82d59a84af6c519da55db2456d044a9cc30c16e97c0793b922f3beebde64a82535d685c220b4de4dd1a49189b2c377785c8db9bdfbca05836f6929b00d69f93885c8cdc864942fdce9410c123fc24b8458d96b68b7cc443f6ab984a5be5262c05a8ead2414bb4e47a1fcc44a58c25f15436e47d2d4f888965589eb777a0de3a1a46a795dc7c2857995a72784ce3d23f03644684e12f916a765647d06776427ae43dbde4bf2044b7af29b403e96729d543a945806302833489c42ba15a7c3484e189e67c7107e40617d52935c113b6a885130c3f3e12723f4ee6b3bb9224fc1b5c45e994a4c0d33741b3ed1e62b99b8412a092d6a85a915d5ab8612076467f6774ded546dab09663108c43bb9d4b9a34e83854fbe646f8c2e2a8336695bcda9f6d6c1c32555163860687aa7122d8138c2948c4453c9d73198d36a6f4a682f238b71a53c792fc58ee325e3929a213c0fce421d866de200111544050cba9369ac61017ce44060a19e057353bcde2f8db72a3dce55f27743c7161a2aa241a1861e8c62d0a845089a4e3753b8b1fceefa52481bb03084f37be66e27460c24fae51d26b0a2c0b5cadd0283838f7d26ccb511c51581702a37855094254dcd86f380492c123aa09516ab09a88026b28ea61e9c8217254e99fe5465be1ec8e26b0bf669a02989e46b0e8fc0c29670fee79f3351ee0721873c9361067bcf18a7c9177818d0c51917ddbbb8d9459f39d104abb9955f6879e76437f80d260042d920f111ee6970259f4a45c9e41e801d18dc66f25223f39d1411a563dd7f8b890c726f2d7d46bada7ee21792089a88ba8df2888d0c7d519f921a76babc07841f98da1882fcd4717b3db155bcb34b335bafd13b7ef7c8f098eb4282493de972f8696dfa8351f399d4df9ba2bfc4a90ad97636ca1929e0985cd204813faa799abc75a204ebcbc2c13d085c8fdd1aeb4aefc829e2db58f243c048713b7544b1ec46c5ec5c12c6f81f666989dc9337ce052d3db430ae38bdaec624a3c61c4053d94e2a00b07083fdf1030ac2113ce2a978c434bae3d20f707a255708f4b22d67d65ac565414f31e8af54fd4a499ef22ae3f471255a9db67caded9dd5d997bee39603ed1add0b23c030aefb9fc9628aa196a5d7cd82e55190570f3461b098316f641849f5f6e14c255218cfbdf0b704111c487f8c13237f89bfb8530d52b88337e8caf7436c099eb3c108b856a0fe7e08c8ce941e8a85a18241c5d0716399b7541dfa18c01764b246ac64da1f9193083dee96197edac74922214cd79918098f6656a1a36d8f241d80d0c576c468071f89ea072bb8ce9ba179f1e746986109e659f58669fab1888ee5c9730d4af6299b78c886aed71d133c1a512404f8f7f13a79636f3a93c1c1ab1b979cf1ddc59830ea974561cb5162b39586957c250dd97325c033a3501643fe6635464e7bd59f8058b01e5e4dbe9876da7212e3854676981d357cd9a0aee68b2d55e4ab1bc7443b5a3ecaea210a3bfde247d014dbe1e918b4f323c3d611655148e354ca840b3bff38c53f974a59ad0f3db00eb83cf2fb5577468a072358efb7a844c91c8158f39d2ee67147881eb900c050ffc21c62aec7ae046462b5c43e62b2c47f287d19433e8a9553fb997e1add17a628d2cb3142768b264161c49946610317d2a1e964601b185763aa3dc4557052143278ff1d64ca1fbd132f271e348bb7544f241fa7647625f38e5bcecda492b4982d8b739eddb33509a608ad26173a3e664670db4493989c2200de74333eee13b14e86bc87f1b4e2f3ab1c3789a8afab032c1823496eddb6c7ade883eb0633acf514d6c3b81aaa4fd7f5dd43ab5f402e2ca92cc8d2ef3c983d6082e1576faa4005b0a5ba0f8d35b4cded71cb6e3bc5cf2fa9e345716888c024d868658cb4dfc09e2ce44addd6c0108e8cc8949a8dc2b5000e6f22a5a30153a3f2c9ecc07fbaedcd0d0f2c96d354b4fb42e4dc7fa3c50db40bed8d1050ff518e154fcdf447fd04e508a7ff8b02fa8414b06deff9fe60c78da3777b0de1aa0314784bcfebce0aca6e7b62f4847853c660896b254b62dfae5790b29534857f565f5586abdad30e6cf7a35fb711fcc6091aa3151eefe735d7fd0c41abbf2cda51d4b1e9b161fb41ecd894cc3ad1a5bb9265390061531621f40d7ecd8b5affb069ae2345c722fd661a03f79341d27967643312e3b6a916bcccb18463f551e83edc29a617de953691067c66e415e8f46dcc45974a95655672996ef7196071f89b6435c6c16370086421d633b7c9ac03593b7773083777b70cac460d19e6cfb3682f86a1f5fe5763be0b9f6e1d11d0c12c6d90e071f9c6ff5b11584b0ba2f1942d9e7cb24e74bbadbda2c6eae77280ac6de3046852e653d98500bf2300777d174feb66eba30b439cd6063756aa016c2102a0aa57496ad98c6fd39d9c6ac14be198405c70ffa3429d724b91a30ec596281e8c39e8b9b199b13e7c961405c5212af3a9676f01a19c8753a4fe53d6383f7809187679c6172b3ad2734d2f4952b57eb34a2d01d8667d84a663d220bce34f8e82023761166d5b11cd05481d82ca1708989ac0015fbfab754886118f142999dbe468031bb738da26582a84cce8825b672663870119d3426695e38b545e1596675567aa74e65511bf211e5486efd3183dc89b5927c213c0fd48a327551411f06da7283dfc90400d2bbb24995a2e296922066a63ce1a8962e651598e1a55564adb3436f5748e6cbc10750a80c4425054b00f88a145c4c6906cdbb4f050024d03b96d2c9ec99d98bbe3ff7b9ee4989e9cfd12a0715ee4b859330c8abe70102f9cbf01ee19acfd4913d5d894958be165923021033f6e2fe6a228c734056e904a223ef08422b4f18a379815d790813aa9309d09026d5d54892e13f5d9663a064708efef1187852aaacca479d83e7d13685f03f0b0182c95ce1ecc9698cb1f93fd17dd057471f43569a5ad416424b3c931c6fad30e43fbdb603df65f66acb52e4b0495c0d925bd405b45c78b7e484f272330823e570e6e218550ef3f944435540971987a8c9afc51071a2fd92bec40e14964c2cfa9c473b3d0ec39afe57e9500c59d14c04e756ad841143250653811a64c16c389e64160a3d6a3edd38b4d25c85a26b8d3b6e22ddceea18a3ade94166c787a536d4e0b1c51ea49f326dd56d8e258b1db41e2a4b0129b4e267d4851eee252f18fd2d506261cdeb414728d8c6cb1de18112c32dc26c37fd471adf67594c8c127ce520870ace28444dd585b6a3d7c4e3fa409462a07d5bcee0aecfb4083679df0ce9841c42572392b6eef2c53f2cc1ba148cbc76d4dd7bfa30509b7df61317fd311c2fba7fcd0ff2a07db6ccb8f8bd36af0f473c0ac864cd568f22f294fa31719b8cabf3e6ea22ffa37e76559b67bc37efe319b067860e4580f43d5a5cd8e0c3b3820bcdb0e833610ee713a098ff79b08fc98e1b86a6f5f80db8deaeba2bb732153d3155cf0fee8c11d4b2c94d5cf195cf623e3413281ed4422a98227a3f2fafe44052f81325c429405b6f35322a3c9169e14442a90daa4d61d73026a6e34854dd60a71568f32f5e0f03e319af1dd4c0ab186ca236e80173f987984a7880e41d020f2d8254d0d5f120b030e536c96208c9ea3a7a5c59287044730bd73c4dbf5500a7bd1184c3f4259d1c2bab9e4dbb2280d56fbf8394d1edee8a2ceca92ab0a542927c905bb8a4afba1405e6c9755d1aa34c0fd73a008f6cccd3f8a076378e6c0788b319f46af28b40800d627b3de38f14babf90af55c2acc8dc653fb9ece4003c189eaa622ee21a05b33252fd0039178ab52f80e5af402ebea583a30be663f8241e493428a71adc0659a29ae949228f65d13dadd1be4710d2857cdd676e3459082f2e42f183f4231178211b1560821953f3c94939607eb2b35c80b2c61480f0ee318b3f3ce4f522cc02327142e62a339df8bdc8f6329bdbb9bc29c0099aeb4efb27f854592abc89ad72b687b9412ec165230deeb010ca182b0f51038e1762022ba231b73f816ca0ff0a77239283821206d34f6cb8a719458102a8b6024a0012485eedd0ef78ab131bf79651c0f9df2487690f5eb97ad211603e19f467d57b8568491fda51bb4f8699acb32d42f5c7f35d10f0dac7bb9253e7254f0e6cc7bf81c8f5785aad50606e90b7b3e2b3d0b937643eb53b066af29012458f955ea910240246020954b921378714c8063f431db6d5c0399b82afd220032457c90f406cd3ec8c2826ed9b88c660dfd4c5090cd710009ab72848e17596263d23d2a3f7dcd9cc8edcc546ce8448384aa4fdfd3d94757027e5a88de8d5fc4222f930b0b97807cdee4e51bd1326656f14cec20364a1022453d9573ad7752b241b6561689f4d92298cb29a8cc96c67af29ba0611d4ebe6b0c484959a2c6a2a8066846d6635625793145e2d0aba122b17e4d78a9ca4225839489ed5ec64282c2eeba14bb03272300fb963abe01ed3bf6666f2a6a55fa6e74c1a04aa9d6c92135b99a79e9583a99600f1eff05ac5da947178e101f372fb93f7702e4fa329ccd8b2a13f93c7cf1dd508487df5cc21dac056e0b2d111a25faf400ee4b46446d79c5139224c10dc3e1fa26fc5513a00631c1c53412c2e233d998cebcd67f76fcd2e8fbb64e0f520a782fdab232ff72d5f4e85bc933a00918751d876d02ec2d5f5cb2576f195c6841ca99aa7b9f37afea3128dde9c8577221213f767917fc936525961be74726a8b7601ee7145abb60187347b57ab49b3337b5c4ac450c04a6d5bd1a997c1c9c394d0f38a9c00a64e9636cd103fbf4c2a1b6b2a6d7fc7b584077450e7c5efd51e1c66777ac5aa07848a9eadf37501c49a2174ffb429a88bb5a50ffde4c34edbd3f0b97fb2b9f177c7b81903b6b49f15f0c1bddb2ae937facd31915e0250f7373e17302550f9bc9146555546be7c781d27491fd7fd4d14bda5ec151d2372fe1725ba3e43dd09c909160bb4a8e84872d3d6991b78dd650c6455c10535e3d0220b3cf736a6f3f022d0cfd8b877159767a81ab7a3e6dfb79bfa4e804f652c05b649412a33efcb7fb23018c673d43611f0cb586ac82a6ed383c115a7527b02ff4757e4114fcbc0fdcc26c37ad59999a831bea1ffcbdbea917df8fc908e7e72cda3d068e04a14e812472b4ca346f015cfa0a1286c883a054346405aabb9998a9902e37f602cc7605f40e472188307c161b1a32ca6cac84625bd2734277632992181ea3b09f3aa5cb0b2fa714189c1d57b4e60902569ec11d978af3702a8d7d48bd99d72ee40064b99d4baa8f223c49c95c406150c7123980dd48e2758742bd8ac7bbbda90b68ee6ed22f2323183e725050a3c1ae3731f341be101e8ab849df99e59028fa57b3b808d4a2b6c4b743be898b05f2bb671d11b0921f9c0fec0ef6035dbf950f16799d49ecc54f1223532843b827d47b110e47e47af2dd75dcd56df4d28fc1d1988bca1c2cb73e4bf47154443dd5f5ef17778c21c978085496890093fa89195ee6bf3024f83e88550d99e2af87838650bc2c6b775366868de998e09eb02899200a43f87ac236b973a2d4b47aa0726aa328137b649b67514d904d93cbfbf0a7eae2e3da2a35d10b53e1977ad68439ea4b5f165bef7d14e50562e0a93cceb7b860702927d0feb80c8abe8073d493acb03aa15187c664a080f0cc9fdf32214707d1565ff782d15ccfe0a32c067b041e8d4ab7d4e644bd41ff1e86880a37558af6eb2baf07bf29c1f8a8cc98bcabc98a744be023815b5acbe673482a2d375972cc2c1d9293f70f49af8d5703d2ce40be75b7dcb1ff5ef658458b6f804f308e5ad2847587fba95c098e60022d0a2245f8076bc58a40a2ba47e193a92d094599c36234e92ddb12ae2b15e3ad921fecae555656082446154fccc3f10edc02db0ea6f86d552221d9c93d9b6ef90ad48bd06b53cc670fddee6a49f4bd85ca8a4fbed9292d5db499b5c1d27abbc2f6c5b8874c848c5d4ede215819a8625a557d8ededeba7c9e38ff0ecaed961b0df11cc5b7983880e56e821ff091e53e21cc4c70d8977c434a62a348ddbf02633697194304f99a2378d4d6da385c790b81640b7f86e42055e5c0f2bbfa2fbb5f2a6ee2b8a00de634ede1ab72d19fc3d397313d7ad8cf6ac39d2a43c01c4bccc81ecd7a5076e9d85b4701fa2817ac2faf709e1be03b3587ba7ffa42f78fa3ca82506c808d9a6837c7990489b96cfcfc18ddbb3331881229b94b49bef424eee384ab4a274b138f17b2a5e3f4fc94ca7a415efb53f62d885b08a389129d04f3c0d0c3f37a16b69ec886a108351239276a1cbaa1a5dc6b0f4a8c28979e1b6dd039ed0e1762e92690b05d53f5280dd7c1dfad387e09963fc214b639df80c89ab5aae8f0b958f396c1eeadac976b4b1958b2aabddd0f682f3b87e24f6131a1ed2bf10227889604ddd2e15187a8a3f3f429d39812f28190d2a7130bcccffed5ca5d8ad08bcbe583ead3709e7e8d4c57201f699603fa5fbe89557cc5e3502ebaefc5edfc5da153be7a0f8a440da5c33e913d03650296960ef2c47eae0ba9e66d5f50503391911a20008c03dec44a8e0f6727db6d99b01e87d672824f53a1395757a0d9f04d34717b0b240b0538eb9d65b38c4f39bc7590e72dc96c7df99061070a15f5aeade076cf85972b948560cf4b29be8f2ef4276f9b0bfb4bca83605d167aee92be7bbc2ea5643bed7734a26d321ae90efb760375b12c561901be56b7355402228987926c8777af62b243be71f04a280ac23d76c818f7326b2ffdbf02798b7a902ab58cce3e2b016fbf201ed1939c35f6c121812bd4c1b1e3308775af31cff4d58da5a7ba08acd5db650adbd6ddab595af28e3f1fe80abfcb1fdd20cef5ee283c168e49058f1a5ee25a0e22350527cdc8325b80bb6b173b6c8e81d1346f138c50eaf0c02cb261368279c5e457b56677a44e287b43d536a180211a80306ce7523da49cea9b99ded73839f50e9e5973ef43867125ecaa9f7e3bc0a206153f23f334ad77cadd7b46a43959ded57b440886e7974e460e4c3d836c1457a0e1c0e20a1d4bd0786ad3a2e78a7e5aa1cd74fc67108db30f7dd0a8e9d716593db5f988ad7a38db85cdaf728305b95ed2eb06dee180b13844d840b5a29d8dda5393f8d458f3d9822ed5f754e40c6194e3cf47804d95c47ef05dea4d8831e42e363fb29113ea3eec3aaa8b4967b366abcd806a7375843e958c6533324a1cbe765b76757a8feb7922c318511b5634b581e95da8f7456b82070e3166a54ff1deb2a54bf34a55ebee8012f70250f8c8fe21418a8b35b00ce8350ea03c194dcd0842e4a6466535b94d8cc31c0dbd69527e98171fe8aeff59388953279570541ce367d35cb16f3b86926dbd899c55a046c984e668de92cc7aaca4af2848840a915d20e2cb02347e05ca1c83d90a990b18acd75d3e12e783866ca2a75856e170cb9552d1654b032cfb8db8b531a1d08098638a8e1af9c3b2c38080f3305c09900ddc6e53f01dd42b0cf73783ab9446c926caa41716b15dbb3ab8cf4a4ea75051d59152fa2ab3e0e1cedf418011fafaecd30b8b1f028fffe8387cd89b3053c1a25ab6b86ae508aa1bfe0c1fdd7578ffe68628c81f5ecfa1e038501fea1b6d7ceebf59c6325c3df7471c5c5023117c8e58ad9e311838db19c38bf5d96b687a233a78d89bd4c0e411d29363bb187c73dc3d7a7296b313b2958608b88875cf5048943f8a884393de8b21ea1b6a2b9518e3601c52038ea9cad2c2a708185b2d073e616a03ae605542c9e948fbd984922859deb02aa5b462180581e159d5ab81b0b71f0d68b753e03d1ffdeed116a5b0427cd91d014b91da628c5b749c2d339353c8206f23b257f4ef57d6470287a07257b4df31045a212e1ac2868762730651c5b3ac1a6fbdc0c55103d270e6675ee97d7324a29370ab1a8b99f5a80f9f00c4bda683bca53bc4fd8b0af07dba293ec80e13845823a610e810c91dd90957b7dee7046a51e8c5a03f30aaa766e088e82b06c9798a590d6623fdb5460c66550f80507a8b686caa423a0b4044ad52ba492945b03cc12a72a1728eb1b3e41f6245b8666cac0278527a5e04574845a1972eae89332c26072e1d2f97aedc4a487be9e846f26ed3f14ab84d9d57c455a37ea93273206132b9626fc55693844d56d9e5e74384c74eb154efcdb7130fdc434321418cbc52d9e994d536dd35ed92b002a0c79f8e6bfccb690845a10d4cecbd88e01d1a7b34074a0ea1385c6e604e6f0b09ebaffaae6b049e761db7144b38820b3643e30c5627444dbd59e80e70a6530842f3e8fff92c0aa4cea7b0187cc14fc1baaec0aa5226d417c22d0153a92b74c6cdf7f35dc403bb7635f108e848410223eba93ed2e1d45a826338a3a18b6c70934aead4a7dad9811845c6ac725192e7519100cdcb31cd559ae61d0955c34199bd2a09eaa46516af00e2d79deeab60dea3456905a0c904a9c6c33ee2e2b7ec28fbfbe5bb2a99e07ab35b57f4ab06975e72d7ded1afa08d3c3e6b937aa0da4ca8b6b114b8996bc961d8cd00b73aeb70261f128c4c64376f23b23d5e92d4b0522285fad29758f083239e7dd4612da12e40a397db41badccfc310ca0f0e401ff84cb9e3382f057863231697d09c5fda63e5045f5a3a2276b46e70690807c91de0e31ce58e294b6b20f346c665c7cb9014094358c5b34345cf92669ff168fc36812814ddc547cafa82f755f01ea581f4b835a41b08c1431b2d1502ec184bf924bcde5377cfb5cf564e3ecd869dbe9bfd02b10fc4e950b8973e34812e7db93745827340ebd6e163d208917ae9c1222bc03582d144ef6850114a13691dd77f08564d470c950f604221ff52c1c04905911d95885b35418ca8b5977af6a406bdbbfd7e88c2cb73616cd5a6939be2b4aedf5f9c118060207c3cd7d1370b541b8d7363a43806470a845849bb09598219fab95be1824e1efeab1d96015720d65d16993fbaa6f973ac9fcc88c4e80906cd6245ecf18a839f0a0198fee4fdd2d196a361becd140edc8809c31349e646d7c3cb5f467e4a914fe80437515d0bace7374451d7d619bca32a23e79613e2b54967bc3e4eb1584816a6890211b747c9d062492f2ed55ac3ac45f81923d377c37080def979d4a208a46f1ce18565d41ca7b021209368b202fd92297e9a9d8320f8452bc77dea3f4288003d7f80b251b11e9496eeb1f0ae6f516577d4f6644b89e406527bcc80f464c4d8256cfb4236955831921b9117a2d21027537b501892be70825965b882d35a9f2912bbde0a1ba67fe3516b1fdd0a6d92db8182a528d4c348032816ea0371325094d015299f2010c4fc38e365e256d6a3cb19051de08a53d72ab80c9eae46572ae1171aa31b209136ba2524625e0685c3e9259bdaa5986bf656a11b5a560cb414356c7667b6ea73a494e9520e16bd086f4d2cea57507e8c8b1e066927042561a0e8ae73d554e9ce0ee6305451c1cda211f2d77e35f7882472a3eb61f9588c55971abec1377c56010fd108bb49cbb7590245565dc14b798c9e3e610ea60e1ca1470843a924dd4f6368cc655a347cc96b88b4c30c700cfe6d8125b4e8232d2d2432e6b65d3b8dbd5d18daba5e1931fffe03a539a92ef589f479062c14a36e206f5f9d47d8524f18bd68893166cc9eda46dfe5002b0c1de2eeb3b29628e27e8a7a54b8910e797189326d1f3730a21a98a6b2617841fb67dfc053e877aa21f5b050a7096e93fcdc615b81b3d3f173413c0b92fe19da59677cb9225b9035d39d3c5ecf95249b0988d36e2ce13221dc3cc452554ea9010226d7c42ced10a916d4e6aba8aa164a05e1a9897754afa61a82d6d5c49a09d6f95af55f1b57eb91109cd307e60e7c3c8880b6ab0e23418a8736756b3ee1f6d78640ceb66f4a4fabea81828690f9ce1c79ec242db85db7b1de5b42ed2684b160b96e226d188dcfbc905a4e16574028d285eb8adb8c2fc28c05cb7248e8b64ce0ad84102b1198d08079b112e9f62a3289350389fd8028fb8c4d981f7fc5975684a4e0532392f3bb25c019458d2bce46537413502c55d7f2a6a3324bc8e746966d5534fb3570149897734bd44948970325ffd5de0417222a38e270e2e12aef61b5995030f1087b48a73fc6595f4c68d29fd2e6e77d1842b6d950d403388238771acce11807b6d36c737766cedc72a1b5e10ac70e07633e0d6dd67ee1ba296747507ea5b934621b05c1be8d75d92c799b1b5e3a1c54426a4a2a31ad9ae0d2cdfbc0ad6f2289b383035aa6ab1c72ba5235375e788fbacd44f4e1efdd4458aa91ccd0dc470a96ea4853a8cf3b540ed9a1e60a298126bb71fd95cc5d7c0a32ad028fc3cccf4dfa94415049ae90733b220ff5674be3c00252721274933a73a008600b2ba33c0142d6f496a6f689d1e2b6368f9c55c9ea2b7375c2678ad353d450b5a3d3e0f71ac10888d99f24924e332a7aef03b98b413ad994aa6cbf78c5a023a5c42fe6d59d845341cb0eb1fd02fdece3b3ffff4c166419ca1c00c96f47660bb1dd8e2772f0318c0b724fa0b1888f26f33c2ac9fe15a9a6925be3231cee8337fcde841530f5e0b19615c1867bd2aaab8eb2470d5c6291151cf9fefeae0f657c2916d5ee80b2d0259313f481ed0835c2b20e49cba9ebd4e441cd406a601d9f6105a509ea9e063c3d0c06dd0f1f47bc2178f326b7d8669bdd41894897b5bfa539ea896131da273c36dc30c54f3a52734335fe2226c4510f3032f810ce0d796f8aab3020c7695bbe7448aa2d06b797b48df47efb77f8247252874f390600b5db3970ae9dabb19a1f81ac35add88370ad3b20760f60fb3607582218634fddda4c07ae7b1aac74598bf45c9bfbb8dddd93e30a374696e0ac14c676fedb4bb609478254e1b446f63293d3ddcbeea537235bcdf7cfd4cca3e52e3e55fa6da1f96691e39aa1782a0610f403024c1c54eba3b50f5b5cf8407bac9e1e165ce2584a5d54039f680d7db65360e9d4e552b11a3947feb021c807c63c8215dd0dc94598060a2df1545bc30fc98023faac7c279630458726bf5998fa08ec2ec1a8c2a22b021147fef48efbf74d308163254d7e036a0bb50886b63ce5cdec639dd36b35468a22ad9bbc13cc176310b30c9f16628bf6e2e2ef541c3de95af069f78aaa3c20b443db31b9caf5a6a8af3793fbeb5d282b3125ef085b9dfd7b0c82375c00739e313c43bdfc63fbdf59ff441c735512dd5f2e63e43877909bc50f4e8ee6d6d8d98cd47d40825324c39166bfb8ffba081ccca200a4625ae43587e8f4d6c01de1ff9870f066ba35e894ae943a9dcc64cb41b60f08e5fc0dff58a2279eae05af4c2ca0bfca909124168407203700fdc272719a154b8431024f5ff170bbf0b195fc41273938ffae7724a481e14d2ce833ff3f3a6746594a55028a99d201c909c7b1e4e62c6b270bc7a8f8a779f05326d295a89743f5cfcc28039aaf780ae3c1f86abdf292bb9eb8187a6a6a7c704384d13ee223bcde7c3226ecd09ca24e7375018d8aa7d3a154b26a683ed7dfc9f53b8bdb7602b7f8e0dc96a70f88a2ac5a5ca628c32af57a91ae2c2448411b642bf175012eab5348df7191dbb74d069856023036ed5ac0a153f078ff73cfbe96600a1fc997c1ce1b9b7ebab99db184230e64e3ff10aedd65fd82bc327d359238faefa74cbd3db35847633f74d1f4c53bcb5c8bd9439750c9ef96877cbe5aa4bc1cc779887afc626b6b3417000abdf56c9d35cd6fa95da8c338114036c7bfb9ccba9705053c19aa4817bc161e58c4fcbc9dea6b0d1347945f6a72eb8be31d05fd62ee195b829229e27deb2486c45a4926e6a3211c07324005d8fa8b75c48ad81973ff14ceba4e9d095e6ace1f23bbb8b58f927eb4553c5abe46cb61557dc12d27f2810ac283cdaa6dc6e20b4a45a16a555e5cb883e06072c2d05c88b415c120689968e257a657230cdf71cb69c711bfffb0ef8f74e23f1775896e7ca1ffd84b44d383a0fa0b65c4da56b12e4b1f12e8c899fb7ff95eb0282d73ee71d0a0f13b4d480b8ec19003e096046caf51620a02a4b5c533713e32ba049ce7972533c0bf4209327461d36c32409943250da31ff6db04dbd21ec8fc16c95dc4519c3657100f0254ccf327bcf2863e6cbaaa92d901f09e0ec6511104f747f20d1a1e2ad9654cd883b748f07bcf77307776bdf20e0423d99cc23dc9cec0e57e7113026f4e2c64f398f38c7a137c11d36cf883b5939ae1d9df9803b22a33c6f58772a93ca1421ba1f72b7338b5318d37075408197e3d3e297f467c921e5099c9c3809a03d3bd83de69d13abb8722292b52423b9faac22e6a0b70437ef956d3009f8e291b5f51ad33dbdc32fbd842c5b5e0f5b8976fe0761017f68359c109e8cdb4027b93856d22600f7fcc37931e632bb977ef249618d218dc49cc96dfa1a8b2f3f593b217f7d0ef8a54898fc9ccaefcc0355a51ce418f2e20b45c53a64809d1703e4b199136e9666ddb007b1c9e09cb41f0c55324d3dab9daccb02e44ee63107d664e8e943104f74905000e12dbc1500d5ec8b7c6219600fa75cbe56c1425eb60a034d6d09b359a4ae9a383dc59de7490a9d62f8c6d22346168e6ef3188bc9b489dbffe1bc5121e41c2a74b7558069f6f9ed4418890b795d67cf113045ca7c962d18a657606e034b23a6c3197c8cb2d77a6b88ba32f394910a80782855718e0df4f93110882be085e67f426dbcb5e5099f72b605c77c4b8e893489658a57e50927c5283cedb752ff9ad0483ea5d0bc1a1cabe3e355b01b56f4e299bd8f351bd7903057c0b8afd044a9a6a117321d9f99b1a2bc602ecc6fc21d43913d69cef9371a0e0d7e48a57363bea7cfe67027cba0786016c23971d7c052232540b36bf6721bdd532eccbe2d1a44b6fbf790efceaf8cfef7bd70a08914e26333c19d5f465a856f34447a0d3bf987047b77568be37bc10077735b1d23c70784dc4ba9b6b3c3053a5158232f9737f59503e388e9ddf7c18fb77667a578909ed10b85a1847e981012143e0b12423d2029fb1ad475dc832011fe1b2383eb68f39ed497132c561e29c59e266a71dc6b423e2c6d11decb449c58d6b36d893b4c61431e2373c31d41b26bbd54044f465a0798138a534f1a10eb8884a812ec4792cb21f0858ff204bbef545def5dfbec17741a0b81ea8d0db1251f50ce04044816132727f809819d6b27470ca04056360c303304bd1de1815993d6fc7d7c52626e88bd661e22aab11902a4e298344e18321d4ca82cb453e4870413e282bc0d0014ba2e0bb8335d9bc5ab0205d151260f59807ac5788722e6f3375d753100d1ec8bb123862f4571a3d2761349e767dc5efbc3ba5c30551691da1d181f82284a1d2a10523107240dd8be6c68fdd074eb27490050f30df1a9bdd8258de15bf0cd03a904b4760d4245fdb89670bfdaf0b12c905b4c44e25d3a5e09996b00c7f721ea2a4c04ddc22dc6da33ed1c9078daf14debd45f18da896a8fb58a6ff013478035a236b9a5420dcd9241d91d0f0029189fb66e2113c578d097e16db3421d9509a7dd9453cbdb7aae7549dad2ac4c18ea8955501340000442449d4c16b5d7c7485cfc9c5e9f7ab4da7b6b131befdd63621646f42f626646fb9776a093f0a4b0953141c9f21c9d8e967fa99e1cdc736eaed1b8ee64f57904732acb4bb820c2a6434a1a80942fb2fd86dfa8990dd9b30c725ab89171a5037b35d6334bfc995d7645ad2db9c57e0142ac209daf0a879ba5b09c6bb91288653ae20b3e38552c260b797a5f933cb2c956c608db379cef580dfeee01b4ee84ad0b91ce09d16dff1d15d63504d545152c6962df1d0016de14a6f733a806eb4f9ce3dba1bb9146f0fd43175bf824a4b0145cf1188055eb1220a9325cc85c708bae28914497a5e9687458a154d98b82e8e4b95a066d68163cbb484ff82ae7822454c127bb2609162056c029974e15225888a27ac849368c93245ca6b524697667656aa346761f9ba1ca58cadd86d47bbc71d37dab1153bb90823c474b81ceef4510eb29cf8b1f96e46b02450e76213b149195dac54a9820af803956cd142650a14dc441957ac44a9e2fd8c91e3c30ccdc2be1b9f7b6e5ac207ecfb9600ca25b705eb4e99a18b910f9bdd8d10422ce626369f9baf0a1e15d4cdf0161e971e84118bb9991a1e36bc9b3ce38c33cae838f9891df9788f3233383a026161a5371ecd376018c418473e76931642085d8f30242529f9ccb0db5bca110e79f999d288244351142575b00bee73031878228df8ba35d86d3422c9c418edebe24d4e6237dbd132cd164724a681354ed3141fb55ca22820af0cbb919a2231cd56653e53aaa73e621af99e7c94153ae1e47848c18b036f0ccb3bb12e896f4c1297a61b7169cef999f8f9f96a9986b9aa7404d16934621ea9c16eff4c69fe51d4a5b4a7630d54b6d024065bd00296a6ecf841ec05f601d405d60675336c20c191096bdc8869a608e8145f17bbd99ea6936611f10d7683cdaec7c3a1dc33001ac4f50bc2fd18897d770aa0b69e513d40ddf5da60e3e3e70fd4cd64a1899e690784c596a6af4eda6b00fc0c1b7313a78b335d27d39dcc3b998a8f8c2a499af4162d13a8e32f5807a48520a6e205eb80b4f0d3db8c5a480206bbcd2b3abe66a14ac7f809b7cbddd79b61a7471dc4509fa8ea5c8f38ab0adb7112ecfbfc36a16583af20366c58b675de18fdd679587a3e1d1809adcef5e079ebf4a2266c8a5975aec7d46eba7518adbbbdebfa61fa0eed2e21d337ee203bf4bc3a3bf43cb5d5b91eee590c23a602ee2294bc8eba42a61b99d282e7b4a4bf54d241b358e6f30fe459f1cf46e2bf2ef2dcc5f1d3d2fcce58b8e669e11bfcf7f8f3f26d8e60be91aabfc368d5475af5b4d4333dff71611a2960cdcb193bff61119dffa23c2bb8e625816f0af347df668faee31b52bc5cc737ac4f0a84d2d46f42f44644c3d3ef349480eb874d94aaa2ec5eb70dff8edd3ef41fccd3218b1d6232d34b026b807037f83ca7bd4eebe305a452ec9876332cbdeee81dbe6aaf215f5e40465c627a4a6192e657da167b7b51b6115f6966ee010f4cf3de0de24ac0343113a8c00d01d34cb7da11d73c1bfe080b2e74bc1b29c4758a2bbaa8a2a9c708a13e9ddae610ea15f79bdaf6cee879465792faf4a9652d3537dd19246b1ef99e12284b61b7daef09f6dd85e8d3c216c2f0b2e8826d62dfcf97e73d1d681022d8f70a502682e5d37efdde5f06e905e441f71e04c0cfb0f0d55fbf2a4eda6459d683b8b6ced395b67db32f04d559563cfd643c15e3ad50236dce4acf178fc890a830dac00430f4e0093b8822c8461ef105254a08bac1135b44610a567870597932809f0c06bde082573b202ca85059686fb50b5d6817b654582c81454f15b2764058e0e22e1f50f82031cde6b0a06f19a661fb5e7dafbede5db1566b7a53e3681d0b55c857da8331c607998fe769a859d66b8db06ab442794b52fc98c477eec17883381c3a76f0609a98c79106c771c9093fb0f3dbacb6291dfc033bbd3b2a335d23c337aa6bb11376d3611f29559f46c5dc8ccee7bb893e3a4fff602c40d13bda015db1a5a9ac7208cccb61ce43df9c524ac95a556f69f41366f417eb22eb98363dd3b0d3574b5c636798c6cadbdbb6f694ab25824bf13b5c8a19e8c26eae4acb6f8e4bc703713d5ef12180f00242dd9820d26a988669a1bbeb611a4f87dc954d8886252ec55b2519609ae91104212801d360afaacc68b9e484d5b18307d33c8a866f10d7efd1f5ab00d3c4bc3b8550379e8a3c42e47537e646de9d87a3b07386695ccb747c719b89a26739e1ca68c436b09b9bd2b1f2e003d3c0c74f60c4f13b7c30cdac8fb7f21b0e4b92b5238f8e52dcf45b5ae41275c5154db956d4279db4d1bb6b170495b8d20968076485274db3d79592f1d44e539fe0a5f6389e4bd474b79cbaedf4e69e539bbff1344ffcce208581605fbf21af1f1556685285a02af434a5a34d053c0d73d24931af711a774c83c30180635f6f6f9d5aede59696bd572e5d8f43162a54e98d44854bc393a86c697899ece5d9a9eb877a6b6f695b6d4b64896ecc8bb5cf6e61a7da16babb04622eb21a767751e0758c3d767f86b5b71e4f5d435e5e6fb56da7eda96b88f50ce39a18d1ebdd627e081d8b11dd9bd0755cc25cef74b6854ef9f03ae62ff767d87a736abcbb7e88397671622eba3838bce6d4ae37a776ccb570b83b00b42d368dc34bc87b3d5f3738dcc825d27d8d1bb944231b92dded35cc10985fffc130da66a4afecf5b46ab0afebef1ab2d9d710340661bf6bc896ddbe5ed830772ba2af21dcd7ad21d96d0a1abbdbf41dd8d716b964dd1addd1a78ffe832d6d74b7d756ad96567fc6f4faa9edbcb682cc5b07828d11f2dafeb57d7671e88db979d9ddaca638f495d5f6951594348e764055c0d2f45d43e8ab4aa356c3de2b202a4ce9eaf499b6ed74f672c73532cf5eee363b9b5db3d7cb688e6fd4eb99b6e5544c2bf2da3e5e37dcf6d5abbbd15bab61effac1315f3dd88b3dd342afda56bb1e5e37d943dc55dbea2576ab65b772e9fa0fc62e0efddbeacda94d6f75f71fd0b6d43652bc804c47726a177937308d0357367420c6f8def4def498b903cc714bfcd97662641299884be24f642232894c9850e79c638215f79c7b6ebafbf4a739e7d8398eee6f46372d41dd0c9528af420b85c42ea589aa73f51a1fefb4c36f06538c57900ebc19c40b084799cb90d5328ddadc15790179337839d00ef019c8442f207c6714d6ba4ab834df0c5e4e552f306eeeca150ec2d4e61f18769b9d531b4ed3e37b8fa7b0f1530eb57df41bc508b9388eb5e9efe6d48ee707e1a371de192641dd8c7bed98860f798bdd7268fe679886929666f9c67b1dcdf918a9a83d2553f6dc8ccc58012132efb834e7a5d4a4e5c4fa0f6869cfc1bbd59e0caf204507d3bcdb1db38ea464d3dd7835ffcb9cece89d8db03ea48e1db74e3218814911a8b0c11947a0d840053cf902092d28710337686103a550823aace5a1053dd77d261becd64752be5094689a4231daeb9c026cd8b03161c71b993c144f2e68a562bb2fac68d7d6691699260776116e1d22dad251014fefe8504dcfd3ccd3916a7a73a88e3e9260bf6e611a4d41530b8a0e8fa6bf6653d4da547aea96b6d14f4f88d44af1a5f55c77cfe598e7f3a5f9886c2ab4ae8ade1c08dbaaac4d8f8fc8e63a76ebcef948326d7ab0eb536db0679693ecfa5036d9e93716b203841973f3b5811d6cb05a3bb083cd759d53c0e65c0e7ab7eaf03cbd8a11f25afeb52cc21d6f04f2503c8dc13d8654e4c8912ac29c73ce1ba9bbff6e123eb65e7537ea8fd231d27c9dd74c3d8e4164c973454f97f29394a71ee50d75794ae3e428a9bbc30ddf30e9a5558aa228a5e6b445cbaaaaaab2a84fd75645e9c0c9a22c586197655593525c9961ad9e402fcdb228d8968643847e9a9c0d9d0eabea55ada7eec0a6f472a2e8e55b944559947575def3d4dd28654d8788b6a83559f23ae98152d1a9c6ca67daf8581b2816945a7628328001d44a494dab766a4e929a228cfc1ec30cbbaa59ad8a9254569435653d502c9f192bd7db73fae8edf121d9c04a0c4a6bd5e61ca2e5e5e9d4948643a4ba65399bcaa25a0fdd815d559f96d6d3d3d343ef03653edbd47da01021357575de5c7dbad621a2a9e66c2a3e45adbb03a739492a4e3042e6f72c8b7a83d532c3aa6b562aad6aaaa4006ce671b0a1b78756b7e5346a273df5f4fa906c9c5380d5d575d2435faf8fb5913cd1674dcd56141ec3385192b6602ba229b943533073c24c494d8aa22e2525298aa2ce97da4651f3ee40aa6553b2eaeaae8259579761537a9dd4db03853a25efaaeb2ea74b0d4e4de04c8f9f6e9c5252d434c50827393dc79f34f8cea0f4a23b3e7a6b41cbd7e72409141d08b41475a5e110b14ef5801345361156ada7dee77297a6a4e3a5601dd0174d8ca4807b7aea7da0e8e8e86d2a60de078a0e8f969fb3ab8e91aa399b4bb336ee0a82c377ddd5c59197f2fcaa399b7777e4cd81551521f5a86dde206a33ce1c32afce446d6d99f5ac30ab5e55734e019bd5f2156d69553da5655173b6a4b26745d138b5a4da490f14eb9575de195da4b6931e283bb6abd7eb33dfa3305a77833d8b30bc2cc23d05019b6f847924cf362cc13aa02eb484da017551a51bb0238a75406194d15b75406190d10ea88b29ed3edb01852146d37640618ca1dfebbd007d46b04ada1d684b93767787dbb91ca5d751cabb49bd77e36d344e751cfd3ea96986a37334f05b752d36578fd5e5cd6ef3be1d651b9220d3440763fc82ebb992040c34a9c117cce8024b1529bab08019461801085e800185151c4d8c907560c621f2ba0797b41da6e16fee518bb15de3b8df6d739f3154ec9bfca4b4e3810fc680cfe059424b122e369841186f50220b07be80841a4c91418f185c12508594366c61441552d0600c59509285295c89421267a8019b61060f2acd034379851d914696c4a508142592b8f448251c5df456a2823215e31427c8c3c4091e4421280c577022893b4314276244b1032158f18418ca78e902891b329e008a175d000a030c7ad0a0819e265f1841033150818b202e6246246bc39882c40a65e04116309862139580a103293f5e8892052fb04c9165091d616c628c315ae641d24592265bd8e2042f0441a2084b4c79220d59c2b0895b64e9c980b2281121c4a1952601da017121a561da01710184de4a3fd3f93089dda63b1f07d74cc0dd607885f5b1ed701ba9a938bd6a3154ecfb345d18d86db2db9233ab9da6e96eb11fa4020d500d19174bbca7c517a216a3315091585006e26206cdb4993fd1d0a2764058b0d8a02dc4a0850b32fab929fc701170352eca1d56e8c73cd81dfd2e4319516d0021fc8441c0610a23928577138e01072f6380f278f0017e73527e58ea422b62e842c7f08239b2384a326eb3cd5ba9598716fc6fd1fcc93233544c010b15bd95b2a833a36a49353a18e06a6678d3a11f337c8125c56ba9c96dc104295968f1e182c56707244498a20a3cc052c5119b18868e31c6375c8929c2115148020b5698044911c3963364a1ca169610030b142c41c0e2031fccf8a0674f51bce70e1d3cbeb086e88611fc0e8d07fca64347856ec2db306c6908c3a086866c03e1c45ba6a8cd7009cb13cd8fa42d80b018d12fed80b6e8d252a61f3603d0166728c366b7d8e205a02dbcf0e287cb407a220a32bea0b2832114010c0e0a5e28421219d0800c34f822e70b391c0603808085139e34014916b4b0a19c40a10962080aaae2882436941778cb14d45292d3603712e94061b80274458b952db8506da1c5c47c6e500433b270021bb83031051834e14519a0a821085e1eb8e4c30f92103026901c951f315b2411b3c51318495d0083180368c2175cf4e088178670862d382f962082183e3940624418a853df48a41f300b2a5ea040e2b101192fc881922cc4004517447e60440f18519822a80936719aa6f9695e121790c880b4d881e80ed6d8802206465083132b20e102074b9618c215a400852120b189bc45d6680774250b57a64c2f30183c188c99e95adc71704d0f942a0f4f92f90cd354d7e1e30269ecaa39c92eb34be9ed7169d856d4689077dd6247d9ea8dd00a2e15b18e41295758c932062c23c992269e44991274450bd370a199d603658a8e873f4d018a9e4e87588f77bb539da66b4e22f297c61d2f20d8752e878d9e8514d1f4565021d3e5ddde34d25f97e6e0250446e1d2e8422b34beac1676835530b48269a890e9c228772bf27a56f1dc9525cd9fd78dedf709a4ba3a0f5a01815c0e783a3df7dc3461712b024ee1127439e09760375845c36f504ac3c32a6014a6b18269dc74a4f234e2dcd10a6248e1b420d3ccafe44a1335499b4c2d358e7638b60c349c2975a0e167407069320f4143924c09a8362201616976945369b5ee482d4e776e82f77a910659e071828c34f8e8c08824826ae0b44086962cba18021bc400832935ec8bab891c63dab62531f31d7ff2493cdb5dace33114a89b09ea078001c511a860042d44010b1b9705c90b6220052fc840d263a3c4be9904188e70f1981f16fbb0303f255037c38595524a29e1adb3665d6e2749077d80375ed4018897c33bbd3c63b1f60b63b4edc7f23ec09a09c4d3618644b2d7dd2c157ea754cb3e614d69e6e9c0c3cbe16da439f320639b91ce6e8ecbf152c0a5f712ac79e7e1e9e05c0ed5afbb91e67ddc9b9bc2cd572c9fdb318d7537222f67a6a7572d4688ede9b6a7db03bc91c73eca093ccdda0f44b8a9e16fe2cbe1c5cb5fd105140d6f8ae8f829643abcf13d3eead4d5034f473821536fc86b1ef9a00b28bf4a97867f15548346413241333826171bcb20f57c52d24996b47bdcc241b0a6ea5275090a0a0aaacab096584aaa583d56aa32ac2332242b55482f884b2f62895bd8ed054d35551778836f1db19604ab2ed34fd505d6442c7c83fffe9348559788a5ead21cb3c4322297b825c81b66d132b260d878453f2afd0ea54c3fcc05bbbda118ecd48469b637c1345bc4d27cfef4c3345b5c32a5dff91393888569ce0310ae07bb1eec7a54713db88914ce92e44910e4c2245ae17a70ff70893f5d37377a8ac2257e89890ecb8324c505cd706946a6c7005c0efe266b4a7cc3e9a0b91cf8ee8add2cd3703ba681af42bac2f20eaef9035996d98c08421061074f66555959134d5894312797135a1dd3cc5a1dd3c0cf3f8e960d59d69251eac03e3e9317c7e6509d9d665aec4aa332105a9322314df5f94c63ee39a5b4d7252f99cd9a5933b344a16a2dac4eedd281ad70acdbaaaaae3beb5637876a0b7530d9cc5acb82627d9b547e46cbda2cb3966559cb8a42d5da3ab50c0abd415c63d6661911a290b67d2b41284d40e824886beceefc304dc776059b601d501852b8b6f2114953e9d9b05e3f60cfaea33a877ddabba6be65ed7e391d269703b5d99e0d2f0f7b7db81cf3568a764370b24f9fb7086c0b4406265d55abcdaeb40c0756ba66eaa98c457ad57f70e57a5c23be7aa87efd49a14b4fcfa6675a3abb84c7c860a5b14f3092343cf6eb6ef292ba7ea87e4dd7e33a7579fd507dde5e3dcc57afaad55c5748ae7bf9879d4f2b7b7130aa52cb86fa74dd8cb844fd35ead4b057322e0735047b7d9354f6ec6ef2d72d02fbfabb84c09bead5d511e2f01ba9dfa5ee21b81e58b5c229ecf458c9cf6b02553ce270cc3f6de3233da3c48992b3ba53eae012b5c3e5a07e040b4f518f0c2da87381a623047c4430435859cb993a6a3910ca1ea8d6a1a8e6bf29244ecd87d5b3ead3708280cd7f3707365fd21a359d225cd51ab52290be87c1e43d08c7903dfe790ca921d46b00996415da80274af2129029393909c8b3b29eab5505c0cbb0d805246e74087da490d639a9793dca9a3aaf6b6551252c5a974cb45e4cd4eabec5c34f48fd104fc95341502dafc5f457ad9f16bda3ce5575cb0a7d712574777ea5f4f38b32da7afcfc624bcf57a71c748275406074e9a9051c4062031ac8400b900862880c2081810b0c8104111790525a971613d6babc1b5bc0ba415015f881990859c40f4c506008550413150aae9b089928a242248690c0921b1f820cb1448788204b7a0042c49269031295e0618a11b05162da766c94e81f4a4c1b54621aa970c99c443cc0877beeb9a7430f22768ae8e100f7dc738f474d11eeb1911a7a8aa6013b8cb0a01e7e47bd4eaf4f065c37d7e929453dacaab0ea1279d85d8faa876a7b5fc075531faf80eb86be8e0e737add9d575530b47ef48bfa96534fe57cf69cd1e9e1a915a94751f26ef3d8dda9ebbf3478aae3dea0c33d0ff3466fe879135c377c03ca5361130c2b220149e4c081802292608111042471801b4994e0c61584de5d9cead1ddc7304e94743de61d764a79b6a7231bc7ddb24e9f669d7f58c2f2adbb592f5d42a8f30d0276bd44b80d70dd548f2fc07543bdba9b7573ea47a7a4bc39d547567559af6f1826a535faeb51f51f3cd282a82e8a4979a4004b1060e6c81225b86ee612f3488549cc6944b3c16d1811400b78041000e6e7282813c3c371044762ae202126d9dd0180c375984bec080ccc5fc3c090ae9b48ba8284ee2e0e7d7c3dd76335ae9b7a66292f86699646e3baa18f87b96ee6cdb99e9d2b92faece53a7de8a26ff6a34b39a9494d6a56f452b33ed2b69cebd821bca5bd6331423a0ba2de222cbab42d64afce2ba3e74970ddc41c64482ac44196f1884296a78823b6061976a40648b0ab227947ae9bd8e3823a0f5faf20d6dde18f95c7be51bf6ee6e3adeb463e87febabc3bb0b18be3826b087573e42f7aca7afd569d3afcb1d5a9cbcfbbff80131ebbfefa9241c85b04f63cbfa0dd3684194dbdba3aaf4bcf87e0ba993ddf0b2afca1a60b2aac012c82a5eefea8731849e47d1475eac22a2c3ff44ee003ba03f9655e58691cda017931468341a5f9114973bda84a4d4d333a3591d83b30b4f38280d54b15046c22dc3b1066876b5c3734dbde73b621cc687e10ee1b4f6feeefeec07e972ec87660c71e30b434d60e080c2b4d1d3545c88fc2369ed6911d91b81cee4624cdb75282ba83c1a4dff9488311a51d101852f49635bfeb8c1deca0073d78e2091ff8a07e273635a767bf133b4e4768a28921a2b8995a474e8f21c318276aa2a49c2c9851bce1512032246907a4a54bcb23a01d90962bda310d4e10504acbaa2aca83cc9ad70fb0ad579710eeece640cb8a708a13d594d64b93edae1e303959302d1e4c488062cec70c61ec38f5445152b2604211a1a0521eb314f5eb34cbbe618f7f59bdd425640282d94b33acfefdbab25b1f7678098145f475dd8d3ac5b4ed7ae8d7750cc32ec270b622afabcbcd3a3dbc6e89349f68237abc3e606d44d8d53122d29c8d90ebe2c84fb77e69d9b14f9790acb3f7500d69ae6d76b7ebf3eff4578c90b6a8c59f4e4d4e983ee72df8092fe52b6dbe1b182436bdaf37ebf1b1697509993e3f2f20d6e525047ed268559fd59cf4d425045e7eba840cd1d5e5dde49d1316673e1e471e7ebb999f5ada209a49ddb2823a9e271d9fc5574dba3aa53eb52869ebbabba54d2ec95f3f685b11bd659fbfee0f863ab0d9b7fae9d7317909b96eb267b70814129fdd8dfedae8afc32054eb506ddd1caaafd3572fcd3d6697037341bb1cd88dd5e1256488a6f3ea2136d481c5b13ebf599f8e533d7eab2ead4f8a92b189699a489f6c5836321b231b38d810808d01d898266bd988ee93d984ae3d0e0310c0cbf5996cd8b061c3860d1b369810c159adb72e6736b399cdbbd5579f556f71ccb488d1efc4c90642406de3d1effd2587474f6bde0d4bbff7d6815a5f744afdfe72b779abf4e6b31e4fd304638c10c2a952f545f391362f9fd689ecbc16856c86d1ef5042a014d36a3da575b665559ace83929295ac329322096373fdbae8dbf3a96c4236eb195d747b7ca08de81bb76c8310f045be56f89709eb5f3e67cb5a29578aa2a8699aa61863841042ae2f5acfcb7d9ecde8a3fa6c5e748478a957474ed996e84476a60e9d0811223bfc2c294514159a261b63f6de9bb0e193d05784fbbd395996f56c07b655597fd6dda4cc5e7be3ae77b32c3aa7e3501311eb35ce4cebc9eec336f6b6fa9bb7a04d566513529f1e3d11223bb1b1ef705faf6e61d7b91cefbacee57843a075b7798e9f310fc21b619e8ae3189765518d434f75dd6653ccb2ae6b1ea3b3e9bc3aefebd8e99df3e16c36d8d4722dafeab27e559b2cc3b41eec3e944d96611786bd52d9f5a936d97d443676033b5c3b5c3b5cd7901d7248a67c0021842299c92a2b494928659d3036a3fb886c5e44eff1a936a1fb5436164a29a5945242813233d34988a694eee8c8c6a99f5a053cbdc3d35476bd39d3f6b6d9b5feaa946a749acf72d7d7ebf56ed5297515f0d453a7da566b25c255001445e1304dd328c6984108dbb2619d4e36e8066c545747086a5d1d596fce34cdae4836d737f801d88cee23009b976fd1e26023bacfc826f48dbbc727b3b1f7b16c7c5c37bc84cb162e5634a5a780e077a96da4f8aabdebd574a3ba9bed698ab18e537dbe9a17889e4e5d47aa00093a117468450a97273dd380250d4b26ccab1abf7e6d348ec34900c0095d44431af64ab3efa134f474e8950b101ab2402034f434043a43190d21c46e8bd8687a7beafa41f450e895b691baaaaaec4a80a769c8de3ef42a744cdb467797008d670f69a1d3f80f0e895e61173da46d4074e8d435a4ba0d8dbed91edd1809f0f4e836bbbd48053c9ddd15d8e8d18da1c7c93e3acd3e7a967d744bd9dd80288dee06448b2e7ae83f6048db46a7429f2e1f5ed3b848db44a2fb038d872e0e8d6717a73e9443ead0adb6896e0ea969dcaa9242e7eba6de4f0fdd0d073bc4deed758dbfdc5d436afce59b917e390d9d866abcbc54da8be8a111842d7aa8c6cbcb2b7bd1e8a5baad605e2e0ccc7f70a5c1dced75150a55a150e85615aa2a6845f4d7a2db39ad9da2c9a5491ac6a054f43ed150a527a9b38fb40d881e8d686a9c140add922e8dd7d01c9768dccd76e82f5ae88e6b624e83c6dd6687ee06f3d15f1ea339be61ef569fb98f34ea30da96436ad1ab4824fabc1bbd888a34ec5d12e01189eef65af472bb913a74981dc77ef4cc7e74fbd1cdfe7243ff01451a7748a471c7888e13babde8de0c1b7313ba7de85eb7f73aa9e99dd6ed008244e20c0aea66b6d7c6b4c8251ec9d04b2436dfaa6726a89bd91e16cb9f777b473a28880c56fefd34bf1dbe314dafc6e8e929e0d234eff67a5c909cae13eb3f386ad675fcb0f01229a594f2ea410bc269914e8bbbaac84992dbc0bc846cb6ed68c79a1398875e3419266c65d5a071be259d4b32be683296c6834bf235b4120d1d2d351926ec56d2016b46a1f34bb006e6fc9046fac125f94ce3814bf29896012ec95f5a07b8245f351068217039e461b4c93724acf1816fc8e7f010f1f4053539e79c73efba75e7b6eb6e3cfaba74d8b7dacfde657fa7210dd3767089e99d26c384adafbe8307acc9ce9fb0c65e076fb80aa13b7593af791f1a473e67460a7432c17979371e2db52db60bc93011d26498b0f4d5ad56b9949d2fa58cc4d1f2d70e279f5ddaa66d3afa5d22b1b7b94d4baba694c26680b1078638900a4a1d4c81949b8e765c7a56aa0079ef51d4ad80ec5844360effdd59e115146af13f91a2608c147495efc6e82da7d45485f0467675082b0ae3f967629ac834314e0d3a47d579a66178573d0a094ec23face4f1cf9248e21215ec2653621e9866cb1991ba6099e1b55ce229d8ede72024d4c19aea5d4a63dccdbbe5943a7e727c6382104e30ca184dccf0d3d74d64e2e5303d324708b3b3363dfe08d113c3c8844b0c219c8eb52c500a36c775e969653040058be5eec6d351cebbabbaf2539bf8889783bbfcc44a5e0e93bb9ce4fce3ce3f4e9393164f69ef0c561a01ed80c678d2efa26210d7117a21ce1e9421cb162d55555555e49fbeaef703ff48e9d8352f9752cabf2a9a3a827f8ea028fea9e4dd4f642992ba9c844bf186529e78319a74a91d5019b88851a50dd00e488c276638d238b40312234b535827286213b00933794ddd252dcf4998460975f9874bb23a250fa9bb617fa1a8d0a98fe8a91d9bddb0a29bdd6dc2ee4e6c595de3eb1e4e75b747c5d4f17cc4d3615e9c7a592fcefbd4d385f74e77e39fa6f88897034559e7129c99a4a62e63fc0f06a263093aeab8a86d334dea0d888eef0641ea7871e48435a1c3d3500664a0053a09bd1e5e41262b455ae51bf25448737c43de8dd4f29669a413d127d15f34abd5bf8b34c7374a222d744ba39c659a1f10872d71093ea44d7803fe07849f9088968fda9df8e78897437cbcd4b64907f634452705e3d010a84c09c7cccc9411698bfd18c689ca2016de7d70e9f1e0d29b2639f57b2fde99192e4d3332779ad3361eedee9c9b361e3de9e8e94e470ee41184827da74e4a6c13a2637c10e2c891233168f7ac3777b5b0efee3cf2d12426c4c26ef6e6f444bf09d153755a69f30936663a4f4f777bad23087c0fdfe0bfab076b96f840402d10529a0f88a39f66d9b2e558559f956be8abaa9a54eb69febb39242107e0c2145c68796384c4968f2d6f8c3c4f9f4b0f0bfbee589361c202016b7e8c419aaed3c2c3c715f6fd544c6111839a2909b36069d4e0297dd4687453fa675837a5b797047a61e70ed3d003016fc4577730decad2b1045c8af2d6dd5c97e6cb69e6b829469088c113baf4046beaf9956fb82e2fc86256436cebbdf7deebaf3f6dab77e3d1f59107bcc19f784c4cea096ab1f43a604df6391932ccb487e188ff0127cdfaa56d3ef4647366888872863148d1530c82474f17a75e1cb950646a1cea728733ce38a361ad95475bb7ac9db652a0a32397e81dbd9f5e646a9ce9b1c7e69d4ef42d2b066ff0e56114ec86a3e7e9fcac2697ac4f0dd32cdfb07e6924be61bd6a954b169dff015f49ed56a61c99a0548634e100520a425fa3bbb0eb9a3395caea6edcd5cc0f96af74228e8ea791637c6ec2666204c23cd89ba60081724807e0c21459e490ea9b286d52875eb0fc7a2707852d52b650e1d84a6fd5016dd1c216291dd4ef33be2cbad0a40896db016d7932c4f5a0a629324dcc0dfc74086f8548b0d3a989bad1e588f6084a9d3e9e7ad00386d41453c0c8128a0b8a4c0808459c26aa72c2094a5a4210829cec83cb0744401f4c1946332c9302c3386259966199958289885238218489a2a4e4010f20bfc9940a9b6599cda88042c019a567f3740eec8bb230ceeb033ec1196cebd4c2217bc04ad435334df5315296b148cc4d2b1e3d7ad5392bcbb2d3b2a2507537367b42c8e4ec0fae5e8942153e5181006d96653603021402083c805450b3aa4108828441b0ac7a7186d90ccbe40f308c5fc4ac2a2b2bb3322cc37ef08c3c7a55230de7b3d3ec0a5d36745dd775d5d7f1fa14a1bcae38628d4743f81a393c3ac67384afc6abf1e06b7c835cea0823e41a9a4fb4a97129a7bdee96dd7a48dbec6be77a10b95e6f69725e9af5355d3d4cb79f1a86d17705c16e1d93dfb04f248dbd7a8d599f307fa141e3a1d1e8d7acf39217d5b6ec7c7132ea6ea1cfbb3a5d42a0e8d45d41aaacaaecdb3cc5b0bf3f675dfb2735d12bcdce97bf7e89a759bdb4d1431a8dd3385f3730a771b7d061ae68f4d1ddaecfab63a44517e73afc75b9a696f9350e1dd4b62abe8eb0e3ddb87af63fd8deda4f35e0d531d2f0356eeca70afb4eb464a6bdc6a456e435bc24c0037f20e7acb01dec607a11852a8baf274f84b068b4ac65d51ac534331c5262a56b669a7acefa18a9cc75cd295f7d1185a210125b474e2fa250145366339b5944b09685032b5d33f5369f85a894eb58499b9c644ccd8c0001009315000028140c078482c1689ce8823f14000b8fac40584295c8226112c3280a62188c320618a39021c0100084666aa8023d820bd030df6b1f4c82f35b76bfc0ea3737003fecc696c754170690ac86a98e06e7d0c5dc41b6e14c420a3d5f3c54190765a6fa1d941ce062610794d0d7e4595aa2603c504fe59562eeb3095837aa165bd78fde79a05055ea392eeee5549e5b81a24534eaf540073a570aead7b5e83a15fb1b7deb64aff08c2ba343884daace6d0db8e21defed2e7392d19d5be1678d88c94f4c46404611d36981b784e68b54e6aef33167fbcb8dea057e74f8114d3a8ac847801b1aa273cbf6384568e749d16131ce805dbe9cea014e0eaaa10b8a435465e5b3c9d5c25ce608cbf127a61561c266a42797623f7ddd61ce51d574b1b92c00873e33041345e2f543fcf4ea27e8ce5e6ff02524d058159fbf5cad2a9f78f8258c76ecffa7f09baeb92c1c3e0b1c2f1fcc7ed9855c51afe5ddcce5fb3198a990de87a80d9e577f3878d79a6194c7cbc9bc1e7d835cfeed9a992cde56bef993188f60bc5c7f5d34cbb2f37a25809d23270c9455557af03ef3918214040cc1b07a92395e3e587da35b858bb26067b7741402514ac7cb336f5cf29f819b5c186f1d185e2956c57376f1a8addf13bbde7cb8632520eb13cbef7bbb64ee577c96bb4854c038ac2fe4967991b3357582c3ac579ef10d3234050c5037411160623828cf40c0b452559e64c28cdaf068f30e416196f2e64c64980b41f23512d5fe9472906df8ef3651c657938cc7a8f2522a095fc4bb5da332634ed396bc3acbb2425f7dd9892f8deff0846b163eb2d41acea16ef1113aa2c82e9000fdb309feafeafb4d37eb77ee5a7655956879a4c9cd4b77d6ab6c23b417a26d6ce190cf4eb94a1062700aeca93c7a7930726ccc3d4739d9445617003b8976c486cd8c24bd9fc0d37dea72ef0fa55cb2fb4ec2a2f853661081a98984b01ef5f90c19cf170dc8448c2cf1186c45ba0e58962e4b203e8e59d50d39182ddec247b2b06ca214dc2991da2acaa1016a187367f537ee71b31a8e8b7e6374484b8e750e6016e6c0e44ce103825c2d2cf480dc5ce6a6ce2345b8a6dd23b629550055b971e76bcfe26eca577f4e9e56f8a5bb5eaf824f9fbf30f62907d862f184093b75e087b7bc2f86e7efa420369f8ef2530b3ea8a3175a5b85e144861615ffdebb5292525e1cb1b0308a10bab4dcf3d81c2b8ba97c6abe218033bc5103dce348d5614b1d69bb5284062c7f5bd6cafb54b5d17ee3d6cee0cf33279982b2599da8cad7925a6a574ddd11011ca5359f5ebd1538e534ef53333d4f077819d1e3159d498b00b6801b3de2c3a1536a0671415c591212e8f09c9762a033c8a1f54a6eaf17839145c7d09b6d0205d6ae9f0ac856d8d1fed6835c8f3e44cba7cd71aa46d9b9f167dafe7d68be69df677a583c3f69b90bbee869b8ced377d9cc21e084c4222114b67ffa0894cff975216648b1acb4be0106a5508c8a39280351c781c4e377f80f042049b216ab39fc7afd27e32a6eb4e8b335d861d01c1ef970221f5e25026e29cab98a0818a0e27af8090f0fe6cdda6dc85f496b949a3ea1ca0602a22bd25b443acdeca065cf44fb680689b366db3585bba0d68a920f490defb2741d0060e1a4a7786d68899725d9bf81212d354a2af2b0b06d3c83ba2cff27bbf93d0aeb0e61a8fe1c4c941a31696209496a2a596fe8465275c54161cd1dfe3e296b43126a3c92919da5c0ab7551768413579107b257bd7d2a526baab1e8edc2f52f4289014b0b3addcfbca4ed61a81395406838055cfd211b94a103db0773212cc05ededc680de9a24a2b328c1484b8bf1c3d4c1bd6dffa88565cfe608d453d679f0073b4837a3c9035320695cee4829c852370762385bcdb9ca6db5c677221de3a94b2c19ad944548ae81e34ba57d34c9eb24bda2d029de2dbd7108ef6495e40cb29c947b9f6d61b803759b31dc83d1472a8d12fca1c27c954ca43b1e2bd7e987484b818a3bb3e9add7591cdbae4b37b16b6f5160374d5bb0b739971385068efa00dd812b748ad735079761d22aee21e62a90a5fd94efb4fc1fb7b49c9dcba225d014c6af930930e44222c55d8e59e322c82b09212dcb5afdbc11d39268be0c66901d88d0e31e8b6e6f7310b1bc8ae561249d91ebc35567cd96629bfffa6004bfeebfc85b2b0adb662ee90a58818974b021eb3d15a746604710fa516d2ca9346ee6424423c8bd29137008e7259a975f31347441e360ec43bab28017e52ea9490c005d6b6b1069439b885f9fb42b7d38846c60e0df6f1e78aef8555295218f4a9b2e26a48c63a9b378864901eddcf668ecd940f5b1777d7f98a080f6ffdeed703a80418c20d27f2d020a768be38de2d68da4477ebf3dc3ced8d66c0bfece975f8e48bdbb8c0bfeb138517264bdd2e7aa93a059ffc78600414c3c228dfd5cd820882f6e3065cc725f11daa0458117bb679f99479accd3eaa921d965791556927b29aa2882f3f9905ac4b0e5ad8561c01cdb3b580e0c3a144ced18eb56c730d2599c2862d3974d1014c68e5b2340cccdbafe4464b3140c454d85d4f45a343ba9b670628aa9660b50da5dc422d6c048f5f7df0cb6cc1bd46c61fe6c3a215b710a25726b5b09a1f5f796e2950fc2c454bc7c053c1305b855e84107f01b900679e686901e0f77ae253e885f8949d9d72596b2d729e47c78101813b7a68e596907192c45848c19f8fd0b8d4b5f487a006fa128f51ea3d87a779469414c92708bc00c092f24fc938da8c16a13db016fec566ad69638700c6f23789625c45d61151efca8d539e463ea8249ad13fd89de359117bb4a74359aed3414279bf4060273a7e7ab80f685e54d4a8673bed56752bd3b6e5328083143170833e966e62ab3ad043d54c0c5b60d8464c672c91dd3ed6839c2c33d9aa535abc5d6bbe6e6f2627d9545dcbebfb9d09b0a600b1cdb0d93af3be267f8450f98b3ebbea33cfeb11fc78a9abf56b663cb9b2af330d0b8e091c046cf38b3fd5e2fab275d018598404e4b323cd277003fc2a143ac80be70385ab8338f0c7fdc8d0a2ff5fd430b3eaa0a6d40bbe3a7713ec2c7427514cacae605badbaa1fe277cd3602ae7a2a30e62608eae4b6cafca71bd5ce8efe73b1833ed94a82f6b78b991808b4f9095cfc19f42295c6ae81914f8113514a991b98130a2d60516d6648354a883bcc1e40819bdec3f021488a213a3403f275a583482c6feaa6db14434578fba842a02e247c2857ecfab3fc3a2d3b541726232ce0b4ea07c20154bf06a946aedb6ad31b54121c4bc801684aff3276667a477cc0d524b661426bf628cf3c85ede23db7c01e1e1539daf4133957bad8aa5b74af0aa0054791d54fddafc8c909fc50b910dde910be79eff2f383c45fc565310b3e8a3e979a4a5582621753f04e0480b67d205f9658334e5b883273bae7872b28ed5c8e767ace16f3e97126054ca56a78008076c00713b38be72504a421667d5b521b3501194dab24a2570da61d434514ccd667e3b11155bdc25868a821a2000645f90fd86b69e2aa4a1f67e18f379879bfc05699da807359a3b5f5d780b133c9284e54f4b78e7af5f25e16760b45af3d902a8145e46c9f60b6ec86dc67086518842d8605b2c5d1638d6cb2cc018e5613c2f7555c35b37503cb868f5c3fc5fa8dfa79bcdd994b2353984a179997e18d3e99cd71c65ac0f8ba0052c26e2f7b6a1ce1994cda7a4e0065d4ee31da0ce8e753a4773b38516cc0b5be3ddd2d914941484613c56d6c4c6cbaa5a63d3769dc43e829ec29c0196365ce758fbaffff98fff7ef878606cdcd3509ba9400d27d45494f0413953a33c1ada419ed47b39bd93e65320762b63851ac6d3e2935750d1dfb7ae2bf9e0e714475c73631541c04bf2baa141723b318805f4cc0ad906c54d16a475180b4b02dae60c8b9adb2e675c2abe579d8613b2b211f11a1bafb85bc2271f1a7e04a1bc26aa14e5b2bc90a157bb66d1c7e12208a90e187131e0c6f00f7a5e630204c3468c9f51fe04536ad16d47e45257f30173ec088c0cc78acc63b8bb04f829f5eafde855d49a34505dd9da95d42a6de1be395651708e51a72fc40a9de8bf151be963b0847fd777b3c5d4268a20988702215c1b163d358fbb1c147f4814b5e85a236b13aa7f03bbc199302e635052c8d11f7245e7b9a57d2c458bc16bcae84f817080a608aefc4267041cde4c1f58896b882d04b81ba743a4f9fe708276441e062fbdbe1fa8201cf7ecf49b11f1716c906d409bc6dfe6afa65b838d36c59eb5968642b086fc31852024c10defe83990bb79dbc08b0c852454e4de36ec779ac478c881105a48105bd7fe9b026cd7c2a9ba91c220a46b1d37c631accfeeaff39edce82c9563d389810828df9e293acbc93b2f604da27717aec0d10be813888992a0ca47444409d43447c502e32486b1dee3e18022ad72e9070eab6ebb2aa36d72fccd54f4082a63916096d31d3906baec370c039aebde2fdadd0e233cbd3a666fb2b898caad835d51897a5f5710928e87375083900a7adf58e4a9a2680ba36a715a045d19d1c127766af88a239855354b5e33dab167f3b5342dc3f4aa0c3bfbf0cf14bd6dea2c0b150a89539ac98908a86e19679f8006388ee209bc4a05fe7ee73d1503258f8076e05b257c9b100c3c54ae90e6338351a2e8472e9bf5fda3aa960f93cbb8d3f8a4b9613f0af3cb96c4fc581539e41fedce5849e05d068ddef947887b83ed5c7cfbd949aa27433dc24fc3c85802efc95fd0a89106ab8ebcc222bc4b69c605ff3adc33bf61d015b2b2277d383b112f8e65bb7621c1f69d635e41c60b5716fca4ce89a130f7e046f871a8d1013a81d8465e3fc681ae37472f27d772f990640617249aca6ce664c25817ecb954149dd3d5432948521af83dfa6afbb27c49260b462d7022777603050238ca82a49a06dacd88b8074fcc32ef99c4944c2a9330950583284194cd0c6f51bd9982e9a6ec721c0ccab5cb68539688e98fb53289c37cdfb113cc7085b815d0c57ad2313a26b408beb8d0513dfc551d7e755d0d28df9738aa1ea73d460c1093f495e0277180caf114ebc6a7babc7f99aac759aef8162d7266456080fd564a5e6d47d6b0fb50b4c4fc158945030e639d671f91987db3e82b29bfe01d0368ad0a6f428f00994fdc076a16c8b7171abbaf4487c11059f7304e7c14cc08b5c7a343219dffb4982057faed4692e2d6d47d361a7839dae39cdbf1c2cc39ac9b872b5a25547f31070ada7682da6c32bd51a20ca63abf2df7ab377271dbe9deb08892f4d005b460b06dde4852bd7292eaf333e6d76f625a4656b41b532d5e7a5ef2dfca23a44367a062127d2484c2ae1de4664515dfce19b2b2d7bd1205c9687c9742a661d7ddcfdd0d82c5dc040bb6b031240e6c98054ab9b3b273cc9e9b87594ef72afd8f7e84031621f7feb85f06a63b2b97cb27f008c9d779ef3dfb5b3c9a386973b978556f30132315d91bfd0e639785b15073263187dba578abb0d67f7a21636a48c16f416c80125973b02a890ac3f02c0cba37bd86c347495aefe733f1e7321ddb59624cd71db080b05badd55a0c3d2da040c0e240a7cb77ef888595d5b91f3cb5c0b7b66eb7fc024cb820d510ec4f70ce39c5a8d6295c9c452dcc9d7baca651bfb8b24f3b4bdcedc3c6aedaacd0cb9224ce41e4c52b0ad93db45205f4368c715dea2658a902a9df386d2c7285c3c9847158426ea47fffa599478bdd2286c027de72aa7ccb12ba4a9c8c16a298ffbc554a099a935925bc5f1e70405c254ac9fdfab052ed4f03803fa1a05b42614e68958a5d2974da6fa585b870850fbc13d0c7536df4a7cd4421e56ebddbb6d71c65f9af5b97a867ab4df5155c3ebf818ff16ee1cf841b0e02dfd42d4d1c9f21ce5a2176311f61382d0a0aae3a151451272e63d854b2b8490a6d7066a1243a291b286556e3371670f501c1e3fcd10b46e582d8fb3d084533facabd0a36858d1eb5ddf6c6430fac12dd3ec8b8291b772a5d3502decd023c4cb25aeaaf300f280e219bae229c58d8cfdca4c4eac01a7d74a39f0b19c620e1bf3618cac09a164d686fde8317aace4fda536bd94c29b8425d6b2f987492d1c4d619d8113e2c9a9459f28a6cc0f82804443588a91289ec60fd1c6f32221980fa3e6ed1c8cb889ff3e2cf10ed6f54564d645347b82c20ef9aec6f01faffccbb1718ce8d82a49e70bd15014f9b5c0c31013cae0078fdfd6b91fae374ee6fb6ac169e47327c03f894af7582a46e8073aa20324109dfaa46ee05147c47c55e3006381d08752f5ad080271e0d3b46ff869eca0b51f41d9f83ff3ee165aa19b220aac27fad87b45dd3005846d88630671a701f880d25497be3a703ac24dc3448fc538b3b2bad86b74d9a73f075919e9142d5384deb6961385a7db34f0389dbf9805af6fc050c824332c9d8b744b82a73529ade8e65542eb72d18a7afd1aa9865db28a059cecfd1cdc30d3ba858125e864d4eecacda1ad3702de5b523d7cfe50580953aefc2e024bcb9e95518681c1172d07f1241170a187024dcc204f163a08539b4472c2c23d8d16058405c44fc5cc02d505917a4a89f503843b83b74d8743ff67e6094216d2f00f15bb624d12d8f9ab6b1746cd30bf33928c35c661061575f7d566cf6fec2f002f4ad24840619974058ba573eeabe04832641e9195c22f3a16788a640063482495d29d1f40533f198ea3edd0fc54a94916314912e7e0b7c86e9064e04df23bb3dc90767ccbf3341504f26f47c58d09b190b22d2d53888ca84a81cbf0b521bcc51e80d2a51e1a0e737896e863b58a9396a2bb2506b71cc45a18785422c69a11a7f61980ff4d5e70cd20bbd434c1edc50578fc75423cb3c2c440bd1fb8a6f1cc7c8789fd11d3e708d4d8fb19724a849dd821a26c1c1254d288a460b478692d2a5d07842adaa785014d10e9fc915d3cbbd311fdb5a89857b853ab5e225c3ea1ca776597d806c27ac7a85466c95eb769d14a00f3cb8f27f82462381d72adde03a8301a79694571ddc39bb18e231d4a0805308c09b9a6cf96602342f09574114a0fe04b88afeae3a184c1b4c0a6b6065d3c97a26404198fc4055acd9f8e1a51029c6fa1867ee61ac7a4df798688d8b08e7f96d8435d2ba8670a728303b0dff8b0cfdd735ead2db01b3d23080e03db3c0865d850cf9d9ea286806dccee1780f6120f41f94b2423160cea584b8631824b7807860a11bbbf37a55d46b9262d0c3e1869d1835babb836ea54ff2e348368c8e1e7e9f191cf52e7a29fb7552f1c4317a839ea09bf9795fde8ddc6dff60cb2e29e82e4ac08ab6bdc8cd0ad808d00fbf7d1b372db1acd26a9d3552c23a12ffe4350fd6851a2b7e4361d1baec5ba486c10a3c4edd14b9c900cc51856436077d38bce2c754a72d84456b43da286f43ddf01cba851d73d86c6e031bed6bccaf0a31d56a1ea31991cedb3cdc6b6e1241250ae23222d6f27df6bba285eb0870075b4096fff32dbb08e4cd5b75d31df1810691031d22073a237a0506153f06c89c10a371f87d199f9c44187f7a4325936cce5fe8882edd3d378f881464e015baa4c44d7483fec12d40bc5f2a4137b0116b9a08b9af021b8e157bda5f69a3ff819b5618fe9f326a49e8bb3c0bf0ea7c3b76f4bff11482b3c7f64b24c2f356430f9a67f8ca23090e13ea92148d138ecff333dc65e2c3f137b9781ae078f4280609e098011c0513f394695c91c903db6114e6c2b9f5356f833569e07ae9bc0a6b3e098c80f1863b8ac2828e6d413d9115dea4e5b05d212d440d5daa74d212d039e51ebcf28e2cd32d0679024e78256cff88c103c4cf76d2ecbe9894afbb7baf368d43a4239f50e5b3ba886cda00a1f6fb900a8bba754986d5baa15542af72058393dcc22220813d40ba04095d68f442a2290fa81eb6f3da0eb677fe7df0dfcfd8224808433aae0463bdc9afca35ccc02e0d8d173048364393acf2e832ae38181946fb438167cb3b9b5f1df505e30718f2f9186a9f95eb25bc278f2725d6193d814e585f39d17eefacdc51a0908c71159de3963b8df749a20f5cbed59fda854d8ecdd05a7644d5c041e152036acaf8b2e956e7adf188834538bf877d9172586fd3e55d0f2aa0a95f220582a37709e2468bdc8910bdd02076a1417ca183e842e3c823bf62f57292f22a65ff46de0883f1a9521be122b5a9d6b928cc36c749ae11b7c9d08a17710aef13e5e19f89427cdfa209d46569122b0432f6abe002c6a235510ffc997f5cbdf27f571aa09e03d3dbc13af45ccd691fca30e29f846c5a91121da49d23dc7b863139cee3bf14c18abf22373f03f49a354d8a8ae413b7d28641b7edf70d122e7aca92a9addd5ca7d8e50a57b219b06e834e960516797517d2f5a4e4cb94d0c5e347c246e5a1e3e5009ac0177890e2cab7ae603a540bd35b0056401a4255b4e5f55b7b53b4caf65f6577abdcb410c7db56544b2b47188eb3c2b3fe3173f3580a92bd44112f5c51d782d27ff4649fede136e1222be6b30651cb29877ebf7ccd3c989cd3023b53accd7143e461f6bd23aa4e7059981c2d73f9946f386b1a378407184b9544332374b7ee4e8c158d57130561ab02ae2e38fcc53503096de6d41bd1dbb1a69945ff784368ce3e3ed2497e586c149e9b9229404cc8753d1e58f2fd82798669294dcab2383563159708027fb23919b0f464ff8af380d4cc6e0acabb60a4c9018433819a242ec0098ef1fd15b8aa058c71c3ec9a87e1c77ae7debbaa04d598c14330c201b9a1c914a53a93c7f7ef334a9d105564bff88e92c55d4d4397a73542a048edd63e344d87d77f4be32f084e5580741be210a0b2f96658d855bc3a0027d03e0b2583db4f115dd63b002fefe6aca590a56b9cf12d47e15de9022170e79e7770280d48b3029b91bae09f0bae8d6b2c545e30275809f836da63e23e3990b08e385a4bf2acb3aeccb61ed3883e60000108ca30cb874e62843dc45b5fafa87e0ba2898d7d5a311013e32da0678faa296246b1b5adf2385165e8e1fb980dfd0bc77cb8692adbb3532d733464dc6274fa74a27a32d71c884046f634c83d3342b6de55db3dd0636059100c8f69b8a643d7e1393e245bdd577039bad09e7bfb401944264b8c6b4d800de9a263b227b6525dcc72a1736198aa97d10b0a2609833f81a81d7d6f9375c9cbb0ef0cba72b2eb2d7a57632c0312800f6560c7815898fd267d742b88fb99d92ee4c216d6de32161bc5e5726e18408080e910731d1310610aa39b6ab5c4886760f680854addbbd6f355110a2e36af65c00f38310f287baec7367d7c350378fd9e180780bc0a0e1fb854c329596006d2a2feb3065910bf6551ec1a8fa7edf5baaa17d75d48751d4508842858b028388e2fde892247c8c44405c49cc63df68da40a3cf9f09369aa205a50aa16a05c8526dd3426687fd412387616cf8ac28c52558d2995abddef1d6a1c39ba7ac8ac02b35c358de50ed577989b93b23206e9a67e3a6d0327b30bee984ac59db889f1419f0f0d74501220bd2c74b84c3f401f4116a89f6d2048594ff799442362d7c6e3d4b7e1bca67bf9015df72e6bf42bb6acbd40313710e250150ba8c30994d46f1a4ec8bb32582d7c9579d2b4d16b1bf82b7b1569b9f740195f3ff4a6d3c25cd603a4f58b49eed1b601be6534057a4f67c6b30ae69ab27830e4520358dd5d407209bcad2b05b458ff15950d4c77579bb66de417bed132626d5a5ee6d21f7808f72627e6b7a5d21464a892e855a1717fcb3ff0577dc0f9cd153a20420a41a4b059f37ae4511653fb96ba4bce923f415b7c1b7e86478b44dd3371526a030f4a3da04371533afbde2bb54cd62fcea8bcfac166f66fb7f6962843701241d98b7a3d6eceda24302b845212438bc6a0ae38406888d5b517f2383e081fcee6e3d2810a4017db0fb552258fe9add40636361cc70ed6ad1968df363860c0fa9f2eac6afec27382fce24945e2907cef2134bcdb0a4d69491b29debb0dd6792efd75aae9177221b93c9e66f1014cf33b6c3aab613ed8123e697da1a2af185ef8eba65fce4a727073bdc960516d6e7bece60cd72993f9f850e05c59084007a30de00c096468d2349b6ef4c2bd5838cbacd8ca0fa40c67de07112c0ebb2c73ce5c8371c279eb5f5cef0a6a0d91fe80c31ea15fc6aa75bae0997451c676faff80b3d8833299601b437ec828b633f03133d40d560550f1cf01835db470ae3596f12b3ecaa46583f3b223aebad5b112974c1480f9d510a55b295e668a11848907bd4a7f4b7b3dc3118b2082a372050cd60698fb5bfee5800fe5a4a37604d2bfb103da5a21bb8fb7e63f39e26e51aa1248bde10ab6d24a39035fd3f1cad8f181d68b772f491a2675d90b95c72b283cca9aea72b5ceeb14e3ea1ade21280330cc79a65e4a9486e72c7eba18676fff9053ae1be2434e1ee0e16754490b367773f05d126043bc0c8eac9602c7c7b2a40a6f6d7af717f357ffa41990d14e33a1c6b7c2abbf902f886393aa0508abdf080a161b50bc4a03aa9a29f2d60c73a402125ec35ae8ba7971ae50be3e7b6c0b2a52c1172c7bc9bd676fe1c7ec5586879cf36b9dea17e0efeadc7345a3296841185283ddb8ffa74909abcaf0dc3c5c157c2b18346561e5e3435a7c8116dd83c04a6aed286b15eb91c3f9adac50fdd7bc9d6363645978045938a3075c43b5abdf0c8c07e390b033751f895de9fa55b42780a7ae990041a37ec0ff921728ce36e39567138163a79a3dc1c1d09a8a2d057af33164e5835e74668f823ee8a6625421969fa14cecddcd9087f8c62155cdc1c4de4018207e8103e1abbf7c7688528a22860b3cc60eb1860be7ae721315281512b87eceaa7caaddf1342a2f4424e0e786e2438491d303842ee143c6022ee7ddeb22c24f74026b65ca5a9c30a421ad1aa89ad55017f46bc5470b671ef76bfb61121f4d24a6a4e06e41992b15e9400e4839ea1d111ffb0b5948aeb0211273d3a1634d8238c201e80d8d4d11356c9355474330661baf001609df55bc492ca010126004b40da82580258b3973550a0530e9a6e3d5094715f7e3cca452d0c9399e0e1c8dcd96ce5fda3473deaf09520366f3256ca7eb754463c734e6851ff616ce589774fb7958d9376a9a4224dc590cafa36a9eb8280940b85e242973a34251f2f26f1f8dad48be6a5113f5ea995a2cf9944263cdf804c38735f3368d9b1af4bc0846eb4e1bcb0159424363f6e7ed646166aac9e513836d5ead79748019cdc2090489f7b5e02ab48a1fb18ea589db1958c865d7cd91506a0336c6af844751a0516d5f77ecaab0cf06252c500e4885a21393b5dd8fa98f0f44bea6b02b7a7ef83b47e63ad1ce466d9000dfe2be8b5bbf99e115658f59ca7878a723112d28578e5e3ee87a4cedfc21b0e9af00ff381889cf8b6e560aa43cb10a0481b4611986b47997133a9ea126fe4dea841ad5103082fb80ae806224d7906c78956f05f5c3198da1b2b87ce128a0f7bd69bf425f889821df71144e5c2d6a20f0790e09b1aaf2933131f07a730373dc427ca502e14588533aa36a9607178491fe9b7a037d8241dc80ba10e3987a155731b29b3c6d4338378f0b624f2df794e4e492c79ec468dd1bd876bebe3f428967129bd9cecc1ae197093c0e6b83dc0a90a8d1ccda442dd25dbd48eeac0e506d05ebc591ff64ed7e1c6f2d8e85d18eb1d857c0278a28e10ecad9caa8344067ce837a81e20271407140716071896b8e925473260a3413892af6e52f8a40fa0a56572ac78df6bc0136a4e0e7059c9f65b65966cc66c64024f6d48899c5ad08386552ec47370161371b20a41898754ea229a26800a16239720f697531db8324b076b0f6039c8253c0e7e67d15e6cc612d8499aeed3df501bae84cf2d61752090b96ad336a831e754ccbc38bfc6aa0599d84dd3ced6b7e84eb36633680d586dd08e7ae383dc444ac1931c8d59d545be47fe26dd7b378b65fc82f92766c7eca07eac0b60289436c58f69df0853eaffc9db852df86b476f81b9038352471257216e219f87e817a41e44abb9572d1fe62c810d12c49f000945b2e15861b1441e1340403cacae5a657eed9568f57eeabceabeeadb80dbb77a9192fd75aa5f7a9210c3910ef2a5c6b6da52a90bffe6118549e422ed85f2b1861baac5e2587fec41f006283533fc793930f8d9146c82a8efc4c7a9ecab376d3a3888b5e5f86eaf25a89573070941e9b3fdb7a2760e470a5789cf23a63752a8c88a2565636d1f3ba9560e9ad42159080ef127bb877dff759e7b13e642a4ff3641202f43d2037ee47de127cf3c91120efad97c975e7ccbe21b3c8ff36fb4d9d86a967091e138382774af7588905549eac5ba341c9826bdd55ebb9838e6836d59da83a663448cb43cead794f51a765aab8ca181d3c40332a092a267ac03480ce86dfe4a40599081bcdf46d65d315a3b5daeb33ae0afe6695eacc65caa46cfe643961b3f39f9308faf6637f99d73bcb682402cfbd87d04333d27532ca6369b35fd22ba48708787bceddc1aae42de46d1b837024ab12a183e9a84bfde498f825a9a48b2301668f1d3c419d6ff31234add9d4f4c25d2af17df00fbb9f96b87d14619c48b885acda6b2f6aefc4754c7a32d0410eab6be7b688caed3be076302087a36703ecb32f83048b1dbab82e90630de7565b63ca14a00b615c655c315db15d35aec84520f15a03c98c2f808c4dc8a115364c642ff789071fdc70c30f3f9ceaba98c1c710c46df0c87c33ccc5c6676e0666b41dd7381add67814ddd5d64beb60d0bafdc422da53ab440a826225e2c907d653000d7383e507f29731328cdae8f2b84bc1c7d0dd163d21b88d08406ced291805c0f2e59ad836d57e63f7941649e053630acb5a047088f7714a6417adfa3c88bb63a6edd28f6ba90554b89cbc9bc54ef3b3b740ecc3d868ca88c8eba5816982b1a1e1bd754a098633b2d7a6c346e485d9a22aa014157f022be2fe0b3bbdedeeefbde8eee0f0365d4adb653c5bba357d4c547f180596ebd72f292f3484730a74df7bd25a20f06dbd8980a69b2959de2a71c96cf3b294ef098b6c4845a0d6fdce6ee3f344b444256b254c2a5771cc534d9b11b3810b9ea6885b7690381c6bfdfea4e2b8d2010c3be08e2a59c4114e271764a8ad54b0d9d671a48b439aefbbd4b2d44706c933b81b56acf770953fedb8f82756e4637066c171e3bd178d9d3afd89c2be69140a2126db0813cc6e8f8cb7c7a090e1b77028ee348a4e395071d5df4dbb57b4be88db260279709920cce53fdd8d6d634035b4480ac4964aa2176b2689ef582fe34ece44600576d424625751c892365d9f8b5771f371c50024bd3d2d425bec6972ffeaf7ab23291cc10600694c81753e768ff7d9162c48b18114143e94b8db65406c990e18b78abd873351798001c4c138753b14fecb9ecf59e11ed52d3ea7216561231ae6a11462cbf860178a4dc5884554d9883bf1d0027de81865bb416f0353209c2cf0a29128c4aa9b565c5cf8fdfdf6b70f9f6df8893210ebed1b3ae0af18b1eba35b734581d0dddb2a19e90184bd44542cbeaeb3201a518b3ef550ce2c8424f721eebca99b5a30b1d8932dacdee1892b5f9de88d1dc74a29975c1687f0799687fe1985665ba4f7ec531806a2809cfbf07643c6b319a4d9919cc7a5911491c637c009c61c34219b635e461c03ec6e79c595858d1359121161ff8eae041d7c79a7f42446617c8770f27acfab51f648f1a806ca21399f74273eeb1a3e3f8d92f70bee72a99777709c47bc991e9f2c84f66338d2be48c74820c0d5c44fd2f181d54432b6622c8229ff6dd8329ca0078f67b22f3e38cb44bd14afcc52bf51951f018b321117bd7c7c250e23a4966cf3517db1571af8063180d22219c0828869f905a1c40806fd71fb6b082598165d8ef9e10cc355d891a9ea6617980b6558d740fee9b5159da9f5a23c42b80e15ff70c282bb2c369d97477db4b8f5c3e90bd0b4958e22156b691c482890717b5bb850ca0da7073f192cf5bb80ffe55c0a8d1dd0ed0f0f3ec660a3c646c77649e969598ec9932d1a1f49db3dd890cb785cdd80994f5b64d8ac34e3aac83fbfa8ec63296dbdaf8649a7cb9f7bfa74526a09412d9e63605aef29f9e6664bb42ecbf2caac30eb1aba77b153084b997103366e85700a3aa7e0268a2b70fcd5dd59991e70a8f72e24d7c275bbc8d5b98546a0e41bc1381a8a5d05ca49fed2093ff66a7aa48c25a662a8c971c1fa616cd594f6180d273d74315925752ec9971a62835c23b0dc891fa3b4c0571d1360d50e89d9503b96d1a5ceb4b64d2edc4499a77b51110044bbd71c96b6423b66d725a7640bbf7228df5d1970bb5d3e8cf2b051976fa19b3698e068cda0d594419ed69e60243ee63197f88172fd42d228e3a23850103f5240ab424642c8198fb588ff270ef49f3e47e4e92b77f48632efbc60777d92e509bc2ccf43edaeef1107d62d50120bb054a217ff82d0d875ada6bfc79beb1d7f080af9626914121db8dc47bcb805f07d3aba6c513573cf116e62e7c9a3628358aeb2695abe9c50d79499935c48be3edb014c0790d31132341de18c5b82e2c4a86f4c476a5d772da8b3edeba8c7b5bd3d6208de6862bb6e21679eeff4f1f6e9180d6d1aaf57e67e3035e255ad3ac4fc3d3b8f78f3691ea8acda2595444b7be05d952cba68bdcf00a7a6dd757a80ae949ce008c15d2393500e9e17791e9e6ad5e49cbae4dd6aa5962b85a827cd0965032ff134dcfef642f3c730b49373eb40561b8b8c7ea1180f0c89c9aadf0fc3859d31c7a167c353f7fb51854eae1263ccf4cb92014525b11ab8425078799bdd248e2f3c23b29e01d40593da400eee810e9426ed019c02ec9d000bca3fd6f0fd1495a3d46b29106adedb92d3ed07abae1257937feb4aa153aec89847870433ddb5e64d731d8a11f0feb7960b9661a08e9bcde2a20d11014af3c340d4473433e1eb6b6b150c8f593d2d7edebf06ca9f49aa3ccfef7bcba1dad3969214a7dec433a94f1bb141b017080a2da0e5394553507e6d69df0b896a83e7bae97f573d3925cbb4ab17236c17f746ed87093f2e538a53638055ce9509febe17c656e8b46b2cee89a41d85076b0c5f440407a62ed9c01c175ead6ba9b61682d267efad885997443a923805b6bd28cef25b010d93d2b8175c1de85b73ae33f843cb0c5a6e261cae2bf7f70a6a2931fa0d8a970cbd2cfa427c63c865285a973c5c5e37500851bda3c6c6284e78fc859a521af42c7e23f9243b62424dfde9ae3811bc29165d9febb3848d2d7a808fdb1bd157dd0ba051a3878107c9153d28f67517b81beedae07eeb81e920258fc500d35138a7230e56565d716bd61dd390fd57d97a1e81791f22f8ef9c0dc3f5a065b7270fe231a9999867770d22b6181bc8f44aa0484d499a4c795d6b485dec2c48f9d13f56e9979efb46c7142f8446a0b7a537399050e296a60a7d3205abf78d1591ebea2988f4e438c67faba2eefa8e71510d283458b0cfa5f653169442eecc3a9202587388252b0f281e064ff08110ff5d84e225f974e500574b049475ab2b3892d6c2246f2587ab7ba849d4d2e22280ff9fa85b797f298453043ab90304bbc163cc7fc65a1e96c6833c272da32b7a2e42c2815bdd6a930ab34def3bb4193db7645d0cfcdff12b63baaf36e6e4caa551eabc564a2c67ceca7cd9f107943f8e2f39687a007bdf9aab8d60c5f8efef8a671835747488199e9287000236363919ac9aaf579f874620ac3d17062d15f1550177f1c2bc80759ea2aa30eccfa97b04022c7f0fd9f6a81649bcd22e173369259c3396769a891b52399448aa8c535a8da78058231e928fc2334e7f30d1629065f8ab90951e8eb3fcb2c9656117990ba63196b3c2acf1f591768287960aa3899d7cd6b1e335a1ce18062609fe106ef59022bb143cae9db94416afda891508c523c88b774c73dd5b4b6a0a0bb0b9d4a608676f06ad674bb3471bcd37983c8d5886200827013c9f5ff61f290998f57394e9a743aa8fd7e34238823470415a5cacc71e390c7f38e5f223307c5ef9e6e71412a96070d9d853d4475e1fa17585e76a30a7f55e3855dd5f4134accd6bc5ec4ca4e4491afc43d5eb733e378371fb90b09c3027e8c4bbb169f904b9c77e0e636449942fa64687205479aee5d6496c17826278c3cf411521cfa97fb1f4fa6f010bc891e05204b8734e1fbedf17bdb9160a0db4f14771c22a15ba46026ba790179aaaabe321c95027a15098b40d6f3e940f241429441210e6559095fb7e25a38fd9784ae7b2486dc42f200b002cabc57b2375d13165a675bc8eb3ace6e18219a1c601dea89d1e2b317820d6f68e3a734db711225308bb831186299138b484ed060ada2e4ecd5ca2683141a8bf0d74e417ac49ae65533001f08fd6ea2a4d55015f29a02050340bc82c8b506098c55c67be2e5a468d3a18fc3957e5de01816c9cabbf61efc7ebfb8ae2035a08206f3e6d7611d8915de8a97e90619bdf79c9f88757b465244cf406c9173f34094a7891669a993f92e775697bce0e48ab0cb1b9f713c00b6f248d70c962f6c1013d70f9cef52612b59b4959b158dbab8987d34e626cab08ab0913bdbb14898292b0efc6674fe83a87d5b31a5325264675944df901d9184217ce2c58b84318fe55dbfa4949ea03e5af844e1a81707b4e512d5280cfce802d067798ceda8d5a010516f8c00e4aa51c171de8172d6696cbf31e88a4101b636929f805ee5c951a4453e654df8cc35c197d96d43d184bf512a340d8e6e320a48beb9e63626d48b1b5179ee87adc96e218e763aa8191021c0ae454a24ca3898436e6e133b1d4e35126fdd5f0c45255821bef491d4316515ac91e7ba1fe6b06315dcd9e67e270d20f98cfbadda4cc02b1d8b0152a8e1c1dae72d08fd0645802c9abf810260570a8d1a4c99d585dbe14c006c5c0850e166e411032ffc6f42307980e92581ad12e0a6c3f5daa6a33a546e4a9aea252e61d3118d6b3a50031bd89100af957e07a9adbb70fcfd25a1fcec68759146b80b782f61d391b48de133013ca4386b5187ccbcd50e9660307dbc71fa4e0c04256f448b5f1522dacc82221051a60be88be37a1345ae8315c5d7a51de78bfd49deb1e02f305f1607f70fa6cdf559888ad59b26e38420967d5ec734fab1c6fd94ce2103dec46236201910a210092aa448e5bac2cd441e5dd21281055c1b36e641dadfe0223ef9a1ba8209592d25e8f477540b266ac1a2277e606e39a7611420af7b863de9e86b270c38fc570c93011684d713133b1b5693fbd002a4ea15f2b0194b48d199517522b491162b8ce2849600efa0b68512b24e201349e41bac55ac139ba8a0cb62df8015e1a4ab93e7b7778520cfd970c76e55c20ccb212cec8bc30c4fc5fdc4d1823a67a019dd2bec28465925fa87fa8bd7e86b7c1182fc1d4f74c1715eb3c21bd1b0fabfa1c950729c8aa1ff79902d3f79de3b6cc7fc84a41d4d9218888150b4348c31d1636ca666990d544031dfc7f7797c3fe64ba49e0b69eff113a22af29304553a0634f98c0593294bae1241c8085d0b469ae656ad8488d61cbdd5c054ef102f03ba4bc067f0fae9ffc073ddd4a0a2a5a7d75c5324b240b6afd91ae3bbdb14bcbcbab54e273206e6532008eba7e74c9e887cfdee65bde787e26746d13d8a10e268cc4f88e5db4a608d05e006b7a0059c4426c52e647c78b33fb0b69dff1c7f18a95422d0e718649c9afe51e8e9a02ca139a09d62bb8fd0711a7de5ba4fcb10301b792dc89f7d1c42dee2b7ca184eac4d714f2fe4f2973ecc39f58273f5223bd269bdb8ade1b9625927fce2d46f51081697aa1b35290a15ec395d6bebc6c9b181021d8cc3aabc624479d4273fe1ef5e32fc0b1a9bc4c402cd010079763c29a1847499731d8edbcdafae76dbdf7f203d1f25a50b3f2e544c976c61dc6675935aa3c54371c47bdd4352a51e5d29b0bdefe2a19d4ad4c86461d16a59acc4fafb270a870a7c3a13a80c307cb662de08550aa0865e523b30d244abfd251aa932666c08caa221682c14baba5b599b51f6c3a97a675e8d9741e9babfb798368ad34c695afca9d5e832593fd726ce0bb29d7847c1b1f5c524adb74e5ac3289e4ac8475ef078ba37ad6e8e314f7e5f334a9514bdbc099624245290647432d8acc4f677434057f3de932c3c705a1aa81ea8b6d198cef7fa2f337a3be8c390704c6bfeb349e3f56f79c2ec2358ef857d21c0a5ce0c64b439c1be50e0516326725a4e622f1470d4338b2c6da7b13742c9707e5401517c696e594d69ad57768600af5ab392d3f6243b4380579d19c9b478ca8ea1e0aa66b6e45a3d65c70f95c06b382cea99b43ce7ef5e9b339351356ddea13f060f8516d55c21fa5668196b0ec90d24792b16c1426555c065416454c2cb33a655b3462638d4482380059577311bb70a1356c3991005996f9dac2813f7f4fab2f801da4cc4458a169d89484a7ad781d9b31991ace4769541cb81f5850d8c1d4a17b7c5daa6e84054e384268417cdcc1af5d4f9041a30dd0d3882e8654222cd4952ab7060bbd05b50f4f5a55e252b2e94f5c05669e3183bed8ab9c19971d01c28728733a7d783ec625e5783ef0b7982a78f1ffff4820f74a32ef69c3501d00f868babb1533fdaa14d765f76c7e1c7549449e1962da9960e906325778668dc7b672b8d4d4e081d16b558d9b4a79e180e56d13ebbfdb58c3d3a8334ac413db73184adf6ccda62296b51c9e1d2241c9da5a29784e533982b19a9ee65ae2bed053bf9266a0491642d2a9b3572de2617d78868cfe6326fdfd2524884bb9b27dd5bd821360e48cdd4c6610535d6c21132ba70238aa838ba6701e17602e29062aa61f22066fbdfe5a1a18c4ac459b74aee15fea060557e529215844216562664813bbc85da88f39621447cb6617b1fde2346c00fb070a20f6a3344481600f9b2a79a0b4b0c3f00dea203167cfef8c99fb722c10514513326371575c22dd6c89a702fcc3eaf989e8a206844881ed7624603d38e3ddeb01c5fd8d6c00b3454d4c5c2b4f84c892dd3050a1bdc790ed699270b4c3eb9b5dd006b66d47842cf9dd12d914794d5d6e244ee86ae85d24911e70f9a03d31bd5284f45ead205dc9d3da02ff3f81d94f8226d781b381e45fc65398fa86a7f62cb541e84652d55779345ee60832d557da08c44b35d0596c34056560a272556c4724858b75fc38e8b7b38f73f194c26acc287e7ac1eec444c56ef7b44072212703ef63c810c5ebe4d81b27913994533730c31233b8a2cad14532501ceab812cb05d0d1dbf60c5a080702e025eebb869f5d6c66198cbb9fd24e4c61bce9823f4333245bef4cbf47e6502fe7a9abf3dd3e9517aaca93637f89e539b3eb6948965a19996942c6e310494f1c237e8d8177942071b0004957e05def02df972c3f9f2a613579775fe1fcd7a3b5344ea0dd2443dd7dd51b8f6827eca0fe42c329158e7f5b2b20fdc2923b1b480d54e98277a01a964d0b0013bef425a1c908664ea412aae3844a31ba24d34c38fde1dd4b05615b5faba1fd643057f69e5469e300cfffe08dfc8f71342dec1fa7ec78e7a258fa727dbbd7670de836ca4c106f3c7e894450f54f692228d1a751da7040570e7b7ba70c6a4def4e38fa0153b1d8dc9b19928a429a30107913625cbdc25391de954af89911e944d3fa909c973ae996e72d84d8a58c15858dc65075abf682783386e3a052304f2014e36f21334378703da241696d6143fddd4ea0238d34dcf4b2389ab71319860ae179b4e4a48137eaab9215343ddae2e7d717162734cf03ea175bb9321a1be67b7194fe51910a5eade82b982330622468b1dfe7d6df5506238bdbb2285a4a76cf5c4f1cdc54f4a8c4e839a23ce7b8e899b9a36e09f6d0d4e3a39d06c2fb118636f216bb4b397c02e9be1d815de7ec44411678d40af331432f1ea313061b9c5ebf0a4697b62e60e48954e028aa1ca6df44f3521bcc516f1ebb702183dcada6a2189f22c24072981cb91e2b7488da81a3aa75f279ef825e2a859c0089414d1c26f9cbb20da3111c789382a96370a1505b4f007f72e71a4141f2fa21833b49a1eb46db4b355f987d5f0a0885498824ef74645f7ce0d79d143f0d5840f3ab96cc411a38ecc258c4aa5500d7cb5e1b36e2e1875c488638747e78d3245d1568677c59b445a8c4a32e29e3793e7e76e9fd2e58f842ae7285a06aa8eb509fdaf870b181c7237c4b7d6917dc0bfecf52191c19f05ad5921044266f0d1459ba0ad30dcae57daba7e1305f4a94556ff4d68a52488f4421be9069471bdc941c300a36e0132aea76cf68ea3a64fc0185dbad727a585bfc18f5504018f6c28ee4afb0a4856b5bee75ca9a9973a4d63550cbb37f92bf4b11e009a0d6017aa0853bb616cbda4b18b6f91df06ff220380827a8cb26a334a3749780a7cb80037c425ccf53cb701d2099375718c24f9be4e3d0ce4ac178ad530310af49567d63a15b403c7e2ac3b3c87f2fb3df7963487306e0f3e1677b2e631e90fe7556f89cbdaedfecc811fa0e4deaa69181c8de4d9d90555edc79cdaa356fb919b7400aaaf2e73f0b5ca899c5b22f537912dee9555a4a6002b106d0427cf1736a38329d7d804960204d391dd189697c0855b60918e4a10ec965defed97ab330c433f1cf01fe4475228274b579a0670f5d4b68a38646df0b024ef8867f4e21441e93e8e1404c0d93acd6aa05ccbe7582b4fb1faac6f60768d981bc03ab0fd0651abe543813e8353c123eaacacd03005e68fd992c9de8c89950f130e057896febb8a9bfd84e5a6205deecdfeaa3a2a74558285981db1113887c350475d08105f2acf6f6c5031cbd2c9d64450750c007006ea5a1b7abbde246aed05d3e987ebeecc6aad34b24d4dedca574f2187c35f90ed010a87ca3ae549e00482d7ef166ab4aaa520b6fcfe53ef9a93cc39d00435eb275416cf7a507e979cd88800a966bf49085d1ba325d425179f6f51c9752fb38b5a5f7e3f85e07f9c00f1067c5e2f015ca4301136aabc8484893758b26fafa593a642216c33704c816685d3783087d027e43b6916060778bb2926e6d44e74a0d11cf569716f8ffc001233c021de59c72390d1595f5cf3972967014ad7511c11fea4611b13ad821217922df2ce1bde5fd872a018c056a4be563bf446e90a7f90b915fd7cd6060c33f980c30380f23985e07e4c1640de8863a35e6b462d2cb86a1222c192941ce1cffe03d61da2a7a9d160278004f79dd2e7d1244b6a73c40fc8bda2a0ac0e493b09e6c00356b136e3281bd75d407dd16fa64e90c385e019619b3136b857174739fac1a0e34ea3c9127d106b6aa8e62f0aa100a000829d0ba3da5ccbc3eb372306e876403911bb07bbde888cb6a428f1f81ace97247a7f16fa53ddae8a1832614110ff10965780b6abe13430037e14a6c3ba0a4b41d65d4ca02a8f0bdcf05a0c4e294dd23053f0ae81bf7677aaad13d86aceae72a25f0b156665a7626a3b923660f8ccf83c2290e0331df6c417b06d3e60ce8eaffe8cdcc62794a293264a737b42b407b0e3bed206329c9de9075077837fda886c5b2faa4fe6fc5505b476f97b029593c4f301cd80342dfe531b653b53d8f805911660b136317090baeda2b5fe2d4b1b6e37395a44c02d35c45a2d9d64bb70c3c48d1224b739cd044d119e4428c56242417f2c8ddf8ce7de41f8aa82712930f9fe4dae535cae33d7c8f4372822c2969b900cbf356f202048889b5e33bb0bbd9be3762ee4bc20d530dbd1e0f32ab39486b5cc5e8ad2354c8a7e2eeb3833ee33894f1bf3b380d4118810c985e20b9c5484ad8c76f35ef0f760d8acb98f4f1a100c0502e7ebbf1c18284ae74857bf8d61a3755b8d6acae3c4e47eae58f7f3f1aa5f83726b8fe792c2e2d18e2bd8b1adf196d28a16e0a6d7d2948f6df6e35ac5449a26dc66f16ae65b0564fca7b22323204cb8ac73644ac7ec5af7b666fee15f96ebc7f3a327ce5463e10989cbadc9fdf3fb26756f2534df1da4ca7be739b05459924801ec6b54570befffdc7a5c0a0b399e1e8b64fdc10664ff52e2b340b9b5896b075db209bcbf4d3ff392eaf0880921f366b519088bf0d43f4eaa00014f3194419b8419bcf68ce87a84e726e9e7feb30e44e42dcc8402e28393ef703c762000a2ee16b47a7813ebe538132b7d7ca5ed8a6847b1591a2040db67edc4fe3183444118f58a2ce1d88cc9ae1ff70c4481d0f072089672be5f825cece20a95e2b4a9ad35a57d32e1da144ab1530e447df645f0e5780bfbf04015a54ef786b2fe01025fac14618dd3278246ea0fd871920393f4b3210527aaf812d1e540c546f1279b34e876bc4f0f5672ba9fcdb3fb2341da7092ea2a695b6500fa079d792718b576b868407f3608d887ce78b6c448ff6df7175032d05cdc462ca65000e0a0235027c36ddcb415d8abacece16d8f1c32c225c72c8cf8498eb4cba2d2e48d8c3f971465925550547a9e5d1bb0f4970ec52e9cd0b5fd190f670c8099826333684158df44c34361ba918bc7781411794674d2abd3866db1af4ff968c55f2535e461a8e569a4c5c0353c8aa80b797149d3ed192bd07745622449d504107e234a3b0652342d0a1bdf514db91d0ccd1d957e350625152276ec8e684fb9e4837d5758758b9cbfaf8b2ed8096afc1558e31625b6020a7ae1febd8e843cd47e5d5f715d04a69f9451b4530b712515e065b2892b15ee6c24a3ba2c311fd58c739f417d7d6d7d67fe4769bc8559e4bc1b78487078b02da48d5ea77e5e45b5960ecc7ee55f1773601f935a48b271894557fb38a8b1e1ebe93ce0b5697749cf71b5ef697034cfed6cb719bea12dd574986872cc251825ba6b188338d24d2380de243951bf2ef83142f73835f30d9900a15305722984a81eede618bdb9e4bc253cca29b20494da0a407d1dc89a2a2232518817072c321c26a7e9d8acaeb7188efe3cc553c161f7b9565a6d0946252dde353e6384dc71cfb5e6b57ad32c242478ee520374edd9c7fcd2cff85af4fa88c66340264b99d7aac28dc896887aab5de635b16a6b36273d6db74ecc817e3b85477d79471a1751cb8085b548c6dc03dc5157299c1558a36d5b31530115ceee1a8b185458f21ce5d9d8825198510ebacd82424b51b0a4cd70dd1d40a04c2242a5fcd4e2bac1514f6f9b376614df43657cbc0f091063e111da894568fd50707ed074ace88d220672a6f3d83b06ec97f4e287602673f79ddcafa70632f4092985372457a919e2c580077a3f2a29e6a4d79ad5286e4c8f1aedbc5d4ba53511a95ac485bda93500434991804647d024f8f84738d7dda042562f625fdebace58d3b291a111b8340522c343895b4b87d81ac2e98a803405379a113fe9c9f4b50b11ca8ace054644daf09ea0fdf14b1d9a18cc61a3bc7b87f7b473b172ab38d944a0da14652b62341dca7798ce253ec0d6abebe06e29ed01129dcc1b62522a6cee831db14fd0b61ea30cc41bf159142065eedf4f35a383aa6150824430d82f7993c0607c8db37eed850a2c89fdf323731e3846765e957b485522eb20f369bf13c8f0ce927dce89ef365692269baa2378b45a723c220d68dd73092d1f92f4014ef57800cd36caaeeb2d4374573704ef76461f6146cde1b7fb1e6389ceab48037c607ddd0c9a8060c45fa8e0cb5cd983a6a3aa90269909186866e0cd05b9072f321e5e5b258ea8208ff0442a25cfa8a8d7c378041d17536f49d02f56d7dabcbad980a2de93e14539a0241ea5e5154fb7c4ba8f63dee0b757258d68fbc512869db38ba00e21272ea0f0e0103c72b737bc604dd2a93cbbb08125e8ad162b4bef6c7c345ae0d41674fbde33836cf99ea573d0f06d7e3df968df032133059442b81bcb667fd9e62ada8ce8e33e5202dcd70506f57e40c3a5f95be48a1d126669db531950dc03c7b3d4a663f2df636e74e52420614b0f9d1c36e68d4208283c1151626336cd5d2c1dec272816699219a7318dc1ce1ed93ff1689bc42203e1067af7a77af20b6ae6d6ec36dc4664aeae57f1fba82f3e1c3c46d6dc213b189ec9e0616dbff2818e2c68441207267d20dc2c29dd9a0bc30c14ab12cbc1a35b18d3a2b160813c010f97fe48304db98a5b87ae85599b9956c482ac78711b98f640c05add110787f22e63a55ec4a7d764b10a6de938cdf5b504d6c028a8a654684c3a74c892941e0a8b6b740dfc865882a394b16e1916ebea4a466e06461000c30ee454a34813dd50c89a4220b8e4f26a53b2a67d2580c76a5b610b234606cd3bcbd85200fee23e5376cb3d1c9b8c23d43c41df0ece4a7ae3ab662741e16c85c74816b8e4ae38e48bde0b48d967c413ce6797921532e8c2bb20060ac3b740b1b45c81efa73eb3442a1ca78a7fd6d3b86e841e451fd6abb50c382afadf6125945c4c47fef61fcc60ca98b526ca4b328490e52bd22fa8ab148b064bedb0f0c165c6336077d580adc9a7b96e44a645edd69d2869d15439fe8f710aa5bd97d62222c366739e974f0f4ae1442fa16b746e7d1f33db9dc09c41ce89c5f4312db3729f2de10acb2931edffd92e5f08de75d0bdb8384697764e3f48ebc90f5f1b99627d37b9a9ec0386dd386277e0a48481b4c96b0b452996c7a129d96ea4306499b81fb1179567cc67fb63fe639317aa3a9b44848beb7fbff016b12e4a9cb1cebed128ca52d52d756a0c41a92c0f5a898dc424c9b9c6cef0c23822f3bfc9b509dcb24cfb2f90261fd56864215e20c8c3088ea15703d722e356948589b78d6249415c61a56438dfe5611d4e03573fc281acec2f4ff294f51136872ad6c3f016c030b4042be72734963f7ceffc896eff16c2ef2f0cc28784ef1de7282bd83e4182174ee4f115a66ec086cfc03a5da779c7725c590e927c2ae0949b49b661b9c90a36e589ed97fe8ddd3f5206545d73761364c8db69f011abfc3ad214b74536d3c6094b6e994c66484d66148665c435b13ed6921a0be5ce739327a2d112ef48d61bbef6d62f472843232217683fd1221c608f1becfbd2bd2123964e8205fd578b5c91f75134fe535872c357df02b5eb16452128ffe0c97a3a8c2ba4f1063f26b9d6dd44551ee364c911eb67996172b60fa22b3f5b3591aed074daa84d00d8d60aa7a763e1fcbd2fa67f6338f4ffb4a76ec92b460731d4273532af0fa6dceee07534eaf6ee8c23bb6261283b62ba991688036687d6ee39271d409a958a5277cdc410993f6610400c40c1fc82761f2f19a173f3ae43685ec7ef2a107524c8bbb08a4c626dae31f03017247002c4a8af61397f8b5903e9895e4fd443c43e4ff32a399234a0ec45294a8f15fdff218da5dc55a13f589789b8b369ae8410fbb795eb584e944a5db25b171aa7635adf4663e7d6b2dccd8acd68d218af73e953e710c2f4c7fd2d17f03556438d006c7e05154fe5ebd6d383f68d8e28755017793c1b7a8d43a45f63f82816e8ad915060d90b540c7d6bac906d2c765ce9d79bb6c1f2bab347b10a216bb052cb65fa2aaff23bfe16a8395063062357430d5b45e4d22b230a19b7a35f355f6b817a085e9d20ebf6693f18ff279fb6bde5e5e8ae40489efa40ad9b3f9168783ad953fae97253f4909f4d3d3b38036e6d3a73997fbf28ce5985515152bef4cd5c6481d64309c9538069a0391c473604e9e8f24b1537eb0d35f71593cb43738d425467357a1e9a97e82869a1883033a8ceb1caf4441ee47c8493d02077f774b66b42af4acc0da444398ba82cd488ed434699b96e04366aa34c398e8b39b6a692b4f7c8474ff24eb63562b2e4d20e6927301dc4375a41e3a35d35c996940c7331cb2bef935ca338ec6e45a573a7523c40a91233445e20649f2aa3d6a08b40958228eab223375875b6ca162094c73c72d596cf7801446dd0f94a0537e06ad12925e1e986e3ca6f8a18c643d5b6a51add319227137676650dd19c9bb304b4c97d5cb145c09288aa74c78aabbcef181981ec30521271d36dc3df13051e0e7f43f723519e611d0f2331b673110d824979c2ea9bec1d78175200518aabd5aca477646826ade3e2ce7cac91e92753536161ab2cb71d14405dc90cb2768b1fd50211ec485940072fc07a5083d5cdea1062f3ff6ff1f242880cacd203aaf562985c4090b24a07826d0c8643fc7cca06ebde4ba50af044285e59e69e11c174a236334006183cd1059b55b401ecd2198cbd0d1e0277c26206fb7258cbedaaa77570c217782c60a7670328c895878e5964092164efbdb7dc5bca2da54c49067f09ec08b40849ed93c893f1ae3ca771210b8e716687ebba3b3c462517ae88f13f885f8edcc18b9f77ecc8f1c1e3305472010a9c3d98c4049e182ab99004ce34d265d2ca6345f162c80b30c0308611420871e105208078a2851f27579e94a6f83c0f0625b00b0622320d43251798e04c23067cd8473124b8107cbf52c8837d85601b632c92521275c339dfe775a02896546f070c1351d2a289c853162466c0c506244578514404539c01830b9b120c429c14030c0e8dabc350c9851c68b0197e8e9ff3bcaea46bce09df47093962cd97234d8c31b2620dfcb29cd39b329bf28bb5841edecdc381889778803e86e16682fcf931a1dd0498a443ef08b1a6bfc62bb490cb2515a516b4e00444ba033aa1f44213a5214c48119c30c44396167eb872944486c50b58602074250a2e3ad20c2c9f8505964a2f68f122755861a8e4420cd862a8d4c21313560679b962478a3cb04e6a299815076a419d468a35fe1685c8237bfaf5a78f2200755088351e79644fff6b1dfa95106b309afa3dbd312780c03ed5813ab6b5cc472ca162d957fad95d017b5abfbefd820871427f8184143f3af6e9075901fbeced5d017b10ac90d1a75e147918451ef4dd00d34a09fdb991d37413dc5f42cc09f5b1aff48b39e1b1eb257cac712f8a356e84fdfd68fac5642b04a15d07beed6e7c17cf8d560fb7144ec8de53c16df5a9b04a3db6fa5450adfaa8913a298535152efed352ace06e27dc9f6a35e17e15d6697e71dcc7acde4bd5df7ebb20d0897f42cc09dba31e7541a0235132a2ee0f37407ffc6256cfbd101d2ff5a990aabff9d7adfe76635ebebb5791117eb92568d7a98970ffea2b01484805d5ab90c209d9c74fbd0a299c301ffbd41501e225f255f811847e106b559f0aaadfdeb777278a30d6ac7efb6252afbd101dabfa5478f914543821e684f9d96717043adb9f107342f6dd771704f5b3873adc4700ea746f7b2b81fbde4ad85ef535865b09dddd3e2fc6a4de5f88ceeacb5e04638deaedcb1701a833649e70fdfc97fa83bebd0e146bfab31bb37aec478835fdd4856256b7047959b1a63f5e186b84e8a8bed457428e58136b84c8153caf552cf42bdaebe64ea1fe0684c4aff1b3acf37c2ae707028661f7bab93b8520f3e990a6f4e38433ab8b932e4db0e31988bd7f0342b0fcec4b21b67c3bbf15fdbc2d1ef610670d637f3d56311ef9fd3cd147affc66f3412f1278e24f9ef8df9c1fcffc20d67a8bd0af30c8e0c0c4c04ccf4c1c43c2240cccc432a0aa0b10ee6afd64a64fe9572bb8be136948c1d7d34f0ef1b26bd2cfb0bf1ebb5aac3cf4e9d72fc3a39787d2bfe8fd97894cecf52cbff934b860f9338d26348cb08d2cbfc9fef357ac5740be324e03238632a148d165e5ebe7ff6a7e79fe7cc933ef3b91858e0611bc80ed1558b185a7ba3229a3bc2a86d522564c3145d3d30c4a2cd1a15166407206162e5a4061a443c9c09409cd64f4eb79ac47c3055c3174020d219c69240f3b7c478c27e3ad5832861dab254a4324208115414fa0d0a129a8214a0b5a780268082563ec5081902b96e7f5884231b0f2051a4531543140922b9c40c283961418d9128429a664d080e9a6433fa09e0e2e2c352184141bba08e9d03290900283a62c5918e95031c8f8b9c880e18a62781d780d0d6be532deef79acd7cac099a645c51b00ac1996ccb358323f23f3ac2f30c733b10717360123c4a41e495b5c3230a9c7084f54a8001de147f1e9e849092c3174e20989f8612843804392771dc369cb9304f2b2465999de9e19fc410ea7f901534ce98e0f28f614a317a5ef3df58029fdf768506508bc9c23c7075c84ce48e38c30709e89c14a9409459034bf89281388488f91d23116fe0329920a952ec98c31709e31830ace390280f30edccd4508679824a3dbe8d85f04c76ebda1737e630d3c15864ed4c00aeee1deb211d2a0aae79988f29c26c60a8e1f332f9c2209271e31c9bf47032a4005bb16f94306179c35ce093a510611ce900a194d183a995064ca6702d0d0670210d18d67d805d2007b18340c681c5f84c6f19a504408eee13d1cde25ac785de8358e32a188904b8f5bd846c29b183a414611b81f7261cc8411a78861cccc29b960a18306e4c82125015504510aaf9f8a138c2223cdcc0e0c8fa88041453eb13124f8c85c3fdfbe3786041b43828fc4f3b37feebf31246812dbd7b4bad5ed564cb397bd324cca8f61ad4feb1d4126c069e035dde3c4d263633ca3cfb81923c425afbfe7030c3d8d8a1ed003b89a72cee9019961ea99c1734ea9552d5eff9cf9e062f25ee69fc028338051b09471840fb69058b406401082400fdace68006ed9816f60528e04501fb40ee83f0bbc3c135fca0aafc470c3b2dba3e18ad5fb3988686c0bc6e09be03c7c46f09b0b7ee03c2ce035d8675ce7699f77cc1fb106ab3fc4697e9c06c38cda68f3c7dcb1efa4f61aec6b9d99c118eafe50b1650a524bf19b18ff1ac56f9a3ca1d452fa318ae77ef9c57e568cfdb0b2028b72fb9bbd3e123b0afe9e942e07c7c2d94c0ff4c07f84c8a3ab780df658631fafc03eb711c6b0ef210dd448985113bf39f21b277e937d28f65dc56facf88df65877158c693d02c47d7b2015bc496c3f89e7273bf8c079401d0c7b96dfccf8d87b9187ec5676c4f6127b0f088206a007fd1a86343976e4dca41e3eab9bf11b99fa1a7bfd2047a5b1d70a8da2bea6361f54d36ecf0c036490c2e08256c0699abec6deb3628da5e1bec6dd277383e75ee4b1faf8acf8ab0fc69a7e68555f071f4d152fefd89123d354dd6a1fb56dbb3d1f60fb7163404a491447b0b5b77585de124698899e5f69580882a7bdc44778a603bf69d6f5395e733d9409f234204ef3c3698c781932e1eb639ebcdc40f8f21b6ae437ded83f257ee3f7823849172d91ffe3fa5a3d79ab15991bbceb47883c825c1f57e065680548fbeb81a0e03744175090df647f7d0bf5903f7cc2d7dd66a007fed9c7fa646ef0fce314def5acebbf03af33beec2328305e10c220209459bc7e19561518638cf18234184ae9c18c324e036b96c190b5037a00bf83200dc31e4d0a0b3fcde78c3fbf6794b971f4c283ef2af4fbdc1812e05541e21e2158081682ad4f2ce1fc6086b11f8a692e1cbfac65964739af8e2cc4fa85ec7096b20b2f6b9c6f519376661746b595dfc49526e37de5aae21cdf8b386b58fb248ef14a8c21bc41c18b3786841b5de0f50bc16e59784bfbc2019831068959c80e6ee4e718638cf246cf910299b922ff6a5b3514be05f2e9e6437e8e9731c2cacd400fe06b00cb8f5fd4c2eb8f3e124be9c54be9534a61755bc57cf8fd37e267f8703ee48173ce89426c81d72f7d269e734627acbcb9620921941f3f59a50c0b4e6fe9345246f7c1c62cfc2f29af8635cf9fcf336fcd55de999ec9f7beed555feabbaf3e877d59d6b0bdfd93fb1ecedd98ebebcb9776fbb69b7b344ba43eac3e2abd2891c6a93cf467adf4e747e9ad125f5e16113e6109a76069519d3da665d8389e8f8ec6c92eb73d60fb9803ea6880df6431bbe0f61d3d4884117231fae770154775340ef7d9f5d9c723bdbe835370f6aa9b3d1779fc7d3afbeebc036737863e967d8e2caf7e62bf6571c35ec7eaaaaef8ab95c4aeab310c3e39758fd183649f2383563ccb7260904ae65bbc3f058b9ffdb3ec663805cf2c5e7a7d1c5fdcf6d967d9381c09dbf7e5e3dbd59163eb4f7dd8779ff6dc7c14eaedd6a8de381d8de3d3b8715c47dbf8f40e8cbaf375f8f88dfebc0363ef7db06dba9b777074bb74e8689bf9d8431dd8cfcd0706a7c8cf3efa3476f30eacc3eb9490ea72225c9b70c5b6b3a8f8a8eed84b7df3a397e8e6835e29427f16470f92fbda82cab20bd54b8dc37d4c3d4dddecf4a3dcc57dbce27563b6a73fafeb7adadd945bf57d79545fee2515bd62537a73cfbc9e27d28b6a9a13711bc75d57f4201d686dc9aeabd538979619b3cbd39f6df7a23f6fee263cdfc7718c1f3fc60b5e81adf84d2f6ecb5a3def84f956efdfcba33eed7bb8a759d8e475d7bf6e2f713fbf971ae7fab971f76572bfe2627673fb522ffd8f5eea26db4bf1b3cbc31d707dd75b7ba96d6614d2b92a042bec0ad624fed422cc0875bde7d5083bc6e4f2ab16f90dc49a386aeb30230ce9aa459851c48e62ec3026b1c39ae056e51e98eef2c40e0663d2f58d71ac893fb7e256be6d2bff6cfb97cfbb2b8c8957ec4aecba0fe21831230c29d622ccc8b1238ec39a604c1ac7b126d9d39b7b2a0c07c3395795c48ebb1813cc88f31ee67bf9d4d77d2dda3694f7dbd749a8edbb2f0a85c298745dae4ab0d6e51ed8f2223cff85c398604c6a11c6046b92510cc398c0168eb0852b065b5509463126f1e7a54a9227c9b7f3eddbf9dd3eb50b48c86ffce74cbadc5afaacaffbf9d1cfae573dea6df456a9b7568b1e24cb324f326d4cff6df3ccc6e5d9be5d86c6b1f19eddbc09a132559665d7c6f6bdbdbfdf181b7384793309f31de87d4ea117ffa96d0fd03a86660ec3e228b6f9b0dbc4362e6ce383789bf3e7fcb287a307f1f90ee4419e0467bad1ec433853df5ebeb30bc9e0cfca2ecffc1796c71af9ac979fb98785e7f64d3cdfc60bfdf9f2d953d6f62f1fc430dff7e240acd555c9d4654dec3d897d31f421ce3cefc6d0df7efe08b146bee46ef6e46bf7fa2e5e0f0b37f7f3eda68d1079c8ed33b4b2dddcc3ca2e8376adf561b34aab0c8d332f0bf3d4bfeacfcf3d2cdc3fbbd68be9d7ac7e31410dcf999293e4a585e7db0dfbedaf77677216cbbd56f7d4e5ad1c243949fca6316fffbcbf52affab0bfae4944afcb51d73789e825ea4b84fd6616e67288728c54fe9ae6547579b41c248d53e35dd55ab7f63949b0bf7f0daebf9dbb3c5a0e12cd6f0cf7d857a31718ac29cd49827d6ad3b018615ee2e72071a6ed2df69977ace119c51c24f5b78711e6c6979b3d18bb9b6bdc72a6689a16a307f11ca21c239cabd7c73e8728a7a87aea3d2709aed857ea3949707dd94fbffdbba6aeaf199558135335f5aea56e0e921ca2947f8fb8fabc577ddca7527ebd75e3bb787922e1f81995c8c3038a35f1239651c111e57dfc32270f28f2f08c62cd7c202023203c1f459de907fb4575774316767390b40d0a9533273cdf338a3c2652ac99ef1979469e119e9f83a43f771c4784b39482a776b1ef26520e921c241369224d243cdf5b394872926059968324098e3d3309d67a6612a60ccb41f202d31c00bdb8962756a3af79d69f34cccd16f726c205fbe889df6c3e2eb9f9a05d3ffb509ffae27bf3e56df4e8f559966529774fca5297c7395fa27154dfa9ccb3d503b8bbbad9b1bf3f79b95976559c3f77793ccbfa2fae6f0c97a3bb3fd22cbbb28f677fb26d22bcfca5bdc4d5bdbe7e8c91decfe87663d51edb7c68aec539ee83d8af2b7a90dc34d7f7711222f6ef23476a9cfee8493857cf6e768cfaf627357ea537fb135c3febecf25c8f7afa39f3bc583379d478d4a3bebf7c7d569d4355476a9bebaf4d04d4675fbffe1e51f5755fe383f9d4c73dea437d7de445eb7d776db3cd43bdd7bda136eca9f7987763ea737ffd471e3926e5fe7a4dc3cd3981f9a4d77437f76833c7e46ef691be842fd136d7fb128da3f9936c894bc3f5f27ceed1706758eed19cf81228af5184083f864a40538800e11c182a85c00a067a820780a1520c474f58c3fdbd4529288a52509052912b4a459c2815d1822db6512e18ee65928c927a29a594f25255d3e7b64d841a5f5ffa8da43fa4928c42e9962aadf597f9524f6bd497b911b3c14378c3c1fba6806a59f46601e0ebaddd6492a4f292645f2e4fdca452e3bce0d82e8e2858727037b8f9d188b99935c68d2b9343fe4ba432befd7ea914f3f2421b3cc6c1a370fc7bdfb3e4d39b49904f9f56fa6db34ffd1a4fed7765fd77b300fee6c771330bf51c5cec37b8fd7983fb5d3c5765f6e6c65ab23cf99d7c94dce06678452a55e7b82d2f2f1fc4917ed4e2e841baa9e0ecf287df24358efc9aa5149cbd87cbed01f666c7355e6619c5ad8c829de6b381aa18eeeffedcd341cc0dfa35be1f8b1e42050d29632479717d862fc8700b99cff00a7def1a4fa9a494d27fa9e132a96de8d34d841abfbd7ff27b44992ff531dfea6f7caab7f1bd7c8d2c00efcb9f5bc8c3b9856afc701a7a7df57260ff2c009c736830df9b0811a7d05d70ea61e481028cdf2c807f96bd99d597f66d5780601ede8681b931d8bf3c7d14e2f59700fe595eab8b45bdf772bf0beae973bffa54a96f6e22d8e7415ddbb0a6ffa229c17764c30855d4b7be27951ac7dedc3df73fb8974a1c17659b18634a8d73a532c97ec22dfbd29e0ef096bdfddcd301a61eb7cbf399c21a69ad5daf546a1b7a93641a470e500bbea2ce0584185287206664921999e483de818a5765a27c82c93c8b35c5b2e2b35080637ca265583b72d4990e0cf9e044a50b32885ae0cd02eee0051f88b03039aad2d2f1ae81a1d21025d8c35069c810ce392e1f240fb2e88ac9b207a521424145e257a5212f280d79818604f418c10a2959b4c0380116329a4001c4113140c28b28a200238d1864c062c0c186089c902023872ab22cd191359862c9288b24565041030c0d8633543060c82d02f255adea24280d41d806864a424ed8466d4e915262144f7a82a9135a336c24d93773dfd9f7e007f8ca81afd4a6faeb5fbe7b5ffbae47c39d76b7f7fc7add457db7c1eb7daeefdd2ce977128d83ba3cdc775c3755d7c7718aeb24da8672f7f27e4a5427517fa5b002a69fc2c7cd6f0e48cc93fade7c78298e7e7f7d10370af53dfc427d0fe7be7b2b35e86933f5799fac5ee329a0fe7caebfb975dcbf7cb66a4e53afbf6e237512294fc1d0751db574eeeeb1d39afc8a1ea4d35a5d06b9aecb7e7badb5694d9dc6e4411e14813ce88ace69ce394b5bd296b4256d2908cddb6f6e6ff7be79fb38e7dcbe87d32b62d9e6ee9e412e4bbc75dded11b78cdbdedaceb7ed3da3d7d464ec34cee935354ec6bc018ef38f6f3f8ba56d32acde8ce18c734d6700f224815cb362d18300190224b39bc6a5dbb69b7d3a6fbe3db7693b8d437776dac6afb6f96584a4b3e96c3adbf33c6f4acbe4d9966d592c9e47a5169494de67afa42c93b4ad066a201f921ba5a134cd62b1582c168bc56259ba1ec8909f2720b3c32817c86567277a10204380c0a78df33a2e29ef535ef61e360e6abed736decd3ebdb3b3b3b333a4a524e444494889d20c43d8769d96a2a94bfb53745229676d927fe3bb64d8678da9fa92b6c4450f924abdd64a658a4aa51c486b79d44ba5bce7529f7d3c08639fbb67ea7304c2fda8ef3ed4cd1e84f5e7daa56ede8090ccc212e5ddfa9db6d438f6e77374d332ecae28fdb4a5b6595d6da96d66d7340d0ba1d498dcdddd57c00ea4b5fca953cdc92994173ab99626260c6fa6efeeae35514a3526a7943ecd3d3447c7fe86cd556ad6b39b7dcd5a4ddb5eb3a8b70f6ff6fc55abef6eaeb6fb957beaeb6ee66e0f0b637e730fcb6637485b5a699d634f24e42224089021408660e8fe7401891be532bbbbd52dd836d8add7ce0a87198648dba254862d324c91e109d681a1920c40d8422b8504b9f60aa510c70b9b924279b57813936d61783386517a254a0cc3300c7b4c7b0debb6d73ef768be89c043b38e725cc7719cf79d8a3e4ac3a8d4ab5228afbbf0cb6c76575ae52221172141800c89904be3344edb70176b61f5b34fefececec107184a9d498e0973d21411c486b619a93c694694cdb7344b1867eaddadb8f4e449f623757cd8932cb6ff6a0ec47987eff441edda33cecebfd417dfdd4cd1563d8a3beeb56e8cf6ddac56cee61c50c0bc2517ed496b4256de968732a85112e46a81461ffebaaf14a523242a464044829a88aacb5bebd52e5c783e197ad161c5fa61071b52d59eb8d4c28d6f8d78a1535d00d77b5af48d32ee7df409147eaebadef7d1aae8ff26ee67ae8b540d8f75dbcedf668384b2c4216c263e567999c95fe45e55d390dfc221a84c5287188db3e0ac51923a55128c62371c86f301f91fa57e3e18b0af5da6394521fb7d27d836f6a1f3bd2384e59710877f550d466cbc26e3cb2c1bd31dadf88799978330934c69837f88b7e0d6d1301fb88d17f994fc52314dbe0528ac9dc987be3c6a7db16a3c418bf18a350148a4251a848f35614a291286a97277ac7216a3f6f43f87a2dce38e38cac32fcf2c4aff1d8e7edfa388430fe85c5feb216637ced8b426dd36ee3db9ef575dfdfc57d8d1af1560fa72eebc8f49c1ed9e29c53b39a3dd2361e53f7f8244cdb680f4ae39123f1c88c431c9665daa6d923d046b3848662f4a18cc96236dedec8fec68dd8dddddd31f612930fd5ac3f8dcbb22c73f21b59563dbb7179bacfb8fa7ea3fb6ce6e30c13f6d9d9aebdf32e76d9d32cd6cad44c387b4d8b3359e70064b1babbbbbbb70780c6e7a91ebf9736d04b9b0f755d57638c9972dead6ea2919b99f91b9f3b7b5a9d095300ccfafd331f1d8498cf14c70b6ff079e2f81282c0c103a05e1c9f2108fff11b82f0fd9da133ef1d37d3f2412f7d007cdecfeffafbadfefb54ff5fea717cace7e043fd065f8d97f9603ee67bf91bdf6643b3d159bb8db77163eaf753efbecbf6acafc6d70ff3f5af545f430ffa539f430ffa519f841ef4cd3ed1abe97b4584ec011acebe973620a497361f5b3369eebd446bcde6678ed90cc3b0eab79784e058c11d660b1c2d936019b56089e7db8d8bde403fee3ef1fa8df656ec226af11bcc6e3e301472bdf12c9817eb799018231797f9f6566ccad1a965ba681c8b6114c7cdae05f7db1e0d6bede3630f61f65e621758df189ac3468d2fe6579f8aee7ec5bf81e3dde2888fc2069f2b8e79e83c62befb7f9f839bab7310b10cbb381e9b9f03f3c7c1c106b7ab614326d1e685a9bbdbe8413a807d6cc2b8e07c3dc5b0566c8ad109e70ba337bea396d8057673d4822fecb1c7e28c334eff1b2a1576af5a2776e3bddddd9fdeb8b18bd8d4367dc35fe6e3bebf6bfb1b1fc4315ffe0fe22bdab8b9b26eae356ef6606ef6ba9b592f37b3f07cd5cd8f670e4ce3d9cfcee484fd66cf76015d0b76ce3526fa988dee3dfdfbf351883ceecdd04a003efffdcc02c0676fe603705b68a656005c18ef65cd8f5d586adf5e4dc8fefcd845eca26daee7ac8d5dcccd0717b56c0ea0afb5cdb0d8456f1064046304b900691c299bee348ebc5bf6a1ff0388dce980dfc84825b51fe7e1e8415a02e921b4fb0124c3a7d8c99dc6b1527289d14a1b6d27ef4edbd058231069ed159f83f9be3c305fee4865c3d6ef44a34a69f42014881c422910f87449e7b8f8979417b59787762f9bf3e9ea40761aa77bc7ee746ba7bb457776dae6772097c6e9d6ce12a8d6846c4b5a9ad2307afd95592c5d5fb6957597d264f420d9db2b5ab6eb8a65a25b578ba571b8a75ba36a3fcab6307deee929a31c4cedcac1d01a2dcdb268bf437528bb5265ab18add584bc7af420d45ed182737ca7d45eb19629769d6dd98fb685e313a59183e99e460ea6b35deda2bdd27df691ebba4bfe60ffe9ba6faa4ba56e4c742c8dd33dcada270af463b1582c0fed5b2cd6da96c5f28463ee814f4f38c3ecb5b64793168b4c03e5fd4452ee6d37bf7377f79b0ed2361f7ecd3a637fd9dbe8412e08741175dfd6cecb35d4cfcbbbd9afeba2acd631dad797dddf3daf4b66a8077c4d0485cae6dd88584dfb20b6d64e20f953fae5fe755e9efecb839a88bc76be741eaa9fdf56bb649452fa136b60ad620498854fecb04588227cb04228a8684a92232868bcc009104d949038625505924515e92823d802860b7ce0e282262149b40c910489a71798b1442829876d563142c59024314041c30565c4208a201ab4b828fa416805388cae0b065fd715831f21a02d5a9cd1c2103d58094389144660d085921a9c705075a618ddc0c406a2a2254d2f0cd1993f4481c20834b418a1a0063a73da1404a1ea9c73ceea810cb2a0020552a4408b110e151809e289145c145962044ab038cd39279e73cea97302270cab74ce499bae215a03b4a0a18a0e4d3f325002c10c59a2081159010cbaf810a5880c10b0c40e21514a29a53227a534c62aa0bc5c1bd5210546d2156bb711a75803ab18590b2e8fc27004913c22090ee82159d1a5cb184988b0300401a6805203900e37d0d0420f321ce964e86146072c8e9282b028830a9221201b84f8b1a287171419e1824a01caa1c8f00476258c5884e7de55aa780d0ca1ca15af8138576f066eb1688a50a63c6123142cbc200269a354a34f8428c932b4c40d2830ea8283cee5c519326409420aa222271e82884dabfa79473c9991040b424459220d9f1e8a1c69d1c30c43887a872a8aa059a69050781063ab4946a8378dc0cc40882aa090c28c2688b88052152e94c6480193183a089560490ca18b105293ec426042884227924220a138612485698b1d9ece688981040a00acf0e289952c28808109921c9d601e4131128213ad173c842b4d91491017236406bc2003090a17b4404a09522d183ae20a1826f8c2490e446888817d112942085f46b0a9c9298ad644164a03e3c404102d343561040c4ab0021fb628a30631a62009c28a6f062d09065052f4220905e4b1bce0e25106485658c1f8f1562ccf6385f08591c7aa37f4cf4b9530ba3c91c3155b92ac6850126444c90f193888200a095c805e908022b594207205d120042d2aa2e081c8881f4205268072460d3d4c4124436042942d798ae105a7226a80a273a9f043d352962aa4c001079d0b077c55231e175c0841b4aeeb9a508e74e8963c042e7e680c3900516fc83204859205892bfb42092e492868a2628a9a28b600a28619283962861b86c04a5021e0e4044f3fe410821a6cd0a1495a080ac38a2c6820b201ca0b68907ad27997083a0429474a57b4cc382794202547ae4075398090272c102309182d1012c2053a97164a320871a40a209e866428e26065c48a134a2468a214250149c800098c29605882a9861a5680e329a554470aa239738ebce0820f4b6cf162e984a629484e3c59e2c4e588154b05173662705464a935041555e8d02145907ec88205425cb94287d2400551a5a2e8030f4a4aa978f282ba486f0ed90fd8ca693c18a7111a8461460e3bb0a007094c31420b1426b041871c84a4a822050690157a942a55d104a574e579d5041dc2163f94d22b0ca7244a696412140216a7212a2b798b2f8e30d1441a53403181317e8a986104684081c50c540706481f4852c5112655cc0083259d790695115c71022b31c84006a52d5a571622b239e7114ce039b524560e43594841c50f3228e2870a9250a28719c820e464244a105b3630aaf154c50c4c46a0344509288ca723b430a2040b233ac86de0725d38c480d62ec638a3881cbe80610a268410f1839521aa9051c511538ad040c33f6c42c531102c41411965b4c0a589233af40c295e080d518952450a1d4a4408a7c82448f36af59c4612411479b064562b19a79143489939428cbec8418c317c48a30b0e42481005083366c0420c74b82204434337babd39a7c573ce394310c2494aef76e2ea268a308c02405bfc80c408112d68d0b96a40830f3428c2c30b6ad8a2733510be9a90822fa526aed09ca943a0c269c600a50a1c342570885e3491a28934825c78a1890564e9b243953460d0c50f30403112a342a1820b0e172e2e3568c2088c328c64f08412193064a142890c8cfcbc2014c6c32a39f050e4882872a862029debca1741388401c4902986d0b98644b1c18c0d48e0514abffa0da5f4c294524a8538a23409a5234fbc9f9f9f1974e87790a36a52be24a269ce22baca8afd9c73ce9bedfc6a90371fdeaa63c528d6408c61d30522a489c396d79c465ed767772561172488c10d4b2ccc90860b7426162060a0628a2ea40811d1992d6025a43494ac58c1737e073723e2c95fc9d5cb214782725582730b76006be234f2c29ad8f9f1e5373f7e9851dbc85a24995421b4fd4912509010906dd956128e8f25355052f6d18f624d7c59a36189c55e81164b9191121c351c5937d7272c168be589a4d843d265073426a7a11a93d3cc29e7b4527e762a383e2bf2d0dea5ac48f2f39bb556dbc8effea4137c84e38ddf48f12b12146d692e41b9aa58c76677a0034ed3b0afe9dd363bd705b2c36a9bf8f493f13cc69d2ec077e78e9497cc426614cf3f3e9c72ca38e408a885705f168eb56a4edaf6f5e6b762c2cb5ee4751114d3ecec499fda2b6dd3164b9112a32225464a1421398158ce3995286a72e404c9a808afe9cf9a498ba56dea9c45464d8a9434b158ec150a2710ce5ec42aca5e446b8db428f2d02c96a3966d1c89c4935c421e8101a1774722c989849c5322c923bcc6f977da269bd9a4f9990e7680703b3bdd36ddaa542c9c91b989304d82e905a12bbd502641eda44fbcec4646783cf5e7c434dbb4b59b854cadd536b4ebd59662cbdb464ed3e4c88dfca6c9119434098825a55496c0bbbe7176a323bfc92d8df0ba891fb913bf79e2497e93694b6d53b38f1025224e7ee437393e7123bf814a449a707c6fe24e70fcdeb4a5b6e9d6041ac2d98d32232a2b7d4cc6ca7223a35b8db4a598354683291d7f07d631a78e06e898027534e0e99a3aa0457d30bc8e10f3ad56b78f7bdbc5d99257a215af027334c0fb2b66ec29fcfa705edd5feed7e9571bd379eba459bbdcdc31717c1d8db3619767fec4547659c8d5d136f17a1d22f46f7f7dd8cd757ef47bc46bbbf5af6bc2b6c12a0631d45bec437d436017007b185e47ba01b0ef212ec42e5d7484d896a05efbe0955ea3236e4e4c4b4c4b4c4b4c4b4c4bf4478be9bb25a6a1499728edd68f5eea1f4b4cffa3f56389a9973cef87b78452bdfcd1e282e9ff686dc1f47fb49c30fd1f2d2d98fe8fd68f1693d3d0ee73335d1dd3a6f2b4b7d77b9ff7aa2bd678eabe7fdfc5d36e769b7da2d42e0f177bc9bb3c5dd74b5532e1ab97b6154d8f055638f7ac56f353dfea55718b40ea5755f35652bbbefadb12d5a7fa34af59e16bf5a57eaaa057cd5bb1ae4fa6322d31f5d27b2228baa69154128b3c4924c271c8e64db37188f5578d0be6aa188ae371b12eacc9600d076bae9b7d260aa887d7fb6b85f299293a719d2ffd6edd7cec25ae9707752bea258abb3ca8af285c6f3ce265a838148ff486423ddc2e144a5ebf52a578f48835f1e9d537cb78a4158fc421d47b2b1e41c9563c1287e21114aaf591c7cb4521d6c487f9bed9ab0173552f37f5f6bbfef19af8aac73e9b37cf6014e82502f7defc2a96a1a0bab97adea5767efd333fce8fd3fefceebd8ffbfec962f7dd073f49d3c10ea7f18e350ec523ab1304f12ecf93dd77525e374bd9c1ee0e76b7d744daf33cee7bf3815a927aee7bf8ddbe8753fa5d0faf0df5cd94d794527a51795e1fc7937bafa3d4be67aff712739707e57597673ef7dbe5b97e626eabdb4627a54da794917e7f2974f6d1b0bc3cf4bbdeb50adbb99caa4ee3ad9ca6f32e894aa552a96423ad7eb56a42c2124b6ce50efc418fd6493492ea6127d1482a27b09368a4a6a581a8c42c78a53dc910950c00008200b315000030100c88c482b170206889f40314000f80aa5e644c1688d324884190310611620c2004004088210488884a1c0407abfb11211a42486a44b72a685788c9d2359953f5418b3ed55bc23ab79d68722cbd2af5130ec859616431173192dbafd3cd076695433084102c942688d558433f5f36594bb2b6426d1635bed4b309646a715bada2319819aed916734743bed537adc21e455698126aec940e0ca518a0ea1166b2357b811e7b5edc1b2fbaf5902a7cbd4f3dc1955f5ce1e39a5c4dd00bd1b841e7bde6471f5e0c9c565edd29a55915bc03f021e4c7d82c26194d9c3f1a4bc36bf8441d6164c22477ac62dc26741259dc051e726e4f76ad424f1f145d2f256b42e0acc98bbd32f19562df2066016c33ed65e09e2dcf5f246e8bf9276d3368e8d40922cf9652022626be56a8a99a93abb729b13acec2b1bec90aea0dde88a40393a5b483557903662d2d65fb2ef8954390c8f6d26b7f71b96e2acf854ed24e31235554e1adce376af941252c71c546dcb6714ce2604b3b0373344877c7f7369b239e6a8d2de01087753b6552ddf513ec56cc654c0c252dbc6d6273104bc66f70a898bc9425fca5770797c9a9eb30cff20d140eeeb4a01aa9ffc96d5b8652a6c2040212c1526cc0e759890cd7d1517f39fbdd9de7a39dc0ed3bf9b6943fe1fe16b3240ba6aabf452c49761bb9fa5f0da1e6fc6efca0e929706eb2a6801bcbc64675901453edc5541431e60d8e574831f4885b9905e5bb7e8c1552303437fe743a032f82d917288a44131f46861b76a864aaff534a3f86e6b9d93a85125aacd68122eeac4fbbe486a0d744a579c17c660e2c6a9686b2b81070599293bb6090c989937f802ffa865e8fe6838520fe06e2f929d5a524175be2010b3889a60d9271708f886bf5c50c0af8caf46dc98cfd00eba1cb6c812b65f7445200b3c54501e1bde42782f4c37cdf07c0f8d237dbd63bf3d57a64a2dde48d1069d64f10066ad37e3729fa95d39dec1e9f5762496b6bde689adf0593347a1af1ee5332109a80db3e87d4f2916952cc6e3cfb9a2cc1b777c2d77d251281d1fff30a7de8a0652f6c2f9141318ac7fa58d02d9776166b5ca25d692cb809e1277fb81b959318853fe86e94073018ba0140514524334daba0f54c941e72d928a2a008ea015a09505194bef85244c73cd66f044e92b1ef40b02a0fdfdfa374ca8fccf48db7919032d62689bba9e8c14e62141181f37c9bb8a5e8ec2a6dbe0bba5ef49a5bd1caf32f8f332bd36fe234c2eae94cc60f4ab28c20265b5132830a29a56299eb90b913731bac27d944ea7445a88d5b72ef95233d4c41be598877e4d21215c3b9d948394c04637bbd48332e1511f67e7689b8b0c30850a3c6be79d0256188b7ec72dffe701bd854efae3cf56d7c4a211ec72502250acf7ce532756f58ccd648c4670198ffac2c8d04b64996ff8898489f2964d3691cbad069344d29438b7e9f04e6c4d77d56484b4ca6cb78f5c874ef84ad4d3b04098a8b3cf92b74e4744544f093c58410be439d604f38a2723724107bc6f117c439705602ef46278a7f2b0158441c173b2b4faefe902ed902518c65d8d8c89e15bd480fbaf236a584983eb9396caee2d3d414f6850f7c0866b358ccfd192b49a030d852c96d6ffb390dfd6a6ded9cbbbd375fabbd5d21e786962bd6370c276c54e6464bc29e50a5d927be6d8fb52bfba668e592200bba060672bb1c35ecc66594fb4f79eed204782f7dd175e514bd81565acd2cf4ab2cb9b8f9388cd1f43dc05ebc77fad44f74ba4b69dc845baf5f8dcb65cc46a4a2ad84020638d1c456879109d1a9f9be5979b962e1bf0540e184bf1692222f7fe8a76c873dcbbac338cadeb721bfa39cf9fed40ddb904a80031fc5fb9e035c23075b91b8598b2bffc03be6a2376a45884dbdcd8bd0772ef343dbb9b71f07c65e8e99bda06888b3c0698f206e8f2529cfc63517ee63a31c9085fd748ca74e583c0f084ce62c191a5811352457269ba7ed1938ed636d6033e5b9e1c7c12745ac35fa4614ff01f9842b54b56e5f7c76ec1a9667c5394bbdcacc4c146bb318fc4c127ed43054910dec53b4600d93553159166f258eb6635c5665bafb4b723a327c0c9715b35741c0a146fc86f46869666cbd536feca37dea7f1a05ca312f24932ceb34a03f752b6bbcc0ae2e6ad00a9d39bc7417b8ee0863767317baffae84ad94dc108d6e04e1248b2e2e97a6b12c0c1a0b9d4d3a29f69651ebfb31b09f7c1a42c78fb96c7dd6d4fed2b3efae5ce792c8e6ea84e61ba83fd01157ba33555e45a8bae549c50ad7a94b53b0a6af0af509a7846dc1a13af6a579eefa43443a8d346f8a33241705564820c554a9de8c97fbd107984a3ed37ddd9eac87ecafaae22ebc9c13523c54113eb64c3335290b2d361836427f1426be48395e30e81f0197f4ad51fbc648acb6da5342b36cc2dd91959c1c31256e1b548edb071d6ebe11d835bc3757cc280bd984d637abdcdb07386a295310f72767f6d766453831c7495c6050a14266258a40b22512db3dab276b54d8d1b6448d33f726199c7be404db0cf2ff9352aae69b4c940236a537db2b832a799812f17cc9ec10329936b7819e755b691373a425e810a9390f24e8ce4273800f7b516d08ce90cfa605c5025425f19cf258e913849c1ac76aad2ae67f3fa9152c2bcceea7209a0093a665892f99d803fa1723d7f8a6a27aba6d83ce0ac69867cb26e362671b439db68b6210c9724e2f7af103a5a97853e22ce8a808dee48cef22f95ec63c5c4ab15eca6b07517a103552b72f4902910161cbb6a976404258677da55382ebb977cfe2a5d152303ed15aec18919877dc43233248e220559ceb2c428d1a8601ba0105e3552533251a405e71f04d6eaa9a55d61dd26bb3d2a982a1e7d431495003ca778cc47b419376660e3a4bd41b914fd0307303419ca0ed7931d3ad1b64a3b84b91aa0e893304d97e0660587014caa34aacbe757096f5575d975343f64be09687d7d51bf23e7c040483b6e28674fe5062afa5e9f7bb26fc568475ea158c29af0c58b986d7941c7503461b4fe74b83418966bfda7fe5c3eb5977ab897eb5dd01d476e295dc50be9f9b18bee754f5130b802675bc52c539997527f7e88c5682acdf3019862fc98d8b148dc30ef3a1970c4aa34ae9782bf9ac160e416385dcac108c109a05bce649ea3f926b6d91ceb4b52fd9ef65b98329cdce217dc49666dafd032a0d4eab3b7654010ad9d0a7c13b1ef4e547c6ed7f5e14a1f94441755cbb15e4c5cb67f1c410c48cf57591b4d61cba533447c982c4bfe6d0b1c8ded8afe536fd1ea3636637975865a5dac812caddf4350702b2728fd5dd3566fe3ce87264ecc36681a0cda13e237794b4f9e5ffe69e509bc36d66b30d3e68796825733e1622ba88a810c9d5573695e301125c0caafecd210eac486d06237af14d5a3bbedd97eabc479c1cac69941b9b4e68da8c092df14b46e5d559baaaa2d3c4fa8c5bad0a7ca23096232820c2ea16b49f26a193dad017668c16195e6e996ebd6670d52488033af498c27e15efd6b051d66334a9edc2266ef938d3a435a4e3092491d45928291a2a73f1ac8e4d02bc5fbe40a56f6013abfadb24106c7342711b7133eeccb3c5b8448e35cbdaa4c25ecd1c4f370923d758e89af3e6b6158245dbebe3a69bf40f1486d73b8b01b26119f4d7917c1b9ff8d7e1492c2e880c9951241fe64f529893302d400dd1a09004dfd4b0cc18881d855fbea2488d89a79a4379c5a9415f8381e165fb8ccfa921eaf89fc31ad2f49d1a6e4663d02fda7862f0259e1a3ab3414b19bac6da0f1715d5a3b5ff93a075a3ee6756a8b85e4f0d7aa9f834b48238a923ee571e5b8e4eb8afc667b135e3502a5a949451d8ffd4a0e31da8864e44d3701e176ce2a21abadb8ed2becb08589059a8d634aaa1708a31d41277e139cb62b767db165f17135d7a3c6289f68a0a426201d540c24e87a1a56b82b2b214a6fa24c87f966c723cd03cd9828f20ecc06138a387af0adef9db9a899072d87ec99fcd5744117187145e5cb17700b7e25854d23068713785e98e9888a4c960340cb139bf3e55902c30b67c8854dcd5c36b189c9195d3a7027804a4a55786c109535949d00f4970de13fa2c9a9081d21ad2099ec902f8b9301cc3310c2a282b37af3972959e5bbe4100b26fa1d0bf6176c5d1ab79d36982c11deb18d90e5218887f51741f7d5c84bf1cf90546acefad60bcdcbeb739fc2f380e8f8a9f736acdf72484c1ae5a874e188e35ad89e45656d46299cb87b9c7940c016ae94e20381062db73ca199ae660642aa3450a51788501ea063ac3e583277018e9e053b6c496b7fc2c42a45c821b02f2582c818a1184cfa7a78879d16ae5f70424d1040c71bfb9d8d24ac1fab3e10412dd31eaf6974652ab321fed7a1c61c6fe83c1d0472a900c4b2fe7cfb39b4f022fa063ffc82821e69bbd61d64e1a0c7aec459779b56946fde6a76783e146119825668d1c202a1aa189de032ae1d306832ed4b5131147a701b0ac6f305cf8c36aa13e172e9f78cd591ec69280370e06ad8a9a309072309c48ed60d562a6d583adfc20306db6e8db802f313643acba8fc47deda8c93da4dc253ea40d062ac540c96d44443acc03e1ceac2736061d41f2630d61d95aa5de5dfc14d530049461f45e3616585b712c59279fc91e9c78b85c73cd5a435671e9a9cbc9a781604b5dc3cddd0cbf36ff19ebd4b1d05ad0553e7806313f8b4e29fc0466ae19c168f904acb93879a5176328e0a4a5a901ce3bd0eed280dbf83f4573817336920e7342c2070a6d4b54aff3d62506028943011725ef4c1bd4844d5405406ba36f41ba432e0d5c27f9011de988b25c4fd0d6b446ad20b30a5e72dd8ca3d3466304f4e4e08c6d804284d84fae752dab01f8397e8e0d84372333cd74ac939fc138186e035916bc97610add7aaa91527805180c94a1663dc05a307483d5d55d3044c3055ef28221763a9f97d32f18ce7323cc534c040ac3f4efed937d006b5f3e1f14a8b3023f580ae68f4f03c860a7ca815399fde14f5c76f72fc15e52dac389bc99f88c318d4f296ffca979d1d3bd935cb02641abc97a714fea315a4cd0f83ed13d7a5f55621ff90260f2a3a2d0f11d6552ec949b708604ee1f3ca78f3410b02e2d9cc965b4b2cd927c1dbd7839c09f6b1173447f8bc69a95dc3a3a11a41c812a33965c1f45f1375aa1768e3e87d2a78b877f1761e908385a35a13676bdf4849f8da29f11818e424f2cfd98156895e7ae34723f4705d5d6e6d2186b5c4c5385eef2e1c6e48621e2ba561c60711d48d3cbc0045ca7f6db31a9d9b72af720ab8cc80fa1bb2488e9340ed69e04aa92a5d36d0e681cc112498a37c6a7a7bde59668d9830f068880bcc3e8524f35b0662141591642bad160699c5dbbcf3586bffef322835d3d8109af2bdca94e01e5b784f39d8ccea6b9ed9eab5eb60a0515bc4f321068d03b8ebc5af06237c152156bb842f04d143a60230c325411e4eb0ac2b5170fd22be86cb86bb8aee7b30e083dfe6fea23ab59241181151efe375c00efe67f1c1834ba94215df353864262f666f0aa941f75b0e6d23a2bdbdd02587dac17c0c7534ac3c762478a942e4d7b6cbb3bd427253c9040d55dc44a7d0cdab721e8b0f7818e7600a2d99af03728554f5273c7458689766246818830b89a41d2eb651a9223da153d97e64be85dbab2311b1c295ac572a8b75b2e392dc3b6e550451ac34b3fa00fbdad517ecfadac9a3899074c982a9c0c32b2343e6ccaab8b4138a0994ade1809243ebec72079e6e0e5e25e5c80b985d98114c137e521150e68bb0f71b1c67c3593579e2a01d20b03604c870c05b29397b6fea950b0c77c1e04fd60bbbe98b3f206585f6a0e0adf2c5e270c564ba62465ead3a12dafe92976d209e40df1a8b5802fb1e5a0316bc1547229d3b9613059ca283e8563654c428de7af75c375b8ea622811af8d077ac367c5681b5e680df1214e1254acd2e6bcbf06f107a625891142f283a92196f8e354b3acaadc25f2b1e37e0caede4079c8299f2b4c6a6d155daae72fedd3583f73174f0590f23de74d323f49799d9c0fbce188b96bbe56a2b2abdef0dd9031771e933852d718f66a341b6ab3d18d028c144c34032988509885a1d5407c06c27dd641c2665389fc34fa8df37c142aa9239b42510a6cd4fbbec27d53bf32b3b98e841df1566b7cc4d22c60ab1295c836a8f18c5f8ba87ad135fa220865b53a28ffd8e9ad46ed9e0879c2ff9d9893220afa9de5e15edae078858c0117311ad6016272d90df91e3c5db2fc7f48d5871844df32fa625811b33831e520ef2c8b04b5dd89e565338c56b862ac7a3f9b1107578377f8383b8cc7adf606a9fd816777df6e8e0f35935d6cbe7f4ef1bf2440e02e0cd714ac29912c83169d4d69e3e819816769197ae6d878f709cbaf00b466fd931cbace1a9b570e64130bda51afd8244c859e955fa47701720bd2236298a087eb27e64a6a48d5563f820308740961700de36aff07f6501047f7d2d9f36359227e101cf6aa2e2169340810688fea960930c6b21d9d0ce7151288ab869b406516298db98654e20702047ae4e0377f744373179a50e832af52e5ab882e59e04561481398667f79f7051cfdde07983e73ed20f8486b4a7552ed1b3f50a12a54feb611a4b9afd0f6a310841bcda37e423de93bd513107ea601c338434a9bf6ea0ad6577baf07082a83a8563b1a43d40ff0803a4d9445588b8e5e4a1456176fce9548eff8352dc70be08e1a80f688db422fcecac4d01a740dfbe9bed93d48ad973f8bb4d7025a09728ea97d5f2cc7a3d3e6ccf819e0208fc742b0f8ec06ddfa1c65f59ee01d8620c82d05f38b307287a676843e0181a503624850c33f47b74bcb126cf645f880f4326d87cf48aff11b3e664811ecf0292fdc1e770226c3e979021fef7a6be97517f4c269b454caad318c98bc3764d1e9031d31b54c14cd785774d6cc325826b4b4fc3ce2a8301304e92e6395e41ba12a83635e6ba3b71cbcf65e533dd8d9aa3485f373814140e33fd900eada8f1acd1adb310beeab44f24ac2ac9e46d0ac594491a29fcf724aec8b71dc671f62086b955b120ef7a27f75258ef0719a4b9c853709e7e6c2bb27fa816b10731cfdac57266a86c9a63f4d505f19118ec446b94883129e71e6966fd428e9b1ed8311cd284a38d3ddbc304aa8e08f8595f239bc04b2025f9280f250b763c2662b25f45cfbc6d15a88d10d64914cdd949034a78120a634990a2b6050bbc2bcdcf7bfa4fe5481c9de4d8e94f8b756639690145caa0161aa8cbfc54b116f29173413740dca416a672110e7b6448df14b089dc8cb97ca37864bb857b1b4919ea50c6f72680ec042ec3b1dc4341e6292970fc8798b81072d80dc0eda44569e5d46714ad10e9eb6f9043a05cfc3a74730e12fce1aa4e04a62fcd9db266b51e7ab8b3d43f0770931a670cc5f9f51585f8028af108a8ea5c393b14dcb1112d1cc6a177bcd12965b80a2a30cf0b91824965058cd48a200ceec0ab01dd0a3fbbf0904ae0c06a71bdf4ecd85a492e3d1f6c278511bdb57f7fa4eb85cc80c8d10ae60c18bf3efb8e860583fa98352dc73e317c53ae42de0138995ef7c85a647782ce4f36eac372101799e7bf1e1e074307a984c78c65834c2664dc34e1467adb44f623ece0259f0553631f4389628238f9bbc20e47ce8817620bf281507536ff3f783b72d05babac18b82ae2540ae88f2d3a81270c1dece2a40ceca155908ed952bd75a591b62576e9d7d1ec98a6b4527b300e7460040a850bf317af1f18554714cbe2739a96de678d7892cd10c88bb383f0592c296f08750017159dcc24054fc1cd40fa13897111e68027bb189d248a224ee23cf6b4a01243a27a3a5184c4d395b7f35afc20000211a9acf07c87a68d7749f88f5b242227a8020e0af3e8bf204b598dbddc24e9cad8fbae06270f734c1cc087294a94ec23600c7d4c29627ae53a4b3bd5bf6c24515361d89522dda0215aa83a08eb82a063373139a1b89b8390441c72969be06ecc563948cef525e9fc8794bd64c1f09fc1c33acf4b279489b4d8f4bcb36c8ca8ce33e4a5591e240c31872149afc219fab81c166d4038b3a9ca6fe58de0b8192a2d1fc73a1642f7574d482ce1402cb78edb28f0fdb63b4c2d382c34b4e732cdb35485bd178df8e04248752bdad3c87513c12afd995a74e36ab0f6af4a8315a68f39c413e09fb2c5bc1566e9048607999ec6205631c7e4031155a9f1cea61b938a88a57a6061d127fa91875eda1f16221be4017cd005ceb65dbc657eae03e4d008dbfd63dd0fd25c9768364949329d40424540f8190ffff22ff71b2c3b2fc6eadf32c69bd19a23df15c1f97fc27f2ecb9a48d22f10906481037f9cf7de488f206699b88263f489a9b2dc351f04fe5a0b9d97e0acb8ef2ff48b77fc2aac052fe3f90f64c95fffd62cb8f45b4c757c3c0725d43fed7f8ced7c67630f54bbb89c7b51ba3f99ea898c6d6624ec97f27a49efc3fda12ed7ac6618ce9c315d76841aefc0767764cf201f10cdaa89b42a96d3f9bd2907b3ad412b747beb06a88bdc8a39ae612316f5b15a4b8e16b127d925a95ead97ac2894c3b9f48ee921fa8423b2d696d0ac795c074ed705aad39871ced6e5c708b3d240cfe49d997aff653abda7c197491f15da757b73efd35abee5e4aa65184de0c76b2d1bd857866b8a55089fe9c1e9ab3ca37ab14619e84cc0ec29273775a70bbda4b3ed875327fe2ac89634a24d6bb26ed2f072d3651693f7345d333cdd27e73d9b4b48ca931066148370dd26dda3f8bd37e5867b8c145959a3565fae6ab3ed73464697f3fe7e66eda7fc740f95dfe3f4b0bb5ffab603f8cf47751fb1f25aca5f6e7811b0febd317bf59d455669193f61be04eeb9362379a165150f4e903418f344dfb691e887dda9fd3c674738dda9f707ce894da8f13a7f6771da8f6d35fd57e4eabfd03c3127127e9d746f3c3f70d6c4ea2855ba7d2ddfb32490ca023401f22055aecd2f8b7ada85bbce9e4137a40877dcbb3faf11504a2b2621463fa61ba8199c8d0a93e0a54bd9256b13fa9c350c493c37ab282961426d10ecace0b55778eeaaeeaf58ce336037b1d295fafb8099efb7c56d110f71a061150cb757db5a5a9d30eb3a98e8ce09722c311829ed1d4815f2abf890442b0b77792d5a541e016bcc296ee8eeb7d50e9c92508f2276e5320e26a58d596981b29c7049b1e3e6d6c37bf887f7d0d4492d9fabe62ae97416dd1917e5cb8403e00f1ff11b14bb543896c44f641660677140f2e37913b8bb02c86fcd6b283cb3026e457fd19943270e5a78f5e90dd98f0694080ef35de51e680c7d88960bf7add0f7c601de9423c5d0d8b94fecc0c16081c07f9e8ad92d0877e1883cd36518212ccb214de115b4ddffa98036166d54778f27bc8421ba216b3e09a7bcce2f190fa0558b835708fb5e439a9a99cbc56c1a61f1fe54e2f161985ee9b01bcd59ebf8729934a7af2e5aac80a5ccde69417ae396fde18f8291caaa064eb5bddb15928f0e269a74246c3fb6c5068d39782a3aa1e1ae803f1c8d3d84346fcb5513326d39698b89838e71279820d73c47cc291edab7f3125388ed5b7fa2218256b7be70f2667c92c66a820bb216c57b1f846f8ed316553280b8a900529b32ce60bebd0fda6cb01b343b477f1384eb0725bdce22033cccee52c2ccf15ccfc2ab0cca75e6c68346b592cadf8836810ffe74563e5bb225f7b440adb02300c7d7894c8819c74779cddb4c0b662ca27af6360410b918851ba5667ca7ff60f6943bedcd27f2c6d4ef95f54f261bce262a7fc7ded293f442422869287bf7c73d0bd7d882b532f82d8c7fa1e793f547e45044b1040f2d713886fb08ba5bde6d9f55dabb2f096cf4ff963aab63a5e5c4e168f08c92a346a214787c0bb2cda767ba1f2216b55e518c1ba7663b241543e85c83c2f87cb50572adfa6f1fed017e7de7d9185e0d8b0a102d2189e4af1f22d196a6979d257f00d1aef74d504b1d9b8f2578a5758fcd59273ae1e787fc4569614d3be2744f6c9293ae517db7b8c6db078faf5b5a91359eb7bf72565d9fc476b751ba39d3af7ba97f0c9005067417a0a05f2b8173354772f6b22d1e67d5fb32ff7e1bd7b8de47ba837baaa94a0a8ef7a4b5b8dfe65c8e2bdfbed7fafcc4a1fa5779f95189a15ef47a18d1b0c8a14ebf75afde9bb1d06f826c9bb033dbbdf8ad16bb99f2456c44ba4409b700f63c398cd551373636d299760602a0bd34f1053dbff584cbcd4ddb422caa399684e316804332a1da43c38e61447d14049c6d566acb8f27ee1c97c1eae64bd97d6d88a850deaf0d01348076d16ea0950ca2839870ee24aee7c6c00d46922d09fe41b96060e28acb728822f656271efeaafdb04993e86a75836bdb8ff7a880bc67dabe0930fd8b6c66a1471ea522b5d8b7bf0703604418b7be0a7c7e5e96b712f2e5d8add09d2ddbddfe21e2a5239eb3149bdc3e508d7332ac6fde0c8b817e266dcc7b4f95c28e40eec0c1b1461242be72a15b7be1848a652e7b8cd29964697df579713603a4a5e0e22ebf88fdf16f04995eb90186b5f0ac6e399fb6c4bac99495fa9c8a7e5ad03a3e59a03773cef28768257de6df65d2695759062e1fe4ce314d9bd180c9ffc742f6dd1be01cd1b00c99c2b040b6dfa0064492b62074ec94814d7c5443bf4e58ec8311fe404a4cec99a650fee48224c5043586674d3551ede1598c6dded72176c1f01744c2ca9747c67008cc5d77c993cea23997b714f55ea9c7d5f64e40d814c72ba80e6538494c2e540bf80f1d746db7e77d3f3042d17233db97ea1533dc994702d21a710a759b581d49da07bb821ace9792767981556f3f9ec3400ee02fd697fbe277c6ab04a6e712a5fa8061cdaad8c9e373a60da38f342eef079ec2ae786cea377e35c0c822334dc2b01bb0362097e42f1fa4577adcf4c82dfa86edc0885c6a9482bb4d884908baf5de3193b3ea12faa0907397facbfa9e5254a73a6140027cdc7882baf93be103115f38bb5b7652072674a53174e1642280e6599a8bcb20e16461ba68511d3578c084a72b0b878682832199c5e9e7fbbbfba16d7904f4a0410a05fdca276c90e907a0888fb56a03bcf91d884b971f3caf978c0b879d12285e8fd97944dd70ef7158cf4c892b2c95cd64e2a5d991f19d417ba9ca7bbe528aa32e95408d305e95e9bef608757915955ef44d65f97bbd0dd230fd4f90fa0cf852f1ff5808845f068b37f53b2a6328c2e9130e365cc04cef47cf40d77be3fb388f18ad94adaac7f46805a26e9adce1b853ec503f4424a397b8d24ca36216c637aadafdd3569202b2c6f8588a9dec54e98b693d240dd8a93249a76dd0766f9bfd1ed9d65e39c499ecfefc3cc8eb8c57d296aa13f659dbae55ab5e7f7274e1650b622af4838d1e135df645480ef12483bad350abf40344007ee6cca0fefde50020896ac625fc0a3bb388e5c634cbe5c57a5976c6cad914929c99813068004b516a186ea2fd8976a70789caf2af35acb54a41675610b95567917bacd29ab6a29a3f03dcbbf4cce3da2ea7047416fd3b90a28ccad470330ece2cf9f2b1b0afccf5a9f3df5f1b093d51b21769a19f7d569b80ff998918bf430f910a5131116b33c8788b604630173de5b5cf43c0730af0810f36fa3cf2959d990508b50afcd98f21d44fe382c10e0205b510d56c3693370783d922548e49a3813060ad7c8c49f604218079aad222262809e85292456c8ed536821eb2c11053fcd934d23318fd4a3bbf321aafd17caf5bc143075ea42d7fb1871e10d49c97afc21f0dfd65cf916db6d6bd203178cbf0983d7380c2bad4a5b82b0a186f196547efd851610f9788bdde58c761d6bf709ecf717a3bb1fd25d9690874bff7a77a78a4a335ae65143f66c092a4a87790499458e2ba84a6f630acf07476394610c88f31fbd9caf2341cca7701d6479336f09936ba9e6b3b872b6c5c6068ab8f2ef2669796bdd72f800fb5ddd3acceb383518212b092b9bb3e4cb75e2355055c4db629dcc0f3d7e69a5f8f79d56a217e0abab34dcef2198d0ca9291773262a4a263c3d15f4e262813b05ac7a5cdc428f8bfce39686a08e76a4495ce0d0fa63f81ef72c9d4a59e473a613b7d0769de82b35c57f1e0f9a4805dcce4f741fc004796be421e40ffdd7b7dee39db5349185ffdfd54fa16db3d98c52917541399e04c04a2e669bbb6b4d0f2d116d52958388e68d435a682acbec187eeb6161b12ebe00d87e2f757247bdbf85b7100c32291ecc4f91cdb0ea51a3ee6de6d0b72f578b00ceb93812a7ae198bae511ed2853a3438d958a41570601844746635613b0777acfabd659a2bf9e0cb47786ec799c39e03069ad417b8f79c47ad04873487bb2dbbd492659277c085c82bde0f9daf524c7f05df305038e26d7fa8cde8548b2a83ebc2ca6dd392640cb299c470938901126bde19a4d400f2b148999d998b2d7dae49595f605ff0ce24849860c0a3a164d6e2925cf7080f298cfcc8624833401643f06cd707a9c48d8c88752d134246033452b699521c6fddb7c115f29a4a41f6d9d3674ec98c17a4ae65c8cfa985cbdcb4c91999b9a16d2a8d384bfbdc37907cc78ecccaab23ad007618ed74dce8faa0c512843f4811ea7cc94fadf7a412b313d0c0ec599f0c9add03e8ea3e68cbebf428e52218740c25478c00d52922e340b9d49dd41b0f82e9023eb015a6e0d373e1c1232fd0c7a22df095726ef2cb960d865f7335adc2a1847efd78f8d741abb5ad2698326aa9104d66a4f1bfa2823e344daf2fa36f3b1fe4c5d521f7650cf3e47498b230acb60764192671b042377ec7b6706057f192812af795c55d71be770d9433897b0e2c93081621ee67d2f62131361c8df3c56e9a2f869a941b2b6257b5a8a4680a7a49bc4b390b6b1e70c9c924f15a6f77781ef8bce8a283542c541d6bc7be405cd3f89079ad2baa6be27dbc9e4912e2fe439fd03133752d2601fedb42d37362a69a42ce9832b7fb142c0f400bfccca0746b3b399b11eea6b67bb2a843cfd9d0b97928cd1e188cf72d85fa09e625d4c11c0239ef0d8956c77c257682bea3c5a149975bc9a7f2f0d31c75a652752d118f65827c8812d504b0f90a127e5c0f34615ac3e410a6d39d1f87d643524a4e30ef9982924dcb302e8d089a8c3d10046b60ab3c0b2913dcbe8f18ac82996fe7659b7360cb5489b8a80d92c395edab1922b57875d442cdf38e848695a77e2bcddb085fa26a2ff0a336efd8bf0e2bc3a98d3d73e3e2c63588234170614f9b7b79189cd877a44a37f28678e29afd5301669b063c4ee88e35fddbecf4ceec2c778dc40040b24b471c2c14a23a75ca0589ab993025f814e50c44ebc2b186bbf62011a8b88b8e7353b3452c77227e4999249054fb93d6aa450dfa70287875e23aa5cda3c4e7635e77de5f87e0d7abbfb0b3d5aa14dc6572ebbe0b50cf516b86cce2d8c967dfb0012c274aaf57e8c5ea04815e2742a8647461542dd02592a53978185cd1180ac0efcf96713b712f320e15cd959fad2eda30fd0a25d7f78c5b3942e2771e681323faf567d1859f727de80bb968df3c9cd1d3f6e335e3aa00c9166e93ec38e28df6b4a2e58a197668ddbc84fd6957f6e8e6d3c0302bca36f6d12334bcfe080ee026eddd5322d38dc5712f0415efcc0884ed2b6d6e5fe310f0a715cefaaf590e1555dad8b41cfc72092f4d4a82b1bfcfd02f144a0fc13d2cd82d9fcd2269d48a20e0a0d5a87256fa0830127b8f3d6cbe4ecbf8978c8f46478b1b2f76e4fa36a7d86392eb5300be290e47851463c64268da9f36a261e3704d2629064abe04161cff78b0389813826f8fc9020d1ad582a8fca9ca6a7902f3edd723d45dc682bc6aac4af5f87d29b8f629409f7ad6a1f589a4c761c56003a51f65a2df920e09a1d284727dd3609c0bdc2c508d6192c05dcfbf2d4a35f1611786390c46ad9065d4c1eec20fba338ef0d5cc04caa17704b9a79e2efc0d512b0bfbd8d9d7b2c7d20ed451e63d496cd2c8e318eadf7ac81a2d6de4f97c01f08f264f2be26be7a40b87869d91a46c415f5e1503be9918e20e6defb9ddc0b4c5cce4ff0686164174cf18f4e8b751023fb9aee9cc8f3873d61e76ee58b48ea8cd1ea0f9f655bfa8bfccc7ed2f095b915a9f6b0cba6c96d7c7c6a7fe4a084575d517a927dfd1b42e6f6f1339f6c8bdc0d5da0761c660fd50656aafb40bcfd99e608bcb191774334f0b6bccad4440cece78386dc8bd283981df4873a8d4ed106ee6d1b380c333c8b89406ae0f151a634e001db883cc9e50ee0062e5cfda61b78e556397a7a8cdd887b03effc6b9e64ba2c9c8d5ede6bb937a06ac2d11fbab93d020847a4b9831430a254884d72dbf5f1659c012a2759c310e6e32518b8babc52aac8df5c9d162ed0a598c5819b0cdae3c0c54301a81b599a06462aea38f0b672ddcafb0f9f474f8d121b47467f6147cb32b603d91c78aae101c72c1ed8c854102c8266c4e0cff167d59999561601de9504e2a355a66208c62f6c4ba92df163cd51f1f7b6750aa103e74f75e66ab2d7a7034f98f191e132ebc07d172a4d117fde8c4d4baf5466a658ee5d784df00e52beefc0c925d4dc4b9076b55ba5a213d7102daa07674cc876ffec3ef71ec36026cd0ec5b02cc3a936b455418627a729eb3ffd73a49d23477ac0bef3ee8a647e28e8813ac60bf79cedd8fb4419346ff63f064b22eed337c74459f8e651487716e363c5b35fa26f6b3e7634c203b7bff344cc5b5b9ed40114c403372df222770c3167c41f0be8b46562b0e30ef2c0e58ad93cf055b50dc9e44cc4851ef8f82126893f39491c7b9b3465a77b002165c5a61109ace8ff3d7029a7be48ccf8c041775ed64e2925946d3bc7b23883cc9ec122d7669d0e376099b008ad88bc423b5433fc575689252736c51c518c2c6b6bfeab18e6cca9cb9a540105f8233992245cf18f91a666e9678a6febd4f5a446c233c6abd1fb75fb642c6b5bff6303b378a80dbe325999fa55a961c4dc678aaf0198f22e95e68623655717ba61c0007c21af9aac7d8611c1e8d66e3b67d472c1eb2f81c8bfc75da5cd429187cf44b82784d6f98d852b877eb6b836e443ba8a35a0d1da2c2d9f2b19e60d8623188d7fde40d6102457bcaa4846329c7a4f18f9e10a8b7436b22637439d20a1c4be4c0a04247e7d1cabbb13d6fab4bc8baa474e18d88120f9bfef829a58efe9aa69f6690a4f2373a28cefae6f20e6ebc361fc8278b1d2fa88b2c68852d7756afb0046acd434685370fc9807043575d56c0f9ed05d0018fd0fe6b46fcc80eba9c86618778e9916b2d79da58fe807594f54126379f5c5c8470478daade0dc04e1ecdb0703d75cf6d18c3bc6ce07b5d06034c327d4321d5d708d3fe0e23dac9bb14f68193a08e3248358e9dd5bc8ae5625aa25b1832d20cd97bca0d96392aed10c37ee9de5b34df8574d9036f776ad589814d431fe3d6508c4b5575f823971f17722ca47a7a3a5347590c9cac9677068611e5df7bc2a538278947a157a0683365dd803813382ae9ae3e1f5f7d5b2ade2773f70f8f08be45f2d44f2b4a41cbd04fe690692ab6ca33fa01a8b93fadaa8ee66c42c7017a388daf454c9381cadacbb599c11d0fea4a8ffb5d38a88e7a06df5b9f9c9daa5d223626bf3f02f38711a3c5953f6e568188a0c2b375496bccd41e55aaa79e503de43e65fdd1cc20be50053f3ffbd11988a9857a032cb33bc4fb84a6972f4bb41b0f0e71429edb12499cbba6c583b6d844d4630e37e4f9627a5d16c48af1dfe6d8155a1df484a231727d5bddc08301d0c527132fe0a1142340737c582348d218da153def0b6019f63cb60a3fb84b7818b10caba393f4fc5b8960c0e7b8ee6577a2f4ef6579361cf9d89aea3f47cbf13d3c788b8ea686d56762b57843ff04a706ae784390186e7dfce027046f8716c5bbd046f1d2070b7700435eb9ea2f416365292f10e5c25cdfb6f84f345dd12d539fdaab9c9780200c14e391d64a274c2e65801f57dba26ee362c6ee5c9fe4c0c7237f47f61f972720590496a3577a08762127caac1255ae49484cbf6a4e90f6182866bd45c5dd0cb2d0e12fcf2b65c4b7bd660a575e137d83b4d168fe066608d84a5d981187db891cdbeb55d76b5a5af2be4cceeb0320553db2d20425a413db9e69f366b36bc2e84384d23dc6b2299d8582276795429180c574f0c4c059b201f09208e480ed85ed2ba9f45617fbdc012dabb6f901787a28a0cba440c01529431d43d185731104b19bff2194d849e8465db5db58b1785c8f294875c6c3504232dcc4bbf0dc072797186a1d0f78d9679261a88a4fbebbf67ce9d4405e2eac854429788ce9c93f7a6b69e9a6529cf128f818063b5638f42cc830ad90444a2de04b2168f4e1929bd02c6affba23b681a719d07c6867b28be49fe39bc012b2b8267cb87808d651c228dcfe0c9544c60522606bb436331c04a12322115a0d2033548c5cb5c9e214a69d8258bb47bd153fb961dc64da41757621ee7a5fc6544f35643285d3e982566c4b26400459ab7005683b37483482697c8d3cf23a2f2cc94316bdf602629bb4e81fd62128392306383fd84a51f889ac301a8d6814c0c0373810dc90bcb0244ccf72f92d38f0cd238c18597ab7dc78d86d3eacc859425fb8eb59ac73574da1d99769a02e67ad87d58b62a5674193b0696b6fe9990fb931de248bb227e872467ab6031dadf6e5829d8e271634f3c898b39b38bb45c859ed1ffaf807ee0185c5584dbf84971bc92a3f95f5b72a02d19e1e8d42e16429170041071ec10247e8fc13bd11e2c1e41bedb1cd74f19549c4239eea62fd56504cd174dfd419a840b8b8e74f44f3746e6d5ddbe237b37176ff5fcf455fbea0846c42cd4dde5873a1615e8a750f213058876cad034602d888d3bcf06b68543fbdd491ddb3c4b1f4de634acd7b3d0835e0eaa95e82f13b7393b7a54a980cc9a15d38a14e21f6fd0985302e4d501d9076430a777a6f3a35a128940850ac4daac5f492c60bf95ddc00ff02add740d1d33169552cf3703b949d8606d4c479e68a1caa18a5aeb6e3a186cf9c29846490394b600e152cdd57799566205c3847c3ef4796d02da2295e3462366040d766e0ec02dbaed97083e069cc2f36bba5b6c59080523bd2058786d260c6a757cea8087741c68a6af2c78736d7b77f767aaf34acef9cec7ca15302902a664b64f936eb4972402935d85f12be59ccf793f202800cca6f2f910ebee45d2e387be8cca07f690b34537dbef958bbd4aedca66f9e35dce878e29e0ffbf430da9a53738e28c097edbd8518da97271f1f5b4022f95382517dc8c1775dd3374394e95013b32c485114d87e4986f57ed1e1d6959d5572a30990717787955630b41aa0f7048083ec138ea8a56903c73c83cef98ca4f419200ea21c4d1aede3ed0495979b9dcfea54f54481ad6ce3deb56e00f674ed901a4ca72baac916c279f3599c10fdf8d73b68c2201711d2f351421636e62a12499b0cc0841cdef7c929b0db8bc5aa02623867cd9b79639b8f81525271cc4374347b6c3093165583d2d8bc60117eb9ab26907e0b4f2c415df62e842692d2b7fe32a75a0ed9a981bbb84ef708e5c8e848b7b05fd132e0e1fc43eed90e8083eea71fbfa5e205c6c3227bdd531a8b85047d16edcd0983aab84387c181b4648a8db3d6c1780c5ec80d35186063c89f42a7104f3616888408b5dda2929bbeb1de20402e3888fec4e32b9355ac4a2adf7eb7043a5596dd534fb28207e860e571d1fbe2ae2bd44e7384818083faf51e0cb87a294a2bbcb9e1d1108a3680a5f144add5509cc8b83b1930d20ce5bac6292966eb1798bcbba30ebcfa0ea6c19663a13e93fade91d65f795e00ecd92f9f42b365b2b39f7c29e277b95d08375ea2ede48a8fafbc0687dd3a0af84fb2b1e00f954bfe62e5678d44a05a163bf033d61f55309709779d6fde3f526f4e21156211ddf578c7b7d5d922d64302d9bf80fd9dadce2917d0d9a35b71fc442a1a374f295a9f33c80b932ac9c30f2fa5fac4b7f213a71832092fda22dbac098711ffdbe5b897b2debd50f6a85270ed03716c61287c0c9cca145fdcda479b276a514c86c1aea5c719a6151927eb36830852cb104b63930fccbebb87fb1c4e8cf6224e103de0a5c12025c64bee758925ebdf0000d6b570661a01f83a1ec00c5921d102768fade8dc70ebd12cd9610dbbd618409720f1338e98dbd04de8bf9f2aa25b866211f7e498befc08a2775b2eaafea846320ce98fafe121a1b33732ba9d3585df0e89c59dfda32cc44e20405ebf0b48d16db4cc2523603b5616cb692f898ee471e4473586f4cd775d0f4aeddad428dcf72263e045982d081d3189db783dca9266970114fa03555ffdd1cd86dcc763caa40a44728baf3daac1cc85ea5761b748dc8d376dddb201477e5ca0b08cd99c7d6c09cbc8d55120587455fea5351403bfa9a93f5c8bbe7cc38f33371664b5c7abe82b009ec114fdebd61cf9dcb3272ae06d58843f60d85055c7b018ab50b05f6a98142a89ed18964c6160ae9351254e19c62588b21382ae510791a5a6bbdd445f83b4a61cbd7c064f44d0f53e4915e2b8f3714a653c96a0dc6fd290a1553f67a1c0bffa9a7347743ae5d1159e5e14ea14bb3e2c228ae053329a2ec7c88cb2594d83015410ec571041e2800e672a18ab9cedd71c71c34f4c76371719c55466f09d8fb9e14699a73ae3125ca07b0274a828c99f39e3faeb6e47fbd82b2f370f5be4669e71aac29863401ecd5418a6e10bfdb4e51ac04dd8661b2208df8c33a6300c2e4a143c316454a573c028203583a1c3c8e4b6ad4f0b3a6fe42a5eb4203fe27ebdc1066f0f43b70d6e376bcdf1b22d8e944906fb01502d80c676a7dd99e18e1cb4a4d51213f3eb1f5e0b9ef5d7fd27542e1bad19725ba2598c0d5eee842c9584a9d86896df6d47594787f8404da0b606e92b3f9015f0acf256098fae1b40f4c605dba69c14e25c3b8cb39eebd09f5c9e5541b41cd6b7bedd14825e76b755e97c6fa12a8f70b17a91a9c8a4aea13d628043fb007461ced6715f5b6b0fba9bfeb28b9c80b035beda7c05c5886cca5db306034bb9f911a20b58b303f0ab0e84f0067fa15c88ad11782cbc12d81e1a7bc4aba58fba856af23265e32b3ae0b19d0af59d61c0648502a9012b170e8927c78cbf079d5dba741a759a7eeec2e85d81b08ab82dffb96db7629cae12dfb9ea075f0911a4e2f53378e0442b66e87041a813c30846a45b528cca50c7e1a09d138bb0ed34a4a1b62ff54c98e3d1c2a84fefe99de571a521eb215428bb9ad10611df75832345349c91805e4795ed7379747839a54630fcfda5217277bb7a413fd8002e11dda39e4cabf7c7701290488b0a0a125022d13ac7aa8cb5a7825ee42b13025e29276d16a9da5d2abe847e2f04775bc86720c43494a935829ff7a88bb649fbc23ef9574d6e77175eec85ee8c554ce0fa3ab3b3a3e249e729912415259ac03dc27c7d1b0698436011a6e421ef097f768c71dbb95f6245fe1087e3962035d860fc961e843218f4a14bde9fa286ed212594432221d19c8b05c964e3d96d69313b968210bed6a8b28d9b340728c185d2b76956aa72d2650a428da8936809b26cca7559d2cda39b592fa870ddc389d3aea3a89ec41e210e8e0cce60626e633768bcd21b3281101cfa01052dd5ae1185101cb746c1d2b3b05fb091e934068b73f6b27955a1336aee1f41fc79513ed695bcbaab094005dd7ec62300e2b707fe4b12149810b27c97cce1235b6815a6e77dd92c58ed6041a32683b9251c77772775de28ee23fb205f8e9a86d6a9b550706f65a485814ac1cd9930b205115ea718f27afcfec90cc7141deca807b5b4a5bba4d8cab2797694515c4c4d534277ba8a59f9e7971eda92f53a34029724a92f823319b1b1f6b46d7ad6940503e47ad62e5e996ca0d353c06b325522b31c3660bb231bdea2975ebd79139c4682029826fee8a6684ce97d35a63c8eeba69c366188afa26fb2b76eeba8acc5961594072718944bdb8ca906e7364b8bb6eaa253201ebe1dbb970cd002770997d8451d8dd7579d77eeb52044dcc308a9b3c2a96c9249dd73d60d9244b96181c5f0c955c28af6bb0b147b1d75da4561ddaa4c371ef16f467e3989706f2cf75af2058dab4cc4009f9fbb7f518481802ba6f1567b9abb76fa4c948618c879f24565b462a77be6eb348d7575b9a38af6da8ab971caf4f89ca00e2d40e1f360688a646b9c4d866be2e54c5c15eef0b7682a0d608a13641624744e17a749a03f11d00b81e5fb702b6853c3618c89aa07edd4e2608f64e389f9fdcf17115917fdd05b777e86c036ca17e4eecec4a10ec8ae81cd8350f5193fd025cb9762edd9433e4da117d6110743a17e2cceb8cdf1d75094470d31decc2d54be5fa9035342ae54ece71baae6cf666fcc6b75b2f762d3a87a0888bdd2f824c552d726106468f6753106a730612839291e9b0a571bcf174836cc0db5073bca86b529a674e46f3a6c36d35d9a83fc9276bb088f0502942e64e889c6647c1e1c29ac50e3f79ef00c43fb10aeb50b25bab464a3f8a4a8403c9aee74f76595cf07070477ab56b012aa70ae0f80fe5c6d88d693afbdd52db4742be59ed31324bf129bb1705c83cb7e2412d7501ec498be11dba225922d2cb627635f61e86d95500850cad392e8fce012cfe4fd6be94169201b9fe0d6bb99d558ff6541c6aa7d0feeea68cdbebae812e0fb358cfa25640b01f1f3615ebb2c3e1a7e897d55f73b9c56a24729aa9002aa5385afc27e95ef38ff981726ee4375d9856b9a7204aa5bcbc98e09391c5d5f7e47e72ba1acfa36c705655921c85e2cb46cc8d353287bc9585e71fd93e2490535257df4f17edacfaac3191fa054a96b35cda8caeab3bc6f6912559fb1ae63177c9e5b5304f24c4a2f96616992df9dee816578311624892a6943626d12de71e058d76b653c2c3ed84a74cdfab838e38324f3a9205be6e878c02dac53b0b0a3248e2f29d9cde92055a4c7c5e8afdcced862730541a4030370d4d14d1027aa83d446c3eb2ffbaca4aa01d4c9da3d65709b4975ab9e69af7676ab3e595f60f03168d0505c8da539e6779d7c9f49929268af7cea50f96a65efceca1c0eb9e102a506a7014038a39943dedbdbf8f2936a2f289536b2aa422709e680bfbd014784e3b4be0198ed7a5c1c73985215a073fa999f35157b5db6961b9ab8a35fff2a77dfffcbeb8c34f264ce2f137e06ee27e344bdb7f4fb49cc3404e8fb50b21cf76b4e2788b1226fc31c427ec63c0f6eb03fa6235e39506fd08e9ed6601ed41134790ca90993274381219f42458daa38dd04adafe599ffdc678ec077811ab7981d2037c90bf05e278448c67a906ebaebecf203daf2569137f2ef7ac047392c5df67363738c869d9d618e4cf23b7e960a9ca908efc2fad4ff6aacb9df77677d684301800f7ddc66331aeb7986ddec3e2fff343f656b1c92d1b0ce591adacc1fd9f3b51e701871104d4ae9e4b96e8cb9647c973660233e160cd13237c7865461ad2d147a905cb28cc0a413496b3c4f4c212d71b31a57c9a5ef3f95bf376d4bae2788388c8cd7a7f9bb1653528eaad09feb03056c5ef30a241662828a7b7fe49da8988d3eab47411b5bac7a78755ec475e97858e6097b342f16d5e1380c8f30e5c0f7fe1246968a29c59f75d56f47c38cf5dbc3adc6afb1eb9c895a847a7ce53a0ad1557e87d045c48037a31a341714bcd743778d3cdcc2eecc5b3de5b2998620334ced6e659eae686d121f5a6ca475d4b484ca78f55e2468d58bba5f57e6bea9cb41091c054dda6ecfa5413680a3d4a131edcb72f76cd4871f124b2f3e206ee5b7c7be42dcf2a0af0d7b965f82872d25db676ac476dcc30b0141d42d4ba176c04f812837ddbb104f1008317e6b64468b5fe2c539d80cf35d27297d340ac1b461f0eb6385b3d29b47236760603e401751c85e6c5936ecd88b81ca94deff1a9cbcf8b0a74c9f8d486784dcec262c281f50e8450e54429c0779071d4d70bb5d21a7a4c3a914efcf542250740733793af5314b9534612bb779d196dad07d356905025858970d8483263b005b56913103b6a23b716537ac73711547a2722ffdd19189d1ae2629a6016da483839c240dd611d25221cc2b0c61393baf303a7a2fa8b0afe9f92675f5b77abe2ce3a7951630146da99a144a4b9d786cb8c307db282ea22df1fdbcb8fbc6e43325e44f88a41ca1ebf94a3c8ce08f07f75ee0474b81bfeab0f02aeaf3edd19ed61c76f29a3deb0a0b347d6872d3843119dab0481f86d00b23d8079652f57804578d4049cd8c69c3a591140e1a491350ebf08664bcb4fd12cb49829b573c1f6490911596aadd967ea418b5b62a5a18d6d5b0b115534550886e8a981fba924a27c26045f08c7bec803b0e2c28e52bb8f575a31b2d2da098fc989e8696aad3b80e0c234123ec47c946a913b156e3619ba20b7557e8fbc7bcf3be16a3d2fd1e4a7d34c6e2b4fca9ec6d53ca4ad6edc08525cb072a139926754dcb06177c488425d3ed2dc784b8e177e2c2fbf88b96194e18048d82a45f6b5286ca046e58c5900086c3380eec995b8878aaf969b313c7dc880d508e0d95b30054c50e6a0794b4b0519e336093e58d297b5952c533e5750d139248cae2a7c8311947d153eb1ea1a436032224040119d539d6e15ea1b5b1d1916c728e84afd98a57ef3bcb36e8ef3c9d6fd517e12cc62d589111aa660bed5c1cb8c7a99ed6fd0865c3799c4d38a7c1621f2c0613f3599e3c609084ada36e95d99250dfb239f7571a6d0aebdbeaa5ac2db8e2f6700a3ab535a7601760fd3e3f3735d4dbed1ab4eacdc27e353c1d95adb86c88a36d2a211e529ad6c9f3218034d364b9195add9dd065757779ec626e1c2aaac37ca5d0798862daac767623c1ea54761cd127fbfadd88aa61c533bd43a69ac1cdade4197f951f24b994eb76fb522ce81b029976630d3561c7ab519003ba2dcbb41f37742ca91adc048149f0d24dba555018c15472cd1344058304b47171216443aae89a512935a41d8207501c0392210e79819a70637c63fd2d26d2474d7aff1511e4b2fb62dc126dbffb8cda5dccfc3cd5684c6d6eba73f4c50514b162cfa59eddb476bef022cc65049fe862beafab27e5032a562f7a58cee42ba2a7760e0e22a4dde66c23060b8a8b3e05c711146a5135f18e83e2c1bdd6ad78ad59f2640925b6739fd1462e9120abf12bd86fba15b4bede422cfc25ec3d7956486859696cb01b147a8a040fd4f233b3d26214391ec6ed0893a56b2e9187b27b0033db4314986077b1f7985780a38a9f43631a9d1b08d75c6ec87a0b77d1e6cc117c46461348465a3e81708c12af8dd4ea7f2f4087a5e90d3be960ade227cef0b1c810b5304ba7e4975a745d765e68a647c9bb50a7e3271b8dd82ca60651c9e54c17b883f594205136ceb3792ba2dc243366515e9c2d53404ad4b34365f34d761691ba16eca9d9ad0c0feb0638f1ad6cb46f1a39dd8c3348033e7ea5bad6b1b764342bbc206d0ab7025324ee9eab101d463cc2db68966289c09cdf34f2382835cc6d8ae0232f0fd8511c58e5398df16c771a6eb0cdc04cd4bf9aac758022924fd78c68968e37b1562990eeb43fe69fcc63fc1343ad159bcc3cf14692caaeb247714b10760232197e22311ae00f921f87157b2468d0b4c26304665333e3f7826d21958c645a99c346e83dcf325fc60de06e1940e2675394a46da6e724fca22d499da963d716a8465d70ca4f87bf8579ff022c3795b5ffde917acf04fdd3f3d943d24cee3d410f48cc6fefaa4d101e72aed48cff37d16277a71ec601325bcbf5d8e52e517fb8b004a4eb401e148bdb11370bc4c2332de87d3fd56d3b1dda25096b51585cada97fb5bd4755a1a40ccd3b3e10832fea1eb2e6e29bab3a4c277566a6bab44cfaee578634fecddd1dd678db79d8efb529c548352750d88ffd63d4792e0809d91bde5db4a503eab9dfe58c9db40ea3129083f1ba44cdbe93efe0bcff2dbb8ac133893089c40f38d3b0801a226b5d3884362686a57ac65a8e0d162fdedbe71b5a37ed002b5d13a234a9ac410ed701af4444d59cf26b9f2dec483953833094266eedd4f94cbbdc81b8510c96952331e39e45aade8f1b8d6e51977c751e6f51de121dc3afde3a6b156b46fe57b65e6703d01b8b8084cbf9ee5bb1950c44e25927253741c82391817d0ae93cc7fc2aea083e039723056a4ed0666404a6e63ce6f8f71b745e45ebe0af6455c0b8b8c41762f6076e08f65a8acbac8f200f65f08bb174b8c02a331358e5376a070a87e95610c461268bdf1ebed1ba6c55c1106108aff778148861a12ea19248ac303abc1b93f89903c3ee445fc17e6766f498d7c0dd580e12cc547c80894affccb818f6e9a0d00c4c48b66516ff05f3593989b97e3d2f85a3fb0c5d39963e8d70d24ffe85f9f374b4f1fee4dd102452c45cbb26d0bc036057e87fcc185868d8bfc9e3044fdf36fd95aafefda549cbcf7c35c321238a0e7cfb767d288135825f137175a5b6be82d96c309f9e1a9ed19a4680eeb649bbd820a1156defceaffe919ab7b339da2334533ed65c7640d026b87ca3a1e33ff4ccc43130a51d8f728c287650b0d0918a2b0c1e29554d1d1744c54679b2af029c531ccbd1a4235940cc0af85eb9997df62bca4f156de7470c26f37ade8105c93928a098d1f14eeada04380d2e6105688e375e235b09b57fbd9fdd15a7bb00557096702a1eaa458c21555c6fb1b3bdd617055703157202c1e84c886c760aa4d256905c44e2019118c236ce174df4a1ac283dc7a4d4009a0fa4e40132127ffdddfdaef3684b8bf12e78d16bca9f033d7a9b7a7e33487d77e80047618ae85a0217cd80bada2d9405d917bbe1cd789ff556d11f2100b8acc2da53730a2c154d4d53bd7c8c51248497df018a59a9f6994314b5490beb6e0f69a4641ed5adb2d1e1dcefb044b25e9bb2892e52043b6e33eb4cae21d0b2959a81c20cc803e992ebf49432e7fc2b657366a5a06f34ed2e20cee44ba510908164682512f3da699e53057cf3847d1c959139db40289779623bd8019b800af266ab02e6c0ef3613ee8455b09c82dab35c7414ffa80be4cf0414e6a2b4415e7992a2102a383ebbf3a074c4fa37c2e477cc63b15370654dc112b7093ed41e058906ca21a0f99f0b04d8dad78eedbab038560862e5bf33c7444596434f701ad326360f0420acc17c729c85b110a599cd5f74d4b17727c1bf86ed1dba2f4b87302740b2bf452266014c93dab9ced45355b905959d55f724dcd9f56e3ba853d7e2b01769f81026556b8e0131d5ccf20e210b63b7e047d948d315016f1d34a966b4dcbdac01f32eb0b8b9ef5903cf52d307548169e02a6623d9474be05be65e705ea75e0a44f048cd30a1760728e86607e5be7c7ed28b9c862652f1bc449240ab1904ae0256d78b1422cba71138e165c95f4c3a4587649609cf98c53a1c1f7672c09688f21580f60c575183a20b1fe2e4001a226f386755b4f73ee87444b5c8562f42cb09668d14570e1cd2cf4f0908a3c4f7aba021b51657984419b5329a007105b684188572b7001f3f345c4cc17d4754d56682622e4037d35a6b30868e4e2e894fb87dd5714c530fb251349b95508e72637f85121061e566524fbfe666fc5701f96a06dbb08a1c892a8e30c799908f832dc42f6240089a499cd50bdd313d9b56df2ebb9a557e4b8e8a5067c87f6ce849bd1d7fc9d64a7128364126cfdaa093ffbbf9556ffbb62892154fd9b5c5a2c54617512e2f9fb633451939b35568c0c8e10ac532f0b069399982c08962d448be1f44badf14aa0d00fa2f8d0167296f54b430c7528ace0bb3f97d40bf28d4a622f40568db5a37ba67470730d5a0b0aff89e27fcd3edcbe572d7a68d42b7f542764b07287a7edc1702c28ed7e4f6ab04365d40a00bc9089f35c2a9cb3d9312a5a7e75fe770f40c35c105949dc1da4c885f05fc8b9dc57ace5418aa15b7953b4ae98a66200c69bf0b5ae12fd86bba46d61482b6d45dea5d41f02ce63d9426c60bfa2cbce6b985c270637238bdfb9ca1273f55140f03d68855d491552e61bfa2eb9b431ed01cc00838f73977469af211afa4812a1fb9a7a5ddaad016195da238e5c512a6f5819fb9381f79d52da05dfe5fd09e37054e082c0781b968b54bafd6f6a95d9eaaad14a0892dcfba3b8541b72c2681ae00243c8d16e49fc2128deedc9b07da77ff2c70cc0a9436d6965e782bee95a66598122578a0e0b14c2e5d9d53f0345c9cf9473b303ce46a062fadf36755fcad3df413303c99a45236ca0fb4b39d0712c1c40826bf6bab219ba50579db2dfdbc235eaaaf1de8e840d65c388a4ab2518064eeee2da2760c7c5dbfe96165be97d921fc421577d9e61936be42142031d3ea0ec477a0bcdef0425c134a23d28a07d26b20a0f5686e98c16b7e605a4922e6ee73c643eb1a078873fc17782c40cc86708666182c6eea0cb8f295ac46eab1e96b162afd64c353911494dce4027b4e3c8bcc50f7ed5fdaff2cd8e357c34d0aa45c69218ffd1d6efb6ab5fb7fc98cde15d30e20a0eb4baca3f39ac0238478bee2815e05256ebfe0f6e91a704f48b86415ee36eb8d703f018375a00a8f0fe110ec79c6709f8e3a38d7821e31e3da6fe412077fb9af1b81aab2b425a4ce2f56e8fb115cbee1f73699372a111c4816b7ef4989945bc858ebb141c5d17d988c140ff4f52b7a0735afac892b8be857c872d3305a2bad03f90a7bd3e80325bdb98993d8d9d24c954d79b7a9b2ea969ff7d5f7f2ee365d360b0ea853cf068330f88de6d923670621d442fe371e99b122bf44990157a6f8ea7329827f6e5064b3365ca41f20305b6488e9c0765d01b0d051840015da1103eb727aede7e2079e5ef2c8dac890238be2479c800b0e6644d29c55cbd7f0c428188ab7a360c076b14a792b3fb9ce26087061bb819de1682ae644c4423800205c0261e58240b2a0eaa768428f5feb1238740f5c5d93f5af9f7c5fe2e3d4ce072eb5089344f9fad2a315cf6f3aaf0958cc960fb46cfc9b14166fc2d5505e90315c2f8df62fda90057060cce32f731184c056996cec976e075200c8f7a4978f0b65fd8fd956ed5535539c18fdb72da80e2885683f7ae3ffacf5f62ce20a5b503427d09c392acd72ee8bb0f9d79fa661f181a0e0cb074ac1f2dd97e2fcc49516a82ee32b9371027962398d6f564fd8aef146c7ac9dcdb72ee21d015b6bad562faf93b211e0034b3db785039d93c55f038f0037018db58ee0f830ab89bd58d6d44f841301c6fd486a921f1b131e5054b430daf5b0c640b19b0832d657c7922ce768b6c373c2ad7e8155652199504970937f649d523522e8ac1420ab4adddcc467cb6e828481df4615faf412aba55a61337d85c497023316d35c6288f8c79dba8ab87eca9a001b2f1a4603066751ab85076e08865a616ad28084cb06b4f684ef0dd88cdeea7ad10f2855d16e3dbe401c0db67506119dfc6a35e6de56d842408b7f4302379ef3c991e5a95573a1eaf2a6143af3035992c081a5f11192355151badc434a6e79302a46f3785d1210707952daa7dfce5d12f4e585f6055071e8c1371e56132e39daadb951ed2a67c29cd5a0424cb600f6c14bd035f65c027a2d1f6c788a5c41f5d211ea21697d70d0d0bc60afb1fc6de404fcf0fc20e66a3c2b8dec02c28a0733f8bb6232695ff3547c45b70e63625b12b2df1add0bc1984a56fd0a680ff02ecfd79a532e00310d6c1bd7f1c099c2960c0c7322050d7fd1e8e3dd3a322679e4b78bc129d850f6dd8073a3019070e4dff6dcd5a8c69405d3e8e2047ab46954566579de7efb4fd191037f3143f9994fac26a4d55b14681111c3761deed439840062e480e9cd0924b8473b3fa7b531c252f1b805fd045306da56ecf4f9f2b96675392e69780c57ff543b20ded89129d2b15d510e1e7668fca221b128a5c47108563ae70b9e04c3933d64758d93c08f990424da4731640b64091b1071d0eab429d2f18a5fd075574e046557d02a2dfb368e55e364edf25cd6d880c8a40a3cdc7ea5fe7ac6348372324f116688a4689b0bc5363b049868350c3f207899d60707bf9e86f8eb83f06d79d5af9e08b4f2e9535a009822c3bca82a2d3929f9015090a434af94aabae418a74eaf87cb016a8572f0175b8da560eefd5f3b3ad2b0e9d5b47433fbacc6b512930c0302b4b9a1bcec6c0183693b404634a438fd849805ea7954af99ddba7271f14481ac9b3bd739a40d598f623b65fa2de8d605ad195d5597ba8cd26ca7e3c98e33e38c9c875a71071d77fe42c87d88030302e70fe863716e17ec25d719c0e5bc2a4a775ec98639033872d632e8b3ab2946a1d903e4bfa3c7a4e59b3274b24bf7117281b55623559e210cd2947c236a4f15f28d3a35fc4634ef9400355a110d4ab7012b1f34b4bcb35b7f5b00139a90f2687179ed506b313bc3aa332761594e786195dfbe58554efb01dae5a0132b92bd31535d8226cbb53c18efd8d5b0b22458098f54d4f07e1996d3e6b8fc11d98cbbb0eae64d5d666f376f4ee71b37c2d94c2796fec1a931edf4780c80058dcb6db34cd19803c8123406c2e1141e80f3d35fb8f030a2612f441dce6a70ed61cd32d9066487960163ed1d0dd551275bddee75876a7a581fd80739c90b06ae1a89ab03cc9443b86122c4455191caf75f60fa616bc958bcbcf37434be9a999f36de1ddb83ed8e3f1a7b7e013967fb8752b6e3df5d5d98b2108668fbb7d07d4b62d79dec2a1889dd096a84ae4933c0464abe16321393bf6adada0e84e9446526b245e5dbb5c101ce17dbaf22f75b58dc81d4db2bb0941dd10cc75b4a0a35047b08aacb555afe5a93ca3d4ebe9ad2214286b30de54529c5a7a03669a0f3ff6dd177cebd346bb3e89d46ea27cc4f6498c3130e7f9a9138920aeb691c86cead09f0da0d60c8af1b657440cf20dcac6310cf38fd8119e20768d2030e2973f8571d5fd95383147aab56fd70ff08e359294e431c81ace37a8e4ba3cd2ddb1ce473a30d77790b8780ab1132567639126775a2027e7775108b000d3d8cc80b46940634168604a01668950a7566439c4a541d872265c49826da9a29e49b798461d4b2f54dd3e75af0d18e2e982c07e4165ed43b993e1c166fd1954ed44c42dfde4dd9ca3094469bf43f90fad6b69edaabd0424c361d45ac7cd96a92c5e41f19fbb21c47d806d88d308734ade7181bad793e2607e809507b24043f9615a0055cf9533dfbe22b95cc86a856fed706d1b10f2eeae3b278bb406bc1b6a0e5cd01b5229142fc98fe3f0c88cc2076088a0aaad6072f06514542386af1a6e2a63981facc1a84880c08b11a53eb66c429a6d1cdfe14fd3eecbb0adc3fd5b2f231de321500cd9476aa4d730b2316a1f996c44fa58efdbd19b40ddad21ea628fafeee9cb335756a4921f79c8557e23d1b87e291975ddbfeba1598037b93ee9138a73ecc131652dee06b1b222986a1b037217bd81ea880c148bafdfe654cc9f392ee1c59d7f27a96ea9dd9f427ba651efe1e2da1e9e6052e0c0f1460ca81887b1330f53dffbed08e37752d70657f614772c67307d1f78fc20d681b9b21bc3ee0dcd7fdb294c4f5771333ff7fa83907ff99be9063f61dd8155c803fe8d21b636cc6b3ba05e75046f3c5ec7d989f7b09a2aad01cdc632fef4ae41af46c540a6d2bde576b9e3c7556706ef831d3f3cb19ea944243bb56f098ede31067339a4dd1d2ead412601806c73c2aeb62058ef9397bea44246b934539c947a377d4683cf1c63c4e43df79348136db3d4f4141c158ef47bb940848360eea9711bb2c7619b484a7903780fb8eb3c018fca569f0fab43acee263e5e8ad785e7daed974659094beae5b8f1e44aa2c3bf88dedbbaaffc594e588279790080748095bfc6a4a14b4d10dee01f27a2f9088826cd78e0a8fb18fe681e0681a72b7499401967fc0f1e52f966b90c277ea4424f820cd9c2149160b58a29eff4543c18ad9cc1120c2fc9b06e7d5da4ea8061fa713bc56ea4d8d47c376aa75a8aa7146c8b6fea0a53386f4b483ff6173dda17124cf1abde5656e1f334a761af4e005e70f9ed391219fba58ef4fdf3b43d7083fb45043400942309db16966b32872b64e063c60b91d9c8b98a91eb1454f1ee6b3eaa3950b911a252c0ac177c0186e5d6e56fcbae368eb9d94c62b000325ac306dcac00bd2a0fcc38ec124495ce21b304366edf2b82e13cc540de5fe89f2014c3a462ffb8da34a2b6753d3415106dbf7e2ee992f700c2a70f0162108c4ed0e4c3704e128e0103b2b75a73754c34010a04a53b5750cec83a1d149c26494001ed554a1f9ef4e2951c4cd6700cbe4ec0a46172cc02ed785e4facce20fc068027659861b1023819446f6cc9cb1287f0fdf25d97d0d579430334c8a66fda665a43194dec362e871da54c1b423ba903a60399039ce3664fd07fa55dadf403024d8ba725d5e5e66a00c44f5c940e429eaa9b7f484ac2fc9a8c8a9a53a7174c4345ffa39cb62865bd8be870a56f1f68d7f5e7ac8b79abebbaaeebbaaeeb0f6ab38c990cfdffff5bae371bdd18e9e8ea1982ee365bef1dd76f2a368d0ddc0e29b989ca63e9aa058fd11459e47464f479b6d385cb88cadc69afe9ee5e2eaf0c93659cfc902ecbbf1c9bd880af1834b42112f9d8b534ab80244d310e0e0984ca8ece5082c4c3c43a02ab3c4b30393286bc1c15a36e543cd8ac2a3b36dbb66dfb03dd32cbe9a63f8d8f4d00051c2f23463555c4230760573c406640b6321e5284beef1c9ff0c57343c661e4cbbb1464eced6469604c093b2c69c24ede312b89f25fc9978273dc0c0ac743d3b901c9fa2c8038c9c18add301ab2816e51f05cc513fa9ffbd712dad91ab4ffd1e393edf8c5fd1ba314ffb95e85c8d13ac2fb6e431a22f560748d003762b253a8991bab2f5ba39c8e1feb6869c425e82b6379f31f21678fcb02ca4a83dc106eda15d363efd5a904eeb953f7de7befb8940de7ce90d70c99e6e62446562554d4e28c72c58bf972437db7379b0c90c4e58ad8500dc7ddc55b573f29581b0b99281bdbacebbdef36e63b66c839e77c82a790a18d59294e93d6e4b204cede94892753a21583bd6973dc970ea133768eae58f284ddaae4e5962814ffb80ff3386f1659205396784c2f11004491e4922851750cc32f689d6c54e6ca826405ab53020ad8f4a703a408e5c5898a66dd81d6e6db08adfb6daed810e59c7361ef72ce398cf2840d3b64175125d78b9b67c0404a5965ac20c1966e0e8d29a263a4bb5a015a52b2930fa4501356d9b8d74d2e37984f604d97c3d4bdb01aa572d984d5e38ca9fcffff13fff4aeeedd70b4d0ac0dca6253c3350b5a85d6b4ab4ac1f9ad694a2bf59e98a04a213e8b79aa4392a8b321232ccbe5a9ac53e20a819a6669756dae29c7d37a6741a7b3c0fcd759e044b4bba6cf6ef276c680973124b0af4894061cec11b5626547e1165b0cb4fd7c52b02ed58593450b74c6a85457d50d322c1f4313b3bb4759bdf2f8efaae4371ed7a98bd6141790588718a90c4b93e789918f14fbb1b211ee867f602c6b06a35514d26a6727bce5049970e22e006605059592f441dde2108535cd7a813e35415a5098a580f1ada00314ab2035672877ba0c6f04ddbb3583db69b5f9fec0ecbdf70e4c82f6a096774137b53018233dae4daf1d970c3860568d2f97243cc28cde5a7438be283c9934490f2b568ebbf78ab4594ec2aa0d36775771c942b8306d9439e7dceaca39e7fc04011c98a0c23adcfc7b81d5da246b7c984664aa9c74f2bb7b995caff7de91983486b9d67b52f4f70526f17879c839e7fc3613a13ba6a946717dc0c01a2bafbeb6c8942527c45d95fd7fdbcdf6e59c735e47dc581cad31d37008cf177c040a173d884a416f9db4fdac711cf1ffff7d2603d659bc5ad037f57d3d2ea2dd19ec217fae177845d2f08a0601d15f43840f7e4b596f724685867a01e455149be2c2d10aa74060d2b4bd779bb2ded17a8f42d9d527471c88dc637f98a42396ed9eb87c3040b25942adde30c792586ab37bec4ab36b411e3058d1d3ceacdadffafedb6a1bd78dac8e03f81105720cb985a3cb5614cd4655cb83a08b624fe884fc7ed800f2602e7e773adbb8ad598ddfda9167779fed4ec7c1034c70e1c3cebcd1174f598c2399383ca521064bf1081391a78b8a54344e712070a78c7c1e22d7921554c952b22b5eb4eb28c8f4a0f7de7beffd64fc6f4d86dc7aef5c99a3f5de7bc7e96e2fe7dcc6c4d3920e992ce5948554c60f3d649baa16ec8751d3f59b8226ba37cd97f3220a5ef76a9f72e57c1942c1796e04441a1e8e61415c5c15344861ae1d55641ba2e6b8bee668331c0c9184dc2d1498a12c8e87a24d088d4a4d76660831838c0001d8d7490f990c4cd6cc64fb4206b24a111922298b6bf1f5ffa6cdfeff471d6dfbff39bdd31ad2e9f9d0448e61199755bf7e405863218f13dac7b6ff9ff693d57df0675bff702fd8beb260b28f59735f65bd98aa42148ca064914a0dec11764dca1f8430a67ca044be94ac14a5196c14fcd12c5c97b6ed5d9a290306bcd534046e8da5801d6bc41dc25f20a331eb9c276c9b2662d3c516d55c804b387085b2b0126b96353f437f7442ad340b80eb69018efaf06e4d535cac7874c4581f0f700714c8f1a0e2cc643d3b3a220036751ddbfa8ec15c832e8870000e280c29614bca91ca52f0e27b92f5e8c9a2e0cc797bb4ed206c1bc20657d184ee68fe529b39319936252936342c18f315d56c91c2449e1974e46d4a68fa4863986bfda543c37ee1d5e85e2264277520214193cc8e632e887f2650fdffffffd310dab6ffad1cdf6e3dceec7643735683e195c5b109785c6a8e60183e9b4b5f31561c769e3eb6a7d1eeffff71b4f0f1773a60adb3607b6bad2fe75d4a48da15aa57d8cc38c762638c357324e6e8684891d0a4c14aa0584bf7998c28bff110eb2cd48c34ac6defdd46bbd5ba0fce545f5438394334f2fe40006d8210c56e9c4c2bf16584a60c768e4c629e12d1951092db213c1d0bb9aace5cb0459e6172995aba4e5001bb114a52a1bad419651cb6dd31d589e8276fe65989f0f4d65baecd8b9780f2701235bf7a9098691f9eb900ec46d40619efa478f7a9d1f529fe5959b6bad90f3e082aec0148818ccc108afd35a524fc80419d882fdaa196f059817eb181a212ffff5fabb91c39e79cd7b462b4f7de7b04edc85fa0f4a2f4e285e37cfa9e4232a64c561532c9c62cc6e39c733e419b81574ed49286b2a79b0d8e57185832b5093ccb5a52d55e0e6cb6ff5c6ffe80ca1386880aa85b1dfb766d0139409254c64c2403f8d8de9093aaf003ccd8183a9dc4ce9bd30c95172dd962145606065aaccc2bf38f0a0b263dfdffff891dd7e66e2cd059bb729145cab9c0e0b8bbb6fbb3a4a9f19589addb162b4527ea3f24c4b2a6c14dee91a2ffff1fd17dbdf71ee6fbb0a0ee0b890e0bb9d1c8f9a64e2df02471aad2508285de5d781d566d9e65e155983a6400ead6ad4f453b300403ece0e9e95dec525caa30b0be375e30956f26149535a19678d8cc5ac3a48bf237e3f3ba3a166dfd9773ceb96e2641188d941c855545ba19516dbd3c6a884a2bdad5c6c45f346af51d64c2080a18388077c84f3853bfd90be7e9036fbac4b5ad0ab942c04c46cb97cd1d6db69a0c9fe5a1e5531512bb44cc0023e2087f457868adb1cb667be0d82148820405f5b0f4e1605daad15e793f5e2ed068dbfeffff3abba10184aa3a16f671730d32938b0c0a5f51fd4eefbdf789dead27d6150de8a60fa3ac62cfd809d4115450792545058bbc7bd727223ac2ced44bf4de7bafcdb59182c7d0da2de79c7310b843a31d4ec9ff6f17baf273a14bb9aa0dfeffbf4ee1777c2ab30695a042708c0ac9e6b84bec82f3810396c6e8410685698a83475773ee20e8d1d474b483d47881cfcd16994cec0a476af602725e24c18f3486b9767ba6ff1824feffff13b49dee46f7de27669d0d31932afffff62d39e2881c315c851292a4361f2c58146605be4086a436c3b25594060e0cb414b34b05448a232ceaee5d4c606520e41edf744bc51cc0ad3ba1b50aee3604279911700d96f4a40518d69f78e60365078a7aed562f4d0815b8eaf1927495163c771fb20853713baa164fd13f7644d08e38b8dbccc8ac67ba76ebe07663fe7f37f6dc749c73ce55b6bb783adb4d6bae81761a681d2bdbfda7b7de7bbf0eff7befbd47f4de7bd7f5de7bbf10cc59316df4b55f9080d057d611c4c1991a7ffc5eacd5b2112f279d8959ef43be8b2c74aed0462b5878b7ffffd7cdb434769ecba2827a4141583b44f310912ba58144e687a4695611969da84101ffbf66a377f5c617172ccdd90aadcf60c6dc669b98dd442132a03512fa7885869037bfd1182a02221937851c390950a1a1518e24214567ffff7f02376692446ea74ec9fb89e59672cc35486a7a7f70cb1eab3057b1602e2bce0d695009930b49ce2afda6681c1a3c1d34e7b20933246f4c54525d923080f123528198b83f1bb495291d746172adc4623c4fac4707a2a91da055f904fbd034c0f496a6740ce1466ca548032335b95f588552d9f919bd34a052e285837f10e6acde6d5b035e4f30651645489ffb47985a222f4496e2fd3faa7a6955cf342867212c3a474c2840aa979b17296d11a58e3d3e5a06c4cdb7f7de3b07bdf7de73dfbfd55017a69228d723864b4ca826e50b4e6222f20eb7440bbc7b9de968f1a10c213599c4904196b85a4264348cef8f00b72ee3fca76dd7db296fb38aaf2f264d4bd5255b1cb78f892227b9ac5def307fa62affff56dbfdbf6d7141897cc4d3d41907e1503fa27896b4be93acf01c311f27ba35ed8d6b5b89f69b8dd6a1bbde7be7d118e6de7bef13f408bdf71a4982be766920a1b4e9b29007de4f1756599872bf4497161211d397c3e57eda05c533a970369bbd2147635ee16abbdf42b001464ac52c1b2fdddc24d893ea8d8dc7145aaf24077c4201881a39291a3fdfa2d6c752c74f030bf4d22c5c28f86cde1a72de85952819424877b91ebf6abaafb83aa79dac5570fb42c5519b814a85bc654e99c61b176930e672bad67167ad4a5cf41aa5c84b37afb2f27968d0d00452b671e5c1bc05a3a10b0c42e58500194f09946345bc4266f45e7197ac6eaa4e01a83c429fc64dbf591b8b5d8f7d4e5cb680e194a56406a2978b570a9555891cf386f45946b6f75ea375b10ced0de3ba01ad8c77e58d31a616dfe0f8ffff27feff5fa2bed2186e351ebccba6dc635c8fa9b6badecd5480e123d3d10d17b522c099ca0c59103939840d8124a8d0e368b4def6b22bbf28ebf632308e1629f7ae2d8b42ce0c0b706b1da376c0887b1d63e19026c1981e35f079ad81068d8c91396e843840c42c445b4c275f4214fc8675bcd1eea6e944170513608f4c98d99f4df1e6303f2c8c8f5557574db9c30901c771a725afb81987af51aefee1fdffbfeeffff2f3c30e2450aad02831d3d0df8c10942599af0a45e24c7158a6e0c034004572ee2f8b3d3f1e3ff3fd4b6af399b0d265703476fb331cda5efe23603064f1405e3c4c66879779f1c20b0a72e91a44bc4b7ab8a1c21e60ab262ca7049864a5aace9913577a4bc442bae9fba2c5ba13b031d39114849039dd8b6f3ca39e73cc79d2581358d54ee33710f8cbaa8842b9e2b0d1000e7d200031a08040d44712c9034dd311400030ec49cc8784418142438440a860241001000040000001000000800200c0e0240a3e380b014780d3e5dc4c0984799a1f9a8ea435c5acc85c96af25c4395c481c00a420566c57d51c303806b02af78783c1a8b5e8cde03024baef295fefc1153e1a94f9be1d4afb2bf0c4da91a6de5e8f8f567041598781f256903d583235387a0675b07cdc44fbf45e6f805015fc38fc0f59bed0fbd049983a27d8f6985caebc1deb513c58c82d377a899a2eaef8d03c23e2acd81415f864823af55ff53a979ad3652f0a2152fbf1ce31e4beece5dd650ae773371e496a850f5c1d0124703c0241cb9fa14f004b5fac8e9b90a1bb8b0d602e3773ac42802f55ac2a0e38a6b51b82f3725b9e811e116bb7c837f27a121050c3b262abb37d9f5948226a78298cc102eac36b941c58b4f721f85e8161bf4d4f9af6a54cc518d59ed4385e778efa53549ed7fbb8bfe592ab62f1eac0dc5ba51bcec22d65ec5ef4b08a22998252e7011c6d431af82e14a617d4022808e116fb1744c151be6488a33244da50a28683f7086b547960b29fbbe87d6eeb82a0b1028852c5a6c9b1a1680e7de0c50c8cc6a95c67bf4ebaeb9bcba6d646a22fadedbb8ced5a112ae611124aa41076f375696ec53eb0760dc2ccf8756b0dc434d8629138369fdbdafdc265d0cea447948a25f14edd65b622473840fc59c9d6f4b5ab14d7e2f18090863bb2679710b511705db223b45bd9e09fb2edf5bc98abaa197a63e3b5c3fe7d46ae73014274a764c9287e38217e6191afe2ecab0fd5bc45d25e104efd6b86b3ada357a83c1073f09a159f48896eee068a83ab85308f5195438c3ee9c40832807791978ff1218253ab0dca98a6a57efd496846efea13014c91a7ad14b55691ebd820cfd6aea632515ff8e4459bad28596253427e0f1dc591e3f92c68f405ae68b8676f3fc9541b4ae3adc33e776d786ab83ff8fd12da1f018eecc3d4352515d890c91cb41c5f23ae403f9d7a8a0dfcd39004205a9d8dcdf5042a24a5096047e4c09a4b5b87daa021be607d595946c483953951edd9832e251114dec9bd063f41e2788b538cb7e804cfb32431a175da418b5c106518c8e046c1fb10ab79321b79581d6ce295421e0e435e70ed65e2dadc56086fe6867a0e5447808221253439c77acbf48aca8a61cafec0044895a56ba923061daf9f3e102cba56c43c44f2ac401f8ca3ac28dab22ab1b32926fd1aeb4d14c59a6a0b64b75a7b054f0c872cf39bd02385dc907a86ea38a65295706c9b6fa742764a965ad6341627dd9be97ce8caaad4606b9ab6b4a77d5d95303d2dd6b4f73bd23e8c52420a81e220db3915250816daed16daac4be20544aa56baa76e673d9c2b5a69c2df4fadd33968ccb055729ec0872a78fd4935bdfabd8ab0fd13741b9605deb899afd39528b72d67a5d1e9ef50c4745e069e1f2bdec74a8cf0628138cd274574777a9664775dd93f513946f310b0572d05a76c0dc7eac03339e05140e5db7b354ede9d591b8cd15bed6867f2818cf9f3c7617e035ced89d82d0bf8201a5c5f7cfe0c9937ee288bc66afa0e76777acf639b505331e4313503d94aefff8728cd1985916b75b61a58df9f1f99417b61fa861f560a7d705b39bcee5a84b7628e7cdfe00296bce31e7b475f204d38082b115f6a1147ca9f90691236c508b841047a12949eea59a551519538ab25b9c052f7681583345320bc0436a1f1dd6acc1f1ab3c7407528a023760cae4b86de2249a276eddaa028ec99a888bb9835a2121b7f4e462463d5a7019f0b6ba5d092e97d14c88ed8c28126efaf6a46ec463299100ab52e8631a00fc895acc0c43f7e318764e924950b2f532b0e82053d7ba619744e47a40785ad716162218bbe99f22152c652dd56985900fd1dffc842e91e5e28764fe46616821ea8089a42e85eee045fd11abe9ce83882352c8f6f5a87930fc582443117fbd7692beefd2f93864ec6af841f83990de8015d31fdb1be008f2d27814f6fb588e2dcdc0823b3aaff82270e59edabaaddf98860ce27264d765adc4850283583c2bf46c1e71d008ab6b89c9080e55f31c027c8546c53720e9f7eb9571634b863d5a608ceb40a8f5a9d0044257f3021797771fad055002e7a83f8dcf52aac37f67308cc887d686b440aaa0fda011e9865d9ca80c5916e649569f226901bab45fdca5f5a782e11422c9044c777618e2d64642f2517b69cade3271684ed2a53cd5bed159e16a9c06b600266b600eceea431f559599738bbf149370448ddcd3ed530475f011b56a50266a9b91ec116ee900e541ba0da0e9a0d0c963775686f0fe9f97543113bf23d0b0778605404e1ce456819059e7c841f77482bb9ef203c7535449fac47dd24810a54260859224f755d7c72304528616eb63b9fb9bce8b26f0613e7bb1de080c4a22296a083081bd237275d4fa5d54110c603859ae4cbda599e58af785c392e265f84c1481fcdcc4b844fdeea1f0289e9f63c56617914f1c3cb33395d798f61a34b7ce483b3be8c0f2f51c0f85862f55c8a5c81ea0d8d681b96fbcab52ab6dbe6c2362f402f64c505c5a62dcbcfb504bd4f92cf924562e455a244a5093e412909afdd281b72519bac60225dc02e962b97d80ebfeb8e7f40cb2106c29acea70054fadbe3e6d560d9a8c4dc7e295db4f3c313e03e8f2b3ba977f70d02afe3a6277004a7716274a8203a363e09d0ae5db4831c8f34642d387d9a79f239d5d806f86a6493dfb4e1cc9d3c98a9d88c09746957a7148160946728f6e0ea0e12e1553cf4850af7a0348f691e983cb5dda12d91b5887696a28223a07b14451b3e407742bf499819502144f92e3fba3b37dc10c8588ff3c6c789986401b605902268f2ca58147b0b85de0edf3626e098480e4293f92764f0be41dc177aba07ceeab7d2b4f06c860091165e8a17d6d921ed197628af9b53264255d326da756ab71868468baa2760c552d5c81381abe64908c02c09b314d161d2404c69a77ba3edd6defe7877e70d7974a4dadba2ff27e4c14553c9a918e6683f497868627dde49260b9428574f6274ea9b96babbc853a042861a0e81962b8404b0f8a99391d5a0ebf4112224807677bcb36ea7ca025946a77afa0d9e32f4667b4ea07fd2a9bc94b4825d321fa23dd121a7f15b95ef88629d05e30146e6d07bf6174ee1271e48d2f3a810bd80a462b2e140f252d6900d1a881cdeb8e4c39c14ed3d0f83b072bcc0aa66512d45289caffde5a84e0b270b79c75ee6fe787c6f750315a5a4ed7453133118b55e58a09f240e2c1013f1049d0d3729e7f276a55572f867f93244be58a48077663bb86fdf37d184d9de20901c4d40b6982f6e83963d447e6afe5a90e11c2ce24a109844fee27b3f962caa69c4adc1b68740b08f869b05b36aa00edc288843a1ef5ec106ee665e327e335d15508b54d72feed43810d5537139583b39056b8923a02e5d0814fb46042b66d4f0add9c22546ccef22a09e45ecb29630b2b97c7ceba03d324dbc49ae190ff652bcf243f990047cb996c237a53e03219416220908fdab20b73729549605fea68bd04f9c7a1718ba688ab8734c74656b1895254cb0499cac34ceae549872f019435a63aa7e564e5e21ad1d9054695462f1cd71e4017dd5f4c276995cad881b41c8f07855a2596ea8e76f9e943a8906c097e5ee9c8052fd731317c4e742f624682b9b231fffa007acb7af429f716f6c8def49887b64fd5176b1ca387785de832c823564c8c7a49deb7c5fc9b4ff3efd08407c8c2c71f59434a079a2e4f689388d5e7f78ef410ae494a6bb67c44868eae93b8899d4df9f29694210060770b9a13150954ec2669c2ff146a205681de28110eadde8edeb9020ecf098f257c135ddfce7dac0dcaff92c5835e8eacbe0a3c02ca879f2f8672ad1e30371074c8f1975cef11d995ea478539ba6fcbf41da9ebfe70cc30989fe9dd04fbf8b415be3b6785253d3e9d6a80a6d5f7f0710adcd9826e807ee1b83d992886cfbfb56effdce4782c30a26062918f566843fb61a4153ab257d0e7177a88c594950ec602cd5040423a1e5d1164be2881b91cc98c56d85f00fa542df78bdd12430e624bfd300f19d368c588e0e606b00effa785ecac35789b7438963e9772ba4e70e4d18c7557e9b7927e5cd1b0532a4819555bd232bddb31af7e15c1d30770ef634a36c586bb47bcb04e380a3969a344645e29f98685ddf90fbecaaf8d23c7b25c19055e2b0e1d16a35447227a31fa589384e80dbdbee3fdc3197b3cef618f114ac27ff28d0ac57007e1babe886a832666733a809fbdf587b11034c38fde964faaf0845bfd0d46b54be3c30536ef4916d1ad40372cf74ecab791bd936034e093be57956688af0065abb34fe30a9e092568adda4e44638bc52c3a5c87158e2efafad6ee057fe1a8a866e73f5b3382a089a9a7c9c1817e73ae2d4571bc9880ef7e7cdb210ccd80b0c07063a090e740dd9ef499757f1c075b78115234b88f5676a7f424010f48b32e85538d5d588442bdbda864b76259274997cfa5f7d423d741d363b75cae0af67e2c003bb8410eec958674a00fb95795c27f4fa81c12974069a0bfe263868427a644e996c75cce0d7c083d5f5b09813c264cbbbe189af4b61d5b2da34f4e21becc54b69aad6eedd7e8c03079575ead653d58c0026f583496e9a7a221c48dfffa529a90d828a5752a2f522957c2d0405698916d737510366c7c3dabe4867742734a8e5856e8a79984b4ee1032908306451c3b2d90700be4ad05a73100e98bab386200ca44ed7a2c26173cdc90dc45e596aa3c6853c0283c1308375080aa35074dc82165a2693621f284065c5e57b42fbd7129c17d2e2e3bc1c590b1acb58ccf964597450b02ae922d656120253d8bb8588b7c31528a0f1eff97aba09c01c9d294a9d9ed6e18db42b45da57beca640d950d22b5b91ca2a5992925a9fed73911a9b1bc3a3841eddf0d7fe9530a3bc3edad2f1e1dae0ba84d31be2e725241799fb0655f34ee460dd81f6ccb8a5ca064f53373d2e1d2024cdd2ff8c530aca3de890e823dba5b519d563ba862183890aa5c0e743f71d7e4bff3d085d72b407c82820cf652aa0120c8da72364bf50f0972f5ecb3534d7da8e00e1d9ec4e529a1b302aef548ed769e6d787344e4e735d56d4a862d4563270aa0688ba670154f9bee1308f721f9feecaab3bbaa97fbaae0744ee35c704c7aded9405caf8f5c2a2dc6d65cb3359a25654dceaa653e44953a283456865e2a291819c1888b2107d53ed065c8c819a4523d7327c0a91477b358d32ef0945b6f0294b9e581a154ea252d55f0a49a215373b6345eb28a03ed24998c01be07b34c82806a0e95118284ab8c2bbb49bbbf6a8d197ac6c645d00dc4b201013413312a129e1adc03562ae63121ba172e699fa31d48385802e8ca2ed645ba011fde45f804fbc758002c236c8684a0bd222d7953417be0c069103222f4c689b258dd39393c87b20ad81ed6b69042321f6032141fd62bde74904a6ee27a5a75157f6054212ad6167609175af7dda2339bca1d95f2f74a7365cf9665d8ba8df2b574eb8e67ee1ce9f42f96692da945430a87ec4c02522a6fc7991ba695e8627c6b92b808cefb52b998bd67a610c35f47907926e465fb53d131b8cec0d8d3134904c679a0f96fde39da9ca2e9f16ef2b0dd5bf7ccaca23f51651f1d017837c92046c8d462b434672a1b5ab90d7d9660497d8401568952e7ad0ec9ae07826937a4ab1950472c3e2d8b9cd8d6032423794ceaac7eccca41b045418e20070972f6b2d793886420220438161869262bf623915be3bf6e81fba71054d8af18f107f781a352ac3254a53240cbebc956e1b18907166a0593a27d93f5d3f110124e4ca9f96ff2eb1b04ba1eab62639365dba20f2ed9cfc1659308594554445a01d473ccb979873e494e7251606b1462597ea886bd1af639a67b9461f928841515006975babd25f34bde88aa45742005da372246465d1899e5ea5c75e175927224d946eb5ba7cbcafc2c4e7cfdd72614d2a85f60e823af89601b92933c5368eb75c622e8299a299d91c2ed767c5886a5e027842fddf0a650cba9731f4feef47eab244ae546471dc8e144d55efd3551b9636f52b2388932e386cb95ca8e4a2413193adb9e13e7543395efbf348eab9c68321fe12a5d41d8f579cae94464aef20269a7af012efde1af4b851cdb7ff7d34f3623a3a0bd760a09f92ab38f0a192c4cce65cbf56a29bb2d0f512b3b516aa54a36643a5257405a09702ce51547b578066245202b95d4a9318c56410fbae0367971662704143c457d2a5fc8c1166a2a22bb5ae75b7ceaecf71a5d9680198a391db6538e8d1833cae541860e6d5e5428698f8e154331a720f98a17f35ee07767c4e2ede0a2062d96dbd87b49f2d1410f1a1a8ac0ec216f6542b014fdb4cd5a2b9d0443f06a47850b184b356a1e41f82c9c1000f4b9f1f8ebd1916ec1c1821426245e3906754774a0427fef2e2eeb5c9eeea3858694f145e5a66b12aafa94bcf48c1fa56d5d1b6c4277464e8e751fe3e01997f6d72cc84581ab70af368478f310154bd9c94d46bf269d2e3928c853c9f0ae6751fa73f89e98a816a4e8a9e7c0f99e2bc9f5543ecab409d67787222230aa20ebc72b1bb3157f44d23f939013599280669e3af6160934d570bf879e62b4d28ea3b6cd4d86e76f06b7059a1afd1db6f01420a4388ba58e6685151eb6123c804ca46d8884a932d0cb7088150b44443fe0b509464a5d31294dcbaa9ee905a43327cda7071ecea1cd1ab378c774f6ad704ce98a1cc5fdfe29d74b3b544067ab688b51f435813b44d1ad1595e3646d1be1bf6ba0ba21ff59b83bd28e3d1d16a593829f47be86f4c2d5bd1a05995e7f5332badca121c71588a03256caa0a570947fb435a3e666d96e267021a59c5ef0a3f6ad74804c22956bc31a100379c9425ac9cf0eab9f833455bf6074a38259eb5136d61b2197e508d5298c153204c4247d2b7fa781488a8c79901084321c3aa89f13f9a56ff7b4a83765573e0d4962843e418210bab65889a04bac00f633124e2aa874c6c997d750083aabd66786282c4f7b5a95ffd3851dcc7f409f613c44969aa21e1ec4a977be02cd6758028719708d017d0c7bcc9a75976d41b316994b5f817b536a4ae91d80df31fd095bbb4e9d8b4d4232634ddd316114b47332e384635f5655d9153c9275aaa27c33e12208e74dbf217030e52a8c28b1cee8925ec09168ae4f8bce7bdfa965246218c928e844462b75422cbd7d7ad93e4d47fd92b5a221e90c06a1202bcd844da7be972a0dece92c8d6ea485e0e3555b46e05891fa597bef1368fdae85ddbba026860c03556ab25be664cc6d4506d6a58ab21f0f0bd39398b9041e9c68846bb36b0344776c9691333e4711eb03656e104c1ca3e754b935fa182d12e65a5343ddb52932a583b993cab5e484384208073869468c6402453131bea6b48b247258ae91d1b2fe6aee546a0b726d9191deedece1789fb06f6544a32c1c67e5ef608ed8ecf4062acd135154fb4417c98d78e198928d9a57e02ed87888f8c2916caa525564a5aa24b30e4c591f1d0ea64588270ba8c7fef29f441a9f7871b7a109ab24b53a95b2e12a13e7772a8e1418fc5fa5aecfc99c479f63083d633ff2c216a9103ee095e238e52c6ae56794c7d8b08859f6876818030930bafbba9bad611e197c3d29f77f3066d14c71b4857fe1c243f347bbbbaaec162cd2f8c5cbe85052e3c30ae5126c0fba8297e15b0fbba5cde14680d654bad54960bcb2e7003bf25d3f79852b676a499def6004798e06df38576c16a6d702e929e6e03a49b875e90a436797cb7453a41a53d239dc2ab04e51d52d08d680a891169106b18ceabc6b0c39858d3d6817af4a2d98c6a5dda49ad0b567b1859c35829d147d1b738dd0a0b02f24cacd87f8b77ba05e750c356e3ac6c15cd9a60caf352c74c5f5dc3b130c4182fa5be1266da0a7bc1660b191ad70a2244eae229a8dbc6c10a1fe1e566b85c62d3c73e25a500261cdaa2de0af9e20817c5c28118b52b78a40f79c0b3ab3388ab4bd16745a796bbcd4bf701f515eb8c05de81cb7b49f8d6c398e63ff36fa9a71982517a9f223c7656a5b8962c16547a139d8fd422891c90266e3eb05f1e36090241077802ac18894bcda3fd8b6f51d0c0bec364c105023614761ef12163ac849fc70a1ae47e7e4db78aef8b81b1873f5fa6d2d7fb0a3ba1e355dc63a86bc28ff46cbe156b429607137e838e1cfda05288c323810a6f407af99f191fcdb36fd038bc57da460f7abf0f3ffc075dbc725d7ab838cada9b6e622bc44d01808d11f090e0802c136e274f2939edb48c2d8184d6ed00c94a2433bb01d4e75ad5951ce07278ad24a224f80fb7ee5352fb54af42371cb1e8ad792a2a9460b36e4078a39dcf5c90fedf93ec66e1c01f7372c7b81ce86ee54da5ebb7c331834aa57ea53b4e77bed9f1a17697bd5f5a77dadf8fbc27042a5b27a758309c9149070985e0f1556f2f437292a726a39bf562de6c5052972c4b55a86453a4d6eb9b72faaa161919a8810300e3c017f04050646994f2cd372ea80803fdbb3455ccad36e42612f822bfe84f24217b6fb2e59632c924656e0a450a330a6df94783dc9248847270e405f0500807445fbd3bd65eb2a564a79a7624da209907975c0c10ecf246bbf48e6942a3b4c38a40e1e8619287455e4d784d6e92c3b8b54f855e1df3a9d31b047bd32b4e2c83565d9967b0d622642e885a542f712b2bb9362fb9d665be752a66b5e625f8126fa48e602712767a96551d2098a9b776a47dab1802fa19822f3d81f82104355fe5ec80e8d19f3911f4f1e303117f728cb0853e0e7c1e3efc2fc7b77f344e7cfff0edf87625e8ff10bbf88f8607df178ba15725477b64ed540aaa36d5a614540aaa24a8ae4daf95525b4d95ab5d653d55e95fac3616755b5a2581adb5d6fa5dab100f80de4a96d204614b95ae32494eb635494eb69432046f2f0fd82237c09e742f73e939943cf332af3d997203dbdeda052266d22bc5a8dba73954488310ced9ed15506900e7267f00e7a6fb009357cf7c8774995cba96e2052b1d7ecce2611658d87cdc00b7be78136fb805b3103a7ae911875bec8297de835d1146fa05b805b3c082e7a5f380317510a6542aa994fce434305ca752ba406caef1604f9eb64e8673d31582bb0e803055b21cc204215992bb1b6003488730f25e20f502dbce3432008bbc33d3a8c3bc5de2c983395dc608ef271d4ee93287ff8ce46a61a2d3748c584817361d625dbc1a782923cce4c1fe8c64c93106d1bb55a443e7d72084ce0faf959c8ea8035fcb5e093415e82a3ac48f973f3e3f64d14ef0361136fe77fae8d0653448d3d23bf81fb383e0a5cf482e42366c0821bccd25e8e66ef69e6939bb67b33cb2a544ff9a3df9ada4cb1efc2cb7808d920102b445b7ecb5cf995eb5ab369bea16830621f4183dc0ec342f933b973ab4a4e9c8011c9863b481bd4829a5b3930253666627a0374388643fba32a75ea1ab6258d6d5aea36337528fce49f6ebfe686317d5c59d2c74995cd631aff005be54c7bc045f28103627c1066a6a6a6a60500e4bde9ad645e04bdd0c6f4f3387fdead064e63b07eaa97f5fea4ebee45cd7014c077d7a7f805d7cbd13b64ceaf403954dd9ed0982870698ce5c0ca558c6d3041aa4a195565a4b59d64151bd721897a36bedae6d91e8397bf3d9c4cb04b55a4b8300ac0e866ab349a8d5a652291853484dda5de33b8bba71f79c73ce396777a33ca1ebc6aa2b34c8f2b9b8609f67bb5307250f97af1508b6fad795eb300c2b75cb2c46753179e2084fb87cdf2e713351c28354dd2cc7e844f79cdd37f69c73ce39677703a137db3365853921b3850db75aad9d73ce593b68b31c2315641361d9fb7a12cb918b69222cfc1839395574ccb41cda424f25b8cd1ff31e73798c06fd5a8b60ab67efe77d90c8e53f4bc3743f1adcfd6ac90bd77c076461fe42a52ab91742cc21e6b5073d75d14517f4fb4e32e4a85eb6bbe57b866f007c5b13e8da910ac2a690b06da91d41c4804455d23b03b64847c169893462ce1752299e9369fb9c73ced9a96256abd210a0a85eeaa0980eb98579cd3aa6cada7d21575d50b91876d9cc441dc31da9cfd83dabcfab5a0d21955ab127a1985e3b28da613bf5e8b31d9bedf0e7ec9eddb4a654abc8dc053aa3d3e8ed49ec8c33fa8cb74713eac41ac330ac6bdb9093c6240c832f14c33086ace959e967c94ffbeddae422171361cb843304948bf11e067dbdb16326c52886cd496718a6ad6dfdb35fe94ff8b2f9c9a747f862f2e90c5f389fae822f58111dfc114256b362e806206ca16eea226ca1ce755bd7b085ba463da35e3bac52da57b0b0549a6131c83aceaedf41348d2a166f466de98448d4ddaadadd2e5a1361fd3f9797d5a1849f4bd72daae8689f3eef8c8a8ee9d4afaaef8aa80418510f32df2178f6a693fdbb9560bb67c568031826bba523e666531e8c225390a27adf359f67b4fb7c78aa6d5c9671dbfd26a763023f9d7bcb6ad624f058d8932c2c33dca654de8c222c2c33ba52c75c13990cea6cc682c8b8fbe98d9fea258b37c305e3e69142ba16139d9be88345d8e753fe8ec12e14aa7103cbf7ea5bf319d0a5f260ab7afb065d341ab6602b730c079968838445be9bc876434843baa00c4aa532d1e0683c8d970ee18b63df57029d0fecc9c76e0f2723367a43a3970e8b5ec2221c11a22bc022b508d64ecd2e1b289a5df64baebb638c596cdbcd6653571449d980526fdaec1fa743e66876f8933947d4423a76b2ed9d63be586e079e77a6af658faf9ac11274590debb68a61b394b5c7a61836e3fcbe2e128bf696393571b3ec697cbf1e9811545a4be9264ad8e81fe7c0c826085b2817333fce49d1eedb03fbe911fbce9101646abb396ed7d66aad0bdb86c02556d4cd766fde35d0204dfb171f0850f079f8344f6b63b77a51cdde629c8ed6416695520cab58fc99796d128df9873df6d1c7e00be7987ccc3ae611be9c1c73862f26c78660319fb683b065faa98bb065baa963d8329deb1ab64cdfb4d2f46cd220b049e1f3d8e0119e38c2133fe9dc1a47ab755ecf7cbabdf30776568c453deb1aebad76ade314b139697dc8d196422692dde664a4f8ea8f450d600e7a2b69f3eb9b8bbedb7948bae40d074957c9fb4a1f46fa6e26d86e7933a7ff276f9e83fe53f93440c2942e9bf850f18b91d888054b30d2449a3ed8ce09230e451d3fcd436e7d34fc4d6994335e880467a1a76442951f0a17b69d93f05facc2772cd2a20a2fdd96b460a98d45df4e3862a2c6a28ef208cc23f5c8c5d00d6a504e7a044bb7ed7e2acd4e1f9e7ae64f6fffd4519d62b5318c52777a3b305d64193aa89bd64d08dd1bb38702852fd575e3d8aa22aa8cb136ae4d15d9b6147b5236e60008a3922ce92824b0b1e7d411a38b2ebaa81d983ff3925660ddd806d475e31867ac141acb2ff5ed33a6fb3a7e3546d826085b523fe7bd56d66aed67b317e8f2244b7afb66b1a8d57ab39e7e9efef3e6d39b822dd25382602510d2eb6627f34815e0882253f8eeab922303a91ee2aa548c93678c917a742857a9d46ad5756b5775b74aa556dff4ea33934ee672ccbb3597bdc0c6f909f1b7654a32b7b3a05f8338586dce39997a9c3f7492b7d6b68d3df96db3479786eec6eeb2d9566163cfbeddb747eb5040175d74d1fdad05084348098c90052592b801c221410956d005203f40c24738c119000848d899c16be747114744518411a0000c3b3ae09d2424200748144e2041c50e60b093c40d845c31d4832ac6d002237870a275010c5f98024e911a20d0e087ce0ba410851e26581003221240240745f460a70a5900014612233c2708aa8116462b682206489c68e2e7c8893094c10458407ac24b094774810b37f0e103d6b1796a3a620631402ad242114a3c11061208d1a2065b48c1062a5802069c84448d482267632983137e88904512212e2c6109250439015016783024053db010a282203a4812c448e60926963801153008420d180540809834c1423d5d4b39a539370cc3a40f2dcb300c9335f85401a4052678d0051960b03220218a250819818424b680c138e7316c476755846118162459b062188661378f61270cc3381a34671539b20a18d01e196f2810c518807600862b189154851556102145114df8c216394b6861010db029e8a959e0733af11066044f144ce0fc200b262c0083215224810a59fc80874fb0822373ce79d4931df96459c5e69ca539e796828c062b88c213439048a1050ca50215a828031247882832028929f00f886052d21694031f1e1ee0eca00446d02451c491124bb8c217a678a1200b0af845401e8ba4d76aadca8b80e6ec2ee67c2c42508f4af8397d7ad14f7757849937fcd4a2470bffa92835b1c0761f3f724dc9122f233b76c0015f58025b4018869f3dc0961977a2915804671c0a325bf0073647546e555568871d32478cc49db893e4c6c84fefe12612b9814984883c3f5d082241427148dc893c5148fc8941e24eec915bbc8938d37168b2e30ec7715bdc893b71273a852f14734fbae2117189e8448c02bb7107b64cffb8f3daa440f45a9c387a70009b2e947f34a0c716da7ac41a5519e852a13a1b28bc0beb928bd15853410cc3300cd3983bdd147b0c5b1800b0857b902ce9d5aadca3d1c7e66bd88b0c4424e825d671121c160a1119fae8ddbdf5e0e2e279eeb2f9ca6621f624076135d8ba120152adc07e2e3f439dc78eaeed93814a3eb0f0fb32107b5c8ef6983946e3cf40f666b49ea6cade47bd6ada06b918e72c713111d2fcd76e9b89f48833f13211f6248701b6484e822d49d8e9b4b475537a332e663a0771107b12b3b18be837e0c7ab123ddaeb4dc34992009af57212f6a44bd6304bd2a0e1e2e279ee409c8484651f6ea954daa1900d84a8f4ddf806877374b8259d77b8e73f55d6fa6a4cc2ad1a6ed9704b73c9b3b926893d7939893dc9493f400c041424795ef69c73ce39bb5bfecc39ab73921f223c32881089c39cc449d8f5c2a54b1b2975e48b8e93244b3adf4857c995377cf372867aad269309c3302c89765f0f6c76d35a2bc7499c94fa18932257ca3c7a44e298235daa1ce949d205612a4c924aba24e0bde442255d1242a387461efa0eece2a41e37d4c04143ba380c90255d043e240a5ec624d8229d935e12b11411e48d5e576b1f20db6973e36a05c2a4451e9bff36dbc52051481c121dd5c51f8e471149e482931f75eb6dddb25722c25287bcb167d9f4314e0aec17735438a8abf11055afd843dd8fc6e5ad6b252bacc5b05bfd7b65d4cdc57f516748cc39c27e8cc338dc1371883bdc0ac22d761692f20ae0c097ccdba309e0cbc9dba311110793370a8542390bbf2869b94e1ca39c89b7abb8b5b9e6256feb1f14fa6a58f6d7525d8c93813389f04b62d247a08f7eea7809d812ddd4310ca24ff4132431c8e3441cb8c675e2b2a9d50e32ad68930422f93eb91bb3da7d7abe7d87875d34f47e3148e4612f7a97f089892888bea594524a3903d6db04e69f8a05bb2ccc9ac11efb12f6c3e1a57f500b91719837b027a53b0d2cfb370322d9f8c05e0f94524a29e6f2317ae30fb3a643f791c2b2463b09f8500189d12142d89bf4f6c0de2cc2f1d911427d68f4d9c126c5b088830485b15034e2306b3a86e90861c3835d253ebd076e6d3e5d02156057cae707b978d1e190ae927b8199ea1cc7b9a9fb68b22cf31bf0b34bf3b5fb7a7c75ea9c9fdc529aaff6c4719b374b3d700bd649210059d3b7a8c24faf5bf8e9d8a5b707d832bd05963d126dac19a141960ff3f9b95a4961e66200e0da57893ed54f22c99a9ed795d5fdaa4f09a864fa97c23d1c1d724f29c87e5d53e22fee1a6eada8f80b4fadba7bd234f8a7babebab183df36dc5ae91b38b45aad7c7571ecb05aad7cb5b2e2bde236248e1d628c5ab635b7704897e71ec3a174d5e05ee25e5743975d57f115d74a1bcc3695ee85af74f04dfc932ff92ae9e2cb2d60eb85a7fc935290e19facc2897f120bd73fb985ce3fe985bf3650acacfc9361f8e91aac9b4da956ce522a6d9b4da956bed5155f6938e3e4deebdde47850f17b72bf95afac449f59f90ba952b137e3f78a88d526e3e4762b9e4da956cee26d71b5b2d2f1a0b2f2176e836df0d73fc4add5fd56e6946df3a2a301bde8291927b75b59755b29c872314aa317353e7a4a86d0c3e8b783d0eb3a08bd13b703cdaf1c720bb2b7e22baed2d1606fe5dec01ea5423e383ae2d6e77943d80550c8075322f9b8c2b898555cf1fe95fb85e053dd173fb572451065c490e13264f84ab7e2908bb9d785bd958b0d616f5af626c450280e857c90840d9971832472c1214312712be513a54bb167e25dd7040d2ea3fb6a8ff82a770ab197eae0e390ae592459d36d8cfb559f13e9270d7775b121dce21ee9922fc99a5eabb533c6f8c508571eb332a1d4e6a7374183134da24944438cde8ac6caed6ab55aad567cb5ea562b25210b376faf48b032864b2e0600ee451cdaa70700be449f2e00d8ea6838d5705a39adfce45d27a1b7f2ee20b461e52bddca6be8564ec3e9571ebb954af7a9ccb0e21d8bfb0b21fdca575c2868e8a3fb6b27cbc2c2c232c30cced275ab78573e5d43c17b5756ba15ef6e07e2dffb455fcdac5634db5328ce20cc865b327c3a76c32e1a7cfa24325214d44e43c739ccdae10942b755d7ecad7c15bb2ebe869251c021a920bb780906a90548245f120af2d575f2d5c957e79fea2977c39f85c53bffe44b46897cc997349247dbca6ae53f9c7eb5e22af6a67f93888795afdc0ec48f7765577cfa7c716b65f4d5aee31c1de7d6d7b9b35742840e33903d19de237e773d08d606cbd77519f7ab5f52f3d0bb1afc834183e75f368d00bd295fd2e5dd9904c89a3ea716926aa002d2cf0b21eb9b4ff8e99f3cfa49146d8045802dd3bf265a79add6ae3cda4ca295ad554337667c7567da7bc49744da8b0d461ce0c36964166d9dcbe81887bd12ffb8c70709b0377da5eb81e85e221de67717077bd3fdc8465ff9275ff2c5ad95192459f3451c7a134fb90db9ea62784af7c54ff9953b89669074bf5ffd13ef1bf4d32b126cf418fe4da249348bb815c3a7cf23dc8a16c521a3c4e8a451278fd89b252eba1055bb723fbbba100057bed89b9fa74d2510710b465479f4269a4666117c813fa343ee87f8abd5fd4caee236a44a073fa583ffd99349f4a5fe9b44a917f235048d36db11fdf4530704a69ab7bb81bde85be7524b33ab18c57c3a4e004e6fec611886619875f976d555d6b77f9600df07f876c180ac56d5155858b4c32d1e09f0e7f68b365f2bc6a3d3830a0ee97cbb4ad68ac3c22498b51e4bfcab2f54d653dd8bae04ab61adb59a10b1c6865bd6db79b0eb8577bb04d895f2f60ab0cba4c4a4f341b2da535d0f92d5f70225599d39b9a6d1a0502814ca3f58f461aeddc0dc44f32713a7b90db9c55a8bb222f8f5834762909214a0ebcb1e5ad407e3a147e8825042a8ea1aefa7e228a3f4679945d0b794524a8972f928951b44a8f4802dd139005fa2b4ce01f8123f46c8a821dfc35ec98d42d8eb20a82ee674b6bbf998235d2ecceab68df2265eb8bd51e706ea46e67004515353338297b72a61e305b8d555c80637dfbec307f62efa9e0e85a2e0e235d909893ddc1a02d943ede4b0d7d7060dec0783be98236bb5b6061a7db391fd56df28d5a350aa54c746eceac1ac76142a3eca251783dadc06cbae871015b8000f6ea1bc5d865d26de6e2307769db850bcdb51ba93ce45ba4cee15aac1ce6b75437945cd58df36e7bae662b812d74aae0a0ef8257e037ec92df10f067d12d599fce492e66d3744cf9f3a6905c9c91bd4a2493d0799ce92ec5e918fdecec22d2814c5ebdb71b01765202bfa910a917000b6448f4127e6aad020b77ace39312999217c990e35c919631926bb3af6b5d7d6a636b5fbb5770bf1b3a5dbe07967a4f72d456a44cc9a5d4d9bf294d3db79cce9b39b2533cb18e326822cbafda80e2c478dd173c4bbb187ddda3cdc6f2f5de28887c4a424617be8d39b6d09b6d97bd865d9d9875d90893c3b7ca8c54e92ff544cc47ef4e686e3bde1763095a2cf21721cc0301c2459317625b72187d0f9d2e51a1e8cf46cc31ecb478f3836180503fbad621276cd24496b9e67c459392a06b01e318b65658fbfed08b3c17976ece6d9679274d1a4a44f7a8637dcc39ec72539b01fd39b670662cbace8cc9e2139cf7002bff081d1d7b7ecb1c8532b7e06e15b8b973eb8a2084f6716df57bc34f20c5ba247ee0614c247d8125d63c8cc441ec2961bd83313da4b84380011bf477d54090e3dea67b0457a09b648ffe4c394d562478a2416b6487f4104cb0f857e84def450e8a7e779c58485593861e761165bd8c0178ef985906526b06a0af6ebef5bb77e6ee6604bf40db674fde87f3de44be7b1bdbc354201f38274e91c53a20ddd6a99628f7168a992524a2979081a777777e60484ab6843b75aa6d84b89367cddf5db633b942cf8f1b747ffba65a78a3640872c2c595e71a4480e34504ad9e160cfa757cfbaa868f836b4fd8c4141d2c53b27d5bd20de9127d7a42631928b8a060c1a22fa2fea7c370e7b3b5426976fda81ba51a5b2b68724a954d6262549571435d38a9cee810212c9ec902f693addc66953d739ecad521c759dde1dd2b5baed04644d5789a2a654f1735e2b88ba070a1af44d52120f8a6312c7248e491c93a67cc9219dece116d6389d23dd15a58d44759f44693b70eba33f3b2449160ff6761082a5fe41a11cfc4dfcc42144ddcfe43217ec4d0861ea7e15c54f9491d8659392a42bfefcd4142658a7812d09c2c43f97947fdec93f37f9a7fa2caa6f5c5cbcd4fd3c3fddcf4df75359145245b93df4ca223737372a55ed9e69225f3e4336182ac22dccdb645134e5a92b8b4823ec4d3f7592a8c75ed4952f1f1bc8a1eeb929fae928a73d437c7e80b875f2e94da483847a886fa44b569bea1b79845b1f23c9226e0dc9229208664e7be6c9fd2a4af6dc806ffd45a7621dfec93554b7f5c096e9b505b6e47ed00823718b0b6ea17c3a27491b6e410ef531d1a9abec513721fdf4ad7b8088f2bf98042388fdea8e4994c30e9b4df96683533c001c109162c89f1e0ad940c8c3122d7ad76aad4ae56eedfd78c8ae2ec14687529bde9225adb51f0f171a2925accfb166b0a53d09e6d6426bd7ba832f9de6319e6f1f22741bcc4e3b9a875d8ff9f3d67041f70d31f41c77a049a1c91c9de661f7d56fc6cb1284923d5863acc28ce849791bb638613f17efa2b918e9edff69f1a5b7bccd1e7bec49be2cecf143d8221d72f09544cbf9b96d93e7351ccb84fd349b52927441deee774329e9fb9b47d868b3bfa97edbdc76a62dfeb6d5e039c2ad4de7e7911cbed4cff8b1cb81bdf9dbb5c1de44599f90c56ee10d346ad819a61bbb19cdb11a3c1bcd6bddf701a3d7b0ac44f39181bed4f5989fdd1a2ea85a4ec65405b0d322ecd8a39b3e8612ca1cc418bb3b3290065934e8b07a7687c8bc665eaf0a57e618638c3046df215d1ebd07e9ca9c3a84357a16a3c7793f2befa79211c65855a06b4e03533b1578551a50f2cc654a9e090105bc32d5b52b44e65588eaa50b258b0606720e88302ac9822aec10a6aaf06d40848130100963ea84a6c1c8abd280926bfe80e8f00e013dba76878042067ad47c88e8a55b7208a3ea4a9dff8ee8ec3d48974ae6100662de50b2d8610725ca0ad65fba7640163bbbfce41e666143c5cb8b92f13104af0882c4db44870e91a8d06e387703c614961d56f638859692032bdd6a293ab0eca5e0c0b69768dda9548431057b2955347b429a73f9dc0cf6ba3d1425ece626ff68dc80cf8e835d10a6c57df0c873de70e83f78a4bb98c3317311873daf69d0f8a4ae3508e9e238eec4590ec5718eb2271ecc6ae738ce2517c3d51adf12f081b38eb95025de259d8d8e8664d98be374bdefcd6bad9e652eb998cce49ac96fc0375d13c799ba8fbd96349adfb452562b5625abbdd6da93abeccdcc95dd47638d07c6c8ec1d900e7b761eebc2cd63de3541a58dcbc17a1bb0045fbd370b5fb298ead3353abbf81b982ad3559e0d19bfd69b43e574e0c77c4856ca4ad94edcbcc87e2c640a812f984b6726e04be6b2fe707a085b24c743f5d638d3517fa0755e99d2c6dc0d7ec661afb9053719376ed347f3388e6c7b6b067bd26b3df5c07e2a25af8ea994ae0e8f3a1cf26817532b132cb3cf43193435664f6890e5a32fc82d0c7b49170d922ceab496583fd1ebdadcea0629d6c10f4271150c2efcfccbc3225b48fa1347716dd54edb6957372579936f26df82fec43713133f710dd2548f63c0f9e828171af27948848742591c79ed6e580db7ebbe138fb1b2a2c2828262e22a5c8c89ca4d4c542a2626ee7d8aab4c5260a098c04851a9784a8aabba4f250546173f85e3c1c4c4b70ebe89ca4485828282a252713ca0b84a06a783098ac9fd4e66d8a21bb1a7b7deb235b73668835360c0403939a911e2bce074e0579938751a34803071085b36ff54b6137fc1c59c5c95edeaf07ef32d6e9bca3f143f716deb323fe9503ac782b5aec5eda4533971eb90d341e5c4bd87e1282a275787f730aeaaebd16f4203b6985c951fe29b7807fa4ffc87d39ff8f69b9fa038dbb077e228b703f14dbc064e07937b72591b0d42b94a656dd0639c7fcd41dac8508fd64da01e1f7314c7433b756b845b4547dca6526ee25d845bdfd64426c7bc87b865e274443120f9ea268f1c03aa9b3cc7e626875c8f74c597e6b245f8d2c17721d88f737ab09e1fe29bdc8bac9dd9fc04bea81c734602bec04071ccb5ad4b7118dd0f2787e128dd9702e3724efc13c7038c58585804c9e74f60c047e9becd3987d3718272d2b14e07e2a3dced3371c6d10aa0ddb07901381db4016c11bed4ecc49e7a8677d8c358873dcc4d38c766e73b99397113c7fc64e2262ec789896b8bf0458719c6610ff31ef1f986bd20483782fdd8e631cc5908b798875bd80ccac4713950974b11ca69a2487e8b333c05c05393a7ce41577c4916e6b46ef0c5e494d225584a53b05a6b751b32d5443ce6b6fbb68f36d8e6255d4d0464616e82153ce627ac9178cc3f15e6a6ae6d600b76b9cbb3699779a6f378ecf56bf64b53c1bce4990a7675787fc3db8f1886d55a297db1e4207d7f0d257aeea1193448d21eb94117ed912c7679036caf11a987bd56cb352aa63dcfaf1e7a16c1e3cccb38284bd8f8100853fc44f626c2ad206eb5fb1351a9ae57b9e66d3025ea573f4328c35e0d62a96bbc31737d1df672e2111bc04832333353974fa311733744a084e56a12b6067bd5773ef6a8c35edc218265cfe116dfd9615dd421c2d23c7445181d1317833d57835b95c65797af1e466bf55abb68c4def4195f2e2e9efbeb8584fde0ebc6870a5c805bdc9abe811905173b286b2e77b037e3abd6c8363f99524a2965a7cc1c8598359dd2cca8880ddf300eb728172f6e714648921cbd7c40da5e33986759566badd5bff8c2baafc763feec19659ac7b22ce35eaff8fab9835ba58b2387e92e5dd0dde316b10a5b08437cbd38488a0a3d1f219111e842aa1adf0dcc9a5e338bfa604c87ecd9400855aa2aa59452ca8f7187bd59a452595b841475b4941ac0af110248ba6251ac915db4616fae00b2a623f155262c14afd2812dd3b5941a4461675c52df08e9dab517d61c921ab693d7c0e560bd467febb8234eee20616e0b68c3ce4e128e0b2e0ab0857bc9231b845bcd0df7e28cd8e34c35dc8b2de51bfc1c92a4aa832561495852d5f9e95483414f3aa71d760d80436274c42d2cba74d18859f3c69174d522c99a11072d89cada222d49dbfcd49843b2d91449d776c3ac2411874d04d086e933c84f2faa45b5e8270960cbf44f2bc34f2f6d354eb0db29c8c209e129e814f445b8f5712fcc0877fc1811b722f7e29611bb5a7c3a878443e2b8e016e659375f024917f7922c2311071b6d98bed548d674ee0504248dd46aedce4f37b5b85692d063df3a0c7aecdc4bba34cb3e392cfc8b67ffb8a39fcfddf0b782751b3a938da9a646bab817b3a6d76aadcaaf60bf265abcbddd7453e228619d26e9d900ba58c4ac6f46b7742a66cd392712f79acea9aebc76abd96cd8257724ab66db76a40cf2935d9c11f7e25eec4de75edf27228f315024e88ad753f72f7997bc4b9363ac2d0f612f724f10fbf1cf100ee94f9d7f52322ea66e14d3300cc3b412562a752a58e9628ee570739ad89c6ebe51c766a8cf9f296856ca28c63bccc32cca3f1fe6a51ff812a7802f1ae6d33f26a295e237c7c3f46ed7a663a56e871d3d7414bb32f59658192d076dfc82a68e1fcd6bdd2e4ddbb6f9e7b9b228f230080f85ae406aafb69d3b5d1312212c82de7e3db9e9e426eba693d7ead9c94d99d79357d5e648b05f7c189b1fc162299b23c1cecc00402505060c140ae5e4c45463a0348eb7669e652847e162509967b076d333944a96b9f72f1c7555b2abc3fb17d46749f52358cc4d259c8ed357d7b28ebe7637c8ad0d069aa2a9e38fa7d3093b99301366433ed6d5189ba98bfe25ff6694fc6329f9b7fa52df0e4ddedddd2693a7b818530df6963032c4ce46b87572693a025f6c179fa5bfe01860f2d3e9aa587b2a51395d1dde9ffc744f45b8259d89b835e33cc42dcbe98827af5e9dcb9179356526af26d7ac74b59b7cdb19b4ee641d65fd54b3ac8b6fe27838b9e9e426db994ed59aec09b569773375ddf1eb307d3d7d65137cfe6f087e8db75367e5db8ec6898b51d1e1bdc9ab6e72edd44d37751dc482c5dc3a8659f7dee4f5aad8abc37b939f2e0df6e20dec49c96db0a56b7c894bcf2173e935e0cb0b978e00f89272e95aaafbe154e2a8175dfc8de321f39a79ad9ed29179751bfca2838f425d9367dd4cf6656ebdc4e93879f58ccb9199bc9a3c0b220faff050080ba2d7bc0d724b65832ddc7f0ef95f0878b8c88fdfaeb168a58c85659ab8666c42dd6f88cf6eed5ad2d9d2f485e02b7b26b7263f99b4528d97deddc7c365bb814b6217030db27cd8eb67cd54680d03a086d694e89623d9b475e7740e7ce1af0e941484104108d128802e2eea237a89af9d10a2687a773f154c2a8249fc0a220996dad4c07745c8ea788474fef590da4264ec70ab34e4e76b229d733b195dd7e574ada304bb72ea1fade99c6ef5f3f3ba0d6e8245d21a5ab342f188e211c523ad16ba7aa8b5d60c0909c984d6ac74ecb2ce6a5d75dfcabbcc3b6de34cdd0c3b2abc37cb3a1eb2999a7131b89848d80f06844292aeaee962b7c3244452104134cfcfd6691e6ea99c3da583b4901ff2f3e7a7774ee7b44eefc4701cec653b76b04e71aaced7c5689da1ce91aeaed14e5bebb037b79cda038b390c4f7189f333ab1e83702bc5a7d31e9af354e7797e522131e050d28e1d84a8b191dac8e9313a19253188ea1952a994f2172baea2925d5a83646282b4e21fada9319cd6d01b8ac3adc86d5a8d89b1d2b54eefd4d01a18fed19a14ff3a87fab84141a135dc52f9746ac3ad8852ebfd4cbe721b72053fa583a1ea20ca4957436b684daad439495187d6d01aeee2c05e1e524d02f54844c807494584ac28120a42221454540a62f922d24bd7d83521211891b4ebcc3897c9e1b77ae833b8d525ae3a3cf64a77abd125bbd4c021e3038f20a24dcc893cb127fec4a0582416452353670385a6a3e43cb3d40cc959e662b6a9cd881c035847e97aecd9948a7b6a54720cf0eeb79aa13a82675c8f8d9ebd858420c4ddfe439c316b661000b6c89c9a9a1a226024c7696abfc105b64857496159bc88a4714685065f3b3d6461618fb5534c7ce8f114e364b03738d89161249a0f85887441f5b04208a3418e19d034d8d2b428616419d9c4d7e5148dc8fa7933b2a9610b2c0559c8c242239ba2eb203f3abce1e1916e934a8e964b18c2c54b97a7863cc50fd8e10f901ef6e0a1d00f86bc5683d878a5112a6c2cfaafffdbe2ad46f168462369440649392bb7a64b164923cffe6ddfb7a5918a0486212f650afbc5a36c9b3ed347ce20e98a48a6cff4e1e2d933eec6fc78c41e63fe49a12176cd205268facc2052ce9e67d7b0adb99561d247b2d8231276cd1f66b16f91bb313fbbd3873dbeb248e4a68fcfb314628fdd87fa278526d0ace2d9e7cff4993ef367026139589256b1b0d1571b8418e416401389d0200be6b05d70b4efd0eeb5cfe81bbe61ea9c5385621d0d0ced8090c1bc5e212a942c0740182b59303424abb1ebc20668873050b23cf6daf38824f313804c745052844911ecc3a0131c61833de8292f804436888aa8c8fbf14861dde73dfbd72a3c9efddbc0b3fc21049f82462c12f49421704d12d6624c4a4902cf78198499a7e38eb5c27ed1e7a1a710c17e71c843093dc28f2c42e0439648afd0206b9081a8f0395a3d149a42c80b5151f450888aa1ff322d3cfb8b87425304bd1015354284a638aa62e85b1e0a55b1f3570881c8154d085d21849f67a73854e7d933a4677729b539e79c9147aaafb3c797858bd83312637d964782f03cebe4bc2cf22c87b49420f6e3a0674f51c27eecc344cf455292b01f171d31e2196203c3e1ab1c3e8ac33f71f8268e43e447888ecd10a194c37fe1f04b1c3ecae1db9c37f5fce64892fce0e81011f2dad1670e9f3a7c991f48df392f0304e8a3c39f0134c2d1813d79c2d6236e7d7c5391706b3ae3203114a222e9f9a33748b8f571cf23451ca0744198167ce982303ed2058182e410b7b0203546d80583ea0bbec0ee7ef5c6ef578bc4b85f255ab95f3d0280fb613dcfabfb613fcf7e3f2ce939e57e58926797f151c42d8ee2e1c3e8647c14f938e2e3888f17b7d8e7e1ab3a191f2f1f463e8c76b8c53578f8289dcc8f1d1e9e1e6e310d1efe4927f3a367c8901a6e31140fdfa493f9516363f3e3865b3ce4e1a73a991f373f707ee000718b67f0f05f74323f808810f191c42d7ee2e19774323e927c24f191c4875becc4c34775323f7c7e7e7e04e116f73c7cdbc9fc08f243c80f213f72b8c54d3cfc5327f323e787ce0f9d1a6eb10c1ebea99301526363d3c32d66e2e1739d0c909e21438004718b853cfcad9301120444088810901d6e710c1ebed6c900d901c20384e7c711b718060fbf76323f8e7e20f98124895bbcc4c3cf3a991f494992f8708b833c7cdac900f1f9f9f981c42d56e2e1639dcc0fa41f5cfce0e2865b9cc403b9c1c1c9e11623f1f04b9d0c901c1d1d206e31cf03012242440648106ef10b1e7eec64800879215288877b6ed8157376d80561d86910da230485cd7f984d134916118894f0fd84d7b353a328a0aba94a0b6b05eca32a9e2912cac5334df24c7d9e23e5d87daa8f31fe101f6b22e9aa477d245dfcd5a326aa47449d51cd9662d0201ce1d9231f79f6eff40c0564b14fa18367bee2d987c01676fa02e89ac159fca33190e11f9dc1f58f4af1ecf548ba66b8d40764b1b3a0e0ab8c2302a54ea814cdb5954d2c95aa11080000009314002030100a078462c1604ca2a888f40314000c8ba254704e9988b32807410a29838c31c40000000000008119d206008fb0623637eaf23c6d7c7c167aa4489e0db041fd89ee456a12843818bb9ecbfeb9803b28b158c6204f59dc3e198ec53d4af71a7aa950cfda1a03d2aa8ade491ed919cb4949bbcab727ef4a7aeb9c81dc9bd11e735ccbff5207206fd4f5a6854ed2c94598d03608c55b126b3f3d7cc69a9209b08eccfa3783c1a897991c024c131493e828de8862e0526a88572a00e5365b42fc4f8f4e0a4c1413b18b9aa1c474d23465171190ddfe76dfe9e5ce3abd3df34284cc001f9cf0852a58ce00b60c40291026fc8d7080e63ec01afeb8bef617c219e8027653647b3505e976e4d3a7045e1d601bd985bd2830b3475fc504192e0e2b472c0721b80dc0f15f137d3881e67a616c361629f7cee11acd9ad33cf6172d1710f2356644ca44015b404c427b41dcd4f40cd22b6df2d2923ff2f58a4a3e314fc4cbb1f988dc79904b66a608cbbc9b71ad282991df5dc59f45b47a0731f37fb17b44f3287eab899b84701df02e4a568e86240b12523b42b03c78ec10ef3f526af3cdabfd8910690dbb47eb0889adf5087fe3457fd50a6b28dd2ce9041688f66dcef1b1b3789dd17e69231bdffeba553434249bbdac0fc41e101ba52f5dd2c3905a780cda00860c4f9d6ecf4ba80ad9048f4a7a8272d7c61badfe30940a0644cc529c123c1f1d67a6aec7326de6b86e0658c3f5fa7782686e55507b8339fe7f5cd04471c2bde0cab87f879a06cb55217ffe596fd3901bbc677778ea8df91b39f0c497086608544ea67bb5ba2dd3c0c45c041afa9c7e6ee961e1c9ac9df3d0f67e7a310b6aa4f8774a757406781ca6ea7763dc435ff5af508276b2cf3c72357ad968350f24ea9e241f63fbe4d89450d406d28e5b758170bd6cb2e57c4601bb16762979ce6730eb7b71ad0757f7302ce0d2bfd054fe20a737a856da790e1fb82fa3a30ed436de915f1d04e308c53672537c8a68583d29372e398ab93a2b82daab58c4b70beaf8539d6d447b1b7d0938ea9943f2789999e9b8e77c865ba6700ce87189fd6395683c7d2844e32ec9eaa2916a6e712ad699c2abba54be632c97b3f2c599512fd5914e7f4384549e9f558f2a30b8fa5737f1f997c0af5cca019854c24975f54af326d094cc4f6f0d2abd204d563ba8be40a227c76933376f1273d70432b194c6bc692e7a3b328c4ddc7b227a7250561da1ec44a92bbb137ab1126b20827cd6d8bb6a5cc7a3e6d5f5dc3d97eb6693d03ecf3ca2758a7d22d0b455423849c7fd685de29c7a546d327de2b616212b36117c5b4046bab1003d47b86181f0dfbce819958757a7f8e9e83af7b9dfe26b6a927b169b1acce3ec44896aca646bca4306d2737330f404a6a6c2a16f724f534e6aca87802a5881c40b0550451fb389d3254813de1dc19ff2b1792e43af818b4685e9a52a395df8c9534f9540991e330b7aec13c20650f46c73bdc2a56baa142ce2e77cfb30b218d5698527d8844ceed81beadcd558d101cff584ae00e96efc540a427c592379e408dded57eb4e769e10596bf7c10e84b044419bcef0854779ce40dc55e873ac75dd47ac8e995106f4d6047f72e44193b87cbf9d2ab9d79092a13a1578f5c3d32b651c2f812cc4fd1d26a09432dacd274d46674b94c114dba17d55f728f44c3d634cea88f5998d32a1608d7c867d45ef693d30ec172cf3c47b5124de4f24c6d026a27dac4f928534232e92465be15a420ea75a235a927e36d847b432072cd4ec36cac74db9e0160e3a190d23f732b3b2a342fa51bdd90649ce2f17ba54a9e01249004c3bdc2b3a88b431fa285013d79152488c422b23418851caedbe0869828614cb1d8a2c4feaa0a9b130e8576e1b8a3589e31b4f8afd1da2d08f0642988d619bd33854691907c21d87f58518a7640634b613d4f843e4f553f91b905a6f814712632ca8a8455958879a0d683b972a913985545a54ddae576ab6e04534b51884028d8978aa1c45a716fa084acb62a344b6943d3dd17e6cf9a1378eba8da2cd2b18cf46f572807b756d4a6c31e24ab539060f10cd34731a8d7f9effd862be35548c9953149a22010409fe0605a0c5890bb847152fd5a1c0ab643a24d67b414faf815508ddf629cca22bc91583e3b8a3cce277c25c153e601941a196506b71294c285fd05fc8088bdc1c96e52de449219301e1068ee169511ab56e1248f6fed84de48ba6e089056c1a542a62889127c26a312e4aae29e3e05178a810c092e51e72bf3bbd3cbb7b12e08d22d9eba43807f44ad84612ef3210516b20262a05852b5d4294e9620f5bba226d87fcf6963977708d6f12297c2352a45a2238b1363d755e9bf0f9e935369bfeafe7dc81927f12906b10a33ee4b20e447594690726fa4ace2db665fa362f3c7a94c5345120c4a053bd77777a4311c63fd0dd81f7ecd60f88be15a9194041fd17ec27b5e9e01fecb73f9a52bde4f09b9b41f03f2cb57cc03b50e3ad489eb98a96bf148e21ff75830e864303a51c0caab4d14513eefa45af59e1c9ed991fffb4381731484089fb0d0274b7f899ca21fa7aa77742175a1714eda5d8f449a23b5a441903a4e5631124b81a073d7d11cdf9a94c46ff0191d761a9fb41bc5907d458968fed93f897110917b1770424b7f72df7c499c97754ee3b1c9a3f2c3fc0ad73547140da22382d8ea3436fa6c80931705e6095e3689ee5d18b961dba644556221c9496cceee63275597704e8d8544c2db9a13f0f32fb08abdd3ebabaef2914c3d641cb03b01ba44f183e7504e8284fe951e959256f5151435f615f3fca0bcdb2e828e34f37dc5e74166b7a64cb4687378e0c5f11819a393a02ba28ea136c3bd4dcc051e3f67c6bdc7ecec3595058522af3cc66f48b10a552b2b6cff8bcc53703c60ac20ee4b61be80898d2e0bb1f4f26c7c3bfa17910a2ce319f1e86a123e03a7e784732469aa16c656f89f04c8e80c38ea8a22ec3e534cb6d5ad23633e5db3a06c7e778d44be5ca11a0840232782a8754286548e23676379c02247e5e5aeaa32cdb239483cf93657bc28a3ba2a85501911863402be1147019d894d2276898c4ddb3c6716c24386ded304a3a9460f3820664cfc4389ac6a180bc87ccda0de3d5234591da73d094619317928c80bb91cfbfea3c4b7353fc0f885a91e67ba3c548d26e973bc5f940936499543ad999b8b7617df1208c4a6e3862f2279dc0663bb3f74bcfc734e93e01c563677a578aa74b8b5c7811f9b4ec3df3e17b023a8720cbaa7bdb8ae3a02b56b166f01b40b495a47e65cf1896ca1622811a37fa768c8010ebd3a8fef4a640a588a307e31b5744b41aaa4bfcfb985bd223c423fcb57f629e80412cb1de092e3a37e486a1ce59227bf3f70fbd963e25018dfd995035505068bd0ed0b93a0177f5a24c45b22d69b1aa5696acbfdde7d98ebfaabfa337a752e27000fd2d491bca20eb894feae92a22c5b3f3e31fab9c47bb57d83cfe9defb597736bae9d9cede5699018c67120299732595a440872cf8742af4d50154b6d569e4de782ff52f7b027707c007db6e0e466e774b006de0500905b4ae0d45aa9d3aee06e94bcd97e9e74d661958e2810b37646e9f6e12500f0ad4bf03f3d9975c918eabf6ad31f2196e0d0238afda32c9131352650b02744417397e01c6ff48a35a2408e28488052e2de24cdbd08ebfc031f382b8074bc2d2870bfcffb8a838f804e6528e081b3cf4ceb5531a9d47b5615020ba596bd095772073ead9e1ba3b2867820a5d9816329c517ee8109d0f300e6cb9856002f69acafe3f5350efcfb4502a2a54187dfdc39046c812bfff44f2b7e2e611f908f9a65a18e7c14e47a2680fea825f2ffa58e829456fc9d01b0c9b131e61140c7a3c43ef07b53b449eb1c460ec14b490093aa4ac7b5474b4ef2bd5207ac920f84c860a1cb14ef08203957a87a7b5d2b94e18bf27c71cef73a97e35416bda7017a919f3b0268fd484f1bc3b3b4aefd0285c7de08e261bf77d738fba80515710f9f95908243621153885190d46a38dc8cc27c569418aab62472d6a896a9497b668b66cfc5b0181d5e403b14cae4309f611b922217898a1222567958edf58473f751a7c79766d50de5349fc1f38ad54b58c94551a3f5d0e7725c5a1e341dfc597af27c1616c621d2cfc3160ecc349ecf37b6c548efde703e7bced4114612ad3e3479d7de2497e97290b9c41b7dd61a8c20b360f777017ee44c48cceb5c9b5c4fac8f8fe237cc367ee9d9728579150d6cfda2c70e4c6f770a259b19fca3b005883202eabdb2df881e988e593fba58c29a71c184889985ea3d2f32e97b2d671bee3da732bfe483ff580c12c2bae724cd9372375143ed7811642830796b32f6d257c0594d6c74dc98034532badd734fd53b69615b4f4f1314aeb20ebd1f5fdd1bf7fc6a8e7b8ec3fa8b8ec2c1ea83de462f30c661324367e616b15590c476a27d0a4d6c245e14e578319f220abec44cc99dc5b36ac1f1ce5560ba7e0836f5090af24a62c434080db878ef89d6703b266925e542e8134181b4bb7d533397e2e0b86ba94d51d116bbec35ba68878caf67dc063c66cde7e64767bf77c41b7782f2ca82aea9e86b30003d27bd204704880606f96c62f40e8046c27499511eebc1b32720251e350690f13faf69a85283518505c021eec5f4d272b9401743e7971947cb295cdd0ed445b11ee4c99bc8ba97747d484a7106e7d5dd0009d9a8892499e59c3ce0658f44e03825a0de356e44e23b3644013dab6f8fa8179f94a29413861fc9be66f24892c344095a74e21a6b1a00e6e802e106c40b3d6d56915df64a81ae5c7670ae44199955fe2983102c520a5fc648bbeb550dbcda14aac8366574a884c80155d8cc01a9bf30104aafce8acd75910cd626316d70b0809051d98a0ec6eec8e2307fe4676ebcb4f39582a1e661448b7701941f8b00118cdb293575a3e54d10b9f011ea175612cc106067d6659a77d2427e041551f2d33d614982b0054a5e1ee0e61f0b5cf67f12eabf642c5fa320aa6828528579a4e2fbb57f36c97f5d1d0a1a5ad67063b64b24f9ac8a2eae631b1612e8a4ee34a2d2881d0dea9901ee1540a5be5ae190d0f143e118e819119122abfab9ce1d8ca6ea06d050dbe2b83d75abd6f6a97d2b7fc901be2a3589913fdb6b50648dd886f8a0d46a5a88d87ddc742c7fdf4a85ddbc233cb5cecf4014da788d00fdf803c0e7503b22f71180f399cb468888b6d00972133e393cb0009c83c061e262a8ff12db5f39f06455554aa25f3f7f1dd55b03bfa1a03f6ee6a7efacb55f8f3cd22319f0a51250b73f459270fcb9cb9fd8ea4e7c8b9a308c0e38c8fd51ac054bc4ed5f65d809635faa54406fe30fdccac6bf789aac22333eff7bd9e82141ea8a8c65f94cac16ed8f889a97e65445f75c0810b3e8de180cf73e48255a2bc300841a4b3c340e2e13414dcfe4a548ff9720fd7f70adc3a0f0f6909e10b815247f5dfb5feaea7be39c07c4729234f6d15c2723ade9a440b5d2c6aedb1c9a6a7cecf6debf43cb0e0987db881e4b4a637730f9b43efce9115e0bfc5973ca7fa6cd53bb082ab12b67e1b9cda2c9b6241676086d6b80305235608fddda6fd7a9991ef5032b881efbff4603a3c3dee7e2a1304bc96d579a20f927d7222b03ae0e4b59c4647acb16d1a2a4f3e67539a7289dd461bc6bd2d0055847ddd2620462752a84c29f01bec05169734a262978e2cfca3f73d6083ac2ca4c360bb9066264c8dd9b90bcc416b86a12a5bde23e49faa6dea09c52087af4b766eb88f4892caf78cca4ec18dd838715df45a85ede863967437502a0fa7477a6235adedea4ce16af50f57cbff17073bdf398a6cebea902d3b0daa61cb56d9f9dee341d5311228f338218da4327150c8085049442ec3600cbdde314419ec4b18675f16f4521d75f4455c88a4dfa117aa0f178014ab7971ab43a536400f6a0f6b4119f36963ac12b2bd445cdec44dd52d3fd6de2c0444ff30ac52a174a7d8de070456de0944c46eabf1e34a956f1027e93f32e50c16c4250d85f309cdfdb288eaa50db15ff4c05a0c0b11f09d0b0ce5fbdc7cf6e11f7784fecfb94c4123b2f0da0017f2f90fea1d5813f7180a3291d11ae0a1337b2606647d01a9d600380dc540783654a2b6f41f473df7b914da49c2e94cd89c2151b34521f56ac73ff1812b4c504e02316710a6cb51d3c8115b6cf83bd310650e651b9c49fe80a130a60c6faa6e9d7be04598661b64e38c0e603f95d96334d2c3b89c8835609bd0d1a2507985fa1a23a5a4d021758a72099fb8c3ac7e357d6908548793ac3c4a44808d212d3861606d4476c0712081bebee381c6c44118722d379d7349b5bc445a881c9185f67e4442eb4c9372ee4e957cedcd4d06ddec00c8d0c604a3f2f83580368a77fa7615381a6d5039742b7632c8a50db361072f6d4b413abe96b72afd82fb8fef1ccca9516c65c1d637eb2c7ce2e3f076a6a680aad9389409222d52d2659246176f3f9c3c98b2ab216a01cbc1eb3fb12bc4705327de652562642e233b2b007466f250a4d023c0729a10442f93ac9940f6306f9ec35a0045058ce97ae8148c899c37c3a009104f708540216abf2c548305f5d8048821d422a41bd049040a59a7c3112cfd72e215629d2c38f7a7b349317b29d5c15e23c2a149d204315ff88a679c76034c0615dd18290a02003d047c4485667eb77e931647b38b1bca3d4880eb102619a9f3359e40c70486332043f581846b47427b33f3dc0a10ae9efcb0f401e881a124083d039dda6668692dda167fd39212404e8118b1c7cab73a507f31c079820959dc6cf510f34a5170aa41dcf69199a5f915b836e6bac711a08789686ce6b47f1b4c8c2ffbea96e5bab44b5000528e2182d3e8bcf2ac0673e96cd08de33183040cbffc958902436a7254d02e0eb7877ad829773ccdd17617101059d3d3baf2a898ce25ca17d664db8c615fef8b23398527d905e422f0d8b22d2071b5ddee4cb28e91c946bf0f2c9f8d305f6535983094987ce9dafaac3a81a03daf8f83e747648e95e17c7e4e335edf330e6f1f0e6e30662ac3b911370977369c70f4bbed3bf6776f3f3db35feef9e0e980f6cd479ff23f91b4062f3b15e48ef8d0ec61912221d3113de049d4d76aaccd959648b8d77746000cfb3987d47d149d44f1d960542baf04b76d4143cee517844e8173409f3157fce619becb43c9c5075ecd953b6c636cfa6119849f7e1cd6bd6cdc3d5528b1c34d74196f7b9ed6bc784f8a9fe08a9849018a84ec9555f6c97cb1e948d1296116256761bdfbb0b8bda382cbdfac3c749b92ef274c7566a2cb393af9c9149393a97a7004a5bfc684ce098a8e1e7fc4b524b9348c5e200a3e22b23defe808243c6540da4388432ab4aa8445ce87f6f0253def3d37ae761d618ffadd96f4d09d79e9f7dc3177266ce60021a1ee2d829e723a2d4cb56e78b89069dd2f65edf336c9d710f61396e2572ae318ebfe9398cf99689bca14a7ca67aa093bfcd4d4aed61871a3e9daee0c4b38209a056b7a754ae9006d19c491c94065de215c3eaef6550e989ce75dc6ee0204e9b3ea846273585a398418fab81a70e46efc7f427d04b646f12fa15b4d24ab70aa87e9f09cace83d2c23abae290b006dd8ecd7610c27e02a80de73a912aba5bace5cab9121b979a15281189277db2edfc48aa10128d9c9a0ab6c35c73f5b62dcc4b4d4ac4e60ecd0a48556e7ceb8a2b321c8969b5e3617ace7bfc0c1a8b53b88ae14422e3f64e37a58bd932c5db6e0ab5752a83e5d71e090a586e5311ff2b2f7c2a87d7b66dd8da9b3a61aff22092aa8f42dbb70d597c0cfe33c201032f01f9c50c0d2d3aa435eb45ce44b7d52fee333d4a53018d417291df526b6daf6ac34b5b8a293505aa4516dca21c4b9d2cc48bb67fba62fc1a22f3a2d153b1f8b1716536ee6e603c023cefd44a4b7165819bafd6f4ba89d4d03cd6ba850e5d8de3aafc3313bc4b55e0b284ca4095774a7c7f33ca3512af514908ad10f5bcdb70f2949c0aa2745956210354730aeb88f698e89eb02c40911258ce75b8af7321284ab91cd6b6c822f2704200393990ebde7e4b3cbe6c1fb8f68fecd15990433b0fd08e5cef46ac7d3b8b563684c33261d601a1984b9adb74a36c17a7e9b12da2fd1a7f7d41ce376da4749a5529ef1d5c6bad07881e85b0055937ec54705087720338c979444738cf29480200edcab17c0c1341a0ffc05e1cf3440f5044702707c8f1ef7b40cf5850082c4a94eb6122e564be52e80827ba20c30b988405918581a65e08be6777d6b96f805902c59e43b44da615d917580c37c46b3e0dda8f9fe8e4ca33ad58e87d2bbd74b2c48994d02280edb2c7dda6eeb0185e38b40daadbc7043694840b7ab8ea241d9fb614d8b4411c323a8c7f6a1190fbd0496e4ee9deb81cdb0abe6d16698a8aeaed411ea50709ba7d632bd818c18f96788f2aaedf224c03bd3f3a000aefd6df487cdd25d74b4758e5ad6c43dafab53e8ea969744a51168e2917df0f52b9823b513944f54d3ea89eaa2052dc9fac205ad02a5291f18118f348ade9c7beb5e355604305040b31ff106c5972b8b40b748350d4e514381c445eead20bcf0689c7201c9eee24e75982ee00b31b9d84a77f15c8d13a05aa275ff92904a1cceb4cf066c197dd7940baa808782df04ae274f260400080393ed59a6ca4db9bbf0269a48618d728701dfe97b34a787dde62f932d852712e02f7acbfc3674e1cc4b13027d86a81bcccba799af15abc5bca96d90e37645d38208464f0cac5a92d84ea48ea6fb89aedb1bff0c6a7e7f9281024b20f4ec8e14900fe06123c30746294a90d1948723a5273f7204a80cd64d7581f88e82af24ebcf30ada93ae98ec3e54127a1e729481085ac289a94a0f88545d609a78d659634f0f277f44373f1b3bd45f573314dc0901132f9b640b34cafb7963988626c14b06600e47b8a4e218edd8e897ddf2c20d05c5dc272b226495dbdb0b80b2017231ec6f1f4450bc4b5a307953f1642e1d200eda392789ddb9f7a976b4456e005264b2ae4e1cb7accc3a380c20c28508ecb5cb85c443b101a6c96eae185031da6601e0a2491c6a763a9bba6eaca76c141eddd2995138dcd42342459b4bd4c2e47817fefc7a702f2c96c4c17e23bcd1152fc94d4906814145e35167af54ca2b0f83420602a33c507a3030bd10e39bc1c47c7c182e80ec52332bc2a9ad5d7535721a0b056c1b2a6809618597d33255e076a361492b1f7c644903609cc92c764b82793b5745b29bb92a7c8940458e83266d617ffa97aa5462e1d71dc9a1c96d8d5fda7ccc75d5e5d48ad70dd5cf5ddecf8071612cc2217e5244a2912c023ffb222f1fa47ff5ea572e45d2bce0775a8f8d2ee3991df04cffd13292bc537b3b80561646f8b26800a0f0c6984531a8d002a947e1344906ef6e306998965961e3254d1a8641b6ae17de9a8f172010952c0ea4540eb4edc93c0c0b21ad61c896b74ae42ca38d9782339885db4b204c8706eed565cafeb86822c8d03673a0c71661cf71c46569509b11228f1e42a8ea31c396327e773c11469b0dbeeec42d6f711895e9418aa7e1d646eb37dcbeebcceb7fc520b2a5bb290f3a59c1600b73a0543c3c458e6e31f168fca1edfd8a8e3e11f8da30f625ed8973763cbcd43f1745261c521051371a5a242a9cbf2a23a13d0b1db48a4871c6a0abdb0f981d336e32b17f650f28a11fb3767319f9563782bfb87c603c87940e81c706350a06bbbc56dc675a450e076a6d427499a83e2496269b0a7497a09f701d0d1256a56f16c32a10115e74d26d5a79190ea9c803f4d80b8582413ca6286d832c7be1d6825c853041ab7da9f2826550699ba307ee1dc44263f4e71b1ec17ae9588f5ddf5cab8584b5a719c0e11c987b281393d90e5a5235e61646c75856b674a15331617d1f0e3cc9aa53f4b74a7c768502079464ccffdf90843310fee93cca336524906890586f29502ea42ebae65e57abf9dab60c735429aae179655ef6a1bfa0e58bd6de7d0182c5b63fcfa62302784ea414800c693ea7cc6d440221fc2efe8e8190fa16bc6a6030a2839e7dcfb93d8da9823f2bf416d241133ddbfbd0549779d186016c6719140d0ba865e140614a71a8c2ba548b6cb6ddc4e3507a36b98650880406f709c53a637b63b5d215e66ca0cfcd4135733f6f977028b66f0d3ab2197bd63267507c11a0d948da6a8df1cc4fb11dd584b59a6c6de7520f1c4c2d9a30b7e09e750da397ea79b0a604031dc8d6f767ca959ca635008eaa8ec14d7579dfc813723e1df6cb160dd59e0542d71ec9ff9c70c2cf5974c6d7ecfc96298b5a244c013dad8be38a1560deb71282f961798c450a7f78c8fa8e9f8b3e80f6d28f4bf44860f8996476cf5fe0ad8ee8e3f78736c58a490280a0372b4857461bf671f342cd11e0506ea6ba656c9dbe78b92f926309e2c7127a10dc4548b70c68a2a36895a86e19bbc4f3a6bae5886e10fc4f51b44179f8f37707e6ad7e0024c10c2f1d2e1a58771cf580a38022ab3e4d634b4b7cd14a3eeda06121204d6893bbb0382d47d0be1b14fe68dbf21b5e28e62139ab4a3abcf8787ecb7ca90de33da9b3a3249c3327f68dc24acc883256bc42606ed0fe43e27ea7bd57a5365d371192efd0e436344e6b40389356b8c82662acf7b93b71160d12cd95551ca16ae7d2d81ece502ff5bb9679540f12d1198a32787a3cfd027b97d599a1289b6390a335d3849d6703c533b8cdae3b28b928af856d108abfea0ce2929d581dc49dcc910c1781d489966c9094129908b32453aa0160109d6d9777a5b5147df94170347af6efa8a5b67ca5cfd3ad30e906fdd1d145234646213a523d621f61e1f4b464368dcee22b02d8c81f0b5d00f906a7fb09160dd44331c918b8a60726d62681ccf9fecd6900537403c0bfd1d026c7dc79f81bea93530822c9271839d0ac8d23118965eb59fa8270d1a848846e3e13e61a241994ce290f3bd4e73a067d21b050d87000ae3a36f0aff14c9d4eac6005f5d1a169e1ea19159ead0c65f4925766077870b2740d9b0feb6682e86097edc5e4e42fe811126847357918b3d0d220ba742a880e054cf0f3f45246ea265a4e44662cd597719d6fb8458d00a41cf757741b4b3cfbb8c8e2c502dd35487cba96d083c4fb200f7d3bef98a53727cea91e370ea1a859271565f923d91e104e0e048a9ba8362c7a0647aceac228a5b8dd442e20c82d29796f3681b8b83c5b6c2ee08cbe585003dcee16ecae8bc2f118cb5e5f15e35761bf282622181f89728a4ec292b819e3a9fdea5104aac9e49d9e54282958f309f76ef9b974bb4ae00a3ee1d6a9a16a0d1d08ac104cd0c190b1a478610357af14903ac7dc629d213707b30101cc77d2d1217060ca5bc68ce1d039aaa8117033bd55c090c4eee8a0bba212ab1b6c0a8edab6529daf77d05b32d5c2d83d835a9c7c545c15c3a9c39067aa25ccda73201ee3e89f3f47117168d80f806dd498b307dc2923b090697e38b2398cfd003b7200b681580ac512c0bbfd7a20328280231e6113f8ad830dc3ca9f9c6c396d13100d222a48c8ba1f084d975ff3214877289f33ef22711d274e1454c7758c9984c9b7e7a9d190e9d70b97728f0f62883cb649188e8673f4ed3a9328b1351a6d1f06728ea78eacf4e6de335a1551138260bad24d0c12932f4983e15e7c191498658d111dc6a731d714c021a6a6bf5e233e3a652a128ddbc01420fc0009e1ca0a1325e44b3a4dc65780086bc63152750f3adda3d12c72a277066bad1d3942fdd78375ac23fd3414acde49190e1232285922e8192393d5712f1826f7abc35ff822deb0a1676c70417be9da6f30681e446c5b263b9a0d3c0a1110834fa8ff78fa0b1d8d33bb81906c4468bae768c1b5b596ba3a157a6d0499f7f3cdc2513434b10a1ce9a280aea108019f8fa38e78b0ead41adffefd0b4e52f6235a3bd50f868125ad72d5cd680988f7bc2cfaa7ac5d12ba9c8f990ac38d9d080603f55a21db54db5339a506cbfe49abdf86529d7fd5f693b90010e9c0b2f55387f60d3d97daabc03b4c10b4f1fd329384e5a8c5fe1b8620b1eb787d021c440dfad2c1eeb47e2556dc8202e378401a791778d6cebfea58e32b73373575ffaa4180af750dfcc68df3f93e4b3fc01bc816f840ab1b5ede65b7b4c11a3fdea538f06dcacdf8bec4cff281dbc8989091afd9072e35e74c43f901f726ab714916685716443811ebaec4695e05a444c2f085b4906752024a758303374585daf219ae33cca8c76f28338520b0300d6fc3c84b8622974a1a1f6624ad71da0ceb1894b80e48829eac16329cde8baef44701bdb7163be1e1e2c2a55c2c9499572134fa0c53e0f8b0b3f32a6a80c15d1b6d613b59d7c273c000de44e9778f180715357fc73ee8c73df1b1981477a16459bc93cc31a716e802ac4006cc499ad2ff046c5cab90c1ea5b074c54bd91d6af8b86774199bd3a06edd56ae291272b778451f1f6f247699d06991a4a50a5c82d6ccde4aac18fb018ddb726634558972816c0189a319ab90792c2a78968a203dcdd0cbb95ba641e273909ecc842cb36ca8c0f91a8c39845caf14d115d1fad2e7dcdef8cc46f2091929df4a2fdcabd85495720a12be6e8e76094be0ac0a3a37a69475abef19dda3297fdfa5ba903ebf2f1e5649923bb3bd2d999c4c6c9763f82332100fbf740fe7ad461b818d200e4a20ac31165ca5febe7a61f7f30ece555da2de27f84071b13b200d3c77d91dd5e3a23abdd6640985394e243c0f05a79c54bb3c0d4fb0aca7e043382fdfcdc0a8a1b29d68518fe6923049e1b585f70c01543f051abfa46d327968cb00370ac05d793cfbed7a8fe119cf399d8174ae5783dcba10a0dea4ce4593f5809745cd6d524cad45abe17bafaf5107baad2f20be4e72ab8ad1e05b7bf77f236b60ac3372f5f474d9c5657d97d44702e2e534326763990bc1df5882dadd5eabbac5db0a9f520e369430ff406427ad46fe4dc6d6f67732010ef41b3e2ae58e02b6eceb47c9333a34096f5d27310a502e10904cad882efb08f7faf4151cc280c8d19f920d60e885a48597a2e6c2a22534a73ac9ef69c8c678e5197975121acbf56a23fc312bec518daf6508a0cfd47380f472e44a444c74664f51537411028459305f9ee934c278e5169f2e8e1e01c30e16e1e8736528d20d2bb78a02f7168cb72ff783e9511ab22bbb97dd5ea5f0120a3be8c4fbe5e8bdb5252835e10cdca335969fb654421a3757ae0b05863e1c9b53180ed449745d3771b767a4f5beb79e454b4619dcae9b5cd19f271373b53de0a849a59bfed71fd66ce3363707fc2b1a5ca50bd89bd399e6f352bfbd10389115dc5eaca7fcd835d4d18ba00417852ded9c6ed97dadea017212600795cbb7a12c8413195471be15476365732ae731a900bec6a438e508297305e097421911d72e8869fdc9af9caeb9d399b251aa50a8e66522657d11f323264d42dbeee1ec851e2bc7f216a01421476c7d8dbdbfaf54da2acf675c2c684356b245f86d463f3a9287a8904bf29530aabb4a9bc5c7d2c063ea02bb4a911517133db4145d25f15a519f8d9d5ddef49af8a67893157441fd8eacbd0209e624342b62a0b130fa4f07b0a170faf92d2c6616298665c43736268617df35dadbe411687e4e5622189ea244019f2eaee322e05355efe4ce6519efc6132389dd4a83eaa4f70f0893b4c23f855afb10827ffbe7d88a622b4be7ffa4719763b55871e73cf349a039984ca0c671f0bbbd91acdaaee9781f575fec11b563b4ede8f9d5531f5e132cbb5750221270cade71d25a6b6f652c32fcb6a0c09057459c5d2057a13d230815bd7eb0f82b529067fd1dd96f497fe3328ee1d7274e07fbb13c82d70bc2181665ec0f1342b526f09e46c00af249b889b7e202b17b5d0be58c24f0c279432b3f90a47859bf0e07a8a0b0d51023965638799e22f664ec853f7a45c1877d3d19c0b06d13bf77a4d98a4603082ba1d4075dffd1e676cc7ac1a3caf383717f8167f558582615d9244bea86825365c1f588e3c0dd93e836ed95ecb9c6bd40e8fb159091318530fa3d68b89bad3380e6bb53b228e455c50430e47caa4322fb172a7a46c593d900b280a1a84352b9a5a41c631b033c695ba2fc7da353605347f9528d84f5e9ce176d6c8da89d1a30738b86dde7a30bc0cc602ee579a8c3a0ec23ee5bb619d48eafd241e1283ca5a233f58e8c4bc1e037ce686db2f5bf62fbb63fae8607fe92866484ed6c21cae98b5e8c5f86506bdd74ca755c24f0b50d949d08d6e2faf5846da83418a676914392b85e57f7408c76a2bb6afcadd7883ed2836847de2d4d453c6b339ddef40703e43df99073f24ebf8c126f7211979fedf85a7a17ecad606808d39baafe88ed8958b964f610da9afa8ae8be9fb257d8cd5fc39c38f95b577d8aa7a4c00230eb10b945292781aa6e614ac7c62b284e83de33178dc8e61361104141b8f3d83e59ab7bd62939db0ca398223c378e40f03adb2b5cfb627b795ce6d33c36b40798ba12a8526835817eae7a990fef00298b3b44ce54c905031895a994e02c4d637007a9c51e12929b8b99635eeca51909c2cdc1d5a61c185eaa1b9c05a509feb885681426f3cf61a2f5c34576dd7e6c42a951083f3b30a02a328cfb8d48293e437e8477d4ecece86a71bb615af07b487a7ed1d7a04f5ba5548d57567ee285f99f4097812ab0b77f838aa8a21b02804625e9525439660aeca17b9c1f8a39e367c8bbf7646c3d7e5a3ff2d702020fdf1d2d45dfc57dfea7432a2f7124d4d21f52dee8ba6691c545d645662946c4ea3f909d0db6bcb1f2742bed6a12f0c3bb24fb5b9d75b92de7eb6c455fdf1cb1ede2b71370bd5d032f6fb757d6856650109799d150e73d133d01cdfcfab7b3def0b93c1696c474529be8310b301b37e925dc42cfb38dd58252d4417b2e2eb0f2b9e98805aea6ba8b415bdf111babce72348ecbb224843592399c0f429064e89f7ec59952abe7700831c7fafdc65529a164e25a1892a424e9b9a0eb08982328fae4a1990c759d0f936b8d56eab80bb683b468ff8cc8e3e01a0109654e291a677380369d381866e129ad10c4352f7c2f15611b2029221dd037487b7991b083f52e298dbe2de986e5322de7941686f3e8c7ce625689b28030d44a8b657868e6775280ae7721c15099dcd3b5280c3a3577ff4ff1fdaab472fb4124049a61c4d87b04ef2bd954b1cab89aa81c82ad75034afa1fb908b7cd9b0b3bcb0012e8eab1777d5c8388d92a54d509131d64acdc690853adad8b4a79d9f798177154ca28c8aee16934b6340a0a4e68dd5e8388385191fffac5ef9d5d48cdda731c8f701b54b700e96f6edfed0414d8bd1e607e1e64d7888ee1e712f29b7c135da40607193e37618353558058bdbd085be4baf1fc0f0f963245a66611b4cac646e504c0fda36bbdc609a6250c0c77fb40d76d106cccd06121ac40699bb067a59031e5e0d9c24e4e69f98c0bb1a0770ca0730397eb07aa5058bb5f12e585c11c743bf8336213a6f50e6861d660168f9345560c10306a4758863738b1ca580b439311d80c1d80644f926cb43fae79ba40acdfc07fb3aa79201190629a2c67c666f89ef49a5b11c3a347d396cf6ead6712ab67c6552046947213ed83288cf8dca0bc615fd2af318305bc014e560855b27aee07452cecc4f1554f250709e92b54379d1410076645ec1a600e60c1eff23c73c8c86e4f420ff31a959790474719d406f74bd6fd010a7092fae9f8f541d82e8a67f11c7a5e47b6d409ec94de87994d7a13eafc251617eeed63386d5b3a88d0dc526aa35854325ce0972cae8f37e5f942ee28078bd418b7b09609a3f8b508ea37763fe2344576f73876d682f0e31307dcef31b47544109bb2927a092feb001bde51c411670e1a6431a1dcdbae15c7d25f17baa08d700aeae763ebac4c9efa4855138b78e46f2897934979a56898f2bcf500dcf2898dcde5aafded44d00ae7b340b513c721144630192c0d42bbc79660b03d112ea754a9194253e0560dd81c9522223b8f09a80a3c96bf0c204a19f74dc3c4a6d3c2538cf27089768bdcfb3bb2f70905ec88b649ba5fb95f9cc84822be0a2169c550bd632b99f6f30af9a10e1a275d744bddae2b80d9d37ad1c0a7a4a67b42f9b351a2b5cc8f304d4c453029e444c70e800f06fde56ef0b5b2da5c663434bcaace9aad1a36bb05afdac06a61705acd114ca4c7887030792c74dadf9dbc6d35a5d17d5b6971cc829dd6f005d6cafaff9e82c3ed370609f19bee4172595148811fecfeafebb1d2c22770d3989394a2f25c8ae11227588f97b3d483bc89f090ccbd40a3a999b06fa4d5b290fb4ce57be834829a018a64757464e24b2a686c5d3fbcb37f6d49b6b03ac55ef11243476bc7abbd03340c63312dccade09b7462a16177735301934bcc1de06d19aa870ad21229d42a04c7078a07c1ce0c7840c0c54c103d0f72dad5bfc6c7dfae8d9570e7f0a9cc9f66e0987444a55fd56103ef89f1a7538f6cef73e8c875440b4a1114088811f8466a49411e99e971e899ca401c9a253521be986c1a4400eabe675d646cf8654cf26739c7fbdbd77d8f664269026c030b1a994532517810ddf9ad4fa0bc762e04f7939c4222f4b50abc2ec86ef127fc4e62968a1f3171148c1b58bbcd45d34e862c368154dc45dc7616cf0e7fdbf05448f47282c4c69f979c8394c19a23078c16b146f6a00aadf58655b11c252a0464c0312a6eb7c6d8486a1e1fb0ce6dedaf28d9f40e5e4742e0b247eff57897408c1baeee255026cd5e2d79fed6690536f1024d9fd0c811bba9d47dd87e59f67a8785be939390058589b65e74784e25ffb6fec001c8cc561437f68367375cbe14ff99435f2ed405b8407908ca698418fdc5a8d8f53d662033f82042613276774e96deb449db57ea57c8488fbb0ab8e5d10edcdf1decb8e963ed916429c43f59cdf11201e107edac7ba5beff4fd9994edcdb7706820997e1983b4a89673d4960f7a0aea728e57c85340be5cb8b939d18bc7a643665f6c05667ad3807814cbb19a84c1f033e240644e5183da2647f1476e49b2a8126d3a7d3fee690369e9a707ea22dae786d5853fd91b217b93419ff74875c064992772b58d32ec5e1bc7e66f5b0f8135b389a85a393cba129f5d167835915042a96faed4e6f7a5b1a3ed1912c675d29c00d55ab6bbb28f33e5164bc8630b448b8e369c5b38e5be92aabf16bebcb50d4987ac03eb8fc79bd1bf115fcf0a82eb378744b611584f75170935d258a2808655c4c33a00337925ef8574b2e3dcdb83f5018bec918c095500dc3e8dba19c0c9c8f6a24d75c4f2be869d1823db2c8d657d798f336deb970ea38caecfc7dbf49cc7d8a731806e8814cb6cce339c415620e3d7fdfe8282269bd0733b9a07243563222f10c93b29e558db11003f2445c28d53656c10f4654c4de7c271f29d0d70b977fb09d120bbdd11e3839e57cc5de230d58538fa40c9aa70add122c5bf671051d788a5bf45997c9810310e48fe93502382c2fd2630469c5a1b09f53c019a317784e0dd389503edb208b272074270ed6a7d75630b00d1bfdb2b4c5b268607068b8db8422c589755ecb07e5713390fa05a25c9ec11512eee8b929cea1682cb92a7417f14e7052921bdac51617eae618b6948b27a709557565c6aeeb24a95eb739fd6530b671babde4a71db38298f0d34988c9e0a56338deade13b362774d045c04fb5967cc5508b00eb895353f512a93b1b7870eda139336fb7a08626b783c07146062822524bebb76176bbd2c0096f6a5094a47ae3d70e4971d7678d9fcbe89bf2f35596e43eb8025a628bb66dce748437ec2cf93e8532481b564792a5f186c482355a18c0bff91c837aa5fccf1a4b6fe495cbe478c42a3f9d56c5610794f863ea5f3357caf043a5672825721f9c263c8f2402a9fdbfd99c1714fe544139133d961cd45b9a1e0cb46faad4b8f07f26e018c52a939f9a2b4728c4ab7f02e9a22eb41942e959028877df6fede24831557bda07b66e1fdcc71e6e446d45bf68566ba7ab5650a15a969f4bf358bb16d9cc54b1c4df0f130f3822315d4db1825fda408646ffc0c710099826e463ed6675fb1f8ebc1e813572f6a6d28a988cbcd431df53633dd9b0698dcfec8f7665dfe7b2f0e8afa8f1ed5ee319e8c076bdd3d09859dd434ced44df79d57d2a41125e7f587bdb16e84e5df55d96d000cc1c2db3a59a50646f94c71de9ed1babf718022dd0edc666aa56535e426f903a904cfe001bb5d45ace36713aeb3008108cc70cdc2df8e9fb3383509955f35dfc0998308243cbd5f4c25106b293b168d99b90415233a02aa35a0d284ffd5d7a638d1f221fc9542576d9943860d77502f04fcec8429cf2758de7df61c4443a2a604e659bddc486fe92b519260168f824a610438c69dd576e9397af7077c2cb35c690e9fadb06fa38dcbfaf04de45c46eb7be4b29b95562805184ff17afeba4a4339e424b485d2e85ad23e052b53437dcc01ae1b4b93493d65cf274f1113cfa3fd8d3b62c1892c0f80a708368c914c7ae281b357f247ac8662539a8c5aaecd1ea4ce94d3d406b21b2825e94d01ef96da0c5dcd3594077c44c6667ee17945be2a4173041e83749eee4c7071537257c5930782862417a4ea9e6fd612b16cab65f2c62e30db7bc9f955347824b8d3dbcb9523106f95410a60d51e8049e6c570d76629c72f563c97b9edd629baa676493513263db692adff18ef11f43fa0f3bca9b59c428869fa4e88a92f46b7f45eb301abcfbe9445753f25152fb76245efc587a0ab4120c32ab52c418c044f804405396a4da53c1e7480fe351b0ecadfa22199ae8f666857a2ce9de28fb06df962b0dc2a156e83ba68db87e5aa519c48a0b3b828262854b1ca9a0f6d70c2b2527489516c3bae3f312fe3f598709def9b596ab4c37f1cf255edc529224ad3249365f6f46d7ba15d88876478da52a339f2d4f7e015db01dc1116e3418dac98a1236222cff3ce0fc1f73472b6f5caafaf2e5cae11541e0559f5c0ca802d1b220c810fba22120131b03140bd06a4c086444c0abeff6f245adbc7fdbc937f159c6f26991f5625c3e9c3a2034493960cf95d40c54c343190ddd78da7e21b4f5433b75a8811b6e71259522932a2242a28d8b582121627e8c8007552706144757f948be29af615488c684aa9def340ff7da961a5c22969b67f1e9827a56dcf92dacc72341d9fbe3f6fd4e659e89e5442f1253421196f6d4654d50cdbc092e66572dcf43f188f39be1571293ba14b220e0a4962887d877c227a5b22dc153d64daa252b75a3b1a23de33465ff74177730c1276a6be781ffd51fc1539dfb28cdc5a662d2a25732fc3044b5647ab4a446ef83913ddcd7e0d3305abe64d47ed89357565307ba503ae89ede06a38c70fe64c79146e622f3ad91c22b43e6a3ef901c6343fd0bd966a9c9a4751dbf810c86bc07a0b9a7d0226f64bfa73d2014880b881c8fdf83790ff2901c705876516c279a0a5985d621d2262474f666063bd6c7cd4f400f972fda4312288709e8e77e10a955f282ff138c38c062b6a1bc2d93c7398dbb77d4cc8c400d2618097ca7872a22510b76c5311c17c6dc89dfd187ce12b0f37c538ae91ef65e56bfe11822cd7ed109ed79281e8307a230c4152265e170d45cf1453cd625473dc7bfff5ab71534e9acce00035f0571f841ed6cb5ea872d13bcc792ca6686c3bfb4d755f680e6e8ad976c3bbde750265c5d4c965c8c390e90b05e217db50311b158cfdf9abb536be7ecf3999661db21f6d562c51a298803e1f41dd25100cdedbbedc914b11b8d61993618c2e547b013cee8cef8f401e963a1081a830e009b67e0fa061881dacf0ec997594a4251634b65299c6603738c831636772efc1323d82428e6871633ae24b1c1d01587afee7c33a4e41729479ae7363370022d77f093b489d1b9b268b457b72e85277a74aa9616a6c146540483c948b87a54bbab424f70fe6064d7a74fb1084b3c422491b037abad20162505218edda84629f3f3aa4c5ef8298a5f5df5293167bc2fb6709286253742540633be710517f54c192a2c233e9f82a5463dc23c04d4866924a4cc66afe3c89971ff83bd01db06438ec98be892e37643e062bc119fcc2e4c17e8b5d67aba42a9d75aae23e8d0399508e9dc18112d50319da227d0c7afa12bb24fe7bf7aabd934fb026cd437ccf5b631bd3defd7e308b170b161f177521abacf9bd300834365ed66aacad25e5d8880a745d6cdb75a785e4d4075d07f519d038774047dfd8241c535dbd7494d9ae1ef6c4e867be9da174894a218752b927b87c8263eeb1de708d3537c19b7a4cd0cd01f1afc315e8e9597434c26f7ce4c0b69173e59d606644fc3851aa80e7c8c54ac996c2a152e23a10fd5ef527370d1cd984477ef7a0e527aabffaf79ad5d9d933f2c0f9b409c55f6f90217c1bd30b701ef3ef6ee87ea5d0c6fca63dfae468d9db3d857ddd3acb4fdbc45119039b59af6702462be30035404715c7688ff0339d51ba305012db35e92639b6497c36775a3c6abfce5732e6306a012df6968c27248a68ca65e322cd0d7426886dc62eb63333c1f88558635537b8b86f249d7065a39fa258b1a7bbd5ae15bb1955a84639be18ed4db512273e89dae19e496eb765d7b78c902aa717e3dbfad8a63166409d25034c40afc19ac27a2ad9d62cd669af61175d86b41ac2f13157407041729628580b8d988fcac99683eb0d47ba0310c914c6481d679bdc7a4c839b9cc15a8bcc2607d65b4bb3c34526cc7e14672d60952311b962f502bf68c970627c5b1228a0eaab761b5cc4c13176168cc5a41d891dbce218dbf26e23e6623c7f7e60708b0506ba05233cb20d333e8cf3117a6cb087259a0c022356ba2d6a4fee2891552bc3bdbab871c5b88cc26d6546d09a7a0f96586045f6c76fccdccf6532c69999084f22d416a7f14a717fdf040d0fc9abd3784c032017d2ed9d5720988b1874919a84dc1c4f4d72288eb7a38188cfe3f671d1d3493335d9ed6681a8d95c1d19b5297eed38e113d31997124e95369e68aa2a35312c0841618df53ae7b9879b2dd3ffa95dc71f981e79e0d157a0367a2b7e9fb34af7066d38c96c82bc1d6633eec09413a638f6db023fc8a53dd5575d6b6f04288885b9ed763840dcdfaf5908e4cfa631d3ce552631b75b503034654d73c93d3f2f3c44b8ed2f13b1c9416a84ae6f35349f0116cff79324fc261e6ec5d1b4baefde55ccd8399c4bcfdf75804d61b323cfb87ae01cd96d2d071859aa539c0a982418041080e7ef47a48d8604ac683042cfb641767b7ddbb6bbe25e3dbb93a5639d02374ea54b354f43bdb3774d0fe1cde2f72fe8c8b055702096181489cd89b1e6f7cd87869d9bcf15bc3d546e4abd711d578c3221d30bc295699a7abd3df399fc7e4cd817f17d9b6b612fdc5ac7dd59e278ed78f9d02d780d6c8edbf6ea77cbb7b1fe932ea2df66134ee40f4701484803104d3d5f6db1299ac00568152809515bc5814cf62221f806b362cdc4515baa8b74b087ed2345178da7540dcb32816eba56573c4f66b4b528e263e8d32007cc39dd740a3b3f4d929faf8177aca01b092a777c84e1a291cd4aab9902880252d48449fa44503e0c9469f34e449081a07aecb4c39783723e1ba0b63b2f5379b10c51a981b37086b2a9cc9c0769a0aafe48f40c46e872b71f73513cf1bc5be46fbf92c3d212fd6133627a86f54f47eb21bcd9c078b315650c677edca08a2977ad52842dbe1a00231426e0823d8996dc67c8f956d4b3c5b612bd2b3dbeffc158cdaf33eb0b36fd853aa6bbf55575aa5808b8d1cebea2cb6c47a0e6a3856fbc43e4b1d9987a83d6da946311b3f2f5b394025764f1be6dca748ae289b553594e27a654529af5e1512496a5eb116cb51b6cbd9e9cba5597ca9d97fb82aef7b424124eef4339ad67f1dec8e38fa08820937a9188ee55f6b1cf075884ab7eebc5a701b4fac633df7d37ad01acb3ea63b3d5729bc6564167a554b0af6a4b5c2344102c7703f83e76a70e80ebc5c58a87fb052e0a23e628fce84faf50c9c9fa27019941bca64ce389eaab1bd91ca9d45b104f5156553d125674ea6a09a801bd4ed7390759639b471d2e673cbd909cb581c7a49a85bcba2858291ad5ba48c27610e16ab5f94cd8dbb76add307c560e57d53635dc4d5d0abac60d7f1519be10daa607d528c3870beececf5a55534f72d7d27849ccde8f5860cf421fcc49603ad55f68cdd06ff51b7655d7655589b7e605804a1166bfc0340e678672b81209051bac16834cde8a7e58f6d1fa8153c268288fa3f72e430848579ceb6e90854cb9afafcb15c506a9f8670b81f34286d6e07fcb7aab23e6c26804b237cd8dd644f0541a37eec3486c5c4e4d1372171b7c234cbaeee47d157e551255afbdf9effade0ab6cb43997694ba75af2fadb3789c4321e718e8e1c1a9178f9abc1917edad013a68f85446f6c4ca74f8793268f8befc788ab4197b206b0b357df0ff548a50b23764f04857404781a95c5af5d90c9b796d67337280e129e87d8eacbedd0fc08081c53c1625e25d1c0894112422a2b3c1afc33a7930bfe13417a410c160fef67936546a3156535784404085feb7947c34610808a11f72844f487cccce018a67460e06b2f9972c5487efde8fe12dd4417a87db6df535018f92c6123dee6c5cff4ec01b6e00e802b3d7a9664d3dc0c78732b0d53020d31915a536c026827b6b1b560bf888222f7f749b27d5036d4c122ab289c16bb3d11fe40ffab0c411a77b9eb21952dca78d1701cf0bb3ac26c88fb6d9a74e80a20736c5f79917964f8d162200b4203e40d2116f54888147b892cd8e2d1878928330c4f7682b5ef6f92dee566079267f775103c9608ef0ea7e665383a8e1d4dcab4a493fc40c757a62d8f25fa18dc1bec371060c004229f44a4850bc994ddb3d8989ef8dc79759ddb85f2397ed21cd947655c220f3b38bb77b39ae7b0ed03df594460b70b03941e62ebabead69004feb3d792824944cd84e5adb9d9454fa1061756d73eb716fa0cd6e61814ce2574b79c21dcd59696b70255f850c4050c9b22232f92fa01d02d90b5cc7ced06d6d61186be0b9867c666a287c41a8d2e334fa520915a73704d9a8c106245b75735e29410868d930a28ad3a7933d4a67a65b5764c3dc33e29868884b5ff66826654e41e8f56436f77a3748cc993a2f9a83d831adf8a36ba0d99e1f0bef918c1a5b09f08635284064139af6ba2537ecfedf9a6d352e28f6288753a4fe34f5d33302d03ed9b0902e3ccf69c12476b544d948fe2fdd3c190d6faa8b843bda3440297a4bdd5a7f84cdb3f014732877245f67ccdbfbf9a00f553bbe8ffa6eeb2aada71ef4dfd9fd00d0b8a323ed33f0e264b4607b581d7481fdac9ae027be98a47d6ae75c6512e4c95bed00907e55bc8477ba5bfbb0d5c4f06043bd837e0b216d44b9df3aa804286bd3bbef0bad60b0012ff79172c694eaec35fd62c369ad6995ec722643f3054e0d1e3b9c0574423e6139230e45e72374f9e9d87c82a4ea5534f3273f2bcb6c9a7e51d07440aa01da8ba0a310d43336cb0d0ba4e14b7d92ac88fd8af48f5447b29a2fdaf12999afbb215f9b11b1ade377f07ade2a7bf62948da9eeca928ceae0d36ef9af25eb4de34e04d78afe3ff359b8fca1c71f18efad24b6d87027cfc960dba1100d0e0af2269f6ca6990caf0aa56ef002aee04f98cb36e04379556576370a7c43a6a801b25d56943b8294d9d1ac49dd2ead018ee2aa98e46706b2891d5c1f70b9c4dbeaaeea5e89c7d035c53425d1b8f8b92ead2585c2b55770de052e9756908174a5bf706b8a484ba368caba6445aa735932b9d7055455f0d9c2c76b23f904d35c74513768b0508edfd7190ac095a4158d53b9180643a0854205878934107e58af95dd7ff1fb05252533370694eb50265209856ff0b956a4acea11bf06cbde1456eadcfedcaa4257fa06b21b3e4d81f847e65bd57364033a726d934c3b2a05ac6a20836981e250a121ec070a3cd85f85de3d7667654364a996f0a2aeccba9492f26c7fe9693c4c4718303fd5ad347b25a89446d4c8e570d6dfdac4853cbd52dbe77afff2af408f92035b95089f75d86ac64866b21975293d6575cd2853119aec848aa4330ff4e20128235da8f4632d99bf96f8b637b1542fe30bec05e2e8a6ae04851b195d55abb221b614616046245e527fe667cd88d0f569c3fbf23192053427d0c445fab52c45fb6d2692770aaf41b44fe7c5c08b7d1a3230de93d34f69be5ec32803887c6d4068d13d0d826b161ec5eb1bca464165ed82ce5d3a61e00fe45668ef3190d401ebc8fbdbb03847e29f903a02658e9504b1622e60c4cd61a2cddccde492678cab7bc3a117cbf5afe22e2ebf4e58c7420b027b43f98fc4bd859fe93c3df940d6a86cf48f2c4f56832cc12a29116ffda2efedfd6d425539ad0895fcf1032e554da8db7cea2d69c530a1a098a7aefc703dde4eda41194834ee53b76a86096b900f3ca172e2a76528ecce86d2ee1af61dd259e072cc33a3911316f6da4614d245a5e2a3b4ff40611b5910fe1a85bf05fe8ab36a8550fafd3ca04f8a13081ede6cd4131e2f2467dc9eb1fd80ba31e72465e114070f722b20937e1293581a1df97e3383ca0f7e8f368f219be630fca909fd720ed8f537065c3aee5059ee45d98aa6f4f798202a26a0cc03f93aaf84a227b8ca1cc92ed5cbead3797e1cdc139ad41e7f316009f4f84bbbb44cc8c92041d24f3c30d38000ec537aa3fb41c274da07adca1e73fb1e8308e2b294b8ca7966197ca1899c5842baba0139e978ddec26c4406f1585db540ffdb0c7d82978fa99ed7a4db8d18bc69ad6ad9caa2ecb5160a05df997f711f653e4d62b2fe4ea8cfc2ea846ba429b898bd8219fce01701c6d67f3880e10cb15464a2eece67dc55a6791d34020b45a21ec172f279ef107aee1024ea2be740f0a9ba1aaa90e5b3d215c0079354d287f6145d08d688a0dd57f0502fd31b52a7e64f811d3440cfb3d3eb03097960baee222080396e156c504f2a6c90450c62839d8e7b657d06112bfc49fea4862fc3d69e4283a3bee5acdd164f06d1c461fbf6763f91555be0bf8465b622ef2b4761a9a4331305bb878fcfbe1327c229d8b123a05b7a8f23c0fb7183bb51740f10d9d238061bbddf3c535ac0e445c1acf6c1816b7091f4fe17d2155efd0da8ef7c275c27f6ccfd34bc85c94104d4ef53f94452dd26c22ffd0b76b4f1c0b7a16dc56ef895706edc8cbda1d0e94c11fdb190a06e389c2d9efa3cb3e75c0015c244bca5638665b18405c06d43f5c6bb3e08841ddad301d74404bf14e0a747e10cb7b8c1426c18f36ed457c6aa03517a488ec9d8c0dcf651e02c9c971b1f46f4958fa92d92204b5048eca67ad14a686fb887de5c726cc0f896440077a6c3997f99fc3afdbe926740978dad2f64c39e1148ded571e910f07c7a3362b1bae9f8616c3ef002981b02887902cbc957cf2cc312c011eaf0f2bd6e36022921162299f195409069dc3b408c982d8203bdda13682a5c07b96347f3c4a301cf544590fec4a73e65d0ec2942d2538b20b31a54ff6d5c91f57da7b67026556f16727dce6d5b5e08517c15628fa01df3b5a26b612a06fbd902460d8dc5cecbd13e92a1e786d93920b05d100191e020e0e8783c21dae9f82cb45c95601ba1c30ea313db8c7a51a3c6378434ff06f2876c049dad30304bc4a3ea319c978388a882d691f463bb9e0fc2d5fc35c30b54024995ec4c9ea49f0227e3f6d823c41527200206fbfb96b01d462e31cce1dee47343cdead239c64e02d358a058ac7060735bf8fb235751d6d4d28cc06a245be5c5b55b613b66ecec5eddff132a22851b9c05e84d0160a09259de1fa8faeff3a417120ffeacb35ac2460c79bf7ae760260bb90f85b66c564ad6c392215b83d5c60b6b43e864635208eeb0fdaf27db08360e6b75d335cc55347ea14bac256bacb1c015f495051042d0190b0d5a6147a21573bf3d9c950172123f5285d5089dabd752b7e923410442170a4940446ba512c144992b04a65580621565073cc82680ff1e96c6f1030250e85d3a93b9351e01a45d06af0c85c6b06dfdf18c1f74f70d9b40199b4898772103a985085492856062bbb011217f0b671b91334cfc32c44c84944c538674f73a820e28de6a30c38f14a564cf23b2f23ae9e3b394a66bfacaf754660f3749d8fda88ceb44a491c918d47867f3aa2eca6f1a782da7cf3775da36665ff315fc8cb45dbc953f36a0df836dd96a6788849e091568c130d0c614bf41253d813817d766fb252dd401aab62062d2e5c2215c0007ad31fe84f34bbddc210bbe940cbf31e6b8e152fb1592720fe8402350116be7c83c85856d2edc9499e1f9b78bf49678c991c40f3776cb7633dd3df2ea5d3e16431267296b3d84b3e9571089fcb44030ab328c407a5eb7e1b70c4e68d093b9451a0842005b9b0581329dfe9a10b14212cc404f14bae247a4330832220ae596eb85e676649f77a3492f41effaed384a26c3cc26fd1b293e8b28258a7b79e33caeaf1caafe83ac003435590df94346d8dd52636c94fd62edae1484b581fdb6531e486609f18c8c514924142751c1120c94c1b15befbb9c1a6ab9011a524a303dda33be8726bf8ed1be22aa1c812fd3c4073461d69104f5d1ecbddae8f6047f88477d403b1e0fe53b80b27f2a4e0cb7d540886d11e393680aee2b0142de5203367572d9cfe7030fe97adb14328c1acd5f06a510eec858995215e8262a07ff1512afbbbd7b644d502b20d6a26f77435d8efc15c348e9f0b7f8e946ab8f84b646612776bbb4e76351b84cee98cba7178e14b0f366d109e9cd4fbd52e229e7214979745ec64a1540bcb7ff2b75edef5ec7dc4a916d7de7e796eb419b314119624277e10e6eab56b65b487110a73418e504a442a126efa2ebb4bf27c9c33f2412d516b504ad98f4eef6ce82ffba0c48d4c839f54928ab3d81c41845b85cd50642eea438a28c375da7433ce39618c958cc077140219471be0838f67f42ed251b039894ecee02751cb7b96b7914af202ff9aa03b805495aa32d158be210442b32d89fe586ea05e89f7f311144918ed2415b2592ae8c752b01c4107d2367b745d083eb0961aec4940f303a950d8260f5d349902b46eb6d80bc7de43cd41c57fd5148ac33f23d36000467d985190c63b3a2cb934bef4998685e61ef65a5fce5219730f1fbd2dd1ba5bc30f782be546605fd99717185767dcbe311954544e9b5855e48bdcd27ecb929b8f1e89149bdc395f0415ace7025b2a2e386efc6d753648283bc8e623b69645e954700d3857f33879793b6925b98205c870e61cd3bec641ed3484d9ac62bfa564a31dc11217702906c8432e16e6ec5432612c76bc783e4b09149bbfa406396bac9ba4eeb52a177b021b404e5d347b05e8641793e80aba8b80c56a44b68c075b0123552ac752668240a7bcaaf00ebf2a27f0802a265d062103b358845929b86568c47cb19e42cf3fea080c4b7462b432101d2382ed8669cb8748c83a85532e3a5ea0249d3aa960fa8a5944dc474853c379bfaf0b7edab2587528d8202ccf043b6ee5fd50b1b685bb83264fcc5cb78c9868776ee937e3b6606158be3a2ad56c2cb02226b4bc4d53ac26f807301733e622ccdc1738acb00fab603d629ed3721972bbc05fe8be3e44af1a6a6d505845a93c77f85d1a369c6f8d171ab0f7b28b344e467c09fbb83e346a273888d58096bcf954952bd7ecdb775ff935d3502095a9d731a051d1605aa5db5011bf9574d3892156ce681b41c4404e15f517c88a436943f4df7e787a8d621b63d85c20f11ceca04b42a4e9318bee45f311a1711df43134fbf7ee267f4922f028a41a91c90d2efa394b008fd7c24e9a26e236bd66729cca0a35f304a51be49a6972a956db57a320c96cdfba96427a757435345e46fba220e1e44c48b942e6503d21418d8099e2661e10a0e1759c6823f87ff49697019e43bef5b348f22d062253294b9fb006bafc9750a74a7487c2625673ae8ef33238b7524f94c21998c272285a591c9af1c26aff2973f929c7d51a031ecd80e33204bc474721ec0d359fa4d93a692bbbce864882a0371608cca95a1ca29f48c16428bc8005406364b2fc4bdc024bc728862ae7d89a6f5cc2cec06ac1c3b8c03d8e20be3d4e3107706fb2e4e42963205ff622cd554ea7fec8e5fe8fcccdeea2fa8a716df3fa11077a7b1d9d47780143d483b7ea82a0d40aba6cc9a5f0ff0a912859b351f2451aa8b73538c5e77c8152cd3077bb3e10cc984132f654da9537d8d2232c840898a794af5c49917becf5ba047076a61a881c31d1992d1a40505c54477ebf6955a0c388ab236eaeee0af63850021a5a050848690fef99def0b41d6213e424932351d139f6ddd114371d3742a9ff35343a11064800b93ea15c175be9c2906a593e61e0cf40065426cf8847d0baed9c5243055570a875557e0990244d28e1632ac4f98fd3a6b45495ba6cf13ff071d0b66adf29d94fc8d3e36a71d0c15d864ea4522888cf61814b84bac4825790e8088ad1e5979be3e0e63f08d5766e26cff8408b32feca34e0f6d9da56c68a922049785511b2e494bed2007e48cde355da737c2761f0734122b960692a0ce6f5e9d04c98c2f0ec53bc2bfc0952c73389b1ad4676e5e8bf41f61807467e517dfd31c73598436c53d4568a22606ac00ffed231d830fdd5aa32113634b8c0394ddbd5218e4096f78f3cacc2008aa1b9e2712fd878872a399f62d52c1f43ac8f8b5c7cf0be2175313ff7de532d917fc788f7e0da9a9c272cb9e3247d31447fd87a66e027b37b904f396e84d8a4360d08bffff4061cc05339c013821e9e1ae1c35c5e61defa9d6eb6231cd9ed1abf68af9110c5e6f024af282b6b06acbde228a9c51b44eb627518d03b4c094d7c3c664c14884111438b08cc29508192b2ef2994cf1fe030c1bfd69c8675a16500491659ecf5edfca00783f47651e17b16f96ebc18e8f0c31dfd812c318c13f79d4dc088f027196fcc523c4e1b2b5284c0cd247149f0222ebe5efb1433089f5207322e459eb5efedfbbc062658c481efe2fd9f3637e277650903ea4a0f1c538b116f56de5bc40145511c3e87add97d3eefa89b1fd86ecf755db91d12a40c08fa674292475dc196121617922832f795e3cfb311836096b67d564dcc84f3618537fd524e9636540a9963ba035389dd44d9004e2f0958ed9a9adbd17988964e95f7a7498f91a978c12ee43212f778df279c41460c2d04b698792d563e08a67b77e31fecc03b3d798afc1f355b95d24ecef9a51a852c243ece5315000d70986112c722a4b08295cc677996130e4a114e554453c3fc1815cefd6df9911e87ccb2e79b87bb1bba992aeeefddf0b1a05d09cffcbd6947119c9eca95bf8a8a8145b61dfc2d833b62aa1df1b847c785d5b356e1398ab3d2446617c6f0442c3cd955f6a805e4f2e701c708d70f8655052b2a7467eef763315efd39e8ac14b7dd5351860ae1c9e40c4598d2343c25463f940557240b73870c305d86b6b4fc0c09706587e90d4e9b8bd4b2f279f332f1a150cbc07f01678e0a349d825c2dc31d6da19e82e28c3d313f158252b674af12b8a3edace2a2d67e41a9d2438d8139fca3184a5326afb867cd7f34a10746ac25eaf735889bab9b7f6e551cc3929ca0b342719aad149ec0fa64edd58f47dec578014ab277bdab7e864f2aa46a4df38093572b6aa05a5c66c458fdbe46489b14376913d7b1834c187fff015b7743078034e68c476b9a613af93788d4144b21c0ce28fcb2f0b9ec7f78dd4caf318ff5a581e67d46284e7db433f673bd3e84b2c4f26b53879f343406cf5240e080db529ec63a20636b3335fa1263931f60681b819a7c59090adcecf1776b5387aed2ee201fa0c14c6f01afe21128f60b0270e1d0806de3b880272fdaadd470804a7f8ea135d2e617830f3aee62c7a01820da58946c36bbaa59b9a6ded33e3527fab2cef28c0979231ea41bbba72291192514ba6b387bb32a8558552a9e8303bf4cd2aa0c8e901f9bfebe08404c157ca83e59ac24aa6f88407b5c92c8472c1f0200d6faa3f0bdf80ba9b66ae3a30cf95c52edd31fd8af38cc4aa9d43dbdd5155ace0d91b33e8d80a31bc4bd35ca4d6705f73dd321d82401488d0b8d247b82c878458a5496de3fe6a3d51bb76df907ef016ec46d9184b4d27bd7004eee2142592d86632fc580b2a920e81fe7ebb6cc49fb38a0112899d599ea79bdfb6ed5033b188c0db2caff7b3593b1403e299ce3c7224eeb21ea565614bd69e02682970495194911561ba701294ce8beaa0d885923231d11902a163fd749678f2f6bb4561cd5a7a197fbd76631e0b6f24bc39e06784a6ebda451433395a2e59bcd4757e13684d30b054a20be5a9a1ca289146f05c5e78ec55f935ba0866aad068be58059045ac02cde8a1044fd40d020cca82febf290a27c7ba31cd71fdc36aae4e5f44c719762e72bafa8dff8059d3958dee02f7b1b566f7f5d6e65bd814b8bd7aa3ac127d1e2f06beaf40180656b68a1e0d1982e5e3dd60403b52b06a78cc3c2314207562fde379ad9b9bc68a074f9822d5f747bd23f7ad025c47daa985c700d5f9c083a2e67fd96361acafeb37062b31fb4c69240d14077854587e2f521a23a5a3ca922294084f0712785594f9971b2c553dfb04a3656cb7a075c5b08c0cff1d8245441787b7ae5045921a6bd5fdd9f172d0f4819ff7cfecc8d7115a3fad04313754b0b2656f5564eb3864ca855a93ff528e9508ac926c0b5dbd5b59453b24b703079332143397cc5ebc44acb61159fc0c59850439ca2fc831dd5303660acc9331c74c620d06b799c9054e1c36a344903703be80352d26030fee640d0d4311d41381b5ea6619402923a3e0c2a8b688d383315b81a11a96e99157fd086a7ccb53575169db50dc7dee4c73728402046ce3921a04aed654573c16143bd71aac9f7a624b48110e045429f650e05b27677ec2e033c5a2f3bb7bfd1f9fb952543405127237d9df870dd3c4aeb131bb176f7d33b2e0e5e7afc39cd84d2df2dbffad23a85b74abd32285aec33adaf953b209c6c95b264d221210d3762ad3b54c53317fa8c65783dbb3d318121ef91e3001b2e16182fe3785b3fdb97874d9862445f638891aa1be697afcd0c5994106d3cebd31e6a6e9fedaae06217083e3a2ea77bf10a3d7b031a01f0adf0146a099b3dc2f98b23a671d083802a31526c2385cc2b605a058f30a0fbba5753a0257d29e6740aa596107a6153d0b28e7d1f91b9832d4ae27e1f70d3884f3f83353d7c1325e7c637e04a84ba99f783613a42475a2a4937539b9b63d5e671f9e2173e23b786a672a2994ed2080418262b60fdd2ae1b436eda1eeb25938fd35b0bd424fd9537b64aa07946dcfd9d0c8fe06a9d2b6ec469bca0fdbfc00dd34e194917ba035d5ca4b4075f1476a42cded221d132c8d25f7d30d2d9d24d54c9b6d868a58a158edc4964b071255bb375f762e5bfdc08cd85151f0fa23606ac44c3cd28197138d13b957453138c62f5f19478bb430b8639ce9d7cbc5974552ea79bb06491aea0fb2b4b0922a9d2ca5d81749b77e84c9e3c0433c41e99f3222e54a3f4eca3c0b7bdb6e2770e1992bfcc9862b5dc11282bdf19b6894ae09512d5cbf65de8234c43fb64caf1e6cd946523fc71f018e5b56e7583a370fcaa5bca818dd62e84280fc7c8d76cd8bec4cb0ce694c81d11be89d569b6ef9e9eb1ee2b15754764ef342a385e5592c63b414a44598ca2c5c6305d14af31ed475f157e699e6d26f06ca3190086c784b69a05fe75b578af9ece3eb18e1868e62a466ceb06050c0115ed3176172429ffddd2664fc9a8da3969620d2060f89e6a08fd41c7af17e9cdec841d4e52928015a00d4b394a3674f4475d431e1df4079654202cc8b3542d38ad77fa38bac32aa4f20538796c645c454ffd18a3c8143a204587ea3606f2ef4e2494f449a16b093af89dc8ce97285e66e249fd758d3a157510b7655a32771785621f214af35458af5ee92d0f8572495af60496c02e815c60e83e2f61a78187d93e5c1ba8c9e812ea718ef9fde39d853d405b709b8417a8c0e94fb8206491bc196bfc98859c3178a9ed72ab95a4db80fe4498c1d4f59969756a6e8cddd8a6ee6414d81c30375de2e54c9d269377cfa111d2526f0c5aa60ccfb0cf0391c2a46592893dc8ca9ea952ef9864831a19ed895e1557a059128d59d447453372f5179087229d41b1dfa79effc3e5cc6f06e89bfab2b9b43d94adaf4a1dbf733f62d5420faa6d13503db8f869bb03967b21c390e37a232637b43654ec22fcbf3ee96ffe08302cc84857d1ae637245e302ab9483e19c92422cf827a451dead0f0f01cd4815521ec6e6ede9d26cce505f163e9f51de85f8d6bd613f3e69f8caf527700711abf3b53b8161e335fbf10f5a9e22547224ffdadc395abca94c5046ed137f6ef376a9d50bea4e925394350a814af9d2381aabff9579e22f1c9193932ad5d78b64057d2f4c33fdc068ad08a08b7e04f067f500369e746aa18895d79b15cb04e600b89c323eb3c17ce7e9e5a8f3e452f433f41a39e721249bcc51acfa117c80d53ad1df2110380dc5a4cb9be51609edb43856725a0bde70a9d29dfbc22d46f868092fd9832e29987dba07e2cf54f7d9e4ec6ac5d401ca226510d0e0b66f678bea22ec69d51375ed9b3ce41949872df2be666226f5c7a8ad2bd1de65645be74aae284f2ece8d3e86da35f1b27a9f209e981dc71406fc4ae79ed911c11f48ad32b0b428b6e486d3d360fe619970f3798da2cad027a59327556401c116d3a29b60a5f0bb562fcc2d77144148b36184100b28f02848fb720800862ab70e6944284c982f307873b1fddb019704cb02ac93abc38ef72212526a7b8aa32d06b0c4b1fc76c13b6096a2222424bdade52ee1d7307a207eb061e4f8e7d69b12ff6c5beb4b4e8743a9d4ea72322227211914e875311e9743c17b94724ec746ce6edd8a0c2a04add884144a4a605c897c54ac76ab5d2a122242424242424a4d3e9bcd30959c1a974424244deb9482724e421212131f386c4c82ca107cd134de874c29a514d4dcd68c5f77ddff77d2121210f09f954702a21dfd779c83b5ff87df37eac836970e74bfcc224b641484838f9aa00f96a5789a5542ab1741cc7711cc77ddff7efe34238958fe33e8e4b5d2e05640d779e2548ce8fefc3b9567ae55ab956ae95b9e26ddbb66ddbc671dc396efb38156edbbe73ffb870db683c70de8de674851b540d16382e44ad00854205c9300cc3300cdbb60df338950dc3b86fe7b6709c18362f063387f0840c8f49846d0bad1815c4c4c4ac346badb5d6621866316bb763dfb0709cd606b141e64a1e48b3658ef68061e1cc40be9a356a22e7f6358b524a29a5d6da5b4b394ec5528ad9709c9452e9438e2107084e19ac0de74d8b34d209668af47cdf4d5fb5d65a6ba594d2ba712ab4d65a69541a35ee58803bdf3531a7929c79b97d80f93bb2c92ec9a65063e6949299449399590a664ea58696993521dcbe5dc3c7d74899a924e676e95e53b8aa6f142f68f36457cacbd6f8663ca7d76824d41469a41429ce579001529ccf4c2d72800cd59a2c74e1ce8fd9cc08639b5c695cf58d9474fb5a3dbd351c5bb08560ce2088210a28707070707070707070707070a288220a29a490420a29a490420a29a490420a29a288228a28a29839d5dceff2fbebbebda5e1932cf68cee90cae95dfe15f8c5a51ffb5aa0694269e58dbdd0e34ecb27769e4ed0cecb19da6da6e1d22a53a60f1489e2856f64087b279fb2d839468c083716c3ce6d0f9f74a3ee2896f89829a034a1a7f423df21ecade12d1aac4f4a3de225d7fe66b5142f19b24e0fb26e9d7ad7025dca36987247b8608833cf9b2b0a4d968c5ecd9ddcb45a97c5326de33a0fe5a333975e2d44c58a8e088b169e8f8b1110c90b18d77f35706bb6362951b077978fb121c1279ac8e426cf4543d4a60ed5b69926298d9a266d42cd146fc67e1fca5a702be9184919f5584b0ca4893743da6670ebbd990b75a12e1f2c9a014476137083d95e585ce150fd3f7a4a01087da43203f062dc038007c43d0d8542a1bc927bda6ae5fd704f33994c262fbca7d9d878e03d8de4799ef77b9a8c8c07e35eb65aad56de8b7b9a8b47722f43a150280f742fcbc9f146ee652693c9e4b9b897d9d8789f7b19c9f33ccf732f9391f15adcc356abd5ca63712f73f13c917b180a8542799d7b584e8eb7e21e6632994c9e8a7b98cd34a9365ec83d8c44f23cef53c6c3643cbb5aad569e87b978d73def4a4894ed5eca64f28e8345d6d4a16ae3dd0899626d485f1024ef3158644947f00977ef454894be77914fbecb782b6fe579c7ac4c8944b1eeddb2e8f2bc4f99625da649bd77090467c38b318070f408201c3da170fcc43000210042206e3eaf04b542a150ab5b0ffed0859ac946336926cd6473eb0f72d7489a8c46d2481a4993b9f530606c2f569acb6ab5d25c6efd0b120d84ca41a15039b79e64247391996c325366ca4c36b71ef4c13c192993c9481929236532b77ea48565b1ca5c56ab6e95b9dc7a172257074361391e86c230142ae7d67f56582a301366839930cc64b2b9f59e906a3112268391301246c2646e7d8bebe6a377bc7aac3097d56a85b95cefb385e7752c1d8bc9c66432d9dcfaadc13ec722b424194bb2244b92b9f50df2fd44aeaf2fd434a907b7d206b38d3696152963d381da71ebab8bedf18d1665513e5844809fc2b0e842a1280f1495e94e5ff8047c773a049972e5e45022dcee748744297977bac2a2ab54a2a3126d295152103ef9210f32e53a9d7a0fb77baf24ca8b776f1f2cbaaec6b91a48ceed48c620532e189832d848949b5864a55233a953aa46864f603841a65c2c17cb1362248a8b776f171659a753ef38c19c78dceeddc2279f77ef1bc8140b07a77370bbb70e890252b1c82a9556a55e29f508089f8cb441a6583434fc86db9d531285c5bb730f1659239bdb8d7c7422599029160c8c166e77a691289e7735958a4999ba16efce459029168bc5c246b8ddf945a2a878776661513d9d58c7895dba9029644ac5c1e9431089d2b961512d955225556975bb156690299586e60cb7fb444994ebdde7132caaa30ed55137ea51bb4f139f6cef3ea120532acc34a93051b8dda78c44e1de7d92584453f3a5743b8f07b7fbd4814ca92c4db0889e3a547f0a72c291c3ed6e02994271668b44f9defd047c82bdbb1212a553df4da93b0eee6e844ca134d3a47e41dcee92bbc760111dbd7b1112c57a3706e076dda5badb01215328cc34a9ef5e225158d4a90ed577dda74ca12cd3a4f2bbb7e06c7433e085ba7250a80b75e5dc7a59a286cffbe12a9dae527895c0ab74baf52b5e7424d7e882b9462fae11c935ba606ebd8a733052174bea458a24551fe262fb9c704e2e4e9f13ceadff40da8855a2b14a2e3e5689e6d67b2c32116b64c158a35b30b7bef3602d522916299114a7c2869c704ea713ceaddf3ad78a128d8a70f47c6189e6d66b97b5d5114c584775544730b73ee3aa97aa2c9e2daca9ca72ebb18f62f44471427aa2277ac2e9db6af8fa8e578f159a52a94403f6a7ed2f6fedad5dd7f2f0cdf7b5697618e973f367f7765dda755d97e4ecf6b2a17b5d9bd37e5e0b476c7843bcf6361459ec182c4e7bda36bc194a2e25d4fa5a6badb5524a69a5b5bed65a4f6bad71f86aadb5d65a8380871c20dbe7f6b9e5e1932c5e94c5c97dc4b6f1734f86afde0edff86b8dcc6bc73e32f9f66f2e1cadddac2c0445167982f20a01b1889dfe2f11258a86b2c4548da16bbd721198df46b4cf6fe2d5ae85a2a6853158e450e200f966f8eaa968d12fe4a03200e4d277a059eb5f06c74cc59d2eeeec1015e96bcc58377cb44f1fa3e43350f8d21f8143a2c84ba594319bf423954aa552a9542a954aa552a954eac78f1f3f7efcf8f1e3c78f1f3f7efcf8f1e3474b3834a742e926559b945386e6654df34093dbcaed8707c1ff27213908f4cfe71ecf4544dee93c24e4df778efbb61dc36eed297d5db17577a7626e686de636969a26124bcd94ac659ab460a9a9792b64687ee44edac27e5a914d4a29777049bbb57066ca5a4c2653e6c915529c2de8a81d01c6c89f169b9428f4ca6fc1f4c22763f66c0b31b79f3da191768c1acce528103a04299a31487ca447b87409140a13f8489f00f320451385e3237dc1a534a03a88c0350629e295233e361a6eafa1e160c4c7ce2171821471a9888f2d85db57e82dd8f8d8351771cd033e760f6e0fa18f703f368f8f885742701efa050a0065418afa25888fec85cb63603424e023e38888fa54e32327e1b213580a08f8c8331e51d3f8c831b807f8c837e01e14e023ef0811d1191f2714261f671b6474e4b4995e985988f17156e1f2271480f838636612ee2c82f871024144535c3263f0c3473985b4c3e59b80c547991af928a1b8fc519ae1b20c83a862db5b28e032022ecbb03e97432e63970f8414d59b0ed9ccda0ac4502066023138502afd084cd411375620b062c44aa9881211a5214a364a350fa871404d036a6e8d100c5800af14c0ab20525e505e12f072aa71129d4e4e0838d13880010ad0aa19262402906490664a31660630238099d0cc1503000020680ad5a13e0c4f188e9eef8770fc5eb45817e1f88d84a3874538c2a837568b708411b322ec42fb8d1e1877d448a632d49c664e9784e1f92c2b1c29cc0541be1a49d6d28452f69291e8ca53d90c562a100cc7f671902f09c857fbcca80155733281301216052c062b612f2424e1d82e77f2fd807c35111596036c84adac549ed38f1b54cde7138edcc303f21501f96a21f6c50aa69852a9b3b23fb02d7664574444c29159f886807c35ae460ea91bd4cd77952e2d5c3397e98a090909c7f9c407f2e5ae958b0817e96ab9469374270a0faad40dc7857c3190af5663c0709a31611a49ca680d089a09094e784902492bc2edbe65430c29836f05f95218299a3123f8487988e023950901f38c24383c9fae48d14481e0231d7de0236df100ff4ca303ec438a7885031f1b67031f1b8806986b64805f98a4884b18f8d83317f8d8270b30e81c0412cc6f1729e29a0a7cec1d14f8d8301360160207bb504911af543ef24a021f7b25021f1bc8038ee01e52d42f373eb20d043eb20f23988b28825994a4a84f447ce498213eb2c90677ce473c80f9cc2245ad72c047d6d1808fec72997108c12a6ea4889218f071a616f071aa14c0df198920f80929a233291f270dcac7d92301cc1998265d833f65244a77fe2449114d893ece97938fb38400de4e833bd08414d5027c94410c7080197c13c89424bcf34fa08444c94c3eca14013eca1b19c7213b06df0899428269d20f7d943402f818c4001e43daf38b9028da59fc1880cb01f878203e7e25bf4ac0b772ca1425a6499f391b1cd3230847db2208c72f0431974712335a94b574a86f41108ef603a107fa3466ca2c7580c64a8bb014075636b0a28195dbaf3153264c066adcc6663050ba40c90241cc94f9824410352dc2481508474b8170fcfa13a8b97d2166cadc81231c79d522abea50dfaa84a395401881f0013365928ea07969913ddd7881c08b112fb75fc44c992e459c4e2db22f449c8638d908474fff8899325b1ed0aa165d2b07b4aa01adbaadba7d1c3365ea10221cf95e351d620069012405847d2466ca1c4d937e1074a64557a9433365b25c2b1deab9324dfa293328330998a981128527e1f821204cd1a82d2db25049cc9415d41812cc14154c93fe015a0cd0528070c68d49387a08108e9f8c3006ce6d6bd444bd5162a69c609af4ed00c2d10a20ec87423100e1e801400844581202e13153aaa94d2108822008820c8e702a2108963c7c4908820741b02604e7056b6c4c5e0082e3030c777eac53282909674b296bc95ab296d20fffff1f0441f02e3815f0ffe1e07f00ffffe7f10338ef79c424e1ce9fe80c3529e1ce70fe8629182c05f382848484848484e4ff7f920fa7721212f03f781292939090bc00e72501a90e1a030a437750173a833fc4665eb0196c069b7981010281402010888484e42424200fa7420202fd243f49384e10080706382f082705055d59a9a42021b98101f27d01f2d530d28e1d2e3e9fcfe7f3f9804020d0a705a702fa7c480e3a09e8f3f9e7f3997101cefb99a1a9820f9b1e560081421549a55291463c1e8fc7e3f17c3e9f7f3e1e169ccac7e301fd73d0271ce7f5783c9e11705e0fd82f0d8436754c975a089f4f38f9bab027177bb2277b726121222222222222e2f178eef18888702a1e1191cf3dff7844442e2222b26201ce2bb20a620797d6d12c7808f7b260eef5821b82af1e4e573d244a7bd8b2c81ad1d3340947254aee8813f46e5fc2bbdbadc7738f18be6f52d5bd98a66a3ca7192ca2273a53e221f94468112ebf4a112d820c5d9944b13815e6183b178a1446fe3acdbdb2ebcaaed3d34f18e731e68dc2f094c30b8b50a245063583bcd0704a478c4daff85a0b724965d31e7243845b83d6d5401b7c0b5a234b470b87aeff9eefab6f2be65e5ce26ed49079cc5b3aa48ceb14b4467bf8acd7ec73b4b72c361139b463b7312c5e5bc83c4a5989c7752488fc3ac7f00258fc7a778e452872882f12ce589919b5d4946c3f70437098630bd98716322ab3611b2c648276ce75f6c127ade2526ff6f3fc9ac1217e0d3bf39d3c351fc5eb1a8d4dbb556f067a5a648d3874ddf2c5973512efdff065d6e85ec7b81bb34327e6b57dad9432f897a5ea18056aa8831bdad00637b481d6ce518f041b76b88674d2496340650d6da7733b57c786d5f43a51425734e982aeebde6060b9f32b68c0e0727f2dae2f5ef846911bc25e51caa01bbd61915e8ed895760e1f4a86e8b170b416c5280f4c97f82413f1a843f4563be5d18be74a2811521c5e8d8cbadc12a5327dc645a0dfd58a7146f4bbdab504078b7c8b5a29e2950cd1f7ca77170ff2e598ff95779c382cd219d29426b9b19fe827dac7a5e7f6c1226d93947133290b77a3433a62f1060bee8a4f70e4bbe2dae48dbf6bf20399f8de61d8353a62b6ce2ad673b0c6a980d7a22d1e3aea461897c71697bdcb6f7962897ce4142a334de8f99714d1960e75ddbbf0b5a7a41d354919f4891615a7a7329d5315f784a347c55b84e3a7e22c68e722a1cc486f28cf4b5f8120516e3c9c1be2856191f28ac5fa55695d32287bde8f7b33313bd434daabd1119f8cdde769f7efdda74af71cf374054bc237d2153ee94e7965858ef8848e4e5958a4a3307c2b3ed2951516e90457847404f2d57ac5b33fe6c4e09b77124155215db148e56aeb2012c5c63ce1abb8b4a182c3ee7365863f7ddc66e66c6bc148238c4d12a5af8757e83d50f8c6567964be91aa4c748abe30a37162dea9c98c91f0f97c8239be8eaeeabb36b59c4ad77d8ef38d73a3fbbc10ac6291fe03d21c0ed1cf06c2223d55c96892aa90f0b910dc3bf8e4854fb84fb85af19b9877ce5ceeade2132b1cbf5ba735ccf17dae3a88449942a2f40762e0bcd87cadefc97762debe8dc327563852ef859de293198ed4da40f844a2f4e95b0a522465c3b8e773c736c9903bb6898979c7591adb14fe0b3997aef8646cd5a57c2269bec063d22097de023918be91b6886c87be3b7c92e674739b8583f40acc8ecf6add168445fa8e3322741b86453aaf4d90093a73c692eac222a52a29837ef5e5e837314d3737c76c139fccd07416240af6eed82b38762116d2161669569bda377c63c75c4a4f4d978e8cbc72e19395535275a9243ee15ac44f90217a2a582c7c5d10439086b974e495c7a575d01b8ac327298cb33165539eb2c18ee193b1a465e844b148cfd5704c8b661264883e669ca5987196c659b2fd02f28a451aa477dce5523aeaa33e9ac327635f2551e64057975ec3c025bc3aafc53f06ca3bdf3dd21f417e0945a7a4b52465d0370c9f6494aaece7a12a9162e7574c65a92e3d8322952760f12c524a45bac24580dfa298a35eaba0d82d7cf059af0c524aeb8b08cf28822665c9ec4ca65206d777af4fd2907b1ec4478a8ae8d0f5b100d7c7d008d612b078dd029560f1a21424c27ab55e5f434b882e019f64455c963cddebcc1d413330abb5d65ab390b2987da4712b0d3adb9216bd423a345d58b97ebd044a78dadaef9d9a659e7b6119166e2c5eb7f1d5ab5e2f24b64074f84659d37958745478d746938fc8959f41e332640a0e690222014989030916fbbb04b77fdb382f211a07127cf2bd4fb50f3c09f83e7ca06bff3e10833ed00c3912ba083fb39b1b7767cec6b681230d1abd6d9de4aeb3822fc3273b0ae476e2edae513aa964ba85738b11e39adcc2112943f1fba8d94b5052387c3d22df9723f2d8adbc78b76ba10cc54b6f5fbecae3e050df138eb6c5d7f1dc6eecdbb78fb2c60b47f1822248b903e99655198e25575edc10f4daa84409fd7747f1b6783b70e5b539d20b8e31ae04c7193d2577d3d32b47e686034d96502a39794d8244c88b9d69cc192c8790b76f797b4d86638d2baf2361f40670470277eb6267404a7929e5b37320e5d0d44620b0c392f02c56234217078b74f82c122cd6cf160ed55bfb7de23b1cc93e8ab7b6cc7014411c600cf13e3e4d6625252a20ae24b9528406274519d036f9832564f8e44710282c61b1a2e19b2d9744c8f710f27d1ec20557529ee0087f14a5ccb2110e6f843858ac8fc16215bfd7ee9e16c9855a10d7bec191c6b567ce060d162565d182e3572d9ed26a4b9e5e198e2db89bed7c208f7847b104f42bb72b445ed27081e5ce0ed861f10a4fc0a27ccf19cb5e0c1e7254b5d65a6b0d821650fc609e932b739d3729155fe0649129f30530b0c2b982866ffc92686b6fd87ae6cb89bd78b36bf8c64f8630adb79f87adbeb9a0393b34bb507399b3416d90a0042cce15fe92e8b078713e9435c4c322bf9e8057b0394c3105b6d2dda679ddbdae356f9ba2eb3a4debbaee5ea761da47ef9ad6ddc33aac5e0b52152d62deaeb3b376ad79db149de6795aa7755a6767b55ded6aad59cd3aed3248b72051249091d6d4ae93289a450389d2597b4eebacceebbaf9da69f3dddf3adb59d6db6a98e761da766b39ab7d9ae5344bb3e72c7badebaca7a76d5d96655d775db7755ddfebc231bb366bdd6a5df7b6300fb330cb3a6679dddddddddddddddddd695dc7691a482ff28ee6799ea76245c8877117e9ac50e1857c18e7719ed649942dec3948948e0f5dd7e5d036f0ba9ad79dedee6e1489d2755dc787aed3a6d0ba4eeb5af3b629bcced3340fd330cdc330adebae6da075bb59b559f9d05deb34162d7edd6bc1a2f33a505e0d6c62de1bbff51ea7a0069ab5df37457176b79432ac0f3b4d5acc408b6c3859a83c8d35346bb3efc33c944582d4566d4a19cc35a44ce5d0ef6ee9eeeeeeeeeeeeeeeeeeeeeeee7e121e1649c0a239474082609f2377f1f96cc142e4f3257cd2f90a159f9fc127219fa751e341f0c909f7f90714c127f6b35211f8f924f8449b1d4e0554026271ce8b2c32016ad12c9546a551e9d2deda9bd67aae67ca3576cb66beeb167c4141925bdf407b8efb40ef21e077156048075c7111b073162cee015b80c0255ab0b244a9adfd3cd78bbb0047fe015ddc037e40906509242eb2377c33c5a279ead0859d57bed5d58343d7b3db06edfd3e8f877b64a378b37064964cbc20cd03ce0b035ce20459df6a6fed7d2118345f806c83f24102364c8943d7e73cb588043224512890d3bdf86262de0c04da0d64ef08c836e007641f7c03320ec82916af8b800c0464158b9cc322af3848af344b8f5a078b2d2e4ddac1e20b8bd741b061c0e60112c13dec2b0d9fcc193ec5b8d725952c5e7ce6abe18ef332e54aa9a556e4b8078b357df87a0081c3ad16ce4c4d2035e47a5d17ed1817dc39430d1679ae1929c5181d969dcd948d5699c2975ac7516a59ccb2efc5b71bc79d35fb595bc35a6badb5d6be86ed9165282c4361190acb505cfb2a450c85a4c127d8adb59a8ad56c77ed5d381947da8b25480e90efddb17014412c641bed5de8c4bc5e38aa4cf6c1e225f9da8a60cdb2340dab41f1d043b7cc6c0de45e8d835d57f7b8d7e5f56e699164f1f7785a6c0b33333333333333333d9db8100bc32cd432cc8645edd92f6bbfcfdade9f3b6ce7b46a3b8336c8375aa3161ddceb960e9628f246768d414b4ff223ade9c2cc15c095345d70b95a4848e77476b048e976ebd92cbd755dccaab161b81d36a7b2dd9ef8445a89226f6c21ddac51ab5a658d2c1d2d31dddf6ed1779669cdd9393b677cac6fb5db6be7fa49b76b7c0e3bb7ddca6166c646414f93dd1bec9be9a83143d4be8477b577cdddf04553c5b45a67e65b89f26132458e1a37879efe1682586c91450bb37ab338b41fee467fc3aeddc3a9f42ded00db0138234297e6d89a8f7b700d8b172da2456cead0f5122b41cab8ce2027419a5caf207b20c730819720655cb740e651696517dc0d1aced1d4c16296915a462baa5665a02ccb5ad5aa56659facbb8ea9e2d075991a335c54dff51e5ff6ec5ad84ed0db5fc2bbfd4e932c7adccd519e9aef249a2dcc73060d6d8453e150f3aedd0b412c6acc1c68d9408ae64c87aecf130f3e21788ca08439d3755dd7755dd7755dd7754bccbbddc3d9e8264b877334669f3a66ba45fc3d9eab345b5a664b5bcd82bbc1d74227e6ddc2110bef511be41bd9c662a2892f0397984ed84bbf814e7c3e2e8c05a7929d6df80413e16e64e7f39823e44dccabe25cfabaed1db0eb20655c5f01f61ca4c97515e01c815307683d5f187af8d947ec59765d45e88406da317c63ab4a52862aa757d48592445cead0b5f1f5b1c3179f24d7cc78179a320bc78059244ac62cccc22ccc72afec9966c7ac05a7b2fde38cd09ee5d8c21c5c38758c260b0b9f8cf099a0b4c71cf149cebd7ed193b49fe7628c53169ee84933c036a90b8b979461aba40c036c0d5ed7025bd573683a744eaf680b75a1a40ec23a28cbbdaeb1edeebe49a1505da3fbf6addce427e50995fd6eabd2b6addb5b1dca6db4ef4d7237b4d0861601db4976ab09f7fa18434af92a45d64886aecb5b3690f2e4095782c7089f10ee68f1e05e9f1c954c1bdc83bc0981144d998444b1ff7c4242588613f4f297f02e3f63cba276fe0837840d3fba752869060ccb6ad13172e1d075991a3ceef57186b8e35ed433524ae97b7cf63e486aa9965e7964bf9698177b8f7b559a7bd527ee5565c66a637d7c381e20f7aa39f7aa41368ddbae85f6dab56f19683d61992c192bc66ab17420655cdf406b07d3a4825687331cbaac1d1cba7eb2351fea26159966a8748ada4b932455442300000073160000301010060402b1400ad3648d3d14000d72a6505a5a3a14c9a21c885210314831038c210000000008000008d90600566ebf45a7c01ea5109b118f0f5783d36a6e1be3e1494d211a861463de1cbe0330af553f72f55e086daa13556b05ea9cb8803fd6fbff372253f0c2e94a653797378409be6bde3af0d109eafab061c2935dd9b62613e63c6c5fad417b26283601510feb5ce2d94431fa442fcfbd3788510545a283ce63948f9dd6553b4be6db43553a40b9924b55b32263e1f4940b89c52975639a36336bc2a3faf6714e34af2241205ede9625589da867c349ae999879d56512e7723167926cd722afbab60d7573fb5b7e4754a0fd352049b837ccdec1fdb81e835933a9b38336f9039ee6d7501871bc89724ca97f5950452b1312f0120f6c505fd3b40d27ac2a798b4a83921fd9bda10c90a857eb35c14670bd366027ac93338e58ca2aa633d60e6fa5bc494171ee7a9ce0306000ad69471722d67cab8240cf7732b0acf2e9c5a3af1f585e9699987913578a837e3c1e914fc1852c2b603c266d97c392f2a364ddaa9182deb19ca83933cf69e93d5aaa9d97e35f98eee42408a4951dcf599b41cf55142c018d9e7605300342d5e2cba1870a3789df40b898b479ef3a6cf6e61a8fd6ed0e8d8d5edcd8d1e17cb456c240eff7553632c3371856b1fe4931fa0f8b41f58196f541e93a2c96b15bcd2288d11a90a29de26dc083e7267df990bde7d28c180b3b66d4728e1f67743bff27e0a0fca5a29ea2f8be686cccd2cd9d8318a533e9017a045ac174b9a3d474e053813bcd60a85f31b7ad808a0f41ef6b614e09325ad1a18b86b4009d341d11ab0e06e12feab344e6f05ef5cd568cbd8052b5c5f17d60081a382a0eb47cc0e2b077a60e209552a071441706a38e21bc2a85e3ab76085094fb07393f48fe20c1b0f381888ded4bf313ae0bd9a941291765aa5eec22395f58c65d09512bf43b18c56e1af5ef0c05215fc7732eea4e53fe2543c4d3cf4c794e72ae3c89e5d0b3b4bdc221c92ea2fa255ff8311f1264dc1af9c3c051e67b8d20a64c2986935ff5fb477e81554216f946498f26baf769ea3410411880df8dc5e60d2b871904178979c3ece158d552272e4a8737f8025a96b00790e89f1cb7b54a959046e71ceb903872a4f0d6f4d3961c0b2aacd9ab8f0087473c99d85d7ac80222a84aa3274448efd8a5cedc3016f99c48410448197a4e64bedd9ffdad64e22dcecc4279fdede9a3d6ff6394ea46ac0e1a07f2d40dd448d60e30ae539ee31294dd344aad181aa8e0b48347634cfa1b77b50d23d499010b620ff710419e29b8743cd8777a38440a6d2c31a6ad2ad8bcc2ab0429b564a3e0be6b486a816ed86d4c49fc1a219da9b85e4ede1096186c9e46afea9b570af6433214531a1a6ab870a2aac423b21781affbb99e0d22ae41f8e587d820ff9924f2cf03f098a4e87f674a80c1b4d125e2a9151bc00f23bc4610b26cb2dddb46cb5e3b59235f0618dd2e3be37090f0042d0f7bb0c4c49746f953fdd85a672c7e748afe49a1583f44e86003aec14510328d8b75a2ed5f81cd698c727ed15914589af5463c54df8479ae6b18320915831f903c28eebc3ceb09ac4c5cd3568793ca054830f8725bc2019243e139b2dc4644dcd8964d4b3612e64e06f31de2fe18c5b773baec18bf388e517c253f62885d8f2717b52901fc4ed21f469bbab8bf02a4e8b49d88be29b1eb275ef21052771a2aa4e2fdd54aa9ee9330e307c2a15e4c693c3227c77b3e4db60554ab239165c6d44ef2c43416d045dded53bc371d130644216492c2eaa0571996287c0222bb64774b02068e7ecad67808c60442d73b146046bb2b18087ebb099e7cac3093b2d109f567887a22c4ce8882692a7f4673274ddce316da8881fe9ff5e0f76bf4ad1088716d950e74a1886d9b859890bf2a5017bc164ee4f31624452ae200ede9ceec444b7c84362ef5a6497316ff97af1ebc835efd4ebc2eb4bf40db983b3d211b12cdef45b501ff9161536975af22db15943ae240412bac746e0a6024ac965aa7eae1a49432653bfe1239695b89d80441905b02901e79f8f37febb4c3184c05cd3403f574c1669f2f311703434d5059ab8bfbc7783de260b3d154de36b1d55e81272149c0e065093fac10be4d32f8ca68a88a9de549d74bf7df1abdaea186d50b16855b5cdbdf8dad382778af5a97850d6e277ab1adb0f73ee855362442859b1694960dec55ee9d9e3b28acff2661bd45c57292051b1d9918e66999156b2962a852863599f82a756577005244f56f04e9593964e49e261ae8fa14791df22e91574811f9a61e7d1ef2ffee62246367bc1cefabd46a801c179d9b9ad303954723af62c52e1eaf2ba22fb1ba6106042e2468448151947fe469c2968f33eadca5f03a92d179950a683addee87ac6f285cd52da92f70da02b5d9f0a67028cf28a0be0c88dee4f4ec2013d3eddd2161434ab7033df35d542145115d287fd8da9a90a7b907c10e31a4900a20e74ffbe66da797d57fa3c801b0d060f03d4350c247d26de1cb29708c7e6795a5ea0a31323ef89554aaf09d6851f21007058398dab11658d250aae7e652535bb99d1c60429b59169f3ce1e89fcc2b36dcd186e982e072b0f9ce30b5017f71a3707032b90f801182ef3ee315a616ab88cd893075ca38fb96f00dd09b2e56c506f1ea4bef29dd3096a1eafbe8c1a264f539fbd3883ebf88aa926737b1b06bf1bb0c6dbb3da32b76274733c2ea660503199374279a861f998dd08e4028839ab9175ec1ea648f2212b3442bb5124ff8401263799b970314dd98e35cbfee66d1c22b56c8f65fbd3a43adb1bf61a556450dd829ce9baaf7521f0888cec72b4090f99fc5a41d9bf2e2254cf5b44488493011de7612952705d6acf3c88be76ebecfcfc4999f4fdb7ae481b104352a4d790c568f65f55a180b639c375dd80016948bbc109730701399d24e7903e6255d90053fba20283330a4292b160631f02cec796c6ac90874a42f76b4dadc5763cbe28324b16492c886772be03c5f0f05726d534a15fb684e0bc388c6f5cb47b4f8f7980aaf27592656f83b154fa60eb38b6041c002f04aa457128458880b569f7008452730b5f766f4f6493b5e9dd4e4ee04d0fc05a41c46151e4f77b630eb9fc3231bce4d08b12681365f9824ed1ca41c11c466de7fdef71e63094eee52cea9fa103df80806c4d199056ea910c00664e3dc60a199ad2eb4e8a71c28295fee8c30e100bb0b100e3337408f385a0ed7f4582e52e16a3cbc8f9996eda11f92d4b2511fa205642d4eb903325e14605abc11b22cbe658fb37e1adef0838916d079fe925380239ee60aba6e35f51e6f7d41d5526d3ab6ef51aa32528606a2f0ff38b7f1c3db2c0412921edc0111c47b11ffb231c100993f98d48fae4403cec48c8ea892de4d635243bb00197167eb31b6261db763f9fc392b88572678102d0517b25296945190da575904d983d3ae94f50e259f4bd12c22991a5170317b8b7b95918cf29956e26cdea86fc578e5b8e833715a2436f433971d80aa91afa51e1c290344884ecba6f3ecb654f2be2a0cadbfd42019469aea3cc66d0c65168214cd164f00a151f317cd0a38ad5f8918b8763ca8d8e76fb38b5d54757e38dd59ffabc0334fa03f343060605e4c615ce8ea34513ae304a420888f056c8119f830defa77d9289cae26150cc6a0e92a2716a1683636892f16a0c592f9d83d526de08cbc2725b872bc7b69498422e1a09d5bab121bd044aea1c5481d5a888b6975f96e16696dcb5d7f3232ddc2d8a613b82055e8b19687f9f1fa7160412b455a20f3e6a528bb8f2ab561cb505816e9fc4fee5a7e4b0fb1c57078026e47e6170d17bfaceaf71d171fc431fbe401f35334ac7afc7c9da5e544215e631b200798ff6ad25cba8f70cae737317c3b90247d782bb91aab9218b37eb351ab2f1f034eade8e8e36fe7d90dc2d884a886a8a57455024c6de4e15d4374eebc42078bbbdbd1f04633455c2140fbf28215db4a41fab1919c81844bb8c45a152692e013ce18fb757ca3a8a323fd81917c30856980e47bcd916d7b8387324194433bd5d50750e52a21e37566e98f198e6633e937442b80c9defab9f4240ff13fcd7dd146471521839176f4d1194578b83f24faf90543a8528ced14a140f90c66781196cbf5fa4056279c07a0dfd10be1c7b41d22fcf44e5d6768419f57b1890b0931ff4dce5d5b4115f685713d0b0e02e4f44d57c6d02e969d8d9b37a53c1c12b3cdf117d9997088551c54506136b6281cab71e8100c4a4b4f11aa25df33681d85bc5f3b93fe7f92836a776686a9da45ae2e87ff102de8d3cce0c5cbd1c14b7a3f086fe507c1a11cb2e84a6f2f9b7a05891697e35496ca8ba6cdc026ae693a032f07a97d9f3b4e0c57dcc882d107bbc346ee1b918c662fdc6de5109c328187062db9db1cbb5c41a168a6fa249807fdaf4a7f25f007d5c0b1d6ec9b23ff22a09c61ee5440eb1a2771299626d3a6a8e60002a43b5d0ca18e7e359e085a6a69e8106e360d118bd98ea7102b7c9c588055f68b1b46a62be295171031f7e307a9913c56d69ccf9eacbd03d703fbe66c2bcde36260c4a7b3d3fa93c8ea9f2e0d1999c31d5a53c4ca65e2b2dab7f960c118211865c9ffc23b117d78010763a070f3da1121bf12ca11289ff9c4abfe95054c7820300c180e8466c1ddb9b90ea6338444cb814e72947d7e44e6594660a138327a0f82eafc37e0b0984918b07b0605ab00901cfdc23783dc25fcd1f782916624708e8d7a0e4ba3b6270966d2a11f00916a2f2f0bda0c72c5e0a0d6f39d99614ebdb3f9afa17f1523d602e97d12d2ef0180dbaf36ee056b170231ea097a364dee44284ba818a8b4d9098d71b03c833c51dabbb98034ce4e095229d2cd245e4385078d40586c7683417eb7fe7f7b40c99bcc6d98c27ad3e525409d2a8a4f8cda898c02754ca5240f7e4fdc7c5fe571cf7359c0e962148dac9b4cd72a697308fc146bf6af934afcf081ad2cefc84c51fff0cc5ed80c6658913550c121e65bb02a11032662fa9a592dcb1fb8ace0493b2fc74335f5df7a1071a2f9483d80dba64db15b9a12fb3b39c219238bc167ccc926acd6799cb3fc5be3c7908e447d8cdd923b47386e0bb0fc6893da677bc3452c3a2a06b343ac3398051dc2b61bc368e160f607e5add21ea5ef6f3cc83e311a8e2c5dc8f267e86dd51a57c3485ea93acbd6940e19cf8c0904b35e6a40ff0210ff1004028944eb9c2202e4818236e83bc17c4e0b8618c79701db0c4b9eb0b3c711be8c658a8f866c3a9e04cb6e371cfa8b309c2ff3eeb50c3363f74b738b720ad464ebc3115cddfb0e566859c8f1e9023a3c30bf00af0f83c0988c46e4a382fef29875ac241e36920233e0e4c40418d1b69cadcddebe672b11594ea9c3c10bfdd52472b7cad4f6a2bce508b9d8bc9d1c2d991a1c5926456242112dd9786e90232b110b94958638fb22ab309112775194c7f8a92982f769aa87295165675cf61c3c0dec984a24043f98378fa920fe0d107999302641f8eb6318f6f801dfe12352e8d7754709152bab5f26c098ac81c0800815bc7378c5945e96240323cacb22c168277af090357755c13984e3ea82f2334b8ae98dfc0dd5a338f1544a352f297b27784b7b959cbd82c2b29f49a6cec37d930dfbe6576e8a0073f360ec764546370387c1971f5403dc4028c057d06dd7fcdc651c60abcf106ea6e3f7206e9c87a0a4f2655b5ab16bfb473b6b9364be7bb513a5f83702147730b3de6ce35b4e0166bf59151933fe1beb33da02b8cc4b8d7cc3b2ad52b924a6124d2d8348c70dce20e5dcbbf2895482dd608901645ecc7bdf3641ec4568d0bff709377fd8a6a918a6b372cbf813a7041179c1c03b570b7c779bb6c9dab06914affee664504c8e0899d18f2777e2a18311f2c455c34a00b7e7a44ec57e04aa50d08690c1182cd953014bc6d25f4932522da33ae5e91fbb39eed0968ded2571bf58dd04653a46428c04e71e620d69b5d9c2a936dde61e38aa9e60799a1a53c89be73e33976f5e1e8007b8021e2c7efd4caf328399cd83e02ae00b7ff3dd7bb86663ff819eb6812e74f93de26092a5944b452544d8e0f41e7ba7d7120edac9b9df85e96640c0a6623d86a3814687e41864e46d68b1f5872cafeccb9235f20f18c12ab063146ba5ac04eb65dba294f37098359d686abe56d8d61f0d8fb7ab29642631e188da872b1be83d857e7b344a3c3180ef88a902d2cdf6167f044f94887157bc412f44521a1ecea90a4951a03c0321ae59015b0fde861340fe2f26766346a458462a2981001ca5f26a039fc6e130cabaf0c1908d2c3267d0b0e6793b2add92ee951b3d3748ed51a51f24d33c2d1a3294316832fc99432c98f0e9f3641b7b27982638e165277060c02dc44a02f8a97fc66332a369c84086a252f7d1f4e29d8104a237d7b849f9bc7a061eadeed92db78e5d94bb3feb3eeb359630b4cf201f87d7d76770bd1bde4cbed833c1b5cb523b574c5a241e3b92bf21b425b7bf40499e9b4d71ab8426646a88982f6626a3ab7a39668068c23c024055a6ec4cffb7ef5b7f76108d2f96f6e9952d7d06c28a380edf12414fcbe1b4c7171448296ff24b578ee867868a98389fb5e76e299bcb736942e6a6712a7e6e584452e8842d589e1f5e07043c1e0387993eff9ee14c9f1f75629b03e01ea60e805939d07368deac9c0096567e2f4a9d1d5c61247976aedbf4197efa253444f3c275eba16742d0334a408f1f701159ce44d1adf138005519dc87ff93cb0be9f1466c5f954db543fe9eacaef7ab7d9b574b3e1b64e20c15ae24c189900f4d9a0cbbf7a9618c7dc96904e7bbc154a38b8eedba645b79cb792dc4d356ccb4136fbd797d0214528faed1f5829a7a216deeceeeb9e421311f2eaae9c534c3e1616c973eb8b52f4fec5c5423a62d5139ed4435c3339025f4b993d3c213881a7d15ce2bb7de6fea5b6048b4a85971b5d4922fdd5abfa4666a9dcd0577d427503ac2f7fd2d10a5093811a35b727b617c9bc941844add8ce4669747085d05b260ac30e8a35aa1b23b0d1fd3d426507527af8ffeaf2f87f45ab40e0ce86633b4cf223f831ace0da98d5fc8f14b996baa970fe8551c8a72b0f6e835d7249134c276e25a1ecaa0955ba3f98bacffb9ac3f47604988201b93bd03a54b95040d626f0dacb9f012234f5c8472fe92e7bff7ad8e75e70c76493c3cb49d55be55a4146e1b6824c036732e7361a7ab8a4ee18050dc64a1f268a18dbf9264705e04bf70cee417deccdd14db01d33d33a0584b1130e312c4cb614f00f4962a1184ed36129d21600fa3fec59bb21b9280b9189199dcfb5c98ad0b918c43473a83c65901f59a0e14a5866b72c9a9a9755df30efaa0d96c5aa18c32f9384a3d492df2095abacbc99496545916ba5c58b1744303fa87030834d016d09c85ac1b5acffbe9d76e8479a7d15e62441a4d4862233169df4f9c199d213704812fa35e25519112ed3f50aa665359e296cf4c2cee1bd4bb0b0b9849f0446fdd01b582b1e3d217804d5d66212705bdd8b142eb029ca5cd96559ba02cc284e0f1c86ba6f3bd9062bd7b04e0df01fdc19211007d18570420ffd94d3646b881822a5b95bdf78981e6fd39df613312b82bef0a1b5b64c26d6bd6461546036e02cc845eb3e3f6f69211a9bfaab0f94f89745ac13396076ed6180d159eb50df3ae793d003f2961650ba7eda9bada3ae9f36fd80911b5d12d3a3e3456a06c8249b4f06c76a55cb7a6e994e2994865b4260198cd53bbed4cc2a3480c968f69c6c2aa902c3906fbf0e4501fc0851f0d141b227b81aa3b8f2cd333daafb4f2670c4744db98bb620faba5c1f95bf5b5e30a612da98bf7975e18916d537587f1377a3cb50652f790b4af73faa66f5fca654a5c7a71eecc1d533ae714ab5518310373b1885120c507f67a0d391816432c05813527c0ac388d623a328fc0894000372c87f7164ec4a4872e89194d020d7a654f90b54b849a991a6a62afc78ee42e4694c1b9121d08abc4ef6ef26c9d759e5ec4903267d0e83344fb6b4740520d45c2637158374b90fb2c2a90326e328136ad5c9530d0a9ac8478d2694dea269c8abd09ee9350b60fd20aa91d98fefa2a5f51d01bae1cf2210e6c8a3cac08a232c53c824eb129b3608e3173ca917c8144a708296a031c58fc83dcf8ca55d9f382649d0561baf649134ff889479739f9caee39e9e4575bac040ea4af34ebf7ee64fe1ad77279920de921da5b79c3397524a69721b20edd19bde854d1428e3460e9b04fd8187604c2b49df88d2e5f85513f93c30408c0b2f9f0fcc385e8526893a9e913cbe2fa59abee96b64e8bd811e6a6aadff1b87fac371ad0300ce3ea325e57c2fd04bcd7ac9560e6efaea9c828627036b7fc7b03bd6b3e05db11d380f0ffdfd3411042dd72600eb2b5c91a4969675b46cdca45319b771ec59ec0cdfeed675066b5c4c37c64613f07ada940d016a876557971fd2a9931f0c8a03e10cd0bd57c1259359050a1f693f07bb4df10aa554cc828c719c58a196486a7d1a5f74bd1158a67e7be71976f2b8c6c251686fb82e32ce3ac19847c1849a08d82b89d81ea1020453ef1834d9aa45273568d6d4aa44903a82ebbed7bc6bccdf8e18880d79280e5a9285642daddf664970b8768265a0787520ea322e9844902cc6d625f659435540a6946c99a3a80ae52560c707b6613caf2f167216ea90902857a6050543e5f24e27c9f0c734a65181570c5a7613a6b0ef782dd3a30531e0494d60973eeb2f948a2fb7af37b86f9f8ef22ff6aeeadb6f3104607e1a1ef8535dd5b71647b5c7904c85418f8dc30bef672009ae6a500dd3c05bf524529ae9a019b7bd09063d1e67641121b69bb177a9f53ff5b3d38e8e84f93d0d63bb94989f75c8c24c4a662341812a94da5cffbcc4f875906c8ec268e83b333d51f21d1215f3a27f92083667c3bb2fdead50a397c94834952544e0b9fde1bced343dfb04aac35f14857b196684af6779ad9ab1c223a97b1de0d05d32f7108349c53a19e5d5edf46e312d750ec56aa10b301de2dfbba2050f3907bd76ac7636bbe14814789b5c95bd31ef7ab0fb0a25ddd394e5755cbde2297c02be2668fb07319fb4e83cd333210abd843320803b2f09c9eafebb8a5c9035d576869acb868fa1a61ec5394e23637ab9b70a91071097931ed10fd3b135cbc83c996062ecefc7a8f50a120370c04b84b6f462d9c5b9c7a2c9fe7c763e5b715df19037ce32435878d79822ff5c1396bd5a8e859194ec7c4d8779f5cb6bbcc399bc30d0aefe088bfa43f723636c18c774a31df1062ce4807a3bbb4ff3aab60bc4fd16f17f7ee7e06f952d377380ead55776f82007e7785b1b825bb509f758a9a858da696db0e26d76e3c7e396b585632ae0989f8429218053e5b93d8a5532e4ce37e622053be132da163cc50af62d4359aeac3795b50a543d18044d5108dbcc915858c9c87492be8461f84a1cbd1c24eccdd13ab6efc95ba1f08541ddd222d52a6b3a8e955218d30d19440a7dda518715d4202c437c4e8a2e9c775031bbc35e9ba10341eb4c322551f0f339c3deba01d3a1ada1a93ab3b220c9e151d971d2a7b884105ee1dbd9f4df84be49648b9c0199a6b3cd6185d5111a347bdbfbd48201dd1b6e1c8dc1d328196a4916143a946824b86b98f75244a0177163aa21d9b8261403199e88fcd77590d2f3b044e787282721c22210831b1344e5d5076f4750e4822b58ecf13af77a77ca22c6511f47bc342e2538d6c30e2b0166c9612c532f0d50a5141b1ccc3c4f4a8fe3a251d66f40a9ded26b704fb4cca2331e36106053e974e9a6f050dd7482b286b5287f8726a538904b6ee67927692d1e83598b87a2c1f9309a68cb804aaba5b3ea11cbc1066ea6cc7b2984c41740e4ca715eab8343ccb11bc69f63aeaa3f505f8421939986229f94438ad0aa4ba554a2ac249f6c1c92278f3f6ef93f06eb9baa4a7bdec373e2148b083b7db2329d1e4f50579adf77bf037d5ab1c4cf13023319b5e6d8377cc607c1989a096b130c295a8714918201f8901a6e89d09ad9317ce89ddb3017bef3e61b0074140e56e8e47056f38d6db733ae247024354ce96ec7dc6e9a7779bf36b37971edfcfa51bb9f5117284f9616d1529af426d2863523640a9476dbd3a3bbf7b82037e0224b337d6c39c0665a58b6bb4da45ebad6f4848aa3bc5a16eed5f5a31574ce7c921b5bc3fdc81d5e4662e39ddf93b5bd3119f2f2e4cf693318eaeba35269ea8402d85bf9935cdfcd80e118c0ac6e7441479d81e298678a78521ebdae9dc5f119bf5453da46594667ba67683000e78f2b0867ced608f0a7b5d4f11068cec70a62878ded794d8616046c1c37a22d0ec154b80d585caeff3683c9bb21936518f2952d31b485373e6d8f5e8744d6c259090ddb4ee8171d10bfd4b7627cde69f74ab07ebacc8b28cc7217ad588e08f772b0bd8920648f581035b68027e445ef5704ca969442663114c9b001933bdc8535ee7091e45281c84db5dafe5141d6c008949aa901e1b75183a64c726f60d34dc215d1f250496f05a2fcc4d9a03386c0e2e2e6ca78c1f160a24c86ce2e1c901d0abcf8a50327f0f707f73d6ffe056ecd5ad3c8fde73aa5fea593f08f95c46f4755e95e74cc72950fc185bea426886e9e6562ebce4a0d550815f3f20f43be5e91cc7788e49578f300d8da2bbb80637447ab48fd7e136cddd5bbd317d2113a8b6a9836c97ec97e75b15822b8d8c39cfd821f4eca4e45b0bd83d8510011a384df2a11f4f144d693cb4caf6dc239bfd9968db65d1578b2fe0764e094e5db33ed687de71423569271e863d2c628b17e758a4077456258ead8444b8e910c1b33c09cb83cd38e18c34b23f756c825ed81d0b57ac2bb02a5fb8eb32a494d18cba74e27048d27f50132ac12817d1de5d0b3c0a212642069ed0aadcea6b159c1f0350a36a58f5096eac5a50a8b313da4d6dce43615810c51f92fc66c079e0a546875bccb85c38374ec7ed490204573bafdd3560f6da1880246fc146b7d4a56d9f339ab9bb5ee65c82daac89d56f616ca3c9bd1763f0a3abd37bf0ac484712f3b54c4024c0ca6ac9973461c857c36156c90091a75308800019da2595206618c6e664ad899fd4bfd62ade3ad1af2aea90385d34680be3ad3ec0f694a7a08fd4f0563358a15265b2e261adfb13e9dffab541815395f209603e7813847b7ad585b8536cfd089f00a8b8b6590472895c43346e2063b7bdd5fa32ec8fc11c3ffb0a2bf28b915cf6f86c5e2423b1b73578ddb155d5795bf5b27ea74e420a21db348253bdc898ad0bd80e4cc4e3f529d17f0c253f1bef2bfba4cbcace93f1fe6ce2c8a71d843e77fdfa0a87e2b5a3348a7d147b2b3b19708ba322b3e7b301f6f7553050d9ded112d6f08f3b2f039418c0ea7155e20c96af812f71e076cf58d2fa02371e49903cbdcfe613e04399f5bc6c88ebee8c3d34538e056e9a60b12b38f500aff4a374cf10b75123631a49ed839674875bae0382fea5eb0abfffccc3f02741ada4ba0fc523f61668e5d98c15c4cfdec7dd028e9b08140873249f0f7bc5f1779ae7434c05ef29342a1a96dcee857073509f5845584c905dce354d4f85eb229134a27f212d143077d10308092790f9e70a01e2b93f5aa18256577cff30961bd259c109b621dc86b14d7e753fe9bd9959189a8f17d69f08a159d6c9c3b7238b4b8d754494a7f2725e46daa314167d23a216c4c5387132ad1920fa5b1fbe1ff253a676562d532f916da4f68af9fc291ae08d903d783d510b988fc93bcde8cc3f0529adfc5a85bc4b0b56db71b0c329a1461bc54eedd8110a452ff5bfab2fcbcb52f31ace2e536dc45c7aef24f864a8fe8a8c4e49e109cd14440f5017513ca219d4e3d7be0f40dbaf55c4d69ceec2351c66e44b5dd0793cc69ded9b99d2e6e2edb8b01ef16219dc75bce78c80c25dddd94c04a27775c6615f91dd2e198a9064e6373a43d454162f199c3bfd49a9a1cf1f849fc70cf14cec2303d1a2f0b24b76913d9e33cdf07f27b2c4a7c75ef3182f4fd421f46566bfc4ed1b6f5e519e6a410cd3cc57645257f40eedbf85dc6f94630670f189fcd4cd6b0eceafddfecc110df60c658154d621906f5a2726d3500b36f8c5ebc3ec482b34fdaf4b374ccc6510db601ef4c18743425821d42823f385b35e538e4ee0f1d7b437e9bca28789328f5404975d7516832470f1529477cb502c7f4411a25be9a3b95a2a8b1193b3ca0ed13ba99178e53e5e5bbb3be79a84bb46ccc447ff13950909f97c9a1f9a21d8b19cd536fdc549e74510652b2cc64c15aeb635d9266d978ed3b0f2cac7ad13c70d667175a1ed211d82ad6486c5ed7f892db9a1b115b9b0b8254c72e525fd5c87b67e7a4bebd04b5f68c63c710a5adcdb7b6548fb258ee086876c88521cdb3c9c06f28ce75c155679ca294cf2cb05468fcb6b982d04bb6ec0fe882644e36701687e1ea5efc2e40026fe4f45a7014c82068f0e0e67094611a36f0f6b5ecf674badb8704b9d3a5659b419f2ba127d112f37d46a4c7168aec83849cf727c77fe01888d7d01c4867f0062e11f0063e35f8058984fc0d8d807406cfc436c074f433d20d40343bd20e8c5801e10f5c4402f08f460a81704bd30d4f3413d17eaf181de0be825d47a947277b8b6ed560f9206ffbda1f0480e5926aa2a1e6f84524993f283ec0bf7d9aa3a0fa4b1480f8f678cbc515be1c7323b371a77089a68cc0d469079962a7a8431c8244850602d95f316e7292b3b3d7b87c470522ebd8d39cdccfa4cce6215fed36c0b2b497d1b3563654869cb11caad7627b26e3006d5dd96228d24e2eebf7c9313779c8c31085b8a65a73c72deb0b7581747029d7ded703af8805466296e88d24747d019f0d9a2c40ae06a57c44edc917fe15b9cb8a79d6c7b62257233d36ea9467b82a64d0dc36c91ff5ed6af8ac6a03682e25267b17df48a88394e214e3f2f4a1a554208ba2964c2b8d244798b181c9b5ced4188f4d18748458e9c1276bd20ed8ecf8a589895c35683a4de217021175266060f2527217f76189b6aa3c45e1b3630ec4ed5cebe22a4f7331cf236ed93a2c2697943e4676aa459c631c73eab82bb50384344b4b0bddea856912804a9edc85e9fbe6783f4c6e5b9a1a6848d36e06929da9b6e405bfdc4c4c48fef207ce8f30f85b8d356aeeb9395045930f67d8e2a4a8045e7b145407123a7b0cd909f6e0bd7643dc927250e096d14fb6c2ce74c8be2780c9628de89943c6843d6a5722b61f928f7a25739e9edf9ba16901c3bff147355f4184151d4f8291106b14fe362f75dcfc7934648c416a6c5a027d40a255f4ff2c979491455d33e8032225dd08a97bf9ecc93429528894e4b0c870dfc8d32102c26663d22d82938e9d528eae6082147cc1622d6d376beb29098d6d58b66ccc342378ff7fda6253b01db93eb47d483b6d4d88626817a1e3571b835f04dbb61a4e8ee221ba585926a1f0d3fe26b88260621c76450b3d458ba174e390e1fde13dd4decad17bb5e1a7b18c83d5576b9d62d1bcda1c2184fc1d563fab354678d024dc69592c942b5f923de568ec6a961629c3b450dab75a8560338667302a5306a8ee59662c654c2bfaa1477c005099b5e89d374f6548bc982a1eaf06202e5a9c5149a032329fe7d06664aa8cf74b259cf34fabb0692a91b8de471bcd90495536453340ff8a5f8fb1272e324b4b071122e56715de3843db248a6447dd9bdd19d866c2b5572a782bf76a7e17f44975ebd1392cce6954f50e6924f91e9e12aaddf659123a8c18613547183b5e8ee8da00406ab8a1e5b32ee97a1fe87baa463b9f243ad6cfaa10afe93c154d52049a95165482bc2790a38d4e4a71daaf43905a6da5b8d7a544d3674545faff5ca34fda8087aada747f9948c69add722844c8bcb2d76cfa525ea6ed70053123b0b369ceeac20e20a0b06d1f8e0ca75bf241bf7eb756d28a63528d0b09b4c355717bd1af0e484a39642634eadc9a0b37ce77f6e2915269d9492a76155f5f5db165112f866528aca9d516e41b3377a1ba412597ad0dca76a769ae1e6232aff9aa56f5ef9d7c7e01f13565240c40830c61a34802148b67554db3f336928017fab03fcaf945edef784b0e608f82ebc1fce2feecd212d2dfea1e44747970c0c7fb3dc07e41fbde99d30b0592a49a4eeb739c0ea146f0f7061c35d640e467deff1027f43fca08d94cdcbcc86c86edd8168f7a3d48d6ced868781f383aca5d73cccde4262d61f409fb7200826977d6927a9b0eaafd2b3b4f6280f0ff001d8e83076bb82d36984a4e7dbe309b3c3df3602b91524f34e96b6fea8eddbb8830dc019266e032fa3666f6d2b79e7ee5c530551a5f11ca0cedddf2e42c0a46d9beaee94efa456fb16872c6e09ad43ff97a29359c925a726d9a5b87b733afd588b9d73a9df1399b8845df4c92d26f5bafe0f454bdc63720cc3124d522c4f9b6bdf56228b84f8f681156c8c62e20f35d1a1f75d2f0645ac49fe43d5ba2723dae72728a6d91388f87f2c2221197fe307e56a7cd148a53849b8fcd314bf8ce4049b1faf1b0711fd822ffdf1158f7b7eea1f10c41489ac89124fc6900849e6497c46fb562422db082cfc632c26ce8d7ff38676037e51cf7ff2aaae9e8615fdb9b9b8e41850a02db8953249fdfb8b578459114a3d81e605c0f0627b9b56f55f483f8043e9c1e4ff3f1410a6ad91ff9875b1ef9810c734ea2b70daf68e2cf9fcd01f356b0080578db522c13b94a63ea814b94fdb75d29083bea418a21ade90bcf8233c38eea79d31b4228cb934b2abaea673007a3391a603e8b5a01aa74e14a4fc2eab8e67bca4dc7ddbc5d9480d3cffe74e955314923bb39458601655bdefbf02a5776da32936be877f8434a11ef2287ee37a428865eaff7530fa2f270b60a839af58733093f258996e43f0e7f1ec38271719f861d8a42c4302fa913158aa65684d1bd1a6586647e521f1c65077708ff93d80547966ba81a520a6e41b279fdecfa376047fb7cd4588dd3392f360b66c512d77c007861106829dad1f4cfd170bca29404ba4770c7da0182ae1601153c808359d47af119b19441a395b30fb6b7e9105dbdb328f5a48c6209469a861ea8ea27e183655918627a83671419ad66aaa024988a78e87e812d53e46f56fda82ed7ca8a5c59356ff66b797046530cb6c76b4bfc5cb8e0d7abc05757eefe745a85999ae2abcad30d799493051eee5afc6cac6c081aecf22dcb852501a5506235fb0133b392119e31855609a3fc0951a113a6980cbe4295a887f76c933ed724bdb587a79b6eb6b53a35994ad0bec4260dd7d6dca8c7fcabeb55d56a347b0ec7ad4748cfe590a297889eec097d2fecc5e90e9f4b96567dd1fa5bd13e768b95a9ff679a6f8ef5e113491e86f5758a13e6397be4f1550913eee3d7381adb144f339c00bb500542380df0166a502612eee225196945aa7857a384c14048912426eae04376107005c92d223b0b2ecb1842d13aa43f350b02754e039519b558b1f9745e01dd3332a43a8ef0842ce50fde2a00faccfe050a910fb0dcb8d03ca5d97d6018ad4f4eab36fa4e9d3b9d640ce81a90402409307bf169c92bac00966e45f242153d27dfaf1d169c3254b5a912feebd0e85366e0802bcfbfca3488cd3886f59695d43f949513cac38a453182d37c12720b19708d757f74b0c0dfcc0b933e175983e9cdaa143ecb4735b9ac37ac305dd2e0beb20456b72e5b33312f0e9d313584582210e80c67c7945d90aa778659aa107d8e82e313c862074c68cd82e47e5560b76844b9b8f9ed90a173af2259d72fb60a34396606009eb42f20924edb5454ff96282658efae89a3f902f646b6e8c31f9185688d8c3a6e8c807a9e26555c777e451810387c07c7f3458ed0d1c77abf510846c17058483616fc6f8434a0a7e26bfc7353e74450713608b0680fa6ed6952052f4eaf2b9656c6811d92298c9e160315af063cb2b5e3952c1777739135b69b703d8ff8b4682be5db795c04a68c5f2b9732cc0ebea64f036344400b168859ba3617641be0c7e627dbe694907c2d54d6cae8f3dc4e6674c780c0b34ea41336ae4414af1b452833be2c85ce87c81acbd776c3a74c8f74f413c0ca77a00db872747d1aa0d619fb113c6b11c891da245817c48559fae08e42732e2724e0c0912510e0143db4d9345b4d672d483ca224e93f678bb9e78b97c1555cfc4867c4344ab609af0ae418cf234c9182c511807cd6bd18734e4330a0def85e3c1008942ce0706584b2acaa18f926552feead23dd38b4169213c0014b442d4274c367d42846c8a0ba176d23610947763b1eb2531a5ee93780e0f3a725b02568598181676b03be934a60b63a95b703db3225765460b1346f096c725b5462a88c60c39711c2b88d841ab35cc9f14e1f7af78dc29a509427c5cf4209803087316a015af2f41e0f8c808d9a030bb8bc0363cc2f7b0780f95089393b5641043f9c4635821230f9ba2220fa48a17ef3ce2ae0c54b8ade60e463da58940d342dfae28f30234b05b18bb891614858b33b899eeb389b7308f95864833909b4cbe4d5e578b830afbb42ff91b5e0fbc12617fe59c47f4577411f80946fa940e2369ca319b1258d15e802904572e4b21d7d863e4f83063380c311b0cf9865fad414ae4f764301b6164e04e2740029331f72e30f2c73f0c05f46a6b4983d00b11a801e5157bd4645d3490bd748c54dd55e299a866a9ee6b233360777e48c32d8b043bab413a312ef99aa1bd8580ad35e22229a104814755dddc457823cfd39fa96901db401c5f2372b747483f877a41896c94d0f93c20b7db5e7303fa1030a50e07f406e58fb210e2df02b08ff86b696a30978c5b22991cc08a447dcb618f9b806a8321b59518d5909744374c2efe3f1546a804ce7159be5730e30fded374428f6d378a9f84a57250a1af9db13bc49fddd4344c0259fb133628a47fc43b0c14079511516d5fcd840f78ac30ef9dba54bdd114c5c40e7c11815846dc04967af7a411c5bc355bbbc45bd15a9547d0be18d3a6d8ca9db04bec059d09622e9176eb5433ca4490aa9cdc11f10d5b893260f03548989891c24769415d0809671540cdbcb6c76fffad917ceb78f2d0069c17bd137116408fb655a332afd7ac83653c8e8d4860ee5c3723c31d9cf06a959c82b8e3eeaf83f27911df0acd7dcb20e89a9790b03310648ee30ec1408838d8214452041ab44a4080ce983cc391db3d7d82e75d17d24698c6bbaddfc962c6350485525246b199f528878705149cac6a4c2b8f85305c98757636e97d0a167989eac9e2b510ddcff479d3cb22782b5c11b1a4d015815e60656449813b027ae1ca8892493708dee0f846a41bba037ce4ca829208ee42f488958525115d856822560a9444ba27d045801ee29b696e26d86b03d78b323bdd586bbb318a37665f1b594caa4af81ef31691b9b9e135f8bfa105a8cd0a82c96db2dd097fe70c8c877517a5f7b53f293e1f584c210dec24b929238186c76d5fbf4ce9c57140fcd6d87aafd5a113867f0dbde7ac6cffa4d23d4ee94b20ca1552bea55d91387cc9c5c49e65f576cccbb18ce3fe5c3ad4bad7b1e7c8ffcb795dca23f27baf567690b7a617420fc8817eaf70639589d02d0f8960fc27437b87c4be5cb62a8bc4a66421dd358667a87e18e6965dbb623a2f1da39f314d68bbfddc6dd5247a2830aa9e718abee9c13b16e39257b95aaca7058c8518094427d892ccb2dc3e1919a51fbab1bcc3f8cff4415926fa922b4e0d7090f0445962b7d12e4e0e2da3dcc1e39af2c9d391cc386de304b48dba71e2c34f261cdeeb8e3096dd1deaddd22eef9a511e1b0a834d51ba80bd64c159d7fb5acd9c056958e021c3d7003eedbfda017d4d5d86b114dd8959eeca382a920ae372702c7bc09e2423bab6c33f77f4d05478cc322d5a1135cad701cab11005dbfb6d2831f6fcde520551fdc0f445f76faa566f5c7372fd042f76f0cb794e629d295bb13d722bb4d97f5c10990ae4cee2ab201466b53b0fca8be9e1c4d7cdfa63bde870df8df4cc4585ac7830206d10433f22071436b316e75efe65d4c1799faf8c7571ed533e228388fa95b50687fd7e64d6c57d9f8f92e1aaebbe388e9c63c4b7b220cb87823e617d0dce1fe5af593459dc293edf6a17a580d641d42bef8f5309c3921e613f058246b83f61b5bc52bcc066b0ab047f5879bc6862ad705bf9afe71068d065d7019809ffcce02a0604d6ee2194404421681a70302a30cab99decd17744b0bf3b817382a8a8c00232357a3965ce53a4f3d413a418a14ab290818c6096d283613fa4a84ee19bee784bf7f0726a950d301ebedc116db0d7d835fd2b0e16fa99c0aa4dc1da8fbc84ce4b7ad85924402b99da34c0adc7612eb974ab82ae641bc9ff9e1803dc56dd95641b84a3f205d25c3d503ede51881a3e68e2cd8b9400564b5f43680dd21f2230c994a25156a208bd891e6962671a8bee9e3b7b18f74571ecbf52fb8bc4f9cf68697dd128fcf868f85fc4ba7fb0b8fee7f37fb867db17d5fa4fa5366ba43e5d0090ff6f10d1f346006231ff8b1ce8df84667ed13dff5ceafd640cfdfca1f48b629fa7572432133cfca275f85b45fb7b7ef99355c6bea81efd6683005f44b7bf8db53f4b973f992afc17d1e36ff4046fe4c6a9e095ff07f194f375c1ebb1f08b9ce4df4ce67ed13dfd4ceaff740cfddcb578fb611288c7cedc1725f7df4cfacfc7979f6c0af645f1f03f7c927dd1d8fad9afff2dbffe4935437c513dcc4402615f44cfb6d9e6f00139bb3598a2532ab0c717812e1245ee22a56ffc1dae168d84c295f803676c09f30122f204f44511cd157a88afc902d0020305eb85b2d3623934bee84e0390ad2f62e53e5b2c0efa176d59bf5a6cd8b46d1f90e2179973db298293da177de55e885f94c201c0cd0b0a6b880d627812d303c31a805f04e6b913cc1a7532b5f9a7510c487a9f6129a5baba22a6a83ec527bdf17e07174f06d7d60a88cc1f3d23660d22c27b2e4a701ad6c7c880137611f35223f583ef3c48d2006acf09d5c1dd8347e40029447c7c8925749974cc81a882496c1f350349da41c84b8dd41f5ff3a10483283d075407778f0fd103823031183f4412ac87e28e93d17a00cd47e444d179eb24418798c9e6317a9a3a5e645e2e9ef0a779c8e17a12425317685b0c70cf2616350699f8fc4fabc613a9f8d18fd0d030907cca8c6d8d1182a958f432e26709f29f6e9ce0784b339f34e671370b8bf1995a2a7c62ee8634d4b5f671b4f9a0652378a249933a83f6c9ba81729663fa5a468ac70a84ba37d0cc862993cf8070efb0623e88a53136c2cf1e0486ec916e490e12c03283c0eefcd545b2c766b6ba16a3af1e50ffb88647f46d943992526ac992dce3c6bd364d19584b86391797fb557adf4ee7f6a23b687aa4c1ee9662fc92cb04cbdbda9b4c9c1d00a9af31af9fbeaa89ae14a3a6cb0e7ebe21ccdb68239ce89d18ca9ff80c53645a3192672c4543dd0f4d93bdd732bc9307277f2d63b17d338edb89f9416feecf5d0dc4f3f569a597b8cf10bf2d93c52920c2b015dc38feedf260a0e106a23652b4f8d9e0ad07fbdc7e34097797b7c0a6f2a494ec4f02393511629ee9db29f9af7cd9d9b07d1c90fc21f666442dac1d7e67f502eced21c84906f8b799dfe34e8133141a8cc6019175b667152b36285c14cf0907e157e68eddf2587c3c24947a6d1e897a5678a6ddb0a6d15d7adc4e31faada15c93e35c37a7f4b3252c83e2d663951d4906f7b4b91eb0e03ce0d15c7dd7d7c5e5d884b27c0a6b8db3873d9043e9348553ec146a40e171e4b99ee0a6c9e79fac679cbf7f0913212f38bd06cbe82158e5c80a292f4f1792cb05901d12da86f829e82f24a4734b33badc6ae31267dd1e5ca5f2d0dbc88556c271a149fe1233e23c57f673da0d76590cff73be89d2f1f232bef890e50e8100d27998ec409ff827078174e850f2168f76d4344c9f139f78160db2483b187290345c1888841f6630a62a22b4b58c581b4f227003aeb510f5837f11061a9f3d849f01cdf08aeb6a47a0cbabc01370258d815efb46d73208c03a8990415e0635fa8f0f52d0200042ee19f3d4e8aa1fdc7a36628b603d43da2077f838e6f023c4108ab5423a0a95f90cd4517e24e58fcee5125ef6c4fcd9848be5aeb7f89478d53b8e592c01f8be07f41e3408ba725e016cdc5b5a95911a102d05f6cfa0f5839ba90926c9d86d9d7c87297f9f7ef18e2d7cf0a075bf46008390bfd7219457035acc0a8c58309c15251d993c079b9e42c8a45a4e5e9bed004e27e7eabd6a74ce1259adeea92c76bad587eb1aa21cb30c382cc007960e2229f5b3993b876b19eddf401880a7d0303048165d5bd117fdf6ff465a239b10b209d97bef2d03d6089c089208158aeb9755b5876766700ae6d73d4ec1f875199c8af12331fa3a0c56d523d75d585591f00c4dd2d2d74dacaa49ae93585557309cbabf7ee2d40dbf5ee2d4cbaf739c5af935eaeb1babaa129ea1bf3056551fcaaaba8467a80fcfd0adbefb95c32fefba206c72ba3eaf292f129d99a5a5e5cc3bec70e61a35ce4c00029cb9000538b3010c70e69b9b33779f1907e7cc0738c0998308e2cc366c087166216e9cf9068e33e338734e0e02720c41c4e95fec049c190167ce71e621ce4cc4f9f4045ccb2e0e9675ee5a15976b3aeaba1ce6a20ee3c23cc685f1df18bff7bfe1de1c6ef704dc0ffa2cf151b24a82e4480f144f1829e20491219547cad01751a078d1052d9ce4d0126c090e36b1e8131e28a5e9097681d57bc1592bea133d8ab2073297747515b4e2368b5956b5ac15b759ccb2aa6559167d429f501f59a90fc7506a04aeb19c785b684ab53859e1844ec104d8c486fad025910665612b59bb200f3669a15fbc41d3c3a15873c5224f348d3d57110aa1343dd4e23abd92c49cfe8ad1e78a1676b1fcf4d38bc89a38249340155572d28af4a5e44a6239a19793eb74e2b86839e918a3d67d9447da045c22ee1037c745c0cdb938ee578f34fd8d2bc4b57183b807b838b7efcd35c02dc025c0ad7177b8df15e5bba07c971757172e2d347d3c5d2001b8dfc4a2e967dc6f66d1f432f79b57687a01dc6f72d1f433f79b5c687a1af79b5e343d0ff79b6168fa01dc6f92a1e97bb8df3c43d3fb70bf9986a6ffe17e930d4d4f733fba44d3d7dc8f36d1f436f7a322687a20ee474bd0f4a9fb511434bdea7e74054defdd8fbaa0e975b800b81fa5c1476fd034074da5681a657cb68cee8b4339dcda540954592b254d4fa560d505054a0f92704acb01abae2851e80e9a9e22e1140ea7a73788e208a7321ab0ea1aba866cd0c3292c06acbaa4489901149cb25cc0aacac30383a67605acaa4386b4c008a73814b0aa1221a282229c22958055d509274ee004a75444c0aa5aa408098870aad404abaa112321687a3a8453a6d3d32558559fa04c343de5e1940b1b5855a14803ab6acf1958558f9081551589144ea14e3f87380573faf905a7609cc63814537ad6d047d080c40c4d3fc3c0aa9ac40b56d5151758559570c1aaea0367a070eaa79f4f38753975c3e9a7134ebd3cc918566068255e985be84e3fadb802abea123843b7e0d48a0afac019ba9d7e62c1aa6b0567e8159caa8255d407ced0cf2cf4d4625585a6d76eb83bfce5def095fbf2edaebcdeedddadd76ecc71b85a00023063868c8c000430334383060f3c0c60003df4e0830f3ffc4043535363630304102995a7030000b0c37fef63dc1fc68d71980be3a80b73978bbae9babc744d57b9a593aecab94bbabd1c76ad67177b77e771b8d96193ebf4fa450310006b0565c60c28516464a27c210001fc1a9a99f917e92f2934685c527878e08167c800063084480f3d1071c2071f9c28f2c30f458cd0d01879a2a6e609286c6ca068fada03c481f817e9eb91141255126fa503009e3aa242e225691d560d809a838cd3431f1cbad3539f1cfe451c7cbaafe63fdad771b8326e0e1700f733f5751dae773f187d5d75bfdbd753f7cba1af03716dee27d3d76b2ecdfd7ee8eb3fdc0f88beeec3fd08d0d77bb81f2ba1af0fe07edc84becec3fd180a7d9dc6fd988abe3e733faea2af0be07e8c455f97b91f67d1d767dc8fafd0d703703fe6a2af5f2c737dbbd5b2ccf597cbb1ccf51b6e8965aeef704f2c73fd5e1896b9fe7b96b91ee3ca6099eb30aec732d761ee0c96b98eba3458e6bacbf5c1a606cb5c57b9372c739d74836099ebdcc531c40e1e2c733dbb4518c132d7636e0f96b934f6b295779b4f2ed82988c9173dd30cc484a735cb6ad7bce09c81f77b72e14817d7c42125538ec1fb3db9302683780aae896be0187a1c7040a15656fa93415a7f51a311a1b58a1e05322d255d0eafaddf0bee9341d7aa3965a1942d620d5459f9e90b28b18b4a7d7c2ac79d4ed4878a25ed35035161a4358ecc708a3e21f35a8d6400c07bf9a7c3f712fc281434064d6590f4288f0dff501fc94da10a80eee372e83e4e46f79d70e8aa0c9241d59348644df489319422a1bfda8d43a21757b20666c131f42bef0618369e0efd5d2b53f79dae1517d7aae7855bb00ca53e4e34bd8293243f7282a2e98d347d9c011b7e865318382e34fd57e91936c13ec0b11027540c61d245cb680662f2d37346a9bfa688a2b1d8962d47b6b6c27d6e9b0d6b6529595d955359702a0b5c037da216b10954d5254268e0c6d0b4462f741cd9393f3729e73637b9a166bda8f90b85bd7e12d1d14da1e9c434f2328f7c3389c954eb4bf55e6337550c468541bdb8605d496215bba6aca81c5e73e74eba4e5f974015f4b9faaa4bfa6c9f9db4dde0ac6318f6d93493ac92bda386f68aecddecb5f66af666f662f6567b2f7b2d7ba9bdd35ed93a38a2cdb8552ec9668b8ec76e8df0891a1d7fc58a09500bb604c73538354f6fc329aba946e11096c25f3014ac09242a9a62d194af7f04687a4d47469535d556586bf5fada6ec0c9290c36a1875be8d0f5df0cbe6913423bd9ef7ad645cfee93d1da75b9b6eea821142c937dd4d6150d89dabadb155b5bd7ae6c5b57934e686dddec49d6d6c580b0b66e8d3dd6bda4584da812dad69db008cb64976c1d96c97e1371c8b66ec496c132d9996c39313d8778d11b9d371b537bd96c4ca1e85dc1c309b19cb69c1e72c1a921700d7c42c60081e70aaaa49495149a2279c2134990aba6df0266cba1fdd2aecf5f735e59c7d1cbba0fc642cd679f6fb9485cd4d4e645cd8f3e87cc24d1f3be39c45ac918aa35893cd64ad64ca118435fb993d0ec3e6f5ec86a228cb411316fb92d67dea250b3136a3a64089020b3eb27f6d16603eb50b39b708be855d8046ef1c1265dc380996401ffe61105fc9b50ecf8378db40e06745368019d02ba1d9d8e8e7e9afe59a109c445a1e35e03b147e20790d9df1492353aba5a39eed471f4b6d1122ab3ccecbe6bc4b333db7ef24c0c364161ffbced16eb7278bd75d1eb39e42201a334f697673185ae984d224f69d3b10261635172eaebaf8d88fa0bc8944cee0584b40c8ade0eb471ddde4f485ff28bae9a9412dbd0f4e7c40db38ec664191a2b8ca89cf88a80085380050e4cb4c1622e7ad60f076944cb32165bef3f9d383bc3089629227ad6eb1ab8cfb6754b4ea0c646c658b74e010958b7ac736ce3030f9986b7a055c3a6ad9986ff980a6d510cbb6c58d68b502d98410c62088318c4708de6851a5efb894fa2079f440faa4802b4fc01b694695939223ed2cade61d28763e0b1ae88e8d56e46891e94e8c9e708829218c33982b0247adc5fbd3b188a7cc2324f64cd5cad46d7e872740db3300bb380583bf093d11986f960d8932775d3717bbe529f4803637ca3c62e9966fe8b8d9de1b15f24122a887b93481d9c527ebab0871c775fb5e7baebc9130c0a9cba0e51f322d9c5cfe43a314cc2b6b64a7b80c03be413699ae0e6aae5e76a05ab9c3e914649f4a64f15dce8a351377da2870dcd214ec9e6664fcd2903e25856cbb7f7e3ce621ff66904c3b867f6f30354afcbd903a5e1e71158331b7bae640ded8931f02b2491463b3c56ffcd8b7d5f3de603bb8ffaeb557656478f440fca1e8a247a90915421b05f4938c5b46708aa605b79ae97257ce23262a46aac61ef4cc91838e9a3f29b28b7904e22cd7695cec7c747c5c52d01dcb2fb6607d9993dd83c1269b4ce0776f82905a7ac2331ca8eddefc2c66aadf52d3bd4bca87b62769253d8e1a5170ceb63fce44292d8377b1a429aa4e59320387f620feda13dafd2497ce44eb172dc922d27a66517d17b329d803eb0efc09e273e92706a1e9e4ac1a9cc7a263fabfbe0fc91512ef7273f7fb61cd71c9a5228cf933a83a207143df8b7bc40627ff289179cfa02aca13d32062229831ae6071a9e37e905ed9135330d1c03bf44c3f788e0a32b8a8286db1c6219f81a8593e7fe26ed6978780a1469bef9d3f0f0b4871ea1486810944f5806fec8254091e6eab04efa54f944d64433700c7c5c43658223c149aaa0e113287d7ce693285042a128f0582571d2e58bd1f1c9adc07dd2a7a5cf9450a83592e54853ffd1e85a6badb5ca2a7bb0e4a278b2d64dc7ac32fb7cc63d65081a9ea0b6a0219c414318028e8154d208291561a79b8d1fd1930103d0f0d8a59cd21f6c29397a1d56a59413a6e5e50c9691148834289dab83c8fe60df881e91869e7fc4cba570704a4724d18332a267ff499f86d72e7d220d2a3b44b22487d7d9b38ea3e7298153100bf9a369b75a27237a56157fe00c127805a7b2d7ca71a713d67d5e2402218c3f500591c019182193c6fe799ab42bdfd118d62921044725de4495cb84ca951082a3f2793f2150454563875268ec5af7c5ce2eb3cca7c342bd019573cb1d2a9dca3196311ce069799db705308eca5be5322184e7a7a70891211f588207a70921382c6322c4a2a993e6f393279a1faf11d1a34240386109102cb1c4124b8060091084200418cf844ec423a2472f89f0845134e735692743991c4572a272e6b489355c93185341b492ca0a89eb61528d2eeccaad916e5cb18c922b9a5cad49920dfbd17cad2729949808452f4af448a46b15c3b41a05ee834142c0d8f39f4e1c57ab94524a0a83ec504f1ab8868553dc2d8934441a220d9186b8df44d23912472291cedd2cbd4a810a28a72eb6305d8e8353e820bd740d1a89de8f8d0f5cd1d188f411e923d247d747a5cfd267e9f31aa90a715345458babb85a912ee393d2bfe845d3c72e4adaa6a3f4517432cab61ca552a9ca218ee74424ce225193adadd82ea237e286ec1014198548112717e2bed8137b4aaf3d5d2bc7c91854ba71d51cc7715cc320d395bd6d377cd4e8d16dbb41ea4adda9e04a1f75a5525050100c2a75bfe77dd088bd6c13048338259b5efeac64d027a1d03f9b0ed2473fa46ef4515cd53afaa8fbf84949854674e2c4c90fa7ae28128809573ac1c81f92b5d706e9abd147d754acbd30028165e8a30f78c66725ed85a67b75bd21fb08962159328a3e0f34a99b352c2c1772ccc87277218d206924331a1d89518f46e7679b8eeba32ec8ca27a8c8cdb61ccd64a7ec4249dcc28e6e90daa473b2461a8931f450d4235c12922c229d9044a0c418a88a5cf0cccf17710bac85a6a62e3a61197a8c098e3bca1f4e59b246e1e490fc61215dee2d685c1199cc08798a2410cbd0cb9f211cfc3ce9a5eeab432b37ae94f8c020966162359c8265e8211478060ac52591fb2ee30403d4c99f48831a1dc88c342add17b768fab83ac209ee2228a80483a2041959ade26ac59b8e989650a2476150742244ed3f58455f9b8ed26710642254fabcc9d47d3e4cdf81bd054e05e17a74fac805ab46a79743249148a372faf824728ac47d155727272d6596ace9d2e66ae24ac6f0cfcac4996ebae99fd75ae9ca9fe8c99f0a8efe83d865e7a3f41dd815c80e2725d2d40e556f8faa260954eae4cf8aa7728f6019faeb82c18bb88246e26a6875844b7252f2254d6f9211b2898a449f2dda3a0ab00cbd766143204e659d1058b703a9d5cd2090a0b18c28e59dc4289b83668c45628c31c618638c31c618637c103886d8c123be079555cb2e0b8b76d30113238cbc40e4611e89cc2aa5949694519ee609c36e3806e3d775ed66b7579b487880a7eb612e923925129904885bd2544953a0579839e7ec3e190473a0a618ccb74dc729c7e9f3f479c230191499085d01e34a287a620cfde454a53027ecd6e8452945f5c6a0f872a310fde9c6961b596e7412bbb8f14954b9314afc220e452992470e9144b42b9d904528fdbd128a18438f5d79240235c1c947209a48240748ea297dbc3d640d05628cf435621b1111287a411209d08a7ed2075dbbfa289124e11c3512a1b23e1e46cbaa57bdac2230f154042698a85346a7532c71276b25128d657cf5a7e33528c432f4fae41477136ec233f4323898abd2e06cf887a7c65ac56bc5defcb95ebaae8e6be87509b0ead202d4c216fa7a8f08b0eaea4217b2d0d78de0140ebf0e01565d5e78a1455f2f8253d9af37805517142855e8eb3c3885fdba025875458962455fdfc129ebd7896029f4f52138657f3de73a0e4e71bf6e839fd0d783e014e9d79b99d0d76f38a5f2eb0430405fafc1a9d2af03a1eaeb369c32fdfa0f357ddd074eb9fc3a0f3df4751a9c421999e9eb32acaa469e08405f8f61557d028aeb39b02acd4f1892a463f771577313667084fea29228f2e782625323081b3baa8ca9b5da5a6b8541b5e20423a372d3ce3ae7ac63a8b226e2d4ca71a7d35fbdaa8088c3c9985aabad15090d4ec55a39ee74fa3defa3d11c9b06cb0c818363a0dd78c226091e3a387618d1e3881f3b341f3c814d8d20a2f5ec0c1c1ca4040f1d1c3b8ce871c48f9d24220db4dc1038648db59fed21760c8123085b5dd2fae7611686591f10c22c19966559509ada901c433e5df7619d2b5df7533869dd8848735d3c4e68d4b8c1b183470db424479152c6ed9252765164f7628cd9a3c81eb3ccba6e5dd667bb5e41638d2d895e955e17fd1131287233c48e227a50c08a1fd7e5410226d12362e4099a8fa7c431404a2905b2628b68a3bd4832a2073f7a98470fce21ed9aff6cbc391f841130b8196247119106d2b00059d1d3f147fc8835707a51ea9c737a2c036f5dee968a440f7b14d84f30b1063b7c8d1813b5b9d990f0319c626913bd8bc4630430d18336312c037f6a58cf20a3a66997a6cd69ddc89a52bcb40ec54353c2c6eecb8ec2ce5dedbdd9ad9d94504a2873d45b29a594989412935b11da4dd4ee3c45cfa2d3891324766613898708887c279c88c33fc99a686311584eedca3157bd60472336019b8b34321ea7ca9a68210ee3545913d944aab70d7ff3c3430444b82642ec241c70efef9735371c335f6bf62780e00b9d755673137ac6d01fff14a19d45241e22407227c7d4da9da257fb53a2ebb983895e297af35dc9c96402053bb6641b3d38678fc6470911655f947c9c73c6e6ed9b40e0624ce41b49cc8b0bdcfc779a713ece19e7e3b4e69c1d102bd26959b49b3c4450648a2d2a004d60a1be172d7ab84ea18b962489b2e88d885cf4505627446cab66487432c4161d4bb08a3543443d405594a1e371ec88342c1d81aa60d2f13d624dc489b7688c513a8ea1239cd2524a88532f17850fca75358aeb92d7e1b9e8c1193126de7a8ec7040d9535f4f477aaa2487ff5047319a81df5dc3c220f4ef6a8dd2120b0c1a9275271304c7bbd59767fa016c038d895e01f1c0dd46b007b0f3d7978cecd03a2b8db81597142d14e77d0580654c508218d9451d46b4ce201c74055f0349050d7a18eb740422bb9f1883c3835422215278afa4ffee273f4b0dfc824ae0eb675cbc74eecd9d5af401e1e9cca837fba385f3082336420c5a056ebb2e8945248d6abca476f328ebc40ae7ac95cc45eef00ac4e3ae46219639d7988f3af3874ca0bca2bfeff7f4a021a56b3f402c940d333ce65b5db598094c365f6da6eef80cd6ad5de21f62c63329c6a2fe35c5b8e1e2c66beb6cc6a33d2c8f062b41970263edb6674fc0c195e4cc76bd66a94c6c5836b12b2473940afcba7d72c799883b53c8e761907728c75aa75240b905ada4029c05ebb036ce7800ff978d2427084e0c4d7eb5a9c8c89d7ee10ed2c632e0f87040ff50e8e35b5cb38990772f4d0f51a43b989b02e48ec9ac56a599694d5b2e4b35aadcba253d648a700122a010ba425a58097b29b4d70d3eaaa8c89affd559c695dd22301a70cb1788897db6c82bb918c43a79c5d90d8324229658533f171832a9e96ac2c135fb9afa0cd3a2f6c29ac4fcdbab36b1e10720c9601aca3ac9fd7bb0f56661e2c2844c499f7ba113273a42229af79497ac96ea240631952d033bdf04a719d5e20d77366337bf413eb7c504979401ee6984833e533f06139b57dd0cbcb6aadad0822522061d33e7664d77b2d04273bdd72b02301a7f41c9231f3f0d15b174208c5c1ac2dc70a65668b8a6a1724f645849c32a5ce4893651b11700ab65dff304ba5b84eb1a09645ad5fcfc181b67a5a977456083b5b4f235461b5d61cebd2a27108305a292fbb3a9be06403815d39352311704acfce8233715e4220b0a1c5a9f918e1a42c13bfd9984d70b03f4ae30e7e9033797878783cca01da514eeb1d67a456068971086d602123f9cd4f4873fc99134fef8376925342248c2bd05808bd102a2db5106b0117a1ca06d6026ef667a79c41228cb39337aad018aaa00a88a5c3f2f0f4a704cd893c0dc4fa4e6dc832347aa0e3e10c622121dbea601ab41885ae3a7ece6b969532e038255bbe045571f6809bd8c46eb211f236f0c69b41c3874863136b68f83cc18327c0200853f80247fee66405ce07a69d75c245b8cdd30d07900e14699d186501f150d59216893070ceeed339c1c00ea6ca981bb0a36019c305077f644dc499ac869eb3935da605c7fd95b4e80f62a1868e7fc7c844df450a0efe7b0d8489341c89a031a764cdcb3f0055b179042405943e9d8e1dded83033008e14f3dca269988d76b8b16459e5213bdc4cd65e3bd8c3adf46db370c06182e1b622125118d1e1a6f2d1689a46871b89bbec973be4e520107177f91026780acecb4170e130c15370a4b0ae716b2a595fdb10427a76cc332ccb72b95b30cdc4523316d3654bd6763aad50d149087912ecd39da379aa978d779ee1e9cae62295d0a54380901956cbe566b9cc4d62d1e5deb8f9960fd9dd807fb94cc029382fe76d0821578aab639e11cf9d8f394f511b81649c2a6b860c9182896b4afdc79598b4a282ff4cf05f0b8faa009e91dab4a2cb385a6f5c4354a14ab3ffb2e6cf8aaa8c912dcd678ec133cd35cd06c8f8f62e8065e4b5bb03ce3cc000fdb1d0c73f3536333474f084b81df091819634e9896aeb925ab32cd1e18d82888723a25d14f0328065e4a30358469e079c912c7471444f1e6e39b18b42f421a227719a3879c251788838807f70449d50113246ce6e07cbc8a780fb380847a4819745b278e5a062d4b2ce10bb8d5ecdd1012dc26bbcddf080c01dd891fe3bd55a6d74dc13574fdc4f275abb0ff6755dd725e41b195babb5561f15d2489be0e2698d9ef5d5b66ad48834d6214b518d16570587fd26c68bd59892cd342e012d5bad53103878aa5005dbba3dc158959e7f322f7c31e79c537ecad79b219a8d8d8d4d8c9967584fb02b227af02340c3ee87d6e198f9199aacd1f3b246f6c34d23984a1b969991e1112c332900026e46173de50f0bec5001567950878b1d141b099b566feed093c2690595abdb475d85331cd75c0cb92c2b096a59dd0ff3d79582b20c953f2404c3b5c0b04c7bc9ceddda3b7219a96452d4d995cc66495894cab3243a53a2b37327f16559b723b72ddb91bd6599a6699aa6699aa6695a6018866118866135891ea97c65a5fb668f66db913d09c32a64996f62cc959218ea9d7882160c9ac974d268b4a906545937bd0050c57293e99ae9a669ad1c773afd9ec7d2a64da6c34dc7f9a7e5d2f4cc742b4592932ab2647a3dcb2d009ca16779d37259c6d015d2773a89baedf33c4983c605672c213c56295224648132b11ce62718a3958f2e265f795af9cad3968ead1ce374a88c46766447766447766447a30eb5d2e5a874d8c8be64592c8b1dadfca6edad8d88d131ce7296b39ce5ace5fed9b4ed502a17751f4a07e99ce818c3994f89169dfba6b1db8f64452b1dcb6de783c56adbed58cd62c1b02e2f302693c96432994c2693b528538742a1b2b8e9510c95120bea2f306769ffcb32c6de00f37262a1d1a318dd67d3a3ab74303ad4e93b9dba96eef3da7a2d69b4fd4af7d1681552f7d9b4dcb1bad60a371d3f6ded49770467be1abd7dd449d9b1e0929b9fdea13f30223774ab52cb2ad5d8596c15a1532243156acb311697bb683f7d65fb8b481b5d956322d1b72031441f951a238dce916ed2ae32ba24ed375144c2441fdd4fa747a41149d47d3aa54fa7b97f3aa2ab74a526913a1fda553a1fdb45bf89a5ab536a914ea93597bfac88369795156badb518d6d2d2d25285529f3b471ad3e55a740e65d229d5522dd5defe954a259dd2b720eefac4e805371d3ffaba85c9ab6677c6981ff3c78c3ac0a26225ee6ac7eec85a19db471a76310ddb30edf6c78f1f3fb49db93351a552a9542a958e954ac74aa39552b7b2b2826131badf0f185719910ea3568ee3a2779768d970cdead194ad5bafb2c6d6ccaaa71c437bf40ebda1120756d46bb46ac74e6741b5dcdee5e52bd8471a76552eba1c86fda5da92e91de4a55546c7b08beef7168944a252870021adc29dbb91d8473a1f012d2f61173b6f09c0ba4fe146c7eed78308d1391246c248a40e8580d2b98fba6fa7d461204693baaf47731f9d84b57c74bfd155b096639d8f96973a1f2fc77e134977877ea36e8736eaa297f3575c5eba193d5477ebe2c272de88389de52716eea26ba2cbc27211896574d18985654462118934964ed3349148241289ace046a5fbbd7b344924eabe182d3a7713d77d316eb801060c181814eae5c5c5e5746a69616131994aa5951515151289e346239168dbacd5b42cc3b096b7745f6dd14d67b995e5dfd52f47d1e64ea8eeb35a7497bf5c661997eeb39a3bcbe5cec2d27db34537511ad345a2ee5b39e99c573ae95a5fb9df0eedd1ed553e5f6bf769a2d148725c6c6eb4fd3b7d0f27bd335d606909d6529a7aedf4b417cd95bd56abe76977848e8d53541124868eb524d28eb5d65a3bea7674ac8ed5b13ab68a151d6b6dad1c5f24050dfb8c35d83b9dbe220dbd91655df67a9d223aebbeebaa6dbb09b11b5a8ed67d3a4dafa35362c1a5d0c45ab6153b3db36f79f98bcb59507ff914cec7e8256d94a37252a7a3f4d105be52735c76495fc9ee4808d3b39c67a39b5de57ea3f3577e13b3ecdc67965d546d49e5a567f7d3e9ecd646047752965d1b5dd2ca47b7d45d00f6cab94b27f958e990c8295d08d357ce4d1a9d371da68e6bd2574acfee37caaed27d0a57ea746ccf3a1fdb573a1fa2671f5d9d52679d4ea9b79773dda7536ad1f9a84cf4624f9f759f0b890852d772de88b06ff9e7816e21d9969696d2b9510be9a573b6a585f4d2a8853b893bb574a7d38974ce9ee33e371b5ca61d930247ea7cd8631775a81c78d2e149dd97b5bd0fbb42b71c7bcc642ae9a890380ea6a5a56379e92a87b91bcb4a10d82b2b392bc7bab8e9e0e87d4634e9a4c7ed067713356857aeaddc513752b9a693ee576ad235b9e5a8dcf412478f742357e0ca96a372ee22ae138d3a1ff6f0db3a9d52db0e3b9f6bccfb6c744a1fad800acc625400693104c80a5770d66bacd1b2ffe8e8ddcb31667628ec3eeaaf1f3bb3c7ce84c2131ad8144d80ac000494c5105016494aa6d34fdb5bcee2024fca028a26dd250b279a48b904baa248cbc3c84082eb202812d6a1acb5d66edb0f6b77e6ceb4d6daee87dd76e6b6b9d8bb3377666f58f7edcc95156b4bd81440565002640522f015a80994aedf8fe6449ce8a3c370271d7539c6907e2349773b77bf9dd996b3d6db3eeab4ae722ce34794de91344e5104a471fca133d60ca936d1cbb2cc5a1ad1cb7c18da61289d1d113df8136b980a4560d015d0098462e11790096c02bb804f601438d4d9a58d9ce8328ec65ab4d2079209b28b6234619c9659a26427446c693f23d6f015423edc0c116966672f82083b894632a12ae42003aa42912c83d9a58df027d27c31099d3d3b048a34d10cf1c6ec680f5ba31622893447a29709690c13d2911342067f2c57823ed1cb94448f0302170591e38c3ebb28461f54d2d9b52abaa36b371eab17aea2977d74619218939d6e4220895e76d1659c9f19483afb11f0c73eb336fb0c7824d2c4679f3da3b3c70efeb880fbec077f3acbb27b50c59dc164d72c1769b4ecda66aded2a6ff259e7238a6c203921705f898b9b0d2aa534a27142e098040f4f8d87f387391f70f1a39e1d932dcca079cb1975e56a1047325ae79fa0eafa144ec64f99d7d8c6ec309eb6ce9d644f0357cbcedafa067ae64cac03925df28cb42cab03927d476659175946feebc0279967e4bc100b4a2ac8918c4813cbd07cebd139a3272fad4b371b168542248c37c0628bbecd4058f86081a4716806bae289be9f4e13b820d4403437810b4efa8ab88409fca1029258a4e1c7437149a4819081a8f044c3d8902692a13f0b9f04c7c3c923b1e6478ce143fec7435d7923f12022b44395881efcfb8b46841a9ea71a6918bb28e67da2a7247af00352c4cfb8247a5be062726a4b1240e10b5c34b3b7d9d0699d52cbc76b3b4e48d64011700c3c0a9ab8c0090d9e7c9048141fc0212234844a6848e4c4c37d5149541269929035514912b286833c5109090adca392a8242a21a2059da5a8748cf6b4554e2aa548440000000400e314000030140c8683a2e17024ca2369ef0314000f90a84c62481909c42088614a19630031400400004000404444d804048bd2b2795f3c9e946eaed825565af951300a26ac55cd0d40cddfe8751d5bb3223e4d4ff1edf341b81e97924e9250b008480f4b7d25b40d2ce920033e5f830280fab8cc8b1bc953ce6d5a92d4d841968e97e02f052697b30c5ba5ebc7f5d98d391d0910511b258b49fc651853ff8acea0103d94530433adc47e8b4eec9c4303f5853ea183498913434f1e302e8d65ef0b6bd633ff492b3ef63ff698aa28c9a54111749c44f431da2a03d87a8b64ec7521c260c7b87da71e2ef370c6fd4a93e365ff1f773e7a3ec88b3a6801fa16e7fe286f520b0875334237ae5aa306eba8190bc14fe597bacfe3e1d0f6b02aa800f394925a6e9a85cf5a335a4f2aa1dbcc6273b5dc8c93958433105afa201b6409b1850690e656969a234eb97f7d658769a8bce118d03f477d2c76e0041e14e3a67d54048a1e4c5c989f9ee300eb2bf230e97e5018cd1376293bfe3dfc25282f6fe1c15ce93c3478179ad478689498d7440e14f0ea3f31fcd42cad2bca1e02ee784c14ddee5253da596adbbb4ad57247a9541695535ebf4af836a716b272394599eceea094a041d62940e98b9bf17999c17ae77bf607ff69005d1f3cd09ff3c2582fa607f79aaa9e07e21c1e0faa48d6f3b05d1fcc83bf79307f296756827e2a0fab28cb003f22cfbacc0b412f53a4c2542b0f92abf23d541b3203986f333c8a7beb1148d28c9f5b1f38680b1b1410a2ffbc39cae83f2e31c247f8f0c3dcabcd770950bcd559635b6139e84e687471de6fdf3dbeea03471856de195d5b50c9dadf07a70cfdc323168a18c1750dc3abd4c2a5e563c98f644df82cbbc77575f2ae125373d9476ccaf63e644284ee5d3a0c5ce7910469d0f3927cae84fdbc65f77a790be67e36c549466428adfc6f02203987cdd55f26b47b00ec72523f6f3463374882f4dadec70eff474602ebeb6222c3c55ebf1673bb594c6f146f2889105bd3f4a7a576af4a98cdf4e629c44029203a3f48299cf56b6545ffcec5258f8b474fb294283e1cb1354304ac282604af74e42a38ef1de3bcd25a2ab0625f82f072a5d78359b269f1369b2a00143f320e7d0eb5a5470ef232ecbfb37b9f5b223f4c2d21841cf7844e8726f9eee2d7878d7b4d4c25beba520d1fd6c84ce9cf16fa5b4369fae1366e6e84ad83cc2a457be937f5966681a5913ae2d9ae306b189abe67b878fc3f462dbfec880bb30a011aecd0bcc3b97f0aa0630f84464f36ee39645cc942b017819100662b61f685237d94ac9916da405d66fc5f0d9ca2917c8b12c82733ccb1fc991c113d00817d67b3a346ba3334c74430da87787ab32214559b8000266c5ffcc2c8d6fab0ac4eb2287b0e608010c462aa0fcdda4521f7dc1c91dfdcdc5764316120c0f3aac11df02b9062cbad0052ded816bab7018203366c51028167414eaec8cd3d1df242599e86288414f68a950cdd40b0858ddf711b3feb55c63dd0149ab83cfa96181ee64775e8de4a004f16469919e4b1474090553121c90b558a0614a581fa371218ef319803d591f2b14d5cb4a05f443c86ef1c1cfc547a18d79fc0d736fb0fde4f87397dd8feda0f56b17dcf0c52c4e1e37405a2d65a9ed349c20d6d794c83ff69328dd623e603c9d80cb18d50bda1a3a55c71f3986fea77bb64f4ae226090a16074b53799e2aa2431cf29368a682a0015d785e00ec97f5cb8a07fa9a045602edff43753aa8e79bd6cb495ee18e919b4e323310fc732d04ddd82a9639eaa3e54007424e69cbf8e795426095d528108f421c83b63adef0de8c1a8833163204f5143cb29ce86bb78023943cb4b254c7f1e9af8afd3338c7830df7df6cbebc588cfa0397def3e38d1aca4a861e63ae60ddc89cf3dbbbf85358d9944f206258aa5548953d41e408e281ff6afbc8e79b9246eeb2c06741076dbb15c79230d858b2634d5193f55f94ad481cab4265b164b4967813b28049e238829320d4589e2182886876297ae88235543e9a82b2e848e5219a2b901b4e83576ed07bc6329589e3885bc92e529a541917e1d968a49807a105111d34299df9424673c2494b9b47b650f9055bc9a65e0825388f3dabae43b80e26be1808f529a767fc89a4445c1b5d3b2af5b2afafa68ced8e148a36bbd33aa0308ab92a18f1976bdc613559a0017c8b0987714c6da110d4553bc4833f9b08c67ab59c1134aa956cdf812c8d6eb5d534b06b0b9e00615b7f89d6cfbd7cdcc5ba7cd344d52999aa4eaf35beefe5912ba2d17906a1e380532d3b2b019da77d6f9dabe905ac94018fa626017e31d6e77bd8783bf33519b39ad0ef33d21db71573dd4906676da3a7189f10ec8346c5afbffcef9e4691a75ca079faaec3c0bf1e6d425c27776d439ee3921174a7c66ff504aef077891c2895cb5c56af2969a83cd2d09bb8593788f2309d5d9bed37a008d3466f7bcf53bcb62a2fe3e7298afbfaf3cf3ebee93cf9c9afbe533b77e7f79ccd5df470ef3f5f795677edd7df2995373bf7ce6d6ef2fcf79c5f6d2bfd042b1745c7c7cc2c965d69839aab9333a0dd14b01e8c886cacc53a638fef12161f17ead672b09b1414cd24807c26ed78ebe45a6264833b8a7ab93c920080908ec467756b92e8e8721ab1eb7230b2b9982427e12db2143c80dec04be816342323b72a488843837db81dbd710b24b7fb307a3ae5473f80ec0b32b9b91ba9fb65f629f0cf60f739707839493601894d375287691cd88960b358ae649ba87a45c4ab077552413e53da05875605f96b1ea437f94eb91cc02ad9767a9bd0013400d2206d3be9c649d5c8abc418788d0f398fa3a061e9ec4fdcacd9827b15290a796b814732cdc18629361e210b1694a766f281d7f0b879a328dab3a1e2c84037d8353a97529e9a9c1a57e219273b304b7970726a74b7365e8678d22216b30dcd18eed5ea0319d3fedd6407f1c1a98ecfc08372d9904d0c6b053b5e7b773f4c5a44e7d070920132e8b979c1870a9d958479ce96f3425c2612b691ce9608f874949359c95e3806678f909b5a5bb5142558b030fb690c516ecf08bb1235e54e3510443c8fe550a3348631bc31d52e0e710ac9b2174c93106e051e8ad49c1d55a131fac450f23d04994820253a4b18e8f05a1ff86bfdf088ca5a35ea462b884293a26574d5f8fc8378665f67fb6a4021b1b4c4ef6573aeba76089fdf94bae94828f7c90172f1f07972a9172258c805171d092093403ba6c1de254d089ced91d5b67981d3334d2e5e837f13e7426d16ae23d965ae68594cec84de0b1831763ebc8599c128f2dfdce60f09072952efc583ee79db1e590a85c37b373c488c0868ff71d11b4c4c31a94c369ab7790f3415980f4ca7e633910726a5f2d4a4e9b5d3d4a29833fc201d2abc3109a9fa35e8799d18507768733b6dd090e741ae03d0cc0a0423692b0633ce2226dfd10e38b7fe74fb9c6b2656fc974918fcb588c4f1daf6b78effd212f17fad9be6fef28212f86902c69e8550cabc51bd561231c80c14a72b55a49fc2c14e19e8dd7b5a5194ddac7692b5638c56f646358b61e51b1931c0436ccf277d2491773f35fdb9f04ee3debb7e1b11978ca2e4c7c0640895f72f8cedbc1d935399e4c0f77ea2a58310020960b50a67f0a91636a93a8d3e96dfac51c0f4892c921ac76210410f5dc3532ec73c5312e0fc4b575162e0af0f2f26d6076b34961ba9f1c91815df87ad191ec3f2f3aec956d2b43e5e41f06f78065720e26425e35a101f9983b392c4e8cd9de0033469a808ae3a117ee14571fd8df68f22967857603b558bf653579df368c101c3877b75b23ae719de7bb2639aeb701896461108fef404940c49aa398c48d03b01b30f4580fee326524acce50f2d02f3cf37b2bf91ffe0d020d142673954e67774d4892e7fe9c5c131ebe58fdb9235841d47c87ab152b745c728090fe5c96ad5528d6c62aa8bfebd4f6b75ed1827397820f9e059f449d0210ccef50e67a33fddc17a6f84df1150068f6204fa7538b8ec89f47487339f4aa412fe1e7faa6844a6e20364454b2f444804c8a739c3d857c89cdcee840e8b8ec607e2f0233b9018e7d402b65c08815f3fd9ab84c0a9349562571ff2bb315d4157a2637b732b0d9261f4e0ffbce9fd59bcc1e0aa4d984d931fed276797828378c8f20861249fa3c7b2fe37d2a3782868bc6e2146f45615718397875fa0663f73285a77243f6e822b260091abe2f272f9ea5fbe8bd1afac77e596ce59d6307e728979aca4d0a4e7134d8339f6b4d94028deee3ebb83a9fbb74e526b32b26faadb9d154984363b31b7b70b4c6c37425e6346753f55fc87d5d260a684ed0ddcbdc909c6fe39ec6815ab041273a36ca7c46231363f57aaefda7f92b251479ae536e3dd77366578c0c30e57d4e2bb3a1c0f7a264bf7ba0a2ccf6ec39e5d1f104730294977ba0895fdf742a3a9b174071aa57e8a05366f930c57726474794940e0b6a9ae583498b794b290392fb2a7b5c2af9f5d322447b0092ce225a3288ee427173e55035183a7be7a33e841d547505adeaf61de4817500caec595b90747b0d77fc6b50ad4a424708541bd18189a8483a3f91e36812fe3091e885e04a41267b85a68282d234931f2d250f8a92fe44d0042834a0e3893b79d67daed0499c8fa1d2ca9429e9f5dc8f161756bd752c8851f90efbacd7c38554afbc4f39d748ec8484899966a218b8fb453e7e8259c82d6d1662fc2ea2eb0740755916eed0fa7a4ec6c110e02e725768a6d611756e6bb25813175e1340eb4bc19381642dede22894f611d28d32fd3cddc680ef42fdcce857fa0d2c9fd9eb488eadfcfdadd7679711b5e150da037824544bf2c0e527a56f863ae5bc308f3bd66ae20fa125c2d56d6acd5520bdaa23e9add3d0cb36cafeda9de34b9165066b7f75dc1300276f3ceab454c00386be8d9e482b70d9bfd87e25ec15467747037e77f3e0756a213f65d9c83323b1230dba06e608260388f65599610bac1702974e2e403f278710646f320c6d557459d9e91d36d4e127bc16554db80c8601bd5232ef7b9b95e4985a65c74078fba44087d5ac4a4d48d3752c9f42856554322e99503b2be674567411a248bf898193e46b3b5984174851ea8292c06d6f0e7c3319da0e769b081e6d9b239e272031c5dcea70e43c9eaeea3549182f4f601417a15718c333ffb95c098c4e2994af6bf094801038848ea8a194154341d536a7b79b14d1a45dcff256a75157c8b8523ad5082ac86e9d2d550b6316cf3be889dfad48396512167f26760c6783ef56fd7c950c3af57ed081c7fc4b1a88c95671d27fa20b33b9b971ec96131ac22b467161335215b261cfc858ca763b10f813025ee3124b1ec8ac56ae64b3b3395723face5046cc4ff6b4362a98c28e59205c516e1db18c97f4e3012af056a1a19ef6ab9d351b633a69db2ba1a999a662e7f0a5c3d6419f09686d168bd8b5469e773ec8fc45f86f4738db1d91e9500b8cc6691322e05376003b285c552e9304b1110c2dad1f8f4e84eedf2ee38b9a08b23a713ee61c7cd9048af7f9fe01a596f449a44f5cccb41ce63f2b7aef887c13cf329342369597ea16d3681e1cfbfd179bcda03a8f1b55a3e29fc354a56fe7e60bc400d476068256a9912099cdc120593df7b7e7ef4c5ef5a9d0aa8b9d74739baec06f0ace8235d4b12cb968ba3d985d34921d79447b7b4050172f78301a82e08e8e2c29e5e6d5521194c14e7a1645d2a6bf0eb689c259966798d6ca2567029f785a0f72336e04aa39c9207efc613e63c9695985603abac70de1ac17fdbec168d361cf6b46da3bcbad21fae3cb1990f9ec36d58223c32b5274a0e81b65eb60ca488f010c2a51e8d5b1a5ff54e5309b65656cc11efb1bdb9d906621450aba251c8ca07367f691c99c4b166124e1079c4959154cd2c33233194346494a5365007477b90f79569a477c15df09c5acf91169948e5092c88ba22a1d54f20726937b287dbea19e814d2a7ed5ad9c637bb62ec4a1fe50cca4dd26f1f04e97c04b684d53987e28a9526f76251d6fcdd174c46ee30ea577d475b58ee12d45d6afb8e64284dea41be0477b2c6fa6c92c1ad1cf910b67fe44c0ec302927a47b96fc8a71fe2c60998925a23e488578e8b2c6c4c6d8af7e302948bd553a78984087725db2aaade29fb5562a0018c63fd90c46d06e46bff6cacc7745b7e706a577e477b520862a6994e396b29dcd3884d8f48ab24266338506168870930180db142f733bd42c81422340c78a888533f23239562496c02bea65a496f045c2c122c9f2fb48ac654ac51be64456c07b2d69388b421418c84eeb184b5e5af061951d22dff8b575cfd2a33edd08448935a23bccd536d1fa2e4eb9fc65c98d5c56ba21d15c1024c17c0ba2850af99c63df8e9a6c7025c2f1f837a6033c2228a078f16c68a0880f8378a2a0d03556e64f8a0e1a6376700d58ea36b363474191ad33d85fc4da2a4b32e60d181ad0ac20343fe04d499cde4c428cb9478881b708b2f60a0871d203eda90d24746fedfa28fbda0fdf3403741ab344ffe71c989025a13cafb6384a4d011be6f1171372c656232650e28854db9ea81eec3d35f2f7d01c4a744e6a650e78acf402f2eee4021ae0e586106acfa61c3b5e4d90a045420750ce579a608482c68d88fb5c35f78676c3727c8043ad7d4a6547acff3aa3acc21b4adf60108d24bffc911f282c437aea577f4cbb680d743edd7ea6ef09d03020484ccf9fbc6621c1f05b6dd6fde084e25bde454250a0081f038d1c93085f0a8c2b561c332f43129cec7377186ae965b4e0505fa5f6a1d1bf6337f8492bf1a7bbfedff8aa4fd55c9eb8199d78078ccdb37d43a97fa69fabda2cf595169130b1999b7eff30d4f48dff9936abb566b3240bf5e5b49dbd2ae74076c31687ec712074b68be1cd4f4b7daaad967d2540311a3e6380260ffe3e262e0bb7ff950fb9c8800352f867cbec130aaeb71b99f84bf50b7eb1180b63bd24bd9c0f8efd491bf584bc190ab98123058491d52bc61da8a4d986a61addd40d1d1ffaef835c40bd121885574fb4caf1191fc3fddaf7788bcea95335dfd22b05e2dbe1b8866a27b60232c184e5f140ccc6a517ec11ccb1e1aa2e696381f5bf61cf7ed60d671a8d8dff7a65a19d52a0dfd5064a410729a35b6cfa7525f65f92c2a468e9fb036f6001fec4dd71a5aed334d1735b10f3faf3d2c255d20a4e4855c17e06ee1c6dc6c31e3f0b344d5a79a324b0875e7de246444cb2843ba41a214fb82de1bb9575cbd75cc46145848872b48f07d9d60e123eb21b2ec11d577b1602e2c78e8c3f82c72aa7cd0e649c3644e92d6fff990e4e284d9e5cfd40f7f13068c1b4ee080afae5fad98d55cc1303193ca9b5011df211d18700d7b7276819e08d8eab5784c2a2f83d404199cb11fd49580632d4b58e86c00362b23543aefef381c0fedf9c2a3da44134bf48b304e23331e3edcb014249a7a5be1a97d3f3f562ee5c59598ac0f4d68fda96d9204046b48da65a4f6367c9f8edb25c1af67ff53c997532c2b9f3173e0d8602bc9b9d64997c2a7e58760c2814d46299ce802a0c051df05fc1b7cc7aff1bfe44f0d9b09fb2d4022e3b8229b3a0feb92ef4f04fa582ca963326458d20a37f7172ad1014e3461d1f2232adf035a395a0d3fb045b7b28ecef9645fd2e7cf8ff4e41d495d19c647dd64f194350d4833bfe735cf316e0612083fad905f07612298e464499699e3129cd82b98b3c8055a4280d555da92192c741da2b83bf1a2ef05df5f98c9da2748561823d7932a7887a88d380c774ee40c49208e833ae13b939afed51758a64f5384663ca40136b31f925561f2ff3021dac82e520a70ade201a929915547a60d37cc7d12831589bd48d503bc102b7c94b9a3a336871ad20088af243cca1c05c4ff996d088c82381ccd5d19d670900ee61382f8d3b2d1fae66e13b8f6cd30e1392fbbfccc0a2cd3f141d3f92e780fe2f10a9173771a8c78b3265a8bb004cdb133ce6875452c8ed898ec5edd00506d398d982cfdca2d33568e3e5521635383c75943f0c55030ddb1bb53672cea7926a78e5a1fc67a2ff5e3f143328fdc297768f8464d812bdf86b8b395a8beaa11fcd2f8959db6d2de3e189df9043c7860e48a9e997b2a6af017816d944023f264e154854b1eb10111ea72c9b0dbeac88ba0ab5a4c46428289a60551d81ad7b98e44418d1c59269f4dd7ca4be26291830059c394cc8a7958a873f863eb9efd4ad7cc9de08d0e7d7095673a6c8c4a431a523be046a870c21e954172385cbdb9c9e9740970a436d02a994beabf5258e5bdb628301ee22433ab1b6db5e2b6453820a4baf6ad3c4847742a01de51287dfefbefcd562280647f9cc1e915bc83290287a1d9faf22d9eceb2c89400c9c80521afd172690d876f70755131e33b1eae7de56f0d90db9edddd3f9391feaa0c9ad56a2de833a78464290453104ebf2ec71f2d88b8d90ce1492d8532c192735a33095407a72fb25ca4604ff107255c2948ba05a22ad8c9703d4c6cb389b794d624dc3f1240cc6530178c750a22b79835bdb9c6e161f933a94084cc355a6a8819de819f47b87f0dd996d16971c3acb5156b453dc274643ceb29dd2f8ce8fd3bd95a155ce8476cad632594670a386e65a69a3d2a947159bacf05aefc85557abff494c216bf61ff6da6801665f6c2c4ea7100f8f71624ec61b1c4a3c6297202687d084d94f4c53335ec536b3bd82ff2d737275a2be5c457c7bb472743b889513f157c68d1a840e0bbb5a97592c928e8a34f3c1b89a1de1308c2dde3b60a12cbba27ace07a2649d07a6ac1c512fd73cb07200dab395dd7e0e8aee8b06cd48e4a1e70490f06f045bea670196869c53b94092875fd7a181446b1a067063818b2ed4d0e19ecd88882be133885e734b7293991146272e66a442086a4d9642272c4bf1712e314db2393c91c0aa64b6940dba6daa1c095db24819725096d2e2d8d7a41ea9816abea875f560adfc7a265ec2eca747f18947066d801260cef0ff1ee30cab96904b2870db4b3928fcc8811175b1456ac0929dc8f0a44202e21d552ee5da6cf24f3dc71f23e10e4875f303614ae4dc4fbd66ce7930a16bba095efd589f33a06e7c64d88a9ca35a5504959e1b66820820b00fb73e4a4c83c8cc6f03e41808f85e76806cc2ce34d27b77016b7c49f1e197eed4d7db93f486422fcb643fb2996c79d286cc75aea0c6c122069ee18c57d571573dde2911b8042c4dfcfcad714d31703e08f012f0ae86f15e44cab815f0c4c1126f14c0860c80293ccede354aa105ec650116bdd22139134896de36bf51f3e0118bba135dacd7ef3f54d5ea755cc5baffc295fe20a87d4dcb4e2a4f028d8c403fb5026b8eda7ed96f598bdbae35a11d41e26d9615731926c58b39194b5004ebf08a4ba92e74888644983196d4c9dc2bc385003e38bd6bff1990499ded6365a950e2905bd0b579d77678c168c702c17cc69134a5755c025708fac11fc09ca23ebf57f0e459a40982e243d7fd7267458c382e423216c2f498598bccadf24a6e8ddb27beb43a12972e36109074780a046479af4fb8cb4db8a2935fbff65347c8fab10b51802b6d23eaf146000866187b35c1020c52d07c1d98d0e39100875b31355245e04e34224e3ccca3511e0684dd728dba613eb3bce67419ffc8e9412fa9ceb67f909943543f6c3eecf3f4a0db5c45d33bcab42099b2b3c43acfdd4ce92020acdb8b75ddd1e817c821843cda3e8fac7acbf8bb9a9811ac71a6041bb8d0a00eed40b1717e7571484a9d2467701e2fe3c198cc4f762a19287c532a8ec21983fd21be37974a367ccc3a152609a8fee9b112e14ecf22ed4008cb539a1ca9e65601114470b2c707174e9ce7ccf68a5cd47b18fc6af1b8c46a8d5a67152724a781b07e0a58793844a1c219e8773378e56f3f1efed4ddbde89b252c58716e59515881e3ccd96ad118ec12bd8200aa277ea3904a083d34835b08e469573fa550cc61cb2b62d285aaeefb580409ff288ed5f42d52cc0a9f82b0b29f3016a9a616632bf07887f584d706c755af47f098dcb2b2636ce1eea1e43da43e8ceed5a38716c3842a78e974c28e98aa13f85a85c8a8ce63b31faa783ca93c5eb5cb5ca45343333f171c1e1f786bfbe5d84e5385aa3034fb94768eae9779125e8d07750a1fba60b57168b138f33ce44bd6f89074a45e244952a76da192bfd320ba1f087e0f480ca9a32783486feb9b9bda495606e80a1bbbe449b835ac0747a164ef69f72a58e68ab7a01fc4fbb223c6287fb424acdfd941eb5e0541ecdc0513cc2d16854c30c9f62b608471c0dc6b335493ca25890e4fd16bce9f68d2beb002a38a6fbf11d3d453cb15d415aef3975cb184f3884e96e8db35a447650de0c22ed78ccd092de5b3ef47a59a694788c5c324e6f552964d835619ca3ea60b13807c609a7c5f9d44512b08341a124d0b2d405a38751cc4347ba9b3847c8a6a16830d3bb7663f892e6801cdec9b2cb3e18be2e5e987e5496e52cff3d9ec8a6890db9e043f138ac5252113090453036c8ff31adb3270d4718f40930bba365a9d175326a492134edb270f8a291d3f0f93827dce0f7993aa2ef61b02f11c8129f2b25eebb67210d4e28c367000874ccf143659fb421e8fb904c02b0af81ea442f8b01d79349e8636b7d9f924aba2acc2f7cef82091b8f24db701e670a0d5a88b04f2db9f23b2d20038245e82c2b64bc681ce49c0f4e4a1bf3f8bf2e5a59763cce7f3f084204b71421a071ba8fb083303a228aa4d38f05a4a9c3b12f758e5cc752d327a46eee412d9df67b4cdb057e957f7d5d57283abce13dfc5183cceb198d8903fe301149b0cc1800e6632ce073614dd23087498826117a9c2ceed5cd37630ee0993a4f80153682fc2035ddc1b52b80e4977d196821a85ed2ac6f5dceafd6dcdda1127cc242c84d7db11953e4d522985efbe6bd11d8f70f5cd6cb5ca98353cc50a6521d28f0c89fab3636c88427e2c860aea77cfb4e1c99d22aca875e29535bb134664f57f38e049de8053a226af6bed38165d413b98e279cb0253fc207e32afeff49d0beeca83370c9197da3fe201a5bf9c93d7cb729661b8fe7f691fd678c62fc4b1db19b66f9af8b1131e50c6d2540fef85c5888c1965932bbf6ec7f0a471976528930642863859974d629debfe8b46f5190fa0e40a57d0598f2bcc11d0cb4553223a35ab3bb920de8f7f80cc418348f170a517b241fea93e058a5c94d8783508939dc9328b57c5555ee3efe0387f383a2dcd4b8a30ae0c9c5af3a4302138973162f339c48220563f99fb7f39c9e5e82fd12e48d6d54a58b744bb6538714e312b7e46dec302ddf5bb53493c4bcd08311a8734167ff4a59fe373a9a04d8e867f422c418c8103905d55186c29e4f474b763d617643ede949ac39a427825b964aa459d8267f9aaba3625a222b2c946c882f051b4a94a872027cac7277777e19a1cc37805aed00ad4ddddb71eb4d4c2733428af37f9b87264a557aa3961afd7f9d67bb909a4bc0f2f541008ce87e955ec167dbd4209035c01a1d806bc481adf25c140c115226d4f93b4b2419c5eead46a64768cf99bd3df6e9797aa85bc8cc90b7c267c44b7dbc5a6f265ef909aa319aa95a3c965afbeb2f3c28bb89d908eecbc9de0446872a23804dc2c1429abe61126d1511a64533ca20455220d7ea00a83781568df25868919174729dac26eb3610628dd2a8fc25c7408350226a0cd7f728c29fb37037dba924f1090ce8a81cbb8f7fa3411053652847ddcf733df6530322a787a292820069b3c458df6a9848931b19c245ff32dff9dafc4f13988a3dc992e546e27985c5fc62ca5f5ed4d631270df427f2199e51923cf14b456ff94a80e9a766e65a1d500a29f7c8cb8353638ba080823ecb7a2492e0986b15da439c5d14da11d94658ad42214176c3450267b97a692b8c1a597767ba7a45feafe72e90c17a295297646d72463ab7f529cd2fa53f3e421ef106254722bf621d4069cd8bd23877648e73860dba85d664af1837a38b3dfb742c076f4b4956da57d672803a901a21bad7b00c4609063349d05c65af5f9f7607bb62eb7efa8f254ea0d4220759a0b6ccf65f033a7ac53109a47c0ecf183328ecf3de5a2e750c686b471b04a929a3ddf48bb175e73ecc06c128a0633b3134190f4233e81c5818da83020eff5d1a41952c14418f30f94cb25372b81adb5c4f9944412745212e9800a576dc5ee2e426aeca56fb60b77c7da121d21a2263e54666b487e56e2d785b954e76c5bd87dbefaf405b96ebed298f3aadf81a0b0bbc90688be6c126248b2fd7d2d43de16c31adbafbb6e2876bfe31f20f0f88d8d6b052976351a1d7b0dbd8af50218b77d1a53e9a0626900e110ddd4362c5c274eaf459eec1a46b14b1286a23a25aa5035a9c36f6610f0fd2b1ab254750e9b0c2f923f125334746800060ef9b29cdb7248ece3cd3418696d729e38d319a46f489742629dc8d7f96fb091d3ae755896e4cbc09f211b844407eee776868c7347ddbdd89b55703eda6b011746b65ba0e31339bcafcb123ceb12db14af7fa81d0188b1bce6dd54f50600174e5ff95f59a8bf29d9fafb9bc5adfae2d2840a1c577df1df514fb1a7dcac236196db101959f981800db84417c2fcc5ea11ade36f464ae78820f039f780ebe42540c354fa70aa05b39e6b39c6481d449034b8d748999fce8414af5809c37b99fbc8535bd4b6b7a040972d0b59c14b7e1848cab1e3fddbc0a5696e794a9a6acf1a4393e12420269247ad87937229684d9168217abaafa73810ec7cbfe47e696a983e9d321878f712d17766f0d9698c6e0c00b84839aa821f830c933cadd2bb8c817e5048862daa0de6853c72c060140dfd0d32b1508acf4ef198ddeb33b47e548fb93f7e8925f26a10d95d549a0760bb3578a95fd46124f476d0827faf80107aa1b4bba62a87bb04b684fe94055de225678785008e190c26879c4ec2c47479ff737dcc9fc1b106e19eed6a8dfc138beb3e2ae865ebd15a419ac0deaf60727cb34941570ac9a8c8251ef6d0f85328dc766336df3895c196ea9882ba8df47d52a7f35517e469f8986513e7a10e90494cae609c30664037125cb85a741673f0d2c2e1cf91d34e6162defc1bec02fc1da876ef95b3f76e6c453725076bd10b13e1cef8f86615eef3f06bf156f32ae740c587bf175b2f6aee5c23a52e460b70ee668871307d25a9e2900bb84afdf35ba6bf9414db62d4395547228857d3c49bbd4fb69fea553a9994807bad3e877dfa8f95800f5e74fc4f22e9e97462d0fc0664b301fcef516fcfe2df071b02fce21e662e0276c72e7a5d73508e5e7edb4d555b606b3fbf2767f1a3101dcb60d0a11783481f3f4795ad0e68ca79f8f78ff32664f370bdb9bc68d831ca9b4bab6256b50a6b27449ad7e2b22889efc4726b4ce4bbfe436772ac620bb2aef2f2b6d4a95f4494ef73cba57763ad04ed7f4eb499cecf14873bed81859ccdb3918e49512f05adf53fed031db998b08f8ec2dc3f83cfb58bd5aa12cd3a51716541b3edcdb5a7224c266c09e66e372f61eb04d54c0e2f0612631ce9385486c70a62280e9d4601feecb20f1a785c0d5fa32fcc47a81cc5c17764e54d8a33ceeb19ff43ef4390dfe2e583a1d72ce613b8e68fcd327324cd7b2a26e6e5b7fabcc435e8edfd04920f1725f8a2485a3274318f4fffff13227903eb434b59237a87b336bc853cb77be0efcf340df42e2378b6e78cded00632e645227a4a1aa7d145f2d526fdf5dafb1192375d0db319d407cdd7cfafc06a762b6948b3ef71307c4a7f601080c5f56be8110ece1f64fd6d8149a6950373115f986a688ed8d72223631cf39bcc365f41d6b4f8dfa4d8363f6f5a09675ab28017663c5b466dbe296ba1f8086d02200bf1a3e7f0a080c77a0a3407933283f2d35028f6b4f1a16bf33d185f75c9ba976e7226a5db5f6ef103e32da6a49774496a9047aa97d215e8ca5588ceaaf44980a1809f2cb34868cb30d0d3e2866df8f110971420246b35c3c4887c3ccec25b9eb34455453c0cbc918193d347cbeb38a67e741d8bd42d00f020c8ca26da9ecd2b68e1256dbe4e12707e42938071b7b8cdd7dd68a3c5c8838e56e5b26b1ccf78741427afe3b3577ca2b2844ef7208ec273860959247b1685f1255d5f0604f817d3e02bcdd7db946e30cc802260795ff9227d1945e381d3b338ef5f40f2e5ff3d75bf22e85887a7889a9badc698f75f342a2a3999c993568ead963b629ed958904aae71044d232d70d96a7a91aad4a9910f9a7558f7ff582df263cd520757844f0ba70e784e0b8496ef9439230497caab01fd4d43b298c1e028e3a169f3d09d4ec397af4b66833bc9b366c86c0673b89a4bae442561709e10479a4660c78a6c1240480aaa1f8d560d369ce4d35302f460cc346d5a1453a42837065fcd1d16ed806f87234761aecb2aea613c3ce837a71ce25023b0539999838d158dc066ffa1c151d09a524a37e555f83c9cc240b2b06e86aee64ecea02267be987da9ac87edaba94f1fcb688f3ae57f3cbdeba4efd6c2cf91b83bf49294b13d2e14d5a71bcdd7138974c5986d8612fab931c08b93431b7a4dbcc9e1e80bdeae5f749ac1de41f93c74383b394d7090a0eecb54089216d54ba4aa112a78bcb765ecaf8cc1b7b7b0e43120b7c93334c9d457f5223efd4204dd31429497c0babdf2c687f07f02121299a635b8897362d8e23e84778c6416d830929633ef32eeb2b1a290f12a87eab8c27bc4a43d2f5ec23112e32e59f8ea2cc3c5d61c77b36ebad8a2bb944a6246828708990acbaf2bd82e589a29fcd4a6450a5c77e0739485ce77a266fae6c5a286c6d47e77f942564c1d869b5d1455b27331d8779d25ff75e1932d1bda382491e91591c59176e47c9ea0040e560474a79408f97b63eee5cb4cc2e7f243c36568f2884878fb3824c54b7472ce75c42ca6d556fe5652a9e7f5c840a5b56527dffb89ed3f2f5f081f24b99afb543be69c223af9cc38ab522c73d8090877897655ebbf2cd07cabd3c5c09c1a83787adc999fbc1f0c7c6ca1a4f7ee90d0a886f0e815efa3b01c4e224079f4262b6f51c27791af511ec4ef2d19bd2eb42c9af595b7d6256c9095d14bafb2b1187cdedc3eb689ee836ed6030910c525b3b4f5a3504c5f250d40c50880458f4cacf186bf4fd6774568cabd1a999d4ef65b8af36a470dbd25a1292e0b97278df1966210283c6b8ba17fa357df9203ae1522431b937c386a452d319562b9b32c3a36ccda0c1775790ce08c419f4c148ab2745d23d5ce66f6a31a50513b4a3db8d5df6218e42882f9513ad177298f07c2846f9c26970b3f67de35aeb05de3429f4c361010b8acde9317877b2ed73b3447835062b645d916e2bce4292feb7ad8bd1467396043380aa4c6748b39310525511d87e7bde17e1374ef1a6efccd169ee266a1c9fac08251d5925cccb3e06561eddd104bc7dfde6311d9f22c19e1cec8fbb1c05bdd6a5b7e77c5c7b0ba55266d8ce56773403b26f81f54c868505596f5b5caf44294d391124c2abfe4109b777f9448d08d910e94d2471bfcde7cb476bfa0e8b0ef411f03d04e7e432535f8d7c5031ea01e5ba13ba29e00604bbd6cb37737b87394bab67f465ac17a2f7bd73d4d64e329aea7f0dde5694b22dcd0dd3af2e43214a2e816ff005da66bfc429514b79677b09c108e0dad9eeecc45f4f7aab3fac45e36506794cd95891d6e091fd89911e245fa4fd0da3dbae9b52c2f70148d9e77cde638ff31e14c39c203f7089dd1419547a277442ce150f2e17ed91fc4e90277ca2f56e428ee85e6a839f8997b103809022d42e45f9549b7590c50a131370773a304386240ba93c1bd54707992ea3504902263032268ec71dac256042137b753c3b971bacdfcedc7e6031863483d09c5cbafbfc0c4610be6d3072a305d22f0bcb42452718adfee7db78d0b4ec4996cee2e9a0c559a3d5042e51ed0683d172aac274554dcf09d7a7cf59089e9e35f3063716ef42303475e3f7420517cedafb576e1110682af59fcd63bbe8aaf71df01ec3156159e4416a5411ac6e59f83e2dece31176f1b432a7cd4919cf5d4251e8f572af99bec3ee8de0fd84668c256a415340dfbe26472eddc481285d3920f3347251bc04483abf83e07e44f2b0ca826d652373e9fb158266eefd8b8f1522b9519734597e4f8f2c6398c65bc6cd39b583f9ec975457c08fd66e99295b3ad0005f0d29c038a9bc68f8f0fa9363ff1b74c3acb69626ea1472644cd05b4a197abe62c54d4b24c830f6926eaf1a95ea623114b329b6d1ba7f15cf540291c2c115ba4e22b6d37c04bc72f6e36cd1059c1f7766c369e34c3ecbff108260357eb2ece908e7660fd330c1e4af2794b8f834279f3625d3e89189ea5a6a7e5f6ee88bbb79ba7402fca3d9d2008e478afce801cef9a2fbdcc5859d051f9ac78fe2e92bf1ff3adb27c2531bf32bd1a77bea07bc16de34bd98bc666af2dff1cea0f0d81b4e238f7d4d10d848a1a7cab22a5592c69046f238556ef2f4a819aa22f19a1b2f0f8fb29f488b94f77867f092c5f2b1202ebc8ea0a7441965000f58f2a04e4ba4eb8733b9b55255e50b30c9b2d206aec0a6b9737d8d9e74d6168900692de44578b5f1d4b37014fd5cc44b2a397dcf747d7619aa6470c9de895fe5fff2b2832041e002b7a130926e9396ff558489a0cfe9af7d1e39040e4607be4201d69a224d66c6540df1607ccd4fe9f73d7308c719ea18ebe2b2384fd25a5c0a23ac7f09673a0fb14198355f566ae92457dec31e2a455b269f3a0118d395b16ab8721108d7f75be3bc25d39c4fe55e3108ae7d07e8fc862fb55a473f8183c64360f6429de7bb357e838ed5ea84eada9c7e0a08af64e76d534ca4646fe50f16e8afe8edb94657195de8940a0285c62933c165890f215a9cb8956e9036c094503dd4c2481ffc106c00aeea56eb55d1ae82495400f2cd013d482fb5f511f1bd01fb6062d7c18ae2180bcee669b38919f5c405e70cbd6cd3f50d4e8bbf1e1ce458ca5f6a7f9c99d73f571d68e5f963398db4b7acafe0a39ede53c0ae60eecd6c35fec7f439cf6e83f9e99fbac12e3b82596368a09e334f69888e80d1a2b0a8793b2c6d38918dd2c0f0e7de0323420587d987e4c9692f2bbee5b754274462820bcb36b6a91bd34c447dea35e0eb386bf054df860d2d22051f245dfca18382f7fe055b99b47822248b2c30e3b87aa94b39ae22d02aba19cd8101ce75e96432185cbed080c0b11d9a779eab4ca8e845c6ad7419a56ea083ae57bbc3eeae4b4e9000f0eb4e5c6d409a05be4494f97a024f4e505ba64b0bc5a411262429da5b2ad69f4808ea74802aac275f940104a96e8a73f437984611a48a73c0a16e87f47f9476c22f5338a94055d53e8aa4d1edf3de646bd384f02d7701772da0f95f009bee10b26ce2e179d0baea065efe2d87941fc65dd91a9444511ec6f8292c616611e2e211b28cb4ea9b0134e4996c017eb0e54922bf66b872fe63b600fcbaaa040213de6056cea640e160632ebcb2b56e47391ddb31cf76bc14ed1a8717e20fac5560f0343ce7b86e802de0491cec1432428eaa3c63c29cca18127a4353e6a38f1c0c690f394f49180f9d9a32fc116957ef2ffd38922ea52b51446f65f900a0b48ca90ba5f19d8f53c1c4ad8988d947ed3b83c420d3db212994ede66dc5cc417a15cbc73a99e0f3db08de8790b9670d36378303af9d70b64cc0c77223436dc3cfe67027813c1a77ced5abb28a57049ba09a09d85c1d5f6a669f5cbd896bd8c1cfda17b1a3ca3d26af462bd78f3dd10eeef52008d314e26095d02d3e8ebc3880b05683bc4e7bfc30e48cf6d2a5452175d027302232e532f32381c59c3610097f903db0af8c6d285e01c9055b8f87b3caeab1779c45714dc694f5f3c2ec715ef742c8417a5b96d9537594c3f411540587ffa8c9c94ab9a1844040722200a1b1e808f965b4eb907b15b01f414eb487b00304a2c7e0933cd1760b4147b60645532f4d89c4eb935d49df817568318ec22c8fe43bf0ff35e33c28dc261d7d8fb71d3c928a607ceea01101c4c2f1cd2446d0df0a17b46d2942c3a8c1ca30333d1ca3d911e0f4feb514ab62d8dd5c0f0ae98dc54c93392d70e7df92004eb08b7b314fd799ab934e4f6d24fe074155d4027759a560606b4326a3ef2f6df00515c17e990c77dff0a00e9138ac16b56135a15d2db01a759006141715a283d2b60bfa1a47f00a1778603f0bdf6e209af662b4238ea9688d05d7cfde8912134161a76f4153267a56bb7f563bde83ae8ae1822160479442f39596bac9b23c6d4e314bedcc187b422392e5908edcfd9e41ca175d99c41635ea0c8b3daf8534d752007c096a3145e88060e106534f571d9c43f74f7373f3a60582b93114e08d8e449deb4529cbdac296837f15e09395f3b3c37119158113bc16210d6e9a36c9e08a35b3189d6c7e2196f121c275bb2f76ebb865156a1619fae3ceda21a2e08037b9c90ed638018a2ac6d9006e719650ea83c86bc1ec61afb54f8b3fd337fec4edea53a9a919fe60096627c3def46ce11b6e530ad6989d8d57b5bcf97e5fe6ad17413397d29b97574d21fa49d8db24f96541bd6216c142e9e18369d8d956599ea34db4372c60ca8a8fb0bece3c0d3a82b9e2319c9181f77a8f352a66cf8e08d9f2cc5005adc6e605e9e6d1d7f78b102bf2e957d8258f5852bf30fbffa28d9d0b873853cf9b14d68d7b1925f74b9ffb0e7db9645e0e1510b92e30de207322ee307f5d3c7517b410cf8d5098c5023cdd317102a4d879e27c2f934136c0c3da895aa4ff2a2e67e38034a07988ca3954ab16cfbc2a10b48ba1617ddaa4535790fb822a99e3c7df2964eec02ea1365d0c483a63aafad83ae21ccc6ca7269127887747351bda8fd39e58aa7dae87601f863f484aa6ea5752a5fe6f93a069cffe0adad05555bf0e0c0e8e2b2942da2b0155bbc8d68a6e824e4d958154f3bd4a1b150367a7ea79f8c8a34a4a5c013b311243fd5e3c1cae4c7d35f89c0b223d9e1d85f4f615d8477060ba31e55a8cb107ee184297b92bf02657a16f3c587ba4c81bd3cec34cd286f7f2cabaec14aebe53e9e5fb46f83b5f64b61c7f89ad0e81b3e4bfa8e86dbbedbf6149b7aff041627ded766e58f3d471c1e5cdb661300b8da861b042361b95f2e3501d47b4e91d01517b1e10eaf24f9d709927b4e5585cbf51ac83b6a08dad3a4f6084468d6c97a91b7101a57f9de5df903e3cd0f2d0e6ad5f07cab824fee77acbf504a605c030c408136465a9f911facdc69cc29e095cd7ee4bc417e040ca13c21b65f260c8e1f2d8a326124b2a867d3fd2df86d2410b82ec6c1c0f423ea8c20462a10f11b760bcba81b3c8cc0b517ac69733430f5d32af7606aba09fe62cd51388d3a233f15c371aaf024c338378bf6d9d96d47b870d72ecc3a8fc91978b45fd33173306fc4f19da8a8905934b16baa0f751af8cc1c640bdfd2af5c9e84852b8361fc9744c87eed24f141aba5fdf615bd85494ff909e09c0dd926e238f17d19fa72ffda315f7f78f6e8a0d810d54226e035a9dd532ba5fa31e7a53fad4edf1adfcab9c216eff4f9a7409a8acebd0e15c5021c791adf5d831972c8fcce2d687c3b7c2852a7f16de5ab4716f75dcc8bc0697c77d3d109a44824e38da03a6f349b90fda18cb24d72c20b40f5525414836a96b87f1fc078d9f5ccef61fefc76f566ec6ebfef4a4a94c885692d6320446ac666e68ceacf3b65e41ea610ab453fe785675bbc53d52c8a3c3d5c7bd22d6c43ac35e66bca096d68ea2fa5b0c7c16a528ebe8bdc37e906910d0966a9048d3c20fc94f248a87140a414d2a45d85a8d3826793faadee92a932af7998fd07f98f3395796e80b21a0fedf33008a754b36d14ae65184495107715cc8474478837be9d19610fc1771f6051cc83c41197e460018a7175d0b2d34747582183bc9b81efa33fe4dcafc077c6eba34291ed541765700dec049e96fbf66202df5502c6b25163b2e9839afd7e3734d27df51687113de28c41bdca604fc077d0402cfed2cb2a28d3c08c4bacbe6081383490cd8e68bd76ef7667c302806e8c4aafdfe2c6d2b444b888b6a8362865177fb79d367ff4d461787b70c28f7fac04181c004f8d7c2201e42f8b8302e2cb79ae683404dcb20e675f32bfe1669874bbfc36bedbd42eaf5cbbefb1621cd72f77db1d9e16e7d2c614579bcfc5ede15fc9156d6ee4a535b4d86fa2c7bbc57d922f9e56d0680c353cb685807790b8556be8a2fbb52e7aaa339e78c2ce01596b16dbbec47a3f3b4e4dd826941227d69824a189c406f3e76270e2b4a00a84a198ad454460830194c0ce98bdc1e24cec391f74c0c9098ef90b799734e408c917050bf1581c08d426040eb3483487a6ad06020da683d5b3880d0405811cf997f616b02c500e8a043068b908c94bb0a2c3d637815e79019319e447ec2d236d1f161172071aa0ba74b01b5997653c4f050ee70f5b3662b9aca9f767607d40619f90f2b438306b7898acd94bac896bda9a0adca5cc2f8746ddf4d59ba8d194362a451b50df65c8466b8cd5df89b8d11df3f4011138fa8a95de546e8e5631a4bf97b3a35b2c6e05e53c7a453f797cd3ac494d0392402c985c4dc798da8197726471b230d98271b07ca5d4fe9a1b40d20ec90e9bc289f76a1a651bed1fcebf4b733d9672c83398792b4c38379a10eedfe75d5732727115f7cb4866dce2154de57ea56982ed1fe37d285740b9307535cf6a955bc276e55c48f7bdf617da798c4fda61f02010d970b468e452d42e5be71c8d49beba8cccf0bac9622e5d884251024b4882b012a8cb4076757ff592f40dbbc639142a9c1bb9cf38243eb55d320dd42f6dfad5d60295f1c8d15f2d92947f51f523577035b1a74a544096210ca9d40f05b972191e1144af1f62cb740c08ca92360f917acae15f964df4d2f8fab00cbdc4e845d50c86b2a573e213eb02fce2999484c08878f85ad13faa3943270219fca3cdd5c17ad608a74e7bfaeb18c9ed373fe859af2241c4a098611ed40811bbc5bb44847cdb8bd55335eccc46bf8e6aaf55203143e3170a58a89d01b6eb19dd8b9806b029de604bc23e62dd34584e1fee528d48023e258a1109ff0e61436d0147084c4d992e66e87aa7b1e4e61a4b448a64f8c77ee23f77903d2ee462b4df478ae1a243da231d218a396e1f5ce190352a0c22a68b3a33033f9a178884c8233b64dc7f9f2475ca336bc33535d0d2c2ad8f9d4f20ea8fac6af2679035dfd8478896f6ff073043e9fe5dc167daa5bc68b8fada7145ca67348cfd723d2aad34ffe20c24aa2e814c84c6b3423aea608a1c5a6d88440e7458f064cb159a72f60f3bf1894f17e5310d3a44ab3b2ff291ec58052f674f15a736752a12142c40c9bba2f70b1b41762b9524d9af54e018d227c7d72a9bb1bd0100abc21c422547ca4ef22f466d7bb3abd0df816eff8846ecdae9647dc37d2407950f47988968c5280a85a01b2831ae921533f907b96eedcaebcece4a8a8e7808cc9a381ef82f539487675a926bf3d8e90cf77b6345aa95a405b57257dbfca9c0960b9299d6acf745083175a72a04feda34903566336146913cbddbde2d41138bf9ae4cb184987525ba76b401b0ea32540e5718f7133f1e46a81298532d998606915f2ee1fa528c415f751077b9709fbe14d7ff5d7d1d7194cc77ae7bbbf6691dc1fe8de0e0d93b469ef88a12f2a6bcb06fa6ed6246334af14a02cdfd73499054c710d9c68462bf73a9c3481d1aa40e8ec0b62fe34bbf4411ad36428d78231ea9e51c85493c130a79fce47512b7af82785020fef5c0489fdbd77001a875dab326649b79332996edd0d4d4644c10490b433c559c0c6b660e21824d0010c099666b639bc536ac82c459e7354c52db9a4e34aac46a5826390d993c06718fc7fb6888c6412dee5a1ecf0a407d1117a5db5988aba5fd2f00221573bce1362676f762bb8ac537f3306c560aa802e5e9a5a4c4c71545d25458ddc9946d8cf83113e4b1489b8b81d29cc3e525032de095893c5d92e0f14b531575060a613fcbd27f952eb98af6d86e9912e1d50ba6bcd055bccb41f5790b81231e220c7bc32a6132e50532443d15cc51f1a73464081cb20967f541a4929acb07200c48fe479cface24199e4897dd606d540e25f28ff33de009ddc3142e0fab8ae107607859f808ac970bf3e16302c04d9d92681f544ebc7124c84d19ac6c5a75159f6a4ea8b3b51f405eec7d8dbfa14ed6fd274628bdf32a3007e65ddd2aaade3c6ea5df009d00bd9ba42e17318060db7162d9f1c044661a3baaecda8240349565589664bc666af07b52c76915a01c0ee120e4c3200c866408e4d1100e423e0cd2700806401e0fe130e4a320dde4dcdd6a3891a27defb39ffdb9dc31217dec9884941444c50e7cf8aa700032ab7f227970b17df7ef1278d43feaa6fd7c9f093a69ffb0571351dacf7aa46fcb00f25515ccc5a2cc7740ce399f09a2642f644e0939b19cf28c770c024edd5b8170e443035f6657568a499b387e75bf55e87770ba7b4a147c0f08738fae48efce5aeb21ea02dbbb668240b25a77a89ec8f9dba10fd1f91c0c3213b2cfb3d73028207b9b83de78cf1af60cdcfa4a970335f99e1baee141fd2fc3f56d41bea4a78d1028ec2c93593cadf321f87cb8264c636bf5855b0f92dc8eb329f4a30daaefe027f41d015c3b60a827cfe867293049a1d101fb81f9cce0189a3a2cad43a3dc80122e68661d3ea833ddb7387e24f129b819501e3b15d73d0d7562032e2b6c0fb62c76f7596ed5bd5677dd4e86d4fd5680d16b1f0b422e2a6e7811ab117bc3d08a126c41e94a80bfb4b36941141cf60528e69d61a22a857001027c6ff23daea59ddb2086914bb3f779e2b9a509cd0731903ba994fe8022bb41dabdab6ff87768b7cf5f1eeff29add4d16cd73271863193ed049291b6ac948ea08ffd2252d320aefd2dd82de55a903c4c18d7f0fcf2bf11415c98d7f53bd2c0a6c78114bfdf39b876cccddb23e3c1ca0506515bbb5afacaa647f7a0f40b6cebfd9ad022eeca0f7aa12d59fb04d1656ad69c6b4bad6e2f900fcca914d01955bc1b17aee0297849a7143538fe7514a154dfbc76935ccaed93a09008bcba265b1cc9da268d5cbbb5aee763df2d8892dd208fb88694d9a6d8528a5993104d0970ac45b74152c3cd4b43e8f511bbe255686e608111a653f90bedd3da23d93313e3e757c4d400489dd2aca95820264358524c2e170198abe42f2187de94988d629ebfd8b99d91886e21bf9c35ff137bce5ad51595ed2bdfcd84ca3c21d407d51b80e487dec66266f8be54e3efd6adbdcdea616ad6247c02ceb736f9d1aa772cedcf1027ad5a76b58deedec8a7a5aa044ecdee61f40e56ad6ef0adcf715e5d570c2871319cc61d5da63f0030239b34ef1661429e53ee27ec95fe27efd98e1c187f95f0c411e1911595642447fb714db794af87504adb5c5df1f42a13011b6ede00fef56879655779e72a31b045a3074ce120ced85bfc4a69cb378f5cc3a1dc89f040a857c298841505d91290a2295454c18e3ccd0408e8193912aa5800d77098af00494079885b3ef4419ecb29325be43a635bede55253f7106e002e0eb55ee420d684aabdfa0a86c850368656523f2d8bcefd15679ee4e37531470b8e26154b93cb7a1995db292ad516836249b045de52b4a66ff21b16a357257e1db63ba2de3a873d350642ef3c2734faa5ebd99b08dd9c01a698191fee92b157cea2a33883a59ac5775822ddc419bd4c200e7cdd34409cc31ac1fb1739f72ad5185179bdcc3eee7f365c2e96694432a7270c01d9836b8c82a847c22d77fc2cacb18e2d3d33f1679ea2ee669afc159754909a3b6e26c8775b497e07a3b8b95db805e04dccfc9c99c4d46214c3dc74a36563bb0d1b0d5a03d958d616402fcacc0a63c9f5a7aca082d889cb34a107a5652050104ffcefbcdfc53db9844c916e168f04a683defe84cbf1730acc317201d3378d57bbe5c79807e59b94bc00b2a0bd1416d25f8d3079627a1eb37a1096fe22f6ba6e4d0702bb2c8fbd72f8770e6046e6abef4a399a43aa213e6d9228cfa69331ac48fc90bc57967fbaa1b2bd318c2dee8f38ac6fb87e929d46e148d2680c846531dacb408558c275d276a4881f327f76913121196888564db5689caa1bff26696e16f83d77e476636a4a1828f6caa419c7a6d2cf95d2c7c6e7833515e96db266c22a597d5006e25a61347805f3e2f36ff0c651781ca5ec244c88e8c43e6d1bd9060687a10862540206bf3f587fc9edd47143ad803e04de5f19e44df51010feae052cfb3ce319e39a9593f5547adc0ecd229be0d716ff2581a9b8cdb4df73b3a85ed61791087994971903f1e7e7f89ea807a23034ae5932d1698c2947dd33a571553f584511faff7b6d5289ac324bc09ca59f54d4a91ddffc065e3bf5dab23866a9f560b1043ab8e7ea1430e13dfa57e9fa44b7cf68a9e7dbc80eceff8c3111c1db7921356433d7fc5d3ec30521a474866cb05497c40b511b198448fe42c54c3169d56c5283c5809c08fb1179c211ce7857fb44c20febe7062e808e938dbf827d835d79c865bec5c1a1455db09ad1d6d5fa43a569fdf086a6aafa4216767691fae109f2db4ff8a104fa9b31f33888796ccfe48423c037acbd70dfc050132dec84e5c2b2a8dc3557faca4786aed76cfb44fb969484745543ba9ba801cd0751e4ab2ea7215e04f8a24cf869aa70bf213365584542200e02a717243af8a8c458820fd4854d36d532d185ef6b93932835e73c313057ccf9fed5d6d07df0ab05d662ed34ae266012f50dbd7b171cfa1235e79440c2d875dadfe9dff5c49932b368a9c8834d6d74a6d398e8e1124920bb2fdc001c2c0ffcee0b8ddb6f9cac688438299b8156ba4ea0ad429ed93b41d22b61d35edb3a55b693a4f2728a25dbf7d28bdfe87584a9d7e2b966d0167743338ef61483898d4b8bf47c5352966699775a2d1088e33752d7f32819b4ab476aa37de7ad6762b521dca94dba1343e5b45c7e93c352b47a72622a652841e6d2d087cebe03a0f6c5f74d4742ea3cdaddeaf05211ec7911d7b9dc7cb740ddd40f52a7ae5d229d022678ecce8689e1eaa1f1bfb0006510623f5c41cd61e7a055cd169bbdbd2414635ab1175403e06ee4c6b03b0e64c4a7bb03f73199b530f675c92f83bc176111a05daac06486dd2d004892169f6037832810c6f177ce09744c4ee26887a42b84d5c3691f8657a6a4fb41c027d37eaec28cf8f271c7b6b7fbf32c823190954fbb7b21163db5973de0eb6e37bc65eff457e6267f92449da6d22ab1e16f85b6a479d82d36e0c3e205ae40d67e69ec4b2fe3f4965f5a3b8d8cb81c34ec81832dc4189e484bd94e3d3d00753e727e2d9c6067bce0e4c189841f58b104ef43f7ea770546bd341aa892b6171e0bce76fd0ba87adb3096fe14e42c29f4287371b6760775fd2054e47edb2b1aec2796b9ce01110c36f879b33e64d1fd585044aea413968bb9e350f6c1c89b788fd3ca423786bf646242dabdbe9688a15ce1d9064d54c0bb4b67a1c972cb0092f632839f6512601f90abb1beb373cad10eb6730c67e75b680265339fbd23d80003a857fec2b779ec13058d4a747ece4518bfcc490c1c5a89567457d45341b51aef07aa405eb173aee354842f4a7dd0d22e9c37562d62173a16acba2ab3e8a8449b7fc074c6978a173dc1b04222ab9074a20441ba0230c8a0c779cb05687063f9ab078a0b69cb89590ccbe5981dec2d4ac565255c23a3f501a4193d3eee7d64ae9fff49d50147a05e9ef0280c49c02642ebef43aed55688cb18e1aec18a10f63833358188f3ddecba268d54a85abd158c75b53f30c7a0d1c0f142c047a79f7b2562010334e07dee3f5995fca6abc7fe1f5d03d5bebe0d0a02b769e92eaf8ec4f3cdf1f68ea654779461122e288e5a802c27d8aadda47b7ab6c923c5a767495b3f8c81999fdf580dfb6fd6c4b42dadeddb6dc5bca94a40ccd0af60a270baef509eced9a77020a7ee69b85ccb5cc33923953beb2433be44656ab6bb3ebe9da4f3b3b8c93b90daec6c10f685ff3a062ce8c1ad82814a09ebb3473028e39d3457841fbac6544fb76eddb3b0b25fba959b2294620d327655e8313d243c2172a598ef881a3da1148d44d631e52820910d8a40d9f7f495f91feea1c6d4e568831c608c2b3d049e847123e7e5f7b774f76cd39e784e24a9730cfdc3860915d41b283db74f0838cd5adf21e37246d328430031e3a8882899894d70a538488153186106b5c51b56db3418e2d0aa0edc66bad5a099a26917832a3ac5863e66fcad8c71bb93cff8d491c8d8c86ac70c6b3d7cf3f36ac7cadc15f9da3d20cbc433d033d6b41a5de3ee70ca99462f40b276ed5a5c71b7f75e01673a8a350f033ab1108f5b83dbd2a680f59a0ed46da6738bfd877d8b16b2bc2b6105d1a34a0a2a0f4e08c6083abbc539d3a0db979a967b3eff42ca4616cb93e0abd12f6a122cc49d9bf08c46ade5e234f664f3503eb0eb81879224fe6d7eaf4cce9516659e6b373daa9d7c8c3ae49ea9286957da61266de01991a19a69882090d7670850f64b400c385931c70200262c288a78478479075733ed26197e65074ba316930e16a838c95989fb58fb7e7f9ca1c49609c800206d1ebdae7eb7ad62982794c14d3c51776e07103315704d1a9baeac35f1ca36c8da328546b0feed0c868514c152b54b8c472b085cc8baf1853c50c4b96b8c1c451c67ab8c1604cccc6cfb6711e5a50a292cf121fa0b04207277210440c7c6cb812cb81061dcae0414a09ec3261c897836cdbb4544eea8046156dc583e78e6a168efbee48a7b30fe19ef5c49c858b7c8a35a84d86913ff0a0117f16683f9775acf5fb50c94e8e2451e4a48fcef20789833e3aeba49c58e991e5e038be62f3d0ebb3c6cef92cbbaccb3bc77b74d8a563c290ce61df90b01a4041be3624ace4cc47b2b4034776a7c8a3b345c932a36a95bbb065f6db752a76bd61b38f435ec8f8dbc998fdb43cfb8ddb120e51887154b68b42747a48c8f2fcec1f7bed54ddf671c88bd05f1ca13a7a6abf919927597ce83992299426ad31eb31585cac7f378e03c576b33914ee1bd255b8cad5ca79e584a23cb3d013cfcc1e2b73c9061b3f213a7ef3559ccf4b16cf1eeb78f6faf9c7fa38e425ca5bad0a17715011489cd34620b1f3ad092babe022ce4b8ec0d1368fddc152bfb5c620128992b7b123cef1d14a1e422fa99524a0a756f278f2944aa97dd48941129d926f9a59880ebbfc4aa9d32e7685b76553efe9e6e9ac23c31f1d18965d76f7eceed946538dd2152f604f6c3b2844875dd1bba3b3b3d0aec32e76b18bc35aaded0e2fd823a489f58f2b7c749d6e9d9e18868d7e7174620e7be5d2c7a1367ebe9140e2afcefbc0451c4eced9a3c90e875d1216675029fc70715a4b303d58e98ba713bced9b735a573d58777b1dc600a052f801e3394eec1cb08249f8b5300b4b32880cc2dea152f8b19eddf0f469f8380466c9cf32ffb14bc6211d8cf9ac882bcccc2da5f429c9f0f27374c4cfcd454f4a19b5e8b4639985fd2db11787776e12fef9c9bf5c0204a20f540a3f49f2255fca11a44ffe86e2ca942f8ffa78050aa4af52fb6b7f08e748977e4928d2a610cb0c8bf324846058fa71e8cb94f7c1d68f435fa2fcb5af81ae1f9c233da3f38695037ba310cbe7213664787e66fb1af2e2e4571f87bef4f0dcc7a12f2ff8eb8a465a5cd74b8fd75ff2b75e7a945ea57fb2e8c848c6d8c5c0de08c64f9f4ec290e99232d3feb008232477389a227790934c1532b1df620cd2c72dc61c7dcfc72df490c14b0f5653868d4f75d825b358cd6f557d30fcc679731c17deb02b0b94304f808f599850e3a5d72a9d6e6e2b71a1dc5cfa0fde29851206beb1373b7b35660c69f9e43909688e181a4847411f878e8058878f4369c49e8b1ecc5e61198da38f436818498f583e0ea1f1f3edc12c1596bdda1461bd8b373896f3dcda21cc591b7f08c768e5043babfa6ed805e2802e1d213d51c8ca9fad13e84f09a38c694e7ab69c73ce2d387b850d2c0d6ca9790c19bdb485e5224ce5152e562a2a372b4f12cea1444a9825b470839d3e99878913612ae528ef94a7ba4eb5cff891ef65abc3134218d835e3935d333e8457e812a64b98d87548d3648ab29d6b0e8c271dfcc0838161cbb9ee609a9f40f9124c02c3fca0c2c04a07e1033f9ddcfa91efddab07730a03bbacd37826c4ff206c9d9c05e9d54f5e1d04df5c7e5e0259ee812bf701d2f80da8f20e9461ba84e99299ba6ece9373dc9ca693694eef389f6e398ef3094ae740ce649ad37d7830176c7c3a5741389d402895906857c9f5f9f6e895acf43c8f1a912ef8f0d0235253c40666e3a1076b79c96b01871deba1c4c1874fafc88d0f6f1fb0ce2d38e3124c390820ea03e943fa83cd4f56f5b18bba8f1b10c7c52e1d213d434c80000a29802ab0ab047641097d060c01efa03c74ee8790ee6e9752caeeee969c74a15d862093ca09b0a76872ca799ec7719c9b86b03d792edde4791ec7f9e6715be602aaa35e11ea156997eefd788af2602e4fe2c02eca790b4d652c815dd4f3e91591de2ee9c16464533b2893b81b7aeaa5152c153bbd3b0baab4b063178541164ea01a1f389b859d3e33b94c226cfb9c760a1d6dd3344de3dbd91b58f6aa29e1224e67e58d4bf063d7b66dd5b512075a2becf412ce3603111833d3b832e56c52a985f7fbf123bcb55a08d81ad8fed13874a94229ede639e76c4a29a54c29a594524a29a54e29a5945222ec744a63145cac5158ce04e6b15666ae99bc8233de250ad74929bb38896a98bac83ba699ee643bc771d223525319e8c15261abb60733399b00015a02bba6979cba7311f6cd8f7c4f6160d7e6d433217e16b6d8b95d2bf98c4b9373a50e23bb0eac5b176e7629e71a2c0de912c842caa38744fb54c8027b7c1837b8b5775cc925d74506d93a043736d239cb83b9f075d22b82f24eca06ad6fa0e731ab3ea45d5de775b38412d8a583dddce5779eb46c9df33a697d084bf7fcc8f70debb025c313e84b97210c2ecfe794276bc11338bf1b18a4777397a4e948e78157fe7cc7523a974ab2d3e0a807738173e91589ece2a90237ee474f0ff6c6a192976002ef70f3cf2825195e55eda613db569e9ee0228e7425ec152b2b06b8e811a7cb4f90ef18435304f283bda6222c65e09a1bbcf9287bd6944ad905479aa47b7a2a3370724e0dc24ea79994528234f8cb89e992994990f49a559a845dcd610db55012f5106ea11d06de69e1e35a681e145a72e1587b1492406d3fa188d4442d704e7b4532d2c2efa514b495794b7a7c293f7a48683701061f16892fbd1d87773a73de91a17ca2d3146c2116937ea64f26eb9233c07c1c3a83cb4fd7f93874c6123f38677ae45a75e2b5543acf8f9833fdc78f1f3f23a352a84128360f9098333d0175013fb110e197e18f1f6cbba61b39c15555dfb0ab7ac963f5b81159cdfd76568a2d6427639bbdbd6ee1629d625bdd0fdccd6baa12d55c85d73cd334adf4752a1cc151e1080e911a359cb33eb7f14e6572cb99401a3f8128d5ca51348ef2cc9b8075d304528ef3a76d0b5b34a19194c9517ef2216dba268ffe99c0edf3216c371a157e43b1894d6c72ff2de576460553683dbe0a8f326d9f5b9a239f6f210b9fcf842ca87c3b82f35b7804e7bf50e5d15bdda6b2e93a16e72c8ec5b1582cd486e2507e42d5d4d4d4a05028140aa5466a06bc383fe326f0aaf0261aa739a19c7562178ae67473f29bd389e646e526a7f19bce67dc0466aeb2de796a06859a711478711e358342e1b0eb084e24520187c936c30bc3064e4ec0f40a3a41b3f0c22083c020b7a061618041d3d048c91164100f54ac5875dbeab6d52eacafd6ba95b8cef33aaeb455a4afa6d6ba95b8ce3399bc8e2b6d95891a9b5aeb562a6df5c8a655b7ad6e258e2b6d95a87553eb1135de091e11ea7de383061f75db6a35e2039b9a8c5d3de0e473a700bcf4183d00d2c3b853d9d5d138028e0cc22e5d4611e40825973efbfb37b09feb0e567967039c73a12ba6e1e25c44ae5202744adcb5f62c45d91def88205decec2530e0d9af5c00e77aba7925cc2d34d35ba374cef6d8b6794cc09123b8ece33cc720d43770d6d845978d2e39028d41a8b3df013c7be801cf4898854a328d656b5a344525b26cd61ec16fa08d6a8f2c934d9b4a29f2244596812cf809cecf7a4eadceaa79464a2f9feb409effc2b7cbd2b78c40a8676368f9e10532d0a1012e7004041020845aadfd3ef7eb7221b10bb54716526a71c30d52a431c71329d3e8a22a992f9052c2805217155cc4b933f6ec1cf8b179343b5d92e037b0e6b94943c0434c4b4c044213a3130c7fdeb8fc66709ac24ae79ad216bc06cecf3cf38c50fadcec34b035ed4b32e650af9e11fb59abe0a5918d658d93661e4cd6cde50ef267468cad048217442da2551825ee032f715dc79528d02f894403848d5f0d0d56fafd3aef060c22a28fe2995a651865cf52d8657730d97c8cf54f529214c339ecf2fb8848244bc4f759cbd47b1a017ffa4e666b6ab5f6fbdc85a2085f974a1dde0806170de0092280eeee6e76795750332cd6df6f26b5eae96c48a968747004c2b3db7853a868545f1001d46aad0cc2a141b3ea621421f5d1c1e8d131802b07642fb4180101a9bf5f08ccdef7b9bb5c3a3a2b3956ac192e4aa55846042372d180679ee720d6af006c18bbdbdde5d2d1e9e9b14bb0be2e4611501fbd540a2512e73002081002f34a8dafa68b5104fbd1e5e057d300ce2f4fe737c8b300bc5a3b6bb98f255204c2795163d3d5e8a51858d91ddab4baf83ddfd6b3735962d3a4d5791f234fe90321f270ce5c28913a874b7e05f049cf3f2f91bc22acf42b6f3ad6b7a251a566502ccb3ab14c1eabe34aacad6aac8c4e56b37440cf58e59c22b8c854a31a6bb47b4611b6ce59fb2183308daecc29b8459717733267ff519d6d3ef34bf3cc7f7f747465a5177e7274653eb3cf58906d95e337f39123fd3e6b430f843f659b683867cf194da61881649ed17e0659d08983c361010af58e7655334d3175f8428df5eb33e53dae3f6bf60ef4bc7da67cf488701be748e616be50f348a6a78085ea2667a17a7393cbc0ead5b91a22d9a6cfa454281a1a1af0aac08bc2b7a7c01b830bbe1d05de21df268fcfb90539939bc2768ea3ce5dea9cd32dec1898c43dcabc56be44be7eb457139fd72a8c9d937591f848b421cc4590c8f492735dc9ab1ff199f2ed4836bf307c872fd4bce7b76b874836bfd9caebe6ddab2c44e285506a587913254d7c9cc562b1be180d705df0190a9f0fe1156bb55aad56abd56ab55aadbe304603ac2c1c365bb1582c168bc5627d2c168bc562b1585f18634e9390e54a5631e6f46ab55aad56ab152b8c310b4b1ebf935dc65116d85b47b47fa17d7c8cdd5c9679e9c14ad904b43265cae4f15956a1ac9c3d283ffe5a854aa2d1cb8956fd5905d14baf5f5e7a41a5cb4bf92f90e0fafc09b4cfdce7d93362fa2c6c6ecf22f0827c2d6c1dd13e0b5fe8a7e1854549c3611ddc7423d2e3773ec1e848da2f0c2fa3b3607228d6aff4ce3909869d4d298c8d1ee54f1976ce95a1f409defad3a50fe95981f852852192ccdbbb0ac4179de0f5421468902f94a35050854b541e83cf4be55ce6114122cbfcf4cd5b277776cd22d36788e4857e282c50a1a00a97c4a0a44c166ac881470fc89479a9bc89cf4b153649b92944d23ebdcbdc0323787da67cab7a7b29f45685a2f214a844daf0a7e6a50a6b507913254d7c1c8542a1be25b2cccb09ea2a1a71d04409902cda90c11539c24882cb0be53e50ca98418f1914d1840c5a5e2a954ae5c40c55a185c3b277689ba706d6ab490c35b05e4d94a85028140a8542a15228140a8542a19c869e172a6cd2822c580861032f701831e595f2196fa2a4890ac058913287115b3071c70be54a546113eb4c9830f9e979a9fcc7f55239939fefa5f29ffa5239132634d4d79253522cf6bd96686362b197ca99d0e07a2de93d622f95d3d0f352854d50cefe354f0a072f588e8ab0e2c6d08b3d055ace91426021860e5e6a60460d2f963e4f987cc12489a2316c18bda88f895350643c59cece0ccaccddddd30c9c8fb9b419ddddcd5cbabb917a78d2c533520ea6d32419174a5d767777f36c46e22f4124c1485c748eb86a8adca0e2886bce3967c69f44be9129e518948ad132d665685523234926332336168b89c1598abc1b188529e2d26d6962cb0c8e74dfec329250a73a344d6c99814eed4f7299698061824b921985a614338710e20629868b6a1a41c010453a5025e132e40be2978f61068c92d012e614ebc2ece909edc75f8eba0709ceaf79e2abea7c77f7e7f399b32422a9b317a112bcf3257863f8eaf3114cc2a006de157e1a0111e5944ed8e5ea0e8abd1d50d79e1eeb1894f2d1eb93a0ad096993c4a41bc748678ed18b1ebdbd8528020a11888400bba4ff601e19c439ed5515248386848a88c66879c26265100c78a77502fde8b15d024927b159523bb8239d1076c91aaaa258974bce2855609e1bce911e638c50da87f08d0c39bc35ba6436b8c8436082ba4ac3306ab144f40c651874ca192fd5b208645ebdd6eac1344d33a2e9e437a87431e508431587e420da983b55f77d1c72838b4f7d1c72838a378263eea4aad2c3cb28027532f60927d34694979aa7c44b8f47bc0773326d0c3135d6b4969189f671a88da22ef63135838af664f23aaeb4552d6691c6c9e5798b52ece3562310a94520d28a1a66c83a7b0bc7a12cf6718c9f0d467b4562d18c09e9a257e4003f339965719a6e04bea78c945a2147c86633182f23902b74d2a634b2b419154e724f9a759377524236729186d0dfd3b773b6d1d2e4ba634f7291996fd1bc0c5320b597e18c40da2b16330e2dcbb24c06aaf6ab69996b1a77edd18836550cc764fede91ddec36eddc3272e7579f678e12a7651747cda9a623e49addd476ce8742c9099d2fce0846d36c1bcd6edad3399da3e239dd3b1981c8c973ce6ed6246fb5c36e6a5b5551d7fe76cf9d0a964d6d4eeff9191ed1799f8f6efcf605474b52b35cfd6e7ea9dfcc6fadae6ddbbc7328a55a986599edae9d2327379fe3e6195146097674cc19ba303fc97c29add0096a1e639685947a97844655d4ac67aac853aa2a8d2b6561f6b7fb7e24317c373ffb8e3b19a561cb880bf3e92561fa44a9da9cd3e7276dcfee2e6db1671881c41dee663011cc16068a14110c97972b4411e24711dc7105101622b4b04115affbfd007610032d558c30c20e2c5e29307513a8571a7b5a66877a09bc53fa30749c31e68b2ca27822062feaaee6b9400f84aee400258e2c3ebcc0fc2c49b17346fe66a8d8fb3dbfb809fdfe940f36c58395a91facf4d8c3920419a4b2dfaf73a2fbb012c9328e4ef3f6d91168cfbc7a27b4e035cf58732dcb3c584633ea948568041dad1ebcf812b7a4c80a21c4686cf371e84b1c3ff371e84b97f8cda64e2333a133bbda99d03c26d740f39c3ca6f1d34f2006a22bb21b3f89f8c8633b872b105d968c26be5f5eec626a79e2fb003167ba083f69bce283c537ada10122907900097c73ac1c2bc7ca0698c0f7e64f1dd555c885c0cf4da77970624ea543784773579d366a2b6c608c757eece2194e151124db2e9dbd13e297efb02bc26a3e1a6b75549a496dfeb5748a2d69a162d8acc86e3670ad7a235134fa32947d1cfa82c55f571d5ce59d18ed697a8d4dbb9dab9d4e9bc1cc85188124d1be487c1981443abbb99b7b892cfa74337f36c60ade12b855ef0414a0a60739489f47e151516fb1850800df2c1aec9d4b2c8a8cbdd306f6361ef6369797ee59b11e16f6b650ffbcf4ee05b6fbb19769b0d71ed9cb555eba55c35e86c27a4f482c58ccf033f57367fe741c1793d7155c7e00df35eec42d4dd09e551c760587b54a589b84bdb2ca4b974e64f6e3848a284423457a46c43b45bc634414832e76707e7ef673c5b6d03c1911e77c938b19a2fcf412f886576b60853ab3a29811217dfc9b11bdfc921165466158cfc8d6ec61bd1eacc783bddfcbd8673a5262e1295660c0fc84a530157c83764248171e838b7888495861516b5d5121a7c82a4292481a492e3fab2b6afd3e9f2b2b4c406a307dd45cfacbba95148ef10f03b19376ad5b51692129f603e484a876ab2a6088fd00390932dabad594c963580c87e12fa56e2574c485eb5650acf0134b4202e3d2e9ba9514343075ab2b3fb56d7ff5d4adb21802e6b3d5da6e35c575fd1823443241752b1b9400e847c69290aece75cd74ab1ba42059c62f2c26d5adaaa01093da235247305572aa6e5583145ceedfc7aed51332c6f5c7725fd7aa5b4561afaba72bf7e7b23f593a138e7362d96f953258e973cef9d54461b3bfee828c40d8e51bcc2e076b6ae21673784e3a279db3bb5bdac8137fe874119f8ddd34a334a374ce39a594b225f3f710b5c6cf8a8ead9c9823c7b03238e744d12addcf3b467fbb67ee208e5d522ec0c53bdc2d67f7c47244103fefb0744d29c9643ff225e3a0d245ccb2d0054a322df319ba0b0f7ed03c06274e507a285ae80225d535af944be7486ad43932b3818b38971e7d14bf3243978f576488c5a38f576418f30d144568a1aed239395877354f490c193c8a622f890443f3c8e6316da1a50ba0d84b08483a699e0e630c2d43b197349ad23c4ce60640310e6a1eaec2312a79d831e5259d9d20350f1b2581e123698434455629414b0f22871a442fe91a586148f374ac73a44b2259c5888f9a27be1aa83b66699569f4f2288cd1a3262308e1e19ec56548dbb4ad8291e306265572400516595e9a16369690a388275a9c41e6a5cdf09a7f3cbc365403100610228404fbf90e8a8618e28196213859a5ccc0243cfdaf27f45272993da5d29f2e3bb2b58aaa04f49139304f91687f02c9e569789544e13009d7f99cc6a1f4c2df838bcdf3b21c03f96046d04b4997471048718d1ecec892459797926c8b9f57e404c43dc678c3890d5e5c47311389522ac83091c39297120424c958168392f8c69156058923b07491b16f30b281478cc3cb1268bc944c2d373506250a30e2e58474495ddb5c82f73392dd1611cd37108992cfa2c66d44f19aa0e461c90b6678452f6bb0bfc0e135c118a41450fcb8f152c2e1e10d46315e5edc0463e02d51e811c54b09b7c61631749932eae0e1a5a4da404a4c7a1347b9d2c655cd94d16d8e28c888bd1a8c61f67871a76e82128929568c5e0df218272fcaa12c6aa29a9aae9229031c4144af06e50e5d5edc4ccfccf04c0b7f53f0347cf9644a9a4b11e965e4420b25622f259ce38441824a0845084989fa88050930c22270a846542340228e4a5badb5d6f9d2a54c29cd4da7134145d3c9cccc31c817e7b2372a1fb10451f952f556a9b4f90fe6014148ba90212f5d033760a021a9096119628bc432c4904449b983a2bff1a8b4554e7a4862eb84feea45faab7cb1ff0fb664ec8fcab5693e6e51851e4158fcfdf1f2db82a3d181bd130b7ba74d0e504c58516af3f4741714af09c610d90812238397920cca2b720262192fb003e9d5a00068787d61b927ecad568f96f4b8870e6688f28a486c5431a525432203e8f2ca91237e141d1b1c14dc94ce8bbdb553836607a72a4e2c19d82e0cd0c10e605eac245ed1ad1c81515184053011d2c0bca2571b4590cd135f569a7eb0b7be5c49a63f730f3b9dbd75be7b7acec9951699a82facbfe582c912414cfeea70983d2cf5f6ae765486a53a6cfb84c245113c0bd19374a055f04007ead66946ae7cb4b2a4e4c1e6d5c0cbece74b8fcdb90c67b6acc698a61b27533a41f91ad842a17ae9f9b9d307ecbdd1a9cb8ebb6157e6d4f9e94fd63ef91968240ac51ec2a7aec6062bbd9b81e5c1ca99ee06e0011042f8331e91e9bcc3d1c4b05281a5c29115b2db816ff0aed045f082e0579e11d9cae8ece9aacec3428303abf3aae08e6a4db7a263da74164a6d752b2f93c341bde92ad89ade9a2191570d7f7a58a75dd32b588a3fdfab3ae7a3dbc092d7225909fcb1afea371e11ed236b4553c3da391f7436354c103aef082b2f07a2db8fe14dc147e7007cccf87485fbb8930c3686301963f4211db9abb10e33c3fc98ec0bc272782d9d5bf326639d947eaa2c8b3d4234ade2f8a7aaaaaef67cb1f3e4c64e5b1c52805fdf5b7669758af16038ecea66d7755db3ec38d3f579a9d5aab2454a5d3d586457ec66ffe6c16216568a40368f48e749cf339d58c65609d16119db643a598b42cdccf408e1a24a4543a35ac57a42a558622c5319a90cf2a355ac92b48b20ca8233114ca95434e0aa032f4e11f9d947bf6f7edfd72cbfef8bb6831591af82a5bc22fccecd60b9d832d2cf3e5bf0325419d99e24d355d6860c1b4f5d65b16ca639ade264666ed94ea76579b0e8c472f8d59c5a1eacbb915af4d52aaa582c962b76fb1cde1450e959386699848bccb1f496d1f371a1487f9541a4175151948a5df2e3645752138148e768b0d16ff59070129f84d68ff404fab47e9cdddc519e4c77057f53f0338c47228864009fe404fa1d5619247e8c40228e04e24a7a58e951e3e4e51bf9a5247b552fa1e06896542e66cca80d5895311940e3642ea026874a0214d505c46566e69d28e9ec4827b33787977db2ab1ba2f1b25493d701cdce7ae1bc1ad412e7c6b6ba63563b839aadbe48ca19cd69738395cecccc1e10cc2c579146e559c131f16409274f86ba8fa10f133fc8205908cfd52983b4e64b319f847fb6af607a4ce34b617c2982f1a519c68e1e3f7ef11cc732f61237f89247c4f46fece0d778ce9b33bc489ec3494103a0c09fb3d94a19aba9d28e87ae876865c8ca7e8243d47906b7cff91a33d3b452ec0cb7f84325c6f824fcd1551e11d3c7fab2152310f9e0b394dceddc61c78c3b5df95e10f656391369545bd552199dab66c93229611fe68d4a9679c4892dd9bf1be664ac03817f23981234cfc79cf62c48617c9b01fe8d42d21b1281fc6446dd65601576c55ae5091c7b1a9a30042c610c1bbda60d7ba350498cbd5148f376135acbe4d5bcb4f90a4a8eaa336bd5108528f4dac22f96eab033bc3a3f65061c8d0cf14a77c7f02a89f2d11b2c89b1d2db632763b795bf73ce5983c54a8f4233643480762b31184023c402b4aee6c74a27a193525db6870fba99d85c75dd151a6f0b539783d7e5d079546a8953634375ab3aaa8d92a5bad51aaa8e2baa93a68b72d5d9fc4ce9216159342afb7deac26161828a4fc28c24c39611fee8e5e31aeff31c478e6dba3e2cb97ca90e1b67ca586db177d26824bc2d14a66f2fbf65a46544ca203eeddd3222f9e57f15e0d79460cd0d56829d13f656095a1fecaddb56ea2408a29eeb3a09d277817e126aea36995846cd747d9eeb24e871d1753ad85b25e8d1c0de2a416e0d7beb477025c6de29412b037babfc4b25c87d616f95d34baf7a956a8615647512bc5f27a3472e49e6cbb06544863eb1c8e77d9e9b2eff76d1e7393ed21df926d562355d9f6f99c0aefdadf5b948a35aa56650f664f23aaeb4d5c86a1961a5e09b4b397041a07c296ba25bce40a6a084a179349dc8a38529700e3b90a4fb256db5e739fc14c07e6b6463f30001020408fb6f1e917e203bd8e81708cb52974ad1146590e646a695d1aaa6cd19e54445d5b61258b7ad6ea5d2566b86382d5c67d47975dbea562a6d3508cfd4c4746ae264812caad6ba9538aeb4d532a899ba6d752b715c69ab566652b5d6adc4759ed771a5ad0ea554b5d6adc4759ec9e4755c69ab35a8686aad5b89eb3c93c9ebb8d2566ba059052678b02ee2c140e8f121ca673e3b88cf32c771350fbf32d7699ef9cabc478acf48f80c88bfd188559ef90acdc311cc67de4296cf80524e64142f9fa532a943e6924816f10e8d675c1e9586136c004184870d4b5ed75a608e2f6ebc7105194e90794180cc972bba60c38ba03b5e37129db08696294f10652183d0eb46a15896d174791a1a1a1a27e2c1683c95f29af2418b4f39cc83a5542a954aa552a9542a2fc183a9baf5ed5fbbf3f0ed154b0f3a7cbb035e1e2cf3ff60ca7fe0efc13ef0e1c3870f1f3e7cf8f01d94781f75e87ce6433c5856bbfd6bafad43986f6f80076b678007f3d173c3832a7fe30bf060376f48794bf3d6bae3f08ecaadbb9a27225917c23bda5bef59e2adfdc15a578177526e7d059bd9b6d6ed1047cc510324c230630a1a581d8298c38b1732d288c5acf3fc55bd411480383e73123c58f6a552fea5526f58f9948fe0c1527ee5f4e32fce0f217f85543049df6eadf8f6cf5d3a4960a6f876113c58cf57f9f02aaf2a3050bcca15e0c154dee3c16c2bcc936f398f076b551bff6cdc716cdc656363e3d5c68601e26dd8f8ec009ff98e07cbbabbdb13e0c1da8578309b9e9a3abec611e0c16aaaeabf1efeebff3ea0582cb6e4f57dff796d9e1666b0c186981e791821e5f501214750d2510d92f8e1e175ed7f1ed5f8cfcdf8ab1203041272fec6213ba0f8f6b623cb1d49dc51071e5be0d1c6b70f49aae2db0f4094dd90f93c3184184458c144872ad2785dd7671eb38c87cfdc95f8cc872cf121cc40841677cce1431347bc323b8cf8cc0de0c1b2231d0ff67579961c6b3ccb83783096184f4f4f815c3d639e92b0c3df68b442a728f516d6789aa2ad03a52a2732d0f89541320aefc42139b43c95f29dc3f377f358da25c81944d030870de0d8a38bd78b0e1cc61c21841851b478dd1b8946c092c40d5186e8a205caebc6a41f5f005105135b8ca414f1ba32d646132d42398c01f4859497153d08424c1c453060a283d795647eb5e5575e000fb66a1c743c0f201eacc1789a387a781affe1c168aa09b2e0210818f0e08e2737785dfb2a150eaff2da3c3e4de4d0430931bec072050f2f551c36bcca09e0c1549e82c3cba77c001e2c55e3557d76f399cfcc2d1d9fc121f459199f798e07cb9a94e1c48b25f0c84386d7b56fed0d6fafa081061d37c401744611afa1305fbc75970bc083d123a19f7162f4331e000f36130493fa27ff4e279d931062fc29756a1b4e27578177323ff90acd13854e7d9a272759fc0975ea1a4e31e9e4444f7df27af278ed9f8aaad4f1650c3d8a7838f9205144451241465e70a8e12483303050220807294abc6e4c22001a765429e3041d5ad278e9fc553d15c28da7943ad9e1a903e0b3d23954befdbbe33b081cbe1dc783b57f35f3103c5816c25b20d678eba107b3a0073b45a2477904e251ee1e0cf5c457edebcf57f7e6913157f3581d17d2f3c5571234507d85538d588068f2f58777e457973ff08e937ef2d56bf3c42d4ca8018519753089428c57dd610e28d44842862c7820c5eb5aa1fac3196fad83e0c1ec03d208a385115a86d0420d9a3d7dc1531318346600a587980f79bc280fd078ea1f78305af3272a7f721f1eec54eb10638a2e8684625dc27cd3f06d8514358ce49041076abc3a0e31df7ee3c1da332c3fd8f099b73c586613a57b93090dd31926cf643295611a80c98d37f934799d618a37b9c532c39837615962c69bdc45c59b4c58985879539321ded404e94d5ee3c14ca6f78e788fdff3dcd53c32c8f35c08ef94def3ea79e4f21e0efe76aa9b31fee298fefef8e6f23b41fec6223261bebfd8c38a322ff8f6cfcb08f1ed2e1e7cbb4e993cbeb1c4c2f8964106df46384f9bfced79ea918d29aa34010a428a26525ed74565a0460f3da8238c26902819304fbd5232673c759607a31ecceb29c0771eedf8ce693c58b7e33dc7e4397757f3e8e808e19d7ece7bde786e09b702c78579ce6bf3a0ccb0618a0e45e880c4965702bc34e1011571fcd461e575ed7352d4d0a58b23b660824417af1b859ef3d83c4884e0f2c4071ceed0c2e575235115cf0dcda185009ebaca83d12c7f55dfed168e6fa42cdf9e9af1605c444279b049c4aef6191ee9c98cd825b7b0868e8c4a2ba3d26ab5929e5b59955656a545d4226a11b5a4d0dfd66dddd61160feb65a45cfde8addd6cff36ddd56d0f36ddd5616039b2c0636365f9e6d6c6cc43cbb4df6c4267b62736de4177f6db4f86b73841c7f6d7a785d9ba267b789b1c76bf3f37c6dae4dd0f3b5b93676d4d851535393f45c93941426fba9f9a9c97e6a86f85bc33ffcadb93532fcada9297af69a187bbc353fcfb7e6d6043ddf9a5b43dbf8681bdf87f49cf4fc81f9be7c61a41e7f3f99f4f7dbc1df4f88e8f4ba5fd1f3eb7e63d4f0f7ebf21d3dfb17638ff7fb79bedffd829eef773f7a058b5ec162b1929e594242618c58462c23d611107f592cc45f16d15f9693bf2c56d1b3b36297f5f37c599715f47c5997459758d12556ab2f77b55a89795e8d89b28ab28ab2baabbb92e1ef4a6845b42a7af655ecae7e9eefeaae829eefeaaec8d090a1a1a1497aa619f31c8b85a1403446cf40341488e6e8d25c9a1afed240f94b43f4fc97a6e8d96962ecf1d2fc3c5f9a4b13f47c692e0d1c31081c65bad8ab3a7a56a9c43cabc620a990545289bf2a2e7f555cfc5535f15745a42a7a76558c3d5ed5cff3553979f6028f20c6b061c715afab0a7abeaaab9a38484d1ca45248a9a4e7d418a32f4661ba1ccda394d1f3518acb4da1f1377553a954d1b3a76237f5f37c533715f47c53375585ca0c95999999993b5365a6cacccc115094999999a269046a1a8142a150173583503308755147405150480cfd45a18a66133b9b586bc33c8b79b65c9e7fecb575fcb5d72241f4d7daa267b731f678edcff3b5d7063d5f7b2d1c27384ea7d349ccf3694c9ffad427c9c6dfd33dadf1f724f47c227a3e153dfb29c61eefe9e7f99eee29e8f99eee694b0cb2a58cc96412f3ecd734868ba94d6d3a028a623afa6b227afe6b2a72c273c2f3bca4676f8a37c513f2843c21ef7ad7e31afe7a48bcf1d7f38a9edd8bb1c7ebfd3c5fef7a41cfd7bb5e95e7265d37e93aa4e7a4effae727ccb393cee8d949d74ebadb8df1b7eb90a0e36fd7153d7b17638fb7fb79bedded829e6f773b343834388e4b7ae68eb8230e8943e290b8a319fe723289bfdce58438a2672ec61e2ff7f37cb9cb053d5fee724ca5c4544aa552955295125189a8744b4739fc2d4529ddf0b74434f3b754f47c4bb714c4396c9cc3b66d7763a08d81360eda3868e3a0ed08077f371afcdda4fcddb6ade8d9b7187bbcdbcff3ddee16f47cb7bbe51183e451e6b97ea955cc731dc339d26f1d634cedc23afcadccc3df7aeb127f2b91cf0b5eb7c6d8e3ad3fcfb7de1af47cebad38d070a069ac196946da9176a41d6960fcd5cafcd56ef8ab695ad1b36b31f678b59fe7ab5d2de8f96a575b220659a24c96253d67639ea3645fb23055b22a5995ec888ebf191937cbb2187bbcd9cff3cd6e16f47cb39b5579062206914094e942294d7aa64e287bbc14a88cbf34ca127fa91025a245cf4e63ecf1d29fe74b2f0d7abef45217c42064cacc39c53ccf315c3e76742750117fa7117fe7167f27d1f3df59f4ec33c61eeffc79bef3cea0e73befac628218048e325d5e0da6d96f8f69a18d6e73e9ee82ff76118cc960e1cb4897c73c7b94441c46036cc4e5f9f211901844fa95641e88bc0c148585caf8cb445cf4ec1c638f31b214f372cc4b96ee8238028d41a4d3971eaf8cb1c72b839eaf74f2ecf1ca2acffc5716051dfd9544570a0d310f3804ccb636cfd730c4d002f30d2fb33cbb09bcc30e0166ffd8e3f567d7618f2a32f666555eba2a0f8b858c1a6cc0cfdc715c99eb08a999c76b3fdb82e5359f9a5b0fa6d5ea270f56a5c983653d355ad84b935e7acd959930eca5605efaea0b7b6917168ba73e29a5d47528a55cf48087cf807ce69e07cbbed86bde7930cd83d11e1a1f6c4dcc5e1a7be9df1ef652202fb8f89ef96efbdd40af761d21b5db8b1f3e43c0675ef260598d9b07a33d13e94e242dba45f8abeaa206e0b7d7c6d2450ebe5dfb6ca566a8e4abd72a9ba064aa66200000007315002028140c898522b15818269258fc140010819442645e1d09e42c0b52c818620851040000004064004486682b0037bcbfbb221760e15b8ee8a77bd05892fdf50a3f8815e7873e981443f4b80e312c6e156547cf93fd633c1c522063190b95cc4448a4af6b4ae6807b87561413cda0c817ddc3e5c5f549d3e37def5291b8ffc2e0b1c3164cafe5476da5f9b21825f3818b16155708f7a506669c12fe21a87b63d211461935bf94d78808fdbb6e61d09b1e2276fa15c8cdae0b575195e4ef36d25171214cf0d74df6377ee95e946b2e6af66104bd362b3152dd8f69973f7388bc93e065996823dd5dc76858180536bd950bb2360d75bc41877f4a66779b62b544e1dd6387551456497e55a09e5148cb2442ae3662b97d8a5cdc14f1b633c69ad4dfd8e14a8b9193b436ba20d94be37aec7d306fce8d2f492b7dafd97514ee051b314d4eaad87e418c197f47861918bc1fb8faddc5e082d4702d80554dac52194525d8847bec53afd9b2cfeb02237019b0287d5882478cb227a7562b79ccc7aadce81d90a343af59c7c992bc52af109b14363a9057534c29d594571befd1afed68419c15a027d23bba7a604e9a8dc5e911baf8138c71b778411b836dd8ead9674d2345d4d275abe5f286d9a830bf1306db69cc0d3d4ab88d1252cc6423171593edf91b1cd4320a69f8a124716bc9e2b89a8a854356c8f8e3c8f11cce10fad16d598772a959753f6cef8c10385ba3c23c1eeb2077888b450b67e4572f6ead5466b491da7556a092ad0e40e88c924addcfd1d9d9a3ed3c4697be0a9bdac1ea3c8606766e6eb1a443c2264a2662258d720a3155187879beb69fdb0821348872b742d4ac79d139c2d8196285f851fb9e765c2b200fd086cd7561aaacdda357fb4934e48fe6859992b4d4239ad6b64fc009f373a8948b5a58c0782f855417cc5c3faa0de1b60b551b3a43f8988b774a2dcc15d17a55f46c01b52ab7b5b614fd2613bb199dd24074f7c96cf158c20d56f682ddaba40df07ac9002e0bfb85377ac5f3be82b63c06f01c6f9290306c1a882a6f9c98c020ad1cc70c36b8d9370848aa871d1f74fc4c4918c53065c86819f52cb4a6cb3e508ea6ed9c09fb6414eac519fb303a0f70f2ddfc26a8b32ed5fe5bd353e7d15e0c7c6cd4dee6b53786eef4b6c6074540bac8977849078a59ab9485cb7c284f46475a069509fec0ba930e63ad6be21233a794d5d04674608696af7cb239a3b3458b5df0f1aada131266de0c804739926754ab17b9413d3b03291166fe9f6133b6cb5439d860a0756432f237e5ea94ae5ebe66e463e47d97c9dfbbb5fbaf52044d8328ec5bd8fcba30e6d390402f7e613a472b913bb9a24979a0b56b0dc09c4df8a07033df1a60ae8303a1390644d0595ccaba7ebe0d3657f48101a6a6dc71b25c15c04aa52f8585d5acc29db665907a89e47e53e52d570db7e83848c6ebc87bdce96f954c57adaa2f8972288eaca72cf00fe17eaac4ec5eadc07594f0067f3b911ae9910f6be783bcabe0fd878b753f01808760bad394dca4f6fca880dc4caf2e931f9134e51c0eaef24613af7f950e11b97168867d1a486584da510607a019ceec053f82bfa5772908c0dc19c9c28f2f671ada3089f364deb2e2893229f59119afbc8a93980819ff3fa555ac51287fa7e141f0770b3d5cf264244cb4dc8834659d27fe1257b140bfa5a44233ecc27626ebdf2d9ad98d64ef6d7737c93144a9a1aedb5c96658a6dfe96df81c6989279a852cb7850a235f80e7827bae6ef21787c9ef10cce3605f6c61f22b98970220ec6718a71df191a1b564447d1a3e197b3cd858b080b51b5ab431bad4c22d8f34472f84ad06414e95da76f70733c13187fbf1178ebd840a36bdc74c99d3178e807c9f981a44404f8109cc1c57f1eb6fc93e61fe57a71b11541ef6b034cb705cbe0ac306548318001d0b155e33011406d4c450efdb0705fcacdfa1f008db9210228801e1bcc5ad01619eeee78e644c402d8329cc2bab0f7547c62bf22844247af0a353dfe79800be7e2ab3a854e9c24e1b90409f9c57d850ee7ccb0a4419c9eb42c2a702608b63713804e2548bb8af39b0e82f901e55338de3159844f610ed769dff25c9cf6c2c881dbfeed4af20883905d3f2b25b591e8f47a495f9ed97c024863f0e7e3ddb1aa88771cf8845e8e3e0aa79606683e4a40c3791741ad1b81799709f9bef0c4aa5b141380256bad146b117652999911426b2ca6cc6ea55a2f205ca759bea4dfc9c60d0929043ac07d372f324e72fb1e1cf0ac030f159d75a0c3db080555ebe48d31ad0506fcfb12419000edf89dea0aec3f807afb08e1c41a9388b168fdf15a7f6dfe6d5b7d43af9ae051552a9cd532969b526148e9600105070e1614c39398eb64fa9ff414f82a7dfafefe04ea1f9acfc0fa1e4797a26d24dec009edd64c9c70d40338377d767f138a717f47fa5904e39ea8239f1266acf129a4c9134b05ed0c128986d780ed03ab04c5f9cbb8e46589add2b0cf4d99676893438a5f43ef109d98acb6c9e30ff3897b7e9451de120e29c202288670c8092f460004d3c408ae76a132c61162a253f37b77c30904cb86787de7ba8ef9a3e3bcabe0ce4b0afbc3efd2d28fc1ff3d16031f43e9906e1dda7f5745768f4136571593d309433f554c35d018a3e55c8931527d42ba6610b20a06170517fe3a5f6e2ac7a35f748b7b260073bffa9eeebf749cba595187abf1fe767acf7572511eac8d7c43328acc4443d10e674a8be96ea600834b7412170de732dbd6819e7be841bc2715788f707290fbda4edbd533cb612fca0cc0c9683cce1089934013304f31fbc31a5d431b0382c4df39049f21967be7a8127232d4fa6ca1d464a867b748faf3c443ff669ac00c7d399ee5473440172cb2f8dac97bbb0edeb294bc7b60fcba1478427a703e380766cb1fc1a27761e5a5b5602eb7f94dc84fe47c75fbb2b77c34f95333d5ee2d21c94b73353f662a769dc415f1fec3987dbec9ee0e2380e01d02435a2a28594b28213b40c15a07faa0dc12b50e4f21af3ba74076abae3b2b5a60dfa32a813fe73cd716fe3000f7dc961d6f408443d84ce1704a2b7e8c7d2484fad5bb2fdae7cc43d843d0049587d060c294a13e224c7429c32549c4d8824464ac02df5427e7629ec073f3e31e19fdc7100fcd6d75c942d8ccb6cebec5dab92f1093b71cc65c8a0b6a640fbd6821ad2b3cb92a183ea6eccffe847d5cceded38e438af292eac8deb393fad09b751c7fd447f1ba9aafe94aa1a86a7e21164b8e5928531386610d1286d48877bc2b3605964bf73bf1208e712d1b9e1868aa43cd76a32c33abf2ee6ab5b3ceaa6895441332d354e74762894581bf8f64df6621a7cb4e15720064a3d8665ec84a5f5c36a07745d5ec2fbd350bee274d16e75873f0e8890a17984ab1b7bcf56c78d8e7f5295d059a14bf3b863384397d77d66c54f45ccc34450f9969c9990bb6658266d7fc40862726393c2509dff7f00299da8435a903ce2134c3fdb1a1c1d97252e9eb2f610e4fe7eb35e9302cff7c45415fd8aa1dbc4776a0512c193a3ac3999a2451ffaf0b1fe0248df31671b6096d433e86af8e88cef898e0f5f48d409c83d4f44df1fe483fef47e8e225872409d46a03ef172470082204248f84b5bfd8b87e4cb28ae04ead16bbd54e4f0a4821ec9bd47ff39fa13c8a3f4ae8b4cef1c497f2754d2cc502f2f59ada458a1552b348f1e2325fa4a859649b3de76878f1ccc15e7815abe163f7ea57b9c1ada4807e64c12c2bdc5849b3f1a7012b1665b9a7817d01b14331a3083b04e1b0ae32c222a81132caf85a4bfed6c18f575633df81fc4d8313d504d9fe93814fbd4324ba97bea85ca22b973163fb5dc0c1bb7f722b8aac83b2c909919e22858e09917881a7448244370a9c1215deb3a8153a1dca8fc7b6b20d2d4d94c2f871acab77536590a28f7ee48a43d0aecbdb8cd11066b631f6a4112d87dfa6d45368e5c78f31b471a2207c3f22ffa120511fb27344fc5c1ab1738a5d1f8d497c20c12a59f2d442da355f1bc7bcd8a29b91fd217aa39f876e5011cefb52f5c781a2908c5d92f7f9a1fca16e342e38c781ca9abb27b31f5a21ee9ed26a7f9e16cbe486923fcf21c7b9ff4c330c1e93c8a24d872cc68d6dce9aba9866521f347abc1131e4543b73dfd41f2b24126b0d2c0d086c3210ef62bbfbe07e2aff22a708c28431625a1f177c4e7ac29d6cc83082dbb45f29d4c9b1807a6b719015f43022655dd8cedbe0149d7b6436fcd08ca8ca045db06c1a51558ba18b6e818a0381e463023a638e869e00cf15c46a5c6ec23752fde9f448c4c424503b6fee4195cdbb74041b7a78239d13db8371f8d7980b6c0e188830e2a245289b85c4514316a1e644934a938e482a8e21fc14d8679d82a380b16d3fe31dce1506731de41440bf8bb032968b80076b3cf8e460d828794bd23c7522dc057d75ef6e30c048360b8be824ae597e3ada6014fd256d00c4c01a1468ccb2c209a65eb2c494482285ec6e8b29e909a0870fc8167ac962673813d0133a40b4aaf97f57099c998c48471cfe89625774ebb51a5883d3902f69bfe427505503fa047046c93728823859a7f43863a47d1b52af32a30f5a3b895aabb4369a49167275c572686430eb12bda3740f74390298a6e44fddf8b22b1be7fbf43f554f799f6345bb2509d245b0b9c59bd29576690492019383efafd46dd5f4482b69a142092d29116eab9def133d833b5189e6f6e4be3c382fc2b2bddd8872530f29eb15fc51f6e0da6e56489c178788888376030d0c2389ad16e25f66b56363bfe5f56aad479a2284f11c528e7f2ed7c60ea1e30baf34681eac7cc118df1663ba3dd5f387c27cee9b0a4bdf95cbf697c7ea97d0cccb037d8ae1541c1df43ebe4e89ed2d7d98e54433f3e9c899f0db4888ca048a9960306d64e694bf7b7d994a27bb84c2118a2d6b72f7a8942ae8a28095f0f2b02a68252a5a4eea1d5f421c8e83c94b8b80b8c2c8991fda1b7a266842723300851db47ccb718c4f9eafb4d6c393a4ee2ef508e5909bf47bed6e80dd33b5f885e8dd76bd428e01c81620f4758842f1eb14160cb6a26ccc8dc001caa3122141005f5f5fe7f854c042d1d647dce0489b9e5bf07d945cfc9648f508d460d5c64e5f941e1174208378500c18ece3ba428ab07f16e88a5488266eb6005c37d06e2572e0e1bee67c448882f5f444e7585e74b8dfb4f6886683c6011307666245b95ce628749113c40d819adc61a2476b507dc9a62443f20d15e4ba39bdc704b9a4140088a73d96e828ba696d965294195700c6bff5c99bd00be91e29968ab69414a5227b2e186a897c278446ef52ad51bf11402b73611a6bba6ee65dcd44dca0bdd1a071c0e29882da9023be641288220b427a2c2ce5e4bd873ec2c2a52661081867ec9fe0d2d829430c92f9c0fda89d4020e077a6fcbc9db7f5878f6f770904f3e78ab75987361eb04af62d30bf9c821af5b7e034eaa69d342a73c8580cb160224984a379f6c123d75696aae7ccd5d4cbfc8b97f2fc562b55fccdba3a940edf5602c0e8b772467363fefff55f602bf582ae2a7ac9f97338ed44fdcfb16029a0a03669181c2ff4565466a242ecf223e5f144b7145e2df9622688b37e343ee8c40038b7664cbe34e180f0cacb89a19304a9289aa0ddbf500a938b32951f6b137c3a9c72896edaae8f0bf753ebf9bd0ca0c23e5f621462fe638c93acdd309ad44cb462bf4aa105a3424d99d859b47577b9baadc9a7f4e7ffb798ec5e21df509a55a3786d846f4719d9e8c3067bc2bb9ae46bfa673d121fca16c97d624359009e28c41d4c3aa21abbb6cca43ca4821fa4387f28427142f23ec5d0e61096097d5dffe84d9cfe2e803f635e801d80e2804e0b835e3e083d3b87d1c1223acf275f7ac3e42e01a2a8331f86db93a7f0f0a73ae14dd2da0242d43ab217613cd7f0c79cbffd50b5efe706129d3427565c76196b284e6da8dbedbd4d0f44187a5cb758e0c40088e7e6958cddeb2e707eb5f34199b3a53fdce07fe131bdd1fa3ff50fd93707c205c4c6c1e71064b1df184e0145f7cb82297251298e317dadd27f8b00023d3c41f025384106557ae3e517a514bd3ba0b201271b034f0a0238887d23898dee96c050ff0e5d5a0a0900491651dae1ecfc0c156be3d6e961e092c5d1a288da519c3cbc3a893e878994c68cc430a69744f4c6accd78f4d6229d2322401ba4a51d5538ebef57f5e557a1173a94fd4523fd4a21d5f5aac3edd12521fbed599bc894ea689ac59740108cba29628ba0bddd31f0c21d8c209ffa3f9e07918b210e3245fa2e01579fab605c539d533f8a12ec34b0336842ed45a2f8dead191505fcb1a049f8d3c9983c894c5b8b0c0373b767262ce448bc19e45c49f961f235dd3652ca4a6de81fb758fba2daea178e8cbffe87cca9c5d2f935e1b77f1744675c1723b79cea5605a16d1e4fc499a801320231715393de37eab9613cb1ae2dd5e030e5818e6eb32e4c2b19d677bfc1920f113042bb444701bf044159cd97980e8a08d85351d583d06159f6b02bd7f689aafcd2fb72cc98382f5d9fd49699f3b4230c934260d6629f473fa65d307f9eda841c2bb7b78ec90b5f126815bbe22c18e68173dff470c0a314237789f55de8d3995506f23b1e4a6fe83add9fca79713959c27c8424ff63faf3849d3c3c51be2e1de923fde2bac14d0bd5bef543ade8166306f1bad2667a78d54bd5a17e17c4dd94d2c3ea4f9e16611079166594451a7033280dcf26d2da99dc373c5a86bc1d3c537476edec5986d196ab17231e140a0a5c280a39c94b9e9b0d1a5f4d455e0e561cba512aa0e56e442d058ea03bca4100f8d998eda72ddc1fe3b42f6643445fefbba1097f57704bb5c24cf947b1e96b2afa87b76c286af37de16ed3743aaf15661730940be9641d03eda6ace20858e9f6e7e10688daced35f84da99131a4c95fa42177bf113261ab4ba5cde00e5ae328a0f0a7dc3e734ca5109689a9120241c126b9362004fa0f7c5016bd3409801a3b1bb0765b43f964f8ce2dcb8c7cb28c1bf64300c6b9af88f29515f1f8c914a8c62738a6f0e6a652ff73ad868873cdb96bbd4dd188e8c597e35cee4e17f7fec2d9338828fa467c975c64a6d0fda681f8f42779c6d1b65f01b23c4d7c001a6c8a9752c81e4eb9550064128c6464b7b23724911cb942746e12db5ab188f25a5afeec1aad4d651c135ab7aab71b0534a792199294ec18af700c3bc82bee52fae8dd6bfe35f78187ced3c15ce1c2e97933425a1511f4575d573057153b60a38e1fddfae641e5ef052ba13121291b763c5bbb7277617f6377679356a1602977c158926a4cbf5757449e917935c79e3550705ae08919b7801ae533ae1fba0492b2d413a53361141a99cfd4e03cfd22dafd2c7b9b9ab0b9f21dfe6d120bceecec7a20933391a35731b9ed396dde32493d31f78f774ef7a68d8d5a99d9cb1b6847cd2591ad74d03f1c2297f345055a46feb50a747016dc03b00f3ae33272c0144f9cb734c204fbe45e3bb4ff3e58b0f3f48f39fd8e51cf80710e2418bd1305c92bd45f19283056b391ff82a4ae7109654ed2141841cbf1d1e68545534a432e43e6bb876ae53f3d271d88071998fcdf27fd395821d3c0126c1e8113cbd2a53e7f661644418d182f42d26fed274373c8f9b7e779d429cf65ad65ef1025a1fd458583c0dcb2e71b52c717df5c716ad029a6281654517d9e62c41f7d8ee938ad1bb013c97d190c2429c6dd5e46e44bba1c12c183df44764b7d7e82a3d8eae3aa6d6f0b6ce99fb49cc176ca786a862ecdf28046e765b924b63c49e096ef48d6460745801e4dc7f58a394c092c0d0e619a04905cf8611688dde80f1ff974e00da2b0c4a590a74f4320fb8f9a3017aa4b3e4c006f0fdbd06c8ba42bd1109081a03ecc2a6fcb9b1023d04e2507f71a69c22159d037b992bfbf85bb91c7b311272e9a349597b7cdd58ffce4f215fc790546d05096e36f777a956536be0b964901643b1f26e0a7369df013729ffb04ca345ae55dcd99fafbd278adebb616de727f1eb274363172ea6c194ab0994c75598996d1e58116bb1308d78988dc781275b3a786f4c528155ab0436cb714f7c0cac76813564af76442cde89346c7d2197552ab95a09ad81e9d97acca25317d0fb3f7de6c36177ffa856c1ffa52001ef6baafb743fd5beff580e9e1d48e980b24df6b2278f7ac1489239fcb54cda2e2641ecafc2cbce2dbc60f7d762413b3688c4802c7da0b824879d6818ecb57b23b33d539095775c81ec9b1d8e4338d55eaebda91b001c5b10dd81cbc525714ebcc0a18686ece1d5024d41c55b16e6559bc30a90aee1b62588ec6f4fd9a50c903ff41e49e4a934152d41c54f36bfcf995e70a782b92739a2cd468442aef421dce400058e8bc7145cdbca975c1049069486e6d4d27432fa5cd6cea8cbc6a04c87c0d2b239635736a052ee82425e9dca061185050f1f44b5269b9c18269b6d00731237dadc4638a30d556e9ba992ac0e300bd4090b1a242361a7f146f8f0a2411f8e3ef73191dfc339272b30eae789ccd844355cb0598808949302fb8ced23e78c7998d89fcdc20fbfe88276485e30a4c4e5c71f13d10d8fff8dd443369746dfa9bb52da97f5069c787e64f8cb657352ab781814c58e37c4fc3ef63f588065534cda0c7c746f066c7cd9845e3416442de3b63a6d3d5ab55c3415f0b950ad7321933894db390de3c62a59f2a7b1e110e7f9557248c9a5fe14ff820d41d2c071094f92863c74387ac6a302865e8f9e4efafcd5b5ef3043776aa84ef9bc3354fb65af485cd490cbf34067a91eaa83bad6cb2bbbbd6e94da2cc409d819ddda9418f2137234af1f9be0508da7b4f9f0f02794859edff0c4a13e0e39e50511022d4b5ccd50b697826a2c8044ccfe9f0b5aa9312b2927cd05969c91ad246a0e4094674a54c069e197256cfea3dd3610b70736055d1b687f1bbf329c11102998cb06e9ad76f87386ff8c3426690747e5ea052d7e921004069cf403f65c905311a9860434cd60d62f3bcad9f2eeb4bdafb5b547c63a51802f1ebccf74c043ce1110900ca8889d7f540da7cb3a835dd5890a74fbb07924900e5eb480274d0571055fe2144c6841864abb1e159ddd2a88315a8d3b226485ebced309d900384289cd72753c1baa1ceedb5a6ece7da48632a7f3388c6bc34a8e8516128101f09828c0484a59d21be8d941c70d78229369ae063827b15c80f0a49656f3b38649ca138c532ee1fe6b4ec384381a0a86bd60cd98c1c26b7d22fea24e45220f9a8ec44a027f43bd066a18f4ce212d825cf5d78688b8c6950e382a4ad34843ddedca197669ace321093a22b3c6603d231972223bfc34987c829e27415b8acd419ea89831bc07313bd15b591982daa40911754868ca632eef6aa597aed138aeb1280cbed0147a5b5714fc3c44c43144ab7ae93e9138fdbe7ca6162ca6de320cfa5dd88a1a60174c7d162b7105cc7d11b1f253559b54204312c169e95e2079576ff651dce12ac4fed843d734f7f94348a0701e0720ebd3e8d6389ddee627fadf8d388f05dd04be98afb9f339ff3770b3f1723ed910d28108e0365d199fc79324691f37b97d0ad200760ea195dba35331e99566afa20a975a0c17fc6581eaa50b06ceac0c3ef3af95900bd5689d3a2cc2a117a3a036010e34678a951f23c77ac016f71e5b2e3a3e99eda3a45bbdab1b0e4d89063f9786c0a8bd76969111ae2a6aecc190f8d42320504c6425bfd9de27f0ef80ad69815b56b7fd0297815a9169311be57cbbb584b22e51e4eed5a124650f5b0f0d9fd0a4c94b9eec1e95e0991b6f9a3e8f2ca87e53e3e3af83ed8ceee599adee73243584961f7be3a9558f5f1ecd5425d64f048da298e0e69a1068c0f4fcc343d426aaa9b4405188646b387b652067a7a552180c4ca5188b01dcea52ac3daf4e7d2f5c41556f8fff8af3bd7ad98215c8c8a90b3179f4b7b02b0b345e5bb55a3129ffeefe8230bb975b7cf8e74a51d67e4f24b8fea8857771778472d6865c511bf12e102d35e493db0d81d8ec85389f470c8a76fd186eab1e744416b7aff85fd8c0d6415668c216be506d2841e45992e7eeeaf05fbd401d558b5d36a798ca29ce49e87b730aaaa0021d60a914eafd162a668232ab4cb9754e9340544dbe06842464676f14f71baceee558d42546b28918b96fdbfa02513a043549c22e9e0f381c79442e2d21978049490896e7975368e1edd09d477fcf589edd80f0154a54fbaa3c22467491f1e2b946b9b21a07f4deb06e65c95103c0643680fb9225a810c894ab30877a2cabe394246b06e434a09b20eb2bb7c8b891189be084be06fa3d7cf41536870ec583db44dbc24d3179265e69c98b05b79a75d72904e93ebd737ff0c5a0ee360ed4c6c674dd546a2b38aa858ddac17b575cb1c26f217ee1818ea7faed5539af91c24e9c3abedd48ec47ca87efcabc9ecdcfa7ba416e40707f61554d4a42d96c4c88aa11635b87de9a5b1bd633a85aef9463b2674606674785b28ec0714eaf37a847d3f2de42cc1ac85892dd62793b920b68033107b2595ab0541a3bac89752e28bf3bc128d0aa6a799ec0c20b787e39ec474f31d5a762032f9679ea138011d3f829aa1c11e121a5d7a610136fc620485de6f1e735f8776bdc7c3e1cebddb1e5dac3a9c4c5c615a8458ac16da438fbc978a8818ba2fd16378d46d42f70ebd2b0cce7686806b136f0b5ff33f89beb1374ab073f4256274fce7f9920b1d55196fc87d6133d8e8a3d6d1d057e7703b71a1c6a4516305d8a708bf5aed8063c4b7f47e8a243e237c95ea5c876689cdbaa90197e8d27d659e3647534889b3fd3f0448c1d2e0af463396ac3baa30fe105b7880b09d299cba073546ce0a9f1361d738c168667f607280483ae91448b44b61705fd257648d214448e9002cb5ab341a4cc35557a99dc6a69e938349154c3ed47ee3731768c3dc1ae08f80e277b67ec65dfef6c5197fdd8ef14c85bf69043b92f5ee4aa569bb9b7cfd9f9ae26a2ba39ce33e4813e081356189908537df9623387b4615f56da02b54a0d9381614838d294294a1a55ce8fd30d3b0cfe5e46c1112e6633cbc415997c751b070aab729d79228c3af0a29c882db093dbab76cd414e82a616f3fc0011eed2bfc2b09fbe6f0f5e9d532b1d65357cea19fdddfc130aa633b8b9daa88ceb53ca2d21b701119b73b5b7be3817119b47cd9332fc8e82ae830078362ed9f2b689b4b7d13a656cf128f21c5fe611d01ec00944cc1aeee4648c89876ca8ba7f38d1667fd81ee73988296496640ca13860041d7df1b2c2c6cd789db2a9e820d70cea5cf88759378762ea2bcaa30e3614fc71bd86119af9e53972638f363cf2aab97f63c5e951139a342f4f188db64e138fd7b5dc1a91a06dd2356f9a4efb05340f77cebb7cb61eaf47bf94b020642a5b3a240771e81b5a71b7bc86ec0dcb90377694449e6cc0370fa853ec13f0aab9e9423c47c1b5fdd6501afa175ae4381a7b858b2785a063fb8a62910ad875c47af91b566f5ec87dd574813f66f9eed98ea07c54704102e5bb2d33d3ecd8cc6bb1e8bea7c9679c73536b13d9fa58590ff440e971589a3f69ecbe683d1e6dfb7a68a903441127e1c3512d7f823edacad1e549a5e56cc921ab0072fed76cecabcec146bfb12ac762e0912dc92d8b298bfa12810671ae663d2bf2148d4492196d30669db5f64620ef0af09f3ce9b5b17c2863174da50a9a322fab02144be8570c4215e033765590c625f82a2e0dec58dbd1199b20b8f16249fd81049057fe06619e0bf46e74dea637283632d7a607d4343269d3bb730964501e79c21c69366353c6ecdc1f81d2265336bcfc8f9d806eac3d83c66a79eee23775d39f08bb55248ef3a7885a5b1944298dec09f0b6cc44f99b75c0d4d3cece24597683b124e4d08b9640e35305855af0b3960b9c4d2f4b75c107de91a6a0e0313b68dccbff576c94e6dd53fade630f80fcfbdd04af5723afd225b1b0c56438cf5b969ac0ecc9f76c8c5d3a67486651ff891e341b45aadb1ba85b2fb86ad681f30467d764a77d9d8fb352a58db28f057ff5fe994f5a491e8f190827e1e7110a39de2cdcfbb5e947c0a444b91476d9938633579cc0c7287b9de5b68150b0a15a8a91c51641e1843d9f19a11ca983d3efc783e5b88e35e84aeadcce532a805f4e6e1e183e2c25dc83f6a079fdeb6ebd0a206b182a8fb96509b42ab4c06d029e6f3c82622562c14cdbaadfc01654366e5aa906dcc6344bcfa1278bb9c3fc0166d07915fa1d44c640255c3f82bb831ec88ba97810e1c3ea69459f8facd3c135dcfec9c2c69b101ed0c4a35f6b06060ad4a9f65611d5d8bc624a50e9623cbe3ba21147a59e1a322ec6e1618f63dbf7ed47d1d46c30a767d08c90582a8fb3d26f401283811d86ce92ba294ef75035aa16574ed8e07671e993e4d9eb190d9c9103241870e2b88026c8b422e9d55177ed7432214354c280f2ef1430b4c0be7b5a02631bb6b10c43112658377a26281f450c8fb6720f5a58f2e9b82b74161c993551419e922f5fba9f2597abe97c247010af7afa5993280303f9690f8da896d97e943de21fe0cf37dd357480efe323a7978b35f56fd0dc277cf868f41e9d5958186a22860e01a35eca5c40c4ba414cda21cbcd832dc9e99ed38366cf6c5b6a19962b9adc3b3c978ebc448782d8b56420d824b512de0fc034c551c504706cb78dc03ce2d20f85492f4021e7f7120414da2cdda9735ca70e3973e6e32001644540bf530bfe7fa9175621c0eb1ba626bf0c65ce475be08b7f63913c050bcc513fb3b9ec21a3a128719dc38d42dff04ef104540ff11eb4dd588aba9f93cb7059a4e9b44e5f1739e1738651d499dfbd8c00ca4bf3d7a95840264100f8a1292a2c076feca89f09cf752ae2ccecc15de2d3590da83cc1912ec1f4a24e593e25cb9b9a54cbc56353a8b8e316ca1d443e0ad42daf4ca6c80c0b27ba3424c917bf57c7faf50f533f5ac8f9f6d5d939c6a1bebaeb2448e88eac3bebad4c68718b1a2edce3c615ee0625ddf0a799428efb8f298e807af5af535f5d751eae754b9fc6087d6b3d34d2b47df7de678ffdf72d4875bdd139d6ffdca2900fd7ab4368d9a592d6dd450a6fff04f132cb265bd932232477938bde187b6afc0ccaf43df6db6feffdfb2c54efbe78b66eca00f3f7ee4b99620f6ce6be134dff11b7bad6af73286f080428a52f6d94cc3e768ca70a8138857570f74a3ddd2c232f4db47d5975c65a53d45592335c8e20b6e60c795939a4b2156969ebb779b2ea1bcc2b97e41ca07380e925be27c5a9bf94f98e5d63de4b6f39c5c2ee310c0c15dbdcd41d5220f816c02ed453f15ed4db2226f87c114e5d738001e06b41b51d93b34f5a484a6a20952264272a7057d58baa17b24686548041db48f1ccf43043bfe7e858a685a955a56731f76c0533ffd1bbc46b0ef8803e290f257d0a481c1a3f7260d0b84d4bc68f2f369aa53d94330e86f822312489230b837be3a20c3c68b63305d72c6c3246ac90489958452dad496aea2a655b8071cf3f9a11af0e16f5b808da787a457c949505f65c5a4438a41bc2456eb09ff133b4345ecedb93ec0b20edeace0cddb46da75430ca7969d4120cde9d1d2be3f825058b23a9649a837d1b78a2a87d3049cd02cdce7ffd29fe4c2aeb3ac8ceaefe7787d48749f4f009fc09ceec796c9f83d2442b62142300dd3b7f0418ae128216913e3aee94bd37390234cf963b44cf30c6c8ad46427bcad7e650591f21f526ea98ded5b5f32ad9d42604b408cb66ff3adcbb73c84e60af6148094649701163f116943b48b4bbb18a8ff65c7a89afae902fe47cc1c0410d092dbff3da144197b221115f21a06f710aa31af01948349fe66fc80572bb55858f65c8c9dc22f5d6b8e1dcec7a4dd0d7155c56baa2ecaa32482fad3c4d48b85bd071b998fd52c02bf46d75ae4b0add770eac562288d5e65341b0bc627e4fd15a37b248f64b3483deaf1b9cb6df527bdc8a3d6f2c6ddf25ec15dc90d35be02dc5be91341135b1a41d3390ce26a95f9798152b320a44b22be9e74b9ae95b27edf82a581c2582bd153a24322815f981b85c717e4b3504cb10e106be2ebe798936f56dbaf5ef29e8ed8a967b4ad7979b1a8f6cc7bc08b16711c3f1d30b40394b44676517d8b493f5c64e182284a851b3004bda3f226816e0e01d007d98b2f81f051835e3943f02baca8f02d484dc33030715103d75920449e50bba4c7939e62c48905495a2a64685165344c07445742aa295ec049f1221d1d086869d185bb21587d8770c249b1adafafc76bf3f992003fb97825eb791f36c2ff7acb4ab5e672e33ae041ce7011a26297312beee9399e5a5351c3a76866d65dc3f92d7e73e81575e512dcdd3b789b4eb36264edaf568d69ad1ecbb983446f1a152b1e63437006189cf70c8fb9a48d209cc6a9ab09beb80ffd1715e26549a9328c802939650ef5caa316ef2e88b6968b814ea8e69a53e5308993a22a7c8f5504743a3606a05669dd14dfa7a4fa2018e975661302f02a986fcb3c084fa65bb4cead3362d1390cf6362b5546d3d67e1cef1f1a284a0ccc05dd4cbaaf80caa243d7cbcc30a6773da0c2822f9385a9b6eda6b64f54e8e006a3cfffbce1114122c61b61939610a59f59233d796bc572b955ca363340b53f3b548b55d105d02e2841b4e38e3764f41f0f10c45b7e4b621e449534a4fff92082b38d8e21c88cd9e963cd0ff12ed1ba88dcf172c90e2e67b6f04681a672c805f4082e140bc48993e2a9779b8ef8c5f4f0bf8ce98b3d7641af25ef887678882518e52ef83a94ad7983f5cf24b3d11b35426ba9e99cca4f92e8abdbe16e0747480092cdd6a66e21d90625acd307d206c2fceb60f18cea48750fb4cd99ae29d9bc778e971f3593247cd5980d30f9e2615eb3f713fa02537a33ee242a24c0752eb4ee8d5468f9a07aeeb5ca09fdf0d2513d30f49313d1211658f3d653eeb368da6b26526521e816a3d429a6cf005b750ece6d0d8c13667e0d2208e8d509c4d3a6445c09df9aec7c9baeed5238d5f7b86d62cd8274946e8fafade312edb94fa96dbbd34741ec361655798ffbdc241a47f927d93005b4bf18272e3bebf6af7357876d140a5da48b991ad3772ca2039607945c2bec8e8851dd9b38b0b5c1f4e8b754f88bffeb31b7411ce6357ad57ce821a717d24e2196e1dae0b33374b7a98fad020026abd08e5b03c0fc6d2532733d6fc922d3f84f10d3922919d9821ee190475091c12286d9db73fb0a88ccb10c304f6fa0beca94b44b522fc31ae89816bfacd09fcf1b9857e5107afb3e8be9d413ec9ab0911572e4d6e4abfc05be86daf3ce7e794b78aa7638822ea110e11567c63cad40ab9ac51b876f60e1b6b34d786d601967e3a2bafa31a4864602390240cb7ff591caa8a417995f5e8538969b32fb282dcf835446f38acb84447d8cd4ef37b7a72739b6bf619f7069e134390d4e6381048176099c72d66b43522004e0f0c59c58b53d757199d8c4431552d9ee15895d8db279e9ef50259b1253c3a99ec5818d9563a10893eac960de9072e8569ab35d5844198d05be9fab0e901fb31dbfc00fc1e68d308bd392060ab2e0529d898d29befb5c002e7d68cd7f16096e01925abad2777ee39255a01296ed951f6a52817576de0baadb980c5607709a5341599a6dcd5c0a20f4e2f453d036c444349f56e050ebb01227e3aebf89518d3b3045eaa5007ce607c21235962a0f8f1f759458079265b985ac1c89dd1ecfa7e5a0592f88693cbe913e2793e6d675d283f148e67f689cbb3db4fe75927bd23e53e440668fbd52771a120b0886e20d83f7a51ffe1c0c779b9ea45afe4445931c32b1a664d1ae24b5dbc91d0439e156f69eeede45d5fb40474509f6d170575ac7f68980646bcf82e4df845a2104661398b4e8b6215cc505c34b0526db0e9d5a0c87bf8ade8674dde0fd19cf382e13cf9fc764a087d991a00b32b91de6934536a770b549386f6cc6f01b9f24080331558394f004813ab884d70d016179d5580e2185d5f0e88246f8da541caf3bdcdabd22db17ac3a9e6d42edaa4a5b11123c8f0ca0ae1dec5274ee1a3bfc02cdb86d7b036075eff260281bd2cd2db744281ffeebd6cd48b2488c21c46547515934e69a2c7dcf59c5f66537c168c200ebe5ab951e0ee2bb9603253fba47ae9c097ed6b177fba8cc8be903f99659860f00d2a38f292f038888deae9e748012ea9c988f444d11fd0f8f6c7a9a5cff1fecfa339cb2bdc1f2e2d820be0a657fd38a069b1f501e8039585b374b5eb749cb1aaa3aea52f3257b596916c4647a4ad9bdd93e8ca90110b9d3d7e5989bb5b7a0d6ee14b3a4769ab5cce1686da22d933eff95988cc8f024c25ddb9481cd1d6438fc2086309650df34e41f494405d569eed54ae68bdae870ba1bd90fb1872ced9320b4ccce8ac28ea1feb65e575fea30df57396d44f79c1a38454061283af78ef393a26883869edea806d56589be425d84275174214d662494927a27361cc77c8b01688f07a33889d759d7b67b59f1f1e2b33f2c46a7b9b3456cb85ac521e0bfced33a084fbe9c27b138ad2f9a745c91c5b62cb1e2531300a6b5fd6e592522f33db626fd03500b216cc746607a33e778b1a763087193e3670d1ebab675f3f919d35282662d9bc22a26c463e07e7aa78412ca9e7405b9ffb2e7e3cb5aa5060b70b8a16f5a375a9f1d72bcd6476115f9f8d55fd34af65266fb62cfd3fbca54b7df1f32eeb045a4ccd39b3e245b8b92dbd883717b867153f22b3aa1f18d35b935ca190fc40e6572a0d5a6e04390b73590b1834eb1660b8eebebc594109a0f0e77378b47f70604fb5d1030b797c3b57563d234732eb19e0ff6373531a896586e9040fda5bd97c50b0ef59e858aabcc6b0d3cb217672ebea02e4e6d6e1346eb9e64b0b4964dd3a8e10fa9fc8c49f5e8a4b61b7f5ae938d1d6e30c7e6068ab3f9dad9d4254eb43d86500f8cc0af9504a36f8d585e8d08461d002a85c900d32a2740c89034583471a7f25fc2841dfbe1a6837eafb8446947b51763044523dc13a2b6b2b95c3fddcb147b1438a20377e9d1c44b07e82d92031101b6835aee2366f1f74906184151557aaa7343a78be88dd25db8644a6f16c37d48cce5b5bca106cc1b93b6dbe7966ea4105fb5f9c4fbfa846c8499b54f815468ee61193a49647bb162d59dd2c9484fe6c22b29dfa33d1c233dee1caf028dccd1d8cab8eeb5f181e5abb6d4a16194265e3c3e7f5f5dc2a724f16cc6df153e447040ada5620f2a3008c1f824823644b562e38ca4052f714fd343729398ae9080de5b423180c9eeef9b4cd63c6430b28e05cdbeb77ae743a34d1ac4b4d271681331847a05747be8d652aab0324fc726c137be1c25d5eb44225f14925a931b3f204fef7293d1c4a77f97142cb4dabe71e723f8a0d1f20717dfd3502b43c5060ee19f2a72699ff52828d67082fad83c9f1ad612c433f47e2e1210afa4a84c10b2322e4f66a0ef994e7ed1da4764ca509326cf1de232ca88aa089b0f6812379fa6f72c21f119bdf4061a0978daca2da6c79cbca009fb8576a622165b2449684a92ed657240011f8dfab007d6246eb4eeae98345da72847e82351dc79f4726eb0712778a9dcba857e394ef61d01ddb640e5ccb4d6afd23af42a3670f9a15a77ef1ee3e2afaffa8fa37e27b0ca260ce07e64b6cd46491437673dbe162974728aa1ba25405828683e3bcc33b442d3f61b55f441a5b3c884506d996370caa5c29e9203b411d6548db4e9b6e2f09be7909261127d2c5e51552454f8e3ae587e0ea00c462ef0479b7710533b0c177126729b17dc101f2e6a9546cc43142997038d5bc0742ca8f45829d9227964721958812ae003b2bf4c4eb44da95eec49d725bb9fc6f35b4f60e244f8a24c7ae2b470aff2094295d1ea2052b666dadee29bda7bb9aaa8555f9360750b5ac1020bf0bcf3a776b13aaf74c2043ce8d0566c669669b564ca9996232dfe8c295a5bb52a558356cdc1173329b17314e5509672664026df0af4e01e7be29c8d0f3b86a413cc3e31c7b17ad31d9e870039561f8df9b4e44ea8bb1a311b84aadf39ae2676a6fcc938cf47584f15773ed33633c131651461ef7e0e880c9d40aa518b9343dda4df36247b8985019e7232abe169f0c3bccc97408462b664e68cbe15fee9955d4f332b88fb565b67f86ec98a057a35e1e130abc2f4e2270f233a8cf61769fa43ca4cb41ee7683a1107696fa829e824a76c17d0a21f18bb97b19bca6030043133fe7845e18ff7a3b2736e360f28c2825322c79b6b7f07ec0b9913a5a53a783d703fa197b7f079b15c0393beb5fa3458417682f5ea4e8754527dde8bb0a6f793dc0cf67f8d2cea9d1e9f14096de00b4274bd944abd4296eedf65c672e51ea635ca3b15fad0b8afa3e159556fcc08e4511e46ce44570834b80b9159612fe489f20843f3d5f7d97e8cc4f933edcaa20652d3db38d55f917c6485df0589c4d8b2e93b93b6b8dd0377ce2aec07b778ee32d1669db6e4839c2174e858e1b414de55f5e6304a87f5b951e3f5a41b09d1008341c035e813348ef2124d09bd8672b831abcdb2123e8402f6ad31f35dc3e43cec7798167de5b3df34ccc970680686803ecbdede752abeb7cce68f996e101b9611360ccb45792f5cf68fe7130edbf6589548e0ff668ba4bd599c43f7940d58dd4942c05835b787057327d951dbf732ec89811d0421845e91d03c3cac5b48d3b0818833c70bebed02c2f7b09fff7069613e96602caaff508ba3a13733cf30f8ce6857da633b8cffe25323dadcad7a784dac7df14ae73a185e677281f2095386f67a673f5d98b3cdfc757d2a9f9fe2ca9e0bed972e2f4b968b646d0a4cb87acef6ebd28664e1d6c1754c7b45d13a14f286ab5dabdb500b63ec3200125e7841ada9c1218d8561163257625f2dd1ae78ec5eea621cf273c65f9a9b352531e78157628c0891329edc9ff6fcc5c7a477a589abf864a6abd2a3c0a4dda120333178494e5b422137c92248dfd7e52e69aea67ae1cdc78e21499ab638dde3ffacc469074bfafa881ffc59ea67c5f71de61285e9ad72c6773c0f23945bbf90d0f32a9792d6de132597f07bb8c43679243acb3991ae57c9fe962eb81925378898e7a47a140644b9fd89c14cd9e84b9fa290658711ba52c0f6754d6c84f57e85fd75466aa4c3e4b396fab3c5d06bdc238922afd78703e36884a4aba7a572d665498e6fb324ac32597a464a5bf81d64f7f3ea0fa8e67cba0a8d06434154e6a8b95373f8fb203b8af296f19860f2260e13bad5fd336b95b041711a3c27c0710afa738a2af08963956c2802532a3ecb9d30523a78bf162bb664a613d58782d9fcd295321c76abfdb27df85cbbf33ebe52ba17f0784a8e165748edfe8c729c5f65015e7e4a102b9b529bbbcd6bcddd10ca900204e629e72e3823c55ca02e5288cc85d1d082058669281fe9ae392fa947f5f627e01f6efe715309e3b5632bc968509107cabcf1e3917a43257138d2e5ccedf129b8ac51e98b6ea47b971ef37b46913144136520296a5caca7e7948b1ee789c94225e18cbdf17385a798cb9d85b70b149f5efc0699bcd6bf52c8e78d4ddf4c963262cb5be48c04b0cf2459a628e9ee6ad8e549391684e62899de3311272ea9cc3ebb57ebb4b94167be4aecdd3032bf5c8ed5a4c20324a505cf6c8d2f6eb97eb714d9e727d3e9e0ca41bbc09d872c667b5e410aa47c86fb59179b04cb8e1edaa0a579c6612a128610620c12fe8f1134628a001a85575f0d2b9759d907d44bd526bd2d5435666afda72983a23352cf74de608ecb3c929fbe38f700c5f0b36d38233e0daa841a890f99c3795e2439a00e5bada09150ca24e39e780489506d51820f6b45abd6b9f1520c412cce5410f9253bea32c5e8a75e255b23e93ec78a6379894d158f84224033a4c9182a12550e95e29c1d8355a2546b6a0541ed184d147a242009c4229ba922e9581133ee34d74d49ec31241113e946210e9ae6ee75fb84badb9a7363d95325b9af7cbb91e6127524773d6bc2cc2aabec38cc302e425223113768b3eba19e753318cc3004c7db05e8631c9fde2404909ff450224fabcf4b87483930b3c5f502a36a91ace076aeb53406a65ed4ab90c8678b4608a3a9d09411359e726d6e1cab0c3469ca59ad99011491829e815b3e4c2efdc2e3c110b470dbbd33151b4674eca17310eefd92d6ca69d7d5de9bd0edd6a83d00e87f9a3de053bcfd34a39f3549e0924f09eeb403ea4487d51abbfdd330dc08ac9a3d21ba6bd22d2700aff84f995a86739df09fbb5bcea4efe298490571d105e23703e9d3b3ac42cd9fd54ba1e43f82d4d8a30d099f525c5e0279154cc023dca139e57dbb6ac75103c83b44ccf5e1635e1878bdd1d8daae2ea331fe15c7d790839d773f8956ab57fa093124bc1227b7cadf18a3141574c81573f45ad4690463b8327bbe83a88467e84984a1000d7fcbaaaf19f2c6b1c73a56a3d64bce852f05f841b6e7df49969b88a3af77df13727f61154cac77febb962bf5f471646b0b65942cb3525c09425569104c1d51db0fb440230db29bbdfc5353087976b0a04aea59beb5893137d09ec615e37647edd18f983cb06a2412a34a64c5edfad7731a14fde40c09e3a9df3d0923b1bb9fba960edfbc203b17d9852c9056e6c835a6222f563a8689f00b5726b41a279fcded747493d98b0980ed264f900caf4db4a3d2cd49ad727f512184ce8bc10940f998a257af28c5a4bc305c549406c799c019689e071220cb22218010004f3b8fdb941b008a1b4029b93769e44312c9c7dc587f162514c8e74acb47538b679b25b2b3cca07e9577687dca2944a88bd20ee2e2a85709501c97d09a6a2a0b3a604647b54ab9b62bca51aab09c37fd59f709d2a9c178ca63827442f70e83d115fffc82a112b7eaedf5c62d5c2a3dba00a7627ddc4e66b65a3636a4bcf9f63f2955289fd8eb467d1f548f6c131dcf6865a90a4a71e9f41b39dcd39127a1b64bc31989f455888046c9fb57292a537748054b489ee6a8bf38107ddeda58208df0fb7bd9ffde5e7bb4aa5571270dbf452748f2bdbf94e3678df6dc7f2ec3e88a7386781437c99a8eaead4b7bb0d17360b4c21cfd19affdb18a80fb8309b11540a0d47b59f4f35e9889b54aac519a41fa48b757bdb2e113854edc3e9ef97fe762cd28ea12d4d82ce575c6075d8bfc65887eb0fea63edfea0d3a4786b3a45ae5623788c3bc0874841720ec160dd943231efad49edccd0559343c61520d5c210e034a748bf3ad0e7460206f5cce5777156ba0c12144e86ea082308964c4a082ba867177f2c2d7a9dba8eb30b28155b52e50c48061681d1853b31dbd75a566a02dc8a006a33b135b03e48581d03a3afd0f2410c5ff457d4b1ebf9d1cad5d720d2807b0194b1aeb0d8d16367d4124cea40353382271f936c2fb2627bcde92f41a4f7d6422765e15724dddff0e146f3089feaca262d76fad1ae6d9c77f0112460474acfad0fc91c418438c89280ac6020328f7b99eaf644805eb1afbbc477f84ad408fa6ab604ee29bbfad2e70d80f00b05ee0c29a43efb3e75264b2b4d6b25f67117f4c76be08caf8a38fd37b6acd2654ca161546b17eb5a7acdf5ec86af3b96da88b02643b9788261816599350e8b3ccad707eecab8c8e5beeb8933d4c81641c21af4a411b11d5d7874d473297246467ff2631cd6befe44026062c7e088b35158fb963d82eb088e99b0694ad01dfc6165a13e6022bf15c99ec0f9007293d2309533af54cfa1affcf8fa9e179889432d9b88fa2b5d74271a1b3482600650730aac818b6f1d491a4d4760333731acfa2be4aa98ecf948710abb9f31c628d82ef5c0410bf130c9007e1c9fe588dff496a4833a3401c7092676efcdc0123fb182a0702c02e7ef004df2272a3b8751fc0dd44207e6900363b786ace9e6d830673d0120c671c6dc170f685b289b521108fb4cfb091f53cc5fdcf9dda338824518de7536303f6d87801b3f69ba410bc79cba5d8ac19c71dec87a64994375b548716ddb492312f529b5b1d09308cad079f1ccec44722ca11625c156364268b9fd476917466fcbcf1fe3d1bf3fb7f585354ec920ff66a3c415557a8f8d91f5944995f2098e5d6570c85df00fbe26e02d54f0ac1bc86e0d2aecd04882fb8fce24671e16bee00dea7652ca3f31d696edf7f95c3da2c06d2e53e6350b131c1a67e2b875e34e423cd9c1d3cbb962bfcf4cae7ad845dcfb4c9de60ac0d6bb3259a51c3fe102a77acee675211c176e66b5a331bc50d85dba2149b44a773e387d9428831210fb46a254cd7e9a848292705319a179047f9f61d244cbb87ca5a85d6290436eb8709901e9103cb6465679d8e180d095477f8a33636c87b9771d6b12f24c5535b7f5e85666ff0c5af500381e20d52f42d501e64a54c621f3effcbc46a9b001696d21a4d814143bdd0544ff0a1928adc6fa9a0c0860649456a1512238d8ec787413162cf6a4668b943d6296579c410d6f91db319bbae7582080a2a72495f095b8b7a94d9c57306b05b7d95c3b700e7b809eb890179cbc9c3cf7b7c538a0e784e277791eee517d4224fcc68da5f8b5830c9935279ed252f6a1712a1d474544cb44340551daac605187974a483fed890027121726865d32de3e377ec1bc04a734e1c5a000a528ffd113c98941af18d07049ce636478ea2f5b3c1572eb2baa0508aa50293e2abd7d957892bf9d2ac2f8cf74ca8fca4dba7e002f7e2cb8802ec2ef4fad7ebd876476be0461c14cf5a7f9e9992aa3083e420b39ffd4030a2652f729937b911a1d1066b1facedc1e13a3c2b62064d9b046b678cf51a04806534bc16db2691205704b02961300604dba90a192d952772a4327e9e2e0ab4eef0e1c6a23c0c14243475479de658499e66759177980527e0114ac4517e6bfc931cacff7389d245060468075860b1a173fec4964cfa7217c80b3e7d4e6074c6bb064d7228d9d9f5de41c185495af30bc766c9bf8f26b6f09bd39fa9ef1b0c01d16406fb0b505efc299b98535ad46fc48b46375e4669b25d922bc41ada7e8d22ba0c28022ec0031e81b1ac194473499868a6b6e225cbc9940ae657803e4cb021b57486d4c89124335a9f3f4358e80905c222bfcf05cc37e280f294114bef5240dbc8f6804f5aef5b09b9211fa66f6047bef131a688cc3a5741507eac73214a33bdba901ef25a4dc516f05fc768a0052ea77e5df60660fffde4b4503ea3e17f14ff57cef00963a8f53a1f192254cff716e3942d47d417ebd8bc3599ffb11c860d8e41403f9b5c55ce896881867fb17858be454ac740f0559631e1b5f78d4ca91df3bf6926fbfa6f721032164fa4b388c9ae9539736dd51929f8ecc8a67ffd7910d21025c17bb63592907f20c727fb1eb2009c039beb2c22fd2536410b493c7d7c2517d59538730b9bc79dc9966d86108998d7d9432f53ba6aa79fd2d159f67b2900a7328d2188e1383f38441bb66d91e4c5304fa64620384163a595a8683c62c4a4bfa13be5da3a14e058d47c252fa3baad9f4d8bac693204359f8c415a07f00986d3c0e4c78b23cc05d57ea580cbd8d892b5c00cec2106003af599b11c19bec1a235905ba72f3193210dfe87d425ae60a19e5b2d08f5d92a09f9d5b0ba5c130b171403a12cc285828057926298c85332777452ceaa1de645dc28bc981d06e493863b89eabebd74a51e3328c787c03ba0a9534cda8a82b38f02299d30f8e03d512f13b03b205f270a0e453be3dc8403101dfa25ec4d3ffdd9accdf1d71700e9f42f8ab5844a8491242c19c46516ed156fd0ab7a19badd1f638251a9837e5c51870f3e6470433ac71bf5b3d6fa9516c221ae56342fb3c0dfb362b78a51b08bd518f3eeb4a2075835e6229dd9f3437071d7c7982bb1b9ede7b547455aeb82759ceaad0f6415c1cc3afaadd2f34826cfe8b78f20bd5d3ff76a51dc3718656cd07061b433d58dd5b061d1009a2a03f0dc2b521018b4737c946110f850c78fcaed2ff20dc1f983262242c5b83ca446bb7f811dfdd2f5333d15c31b7f8df888a8e3b9652a6820489098c5bc7f67b12e6ad196e8f9bf0fddeeedca7966220c0667ddbc150f82964446da433a0c09084aa32d7b76736156acb917dbbd7371eec00f4cedd03b4ab06956904edde81f0865d9297c287f1483e57d4ee23a69627ea4b99f303725bc0e6a6beec889b15f1f66915c1704a8a046c8b7843db46d7a49240b18a531ededcaa3298da40b3d4488583f6d608bdd4f2b07222d6da646176bd671334adfaab2ab20564e534db87122ada495f82753f81852d7b8a554a81920a7bdac56528940ff2781f64e32ae84fbe12963d809220e87ee16cf1e67e5954717d4bcdcf5fa15243e2c28dcc463241e07fdf3a8617323c59721f6030da20f637914797fa6aa3ea4c611feae54fbd7a5320f37c1f924139ad6de17507a1d41840128aa19db1dd10c2bf56ddfb10317cae6a3c27c841119cef5f655f01866ebec7170ad6ceb34bf147b143e528c958d9f77bd02303520ddef9d1a021da4cf08f10ba2b9fd6ce52dab3a94b86550e570edaf345f3b0c2f6a5b8016aac74e9d8e8948280922aecfa2b1e6d3e0d04231c69199e2483ea72fd51ae91c2ed99b2e051592ace68feeaa2e9416203f346ed90e6a66859f81b949be74b160d8ab7a8d7444fd9a8b23e90ad15b3abe7e5d31a8d53129acea480d16e87b51502925b810a6ef2a516a6ca599ef6e2a65b9a08eebe9c0e35f4db31a34fa998e1db380a92b596c9995f181336ce02c5e6bf5e6e84042c081ae76819179a10d7b44d3bb820752b7a18f3a55c2c25017ad739674a04107b13149e219310bae98c0fb1c9e1646caaf00096b7f0573941b9b1e59b90405aa7c3734cd3b856f8d19aa35b62e449ec2cfa1825b261fd550b12fff38c7ca7886721f0b2e5cfae945120e2e33f38024711d451d64ad9c8374a1be596c031bfa9325050a4c499333c522738b8a97e8c9116469e379695c25b23dc88969fe1f68d639ce95b58276fd3020345515c443c7400896434167ed00e251f091a04ff3f9d70f4c90f29cf0031ae23a693eefa6062d154bdadeec1a541024a24736b99bc4c9bc0c86a84421d754c1a6e75b15985d3fbe69a25924148ceb296597d9019ea21298d6b70aa2d4a35d265235b8154a9d042752114709e7ace909ed92fcf944c5d3616874f5ffcb45b0f2da7d2169b61ae527834922872995ef17923fbda4e3cf5039241518e2ddce17cfc62b16c59fa1da067f6767e0a2e5cfb2cff87091ec35db8adf8253db21b6afc31dfe4be43f26f5a6252639fd4d93733046ef23a8672768e7001ae0369590f48ae22d06dbc7e70920fc1e3e65398a66be7126dd0861b28a9985ae66322e67853bbb6a1f0ffb28d1d6f01c5fdc9e9d150b8f8a9942432fd080989d82b95c389f16010cf4b49041de04cdf32a669340a20e52852773f0b4638d8eb60d157cd050e36082ef68e3ff7d73f248bb549bdf6feb47826c7e818d91e277844127cd893893c9e3704e4fc875ff3b1ab9fcfd3194106dd39896d94d333a10795795f641172da850a20a29c94f3a7c04e3e24fdd873469da2c216b8d33e66375e0afba78b8bde9e4142e06bdc43c015767e9cefdf63e6b25d964493a316cc00023ad265c97702de456c95ef1c836429f3ed1795b7c6ac93b839218280c1324c92182546b24f8d205c52de5c3e7c12d0cca615734e5f7222abab5b1208e2d21bae8e1b836275364580a4fa2938eb2ce7e8553b9dfdaeb852bb25aa3844450d9a2adf291c21f8bb600cffc7d43f3f7f407848c265c1fe27969a5f34f16f86079fb4894e5bc1a305127faa07c0379c32c3836ba4df640f3ade41347c75b44c70b539c4e86cb98870b5fc2d4110473893781f964f1f45b9709c6140dffb80eb886402c9467a91ab2f64e20ede63bdd957b64454b248f830caa41a122ac00e1cbfe5c4a223dfc355185e45f327b3d6ff44d12f85a2e56045ce2b39cc2e01fa05c08fb9047b11ad45b8c5089a0c548ac81424c1748c292671864378f6808a1b976b93bcb22741fd70856c2526a0b2342b6990238a182a48d1d8f7527a36d2e2ea110ec25f5c532d481866703c3c39bd44be29f5af1513a8a430bc4c6713cc36f61414329e204aaf753c1e9365275ae03783c872dfabc5696d8d17a76071dc4c7ae9c9ccd8da5117254b28667ad683e193897d85b36239c680308aedef4963e1229317bbfd6716852081d817f6e708165981961550cef61110c22054aa76780ba0b370d091afbe99b23fd6e2383ec40aee0345df129aed5b84d8e44020cad9f639ae01528b88f30129de00be701075cb8cffba10787f709f34382856039714c261fa9baa5b5df0c4a9f0de464b90d2b51daaabe040fcd75524b5c333a6a5b5bf2ccecd1ec2bf50260dd62264b9c2aacd8a31b4da9e6b3bad6a4472afcb021582b6b3d95931504da67ba259da07f431def0c37bbe71a228d0808c7845223b53bd419c7a3c401d1152512119d1bc8c298c629f857b5081cad478707a93d0d54de1cb6065204ecff86cb15d043634d9166c11f4806fc0837ab18bec3af5e473f970a80a74c543eaad9401a56ed80d7ae8227dd1e6d614e2ea0add0d982855fc6d0e60cdd5688c1f2bfb4218ea3cdd1afab58f578f0feb46118a4b770925d09d27bedfd43e7338281b3cdcf04db72dad0cfa998451298d7773a47e586c53a72a4c6e771ddf76323326859432fc1b826624c8bfdcf55a05e41d8be60926d689aeea64f39d46c92e4c527d9a2885e777e48e867fd1e32510268496b836f4a4125717274e443d59a48e4d03f12c392ba08486796187ad5e16e0731908f00b4408dc362b15c7db0496721491ea98d6ced489621aea0479f098a908d0df0fec113bb6ae3e08f3048b7ded8079d224a6255afaf3ba00829d680146773b9ccb2e6047f6921c843f417a0c3894ec461d91d4ac6a81b101f7a8689ec299cfb2e0514785a614ebf71176996166a0a85cb6b16d97ff22b557e4d81863414d176a46f145d3f3d724d66b15818fefff58f552eb0ece339ec6d370089ee383e553a98d247a80982ff405baac71c8be181f4b14f1082c0809770cda609473431febaa3c4171df2279ab07ed6e0797eb12009bd956299b1d35e11e2d9905cd58beda028bf7cded96af4b378eea878aabf835dcc336b73ef39bd24bb36bb3af79617950c598c1f6f2bc1a5980f3c915a192e85a069f4b594f5a9c8a9a0c23cf22dbc26f0f821c8355e46bba67b5090ce7208aa9b65c68b80e416096e8034352a956ef8f50f1305c8d55d2a78ac31d1cabcaa645d480059c414e4dabf441350980fb0da3c59b3c9d9a70e2d4ce0546e13aac573cace094b30c972146a97303d8f2b9180ffbc3f463c291fef44cf2a7ad49f90289315d1331d6175f913619ecb734e2bac2cdeb917abf7d67b1824a6d033789831ef188b3ecb374cc0941347d09d084f4c7dbe28d2512c496e24b93d9bf15dd41dad59835557875ed6e0fdcca840e34a955f31eda61ce86e8a89a0fcdaf1918e48b0fa7a0f7bcb89e2701b5dcf53f4a007e347c7a0ab70e94f48bb8908260e5d8505933e37817d41215aab6265070bb6ec670a9e4df1ecf896ac7f3f40e3d220ed38b2c1dc484032ea026c2289782985807405ad35444711a2e2db0e1d44841c81e8ebe154d52772335bcd84644c4d54abd433ce626fa7bcf8f0f83344deb6845580799ab71819e1d468c93dff1d39ff91fd1b54927fe1a5544990116ff51aaa0638048da754e184d252691e0f6cacdd197d0619cbed04171a93405afd27ec4c64d0a2884b78aff37e8e94a30fd20d8df0df6811109b4b7bbb21f370ef85e9d431d9c5c1714e80194522ef4ea305276d875d57a6227063081abc325c3c3945e39c15ef7371d3f9badc87bf50944f974cfdec8d7010114433275095165e029791a36c8761db581a10a85938b5581d850e5441eea635160283b3496dc03aea85e7f885f34405539e79b215cf0c6995cc4854770286022e9b793852b90c6d910b46fe3961df45031c69eca0d6751ed93956c10afd8f678e376138f12406cba830615ec6b61e5260f975f857472c18a6b7d3f8d200cc8378ffa5be692b48c04ff1ae2f88b0fdec7f02894134fbf3d1a99da5bd6ef527aafb55dec5a1aab6394512fb647810a12220ab710b9059b340660c80854f02b6d402d58c0bf325450b9e1d170410b3c4996c85dfcd8277084d252613170a22acbf067d0921459a928f4adbf39ba88668ddcb2adaeda3c4450654bc5e06d41d128ca64c28c1cbbc284776d64035944d66871aa136b4e0b1c32c92c48b4762e77ff80a2037fcc0d07561ee2932a64404932691bf28124f000683935eb6dd50089ae75a3a6fd89061280f8171a3d01b7cc4805ccab09fa2a0a4ac037594be1556b829cb9213e73df82b510e6d51cabb9594e24a4af29e94fe9e94079f94a3b32601aa3c916b5281ce8f77304cc5561514182d6d70a603e1a246498e564344ba313e8a926964a497bc6709424228ff7b9b4d04dfd0095d4a4a74785d269b981ab91101071bd7c3cb6445ea8ef313b67d0b5cca7e9f9d0a6a88f782e27e4ede28f455e970a0e32ddc9d919f1ca8ab3e287285331a42bab3715e027b48b1184b8f1315a4f857b001e92c70def533abacc7182e2f0a489a531d3ae720f3f3e54f25d2d6aec9573f686567e17baaa54bc4c2df605787ee8a11b28c939a493aff888c0f885b83c7115f750cf3ef33ed349df78690f2b63e79766131c9caa72680de5c15ec3af1188ed97c694501f32290ad221177ed8df961bae732585657735eb2f183c7e489dbeb5c247de5a92d030278855536797f06dc18e5be4072b9340c1129160a3146fc0853e72a61dbda631439e1a5805186b6a3a7bdeb7e23dbcdfdb8d2291967e17e455dc7668300818862bab6983ac86a28d7aaffe28cf1f658dc2bdc82e701d52ee8fadbb10c26ddac2882602358f65b39880dd431ed2dce85bf5906cf1a5a76ad6fc89b50e947f336ef238084145c79285017b7795d59f06caaf2b71cce57ae43df265b64fe489751cb8d9e3fa14ffe9e8aba408ec27f2cc92beec07ab151b2dec728d61a6723206e1c271524bc0bb331397bd7cc1c02654275e58df7b93eb3c76171e760c26ba8b9a8aa3643e5330cca29b44a1f458591384d02fde238f9b477fc8db1f7ece0b4e5d1f13ee35a1de542c8ecc5a71d7c2655f9b32338a114803a46a4a3ef427826ff0a5ef578b0b955eb0ac12fb68e9455c25688640482ba6477d2815b43333795c4f206f0ab4e6c5a8c6a07ee1927f48e47305c90716e89a4103e615ab45e388012aa6148b131a2f544cd2a0dca5c49916c87f36f985cc38df8eb63fde5b207da39d219ea15985e79df47700c4c25ebe6f1fe0813b185c31d5d2ab8cb2ff2ef4cc820f137bec76aaec19a04248d305cd8cbc812338a736398ac2167d2493163ba9a3d6a99c4f3daab88a732280f6652446721f6d1f01466f2500717a5e98a5ddaaff5f45cedb1ee4372de8a88931c5d88ac8cc1797251d27408bf5427ab3e6a970c941289286d55208c4a2829db4d17bbfb08fb62e94852427d12858155952870c5a590c8c64ec3a614edbde5b06da7ab50609e40dee0c1cdcce9bda66e7dc2c09d44eac46821aa9be12ba6a8a264b86af9607e3135cb0c0953637867bc867dafe2094f26eab3861ad697d2431b590aef55f6416205f2ab8eda7b89f007fef2358bb832e15e41f5f2d6eed17ba8aa2b03b0b1c2ed4a5bf3d0406fd487d939e64160ccf7491d9602708daa95ef81a74d159bf7e2be290196355a1b65138f09f08f93fffe15127d449ec459782667d5dfc2a3127d841eac6f3991030d2f37aa568557be102a40b9929f7b616d179239710b5e3e6a15cfe5504f56b97ad4aa8e2c43135f18d3ca7715169de5c0a83fd21a51f920e0769f1565cee2a8da23281e87f8a827b9b111ca7f6634e02fe29b941eee48555cec036c5caf31aeb08141942eba845012f38f68e09d45cf5f420f7063b728b0316a8f2cf180c5288747b87fdbabdcc06bf85411b210420fedecf07c68aef9a8a3c819305c4f6bea2e2dc535a4833d53db01e0146d12d2d29d591369b9f365b7bfb3a1261c758ebc380f2934464011b32876b2f502574c369b316ddff5d4c3041599f9ec17b590c7cda23c2e7b1b32d390d9e713840c33e6484199ecdd87397f1468df008b9a0a44a24087128dd58fda47a86ecdf2648a27844085a0aa9b4ddd87b95ed0a26a176609e8d4c643878d9064695b225272a885361216c99bc8efc2314c7ae6b81f1100a5ea3622ff45500703a4d769bfc681b490e4f1129b6736a3370759f36036ef912acc1ff75e9343487af39eea01e670295cb91f811b0d4fc8408df2b36b112811e31c4a04ff083cd9f54f70b4d08765680f2a349c9b8255fbd28c9fd210a80030e34046ad5f0df0613876192488e9abe25a3e215184edb509aeb417e8861a7b5b803d45b5714a8e932109e090107a19f6b84c52bd5ee7124f5730621f5dbbaf59cdad2c6ef609b71494f30dcb051a255ac224c334b17fa6c23d980ee5e6ccc2878fdcd9b5060824014cb9839c82eae79676b7540db6978d24c91875b2ea4525a8cb1db6d1b698a9719164b50d8a67b7fd5338c5e0bf9440d93943b10905364da6a177424b1e4bf2a64b57347e82f6f36dc30f6f87dd45234d74cfe5d8e7d75db929152e52af1a97971c631eb822204c190e1b2473d1e1279ef905f3ea24b4683119d55cbfb05b1fbd219d6f7c0607660025d49657b576b6072b712137ab86b42d56979c50e0f0ce7104de6793c5c2941b5149c3788d383c857984013dd26be4f07d48598508010f3571e6fa85249be1409dfd83712d06c7adc7168ff9735edef93a2f5785453cfa2825e77593cfcb681972e37eb01aabd6ce0f08b86ce7a7f1871cef04adc9cd98e8f041cb4b27c46e08634293bcbf6abd19a518fc4ae34ece9910aa4b2902c5e50fad5540987e1438b23ac1fbf542153abb3c7b115360284c61a65423addd7212309fed157aff5ee60b4e134c79724dfe6b1ce65f9b9fe8d19b8b61bfb2b8aab41073c2a8eaf4ae0da61b7fc183d83ad6a89ffdfe1bf22554b2a4b7ca88b0bcc855b571dd1746564f47397084535390bb476a3e4a89c5b717055da6b4d8358c3cc29568e575e22bb154c3e8c68b4e8ccc54b2756748168ce468276d5be5729249e39200959e22683a4002efa16ea1127c5c1f94d8427f0a069a1dd220e993e71b01f290c158a35f4977349317d87640456d00049995225a5166c083a29b1e82b9b1a351c17cb991cf4b4cb1b4533c4e685f46048adf7578a7b56ecc573af6922992f5fedee44776dc5de2433f30e6cd25092ab06fa068d5002b66c7350ccee5e3e9c65a12757df2c61fa9f5c070089552fb9ce381bb230be6c473f93eed600f932085089a3959a330e86842bd416043dc8722e1459a8dc8814851a0a7f70ab0f40bb219b3cd21fe2243be78c81505a19e1eb29bbbfa2a796e950f40d52310c9a4ed07753ad3f5a087792b844f6ae58e58a69ae088fda449729ee8be8782d253d023bf33224bdb59a6f14f20b1a23c84e8e54ffc53dff11856df82ecd13e2a2d7af97482583035753ad63db64adb6f0a619a34c24e15ea1e44cbbbd9994f0465d25c690aa6742cc4d2648d3e15aa2cdf1db7b5a707e0caddba73bc458b08939c3217f7619e2b656eb390f56266522f791c46084d9cdb0388034283d01876f9db0743094b528cfb79c246c502ce998ced1ae4d9386d93ff91fe8b39abe3391abddc011bbd6742a7ebbede98d12641d97d53b3a1252f378ffca383896bd8ef54e46d651d8502d94446534bb3f11c32edca28b3f0567678906fdb2bedef962e31333dbf5e3f223f2ae73ad3aca55fa9eae15b1404b103dab5b28e58204eca9a0ef77d758b2ff18b95c9301b6226c50e577755d3dcca11918b194837272680accc4003457b4ae8d47fcf15f5af778f5cfb8c313d06e89c9e5394d1a8e06d670b6a799f2e4336f13ebeb4b677b72df7963225290381099c0896080edb02cf1e33cfaf41d93d2a44b97d84fa82a47279225a490298fd1b49be53b84c40eef76f58972adf8cd12140687009cbfdb139e2a61f15fce5fefeafd4cb37bf9567141a1e281a26ac3ca3d0c480c648a6ffd538a195a5628de1a2d812c515312a8a2899fe77a358e24561841527977946517191e98322c5426595a718453545a6223502cf28aa3139cf28aa2f993ed86a67326b50ad7ea3324539abdc0a1344b7295ae4727e992295cb393545eeea34d6465153a072ff371042610ffa3d68a66ec44767b59fe79cbd54cb2677248c16567cb136b2b6f6ad4c2ea465b4bbbb39dbe43e8ee338aebb24e195e7d747f20a43834b70ac8f5fefd34b82e9c71c09a89e0e7c35c5642f0cc2fe087c09e9e0259731a82e645428aa558f95a9afabe5dc8c0e3910615f80bba63a4607263078181f6e0237c172c2b4bbbba79a6fc64aa73fed9302ed0cbcbe2c1018193db3eb467af31a8e7b31ae3c5496e3a1387ea0b87132baa62298fcdea09f3e2d403fed9f4594ec2ea675d763b1bcdb711708c9f55c6eac86acbc051eab35061d3a3d3809eb03bffe4f1df30341da05bd80e1e7657a6b592815b6582d97c7c4181ab93b100617066534d64f2096d8377168d6bca7178773236e3ac9c6b0dcb7dbd431f14e5745dfcaf709b5dc7664f0703518f71adc8b71cf8785973ca5704289e965470134c030d8cb6434dad151fef1e2d623e355ff36b493e90df77093e1de9138d560fae5cbe8043c8d72470134e8eedbc7c4ed47860c4a1b806cf6e5ffcfa159e3beb991dee699dce56422cf241250c3f1dd6eacdbcdbbddeeedd6ddfa36d272d7c24d868cfcd1bf0ddd6ef4368b92dc603264d8ea3264345540eb6751ff7cbfd51efaac28a550ae7c1933d5b3e71c8340a0797e0f9a27486b74855bcdf43d80caf4a72c87a9dcd94cd2913149c424234a8ca894f93d6a9eb4a783e9a41ca1429526e4343195664e0d3534755070d7648de0eb849382bb1daa133e5432d8c352e9e0cba5bac1154c16b60c48840383b3228aee0a1543542a80b05e702c705145d830d854303a2798e788e5015f279d15dced00c78736d8c362b9c0974b8501ae606c97ee0630cf2828604ce5e812403b285771be4ba170d77544e02ee31c5538b8a958e08b02a706bb58e8b0e04e897dc2f789fd01bb942a077f3d744df862c982a59c6021b01650304f9e514fde7061349dc1d749b703ee7648833d1f8ec01e161b055f2e28e00a860af6ce7056b02b4f28ae0bcce50975913c88d26187eec8956126992cd7ffa387bab0a32ba9aa7c6f55beff772a57d855beb46258ae47f9e64b3353be5c9514c5224fa9174c284cba94e1e10922a290e5910d2db688caa20b2aa8e8428679820c0fb715a8dc8841ea90860724c46ce1e50b1e7239a97c875c4ea82138dce280f104678915a654808d0a615a6025a6ce13e49c144e1bf1e419254f20f3e7fc394bea94e7cf89c50d5da8bca863050a6449af6883240b959834462c214b0af5b46a048f4e41a9da880447998423d7615231a1642b730a4d7a956705bfbed1a18663b9de64b9d272cd51e4865c1ee5aa842c79dc2fe7973a65868634b99c54b43945ae6bca69c5f3e5bc9a709638e572c6314296938e2da9915ca953922b174429a9952b72c0e4926aa9812ce9965cbf50a95c4b3a65a68d0b7249a99e4e91eb1a6a956b8543e3503a00f8b29b8c04e0cb7682612a975d76935c3bca945cdb8a17b96c2d3490656f99f1657f91fa2f7bcacc0c4db96caa2864d953885f76d956b98e5ff655ae0dc708925c769ca6d36424d7d29d92bc802697aec49be4ea51a6e4ea56fc0a122772e95a4adf52e34bff52ba948d2f7dca8c172ce4d2a97c4df52b87b3442e3dce974e27d7da545623435f56a724317891cbaa640959d626b9d6a9b24ec9b57ebdd2029c5cb7e4fab399019ee4d96c366bc1883cfb1384b699cc88129e03bde12868c0c293ec7ecb3f4468a3d9fb03f9725a0951939dc7291df7a27717807b0b4e2585c2f14e73670305141aa0b8818d1af2c891318e543184952a382c0ce1868a26238490c18f68811a15708042a60cd5c282179946fb12421bede2c08103078e374168c321002e59002f24b40960cc9c302b1011c34a0c17c812e7a22f2ada028d9a1ee46451c4072bb288052bb9e84b10da8a888c6c91899e04a18dc8ce663f67b3d9cc29cffeadf2ecef2c4d9efd0842db4c031eb2064f4268d3e0c68d1b376efc08a1ed4619da7c68684889a11a7968686828861ef2500c2ae4a11741681b72c221fffc3cc93fff3f2f9bfdcfcf1f71917f5e3f38fcfc8f9f17a18d86fee781fcdcf8f99132468914a0b0824243f238b15a93429537599c5019514454972856cc34f1f354dcaaa0c000aacc11b29c524e42e41b5fdb0801f9c607096d37868686868686868686863e04a16d6806431579f620086d334f88c6bd4719b965ff0f8436f74068fb91c964b297c964b2ff19b28c4e1859f61d086d32591856649ff7f1f1f17999fb0cbd8fcf173a69b20f007c9cf8fc0f9f17a18d7edee78178ed7d643eede3e3e3821fd0c84046091854e1a3023541c410a68b0c4994f8d0c92598656eb2ecdf64d9df395664d97320b4c9f0cfcfcfcfcfcfcfcfcfcf6f20b4fd549187c248210f3d90d03674a99426198c2de6c4b0449618cc9066d01c3122a50b21dc5421cb79e5d12972b00072a7c8fe1a086d9e81d0e663c3868d58b6f1366cd8b0f1bf26dbf86924db780c84361b3256aec124d79079ed6bd4a851c50b57f470840e49d44981acf1d36b1c00428aa82b589470e208b2c4b9c6cf3775728d9f6d74944bf04d0f6fc0647f11429be30b84b61ab1989798508ec56231244e3976044e8ebd05425bec4893dc937b1ed6f3dff3b29fefe9391245ee09eab9a1a7c7e77b7a623d3d7f7bd82c1103ea852c5e4043cf1704174c90d4504409343d4786c8b131c7be02a12de6f3651f1f1f1fb2cfff086d3e32f2cf1115f2cf53c03d84d0e613086d3de0e7f29569fc2c85328d1db98c651a00c834bae0926974619569c0319269fcbff024d34821d3f8a4d04643e64211f9f5af25f9f5ff7a3dad8d7cfef5398edee4177e2979bd5e0fe4f5f37ac5208a2660c0028a2fc28441beb89c11e3844a8816909cc002193a33d420450ba0789173c4d8722b6384112b5e2ea0c93ff9e72510da7e7a7a7a7a3e02a1ad2701d907c99cecf310086d3e326804215993fd91b6c8fe578e9cecef23b4f90342db6b84228fef80d036de9f2cba0d5914455114d31c69610523c84891428a3fbd8694664916515a30c20518c80995c50308150962a848142bd490fd1b10dafc5fafd7ebf50c086d2f10429bf854e4ff0584b69ff1b0193366bc6cc6eb67ccf83b63860c62f20c1992e497517efd07a1ed550b5efbbe9ff6350ff4ccbe25228a7d4fa11e419bf72c96fbeda66dacf37e9ddd14080a6ef1049fe13afae0993ae818815964df07ddd12864eba209418490207aa065f6a705d2320b7485eb145017f42953b7c33763a5a5e0bdf88a3602b9c165ed9bcc5e5d0cbb7d4ff1faf8d22b9fd980cb7afb92e0b2cbf5bdaf0fc46b9fac56a61b6c2c711d618f614c350c2ee754b6f62790135c4e33f95a72470ae61d81b8c0fe732a7bcd49bf148aeef0b1a7d02e53c71dbb875954bf3ecd95c96b427c56bffbca247695cfead79bd77a8acfeacb1e866f8871ad239425bdb1a980b6a82fc4ddefa54eef449dd6f719b54c9f99ebfd1d5970dfbbef8d419dd7d99f9d8f5b47da18fa68f2ee38ddcd47c3b087bb7bd801587b7acb7bd43a8b6a18f6e841698f163b0f69da318c816a9281f21c03c5943f57cf1334d3b983c5f45a01d3514a505255b2cf82142ac702fbdcf81474493b621fd5e663621a9eb4f612f5d4c607a958ae94d21bce96502882307faffff3fb9ee3b88fe3306679199436832db3f6bd900143c6da022e6130ef3afa28a5355e98d0e3978d6beefd398ec6388a83eea81407fd061b6cfabe6e598f0d98fe124cbfbbbb7677776b76bb53f175370cdff9f7b9d1470f5d569c95ae56f6114809ee5676cbc3575291d5058eb56c52d147b4998a62feaa4ffeba45317fd69bda695bb4a45fabb5d65a4b612d6b91d545ad3ece39dff711f9babb41076dfd717dd9ef5cb6ee9a63abee3c6122f47bc4f2c55a367f27074cdf777268af074c27ac65d39d0507d3af2d739fed2b54d00a80a8fbb8aeebba5a7d3c610707aebbf77a2c967771e8b0d7bcf772b85e0e4ebbcb853170ff3c6f09cb715ceddcabdbfaa4bb4faebbe74f9e78f5dcdd0dcbc78479113df8448337b4d9bf1e186ba3fa5542e5abe6c367fd9c00aa4899945a469b7ad62a9838fa1bc90a04d081cd3bb7db71764e982b98b5eebb918832a133d0239408d114d154474489724f11cda25b185cff03b1d7aef8210c075c3ff0eb97407339e3d41366513f52b3b8c0e057dd3baea7ee1c4b45155c0f433cd111c15343480da1c3530fe8ea3cae613de29708b6ac3b6a0825df6be61224af30f96ce63b4ebad37f33d8b509f51ac2a9eb5e18045f4236cfa82c6e64e86e8d26d5463437fd8e025f9048d6322d56b9a4d919706745f704fbe41995654c2e69f94916a969cb02e5b3d0c65d514884c940834b1a2dc7118f79710f5072cd330a8b9c5cc2a090a034f27c9f265cd63ae61770596ffe82bbd0e63dfcc5771ffdf37c1e3475065500f27c9f254028602a64e5e21abc0c2e98439ba521b5d42786bd7f9de7713b1ed0ced461734f1d157bcd73839d614eb8bbe0fc500c28230467981f1681cb7b5d57e01f3076f053added686a14f9e000031fd80429b85f57c5ef0f5da7517d018b8ac3fa10db885852adfc9fde47e511cfd5e63ee3ff69de33a0eecea8beea0fef32dd4b057e6707f697307ab6e33f0ecb57604eb8579d33a6dabce22fa73c2ec175c5b46a9b2b575a4571f143c73a6ad020db93e073f44b0a2948a58a8a0a07feba22553ec301722d3ffa88d1b9596b8a7e4e76e2b531727b7757c2a816613e85349733f0fbaa3df60f0e3a690b8aace8347d7bc2a0e7c8810c4abacc8170a6a8c5c4e3350556b32a53f29adde9d38c9cf8b2b28d2043ec6182ec2320f1e30188f4c3f1ff00e2ecfc7e47c0c7baf5572be6ceaa039841b86a0a56ffd76f7da9d3377af229e44f4db86af0490a9ac539da7466aa6652c2bf8279d6a23dad51902f6d90ce19da9a74c0929ef55ed7b6e2c89c0efc63216be1d4ba15cde5228f758be429810f8b15cf2f86444b9e491fb27d451becafd52d3a7cc3004b7f2593f545052f8ad6f8d4ad48acffac30e2104f7d17aa4fe40f1faec1b92047e3884fc70540a1f1c6f9804fe372a7d0f8e738ad48ab7aa18faa0f9cc5b23cc674c2ee5535372ff558e138a4149de830f7e625012ab950c21bff99ef8d15b3f0cc7b9d529b45b2a0293f4383eeb34f8ab15af799c8b89b4c9dd77048380a62a9bd0d9ed4f8fe371bc46a7e6acdfe3d0a938330914c2c8762c719d44b34e75ed72f2377f2e0fef4c1d33b382923cef8790ac51c9e5ccf0845cea1b0c9ec827ff21e477454fb475e353510c4aba1f9474af27062579cf7a161d4222b9fd497ae2242ba5bab4fa53719c4a6cc9f284bce224a938ef15454f0c4abaefbd372acd304ab48843def13e19d6fc9280ee56c1153f4481b2049c1fda2800ca1555d6a021420e14d91e446e2c4934a54cac5918215e3843946714114d32ae7323cf282d6f72ebaa9b7828cf282d5032b826ca469e5143d009228aa6b427a5acf6fcd6dacd59e977739cedea75af59d47f7eadf1e64066ca05ae698a17b81668c1edc0356143af9065aa441ca97c7b624d6bf6c7c4644431af6d2108287219cb45e0ce332a08337906e6a7f4a9a465f725413891fdaf4705d11d04994c6916896b6a875bae2b0d3be82ec7110fa42820e460d84749f99259794601e126fbe41905049a5ccaa6bccb5ca28b1b18e6102943b638bf1421bf065da448c4f09002d9e26c0e99e50b279e205b9c5dda90045003e5462a6de0240e13e452a8c58a23947ce4904b3d61903ecedea00433e566d72a8710008d192ab2c5492e35a5599c8e904b609599144d6b7e10432ef51009a28915b9149ec1420a7249460e3aa020a382154dae885a432e7d729e7cf1c41232904b544b962755dee0c0454e0c313c230651f8402e7d6c6ee000e64882b4a212a523c5141972a9e706b2f3a5d867f4ed1814827deeeda844afb0618e1c72a9e505699f1b95a8192a6c6020977cb24c57dab184b4e3ed0de80f2169942f61684156714615a48b330725593b2af124c1c51472092442da1f42563128a92a6570055987905f117c5b4637b0a21208860c5267c8256a441536a4fd2a2a551fb0904b9e0569c7586f40ff9bdeb6d2d9c493a62864156966481769ee762cdfa46541baa844a1c65441825ca265d8d0289a2c31b0427edd74766d3df982890d648b0318835c6ada81dbb20a82f80513fa988c88ceb252afb4ca021f547d941254bf15547fe75dae3ad8dfffa506fbef881ef8cc3e1691c4e9332553077dba64d65aea4c0ecffa39b9ffa8d8525eabc0b43a6321d0646b3ca2607994ed578310134e0845213eb30f16c1e018180553c8d4c1caf64d18cb2b062ea90ad98ed4852a07430dab061666ac74a7ec5f184cff02adc1d5411eb41c32a28fc1848290d0359acf262d878ce8639936adc0317090a963ea709a3a6298b586f211cc1a6682de1a8a2eb95e64c7624c1fb3080255cd04cd67adfcd980cb86ca1f0db8dbc069a3fa572df3ea3fbb4dcbfcfd1bca6b416e4365ef570b3888d7f0c52e6424a1655ec520428290d046fdddd443f0be8a5efe5cc0fe9e18441432adda59f92382dda9c9e7fa624d1a571d3cff65059eff5283e7cf9d27552c3075e01401f272e57f69180401cf9b60f81d0886dd733fbfc3200874cf7d52f7dc78dfabff21f9ac3f14693e6b501c9358ff8d4dbd713accc7eb33fa2cf09efbfad86b2c607de73df749ded7918e49acef46ecb3f9f4a93e0bb8bfcf82eebf2008707f3f89fb3bca92baff4617e7d7c19364911fe4ff3e6b1f4b88c02447253cfdfe24bb3b3ef94f927bee0ea96dbd7cb78d26bd6d34a7d4546d7f1fbb7fca7c36bf8ad508c82c9aef3af3a3bbdb8ef9be1f2200993abc8ee66ae19f45997b2cd698332e96853c6f0042b67f77c45ca2cf9c71df12db684e19779ffecd9d18d441a6b93fa72108ae1a17c8d6ce19f7a0e833426659d658ae205b9bbdd15e9146d4b21c3d9b38fabbbb35b0e1a36c16f5bbccacc066aff659cd8141d2753374466ac70192070cf002835cd2aa3a25aabe65438ed8b2850c1819ba707384ec2358ac5ea84224851f9c88294e58aa964582c1badb6313f6dfb6a18b3be72af10f067b981729be22ae4ba170774b797182dbe2057bc080aa6b432e8fbe48cd292f5f723f1286612f597229b365bc4c89a1f32285092b23cf282f4fbc24e94ef3cd366ace7634db6a3fa84da7e7ad1e7b70b4b978a5ee2d1fbbae53d24595b1ca336a88365379469551928fdaa8151ab1beff73cd980b0cfcc36b4a445bdc40914bb30b14345091aeef07e235a5d91c5269a9e70ce91a9f46603df84baf2ae413f87d7fb41ea981b451c9fafbfd19845f9a60af08240d66fda522f7430420f73ef775f76b68fb3aefeefb95fdf89da957e1884c0b9059e391086bc2e5a40af243840ac4036d549240cbe018649ff5337f63901dbfbfb9df48d0057778b87fb94f14410422a61b27d511983a51998e25fed1b56906487bee282f4d48aa13d8b26225fb1532b99c74c45c52266a84562a14845fb112cc473fe6aca9604d4569d860111e72aa8a18c141072845a889030518358469c14c13ae850ef8c6c8c7851660e7e538e2d1fa2297b1298e881783093d07481e20f1f321c17cf0117a180cc9ef77677a384082dd918b1b78845ae62171e00103600f73bd2097b42aaf4a90918e0b183edb795f376d8adc5f136dbc7efa9d78d4322e98aeeca859dfac2aaec32deb3c1e62c017f8ca33ea882cb98c5171cb75b5bbafb4f83ed611558ea0217b79461d81c4ae60bbbbbde79c73ce59bbbdbbbb836609598bafa7a7c76b2d89a323af8573d69f040882d48326d8f5fb8fbc56c7d88c1e8f72c7621cf86a10046791125c2f3875cc7a450fe8eabc2398c03456b8c481610918354630e16285ab828b14eb84c33ca3b8dcd0a5806d9e515c68f8c933ea898e9a66a23bb83c65b6e6da46f7ba8f6ee78ea738fafdebd4d1bd5beefd9beee0c45c7fced8f59acc677d4b2a8b95d546f5aedea2b3a83e277ae7a63bfc65d3b6adf49958367c252dfd6badd5cbd3c59a67107d2f077540331d6b07348bb9e6395ad06df8beeedb4fe3d47246a169338bfc69adae8fc8fcb80e6df33be803eab3eb1cdbb4de9b57efda94b3ee4e7134f783bb77d7e3b827f649f558d67661c2f2af7aadd5f376762695d359ab401776e0790b0b5adb850948dd50b1c0436bbb306971b57a7b7368adb5be3bd7b9df0ec68934998ceac7f538cecb0d9edfd08e3fa8581fc779b9e1eb421b03c7d10e729c971b428e45e5a3b2f503c110c40f83d16435b4d91ab6ec0b6397a5b296f506d7a77407dde1793ee83909e9f8830b6cab5c05c1bffeed4977d0daa4b37252d1b4f6835a80d6ba6ee4d1b336a25fce2b7848f160c32377c779d78a6735c5fc26f8c1b8e64618c7715c73acef6381ff799e493491c9d605035cce38236be45e52e0b2e269a79d96f50e6b597d6135f884fab5d62454c8926df5cae0923ef9402b729c7df07da46107f6aff71ddabeb7e2f53eeeaa468b401df910614cfd02062dd770aa8a14b99c525fd6d44995eb736e4fa04cac5c5f09b4d6da06b0b2f83aa165f5415149a44c2deb36aab0afda576a19657a02db3a52265ab52cd6fb5b318835f6b8ef2f06f5d8a37bef67f670e8c17c1b67e3be456c4db0f4e70994a96b98b2a82b8c8f4271a6094523c5538ebf5f28ca7c46bf25d25a575bb4c83c6073b7b555b5a5c9a7addda49bd01d1d4e5165fa937a0369a3924736f221327d1f0ce0a065483cda88fbf0b9506c2ca67e6022c31f425aaa31e1cdb5b45593152c59689bca0aa5e0115a9c2ecb2008babb8f60822d697fe208e2f77dfd7384feb7dd4596253df050054b1938acf78ed232d6132ea9d3b7e341d45a2a0b35e50ad49736f22173658c99ae3949df56876a6aa3b29320b16aa636f22c997e1b6923c7429578ed6429a5565ea353d7aa8356a653a10fb8f5ae2fa913fd92be8042b5def5ada7dde483eae31f42b6c4a03a0641a0f5ae4f728d4a4f754c723d1e9582eac348d72b05d5b18424fc3b1f8149ee8c4a779c3e9b64eb87908d61b927d9a26df9d8515ce224add8b71f3005d233faf7d21cd2f7b6e02bf9b3d76e247d11a68e99e934a2fe7656203eaba3140a5a28c9aa32e2066eb9720192eaed61287e0dd2fe21798620d0a423532d9b4de68c7e9359d5a44937a9dda49b74cd738a62654b4b11b1a6de8a4021973dc5632a42875cf61522dae4b2a17c72d95f7a4c4f99c9f4bb0aecb1cd376333e0e0f2bbbf6f3f481bd5b74f8210fb2704e5cdf5ed98d43d6b54eabc0777c0fd59ca83ee6823dd188149becf4a2ce5de71a91b9fb87fb2ff7520501bdcb9849acb236e847957380ee082cd152a546c118289212f78a90283186d987471c1082f67deb458398e782055513159a8909821c468c9fd578c931814ae984028edefeea6dd3dc4a785022da15ebdd581cb5aa75e021d5c6b165cd69c2fb5d92fe195eb6842c5e02ca2ffe57bb5916c16d16bc517f71c774900731dc5faafdb719cfdb4f470afbefdd2c2480073e7a0a00ebafc41e73ad259d43571ef076481647ab1e01244722a7a545c2cc1e6ba259b30bbb1d4a75c6d01f74faeb5b46c9622eefa1cf72f9b3f3abdebcccf0bfc34e883fadd776369805c7f88154b6bdf6691cb33e661d05b4bfa1f4b042febeb9c45a3b358de08deae72b5d6af17acf371dc94c5de5a2b546dad757cb56cd66a455c2dd8325b2b078375072d6e99f3f0f73faaaf571b09595a8e5bf2c8fe17a475fa20c317989b13bb825b5b5839587053f843c349957913868c0d224c940caefbb18c7a32fdf05e10bf406cc587c50414e8c42be3f48569a1e7966185813b25de9bcb353175ab782c13569d1361bde2c2b0bc0923f6d28a703588efc5462acd2f951d9a6348685397465feae681570153532eee1e83f762d8bf92542f807822973430b8a7cb15105c940c519700a2d6016287271928cfa82b57a09aaceb6ba23cbbcbc23c19641006f3f9ce514a298b95418eb58c7ed319fd36ba2df340afeb38cbf2581eab2bbbcef33a153c2a4553c76ee4cf35cbd69ee0bb2fa118c8d9cad5aed68eb33de78cd9cad5aed68eb3957a7b9d7672d3dd9d6bdbd403e780cea21b970079ce1fbbbbced95e278f3c9ffb42e4dd753a477fbaaeeb3a19ed889bb5af95ebec77b1a9c3df8f8a6ae49e4242a27e3df73a965781a6d49c9a54dde73a087083c53376f5b11303d37bbfaf03e7bff3f01cf745346b0ffe234d2824f7073ba459d43f754c1e3165f56e58534a713ba59e6983f4824e69d007f3476af367abad5450b1302a985e8f35ceafe5cd93b3ddbd9d5b8f0ac77163ad9ebb15cb589e5e41f7b27a5468f51e1b30adf5b9e738d1561a91c5a00bbe3288cea2d94d9bce164bcfeddd9d2719ede8bbcfdb01a236720d1ab131fb53d6e5997de9ed40efdaaeee3e98507727b4b558da164b2e7767b9ebe5a31e0b0c5bae1064128260151acde579d66a40cc1edea9b2faf131b1d6b2c20f44f0852b2bb4b91182f15c26b7bae179793f33e0c99395bdceb9eebbb5be486bc739164c5eeeac0ec3b0f2f5ecc25615d5f73f7cd6442d9321893e8e7ac841a3b9cd73ba7095d50fead4ef0d3fa83ef85c3f8c31b733b9f1070cb673bd9d1e1eea3d3d62793f9ccabf1f9e474575b90fc4ccfde74dda2dd63867d1f580b48c1b6bcb44e07e2081ebece95c2f346d07318fcf8f0cf04a46fb3e07ed133df059bf429b8f1d1f308fa3a31dccd3e51d3c429c32031df4e7c782f8ac3be8ea602257280b02838d20d4d607d446a0100c06b262e167f06a197682ad82643039a09d3c893a3ab52073d67f31eea0aca03a079945fd3d44300942c20e829cc1565d07d542813611fddaf78c7e94d40b3baf24a2b287e1a182cbcff4fffae702a642bce1a1b4a6cedddd55707777778fa24d3bbd35edd0098d1e155c0a65ca81c121f7d7a6eecf810ba43f037cb8bb1bcd5c79c0206924aac87e8510fa58940f0500bd1e88c892030a2940a120851a34705cd00297313f90493f44702f22fb73e0ee2fd4322b5c0a651a652477eecfc985324d904a4bae265ec0256d62f8624d1acf3b62441474b4c8c8a11302091bc4f0505833c518574548a52520365bc233f58b942a627828f040f5442a2db9686081489d1de478de9a354bb8cbba9dbf12e5f2648c10a4d2522b871b48ffa54f862d647da521333e3ed13a3eb9fe5d75ac78a9c19fedcf76f8d9ae4a7554a24b38710109a9b424844416a4bfd2924f16b2fe12b7e689f4f99e1f42fefceb5fa3d2cfa83484c67dc627d7d77ffd1092fc97d823d22b1eb0439ec6b6522ee8d5d4619f875e350ff8d9ff59b35e66cdc7d7c871a3134149fe3ddf332af9a844d334e90087545a82b199817cbdd252cb0bd27fc9e93441f6f8bccfa864a57cc67d1d958662402a2d4d24c8d768a77a03ee9596e61364cff8e47aff21e447077f79792cf859f506dc7b9859b350ee5253c7f7d8b36309e3c291c732f18d7816718fd42013aeaf4495d8e18635a4d2524b2a0bb2e79740336348ff2a2a0d59914a4b04207bc6a72f0e5e9a53a48f4f2e9f0980cc7d8dcc154d700cfc53072b73ff9a3ab8163722758b6528e26f9eef79c4170388c8fa164db0b9f5168a7b2029712acf32c78d50b63e7cd7cf10ef4c81dfdebc66a1e68cfb5b628ea70bba19e4e1f6c833967867fc20105c8f1f8f2384347c00f82d1ba5659c4bb4535ac6d95bcbb8d2de32f7168a7b8e738e73c15ac67d28c65ac63d2812d15a5673f979ca5ac68942e2b78cfb69abc2f6d9a28bb766cd12d74b0b6efbf7626c2d2d045a9bd388d2726c3075d4f7ee6131c06c2615ad5cd226986c7fd2b98410ac65d602a9c1ddbd770773a3906589af9671cf0a67077846515dc9159cff33bf76782ecf8e88c7b11c42c3067ce1bbf8f2d67fa0f8424f60f04b188ce61adaea77ad1350d77f33ecba2b96b4e50241300492c177b1133bfade8726d8cc628daf1efeb1ae196c232ec7ceac6d3067f68584c2b0a451c1fd25cdcad7ac2b6bd6e4b0664d9ca96c5faf96d9eebf30d8cb650dc1bf082e3fbf3875f443914be85c42e7f2a99c5914671625c19e4b562e6b9e59a865d6be1c4cbf7cf9d41a352c2d4954b1a0464d573ac32cb25f7aa64a7a66690cb36dbde018376fea98503ffdfdd50507cd96d9ef25b75cf6925bae2db3496350eb670e1fd75711d87f672c2f8847d7d87d90ebf163117489f77e5e4bc4af9659215ea34e23cb7a16cc1860721da9134dd23d5ab98ed4e90a5c12114d22a74ec9489310b1e038d1245de7e5f93e0b01e6022e61d9c967f67944aac4bfa44e6b302bcfe746ead4324b0497d4c9e9a3e18b35693c1abc20ff30a227a874cdb744392a119100000000001315002028140e088542814028516565cc0114000e789a3c785e1a89c44990c328ca20640c21c410020001320304342352001e85460d7ca22d3d79c9c11958c92e6203bb63da6481c18b25304472e29909c212408cc7caa1340486f8b6c040d850587a20c5498e6d60e69692289a273eb431618ef888a516c6b97b6fd70035335dd4c6d2de74bf5619df21f28d9cf17468a05ce5e53e1e63b79de5e611eddac1ef8ffa4e8090bc7e17337528619d8c205d3ce0a3367d575cc2a68801e8bf33a9ef9414cf7ff5fdc023c0022a303de92ac7e92f9f1290267589dc0192a11c3a224460d52fe01cb9e1b8f27b67823a5dc11ed688a1c267b712204c4a969a1059f1d66fa254941118fd7cf132e13b073ae80344194deb2c89baf1b31a263085f2d1f4152a9772f732d77b98b354c162db43051318fccff26fd1136cf6c3dfa63bcd523da5491b05dc31979a038352802a018952bc7d55a86fba821a4e9a3d82fcb51fc14dc1fe81d3e77f77c62509795e26ae380242e966e4e8c4cb886a19608e1ed4d10c26bfb5752c85a84db7319a7f521db6affa63277e8ef226aa2ece9e4171d87ee91e700c0883893131c788b8cbb5015bb2e14273a49d7419e03166ee970d799eb9c9ba67e3e3c149b5f20a9383e9a4d2fe5208d64fe360edef01db37d399360ae11455ca4e424cd4b16809fa3f4db3e324bb22b39a7009d8bf1ea9c327aa45e22f9c2f37bc03ffbcb990bb7300b46c17706b2063a71e98ca928ec8b6f7043d09ce225d656df9976965045e987547614b455509592cd867a6af0ad2f32c2e24d6e369e234ec707553a131ac878c447db56a5c8157f8de296e51a2cee70b5a3b1afa3ad277f4d4188afab39a9a2af0ad826efc1983c42d31159bbfb087a9217392b9b362aa4303e6eed4a3e919aa2db16cf430951a0319e1b0e5dcbb513d13aa0584f61a71dfcd510741a32b8f8dd648ac8d72c03d2fb1490382217f392d5f71bc38a2b79574103e6a0c30277495c33a1b1879de68a7c6343445842fecbe761c872ecd27c1ae524e55943cb0286e3e43fc452563c87c66cd27fe9d193d4004ded9159a55b57930665083619e93fe25862f31b5922e05eb4a0f769cf83c0130a1ee90e0e18832f2eef8793a59c23ec00cb2fd3620100a2db90faa60ddc9eb788671d619344c5f659ce91d0d487adcf1467741311bf10113e85650d58468c7a92f02991113b4e45582c07bc66bf71b038cc969c3f2b87f034dd1c38954937afcc600d4e719eaeed648ad8b8ca990c080e726f20450ad0a67490852ca9a4316a7f43b55cbd9ed692cf8937f3549b8c4691b8efada2b5a1efe2f191e0efdbe0bbb3ac0715dfdfd996b641cc88c80778c90bf04c24b495e84835d7bab634442159402cfb6a9bea15d90cdbbe36714fd4c2a7ca8c9c7a259be08477973b5a905ca648f3026d3d140f9b987d863f0ab35206841dfc08d854ffc99d9dbf537a225eba70c633b5c490300f1525e424ec8c9d9116eaf1bdd7a9c527998d75f8534b3511bb06f752375cf52eb0752eaea949af66fd892767da122c6582ba3fdb33fe9f54ab021d512f148e11cf2ddcdc015c41120aedcd5b7e9a2ec532c56087c1ae5a072f9ad048ac06b7055c8d7a7499e5c4e86022985c0ceb68fbc09103b85ac45abba97f5956389a9253e783a4661f0bf0dc6e8a62031645c5a2732a26871c6a20a8c7069c1165874c83f9814913e6db36de2b2815d9371bb4ab0b96cf4eae194e3d1fdcd6a74050533dd007149f91b45360cb177d42d231495bae15280c4da1e56142f05a1e8e83ad54bc3a57e19b7b864238afa85e28c864bf4845b9990857c659763cac4115d6e134af57962645a966734e04f6a5a8264803e464639ea6d614d4e30cb45a4e7d2fa99037ce612f328a0fbb40d002363d25f5039f04178dbc9401a36d09cbca8242eb69f3525f403ea27471ef740c04437ca11d150dcc142f4bf8652f6ca9326fea52ea61e527e551d4a4a44544e26979a03824b7524d0ad8e562d90b8ea175a9d6c6d661807cdc24a040cdd4236adab1bed856c44a93798299991d58f6d4f9642a23eed77da65ae7cdd83168409ba1d7ea0931b556cece106707758fd3c36f1b1a3c1e973ecb278a6bef131d1ffbc2287c9787b8797178895e328f770a5ebbde476db9940d34a86aacf2e4fd9b1dc3fbd1f85b0e21da23a8666023a14ca2d98ad868df4d4bf054a5a53902053498a4f84f642b5029da3298be609514a171255f28447b61c94e8f53566c02ccb6d9da818d03a879815dc38e7cef3b60af43920e780e0afc89d6f203e2bb3d7dfc00bcec02441404017fb47cc3b25def5eda6c1b9f8ef3362384f5537622943108b657c20cc6267fb300f070aabb7339c47b894192e1f7a982a7d781f362c3609bb81913ae844934c9ebb07124f826e00b07415e5a9e49e87fec02e68c30d1588b1d360c6687e63a920b6f97f3b8864f6948f79335df51f82651fd009253e9197719a3d30cb148d8fdbbc392936ba8cd51b9d72e4993d654e5dfb1eee80632dd9f4d668365dfd7e2a1fce594d018b446ac86c6ee50a3b2d02d267d8531d5aad0c4cedcbb5953f88c0d72938fd4da61310dfb2ad8acf2f1f65d06f353d5f40f85510fd41d59170e04068f553985dc15c9c1de9d8293045f902197382fc0159c16377eed6b9d7bf9bb99730123f6dd17f3c5e96d3fc76465f943d79fc9d33c3590104547a643c0f6c49c6f1ce51d04300aaf18043795f95941a35d26060d214f1e00d122dd096a2b3ae8d07537bbdfabf13f3e00bbe997feec6b4e544ed7a2d6d3c2d506780a92baf439bff1be12cebe1091269bee54d4206217153d00f850183bdc82c348141025356371d6587f4f6b9463dc114c8931665a1072108feef8870fb2c361d32856ca3345312c12dc411206ea02e0a3a1605020ae06283febbe07f6baa9c9d489314ecf80095e5f5beb8ac2cd33ed4c167712d8df1e3b52ae43bfc584eff7f72610a47dbdfe9b28373b7ccc461a36ad582946888c78ee8d84ce34c1f89bd6968d50fce2a0c434188dad616b2fc88049d0876f9be0fba9a73529b76fe2b1a42c9d406f1c27958f228f455813a1c7170189b4035bd0d1a80daf8d736b316044120e27c51bb40b425a5e6c8058de798c09a5fea9ab1eda25b2d4f0a0668dcc0aa3a6e301d5b00c4c0a025d702db7d96a35b8fd02a6ff4568db10ed7ead32dd596abe79855effdac8570bf94d974133e6c9457ff97d7e8ee27b8fc75698277977caf19c32743d52e1c8c3aa2c9a6c3bb7dcf3d663934c09b9b118c1e5498d01047606e4427493d5360a1a87e9ded6c78b282d4a79f8041a7312202ae86296348fb8b573d25a56c1ba41f8d11c6051e24cc9b882de82d93533084265a01721d07407e36cb3c58eaf3923e8aac80b2843159636d326bc4716c6c0a573f7c85af9b10e1c6038f07ab75594f9adc3d60d0b6c9a653ba73c066ec078bb0816db086ee13a067c725cab109e6f5f969ffaee816db1c8affbc4aa29d18fcf8308c93851d3a67a7bcae51bb894457aa59b8cd2be51534fa564bc37464628046b28960ad6221d086b653a70fdce7c36fc6a89e51ebd88060a146db004720a3965c7d9cef063113daa68437d76bb5e8a5fa7e38e86ed66d8bdf7c77d2b7bd3d484dd50f3da561b3eb2b0acf83d6c97c4076d0e979b0d23a0f07fe2e77a186dae94678215a256f811fa14bb82a8beea3bf23b8e4ea1014c9a15724c8169dfd3c62ee6621b7e525df7cff879aaa696719a3279540042606ba625dd2beb67ed50a5dfe5d5f1b1d8f50582d28e9a7066d90fe58cfa4f562f7ba77aab01faafad6168193f27f0a580a324c1785a2af18039c8ec7d551319718ebdeac757172c2017c03ab2aaf17c26557fe56d4b530729154782dd0e1c86d4a7fd98969675da92e379ecea20a335ba58e48cf6ed148b38fda3e2f274f6ed461fd7f4ac9e3854a7187a2caa6e3dc9780f1f23c69e887a8bbe4161fd5232f85f462db50b7d5fe7492b83ace01c9b6962849b9ef5b8484990a583bfa7840c04f58990efa1cc82256ab3d4190b5a081085a382770d34ecfaa6768ce186a09fb83a3d172a1fd7f2a9937768f219a5dc86e79f51573957768a90a97389257af488d5f80d1b1e69739dab492e3d9a8cf5d6c6b08c913658363a41578a476a7b38ee324d352167d1d9770acc510cb175ad2a2655ced2de06ff8577bb4e106803dbe63b13b5a95d38da195b7171b4c632e413d942acb66f75d4b6ad1e29a9c93c6872812136a56716fbcc06443d999a06d1fa7a8b53a2e235b33b25b94a469340afba3b031875ddffdf7f432a7f12b3a56b4bf31aafd20314a41e4b59d55e1e185eb6fcadae7ab42aa8cd9df7ceb4b715c4ff95de6ac8169016f6db100058f264d8f1c5758a7803f8a9f74083f20d7450b2e07913eaaa808654a61893343940b0305f9a242d00c2c23da142f22aeeb39d52edbbdcc52a049f5372632d06b702664d4d97240846b7c63633264be71aeff1abefc57fe56e7b7b5b35e67fa29d593024b0a9bf9196e73baa8054888a41dc41e0fccc23164fd006d3cab034f55f564c72942cb32dd59310164dd7a0240a4b97e8868751be16fd61abc0697d27c4f970c41961dcba4131fe0e7c916d3a98f3880700d331664f7f299e7ec5862c8210045ee73ccf5d4500bccf27c156446a6f4a7e316ac2ab754a11a0d0aa6426d2f3ba9934b4772ad42ff56eb7ccfbf48b0af9b9415cc37e2220b661787159be4ce44082493aaca04b1dcddf03e078a2d6354e7b0f02fbe04e7b1f843c1d71d6bf151091efbf927c528815c8751b69a52c00de3fdbe58a0791d37b8700b3f597e0a26cb2bb9a012752e097d3ecd20e8d0871ccc39e4c96c9ec96a32d7eabad788ebc1a845d740d63a9b8d00efece28c52ae72f54d3184f2b0c72625f266f1d504b4d77dc07090a6ca13982326a933e511120b59022833d5b85439bce8a6cd69100776e9f47754bec832dd9064c04676d274699c0263b54bea2e77ddd7cb441927d7e7c88e32745ba031c1dd447cbf3e4e2a83da0ae1c6c1a1ada430c1eaf2d72517f84765d75a360947fc7f9c0177126472adc9a0cc7a4208f0e9ae9d8c817915ef03f1f2869a5facfa097ad75d4ad41249f811baed2ea30d7655345167779fa1a2ac2ec2df45ff217a8993266c91ec91c638d33e26eb77af9478158a84b9e4db63af75e7c4bf5601c38106738c069fb0b8c81517f0c25fe0e34f810884a7f0f14362ae35ec67acb1d8ea641195b6d7f89944b8274f3103f89f62c003341df487436a6f1efdfe7630c4da2a58516f0f14db2196e711ad4f35e2938bc13f77bf2c67c02584b80527317d460685d1e9d7807b2f88991c87b2b396f81522a5a8d03e207df2bc8c921e8bea5367f9f6398d1658f2b4ed2ee07c624df953c8edf47749abd9ac8275602b99dee264cbfeb251530367c44a79430405766ba5f3a169c8848eb1813656a8fa388aec4c4d3d2d830b6c9a793c4b6857bed0b1f6ac8bd8866a5a3f34d636c7d12a1e562172742db9eba67877b5fa2d1144b9e14a4fb9a64930f7e47f78239116b6c4b6a9e43e3a0cacc72bccd1c2ac8585923efacc65c94bd92781a4897e47cff241c4e027849f47d1cc450ecde59a1c894e83816a522493eb51d31d75ceeb22fcb6d7dab7687daf7858c8e54b7c1a45d582ac4da1f08a48dc763b8dc473ec2866d117d4e641e1e5e199253c7fc114d2c187d7ee9d79a55cf43840fe0a26e9835878e6b2ca189565db8862396d831726d3395296891ac49c8bfaa3621571cb618fa03463f88c094da075ec5a0108956da170c7f11e5732a628e46efd761b923e288e75df463b1fe8010377c35e9b5d4257b5e9719f9f23c6508f03095c72f6e97f9199928308900076874848e7983dd29eb74ab81bc5624256b09baa0e14f14d9bf463b83065cc5ba75ec252bb5c14d2429d5be402a60ce6b3ade59fe07751bda93384bd4de547e182a54643f9c4f0ae7eb324b2d7115806f5c4ea30f3dbefb9071df94433d9347210831941de422c93af7520d96710873e2ae8012c4675a0acae90aa94fa20e820151ff2aa61937873eabb32a58af8015a63c314e7841c7561468aa7ddcb77ec2e1b1fe813120b0f8a96d16d3d68f0670809723d0482f1dffbed8bc199d6434e8310f58c34d5bd39f153c396446e85f9f695382cb663cd9b3a0db367bd820442b6615b1ca3c31faacf598dc173a41a347f9c4e9a4cbd2d1d03a33608bfd6fef2b0484dcbf781de14fba9b75993fd3dedc3813acc59cba0fc3be53535755bce19383bcd5c1e4f2198e46b128d31d5b86be90fc338ff7598b3d9b241b16de0ca029211286a5d45ec07c528432ba4aca861fc60d10cd270025f8a3618018d237d77cd9dc15a640feba2d0d8107f3055362b91662a3b4c9ffc210c1e2edfb99a744427c0f7ef2c0e876f0ae427528f6870ce2f704a7c53e85e893c4ac66f2c8448bc2175d05897a06d70fb989dc3dae6c7969daddea12980e61cfa0be064362012739a9b58609bdd48926108e9b1852d0358378b2b8aa9a4b574d8b4883b854f5dd26b9c99a8c6374dfbfdf3a9c3c1e08d9cb01c99023e45679d7772b95ea5b6382140a14aaeac8d37cf23cd881f753373c293377768793f9db70b429f7e7aa72a429636bb9adaf675ce361ce2132ecb7c5133c3888b9db907e1d7e63873f005ca50530aec3cb20c70b603c5f1d0616d6d1181f180219520995f364f777ed7ced380283dfa99c1472f0669198519e97a3b34bbf2808aa17e1c4ef42b40a1453a1d674d08484bc4e3fbf0290d82d1416eebddab996ab687d1e975c14eac3b4fe19a35a42dd8ac71f7ee4eda5cd54f64fa35da0cae6f8188e22841530072e17a20fd5de0db272679052e8c63b54a69a2637b03fe0b00df83ecec262033832edd8d2e5ec914aa0305be01ec7a714ea6e3ac756f2621799b38532cf2928180ee9a47e65470ac4c4811092c6b5a42c9eaf2936fc4f9610b5a5bff07ad2db208507db765b93dc7451f885b3f7ff1bb7f8caff18a13b607cdf341d5a92b994d18f66bbad1c045282dd4dda08213a8866c829e96dc57804c6a1b2c3053cba240e0e19c6f5879a047c416f7614672df94bf0f52a421c28988650ad1efce6328f542323111ec810f4825b5402f0e96176da1fa300ff0c7a47c563daecca5c0eb076f45c2597e0c2df90fe14b2ede6d3618b360ee302d4ba0f88458cd6b95b2c251c2ba584357634e35bad32d52569df171ab20ea2e7cc55912c768fa0d1f0ef51f7892dcf98429ce899b367e5842e176bca27c640c707dffad71ba3e0d819b8e7bb8820a74dde2682f49195fd236f5a4c88e9dd8f3e9d9cb9a7ca35821517b8517dc5b0d6b150a0bd8c128bab12a29d9df5002724c9044e69e15349b13e97543b5dc3619fddb3aeb23584a87201328c9848065442a95aede7d6719b93db9423d53aac52643a91f3c06021a217a4451c2fa19d650985cf19eb09f5fb89d8b68277bcdc041cd7d67d33cbefa241833c629d7303cfd03bc53eae6d8d01c66a1c6c6565360c3fc72151d848b91e79371d8a9db79ec99b2b013c8ca34abc660bd3b389ff9afece3642bdc8c98f7e7c6e6375fb41859e332853b701802c5429d7256cd7bb9b44b8a8864b644938a041eec70126c89fbdda318f54d2301597bf8fdeea76dc0655eb84d412adb942f7aa400b64bbff82d48d00c5cca74b209eca81563da54b1f1710100890ba7896d35e7bfa3e42bc5d493cd040a1cdf44a42b04990f9e5d5b91dae9673c61e5cb096756478c526c3b2ea9944289bd7ed8e3a23e9c90a2e12cfa40106f4a39ef0bd9d5846336afb4c44303ba39f496b857944ebf9cfad86908cb0daa3670306d5fa2d720f81ff9cb600367f263b66b7658d32e85b1e5644ff011c042e7b6ef6d440cfb02b82dbf567dc9b76219762c419bf966fc6abd8c21127ae4ac1215bc968ce0d10922fe55d1faa240d85f123d8cc6311567d20bd60080e1bf5adeb8171c97e7061f1dfe63fa601b925cb5bf3d945a6214ab779620a90d72b92e307edb9add6a7e7e6c2966eaa7f875b3305ac95a086171b2313d257d6048e12e297dcff854f2445087390bb33d3a6fa1bdad4ba439c06211788b91352924d1a6aa44d3efb48c5fd3268b66b6d7a911b8eb7ca1a38a24b90483a1058631b27dadee3efb09665ace1cfb64a738269f991a274fedaa85d4d2c378d71acbdad5f26ea68e0e65e0d69617e7e5bec37350f9e3015a80babfe2c251678110c1b5d803a2324e32c51a78bdba5d7cabf101fa1acab3a9ee19cd871ad05ea1dd36d28d660104e337f7a4256dd578f341a69539406adfa1275352b21a250dc3b6141c3a818d001f634d3720b3b746c93fef1947bb4c97060958225b20fe08521364b81b2557276944fe2e068a938cf4f9afd3fe2118848e2ee625d633ad51e1cd1db10c07a5d26a2c7fb7c74e6cda767f52a4317a1b39324ccccc328326fa6615a5ce06de00641151d2485536b045bae274aba1e0ef7b41c27fa7fa5bf28364cc25ee7d6207f978bde09112f104da8801be165c748978f94cdcc6f4ce466ad06af9db16f5d2b618ef0a171b3ff4e45f5cce2817a36f8b8a567f47416f399feb12cdba94f3b2890c1954cac14d280948afd8ed53575c5ab17aa0ab849c00f7648695b2ee8ebb29b19468c6d76113a3132e712ef3e9974bf5e831ecda3abd31221111eb88364f6d28c58b21a5792bcbdbbc631314e3a33f8d6a9d954c71d3edb549ed3b5d86b8d4516f1b8de9e5aa3911f2665b359474e523918879dc59f7c09b28c7e9b73938e2f63ef88bc81058b89a6eca1ca07b5dee43bb2ff50e3c3760b49234828efc1bf2e5aa6317cf07566a8375b20af0cf36bad621c1eca9fc22e23cd59a0fc939d050093410b9c255bc540003efb9f28360b2c639f8e671acf4c60eeeb101328e8c7ca434a55d89affd2d0c80a4571a850c1f55b5dd5fb38361844be17a9373ff83f6cc5472a2bb67fa5119cedd9d2a13bb26f2e6f805924c66a3a538b101e6cdd7484f76a0e94c95bb1857632cca72e41c360d34995a7f72366e80c9c850deee3889779947a34fce77830549f4491c04a432a95595c514fb4bc5e01cb47705935e260760724680f0a95444bcc1fd11fae808538dfe7d6a7d9965bad4314a165c5b6cb6b59443db07b10087fb7d11949cb7b8953775f143133f1355f2bc5bae9acc7e25a0477d8bb09a471679b115547eb6de682f15f90566e95bf57dba72a921c84d189599601f0d6f41ba8f139bf58e9c435d9720530e3c83c961f27605137e8d05b49defb6f83c0d03828991fcc518be6eb739898a28f2955aecc13e48dcebbd774a9665739ac89f7ca0c77d119cf7451f9821b2c7f6a16aa58cc0fba8443e6247cdb8fbb358e90e46bfea13bc16e790cbaf290307a47c4ae8317f3b3ee4a1c7239259cd0eae0511c62aa8ed4fc2f1bbb7c997dfd8c7de6c06c4768cad0bfb2ad5d35ccfd06f5ba118eceb4f2b14f5a26d23a5f41876ecf8c6e007e583edf068b6f7c3238345d24d28f7a3ba1fcbcfab50a53107102aa0018bd94e62abbf9d311338080d8b4f5a52b11a155df5c910bc0a012cbc3889001d30d932d9828c30f94c70801a4e81bc3eb1f5265a560a67f7d6f0098eb62b02f7a41e2298ee60c7dbfd1a8af91f1aec50bc7fa8996d9a4556a7490532247fbefecd0cc3dd74a341428e01b01d9581fb58e990c9ae646afd6db1fff6fee93d1423549cfe9c2b4e72c9f58c64cda49a8213fd5263ad9cc13f639dfd739916722f3eea23b20726cff245461d9cea99e0213971fa851ee24a925c40f00f3370d42ec85e1f126fb0a0589e75e6a84bbcf9125b87bd5656f96d5046e7f8b9b11f21cb8678ad89e984a66b6d85fd823fabc1fffc12d377b08beac76874a0ffdfb5c05e4e488550a6093813851cc5c936707a68916a19ca76993ffc962ff2a679eb7d0ce4c3cc7d79a157212c427e980f7c01fc2fc99f32ac9d7a51f0adf8748cd5eff6d3805777181628643d8f9004a084782f845164b0791b074f303f74cf07caf4c1c0c634c7823df93f0d32a9f24c0bf83dac029cf03255ef4f0e90013fc2745667fa4c25307c60e15347358f70f33983114dff9672d9765d653e4cdc6b1cc3e905fdc2aba1877dcd4a7067e0671d0c836ad178bf04d4c46902f696fd05bb598a86cb3da770ba54da17ea8ead433cca024b6262ccb9e05a956ac1fafe0733cb394e5b0287750784475ac3150dc28bb538674cd1c7531346f5a2a28a5b3549391542867825dce95698adf7204e044a8493d351693c682e3e9065137c8b49e934328c461d6c1c85e129c3843e7f343f3f3f6b9d6514929538049b0a84d5411ff2609e62d0eb347c9915470c5bd4d6ca7fef3bb81c090dfc023fa038cadaf7ef0a1564c2f6af20a004821fc62be13acffa09e0d332727b1209acda2707faf4452d9cd91b392f7851711917227f79e3d106462abb676f4df65a2660053fd32beae00ff62ed25a7bdba38947b05a6213d5b5b2ce4d6689413093a96d00fa46429914918d655c4243841200351fe9442baef7d351fc09c54500e0aba70708ee2e5874edeaa5b1cf1b49ecb3cd4645c84dd26c34675ba7d3d4541f11c49664a3ddc2c3aef1377e3e4048ac9639fd0be9c85a223253e91fbcde12cd76bfa4ea26308df6c538d2d15f9aac383785b011e66d2ef6ff49a50539507ff860d2d72f9d01dd363660a0c0ddc634488a55244f088c318865bd3423f8ad3c827cf892fa89fb7819c65a54f899d310cf5d5a1c3210fc296e909d3be33b42688eed1b75eee6247895f879c38196ba407dce005410287488c604efae3194d3da00c83d55b47428cea0d36207de9c6a3fdee429a6d0b7d2b8f77db7e061bfbd77a5fe763cc9fe43d2bca14b4ddbd0cb0048f6c994691dbe076939603d472921cf4cbd53808d2675debf30f0a7528460d4ab529a2c8739e7c524e5fe4fc12c9b9960e7501233a40c61e85cf46c3b3f772dae60a4549ae7b8aa8b009d39ae73cd5652e6375fbd2962b6e92cea1054e641878323243be5b787ca145b2ed855fcb2e71be843036f2d36a5381c014b344ea1d14a3059754f1b0eaa0d4178b8ada2360b30d44ba34d9c89b94544fdb98c1b508302eba0c27df043eb2e1c587d28d35d6c7ae629b23b7ce5578cb48b0e70f5ade8e2f2fba5fb7299124e7988c4c6b917093f10dc03783232dada1e4f819222bc4558b89acb27bad0755bd88f6f2c11c59b406f2e41649c60e5d7360956cacfe866a5b918a43d197fd584d6f721d8438efd0377c59424bfaff9df25333a387d6a3191b7abed78bfb7b469f259985bdd0dfcfc7d619137aa420e66ef7b5beba64a31593e7a5b049dd6b75bdbf8143f92d789c0161860d625ff8e542eed6a551b54d546a9a842f2f0b5d0b189f2dc5a26ae2d42a8787e4b62db809c08b309868669d2783758a04e5385b5cbf8170da2dfcaeb4f236908a49877a490154a085bac9ab267fae432bcae19e5ae476b1d366661bc336cbef0ac03a44c9091ca456cb976ca94eb3241608148b90d17833e111cdcbdf86fa7b95af306073fe5d0a24f9c32bfc884f5e793b76b8bef0a434843109c3f84cb3febb9ec674d9fe05b8699273c1f0f7e6f34bd32d791286044fb93832ebb82d6f087c384e12f6bd1b18707df2cc3d518a84712a686f49318e07ddf2b1313b5fbeed1cde8d1e0d85a7cda7665fcca588a310348e41a8874272d4c8f92cb74089cc924c8c94db37d5957a264578fae92f1f15e44156d7878d9a8c63e6fbd5c532221cd6c712e0e2935c975559f095cda898ea014b18d36cf2660b2926399e31dc023425d4b750868fa7f44efcd74485267f20886484be434114a36d3065cc9ab52da4605c70130cf087205ce96b6ad747d3db9f51a09ff9a37b2176741fa0ff4dca531cdc9d0324a43043e1811091f4cf1fb65a7c1a953db26e81b54c6b0c40d09ca6cffd9972dbf44903da39ed4119eec899d7505c7b11aff1e28dfdd12f9d8a877aef75823aba0d3909b14a03da549f9113f65f811628e5ff4cbe5d245ff2ef4989ea93e24efcdfb4785050d0631067c1b2e082d03bcf161ff79150a075523d89e0c4546cecc92184906a609fc8fca173eb16a2c988e825fa01b61ab6133dbcc7198c4987872ae02f6805a4bdba75672d95f1f60ccb6bdbe049aef37015f158a68b47bb7afc65f8e9b9433a4ec755fb8f6864df1b41a878ffea258bb5bfbd4391e27970348f9959a85992a7038dd2082d4d3f724e6391d6549712747e53c5d494cbd0459f6aa62ef52355b3864474c3687ba9423ee375116958cb65f10c7bf69007325ddd013c8bddadfcae35fdeb142fdb271d960171eca77fde2268ed4869e2e5ba3aa7640e921d036240fa8ff8d4ce28e894e7e2dd646ad1820d8e3ab08ff41915585d53e47325490006ba398b92ae916598f3c5fbd24130d8f511160514dca395f252dead8f989f1afed224a63af12a50a256fce885846fdeeb7b278b212ec5543d1aeda6b571121306689b8dd499d07585691f41b4d0e5a104856fbd264079626ab168920c5d6c2e78e4d0862c0809de514e3d49cceec15506e7468f0c942e0c884f3318a55ba132d25d9baef3ef7e80d78871490f11f313ce194e1a3d0264b3689e4b518c19b07a4ad186857f2c3652d18a9444d55cf337ceb649c8241e09be49f58a2114a7c480dbbcdf78637d753d96a7ce7bd85d71e6d1fd6aa8bd409363dac0899460c95c1376c6124da0ff58055e1ff94c0b710772d884357b9937c5d9e47c62c9848eb9ef7025277d3ec77305b0b959bde794e3017cb58cf8feb5375f3987a0290a04f716dee482d5d68de26b5cde606075681288cef4509c388cfe55c9766d327e0314e387258ace343da83f6185ad200a81f7c313e3deca70b3b88e5e047bc3dc0b8ea8c26da9eae8002f7adf83e3d9ab3b2cc74b21fdce594ec4f9a9227fb93111f7d3d8cec5f7d9cecd2237f9f530bfdcf7d4d778e9ca34b35143f052251e3479b18d02b46cb01c99c643bfb10d4430c135aa863fc210781cc81a92c4fc3bfd89cc1028d6f13c81e3243d032bb79c4872ed8bc176ab4ee0aa5a0bd426721a0b238f316e47595efe44f257b3557ec6a5b4439354a843a8b077d017f4ccb4d21ec5d4210609d86e95ed4025f33b1372495729be442cf7ba0ebdd8c1b40c7aa41ad05d7c855a7134df9f06346ba913b3900f0253f7d1e8b61c84d671c89ab57790294e0df4d007a769257055c5fbdcc2b3c459cfa34422f5bee4dd33bd8b1002af8437f6e8f1859be9dc3abdf22ba29bfe3b347bc1975ec5756f7617f3290b641ac8a2f56883383b34856942fccbf785cdbb26d8b02cb83436429b1142cd063a025468d87bba61422c9752948566f0f2ef06bc846947a3f41028416b3c521f4e27a97995b445a936ab10984a3bf82e298d04fdfdc917c9bf203c7da4d82c4fe2b9f8cea3c867e766ac94d888871f901bf38a9f2872ddc16dbd3d38a3104981fb674b3039f2ad8e9b74ea1f11eb4f62a3fe9c52096b68e338887db911e34a8dac1870fe4c854239ab871c142340609bc7ef487af9215186269eb88048a23466e4efe6aeae408d95b8168e700782f616c93b5346817fe90fa36e26339dda5093089151c8457c989f3294e739124818ac09fc7d35c9f005b621b7ccda1bbb90599f19887c4c1071d0c3f0ceacc76647bda950486073551f67c0256fed09bd2c54011331fd1708de4fbf36ffe009b660ee6f1773ace43c665b8143e07bab80f1cee87a651bb4e97e0b86978c3e172b7e7745062947d49da065ed5cb219c6011bd822dca0cd082afc7eb949f2c64ae4282691d45cc94f65ac78a9ed111a0bdc2ee2d36fbcfdf0161d8f8697b1c4985db1e91108753a964b428ca27d3c163eef50f44f02b570a2372b8334cc9dbf276304a9f27c2b2de2f1eff3ae2ca5a03e54fa7fc2871c3a6726b240e28a5f40cc76cb7e6e07d7f6efd341f0c725fe524155d07828ad2a22dc468397dc041a996631a6aee3d8bd0ad53815bef87ad24d16b37f9435adf1ce512803f6cb5ba847afd46693d7f5ad11c1761018bacf01105a4227571a7bf28b40253bad304f1e2e640350f9d966ee52c6acca1b645fd4a0b76934145c39b2351a796ac8e0decc28f6aa72f80d0391262faf74807bbb832f0daaa42b3669cb4bf58e987b410064a16fb23f6f8a3d51f5c5a6a11fcf2ac383f8e999fa1915428031a2a455f3575b2ffab9900ae7e734f9769246e9a02b87534049b42749b22ae94763acf26a44bf1f66d2a6a1e1e56e874d55d79fcf6ad94042726e2de0474c9978eafe135580dbe924d73b0869a63a973f8d1c744fe8052bb3ea6f5c512fd6f0ee87b6c38e13b1c7d925f55691709da1b8b1b4079700d1c10826ac4601cf737a15c1531901f2ce0c954b6a32e83f80498e70053eac974e467b4b612bc061cbd30c4ed056600745e8d1cb78562dc6d6878bdeee02885efaac1c61282574026330da8ea1515534d140d322f2de54002db6289b80268abc6620449301747d22b467f8d835e9174f3c6d6fdca26ba59322b26dfe48aca349de532c72e9a145ef3ddc4c0230724911ef43606de53e32138c0567e823176ffa5061ab040c157b7a8fa2899b1d9d69cac49df827638a231e2c21962f4528498c0cd99d2f2be025a9bb1e26489ff1f89c9a30f76959aecdb25917499e3ccba99a4e6524243e6765e034f40fc3a890af515713c9115f01599898eff9d17f8278e32dc2e42be0596936a06db0d01e9b6190114c3e16634521b8edadc8cd1c24889f55d6437f8431935dbacfd579c9494ffead0a67b28955064460e414c6b4e8d9b030004b71a91b377c03cc3b74ac6198ffb55c8d1675914341cfe491d8ecdd1d9d0df9860ede5198271e5be6081231b07e0af1239c10e3df3a6ebcbbedc88ab0337952aadbd6ce5f67183a929cf93d568e5d2697e1b73f8a9327c03344ce95ab9edcfe43ce0815f455f54f5ed0cfac1035cfe318bef8319b1110e03dc60bd830441140adb4e9f693efc589d9daf64491c6b02d9134e0041b4f24ebab3be937e384af8696d99cf91d782de7f6e750e59f37f0b5c900366d6136ef4691d3d8eefcefa1081abfdf99c64276f73d3d03efab628f663c37719a8ccbef6a7587a2e79e46f287fd5d54bc4dc99b5f38dc6ffcbff671a5007e7789ee832f80494f6fc10003545335dc5dccf020a54a63a8457ed8dbcdea696cfe4c18d39c4618d9ccd8b6eccb088b808e5200ab677b0b2bc456f83fa2d807cd40c42457c2390c11a8765bfe00862bd41f417577c480de5d21dd25a6a563d4ce16f3de7f45a252ceb2cf6790c9e2c5b443c7c89a9353772408be859d3a2b7b00164dba6969bb30d50b52f5ae2afaeb2f1b659452e3d18c8f38bd1e68fb7066823e7ae15a314dae52bb17c4ecd18573725cdb599aa230a8eefefc27dc847ff90d2d53c3e6b61e01bf9a336e62cba89a915b87f5efcd4812d823d06cb0bc752622334a07a697030b7183fb07ca7347e6305ea7763447ffb6a08b15709aa86fed4d05139e0d88255ce8c86ae6aab8efe0925ee451ab39c1afbdc1ee9e7710dfea3563a36b5a7206f53018eb18883e8837c690cdbfedff98416e81b83448a9c3ce349fde76664e4bd5cf34bf924ad06e5d9492b457b86f8f5069c49380088b186d9be1455c9693f947d1ae055aa49bbebc927637c9978e7f5bd7b10bc48f28c3a7397ef888cc25530eb3a45497f5bc48849e51a1f47e020877cb282bc7e3735a198262d2ed443ab9c0643cd0c625c264f1532259d4463792c60fac96c1a0ded244e60c85e2eab2d1b620e28f05284513540bbd749fdee8aa74d4d0f43e7adf0428c42e7cb0c4b36c8b9cb87f60101b92a0b7e9d743be0e8bd0ff319c3b6e5e568cc936bfb08202146a6213a1d00a7fdc80e5c18694a4448f64ec564b915f0baaf88779a1e33525a4e59cccefe2c0d808f9b8d6acc474132d44545091493aad987fa0d83ce38eab65c011f12b07ef75800a65ddf2d0040d5f519f7cc718ef71fa07cec218260d87969a599518b10de83f528167e2afe193f3bf1935d57d3eb7a87bf6bdd4783eed389c39409a5cff6a374b23320fae46803adea854e3537cd3692c2583633129412e124d83415961f206c0a7aee30dea8c64fafc0986a518608d79fa245e5c7bc0122dc3c6a3c918b848f13e557abec53bf49eaad73ceec7cef948508cc00c637e704099c123f37bf451023f2334b70b334386906e30035c81af888e2a646f1d6839e87a298d06ff7b4c44a9b26523c1dcf7a561958da72815dbf254411475ae7b8fa0a35abe371296bcbb3e8d59ad011aa89bd5e483e5f3b99d39b855e8ae335d2e15573edc80fd6f50c7df62f24c4331009469c616710e79fc44d3289d3e4f8f0760662b8740432751382c6f2e0be52c90b7ebed9b62fe2baee49526719a61661f6d6017b1834c3cedc6dcda6add4c95636af35ed03e4c55073d139acc6c591561708d24e4f6e88b6151fa53002af5ee6c6ff4bcbfc7d5a5638c3f1fa03a854df555642e20a6115b679ae88895ab92e59ad3246d2aea9183be8a7a37bc31772b8eabe5b55db2f464aa5006f193d2b634d6bf51221ce0ae8be3153994e211bc134b07679a4298662240c740b682f939c086da3861c1b5520693e86c2a012d51d49a87a810836483dbbfbd67f9c7441559848657363505459da7b91e3a5da19d300c32072794fe8d6ea140f73ae8634403dd35061a550fae013fb69385cb6667e53b4c1c9530529f2253185c6817baa2abe3b327ddaa11cb90ccee65e0a0a9782a97469fd2d3c39a89724e25ec8056e023b998e6d1d1d5c9ed34d0ef942e9ad5b6177dafff75076855fba5449f02076a72f7b26722300341850e915cad1add284d1e32cc190196e4c2de574892dfdd7ca9d0f7f5e6328640c8db3c80dddaf54280ae5e8cda01a479b62e1c406cc69759d45b5a0799950cb20aac9f74bd699627c18fdbe0359cf09747198ce9034647a1a222ddc38162909c25f1f4a946dd840754a0afe433ae50a63097a177ceedad0463c5448bb44e10d0e8b8369c0626ff1958a409b7a948906ba604a421589fbae2111f8a4f954ff22f820199903f761183c4e56662c8143f57503ab0d79f41f0ff8a2d7fcb548e3690663858ca5599235eff7eab27d82d689a3b4a85ba1a2a07dfa705f27278b3f7577a31c0973d6da458b10134c18f833ce195e9089901a21104228182be47db434625e490812b774c4af6f99e969e3ca8c86d0505865da4856ad67cb19222d9037d58abef07eb4f916acfd47dc67e9faec311a7bbbe9c2ef9f3cab38bcaac1a46526aedfbbc498799a26454b12b7fe11a55548329f77c5621031c1c822464c62be449e49157eb2c78bec80944c107851526c7bcf57fc112020fb86b13e83196555eb2a07ecdcfaa75cee0f8399a972529a746e5d3e82ecacf21161c129caa8aa0947b2472c2eedbeed6d4793616773d36b3e49adba6ee2906bbb942fbf1dcb901e11791a6949cb8f2b12ef7e964a4755eb87d08f51cff2c78c5b5f097db52fdd2adaab84a405518fb3d2e09ab6eda6d0516afe26a85050790e1dd382e56f135defee835723baf3c2e9abdd3149f1245b8c7f7e7d79e6bcf4864b1fa5d270b3bd9fdec8df469c323fa0c799eed934dda7d5858eff20ec09d61d4a77ba49e857c86c92609004df94e70c435347b7624d06b66fa4d164f369dbb0589b10e3291be0fef4473cc1d0cb1b6e4e5da1fef3dc6480b71eab0b314df8d1a56d2a989161e66683dd73ec7cee7aacfa211f8f9dda2178f338d75e94c0f75743235a1c7766e90b717628726a0d97fb62d7e9354c54892059b1252d8eb3cb321801a46370a772982c852832609fb2f276c2406e0b5c548e5e54a460c0e052af55db7869fb087e0733f470c5040687c9316f936bf6cdecfc93389b33273428cd79ab3c7929318f5244d55b4e5c9f1a542021d29a5406aebfce0a692ab4815ca6bd15f7a5fce2d71042299d1c4cd50d35de83d05b9a2c689143272de733db2b1370a4ea1d8190d581a82650f490c74a5306f7e67e162ea2fcd943e06c5b6677fc6a21f3f3ab71d8ccbd4524d614954922a16fb5b3bc390f368110056b465e5f43eca6523639641403708f39453c3c847b3fca602c0647b11698594d1e9334ec8185388f1085e98f194732c467c928b1550fd45db04567106e6766e2dce1ed4f267f4ffa416213c54060063ea9efa6979f12885ba4758bc8aaa05318f1d7c82ab2e20f5f55a6bc0f46cd2a6bf5e299fffc89ce36e293f9edd024faf9245811f187a95650e46c39215c20bd36ec3435e98d63592664391d5bc89ea3e8f7d103374f20107370e850e6049c0e51ddec8f011224ba7a92c6fd86a3db5e0009832b86ab73c4dad40222966fad33951923fab6b668a63212eb16a210a2f3c3b77ed1bca4c54ca6a30031c4ac6010de8879c79d3fa5aac1e3e990fe594ea01b7ed928cac6b80072b93ef5828361a9241df0a88c204df7e732f10988b52d46f393069e4f11471835683fadffc20959e6d0f64db1bbd88540b95a072cf73b3c0787fddd423fdbeab0a52b194bf26b64a75f0401989d51c2d160a2f2727f7bdfa6431a96ba7c2b00f1ce7f967245f7f0c421eed2e1c0beb4607b855502613aa58e27305af022f2134c820f065384b9c2e0ae8acaea0f8f5745de25b1d361ea2ef065f1b9cf60697eac8a2ffbce30e23f58c050fa5b2f0ce2dc93515880ca762f922346962f78f5ada88e28f6cd90bfd222b59fc82dce65362d2e1078477db403d601aff754435ce07ec85dba429cced626b8223a017a97a2b2ea47bf25f0d24355107a1002b3055fc20cfeeda8bb7dcd0c0daad9f993575653744caaff5e6830e1261acc48f13e35b62a9232642d8694a2bfea0d16317eee4fbd968950e9c8fdbf711dc07662b96a53512fd7bb893d39155b35f2d089946299820389ce003ee83deacdd0d27afc5cf98f0119f5690a9cd8b73de03aba8241db47cda13caaca9d2497864c69b00aa98d199833ccafbb93a2c7deaa6a34f2b312dc8abbf153a0ed3ceb001f0c3776c0096c237227ca25cbd122b7d8fe4174e23f18876761a40d717485f20d52156b545ecad6b4b2ef4f01b18f292c19d3d14d277b4b86d13dce0c31449a1878bfc167c49baa4a884772c37ef090b08ab0f801aef0a5d584dc68d9d76ddee4997e9e86e4b7b1c17d095cc05bc5d2d892f067b5a50180eb227f20b35bcd2c1ed98c8c5399491e88c26f19538bd9dfedcb0419307b051c812fd3587fe05d8f274d2a02d7eb3f4dadac502933fa9d54ddd94dec5daa22d67454568f1f17b1e7459641977681cfeb00a1f53735cec2d0acd304382147be15234593ef7a56f2cc1b3b3748d504448104f69571e0e8ce6f05a76226f7db7903156f3ff7595a49c9d677273d5321a029afa54d7cd4c09291a7d8f97978711226dbdce4841f1db1c2994df883af24782247409efad04ede5db83b6f795a18d663d832728c7756eff98066b3951ce6b473b8ebbaa6ce7b4fc1a79a42bdd3122dc1b8be2584d95d5b6be1da7bf939dd94fc6592785d6a6f9d4d51866c7b2e3867fd0bc1c560277d53a353518b0513f11896feb372c31eb8d6c7660af2f7063b63e88398a3a879d1d9b6d621e52cbc519931951118ec8038fb902c31e55dcb2d8118ea72a3846f9a95d5f77a7c9e0f02b482cc94df2e0dbae51b2122af8827c9d6f3128abc5ba4ca50bfd15dabe8d964e2cf250a839279365db2c112267493a81283fde261d8fc80f0e46a15ac0f44396cea67c39a2c862d4a5fcd3e66ac8c594a55f6620273743b20233df0094750ead156f3147f5c70e96b967a1755bd3a0c988ba46d49654cf72d1fc4bafe6c62c4defb319ed46a77e3c2be81d673bd22677ba4fd5885e42e2a7a95d91da04293f4fb642b4c11a813ddce27c0c7ed28c0e0251aaf850f884720692a020e9b77a3931c95dcdeaf415e88b7e234b13f31034740003252a0c1b206e2d5ef55de0fa143846205372481cd4d3caf490c5d8fb4f61a76b345e329208e97fe2ceb8543581361fdb2dd6ccc061d70002127a4bae282cd8d4139713f99d0969afaaf8daefea6fa7f2edec8a5df5d9b48e9d22ee84e96838fd86b8fb890ac9d198da06cdbf7b99ea4b1155e8dd954e7641f1385e5589b58d9193167f746d3d4f8060890dc3bbb6664251ae077812f42ea1e1a57325c2f73fcd674e6e6c325298ab8a3d08f91e61952bea4d6f81a6c7b2221ea838fe091911118cf487626f052a4dc0a7b43c2acc4e0f23214f9b52a6085287d0303c803d86a111b0f661096abadb368e919eb6690043e0f794306b04ce8acb3f46fe1ee580a85d58b664aac9a9d41f25e6789e0e6c90c72a54ae05bfaa87a7c90765060d0887cecc6736b38a38f7b0bd819342cca1a36812b53e2ed5bae789120da41dbf7e561dc5a1b8a89d146404be5902b010a0be63a03c2408c9f05c7f6c09f4d8aa390096e6f438bcfc4c14fa7c86223f22699f174d83b0d7d40b0fc647c40c5f662ef2e548c912914c3985018032744ef3cb6ea85d33e3bbff1558fe2c7f20aa5278f1f96d35d65d7004d2e1dec7524e33a49f318b202478f3303971f78e618a6e499466a2108b5f393ca69dabee72b083107d5cdcf95003d13701899869f9ddf87d23bd88a69edb65141d4f17286ae5a21084bba19cb7936e32c2bafcdf087c9bcbb232b7d3cb1d55ddd35d1bfc5efba36a1869d2b2d578f3939cbae0b5f117a3ee96d45e99be1201a7bee5a30142abf9d2c5821e4a28c67223992dbad6a6eae1f4f01b91bcb264e6a548c3930b7a651c31e0ae949490ba1b0aa4287443bfb4166876422f386c314484645e9d154e79290c2db109dcb4ca06d6f7438a69226053d140fb7d81f62348810824480ada64042bbe93def4d00b52d5c593ca6b5bb029e5a4c0a1232a238e8ec96da0ec3d578df4bced00f6f4cb24d37d1c3368fc76a2e91fefaf3beb3dff931ead19fe8d9e6caab0bbb5f395c97fd63d074a63f8c27743d5ab29184005bda4162b98787d1e9e31fb1319963d12d2899a921f12ab178f17dd82f0e4e6fb2e3e87af90083e3ee3f3783a610722edf5bc47ca8af5d7ebf02e29eab1a9799b9cb4e7dfc55ae7131652ca00aa1c9ec0acec6373e22823f31f2a0a11b0e8078d0dd189feae0f5fd6206ed681203f206a2442a807113dc5150e676e2b324ff24f377de80004c51f60b79433147e019151fa15e40c7ed435a214a560058391b1f1ee332c69d6bf4a3673999a474578a5b5a4a0cc725089d8d5f366ea4ea9c2277c526afc2e8a464b8dba9bcd1362f77823e605dd1df30a48659a6c670d5dd31e869b8259662d45418a8871ad70122739ef5e4440e22255f484d4069a8fc1f2be813da9db3fadf7730026f22410a1ec085f4eab2e2da913f150ef4ff4d1bc2b6a9456b1d0a27430ee73d6ddb5429f0f750058ba2f309c236cc71e048fc608c00e42923ceb6a2ee28ce98c15301543609155b9435cc73928bc9441e1ac95f38b91961a927a38e4bce446a1308c7ddce890f3cb95712ea1f48f87d287a3ca6e5cf5bb02aa1b4f51005ac2ec86588ef96b1fe2c778b50fa5ceb8fb57c0b1bd5ee482b281bb1df048321c0a354e6fda2d2a374937f6a734c38a91e124aadbd6d20054443f1505061291bc42ae076eb7a9b98c1a50939d81821496979116ec38d3b462eee64eeb6cfbf87526a8a5cef42d3c33c9db0c404081607f9654650b1843e90429a623ed076849170eaf7d936e93a9a0fcfde99c192d0c6794b72f431987f69368a5c4072cb8c1e81c046415cdbade0a28d00de3a74b62b331c5993fec0055436da53430026fe9ef54750ba31b11a7544cc3203022864678d75116d5070254d178f27d950300f9e30829edc228915c77dbd77e034ab7f1fd39564a4c53c01113bb5b6300b66c400810eb6d8af3f4e475d390b20c4ae5d8f2dd58af51068607767782799120962f0934b82423498c6df28e3bbe2a1cc3f52abc974a85994f8989c71f99fec8f9b591a3ba3a5199f30d1f36ca9ac8150bb6cbf95e4ec445e520d176564b2ccb759d95974820b88f946b78d35fd970e68bf6357e6deaf7a89067228209174062cb9f3c4890db8120ee7ecedaa1a226778247149d9192bf6620f8aa3a850a165452456e7502688bac7e488efe591a7dc19aa70a872f278916bfaac2bca7675927fc2b5df9b32104f76dd758dda00d7c60eb8d5f3c8a07950ab923bdafca4d350e37382461cf7e2cefc52965012e990bc35df04b1226cc3c0da3b7644a95a30e0e9339616352af2d5947228ae8605071cf6adb59f5607edcad5dbc197f7d7fe7c82a373286ea2bdf4c96522c52650e6140e79b17caeec665a24aeff46b5e3910efd0d9c6ab4a18d8cf1778571237cff9f48e25a7c2b6f3164518303f7699cfe106d54b4655393faa923e682886752d434cd632495b767d16bf86cc854c343eea653816e861b99ae23a12a2171f499323728511d905a387c7d86ba9e7449d1d7e6f922b0b0fcb20b75bcad7a21886372d258862c009ab3934fd24ac7a3c4d214db74ab9ade67247f95fe96f4312e8c1fb339c493a8ff8d287a5c2be5f00bf52117535e40e6f8d14941831b9109845b481d266032f01b97d759dd4ec81635c23f5a230b441f29c8cbb7b2a6fed1efb3ae9c75bfac75d34e51d9b593bd4d599cc05f16d574ca171a12b4c6c6fbb2acd18d14980fca1a91a2f674584fb60827d66da9456899ab13c4c6a7f12bb3d451d8a14a8f1546e4ad9730755a89c0e88d7f96fc3a8c48c756efe70da501f78334c7af0423577a2edee7ad8b6ffa935c5487a5b6632e72b3cb73f567b4235ed929997b27b1f601649be98a4dc120da4fb6000f36d5a20725a33148e5096948c2520e418facada6dbb946ff7d2ccf94a99be97c85eafc42a16d004bfa09d2a573f417c5e2fa6f816c6dfce5fd9d2fb743ae863af19aff789232ddea65e263c9a711a251f294f91a149ef718c5c162aa39cbf7dbd0918105e21db66036aaf9908e56565245fd49fa025b465e765fc80a719eb29a411985b2369a4dde272af551ca83dc9f039e7d6ea6f52212e1e49b7515d49310b6c1450ecc1c8b9810a57e9631448bc0e633c20893ed2e8772d0e1c979acd21c295e12603f860669d1360e1b23015208da02d9c772da4cea4c0bc169c66889745303cc63f62b4f02d9eb9aa0a406a931b31700000f19d1cd84d6ecb34f88f48efe3f8811f452d3ae74407177ac9df0c37b04531bafb950f28ef776b7474ffe3ffcb477f1237fdab62a099bcd90b80afb7f341b06bfe024fa1d0776683777f0aa00d95b9069f407e4aa9168ed9d84e3f9ba548f9ccc193144bb837a49ae8a1fd0cac3e50d8f7dd4aa735630a56ef4fc59b9deb0c6aaaf52b02c0a646a29f947a5279e72235b7a468acd5a81273ade86b7d0305cc28549a4ad370d7456b0587ea4b4dc5c04a7683a5fa3fff5aede14d7e5093e9f1842c50b9db0a84916dd36848261ed64ecc7766975ea1989344e87764a348ac9b541cda2390220dbddef6da9f79ba89ffece5bd83c1bd90e03fa1a425f3005b6c559e7deea23866588d99e13761a55dee342c549b9957b8ca1c52e98d41b5ff7f8303c4b586020e9c4f57542657dd1bb31987aa6c4bc29116dfb88c0a4f0672a25786ce7de8cbf8e6e6024c545a26e9c541bd6c649a9ae79f0af48e9f376a47403e83236ee56daf06acb67aa911dc09310b03b252ec221293bb4ee19aa881a3e910638f2da75021f63ff1374597c2b72d8f34976805a0183a8f0419444c0dc520f6c30a6b253cddb740cb77c46262c6231d57f81ded1024aac5931be764973b12071715abe049e79358116686e38e8c692ac65cd3c551d1fa60ceabc151ab624e92a0ae867cd7d8a1a297d6e111f5f02d1d0fa220332fcba264b19104cb0b5fc94a6f0128b4f4327f3e8ac788d1c9391d0d81fac15727b0551b17b9e6776dd2903c79c7e3afcb552bea21d2626ebdd576c8e9b6c062b0791c28a0e32ca81a09aa5411d6f899831877c50286b8a95bb1c75e1ec3f8575dedb753e293a9d37c4edd374fffebc4325308242ea7fa38096bedc7631e4d7dcb72ceaf1f837011544ca5d629be57d9af4da2bb07b6b4812461b97df7f3bdd6069a0400c10856e88467ed5ff6195f7cf6fe92fcb262230f0d6b020a87e1feb17266b1234b50c77f28b415bb47faac0e1fe0f7100e6bb4d7c5c1a3709c497d35cd327ad7c13bc10240682aa4b0c409b63c81b9979b9af827d8d96244de59846e185de41bbd56f300d756ad997be78048191a3e4f87101e659f5adf4ac4f28b2879edac0e875de17b4157be5cc8ad864400f4529e1ba31d4a30a945b020ffbfceb84e69af65b2135c2225725bd3a0996b0a8bc50c352836bb29853763a5a26e28ee35e0bc5472693995695dc7667d70c86ea199cf56760dcb6957147b5f1c85c0a8b53682b1b8be1a5989034da1b14adf92477eb0764d75605a66592d8f6218823dd883ed96cdc0d77dbc0949c1580e748225cfcceb50a2c74c977e5f496927a09436a4753a7aa3e9b88ce288c570e25a5edbd09e2c60b05afd476d868c427597c54c926d4f0b5640fe4d6ae17a97f1115acf09cb6b9a5071110b0dfc24c4b87ac45ae14e0905ad7b518473533b0e2467ddd012735e510f9618b0dc91bc7a041a27150f55641c365f228f98329b416348f0ffdb3771d381a2ec14643b07433a50b9561c2f0b219c4d773453028b880f05d85f7bb81781523bb042a11099f20421f9ad6368f54d4da42beee3f4e10362afbfc53f1f4e14e67d2904af78b4ae43d70bfeef40a45660480859f76a97840ed210d537f8649292faac59ab89f0aa15c6c8686555800148075d14ed856c240ec9165394a50fe5c41046c4d675ae656eb0d181e78ca62206092a90467bb64a67804188a875e0bfbde4b46a853c9f89ad108fdf121886830387a75aa1dbac15ec91b53c494312836f353903f01c2c56e4ff0c4e691acdf12901cbae71c9de71a89a29d54522dbdfc72cccad520f64425fd9e623c45d9b17eaa29a5bd53cf52b4be821ff397f00a8c84cc40b34c8a4e8af881d49401c35655e9e8b25da222d63ce07f328f18846f1ead4b893681c872a6d305529ef725cfc7ee3bd4acef6475f246d82f142e447748318f6c9c27bd3f7bac8982ef95200a3001990dd34e6528c754aabadcec0953bd808a988a31cf96d526fdc998650d51dc04e0787140a4efc27a70ffb3a557d8c10daaefa34c5d6e5bea294d00fd24b864cd06b4a6ef906e9af64c3475b8fc9e3ab1ebd62ec1ff13990213312eaa21e1492f62167d889e25bb8678b3bade0402d783f521a252ecc8b962063d4cee9f4610705bc8a19149e046a296865e8530f46575106913d2e6d3a2ce014ed7b3f87ca8ae5fc60619256a7e6de2f1911a7ee99fa776ebfd218ba686e71aa835d0497aac95e96904728ddab01ab529ca94bc1e24c8239912046d30857475624b23fc8c526085390989346e35c36e0c12e110e573d4426546136217730b508a373c7c6f2a9ea883c9f3af54230b7783c96e0436391164396eaf1ad0039eb21fc68d164f9ea7080bdb500ab616bc82f0bb295a45d0ded218a4574e566f88f01239d56a5970e5aae89ecb7f0e00f7a9bd9dbfa654e009448d440657edf93705986855312c546864c6d7b8f540eb32c1951f634434d5be629826164d61975d94a1a6db8d6d82809c522a78128142d935da60a4f6927e0125dadb4a36cdafc27b4b7588702560c6a09893e5de6053ef0f877d0d0979dd5e8ea5f4a827edec39b60828f339f6333480d0d60985079f519fce2578bf1e6a58d010e28689b257a16c4667e63a09e67b36670005f3861a741b8f43cbac465a6b94a5145a5aefd303f80f38eee3605c31c6693b38f2570e46abb1cd743ee20d66029e6a1e0e7529196b668084b8066f075a20248bcf5bc3eac7880e51a55e2030bc66a99dc08c05ff3ab6d4bd63b5620379a08fb44addccca77c202bf529e29914d94c5e008aa0bb74d7e4b87b0794fac28de96ab63a621544bedb0df29bf851fe8781906518adff7dde62d9e09c9dac95a633f8134e5739b2b0a4921245dd7c9df90c922d2eea7e97e1482e0719a23d4c0ad9b61effa3781d8d553c3e0341cc2e810a33bce9000c0bbdadcd9dc493a8ab98fbf0005e808dce86c45dd4e80563262fb56b01b10ab88f7cc55d6b3df42b35130eff707902068d41b1c7908f16bad8f73fd45800b906cd10cb02f882ef05cf6f094691da10d050aaaa8fb52de5592370e05dcb388b92bd36e0a364fce8297a75577deb9bfe44d306608f8e4930998288f1522baf6329d07d083d72176c7720acb77c1b8f12ac0807055c51e3b314ce0a546f6ee927a3aa3c3a11658454d6386e2ee5053377d939833c611c6c99e21876da4ea8a196d3c08cd8661a5ab94070d0f2f79b908a7830a4fa967b5ffaaaec41fb9102b6122f18198811d2aa39d3de85fda710e6ae9bf997f80f0c6598dd17849b103068e784d1d3ab4981cf6dbf609d021d108b1c0541df5aa86e24623bcccc9f21748c264cbe6226af76205e6df16862f77feb0047cb14f4455e64acf0b64a53e706c51d71981b12ec3d469c5e94433f9cecd989fff5b66b158d9f40195b5f583043ac6f7e04097ce0830a4a7d54b6653299165f1525dfe9002ec4299781d66dc42954b0ae84920507a0082ea0ed9ad2a19a11a3100ac244cca218214511f1c8de40c99940c24b14e3c355652fb2b9f07cdf558f4b4617fe826806814ba70f129ae733ac4a42fda9d2c426355019cb2c829e181749832d0ee9400c447959045c5b6bd8a9e6f4cad29bc0980497e2bf50250fb69543a3d34a54296a680a1d50288a49f3ac4442f54af743ef56d756a700651d78030a9d1c060780caac0e55a95664a13922fc5facd578b81ad3c543e87f7fd0dc4020aa24692f844c7d6c325232020e633a5a50dca6bb2fdb17718ea1221a6badbfc8e8f02f8e1f6ff797b6c1fecfb7df6fd5a3bd20ed5c77f2ef680ac0892bb8650d086fd82f9566cd0a7101df6a3f02f888d70748152305db8f140cbb6ee5c738813902d7374f088912803a87ac437baf893a376263f0f95214511ce50546daf7c52095d9eb9a748ed3659507afeeb223e53595ab01421bb7d3f89dbbf4f101afd33eaa8d81297c27242634d0197d6b6d0bebf7d046f8d20b57ddc10df1b1f1cda7f34edb45e1283834d9672700a8aa6487711b60785e38a76b5e822c095a2491a55f768ec720439ad282402084a412d624db84e11b4df168b27ca40012c09332f6ba54139252d8a04c7961224afd0a4cc4831f5fe4078e063c31ea07df19881c9e01761e9dc056b9ac507625044be1934117c053633849be9882cf5ff441fc031e1736e9b472da99ef68231dff01c47e6daab06adc415177e31ba85f0b54adc87f9ac8bb9779c8a414ec1f2d9b621936082be44eb5c6ac11bdf1fb5cababc72d0589087d9dc3869511e15ebb00d550723d1cd48f627a940e90186ffffd4bd5c18491962008f1b41b44451716ad5b2e8c61889bf5e4499f35c44111893efe204eb0d73a55fe0ea42853f39cb9e6e147840bea02f2f1c20e5f529062541cf4402150d25afed141274d7a322373878dbfc14410a0d945bdf7984feafd773b5011efea62d3acfc9ac3c82849035d797856a1b06532f3aebbbe245b54685392e86bac73d3a709b4ff8876797f457f91e2a6a307a77b04e337ed61e8001e3d7d50860e6560be79a1f13ab548971001fd3b8cd9a214f103f45596c60603a51a8bc7e47276968b15455b77e6a81d055340204a356f774ab25dbd8a3824b60c8d614caeabc7e83a377482966027424b117a183a87b421091826d3002531a53d6abd0cdcb83fc058a99565020c71376c1baff8a8ca493dbb7e2d4239490641712a09654a56951f78a0b0c7101e9d3e9e001ff0210078bd27f7016233d8f199d13c3453f8442cd2e928733434817094060fd270d04aa028961d0c40625d02a9a8929a93442704b1595f8b6468e5b5b65224556601e1d660cc8714f25d2ec4f2e7ec62f060c996b3e8ca2d7295b9436f642493fc6f9b1e738b7320101e611a50a7f8a9c8e819e9b9031a38b14d38b55c5a92137336170e45ac8e773b83d41da2079bb9d780cd2cdb11135007d8e0d2c006cd2eeb25507e9030f128ce15832cf56127559ad0c27dc989a0a17a55cae705b2d28a5a02b6afca439d137e0d5099d3f219b5087bfc7813084fbdc7efc9076ca171b43622430f77da125ec531936bef8d99c3954e1842dcccbf52a136bc26f0ef628e696d84e59daef2af2b43f3997a27d69b1d2edd88384f7e2e655a71bc4492322c1ba7f6e240b24d4b9dcf89f864b3e30da7e1a0259f0889f4f6c976f29da80f82606a82d8780e38a6b0e54eca553bf80f4524e146282d72d0a16c6161d4c127306cb59cadf9bb277afc9c8e8ff0a0e398c58f2667245e78e722d387ba1fa11603bd687317a392e805ee4709e5ca179f5fa0a92ed8708d8df5aab505397874541d0a1a167e471b7d458319cd7e8f7190a9f855f183a4f70a8a9d477272de4117ddf6b479ed8ca8e954b5e1e6e0e8b4e3bf26c690146d7a053ecbbce13f10d3a7a1229b8199106402532a44ac63d9d7f42389f4bbf6bd12a58d08bbf3837a2200963a6e2034f11b664cace99d6121da1830d48564a144a49272f9cb3292c32a1b12a27913cb36d159eb3998608015ea28e33bcc1453d9ac996fb046d76f350028518f933ab40219838b499193eb8eb73321e3201894b2697659f6975e33003677a1a2a19d45f33e0b9e1e7d996a2f6a1e662f048c02d818d0ef0801182cfa8591175a9985f8466d352d18e3eb70b5bd687c0b5108f7c5828943e998a53b1e66591035954443ed0b173c507ea5afcaa7591357dbd01d08ca15b2cce4b965ee8f63fc10ce4046e7464249feeffc6828ace3f7271f19c92194ba9a373369c2c44ac8b0ab32f8ab5065d03b519860911f3e3daa8d42372fc4ffd37e7b9b4ad4c62250af802287c27573439dc6bda5c6f3c8e9de68118a280ba6a58d6cf55185b3d435453a022d7922bcfeee2ea95e20125c7d4f09851a340b26ff67728a818bb8372650ff17b6ab2b8df920856adefb48d18f8a4e86adf03802f140b90e5b06cab7016f2b8c4deabf59927e44fd564ee330abf02015f3664612f4ed73e467b71d996432bec79d2b7851cc79487fa8a7daef688e841bc92ab0fd208e10cc79f8f4189edb8fa0493083631ec46fd4f0c0ba765521cb4b7a7b6c2654b58bd411111260a003377b853bd84e8b5562f40a62578c102c630537e24c72a1fa4804c90a0c4ce009bedf6be841485201b9e770f9fd40c1129b83820fd446832751814cff441896550f9f53cb5f1da6f95c04acf76d3e61b61484d5b3e50a18869d8a67d156ebf6df97e03d4068bddb0986af70ad8aeac50d6b2c40479af20addd34a68dd9968bd3b10030a9bb5f21311a27ed148c3b8ada332467d509765a15a8033047fcf41af1e81ed6c06de193b0fe54a328ce4e9777344706a973c3dc2817d8a153886ddc1ebc6a04fa7e2bb25c3052a2da743229b453a8e72ed6ccbbbba67153ad103766581939630a478b2f5722a2bad65e8b13f21e2639721de46c3160c3000240020802d10a8a9ffe94e675101e0161ca197ae833dbcd9459d47d3a6ffff7bf9b082d35b2b7dc3b1b0b3d0b170b9347521e9abda140e9d54a4533221e5776da19142b6e6646afb2533ca1dc2eee38795e8e4ca22062f669446324d03cfa7cd22db9a3053f39eb22397bcb0f2e0e15088de99e7d0e91311d9e5e6478120591b349a43ab29495399162c1ed67ef424b6bcf2ab3afc7854165e440d6b06c55093a1c72b07986e1942a74d6b04e7b976558966dd8c675aaebc9ed5d56f5aa3ec7f58470e7e7273d4286852a21a0bc3a22579561a04d867312410b8cc40cdb8e0c11c3b74a1b44918112110b3b32c49d6ec72727299772479b86a5ec793c9dcc31f650c65668cf65cb9142b6c2b6cdb461aea484b234eda321795c48180af3ddfc7d9fa131278c61d91896ad792524779c47e69186993d0d4361b4aa25c1f3a7e788d4948c7854796169128dd8e4c21cb02c7364fe748c9759fb6ddb5c90b9df23abe14803ad95b3cfec67e8167a349f694abbb5b8b5d65a2bd69295675ad65e75d3c3e8eda64054ab3ccaa31264ac5fb247206326d125d11119eb773cfa4559984caf78ac9057e0d1ab17c5d3a857aa703ae9d5f31ca35798d147339df40a9b2bb9e2e945afb0cbef85953c8b482351afb07b7179f4aa7bf7e9a45f5d089d47c374dd4bee2e7b95bbd386d13c95020cc0b2db0d1f93fafc3ad9467a47e6e565b5baaa316d9bc41d53332ed4d0d0459215785c8d8b5dd53cd82abfda48bf7af5732776ef432aafbe2bf2a2579548eaa8dd67ba817672ad7dd42941c6d01daa84fa906b568772e5289151c6f688b2ec98fd14a9887a288f59f6434f77e80ec59efdbc7a458bf48a5a1da983fe19c3d991a33c6e3cd90f15bb229d3b664778f2c4f548d633bd17118ed52b53743bb6592d456fa5146732d34a8674f1b468cd9f1cc856a293d38b22777859a6cf805442a6f20999ce1d3229d32075d097bcb87207a51f0cb257f68596bd02eba5fc5ee8833070356c335deae252adcbaec6c51acf57b07f9369e815fd057a453fb369e87e86c6d02059f496562e4c297169a0d2d2beb348044d9848b203a32d6aad54cbec29a51dd74d2d86615ba9f4babb6ab52bc528a514f35eb1135efd6eaabb557d0cbbd492a06f955003091f183ba836c0811a4fb620b41ca9eb4995d75eca054796415b08655596415bfcf4503ae38eb3a8735331023276c4e6b183d84fede0be8ae40ba5472f27b89d75a6c8dd45a40122779d2976e73048ef5d8a32dbb4d8619062f0c7025c3510b9ffe8eee11c1f9b05b88044ee1dfe21a601247278bec4510ed5d018ee56a542c2663a911cc919118610021999beca1879d4822b8468020a2e74d003d1bbd3529a65599669783e91fb43d4a2a30ad64f8c3bda90ca1483f57307acb85f4d4eb8cfe32c2aa231f3557b10236797c6cc2124ab6f02dbafa26e8a49458cefa428c552a8ea3a8eeb481fedee715c67c31dc752964d77af678d8b7bf72d78b201b20cd22209b986a04d7720945583889cc5353a5056bd1475aeecd5cca1b78981f4aadad0ab7a7ce3c39dc73adba9cf2c06e7b30711712c3831e8a3318ce333b10df60ce360584559f5004766b023f647d54abb0c52d4b0762734fc528fc91ebc4429facc9b9eb8a00da643c38035bd02c19aec32c81f4e6438d7e34c16846e80501726776629522104610643a21417e00212a538ca21da02e28ed288be66d72150da8a96ba9ee7a55c5048420e8a851656e0700014211e2e986590164968a005132824618935929c2088244388e07a5906251952840b8e5ae00221683f5c952c835c2074840b62a0046c524db36ddbb66d8a4d2deb29b51c449b940befa6567891d156907979f16ee08219d04ddb7e30c5bf2c837e10c591367b4e6b552a8cce592bed0cb39ab4de10539b4d336a2ba665b772f532135e8a9d6295ce50d6156732ad356ba7b59d3dc3a91da49e22420a89cd6e76bb01a5946218866114a3de2d49185929a594520cc330ac669252cd32b169b95208f497799d462a6dc074abd79dacdd02a579df0b19185a76ad0442af94f374524a318c521b1881c540cb5935d586993545b2fa9af6971c615c2f87b519f6247bdd962c837e5084113f1892844b3a03c38111d6b8a92c83b2c042882c805e704d590665114576c6bd590665b10436a4cbc2079523232c96b072a4040b229494a0048b21d4910e1653a4962084c58fa78417163c57094558f8b0b2841d1f3c312de1c90a323c3acc3228090fee13ba7a89c17929738cb77671e53bf44a4477b4335c95ea2e6185c9f344d0ad56ab15c4cbcaec0e15e00aa12b8c48a5aae8c16788177a539e97aa9dca3772df5e2a869650a54cb14ac18a35c22577f472ac3aa7ac7865da45a64156887153293178b2e8e121088c205188264089e24809345ca052f51a35f86ecaf352ab1c47b8638e1c3d68927b8997da92a852bef4ca524beba9d5b25b2bf58156b3aad51c2b8c7a1d9703fb4c575a730df5349b925a1a46addab6cab2acfb34647b2cb3984ab6e083eb1941838ee332db71df320c061064ee59c81d6b3c6acfbec920dce717010e060bb476cc6e5804b463cfb46cb6c092c685984138c1a3b68558c0985f0c0185832f66b7242a125214848d0188076874100fd2c8cd0322f0a009aa087a3d5b6985e92bee4a96414d94008426626041dc5496414db4b0dd640660174d5ab00141a8c9112b40e069d202bdd8d981182a4030da0117a62e78ac7703144471823cbe6846ae2acba0287c9841143bf4b002286096412e40c2e69a6115ab58c52aa558b52ed6dea0dc66b3ee9252129651d6bd7bd3ebbadc719bd56ed0cc6db673fdb6d9cc6eb6729b9d9a0ce9a41a4e17178b55178a55eb42c3ce2df6a3c1aa56b14a2956ad8bbd41af0cba6ece791c1d2363b063e15c1922d4dd6dad4a3565b7c4a0744de98dd1cdd16ca964ccfbe5e6de50ac1add5023cc88ca222eaec84196cf9a8c99af526e8a23b7020c201fcad50a489d2fdb37ae1b0c57a39b9bd56a657463646494d59e947463742377c81f2b46776ddc2c495956fadd7ed251b93224074cf6ca906b3ac10e58d32d91bb7ddbc835e85871bb0d5d4464c40d6bd7b122876d66bf853a32a23d17ba7464c48df4e58a65524aa9d96d65e7ce77ddc2ec36d46e50653abf08689903a58c5d86376899e21a30ac65f780f69b2528b3f7074a5ca3e10caf284baacc916218766ba779d3766d6d67c8ab29fb8cf620866a6ddb1a5cc963b56bd6b696637891015ae1e1c63059d8acd4d11f6513cb63edd6dacf1235cb6a1747d46c09ac52aeab18ddb48e63e2ceb7b59fd35ece6f56b35a96e18a55ba045d42c3d425b265165e541e3c5e5fea0e1e5a5c17955629e61dfb7a741eb5fce2d94c66aad097e1d13096be893bad5c6d3487ac7dd3216b97ab8d3e6086c6b8d0329385054815fa52070f25aec468cf0aa5eb6acf10642dcb38cb598edaec5f0df4d8b1394eca6d78acf414d32ec5ba764b565fa9a3ff21b9debbcf8f397278d84bc17dc1b018e3d6397a31a770855086b2e851a1a4acd9833be787e49668963e4a27dda67412b6b97fa1ac25ee5161e9a7f09e1496fe85f75d7de9b075f2fc68fa38a693ded8e6fba5ffde65de0ad4a67413c6c192ce74a94b7f61fbb86127eee9c52128611f7b9fed5df66237dc78e45ec52f6b0348166dfc2275d06b9fcfad619b21c8dcb679cf998747d5b8b2e1266ff7f078b30d2a2eaca16fb9ccbb57c3f6be76d9e1d1062edcac943abae9aa57f429282e965f4040ce70e57ab3e2490e4096424f0c65a12780b24b96423d45d94a0cfb421c1f9befc338df4b38d8905ec23896b2fa24dc2412f60161e86ad0803d08033d778eca4c63690d35297a1fd6833b6e0fc767db75aa5e7578b4925ecaaaf699762edc320cbb40af3af5c55509b9d28bd4913b5f81ae69b8825cf58a8cfb71955792d59745ab22529655ecb0825cf178b9ce96d8142059f5528847afeab5da3a594a18b72595c13e24b73bf7fe28bfc8f516903ba4cc09eebbe3f860c7b1019c10b53c422fd21ee901e2276574470b44c95448a618ecfe93476e8c27799e1b833be2ccc8f595870725844b3f5a9e0eb3ae97b3d6b63df688e571c266b5ac0ad1187b02c99a7fc2b2e0ca20cf73429c1027c42375cc8e6b0253d2edc4cc15743c483a25dd928691414878b2c2d8fde49963ce298edd50e671f5e8fc14513204117936ccd82318db8a3c1b66ac50f2fc1cb1188c9a13bb445e42ee3832458e262be471f278e1648ca13c4e33f2b4e2dedf6f46db91e511caf34e1a4633d28c3423cd4833d28c3423fbe2993c3c580c5e66804a27f5e4eca7440ab116d6c25a2d1a23457b552dacc78ae9243b716b24655dfc3586a413518aa48fb2e8c73d098335a4977e31184404e28e3d647b94604a2486d9a131964775afb23cb743797e5ccdde99ad244fcb4359d3f2603d02b983d20d049283937c64b50cab44c81df61a68a0060275c01942eed8420dd8209d64eea8d5ca1c0667cbd5ab7927d986d2496e15d129a2d33a2f23e0dc41025342632ccfbca49687a7d6aee8eb0040e9640e8d827d99e7ad8655214664daf50fbaa9c51648f44f3ab781649d40bda455368fd38b72559748da4001d700b99b452459fdae8c064294dc44181b0994aaa80e805290798017b90fd464028991461ebdef05860a32bd1c4302492139241ba861465a240b35cc487568915ed230b407b979d0404dd4443446355e55cbb60162a8573a5fc8ee4ceea0ef21b3ea33491d9a0b9445858e6eab34d0065bed56ab630e14a4d8478bd96b63c293b9460c7acacbdb58328912459e9232a16361c1a593850577c3610a652dcba023ccc8a6ece1509f5d7e2d84aa5eb97c0b572964614aeaa0af618a5481aec81d32866fcf2885bc5e8596fe50f3103da393395236b8f3fdee2a5a3b2c46b6077a549641623c912fd1a5620c91e91f70b30c0a838a3c73d2b19a04aa453b4c5a4cfa336665c8059b25794a2fea8f9119ab124fd0114a9047091464e4248fb2c924ca58cbf979ad4b93bc936da6a71e6ebf77f2178114e8108a9838719459b264b282a1dc95b0772fdda67b6972b7077d90b0a4ac1f979e3c9ce383ddf4ee5b483a0dbd73e1bd0d4bef90fb97f39d1e0b6d3e5c7353985373c2ae8b737c72723a3c4359358d4bba1f25501aa59b3ecaa1528781d04059a47bef7f1f65d176ee96147a5435ef4d2f857dd27d179abeb0e3708e4f4ee916e77c9894c3fdfb0d737c6c382c9ff3a7c13d0d7b131d62b1a4f5434cf8e25356fdd7d8fe7d5ce37aef5e3ae9e38b0f29ba1a73a7d84eef5d8739dbfb5ce996b32f7174db2ec52e9dde667bbfb4611ccbd18bb6a543fb1ea02d0ed49ee9b4f89d14ba883040fcaed322e95a58f33d0b6590e2772cfc4145d2b730a7f4ed5e88e36373df611cef62103be952c4d199a277100b737c6c4a18c4b6e78018067ddc73b7297dfbc5383edd49c7f13852385ff561ebde20d7c81c08224ab173717875ca926217a43627c4cc46170c5379b98044eeee3ac4040aa026fd3041e282668204496bdd584d3dc97d951193be47679ae137ab5b7001c2ad2eb2084a85f07477376ddab46977531c4cd5926ae9901dba9840e8b405c08d8045ee4b23b82077ab82a8e08a1b0461051231508308e9f504114578c21a2fa801dd0192dcb91afba19b445c143169c18b94259316b4f2bc97804ee668f1c10d65cdab14254932a5910b6e688cea5a0cca20454b59731e088dd9b014ed0c9445695501220285528a55203ae42007729450289d81c6580c65b240334d92c2a3d34a427530e76cf0a74987b757a9221d2348f0dc1e88f27c23a9b49b34cc38a90ef27c77f70c33a0c2b8e3847254d424cfb7ab68be72c6f37934938c36c90a10eecce3ec493291fc7c1108297da5781a0901156528ab6bf56a42a181c658dcae4ec0bc5d31c21d270f141a781a661a3157f3d3883caf840aee385fd308b0c6de629c29d650d67c1071d214b25035c6bdb101480e3a344cc53d244e9f360cd8f80131b850ef101125b3e620cfee6e5410ee38a10cb5885c73d68050d495171157ed2d94a2a5f525ae305598c78a861c19fb074a6d248dddcc11c6862964f4f5902c502086260b145f356e68cc8402c5c8684231ea2694ef47523ac493c7d6b14c5c54e4b18db85ef9e6b18fe44662849d395f2990cb934ee6e0ba77fdd1f4e85ca70a97667e3dbcdcefcf8ca5d4513aba93878e91c75496a164614a15e4e7734c1602305958a5f0d202cddbb777b6a5cfcb8f28e479bd736147ea8e79b974c32ce38b283987120c29198b91bb1492c23a5590ffc26caa20ef85d6db4c60583b7f984479c19d3f5965a94a35a411a19b4010b1de8be28103913bb43caf83dc419a3b4c1ff23cb673883ce511101d68ccf6f9a94363b8cf9e395b79baea9ca257f353496a897798672271a4f57c72d43032a8c78c398fe4690c9dae2bc19aeca00c52cc0efe58800b48dcde92eae2ca534aa5932357c3bc98fc60348ff451182298dfcf1740799c3a3ebcf2388de4c9435b4e5a459eef56d22becb6c33ab34559130865bd260fdd918014e5e75bb42d94ae856499636c202fcaf54e9a369031329285fd5e916d0e32f60648192e32368b6c15565aa1dac2f64c718ae0bcf752f7ef36de4b189ce7bed2399cc3bdc4bdf41cd3bf4b719c4659dc7102b14891058335e0419b9609b6d4b8bc4b6da1b2f11b5f39a6f294e338ea1fbb955361746a89d6492dd1b5d74d1ed5838818cbb9dbb070a6ab300e7713061bc774160c7610d1aa429650529618f718906461c728862364f98d507597d0470629bac0b7dc4628c5ae7e343842f037c29677d5abe9a89722baa3aa6be27658e3725964080c6cb98d708a2ef2035b0534e48e2a201c6a66aa8bcb220558035ee696f70736ae61b90c5264b9ea5e943b4e20b943cb5ac63e8b30ee98e9403248d105bb5ca8a7ee52f90acbc1dbb01cc4e0bce9526479631bd55b300ef7ddf41fdf4d38c7c7e6bef41cd2bfff28e5dc972e45d5bbd93a3d057595d45758b0a42c1596510953c21bcac29e0a2565a142eca730b5c41d55de1a7754813e48ff3ec37d498a5c0df799be2138e79cf389c43704e54d46a0bce941c42350dedbfc621c1f896dee4d171749ca12ef04ba42b857ea98ef21330eaa7bf4a52f943794a04de9216843fa7712feb09440d64a4caa4e5994c32f94258fa904c1fa24a4930dd3812cd720e5250a32e6b2b11c5f24074988812d31e20ba124c0188246f142088c46a062d3880e621a61465cd5acbe16844b61e82386a0d83ca2c8b65e5d538c5e4a5a21f0bd40b38cd2d780558abd5e8940887969e7552e5680f3765ed5031e42255ee72952c40223382105490471c207625491c40e5ce40009710ea1063b68a571060aac5022081211ac8009299208020c27868026cf0d60204426c36326ca6b328182054046d8c9cf92091443642e4b2650f4c0d36bf0a09340563249629427ce81e6c9438708157d26be2d979096285d6092848b9688639bd8c1073b4f50508821484121972401c69198450f3a1012bbead1505ac1c41074c40ef36838897082094762873c7610bb0ccbb2ed074d9c14891d0a400b287e74e7dee1cb2321b4b66ddb1e245bbb594b7fd0813f70a6183f22f7ed39cc4c0170be0047224e018ec4eedb6796a10908f72f344b2651709027e6b02000e555964141282207a128cba0200ce9c832c80ba3fc6200d919a35adbf06adc202f8a72d79e36e99c43982ac82c6a58a5d6948bcdceb9590c936610192184128050317a861956d348e07344121a600bf8e289d64693bd9be30d36437a2cb44195e7e90b903022e26c0f410bf18a42f4a90f227633aca71846b18ad58a6158fd0ca9b5f93b42f6ae69c5a6aa8cab651c6aa6519bb5fce08eb3c73392b3974eaf328d3b02d2821e9c6444bd726286ba4059d9298fd4917d06caca9ca8a1acec33bdf95cd4126e8f99fab9dde5d763ba7a959971bb8fd3952a723b7c435934747673c9e32432e222435999132f1b0bd0c85917c17ca89cb8f4e18ab2dea44b6302ddc7690922625b66c3fac2f086b3d72b0bba5343df4950099090cbebc6eb670f8d5949517d9c40435ebc885e3742efd4e5e05bf595f7a77dbe768efc4cf1b364be7a922801ca34253f497e2a0e148a436f8c5c7e2304dfe114e9365faf8a03b8e11a17f099ca5577a57ce59d4b78e36068e32d213d4bd8f3a76a7287965b09d08ddb947ec3bb0d8cd3f74a0743ef5d96026ba8a60aef57c2ef2aa47721eaa9f07497e9f72ed2bfcb6fc8052099958ab254351544ebd21143b519402f59f5a731144f1dbaa22f4ee85ca49f453aa693f4aabe62a02b96eefd077de39c3ebd473d0c6aff66eded9ffea131f347b2aaedb228c9afa684c16d01ae1a88df676ef94c774a3e166c4e25a9d74f221aa3f2fa69446354b7f1948f7368e5e32c9a47509ed8084b7709bda784b765087de943fadec1d4b31d3309a9e38719339598acfa7a3a6524c6a9d33571333c919848d8f80e86536cc9ce6170d3913bb8d74f1f64cc64c1cf387574383c7fe64f8f1bb463e24783437670c33f2b4fb94be5a9cfa157fba944eeb0b9d68a43ad49e48eedf5fd021933939029a022d78964c98627125247cf96cfc0f2162c29cbe27112e5fa19becf21caeaea07d6b07c252fa7ef9d25ccf1b1cfa12fd1976e436d505785a7af84a6ab84a47729a114afe9a494f03e157e5f168235a592f794b8124a512594628acc290c854ff8c6845d243cc3875da0ac7a0fcb50568bb746cd90d6378a56ce212f2684b9d031a7574d056e1a6632e1a1fbe8095665faa889ccd742903c57b795fb2f2fdc56ae605d41eea8b885d6327c5b183e947b5b59b6f24cbf4650e794312e1e6614d1073b112b52978e8c484fc48aad127b25f6ec625c4464c4d275ac6862808e154b1fbf05e8acc4120f1d19b1f411959a619f2e9d30cd2877944f74903bb45c3f5b7d9e2daecbab8d57ef95e515fc8d5f49ae4b26d08df0bb8d94938b771f34c8208520bb20b2a0c52d74b63acc2247ea44926baeb7d87cbf8cd47ecdf984c65ca059f5d5497d72819a21eefc8d90de46d87709a778e22ebf1b380c727d2c4574a707a40e9d0f4c567d872e2217e544c0489a0918a7905c3bac83d4519f1a8283bdc1bec33de4fc04395c43699f034132560a6b5cae96dfbb58eebdd341ee207def9054cf22c5a5b974d36728dd84413bc3e9a0ed939e436fba09e7342a541d0c57de12aa9c254c8929a114b5500629ba549e4a919f0f29ba527e0fd67c97418aa47b9ad8124a912594e2ad71b986a8b0a4ac15fce272a56057ca75710862a510c47e907e4bff5efaf79c7b529def4a13a857f534738a5ed55f299648f8c33a5056e5c9128510a082d82695d1c91c9da431b5d6101b4959aac47cb2b28f599ede73969d868c3e9399cc64967d4fbd8774ff3ee4f4d487412d85410d6b1ab639d19f701071a6b150ae68ccd7fdc3352bcaca8e829be3a33da77bea39dfbdcf8fa74969d8a67bbd4d8741acdee63bfd87bfeff33e3f182e3067bee9558debfbe91d6d39b1d3b69d4efff17d3f7d5ef886b13dccdcd18fe67b87714eef70fdc09aef74f96dc7a91bb6e97ec238f45d4e2dd1b787dc6d5e6d18ae079d2c1b46236961f790bb2dd4decd0ff4417a770a90de61d0fe7b109102f7a0c5383ef638a577b7d8e6f4ef1fc631fdf420a2f6bdd03417c86abacb20c50ee7f870cfa9ff4e38877e7b7729dad0831b067da4defd47eadde939a89ceea74b71a667ba0b411c6098f9e602bdca0ed6a050077f74ef9ec2d94fa0f6944b1115821a067d744ffdc7e9293807f5d35338c7c706854f384752d62823c51bce505666359c7db7a9dfce611b7a0f9fb2b26ba196534bdc59dfdda6bec3a066430f6a38bb18d99f3d67f5f4589382906545b2ceec2ca70aa3373b3525a67939a3e12e9f1276d6de852067975287f62d9c5287866d0f131e76b233ee58abed7bcd39e15613d0aa4d0fb31936e768adcce4ad0d5ea658bd5139b14175496ba595626dad26e9e5a7a49552da69d175f266546589e5da32cb21cb704cd9a0caf2d8251e5523fd98bd9f7decac66d80b5ece3e865dad56031e866df0b2ecba8e358fa38665f3a3919a6dbb75386e59f6aac351b6a50186d5540f2a5ea6c2a326a1f23e9a7a16cfa35ad7a29365d7aefa60004186edac2b1f0cd9b1ab7c2fd06354e5a3d16aad7885971796962165dc1456ab16d095849be3200f29a954e752937011823a9dbcd4bd366e78d6746f7857fbfd60c85e5fa2da4b1f8d46d228bed8d6247078f6f3bea15aabeda12b0f9923ec3d0cd32ac5b48aebcb111bf7c5115c07f48e07cd452584b3a97bbfba654a82a9b5d6d38f867214c3f58892e5b6e8269d3d588f563a27e6d132ef3cafa99c5a17017aecdd479361394d363e1cc51004afd0abfe4be70d29ba29acbc073c608cfb8f87d2465d54426896518ea6ee2d594a27960d63699dc79ee10c0b5b0ee5cecb7bd36e46e86c76c883a2496a69d6ddf5c9b5593211724511f7cb92899025d90f97cb92891029ee14124557ada441096e294b264278aa15f766c944c8ab05213a9ab6654c7670920d51dddb449e38454f0e4a2d18a08ceccb0bddc10436dabbd65e297aa4f89142c9554569a182888aa2fb66d23a2aed344b663b039e66c93cdadb42cbc85ed578206f0d27d7942593d60ba050c110ae97259396125adc2e4b26ad1118210a14acc8b5590645314307518a9089204a5114a22a2d1824885264f6904daf61280d1fa5d64a870ce1caf22a233c60426c56ea47b9f36d1b4ba31b679eafb5d6d7394a262f78e51c3a775d965996b5bb29edb6424a2959065040386ba5b42956277eb76cda2da5942c26a893d3b1b21bab99b64537a7ddae89c5b2ae01c2cf162d527db6666bb6668bd65a338c5e9c3af33577b2d9923cb464c91d730431501cc3cb6a25b3f1c4209bb440ca313461913b66c51a8f2acb1bcf9d9f2da9a33f5b2d28524e29258d11291a772c65fa5666b201c24af193852d4bfa847b9b8955dfead9a16cb3fc84d2edcadd63f3743769effd56d2ef1d21467ab6cc0d72d32df22887bcdcaf000d5d44ecee0341416e52b791b9d35af767cf1226122d729386196a2f8ed0c9e37c62d328e2fda0c7154552b002232e2d8a108ba00329b810e21222e2047194b385011e22276bd040053f6388e3fc9901e2280a27425f24d1d3f308ab011246f8f020c6138ec4ee7a68c20a233d80c190255c93ec92250a32778efb55a349e6ae3222736b142173e73e1a6e358076c901058ddc75b71f4db7c24b0ece084d1246cd9247cd92398927abd68b8eccab599246899d6641f9c9dbb718fbeca3b157e341d68e7d349a7d2b6703486387069330ab56abb5c351ab25f612a2bc8215e38e2a2086727bf313b2b5247f8df002223fcce0c7096874410426c43842c50dd048c21362ab68162f209d88b8a3144203062c168b9db7ea942b45e3c8137890e9576e94338ad841e5a3a9933e4123d3a77c34d402f1f2010c1348716488a106c040c90f66244106621021b1a882481527f9b9a03ab160063d4941a6f4a98f86aa32dd89010da4e8c204317889972e61c289297c8c8441821d917299cb94d2531fac11034a29a5a88f86d6130c0064165728406a01c484a3dc66c860c70c2134a1054ee021f75f9c3045ee3388c87d4618b96ffa689ac91a3fb826ccad4cb841a62fdd204dcbf355b8e49629e40628a188ab042a725fe5cafd072d4149ee2026f090fb24991d70c123f7bf8fa62f93232a5c72dfb34dc43561ba7a8332d2a07795598f07a11d783e17688c2a535560061596eb2c0349a6a7d77e82ca2092bbed0e68bc303994041864faea832fae7842931d86a8b144136490069423f8c0831a24105ba8a70bf48a077477733f77ce2993e74c82914c692ad52d84d88fa186ce50011a6e6a9251846c85eee84d3290ecb81a64209165101945f2d87d91e753c832688ca25c3becdeabca488e92c8a66a640cf744b2e665b26a19a6045669c528a594ceaa44ad5a863551b50c5322c3b48a655a131996619a1235c394a8b58926aa12b56a19d644d5324c89ad8b4ee6d09a56aceb3a6fe3d9d9d9f13cefb3433f53a7355b728e61c72843c6706f3c7fe619f3278c8ba30389442a65d8b601c9dbe756f25eba96a85a6b358dbbf79aead0cf4d110ddcf53e9afa9b9d68cd0a238f2c879a10e02705166693a94267ff119a2a748d0b75a8c9d0fb5cf62384e1b1756ec563b77e844ea713aa3fa02f3c13a1cc0b0af5d16847a5a6f5ba77d643f367aad0e7c28d091b4e33e651af7a3ee9f9335998644815fab80ca9a35ff1d879fb5ac032c5738c25c6e0364a5f2c4d4e5eaeb55915df50567dd5e1e34e209d59f599ee11eaf95119222a5ae9992c3fa757d46bca2b58c76974d4ab0a72ef42928ae5f46cc7dc619c3153484b1ab5a4d1cf1442590079317b809a0c1169dd03b4a402e5da4363a69169a4671ae99946a40e23dd6a81535451951bb9c3be3e0332663e218d7a7aba7fd3305e0f31dceb28cda0b866054b8a25edb0c6e54abdbb0b35e4434e37bd7454e8bdeb348ff453d891de6527d4c9744ba44fe575dc86f51785d7b12876f970ef13b9a277faeb9dc815bbd394d4cee4a1deccdda784baec5d44ac78c59653d9722257046b6cb89c964e51a79f407388c6b09c52254e7a45778aba53d875d33ba5beeede5da6f8ddd0c2618d4cd1c8f4b3621e244b28a54299d6a694ce3967efd098e9b2d345ef923aa80b88d4413fd3dcbf215394df0dd5045207fd0c67cf3462b2e83b1464ba2375d0f9b5566bbacc09ef58e8848e15bd6b212a942218ea5cb17b4be822f22276d7b9a2f7ee0ba7d861d7aab0443a4b687a16ca0ccef6519392927a4b284599594229d6202dd24da59f8e7a4a6aa64fe14c584359f4372c855f28a917cacf8abb73449e73ce98496d9e97d939018f192a4043c71c9bf340c6c8b39b73ce39a9c853684e2646249167e5a6049a73ce231304e5eeb53bf7d1744dc36d67e4edf6a3d9b49d276c8dc9a3971790b1db128891b112f860f70034356b41a4050a3cf2c8235f234a32bd4a884c8b2842a65f4d91a96442822f4660d47d67906e723a17e85e5a99420551aef5b60a2a72add77ae624c248aef599bd410f9144aeaf4c86d841ae3725e88e36a5ca33e592238549248f2bf0c87549955978219d641b45ea3c02843c4e2445b9bede5ed5572f61e47a9919176a825842ae9f810614e4fa1b204872bd0e4564d01222063a48c895491049e011228b1e11f4fcf090ab64f2e241056a7df1ba402891bbafadb5bea677adadf85a1923c5fbc3137bbd9e4ee6e848a9edaa7e55cfb96741dd83ff41ba0bce51e5f8d8a84e7a0ecbef597eff4375d23dcb7f90ae3ad035c29ddfe1e9391d81472f203ab476787a8e8e8094be325b3c3f531c29c1613a18fad86080cb673b112bde9548ba8e4abc97d5a523235e7c8364b95c442e4a898051aa91ab8c92eb4958ca048cf209ad5ed5ccb3d11f4d76faa588ee2783145d8e23bcbf1192c053e91dfd7a90f28681802076dd935cb00bf595cf34d7752e075f3a994ed5bd1bedfb7653205dc7dd10e4aeed7072eb8646e0910b8841ef36ee72928ded2e18f4ee72d2c18b410f833ec0dfff70c120be9fa15c78838c12250a94cc6da1fd4c73789c79c377c33af8dc50e52d61ca594cef50a995f0ded3a9f495508aa8508a2b522505d7a4b00b3543592f3fdafaa6917d7b9f458acb65693d9b6d3ab8599d699fabdddaeeaafc75dd67af7d78bcda6d68832a77f6dcbbaefbbcefebbceeb33b27a58ed99dbb16da8e9352879d516cc779f696c6dce44e4a1d36ecc2d1b660b9f08619650b6d9682e2369649d17ddacf014f3150071a735b9c0d528b0d0cc7ebf71b3cd7993b3d4a9600d9f817b61c473845924b68fa8d308564e32dc7114af1073de93f9a7edbbbba6d5bb66558dd3a0c72d973589ec2f294e78027bdeb6cd8e040901cde50e35ab9ca499fa19ff2ae2504b7b73c8868230437fc6dfb77970711bb6eeb3a4e7554051324969c91c7e9aa2288882a961c71db843227e8e3dec66dee6d601c1fee2e1807c4e0768a6dbeb7601c160c6e18b4d8073de936fd94f753fe7da655a577a4508aa6d34bf73248f1fe470a2925853a994af897b23c974b8acd536a2289bc887d9d2bc6942e3f557962275c44ac384fe48ab4147acd72e9bc88f444aed895be5e3bdcebe7b5a30448a8e5c5037ea6bf16171baa15162f884ab7117a6709ef55616ac5e7bb4b0674189db084ed25a1bcb696db083fd05a0c725f3887e02162be8cc8f573db7000395cd3c27257ca55395a388b84000a915c6f318b14d7b61cfc0c2d38c76703b1123c7f28ab6236b459b2dce63bcb778b6d5257619c7eca4b5d7e341bcd2be1e92aa1e929dff7c9ac54aa97f753ba174a918774e991700ee9a57f3807839b143b6dfb3c1e1eace3d17832cbe345b9a84b71cb95def41f7d14cef1dedefb9dc984c1ce6442990e7ea66d5c8a5f086e77b9145ff6d971986ea85a501ed090172fa21f7d1bb7e10f7a976fa10f7a97775e98fa8df003431fd3717038c229de08417b1c97a2178216833ebcdff88fef38700ee9df6fe01c9f9c928d308794e363437a3fa734db5abbbdecb6c3f332f2a23c3cdd3864df30d8a14c527c6d1bee21c1eddee94921b8fd7b5f7e60876fa871b15c750e83f633d07b9fa1fff9f04e6ff3bddfdd94ee14a6fe85a4d449600dca74d537b11515ec424a4a85729db00c65ad4c58755527b928cb35796c5f25946ac88e7ae9f384c710e4d365384aa08fabf16594c9a6ceda4a2bae41cad0a7b00679543dea9d9426d3e9d4544376e923451ef5999647bd1476b2fa482961db2b0c85bd5eb166292b9550a8ac7459425dd32b1e9f5197524a29b3cb1e5425a45f09fba890e6d35161f6aa12fa48bdaaa48e5a7a0d4b37959e2add52a6a4a64e388ec239a9df382af51bcf411d87144da887ff913ac63937727c6c6e3cf51c1c479d06dcfe03c751ff7163c33e50c7f11fa9df9873f6d0fae125e7b66d5b0baed4d0056e88ae4c9571e585b872aabc267c11d532fd8dd5993bb688061a83c2556c9ce638fd29004e912c317b7a453b00842dcf11ae3c0c7d548e4228c511106519842c99108146eefac381eba80780508a39422972ef2f4574a50c52c40740887a8e307514c22986a114552aefb2d4902b3fcaa2eef2db5e135e86352176a19e7a8f1a8c5d2cb77159840ab787e153a9d4f61085e3a76450c092b23006bb631406bbf13be6dde46e4e14f62eb4419537ece3cc1a50650f8f37f9c336a8f2463f71086ec74f1d158647fd07c60f314a8a2954dfe50fc1e3085b7e235c79c7d2f29577d3b311a2588e026b542a95db7828451ca1146fd8a0b12e209e71b5a8b06b05bb50f894455b3c28ae7cccdce1c8079d4c4d739c46a46da1d33650d3bad3407f9343c314a1f249a6946add36deab9392e92dddb6ed3d3a6f08c8bd85e3f3d67dca1df7dd5bee30bdab72c7e9df472c7759e9a396bb9bbb5358a58eeda6b0a58eed379c52c7f6d276d2f66fbba7923a36edf5a9d052d651a1a4d9bc0d73c0328973e8d7d0e6db2b453a990373e2d65f6949bf7ccb1d5fe912875e932b3f56f95a7107b05cc37d3d864dc77ebac472857d7451619130b5572ab903f57a4b3b5498bd9b5f8fd43314587a7fe52a2158c2a00f7a95ffe8af9c5ee5fd5248732abc6146c9259a51c75e517864c9d247ca555825675845c7fb146eb327dd07071c72b8f97b0eaaac3d079bbd77127bbdaa3604c11b726799533e5fd85287bc174ea9c362f7369683964bf9eef57a951e6487be6fd3fd12c66179a6fba824ad1695392b9552331000000000b314003028100c874442914838a02bbb5e0f14800c7ea242725619c9c35190c328c820648c31040000008031223444b40d38993851e55b3774c2d9f2a488366931bdc05c2354a7918ad34c2c604095872271b94eb03fd639c683589c2392341edaa43eb9d10114685220015bd1efeee75dc9acbe9188419c4d509223d2ed0e3170b57f412ae39099896b4bed788c0a23de805b0eb3d1de41a6097ac18ff4d18d784799a23726a265bb0b22445321eb62cdbae007e53481afd1bc33d9b0ebd38aacb76e4088dc95298bc735f4dc91f401567a333efa08197192414ab8813e61323d0fa20f27f6e59b65900a612ecbfad9db60be05999306fa7da628b02ce457564369610aed20d658d159a3c8fb6f879d31ac6a41a638a78b2c258b8840e58835b0a9f7378d4e313a84cdd8d4e814af70cf069ae79747e88089c48477b88032c294973ac3bc7644552caa8d101cac6f6379ee9d558754003e8be8125082f57baf346ed193501a8a53da972f09254e46e8a3ae319af83a4085b7a60cb6cd38f8ff38b04823e6eb613ba5167284496d61eed298b3c5dcde5b97b8a7ebc8b1f50f476056d548d0247dbc2354ed8f61b61b477ceeb4e13bd71ea788695d0dc16646e9e833978b87b505aa0550da2bf7558acb8302f9e48bf1cfe2e61661f45f1b0898eb10ec3834baea723fed46e3b5251a7e74771d70d7cc79d831d5065f0a83849d2401d2a05b3c09769e1544d8f3a45165ffaa87c2770639fb8a47dda9d14f48cc60114365525a1e5b050da3a792aa940cee8fede634ff9830c9b270f4ac26b5b19aa1e13fc70a2d0a32e2232624f9ca810358877e035365d941f918ebfa12bd14e54abd10b03163901b7ba587e93503c097b5a4095e523126e93a937c1deed62d688770a3e3fc63da95bf8ba382e22cd1a6b00d78de3d55ae0d326f2c4380b5fb1c376da7fddb14848610fade28d5397f9d85bb12c54cad0099034951aa48244b42c2e44aa76b7902f49be4ac6ee56594a3bf95c0773e94bd9e59b2d25dd443772869e501fdc492e483e23a63bbb29230167a3f68550870d83bb1357cc8cc9b18f56d055875fdebd7a4154502f0a7512f179ffbab02c7616418caae67fb2ab83f0f7d2a532cecd1808bd4cfcc9098b0f904f050a3dfc69c34da998f3535377b231ef89574f3edd1169f43c2900d9526508e4a2042824676a070070da84f578032343748acbded565e0cd3e221c1967e83012f8c5d2b34231002371237c58bb21cd7771299ae82e140f2c84f94dd9e81f79ad09b3a41484f884a3d78a61b147899275881f959cb528600106fa086fe347b37f6c0488e874ba2e807f2d22722c2c4bbeabf2108434fc5bc4515c3633dff920e1f7865868e030fc1472ef3b0628d2382571afc619336c7f141d5440358a24636674b5e87399662d11be1fd6d6cdeac22dbf23c6e9f1c1c9eb87d5c2894edf4b88c1567c1550ace46d56f8c024982fd70b74ed0aeca2c1db79570417dd0f6b0e153485040b523182794ce7fed5d52eceadf545c6566dfa36a5825773e4367a1d0c1cc78f42dac33572013c2d2a24ba5b814dffa9b96cf066c200f92802f131e42839fe06103ca759def2f26da44f0adcd2332ea20da0b49eb8c53178208e67039308cd093d8fd350016f9ca73844e7861e0851d1cd8399cf39bf52a00cbff10f22f16369520c888b6beaf515c6271e6afd7afd7041f235861ec68cf3ee8b084edb96100f1f9be03702ec3bedb5a311ae6a52200272da60e2397243dee48db36a919dbd4d94c2fd198c06e1b91f61e5484ac800e992e9729f9a75376fa3a7facb91eaa3f67a81b0821e4475cdcc7693ead7d44514997f9138141390fe6d2daaf5640f6f78bc86cfe3976bef0597a3c78ed5761601a9c3400ef18da4cb3ccf983582222638f15ae92f71b6398d4eb9f5d8a267f8884a4d7b687921a439edc78aeaaeb963b3a9e049fb38fe3bb09c38aae9fa6261e361569713c25b92143e38999adec58f44b3d47f08dc6d253a827047be5e1101d1da254ccdab00c5b47ddc0354833971aea1473d0329126238a27b57a155438064ed8021b4fe85ea308b43535356624cb130d2cac6d8466c1ce94cf77b1871d7ec0ba4c90a29b9a423b0af7ade7f3685320752c7f65f020c2c90e80a6fa7de97b7d0636253d4fef3d4559a189ee73bc2fa818c0e954e1ac7838883512fe236752dee379250dcf536f0c49f5849a267e4cf9219c0c1391bbed5a1737916cd29d9478c3262675fd67e0b7494d07c0f856bd18bed2e51870634908e3cdbafb444c5caf511ebaea669a97868ebe53ba9ce9f6cbdd07896ec32142a3420c826e235f5675b3fe726195d56dceef9bfc56899eb8d66dc8a2823cc3619d350db44ac2f3dee6c979225cfde7ac51c3d0743bdf1074b736ad395b4e0cde6c4dfb676d4292873334975121505798d9f4b3360103ad8d11366c706b80b2a349a3ebf0d34973a8fd05e0d911095e6627cb433f34639d6835e9713afcd4ec2a297a9930f12e43a04f240e2265f4ca965164f71aa7afc4502ee7fece80cf906cef176c9c417938d0e21d3c1be3591fddd33427abb4184075ee108551386240d20fed4555f0b075ab1c61ad42d148280b4add92b184487c545c3ec2d499c22fd6fbac651d8deb4d380f920d5221477c8d424dc7a83fd54e314c3a17923c28a6693aa1d7ccb5cb0d14c20dfd0ef3537bd39d5f2793f1e191fbd617184fd953c347ea8bbad017b6fc892d241b310eda76fd77aaea9055010ef7e7cc103f1536ea2f0fd0410ebf39f8d37a4de7827a9b15010fef9f60fbe9b0f85498c971d0698624b9c1d14237929ee3bce75f08188bda5e8bedb2566b2754f8d25defcbe9f44b62de67c6b037222ba1c85110daf01e8124d4c930d7489d8eb5bd5364fbee21f72e907c2e9f5fc49f585a62f5fa0c78717dcd1a3ea33aff4bb1104cb67707e980e8dc5302643d7645707accc486397a798a0818c16335ac3c06dc318de92a791b749467f884e6c923fe38aea941aa732211debf771e2ebc046254dc7344e627bc775e039a6952e021c4015e5fd1f6af7a33c46ab212a73ca394fe25792b9a5e22a346b06719d35c2e3a0204a03faba454d0f7ddf1129d8c1e1517deef4edf6dae32e544de7f948478c3fd9832afd4fda60a072d5758ff94de990bca2fcb442869b6cab813fe8d4da67fa5e164f4eef3f2cdd43cbcdbafd8ae525947413df5099323ed389a14d4ee5a598a9703520cc7fe08acf2ac55fe5a29e72ad7bdba4b566b302569c6b3449ad675ab33598a178b1b27c9e1e81b94f5ed94dc606bd146ebfb60cb10c2d16e35183eac5afa05a541d66bd717b7f40ba4ca06bdf4640e4d7693e5a842bd76f343d7355b723f93151fbbde26be33bad4ddfc2500ac51c1b663cacb326942da1e933fef32c307da2d019de2071aa89b85104bf9824f630f7f0f6c71b09c319a9c25bea711628c1461241cdf9e63807fb8ffb27aa51357c0ecd284bdbd8cc0efc9741d00743538ad28fb7c240381a7dc84a0b5eb941daf57334c3d1901acaf3970b34987be473189ad65eddf96da468891884bfc7c4e2aac53fa61bd45105d3281459343d207efef5bec4311a6d9aefae4896af215298afa30d12156781c1005ba2d6a6e21f411b74c8c30f9bfdad58dc20851ac606f2aac2f797298f9f1509532d67293c2d6444f261b65256c8ec768a9780d5da11fee06184bf9897ee414ed056f332b7d2f8e0f26a2f88b07fa840b34d594ec72bfe550f5fa299bf3844818fdd443929160892ba7a1ea9965babc2ebcd2c24ab142a35400fa782c5dd35c1468853a1b6a33094589a890bbc05252c51612d06c9a78ddaacdcdf1858781f0ee1811002d7e2c9dccfc4c7f13e18fefa6c340ef7676baaba2c09df0c99b5af50110cee71f0c513e7ed4c71303954ba04c60e66fb4ba35006ce21389663600cda14716567c30902137a7838fccdf942efe29a645c704aca26f73b269faddc10994fd6f43ff031fa893767d77aa1b0d7adbcb61242cd0c1540cf2a1d3d76d780af9dab70465afd0798913e866c3ff1ad1da171d73cc3c29388c47eb4d24290d905ab4e7af08f04d630a13013c117c5671f2347b842ed9f7dace103cee0686327d23c999842d79cdcf16d1b9b9f5535fdc4a9c6742d90d57c2b1a13ea56eacf8a4c0e9ab33127c9ff680090edd8cd4548137e496199bd2cdaa57ea43d3be5ffefd98a8217b254c5cafa15c4bdabe8dc01b34802ac4fd55cc0dfb8db160150ea0050cc41fee3754b491fc30672a3784280edd3df3818b3b0d3f915059d51e8015387ca2bf8281583df6193f10ccca5af920d629fa2b47c6b1c8180ec702e6af94d538d5bbb3e24c4de180c18d01c8cea1f73fefa04f5393d2d290e22929493edaf76c26f0a06bd3a2b821b982b1cdb35b2cd4ecd35cf2cc8fbcad994c42cb9cbd404417cebe983d4d0bda9972639bcc673ad8a647f18b570d1dfc2348e70a41d1b4cd87bedc0bc7594d15089f31f90b6db45c654b036dc47fce26e644c001c568e3fb04475fb0c7e82dcb1e6c8a9b738bb301b0bb6dd4bb69eb046d864c9d5adef690106728985a578d508deb41cf202de2da691d32472b649e142f0775dc52939fa69b3f15bcc5a741cfcb1ab5b98cc3e4eeeee93447fe4639873f4cd868012d0ca9897252510254fe44a7aa0203b756aca598ae96409c8a412d3125ca018565d28d731a539f247697203f305f3ae603ad256a8c447328376e34a8bac790994f49132d9eccccc22a1302e5a492a3aa2b0843db997228e61395651fd00b8f443c0df211f6356e53ce82ac65ac39a215a21a1bb687815ea336604961a2254517082dcdda4ef87772fe57d076fb52efe2f46cd2d656c33ed7d43191a113c4893a550d1925aef427463576c70382dd2ab6e775b8f4614dd4ca6400c808d3ffcc02866ddd82d24b2bd64e32e25f05d1e56d5a938787e0b24d86722271b3bf4782be351f4ad5f1a16ab88730862e6856fd48eb282eb84d0ffcab382d6b868662f7c1fc380a47107cc8204822853b726ccd4aa4850044a2d2701e32c005cd6ffb76859d90e81645e5bee93ad78910eebb919477c9dd8bb5a883cc5ef41503d5de080c71ac956f1cc5a488ebcaeb1b1fb747584dee35d95430bcfd62c15a652bab0a42c02057a592359a1986c16c38cf2fe66c8408d5d63b423b9cdd0da16aaba2e8fb37926f31fd106c1fb61dad2a6cc7fa22489a52ae96d1ecc43fac183e8266c49b217090908ff587e13e6e267fdf7442cf1087a9c13c5076b0f1a45212610755e60a3f78f58abf877ed3c7d0297dca29404e05d01ec1ec02305385e561a332219f115a99d12680d889ab31663b2b00a60916f18d61ba1cdbdc3075ed995e2e445055b5c65f86a2649ca9d69b1a7833c3e694c62214de934b18c7c9f898cdf0b82f432bbb5ee02135b5dabf71d2c81a18654389d8286d4cca92e8c59afe327e80acbf2b710a186b4367158425009f2fb04838813cb3b0227dbcee02a5b200bba21b223b3b93f9880d1706b262c7f1e2c8eec12d303ac628790086112af9b7c00423668577e859f7a814b1b72dc1122047fd6720dfa396ca9ac4b461eb4da2047e7a0667b524bb83a6017b77a1589a43430fa0aec66d0b9787e179742c97703967003c1150f9833c5a4bfb4b4567892924783b81d7e51b23847c415e2790a22b40191d44d4280c0661b7b9b3ce20f085abc4c39026d28f8090d140be4c634a22cbebdc79bc0119cd23787c2a42060218ba473826da281cdf26ff7d8712c1e528a56d9a57b166235db33d85ac55ba0d76ff34141ca9fab383a5b1593af3656048e4657de3d7105cd67de466eba4fe0f471c7e476a1736b6619a058b4d9c3afebd31d0c63d839eebf3297c512d52d5f70f72fde748123ff172edc0d75bde8c27c9004b91dd271daec343d3e3f01a96d14f5392fc1e79bf2325fa197acff162574005dc94949e3db923f1b38193014325b082fc4da6720f0091af12833b049c6ccb8f028c9b846572eb96b978b6272d9830bc6b165e82466a42fe9092f3f0e84a6457fc9e6c70dd0d9cea98122a0868def6b57e58a44a51f8cbf1892158cdbba9a685582daa1059fd9ed63b54392915d87a2577e44aa8fe90efa118b2db05e0451f3f22c51a56a1d77a7340d4836aca9e10f118bbf937b3f0aa494369fb2e31fe58fd7a1e8b8e4630e21f0f2b7547d651fe40681a906a6ca8af3c3814e9f4ad315d5c5460f86ea149c9692915f014ccaaf68b23fa0e8d39f15814c6f8f638616080ea3ea1e45cee45d6b14a9d17b1d1bf9620cc0e16c964ead9918123384250860f18d3e5b71a03102593cd26644dbaa187a8a259b2c7a2f3ca212c73d6aeb474098bd5ecaac00759f8e11e98c3512279d6a12093d868e084428676fefffa632e4c0b927afb8ade01930f5fa312154ae93160d2106f764eb0b00906eeb0094e3226f51e005d5587aeca3a99b0881605ed01f4a397222d5000ef480240cc83f292a688a022c0ac60bb9bd9b623b09e102cb75d7eeedfde88b9bb075b899cd4e22d88fa93ad69022bec55ac78b77f408e88ec5383c00a1bc837d4cbe4c389c7e5f5cb56aa81dc5a92cf2cc8deeae16a4742f259e5c8e73d8d7c36a64474a1293a96dac7cc887c9ae2b9ffcda78105c228a91cb2404056039cc856e90f66887c209d8e250f6dfad5bad50c44d5acc32b51d7559855387bad0b6fdd90609bf45bae56ab727e01243f2e3e375f13f2d420f2137944260d21208c0b384567d3ba554a097f32fa6ce6ea0a1cfbe280a4764abdd1cd673273d079258b30886e7da5876f5ae077287d9ac036c0e4382581a32302ce5791f294baa979a17eef1ba6bf50e315eed14e94c952cfda25ad084a9ab2845062fce539140852eca30d2cf274525bfc8210b68d3b08ee496221b0fba110533e007191834a36546b96f3381aa4bf2008ef7d1cf4c35c6daec251f09f3fd16a2053ef1e7084e7e5cd0d27b4164c2d68175d72f70f9f7f40cd9cd34005b88411eb819f7e8ad7c812a24703d37db617ff0d7209968a2e266569dd059b7af89d8a143c2b6a696a1fbcca942db70de754e4a87d6fe4aaa0776fdb3dbd3e7943d16059074abcaf630f4e81b86d40353d2bcd39ac09cb5de5713dd9149c453d47133e906ddd4628bd8dcb80af2e21d401d9452523c232c9555a0fb136d40931841f574b1c2781cbc36a3808ef66141f9081b274b0c13ca293c5d41660bb4a10edcbb67988846b7d386a474a4ed8c91d142c409b030c009a56504c91f68de318cd952f0fb3e38fe7b2acf5bd5b816eef5fbc005de37b60891316ae70b710e2cde370291c4a2ab5a04067afff719daaba00a8d55d7cfa3048ac0d7236829bcc3cbb9e7cafa5f76432098b36b8d90817b047803e08f3f316b700856318d54f4658ed0d072842d02591a0cfce20f16a94de6124206ead0a55ac5697a3aea858c99c974a485bf1a03b3450923fb33ee03285e58de198f8c23554917c69089e3cf30620b3f1814f8f2feedb3a42f2bb522e78638497551570f04065e62a70180fcd7f80237785cb9955f1b683dd58ed04eea74e74716dd78ed4d5e41dd52d3fb86e1ec36902b7b4c8850221327d52b74a4486ed3862dd1a156b8f869135686ef082d207e28e88738851b00e05fa02c39581612d5645b76dd68af4efcf17198016970dc4552078987a65416002666441243d9e8e480313c88b919dced39d4e569160a1921f59f0837ea9e855632c2f7a676aa59cf9b8085b29d80ba6bb6f5f7842fb298be27d1c86f4fcb3b5bd7ae566fa2ab583edcb91e6e108185d34606c09b934676e8e3d4008df3ebf1877037f437a8c385182755370cb5c4bd18bb28fe3bcc5a01adf751c4c277d9a9ced04c21df6547e752c15b0cc4c7cc30dc4ba99f694103253af8df0c0734eba9023ec64055ba4399b6a94c4899d518cbdb7683ca06edf5810e6a1ac304412b476281e02c31eebf14c17c0df6e9af0c650c12de609b8e0cbd4d51e5fae3da3bd661115a7f7f84e39d21327976a2645455f20000b174da408d1e25d8a9bca033c98d0088d60a98281c8060357c3a0e2badc3a2265ee2c720700954295524e320b4ddc687cd81ad67552e684995656911ddcc9b1cb0cbd308388d79ea4cc74f8e5535be002544919a372a4706eddd4214391720313cd91da8c05ca1b69d8bfe8e2b01d190acdca3555c44e9ce739be067d9af2f9ab96841e2e2839c30ef9a65bd0b02316feb1cfcda0d817114d446afcc32b41f435d176d976ee572e3344d57fdcb9d5eab6cb1a18575d08e0bdb27eaff340d31b0cadf8882ad94475995df1554ee22e1c897545a694f9b33c2f2e3e71ab3977cc1dec2a1d8627cad656b87fa42d44e381227d1415c5e9dd42e180687f3a1c745caa6fa7bf284f4ec3315e98632733250dc7528ad3b8b9a2e1a9a03285a5905b580f9fee9441befd26091bfafa1fb22ba1e125178c5a0768a1fd482ec2e544167c93dbd0e0172512fbd3fabc56250827be79a4ee451927003ec80dbc0002d06146c368e3879723d0c46c68f0516af7b8458e22c11aebae47c42c43e4265f6b195785a3ba3c289ff0633d80bd3f9cb6bb51e163b79452059b744c55f349621caae02c466827c1e78bf3383d0c310df893415864f562120c04d03f46778617b6111f66deb54da3d601a337b597a5a9deb1d192e6712e353e3445e02365b1d3cf4565d60144a0bd4d9503d15316f0c4941a66b360a16039b0e820b18d0f8e082aac1bbe053236ec4329c2ec66b38c2ddb70c19110fc212e4b58fb6a5d71c4977e258e94ef5c289406d9748bfa5fed480e8fbe4856a50908d017f82b8ad7d01a33af3d6ebc9858ce48b052c1adfbb2ecd579de69eb0b2201d2b7f865dd0a555dbc79cd01a0ccd84d85e1befe38db58abf51212b36f263a986997d8a727f157def5740b481233f5bdbb2d15ed10f25c3733707b37b5a0812b8751503ff805032e20b8291bf1279c20aba342827bfcab37598306e9c6415919b4ccfa5421226f533799fcfcedf9dd7bfc5a471c0a1b3b587512b0a70bccc33fad49843fa38e3886267cc80c450cb86b6ddadbd339fbee8106041d0af9cce9ecbaa94e52f37a959c09850f418d2f50bf6d1634efad8df2059a3f895d91f616b7369d9f7db79c2983c7dc2fab7fb7b096540793287836bb0c44d325ad945017d1e22adbe60532e22a319a961583bf10d46c0aa7b44053696d81d902590cd0ddfd26298aae307599b27435478001d70e5192920c7714c882a429653d3cd361512b3ef5f14a67f77a172bb3922009094bf25908bab9f74606b716a09d5d3d0063fc9b2f615323749828c9602620f8e3a7678842e42291c08119de20045206141cfa904cdd2238f40deec797934bfce66b5e803a636faafde55155531ee80b9faa595131a5cb8234efaf05dc8f24cc0d2aae25af5224496f1d07b805f766568990d00c22eca89ea0f62e09ef9b25e2f7f1daf78638b61384b7232fd3a90e26395e783aaf09931645e2c17969234a4dfe65ee497909dec20627f2a91dffbed45c17765c93e45e518567c6d73b3a20591faaa1aa4378a821d65f345eb60084dc0fdbad64f4184fd0d1f0b7560a24ae77162df1585768e17f8d12ae7830ea4d732bc29de12d7cb75969a00ea9f9f186d0a1fe4b606cf60c6dccb0822a579b5c3523915b531d5c060b7e3fda93cfb3c69c18dd5ca86a073f39cf41f95bb5df9a3b9748b37fcc5d9da53415d7f2aed674a058650317c489ba102610ca25cb1b78f92f8b0958c8ac9e6ad5788819301762f35168a6fbb3d1954d72786b30069e0fc42a26211abc3df9c2d6f2fa3f65ef9fd1b6426677507e6fc0a27b760740afcbea18c24252632b2334c0c5e44d1b3a0b0e61c042666d94bfc5c7623b5353f2839c3f3b0cc43aa7c9f939ce4bdeb44a3d6e53287c44810cb0ef828f35eba5463e60e81918b6f6b73001630bd9d4c3d6400159039b568433097622141c93e914ee80569684f64eb1f5c944e03fc58fd5075a7e8bbea8efea3fc667d1db7f7553b0112309972b5121de2a908cdec85afcc007041847c282e7f3e46436ad6119b6f94f376706f7e7484ae7d297b67b9ec487c4174e6c7931b457261472c150570026f21fad3a4783dcb88157edcc37e2373a0928780a3367136a9998263e78784d7b8346b5ac6810764d5bf207b576895ce539361112e830bca0a631016d436218b721a9867fb0c97002f54e8e61e7f97fe6b5dc7e3368331c387fce2ea3dc7c83c5ed3fc68d340eeb9f64aede91a988bfff8a14ac3309f65e7445f30b81970ad988e9337645b9d0a69e5426820302e3c5550ea782d81b1460f9ef3c420fc4074c5d91a2660f919042b08873f9c6a63deacee8bbea49815e7ca9c443cecd473b34b42c31ab0ccc2d70921493b7e4c4847d27238dd01528c38dc84415580dd755aeb971e84ea1fb7c318343d7c1bfaf9d4ca1b01a644cb60ef5bfa60c80ed4bba8a25ecaa49087ae8bbdc9d941a6e995ca5586495a66a778b679386e80b12b174e3298eebbe220767215c9533fdd0fa92d4be5d920985cd100038fa304c8f4f22dacd7d3d5ef0d4bfaec8ae5f7d04042cffd866947f15c138267cd1bb9439b823ad3929f04a178a7de3e5260df2211e37d15c12eba6ba0eadfc85c543a97518e62b37d1fbf09cb2a93bd57bc09cdf829ba47d75f20c68224a9d79345be3476098ab65f632051ddb08afc02321938726e0f856514026055984a4a0cecdcbc862f16a99bc326d6a3a9db329613e173b238dc32f98d8ae660107c1be46cd8404656c74df57282bffe3bf01f0a680b34f5d966f7e3562e1cbb6967c7590dad0f57afda98f8ea73ec1021338ce3c28b2b9a2b6fba35c0956803c5fbccdd2022e5a245c70010a5ceb97239a808016edc269e0fb04b44697adce9a794d019adc57ad6213db1c946c1e24021a158df21460cd1a938b2ff865d9335d3e9ce88cdc309752a586f6bad286a1ec0209f752ce6822fb07339476f16d7bb931738c24e039e5bf37ac3b29498eea6464922b1ea256c47ce8b392760272d0818cfd44bf37171d98d4f6781379eb43430d0c342557155c16074f71639ee05fe2e8761b48f8d834d4aa486d5cb59691ab34a1a1f97183454c03ef0b3863041406f86ed0d9c95f8150aafec5ce252f919e6ef00f6836846f9ae152d1e45a40dea09f8a35a4369624642cfdcc618d00737152542fc8935a3fa575a2cf5632872b200fee311f298bf76a651e1adc1e1303e80738bfe8d4f2b37ad038d400547ba373c34bb1176346b7602d37e4d90d0e6bc4f3e59ccbd33c4c530a51abd551501fe68f84a7649f16c7cbeddf2c11bb7b178d3a488b59c6c77a7371c317907b69e2443a2c43ec1f1f6b48080745cc0a27bddf42fe6ba3813b1f0d54f32b7e5bcf68298f4aa2761063cb6f8eed52cdd769d3c92d5301cf25740931f0f8e510fb7f47d360520df976c7003a5f96cbd36e0bab2bb8a5dddf3fb86a889b83705602627398b152ef67444add09d314ab549c197ce3fc5575d3066b1f84e7dd9bab5335964dcd42273585187719de740ffb1129c1c2145e4aabc7ede365d39b7ebef6da257ca5deef6d6523c9ceb109c979ad013b68701bc3bfb6b064a6a26720e532589bc204b82231bd063a3f6a635b15c260bc2230a401e4e1099414a3df7323b99ad410f8a6507d8d4d328bb6a2befbda1b7b6873ca1e71c2611a9ea08008bad84b57a1ee33027df82d52691ec802ba89910d188781aadee570fc054c3923b7cfc218fa26da5a9a2812ca7004ca57c22a7376c232b4cda13addaf71cc03a1b2b7c5dc4adc741848c239a1439c76b80b7a126913c235ce9aa9bc1bd0d62f907861128d1ea9be8337c72bff8e7277c2bf8f25d29be28788d2ea4018bef650fab3633ca1a148e989bd4d1e8269f96b5fdb12bb565eadb117eaf0180e0bb17bc987ce672e48fd262831e1e2a4143ba08dc993f441f2c23a6843b23b897ddcfc6485b947a608c225ff20946d222828709230cb1211c5f3ab7a719d05d64f3f5badb1e6fe2e8f5a941863cb905c6f01dc7e7da5a8c58762927c2acaf65145355408433a6ffa00dc5e9ac19912b5b3993a3c40248e28934910a7f1b1594cf0d174ed27bb504f8f72a9b0c24d4a005940a1cad59fdbc6f45f695e97b925483ad9661032d9e7792cb1e89c8d2fc037c627d7948a60094049f88a7298ac24e292e5abcabb757a108af6a06f411b8044d248e83bf7e6a4c88321fb33221501142a5840a154510473c39983fecfce708ea759c2e33038bbe22bb33c57fe6c062a0406b19075438730069359dccbb3cd70e15aa0eeb70f4243330c890799a795369f41cb36bcd25e60d3a2ee7243945d444df666e25daf97c336da9e34033e99b96d4b046dd1e8304c38c7b67ebab035604a071e32ced2bfc5456d7309f01c48063051d4728dcc11578b6a60ffb869eaff5dc658adc4d6b69ac8249e933be0eff62bec1243774cc9b83ff8ebc2df0e0e5f5a5ae0579ca5cab2afcbc643f08a50b428e9d4038cea6296dea3711d5891e8cae8225c31a97a1e1233ec1bb29d5b2cd383717e0c5d6d4d247e5a7589b6a74d66a6b237c00872b4101236b23d820b2826d4eb5d15305ec2648862f262ebd03698a7ead99bb6dc28ab24dad8c4904c531037531338046d12bb05cd1db8ae98a099fd643635649dd1268e61b03f598d7382e3eac11172be87399a04b13ee69ec3833e1e16200ac483ee811ecf52df74f6c8e4ba35b93b4fb5c5668e395da20a996c460d2b86064db8894cf949040a2d5feff837821bd018fd83474afdd23723b41453dc7786a74222828f02c4466bc892d22d952ee9253050566af97b007328dc6a1928c38b8e1df896663c8f9fae91fe07d127ff0192d9ce6336c426abe203a8da973078236384eb45ea72dd9a74af66634038dc294b5075eb1348ec827f9564b3bb0054acaffc678e46595419b6b3947ea3739a248a23244d7c8809969f90179131b40eebad96709f5a80bac6ad4c0aae52a65da13b35fb63ce244e6a362cf65d07999fec6d2756acaa42a1bf8c5a6ee38fb0e4f17e86c9d8850095548fe739d1baec70ee0c33facc4b1ca715d3a1546b5c14049caf472e5c2737866c4c351734473b3460d7a090f54efb1e7f168f1bed13d6577264a41b2282b7e0a4d9e7d56463adee8212638fb0672fd1b537e511cff2099d29e26ff10d8a2036d4afd01d20ef93adfec8259ed89c361f1565e31efb684f0249ffec52b59241dcaab9e770e6f05a938663a450ccdecb5381e18a5d1a72204dcf1f4a5f57a9408ea32463c52e3ea61c96819104c39762992b8062fdcac6aaf084a190590f1e86c315104272d77fb1e95c500ba19b5f6aeede7be2b450b47a8fa2b681f1bbecf11d1f3274e0ef1181ce01a7523623c790f92430b5b779171c87a7faddde9e4b8dd9893faab4ecee589bab922257befe739a96823ad1e83505db8e4e8c3be49864ce4e0b3b3ffe38a9e9e6571bf5dc5e385a02b7f50f00a190373cb2ce8c2f75cb65f52d34f519e8e842f9d46da0729989bb13e4849981d07ba285b2763a93b133fe142eee92c2cf5ab53ade0d7ab90a8795f650c832610b2515d6fbac8636674648fe7a5b4cfbbbb87b15271714cdb0e15ec75168f1b452122ee121eb432d7fd4f3a76740ae61677509c4c774f3beb8a3d6f8162338cd4037ae143ed1b662b0f0ae57eed17ce58d2563bfa5dc8b07d30b060efb416154e47dba2264645adea87c4c49822e2637d1c660a7e152cea68cb81996ad00a28b311c197a7cf90b89419a652543ea5c37d70a05ce50ba4a9759f40604ed7e168f7829b809703bd344d6836e19a5840b9bbbd29b4b9e8558561cabd0d86022b26ac5dfa06529decc198ff632c1b55606d4c5dcfd8bf2ea51404bd8735b6a3117cb45bdd60af2cd4a0454183bf97a1ff19a04e39d3d3aa48dd3c0c6d7a66e6f4f9617e85aa972031d4f1b2b95b7e37bf356a157a82e7153871fc5a68f2d0b094eccc4739a212ecaacfac0f401fdc1de6002f68a1a345020fc438e2b879f8774111720409be54f56bd203e6d825a3d36945ed6fd42767c0d90596610a5bc13fdafc02493cfc24e9fa35ffe4fc07d1502891610cb705aea57d3da0081d25b06dbe79792d1cdcb9fcc5375ea429357174887630e309db7ba3f4e30751db2d58b56566898ca4ab92b00ccccb7fc3020dec2e8ded66c8792cf3c285d36cf2e81ae01b385afc00b9af43f69019a417e732265914ae967fc8822feaa40d9fc3403dd623a6c31b842561902cab9c704dfdee56f475e399329d98d2916cfb65048696bb5932b9d0d2638367a1d5923def266d6abf5e0aa2d21735d601608681ca81471962b85e586aff04698b7c706f9d18feff77c976174394222f413ea548c25ad8ae92e3ed585f4e1bbe7a042f2174e275ef1dc06796c7ecd4b7bc548c587dfd8d511ca69820d0237f0a5bc210999450b1691bd53ca51ef5ca0dcde0779eab68d79051e01b71bf56617a6757f704202dcc62d519666e2cdf5e9d33232c6727f6863c9872e067b91be8ff645d946577c93faa68efff7a4ad1927da5414649426d8c2e9d69e0e1aedd71921af5349f772f6484768eaf6f33207c60b6b990bc8442c212c34cef86b905bd42c8f53261effa7a97f72c26b697a7fc09710c4e473b8e24df79554e03857b31b0c0e3cee2e4dd1d68afabb84cd01567f52b013d89f8089cfce76ca9191456030639afd212a20f81d5f434e1a68de5e9d933e93c1e5ece1c83911e6b7e031928571ccc6bc06191cac7777cd1d062194fdfe453a967d5e9ce9f9e5978735e24b76ae4346bf7304dd6ca09d1f014d7c1514139349803430e46c9d3f38143f25a4ef90cf5ab0af57dc14b88329e8fcf99e4a3b333cd736d22e1597e78e1ff01d6515e0786adf139753610447aa7321d99352d24eeaf20f82ee9d2e4f8cc5b7771f6c89342175752c70165b8536437b87ed77f8544ca6208f42c71ef4883f77f08cc051cf355e139195e9a252b356a6bb043df5e48c784a3970e21875e1b98c0ac73cdfdc0d4ff0cde6c184d75b4c8cf4904863d7049b9274c78547589e2d9a69528e0d30a2c99a2eb84677e73644baf59f900fd473f08e083db556d7545ad762ee031c98cabb17f1524848014d6ab07565cac5df68e6b999ec7c2fbc844138bc32e933cf75042a4e9d4f4990c5b7133ee9500ab0c91174642336ffd1476c8ebc322f561c664d72f550239a853dae23412a3113e66e07e04c0e531a7fbb58b1698c60a640f5df93ac23f2dac7f88ddbecd39db954a834b31deb566411842ecb691090fdc8ef1ad097471870c548dda54660186c82cdf05a0f6187aaab10d98b19e006b5be133e0ceea258cce0618850b77600599ab5156a64b5e9ac3fcd1f5ba3f84de5168de05134bd8ab348a326fe5c864a45afea5d43c6e0ecdb2c914d4c3aca5c07726fac5f61c036a9186493baa73a5043f2e3fc38ef2da1e0c4d4f3e8b18fa4a1b82e4b0101716c918f184a48e9e7499f5fc86dcf7ae8a8ac3ca617cf495fab55118093ab5632a54771523aec5ca6a69f333074497fa76fb0f586334a1441339d1249fc64d81fc286d162fb8dfb4f60803cbd3fe6e0448de98b0bad56815f319f9f7bdc8bfe1c8e6b9bff618cb0ad701866f08784eb9b50c6d80cc131088d42aab2fa4a0371b7fe2ae3e64f236de2564dc9aed38a09fa5e13a325d23391e84eec6da180ce2f9063592015f101b4283d5ac1c7e76a2baf91d5732a22fcf3ee69f5b1bf51d0be5644b30d7809c317eff34ec852792f4bf1a8aaa8299f56dee4e125cb9a9978187d3b0c3db2c1291dc647524d78f58f9254450eafd9255bef8e4fe6bc2c18d20f12d9bcaaca4de4f9c7b3551da278c95bcd1844b5682d290c7a74dd937d0c5d9d167b98dcfb6bca07ec7b2a3f1a2eb85dc87b119f493ded921e5699cb6d0ef29ef77fbdb88ee037f160c9f243e4fd6dac15c0771c0524cbaff1c93f009dca02767a50af6c3f1edeb8c0d093df03932957477f7b046d194aec56dd03121794450780362a092080e0b4ae9ec6bc0ac2d1a5e5f580ed6872025818a00410d71bcb13ae1854020d19db0d282b4efec1f7f6ead0b23c2d1b475d3ecb88b2761a9dc7da0f1ec36a742a83ae2e5162610f4177a4b6ef1a14a5319b40e7daaec13506b90568c22245631e88e329e856b84580c0c6b3f63e3e16a671105c1e393e99a8f80283b22d220128178903e1872edfcf798849cae68b231781d267d1f620815af83cb867f00c3439f193d46ac221061f6c43176e7c79c43612585d3d542b38afe18c7ce114bcf3269384af5d6960cf09f05675026de8d233766c57fd5a7ea3bd5e17eefddeb358743ebc4516f829e9f5a6a89101925bb100090d5495f3ea3c7c23420c717e42993ec820e2e546447f3c7b812d26d7a60454f324a4b8e5dced34d0babd96e06cd7cd15e029fcfccc6b4e44beedc7c4adfb3b1073c803d28d2c06d0f13cd70d03d918f021140921e0bf100cba0b8b887626dd7b4d79124d8d3e3f12c6444ea2f8a67ab77ad04f4f2becbb829b1bc14087a4cdd18dc375843db845db0dfcc44b258448f039098177a1662471ebef4e3bfebbf320af8188109deeb83b2a7f703752e48341a95c9e4b530098e3f2c4c46ee7b7327ffc181e41f754d5b7f9fc9ed0e763ed0bc2e399bfbccda5cc178eeb52817d9298760c62a8c2953e8367fc5eee060378a7f077570db9c28a5f8c06c658b09b23cab9ff731283225b1934b6ea6b66a484969b65560a8947e797a1ffb4cb0633ad1cb179b4691c89db78a9f8b5467bbfe296e5a7d3a9aaa88aeaa6f44ed2a37b318a4b27514bea64453e20c4858ba5d43055d42efa544eecb7bc5bb5a5f648ea76344d251d8a91adb39d39f68a5fc32c6dbb4540d434732062a2e45d5f8602c4eed968b0aedae04796ae9f902a5b0b4b6a71620b5cb1fe62833a37a2cb9f2807fb22b86dfe461e320567b868e74797105a058f5f4b74aba8a6efc0c4a16ba2f8906a89fe97a8282599e0c62f0f6d6a420b4231ff564af06e807fc0f41257b6d9744b8c7c62be318472ce2c71883c42c83158c6453cec9d842ff9c6f363044d4dc44c44c52745a6f199ed993128846dfcae6e455153272e826b30cde3741353527b52ed9208e98a7241b47db8d64ad3fca6e966a1d8caefa0f047d76ba4a535355d3405fd78ae50954c136878ccd72dcdb080e9a015d5075af51ddce0a75808d85b5929209d673a7590fa7facbd563cf8073be09f5d2e26ac697835d7dd88044a99b247d83fd853fc0f949b7250671558c168e37713b7a053d8d3235a750b170337eadc1c36b4e856acdbf66e97c9abcbecf8d50a03408d89c85185a639fa73069461081881e6ee42c8acf4cf661eaa55f2fe03a0f6a441f9678e21d5f9a517ecc1aac02d2a883615220f90bf27003d21c3a9dfffbc21c4909b3e417713c3eb1ef7915f8bb82cbd9d081f3fb8a6ea7a884be7f8b68386756d86f663cf4f46fc1090aa13bb145357b1c022d01370753643b5375740bf57aee5c454ddb9ee91e8fe3ff9f8c254d7e2827d6072c27918256cbac8600ec2d8b135829a62a7c665510733dc4cd44bf0bb6fb5b1330001f083dcbd1285ae49c547f872e5c45c757e2383b3da2c33657b37d00d8375245fac114949f89a4d1de606581af9c433024f29174b522df908caf268ea9d09dd101b589846c5176c1ec95ac5cdbfb563b3b3d9a3739eb41efb6b98fb8b117079a515791c0ba3ceff3c1c27d6cbf855d4716356028ec134f5650b6babb61a3ad4c4c935f394e1b37cedc19790ecc887429c3d512a40f0fd1bb1812d578d3b9743639c4815bc6ced11b779abca13e4d111d3a28bb46197004397125098160c1a538b7a412682c96b7d5c049ed85604c182a397824d482cbca0c19a154353fa0431b038ac8303b90c4e543c676e6199b268c222389a55d284d364529922cedc81c2a195bfb986bd3256e51b2fc53857bd665a7646f8f133b25ca93653cf78eb8d0d3a2c0a726de709ab7c44f05530949bede2cefaf2ae657f0e586992274bcdcca19b55c83ae0f43f317dccc8efc85e44c6a013e57243f7d6d2ce1d5d76b69af0fd89e5461a52fd99e421977da10cff86c2661fec9d14c0c1c292c694cac7927298088de269010a23f1065cc63ae03dd94875478472e563b490328639b0b66455ff416da6b4df8aaa8f30718238870189066584041454c1cae7fdda270309a4d684097174f416f6252961b461cddbac47617c6fd023485295545364a4c89c7d95e5bd89adef1db7f05cabcaf35fdf7a748240c0cd231acdae1da19e626044992cedfb10e61583962b2567cd8eeaa69110f9801c6518192dbc02eb6c8e347c1a34ebb45babacb67efaeffd9be7b56f3f6221574f7bb069e5ef3dd57f8d2762dfab5a6c26659a0a22ba498b8f981eccf099d93dd9330814ecec74660854c144fc3a5b188c4f12464de52d1e01dfc5bb22577a65296295a71863661b75e47c6e67b60ca6cc88f785ff22518043f785e6f0083408fe7d2a76bd5e746abc86cf601e869cb57477700d675a447118cb487b3214da480c32a285c697e30b487940eba13297a6436ed71a78d07545b52f98e4bfaa7a086a504f4a0de28a936a83aa7430d6206bda4d42985c0b92969d8fdd44ca5daa7f1c4c5bcf7d3a93bae62394abaf6960d7e98c4a123eff9f8603ab9af307030bb310f8e0c14425cd708a883ccdab76f57532ba0fe193d1b7afa350779df4597ef14f77d34e1711c6b3dc4909eb62e1704e3323a4b19ad301bf6c2a7a089914928769b80a58eb209abfe640e0a7343af594ae48eda940f4f12653ab8053c229b05691318720088b3d5a8a61ff6b9e478a5f5139598880f71284d1d0e16a222c63bfa8fd745384e109df25e7481c63222625bbc5571976d4289a0ed469d908eb85a2e46c32cb6276aa998e676e0d9bfb83c0ac93756f8d121301b1dfe054a00c62491f35a5c4aaa856dd3df9d90f6dff23b05ff01d2aef93a35599a5df0e3ca7e80f52fea3993f34d727486827cb4d3e0257ec33eea43d81b246aa4ba598107e2b4b9db25f2eeccf8dad483a007cceb5a6cea539e12820c46e742a361ec4f66a3c89d5d74309f98bf3f45acd6a07da064bbdf707c7aa3ba451fc6c02420243a87a101e9072c3d046c421dce39a45df7faabfd4daa616c64b4a2b995db390227111b3ff40d14711ef437f75b16080c32341add0c0703a1f9642289d8498603cdb7585ae8670359e1bec51b84557cd578895b38a71081a142b1010263b9e415ee1f024f5a4d595a9e00ee24a9e6089d63429fc1e439dca5700e5717eacb60a2af52e9ed727be2f5eb2d68b0dae2cd9338d8181a8cbbf0a42410e609dd7086f209698e2f605dc7973d5a11afdb8a96626f9e81e81977e1b556775b09e115ac69e9656222158c1d95139e2d8e3c2a95c47f0ad8fc5f9d014f1f2806acfa4ea76845f80903afcff81384ff9f594e441168fb126b864e6b53c95fa94382bf1de4015ab9a462c805f190a982242e99dd03bbf3c8f558238afb24721feeaf5ca315e9722aeae1a1f77d2a00a079b4f4410f5f8b4b71ca8492a48e015bb58ff067eef75336450a301e6c2d40e35d20cbc42b2a8e456ad23ff7b64c23eb400c411751defb8eff290cffc6ffd05b634ca5e06c62806f6b24ac09893f1b8cba0023001817d80ec3b0132736e559e5781c6ad26643abd61ff37a2c6bebc52a08cc789358e9646f3db615c051dbb4f0224b1e1d35541e4706e58291bc3ebdf9b02d060fcc161458305776a038ae76b7e0b9b53cb40744209e83065f7bc4e4d721fdfe751eb5c56f3e15e79ce8c4121f249c4a1a521150aa34940d43d96190c13fca0c111c4c8cf0656c98429bc8617a140552fccd5464586712b31b0bc241b49700a665ac2f976b3cf0c2af10ce292cf05421b4b85c10ddbde70b666629803af4f6f6a2cbf85f6aee07fdad935d651bc587d91472930605a065f41120abc6db0852f33b8821682ad644d46ae14d6eb09f8fb192ad83bb779bec671bec7afb96b6b1d1fd23834ca0f59c5d8d906310d53ea8243793e418fcf64f74ce479c5f63e7f32d50223953a3636cc59cf5c23ced3bba4ae2547eb187d959493a69a524e5daa053ebcdff138b8606c24e48db73e6041e41de4d08fd6ee4621504bd0c3c59df81be863535b1ef8ec5c9613e50d640a9986cbb4963954fcd670cdad3b24997159d67d7fdb251c14cf16f1ef21ed6fabc4fc5006eacc4b038850fd9901930c3befb2ac3b8df3883aa68a62d2d3cab20f5007e0aa01a2b53abf6c4d9eb576659ea6dd44f030ce8b54c009a69907131418ac31bede24d5a34d710e7eec2bdefed06de9ed0ba4b923ed0d339c9816673c8e693a29d5e50b40092d4c7d209bfce05504e5ebceb59f7f6a0be9c35e479849025911ce74d6a9a358cee7a84dd2afec376699e1e1745f40e4349a1321549f0d30e3c4d4024b0c0ffddf54cab27e195715e122d83e75818f5db4af1809139a865e6c28d1bdab8426f369c416b24668eab2f210ebb66315335278bc32673d7aac0e9a9476f434ca15d1dbb4b90a0fe0affcc2acc46156af658027a47711587e37691b1dfbe91c09691bbbb1602126d8aa1a8c27a4673a860205e9422d59dc2d062571cf407bbc30a09103a03be53822ff2edc9624042dda5dcfeef14db6b3a1cf7be47ffd82c32c794076560563e8dea77fa5b2211752e47a746a2aeafcefa9c4c089341f42f4045ce40d4eefa8558276cc87d24f4436127bf5783ec6a5867df0aa15b12b0ba308d46e8e69ba21667bbd28f96b6e5b3074eab9841ebca020aa53396bcea8d1e13536a325d2a879b2c4cb760e23d600efa505ce09098d204c0057f2df00697ec2e0c9ed1ef2d391a1a5162e952793359ca9ed8a416b5128b7f8120d03d330542bb2889449fc97b06b227d05c66dafb58c46782b0493771a59753e3e8c93fae082f6cf64abb543c68f522609e38d3fdbb2deaf3c02e5cf6989b5cabd86600aded3481cea211eccb415d235b6a49d089bf11c2dca07bb0d62b63970af2f2d7c37605c3700bbe1a28ea25407c76d1deb7a033a88115a1e3f4713f72da85aad30f0521b40fae7f4de0006d5c0043f379e7bf3db98789e096d10388082e15fc954cc2ffbc8d139bb03568bac489b6e5487c00deeb2c869cead74cf8aaffe785302fd8f647d337f2c85770c017724e9b49d2508cbad0d54c79d258836fe721c8133e13bc944fc7cdb518009726d04171bc4efae51e3c9bc49ee196efa0bb0cf31df163bd3dc4105c447c0385f17b230b80bd94b5b31ce353fce5790a5369e3c9d2e123ba640481c1b1732d0e168a188f901c3a2b625f44ccd94a81b9147d80e1c554cbfa4ea654b64f1b79832ceb718bb95539d0ccbce4145d7ea4514dca6b817ae602aee79773041d542d9c5bec97a0589fb098ec9cc23ab01fb8b75aefccb6720d14e74a6db2e05289beb3b0131cc9507aef2600600990f7d5d7ffa1114bd5bbf50e0ef307991b957dec9290460759c6d232dfc2709872405af3f244dc2b61723fb81c4b0ae4e5e011162466295fda50bc8d077e671a86cf5635f5bff902ea0b616bb711ec9c3eecfcbe7bc7304d2dd257c5eca4c611f58ef0e218874fca665773613b67445731f5c053a5a36cd1c69b3d14a9e79cb7cf1ae3074c6513aa94ca9eb8fa966e537e2202c846b20bf9581705446ff7aceaab178bb8c57c5b69be60447ecf64c4c2adbc652492b62583a80fec7164b05683bb56cb0a9bebd17c08fd816a554075168764d45061153d070600a2270e98aae7dbde05b2b9b4b261f6dc2579a8f92b8081f1b65699c7ab23168a9d89359a5b85f5ec103941b6bddde1d68f16811ce7390707ba9db83f2770833c94fe603cab0b5dbd0a1c50550179ad8cab313a0d72440f34925b9216a1766822cb258c68ea2a0854e720a52238130649b2815d90d163c553ed858c48c00e928063f9062288a1560c106c08f9576903b26880e8158ad671d5b41b8e1372a4c6ba13ba50a6ea88822c405cae2ac6a80344177886a6fcdfd711c4b5bcc3c8e863d1577af69e70e05a315196ec56edd439e3f7c0a8f674501d0133a56a3b8da171678480022cc2270522b1bde6f4d6c05e8792850410031691527d25021559a2c01e10806ba9a40443c943ee1c5d263de059a93df203e71172cb908864ef8f958aa8b4afc496c639a1be7d6cd1a9d97c78571c1b7abd388e8517383b85e3578fed71db1983aa3ed4f2d83225dbe02995a0a374c050edefa1118a60e1b683a9183ace2b9ecce2baccbeca9f118629f22602073c7d2d58efa3640b70a83ccc5c75eb9aecdcb917440207bddd0dbac82dd4edf6937faf68196789764c078c5c37b16c6dba45f5c77a7671b105c64275282d6bac2fb23ff7fa05ad08b99d01d981d0ab71ed90dce700d006c264d771fba26b01e7576df2f1f6ef1571873ec7a1101f7278c83af4a36c1fb5107e06640c98939bfcb0c41e7b9098fec9119620573048f559568aedf4412cf39728ac863c3876868666f22adc67fa71ea3b11cd8ae870ff0eb0fccb8098c9338b1162d8cc45f33258966b74cb55ed083e8ac59fc278b8efd7479771ada1b9474616c898aeff4c303a1a81eff3ad5f1ce8642d475f986c25836fb837d81e0398016c75ebd2ba7d97a26d537389fc76b84beee8ca9f87063b7407d9d3665cf47c059fa3ed9589a41f1112b86ccc3d2a713358dfb1af06a8b95e7eeda0a7729d44c65f472e17b8d65aaef3f9d3fab500559f4471dbcb278bc573622220f2366b16f6ba9df9aab04d3a43a350ea8db08207cdbaf86e6bc7b45821ea49fa10b9165418abf0a84c4c0347ad4e8dfb384c1f264b9c523597e76ce50409007882693f4398c482eac504edf456c04a289c48f14e542d2d0a9a50d3e4a04f195892a6faca4b432e4f32c433855a278763047af43d72cd6bf539d3c0dde1410e3adb8ef5623540d5fcc750c5ebd8406a12dc22381d270ff3f0837e2c120a4285b206e0241f40ea19812081234e202e20a61513aa453b90d45776486d85b7059713ff234bf602313d60c300316a9ca8f89834e3c34d0112fe0812d7087c0ba8398d504bf93cd3a584d23aa6ab6000f19e0bef0a3a305239ca0a9a14096837709d20383106799a56e7d6ce3c1d183fb3317e29cab050e421808421749c339555fce6f7daff8e3d1c853599e7ba9c3d7ab72390d00e243d0e8c43d6931941d01d69542b79c764863455d31924e01a185d86858a3f1a2c3772a237f3b34713f3293aefe2eb8309ec663184fe1ffcfcc2be17f5158361dae79d359994e6e1dff88039f3fcc546c12aa68c2d996a4c10a4cc9ce1a2297919b8fc41e980ad5328a2cc4287880925dd2faf70a50c9a6a38eff9a48dd2d5a1ff155ff0104104eac27c4c4c04470e3c2f2415848fdeb4e9bacf442eea367184c46f0d24a7657c8e21e8d851110543779572ffb781384dae08107b41b2f140e89bfdac7e19d79ba8a9ac03f9d7743349b4a4c8e8835a50179af935bbf15dabf3c243b21504ebe3f8307786b287c4207efe30d914f5eae6d14df40e77999b842ca3056c170046f48875cce1b9847458b4bad6124825913501811eda4c9ea3a01b86915110e10235e34222ad00c4a98d8062cb20539f2643d8466e13dcf25ea163151885300844a1e1844d89be5a06a28ba68d3aae8d42c25a5a3b1b51b6db8fd3cb654b56af736abb529e4b5bf57a2ebd66263fd184e9617aa11e2787cd56f3901818b95c199c12e5f813aa9bacc418c5a597e02528f586c510be38b5a2800b4ac2593cb473d11b2e740dc332679dd2054818f223e2f850e43eab5936dec1f239c14425cb9c6fddb8d636b8e6d5fa85116ab20d4a9763e589c22e5619491f05333cfd78284975198c9a05630ae4436b8c0615f571caf2fa3ecbc22a3cee99650cba7aedf6ff3e6a5b55a4379eaaed784ec8102b871e20c74aa8166a3a71b9d8ee0484a1e4a8c1b76021a65c341481e46fc4e895cc580d960855c4ce0f01713d7538071593e4efe35981d5eec5ae221cfa641981a2a97d96886cd20792055437ae8a568f7ac8d5c9d8e718e57481b641f7533b60029daf051d2f3600ad3dce84e6048813f344a7ecc71fd5f5d7b5d34814bac65c94aba1a19601991ea2ab72105ebc93d065515ec86f0df748e6114e865c2b12d9915f05222270aa248e254f72813ffc1bb06036d32564f59bf7e6ef17a84304b36b32dcb945e41c149f4d8c1b060676d5714344e81b65337cdf5fee72c86625e479be5ffd921236ea345f004adf4f774194df0044583f96d3826340da24b6923c575226c1f940eb94b80d306c4b892edc25d47c9a2b654b2c9e55d894dcd92ef16cdee617a607f1010935625d7745b2c675337a8b94d88fe2d010937f9d6c4b09c7eee4a1896f45efc3f9a00c781b4b46ba832848cc436a43f8fe26da9fc83d89aed78de6e3dacdb4461bc26614b085e78feaf72b7a732245f02946476d0e16edffa3f706420b0124b42dcb7b53f6a4c7a72b3a42a86f088d50f143e8849afae2215976df0a880aefeeb9d2fe825fe820e91be4971a267ca3022b20492b2f5399a09e46b5337516acb42f62a7af0ad20321dc57262d761222ea9f6215a501d2ec29322a5d91645c2223217f861ef89afc75de885741eb3babaf50a6188a8c02aee2a170f136e9e74214ab45c86556c1a8099884ce76ce1588a2f0cbee7dfe8d472cc8f2383a7d487cae5855f7931c2217ed3ad1f22ce4731133d5325b1e79100a9f76cbf4941981a21ac46e3f15ee85e03ddcbb52561237fbc27ecefd1dae6f4661a2cd83aae0c3729836286e77848f99ca638672aedf05924133a4becb701efe94379a4cf1d662f5be5c42f306f4a0b04c0f0a0edf77d21c547c5094f5fe05a949948095528e1bcc0f89eb54a63c07839ed1777b5d0071f6284ec1dea01873c526b4de98794ef1e67c017fd46d836406c57f595e3a706a779cb8a7964295aa6ab1b635330c360d2b1ed178941453bdd35acc18d65d984d4abe6c6d34afbb719c796b7387d6ef20ee32d7a66dd43ee979f3c55f99c45d111f034e05bcaa4e69e60b09657806b31111ed4236d9e21ab6452abeeffed05a379ad32c3184e1b48bcf8d90325be15e098d10e2bce72da94b9f485b3a62242d5d2371c98cae2c9dc6a61215f52b744fdb35e5a5c954a2d8653b898a4825b30c5c3647bc80c2a215d1335153f163d47654f89ded382e6f12d2309f687e7baa2b6d4516bc2dfc173b6db4e791b5547f1ebe4949007dd009309350e7c03a4385a684038f81cb79a0e463eaa4f9cea5538873f5997e4b5c847326a795f01187d3168ce70eafc6c64645d918e9d4e23df3bf6be0d04c20451ac74f08c56618c7017c8aa24a64b0a4d383700031e34fb0e88ec7a24d366cb76fc4d17ffd752368c1a517c434ecad1044086f33723fdd431b67c660eda967ae688f46593926edbc82a007c67211f9b31e468e36ed9e3fd124298d665c6967f68660196487097261e5867c959aa04b70fc3a1cf52c966915b6388d6d861d66350df8edc4bd997f71debcb42ca4791b08306ffc60f6931b0b515d579aeb1ed39404bf54b92b30938cef724cdcb6064db03eaeade7017c4f2770b10fe1ad475eeb808112114dce8dc5c2c07d3900f698752df45b91cf00bc641225051f1fb3f9fcf71a538443dfc0472db247f927a6a88c817f2440965c37f38b48c8ea005d611f8f12ef26452887982507fb9ad4519576d0c80a416f52db04e467fe481df5f2ec7b7d3244aced6a150d2fb49ce50a757345c28d0f1942b038968feb912bf4055ae8921fac7030968835f460955598c9847e6725a422c50231d9b3d9ed228297381da302645f7fd8cb626df03af40c815f267acd369d070421f8cde8a1defddfc111fa0a79970aa311619bb4129da62e76ecab23b74426d3e9684b9bcbf47c49cfdbad26ede9fb75fed9182c817d6096d8e2379c9e006dbe3b6f5a9afd652d31a9433ff5baa32ede3231c30ba077c71b7a8eee7670d3f665f14a8b88f3420f717ceae5414e47299f99f640664de6206001d65460f8cea76bacf28aaabd9b5da53ad8dce7059160ce1688f5c185d3e9311a0d54aed79b8ae1b049506a6a401e06940d78c881f8c51484e6bb04b230c3403d9d170f169ef0a074f635aa4e06346518ee27f8951d8ad0d57f8b823d6a925941c94a6092e895f308d58766b033fc5d91d1fe230b2e1832b5b28d2076030c023b66f840faacd23d0d557c14784a9fb12473468a1150b9426352403539c6eb72f54fe8ae934f231897135846b21c257a4e4bba69056c50e2c679aff35ad3e6078da0514084cac832d0e0010df4b2168478944ca0bc4c68428bc8f6d1d075bc1e2d0b37165b5c993796a5f5ab507bd25a0bb1ebf15e345c4b5a003ef8cefb14b0528c2e716bdfaf23a3f2db955f1a642e5f7f403193365e642dbf52ff72f74c8f86a78937d9ee64491fc0ccd0745e80c545c2f8464ffa71e946e05a36b155ea18cc04301b656ffacd31401ada15d44b4645478ca395426edc17db282c804771c293094043d13c10cc8ad8b24011164222487d90668d96568a51e04f8232c424896ed3f7a5aad529bc3ab2259356fc3897adcc651f3e3c2a748de8c579468dd52c99ea40d0b7adde1c82a9047a9e43533c04b0eb0bb0976b0fc70b90f4b25b84e1deb8fb6b70ca423b52bc0a7dc47cb01597ffe888bfa03197b15d89f4d94579eec4c954229123d64617c4bb4b73912d1901d3098f5e802f1e688eee480232d1d814380c0953eae8ebd1877d46e8d1f2a755807bc2d02a2ede9b93c3a5c01b404aa357dcacf4ea41e5eb50d5be4c12b2869cc044f7afa821f44e156a7708e92cdf5b73269305ac8fdd2224efaaf935508ef18a25a63c1f1b51965038032a58f3288932e143e59dde32234ef5823d96dcfd7a8c6de6aaaa861a2361860133a12025e61cf846ab2127f09c21c8e9718250236d42fbbfb2a0693fd45ccfc82c2476617f12be84b262dcc57188c576486b0bc1aef1b70d014c640e075e67c41bb968e9fb95eaeeb72690ce33631e4065920ca0402004f2cc06e5f4259802d05d7f5983d7e180e41b68bfdca54fa535396c628a84d80f624a0bf06a9ce5990023ce0a9e34a611df67919d7942bd6b3151de4fc53c0d4fe6eb789b7d59fdb2c379ba9741ac0910a6e5b976afc1de6b9216dd94930f2dbf1e03fa79ac364d2d55dc57c8b1b759b8413297add12489d441142740125e787569505504a19112bd2f4b33164a1cdf329b27e30723a98de86c938af93aeae23c9e8454268608c7d0bad7157c322a76f75f51ee76a11109d9b84c4e8ae7112e0498036b6007581743b889c2b0497eaa2b2c9010d3026b005a52521822b40906d432b18940a84314721dcac313a6bb6cef21ca5acc4b4876de1c3cdf5628702c81d378df18564dad81ad66fab752d42f3178a93d3235c9bcff5880a2a547318708911d5f83264a08ea297cf7437465e0f5e590f36c6b23fc56ec7d1d02ca12522ae7026b31064a7e3360866ba0e06f99623b1a799c0dae04f9982c0e7f600a61bfdd853a895910483fb75ab97d3687e1e22ea54c3593a3f779d2fbba2f210e4a447b76e4d6f81d222d385ea078d435a77b5d1f291212f0c87cd3d4b51cd1ebab97776af453b8b0d23d52b2db83c80f54ee68b1436eb7ec1dc017d916e7b7601c5ac363a6573642ac70044a6e981325b1d7f9c650fac5e0a28997a0b947cb74eaa531f7eee1e7d6cc6700d28161a329a8ad2eb9894a62ac066689efe508994606a5f13fe2c26fccfff2874874218152f186a1f9799dfe8784b4d71d32141e2352f24f55d05779c94447b82b324ad01ff28f54d4049f9fc30cc4806c958967cc41212f35d735e23ee66e7d85c4a579a138ec9dcd1121789a67005587cf7ce55372c9d6dea7f293e028a97533bece5056872c0550ff590283ebac4f4a3e9556b17500e70ae0bc9da71ffef74afc4dffa54c8c67a494785b7f9f13b0a0aac0d4019341b64dab30deb6dd0cade5099710113faa55e5f8ce8281a3ffe1c1bd0d0fd6214b7011dfa724095098bd1f65b164c374f91bfd25cbfc00aab271c0cda59a44b466c78f736cd3145ae068148d4a7f06b1472de1f975e1991ec477faebae000fe1d5b1ed73ae8fcd4faf406f8f40e5275b36addbb835048fdb7293d4ebe46743d0bdb493d73f3cb30c6425e6e7f325656f23852691cbef8fc14d8d075fd3ac13e4ce8cb6f36d67a3e5082b843530237fedfeebd5d3cd05ffebaf7dc724f76a1cb03eeed998ed4ba55cbbaf27b1b3872687e33b821a62d36f8d3259454ba4e57b2c63ed0b6b02db530a727cc3d3369e259d208332e4212ee288375b06ec44f56cada7c3ddf60e158e1033909ae927ce948fc775b272ed2fe1e414126d4cd54217acf0e5734099cb179f9d8de11fe364cfbce0ee43b26497156c776a41029e76eadbe4801d360c4cd56277bad8608a7fd68cce120f2cf9ff612914dcb5502ac88a8d7686889a124a729d2a29534b7f661faf194bf83462712cac68c9aaaa5323de35a44fca3d6c8ed2ff8e3387c8db223707d8f912f46417deea435692c6040931003b292d690147b2f0f3185b1e96618080c524a9fd81a55b8989426234aef6c48455530cd25ccb05156c1acf0d8d4c6671c04ef13364518cab2dc13ab48f708a168731d5f1c09254b28fc3c41069094865b675b35baac238a095a6a8ef5805cf4f8b0e0155c0162997bd49e8ade8ae937eb56261dc3f36cefe40a1747217359167f5ac37eb1d4fc0a030161a23c1e35e8ec5cbcbe5874ac815a16a1e6094e82a46bcc1c14143869481e655ea955c22adbaa72c5907e158514b96a0d1a6445d3bb84599568138bc76ce822fc2bf5fde87de988e62f41de5f84409f3fee8a04fbf63a9fd8c2842e7317a40a46cc47366968035d2b9dacf14a1353ea7f5164bdf79e2cb8ce5990c52b0191c916299bc86c3f1161cbb91c1f0f9ab6697b771eef133827ad6611968de962057df43852eac3edc7f653c03a6f33594bf741ff78e6fe68296279ed2065c580685b05d8433fd838f0933c123d65fba905564eab99f924d1b6590e3636bc531e39ff0c884658c7955a29f237ed149f18de79875156fc5d261e38a3ae360950041d1395033b3fb03ecbc74b5ae61633439341ee927d08cb7ee4766c8dc906b2c49a58122007838526a9088a62180d9b97692431c7a8b4097d0aada9df40ba0414f2ae1f15b385fe88e9ec6bc11493218c66b47f993044e4c53bd241bd04f220814db834888f3bf832eb3b740f44f99eca6af788b2ed59fba654957a888d8c8c4fbdb03114002d5f383a775f51a8a4e1aaad9286fd2f94b40934709d87a41d150635ec7b46fdefe4c6e77da0d2763d7e900fd6bf9f4f4c5f7deadec9c76d223d2c1b0edd9d68207d2cb9062d7c30b10c323e3af50c3a7e54620c327c7cea0e727c7ce20c6af8c0640d46f8c8e119a4e540e247de7d4dbf4ee6871a811c93d5d3f6b07e1ff6620342ebb3fa3070b931cc03e7aa2c2ef7bc5a9fb1a6ae1671b2f7b0770923d298919b113565b8786bd6c0c794c29c0c9cdc9d44f4728b0b55b8968f5821bae4fd29448b0c3106dea0e0126478e41aa41e3b400fc5f71991ad2642ba91112fdf983a476a8fcca2c90e979ef4be1c0e868bcb6bf220631c6a9fc6c4b6267ed33142404fb7360c31245dad6581dc32163d0d2cdcc1917ee62903556b6497a4e46ff462c11bf814d92f24080168512c5245fe5f4b77d01c2098e278f2939fd0e1e205924c6b7ec14af37eaf2edd895100fcfbdb604d1e9fc85ad06574ba1cc27bbbebc720e9e66e63e0aa7568e339560940e36c8ed2f61e04d4c39597d159c9bb2d06e677d1fd399b6ad3d3ca49f1115d5ede886248600416aed2881cc79870502b75eab9fc26a628c810efa8666fd190fb08bd21ca07bd370f8a59d8487de0d53749015afd574084cbdbac623cfcfe6be9016affba141083088b8250da7b5f2b19a2e3dd01f7de427901d7affdbbd85e5c05594db9e015554943b875eb55f3b5dfc0a2698e0c087c7c3dfa5fe3a0cd7ba93e26db4e43160c195ac1444983d784e963f5baea955e20b6f9559f29b6959f2e102e2af5c9dba5584f51c3aff073525e19e049937e42a71eff48974f6dcfb590bf05d1af67f184711a44d24f41ab092f15ad09f745b8a0989fc113e2c1c42945336ba7bc41e701cb42bfa58c899c73f07c67813d4b0aa2fe0004b9e00bf1091d4a6e9affc599071c7923816e6a67984c9961ebd191e17c074cf66a83e0741f44fdd4ffc94115d4d050aabbdfd743572a207d227de771fe2d07bf2e5e7e0bf151c753a1242f47eec50cad18fedaf3f754e955eb4092aa64431fd050602e0c0f285898169284a7afe9cd8491b9a411bd8864b7168bb2143d8cbd141d722fa1b8b40c157589b5c239364248e75fe9ea04edb4ac2ea0f0c8d4d561d828b8e8f1f7211f6a2aa72594f740bc588b3dd00cdeec38afa4a5d65bbda9ec93c5ecbf1e9c8ad132fecfee4e88e46df5d935f7a3fde7cf3f0ce0b477076355bf89c4ed19cd22c84d1c16d4c6ae3f72d71706a6bb2839e00512622cfe84816902b333bed75b71f8a41cbad1dd3c59abe49f0de77d598ee6f7784b18a667cadc801b840fde3fe744a2eedbea063e3bf045e028a237fcf8529e5f9312340fdfe42c58eb7fa5754969130955e2392141f36d8eecf509575506f944cd7d5060bf14f7ebbf2c08091168b97035c89c38ea175e9af9b6bb22969790085247f03a9fabb527eca3dff4fd470293b146ab71616b26d4c3daa838e0045f145998db66f418945c46e086e218ecf8586a19b4f8c1c41a64f8e8d43be8f8a8c130c8f9604953d1d939a41d60f080e882ac8d50e655118be1456d16a4c59549847415ad45f40f646474996411b0828c4365917dc3886cd4887bf6f9bd1261b6466493ce2164577f7a346a2e04e2bb57504ffb0e137e602e1e550acf8c4e058332999010b484ae9bc2f2062c8d15874e4c10f61e11b6aa70fe11c23acf2db28139bf950b5673b1b15570bae8af3510fadd33da9fc45c3cddddf2bf95c2aea0860ce3c79feebbd037651644b1d54c3a97bedc379e3acf9ff8ad0e7fccd76d95d5f7b17cfc9aedc51d75a03fddaaad7254bcf97b41af74558a64f7b384f98e9de4cc09934bc223b591b87c99a7756b71c7dc8df15420cf26a3e264c032d1ccac17eb993862cca14aae787b491415110d34a5560cbd884c4a47891b54396df83071eac4ece7c8f36bbdf5d2a209000dd4b6720531df2114574d33584e784a7647e18cebf67b3019f9c2b9c26f819d250200061383f3ce5bee6ed7f3b245b4819114f7fe53f97ea63f0155a804e26308d0325f5f383fa5142c74d7044f62920c247ee422a03029fa8f4ca9d09281672420177f0036262873197d2ed3e37017a6e18353edf5fd72e45dcca5c53c56269dcbcc4c17b00347676e35c7d51cb4ca1dacfdf7a79ad08c452766bed45dbc621ff2b60b80f1a4c4c066519c46fa517643ead16245c414b6b68a3f89070a626118c6dccdca1a530dc9aa519dfb332452b742cd948faffdeb922ed82b2331d59e990611c0bc58e1189ed512a1d3647398c486d46761c2c8a3948f752f09509ff818af11c488afdd784630bb0d30e31fb9c6d2bd0b557acda81bb1c6d4a68589bd119301056359fae368b94dc21ad2a5d02ae72826404499d58c3c56d6fb34369f70c2baabca61a597d7e8585634df65eb2fb982e8448318d9ad4f5769be5859ed6f327ea9acec0dc1443a914c1d024190cdd8e750fbe87ea62abc8ba333b9fb8a83a51835d12a469913c5f07c27d463a4b370e9f88ea59a854a9170112af93e7fe2bf08d20de1d5a9e4a07b5394ef7e47c03ce380d255c8d13470e245703bcc1a4bf8ab0f183cbbd60363043bd41408cd31fdab5c5dd74b862b609bd6f6d76b4c1597607c5fc04b6bd3829a8ec3574a00514b492ccce8f57a871ba9582f5a2973280eb1ef76c3a1774304011176016ffcc4264c33fde930dda8f4992648f85c19f7bb62fa90f5eeb554fd839dda129b0b6f381a241d10144f7b8bb6df1405471b53424e16afb238273de564bc9793098cae62cfe097ea24a78b0f1278270e0f699f2552be644f2fea35fd3cf2f1c6088a9b4c0b7e82011bf458ddd52aea8ba7b5b4d27bf2fb1861b36034a03b8a5acbea23bb7018f96795c21b543e1fa6022f42eb6d6cf56f5d043ddd4b576d74f9253f0dc4acf84341029b2674f762078578f48e9a20c854f5387044adc3b7148edc2ce80ef9d6e4e09607d474adf7d69690b21fe7100d18fd6f472f23f0ab25d3dc4fcd258195adde43e16bbf2754af0d51bd4a2a2587faa57e0ac50a65851660f5d2d0a33ca287d53569eeb85070ae96b5cb54ada2fc9bc67778e527adfbc462bd92450efbdb616dd079211e145f4296f13708eb623c20de539528262e4ba99b4015d3bc2f5687a3e03c6e20328feb3eb5251b4ae0212357adda92aae4f094d3264fbce9a5c26bce23d641b7021f961d8d02f2841f3b616bae7a7c269c135c8d1f7503f818114f56903357ee262cc8e7b5f4b819c6a9b280cbd1a56738c21ea7ff09bdb77d31b1a167d20cd5102131484a2cb469209f23e553c9ad4dce01a8cefc79c676d875f903f28325daee4b3acabb65cc9e944e3c0652680fb09d4e2f83aa382d831f3191d946e5f78da0f2a7ff5021b1638214b01d0b954d954a2d3b4a08d9fb41216e0ef93ea212d806ac63e2c5f93b810b1173b7abc3dc01fcb3abc1127e771dc5faa107bdccc3c0443836a52140d72df72c35ec08a1de95e243006e662dffa57c7fd88708ac6567cfa289b0ca35346399b2b6410088be6168716a9609ffb33baf79018034465003f85175091e7f62a0f34fec54e4aa1676fb7b99b60496670851de3194db9b260a9f6afcf79f7445928cde57ad96608392c94bd1333462f1f3cf926e646156cf6caa3492a54a1051890233730f485ce234d3ef3d042cb1f76f01d00a68c15b7b6158e148c1d8c43e24e75502e70985f326da18089c35e722b399f7d5e6b29d6b5fa26a7d3d93a87b1e941c79c00b1c48137fb0fede02911c578de35237425ddb6bcb622dd7c0a6e020bf75e1091c7da8df3f50cf3ad2f498aeefc31852cef3d2ce29179aa513812ef87b1ef5852a1cfa915c7f6c5ede189e4df3df09f4d442231e7189ef29a32f3cd588ccb6c44e71d492ad089df77689a9027f41a11d1fe2b89fc6a0b5cd883fb9661d849f8a5f7223283cf51b2c9d753668a308edf0128779fbc58e6620cbb2238670cd4df95b8f56074f125a8e866b6b3c85e4ccd6b9929f41fcf883bcfc15aee829de7b3658344ce40a1a88415f79bd7c54d56d2d0f6d53c1a172e0d583f754e013841ec81a9f3997185717d60c367d05fbd44cfe74c66303f13bb6db22548150bd9f3dce849d29fb2528164b474e4a132f9dc7c87223c9932bcf21acdc3b71bbd8d2f0853b05b3260039850782a774c7a2594219add74e37a99ac951fa8731b0b80f0f2b5528718241e46ca079aa59233a50528b771f39ed05812c08e71a7a14cac6b6edc0300c0412b863fb9210a054017db62ff4c27caacc5a9d6550743da062a5497d7464abdf2476ef7900a85f9d7be2de75f0e09e590e2f3f237b31da691fdd9680541e5ad2c130741d589265d6e0bb308dc847fef982ed252b5259de4c76ccd9c1a92b09683eb7926341fe4cdf462ec84395108e863a1642b5f5f5897ceb416f2150d3c98a4a1ae951a4405551ecb8cbe678417f213c5b9e30134b4179cd52bade262c909115e2c3c5bc820c9c11c95ac1d72bb402e9d822af575c02a0596c953fdfc8a37d83bfc0810b3d6b577ecc2ca085f3a2f15bbba4633079cabd07cd3fccaad997510a756121679f1e9c1e85c7646ad25316bc51a7f249bbc6ce7dc5fe7ea41a59bee33847b6e40ee8b36602ebf02381644576852cb43b8b76c445e5db032aa911366719327e8cdf975a579d34b173b794751e41281e09c57efe076db3cbc1c5ddfd3601318bc4da8c7b469fa23562be777cae03dd3fe8051f6482ffe423b0aafaa03bdb9b4672d08f2abd9c4893739ace6ea5789e067cf889896595fbc73ec290eb6e29fd97ef74dccd2807ff0507b8ac0c89f1534c3bb6ff0c422960a68b52aec4199b07172d49bd8fa8877e75f325694a3b75e20512de9898c31c1287765c7fa711bab046f79658b8777bc590b933e143b5e0fae35f877adfec4adcea398c4dd8ba44d4ba40feac131dff7fcd80ed155a1d37f40bcaa02c5050381b43d19716a2b06e11dabb2867eff66e8c2cd7fea910ead63adb127185045fe9831d33bf9b92b7e0dbeea643e83af8494d825380b3495cf5ac2c4390df12e92380071ad25e9aae84d1d6d38105d5330ea036a3937d2e4418e48b91b35a7e432738d6f7639502a92251cc2804539e5b0ea5a25be712d00a77e4c20c5ccfff20921bbb2a125c9232b3eb4fe009ae9bb0df471829c69c9868b526723f9aef124044d5c293d7f75e33865e5a90016b49a43dfe2e972c7e18fae6fb2f571a113d98676072938df535a3c6c031f07955195c1bb1b871c601d6972af7930680fdcee60c3cea187fe56ad0dd3a8eda72c77735e411cb675d77385b5caa76747197c5ad04d4a075d216fdd215f7f0fc23dbf3b2e3e14cbbff533e22f02d6cf3b5cf99935cca84f197f79a0467d8779c976c5e01544103fa77be815b2090ba9a0ea611fe3ef8256b0133b07b5f3f25e26d65e2931a061ef2d68feeb48fc40078ca70443fbc2bdd9822f3461e50a8c8cc2895c0215b8b0f7d51f33748ac86d7a89a239651ed4336741fdf4d4848dbbbdb965b4a29934c01ce07ab08bd0751eaedacc2028f748522f955f50577cbda632f4797fc27a653ea75da1d502da8b50b6b6badd536d5c204940d405e4db7d1fed63f6edbfc1ab37bd22032d71628a5dc7dbdec5b6b375b5d130a0ead3fe264a73fcea7a1cdbfc75cbe4d4c86b17fa72de95109352cd42abba8b5db5a905e25a88b96e9773fab0cee2d539a836cf28bad564ae96f94525a379ac2cd3e46d36a3bc49ec71ac4ae39bb73a83f9913e329b394528a7d8896376aaa6fe4183932d09423e86022d06e4a3dc6d33b301e328f607a6e2a6fd0e799ddedda81f54dcf4973cc9f4d5d034995fc4e76cb0b34a5a4756d3362eccdf44dffa4b46ffa5b3560f9ed41760657d460f3ca9d0498318ed02ccbc85f96577e14b13cd62092419e7f9fe4f9980733f2fc97142eaf638027f14ee958e4c551e4fe1167c9d40515ae47a9b7236f9e647ff7bc0e32a546a4bc3644d4a35574fd30117287aabe91bd430429fb7505953b77d19c7afa42eabb6680536fc2d41952f40df1c73f43dd1afaf8e359f8e1f68d944b98323a84539fca5fe0ad9bbc04186009d4a73d6b19fdfb526a2d2ae0926538e219154b18c251ee9455c15276ea61d5470dab934fea55af0a7f5240228f3735a1dce6c004650a2ca03421440d92a838c015a92a39a202a58aa5020a0ff50abeb993a0388182b7242832b468adc9e2dcf7313413c70c0767968392272eeb3c5ebc83137662b44317cf01b5a31d906a38c089911d8ea074406c2e609593a5e1faa5cb0ca680c922061821a03c5539a9bdd6ce9c7b6bdc00dc1af70600c5dd1af7062096a5eb5e7f2bdd6ca595ced7c5ee95ba747777776f8f75aa06e993e3ae6fd36e5ba5dbb597ab1c8a3a47afe7fb319cdc1ef7ddf68f4b518e3a57d42ddd5d4ecfd3dda79c72521ea89c3e3d8e87b602f449eda494ce54d0fe48ad0551924529ed38cfde4b670aec2805a75b3b8257b6dfa9a8a5f58351fac1282a0629275d62b7bbd9da66eb93cb2de1504b50dd666b9bdd9e74779b558a943854daa4521da4c4414a1c2a6d52a90e66cce6b114274a2c66b769f3bf5d8f7a0d8fbdb8d888f3441730614618c1a374b5f529b70068af7b57984e23db5683c29b53507762a52565c032871bb2a46235430e4e743ad039850f6991a5c87e24f14bd9493bb490a53fe14e59be3fa55ebe8f711d9c499b4159fec5592ae1d41044931158b220e2411c7bcc0d5818c980640b1431d0008866051334345939629283243128e3048c2751881047e9d40313586ce181893252c4d16b169882040b56b090832ac01047277226952babbec8aa24b24af5f88995acfad4b743f542caa9ffbe1da94f0727f97befdbf1913184122fa238c102c693e87df7edf02eeda4e830072a08e0e244cb15472e5b314850b14413ed8a4bed8a0f6a3e28d1701ebd5ba3a109163c8b2c656a24aba477c67401a6c45dfe586badee2ebbc04db6b8d4cb0498a202132127bc14f9f2606441920116503cf520d217a594d2d764b29269115d268701d9bf06717104bb3ccf85753041e216c56c3079e241a694524a29a5b225666c4bdb142ac50e540cbe4b98b0a182c19c0c47961829b384666bf88eb14d98fb820cb636d87ac0f64b75a14b14f83e41a3c05b13360ccc8241c5a14a171e9c943441b26183826fee242548a80df0963b4989111e4a681bcd5b4a3d65f1c600a16292d221d55083c550120e45c42b845847386889606a49bcccc82f63a6ac2f9649965258284d59df244aac2856c0abdc4980810286895d028c0c53605519bb05f67070f4a5a98ac1a9dc497ce1526b5fae6cf94264ed751c331d9d244a762c9058a11ca594ab52657ddb366b2badb4d27a9f72db7b1ce5b6a7db36a7ea521557a70a65959ac97b148e1e6973efdbc82e679f76331b998e580106508001d4dfb66fc7ac5d9d15c78603565996ef4ad9710a300069e9e7d94167eb053b73f64329f37691e66ccae4db69277deb4d1bbf35322a7663b11b43c56e2c86b2a9cfc66e2c86ea1b15baced562cd956395a73eaf4371f3ce9f3384d06da573367dcaf697fb4c8a0064489fd4456bab5a56a5d36eabede23bc3a930e66650293aeb2b2d652654f7759ee77ddd9742553a532a4e856fa513afb615cb86d0a924586256abb65cb4d2e99a9933343e6b9dfbafea1f52a49f7d5b4f67a5a9913533afbe1bfe9d9919578b3593e2e91b791346d7dd72f603e50e65b54c3dee387cab3399e79c7e2bfd13d45f35a59572d33b31daebd3eea675d23a6523cda6acedd739a77b765e94d741bcd407eb4175975b19b922ea3930a8c84c44855dc835f728907b233311f51d5eb15ae03853e3b5ea771d789ef30140556ba594e200b0505cabe57553d4f43cc0dddd4deb2beca043d55a29a530014c005014c7d43365fd331207189be0482327a574d24927058047dfeb8f520a8ee0e55170a4f6270d4fb013f5c1667fb019f6dcadab95524a6bad02d840ee2fd822ea7e403fb8db9fe06edcbd5b18a31fe03c96eeca6dfa9432565ff64dd3c951f16d26392afe2b277d3927ddf33eb7a5e6ab28a6b3decd3ea9f36ef6a3b5f998aee8ac77b34feabc9bfd686dc592328a25ac6f477d56cbbefc0105cedf3a97fc24b0fdfd95cf6ab4d4add6b7c37ecb25ed56af547d11b8cf7deadbc1f19821f6d866e50fd93fe5727d3be6bbe80c9df56ef6499d77b31eadb9ecbb2e0d9dd56ef7c96637ebdd5a9d9ba5a1f976cca7a13574d6274feaec68ada6e6db31bf86bee8ac77b34feabc9bed68edc5cd19810ec0504a375ba1d0cd5626946eb642a19bad4ce63422492a9552d95fd48038332f332e308426aa7f0b74a11f9905090b2d10677e05fe800085e8faae594ff33e56df0a87b47ef534e190229f21ddf3636949b656cfb2cf627d2bfc69fdb07eb5a25949da5cf9bca0b444eea4255572e79e7d9a07b2218c04d6b7de87f5adb7df0a7f8a6cd8fad5ea7f6a9e15c2e8b7c87a20719b268028b0704fdbd353303bdf67f5aca72f338fb74098fd2134dffa1a106643d80c49583deb7dd07ceb697e08eb573fa488863e34a137fd9055e84c1efb9ee056e84a53e63f03129149d0a4984164bd0b2412834264fd8c825bd4d23760910a0ceca36bd1d23bcdfa2be56c8530fbaba1a9c30a617615863d65763e854fd6ded0eeb0282020cb6fd19ff2ce18cfa14da13b875cff7aa09af7a1a9097f8a66e853f3aff087f5e3021aa2f1a7a9039b4fe3c7c048a0f9d7fba8791a35fffa9a9a1f32f334216c7e0d288fa6cc9f06ec2933b22ccc8430942b84cd777d8b2cb442182a944a7289f53e5aef627deb7db0443390447f72ce4e99ebb01eb39ccc84610665ff15d8e29ca06c9a327f15289da6ccbfa6052c9fe49829f3c75fb0d39c06192c7f741a5d0171fec194aec608eeaf0c0cbbb01bfebc8283a3a58814b523493e30491f96b2f42e9faf62801f67eaf4b4ac7196b2d328033710527e99971b78d25205972e579838ada8152f2e103330f982d5352971040a112a74b5c9848b3cc670b8e282aa434212c4567ba1690885548595da66a4a549082d555c69d2e47e4f5e73410cdbf4829128b3c9c8054ab6a7294a9a48e95e305aa2896b856a08aa41072c1bca4b9217299a64b95932a2050728352d3780d1828390d2c63dd126b6ace8920f527c40a249136a4583d234658bcb9a699a4256ac046d20d0686d8854d3162a8eb0682c2de1684d4564be5a0f34ecb0bdbe20b9f0840ad7815098a42d4e9294404a72420c1028da902b2161e2538a210625243522aeca484a9091941cbc27294048818152eaf993375dd102d5155496f854b449033306121562a2e0689098e8931253a22811858c122e34c92cbfa3528786901722471a635e8c68249dee4a221b00c3e8e9c8bac63c1c81e87c4a6402b9cb2a5de70645a985f6df13a69456942459a192eb8b600506e9eda9259e3830fd5deea42a52642e775295a5a42a4849558e72275521ca6352951caa2869dcc315580fd736e3ac65fb5d0a4602f7dffb70dfd7ffdfffa4defbc1a9e770bc477d055a44853f40e288e98f38556cb1befd0dd6df3365b6c3147cb80fe18767ca6ceab907f2fe7b297a615108a2a03e8af72dc23aec09c2cff570e18f14bdbb359aaca56941a2498bb5d6fe953d24647faec04e3064b72a0cc2cf7d5211946c7fc2e0391e64fb2810265f8aaaef3e90c6f5707f3f05d2708f8f51bd145561a74020f10381c40bfa7821104a39c8cc5b88c322897aee51a10f29722f452ebc47f0ac6d3730d10469c9739a0926b43cdf2a794e33d144499ed23e91e76fb53ce9b3de6194f5fede7fdfdf39e8f4dd3f15fefc00a1d053c2134f532ff9e04f853f45f47f568f9f863e33343ff340e2d84f30fa2a1abe0f15a54d79fef72dae1e67ca2656a5be08ff4c88c39f57853fa9f0a7534fc7ffbe45d58fd89f863012f0a77e48910fcdcffc90d5e3f731338466c4c180ea53300aa333a0eb3108ab610f9028a5d18b4623fc913521a31aadc6d592af1a8d873d90d8c1b7d8fa511ac9a7299bab995ffd0cfe9af04736fd2afc29f2593d4df82397c299f007873f1269864662e920ac3ecb7b7f1f2ceebb07122fac890a2a62c4a8b5bec887f5de7bdee7d5bc6f853fee855e13f27e749a2754abf94963b15c4dad9af0a7e6bf67b16a427f624d9a2b2c22c5d613ac031ae00bec29b3abefa6d5ea477fa2f9166958ad1f278dc6fbff14f9784ff33f453eaff78c3440acf92fa411fed0f8221f9affc21f1aa1d378e18fbfc22252ac09add2ccb738f3a31bcd84b0fa40220e6135ec0902122d932f7d91cfcc7f3012bec7eff33dfe8c7cbea7097fa6d094cdffc26914d65ca055b24c0dbe1958e89bb5213884f9a83ef585301faaf761c7b4808b254b94683471224dd9fc1f232ee227f27d4a35ffcbc02dcea58974e508104e3801068743887c21cd7b2f84d5500418ac67c2603d1347c121a5793fce252ae22d6af0448d8b9155f25e8ade7c9a4daa10e6e3a944980f297e2fc5ef85284df4f91eb6853d5669cae6dba5299bdfe24885f2fc5515f8ad52cbe65ba51a8e78fef7a33dca73c268488f3ca6d481b436654653369fbb97d6f2fc1a49e01651628bdf5311142f8081108d26b6d8e2486b5bcd0554fdb564831642f4a0830f508e8001183508b120031b68538ab801192d5eb8e4c0e8480b9e52f084064158d16406305844fcfa20a77ee8ee89a2019eb3bbaf5c62ce5b4ff0ff1eb895b00465fa11405581659e134ca66394232862c8d094c40ba0231b9e20a2010d478008faa2bd4491418c17c66c4184032f007083322b50d1031615ac68d200244a66fc90c30e4a2e782146871c9c4882451825ba9041053e38b1c208175821c50c6381325884a6c8c10a4c7468e26e44f650fb41ca96a7314d70d162a9ab90411131d87206971ea07031c30c3d8921536585275b74e009951f6a2b280288324d8208c3640c962c473a202115294a22c4911130d8e0a98a31b2b020040b39c881138f9423658a606103a1236a332c8e40a2b2c50b673ca9a104185b1461543363065a8c5f642183171c70d144185900e9704599190485f1440cac30811155114510494e886a0092d2e50a227a08038c201ab080000b88b8c10a29b4fc70061829b23439024305075fae34b1454c74b0228bda106388fe54e48597254bca387d012ab2851761c2bc00498616e615d40a0b5d6eb842cc5312261d85972f72e0c2658b233b8828184ad244c9931eba18d500e80a192837080a73460c5c6653830113c61058c2102229a8e6ee538038838527237818a28ae8619c8e10730414666cc9c20a274eaa4c11a38ba11582c0ccac2031430f46b5a2225e6ce0050b359471a48ca51754418115b800430ada10458ce1b3cb4c070f90921c9e401285cc0f38d4f04113dfb9dc8bc6f727010f03980a3cceea34e792e7e0efa69d61fd1812dcd983f2388daa51123c56a76f30797e07347c9ffbb13a6577f29c2749347580b8cc3b4b031cb902519e49d49698469e83dfebaa9c11c04ff4ad158ddc5a82b8e4ce04254f3e202457805ff5a99ff3f55dbaae7c8e1899462df37785e36585237eadc22e349a1d6bb562ad562bd66ac55a7d7fddaf4c007580a919c8d337f2516006824210213f92368da6d14673b902b298cd88a4949d4deff86cead8d8ccfc86a1213ac4d1d1d6b49f5e696bb5b5b21014f441ebc8216cb24dfd78a472379bf3523ce7f6f46e3c3636bfbe38b2e99d54f6a74a98fb511ecd66531e2de11ed9f308f286bfd3fc595af028838e58352c8fa67b184111a83ff61352a6ff498086b0578d103c797474248fbc20cee331cf5dd76adf8ee90165b012835444f6ff3ef5a397bb29c1145239c8cd5e193cceb6eccfd33b335f29f36f9234a8e057bd4fc1e32c0f291af27dea87a81ebfcbf781c9b07de090278c4d09a610e4d6af47d3f09b3f0259c64d70f30c757c3baa60fbe38de1f47ca970be7f2ba773ee7b87e3cc6738de6479fddbc1a15e4a540af5bbef289d1ea5d4060e0eb0c7c763b31952e75c6d4bf6ff9e5286339438d9512df31cb047d02b837b7a6766ff107ac7cbfe3984d8d40941295663ad142bca3554ca7e00232c4f9e482d6169222761a192c70e3384953c3699a6524a49c3962a277008f762fc7abd520872c98a6e2bb2ffbf6653c7355dae169464e972ed70228f7596e1d0d774700600d96db24f57dff87710039e49170d26588eaeec724d499bba32d9af10a21abde359c8d4a9e1b23135e48f35e60f0e70e04797bb9a9190380f00cd715dc3f3bc3b0600f2bd47cb7ab4ce095ae68fe3db51a3775227689d1f2df3bf2a481738d03a5a7038851f97f94f5718dc8f3d26c77b2111d23b34d95fd2b8d741bd67a07550e14f38caa0ecfe770ce652f8e91bff2037a71004e7ee9b217d6313e2317f1715ccf5486517198cfa01db1f9bc9863cf3fe04bddc9f04ee975750b09031cdd44c631c141204f62be9d743e6aebbeb7df7cecde218234425a5ebdcb49b65e0515a91fdbbedaa3d26b5e868f982a9fbc411a2fc63eabc54f335752e308220677718361077ef9d5b8c8286b27f1379102fc8633f25054194c7266364ca1ecfa12aa0527a65f08fdec1d9bf04137aa4f26d39615438e2cc7bc3d1bd5a6b376bb7eda70d37cfed395b18aba0ec9bfcc373e4197936712d744eba24ab2ab8bf37ee528ae303b66e40b23521dbe7f1cdd62d84f001ce813c2ce8bc854042135e31a0828210b1671ea3afc4e5135b7fa623095ca90efb5795ef7bde8f323001adcf332be8b69142e82941870e8fe1705aeb67c320a37d9e69ab1778c43a2dd2188ee7b451ad6b1b2a79f56f84479ab73fc17fb502923f93e4822e79e657bf03fffc42f8ae6b3a1b29b3c29166d6772b70e655537090eb65a6dfb77e04e2caabef9741ae50feccd34f84d6cf84e36a478bf5235e813df07fa04a8a0ccadba7fe9349b8935c1026cbc7dfb5a491c9ae77265c7025ab1effd66d9e0cf29c9cebc9206944c2b0024bf880c7b6ef40133cb6fd0b09f6b917e326af04efedb7c3c3603779bf027d3c07833f3cc7fbed35e039f2a380fd4ef5fef5c079158e32b758df9ec3fa3188e7d64c3802c933cf02479959f2eb31025926b7fe7e14588dabef9f014f5885405c193f873b6f5f04e4e36f81abe7992bb0330679a8bec5ade7b66d5be727f8e3ffc0d1ff7bfc29b0a7e011e3edb74fb1a07109db2a543dfed56fef79cee7ed5e8c57b865dbaf56abdfbef33cea39acdfb6d5f3f864adc0d5ea87c0ab5578f1cf8f7e16017feb71c7fa1538ca71f5dfb340f9f1587d6be5b1d5b7409808ac573d2b1c81b8728a676250453b7f6083201802571e81642e04e2caaedc9b4aa662e856608b15fc995edce02412e97cf0a02d4622111d39e040c38fa489443a49ac61114c3e5096e17441064322911b65c8504206350d8944705e788a22ba16245cdce048fc912a48611289cc22a2bc5d287d791229d835213a2859d0c96f9b1143c155883cb903eea41faee41760f9fe14e8da46fe8bc6921642b48ec27d7f3cecf7f06c5537c0353682e76c35d0e0081572ad411e298b0a1e63b9a690d88436b4b1214c041b43ed3575b8f04e6f7e5bff08ae43001a8d465321a781788ee7fa4294a4511658e4b199726d305930d52aebdfb636865aaeddfd3d3c37fd246063a881db3bd8ef1f05ee4b1e321cdf82f69d67f278473d07bd1e36c46183353cf6f258fd586cea8cd0b2faf7da70c44db2d41713b8937ea8d96cad10ea4b079429b5dff2f3d9de8644603ea4685f8a3634e289db1ba16290fd2297fa50710b8ba84025da7771cea71f0f201ed486dd07e0717f0fafd7aabc7025892e60c86d4426cbf78cc2b07227193165f9b7250cb4513f6b45a1266aa2e6a44d9b76bf68ad544bdb6aeb37fd133af46acfee91e6209e670be49c3fa97c7a02ad53522a1da9addd36bb59dab5769802ed0e9b0ae51e230916349115c27c58df9a79560863853f2cfc294f86c96148f41e48a401f3178deb67a5fa2e84f974ff750f2476f0402290d80f032f199585a16c5de6e8adde496b726b59c18b249a44e9007cf0e5c20e0b8eaeeede7bafb5231057a63f937c5841501efda9937a2093a59391df0e1b3d646e812a29545d601adf1f0668bc4a0bfc2d677add804767b2a17f3dec5fcac3fe9d6f47201988ab8bc79c6667f21cafadc4c0ff6403989b342f23e78fd414fce3f2d4645c6b055cfc213cba5137031edd4bf6772fbdd3f5b372b3f6da09daf83169768a067c5370cf1a3540f0a073ee86e3460d77e7386ebb74a63854d7751d2ab4d13738387a6ad40042c91a66ce4725c943f2863724735079c3a94bcff3de4b795ecaf382f48dcb464993320c238763d8ef5381382ef34781366232c7077dc31f042aa594367db3051e5d4cf6974ec67584cc20d791349791d13950bdf3e948232e9339506109fa46189d33828ef9bb9816138efd1486c7cc5f884216fcd43d60070f99a36b25fcd431e8f2f480de91280723fbbd395090375090395edef0ef69b66dc1a31c92489e43e49c5cd2396ce48d1b641299a37b7fa9a47750efb4236f9265d718b7273d141e30f434f4a5be1f2bf6190f942e6fd0ebc53c660307c76c6868d228e15664ff8ee66ab1fa632957d8ba9785f1ea852f8d86735fc077caa40aedd285ec72868cc2074c00e239a86f7963eb6e4aefc7388ee701345a93e7a822902075349ed9058fed450e8108fc396eb5f2207b7b41e995a1077de34f53051e1bc986bb233512128fcb4a742fc6afd77f8c68faf47f1c9cd4145cbfdb7ee0e030314de7f1be930bc3f125c54e05a6f0071579f1c715e01f24a40fe066dc000107b1481555291ca230651e40e1a485f843c49b22fe70295244555874efc5f1d88c4d1d9c03749391fddd4df01f13908a029321092eaa4c20618aaab084292b032b7199ebc827a0006880c1f2037fe4982f39e822fe10c1485388a9ff21d25281488423b385f8bd0afc01c106f187c801c454d8ae00220410bfb0a83b03f7ff10c1b30ce728b790877c2e84cd2fa10361f382b019721a583981ff07d30c512814aa72f772d6da8fe32e8e1faa1d3c1d69adfd78744b3c4eb0e72fc00b008404d46d524aff5df0f4c5f49cca1da5f7ea80a08b2ce60367e0b1c7c82609c673c6fe0245031ee89d1e9d3f07f8bd878e06b4033aa7be8edea283d6aef275efebbe6e38ba73f75ed4bd28eede6b0307478f90a72fdd123b91c77138fcdbe1bdd73b5feb2cc0a3799e57bf1ea9ec798ed449d978ccad6402a7bc0ed5e004e5ac3309fd338f335613b8e58dfab3d92ce5c99637b6e6b88fe3beefe5f77dcf819ebfeb31efeb9b998e3a9b79ce3d919ae2aad7c6ab88bc88d9b31b67d2baf3e9381f092e7edfd9e01308e93aedce82ced17dc37b7f1f1292399c0699e3bebfafa077b697e1f88110b9fbd18bba70c442d506a6d4143c535330eda4ec78c8f98df24214d8b26fe48dbef13c86d4f925e3e25c372c3b87e4fe7638154c650976df180f30ef459a9eef9d602ae3b00c2073dcaf29e024e0c64c47cc6dd418698dbe41f97309e1013833b0e9c5b1d8e6e506c601d77836a7da78e0cd39bf1e2eabdd384ab94ba5a41b6803c763383cafca6e1f3617bd3238d63bde0ecdfeb3be37737fdf6f0b4872e54030266e13f42c63365663b1582c16332a2384444a9acbe52272b95caebe711cb2a3b1055399297d1a5b70cd2e950dc2d1c6ff74aa365c4b7037eb11078ed97893a5cf92ca7091e71278369b09a156b817e3d7abbda7ce2c16c3993fcef267097a9ed2673233c4f1955db640e5063591c857450a71fbf1ca707c276d5f433c5551e20af0ef6aad5e4fefb4bc40e7903710e1d0540c75c1a3b441da30a32106f6ec5dc13c8ec27c7a7a659fb34a59a7ec1b8e0aaf791339651439c481ae4a653914ca9afc5195678dafaf6d9be1b8a17550904eb257c9fe24689d115ce67fdb0cecde4c4c40e640bdff083287677f98101e712c60bef7aa775993efacec2f95c81c4c640e9494580e204bd67fa12aa34039246ff87b200a4e240f387cca52490cf088237fef7513ecbea15895ea21b76dfb6db56dabd55329572334bd1e7679ece5b11a6fd3371ff44d8f8f1c924335ec5fd1c43f7fcef08654da9773dbe6b649af2db091bb979966cbd07cff7f1b4140ee2423b2e4eaf484c1d6d9d132ff26b2ff28ab017f603f1d3c4d091ed3400df853f3afa7017f689ec65fc9ee60b27f67e4319792b392fd88cc98a7304e947df427543ce6d24a1d935d4c75f29877005e1ab009524958c378ccff05e219b0340a2d158ff95b228ff97b49f068896c64b7712f539018795e7199ffbd18bf5e3f91f2152b1e63bdc0348d98a68e257a659adc5a5488214bebe43aaff7bc4c031eabd30bb4b529d3b154b56af2983f9ed876f1983f0e2d53be410b6dc97671dbc48499b2bf75dcd9c9e439462ef30fc311e37fd534c2c9e334c219a7110e78ac577a07bf7fc5d23b44c8b12655272a14d54bf62cf2900272271981244fa39f55dc2dd1d4a9f7624b44946356821388be09627a1182c28813969654c74c22ee673d0b3cd62b573ca70b53b0ef5f913c675ae91b7f0c4e20fa86bf9c42649f9fdb8824862ce859f68efcf9fd753b26ac0b3dcba0ce20b6a0ccaf171085b99390bab83cbe5c9d9c091e25d134722426a4a5f7caf48ec43f919c72d781f52d388f3c66c5633e5733c0bf725a8d588b0ac6c8d3b2c8c09d5484980c83ecdf791af94cc9a36954833c8da64efda4239472271931267b903b898823b2952424569084040c4bb490c58828bae4711ab51150c0d04644f14496576a3cd3802dda6ae5b749893d9c71de9ec737eefde715cfb9dcdd38d52b0a29258d8c14827104b19fe79c56d298c208c97326139e63e5c873b228f50c8134d7cdf5f3f8bdd5a9775e4d78ac4c54a6bef1dfae38e1cff5ca9cb0dc49676cc9b6c2a07764586dd037fe5fae4e7de3ef4bb0ea0678ac4e9e539318f14485ec5cf258c364ff9da5a8d48c18453d0a95aa010400009315000020100a87c44281489aa6b1367b0714800d74903e6458341349234110c4300862188818650c21841044085146219a620126e08ccba430047fda02676addf78f23bfa9e4a99c10baaf4adafbe914defa0645f88a7c5db4a13b6d05964e35d5a9509941f9921c8d03c58a3904c8a1540b67008d79392c4f260f0e9c7f1f3c847634db1098a83ebc3bee3f3cf441953731ae8d2e045600e06886b421b160471ea8a9b4c89234484ed551c850296533bed66f051607e03e65a15062b921ef1151ad42afd3283ee7155c24d21bc4b88b9d768f7d28e11a69ce9139178f53224f30f0a6b9250c8a12edde2420ca4760a45ffcb4db854e05ef536afdc70374c1657dadc5f7c2463460f419997e02b21bb41c2d7cba5eb8dbc964841f01d26ee800f89d6d5ef85398d13613e301cd7455d55b68181edac34db46a638da79f08a5ccf33869e3ea8e414ac69130b7469ba6a71f739a99c19d27424fe97f7dd38bb5ad7e8ad50a0d6cc5d367babd918add43092a30cdbe14e0ddaf8d08c0854b77050dfd1c29294ada532a12fbf4943632d68202a6d2a5c06a3f4654e4a6cb9ca1faf011b9ee1f3133cfa2c16af26b8fe7f968e4e4f7242ea9d1ab8209d486c4096627574e4574ba30fd02a5c972950363de747e7730c189e7050a57bf1d17e9c17d5cd3464ec55d57d8840af6e20c813b4057bc3e6ca7f1070e615a0f6c8e896915c074bab837bafd59eb98ec77c92f658bbf94893d94374936e8a9fb2726855ee9fec4daa72ca3af33cdbc53d38e8ff902c9f110b6808a76f3d69aa16b01b658e4be9adc0064b9f1c4e5e6f452be90dc2ae249ab46ac450df837305f512a722cdb9544cc4576eeaf2607f179c5e574dfa1e394852a4b8b8533584578d9790a3762f379353ad9b684a598e2523796c5f67593cd5860ca719c42509aa2a3e701d0549a95eac95a1eed4bf058e8bd0dd04b05489aba932804efa34d27d78d264818e9a39a543e961352fd7a320945e2b10164754ca3003b621c14058d9aeedce66a983188e54eb52d626e93308d2ba98a7d1714bb17f16e8f14f8c1dbbca6cf72a8390bd65ccbd3f1e4fa3415d80d6af7b02bb691b07217dfed7de6dce0add8466132774d7a46d1212ca4c6e0a1a1d18d0f871586d8369e000a73384b94b1f220ac19642e9e89ecf7ca15d72648556fe5a8dea31103dd03ff53badd992540ff5bc3fcccbf24c9c18500ab23ca5b2ba446a6df241eed6b8597390547e6924445ba4bb63f6e465d86db7b1da8cabcabdc4413d80b0d79e68989189db572f321e0129e5786742fd9a34f1e853426f35906f38e696c491fbe25bac85bf131ce6607df329c91b7f61c50937a86379ebaed6685082e3c33bfacc04d5caf7a00f01253dada714d1b76bb779ab8b114447cf677e432fb8be05e1647b13f1b8b94263cdb2f5f9f065befaf0855d931369c20064b1d0f003cbb80ce416183f86b3f85123beafabf53f498d5b05510b3b54de25bec0e5a6253ff12d984bd17163f55b08c57d26eea73cd64b66f31652d0bd6ae439fa7dce1706b038306f688afa584d500a180ffe7c9919df7063d564b7382c6145bd21298d6d5ea56736609cb000039ecf963cfa77a97b2d5a251c2cbe89cd5e2a8f97c465faa70192df6b864e34274866434bf474b1e577cd167504d91a558e9493bee0948185871c8885d5b0c2f3b4608e496e8e36658caab15e8d34e91b5850b3f6ec40e498d9a8d2f83e5cdccacdfcf2d7ac9884141e20fdafc45eaa3edd60fa94bdc66f70204210eda5f10f1add37858e8a3f1974cd097a47dfa6becc3e7403755637d62736ddc968b4152e4440f27d0eb6a36baa4caa7373be9f49a400c1fe5157fa8d918cccdaa606b972c6c9706e996a84b947b1f7e6985d5fc9f8e4a9b7d486604a8f19eeeb580715d28d65dd87f5b690a1a2ad2e1c0ac1cdd99330926be49bb5125fd7ffd12210ca9fec1dec60c3965922cb3c5311560c4bad1df99d8e61cca02d44d105e16456e03dda802f3a22dbae670ae8c8465228a34aec927bbd8a03d275f435bc52b47471012e695a11e61b451b4ca79c9d69508f4faf514b6fe9447eceb94bac50f9a7af18278691dbcd48458afc2fc163d2d100a6b31be1480586d4a1efdb29cb4eb1eddc9a84328a1a7182ed5ed59a53c2c60dba49f877747cbfe89032d84ccd27da35b855eb260b41378df4f4369b692c5e8112ef27230606ad44d9ba362b83b5c5009aea8afac3df99c326aaec59386c5429918f56960dd35c445864d907be3a3461b07e82a18d221c090c242c2e6af1b30ffbc6a7545b7514c5d8caeb271804e5601a1f86f5d5952c84139cc24ecdcf9e8856c020d334783220e718a5f11eb8ac1914e56deb7155fc243a1134ac65ef89f0ac12502cedbb192751b7e91ac843bd32076e17d18daab7ce918c79628478e7bcea4017a4bc474df900e51d545fb450acc5fbeaeadde2022f527daba6f4c135351378f86a3c7afa0bf63958825570b5adf9c50f11beb4997bb04d3389fde6fe0ebac36b4d15e967edcbf8573ccf9dbe22e5b074c55e1399b30f2001fb66e7131c255b009c332941a4cb8e9d4ab452059427473db457f7c634ba9e3829d8559c40618e4605600f52664ce2ceb6c8ecc81e38710307dc39a834cdff04fe0d19835e81b19babb55691ce831002c1d00916293c135cbc0d42448981ef73b002cde52d73720c102739f5bc7915454d20ffd8eeee2b1c17d29e61d6baf5d3551a2e5e8086cace9fd9bc9c005e6f9cf58ecb6e4014e5021d6ef8b459a745ce05f41fd75bd79e2a50ee1b831793d820eae9450eb999ae6be12949615d71eecf22cefedc43b322edcad7922ae79848ae42e94a8b9d6a444ce90dee1b7a9f00bfb7f778e6a520144ae4ff510dc1b64f818787d5a9ea09be37c62adccf7a41a0d673321afa279949439fe86de7b82b606e0f45981a6e3cc6249925bd9f97ae743329d3b664db11e414cbc1276b26c302a4520e2045012be203cab21c965867797f88132158e9ea7840229cdb1d36873d06ed64176bd8328b5c37fa0260f7469472e80adca77737bd81733ec36fc7c05928beef3f89872bcecef4933b8538b318cce242fa851fb1e93c3110e1b7ed9b5ced7d3c568fef268493f5ab80d9cc5e42084144f3baa822be5ce2ec070b1665bf612641bd28df4167c294f0cda83faaceb2d2d121a8fe626aa1c305c8ba1f9ef6c073a405f83034de3519b2be3d45b4b8e2db958d0ee4eafb9286bcda19cbdee57490913c14d966258b7adce2eb73596bce966a0e8ed88d295026705cace41b3bc8feb3b30f061066dae55dfe62061f7e2d592e6c13ef86dfbd37e3fd2a0b6af737d68046cf58c761cbfd6001b8d34048719514841f91664eb45ce4d803153acb53fdeec44e5f89068499f4134b611b4d01fe872db02323448e4781a1f7bfdcafd6987815c9ca2bd1cb9318024065405a91838fe940263d5b3ee06ec132a125a97c13db77748823f6eebd07e054e59c6e8125bc7b8cca2bf288439f0da11a8dc540e24938e6014e3df87f345d40cefc7d5139c227ba15c3bf555dc5a6b6568b9019a009c4d7c1dde304e533c0e22925d4c2f91d18857f531cd7bedb9d0ee7ef5b5991f4a26dfba444a45d189bc523eada6fce87aa7d35d86c53af221f0c4637741aee568b17391dcf67386a82a86ac219908fe5af48f3c18293788897712382cad83a8b8c4e50eb2b45990350fd20cdcf006c38b832e09d745933eb050ae7feeb547ccc283b623e8fcea9785a297eac1e25ff7f596954727301f05c576e8d06b42cdf2c59e5db933afbe9f1243f44d45dea928f89ba984824fbf716407b9c5b03d139e9e951fed35a3555cca812e6f9e9132fb8a3ecd019cb82856a199e52cbbbd2a4d017fcd7672dde63348a561e6e562a3a661fc96d6265a1f6f37a6876f092d1c513cc929744fc49a444b2c91dab506aba67be24d2d6e3d57367f88f7b9424af515bdf10b2cec8ee3a3bc0d85c274713ec178dc4facb17e3ab1d3507fabd1d33cfd8f197ad4e418d04b0f06c05b170ebf4dbf2e9e19e054c3170542485160a74f8bc7d1953e85cdc30555d1822d33db0c9b14d47320cdc8d941f48bfe7e17adc2ec474a301f6faad5909c983dab593ab4f048383dadb05939bcb9ef9efbb795356a346c444af6975c8aeebc0bb2732450d1c150337d999a06e4efe9703e1f5ca3b82e1a4696f0496f56af29decbe633f93ef061e413cc6b78a2dff3be016ae5a00567a7d35b98b4ea0598d2582414cbe7a60199a42f451196c35000d56d7c27bd212cbf33ec7c275dd91886c00139e0dc0f068c886b683ee79f6b270458d622484d71cd17314225b434e1a20d264116d9f627bcbeeac1c0126b1f8f2569122ab6956e0d64370cbde1876006ce72d0cf298c5d7e367bc83aa045a55648966cbe966812737b16819c2e798cf97d254b351ea46f733f9362e9a9e44baad5bdb963140bd673162dc025c0a1f3320e88392ae927d2a4aa17c1e9f6113653754a97c2c6722bbfd4220acc124a314998e918c7c755336e06f1ecdc670c4abc8f6a6968ffe46630f40417ef717d2d17b1ae188d904363a0c8556124e06089019c55d0f328431f8f398af1166f2d7d9a33db5fd903f588c0400511bca7c114abd73dc415d5dc1248c369b6312b63508fab798ea6f42ae944b909f3827a4db9d551df5657fc4782f39e5e395034fa87a7b8c305834a1516cf5dcf8b3aa318b5b301edbed42ecac6e11903d21bcc8cdd048e225162a63f00f516099e97f9435fcfd4580ae4b318293f5264b9af9e520a93ee4f7fcf9a3630f2d075a48547d2b713253b7a2361be57291abb999faf20e676144778a5f5078e58884fd27a7f709f63c947ad4e0c2e8224b4d2dec17180eb43176d178abd60ecc781d7edd557bcbcee88c4260720637d05c6fb9b1696a1bca5ea3d1102f6f38b6cd80268cd3432cf3e9421c93c5ed46248fc7c8ee5d0c6b7cac0028cbaa4e2776fa2be238adbc7c637d7e9ded0b8862b5110469ffd892c9254631cd20fadd0bf62acb67aee30f0165cc06648b6982bcdf5ca2f2246500d1f23221851a091f698a504f81bb8a04c389ea23fbd2744bb17bec27bed2956c7806445fa1f8d76cb7493521301a5704e3df7fdd1762185b72b61a51232696fa8ffdcb822674ace7c77e0405be5fab10cf15753b23bcb0e455941546eb3bea30858424aeaca5d5a958649a048a70bfdeac59d004c8ce2cf42e11ddadd2f70f5bbaf4ee42fb3086d25816c70c566654cd99c719dc0957f8e2ec9aff14d7dd88a66ee8ed506ed1548d0ccee6f648ce37bc273ec4b59a0977b7c7e4d0d1f4fc9a9eb35cfd5be3d06f34260236cfc0bd75f0819fbf9929c9c6395c61fc7b85d2e4800b5b7344baf7aecf49e136122a7d1178b568a9e82b77506234a7ce2d8aae2ff73ffe4849e346d3ec2766ecd097ea5b2da7c4ed4ed021a70c9cf63d588dc80436c2710b68f1fbf19773518023ea171dac4ae9efc6101cfa730e9c8ee9b4fcd9a3ac623ca36604817101552c9a1ee0b48380f31c3c65d84db7fefd85dd37d9a301a5c15bf885de174ea242812b3f32b99282188c3f848d20c65287372acc99512dbcf5ae1040a423be760141e96627af6f52db00f87247b7899737cc198b97f95ac2191b11c7409fffa5845a7b5089d7cca34d517379e4d2f0a3fb4dead07081deb3743a1a2a0644621d7673708a934976d8674027e2358a8b9ec8961097fe43c4578cb4e22d8f0b43a14555844face3598ce581c0eb7aa8fb013624aed368091b7a66ce454abef4b470d56f2e3672e78216e78398709dbbd1d5411ff88d0730d5fb21a1792405abd4dad375a5c1946c4662f573ad2292290b834f208c4f847310acc5f71d23e712b115f5cc0bc6be683c9a25d1c2a1efa3608d5608c4affc881382433be8903b789945bfec770375de3f284ee36a2d3ef81b47d1f66761eae21226f474f05c7059273df22a3d3e50e5194c27f6e929999f0c6ab9575bea2f7333260a795cf4c1d36c23710a914cc65d238660c443627f0f7ae7633044b22b944a77e1284f7221ae43e737382a3c36d57bce8577419b0d72f809be8d9bb338262a9f7d8a060ab6c04a90aa81236f65ef57554e0e58bc83c631e0406729a227fcbeeef8a6d8936e071cf4f3d15913f9b1aced5cd139ead406bec05180799a57085884098759a024db48119432e51dfb6f1ef8a5652e99d462be18fcd6b9a0eaaa85e8938f8cea2dd394042a10a0c2a4b2abef951c103ec85f1200d5daec8fa64e2c2965a90cbb6ddc6d12c835e3c1cd7a38ad63dcd62ca09a84d781f7661353b4f9dc82a3d3978b1c9e00d68cee18d089d2d6e0f486d14b23c211f92f39171f9437e93a82a5b8e088460aa0762a1520110914aa4081d2e2818db963f73b24911e719ea8a6a26c438f27f10abe59743a6918f5ebd34606a2423c517e1b418d13fb2a29f37a5e34670e53b3f43f766369a36932ad5af765b7f4a961be650013992ff08e26d64ecbf2d131c7e7c87e2b0c4afd9e88291a31a22c6811a874f7f49df84ba3fcaf2de22963f46a89b4951790ef056a732d7e70b872222eef928a0a76b7b90fd0f402212721fe80d71ac73a98d7cbc8ee84c2657dc3a1531dfc6803c2f4b3a837244c69fdeb446a36937e45908147c13783974e4eac5daf3c70266330157974da0248df2cbdcea55241e4ccae12f282587218b2937e6bedee9e69467073e9f4aefa31baa86b96bbc6da8d4e1ff7fa4c1a3cf9cae83de394c6cc7be4233a0043bbad1f5ad8f8aefa38f439fa955d90d0b425e2f1fc92533b9a2b7641d1d873f85bd00e4cb67e12c34581cf664330b48924e11816464d0c0e0f34835e92e4d925ab899203ee98f893a620a63920917f5ba3efce0b1ab6fda9dfde752e243e5eae040e0bc4e2e8dd730808e29dc8843cfa80bc623e476e62968bb6dcadc74eadc285aea626f7c731bc8b6275ca974f3458a545ddb913ff62f1602405f46a4583484caf401207aad9fe911eb03118cf979e9dc6f1df60435bbc9ff0e19927b8665e95d2d043cdac9de5f9be70a89dd21a0daa962ee33310182b4191dda2c817db1b263e6423a6042291fab4c0a2adc610314ce16c832d8c4d78177c1cda7e75f9705674f62975f003e1d551055c4fead549719e85aad52c569df389201ac66bb3f2d2f22ada182368ab45b563d5c3817bfd97383ed2482aa057e6d1383dc335c0ef1bc5ccefc606ddf3de75bc125b2de836beb80af629869d466a906f1c88bd8c781e5b106a82f36c81f214aa11fdae271609f30de9f58cd5fd799033541ca947539e1e56a99bf970430e54fc623ab6ad342645289d02a5a355dbd1a6a57132fd5577e1439e2415e5f3bad119acdc2f57f7cf01251d04a3dd16dee6780376e8ee88698e6a598512592e8891e7d7ac0ea902d1f3eb7db179f873b3fc81e616c28127a354c1ca30d8028b65ba72666bf6ecab7507c9df8f1b0874494885cb22c300321ca16b354de6176f14967cdddd7c1d49328d0a394ff749c04fac525421439aa1a1197b708112be62716b3c79a5025880436688ac971ae0bb0b2cb8be1866d5cc87eb439509093ec224e0c8512c2ff69290fb0c06f8a2dc603107fc9551d9877f291d1fc95f77d99cf878bcbfe11bd79cdcc8f03130bb5d11b5b10391df320a379f50eb1093b3d39145d31afbfe5c6d2af03cf8eb7d4a38d73d3b7e7c2c0912d60914526685d33dd0ef16386edb26e337e43e516c84fef404667acf1e9eff48f76022db510e8b01ad439142c6855a8d4c3f8ad3a388448dfc770f68d8fa1018aa73c2267bb84062daa893540c8cb423352331314bb50c3dbfab076452004910b0e882b4d9c0bf289defa782d0a5a00c53840eccf131e3dae09a8c87ed0d033ccbbb4113bc02dd666dd772928457ae280865e4a792f3b1f3d486ba052921c8928a23e4586522862c72841a95f0037020f150124321bbb7821e6bec62a3a0c60b7234b919237cf11993f17fb1c43b282a4d9e8e3fe43fe2255874e60e2d71807cee23f346888f4b7800ade6a8afa8e19a84b388fcc0384dbda837e6c7dc8938224f1e9ca155d8151779e33aa45066a3ca09a2ecc18f0aa5d96203808810140877a659c899dc3361bcf0e70afbd005d23ef12e4eabdb55eabd23f2dc432ac4bcb0503ae7a036680d46c7801bc487f48e6fdf8920feec09f50833f6e431119774159770b9e52981fc1c1e7c8db19b5425a4eecbb1b7234bd7c607cdb7bf5d2f4dcab77d2afa377a26e818564a5700fc019b58f0c612ab2e506ec504594ba363b061f3d12a40780c5a8344ac08d035e8d66ca991b8576d1d7dd9ac6d44c4d5944c44ccf3d1f218d562a714997b53b31532b6d683346ccb6d74059dd386aad70d8effe29fbf117704cac03cad79617a66b62ec2b4bb2896f765058c56900f59d80c5b73727762797a643503c4d85d1f1655b8887976916ea9594d9a23f07899d812884e4dd559ba1a35a636f6d4ba0c2f40d30e557fdc74e828e7a7bae36e6a1ba495f7b1168431b45724d674225d12792ce79d6d6aa76ce0b8c87b300ac83b020e652dccfe63d4d0b2214a304be5e861e2bf147b2b936e5d54c1ba9edb0a950d7e096400f01f04a4cece9b2221153371b6d4fce1f658a752ccdd20133703b3eb8e5f7f444e0cbe432d8387bcc848b909751725b1fe29abe6b981b1a6790031a4007aec4110d238660c7ad5a16464d2f58eaf4f14df1a74867a26b2e20fe0604bf115d1158189f855d0fee258841815404d5bc2ea25b4c388533eadb5581b9575c53153f7238f5449983c4bb2a55701e66d7429b3bba2220b8bf9eac016983b3918e6aa8fa970d16505271d022071335ba6c944ab9c8f93b3ca2c258d7b21534c7154c132ff56c8a7a47115957f5058b268160967dc8a822b2c98438b48fa07ab282910d106188f3ee3ebf8fa0e5a45149d1ebf63738a399228b2c8895dea40f68ff84b1187db16b0c39b9ff9df8e19bb31b31811a464e69896dbda400cf3bc4a5b53bf6328889dd45ae474346328eb5a6865ec31113f849ffa4818d2680d76bf8f20b1ba6ab0bdb0a32937b60f30ef5360dca841d589b891817bbe7d096cb2a22effb86ad55040f2a70481417241538759a49d6aecd004f8f10097520ab8cbfde2264009b00f8cef14d3f813cd04c87495a082667ea79e3157c178a7a434e17ab662dd3ce0a4681da21d64fda0adf1be8c2933e416c10a6e795b41c9c287a46dc1ba306b447baa28d65d97918c61bf6c5af809f951f8a9425e2471870f330f13edc3058adaf4691e5d30e9cec28e43391a4c926416efde04780bcd569fe677296013b8aa24e464697640f5082a1af0d175814b78c16fe939f64609757e25289f38b272a78bfcca78c25f105c3a74f46eed6aea26b25f1784bd589d830f4f6add49ab94e22cb0c2664da6d488861a76aa6241cc91f23118b782b3f1b36b4ac87ad08450853f52c5cc9d370aaf147d3070cbad0325b9fdf91bcdc890d9ecf33b73ee7b4ae10390ba5f2cb762d89821154be5c21ac47d765076b488eb496aad9e7994ffd6b0df0926db633ce6f0e0db9ca3de92850572bb9077fe0805e0907b0f6abee7df568fee93b1cb7ad6326f2648e1ac629d311a178cb5898696e64072df492f7cad57590b967ee85684a26f660f2321d4bba22190409edac5a651054a45ac5409806dc4f34f2f363cc3d80c30a3ac18b1e00cabf8b12d35dfc23802f2287ba18ab3fc5b57d142a47d413719e1e3e36ad16691d676dc18415e75501d506570de9218d7a25e4f340631505c7f8d35906872cbd420c2bf7c8f9f7286f884aa32747454a3315029923d70360d6047c9133da7bcc430437f3dbedf0698fe5ece287205cdaa3dd5de5bd2387c40a1be6b0b29a044ec05cb87653b6b2016718612370effdb9dbda6e8f8a5df06c510a642279a2688d962ab87ec71cf88faab8d0f2702159a54ac3cd8826e6557588e1b0cba3713ab079f5b69207aadb50672aa51df92a420cee318f656fe18a0d4c85211e51194d32a8cbcee674f24ad367d1e34d595438a9b01708c0dbbbca5866f208436d42674fc1bb8de10a068d200a4fb301c1182106a070a9a72dc631350b9624d85bb0862a5f516a71d6429e2dd83b14ad90c3af7e263cd27500e857c0f404328d9c39b3784dd2dca2f095cea7d4b40aa24a8a6e84794dd5f70117fb5a67309e829fb1f4df17514cad45ccae85340bb1354f82b6212a1dee7a63cbe37503952623c8c82f493a8dda652cd351bfcdf450ccd9fcba2033f6bb513772e0bcf9b1f3898d03c73a2aa96ff1a0b95f03889326c3f05683f16c49465c4e8127c803cb5826b34d0683b30fd244a0bef7b2903784eab9603f36ac520a18206e68521e9ffa2e22ed22a8667b60ad66a7f3edb0e84be2f1d6b5491330163fc89abc33b3482ffc400cfebcf8cb6d5358267ef7b2b014c900855ad1e755897ccdde6723cacb712a3e6c03dd1e32a4559492395c704b75fb95d89bfd7f50fb99c5128a46a5cc48232cda1722d94acf24436ea606c8cc91acf83f94187869fceb6502bcc797680a2a347c7ebe0771248baf0a7feec65693749952f4fc897381a3d04d6cde1c1d90a2518100509067a52920cc41777606e528be33bac19088b0078b553e82be995b6842e9671aadde0dcae260d28cf13cab03dc6f66ae0b1553c3afc6d8e775ca646eca0f4c0d028bf59d2a6a6de94bacd70e762e2b47ef25135fb9c27f1333f51fa332cae695ec84090e907dc0e178f5534fbb7af4033dcbc7a9d0763f4e23d2e736fe64939541f9e1ed722fb43c8d3815b73f42895d55f9a17b56f932423cddc5d8850cb415391877dfba01e37e441eca482d792c80b06eb379f02edcc8d6428e43e0340622f624136c4881bd98c1fed5c8e91ef9a81d9f5e2240dc37d6b479a37d963abad8d81b236dce19e86c903571213276d15de52a94810b31cb393d72aab0bb3004d071dceb0215d53735c1bd2ca024c5dc74047766dbe7859689a02b9eb9a31c5cdb6c43bb4e1f531b11d7f667df52fee1ef78318fbb3f1c43c9a78ce89d4ce52e2048b500f8a070fcd83e67d6f37ffa6d4f9cde665e0e04b8ae7ccd77e3f6e2da17f90809ce9519a3f9cbd6384408d63b443e5449fa95ddf3ab74e08a483c5fe9d1e312e80939107ebb76bb0e2516432e9af76c6519cdd4dd4804ae480b12bd91c16933e40aed72890d20b66cee186c610c321c70375ee45235b2434cd768c78e9fb27fa3adde0a768d7d5e4da4b2079a5d59162d8e47ad141aec58b57b14b12440f4ef75881ac4868a3cac7974ecbd5b3d9f2cfa2bffbcc896fbb48b3b581b99f71fbadaa61a70d6be5b5eb19a6c0f7449f9c33d9bc6a5103ad20b5eb493de85be2fc60a910732abcb714dca4f08e1293585e5492c1ecb45b77425ce2d59a3edda2a302f23bd2c6b6cacd53e22f5a522220fb60d4ffc64ae148d447559d32844766409aaa6326d49293bd4e9fbb14b6bab1287a24541e634b24c8999b3abdcda40ab4b571da52f8531a97107c1f8f9fb8d835620b791e90b33eb320d157716c674be6bab2dd3de6cba1875df74f392b0903440bd8de96f57568a8f538063348483d0c2afd5345e3745c32200825292b2bd036c25b18055aef7d42b958f80b42f2ddc7d21b45641555457bb0484b2697ab349becf6fc5189a84488ba22fb9b234acc8b8063e2d3a3f41812a29289f0965c0796b4551dc0ce0fda3096c922c6243a0084554995d7eb5d0a5d30732e075c132963b08ffce2334bd53810447c6cb186e1c43ddd03afce355a1f77a36570ab1188e36aece863a58edf7141e9017a0ad7e47144c4cb67bbb207932b6e8a21cf7e7cf9e298c366916e08296f2ae01259336c442a9aacf823fa2afa941a6c765b4294da47c70c3223547823dcdd583b6e44585f527f94f1991b527acd37f76709ed3db80d60e36468cfbc4d0ed7f1f2e678504260ab901103c3003d4f8f157cb6adad122f017f5ac88dc1e67903ae1a3e5bcf8d6ff0c9689af75e7f950e40aa88ae2f13028d6ca969ef48fd0309766f85251315d741bda02eae6d1886f17732e096bc5342ff2396f1a845372a2863958cb5f72e85611b37cd4ff914e08dd2876fe03ec1530e9b88d8ee55a84843ed1f33d47242dc655e032a06fa962f858be3b00cd4f8bf362d760ae02adb0267fb4fcb3c70d1799501e1b4f0ae0998f911915ffe89f8257fb31ffe9e7b75b9501808c23f633ec3a8ea32cde41a251fc53e915e88c5120ee1aa1cd0ef5e2d5edab2559530bc2c3ff8a0bfc62efe3fb9152b758d6df1fac9f73113fe3dfd4f3614a46c89d63b9cac0f2a8a7be7dd688a6da67d5e41d7a8a183b729bdaf315bca800f7ffa2b82fa59da9c0dd47213e84c5b3e5932fcc8e60fc68d47864051fa7c5a3a5ee2512891a142b522444d7c378d61f0c25a5f3762281df7ecb7fbc24a9dcc8234e61d8457f557302eef422d2a2bfb0a79155c748a477fbb414bd12cd13fec7e3484bb1befefb9ee311cba726daf8f79ed1d57b0ce90bc1ae780464b987b8d05b252b40749f56d5e9a5ca1cf379a729b6c5b9dfd23f74ffa957672ddcb8ed5474b0b93514d91a15c55f40330a9da9c0d9f773ef1e47833267882c2c6ac956f9950e1ebadaa114f43c6c22b9d9958dfd70b998ac5cc427991549aef06ec9c57de4626ff898fdbe759f03a74cdd3eee00736a5d7098eb762e24d368b5086576c55664ccb6c5bb8815bf07c0906b590945e4eab2368daf76217a8dd34019ea38740c1dcaa96a022d13a3703c4af89f784d439751ffb08c398fd06c1bd01851a11d835102318182911ef40394135caf4451f7dcc621af30681fe816721a8bef9dca53c1449ddfa5a444081b701ff7c86025c9fcdaf87281ac3ce89d174d00dad19c6825d089fc861fc2a278c3c8370fb580b0c62f3d5dc268c9e2f5ca4ef9b8b42ae56f022bd79a775185aa34443ec1fd5306c411ccb2ae29ce5e54152e33503cf48b61f8e8c775917cf97f41c25621a1f12ab2dd79d882f18adbc3f734c637412b0f983065c84517fb62123ad7d068f312341c0c1a1976146953ac2ccf1e7986ed440d9a7651ebe32a3feb450bbbc1d31cfea794b3109a41a52bd52309bbc82f0c7565ccd0d1122a47893861e9e8ec8530902c5e12bd6ac3cb56fc2c1ffb32447ada61d1c765b979493d7240f8afe4eb7d31191221ed1542f471839cc7f4e04b2df5f8f4949e384c87dc5d73d493c8f6a4b0248f77b3146eff8378557ca36f1bf22acb7830be41bdec64767caffad5443c4b4bf829c6cca3064ae5e7be31bd2cc6c2f6434e88681f9f8d35400dc6a4d93a1ed9b07281282060a37c65866d75720c6bea90643d36c0d90e003aed086acbe3d5ff1f30ccb0bb6ab0c5d532a21162df363b801a7ec03944c7b297b3fcf842e8cd3107eed88a8fb6017e9a943cdab2987c2f9fea586e2332ab0c34044e02b4f802d0c9bfda09ee6fd01442350795e5cfedfe4a846a3a577e6bd04c88718ba9d6cb602868cbe63fcb16f2f8c18c8f757e780d0127a3f9926e382acb990454e3f74b22d8a53bf8ddc19fd1efc89d748293cc60229223c4919996c069d0281e390f0995de192f49b99c8db8767205a6d409dbe43efad4636dff91ffcf4a1d6d4019038ce8f0d13df1a30f93626e49b490f29e36bbf78174fda135d16204571edadae964e2ead73ff2c5d424a8d0e031fdf3760a2fdbe3ddede27fa37d8b511fcf680a519d2979f5320ec5ac0ceecbfd2ed07e034b7c031cf9939dc1f102b0a055f09609187a941568a0812833524abfb316d794fede5f4483061d5644a36b9d6798cd8b8665c32fd46e714f37f6480fd5f099ad74e873f20865007a8277a8e92528579720973a39e065612bc37f13ba79ebd2e311eec0f7430de64cfb1d5037bbe0e2c27d2cf9ba8b251d9d194350e07c06905449d5afea4895faf4567fdbd7d5d1e0a9bfd175e054b18a5d5a637937c48adeba6cc9aed73d4ab49d466558b250bfb9b9070f3d3999f778d21cba8ccf71dcfdc841635270e00c18456aac7baa578a5be82310082cdc14bc786e863187b385169699c806d70fbf39a28a1e7d845172634675c09f033f983952b192f99f23aa723c331d96fea485572c11ef8a36f1772c021d0cf48680b7c37050db67c78e70e8c4eb099a638acd632ec3216a8dd1136861e068ce1659eff65d1713e7ede39ac0070e0bbc57e9d1430c96cd0a4b4aaf1a4b11f1e3517a70b10c93e5f5bad2f58bf6d367366800d6c027727b6c8c965445265d1f50d86ff15fd75d671147014a682abafdeb3c6d9792fb1918e6ca4bddbc426d29293da1ee6ecd91f55d512ef14f134d02369e2e1f21ced3b8661e483d86ea6d437818e0504b791146276dbab29299656649c970c2e0d7f6fe51b08b424078253a755fb748b38181f39fce8d025225524e090a2589596f1f2e82b8c84ecfce199169395179927a2c0a20a86f421b9fafa5a466f6bd5dc97ee27612926e10bfc9805a0d88f4c4808400e00f2f4f1c38e1c0f2cf89a4189b0ae0718f37244fd6d1779fc057ba2c9097a68f0169535e00b881530f0c015fa4a37291c6ee63d6deb1f21ba3929a32a99092652b1736ae96ed1004ec4ecdd51d33575df66f3d849234fb7403270f2cdbd1943813172da1bc7c461ec4bb618ea56d2c06ac1ec8ab5982c455d60a6c030bcb15df12003fa31c5882cc8f1595c5b92eab7b28e6260c1f63b475aaab8207fc75f4c5ab65490178de3f5d64c726a08291b82ef06220e43d3966d46b10b39ef9a33ca3b21beb031d87e3842da9295c96077a50b2ab01a93d64fc891fe7fe262a55aacebef495b80fa6be72d631822ce880ba952c9ae71ba88af68c9a9d54e882d38f767eb9840d06d04923de3f745e258d004c9b3ad94049ff3b9f814ce8991edf8c998470d24368cd502feb1cd36af33e18607b92767b71e1c3c16d78a4fba5e04ae45f41a9d20343b4bf931e6bf5672b24e0a0cd8df074ea4b22e88831092a7c1cd7a5b250859e35af5f8612ef06d7468671bd2ac847a88cd294525c1e37f087c2002160371d22ad7e40e9d606290e49080b45fb1129e0c30bbd53947a5f370a79d406263dd374645afb751c80e5d6a42b399330ed57981f26161b0c72663267db80218578c7280fa2d8b60f8e8286aafe231d058ecd32311290c87d722dd6130025ebf08e94c97b424005004417b0f67a432ce73510fa2f04a6e98fd31ae70011f6a1b202f1cdc80c3897852cfa9af7b69defd40e30d586d3ec0f71814110d637a5c07770c3abf747b0808b4b1111f4ea73fac31d1e130b6aaa735981069b81cd0618698f69ec31e3ab45f8c30f0074105444da5a1629874e60e3deb6fe6a0e90deaede4d63ccddc91fb601200a78d7530eda55d5c19720e500522e23eb4b0ea9aa02e2a40b007a5f1dcc0ea92006c88f0c4b004021f01e3840cf269fe8d81704626d009ad54fab6f5474a03a751c7c7bc174e2cc6f031c6ac5e9eaf8e9b13b064102c0e19ddfd57788c4895a7167091726703b741185c0c4d5ac6d8714a92c75fb6c27b5cd2cd7f62748c2b79f93d3b5576efccc9459ba9eda7c77a96612f6f6732a8b82a45d7c10be78d5777bef9056effd54e4a6d837633b86400246a1177255f676be7999eb50d39bac3732647a075d1c79a1e2183d5fd06f860099875d90ce1f41831e9a97764fba2261dd870da93e7138e832d1d0cc7caf2653f2786f20f9c834bc9afcf18a27458c3eecf7bdede8919e2319cf877a34564aea7b86de9f8fd15bd16fdf5f2c99bf3cdbed1446497f01ff751c26d351728dd8bbdd0894b97a0d812a5fca435ce050105b384c4881f55c69e4ceabf64d8be4194ed7c746f36d79b9affb392da69e8486d8e867f9ecb37768164fb37aa037157a686bf8e8786b72dc0c15c6e40c94796e01aac0710a2ae0adc921d69d3388c0ab3b8a886052e8537d4d9c684d95ab9868c0ae7911aa001910eec5b6d03035881da4995ccfc19db88da858aa2ce4309dc70892288c3ea8302d3c46ae8f638ad9fdf884e25681bca9e6927cf62b29dd4796b9ef3296f49a673ee0d97147ddef1b78e60964b5e2eadd94824d7de021b9b5176677db920e26a35fceae5f133aec7e877e97051581755f33258d1f72135619c95b18da66ae2a9613d04d9c360a11e0c0e16f242e635c6b6ed25c60dfd9acf8dfd98ec3cc364110bc3e3f14b2a20537314730d080c9c5b618c9ca4c818483ab292c4e0a1d250a5a2b7ced472bc12885f5ad88a4b80d8d145f71d4d978a3667a28a4dec3d1e37663f6bd0e25181a02970c5496b4e8ecafc9b56cb175516e7dd0826d5964127c52444a7ef54cef1e8885375562d863fc9a4de32e3ac1c812608646fc52a57f08a116a9302ed2ca96930c6e410ee953286bb6e962f1b2b373da7ed55d5610a189cb71b73e9c09ca187b1d33373c2a07896d62349fc3c8080760945ecc848cf834119479ab303c3e18a3e403d6503da0cecf01cbc93c9c260290a47e9f488903570bd607f8214d148c5024b050ab6fa65133dd09adc145e7de599c4d8580881c724cdf0614c8b3e22346166432dcd3e70e45138367ac485d43cd9a7c3591badf4bc5b2c30dcac876b38c71f2f1b75575e7a19d64ef0e16476c288acad18af67561df017d6640343869669e31722114f80f18f7fa977fa3c3c9656c3ef68960defd8acae4c98b11de22c32dc84167c8f3325f0190c01f5ac00870dbc11f333e5837ac88c47d51d453590641de333f23dd5c5706acded25bbe6ff9c9012ad9910aef9d29715e36b8273049d8f9b17066399d3ef686141ca25087ffe9adb95de44e05aef46a38f454f3c9144f5f4d30377aa2d6844b12f1078dfcd856c94d9018aec54192700b1c72fa7eaae4bfc8a989e3ef5d66095509c598bd7a5da1eff09da7e715af079468373e2445d0467f399cd72f839c35ac17a55d93b143ceb9950169c2a1cccc8863db2c2074e8a87096caff87106add03b43331271655c63bd9f49e438188021476828d5c2be273b7af0a666241fca32313824193c64151274629dc73abf06104b28087162dec42112c4b80ee590fdd89a000cf372fab29e3fd0e74592f5ddfca9a895a71ca40e18fcf5e5a9825472e0385b832c164be104184d17ec81b440b7f63169377620fffb92178dddcdb2faaab2819fcff48eaedc849072283a23e46506bcaa965114f808b9b78ac5fa0381a328bf1a76caa7b28866d81be47af1df0d56e07e16ca93ec7c57489fe20951d8ea2ef7bc1ac5db42698ee82fbff6dfc0a5b73394a93b1774bce580943a6c8619ceb8db64bfa6030831c65f9682a406902b9c03854a81c192a97dc00b458d0f1f7fc632ce4e6aff9f90d0ac4cd73d005c454da8b88264f415db2fb5ec07139e7028ac53d0cad8f3c42c74e979c566cb9b9f50f055fb86a40f972b4359c2dfb8cfeb44c7b7c483f74ff6ea698c259cd4a53a12dbab20ba761085f99405ef3b53c32ba9f5e26721da17cac49f829af75a9532ca71e1cb4f5538f4c1dc29083358b19bcc1d7225e4173db9e21d95c976a53d85288c663a23bb75968cb39eb260183b868d1048589cca22fb1245fafcd4626c566fb1eef9b69088e91acd2e4616fa248048ebec55cb19877369d9e98ea6fd9eb6f5bfbde4c21010e17343b489ad2ac7595703c32a65a570e33fd766b8bc8a5e8e54c26156ffd12ab37ea6eec282cdc484f93ffc6406593e2d8c2b5ab2b4e780ac5577a50446dad80dbf79c9e4b159df246af5e709f7dd1af974596928aa6edd852082df2a5f728ad7613653e96e49a0cbd919962ffb593a1ee2cf2a5f4a3a057e5b389265274cd29f1ae5b1af5a4989b6a1db2f4fc31c98e2d4a4eeb7c69f4a3e67f11c627b4285def7cb21c05a135be34fa52c23f993fa03429bd7fb22c82cbd47cf8ee1015467f1b731f2cad16d2d948ab97223eecff9cf867e451a4a1a3bc4ab93a69ea291e97e23d86f56d2f5244fb1ed0a989d8e95bdda6fbc0f10e23b5ef7d1343b7a93e8d476d67713831a80a259dd06901756afa1fd7518c55f4cb67a49d173166ce92b97661e960553a5324964e2984c581c72cac23b8c4fe8210aa2ec745fe2bf0b6e056c83f9db71e5069650f6b34938779d9462220d9fb231a046974391ae338dfeb3fed1bb1e9de08b99c6367f29c49498c30ac1b6d15c377fc6681d6dae5a223931ddcbf1a8def63b22e4287dcee8f207d59b5e51470b0f41d6af4d40a92fefb0c60a305210b8c84a0363851ccd9169b72b517ab1cb593efda6bf621db489cffbefdc3baccd43998518e1f39be0a4e736571ed9829a69d33cf85ed6203bbe83ec89acd9ac7b2e2a0e79ee447b23f8af00a5c5c2076b16652685597eccbe3ceeadfb43218b371c2f93736c689ea06d1820cdf5004e4602a6a48b297055331a00d8ff1d72d3a801c4d3fa3917a7d3d04ae5ba8b8825a3a05301551520089f257458a9837270e2c6147bdd4fa420dffad96285b6ce74e37ba90d0c935dd124f235df38512809005058b29bd7dd3d8544063ae124f897497c9a38f630532e36cb7139c23fb1d77623a76a262834917422acf6d4729494b3a9633565ed4b70fee782992c91868218f1cf1c3d8e95b5a282ff2a8c0dcb9de46e3066a285dd74087c5418a517c9962e66c715dca0d264e542e3986992248c0a14688c218ba8efee7671f1f5b1b926efc42ae77dca4d8ccb07e1c2dcdac13d88ff748e8632a3ce89c36cc64fa23666b6b195fcfb8ea84c7e634391cd7f3c34c14b6494cd14866585a57bc33567539a6f395c9e9024324ae22403cf1fefa9a73e16f061db9c2074cf7c9d3416c1323f4e817c6b7d07c39019cc1c2225fffe36cdf2b3c6cb132eea06e52d390a98bd183df4d42545cefcea754d9e61143e1a9de4c607fd23f0b7de123b25abd4465487fa57868fabe293807f167dc0295d3320acfaa52100f703c3db08cd1054e4265428a44ef9c9c4d503ceaaa718aecef5dad26d88b52abb310eaf2426b44d44661e1cbbcfd3fd735e50d3cbd4d0ede5bd1976f9f8cd42581b9bf61bbf6d503b5576ccce9196bdb089a2ea35ab8ee4c2abaac19bf8a00ee676d7da723d4c92fd2a042927120a7f25f8e9a74ed824c79d8e88aec154c5bb5584fbf27bb48c4485f250788550f24bf1d63852dcb84c90ad494fb92b358e1d211a744e9916783c61c5f029f9e30b82a2dc2661cf03384c7dbf8c0d4b92889a36248596ec8d648d25d51a6db5779094063fd4611617b9ad543e3f58ae3fbd9c3ca2bdc02d540195e64c2e281dd0463062cacd4170047d4b20d747b00a894b4d12bfa0b9fb020002ba8690b053f5e8ede9f76ed3432d5623d2cbdfae8434b92b4650cd17a2830e390b7df25a0c93c163b92e5a8c0e180892a6e99d538481b6a16f5e78e2d5e1fedc5a0b24b430c8d1a94374e333d994c55017da02bbf13a08d576873c25ce1b3d6120aea1b8aea9fc64bc3bd9eb1cf6d4faad028f80d1906d92c3ee0be02c446639d8809777cbac734d227e0df31266306143258bc09a435ddfe081542cec753f46bfd97c22f52a04aacbd28390555e1dd43aa1bdbbc1cdccd0116b3f3c50971fcbdba3dd0b0e5f88b1c476e8788ca1caf8862b2e5ec1f4b0d61af7c8367effb338dabd3d2f6628297e4bc38ea848d3564fd9473f7a615a2cf845445ed71b18654cb268cdcd5e107ec2ce6951f5108b03d76ac8f0b4a2c73aee5777b73e5f432dfb14cc4df5d403045312df0c46ab07922f3fb6efcbdfc1612f28d206a76ef294bd620207758ea5343842a12ddd9eac2257e1057b971c1786babcd92844742dda83f19a9953dd3a620fef6868442081cda7c229d22411f71faeede3321771f6289080065fd170ec574a06ce8f9f412648f6070342306f41f8803880407c6bad19ff93e905114d0b86af962c92b6fb92834a7ef70a15bc00f4654e29dfa5ae68e392b9352b901ef15fbf1c001d3b1cb20a3a57cd824817d1d3e0b8817806761d6ea52d4e93d08109abac0837beb147d7454ab4e484252621a3dd52b6fce21200bdd4913464d560941cf5b62988f975caa4e67c737aec0ab1f713cc0b9e4f08c012a464ebf45a111f303c472d92f130e281a4358442d1b55c5181042bb57e7da7b65d459dd81f7878d7ee99f073dcd714648ef151c617ca8453b185bf830e81fab4967b727bf1ed6967d56491e837359cc86565cafa7febcb9d8f7a8d5d98e9eeb5d738f13baa295c44aa69d6d81a75cb6b9d050addd9bebad7d4a1129869bbace7670b56bbb9d7f146e4726d36b22616e0870c526d23801e4b5f93dc6a135b49519d50591e0167342605e6e0f96e2b27c332ce42ac11622d229fde1c0e191327df78c9356efbd0d1345bee922d1014ac4e2dbbf178a267dba661e6a34f41197c9e34a258c35722e1aaf4134e0064b1bfc5993b8bd0c83a4318eda034136487a1a1fb945e64380142217982811f0ca57cd27c6b55b0156fb72b4b00db1bbe8fb0ed84d137e8843eb6172a0876b3fa3c19132457a08bf2e83a60fb76870263b64de0e7febf7b24307755e96dc973061473972b771cb8bd59c0b96c7bb413bb1487b3954d154b7343c0684b2f0a817c5c6b7ab5e2e2aeecbdc1e3f4f15d228b85e8c9846515fbf5c49d9d1011234cec8f74f6618227424146fd2ae1ef50c56134c6372944d0576207b5cf3979070a3679797f18cee5661cdb626ebbf6f0a36640213f6d68d4dd155c83cc5928bed25b0ed4be74bebd1389f423ab54e4567f79308cf9a1b5abfc7c142e65f545a98d0d6674aafaae6f074b8a251701ccbd40ae45f2e5441727f51854433290fea0c495406fa1bcd8a7ce1172873fc1030cfb044b36f9066ece84a7509d220aead574470e41b215e8996cc918c0c0c51cd65d308841af1dc8799cd53dfef143052fecef5a907a566c0d9288665e14951f9309c05d6ee3514583f1f6605472d6f2bd84257f0129aee76b143d58361b11b38f24e8e45dd7873b6d2437ef28fc42f31243fae23b7fbe4324e46a13a96f7d808fc622fd5c3f0e010625e9e4bfccda9075b9636fe2ac31d0236b563ca4b6787ebc7df02c0145c4ad5e23f4f8a34a984e56f0a65e6afcaae81f73382af13d8814b7e8795e7ec79638e8d94bf9a12ee96b94f63d62954db0119a50b54bf0a5438c48158d09d48d0bae0521f38f97faa2df831636dfd31e498581bea8198d21050cc966706d8db431002f909ac31cbdeeab63ed69578c57235238c09345e6c8ffaac12438b92286fc0552f18d165bf3475db5a0f52097996eee3663eed01d7bdf40fe33ef20276bd8566a28618b99984ad5dfb0afd4501638d5a6eeecb79da00ccaca38853f39e3800940a6cec688a1557483384290b8da5917d4128285167d3d143526d76f9eb977bc4022d26d5722ff8c143a36f798b15545e4abc38877f13147f499c93fdab9cb474c5cdfa5c87d88e2a488e923f407664a9098d113ae34caae41b2d0c92c5a7d7bfb1d34d940d7061566ad329e4ca5579ef3a63981ae029941c1d60f9bacfa2b3d7809d2f04016a0f15f0fb3e3bf36d3caac8feaf837a7e0f6694869fad5b551e206385e90fefb2d06fbd4847f74808ecf549623a5476bbf24198ce1f4766a39ea9e79a85331d710e5f4b6045c89f031dd4f0c811988ca414f19a382cded75257176f07ad1a87444a4bd63a81e579334c8257c086885cd5226815be84f7f10d4832732ee335b287a5e50434d4be3730eba42d31124c792feca7d340cdb92af06d91bf94306706e96b368c845020db833ed7be4ee47f31fde058d4f655b998bdc94525d86a5f719b9f595da321ccf2eec369de7e91695f2e40cfbe3842d97c8eae05738291206ff7219766a62437e57b43b8d600ea91e68e9c0b927091f4ccaba95b1e7648e7ac9bb9c8d4b1666714aeb793c741d4482475a0e6c1c9432e22ea12328ca68a2325bd7eac4d7871d67ad822bc6c16179e30fec3428ebd8e7470dc5cb1cfb64036f331fd2415f3679589b547604fabc073a9510a857409c7aa77839d5cb079c25983f281c4b74e628dc56745bc5b54f22dc6ef1dc16a95756f1e8263e2e26e79d96fd452cae87b0b42c6d1702abb1e363b1092b7f0198d993d540f0935f40bae978bdebb0ac9ea363933977142fe8820fd21c6cb75043b46e1dcda2ce1ab1a67498e3667d009a39054cc78cbed07205967bcc5ade035137cff60d728c8e834e2f411160a13c56b45127c347685686db3f4af4803b2a8fd9678f44d174f128c06a46ebb1e109d3780916ef0e9b9418424374beacfc9388f47e5688be37ff948cceb3975ffe65c8d6337a51a4ba38457902623dbffd85298c4eb5295090696f6584c3ac9907289ba7916ffb2965de183e0fd872602316b41426e1c6143bb39055c3bca744114fcbb93e8224d2932cf56e913f15b7ede599241b5fbda96e18dcabb1c31517b16dce1475a57832c840b9bee4d66c180dd9bced3484cf57ba55885628e41c41f8196981ea88ca36a87b6072f29477f27e108a78dd0d682a9ce1752b504eb490614e954518a6c53fe906e72127c4caed407ab79a8e3f94b86009da85edb0e291a68cbb5d9aa1ccc6027da26d9f65a71909924f1b6a4b65b25d80cec44dbe47d455cdafb0c4ab719395e65d8445ce4671f71a9e2c9e4784179697c52136d936d6380982997b4042ca91651c041ab218e70a1560158aafdf53c1f9afe3d18d3a50f03f534cbb258f0a6f8e6823b8f7c242f3943fc6d8d8ccdb02267e02df9a038ed839d4a50a75808029f0473a2101ca22f2396f4a8f4d790f7b07e98a1d4a4f8c8ff60929c7dc1c229c8b1c99ffe6cb870aace5ba525899c1e7661ae826dd5d088e83d0a841e45a441240170f538e00b692acf27a038508170a585edd9b29455414d14b388c42ececa6063c3f63538d2d43557b9dddce2d51285c5f136c01eb77d63458c883352a98b68eb1c8e0f012043c9aabd008c83117b9fe423b599e12f6bad1bc60846238e7e5e367e2ba69b439684c43895c7bf3272164fa717db1bb4ad024b194e9016e3eab169bb4b61973dc426dc7f8bf37a9423918dc0eb158a7653a638edef525566b4be9346a27064f6335498d78456898815cbd582756dd50202047b050d32590a84c9e452a7ce088e3c0608169a89df410e7283645ecb36861a24372e57a777c41d40f7a2c48d6ec032496ef0f7ad91f5ba4652b28686e2fa86f4e3756aeab7245429e5751e88df588ad7fd787b23e27af067001e7daba1ff73e805967f171c46e1b454b2e7e3f8659a51e91aecdb1629cb9d41aba9a5f1ebbf3cfb1bcec2fae8eb8f35c93157c3a172a2f9e214eda0db76338bfbd5691270d47c0db92c0b0698518a944f83e70fef36dc34c24a9588692c606940078fe2fad837cbf016d50653a8ffcb2a4c1143e36687a4892333f9787a9a2120f59f365bb8ecaf1d80720cc78ede3c3b0d83a70fbf48b0bbcf0ef1f73f87b7137566912dd6345cc22560a2c42974eddbcbf449a8d2babf68ff75d30e9f638c781c4155dc27867ca5b3d23427e0b9d1ffd1fff47fd1fcddfed2d536907780eede3e01668818e560bcff4d134231540f06d08e02482d82ff7cda5fe0e9224dfc36b7694233979f6ac43da872bdfe4ffbaff773ebb7ccde6397e9b5d4366096ea43787e588d98fafa369380547f3883a06c1e9db926fafd6e77dabce534fbcda0d534f65762820898045220a3fa90cbac074f34d0f9fe6c40f7e09f935569b780bddaaef7844035d06e7a9b612ff7375398c3ae16557d135558ab2710d4476ed65526b3c71a8abd2ebf75685dc8537cd412f4f291645f2369b0f7f8d3c0d6f34f03bdcf7ece1a53bc03ed6dbe7b6a70ffdc9f13a5946e803cb3ef9e36a8ea1f5ec02f76e865489307b43c14499d1e251353503673694da380c6848106b6a0e15eb11b3fc649b35a039d9fffce83a07e03d6db7cf6c4e0f6bbbf6aa2945413a932b2f90fe25657307ca18880e206ec98430142070834468a6ee83808bb533270457a61ecf0e8d0eb5d494e5f1603275089362f7071da20248fb47adc2f64a4486a21fa21ff6bec9b3ee100fe0737f722ed10f4d5a620e21b374749325210d8c020c0a17703f330c67ea155dccd75eb1ac0f3d551933a8335480dcf1cb6ce9b906f9fbb1788352404f2f75cbc11a7971a0c1662a1872689c51ff521a1be89cdace8c643a06972af0bce89dd5c1547bc22dbda636f68cd77f5ae05bcdb8fd62c0d0244652481398d24e737da8d2e81c2b91cfda5a30d5ba77482c6e4418982d2c0b4a5e0263ed88af057d83c53267c973bdc719b6871b2ac00e9d73d717a747789383297d38dcf3c4e3e34812f6382ae5fbf1648e7424586b7cd418d5fe11c98492268763b185caf8d5c1332053075f73d794c1023654194a70f9ccc0f0ac4d6296275239c897ae7a3091b5788023ef502fd3de0776ffe59172128e10940417e185cc93dea51f0f2ef471d2f3d04921d871a8d28a3615209dfb190e903da711a3a22c6bad5c34dd6475de227dcecac18d086d72168fd2dd68c385ecdbca9b5158e813c59316042075a9a45a526d6bfeb49f3b434009e35a5e34f08ebf08d8ddc97e59b8ff50fa54522843396483d62ebc8199ed5d66323001a1d463ec790db39d8d78cf1714f0a879d1e643b2309cc4ef44dd046a9ade1d6a3f48d46f4b6fe33509b082331425ab83f8ef6b2d111f40a32f19831726c30b204c08f8fab6058848ed357aa796795525dd4ee18e7f39ec1845f37302052ad9faf25647486dc66b59bc29f6063314314fa4febee3cccbfa3b8ab189f1ef8c40788d0e143dcf419ebd4ae45d0d819f5304598ab57dfa92a3f3675ab707b92ef3b8c900a26f9225616e63e64de44a9addcc2cfb292397149bf209d8e34fb7587c3e3cbecff458d28e5377d3f780b243f1e1cf76a84fd3b0a87e46aa1b7abe515ae4f95d8634d4ed8ff506933483260f1a8ebbf895ee6bf6ea4321d363f140cfb19a997bc7a6f4674dadfd71463933faacfbc86023a0cfa981df01d2c34572015b851d7ac404ba4b6063652fe52d76c033cef526c1d0039d7c4796ac242a8ca9ffb6deb2bacc18011b5da43da283024c58558bae903b16a25e29678425c40ef975ee5c094bd0169ed818d41c29d4c059a1c8cc0953547c6e1271f473e8beec92487092e61f8a763c46561eb6417cf6d2527c18ab4970485179052c3eca6cefa53f8a4d1fc9d4d93c8b20675f393d5d159a936dfaa08c3405d19d20dbf61cc83ea02d0985ad09c08c08a5447782b67b3fca1d11e77c841e50260a83808601d6994c682c2a92d02cdeb8ae3a5d830805b7a90250c15da3c3956ffafade5c8bef41fbf29ed0c1e4dce8c2a164015131491ee4d0d905bcf86d5465d0893125213d0951f9bff3afcc2c7afc06d6bfdd88f33010f6679dfba11723e658a0e43116f18a6b74fef699dc1121c4299389e5555b4ab54aff3f193e1e6dcd8695e60b39a175b3483416944fac7955c54edd3c5fdfd08d429f4c44a670343759d5b214b999012f666e92c186e36bef23d40eaf388cc4ac9a7707f184b3c9c470b28e49de6ccb4eb6cdf2fa370f7e0736972db21bb5e9a886e2ee9adf470e96dc8586fc165041e3c5ea9cbc51173764df6b6e595ef01faefeb398d0f53fd34735d7902e22b49ad69cddae82c3a6f08cf160f113bf9ee438dedee66b487a7d1c4d28fbc7186afefde65b48f4eb189d2a619b29cfde15d4a7eb363598af1bdc9b285c488504b0859b4b0b1560705cffdcdd47039ce6206343c036ae71161593018daa603eeeaa6905eafacb4e1ea4285fbf50d591319130dbafd8328f5dee2bdc7d8c8826626f50b7f00085c7cb59041c9e3810218b2e8a3e0add99aed94cb6c9b677122ccc216b6cd8f7a75bc6c7befbdb7dc524a99520ae405f705ec05360cad74a895678c73c638e7e744139d3c335c6a52a8809b0020e8700f2e0a4973add8893ac52daad75d91e4af8f1f2922cd80ea4b0ecf04967ef6be69da16b51835ed9fbe0142dfcec48a59333a279df3892942d1d4539ac7e572170f0f3701ed6b2439370f4f9ded72620614369cb9ae2392fcab11279cb0a0e6e171b9785c3c3cdda473524ae7a4b4737ca8c2f59ef978f18a4e582c168bc562b5a29491c562b122059be5fdee5960fde092085659b84458e11149fedd66798c51ccf2588c09ca8a3931279a3cc624ff584e4ee6b19813f3eeee9e19a55937eda6590c8b155f4c983eb564c6938de8c649fed1c425ff1858c69fcbb239936c6010f53668838ffc61ce09a9962373d51a84e111c7300d6d0b637b356be59c2de7d43a2e795c82e170bd92b5baaeb34d58b731fce78ed62cabb5b3eeac369762665e375598f9676688b8c6b68c7747198827f1459121a482cc80c50b5690ea1e4843f1442a08080ba9eef9bf139d3c064dd344271fd9b8ed9a1858c6646d18b1209c1e00833417a6a11f3f1a400349499976fceac6691ab7699a16c3251b3ec2a94d38f79e8937a33fc42b3391949512e136c925ff1ed1c48152ca6ec9c2a30d383e724ae964138f2819d53f648c078e9aad1e0ec9281eb8e4a6506e5b66ea140f5c7ac10496fe1672ac7eaa58f77a885e1862b3b09907b8e439f828be26ea6fc9c2ceac0616965b4676358488b815f4a1470f4fb021c376e0c409f670024bbfbb7b524a2be78258ac47ebbf4734bdfbc73ee63cc462b106d8c3640c36de4696651e0ddffda7cfa836f1f0b787d6235ed932f4e5e3d89871034bbf878cd9b011eb77ed500cd6b018ac633109b05c4a298db11e2c0e8aac46915f8f99f373fd67b2ff91374a6299b9728d52cad1882ee1429ca1647d664f6bce6fed186d5ac6ffff6de62d2de0764f11a52fea24aa3829a58cf2ebf7733b4cd844594cf297565c3fa2023649da02a91383ebcf558ebfee1a3fa8dfa21034cffd409c80a7bee744de4714632ef6f379fb9ec86507cb7bcfe2d94f118e7651baa44bbaa44bbab60d062cd8f83547fd06bb326c6c225d8ca222d1f75f2772d9d17def89624ce4c5d8e73f91cb0efbdf5b305a8924ed3fa064e544926be00d9efafe03a507ca558e0d29651911635786cb629476841bca70fdc3e6d122e7e5e0dbafbdb3a2683e27bf79ae6462c32f4214ddb535f77aab75f3346dab75abaf8924132eb98b4b5e85cdfc65952ee9a22fcd69b87270dd894b5958d9cd71be69dab669daa66d5a9db1713a51a95bb09fb8d38d142164402115c47f808354f7400ea044ca089aeac025dc37c89139461d15d54b54a04dbd8226351451b8de2fb8ee44b8e4df156139b419573796dcad6eb5b22ccb3cc65863666c9cba271f244774747474747454359a3cd529ee6514564805895fa4387009fdf0bbdfc3d13fb74082a55fbfdf8fe0fc14ddf84827cecc8c463ad1eb7371eb9f3742eec205c225bf6e83d5448bfe96527e0ebff207d84a7cd4f291d71cada3d3d33dadd3d33a53cad65180157fe234bc73bd4ad4011774bc1d10b961c37410bb6113e1ba6cdf9ca67ba20781ed461087e506366c1d22b8b87855813118d7b140e57543e3051d459bcf9ac853382ffaa1886f3bfb370d59ad544ada224dc4a929196767d6c0a3d46a2d8f1ad6b05aadfd9f9971943f9789fe863cd53333a35128f489820d99070685ab9429cd84db3160d30f27f9d7282c8def2b9e607df40678588031c0349287c60d9987d29793be6ca1c1439172fdb729d7bffa6b302ef98f686a244cf2f7da83050996b8158c3186ae572dcbb49a655916c3a5191b3098d6de162e347c37be9b3e932702f144d307821ae4d93810a8b978816b7a0a0c8cea2470c9bf56295bb4b0f58620ea8cfa7818f571a10436b54e942b2131ec146e3b0127e4aee83ad15b75655924f97d03ae3bb8228beb4f230c3bdd091f798b16b6fb1034d26e0f397af8c8b9db48bc07a34c4e640a93fc9f3c9999219144a2961616161e0d74160d29d8b0755a67ea44bbb25578603c48d8a9b56861fb86206e19fa373eea1e75b5765dc775e771e96473c3c34385f36f8a2650991173ce1967be23ac84a17a7979e11d3ef27e1ff2762f8c0a009b7888c5de4d0dbe30ea8b81fc6eac08cbf1a1878faab0dc6f31ad8507e10cc806d6ef8c116cc831cf7b4ee4d2e3e3c36745ea03baf407ba34e87243f70185d88458125f08eebbe7d40ddc771fc11ddb7b3f18e5ef751e03fbd2c466377c11c2811b78e33daa73433aefeb3e21baf7beff7cfec3c1eb3e5fe7e9781d486b966971c6868e975684fbdc130c2718780a0c1d8d8361fb256df78a23fb181abc9c64fdc2a25d99e8ebd0a761d27313834185b94aabc0e827bdd35c508965b185587aeb336153ab98e45f35cb126a99c28423d85493b04542473e090d2eac8e1bd834137776da95021bb6aaf20ccfccee19bb225e4eb418840d1bdb885e201f74881e5bacb0da6ff3d4af8379fc3688d3e224e698739e322e38963883b51c2c2c5acc10d9aefa6732c4f173e367f1474cb3694c53e38d2f27a3583e3e6554f65c92190b4bc6c2a2634728c4d6eb1549ebcc247de724ad33939d94b26577574aab6c2a6375ee93b2825a6ee0c86e49475e57217457779f4249058020c0ca6472e59e9860e1fadbf8134ec4ee4d805327caa1dbb44a4d4aadbb6b77cd624e47545c0673adca288fb1f2d7d8546e0e3edae1231d556cc83b6d82f1f0efd78862fbdffd5f850256123ff4f581237ebf4b06b844e90e5c72c2f5d7c10736ec1bbadc707961d30c362e362e362ed72968c325bf3594606d3aa7a2033de2e5c4e552c528a5cbe51c738ccbc5a817a3ba9fdf89d8b33d549c467e9b6e22c9a77fc0b020265636ccd5e446307632e6324a3271b968f06660e34b474e1d684b49af56cfbd92d263ba09f8f24a8888c195a2877131c9bfba04a71f61e54ab0258aed0e87009ce0092247ca48ed30652052a9821674705171b9dae56ad7cb0e81861159ce8a264f75cf813333def29cf8cdee8ece62398be5ac9652fb1b975a5cc11222292041bc0553f020b5a4bf6b91489a904c5cffacbe62b2566b4321fa6a82021bca26b2899c9a469fe3bcaebd1cda4750c62e1831be71fbd63e67ab15b9ec6079fb2c1674a9f5157bc56a8c5c8b7a564ef36e91fc824b1e8bf5175f4c568c4bb158ccca0f76a25c7feff30144bd5dccb4c97577578eeb18b7d11d804bfe2496f1d7b8d6fa5aadcf1cc771557baeccd5ca05516f06c6c4707437cd135511b7cc8c1938f2de47236f145ffb2a0abb1bc1fab587ee725f6bed5a3beb6aedbaeeb35a59562e0ae71839c6ef72ef3fb0e93a14167eb570290736fc87f18151def50782ceeceb6b1dc81a184540cc0be3a3f7d11457acfcdeb1b2472c168bc57a4ca74c4072a4a7a7a7a76726b64675a6de5005a5ac3f120284c407d06afd4ab2efffce338404b059cda43a112fa0fb927c9e7b118e488748072ef96f2220be554d7d401e91e4ded7794028129650910a2287905a12bb0e87036f5e4e06a31a888f7e70cf0f2038e26f57b02bab81a19371fd23101f59246cf8ddf6df7122b8f38c4672dbb66deb8e4b1e974e4834ffb6d02ac5c4a8626262623edc73c5552e44034df2bfe13e34c54ae92640a932b052bc72087182265332b78fe91a5f1101870db54e0f47fd191303868d378cb9fe7187f71db82394e3f9f01e74a43ea7b80e5c329f53db0b041ae000d3541a8db7c03c62f0164d88d16afc0d30c95f0af50ad7d30097a668c20e1d3670a9bf7362c33250e8a53ab7454b4a29650cc302a0ca13c77161d8c8110066031961e39fc2532686ddc0a772e4a3384363d830147af996272ef9c3c4dc8ec1b62fb132cd4752fcd6b6ad6e35a3339e4e5d8bdb9afbba93711c0da6b3bad428a52c022b89d56ad502adbc258af51b82b22ceb07318a9a1a0926f9af4076b56294ec6ab7404c6cd8ab5ec55a57b3c7861ceb311aad66607930aa8740804d7d0226f97bde0b3764d8aa57a01644b1359a7bf9e82f67f162ddc8d24588730df3c69ff3860c6bee21ac317c524a7bd5ab6e0756c2b8fe5c6bca09c248102608d66f0833e78c715126b132b013e4487a00f8086ed8463c1d1ea3c2b6c73c161bc53ce6b14895e0b895134dd249fe2e73228ce4929c5386c2b09e8d977e1cb2a2f1850d7b95ad58a130ec7703051b492479e76cc1ea10ca828dc9c9098d613b279efa54c1c6df2eff200756aa87c3bd56d9c335c68e567c2678e2828d31469a652dbba514eeddadf2aee33afb02ebcff713865dad5cdd2fed0a1b76832e3580e109c9ed1fc2741336914f155b6b5df5672f65f69dc99e9f637eb68a9d7bd7cd7a71f4875d8d9b7910602f6ef6ff81065d7058822e0ee0abbdfcaa5df61e0cfb83e85b9f8a926c7fc34ddbc6a2a2be3738333e07bbd16921f2d1fc43926d55ad0d856e5efc8a37526cd8ab5ead56ab5e7dc0a0d2c566e3376ab8e42f03cbf8cb5a2b27cac14732b089023c271e1ea0226cc837704d10f5663afcb9d865221a3714a233cb3acf0654ba70eb2dd00b0ca2e9210126f94b80022010a5201da229fbfa0f60530573e02a43b8fe914706e248c2525839e7e441252bc2cbc9c7591db85c2e977b1e112e715fe7f4125de4fb6cbecf72dff7c56c1889540999271a7153e734131c8944256eead690aee1c05e826596609a56828b44589108d7ac211fd82cd60e1ce840d7741f72ccb2766094df2bdc0e9cab85b8ae740aa4e0aa69167fe172b1b8aff2e0399d6af4ad8aef515ed7748ce24ed72d7bed3a75cd0e2ecbaae2ae68f2dfe1e3fab8aa70dfe7f33a6ed37c74b2f191cb058314dec54849ef0c3f4245cf251731c9ffc8f52f874b810dfde52f7ff92b7a35cb6a56b3ac66199d32ba1856c288c562ad986c0f7d34596be1ba13d1a0580c0cc590f82816b3c228225d0536b530c9bf63a18e2101ca810d5b45a5fb97a4531d082448aa8bd830149232cbb228dcaa5028de965058fa9452eab544b140a0210bfad9c25af1118b4bfe2c860d318738a40a8566cbf8856c60c38ec59c66c6588cc5588cb544b1de8cc53a1676acc1d81a0b4ef25712f28e130c33e2df60c79058cacc999723462d468d4b75c658bd58e36720cb8ec5acccc0825b6f35016078ba0893fcbb08946cce130c6d28b0ac9560b1361818d8e6e5a8308cfa6ab45a536ac0262a9cd05012d687164ef2a730316cd8adb061b06efd60354bbad40ed66ac15ab0909d2010b61b8663dadccc3971a03cb9bd438316f975f7541501095d49193153b56180022d48900ad22da1c9678c2a2025d8126bd73f2686ebec83eb5f6705b32c9332ebd1e80b90d3b4bc84741ccb7b85ed0feb470b6f0984efb375defcbed7e7fb3e00781db77d8cf2fbbeeffb2ffbbeec93f2fbbe8f65ed2c28d47203a71ab11345f3ae13d9e0a41d0fe0927f0d2c43692712599bdd8e06146c78ba7eb2b9e9449c28d4dd1ba5dbc4b19d70a2e8213ee2d50a0936ddc024ffaa846522d4044b91014b91820753612bdca37df857abab077bf5cd5af5ea0ab6bb5b4ac9aa4d306735a63698d1af35cbbab39818c90595adb15a1b0add90c07224cd5a3530820dde4413a7b835ad3d2dda38bd6e2a0ebabd230fb158b4ddffff6b9a16bb9699b46b99f9d486adcc3db000431b3358767ec830196316b318e3fd5a667e566bed90f844aa9b397d10b92dc62dc62cf3fe8f5f6bac199db1080c357e5e9ae4ff1273bd7ec85f5c1cb56e35380f0c3850d8d0e605c66d067899f2890c9e7df5baceebb8647303c3d9e93aeb82aa552a95aaa5f2771088469096bd56339ad131acfc4c036f4c60bb73d08460c356d9f828887a67cf0f19709348d1bca094316e1d88513ee33461951ce3a39922d8f8e16834e323d50686548cea6e762b65af55202436642a5fbddcd71d36122d4ac2fd1425e9c0d5a73870144972d4b58c61276d1943b2ea743ad9a8545115c1da2a954aa5d2fcc30329638cad8eab68e2ca45b089826dc4494a6c4b14bb5d1f288f71ce8fc99128c14dc4d52acae07a8e23c97127562c224ed3c47612ab68f25aad55ad5ce52a57f9e8962943cd0493fc733a891c1f2edfdf9f707df80d239288040df24630aeb8c41166c3b88aabb88aabb85aadae34923ef2c2e21439468e91d26e1adbc391519a0df1559039fd87d2ae018605a2da2183b35903e99a366284af78f436728aa69e33704d1b691919505d23dfdf865174d5a29819cb59ab7ab48cbfb5f1a4e2bc19a3554a7ef13c13c0e934c30a3c33d37a717f9971cbc4e59ac2c333673fd14eb413def449d7f02b024dfb464a65c72e2267ec8ef37bc6eeb639bdbc44a065023e44f56f0b4de69c378ed8a94448e0d4c414ba5b51050373f26e267272667393408810187a61a42bc789ae6117951d9fe8ee8ede73e2b42ba7735c39ed724980521aa97448c8602d2e2b414fe881517d0210a0e0fa3f117a01cb0a8670090736642d6c601bedfd21106261d1860cc99470ad49b3fa7fa30e1f4959edfdb07c202b23d2518aa8a4630ba211e7b48dd336edb6b6d5bad55a757c54646d6b5490b7aa0b4518412ac80c57248106a9ca6224a91fba2c85a7d8780cfe9c941c9de432b08cd770c93fac9181a72b36140a9d4e45304bf9e1e752ad1107f6e3934707b394d27e283500d3645c842fe5a7941bd77de61f39639a8d8604c392f7c675def77d9f07c6ccd8d0b18307105508488edc297f4ece7bf4e0437b800394ce0944444542ba3077e0124702db5fe526fa8f48f2016cb79f76cd14795cf973cb9c7c64fa514352ca1fdff52f404800d76b74de753f9d18c91684224ec04a057127f480085e8c00d55e4403a159089782aaf819eb4711102ef187b8110cfbfe88a35128cecf449d9231d658638dd5876c02319581a77ea71f2d6c783a89fa664ea61fd13d9fedb13d3dd1646d8fedb1d1d45a702242be1ac0ec9993956085b95faec48538cb8dc4662b4f7a7ab4c0a67ebd7a5e3daf9e9733f16aa2b1a851ec11425d3c14c2508259b859ddb3d3f3aadc3dddc34921467757b5c360f6457226cf7192bf839cd8d05b5a7d76296c9a01b2682c16d481813afe854e0e0cb6c3a828855194c6fb2a822eddf310d7df8738cde6aa1e2b31587faba581124cc28da3ba69f5450cdaaac31cc6240735980e6b88671fbe64a2ec720e7398c3c2661161c17c34752b5c5a35125d823639109ae4bf6d336600e0860e0b7bb572285c72186ca5d33a30dcf0650836642eee053807466551aec0c4984236333313998a7a269a5a0a26f96b95c5c696995b860d1de650d8adc01895fd006030864587d5d02bb831a3be0d83ed780e3a82eb601e88be9c72691087efb906f8d7300d9d3b5964a7ae6b958f801cb1ec45cefb1e07ee3f5008ef3b0fc471fff03487d05c2bc232ca1f3ac63946ebc68d273738274052ac66fbe3f2762a9f5a07d44956739cc6c57bbedd739aa876a22ea767037bc0cea9f546109ee4bccb8e8fa08ecfbb0071c1e10980a4063055ea03812c097110400f90a446308390572a48346227f57d084037c9070af191e439d1889d94fdcf87960b1f70e6c3991b93f260e68952ca3844e75e0d62c4519fdce041f10d85421e0d33a334cb28cd32caa38c254cd9810e524082704f48c2095cf082a78a29413082056478818432a8c42e5a211d1daa71dd67def7dc92f843782efd1fd85da48c98a925db0f91e2324abd242ed973df81ad2aa3a760d4ecb88a242f126342adc2fae0e6ac8a542fe3c01f91e471a5135d4cb8a38b23148e52dad5ad93b5ecf959c883409f68f62ef19b8a5c224883ce1471556bad95d2da4c757422152b85121c24c18b9d2830184e0ba7250bab7d28b72c2cbda1d4b46dc3b1b9b5c1471e8ef89a28abc10130d8b67938a20d35e09820fc4edddc709afa3856b0fd1e583992ba6e07d6496c709287a8b00be0d2cd12966d364ddbfec6398ee332ae765cf2b804c3d9d99c23c2a5b75061d9a66b6ee4291480cb3f2823053796c1c56d30461aa920f385f58fa6938cef2fee3e67cce1d53d864b2c99702dae5bfb9fdbb6316f1b6f1bcf60b19f17c09b0802b76deb6deb6dfba4d88e9b2985bcf7f7b88659e6d3b6aec9debf6314fd04781f12c003c3970f0c596e876e67c1d6c0397b38b4af65acbcf19c63c9516efa657777d36edafd8316462629faee4d348d461f4a25e803975836e41727a4659c8a119ccd5a48d7b412211526c228719a686aed71704d2bb9b9a9ae71257e3946b39cb5955554d22b2b4a6e7c989e150993dde8d058428b93215950910ad23989820c2678b171ee5e2d0c5d58ce428cdf65d364d204d9cd99b05be15038a789707dc557ee47f811475c3942be4fc1cc1c768eb7ba59136cd6883522316afec85b2e032e794b829cb75c672485b79ad56a712897356a31c99fc52c6fb98e2bf1be0b2c9e3a3efa4ad05bfe2396043f3d363ee80a93b75aad56abd56ab5a24e112eb6e80171890aa494719364cf5e0540d592f841bc07c46f978e0c17fa435c1a6353da2ebba59db001d4a0b3a8d4ae587c14aa190100680113150000180c0886c2e18068443620e69a0714000c627e407a623c14c763812ccb811445210619680c210400030066686a88025ae9b687c44c001aa6fec397954267125ca260a443c4239a55a2927b6a5fa6160c9474db2d92a6db3b09092908101b0f33b251aba9c545ead1ac39253b3ec8c00aff93acbaa7fa417a801c1ae042977cca50e4299dc024c91eb22153dce17937e96c6566ee5d387ec3a4a796e3363d3bb1df1e20b7269e571a130a4080dc9920a1e80ec130b1676baf1ed299ccc8548789ef99404b268df9b76405b55d90dd227d7a9aa84e62717433620f5533067de4d38e7d79809ee1c49ea5bd6444a5a6b58d9a389584564e20e2b99da28a52fec56815ad4ac9078f8ca7567ef69077ef6ce1de3d09c037cf96848a2ccf0ebf5831f733aa94a086ace1e9cb1f0f0668ed94290ef2790b281e2ddb189c5b59c241ef4b5402ca534653a0a62cfcd1bd5a46614b388a41d7eb7f78a28afbdb141b11b82a4c0957dfee934556060dbabc513fd421c48f52ae02af0eb489cb231c61098afd34c04b057911a7da12bf8218f360a92752ada73358511601f6a630510450f787ded0133544cf46951ce32d206dff03d5b4e1a84e5ea12951e84e79fcb272a238227dfec6daa5e60b2b7afdb657eb08b408880a02546498179d350f8ada9a49890e1c4612bc3381835ddf6052fbe4cfcdab4d2b2ca0d3bf29512c084974d3f2814cd7ba89db2c345a000754682aa02047881947ff04c1811a2a6327b362447335cfe386e616ebe016711b43b38d068b1b6bf9090853d3f6964e5312745445786aba7c907bdb3c586053d2b7d8f3c180781531dcfcbfe71be739d1bff1c7bee032fd2d00c4955b0a9aa0d032e08e03e6faf71a037de489dc0b1106dc51e935f691200b844283dd9f5e36b4afccb987f80e90daad55cd83184896000ddb55e8c5f34f28d02dc03bcd2b3472f994d4fb9bb73593945fada46a87b7916286b5666e0d1e2645c799d4f78397aa686179acd3c2d5ac6257728df27c85c894a60b3285e80b8ef1a1e3a48d4ee5c69bede2df381451e6a8eab2eaaffc894bd9349c25481867e50ae8192f51b7108c29be54595d819bcfd008d39ba1059b06d1780139b94ec42f33422cd507ac2d3376d8fc029335b8c637cab2ea49682fa7185fdcec027b925d89a0b0662128a5618f26405f9e7398ac9890266cb6de656d4ad8d0b025228f3bdd0d112ab8a73cec025e971ee5665b9313ef3d13483e905333c00a2ae0e179b97e82d0d89e31738326a3348b1d60334bd7871bd994b895ebd8968bf5237b5f9b020ce6d5956ab5d166b4fd6610f99b8f7cd7ead635989dc6c5a324748d800a33b5f51e7707655e2943f083fc4b111534abdffaebb6e146ec0ea46b0ec5e5d4078facbfd5babaf33ad631d7089b864f7c0e509ffa34c1c368eaf2d62bf95638132bf2bda5d9a1575a3f264951ca6f1d8b1b3966fb03e1a95b9f03a6c8db323e811e96f1a5d1f099612f43244c0abec64f310e8c4b7c79952b19b2b092a9c00e452e189bc14fe98c4fa9174b6441b4880205fd8c75004bb42e2f0a5dc36801e50cff6545ac8430781637a48426cf320891e5f0014a5bdb95378c2fe963ab64fd31aefb296da6e3b29904bf49e85426f9521b78ccd735546aab7d477507e70ca138be9fb8cf9969c7dadc1c1b3bc5267d99337bba13886ccd8c5a4f58d0699510a681ee9839199cf7f61b08cea70a276157e9c635aa84264893b0993e396eae435a406ce59bcf0ad670b04ec4c36f9d9e00e88d5c445b37eae27ee816612af7d1147c3a4afd29c8feeecf596fe27a1124a1bbc756eb7a9a8c09afcee6a6477f483b2482496f7fa14f8189d814a6455063fb7177ea3ce6df82cd6a1c923b92151c6cbe094b90e36ca922d0407d7e38402c4521cf01fcc15b57bac73529d36cccd03579eb27db41ddea19f61602a2c834696a0877d4f0e8996223a4bf513041f294503561be6342f745cee4992c0146ef0262b093f78f8ddac44f8f157b36d90328e6c5036eff0472af948c7afc4fe3747a1d3e902ede88248099d38f762b98516547e36a3e808eb11f88046fe759cb19cc18c1725b0ab6ee11242eb235fbd18be7c55c09066af1add7b7473054f97ababee4e84270afd4ea70ce0a988b68ea2f612c9bc4190f8fb95d31dfbd6f49170832f4b97ec6645e3802e3718a670f01fd33087c9a6f3c8163c43935188890a0fa20593304fb551930261808a527e113e025417f9a2c112303bd7c46c672d79f3565c9e5eb126bc725a287b21708065f6574620e59954b7ac17f501025eb81b20066318230edd514d251d9ebfb71b2667d4a54964458041d97bbcef304b13d87a805d24be5294f487750354ce7000f82bfa8052ad54ad28fc78073f3ad2006f78da8ceecdc0e4d9a095310abb6f69fab3212fda9a4d5494fe3bd2e4d2bc32f8a0c3b085adb24af01213885a46923ca8a0b109c91fce48cdc0d9206f03b4b7942ffd9690e6208f1b397276e366bec17ec3ea1142dac9e085fc3da64c20773067a2d6409015aa64633e2773755b740eff739f1ac2f78076030a66036007dcd829d3dbcbd133c8ac22d0006b7d37023081a27ad50a44a64630c3447583555e0e66119b4a146c0288fd0ae909aaeeb2530a4b24357cac084ec68a7b41180deeb88d8c41ea9da8b75575682e446394b270969036f200647d61a2f536146fdd97dfe1c9007b2ea3a200dd70902fc5e40bad9d29131f201bbee550ae5db82c71686ae385ea2fadaf88395d8c5ae606eff42eb9d1a54bdac041ccdd7ee4b2bb736768837a38fb41ae850dcecf04cc838b91b1c03886891efe97b7e0c9bba0b61f55ade3595c8fbe80ff6df86bca2e54e229a6a2257ac45f4fb5ef4a39faec920d2e7c4138ed84f92892354600fa2c8383b2e323f0364ed5cbbda4bfadba38201c207a2e14f31fd501481db66924a97d6eb548e90edce14f28f5460b13db319f74d3df70f1ec89c2ea7576ba5eead8510aa27b2731696fe0d405dbfbf85c1a006fa145af459ebc3e983711b6a22e5264061f941a11051bba3930554e4f02f2a878770df58215890a5c829d9e684b7c18f73ea0fb8c69c930a271c4f64ad473679761e3f0c9860933ae5b84bf7e15177c8825d3d6b06136173173bd8629ba572053d7808ad53afb1b90f7d70284bc5133ac56120ac5faff9a656560c5a2c1efdc5c4650d9ff2bf9af0bf989e9083b1fd7079f01ff47ae562fbe4905f37628e86d5b7ebc6fd093fa8080d4fb6c324e3a9d5aa2ee52ef101123004aa21cc551221603e775731d3796086e7d2b39f254accdabdaae81e3962e9155d85588236177f4afd949bcb3204ca4ed1882a020c479511001133813b064e3f6c9e10f192d30f1c1184924cf8386073028806224f50884a88c08a463054d0fad2a130e0d0d329aa515defbd807ab9f583196d326bf96f6985aaa52e49c76f5608e7b1e290860ccb138307434cb9b17ce4f328ff81ac54b14873e451d3c80460cdf46a6501f9bb06d2596e27c800bda7e00f0ff030b15fcc22f0684afed1348894e184683ec2828f3a10408cadab23d2962051750f2b40378151a5e6fc5e11e04614b8811c9ffb0686dc65507616da6c6da112bcf57230ce387c01159a1170490ff75ee606308f8a9591a19963205dba6e8022f7aabc71e6edec23a67ca29b13b294bdb95e36f93851de4c63e5ce5287a4e435f35b747c382144dbfacc4a1b85e70c41d30a708601b3761bba15bb658f5a39ac146b2fabb25a20ea3d9d5d50c89ee0e9e04bd6c94f54cbee82e48a2904302427f5f7faf65b47ebd53f19d950984bd877a132518572650a608db4ce00a242f2cb96554e22ae541bd46aca39ea61a5a535e530087529236f21696df598186c051638f41298353831266d5ddb48f4a1ee34abeee30fe9dc40410a1568d963fafaaf25f4751c5654ffe0573837446d27e96ff272487316c0f5e3a3ca26b8e9eb990589d45fbd633eaa654d5912db502836287ee30c68c534723ffb6843b1e3944df966ee8d9c657bd43db4950cadf383b138d42fa1578fb8cd6bb7457995252811f75ea198f8d215f2b6774ebf1e1811759e71d121c7a712377c7d839575df4c7e853b7a23e0c721a0b6c4c1540094df9d0df3a21fb024a54c455badbf83b32ceae35161cf8835ead906ba72b7c9302811c1d6c03c9e7c10c3603c53ce0187ac49e578d3f97d05e53ebf1da7bc5d9f788c7a7ac6cd1b989eb6bf3746a66f65a9c841d7d3d0771867a0fb7fffd8b7f6c05e6dc26345ef600e4e1ed5d75f75ea231387be127b89b10d7bf8a5dc18d8af47f45688846b319a2952ddfe2d636c34fe54bc431f71d0b9fb2355498d7c6cf811827e731bd7e1cd58a6754ec4534b7f267195d73730a4ca27c1aa1a0356e04d99cddc73275556a0471257a73ce0c9c8f18572c525a2db843ee3c2d447895121a574da6b0b395cad177308af567eb199677bee3fa8c54a611e3d41a2852d3a0805828d8ea06e40c0e351e2d39292ec242559c7aa90e7a8a786b16e3c2fe40daa4b468e56358663a2310457027efae6e114e1448589a9b2349ee17ab268af9f4147226723431086d06f102151eb57147eabd01049ad243dfba8de130e94eea2f005526acd8fc1b312587d13dc48bf7c48a62c36eaf4e1aab6fddf92ca4078cbf1904387290edd8466453416a38094c6e9123f6e923ff5faa7785700a779e6e95d04fe8baa420d10909b1b8d8adc1565bfb1b42d081d28254d06825cc9bff911a50ab303a39ccf67ef1376293fa1a4af6651c040be0eeb2e9aafef3fad4f07820b2ba3f1acf58530a77136d5736b13b37fc3341597e85ad3f8f2f7491b0b5ad8aa699c310a363e642023f2a67ecf9d68b3891130f3715102d476177092c222cb92642565ae142526a93a51fe2e9df2d9b2fb9ad6096a571dbd298d1e9325de24e86d4f92b4bd902e0d640374fbb5f4e56e6229ef46265cef03c4423cef9b705dc605153dac80fd24dd76c1c54af5a4214e6002508ccb17b46b31b060876ed0dc182518a193b1f14895e41a54f7b8fec7178b0c5ddc328fd67e8728e8bab6a6788f975bcc29e9a637261babd7001253ea0d0f9e92d479e4e601194c0b86b30085845de86dfbcde154c0bcbf0d94e917a797bb8e08d7c4a99c1b105c6fac28e5ed8e5b0c91e6e9db0e28a19c6bbe07ab716fa3c7c90a6425dc418653e2deaf2bc8194a0463d887bd4a1842562a25d6348b87172c5c5d51a0d461022670628564de86a941b705d6df36fa0563a61ffadea5525517d931b8650b9464508f8c1aa9c006c4109c82c95b587705814b881b28de63fa2b4e28a80aa526f01be11529170942c35def63402528d2baf7091c20bbd0eb0324356e0bfca93e199f74d4cd92438961f9f104208556e17739131a6d6c492be0fc1173a6f2d5eceb8c2ed7a6b01e04ceda63ba818bd2ceb3d81bbef5fc5e01be133868cc32a4ec600f3b81eb0bc24e0a35603a43bba64c1ebc380abd7a23538f5b4cd71876cfb9d799861cbf588c474fa48b5cc587553ba1f3e2963af8cdfe92ad36352a6b1413d1091af5ed9e09aeeefa8feb0a847df6fd4f107fd805cfef1e0f30137b04d87c09923b0f5eb9da2c24638153a216a80a9f95faa64032968a2496f1681809221d892eaec1b44bd85a721ef1ca8b4c7b8abbbb763636f297ec181cf8ad7a20776e0a1c34ad27112962ec576e29fd93a299720ea290a623185b03e354ecbd82bad6d57cb872a9a243f72f7cf451fc2abf45dd4fb34e9e82a5e7987bce061992d6979a49ccf9457f1397bfd3b0f1c73a84b03d6f3312b8e4837f6eaa838a8bd4c106db939aace17567cb1e75f8cef98551b08afe49cce891571f0f58fe0c901dc876604915b1319dfec0127007e70b70e886619b32a84ef5f5279422e7fd880f3f545735d8a240a93a7e21c831574c65bc3770ca1cc52ffc36a880d42a4450f34355f0623dba23a0c20796386f597ef5d9d8cc81c2c41efd8f8508ef583760d3e35d12111ae7adb52538ef58ac32718b72b9cf596e4b1554831e36cabff42bf7fd42bf173813c55fc73e088b7117779f63c80b6d75e69443f5501db14af7c27b043e6fbf6d1c9b17331a49eb4a98a87ff7424c7237bd6d8aed1b120dc7c94c06654e1e1ba9e08cc56db3a6ae5b5fe588ae5813e10ecd57452b7b70fa4b816dd908cef4f120de99a53a155bc9fc0ca8e5e43173e0797a06d05de7d16561e2011955ef756bbd9d4beb03aecce017301b4a570039cb124cacf9c3a835113d93e43230342be2158d046d310b4013eefcd14271e4518042631b361d4208834dee61be31fae2aa0f4ba305b99d2eba8c326cec53380b483a372998a9ccb8da1a96c5fa9a5e8f5f7d2b2c9f254f9288bab0665d57779b0181bf6c0b48709dbd7ac98763c27f7bccaa560bc735e1e8cf229436e02a6c226d8f1f14003d2107dca78388c8c05a7b514ecf357d089bb1a455eda4d98d4560b0987d1feceb8ec1468769f61513b2897c819884ce63571459ae601313a5dfbb6f7a8be3dec1db85a7fba479c4018c619d3db9616a7ec8c88f9c9799518d379c1f26a8420569c970bd0126d1d64e4654d93a228d9511bf32dbbe7034964e5eaa6a4e5ad096fd87cd728dd7adfb4a4903c7d51bc023db711a6e7dabae3d85f33c9c0e9cc37ce679334dd831bc2eff6528d4d46e3495e34a75f039a8d68c3b9d68d4741abca7fbbde2fba7e3efcc7e5f0ece864ea85a98241613c9cfabe8ec82c18bb7f018afcf6f81c6262b33aada317ac487a5dc288484694a41cc8516c83b7fb9b76ef626f747091e4eb7f4470b4a44a29a48581da8b3545adffb4a1256ec00596e0f453fa5a3f9e883388f44165da739c4d854c036eeaef879249a20c00ade3944f7986abbb16fadcfa45904980393dd7da16fa00da2c6bbe9eead1730847f992fe0fbe573c39ee145eabdf90732926fb43d15f4b4839966a2712d9aa96f3ebcccaa16ceca915dcc2d6a5d60e1380b71b953f3546fd22090520382f6973503eb4b7502b57954badac13829c5664bec0920ecc1c6559196a0fb3b5c46d1e4934a32194e1ad222a7f2a896a15c57f0a43a121a2d1f9112ae57c09403635912ae199958cc397c5c028a2b2906251e8369fa71e10a707d91176c5911183bcac5e2da4906e019e45430987cbff1204c52afad7ab2d25440ffe4c7334069f06fc6199d6cba95b5e9da773846a69e6be780f4e200ab13475d0f4de57cb4839883e05303c6d42c7cc0be30b116ecdcb3b24d409d1003462f0c687b246e04053e65409e3afc382df527311e87b0b9afae06fd4806bba88cf9f4c3998012da3bd1a3fa009d724055e40a6d1f76704e5b471f83ab655e916a4e7e0ffcf8e03338baa397a136d9bc8502ee9878101c90fc3d00e4e207ec60dc0acb4a6a6a1dee8b9809ac142a5088c55e0d8436ab366b3ab8ffbd8fea1f343bb5cc840b1c012646c31650317b621770a36cc1b5f2a1d7f4abfc231af2e541dfc1d041f84624d549b768c5d7184624e6f79ebc04f24b2c3350dab29049afc851b1c0ad00d74cc5c9ab135ff727ac7e8e9d8e4d1cf6a2a9d3be268d134b573a9fd13c1f446f1a245c801812a9e6ad47c8302ce91c25afa49f718350bc95a90d1002e14b1f4e3711ef6036e22705d5014f6af6ba6689864931f387150ca3eceaa47a638cad05762f461705b1d7132c499628419e25f130bf55b38df2414287e412da465722672518cef73a75785dc01fc5e63a708b888b8f6477cd81660afc349ae42138f0992094725fabdb9bfd4d6086321e559627d7393f9412f4e828201286678d11a2e7fd73c5c8a0a93b3185666fc3dccaa1ca8929491ba2e2cfb9687b98223e52b26a489776139d67102c6d62fb50a029ce4e221c68e9db03342aab1347d290eeabf9430a5174633a5156cb68d804d1bda731653dfbec0d7803786be4af3b053da6ecd72913cd129773342f20f9dc09ac9a81e29f609a5fac5a7ba00ebd237dba2f9e65977109ceaca7c093e917261ce656a96ea3c87d198253f09f9ff0da09537675e4f371028047cbf0fe2acccdf745a2f23c920e85c0653447ba04c282ac8ea0b70f4ea818bf810c8a98a8d5cf7985db6c98c3708b3a4b564b27cd3adccca1ccacdff964d6c307ae2fe4b42359aa04dd018363afeed1a7af18b9208be537812656fc21fcea4fc0cac1029672fec044b5173672eabef6def8af1e6a5ced34978906b19edf1ab7ad38449d43b2d2274ca9103f520b4d94ecdf1a18cd0b2be01c22f499d38c658c7cb9c90d5215ea7fdf4057a14c874c37f325031043c15497570e862025887211b94981f482ad1355d40d66b10aeb4d0502ee3743d210886fa8fc6cf2d4186908f0081a86abae585e146139c72716c50f1cde75b5be71841c4c4bfd9cf32549ef6178476ad3e6d700800787b224d1a8d22c69c6711ad056fbfcce19d9d3f2a415a3cb438a41c3c4b438926d1dcc61d6b4c910cfb1a892bec2a83a4d77746561dfc52d37b6850c24631f28727bc6ddf135ae1b8670237c7e7218269b4b3db64878f3a139b2b6c940de0d37da6718e1f98f91dda561b19063fed2d587217c6096557ab47a5814aae1cd27cb4a44b91a098fdc88bc9820adf0091ff6c0a518b1ee81df8f50876159b9c2c4dd0a45a39a38bb4d368736356211ecdf0089b71f756bc10642dcfcdffc1421c26a43e337b5e898a01e05a1dcd78af270f8bbc40f4ec3ede61b5ab90a3f708a4876fc54ce4dffbd7dd7239df3f3e6b2d6b0bd64cdac77ad0f708c41185188a904aba7fcabc5cd6bb05cd6fda84e745828124390f9207c69c6cce61a2bfbda3921632f957088e1b8442c959c70484de343a719827b4a7f2328b25268205a2a293a393c02b9c9552ab195b1c493bd1f70ce30b2b4e577e924d483e59317d09f15f5211b9ae745bd25677ecff2332a4d23e4c257e5924525f52bcc359a2232a7146435e8a906bd89e3b0782dd8ca8eab495ec242c2babd1cb70febb73922cadb93508b84bd416e32fff2b50958f73dfa3dbaeb387f7da854b601b7925820a54fdb4965fce575685f860b406d1358482e011c7f963300923fe1dc854a082fa2687802d2cb06bc43a874b1f0006476b2922b900a99b5964e8115cf5da2a28b879c717fccefcfb05055664e8c3dab546157a1deaabeb8dd7735234ca013ec7f6f2556b08f3cf69b0610fe16f83cee08dcd3e7a97338ca7e69a081ee67acade319e0847e2ae68af02d6fbe51b2f1e5c491cae01395092d393050012c3386763bf14bcc0e2dc7a0b3dd67c89ddb699defba512229680c9ebf2ae7243a64aac79dfe072277827769a3cf7ae9ef632d4d8e062059f52d5b6f48a18dec29849996731334bc613de6a7c8e4412d70bc0039c99d8188c71fdef72bb8efe12f1c3c61c9dd97623a5f420a0b7f8d159fba77c9839fed2eb5e91e36f5a5ebc83319e26bc2f017583dbf28493b3db7a43424b750c4b364247e86bd4bcaa3e7efdad9ccf72a7bd51b28e7aa9edd5c1e3c668ae03928d4cda76a6c4e67496870cf90789f328881c79c493b6479423749742837776d31eeba8afee510601b7e94175fe38cc1f8134f7a4758b5c31256e8678fc18b06639c6936320b9be29b4faac94fac22e6f98ac7a8a147c1d573313641f1ef503e2925b8c93cac88644071a155876510a704267fdad6e9230630290a72d1288a1e6c20c450600b277bfcb0bb0aa3940ba297de683ae871273cf4e89ead5cf3b3b9c9c36de72697f020dc287045edee1410b1ac702f71f72576fca09915bb4646f178279870f5f82b2312bfc689e6b7b4ed250236af8e7a7e9029e6ca191f32526e07c8d77bbf1b23ae72cdc988d9a4882ff20979f622871ee34949390d0b259b6199265e050a25c779bb9d6caec50eab3ad778dd1b347e0ba5ce8682b6f1b40a430844d573ad8173ca60736da55eb260d9adf3d03805bb18490712060603a0f8af50790423bac29e6875f160572d7e29b203c9b8f1419d0350be7b38664fac03c438b62168c4482836a80f8d1705cceafdaafc1d795e24cd98957341a7851bc66b4a0a83776be0e65901018f6ceca1fcb4890882d893ef353c0365c3ac918382bd905ef2200205ad3f196a6c8e237ccb98de009aba5c64e8aac769f0b4b47198bec97fe3219e3aeb0142a901f137e277e06de5fadf3a31bd4947c8c36461cac4de3b0a49ce015f97be3ef3d1b23d2b0ff8ccab93df789ccd3b76c292452e1a4e8a2ee9fc0d5855fed7b9529fa80cda40919f1a31d07d14f70d2a9f8f8f59ac3744e0dccf2599278f84214f169274353cfbbf7ccdf400826eceb43f78094fa553704eb12fec781814636389e361e6106dcb27d10cf2bb0192d1f6a05f09107019a0bc040f66bbe6022a13c2c4d405881d82d00ff2a09a4b64ec413ebd2076335ce8d9e67d5134f5b0eea4aee66c2e0a35e0688ab3264cd46cee3e4254076d4635eb979846b29d02e31711e7374d6911380e0c86aeffa8b68fcc62762237196e8a737b4a5d4ad788ac5bddbae79282a3b94592a6e7833638e4521a0063e3a6f5f799a4094b04090ad661bce466f2b54bfe788ade743ae96bc1de3df161e8aa959efb2c3f6675de616d7a6c9a600809febc2cdf8860186292160939ac71c2b57137cdcd7010dbcc986ed070d3b1b132c9709f7e53e8e370ae5609cb76d87412fe584e72fdf271ba208aab276eeeecacf3af5060bd8d373b538375f1c08da705225217e03e545014f94322133e3e6fa4403bdfc3870e85e94439c2e0886f8ead0f07e238cd85e5ec7c8dfa90f8e91233395689fa4730b5ebf3c3ba953cc7084ac5f30aae45741d598c41f6e3e300c8603ab2fb4a19773299fcda3adbc4a18b4edd6454c5584fd1a56ab93813cc26bf9a647314d29c87504558eaef7ce59e4a3a1391db5624f089fa7cfeaa67a09d216a3896cf1a504e07d78b24f62abd8d241c2971b1dd373273ef2190c20a6d0960797d83048644f8657068ab01a4008f6423bb080e74b21e48531b6f56c19d5bf08bf45ccc095e7435a8b00535daacd1ba4434467aec5258c1ddfcac3ddb2bf2f61a0d24421784f248b8c53b43d071e9b076d866fbad1583124db4a0daa97e43182f7ea4534b6e0daa2d81d9edb0b68c8bca864ac14f78149acc4f857b3d2863d9fe2c4d00f4197b68b72cdaecea3d4d3b90997b3bdc2c9d676687d8abdc2a33076883f9a99bf518d56244b930586f40cf6efa907bce06ba18bdc1ed7905e513a482fe6eafcf08fe59aa4cd00bf7288a304922cf878d3c8bf9a7efc1036721616e48bdc1a143b4809e772dab8dc462c9deb5d9cbbe7756a1f02536c6598de2da70b80830ca9b063efa2892e3286c810da6bed38310e8bcf5bdd0970feea689b28c318ba87ba6fcfd735a21508080882083d40719848137e702947e8af9ed139cfbd7cf02280122d8e47546d5683ee0642eb61fce5afe656f9a7e75f292cc3d0fa770309c7820cc5492b3e9a7fa41059f606a58e4cedfa80f988ad1eb7bf171bb5902470040a86649900d35fe86636c9420541a5841490943a283373be11ab9ed92d700700ca7343335cc0379db7aca7dace90026ddc9c21af521cecc35435b1593824935843cc68f50da60ed7102d01b61ab1108e9bbd364484976f7734d18f03f249a35b0e8d0836d117bea7c6c7354f5e800fff6bc562dadef8ae92f95bd0fe77ac0b10e8e0bc4a3b05308489aacf0af2721dc108df8129220bef609464b3d915ccfeb996de28d7493d5c93ad3f8233a1d34dcc4053e25521914489137429ef3d5e3e7677e8ca64a1269c2154d372466329e7336370149595b764d2f7d382741ff8dfd4cf72590f779c68cd311dd2076a017e0a15f394a5706a00610fba01e81ce987ebaf547300dfa7947b0090aad869a5ab5a134ab86074af4bbc888d17b8219cd4b6ed8ba296b8c59fcebe984004e546212d8d1a3f4e6ac4fdea6b4c76c5a5db6770b42e8aeffe6f5d4d00f52f26b90843f5881bad6d02f2fcec5f5a2ab23329427cb943f1e3b43b9b0fb441c167ba68c9fa264ff8d9b77c86dedd7088913c3e42744fd82d56e19b62cbf4cb0b2c9000380f1be928b1cc4d89ccb4a37af39c09a9a6cbd1ede1183c27f11adb36cda1f1af5996f0cd468e9e357885fcdabc75d27ef30fe190226b5ec9a22e724cf878670dd73a830510c17f260536573660e730839941ad4cbd5028f46db0dc890bc52bb92a18644f143e011c4572445b8de83ff1654be1a5cab40b8152ad98356887a42273ed0c6dbea4a4f94d007ea4f63d29f48ec03120c185bfc97a89bf8f778090e88b16133530cf55a2144744e4ac158b609326010495d83c71eea5844688528ed1aec0a1b0f089cc86ecfabdc1ba80d71fb127d0f42ef2ea322ed08c5b5f72a0d4922d35518d44ea246c35a4e45462433b53e4435ecddca65bcde86df85884519444cb74ab8bcab88c874246978ef11328f77aa723bce674fa42411fca6a5eeefcfaabaed11c215ee11d6a4c65bec7e8ea9bded38b1a2c0c2230f0cb690274ba5d03d75e3ba063ad01085d490fc3152e5738aa1e09ffaa54c47de5ea2e624b021ef991f19b8756239c2833b620642104e81a4c0a02aa5628b27de1140a30b1a925e47879ed847af20d91196e7ebeea0d77df4b7f82d1e5fd41bfbaed9cfc32f62f7321973042e985e2c9f1e42f68f61572617b35bbb8e2638ea5d24d031489ff776edba2330e42d60015764be50c348e6d351602834de86628ddf48a15df4acc145a6d62dd4ea0a72ccf418843a5549d5a21d6d7072ac92e90ffa159da23b622340cf8e07cde2c97114ef41d49dff72933f0dc8ac7a2209e89333a86a36ec5466331068a7cf9fd5071020713c7c00e16f7cc300a6e63c828fe6da6f8b61ef95a558ba4f4d1012282cd42dcbe0a3edd5eb0792f447c4ac5fd52c11f9a33ddf64455076f93d45dbb6869ba91352915421e9d8434ba137eb2b87198a83d8e6e1f3fb8b6191d52a4e9e849b7c0a291bde157001f20c8f8ff00ff10abba61dfcbfc18e9d03e62f977db21bed555ad92f2f207f480104af64a427ace570e00650702777366156bcbab66629738468192afe911a132002b78544674e45d4e26c83f9a2fa609cd9b29d3221723be44d7331122bb863d173ffd2ce5f0188c6478cae7f8eca53ef47123b02020673e75d4bb0501528bcdb896c8613c5ff7daf067789daf50974855b83b5d7f9f713f64258f47493685bb3d7f119f4e9940dae46d822ebcc4a8cda690000ebd3159fdcca857dc726c01c811cbaae5fb3e566575f08a01a9b9f5740f8e4e220db3c7b7d0cbe70f839f5b712f7fde68721310a38578319900af85862c5a80e978ed1f7e7897035d695fd3dc988e702a1eb5142131f7749b3352bc2c2cfb64772b4fb0771e2f5c5613c66af06c69bb9c7b24f53d73dc60335b31e7a2f6ecaaa68e3d49603c58c883a3c22541c71026386acfdd6f1d34011eaa1cca948e9a07acea0910cb5fca4ff831399fe95914a40b03f12d5408f5eb9331605a491cdb22c3340ba483b18ae424f248ea1890f3e802899ba7f0ea0d3c102540fdefab1d69df6ebbd8474292106a490dc21ad60ae68e4bececce88f1c335bdaa9729bff97d9efa852557cab6d8973b208b82f819b812aa43bef02a7f3b7a8f6ea2e5f93cb238ced2d0b744769399a35b39b867e1c961f6cdf56efec4a18a91cf47fe2c7558cd41e4a5abac197921d3f2e525cec8d49376e72f74da0f29c4caddfdab09a17fe7492ee8903fe79423e43d1448461d07d50fd4f09adf1a8f23cd6cc11320ce51b80542d5a98fc2f0b3f473ec434c0b0fa850f669687a1beeb0abbc404d5bbe010eb5715243a6f759acda1280ca6e0fe18ec6ea8d0be2a2d3894896c05652731031f16a3433cc7f6b2a5c2c5c906bb184bf933201386f34a259040352633609e004fa6292f5032f5d5eba78f8db45939a2ecceeab83595fe020e7adf43fbe18807ce754084e7c50f77cf132640c43a07658959ff220a60c3693b2a18f02a6c5f8110208b9740d16e6a6c4056530dd16e6466786917dd15e3392311dd7ed47bafef1e7c64aa7212015d2af6c90ca05d87474989061f603cfdbacf0ebb8265e757cbeb5d22113cfda0ce383ad4914255bd11d07faec8655107cd1e1100af5c7adfdc578e1dcb6eee9e4ad7d71aa9e364b2c3474cff3b41717fe255ffa4124e2ff71d482baf8eeac0169fd3457199ba375e911996bf043bee1c8b135a2d91a58b41e3d332f58e514bdac9c2d411c1f20ad95c448a088684a19cbc4c0a1c7ec68fe73281b03c1db6409a6a60b485298b700e75a5e5e10324e3ce41588416e61ee6cb8adc7f9168a580bf9df7489dc60264379dcf60e6f3019974604c80246ae64a0dba5eacdaba34881cffdba7186c23767c0b531435e988f8b8c231628a6913a4aec1b83743cd02d357586fcd03b642dd99ae8c89c1d7b738c341a089154eff2f007162f99480c30ccf9fbe3d85fe7a72b3807d117bde9ed8942f0a2055829a5f2533dde10d543cf32b11c7317cd9d0cab53049205a35a174dd1d3941d563a2c675ff6c644177a310c8b4457b7348efb559fd78173c9a26a880a3999b014cee9de3ba6854ab6939c3db0753cbf8634f76b68ebef32c198c6df87ee8326a5449a400423b6939a59a84445c26e382e0b810166f3a2942512a333ebb7abbc62d01323aa578e1db0e2a87d95a06dd47450f4b1b17f05433c83db2692eee9e5a6194c2b71b82c65be1b4a670d1aaabe6fdb4fe09b6d8b05b71b23fffe79a5faf7fe805c8cbdd57e6c10db441eccc3207eeaf89f651ee2cac3e829b875608154ebd4ef66ce45c35094a397bc576e547852ae1801088b60c54d170b9a684a0138ab288080505687fcbcc3448c6a022bebac295d452b18cbb978ad2fe8c6a3c9cb07f7f31b4b5d5b9fdf01625cf4e7430ba2f984c9b11ef1c1d5dc21861a131720813c65b52929f765e2f964c668bd70bb44590bb5d1bf3a2ea9b3051bdeae80a10ce1072aed19854e6302f0a59c3e44e09439811e11a4b6d5fa67ace0da74f5a6804291b874cd52c3f59f31687e96550c17fbfc641bb9a0a4a3190830afeea155850da9c5cd8cf3e637cb406bbee11fd6b9629c85be26ec7f0673013ea151c75c3e9eb269c8b28e22e1c4ae8ad9cafaa3ce0885eace38d5e8a08e4fb73b76f5d2d08691b95f003eaffb52860b2691afd77fa1c90c7fbe237d60924f26fefe53c94a9c5444d842f89e8f0f53fd13dc68b4e25e80e6dfe1b9d609560f833736b731a469b6f74d24807a2cd04955ea8adbee6f3d8ffa1367b761beda6cd2052bea3740a9c6717e54bc667c3cc262e1a3e6825de51e2365b5ce14d4d0d7888e685632d6bccd357a7f5c8e27038b41372d83c3eb21fc32d2b74e1f1eb05670abe24671d14739c446f796f27126a7cf006780f50704f1f8f6d247222af0eaa18fed8ab7cf816dc397c02ca0e79147cda30e5e7c290ebd08070121327166d93284d1ea69d3c60b06de164e18d963f8d913662b8ba9ae74424312e189331be9100751613912ec7923d6e92e277527798c1bf28b7295ed9c1a4676c4267dced78bb0aa892f3ac19c080bdb2b5591478222f421a6747e82c9cea1f22aabb7ae8b655cacf597b9d73d6e45997b2abb4b26808f9f57952ce8b1de3c483ec4c9fbe56682a1a6fa8a9093614a97d3620125e1aa7c944bfbf898b69a6534cf5b6aaaf23a5f9a3342084db74260eb49b6ea73ecfd1541a568fd892578e1eae8b6c4352540a317ed17f415323bd1596f55390e963ee091555975384005cb3f8aeee1d6d6555fa0bd875e4f12428e6e46a19af68d1adfa207b2cf1e77eb5bc94f0b3ee468123eef03c1802311c8a6fa9c453a489940413ae636e8d84207e720acbbc05d03e92bccea3ccf6b07bde5ed952905dd540040ad274012b159090ae604706857680554ed4241a9735b9f04186d30f35c07ed612185af42561aa49064ea43dee99bb127998ea34f03de18dc0528f7a65dfcab21a4488b36ef6b9fd76ecde417129cd84ae6082d22295aaa5f1a41d2b2c50a53aaa88f1781083d0b4da09be1e232002638fc415d2622eb9aa7e930b06ee57a366a6b1ef8708f29ac35c561dbe626621f8b1b42c8772374f611085608e9a2be93623386ca5ce382b196f7210f2894c16937ed81a2d3b2183083fcf375dd19dff68152b6fcbee34b4d59b6e327d6572d32232a8c7f30cc2876e913924eb8d355642a405cb16df61f8df61949760e6a8af4bc1986d7f2d245c0d8c5e83311c0a92cf8d437c6268f4d9d2b01ea15005675523e76edc60d78fcc4010da50541df2866c1122bf2ca69b29505cf1d5b5631d7a2ac297de2fcc34d56c1c3f09d0304d42f7d2e21ec43b190854aacc0b41f1baae5604dd76b4e524a52dcdd71201a21926aab3bd0912328af665b6c2e0f0d8cf382e00912905d555ef438c51b22d851714246c459b4f6cd75bb725ce210a8aef23e886f5dd2cb82a85503c3ff7388b8a1734f1d978a6dcfc4ca4a22fbc92c70b308d9acd003af68495f19fe17cd7b3b1b8503f9aef2b883b0d228ff795dfaacffceaede37b103c317f451a7ccc7a072fb41427c32bc1fb453c3bbb50f815d20e0bbe678b29917f067a74567d8acec378665e559833aef0f64bb1cc2337c5946b252821fc4e65539910f55d511af86ee3b15eac9ee74f38fc45dd1ce157d6913c490223463c2aec66d24b3c82aa9e17511ec26730d3853b308fefdcef698f6ee4d99b2b340172808347c4dcd08d3e62db6b34b4ef99dcd43643ff9fce81fee9870860d9bf5f0a3c2f0a16ec173a0fbb27f121f652cc7a8f33af7b1aaf81d30f136abc648c995709c1b56ce663354b61b71df1b171bea1251d3fc70b737876b782b8c1e0b60b151df2630343b6fc6bc450819566a187c3a8ca69c261e9c8222166ab42ce01c2858f87c1de79c47c43c2f544effb2a888a4abb1a86d4db140b2a95b9294ce6ca618bcd2a4530a05d2a8147dafc5d3ef7a1fb7d324842dc824022894b8110cc0fcf67c233914f4025d5c9e1308a1a2260685c1b46d2d244632b322e17acf2d1e102b33cf01609377896bd7bad72ab125d164dab1ca9084ea4f8c5c720b13702ddec4b7a5861fbc719211caa1327b48cab52ffdd6adcf5b5714d71edccae19e9f7514863610861bd672f4aa15f4c3e3c36b5a580ff3824ca5c0956455b24f08b0d34ba07a23e62917b11244d32cd441e4f97487ff7a54ecceed384528f137c68cfe837ba930d636788f040449801fd6be28dae23088b03e800d208cfa1b618c3bc84cb4695f4cbd4b9ac77903a55f4e66191b701fece6edcd1ea8690d356737669923b61c31951888ba67b9848b203d4bce66cca70e69ae0e048273917d221671139a8fe414d90de332342bed70a4dad6a4bffb3ea8047c3cec0bc09afe84bd0fcbd3a3e94951d1d02803a4dd660fe720338dc6b8c8984766e099b29527074864bfedd826cf7b69cda1fff56986b12cbee70f8144d783497a2230299090faacc8aa9b675e1a6c104664b2054b4c61f29dfff529e4bb5502d7b0ab36bd82323f5dfa93f601709d8699c54ae1faec33cfe838777db62f4907d56ed5c8a04e325ee93f69716c32ec9171147088e0e37d981e133405b88e3367a29965b2e6f85580d6441b37cd34c42a7a29936c1a21c0fafce7fb3c1115f24b970d7a59c03da17fa0634bd9fd65b84db5ab96b6efa47cca9b1087952278d8fc48d1190a42aec2d6adfad6838447491e9dae809a2298de2c8fea09842eb88178b29259e5f758346dc948307c08ef01a4d38011a63296cc38c486c743f848fddd89436861471dd85866fb04cc4836b19b07017e6355d1ee2f214f16b0023b1634da6703edc5d1cc4f5228d2c02c060580e79f74284b2fbf19ad5527f0543a1ec82d5686e5ae825bbcc1ba25617a8abe72cca8baaeaf28f85488f6cee06be262e6715c3ac0a3dd16162cd0c729b7581b29d966fe69f206b353491bc81c46db5970a42b1bf8210e0657c24a09b7b4ee7f8ddc44b4ccd7009af9b04b83eae11282dce52fa6ec79f1e081185bf5f5809d628d03f4f35fae755f117225f51de12bbe7a0c8bca035d7f99bd6988017945a0d0cee25cbf31f80586129d9e1dd3ebc2d45522ab9c76d2ea3b8b6fc14132123c6808176533ca16a4dd506239ef776f59151dc002fbc3f80966a005dd8bf356e2c5723191d806be830d6264c669f0b1659ed3a84812ba822d44cb41badfc7421ea27a70f576ac8adab7f271275b4a312fa6da58375de60a70148f00b47dcd529efb3b0e94ffb8daa8edb47ce8703118d634cb40751cb2c83e2e4d8411d02a9cb523bb53a7f2336684fb9c58cb3999749dc3c1068723d372cae51dc0b4d2ffb2e38c8fa24791041c057de3524c86e1f6087918410d1005300b7353f5f56bf46031e8455ee57526bbbebb51b7eeaaed159a7399dd576076db01c054a3db256b3d12897d6cc2a2dae0b9e8c7568a120cd494c914a885741139f8e4c937414907a1b33b1be7f1c1a6d29cef5662d4a4605c6d69b4dbdd67d2c2431543eea2a11c1dc63da5c76ffaa06659f1cce998a99502c498b3bd539cb2e62c6b62dd00762d4b5f450c987f4fa145d1d9736af7f90aed806ef0285202341a46df477bd897699a456bf6e81c8bea16326f4021975eaf0715256799638fa7910862f27fe3f8e933359f38999fe7f75f9e65de993afcbfd20b17201c796640297efe8fffd4ff2d664cd8a13c3bf3ef1ff8d4e26cc8f89392b40a360c78a76e65114beff6791786d525dc0c88e1a6682968eb611d5d3f15d6d074b8bfd77c8993647111108789c504e2d8f301d5b7de0e3cae4f8a08451aae9c79dea88128cddcc52ae19a3a75965d57b28836b305aaef30f89276911d3a443f878f02cc577db0e306c7ac32ab361625c854239d2eb77c72cb64aeb29e91d099a02fac105bddd65c04c61b896b962719b528e730e37412dc164555ce1b49102d5a5cb3ec316575d3c7eb44a7547c99ccbf4f600b0d28a4c87af69b757f297d15597af55bef0b7295f21bdc1513eb121f28a878de808c7791859a272c3390df79ad532435bcaf7076c6acd7e1a5e86cb59e71ecbf86047c8cbd21c0e44133b95031f314b1de10dc31526fd96e7d421d5d25b91e9ae8beca56fb53ad22bd92f6448a5d09d1afbbea47f490bdeb7cb34b9587f8eabf511958fd4979f8d0d52d7fc0c4bfc530c3563f10f01f1f68c627a92fe302c396c2a12aebb736e6b976986ffbf2700c6ae10d54046ce442c4d9727c337752f6c3b19058058fc9f51964726cfa01d7eaddf18b9f88b819007c1541417566a71bce608a90856d97a0438c3366be5e42a1195d1708806c1a34e2ac3659c1b5d55f84af68fef52bdc6696f3ebf79558f9c97682bf1a28416d8bc6ecb788917a6c8709df3edb7ac79d88fd3dbb2aa135abc2f0eadf4a912f2f1fce8329b23bff693147ef914123cc7350ab498d474fdbf9f3e041d45edf2ef7b47c5bdf6b5624ca990d078fb81ca06ffe2d5f968e82bdf58d47221d956f8dcb3cbd90e4ac04b7d37ebddd11fc6cd7c56f680ed1a803c92f422a8235223477feecb165e9466435fbf2f95e63575804b302358e471dd5d61f794e450b71decc1e5db8e2dd7b9ad71b15c2ab057966e6906023295ad804f7d27469ee918e4367da1a6cb62a818d733200c8060c5bfd15823fe5dc40cf0aba0637bddd752d6a0872e6669901ad1359e2bcab0e718ec49ee0e9d5b8948caf726348af52244d75fe30fc3ed73ff3963b6f13810140ca2bf70306a2741299418bd37ffb9693d60bec1b1a924b3ae347350ef097aa7da5220cc262af8d1a4afe7cee39c0192e157adcf675d5e9e23f94a34fe8ec223f9e5f13938137cb3c68a2a60ee64a61d88ada19fc89cf24305d35c7e55a154401f744b9d77fcaaeedcf73ef0ee1cd1f1d37c06f3525ac67b921dd59f04a5a45a7183ed42d01955af6b1d00d6086c0e02c19f65a426160c8fda05e2464d0de60f569b8ce1154a7abbd0025416c55572dee747a83b978f321e261ca94882f091744f40d7a287b28a98b1fc8115633dd7fe401c71fa2ff35936c0a3d624dd042ca6896e6d7026581ec5554877d9452ad3b7389db88765dc4c7730a987ef0dc17bfb6038772743ee784568dc12478ad446d008bde0913a6ddfe605aa68882f9efc5d8e35f0764d1b45ac658d88c260640c42e80a1a772b8d169d79b74c74aae5c08214b6684a62480d0ccfb536c5382e22c5e3015f777b1449edb1735b9775b59e10d4a18160f1af07a0e9370e23681ca1617f8b94ee52552191cc73921bc621ecf749d45d7dfc7d47940ef8a32ce83c3f64fa9d9c789445287005050dab110f603dcd1a447002a81a50e29e13f8e5489ad2ddf4b1f38e810bebb875b953ab1d2b64fd655a3d8329c10d2900cbed42ad4aee6872eb5021eb335939ec48aa2e6d601ae7f475a1569ea37cb823f2b8579da48f339b89f593e3b7ead55214e280bc76960b36ca60f399c1044f84c2cfd88d7e7a8c67bc3a20ed8a7a427a33edf9c7aa6f206a154d1dda60947ccf755c26af3492ec7b59588cc3fa58e2666747ed4900e70dd252256b020e15d3fd91b584623558e9e215d7e6e5cbe4946eedd0882ddaf817cbeeae23895baa55fcd2aca79d577017626190d102d782d08c8626f937a5b81988c1309cf5748029c87664a54005d83ceb76e69b06bd6d10f9e1bee7719b9885c731a75a1f1b45efea66e66be91dc4fd057d1463c141bafec24e50a72c146d7e5530937f9ff12144f98524a08c1f4bd7a760fe24d32993efba1be551cd8b79ca59c09dbc4f4feffd707a0039b4ab93cff2449ad8432a23c8ff6a49a29c79eedef658d0fde3c11ffd81c4b406bf87821812cf622d63b54c059736e854fe9f6218b93cb800f82a66c7252551a2fcc8bce411b015026a951e6cc0a973f3eb991c4bb8196093afbcbbdc5ed063afeb1695079571d4bf5dc0f575c56a055ca840e7742aec433762f66de0c315334351bcc61598562cf7d45fdc29c00db4999e17a663c8acfeeadc87749ca9dbf3e4f0b3f11cae36a8a75e44cd92fa05ed0ccf33af1645481c2a5d02119a55781e1b2c1872fbeac6bd91eafa5afedb6fdc3627b41c8b3351b2e986a81978ce8591e2bb1720e8eb85a74395687a13294300a1c91b4203421e2d1f3bc98d6a678721b06b265c2f9820e15d2f97350f1c4b15cae5248981aa5d0fd853b52e23358763a5e8b85198604ba050e626cf2d85086713657962348e4cf23b98a5a50e8418f0a7b17bad231443688b25c6461425738cc4cff8b602e63a2d1ed9eda9849b2a9a1d1c1649e4eadb1853e355202a645f51fdc503aa42d4288b3474574b2ee62e06ea006f2eb1f4665698b0c41b48a76c7324884f03a43b44c99c21f679b988ebef73416e647e4dc0160abd1c5fa776e637253f3a256afd5e3edd911ecc381a5c5c880542e6a0915436cf21ca2b6faaaada8897cb558e3fb8c597c9574c7786dad5fec4e3f8a6c9a5a252a38cb124c91338bc2d24f5b6f7c575d7b0d46e69074c22544bf8059b6238b1a0f4d33a61ab2e5b524ba66e78863bea3b7ec6a3f8e7f7ad2aa24aebdc7e8d72a236b9711d1dfe3e47605a507cff02c8d13288d0d83b14044df0b95b4eb555ef143792f6676f46a4fb27d0bbf16a49aa76bd44417422d10c70dad5a5233332eaf8b33e82a99c1823995a7573e1630c1a442cb7599a2bf9caf8d6ae07d90c0717bd2fd8740899f403edfedc3e965c09a08506387e322591e9350bf186d2ec4a69e57b43a1b4a59048609b99362a9d988d81b3f623438adba4fc0ef5b65655457d946d98995a0c97ba01d895b44d60a54ca04ed885b17df51caf2b145a4f4d9db48e46d7b4f490dee50ed59634660e7a6d4c086d8eb460f25463f067a23255b83cbb957a6185d9710ea0f6825750523fb30d3cc0c3f3ca160ca3dc11d2637a0b0036b8b7aa061bd63723675570705c32b3405c0491ed0f286758ce09a3bb27b0ec5b37dcf7b64fd50c42b5758a0e99664a31b44b3712ca89add3c0e2d9b03b893eca42d871e344d2c6177f8a59235179679903c93cf81d162ec9c3d41551abe80721e155b488d8366dda796bc77907f3350afa3ebf468b41dbf0b1e781180112d8918539bffade40e6098def4d1a72c69c5674898cf868708f8b84f25d6ce68fc2a49a08b6657cfca714d6695da620d46b2497cf1705b7fd104ff05f061ae04b473b355e9e8329e36fc66e09f7a1dc9a05cf81cb172a2df1d664a01407e1ccc1162378ffa5ba20ed01f4ed9957f43f8f818b181ec9d0a60be68d3ea6fcb236ee2f5f2f9e840e591b28ad62dc1ddc97eafbbb28fa8f2bca56a26ee561b3deb5b29a7f5e57400e8f7ecd0a944d4cfb756e1aa18412ee61edafcb0e10a0f7b15033bde0a5b2e945c4e442c4b47ba3ba50af3a85090cb43a59a95df4e8f9872ca368f75d45ed7fe3c9cffd8f150bf5b96346348eef2654d5ca25590e5b5e68a617bde291f4fe4d4b7de642ee4f0734090417365d26e9e3892bdf9d414468ceb58ffe4b49b0a035052a26954b4b87ad53251302b0c3b2592e2c4b37176c3bacb9582ed3fd6bd4a237902b327554130a04723896e9aeac47c7ee697b16cda952d2e50bf7288774c3fe12674248337ccf17847c9d89e4fc12ad47d2bd0e53427594c0195d5dd4dc820c6c01f6d017fa091a67e4ba55dfafe804fb3ded8121b41d4ef06186d34a377752ad88928afd148008615f140748a4584f120f61ad22ba1cde9dab40abab5ea7547e86bea983466979ec37ab74435ef333d212470387b73c719de83adb15e13b7a28c71861e9f86c283198a684fbad5ae884ea69693e603112beb81b0d9560ce61164c5164ba40317d391df57ed9c99e0c856ad31cb6f5ab53da4235d7601ff75c1f9adb28dccd86c7ac29489c758d4dc582a27f055544b6dd24e25dc8fa10d90d9a4559385fd8a428c00f2582296851bfba398b7e521a321b6b75fc4b298f4a29910fc4d7caf9a61de2b3611c1037414dc54d22a53a0d370d6973b92a96f73e85833d688df4b553fe602428b007056c62ca24e254a12096f69ecfa03909175c658a67de9e869bea2d184c3ff57dc71418f0a9f7d803c1c5405fc9c2a0ca8f21a00b37865248e91531e1dac916db68ecff03d3fc0b923748b07c565ff659ed6189a349dab52352b5683b04bdd388ec3b88423f0735370f6945310ceca2e6f439abcce22afde8e20c32a1192c0cfa152b47feefbeaaf1fa69c7460f4e8e1f067672ca44d47b90b4baa96155ccf8048ed21f5fee956d3bb3158c98114644c06642f630a351c81e9a098e2e3fdc18d775a5c50bd650a656fee81ef6b4eb1007b4e2f65b33d7240e84ef37297339bc4681f6ad4b719a53695f2168812598835e4bbae249dbd3c112a87861ac66f1d12fc92096e5bf29534a2037ada7c4a204a0d115c853d6742a71ca1a1d93168d8e582c6c0301607d0a7149bf875ce03269c346b8e6926287a0f16a5f8d8548f3d9bad248f518e5bc2134bd0afe98661472c87a9ab6ccb1266d7443d60e3a4d352894cd6a2630fb6771ab6860e30a068cd194e15919855df75b2c366ab3ba6d2552ad197f424b55b5ec5b139fd84d24ab51656414f4d1651949be3d17b0aa2c63e1ae6fcf0b0ac44d7b798936e42b8ca0cdcbf574c2112465e669d7ea18673d04901f8a13001a3a61c5566b5d007a43d4054bc6fa0439a1d18ad3e5443d85702f36937e290b3a2bb719a11c61ed566387f5a3eb4bb14c9adb80fe91f4d71ab36585a6fbe06ffd2e6ea5bf6742fc4979342670e27bcf626585e5cc2d2e25669e6d5930444f66aa61c6e287452d2d38e147564a43b49534661fa00e88a051ea55b77a8d88310c0a23b4d69629e9abfcfd9fbce08744e19f5673efdcd3558108c3ed51bbe528d3bda0ac9959275488e5a18fa13ccd91fe3a30d46e252f9142fc9d6cc14d997e2020eadbca480277366d39142203aa3c1beebe1213ca0256592e853a4573a45acf4fa95a26cbfdf79017b928c6e72736ffcfaf3966f1bc779b257a3b2fa28a851bc509f5d8c4120403608508c4e07b44c091618ca9768a6800914b93f9843f43389a6ec7054a068c5711aa11e6ace08bb8710efbe4a3ea8475191c803e4245a076d4117a81b4cc9c739f364015f7e1f23cfd7a1bf6982866b43b56a2083e9e2ef61377cf9e3de5fdf88e24d91b3083444f35c53247566efd5483376a6e175c91d2286b6eb5a70160a10b4b0fa135a79e68f2e10594ff92123b14fdd15180c3f74d15968c3bfcf82af416855bf8d5c86b20cdba8d02a6e4e2fc8e87fd5a26149376cb07cf1561e96f99d9e0880ec94f10cf0cd6d5529cac3761e4b98d56629d67d240d0c5b3abaee252af9067c97c64bb628be36e5dca224e9541966df8941975500f9ead88ac2d1b8caf20fff0ba720bc87c548540661a2e3f7f2c5a149deb0f17a8749ecdaa605510556f658140a673382eb4e94c7fcf81bbf46be8cf151007d8b426a2cca9bfa5070d12c589c53d091d89142fb1f27b05dedfd7646f81d4b09b36de684e5898ed1fff6509c54a249cb49132994247cf565cd99328779da50ee7f7c4c71645758e707ce5d055417cb926bf7385809b861af69bbf9cec927d99a397d9b99d2a1da1f6290df9849af946873504d94ee58cd63fddbaf7c5dabf9ba60c28ca4e87b546f3ead994ae88e99da851cd5aaf65409733ad55ce2691057edb10fbd4b264237b9f4f96b0c4da9f24a9e2e5e3cfed0a8697cdc1e1b91840768ef50429fdb8624ab0bf880a59735150495a6a63c38bfced425d97ee0cf46fc8c0def1008126de9faa0332398a099f7811b272245e0603b5c881ba9e6e0fe59d93480382aaa9b0c1ce6c964295f02c8a0d9e7f80dc6b5e09abefbbced1ce64932409a1a9a3a40fcf2e46ad19c2d606da4073b239a3f8644ccd917bfc76617770dee45d66333d29c845b19d566ac691a14eb90a6e608a75a8e6ce84b755e79f8dcd05a57a9a399de5db115d8444399dc3ada00839bc45007dc3a743238cbbb88c9e468a81ffc740740551812753cc334bdec415d24a66a730eca396a3d547f2789e1aa9c36e3090224f0de00c29b37608e41c4c8f927f8d1726a0df5440c2acaf90ebe0b0e9fd73a86b1003194d6490c32684f66e4bb13d68cb3c176288b64c48ef5ffd917fb1e27e845d79209d36fdb6faa3eda5a61a125a19a61d04978b009b52ce4d19e12c8d5cef6162ee714e10a2c61fd6193abee1497077a670a39fcacf4fa800838e33ca8aad7c581690827303c5297c7e7548a4a65b4a7f080966ada75e279b9c6807059e3ee11f0973081a4b914ca220759ecbab5000494691a997ec03ef2b329f196a20bf7bfd308a12a6e661ac44638ba8fd14508c9b906ac735ff25d6abb263f514c4566378a8bc4063449c6515d546eeac6b526b34236f2c4165e5c613875fa76533bc8fad046d0452a151d0c21a0ba1c3cd06990df9c52289baa74b6a2ce0dc717b75ae7042ffb48c7caa7a3715a9186c1019aefe76e77c9f5d91675894043a075280b93161c1546c4e0449f71abe0c4962478cceb20f313ca273b7fa06022736b2be0fcc8d7631a646d9ce38614b293f9bf545dd531c5df85dcdd65f61b433463ffd2df848d20e1e4840110a511dbf17a0da2523a029b6f9888c580aa1e068222e8e9dddbf12c9711235bba565d38b0458acb1e2cc550f584d7cb20773f2bde0d48d31abfe784c6882f79bc52b9b7cded3270baf743e79b69a5f3ba98a626616956a6a197f8388a7b4c3dae85856572c1ea5091977201e8bcb5f854f634bc739da3a08a68bd4e3684ca7531b85a9535b53b0462614c976b2c26ba0ce0461e0e75eaeb25fbd208252434dcad22ec8850c9183bd3d60597b2711fd592c1025df1199281a43eb3c0ee1a3e7bf54ffa5a0a405751b5833a4ac6ee3b08d224efc4fdb982a9b5ffdf7ed03b464cc7f5a2721b34433c245efa2edd5e859de8dc85f8e65750513267557a0f572b89885cbb51db97e4e2d386e81d4b788f062bb6bb73fb8093033048ec4dcc22b8f2a7d588a8ea09806ddf102c0f56e05a0539aa09cb0c45fa2b9ab5a96b192cdc596c81644933ad33e5144b8571553242fa48c9176c96cbd48784b7e2940a5f04faee3f2cd344ca5e5945fb250b634d77eef8a8050285db5b3c1b7d1cf719207302fbf406326dbf3ecf483e04e5c032debf673c7b8791f4b32e2c6610d582ba289f59e1e1bf54e7e4364110e26cbd9eb1dc7841df601011da4ea2245d29f6a862665bc2e354ba4ce96c4cc2586cbd9f71151a1059193fc59767d5d2f85a340ea1dc40be8007600835576bef6c5ccac7379adf1a34a547784b5dd674d3aa225ac5a28496a145a9bd6f1ace277e93a04afb74875bc716fdb2ec7eb7a65ff90db1e62a2cc3ef770d48220cd614ddaf638164afd5735ae52a6ff8ac6b4aed88fef5af4fbc75db1acc961d4295e46cbb474bd29582dcc70c4d7b0ff09df164ec728d07f2ba18768f4a3e46592f20c00e0901ea15400683f6a50f03de67067fe8c6a2c61705d734ada86fdace75c6e1d3cc903c6a89748107aa0b4d884855e24cdcca59e4672bcc1b799c3dec714f6dfb61dd93152b83562b5372dddfb505fe7c510add590c37680962eea66d8d7f0718ba31dce61ff03adf9fd67cd1a5a19eb1c7795bdf4cc91c00a8c133fe6b49254939bbca7550234ef6da54a9fcc771389de472863601a211a222a672cf9904265ce451ba03c5c37e88b5f13aa1fa6629d0794262a281cd3cc84fa6398b5c599afa82bbca4a4bf4db14f38249a443e1e2388589d242c2c1d02d8bb553d9d318ca752153478873b73ec8cd7f33719acd145cae390833d8fb858b2bb3936baaf6a3c92ac6d57e8a26fb3092e41358ef20facd172955ae20419cf58205ac92ade0e9661b0952ef043805cdb57ce528b50af73185f5526a02e99a96be07e593ac8555029f0f4ee42b6d1ff475db716ff25f1049fa0bf83309df70d6c71cca620d6c881cb8703fdda67c45611b6ea5019074f2dbacd5feb29dbe9643f2309f224cae28ba5f411f49741bcd0b8f9dbac490479996050870f9448cfa6a7ec1ee45eeb1fd9b455df9429bddef26bf4663481414eaf0e9eeb797b4bc4281b5a4cb1ba8a25e87630bae732b818f2b0c67c4e8373baa07670ef3910c0815f566fb6c97f12025eccb2ab366f4d51c74b52759003b9de5e2b4ce7d5a8bab475dab437eea57b690700553ac22633231897b3e1dbd530406158410878d9aec9f50345abb1ae39f877bf1134c97d4ae65f47d81e3ce57498ceea76c9094a0f523f5bab49ee0c49d2edbed20d56e636a8616d36ae6f01ad597c70364d332f9597b512ad248d6027bf077fb2b2f1947cace7c8b8f2f606c1cb8e4845cc4ff04a70daffc2578c668b4444f196fa8151c3805dfec9a8130cc33cd554ea57a1c0a10638c352b1a0c5789316fc3f76127cb10cfef883e6d89a00ea28c9ff03de2e9de1a1911532abdde21f92f05bfb2869526197d4f87533812e49400fb572928b137a9bc9c469104dc0d4188e72e28c2ff6cd409e030389352d7c9f20ebd0154906691859fc5840431f5e5268cce72fa586d784b200368585785ea5da10e5f30782ef32c9e2a697c42219119a5913fc87a85119e79db25b1f82ae2fcdcb86881e5aacbcaff17de7c5969659162b832ef197581e6f5e29abe5c8e07d317deb341f4716802251729dc61b319ea0a7fe2b0b04eda9a31e0e541d4120059e73d77c0a2896cb98b8839e31672bb9b7c53c81284cd037eefd130afc424e98119115fdb7835e03d6d37a65110bd2b0e4e8567019db1f05598aa4233795aa217de71cad549b1255c2cd0c7fd5ea27a1b24bbf07b77552b841eb02aca88e15f66926972a879dbbfc64f8c3012d175984d4fce0f8b28d8381a4bd049b3a0a17b0f1a2a698d7388b13c9bc38b388bcd6ee177e4150843a84abf9f0cd28bad9179e344b947ab7368dab6a234fb7c9251c33803d886f126c294af85c3dd3eefb664e19d5f77102320788ec3bcf921a15a58c5f00b2349ff06b699300a01e54b1473f472e7dc7a1b447fa6c376946870404ac2e32c6342bd19d1ed75043553e826fa1c9378654e2d60b950504a1017c99828e8d2f55527690c47c43516eafd6dac0f659562731d258e0ca2c1e02d346187ff9cec7359879d1a7878e53fd90a8b5b1bbc58438d0b4ea2ea1f40434dce1eae9b4be4f56d6422ff7cb58beca6cfd8b9543516ca467a34cf1e52b024d053cbcba759804090e25c409b3d2586feed82344033291705d023d6ba4b761089fd757230985427e7b9b359fe7b2458742764cccc906b734b0c144d9d126e24a218d45d1405af2dee06267a57c965123fabb9e0645c1851d80aeeb8281c2854b6b0983285d14889490baf293662d8c1d28a786e7f046b18d6ff4a7f2c96e26c511bab78c8dfd2374f603aaa9e2865b3054324e079676a689326d39fddf6698e74937276783268778721a6b48e37c35b79a9923a61a9c65b7b58c1ea643e71bb8c62fdf3c147a9e69da0d4168417dd38e7fec9c6dfedf5ff6d5b17935464d4848db7bef2db79452a6940241083b083e08a752e9543a9d4ea7d3e9642a9d4ca6d3974a9fcaa42a954a5f2a9d4aa7d26b5fd23a4dd34aa6130a757a93e953a154a6d3a33e95c9f426d3c954f2f89e4a232ebe784dfcd3e9743a9db8d3e9a49d4a27d3e9f41bc79d4ea7d3e9bbcb3979a7274d2c1e3f7ffb9ecb7727ae642a6d9dc985741a8d4c25ad64fa920b45d1fad868e4f2495686327d3aa73f7de974327db5e44907edd7719b96558cceefd42e460001055d98cb404049003161b59ac786f5d20eca4e60634799c2d90e56c7996530af16d9f8b2cbd1e6176da49e8efc14f63adad38ff5e30f807132ec6a73669e0c7dbdd9e96c9ea32492e5dcc24cd0929c9c1863f1b139e59cf285a67cfa215701fad12b108ac9a79e27435ff9d148e5ff185615d953c58f0fdef954153f20e09d1f78e52de285320622acd91d9b233048ad832f0f5dbe445ed3358641d439fce397e34dd43a3a7a4d7499333f6699da039df4b3dcd910bcf49b6864c378e7641daea473c4d7c51e7bf95f58ebe8eb280ec67725da73ae243e07f24a661fdf560e872fc7edeb16cbc4af3d58fa937da475ab55e363540878e5774048577e4d149b631cd5cadb901507e30329b9f6518f7a8b42b2e3f2d6e5ad8db7bf55ae4e2d5c12a64a4ae0ac47976c1b77392e2f07e38737aefdb0746d16fbcd36330bc7c4b7f60b858017f573a8ab80fde695498485d5914a1c943bdfa82fd2d7564179528927771cfc2ad6e31cc950b27acccba0fda2094e58acc8c1f82e1f96c5c1205e836a81715c3efee6e2f5c580d64dc03e0af5a95c5c54a80c857a140a4552c2da47f565b60952ad094ed8f97aec8565c18a18c7c6c7df6c787db1341827867ed56e02f65d5c3e950d1b2a970f3fbe8d4fe5f20101afcbbb7c3e1c8c2ecfc35d3e151c8c7c2d2abef4cd72519f72f0458a457d884a01f5bd3818031bfe8dd67af40796f181659cd88ef32a593685faf03f04af656d1d274f5ee8f7f4138bdb488f217de49357c27367dd8657da4b96d7a03ebe4c625ac302b9509f3df58171fc462a778befe2ade060fc12bcee58d186579ccb1782a88f352fea0b827a970fa90fd4076943d2771bec55c227590e461b181616f5e9d847bd4b8fbecc322ebf592ee5607c1badfd42219de5d66f17a26bdfc83da2e4864776ae8de1c845bdf5c24805f52e5e0c7d51df5eca4154f4e1f65faeb5f6ed4bef72ec8cf5f8a246f65d505e7590f485dc25bd75d0dfe485a91bce2ca1bde1cc92c3a420cd6385d34ad854b26efce985a890fa70637c94bf780d57964bbb8c319fb7c973e2c09162aecc8cc3fffa53b1f94b9752477e0ca5fbc72f638c5274e9d3ff28b45cfa3014476c1f853ab8069e459a48bf8aaf4b266c283bc651fdf0afaf85dc734f5f7225c6e99ebebf7c31f4f5b757f34e185dffd1e8fed5bc0704e0fa07200077f3d696665dcdeb1cdccc53fd70c0f5778003eec63d220f672e36f6add660e866df3932fec2229d7d17e9dbdf64e757fed9a753bf3feb80bc131134c1be490dfed448948f793b3a56f2a9b723b392efde8e6a3501edb36f48f63ad9f3e56e02dad7c4bf23f37392bd131134d9d1b1f26f52c38e6ae5bf23b3f2cf3e9dfabd740efe18e2962d376c23f1ab2ce493841aa85ca9b28693957f1c91c423d4dd06180f0cbbfc189680dbfcfc9614a5983e96bc5ed5ea524652b749b9b5e94bbd2279a4b7616665bff42d042fa0871510760aaea3c0829f233aebb97d3bf26018126360e81fa956307de94ddf904fd56fbfaf475fb3bad4479ec8f325f909b8dd507468dc39ea8708b88d13badcfe00b04d90b761c28975bc605947f6fd26c699efe218be394f04710cdfb07602b873681f24da449e175a870addf76d3146273a87bfb591c57365c451bdfe3a87fff460b805c5e3dbac681359313af10d058606380ccbb8c7320fe5c464b47d464c526a60c6cac8118e869593f847261048a916ac6c98abeed38088507c616be0031f8e9b738e2c1a96e3ed2e07b563b907fdf20764b85c2e97cb6504015056468e2c6045ff080056f3c31eaab285092056468e704b6cb1a21f151c56f373d23f33d341f20b5f72ad28ebb244535e529ff21abe8ec5e56af6a20a0e621c7a536078a185cb8ae5f679d7bbde1572f38063aa08227561fb0b7b27f599eb0813304e8f103c703d70b1151f496177294d504273d3cd986591a399429252d61a3559e72629267dd346ff18f67493a35935cc5f85202bdcece0ba7fafd95efbec57e070f4d0f8ecf88972bb26d54b9670502ae6bd380c55710ea7bff1c03c45e99cd1a33b1cbc91923738ae3f2643a5914101314e4ae2810d6fe84dcb15c4b2dedcb4b8e8262282010622221888886ad71a030c432aa7c13330e907367e449c1396895e886068bac3969958abb5a9d4ffcdeb06d46635d23f3af871b23a6269906595bd111c52ac8e30609515154ddf89364d8b7cb239e5ef70d07530807384dd73e3850dbbc8c793f01aeda9a49acd3effeacd4d675dc432feed6a1f96f1f7f771c9215462f453c577962c7210f4182537a43b20f4611cfc921176e2008bc0229796fe79fba371d03f67e6a65d4545455d54e4e3e313633c519959ad339352ce39b2f98abdfbb6d5ee06f376702c2369ea8e8462ed09789490ae991919245b3c22dd91a6c518c4cc328d643dd5b6d9be4e70ad94a77be6ac5ba1f4a6cf88b782b5bf994e264fb502ea4d8ffa2291aadfb482cb9fdee5f4a9fa517dfa93c97918a7bf6489cc50f684b487ebaf55aee4f1cad6ba653df25394ee2d635767cd11611f046bad60adfe3f98abb0ae4bbdc8342debac3b9be9692a7e94f0f1f1f1f1f1f1f1713fc27db0393d891f1b4fc241ff81e22dcf8f609b7eb1cbe0badb00acc2d1f0df72c30ed757a07dd8adec0b6dcac77fa2fba4b2d8b05b2f28f76503a5c46a29322cc902509644a05fed3e3e4b668cd37d6008e382d1256821010a9bf173245f3f23f5b38fc1140f2a23d3e83432e6fd4c9f686cf14727b07f438b61758b58c422a613bb2ff63cfcf2471dfa7db9cba15fc4d841686c0c33643dac5ae67c9901dc1000a1cbf5477d5c73b08c951c73ba7b39cd2e2f7729d412169663f82b33e7b8f765824d030e760b0ef69bb458264cbc2664a1560f6d8d7ef4a5fcbb3db505a95f10205487a9dc664abfca4f9f7e21fd42d4e580783af45301e9b04ff5a3fbf958f7854276dced0be9d79fbf79d9531e51a32921d8908552ad01175e80c16bb02f05be944e15fd2ea74a3768a115fd13ba9d21e17a92e4869f031cdc7ebe8f822797a1b82c858757a7866cef7c36d6b0e1372191223f8fc8de7c9f31356431edb7a75de7e0a571c038dbf7d24bb04c0c6cd8ac6e18624cd784275ce77a1d1b7d281b178681e6f267fc750097bfe3beef84eafd70fb318f7a3797c87e7fe5eee62ffbd9f8ad0e2ffdeef47938fd38a666b0323e0fe7160f07fb9f47736a7e1e5f3924c4c6ed8515c6061bce6c34ed91bb712f6266666776e658598671207290674a4ab0fc42ed0c1b562942b46e11bfed7dc6c630dccc2898128b2f299573ce8949292526e99435dab8cbf8d7e78c524a19b98e71cac9453333af419a0ed3ef6183ef1e18fe6d9f317a1e39f9c52f62bec73d7f93f9867a16e535fdc9cfcafefa711d16a1d6433928259df476cba8c5aac618fe81fd2dfa672b59b11cd3ffddfef5b774e8819412d00073f9978c6096c1263905e9de5e5cb12f2f2f2f2fb2d697088614f15aeb77e360ad414db2ecb33332067ebdd7a4766e38dab99c83333333296b53a97f10143273634a9bc2a60004851b3f6cce0899b943242b48b41972f9f5a2e2041913263332264c66cc99c217357e2e658d0f24f585c90c960e358c1a4668e4eac49fa1bc61ccbc227eb1af3208406b3ca96140a1482ef6536eded8c5eacbaa7dd564f5b08f9e75504a1f6c0c1332cce368927dadd606c1b0f911935cabb59c771390777e10c79e7a3af153f9608c7e126c917965e84b5ff2f0c979f45716836dc2e0c21a36e42118e49c1f117985ccb4a4f41aac3dc6178f39c3c6f81b4a8c389483e4d6ef6060b7e7bec3205747be90995bc1992b5f4a213330f4450afb2f43ad7a2714161957947c70453823a360f143b2583238911cfd455257012cd3b1e717a91705f9a1c0e09d3e9bb2cb66398a21def9cdb04c08faceeb7f43cb1d6766e215354c2736eb9c18ad5ee3778ced4c1963c6a8fc58892d22c13e9334c5e100ae7cfe7f8afdc03e86de6b1b57802a00b6a9ef9f3c807c3da76e60b403d201ef312e523a3ffe6c7981d19634c668d3f25dc621226f32ce482733cca07cae6ceb87d518b1483bde8c08cbf16e33ca2980702073323b11b65900c7dca0999999a1711be9331c17cef80bcc14030847024bd959125abdd3fe2dbbbbbbf2c0cdb263c78e61fb7085c47e21f3b67b748fdededdddedefcd74777777b3d39e2d3bb677777ff3f030373737b7b412d4809770f3441b0f708c3f181b101ef8e1fabb134ec37b7b0248916eeeeeee9df65e88d70517a24df3788cfff30c81277ce923d23fd8aebf253e6cdc3a22cf14455c918473f1e4661ce39f555be3673de5e0c6836d1e58c6bf7ef374e5016f4b29bf79c8b2d60c367e868951c628d9f3ab010d700af1d2f0608934cdf500cbb07b806d328ee9e72c2b956e789e7b335fadfc0efe608954a0889078d9c11758a609f62e441bece36a2df7ffc743eccc1eff05fe7e1718275e8e43dda110e6863cc4cdf304d0bcfece2bb8d3cb587a9c9ffdfc4c4ecd93b781648f6554f3b02d5bb668e92434d9f9ce9e8570d84b0de3b49c263bbfdabe23dcca89ffec7ab8a79a3f55f3e795d10c0ee3382f7bcc93d5ab52304faab0e7cfb09f97fbcac9d05ec7bc1ab91b5bd890bbb39befbf615d0f135814fb2ee71cf61ca7a2afa9e80764662a969492809c528a3dfdc2fefe74b04f853d7d15f6019997febcf4ab3390b2440973fbbb3f92eb40c0ebefcd04941284d0652941b86e58a5f4a0e5d6254edcbf2c650993bb45d06be8ff96382367c26f51fdf0c7ea4b8971939b18f6725280aff7f0c77e7afef4534df932ead0492c4b09424b1044776baee74f8f1d2445b1ac9a98a79a0f5e6c763db6e9618ff5b78a3e3f53feecc33cd5244561e7f394e1032192dbdd8f0ad44f877e2afaf3b14f459f1f8c514a107ffb26c619d7ad97bb766931a184493169c4ce4d421525704190160b14a4867ff5bf0c14c4c5c52e03055191549c86206e777faa07272841100d7207053428428c1eae3c01c40a014fd2607d4184210cfd400638dc7eeee7feda9fea41c9097b19488a24a2cb201d54b0b3621df030031f7005ab02c860b535173d156fd1aa8168c5568850f25aa9e4b30f789c08ad38c8861bbc56eea9e457801c560590410f82e0829e957b0fc8b2da1ac6c1f6dc07268858abc8051865f060363039c10e6a0d482882956111d40214a0b0c455b4f2e8a1608232922061e55e690568ac368e8b5e02887062488c957ba5a023acb66e861b84465cf4ba25c61416898b9eab808b2d5a2bf70a90c36ab342503154e2a287c20f48bc3613173da6e207670caddc7b8096150e88d004cfca3d70052be9f5dd505cf4ba0b211fa0acdce32847ac361b251ba7e6810c6840b472af85105a21e923ee928626aa503f01e472dd27dc469358c26520178f14c01853fb82d22e30d31475f444266da0957c36294ba4280192d23529235eee6374ad0840fcca2125fcef13718d0ccb3d54c390d6dc33dfc0c6a7f335cf324863ec8dc14886816e9364b69628628922ae0fc1b0f6f3a4e7faef8880d7e0b8be0413294c78aeff0a9e55ccb1bed8a7d017235dece31139bb818df14a8967ba4f5cfad3e9743a9d4aa53f993453e974fa52e94fa53f99fe64fa93e94fa83f995c4e2753e963eac63d9d4ea7532975763ffefad0b00c9575d656cbd91b2cf6268ee3c7d13ae2f3a3522f9d17c4f3116360e0c23ed20cac0f779d92588a09c112116f94bfe3ba7ce444158238e8e3c4edf01ac94591a999f689518867b3432c168b876a6183ceceb0582c9eb8c50ca3aa05d0d551afc889aaf3add04b88885447e163bdd6941bc2fc0d7160114510152caedcf89f0598c5ebc6e72a63ccb8c59a56b149bef2393e501528d7bacf58994fdf3d9df9a97c70d857027c31ffc2f93234f5fce79780e7d6c99d4c816ff71c8f3e7ccfea334e66439fad38f5e2158fa95cb04cfd50003aa2169ca33e85e256eaba95da80632af79bbd410a1754e1c1e20c23d4a74960fee1561d6ec56ab85d30ad923a821d4308f60b6bb531a8156de857a65930abc4d6a7455e7304d621034563ced92161b1cf889315620cfd8c604f90c1046b857d35c6d4efef287c582b5ed110b76c5939f10f6bc671753958a9d72b174fb50235c22da215fd54f36dbceb5617d5fcb0b7f14d97cf48df00041a785490f91c21721c854b8a1cac8c1ce166583921fd11ac861e564eb46f31d7c77ab022bca61485d0b0722bad726b48a9c058d8925bb19da148f42abaf523178cfa307e716b14231ae1d63f8dd1c92cf268503a34ece9c3e8b231454d4f1ffb26b7c58e6e7dea04e3ccaf4fb3784de9ebd397d7d8af4f9f609b49b4838bc694206c092d8a15f3c17a6e7d8ce7d68ab1eed7e74889ee0c62993aabe098fa750ea171a716b79ae6cf9c443fb7fec6830d6910b7d6a74130ce12b699e198fa3da32fb43eb7d61a97c498fa61aa085f58eb0db6bbe1772d604f5b31a63e772cd0a750624c7d1b84b68dbb31c5fa666fb0dd5560244d8fc3c1faeec590025fd0c1fa3f46dfdb1c6cbffc826e9d52faaa0f5d0af68b3cde76b5cb1dbb2ecbc1fa3cbc1485ad7ff2c206a97644a4ef90fad58e3ebe9127dacc3a2b85c232f5234fb489421e53bf565beb28237d71c8c1faa32f8c4251c8c1fa5a162be435d9d7d1d751966946b03b576ef5a215076b146299fa144a14baf569add65228f34adf98623b8608533f9dca1300256d5976d783be7cd9d39b62fbd93ff3aa1776ac14e85b3fa735ec9ff3a91d62ca5aad95cf2de71c94d2dbca54aad2af2eed5dc2317c678f2a3dd4867bfc81bd0185e3ad18d8ebcadfe64feb989f07758e19304efcdc8a1bec34b12ebfddb0b0f1798765e4fc429645fe53833c28c6c8af75669fbf628c7c8c8c2ba3e78283f5d752e4a0a474ce183fa9c541f993d5e16063914f96d7b00cf2a068238b6451d095b2087b21b155c931c61823739cf264858d1ca3d7b0e210cfcbce19a6e86ca509be7e9415d6bfd40279bf94122b7da8c2e2f721786ebfe454d84626b08ce3f4fbdfb3cf304fb502f65933a9a4eac1403f422a162af6f579a5624123c18a819420f2cefdfdc7f577ff74e6a7fa313f19fceac467a01f217fb9d163202588ae7b435e542c7024d0aaa76281aeb86b61052c7b8c7e2d68dad34fb502a5dce73f39c498baa5620cafb055a90b4f31772b95f2a11983fa13ba0e527cfe570b338371fa731db08c3fe92b128c133f296e4b34ac248a9587652a0f55a2715d88ebdfd82bc6f8773a081161421811cbd0e7e1d80b2b6a1d48606ab08d4fc1313ead237eeeea1cfe9a36337380030840002ad5a91563aad8940d98d0f547b92c11f68af453927543107bd589bd30faf990bba4c0865589d775c1a1fe6056fa7180ee524a296514829a31edbc4868d89b9b68437a24abee277937b7f32c0eb6c3c16eda77eab5d82c0efacb94c34b16b94d7db1582c1e563915f34a377b2772b0a55cc7e2573e1f2ab21f59fdf626b26ec7ee945830dadc784cbf101e5e13f6e571bd6a387587832700c13f1eda67ae697d31e7117b341afcf890fab9ca6d22c86274e711a3f61971b0bf908bacc86205966f4d6982c98d5fd1cc15af1bc6a22b889298906019c88a27378c4558b2dc7ebeb1c86b18a88ad6ed8f5abc26c9c636890d2396db1fb1b80dc7138c608914b137aa9106e7e82fe286cca2c284b978b3a7b431ccbb142257bb4f82cd9e1dcc6c0acce08dd9d7cfbec7c1d62ff477ce480a58bcc6bf66c52c5ea37db6e3b13458eebb1d2cc76803a80708fc753712f0906eb425b021174111bafed45ff3cf5a1688abeef356d4bc30f52d21fe92cf7934431c642aaf5b74fbfb321015a2db6fa43f16557f110941dfec23a27d0fd2dd24906d1fb34c96653dfc69483f21feba929fbb7caa62432417c9e52e8767903ca3356ab53615d280340b6016bac6004dc338910004b8214d152a9806f740cbd82d3dc036cc6070199cc6cf40a46730a73e5d7a7420dc85c44bf4820b43432fb820bbbdbdbdab0b7a605d9ccb52501025cbbe386fe2f388b5ca186b8a0a1b72cb4728e4e6ca9ffe2a305fcce5d68f21ead62f8c426e2e7d8af25b23ea9fe5d71aa25808f1182333c77843e3e0cccd0c8dbb0e7dffada3176ef14321489e805e91387123122837227972430ddcf89456075b5e2cd91218d1c6305485cdb39a3d8661d867417c14616157bf94d203968b49e161e8ce5747cccbbebd5ae77c6cd6c762e80f3bcb62f6e9d0c79e874feda7f65be5a8c7d787d7681f447befe8635f421af65daf1a6eb84d6beafbd30e08f6b4c88ddf75f7a3fb543ffabbefbe901fc94572e5173e8f48c322570877b1fa6353fd883fa91701073d553f76354fd559e906f6fd5f9503c30ef1e7f97d3308e1d6cbd315810512300b2460fb24ca0ee959587ff6f67eefe7c9fe21f743b4bb632fdd3d9e92e38e65139b22f88638d84f4ac38a00f376799148920de823609b1f55944a2f1f2cd3606b31fddd11f63524dad8b71fa9d691b5f526c654d0c1ce2a92275707fb90a75cedb5f7ea69cf5ea6fd867961873ce566cf436a8d9ba6659e1432b1b886bc5caff67e69be55e159e2030f11f619c1be7e95b3af016cc31c13a66e64da37c4bf602eaee0295e1eb36408cbf8f3cf79834db0acf59888c051bda454aa2e67be8a065345eb63aae0f74affdcda3d1702df89c7cb69c42c335f7ed5016083fa52d6547705670f77d975fb5bce3178b831a4e0c87841895bf245c3c8f294318451aba067886628e1627798dc56127dbc46d6d8ef8f3fa50f2394fed8cae28318e58ad798be3f12bd6296230c11b5f02c61e235a81e970fa54f12b75ffe8c715b3e91aedb2f832415afb1f1fd52480ec92bb75f129d11038965b26effdcf11a255e93fafec9e3373e9c4b2693db5fb9c887789644570c62ed4009e5ebcaa22314dd1b373ed5e5dc487d095d4eaa842318714b781b5d4e0936dea5cbb1e192258bebf2a82ec7a5a2fed4e5a0e4024e3b38e1b8a79311aadc53161ceec90847dcd39bba9cd39bbed4e5984a6644b9a5b75d4ec93ea9cbb1a4e732b2341077f45d973392dced50b77bd9bd8670bb3270f0e221d55490c14405800e2ff0a187b5d26c66c50d5f6e0673b36c0c24dcac08578c81c557898dc1840158b2b8e9b95464706e0c430d31a46021220c282e287bee8db6d1836abfdfa696c8384e094a6f6ff1c1e0b89288c995f22b511657be95c1959f7a30aeb8f2c1307eae7cdbe5c89928dd44b0e2ca97d28509c90d214a25c2922b7f649128512205af2e8cd0a18923902c7103133596686dc122484ace01688b181c0ccb989a709518136ef872050b212471fded0c4340e2a59452ce80c3b586c5952fceb8fe9bad81e42c5038377c09c209ae7c298320842bdf7ee1c4951f03d681172b90f162ca959f591b6ea0c37b4eac44432bb8fe98e5620a10aeb8fe330731defe9aabe5ca2be55b20a4e04ac9812040010445875613583690430e4d3c5163881e94aca494524a89c30c2ed86060e485f11ad912e8074da8a4dcf0da21098a6f03ba580335a5255d7bae21601bed6b251f0d57aa71e56f7eda628db0aaabf2a8f21863bf5796915fc608c5b23bad44be8c2fb5afcf82a69a5f5f455968d57cedeb63bf427dec33e284be11ecebd32f7bed91acdaaba918e3656c33e4653624caa75212f1f9d27d8b2e8365a47ffd92b1159d0261c3422135fbc22b633861cb96352e9d7243244f2efd40a0539f3e773d6a942ba59438d80607c7361cc7c8aef136e378f5e8cbaf66cfc341960c4a79e77f526291eed1a9103637363c82847e5a3f2697163f465c97e1e3e63a8fa8455b71f5cc9f45308e7dff1f6c63638c0ff985376ecd96f0ecb0b828e827e8e7bdea0a923ea20d2f08ea2296a92206057d414139aebf2bfb3ac8e5c33583b21acc9018e03f13926e90b80a92f497b55dd0c3b2941eacdcc89179e39c898d0b1d14b43dcfb08950df292b994a377880818534bfde3a628c729971b0ca2b283f3e2afb7c49bf79d2c1fe0e0ad241a39352e2af7696ec60604b6ffac87926cf478c71bf7962353a25e5cbc922eeeb2ca4346c51bf3a8bd7705d0e47398ea7dc90fb84f094bb7d2112f95a4a4a9ad6d19c438635d77f02f2eba1196cd837461c8c22e428214fb9748b42780a950e7210cbeb25fb255f2f9748486e9a015500cbdc780c7d1438077d89016600d3bf611cac0c30bc80825641e3209d6119fa3cfc84041b7e3843baf42925a92c305f7e06e6cb0c484a4ff1e9db68136de6d3ef9f22368609bf6b6275e6c73fc22d70a6d62a23a59f4e5f40477efc186bac98ce7cf9feecf2e37c0bcc4639b1fc9d8f555dedb3e72f7eac4c61428d25a4b8b24ad25ad89748a03e5d3401050c50d005116274c1d3c58e952f6aad168bae6391ac48e18246569e6c435d9d3162f44310111b0f4b7af001c84a0eb58756d189c7f585cb0ead2a4c3d14b5762852a284029e1e12103b405cf0581f8a7a70b163b90ab4c5500a89c98329b25027d65e069ae28a3402d01456b058d465a0295c3db6102ae132900f7000da6207f609638dfceeb7fd0f3ee91cfe02b8575c927cb77a9cc7784d142fb22f20e4faef90698b13846c2803705d84f0b943512806b9aa130e4279d23ada069cc3bf0926aeff8d19eccb4ff454409860c3af9cc8e7ccf37825821b1c50aa93a2041b445c0f36ac2e3c3baca2ee06a81b041bd613161b68d8509aeecb3a29ddea2571c2f28bd4244eba497df6681832f957cc2884300b08ff728cccf2932cc3ae181485a2b06125ddeab948afa138e1513c664a53f1182b1ee357942401b53496eb36aad750621784b561afb497677a0947e0b041794cd36094d28020c7a7b9b9db6bda534c6a8f69da8de7a373d4fe4c7b3b31efc3146ad6ea9dc36ba80dc2d2e71ca435fbaa02922bbf2c72bfd65a0db62dde10c25229e927a5dc21a58c3753524a23299552a2a447893097dda9c7f8f10b0eca18638c314686227ab5a652eeed3796a6b447392956336d3365990b75e35260cc82855f036c63c363a8c7bd45e32d1cdeca6a4d936ef7b00cc705aba7521786304a79b45a93bb51fa17bc26b5c3d25c982d2500abf23ac5528900b5293a2526bb47f6f050f7744f4fcf89c4808bc2ed9ec88a2c99ffb24dad15fbc962c9aff5e29c6a2de1055bd89708022e7fdd52ca8f31fc8308bdfdf123a2f222f3b67cf7aaea8f52ca1ffdd1d24ba4c8bc1e6b54634ba5a494524a2ae987f4a794922636e831c688ddd0ecb8ecc302f19de39331fa88b56dec35ecaef2f76e4c8c52c6bfb1aabfd995f562775e7fb91da37fdce120c72d3686919362da864ad93021d22a5f602ebf5a60974e1b0205f36f2a9d522a6e9335bbb901c1199a1b2dbba92c0b629f25bd90ba54aae34626bc709bbc9991bab011b59084ed27b6851672b05a161625242b96753ffceabc702f5dce7c007072465a86065aa8009812a33f4f448f14abdad68d46244a29c5b46c52062ba5f36946dfc89d4f5fa31fabb0bd6c5d2aa57596db26b721816158f7e32f9665b5a2acc548256ee33624301ad01b26147308bff288ec7ef82d45295d26ee74ea7222f6f9680985952e367534e8cda3478a556de3461c89936f391c2f36cc99463331fa0c62db73bdd8f746bf312c53817be1ba546a1b7125eea34df73e5a47f41177b8cdcfd0dcccf8e0e90aa482a894ee95643d2ad58c20004052003314000028100a8784229148341a535579fb14800c7c8848805e9c89b32c887118860c328400430000006044606668c609677ac7176f81fc676626d1b276683773086dc1e34a4fb7b582be5414dbffd509478484ff0958acb33bed9f6c6409819daf9f590ea90d28a2599917fbfbb6eb88fde0526e01c10b10de25ab912243af98687c34b316430486e8ffb1dad0ec754a27b7a985f3eaf501a6315dae1a3e48f285e64842f90075751ca473ffe138857b375e16c2ceca38f8029a5f9e1035662ca1bf149c1106a899948e0e641c694b35f6962c42f1fe46af8c426461105b5973d9e83d6eb6437f5eff2a99c6407877f5135c26975d7f8421d10a662f2ebc57fcf1134510b148567434b329dd1721989050107816e31b5a54ba3ed3810c76d133440666cb43a0fd7421368ad0844c3bd81286468ae48894be7a43c2986d3a75d09671e29fd306cfc2b17e9736d27a0cc2e7d89604666a86f2828fbb0ec0053e6d06072664ef0f80cacd4a3c02684d6b3746e14c256e640a3700550796e603282812e60777c13031a0cc900cc876f1cc8665c5e651f7940d889a8ae7e1efcb3e77612199e6a181ba0e94b4b2073a6fefb287446ee28550199865af45a9f981b76eddd45a00fe75530fd4eb302adb5761f1336eddc1ab3ee51461ab570aebdbdb96507d7d63118154242afb0bc7e2d9f536732e1e7fafb4c5cdf8799cc5deb6b47cb6e50a003ef8d6fedb1ce4f3866ab05e099459285386d91a881ce87fd7e0950df78d7992595b6d3267d0374eb62b24a543948570181eee66ab09df682b29617f8b6cd7ef7bdcc7b04ed56e02448eb6489f64e0c88321990cbcbc367c2aa06cbf8b55a55e5528456e67b000670f3996755c9ab0aa37a6a61fd741b1a1cd08e78bbe684c05ed1f573512d2a2c5cb7011f76207adfe5d74bf1e1efc4cd16698f35cf39dc3aceb106b09eb0da3d54adc2b47618c79d1ce8b82747fdc4c17bf23373261577da2aa453aa8ee149d941931c558b5e23e31dc25be87932766d5434bd54ae65d23704ec51f8bbf29f22c65b3d902ce349edd0a4315c473e3f2632725a0024dbbe192d62779ad76fc1ded817249c8501ab7db40895f1fd2db0f22fcfac2e35e9785bcbd996a51dc71604448716fe11043320ac544d37b0498fc2f7deb4e644312738f2b4e945453f67d22ba7d6c7ff1c92b595537825a15e94bceef6161ec0da5b14c85d58a42a93d7f5118fe20cbaa1d70b501afcc30b34eba2f836e67b1394ac56ff60b7486311a4b844666621fcfa9d8585670a36f8655f17054edda5c61d2b38fc2d06d5d2983db5721d4c9d73b9db424b0551108241db90ccf29cc5533b75dba8318cee551dc695ea1be125f2bbbfcb5b60cb68babb86f825dc55016b47ed83fd47f76b5854d4d4f313a0dc5803197d697906d94e6ccecbe904032d75f78d4c24f35fd2641dc77f6fff312cfa0bb527296c8dfdca9ae890729062015cdf329a7d3493934f98a93be1cb4c2967d5965673876a0e04f4961c76b17676086f0232e9324af29aa6f0af8e351e0132365a8924f255958cf493cea73051d5dcce1d5b7a26075687bbc160a54d19a5d93c33f88b6b81de8a10e7b812cf298bcc83f5bb4c981fe1a2b33678d6c0a7a962949c73b062c5fd5fc53d9f5bddaaf1c3642e5a20032cb54c498302c754a889bc10b21b49ed890e32dc32a5eb5b3beb1449d4cc1de83574f0916c2809a778680f100b34c5d3f6235a2dd8dbe602c2d761c05bfb22cadcd5029c9a3eb8aa013014fbbae4e74b2ddeb2c3b5d763dd8863ccf3046a8bcc3603f211238d7aec53a0279a617325bbd10d2b3b5038eee9b60582473ff165ef1ab0b858859d4feb2abbd3a7d96495431e135175ed68b2283a78a97bf7cdc95a13003e8ff4803568e3afdd32ec47c8b6df8ba0ce3b8f2ca9fd6c2658474e1a6520c3fd61faad0642f30952c289eb4571c2e2f3d24a12867779becdc418b2408304ac85631178464246b5b1744635c3f00e67df77f4eda7fac59fb0069ce3e565c51e4268760528c35cbf8ac96f2aa83349435071a9b264ea58c7d3d3d9b3d4d6f03e9fd179c2d29ef029e7bb33d2d9b9c34d42195029f09d0e804ac6e624a1d60bb2b70ac4b79a5016f1be65283d783cc53ce51f400eac4db959408fa7b1449fcb113d6a0973e29ebb63b3349cfd02f3dc41659b254af46eba91ae4919ef6f0dfd5887a47885271e0b03189a67dc4b834c1d2de3f97e42b15ab6828715c93c0e99159e06f43754c4d5716281b8c63643eb3830171922b1305dd65eaecdd6da8cdaff78d466c02b11fc3437873e9190d9e3a83e221f95a740687458ca27e38365e2b53935bc761267140155522501c3008b33f0b0b27f37d4a7d759099288399d8aec165e89934406e9bccde0ad93413cdfcfe397ecd9d05f9749a9ab78499e97d6de3e5edec9ff7aee9c90952897fa5381be3dd49b3b2a0dfb130153e5799376f83da54d278ad5944d2cff0a545e99557b82245ca5caa0a2647e98474e5ff1cec2c230dd12151f72cd96110e5e244e793f2405f4c1b66634f98815ee4bcb7d5b3f0fba51b7557e9fe48530683a14fc5f357143a8cd2264a25eb328abacbb6edf755bb81daf4251ac15c5eac2cf95896207f76a9799ca7ef237152f5b9e809fb8c10f6aa553a68a53d6a0159a76b5858e8c915e973e835589a6edfbd3ff47048d47f033855711566ae826f1acb8cedb760a45f21f19750e79e3927a44360309af4feb9715321b2d4c2b35a30e639168adf14a30cde2313519e5b760853a36c1baa3750050aa24335f7d140592ce5afd2951055b782f59abde3066da9ea320159a2175c52507e8e87c6c4595cdb284da1f7799341353a62ccc3f2293e1a3691c9ab172b9542c7cd85c0e3d2bebce4983a9044c68154b7417a56b8026f79ad5d33f55a4377c8a76610dee50c99dcbcc29575bab106acc11f2bb2df1dec701ba8430477ee7d9042104f48e09a1ebf8a0397cb25249092d5f828c4e67fa8252a94a7cf363fdfdb2bac958f49cb35d25b697af0554569ed16545ab6a9b3977f3cf1e73e34c9f56edd1b32effd3adc20549f69d117a658f18823152f114df3e23ec1ea90620870c8c95917a61eff4413ffa3d06513417484fb2527ba0135e79d8684275f71f364ee41a1c32126c150ccbe4b67e503a7db2c0141b301a55c4c321b19704089f7dca0478245abd129eb428ec2b91f7719de3d916e7fb17a252b93a85b9aa787ee028ca442846a4ce65c4fa7897d8d463faf6fdb876a5d968cb33c16eb68aa5581147ed61bad02d7975d0e3a823d8da9d472967c4ba37618305f939ad12340640cef488fa42a242b98204eb6129e2d73c3427e882176fdf08e42ff095f1a6881044ebd57fac9604796859524c111e94ad7dabf34b91cc62d142e3a1642bc7bd7decb89bd4a7489e0d0333359f5d5797597aad183f49a0b355508f156a02d695a5b17727e5ec84865c57cc58b8229722e0a57c8496fd506d21274a3697d9459dc4dfc31cda2f0f2318120cfb44e975199ec4ef22449f41ebbad83b1d6699043230d4d495e5d2afcbe8d34d45450d873452dccd4219e6697beace1b0e5711f4e2ba03cb71b0dc5c18d7eed64056c1a416481e60462481e315139113ef519143510db0d60cc5bc61a314a21794b31bb063477a06d078caeb7242c947eb233220ad9bff6ca8ed25bd4c503cbd75435b310f1319f26031919cb8cdfb10252cf69c99eb286215b99651741039cb7665a9548b008a402ff4512cef939d2e6e8dc471e64f8e830f8000d6a82be51393dea5e341cdcfde64473779f73c7c458f7b2fc6d40fd2add24adf2d8789e9c420b520c0da46cd785b6071b95a37458869c64f8eded8f190c047a31c25362f74d057db3aed5e870780a0e781d81dbd585128f2024f53838f14284db005b0c4974fc25fc0701d149622713a6a883cdbfc011264162278512cf81f54113044450d9e17973fbc7b096ebb6356883b7424770106ee8885aad61873e9b723ed991bf2cb62db5018359457a3287c3e9f1f6747a3d44866c752d5e3f5ea2a7b58719d439f46b0bec04a317660681e4d85cf900468dfa04b840fdb03e060a6d1c9a32f9866dffb5a3458344ae762c0e29cb0b31ec0e2756f9e485720405b26983ea3c3003ce4b6f5f185911e65787bd88a74505ec19ee0f3a74a50e84f5c052fc56d83cedab0121d7b1424f2729092ff4c460f2da31d80c7d846b26376ac1abfb5fc01864a020cba7464df05c0dac4c6698c83b99a71d397ca83ec6d90673f641f48d1a2741868b81791e0874cb3a20ad01c901b8f5552860012f1465819078ff51df27b41de8f063ae260722f7400c9c6f90f65dc1e8c3747798eee270e95ac8bcd7442b4637ef1361cea795d0936f13ffdcd39b2fb4ace56c33ff4438ac1d7d209fcec728bda6d82a4fdccf6ad0ce81900cb9e5059c2777020dab654bd39ee38738c54534a16d7b4a437acf7da4ed7052e2a69956fb60f880946a7eca44ffa36dafb4a54ffadc6c3ba5279de77ea4ed702671a399567fb0e18385db6d0de94d1f2cdc0deb485bfa7c916bf63b30b69591e32bc79657496edacd14eac71733622afe70eddb33b5fa8b8865622d46f8ceb3aa31fb559dbe5190f808d33a818ae4bcfe4f59514e73cbcae02ac7d40010ca716d161ecad2904e5b4971c1509ac5fd49f958b4b02b371c271c4b7fc3c78ec77a3ead8620e6ba730d07fc1b412bae8f31c7cab2ead41c52e3a236e511d231da4f0c93540592bdb473b88697a6233a4a5e5e5cf6fe30fc4a4f21535ba66be802ee6090269190410c448063fb114984bb701603654b7bf7621225f3b2084e1b434f623c0d9e35ac91d50109d9e2f776bb59ca6c5ac647f5b8a10043789056904d660983275805f16463ba16abfd1ef00876e057cd334b500fd7f929fb7ed9f68b0a3f5217180b962293cd3f5e9498d954e7e19a4390f038269f900ef656daa9ec42410fdcb3d6ff27a003477e54920beb20133e7bad0829a4ce78c283b4ad44df027c9c1a0f9735d254452f593360140df17bc5736aa4166cf002fc16d94de2e041c8f456e4424b754d744ab4424cfcda7d0e64fc0f8d075a65cdd9e2f8fc9637e5201db2fb4b9516ce9e0a68c7a919bce440c781a222a291716cd77e9b57e17e377894e04329db77d503100b146608a72a100648d292276d139c353dc0d15127159541b473cd6ea76f160569508a0abb093fbed5a5c639daa6b20854a8fb58415c08a0d5e36e6a3e6c8a66335576e0b991c1740a08e83fea13ff4610634da7d82c965e1703ed167b2fcfc456706b1071a36061d3cec04d45827973cdc2d16915ae99b95956274217f8a55b24e2cb8d45cc9aa0a72e34878f22ff603083d9160941cd9d10cc9345d93845bbcdfccb1a3491528a999ebdc0a69b1d0a084cab95cf49d11c3d4d9504d82cf7d8dcdd822a70950fc81822c78522f99c37221b07f880e940ac5c99df4019cb8884a808055360851437dc8f96a62afd78f9a5e1223dfb6beed1b93211d9f9636ad2c1165ff9c0e94562f743a85ae7297d5c59d389319d844d8926240c89579b8530e462480f7ed16a87e9759de87e0f71fe57d295d9bc46afaecd137b242c1a52149f0a0c37bc6f8c5f6bf5b738c949f3bba25a4ca69901e0dc93421ded499d96c2babb7620cb2499f4976e8ba0f444137d798f223f76bdb86a48a274b5ee7d2329a425f6efc114b9ccef45f62c39333e75840acf414c63ea367457f080cbd374392911c88f5debe258a36627369b07b86303dc548073a334bd83030899a110bf2ae1e8af3af8356c47665dd9cc30cc7b3e6ad8312351162e964b28d712264d9420808855203a01917e73ca31a84c4d4c80ad170fec0f1b2bfa8ca2d18fb9e6608165595fd88fe59925d0fa2581a215a895b7c342300e1088cba84f733fb0f64c04d7d74234e602efd8d8b7b0b2b69a176060e4546894b9a4c32035d9d9919f6f20331eae0ba2d572b61fd044c5468a44c6eaf438dd975879dd05c42a0c808ccfe8e981c01a65f683977347c741e24874e42adc42fab3ad712598372f8ffcf3fa0a235f2bbaa0f6d67cfe52d2fae4f6beef28ca64947dfd428d8bceb81c35eac665c99ef75e8326b8cbd0eb45161b15694738ffeff247c161a3779e08138285cf411a5fd06550734ac55fd459329d1520d11167a971942176f9fb147f5121e114d61f3015e1f69541b036a3a50081ac081769c52f5668bb4b4a5a70380e5f0b80a493c06ad9facd280353dfb1016ba9a3ac3deef500ed6a44f1e89972b1de3533f6b3730465f395414506a46bed859215cb3286e90bd47b145506ba4cbe18a709e4ac35523bb8c57bb63d86834132724019e3fb165b9829728b478928696dc29befcb0a9aaaa2c185fa6a7e2e7e03e2fefc9f16c789631a2f6bb44321eff182f3ef13341459fd706b99a82d720a0d1ed755f31f5916a3ff29b5d5cf2a2b5de197a6a05ff2962daa0456298b1569e369b11d505a27a20129a9288c7cfb8f6358a6adea35f02716ddd43c22678825258ebc2cae776ed8ef5d3113ab48e10bd42431a6502cc47a90674db5539512e26b21a3b786e928605c3d667500b91ca50f8fc725c7ba7a00806c41b664e44cb9e7dbdbbf5799eb2393b25432d8a13cb214d93952455f5c70006b9dea772c98dd6190edcd3f22c1f134dd4cb92d7a0afdae66f86a00487b566971b81a1b2dd92001e1cce737794bdf92b1d22f069899233749a9fb6249f023cd6e06c92140e0f7d7a87026f8e5a4c47a3f8dcef5409c4f9a993074863936a7f0733736ff08588936e92958c17eac328a688279ed8fe26c8b1f5eecce26456b4d6bc786b347b1a2eb7fcdb33431e95e3c73d6041239b75bb3674a7383189b10358ee3de292220bd5f3c6c87696c5805b466e8a025fdd306b6d86f6b0d6c3a9b90fada505307a8f91a6dcec407c38039ab2e735354bc49d8f524698e33d16be200bf82d13db566415361b79e4db974adb33afc01d528c61e75f25d1d290d95db404874bc959e0471dac32fe80759ef4842e1ede519a2f232931f41d1f6a6f937224c988d21eea2f3612d386bc2d9739e3c921492dfa5305ee593bde20d11e41bda5de216b194a3d5890af23a11f9e4c967ef660302469889a609f5e339b05f4ced453188e9400a37d9cbb3067bbf61f9b795f6690a677a485890607cb696ff671a47db19c889dff0169bdcc5f6d5b7d737ce282b611953d9e4cca3e62931634d82da23ddf4fcd24e01821368caf192dedfc96be8eb4ea38e69035834cbecc0d965059f1055a119cde7b9f91400619c942189470b4a46f3cd9f12742427b514f4324f978860bb8f5a460f08e18be33568fc34c2b6052fc42025f8bf21a67b888c886690933de9f309f152c45064b27dacf70e63f582d17204f5d8cab597235181436f752bb1db9a80a0468b47592399ce7eba83ba49001fd1c254bce301850464b8857eeca338d129e3001205f25ce33c44f36a41ab9398c1a301385a3873d819d1594e736c3d344e605e54e53db8e385c3a9958ba0c9886e71441610f7d9fb658df60dbf3809799640cc17426379f707ee01a026a075d6b91a30596fc917d75bb047e906f7a439b7bf24032782c4fef584fb8e6df7a62ae34a8008297e1d5a86ca86bd043b9c36371c8a8480eb618be15d9125ec1e2552e033f9cb917ddda19e0c293e65c1d5acc07c8192163b23ec42dd3bae04da43682b7c46db1b7e4bd626a1bd85efe375bcd1fd519d0c21fdc963cfa061749ee8dd7ffdccfbc607c59d168784a6fa162bbc1437574ae30f2da78b184c31749bb4a8cc4efd4f99e16ebe597bc20a35d715fef25299160b03a66f633649731bd82456f774d6c615d8451da27672dfb24ad03d4e8508b66d9cd0adf096752af77a2a91319b3082116964f4f9ce8aa944d9176f2c91a4ff8ed1379a764d818e0118f09ca9e27ce2796ea39ae9f0e706759ea98204a12cf83b3175c6e83df692d44c8912837791811680e107dc2e536c8511745809c85e092380e99759eb33f732b2e9695600c1d35c845c2290efb79f0087a2fb7b0080a0e38603727231adcf83171d7052396b45c3fabad4da63afc7e3a48e370e0ed318eb932050ddc3af4aadcdf5c5c59596ec2b34fa638af622ac04d3913e75f6737a64e21b06afb4e1cdc2d630d1083573f07fa3b6dcc4bbae6b88196d49d0004c5c4c69cbad26b1fa183e4ab5f4d1773831b6148393c99d111f39789d3f8cfb3aa30a3bfcd49f9b78bb015b456499c339aa27f2290d1f1c58c423905f0e5f9f55e2e47364f83e130044792a1f5731431c4bbb8fc1c87e09eff9ee9845b685068497ea8e0993d8a58a8f6e560181823abf481e49710466bc10dc411be89b7c98dc33c4a1ba05fd5077360f047afc8d7094569e8aeb076ca3c0e36bef9899865f3d13bc6bc0d1715fe839fc55fd4b41c9648053bacd8f95a0ec840aa3fcc80570263d65dfc8d8d39f462393e477bcd5c40f2d6a433e7c78eefeb44dd4fe6ea6e0b26714a5f8808a79fd01a8cb4cae4c205b3dc9136606d6742492ec3536719b6db2b26aab62f4b48a2ed3ebec18dce6827ba92d4647f2933acd66da0947de1c13436b08e48795cc58d640a2ae1a70c78965edb46f5e4d7728f30c2dc979bc48435ca032c81e4adca65be85fee0965b7d3a55e84b2ce8a6f4e02ca991119ca3ff9fc24ec4f0d0a6b8dc2b433d63148dd9ceeba7e67bdc957692d9b20c838ecf6eecc77f5f20c13286814cde4ce7ce334a85ef61c64c0656b8f1ed8abccfaea6738b633c019fe5760824ba387983e9ea57443722b0f000539127cfd66ab30fd56b9898311b5152140a9642c894f7b65fc5f17273ef902dfa29d3d35713abde6bcb649ada09c545304693aa79fdff755056a603498333fd92d0fa3dc9e5fdba8cfc46272833a4cf80bb598c3788966fdb57cbb6fec4ab530af6f25dc531ef4a9af0763f1f737fe1afacdc0bd9a94078d1ca3a813058a521433c4c886b071188cdf9e528db36233a518ae99f73c640aa3437757a1b5f290c500ef83a8b18ae736ada2ce3c655a75ec75343a6c8e67d4a3b819318233bd457169d0e0f53a94e706c848fa663f1237f352b43e30a71a3b6947bbffe97eac0b678330b5ace1a27b1bd1199cb5dadb91be79a7385a09335e3b5906a0410b3af3c044ebe9ad32bf7b7dce041ebbfa64a4be763ebc138d5949ce92677cffb2aa05b62c90718fc34166e982cea4300603b7dbcd71d742ff7d012f3d230e2f5d8b36650f33873dec26d75237ec0588841004cf9974d03e0e6e7a8d04fa3cd35fce200f4d77221ec2e41255ba7b448995fe84860eb230bb85a66b9bb81e5d3cade9f460bf98b41c3f72634f3475755e7d827ca7f3dac50252b48c9d2739b21b6ebb6368b1ce0407d905831a240c6bd7d3cd70f1c502f5bd318c2b55f743278832deaa5d5ab2e8d16724b9664e0b693c7519734bb4fe13752759f911c8d7502404d88a0418e2ef6de7479da780d90e0e4ca75377352e3ae94e888e79dd1d35b3ba520f5d1c005485e4cbe454475c90d3ef98572e40f9c82918022b001fee83cf08a4b794499976b3a09a364cf02437f5cc47c4410bca856ccee04d203d9ffdb8a53f7e079dcb58dd1776509d7c0f8f236b894b50d6b75571ec8ce6356c308d07bcf98ab26cf43ac54b3cda08160d7234d79c408a0f28b28281276b58fe0e2109a9f35c011960ac6a326f6c720a68c9d95daa1929beb7f8bb8a44d7e142e64e3202723186a2e35a8066e62d20323dfb5009550ca74ca70d4b8798642089ed4c1ea9d6d1fe052f86350e0bff95024d8be587b1249e7d5b288522e52f71c60792350a90d93d3fd455dd2a8723b5866705b1066613f437fae2cbbad31c271a8f82422fb6220d0fe8c0a6982e8308027c5c95752c60c060ff247e7cf8e0ba47491e4001f80658bf5cc1d78f217183fa8f1934c8e808ac6c3610f0cd302d7bdc4321dcdd9eaef683d0d0bca1a2f09fa56d2baa28f9f76542ee92d682f64ec13ee67bd3f43d11ea01c7978ce6d2ccff3b5900cb58f278f960a6162fde4c13b1686ece7d8f1592ab275923d41858c07723c7acf6325cc0f209b40a29d3271b48341f849d025955d622fb45bb045467322c782da74f8cea2ca785ea2ff62056c909a5512b4034457f8204e1a60a592cfdd7876486b16b2a56fb8c6cc606ea0c4753c936f14e2d2a4efae3b96d39e11a7bf1dcdae7eb38b3abc1539fc951c1737e92c55686579d5a6cc638081e2177dccaf44eca91efde2cd76a7d63b2787980ed4eb13d1176cf465e26a30954d11e738758a765662f7975341320dab1c36260fb517210d4be5db4d99866b103009620079125c7dab727e6984f6eccdd57db4a42d94d4277248496d1fae7fd4cf497cdb742b9f0138f374e2fd1f81d25469b7a638202eecbff5950823249461d1fe1943600fa9b22058ce3f159d66f8912be37c17cc94f71a7e7df06c88c3a64ca7cff856f3be08ddacd00cca18425b0e08787dcc82650d49e6c5a5ec8ea87db72bbbb68784bfc2f14b1e3035e0edc4628ee173332dc4e437a43d13057608d2872952c1a43d8ca340000c7a2081c99c6b2632de8afe85eae53c9bc6c2ae26babf4764afb0f2bb5c1be5cb0e06f30924afedc0cf52e2c94abf18cc25d389c8fa79afc33836c21180c4b860d2aba8a26d1988aa2d75ba943ac6781568e22631b3442948449ae41df8c59aa25c3c911c86553460bf3182571fab4db14f6932eb239a94e4df22fb80e9e21192618cdd75c8667f913adf667a395c0dcb6f38639d7bc30cc7486c80a33b9b5bd9d385cd33f3d8ca405fbefd3e2a2e0d8b6388822c4beea0757f10e978bc6abb5db9a0d1a74a00ab384f964852e577ecb1147ead843c5f547dddb1908258356651091249dc82f75f5be3ec8b6918a04d64e0f7d3a2c2693949209f64ed5e27c1680daff448138d0b063c8b60f6013851b66dbdf182b8a3c63ebb802a82c03956ff448daf9eb5ac78b08040d19619007c808d7cc9288d3784e98b328dacbd3c5d987480cc9a9b058e7523a1f32615ff522d0e1f0daaaf5758089341a70874fcb86d8f768a114f783730610d5c778f024d8022206a121290f0a2c33cd42a70ecdbafc0348c38ec2070745141352cab1e96701479de8676a48ec1afba3e00918bf9463f03754958748bf237d3db54749369d43c615032fbbd724698d4b3b6d3a63b560b26f18d88c6c3a1107dd09c30039bbed26518b4d05748cd8d5a22b6fb6bbb68d9b1d17396e6f80417f926aba004d41b16a6d384902f2cb1e21566fd3a64cc9b23d503b03b7c5395316994da2520ac6ba302cf7cef28185f81a997a9111fa38533dea81b53f56b5526ba54ece650a544fe3761594453e3be53d080c8a5e9ef0f7f3a6865eff0d9a12c34c66831dcdbe045a0820b702cfa14e8c2fd727f955e1bad601e14c692f84a1f39bc3ff08b45c67234749404b2b025ce87e650ec94f9918101be790b788c89ae6d9eb07bf260af236634f0cdd4a41c85b70bd9f1a6240b5ead8222b08a8938d4b2cff39bb244665420cfb1805a17a320923b65330462875398aabfdf966cdb324ffae97ae6a9aef10a1cb0cf3d8da47643632e0f7f6e4b84d0cb89b14c6bb28fbc7b66ea64b061287d36014d06bbcea29978900092826d908ea0e961b3361aba6c75cc49d52f758a7ea5f9a42c64d32202f2bd2aa47188f45fac90ec8771fa65d6f4e7acc2c80c83bfed7575988ab25a40d4336fd3ed069e16180275a2642487d8d3309110205784a0e925b2bcf1efb13079db18813462adf33ab0e34f9e8b93a6072f502512c9ed8d9789eed2fbdd730f6897af1503b6eb826380d4ab8cca2daeae2f5313165ca2a66b2c8275f96a37995703b0a7615480cccf4c0c25f109c90b84109774c244fa1af175089a6410511b550960d8e65d2390affa27de014d403965c5d7bacb529beb1a32a468fd85dec31cd50dfa57835be277c709e6e5c0a3a77f951cdc707be5746e9a4df056084412ce0b2521c43031648f3db5fb5ded0f1b1e386c7748cfa011641c6d0f40d0001645638a4a0884aabda7090a7c6c88275ec98828dface21e6618c16810a5146ffc2c4d1470eec26977dba918ca7a9c6cc985b4004c91219adac4440d19cbf9796296793c57b5ac7eb850f1ad99c3da3e144d3aff1687759f6d4e9fafea13f169758f3757c48bdf7c690bd063faf4e112e9571730c165378eb4d6a350dfdcf0b55b79e4a70d95dca361702098bb77043189d0dd006abce7a8b4698d381da7b147fba34c0197c70e46f5d2b16f15ed0e64266efb3e5b3e1833cd88bd6076496659dd88f8d2b142e303a3703efc457f3d000704a2f072b75630e480cbb1218a85abd301db1655bc6b5183a881dc00879b1cf0c8e4f6c606eaf6cfec5bc64aad03e30c93587ecde608ccc4aa1bf855d750bea264bf44cb31a1350ae8835694a0ee06bef6446d9d1168161af40f77490861d591f99f14055b93e1284b6098327779e6c5e0e1b9983c4875c1ebd33a1a6b20539ea62c4880053f3ff6b570706e3a8fe1547a4ac435b2e2172e84d42968903880d1ab028b242db243a8995e5f7b136d9940f89f1cd397e26abb293c0c276f91a4c51e19b1840110ecb86b713543674ee81bb96b6f6e116c694b3047a1e89c54c7573cfb7183e005e2d9a8fa1be955907c120738158847434957a8e231bb81e0689a8335e564e5ff59a0f539f9b8bb3382240ded8fee65fc47888d95d255734ac065c9902efc78bd27ef1c2dfdb958223b5e53309491c91ed59192f1ace83944d69e68b34e58f0f34eae83ba00da826c70c38494e729b45975bc80446c36d7d46274ae625a9d82b43b0278a11def770cb264eef6b910057f82df295da308ae7953ae972a33dfd871c9a99e04ab3f7b6bddae47bc64484cf881d54518145e669798541e381c5e0dfbd32d59dd6b90f176c1caaf11225d8f5093796669ad7e04f583aa34c77e786bee3fa295cbc2505aff1a9a85e840aea1e70fdcc4f0626d2421593d1f5a173af8aaad73ea06da50b7c2da8dc402a9658aed5475cc0825d2b51449909deaf0bb322d9ca5562d860acb025fe79046e985ed92d368b8f11d870449c2fbc61c0b9913b5880906fab1a148924f8861c5dbc6f172be0725679d84fa05ab3936e12945520652dcf4c756b602527f0e398055dc12dbcb535b07c59f7efe860bed723816bfb88bce36e9c26b0ee5b64bb4b9115963947aa41308cac1f9284c313a29ec66f763999f67bf62aa36f92346c6d4dbea129c680c54f9e501cd6cb01bef467cfaea365b4f0724b68dabfd387bc9f1545e9a9065f07b2df6a6d9aa602e06aa7abe0bf28e35c726da1cdc8c7b3eebaa128532f45a44f0a99c245fe25d8af7e8f86128ab96a051a1b34c87d729c67db2c1f6b87209b9b2c7a8b0c4009a61d8f5398d00f4bc1346bff4e5503b94b601a590726c281453b45db4eba38ca663c323e010552d95293a5710b5074c71dfb4505b901e85fe6c966df05cd605b72cb0fe6b4b93a94e69dd9bbebf2755a7baf68ffc39cfaa583a6ccae6ab94574c5c09337516988e0e08a60794df6c46a468787d1ba1c35fdb5abb0a624ea64d9adf123183261c12dcfe524349b2aa253f106e0066be297a069d7c04da70a7e3169a1f0a59595ba6d2aef603fbf4f93c3d5a7201566468425c0dc25dfdd705c77387369fc48a4e6215f0d1775812fe540d327c62900ab0be9f25a54f0ab6bce3e233378fdc6d3219f17a5d04ae67031a4583c15f6ca92fd24eef208c5d06bc3c500a9915bc9dfb8689dc5a58db3482fcf6897a44bb7ad4760a24994780fa9a213290fc63b1cd44762d08122e2f218c8c5ec2bd6748aab94471abce6a39752caed92488f66d95d2d1ff180f3bb108e9d04f50450d0d5a088bdb17738e60aabda33ae954a4954277d57753dea34c8767c93d6be0de57e8182b1edfbc89ea486cefb232e3a114df4d32718036127eb3debda1dae0e4e0b26dcd525fe428f00084457cb0a3ca6b5a5127fcc821286d4a96a8e63dedae411660d2bfbe5ed770cc741e428f41bbaba879ea0c41dc360a87981d01cb3e22868eae70d3f1d8b2cf0c6414c07ddf4f258142721932e905c891ddf1b5c2a2ebf03226202a0e28304376cb3e4fe06f76fab510bb5e1c944149eef2a1861dc210fa5d3c67038f7491e2bf2a05c7bf7c40f80cd8ac1f5057340d49c913cf137d99558205d8405e91dfb7b9ab0cf76b4d3267b1fdcad64de0ab502badc7f7622db3be886589078270dd8522ad2824b2f6c6a3a163c40be6f0c5397592d7d0d17122e6897a5c67bff4cf0e1f8f5d0592e7d73438ad82793bf4d3b959fa338a1fe55825d04b92d75e52e7806e4cf30d8cde407a2e9ace23781d57c837c3342ef2587ca91a107b5e7c9249d9675c5732ff14b5974d1141f20e768daf86432e146bc315b253cb7267aa7cc4f5d5738a416c28447f50bef0e1aaf2208a061ef5ba4b1eb9a05997770a77bb9219ee3b18fd29f3cde19a53bcac8c867a131e4aa5cd168f1cde257d7613ae4519cc98cc87b0eb1e64f2ac81a3b7a4117f226cc33aeb0d0777912214a822c2862a09108e2fc661862a1bc0fa73607dcbcc9ed941ee199c5d63a7aaba59aa93f4c13a80e1d35f2bc67cbeeb62ef32c923a7ef0202436850ad361c007eb268dc2ae6b835ce62d5631fd8c64c1d1692baac388e62aa120c8b327444dde557d1c624e6bf4af517a7abdb2791100c5841cdb4d2b5188c9fba541c788d89c388ac9563770471a6832959bd63c5e159c6a6f8c3395d1bac0acf12240fc1b5a860602e451f6fe36e9ba97bda8d2a5849cc9be6c90c3865e95b40a5d70b16a8ffa24863d7282d89970474440ea7ab3cecccf43282c9fce8af144a7be2fa7cbdd04748fd4f8e7c68a7dfed69c06aca014fdff4cbc7de80f45cd8aa7b0796e053d38f674a84bb4f06b0e1c80aca4cdde00d70207491a35f0c827d3b13dec1054678b5cc0f7d6d1c4c405456bffb5fda7a91d47a938e7356be9e5a7ee5208151cfd8da0f8f675e473dba605787feee57a53dd1615a21f2d3551e23fc4056906516b7a8bcc16ed1bf2cfa2b3ab75ef4144631c83e62e0a57986c29f8d570d797a61ece362b986e5ee63c002f26e28ae834ab1974cb4d5bf4232a25fb13e5e06df07a5620ccc9b096e4b595c9c4a6ad6a8011cb674d13b5776ce4c6cbfe6342d016a91a2ce86060973afffbdeca8cc9f117ba89844fa2dde4de3f66ca44f72f7ab4a82edf3902eb305e5419f5eb7a43b5339862ac26c64b6ec1c508744a6abd0b50421b8c0f892400b731246a1a65d2ffb590e3b3ce1be30cef8b222cbbbdd5f7dbd252dd4cb71d9b1eee3ba9b6822ebf8893a57b4a65e29cac50124f24b25dfabada10454f15cee479f1c0b1d2eb3dd2028f7f35869cab4a988e36c21d95b4b86c0c7558f3cdf424bd6732cbbf13b1c922b3c451cf3023de5b045b02378d600da54103659dda8c6227d269f7ed7ce4173356d0105c80c3a8a8ec2050bb546971aca28492a5798d8a9fadfde4b669fa93e31fb9f82ee5fd7d040538fd199ad20a378efa0b6764224c49f065c0e0e1f14e0746f914df0a0508ec81197036a23f7b2eabf362127c9686ca62fc4179b585d558389d447b1f8dce09da486116d60ca63bca8e9cd9f806d5db245976fda1659b4080c5f6d5ac4d044e4f99e7e3aec0666a80614d0ead5b5b645b1327fb66cd768a4a8d3857d056ce7a441c2b0fdc7fb0e5ba957bf1ef28dc34dc98a010bb956a952135f3b2eaf0a1c389a42be3cc35a32465230966ca0e48b8bde7499ea0391707371cf05a81e0d6c8356bc97a643f6aa206a7ab7f06804a24ac90bc0c176d9e977939343007383322d21820da657d47ce8707e31389b60fcd7788f280735750bb0bc28804feb2151f1f721db42a8a53291a1fb2c7a4c648a0bdbeaf865e387509fbc32babe5732c215b3cc71becf11061ca3df12cc46ea678befd79557c4e3d9843cebd42bd2bafcb2026075ace14077c8f89772a7efcd8e04d88522dcb9a8ed24c2f3e5598838c9f8ae0ca01dec403632a44527107ad8c668204ee4610f4e151777e39385cb9bbcd14fa135b0aa5d04ce67d587f7599c4cdfc913fc67b631da485b5360ad1d00b6ae9397f6a3f5d5a80322ee5f5f46e3bb4862f7d9a2e32618057a3c25fbf3f6e1fb14b8e2b758fc0903a25c8a56ccee1a3b5e7405c9742696dd45f8cbc0c49d2a633b497c0e2e3e80b2258dac0d48d565bbc4d4459f931da9009cba02821e5ce74b50529004c017849bb487121768bd0bfac9039c39aa57354777991b71800f4e3496b12d7bd9ab0901f4b8cab8d37cbd310d501ef8ac2ec73a26a1eaa60e29eed78d381f7f9b615c6997b9ead703d36647b48a584b68222fc2a60f26b77c465f2082a411e1b233bd7869e0ae57d39f0612656a25fbc6f6a5c1af86849f96e7efa30b868f4179cb854a3b15e7e854286818785de6bd086619f420959187614c868ba9a89f1659d24b32d0ddea22b2e8640ea670c728a381a82c962ecf97958c55d3a0c778bd84adc8582bc273d5c4348ccc4fe1cb9296f65790620106f78e396e0b08ac1638bc3af611c75af9c3af4a3574f3131b47d1f6305e499c046c4e6eaaf6bb4a1fa50eac1ad3626ca21f234035b543111addeb2dab889a721ca85a9a066013fb143232fae233523dd15ccd3b0d2a2653741b0925d8bf1189a33d809a4c8a32ca7e4caec5f763291de904f4ca10aed04da8d39c1202afd8a4faa36f76cde515f2b782e6f3b522debbbf8fea4c6b177b8e4c1df7b68eb99436af749ce0fb6980a5737410aaa104ce64d0cef12c164f2758bdaf6639910805c0cf407d1e90b5423002f3753ad220be289b11afdcc31e3cbedc8432cec89a573d7275e6994276fb98a916332a001294e312f8e205ae51a88f8ada9f576c3941360fccefc588eaaf58c27929314e2839a449ed41d34bdea10fc00e5c95c0171c2d7524a7a1ca075a138da0b08235a200dbf6537aca74dda83699619e0deee6573c393a5eb4afc852029f961a283b4e63b7a15928d4cd92a2b53964c449bfa1c7598e16e681e09e63339acb9c8eab9824715cfd437e485e063f1830f34921535e515378f7080547c57b59cd42a6c642a3f9a6868278ceacd3aa232d194670a4d3eb6a13dde042fa1b1b502c3dddd5c1ff42b5a3d35a7122ac89fd1ba1835a45b10b0a95720a4bb1aaa834638217b921ac865d29f69ff5143c4e526057dcb43b05dba440027cbe4c64732c4db484813084b5929e766176c0f5e9c59a5679b16492e1b26408f30fd16dc358af116150213dbdceb2e5bb9dc843cbe2fd68b0129b8b5c1bbc79521687d74d122aadf96da3143ed7d0e3dca546ea093a2185fa512ce43ec309e9c80557dbbedbef85e5dbcd1c504f5981bbbfb0027db4de0a71dd841d92002ac80beec9c3a06c550d3927cd0bd047cd04ce7ef2f4707fe52d43dee76a8123cc74ae4d57c9ead38f56c09d6d5274fdd49708bf684c0cf6f806d9f8c68e6aea7ba9eb778745e6379719972d3800255194c298e1485ce0a3ac4f50e2436328a184086bba22be74f5c86b89c43576f3e529be3267e770607801999627998d8332c605113be7142bb2f8f717bf71199d29315f21e68385c0b0ef56c689b0020ac0166ee7d48cdab76dd4907b5223cd890d7268cb762cb981322c42b043bfbb321beae56a0cd27d61223bf814e0771c602cb19f79e571da5b6ef9e7014a5f96e873acc045a165000365347526b03935f3438ce6ca689f7d6e6a527c1fbe6baf98476f2f76d211007d41340b8c320df324e0b2784573f8d49cc7db80cb4e48fcf7068ce6665eb7dbb9e66cec9ff92d23ed8b5d109e2e3f3ba4c581b0911bb5633ca8cd2bd6d404869fb2f28ddf30f014af75959892578856b8ae3f2418284003ed4e3a70de1a42cb4657b411a28bceba2888f76bee6abb16e6801aa81f9d5a9922d073702fe81dc5145f1ea39149c1a8a73550d7f97cc65e96a9026f51d8e5eb6c3a2ed154b5e32f42ad604f8c86ac8bbac64504fdce0750f6e534ec38eab451d1a8b4ecfaabcaba0a848f87ad6e125bc50fe5b870695cd0f63e32da33f0b6d1ed5b4e8f64a6657fbc00037eaf7792d32fdbf97c1a4187ec4ce5342d20af1c2215e8738cdc01c1b07c4fc61aeb80ba780d67e73be3653ab2401327e5fc12f49f648922c7d35e76cc0d25ae22f4f5c758cf2431324c80d3706f821b0928e236c780dcef2251ae9f3abb826cb728785470cd2c48394b86839a5011802ca37118fe5b31c341563b23feac6e0e1546e011f6a4270c7571a6a38ad8db2917c897eadff2ea4b31670e9877b9a6a6238ff7bd001ccf7b631d881600761b5d6f1f32c9b642d9997cca790aa23450184426a196d6f30334b28bd755ca96a6138259159f885373974223784081f95852898d8820031d09e95de7bb9eb67401b359e8209729f016414f7030f26da87cd8fe1c71fac6abf4543972cc6bdcac084048db52d67079b8038a3ea0561df9c3aa9d94b08724d636fb649d84c055f7e0874a54cb982cff01845a31d863ae56282326c8bd0db9098399b98b183d47e3a4a926d789d160e8de2e726a935ca2f688596c01a057a89e205b984a2b23ea4bbd6f9242d27793d0c5d5193d5169ebcd32eff60411f38572d145caaed7aa6f8e2a92b03c05650be5f216c2a06ff1c79a19b19472f07b755bb3e30eb46cdee91d6a83083bf9b74052a5f2005c5b461834dfd61d7fd15a28629eb81ad18d0820883f0f54cea29ab5425937d38058e139d58153e5489f01c3dda9b3443138b207c0dfad24d278d1f6549ea97824f049971543078bb1a26a75088afd8ce2566fc20a776756febceb9acaded007b2bea066c00ef26b7f7b65a2d3061c2afd38417aea0e172d9af44cae614e8d7e68f20526df80e5d8127285d264822de571ea6df86f1ac6219861cf0c8a21ff921b39a8183b1048d516d680174fbf0f10c34c5354f6cc62e767557d41e84295472e3c3756ce99752fa81c7b13a0198899b20db52af519b902a2af97ae7f8bd53041b6d30bde3509a87dc62fd13a2a579af11d0f9dcc00aae5fb13f040c07b4d130514fd97ceaae30dbb511835485d1f8b85c4e24fe04fae47078bde1956ce8ce28abb794035d6e6323f5dfff00e97b374d0b455205603089f43802e0e0b24a68b7dce7e3b85e46c60a62dc40be11ca989e391834d8a92622cd34220423f3de2f1c8eaad322a2ffce69b7f1310f423ca2416d120c118972f00799c8d2f6fe509c95920b9c7f01a1c08d9d90dd67fb659c7739668f215b0506d38ef401306437d1d8f34a12981a2c0bcd87fa545b880d07999315be4c114b1b5a7f12e0d570b30cb044a31623d0c49e041c84045c520bad4344b1436b3bc56e1e6115bbe1b6b5c172216110247e41d0d2cf798c6f201d10c3104a7f26af1dc9b648f51198c6a2ddba635c937357fd627f69548ea5fbb7ec33bea1f5d24fa17c4fbfb1a0c2b0d38cf4c7a1cc86119d72045ebfc1b2a08b23fd0e9dfad344db81607e93c49252f0aa61c0b92a697ce6a03ca8455994f860ccd92f9eb226808c005de5b09794b29226791bfccbbb3b85e0b55ba02520643929e6c961d0f8967409691d418b2208b5c18b820d192e894f923d70ab7a9e0ce8194483409d5369c3bdc14056ecc681115774067324099b03519f44ac831671e4feafba2208c02393df2864a282c073e42fe1300d0f0063dc3cd6bc8ed43b1bcc8984a84ae57181a3e4a928bb886806becb156d46d0cff46f034075fa09002e6978d16ebe0a39a14b8b8116b1a102bd6e3130eb397c63db46d32e9694aba96f7b2a04ded61a5672766a1391928fb02cdb527bc5b286690d780055397fc5158876929ba0a887b15c012daf440055d3b377dd68e347baa0e8264187ed2847478113acf69bda5d51a8e9e7df87a52534136c10625010f12185582d12cf521e800372ea452a0248be8ce4db284e20f823e16f3662b45b6e6d21e15aeb641df28a5149bb0f42c2c229dbcb5a94e9f8a8a0c774731c442c4803f1f5c2f5fec508034a053126e85664e68aec15cf4d05c89c83c4a4bc32c8d57af35035c8d220416c1f619133e7f2fa9917d14c34759e8dfee4732c0ebf5b2f69b6aef8f356fda812ed1190f4d9cc7889262465beee711d81e7aef04c00cb5d36839c758f8aa9528cc699fdfb571b435e8c307fa3081ab16c5505315b11dc6ded121bc4b976b8207c6bf58037dd36dd0cf5133a21fb122057fee02b13429c05434fe263a627e2a5120552894aebd1d80132b3a37532d8fd9060af1e6f38064e512894a0a392d9f9b3d00893c9989965be252664d53379709d0c9884652ea3295aa4c666e898faf6327ea2f2f7e8aec7c4a5be237f40deb8c23089f1808fc0433b48bbe77bc14bfae61c90d0805f3253b98e992fa914181b4dcbc84d421ad4255121d14712f3fcdbc6b99d0d24998756eadc06098376cc6977bad12ca0e74cef2c4b1088dffb0168461af0371221b3dc7e6ba637421c155b5adfd1b287cb86f9549813eb481a2320d14d53d6d24a3465c18f1d9170c1592b073ae5464f9f6f34d59e11d4b01dcee3f208aed8e2cae72535790176bf56d5a31569a083bc131f41731268fc2fcec4fd7767d76292fa0ff6b3ffa4dc0aa90b88629e4e3fcf40dd3c90e71034b813e9061766cb09019de20aa1365612a79a0ca0b17247a06a2da43198170061ca13ab8e6b3a6781cb69563047103eff0cdbb7fba01b5dda96d8bde4d00613927d917b0b1b951f8d90023f5ba55b923280a2f85c9f2d728932e71c1b700179768c5cb9b033092ecd5755ca559f16d55af2a513a890418ff4c2423cd8ebad8ab2bb53ebe37a9e092cb25204bbde855261a7d3befbe36325689ba1e100612f2f1b05eeb42efe676ce40a46348cc77511b3dc4a74f94a732d8388ad2e0e2cbc631186e15a8e9865b385f36bfadb79a100e8b5e4df62dd11ec6de681dc0d1c0af18523d499c6657eac0d648d95743ae67a636128db02c1ad616705f964a9760e6214d4e6fbd5a23933a88c0b2c07551239d86ff1993908077d6317a8da9990192e4e1e3636314d465c02264480296da4768c67fdb3dbbcfa0d635875db726f5d7f9b3e57bab49a15587a19b603ae0e6ba2cd96df72fe23428cc19bb0d09267996e006853f90ea5cb28a9aa479771bdb7b1c31968f302b79c4b30fd1be45285b40b0c18d826b30bcda05b4010fc816828e408cc6c8aa7ca962b4e30990c169bb826b51c79ec8093fe379edd2f1783c64a17024501ec2ff9255a0428dd017b61072d52be29ea26c0173ebee54d7a5596f8bd2299c5ede6e2eab5eca00f3915921a89a797893b2f2e3a094a26b80d382dc981a051802c85c64b305648afe7df5aab7153d4c8f549b091a23c0aea4a12e3816192f80c146041444206da017944142f968a75d3ebefc251958ebfdfcadea7044f7f552019f0e500033681112c189c5dc1a26ee24daf415160c4190eb39448f111f230ed4c5b1942cd6145e4058ecd47bcf41f806c585547a1785cc7a81a0916521d2b3526ebdf28282701000307aac06a18bb89b7b396318b2a263bf2e966fd7b234eedf4fc73a86f50ec72f8a84567861c1212d6ad9f2fc96c9174a38985d91ca9a00f8d963ec0251fcf96246f6daaa1a864eb33455d0930d8a1223b4596437d423a47735cbd5abbc5dc3ba8683f7d978b0b5635d8e7acbdd4beefcc428ce6a63cb90b3021cab9960cf400c6c51ae7528ca9e97722f972068e97b23dba30d9ceacb2eedc5913ada228b368baa717fcec8d30ad079e9f0b0b966dc843eba2310907964c846b33099ebdf19acd718efa311450007702aa4ec139fe5ab0c46ddc49a96e9b69783483dd928850550158e285f67f9aee3a6cf3c5845b7a6a6cf2b729291d726bac63027db8811361bfaba3487c9c04bedf50f6caa94a0c24ee05ed3af54a0b0d2570a9a48db2562fa5d61707249f676a449cb7b3abf226372a8d546a78a9c8adcb07337be46554853697c6796baf77eb774f41d8e92d88358d86e9be89a853454754c2b6a1f6726fe95e46793b6a94b1d4bb7b314a06ea8f748e7232ea5f923b4a8f3d8afe0ec423a4fc51f2400a4d2aa4786c652719c0119372a5a809334ce06b862f64e06aef332a2d5292a2a32c3222fbe33dff049a17bdfa90fb470a14bd6b61292805d779426e59656f43d441dc5fe28df8785bd9b581453dc2608c7998659cc2aad27a79f2fc88bd80fedd89cc0d32e2262e0b33b0936742c70daad488ad7e94eb18ec2eacf5a990637c7e5ca47238629162372c23b69a0ab425ea81f88c651b82196a8989ea0d17ccbd7fd42da3935e57628f70ddc21b885d91a8cc4a189c93cdc1f0a504b3a5cb88cc6a1fb16844ce9e879f705868492576bcb91567c4626ae4d914dd319093461195c113867ec713ad11037e6ff6bdf97e97c6c135ab33f6a388f168c45c71b57a3c2bacb2c2705378552c5f22ed6242216f559d5ab2d4096659ab6fcbfda78c30035f1f5b370e4bea051430362535a3a50c1fec2a6593310887104de3b2e68e60c529df263cc386733a0188aadbb9d67d248666c569e6ef4b310529c236c5ae613d2b6c0e2673b8976fe5a217c02b3fb00017fc7d9ebf7baf18e6f1c5f255d21e500fec0d285980432b7b474d5a17eb392a2b8de60c4d81c8160b7982271a2be0e1e3e87e5c1162da78cfc8040b674fafec945432b797814700d5626592014fc3a92b0ade548bc9a3e5595a606b382afc236d26b6905eb0f2a9823f1a5730a6d1fec63d6abf3a7f25d83ff37769f93e7992355f775f8c19981b0de53fb6654f27677265be7030a5e70bdc7bfd816b0d7fc26891646068df2ba0c6c12325925bdeb92014e753efb669bc2a83ea19ad0036fae9a80b354429982a93d9835d84139d8645eb3e25d5241c9d0081abcb39e1531a3f9b5d655c7faba31deda3c93d3714668c8b5fe33dbc87981bb3a2ca5a566e20c010f7bd8586e912ff8f251ec084ffc2518fe43d218f4be95f54f015bfe404a2f570f095004d897a6b88229942900ccb7a0a6dbd7122c9372a552593afa2218e5f5bd2cbbaf5136325952a3432a767be5fb09aec16e1b8f1cf4b7677b1ef0a9d89b3ece8d16264badc0bd5d72869d70a87d08604f3adc18a898169b18abe32de71adb016e5d868a53cb7c76633341a8b4657838bd7b4f0bc6b940fe40fbe27742972613569d07334b5be50b7b06860a5260230b1e245dc851851c691d0d971caa959576c6d51789606ae6b70e2a56b7cb8277df3f5194957da02f9434976aff4a40e8f7f15b0d5447eb7e0c870cb4443a92f4370728bae3f40f7690d210462127258ccd5670fba068710b7fa18debe25c98576df4a28349aa4d4d9eb20cd742418cf5673c646479299580d35f10e105726e71f331a28143e232de7dd8abebdca700eae3587464983219dc8d65276afca16e54427205d7cc29566cf684ea1ed95b4543a5e564acb6c9776ef89ac4ff6e526a3ccacc901e357bdba006530fbc1002a9c35a4a1c2b900d7502eef8605a0a508072c4fcfda0ed94d757b76a6f5bc4d6a0db29eba9225217fc3c104209bb35454e1f74552c64d4a39fd45c595a5efd90c42135a3806a334d569c7242a322e871feed9b1e4814351995395c9d5869bc2d406e3ca24e7b91129ee064ee8233dcd27e16142311d2866d6b1d6e139d109d8bc97c813037a7bde9d0a412949dd47df12bb9707d7424c30e2db285dd74a8eaa04fc5f254f11182b16632ac91758774bb69a35ab301a1efcb8250a788e2eb4656ca9b52533c7a59bac42f5f5bbfec45dc4c77ce6f8590e6a0dd8a46c9f674405e3f91be0ab7b8cc6840027de1d7a1260aa001827678e64e7dc41e02f95dbfacaeb799edee98c3d5d30e820e029c4edd5af44279931f0d1f54e26cf20592fc5afc12ad4408346d85055b79d00c3a36c8b0bf430e4dca0f9dd11ba801c4c37caf62d0143832c074e2f57514e6a663daa6178de44ed076f379f05073b253fa5a9809f5d03fb57891f9b1ba8425649ec83dbce7b3adb83006385cc9ddf0f3811eaae8604619c4d418d042f9297e672e3010c349213700c45c52fe604a5f3f2e55ebb78f0f3f3c6e6a512c58f6b3643542dfb43477382dc08c8e1c929572bc91f53d4a75a9ef0acdb8d6fd7254d0fc01aa0f5919bf28f8d4265ab4fe7ecb5936820fafec12f10051e9f0d714850d85e544b453c9caaaf8d669ed516cd652f8622f4359c1ac12c53ab1666e2f790deb344fb9c242edd3c0b2b977bf5ad6ae1490c776a92eee867f5fa5f608c01969127fbb8123723e498783cbd53fa4dc6108dc73b8c4c5ec7af1b23ab0b1f6b4a046fe72003dfc6ac760f596a882cd31855fd697c32a1cd6724098051a62a25d80d057bd1999972a3da39347619886a8d8337adb67dd5c454c029443d0fdb3c6794c1880de3cfbef6f36253d4e0191a0dbea0a5e8368b8dc4d65f4c8230aeec9aea243aff22c41e16c21aa0031e8a90aea6897d4e085c386ad979f1a8a64b728a26046d1ee5e8469476dcee7c24d43bd20f7eaec6ed47cdc6ad6e031343c3252e75de047bf032ee9b420834d64d0627f8c5eed466d4fe01a567144a38a4df72d42dc3a5cf7af305d95b25e88439b2ce6a8406f21bfc43bbb8d3fdfabfbb8aeb55a41ca55aa5e0a462a302f9192d2e581bacfd78e8a29697031e252383529c1f828141a0d15f230bbf72c74e20366bacde1399dfa6059a58062067866291445787066cd64147d298afd160b8be34b8df294a15f12e98224abc28bed18c54289a8c8ee5955818e89977f48cc6a60eb4963a407311f0dbd834e315adf8a9baaadee7fc46d5d44933c0a55fd85211dadcfc965f26fed2fae03f35832b6a931dad066a6f2841ee39589fd245016a033f09ca7d66253d7b83c30d99bb6e5bc4f81c34f05bf52ae10878a10dd655ebe32e1e65c3198773cc23c43987d2418aca443fb9f36b36f02d7b72488b62ec0d71ba68ff251d1268dc0cf2ea115b94b68449c37a812c65cc6dc54a6085dd7607ee3d1bc74f47abbcc5aaafae897a2e28caaa7b5aabf2b283c3c4d0b65d8f19d93153c2c02abd3fdd9d13c28e4d61042df6e70c21ae4903ccb3d3492348919b7d90d7e4979461a844f4951283e43a5b2a9663dbba8557151b33fc7e9e442fb1cd5961cb62d1762e18612d2e2088225eb1a296dbe01613b62564a1c894573e957037286d82356df94aa52fb1c902a59c072c6e66830ad37d7f8e0c81ef9c6302b0123b4d17d2d408c8d34dc86dfdb225f13adb91acfae31f4e994bd4144aa69a97b942daa371814c2e7cf9c4fe2f027886c4745e6820ff5f0b88dbc527b295c0311196aac86e83a177468f5de6aa0c855ad72eaf8d59aa807d098753b3632cc62d4f4bada8c598455040cc87eb6cc091af6b087f399a7ad121a4427ce785c649d4041c09202810b9c6b16eefa0c43b3fc4ebc530f0e7e591726c337b63db44580b56b715047897cdcff2ceaeae2b07d69d7a024adbf2abc6a80988cf13d85412c10c229928a96fbf6f3f7a8f490522c6b950dc43f6a0d1aa5283847e41f07394523b122eef56d02a034a3cd3904f4b98f8c2b466dc10957d2ac484328995821c21d07842e318c77b17536a7975c1a29509ebcb6d09a2dbe836c9d0eff1262dbe3059e525112fbaf7088ff5503b8b5ef1c256d9b8bb5c33e9454e8809ff1e935e6ebec69c5b07809c7ee3782e24f237519190fc1b6a0c9c2a37ebff9deb08d3b2294dfffdd2ef40ee625925c010839e048e82e8549485a62d518de9979783444261f90f01b57069c91a16a9d4ccd557a489ad7ccf6109b32367012d2d00143b390d030bfc8f077bfa4ece319097d1d280234df1a7a592fc544e032d9a5883747494b4cff5a4a51519d58b52da24b429fe72283ead58fa1b8120f1e7e91aac734b8ec8c2bb974b9fb7f996f754bf550ed6eaea4cfe86fac5c62ad41c788316d87cacb8cba4b42ed8fa4a68223ffc2473894e426c79c4bfe2a26315001ba75a9a3bdf38799db59f07bca46759646939cf730b42c1a59fbc9deabe07977034a27c9cd2dea3eb048b368e163e900f3df6d723e0a05ad97723d6384ff2c9542e677570dcf8d6825b36bd345172919eb6ec31b171665327339e3b8f04843c47dffee10967509c99bee894908e1f3a65f182b9a4f3e14a84bfbf7c51f1599a966b2ec9b6ef2553ac0a5e9158ba1befa8add0700c95dc076ebe322cb9ef8d29cc14e0fa9105453c615badac5b084eb2ca99dca91bdaac9a1b0580b284eb30a85cd1031ab1734b4478073100885a152f6dfe95a66f696d5da0e7a841dc3e05ef7074d2cfc29b22c0c684785c6886031e3c6a3074b314cc97bb460d6b97f4a4b34966012607b69574b14a106856ee267e4c67c553047bd1d915c0f70b6aa7116db810436dcdc8c9831886abdb3deb23df773d922a07da29f5272d8e7190b77603986c0a357e3b04a5e975e264506f9f123e7987552798c7ac8ed02074333adf6347459ade2bb5c979a54af94d9bd77c572be5f275ccc13fa8d1f8a2ea1032a474f4079a36c5ebd823b4031e45d29de69b60137f3aa4f58fee2d2e51e4c0a5d18b94b4aac7f917822883c4699f869f1cd17678b0eea7846f3c3779f9eb7e2a5e32999d47c413a1ab310212d1b097314a4b90424db3c027cc3ac3d7f29c0afa87d274763fcd950eca7563b20669d5803bd30f59b20813ae7f314b0c69b4fc89b9e0de3e5927c09b844cd520615c9b3624ef30f702ce145b3a5e849a01bdaa08c02d1c9b4d9665e9d9006c5f588ab48f10d07760ce65e2c26afe06bb0fbd83a6528757d6be056ff7a5269cf1c4c55e7ff4f2908b20300410949b8ca253a6c9ce51b0875269a59e8d7983d1e02f87c0a613a82019b8bb0cdfad3eeb449a7a706638fe79035957ab2377907fe711290491c0e811aca3aed5ecd6a8c4e8648ce06fe592091895e054c68b3987f6548286db05084e72498d33aed042746444521907f8004830668a666bcf5c228c33debb6c6705982a87831679357a0f87991ecc860196c4eb521f7121769cd2d82cc66f5229a31fcb0c0dc9c19ddab39bf7b161936cc787dbfcfe30421644ba83ebf87d52b37d3f3a3b52ec1af79c0ca381351553e110ebf735579ff52f4614d4ebbe871829eb167f3055058bc4722c038743950cac9068972588d25dc91030ea68b8d77970986c83f550bddee28c17d7236a0f9914e3d66a1ecbb64e97acf6d733757170521f3b9201d8500a5c9bf44963d6b8631cbbc63b91ca0efba96ee4e56daabbfd00c459f206c210d08b645a98c20ee69e819c5850e75432bd74639e009fa3c027d60b5c1d24568b03824c888906d2bd2581c4b8fdb69c3555267a019e93009922b6e63c79ebfbda0208ba0007d5509a1e71761d87c43d026a5a906d10972eb86ad9f5095e8aa13611eeec0550a53e204fc2852657d06bbd48f476804a2f8873382396bda351ad647d83326717cbff258bfaef2b65537bbd104c343370f909028eb0027c80dd7cdea76a67e3408d615e636c584eec2521ee6606f9735010a0a38385048d074715ee0aab699aa2a406a84f1df9b660545e8df0d79417a561295769b696066224fb93f87c8af80cabc7120f9dcfb4404907406eeff13cd37145ed93fd050c9c06e5a405b2648560323b0a37f1a95cb3d29401af16a0865d44669db7794b8ae14be027b1d9c195c8702268e227669785a25d447064604e5d14eab9f4d39b09e97d75b9be55c1d3121d702d72f0f05ba787994671dbb3dd6f96635b2abe993d0b2eea55368ba3f6443ca6309c1fc3f154f6bbc59eab9130cfaf50712b8b1ce1ffba8c4eb2028f15d30c1210065324b8f31a0fd915472600ab7b01953e0d9d8f26c8f9a601c34aaa178a376abf625e96f00ea12b0f1e36145e8f52a5e92ed0ef055f9741687662728b582ed82f16a3db32a3063e5369b63bdc46d25b251bab2d7755334cd4c903047601c5229fa86cf67c4d9b82cd97fe70b33adc989b2c9504ef1cc736112f1a2215afd398b24b16fb50ca585854e0b52e0abbc308810859b21f8370598a0d3bc0cde6ae2bd3d0d46fb54deb9cc5f93710b9ee13d4212c6f4024848137abf32d1b1775d7be01d82852087f62bf8be3f90607a20171638f67cedf5e415a6b5062212b5d1b13032d247b2464cd5869eb773d91f1d5f21fe93b5d27454b0201b816e8015367caf6d6b1f5fbaca7565a1ab1f0c8532b16a343b58114808a0645fce79fa3f967d75954bcdaba22eb94fd579e01b5da6e12847d8bcced6c1133464d9cd8c595c9b03d459b93b413c9b490202c4567264aafe73e3b6498a239a77ab8d76fa2e3402a33d52eecc643f95c12dca5f253651f0553ed687aa2bbb15af7fb22943524996d0b61f6695b70d478aa03af4dd4b2d4fd3d46b0b734384bc710e37ffa78a470fc8e79b7a8b8f6588c81b594304e73078fa5ac124a28f743cd931701d23a2234cce2cb728b3f7f26b35daa4454dd4b867c4f78633b54a1739fbb489095c70a1f9c309eea5da66b254ea55cfa2c6bf574c279f166486d2202a1b76d50c1a9c8852419e9f2955f33c992f6eb6437347dab17a3893bcc5885f99502b1a4e14d1e90ff88d7f02b5dc61f35ad67e5bb486bffd0376fdf4a40b10101bc61430f85cdb762260f570375e7b358a47e91ad6d5b573d46caafdc9709c9626adfa01da0b58b747494a2ba13d302afa92d8dc73146e1592161add350e5cc1cc5f2de9f85606aaebcbfa1edcdb4b4f2bb5e93d4b8a4fd05c9cdcfa0e7948db327d7f7770f837849d9157c67436b3ac3c0450b8851ad22ad77e0e0486c420e2ae9ddae0043f4d20aae245763e6cc6e49b233955633628247659b6df0ffed668b22852bcf43b563615bf59df17dce1997600013d3682e8634cd62b8521339808bbd9e79def65101c4938df96d060e6f54eb11147fb07e13d5727e971f2807019d92820f96bcb5cb54ca553e1d4e88b01dc5bd59e2477d0d130525b0fab3883b9bf60b105ba735ca0ae134e30825e523eaf120b4b4c4737e7aadc4c825a3d9c3567681cc7feaf6106a1b6b5912cebd489099b5a16bdf9a112c9e6b54ca99b19eeb4fe0ec4f26ca64cc463711cddd131306dfd32c0b772dc6ff9cb3fc7e713285f34b4167a054f08c1e3cb154ab9567dce46125055454f84222a8952d422e312aa2821fc04ad3f8956d3fc44f5398352bf191916304abf73a01cfd0e230265f9e2f7589f09a55ea5e23957da2d244b249be6fa5b3424209841ba61382267642b821148bd2699285c114042d7e200550656bc2c88f975d51293fbd81bc88f6e7c592674ae130257bb6859a6a2d888f188d2645a1c6fe6488e163f2cf956cb920521cd848500d75d420550f213e247164cdd958db2185af65c2d98eb0e39a616878405a862f4786c6964521e7e53ef749eb6f4dac732497fa7b7c42f0c939e28c81e8652f89ac59697d1d1e4549073cb166fc3e687212c41e8aa12ff8eec568c49de26c7b5384bdd992d521f52ab180f79e420b4471492306af7ce1407119a62bb620c2190b8834aa11d7485e37539e02e36ddb741715d81d46b81c64aaa31cc7fdc631a2aaba4a617d75c65ba54469c103191d3f8bc3e45ce9c5f808ee0079aa0acfde112cdca080719ceb44f3ed90fab8b0fa4f9423e0aa60988cf9762ea9c2306ba55942a47e0f541d9c151629548f854f7110abc5381f12929d1e4851894dd4741fd346739f3825e7af39f9d6e740aa7084cb2595f43f326ad4595cb2434fcac37fa18a596bb896cda0fdd06a1b0668d0fba737d993e7c02a6cf19ac13c8bf456e6cd35fb878241c66fcceb6652de70a0f91b1db2f7de84223e9b37a293f4576e6e6ea3393d92ee31a30b5998804b2b994400d668c5e26307ace913dfb3ce222a1c56e20b8f01429598a3e0cb062f338f47c108c71ac11b9dc356afda20c44b7e0d4c9f3cd29744a7ff00610a2d947e8d57ec67822eb50256dcf0bebd8d344182d0bf7df5ef3982fcd9d58ae5b378fd992f5386b409783582d41dc73ce68988c049b62c0b9ec26365b97c740c4ce6c9357f36a97d1d02377eef6a4e4c0be1511411c4ec2ce263d7a27ee53187121e0f52aff9a029cee129df05350135c10619c5a65bb81e056a82c0a2f323c1a51b4fd9ec12a7d752cfad5cd5a71dff88f8e3340ce97e0fc91cc5465337bed2dd3180b79073c7ad3d186772dddaa122bd4bf4ff8e09b9c18a21135daac1de107524f17dd27c1f528ae761254f1570995e953664cc4a19ad76b10e4af9d9305b1617d9e67c956357508171ab1222c53e199ed653125839dd7c39ec297c0e1fb8da03d64af0629e540012c0bb49e98b31b07b0c15ee43abe7483d249df8913eef5d82251001fe9299be8c4805f0219cfdaa190b4703692a891c4b10d050067a89fc39fe59284d179172bd6fbd2c3d19bcbd6a4e4f9f8c38f1f592a00ffc8f5a9038015d1427f8cd9070b4e7fba6ac1581884fa986a69a69af14b2570dcb69bb1283491fa7d79069666575f53041ff90294710112a9a68861254248375007516d5219f321c7b7396ed8f58513af34ec7b6ad157f9c747b64ea5820f11bb986f6618a5da4b32d0a89e00f7b104eb2e9c64cf48ea466a7e4f98c830c47ceb13498159b03167055a2b8ff6318fbaa266e781da4f03a70b1babec9d5f40180151ccaf35f653c90114c8c8932a0a4a005ead59a9fc7838c158444be92d2a9a243405e8123b1075e0bf983443a13af570f91615ca51c8ff29a1bf020d1e108f7e1052c99e6242e06d29ef40e1168fb2df571abf73026424fd2e000168747a0a015a0c588dfe7fd1aaba62eec60b03b5b3d51b14fee4b4e5c297a2e290f3054d7df143c26a70b9db01f7eaa51d00edd878f1e5d91960d9ad59017d1d85f56a80858b6d3b586ee5a624af45b47180731369667b52bc21eeb2793747f26be71c266af3d2a51fdf9c120855833d49f705e79255a74e6b9d61a5631b53a7577127ebf007faead1dda0b9e6d42c81e7ac591255a08ff0b276b99cdac9487ae5b7297012ef3f39f1f5de7b34398eb2669fd2c74b485a4dee020f4a8f17891ea916e908a4ed830c15cc0103d22c2e22a2f84012f0780c5c0db4f58dc2ed17633c9aa14efa137c7137da78f48529bda779f05ab733bb0f7a5e4824bcd9afc7793b9105ba9efe6a06d1325dcedf4dbb8615f386153fd49be3b4b90ae9f402282fb3d5defea60551dc7dabc27f6c4ab8de5ba571ca4594c4dda5d11526533a39c7f9136e6030b7765849e17b25cb7701444d16b66a7005b458bd6c417b0c456ba89e57b9b6532927ab288bdaef4c89e2a23b75db95cd1cd304488603ccdad90c344d1ffd61d8292a3561836f95dcd14a0531193ce6399522b1472bb5dc752ed7f4c4ff50d56a7692f03146e7953dd69ab997107167cf9b678672ef378b90b2bd5d97187e2205c78ae3fc7cb5cd7800f0e1a04904b2d1076d27d458e6a8cc9d1d8bb19985181f9bfff9db78cf30808eb65ce2d1f07ae74ca1c6a82e8d3dadb40d33f9f1b21ef331e4a64d464c9c4cb6b6ee2f3b3032026387608fbd8bb573810c5d6edd516395a900a7cdc891257f6fbf73f750b8165a6b7bf83f0fd4fa7c9c065d94e7f564e089191d568780ca19540cacf43e842c7cb1e48883c3118601619240be743a8a33738876d2a23a9510f3c11282221351b1f7521d3bf3c13f0c875a0b943499b6123ded48ff062d4f255b3bcdb69266b2913afd9353f819051f73603aafbc3144bbf3ea7fcfd77a7b82c6410aa0e90c03344e6073fbda8b598fc8cbeae1d1b185c6ce006856e1eb67f6cb80bfb6c34da528bc548754b47d010610e48767f8467a0035eec60a1135905d12808290b2ad9d9ae358e95910e2ca489a3dcb1e5e3a03a36aa14cf5ed425bdef3290f554ef63bf3ed4dc3b7adf4cfa125fc45021656c468314744c0de2941de543664a55c2f6b602c11c91c87b87c6e64172f06d4ebc0591b1e71dd2e786741b99ee9d8a559842369c8246bf340e0e3c82ea27e35437d10105cccc06a39e36f39bae758b01664fd5b9598d57c4ac4e9db0f1be3efa9c95e28f2838c3a756dab8b828bd3b570cc550f0808b4344ba1c47275e42421389223e2980e20f55f4a797738387b311bde643f5a022d9bb6b627b63fe6058da3495ed72f456c6a2b719c5d969c5d5618da18945cf392e9e9996beffc62a9ec8a28713d21ca0c8cbc3438d397d8b65c065a6dd636ffe8ee444b8f760bcb3454e2299798ee0c22632666fbe85d62f3f42d2cc8fbef5322010367e3a49ef0d69bb698d737843638fe28bdfc489c444ffe0c4eb0df57b2c9169d9200c5e01b4f54fba38c839e3c92098359b584ad0cb6cd3570043f10491511222c3c6f177211fe9d70038150829326ea35f6ed05208ae17cc0339389c044aefd7c099a6f41249ccd9b16a7dd9c6200714b819965ab31db6972b7c63512d1884eca57c39231bd255122e7f51e46bbad0d733617cbae9272b45398aded33755c45973b9ed5d13757a2e0fbfaca1511e6a65c12fe6943738d01f697de4c483d25e4fa7217709691b9253e98fdfbafe60ace757bf55bedd99dd2e93cb34f15dfa526534c5c12405013fff6dc389de1e1f3773b54a0cdb0d4789dbe3d03352ce85e37378d701490953c7621d87cb407a3547957be36a6be6f662a75d9bc5b8292eefcf7cf8af991139b00c4aed9b80814798aac306dc79f721ee1a523bbca7ab0d71e04da923d30b98af370c2cd8f5772dba887b5d755db0b5a33ef1847375e0e255e5193d352222a6bedfba43ffb4e760c85f46082f6e43c688e454ee9700f540b3cf4d3bc6b57e5a906415d51102d5aec155b41f68e3a0536be7cdb1e74dcea42847cc6e913f66562052f57eaae4064e19d87dbdaa55200e7d33c05ce30a7e839aa8cffc533ad94974c2eab024c9051cb3a54eb7158550140812e2805c38d49844ab81cd911734e6da979fbd451ed6c2d3f34e7ed85bf031af3a7fd272f037a41513dfcb333f4f9fe89eded68882f62a6eeda40ec8bcffcc4454aadd90a49ca9ff7a4392a302b361a99956edf2cc09c05b79c1d0675397053c2c9cea2b94ae865ab60ed19488d9c0137219e2158b4ebae418c4e6d04623e9ac43998f9b9616ff368aac30cb58626fe9d1fa21ce1219bb92461e90688c7dc5fd06822ac8c7fa54c639d42769fdecaa5415c53cc424642b30f8a6c70ef982485f4f22d64c5f652c06500fc1d550667d35898859ab43694ff164b8a99c5977c0ce42a8de03d5c6b6d348fced73d61fe62ff41e2b56e3941e330cd239d32c33687597cc88cf090490524ab05a8cc0865384c0125219ddcfb24e0e02437bf9dbd75fe2ddaa8653aca79e3024e25f3bcbe1478c03b8e8aea1c499439b1e730da59251016c9703da6e6a7b5b30d03a4a07252eb398109a9d119cf7c35c499824b8c872d22abcedd7b8320d4cde39add325c857f921182580184cc73f737526fef87e7668851fa33c430507ac252b6882673bb061df9e27f2868ccd1249c896726fb9a5942949199f078f076a0734b41db467744b9cc2946adafd0cfb7b3fb3b64f0f35fb93eda96faa4683256434d8b77ca8592b3b46a21334cc99349eb030a73b46004e81f3b616019a7b6a755e4fe737a51f3513ae6e4a7d58a5c6834e4e353b1f3ee4b78081ef077b0eb05127c9cd8449e3c0e64e4878524ee53f9f7a77732af7df7eda9500733f5535adbd732161a9a2cda9e8cb6ffa33cfbfba5894af64f8cd556161ce4d15f8d49fad00c7b7573ecd6ea6eda07fb3cf32fbd95feefbc9b7b1b728ee275fa8ec67f63dded317528c564aa9f6edfde44a4f73569a87946652aa9af3a7765dd7753dcea6eb71be2ed3e4aca5dc6764523a2106ebc4b1d13bd74b2a1fa79ed29ef6e02a0bc2c21c087b87d2df70e8e7784fbb9bb2ece24c9c16afcbd68f17cda14c12cc922197324cca2893211732c2e4cf01640091eda90498fb3b49860f6177c9f5841f5047fce1cedd44813925c0ec9fa37754de4521387351866f94e1473264320d354fd85efb9cde76df1663c4e1dd6fed7d215bb6f69ab8ef275ff4257df9b47bbff7354d6af627db69fa36fd3599ba9e9e58959f5c354dd33a95e983684fdfa43d7dada37ffd4f6eeebb96fb8c64fb264eebeca1662d27e4e6ac6beeab44790ee579cd2e0a21893f59d3272729b91b176029b99f3c6f96314f2ae794596759c530ecbbf6da5a3fabdfe3d875c110864c182ac824c95eaa687253059eff3fd95e1e357d9db0717c15b60771a51aede4cfeefb6965fb423695b43f4cb27d0b867e0930d34ea57d10fa386bdd9bc12a13b0f63f5972dffd2eee8bf9e2eeffe4c909b9f976168bf801f692b3d8f778075b09de8044d94abe56abf6200b76b0064e7bbde38f670f5dbaa053af4ebbdb065c932117324620bf20e38522b02d43c760ec450db886b982f0cc62960185144cbf5c1fc056093147a8400741ec80312a338b1ecae8c0890e663075e141072f28593a735d18dda22051718da530300da3a59b2530a719451c6d4b535c36461cd1583aa5522066c6920a4e354608d92c09516984104a2df5804215d1aaa9ab25a10c5f5c2bbe927445a97560a6c14b326827235064a04c4404e12e505a11634e57dc6b54648aa2da1404694dd86c08a13b8611a81186e83246156d84141c8dd143368251d218398c50c4d0184b4620a28b1838a819124306a8118410e389d308412489b1e534c21531b0d4118e6861b84529000f4be09b21972f4e98f9828542c158865cbe083181f8d2838cc1971c260bbed840049e91211716949184331b5c40b876f1028c52d28235279cc059167a03bc0181027c93211716044919b000e88b973148609921172f5e5c2f78e16209be32e4e2258b2d0a123532d835518bf006e76e925dceecead52aa35f096b3de1bba54c12c2fb385e5b47da44bfb11f95db26731a0e4e0ebe5094e6c2ce691c9eebbf2b3dd658e58571cd1c9623ad3875abe16e51959b06dee4c04694392a1c192e9173b2bd6ee43ec3a36cb1eca6b2bd537a77c70badb073363eb54b08bbf7200cad12e1e8b56e9bad59bbfbf4dab7ad56c7607777777737e71785b3bbbb5bc66e1d0de155af58afcad5eeee6e94090044c4763929c61eebbe9594b3835fe0f872d248afd385aaa68bcebfba6f957364ae63bbec3c7823421d15d3b0ecfe484a4acaacc5dbfbca73789e17055fd4de6c8582cf93c321869bf7c3abb56a2853cd71643afd4842e9400f04efbd1fcee32525799e77c214a3260a45e3d1c44e6b018e299b6833037a1e6479ed4994c98bef6d4a78b13146eb3245af8a79470c95638c385ed7856536b3d75e0cb57b2317b92fbeaa662edb18ade99a4c2777595d27638c554cc5d4e010460e4d44d5dc80e3d75a2b7613279610d69344457177777aaf0f420821f611e374641884106235562b6bad3535ef3d4921e9490a394fd2dddddddd33221c5fbabbbb4449acca490a58938201cbae4afbba35a3a931abb623c21b4ad948672cbb9f2a6762a89b48ed8510c2d4359d208410a34c180521a4b918ea26d6dc54c5c9813bfc65ca6686cd0c1a33eea5012184789b34e6a7ea8cca73ce1b7f0961e71bd55549594383e1c72b5399678ebcd71838fe77b3a96a6aae3884270c6de4fc16168482435c4d087c8e8001976c66d018193266060d2a2390101660c04036294983060db9e5e058258f45f2022b44a01aa0ede694aab9a901e563510d158e0400952e46a9e80ced4e3ed80001200019093d01b8327bdd486386077f6350082b1b2dc7550647a01acd074dca3e77711ded04e03d770361f659178ba294e824de1065285252522a522a82412c1240ce0c9b9c01c8d8028a40526c78032000010840005900aae4b148628ca895a4bd8e4c3e003f20526a1282ce2602c10017a066864d039561421fba87cda75c670ca33bb373d7019b52c6303189c98b4a6cd65a2b26b123cd748aee3c60724a8c524a3fe2d99d7ec0240fee3ab8bbbb5fc8d393aa3ae4491e1d1d9934133ecb28a28822f6a083bb0e98ac179d12fb0193f5a2338a9a0018c57a7d170ca294c070351fc0f139f917d7b403d95d4e7a55ac6a3e3c53ec46cd0409a375538d99a559408e1c10e5e5c46e45038eb29bddbd5707ce9936c3c76ac4fc083bd24c27d3298bcfecbd361ba2e3a2b41df3513493369e508421d7755d573e11e1f83dad693c66f6ae87a6c6860779ee6792c332843c965ece021c84911b00f4a60e05b2d7d9d3f3d433a5c9daccb866d0a034e0e67dd977aacfc99f719c8df6bcd58ab6d24acb3e83eb2e9c0c5816d5344a0616e3d30a7fadb07b0642609a0c9182a6e88c885462cc31cbc6c54e020202fa00cb26c7e838399f8d24df02a18061f207bd002189c726f14976f7d203520c56b2ffcb0094fd3d1990c8feaba0ec9fa3074cf6ef1146762667b2bf0a2bf490fd5928223bd20c6564ff2355b2b768280a4a921da9862ab2230509113d4e2064a081596c116509236cc0922409c6e08a21946811c68a0e565837640f0116d963dfbb63062a98610b1c6e80a5090b9a910186211cb45811c3922258320566f9abd03c92e57eab74185898f3d1a05ce1d1e65daed60906f5284016aa0383fa29a86e8e99607ab80e1593eb7f7db4b94e7d1a398d53d1ff6179174e45bb1f49a091eb54ab82eb54edf6dff7a9b8f3e9e13af5b5d73a9f1ca7dbf9f878ae53dfd419799ad6a9b08e85f6ea10d7a9f55158f0d7af58dd68e64611c875ea3757eff7e7b14befa85080ac24519582f653b42e0eb94efdfaee258a10737d29e4467ee4384be0a8050a68f0830e40402cc8aa7fab1be5fab50b42836457f8028e31c6779e3a9fa3f587ebf8d7f7a11ce554eda3eaeefb6be763a53b20f5b1cee75dc7dfe7874577fcd8301658762878c367759d1bfecdb24b70b71f6195a892fbfb6688f4c2991cbf2f1f727c786588d4e2c11d07d784f29b69c9d0254c10f870052943e8c5093b337d2ee4fe1cbeaffdb1c18812c6c74d71ead248698eccfd050c42dec5261fc2eeab72bbdc9d93ed6db96bedda0b89a394fe55babbd7b7357617fbbeb00a1d3af47a5de9b7ef712ae96ef5e28a6b4bb91371965f9bca8a65b7ae4b66f9f7dbabb8d6eba594b25e385b7b3eaf2237ffe4164c08bdbaa23f259c3de194734e12bada43a33cb2d4dddd5d4ae9d2a5bbbbbbbb948ed39ef4f6641716c2cbcacf3ed6d4869375724be1a4a4acd21dcb7b10bd23857e8537a5db4dc56686693e2c90e5d7eec6e83735817e3fd57cc8974e051521b7379886a4972453b79d4a40c181b659d52acbf6dbcc1009062c5912155fc135432418aee40f4b1a609a21120c27c81f3c9a5f70ed21a1c70944b91b09062b7843658804c30d19cb10098618f2e749683768264bd93b339838f629a9f9a021b10efb17274773cfec2d7d76a6f3a255f38e86141cdfc2eb35ef66cc80e35fdc8437521bd4b1c11bf1bb8c4ca94f2967843a64efd888813f997bcacb3435096ff4d3e8412be1265f0f35221208e8866ce4fa987b3ad37cdce4abfb36906977232071531dbc6cc9010737f8e2851536d0a047104667b2d841114bf8e0411851068540492afbd7cc02130c924c2981972454e440d61006aa460d628044040f5e6e8001420826e994fd2ba4027f3616d0dd343be02b7e7ec0e1062564908204500c92062d26d845155d9e34316306891b3c56918084fcc2b02fe5750a56cc7247c10ebabc3043194f5c39c2c90c6750401dc083922522beb881a8892cd12750c4901164180941e588b542f7701ec9e449a8ce83a5888103282420828b2096bbbbc38bfbee7079845d97f698765dd763187d215bc6aeeb2f4a5ffa5f7b2feea318765d50c3304ec8cdb5b358c848247be89b28707ffc7e72ecd834c6fa42b61c77c45a336b6b8db13bc6ec9bab366ba53b31ee8b44f16b38c117c7c6351fa73ee7a2b30bb2ba6aa0dd104a0969f7c5b10167c7e6828928aa302154264b26a220caf29be8246b63dc4b39db0ae415232c475ba29798f4f2b724f07604967127aa6a1daad65adbca923e0e387e8f47eec399d2aea797ba4c7b404bbda5bb2ce12c9876dfcd15105202f4e91d075ae1022c0c31d23bb4eba5f664ed9a769ea43df94c62951c23998dcc5298bac239a47ca525d791df43cf6507441947865ccc84911720e55771ad15e36df3865c7a95d691bf65c3e25796281de2f15f2f29f5510fb58efca45517efe895b6db7d2b6cbbcfab47f2eba5dc29c0fe5f5c82222e75eb7aa9ba1ee66c088ada950033992a0dd4497a07fb2e0a614fe44730d18bde91572786c90e145b7ada8ba733d7ca0996ef197231232643223c7fde2bcff9fd9fc1b2c5400f661e666a003d983fbfe2d28cb19bd8a804c4ca2b7571d8f6bda102e3ccf6c94d698f37a7b960eb647bd19d8c9ddf056a3b6ea4c0b18614f89359a9c1e015e015e02f76692f7e0d2af86b289a28f58e15bd23dd9b823f991b42e7847ae7660a1c730d27d8cbd12304b8e3ef3dedf9d19462fd060aac3ded1d796d52feaddfa9edc3c95d2bf63f39cbacb55fc2fd2baf9fd39e7ef2f49a55d325a98459738d8319bb7752625262d8556b9d73ce4e753fc87c9cef7c9ce7bcce6146b2fccbc9ec7abf1ebbbec7eb456b38c1387976527aafc0f6c39c32633eb89902c31b2930cc5f5c8255ca1c95f49b2930cc2b1cd8f930e75bddb8a0d65a2faa654e4dbb304321282454af906f9bad55c96846a56e0aee1aa875e66bda8e05b437bb6dccb67bf6b453b31ccc51c87b2c8c2d244445fbf9d672316b5c13d96e67a8ab4cfb5a8783787b6fa699344debbeda4fda9b2d54b3b599b53c78a87760cb32edcd6e0995c9f3bb49b79ac9fc16823aec0294667345e64f6e8337e6c705e4f9d5099e468ef800cd8fadfe697f663f79e66f2de43af36bfdb611602ec73cfd4c0b79ad18db17022281f014fc16cfeff93d5da3e02f2ac53049e4f9d3af9f7326b1f267b00dd159f1a77431bde345efc82132657a4742f124d89575ab939ca78ddaa893daa893da08f5a78fdf2d803a628edf54fa4f458d7a20348ffa7e14fe53e7737afc3ea818df7ed6619d9452660e86437149ab1ca74e357d507ffa393b20a7afe97ce0fba07a1c953d119fdc2799fb8978eeee3ca83dd8792bf504e3f8345c51f755dce3f5f3720a0cbc9142027f31284b1e829a0855a9a90c91ce9cf900932311c893a078e14759500f49434a86a440218342f1f839f5c6f5709df834b81f59b095a81314491b9b8331472c1bef0c2eda48d4100aaa742b46e9dd72213a1639cf8c4e0504f5a73f0d6101b5820a365d0c82623a09722dc675dc250ae80464dc5d268989413becb043fee2961c1fd589f156d1119678a5c8bf4ef9cdb50ab981e4ceb26b8b711edca980e0f7c16fe5fa1fd50f14ab9358d1cbdadbcf92a03e0a394fcd109183917dfce84514c18afcd3ffb068e6acd78db7fbd949295132ca39e734fdc7a435e7df9f5084be737233cb8f70a7bdfbbea69df0936ff7f5ab7ea0de266bd9c4c9d8a6a6918fea3eedebf7b8c6c1cc240639cfa95301393dea519e077577bfe77c5f6772d5eebf9db764d7f03f2fa81bd55d8dfbefadf6e27f72477ac716a18bc46ca4a57c8d33623271ce446adfd31ed43b52ca3775cea43d0fd2386f7990d679abb5e8dd37bf3e0604ee36f2967fb69d10af5b95eb262dd44149e0f8b1e84a34dad23b9fa37c92e3472f5047f4a28e455d927c111359cd1d891fc49f4956928ab0b4a41bf5844b54ae4427f9bbaa123c7b538922748e7f248ad01d36e32da813bfc85b2de9ade6d13ca8779ef40ebc52c444febc499519e4cf87aa18e5cfab78d1e7586447edc7d43e464082a20cb944412513204324212f79850a18919fc260c264203fe0dbaf33d744582041e5025c8fc03176b1d59ee7d16481bfd86a45a10c9f281f2921cacec1a3254c32d4e2cf2de25539782486e53eb0892f5ac4c042724df102566d1cf1ab1252b898808584daa009d6f5b5f3814db4b0d88085e43263857575b071fcb06cd7faf5aa57bd1eeb2ad676504927769ddaf9402d53b2188385443ec1bafe87d538fa3332387e9c5146bb047b779d30ca9809a3dc7fdd67cf2fecb6c16d3b420307f3d8797a9a84f662d7a3bdd83bb30709feeeb50749d0b161630019ea64cd07d422fbb7e711b267ef815b62ec7874742d61351f0eb0cdb5d0b93f4a6fe952e311b3b7f415c6c2c2de51798c36e2eff0200000c051d5b8d968ccb049d5d0a0f0c9a45d9b61f5a2dded5d3716925249b9f864c65db604866991838419a5d97d8cbb50db81615fdfd27bfdb418a5dee394b39f7111e8a7d85b8cbb2ec0581021fdb6d3403f7d8a71463a63239df16b8f83110e49a78f949b52f3f67b1ac99267b98084e6535ff359f7c906a43a209aafe992c0c6417fc9b36a6a885c351c64a13adc7d3fd944b113773d0d67c5d409b14f5f7b8c6b2166ec292784fa7021f6554462c6deed63dcedb71a2012cfe420588781fecf9f5bdb71e95b9c2d856ffd8c34a5188611b9f2553fbb2cc67d5207c65e66fa18572b26b1ebe575d1163acbf71fadaf1038d7ff5ebfdedf9c96b59669dd45ae4cfb9eceb4bfba83d046dbec3a8ef6696fff665b30ccfeb1fb1e674be15b73bcf7deeede7b9d0ba27d8dd1dddfc896bdbbeed56a5fafa67dd4b84fd35efb62676f66b3a8c518dddfdd5db062ef0bb1ddbb47ad33d23976d87ed2e787857d72c55c64d9cced7d772337df1f92fd89382037bc91fdd745e21ba13e2c909d8807d93f72441c9023bc91c5137e6c649f61dce7463a4f6d08a41174c930437b3d4eefc8c76ec6eea604c77c53dd97bdcdb2fb51bb1d8fabbbef9783d963cca9e6c136c5fd196cdfdabfddf7385b0adf0a351370b229c8f5d6a7489116b69c7d0b35675fc448f646b69c75373ec619692257fe626ec127dbb75df65ddf82670cdc8f5987a7e0bfec95718163ce4ac87ee0efe9fb3d6ee7d576dcbfde62aef52cfcb01b80e4f4b071dcbfdde7936f663b239db30eb7272510cfd4fcc5ef3f7156b2fc7b5df8b32e94948ac010a94917a42649e49a2152932272446a320563e7e9be21d8d37ab594524a2925d6d56ec8d5b594524a29a5bbbbbbbbfc8e5425386748e4bbbb534a7f490e167d253ef337d7894a7e58b45342dfe5776771e0f87c204c000421cb2497bde420cb47cc99ca4ecec75f7677777777774b297f490e96ec94786725cb3eeb0e3792da578989baeda52ccc50263db151061c1fde54864735007165952d1b8294b2dfbd5341d40f59ed56da1133381a6fc36d6fadfb91fc610dc03139881038c6392bb9da7d704c964b59d678b60da63d2b5a09de985d20972bbce4a8f13065df22063ba05f65428c9ffb9656729dfe7ed98a229451729e95d2afbcaf877027f510a67e6a3b5210f51f76ed05bcbdaa3e64d1f893f34c9aeefbec95c3b27535d6ca3d5733c81f96e5e36f25a8e37a97dcfdc97d3873df0dca42e0986c7adc4a9f1b297d704cbe5757e18dfb3d7d1b4c7b1ad74a6dc513f85b29f587d0ea9d3160c8c0062a394412287dae245b5078ec80e363d9823a4cb95750b0bfb7920ff4b22408245848b42b47c4c0a2f11be743830716921419168dceca901c4359e5c37ef6591704eb540159fe94b0562c6cfcce3176ec1c3f46d8dd790af52c69883b458c6c797e91fa2a1ed1e10dea1f48c9f514ac315903f65f5de8f5e3cfd1e3841fbd53fbe53724df4ac427477943510ff40229a54a74aaf045145440a972180afe60d2c5bdeb784702109ed5cab3214d6031842c16c641d82c2f23e794d0ab99884f8e53ae0bde6068aae6546105214792305182636019a0d6ac2b29a594d96f904705d7f1577a3163b4ae47ebf8d75a6b910fae37b2e59eab5edf737920d75aeb7bed8a5c78e3fa9e0b49aeb6dedb4178e3baba1edb7d3f19f78384f6fc84f6fca1fff505eed242910ffa00d906901cdfa50ef46e4c20c7f7fa2d94913af046bf01be1472bc64ad9dd77d14c831077aed6515727c282b9093fb55f0ee5b21c7f7efd9e9299a36644350e4158aa99585214d3c02452651284ed9e3c709b08b9d8e799ef3f470f7dc736f428f7e1e989d843728e4d1c3796acdb80eeaf46306f8208080dccf82bb98158c6d8af169b3260702f4fa338e839e471370e42918e6b4ab10d67fb5ca41c28f0a54c9ee74ca58e58b49648f558ac4fcadb21ff017893c7639547aa7bb2938e37b64839c534a2925f4ad71263224c79622e8a202a50c2095a0080151a75f87161040803c11ae308c136361777331c31b163a0f08abd56ab5026115572b2eac85ddf054b1ed064e8fef6991458bd240dd07227898444889150a229a10418208b340c112dd072541dcd05f898668420ef1c54e61eb993a8417d81061ea1039984390317142689dc7a99b9544129841288b121912d8b005ebf37abe007a610c1ad010c610ac6f0525ca84f243eeed3728384089010bc4308b71157bacc7b3316c945246c9028874d4257fb5de9ca9800fcb41e037841042083f0c4e1a657754c99f2ad9f188b36be5e8957bf259f32f6f6dac79fde4a8b730ebcadeb5e0790a07e653ae5559f33b7acf2778e0010a141c4546898d013833ce72a793e92f64b9605ffb14b2c79d0ba7cf5eebb27701f5363e67faf8a6fb5af7c3f2e9fe94bdd6f99c3e7b1fd45b1b78a3be2afe0feb72aad81501721f7f91224470e7e3035dc77dac00417d534e9f820b483aa0d39f3a242ef4e047752bd7f1f7fbb5c38da37eab324c9dc6badc0fab85e8e3bacf10d7f15fc18fb88e7f1114208b05d7f127820264991e05c8d2ee7f11e88ed1be738c4331684868c8dbf4973bbdb592938f71443acb3f71f1482be2e3637a53178b5080ac24d1e8148f4cfe3d7ee21ab2b4d8a5e4c7b77285ab2b10f2a23136c54fa9cdf0e9afb663423dfc10228a83dd0e35147e9c147d000723e062258a2c58b0b1eebb282ee6fe7c323ec58cb98dc3d17874358c707cd33592abf47ae4caf813cecf82ccaf59193c1f8b139bb3939da457ede015ffc714af2796858d88bd01dfdafb72a88a527777777777f7767ff7eefe12626ed94db9bea7bd75fcbd86b13007e758b94e7f11b05eddb2bb65273510d6c20b6b50406050a590b1b2cf5859a70202c3b0b287615859a74a01fb0ceb5836e3b01bb1879ac580603ef57ae560e556cd853b76ecd8ab60e0ffe872444404251255bf7e5a7ab909ff2bf8b6e1ee625edbe3cb0e5f5ddeab956f77c4596f87135f6e2d2c85a4e20423e687a457a535aea00e0604fe64ca4229ade5aeccb0d8f5facb97fe4252797635dba8596c2a55e31ea137bc9f7f104208ff3d8072d21b28a5f30157f31144d34c4899eee4fc5ad3e94eae33ee1da77f61d729089df8ce3a3948ff9afe16c8f427f771267c0e42df7f72335b384df3a2ef5f9c258cc0a54d109becee725e4aa5943b2abd41715472335b971d2f384d3f9e53425271b6c339dd5f50e5cc964a6f29868608ac985e309621d29327aea1274925c03343a4274e5026706788f484890de21e127a9c70a3154fae3c412237def09327f97a094204d9bf5e421dc3094e80c6e03094e5045210cd2526f8210a263e482ae2d40187486a2144821464ff3acd5091fdeb65e4c3140a810f4a357c578021021524b103279088e8924b9951621036f492ec5f7db8a2cc2ea40da064fffa831343cc2479411160a2f802072e442b805f9c8439e28b23334d6aa0c507241830850c2c5f78c892c5165988eeb7ca21e4e4230f3615e4595d0fe9b609c9c93eab609921d29318b6a64b7c664c240d2a561e1de98992ecfe8de4e4cc0e44727226c7c73e481b744083384391385da5ec767c4106340831b4670b020cebe56e12efb02477efc064fb4d9521d2931a3cd962c8a296b819193021c46a0e013db06cf4a2c578e1443b5052032e58481240052ec930c8f8c28a292c550ad9962a3880b044a63904cc604cd012472c245205a9dc1c24430ccb391f084610152258aa144c4b2d90c2eab7cd21993bb0aca8e28cdcb741158f2cfde2221124591289594a0ce994d4fb8a100be30b1523567308d882f54391745f666cd482515558110192122f9841d242260c921628b620693142d2420549cb10929620242d4a90b290098394e50aa42c502065e98294c508298b1051690a30484a2421297184e383314248528c90a4b4dae1192925770f5eeca6d0ae4064086a2f03f915168a80519d0ac8c986c6dbbcaae66b3a9fd36946a70232e3b7df3a9fed67d4fccfcd0bb806f737dcf602feb6558af3a4c0359c0684bf1cf9487cd3510f402ec40ef7294d455192bc8f38cfa9fb400a2d6e25982842314a8f4ca20cb5179bc420267dc479529f423d2af53faca4cef13af2a34e526a313e44366a2c266f99feebd6bd9aa669970bd23fbb4d0faf690645e800069213173401060b9ae474265fb71c4bef4c250ad46428469409cae4a1e3a8a42dd864ad748666040000000315002020100a8643429148289609a3287d14800f7892407458994aa45110c3208a31c618630c20000042883180500d0d39b6a8f933abc665ab17851010601c42a343a62831b88b7bdc03235bf99d1433e1a4af799e91644637d621006fb189d0f13c8811ad5162c0e77d1f4bf9f8d01f4c07a9ed1824ba8f989339f23fabedeea009cd67bb88c1aa678e301dce5d9705a4e450f3a0237276b4338df9a729e1f54cd0bc22043eac38fcbe6a214becae5092a2643d47b869b135b450647ca3e93dccd59afb870f0a783cc2435edbc312bc99f8b99f8efbeb50afd5559d8bee05367982b64331b7e49ad64ebbc46c8951ed1ccafd69187c4bf5c7af12904ea7705fc729e33f19e16139ab5e1c1b6b413e6789227f969bf120e7cc1df96ac731e6444f77013cd1b7b2d1013dc022be365942111473cc8f89b2b0d77858ab68b0332c3db347a49319a8b8d973ec8f8206c92e2adb61fa2f864f86e16be00200ee5ec99241eecffd021c22f1a1c498ae39bb24fe8a4b69191f5fb603263ab7e91002807c8595905f8a01400ff81fc826e7557ec58b6e012e68bd1d3aea2e9a46cdf3dde58adde5b2e11f4fe6ae19126c56f0883399812d1376eb287a6243af6180cf4f515a0b55b2c6a28c75a6feb32a97b120af5fc5aa2fa39701099fa696e9c90d1dc63b7a0c1d506347bb533395ac7ea9392fa0ab7be6e788215bef61b58bd50b63e24abddc533f3ecc5bf4f09e733772cc28b47482bc2556a344da7228a5033494975d55831e2dbda13d71dc8c210c7efbd82c00e99d4ad87c51bbbe3a33ab2507624ac80a6cc372b4ab5ad8343635195404435facd90c5c23a17dae2c68d650ef03242834c4b2fb6f2691b3ce95192c9e2090406bb07a8ad60669e81fbd65bca94e5b283cd9af669de0f7b147af529a969b18e7b95e3e61b819da40c117fc3077df3620b872f4629f35bf1956dd0228f5785843e98a1b36b890212370ebe5484aedcaf985e71d5e3a401dacc86e467fcd8d397f5cae43dcc57f4c967e2f3180b528e9f4ba67c0d1cd844291a1265b2a4fb13638a570337070145830b146b5ed14498bdaaa7861c428e79d037c7844f440606140fafed3139c13aab947c49fa7e86b8fb23b62606e1443b1b6e95b9afc3b355402805cf3ab97407660fbe22b980c1c8a2f0c6eba2385d53a8fa15551d31565cc881de722a7121d947d8e41492f9e74eea46e769494ae404f225897206c5ab25b4cb3ef734571a856d212b18bbb013fe15a12ebc1394d6e609ee84350583703e126b806780a3e50dbf6267f38b6de8fd29809c1d78119196f1a745f75c51c137a7c508fe2ca24c70eb0522393c359ddc149d23ae16f544f1980a9aa749f165d3fe3590ebaa22a073c6f8cadf05d8cdf50d0ddd49ff5aefaa01b51e91b7db3097fabb919180106b6abe2c46b80ca3b3cecb48d73ebcd97978667edd541f99bf1789d836467bdd05069ce4e0a31a55b0f97e49a057bf700517ce55f80ec6e2da5a5d4bce5cca5de8dccb91fdf6c1ca4f37292337269e026a0066c1ebbd063fc1e2f5a6638d84650838f4ebf1b916109c2aa85edf063cadf8ef2a96aaef13ba87a3e24b24342a90a1f945b11b185a3459f6ef2b21c47ca51b0c3c5e552cee252b6581807ff9ecdcba10c155aab65519e060e07fb1ea20075ec385772618a67c28b43d1fb09b171d08107faa68fe5bdaca13da200cd03c84112ee00754154ecf9d485dedc7c677c0bae0105af1215b5bd706736a5473dcac608aa1943e835d6f4704b5d60255e7de73c499fd7699777e58597ea42f30a479d321830469bb834927f929f98dc7b1a421836160e6104f209551f2c34e3bc731f7f6a0a691489520b74268e427724924a818fd39f7dc8a170fce328d0b51cfb0a46de79075414b6ae34e5c6327ea4c639088106d282e8aabc8a824b063bc40121b735965f8f509e20b8647a800f6cef64c5ddef194c7df15a370c28c16290a9878126619a8e420b16d13371c9166eb895ee5a95063e0135e4169da7a7d2d62dbab70d981e07c0362cd6d7b05bce5ea852c7c1eeff437ad8c054a7b22756794b831b52f530247bbe8418d1216561fa95902abd488238d624b3cbeb55b18854e16e2408d9f9c2742d6098760b8e616a454a26f063135436f9a7c2283c88bcbcec742a99e6f52c695e537dd90186c84a267a532d53be5ff8b24b80413f1c5f04c6f6ed440a623386d5a3694bf9b6450d7eddd45c2a554fa53afcdab329369afea06a7098cf7f48098d9feb45a1ec8be0a68648f5e8f153a3adbb5483cf576106487fd7c752265db1a4d6703ba55ab8fdbfbfe8b9856f3099f9a718314d450a3e0457b278faf05fc3141eced5ed3c24fc680739b40b144de980c2b94d119890a3d0f1a5234a446bbe7b6de11a5bbac6c49cc9e518f5e2044322bef38c52502d5a01c05801e433f911d17cd36f6d0367eae457c2718889289f73712bc9b1bd60444bb7046fb03ee91c07f888f20f753259c46cbb289128975a95be515d70be8c0fa9d83adda038961d6a4d54c4117dac6a5c5e21a8135327ee6977e472602458794bba1d850d000498b8a07ae58ee8fff1e4006ce8cc198f56da5a646fa03343e3d1892719e321920ab762435bb41cefd02f48caee4e6304426931be9744e5d6db17a22af04d3a8f279ee7b5861512df986c2f785d52d73b9af48d69dd5548d4924b25f25dd7a375bc3df0bd18e158326cc13cfeea45034de2638404cf36aa3bab0018b9c8f54d8b9f82eced145fda7a20aedcdb0b6a6762bab803cb42cedeebd0954341b11e425ad4d16119271104429a29941d8a3f6eb20c7882d925ad5ad410a10f1bcf1e08a144d9b84f806d277b4b69a6199d71d5996c09340b76746b673839c02ed4bb362bde578ee464d43910a51ca2d87294212c491d75cd818854b00bfe0c31431e6377a9a87dea5f0200eec8917e234ecdda7d5767c4d33e30cd40a2d180b269d695a578a0751c36d191131314d4d313ac15035261b288b3dcb646c91b2bca87a169def08ebc7753e33ca68359e4da388a69a621ea8aa7400dec1ff037557619eeca031e03a89f403578ca2488e061a03fae3aa9503ddc2360cb2c51399fc7862e1a2813f80490ae1ec2cf554b407b2f29651770bddeac4fa9b0e7daa60e1cf029b782b5fe989e118536535097733a50711103b74e5ea34903fa05743eb2d39c581862d992f58b8538e77a5a0efdaf01a50a9e57b096d204fdd6fc62babcd6654a663f154f85a2226c96f34ba5527345a02ac8468896c8c6973b4400243912f11f10627b02b2d130a5b183268f2d4778d25fde90850bac2a33b5cf439edcbd271cfb667cd5600a65fce19821704501d6104a322b344818e39c528918025313563ad63997de570b36fa2e01dce3be0a90ca02f9054fd5d27c2dac55070a3d1dc4abb6d74b0c39adf983abf3a5d9aec28816509e470ecc9c8283623a38682c1a2d0c28d72e65155faf910ece820b57731f2008cee536653bf4823640e7ff037aa50c2331cb94417fa18f92ce4ea1bba8d23fd6c3d3f2182c61168260468d1dabb442c92b9dead299ca0c33c417b0effa4bdf554a21f0c7e86d3b7278ba60a16434004878188fda1fe44600c8ff4217a8c030747c657229f33528f3b5a86c5e6c28250440b03bb158756acf1ec3fd5492ab3286b434a948bccdf7cd52d5006521332138ca7357d15da1b69d4d329ad5358d35120e38c41f4bdd8dbd90a9a9ff2def1a1e3294fe4d41ea19b5c46163268011e8ac912dfa545b9abcf25d1c153a8563e81c267b179361ad045472e36d91c1aa2b995f8f1ef91a0ebba52f383e3e6e6c43b974f9ec105245c300430536c6f5f291ecbc08933eaf6cd9acd129612979ea7a73d0ae9cbb762cf902f8173159c97fe03851fb41aae796b5a9ee592b592c831893d3239d92412c4a334da8d9364c0d8c111ff4f71288c23fce487b8db30186535357172c8d359e94f803b3b995024a528622641e0a9ac5115a0636ff92ae3af823ea4194943c423c31e8adb88621d0e25d69741246e310e23c19d3d633ea0029a557ba3912de842b450edf889163f345a28426c3434897f95cfdb66f43f0179dd73bddd21abf560672d7346402016fb680a38535debae7b14cc36ebbcdc2cfe407b3b5383c535da903140fae5066c845ce814668066d064543ee39b4cf36cc00ede8f419fdb8a926a0c851e82072cb70f3ef9201c21ff0cdf9e2cb788af00a018ccb3074ac746c14c42522a2ada6c5da651fcd12a0c9ce893f9030b00a2f079d0b96c64f5e71b78ff51cae515fc47b9dd569ab33c105bd334e86c4ad5413826f9be45b70f33c8b3bd51acdf3814fbe9108352f9626dea677068421ae2bbaa0aacabe70a12c326128a701e49fb90ad60ca756a4e5c050ca21e488b0c34ccaebca1b3a57f4ba2405661dbcd7e555f20eaf9b59ba18d85e06bdaaffe654f2878b97f953aa401e7900a8872405b3c62a47461b3d0f60233a16c5a914b4deea257b0c214705d0ff07f531caeb3be63252b59b9fc26db00c78c8462d36375ed19e0bfab7fde3d582d65b9605a2b5c62526db875f0f418bac302611941ccad432f21cd55494980c601d5b6720626e2a41c9288a1f4ba381486e2d136dfce0e2245e8da412ca30f2e41fa01d980d83801a80d3e59edebf1a8fe598f1dc9b6dc8f702cbe534f4cd5dcfaf8016fdcf3c009bad8df6ecfcfe9001aee6d1ee0f5391ddbc7bc894f476004c559acbd0aa7b29810ef1055ca09fe645aa211193bf9739be766cc57e2f223a5f66b5019a863209855ac34530970d46a12a7a3d4e1a432b34cdd8496cc06b333ad70caecf8f98e8ddeac019422d3776d559cb4c7a7d621b015428691bc12f576c3672cc2cdff00417bbf64312ede419eb54c8f3746b03b334f8e9326af6396b369c2011973e1c8263ce173f594d5f1eebc674525703b7b9d7eba230ca9b1dd2f360cc4f39835abdec60bb12eb7b9ee95fb508088903b1ca0ba069b2c846e7446ee847e6f650b581b49b60c9935ee96de7b3ee40406b41f3998519117aa3414e0fbd516d6e191739f2cf6267acc51489c71c438639f4493178e5a2cec84b4e50543b02ab7c73acdde9dd4cad17a6e2cc71710b8a0af20cfd7d564676542f05950daf6044f4b3cec21fb7d695055600b87c99ff43fd5a32685f8308b00510e5884ed096b54db40c42013fc65ae43d9456ef97c8e7abcb4d3fdf57a7b9604163e1c9918808fb041c88895b325dcb541950d57d71ee25a429428f6fa3e3a9ee55639e573ffb99281949acb6d4b2fe513e78d3a1ce6c257b193ce9582d110f8b62921a22a50aaf07595aab2e6f48b981119dbfdfc28fe57dda49be265593dd71b11d49bbc09730765db74b6de5ce501844d49e3d05763e3ceb656ef4ce7c820dd998d4987273c6989c4143de22316caa6bb5d335649c1b0552080037d91bfbf13b043751c468a2434c968789076b6cb360d59ee0273f54168295894d6fd9c633705756cf9dea0438a75415d98744e88786273f31eec4db3d117001a2fc948ea274994a9175c36085057715e018e2b0ffd81c65c8ec10aaf4ab9859b9e18f280ccc5a130488d8b8a8e7a9e59783941688ebfb449f1ccbbfa05b0db365536a2c1685e801f2800af0f4281dc3b254cab33b3919690fc3f0fd7d4fd10e50463ad4b27be21e8cdbcd3656ea419adae72f2a699be4cde31569f1e43cfb8540b6eee2747518f3ebb691bed2d9a6c63487ae85aa2fc60099405a2e47a3eeb3334c5dd836bd6969ced93a4881d39b177b33842905d4a3c9682f7543d6742fa6d9cabae25aec831b0ea8dc4db257d28eb4075e6c02586ed85198e4c05cce8ebf581378d8c60f4b9224a46a417c728a450237e15c307185f71444d7f140c02a0f1e5d7b72db95927474fd1a7e834913421b6105c0d57175d05b16b0d80e24df338838eddae76b7d7ec3afc63535694f5702c6bbd6bd0069440e8eb60b156640f20453ea3660ffa3e3b7a7ec38e81943fcbe8a9d2f641fee136ff67fba8e9ad9a023e875aa0a973de2442126d5a6d9451c00a1a9a733883d6b8773f5dc3954479a15e3587a9dab9eeb9f655da144adcfd19065e54473d3e17b38edff6385f7caab3b847534684f9ddb71d4b34c6cfc4542b168c7a04be42ae4d8ed1dd1a47719b1e1cf2847521db8facc029db56ec7a1d719c464cdc5b97430a634174e36bd5e4e55e10ea955a423576df7a54541dd9a5e8f5355b8266a290af1f75b1a362d05689ad8cb8c6a62b36ef288fd0f95f667b13d5ec13574e1907a9750dd3dda50f32f0796376c4187953ad85f2ff32e1bcea9e09d3a59943bfcd1d08d43ea653ef55583df3f59a1fb9ba20dd2a32347bd4bbf050dd2dc032cc406ed6c53ea71aac267cb73221d60d51681780e4e35b7e0a887293178377fc4fd028937576bde006a4df530ff46dd36cd428901b365e1c268c65ee7aa8a1e1f74f202aafcebd8b252d7b9d1117a4dd054c6725521563cd15373a323f4b6a0aa8ecdf580a985aaa7d64d87efb94c15455810cbebfa607642c59e5ad56e60861d7df9d2d7b0e7c9a5af1d969bb43a3ad8349b608c879848ebd650ac8cc78c60f814d70dbe73083cb74c3791bd6b18661df281dd1898d2f0d9a728db5038da3c6a8b5c4c2eb8251aa89b13287a007773a311bd3812589738f17272df7b9162556231032b8382b32228e8a6505e676231624c26a5e862ef77e583e58d033eb948d2b5e3e5af63555bcedeb2601c01923ea24173201473c753aa5f02944954fff92c8224ca83b8472afde6c2dfb809cf443e709447ceb1b43503cb6cb3c431091938b5a96f6641008d115d1a41504553cc88ecd7c73eef1c2cd4d7e020eec4c8d7472788da4bd21ad7956a77c1f1a044e6d8ff3fef614b2adc4dcfa77b2436807701eeb09515009d4f41dc149be9a090845062f23dd07fb8f78695a706152abe7e1e0f3d09ea18057592c3e474eb3786a7546102b29963bad4a48cc39329c40ab8ac5c372e7a41c375b756b6420acb5aed574b6cce74cf4a22ebb22030bd88cc68156a85ba2ec81f49f89ee3220beaf3509e03ead28867c91d979ef972e9a9aaf823245e82f068f61220ffc29d938637c3b684d6357d57540cf15946c2660b6d749e641439b945c94d2ca9d0567af61d2dbbd5009687f7968065ea13dd0b0c54cf4fd0fbbe0b67a0c8dd290b9545f145114f71c75c78b522c229a5ada287206471f2f53a07c2a32fe6db3c6ae794c3ff57cc4b66e1d3796958c4715fa4906f1ae8eb29ebfe5971c5a7d9be2472fda2c53155e4aa8825d59336200f0760ffd44eca241de2f13d0d192acc1c6bef0a64793afbfa0afd5492919fae49e31faf37171bd5025179294532764092de67474b9c3e2f0b49cb0b63924e107973b2562ae786c6b22c59a0b0d96edcc3297d44a6c6dea2bd3d27d4095d0dbf44941894dbc145246adcd8d6a4fe30c3c061770fbf9013d4ab9586dd14f5d020c50786039eb023cae58bb30754dc37b3f284251c15086eaa780f6f2482d260539a0afbc234adba4916089839a4967268d3f245a70181b6525ec94c8a51a7ce0a328487f8d902cdb19fd060da579d1467df51084bd94dccfe1aa0bff424b1191013ff2f17025bd0537c2348e3c3233e33043918dbe88c25035ff6f6f30fac8eb8f907c7dcff053614e55648fe0b392111219180e841c2c730e50b69f094c540867427b53627b522486e2aaf193da4bf0e736aef1031b88b6aa11bc764b21eb594ce5252dd528384a1d0acb0ebdee0e76c228471a642c9ed789325ae0f97e4f5436b95b0793929660b3ccde5ea8b0f45a4bd80e6842091cd02e9e44e202878bcd9acabeb1f229f431331d45f4d490ab50a5d8a1678726ef881c3e77c9c66d359c66148fc5a0f74b187410ef633beb30dcac675c8e9a250e8ac41e814cd81182ae44fa4913519310e81563560d511385c784bfe429754d95172aed32e1a07680effe9d43222bdb466f939f24061bd02d6844236bad9ee22426891e05ae0a967a34020b0862e25c14af8b8130d594b404a2df0d41e0d6d3f40379a9706be0bf265e407caed77a00b5d6ea884e29da21867a5990a9b4a4ef9b659f42e3f9f346697cbd16b298d998dce8a4198e886f54e5420e6ca697b247a30651239be507d4af180c85be0078de1e302e97653e32500614aaf3dfefba42ca40aec4366a923350fada66686fcc48d0cbfc97e10d03ec75182a17d52607138c43bb4c192d60a9a4d03ff7d8672019a71b74345c955e834a6201135c98908091a02e03e39dcfa4589b8b290241566a48c7e0c334c899a410af28f3a6155286662689a9bae08a20b6f44edea9eb0224a6754927c7d6258aaec97d43dfe368e8a9dd0cd425248f1da494ffe927211bc571d6180994434e252a163496eed84684e0a3292a44728a48e1d246f25e1dfa363ac0568d013d153c749c2dca4b5d3325d8577ec7ebbd31abe4adfd0b7c91534b0af4a53263bc1232d6bbe11b37652aabc56e815968bdf0e06fb8fbf80b940123f1786457e1f496bb3b2fc657e8915a4ac4d0ceed9aad4b9a7e2fe0a1f2d628c68fa6f3e555a813eee9f62291618713e3e8136ae043a4dc98dc78577f2666de77c463d981726436d325a1804e4c3e69e65834f1a151771b1dad4a3c7680d208e44c4aa52a68d020154a80740cba0ff4fc11eebc887d97f0ac1fa06be7c2f95eb5c6f6d1bd0ac2b2bf637265d5e1627ba8a3f81ea7f055852f88792e26e649ac30e97bdc09a7d6e0662359634e4303c23fa1c85533fd17f6df8e52308a0a2d6a29109aa8ba032d76cff613537afd05e09aedcdd0f57c20368455103f941704dfd9e6a50b1fc392aabccbb62c71e159af935ca9304b3f58e7f69ec9e16171c9987ff8e936ea48080687c8d02c473e1b88ac4ab8cc6c75b376abf2c45768336d811c86beb4ed8a1ec6b7a3e1a1249e2934986dab4772fc7afaf990aabc08dc197575ecd85f5fa3849ee26f4c1a6725a060e0ea0394e68f817a885037f91d9392b604829c630506e6f491510d7886c5f261f98d2a92d95022bd49da66e0e0a0543de223974532aabf3138c3d8e0c69bb3adde17f5f821e4fb1273e891ad0182e9228c9f168b15ce247f32ad2a9c29d27896f6abf24e860f1cb9da3ccd517735d15ee80cff69a1cb340339cb7b267d831a22890167ecbb6d8d494de1eb72d668e03e302b1c35213be3c5d3fd4b8c3b86ea0f17d4d1560b51d6793e4571baa2044722ddefb23f6b38f0a87868ba100cf28dcb6ea2fde2d6882f16079e5a35a211c31908c2f5134ba07a196429b2402eb251c590533c214a9051c667cb5ddbd57fa799a0bfb91ad32508846a041c312d20bacd2dfa3be20ee41c0639eadd5203c9b547c98076fc8f3a92378ce8abd806d5b202a54a92418a6cfaf1d07893e0ffab4e91458b056b637d68aba1b682dfd15872d2a50b96cc54cce6ed8a22eb63842c61531e648f6d89e0da9802348705205d6dd8b5b74d37350985a9cd798e3b608889c3f4a0a3a91f8d4508452d5557ef9bcc481dc19cd4d47a0fce76de76e806d46b1f4a396f92671fd118269c384c2c4d9f1848045467a2637fe62d016697751415697d66ea907ca23ce805f3d2478c3e883a451cb10f2cfa3d410ed598b6ea710b17ebe876167a853771dadc05634dc06b9571fe7a7be83b05aa7e8a834d74462ee819dd81a71676a91bf91a9da96b63aa448e10f9d84936bf6d89e7fd0923339266a3fba1efefc2f856b554916da28bd415a19cbb442ba14921568faa046262c6dad4bd33d8260abf4aa8badabb2480e0d647ea185d1cddc740ed2849c66bb8b6c70d3107f4a39a90e2f4001ff047838c6c9b1313ac686418be376056bd79712bdea9539381b50ceb7ba35105da0b915c5b4df4e56064c52d509efabd2d3895f4c054216b25d6d99df60ef16f02b8e5521b6e68907d866eddd31b8a0461472ad26a8a4fb487553fcc1e91a695455ae22215bc028fbb8e14419d8c72bc5e02c45038f32e2785fdce9caef4b2d5c3248f2ca8cf5bebb0511186f28ce94a8906d14d093c6ba340894a007247ab5ece3528a12bf625365bdd613afb240b7f70b6047f950f801ad054099fdbaee96ab0dbfa853dbf8a7beec3f59a14c453643e8bb7f49b28836fdf19a4c7fcfc0fe11918db59a122b6f0fef69cdc2535ed43f8af809d3f14aaf69ba1c6d4e9114d65e99fecc0a71e171d1bb8fb5b82b2dc034f20c231944050def9b8083a66e90f06c4670561262075997c420369e3dbdfdc150882d87341b7340631b95a7f9b0e7c6d3996091db2c361901f6afba7d631f98c3cfd183b80965519615bbc6b181eb174c85539b33adcac4bc6b8a58f56398fbb68010ae4d00502324a2c11c18642bec79fa05c5de1c8559211c135310396d2cdbdee37a2650d09f749f2e54fe4356b414e5de140288f92557db8593ca754ae5a415165f182c221aaa1ceaa2ca45161c2706c745ebb949bfd8e591820ba6be798faa9e425e48d8f4697223031a8d33b0e33f5b668014da93365df96e2fcb168f397260b55e720faac2a828f3c715b4edcfacbcda23375653c159a2f9c2c68cdbb1077d5d9c913372dcb1eb788c8eab5d7afd07c82cce2004191d3d5ffae7c8ecc03cadeac5bf8b487d5beb3db6a80b8f9e39b24095566c4f362cb82ed03c67a840473fe2b029b925b1e371ed39311dd730e23e2785505665a0fa736ee223c9ee0f20b11cb8dc6b4c1ca0f4e78d500db76e2109c63e35e3f32ac46a8c80ea7cb4e2461e2b6e9598961536a799d8bcdda695b42ab4ed950293f827869bbfa3da9c1f0b11a12886198374e4ef239011ef48a678acf6453d7619c39a3b3cf1d4a228392ccaee18a8bc61068130b055f103e82ac7017b124c060b233149a9618de7e1a6ef06e0661534c0c10e3a609ecb8ce20746aa66dd8f6f1ae23558bf0f8c90278b763f75189057b581b69b92adb89bb3c3756d6b00eee389659a86120c97734c035027d90cbbe072bce2fd0dbbd837a11f2c1881df44ecaaa94fd9c9c4296f0b711fabc409263e856c0dbfbe2c2cbd3cb51883c02266a5f6fefba124c3bba48373e24a033c0b2fe28d5878e4edce7bc4e52e06af367ff648576f507679949da67bd2fad836d7c8f0126f7ee1659cc0155a19e61a428bb8154420c542e4212a28bcb6f0638c49e73068b24042b7da9b34be4a2fe5c5f7c2aecf371cedbb61396f2eaf57175270a560b5a56b1e4830b56669abd08d8786333833f87dff3800cc0d16372b3ac94de313dab1d7041d5e9d677daa66367c6a1d284c3037a826e57762e74b12054debcceccaae5a358c3789f90629a538f38d6d15bad2d653a2fd967f99133ab590ce2873ab9ece27e9c96ae50c1fba9964f6ea7733b14d5d92e9fff88176d00a39a6380c060a854e085cf7e4a8d47d9750be5e70f6c810e39ae198ece0dd808fc86d3b6630d09a35c381751678ba3e251cfdec90efe6de85451b804c485e26f50535fdb245dc6150ba05226971fe7478842a6a62bb8af41ca18be2f215787cc02b75d1db2de8d128c688582445ce45f451280d4132740137532f0553c097a374ae0bfbde3c11ae8eba6fd119157fbb9c419f55450f0a3982a45faa63cf33b9823b0bfa4a517597ebbcd7afacbfafa0ebfd96ee8097f86e0385c7e25b9f5efe4828b72c27c273784bcf027823fbc396d6617cc8021460daaa6c9dac08e52cc39954ee2ea36f4bd64416554a686fca58aa338737039dcdb43dc380db7a7e7b1fab8e21f9f107595ab0ab8dc88a182c3ab028116e6fa675d42b823baa93a0f5fff61b977d912f113330f4252466a6ee0c26b9ecc0ad4961955526ec604270d01a30ee1874a762f5aa1a7817dc936da4b34778b46757c8150a6d78aa5c1270907778379ae42698bed36610eb2991f12fec18d712fce37e7eb12737b33b7ef789dd0fe6598295d8e977775d58eb91baa9e0fe0344621aafa85bdc8d8e60f74fdeb6ae5611634fd267a000b859fb58e260760639b6394dc74448c083a47b361b4fac651aa757de13c9d4a87e8dd258aea77f28954d78a54f3689ba9b30393ddd4c6ad346c21fffa314a86c2bb7fcda0de42b57ca7a58cd31703f65aff66c7abcbb19688d8d817aa0899f2a5ec4861762d60f936db49c297109fb00110642df84c4cd14ecc1d0b9bf73a93f566c6f998d5bba10a69998b30595e42048b65c4d980a621a1016c9d9d5616a18baee2ff242f213144526c10a303b43f7ff8b6c3cc80142f2af0c2d846e945ac9eedd3a3ce5e396dfba2f4dfe4825b0e9ae95e31b829e7223ff4ce4028db588844e98dd0585a9912b5d795ca62636b49e9a350dca19a19a279be5907cf8eb6a66b96969eac1dd80121883d9e08be321f898a01c6447c4328be1c2bafa193e63581ee701b415bc21641353a1a8b542cc27513d4b5c1f1ba28d98946a25bde36adbdcb2148d5d95c76b2e98a63b8e6238fac0ce4bbf0197d6ad562a0796acc7568a6d2d08627255909bd9cf5668fbd39bc93b0e323f72d10ef5431cd20b40980117da1fae50dd7a2372a28619bec265114c4d034c7ff5643d23777d36de3402735d6f106d1573556a21c056d080953e3091d7b49416acc4def05a7996429c83889be003c418987cc2206e5e321b939708e895d6389be44b05ce572b65e6a665ce093d7a92c08058d88b456cb77569fafe694567dc67f8674ad9e3d43ec3d31109e2c09a466719671253e4f92c869920cae88fc891df9b74bd0367f6efebbfd869ffc40cb5d50e913098b10b93c35059adba88038ab531cffee7e41258b8cc50c3b9ab85aaea8d23e868c0d1a28c67af4465f37cecec07871d9d3209bf776547d7847b9a8d2a59d6f9daeaf7fc85fe60d40863c1cb1b01ce797424cbbe73dd256c462ebfa467ecabf113bafe029cf3f157f75e69ebb0943a00e0dc206d82768eac4c99ea879d43fd324e673f4440c4bf07fdf337a0976a9ac44a054efae842d7a512b7274c30498951cf4cb1e047dd1058b61a2195838d1b2fcaca6237baac7c7ff48303adaf49178b2b43fe5f8e3b35dbfe9edf212f0a074bb193c1f2105c310ff4aaf2979ff580bec511bac69ca1743dfe28ef1e715e06f5f05e5c46541fe03318a700604105a28613fada6ca68c71b54149d446b42b4ca9f780e573da891f3c1c7ea1e2d6d57f8c62013595583478bfc4d51e0dce54a882085e800730a81a08a00ef6060e27e02b3abf0c75a758d4798f3aabff673c690a99b171bd984f1aa981e592db68beff1d0455121e800c42b0a01d6cff42fef71136821ad24f03c95419af86c6dde5e09cbb3288d1f670165b52dc6b22d1da92ff1c8c11d180666c927ba6624068d826068e65cbb485821f18f9cb78582c1a89b3c1352f2b0f36de4d7157f388b3412bbbdf53ff40dfed0e8a8a962ef88af481e0c696150f3cee3e81de986088e523a7ad50899fbc0bcc0ffa0999b360bb00dbc7a3ea4a83811dfdfa7e7ab61e4a1d67d4850a13fe17a4aba89063bc34a6453d9d780531f4398ae2f1c115c249e324005692db4eef11f9ee9351f88f9da7772c270f51d4401c546f08f49aa55048cb9e1b6e29852ee6467d327177c9b9d099c5c94e7fe14b435c8551ec74fb170bfae81c405ac36e21049af7c57fdaf25a09d30d88e632444759a025e851ab290a34ac2ab018736c00701dfba9159ffe6c200b444a51495c91e1942be75a4739ad70a728bfa2835edf5cccdb0688f2354f847774315fa0bba0df5501040ac94aa754e1dee23075b2222a363287b4655d2cf0776516d50f4bd571b79b149d8c653094a53b9e8e6ac46d7c7a8467eaada6c4ea490c0a1ba213e120a0eabfb9b1463e6c652ee1f02c3e4823ff6d90114dc1192df1c92dd81577ebae42c146dbdc83299bdb8ac26e1e51498775e3c09a416b9caba6cb26cfb9069d9c36c6c374dc635dadad681698199113e58ba5359a7a121812aabbcf39ad2a64ccf711863ce8d56282ad0e23542a708993f5ed83f34cd3857ae303d20858508aa534cb6ab9904d4b51649e19f62bf46b8d1c7870f457c6f5f4eb9d73bae2cc26c4308036ebca21880db4ff292bb4a45093de456cc80382a29f887f446671a35bec6eb4db32a88169a6081388a00d88b4084fa4f1f4173529471688aeba65608c1b0714744017850489cea05d1a4844633315e8cee0478f6ab51adb1b674946b2094cb14c16b2339124e0f9f3cd68f84baff9c985a25864fbcd56ccca2c7315d14fae93e1df59fde0b118c67f922f23da8149a8a8475e46935cc24710fe1e2f77551669c498c730725d988fb599ef3b5c95f48946da16e8d4fc25fda1ead59b95b6f26c45dfc25bf0ed82fd2ad7f24dd5c3c05cb54191350792c44ba28796124e881198f1ba0f8f3acde07d9bc9937a037ac085d82bff9286d3ccd947f5af661f2f8b0a42450c7d20d042d3d8ce4b36043c087a98c11f376854db36301a2ba547778968c56927fdfaf570f6b11c71274384e1b980d6bf10b25975b9b0e467eda7782c40a38236b468af5c32b82e706604a685a7930f120a7a19e86f09b141233136a3298685c69953165a1b273db90fdee81a8871e932688969458e3769b34535349d850326dcbe2c2f106e491b2b306c1ad477e2c6c526a888d018b1b2073fcd874a0a42b42cd98fa9588fa5da15868a4301f9a580fe92354baec7990d5daf1f00dceb3e4c1c01fff309cfdd17cdf5b425d7c0deca7b40b0ebb42e23f4f88c84a6eda2d0d65253c93d88269d2a98bc02f195fb8fd8b7cd62028e8d77c79d51b8161029776ef216825c399c3a04ca7e7a8f1a3bd9ed39e584e4e5ac535d6b4047168cd9fb1fe8c117f5048671c18a29c0cac22c29f0ef938879df659ed122878b4cf30a960b2273f8c9d1397b6cbf83ce95882cf3efaaa8fcaaab7a1973ab62fd2b8726431bb011953e94ffcf995dfde431342d331ca9f742328426ea65a9b746cfb8cb7fbdb44eddeb89911ef244ff5d0ba249fc50aec206112262d43d1d7645ef9cfbd538c79f0fea6a093de23ce2732ebf2b3e5a35ae26d657bc8debdff2f4e9b7ae6c380227406ac752123be71ed4cceaaacd06f418a40f87ab75c1bdee7cc288a2f783a9706ebd6b532e31d09355ef669d41989456857c1f1ed0163d545a268763421c0358e1eaae621d4accdb45e7a658c4c4b620ae2256218bfad1d4fdf9869daf39c77d6eb2c86f9e9626cee4e9510d0b69d6ed926eedde25f180f5708ccb56d6383c78767b3c12ec46e37d0fde18a5d5bd683367a8d0dd6bdc821e892d84c64030ae2befd926afd2d8bec22157a581b04c9e45aa05b503e8ca18bbac294278ce8ffbce8f6a8160f32455f352e661624f4e8d55d13432753c0ee33827faa3d0763fb4b26e906c1db77094cff98b3f07f73746d234f96c7391e62a667cc9d76e5fede6319d26ea8fa1c633fcb81f0b9d2ab4ef0e9856e5ea5326c31e660b4f6ad2ffcde444072dfbd13fc6596a8bbd8fe603202f0190a63074ad17fa97236fa0c5eeff559cdd8821dace07b9ae9ea24e2c484e99085150f2e4b3c6b4bad925d59387c279a28da897fe8ce8a27d91135fd3caa0eab1263a97aa4879dfb9ea93a38a1af1b54f86e0b7603278acaa961c3ddf354ae4eb48c2006144de95f3f827ee57ffb6b88014400d5eefb30c0338b9044bdad6abf265bf8a5a62160214e4fd4b2ac738f7a38c091d294b8101dee83440078604de16c83369c3b77834d5f03300380d2ded3ef38a38ad311e86ff19787ed4405b18fa45596eade3a6c97aa1459c8698d93c2e394040912af00e878124c4c9e8c00f1e96874c6f429f91cc573c8e7fadbcde72edd08e5ee03a30c0a7903e09d10e66b4c824f73c00fb154704329ef5bee35ac10457264b0efdb0b0171048a3fff49c9acb86401432d4c4ec1188c8b98c2f3d88381c7370fbb4cc093f76b40098aaf1e4e7d25233e1a7e8de917dc567a7cc2f05e24550242a4ae3e9ccf73dd16d5e087953fa7d6ca705ce886bb6e170e070dacf14f3e6c6c135bc4d437a3231fec1565626469c8e09e3ecc9d4b473eade8376407b81414bebb3f3163ad711499a770c862a16eb30a0d2d769c936976f0c23d30c96e7b67b0e7707d56ece63014ea17eee9026a63d690adf8d864ea2565ad181866204a735416d3c16e8676b9330b12d9db4375f0f3494a69d126d1354b71e6828ae92003ed3f4382f80c2f4012610bcae7218989479dfa4d746257b7bcdb1232da9188cfe5d2823c99a01ac5b208cad98cce2bd64dd401b4964f2e0d8cb504d35ac8d9b671f554c615fed38cf2ad3ecd79e48822c3a480b138a0a5b7188594220e016acb6d85bcdb062b495a4c2e85262618165e4b8683a39642a2848de6b1b549484e5c0b65d3d9249768f7239f7c3f5ffd8ba18b0ea90e4b79329b1906d53896c568e951239a6a2402340587d8a42a8fc9741badab38ffbd80c80fd8b4ee9f9ee15e21b8a71605675531923163603611b3bce6d52c3735d40e4c75285552b9c39d472ac3d32decf71ae6a4a7a9d8bc4e5e055f6f386e82f8d316e2dcd2102cd3b46fd3b4985e36b74b6b33e88de2f5b949df8172bfe612fcdb4e495b4eacbd20535b0348f033877757d3e8674f48a68d5d635d908d8622d7abaa6de618b869520e33fcc57ed875cc2f32af98beef37a24280251632df45a3b391f538ee74a8d8a0f37bfc5106fd0f0f9886166533bfcf1ec44aa5527f853cd572c0aa4d2a2069d1853a274618d0dcd4dc993776e0dd7a27eae829f0f23eb27eaf55f95340574f268496a218043d9b4890cbbaa2851acde25815440cc446d4e5cc355f8bc6577402668d8a208280e33c6879fad340a7e2a39a89f17ffd40ac0048cd16a4160f2a558be5bdd6d25277a743f04de26c0d5854d407dbac8e5269fec0065fe451522745af735bce22ea91c313d7376c3e32a2bed5941d09400b34869cbe29e88e7fb580c2a8a1e45a0d9f425019604da2e68a3f52efdeab64eee6651ec335ded055ed6be82c28b85e643a2b402a7b0d9b95dc80915d2980ab0486ec26bf14405cfe3a43d4ac9362ffd4d6bb83268a3fbbad37034afeb28d1b60fb0751a1c987104c5f9ce8199d9768e10ca3055d1a71387fb7dc9e2984604120772540349421a30e00282fb9582b69c0ea513acd49a02aca29b2dc4905f28228086dcd6624b9653099b9c4e04e32aae3773825f6626a23346b0c25bc5c55aea87fa63094616be63cfb3dfeac0341d88827bee355751b3cc1270eb909812a361a78bc1617b1b7914bbf01d3ebb6a4b6bef602951c7ca7003586aec9949d1be5c9991861a50a89e19804adc4f6465869bccb4f331b0c01e07c3cae839ea60219b27941bf39981bc3faf97272707ba5b2f8cabc14b7ed55999618deba6e07023544f0e71928833219321261e6311f09128e07b86366405a7d36ace5b6854dee9e3f5c4ab629a7c0d792f07160d5786bdab50c21de1522e63f66200c2e117fc1dcd2f38229f56ccd4ba06aaa84de6094ef4b472aafd66cb6bdfb573ac49ebd7399065988165e56e8272bad446d4265ed570755aa7f25c46c00c02b4e9d1585f369bf6eea82d7aa7d33f321e0127151d5b2758fb20c13a0ad39b702b37f3357f56126c4867e7c526aa457c1c276fb5f523d0cd1c620c5a266ae38329ec37297b16598454f24fde3e5bc7750fb43909c98d2e027dacfde38f1dec0e739a51a016d9ee31670ba10d33f2805994dee00b21c5299376335c3d374183e610a23c5fa097c20af088aee44fce07ab845c294cf630592b9c3d8e7c887e0760e869b67b7b8e022202921625b86eb4944591d8c0c98a41fbac528f05d2a4d5c85940ab7cb77ea343296e74be816e804519ffa6fe4b20cd53c895b29b4c3cf2dcaf1a33afde130ea7bd6b13ca792d72f1fea60b2980d6765cbe1d7d79437373a822d88f09c18d14a40a991e13486c5543f1e87917a9f0ed04079a992005c1850a236fba44bdc1168649bf9a1b58292913796542566c1244a54b25adeba25e3d668cbf66efaa5fdc06a94c34a833233c3327421b3ca70a4e183411e73536dcafa99f15288e6a8763c1614169ffea7228f54767ab283f626c74be9ad657ef8eca666cbb3576437233467e890a044a020f987455e403e5a1271c25cdaab018c96cd65ad0d6aa96b27b4fb62b19d914a4e71bdcbbf3f6c87854622e52af7cc4999732363096c124ca647548256b7fd1b59a23e61867e4dd1e8506e8c910f99c4f601b12d6097bccf279e4dbb3fcc692012b7188cac1761e86677898a3f6155455ff9bcc637d6dcfc8bd1cae1ba1f89adab0213bcbd062366b9e60812a9a706fa92e80a1d2a4b6d648ee0a8d1b78cfc3a7dddd568c475d26ce9f5830b3c58479494eb3731ef8e575df92db88ebd707725a77997e8590f625972c81d40b3a523fd2f062f558ca0e6d90cf7b58f1a4c6b74d6b86814bc9eadf2492239ae563e0c511399e8d451af49571fa49ab7f233f1f2b46f710730d67f5a4b4a1af60f63d64e1e3cddab829828147c4085124a7f0199198c83ba783a54ed65935cc5a21857c04910a10ead7e0c0a0d8544da1a5a54e742402091dfd660a4da8b24c74d47ccbd8fde7bd2e8d6c0c7b8d58ba93e20650e18e5343e84f196fbbbeece3041d297826cfc6e1d1fa583e836d6283ee63405d638edb8841e832e5ae9f7474736d996076f7af8fb95dd5db20e2307ec5e8ec532951ebb545608c605cadce4fa9e95f7ac11fb35bb21c1ecf76d9c96737f6b8aa5e7db0eaf90087044e8ef3e7feaac50bacb09c410c021abb80c0647803f775f138f11c4a362109e5284141a267fdb53af0090c28d8b77bea548435491de2112e8a68a91356f9d877073205255e41150f646b30d2603fb841e59e66e4fcacb79429dc0d2b47d384fd9050efca82ca719aa3430968db165ab28f64a7ce731d2d735ea01a3daacb1975a2133793a038a395ab2a403e7a019f0cacdf7c2a40605eba20223e61bfd930bdd5aac427895bd1768dca767ab59d4e323af3ab6839fe9bfbb74aae52b4dcc1ce94aa32a0c6897797fe54e59b8cd573c64c225e4847e255332a5ead9233b5e4302e68634eaa391f7aa19a5521a9ca7edb06c074ab71da97e5ef023568e3d1715b89fba1a53cf48620596a38add4c9d4b239b598a9f15f0337ee6792063afb4cec655c3be17db2f0d09acd69ae27d64c262e8ec71765dde681c6c0f8ed1ace0268e4b10dca929faac3a2cab8cb45cef54d7da6851632dec82cf802bce6603c20247a39c20fcb377fdeebeccc8cb3759f734b968b2fd895a55a4685cc35b72b63fc149f5381b7ea3f82cbfd29b0f821850707dc20f4df51063fc2513848dac9d4e5baf1108a70504c5c063441c2786f1ec165c5754f751759689673186ece9d59dd80c13f0a244c001e08965e645ea51d0f8bc0121fa75484ffc308d6f857d23f6b2b8730897ce808ba2cf9cd11fcc75d490d1e1634d95b3f3bfe071f1c1949bd0c792e774fa0df6895ea8cc2268698080be15ed0c87f8765501317ed031a524a2b2b8868d06829a97ad8e0610ad74b67a465c72a9dd38cd56afe50c355510e463d6a54a6a1dad3120c0872c58921be97c6bbd4223428bec4565bbb2733489cd06006100c3665481af6598dddc4f98c436a28286e0dd4d23880a95ca80a31038c9b97973243ce8a8fd1f27574b32e2dabf31cbb5f489be36f2f37d05e80e3dc1184aac6e2de21f9a63adbccd96dd80d5818df4966029d47a96c6351c4bf99427d7d81ef4ea364cdbdad63e835a1c65a3d93f024acb15fc75d7992a6e5f1e9a791869d1912b7026c0a258e567e532de89127a8aae3ef0288b8f9eb14c9b791c6d88d6fd19024343cc421899844fc5835533c9ee4bb587c5b6fa5e69d4a4fe891bf4d9260ff955c3e211ec25e7c359cd8fa4609e3820e391145496fe975e30fae8a9dd3fd2da0f0f9e3a0f86318f8d761de5a7a7c8fd274cecd3fa9fca64736c4c25062a226bd68a0718a0721a2e04f5f33804fb28bf8c687627b4f4356843e911b105c4d7a2314c1759285fe8668400554cbe20ab405f8c84a285e99fa3f7f9e7e64529442ac1191afa1e0248b2d20ff7c316d7814644e69848e0ef9184b3c4a60fcefc1101e6d04cd3c93ca400a1399d9fcc4911b4c832e00983c15b56481634a63fe01338cd969a278f6a3e9319b74e13c5445c3c107570c88c7979439b63aead0e6e322f3dfd9d270525c173e51822e29cb3acc38e60cf23397553ac16cb5de8c15aae87aa87a390b30ba21441c3bb315660ddd2d4375a99f122840b8d21817847cb78f6e2a8ff719f2fe4e0b6d7324789975e3806e3882b29a9bfd75dfc96fdfb504ebd66eefc7e7868e470b6fb39f1ccd14a6b107cbf3b534319462bd0bb928e7c213a695f77d6db509d334b588f0513bc88beab7e6f2bb0b4bc4bd7e7d1a03a39b9b588ba560c4cde2e548f9bc54a75f51c4d1b0a15cc853baeb67f30613d614e9ed32bca70d7d80aece74550d32bd8a22971ea38bdaaf6b1bc955aef975d4f221116eacdc99244fe1683de3dcc5be1af8660a9c2729a6065f3bb8bca6a49dab4abc87484d889a6ab1bad464d552d637f0f686f74d199eabecd5349caf8357950314dd8cd5ac96f5dc6790882a23652450e3f16978367980da953f302ae6258730639668b9ff88092cc5d2d8dde3ea3f52536c7f768f42040bf0a49d928cab273f8bb5898107d86313519062b782f66cf784cbda220151d6a20bd078e1b3480088e54ae4ddf88cbf2088b6793beb7d4f919fab1ffd0174035e511da62b9b34bc9ffcac51c8a52659221bc4bfa57b3807bc07ccf56b6507c79328f187276fff49c9f1427cea6186bd5638b27285232540cbd181b532111191847f2f608e3215396d8eebc4a3cde3d5449a9b1cdba4d03dfad9fdfc1041bf6fb74474413d5a43748b56927a94470d225266274e9b76698fabd5d9a9897032813a544dbf3204c4012af1f7deaaa477f955b99a9eba20c857176738a84daed1d6756a01ca01cffcbff810a900d3e1be0c4f8e44e4583568ff41924dbe17f10336d838b84dd30117de726d7f7c7430369b00a79f06900c41af4b547db3c62529ad169effc0d045be0ed8e285ff63d0e3ec94e1428dbaf7471926421cef5065230ddc17f7030f3719f4ac3c529f972ce1fea8ac75c3ce9c96a062fe074adffc62d15027eafc0515064a25fc3deb8c1d4577c7a77fc04d40234970ac86f972ce79273a6b9a542c137fe9bc64208482dc11242746dc6ee10363635ac5b5b3366614d073a36ea4a05e3482d006fecb08867fbcd09d74809d7bfada09f4f2d3ab33c4e4952977e403aac8c968381106d324ab002ab74c84d8d69ba93df244084bd171da41d0e190e05f3007b9919d4029f2ecae7a606a25ec80b88d7d0102b4c771f2df4229dce9545cd1996b33213573e46db67aaad9634b91d4d6e400584364cd6291b61073d0b708ca3bf1401c30ab25aa4803b11dcb7dbca1889479a002773799a930f7ffe66f32003a579091739ac9535c3eccc7a48ce2bf76f1f2da5e177467e55845a84c9005792a4b38e8b0f78a819ce245cf4d2280519df3695e7ccf9506b110e9e1f417e0dd13caa42c34e16341096ff00f3c6de14249b55755d586dd3a6d8dfc647d079a5a201c1b1428527175a3c919040d39646b3e12e481d31b731bf3d0a558340dad45d9b99491bc49ce40acda8a0847af6a941cea840225c92e4871086cbd2154e8d0c618e6f988364a68053783692744df1d8105e10c78cdf0c5c722811267d2a774d1a5ea86b07d26d9ad1c36e67e145c7e41c835107282ea3d7a8f68979713720783e8cd09c7c6ecbdbad5bec720efac8c417569df5ac955c0997578749c6010c0329e79111034c75ae8a3af05634f004449e25c05169ead2ea807f01c793f8e67e6e53799b6e12cb4b2d40b92cc251667cd01b23b7e5800678b42271fe09a2bef3438ab6f884dce57506d76912e478e08b5e5eb8ef94ac18922b558cfaf700e5cad2825f5d75618488cdabb428e4e9c93a173e5bc98d054c59251ed3a401b1428102aef34dc452eeb3555137bc3a8f95d66120bea9cf3cd70ffd2fd1293867f1c45bc9d97dafb800eeff35fb8288cf1353ddd04b5b71d491d8d86da7f5ea28c11c07dbad3a2f7c085a1834c847f564e4025f4da296f8089da7c81cd09b43d38ef6d37dccea0d983b214136e6652650224ac6a0870670832d708b87425a2fa4c2ac41d9d6024099a27efb218a198571b976a8cd37de2c157e93370e81da53e3d35ec482d9870a07caa3bc776e7a1eb77956e99411ea00bf032a420baa07343334516bae42f11913eb467648656d88988a9cf2e18321e1a10a5f5a8e5d0662b2f61ede2c76355219552eec89027256f7a00f17a601ba685d2f176432678c7194474bab793e6cff35f71be1d4226f50205c94d6d9cf775774b491d38f098265264c2bc42abc2b56de06cfabd3fbc3bc4f50eac981b8cd7efc9292224280a77041d0e01241a0701279ff3a941310a749dd9c12f2df8801e4f7646d24a36cd56aca439bb09422d451c4acfb010f66dc6d2848dd5f3bd483b1cb89d690bf07f5b63d314e4a903ff9a336d6c7bea914649756cb40f34328af7fa36721d571704b0833ccdb87b4dc22c715d0cdd4e610cb278ec901b8fd2bad7542cde4294e305faa027a5300e4e2db32b1f0e1b16e1c5b567e7790981a4e3129a3be809133cf5d464e8d931a43a6377e169de4df923f1d6f731018e091e6623936edd38347090b86bbc1ab3bce2d4289db07cc64a11d9b532d1c38c965e1d85eeb775a43ade2c96ef2f81f2278d68e6776c61cc3a360e9320419744f4fc317d83a403d772f03d5fc7755a4c85ba4add6c812f725ad550a1313f5a0485ae63ae73c3e8c42c4241b08a87851393ca73fba4cf63b19109ead8dd50d7eea8cc382b225e5f5c74cf3c857e39730e9c574baf020f1df63c93986a58f3e984b17f2f76b47ad4adf7cca2f29900ae23dcc6e0933853fd0dba9ad9f9b01a3707cd927ad07f48a328194f9e769c6167528bb43d76c18f410483b7eb08cebcaa50c898d3ac1e81930a2ed482c121540a65f090a2f9d3cda52deee6dc708f9456e3ee771cd278b940752715d014c8204e0ca7a738ffc46a4c19cc4710b91b9abb00d2c51db39fe639cca2dbc29457978b3a5e52a957d68b8709e47a3cfecda524546cb849a0a22bc464515d7f8f0d5d5f0fc036242c9e4ac5fb5d2f76ea34ae2b2e16464df2966d2a4f96ac73b202c2ae81463f47563787f2c26cad6f080384b4f497dc52a21f3cf0f9f1f459f9fc504977f222e748163268d47173ff4a8d960366141ddedff652e9954ab4a0a3bfbbc5568379bc9653bd49a7190ca82b0d090eb6cc180b10a835a9b24bc8f5b66435ce12eb7416505a1c99fc50495b7058de7852a51a12d27b8d964c834a10d710465d97646e81b717fdb24b7376464938dc12e9efa1d419b00cf162497dd9aae9e39ed3c64a41858605719e2cf0cd004eff77263aeff4a923ddd94725b9db1f12af26e682dfff2046dd7463f25b875b53ff6b5ae95f69a7536e5c655df02f0bb9faa89a4985e317d0b0d4656fa604707cae10b6491c502a573bb5534f747032fe8d7aaff8599609f1c23700389b6a2bf7778a828db3d0b4747aa2ec1b212e4d58279ae2390a44c5a86d2fdb7a6c1b77047adfc598a6150999c0212e8e856321f9670644389695473f13b25547d25cb422019b26288c846a2e5d501201106386eea166435cdef63c526e499aeaceaa36495e907bb11fcae14f9f3c5230457760eb3245d475a811c768103fc49ad1d7b7a011206d7c0f0b8666ccf56a37d93adab1ad9ad48ed50754ea660007495bcfeb0daa44a8a21a0ea79676b82c44d5617f5a45fb2da8cc71c00b0451dfe9674dd3409f4271ae52743a3f16057f48a23ffe2dad1728cac4b51e15f1be681c2aa240eabd7d9e9fddc2a3b8196a4f43864abbd580b6d2b03dc738dbadd7e8e1de886f42ecd515e7dd4028437ccc8aa51c8f8f4a859490141b7c6114929b1e41d56426e504edabe747df851d998a41819beab2e495825b93b7d388228d8ea0abac694abb9a4527cdb59e711e05e55fd644dec46e096ba24b1cbde046593255081de22874adc8c5858b3bf8b930fc0300cb87b1fb543dba3c68e86ce49be908cc6fdb8c2949900f5ae606dfcd530714a67812b6490c2ef7900036229786140f720002268f2f99cc0698c321a4efd23f52be74a81850181390a571b35f3d736402f8ead05fa19e16f96051cf9f3039f82ddd80d11e28d895173e50f4a3a9dcb25ee95f87442f7c50be41bf009b605b7b3e2ddfa206f14f0e28b537f007259ae4be452dcdbc9abc9e1de2db29e0302c965b1d4b71cb6a0241a399b1388beeefa7dc904921017cf78201c763b5ee4495ecd69944304744f5da44edccefc2a5a95032886d890c8d9195e84ec8509c0c911fe754cd501862a0af3a929600c824b015b20444d68221214f90c93a92f5c783d8b4a2d2ae5715d9475493c4950df4f39f82596690f5b862b4db7bab4f69e86564498ccce84dc85394cc916d915228d9a1ad912f213257daeca1305a31b9350fb46a726b9668a5e4cabef1e684be408756494e7d465b9a0d4a703e4213a99a210a59295d9b0559975c9bc2c075d38f09202dcfd9943ac29e1bb828e3108d28bfdbbe30a5e9ee168fab966f3d708f9f9c1b3cfdbd45817cab43ef56ed145aaa69a336b90f0568793a204fcbabb3a5b2c536133b863e8769025143343d2f5cbbb6a69e5042866ce225f410dd303753e13f3ff9e75951ecd42eccec28c9cfc6cf585d12736a88c01606f9d5c08e3318f40c4da1900b666428ea9de135e624841e3353874fa1fb88ff7a65968141508331e18c0ce0a1373d33f2b5f548c4d2a8d302d098f7ab1069549d512a91ee363dd74a91d633ee86603c4e8dccb94b39f1ad16065644028815692309e0c5a5ada7c370b885e677d27fa98385b93b2814c2387aaac354103237dd4127e47485bd941fa9737bc4aacc93c6d0cddc779f63fdb23abb4fa595d342cea4c68e67f5d125f034612ddf0b6ae9fd1d6f7953bd6e0ee44a442d8ad168e8c5e8d704d0e1d5042d6901d1a86e7f4f84c30f5db10f914344f904d73c181069cfc6105c6216fe2f8f5fcb70fe601e4546b285987e74d8c271cb0cdde9b8c5cc0b1dd9a80a496c01dc59ef14ee608fb7012894d86fb5b369f995109406f7313f96fb46fab9f7fbc4b8b84637b3bb1fa7ca6643a871441baf32dfd3fcc52372fb462702f4e2cd853b5c7a1ff20ce5c5670199e26fd0cf6c1e80ba2863ab38d11610ad77699c2ca6aa43e026a8ab113cb247ba60836aaa9f3feab4266f718bab44a340d86ab0ffeb8bde9e4d922815d46d70012726ab2cb56cfb38fd3a56e76af7796c7bb97b792dc6bd9f5df58f8838323713e6dbe3f9dac7ff6082e1d0c3775d92580a7626f7a7a2dd862623bbe8cc2e0be14532eb70743994c2652ad06866dd795ceaf7c9dc24642c04a9b4ae60d0ee2175bb48763c20114e661c6f3fadd7971b8d3e8128811ff08cee8d4423b2b4a83120d35147c2cd610b2ff68f4390ef656041cc23c779407a3dd6b9540a6aca13465984399b17f76abf38d6c0d046723f868990279253463eb0a91fc6f15df852f2d9aa4548979035bdcb277014d9f7e33627db917934879f28945512f466cc89f305301a95a2a99c6e67612a7c05a37d021b98e83c776ae97f1916a3199d4e2bbba95eb8e803b2db7ed56d955b3848cb3ba5327670a93838797af12184180aff222f06b11f9df0540e6a8f0a502120ccad4e750dc8a846a1bef03697e2f57db5771f42e6c19b0291110275e086c551861aab4b6002f79e6fe1a518c4389c6ea66f2bc273d35960507aeb0d8b9b51069be016c87063bc8a38930c5b82ac4591acb1f3fb3614e17d59cb36e3521b5802a62228e181846b08403a3748d85d8406bd079af26029a67f038fa0fc3d71cd4282c0fbab0cb9b92a6b147ee0c2a5ce1181add8b0a8248ea1ca303aa3fa936841dce4cc7a51578c57d9ff688e8b0fc984034eaed020c3b3203f24b5c6f8dbb5148579589617418fbe6088273eae9ca94d94d53b7f2524ade44f278fd301c7ca6ab310193b57ade9917ea9f45f3a4d99b1452afa9a96526987cc44bc2ea9b00a6ea976f73d2c1a3701a88bc888aaa5640cd64446494a58496e26ca4170b5f2ae42b12b0cceea304eabd080ba8f42fd02b690e8c4c212ffd6d6dabdc6dba623bb51033051eb4928356ba15bf581458f4960e1767a05306b54d57f2d54426c3e968928ec839d38825c7f00e3201a428c716aca67ed7f7dc68ec6c3ecb2ffd27fa804323684885a9e0e90465dd02e566154090ee9707d395b37d8daa937888a79cd62c323a8492e248c8e71047a1ff04f5c2cc247165022dd45603fb09092b4dd922f3418c38dd20d691de6ae3a1897cf12986aa21d960e91413067a9a440b3a371535ea97556ed5148c3837fa5ed2c02c3b388b4ba8e50f36b527ff783a5085f563103400b79802bc3aa1681582c260cf73b2aba257eefb6152bd3077ba57751a65fee701a7fdc8eaa0f3beec8ae26cec861d5049ed6c33ecc4b2b43b9ddcaf3cce0b37859a91958006086ace6de399e838a38f07dda7409132130487598c17c738f9da7ad250d723c4fa642f1c0a2e46f3cbe37ab466d2e54d4fa3270b9a43ac0e140923c93d39791d4c9ccfa1e907d7f172121d929018f5a641969016094c33cbf5a26fc27babeef8b28b9bcadf444b5ee5bb9dee9c045c32bc1a90971de30e5fa300516c4548743ad6df19b2fc67f01c281b24a9c5b393c56951bfe682cca4316b39dc299de00a0ae8ff7c6dd7d795f11a3b90e194391394eb13cfd8de6b9b257de4124340d735c0b38c35e38a37e930b040af15ef75903042225bfcc4e814dc96433cfdf8ca988c592c067fb1f21ad2e4ae5154ba727b1c07a29716dc13b9357797db1e852210384b8d00bda9d9c6bfc5ebc04cb6f34676450baf8f58b934895fa9582a16b1b37aaa8f5481cc17566e1cfd4bf6c3dcbb462570314f442f32c2818f9f0a670f820c7c7632462c5c0706d7079eb05c9599790b7344cb056841284b9f8426b33cc4cd0349530d837600704ec213591abb06f259a1c814b5cf508e2edf042f12ce49804491505a60331837171b15d47cbab3372a87158d453660404b91a5325b01192fe34fdde21a8ca87ab51ce9a806948939020e26f3fc281efe4ff00fb55c6260c87b030e932a3df431e73f1c96015ff0654a44271b0bf7bb8fd2a26bb8446a4d8830936790713f56f32db64bf30d839e6958ab927800ed63750e657c04d647997b664033181598d0c709f9f3e546a43a2efe4d389b7e3183bdf3c85643d615c3d8bb13308537944fe009ec89758829d40148af6ac710fecc04aed9e5bd84c4131eb49b8212c0bb42c20a64480c7505c7d5ae0dbe3092dfe71567b0f302a1863d54a46eb65837d55bb22e27431f63198c68b1c1e13980158a02e7effcc7c4e6e88f7b64179f9c54a90cf82cf1174da9336c6086cfe3b6998fd7fd1786a2b6914b5b0b057eb8c9d15ce5cf8b6d27accb3accd8aa41c522be00166820c10202b89abe63f2c58033f2c8c4b6b9ff4481a3d5ee17536e626e134b3e3cf162352e43491f422c7d22aca563432640243e1587dcd42977b7f76ce1da0c4202f3b3aebf84ca9bc0aeebe9d064b75c98ca9ec05a6d30ca4ac5e80650dc409b35c69263d4becd14867af50242920d814a9b4786cf4313cf8bb1f0ab0b4cec07222f4075f0a7d2b3b9d1063da0bb66bdbb29bcd545c347a240d873ebcad0b2ae167505efe6507d41656a943c4c5685339a7507ff929ec9a38da6259bc6e7057cfbac11e79b25860835bcd4670fe1a5731dc3c363604a13905cf378d419722890de908eb5d6dca5cb04e0f6b92448fa036cb2c44781c1260085fe454a19f2aac8134dd21d16fb3116b586c3695187e91cf5b845d76d96a49bb6ce06d02b862603205995b3606e4f403e4c4e37504762539f456fe65cc41222945950575d4b6557e1bc5af5e2a350811c80660ea82e59dde3059d37c07ac3af647dc06e51d2afbe0302c313902bb00bfc021f555c4571c567c03338e40712abc45dff0e2063ccfbcca5460b1638343185e898131fcf620f43cc495e338ffcca363af3f74a7b787eea14d4cea04676b49278afb179042f33e2d5b4620c95335a12413291d6e20c55407cc1f79c60d4a4cfc50a8c35daa75ec804a369fd6e1cd9feabbce312eb93db4852350673c74685734cfe0eb873f4bdca806d1a15dc61d0020e0ed0e920a254812f3dbd1298df32488f046818c96c21c54cde7660be6eae1c082d09de5f4eda8ea99878f4974a54022fa8df2302d68edbcdb6a9d355a4885856d08d0a5939f376c692cdacd12e4449c95f5f8260fda179f68ae760467d3bae913fdea925c635318b7e154a14897e9141b7a93dc257f45f9a329e916e03e5323c88d64998cf52df4f121923fac7a3f82bd509e1c64f5b3bddc34ce44e8540bbc8aeed7e31ff9ab900dc5aac0d8e8aac9ad05c542f8b49fdad1f80b79ca3d235a468a96bf30d5ff29ff21840088f60288afd4ee12460713d3029b73389effb090964ce68957242b29e7d41bc1079e4221362bdc987d37ab086de774449c0c2e6fa2cbe89d18eb42ba7571343e24251ee86916c25115278671202c6f9d2e0cc41b6979e99f9528bc9c4190ecf8d6d3c0378846a60ebc8b0d832f7595b165a568b350e4712d74ed6a3e8d16875ec62fdf3914865150989837715308ba677a554eced9f2c8fa0f38cfc63872cb36f614e184cf96a8237f09bee6f62d488e6b78f1ce0b4d4e4b60db89a5beca8aed4b84ef6fcbb15d289e7480028c36f495aa9981c4a838f0c69ebddacba7509c01a9a949c5973ef2bbb0e0a6981428de856f11cb84358ff7fae3f577483c7d7cd80ec58bfcf9131f63d3ff8e1dc37d45a1b26e89479cc7301c66f34570970887f29156766095d6bae6cce1cfc707a7cee152842e75e5111bbe0f0e7e83d6a86d7935bf43a93c6bf8415c42a7fc51d828379f3a1f27c0eee839e2cff70258d38a925c38582a57eaf9e2949dc7b84099945b7530bfe74be6dacf4a6c22347131fac90c7d200c7386c2983ee7d7a7399a2b744d9a29cf35c961c8e54b2cae8998fe2a0b3bf7e44283fb3ff69d0ef37157d4716b264be3ebbd00b64e281ef3e80503009740daad846304d2b5d08309db8890ff84a2c8c205735cc00ab8b8a7b37eab418c2df03e585c6f9ab097dae9e3f0539b9d7ba7c6e001112e49108b9a01cfbd4f35952bd6a1871453773606b2f1991ecca51da9a0832e500995bfc94cee1a4a56c3ca2a55107eb9b5fd89d761e18e251b190f368035f3c1c60b38838c5e75eead137a75368aad908eea166a4c25bc0a0aeb7fe8452c023463d8442e12c8a77f826c258290922104f95ca570ff5a37a4979a30ed3ffbfa3ef893bb39a6cecd92699681921797a449b4bbb091f8ee572cae8a4b5dfc27d26b121ae0da882061b629cb429e60e796e6c417685a1ba8d98ab3dae63221b5a5a711b898448b8b24cd6c9addee6964d5434de960f4ed1ec8dc784fda44217e3e2a580c82f979a4726011ac7674491f63e40a3f61b2e330341668334d16cc886b7c28dcaf6420b36b5cb1b626e5db2462e966724064cbcda6f24706db8d8094e9c6a042cc502b4e37e533d2c43ff2a1ee09aa0385efdca5feb5a3e72283c8d9013bb621a4a5147a174ccacc4a552da16eefa00307009650d6f4086f91237d40e9ec99ba10e9dc8b7715bfcde18e43a8730ca9cf7ee912895a5e8aab78801c5ec0878a527ab3e9f83c5c26cc9e1e508e27387a98c0f7f50b7b161f3fd4402fb300399fc9ece1e901b845c1eab44893a93a4bc6e608873709cf80fed6a1575c7ef0d80fa87878f4f1d996bcdeaf2881779c0cb16ffd29bd9c4dbee6d3664aa2ccaf301b4c954d168ef4a8bcc739344647fc831a1670081caa093252ea6ba0515aea33c826d2e6505c504b52aa1a8f191df9bf4d33c724ba8667f37f2966b09c3fe63adda78d97fb83c0f4e7a0dcbf442c1b1dc4ac3aca1cad831dd5d98db10317aab3d4c4c8d8978e7fe8e34fe2878e1f945bdf7809868955f0ae568724ac6a65bd326c8b04591c836840a1fef0e59a4916006af01b7bef1c048aea0394db027ac94d5b593092b24a0755043685e5952238ecb64d81f72a0dab095c29af1389d86cb2fc4cc5a79914a75fa902307e995d8563fdd17dfc9f9af9b050f5d46f6277e9af0e507c6f5a1ab7f0bb7d18e161a847a0aa59b237d952ca94644a325a057d05e705b067e5e6c2d68fd126106f2b907a0cfb05c252d8cf3081f621e0fa4c5b204e61cf408f79e4476c7b0f01db5e5f03256ab05682bed562b138ee7fb5a2143e2b49968012b5bd8d717bbc034a2eb07e3b63b7987b3f3777f7e1f1e7ebe18f72e75cade6c7c7a68c73bedc29fd1fcf8fdb9cfe8bb97b8b39a731905973ce9d72bf7fd6f77c9b49fc05e67943921462082f6af7929486b8e2dd481b8658a22b1a539fd210568628c26b9853872b0b26a3e814840852485d700061a134a52903caa28869d255f7980c5a50547d4a4eaca81d2b0a2752049972b4fce6931f945ad0c57c0f5fcfac1f7b89170aeb7654ca8494907ff46b3e8fd2ddd131e78e027b3838ed4d697bc6de306972bd94b5c315d9dd02a516ec50e1377c8cca91170254f8a8e95ebd3233431a2a8f4089ca33959999f9074f3145cd5b3932aaf0480740f0c065194bcb9220c8801203146b089161460c486471f2a48999056ac856edb21f9c549ea2f2cf1fc4a8fc31831006a21a36a776d92c630595bfb30c4248b4a4c225ad43890532547e8e210628251fc0a81cf3020c42f89d569fea09ca55d07d56814177f4866d0d150a87c01e9d97031f2aa0c2874e54f863874a073a84ff6b6f2a2974bfc39eccc01e8d9b0a9c03dfb7c7395d0178ba112a54c9a081a7035390f942e19c94422ad4a10f103e3383c1ddbdb5b06bd47f3abc0cc5faec300cd163ecd8eeee3efd6777cf8e9d45784d4dba3f2e3a0a05c3109e681a70af87bc2e19999a1a21297f5adddd2b04ab64b1200f1814a3654efa3033f2229e6c29a38cdddd9d310f26a71c408cd72503cdd2516cc1deedeeee49598b0bdab54cb0ca010d126282d7e3452bcc3e841aff2db3f3f4e1f1125ed2f10e6cc44b5ec74a580917bd6629bb8476656666de657e3a0b840ad16566412683f681168e4ab2184107ecfed3eaeece3295eae6a6e2a88195406a285098c78721a4400983e3b03368b739e4d0a491b29aa61310b57b77772f4f0b2ff0fa3ca776efeeee4ecd40a57c36a8f118ddddbd5f528d0b2174e6b2cdbb0c2133f33e6efb4198ed266a18a4fc69754b67c9ed5597a1f4e5282b082acfd999d195284668f7fe69c1f7ae4c540df433a386b0bbfb896c98537b2f67325c082184b07f8856f8ddb0217c1b2522226aa52d52ca96db105708bb7bce245ef4183bb6ffb4dcdd3716736f08739047fbbf65ce8cb878b1835b712de6613d8ee9e7b06a0b482895443770ef18e332338450cad804074c4444c43342f9c279777797c378d163ecd8eeeeee5f505f66861066469106a3671e778f1e7f5af31faa9fa06d42d7c662d40250715010d2046081adc380b79681ba94593ca65cc8fbd18cd8317af4dec17577c39e1491acf5be59f53d8c36e4fd6bb56ad782fcb8dab5b8b5d40da9fb461ec3e20c62c7e8d1bbbbdbe63dd7851b10124a2683c5cb031346a81d60105417f2176066a4859177bbbbbb5341fd3b56ac414a3fd61d605fd84884fa71fb0e02087475f7cd055f7ea1dd37899499514c81d1ef8831c69f5677f766994a7583b3a3ee801f941d413b16fdcca88b25c871ac9fa013aa6cc1256159626aaac23c4d4c9154a5bb7b4550bbab769cd4389803610d17b4db2276bb99af075c6a28ee40c895cf6971823084ccccde44b08bf6eed8d17770eeeecf4a67e55959e6ac3527a5abd53fc7b1582fca6d4e58c5306ac92b52060d416185a1d6fb72a5a9cbd3f3225b6b829f567777cb31d87365f5c33910b2e096dadc24fc94c018cc16d080ca4dc2d3d9efd101a9fc7076b79ece9210a4f2c32008832a4fed3d8f15564d8f701b6c168feb6a65465662c76e6f8f31c6e8fdee1e3dc65f6fdf5c88cc81c02bacf1614ac86b7bc7a713e39396b2bbbbb9478910f265ea87fc2891b4949b0bcdbc20e8bcf226e90007302041ed669ee6edd0af4183a2ea4bfd88d15a4042445461b4a744441a95534156a61a619e57371504fef4eb7a9f99615a3367c4ff08d116f9af91bbbbfbdb1d6d88397f234fc7bf060d3ae481d773819783c2d3f1df0283bf0d2ae8ac4f09091b20e1fe425807d8873d3bd6679f6e704d11568306c5eafb25afdbdd441a025e4e7f7f77b3584fa7883e5e081d03147ed752ca781f7c7f19947db2dd790fbf36a1418310b8f420061e5801048445104a5994a0c28a2980f675b1850728c2585ae29206d03ec75477774b70b3fa1e19249c5c574c1d5e208d885a1a4a301b55ee62063d3100c8020584a9c30ba411310600f5291d3183dab1b4c0acdf039ce5a6ea42278b81f53e1860802a27f049d6ebf3e01525f808823273e6a84fe9081e6ac79a4d34bda42e4c5f44f1c311482859a3074d4248269a8a7861dc6003d40d55c83033f36496e2059714484c5e26371c116fa812b3dad57347d050af1cc4268e10810d4710951024c4082f93ae5e477d4a466461c452ed3827aaf7dedb7d52c6247c06dddd5d234347905c5bb670ce92419fd336394153bb8539a76d5ac11297d703be1062a0a56e041e16295544e1c3141c408102e8bd9c9e62c40d5aa6e0208626eabe20064df531b755ca91a8bea53a6574e2065068914f67ad5891e5395121f3b6134f0bc47afbc9c07449aad4075f84813720e2a85f43b652f7e93c29eae3ddce420514b5210aa64b4283cafb6ea0843d9c0ebac07568d6ebe9c0ef20a449a24f890bb844eb532222c99f0e7c1a29885082d494aaf0b148247b7737aab242bf4bb00c1d461877b7a67182f27312368c86c4bf22c0596012b4eb2c89d85e2194dbeb8eac34279d5967b4676f74ae66a79a34e3581db20b3ecb541985dded57145c4303ed3a9b59b72bd5f744fd01870d3640b8de40f870eb6c205c8541bb48ac44756b6749dcbbdddd1d7a81e34b9195911416b41bea0a87c01e8c31c618632cc12e74dff69f4cfbb6fd5c99e8ac67b6bbdf31574008bba1ac50d6076380eed0575524ab37524ad92280bbbb0b21847ec3ddbd66d1fb06ec020504d72cf4cdd77c4da13caf6e1a1f555f0a6a1e873018bcbd3b1042f88030e1736243333cd02eab45b21aa3fba6ca8e546e23d41fb7c91ce6be3642abaab11ea5b2b05187bc3fcb54199567b8f7095c40bbde86b548e644a950b990d521674a69017b8c5415435b5555340e2150af43b0c2c705aeffb2b01955652b958e2ebbd92e6b08e1fba6ba893abeca192833e8bea7d3032a8a8d900b3f156e435e5bd4793c1d9e13b64f09fbe6c69999b9cd7dc6cebd67fc197f66334aea3c3f9bf35f659971bbdba8bd15c9587e8931c6c863636696eafa787dfff5cfc2b5111587baacf6c4be9b73ce4d8bf15573dae030776d5be366231463929aa4c22d493502c2e5ba5cbbee5e58f7dfa2491de2daeba4a92a53c58eb1bd3b1fc17e33b74dda820973d4c58752ca18e396b966236423b430bbb3df95eb428d85f9a93a2bd4e2dc1ecc8150504c847010737032f3d75e862cc5f74f20de1dbe537767c9cc5bf66047df18fb164ba96511db32945feefb1fa5546552faf3e8bdb207af7931341642122afc2415835ae735dbdacb305d086a6f4fd62fb28cb2f036ba02001874326703fadc6b73b6ef0329a3dc68ecb86545d02e8b727e27a594b32be2f1b3ef628c30c2542a957ad952314f6aebbe660f272afbf95846b38f2fe7c59773da08c5cd46a87bb915f9a95ee4a736b6f10becf5a8fdfaa198089959775096753307ab6b25643ebe7ba96e91cfdb4ff327bfa1dc8803d909063f5b1ff9fb30eba3c27eafe783a408f59b0ac210a67ea01ea6628c4458d0b739ac91b64b982b9a6177f8a586a47b43c0b1037ddf2d1111c3de96e82d4192d7ac41edde13383bde1b81d7f4a18881e406738226406a9e3c81c33184e239e50cf47aa0fe1d813d4631304f00df054f98c81da0ac5694c2947cc28489dc41ce39c613264ce40ed2cb132672079b24b80cdba39c170acb5230312a1b2b744538075f274d9af420450acd8c8d1b533aec25f38b93f512c3ee90607766646ee09047e676f1c1ee3ced4e9327198a633523ec25485492b609dfa4a428ae5cc9b2b4d4c4c444635635f3920ebb0c8fefaf8993263decce94a3232a484831303539e6151b2e41a29274c458ae90e18d246a483a86dd29e2a108e68a133e4aa584be62396c604f27dd0436993cd8dccc0bf615d8736d7009e7f0c32565388c934e3581599389f1702302ec99c3922564d0e56fcc09443599170f225cf06606d8c3c1b67d5e598ada58d5e4b0d15458a12bc255a850692229298a2b57b22c2d6900d0f101c099473eb03ece24194a93263eb014295376e7080648483a6e6c44d8771ec94a98235ac21c73d10dbbc3bba3031bd9d4ac7208600071a803ebe3bb5a9696b66062f2a2a9898b939397a7a7d50d1b38064000877186f5f12e3e4859292e60ee688f6080849404152a5792926cd0cca808c06546bc7f9b6ce044c5fb063cfec29fa5419130f7bcd4284b82dd296a02738c66bc3c1d7e666262a231325c0e94270c794b1520c2b481974ac1c80a584e01b2155c1f8755aa74a1298e1b2126c562f58049b55a41a9948f026406c8d6a79be01e58254b836673ceec0e7f96a2bbc37fe9f02a30c095614422f040bb274f5e8a54bcd8345d2d3548ac8a666e3886c582c3c68cbadb589e172947b567073585454d55a9429f92ea084a3370e29504a524a6f0a12cc7a832cac0a84ea2da049522e6520ea94541e1289ae3f2e9b8bf1d9791bbbe5edec7726aee70d77001e7e938019e8ebf00de0ed10a099a6377fce6e9b88ea7e3cf3a027b388ec339f073a0cdd381352b1ab03a1e366e70c3dcaf562b5842901f3e7a24fd30e0e9c0ef51e1cf1bebc3ff832d95610e2d347baf5aad0ffffb1ceb83c5bfdc1f7b7722f05380bf8211f847e0118439b4d0ee6d51e1afb2d04e65e31012f9202143bedb9a03089a7df726f8a3b6eb51ec5b7627538151e01cf8eff950e0edc0ef52d502317e05418139260dbc9e07bc1cf8429e0e7ca2c25605b23efcf0210a4be4e940e8955d10f27420049e0efc07bc1df86f85046ded4e6b3d9e0efc1f26f49ab0060d1a6bd0a0b2760d04a6fa783afd2b1f509b573715017eff8ebe261e82fdc91863fcd6fa708ddfe3677de207c19ec5be99f33927c4361b38a0fef1b3f5f19640b088fa2b62589c8ffd4cfdc0628c31c618638c182a5e52461963fc18638c72fb18638c31468945fce191007f566b7d60f5eff1e323e8fac9e2369c27a80d29e85f5f060bf5ac968fa021444c4d4eef09a53d1e7163b148783d02c069b19e39ff2cf4aa4f894a10373ad607be3f853d30eb03fd095b2d557091f470babd8a64f57a4a33432ffa335a0b2f54be5a585a83069d3236323246b8e789f174040a125faa2b51c9c1b7884a0e5e652ef61dd5bfa354ffa176597d5d8430cf6a08f3a45c6861d7a8343f346b76552c879695e602ccc77cf4bd60cfc329282b5bc3c8eb4153fd8f7c000951d1a5cd3c413b16ccd91d7f1b4bf400bffa9ff5e996c5e3fdd8bc7f8b7956efff937dd7e3937d8cf62acdbf15a459caa1aede07b306c43e8d0684cd56f440bbf98039abad83797e98bf0103e31f54027341d7f3772cf0fb90992b1ed0ee3d5dd716e4d5cbe6fa57e9fbf5fe4856c9c523f328a4a00273feac0531e7afd2685b7368a136be04d5fb60ecc6bfd40f980282e3b1adcb2af6d809cc03b375fc97cc77d7dfd8865c7fbd10e6bc99c3fe04ae307fe331981bda10e67c47a6c27cf7b0706501e6853c1f7e99e7d40f19ce3185d6bc8d6ce6b347a13ea67ea04ca02ff341e846f3329fa45edacc0b95af1c3049cdb1616077b22694960273fe34dadb9d9aadeb8a6d2830e79fd26c54d5175f540c66a53d2522962a0ead2b92ddd0b6fae099d1762b11ee794091f791708e7f0e075a783bfeaf7b5bfc98f9ba4450609e6b33c29ccc36c49cd3ed08739ed26262a024064a2af6521060184de667b4eb29eaa51e707d6525189c8161198dc63506884c0b30071094e6e9d3ccfbe09436536140829fed4308f73321496285dbdc345c4555ccbdf71e8c10c287bd7ea8efde7baf2b866118f6de6ad4c38761a8e87e4db982d1df6d84fc6d457e9eac1479f1e2e4c4c4a4ed11b49bf571f8b987658c22206a56bbc93a826d165a08a1a50a2e72f8e0437d8f54df36f438a4a4ed0613522a80ad15574061c2a26989f724306286c713c0360b1539f09919411838d2f82eab4a484b290724a95f83128864a5499541316b42608d64e66680de0f793dbebe19a0eb7df0c4e2c6edd6b5b66cb5c2367e8e5f8f1bf53d1122d709683327c2eb81a3be27f27a302fc34860812e5a9f525210ecb91e15f4bea0dbcc17b423c71fb0951774bf8b7cd509fbaa337a65cdeb50ec645f75467e3f983121e8eb7af51c8558c316a38b284a4499120509293559ac7024ca2831b88a92e3388ee3562bceb2d51559966118b62b2bb097020a6f76413328ccd564714405ffe5cd617f2c0e41d01ceae2b09f020e2a8a0273296c11c7c431714c1c1311193049b9b660fcb07c9121271091f1b11d6a0cf52a8a42a1baa785c20b5542d0ea876cdd14b2d2829e700959a219963984b929e4e804e638f82b2c1d15baf14bc3e77076b038fe2ebeff1f1e75c7b69ca74ce897df38153604fc1bb2583650d0a532311a8d8f66905258606ea0a897f9ebb387a1a998dfd783feec18272ae713a498b75a9445a37a9546a371bf284e9910c35a345ed2782503ed780b2c95b5e832e475b7645abc1e41b8ae66e350b3f12dca48412937c1495817da71edfead8ac61c53a61128b1a88fe9416acae8da9ca958fd33a2da444c5e969eae3825351125f53749fa2bdc12532b4352af4fedaf98639bddb08d6241d5785a1b144a0a231cd64f126f930f4cb5cbfaafd48e47e556d2bb2657e13398a779e02acc63f393527edaada346608a2acdc361ca36d0b0d243ed5854559f52920d3204a1c3a034f5292de114648926a5258e88f9816640519a605080013d294a292d31028ae2e2254b03e612a3099b2c271931a46401c305e9091597a5206c8a9e94b08107476588e074c58b98a22b4a365c94688084430ca2203438e2d1fad91b63441ca80852e0104145a84f490544c81a284e7d4a2aa841c90c32688efa94a260119950ad3ea528549a849812a587dab1aa11518c54c083241cb607fb2e98a602abe0d4e5e99df1bc3c3522dc339c54d852dfeeb83b7c821ab6b0bb312f3cf27db74ae6773b437d5430a1c54cfd40c56b6ab1bb1d6bc04a8bf7b482f6a5ee635c79f5dc56f7bb56019246a8fbddbbd2a33e269687978b54854afd90bbbbb3c28176b342ecdd10618f797eb24fc3cd9aa721efee40cadcecd353323364e6c9dc8f77673233e4dd797f39b10cdba39c170acb523034c3503099a3fa9ab277ca4877be397b7285391393d9d7e3d1a7de85d08999cb6e8cd11beeaac15dd819ce1aeb6a361ddb087105a3be2fea7bea18a3bbcfe0fc5c24ab49ba57b3d9d48cf5795dedbd47a56a6e6f1dff7e918cb95bde1d6caffa56ebfa526a605db670399a0b9f1a475e24e42e4e31c2338ebcc458bb18638c4fef07ef0c8f11ee0c31c6183dc6257a5f8e5689530d0d103e266a8c31bef71e8d31aa206d972bbd1f760dd537c303dda715c9eafb16c0ddd62e1c4d5c7db9a16fb3d77694367b7778775092e1f619eefe657a71f72f3bc32a41654febf7de0fdccf90ff58e854ea476fd0bf7b1f3f568745b2dab17d5ea854c370ccced0a870ac6af8c645d091b5d671c62a30c7c549ebe07cad75f05b0d1b5900523ffa71644febaeea365242fb3af7a7ce4b7d3856abd56a8543453393c3c6c6c6c626c78c0c1541870e1d3a74884063605680394fe8bda6699af630a98c060007070707270019861a4026e55f1b1020b915b59805b97ea95d5db402928f11209bb38b2890fc01a480c8dadbd48a26907cd4953a61e70ae614e0727e3556e88a3869d2a4072952686664945f9e309991912ebb3c61f22443e592242da8206d134949515cb9926569a9898989c6c819e7180be5099329474754909062b49a1c2da7f7f4d2dd2e149d21a8744d9b27ad63330010000400f3150000200c08060402b1502cca5361ef1d14000e6f8e3e6c5634968843398ec32808a218c8204388018018030c4086219ab2024b755919f2c452da0af4a50898ec6e67bc1b8204541de9c0a72d5632d00655d558d67996446f7b48826ddd7987a4d12995b970caac040cfde789e2c3560f5f74730ff88bd6802351d9f26d9561b56d878596ab067db1054d4b9eea34785e240e52ab62c5d136ca5e4d4e7c86e560699388358663e110415729975a285eabc909aeec8626269f15206122e7b7c1e48c48a29bc47062412ef1f5c87238c3d87b44cbef3d8aa155a6fad9fd89412737835ca59ccbf8e6412f13be564f42d41eb9a4f3a88fdaf2baf35c97144ccea02788c1911b4676a81b84c2bd8360695b8a2d983b107b5f1c4ebc65a57a210720f741f566cd14a53f85daa6cd03c8030b22999c64573fae5b77e466fcc27d130954a21189748de58e7ff94844bf0f9d89cd142a5e4e78b4597fcc7dea0fd87e7a3914fff3173598e20f78e90c61eacd2dc6202f6a22f669e9979d058a1e8d2e55f9e108a67d8534466d17979bfd881b127ee48e19565d2bfc23549de8f1f63bf00f4d771286d741fa23a5ee3489c778d5fc52ffde4b43b6228071aa39dbc753883648e0d0c2eeba5f32dfab246573154f4d42d70608101343d3c483a0a8b0fd5071e65cc3dbcbc7a1086d7f6c83c84c455b27ff3a0de0a27ea3c853a7f4ec36d0606216bbac98274f3bcfb4eff7172b1f69b2150b4d58fc6ba85a582b89160b0dec06a8b05aabc5c2452f036eb1d0954f14f4344a17857a9c6332d5a3094a4a6238abf8d6e4b9613d0617b7875d30028b2ae55ba663243f09eb641c57d2688aa3637214c38e4651459a09008c7ebb935865509980507b3447670531736b5368a20cec360c7c607f94d569f1fcbeaf52eb80a07b3b78fc305246b384070bc68595044fbd52b02ab0de05ac034b19fc18d55065a29fd72a67b9df8f8c52aae9ed6378011d58f50b656d00adbbd94cdc8ebbc94e4d7a700d0e184b3ae672f822150608bfd703eb34179c6e1edf05443b27b0a76f2b5aedc71a063f39bc7cd2d0d4d7017dbb7e7b6026620430585696a9ba85078207261035a5ef8b65e6c609379cdc2fcbfc77e2c8b7def2f728259a3b3188f5b0083c160158df7f369ff5bb5e5baf0ed683b4b055c27260aa46ed4144275f9dd6d0e3314683d3412a67e7fb020a9c65bedf87f5552a3ae540ca9f425184d8c0c43b9966180b768d4e7e1c0bd2d7bc296f76180a01b87fe8c424da18d2a5c4310c65dc2e2bdf6828bb560e19297348736d564b2e3be2ecf68bb856a9a3eb2b7b0674abfb8090a9a8b2ebd643356f6d74417afd622bbc0738d7fe8f022682dec71e3fec869fea7c7862063fc45c10cf3845601652f9d34c4c812b0e75184a3796c3359595ba319d3b5b3855b3a8795164a357be8ea7f7e7c6eb2e1786fe86e65c89446c3add398d9ab4c3167ea4d95ab00a5a82080be9695cc4c1790aac2e8b32d271180bdbf72afb8fc086a398505e2d609cb38a12bad6033ab8592c1180f173783c11c8e9b4e379aa19e181c44a098e8bbb6c257d16e54283a5ee0b371878f62c18d494a7230ae4e873e23e4b1828d5b42d3064f719d6fb68aa10854856e857ae62dc9719ef90699e50d795a2c58e22d4c141f2edd8297c7e5e29f906468b21608265fc3981a5c1832b95eb6793069d233b8944a1f883d06d7d0bd27d7ef999461a043d02cd11fcfec25f1a8a053f70c406108d5edecc6226c32c3d2d3165d19b6aa895aaea6795ad4058004d6b4c95ea34997ad8c7ba0821e63a44a5f3dc9513f32c426bf5932c7055c4aa9e6be0bbbca58fd0b84d3f2dc62e8e9bc5b0910a00ee01bb2c3b56cb0b91da271d0a89082dd008fb317f8508cd8a439b908d79ebd31bc11f55995efc38aa354ccce83b6b8e3f0adc824f964cd43e15c41d51654ffd8c0553cd0292468f05b8540858d813f0925cc73b15311abd6107dcdcd84f4460381382d1392506b5a3b547828a8043417fc369bf7c39f1a9a0b64e4092caf6d8bc13294c7f77ac5afaa56542ec381d746e85654f027c512b4ad967005082e3f29e0b16a1f1eca78e0350929c16001e23804c01627854d7f7d39c5d22a28400da7cdadedf3c180d1b886ab1893a625b30731c97b760ca2e2b98bb0204eadff621c5dfa13a1528f4103f66af78f37b36354445ddbb4f1e49855f28e5c18a900a63d388cb9b641cd7c33617ea593bca2f2d573055e319af1d771f8520225d3015e401b13e101143bf8d4cf4688e13972db686484e52ece52a49312d2a5ebb57ba2296b17565cd378984b9da3148e720d987af455167059bef11705285fae20ac995c4a7f85ba844b577556823426d4486452d95a9b17860f42f2122a6140d3a68d9a0467582e28460b5a180522a16b9eaf06cd6fc1ab5d816680eb077416ae4b4caf92588754662c02f97b62cf0efa42490025de1f60f99428af18056a87bc76fba2424fda3298c2b88810e5f43dce2c44b30ca63a99d2ee491c8a48bf03b874cb6431ac06e6c6a38a728f58d0d1f2858e41f07e5480a71c39698c52dc070a8e02d73572aaecd09e1a6f095b178985df2336501a1509f830010f49448bcfa29f60174353b45bbfb890fb1b3525d5a7f9d2d840198b05212351da9f3e69a74b602313e64e8df8d728d66dc12a8cea941a20ffba1c7676baa38d3c4ca48eab43d3b6e52f51a819e9f04c8b9c9267f55c92bd7d392b673011048f9a4515d6400a09087ee72a2c5e2b6b49d4931f9cb969076c8e92c3bd1a9151f270b119e93670dfda4e921203436831d60f29925a191f218909ce6e8dcc97badf1135b6e74fb9b2e741d550430309b0a6e8a7e736fcdf33dcedd9d9a83102613aaf5e465429b8f85ec337ea3f5ece8664d5402a565a9c0533fa20588322a9cec63a1dcaf367d9f99c6bb85fef3aca633ae24e1ff58e6e56bb7bd8bf9784e481c3450564174e8bf31ff3f1648a0cc20804f21facf383b0448e63be8d1dbecd98193179d7b987399f0fa77aa0db042498ab93bf9bd34ae58ee796796fc21ca844d4d97717146f5191980384ec9f79bbf0db27bd1ba0ca373aca0b5f7a9468e42c05c37c207da59523e24941ac51897aae337baced74f8d3c9cdd2e936dd483ccdfb43be25d013780aec62b670e55fd5344cc70c00a40ab784ef750e90e290088f447a0d59ed5a5ee03ebe9735fff509261c4d1f999a849133a8920317d2391df99f7bfd1a4844c6ce01f511834474705ed033c03ea45cff1fc72c5c9d1d7ac62f23384241f575782c683b0a187aa430d83d11792f8f2880ffbc0f4eef9fd332afcd07b05ad9884e66be2d7d6c51df9428bb302eeed15c4375c276da1e9f4bc4c183530d139c0a2d3672adef48a89cf12da5cc9441a0642d2db58a3ee04b90e3424cc40c750cd3b48426be92480919471ec22314202b9bdccdcbc7bab8fb78d99849a904411b3126fda03df954dcd02f4e192dab083cad6b8226f359c1aee6b902f20e55f720e7aac0175a3416ef533cf44023e647ec71ba1f3a142ae9354ec96db3136682b2eefcb2ea463e06d1a612b6c880f2fa630d96b5b7d6c9361c02808d935a32a8298e86d33f00944d44ab66dea231c50136d3b8c5038444db4ed30f2e13011c1124a8c03fec4b69947300ef813dd661ea938e44f3ccc74441ceaf8c16bcd600bd49676530584b83f96bab17abaaab4ef050b099371200243424c290211bce76fa28040da0af4df6c2fc35fcc26e1eb7bd1c6b9ba2af5dafeb96c980fdd5e7c302a98e9e6bfd8e8bcf038d73f4490f933f2453fe4782a82d9a8049b7469256993a2631d0e7f208d7bc62ca77b5c9781053f5a26bd3b8a31ad3b2a5453b9a75b1e8a09b90819292611f83b5f11e4bc6403080e8c90de85ac734de89af355cf282963f5db5c35d7c17d46c68c9fd7ca269ddf993712315158f60f0c5a873bacebea2bf26f5ac1a98fe3aa7a1b3af94b2c9614420e7bb31b3eee00f32b010efafe02d16c38b381fe0170d7eca1b06a6a10d60daf7dae69ece10cfc3d358fa7e1109c97de45e38dffae63fbc6546b4135c2d8874ded2c86910d0abde70bad5bbb580068361ab3b16e5501da8b7f1cad50a1e879e87439f51f0cf5136d0397b068078a45c31eb8154c745a8130bf274fa22c07c0cd2060f1ac95096f1664f835928d3557b22840f61999b657c2b6bebe56a12e69464d23f67b74f6415194d4fe0630f31b865f439cf117778358d80615f89135ee5406bb23f970c7e050d48c47decda976fed864e340d8df97fa5cfd0e8a2b21d2bec35a5bf1f7230528e664053da69b11220771910b9d5015012315e30753c1d2026b9a7cb43b2fcfb04cc831c9050267372eb4f9f744e44b0d82d9f2e7284a698bd44a81ae1b90baa65a0bd299b29a830f27307786ea030217bbafcedb053b01b1009e4cdc05d558dee27060d9fe2909ed6c0659ca165736b3ba309747fa519a4dbe1fd8f73bb3a8174ce74ebbedabc43e9ff5a8923aaa2253ca62b262f680a5179df2162aa8d8abb68c0dfe593627b0453672001df98c1fe98d2bc995bea804beb1efd928636a12368856875f1bceede854d88a3b0ff868a4aeaedb4334d9b156d7e0cc7028c77bb3572390bf422c1493712d7968e13b58cd915127937cfed22c9ab09472a33d8b8bb28c14c4251b954f159fb556e70b9aa87498a688fd1b1e3469d31ce4219f6d9a08ba69a68655fc0ade6c2c96331c8aaa71cd9c46508de712b80dc7e634cf146a5c100c589ed8310ca5c636b7be487391234e86b3509ed73aed3c5bfda6fabd54cf7d87e9f100b9d4da182466fcfa17c3905bf255449adf0c4e235ae00414026a102078cc50c37262d5fe376624446cd6af9f25bf23417b64d3ca6b2fe1bf8d53d05a0276caa3595c28eb6e87dc3a9b0e7ce45be03c2663990fff5ac26660aca17325847d826a0ccade766d145a0605c7005a025c3d7be756f83a1d98ed901f989b6a9b2d73416bb5e3ae3768315840dc7147892a4f5c1e9632b803c8c3d26cdf4c7268a2042dbe4fd2f37862e5171099bc97cbed712f31f027c259e214eccb66bfed39aea097a3c1b2c04ec72e62152f1edbf3e4b0ab6d0b5d99d77879780f524973592c2e11b60f232646e944a2bb9fcb72448ecb8cdaed301e08c686bc6155345add0968600a90f680502ea5bc3f3ce040fc378903268395bf9e359fcd5ac5502c102d9d50e5ba51eb67aa20340d289534238fafab079ef296ff0f360ae181b20f8d4b942ac3cfc775ca548a9d105a405602713ab54c5e4868eef94012e44a25a31894687232e66380d917dba3572b4b709e4a272ccb0233aa04d3d7c52a91f52e6ed50572012230a7dfea0b26dac15666f001daf47d050f56e64114b8f8761e7de3a549d41a299616ba620878d051ffa53083b303bab4098de880998454bbf8266b2152221fb88fd5a276bb5194fba0a92aa29b735993fc8681273392f0317fd5865f2e558c2cee4a5f69f9d4b03c6460e57237019300853cc2522987de77cabf90dd6087acbbc0f2314a509b9210b09ca98a37021bc5248922a3fc2c7f5412f369993c86794bdaccf4f4c427ef3139710a20913d174fd0336a916081ca761153a056dfb55ef74af970a5daa2449230eb22e6d4a30bac61cb906b3ad1d1cb5750be8c013823ae8545f85e905ce77cb01cc82ee49af9fd3f1c5664cce99fd4e7a90aef541daf5280b86847109020b3a0727c4433320b50167c6e5512c1b0400c5d202e69fe4b980ba2881a8da94d3b4070a738d1330ed0fdedd8689e742978470deaed224d9712d83eb2376337b51c4b01b07caa821bb3e4ae52984cc26652cdbff5bf315d69963484ebc9dc01a51b07635a05b267d999a0abc1df5d77160db2452a4185b287c7cce3091e31010968b19a80f15d83e33fa2298d6548151239c0b3e7eba0c466cd01d45c31cc92660d00d38afa7b25fb5439b004e00400b4777ab2e14c2483c70a66caa6cf062b693b62641e76cef044676442b3b23e9a33b9128f476b03867f988e2082f21c5b3118b018891d58ee0de2030a70ab2882aa5cfe0d23e22c5f97cdecfce6c687707f24a8736104e7059951a547906e57818d6e7aa585bf51e738ed37b90f41418ebd3b9ca0de8ee055141f84a6248c9b32df0ff3ed2fce792012ae0d16600f43ab5510a565559c3cfedb4dcd7f8f3c0cc17e1a0c86221f5b2eb62fcf22d0274a3edd4f7c32d1ee107440165bbf5c52bf429a346b4caddceba4a637049a5dfec6f45296c6eeb16df25c39302c3ff6632db1e9ff2d823e25f49e0973dfde49702e739270272a80973b71a96325dd8d6698915c2db463ac224a3a655d4f98dd406c96e9599439d9c219b10e1955c42ea36d3a9633d67c54309bf90fcbb42cb1df5bbe57388be99df0db75d038961b16fc573c43c3819878991d72c3d8595b38fb68c765838fb7742c37acf8af784683137670901de680053f159e69f8261c355fc80cb77c0457b7f88f63a2c1fc491d46297a4397f1f575054ef105f9866eec6b3cb8cb6f39b9a1474ecc88935d9e3909d74702ce52283fac3efbde54e198b3874eabb9dc3b5cdcd3c2b91ded71335f09062deece8de42af7a34fad3eb8732c0da338a89c16b9ecde2b3e53668c98e48d2f05f42e9c60b740d0a076b4d0debe8c599ba78ea2bdd67a27bee12d5fd9a3b8b299934dc7d50df09264e8d8b302ef1a32406896fb82d76e3d0baf6559ce0fe83456cb380f054d74bffef8738515fc317677cfbcc01aee9e726651b4705584c224d496eb8df9de277548d38fcf18aa7a5a99430e1b9f0032dbd5dbd537357918210b25981b07c63f0617cbc7984dfda7a7daaf019471b66808dd3712994661b126b547a666e04cc08ec6b505c8209a533d8dbed302af51a97a5c7d80f534ac98f537daf7de16cac7392e6a4902eafc1d2167b29994f7b64f59b9fecbe5190ed435414cfabdd1fac980659ae9e8564ff05d7c627fe1c36421ef4ab27eb2091edcaad46f41e8ae53035c102dd0980654a9915c0567a7e24440cd50d5df9dd355a7e014170591f69698382da2e124d1b4ad2dae85733b38919bcc3cc12b36dcb50d806b3055ed7ad6e84937e4281bffd554756dfa1a331a6d98eb1ffb6f91bd26b19c30afc229d69b195236fe9fe1c6039ed98565fe3b8f2d33f77ecb3e147e8344a9deefda3c2c9e7e698719bc7019ef3d7f746a7c4c1a2d5cd69f2b6bd8e00f205ed765449ed9ba019dc0928063dd621b88ff0794168bf9081710f4358688193a294aa7c005cb2cd320b127c23da7feac699d3c4712e9faac9eb3bebcc757108a641d331e0e9a5e47a58e16659154ff7e967f3c6169c6f1f353c6e84c9cb2c7c15e0806b55672b5943735c48c8042a3883210e91a8ab039c7935b380bb9fc9b7abde5a1c10fbfff6c06880c8420d2acc2d292063076bb26caef55ac42705af6cdd4e960adedeb7db17a18ebfbf308bb688e97fbb61cee505fff2c35e22b68d30efff9f40de95855ef28b19b93b4ce8336aa83d682464a99e2f535a4eb8c9752462435d32efa7d75a00fdc1954dd81077bfdf7b755defb6859a29126f342a3436ccebef48cbac13c5db956711e8d4825b1fb5e50252fe75f590e3009bbbc460cc1b23e365a1380544e71dec5bab995c80053271fa8a2a5f734bafa4ca5e06e29decfce8d649d52d128243c16559416c8e5e7812a4ab7ad086add581e749ad239bb6b49d9a89528a7b4121c4474523a191818b861adc8a55068ed9e36a68e6ff21960098ef2f35eaa1cce3bad88326ad5d62a32e97f489b75e7da0686653ab48e8b9c15368675cc4bc2b05194d66f7099cbbf86b98d3835acbcb55721190cd7e2b8950b8a047baf40e2cb647baa64b9533124e84dcb42bc0a99cb1bafe01967fb2b2d92fd3d176cfd027995afe906836bf8f542a148f85583c28ccfa5c38f05145dceda620edbdcc322524fb5d066354707b094a850aa32161b762a6dc993ad3ff3a38b36b5e3596245e8b29d44c9ec606c80d54abb3c69e8a732788646ed4bf26c1bb5ecb50d142352df9853a4a9a19b00337709f164f524019cbdf573a043e195da48fe1be627f4bf06ccf5dc07a40241f6e8bc0e10208685e1c66fabcac1da58922c3a154db1d8b084ac6052f416ced1bcb9daa2f9f60269d6fb785ff223524f511f693ec571cd5122b6fb6a87d0ca1fce1f9ba35d56ffb4dc443af75e5bacb4a5c2708a7f22b33998e890166c4f785ea5c96570801f92995f50a9fa1d711bc0d3d46599a1d21db3acc41afbf04f170024094484eb3d97fb98a1825c1762fba7ef5f960d276964ff28236aa29a1c3f021e20f1d7b7db66ceea6f546a83484b1888019e095dd6e2c01cdf456758e4ac572aa2f8bf56eb9253b6272f92c444e0f8e50ca9d6eb1ef6f30c6b5ebd8bcdf493fce53ec33ad940050dbb474547b3b361570cbe19e888cf3cb0339caf8206bf5436e9d2443956d3f697cdc4258a13687ea555ed7d1bdcb17f810f51b33bd6028348f299d5240d591d8cc1990fdc21a459534c1f962c0a4f3472174d05f18f66771f20576e9a55f832b694ce36eba4b9a6e8b65938ca1ca016a6f3b013514ae2e1d726e0539fcc5e16cffc5914ddf362fd19df9bb10eea6c6bc2fd1552e56cf8937188ae533f841a5bd4c363dbaf345979073e865c19d9701c321acfb7188861588c0c43019afc5833c88dabe7400eee3811bf85cf6af1c2f952bc7d9996cf436f3e942bc49c3625ee3b67e88bfa756903c8aa708150448ee2dc0050cae92218b4a467965495a736eddff7757b3d27aa2afb81256a360364394d098ac487536a5baad5076ea22cef82be0e0b651dfc6dcfaa3f17140facc86fe1e7a68d3b624f76e1b1736731c66235a9a9feaa55f02591abf46fcf3456461f43e4505226359cc87422893e85983ada9a75223b7c47921cf788931ddae5e059c980a085bfeacec1cc4d2e8f448f35d2dfefb153a4b5ff5ccd6a9921860789ec8680dfb04b58267c791e70539706cbab8848f4b916f22e2801006ef3c41aac75529ddbfa7330c40841a949d2a98fb3486a92345257467dda2acb326722c6346ddbceaba7989acf7cff782468312b05ff67453a566a024f9f8d622f07118dc8e138cb59c1c8ec7bb666375a1b86c3993afbb586d20e233b68a6723fe4eb1209a9e4e245eec412fb2fef06bfa8a9993e543da85c62e414d1ca6b1881a7f56d77f3ce2be5891e3834bdd5754308bb19019ebf2e370b9e16018bdd212a3352648ba55bcaf1543a1e2d6421db67374b65419dec08aa9c92d10aa2b58c5e619abc27719f9320149ed7a1a7d16eb4757103482c5a1bd463f699f9036e3e1204017dbed58c183f60f5c574609841266517cfc9b403e0c7a4f54d7354aa04611d6ebd982614c3eb822699067b4c4f96fceef30ab9ae8dc121c17aea031135f6d31dbb572d49f11a35e5fc11e8e9aa9183ccb5e4bfae8f0204ace02feb695e26681edec080c599e06200dbba92e8b0b368e2a06239307a4848c50d01e6722329c0e97d565fcc2430799bd3a2f4e679f325253bc35cb4dbf97dad4ec6ea8748d77a4069d90f002a853e12825f6efa5dab38f102b84c4543cf5496d50c7e22972359ea6e668ec91b768c368005de7f47de6ce1f4052dd4b730df13a66f7dee0d0772ef8c4f08c0b1876fda4b09a1c90d1078c1f3329323c46092ee5894c370df31498ce2a937de61ad47dd3c986a28923a5b0d1a9f7c2ea3ca01e923ff40ee3dfe2176db4e1394ebd8c8e5ac897bfd4438522b6e21a5fb3c5b032a913f7db0419655e11747c40cc66bd4f59ef31bd4387e8f3210a34c07ea6d8167f367b7ec4838c1b6dabc91935fee698884297ba7b47af912ae59783e6b4857e8d02807323d4112f3129aab36c72b5265d69cd75821478cc1178ac4829109550e2e09b0d7ecc9c1d20bcfc887e90b2a1bdeffa84a2b6c4844cd74665c3ce6d6495ada28dc86058557057679ebea529028831e633b0e310e4a9852c36e665da65b92734d10ab32810eddeaa65509f74a4e5862582cf725cba6b697b5c83623c9856722b50164d2f3dbd0d518f9f22dcae9987ed35c865c4919f35e968c6903aab12ea5fa9231cdf99cd902d3248366da2049e26bb528da91f1fc2b808ae576c54076056fbb17472afa618918aac173d58ee042940770d6dfe318eca7c832d5f0250cf4bdf32e54516f9245ed5a206ef70b0d14d4827dd18979ae8aa8f775512f15ffa3e2746819d3000ba4c48e3c2c734a6108f78bc407040b4af50d3b5e32ab5efffd47a5c9bfb650067ba0ac745a120925ba092a033316cf7d2946c0e10286b5156c95d38178ed9cfbf1fb37bf1fc61c0e285b6327fd4a2741bfa86abd21ce1b7c81061301bd8873843730d3fec45800df70050be419616a57056b18e2ef681dafa4755ffd6ccbc29a4722720700bd1728b9af63a8605f09abfca0cad8947c89e259a6435bb304f5249bc898fd95319dea37ced39f23d6bc991228ffa0d21ff33939f2cca73c2297ca786d59c8aaf62bec51dfe5f419a4c363e92f46dc8cd1a2d7a6656ab79e90e87e3c653bdb2b7ed610947b321100b6c61670972a4c6b185a42a5599d23e1b23c624ffcafd166b405d31ecb189341348cf33d1674d8e369a30a7f5a1710e420737a729a7edeb64f6abf3430ddd95d1e95510c57fed6d9ecd57fccc1b699e7705a178d5d15dfd9898a62bbd58aba0e71fe25b472bfca6f9f548e43d5db84ba55708963093d100fa351f6a79175d2e072125e8e09cfaa5f32e1a80382cdf2ecf76507a03ab921408875f3f68e387942fcc5f48b929cbf1e22455bba5d8fa3125d9525d13812972a5eb8d255380b6a87acad45664ef0bccadcb829c30b2f405be252784eb731ac28f7cb3e10197bb9467a7a574fb958c4ed99789b01e8057d47a9362449407a022870d476beea92f48b3854b4f127355a5804b67b15de2457d6beebb5c7eefd0d92611e15b215246e900eed4544773fa0c5ca5acc456562568d2ac433f98e78ce83db43e792cebb23cc81f85d419d68995a9535f898581c933f46a578fe5e8f20a5d33bbfb9288748f5a1f917fae4ecac74dc68bb07df8116c945111e1f39b3273e2c7cb453dabfaa444abe5e0fbd9d5a18bafc9d0ef81247aead402fd68c4897d58c1de4ebd201a82b64f55ea638837ff20216b856d8cca91d5def3d10c45f902889bf1ae44ad8e935ae5a5eea1900121f18f07c26aadb464ee74f0787845e739a7882eb06b0eb1a5c354e901a400732bf5d47fc9a790c87140a9d428a1ebeea1d3737a14bade886fcfd071d54829dca5b4764fa35b17400fd008401915707c30301fd7d20485471408d8a35d8bfaeaa8e8f3250f5f95724f23e949be29eb2fa26daf5d46106932cf7de952c0f2758c671c99018b43798eee51103284683740f0eb69b3e099feada08fd7e6421812d6d9547b710e6c245363d28c9a97c21bacaa5d0abc4531245a5556894c67798e218e8a73a3bad42a2bddfa5088db0c2e45399f1a5b4b21e9330af19fd0c699547b3fda0b6b869197a5566047dc3b8590b56619da58e0f58c33e2bce63329c01f38f5f154c118e95b7e8c91047b4945c85e9db70b2a4fcb77654c05229995035673a9fa59126701bd3cac78b022295fcf20a500fdc44a66bc9ccb867a9cc0fc968cceb32d8c4d664bb41a0de8a5595f2d40189710c95cd271c8318d8b31c16041d09b42729326f252c5232c81389f59e99dbed1411ad3cfbbcf5997bfd0deb2b2ed2ac1c36a206efb25d7f06ff2bc30ede4787f4f60e01448ab9c83b1906652d2ab2f6fee9cd00b275f70406efce7c6afbfbf039467c184e62f7a3ba164464574c4a0c5c33774497d6f6c8598cce172cd9c7823cc0111ab123a4f1c4719d0f5b5066e46888f7fb98e30d66851ad1dd0cc6c089a627a1a1b421a56a4b5dc30436e2896f0438ab19a297df5435bc170b7902efa210f0628d80a03acabaafb109ab04d5d238b5a81a8fcc3d657311fdc1d993f60050f4d65ca2dea003757507b77caa4ebf82140252509c57b0245eb66a8695c5be460c4aa35fde830a70ef846eed06dfc7202f75d510290f48b72c2a4aed3b0d6d4f75d3a0ef0dbb823c139931343b6645b7d72e23d4b191cc7dadadc5ae8de1ee9626a88fdd367b13e022f419db9d95959ea5bfec123babf3aa16e08b4f0b15d0c27150e63d74f501161bc8d47a35c46c59781d8999ba9a21175d26e554328b7d68a696192cdadf604b899b6da7d1d011d3961216685efb1ad159e9789a8b6c609cf6269cb56b95cd21a485f6622c47e807a0ce559d1ea311713e07a113f5ae9d253fb14666e32c36fb9984e27983d70c573b8c2f8aaa5884efdd865dbea0270900b67261f0a605b4bf3438331461a0ee1ef321e093eb0d3c089e2d983f442661a2566f247b619b6b5e08deed908942fcc6416f137c6149a2a158b133360ef1006ce7876fde5fb888a3e3022c2358203a3bf4af89a72bc4c9af4fe5874edbbea108e78c6b76a01eb043dd604858fe24d0b53ea66bcf8b35d0f666a3506f4e68b2cd489a0f6b7b943775e98322b5f651350fab1ff8f60c74fbe9cf685c558940883f1b908fe7f56fed036b038aa28a386a91ba7c417e69ec73648c8329ea8bd2e47090b743fb1c39539e1a5c9664291585615accc8d0ecaa137381645c8b0f02ebf2dcf6cd33d29ab3106d282c36565e3a9974aa03c687bd0902df701f27c3161e11e33f1544b4a45649dc16e6459fb5f872e4e87b8a9699ad52877bbdbf1c927bb8edec1b495bb06f5543b0c78314391933a06a5228f6cae271b227b4348ed5aaffcb0cac5c5aeaa221c0402b3dd9dc2a321b4964fbd4439cc6d74e3cc8275232f7bea732a802ae1e1e4dc118657476d2f867ead2f0eaa7cb0a15ce49d9b00e5b0ee92f27dc2789f79b27e7709c00d2cefd99a7aa5447a9862478d032aafbe4081e940a4a3f044955b80de552f9b8f77bf9d8396a2469982acad3e9790895fac1e30a6339dab2126ec87a0c03237dd4c24051ebd88f7b9f5a65a59d8d8ab539503de06e45d746e74b38850aa7617a60ce735b0b8c750939b5c24785b72002a0605668503dfe58e7d250c86cd134a3d6358912de2ed2f2671e01eca00aa8e65db6b25c1d24823a908d6bae779c681c7f5142142c3d41deb3ef736249684911905be726a085b91dbee73a9309589e60633b75296b83d9d2d203556077d552ac413a1fc03c1ac37b0ad38bd8be4eeca2edace4fc969ca97dcd8cb1f7aac10cd634d260470b7970929e721ad5c05886d847f37c67c0d062679dc42c289fe36212a12c0be57bf855a8cc9119d441d80831f10a750cad75749c2b60aef4d80b0b39d77a76d0a0cdc4bc7bbc1276a337a789964916e42c11c443a75f7809e0b01b193bd414419355ebcf99228209a69fe92fcb4050531969b6f90266ffc76828b5f97ade3436e13e0f66dfc1c50fedb7dcc4e0c758db7660e2d24de4a82bb9f271c18ee503d9571b07e260102e1311251a2e9d11ade8458a058f1fa2c64035d2e4e414d1ec158bcf7481d17769691fb85b1fc7ebfaa986044648628bd3aebfc5ea9a61bd16248fafae55670dfe9b75b8bc7a21fc69bc693c7b36025d45a6620bc662f5aa58c6da5b222cd2c4ebf7150e45237fc1dc8f4d897cfac5910928b7e2d42b5912d85b7f94a8b62aa5688f8a0c731e8d1295d080e75b9c2a1720b87e5a84d6cd429482d486ad3a21d1e3e472290d8e13a292fea81f950467886a38cd3174fbe5237f3ec22ef77f26390e9e1e07cbf0bd76d35bb16560e24d0360fae1036fc68ba85d5c0ea9804dfc3bd583274f275e795f74473f6eac8ec4c643ba4653d053c66ac91f94537feb4299a0e1c0c3d4debc03a5e5f7b7a4a5b81f0a959864c89c798f61b6a548a648145872998261eae7a49222ccc32d94712020588145d0fc57e3208d950a58582fef8954ff18e9282df62b979ad8caee757837fdf0c64fc5fc6801f8998359e14e1cc7b42ac55286104c0228d6437e0d6b549660c18ee920979a483d2e56a5f846b7215f54f726e90aa76b32be96a6f93f050694a5dc690d80400468a9d108a5429a4b32fa206a9c6cb5f0e3a605bf4751f3303421d1c4fcd69d36c270e78946e8c2bbf7cec21f395d83aef8cab9017de80f4941a55e2f19a270c09596b14c9579eb67702ab1dba16962172d96e92d2228abc326f955886ad6d554f69edd1e896f8fdde80b7c6b939b723da48572a99d9e0a3210840490ebeb09782e31500dbf20752ab6bf28695f6454440dbe624585e886fbc2da17b5b7773dedac3436675ceba8589abf62b8c48309d20c1e206d45e07b185b54e4e91f42feb4712f886d9830da32aa86c473a22b0972b8065e4999248789333fbb2dc9a733ed52e4f517aafd2f7788dde788f6e8ab37b84d2326d085ab90fd6cfcfb49c1d37466daa38d807fccf5d51633fa7ce17b9c3a3f35402271a675598fdde887a06a66e14144e8283e4236facb4e282a6827e910e53824860675c28a1a3fa65343e2feb226ccd9e622bce150a204138a45ba05b5b5626d7e7ed269f0042aedc8a8cdff9237f5ea0970fa227b26cec931f5b2e2202aa8dd400ca99c44685f611f80d6b3087a4f572b9b0276a75e3ce06514302b2f2bb89f10bf07207aa14572ba118890883f43bc3364189a68dc8c1a40c40a66240e7ebd309b0ae951334dc7c4e41c6051cec9c326ebd59586bc8c91143893d1e325c9140f81162112bd2e4562ae0a8205f95bc63d3ab983f6abe5804eeecc1c1699446c002fad55e0891d96f7bd8419f7b80c8c2ff1d87505e7371310bb3975cd637c5ea0cd42025740cef9117150ddb9b9b683f502c5c9354c2657db501ca3f2fd001225060fc6367e26634dada8ce9ad36541ead23c7c7434e7342600aab6c104d10644509d2794bd890bebb354c54e8dad0e69a0af3401679a383e6acfe9e31a603ec0b6e8e63e52f4413086d5ebe2dd9db4cb857bc7e02161071b571dd2a9d5788e48c2a579dd571540f4786efafebd12100b7cf4063273969c34883d2a4842b5e568cfb0e7bf8f02af6ff5b6032eb585f486eaf3af464784e002b99d85b1c5ceb57d62c7be3dd683313dce557f49a069e25540f369bafb5710891faa3f2bc28d46c78b3bb0f26c1a72cadb0e4253affc3ff125f51632a491b70ac767492cae9d4af1a7ffb4f25ba0748f11bf84aad8809051b156a89069c748d9ab04a13c65c65b7e1ec54960e46869bb5f97e6d365ec94ba0a650875f8c81634b8bc405cf9adf87b5775542239ab59f767d15f287202883e486042e5ed4e9af173d7776897ca34c500af3d7492e039d6c4906328d2d6623fed088b9ede81e4064197ca85aa4adfc86d45b34403164ed593944030c0a2340759a197496329bb32523e44e81c3bbd8eb768fd7ca0492bb098074004588bb3740c4ec0ed09b1c31b312b184be9a9b58e52a5dbc5f92270a8ad71f37173fb16e301c75ae9a55b0890e9ea0032cd07b0b6efca467a3135ed24b150210036e59e788ae36a48b4593f0406a83a8824bae8a5b09272356adaa61a1b139e8871715e2f35159b615a5dbbcb7a764cdb3e9ecbedb57ee3c2b485f45ec154c1f01372e87ff7a7865ff97a053044f1843f1f7003188f9a2323f065fc8af0bf98d3b22d104af325ed18c16cc0801259535dd543069028ff4ddb9530c49ce9865188cedffd1c0966857481db20f7c9042ea896b0e598da5f5b593361d2076e2bcee7c7e0d134c4a2f091ca2308ce80cc67d4f72a6f93804212f5061f6dd5a51ba0a18d30c948eec2aa6ac10ba15ed23fc5710803e408701088f481a9094d60d5c9651c12eaa4db596b71488ddf5e969f61f753cc28e26af1a2191000099fe4eccde475827e736d441fb92b01b47c9a99f5d7b1f1b8f7b0d617e74a6d43264f7f1798b8e733e243490c741464702eed02999b6363e80fc0f10d5a662ddedfda545cb1e85bed400aa420c824e56c65a35b1baec404a0f9d569bf1b8b8e88e227d8ec6b761d59c2a0dc409ae44f8b6b95974c336bfc7f43eb478d9c2948436b1743ff4c70821bc983b1cb515439ce0d4b4782433f62d6a5d8bd32b22a59fc37bac2c42c6edba2831dd996eb7b28d0d60059e43baa3e1ce963bf7652cb555d5b0f203abb9dbdf3060b375e0f3a0fa5cca0679480d971a12c836e8d18afac5a5f895f5023ac90ff856e78869c32ff4763cbb48830a16505e7b6383a6e4209a638046299d22ff0c2cb400e3d35fd960e0d24e79d9b24f3af0275de2ed01ae3630e647c8c3e7e21f8ffdcca436c43843f865295fe61e82d775e10224d9c3bd6e279b0f8a3fb47e910f61093d10f4eedb7e4dc5caa034776cc478fc19ddd8292e016c22069e80e4058ddc146d44d737cb1d615b8cffb7feb53fc173771bf8d7dc3b09749e362a7bb4552df9d567d04d72d3fed79965040eb0193010d0a127ace70d945d2a3130c9715292b00f9121fcc8feb11c1f307570c80360f8f9d4bc1ff7f164c002c4184840ccea29cea30f20f98533fa560ff95d4c05b200dbf57265e7968bd0e6eb7b0c4a0dfb77c58e2d3632ce7b49a5b7a62a28ec4d7aa928df80c360fefe20791ad0a0cc8e8dc45011c9415b9e0cc8a8252a5834f386717859d6fcd8ff4a65d5f8cbca29687d861ede393948690b394f1f5a81968000a00c08a74f0fa571dec53180f70535aabd540e7fd6b1914533d954e5e9d020d1c06ac4bf6f53c9ca097d4a6d1e2f0053b6a5fe44f0ab8cd93d8a853dd5875816c87f79bf6576cf82987cf0443ce359dc9dd08f504a76148733dc19d9adca8abd80e3544a9ba104e6cead967f03b41a7a53524438f7f7e7dadd715d1cbb4481661525ba3a73b60cfa5e502a047540fbd8bf5361f6b06d109d9dfe34f8bdf6307753907afc87dd7d6c5ec8ce91f9e0c88018dab826087ea7639e434935cd8e55c097c72cb324f1fc190670646da20649597ab172928fbfccecbc29cc24df8e723b599fb02bfde60a130df60df2dcd9fa14fc98d564ae3ec9624691ccf32dde6165740a4b6e85fb5f2acf703133ad5ebe4599cc9396df641877778b874aedbcb5e5fb0a8db7bbed6cd56831716d2115c80419cde7f2a489e771c04a2badcddc7b6b5770986947cf0d7743f43970983bd2b9465a976ac57db6da959407f546f933f4e5675fd47940da09b855020c7bc119d58700aac47fa18e685912db4ec70dec0f09b3d090a8ddb1657ee02b90e69a7ddfa8083e8a92d885ad6553d49c5c69b86749afe9881014b2f341135f235247e1776cdf69737b8ef272104cc472af99da648ac1fee07f86d356ab44aa3c6f1ae9ea8e8a669fdfe083838ee462bdb7609264545c84f0cc6d951241b43f9841662db1d9ef12b68b616cfbbd1bc20bdce6cfa7a57ffc313b7c107cb1e1b4f3fd08142f6869fecf7f2d14b820f99afcfd6c31121396846a313a59d6f2689191c144406475caf724a0da54b19c851c16389b63a7155d8cd6de1a09f56cd3e822a0f076c8d85aeef71372ff9b636e2a410fa7a096b40d4a9ed5528e4dcb291a17cdff6f860da75a098157d7219f84ab5f4cda65e123f21090a7bed195af81af11ab0ac00dc05cbf555deba1b37dd5af8a520b6b4d423d55ac5ae37658a78b3abd8315f17c576c2a6b5169379cec7aab5118f96a59d68d9032c940ec8295e7046ce8f8b727913f61bfe976a546bb0b47fb515af0d6f1371df56a682127eb5d7c659f0dbabc06fe42caeaa32c3964e786d24864bc5383894b3388c8ca238a4239783fd0436c0c3c3a86f67219f131c2839cbe90be01c4366b2f80f053a1fb76b9a25f6337835405497bba126246060b39b780363ea454fa648ea5443355ec2d53f61fa6d602e1c4c6b825f888692bf856f7eeab2e8a1eefc396691a0f2698f92d7541d500761c9c2f301a13df0ba749f502ef0b67c6050b61b01996a615660af01616b495c1d6f26b09f093068d3416a21928d8074e3064d9d42c1565f3686a2d746658e6de258544c67fd893360c32a10400235fd217f6ed76fd0cf07b5ed53084a0cf5b4ba7405dc49315138d00510a7b0ea53435af069a136de251dc55146147c23cfb94de456806ac8edd6e0806ae3f97ccec7c87366e74d6780ccc7ce02d48dfb9a3f5c6b6423c2451a90721bfd6019eeff06cd25e0881e258f2ebc4b1aadae8131313641951def2f6d7c52e8ec8ac213f83d9373fa1d9fedaaa9ebbfc435af3f17989b1d3c0f56c16d039b0b568b39d4ffd6a10ea1f095b563150c31e0b2465acb94fda6970d79f77359c168ea7b3abdb52ced0339a2019b2923a47dec312296dcea54fa75ddde646323b345b75f34231897c9b23e641afec837f6ba2ea5b9ddcbd44ca60cf5967dba48b7c98cfb3bdf58b0af14fb2bcdcdeba8958c753c675938ed469a2a38ed3dfbb576702361da199cc8cc714ce3c4f56d868a8cc08c0cb24d8ff977e86d5d625f7bf2d345606c533af89c9c8e6a32cd51f6078f43473a30d23ba7c9027c9c4e600cd1427f7b9895384c49933f3e16d382e732575d8cece5d1b89905d24cbc6c0cc53eb47ebdca1f3b9dc0ea53feac1b4938cad679f5cf1aa53102bb0653765e8c3dcc792a01d817b6f6604f96dea8cc2f90b33b56e24ddaeb51d448e2dde4a30e0f345a0b4fc467ae0b097a6e09c140a438b06c978c71a8b114fad10d3057fabff674b8d83b2b4dbf5f93d12b4418b28a05b2adb0050bfe26230ec171398bb4e3f64d266dd58a08d031ba8644066de36afc3204a2e5baf6973e284fefe5730fc108aead9595e56eb2bb6dcfb9c58d2e4805cf8f24cfb68ddbee5a0541f5cf38dc2999eb2eacb91b143c2821f86c30c0ed41b4862a7d804d2140c7d0dc6bcc305cd64b76e69eddb3766ef8aaf5db77edd602780c040c01b528ab9871ad8cadb728b4921aee541cb10794fd0432d8a84cd2e2452c7d9bd9d2cb31f95e624c803007e3888005a7da215e95b08a56bb402864226fa468bdc171dfd26ae672db5c9518d48d62cd380d121cd640eea681797f4c0f316d0335877befc28cc435e93610830b6a2d22ee82bda7a6b7413b8839826f6519f531e514b75242b57dd534bf1cba961bf6a40203956ea3feb83b6d72b83bd26d10b324da661cb9f3d8b861a994da74f53b6f1b37964a86a9ea0807339ee0a6e63311238a6ad2ee4e3c17dc4dcf03c64f35094c8843eae3c675d1997ea0633f415c6d75229bc359dba203d9a35736b6188472879e8dbc00838ab45e759e23d66141b256cb2d0ce78771414644a5f151bf0fe2088d1caaa1ab145beb045d45bc68e4bb8373f6b8133bc5a7d4ed757bb02da2b482ed48eb8615578bee03b34267e8723774be8d68c62c67ebf2707014562b1a71fb33d4c33e246e01de870c7073da41d06a736ca3dd6b79ee9ef65e70a7b6c3fdd5ff9c9d263a33b2cd6efa39bed49abd262d611d897f493f679834ac96fd7b6c319099498864d48dc0f7fd46e2d7e83b8e04f922fc4a9136286c02684d1382f5b4c7879211fbc4da916f45a2d92d21b1b0f43b418d7773c8b792a1d4f2616a84d50acb76db7174f483a095ba4d6d0266c11b0b8f43d621458dfeb97ab3c7d5994e348852857f6db0f673f178f4c50eec2a70694cfe8b77d968c2b216df348446941335e28489e8d4133ce21c5db997dd479f6008aac07237bab3cfcaf5ec8b59e6d35e5602844607ff0824e95aed613131c10351f3e5594e85a14897dd0c5c97e059512746e84f4529941b30d0195403cf0eb8019772a9be0ee81b91955dadba188edaa5c849d3a9cefd1ebeb780da4cd6067ec21c4f1a066d30d82f5862876415a4110ec3af3cfa092da4d4930ed882dca279b5cb42bdacc7ffeba498679c2b8b5459bb4703c7825ff39f0ea0c466c57d87d142462fcc6432f1b2c0412d8ee2aa21821f5048c5cbf277e86e23fd762d0e43677d3dd6eb543f2ac5c809321def01f3d64320ce612f4c6476b30f2b0f3fabe72c2bb4de8565f0d58f1adadb15b21726562c577a7260cad6d89a18e81b8f53b00e51bc2c438db773977a2a0f5368b6e09eafea386211cc72d55c55afc4d1aa27a1ea93d46cb7f20eb78e8076dde47dc4c58a4483ec633e2ea7206957b22fc92510705844d01923d5efc8b6724ab1ad84ff41b57cd73379f81f9ef901ee5c45734cc51a32fdeb8b449a1b8d8f86dbc41ff8f602d094c19d61f27f0ba8c48d29982b9129e5e8e5f67e866a29541791c3b4d3f8eeb5e7ca90dcfbab2e36b6ca91fa4758c73090d3240276f165aa72dad9200744389e845abad90324a9457d5e55182fbc2ece916d2ec937244016661d25a4c6f1226cbf1587b1c667130f0c26a7c3857d48521a252f3fa7a1f9e334cd08532fcc8e3d1d34867001639414648ffae1ae9371363c1db3c488481fa9e8f4b9704f01992af08ba43ff353c07a40422aac19bd39e6c4a49e42a24e1e2b3bc1983c4a65826db6c41c50e4c331d51041708c7f884045b618e43a8863094bf071d36b82fd3c3aa96c9ae14f9a953dac445c8987b33bcbbbe7053f9c6e0defadfe6a9677cb4a794e26116467c795da254dcaecfc7555bf3fe1cfe6e5f653b3021d6a77fd49c8f3708e5859c18bc173aa9bf778275ab87f511d3f8f3a4cf12b00a723fdc161435f3df282dec573b16e50e0fcf130611d5ecb0f00d7e2879b981c4f0738421498927d7df50201a195f884b26e4004c802a9b23ae58bb274de5306236b3028ad39757a6f9f6573d1550e0c4f130a2dfb82cf5cbdad08db7a4f165910e0dc4092fb9056fc2f36e5b1616a26e6b8e8a2e43c81a44693053243611b07aee22b8cb1471531bfc0ebabacfa8ffb4866ade2cd0c2fd5c16f0d5a1a80340d65c1a8ac70404cef8528b4bb18d400fc4ae6f16b3854ae69cc7f50941fa87cf958469c6b34f90f9b4997f0c3df29b7ed13e3f8ee8bd8e00b3d553f212869f073855898dfda9826e8aa6cb3e0f8f6e68995c4c1a087c96a7da79eed647d3b671d037c68cc5c46d0c8632891ca9925375033f1474ff521366921247e48ba5d5707432268e8151bb46c1f2c800607f26c84ad0a07cff96a430516dc32be01518fabdf528886202e87d2f5794259ea6aeec27dd4b228684b00610950c2c31f3e37839dd803d7cbe0d506c08f34bb6f96a93dbfbcfebcc931815f5efaa71717102b76f935ebb772fcbcdc84b1230f6e820a3b3901f8c86ba624dc0e7bdbbb469f1c38a05e0726668d6c64bb9d7501bc719effc677f4a6871403c6b77f414962355fdda3157828a0b841498cf90b98eac9d5f3e63166183f547b0538c40e6d9ee4f1b187ad5e48d86cf31b8aa989bc1247f401a78d91f89efdf25b3d79787331bde45e2509658f83d48d30625a35130300e1e4ad7bf84250a813981aa1878b06ea598070acddd0f1ce40f1a5da55d72281d129a0b91b656ef92df99dd2b159a3f91b3be991c14e6000b658709494dcf5099084305e1783799448b67518b624c04739b4bf10e4d17ec4799cf305c3a339b547b47c0151a3dde8d0ad253d2356a941b1e8e9001332b80e82d8e1dee689ab35e6d36cccb3d546be8191d087d5100ea97aa4a863c77a98c3266359f1c190febaf4cf289fd37c032b209e455ffb1523f44769e88c0298244256efac042afff5df47cbbe3b132d7e2af33389f3c9d1dcac9751c601f9693ee3e6d9c68377bde2386cca2088056468ea2e5658c938a06d1d7690143603758932d8334f643da10396bddbd9cc1393dd15f0f8f5cc39f07d20b0320316d6357d9b306be394a3face6c3d84ce2b474aa77252c8443cc420d911df473b02002bb455718a660287a6d2f9c083ae5ecb1274be5b0f0e5e79205503ec51f298ed51a2078457397ea915fdf4e0b7d91abcb0ad5217cde8a4292a51e0c0f9335766f9b6a8eabf7948709847b59b35789a9691712ecb9385bdc9510ff862137acaedf897b197527691c4d594d508f4a86af32e13fd6b3e1cad98d1feec4f3807737e300d606a23e1fd4d30bdf316893efe16e3c8bef212b97f22fddd1b1b6f7915513dc76cbc7894f543b9af3978c8fa8b16b667d6edde1ef168734233cfc5cfa3c07ece6559d31521dae9e2595276ea368e0e4a3c2a55592e0d7528b02cbef850a9341e89faf008661122003c5419d839a2619c9604deb1347450055cdf5a6c138cbd62cdb4555767f904e5f4384598609624b366d1a478fe9a905c4e800698f512b0b5c87b450051288b8c2c97b182bb55652d9c87f42cda8667512a5173fa8260eb45b3f0874c4305ec14d60ffda1bfcd31f23ac52ad22fa29f2ff7a239d4332477a4537eba3e2eaa3b105c5090bbcc2dd931bcb437161b836dbb026680938b782bb3bb6e3458b5b6798d0aa5fc4b239bce4ed349cb73eb75e70033174e5a2c2e4a44318f6ff8f6bf35496ee1811c036a4857287707efe5c9dbc52eed9ee374f4eb45d8361f42befc365994feb8abdcfbd73cdfced04cbd7c418e791186e1033bd23ea6dcaf9ca00f1a94cdb4578826df42069e216582653fff23faaaaf5e98fc9e187d2cd96599b7d8dcdb468f7db4063f6fffe2eee82347942450f834df0ee42c5cecd2ce621eb6e5e19b4579a55e229b984a1f8c981089c6fa5174079c49ee9d76b8d90f7b37080c69c7f757d4e60ed0a335fa8b29dea5cbc1d95f4cd723124e3e620cc0c326370bea74ee81934df14d81219f58533b4a4c6090bb609b9d1fc905c01c66d078d93ff72826fb5af3ba567efb2d59b956b2f4cc63d51e4ed79cc5e0202ea45b9c863d7e20676a64e7982f70de42d31beb32fddbe42cfb6dcd80c9fa1c49db84ce15d37fd84037025dea094b2442211a136cb486c62690ae792ff95c06914382d0119d38c5983cd8fad1006a9c93f15ee0c66e30337652ddd20d58ae1e6505b8b78d0ed8d9e7642a82dd7e52b4e2e5d06aadd525cbf56430807c4a52b32cdb80554729efd157a681800d73687c5bdd906f220790ec6f4f9f3c5c28d19a0c782cc73c54dc4da749ba632e31177812378612d84ad0e25e9776481472fcda9144e112327db4a075c3519cba94cc0280d6727493c0cc191b2b20453860f1f4625300ac72e010e2639044b5f91c75ccfe20a9148f8698eb9ac2e3727d5a664ea4dd2f60381200276817163a885492240e6d40999a50037bcafbca04d8a420b539ea22fa3294e95d7a0026daab249c8379cf7663968d42eb95c565869f010731d14207b595778c4d67e1a4658081aad55b67ca924f9ed273da1055c243030254c6fd8eb102017021705f95a5b6afaac0653ddf75043033ce8e1309ae374a21cbb2eadeef79ad165b55bd66164650240db5c7abc2a446ae316c2ad6f2753998934c278f71e7c426e0cf521348d7ad6fc733023daf9a347a74407f0c7d457a9b11bf97e5321d44d30e729f39c7b96588e96f8613e17a836c551d8ae6d23696aef235223ec12492a322c01c42e6abbfa624fcb3cfae60584039892d76ed67482eccad33d8ff9771c7a7cd0cca37d646e31842e8fbf3047a646c8197959052b5f84f4c90cad6c4e50efe832d50070825a8671a220dcb0bb79e0ee587c0e4403c6693b5cbce0d977e0105c1d9c8af88d280100580683df6100a66a39e7177cbfae00280620755f544771f57d53569de4b3088df506f20ae4a5f90aa42cfa52f4465d94eb54c24144b854296222b0db90292af8d01a116efb44362ff40cf71f7deecb25bff87ae1ea85e64c70744b07153753962397a2402725ceeb48b97f9a82ec2c86fb2e6d0e9918c6beeac4d11bda429f9c14e7b58b876c288cdf1d19f88d2a6a9366ac6f742e1a12cbf57b1e3b46e913f0b18d81bcf2c8a42c34fbe5068130f14324fda19915f8abbb18c8e848e425c1a0593726080eeda15ac32a72f11c12158181b675daa4a9aa97864e26da861283b6bfc071a4e5bf7c3ef02c9e21c9a2431c14e7fc2a2f31e8a760cc86579139b488e89b0254f5082ad1832f8ef3e2f7c5ab30437b618d0d862b6a5822502b8312fad60d4140e57708979a1c20bfc174c8e7ee6665a4d01f6d132164b465e1c720a2bc0c6af9e3109e8125262cd6edfb8d0d13ce29dacaab125cb4dbf70acffe8a10ae07a10bdde3b9a03cba37a81b5c8bb6c4a00d916d1243d212df8cdc20d79d4e6527e94b57b54cd2b9effb29ad53ed87a897d76c43ff33004493851988661eb128418d24d0698824fd9130dff368fedffd286064ab1431e294ab4371dbd0bf689e0a75a93614b8f6c89fde8cec2a472a37eedad3e86d818a8c5fe32fa4feb6c1b35149c2ea44b1f94af104995cc0d18cdc352e1cdc784be94938770309aa9712c7a27d23b61989888dfb57ac34e56f21d9397f11112b431741179e70c95875663b01598f7162c9de04e75d4920164512c5b2f4f4cef123a3decf53ae211aa3c100792a9ed13ded39c839799884a7e6500004b3a5a957821e5fdda3ab089b781ba02d06a21d7cf8dd6bdbc9c3915fbe6d8d6bdacf2dc55f2665d80b2445508fff1a255413d51a65c750b613f92599b3aaeae152d698b511a84ea2c17678376d13e057c4ae325e1485ea7532339319b04eaac3db7e1ec044d35191f19fa28fe9034a34f027983f809f4392727b249190d3e6313d40725cc3425589fb0c303a616eed5eb76b43f2c0dec12f42954d3f3aa5e495ea626a53a1dcc3004eaea569258305a594d077676dda8b8b168118b6b431e1079535572c034934a9535b937e431c58676bab45449ebb2c85487d9205d41c50ffff405322f0741c70848bf6427280fffabd0cd3526973cf8157aea6859dbbda4edbda54c29a542092209ef08512ab734dea64930d4e8bd34de475e1acf89ba4be349293d4e6a1b4e9224389311bc7db799b82f468785659bd19be7ce29f94b6ffa782469db7e30c2cd069989584b91a11f888c764a2f0dffb217960a9365c5337525d294ca2d0d77c10b5780d204135dd8a5e11dc0d8c1b59550e263384d9e16ebce3c104435fdc9fb6e33b9d49d0101435d6f46731c47924ba371718919a52639c9d1081a03f7dd66920b23080b957b9695b0c7b7793a2b94099fe5dd8d25dc9ef42f3775ddbe8d3128a872e51ad4984cfe189786a510a5862c557b5a54431652103fcc5c0836089ed4e64c12e87ae5e17c160864d55fc651f5d4d3ddc4ee23ed2b18102b587b04810b06840b8684bf7f67e24d943152ce555233258143730d2fb7852035aca1764ba16e535d733771537b4aec8b1253d69d794036f3800f485fbd6eebdcb48363eeb75ed9ba2dc6315bedeeeeee6e7777cea3b15aa8dcd27051d44d9356a8d19b0bd1a3b14655a87169b8dfbead52aa37519b0a953d1adb85ba4bc37da7b1a6691ca76d1cb77d5d3b6e499221eaf61d89938480bb7be54ad881bac5e8ac7c8c0e0c5ba1555b4d932c2be18f1af2483fc2dc59cf921a7255abda1e1d1d4d51b7df9723cc3c20a572ed5afb17234ced35234c96c14335e4c21cdbc3d46d96a2d0d58e8545d3643400e72edc0048c40e40b308d0ab7ec105e0dfdf01f0c7a5e1179796793aa9588981a95e7f34bb9066929181ac6aff329bfc9a1173dba877710a3e55d35ecd6d339756421eee612a0725a294cc30fe8a3786163d86463bd257b79007692e3217d926b58d931f99e400a8aa80cbc110cd61da0e8e78138a7cb823b82338d29224506444a12e49e244d225450ca9bba4082123e83c74b992c41dc459236a26ce7a7e6acbd41885580a6dd4ad88b2224ae4485cd79d21d143f266e4201164c1ad25935677d683296afc0e7b5449491ca95788d09e77e09724e6ce9090d59d21115443ae963c1cdaf3d8f388442197235c8e70e9814b0f22931d24a9cb24c94ffc4d7d323298fd2fb3b9cdc40c3977d741f5191054aabfe7c039d06d4c00d5b086ea4be34f5a18fc1121bb2b155144c98892113324c99ded2589b94b9e285277c913446ac84d6f21a94c634946ef12974acbb212fe880f5323c58010663e81217ee4273ebb71880fcfa53af2d51a2786d9ab97100e188519566a06642a835aa1174eb7fe533e862e08126e14cbd52ffa4b3b388581e55aad585128e2c3aa419975fed58a6503284829729a3277551c177e6aa190a4f64753dcfe3427d04442891b03177e8a7b82e9d4713c92f946651eea4c95dea7b8995a3043ce6589c96d0de743656e75aa618d0c9327bccbfc1011294a8ac9ad8a9fa331572e448c1c1195192ba87d98adf147d15851790b3344b9f834c3d168ee738d30f5b43473b96fc6a9f2e411572044b464fb4d452e87c6eeeece61aaca9883830a9aa8d90ca3178319b2bef6bb5e467e6d741ace952ce8845cac95ccd76086abaa42099b76c293d38a93d9dd821388c49af05371f2aa630a661855cce66ecdaa09a713aa09475846771de12a2ed10c77d6283e6286ff62290131e3f3878fcac1aceb53d47d9685b1bfa0d76c75692f8d873e2a0f5da10b8244b292da2c03e2897f9a466818b5dd8defcc443613cc9087c83082193e13a06cdbe6a1a0878a0f952a3d4c3022640890197a4f1428454d267f28a9d4fe98b7e4f78772557f0f2c7e0be3cf630d9a5aa6262064b964a4d4fe075b3e630bcdd08720e2c149928eb94f4b4619836ab0df55ddcfc331846ee09021c2e44a45889db8433de8ec74c723466d136a4348233925562588101c4c10ccd063b1283e894452680a538b01599aa6e2aa7e69f4af86492157754cc674889acf11ba0833831972754a613695067b4279e4e3417a96b044c81087f5cc5545330e8133814b1852fb67582b6483e32403ce8d38ed4f53fb659ea6e552600b66c8790be7bbb54d1cc182233e91863c91e6cce6569c6eadd0ffa34c351a8c46945054fb533338bb85a00b8284a5d08bfe2d0cd3258319a22ab764026aff2a1a518291da2fc39e4c9f503b69385b1f8b5cf84012a418b109b5243ca86d42ed87889124c88e24d98466985721aab2fbb7c3875af7e5fb110f72c10ce7046286da8ff6e32d07b2aafe20804860a47a0ab49fda3f8d786c697ac855a627cc909b55e849910e6311231c84fa4c4bb98d9fea17fd1c0f6691193650185da6c80c9914ccf074420551a1d3de7dfb453f8c0ca6d3139dcc34e56f82f929d0147e6a666856fb572e28cc70a6c61afcc2f9563328a239f3311925f0904f8d0fc4c3b86f2999b76ddbb61c280ed23382194ecfe78719c375cca737c45c8f1f28a8d37e53a11673d30ba6c7a490b766eecb34ece93139259c278fb5cd3259a248edf720dd0989194e2934985b7b397355f7d05013112d0dbba8a8a374148f4921989e19ca295324956e7dcca4c5aa20c1689362b6512c161b418b60222108bbe860aea9b26906234c7e939bc0283429d1a4f6f36c157f201e167f53611b318f7ed12f8384c935d83e9ba14913220946c842ed370151fb6738c20cd72805335c23a346a263d8a6989953146c10c80cbff290f03ba8a68644f9214243a560863c4486cc9016144ecae42a44adeae725ddea2067a06e35eac97412d404259b41dc4eac30b9ffefa0a0dd0e32c30ed23e8e42b94f5d54eb63fc4524213a86cdd8acd241ba67993409aafd2c64850a66ac86a6cfc7c811aa449721739918214a0de32fe185a38dd4fe1b5258cae4671cbaf24ed421be94c16786dc0a446276911011a6f04151b845cdfdaa9810f10177f0a81c87befe4c56fb533348f8817898fc4d99603063f8c11a690c536e29c2bf37bfab800993590d636d9965c22448ede7588270cc5f0a4530ffa1b629b5ec84a0a8c16e478826deb1a987b4cd36416248ddbad3f3d336dba40755ea8e104ddac6e98e104d2a173aae857ad79dd49ae4ee7ed27191db580931bedcc8ac04bbefd2f8a1e3da6663f4dd5d0ff48891c5fddb55c50d54ed254cfba84919613fa20fddfc0489ec808c9e33906debc0f7ad9986c60c853761212a0109ab8008ac8276f6412749e106fcb7bb9b8dc4eee8cdfd01f61c7e97c67dba18998d34cb00eaa25870a41c7e2451a31005a2e83aa0c92f3ed309dddd3e9666ff6588c9dfddcd5768e97dc8adb0f0fcb6552bdfb62a725a87ae99de3926919ed3be9081f8877db8876354aa1845d9a21d5a279aab6a30b499c8adf61bd7667bae47e59cf4853f404d46e451b7ef1fa3d9108fba853e6c2dbbd4dc922e0b63059c6999c1fc1c2b45ca6c0b33470f16a2c37de3b828e6ac0eb63c3125954115cdf6e8bef9ca3de5aa5884325083f1a198a91aa30dc8447863a51a7cd41666c844881ce9362a4636ba0d0215e1204e12bd1bde52c0aae233a1c66f12454db50d7325056c2b022c581269468d96f8bf6db3555a2e57311319c38cf17eab3f8fb6297dfc1e9c6906dcb611b9b13471fb3aefbb6eef7dcb353e54377d31936be26f75e1e1da7d8b14f389107122409454672239d0503bca9d6ae95b57086eaac1f82d4f4c8dbe4caa082564f241176364d5d2c400b02a4650a3288f20084a7aa2132c01fbb8298a1ae30d2837b6df7c4515267fdce9af871bccde02e2e388cc2b57c5671c0dc6d7be1e1a8ccdaf31dfe01b3d387a689bc840d4f840c45f79ebc6aae2731c8a293843d3b2420a73b92644f5d0e08d06238e7e11fb634a304354bdd1aaf831c6186f341867832f4eccf6e19420a5dcb134327471a95b6a5d805592a741a9034a6f3abcb55194732e55fe8e6de1b02af9dc4a516511184811e4d690cf39994faadcb58163f0cb4f718caef2637c66fcf51552984c976bfc43948ed7d16234357a7aa1c2ec8f6268c98dd3dddddddddd5ab7a6b5ec8ebc226486b1fa8a90e9dd4571ca26358e9372dbb8174e8ef72be7c689d91fb2eaec87a2ed47a2e0df4882cc7a35bf77bba28c31461ca11c4dbe729ade305de1c821f3eefef81eff2524340b32841ae911ccb2bd9c71c59b97a6ad3cc6f8ae063de5d1a36fdbf7ba71c5f8dcbb5eee72cddcccbc70e2af6b55fe9c6b673f44e1d28a686dc6e539fdd590f2c65f06edc3eefec75935d8de8bda1a5fce572f871a6a3f4e4e8dd6fc6bb4a4af06fd7d976c94709ff07da2fa4fc07362e2acca9fe37c67416050230de7922a95a075cb255b0c6335b80416e862ddb858ac991b8ee3b81b178be5ba61ddac58ac1bd78bc572d60c08106b532d5fd05561de202001af85b1d507ef90845d377ee90b97e2bc7038aa0154ed77aa818dd1e9bea33f60f26f583937a2b418c94e16a6a8fc3cf4d0362a2a3f8e2c1455fe1c3cbe2ca36e1a33168bd51d3c5aa03089e87958f7447433ddea9ebf57abf85f2ec40f38b36a9baf926f6e38e620d4a6e1bca9a5e69234d7a86a51b9caf85ba7d6261ead6a41c00db1aaad34a88082552d155cb0e0823188a206b7c5a7aab38f05695babf8514655fc36c6ceb0364eac6aafc07161555b69380186556d0d61eab6905107c7d0684cf75c6370783f3aaa26aee9fe162976bf216d390e6457ed7b3bf52969a16b6601df61bb2ad2066a9362916ed653a59f90d360ec385a03f40410d7681b0a746ffa2e959c84a2008facdd7b5ffa28e06f7a13d7277d5bbb68aaf15ee72c337de93bd357a3842323b5c4f0926e01080d1115b58d0c942a4461a32e91bc9d0997be337db7deff1848ef5f7843867b34878f2cb3af10b1f23c361d674f0787ad501d6f7534fc120d5135dc21cabd53eec351d2aa7e9c1a9e6486aedadc5ab56a2e0348b2f92c5f82b1b0fc4281b1d0981d567cb07c2cc43257c9660c01602b4e43140160fd2808cced1fa65e0942b729ed17f60b561e0cebd8c43ea79f91a248951d24c511e90551f191521c912f5252f1a992bb99b58f61bd43de33eb911265d603a5011d37c109449cbb67e026ec490ebfcb6f0e347191df3bceaa1327442008323992814442b75faf4fb76dd34ca090d5feeeda39749b0a5bc42a7fdc066783dcbb0eba0a4514405a231d6d437a062c4c8711cbb37cd785383c7b0b88dfdd7acb4e104442942a69b06788efcf6d512b710dfbd191a9398f7e402cf423c2fd441a6b9068866bb4e409b3f4332ad4600c56eb11d2941ee9228b7f75546d89a52374ecd198b1251f4c1966305b3c9d1f588e8e8ea680cd7fb5e44ccff2853956f4489246c27fbcb7894634949e76674f86f7d11f4ac45340fcf035da2be8201f50db84b406df57a46d6292865181a82910050259dc732a734aa4410ad4207fe908d33fa43f957f28900e0e9b4f651e0b0d51ce477449b718c680089b5487ab5838a1c96083e955fb19aa1395d68035ad061ca3fff3a3a315d3c755fa43813c17ae59a9a68fabac041ff5a0c530279c30f3e41afe2626f5e9a80d66d71e278e6aaaf2f3e841fa0e42636d430a57313b7cd40ed47d366286df142a4434d490ab1f0c8c8032d4832f891155781267f067d4361c25fa66e1a9869fac9e5a7c49ba1074901f2254f88352b941260111469a59d4aa636170653aab4b94c81a94113d193a1f111133fca670cf0f11fe0f4a7f444d68ac8e07b628b0f9b4c75b93f66018edf19727ccff88be274528b0ce676eeae87095d0aa55dcafa36b2c8c8d47d4a6a821a60e9e4dfbeda7322a9bc54c407b68a8cb040a51e54a656dc3311e2d4566b84637f4c018ca4fd568d38e0a8dc9aed0b34acc341154b98a3f8d2d8ca631334845cc901ea94c8fd0a0a1ca3449e5ffa6b48da41f911619ccf093d54fe6ad153218ff27f4cdda86ad90a4865f936fa8f2d32050f095cc082acd0376df5f02d7708dc24f3685070fa2c82a3fcf1a194165ddb2fd1c78fcd4fd8ed81695b94ab630fa992e31342b42652a0484caffe26476544612f2965965ba44e5d65c312b1ca1322eb255b88787f00f03b1112a2b62f53d6990bf221ad4203de2d15bc0572aa4a4415e71341be49725cc0f683f220d320d98293f36fef167ac9df61135c8efedae1540a8a8f28f1476adbf9f276212daf351215e98fc5bdd06759938f153e3f7d33621eda9fcfc1f91b66915c8822a3f55d2364c976839c42a9f46ac920af9807adac6e94784ca2851db74b75846b1580c48130a058a29424b9a7052433ad484ac86f4092da251aa20a586544a748dd3647c3f45983409a541df4fe5470d811ed9afe7f3e1185a95f9b19e0f0ad7f0ac7e4f700dffab3fa2efc9c2d09eff93c2b6e80f75c182e14734832a591a7eea0253e5a73fdea23e58157f532a6b10c89caf8159fb351af311710dff053a567966fda0c035fc0da4fe30432a23aafc54e65488650836ff078c9fcea851e5c721b556c7b489aab28706691414f8349c5456f94b1e985b5db0aaadf18958d54e1a509860554b038a152cb8a67f4d51f909942782ea94b6691163e9037061fb8d89a26fe22bd3ef87da942abd390693690c553375df99b6f57a857bb03dce801e25835c2a4a6d06f466eceeeeee3273f3f6db772fcbed2ff1e565a3e18dca2357bc90bfc4fdd75d99399ababbbbbbdbd7dddd8b5a708fc642e1ee05366ea0886cc41863b441c4b30e62e99308ba92f6d1b78e5908fb784c4cee4becd3b937c3eb26861acafa755fd7eea836ddc147b55bc20c599589307d10cf66a2dddd398031fc5cd7f85bb52f8669ac2d4c4ceee5fbf7d8b8c8cb318ee3e6ecf18d9c5c8e8334e8b2eaa62432677274832395d484b3471e5ad5cfa3419e0697a6630d76cf977230633f4fabf8ee6719cf607e28e8e75b180c0f4bd3dfb13ccce7f23a6d13a929d21fd5b4e2fdcbc3fcfc1dbc7f79989fdf9af6bd8861c2bcf72bdf3261defb962f26feca551dc11eff03e6ad745f9b7b2e622a51bcd5f2bdfd8a6f557ca68f8976ec0c0f8f1e1fc7b887671fcbd86748a8e551069acd1aee93da322ee269b0417fe6d7c123c63c788c74f0f0901c59078fd611723c7a0ca13cd631efee47d72b4bd897dd6b92877cf72d7880333ade92e165b846beace1e5bf6c782be6e9cf1e1afefbbc67e156b289c8dc9ee37e69e413792b86c5dbf00b93dfe2178682a1313aa4bec5ef906af13efa5334e42aea7768f1a916a85f18eac482c6e8d0e201f03ba4de86d40320457dc46ff1f20b7b6141e537161f6e8f426d1b8b8fabb0083915301b8b477dc7e203515fea39d4b390815a8ef6b4cc0eb282be0aea72daa5a1f626cde50b676d991da4ca67f972acaa17f3c5c06464de7f8798e798f798f7d1d47f61dff7d1774adf47fcef17b69ef735fc7f0dfc35f0d7f03efaff1736c317a37dea1746830e347c8bdf61864f511ffe337c0bea03c98eff0cef233e0dbf30193e1d57c9f7be9915fae18899e17bb94a7e0ddfca55f23f191abe4fba0cc7f8b6c665acc5d248992abffec264be85c57c0b5bf9b66a32fcd248d2775deafb06b55db94f25c72df8a51a94f253a0e476fb4ac30fc14cb58d7c70467ba9494dd3341f6ffdbe949af47ec0b44b149c14647b920060de4d5c61b4bc3f738163ac945c6800108001704c48f5df5e2a41666c007ff52d6c00dfc2c06f6101f81666c3b730986f2b00be85b14783c512b3a5861ca47a10ee71f13546fef1fbf564acf8571735e80de5515fcac1e42e2c0c2df0cc5532bc3490b708f0febc858dc152b8c6dfdf53deaa792fc0fbb7cc5b2d9e88a8fa0d1f768f8b0ffb87be8ac54fa3a5f1371161231ab1b291116fc59cdee67fc0dcaba106baee7d0df405ed917a16fd01f36818b3832b0defaa603d79ff82f640e2d19d176f437bd4fc0bea465c3c8bfe80cd10faa85d04c59433ede5e943f99e7c3fbd7f529edefbeee41969deb7d5f36478ac511f6ad08942772213f3eee4a34f6ba04c8e84a81d0d5c7df957cff085fec97cee24c7aab2b8e1637deab37917df8baff95a05a09416e06b688fd417e07bdcf0f47fc05afc80a954efe27754efe2e3bb68f135b447cdb7f81e2e5ef53f605ddff0c1f8d4d77a179f01bee6737dfcb6b260f1add6ff80c160fd8bdf61fd8b8fffc2e65bb447ea6dbec70dcffa1f3097eb7fc00cf0e25bbff3e25b1fbfd57a17ed51f3adefe1e25ffc0f1801be06e22a32b428c0d7465a5ffbd87c1da32f589f7fcfa4700cdec2d6f8bbfb501796c63fec1ab294eaf45b5801be85c56fab0cdfd6978fab2cbead04f81616553c0ab5420549f399cf628ca98ffbb81478c30d9fea817295ff0df406f0068a24a266cde7e25bef06f0c5c4af79d5afbe9848637470f137fc0e35af7a177fc3c37c3139c4f73ed2181c62103d95a76b06509527c6f5a37a32bc8861baf89a4f3dfd90e9f7fa5c7ccd872b1413ff46ea4b3d7d062ccc86abfc29ed91a2bfb09a0fb728457fe0231812ed17e662e62d167255d190b7688baff95c7ce0d7e203f0d1efe2003efe61d98a81603e226cf8e6207f1ddfa580bc05001b5e7edb5d7c0d353a51017ca855d14c9a998f855a2e686c150b0258b48fb7b034fe2bfea58fa73095cffb9aa8e9d700f8da88abfc03f0b5cc55feaaaf5bfc547f1bfcc1cfff86cf5f87fbbbbb0d0bd3e1fb2dacfbb85afad8a84536b7277d83ce53e233b3113769d09fa938c7cdd9454c85a734e86c145933622a1e290fb151f50f79567d4adb78150e8a454546454c8ea2a8911ab1f85143df30837fa1d56f6bdd9d23f33feaa807d55fa827ae56ae21d6d0d0bb3821822c120a484500a157d1c55ac92863d43c6a5a94313a77cc0ad55743ee058ed33613d1ec0f73e059ed8f3dbabd9f876bee6ebaa7ade1d73e6e2377aa3b7c0879dc3d7ae4b611749b92affdc23498f62d6c070f7777777777775f981c7a821297ae45f7e8ed37fe317a7b778c31be5cae4577bddadd4574e39ccbe5f27ea2db54d7b5e7f6fbcddcf346eab16dee5ee377403a0e71f3a1c697dbcae0efe4f6a3c6e7be906bf337cb54edbbfec21cb5b796ade197ca5a68010d744b659f4ba3a3f64f23eeeeeefe2dd62d0c47a2ee2f4b1967661633bbe69cf38593f3cab931cdc993fba8a58c204b5b9c1c6eef7de5e474fbbf7072647ce5d09beec69143e61e825954c3ddddbbbdbbbd8b78828b4b37e0e65f096c1df7fba51015fdb7ed9d04b2400da741edbbfd72b85fee29b0aefded35d287dbb6bffdf6af06b57f35d5b44ddb36d297be237d390d6aa0b6fdabf49a56da489bc669bf9aa6d5b861a369daf621ab6a1cb7dba6699ba6699bb6461b12ba4d991a7c6922a78507939f85f36ad0bb5dcccccccccc1cd9995742af283798c562667e1902c8f6812270dbba25b38d0a6ddd36162bfebc925293d2c7b5e4953caad37d3b0dc61afce32d16221f21394a1f2e143a1adca4492ee9280b953e56a284b5c4552a6dbb6d39b48ad360fc1facb6e11ae3bbc986b7d80743e02633c4307348d92a44c82af951d26d1ca5616fbf1cc3e5431e5ef9ee5371faee83f9aef4f1d0c8c133a4f442280f6930be78fff22c2c2cee2e9ee77dd39b2f2fff7296175aa3c1c835a67f79cb17f2a86021215761be309e3e1bdeaa8017aa4051373a7bb8a7418ee17dc813648b31ca3d2edf756c62f93cfc51bfe31c5ebe7b1a2ff44775f9c2585d5a7ebd8de5fdfb51b78f876b0b2500d7b07ce90b5955a741961d7e74b47da10f757b76d36fdfcacb5750516627b4a4d4a46dbaa1b6d9d2c7988dd658273978840cf99e2e8794e59ad27ba52fdcdef4edcdd8befb977b4fb926bee98ba41f6fb19258521249b4cb692e87b59a618145a723b19b2c8eb5cbad965b8e822cffd578a80e5f293cab43e3382e8756b5ff51576da36dd403feaf063987f98593e3fdcab9c9c1596fedf34f666627221e458ecf31c618638c31728c3132b72c8a3bbbbbbbbbb3bb3b733b731450a64cd30b1866702136d405c109962c168b89e9cfda0da40c9a401139d68285c9cf5ab9582b66667667771b3cac628c31ae9a609e9f16e64d8d1c9d1ab346318a518c629d594e0d9d1c1d9c063b476767288abbbba39c46298a4be4cc8debc6e5eeee317a8cae178b896e70227dd19bede8dceddded9d4414a51e6c419e80619b01c5216ec11fa1abeebf76c571414cdc34715ccfe4396f4c13c799263785f8f80cb1892de3628c31725c11a709edb6ef9c28d4cf6249b42c2199143d412aa21d0c93df5d324be6c8919959b2941c99dddd7d062488ea2d75e0842048a10b33204882446f71329fb58a4ca6c082118e98428aa127cccc2cd9a5f4e8ceb309533061e5cd494c6666666e421376e018cc7af21fc5647777eff6eef6fe81bd250993715e9c13e79cf28593f3caf1e98419b25e42b3a7d0d192da14e807355c930b6271684867d3e9741606696938f9cce1ece834f892a5f41c1bdcff7fc735cb6ea949c9cc3a53d3d16cec0ce9e4d8f8ffb7b133a4b36343ead8a84165878a0d1ea8c49812928358e5bf5aa771d0c25877f78fb56b13c7713d82a22c28e1da59d6d0d17e23b5c7bd7b322ed07150b75808a16522a50a0b2de13e4cb0100567820521af5c54ddbb92c69aa6691a89865c941a3b0dfe0f341e98655ac7491af4208f41dd9ab21e64141c3974f0b84c4a292507adca9fe33cc83484351004b50e546debb42a0f07d0c274347bc09143051666c963c771a387af12171c9a5d579ebbc61863ecbed34cfdad0a21ccee967d7dc5d42cdffe37bcc552e432badf3c05909e694c5c89f4460f5bd4e548cfd44959a3eba4941d8e1e72f8ce0d4c916b21c2dc5e3bf57023ba478fee7ea3071cda0d1c2e739af9508c314610dca248b7a8c8d42d4466a422bc53ac06777757f557bb2ee68e2edeb1c103bbbbfb6ac533203b78c1f6f6eeeef7da7dd7eeeec68d717df7bf519d0409f7f696ddd2dddddda56c97d2dd9bfbbf9bebf13873e3ea76b956aff8ba71bddc5d2f5683fc2ea21b9ca117bd69d015c45ce666e6580c6af34c48bfb7b777b78cbedbcccdcccd423cb0fd81ac2fdcef6ee66fcabdccccb1bd6f9ac5ccbccffc5c7315ba4dc98de74716201803794b86939189dc4719527cd3d19c35e258557c8e063307317211e25b605b2b30d418ee518d0c821a23a3a0c67f7932e7af5668087a34fcd991bedb4101ed39ada435a99b6baebb9b861c496b12a9b96e57b84537348d85657ed3d361912b2e229ff99f69e4b83971b011063212370da85bd388abc1288b44f9514a29a5c4119fe3364a8c32b2604173ef5f57c9e95a901638ba0401f3a71553497b1716168fa2e152d90655d090856c8327ea42597c6bc4c2d18d02caea6af9c11077f10f3333bb4776676e974d8c33204ce815cdf9a08bd2dbe5f29e4cf991ffd514742d8dbf0be85a182bdbf6814098f2e383ae4e6e2ef9524a295feeba79b9eb255760f418dda31f2d51a367c12bf29f9f9f13112f3f2cfff231acbb5b5918f27d0508350bc3f3de5fcf3116ef5ba9429495fc7cd3c7321c96b1c98b9e89e6d0aa8ec9fbb8ca328ed13d2b75bef45e2f9b1175a6254edac64495087193b6196a1bd3bbc9443de6ad0ac47888eadf1d21936da6d757605b0cc4a5844ca4da70991866c83fa5f728c7bcdfdee54ddfe6b527c323bdcb720dd7f87b2d52fc781e77aa361cca8c95ead11ca66aa37befc25de27daf27660bbda1ae06551dcbaaf7aff6a4a9650873c5d42cd23349939426afa5e749930c5f688950ebf4fedd7349fdc5d34b8c95c85848894c1644887f8494c8644a84bc2413ea91b1ac6d5c4a74ff61599dcd620771df751ef6ded219d2e118d2e43a4be38f8a6272afb3305664a8a5a71bdd41811d5cb9da32049c1d9d2f94dfdd9f8d9d7e9d1c1bdbffbf8d9d95afb363c3756cd43072d3fb4b157567409e54b99ba9fb7ee81e15c564d387f2743a3a5de51367478779756cfcdbd819d2d9b1a163a3c6900e951d2a3678a0a2e31edd24c54fb0307a8813231dd44748463d84bf878c97c684b3be3cd5a8cb0fd80ee979f28bdfb17f8c2ef4f4e2e2b2e25bb9ca55ac4eeff292eeac7818da03e657bc832b688f9757c1abd3d7b5e97452f1272a57bc0bcccecbbbb8fc0b3d3d0cedf1f2a715df8a57819ae0cf5e1ae6a53195de743489164657fdfb89c7bc353d741fff2ed2a869e9a43444a1a853f9751d859445a46df590abfc91682f9feba4e9630ef14d6ca4687235fd0562116fbd681ceabb75797997dfe1e55d5c5e7670f171a21c2463c7bfb762e49f5cfee57758f127eae3f42bfe85ae781f2ebf345afc65f7642c8ac59f502816dccb9f3efec27c7cf9d3efbcfc89c29cde0546c5c73e31d4d779313a9cdee5774e2f55bc477760bef3765c5e055d57498efdbab77c2091ef03e65fdefbe92d1f2afe04f32fbf03f32f28157fa2d3dbc1472ed40712ef7db8fce94dffde5a11dfe4c5e8e0f2a7df71f913f5e8cecbafa0efaaa8e2d3812172f9970f7748c517a3bd0e982f46a317d8393dccdf385139fdc25e3e5ca353b84554b67b9863652a7933566a0f591a7f164bccf85de30753394f014b851de28f824514f65e63efdb9be1d16d90f9e5d2b475fe3d04d47d5ce518d0c2d8274e9a2c513264a49df410f7501f21020202026aa276d243acf550b7265107f550db849cc71e02e4ad1e0202021aea211faaa106cec53511992b77777797f54307f1e3f02e99f11037217ac006a112e9d67495f7bef2fefce3808df1b281c35b2eef2ac0252b257c2444c12cd18ac7591aff35ad7c2da3f48e33549bcc96c67f5b627a528607c3ccb1aa21067e546dfe7c399ae112751cd9e5c5e5517461919726beab828ffa85710bea7760717ad4fb8079167407d4b37816d4c7e951b47d96ab9a09876370dd1726cf6c44155f4ccbb37815bfe28b69a1313aa07ec5efc062c5b7b74b93a3c18e1f5bfe476561895fefcc17511f0664c4a7b1953d6ed5716faf843e5a011f05228dc9a1e5f9e34b1a8343cbf3cb6fa1dbe0d40057edbbd7be15168aa3c19536f9af7c3ddce0817b5c3e1cae7218f0e55b27d22a5e027a6f3571d5a5b4449307b631e319cf78c637886cf07023a7d3a8f4ad9724390a11cd08000000d314002020100c868382e1603c9e08926a1f14000f7c9a447a589a09b424c971a042ca1044880c000000008008b04d01c4f00724c8e5779e023ee9a5edd2da30ea243b681f02b1b97bb2dff0fd5f98c029c1a90ae6b66e0ecd8761f82c03a8e666d34e9fa53d69a14cdb8caa27131c64065db92890101a1d17eaba3b7f475b64a8595a720dcba15722f9f3b78b9ebbd8e26e300db2319aa6336edba603089196cc001730c0b783948b4160f91a9f39867b6d4d0d40a4dec8f2fe620ba02b2c6e3eaed635f0dff7810a086cafede642d7f671994d8abab7661731c0678795456c60e4556c14f6347830f9bf5ebd4d9ceb43a43c508ae55b30c9f2ee0b693094892eb0a141d675bd2d7a4be01cc275f9ac2517516d269154021b53a760e3dd4c4de30fae66bd798eede4b4df38a2e73c57cbe601bc4e28a28ff5f1d98452f966787de0ba942b559a2e7d2fa5cf90e9ff155e07d8c5099460d70ec69cd5fe871536f0ac44e669faadd440e61713b1d8ee7aa29c4890a59c30ed8b62995aafc62e0137726d5cea4f46a039ad7a2e742d4261fe282dca08d04d0ea9d56ed33218ac6decb1106c5dad9edaecb4c3b2fc9cd18aced03d8f624bea5282d2c4796ccc82e1e04373db079db22c679b3a1da7d29883a93d052bdafb84ceaa84c24ce8f1abe66de6c1f47d047786e3cf13d4c13bfd4c55fff79f8bdc414063831343a99c53d9f7d1e6aa67c41988294008a6d06c8e9035115d5259a18d994a3e0123f72f406526095970078c17ca5042faae5c2d38e642501b986221a1810afd28279056526f7e54810592a0a7706d7c47dfd5cb15b4ea0923e1949f0276d548dc0cae5828720e1bc1c750616dc6883431eeb726c0e6c975dc685a9f77ad64b922aa9ed5a53391f84b694291d8d2aaf5ab9a3864c6bcb2cf96fa4c14519f8409c6e6529f05f1af16f9db7b63c89ed5929fd53c8dfa5451ce561e3cc5df158ecfc435767ca656594cae69bc1141136f3a14373c136564d99354dfb1a696f5aaa991e0a0ea847d14305963af4a8b53c465391bae6b0e8c82ad121aae1a57007c4d591877a9d404ed004c119715d99cba5deaa64d6dca3d572beb9079a6981d3b74e658eb639767d17596afdbe7f8f99a301605d7aa1591fdc1d418e221c399a701cb83e586ccc424072adfbe1b12bf17e9430921e8160930b5267a5ec3c5abd0802aade11ddd65b48d3bd156054f03342f9372fc0f5c2478ade82a8abd59bfab9b7d9e4ac53b2f7d66b91032e68af22be40673e597291b567dd0d9ded01007788a8aca54c127dad44069356860f50d74e554dc55edc6a4a9f706d31d781d8ec7b400a2796d1416b5b300b96c1bb8ef97ba0c3801b614a73b94da9a481eaed0c799e611b475c9f0fa8a2da22719a542422f1d30dcbbf1e225f671884ff6252fc741930c58c241c5e4e2e652ca13561674598b5b0187fd261757d6d734826c6ba99a5b8f622b2b2bba1eb112fdac29edbc79eca3c87e094a296288c112b8a1d87329cd15b19ad1119f552c0c3e406c767a68dd6eafa2d4960af2f52218d1d706e14d051bf330a9d5c28a0be6296db95716e23102649207d0c81b967b4e09b564255218fc4750cadca54062bf47f0f53de0908abce4afbb957d7f820eb185ed7a2119e0451b9ab751558d6f4c2c768a7aed04370efd27cbf8602845d333d78b22e4f57674359b9b21ef78050dcd204f6fb900027a86d848acddae5f2483b5c48da94127c63e7383b2275672ec2d7e6d3476bc70e06812898085b7911c219f454854d934253bea098d7337f6f1b8c6ff25962a7632c7471d3e97636856a9f0b4def1edacc5155a6f401515fce1fc182bb67cfbca25811866950ceb74936aea34f399c04358eae4a0b37eba3e7ea70498c9126f3eafe7a46b3a89d7814d35fb40789fbf2a8081621b3fb6dc275454649751caf9c75d5241b207ccc292a8bfd823bfc2568eabeab637d8d76b49fb64bdad162b5c6bb2d578a495d920117a685bf94ae15453eb10a9152e79d5a82ad764324e460dc682c00cec86cfe9e0d323525110a1dfa2ebaacc5e93b52c0f0b7f69b66c98c0725ea429f34e53a368a5c36edac98cb7df66057b7326e27ad6a64976624dfabd21c296f37b9f2ed13409cc86fb96ab8e74b8b5bde207de13c18e138a4424da62396308df952d66a4d5593cdc1766f062efccfbab1f839583a64e55e856e98b5bb5d7376220bfc030919d99e4a66c9377d7937e74a0093de9fdc1e333aac554bd6c81599ccd6c5a2484269db0155028db13f7d48b7eebc8e07df47fb478dcb292766f0d34e96102090cd7220e5128fb40963fd9774a9eb77fb20de09325d49f6cfa26591821220e23add237cac5a7ffba9b890531feb8f9e14a09e47ed095af496ef1be222029b7fc2b4540330f3c2cf98b188222e25b302226ea5616f0ac93169ec44f5ee488c111757148d8182658143df672484ea3ddce571881a8c76aa1163f54112bd508fb32f7452bea8194e023d03f5a74835c57c49186831df48283e3947be4c24535c30e2519c409213adf421504fab455a15ea6f3ce036a30d6a0341cd0d1a31480d4e4f5b9391048168a6ae1b6780c5c960d11ada53dea281558cbb8ec920308978359268e9b466e3182f908de211c04e304bf08b3b73268e43f70853185a1a3b0b150f2b8aae0faaefddad282c3baadc3d0d00c563e616abfd92d9e3fe90e43b979326b76989fff891755bf348b77b530b7fb82713258f494187eed6cc521214f0b8914f9c0378840d46d918711fa90d0a7bb3b913cdda51fada17cb669fde4888b6eaa471db952ba3bf5321600f0084e6d28eb2fbaf69397040b32698d0b02e664803c39ff98088199cfa3dcb33eccf127331f452e1c5728a70978f38eeaea16d81fb23375f2f318cc62349148e5684119114b6999fe77d0ce5b0f1622ef65e3c20b11dc058bf567f7155f7ac302ff73077d1cfcc4dd090391a33c88555f14d49e580f37d683b3b2e84da07aaa19e142cfe28b3155360242e27e82872e484e2ac9657b16527e75e2c7e5e0956d43de741b2f744d142d5cea99fc8990756d837a0ef6dab112820020c849e8cf7dfd7ce7941f4ab0963eb694303b9588d81394d537a6e8ce2ab75a89c73ab196e3cd610d6509136104bb3ca8d28b3931355334435b53b4d4f03d9e54c9c987ffd02afc8437fd45e80ee21a1c101510e5da289e4676b01467055c861105215e6b6c606f74cad9a794fda56137ca42181ecdd910e759b8628d00cf36dabbc2aab8a23394faae74361eae5176b316d269c1c36953dd4fbfd9f8c0e4d0ba75bdc108aa61c94c95b41a62a824920579a73206b432398df5b6ecaccfb4ef46006826bacbdb95f12d6fb5c71d9016a18a4a6e2d955b3cd5567bc008d5a77c3283f1795be8b66ef5c74b2921206610c9fba16fdc74454f24da3b9f3ef8195dc940d4a1b2346d13526cffa30856dce2717b29ea56dd246b0841f70d406f71960c8a29670f600a1c77f114b37d53501553c5cfbe11855fc84e9c7324013df8ffe55ff0585a0633f08ccc098bb5cf7b5b26a1b08d9cb465448c19764491ab3e440117ab0c4db80536259488a534a1d4e752dd2c5ead444b088e0b42e3126520c13ad67058c0050e370a2b9e19c2690ea0514dd30c65bf2283a1a1f74164eae0b96e54980040de48d5f24b884c602bfe9502e1448e2403cb19aee79a5bd622115f4f2a67c0e0d294da574c467fde1eed0cd1df2902c2fc6a8dd75508604b1ad7e014886b712f712d48449df3394cf0502e1617bd56272ee3775522e6de0a05aa7c05b7d8938b7a70377741e5daa219f3e0728e439ba64faf76e1a9911dd62c5c35f3fbb345bbd0d0d2289a03360257f2243c08cad256a7221de8954bbe997477fa326f904b08d09c378b3ccd02dbcf22362633979bfb829042734582146acf8c444a4048420f29784dcd4dee6f4808ba22a08625a45cd566c7b66378245d151c4da0a89072beaea3da953d63a5c08222481f646c71350d25f49ab231ff6f13a0f3efa784f60d655d277df83f9a972b2f345a291f90cc5cd2b2b3882ec4a9702cf18fa034140ad00b0d1d4b6259610892c5c51b788d54ce2ca0ae7cf53d70832274b2a4b0f1387375dc0cc34741b732e6c81c1cd0d39b4f7cbab6e54a692ca1693818be0f79a26b760ac256c38964fb86df92585e81b0b5418bf68d3e0ec2aa515b8e8fdd2a59306aa50cf8c9c62e2e8fee63174babc4902b32523ee23e3513c6c337b1cd0ce8d4cf78b24e892f86a99af85599b1d8e105a57034d1ebecd9151eabb0f0e6202530cf680b62c0c8799b3380fa0170116cb5e2799d6cf0b16337601696366d4eb6011f29f40cd67f19a5d1e98a56445476c1af2fa258b67ea8db772693b22105c533e6a02ee4c0e4544d50c1348bfd4e478c91809838219e5dbc4098d8463c2fd175d26dd38b8c9cfe2c6657e39fb15c11128e6c24f64b8d266c743b3ecbffd6175d7368a6e7bf55c866d71cb813fb3d590e3ff160e14c784619c9c0897414ac13da4d0a91cf470c48c4081fbe5e1fa90b89f5a4c3c88f095d2c724de289a600352fd65eec7850372a8418aa561d7af8ff841df5321572d62784c218c3c3a429093efc147cc26109ea35952750a00c35298963b87929d84e7d879f925c926d6a21c4df4a792278b6e7a2e7eaccc91813a54f0be26a5d28b6122c0655209b82b49d48cb18609ef2f259eb0edc03c5f85c2a289af41df0d533a8e2910e7b11e19044463cbda4953d1455ad2f8e0d6c80bc2ec7dc9e19fc765562d1269a891793674b4efd8975c138e1ff14a83fdcd6fd50ff602dce733b5e5a404cc0ec2a9654ce885caa8482209250382c65c9e3026da1dba99833e13cd6ae61bbc439c679be50a69dad1bd40f8213000892eb4362793b5efb41a4ddfc613db979238813f93ec32b87da9ff68be4766879bc1f7651d91ff428c9d99e1304b8ca9bff0aecdfe8769ae0d3a136a3011f44296b4ea1d3eddb45006c2e606d8f3ab16b492198b3528c594deed497d8d83006968e89b2abbb6306e9a6daf9f939cdab5cdc9955f9e1cad1b87087c8f8d6c6872b3628a2c8d2373be5b0d14951b6a8e8aab54bf5c7d0fe7bd9e219978602abed583317060d3132551cca64fbdbc68967feb7b76e228c8471bfac4a4a4bea65362ccc7e1e7fe8912f705ec6ea1941e1ecfac42facf9bcda931277997f11171ccf228b359ec368c498e6f8901a90cd21f0e0e1fc2a7c973480eee4c9a011732236a1acea3059c5e24f672a54b8afe8b64b1bba1603bfb0d0e3089ded28f9085301111a1b0e831f7dec4ccfd6d91cd9b4ac60f46a3709cf9227d714db657e13696ca6a7b0e96500292988ec24fa8c08d1102830015966416ffff1b7bf352bc332b8467e057d60353a41a0b98067f57276a0f434dcd9bd8c004ce4ff39d570771ad924773f09f9335697ac43dc8918ad13721f44430f31b21446e0338fd6ae368ffcf1d470096eb790694baa4ff927d5525c4fe8d0c52b1dbe490aa419070ff060f0445c60e1dba220fcb39601deb0313ce5be4f950eab29165677028652d49fc4e21508a3fc7bc90cef3ab6648c207fa4a49946ce49cee143acd8e880afc5dbab993926f42038a966f7e916ef9d8cc605c97879c0ffbd3b73482688be3430e0528f5e4e2daf53f1ae41be0e325fca43609e8d2569754960cee27283b358657f63c6684a1d3f24f0c9e836819e09e70ac858e689ee36772bf650c79a9199d80c079bc1b0da1619a52937ec970a706f4d1ef713891a085dc02be7c72bc1122de7d839d398af2ab11e0db21849d8b2021002d61c380aea0b31488451c1785521c060c80e6f8f9b43c341091e6528bfb881aee4d652114070eae5af213ec5e11f2294a53f746245851f9a4fd34eb14b2e47281d945a2e21f26174618eaac44135c9b3a6d9b02799ca3bde1ab970baa77e0addc71db968904f15ed349b8382221fa639f56a1b6204802f09b30a813dd787e5387126294ef7e28c45f9fd7a128425a995f436449d6a75e040f77b4401ac57fb60f3bc4a466557c350afa673eb1c9176df5524010057c989a71e78aab88c4aad68e2733dfbbb19de5a810cea944781c657a2d29165bd100db714bf8d1e29353638a1d33691bb24078c90e0452e2bf0038eda7051b8286640c319314e7b109339507c1ae8c718fd3fb5ddeac9d733d8d661bc9f1bc65c3f7112b8e5d25bab16aae21d60032427adb4f611ac3d43083404c6e7ea6586a6af7933304396a13cec49ec941b37543706085457ad9989d1b8c6409ea2a3593c666aeb8243e2b2fd396d6009789ef1981e8d82844751446b2c0d218dab8657174cde7b60961418637853c9033d81282cf39fd8021585b83aa05b6768a46ce07cfc897bcee831bd8789d8a5ec3a7f837d6b74874787ff7a0e1c88c3ed24d53394d3a32def34f19f33afe2382be46e05a76d829f308834018d8de006a0fd85ae40b21573eac8beb40ba490c3a2a7200602461b349c3fffffe94436c351474c03fd48b45d5e59f6f7c1d98ec53aa02ccf92c0dfb728c0efcbfed5d216950e770e0e6f8030c803cd6f12dcfea0243f8665a2c63443bf818f2bba2238de1e0900fde25d05f62c97f8abbb25e7eedef3098f44ef8f7bf80dba6164de5eaf62bfdeaf4f140752f84c00f409235080eca101ae55ed03cca4a461c31428eeb98a8976e2e8a8981b02b696c609b32bc1bde26f89ff623e8fe280aa2a2f3a500006b1d552f754e1512c3b7f8742739e29bde72e9685f6b66fea5241df3c7a442f8190da4c3462aae85988681404fa96c52f9a025c9265ee7d4718425271f8844a8c921c464c95c62d0acbe94f0e342954ac42599aa0adbe9899741f8d0e9b6361a5fdf5d11a52ef550a60c5af40907a2cbaf27b249b1b9cfddf4fd7c90a41d62105496519f785c8e8170855db8fe116995ac41c3667744da5d0e9acb19552f84dbf68f2a4e280ce15c45f0da1a5338bb41a0af6ff9191c9dcec23f7fcaef89e978fd0aa43bfe03c0d8a19ffbe4c29eb5f6a90e0b63a706d55d09928b022da625ce165c24e5c5575d29b4766d25d1a2b98799c64a439c3815eeee6f5a154d0ce4acdae4fc68d500371154937c4c5b7405db1d0f25c78c6f1e2b284450f02c7ab73246d982375ebc2181851b2aa7899b87ad5cbb6b90bff4eed977252f3a887d9fb59857d022a094828d8da1757d8c9f3ea0b72437cfe6fd21be6ffcc1523287322f9952ceeb267c61c2eba2dfc12c250a68095fa1b9b27054f61e464cf075757091f02988a11b649c075fd4ccdd32972981e1f9aa199bfbfe2ad3717610a512f3d515682e4e35c9471eb7d017e1ac5a25cb8b9a063b647a97cac9536d8edc9394f8ccf88ceea90e88bfbd1ac96c8b59f14278beff8fe5e6bdf2edcc430b07a14018638a2ac10a4e596741165178b6b95780d9f7334dd6c3d367126fed143c22abe8b47677cd1b88e95e4f8296af885364d37d97049479a8240e4e75af57ec0710224186315c0613299a442eb3c1eeef879c33b713d0f28d0b7a1e664ab20a3bf239b4f99197723f16d46132269b7c4198cbc8431d23f225f7d995400d5194ea3b59bebf9228d3c9d815b2abe647aa0bbd44ad9cb907de57d47ca314074840bdfc47db79af0c6fcd242b62ae1e0644a7198284198150548734694542b2584f1a546503e928375ddc2476db95e822521eacc8847e17cb6c5c50ce1d1f5fff8ec51e6a99b9bf84aa2ec0a1fe947af4089c155da0592187881ea3ffc6b4050b2d67076ce4e97c786cc45b46d08ffbf88720f6e17bee16e341256028a43653b3f023f7637dcefdf6866bd8da6834a1e309b787db2f0d3a091d0c1bd9877f21cfe38d9c8cb6ee2b41b0a395b7f5ab354681141063c42c1d324980b29954e91e413854107ba00dd3a6615fa05d7df1843318508251419380b221854421b1fab2518e84690bd0a18eee1edcc9d7589c1e6d7b66b2640650320c22c395d0936cf6aad9286a21eb0cd6599182d09a25b42105cce5ee8af1e81709a1c3528572e5948486496ab7488832fa56f90a3b10a3a1ebffc223a4f6075684c20354e20737759a5db2dc041b6e5b526164c106245caffa9c0371f98a8dd4a2cc0aee0822f9f60db5759077e4420c165e43af5209355345d80d0aae28a26e9c37a3cbc96c52f60104990997ef08f40628f4b73746d5df38951ac59c297778958e24fc633ec91897fc986daffd7079328358038f85d63db7d819a991ea75dcf5ab0840b14b0f63fd57c12a4def1b1a8634af9caae3309146d9d21b6df3d48e026eab21c1fa8924f86c595329a970259d9b7a2158f2864a75eec82ec6f62a9125c9a2291b5ed3d65e71fa14f9ed0ce0d0f1f022974a34a7e87305ecd73a64d7c4df0f21ffbfdbddf5f1b681138259dbdf7080b22d754735408b0902648465b4cd570938fc3088505926d54b970ab40ed4c075021d97108105a160906abd806ae76949f96752e0035e674d57b4709ddd7affb3122e4867afec0ccfb7d2233ec1260514c9c45e8e1d6c39feb0035230ed69c12ac0f9317ed2e98b44696055f31deb76e36cbd0b81d2175dd94016d60b3804819f4c450d1bf1e001db062463bd6d33f5f6197c3a011d850f5dbe2ae218ef5f5fbab4454801900b54466f6bad61f504ba3cacb4485fa3e07b9fdc194e0cb37cf591bbfb2a1ee15ea4055fc54220625f686aa926e6858af33e801ecf2798cb20a258aea5156b8aee670b0e9a081e34c992b7a0ebca02071614a805d52539030e1c36aa71f4caeb54a634b21ed3d3bd58393f770defd4f6632e0878bdbef729a4e38620195b942f89391bec0120d337c7cf671a3da8122b0f517c18d1bddd6de21eaf0008a8ac90e8d39153759bcaf65240f9d8198345f55aa1fe47f6d3a820ab14c384ecff35c260c961db12032e24a77c893c08c81f721c74aa5ae12fa9b4ae1881e633c6fa77223a8ec498653a234a046b11a287ff42029a79b1919e845a98f87122ea94407c69e6f8f34f6b53fb0bfcfb1af2380e0345a4e46adfbd1394628178346dac106c12570014ff7c3cee06a5e322b11e899fc89f881d6d241117394641471fd39acd00dbc125b2d4850ef10cb815ed92abe460d160afb2323df61871c1beaf4d5a1ca78012c9eedefaa20f1e8934300f553ef973091399442f1baf5ef86f30acc3f92652a225b59875a01f7456e6dac087e367907971105faf8265bcad3d6967fc9b5f5fef41c708ebe02c990d993011550df9ac45a63ad033dd04a905317577697b081712819bd7c4e477ccf2caac7d4e95f1cbd61ab749e490139a7d7859f40d94f59ce2fe90f8284cc96aaa9d67194d56010629b87769c5be8109d826479fceed53af2c5ade27682dea0e8dad3ff1c269522ac018ab47784792321f8139b657d23de4415cad159d9f9932c717c3a76524adb24122545fb8c1a59230c798d00de195fe91508091441aeea35130785a6fba89c757894df862c730b6120f7719a4a27fdd37578fdbe7221d452b67b23fe6cc8f4c40236b0175c849f24512959e382118cbd3b66e8b1071293812cfff3b045854d76f3666c3a40cbe52f023649a6193df5f9f41cd443783d8e8e2a07912a5ea1927f0674ed41b232dd4c7e0d64fcd81361f112cb6304c187a77817c4207e0e45fb679f8bc01c115e2ea62f34ba2fa63bff3918ac158bec8cce209f278a5f02bec3062b5150116b5162a360e19b660638149708c4e8aa1eb506f4efd9baeb4e6369303a326c68861e695460c78532b8692455029c933764bb4e7a4ec6509d3448ee02d8e191564694ecf173f5b4454e1c2299689ce05113e2a1dbd6b237d49ee8cce90050435cd0b23ff667aa7d8fa6b86755a800b9c2784a7e4e321b184ed2c33adff10c8343c3aecd2d57ebef2bb19d6a40784fbb82faccb305a4cc11fcb534b8f5ed35063269612665c887aba8a4268117b1a1f088d24673939c306f5937ed6f9d80be250bb9259ac155f5df19e57bbefc47c4144fca975010c9a4963fa904a034b141492a7c9133d8b42b0261e8153a150d30cf3ee8a66cef38c074b25eaaae68361e26b15bdc1736d2d72b9ab897969adf3035715c35ee724568d60bdc4db9152835cfc4177966a194d6174c1452c0b9ad1e8bfb6898db27366b944c3d9ff702e8d9d168769e79d5058627edc0c846b3113d3f1f1701a269ff8312c60b72f9c0442b072e68301bff10ab14633e04ed3f4604ad4ef0206d8df6432d7f71d96807760ddf33a8ca24d14aa6930af1e38919c14346aa5aa9b7c15cf48056774f5b8628a95adab40be4d6d7c944ebdd9791cc0275d3fe1ac5998c7840b6d4a43f22b899163908e3969120f6c916b4fe4df80f8c158a7cc19b6f97dac5798a7300140ea7149a3abdc82addc8691e4ef72ea1270810336c4c0751430fac0c114c97e87f6e6ad6ec0e0ef924dc31219bed1764709c76d2fb8ae804739f1457b32722209177b37274ab37a5a4e36f664c81d03d89a1d4d18d0922ec7de939f58b29912a8b174fe6aed995ba52c8d97f6981951006242cfa7cc08f92aaa940b1455cf92fd05f2d49cf5c38a3aa47015506407b7bca9ff3df1a7c3b32a510463b6f3abd961c61193569ddb4887738cb4cb7ccabfa1b6e38719441f56616d89e6768112ee16bd5e8c5c52ad6cdb4c219b8f3318817b1d003c82180e9c529611830390c44353702b99aef56fb3c881cc5c798dc15d5c5ddbcb630302741a978ea58002a963e37cb2a781feb35501d83254c7eaf5244abdfc9c72f3671f71bfcc4b1e2413c8b03796e8b888f833a51ed32e67fd857c89a315b68adcd0c1d9c8beeb5784a849153741e4030cffa366bf12cef59a0d95240990b8c232d32ae1aa85ea8149507fbe57edc92b5d178e3765fa27ae7c6e8367cc297483b0d81fe52c918b7cbb493b4538ffe568e62345a3862c48ef5529a168e22c80b348b1178601fbca25b0286cbd10e828fe6593008d33b8a778116c5ffccc930e0154542c45bc0c21322eb42370f4b939ed828348ee1dae1813bd301ae251275f9085794fa53caebcb47691915afe5ff4c5af7846a8a7dfad4c5b8f5ed5e7f7a54806e0767b2eab5ab40cbe893e99fb9061fa62423e91030b79568b72fcb6b91b2707788b637a37b8fef136364c4aed364034c931e061a3c6fcb39204b7816745743329dc343e85ba92d7c305d4d0eaa276e76c5bea984e03c414f37ff378d7c7d1ad39e815a4b34fe950441486405a7b03b58e4bd90296f9a2f4d7c76e0e17b92b3cc7cc279ee85aae81206ee0a24ef49bc4e6284c2e7b1341f309305b2a0d54173febc7bc006426f80e5b7504f1f1d0c6304b9d3bb2a45b6cbb458ca4662003156b2809b78629f33cc53d8338bdfc68bd6cd907977b45834d87c7d1b316e0ecbfd6aa7dc7479fb6c37024484b8346fc12ae8890349449c042ec19da6fbd17b8fb694116beb720438f6d75ab4be0e08eb041c350f88433e04c0d74e4d41dd1ee9127a72870e6dc6541f21267f17e204fd395e7002f0b683c49597bc295b3a134944ffbba7ec9262f47422ace64de0bc645353d0748e4aa03fd904f4d13fcb81ce837bbf2dc639ef025763822bde04743915a06ce2e36410fd532d65b7a579e9b0574492dd11c65450494e2ab539e87b308700f6d0e6570391dabebff04a24867f49463cf54382b7b108478fe34745cd52e800bef9d4b2da318c698bfc1bdac1cd3b8fe626b1161027993cec0c7cb7964f2da1b49092566218f7b4496cae600605c31b90f917af59a147c65f9fa1b4bbf2980eac43bddbd28696241d32e753964378c6565f2d942e2c3a245f44c56586369f1634a47c13241b5cfaa636ac268c0a524ed6978491cc67d8f331a41369958e9697c600d279165eb0da6c78b80973cbed85e78b44402d71fa1440c02e74b892710a9fd6ce253fa2c71264fb4428c3727960f89e085ab3fe68d11e272d8e138e16d19339b9d1297d70b87eef328f1b1e552bf46817865084bb4ae6624799f7fbb84b10b13de48f48111cdadcf2b4c021f0d1b2dd060b08e70557154a334bc48fa0755885053b3fcbda403595b864e9d408d70f068ae21fb7586a2c9ecf5ebf88b2e61d033b57375ec4eea68ad065940249a0e52062d94b5f6596a5259557409fde188fc499e856d70dc0697d1cb92fa9c32814fa7aa29c9ae4c90ce47ad059d3c2425157b34912c97ec261b6b91db96e0e6ec3cd2dc5618fc25b5748f27f191a84ca10df6d54aae2ea7e3188a41a0861fede5b34aa8a8f2fc70b9fa67ea8c792030355bbde0bde954e654fea201e402e63bcfbd305ac61d41437bb9138f8e848b45246effe73b4355340e630cdd681b3d7e483c573c09038b528ade1e7eb167a2991ddcd7a01547ae39c8a6096d5053844bda91aafb5d67d676b8f0fa29376c9d674de8dde1b305acbbd7f0145140af7a8f0155c7100aca13b2435771f21325d02e8dfbbf254fbd28305a624f2124a0d4c91b7147cbf36370429ba6a67b6754198b9468da76a87a132bd8d416bec30b39db009db1c65dd4696e66494e4195b86718e9be14cfca8014703e728a55658c6a6a465b96ea9076ab3802efdbb89df713480580beabea2a8e691099adcaf570733b0d628d565352b4e3ab492915521f8edf772bcadea9f4060d1db955034f9e98e8073b1d3232281b0b4630ee99332216ca8f19c833f3c7913d43fc2905731158575b83d13e79f550db1a22f3bdb5b3af11623be39dfcae1aeaf000531ea45ffed8cf22ba2742dc3a5f63dcf3a5d892c04390088c84416b9a86ab20ec3a7497d8978e5bc6e24f9592876af3b4b2b6bdaef3a60a7d2de2936cf963964d797eda907edd1309783835c206e21e5b0470d26bf1d28a867e7861895dbf3813ae6abc1148c4c8f35e481927d5f0847c1ae7084e33f6413c470b4cf97410c2b2d50d2f7a877f7352ecef248991893a9e8b493179d403b5389d6f56315cfbfd8a704a99ca957fa1fa4f0f054da842a3a390f5ccb00190387d56e619d20755b10d2591b021daaa268e377ae3f65aaae969d0e9dc6f11ff6d79fc9ce1dee762e99c6feafc35e03fbff42aa57ecf5c7a95ab444b6f50ef374823cb1d5a9e4e382d290de1fc25c03c1bf8d6d2d93d575f901a0a554cd85ef8c9c3a8c465d8add4026e1a76190f8073b9836044ae86ec2335df5c26dcf2ab6c6c17fc07aa42600c502e3737e93ceae7f1591430ae4441a3990fbf45155848297960faa7876461b0a0c40e9c27e2a94902012a29f46125403d2f3d798660d4ab83bde2334876b5cfdbea2fb05eda09b1f3d06a2bd198fca2e2739c6bf04e7ba36564c7b98cd4120a0568c652359a20c182ced7df5b3feee17d257274f22181eab53d675257e49d2c9b2805f3befc802936473185b1383a2f5e0970e2bdfb496e7b442bbf4130294953e7da054d6eed62b0444d01df5df4c4226c49a5281a838605bf428a768f213cad7792a4122f8b3e28ba537f62c29d8085449504d6101200f77a365f3cb22c9ae0244961514a1950b0ff53444edfcb1d0024a856100dbd7e2cd0a22b6e5a7b171ea96ed6b16a993280229ab022fb49bed170a782761ac56425f30da1a1937002d1a59d1a064b9ba3a4c1fa83ee7399a8081c41fadf0d81b73270d212a3fcf584ce2f56b2031373bab9efb7308163ea199a248eca948c80f555a632837b129fee1c88cbd86d2893a12d97b2cd537378c8b1cb2f9b917c615c8d8d4722e81bc01f3ad511311c248728f18c5440b502e227aea5f354047ee1877dad8005bd045ac0dcecca21a0587fb6bb79c763c1f823d66c91faefd694d3c2408a58cc1c7da91c3acacd73d2bb01b3bc0e622e8ae21038a2a151f7a30da847c8d011b6831a0ab581bf1d683216b81fab22b9311add9d0bef94ce09175a51a5a93a80185a156a242962f17f9c2401fcb646a31138365d0c48e08f1b2ac483070a71a6ceca3b299c1cfbda4f976d6d837a5f934b1bced64709086524a1022d4cab8f5199e1eb97a1da101c31835722044419ceeda56b4d264d77c885acc8847f85289730a40f00863100248301f93857adaa1893001b9fa4735e226820a243a0ee4b165bd033de7386727cc622247da53794f659b2b74185a96cd490cd5b81727db25562adf71bbe64d2557cc7e0f0010d3281748949e7e8d1599fbdbdccc79424763df372ed845aae3ba098b81209986b057342a622f914839c9db7cbdb9c797bfd8f35834bb78fea3af97b58f3c1d0f24666eb9750f6a9ba39a24411b7404cd0fbb2d0583aff28c297dacd5868af69a1ccd39621a3511ad9a72e37b438fbe3d11eff0f5e01f30920e9742a7062346c01738009a815cabedaccd8077b27e7dab8f4d389bbfa73ec3c59bb7c28771e3db006740d55e0d1b24c826507d611405730e55eb493a5713231a013e4d91d560c5b417089f6f7f5ebe2693170411fe795e49decfa8207b51157c414b9a2b1288cccba79a9c0939e676e0dc7a84cf1ee0e60f39ba5d686111d8b92931b560dc0b5a9db3e950fa3c52627982b08a584f48d69c9e8084dc509ddf02a813bd9a1ad5c7f74c9ab009b78d0d476269af61fd8bbf91dc6c10c6b67cf87a77437f1cef33e66889a91f8b83f08d2493419589ddee42edb5bf05ee94cb964c8f89d872b25402f699a7a2363de77769b62c973ac93a2d28949fdde5e0cea45232dc71c847a86e78dafcd0a60eafa49b9d4599e65e7d88d63e2c72036ff262df4750f06687215040bfa92b5d809589bcc093d0883dea70e3d3cd81dfe0f1e7b02d6e5d8ffd03abdc2843fb9b4701f6f8e371716bee1b939795b700dbd460b2945a6fc4a2014d8f07d7caedbe0090aa32bba9268098f532db49ee4e2f9551bb035bb88d09dcb218375defaefc0fefaa5107d7206b3125fdec34b601aaede16c120f7608b19158748015400687c10c1dbf452b95257ecb3a2b3f53d041ca4139b8488298baf887d5f83a063b5148ed903794b5c0f240c19528a8a0cf411b7781a1901ea7b32585683bdd48fadb39ef2ef182367f549e29560d610e7c0497e58f40d465877576838b44d60e4501bd3e92d9ceb30518cc1046c7404003866c4ee6816e27d207174282ea64cb6aa53dfe1a9dc189e049e7fcbe07946799ddedeb964707a99cdd82664f65704cd64338db4f8110addddf7d004de2ce932632219a032740124e862e62ce33ae7c97af0dde443b450f9804d6b24a40a9aa399e0c48cc1f1dc63401620407c480b03d4bd36070949f5de8da4c7880d9b6720eb24ac58af22c6986eef8a2c48d0b8df0285cfd591132506b1cf93be7e52381c60033ff8f6c25e15da15a70151de35c630879950462669ce029e80275ea7aae037c00263624d9a0e5f15e138f504ce77840d4b3f37feb72ccbdf888518891688d8b54dd2878b404c8d99a3c5321e9e1ca15c4fd28707c258743162d7128a2b0a6d63864be1216483c096c2c164d1695b6b09149916fcd6a0eb786836b4d11519efd2470d1bc6841043984f8f36d3f5b330f0d2775e0daccf7525531b9d055f972aa738e2bd930fe0f1106d1214086360f90fb5d549b9149c2ab59ad9620b072607b7085c0a3749bb9ff98070ec27ce85cb9ad3da4a094458dc80e45464b8cda420411339049dc26684f5f0ff93c7390f3b5d18a50c1df698281d3edece7431c9ea424b32fb86e04fdfb4a9c7adecd957b6684fdf122b48472beec6a7367bb56d8af7a49bcca6cc1738e29512cb87f9e90baec085fc53c66005ca6c0494c8d82bd92fbac8c83ef25b01cb7c7c48afccfa9335c11e3bf5ccec25ee84d84f916559c336925dcc9425f64127c2dfd45d2423d242ce9288b016583c35f3835ad8bcf2edf9ec866f8b848ea379d36a9c86c50ed54bb36eda0716decd93fa6c14aef6d166e17cc0147d86e23993d3ab20eb2e2efef3cc3d91f9d99ee8c27034a6c374f613034a754da50e7cc12fcdbb849bb67ca62ce1495abd3b3ab5111a35febecf691f22d602c9633c029fb34c0e459f7c12894cb407dda1915af2f18665e4f8e61b3460a366793e19fed8a4edbdafae4b2b1868e9913addacdb1cbe78895bc15ecc30b2a72be443e481dcb2103d35d193925e48302b0a2bb5e693c814775e069d1cfade926060149d6970bfa12788fefc268255799308c27afba5a9988f2d7a58bdf2545121f97ef4ad169836e4b1d144e110a95a9dd84d296ef01cfab2724380db8cea07bdc4f66b8c63dd3cf480025bba0f0a8cc36d6fbb3635a483b8c3457ec3941af967fff6e81a67e92924fa8290a39baa4c50a712b09a2ed965ab989979c58ed58aeb4ad29bb0d9b43dac5cb6adedaef1a3999a9e1b284be70e8f28c11d4abafa615c5255d131b588fca82848c40cd29e21ee7c3445002166a95cae047631f31106c025965e14a1d24b535a5e2a116bb753d6f1d524290c4f8d6f01137eb1373c85a187d81ee2152588ba2d29945a7c4e9fba24de00832bc10ea1b65c791d608c94895f060512053a79b8a93b52df7f45a086b52d871a5b39a7e390d012ed301d3722388d5abc6a5bac031471e2ea4fcb51981d81b8d8620ae73ece7a511b41f185faa3be72002390826ac5330cdb45034889df263313307f5d4cb2195c3d73c311eccf9d424789921bfc845fa5b070950ecf32933d9a00cf8fd63e1045c0ac25d0c36d29ce3a6e4b22a7b80f475c15fbd4af0b95e82438e4964e8315c32971edb860a80f1fe2e2eda9cbba190c4b09d20bd2d47599de9c657b8ce7f37f66b7197695e8443458fc9682b1c1dd19572af4d778699c2d4224ce6ae796605cb30b69716a7dae2ddba731d98ebadb4d0197ce5528b819b459f413bd41cef22b8b2066417e3f5fdcbc200e046a121848154615e4849064f43db1c143108ea8f8fa7ecb3709ccf110b3432092e0f4065bea0edc0939b31a61f9a35448d325562d56ab4b1ab7b18cdc4b31fa799b6ef55ab53ccc81660acdc16a941c1174f161b8dececd22016364cfa1796d56cacab55f8f631758a1fc51e6035687f1b35d099c67441f014017c65f02dbe72a5192c56ce09329eda2c6b74cd6ee2d554e731da20b1c894476b9685cda25ccb012aa70de5617162a4bcf978ff3522a1fc52bffda7898c795fc41a6f3770bed91abca8d1aa93a0fa47d0a8b5866ae655729415e36065abab371cc074f652cba1ce3acb38cf1735386217caeac346361cf3514503aba73655c49cf3326cd0f28fa2308675b087fc5cc5d9867cb71ea14a56a40fc27c0a5ef188eeed6b676c0b1f4a9399d5ceb64c91dab6929f48df55dd0fe8d7ef6201158eb82903936dba362ac376dc69f51224b257a0df9249d166fc8f7e11b9ec826500853425ee9e33d38d6c022c872213dc1e03acb9082802c45a1dc7709b4fad9a94a76c58fe1fbe3dceee84771e4a6ad2281179e36f7768b7ced1d21edb938babb54310e3ce89574344d0afcae68ad4baeeb47c262d768c6c441f416dd8f9d82826fd267e06c3d564764a0d8d9141874f10363066ed33a08865d050ecf16665e65ba785db10151ab39678f2c122bf37b77d1a5fafd918db4a19851fa4b89f7584c7e9824d1b26bb2125600efe14659310e02e70696b640cdc70e5e541c985749a054c901c1736a88288ac1a2d880493a200c245db6b904be401a1854a7c79716f082a878c876818b41711ac037430797b3f2466c4f010e89b31e88df381f31dbac9e017e2c6af8e938b02b9e4cb8b37df3191dae7ace1426311b1b8d02e5218e10b19318ec3233cd605319f9983a85b7126996bc7a073bcae0db90ec0d9c8e6acf3f30918dc57a0fa9f1a7585fe31b904642b16cb6a93fe6e79925df3326d29f13dc5ef06dbb7fbcc46f6c2173066cb6f2e79182e9a51537c0e803cab4f8baf9b2f50256d82ddfa84c90f39f6f16f35c7a05957bd874494aa1c949b4dbc57edc4850f863274aeffb92c5be16a55e40ec514a33254e50b5d183ae8df95af0ba405f12096d7d8847efc5283af9a751cce700f58bb3fd0200b776e4a44802a077db630a0fb764c532cb0973c8ac983df74bc7006f89549456802ddd3717aa6c2aa8d3f990599e6f4463ecf4fc5f81bf6ce3eaa7cf43a8975cd9ade9eea1a66288c5706d99591ae8b13158d8495ef0d5a5c24c9ad5fe082ed0d9d346cfd5264145ad601e57cf2d34beda1c0ec201606f6dea114a2a34898b210876430da0f41631681294c4eff0156992a327ce57427971e8de22368076793f05b5cc2c5c6ebe560ad658f130482760ce5132da4bdfcd9fe6ca7d309c76f62757f4b11ad0d0d1eece140d964c66b2dab3b2a1f0ce4fbab90022e325b8cf3c766f1aa8eaede0159adc5b7230fc0be2361af5096daafdd5a8a30c23b5f7ee37677535d80c5834a90dc5aefb6f4f99ddd14e4dffac760cc8cf7448760a3c2240091e02b97bb2af4e5392ee183e024c1066ed25adc6e8ec70d117743f560034d13d5bfe8832b6343516d1063ac31d92fec2bfb97047221d83ce3b396e24f99049d26086a41020960518658fd92a4cc5e1156c3bf8dfb5ce2b0283ed893914be18718f72f30d601a778c0e88595a5cddc77720c5d11b4c9eeef5088fcb70dc6e2940277b1a6be2799275af23d0c27a0ccb9c686de3ec9463dc93585fcd198ba6364e0c57df24ee374eb5681eb25701257c4fe64f5341fed8ca5a651d99a260213adab9228d9a48e29901a7954125f3927b2674a62512a5595c004090e479d99c99980a88cf36b348a9f3100605a048db9d53ceafb4528d2121f4aab9a87939a04dde74781b58c1b2ee888fdbe0a00a153a9452afb23e113bdb18d6ac9840ae76b10a11b153358bb362fcddafa6bb8042c4376b6332ee4ad082066481359770eda38a458a810ab81b048dbbe132db440bbd4ad3676af3a5228e062cae9745c302ff0157e07c846674a6c71f52abd24a1650927ce29c525e77a29b4194971278a789a3f17740e04f7302e6bf0a40f706d0d62558286b06ec6cedd2b970667a7132c29c77b60f124d3d7315a5336b55a1ec643aabb50f7f1a2c1c6d58148e4cb07fa39a498d8048430c20868fb6a876429dcee09a6d9d3f2db4957487e5c52c9ec5637805e230d9816a89f679eb32143c45675fcbb6d89f5c283ee2c52d23824a25b80f2eb6851714224d75ca417889ce70d260e8c1472a879432bf60121621794aa0a7d16e9ba1db9ba52ea335ba1bed19203c114dea35f9f07f208188d82249d0315b75e840d9291b58059f0fa1f6f2b1d8aa09ff008e3fa7f1dac897d9f2810c6457d6a7df557ca4a919c8132f5260afa5a23de98e1294455ef73c07fcf23bb1889d298ef352bc4fc4b43a5bd8880b22a8fa0874eb9dcdf81b663ec132628cd7d5a672d79cc1d9f3767591217d4dffd300206b1b034e5df5f3394e268484dc955897fe12f3b64981ef8dc4df87166c8cf4113656f282eda99848d0aaaefc248789c60619d948aa544ce050114cb2dec0802828471fdd60f61a0a2565ed60ab6b142b7bec8a126d9921bb3bd3781252116b209dc15a06240bf7ae00bd164649c3dcaa7883bc881e81654e678f0ea86305de5682f107758bc4496de80a3415ab22cba57083ef1f734f31ed0e9951bf4e0e944d1e4ea4f0591290cc1b7e046d1b59aef10fd1ce23c50f2772c89bf68fa6aa0906911cec38e783091d8ee2ef4a90b4cd470a4144b43250c52d7d6fb26e8232478d4d32750eb60116b4ad019371cfdded3420ac8d8e60d75e3f9a7ff89e681a1ab52c3262131dc1b4ce7029703d0d5203a2f92e08c07b8a8a274667820c315f7b3e1ed928468c8c11ba6714906a9e6ea0da35d2ec740b9ddde416e4957cc76fc2ad6b7e7f2804f2fee96f1d9b714ecedc6639e39fbd9ac95c906d57c0b0d846a486ac19be25387d79cb23b347b6433cacdb38d44739504c500445b6e61bdc850625f0b441ae13be894e62b6f5f125b318973c20d2394ecf083b84c9c4b2b3e464a60d1bf10395047e3f1a718645309148072f19ff54b85fbdad30f65a3c8120e1ad66db8b0ab4387f44119c8e5581033a712a5027f7519be92e908dffc55d21c580ff8dbc2fabf3c044e9c0bd02c691247272f7e500ba57ab28ded25e8f02645534b8a26003ac57ee0d47c4d71d5a7c02fdca8fbd3e37c80319cf93d2983bf0cd52473ebab2f01d916e28153c8e26539b5e9dd52ba4c0fb669bdcd656ad161e78e30915743b5cf416d210170572da20fcfcce89e3bded3b4d06f7557325410087c042149a662fe2e708a8c8a3b5e81041ebb6b8b0a12bf4f8942514514b7ab06b8ddd1985e20015f3d40668373110187840dec251e2ee1ad5f7a9cdb7336ec2398a8d74536917a2e7c1a13406c81c816e5a0170d2cafc4ab1b98b576e0a37a0a8995b8f383779becf8becdeca06e35aef53ce81f0dc2b035d1e576667c407335ba6cab69627a909d5825860ce73046730c96661b47b84786ae685a40e20bb1532234c75be89995d2c32495b12558f6c5d54c0c2ae2091b6ff8e5683fa575c60133bef5daffe03c02bb408379cfb77deb6d680663b20b07e99d9922a9e4928799fe7ab14924bb88da07c63f778cc2a69c58c105a795fc11668b3232e278ed799af3be2f1c5561ec9417dc5c684d4f327fb8c82401cf30fae3b89b883351206053a032f8dca05c09fa6634646a5b2cac59307cf391da99883ce09c792251ad4dba3385e22e0849e80f125599708611f3d34cbe0c0226573563c26a648d9b31857395679423c590338bd43171865aa047d37066d3e5f79c3b68f344e2ce39343abff5d4293d2d7c2c01ee866587ad54487a2e2dcf3a4401831472ef28b00e05c8d08204dbb235463414d91cd0bb2c403e74bdb23be9d4856e03898320867aec7f191e0b4ba88ed4a57ad6c6aab499160fb953424c3c4ff819c7e681ae5bb36d4535e98283b56db7439550946a7c02b8012964565c2860efea7564d123ebb27f848080c3e28870914b62fc10f30ff60ea868e51c98ece14398b5a5aa70491189b7d31d9614ed980cdf5a20317c897ee543cef41526aea106027fa8a85e8c2a05177da5917567e078c94d4777b89c39e50b0e85b7a6fb7f7147b718a968ad40074b286864d35f47d8887684390ee3edc06ba8f79eb9a0b5008932b002ee1848d8ff98c0bc95ead79dad5c96e48d79d870c142c0d0d3042e78d1ae48d03d6f502d2e4231267e311f19f338a6e0d58f9b5c22ca4fc980bf0d202e6e20dd5f93df8f1c7dbf922a172cd1079d4b7e8172bf8592eebf1540f0df87dd5c49008cd66a6e3a10bdb2820e9155518087662b5e7f95bc5fb6f0ace44d7288a047b61f50bd062897e1e4cae19df4714975265bacd9291570231b0569422d8792f5f117155b2aaf5ba38dde22da6242988fad4b81097d81918b8e655dc3de4771380027dc2a22054d4811000a2caeb7ca352a3764f4e2a0afc90b842991cc4e5db527cae8d56064bae05bbd82e2ecfd770b88af9249bccf4bb0f7456c26b5dc39dab529d7551f9de4baf25d3787db23f9e9c65459baa19104d711584215fd744d952a411ea29b0056ec49e7ebd13eb60cb7051de03f0dca7b310d4ce0a6f353d74549c3ea31bbb979359904108c34949db713a3d6607d2440cf52c1545e12e911a08ca60e98b23d4ff19a89b9461910c000b96fb87d59b8f1d6945cdbb9dc2710433e204a0480d3e27f1874f17f14bd64fc4aef390a91c92256fd3e814112c4ba2c12fefa2b97a8cb392bb964c3589f02be4504e25474255a63324f180d98413743881da004ce826b5c335145e499fb8692e9e71827563e5ef68a1d65ab11e735b7c4a2e297b57b354ef546cfb4f506a8d95911026f2a4d6d8313db5c5fa9a71415f5cb6ffa7ddae4e9f92f7258ca0d257849b8123ed883f6f000933a97c48057c3e33618ccdc800e152ef3addf7364bce7ca8bc3d12c1f985bdf2dce03d72234bb5cd8e3215fca9b0e79c09499e2abe212c6f55e9eb6f12f64ceee6a86072f38894519ea574ee270c9685c9323b26f58145f15c9bfa30a00d645cf1dd4fa0a8e4408e0d34d84e80d40d45e907ddc70f5f375fe63b522131cd7d2c2449eb200c54c07a4336b5b0132a50ee39b19b85c767c3db5f2cfd29accb6c30ecd36afd4ab4f285680008913093341d49c6699dc838f7c1e39c064a671a6d261d48ab343b78a7a39097f4f7bdf866f93f0bee5bf00cbe81354643f87e5a246b333505d6ced456bf79e172f76013ecef0f8edf45024e006fdde23641870f6559803fe1d63eb3c92f824c07711e6d86355e349a50a9b24b726ffe9167c16732326ba6cd491b8788c79bb3b29c231964b86f9b08c93542b152a6f50896d24bebf62bc63faf80f60ff91503238e8093eae6e1bfc7671fc8eac9025c2706a075498493bade5e17dd206c7a2aab6545861de7359524b0647431b73ea1a4eefb3b659bfe3ba2064c2903fca8de5142dbec0e3ed204e70409f707847b969268c7d4cd3df19c7bb4d9a969e186cd656a8bc74f4a557a4cac9b6610901b210a5eab665bb13805f5924f8cfffeb99541e1697e0db1811221559d18f5d592ebddefdac927ac7ce47282f2ed7784f148a2ec8dce5a429a7259e2a9afa904c455010e2ffa80c130c1155421f561a08832203e05584a9ca046254c00f1e7d65a06b0c1018cf72b895d390d987254b5825cab127f0fb7c753657dbd2c00600d5b63da65c9936fc6bbb2492da5e37d1f885925b30841960020412d171d8c95120cb6fb7efe67463bb84cc4d7e5bbd86314fb5004941444cfa745409dd8cb4d8900f14c21fa784d4eb8b6b1b47fc1b38eb74106f8be656330426e84201b02569ae73c7fd2ad9881adc020845a712a7e0a45949fd3482757c38981abc91d0caaa4b38409152b75f4c0641dbd6308bdce5ec4ae63bc0e20df6264ed8698d88a6f5b658ac15db406e5dd903d2c30626a83d58486929d3a85500984088bb857abeab3648035c2129af63005a8d8c5aa4da8d7dc172aee47bdd9b4e399e1d5a243e23c63991d7f46e25b3602e734d02501f52b2c77578243965f8b3fad362194575d7712104affef41e017291f029a792d6b5ab9e7daf0181da896633c04e1f3565118c2ee87772c95de9851ad54ac16930218d376aed9be0d75f319e442a2ba6aee4d9ebe70b06e9c2147e6e5bf93fec30f4731c5d6167337cb46ae20638469bed782bec654667ea54df058d0288656006780f7e5ee431e4f450e37bca95a0ccfec3d7224f02dba2345663fe1fe12af82d51f1b9181948bc9968244de0c8466d7125f107e95774c4406ec98f230fd6a1ac234d88d5e0e48903875e442c20aef8782821c521d2217c4992f857f6701d0c8258760b38d9847242b872c447db4efae053ad1bb8f57724c05fbb69f029276846a02a68fe15477aba565902b051192df60abbeaf7a9d79fc2811f87ada80f01a646c2074ff596f695690a32c8089ecb8ec1b7718bf62c54790dcc39bcf19c6a00f5ca9480499d67ab5c926fd4187b4281f124c3a3eb2a16bcb6eb98e15480656b60c88816df37c1f79581c0eac04588ab196aedf22675a099f144740c9b5151f0e9c868285c2f028a1055b5b871c91f6a12c85d434788c0f7e54fe991647a4532e6cee7aaf608ee469a33a9636eb52f8b77a1d83fd1189b72978fb781b6dbdec80a29c2391a355743940f7474eabfde282937a194ecee8a66f616d62dde563f4bef596801a76db5ef75ef3939101fde143397bc2c4cea2b89787134d33678efda056527b3deb694d194986c2dcbaf692d2889306d1c3700c1840cd005157e95dea199e145b2265a2312dc3dc349e93640eacf6a2946fbd7551f93d76fec9a2a8256f45587eb830c6c522e2b8572826c763271b64113629db6fd809008483c54e0ad89912c4c64fef0c3b4d9fdccde9f0d6961881a060b45b20809d3544051ba230dfd9924e9d3752678c885f3c50d7ceef048176b1a59a204005856abc52f946833af71e669ef1a65d97824360ac896146d05bdb7082b620cb338c64b4d76257d87ef93e89d8e55a0184f4399bc6b9a322a5af63dbaed2f28a404ac299571c31edb99a6da14405a13d1591e11702de0ebe9250991c476e7d59671ed76217d4440994efa20455589a19358b1f186b49cdfc365b8a6ea21d0e8307a0a51a70df4a8650ed776eed2c99f8097f27f0c2ab4bf090c0e662c3c1f7a759a050fc3db5b05c8a343f4c4cecdae7e7a3c4cd3c76843c52ac6279c0c533cb1de0ebcf157c4d360ad2502ab74c5a5224e1753143cd912978eb8e9f4259fad43ca9aeaf5fe5b4a282a129aa8844039aa5c3f8b429fac302588058efeb2a67630e558490b35e3552ecd848d76a6ec7b423bf00e4faef70f49ec20c42a09db00cf388821c26a654311efef0700c106c1419f27ea0034ef5ff023cfa052b59c454cd970a92fa47db890abbfb161ba6aa305db4fa555847617bfd4469e756bc20fd01fbefb8120fc3735cfc331e93722c76f52937d6588445d62e7558e13bf0afb5946fda93e9e7357a287e98806f72b960884a331d17767a51c2b514e59a2d9d95d04b04bb0c49622744027abb9282e405bbd8fedc0cdba9ef8ecb98ce1ed48a5ecc3924381c80a8e6ff0cb5a9163c5db7e19b1be1c29361738f3cbc102c34830485b28cd55fa768d9f63df0754a588effb3ca8a4b2e5a7e76d613a2bd5eaf69cdcc4398945379cb65f6b7b62882b4828581688aade3ac6b3c361bd5f3b2bcd3c146b1719aa7c280c553bf378d52a8b101030cfc8b13cb22b1d20632de130ce73aa712ca201e480a2cef91e6373090d8cca74f8b2c7e843a529e6203ab61efba92fb59f549b138037a6bd6aeb1fd2a9d2731cd4b42cb8aaf7c8d1738ac52a0dbea14c18f5885ceacc949cc27e85315f7133f84f05cda6f4f67d45d50f4658e69f1b4c7f581a93700b1a940833e1c0666e31c28571fd8d7fca037508804c63ff496d8df22b282474ee9531a0d46a2838353239aa83fbc5a0bb89031a63824ba5403c0b5c8332ff43f46fdac8476f8f58c905cd2d7045cc7aa0caad9b2f86ef0124e58aeba34d441d8e5b9322be5147bd4371626bf5512aff3bf545240e6d0cdb46aec54e70f962571ad5713e84c2c088c7942aaf6ba5517757b0b6efed53f37f997bb8df780ce99a13f50abefa8691dda2604d5e7704b8834276d4cdc5ee2b8bfbe843457056015655df6d4b582170e896ff15b228351f747a8bc612759c1ea57223ff2bc1361eb1c3b960d99d0cd764b75a7d1bc6bc81fa0d2001b00b1c57d568f6dba5aac4ab7f57675c08c13f7dc2ec51b09acf7ab278d50270d2b2e073b1c05f53b2e87a41489995e26a9c66236b8badd21a365933682a7ea2c44bba34ea1759b04e05e7baf59928e1dfa4b022dd2034d7b852f1cb6387fd9a6500c8e87e0211303676b5f96e7165f0292f4d3f32477ee37336860b50e8a8a312acb1b8d435b827a9776282b8a1eb096ea35e1f6ad95adfb7dfbdf39077dd68644ed92f04ea3de4fe0b25656b92c6fb1ad2082b8a30418f8365fb420669928d833866ba3734ed4570295529ac07f44007374c4fdb7f71002f4f8b4f520d6b4477565310ebdce373298afb1b06c89ec2e5b34f72f1f472754788ae4633a473eba2043b1243ef958b7dbee9180f0d018b0617093f3a247d22ef8bfd7d28bd07076378d8978ab613627950b6ea24a5424e94af135953bf3f89274ca9e0cb8dc9d0268a6d920ddcf62b75a1d8c57b8b5a3780a9e3c35e47852eacc095dfc36e5ce3145fec2c5f545a0c8ad0dfc7336a9478533389d86fa3ac3b835043378c41a20055d0186723aecb3879dd4ef58fd3be35228cd773080e4ba126230d586a6fdd6a06fe6f26643f576cd8ff856b78359a0beef312425d85fd5927ad6c53785531e32a9fe009addc70da732314bb1c9e8d180290f5a3229d2c8045609b6e73fabf855e0fc36afe69a439752c54a79c7cef6b97a730d2148e6ba6b97891d5737c4d8bfaa3c4f12e23a09a87c26ac78c5d57339bd2b7f55eb0fb442f86074982493aa88bf99d98ee02c6f522540f0d078005e8ca9faf379fb5eadbbbf721fd22efcc24f251c96c17055d3e69b95e87d8379ef0a5e04dd72c3f218654b7f46f0accf217e9a67683a1adccf1ea973df6205eed84d564a8d411fa55dd39a65ed9640afa8baec3d61c71e5831414cd5e2e1fb1f462f702be65685c315165ababecb68d01d17ce4ae569c109a2b8b8c92fd42cd9581a1f362f3127c3f2562a8ddb76a528415883345773d6ec33ee375f1953e76f31036cd1834a8df02295b74927291bb0797083fb0baba43b5b73d5d31d40cb756a3735fb0d1f612a57f182eaa84aaae0b0a2221af3e503b2138048f562c1b11fbe176ef6138b4452ecc0160ddd42f3c11e9b60f99ad57d0bd495b1742533596b686ac65248fb6992d7199cdd7bc140841d69ad9eb63bf44f9099f178a289fdd7928a55aacbf754276802254640a33fa32a64e35f856d85c1ed4a94ff6a789715ab62f610c4877ec013560b5fa3361e4d7e225fdebeb575a8520323b1d5201631efe359cd82fce62abd00e646ffe6d09362de6877d42b1554f6330ee90cab6967b4b6319d087dd9cfa0e0f6bb1b8ad2c4f01445d51359cfd9756a5a5e24d059b05d68f5d79d49f803dfb40a6c7d8ddd3ed14af159bb34c69dfd524392e75988c8c768f2275df53a32d6d58e91e07fcde842f5c842173a96805bac9dd0215a02e27a9d3c98be80dcb0277b02bf6802bb533ee6c126d011bb084ca635fd5668deab8da31a758484a7a7e943760d135192c8bb99e99f80419f8d203f4467bb13b47462f26459b28cac4fe1c5e5c2f08aece1bda784ba4c4381b8d594bfb6d112214fe1a8185e8bbe54830b8b6300f718a714823878e5493c2eadfb5bfd56c03850f5c106cf5fb570370056341d5b38af4098aa9feba6250a6d7539a55b3c3720a31624c02dcd8ab3248b433149fd2f6876be3fa35c8d7d5ce3ffff06435b8b63c5220f3f4cb3d5b0cf9bf5a8e4a0517630b1b564d44db21b0221a4fa80a38eeea3981c0b2e3e0e22db9576ee4d840e3d9772024a5710a8c9eb8cc1793b71019da5d5b4f0ee25867b7ec8655ccde0560a513f82da29953192244c41d0d7c0c40cc4b959f9717369416fee2822c79cbdec4206d29140423d39cd4f929a9bbe99780d2377f2c3242921271e78deff43b9ad4fcf0fb9b75dab06dfa33abecb2ce54174d83838f335e7aa78338855778273baf05c728447abad1396b9c7d2c24046a86f272ef6d3c7c3c9bef8c3e956ddd67c0fd2774e10e424d1b259a782ea428ad218abb8d1f813f589cabc27fa268a579f99ddd05f30bc382f3531644e7aa0874d6c4662f59a03ffa95e132d0332fe99648c0a8761174ff1dd29284d30759049bdff9536a85d7e0c6e985622a21f6d2131ffa84b11becb35734544627d4c92ab1cca8c60e831111eef39042677e417915ced778c0eca5b621bf5a16bb2389af77a6c1056b33179e0903dd4c78df1167f396562958820800ee40d2270f60a748b805531a9225e2cedfe7bfd4d68b8fa523270f8bd137609bf0945113782238b18f07642a9e235cb8d10131fb36542bed5b2bb746afba892ef83238e1cd031097cce00af1aadf05b7677e4d19f797d9678648f8c38a41787a5cc2a6aeeb1cd221dfcd8d585616a847e627a5c9d182dee7065f326f9ad9ee085b60873ed8674c8d4c01eb7fab725a0c40272323143615e5bac3c78fe2089b62a0305e97c2a5008608822150761bd934ff8ff72cc0f90a1bf37d8795028daddf84ed67fd05d156364ef79f0c2c6f13cbf6b8ec2f287937643e1fcc0ae6f3465dd4b5f6e5ec8e330704fc64ba85c1a998cb00134add5077000bef4a6eb98799918c48d2251d082563b26a686c928a3d3ec175c4f1804141428ed0ae9ad2d878886753d20991a706f373766bc10a66ead626be677370ed84340fc1edec2f6236394f2190fb88545037fd779b3a67b482b8b4cea774ff0e1ee9134f98c2c0c3a24e0b2681050c6e83b354694a5d03e8bc579e8df10d9c1f1ad746e4d5193e0d01f41a34015a3ee58ccf43171e136d4cc313600dd2c204d1f658708ac9d74ace4a4a39834d76ee70e4737a7206bf54a1e781fb8913d8da68ef81274e9fc8b7325d23cc377e919cd0171259c6a48ddf45b1b710336a676242788239467250fd48ce35662dffec9729b2b65e5e80f4227282b0f63e028adb4d88e33bd6154f391d781d703c7ebb3ee4e50dfd49f8010840759518b7122d5ad35a4dc77bd94e22614f1fd6a964d66e75597ef5755c47de567ff0c21c94a2aaa9f7c8deb536c127b47e22be111a899f44eefa369cf73c234115ad1465f8c636748579129862eb478755d032974ac4eeaa9d815680485cc71a32bac37702f3085782a7bdfd9a935b6cd118d75cc1fbab0bad2233e0985739c6c210c9e751aa903b4980da24db02912053df036292ba079b4c514d64c5201e6a14d52a2c1bba62de54ee69775b118d59bcd108d85b4c0b758149230e3dcbeb8ea61498f62db7bb869479701e0c0e4b2c7a8e628bb02922028da0d5bb332ce385a4350527c828c016017e5be011408851c3af509b09e125a2b2aa485c0c8e4d5542456090ac8a24d08c2010f59fb40c1414654b7eeb01843c39c1828f8d245e55b7074a4562c76dd44ae658d47f0b0e91e50893b1316e099218c1263a19e4d71b010dccdf0a958f49d7662f52d49045268f995ba3cfc047f3d664fc47db610e3cfa97d76102af4e9a5d40ef76372aa0cff44394a56d578d8aee357ec3cbb51d4a32925fbbd44670df0e9b556c0405e0f2852a1ef6810ffdc7074c2769b9b4c09f340a2e23084c3efd133db13809383c5201bf212070608d70a52b28b3e5e0f9c224ac5a738edbd9a1520a168d89150e8c400dbd1f8a065770d43d9350aa4a266b66a856b5f6d3464383bffe6b5296dfa95548d9565068ac6e5c537f2cb266a7d9de57f73df70107bd6e846cf6bd1109454dbb305d616accb77651a7429c4dceec1f79f143aa47865d752143510916c9983daffd1fc66ac9119d5bcf0d931f5b47a41fcbda3c50943c201bb25d12df973d23fba42349599c31cbaf8cff890d20c8e997ad697b4341c0e80e532ddd28adf77d194ac681c0dd92d06ae9aceebd416761e07917fe10429668cc8724c0bf5604b33b0cfb919ac977dbff118d79e5044b8f3f0cf1b31b9d0ae49134b5945078e0d439661016144b0a8ce060d71bc3032bc07e7038debbc6bb7371cf9c7e9a3600a31ec0576d50fedc621ad2b8c0340baf8acad8157dfaa5b0366ad0cb14af92039f256d78ed409d102b716908f8fb3fe85a8afe4a0dd2c4fd48e460e70f2958f55bd2294b132a2e510d71fb8edc87d146b80a37c42f03184b4b86f6b9d56361f708c55c90dee39895951db182ab315ccda13373076b7773fa2e03ed321756d897d3cab4853064391e13dbf2b0bdeaf4dcad46da4240a5f2c36792135b7aac185551ce165f7a03f7175685ff478c8b15c3e30976087b2c2e1175bb7aa0a9ec10786038c19d314e7b56d5139298662d87455a17a6908adea72e19f64ecf685fb5717999f766a2139aa551cac896bd2bb98485c4f2c80b289244b870c170a40c0d36f99b80e9d034668fc106f1788b925e15edf506c247ed270648b2d9b789b169d8316bb100b79b7a5941040af5b2e602684e28e7a350b3c92245b29f93a22eef1cc697e304c3efe108960edacb4c15f57ef54d1b38172887bacdb5120618a3c991823548813b7894c3bbf988c8c502146f5845b90b90b47fe2cf6da63a2d5b5a2ac77996170d5445c24e02e994572be4f3751d86d6c43baf057751c7a36ef9156a73a015f15afe09ad7e6a186809e9fac5f15f240fab1cbbd61a179bbdb839a01ef5c7abe48635ad1ec3cc0c57adb7c7e39ead090e0413af38af6c5107b940b27f19f50ca694faa8b4437a4a2d1b2b1a48ff3114cab0be91130cd972f1ba3aef87b43197717230e6e49390bbb40f633c5da6504f04843d9d76114f89559da1c052bf23ad37291cebbbab07ce69943d554856e533bb99fe48ec197adb1052cdc6dc9df6c38991fa1f76b61c30531cf356b549403121d9269d345e2484d3493b26d26196ebf2b993659864e12ad90563caa1d670416927e1ffa89e94ab4856d80aa4a826c9aaeb1d8610501f8bb493bf707945223b32d048063d175f52479e049f667b73355d08240efdd6182fc0d3d9df34f828d3e8be00d86c7181f9a616acdb0b56db69d4fa3ef00f2763482e4cb053f0fe7cd8f6a7de53eeb15a68dd4e87e96e6a2bd436e9068c2d909e2249861cd4e2b47cab82e4d31efcf136f78383e48b3f5efeb2f5f41ffa101e402917e9905720f6b4ad04a954ae3d800a0afa9b6ccd6c5f499d8d6b6424324d6806ff7c323df056129626ec78ece007f080be28daad76e8b576fe71613be7a902cc96219493b7e80be5b509da8652a32e408a0dff9f3d8e1253aa245bb5613fe45e721d73f1294429424f61750b6c585a0af163085662a04f0882d6d7c6040e27a4f6da83e956f7c8475252083180a6cc207425eecd357e66bb1ace84fc970a9671972ec90b8ebe05f0b4238254d17777ac272358d73ea3c6a0bd208fee7825bd0f5cad17038e5703c8752a4842afb0524ecbf369ac7113c2021850e87ab39c870a16d61b852bfa9d6f85dd12f204d6973488b9f30b28106ae570e556051e13f43c231a934f216f54f043b7933ce588fb0dd865909c9f94be020a3834fec608e54e34f53c8709858f408599451a515da9064c9f8ee0086591b5ee6a0feda0b9abc09c9dc219d5ae89ace73e261850cf88fb4925fc123faec9252aee24e48d01854e0761047c25f0d7da6e6646b0d0e0e45538695bbcead115457d754e59b7905f84a134844ea9bec700f402098d7cb8507f76671ea2d1205e81b163a510c150def5d491417fc12547763755e546a8ce6e4a42846458a2bb0a9ca80d02e5d514d668eb6a8d4d424fca101ef6476e2b0caa8c74ea5e0f8a5231a5c424b7f5662ccc1ff1f53a9e39881e5b449b5ebdcdd01bc5f6785145a38752d0d61026a1b10b70a48048d3707c8f537da8ac5ded2983ceb38967111d2fa793f8b7b8bb1f13257c84300e2f581eba590f8811b988ed569eee4f0308a9c91da81322ced028c22950f35cdc8c855f999a95336072ea3609ca65f690d1580af48baed64536c273f5ee8233ce8b5addaee34ca78c48f6c53fab5e1a8dfd2f4ec95c5b2e34992bd11c60d15d645b8c9cb2f4b5300340417dc60568432c81bb6adf25aaca128875832c1d0d7c48c19bf5aa58bfe0c27ba38b8e6502ee9e64ea620d40890502b5ceb1a6c4327fef08f82d53dc8255c6cfa95aa27b0424658be611ea93a15cb38800fa3eefbf6be26d4cb56b22a29ebbf358b516c6eac30842ce0bc55cc1e267de25b94e89291f54576c6d2a9824b6e63c7949e5fe953051896c4a8e7e372dd8025a24971e44bcf925119c310965633734de623520352ad960c1bac012d109ed071038cec2cc65c3f764e1eb11ac39cbaf8869a1a636108f090fef19613d52d19e634fe88ce343c1202a5294d7effe9f2eded08b5f6d0885f602e344d2e069b85d846d6a48f89304475ab4391cbd3d63456bde706ba9f4caa2b4687959284f0ac42b47452eaabdaf494d5f9a467c674a02f211e222d24364439b9f2239bb069a174b04cd54eef0ae6d422c051f5fb8c220791bdd222f5b0d874d254428712b38fd577c0a1c9221c8966a31266297e188f9189a21bbbd0178d78a5cd2c21e3d11918e55e8eeb22b3cb9d2d9b5bdfccbe18315372b6e6ee8b96ec6abb5fb5f76a10db8f7b9b0c8bb7393e732da287d00054fcb1196050281aadd73ebc513814fdcea66cef7baf178acf93e98cb1be956e5facf2240047546c4220f657c4510b0e722dfbcb95adabcee6a0890b2aa5e315a5e0a4efb2f455af596b5a7daf746bc3d551ae95903c5b53aedd090a7a5479775181ce232a46af8b0c5e4700e651d1e84e68e1a4662b455dcf45f0a586b1ab770d434029d12b80a530c1ce2151a63c51a2e2b220faf3cadd94c97e81db2619a227eebe2107f5ccd85a0f6e9cc6fb05de43db8480c10e9659700bc9d245898dcc348d86aa46abffb1e0bf6cd0037fe962428671f255e35e41036459cd01fce770b9f34b166be342de00af84484483e06fd6a02be84fc793c7bba1b1672a205e9683ccb01060238902bc73824e6ab6d26cb694a668098ceac1b3d613e676aba158fcb18ff4ea6f8a379731f2608bc846eccbe62914f5f0c0b24521c13e28c87029199b62d0c8b0d1c128d38a8271e572a7897d88ba6df8dd1b8bea40640e87ba7341c8ab7c3f8bb3159569ed4729f29368c74e0b942ffbdbdfe8f59b886080c4942aae81d56fa72a04e51af6ffa7a72b83aea94f32df5dd288d0c217d0c38c8ad9b326e4879fc2ea777f9d64972f08cfb849e4dfd77056de7909eee049bba01c9cfdfa3f21176ce24ef761fe238f30c1b2a6ce88c9d26e23a023998bf628736bb3f3caa227978125bf83c7cd00a3e5913dca68fe62af41848857c0485c2419a31d6818cf1f4a8e8a201949b8a61a84127903a3d9d7c879910f41194e4a905e658bf21b49009483981bcfceffd9d9576a6c6bc9375293e36fda938313c9190a267bc6bbaea50611ff6c1d8e8cf8b2b4c8aefd926ee2e83fe78dba6cb8194bfb2c2bcf45be6436606b590e1f94d121215d11e1e97d6d13117bafbdfba21635f4bc80519f564361fae4b4876103a84ab42fe9b04ae32b3c3cdc248d28c48bdafa15f96705c80d278c7052e7b2729cf89b1ae6b4bddee5e86cc86a6c8ebce25d11ab4891adefb17f8fa66176bf983a0179385eb25474f7f17f89ec0c0945a3fba0e65338ec5c15b0f0d7e76fdd45827ef0e4cb13ec02eb7fd89143b16e08f3523d43a9dbc067c9ca2d80cbdd623813250f2844151854b2bf0df19c8357341d8162eb64df8590a52599a7d521e560d6a4d3c83d00bf99df4c948b4f8f118731b72df75cf904cff359277df6a9cb7a21a81eddf454885297485a0c5eba62055cfe6590ca93845f61b75ccea093c48ecaae1c8f320b975200c892e2e5db7eec150ce8228c55ef8811756b90b4d3f1e781a20dd33f006ecf5244c535a536db4b355b5c70c1cec1e058065e17d7c2fd1b71e647139675b61277cdcd0cfb5438e668b797de15178a11b8aa6299c298e3d7dde7f6f507892834cb4d35b4db949342ba56eab0e95005e50ac25ac0cf730212386c431382f97dc7c8ce7ee4472e279e7c85d150700eb3e6da461e6db165f279e92a5e9ca29381d79eac40022774b52189f6ae9a802cac871184bef7427b909a5cb95f678ea3af02b9826fc97cb581fa70286f10d4e5e63104c8248c25f0056373fdc1ea684b249b5c6e6d852b741f461004007a724823769a3102737d442a47da4839ff186bf79256fa13143d9f180f76a93433bea0284485a59d0374edce3624558ebb19e448011b4d71728520faa257d36e9d2237e5ea40e028ccd909059b35cc691a1a730bb83c56193cc268dc541dc94912bb90ce4146180ad4985adebfc88bf064895fc515fe74e121727b8df07ce49873bc7b1c4c938a29373bf9035628eb2f91f718317ff0380f1da8e588fc2c9573eb8f9fbb25525e3df7032349dc2fb9a0002f4984a00ae179750fbdccf259e3957685a8397b99acc90c82adc63662c6192708e266358a35fd1229370b02bb44345e6dece1762423e04ac33351708381815e9cf9e92ee5b35a7548a0a7ba8a5ee154c3d3e2659b2f7d6386718d6e515716ad9efb6b49ef1f52066ff6773fc71dd4e67e9dbe280a988df104f1fb4edb9ccd5a1b50bbaa180f2e35863d4560c5441e9aae2c9501719ae99238f7e75d2a24e7722b99655a68cdfbb00227cb79569e81e455d453d3654574e3c2bc0e7d4d6981dda89730514489cbaa4c73ba93e4f3d06c280f202711eecc825536af51a6ed834c933440c51e4d0ad9f99532f605b30cbc87a1ece3fddc6300c373fb68835334793fc06867f025ff8639c54a8a9f1af44b2953829d893209c7041e2101f12bbc1c981864080d1f8c4951f546dcaa0179f7d8a78d57617905d3cc2c14a0484a6e9220ebb8341ed0bbdcbd9a424aed2916c74712fb9c63bce34404b641c92c1968450201419a1bfefd3948b2a55daa0cfed58d103802e54860b857010185d9f1dd31733ef53e0329a414410abbcbf1c18c2c7d4eaa253001424870bb2d66dccd283fa02edca667a3fa501da6a654e1e8c3a9ec552820e71029801136a4e0509adfb1a9670ab9b60791a2f3d69916322f92b6825686f0363b06f51960084f5375434b6b20433a09017de9b7fb22e9ca45bad5a635e015b6a71aa60998258f729d93dd8cb38467dd2bf5cf6305f789f128bd6933d6611a32a800cac39d9628c3247349738f65d606e579d6e77dc459dd2b10afb22d29e708b968f6c243f67ba4baa3df875f31dda68698f0f4365d7347ee2876cf18be992d5b1e7d538e0d63b2b4f1f548c2a86c182d2b8d908c708872b478d3dda082d20d5ed056462b587693a267101da4aad014dc1d6d45b079cd89de2b48afed5fa33949614a3f9f49aad68443db5d674a628257145f9f6ef51a3bdba2ee9f92fa043fb7b230466b4d61fbdddd12a134723d9f31c7d4f7e924d2d3320603b0e1a23f718adbf5bef7af6eb3f774a833e0c7c2ad082d5bb1df9f4ffae992ef46414dbdc3014b55918e1168a6065a1bdcde0ab3ce95cfd96e2bb084b44229ebacc287f8cddcd3071f08bba379d9a2ef4358a1b1a3f95db28f8cfe7819a5941ca2c4ca991908ed59a5172cfbf3a62ed15a46b9ba9cce4f390b1b9fe3dd27445103ea05d7872c26c6a83ca6a35161777b4d9f6ef79dd221816ba27d13cf2a053887acd341edd985b4d15759a44f9a0160ada04828c28008f204f1a350f13a350f1ea692976b2e7205dd629b73185632d69823ccd63c0dca4a56a1c4df32fdadf96d8ca330d5dc1bc05d7c321662df56ca0914e9524cbad4f72e055472fe6d81e17a5524bab9027dc444362cbc299759df830035c1fcbbf77e52024c8e27ef4f705bc00034aeb91655a300cd29a0ed5d2c447776bb1daa7428b20c22b366134ffcf53b5a833e25e5a554433aea4f95abab545153f763cf4ce8fa6534d0de44b470b284c50f5164a8c6c914c35a12f0f62cfada9e4898a6964d28decbdb7dc5bca24530abb0524065a063dbf0bccc8f5477baab2da0b562c61c549abb120e933c7f68b3da17453d551cd69a307b72bb3dd041eb5d09537d6728695d8aef4c1eb30573e6e8c1b23aefcda64654125d8da65293731b8f171c75a07048ff5f1f9d8f7bcfdca493feff3cc4928dec787c7797c7e642d2721c8a4caa3a9a989868ef62d51553cb7bf97503d0e3e3e3e8f815f9f18959528663fb3eff1f9fe0f84c0937ebe7b3eecf9d9f355f6336b271f72617d3e5c01c5e682ef0b3b97067f470e6eecc3767d2e17d1153a4e5e3c7cae68f17081dff77d5fecf3f9f1bf8f4826d998572d9c925438d538c9066c89acdb8f2bc06da92c21b73fc6069f8f8f8f4f569c1bfbbfedd2e06fcc87d6427ab031da138ecffd7c0fede987262487dac7e7c5aff93c8fcfecaf9dfd65ae97874776791e039f59ec79663d6f671d8c36d62b8a62083ed42f8a21f8d7b29edd6c36f2d4f8513109dbc1361bb390ccdcb1909d7b0846fc4b964cfb172263335840778f23804da90e8a139bc26783bbe46ed9ddb2b55cc99e4518a962a123dbedc866abdde46439a594dc2dbb5b76953be185f16cc8d92dbb5b360eededeeeeb28db41f757347f1e3d8b265cb96670ba6e94c2da56c2965cb25b73096c5f025f8c9a0b703f05f1f86ef3319f4a2789e7d0081adadadeb02bf6706821ff828661d88fffa30ecf9f0351bffaaf814a3bda3ecbe7e98468029cfe3fc7dc677feede9643d3dff438bd17ade8736cac4ef9989dfcd785e1626ba68b7255c8b183c702c475def3def3dcf93799eec76136560fa551d079ec4dd54db69090f0c7846c52dcbd7af74732508fe943a2db98d43bead324b3f2963d479b4410c0e36e0aa18370e5cb233c7e08097aa2495aa19a3dbf4375d7091779c9f0fd23081fc5d4e039a40c8011f920fd22c1610fd66e27f6f81ff3e0c5d3f232786bf81f8e18b2086e0862f81fc3300e218b23a2b2bab5d70d1c85aa24c6ab974140217c9f99d254208b2e64d226885206b92d2194237696135d968ac10b46ad5aa95092d49677832cc0adb29ce93aa57f9a1d78483c1c11a2ab7b9cc6de6ea753cc5fe6fd604f6cdbbc1dadd37cef9926c21b8e6665cdf9670386fef6eaf321c525de2bc8e8e8c45bb398c56ebcba38dd6cac00f67e0df7c76f324ce454d39b13333333333333333337303fac1ef53c3c3c345cee33cdd279d935d9ec0cc3c2b11508ec684ccc21eddbed2bde636467aeb7ed4556f7a473b4a7d5277da513ad966a341343737bba43d5c5df18f1e83996b9f84f32b29e5d1d1d1511412548aabcccb8cab08666666666666666666f66e66ee6e32df987cfab4cdb39bbb3f1b7648ea4bf4e7ecd64b3d69a5e1859d323333b34b777797d2a5942eb77813b7849bf399cbe52d979999999971d3fda90b53666666f684386b597f7ea6cccccc77aedceb6e6f4a39e5cd8693534e29e5120e67b564856b71bbdd6e3727ee41a199999999999999999959889bb1f27dd602e72f7fc56f49e9d3e79c724a3b27ae05936c29714c3eedf4e94fa6eb8cd355737333f5e6119d74ceba743b3aba2d1d2dd9bcb04b8de56fe6666666e66eee66679621f0404a29a5ece6289a657add7bccf23d6666664e43eb4f4692bfc46c63663e22fa39e74fb9c5e9eeb1e13310806eb2d673d680fbe43dcf1a70a70564cea3715414e99a0212ab1223fa9f32b12a5672d4f5e6c9201ccbcc4c97b80b8d1c1ba699999999993907a7bedd18371fa2ba2ddd704bb71b0eb774bb2de16eb8b7112dd95a1011dd6ed34d5513111111113191ffdb889c8868baf3918de888e8c8886d22222222d7b19c977869899d8be4d2ade1965ae09696885ad45aeb52d39ebdd4a26d4b472d988e96969696963a242c7359eb6e29712d98704cb7f108863cbad56b1497969363c0f866b263479ea29e07b24b9728a594564aa71c9a3d7b4ee639bf9bbbbbbbbba5c88386dd7b1fb85c70fdb87a9ec71dd38ebafc8996984e9e3ce7a4934eda75734ecfe5c23b1c9db7db7c5c0b3a29a5744e3ae99c219199fb13990f84e8ece3a27e9e2dd65f76bbbb777b77106ebc2c378800aa429709469d20a1ec6b75685cefb2149d3a49c22fb65e7e179fcfe6808bd2d07fa2b42abd6561c8ace0321b39ed8bfd2e37db50f1c5ceba0166e1a27e8c56027a41133fd086b5402b4d1a10ecf9bedefb1812a97bef376825fadebf7b5f3d49bee7bdf7b0d74cb691e779d5ab9eeca379523784dceacdd032eb8e1e93d92ab362cfd9637777d3a41a1528d87e1e24567ecdba574d5f1ff6a4def79a1d5459abaf190c0c45577d3d590b738921f879b49a405fe6a47b6e4494f549d8329cb12ab6ad984599faae6f1a3bdfd200e931acd43e1e2803facc2c3c10fa824bd85afd47eba39564111f2f27e9b2aa95a4f7a394f2f50483d1442021f7a2511ed2c99328952ba1ae6472e583d4e9ca396542c99a13265c245f52b5d294a10917c99e1bb6a360ccc8f1d6751af70cd1693ca46b0a652de1843677b4794ae85cd1b1a223e5084f0c2e2152745200aaaa362d27b4d86889f9d1ba828287160d3657848a1610a029ad1b3c5873c610e5b668cdc9410059a6e630e9c971819aa32328a7858a9c2652e4b038c9b9fac965c121c74a562b930375c78f52814417b50285c1ba2e4b99a95183152f4b959123a70923d4b03103c49d97a5dc8479d255b9bb771c256577585ca9054cbb2ecacabe76005f4094fc6a64e079bfa83ee4724c4b9f2d16b1d62261bb5a69ad65167c9398d29d99999dce39a74f9a7757a2d87dd298b572d249bbae0bbbae978660d9a167d7755dd7759dfba42ff3f9d75f553d27c8a1e81d15e54937b07a9f28f21d3d38de9acbef014ef29893f80959941c922fab0cb7ebf7c645f2551091c9641df55e5c557f70e75eed62d6be98c9da1e6cb57c0b3849e6f3fdbbfa55fa688c5c7fc6d2f276bb499b4dd2db8d8d98f1c2f5ef2b332ea25d1975d9aca3602b48e91ea70a2c48361a58906ca9267ef0b1edd4fd6fae6766c6f17229a3b953aa8893e4bad72be90c37d86fda38276bedcd705683ba1f856e4c48224d703e48e794d164b12bfb36029acf1768d262526aaa67e9fca664c3294ed70542124948be906b20be00ff8bf1d162c89ac39e2cfd0850185f0694168136f2ff684c6de4631824935ea8e67a7f5b0b26aaa0a077d56aadd96e38a62aab2b2c70768036f2af7191d7be4fb602451bf97f41421fed5104ddef9b79d4fb7add8c0888fe05aa5def52ab5bfa5bda17b0bc3b5a4a9b510307941b3b4009a27584921973460820543843e524d73c78684ac2697657002f778c5d1994e2caaf6f9cb8f22d12386bd25cf9b27b002c4a1461648537362891b3354f22418d272186c4f0c444548e5efb3b5c4a29a5b4690f941d1fa9c53735a8b8f2eb9b2f57becfc8c1491023333855a5a9ca8db24b6df77b88d0a99a83e304244f7254874bbfb6e252aa24479fb26825b0c6752991806c6f82207125d842a8e2061b7633d80d3df1434a84ad6158839e6ff8ae59e88231e386e0f715439ab5b136f2562c613b1aed62adac4921a25a15b25124b30b5e37888b9a7ef8624665370b92b5beeca22bdad8584c8ee51fabad868eebf7e0ac83a60181ffd18032981ffef720bda1172056b704f265f405ed0567767e75d6faf3fb59bf045dfdfa05f001043ee82d6626aa75d6bdafb8b2ddbb063d771c61ceda8bed5ec50dd69f9b06dbbdbd1ded4914fdc5d993f914945307fe40246fbe601fbaae42310ce72b7cfbae0f5fb21278c377978bf0657d9ab041ef610d977044d8d78f3259d083e1652519f586ef3fd6f047ce32c315e14c852c68a9cef0a50b83f9c200773ef17c387bc2f1fe1f860ffb717e90ac7df853839036654d8ea517bcaf77f1fa3f8b045c700516f61229a48dde87e1ec8364def3f558e64916b6a28da8e64c2663d1460ee0227ff0fbbeee8a56823dd9394377653043bf6005ecc9c230d04a1978c168186823ff178d83ce0017b9083ff09b27893043070d7172dc8092414a0b399ef7c77952ed860e449c9163e5c6919cff06ad04f25d71c68eb53692eb68ca71fd456631fb3776bcdd79c331c57077162e0c3cdad877016de41fb491ad8dfc6fa8c6be4f13a20dc330145d18f88b9e3b8e70c3597bb1f36bd360e75757e81ed26e37d86e4511767ebdcdfaceee3757dc6fb6a28ded66d2d290bb03d8488e953fde6eb0e0e50fa77f90acc97e987cfe851ee875cfa2f762063eed15e2f705672dd636f3b7ecf74f0141b4b1625504972374c88db22ec25788e4e034665eb0e3c4159c2159e4965eb275c4070a2dc031026872d94ac146a921864b141c31b8810a9271910e3bca64cc62fa9b18419e043902a50a4a1ca02d5b359850820c901f3c24b9a258e638e102c5052b506768f0152d745098d1a4c60b260c69c3068b98965c7c80810a992e40ba00312557cc2c6b5408c2c71a27b4446981051a5f01aa1ad848e9f0c30891a0e661e675e7dbd9a3c48eb1987b9c4ec1e5072461761cc1612a37cae4c4d239c2e0c8cd87318385281cde28b1a48d14556e7e4d6ae140c7668e34399531824e6eb4ddc9e44975ce99e3ce2b4ff470e7b79048f5ceb7b3882a28e0f0c406aa35357273d6144ed85148a8f624ac12891946631ff22120f6fac330782e6a2927a594aef8b9ec339fdb3d9705f739028fdb65dd16e5943f7f72d8f640665d39a9ccf21b7832cdfab0a378ab677de8ad774031d88798cef97542f6391b3fc51ceb214fefbceb64d7dd8ffc9f2b692490262cb12c87f899a74ca0ba3c8503cce54fba3c75630a8b55ba2c75c7cec5499b44fa2021be7ff99798c5d40da83b1e5d7ecb3c45899dfd3f4aec4f12eb3d3858fff606415e108ce4974076270d48ca2a15597bd7daed72117541cfa5ff73a9a471e78c6ff7ac04f5aa70ead35f2f84c5fad3bcbb7da66453ec7c2ac70f694f9dd72b3bda8febb414416cdbc21fe194483e3d5815210bf575093effac62064660165dedd6b85cd942035cd5d836979bb8fc568b8c8a99b8a84d0852ae7dffd196214dc1a5df0e7e5f6f2087e40b66c3b70cb8683281b13e247dcaa766fe4c3299b51b987934e62c8fca497e95513c3a202ea9a6cb4b0c0170329a17448a908965cba45f9eb0405563479b2366599434e9a14929e54a3b358b0d91de7e26184e1d240472cda83bb256e7681e77c44c1aee0c71e70838577e75b297a5ee48ddd96148c842e3abeafa8793d6349eb237f7b6fa2689d543fdb5daeea6cd1c87957b5b39cd71587913bbc0262c4e5a390e4faa72a99c93e122ff11bc74881ed79f5ab5521542c9308b3a848bfc5dd461a4437c5a3ee40f62791258020f0d01c1a6f0061119d8c3fa5cac31dc71fd45359c04729b26ae8b77aebb6e5c77edb8eefa71dd65e4fa834c2a4869e37fb4b1461b6d136472fd5d4c3cc985e543383c09f63ecaec87b4b182b4f1e67a792e26d7c7178eeb7508b3e8f7af425ae905c5af1ccca25f355c7f8fc24540d8f115e5fabbb03ce9f5a272fd1575fd3535bab0aedff10575fd3f2d4faad55a99ecd3fab49caebf84c3499d8687b05aa9c7b0d11a46628291e8bbe91f7d7c082562556cffb79d18daea6a26732ce4b40e5e559f7cd1f85c146d4c7674b34581d96e2934b5b1afcb527790dc51146342312b8a622c48c886f04e10b09e0005dea9f1e3a1c0e3b3c30645874348b56315a328407976baccce8e141416a05065a785991027eca0b0e004adb67496b03e97a59c48e28eb61ad65e9672624c8acb52574e47fa0905be06d958f794b6cc87da081693489ed7cd4890524a855349cae636fa218b75903369e621a4f3033f707e0f7f80da0464eea3d97c48becf8ecfe5a286a17449a0fb5a3bd61959d146b236fa8084a32b8359f563faf46a4431cf3f4948b650d010f7dcdd73f7ae79a8fb6ef76e823bdf997e5845f7defff3cf3dafebaaad49e7b1ee62d6be904df38b28fd6cccebbcaeebc0ae8324d05bd741704f72da755dd779ecd25f1ff8f5efce7d33c943f44119209d62e7ea3eac20cc706bcb25a5929d84eb2ede88b4478e3449e2a8ae41f35b48166a48d15a25be255df9b5ce983a496eb53fba997d649b386dec74b78f5b2db17222a5f499607c8029e2ee3ed44b112f4b8e581914eb2f654a90d45a41261f9c30f930e5fbbef0842927580141507c51c29217253809c3d025c7879c22a228beded878a3c3e572c19e98f28495d7eb65eb2ca9e3040683f160a5c16263aded4903264d191e1e1e9f2b2d57543d3d3d296265a694b1e223ca8a58ff582c86828b0d2e3a7e44970bfe1fe6771bfa5d2e680a9f629de94a1c39c44c57ecc81adf1085283362fd658aa99085c01891edc8bdc3994cd6e8e7e8f30d92483f2d58188c597436f459f8a1eb854c02e0f76fc786cfd73dea7a01cec614dcfa5fe7a275dd288257bdff66a3ace17b5f50e772511d6c6fa2a5569aff89337f2f4cf7754e517217f981f5e321fa3c958b688e56a9849deec6548a1541a8c0acc0c0603d0171818a4897197254cac9116394504193492c87c6c692df1227533a2a1c3638cbb5eabec143fd55b5a98f9251b14e3b9a8c347944dcc6acd629772ad25a248eacb631b91cb8fa6a430890c96471ec28ad3acb87e4db6cd6ca645fbb6d4726b5955c7265034bc7aca0e5f1618601b1a3945931a9d29aeacfaa16f050ff970f62884b1970f9e74c3659d16023590299acce9243f239d7b39af542c28ed2aaffaa6265c99e458f32c0543845a5e996c02f6bd990e31a737777b794524ae9eeee3ee794bdf0248953addff77ddf078220088261188661288aa2288a2e97cbe572bd5eafd7eb0583c1603098b5d65acbc3c3c3c3c3d3d3d3d3d3d3e3e3e3231b128bfdfcfcfcfcfc4435e1408142e4a239c33bceeb62a3f93ca95859777700a884ec496e001672fc964704b982d413747224803bea34992770282247c2ac129363d9801a4eba34e5e4acef082ea59c2e39257d39af4b460f6ccef7f93edfa7f84284cbde7dd6cf4f41c3f63b333333bbb33b4fe6d9d13ec840012f664703a1feb5808ba4fbb7df79abd37661d0de4d1c09fabac04d9c779d9c724a29a5ecdc714c7ec581a80f84c083a8e9964a94ab48c842a18fcb3fbbbb07db6d2ff3e39c5dd25ed6fc5ff8f163b1a0204965252de8bdbb25cf36c0204610db3d8a1db6a389481289e91153f91abdadadad35b75310b13807c1bbe989b9c3952b34aa56ac8a75a772ca93b424527fadaab2b2bac2925d53c7aad82c597336b2e6585ce455d735986e43d69cd26a94774dd7df6d48241c3a6a56189e052db1d2853fc0b614cf847cab44625a7511f26519e592cce00aac3f33cf2b320b103aeb7ee05d193d30bf2e199d787565882f66014237dd0f2070fb6553d375bdb02fa43413b60ab69f9f5f00b8fc25cbd53729d7f08e1c95a58e8e507a92e3d4a15b2e8623254c276588ae633877bc8db56b7bbae1a387958fb7c6f3de540fc70443f632f1f2d40d1c5f9e4e18f78e6e369b289facceb8c1b212c2892f3989668a0e1d5a10e3c30b93083a4d5c59e85001c0d40d1ab3cb5336ae2e7879ca86105ce543834929edba6eceaea9cdc6554b5ecba9ee29ed94842c14b2475d6ca5eaf2f9bacb9719d4a68b82eb773e286732a4b3d1a4f2c5741e4fe0dd09be949dcbaf93f3c711ee4882f43c0c64b2e63d0fcffbeec7073b34d9883221a25acc76defb70b154bcde575b4779d3eb3cf73e9e0d724079efb4a3efdeca9ae77dcf1d3bceeb791d7b1e91f7b5ae636f324f212f4bcaaeebbaee2d4d5665c7bf9dadfb9a44e2974a4e9b554af9dbb7d65a5d782fe3245bbf032b2b719c1c6eada0d70d3125775dd775d625d187c5dacbdf4dfa73fa30e5d655d20f23c66851e12a0ad6035a80d364860723608c9c31b3e543f2e3842662c6685911e3c5092a4608a16409291936e8f96147d9d4925d92c879c1071936497cc9a1714a42b5040e52802833848d157ac890535543d30e19b0bc81fa41449620579048e184be21b7c82a28325641b841728688a73956ca0001f27292195302130f430b0c73580052c21c2aa6e30426470e6e9830a204a22518b749b31de15a3c7120249a22aa9c11a302aa26ac589006eaa90e11352a58f2d26a8a992ae10a06c40616921566a8c3c6050eac12a0e050fdb004500b495f4366f50f48762401e56409316f5c88300050a303ea0a0a891a92f4ac60476b5fdeaee429e94dcad470c384143465b45071983734c69b2c49206922b50606cf8dbdf54ae95919205f9b4b6a535353d3091c352b57b7c91edd2f4ced905bba385103462b063040bc80a162673c4939e3c2132958354031a940101ba850dda072b524081a52a80392a872c2c4eac98fa9186c1dd891c2d39029462081c2403ce9723c2441041268e6a461122416b1a32876ae03053dc2843961ca102c22412b78024b0a136002c9561231585143a799c5d8d801f574c30d9920aa827cb9313950d0d283cd12ad58cf113bda361c4449b9e14b112f729a7cfe3045030519556754c061ca0d17aa9ad0380f021c8e70636688973162d8879984151fd0bc49a1ca0c3dc8a7d973b23091668ba04b13609c706c09c143ed333d28094a7244133dd46002d514982841ccc2e917d983479635265cd1f0c68a1148a6a8b6b67c64c550430c9ca61c5850e8961c35e6e0a06c868e12498810d9b2058bbf6c31f181372ba830658b1c209c701148037b15b6a1a10223e74c0d3da4f0f472c437a3480f4e48a824a9610210436c9735c3042d1e6e60f2668d0d53fca9cb0f29201085c90d2f54699225051cec08f1218b0e292c91030b1408335eacb489d36309558e0d1c1596d050f2a3091b9f9a3da4b2a0893385c6842232aa2f3bfc10254a951d3a3959d33dc9560ea00cc855d3a0636b8a093f04880b3740b9a0c29b352c05a5bbf9a002254aa840c7931c49a268e77487e11f84e18b81d503bddc9c3d06109d8aa8548eb98312aa199300004100e3150000180c080504e27048289e87d2281f14001164843a6c563c158943519424318a8208228618638c018410029051a8c63800a62817219127354103b4d4cbea9bde624b218424d38fa5e4182485db43b34294f2196d370ec0e2b7c4e93628af91d05eedfe70c989798d035b09e5c3b5ac2ee94eb8f7e2b22e28990d2887f89f71b328f612ab216aa12827aae841d4c33403fdb780a05b2fc72f9224707dd200e9335b7a16345a1528b626e71d9ce6ddc0332828c7e3e458628ae9cdbd2323e13fb3fae6de22545a91e2f9c6c3884581f8930f0ef21ad2973facc3b5fa7d6ee85bf1ac9020abaf18191d2277d4ccd2474e315686620601139736a808cdb3bf689cb667640eb520ff478e5458ce4df2619ca93d9ebd9be6e7f3c0ee8db82fd81c92af6ad098b2d41ebb411be1d22890ee765d4d0bafb9978cda432d082a0ca85d2a5357a83ae64cf00dea176b81f109468bed2fbdd88330f6551e3be758e162366d5cf9fc7996f3d133b4faecef978c284c0a1b1f70e41c310aac1bc176d922f623cabe4b82d6019f29db72dfe9161422c9a7a5912c94f0f800aa13e6334f78931533f2bb3dab030934f9c727955b09169772bbdaea595a1b3bc05c875a816885e3cb5c62362c09b448cccdb7e28a5e14b1eeb41544cec944660298b51c5301eb1e58fe40bd689357ad4537bbbc348681ed4270623b45ad84c55e4837f1f6b842eb6f32c2fdfc120bd9baf19c9cb869322c4ef3dd3da76944d47f64cdfa21e4f9fd5dd78073793e5c079093a06894cfd053608e0b208ba1f4e78e8aa966e6da4a3daeda61c4ad9264b322920a508ba8bea32e81c52a1d75c02356c157cf557d4996f04a64bf3c511f16c5a94715515855965d77a8a3aa2d461c65920cd63e2840b5e86adc57126cd70528412ab0eab85512ecd7984f00aab0d576944bb0584f9e42d463d572154b32586b9d40d5e3ab735d49b05d859c84a941aae7564964bf463701a8c356df512ec962fd6a3a41b65a68b5ddea122cd676a603ee528d57b7bb7e12acdc4ac8fc1ed31d55c9a363aa98b9094cc3c8527df3318c663b9626b4ab3afa8df7d23ae0382c10655137e0cb03ca0a6d75db283bb0795f2db543c9f77ca8762bb07d224777ca3da87cc740a6dde5920c723f50c1c6438229d82aba216621b29364e4b52cae9cb0c4a6f1b71e9144cbbdea8555c49b2852246c82b44fa3b047ec81ade11062e4f5eaa003358fede846ed95e03b15256239621eee8fd2bf11eb29accd5f966175d0df5505cca1916a34374568d72bff78a7935d6024baac808585cf1e47e1f1868ab2a5dedeff67e77ffe6912d6eb28ffec87182eae0dc21cd274d35b9f85779365b96474aa115023ece606664906fa333615b3ee0658794040749e7817b72ee3fc56e42655c00a3e3301f9ba5a27fb053e14db7f38f30129be0eda2a73a41abac6b6cb0b839611e65086c05e05f3f318ce8cbe874376d4dc5652411712edb5d7d60328d271f31483768e7bb364f6e96d2d6092d7b70889820e15099ac76656c9065fd546cb57a326f6f601fd75777bc529105adb7747c1eb036a933ef2e1aaf1fb5925a337c420262a9f39f22f234abe17eb05c1e271ca711a463808b1689064ec6e9565ffd5ac52a1f4887487e1f8042dbb35a91b62eaeed85818fe6f9991e9783f95b141bd3ee0f65ff7758a49489ee88269bf5fccc8110302be3ba2674a7661f63b77fbd64409ca289d853da1072b21c180184a8314662f0753dfc2d076348b6716d59c79dacf1f08344b7d29e886fac5ecf9e9a17bc647037f6f7deca23df00fe853b89498d4ecc4d878da9e8679a7a0a813b03f6553595d0baf892179d1f32c541ad6e53ce91585a79a9e05f5094d65d61161fb9932d10fdd159269d60f450ee00349a75bfe16fa6cb4d78a091cbc54ce1c49f5063e8a1e9ed5d700bf70379023b8fc4b8c1ee91552cfb41014a6c016ce019379a577e05c7402c33e2ad59eee44c643ad6c8d694827b55e2138f27c00cacf1cccd92f3cda19db7eb2a4fc5bf75f88c188ff9d40d7598b86fad1779dded13b80096e0b4bc220f1efaba8fcc800c0ec1841d1ed8440fa96342412f7ca8d4a06b8a53750d76bc45606bdf231ba25863764673139741c62d439134f98ee60102bcf216608d9f47b6ae4dd88f2a02eae83383273e40b3eb46165a4de5e02fce4fc5dccc79e6bf5b27ec79967f250f2b631aed039b814f4bef95f88cfcc57e79ea33464fe4d33fb52512cca3d166b6d9b803dc291b046bfd0a901578759f11e86ce3f2bebe38722d76a2d52bf0b89aa064a212764b643286d44aa0ae1c1ddf77a355e1fc7505fd64802cb1d13537e6fe127ef98caf2e4159fe8b538ad3f3f6c792959cc6a24a2468867e5c5248cd73e60ea6de4b30c799ff39fb63328fe4c1743a1658f2f3b0450253d1f897f1b1a9112e8bf388bbda0b4172681a8690582ad2ad86c0f70c182f943ee674942469cb0a42abd655962ff49f4dc4d9a2491ca617ae8f1542d54ad477fe5fc5a0f24ce2f5d52b6c1d68fe8ee70dbe03f27e2c354aeca8b8cadafdddb4c0ba23bddcc59e9dde2d25bd4bd606a9a2b0e65ec631e5199fe4855d246140a6632cf0b404c0306e060f374d573b36f346888394adc40def25593284f8bce4030d3c6f56d6040f7c3933fb4b6b900a03408d77e744b5378cf3efab20d5972f47e16e6ae3c52507a9a2c1197080749535f03c2a9e3ae7f654f41cb7afad11cf06f8dad7632d03349514692ca5360c20a5b488018154e43dd1f7fa4b04b82e88bf1a5ee372b0847f13244042bfb12a6eba9cae428d69c8b2850a0964fb185bcbd69811f9dd5f22ba8955047e495bc010a0d4e5d6abb28e01756b804f0b3334187daa19a89c6a2458680dee4e7060dba7d3faff09d80435beb279cfed490df429befe965bc165a000416d44944f2e2e48762dc2c649c1cc9e7809b5a70d98f215902f98fb5c21e2e561ab39e9b11b9b7b7a9b0c8ea860300fd1240d0de6ba279cd44fb156be31f7af8bf2e4c7663b486040af7a275de7832d3c9e49fcc57ed44d9decdd79d2f322494a2be7be251a0005d719cc017e7e2dcb83d6e665e94d1d6d232dccbe51c9ef8798f3869d2d8a6123ae7e38cfc3d4f89fb6548da7affa1f2b70b141a6a2bf56a6424c79ab9b903bdb704a317177d008b25c79723262e0aba7d325b76f2f174f2f0d10d3d53285a4238bdcd73d124d045652644f5351318a4fa25ae1bbac8fc736d458d25b9e1a5e5dc67e741481fc9b8b54f7dc10d21f0029563b30c6e471aa783a9d4c07219119c6471f80cc9e32e8af7ce7a42885eeb20466bc161191a3b2eaee2ff7799e4d83d2174d758a4faca7891d69aad6c1e11ecff9b98c046af0814da3e5bbb152a4e80e49f6245b5e3d1427c1e105a5ba591e4d1cf77bb8814bdb298115024d3274799246beec42f19a1308784a22c23c1855580c8e02ec98647d8f7f2cab6e94ee6e5baeb3b702f1a53ac87151a745ad884622fa15f67bebdd50ef4230f4207528173f94eb47e7d3c0e8feef77e0b17d801e130fece718e1f049b834b3dba9add93e04b195d3078e992a224f373ced75898095db705271a29aa4412b2476f5fb056bd0366d1c47750e62f1e890333b972d41a2aecb5265874673570a5a3c828bf55fc8cd77e4ac54f3d7e4302b471052a5820acfb6de7eb253be5f17c9fb0b02cf053eac39cc7c6856950b17e7b18777ae559b1f4ea418ee2d3667f0d002db58008b0fa9e02c2e95eaedf6bc56f56e6c7178ec0a58db3e0002c21c0503f1acb29b2dbc5bf07c19dceb879edfa1cddad535acad15d4c932084b5d839fd8321f73ac046923c6efa40df9e6bdc28bd5fb6db1bdadd38e977201b2116b154456dfd5e3e2c2c0112cf230ad7f7ee57622809592687211a768cb03852d381e01e5f69df82ec3b917519b379e8a385cc0441f541410d7adebfe0722fa28123e202868e169d60accb73ebefb3e14e6c1c6828d3db1671389daf206b3362507b604e5153aa04407ccea3a9c3bb1829c85c2ade227c34dad7f94e8970c9c02050a72a9a07be0e428d9e730ac124f6eb8ef93d5ad991d801d866c0b634a0fb4ea318f5a47a90e31e24bc5b415b8b26e6c8e25494e071ee6aa93037a2f390189a3acec599a51c50ae9809774eb74abbc1052105c5d73851b239a13363d326ecb0b0f588447e10685a86bf0a4636d217c592f757a8891ba32b60139326c43453ee233c5e1aced0a35a63643560d792271932a10822310d13905ccb5ffac0d812008782c77bab8f69ef15c50ef99246776a84b5aa08f26a6a77fd9bc5e606194959b6ce35e21afa487b27d1a9d2213d835294b3a834a85894e495a0bf1c8d236025cc37524ba0a83d6a84a2a2ad6ab23ab2ee513822412b2061b988229cfa9d213263d3bb1c97899d9c7631934e4e135242ee0bb1166912968e72c147347f708c7cb7003b57eb866f401f5a09dc1eab685f16a9a4610b089a433f12d86c29bd9018e974e8ff95ce2a381029ad9a8dfd4884782167ae4f86eb406e9adc1f2995d6175d8faddd43c34647612274b977b58760c167f14a26d93d493bd84daea23c433346b93f1573d5ee1622f792e46265971804840945a207de674360e3bb250d3c4c12464ab5a6a02a2ed64de4190f113c0d7ca1349174a9012e42448c845cc89bfda79dd246e9fc194386e5f6174942fc43ed53cf32acc75be5aa37eefba4decef4c362bb9bcab1c788ca8547e6f81f407b8c426dcefccffac890aca2e35fde7ed6c2c432b2d29c524e3a7cb973cfb3052d606a6d4c3236d923a04b18944f691be1b1ea6568c55b45ec705e9d1720f7224a4d015ab2666749a12a3c37ce8829781d95c60ebcd6aedc9b6561b6f0f8a54593142e1967c67b04e26e498d66ba1df358b94aae5b6d2032a4c987b9fd604c3e1c60a1bb8d7df059ec39a078372646e222b5a2efef7d86dc25248ebbd51a10b8035482c73768d26e2cad06bb2cf55cf2826879dec3340c20f5cbf895c41075010b7c44410ffe4d08bd0ff4fe40b74b67caa87579cd4085a7b50b4fc2ac81ed6a802cf2b62f3b3519e223c8da37e5a0b1e42e6861ca69701a3743ce0af1b2cfd80812fc4796066a894375524ad68debfd6951e2fdd530b9c7ca6b1cc54837ea7488d7638aa34714e430356cb532c0f75d9c78f47964f42f56692ee08ba711d237c227a750602c7580ef7f2b345db2e814a31aa86e2f7e6f1c0bd26241d86b693089d85b2e8fb0d089eb845507fabfe2396bfe04daf92b24a4210b19afd255d4adad727740c662763564642c6a1f7b54cecc0db3cb72c38f6ea7c2457e68ecb517d82b2021e6f3bb013be865be99bfdb5b653289df659a75aac48e720a6d492006cdfafa7411343bd60d6a9618e4ff703d14286246df43a191b0ec57a36c92483fb8755387e1ed9b40e801259ed705b6d29fc41632f065dc0ca7eafd8c4090cbf1668672085226f9b88e427f54b34f5e410fec2dbdbfc3b24b6f619fd08a423f08a54eb86cd0f3a427a40b8a153abb856b4417aae98a9afac990f80f8f54d2cfd58eadcc301cd5866c70b41da1df802912fd82101c36fa5c8c1e3b96d50498bf2e36d6c7caf1fa0b8b29340d32c1c776eb0c436a6b6c9744c460d589598446cf78dd0b4ee91249de9b7fdf9d9fee24027da9f9e926948710ab3d15d297528aacc453f653f47bd4ebeb325e4b418eca8e11de42c371b67fa54de4e8d4dc96a5dc3b948ac4f0ad5cd10b6f2f872128bc7e62335fcf0b994fcae86e34db521829b7e3dac2ff00ba091f0dbfa30aa1a29a228fd6902d1700c19ddc68a18f059de148b982a999f097dacc34a2b153e87ecad1ae52db382c9232465217dc1ca814108b6e3c9e5fe6331ed56b697b2dff7758ea037ef15472ea8336129c49e7e505e4c8f2a3b0e8b20a944170b5696bc790bfec8a44a03fa98942595542e46b269bc83e36b9effdf5706606347434c122afbf9485cab1fc750edbe6bc058188c6020e066be0171f620ae3506dd8cc790f24063bd01d78ceb6e6ed681866f55716a175d1c81be45d314f4362bdc1729303024a4df8e0686404686093fc0ee557aefc214efec1f2d489991fc24686af9d94c94c8ca46dcbb4cdc1cdef07d115161de1435ca167a961a5403a39da90c2a8941ba9db3b9acc4a68d22c2f8fbbb5252676feb298e77ede07f19a594281ae4c4c8787dcc8e5d837f60309cbd1e7fa15d645b22dcc27c9648c3cfaecf62d36365036e6903f7097542d44b28b6e01a73cc2b25d9f07383541a60cc0e0d124e564a58c0431e67e036666392911a290593790b9568d9a62c2d082f8277bc9b0c738c8f919e484ed18efb3d20c42b8fe6cbe69b12b18a72d045868353aad8eb1f30e68e4ee0ac72a8f073b6f72f82cac2c5df82386137a19409354ec5f54ccb4377f8a4d9834dc138a9f9734bc2f730233842330301f2840c876abd3afab134bc2ec6af947c606825ac535f4dad42d5d45f66e5c02b361092d9ae07be50f6320aa2b0bd13d5c2947db5829daf6940e9366298b211edd4ace702ade7a4aca1891ff0f72af530f42c62ccb7d9cdbfba03396c74705346d611efdeb881aa1b150938ebdf06b93bdf409351952ab02c5236da81b6fd0b5170667c077b1ea9ee7a5c33c7c6bb8e23e30b52ebf4470dd8800dfab43442ff7202e09b7c2fcfe838f747855c008117895a2ca048e6e858258a9448d620cebc999a59c3552fda83fff818881c2e7aebea801677b61486a9096f74b9d3c4bc5183263491e5d94c430a011ddaa339ce8a5a00ad0d49edd0b718675c746e4170418296770c31c0ea8766009edf486588d46550296a5f8d02e29de7ab21a916853623a2c26171aca6fa33d9f7e5f3866cf0f51fd296747fb8a9c5745e571e0a1adc36c9e21e508a59c2efbc4f5ac0a5e01c93af09520093fe3d4646f45e3df36347ba394a716dd97284899149ef9b311701ef1fcae81a58c1bb8d8f842a8707a13aa5d1c2cbb232a1088b1aab3767d4e896c992292e0532cc5eb6151aa7e6f385863ddb4cf8fd94d101afbed65580e5d787ac0e4fe04afd6d86fac8c4dbded3517fc3ed6f3d4ab5599d28ca70d159fd5973aaacfd973b780b49bb18e0671c5f4c45739f1e3c3440219275fe2830830102129727673ffa8fe529c1fc079626820bb7b39a61968904ba0ac654315deec91581b77ca1530b0e15b46045499d18f0e8518a29d8345c0cd9e833d963315b5523280ae934338222cb24180ae21a68ca55ea05830f93365e39401457e0d93da5a768c3284f3451b0f1e5f3e0b287ab20f7ee6d940a5b7b52610f4b0a074fec60523d72644c0cd7ad73d544c175d89ab7006dc263074b508f68118d54b86579228c2e89462c9bcad0f64e5bd4fe4cadc7b880baffd5f0846691a0d55ebbf48ad2e037e603788cd715cfbacdcbb0aa1daf7889bdcfb0a1b9fcc28f1038259dbe31f3a84b8c2139d3efa9fa945826b1a8862484c465e99321f64aca24c6394bc3910a910130e83f9bdd626144763d22d2fbe84b14a3859200c557d11420946ba9c6b59c6c9d5d2045693816233f67e9717d16c58f7bda188822eb7a652d7821d1e40ef851079f397fcc766b0f5af23c86c30016b3a0ff0eda5fa7a1a677b075536c0050195c986047e18dc4de564831d8eaaf839e5234ee1e3b87c4afdd707b441e6b8902786c5650c9c7b6b1e3749dc265b6ee092cd05fb7777f8e880cc07e2922bf63a5a67ea3aea8aa1655a4c342384b395deafe4f5150186fcc7813e354fac6574987e0a80960b78b3d99e34566e8eff181a496f9f2eb0fcce7d56b7805597e94ec2debd60c42148415b34117f08aacc51506ab293d5148d7a9eec7cc63d9ae9024c9a55502eda5e9450e5bbbdd61cd3ea5f7e6fc009513ab9ceb426af2984d07a0fc408d045748895802118f882fbce32108d49e525e3fef1e7546673424fe70e93f6b48b343e3f46fa16b3dcd7e74117c3088ec901f667cf2f3be74909ce13fb2f64365086be9abb76ea004d0a8777ec51e118f36fca38b31d558741d4f1f558ac77c7f2a75b2deaea1d490269054711a60b123f26a63ef1653f0b0ef12ff165f30a0ea910eb687d1797e0b4e0d9397b8e2614f78dab75a801948b89c6e36151ea7131ba8e74167c75167da6930c2f7cbe2538b04029352e38da808ce75921b84e1f3277f87be3a7c34a82c4765f83d73d2d285e18056d08ceb4d75d891ad6827148b78b7c318c5f44e669b318c63990077ac530185d577e4427dc283df274aa69642cf7f24621d00130d8a65fb7801672a91ee37f4301caeb0e15976f201b6ad6bc92f8273d5aa64dc0fe734aa2061dc06611e0520930be567de7c87a7b6e7db21ad4898f5d3b55a60992330ad48b88738108f36f342a12b2117f5d5ad36e07d0c009e1c090532bdc7720e5e8ddb27bb9af35680e9d39ed825c20968d82a5a0e06a26b48e62daf050ccd6bf7f0c80798c4cb6da8a9839f802f2a8caffb8230c987b6ca639e53bc1aec43e4c7545a58a9291b3d1a282d9dd084b2c6884afac23164b85a4fca8b2471c7ea6bddedc6e2b94b81a02f017b223a79e8ffdc69f55ec11b3ab50c122cf9953c3fe71c16cdcf916b7c35b15c28cec3fce3e2f49eabd0879b4104e29ded49e6607625e5c6fb312003f608281df7b5b39a8b7aad8d5317f3127a089616a7bf76e6ca2b787607aad8c1260739f30c37b7088a02dc691af1c8f614a9371affdb63bc2648e68c123892fc05f29880755beb2ba07649e9315273ff0d6b265f20364a70aa3334edb692bf0d0d03d1b598049c438a0ac7c768542b271e09b58f5f87f8fc0a3e7a03a3814239e07042c7fca92ab7ae33e282613587e3b6c4d06cbe52eccb3b73294acec27da2481bb7b24d454ff2de196671669d975e44f73c6baf195b6e3cc068b0aa031db3b8f6d5501d379d39ea22ef698452cd00f56a8d66d410a27d67ed4d8127d17b7e9583c2cb02db632fd0b3597fd1e03d1b8bd2da423e19fc41b3bc388d40b27838d6e28f3e909d17ed85a639070b6f5febe84e9466fafdfc46a463aa7289e8b9df90be2db25eac214643467c1775fa5ad5da20825107b73131ba9081687ce4986cc7d4c69ad0247a424edfe1331b5713132151643f8c0636b718712d6f3f97b299044a03a01a0f4f601bc577d98553a7fc32a9efd41b5e44c4abf197b454e7187d462a93b5524600c9bace5957f53643849676b569d7cc48f3a87f086c938161082ea015081669c3c20513189bb87c55f10e2e3d289dbf40be44b04a3a91eee470d2c68c65f4006b66ce25b950bd51e3a9c32137149cae39876fd2d35976239c33281093b9a02a407613cfc45cfab0bfec9a9c820711750e2a22ca6392d0543528dc51e42d751f19c269f236edf0b67450a51e5f26ea5f989e374b451544019a77834303669763f29a44dc8b649ea77c0d63e905330447fe705caa2b19910e80a0520589b5e6a01c30ccc71bd61fd89283526423bf5c4cd9842a54a942c3a971c42763d4636afc9282238a23d5880e7b8bdc4157e059e6c318d0a0c9c1670aa3c175d2f14c50695da3ed258e10dad7aa5edbd8608ff2bcda9204fad5aff07ff89acc3eaa53821f0684734fbed6ceb2d6e08808747f68a5caa4ffca0395141a8a45637371c7ac59b9087ac672632a8107857574560920d5d45ed17ea6261165419a619266bd35e0031078e684351df4a2ffab32ce9d4ceb7e694273e0a7b9b9f8e51df45dcd77b66e2b090b9ea04ce0a37afbf86aeaaf2f3a977a05b9b331f80243d50078207ffc2c0702eeff5ab4b65279662115fd57a8d668b99cd90bc0541c86fab3a1ae9486cc493c4600ea68dbf1ccac841ac12e6e48f253380f546c86e7b70972364e72ebd0d90c15939972db545be4067d192b242ff91e13057a2233ae0e77a3a80541921f021b824707d7c8c8b209ff02ba26290da3cff4262bb98271ba72c227011c6766bb2f84880235ef8e4f7d311415623c0b0f434cf59f6f40db537b2e84d3fbcaa7fbe1b9608c65dc0c0da3709c761e172d9a9a660d4cce71efe70d6faf51535442677f1dbf1307d5f157b0a25f6d9b0cb04516ba0fd1fe837fca3c4e76a324a656615911a799a4d624245065c9abb9981f143bc461df14752f5f6939cd44c0c9c9a7f6e3e37fa1b83498ca5ef6ae3e12c1d502fe4442929af090acd532505ff52d201b8d3b8c5300dbccfdfcfafa8429d8e88ed47c147cbea473e686c2b0144811600563416a376bb57e925f09bd1827e339842ce42403f8c5efb5b63a0db4eca29914253909c264d3cb090736f08128712693c9968ce23984866930cadef2e8bf217ce39ea467d09652bbc4508f040a87e30391cf7f1f8f3190124f551693538e5eb6a46dc3dfa7c3d77f563151a5504461a171687ae0504d4a79b0fd801149d20def13580c7d751d528d35dd728121b1f4cf556a6995811a705d1c18f8cdf310452d508359fdc419ea1d19944519a38a7f56a6cb647f098398c81cc513915399bd849bd159d0be0b9f94eefa5e84c00cfcd76fade652702786ab6d3f7eaaa32e0262df6ee409cd2333dea0e025d07cfcab3b31598610afa7e99f402be8a9e90ba28b93d8c7ae67768f922a69a9aa074e873fc1974e6af8496d3c7a8673675ebf92f0c2a33d2a09ff366a833a70a5a5e0fa39e0928ade7fc30aacc4e1dac41f3bd19e453edaf3e501ad64b65a74a0b57d0b3a6a607fa2cf022da2df2eb31fe88526f87072806232699e08ae71f6a08ae7121961a8fd45326a3d2462489cf56201fc903cbb65e02ab924bc1b71236bec37f23e637832dfdbec19f67168b2df90711ca74ad5ca07091d66a5774c08b77c1a861feb5e92b270f5c95799dc38b9d519c7a102ca342d537b9c8ec1273658ee0bf2ad836f9568ff0600ccdaa7f0c0b31f2a6059bb5b5951f5147520d23a2d6fd0591000232684cb4465401931f2eb19d9fc87446213645351d91a6681280442bb902527bd3250a741a9c0a52e7b862598b26a0d6040a9cb4a084afd98c5d3e1d4903e7a00282d0564158555124e99052e5c4541fdc53cae5f8169f01452175f13f4307eba8b9518d71bfef94767a62063f6cdc28937669092a1da02b48b1e186769801f2b5fbeb9442a5a5fb762a99b7187cff0ac716da0fde1d9d26138fc582aef9eca2af587ac3725c0c45c383ee15faa3da8e6f9bff9a745bb5280a8fbce7698f5fa983efce51c8914b52cdf7847c128c58404dd45a6f6c976c48827bc13f4a445f64b69e8d17a220da2d3076ac1c5195fdd2da0b876448368caf2a3a1f231995a3a18dc3c67a3862d6eca9c5d8624302dc5185f2da52b2312d9a87fb75a4d05080b0e621c8a1a892b7b2bcb9534c16eaabcef077f499b1597eaed5b41d930b63b8a6fd635092ee6b00c512cba216f72c67a45115bd1d415fc7b2848130632bb3098b39a6c5a85e68844c429645e9ccac46da3cbe66f82b55467340be8fb677a0dd6d2791e572dc49a4537902c16310c64fa30f08f3c9441f9313d855a9e1437e5c02bc5fbee510bb32eb4d4dce2529b06ca301f6a92c968780f9c1a868164bae7e15bbd769dd6dfd4054f0ff2cbef82c4c0705bf2b753e2416aa11451365afaca77d64c6c7b50670afeaa82c6f42fa8525e965a3f47832c656b364b3ab79bd2c1a89aed74bc004a74fb9bdd262b6d1b9677243e5cb7f87d7977282dafeb31cb88d15d8483892c682149289a49ea12055146a8ecf3691235af9f2ef9b7e57520d849aaf20e422faafef760504afe78eb2361728c5f408b3849c17464273fe9efc827e76ddecbef4fe8834b1c07229e8233cbb5c7e73422691faa383fe0a5c89c469b8f16f62d6932b02961a417d2f002d30a611ad110a51b2440a0df249d5eb832bb80a5dbf88263fa8f58f0f0444a9f3534a11f49c3abbf4e210e2633e049c7f9e581fdda2ffd24d9280f55f47aa32e52f6215135a48d05822b4a09914850e44c8308d284b130ade7cd9c8bc500b64c59379daefaeb3855a10c377a4209c806b54713079d742553ff02df1b921f15a12693370fb33bca9242c7fd9d3833a3d2f7f3f42569b4b157cf668e73990d1c5bd995f9c4b73e37f2919591776c3f8f10e2ac5fd100240a40cc4ebd5712d04269ab6930c2b02b4b60369cd487e88eba36fa715a9b207654590db11d291b55938a10cd8737ee3f9ab0749d5d4f147d2800bf13ea52051096117abbcd32ed167eb1ef3350eb1b70d0a4710774adbe20f938a0d00bedc04d08348e7940895ccbf930b39195703a546fcc18190d95670542b21f0a3ee8dc808a9735771b6e7e9bd4410145ff73a0e859abb8df3ad0b2b5a9821d90e76f31a096c161b9b13a7cdc3fb2c4004b614d4b556f1de915a12cd0991a03945afb3b77171fb8395ccbd0626e23f3a5833ea1f91242a15eb267f238fcf59200eb113594bbf870768bd2ac0f35869f2341378d06d394f63a3107803527b973b115a694be19553ca0e126c5452a7e3ed7a01a42ee3e49f9816d83135418d49a4397578053d0bbbcd9a9dda98d67dc3c144c0950400d36e2c7cfcfb63efa20a58d4bd6bd36d5411ef3399b88e1a9c460d775e8b153e1e8854a75c9b6628ba9ecf94700495ebc59e92c558d866a80bde8d086dd506eebb6935c243e091c2d5e770529cb0c49900a4e65cf054eee028159e7f4e51cdae7219f7cea74b157156748325b1dec223a40c5b2fb99d521ab71e7497938a18e8b8226c9b07e67f1f32588135ff565a54407fbd669f07b10969fb35a883dff5b54346160235163a35328bb6ecc2d7cbfc17e7d09519209e32f0bbf5a2310e91e3bdb3170a792a8ea55bef49ae44814bdb72be88919518715dda2aff276f20067d4927d2d1af62495d8a69a7f0412de599893a93f41b99ec04e106c20a589b73de4c651748508fe95f45266a832635af4e96dec8626cca9d018274abb0b6aa5f685e204482460300c553ccd0e04d42865d6ee2cab1b7526da54199234e31e8b04ad298153440cad9ffb367136362d8f8b334449eb6e6821b92fa66c74a6d163571cc2c363c6dcc003732b5cd103478b0cc49c8fe29ade23e556fadd700b73028e35f9252661f3dcc4b9de9f1d0517f70139761af43965207c55b0463e7de48534cf932a33f6f356d28efb89980694837922b8f94df516d2181fc5555f3d0dadf2a8b624a147c129606b88b930414ef1a2703b328be5f22d832f3f2822478fd1f57e13823cae7fad968e8b37bc90759a3f98f15a24b172ed02cc28f9650ded23632fda2df4d2f5fbda83181768f90c8bdd34047aa5f35b233f5488d5a0f63b369d48dc3dc246dccb92add21d3c1a315641b51e0cfa1e8f5d38f718e6b559e620a753a1a6791af16b0568cde77fdb4897010215899e498bd086d498599e42b023110e70cc6d27e456db732f94ab6555fe2eb3c19d8436fed1cc104cc24cb3d544184dc582ee7e037081251be0fe759d00e7859db953d5019a29a4bb72b477ccedbd80cae763d53932931950d8a5302da579d34addf533e02ec177c4a54059f65a63e7158293a152f844b3847d28f4a42800d35fbe50773af4cb1f306b4228082309d58b01479dcbb48ae9362e81789a26c29483ea51ce56ae0a0d67c8422d9ca1b7d77dbdf7c2ebbb55e0f8da227d04ee4263c15ebd474dc5a734f2d679cd4821aa3993b43907cfa135c30c738187b3af30e822c785d248832bbe3a7cfb3416f913ee158a83fb8bc9598c074fce7f43a3136fb4e31249116eadc6cd6a858a17b6e9bcd381b2ce3454eacb4a502b97deae7df4319ea3c2cf3322df4c54320f1efaa5da8090d27d88e35bc2c299b7a8c3f741f5cddf538bbfaff9583840490a900393d73032b0080a3f549b4cd3327bfe469292d01e33e180083d08cd4a16436fa6e843789a7eef10530ed678189ec7b505d341ba75e4f58bf7275cd9aa5bf959e8f4920df13e235a79c6828b5ab7a4593c926fa8fec09b3986a07787404b900ddfe5355e09b30db88162b9fb0a7b91ebf045215148f85a010fb83e73514e620c1b8006a868dfe64208d2ff90151864525551e8e0c0bb2916d49d3d17e1c11353102911c70422c49fb95e94aadf0bedb4036b945a9b88de7d8058fb31d3b9ba760f9bc03ad68a7b5f4b91d40d34596b31d8d70c98dd05b07c604b22cb40b0c9204ec61e9c90c1ba97c89d10a711fd83bf2972dbc18a90bb49a70bd80aeb315106053f2bbaa68114cd3c9c0811a4594641e68dfcd0f5780b0f615e382fedab7b939c756dff9763cec064e4390ef2df727a65c684dddf63f2ee627f06f9a27c38e197f213684c2e139bed96269708eee4e1583a783ee4ef0a5b84be26fdf28337caa9697822bd8fe0e6d328400b22869b3e334e091eb2cad139ce650a2bddad2eb5d83ee6ff780f64ace57569b6364b08ff8f0b548b589a40d8ba2ad31533a6a47d771e41cbc0d8bab848202c199ead2162754bb6c80b0ec725f4147adcbc598b386f18ab58db8cdce4633654afdade9962bf2de2b1d8f2830431090c0f59a01e34c9166bb932fc9112efeec17f1b08ce75efdbecf23c72a6cde1bcd7df1d397c097726945a8c18323e50665a5431ce8b43d9a013c5f1c0b4877873d6f7b71b850d38a45e6428fb9d8bf29fafd9abe8883423171125cb1655ebed15aebce659084bfa92410d1857fb4e73962ca8e88ffbaa3fef9d4ce67cfae76fffdc36fc63491b4cd2bc204400fc1254d8dcf005fb367e68b56fa4e29bf0d25b8d4c47452bd0de84caf9cd19c4e227d46e756e1f3f82c4db2047e7b9a37deecd40b2e30d975e791de35498d7cade15b5b1cbe7bb404f9a1dd56c03a92edcaddb3c4f397b98c3ca7b96c56714351ca0f89f4aeb04712b92e6ab204ba7538602a074c46babe6289f87246dfd1d1502c54230b534e5225a8b06ce8551a640af3cce758a33605635ac0452509d3c7a3fdd73fb89d9ebf33be340bde98c9966031b05b963ae20677bfbdac58373f17a22a760af5cfdc9ec3c9a4d8701f7b8633775533e01ca6fc6a574aff3bbbb715ab97c1f7906c0c02abcfdf04372dcd92b0c28a7e0254555965ae8379cd96a5c5f612fae9a2afd201822a295dab1b7ef526fbff0444f7093027e1a179b749785d4642d22136ceff8d219ad81d00db10fa1fe47ad14ca693e71842abc2e13593bbdaa3a4f8277632263e1a70d5e0878f3031094061f0211ffe5fedfa935a7218c3c747267671f6e2352c6ce105a204fab954af1a7f431000479bb5796c8035549cc5a86f4cd48d2c1d5921c5fb11d1c4dd1d0f43577ea249baa9b3d47c26243357359e70ceeaaec68f27fdf1061400823fd53f94e3a35d84751739190df9d8f71156e0c4b5d2512971d8fe9cf56d7819ff9fa3d98a6778cf6b82ea8dd7f938e496d1d51515c3ccb92f21e3688b011343b401cbd07cc7ad59e9549c848313aec1af8ef195649e16574d1ac9604462e62d2e2287dff6b353631f16bb6d0077631b4bda6174192b45f6cc78ddfd466ad5a2f7408e4ea8903c02dfd9fb8f7017ed515eb1b4f2c329eaf1c858c2d1efb01fb4af3e6a030fd58644631ab48e99c58e537401bc11bec1a6c3354a5c70daddb1bf2dbdeef9b3e3179b514e98ae74d372be6aba7db412679a223614df167dcda60b605cca5bcceb47b911298e67d330741517f39cbec834e0e7a74021da2bf1ab6104672321921c949b1793a0ef983014ccd79c4256da1d25f4ec3fa4e426d2512ffaf89929a786a5420d664bda8013454c688ec2949bafa6aa95c365ae7500b272e0781feabc3ef8b46a3d105cb3b5da8494b9ad491c434fe529f3d50e13fb237c4950b45f898ae619059df8a052a444e2adf32f74010bc50027da5c890143031cbd844c56bbf6144dd8f2f171454455f4e89c7affadb9ee9d3932dd26231c09312a64715c04292bc9f8432f7c59ce90fc77d1c61b52d23d95e03851a1f3ad848e69fba8f2e75573771363dc8019e7a738ca19a6eefde4664ac2fcd02ef1c9eaf6688fc81a67c826eee11005ef2e0b102084e151d597b30058aad7576b4f15763b274793813c94c3fa91c92614d02ef352e78fd934cbbb98eb937efc7c654f26de5783827f756d8895934035f1a8a595ef6537b6f6085319426d25252106c2966397593603a78e035a883ab916a2235906ec5e5be7291c22d1388bab414210635dd3c28720581fc7daa295d869135b48ae61e1052877b68b0af37a8f10d20cdbbffd266c6e136d19df2da9c731b2ac586ac09b540465f9455c4d9d3267927af8706130328342f33a8c93a5d67bb059b0da2044386e3357c0514945faf386ef9537d19478193acc7c50e32223a0127e4a580e88a9a74b9afd4522b3821b19e368473e0a69a9681346a35f216e0d078945fa78df03459106e97a865bae23d58f33454199de4f116935727f86d4dad6ed4aadc1a2cd87c2b49aec1d5a860b47e6afd2fd0441b0642a02f40431f7353b8a30e72c9738fed9e6c9f453921a8807b68c3367ebdfefd4f04a1688f3ec089dcab31c6f6d736fa089f629ca89d6b0941a5e54a7e49ed09378c910f4fd5d45fae249da6471fa3bccc2ba3c7a51a8ed950d4267292b1089787191bb13962296e9a938f0a264d8a660395e1681e8f4addd59f2a02f0be4cd2a6d0349868caddfc58240bcb2621d2535c8dc8891442cf431bbe0d001a828df5ce4bc68e9bf3b0f00e09d06b0538b337e7832ab6e4465311fb7b5c17043fa074534c5f11a79cfadc77924732820bdc17f8be0aa85081f9e190bbcfdb0c5364cc0ea8f98b6a4c1411f8165f199fb71fda469e9a4980cd55dcf1bc978b4eebdf8752604d09853e2f6a3839dcf1594fca098e8704fbbf4942977958c171bba5ad1c121ee848853dd8bdc0f275c0ec7e575935de39422d46184ef8b922e7741848440e3d8052e6a1d75c09758aeb52c3301ede6996aa77ccec5858d218a194ba209e420cc2db73f9325af079abeede65c8e34f247dd4a2b0304974bcc4d85d7895aa57e5755fc1ce36b07199b7155a1e0eb4f8a3ae8b35d2a5f38c08d60d6e481a3706a41bde1931f82e38cca44df2f327eab0265dc79e29b76a2df9837ef9eb97646c3fc3b50c679bb9e63a5b78086b6e980f71d490a91d7cc830be879e2cf3f2974c85627dd6a80bbf2210dc60029b5bc497e4d113196dacbac5170f1e0437146026870af6b744396628ec3d60a13963039dc7e35f234a0dd13326a7fecb2c28d2910059207e088109b7441cd3de1412cbc8db2eeff6e25f6bfe11fe03419845c774d5c4ef5db388803785e883f0672b44c00be33092ecec16e6debfa63e6cc7db3553fa5736c140200fb61ad61fc44884bd09b028cd5f09cbf31a049b65db2392e5f4de6730df285aa61ea1f8833154c020ddf3eb13edb4c9884fb5e86a77b5ece0049b611666946623504077d8bb33a3a78a1a95db0a17ec5acc879f49ee247378e00eeaab4d87d505b418a746234743b530d48b43ab0d7b41a0f89da1a3c411500cb2ad408c7e66e2cf523f523c9da0300ba216ec6bcfc849dcfce84839feb4b9308b901658f6c0314ec52316c2f3a672367237640e55cfcd18745671edcca715f64aeeac57fa13979725dce8bee259199258817e757844abe5ed4430f35500e84eb91583244401d170ea67e469e1ef836678f1d5b48326d13fcec386d0a096cb83d96efc96b176c92fe12de186f6d2a8ff2bb2942cf9f23530396456bfdd393460e3c57d60fbe10cd9d74a6fb5595521f2f39f84e5cee530900c6d499d1da8f5b3887cc918290aa597a1b89633c4065155e3a47c6a47e0f22a1555ec59275fdf00e273586bf271c8c54cc02b4ae9c18c2be4426082d086defda727240f318d56627015fed57a5f718ca2182d250415757554f097efbeb2a0fe6057d0893109ddc1d49a80a359d942dd5b02cb4018e6398ee82628194dba6a4e0df8ef0fa54218502f4bc0b97e94a1f4bdd85084fc3559f77414fb8c46ba8bb403e5314700c46d5835d6962eb5fd31053f23a66edb584dc5f17cefca32d43073990b7ccf4466870a5d155bcdfe9c044953841fe2a5e32a48bfc4046ba3289b5aa7b6f0da397b862f9c3601a1b11613bb0156f1fce4e5d016b3a5e17823f699a2b49cb00c20edbccddeba64b28a8aba1d1de7c6a6f82ae1900acdfd4b8b8b24e485363023efb2ea9c4694e2470ad6ac0c0e46098194326b9f848340f57791d034c769004ce0b8c0470683359ea9912ed9c1e4f0d3581b57aacf93a830c3f0478c56b9516323039953772132c640c93941ff11d5301a59cd5cc7f7b3b15d0829871f8df64077dc5018160a3d7630d77080819852922391656f34077dfaded7ff11122c5405d3827830886fc7281318c37f7fbd9aadce30f4b9e0b21c97fa2e8c87f29c0152d4b30efcdebf8df18b58ffc358a196778ae4192fa154914776eda6326a7b51c57337823e34f84d86899be63cb28fea31504c26642628b4cfb8cb3d22c40d35d55c3068536a2cc1368069877b1b9c66256fd2c48ef4f8573d6b42f8565d3024230ca49614b9d40b54f2a16a27c8796611f8bd9ffe4678234968c2b24530c56859a3f8d6bf709f0670e4b0075e8e2bb6c18193be884b023475a8b64e9bd0b206c99ad12373e524e340bf626bc306f4f56ae94b103467d4e43ae72c9bbcad9e980b116de1efab76795aed9dea42cf2cc4fa315201721e0c9a6ce1dc2f67bf1fb4ede2a1738fbca89615103e3c98a317a99ac3a6d1f543e937562384802b7174b4ba280285a72468f21fdc00bb9ed23e6718d69255efdcebd95cebe3eb66df30d6651e8cb68b8629547eeef69d9c291e9e9ab3011900c2580930b3d09099fd2d6bee4003dca57e7c24fed0b89065a9a7f55d9af54bd5ce8602d68efff3b8868dd231cc40a6b89af74df5914d7366058cce448b57ccbb557e0293a78fe1b939bb3ef734dbb79df1678337a5bec16ec4181b1596634ee1ff6d2c82367c3c18f1ada78ae99b052b1439b07423d857775f668e3c9432e0e5ead025b48f77da6413e7653b0ec8b7c0d821efd8732e8b20684203d2d2c455087420f961e723db52e570539a254af93ca16768f1f695f86832522a182b985fb53f6369fed0ba00f49df6f912a3481e53329bc482df94067da172997080b8eb6e3f00490354528d6d8c748da0454442ed859df12d19ef6f624fe9b451138560088503d9e44707890cb523bc1cc8d369ef522e018eca8f03a443dac7fb7bf97bddd8abcc0af6dd7d3cedca9e5cbb5688037c6755da8a1fd65b998dea3339a17c8f32438c01e529b543d2dd2138b41135ce1a984ffc97110624942b0280dadc4702eb1b4e8287a9a6639d400a4eec139eadf300533f3e70ced256522f1c772bf0f6e861dde38efddfafe0956780e3853f0285de760df8023378548491b50998d441a742da6353ce25ccd0813fbc9a2422ac66dbba0f02ea1ce31645dd55e4874809e6f09903ccf403b8bfa2b88042b476099639e799965478ab48bbe804a82adbc9220a985fbfd95c53a99f3197866251ae100b420c3dad8f8f24075d4beb9f2cff950201d281751b3057c8b11f17bb215dd24efeb482b6a9d563d9edc2d9c23d64403188989087c502fa3bee5a90376de4dee3a4b6c66a36aa7264c1c84de874208886ff972a7c224dd5a7ebe1b648b3e85de3ac8029c11c87364ef9e78a14bfeaebf0e13700dd4217b359ef50b6bb04a08b75723d90c87c12f62a65fc16e42ea6069634596a2549ab1898481423d2b6416ec3c1d67e364bed3b36da6e43e1996e3101af740172bd014ffdd88e7672a71a5372eb32b56c4cf2e77f2ce5175a6bc90d1db6a4c42c6a8782e503c66a278eb7ef5b5b1ab1e5a39dad519cfdbff51e2141cc472730d1f0f414afda29ac1852d1deacd8934245994871c7bb96c57ac818be4342e6ad651e6cbdb84c8e61c6ece57d0ff8e1e12dd4aba31bdd330519110830957de308bb417135184c399c8460e3fe1872c2c79046a1c0fc7221907ea635d77e1268de9e5b93cb427c6f0037644c4fabe647f43a31a0ecb372fdffbcefb784896ef139596ef78b5f221ddbef1335e0ad59dfe7f1114ca6c051c0b851b82d5dd22323230e2c91b8298424c08584087d1961b43d7cdf10cb236f66ac2a3b8d7876bdff888ed2299e58c90b7f203639bacc8579a108e2ba46f9a09454c08a189c549a1ed2c4675f5b31943d46602fa399e53cd9b091604ecbef4f5c1c164026caa87f59b062cea5e232c896ee3e97fa5a0ef17bd0db1f30d00acf8489deb1fdc67a0390176f729d2884cb2d7d8f5bc9665b28b7d0d5ab5879edcfbd5d02f44aaf12dfc841bc6ceb42ba11d41c250bce4cb2d2a18e5d97957440b5048b2dceb83df6c394d02708ab9c5f78dddc1f95de5acd8c911bc6e3d94a7f9cb7e7d970052ff984ec7801a000d48765f2f570bc1de03b14a16002ed74946ca190205e126b156e618604dc33e985470bbdb876aa2d7244bef6c9520c8a57d21aabfa29b5c0d233c09a482c3aa1102e31205a71d68a6ba19b24d00e3275d88a9723c741637682aade8dfc26f88e8ab09a5e21cb825f4e569b267e21f40a810a96e637d8502ab1a023af6b183d15f6884669ac2688cff46e38332b209622f1b8973f7456a8e2d5aed7606f50a58789a3f011d3a7e070dd34f6d50f814089357791b1432b1f05eb4da4843b5844c7f06059576ca83ac62517dca152cf7a22cd9ca245019ef4402d3e21c24527e4b63d0d4a844a02ca0ba518b3a017e0ca617b5cbcbad438c46f59d4bff39b10d2693dde35ef553488db02197cac53096b7b34fad1ec38c376622bb725c585439ff69c2ee4c335a30d8a294f17d35f29caf80cbc79eb5b17b1d45f1bf12936becc843f0caf1468be6b379d9df754689fd48502b4f192ff8c0a283d5928a90c80fa8e375e4e480d16360f0845ee625fe3a1980e78e58748106c2d507c02b677361ceb70c96119e1e6a17749abca405050aa02671647e60a54d67cad9a367ee5957cf216dc53a445bc93948da35f19356d9c3fa3455b98c55d0d0e37415056f2f089ddc3934874fffb96778afead45f05e69d4279d5925a283507d378e9cba6ab68ac9796393e07988003d33995fc9dd30df86ec30522ee94bd0c91be15eaef43a53f244c946bb42f1ddaccee08524c8042acfe0d3c972e82ccad09fa365ff34a26bf486f91c697df937529f11d7df18dc7e69292b046729ef5dce4af185e4623eb69115d97039bfc8cbed67be7714e6d32439066afd758b48d56573ab8880eb09e67fba18a586c78923a04892c027656846a1660665b8bd19418fc3f5a29332b31d844741132d48c832b1a40da30f813f477e53a477d431ede9a209a0c3c4d175c4565c917094860b424e0c77377a796632c0c5af0c33703d737998537249d192427ca25fbd6d859c8f27255fec26d5383d0c4cc3352f2077f4d845b6170e793e8c71ce329f0e70f04b3775617c3b108776c375f3da0bed232cc8ab780f6bab4bc4f766e014948d9fa5f4ee3d52acd9d8671e3d91ad468f07cd1ab2ac397fdfe618d7b4c313dca96a7b9e22db08fd83c772232073d8e30e45049626873a397f1049ea7fb5a2803313347d90a3e3a4655fd53530160f66718ec7bd3c1393c29033605c1fb249b0c1748ef64ec6284d439be2a9f3ba8892400346c285598291307d3eafc8f1eba66ab7c3550b3dab99e59c6d5183dab292ff9f82d2f3a9ecdeb024b981f58e4bf88140bf213a436c804c0eee42cf260f0c4cc3f4e26670bcc3392d32c009a89d8b8baa4b1554405f183f930922912725ae31fbe19556caa343d57814b1baeea6c54d0a1da6a7378a61ad277960199a061f98333c15991be6da1ad6f0d2adcdf2d8d5a9ec900f706d2ba19db54c1d39ced6d07c6a173d3000dd445c669e0b2e1817815db92f4c37f9dcd580cc6649853565e3fa87173bc80c120a6b80d69976b6a2a0966324061051ca9cfc4afa7742dc05cdd4e9e4eac79558eff8b0707ad3ee9e357314297b43aeb69f03d0f2c63f864b5906f6d423fd9fbe80ec31f85d1a648aea3484d8dbf1a8522e3d9b5b0136b2c7b3358091035b14db8c1c3a34b3946a64999c074ea5891e4720a098c940a615493c02e9d952891cb6cdd99f862a5af9668e924d28d9c7f4175e200dbd35336c5a58b264dd9482c34638668aaee3b7489dbdf77c493d4f8d522a1e2db9c552b5be874e9a1a60ece9754c8fa61225f4b970844fd7d3c8a579d1240ec5eb2c1b704ef48abd1d78693a65d165677ad7bc6741d42db2a0531606e288b443b3772c2a0b7b337782fa55a445ff2573315595ca67f8ace0c4490746f222824d0f7ccc683a0a2f1e32e6c06dd8d2141c0614c6136e38b36036c6c67ba8ae6eabf383fc5fd63b49bfe41a898fa759b52972ca20076dd7472a18856e56791991505b4eb5dccd1a42e678123ce3a887dae83bf58653487b18dc2813d51dc01408deb9b1b3a1ec81e6e668a881dd8c30a41e4ce9659bda3bff2d1bb21ce53e1546841ab49695b4e70107a0c5cc8e48236651c251133b8435a46f943fcebb760484115cfaad7ff60b0f100a5c6dc6d8a9229c81cd6d8e6fe5c6d2580bb157dbd1c89e0e1a6279155821d613ee373d91cc29d25ec357b66d781f1fbdaa33a6b49eb9abc731251b8f5e17c3b90538a2343689db8e1bad336f8b5ead22ef79630fdf1c1eab902e3c784ba2797f1e8a476253467ea3084dae7eb20a847cf5f42a8ea1ec3f4bcb6ba6f63a5eac1cd58119d4d4778e3e02f32175dacb18bb8dbfcc73e5d52805c53900ae8d56b812f6ca1076904e20acae6b7b09a4f4f78f3f0aea2c59a8fa0e3d637f2e7eef43173b07fe6afffccbb86df3d9d79a02587fd7cf5ab8e1a88bd7cf823e9d9b415002c7dd32abddb15601e4e5d85f38e0e1b96c247c41ddeb2457cc5cbca24f553589d62036d9e9e2ee7c6c25473b2232837ed37098dbbc20946abab983fc942eab381ded06f4cf4410a71b6d7bf1df5abead3d9a7a8b744c50c4f9096d0ac1d96b6bc5c56e95a6f96e17a40dfd5795a05b74f7d9b5a0c09c5591cd364578a720fe619250bfe826b373fa83d2b99a0ccfa8176d21b2f9c0ab396b8b7d4431adc8aa7ce85d6b61cfb220444ff691d6154979e0fc371c7f7b9466a71305d6edae6cfd5dfb17a25d4e2a0d05fa10b905167205fd30b3a89dae20847a398c84e3c56cb766a2b845b1c27797b26ab21f8914a3745a90618a995964fe670e0ac4f080da7801230d9710e9d704a1432a2c7766b1b0cadf3236912747faac2fe7a9dbd97b9a5cca60db7e03bb33e5b3ba9d1b1532be89e48e4582b95c2083c00110f66935248298423e745c2d02466f1ab912ea8e97e3f1c0c2d26f27ff20813082e326bb224b10cae94af729e05c94802190162fa69fcccb3ea9bc8953f5549fc8ed57865622f8c81286c95aa0ffd46fac46980a21ae47f6f3281469d99a27da782135223fb1018988b5620bed971f90045e0739d6c3400a6d90d3a01a5b14b66c21586c083c54c5417e9896959099ad93ec5f9e390c80224e334abd45793cfdae4c13487458dd2d63b9d264ef51449a456e0edee3ca30335504392cac5078724221a86985f425f2262e7c851be1d2e9d54954be47167de8666bfc945510e789c45f517a6bcfe15d6e53f45cdd03bcb37c5a53323139d63ee65966d3d05b7ee5e1df4cf893a8ae3e741e786489b03534a62070eeee522701494f82a5973be15688e3d7eee59f49ebf759f9227f46d14a0685155433c96624b2dc5a241cd2383da513767f569b0bafa6496326b9f9ac4f59888a14c2f4c9dddd7012e167c5ec09010c6b5475930b2aaa921eb708ad830f92ea6bc7d81c1564907ea950e31716f8b4b99e375f6d83a93b1655c72046d0aa3720498ea6338f53ffb4063da6b1f746c113b7504ed7837dd18f408ebef7db42aceb929f58a756846901a26c4d30bccf01521f8484b4d47b5315caf9935bf89a894d38f71a715a0994797a2a30ae0cc9c8f89ad30f56a2108f5b3fd99f91720b660b76f774139460d4e4ca0d6f863fffb674c0a0374e91656d52471bbce6296506bc2358545d233f58082fece0be6703709f3810b942c591c458bc06cb43ca82f039557ae3fc28906161d801b141671ec156e94a123bc43c94af17c91da03e98761f2ab56e908b55d2de4694e7d59728b1e467202db1b3c56b0b94e00919548bbc3baa1ade042407c71be79dbb7090e5f3c44c65e8eae6becb4a8c78e9bae44eed5eb2b7fa58ea50c584008ea34c5fd8081152247708f927fae7bb37724d830a17559574a6a7470f0df8b03cee8e4a01698fe50648b491608bf15e9c281f9c6b44e192c8c331486c53833a78de37a286fbcb0ebfa1ecfd41140c4da4f1bac5d4e381bb8a87c2784e231673c9f7dec2f1e11669059e1f92d64bb46f2ec400ea9cafe75e1302bd003fb42599c82c340a5189d9148f119ee4861391f52d83efdff7ca4c1b5a110d7c0e46b4b690400ae827380312002b0f30671d7ace389006c56cc0f224f525ab21fb56182004dc1a737cbacdf50880688d7cf695694b9ba63e0ab4de502a103595169e13c629ca091da05326740dca2f1db685c210f009543714eb252fa5008953ae0d0b20d5012e247a775890f9995a036fa9182da0a43bb8b768d56f813b82a196ae965a138e9aca55e423727c52c22f1286adda40d75c17b20a383a69d5b54d2e634a243cc692b5ca0ace278cf01bc2746f01b2c7d9820ec7ea9680caf37e0cb37614558a1920992e818a1773b8812c43bd6cbaff16a6ead2d969e4987b75b3e61846aa9dc3b57e525cf3486921f39f8334e386dd2fc1cef7ed424f2e07bb70d4acc613bbfe2a2d768356ba833c08bf027902cfc5dce66e0881bd7c9c3cf36c583f6b2b35c2e543814fa0b4fde445fd1a77f78c0ce897217dcfe285887c5c14451379b4d8d04ac6b4b22de4b035fb0553451c80d0b059a236926b4d08c6f2684514fee351d321be4906bdb9cc240bf18e0f3b3a72e7984780f15921fd274c129e3d934eace595d5c4db96cbc4ec9632626e67b0a412ad74944e0af1511aa6051a738336850db80c407bc46c59b0b659b2231bff3bb777a0c689a73b3e00300a620642d395db58e39257fcf2b4337862cd715a2d92328098c801eafd83a993916af2036e0e36f0c1503d11f8f8791e3759b384d52ff924f5b8a92dbb52df18a741a7cf7cd9d419f766ba4bf54c945dd2ca53d1de38c6ac7042a9843f88911feb9dea0fb85e6df69f554d4db1ca9cd06c1d121e68e9780048b08881281c72412d10f836c34b8c269713efbbc236fa5a98afa23679065071a1de856b2277bf0123b6963c976ab8f06bda5c2021dc6c9cb0e04a8ffc417867ab56c7c5778190d6f314f182954921c7512b0acbdfb38cd8388ac0d958d47b572892b4d6b49803d361cc2027ab4d5575b30161aa703daa5fdc79cd21f970fd93aff8749dae2f5eaccb19bd6464d2cd404498899a86a67910c10cc63eb8103c6370d18f47938198de64b769873db7bdd7b95e8c3ce8f41b3eddccb9c6131c6ee9bb4b657b62da59432c9240333055b05880528e9dd8c50136551958e465d4755abf69d88e7d13bc76394af37aa6f8a3454021bd5a95d5970214c0ba8f8436cbf3dfc9e9e2c5fa73e7d29ab8c55d28b1ac94769282b29a591bea43d24bd80ce9092cd3b82fb4df6fcb6ad3b01f7dbb7013ef864e7958b78a6ef4474e2043a4878b20508982083b9b07db49c05207421be206b807a1b58e109ff2351a746c905d75bf74d3abb7f6b9d5b8291a6e79c5b37bb0e45677347e45747ff69157547f351daa4dcb45f1fc563bebda51853c042e64b211572dff446efdd911cfa0a8bc9f6368c58fea6f994eb316350c29af1448b26943cd1a2891e967f15223c33f0f90af9e6e431ca9ce77d38f97a9a10fbf4b798b29e8ed6b4caed08a777a8095d1ec953fbcffe17df3b9486b2a88aa2d0239123793a11cf134a1ddb51764f10bff6b873d90153fa956e9805931efa9cf56f63939f5ee476dd35e77cdcb7335aaddb36ed5ead43b594489ca6ddabdd7befbdd7391ddd52766bb756192980e14e092719ca9480225b41b96a5bacfd341277355b2ab5944a7734e25e60a93546aa462a53975cebd6fded607e74af4f28e5d54ef0c6d7377793f7de0ed5522271f7deeb3f6470024806a141681a39426d8ad2a7d633751ddbb00e9b68929102dc77a382e374989ec7f6f55bba6ed9b6cec6762e64930c160883dd4c3468c4c9416dda7ded76a8cddeba6d9af6d75a6b2f912379bbdb13f1bc6d9b565d2280f4d59065ccd0be33e47accc89af7d590ebfbb4fd686b573394f500cba90c65af9e7c656cdab6a1aeb6699a76b5add6dfbe7a6f1335189d7b916bf562beb7f3b1752e71dfc271dcb59c0e68843bda4657db6eb7bdc7dd402f36ed9dbb815678378cf5ab3dd7d9964e96bacdc3a6ceb3da0b3611779daf0a1cf65c72c0bdc2a802990127e3eed626d2b9e585d48ec3de0b1378f4a648e3bd9264a1a3c21636a830450524bc0440d35a3bddaadc0dcc62052e5688020060b421459ac0a3b7dc8d0df9eafc36e503f97a9f0d1d77633d540ffbdbdbdf5ed3bcef0399f3b1bd7d530dc0f655ef6b53fdfe5b69f51aabacb4237d3a28c8da5fa8596adbb6b5dd02207d3564cd03790ad91e66bb713e36af7aa698c29e0b0970ffc5319ad2bf2d1bee603cc134439912ae5cb91b2ca264fccde9a0b96331459f85bb89b9615d231153f45f5e80fb47ff35ac8545d6e480566ebcbcfdb5dd8d3473b3db662d8c6d7b6bf3668938a7bdf6a676ee3b3bd74346e6bcaf6fe337d2dc181bd66ced5e9cc0a3ff5497bb8156f2f6d7658bd2a13b8430a4af86bcddbab1f0d04ab665c3787bfccdbd80b5fb167537ad23e219722fb0dcdbf25b876a2991b88dc8918cea817fbb9e2f8ac77dedafa7bdbd3060e0c7f885ce2778e3d6ce250418ca60b093bf6e41a637d00b68847cbfd6edab4ddcba4ffb0da541fb95fe23fdc7fd777ffbee50a5fa28128abbb5356b5f7b0d66db69af79bd6dde5743bef6eba659cfb4002e2ebc814d59e65bba50f6bdf57d766de3dd11f1239fccdc7fdb7fb74371a80d75bd9b11aa7a3723cf363ea70fe9597b1efdf5bd7e7cffce91eb2123bbf7d5902194b1710f4e18830b986e65fba28329a65e885bf71dae9be25badca16ad503e91ef3564f9b1cab5d1fda1cfa71e679b8e8037e831e6db9b4faf42e6a49b75af48ef80d93d098dd8d80438c50e4b483e28b1c5b7281fa6180581859664af7ee9c0439111778595b5f5a70d1da308a6b5f44ff6ebd34c3aedcfeeab91a77df9cdb72fbf2d4ff93d6af0f0b421c618846d112ef415eb4f2915acf1e564f93045e15684ce0e4289889f356af4cc67b37612b423c4339484684924820bc5275a32944488276807cb17cc92089ea4884e1ed806fe402248f40343538112e56d3816d41ac4850126ec00f4a3fe800106925919c67155675fcf4c30a6ff05c6d668686df49c4ce4400644348df8ca56ffa0293f8076c41c3295d7ec88ee49f891397932a5ff00e22bfbf1eb99f51823a61a8ead55613aaded01feda955df2a96bba66aed92ca552ad70624c3fd1509110952020291b743b93f940257fed8a2fdb0128c71c93bc62ace0458515b68d6e38601a160c79cd10cda75c9822254ac47eaab7291d12851a5a43faa9a189bfc91f622dc6a7d390c32113744c3de8315f575002c2a3601b9bf03ea78d1b30301306087f3533b88f926827baa4245abb03cac4873ca6883535b6060ad89eec0f2a9df604f8ab19e231fd355e534382027f70486e35a959cd0fa4b0675aa628ba49244149358e548a04b271b8ca5940c24b45f0cc84865c4229a232c5caa24879f5080dc921e0afa65d3cb359d1d73ed26539a610dc87aa40ca900b3950efac78fabfaf86a484233e4e5c7ecd498553d26dffb40de04c7c1cf8f8509f1bf00cb1c66257515ad338dcebe04cfcef06c6140f814b03a8c1f874f21900bc21e7af604a4a947c6a284ff26421cbb44fcd88f4e9e41a01d0e142183824c30f22a044893900b6910ec099f85e080509b205fe3ad6b15893d892581c8d6c744c01ab5602066604f304fc75cc57415ea5752c6b50e853f1ece42e1263fafba7e02119c426dd6a75912131154f30346428ce0084866dca13de64cfd0241b049d2c0c08769c9c92ebf5721c89c594c964326833fda403fcb54ce6bd9cc48eed84aaa178116128eabbbb7b7dbd5eaf94af7a68e632ee072ceb3ff54baa6a5edd15251fdcdddda1c5a7af77ac75b5ab5dbeb2a976610b6380bf8e31fdb28fdb1413951c61518c355795f255bf9cfa74e9b58b2405fe6a6a5a7a746f52149504281831d10292751e9450268ca03f9a08720f5d50e7a1072b343294f560450f404e884ea0c2041ea0e0890c6e60f566a326870d3efd131995a16c0923f2979ac921b8504a21a41076d097b0ef6ee57b7ba4ee3ee5b455baa68d34cd8a6f948cf48886d2bc9b116aa26aa4544a2a5d3a95fed21d86147dc39a9318d1c55b4aa7d2ab57686b317e5ea9476b356b4b309b224da9ff3bcae80e674bef2c9d87fff53775eb683d81983061c2d382185798306122a3ed3884f8b3a18cd834bb7b18ef5cdc3b19ef849d619c52ca891a69b67653da14c583feddb68882fbb326c6b88d987a810d188b80b36c6ec030c3a78137b6b6cadd3ccafe1746aa466a6ec132850509d8747a396501830b18516889d26fe094b7da4bcf93d2b74f6534713ee8db911d691be9abc0bcf1f6f52be56f994e38e3b0683946c51963b7ad54ba4777229efda5bb741f3ea5e73e584287254af32f8eb0a1cff94994455514950da1774b1ffefd33cafee620d0b03d1ddb3e54dfed16b7dab9ece018bde97d2d6fe4bb7f7c53d6c1428e9e7fe464d4f197288fd55d4e18638d95932fbb9e9bbfa987c6f9883fb91eb193d287bfccd18b107a3dbb31ba20aa8243952e9ca8d2851745569cd301b3c8f4217d48e5cfd97df43721f42704e8d499dd4fdc78b90e04513cb1418e0290c5791fd81eb26ce2dd9ac5e23aad85931bc0b14b0bdfba35a7a33efdad3b32df8611abc78c017239dba556eaf6ad4971c382c4c99a37b76ec4d55abb6d626d5b6b3b0f1f59c3f637af5dfb1258fed5ac6cd80b0c3364c56f6eb3f66ded50d356d4488bd2d64afb72dbd631897f3b54fceb560a16788c7c50c9e95065cdd6fe9d1bc30a2e2a7231f9a2c84a518c2a587edbd943b3b375777c17a5811df2e93f00e6fbf435b0811532f584dc97b7e48204cfc7d1317afbb7fbb4a76194af0ea845134a9ec000b56842c914f98e7c8cb2367a6adfe988d2d188d2df22d63ada7d4d47579b0119ca9800a22243590b7632942dbbdbb5fb82e21ee6ed5b1e66968749622adb87305880f0b474ca5007380881a5939896bc0fab20923c94a40ff3ec509256910308ec96029ba10e7678b2ecd1a8f80d8b298f6f1f66ad4345af9728a17b7e4a1620c092f84f7726b2f4341be0af7b5a48808bc44c9f366d29a5ec96dd2d7bb6c718efee6669197f702c0de1240aa00cc42bbb2096a1cc053df9b3322688b2f555ec31c9578e5f24a6e09f220dd4591293614cbddca5f4604cf534503fa151042e02fe220f8c3c31f2d8ff224f0bdbf0c09808234fe4399d4652601d73421de9ca90e351b1a4de4060280b22966f8cabc81363e25b9dfe014359103d9005461e78e5ca952f5eb7672693c98486262415816dba874a0372bce14156080f11c97c35614c3f17236259f3004e6804fe9a4a1014a12852886432d994c952562693c123f0cecae6476c45f8e33daf26fd508af4e7c8f1f3f3f3b3c3bff3e7deac24a52e096a180c0683c11a5682e1af61f154b3c393249250e0a512cc1fd94c4ee9537a12b64ee931180c0693c5603018cc087c8488d60a3ba26e3608571720d4a0f5b2331f1f9f2e258926e889341f1c72d244be6a17ec6788545c0a4ec51e76eac1383a4ff424d197482b7280bf380b9ac17cd52e59ec07d6a4c7e7150b0a0ac2ada0a0d8436beda15943a1b7a82228a806cda083bcf5911a47f7c066b8b2007f71e62e1e9a8476d016e9ec62cfc89eb1b57e9c75018855605cf10c7f7106814871366741b3a059d02c681634cba4c621bfa7c455fb2489f1c0bac77a50ec99b6956a3fb810860694a1a79e21759c17b8f498bbf1327cc8c227da2c2ca467f150f1032cdfe2a122648d2a8cce7a0ca5abd3c8abde49e531f45974744e82f439ce223de47048a58e92bc94c750cedbbc201ae5153703456caecf019b89d42b5f406fb382638dafecdf95f6d6c214d4ba189a9583f69a77c406560c93653d552ca2fe954105cbbf12fb6ab20c1003672a94e9013ed910cb1328cbef0ea5ca89353aacc85dd7ec6868a04b6f95f063c7a5a04c7dae07187a8cf598ba4d81a90b4befbbc00d94ad375d88b0ec26f655c4b195f1f7aa148704fe2f85b3d31e4afe11e8f5e34b2fa781784cfd7e1d56ecb4d76101c5f78e30915e4eab3ca6460f7a8c0e4b87c5ea94c75428535951ea882ddb83ca5793552bcabfddbbf1e243ecaa1a8f992ceb9d3ca6ba2081e97712a61495465002c111a51cb2c8919dc8469aac74628ff1d853fa944e72429cd25b6399112b9d95ce27e2ff4081375c563a9b408b1d08046ac5afffa305d8c9cfb433a01faf6ed243fbb5f3fa0104041404d46a6dca4ebda6d43c2803fcf54bf67a01bd20d0cb6da800153dd1a0b0cc48b90a889e90f0a25fb16402af6901476a07f8834429248cc0202239a729860c292512fc41a27c4acd4fd5e4449132858a9c33d209a698ed8829a10f82014a14298d8428ab1d11ca93a0077a93f4fff8324954e0af5f36ff59e5aad70112e0c3ffd3007ffdeaf7b82561846642f7b46912d404e8c7eb261e63c255300d42167b13b2140278c3857ee6122a5ae2810554705e34c8e0cf0ffc81015558e4a9d0636a7eec9c359ac8cc3c915fe60b13f0d74d543fdd847effb43e450395a21d1e6d052e3a0a2e8856a28c0216208563fa05fee0ecb4e3f2c193038a8d9f68723f03727f0e8e205dfa9d94c22a6817f883b32331876b369bd9178c2a8656f455a99f9d70d7c1b40fe214663f2b4a9d098dbbc5a74fc9920eb1196d82238319e4188b69813ff813abb3d90c27168bc56638be6a9f58c77ac038168bd1582ce62b7c8399137953ad08232ea0b4c6e2a75bda41dac018d32604576a91521063949be905a67405b61607f6c766c602c40249c0c1e1c12ca885d25315f8eb5811948ee54a6d5c68f6b319ed767892c45e02a3a60ad212bac443a99119a829586a7d301191dbc47e29bc9b881a3132a5912929100236d16368a5ff46f9445dde263607e36dd737340ebda379dd8232f4616881bf02644a73228de969fc8e4873599e3e4ea4b94f3d1d263b29f782897237b6938132f44b275fa9e8e67d46f28633507ad83351523bea998f94b5b77123b9f4976e5a47fa52cd5acd258f4885010bd03858e819fa5d837a28db33f4611ef50cad6235cdf4329ec6dfc9bd40c3144d344c3fe359586ebb6674a7ae793a53d7b9bca0fec3f9a543753486d72d23e0ee1c4bcddd68369104c3b33d50305b4a69a9e47db887decdc21ba5872f21b5c02667c4007bb67f4b1e1028437f460c706712c93ae6384cfa2dd2949ef438d26052a9fbbe467124acb590bed47d31fe33fd07e33f0e1583f42813e95130488fe24818773097881cc92cdf19b3b078281eda736f1371e74e1269b44d33e5d25fae547ad26bdd97ca9aa6695aa98359ebee93b612ed2491867bfa5ca9e47d35909ac707e7f58bbe8d1a3145dfe509feba45bf5dcd43df76b64e4e87a394e048639ffe5fd1b4513f8d114f5d9ce2e9f43dd6ee802a01a7503204027c91e5cfd38ffb06933f53960fa590a57c7b849226b2bc018a2270c0e191002703f4c4a0e7083d18ff2907577c2042d56ab576dc6249d300937d42882a4114e518ad4fa4016f48973d13698532f14fb673c415b4a215df051964414cf96c40283cc0207f30c8257f504ab3644729c09e31d2e4e854fc2887c0fdee9980888da35ffe20d2acf0d62478c36fc4008f7a26fe87bde3a04cfc76b9e4c054e365fc104364710f23f4ecdf3ef40a7fa396fe68e40c989ce0f9380aacbd75ee7df3c1a71fcf9b7e3ab9aa59b2989a41058e2f74f3475d6795af70663d8b298737e843ff8feb61de9032f5fa0565fc3925f0f58e30c9e17e7be83cc04116412d16e7d111c05890c564fe6872a424481368ceeb6ed2f59884c04e05eed60d5e7c6945b8fdd705cac417185006a4b1371a87a967565746863132adf63fed32602787bec2da5e07cbba395c27d6fd54e3d0bc9a9e89d373a1673c08656e4099543762ddce86cb2865e37a9a978af9b391679e41056e2b55523f28fc020330a67580a92b27ad329debc4dafe76ae676dde0f8fd9d1407a267eec94165b6a9a0635cd473440192a70bb17af04719102c3fc9d5e624cf42e89fb90ebd13188c778bb7ba32d304c4bc2904905a6398ac8f219633cfd20c7af851caf6004b4cca16f60c8831cdf74043cbfbe090bdcd41b12534162aa05029caa490822fc145144139f263e3eb17efdccb61310f87b91fdc87e7ea068d8669ac562444388860c050182b6154508218480080109fa2183368aa9077f27201c209c19cd678a31c658a30822081e2adba904f87ba121d27ca72d6f262c962c699994e0ef64a258584adddd554e29a5eeee0e230002984ca620e04f2543aabbbbdb2d1e59d97ec01f261a423464280810b4ad282630816908fc9d62b0180cd6d32d8b7db280196144cfabe7f5724122686157046d49e00f03cd80663359378136e88a171144b85aae56eb88148ba5c08e38a2e7d5f37ab9862c866561724982bf5377b70b01e92024453f22cd67b216e3d3e9ff944f43150994dec839e79cf36fbffc60ed49e53ea94f55e3a08e009702fe5432a854aaa88aaa0c847eb44f21d18ddc6ae4fee9eeaa59a352c5b0b85c602eb07675ab5b46a07d1dc1c766938b0af077eaeeee5e12693e93c9e2cee293d95ae9ee7e9bda5a6bfda4b5d6fa8e1dbe3ad5ecf0d5097b4cce0e188aa64889e2ee235fe1c02158b3236f8712f8c3321cb1cd39488adc756cdde1b005630549863210ad7c4b348080e3eb5c2965e7b85ecee5b876228d6b87c6f51a4981e543282e57869c8e1c976b935c2fc1cb71edc414cc39488a224deecf41529483a428e7b8a68b27a660ce71e5b878627927ae222ce7b85a91a673ee1c2445390709112cc7d58a29987bba1c24aecde70a5986329f58107e50271342019b10a834ce987c96b2190104000013150000200c0a064663b158308c134d531f14800d6c7a3e725a361c09444194c33008c2206208010600030001c01830a684b60054c5d00115eafc35591840c9fb9644e03b52863b5f88efee8ade2e441230ec3254bc93abbdf32c1bdaa4447127a03561b304630416541275add357c14f6f602755a3967ebceb66f9ff04704ff80379e645e4dab9451e9a677e11162ec4af8abd15d3c2e44ed1bf0ca31336aee9d84058c5317a6cc191366593a1e925a5511fe2169a7ad51e1531d4838ea93ba15f41c797b9cfb2ed89387c43418f87cf6fbdc482aca949e74546bfdf8d5bdd42ca5a1ad2dad31afe838c3875d06c35cba573d50610f5d34b85e3352a535e42db7d28df520abb82d663fe7cb8b127ea3295081e0845347531714be464f1cdbbb6a4b128a95549d0a01f69af345972b588e992917a1679f23179bc11cf89594201685a2ad7df97a0884e68e235ba11930510bcd585178d68735d29680389cd6c35dcc88f663a45f4362a61bd223195eeb913ed9758d2f583c39d983d45a285b44c563ac0de29032304040531f2ee4baed34ba7ca1a4da2f5fc54112d7b7173258810ba9a60cdd8625d4e8e06196a1272e5628bc5f151d47e391ee8edf4848e647c3ee10a7602fea71f5134480edec2796acc6a6c484f81a2b8701346580068ab13cffa33c4ce3c64265ddb13b53ca1c141ee9f3b6e7568559be5a9a743092479afec13fbd7e0f234ca20fcaad7f2aaba2a1d5b6ccf48f2496548112a90500ae1b1f9056fd5234ee16a3ce89cecc4cb43b92eb0c3c7686343b4a46ee0104547b28fbb36cfcd8dc7481e7d65f7efd40832fbf39309e783c7026ee3409845dc9d0f73955111b9a1a6b6637b32d062e99871e4841e19c5f9c3e5245a71d4cb578136fc5fb83523c959848115120846e80dd1840afeaf5167610fff3a7663b0b08677333cbf10fac2b2ad404f88933855960d9a5a52b769a5c13a77c77ec188ab27597d6abeb1770b566d0d40481abaabe461f64a369fb70f1f2652b2b7b02af069af73cda667e3e707af98a713baf490f9d0dad5d23dc3c1a351199d8de444534c0a7323948efdc8711b74078c9aac799d1ba49feeb5bcc7952fc81cdfb33afce521fda9ef5a4ed46ffe1f344c0541d29c89aa1cc71c35fa594ed48e05c6a671ed50e2e491e43cdf25cf2f0fce9f03d4e6d8029af2f55f1203dff98fe2eb7b2d0a867cf75ed08d1ceeed030a09095b62ca1f9d06b11527f8b3c65fe9e87f1d29b80e200902c1f8f78d0aa460919b64cbf05f13e055ee482c94621ecd10a2a1814dd6b02b8e5e441c23699c4bb4d165e770fff639d7ef806ee1869b15f61f0cc422ea676e27d57b28325edb98528de5310e556e926727f55a6d44e9ed914b3ae4d743e9b5a29580f0b195506dae1f13675ea50feb6f6d8ba7fa3f6d90eac9d1a44580e25365b4b7cf19fbdc2e87743afcdc407f2397c82d24722723d51424ba5d9890800d9730dbfec4cde3400c1fec1c0939237a0ff6ec1be48194467ab8413d2c4516dbd42e6ed13a128e67cdc2e246de463d9ef5f846052c988de0778a3d1a2b5b5598b2c3972cb4e750b51a13c7571da4c6d4dbc99af67b53cc916eed41d2552ff0885f831cf223cc16b31c9c94471e401b8cec0e5e9743ea752a2f50e8a04851c755129c3b15f7254d60213f02e5821abf144c8ee704ec69c3ead04af716564a1a7eebe1785e62962748216f8e458506e6cd61b0ef9dbd8f3fdfb5f63a2311d82be45ddc80315dc1a3ab8526870633abf8d38ca090771a94228c8bbcb8b84eb55eee1cafc15cd583fc31edac5a0c64610aa55e8cf38e302d8d807eb5643414a32388d518192ea064aadb52bec10e816f1e498ec5a3186302e517f2420ca40f5836c82f1880ffc7b4fa918e0fcca467f4c214c1a189a1746770f33e64bc50e24840c06791ddcab6ce46274ece238ee4f34c9a06348ebe818e569a91ae09242b456f8a02c0f2a448129dab950aea0ad7b104f313861834432d3ee27928025a907ac7ad0c7cf5f9ff6f09a43db488d624700cf706efd14f3690ea73686ce301202f5f127e934e0d8dbb4ca5c9d3abb0be60d344cd14a77a7d9bd8b1070222ab705a0fc45ccf8ee9c4ead6277b3cb68741fa107a80d9e49a5b861ecfdb53198eaea02db7790646db97c574968c73ace95a665299b80a11d6d862c95acefd3409cc43cd96723db413ddef30fdca0e52c2b6e568fe4e3c1546e26cb81592de555d39a7d2f748175cdf7706b8f8775a2534e9957a7a054955b3c067de10b78ebb2505ae61e987dac4df7034afddcdffc2fb60235ccf3a95a3226d98d51ab32aa5299f9a84067b063a7fd5ce4fe2dd75f4f54ec0f094e108a2db890d304630f718cce88637c741e447640669cdf6774c1ad09b931701f06caad29ac6be274ce73c5d7a355cf3b93873a09024b22f72ec27f0bd70898de6e5d82b1e60ff4156ebd405610e5e5e0f2175110ffb7501322040a2da7cf99f643686542d68bdb5dbe1be69d25300ae31f24495ddf8b3f4189c591ed62f27250141bb481679aa29d7385f70691ae2607413ddd57748becc38713ab38272ee2fbd9d02b7d4e1706a459c507924a34e940abacaa75cce3fd32ba142de6326db21db6da07985854b4fa59e449a0ea5c0cd5dd46005cb1d418f9749cfe6516e965ee4a6c1d583c72d803ad03af8821027ccac99dce9dad41eb3e75f62d30edde0d45fa7b1c5ad4bbc2821986d8c2f74e28580475e57ad6f6fd124ed419d14d16d80d641d8d67e7e672a639965ffcd28fb6e81be45b485203924c4e473620bc87b201c938a8e1e3604a4e18a691cc9637db378fa8dbb1f77a3e6af59538ba1a88f1bda291ec916a93a2319ff9072e7f068e6c7f0465740bfdc1e8b09d179723523f57fff90b2916933061475fae5511025f5d80aeaaf33a4cffde7c52e70bc3e1a39933b7b3433c7fdfc86ece5b75dbfd01d49d9a963b4ec4382c8d48a72f8ca504808d2f8113e7338eefee164f01bf8a3601c33ebd46761eaa383279561e0df5cc6a82c857add67a61a976ea77a500584c538a14b8d07b638cd863498ebc010e834da2699310f423f2c85f9a7f6678cce9d11156eb7e61f9748085ccf8f6f8b2fe4a843edb2e094d250f24c244c8244e6786506579981e84cffa98398f90617377aa6ecfc2505fb865e261d521524874c62a1677579f02df7869cf3ab88f5a41959c3f1ea69fda323d829978df912b5c25ab2848fade667220ee487724e9f885565fc66172e5cf1344019fe2b9fefe407fc3df9657249b1e56c2241b044fd019575e5cae85ae92527c4def522ec5b31a8fa51848fcb3f95b17eaea6912bebb474e01a46add16f23a53a9995eac50af5e97b8a093cc36cd14dda1d3944af5e3f8da86d80658d53b54cf5d7a67e60890f7a0ee9ee7d0064d781c7c3d0627e643e5db194ca548f45c024f3e7ccf3622952d74f520f6729a8d912149fc75015a167e52c1f345077f568308666cd17bb59bb5f7acf380c64198127121c504110aa997a27861390e0add2c7c1d5dcdbf749f96bff9be7eec91c58a364f603485864c8fe6747c731ab480eb4b975b71fbe62536cbe0d959e76334445d0a74baadcb9eefdab1998b9b1cb43216a04bbb71d562464e9074b929a14b727709a9877a6bd42322ec8ab1546c21999c5d8400d48ab6bb5fbe4147c4d6cb3779594519b209062fc14cb9a3efcf5680ceecb872618a859660bdce4eea8e1f40a998ebe5291edb7925b51d048bfdfb4df1fd62ca556107c65d60c72e0fdff94ec92b0651a6ea7ca9a1086e12c7a31b76b17323d5d4dd2a3a17480ee3fca9d8604dc96819b3291652c9febf9e92a9d2ea1d2b4688c22b58cad51bdf55b749d75e902825995c94c1ea0efa7e99bc79bf149a58f053ca9174b31f48b613467a31672f3e50b67088b34d8bf8c7f6224e95feff8bc383b34592e0fad988d4915484a7c15785bb2127ec327b49e472a0751adbc1e3131878d44d5b32f65c05dc47d1767d4e5be037fcb92a802a95edbe205e8daa433af390547f594367413a2973439b031d6e45a529f9bc86f40c78c6fe016b69c2c50023a47246024a723ddb9213064c0307c2ca61805e56f76a5ed84720eff621a084a60c4124aa0efc2d487c18552459612eeb40ca84b060b801508e8280bcb9f0724b4e510366e05087ef10440efdbc050ba180ca30553dcc28d763a1d8b769d05e6949fa271ecd7f3bb52d16872e8d3c106f162b8bc2e77dd2197704534851e6ff04f943abfc229775c44961b3099c6bc4107e1001e7ba5b39e8e3b43be7d9b09f0aadd2f0f798a6f952e44d0fa2c568ddd0f860eb8033b6d73d8e68c07913dce97bd484c6d64ccc259f4626eb0ff1e76ffeaef3b7d408efc146503062242554674164d25a38ca8242055361e63b03166d61ad0bfef95c40f36c69955116caf16ae58ebb3865fa7786bfe17ba37f9b253e39162cb8b1a08098f5e20e8b5092a439e8a4210c4736d10bbe5fcb9970cbd35bfce939af296a580b40931853f286119e0d0605acecc474442f922b97965d11e2b455fa7766781c6fd7ebb4351e5282028ebd28cca0ef76283e676e7ce2c43a565f55ecdd1f1f3357c97f635661694873cb594bd14eaa57998200bc9d91d8ae351031239ed7418233db03878379e68aa59b4f5d52b5f12ccdd664061fb7d1db0b71ac5664280cca0ff4dc2a615a65c86aadfba25cbb5a8688f9d1d6953b1cc9f3acdcf32f2eab0ece3937c412f499ed8c0bd2c2deec53797c40b56c57805f07be7ce9c8150ae2e798398e17465503e3715f5e6a3ca268fa585b19e67e1d6e6f05ca180802dd84182e53c514b3bd4de636892a9f48395660490bd71ab40560b891e83a0f25207ac60450118241f9ce8c7f3c0b813a62b02a65258b7f682d4780b8135fa13595c51937e7a097d0428b73a343b320e998eb855482c61da0640e6ac6210d9f97e68ca3f3840a3ee0b862ff1b5bbba71b966a0d5fbe3350f3fd0f6746fde53bab1f77d09e82a48013c3d12c0fa955fb6c955d29cfda6dd72dfd2458ccb253f10c9d13363c1fa37e8fa37521a0c60323e60fc4e8a8ed3cbf1301e84702fc83d32122dc522f4518d4112ccfa5c57e7c872d6bd040398d41a350bf08a15a3166846a6abb4b90e61072239bbc12f0a13e3cd00617da1a62b200d6c68ce3f90465158556fead36eedf420b8d0230e4c487da926693dbf86f09480d3a9ca5319741d15f49b5a21d60ac8f266e76e74fb85271dd415413ecfd769013c1e16b38045d045f7d0fbddd8b0016000907191ced6b77eae10b598a38fbfd6943b203a5db83d39991fdcdce3fb4431dd094f469df55a0d5fe61ab794fa7ef139a307395f089dae700dc411e6bf3ff91fe15089ba237ea6c2b3ac01b425cfb0be1e3b0e225f153068d821df127573838c91691b5b39b5d002444c432c342607379de0611f1c5c1d5c8a7d937820786d5dd0122e4caeefa4573fd275423d0692a602be3c26248592a71ca4d5cf3b1fcc4e59f622516f79d4b65577ddffa5e87c9d34ca848325ee4c837296a7c3dbba781c99dd7e3343983bc96378dbb02c1e89a793bc3d382e63ef46a5545d6f22b3040209a7c25460a17c0d8afc3a5e7813dd6325859bd4e383e74296a8f7006409dca5472ae09cfc7db0fc22289da2022b0af8de060771574fa438968b8b593d7390b6c2de4f9e289366801c2e474205620dad21ec1b0e1c0709fae2e76c515d38d0c467aec997cee2410645dec275e342fc8c24b3a583c8f88a6482f3d821aec6d1d0fd913973c167b29188d5ac04f1cd77e6ccc5750a9c2b60fe6753f71c758d0ac36f96237820f1285aff6702e541b70314f1da6262ae0858889e14ec765fd5b6aa8d9b918a3c5598260334947e386a3fa36a78a52d8c89a615447cc7d6c79bc4e0bd9fc522e1757f8d0e7efcfdcc7e26fbca95453aea3971b0bd8629348150620eacd9b3ffe5dd25519a16efbb72ee1ffc28e55da629d69255b3805e53e39b9df102511befed3d8f37cd74a12a3d7863520f06144f8186b90d7da414d83cd2a5d07a4a9145b6f857a9cb532521eb510f1043731343179f341af8f35153860ef43c8fc21c54104254ffd767f6b764ee22689e8921524b424d1496b01ad06ba0bab676ee84bde357a8251eba66efce9a50682c0c9ce724ccd875f55f8bd8e1c235e73e5f32e82d95c61d4de29dbde5e7be75126f76c1c2ac3cbaf596631b25e22856c48f362f5fbe297b0c3e0b6ddd003223b73bd4106037aebf0b02c2ca6286eec46b4053970ec9c68b2f4b7e8eb0c3c9fd9fff2e94d2fdf2d5ca25de80ae2ec0e2c6929812ef5cd6f3cb0f00929e8f0d4990823af06f7e4869f522d42ba98698a4faca8c134725325f91acc4756871f22bda4e3c176bcd900c991d551a8e0d89cf56b04128b280abfce6c4f5e1786c186dc91c10531ff05727da91c178824b124b415e81a77bbe92aec5f09079e05b09c3b81649114ab742cc4c8b9cb250a952eeb225e478915175985b851257e8c1f607b36fca8311c58bce7ee4143d8c7a7835e763607764862216c064fc234338b139a2c828da2dc0fd3d0b2bc10f354371c1aa5bf9554ce9309d35a846575027a5733d754ab99da6893b9b222ed9397a95bab21090554145c5b352de5051db2b02adde0be9f9c45c5024b2b5cfc92965980ef2e83bc311b11e87bba92ce30b431714d373b93175aca21bfce9f6534f6a1e13c70bc54c50d2a304c58cc2569dbeaa62a3fb2634034138b4f25f130218df52c1082463885c34070ebf72e440795908cc8e7338635f990319a11d97d43613e1e5c9da99c8a1d71cf64424573ace51cae5a3842688f9a72c8c1169fbea412878d72135815962db032a0f6702283227dae63bf03e5c8adaf3d1c822e8cef25c1cb1c392f087390757f1281bfa320f4a721da24568e2df60ffb2c292092150e675edea28a124bf2e230c2d114a64973b43d5a8b4a88b475b39cd801db60a333374622470563a2739f4a142166ff9ba8afc23428de1084c2aa86df4c2c05b03d3c75ac28f4f8d5a586e9544be89c1d50b66dfb5667bb11e040fe3126ffa0f60ff1891b7b28f32b432cc5714448a334c68c6c1496022b90c174264dfb3ca04cb3b99d53c727e30c9e437ba79cae2f6844348c26ac35a85b4292ad704340008428a8bb24a4e8636ab4891754d14bf13c24a6acd500c060c39f395fa6240fc92506ff5164b916f267cf286e4def764e43f596911e521df24670b4b803d1fe803a0bbf807c04df9c20938f09b79ff12e5da77329ba864999cfb88560aca16b291b7ebd7e54f61ce5be1a93434105534114d78a29a245ce582e8600a995ddf7295088d2b4af36dd2f3d60a011454e19464212d6dc13386d2e46cb22641e461da5c4d66bdc3b8a99a9c46873518691085aa46a849ee839876467850738a28817d1e332e5b4ccd396bd23746989a5fe5781232dd05508885b42b0a7ea77b1d1171f98aedfcc94dea941196466d4897005d9d1a880a71ca4316a02c068220d8c62969d8b7cd885463867b4997a2232ab22be8ce2513c592f6d0b863170c0365c13538a72c17156fa5f73972984e88f372592c308c2b2eed4fb635883049c6ca21476dabc3f5333500640697ff84911f7649cacc80d5a0fec832e17c03e339058d0cfede78f67ab288d86f15db9cdd8161005bf556d582d524c13f02e7fbee5ea74d0bb50bb2324f194af51b5bea67d71630027f8c115e2fd9454d1cd35a857732d50edc932ac8d3ce23d8bbd0f15da74645a4c101bbd88cdc68ff8e06541545b00c31d8af36dd4a0bd84d03e7567aa73cc19e7aa26420c50f0281146b6caec3a0e652c9aebae8a7821ced55ce6ef76da3967b75f05d70a5e4afb5eeb49351010fd9875906e7a81bf18b2f5344aba6a0d70f4036cee09e4c6bdce6cc48b650c49986c473d9bca36aca70049a7258210598c1e8e10ea31e9a6248cd405deb0ec9eff6b955cd43f5881f389cb4b8ad0404e51ef36ed8e55c389cbdbf15a5ded82273d6e48a51576e2f13593df96c0a8a3e4bd805bbf9fbb2bb0cee2682328843445f3bf83189d60aa2a8d473034e46129e87a0555392f8523b17068bdbe5d954315242ed579a381e23f4fcdca408699601ec8e857f8e47266ca2ffc39d3a81d2ab0902cd5971ba8d0458ec73f3346da793c844658c920711f2f839fe8c38889ebb4453c425ca6516530be7e4fd4c3d0784973d0a9ca7d804f0b38a337c53e8d2f38fd87c6e9df4d472f0142cf7bc2773ad253a5e1dbce5db9d417eb7e9d4b7926009e51f9ae2301f6bb0ba1fdfdbe042ece98027bd4e84751096f08fedb007eddc0a6e97be132ce051702a03fcdae8b62f06e8cab50bbfaf54b77c7fa7dda9966ef9d4871afad8edd0ab238771b0e0b10a32170e6054d2956645daa956613074c06edc1d104731b3911ef72a047b5fe948a2c8fd90b0549de9636f0b21e5950ed696b83885d0b394d7cfc75e6301121fd0b50467279c99c5020dfe18174a801dfba807b27cc6baac52fce11505c0824c5afb7e5cb51182533e8f6dd187c9ade657c8ce1e3b262a988f7c7bce7b5472ca231bc887b671b34bcfe8dd143d9ae7b6a75e9ac52cb266eb20a9be114a90a977a2cd4ff50a8290e9cf3c2311f70f286ca4d1e3478582e43e913d03d77dbfeb4323683c9d854965da2e46c3d06bb84e1d23ce05b9c5a8bdf0cd8f8f274c7895324b73091e61877e5a3ec6def4f75cde0ae9259b289a92584384ea6d6ec5b2dc8d46a29ff554ba3a77f4dce7c04bc23fe1769f593ab0d8b51efe236ccd76a6f5a80967fe91f0260901f294088b13d1f8462da140249c7397803f0958296af62662d23bfa89330e26816fb2a34ca649eb7ded8963d7b5de2972d54a80e2506f64eb36090cbbc3ec29095ef2c44b38a5871d83393f5db6caab21edded20f411892a95b36089b83a503edf022cce1d26e9bb85b542308eec4a4849a3a3f08cacd0f9612e16ed7f218ff530316267b827dc38500254267d7bec90f71676cd142f72488423e9581ea771e8b05f0f7cec74c064004d93942fa970883c3c79e6bcbc43b39d3ab7079f51277f828287da63050d8e22121572477bb7648d1e677c3e5d4cf24d85f355319d626f484cf5754246161bc2f2e19fe3e9e7d6ec9cc06e43a03da606bbf5a64755ecee208199d753f98e34dd21045f29eab1eaf40479c842d047e4626cc36bef70ce3f7d990bc4931cc711e5208f1a1a5710e24033d853f486302eacee881ba13b4215115783610757b74057a53f1fd8eb915bfdec6e96923ddf8a6b076c782b100ef06f5071839f225eb63e6f9239aaf46a6061f25deff65783147c254a89f816e2b3bdebd63aeaff3ddc115ad195ab11288f2dbaecc996a209516657dd77f7dac712d657ae8ec0fae59df761dc1a9594b6dece96841af0560f49f21200da4ecc49440796de10572f8917ab23145bcf43b80fed7406e817d61f228a5b8b967afa14bd46bba88d1f86aac9120c6f365ae60ad32fe0eb6af87b1412d8c46098c41581875837f0def9f1d7d9d06d5ad90074bad76d3ec09b872e5240a7ce921546ca24b8b567554e424d71ae264f697c7f0cc51fb063c59a02503d864f5d7c20f2c5c9b24faf23cd97cd65fb0b3c591ecf7e28c37f1cac2f9d4eede319758688fe8149c0b45263a115a1e1e08a00e0669ca6c1e0a346099489e4ad5196a93cdc28d012d7718c747bd1fdb14b51180d0aa84e0f5405e4fee0be5b168a5554caa00d3a0828d875e513e446af4ecd540800f5cd3455c84f6e60938778a5a41ba355f26964531362a281e3c8977caa5c6bb25748e6bdbf4f9f5f93832acc244f27d0c208090a141b926321cd0b2cf625011db2f3cf1ec6cd175f4e5a344f1f8fd409262503b2ed334dbf6fb2aa249f54c553c0fdb8de7434876a8b60475b5cbe424fdcc8d196320155177e42046cd2aad15aceefc6fa196dedba8ffa2d6e620660e6b39d24cba9d84fe5ff02a9ca5c91f23afefdd0e52a4b9539757d25d85d27f6516e894687f34bacbf979d30855bda150760499f2232615af5552559547b091c5f27784d4ab240ec2161c55fd9368ac4f0a01886a5f6984f0c67664f6f479d821c2fcfc2695bc3378353ab7d0d7334e5d5451313c23be4db267d1360d64a05019319ec458b330ca69208b05c385a20cf110a7053e6ca58edf4581b40b4ada76b9eaf72fd091d17a543377bc378287d2832f6b86664b4baa15357a83571765a2ba9642fb2df9cd072bccea94d15101ecf0ec2ebef7066c5d823e6be7023a22718e30bae37eb0d7e540fad19f6ec4e29baa157181b4105bf3f37ab03dbb1c16c188fb29cf9119dd30e53f862184a485f3e0e93947ef5b6b708ec084984da302560ac9ba165f7520615f04209879ac8f7da7be4a4a07d6c892fc69c59e142befc3faa232b12fce8c986b374e5aebf281d8621335400e3bad1e9f560acb31ec8df0a31b210bbb6c945fd21e3c23f67cea29f855e903640a45a6d8754f812e477cf048da941f78971a4ce56b2e07cdef6b672c2c6ab08fdc26e6d1b199025c3fda3df19f5d56b1c5d5132bd03c1fd80668ab5198f0f73aa71e27ef814bc6011dff4524dd83c8731e0f2b2e9b1c3fa5d08c7ebbcbaf84641df7544f2888c6e79f995d15f52516c0a9106e59c1e3455085e199a5c7298cacb7341604e90c1060f2606c8b1633b2d4bf8dc49a0e8fa3cf90bafa15ed5cee05c948e65796f97b874e172de0c87a82cebdabf010ae4a3171de15fa0476748d202b3efa1e23225cf123bd46d11f0c5d3500fd4a862b8809cf55d2930d7942040c72fea94dd320cfa559bfc4f650633a67946c8b1db6ffaf106030c9d6b19c4346342317498f4bb6ef21dedbba5602c2da1b290f8a333cbfa280f7553c0b0937d51b20629d65a9911ae7ae5955208a8998fc9749a6bdfe79278adfed1690c4d7b0c22b09281ec01b7662aa7301e45d01ad97906507423775316da33a7250bc0258971d94c8680b69034cfac2b0547f80a9fb8591204ed94cdc0c94da7043a5221833d553d84168ad8bbbceb306d7806b6d7070d1a066f2750f4a256744d2f9980259e19f73b6007a118175342e885184953b875c4a73bb8a07c4acb849d4a91d4cb73340d2fe97fb4404633ed6f335a16c0b8839b5b2063667aea84e33a0b802bd4d95c24964cc361ee5b36b23f308f78e5959857a4847226f68e94b853611462449511a37670c062bc39a11ceeff2c89ebc9857921cc481f84599b5398889c7c7390fc48a6b7779476f90d288df4ee0af91b31b0d2daec5199b2f6dc03dde6af1f33fe9a446364df59104103acc8f78511936224e50439d842154c7eb8241ea18c04b4b1a33ef0ed79bc4b48ea33bb1528d0d0cb4aad972c749eda77bd08ca793637d4574b88738328f446d47a09fa441b6c58907e4240cdb2c68622fec01c5ade4f44433bf70b32549103792b9c0f101f8199101afa644bf953940bc084cdf1e21ffa98af4d26c422ac3b629cf6af552fd79b32518c8b25c33aa5a84c9bcb390fefca732238caa09172e978a780176f2c20682fd87dffc3fb63ecc4187b964ae10561e32653da6f54d0bfc1b45a8da4c190c83538d331c8686ac63a282599512c0c3d01c956065502c436e25e99d0b558d003ab21ee3bcc673f4a5f7dc305173071a8dcf710b7432e8ea05605a8e796ca2486b7226574ddb8d170f149b4cde24849a01b1c91c597d1525a5ab67937fbf073ac3a45fffdf0359fe9fae04fcd4ac4322d7568615f72155014ab0ec97aa6b1b1f3dfba7089813c22263997cdc5fef52748adb4f5a5de34aba52cc59273a6c27eee587c48208a394becad63bb7f29c48c7876de863bae5065ed0c612b717b2002283df7a86bd3768b9f2e7a9a2e10d2364eaa62743e54b5fd640f54dd9d41360faa663a56cdf5bdb4a3c211d55e36d5ef64ca3d602cd4bf1b2f8eba7c2c544e70d9a71bce9cef4a5bdc76fab981de76c0973780a0dd6bcae75e9ae7f22f146f793f01ce7950d69c11017add07e862e61107a45baa9e4b479fd52770e5d530741049b67f76884a674263ad842bb35c1351eaa144eab185105ab01b60974cccde007f562cf5003a4ce445690df0f30702be56ed1b9940eda95fdd79c0ee6e0995e0158c5df16e8b250eb227cbb5947b001e2bc46d9a34a10586d22760d9538052cebc789f6444c2e6cf0411cc2c98a9857e574ade73080aa5cf630dac857d3e5d9f82d216872948c0775822433c1a162e740a9ac6b3b0d8644296856b0aef4a08b4111900c13692cc04858d2088d51195997982dd46fb065563b36b19f60bf2ee54291e1159ede9ced4c33c7bb4a3b68be0d603e257e798d341cf3441b588d067e96b15f167bff9d3b294a0507874bb87c675db9bee880d528b4bcdb8a1c276218258c4c03d81473c1205aee8ca604d1cdfd560089f393200e40d233f4622022d937e3740a3751c778332ba7d254b576dc9b5fbe69548478d5a5efe6509a4eec8944a162e48992b85489ecb4a63d621f344a47857bb7a1eeb87d2d18b60f401e48b138761b38847df8621c12834e8ea7179fa1cc7c1623883109b1b64b236f4bfe65f8fa53250e4cb42459d879e4083b62503240a41e310da313954b6d7a14eacd3811f1c9793ccc9391215a89a4da257dd053dd905099d6141c67485c30388f777a0727660241cf7be8bdf81fb3416f5a4017d4d400f57105955177d7f76f7bbe9f19506260cfc44b6298ce8c2d885c17284fc557d13c18c89619d1de4952e9e1fbc9dec60a8c37758a77db813c739dadf9d20fa772b3f24c19d021960cf8546a8dd0f6711925560c9fd7d23462a3ac29f388f76b873bd7b7dfec6c51628f90aca06dcc8ae08ec7390ed2f5b1027628a1884dfb56ada57727f38fcdacd1fa06c98a4edf1408f6bb96121d37e6918faa0a75241da2865167ece3245b08485c986893b9e40b5034b7101561b6221096249922bb50e9c47794ee801f627d6cad75a59460699fc64142b4347300ffc9fda31fe956c2b0692c1c29ecd9f456b9394ff4d5518c681307f0f1688cd4292885cff64abe224e6c30d9d8b0cdb77c1061a304a2e495a640e4f1599c9c0da0e5f9caf2446dcd2dabda880fa27197826f49f2a633722e8fb0a5c44fa8923e5cb662609711700b80dc7c662ec77c7935676f54b57ae4b0205e79a2fb4af810349c19cf7f1d44b814565ea293630cda9011eebe3b31ce60eb9933eabafeddb15356eab3105648a180c8836e6dca74a0be54aa8e716652314f199467d7965a65f8f8d3b2dd09de2d1ca08a9d0423248255c80d35f733c6df9bf0208e5365e821a581b2501d46771abd9ae1289e180a8e37a16cabd45b073e932d53d4ad6e220e086a73b1c6ff3b7b6652c09b163f77e451b33705f426f65802780b76c405c168cf1692d65e593784da9f801258f5d4fe0c6504ddfc0d6dae2f9b33fdb802641f5966e0754e1b43d1d9a36c472028f9689c6b0c4cbd903435b62d944831231b8b33136aeb0c9c5d0ec33260da2b567fab7283194b3f3087440763cb8fa5983ca00e2faa4551ef02f34403d320704a0ae4b9a0de12646f72fd275ab4cec1371583c61a1e6063aab1cc004098a1598607a9429b4785a039773ad6dfbd82859018e5007dccc6e738e3966fc824f546e7f879480b348487ede12b350f7c2e953ac34da4fcbd8cf9af7214c90cfdba7e4e8062a2f8f4f321e7d2b2b1bd1069db8cd20fe2ed3ac3274f53401f0b9868ee9d1b0474a47b754631fc335bfe30c4272ac147cd0af3619135b6e85336666f365a8c837579fc7e3f32b436dc2503827605cfc8f4d8fc2a0d12f30924b9025456d82426ac3821af1487cae6971600b85cadd18941f66e171b8b3deb4f597d55e557b69c5aa9f5cb417f1f4edf97ef65fd71c456e772500710568fbfa57a95e04b8ec83b62b7b4bc837da72e68c3d3c24d463a6a977752ba56159b2f1d5511c372a02dc98172a4da88ff19abfc2220938f1cdfc30663c28dadd16caa478dcd2248358c5bf42b45e970c5793604fa29f3207af430e03e47e68040aeacfc72aff758c306fcfb933710791f1d931c8ab37b5b1785e9f132f4aede9b452bb6861dc245c331e64337dcac736c25c773ceecdce0b740b9e0a6cac5a9a36bfdc0ae0d5f7129852d09f2e2612ab8baee255e73b6167eb0f640ebdd96a6d0833857ed6f55c5f9244c5be5aac762967e614446e952950f03b755178fe81dba1d3c350c3039a6145c34e90b614d2e6fd7164953a4d0d38b2d4e741493155d4b5bde455f4bb30c032707bbd5fb57ef9b01f58f7b140f1797846e37be238aa310eff63329c4f4bfe31c78bd205bc8649684aeb355d9f2491099a010445949a67b8cad73c9606c2c1bd100dfee18b089de625096f5cfd7fca0e58f2728c464c20e6af2a5ce8956b5ada73d52abca5a9c19fadbe0a9d47390e3304211ec1e74393730c1cbd89136ea985e966d6a38de6000fc1e67b35a8ddc4e74728f30934349c031b95d2b6c5457100f177ce0e0537705f1028272aafe6c888f8a7c93f30d32ea909c6f06094bf282fa832d29119ce8a950bfe601c545c0508af447f82ef1d0768f16033ded550b8925290b74a850f836c2e89e7878d7f483a96444af8df9a7dab002d0f52a08554eb0d1a7dd9e5aa81cc274f90d00f120ea4f7a612b9002cbeaabadc711fb5d1527a0b9b904b33578a4cead8d164eadc31c1fb62e75175afc3f24222a2c1b84235044317cb0258f1e75725e653fec72b299ed8e63a294a6eae57b48cce5ca37a4210eda490548ac6982849e9dde5542922f359ab279b259b9ac0117e845dbd601aa0ac97c6216926fa430e4a6271a58c8123513e3b05c6666d84795604159e4e815de2b986b943fbc734afe2db5a80e20a24b8455e1ad4beb316629455e2079aef9b0a9f80835b50a2a25cb89fc07ade1fd3dcc8cd3fc414674ba26bc641969b20287cfc73ca6b5b05ead66a07cf377f0e7dab3a46535cd552898bb4ddf2243cbd6fae3ebe35c81ab8851ae19ca5b351887011505145bbd2a7140038f4785a7790707c41104d29b09116ce9ca0c029e381550bc34d5bfdb6c413fe697ea70ced2516fddd799aa2917f27392d76c8ce02cbb0abc7cf640a28799748f913c29136a639466050843e3df44f1f8523313142f33a667362d53a2ad00eda4669cf49acf0d678a205cb51c09ffc45105ec7c0e50ed270dfb79e12714d2c9f5c21cb753f5f8a947631ee963bbc4f0e015e2f158c44d30dce72aa2e0686a7c0652e2146cea9e3fd59747a230f6498ae1075f1337906bdef4d797e0efbcf9a8db4d41004e00cb8320cec42fd0c5fab8384a039b14de380f651b6d6c67741b4e5d963f023747178037a01ba40afd138c0b2d62754ec91c8207e71415687a383dff707a736190efb3ed79ec6ea2621780abb0fcfd79180f61707bc865906d6f89ff7f3e325d4c73d7fdf0ea741a098347d3f57f30d869ccf83500f1a06d32718dc2316637d52a89c2a2ed05caa1f4f2a9b4e8c6098867341d4fcd714b25276b292b8de3b0e8c4b49debfce1d1471123571488cd872d04e73f09563b81f19cd72e4ac25ca0e0a99f7944c6b2c03b2419eb9a765f66ba47c5ecd428d76ae83033634e73b552a74edbb4554578b530aa506cfd735ffb4ff2db850772b6945dfd902f0b84b8ffb147d73c4a892a0ad64878bf0a2139644a94a77d25a4edd10323c53b31ca4230ae943f21134c22925b2f25ba6020b01f66807b5c779b9e01884abcb7a4cc13a86a09f07332e13d09e86b05780d3e2017bb5900346ce7c14d42d7e25be9dd64c8921fd299fe3deca0ab485f39a0f8c6c87047181ab936d4abaea2e211a74aad55c4ac4f77c76d80dcc1153336e165c50a3112d7056831a01b00af5591ab6c5282ecb9e48516d3c05d8cfb83bbf749badb20fdc0f11fd3701582fd318754799ccdafd036c40b975409455d3eeb6e327163eff3413506fc2a5102c90586f7ae842cd8c46b456e372ba0f02e22ee2780d1f05e6681e4af5bc9e894287c0b8c7ca96c75892ce1b277870181fbcbd92fc8f0d9222c73cd554340b2d52ae58b18714482dffa3c88dce3d83c9d1ac876147a2de2a622ecc45a4876b98a68e65724a80e1c2d8a1ad3ead22cfac187430e4ce1174e70419b21c73369015cc298dfc1be062f4ecf080610f59713e33911383114cdbef7655af5c7cf3554ea920dfdadba646f597a2384cff2b3e882a101f336edc299892951e775628ac7f3347d8be1aec0e1cf9ac864a9c75eac76e3568b286516deff0dcc2900557cd07bef0c6facefab59cdef6c287c6ac1f83b25dcfdcd46092783d328024935ab4184b76729baa1120ec816fa190371d99f282c1c09fd3c2703cff9b793b4e707218ae92268ce93dbb74a9b5bbc4bfc5931f79ca32c5a76eac3fa8a697e43e00bd7fd6318968327bcac0fa96133a40f0606744df63407138c68e175197ede47fd0700a0c3cfb2e62bce6ecc8c1497c53f7f559de9159cf865eba3b7c70b60800cc5258c3e6e1254f074633da71c1457ac5b9b56c8ae396bdb9b0d75a6d9d444095a3f0e5eec2a086a59e5b8d6c90895f3cfc956d26d40b23a30bb116a573b1d2fbe05abc081746c031181285495b0b52d8fbb918021a7d1adea79e688936be14191a164797d153e02300727409506a15749c362a8912c5b07fa16f4062f71b4645339d5fc386a116cfbd5e9ee04a2accde0c2a0eb1665df6e87809c03baad6007adb9d8e3a545578bc2688a7c342a88b27d3ec5ca8124a15449a259bbb78585806b0dd6daee15570158bbb778843a290b62434a26783ec81553071ecbbfdeb28e87215debe677e7778d487fe31e5aba689fac99ce1d26678ab9c6bc5b2f08106201146a5b3493bc1fd37d9694f337e7fd08377a80ef2105ac25d544549be2f3b5d43c46c9d8f376807f511a8893dd6a28b8d46ce70ad03964b9a3aa3c0ccef92a4b190f240b417ae5d333f3474e8632b2fdea00319bc2cf6912c602a1bf21166652d28ba6c96f77e3e01d6abd79e247ec94e543a9e2a6d1eb5c434307bbfa79e90b108c9e26a18ae0b8ce6bfd48f1042c5972558fd8a001b77465e41ba5cd67ce80acafd4196ddba57ec35a1d4658bda3d8fd6677d3b70120a3905590884928c2110b268022cba6d0727c2750f5472ec6a08cf5153569f55037c1f441e1d206e1fd23a731ae16d4753f75441dce0c38f033c915ec70304ccde5dd182d575990b3763b811d2d7a2372db496b4555a1728f650af269a8330c3d874bfc98a73d0386b614b8e7f2c524208b1a90c0a62d7479437a1b4bdf51ef5a22f2bd164c5a2bcb77e417dc529c2a7804f7b0e50167e835345d352848b252e44cabeace10a8a996552f32cb1ed1561cdddffd09853f444cd66de3d95a491e817c1e678d898500618b5e4432b4c47f890bd52a4761fdbf8a51fdf9ec92acf9c2804ab27d045efc5c9b782fb1d521177f140163a9cedd995a0ee92b182fc74b8259c5f14343e322df03f79b99c96557803d92a2807af3fc836e4a255c6328205ca9d3f1cb1d8f61c5b8ac5f7564e6a6b5d39181adab99233ef5f64086a4f91b7f40bc3bcca3c087ab83c5258b0f4cd1e3c771d83165c239a81264359cdb0006179a1ad4b3dc82cf7180f4949496ce98e325520931105529ff2095df9a5f35b8950f9eab355f6ef8a2c26a7ba2e369c6ae797b8f38e7a4253f2be9921ece710f95683c0264b3115256f57b2ce7bae92200d946e00ba5bb4188bc8eedee689020fecc1504cc782fbc0107aa32e01167c08744580a960abfd711ca8534b0926f99dde777f9a8c8b4047714a6796db4584ab9c10da3de7717f50f72c8c7bbe889811f9247898176b5e3deed8589307481dc1858e880353e6e51859069a04cd58e4e61d86b7a5435c581c273a85c0c5c5943e58e638bc3f9024b1fdf104a985ca032316c32396778c19f366611e699060ef7b7110d5a38dca6c4d2fbb404ebcfda10f7183331b3dd0c8efec354d9021a3aa9bd5b4f36735e15a00771756bd8d19ff445188c08376abdf6c2e2c2ac9ab0846baec622b5a60b74bd57988b7a5c54738d14bb9dbada267fabf9042fd447457d330388cec1cdd98b2d49d4042f815159c256ddff4c7c07601f01810ee6ab119d2e4fc354a4ce03c023f1d0d790f93ae372ede2e7f586218b9065b74ebc7bacaf610023c96753dadb7563205a8ffe635e9ac5b6f786717f20e5e21e6003df50605096a92625eb433d15100715a6468b47bbc1e2dc39766b44d3312792c9bc599b456f49aa76ac09bcdb9f0542f652d8f24bd08c6e9ad8fbc9ddea8cb95aee5bd91e2b70bc9c7d54553681f3ee7751752e04b2a484c41c010e800887414f6f5f6dd22d813f96a7f4b2aca0ccbede88fe7c7ce78b8c8ed019bccb53352f980eac11f771db1eeb4edb3c400a601f6815ce4406abc5c2750c8a3209b77a0faff81237e15e5d8bcadd0c0b38660939337f90f3b80c02962125631db7b514ffb29634253324aaaf58634b57ac66f6555150dc95cf7f03087470b35f818aad8195420415e771cb3c541843db313eab955eec55dff9cf9a5ebf666ba04ee0707ee136c77b76ffc76b7f285f233f7243f4a9400a572b495b4d9e1cc184e7f0d9c1d7b7867347f481ba67710a751918672bebbf920aa2c9e6fa63d01080dd5d46857486ad2b1f694f00413f37218b779ee4f4315f0f054dc908e13f1d3bbb7312178dfa3a6f9de585c1904ddad0eb6b3032ec75f293c84f09b845ff10c11224c4873983ac6c077c578a2683b9ccf55e816923183ee526c265f3a1e33f3ec74069631ad3b1a43966e9fab1fb23b201017b58b7057b0ace2a3db49a5228d00271d1559a6371c7b182cdc4cfa9bf5ba9dc988a65731b33f75d55179b582d1e4ecc4feee1e1b186aed5285eb4e8430837195a9211e22d5efde5887e9a38e7ea0b9d91ade71337b4c8ca709c1660747f0a8cf9ab2b3a78f9334771ce24f5091d6fb7c0f2617f82debb2e4c7d10534a94ba2cba228f882f389c3f5b1c65b0a276e0c383be68baa38eafc1e103e4cd273b2d6336429423ca096d8168fde16560501a00f6ab5e4a30980c63359aeb46b8add9cc9477841f98fe14dd8c80a7cb25e8d02e3a935f9408ac6639f042e287405c7a8df3d6da39baa3b558358e297d0b004e874fbf35125dd2c7f05209676d9ceb864d192cf113f91762195738bd9f2454c64f2a3cc051e695e9319c8806286ce8a028a0b31ff07e65e222dbef7b4a56e89270ff455c1fb5248ad336853efad7b59a03b6a7330c2940c6af3f56a041a97960c9d37b9b025e0c9446e08158693d3b093c4e952f953e6d983ca6b3f3148a5ea620453f3985c69ff07c3f875dc451cda4909fa990e2fc34034746c3e43c96c1f6e5fee48fa776219a4cc2cd2c9be0f53bc8c489b80e5bdb30493cb44ef6c4b6285e6d6262a70655980313f876687325daf4863837d6e2437cd50a6e97a9c0773560f8e610d0ac3482a061acb7433ae6b443708dc63fc8451753de388fd4eea5123a9e9a7357d473b3143d216b9115b5ade3e7f9b3fb53ee83bb0611893087a6c103820281df3020b9d9135058d47f246fae2ccd39838757a4636a2d333e8ee9418bc2aa7a3b6d8094cce435243bb8fd462dedaf0d031a2fda9825e67d6818a14aba24062c96e90f291b53d168387feb49280271c6cdf3873f00088680d0ce9af8b05cc6f32c4aa248a91a94ff0621ca2dc635eac4b9ed7ab162938a186d0225ad4b9827d8cb8d5b1f9bb212449368da07066470ce682fa7ef8b995673e68dc308c1014408b089290e9ad0ba55a7da025d51852df51daff77d82ee4a7322cddef377d8e2254f88e03ae48837121f04f9559f4c41e52ad15899440c88d0e6f658097b2f967c4161c850ebd2849a68613e37829423b94a9804e69a8db4209395768ffc015388b7629a34793168c36343b038d3bd7a4072caa9dbce65811dc325105a4a6ffd208ce69fef7e8d379773f0a6ccd17713b5de2f015e4dac5effbefc88b4a3289015697da2a6832245ef62d2dab6ce57d6d501e2045cf46e5a1b7f4c4d23cdbfe15aafbe7cbd753e013dec95e133b1c5f041a7abfaacd4c330e818bf46c81f2adb53d73a1f71f178bddfe536923a1f9d1f4c8daaf16c22e782563635f4c5d8c8455c84b334f06ad9763379d626f45d0320c105685d84a92658aa827b695bae3b445a85eee63be8f7602ba3d6c6248a969d1605f9ba654e450e2ef8dccc53f98e0177522c47a419605969019cbacbf0a0a792662662c35b4e57d83cc99ac512fc83cc004669ae7ea858654c800ae350a4e4f151545214587b263ccdda0d07ce308edd9c529f2ba4d260f258c1177e58aae24d0b7170ab1971f8ef3d58ddba7d56b4485faed110115c3dc440fa67f494837eb1c8db13138fd993ef0251ac1a92c3f3b6ffd0b5c64c3d47afc27304cc021d9dd8841ecec0b181362721600ce58e9dc7450fd91aa1112e2ea13d9c2fa221f4df5bac1ccfd6ecd1dc1bd0adcebc899691a4d7623254c53e9366b3c925c8065824ee1710f4541433f9794642a9456f3c38dd684c60ce6c463ebd9d478c5ec6a4f5ced795a91e7f68b57b64db61644d48c02d957ce2254806dd0b807e3f5abdd4594a6b2b84234699fc097d48b9f72d6eb9a3a371511f5158822578b9ab5185327512581e7e3786e12a05fbb0b418e55f21350244cebbeb958617840180fdbf9ee42c0ebb4a7613f5152695d3cb5a3455b98368be7dae285989362c67561ce5701a1bbb743502868d72100f6d462098da0642c98b1fe76790076318cb2ee4b8021539ad3dcaa963c7d69c1c4161fe645a3a49ee4c803ad8fc3e1e743e5f6fd74a5b409f17199da43477e5d4fd73d9de79197f825c0bfed9248509f0fa4f9e8eb65111c8a8a2935d3427bea11ba5597c3311fc824aaa5b521adde099f8d431bbe1ce4b75c266515b2f9615084f8959819e55fd3fbca1cc684aa98629573ea63e6e89170c69676af6afe8d885315508b53f229332ecfb949398b2fc0aaa75cbd73809c1db38b2a17e1a8bd90c5fdf1fa6e0744704cd93e00055f29025c367f88760627b99f29dccd604f80060956a53a5c232d01257d3d538ba1703890e472647858ebfc4451026666366f6bfce30896b1646df6badcc75d7f99f524ef2fca33dbfed8916eee78be7306b3909e93333b77a28cc5a3f83ecf41b6ed07ca511109e04e2631892649eb3a7e7e13d886d8003d5adcb8c15d2d099447dd40851e88e4dde9ed757b61b4a81fed47fcfcb74039797f066be1f8773badf91e5a998842f7a45ffebdbc59fbbd3ecc9f70f0de08563dea757c9f833e4f20c56b26cd720b5e0b16dafe669e46048d5682df5c2c1033387ec38983f79fd9d69c86d6fd0b93acea4f8f276f18d004ce7b103e28c086ea8e710fdd5f46d9c6f482a5aa20599abfd405fe1cf35aed4ae6abcfd45499f798e54fb94db000208074175bdf585e36f33eae8db3e34d8a1c7c90bc18be08649c84becf80bc03cba402cc47a8ab9a0b177427cde4a277a48f08f622fe78f6c2a1b264ca8615291da4526c63b20d95caf7794c9bfc37beb0115efea1872eb018af27b10bd117393308fb9de8025243938efbca4574b34c43a33b2f6d2802033b16bec7e65281218331cf907d268f5f67e028f250057c38cd750aa5efdd0370b4a7f972142d801758b3de68c471d43518dd9ad5f447783172693d351998aad9d073dcb3839384509871a715048628299572bb796a0a836c11d54f31ac48b1d75edc319fc4ed0974c51b2dd88cec432f28a84460344bb1f8dc9e574804a00f54f150264fa3c26e123d5a4026694a410cfd558f1c9345c9b68ed82c0e70d2bc163b89da53506af8ee1eb7f60058a93564ff3ba6fabe7f535191a4e8add1d5b5173be48ecdcc048f9a921279f03660f3ad49599f3c90a9018e767b6f9340e52090cdc09cc988792fae7883fc5b9a0f5c9c3420ab077f92a9c5f56c89317c26a502d5fe465d99147270a15d0c0911eb44f9f0fed4d17b5d9b0387dadc1f22fd8723591a3167063bded3105c89475b82a063fd16d89798f83993b236f8fe2925aa4451bcaa4e8f6a509abb099b2c5d77dce0ea72a304bd3a6e4df0bd74a0ddf706fada1ca8f1afe4b90b26051f8b0a6e88931ea0c21e278f112d80044c7266df00653e4cb0cb3bcd27871d697cf7b3666916665da95f26eeebd9c3159e8963dd152ac0a0501307cf376191e50ec6c0a109d12375798ec6ceeb313067b86e7339d0d796296e5917012730b37b64a18f3e349fb839758f9fc905bfda8bc4b8295ae5b411a4f85980adffaccb808890fc98add5f5f0cb9351d37f31ec3e0ae00ff843dcf3d93c6c7a39532e55ee49d428a23b469bb01134e8cdeb1d1b88a01717031f7010b836fd52e2638171a02d8758518adfddfcf80673a2b2c2ede7e4dccb310b783557a86a45000608b202f3e2f6770b0823313430f5a6ecaaa13f3d2f1cff4470fbcc38271a733af126e5d34a72e1d11325c6d7963dea49d8e2da84b9884963c5b6e0baae05488e5240b3083c03537bd623c431aa695109cfdd67007534f473a5b0242bb674d35286c207d72656d339654142e9e86dc0fc2cce08a1c01eed72ac1c205d525e8651b5a63724968ae7e21a98608d473825f608c3b17131fad831a5ea4930075054c28358621941e704b9004985ba1148ea8662e369e3f23321e3c3fcdd4f1e39f29948843f4fd5f70ed0fbb05f1a5ca9e7ce01f2cef64c23399883975e586bd0d1cc77bfd64ac199bc44f03cc2801ea1cb3e9a4e081600fece918573e037569a4533d20ec9ec2728b875273ebf0199c7f05697975df538ef0c0c9347ad25ea866681dc181b960b168da6f9f90a8311a52e091fe477d33982f46777d3edf1a0f587fd9db7113b51f3eb266f9198f0d059f89be05df208efd70544ed0c3404d520b1cc1454abd4192225e1ba4f784c09eeec44716c2bb1eb31fd5e043982e0fd42b0286c635ceed92ca38abd1abdb2ef8e7bfef84e98cd0512e49fc130367ceeaa0930c3d2d103a26708b0822137446ea8d98fcb146f150f98fe56d4efb65d174db057d9cabcdcbb59757b27f18faddbaf4650cd3003a97048457e91fe141ccc3f3f09ccfc326150831d1e2085fa577d332b8980a2367bf23b54aa49590708d7406afcabd9e6025632976dae7f33cfa8bc371a9957d90a8310354c11e8d5b1c4a8e6000e6043e828641fbcfab33a0ca31d9ec7ba674fdd538f597a04144efbc138c3c9abceff8aa7866305c62a436d73ce6ea6e499a8cec66f4e8454887708384b0ef9c03feb540d6f80ef13e309c4665e5f265e264c00a70464c4d739dac4634694e4f5d40c4ee7e5c5b82220d00ec4983e9ed857bf507bf43732e54b8f0ced32ca39493eef7ea1e185a8d1a3620a2a5a3968ee6de4e7a8afe7a6aa3be357307a77a43dadf8a9115975bafb5670e20e27ae837e4436fb42d39de92fdfadbce874126bd6710004875db9672e4c36d1f87db441b7075c4c6df1ac9613d6b13104934f307051c5c9f9c86189fb9f3a47c89aa9739946c120999ebf965d7aae9fd4a1a70d88fd1faaa168eee785e8ddb34c2b49c48d9855071727c5dedf27749cc28b0674915d1d45adabfc15c02ad9548dece2c083df917925c00bf1eadc4a9c66ac593dc3c4b96e9d06d8513b8f76b04452307a90ca444bfbb19d463f6fd31139abdb679db8c739207465417a59b0079a104d47d75518651af49f7661858f49d344ecb34a3d2a9ad296d47aa2f7dfebffd5df61c170117586bc77914529536ebbbac95c40434a603aa6f0e7e593090ba4a07a5e81520f34c66d0e9c6cbdbb0d2672de0272b5eb16f1093e5fb95350b2e5d5fdeeab05195a4aba5fe22080499d66118e4c24442f47ba06c97aa479fa8fc31908cd85ed878238bc2f54b42f6de7b4b29a54c29c9c607bb07a8075996651dd4f2c976ae0bd9e95684bf8a58975d8d524a29adac74697342fa26a1430270e515cb1f3b16e04f67a155ea178a7db096eea967f84a7d0682ebbf88a8f521b7e0d6951296c7d4fadce4420dc562aab52cd67fab8a19d3adfaadd68cec82f20d6adb3cbee23df5dba9567b05fe34714371119700faa85f83803ff5a7f7350d6ead95af742c4412ddb2b981f5afb53e5781444e2011b378b0e1d6196ee5176e7d165a0836907e3358646c17623ea35b69adb4bea6f5d65c097c351b5f2c5ff83119d2377a31d65aadfdeaa5ddc53617f853fbd53df59b05d047fd48bb4bb76a3bc19ffa36be58bf5f3bddaa79ce10ecfdb16772eb15d853bf56ac56beb29ac13a130daab0f4c2d794215e30c58628565ef89a02c48d975aeb6657537ad80690c3972936603b4c99a13e4d51e206a003930f64b601f0c0e4831773003b2cdd7869c1e4c2d2b8f0450395fb01d12b3444c1c2aa2e7cd1f082b43283991b2f2c88ddecde5e8fa02137b4ac107cf0d9c338378490fa74e9ceee0e637dc1a3966dde7986718d7144882c20a5b273caff66e588c49f924a29553cd8c809916568911db26cb03f5fa0dee247a72f627bcb18637c1a597243a2b7c5e9cd30a6f8c61abab339b32ca3d9d3ccbdd8af753bfb81452bb08ffeb8838bb0eff78144f333af75b159698b05d82cd456cbb2702304566b06b769843f3c397b52c23280a5b83b17c6206c0033808b220770702118feab19d8facc0561b7e7deb96dc00b85de7bfcdd3fcc46143672bba7ac68df1c02daa57dd6b1946eed403b08c09fa5ed5d280242d7c900baee7dadcb80e90179c6d25cf8f20189b9645717be7ca8d2e4e5030e26f8c0f49282032c606ca858725a81d91244cd17a797140fe0803143e6c6145b9e74a68062c18d1463ace07c617a8d004a8e144e61d8a0a2898b14154f53d49882e9881c3038f080f382570f4cdc1728137a587af100c5c57617bea0741179606f488103282b88612c8e0b5f50a448306cce852f282f0861ed85af2765a41156e7c2d7932b2815cbbaf0f58405d30a8b73e1eb89152a02cb5df87a9283093c3cd95cf8aac188170f325869eed855c73237d5725a33baef180165999c5fb5ce0916e69a655bb4c11af356b19ad9d836d646a74fdd6171dcbce186b8e70d878475aafd5398ef546a9362491b95aa461581800cedb47c6aac1d02b2b23edae5ffb4ebb0673aedeaee256122de0d7fb80687d434de708bdf1c92d7e04e60721bab34abf121c2d8d1d9bd08728c31c258c6101010103b5f185dc2158c903b20f6d1978be003010149202020480461e0f61d1f10863e79f9b297338499b5a3c9b9b126083e433409df5a2bb67d9349b3bc4163b8c5287de60edd60f7554ec811ea1ad77d4d25ec0e6258b66d5ccd31e4a5361587a4dadc5fb39b7b77efb8b37a45a3866f5d63ab59d50c817075e4f0f16a369b4eb3d96077436f57f758ddddd1bfbf0f4288c3f1a041c9eeee5e9bfa4e3b0d0199353e60790ae1befc55522977dea39c32d2390444ba0f4b29fd4a77af1be462949a947c9fe52b2692ee58093677777f087f20337367933f7882524a2996599a94ad59d9c0b9f1018e1c3a369e8ca72586e5f7117d0338b821ee793d15c707377474747476b69d1d58e60296e5788163c4060458646e400081439a3ca2a43e2b1005a228e0c205362f6c6a56abd54a87968fac418386868646871d3f40f64915638a0c94b67e1de7d3c3a3a4ee0517b795b53d7ce8e063f3c1213990537f92f53976d0ac9243923e44d37400ca3ee8013277fb36697bd468c554964ba956346adcdce4e8e0782ff372380f6c2fc1e186f48d1b3b15c706ebe6c6a785030787547584000400284481203eab03c438000246ea18d6c6480d04560ea8d1751c52fda34ba3cb490120e84414100c4086381a3416c8da1c3cf2c89aa04aa574583a5a14a0d1e71f794fbf061405941ae2806c1b182c96b543fef2f450cd3bea9e7e3886659a6118667b76e4b0630787e43ca2cb6985e59f24c4182343eec89f889f0973dd8b9047a604995b93726255556373a3a373a3f372f4ecf0a93e2a902d84a0ecc7a70737a483849a8be29683c963074764033edc9006000086ea8e9e160f083c3f7e7048f4836c39a0908594060a15017212ba9090613a68999d1c27782474791c5d085b081c5225d20185b4775a33ac48cffd52a4c65286e1a8653eb8a193a3c20a3a45848a248e0dd60d2b88d1905011efa9f35d839eb5a9359c90be1c18cb2fbb156b65ffff69d0d428ea20d6de35efffcbd0b855a554226c02d8301e0420000e29fe081c230c2c7b4d7144eacbe7faced48761f947c8b02cc56d503740a0c11d15336b91fefc6f5b7d4f0f768fb78eeb5c96ac949af0c76db84e6e253643c59883183728f066b0d16917a270228731c34adcb4e5b5c30f178b2202e0d230d5cb18d3528719fc4c98fb733d07276a65823175213e8475d2a7cfad204824bd8f81c07eb611fbd8554c7a49229111b09c9b239d2c4559a01a5bd84f477e4c81fda053cb26a911653febc4f159fa744f3f7b5fab6560e1855937a4bb4c13071b2896bacd130b5f4568b91f8edb2fb4f9534aa77bfc8a45778ff525566d982cffcd0c2c5f9e2c6776e9ac31e760754a8f91b3987de6e50c994fabf73181f329c7e81ce974ff9ce9f28fba93af492ab79742833bd83f5479d0fe516bb6835783d9d7d8d0587ff3ab87bf92c266363f9f9d74d0d2ca09fb655c94bd1048c4fd7c1717a97e3e1224ea9f4f0224f29bc79058af411877044fbe8a3af9a5934fded3afddf001cb841da168044f89003c8a83f7b4900a465ff4459e12113c232fe7274708f33c24838c26173cc38827171397d01ff5ed573b018978be592cfb1a4fc743f35f75d643f77e41a2be3f1dbc3fdfdf60da0b24faf1d94b8386a44cb2c66b3f1d77c1513f3abe9469f5fdb2e69bbbabffb8fb51a6afd6fcd73fba313fb8803ffd3c1de54af0cb23f53c3a6e3a636914ca44b77450121dc4e3fb830f3ef8fbc17fffc15331425d0ecf1bf178481040f4455ff441a08b9bbad50d05fe34cfffbcd01fb54741a21fdf3d8cbedfe675f31016ddf0bcc6d3f57d4dd972779ec76bdd3c1d6c21eed2ec2437c92101798da7e3cb7aa38ef6e86894978db7f15ffff028d317b6a39a4c07fd7814071f1d8d32817894090496e7719ea7a35ebaf5ea164f475fdd829db26264e42959e2a24cded338ff51a69fffe93809f8d3bfc281bdf190430afaa36e2890e8078eff7004e03fd6bd61ef0da0ffeabd71e3717af8f8e6f916e1e77dfeeb8bf31016b110eca31fe7359acdeb3ebede6b3e1e72483d7e5620faa2871c0286dee821a742902ff294e4007925ad185c450f5d411e722a08bd91a72487e78d5e09acc28ccbc8cb09fae119bd1220216c30e3327a21201d5fa3ae7578727215755842788db710ba1f0fa483d7a8530279e044952aae259815ae220fcb8fd77e743d5ee39fffd189e0c4e91eb990027094b9f203e0e9e0ca07807c201f3d44e862f7c8ffe936f82339e843beeacaf7f1bebe1f0b4163dbe17d7c77f0fc51439e2e09bd3c3ec73397c2cef3f0382120ece892789eef917ba7e37b3a785b5dab637241e8be247efd75bc509723bfe8853e4897233d240220220a162e2542bfe4260b302e2cfe461fe4b118d88f32e978cad4415ffd4247e7e302fb01b9fd5f127a77727c0eef8dbc0eded5153bffd34100d11b7d730818faa26f4e85206fe42981668a7005f9e65410fa224f096ca20a2e4bb884fec83b261747f7e110ea8274373db83ee83e18e646f7f50cb75fa7fb5639ddc7ba1f771f67837648f87edeadbaef9334bacf7e5c838ba4efd7af4fdee036d77dabadfb56ddc78561c1edaff28544de8f32bdcf8eb9122265823dfd90324579d46dd56dcaa4c24d0f2e222f48900488a0c313946bc8ab421d746950ec576b5408cd43436b044a6c399ab848f162cc932b907861e1828b2d2218632606573f1c438925205f6dedad564158c8c0c2e5ba4b7728ae3b11e2babbbb734eecb7b3130606f0dbb9415cd1713b882884280116a5d6b692616042b0628cab18e79c1e6585de83559151074947a783980b1774218f9c953ae5169d88066e7499d1f2a49451976143e2060fc1d49e7690da1109269cf0b580ae5cb9e2f6152d5775e1eb4a158c045108dbff6ded11ae6cb7e2948f81f937a27d78535e91e971b77320397a7777ebcc29a7f7ad840db3c25f5d0e01fe70d73d9682d937fec812049625c6c6aa038d6cd746afbd1058626c8cdc574886260c5df8366740234397232b46a43974995f0b3986adb9f0758569c6e08a0bf2c94a18506c76e1cbca0d621656b460c2ca93952fac2db6a0484829569a88b2c274c3c49395a5da841209ccd826aeb0b6d096a8d8551730cce006bb5df8a2618a216caa8bfcc24e15cc33b65ef8a2c108d6165bb047c357bdd69c106038ee290e2972d1a19631f1458bc5b668227b7737e4e6daebde57010d06d58c32428c616bc70708484beef8f495449b8d195b2b528593290c9a26bbbbbb7d7c6ad46039681e754328bd6e8619196e8f7252496bac98e3346439278d0bb36b748f54f708fec8e07b72f1057b448f2443a218338de7d1d13c3ae26ec07f356f81707bd45be74d5d2697999dd03497b1db5b3e3bddea863006757767642afcf9b6eeeeeeeed6b4685ad7fa727c54f0cbd9b029274bc115cba09d296eeb68a4966999a6691ba5524a1a9d8898613b1d6c45fa90c6186594ee933122eac358b10cb6e2a790dc6ec256cc5aa89827e78d19b8fe2da901adc6895301949493a654f2866583c9757f6fda78160b8797a37b1c5e0ee99246c7bad4b9618395736383c30d89947631eee8007221d090f422584d5d91f082e5d70142db704434a02389be4b2965cd8a421d5b751a34d88df4fd5510049e59a3742d96536258dee956ebb387dca9e8755ac6099942e83bb6714322cfc4aa2dc3ed514e9a691b67678adbe25b1a59310dab9ab6653668d81f084864b9d381d8b046e5e81c956c35933118a9945d75e78e72484a60a7c8b460d4ad50cced7819d05dbcc085e104e5b702730150e503573671a5ac72c59555b2b8f29f0427b8f2bd15801b63a4928227de5b502c477184419522044644b4e27eabeb9fce0f3a5c77ffe18aeb5486b8fe26e029afeb54d49aa334a5068676831e46a49e971bbfc168418adf42c09fd85dda0912c91bbf5f1dd41fa34d0e6cbfb682b25f4b89ffc295199a6e6c1b6e8c66c01f1b2ef6632d586e8c523e9622a4636475175f62af9dba15cfb0af7f16abdd9de41347bbc9950e2c04633f7b392a3947f998a040bd8f6f52fce97d4c94ae27a1b7bded4a8b41e5d49a4e4929a59452da94f6d3fa547bea94524a29a59ad3a7df6ab158ddb469d3a62da86ed1ef0ebaaa4629a594524a69a53fe94b4ae937a574524adfa7052f8d4f9f05fa40a8a4924a2ae9a4934e3ae99c93524abbaf7bccb7d64a6bd3a644eaf75726b7524ae9534a2ba5b4d2277de16f67808030a6028b3da5de07b1b8fd47585b81b1ec01bd74e7ab3a0a7bea67f5535d7daeab4f3bef2827e463ad9452975fb8295a909c2b9aad5bd87fac9dd66916a6b362fe289739a455b778d5adc8a231d26cac19a7843bd185229cdc1a03124c006214dfc2f661d918e5772beb62b7a6163257eb0d9b5f77bad557ef4ef492e01710d810447883f59794565a29a594bea494525a2b9594462aa5e4a71ca97329c8f994520ca37462def4b5ad394a2bad94524a35de74c0820c0505b541a254518d7df81612614434ccb4377ad48c75ac05df50a9a1434643fe3b2f271010a0964f8bc67a99356cc2092feefb6a93ba5dc9e98461dc8661354bad98eda05aa837b5f1d5d84392c45ede420be8633bea1a1f6a8d73481b56b3a434d9473c53d164dcdbe79e7b2db56d58cd52bd6b34cdfb2c7053f6adb5d8b66ddb96655b96a9fea351d1d45a37ee398e7309a584b0f2988d6b15281a84940b6fadccb5728a86b976395ca661744ba552a9ba6ddbf6472d39a46da31cd2f6d0a6064d4342e986d1a4b80c73a6285998e21521aec82d4960e12d94f2cb0b9617539b8e370ceb20b07546c6d49b72bad52c94d62cabb9d52c35de350be452d83c4b397ad395a3d92cdc18db01879b2bb98eef4d67f3b58334ca950065a061dbaa8328e7379f756b371df69acd0ddd2087a4d970d4b379c1f26b199542450a7763f34954c3d922874473be80c1f2c5c6c6a646c7a90b162756191618373730ac490b166ec2c1b1a16333b128b46dfb8d43a21d8da7ddeab1ee08df1aafcd28600d8d46c15c099a983b9fa57c0c5582866d35f8860a0d9a8eb568eba546aa632d3aa601fb986f3b16037fe63bc750f0677e8d0f2b4eab79ba901312b74dd5f118d64669780c25a6ca0d10602e0d20bcb81bb7d4834b5f48094b62600b5e8d55a3f1138799afd9d86857c30b105b5c49f32a2e8c4b3f6a1736b134e6d2d7ac43db58ea5372798c0d283143406938341b8744b79a456bd6b40e76904cd1a4b8ccaab49c21db63bf6d75d3b66ddbeab66d37365bb91558e8d6ccfe834f1f6c9aa669f0d6e8fad274f4a6ba7869d0d038ee35ae524aa9a5799a1497a91e7b95a5a151a9542a158d2751eec75f64292ea3c1426ab0ddf0609b7493261446252c9ab4c6444d744939249feeed4f69fc0c21deadb7e58c5e3729dfa3e710d17e5adfe87f95799bf3a7ccf8f9661c919bcb9ef650cb360e29c21ffe1a820b3fba57f75abd52769fafb9db9d4e8d01d5342084b2d06928d361a667626a2dbda55b9cd3e6e47d610f7637714c4c4cfdd46138ea8b379806e34d4c4c4c4c510dc535e10f45814ed241aa14c64ea0d310143cf21e1f21067865c5c07ece24a5290a0e3b38950ebad241427490f6de2aa841082184cd44c369ec7b14a61dae7f51d554eabbbbbbbba348cec47aaa95c67aaacea3748e43b7dcfdb9a6ad898965bb3529a5946d647599e93b931476ab5e6b946ff124bad551de4d1ec514c5e45fbe4ccfb5dcc0ae9c68b9d63a933375148b656d949d4eb79c9db058b0bde8a48320bbe51a3468d2dddd7fa7e155a1955cdbdbf71b376962dd527502c3904bf3b05faaaecdcbfec8e9a55be70486eaca7e69c8a5a5b81bd9cb1efbacc38eb02efd6cd6d5672e057a2ba0ba13ab8f018cab0a0cb91cf68a60b57a49e4e5aff93a2b290d71d9f1059577ac5c9b561b5aad2d761092237c86d66eabafd1b0746a6cd606f789fd4d14fbb522cb075eec8ce54b53b1af188d1e238d3943eacbaf3272345b0d5b6c18867148984663ab9d7c4c0e7510e6758d18cb975990c8b93bb24409cac5d9a216e3c79fe142aef6ad5e6b08cb3f9578b40302b265cb4dd2d70af7b075c6c2cbbfea201cbbb24a5c30c10963094e17385ad8c051b7da3117b4ba73cfaf1fb85e02f611fb253b9c10eae510a12f9fbefc78d4ab0de4e052904f41b001fbe8574a69edbe6c4a8c564a69addeaf2a96c5cc659655aa558d35661d290dbc7f3249421d26b4243e86fd9274928c1cbd2499d4cf2824b9b7654b58fe00cb6e37516212ff958d2ffb08df6e86ee35a7c97e7fdd93f07fabd65ab5e8c01fc8dfee550712f96335f374baa7e78cb2e7a40c5bf24ac964a7dd077619c01716a08c5cd41b0224f21f1df7c66a5503858656edcccc2def93ff0a523ec927f914a74eef40d96f884916f6834f0e38c30412c1dbf5021d2b8920c8c144ca142e5294d8e209194891c44a0f3f98f9e10711348951028a4f91716207185871840eaf306778c1031a205106192f49644186195f58668cc9d1fd440458cd142110410a4c5025aac945010e2c71460ca6a0400a932b9a39634a8acb194d1c5b22c2b8fdf1c7852f229c6ebdf045c4160aa6092e3f28b98082b0773f6aaa441632af2c5d8451213340f65a11560ef6d0953d4d0adcb3099bc40008e8cb17b9030dee7c11d600c899812c0ffa833c7c8dba941e0afcf3ffffe7f43efe0a8cfd68738e9d9d1c7fd42b1dd8f9902b00df9e879cf747ada3c5ede0f1f279baa41d0faf3c6acdf378747dbbeee3dbbdc63dddc7b747bea27c402d0f27c1d3e13c73dd6bbe39516a33e08f7c492f9028ceac6635ab958be5d99e9d7892e0c1a3d3e1f1787438af357b7baacdd0b8be94ca0dec275f3ccfe37d3fcfcfe47e9449e9a779cbcffff07467ec47999a3ab1583ffeab176bead1a3c7df17400fafc8085ff422bc9097a382d01b7d4e0e02883ec81b794a8cbac98528d38f1fef53ddaf6f77f43c9d1cc3d42ad51775473f4257f4b7933c5d2a31cac82f20a34d396192d59cd03fba7bbc46b6eb67c6e866e7133415d20d190b3d55f3131925ef220a92911c92197405e38c76be77993265ca9429632d0d0d0d1a356a40b85ad5d4d8d88861bfad4c993265ca9429735306c25f59a39b668f351c52bff70d64d9ad27ef6071c58918b4b487a42f84e2cc975a25e2805d0845193b5c4601992e4e5451451357469f02cc652a9a78f46e6e7e772e368f73ca1a845f8631fa432f466f7adeee177e8cde1c8831c6c8cc35209a748bf2e1e7d7b994076b0a1e63640fbafcadebb22ec21ff95837fd0451468fbeaaf3b952e6e9334a1d9a07d162fd6159d49e391486c4c738a48c6611abf027beecbc6bf8133ddf017b1aa5539f287043fca9572f52d831528e880f99328907b7c242aef25360a6cc5e94ef13a6103b9f3007cafe45b32cd68ac584e512ac1b5945083bf9dcad3c96d2ebece0d97648b4e34cf476bf67eda0e9fd9784affbd39f71fd08cb5df8907df49c67ce4407817c4e7ade774b87eb5e0724e2cbf3f97586e946df9843613e0a0c230af3e3a7ba24ee533a7f46ca4b922f5325a43aeef9a69e7b087f78d36eed7809cbbdf61be725c99f5af74922f1d6ff30ef635d26323d1b194907fcb91cc7a8d9711fbbd409727248dc16c42b34ffcf85f532a05b2c74da85dc93026051fc2cae3f0bb2d3ae36e406c76e75b1f06e35c21bf9e7c72be2a9905ab20680452d10b500a9b8fe45b8ece2889b3691f409456ab7a9b0bdb67545b4b07c42b7fc99ebadddea268cfde0d30a5eabb52c56bc453a687be7bb75917513c67e3b413dae7fcb87139250247410f754fb98ace01e8167ce6471802b5f93f4dd93704552a9fcca52b20fc767feb84fbdb6c29fb1dc3333e7256daffda6751ff749fc32c51d6967d929af85ca0949a96887e4c808d77e92798fd0abe472afb2dc111c261c5dd592cba53cceab5fff081fe9ebf464e51ee133cd09815052c88fd2a5dc6bb03927f57d97f35aa8974a56ba145efa59e0d24f92cf9b46b9f7d433cba7dca75292593eed9030479f25a5cfd2477a2c31961f7b0c18c1d29f4871887cf63e253942e21fb98013179a285d2d46087de47fe550a02fbda4f8ec1d51723fbfd10acd1ff5c7f8341d0bdde30f99a6c3227f76b05bddf2975eaa6d7e68412691366841eeec8889d069a7d9e9181e273074936aecc7f98c0c69632c7d78bf586fac29b4c0973dea4d60e84e2f297e3369b41b7297407a0265da16a346b5986ddd1f85b8d350b738da00c2f223cd4a6384f408f492e695ee6323d04ea5a2410d6eb383df261948c3366cf392b09f9837bd9d24917be959e13cdb3dcf0aea201869a45e52fc2c9b46f6ceccf33c20cc3735584f816518775af662d9cf39e7a4df03af8578312f89424e087d1f2191ce8e2fbc12684a9820a0b470a2082f67bc3c400688275358b94107289424c05972bc340531050c9c54604632756972860cbe2ce1c31660187922012c7ea0a10766b854e1450632640d2933baf042ca1233cc200b2329c00289173455f942082a240d5aa2d040892ab678b9418a04bcf0283062b041982b72a022022966d8a208c2894b0c2f8c31e68b273378c0822748b4e00a28665089ca02450c6590f185040860830a4490c5154d10d10317634402de8511225aa63c51832a5c9e9c403e1192e185188c004a0c2f7822690a0ea674e0035f8071c1055da490327c4a3a1c818312111c38c38843498003348062af11172490f38d61fd4002316cf0eac10427880172b9e2044b31cc7083196ce035f8810667a87052060c145aa24069b28416548c68228a250c94f112232a8721c67032a293a483890a9078e28b198a1053840b1c00840c463cb103962a9e3ab0820b5dbcc8810a6030c386a45f399216747aa057193a71490a7f819f1505141d7c98c4017e58ffc6ab73f961e56779d1a0eb832f264e9ca8c1142838c16b0545b8ae84e1c22f321424061857acb8c1043a90c1051f1ad1784ce02a7385cc924be3ad3bb8845308ccb8b4deba5302c928019828d7121a270e630fa2700107d712e60768d085a2a5e96e7a70752b095777508aa81baeb8bce3d1e4eaeec0163ad8e2f26e47075cddc1abc52e456ce1c2f2c1e0c4d54dacb834b9754e3f8f26d74d0faed829c9e9672e703084172e2c5f4e7b31b0c0d54da270e528e13086d8c103ae253763b8fcdd831dc2340286262b1b2bcb104128b9967493285c58be211a060c32d8e05ac25a52c259b43c11e55ad22ec8b069300b400f5c20c5e51d742e5e4798f13aa28bd7115abc8e80e2758496d7111e781dd181d7114d5e467cf132428b971158bc8cf0f232228997114d2f23a8c850440c4516ba57c8d795a88c5d3821365c3aa9a2169d310cc3e46336502c6c7731f753ddc664e4020b6309932e3640a71613c32836e5735199542a04f3728860f2271875562e05f9984355ea6392c38d8f31cf9c89f19c99ac11c3e6c426cf299f298679d5fb289d5606286badb5da40b1fcd023733fd5e58758d72a2b9c330a815dd04a3fbe846552881bb81342282b8c9e8345ef5921fcf8f07ed3fb78351fba47bd6f7e7f31293ebc180e34bed1da768644d8aa86b12c6bc150f65a6b9db4d65a2b7529bfdca949d1c1a199fc217472fd69a731fdaeb60f9c704c846180ee6cb58d2dd44bde33a95c4d6e4a2d04a147f5d27cd835ca324d37e3ce5e758b913824f991c3c0005d87f29ed9d149943b3f7328177233dd33db83ba76e9fa4b8e7a147b39d8c79fd4c9746b7e2fcd12e4dd3c8fead6fcf9d50a1be551de337ffe0689e2cfb874e77f3aa2d29dffddb8d35be29ef92c96b54bf32b7d7fa0e9b497fa09ec1aa090eaa74a28f5dfcdfd7aa906a2d6a8a48dd99b1a3a332400008080006315000018100a874422913824ca136d167e14000d72844076623a154824498ec3204619638c318618020c310640c910892500a8cea82ebc17b19478c8521e327a94f5f1f978105a852b4cc34d92639b18f336e20ea3fde6238fbaf907261ce267dc5149ee4b3191da430b21e753a012d7432ad9f0aebeeccc7fae870aa71e04067a62acbd903bea8096f8ad9ff61d2e40e233c5ea78dc81bc9805b776c77263f5e416c8aa12463410d1fe9f33c668ba57a36f2e0b3ad0eafce7c7bf078a799f22a5e6961510133a5cc9cdf8bb3c2a8a92a956a8b405f21a76a841990bb3e0c16cf0cbd261a516ff03fbc21b3f888d3704136d046cc76e20cf8b9dbd3b14ccee25dd28a0b2474a90012624b97b38fdd8ac1e6450dae18068bac76eba42683b623bfe3284cc1a01568be9c5b860a98f8083d2978085d08b9fa32384bb84e736634675ce8b5704f50fed139dd761a80b6362834248b8d3af2b1a63708040e8231af31e16591c538c1c9063262f2fcae5881ae9aad1ab1762bfea77a7341371af82785c67089a33a5a81a698a7f0fc15f95308db49d65940144e3691a3fbbf2add972cdc5848ebebd803b40c08f0d9fab65d6f11ab8730077dd2b026cc96484edebf63896568b7a427d524fd86de69756fc901b2eb0c2e508e282e6fe86849e8bbe0e61f7ab36698a75e89afb2a20cf77d6d19c5bd0e8875a75248748508b80d4ac8522d2d49b47fe2839f5c878497c87a28686932d68fb7ec15e16300cb2ba56ea6c66124b3b24579f8412b1880d8ca8638705008a784c0cb7c027684ae213b33df632033c91871820d0e1acc1f7fb5acc848e787f2bf28d40d56682afaa3aa2a142022a7dcfe42c81cf84f08bef08784c34f8497672bbfefa2c01655b3801ef2bd9c73500f85683403a58e52ad72013e31740ecfe5623645300c75ba37293d771fea520f36e24bfec1aa22eb492a4efeeec9322e72040dea1f77fe66787f819c9c75ff6c98e7e977552bfee42095fc5f758192f96d98965103b74c545285566b5de6436d450e2db81ea189c05fddb839770bf185b7c7c250de6588de712e649a9a1c861a0cd11b0381c4c85affaa60de47813eb5a4d46278a680ce056c6b1d0f02ca3d598c68288660ba626462940d20648844e1d26c3f34a6c8dff23c5fcc5789668b223cdbf17bce1903db8134ce4ae55afb84ad88e581faa4384fa7b2380c58e1741e9424f5b1366d64024d732bad064536bd465b9c5efe5a3452f33a51d3147fb5f9e74871c11a47ceb8b3b6adadf920bd39a8c858ab257cfbd162737c44032938f16c509d99004593f9055dc24a7c4c09349061624cc474a1b39b3595d6dafbb91ef66487471659a638145b7ed779a9cc0222050c4a8a71bccb71da317660bbe9f2c7e5b71cd476448781741432c3bb873d0f1bf69a37328fbe1c2a82716634734548588d1614017e0275d953f41859d51b13abb1b9d8fab9e98541d4e67412992bfc5d9a9daf12df63ac1cd5b238089d42255e977ee45c1573657e5dc6048c0dc5a17eabdf95b5cacd4101653f7daeec1431e4493d81ca9c246769fb4e827ee44780b5ee2ba5474d57a62f0380154f4d5829897f461cee5b26c28a4751fd1577d82d38fcf8f28df8640bb507c0f19ad171a5af37021056ea719e912d6afa03764d14b1275810eafcac8889f572d72348146183c3fc03e6b784847e9d600b4f55132062d32193bb3060811bc76294eefbbff83a66fbdbe081ff616fb24003e0cbf7618c7a7a27d03c5aa79f7038272cbaa846788d9ab84fb1a12f228377048c83cb661e5d67acb8936e60fc94d79f07305244bfb48f2422315a201d847201e061bc98a8ec0b519400cf912b41220d010223a23177ab4900fb787e9a49057e69951f42b87e1da76f239575cdcdee5a6ac85a9ba1fd0b6113a9bed70a2a41fc8cba935e1b56401f7a2d494677cc52f29c7e1bf2f5c8b76c235a056ca39f3db108af2599fe7528c7d0c4764b28afdff11542b9f442aa6ec144bd41a17bbce9c798fa6fd2d5a0388ee2bc299c66a24a7cd2bf96c9ed4e4d3a588d190bc3268d57fbf89e6745e457919d6bb9fcf2ba0b0189779afed1516524e2a690fb14aadf3301540aa9c19aae48831ea7332d7d5990161fe238f291701f1b88ba65687d41edb50e1d0edda4f0a0886ba538d786803739590dffa8e2e983f934887717382708289b6f9db51b9766c57e9c2b71bb445e2de6b44f6f90dc1b525cfa16d612df0fcf0b77c366c9642e4213ba70eadc22a4f9c2a368df8da97a30975d4bdbffc9006e0ab560b8ad0bd6d388c9f6e76e775f20ff8a58ac02349d04d23052f39d3d1c3562a4c338d5788ee2df1608bb86256e6777ecf447ffc06ab229cc96a327b6650751716ea22f8a9914e4d57fd70f12ff3b3aab0dd4ef987f9e855b834ad31956f1c89fe474599ca82de9cd9d2f631165c624c6ccf42a3de3e64b678f8aa08f414fd6bff490e7f49e639e9754ba843ba2466864ac4bd754f19ac33478b72775fe9368305d32d194823ab83f744ce7714739712f8a019dc3a68ca6902ed0dd58c9c151aaf8d6060a50fd52667aa3b2fdadac20de71860707a403509c3ae066aa5090bb5eede536f931ef3a15d761173003a8a287530db6695b17a17dac302074f3d3daa25dcefdf5c93b889bcc4b4420f33a041b3435be5f011b48c640e23e39a80f22ce720454219b103c77c41ac603fe15fd7909c86e881784d1a63d5139ddd5d8847455a2999a81a1f5bdad60cc6fd6b127ed512984f514c60a39fed52690e82df4dccd4773c25e89b2dc9b7186cd1d3b880b48ccc01eff8571bc8eba0c4d5aac7974ca8f12c5c3458f53006200a94838fabe5b086b9463668f6905d18d37b70c16684adf1704ee9c8f8a342a9eee2e43afbe759143dec0fc0d8a79e28b6294e6ea98462c1e1da72cc58b79539d5051c6d5daf95551b495ff2f2b1da24eaa7b0e49f945c34ac940725cadaec40e8943e75ce0595131514332752cf74c90e89a31d758f2d7bf2142f8a72981a1bdf9491fb210e755aa0aa9f4e103eae3948985cae9721fb04806d96fb9395caaf56fa5344378185d432cf1317f960ba2d5cf606fd05c544a2e4b2415007dbe11d0e088aa8a37e41b31930edb9678c467ba22b96bb325acc25f1d6fb33c38c53b5d90dec87e011556bd008129dec7ad8a6b23aa87829a90c3827ea28181dbb40352ec9a17f323354f5370d86e4b7920f0321bf39da4eeae9d87b596f17725c205fa2ff7e83f9fb7e2e89a7757552c9d8728890c8d9f33c31ab271bffdb36552587b39202d488cd06ae46852026b1fa0002512ef152fafd5b98fb4c16327e9dd691811894ef0158e35e20cd2827bf07aedb5efe848f93a09ae243713a8f137e056a30b52c69d29e3e956aa06ed3df34617af8904efc8919ba8b6c963ee703474e38c5f2b6a8d6e4ccd6d8f7c9a6b1aeb26cd8d628696659b4f5c6139ac15e05bf4960e39af3a2ba64d5a9ea072d0113f496cc8620e8f6227786fb8809f49d87be73b1e0a393a0d642b04363abcee78d6e98420ec7d5a0266e739b5ab8f00406d6f732475267b32793ded3f0ade1d74e8e7ed16d348a9d87d7869ee86e9958a5a5307409c2235a14d5df5043b39e242067dee1a8eaa5851631f8f70a600faadcfa225c0d228f5cddca362d158b8e70da7722cc3758fcd5b9ee16910a9ab828b9c376bc8d4a609b4d0c459cb03afa2e5c4cf062a0a2ffbe351ceb2f10dd2438b2f245f7b257634004beabea2c3e1e6f421a99c603a3857f7fd417bbc87dc00ccf1638633c1b6fe7f153991b2565224071d7ce867c115dc5e65c04b707fcbb271ec11c0ef103d8b95b3316eee3e7ff642eac814006a422e70bb3f9f4da8a0c8d691daae283d27a95af4c18750c2835c659a830b3ceb1da037c8f8f7c52ef7419225024e21526ce8367c94163b49ab16d9b62d43e69ab2e01c8b9410f99a004b7de5d2c382ef898d96cb28066c125d0da7ee6964f28664327679df58cc5ffa45523b6d232521189dd7354d4b299a2370f649863f061cff2a0b97740d0f618c38a282d426c13558672c6aa20a4f2ba93d335a26b42d0a5585d225e8c2d5a3556826a676bf4417b2c020e219bd9e9cf7800174be8e8da79e4457efe829b24ca19079381cff87299a004ce5f650fafc5413f69e5050ab261f44b292986b3f6141b3218d83930c73ba7d410a4641797c0744f9820607e8e7fc3934792231302ea256d15ef09d2537a19131aa3b331626c2d8a4ee49fba3fd2273135374d5136dcd0a2d29b1632c9d13658c6454939b67ab91900b64d471cfa2b9a4a2b1ef7214c91b254c97b4aa217072a379163f0a80ffb94993578059a1519fb7315c27ad0284b8bc4672c905243834acb31659de4209620421111f0a1246b11519141fb1aba79cc84615a5705b6c57d13cf30842e12eb7ae8a45db3fb0196588a4804dc76c100cd2daadcdd8636d58cc4c061f35fb78ee8777632b44a1c663f3d45ae2b4863919e7348f14dbb6ae647c04f52c0160a816424f594114722183af55e9f7679aa35a082232dc3c61b95c33f7b290472eb74374cf81c02af97c81b269ad588bd085d603659a4d895bd574a33451b344ef25811aeb9a100c170ec15aed33ab6cd8695d029a7d1e3175b1c501c2d1505475fa9cd8e2521631a000b9baa81b893f2358b092a05759ca5a06406a0e87a1085ac0a4e446ca8b317690df34e1566932aefe819a000a0c7af7aa0b05eeeec792d03e09bed0472624ecb1f95f627885065ab43b25cf6b249ec0cf319a3c12bf017997fec80a0ea68f2a2cbb1cc1299fc1ccea818ddf613bb5a7c6fceaa94c47840e50ebfc9cd945e5e30b77419a9094bc8f90837a7b8247acc92f9f326422cba112815661eea712aea0daf6433dc5a4b51cd07e7d505961f155d1d48bcb06be4f9c50f2f0fb22a075ee1face187f4dc214cc89d5830c15b4ab19cd41867ed47cbbbebea6b9144c6241caac10dd8da90dc9d40e80ccfedf06a7c4752715ed6fc3e56c0357d234405a615b3c4b5f5dbc667a9c8209b0d480a1c2776764060c392d762e7741d0974fd1e42ed0ce3760ca6eb05862562f50c30fd866892438f2dd57694b174c51997d3dbeeac4738649c3c62ae55939e0f2c8ae627226f2408461aec6da03868ad8f58cef80211746a3fdcbe2076f735bce627b2035dd0193fef081b0993b6c79c4107c34de4d511d31382d266e1707d87e55f9a06b4485c5f43d0c0dd6dc9ad5f9171a92d1304c19c9dd94a5ea4e4cf5d36d33dc3f6a861e546acc8d879aa1d3670fd9c140c6416bdd4105287c9f2a09a8d41a159f6f44548ea6ef3f88a7f782d14a67e70ed2ded8898b56d20d4de66c91beed5dc34ee33c7879ee82b7d130f41aeed033a2bb01d12142c370177476ed4b745d783599780cc5e046dfedf12a497e60d673dd5e2ab471d16db485bdeeb505b1c1d670fdc2b32559e3bc394ec352f3526bc560ea3c5c351a0cd80f138a0d30264cfe7cc26aed4a38e12bd5127bea72a894033c14f33a0c4c341fba04fd18446dc19316b44fd1182f02a9004f4a1cf67f81536426ba0294483a1f8c8288107b1955a959e540656906f4b9356a85a5a908f557e9d021962d3d5de5f2f45b5ccc2dc3d5ff1d4d3489fd36b829e78b01fdb7ed6ece425d8c6dd542680ef26eda3fec0fac554482f89b5ccaaad692da227d1d6e780165dadba39a944a13bf8bcde63654c6f67143ec311052e9a0d3b593bc074e3220ffa1da6c17c13dda77695ee60c0da9bf32af945d789db7ede0976c0a4c204a3a465bc55b72448a6a0107289dd8578c23945e7ec261c54606df3c1840cda995f17e3fd120fe4c07d236409a8960479563e0f9ced0c67a5930b06dd01b35dc1a44856e0919626d566201bc3ea079e2b2b29383eafff6268ca8f428aee281b07fb491d266259a30b89336ff9b99e0712455c7ce1e24757322f5a820a6b87acbd0f9734933e98fb82ea6c4a8161c66b194612f2011d9cfe39785904e6728e02bb465b6f935add42c21aea015abea0638c6366ad80d0fbdc9af06be6a50d9c47c93c15d959f9e09651ae06dcdc43c65ce1917cd2df0b5cd4c26aabc875693509954972245c09ad2a5ea84273dd016bfeb62b3f7800dd830bc22869cc0a45c1cfb486190f6639021c7f327ab16efa8402e86a9e766e2a44f305620c9286e1a8780d8e8586863a281509f64f500d2962bfdf4a7bfe0b0887381951f420fe424fcde8e31be58c86e7888d3d3c4bb94032cf5cc6c979f8b533bd7516928d251e6bb4c7f404f3bb4f6c78cd02c076ae5089236e479f8763d0dffc2c3b707a95b4a62dda9ff29ac33442fcacdc8f21885f1ef508df631c0b69be346b92c17ee572d243f00b68d8fd6a27b2c765982e970ed50b2ae8387bc9b65752b6cc3ab519e0e6de2d37a7d4d92dfb03fd6beb4b73e9a877b5ef38e786c377699ff3ef4924249261e20cd789a906edbb7421f5c72daa667be30621e6b444b5e1c628a44461e9c0972ae2040410bd953703644d07d490e4fff2f84d8ae42b225f683bc87b4f884080baffe0e3e844820a5614b80ff93776bcc727a51066139aaa5baa24570a1762b0b896ca4fcc164434e46222bfc2bb4031a1b4cf368014f0c5b6babd818f0e7598f4cea2cf976de265dc72e8e8eef209a184778d4ce9b1ece6f7a3b3f4ea7de65eb58f525a6dc3c20d96fcce17513785937f082e4e3f22fefbf9af9ccfc845170ac1f1a8201aeb31eed66e40dba4f432518405ac45f356bb02e3f5ee29ef5c88a88ed893c38b359faf5198171ade35de8fc51c4eb8ce1ce13cd9b6cb97197fca208f588253d2780f361dc0b61a4f4bb90418ae9f419bbe1b9b07187d9e26f11384a9deb783db6920cd79aea9e2c00a6cc2b6849a4a904801e9945f2c1b09ba0750e7ab08ebd4218e3b47fc3329a54069d75d47562a040b8472152893be1c6c32ee9c1b8cd2cbc414f5666fca9e6aa3e112d23c7b518c416123c1ec2b29ca836cb43914869d106c904c86b278e2e57d3ea65fb9a85aaf891bce14449d34abaf96bbb7a45210144737856046bed46a00082137dd012cf1410c9b69f04c1102edeabfdc9851c882198fac6b3bad5844e96a07a5c6b3bb182091941ddcc74e02fa383a2f7674f420a5ff4d6596143d96385541ecf88a5cde68a26f50ff21e5a606206b4303123e76bc3dd6053b997c9113fba857fd2dd1dc0c11f72625475012149083b2aaf4613d8ad72a716e7b9fd6c7d7658861f723c9fa89c76395eb958f51d03931f185c3c7be9bd6ecb3acc703eafbbcbfe96c82b5628454b9de37163693ef11eaeb1d4f1048636463074cafaafda2375982e32fda109042a1e1518dfedc539ea58745cc9d3de2d79638b414f649927c30565184df891ec16ffc7e7ec939c8985d03a20dcb6e63cdc54d9dca471c40827435902eb36e912983d21761e011c51e1e67450128d646e9348accc7f15c3696fe049e07c93ab9735ea97781689549a822521a6e87c8d908808f4797e7eb1a49dda33e70c0bfa280dcf08a719048ccaa3dfea8d8720ea80d9c0f1f60ea9986e3aa0f721e30fcc023e6fc7e4787213f1363fc86f8419edade5e74fd4ce431a22f0dd25d393d4ed23b38b6b1dbf1ed5cc26d3a4086015132a0526e8189828b469ff8ed961e88cccfeac4ef30554a3f8eb39acda24dc5e342bc5447e690a02f3a202e7958a64cafe3dfd8d7926c597329b140c8f77bb4c0a325ed34986f6f68806572e6dbca9192c5095c3e91f8789b767dabaf0e879e007f34cbf319a15c8d7286de139cb0703df3252d62f24be07fd264e015c482450585306a78884595c8875d0ee09fb9188b2ede2c0794fef3ab35ea57715d86165234c40b9a000915c56cf786a4fda9defaba1c486cf2825f28a6375ff9eab55bb1111fd07681cb1604ff1e854165fdfc65e36be956b0719e60aea2dd62d2d4143dad59d43334e36eef83944085bba0a413bda63e5a70d155115f52f73d53bd77957e461511c1e79bc1ebc4deae6b7dcbc6c8b8ea127e02ad3fba2c2d55529d5e29ddbd20d8263363912670e45a8ee2aba6c2f3f617cb184a631805eec904ae15212a71e8fc081791e6194cc7b3faed775b47c5d1c5909de0c145cc1f417f9fa0c9742af4f5ac4843ecc7c1c617e0fd3d7f0571679a47b83cc7c9f51d8c22165f3384c30e3a3bec9ea435afe949984b2d2c67eeca485cf769910f6e88022e2e43364ea92746f8a6b28630b05013bc922a07383c30d221105f7139c3481b8446369f1349c5bab05a288402eac2b7f7e6d0a62b920e6eacefa8c741af325b9b4ef35c994d8218ddc91f56643ee75e8a852a935a92495f859018a608225cc4644c049f178a76327c720c1434d0eff4b5a1f15fbe280470675c6eb99169f2c98958e0c268c4a5738c550244cdc2cb0dc7bafff21003d8b11958d68bb81aba86caac963506eef0ad209a723137adf5f453d8b6b35f920760a5efa53a20c12b2a6a268dac0e4bc7ee0a1eac713715391c12366e6f38f2e9f37cdb8c6051d0908ef9189afc55d9feb07cbfba0194607defa4eaa0d98afe58c1461c7db8d5122fcf8d8702c4c73a3c0f91b359cc7c352f849c4e1a8b509a99fc7afa7ac622385a92191190c0e3edf207c469b9f86e33afa7c2c8c160421d2c3a46cb4aac8e197266b228ab6cd26c0e9090795a2f847615b78931a1fb1c27658c8ee4a0ee0d0be736029d865bcc1022ca3f210b370f912d5731d24e3d9dd95825d79305bb040587b6454c73afd710f915a48b86d25c8f6de794a5b34d48d983b91a115623e83d10bbada34a57066156aba937281b96970d502ca2079ed4aae926c469429762ca8f707661ac6e4501cd31582064f242c49d8a241cb26dc54ade012a12596a74c30579883c09e7630533618d54c5618852d4b6677631c1ff1b4d9e8cda579cf1d800e0d6fb8fd89ed7cf19c1fe67907f6d8241fda4693bee6278332f27c87d953da5495316da1f1d4ed1a10c23b09b655a865c5b0aeed80c8aa850e8d696672a74a0122847a984b84dabd78c9df1b1841a214105cf73a90009bebce51e50e182fe5a08d1a28dfa1e3ddcf1065eb0112411966c140e6c20c29c392d24a12905c996178e538705c7966ae04e253a639da08ce4311343885a2ce0650b9072825a77f60f7d0ba7b1b016a77b49392d2aeca26721649632ae7cb3e5d8b99f579b048a2758da4b9b5522de4f46580c69faf9b29c0346fc0145f8d0653f9e65c566411adb3a629a7c919c48d2b6b9b8eb82737d4d16cec89265c36afa19f29a2ba28f116302632b0fab59a4ab3c7e5420d539431d655c09a4a7d4232f546f014c30853aca9d40689511fc3313c2b0c3e9409cf5fbef4842e13663ffbf6fcf6f7a05bcd14cfefbb824a01ecdfd4f305aca8bf2c807077312d8734f0eb63bf910790fb5d00993fa3f429735f354a8d09833c10e6d75fea8a53aa7757e55edf9cd523033196ebd86656635c8fc530fcb87b73659ca163c2166828fd4e09dbcb35dfd411cc6eef7e71ef5d525e8d6873a0773fd7c9f653e9a19e88017f6de7bee32c662092a0dab07a673be27b4255f9bca00acba1eff78b7989b27603a69d662ee2563a1794d95cb2e499440c463ca121fdb0f95bf95c50befa48e7b777d0267be36c8560855ca64a3857a616f0c420464ece0418dbb35a4061ea03d4ec2b74fcedf8aa599f845a3bbbaa4bd00509fab85223b8f927bd7fd04ee9010b60579936a90009e9994aeb3f87ee67102ae2d0969d1af7d1b0624202bf7288b8a2c5bc58dbe9438f1a8b38d4d24fcc095aef62e3f3976100ad5e069d221d304f86cdfdf02ba2cb6f0f8d119af2cc7cc658489b4b4df900f7e716d2d2116cfcf5912aedff4659edd700c7e384858f8ca8c01072c34b59362fd21b298a121c43ab6b6988bf11445623ea1ff95ea74319a4c3a4fc7cf1d16bd03808d487a0368fccca7cd0889ac2a5aec28804d6fc65457f56e82cb5acfef727dcfeb2c9dd4f2af0ed19d10ab0e83eeb64c3af1475411daa130549a201f89f01b02efb4f008183cb88c6e3f5445c0f39239a0c35cfce272d255583b1f83115c3c8d1ac4947cb53c8e781e44864681cf6631bedf98e42338cb3231ee6074af5ca291f1aec44a5c0a055cca8fd3b5de1ea773a4263b6415d9d7e555caaa83d119fe41ad93d159064b6df2e7a23d1c93083b12797056f07c7316c53e9cf4218829964887571a4d8a4e31521551cfef8c254ef18c2c8f2ed316154287b2eb990830f8f54c7a56da2941697cdc5d53bb9bfd72573b9e6ec504ddd72997828f6a7bfef47d770ac454c2c7bfd403fff9c6549fea008527e563d68fea093787fc5e34a830a26581d1f3da512e5fabab50b861a13fea15798595191709c76b489066c7913219a64eca4e8f8484f26c7046c708b3b00434b743f689403e6dacab553ee25a9a8c68cba043bf34c7658fe2bf583ce209405b312e09ead07f483e605b54d38d21234cc265e39f66bab0745b5ded6e08e6e11637ba218c09c588a0ace2d16e19bbf888cd7e61dd41a0a0dd4a3d315fb1b4b217285faa6603f2c7c36c9fb347d336556d28811b0de412d74cf575a7eb7107ce7c0eddd2c3f8be7d5e0efc6b31b94c892db2d8c37287b3b4b0a862d9b70247eea4cc7cb256238ed9b28f50117fb238d989bae4fbd3d299e7a3dbb23bf94ef08cf425fb5aa02fca61fc38381f7fd6d2b4dd8285a2b6651e31c0917994b86547811a6b879dcca99c56a94a07e901a1f286e108da8951e9db77593543bbc99017b5b727399e328274373676f40dfcd1d03ee8b55009527b2cb69931903421f546e60be6d4802b30c48fc48998559b456e8c7d214dc4c1bfce120b70edf162bd534b90de8e638e2a4042453906da19eb4e1f59a32f538e9ee208736b48f99638633392c9d1ef04895b3b05257e49699ba3500a45e59509733748c487313c7bea8ac76e35e7dec7c2c1c036bf2576a3ee5932bba87091a28db98faff2b617a75b0c7f9f3687d8a1b6322550c9b8753b060de6d1b13b63955f09e553723aa470499e8c0fc081fa917a8c25cfcca3c5c1b01e0c0c424c8f2bb7564ff4b3afe1211dbc741e8360fd73e687b6253e9aa45bcc4c2e8e0b40c84ac1ce39ad5385e3973b783aed750125bde7bcc560e40b2d30cb85b1172b637167c78e208af037a711a7f257bf1e6099fb8915d4e6885d135c4899c5dd366f4fde5c7e34adfaf023472ace5f0c57d8a4a19037744e6f15ba299c2459b19ae1bb344ce18f81d6c897726797b9cd412d9b3b4345e35e6b245be9fce7a7a8653483d699fd1b5b60c8fc2217d46fb3022d7e0b23d4e590b37514829140daf409d9f36195324196a0882595e99341b00499db8629d8e6b18b8ebd0487bc74b348c9539e5d2e9ea0e6eeb4ee0eb4e62772f4a3a8ad690eee9296d8e1e2a412317950d33df7e57e3a97a5706e0524aeca9977ccc2282ec033cb7f29db0114b7bb749529eee69858d3f701075e98c2f75a984bc32435b540c017e26730e1fbcf1fa54624f177301e4f20d75c8e7fe4b0b4d86c45c4d058226d509e5d5f64641bcd24191df27dbe5a0cf08331fe8632c73953a6ee568c1cfa43fb9f7ea747ccae6e338198c39f99afd3855e64df2932d51b084c68cfb3112dbb3994c6122882d3f391ccda18178fd83e7b7a62d90111a3c086b2c1ad8c33e562175fc31b12a4405698a690501a1d84918145d19fbcb95c98740cb81558ebec90f85f8698b9d294127a7d0b1d1d2cf4167dd9993f9d9fc5934dad8a6c4c627cd6860f69d44d907ceb7fae9aa00eeab930f028c41e461ee52d36c27107602a3a44d5fc7097c6e44544baf3eaffb71af64fd3d8b515f13ebdb1435d38b248f069fc9306c168e3c867727b1c9800bc2fb3bf246eed0df2f9a64a5a873fc57597e6679dfe8fd3b787eb2b2b812f0a631e908ddb6a03d85caf459d554d0017e8d603cdba087425b72235bc342af4032ad6a399604b2bfe80ae935f51dc52a11521ddb73b0647fd09f47dcbf7a3b10c947ffb6efc0ebb828ab0bf99e2e83a34fdb79a0037a488c6b699f4a042808e9db167188d3eeafc71c5929008a93cafa09438986d533de9da17888b771656c4dd0c1678fc183d24b42e2f0399a6f1e73962990bedbbf92922d1b3a33c7ec9060301d965e76bafd646d9e741d14049352e2fa77a1939a49de0bbda31a4f8ea57d78deb1115f52492d7f20a50a4645494c58a30cd2cf13a6764e4ff5f3436319e99d59d6f01b88f1c94fc1e430e649cd4b71aeb0be29c99f87e7a0671f3af6e8fe5a5950c1bf0114a23b1334c57a5e2bf24612e513f81941388af7e28cc1de5e984d6477d4378209a2d658097f738733f8a7a208aed63ce78c7e747e5e5dae80cac4d6813309b2f7cc439b71eb0a168bc0f2c565878cdb9067f408fd32a422274da342260243f1c1c0ea1b56c8c39eb5c2f6b319643397253f7dd3f8b8708ca36f91c5f58baf81d951b0450ddaf35af13657d9f38951ba317c6daf26f13cd613d278ef4d699bd0f7afac92adc8502c06b6344554cb8dd260cc1c268ae804e85beddef5865cf0d9bad12e143f261aec548969f1ed925284898eb95dae7a5dd96f8e21f0b7aeae3818eb84cb929e3bf9a7953d8bd83eb607dae9792bf5d3ae476adcb1b3fc0ba54569bded364010904df3c40c1abe25ec3964e9d2748f902864f25f17cff1dceff24de3b865a5802a5b124629546d18e3541d41357f8df095117b0a755a1d51331855320d371194d0066da4a1b126f357f5ce9219c2688ef5f85481f17fc925f4ededd213532bed8cff587800e295f2064ee6be41065a56778b1e34b6670b862ebf14c4df007c74104dafe60abae782e992df85d8eb0eac0e284c99f4e41b8f91f9363fc97d0c7db603f3d729758a92edb0f3188fd8cd0eccef4c90e74a1d4fb4273629491b61dbb029fd1bbc206e2a013208f7d3e2a25dcf10bf648c805a617710f542482743c09abe8e4cf6c19e659cefa0665f145f9bcd1fe39416c0357b7b94571034a42eb3cf2e5b14a257b6282a0d40bbe23bbb9e58ab5ebc7f800926766ac338131d180bde4356138ad5ba9d0f7601a53c22340eca6a51d83d97291a6ee6428e404b935115171484c4e09b4161c9d50f0e6b798ca75fa74ac155a1f1a1e1fd8aea317779fcf1cbcc5ffe411032e8769603463de4b5ffcf8c4ab9fa243579b664e017b2ef83ca29ac073d0c4c855976a9b45466188f63fc1e153cd4ce2482431f105bb4610b76e0194003863a2e3358ac9471251974ceb036036a5d39178486ec13d38637d26a10ab69c3bb86da5878365d65a7b6704e226995c4b67238469438848aca49065e090da7ebb6a251b4f642854043a59a0c41f665d2386669dc92f5369674c2b3acdb0acb7f0c8766ef4d15d66e246df34fc47d796fe8e99f18b452acf52bc029b163cbd376622d495aba63d92fc1bc3962c3c614a890798fcceb580b2bead7a0cc57b3ffbf2ac9d74bf2798ca40cf82f3707667d81d12a7a857ff445fe85bb46500b243c2f45d83f3e729d24de5185bfb87ca57cf4aefd305a580211733958e1bc7de63f655ea88e65adc7246c252845e5d79ebf2a0596d97ef46f7cd24e52dbfd12cf1072aac20155714cb327dcb4259b9705a44b187d76d2d6fd9f39246dd5ac84fa83d12a67e9a537b064662ebd23c932008aef3fdddc961ce26882d32014225f924b3fe85d0bd9b51c31ba244dff28d307cb795762f4d4a0c8120308b3dacd19490f9dcd63593fa4a468624009f4f94c251c08facd3d959156d48f0853e2315735bebca10445db531d9ae79ac665ecfadda5955d215cecc67fe9581808a039b3e10b35041616e30bcab3e420e1417f437dd69a83f151e7232f477c6fc3176e9f29aa1acbc604460705026ff5f26fb3544520cfb254cd3d5a79bbb041854c8877a281c82479dc2d6d175087aaede5ac3f00d3ea6af939fc42a4e91bfee788fa9921c0ba4a8bca4d52365b8ae3d6218b2d5bf4840cea7ad559672ea061e60d50775d9f7cd4c582a9e999f915bd8cf2d118c734a5c57e4c52f9e24af2006a9e0072dd36e837539c6b9269d753afd10a8fec7aa7e9db14c24726934e0fcbe6467d7631177047e53a60ba570d016af024e19d227c5959081be598bbd6b04eb114a183d83dd53bb4c6c7382a071d2c90e035687db1c6a5d4046c84d487fa7bcd450dddf0cce9389c9ba33e148ca8be9bd06af9a2b6ebf56daef91dc484b66a723e94be438699a3d8f67bf9961951b9a70efd7b3813561dd0afa3d586bcf0daa6099572e4ecfae9242aee0344bfe61811b5ebbcbc57a31883a03b09ca45dc43c39f072cad2fd45231a7606ea6ec11b1e15badb60e079f7f467f15fe893fa2e4538eda19a9d92b3d5420e91a218efd97247d141d02b1a9d6015525aa6838fb3847ef1c021a5f65ee35bf2cb8dd76e6ea672a85305ffec8de39f98bafe48cf452e600fd0d3a0030b28a512fa168a6e93869644869689b9cde26b3cdea4f4f6328e768e6682a52ca0d9f9e7b610f51b605d339c0ca89bf54fd54e8f33422c2876149395c34e6fb9a874e1acfbe149c6d5261eb23816d637da39e51d0dec510a73165ad3f8972337951d58472054a0f734b226d66220d4680209dc848fd05d9dc7d0ba728239c3a44c9c04e123747c98a6f4739c930396adf6cae0fd0ec15d59898e4eb8517b4c10c9b0f1774b40619475e20d421539fb2d4967421bf8db2daecaca46b5c9db292b07b7ece3e03604d7e301fb1acc9d78c90e3aa3e9cd7157870a7aeabeb503229371db5f5a7cf3f8636ad53f6d53c777880ef7cacfa0a66b5d9373e1460c63a28d03c033c3818e1203f22ae356dc917325e0ebcf06d19b4c5620c7cc546e4c8246cc3b7123c2951f9fd2f2f7351f39f7bdcd3ee00e60494248480148b325b7bef6bc7bef3264e650536195317bcce66d2c417089b7d237687329c2b73747ae802e1455b8e84b97f4203ee64f9be3a78d30657d07976c0cc57f032363501020706007aa4ec745a34ddc0daa14e1a4cbe04b91fc387da491a8c57a4b7731f7b35bbd50fb51ef8992c787645e3e078a1f4f3d4f703479316afa97169deeedef7f75cc9aa9357d9e91a50f206990d74819537314f2424a7173cafed5450c2714fce91fce622ef02e78b0073aacdf5174588a6961760a509f3b7ecf016cb9a7983055423b4e3f1f874acb4645c83fbb0d81e2c4563bd646f73092d946631f5da95605718f68a18e6627ec9063ff95072d13a92c2ec9ac32c82e41bc5a5f53bd9482938120b4780bf85da43cfa84d75a312f1d317cad1b9a91b0a2493566cb3d0b9b8bf5bff16e48d579ac9803d1be9b6d00a7fe298874a91146775326d2722f67820bef48043ce44c450ed19909458ec50014df6730e9e9effd2a85fa5fc99f7ee4ed88444153f44955964aa3c0d49d35591328b26ce633fa24f11221cbae597e23cbe2d5d082b405d54f2c81618ab6ca4ebfdccdbf554ab2624844849b87cd09c9bf69783b6fd692e71daa11fa0ded06e2faeba9615d1cb4ab10e3f166917fa4473380a1b139e58f2b6ad89bd4cc9927f3bb2a2e2c8f9722d8f26429eadadf9ffe2c70fb43de091225e833d5351d8c21eb0e05276d973d9aa1677768f531420ff9c865ead9a647f1bf7e3104ec97cbeb8d8a46cb8279fa8c5b954519c156ce6feb9f5cd158724f504391396f910f36540fc92e6f48c7ee6e225a94b1ffc2cc03fb909863bdd65327d2523bf3398a44fd18f09a27339937cff023cab723149768dbf0f46b93a03a40b9ca7dc588e7f6eb15fbfe8feef9dce3fb6d0aab62ca24d7b3169096740fbb18ffeb684907bc16770681be880fb982875818197646242cb0d50cfb035ad37ca53f2d8abd9d361363e962918b8dbed86c7c4b46214a56ad3cae8919b5cc9c9c32cc27ff11fa664ce24ae1cb7937f9d4cb027549dc07e9d70623a39dac956381179d2efb14fd7ebbcb3c114245daa31cc23240bde4fe6314da141e109c86c8382950b9e149d23092c7809f2dd1e2a3932c8339056a62dbdb423f0d9a1b1397a9f7d7134cee9129e821cd6ddaf2c4d6fc5931bdc1e0542ab1d9f56f93de87a268adae11baa75e3ae8fc187770126e368d874b3693709ce786611aaa9c4eb145e251fddc9f90c6bab0b851853cb7c4fb68a3d1ebb15feb54757f4feaa68ddc2f33b34bdc80fd30ebf2b7367e8aaff29f06ee5dad01a456cf46fc47bf30f4f03d1993b6712f74282bd6013b224aedc5d3541471fcf311a7ecae7fd278732533bbc260d8caa7f15e06f4148d4e4e5a6e9dfaae7edaa8554b15cc701962f4f264fa06fda72cf60551a4c6b66d22d1ef5eb1fcb7e2095a1fbe91a442b92d4cdaafe5a3caca903e802cafb5db1400e1ec972678250b17ec0880a2d7ec2d826255d521469ef35c2f92412b7950d7a8312b8c0b554a91aaeed20be8c9eb59317040bfcf2ff2b1761ea26cd19b222e9d90480b8bd4cf8fe292280458518e24961efee1ece13e4318361e19f695f16288385791033632aaa0484037c02bdb0a2e9bec73156ab7032b10a149eb2b558334e0eb8e0b7d47d06e8c9deec64d8064e1651db91225bb2d351d85c2b12f1ec77b036efa508f22a1b2a00d8f238f9d9b18a004883002123da2b0b224e8a4366954f1e98e4c6e594249235b982a26876111c54e0bdaf72fdf18c4ee90920de58db4a35abec7b354a01139fdde251959800167199c81a064aac371023784d1c7bc709288d5ba4818a20ac70460515c288da275a19bd7e6a8e0add886ccc4a1daef2ef08e9214ab503127a849d7af273b726fc48121fd431a94597c284861e8135fcf998fea7be9419ff8204817497864a9cfb2edce8b6a3a8c6d3dbc566ab692631f6296657cc5c33503fa8ce0d328b9314640a1627d1abd7abf5a32becfdf02b748e56ca51e9e50fc194c3f98eecb028ecabb07a7c3e6f4069a46b580e220828ec0e65cff6f6a712bfa374be8c886e68c57a01c8939ae6b2ce216b777cc275e8b9e032e2e345de41cf80675cdc93f26ebf1046412754efe404f229c0d4c1d316826479d6737348811fec9a0b6910532424dc3f2d1bbd2093e8c44ffc17be33290ee4e656d791c5b2ebf3bb04d0935fec81723f0f87873c11bd69772130ff59a739c54c8853113475670af168c382638def33b59bed6da3e01ff70331df9c352f58bb32c8257c0d46b4f73bc42509c9609b710e3ce83d48fd4403064dbb2bd613bf356960e2ff81c5640dc8559f052de73df139882676537cc919c8e7c61539a5742bc33d95e60baa266284340a03b669b9dce6608aace9fc983158276e08369724558b1454c508a01b9a9e9d3e01971be429d92ecdb5330dc575471007e5720fbf34ccdab2962c8625980b879037e99e125531bae992405f136467673518db0448d32551e798b11550f1fc1084384910fe14057204f2f80bce1b7c55bc4354041a87b262365b821b2ec59a0b5eced0f09d3d902e02164ff4143c71408100a72ba6b9addab3d07106e36fa9441de1cef10c1838112854547d30c40f2ea47cf08c7f4e353d11fed7b2540a6fca0486a29e89dbb91a63fd52c04d91af676764073d6e2277a9eb10bf2bcf885aec2cbfbda53e4c115d3460ca10fccd2d1c2f1bc89f01ba296c37a702ce96fc05dc5fecfff295a983ba0f61bc5fb3df7427ed55b4a4b21c749a4aa7fb86f28da3a67341e03244f016b81870e3006dea1277058c4c9fff5bc9b51e28850538c8cc1df6f0d4763d3bd1698e9934536099cde74fc7db8d61795f00e5cd3fcb647950eff504618fc641ebba158fd1a0d18967fd0384a1ed72de8ba830335c0d578b60bca9eb5bd21e8948b5c0c3d2f721b30c5459fe32c1f2b95beb822619b07c9eee49997c06d69f17f367da5426a86905fb6325e0104886fb55418ccfdfadcdd44afc656b8cc9a60fb98e20bfaea72689a5dd96116314f6c3924dd3bad2bf3c63c753ade8070d8c3477c9c170a7c12dae15074f4d1d2fd6939b79b12b523b13fce7cc772603ca3c498f6f3e6ce66005d1db07f34a7d3a0474aeb67fa05ca637abd35132314b206db7f35e9fc5e7833023d46b1dc07f2094b4bfb1e112aa95a26c0d50fe6f7d63ae9f6ae407120c568fe71d05b423f4c21a805e45cf43f9eaee587a637af2093a60b936796f6d32e7a5da6278f9bd3426d25addd6a5a1c48d242bbad1bac93cb269b5c13292a592cbd70a3ddef23d55cba6b06c10b0f57f19b4e5954de7aaaad72a5f693804ce1cb03bfcc38d2f9cf764ee4d4b40d37ec1e6265acc8a5ea87884987ea158b8d69c3ddad023430674f6bd893ae6404e4449db97abc6925885c20feb4d24ef9b0010e33821577053674073827531042db4dd9df6acf33d86a05fa0d36bc5132c849d1bf21ba2873b8ad5adc4e8fbe9abb5d5710f12fcf8ef04c5e81686ab34b41ef644f1eca0855e713773fc584b2038d9a8d5b414e6d52da13cf70e9007905c3459223a3807586b8630a654d7e4e43e688a569e1abcb6a7c0e89bd64d42f0443dfa27b661231df6c83d919a9402a90adb19a10dd15a951161a7d596d11fc2f5e6cd6c65445b0910ed4e15c89d4a3d4af6c274457a9d9f5615176ad95f7a3f72770f51cfdbcddaeabf5998fe3d6110ce901d366ff6226686a3065594f312cd207cf3a5900c99ccdda8659d83e997d3c1d04d1fcced9609319df806829ef999b1983596df6a9289fbbad1045a53974ebfb6976dd355f110287dca8e6ae5dc8d1f4bf9ce7a60e04b355dc7520d913fba9604f7b56f6c22bbd6c84897d1a6eb5d4daf350b322565a912cc89ac97ba2e0b80ceca5850626e1758fa401d9baf2e982f863af3adadc17190cbb16e06a81bb025590fe2b620570553861e2880c21f66045f70ce42f1e4dfded9fa6881bdeeabacd4c191bac58ce94b090c374585d5cbc5992f03d501aec98275b8557872e25e5719ff4e72d33a19f774f5e3aeb5174ac6ee9f64b047662f667c3d8bffb2db8a064e736b1a796d6f94fc27b894f720b7aab67493108ce406e18cdf4e5f9a0bb4a140be050ba693b639689ce611db4ed2bd615f32e7ab9c411e81a49610197dfb1623a6cbc446a280b1fdedbc4890a4e3b4d676a486cfb3b18bd7672c40ccf5fe6831b5675b1a8af810de0da4a32b79620d4110b18659c550d47cc0d5ccefe2e07a3802071b27fae652730bc8c8ce3deaa2640841d5efb2bd05e468a0177a626bf6ec28c4f4818def3ba68c72c7723f91180dfd465a39f0faa7ad7448901880ed4579a66c9855b82e01802e06e5486fef0763c0d436f704ed9dbb30b641f911fd20b151f2e5a3a646d51aa4fe2f508c347d8dd6e93d851e6822771ff57903a3c9d7a9973e936e99b2ebe759b02aebd09ec5d55fd9df396572be7cc0596b645161ea4d3cfe6bbcdb44c0186af70c82c04a8f1c83eb2694654a0f57110c3268cac3c30c7e82e02a62615d6dc351b111014585ba863f183396d54aa7dc94e02ea49b73dcc5b47a52470214c5d68c524af0b6a10f7c97bcef5086e51b371204038939333f83a1860529a73fbb4fbac28ffbc3697745e15320845bd9a29cf14d2ead9d59543d0f8476234a8f3df7c4ee6f24435072cc48cdc66b2b0f9b0e7aaaee3874c055f3fa33d636d468df665bfbae7938115263b6cee7e471c4384a76c09121c586b4c068d9f83f7852c6b54da36295e8b1cf22b06f53c733f4bb65c5912456e94e2bdc103602be9e6a7527e31846562fddbf6d757776e20b4fc8e47783ef5c135bdb034ca001c9d678ee2ccda600f6c2b6585925cf3255b1425a82d447b1e101fdd973ac100905dace0a746d2a613ca23f2d272e1aa3de460cb8deed990ad0b69e917914c224ae8587f2a19f26cf3d1ffddec40e7d143c835cf470dfd3ca1750bd63c4b75deb75e1123c4921ebca54c52a9b5685140843f4186a2656497c006bd0a26e61cb3a4bde5d3cf06555e6b3557807119823804bf248d0f4defa9d78a7e5387dc4a4ebd23ff67d448e62e961d5b8f71fe324ec1ca09ce0b65d54a222a031f6443924cc405b5a81cbb274559b17a736d27b625d9ca5fedbc35b42110dbb277465c13ebc59cee79b3ed4f1bbcb3864e4c506ec3354549e39045e6ed533f848af6b10962dc99a9ba42cb9cdd4a3d55052cd5a2c8e99826352e5d1ec6a897dffb8ec1b6903882a685b4810227c2cbeb416d8987cdaadcceb491e40e45b272abef6468fa42d8bd1baf3a3a6b6e659a10732c84f7bf1a6d3ef316656a5d1b5aed213d76c9f9957717a1091c948475dbbf33183a4c44b4a093b67602a78d4485818077ca55793ec63d07155e9c6d4cd6d46d7e5f8e7af8df4b25ced92b9da0b3b8d93e856a4d43ac617ae7fb5a665b993252e410574df894c5198e5992afa3884f6d5d24d4dfec723984317f19323083382544b507b28f2d9813090db93bebbaa8b28097fd1bf6075a71325eb10fd120c0099cf80ed79acf6b692483b6654fd82a00781aa095de8f3d233920f0af4050609dd5cf2961c59e7888e6dcc0b37b9b54aa09177834ca85b4a6e646d466c0e4b3b3c948ab7d3634e82b46dcb2f06ef5b4c22aa75dc3a9f44ba92964e951abaa5aa205171367915fea431f3b26d6da8e85b8fd7610cad07c2ed179cdeab18aef5b0d1ad8980cbc4942a3dc1a017c9a362a9e4766b86de24b87270a67a313e46475d13db5635b463780cc012e7e968167084edb940c93278b48365d130faab4fb6edd09e1a9f8ef61612f7a76f5ae8f14387b1a17c821f9839342b797f4fb989d5881b8db8fda6d094f44da8354b1592eb60de94dec5b3dc6152d225e9a9e42140e3ebd99f074518c720a25b78f5ebe3427eb2928099bb629ee9823537f72bea042c52079d404726cb25bb1a75da9328250805634f908322ab74fcba9133ffc4f1d9a20b5f15a70edc2e1f3abe989d5d60c414a2724a38d0144cd59962db274f8d634bba5b50c2896b6fb11d8360edfb484fabbb854205de20eeb8493f41f04273cc9ebafe022692a5046a5162786fcd9116bdd7c9ca521ca6c69e86a767f2138ee4666decb64cc3585776a0a1fac44791fc3019ea032bb3238c58e7304d85526b057022fd9fe0c2f744b4418d1e37ad29c58c0b0b9648a2b8d9476594c3915eabbc58aa96c93eafc408a1c9c036edc7d351f70651934e8fc55ddf9b61dab86e6934aea054a2ac222b54892623eddc1d985893c2d61e73cc3dd12bcb025940d5c2600d97fbd7099414e990198d5d14708793eb9cd7062c5b2ca4d9de0200604c650064ced64fc80e9b3cf979b9add39a36f85dd1fa1fcc1c46fb80435a150101de53a715b5e34236e732df5beca41dc36489ee6c620ea83262628743a3358de68fab9729126d55a18bb758983fa8b58dde23dc7225b44e2b58e07162c4445335495c938a0c31363c566a9f4f86f43e36609cc4848adc23ea1367d120fc174a339d1a7a52eaf8abfd7fdc2f44d922fb226c72d88961adff7654911d4528aac266bb54e1f4417a181aeba2db9ba8d4867d58458abf63cabf42ffc8e0dfd1c55d1579809589907ae53a38521078389ce00b57d89cc6ba708244b663854489d957a38fa58e6c43218d922bdcf6f49f2db6f11d3c59ca36aa7d523de3a1ee6b4148284063c340cc4d2ca63e7cdcaa8021275fac1de2a2129723860c9f61031c3d35ee296dc451012acc784cd25b7ba377c3022dea30234354d681de2edab8d1c936d1e374ba681047e5931db6e403788e3e888f04fd9eca88881a388f2f35d964433e7fd0833c233aab0b765b7431ec82182d0b4d75a44893b83d9c87e1aef731305e159e98eec50e50967adcd7c692387ff64f213172a85301df1a169636df1f991e45277b95f231a64d42d0998b9bd5ee264c0b9ad9f76792e530be8c0a7a7e0020c98f47f73d6a1581fcb01f3b172839552456221e2314724a29b915e57a05dd07a6b0727245e356d13e3e65894e637b2d05ada044fb0e6b11f118dd0cefd3d317d31e96db9878880b9eeec831c83ed3bb0d3273ec6571bf6f8fada1fab711997d3b29126b8741961f8fb62ab25012c92498cee4bb986b3c2c4d66ca6608ee9f5ec7646ed43d36b0950f60381d1f08914c4728016c36b78a0e5abf8051c5428b0a741a64a2c11e3e65afe4adc681b04eac9cab98fdc96e6109238e3b919972b15ff09c58f030836d6cda2424963ad8bfbae420e469a49a24c76cc8c49560f9778c857a3f79a58df22148d376e910a884fb22556c6b42b7ec44c61783bded08df96dee4a6c4b395db4d8de5ed81272a61bad2ba242b9796402ba97493ee62da1282148d2da6ed2bbfaaa658be29823785d47021a3b8c84d2e57060510dc7fb1e901e465f49612aaba2b3a531a5028199d64df311122041ee9072f7ccf35f501c2e889c1226c5eb6a1b2c481b6a84180322eec52a07e3688064991fcf9d8fb8bde894e11d83de2f7c3eb0f0f9008ce0b691fc8f84630dd5819900c84bcd19701f61071c023a296c1e3bcd2892e446c8a1dc3687a56a18433ecd9a1273c670698307bfd42964daadc4d9df4ec14c5818b2265cc2b26236c3ca30b03e0ab5839ae2aeb07f322aa19d69832db699e66d70cffbf2ba1d50cb723fb4c88fa5ff0045300abc39b1b3b500212274f42c1fd2cfb92e9da96e78b0967e3e6146bdf93b192452836728996af0fc55ebfa7cd73df89adf6607c7fa4b0b4c279ac22260076214ef932f2b794bd556b08c2510a5670aa22f5882b72f46a8fd671eb2e96fde51453e47ea85be84da5ea5662e1fbfe03f3a12d44054a50cf6b96da37fefa89c2976ea31cedf0191ba45ef0074347aa4a75460d57f170690f37f2c3e2e350d06c9782c8212ebe92cc75203f5dc89286a9d344b83df026e5bd3b634fd6a2a22b5132b7aa1fb56d9a1f0d18d3fe862a3661a2e1ca782deebf1f81e8ffe8528bd42bf0a45401aaf81276253279bb6858bc3c9574c2a0b4288135e2dd082b08187249e5251e2ea9cce798dcc5952ae89ee8c39ee04fec0f324113c76bfc6489fb501bef1899b96986cd243ffdc4f1707b95e76d3542bcbdab59ac1a7babf0a2ed19d0410613b98696f2a8203206a17dfb8936713b051576a68919bae21e884b66b23996155b2cd501a3009d21ad0a14403842ed6347d7817f0fdb65ae9504e4503429b4cd312ce27fac3360307e0c15876e98193843ec1f4b98210004c8a9b20bb3423c8686d6cbda36b2e99a5e86ade92290168e9a4d200f53fde78f13111fc08e111809efc1a6f580f4eb98357596e291bd72b52c0c54051b57231ca4063215f0eb327eae188f79a10842032eea1bd9802edad0d0401286bbf9ce79fb730e0d18ddaf5479d4d8253adf3f11923daff4e08d6009e4c667d8dae932a88f4a038d0adfcc45d3a6449361e48175536384426b0ca751732b8975d24a4ba9179affc8642daee8a999f0c313ce5e630ead987cb3b2527edac1e79001cff41238a9232aafeeac8ad0fbaa3615dff1d8565e305223e06b82c776fa948ef02b95d2d50c7cb720c6556de0ea8a4441dc29b02c7d28f8cc1ded4512639a20383c019c70034bd7e854ba07a8d653a3c7ec707675e7a20dd510563c5177b1ea76ef9a17af9f7d7c529c22ace19a34e5e395912c246bab9be79007dfa5eb736aedf49bd75523fd2d6f79256b73d1b68b88eb70ed3488f0bf968446559bf686b9d0ebf738abaaad8aff561e935327804a966c9cdedb44492759ef24230091dd379256dd4260becb91021e04a353e995255226d829e6b4b97e00d4a362e4a1948a304fc3696e223da8f5fbfedb30c16376d2a345f3f81915dd5127bf7c46db2438ded97cd7f248ed728d5e1a4f79a519d99c1be2a7b796ed849b0dd2ef5373460089605cc5dd77298eef4c36511b4960affb8b9bf1bcf69c048d663143091a87a57aa598a7d7558fd757a4590ca408680cabe3d104970866ec4b3e6462498fdc21df5493a51432a6864a6fb737926f636c7b145d99ec21da902fc5c5c4719e5425619196de195bd2e0e202ab53463f3fce50de33f6a91558ab1a32447718b048e49414b21034f33b6c53fd64c818b11a85550a6f071b5449717fcf198f39dac597c43476654b0861b2bc032241cf0ef012b4e5897ff821c141243a5744b348c0b188f501bdacc06804120df2b4dc83f03bc70b2667c5eaba9afb4846cfda27f65ecc4a662da3ac0381abdd5ec8aaa9d5444b2c4486846169daab6a855902932117b4e765524c5c274bb8cbaf4c4f1938f903f48375e5e73730d855f464c2666d069ff231fc0d31e3e210ce7975f23771b249754fc3f9f4d63138d8be76cc0d590f195dc25e0493c938a6a9db965a99d1ffb32a2b15646f93455af4eec972eaad41df570ca239bc4c976de433a8dabb61ba8332fdfb1cb347b7f1e1174821cb8ca3cc88b93fc38067e2c40b554f80b5e1778096ee27e5912794766632ced6125c8859ffe61398d8c3c5b70c67b0c8355289f103ac2a6984ec2f612fb4cb4e00bd45a285d340f62ea1804734644940daff47693bff3ecb44cb58ade8d4e7f2c489b3a563d08c40e7a2a33c1368fae55551d4457f8bd5b898486624d492de4c3e813cf61bf9bf6919b77e89bcd112c59b8cd7a95527231dd306b2d1eefbeba95c331e278409c0c70ce1ea0a1691f902bdbdd799be610017afaef9441d1999cad15bdab116bc2f011032d412be00bec44c3984fbcf1c9f15ed8d8d61261a9ef04da58676683619445f737151dca7d62bce92196ee3da4ddccbcabc7d9b546b1e822a7c0ede1a00fa0f9eba0f32d09813efb8f4272a729ba83bd719233f4ca231332990380023456a0d8fb5986fa0257fd856c0b8b60eebd20894505b1a79b312029730a4d8013eb8cc3da94b2155544605a99cdf119299901e19d0c8074814a15804b7d451c2b3e1716fa25993f635d999a3af79735c0b8dae94d20a6d51c4a7e0c5c27e55dc33578a5b853586efc0135440a893277c9bf141e619f06a5ce0222ad5c0f4cafaf862bdfa4c1d0d7e6007ba7a82203e737f7de6930e10ec349a200a9649506a4b23c860f829c4ff3291caac13ae690443a62414f2e15c7104b48346cb89e9e4a2cb89d15c02b3fe8e55e61ba7a57b9c82cdf0f1bee16f7aa1949d99bf0b9fec24a000cb798ef2d756928b644dca755b84772933a9d56d0dfe25eb47c61112ad29b8b7c9782e64a2b6dee6e1ff6045cdbd4dc6fb2113b5f5360fff072b23bb910c2b4a5cdb5078949929596db3e04b5a51e2de86c0cbcc44c97a9b013fd38a12f73004decc1c43d7dc3b707ea2e60f56c65f71eeac0c0800d595ca3fa1f3628083b20696d2676765d3a59e8b85dba7b71ef467dc2fe86f55ae1d178b6df6f9de7a2c54ece79d935b52c69f89dd9b0775ea5f709fc66e1b663c35277717913cff415cf3759811d8b9e3793be3e78e4ac6bf77d374e8e9d3980c44a91b4aac8cf8c82a4fe7465d57656a3fc035b7f32447081eca6cb15042d566415cbcd74a01a4468ab708ede2d046de49035fa1cb837b5a2a5baea848adcfe56bd3dc2969daa66802f4b9b423d05be40f7f24305e0bc42258e578c5f2a2fb0a3a7b0db3aa5a887b4eaa9c64bbfc8dd1e804915bc2dae22ae6c32ef2b8db59815d5559c04ca6286041064c37a332c0f83c59c516b9db8bff4eb0f3ba2f3ee3eda223b0abd0682912996df8f432b28fa1079718f10792ed271c37e9589b1dd0882aa079f9b8acc47c94e46eb15558a72e7cdb094087188029d60bfcc478b422b17c9f58cd160504d0ae6de6058cd25dd700bbf12972fdfcf7cae2efb2987b87e1197aac43e0291f2f57ab7818c3f703443592d46af71e1b0274841328ffadaa68f25d4c7e35453039f6d4ed071704212188889366c309d7978ecc73e5dfe31c675f473aea5b422996f3d3b1d5a874667f7738f91e51c8263bc73ceeeb21dec8f153db69022a6ba4aecb0e7dd5daa6e694f01decfdd58aa3e4b7f8e55c0d8f6b8847c475dfc09a17cdbf59d8b4c0adb1a040f577532c09736058fbee20d1b17da027e3d506ee481d91ce5d970dcdf31a57548d5f013712d5f261d1d67594f568433d086442650104d79856d677624b9ab7ef560cceedb48f1ef93e213e124788a263f2cbeaceeb1716ee63d4661fa3e204334f948a249ae6b0f68e48c43843230c8002a794b209c085793cb103d31e2766ee92455b41b4159a1cf93cc05454af5898725c03c9813cce837e19ad3d9f94d22c6b8bbb7c84352d9d244a80892c1bae14a094e59a0b2e6bd4810f2d5cf7270bde95ed0a337a77c27ad772bc1ab7e9d8d0bbd4f7124d07470ac5a1f51705f144c14b1fccb443551e4f2cd025da71ca188924b2b85e49cbc8aae10c19a95e0b74efa5d09ee69dab5d2d91841916579425c1ec8e3e4fa099261011018520449276a0ccb2fa252848435b03a5aeb8a159e7034988314fa4ab7c0e4687965e0586464e79cd2a25615c7998b5d487d4a08ef011e39f6b50af2d75cac435a5daf8ad1edfb401a57d834e194c81d91c1b15a406f6a6c09abbf9309f5bbfd9e17dc8645b4c1cb7be5e32bc8e94b7a27ad20ae22fc49651db564f906fc15259237e4229119a15dbb74a270463524b1924ee1d46148c8f3784ea854531b9be4194b00b2667d226cacbcfb2f806bcd3c900614f5a1e4acb823710fbee902e4d22ede855fadd69d0c18774237f45291804a87668bfa66d7f49c7490ae73980771edfe3b227c3e6e417b8c072151c1a7d2f22fe6dee7ffc01b02176cb97d7cae1e5b8846299720261b1c53167568620fbf4ef0b8045e3b82aef55416ff63432f6fe11970c123da703605a87bc877d0114be165f5925bd77c66cc8ca68f0304909e46785ed8c662b1e50e6842adfabd60900985537088647410e56979ea699c098b63aa2942609f082c6d11ae413dde2c3fbb885915ab630b50385a264ed6628207abff3f110838842e87b70b5090f7b7f5db9db5e97c2e1e8ae8b01eb495310c12b188b30fe71022c94b0ca09a80e6373ef6ae772a526d8c7dfdefdb9b22a373a47c1e153bf9df4ab3910eb4a170ac0079dc3d1ca1eda639002d1b4f4366e1e3ef3291495575719db5f3d8f264c299394211f5f417b0cdf708b0151a68c757614f41c6206fea18e0c40d13bbc9b55aa4f73b2d197a5f9aab43bbc2793582a23ee0a39b3e28a7cb286f30a6619485c54191a9c3696b7f4645ace388905d9e74ee7aa09b99d2aa425381967ea4775563c452af1c2ecf98a677e75615ea43c60275860180d48f618469bcf32d2179ce2cc8d6454e8ce35d016df12c70eb303a3043196e0e7d2cfcfe0574b5b463f884dc7208c60eca7d1bf4d937ee45564b3599a491421281fa4c0214e8cb8fda6cb623184aaa1df64a9849fd00cda62328fa558c77be28fb0ef9473dd60fd6a6696eb196adc05b7aa883b399146e183e45505b34f634069e4914fa41b9ce5dcae2cd2f8bd0ee67da6c06484e9c5a27231c7b0a8dad730554ee7cdbad1a123fa0e49b6f83633c799a9017107099fd2397785e30bccd66a56b792ce06da9f3ef82533cc2e462a6f3bd4803cc2ccac05ddd66ce3e648947dc0f5841b8ce019437c7bc807afdce0a91ebc231e58083fbeb65bb737fbf531e9bf16a71518dc52016aaab0ececf3b65ba35a465365d894b1149dbb7189dd1260af6d12d238f0e40ec9c4fed2a1d9c0a1e1904ba44dc6e1e9859d96c0553e7eae08e6b489fe2fa55f5b5b870b9b485ae13fa5eb3ead915ae8aafc3cf744c0a2b52556312da8a0b67650c4e9521312c60087c1c1078a6548e0d529863d44b44546a8d06c1be28d1ee96234ce9e7b313d0a68ed10ca5a13badf70a6d0d4496ccda6b95f48dd8f945bb5e438e435abb72d6508c50715c638bcd3c80f37eb5b8c429d95cf150143c7760988c90036eaa7d885a03aada6b65aa0be1e042cf7437e688c8d143832ed73547ddd925f717024a5fb10bd5e7e4e805b4acd677dc16c3e9d83f61990ae292014167384c1a6bfa982eedaaf29477ce3aeab3cb045ca8f475834d80f5e579dc630638c345305891889374aa12e12a2c204798096cbd2264e9794ffea958ab6a16bdaf905a1285a45bb900fb36b7ce9ccaa3ec10a097210d2d2299ad78df5a9e750b3d8510cdead4fc3b870a23d18b6260bf54219c1dc42395d01ed440fa712d5488f65010d3d82439b8a6fa1642b748b22e1de5338d138bbf18eeb24628f47c9eeb4ce41b0ffbe5374d5041ac05eddd6506c9fe40e61861414d2dda2108fc1ba0d748c4790b8913796473663bea8b5b0e29120b69f5cea85b09afd1337627badd52c921867c449beb004889af1c3099a9e897ec770bb12100923c10015aca2329f337a4ea9f5fc8a754ae2670c37fce49b83afa01bce09e06470d6a7ecce355583a767152ac8443915adf17cd2e724e0d1d91948b425ac41853f4ef19ba33c9e3ab0b877b533c26422a56126d5063c7d57d36d26632cad4cae4d2513e0187c4bad8c4f227196252443761ca85c52d3e25883dc4ad3c59c255af7123e2ac460c7f448b0b9499cd64fcb87d570781477055bd16508404ec64c76b365e508e13e31c95cd4cfe47074555bea7451c551551526546990d4decb989eeba257c37f4fc188cef8ad0847f06c95f05ac883fd547fe5f8477ac33c50d520509435cc83e1336c14b8b3f8d43580e6b413a50a0cc1a010e14cf4f8cc1982e666eb0bb505a00ab3727a6c1c594b0ba0d663ad7521f0017103278e88512f89dd4b68d1bed30a9696f795c6685c1d512b8908cb02ec0b0e39d13e9b996e773116632f020c241271f44e6bb912411771ec4f10e6a38ae3a2ec64b5228c88c8073d99fd392d43a13f56fe61fdfe15ff6e37dd8841383f837c110878d6f840c3f5febbd352491c73c7b46a9aa3ce0a03bc899644b8996b4a9b7b7d28f2fd8d241e3ee9f74fed5983ee262c6d73e769e5c11a1a739406f4dc88712fca80858453024fa32afcb08d44cb97ee2d6c09af430c9cf3f28051c4814ba80865ec2a4d2cfecefa846869130aaf1ef3571222e063069332aea68ba089220b9e2e3704f7be1397af5284f7b46156fa689e02ee21279c0203263c76698afeb0bdc0e0342c2931692c66202fbccab4ae204abc78bd804ce139b5d2cd86ae9678ef86bf017535afcbe302a2d62342a3d39c282b71aab990e8ba4aded84477468fe35848ec854b25f1d8224994af4043f7c32c37cdfc6de126c78565fe32b3055addae90e59f0e0b24f6f9028d3782e31cbedde46998dee449064cbff060fd02659742bd06551240835e3915e30236f8c8d1f2dd3e84caa44f08ec734278ed2d2775678b8236731e381ef0fd1fbcd9c72ec1043a59108fc567dce6c8ebc0443c32d2abb5b69cd6cd7be52fa6c9762020839f5a83154c1b66a52ead4b9536e705abd9a35a8a3eebec33c208490b0462ccbc8934cf131b7939ee61e562cf516989add2a8f3bb6fa2bc5f6735d1b5a56c5180593a537515a5383b2d08c3f44c5205da78569596bbe838f54b31632f3fe2d07b413c7b5abbc0da791b233696ebe6f651bb4c16228363cce68ab416574d4ce102eb3d090ac197bd8cc0b6b9501e51c38ad836f14e0caa526c3c62c411a3c2402ce558bb4fc5e40f21f34901209adf271ef8f10f9702cc13f169a15902e673adbe6c20c314f128871e83e7ec2c445a4155c5e658c18f507fa2ab7dfc3637ea18d91dc8028379528c10f2e81e4e44794f47bd33b7c0b36c2dc058a9f381e1f6c545eb7684365cae326f1d79ab783323839a08553323e3910b18806dd50373a5c0cc126364df754d61c81cae9cf1140a0e466be7cfa05454df41a8e94cab8a73f4e77947d5baf28208e80fe52a84727e4583b466e09946876f0d6352025765ad69cad571f0e929cc18a6ab6bd7d41eda8bd5c2668852882526e5bdb8f3d947083342e4f9b02b268c13c9523d183d9193b54947f8bfa33e092fc37b00da7f8259168cf648689c874c9847a211bf9f11b10483a6f1e992452a844e2e942f3fda31ee66b2f69e423e9d87b7b741c28dbb123b867775f2285a740403c1fe1f70ca37fa444798f6bf4a3767d0c8f62ebfe52783a12ecbfa67aa2566597c906ee65715cf034d055ccee0243eea0d889e7f48977c803cc2cef19a8f998afcb7b71c00d240fb1689956709e1304aec9adfacd255c40035fd2cd2dd43cc2090f78151d3d7aa02c2ccceb88cecb025444466a28edff6330137862ac1b9bac8ea55d9d1a321abae1b6cbf2c21ebb85a00cea7611b7b24526a62f819e65391165e17a269a2c935ac8f3ce6d7629a7fddc8bdf4b3b4d2f72c18c309d049fd396c5efa5ce064c78a9b7dffd9367a8a75f4ef396acfbe773bd826dd61c9ba776745a4fe2cbf0ac165c86a1937656be31911fca0f926a5b5174989ac33e934b2b4d4d8c88f42b41b7cc9bd9db25c8953796140010d6fa3c2371883de2d5933fd0e6b48e676f20272ad2fc4c404610f7e09cb44c3653bcd78241a9c64a1e5bc25d5b5ff38487a5e40127a23ce25b11f6c35da4457cd0d62a1e35daee35f56a41a96cbff66555d223122321a8857edcd2a54a9da1d6372bbf92befd2d89552e545a332c17c02c650d72b5a1f00e7d26841c55c11e8c0ed262e9b4a62723724ea12888ecb5bb619b07634494fc6c1a0cb3ca2544cda03ca70367d5b3090ba4a074d99b82bb83a909e855b61cd57efe5a24572dc177f2be3ba74494e1b7cdf28641ee726ebe9880f3c36b2030c8410080a955c64e9dd7d12fcdd220d5c0127ea6a0075c3fbf0c87864655193846cb9f7965b4a99649201ac075107b6072c1cf9ea5c25d421c40fa4b986b94f64e1338736d8abbdb237be42a05d5ee1bce0a5c521aa9fdb7395f062b6811687887efa1096964ec4e7a70f411b30687a384014f0d215d01f7c7422fed01341a63e3a91fbd003e1218410ce331fbb8f852340b1dda7836010057c742250e9a107cfbc262f2e70a8cfdad9127cb53310400021eb717f08477df521fcf4d52fde118f68f6ab9eb9b6d1999a723a4066d826bd76223cdc824c1f227cf58688f095b3d832b542fc0dd0cb834ebd20936af1c416443c759cfeaa6367be9e79ccab712381d64ef55755bdf486a87ee8623ec2270342880a512e3d3dee300a1fb729ae10ee7388c8af5b5c1002b643af5df6dc58b99fb42dbd96201d66799af7899279063a6462f070894c1299a49d26318c09f38351172937ce38910229c00441c50c199048f162e68929358040030c3e6471822a81132d47649220934406092d4fb6e83079d27ec23080c20573d2c9725a1d8e68d7139001d7e5c149e346d92f18718072ca092f5361c934b90282816460192a308ca4874b649a200571650a9923323b907142a609992664705801ca0a505680b2029415a0644175a69d524e29a79453ca29e594724a0a83185dea4045d114b500e6090ae986243494200903e64a5315269d110c62c0404515a143172965b808b30296e2593299260f97a0a2c828792a8b2e173432442a316ccccc90c1902038d4c36197203cb3ce33541454187f75a44e3d4a2191cb85e603e9e0f2e0ac63b4a8a593d2e974ead0c9029b983c5cf2e264757871824cdfff41155c18b664697a0aa2490c3f1fbc42c6991448c9e264c987333f1f04f3c112265a18a2690c120e3f1f24a304e53f58861502262e524451c225cacf076d70030719a878b141105f7ef8f9f808cf9319aa6cc961290cd2cfc7313c8c41d27f5c03120ec18e1a8401a9f876c8398686fe839af4a2972c8c3c8e7489001d5e9cbc60f13e513669d1cbd2c3a5289ca248fa782333dde8ecf9191925174d0ec10d68487c8a7d2bb0f0b2fbe24565d0e56d809ffa47e353afc60d23d3812eb88ce4d3118a3a91e7d68839ae0cac9442a96d74ae2eb8dd91669963184604cb32ea18a5543ead14a77ff24796744aea73ca8ec8a454fa94527acf233107e4c253a327b55be666df2d1c395272520402a29f0f2ed51475793ef31f948267e8c759ad1e9ea19f1b831b9dc41cd25b71dc930b97bae8f070a98b1190383d1ce9d207fceca5170497ba182d7509c11f41e986dd1e3d7a4750d09839face674a37f68851faf032a52b678c31b64b231e4e8ffad03f298d3409a1941eafc6919957a0b5b25ce8f001d9945fb5188679dff433d5b9db80ea75619763589679e51e737273410840051054c88ca318431996754420df18628488e8b37a619399903c3e1e0778de79ee9e695cdf34970e5da63a7ebf97a7e8663badeb71f96caf5da429e222454a2516c3308b61514af62e4f7a4b19190b8e3172471eb255c99dcbe8372ea4bc9447d7b8dccdb10d28f5c9dfecb6c52da6bce8352b902038cd0f3efa4d0e47ee96f3d12d12165d569b4af9758d6603baf7a6b66bdbaee8b68bc67df4ad093b63b310ea90117d3b4215e6da7c741935887e85a8f1d8c94e75f1e76f9ef9966d5adb1a736c77f3e8176703ba5bceb66da9cd664bdc1cdb70b8f57e6af3d8673b139944a414c24e41a4165054bedb2eb15fbd7a59e6b3fbee676c6b8c18c7239b727e193d5299faac7ff763adfffa379fef5fffaee7b6ce9ef2db1111ba5ffda66ccaa6bccf4278a3aa386236aa32554d794d79756b53356befa3f2a353a0f6624715d31220b12464913023c49ee049144d152ed47f5628034b4a28253d5c52e2ca439f0f979488a24413eb00d91a24b2cc5d564d0f7deb996b5996c5e5b7b2c7c6fb7a5a35ded78a48d76baa4d2a4ed36a1c1aad566e63e330b25235d168a3f136bfdee62a8fa330af7a514646469fea3ef93112f5996519ab95117d8c469e763fb31e599a5b2ff37c6209cd1387803bd18df8c848d18873a3efde70de0cefc6a39e8531ca4e21cac9d122e0b0b146a1049731a2904161505eccc13470117f042e8f4b3a7dc47252d9fb5a4c03b411dd4a713f46621adab35634f65b47a0c11d975d56224232e59ffdeb5fea39e5345d4db781948a26d541be517b605e31bfba946bb78b97fc5447bd7699e6dcd920229c39734606651ee7e55cde1da2e15ea22feda8f2cbf0d65b8352a08e1304db3cf8d5632f76d7ec125c5079cb5bac164631efc7a98d12074116d3f832d7eb71f58dca557118d7aad514f6c522366374799f11d4a17d8c4836ce62b55a5f34ea2b1cd53b119b1e6cccfbaa8d8d6f542eec9dcb236aa4d51737f3da3c1f1042f30facdcc62fe72d022bcfc683bde345a0c6a37900fcf961e5661fd736aa4ccc2fb4d3244308656af63cfb73ad943a8d2ab5d18b5e97908f1f7f773dac0bba8e18f31f5c4a7a5a32220a2ead5aca043c3dc0d39da7dd534a6bef4ccc55290ff3cdfb58ffd5e762e6e3baaec66e602a327a1a0f998a8ea04e64b19c9efb7087991059cd8098c327b2ba84114cf0c123b2220db4d15e91dc09977e74fd8edcd5971b50ab4664c1c8ea89aca6016d34ac483e560f1108bec780d7e5410ae1755d9727236b3a08b375822239a67f9757aed7ac1042a71ee41b420d398ca6947af5ee5565d827847be81d61d034145e3aa494d60e7a10429f1e14c23dbcd1855a65b79adecc9e9197f639ce0ff5351a3bbbebb51a3b3bfa9acd4abbd16468dce538aeda641c0db7719ce522c751c9712a8ee3b09556c3a59ae3aec91c94c171333c9092de715ac9322ccb325b6b36e79c13091d30cc6bf56093d2d78f4068522aa4aca79828a57d2ae516e68039364fa5bc421d99a7bc4f088cd25a70f95588ae727ee2badec63d2c6f99d674c50a627e01c8734f8039528e698fb9853936c7fcc21cd631c7e00e219857a84373cc59e92f5f427847ac2ebdbb0c6a5e44b21d3f752e08d1de820a444444440ef0d809ab710c09325e24e88252a1ef22df4d294ba65dd05addf20ef95404ea94b65c75d104254af61325fce81e29a594524a29a5e48123b2e27765fd707e9410011c3ca494ab9f61c5bdcc5bbcf470fa650f97e621a594524a29a594924b4f4b29a594524a29a5d4b1e2ceb0425b5ab5d643aaaf30f4cd5ebbcfae3bc68fbd8ffd72e7723612fa3ff615865e3af582b61e90046c033283daebe5170512d45eed56af23462fa5b49e759fce676ea96cf54e74ccfbb2312dadd5922daa45cb98a418eb6dcdf9baaa461fb94be7a3c05fce2c10be3a9446e464c2421dd531ef13ea9fce602aa59b8fee2e66ee8bb9abdce1bb7c5cce3d5d76213d9f42cf0771075e832ba4e72feb9f909eb9f5c0bc3add802e9942cf7f3f3e68fb36efebf9cda56736dea6fcc3a1e3fab77a7bf3d683b701781b796efcabecd6fb36d7fca663b7e96a3aa84a39af9ebd6f73f9aaeef3017c746d96f9495debe4671d7c2c859e9f5e90e418b85d4bd9542ae57d180b2e4eca873e2537efe320a53870e0c0e1d399ffd511919db3db5a3f9b6faf95d2eb32a169a6775790870271a75d06356000c738c7e1882c8823b2ba69a4677188318dae58cdd9d46380e7f3d3bb802daa976f92f2c03c1e918515e9ae897951c848641145d6ea6df7c12fefa97025c618636cb57ab4c8a38236573840649077c5652f4274698d4f569fd795cb358cb55f8dee227f5d770b6b694b47048ea7d6c07124064e81fd222f8dbc949794ed90c554d2be56afd55615b25a2721abc85f2c4c1a914acd3e514c504f7c1fe6de8aee77bf65b5f7dea0f847f7834e5bd1658faaa269c55ead90d56361ac85767a9d6ee76cca3aaed9c55ceadd845f697907f5cbfb30309765842cbec1b469fdac665e5d568f908575e02f67cc6f60aef116a45e9eed1734e5e480e085c7dc31ba5fa1016d4410bc68328194d325f49c1bb5da6b35c395c2c5d5693afdc79793a3d1ab47a540998753bd2239cf9d8d2c162bc775ba76b2cee83ce7ea725c4c2e5aadee1c2c53f90bfe2384f5d4e691c09af5ba01d9cb7ef233ec7eed2e3a3dd93c2997ad54a7033dc9b591c5ad299ac71c18336339fc987f1ce73e918b6eabc40922fbb998437ec6996759d6b17492b82b48fdbbac6a047a52da2e2a1fd235efeeb346fef217fcc772642ebf1097db4e88e91776cd8b3d883db9af7d26b10c286b39966118369f4807484fca314fd6aae07edcc77d9c3d91652dfb4025e69e761f8f8fe36453ee72b155c039b9264456742a975f6004999c88f1d16ff4d565c509569e384a53986b98984f4ade6656b9327b099dd29c1b27c87c76f6a2d2529355ea984b6451aea361e509c330ecbaa833f57082c8a72e9f7a56745164456f0e8ba5d7f47cc0a75ec4080eede92c97082262123129c6a53f21ee449fdc44c447563ac1cacd60a8adddcfbf595f8daff5e1a0f1afc73f1d58ade934393debc6bceb55d52aa3c33a1d55e79fdaac6a881a352d734d738e7754d7bc03de215df31cde415d7ae617e6bd01611f638c31c61865f08de85797d3e9f08da81a82084bd264ade17eadcfe68816c9b52474419b5b4f620c09d52d90ead6fb827adbdc7640aa6fde573d83cf5c6b17c4ae5dbe7597db2edbdab74ed38c50e2929c188802cdcbe72421a8a76b57477d7641f40aa2ce41edbd012959a6651a422e3f46f089d7e4cbe7e5f5783ca48df2c3f1892c1ea11559b127b2a2f7fd795d570e1a470707c706e40759ee693abbbbaff60dc8a75e1074d82d086d1537905eaece4b66e631b2c79561b5753eeb3eee694cc962462cd6e9cdc8d333a54e4e521931df1e4e900ebc5cf69e2a6ea4408c59c42c9afc07b3a0008d2997fd0bd1ea42a099bdb356bdb4b8fc93b707c820b2685875a5d3a5f19c5a38aeb4d77ac5bf05f0ed9f00be95be3b2271048f2d71bf7b395ea9ebf258acd67f3dd5bba9e1b6b3288f8077a217e1b484537791cdd301de890e829ae432f9c83a7c8ca208df880ecd10654af4aabb1ca1e722cf462e6e8b8bc33ef4ec4520df504c81b15564c56b7e5c8f1f91a579cc11270be1e69cd5ab57c493f073cf79cc6bb774fe68dbdbfb52e03ea87de8e306d4de5ea7bc707abc8e844f2fafd3a75724b2a45b2e30ae58c4d7545246de9171713f7e0c743784fd1b3224086e409e103f06a4376408bb0f610f6287ef84d570361ffacdd3e06f14f6601c205fcab7944f4fa55ce36b083fb679990ff843f88ced3af2e5237e66adeddab32e7edc7a5c76eb3e1ff0838444df7cfae6a5107d0251cfbace7cdb7c40aff6db8e88907c27cfcfdf2505450fb39b05651e0e90e8733a5f1b10ed2d731b5feb6fe8abcbf8b6e3332f03519c8050619a02c6004ad01aa66ca1c195f190698a1074cccd1e324df1e1caa5f190694a92abe87af090c9072fa238d12beecd43261fb65c3fdc0f1e32f940855271ef43261f6c905faeea21930f2f5c4c2eeb2193142de60d973e6492e204444a13931424350f9962a0019394234cd13e741d568d7ab176d598f59c54ce6c66f3ca4afde305703cb00dcf333c8490a13312bed23c7c858b7ca2e98b53164f63a0601025033116802476e0ac564fad52a5c22ca57c99b2ad4b62a840299d4e331d056de947d654f31e5494190d5a19269892bfb0e9f8c8969ca31be40b36fcf4c5338f994898a2e44005ccd12f347de6d806944d16301dfd50c77c95570bfeba500b94233f737c2005f0ed70e9db63e52ac69d20cd8622e5c414349a165b9c60826a71b224c5644518190f99ac30e2b9874c5678f162aebb95ae15045fe090f560c4c3d247c76e06430d9e600853450ba4a1249678818b19229cccd0821f99c34b094572dc618a8f7e7990b2c30e1f91b89795236b842063db745ec2200a28e63f28060e2fbc945ebfbcf48b83182f9d63e2a53bab65c44befc9a18b97ee73e4a5ff58f2d24b78f2d24dc0f2d24f70e2a5a390c54b261dba78c9f4c4882ea91e1ba26e50ba218a973e8fa0f1c0061d583668b1618a972e4f30034ad184066f08a6264b2fbd9bd0e1d182974d2f434082972198e225c7c40b499e14c99fae3b72e820e0a3d71a9a60828409121f996ab0e1638a8cc6524aa731b267a10d293556d5388dfba8f186348d0f3d775f54a968365775431f198b5e36ebf46692f60a8177f05f8e837744bf2e4f02713fc9499e17fc47083aa4cf9c9176ce0e82f9e63e30dfbc4dbefd2e9fd4c76587fee2cfbc10f8c6ac3a2e7ce27ae25b24a06eed0677daaec4b8b0b35454a954eee37a43facc99a1576d9b1702dfc8dc761f8e0dc8076f238b85fa86e699d26194352e166f10903ebdb81ae27aef58e1b88844a475d2a54fcb2c8b54d324efc85c4a2965563720ea725a49a9f70935abc697ed1b7ae9655ec3e2c85c76d4b46d046b9d85b79aec34cd33979de694665d8b6f48293d73aca5cc5ccacc356fc8f599cc780372e910bbbc95aa562d57e6b6a47e75b6062bb2da755250482aa167bf6ee2a143efc301125fe20069e221d3fbc4ae01d006f4abf349331cdb886fef24a8831b07dfde37803a261f61484951292e45272b574ddc466a22a08e8b269aa141d415ed3c3727e0a8eb7fd583872b32f76b242d488dc448edb5decb71ee2c5623417160dc9c877ef5091e697a4d8494fb452824a84886990c8c5050078c6560b401ec23b063805d03ec1c6047e9179a9e52388513164f62a0ba880a83cd401c10b5f0ed3218550f02d0060d1a4a404a3ec685599ec6ba0feb17da6856f25f2341809de2eda47628ffe251962f425d556a9b5795daa6d7a3a3a323f6329aa7f1aece55deb7c34a79df015a09b01e13d7ff8b5050cd138fe04efb51848a50ff42d453efbb2b192ebb4f9cf1d0a573605c0e22355223359254c269c2817167771707c6950fbda14e77c7047c1f00ee74ecee8edd1d7b058216d7fdd3f2ba69d0a0ceec1d0e8c1b9f88fc6f7b7a405b87d3a58c25ac8edc59c2f48cf00f4e8dac58711e32f14292b622a7a014a318849f7daeccadf1337d356f48a016f244876ee78d3b13da98fec16debcc2ff791f9e543dfd755dd275fe5b4fb5878ea5dcae176bba157755bca0b816f6cdedd87e3b7eab6d3bcac1bd2988dbad2f9650ca87747e99412ce09bf296d0f8600bb5b563ba5ec8be7115a56255766ce79f9ac994f677160dcb891205de30d489338af4dcb817169da6987039fa6ca750b615bedd21e1c9135dde6e9b2479d2967602619941e3229d9e19d78c82443d3b7a62a5a7a18be7c7b42f135c0fd27c4a91ea61e5ebbfd06eeb7cb6e03dcb77337b4016d48efeb97d3fba4772d37370ed1282a894ba25134323afae4474a2f4aa9fbc4219edd15f10d6e676f2d46d91d5b4a6e863db0922953921425e12953b40871113315a0800915285204082efa4f0814437bd2b2809a16da93f6b465f5615cc67ee0612b97e33aac1a2d1c9147d482e33f211e2184160c618411829850524ef84139a178442c8caeeb0abaae1a737c975063984398f1180ccba606a15f1d3ff18d09e7f44bce39e575fd116f54fa802f619d49300ba156a224499109499460e1b690144e08215c795bdc8fe3725c8755a385a307fb814753ee1e8c8ee477acb1e3a4eb9a576b2e3b195d4a8e31b68cb5b3432eb36850077eb465c3ee86dd43334e969c9818238cfe3da79c52f64492f4a5892d26b01256c249b8c8044ea28495c04049966893f00e254f48092bd3c5a23d690e3b87115e3f61d74d78c60e3613be013d7a1bf10d8e4fcd846fb0472f12bd9bc02e4a28bfe8264f392b0ecbfd723e213a4c784737a95a5cd8026bebf5723ff7272e495fbe5891850973cc6c4fc22c7ecc98304f2684e131636618a334576178c7982a98e0b670dc15cdae697093b0fbf269d99dbc6cf4ea3e9152cce910ae5ee9b740a4a50631be000fb5c080f4b51bc8f5d850924f0fb9be3a0b3f3fa1d8b63bc91d095c04dfe86622f886e422f8869643769c34a56cdad939e4fa9803667c69c1492f592a71bf95e5d627c445f00e98f4d8172ecbe59a2906271f9d19de405dea1f637986351aea20e24244f40365fccdeab5696767f31ab5b3ab79edb2b3a3f9fb1a6667a77a2db3b34bbda6d9d96d6f5fdb527676d96b2a3b3b2cd5fb869e27e6b3e3ea18333b8631d67152bd9c46c734984607dd8dcf70ac93e1343a1ff067c00d6886907cce57be9abeba78e557adce7541406a77318c2c5fb94f0bc99f38501efd388247477509fe8c8e9b74eca4e31de6aa63a26e84ce01517cb4a1f220b4b17510dab0700a09c04f8419b817dc0f3047467e7aac18d395a82adb03be4730f420c4dc48f5a118349f1f98d75a6fefb0675df58990b1fa9444939107f3d89394540411b08824099388d0aa6846714954128d8ad09e82a8533020ea513d52a22449110ef2ada60584485a54f29f1028847b3bc6da5864612cb263ec188a45ab9107731877bcd9dddd0c357b466f86e96e9e1e3b138a3054479fdd55be09347bb7068c69d76175ec18636ce9c106838912f8845da94758105984c027ecca11060416041177477125c7a0411de6c144f8be0177c6b897241ad223f5d25301da68df64b8d1b92d8d312e547daba08ed6a541a3a6e6bfd48d4f7ddf8036fa06d7ff8337be9b38e945f50d34f942fc0d880ffd9d87798340d16e96460ff70625a49c1e646889a0e974621933330719c2926d40a09216194e9633d01e422ddf59b064810938c04e6caf7f48726bd120d4b14168b50c422c4619bf47f4873576778c31c68b4e771859f7638c0c2156c54d6d364b518c488f081f47056db04a45af9a4aa552f5c29ebd6ddba08e4cb32cad7d0b75404e41556a4ba5346823ba26758041694bcd910de021d308a23ec3e2c47ac844021caa305d3d3c7c2ee7371e320501441521fe6369e1281b73a4c07d1067504f4e4d4b4a4948578ed82816e15e85c88a27f40eff681ee9ed0292a11e965802e384458aa6277ea687045e91440a72e0430b6248e1e2477a3f7a87abfcc7a2f21f549af21f74f2e13f1825e53f2e8af21f1f1dfd84c23dfc500e4a4e30c98194264896b8010b14588c608a26627ebe1e1fc199a72354c80065889ff63ed8340130aa2001144c7048828a9fe87d108a8a94184ca194e44853153f1f132911031458ac7061049412fc7cece4875010841461a23489a1010f2e94408a1f50f00405647eae089324c5881374d1f2f3f1d3330f7f63a60520c2d4e00551133f3c46182f2e000388235954f02d110518635eb0e108a79f1806892849086145115d7ed87f344f0698e4a0065996a8d2058b1fde4206304c31b8a0490f3fec459a0707942e49ac20d51005f5c3314a942faa3c5d9145d20f3f154b74c1c592308650fae1214a0cb1022a5a80b1a48a1f5e618b2565a238e104c5183f1cf5d891164fb015c84adc604b0c506376f042871f760eb25776ae6904a62b924022660c2e8a600d9cb0e202a829aab0228a1d70ba73a830d384104994e9e169064d3c597d418264440f5dd840c30f7428c4eaacece57874a09ce1743f3bbdad174a7270022647b628fdb4d7e611400b68600325304bba5cf13375f86609e9692df958ad2a2268f720be1b28c7855b1f3255f1213ad489392053151f9e95e6151d63ec18bb2f4969c7183bc6ee29238451f2b4831039c6fbb2f6ce45a7ac2a1e38b6bce4a493ce0abd5eb5d65ab138bd8c33c8dd0b6b6b9aad7e29d13e7eaf0647dbddedff2d799ee1356adbb1a74f9f36570be493ef09f1675aea6381051e8ab193d0204f8741d063535b05f00100400defbbc352bf69ad699aa6659b4d7d0b60a3671a9e5d4b7543155441155441154c41ac5edbbcce1042db1dfca47f42ccdbdbece10604fbee3eef39cb43a587369657fe8556b37496a0fe644b2925ab6abd977316845ea5920870f60039ae56cb5083b08360f350ef6e4c5eddddddddddf6e68bcbd069c4b08591cc6e0c08086bc3686fc2b8ecddd65e950a32cd6e2939654e393b9bd252b4064b75699881b8ec0c7724f6ed1a4d0d949a8bdaac2e3a65f394cd5d6859420bd3482c35ed9a8d14c34316be304c7b28ac6ea0dcc890aa4b539392615bb501754a4a29b12733b8ab3b4a0c0f9ceae969b5582cf7a6a6a65b816fe739e7a41c8dad884c632bb889a7c03c1c8c8595cbee243a894eda738269b6a8a3931a452c96dd521947e5ca5aa4a654d539d5d52fe60b0b0a4f01a7040e1ec8139f4460c28b151f5be0a4a8cec08353bde2537c8af1899b7a0706947a7b8a36531a9bd2ccb96d40b3bbbbbbbbbbbbbbbbbbbbbbbb250a10aa264a8d8dd4a04427f109e4c18a7ce8a22229ae2c82ab1b1c38120079e213ccc2e4a4a8a8e8a8293eb15399eb04cb4f2030cb4fc9a9d9d4d3d36ab158ee51faa836205069b6c7434045453236011ca1655b8a46ca194c7cec204f54dad26c06293a8184f4c3654f6a4fc6cd0c1a1d68da7f9d1481129ab2db3c9867552efbc7663880d51c0fea0f1f0f2e255f5850780a3825f804423c74a6421770c205cdb4526423239e8179b89c273514ab844eea1d2f64cce0681ce0a6d5ba9131834bc0aaa7c7c8c8c8a886c6a6360fe690d53bde3b3db877d266752383460dc75d154d07bdc6d249b091803c9847cc6333bde5399a595d1e0c42164016440b409e8ed18331888cd43bd19de8a4de899d947495222b06d1888f4e7313866bcc344f1b0177a26721622a5281d1154ec01c91f9d865da86e8b27f9db4ba5042a4d4a602808ed5326cdb54291d309a5461e24495a2112c598286a162834974691e325181c2818a9374c14d3d64a2d28494e2660f99a828514962a26234918080830e72a498f980051fe03c69f2a0b69202d0c115a29c1c40a0c183139cda3222a2c1d95beb9582d441f3b45a356a060d302a194f8ab8276e6e7a3033838624eeeae849060d3900c0e607a29b331dd44c595a81f980c607271b2f35f78a52cd12342a1d90689600b14af5907497d870b35159528121006be54a4a0b1a2d87a8cd8b2a9b526493b0c176d080a8a951990ef7aa4284d140a12055a6195cd02615a24b0664b4284ea0c8f9a9a2b4fd1c1d31290962f513a4e7a8d4ceb6342d646848000000d31400002010088743229158341c8a9a28fc14000d7c8844725c341747a31c876114838c31041902083106180366c666c4020267a54243728ecebeb32285ec38945cdcf589a9d9dd716334f5b571d6327ef39d371082c1ca936719aebf8a2b9df749de4a0a5663203197f16f5bdc83ec3e91c552f70f8b56964329e8dc486a94c6917bd75f1f201721ebc114eeaf229ad548c3df4a8458379cf5cd8d4338e691d7242320d022da2ea919dd51f32950074ba34ff67f46f8fbcdf462edb5e87102252472fce98a0ed5e6a6df384cc3343ecd8498c8299363b0849839d12532f1c93f34db5247d11b41b491409d3844b71667615cd7373e85d121fd3f1694d5a328afeccfa9107eca0eb5c1e6226bdddd1a4683bb3fd475e657cb0b5b27be3ce6bab2bc117b97f9349ec64e7154ebe080485eea583342d5ac0a888e63a940073fc03bf6ecabbd8b4f14b5d7727170dc35bc640a0188090da206900d8c13356450fe0f08e2d31950f95fca1f51e8335b090e04d7adddab244e7016c640eff8231374031bcd6d168b68e08563146dda5ad815c013e628c848b533f40c22c12a718f3ea953ff3d9f0f62dcd75054d49df19433ba492f45f9cef35d5bf39685443f8ee8a45eb8a3c3055a15cc530dde2328efb757644c91451e8fc17781e6bad79a0dde2d07f3fa24ac3f1dec4afa062ba703bffd6cdc807f0d095dbf4f39f3cdb2c72a296c8ef3fef044ae09b576d0f8de5dd15d0b76eda5544549a972dd944e6b870d5dab1cd1552b2442b5729b12489fcac7be530bef0a34bc0f71f149b546e3f4c468d5562ea67bc707e45cf790caf475a258ae934b6a9f3cb186a25a39a3f3f45032993aec110325c15ef583b59610b01e94205636362970879ef2e3ccf3643152f92f7abc760ecf387a097e69ca508b5038b10ea5679d93a7cbd0a1d7736719fd049d10afded41f17ed91380a30e8b38259faa0b31c216afe167d272096922a35258879838159a8ff287799f976213e96d06fcb8429801203e34d8439c54dfc2ff6d393e8b932254b20a0f1c4c91ddb9abfbbe368c80a056dc530f452e338cddeb9d7575cb42f8e9b3e0c741208482b980b97ea5b60cdda659ecc26a2bdf33cb4e4cc549a711fbe84fe4e3d7c2ca38fbea79b2214a3be4cafcf1917ed85f869e8f45d9986a5013dc527884e7837a35d0bdfa1fb361349065fe411e09d0a904b82b521e565a9a6db5441988c15831e970d564ae8a0019ccb9206d59ff8c5102ebdbab9df9d777d0d1a07d9268334bb4ddda52a28dfa72b0aace5f2be9d59e27c2aaf5ab8c943c7b7b326330a0c028d89a1d88c22d856997dd45abc2d6d09e0a50afd1872acf6b2538e14c67adfa2ecd7e84721f65102999a177d1602f8aee10f770049f91add3d047591d41bfe6264d63e3b0d7c830c8a16ccf0152043d275b8aad8c44b7f6a2ff5218a159dfebbc04b9e57bd66a2c00c9fe15de4807b122739a337a71be5a509286e26242a9a6a3ce69b68f882513da4c05de4ece46d974b9eaec57d3cbc342959e769c25c2f1a952e0cd712b45211ae7288b13195963541e0da423de6ac2e600acd0e5d94d602d7ad1ceb52015697fc19115a44aa4405667b8ee6ccf0f73cf28fe128399fdf68128e53be2e344052ed07b78fcb7a8decab028cbdb315752380f2c49cdffec0a2a9d7a2e5b928a4aad0ffdee5f577a74d07a01be84c4675e2d870a6f03dfa413dcb608da80c4a715404dfd37da4f877cd7ec2d79dcc69ce01e80e6a7c9e62724fe5901182c28c5db644eb1a3411b467066aeb5001f9fa195ad821ea8f85f21eade6175111956f42dc848c30370a7161f7eac60e405a5a06b74ab949853d775693f3a3ae79ad2350f0faf9e5565156f99ef93fe834a8a3a16291470499ff24993f718c456d6ba0fe1f450179d26000af85ae78f0fb7f7f56d770c94ae35534f7af9c68fa1f6ede24cd625370ccee439933680edce5db2a656449db8a5f12e03fc4d310829c191317fefc4b511d03e3a49398f09f826a4332c1396a4e52beca88febc41f8d4fb61bb230d807c346ab6cb4bbabc14fd5c83f2fb68f33eb8532215c0ea4586ecb7f1e5a29a1c57b58c86385a2b525bae74a4251206af6a175b03009f7cf0ef77a9909e20b9a8d2fabe1a890502a93582a55e95dd9ae4695e19355b6e60f30dbba7f629ed25fa9754923107e507d1f099bfd594f541b19e845b9eebde4175c4ef3984a22a07988e8b044311ecd036fef5bd425105c731edb6fae7a249a50c60db0164a32c649d9bfe052e0a78ad9dcc8afe88e13ef4ed92588546a0461c2840006c73d816f0d658bbce45d35b88231ad95fa967ca427a87e0711472a4b046dead09793c9df5f8e832181cdd6f7773432bdae35baa4a6bd0a1b56e066212d581bccf4390f3b8046928cdaceaf65dc844fc6c9b7ff3cd538f311dea2501a0228bd2c2434c3cbe89ef46dcc0836eb64e2a49e72308974750d14b9499a3000e6d3e1d2910b35a3a1ccc03194e6e518ecb55a822082929e01fb68b9f6306492a8ee308c60ef29d6790b94cf71c7f66700d2c1fba323b030de57096ee29c02e673e40ffbee67a7a2fe81ebfd7e821fb6833c83ffc964776c4cd331cfdf87a923c94ac3c0bdfc60c6544289b4ec5e6bb8e8738c566bb399305515a87349be89435a156a3f74195d42f08330add5d0d20c5cc60a7cbbb234fa3b3fd6be4f1fb1a43343065a586414649c71c1a90fd1116b7588279a44acb047ceeda4b152f0bab032adecd1a06e0c723c38ec4bbb3b7a0b3ba63525246f09ea7a56a11e617379dd8ac2e29b9d48e653e8f6c78b6513dea86f8409216f91ff96f7b124435eed67b23434866ca3c5ea01a5b9ddc27d65b318b5f9757668ffb342ded777be4105b7b18869a5350c79ce505c04a85771e2b5986a223d33e53e7d545b7b5d3ade47074b9bd83f1b0cd6e9eef8b682437065a2dc33964fc1475966cfc629182165be8cf18dc9035861d6222ca2b7e1d14ac903aa050c15d9dccb2080efac292238265876807c5952b7643f23f2d9193661d896ddb8fe52c193a8c2305dfc05e9d552d29e5dae64b6ccf7027f3e1240b3f386be41f4522af8ec5ea9ff70b5feb3947a7bea7ca02750fda9ccedca7feb3ed461cc5dffc76bc98445bbbc2ccbcdd6c81ff6ff6e3d8bfdbfe77e24f8bfa6876374fff3941d7ffbe3f32fae2eecd2ff55f8ee01b49742fcd15beec071e0b9bfd9ef0d9ffa91efa9f872bf69f5ec9d8917c1024c12de161c026d8acf6a8c2b2833174bc4342160500863fba28a97d0c35e4224467a7a85fca36cc2963f6cec71907a83a420489611f804f437fc0e0011e1c287281b1538712645ef7390b7b107760909f3010a25082f2d18d398aa917295894a01c4d421a8cf4814425f1fce6e8d502dfb9521c45650fb0ddbd7456bebfe9876b093d2aeda70c43089c42860f8185b53e11505259fc35d19a885318af344184e141387a80d49154527e0e6277a54b1a8d442c3079d4d80091f577702c40db49f19664f10a69b36afca95e79fc1a920dfea88eb91e7ee3c2477aee19452e959389d5890876b34718ebb6efefacdce622416dd252dd9f1600966f9bae4e9621aa735f310257392fd8da652eb574879f240de4f2454c13e9035a575004bdc10d974b64dc6c0c469dd8703bc19feacf670b02b6a916f8f886e9ccffab2077d752317081cd74f4a5c4dddef7a995470afa7147807904ce631910f7b280a9f73620b1f4ca6c7a53cc6bcff241a0fd1b5402289aba51dc000675c4d33238b9253c5fa1216d12807754d8e97961d92b471f995f654762d1ebb76e0254fb8e2a256aebb19a2987c100a87975a542bfda43bba6a19ccaa6a3bbdff77395a17cc6db797ad6a110e38e7a2eeced1cb6475d9dfd996a88c6ab06d8556dcd76923c539ed4fff6ab4c656254071744dd2fd7a78a61bd7e1f0773483a2cb421f3f24052072750e51e95475170134bf009bd4aeb7f989112887946cd1750a8af6bcafa02a6022fed01d1362f0c14ce8a136314e0cf84fc88b434aab08bd00bcb7a8c46888d82ca677534910d145c0f4687b86e6d30c39e16e64bc916b75ca24806bff2d1de1eabd916f4d1fe2ca6f0747e56c0b29843a3bdfaaa4dd83e2609f75102d0df837d544676a431470943a30f60d81e86cbe1adeb647801652a58a58274655e1572b94846ac9a85394ec88997268ec2c77eec0c9cdc2a024dfbe5eec25cf2dc050069d72e7acb020d8587d127d9a5b1e12c52d88be4ad75d518a13faaf6331ab14fbab4cb9ed9f827d5deaa158c6a05557d44ab519bb18ad52f507f667c39888e2ee78fa9dc8d2701e6cdc92f02938d935843a054a92073edf52ea941e2c1c51a02095c50f5499e5aa1aacb4a756bd7e8918b9f86439151f99c390fd2b2ccd82f50cc06a96b05998e2ceb3a10b20f7e3353a7ad59b9d5b274a64c4798aee05d7797cb7987e78c23d6484f19958b2e78e2ca30bd79f4d5bfd22a35feb0399c7576a001d35f8f10433b7c62c4e5eaf907f8b032401fc238ccccba0a269c7a146ad19d01d379d7402b1030056afee339e46c4e1c3a72c1cce4929943e0b3180b41c4354c14e6874737f5048b1ffe6e8993af4cc8e4bd4f7268dd66741acada4b2baba6716ee848c3824de989d466bf1b0820413d4a31222d12577e3e12831b06387a1506b85e0a7f23f58b0836a420e6f65a67274ddd606e0331e3188b43aaf173470bef342f9e8b600ac182749e3c0ae34466dfe75d503d5835f11a0b598059981c4fc47aa7f8d3201f1c9932601154cf237fc67ea430d01820b5ea6b3d8a0682314cc87bc6ff64b17bc3dea2794e7e511c06306104304b2165517a7e8749d62a990c8a6a0a8d480e6857e7602ac9308d21d606709d22824ea38221b603c58f88816c75513436753bfcf937faf733aac6c026ad05686d39177b350a398d1862f8d3a14183942c7de82315830dda7cfee81b456b0bd02a16492fb9fba027162e0f9a92bf57fe6e0dbc7a40001fd1504a13d1091b3193a6320f6effc38b48b3cb29d078a1be8e9a9c19af6b576077954d50f6d9eeaf99ab4d197764d697684dcf7aeb59d7b5fff15f3bfc7c3f2506d89b72937f972ad029e0a3cbe7104a7a220297aff84392e7623977711b807d78ac1ce7a1ecb1741a8966d90ee641d03409a994ae1c473e249acd4984d1fde014433451bec40402a6a4d1be6e14e58d203e62df4e4abaa73b3805a27c19d8731d4ab986b9ba7ef72f2bc1d10994283753bd239cdc84ce1453a6493255884d9cd33118683149565180f17b53daf12bb294a714e0f4eb3da1f77a485ff33a4948bc750c6c55333bccad8a98a25ef00905106c1743d0e9a41d402bf1dadbb3e8680e166a6a9d1b1ef3d1d64fc366150b5c20b828880c710d8d2e78b255765ebe08a55a26f4097012ccad9ce34d9d77c5f7e6839b4969d5f55dbbba792bb25d75a9d523f4ce5ae15f0041b5a82223c08a607454af50dd21738c3bd77c8ef66ed5cf8b682baed7992bd98d646ebf3fb22d438b9ac928edc11c089c61dd0496b605e65d63b0c8d8109a61025b1685fc2ecdd2773001e2e0cfb8822d8ca5ba949b7b5fc6fd009f48a11ab9028ce9156a16d3b558f28fba62ca362bf9c960d8cbe5d5e57a1570185a0049e993a9c5ea8d8e7b97b028004ae8959b417c01584dd488eb0cfd75005da216fa0268a1c12d4915bbf682631ef593d31f82c51020b82a318169f05b202206e2c0bc654a964915861cde80d67a81b2b86acf8f9cd12dbd43640db4442c01e3cc18a9574a5b4eab4f722ed9500ec2eb80cc365f401c51222a02b5ea5202c545f66ab6624befd383f7aa93e41248abccb5b4e2b429ba6f778f76c30100389b63fc63cd8365a1319c43dd69f59a6358ce87d2c851ebef59051a4e65e6690d1468526bb29cc316af6befa689312f4b4a7e60c669802ed9ced59dceebeb05ea5a5068f7c3335b2de4ca36eaa6c1949459420322cca9f2db563ad837bc69931b6c66d3d09b483660bef9661b6e6293cd068f44249354c83d33b049a4c7188f7276bbfe71a20a68bed92f29a328633846841c9306582dedfb10f0e2f4c1502fd85f346629b6d5804b2b21a58d6236b9e225b5417132f33d06a705bd4922c995fd66ac21ed02af4cde2b1d9dc1ae31e18926b87f11ff3fbe59178964f0d5fff095896cb756678573faabd23f63eea7d87c74050ac225015f99859a799c2030e5b3c95cb2c95a24c9bbecdbe4fb43b82a528224cfb8db0b30a9b00e7a08ca60e9317c0a68f9eaf0d0d0d55a4e085cf58a28b55824b260286cb326fb27207c6d9045a9f2e5ab9ed8232b2f6238524118db2b7f6d5040a71e0419935c6475a5dfad0f82e16b1d1febc4a6bd6edc27ac720b4d62411efea962fdd31334ef58669d9b4e94f7e11f116852da552f0e57515e8d365dd508962d9bc4faad6c326ac9daef6d943cbf75c5194c5e16406155d89894eb824547603ffbad908fb5ee31e3e9280d0566653fa0155a55d9dd767d590e18f4fd39326a2d88238f92cf13df3ad08656c5e5aacada5f4d6b4aef5c36099a8de21a5e63edc2caf7e18110649672ec346a43710973436e7d8c386ff372b002a9c7b93c0c89e14f14d23cd61b645427302d204603ab327cbd41ede2d2c280a1d497e1c22c2874bcecfad9405bb1740a1bc96957d656873469d54d6e7389278dd370e43bdeeb35c2b22ecebb5d23d11449ca69a46b705d5b3c3597b05fec384d2de8dba8c7fc28a6bf4ae26766ddfa7c37db2f52409382920cb4470d5b8bf021422b5820e12142dc8416a15f0b30fd3948869125758c05411d66fc7f66a98f97e991d5453546a03b2d2e384947648067f821d287386e39de84b80ef9ff85a5542442954b5d37c297f32dc75bc8b42fa62418068177cbb433208b93dcc07bf6b21c9d15ee0475aaabe144a7b08db0d819e2e3a88783eee5814482000c40670bf93002d5a1a41d1ac0d599bf45bf1abe3aeba3a3cfbf7ed9ce3f4308115d3869e216780d66e5e26b89d0209db800fa9ba61521a7166dab4628ae53590956b334eb07f6f397489dfabc75fef2950845013eaa20550f93f35a23a8266a8ae9b5a3e77af5b20fe9366ed14487a5730827e528a14247dd8457f5872c29b9765553f3279447bc94da0dad3b447b229a9c969d3bb64bae2396863ce96ee80318f23b16e01881bbdb3ccb942b31f4790d8fa83a1b03c8aae3abc68900b79173af9f1c008bd67a2e13038400522a084a030d595f8ac09e2f53abbbc010881926144e65c6ad8a867a50a434f552e4f0795d826abcad4bb2d74be41cc3d76e87f09299e0d2a2d66d7dae520f4641bc8e4eac0ed998e6771175c84941f1e9fb505979e22a5d80192fbca5276717434d969c0b4c2969b2ec49f445e3b4dbf58c397fbeaee859db6fd0a05e122bc2ddff94b8d00d2840db3c420ed67d6d9e5289d9c9d06b51712e657ce1a744441d38f31b2ae4da6968301a87b799162d8a06ac06da6d86496ba2231c6234d62cd4c12d8c7baf9bdfbfc5246484fd72b3881c9e03315b081604520c32caf1e27b4fbb9cc381e3bdd873275a296fb53d77c248f08630b9c61bd36bf1e78c27d2abc29033ac29ef4b936bbc73de944e8e040bef55e5e64c58f3de1533d760e1bca9bd1cc3c1f6b63639870bc55bf1e78c96c4bbb62b1d468ef7302677a435e1ded7ee7c65da8847a8d2c35d6864bca1ed5c7966db8c1c595126c51b937db46da2d3fdd4e667e28fb6c93a0d7c2cf3e1304467819f251c04df0b487336ddddc512dd52624788fd87167384d18d4fe9df816c7146a933f636545bde1e18796ff06b1f5c8e0d7ab348f7014b583c452f5f7ae966e85c6fde9e43752973e53191fe1f35abc06c706cfb6711623f2c98a4cf439d76368d95080686926e061301bd4f3453245f2d27641020485874635400ce8c97a7f7298bc439b4a1baf0fdd06e187735070621a48134ed5f0ab29ec190ede2fbec41677e86b9de4385393a04ac89ba340dce91b55ecb19b3e5d6879d7b2823564b350c2238488503babc47d84e6e3a2a3f4ec20a2cc74f0c4ce1283c1f5200b2537ea84ec2e9e8bf17aacc0127121277f2e5d37846e9e422cd4231d9d93a410b751227ed14acd968279b0958d03595cc24eee0ca4c5773311bea0834a98045ea322f8fc0f77692068909da9c73d57529bfb21937477aac0c74a0e5db6814c686229cfde53d4fe5fae051cc3d8251e773a640b284ee55291fc04641cc51b0dc51104d122c1f05aabb3daa97d6b1b9f6b8bc5ddd01f40e18f3709e0a1bfdead79175b75318cfc4a4499b59174e816a4ae0f961fe1d8bf3b5eb414d5c1a616a36b753801914fc47f2fa2fb5a1c4163858131050361fd9728004c1c193d80985c07c7443b81c53259a47ac31c98a2fa72a95f9422452b7dce0fada4af7d2554f05af46054de273f13beebb5ced0b2734622dba6519f0aeaaf1f60156ba8527ff2f882e85a1aff87c30a0370d7cf1183c80600d785aa942764de08a16a139a43ef6f82607880769862c46dbfe1fd42d77972acc44696bb407cc6e6f85d145c9ea00d13ce089d8bf62117427b0bc204e80ac644a114793a23bf8c3cbcf9bef314446693b9033db0de1eddd9097eee745851c2024e4254af5b11763566941280b82fd4c168284944d696bd495a1193102e72f4e62033f4b339f8083c11ddeac52703b4629b1d62784b8227acfa28e2d8ef0e0e8b0945289bda393a536be05e7647156b53186511196ceed476662c85eec2c262f2c04610629ee5b439f8371e0ac5918875e289216966306347d184731050d5d9e669bef13611c54cfd2230925765830e4df98fd405f63ba5c0cb93c967fa621bfb9755848ec6b1c48c79a1fc7c5f2f9ec320e79b7e4605d48bc76d3e83877309095daab2246a76b1570a0b4c9409753559db98db730ba3d5119e97748d4b8ddc28a8d59fa4de8d886f708f0679510df0f46ee5832e2c6e94eded7c4258c1bc2bb5520e8efb80a3347a8c303686a163aa617b57683650a5b14b7de340b1ea3e0b5dfdf0bdd22a2568fc7a4fd07fa20224ed872665270caf529a1c0998ab7903b6a4b1ed152aba1e48585c9487550572b01791b039926d5c2cda4fa89ee5fb5d46aaed8f2666ccea8cfeb80b853b00eb26d64a486164eca41f3d006c0597786fa68cecad248de24031b2af4814a39b369611de0e91c46e47beeca52e26c5f923522787e1295724adc7a74baf58a066244fc56356c7ab41d442781a790c63fa0dfffc9eb27e7a3b66b5d95cb82ad37ec8ab5d4b57a1db7266e323feb76d171f5d122e6664085a7660d426102f22f14a79f299ae6f34947670326b9a9967e9bf35e78002106ee667f177d07aab8692196c3b0c6926fb9fccb5afdfa266b68464ebcd94a0e4bf901fcf9e07d0f097809ea808ed0e488398b1e2a040b34cd8e937202ce656bb64b0701c95b6576094e8ccd33eb114a3aa6351069bc449344edcd0334a24af055b7de112d82c73594a432028620a42e726280c12b658f69ad4c129d58985c7aa7c6654070e50006d182e7aafd0ad42ee9b3d7f0764cbd317f1f1e2a28816bba1d8d0a0d023289399e600dc1ccf22b16497854661db9351cd12e500c21a2f68f9a0b297ac88c1182e01450ac1ae044aa5deed07074dd8019bf673bd78db40fa8a08270c49653e61548cfe643931c2587c48bdaa681317ae001f27d24789c6982c0e921f55e4464099ebe08ef3e46b4cc0b3edfdd12cfedfc1bb8841f3f97470a86a702786d44f76d14ee3e5412da46b6e268c45c9d597599b13a742c74c324a6d413dc123b2b0113244d36fbe95999b6a1a965d6f5700c3b1915e04709abb7e607d3d534e01031955fdcc613782d0ac62d85fd5bd1ca771973b3c2050427f7b6c591d520ca7035b8f154d7136319debee69630856f60c90b7c68a87b500d6d069c7846672fc50552f23657c9eef13b3e87cfaecc98ecbf587ed7c871f197548199f20a71be9ee7f18bcf1cff7d1fbb855d2c648200f908554f3c86a8bf14ad3806fac620d18b710f327e30d2df85abd640185019caf55640a33af73a19d9d6f0d02a0639f7e2c87f2d452dc0cc43c1c189b829d0f34023b1da8e9c77b1877cfcd6a3ca0c9138dde923b3ef0598801474a8a8a03b35d82ec05d2399d8fff44cceb789620aa9f2641497fee71c31acdaaa5be4d6b0d55cbe98129d29142d339897a46631f5c6fc3a667135535efb041ff5ca442df618d87acc117bdf57b579b29e58ca6317c88416e49992f6d06c7102e16fa3e6e566135cfd76a97abffcaea7ec0d9d652cf4ddae243fc59616ca03fe65824391b6cb52666d96c4defce736560debca104eb6b09bd742519ec67c19242264efd88e377083eb824c0f5fe21ec28f5ebd0080160c5b2a4ec4c93d471850d24c8086e04460b28809b4ad81abbf89036af6c951df5b8676d7d17f81233ab36cbe2a6b5f278f506c294089225a9d64d4c951aba3285e2268b87c97dd718927b3b0ca64c0a917be0a70b3c3844c5ef8f62901b30c7994a69dfe8382e0b02a53c14c494eb0b3e45aeb1ea09c1d27be892cec74570d7116f8c172e06654666329095ed36d395847fea324c0fac9be2af9565402842bb2b98169fe20b823b992621aea7358bc4a3cbe0e5a3c82e09093732728c555ee11bf43cee6c3a8bb42a9f2c8a06ec594be1f6bdeb69641180b08fef5264802f2eb8e7a2ac9fd316e6e144d1adf401a0a365118218d23d0a434541d8821c8a8641f76969d0336c286cbb8ca2f736d81c8ba4cb0597a9325e312b3f6abe936ddc395fdd556e27bc3237c8d9937c95927c9072c1125e1ebc68584ca2b46f695919fbad8563512748336348ce061eaef267bab4bc062496b10b8dc4d491e7b3090d8708e1e07cef93aa7144bea4e12000dfd29bc6237862c1868bc0c06efd473298805c7918264a2972c0205c66003ec98c65567ac616589041bea8be8cd24efcc170ab10330b23a72720e917ee4c43b7111c686d34c4a13b5659656bf8217dd7f8b8ddbc9cc7b7c18de8994365cdcd36619103c9e073665336710bdcd21f5241a0533a3c2aca592b60beb866094672bea5ad5dee26e5e10904484316ac6b848c89b477a95f88fe2716da361a2d49f0880ebbea816c7e63dcbd13b1a99e502ecb6173b8ce98e3c84a3720f18b2efd4a9e6f4266a138ab4ab0ed0f6b3d7784266f71a549c5bdc33b02f526769581088e6fbac49305fee3ebb4dadccbdb7455e6990c3096a81044fd48977eeee5837dc2889cfbe36c07278ff74dfac67233e31116ba00b0ae2cc88a824eed9e811dad0fb002c77ecaad410281af7e6c8325f179a18af8e41545ce4f7208467b6805854c60e65d0d71a99ac40abcbb97c6f313d3d23b2ed32ea0b1ca06eff438061ed45b2d6cd317d3d9284070f56d66b923d965d8a6929b7d2c1f4452174f11d4bf309dd556bc0e635d53e55d96ed6f57aa07213dd6eb7dcf2d99b62b21fc98bb1031b66b30050efb089938b46f8412dfd301293af8d5349fd2b347d9f232976f51549fe9f8eb01cdda13fde594968d6707e33a0fd4d45e8866d5dd10a0a392a2e832e5fcfcaaf844a50e32121e2e470bf01109dcebb0e3af258872aaab46e79a24598ac729ca9189a9a35db05f19809929f364f9bc9ceb58f745032ae4e7e338d2a33460fbd72e59fd9291fc01f223b5c850791e41c663c587c9bc02d6885d5b40b66ea9989d6e1180cc49c9ea0553bb6292e9048fcd84495f6ad69946390290852e718c23dff62816659ba29668ec71bc767b2f8811b42b7b4d4774f7cc985478cd1b1552bb2389456b8aae09fb8f8fc4c8bb6cc85dbba78ce9c70e921b4a511fab14e131f92f3c69476915be4de9f9cd790ec02535a2f4a6af8be979f6ede0ed3965cbce24801c812ef5e7da394312dbee7c30571dff02fc9b67c094cd75bdb03977c7a71602d9f1c0c28994ed952c7e86cefaf2efad3ae6e091b195a1b1e7a68b50caedf41b645d6c06e4a272c107655171b5ccdbdbb8c9dd9c9ff76c2c56217ea4e76417c6ba94113db6a00d70fa1b31d057b590e6e96698a44869ad4d12016308d741e62febe64ec488b66f99e36ee9b829ab2c2eb17115a9f69446f07af24b665b8c6491c9b1a9a32fe1712c35e38faa40b4c480a8976b90a20ab4cc284fbc814f7b143c45abf99c73e7d136ac962f61bdd73189d343a9c9c3f08180534d3199bf1cab5616e6155301ebd4731a3b14673a349c95d4f0b75ee4ca48c8edd7ecfedcc7a21fdbdc71a74d903422619cc1357130c32eb959b20941c8f35d5abeeebd1fec9bc093d35a4a88440360c98aef1181b5e0be718a547fbb72ea1df574f2c456b0185693316777a9ecc47280a0c05f89064ec9b9739059b9664c2f7654e588fbdfe24da9593076292652f2ee393d48e6f963fb5de3ef45688bdc84adc6fb53372a60d06a3f5c8959caf40701899161cadb5028cb6dda1909542003a15257d1528ed75b8d1745d05bd0daf543fd77dc42513b8ac6e81d982ca32f2df1870279d819096acdc7fe686734114b53e6a61415e8edf4c1bc2d7913846882e99146e7408da3e2376df6e664a7dd2eb9aed55e0c44c3fc3beef14dd79dd9f6cedd3b3f5ebeb31b66ad86fccf6b501c6b377903f115c0f64d571dd7eb5da2c775570e8e6b22081c6fdf0100304dc39e387a359febedd61aa039e4e87b33846bed8ca1e0e7b819d51c4c2e16b5727f3a52de09db9e0837f0c88033a9d345e060bd512ab59293f553fbc036766154e07c549fa5da38b4648d9bb59896c79dae4cb232c0c8d276c5278ca6f9e5a8e2653ac848c74df30df37c579230e57f53d878cf9095ddbd0874703588881c0b12214abc0212b90040a361c814d41ff7f765d79ebbf7c2ec6c3f34b7fbbeab5821cbc64e5f8218392b690cc935340f49d03f3c5f43e9571872d7f086a7abfbb7a0797517392fe8bc64589c124af05afe270ebd8311b8c6aeb636173a2ec74032d6d3b9b2ccd46ccf00039e88496089d1231387936d90e8197558b54aae373dba716d5e94b7060f1b534586e9cb1734255ca9197b03077a418e8f4c4373147d2298e522a78ea71940d1a90979f116cf82826a2855548e865cc95c7b69828596d98aa54cbfa861f4aa49776caa444e4b5c5a915c90e4933d8f86fc128e71d3582f31abfe9729b1439c10858042a407d36fbebe2fb023e3c112a14cadda7147a8b2d2db3bfee84897629472e94b28ac38abd061907cb082e645281202dfba93d8c69832852bff436011fee1f53de8efe32fe5494abc90448ffb763bab35bb20f74598297d9bbd853d055000ac94502d9e8fdc610e542639f24f7d925f9f45c4730b58a5ee430a37477e0e8b9d8aa3d51f06d436b80477906df427b197215c8ad58455783113d4587b2801b4894cc8d4d3b41e24c907d0b4681e092288d79dc8c2a170df0746a822c297b72341faf6f0e68f687ad0cf83e912f07310b725f54aef404c021477eda9de87f0d2172af6a5ea427edb22627d4bf3cf60cfce7a40be72d4e9959dff24699268eccfcadbaed651a09d213670aae51abc3985126635aebff5dcf1319a11d46008aa10b29b3be46e8a8f9b7e660cef526e2ae45af026a599944900b6b40ad191a0a90fa259366c979d59c88c78cf866b2f53964d6ab4b116a587f9003a71736d933930f1a0852844544bc129452e524ef64ae21387b1f927093848c43e87a238f8ec48bf01f82931cd667fa48f69f0c6f28e7609428095d521267ee6fd1f2e59a7aa19bbba5dad94feea4a0795106356dcc48d3808f927ec500ca17dbc1d77746da21cbdfebf9b8a2e80920639e9a9ef0c5016c443a220941ea9f7c93d4eddf07beae178b06f6d6f8124281293f743511b6583835383cd23e0422a4aabd49974615253b028681d5350f087e198d8e5369747b7323388e3248bbd31348937b81b8f74ce70a928350e39a95be51c8850046d40c6d58201d523e6d1b99d076f21eca8500fcc74a752a60edb6c8510ce65d3cb08973aea4fc9a6ec09cfdd7972858e49e62b0932a894a1db24f2aae152bf62870bfa931eb657499ad7a5f04a6cd93e22266875374854c3b3796c4c834ec3ea8d02b0c1dcb8ffe785444ca08d88c7cb51b1f7295ccff69b8aa13898f1c5474b2adb845a0f1758d79d32863d80c9563da834d90604b3bae1821f734b305dd12aaecf821e4c9274fa7f454bec990c3d0bb5195fe9383212078b28a4af770234711beb6230ef0b57d8ea7a31a9dc500a59e8d98b10b85b33c77889d5146f4f120460b5c7b8934f3e9e45145045e8d557ec8afa7299171a62779023e5b811229b144f66875769280f4ad22b450644f5566c5ab56e507451878f301ae4d005bad1bae3a3c8e4dc8dafa39e85a8352408eaa7890891b43492b97506420e8c3d7d99cb2e8cc41ad6bd8511da7f804a715e79ab87c4228064a21873900a253016c33c9c7b240336d1db7e714dbb2a0b4c0a24c4818a324a3030641878ba11db678b58a40506dd1994661b0da691141b8219a0b1fdf8cdb1ff473dc12cd629bc40eca2604cb66669c96c261d1a6713a179d00892b1f871e64aaa2b790671e6d7329b213a2e8f295ba25a526cacbf442a1394f39223661eeb21faa6c1c7a10b83b930cc9ab35e9edb28333cca0b66a4ae81acfac8dbb10a6529e641e66cab2d017c9bbb65107efff3be6996f224109f2f4b5be588673465739658912392caef8d87a21b4001914ba4489521221f3a2f38f77d51dc1417abb1a1a83db32bf76e003440f48db4f15cea783102e25aa404b2bbc593583f6a5a856962d52c03e03b7a13b75766af74335f1da28733c6442702782b3af419dba4bff1fc681d0e64a566f4e4aec7aa48422a4f352c9c8c92406043c13ef90dd6f7b300680a69495fd837b32711c706db557a13c51a8d76ee4b6128ef63e6cc2cf3e303b28a4a6d8ba9120c65409588419bbf8971380c8be2a837e8eb47268ea09b00da39bfd1a4688d9fef09942d1e6dd8137a2c275473f7cda3c070305259c69deb0617ada8265d0cad2444e6f7ad0d2676f291e39f5e82682d47773a633b4d84a6d6bdebca69892be31eb38123bd079a8feeb4f7347f22a3f07774d94cf5c0645bae94462cecf38a88b528fa9b3dd708eb27387e64051568d27fcaa14b6ce6abcc5ef8fa968f1eede92d25d0db50d6ebe271af2ac1b543f6883348f59da8cfd8fbbe61fd802b647130cf0faa98268ad78e4557438f4488fc5e154f3575ffed93bba66f3f6b3c204680562c0bf24d905a83f682b4dc684a0ef80665c419402182c73269109a965d228a085d20d7409443edb89ba6e3b5d5c9b27be6162063b48495be1fe4c5f3e8d64e55f83578b579347c05b72da0853a00c68ee4b9bb1caac997a5135afda0675ea3601b600ba885521e8c6c48046fc19f04b03d59c1683b59760d57c4cfab45d281149dbc882054242327e4b9f678eced4c84e0fa974d9fe40bac41e0b2a770a057fa6d8b824f311bef38d57587730738272187f3368ea8ea0068a72d93b2ce70988d3f6d26d9d727cf49c3792c2bdcb91e82e2b22a1ba1031e14a289aa66615662f29d75c98bcea1a39c4b9db3576448fbf4d31535ba9e7597f3df3814383e12fb07bd0368cf21b89342a22390ed62644d1690083e237b8b898a6916bd038ce75ddd6821b9cf54c74595c7703dcb52d1a392427dff3c352257b030030e57532f83e41f11f5f9c827544ef296d33152cf3d6935bfea15c96e986e1f8cac1a740169752fe2ab9931c68042a981bb067a495e88dfc657ff150f1f695d1210af11eb30283c55ef03eadfe6b0d0d0abea4428e1c3df3de492259abf16dcf376ee16a9046f611967ced7fb9ecc662586905c5e16b9bc6cabb9e85d763ec87f8222d2850d61f52abc1a969f7b797377bdd569bc2b898b81ecb84a5f0cba22fc2a1b980a632a66ec0a46ffbbb59364bd88727b9637734b68362af5b9728a3ddb0a3e3aa2e54d0b23fd3648536627b54a317c5e35d7dbd0f85024c700052d6131054de192718049bc2a41c7c784e587c4f460514110a273c6b2a75559e8e92939ad15a7a5784da334160a6981a63248711f8e20813170bf236d6b212eb64e82ff881368a6afd5c672b46d355e6fb7859d10278c4745070a8fbe5e6ba592a16dcb75f67f9d7643166fb145bb92419eb92546ce5f0d4a4ad5ea40aff5d517783700477fa3389d8de87d29785e83a59d26136071344ce74885ad7186c1eaa6050c7c95387162351a7723c14800c39ef2344799534f12d0245a9f92569d648ba4f9ebe829460937d75b16408411f5ba2f9b0a4200c202a914453cd9fccd767844c977ea6e21115a92856f1279f50eb1860a542c2089799dad49962e705771475d55aebed46ad9bcd5a4f6e0c726664d205e10bcc7a167abe3db57d65e18697f2537a4a78a296e72adfe45dfd9ccdcc0105d0541694d14a60eade766aa1481da385de6dd3b46ba653d9908e5c81c2e5f4b3824c30070c6649a0cba271fb578181776a49eba9d5072abd9e2bff3e482e0175cd031849612adec96c88ac9aa0d8719097de11244cef168b9425c2c2ee50335025600e01c56ce8813d39a4f2cc5965c71f00a989e7fcd9b8c58aad2350bd2b92fc5bd423acf787a80b2060460d3e4ceb182b75b3469ff0da1124fcf895882f6ce3d218d51d383444a857f00497b735cdedbabe34da3f1545641651d66d1e05d1a6f2fa9b74410aca2b7d1f3163bbdaa7aeb8c442509de2f8d4e583d40af70585e01e02d290e199e3a27c46564481ca7d18a7cf51fd99d7e1a190b7d901ae6d43a01d6e2cde8e51f82f5b5edf6073b9b37c64e9daa0a5a30c3dc22da8dab58edae6b94045a8004103d608f441858da649d794d3d1a43ecebc3c44754213bc816ca0a2f648e0745461e33fe43a8924e53803e536dc89e54337a58c2482ef9e5c5981cb5b63732509ce68b759db9134017afe0caaaa3bf274adf0ddafd0152a912cc5ec03ccd25c32e8c5c3eb48ec0670ecf10160a7c24f4ef56367aa4e50e11f838a658ae9810837eae0a79b97a71f33c1617e97f75fa397dcf97c7389f6b5c94d748417d070bd44d6e97d296967644cdf129e61801efa9609778622ccbdb108f43e80d89e30f7ae37f26b77fe5d409f78818afe0a35f923ce7bc2fa7d14028698ece2fc86eb811f3c4281e2801c3a058143dea7e3e59cfaff30f29f65bd3a1bbcbf50264ec57295ab15490a095681e109d9259804a7a2b94edb223a62422489d45d9d85253fd2d02a1461ea3e3dcdd6a7f421279034acf69123adab16e010c7b92686f5815e993063eb3c7ca606974fba6496a871702e01debc4f89747cfe03b0215ef70d1f71b468b555024f3c4bb38fcb378877bdc4bde62be6a46e0a503dd77321fae8267fd382796bd224e5858f6c5a338089f6f19f6c507a48c82316b417d9fb29d35cc2777b74592057fc369066f7d72c0bbe6fc106ccc2058ba3d6015d89d1023447e0e01a96e22e4b99d95b8c136078c53fa3c28b2f26007b0ac1f8c36ee51dd9f2af43ac9010a9ee253342787832635311aad23f33493a93aeaea42add1f30f213b64aa97dc313957fded662c6f26f61471b6b18dcd126cf1b7c6fd6c868cca134d35be0c13b633461b4abd781860f88446c4b2dc7a3e253f522f37bc6f927c086f1dc5835ed6778493def76c0328bd2d1cf420fce39292ece2e068af53171229e2126a8031581c146bdb82bcefc18a545803075530be69cd63d469e5bd4dda0ed438e940945f58da20d98b95734a18d263ac3a2a4e4a5af9389e327cf24f2d4ae17123a1c042b35b776eb4a8e54b8d39402f371e562dad2ccf8142f9c09ebfb89627eeacdc21a997b06e18f8004aaa9131ec17a95bba640f6ac31b8b4bbe76938e974959bcf5be88eac265c5f562ce21aee06a8e4cbb519472cce09f4d24812234640d3618e2b412786c092a5bb256990b0cd91de5ecc21da20da8cc272350335164babb6365c49218755ca56fba0d79f1a8bd8a0dd314fa6aed5bc3892b6de08784abcc3b8a5648291f409430a6642cc53206a83212f9581b9f009b5586afa9eeed612e73eef7a338fbab465c934cb5971d43ee83c44d2de1942e83dea8e18cc1df11a692a56a7b6420ba216fd7f3d7aa34a3f8797fc0166c4cab70a4c07adc26c8dba53486732f80bda23fd121936a0ae30015599716c53d187bbacf244c71001883dc6a0c1e5b148372207f16a906720dea557056d706bd3dad78b6ad92b34dfdc928ef60d27a0ce94b9d73c9e244425233184be946a24dbbd5bb56afeea5339ffdb90f8e8dc27800effbd69e1a6970d5c602f321ef4bb9f8ef0c6b3717e392e9d20dc17d9df523b9ba7921fe12cdbc15a67f5298a111cbe080cec716ed2053268911ecada57cc209ac2b5969c6a6db9217374a2fbb4ba295e178befcf88dcb2afe8b2356772dc966a49383f9cde645fb0585e1adf3f5f3a08fcbe9be5f12024054850313638d2efbf6347ff47cf1487623d38ccb9f7ebe6c726cee3cc776c2263856f0a78a287628a994d82d65c5e439ee00ad1b54b6322aabae4ee3278649e89947edf95b85b82fb7f4e56b946866dfc962947a60407f6ecff2aa16abc401abebd66f915926ae62c574983d7aed21a19d2a330bb86766fd52e7523494a6c6cb323b9484007e469b80acfe1305f0a55fad2125dbce0272b9e842855c22d4fc419b69682ea60683620a8b56d0314d0549b658db0e90c489e831b7b9b3d5a06c7177b7e995449efd75fa0206900a7f864a472ae1fc8e492d50baf2bd11e2fa1ee862ec55ac2615795f9a2a819b86a8f63434e388f0e54f4cad831ec4970514166029555c9188ab439b528a87351b8a0fc10dc7eac818c6c6125ac7a42ba99dd1c3996e1c39deb09638c7d90f01d7c780d342da6963130598b73dc83ebc1952234f43665bacba8fc337e87e5b7879f745b25c02c16802209de54f11dcec63fff99a880f9531e741b9bc9b7713cd3f58484e5f715d21d2aa58ab7c12ad08b633893aed36f697f588f2eb183a0e2ab997abb6c60a0b0176dce330a08028589a96a902f804a9680fd588c1d1b200c1f974e282361375593e1a65187dea01b9e7de91a68e18986c5f7030eed28bb43f1ddf1ebb79d7d5a52c5dd893e342df5c12a53e5ee832927cf46ab86ce3aca56c7a6724406aed005ab30641d488f2f8c51ffd481b32cc250e4d599ceb632b302ff265dc5f26c2f6c6fe0a04e25a3e4552715ba70a4a7dfd6229d27aa25f92d2b2675e829ee096728ee016f01a2d2ccbd554d24f417cbbbd7948c3f5e312710bd2a3f8f5e5008b8fa59c3dbfaaefefc081062cf63883497a0553b41b7ea58ae6a224ee565b40f6c130269ebed2dca6400782af65799321aa74ca0af835ddef3821d68f974bc4c258833c9d1521851418b459aa357b12395f020aca2966f3e92449cf88372042bb5d7167471d2b87f9f9e2f18fd0bdd592f8254b849c7abde6a90ea3a4a8782542c2f7bf0464ae6787baddb7fe15f4b56f86a8396ba43c296c2e412d86896997a5f1957c262f36383d45418e92af6052b8dee175b98752cede810c414189ce31d1e1c2f47513f2c2c937bf6b041124d9d1430d0a0268e99874f049b11be507b996e2f7f8101a61ee869f5c194061faaf177f721adcc140a2ccf5a05a4f7a267b9fa1585501b5367c45d6f259276da1c354f607689aafd08f549862c9c890c991b990c113aa841830af9216cf3676025322a86ac6a13ecfcbf2e2a5f2c9e1027bdfaa5abeae248fc180dcb75961181b5a089897c2512189829d9af3e48b7364b7440122625cfc92920292ea7b0db80aa48f406d50acfc5b7b26752b8f7030db8dccd98c6d7dc4d03b90054710376f03aafd29313c62a3e7eeee726e37f4bb28d7dc927b0ee98fbfe0e50f38e3a9b9e3dcd0a40f6be643b2bdb18a2d96e855589dc8a709be83cf129fc12ebe852fc04768f353469872a302708290672567278fa77d2a639a71949b94eb7a560e42bada121e4b8e96e1b2f854abe0b6b3c69eedbfadd8585ab6683d80bc39ac0a79217a4247c8421e6342255e98a56ea5c913ab35f1e62fe2c96bc13cb5d45809c58db69009a0bf8ffe0347ef494c7a4e9b40ace5f423eac48b8f279b964de24745b050c6eb0ed4ec3dadb85be0c79ee74a37fecbaa143b1e293f70ec9acf849ce10ab1b30485d8ac36343090f2dc1af85d7c8c1791245e7f99d8a440aeacb1c5ce2ddeb31fce0176fbfaccf72360f22ece5c07e3b622e60331ea207452f5376748eb88d111b255691238b6e1582048b2ab1ad649119300d37da5c0059e2ba858ab41e4ac99e9228db2236a9ee1b2a123187591f12f689a6375e0cc59fd132cc773e69da856a9a573c6ffe635b3e25f00e4da2e8ede25917ed82f0725cd02505b4a2a9dab8c3af362932da41a8c67f5c7be699010240183e168a66b75a260f8e5db6538614cfd0df528b30415d7f3f41a8723b088a2043d1d73a3269ed901e205da098c305a3423bb223efeb6f253eb1874106408a48ae0d3e39f69dc1984a08ca93d0eaeb835227d29f5066bac140e3d26dc9b29d577ca7450fac1af80ac75a69d4123bbbcc6e9802c9313522eb8ad5e4cdfe15bb2fbfef6deb1220663a46125dbec395e0be4b5c207671865c880510aa353e5414ae1e5b5d63c0439b00f1b0df3e1fa5bad8272d5d3b5cc2d590fe85bf974a79054c28a49b909dc17125d3cfd77ee49aca0860b4b32b7a43210c69d047d5c106752a3dff1746d586a3c032500f3ea6cb45fdd80767674c813c6af9de022c41b23f04806e7bbccced2a1f082d04836f0856677243231c4069f2a22aca7881e0c0da010cc82ea6d717b95ee5fde66557638e087cd90d76a7d3602301da11513c39742ed1e8d3618a9fe8b4040cf6da20984989cb885e6c8015c9fd096f417f01e1867794b865d1c60cd80a1ba4e276752f69e9a568201762fa5b36bbe0cd2b9efd45b2d51449d2d21f4f71cd0ea5b9c2fcd9c73ec31b266a6a027090bf761dde739784360188bda23679f817e5f4201d21f8f1431bc23713fc60fc6270f43ad5961b0dd2b3466b2c478ae1047a90d256f01a0375b2a0108c9bb444d4cc17697c8052772379102d735bd7f2a8490b9a80f4570c014aab5a9a38a406d0ce37aa30426b81faf21a25877a82405cff94b913b8c19bcb7c98d7a0e1726e36b15c3908de2794d002e6e12568f67c306cc16fa4d836b118647da93e9e4f6546241469808bcffd2104931882a20efbf661cb82386f0384ee02683cba5c17578c126c5d3bcf92c26e924bdb7925760d7018129f7b9d0d005cea4f7f03ee0e427db16c4144427ea8dd6c31acd3505830bb4e719885caf455c32f796a0f045dc6794a877f2dca9098c2877e6b0c699ced45f098423cea3df32f31a6d64b2bdcc3a42cd9063d665520b3c929b836320d4c03895c9e59440d7657e24a0dcfe1970c5713982b53f2680fa64801f04e20fe07cd6223fd1098d06ef52e2991eebdc4d203f64840d611eb92eaeb82804d146697337c3a725b3cbb426741ea64ce83c79b66e0a5cc676f2044607e91512bc168201954793a8730e01069512c541d8f1b69c3baef6312a2b35b0441fe07098392418cf96b17e968714c365df3b0a4be7b45f5be53170bb31b6c94d537a111c0564fe7376b809dcc67a93bdf1747e4a4ed0eb686241172de2dfc191f60886fc100f69bccf238cb68c1377306ac3bed106cf59522704d81ac336236a8741ca564a68e762ee8f9b65d9d00e5eb002a6aa8e80a9932014c3c58a9a7c4a5a642ed0456152ccd1ffb9f08c14ca04cce4be00c7f4c0eda9b1042682883e23678d6978b5afcdd862b03db765756e270de70c40f007aa269c463896e644f266e0e0c0efde65799e76d4f86d85d7a7188d064ba29555bf54b8ef235a85694dcd10053599aa7c59b8df1d37b5f8b8faf5e0ca20041420a8c4846e0af712e08013c7f84d298910e139deefa7a85cb3441458acc7943d21a71d29da242483e505477162b11e236e7caa4229b9f39b48816244617d387c561037f1af6834e1deda4f399c0b7a0f698ad8f522f98923b54f8aaa4296252e1e9a6b259c465a2a4cdd345322d315a3c2e13497474dcff8cdbbe3e3d962fc7f65ee15f01182a9b6c6e101791fde7cc52406371309e2a1d3ea20918570a47872c6da2d4bcc1e578a628d26c10582b035feacee0309919b788bbf7daf87c640f731b63b2a9a3acede356970e1ef3f17e5c1031d6f7811442eb65c11db7ae667a650ffcd932b98d2174542815caab15fbb3db5f3008d5a2d607ad613ec0010b64adb00794b43bec27fc771bc8d2f2130d2ac97134ca5e8eae7c98ac3dd1fe668fb0d7f6c8a5f56e3f6104ca12acbb65c34a4a1505a1bf015f7797c4fa364bbf5b9c55a47eaf24ade017a5f82f1c723ed21c90c8bb3c61b5973ac5200b2733a9e5a634ca0ade77886f00504c6b4b86591e979f663ea256c32d882c289298d4fae0f5b1fa535f92a8c12ab57d02c7924505762b7bb5cca9168b88650135f0a81f6c5e75c4df71914857cf198303a3d97dabb399b7ba3d0c9b6c4720ba478efc93a3a286c9ffbc005621dcfc95ab5505fd832d15338960b5a0168c8604a289ce1dff59c13a94d70f7bc35ad0bd01fe70e289f4360254d4f571c313934c973aa4aa342836aebadaec5ca612562ae461b989026f3a16b813c6e6d00283feb8d61b5bf4917e978d49867c448379d04a19374122df87fa31e85a442165bfd3e2765925c3f1c9b57ee68e2eb67845c0ec4ad775ca52a1ec59a18580cdfbe96978ea60587bd531f7a0065469d38154eb407bdceac95dc7daec0b3d5d9e72d6098ff8c09246c65960abf2e5612de8e8b72d4e656fdbf3ae9835b967e6765aedd046422322ca742e90f89658f5505b38ba03227f8153d46dfd27e62c5795ae63d740f8a9131693dc2c1b397664ad0c612b95d60a0a7657ab63adf236739e8df75e369511406c67170a55585539244469d9cb9cf5209c9e80befda11eb707a190a6d5be6ace0e6f1f1cb098664486aa90be0d30c158e6633fea10c680c31b6cc061b9e006e231b61caaac09f47dfa9a1a7503f73801d9cf66af13cd9cce04d1b200d8a461e07a927f45dcc8fb1bef81920ee56231391801fa42efc3479c385c9cc694f05c653fc0fbbfd4e89034bad80120490cfc42efb6a86b76a5c890a05b0d2e456d437e705e83cffc86e91fb07f24d93e5736a16dee443b38d9d11d48545361d7ac09101e21357c7d66cbd133d9848108ad19510dd9d451303136a60185f97a0deb52731871fba7b75db8fbb90ac1e8df7fd94672a54f448428607d4676bd6e94da98ad011033d150734cc5bda0a2ca468e192800ebb652c7fbb6d590e3bac47d451edde48b573036437cb25f827a97fcccc75acc1a959e75b919fed19ae58106c78f9ebd09cba399e389e049ab5428dc7a0b3e7b41299b8b5ff255bbab41cd58ba0150ea41805aadefd3432efa2c5760c04fd8790e82e3421b01b5150574b581ef899dffcabed7463a1926dfb8245dc8599677d625c34db2cf0c2b6c368405b875dad370254c9af02e4c4bc18982de8471df657aec4999eec934534140af72a336941c4cfbcdb2773dcd698abb6ed08080d8bdf05319e63ace06c3550d59ea9df049aaac3cbf9e5ce52048750db5904c774047278f04137e0c73790be68993f65292f85ac74278d8511437d0ea2229618a8132ac5185c714826f3cae065aa1c644c689e3bcd8ae97e5e95a32d354f9c9ff84559c17e8609c7147ce6b7eb96a9df6c4dccf18828783a2a2ed094ff229eea20062a2c8143fadbaa7ab239db5db4030597b03de98122e91dc94ee024b6ae5c41ad8237235a35df524af2b30f87541200a58475dff08d3c70b519768891ab3f88917d31613fb030a1dac7cc789722bc58e47acc4cd1ad11060a8306fce364954e657ed51403112b262ab601986cbf3ff7f7219931433f7d6ac9107ea27b94047fee05dae8d140df5cc9ae70a3a2bdbdfef9ae4cbd5c186e0f12c300375f535308785cca848859c47de155ce8c47b4008ede30a82700dea0775d073546d40950c429a6259b834f526287da8d14fea798acedb5e92177a8ab6d413d7e22b4f63cab9a2df90b0939c282cd0a22af6aa28a93c0828ac89ed37c9d55574a919acf4ff6755de30393bdc8fe9be2a26f523d2191845137db1a12727b304cbd002ed939f26608d39feab7c96eaabd21a5bebf3f144c43e4fff0a6ec847f0034c7f0d53991a28c4a3c36a1ac8f9f2af656c896a326dea6c098f9ae62dd043b51d419ec85eed0eee66957204098d3565ee826dde9615034fa7eaea7072f087766205b4298a6e549d63fd1f2062d066a16ef5d9db9f4f0fcdc2393bb11e4918b1a84c8a386fe21183ef191317b06e4add8076761bd9ad86521b3ccd683960a65318685670aaee326829964912e76cc8f6697a54d3b971fbf8814b343c22e4ceeab4084927f74a9d841a4cd9b902a3541b6abc1815d1a81ec6fb52e9baaf626580a08fd0c3d49428074bc074941bfabe4b2631d7f97166245f529641bac352b30f5a3cdfc323cc4c45baf43b5eddf21588c9d40ccb29444bfa96a3b17f58d9a9ad72c7766c6e69b559b16efa687f1be3f18e49cf8d7bcb41f062b80581bb5577fa7c8feebdda0c4b687fde68cc004a720dc488129636be22b2c658cf42e4ca41784443afc3789992191a313f5714963f003b7b8068e0fc1fe2762e4ca783f8f9e631bc00e6830eef4850027ab6b56e31d4df683e8d0af639d9983479f66d16bc8f06b693ad1e4526073908aeddb9ebc2d40e3284c9f1686412c30f47c25db202ae9eb5e2887cf35ab69a25a901a0612204e53e4997426df09f5876f7f929eb97a65799cd41fb850f5493800644fdd10521a12e290750efacbbbc464b8944d5b3b4bd475cc0ad970735f839bfaa85769263bbdb29077ce60e935d7e06d9b571933af08c853dcd232954b8be574b14fd41f5657fb11a2dc31ccf4efbafe4cf6f44fb97fdcd78013dc867a6c2c41e93643470a510ca16c29c69b215356e4b7b891076cb77f270ba2ba961aac6c370aa42bf165da0d0397be767546327ef44814e381be424dd52ded5374b98b3f136401f9e4bb9df2173b09b3bfff978d2489122daf0404713e06614c917bb9132e26e40ad56487393ae57495e158d1a0970e311af707c9a84f1e96109f13b4b9ac609b44b36c1a9cca6b60a4806b2e388e7c516e653e8f4cd81938f4dd51ab49f439843e75bb0b02b5fd8ef116830af2b41d413abc55b820c23c87ef4b7445eeb9ff450fc24372453574e4cda3a1419129b40eccdb9d1e72bcd99354aa5c18bd2babd5902d630eb0e7e6d161c7ece87deda1ceabfab75b86635302a1dc15473c251b23298e00e1ee9ff0bdad80d677d9d51a0f4976053f61c1a0c0d3642c9f7416e6e3cf3494241a16efffabfda1a6ecb6c46813ae0ac6843537cb5817a722aa3f50d08848ebb4d2b7c468202055400dc7c74f2ce2bddc03af1c5a9cc02a1c3901927990c973ef04731390e8bc6de53f517a01f77a1b1efbeeaa4cd27a7d0e51590cdb0da0411113f4ef45ae7140f27496f9fd2b02cf377fed7dfd2453ed77e2bd65d2d5faa960a13dde3b113f01c5e505c763af22d0b99e234c3d176b11529d15acd642d3d46642ac507216d5c5e42c3d5aa8a6980e9d3d2635be79ae101b4f7fb5c3228c25c70016992ae3d4ba9d51b02bb2ea5c287161827b185a3aa2b13150f0d451c8da41de8a11bee61eabadeed9e7077ce21db9bea73677a013ecaacc5fbcbb0f4e0ce998eef2a921b10633ac73e95669ad38ae83e829258cf547195cb016b5e60312347a097a7b2ff3e2ed006b60c6823926eeaba69253d81226f159d951c2e4a3919bb3d086045f7be5d215e2e79148b394702dbf6915a5614ca61a35be4476aad8d64fbea0000f21180b437225097dfec26f35b9159c8e34c543728f582826aaac9f184a371bfd659844272bcddadde5d2424e24dd196803af553f87908a402063d7b0b84e8b9a2f38910049573dbe95b4d3563203f104112ffd245198e4ab924214f740224b76e17e2fff023e7b1f271187d5dc94e24b41aa9fdd26213da913e5ce5c0c643b2de066cbd287f243e88a37239dfa503e5205d7d72d514c95760cf091a0a5941ccea13db06fb521644dd8bc35c0e766580210bb8bd94909015c2f2c824a0b3797fce9a2dc33d439467b43f4c492f9463e2e53189c7d0818b8672aed55c2d3da66d015c96e06f1bb362f4a68e9f2b010144fd8974753fbe3930c124fb2665d324dbe6b333991d13caeaf3824dcff152be5c453dea2d8701c6d6783eddd693e02256e35506dd0a08c49e71d0061e1943ad02dbb7777059e4ad14196c0d6b83728353c369bd464e258f22d5fe634a007b707c70bf0ffccaddbc5427f578c5a4077be652c9e170c45cc1c493cd1c00decc1064d631c69b0d7dda02830c8921c4321399cecd936fbe26c8c5904e034daf3db5492683e24eee3984cfef4aa791b995912cd21804d442b1c67ac36ed8bcedaf478705e46da4b37a24e09ca4dbd68b450c04762a1fe789286b0450f44b988e578b6999d8a817b3523181524eacdaf886374ae0f65e17d94d6336c8cdc2b34e347004c31bd1e2065b684f2194236303ab2956a593b824a7d23595056376c05dd583e4c7e8e2b495c2dbbb70008d1d4fcdb98970b6ef880ba6fea95040deaf82d6ed0a1298d03e504449c198e36b34b305e8400241dc6a23460bfcfb885cd0942df5c94904115a5091b1deda09243f3c0aa0cd0d88fcfb3c44eaa186f90c27f439e967ee6cdcedaffbcbdf4f1037fafd8de89f76bce13f358c36c5c848e3ea696ef62bdcad00ba2416bbfa72e07d110ab414ae632d91566f9a7d4a5fc887fdf01320930d5a07bcdd83a60ee4ee7b45e8f8ac25c223ddc11a64b997200e5ecd8e0f2d0438cceda302de6dbae68c3f9bce602ca9b3d4581012df693958c037f9c0031d6ddc111ac164e411cbc7ce521f2d77e473540aae7eab156608b0d82ec830f781f9a1b247e70247a29f7e44b9cd60cb9cd7041da168023988c74e43160a98108aba188c569689e010538731db49a5eca5720788918eab8a78bcf32f168929616f55b85008ac81e784e86b0cd6258e58e994e8e11e284e9b797844c3ae0bf7410ba767c74ef9094d07669d498d53c5dde31a940f51ed80ab35b9682e7b4006b6c307d7c284e312e04034173975635db90bcf2b9058326fd612056dd944b06dc92832aaf47c02c0d52cafd603927e868b7bf3f4b270ed41325e95d6bddc32ab62c66c61fc36cc8e3e650bc0c39590df7bc0c0af176fb00b15121b3ee9b2e69c2cc3a38e339c2f1c016c044775a50461f18253972a048193dacdad8698dd3442f3ea2b27e470a89aa367df9c8916d838bfe666175ee4c96ac77860f6831c62fc1b3c6a356dbc83149c182392f64d96dad26f868bae6c6be7c71658aea1133372f8bc3dbba35a8bccc9b0685eba03752a2d31670a8ddb511742d8ea1e287ee39478fee9aaff3d946e6f4b87b78ce7af2a364cd6bd636266193fc8c98fb9fcf1459a26e46def6c6fd3b23fb39216adc6da47573624d6d992a69d749fde7536dd1ee6ff966d18d0aa413e9c930587f1655ff72a2e8e746b031196e768e0aad070aa1bcef26cdbdefa4ee6475291beadb056662192c36902ca940d187e85557e205be950309dfe17fe8ee427c229cd02c66f9c73ca499a82cf1e7ace7eae55002f2a18328590c8f7c0fe0a3435096ea62763d955da66d6f673058bd75baa9848851e53225395654896cc6f559e3c41879536c236f07c029cd5c8d2432417f42f9795d314f85a0e685407d5a9535ec3e313baa63e30393525b21e066af3df0f22db8301aec6fa39362812f38be2c36e6c279d896048329eec47854f068cede4ef017011108e7259da087c1792c8f37d89bfb841d6f87626750ad09b64c2567280de00ec89c4b3a3b131461b823e44bcd7573f3965d77ac29a9fa5a552bab8c1d741162a8bbc40978e26b6b6f62c48d32e46e7bae0ba73e879b5303dcaa5caefaaf2d087479dd1c86e39a12d750b31088f36c45a7ffa964551395f55dbdeaa34626c505b36776a5916e02671fc5563f0634d8a9446a60de0bf2a4a74a7a6768aa4084c5e958c09ac2b6897bc4da2bce5e1015d01204201b719b17e4ecd83c2177f8bd50fa9d4af6ddd512f96598e55d9bc831540ce6583e4d08531f52409447f9e7da501c2058ec48d4997f9238123915036cd5c6423652d80e793ae8dd17f495621956b5c0502b81c32d28d6988e1d217838e444379945425a1ab09b92f6754049bf2e8ac5a67eacdb6c0bd5ef3c76b2186c9de4165ee647be39806ee5ca8682ac52e983a12a5441e8ac0a3b4c31c372ce973cfd97564f33b203aa3f87efd9def0bf1ce191221356a70383deda16adf24c2a917a692f516b9cf9f8ebb2c21a232d3c209875cddde54b01102f6a2301d7821c1e1bfab82f8e1ef421c85f46697fc2966d6dda0f8541587dbea92f30318bb9b0159e83077a2bb0da0b9be6c8885629545afaca66ce4e35250096667e930c97875d0498b3563953aa38c0684cca5cc250de022068e2861251f3bceb70140ab52094af83c2be29010fd4d0a3556504537e3e717916eed98810409206930455010050e9e02445dd82e486c20fde40509669f4e1924700c38d68b6bb4d83b77ac5748457558b416e58b0ad9bc41ca594e9a57277423e1f2c238ce02d862a6f1e0e65a4c170b2750e7341011b654f05675c036d186492a8c95c9f1ed8a65e9488f703f8a6599b5e2d498fa60c3846e7404b8bc5aa0f6f5b81b131251448e380c0132a460367a2d6be14107492c0e999579a3229f54e42d689666e3120715aa744a04e205869d0bfef51944021f29bf096913ce65997d2475eabb121f85046409109c914cee7632c7553268f7b22e3b24e630c198ac68c149b5773443027d4d5bffa5414491384509baf830d311ae95e00ef61c9bc107c81587f2de669a63c25d2430249b390317940f8342c6596a95a1b5eb87455c26f0210660af24d0d577794574e017a8a4642b1e037c6411d20bac82a15758f292835be0c5d6b55b63617fa2b58e94aeed3879dcbc6d949823255e86fb3f8774dff6950564fd48a2578d83b2db9bb657224682288247f8a3a73a09229cf0095a5faa49c3d3101333907ea02b6d05aff3f5a049f366b4a1bf0de721f23510986a39c3a93d5a605dec774202d6bc17d02832e07f06abec79409974d2db9643fa3e090422c2834c75e6e539cea20ef2060c84237748829ab10862a67d378ff8a91f2451da5446acff457c571518746835c8c08a234c79bdef0fe9565c6604904aeac61160e81a91a92f9f9fbf6a70e8eaeec77454b51b2cfc07a906ce07b88303c74e674fbcc3fd13543b935307bc8aa4a1fb2f985cc5ce548435eefdbb1b0c7a62bf6efe1c42d2b94f117ff817b8d128606adbbb6f6314dfa017943446fd1b779d259cb262ecec81fd328f2dc265d942e04788f88fdddfc32326bf8c80d160fe7f90f7ce2f786bcf2150bb6a4d7fe2f4504512cc0baa9036e00849bd839515880cf48470b1ec26742462f63c8fcd3c53c17726365ed709e2da163d85064dc79ea3af6644e6039c83f038b0c4a332a041da68485f6d24093520b6c054ed62346f97ad49d3211cdaf91a1da16fb873f26eb8c01cf8c31cf70efea8e623a244c9d7c712f1417cf48d6bf777407ad16151586b8037d6af2bbb42217138808b632b4652555ca39c2dcf0f53614777a2ee1f2ecedcb45548bbb3d8bdfc26298dac120401ae6ca677fba97eea3c45a071994824e1d72a826d08ebb155c8e2bdf22505492dae1f9fd5ebb1f6993d689c5aa68c5f65ddb2e02d6fd0a34f68d5b2ac324cf3409087100c0a2b86ef559604e5fcacb28724be8b16bc328bfa0174fb2de5fef8a68446f4231f187a88cee43f7d47e45826590cde31232cb6d5e3ee84303c43f87f5aac38831604b2ca041bdc6d3ffa4503aa3acd43e54ba8c3838e22adec6bb39ae252fdd8c8ea090f2bc68c07bab57ff8b1a8041d500a72743810a11874826ac1011c05c5101d7cff57e881e4d32016d61225521045297ba475c3e8dbe5047a88f8d52bb6903865738c84800de59cf8005f55dce91e6743b902baae3f1dffe8be5ad448adce9d31ba2e52410a0c748bbda95598a498f87535bcb4230b00f9f501a99453591f00001a8a020ef3b6e1b99a55930036a3880727fdeaaabeafca4e4b251a94ff103a7bc3b022bcc274c32b78568bc3e9b745eaf76d44e8f0637a15e44a2e0e3d00d6b76a9786f62dc0214a7ee4b1b106133d7a5b0e3f57e5c6e25993c262536fb8ad51373685bd69310c6804b3c112e2106d1f44e428b964c9b8f28451066560597d883552f36b32292f941c7e4539bdd57aa73a55e9411c968c4576eca62d49a0c653855d5d45cd5ced348bb33ee6dcc14973bb10122a17aaf7de51a4fec3268f2a976133a18ced8765b135c51a95d9327ef6ea68b1c3a9b8236a0cd72dc7f7850575921f40532347c2304e3a19e44cef268bde3a42026b85a2de04ed07e77aff6cad7339dfb813597e8abe2e05758345d1d544d4d9ee421014f6b57104df897a33efb3c5639b8741d2f8410d0a57bd6dbcd383aee35a9b3efd60554ab5311eb28885dcd837a997027bb2c0bdd830832c7d54bd6e8449d8eb7865b34dc226ddd048be47b424813b0817acd26101e44065205abf3008b774bea33ae92103f5e8bf13c09a57b0dafb6a497922ed8e095223e808e5b54e1e1e6d36f6aa6549c6019c42fde9c073763604f79c04c73b7510964d902b2c770bc87a677a86c4d76572f15abd634395d3e1691c4a3ecda53164e6bf1922c1e06044241088bc569c58f84e4ec27a380bed8e034058941a907c177e01881b18a725f09ba8de37439e84d287626e5d0ec6fd0db2fe9f7b8b0103754d45717f05d54b1c35147eb3c1e397c2e5f8d1a06892e622d902633c3addc8e45105cee71d4b7e3819220c3a6acb7b6d9d531ce8b46525d8395070e0139f7097e2331f436f41460ac5707c12b90f5480861502a846de101b7f0a1ca84b86b7f81cbded57051a9845cebf01f42366179403dd9dd19f49bbd0300aa097c555bb47af280cadaedd109e725477fb18e215cd7a78d721b69a84da33f0d78f65788b20c859a213fa762332cd5d676d8835c01ae80c9b61d6cc25655a4f72ba68c2f477d918260e89f6dee46fb384d68016e921b6824581eda7a28e6f8f8302f09846e247fb161361b038eec920e749837912c8c0402006681051920c64c3207d4ad3ab269591f353eb4f0f93eea21b928b9ad9e08d7d44ea6ad385fe08933f04ae3807b0c24adebeff7994007a22539c6fe32ca2ee9f8bd3cde2b0efec468fc7461cf7f4dd8b5fa8d639ab8e11499fbea031a1d5427f950d24254738e33d66b616eddc67be39d14481428434a7f9f216b8712ed6bbad019c61fb746f53877074a4f8625967b8608a5e6d386251f6d497b41af0a9307b6156f696aceec63e8fd9fa92d4ce128659d76b7882bda6a8204ef7cf0921ee9e43b3f8c34ad4c5aa1d9b04ec09196097551f57899574a5f4cca8a52a14b72adad8b4e77c9bf7e2320dad849a516fc912976815a7d684d33a5408da193a53e599900283d21f88f64d4cf996a8eb18400a0bcbd5e62edadd352dac00fd2de66152294fcb2621bae09b5b7e590825ff275abd37c0972eda891ecb20fec5811d5659cb981cbac51cd600c0e80408ee8c1f654433eca7d9c40c6e701535675715e9a617d7c45c7e44d5bdc96810a090bb69ed8857f5987e5f57e4e863607ef04dc33e01dcee26bb3d02c3b3aaa9c85df16e75771a86c490aa110bf1656a5c7617480518bb404164d40572342d130e9e78fae634264bcad32b95d7caac599c86ad594c2d83493722a0b513f8b7a3c5d8aac7cb6944a2031d81b4543723564ccbb6b6e5d3112c735ac605ca8f5ce7274fe2091a8495ec8f7c5ada7f6c6c1655976d90299956b102f0ead27e156cc03929631a729c416e09c55ddd0458ea71e17fe1abb05a185ed2627af759d787fb84e0d772564bf18103309d0283fcf98789a7c11791ae558531c8cc5bafb9dbf6cc8601964def291bd637b599b66cd37c85830c287e4f7d440ba5ec2b48534a81badd108435965cebd655634d57d2a50e18504bb2448b95f06bcaad17aa80b1677b32a9f6ed0bd12ae178b3e26c0069bc1db315d13e51c1138dc9af1b2186c40b7c9e5f44787fb4d601049688e525f5dcf77fb3811183b5ce09d7514357cfc8a83c558bf3b32b664194d8109704da5de54e61a5fcb6c6d70aaf5aab9ffb8dc1015932d427d817e92c31b01f29944ffcacaed006e3f24110e1fb93b31247375f539d132fd67ecf55557e0b5322f18e5b437ed5c72985b54c1152c99c4dcde702e8a0aaec6fe616c5a292eca69db31175bbf874bb9733f607964281736b2edbac41beac554d457bd4def731f162ae9324484c5f557239e60ff9a82ad1576880c8c8daad91e7321c96175289a63c68761627792173825c543a5433b57c0ea5ea78269e08cc2f80105513da2fceeae5cebcc85c0e73cc0595c085ef6e21afe83f8916fdfc19557fb283e93340d2fe90f6acee810d0831fbb7dea7d06e852e2c5fa9200e121678cf0c1aaca080784c4609d49b8f47dda9224750992ae9fd465d8c0127c95d085dd7081878812207290c8425d2262a5fd66e495a5257623bd68dfb96a1eed92d81f9d53ccc2e2e20d724ee6ba54977f39976c042de713561519c0c31a012cef8b8fb42f6eeef67596e2a0c7ee07cab12dca83aba91f137014a41089c5de0e4afb3c78ed51c33a5fe6818ecf02436fde2109a66360718d38ddb81eb98229caa05c37e8336592360a473b9e0ec3c6aca058e1c5e191232bc279af0618c6a4d7966bc45a0ba4d0169f3a2939cd2dbb3b8822afb428b8f2307542fffdc11026debe215f1010860f10675017b4dd03a864578217c00831f01bceb038ab4068a5b3054b24a079e90940dce57582be4d1da6a025b0c125ed2782342b4b8e4d908d396763cd3da1b35bea1cdf9711b67e437c326fa1e0840d471eaa13aed0a2896cc595228a21fae639fbce6cb06d323424412b2b7dc5b6e29654a520691087b08e9084cd14a3ccaf04793e97f956675cbec15d2beeceb74346a1c5857ac1c98a76f615236d5c158adfd6ddbeebd17b7543fe47e7dd5fdfa17d7d7b6ee239251afea6ef7d59ca17e32aaebd9328737ab452d89f5ed512fb96ddb7ab69cfabb62dd6dfbedcfb8f6515cb4167f3d1baa83eda1620b65edf6288b9a766adbe470f65ba775f633cd6adab4f635cdbeecb4b53eacf3b1ea569852b6be0f777e09f23f229de76ccdde690be1fcf9f0fee0c20921ec929ba3b8d5d884993de882333154bfe21fae873f9adcafd5d7627d586378d7139bad8d9bfb6318b66ddbb6fd97db02b2fdfc0d734f6df7c58f48d5b4ae67cb198e49220eff8a4d29b796542c7d5893bae294a1970ca948a1825c65a6b88f7ada7ddcd3b7d70331cb487161be67cbaabf8d93fa9bfaa95aa51efbfb5cf776a6642af5ed718f7ad81e0af53dacdce2b0093373cf61a08c7a14e61e55bf3ff929fcf5a452bf6d77db3e95ba29fcfdc0bca130cb6dcf7d968803b583b257441c28cb591487eaecab3dd46f1bc771d86b1a0a653b1f35937e9941d3088a4680546540449494855a4182c284aad2e586a01b8a26d3910d566c502282134a6a78aac18a02bc68a209232e4c86549a1062074dfc309f9a484197264c20a3b8aa24306aa0ba28dd15270652aade3c516323e3080504cb8ed1854b2a81e685693be28c1a19194ff6081c7ce5d2a41d8104c6c220ca8e68b2a26318d59b7a0491cc2421c7cd4d8e32b6b8caf8ea35c3150653172b1717a019c8fca0898a1145c4b8c470a222658973fd0048460cace8de0ca9d090439e522e9621151a6ea021891942dc992195243f0021432a34f86065fb4db3bcbbfbdd71f7cf5ab1ea363770b607ad096c9e1eab4ae8b27b4a9fd2e5b3bebbee53fa9473520895b4eebf76d8addfac9fa87f25d91916d64af78e105eece943dc37277607e1ecc1bb65cb0c5f0433bba3b8cd768c3862d066b39c091c90b95ac6990082ac4e99d5d9b306d9f7de264a9760ca31471b2ed1141f785c22269280f95e22c15214282a4dc870e7910caa318ad3538e3880a2871fca20424b53136658d1c1162116eca0c5f5f5d19215997bd93802c896aa00cadb5b6e67b34b3ee430924c30d124426f1963ca181346a61871659525b2c86b031ee4aa8020251774dd576519691a49c8d04483fc1a82145e330e4a9401051261b820886e48858a0c6c90031062f0c00c573381e14544010044beb7bbbbbbbb6500949264af3fa410a0c40e0050c209256890fb1b8a1906247143ee2492d092db089803e46f85840cb9994002098d068ad5f8d5a01608bc411b00abc8144a41b46272c1738240f81a4fff87e78cf0f483780e4b84a72fc473687ee6834f315b6eccd378d5c33c8ff6e836e3b6aac1edd7bce21f9c132daec07f3e8fff9cef5f314fea25f6919f62655996e978cd7e7bee6bf7c15737bb9b1c12b750df9ab885c23c2fb1cf1314e691dfc23ef2c7a5e3b383aeda6dcf751df0c93a986bad38c8d69dd09e6beb6ab62ef8a33dfa1ae6d19eccf3dc97c13e4fb2f709e1ef679867f534d887e657f759cf739f25f3f731ccb3fa11b00feb57afd33bad08cc9f799ef933ad9f8f611ef922609f999799d505711bfa32dd4cd7ea68ba103afa353a242ccc3c083334ee6821103ae8aab1b35a7275dc86de8f799efb314e31bfe2593d0dfc5a619f271f0af18b21aa7c0cae6e4355cf335fd58a0f9d56cc231f06fbb4220e12c425bb232fdcc7ba0d182033b9b808cb63bae0912d5501e452fdfdaf96a1c2f7cd984fbbe7fbf3ccf71a310f8fc6f11c7f6ab44d61b9ede396ca413d7c728760af7df6f1f3bc718bbdec9f9725f652d39ce386602f71a6490dcbb09a1f6e8636ddcf39b9aabf2adcbaaae7b9afc23e4fe6b7e443d7c43c307f1fa6e18f6b07216e8f1f2c0cc330fc49d9d21ee626474b7b98ff71f9b434dc8a80eaeff3a8febef617fb3cd130cf7d18ec73a5eceabb0bf3c04fd63eb37888a736d54a88bb611fda670f519e63f1d723246b8fea5afef77f5ca9aee5aae749a9507fb10fea7d7a58d9db4927ce50b36a2ed48f1ead8619a5c5c29a1594afa3039ab7b2d7697f1ef98e7d9e60ef83611efb19f6d1de6217aa712b6ab81531e6f1ef8fb885020e2a9638c3d58f8286838a2940ae7e0d4347a15f7b0dfb04394a02c8d5f8dd66d2fc8537e6675d5dbde07e3432495766f91ebdfd070b6b64d2b5425c19abe7f4b03c56957bb31721b780d0c71ec39f0899364bcaa2acab3ec89797de1b29fd886965926e963f9974b51bb3e562ef8f02f65ebfc87dec51a845fa6b2bfaa390bd6b5f447ef6286845fcb5872e9ef6e6afa6b830bf8215c2fdf628a4dea67e4b7d91fb1c100b10f5f3a17dd5a3b07d0c2ed2bfbd0a172972b1cf139efbdd2f01d8fd8d5f28b27dcc5f6c1fba5af528dc5fe122fef755b8c893222e982e05b79931f8497c9857fd57cb5061cf6de6bf19d7be67f142892a08cc3c2aace336344edc7779162f944cf9fd3cfef7211724a8f1c5f3b9ce12a5f01292d52e4156709b982eee07b17c3c29784e3feaa79b2a21054a0d4443579492ae36850eb5f5330da3b76113122932c5dfbd99f45e42bba9302268c8c95090e62628c2cb9645192242290b0d4f3560b08506a3245a1600849724475ba62c4961afd39a0b197b40ccb0bd285ffb98a336e5128efaff64adcb56e8faf3b3ee27c78ec8cc15cb1c228ecee24f5ec094e1c318a52944dc005918e0c42ff1646986a419e06da8a35582677fef16b06f145086df50473c23c3bfdfaa79fb97257c7742d703de908f75446e2e21e2903f3b2235efc01b3e74b85caf3df98e3f668ccb721b00642e6c431c1c46259cb3d60cd687d9aaa3f91a19a4eb5bfc30147d5689d11f8ab0ae9f7ea0fb46bbcb28f18d3172a1d24429432732a472d425cfaf495c4e08d238359ec6c32ddb0c993e12f28d00849069dcffb00cffa339d56d7234ce8a0575c43cfc0975c03c9cc1df4f9e79ac7168bef536d2fc6cbded8da6fb685a8f95803d15e175bad65a6b083f45e83a10334d37047bdafac901c1e6ad9288dc7208b8455f085d864f2039c1d794713fb814fb535c6e03794e1b19b5511ba99c6e6472c28c287cf2740eeae3770ff7ebe1917d1cbb90251a753ded49f1e273a95e6efc5ec5743f32d168c4d44f187981ad5dd60195d2fdecc4194148a4e416822313130c5672e3ef3ab512d72124617febe210402488e2b21d082a70651f734bfb9facd52798d801c86521d0ba504b5e99103ffb0c0f890fafb3b28ee69bb25c49e9356760630da8287abd46c85fcd7089d753c70ee38a2b24c042021a598c480084831506d05c2faa995cee27818870e0723f27ea76a77f5d29ee8858be228e295047639905bc213759d41e7d1e8c327d22acb2eed681a824d3a740488d2389a444924812a90419246ff257e334b9166f92de34bd09f3a72b5e4f2f2eafd7ab860f777efc9ca89590b86c58be366aa326c31fcd86a1dbb85209f249e9ca570335500b3511ad4546cd43e31c499c2ccb2cb793ed605bce1aa7266bff10a76218867de576b09abca37d86a7517bf4bbc626148a70f4e5f4b4753ea82f72647b146ea1005d3edba3f0e5826c98eb9e502a81a00d7d22208a49a068148d8e90a228313db1e08252248a4b2490ce8f2029ac2064042e57be32fdcb7aef26c70a28bf7e5cf4b7eec7259f3c072a75a13fe94f21a823b6a0c8916b945996655996596b2d951a2ac86c1341544163059569044a2c23cc0696055409ad05314bff14c206d40e524bff4dfffb13aa87deacf5aebbfd37b5ffa3f6f1c6b2a6b51ade7075ba3157fcb130fcdde49e58e2effb658639b2b858abc4cd2cacf9649393f6e44341cad28db666ddadfd28cbcf79c8d228ee68ec4f11470ba00ec7de0378438ec0e57ed2e8a5913c9248328a54924caee44acee44d8ee5e50475c47ef5ab9d9eba38900b35d2cbefa5ce91416d231fc3fe546dd4d4d0c82720ab74fde9e989e8a94b03b55013f51225a22725a6262c2fa748142354428ab28210165c90dfcd4d0e9d1f41521881cb95523e94ef411d444b3ce7c725df8ddc8fdc913c47bae47b14d9a489615b984f2477c4357ab864dcecb122d8d3164ffdeceb67b842af18eb286e8add5c587797ff0ff8f651e88fb848e396d60f714b7be8820f5d15d3dcdda53b7c1e7741ecf34210f83aed4aec17d77e8c11af1071d0a70f037534b600bc413fc21d2d13b0cfbeb367f870c707dcdd6f72076480b812de7089372b36fab633728fc0a45f63873bdf2a71574d5c157078daa39fe120bf5ac1a52a782302d0753d67058a61af1d5a862e18c6a5b231265534e1508403144fd65a7f25251e426da66599ccb2cf3a4a299575c69ff2298df2a59238e96398c47cc04ce3f794724a8f7de453b3e1f647a32544cded48c712871bbf23174362b8dff5d8ed0dd423a3839594118ce9d9afb0f739277eecb70d7f95e2e776b4d7b0d6a2594db31aa474ca49690733065d09a474c63a6b95b16bb2c41813960575340beaa035d3a00eee3b9b0264f832d06edbb625c087e4300bde981bfe643290bb15f4587e573dd9b7c942f66dd22987bc3f79d63bb640446626402d14a26b7e744d2cb4b9e65fb781b9052495fd53994908267677f7e865c3e265044f2358e22084d12fcb59d92bce117383fb4127213d8d43427b7e63c346d340c6dcb9bd95d81c49c1b89f97e3d7c44c020f1d9af65a060617e696436fb2e2f5a58728a45801e483165cb1020d312c61c60a9e54c1c2d54db4c088917bc9fa8b46a7bfbeb6d5860586fcd56043d16103a08eece30d58bcc109295132313571447620966658ce2c4580f93b362589f803322de132830112b6762683226ab7edeebea9e26d8654a888a20b161520a098204909e94a095cad431441dc20891446347135910972c041e1444523432a54f090c57c9929eaf763b5d6997a143751290e9bf3e7525c628a56eacf3a2786d5c7a6b6d272543fdfaa50a8d75eebb28f98b5718ba9f701730ab7ee0f493df629ec3354c7fd4d6d0f39ee7f325735ab6959c5b08ad149b10c09c5a1a1d854c5fdaad69a098106841a32ac18181aabbba968cac2cfb07db537513842a069cdc8b040a8416315a3a2376525c6743f1c4ba8cc0a0e148ae3a4e4dc7af7c90c8571337ac4df8f509452ca186394996fdc44599463dc96653dac9c7a9d6ec71c2ada0ce3f0e47664a420b2e59903023f4319f3ccbeac45a1b4c7b0e73854e7523ac644848f226012da26f3e17eb56e77c5a2f91a8fa65753b4507b2e27a574ce28594dd4432dd43634d191954f030fb9cb700a0d407929075bf200325ce20207390a154a72a4418654689094addcb0dc6fabeeee9b081fb99d10fe4790333234ada8b1e2b710ed5cd918bc69696fc2c7b89d182cb3fcc4ef62942e8ad04527edf587d0c5a32e1a75b1a88b4a64ba48d45e3fab8b42419d4fd6b1d08381aedb3a1e1d1adc13f78b599cb6ef8f0dd3d17877c83d00c330cc637ed561feb313751af349e35bf3f1f793693c0d0cdbc3306c2f0a65ff15c6d25d4a77c984250a5196d94ac9eda47e723093c81fddf8f2ddb11dcc1dfb1e568e799d6e39e6f00acf4e62c8928f45a2bc3d8c2d945b26cced2d867ff8e0149d3ce7a69bbad60dd6e8febbd8dbc67ed7c1b669a1c6b181a8fee5a15323e6fb83744e8709e5ed633a068455ccd3e8608e3dac0c026e1b228e185527dbab51034b0f0606b724366166f9ad7edb5493db51adba0f7ac92b1a3e7e70dc73bf3dea2147e387ccf7a781ffcbad7fff27eb344c0c8dd7f1ed69743dac0c83b72c3a1278e8f468afb5ee834c51a689bf6c39dee86350e655860e38a13df82d136610786384a6c1e108aed05efc27f72d32fb5bf981055ef1ec373c9ae5c1f6be9a1cb3bf0bb325f1cc2eb417e34f2d585e59d6eceff7b0727dfaf7ef5bba45aee2164a668a4bef53fa36d5d59f49fdbdb57e95189832ac028352bec9b00a0c37e456eaa395f668ea76ad142e2132551c972a0b6e47d9ae0775c04c1fa6b31deba73ab965d53b5782aaa5faec25b7837aa8cafe7630a3eea7be67cba8f7dc43e156b551a93dfa314a7bf433cc7272297dfa7129d94992121e209c19e21eeaa2ecada49ba825ff8b4a94f4507bfe45252ba3241ba598c28a2a3000bd11175641f2843961c95f6dcab00a12a5fc6d55901c916d86559020e50bd838c46dc1df32965b104378a34a105086558286727c08001b87b84919be9699436a9fb29af69bf7bc9069720af53aada12eeb8a2b9383bf0f53e3d1fc2225d926c32a404e197f3cfecb9dab1af3366e771513c561540f1d6b4adc7823a594c60cc3321abf1e1eb93faa9058e157c5e0990c9f80e129d7eb78a6c9b89a1217fb2f12d5ae0523bb16cc7fe368cfa2f962119771599601d9debe8f0d6f6f7ff2e7cf7d0cf59f4c3b229d63b0e3107170afe33a6dd4deaae8b2381c8bda9b2d0051e19dd4457d2c229a3fe76c9c094614cfb9d066febc771e492283fbddd4e320d5f1d099c1fc1e3f4e08c293820a2b6040888f912e195ec9b08a111eb28dd004ffed6d37c4b5f7c72d20dc3b8613f3c856ebf71d2dee77bfc6b3815b187d5d316cc75905084b348aafd3ff9a0dcc8946d0c667f6c8046a35f5b5e239719d6fbfe2afb37dec773416b2d693b5c7b08f05983f1632d6d7679a8cfb7d76fbae69f17b15124790d8ceb89e8df7b77177ee8da2917ff5e94053f2b45cd87e583325a5dd907e6a7fc42f4776f8de1f8d9e1c99cea8aac127fb065e0588a90a9052cb8478427bee5f9110d140c995f2c1fd22d3908883b4e7df92a92ff7834e9e93c374e9929f889ca1e47e4694ecee4cff85882862942842220cff809509562656add5f31c0df8fb5721f04696fb42a08d7ff5e81ebd5337b89249c5b06d660b3dedf9fb8059487b455793c1e7d078f81025537f1fe2b47e7b999f7b98bf55ccaffe8606c6de73746cd0899902ca9b42e9c07ff4d091e2be4edd7ca8308d6191f972b3bfc98175b99fe5af8e95a1558cceae7ab671cb2e9231a2b8d7736e5ce67eece6268b35ee9046f257e70b893b3a86da0389bf7b24f73b19d77f859792127d4dce84ba02d3fdef76a51f6eb8914608eb0d6b4a092184994a264a970de1e6ee11420c5589703aa58e0ef65e751b23ee1a4d3931ea3a0f9b2016da58d5c9300ca54385f8eeee148c1637be6c1bc04fc21bb0d65a391a21cc6ec8d201e603279b941b1f3efdc2e79196abeb289834c6183b7843523a37470156b1a89306d18e61d48fa490c8548adbc128b69a2a9818234da1b8127e32f6b2fb709625603fe79c167b0d43ddc671ce04fa73ee608eb94f9aa5206695c59559cd21b61f593de7d1b861b9bb3b8c2c162b4a16abd609b1c0bc6ea47206a1c52a6977ab808b0accb841fe6e3205c30c266e6c300306f846334cd09215d6188cdc06c91733f2cd172e724d86ed6518f690010bac18a6d126f556a5aa6951c486bd322d7c5051a3aa850edbec01f4c2b2f812823cb28466a1c58cf7401265d61b2884686fb7d61b64d423e8a86d60feeacd228a550f234a5924c5f438e2949281fcc20543f9bb29a34919948bcbca904a132de8951b932195264d3f30b981348a13c6412012415f55b56fee23d2b071fcebd92211718786b3ed2de476baf36a6c3cab862bff05a65cffbbc93109e376ee06858828d1296fddad9b916ba36c1a115937fe7a888080cd8d231111c77c560db7feb765b5bbc993082268941b8a85853550e2666f92254984f24d865366c0923b29cb1998f2673845c84a4e6194a4d8d3af95c3f0172b07019b2b8e492ca52b5547f397d2d6690afdb6e75fdde66b16c61d30f7c7a1c6e99f49d9025d0d7f3fd98b1ccc12be7cec8b39b35dfdace54e928cdb99fd180a64583ae2f1e332a41142863762ce8452ca2ab75a9958cec393f5470e678ad748533da186fb9190234fdbf415a07b05c33aedf1306dd3a7fc98bf98e115ac7b2b4bb2587fe3c51cd263dd3cbd52488ed48085826fe5054b952f2dc8fecffa99618b299e10c2871a9c1c71c21955a4804a12605c0122c689244391eaa8bdb820fbcb11ea112464cab85203116e377c9a690101f2b7911145193e64ff102e9213b0e0bbbb1b8746f22083043f9092fd5b3746235bd0e8f28595ec3fc3ed78d5414909828881134c046164041e6418220c265018c1c23d4a01830c2810c880de858901c854f1eea243eeefee67713b0d43931a40f0c6e841f6afc1ed386b2828e2d0903b0c30461163c0c0c26108194c190a438c2fca68d80592246290430f826898e26a29e304e24892dcdfa3bb9b75858c173043773184c8eeeefe31ff84dc563461c0a080dc5f6f1853723f4b0c14e47e980fc2c10f5ef4e008185992b85c7e70244b131df430c40b82c418c18bc21d19ab703922f75f23442091058a20b0e881183f419c2125090920bed8e004c3e07c62a4861a5e03cc8aa6c606093e68cafd5c9ae4fecb7aef26c5ed740ea6297a00f9b30186130500638c1e48e1831e76faa6ca1f387146900d4d93db56343597f560dc90fbb7d5eac7c8125658f0840e4e3c18e304529e2879054999613a412265c913e6ee6eb91dd9ba012bcbfe2206b9fff2a087dccfe28152eea7a2dc4f63ece029f76bab55901427b8ab6d5beda049f6af377754416e2546628eec5bc0c8fe94dbf1eae306214ab0b4830fb478f163640ba1a229b6286183185c58ba7bfe90bb51b9bbbbbba140c179b10509d9bf9e20fbdf2d5a587342a020548f02113e9adc5d0c51d185164bbc7861c48b2ab247a98f4123bbbbb33a6b727b84b06870321845163845f657a71c72ff6539ad20f7bfd317b9dfd34195dc0f73a094fb3be72706a42f67281165e828494987285eb0b484124139b8724f17e0b45ef7f34a689817dc8f9559ee5b6cc95e45762e9cc89e83222a58686a6c68c1446e29b49440cb0e1e0852d9c28a1c5e64e1c48b92a2e8f3c28e18c040c9f5c4df7e4315d345c930940ae35adbd51a6e3842c90583c88e5951c40f945c379e03712b814db9439d0e49810fb228ca904a164338432a583865218dc30291e8de94fec06e29bb697f9cdddfc1ec4e5d7ab7d1970a40dc2c33b7bdedaf71c6fda0539518656a9bf8dc86e77f648a4e92859e366a20d7e8cceabd475860612162d194e3f7442e5b6edc7334972292e7a41ef5aee4f88b517ada267a11f2e47ef0ca5186383a692fc66e01c12d7fdcca1ee63a33e44a885f84f46d6ca5719ab0344e16a8e30bd4513f96d0392e09699bf8b5c6a3c6598a517214d22c1f585a86d119d8ac387293206051a5067f1e7b8d03e234a33ebb36c4e8749f520716d6c4f64d421a168bf6eade2d4a51d3d52eb6f4644d36a1f48610c6ec6605b601109b10fe64d8c91c220ecf1233e4a8f0486d2af5991665d46226abf5cfd97757c8be31f9b5fbc91193f2757cba941bf8fd5e7b34beb50f2c33c4f58f70bb2b7a23c6cc11d7ab7c081b36bc518b19242e16d9d7cfa63623e5ce19f81afe336e7dfada77f6306bda57b12d6e58ac9a9a1a583363c4fdb6edaeaabcd90283557565cbad7e81f9801d855da33e99212ef6113aac1808c59ee2e95744f8b2c6ad5ac9c152cd76a2940f87b8f51b7ac9f0fcec9b03827dad0f3f0cd3296fb06d4cb89f9287fbe5f01c3ea38c1ea3e7fe6d9d8db6f1e7ba9edcce7caef3dc46c35af487d4efa7b53fc3302ae5a67dd4ac16f424d324b671e3d2e5cfe9524a89d1bf992e5dfe9c54462a4bb2ccb66b5749a50b398526f7835884909644a45a27922fd99c32ad94d5dd2ed5cda72f89640e4bb22814f37c15daf3aca773eecf4dc8bc3847cebda92ec3f566faf9671c8acb9e6619de3caf9a8475e37cc8af5fb30c93b14983426503608e78cb9e492a29cb8cf1703f166c0a92637e37295319a148893b62d27b9e6db3b3d136f2b1ed539de736f23d1b5cd751d3340db7ea0fd1bebf6aff3f99d2da6934a2b6a71bd7053db1dc86b7b6d806ed6eb01b4ab17e48b3975977d3d9f0a847ffa67176344cbe8d2e53fa12723eea2b7bb2f3ebcc11f7abc9b2c66b1c8f30bf77c3e22647a5c5baff72e5536ad44de7ecae0d80596eb3e3b4d6dd1db7b01fe23f1fd332aceb185b4ac461bfed57d8deef58bcb517dd355cdbdb2695736a33b8d4bdc21bfe1feda4e4805420cfcf32ec3427bae477796229311bac634fdced8fc4404411359f6694fb6164bab04ad093f56c6b5a35d134d5d8a85caef4c20afa399485b67493e7645db22e4d4d4d4d99174d893674450bc29279d180685858aeb062537b51bea40c57665d34a0db5997499475f11cf96a9bfef8ff2cd6f597d422bd482e728b8fcfaea571e8b7745ab5d7c5954af97ba29913dcefb357a1fbc957ee9f458df3fd8ba8713ea924ce25afef216408e90ad4d1454aad45c849937359027524411d9d89382036794669afa63de975ce245a727373b0946a68740000dee8ff30af6d7a470771cc40b9dff5bf02bf7f46b1f1352c9a3b892651e79ace81abf7f718fb0790a115318ab2853a6edcf901b373f7abb8df2492de304e94661473045494a58c32164d25f9ab58cd12c7d7cc10f7db94bcb2dceb4f9e035dddf115a5d3b72959d239dc93db28d95edfa624f7734feedc536ed85148dae820b0523063d073b8132526a5f431b3e3f86aafbfd6e0c6e828204c0afbd6ca289fc93627f0e3da9808bd6bc3acb6b1acf6ecdb9a9a480209edd9b71d83b2fd56d95afaf6e3d0093c6d9f884f10d665550bbbd8b758674e424de37456a771ec7fe3f8b0efd91fd85b1ed966b135160f8944930533cc90a406edadf6a934ede15bc8bd945dbfbb54c5f03bd467114b7b5a47285047bff6314ae364386ab18ee4be4acafb50752fbe2fbb89bf4ae7fdbf1d6ced9da83d4debd19ef6daf699d0fd6eb26639a925c2a794ea803d1bc717bca17d3674b3efafdeb5102794166246696f8fdabb2ffbf50d597b4d7b161357fbf8f21ceda15fd62b6b7fd3389af63c4830e281286bda27a350e37c5705a863487b1d0d5a9135b845d6344d7bad4a9091a669da5faf75c3dfbdda13715acc30430d4960cd67af0a46088730790136b99e7cd1aa3a24aa8771c7aa8759fafcb854415458f5de45fc55110065a952a1bdfab1fed3d4fa3acd32c1d53e13bad56eeff8bb4a177b7b1feb5037f5b6b91486150b823ab0af1f851a27852394b771e87e8c93ca8ce188046fd4cf68b8dba7b0d9b510630c6a2166aedbbacf85f6ea6b5d56e57e1129fb88541fa8f369af3e2bcaad1f91eabd2cd6bf0f58eb4b161a877e7d1b2a340e5c725a92ebdffaf5534040ae0ac8b5890aebc78d8bad124482e815862158e34cda5e31229ea9c4ff7ddf14c2828e57ac6bf7226c6f16def08fd789fbd91acf068661dbb6bd8ff9db4fb65df77f138939c31490de3b904bdb6fb8ee70bffa73c3df36b74d6e72939bdc5e85edb76d7b3925ee8879934bb4b74de35ebead95c3dfbd2c9686bff7eac3a63f79eb6af7d97081a34fc47386e59488e306dbe87cb233146fcf24f53073c243318bc97529a5f4e87f349476fe54d2af3c34fd6a94b920ee884ee6d39c14cdcbf8b047dbc81f3a6e93bd9c9993ed278a7bec390ef5f57f32a533834db389fddad9b7b6d6a7c00a71477f954fee9c73ce49bb64598642e19609daa3de87f6a81fcb711d9198374c8188c3052deb52bb6074426137af6f33dc9240bff63f39b30d7ff2949df49c7ed840110547f79319a3537a63b9c1c296524228259429d4a55a6bcdb2cf66afbd9829ae69afb30df8b384614b750aa54a53e4525d6a2fce5aebd30de2cf05b90552482195be4552ef825277f22ea86fd942a77cda526a51d3624687fbb596fcf5cc221e453c8a78e8c063090f1d7814f1283a32e7ec57964b2846a7cc612a9144328739e512b964763d97583b6374675670bf0aa1cbc28e4850725292942811494a272505616d0a422b4c473c0401bdb2244559a284cb539315274742415a5e4a4945714917c8e54a53beb1016fc02d534984b8ee3459717224856490969752522ef2255db85c694272d2432de4a46549291a79e99221962b39e5414de9ca6e12a0a67427e7e3c7a54b47ddc01bf06da4d01b9ba816109ae3cb1cf1f742862829f66774b810cb222f5db05c8182e4443eb4c58969898736f292054b142891e8a9e7478d9dd1e1462c238c3e8f88627f2c16976c5db27369cf83b2cb57962df099f2d295ecf09102a429a8c40d57653908d1d008000001009314000020100c0744228140201c134d93f80114000c85984474509b89c3288b711442c618630c31c41000100098a199440992340bc8333edd4bc26e8538a7d1efe0b2f5cb75d9ea689f9c4b4339c075668a01d6af84e41c98d6b08aa621e23df9510b18158c9bce4f026c603b114f214df4371d1270da27bcaa3d0742d4153dbcf9fa8797ece183f499ca92cb018851c23dbad10477df785be30d2e14b0c88d6ffd22eb912b68f6a195234e9362792ba86a45c6a7924d846a201763964ad1f043fd03e4b20e6ed3bf3a5372ed35961512cbf217ddaec195292df9bdf404a789c6455a376e36a65db86a13d5537e2f0f002c200256fa738275ec58fe8f7dbea439d6b8c3749f7bd54f1676de77bd7b28881e25e437276ea593bd46425342c9063bcc3cd9758874ada95a33f8d71c48d2c73bfe6f8a21ac700b9067370fd82e7a09ccbadb7f3838b41d7ef889cf12a834f4ca354154016f198c99ed2167f47939fe66c74ce20663e3a77ca6c97a479c928177a811b23e1492f40976919b27e069290951b733542ac77fb8ff47c2f989c58402ac8897931d66c3903a25f5d5800b2c91fafa21612e1d468d0f95c4f7bd48e977a4e69aaba9f1cbeb6db9558bf6f853d641633e4fed2dadf5db79f7770d7cc0f31bc782bafca6468e5c446f69c8f8a76102cfcde577d0c30ef535c03580b26f97c054b944ddac70c5886e38f5e272fa8c13205a9ae6717090dac11f04b865e150cc93ef8ced6e92c57632c8cc64a1f03e83b9fb68d4222cefae0c8ea0571964e792a6f1d4b8f45836d6cfe88d97e6199ba7cdc93fb89b47e4afaab0698cf5099ee6abe36cbeeef9445c57a1ceb28f5e8532de27d9850ce5aceacc27e9ae054b422d242d5d19cbd10c6e8bc7dbab8e48e1cae6e59472febe2800699984971a5264487d3c5854446540d80ec372ee1a2ec3015594287b70c1860edc57320482e58cf69974f27174c0346d45858c59a21527dafad88ecfd990751e5050afd053a3811652e70ce26ea20e5abd29951e7bd402be2b4c8f6271bd88052714de45cce2684737999223ca7f3e74b5861ae39546cbf061b9521bcb9c62511833cf58c5df1d5105f7a981c007259c48a3da4c877c69be752143a38def26bd92e094bcab591879f7f6744d83a25aa9d16b0a8b14e1f12b257e72130a8e2fe7d16161e6846d89e86200ab99b6822a31680e3f01b0c39ca90384f287e83aa8133052f28d5f092bc775986bbeb7cc097beb3c56462b6bd88c91363ac763d6d81657c3497a1f3f49a95ef6a78e4f5511f25a09ffe104c102d2c67c198dca6e2b064c65188685042e8ab435cf7529421b357a8965872ded164e9cf33a4e83fde67ccce5a60d0b3ccf6203661ceae32373b163f59d687478b5b33360e6b92c6e7d56256d20c7fad7856d0b48fdefa109edbb89fac76be84926a359afc0a1cea6266a8d9f9c293bfa2567002775dfc24ab0d4bb2e8405c48788a79c1e283c0b7c3d39053881d25014887d0e07c1d32f32831de5a4405458b0d8a7af8442cc167431cc405fb3a82cbc45952f242ae67f01cdbf2eb0534b24b11aaa1f752e04ccc57fda4c6471651a2155b6d9166b0928fbeeabfd92f8ea2a17e7931dabc0c861146c9980041745eb2b698161a404611c9c22055445c21d03aeb297688f0012b1b410ccc123716de211d7debe1c544cc07b55c9902b85cb415003fab442569215bac5f5e0d119999e04a4cadda8650371f9e2d7f8bc8a408483440e0fa5c84b9c3b2851e0abe7f36fcfa1aad18ca1b4fb3e0088d37472102019965a110c507833d06dc2dc3908768d1b8b0758c04e76406d5c9fdbf80fd436ed20b11bf07f548e564323ea7a73123934a81569466634f247c6e91364e01c94c3a710818443a9b2010b8c1e90d905fee82053ceffe16357457c363cac7e0ccdbbc65bee0c36c77de43c1179f0248a3986eb140a33a3666e2f8cbc3e67a83ef04e5b84a45107a5adf7b41cef6d06d8ab67a3c8db322ef39800c6d313901a6f5166f50f2884ca759be0034812a97a8932c2b08a51c947708128642b80ca5934ba4c0443e8c0663d10d7812ed4f51405ca8fae9acd25814e277f6be65b01dc7eabab12e64c67d29500bb3501bac4009c7aa8658e33ea68168e01d0c706466044f8081e6c3b832db4432ecb290ed1d54ce0fa4770f660a384d066f2dee1ca4fb631ffcc011a979d4ee21866306c93520bbd9bc1de4523bccec84accab213187d0f8fa489f4a0ece7d34c843ceb058b0b0ae86fac9b51bfd975033dcf146b19b93037aa381de80bb940ea8be9bab971036f5953b99360401293b95a44180443794f2821cb6ba375910020f9e0f255162a60ec14393dd45c6a9bf72c528543ee6196fda76eb606492c5c92577b8d8f0297431f331912c4fc3a39c23f168e1e80af635c742fa587c3d4ea1072fa165940cb47045d298e9f59f3fa6b660a93631e9005117a3112894b61d54a25f9a120d93953a91de66cd8f3b228a4113d0d2be81286ae47c5f5e574bd45358a5f9603ed07a90c18bfc36c41aaa65f6950078a18ad23f8a3e47c7145ab06db45a2ccf57c9cc0b83f5b219fb94402bd6d9b8572e30b47fdef6350faa9b164721a42af2f3f99e44cd417191e52d3187d29f03965ead74e049be6a7cb2648cdc4c61928f85805ae45ff949f802caeeb628b1a9eb583c219e03ae08e226df5da9319660fbd9c000987cf54ca41a8cfda855eaf4c4d188961d333f343cc1f216fb4c58a18661cb2e6b995cb5c66b77c077f3d3de0a3c2f8faba2beaa35791856d10a5ae3c39efeab88d22ba2980738d82bbdd0cfee2ffb8fabf6e0580df4663945f52c1099b3edb6019b80de8c5c84117a0bfa039a5fea30a1ead192b64f8a20082c126f03b848291f31b694a6a811f763246896da629b884b30016bb7915f6a0915142eb7677b8890a7a0c548fd3e37d02b4a6e9bf2b75f0a2306001fca85461012ff5b87ea545dc443a630f234b393ceeba5bab24698ac755012783dd6dfffb1543b38a638899ebca25e01a0681f6193f28cf010b239651671da6e4732414792ab9ec4d6b2c2f7b6cb318a4f9d6a2d35c440cd292f632af38a11da9d0b920a4802f9c0ed0c62ec34f5ae4af2b1856382e046839d47d1691bc787540e5a4d50a2a0e645ad81738f4f5f1666ec3e4a95583e546b83a3b044a7e094c24074f8ee9a99312593e502c6673e02db2421030c4e40e52d1311482a48c1abef60564955f891f2fbe306d369bf5b2b3da2b74baf78649295272eb810c39f8569d9b35dcb932b91eb3eff679b847d5d5b2072cc739d09da38c4f8ba70db2046db09840b1db25d48e5d3c05657add17642e367d45b57e6b79bd68c1af1b39f27ff72b72865b5dc2f9cbbf1a53726a5facf8722d76670afc87d7d581959fd37916a5994b93876ae02a6f2d6385d28f32ac44db52ab3121b043a2316ad7dbf4ec01ed1355c0441c54e6e56bf9c85c3d2d38d134ad22917737b5d1efd3fad96c6948d094cc028d03ef8a5b82400ca708f37b1c8b47dbc64b0ec8410c84e391dfcde15b96237b808ef7f413df060715ee02bfacb3e4d82693131fabbceb7645932ff3e85c897765f6f5e943a41b171ad40ab40a3682400a4b31dcaed24c483976972986b3645fe58622a7f5de78f5faf139efc348d81fdf38b0526b6d7e925696df5ad7c3f6ad538e8a1ff59ed2454fece43e801e5c2ccfe388849f6b502b2b54fcc8f840b9bdcd735dc726c7d08df04533cf93636cba6c69213a6865682e0c46d3cd812b618d543175aca9e25b6304d2dcca29af2e78f604fc4750a71c8b035be4fc42a46f94db809a8953118c7af93a30e430fcdefff125b907c07513ee18593c12b81b344eb55c5230a3ef95d65b5f0a4f0475a2cc14fbfb5335bd5d7199bac2541850f66e13d88e41e587704f6a32be133c80101acf0e4934aa96588ccd8397550b6c34afc3ce8b3e762f62d1d7a56f52fadf4614d2547ff8699e34c332407f217cc2cb7386f01fec2278c09a6e4ca0d351699518ec5a7b3f59763d27de0a00af396e26cb74357f63cfa239472fa3269312a9eff969d31e7d835db01627776ee6cf56704df128464ae3f8f887addccf6f3914e289653c4c932b38027ce0dc0108d89590f8f70f0238ede37c7372050af13311fd0a6b0b54c03e52e4d29de64339cef406a687b3565f8e25c40907fa584ee98430f8a7e607a1c721d295dffc0895c94230be2db2d7e3cab22b9e10805ae199dc38ddf9a74592a5bbbc781c80385b4187ff72772abe863c545f3946ac90618f3603d0c622b3b83dd77d16b97efec7c43de366322ea8c78045ae356a4610f7c73dc6b87adc198ba6f430a5f8744969d61b2f22ac00a18a6b3767f06d873beb5cee2f3034f2d78cf622a2e3de0b1237dfde48f5a11862afd278a1528aa0665ef4f8f59fd981570f7e6a73fefae27c3a4500d366127c79ddcf6d682a6941a5fd682e30767582617434edcc91b165ba276f083e348c892b138b18de5390baeff21a4f3874d016ccd3616b5bd8355876d512e34008d0bf6f757b48ff57820abee533d2b1c3b30f6f393b9690c83e72ebd25dfef1aae507ccab4b47cdeab8fac7a403fd3e759649d950cbe5f348ffa91e89506eba751fca5aaee85de50b66dc3b9654370f7806dbf449adcb1afe7b2cad944871bb1db550d04b51651422c7403b5f9d44e044e0deac077b4073bb15ee7ef05ad7400105e2c5d3ee8e06ea83eabc37b8900e78d586b5506aad3936e3cbbe1b68a354ac9b610fd89618d19ece7a69eda6f2b7caade01d91d96d773088ad112095c0e1e57f874a5a4f6358a3c4c73866b0902ea0683c59ec16a6e87108988c5074f1d613305eaed7c016cfdcd067957992346c610efbf2226d939e3a26bd47ce3415e618046aa9eb8672422e59239a5d25695a1e4315b5aef4c1ae538c1df92c879e5264f8691f19448a32b6b41b7286b006bd593ae15b1e6f038e57524dbe022e75e95e220cf78fdb6e2068d8a9b8274b03b0571a9fa9b59b82b1be38463b2f2d129def657f1ed7cf0b2813caeb4fc1f7ff9719eb8dc0263e774e957e9046bf1d0dba26085a6b0d76d48f3cacaabfd91e832c4f4653c2da129d41c718ff6b2adb17a236dc6ec9ee31ac66a6b64fb4de3854892a9aaaf00ffcc741c4a3f5edd3e57e6a15357beece842e8522677da058d4fcee14d0a109cb6b4e14f5475939cb8a730fe78f788d22b816e100bba8d4dd7d9547d133c79d50e491b913e43fce9fe19f6a438719a6c87287647354820d66156401607d57f878d1b5a0da3da8c6d63471e3178ab054cb95df1b4daae4f9024da4895a4b9368d786c75025dbe154a5e9dbbecd0a648c52eb7486d8aff6e00b011bc6325fb69936bfbdf0e48fb985a3899a8c9a4a997ec618262ad1a47878fa271c7d8d8c3fb59080241dfd1c1f8a494cec1b61e98808bb63fb0795052da594d6b205bdf22780429beaea98e05c83d01f342869660c83c2c9750a33832791c1e40c8f9ddf064b421470ef514382029af899261c41f5f375ac504a6b9324194d3f276f406c8371f2fc2ae1225b0924c01d9b3f5bef10ffc86659f3f5500a3f7a7f31cdcd35de53ab03319a8780621a5d1fea4ceeab654d32741622cb002ea8db37ade9885afc85275ce60f3c8fb19c532ff683370304687d8a9540b501c66c7530ff13578330dedbd66af22e84bc4dfd3ef75dfe1cfb24a5a9becb76106c97123f4f76c09eca35a0de1c8d14a74ab512779beb68e26719e590f3ceb0705014d827e110aaa6f6a4ed84ca9e60b8f541ff2efe54159875c867d01817e2f8b16b382ef04d7e48093d5922a85891465f4d323d5769e28649e98bfbb1a80860db67a89432f1ef6eac7d83522cff4134e33d1670cbe942bcd7f8dbe59dd8cb3b64679d6ccda2e41eeb2e8f5fed146ae6bd194274ea4ce010342bdc27329f7693729c3f028d9cf945795b08774bacf7506d3301a24e5a02af649f49c0fd9a0bc64569d81fb33e593dd21db0632a25fb3a36e559ad9b5a522bee33fe4fe065618a9278cd1234211d9975ce809aa028f34048041953c9d0ee627b01975c280821403eadfb0aa2270af7a0f219ec5f1f3735f0d354fc2aabc34140f7f043ce310621932dd386bd8af8484ff869b5d299a9a6cf0d14a105ac44cddc256b55f53610fcd07373daf09e71a3ceb4987d50e184e4a837620d5fd1d8aefbf79f8963f65327482235b16fd2dbb15397c6554b18d573f70788f5db66eb8b8c2c910e3e6fa0fd0aef51c9e110839780633181e89b53ea968088abc240a118cec1fe10611b00adc629f09feca5bc71f8209070932924e80ff980e3a64ce1dbded406214debff25e7c5b3dd4460a85582a9297381522e02a8ca0647fbc8fdc3d42484037e53cb739f27920e0b643c0f4d7212dcb9b22088678cdd16729d1a9913672a9c40fee6db3a6b5027f5ac53a0e76d8f1e1a0910633244fca2992167c0fd7c74531075a17fe6edde5343650c5c192cc251f10aeab335da07a3ce7504be47b287bdc72cce3151045f6dcd517939947171f14404f1677c8db34c2e47a74edea39f3c7b412c7bc6f926aee7c5ac0689182dcf42aecd11e8366a7ecc3a73f5f0e1685b0695c2dee1771649888266323f5ef6f972d3613347f368dba6086a61d0d2fc2e911b12ea6dd3c84d3e24482007f25ed38927e4a6db274525e69ee1a817446f623d380c522bbcd58ced1a3ad72257797708071d21c4a6d343f017e3e44a5ddde80357a24bb51add1822662c923cf2fafa8c6ce99c88a1c22351d1f2bcf520e5b926d6358457787d1b0639fc0c6f8d9dab0a157bd65d5f12859748c4ea528394b56c4c51f0e0137c5b247f044271d55fc049c93ef0745ad1247e8eaa150e87aa8aaaebc601874850825725e593c5cd07d9cb37213e0d39d7894ea2d1069d55bf4bb8585c180b5e0cd6b6b834678affafdb6464d1b34514e38f3a4c6624d992429f45d38dd915d34cdf22150c6a3c33d4728fa0e34e379ced562deb847828c1d189a8a5bac1894de29abbfc93918cb47b460455a50deb2364b32c1001f4dca1614fa3c3570419e829231d9f8334590d404d564f6b84703014d81520729a8f6c54f72193008b0af7fa1eb83ca0f772ce89987266d63065eb12e6913122473d25e2b749d55804d4fced50a1e60cb5433bb37dfcc22db9e0c278da35de4a4954c4c733f4f45d543192d6443b76684781b35df6265b603703848b4668a8ddc5c08c9a58f7956d02c36808452b5e96d8897529c600ee380329a60c23927feb9840fe33e632a75db0081be00d7e141a69ef189ca77bf474c4a34b95cddc600176f6f27e5ae18eea49ea7cd359bcea9a777a67ef6a5a2fd7e8a803391e2f4b0aab57475819ac30dfdc19a0c4d1acbc62d6a3d157c701e93e1119b61f46ca8709385fa0356ae110e9df40d867462e38b3088e197f995429e70a01e22a0df30ad119bc7c1cdccd40a35ac76ee6f0b20746b5f3260c65eea51c6a269b426cda368d751aaa73f65a438d0b491a0bcf1ce0ffba00d1d75ae20d222e8355bda43af0634405c978ce22e3fc9ba781fabca4784ba801e7a2d272dfd2893013ba8f29215a4965d9f7721decfe1cd72391c24b9ba6b324a3cba23aaa555b81a0ed4f69eebe83cc45865060eb76a8515c3869b0548b091cb3606760b3646ef79cc06bf42ba057825a7a0005884da1aaa380fe8db87295cac137dbfc4959b4ad6eedf7efbb3bfb11f9c3c4e0f0a61b303f80a9878eaf9f8d734f52d40a761fdcebf560d453437c53488707ab9a36c8d10a115ead49219c0fa454fb171789f4da1d4c8756ea90673581436d3708a2a4e991960373482c1f034d8fdb542219e1234f9c1b077ab2442cb4bad3035a39e975cb5fd49c7c93d61cd9f730f7ad260657d15dbabe5505321a592c4c33571140a166602debef0e739176bcb9485ca6402f9f16e6b741b5f9f17505dad074eec597b701804550d52fd024a12d9db19cffc987dbe3e357df6d61019328b900e1724acaf7f802e3ea4db27325b50fd82e2187468f3a88a2608fac823c10f8716c9a9805a21bf75b757599c2aa45c48018b24914f0e218464fea34b59c73bfcf1340a403f796870d3287ea7a1b64f3576effb9de24306fcd769cee05212f0fb258edfbf2e13ea44ec7b29ff3d2cd2f0ab640bdc3a9e5ed3a855f693e38aa1b3b458f01af910b6fdb97a02adf93c51e964d45baed165d96705bb4494bd28e6e37a107b924cfaa63b8b37a4854bf4893ac2924630da954068f5046e1a44dde4df5fcb384e46650223a33ee2cc515cd1b442d8db18b466ea250e837005490a5f6f45ad63b142fd7f9021c08e082d37fe58adae359f9a406245290f47879e557cd9e561fe678172b25de41a2f4fb137c3f6f978e0fbea4b6eb01f9f1349b89d9b7fdfae7390cf7aa66e3dd2a7876c5ac1a0cd32d2c3ecea8c3f28fe8830916026086302814c26c03402984a3453843185482613692643133c45c99da0447ba2293eea80c713f0cb6f19084a0c0decaa66726a7c1dac95954ca328d660faf62bea672b2a81180f2299749eca27583c1e0119982c799fca35507c88301941269d4fe5082e9e8498100f1c9a7c1f754da0cc34693bfbf2ad2b6fe1d579e13f756f1cc1544f76c9086fd937aa51a61ad5bb78c8033b1311db98fbed0a23104db57bea52e050e4c52879940c4b51bbb6d141f1956260da758e2d537a30a77ac6802f8e70aea8e9d05ea4e3465a6fa4258c1875257d1769b8058867289609c10369bc93a2e7aadf675f09792280bbabc77e44aad2ee30898ece282ad59e52b3e9aa70cdfdf4848113977f2a3f3e6df2944a070d4e024440c9f426e9151374b2e00ea7a1134b94c8bc012ad96013f1f2370b32b312a7f3240da341821a2e2bef8523609ee9b767e63ad65fd69b82e5af4deb04389d8a872387f72b823333095b025fbbfa6851ef0e0d95ab6f5d71a9367f2c1dd89d1d00a3f05685d661bc6cf3a92fc0fc36efc396ee0145bb3e78658f9df9d1805e7bc4017b4ad6939c8598cb64440a048926e0e110d6f52cf6cce56285eec309bb60c9520165600d47e660e5d1c79ef467b73399fd60f770105dbcc3fcc2eb3a00eb40fbe4d2032b36a3c2b6e98312fa19fc8f4a245f1a82787d966d5a8b2c8736b10d2007d20e08d83648d2a691e3e67329f41389f615456d8d58e2587fdb1db2eff698691dd47e603fb6da646b0f99c9652bf2ab1f4f86671c32eaf3920b07bc92acb1f23c99251cdc022b0bf8e14ef0401ee511d049206ca1d9ae3b5aaa4ec4d1d7ba66983365589d14fac3b2d8ff509470c217b37edf4564eb358ecab47c9fc88ca92b7a49291e9564ac52d3468aef47d2527e432539699deefd53b9b46c97bf324f849ea6b4dc2fc662bcc080eda41c3175d526297696a16cd733946b721a8a8163cd47ac495c0a10035d15d49ac1340d788450d05f4044be3596eaee57c77671f94612107ef8ad168e40afbe846ac854d68400abe601b65d1e20f2d70c5bee97262d69b279e68d91f0e4783e71a96a831b930617d6f6a98e22c284a9ab708afd91619c55ca6c0c11a1bb5a47a308c84a68ca57aa93cdf1304e8062342e29aa337146c4a81d6ceaf1b7d0925ad029297487aaab67d137e2c89007b23f1c35d2127a8f156b696d8ab139b860f11538513c9463db5d91c314cf3b6d2833ef42dbd2a389a1013ec18fd8cc16a597b05c573714fa6a309c7f5d2da5342202359ee416127ca275d8718649a307924d248febbfffbbd5969632acfadb8880ea2dd0cc37fbb7a9f7d427d24ead71fffc6b21716f7c4afd1e38c72d16dda9a3cde0629601e75caa0c91df2ea1b16aa39c108bf209c4e946cf12944edd27cc1ff66a41f918fe0227e54bf88ba8f30f6f55f9906a95f6b82441685398e7473f338d26cbab3d2f6820910b4700930c101ac40c3035d44574421f17e4c4fb562a99d4363e2d59813b034585244b8a9e66d387104a644ab2c10b39a291a8e8bc115457e5c4ec4d8adcace73cf2928d2ee9867c269c556f4214b9e7d9852fcb43fb06e9b3eae31b800dc5c887ac511f3dfd7ec7740a104abfa0360a3d4cc5e9350360b92990fe3d138580b4cc7d138dbfada760be3b32a5e3c34f3c6d26176e86a70df90182243a1f6d67ec84f281959ec68932aef56ae6d439a95df0f3022bb270caff16160faa0de57ec4899f63c61b7909099f29895310bf5dac8c9f55fa0c4dd7e9a99561c39996966ea2b3c97bc273a067b8c25bfb128e2ce722c128bfee08fc66a6563601d6d9b2c2dc198efc2f1524581a6ba89b3b37c641bc9b09a8abccdd85db9bcdb2139a3ea574805be2f0ff6fbba4d6fa086db5f9daf0eade120f4909db9fecc61c17d6f4a8ac8154bf5d3cc7156a4f89c10bd95dbc1c13704c37d67d8fb4d37b0853e250133fe79a885288432e3b2c478699e9d607c746d16c6aee2dbae1be82954ea69967de29645fec2c2f886777e73d48388cc81ab7209a3bef365660d63dcddd4f4f7fb6e3f0ed8b4e1a8f29bb2fcb11f389f0746ba8d08a4d094865e7e83e0d88589d921aaa4451400ee09dddbcd83075adb641305f8f7aa35d699a9a0bb3d07ea2c0012bfd74d9da4c2c66ada1401f2f74c2ebd1c2ab571b5a53b5396715d0d5ad1b80211e1bed5d03911e599ecba6634f46847405de457cedec48e43f962f920a2325be2ef524f90534cde04d64c6dcfb2cc9895058c1aacfb2ae3e8cf8f0ce44d8c86617b6c19cec14b4fe61ae434f94a6ccda7f59c7e106482f3d16968fe9284dcb9c7838267741f49b34c440a0a1d6715d566c08a919644aa7c4c3cddc32566df74b7d2cf1244f4be15e9907d5a08397d9503fde383355da14ff9e0ecbad1386868d7fddd5266bc327dd24b6cbc3be3c8975c6852e834dbba3dbebdba3ab67ad8dff45cc6eb2e7331beda26c87e29f6ec56688b60e1c0f6acb0bb4d3a6ab9e35aa015d10ce588ccdbc10a321c04fc33dc6c1ab5d5e10940d3f7895bd471dbfd8ded9ed6ba52c4c54c500afea66532c9b4e54d088cc2425c210705992a18d6de038564d02d979fc4975316ae223675578c5e257583ecae63d88739393d3421ad78ffd59d0a32172489d8d06f970012cdd9488970ccdc1a90af89948de0130167cbb65bd535733a31f08424454810de848c188bd3dbd10c1f1f93a027b017ec300b4093ec9ffe758ba17962f6728b82a251ece23ac877bd750e259871f3f6d3df3fb0418d7562f439d4e9997df087fe1fee07ff060c470172a402bc3650873ba6c068f03a915ce1043a475a41dfbca5c12634176ec0ad87df35f05a62acc083b515dc9e74b6a4278db909e76295c3a02eed6ca134fd0afbb989bd3a679ec7163de11fd8ddfcbb7c857ec34abb7f20011aa8f9909db05335b05414351cc76e19027fa9fe5ab6378a118114bd7ab20c380c9bd16406c25ddf269312857106fe5e06856ac244f4c11c28a0a034e6b2a7f5811846e1360cdcc142f54039b5dc552df7ed0c4f22ddc4a7c22160d80b12f6bdaf0bc084a74138429bd38faeb45ecc81dd390e428aeede826f3a9ab7d3558b142bcefeeefb2311d1ba3294fa72e8f591c50041d4b10f839127c9117adf6bb49a133311c1eda4b5c08710c6ad0ab66c86de8c68a09bf6d3b437e48338ab8b628e8b6cd39148475fa1ab2770f8200fe5c19fe65df0fa7c0b941e656f10310bbb343caec59592cd608e28f73b079a89ad939d994132e588646f96f7c7380f02e1125d281e7519e89a7933a66f92ed4fb7c227cc6a260fa17e2f29b1fab494cf6f48302074cb6a579b08499fcaa88bc2c57a88dc54bf4f68aaf4133adf9be90fb22369386b6962cddb7a9dd22d817c13521a9cfe87053024c04ae8c4e6c890b7d1b3e7f8b0e43f4bad1a491c2823917a0910b7cc0deb009e0bddc85c5cb883987c9f1706675986c6a57df11429ef8aaac16d049386aa7f31f517cbbbdca3d81a8000713cb7a8e3be284da5c67111afdc2b58b29b5fb2d3a06073b9cae8aaf9521aecda06fbacdea8a4902b67f566cc1b3f96ba8721f7a60577b28b507db5e6342694034a83daf97716a6cdef4bb0d8f8ce0e1174f9b5b547e30c4d8a995815ef070609584a6420cb07770f04127b552d2f2538889f9bf27f89e8318c0cbdc878d4d162e6ac27ed31fcd9c8a653c2cbf19fb34e7dd21b19093b5a880b6e6ec62d950a8f5bc4bdb28916020ee951f1a947805347dc89aac922dafd82a7fe1d865b75f9752c987689cb86097b972bb916637c0232a3b4beae50c0fad8301cd1427317001305d444754063b722399ec226050d40cb02ef3d4e65c63ef81a98242b406c039ecf91ac1bbcb95c79e6518d7caa40ed296bf60f47a9a4f97356efb0fb93442e462a89877eb3b6392e7789b179f63c170c017f42837a3389e8dc62cfd2e8c681c2ca8d8034d004c6902c4c970cb87b19f102b0870eb45723ada6cf27d319c0057d71b9c6dd2b319894c48e216159f1c8e8094ee2d7592cb0ab33fbed4d6f1264e62091dcb2c5551bd985b86c40547ec02c460e1838fc4b50f34c354005cacc981a6c124d361803384a5d3c4a573e3be98bcd1aac04b1bfd52d0036287a7e41fccea90506277277a942618945c5159ea5e64af5c8edbc7e8cbc8b09fa2323ec8e7624e3e0f0698bdfffe3a9060b2ed913c761c8b42690a07aa685d74b93d80681bbf03ba155f4990688ed129ba54ae1b6a6709ff1b8e6a00adee685b4382d8446a46c834314acb873effe7bc6311dedc626749f5dc998fcd676c6c7f874153914361d7fb23191de9adcc1dd7ab13cad8366a1e9433e31b8bd89fa2e7dd80f4c379bdc220d44d4516a622c8b46cfab04bf773ee65744b9334910dab4e7d1a81f8e24914e7676301c41efc2c30d99bc5065a68a17935d56a3b49d8949007d0ec6e71cc012d952f6eb7af03f3e85f118f7d1dae2b837db2e06b3987a4ce6b750d73e683e21cd0e223a92db3f80ca0970fc3a510102ce0e2fce1de98c7daacf409312ee761c1381abee6f26ba0fb892b5e4ddec60e9a845819d4d3e6dd6e5a3aa7ea3fd7e5a07a23aa9eb5c3b7b43bf3beb497bd417f6fce5155138e076d6a9e608bb555e8d33852dd2f64c770100cba0d17b8e1810bd8094d7475810ad7b432fbb8d912682e4bb57d207e34f6f4b67112d10d482a79298de97bf8cbc9d22eca5ff9baca005c10cd89971eb2d9487d8977878890026dc1928f50d6acf6a3842045a199e0ab4c43c4af5b02ea908d2972b53e5140f52344d7a68d9a977f44371fdb218b45470a72bd7a439185acba7a23054b6a2c41bc7d890d3b6321e689fea594af3b02e2f310b7ee3d69514ef48a5ef7c5e50ab16ab6bc54d320b496a08d04c792d18828080b95a97f37b5175a3158b97ee2fc949addb4096b5eeb60bf1ee1f143b101fc69c44dd853ef96359421a75b6ae3c11baf5a8643fe7543daf7f267569c76277497f3b5bfd2ac3091257e7abc5a97d4262d281f1b80d76ea780fefe1a31b0557756105c37635367510c2a4a83610c9a682982d393673cd225c4c69ec2987a79db91b7ead3a131b2a66be33b9e2518cbfdd353ec7b4f9cf53fac1d6b700555d3fd29286a5523b1c0945e631bd426a17322df2f5053305a3a8a83cf35686b634b6f51ec737144a8e8d5ad1fa8e6b00200658babaf206abb706457f88d05d7a54388a1905a6b81a235b922ce95b80b4e7c60f2211e94da5160123568d0ee2fb77d5c46e0b3fe755ea2b36fdb4b119b8b42fb7144fa13dacf11da819a5b0b2d69760acbd3ebdf42ef8fd9ba20b7f18ff79c43db315bdc598b24dddd2aacb2013f2617bd228025cfe8119ee94b67c7362c08fa235f4f401a01e7c47954af0cca982f05f1819ce2e95daba87cb430e1d7fe696c6657a9857489b57e97e404c32f80041b124b232dd6659f10451126c98f6fef429933bb70c0cdaf7b6946d18d4b2b1a2f455c29ed58517b643c530cc3c13c7a9425aed98ac32254899ce93424dbc182ba0090fd385b3e623762feceb2953394739843b82f9e671b51d2809a0b3e9436d05ff08ec8e67615baed70b7e16c4d1141f141332003345acb9a3799205562c8cd646f4da5645b362446e46d462b53ab423ff38fa43a126176152c70656a8bca1a1f45ced1ec8f574615470a35a273a1bf1c55ab7bceab8509d102145d84b602bf3c7b55de2962456b23a53f7fe934cdbbf46181d4d76e655e038323d3f9c448c2c21f611764998e5fd22a4994fb9b6e84968f6f26b7b5f4bb6bfde8d564cfde35d0194133e4074bffc5985e3b08d4853b1b9c36b7756e5012bb8d0a559c0fe974451958c307f065e5ce67264a94a895a88f3c66b577b723c8bd78f46e5d6150083688ec1b11fe77bf59f8b18b9ebb256b4afaf5bbcdf270ad889d6b2c055c9b6e5ff6522999cb435864d5595d22607a11f812378194775dc1a157796c21931f76e888bb28f1b7585c85710a3b6d92e2386bff893c77a2f0b0360aefdbbbab2287382732e37b0f6ebbefffc5a305e62f4f827a0433c27b11d1433649fd8f267e5253061e7e14aea7dbe28f8830d818a60ebfdf1a5bfe41e4e9e8495d5bda04c12f49d777f69d4c808ef8183393246e771156ce8c4cb8a22937f1f08f363dc98b13432f4be3dce956985dcf88b158b2b500707070684a8b3f29df7d943eb78383530ada7e747524a9eff99d0771690ce104c6c09558b399928f3c0f8571007db716a09430ead0b21e45dfbd70b3e5f31cfc8bcfcb8ee2619ba169227e2cb61f4ea5246378dc4d9632ddc40623d37745ac487fae66e9a88c46ad61dfc2046381017ebcfc1e4ac8ad606689555e6aac186804155fafc0918791b8309c5e0cce096ff0219a4941ca4785904c98ccd1fcdce4a5c01650ac83a57a0bc22ace6a875879c11c79200d187b8e73a6e7e62ba5550636d793c49eb5711cef461c5d8bf6f1da830fb7d21c10002af06a99a7bd2d5cbb273cb3e9f2af4fbbad515c200987ccebb051264f840c55fd5242793340311b4390ac86a67400e076a9e7f9413d3f9f641b7b48d79eab8be83f09031906a6f6e0dadec1c32826aa8386462ffe594ab4a05258e6e2106cac79465419cd41962baa3f70ea1a65fdab9230a4b8010e4d7aefae9dfa670ebd969135c628428dc2a91e4acafc64ced63da05dbccce201203230fd194cce0265c049058ed30693a110b9f5bb3c02603053fc7c9fc8b5d182d00d0ccd0e3c5d62b30bd076aaaf6ea6dd4d5a785879e35b8dc600b7dce15dc93e6ba19c46a692d3df90a6f20bd07ceb079a098d48842c876d19c9bd70fbb4e871e3166f75070a72300c92e52cb145eed294ff17076a6b1098cee8d6e7871388985f1aedaa908ddd0393d0c42a83019764ad5106d72da4721ce4a1fdb805e4a409c2ce9c4b2824a2732fb5deaef1d50b484515e45c4ef88e18f08ba13e6bfae9a5ec6626d2d8ef061d3f3e33fa67107f7b86a4fdf2f1baef4e0e463980eb894c973149b088845f521dbcdc0404fc0de803071b8ce79d3c2e57e0d2584378851085b1afbb8bb3381068a9bf715bc68dd7a9b1e001c7387683a4d478bdd921b1ca929f3ec0127a6c7b32db0bfb51538b0e055f43fe46c6f68bdd1503ee8a8da9d46b4dd73b26d84ca3ed4938e42e321bd709ccfc05d28f146f9957280295ba4f55193f16743f17d202c9305f89b6844cdbd24a6b91b4fd2ffdd6dc8cc80d1b9dc246187318be230c295d043c81fc6870d6d8555dcf340ea067e248e9a83e60d34e0e71ac43806977bac354972d0ce47725a7baa0514c2d2416848a76002f2556390bd32e0e6127a042ee778201c98e0332bd7d72acf7b40b8b55ef7948e5afbad64da67888248e6285147fa544f3afa5d3ccabc9ea548334470589deeb73b699c909651f8196f0d79b7206d7247e0160fd662cbdcc2b1a5682c7617a79dc99f78d86a81dd8e6747c45b4bf68773509e22e4f9141764cad4591ce223070242ade06b2d556d89675eb6f49b8ec0bee39ea9ab898140b727712ceb231642cc1c6c75d3f4a15d75a7d12f77640467d0c43f1806e9afa0e03f35315408df2a058f2bd6f8d279c2676625d3b071dafc405800398deef894f0c267ec2fb73d39c0a549e94f8a9ba62fa2c01ccea4738dcd208b3d96864adb322b886547b1e2d0ac767322d0d9a1ec8f9c631e7a9a24fa300c069683736505390d310a5129c6ed50b3572ec5142feed225207e983500164ffef409c6e1960b555ebb75aa05957d16baf57150089abe3c5214f5ee90a224e2afd65f6d352a02a81783458b49603c04d64e27115ac4318589d007489e2918f17112e50d3a785ff96c038e9145a99601ab2e969eeba60927d0581e6e8d47a958f7112350e0c316ae5fe61a2acdfc01c34c443240eecee903563dc5a8bc2a0bdae42c33c7e9dd09297292d73638ea1eb3d57b4ed972912365cc609df277037749208319964522106e46a0001e240a1361142845673046b0f4f08a2557f93cc37723beb81fcf0837ab76a025d3fca996c220ef4b0e2247ee8b1549d29ae870e91bdbd1a9a9816ab5621bd85b67fc84a747b82ecf615bfe4cd4434347d4e3eab2b73a7c60817a01da00e54b953da3622ff24068841e359b4bb53461459df930bdeb90220f1dcd3419914f1bb05bf81b9caf4f1b90efbf120a890f30df63fd5819027f7b9fb37ea7d04cf475f42dc681c38e2ba59d08c00e4747324cc319891a02fb3fb46b58b8903a1b0aa5d94bb5a3e502a4014a27ebb4f4f0c3c63ebd4848cd6e7429fcda08fbdcc98990108f2370a79f0cc515d063a04816867d99aa9470026be0d3d260176f2900f47aaa4c3561804688ca2425d5f618f49a922d0cffd91554987be006312b9ba2c72b5974a3a4069935487c5a357958d4d0d05a27b67d2970611912c6755e9a81b46009290727c193036e81fe33be24b5509dc581aea10d229723f2442ad34a414014a4b273f8e4763a08fba1f69a0069184583a5b40ddc352cc03e3eb7b60423aee7e7358297fc0dc4c763a9c95e1b017de2b43241def8ddbcc7cb0683fc8c88773b92366c885611190e2e29da3923d5b84e47c758db20602aaf8996f92395dce3f6be4c462adee045822897dc031f9ccbe95661bd067eb0cf311b3c7fd3398272f39841f63bd353db62f26d6381c3e4b78112c8e81bf2a3347da6ad16f2f5cdc1063c2d73feaa80b1499d7d2c52353362bbf8655386ce97aa0b3e7b4bb9933a274983c6be7312a33cda35f0cacb409f0f10d60de39fd71a21ba32d5124939552e3d200062177699e1b150474cc7fbc0e865ad8a7258c3e44850c887f20433677c037f00636bf077902f732876545c02fa45e684a60100879188f669d259f831733162d51a8a027434877b0880abf479e8d41a12ea84d573b0e96d2844ab15688d98cfb62570071fd931eace3945b42437b53128b6c8030424aaa749d53a61ac30a8b3ce4428d0d99878dae0b3d9ea0ee1759a7d14ed39ea55fb7d9403575bcf92312a112c9dd3e165333cf0feb13744b4df13e00a4337a29f45eadd86d866c56f73474f1dd10c3b24c5101ca22e7e0059861a5f94f836450b771a30f31fcec0c6ab9912d226dc63000b576f8b27bdc5cfc30b1835e64b6d0ddd37eeadfe14ce96bf05269755ec066533ca007b17df0476319330297b5e5f83a4686c49067dc337b85bb2c9131c5d19e58b27b76127d293a7fa74cbf08eb82793d5068c4daeaa63f1c9737f1d31d46be7ba020c6eb6e2fe045c574e5761f36ae3c6e18da5d103038333a5e6031764805b7f674e53ee6ea56a52e44df91cf975987c1b8392a0846a930f8735189581a249bf4e717747c58ded021b78448279153e3b4dc3a923aae8571560692e88bf73c78084695b81c03d90cf64662cf77c123ac03c057861b79caf7d947baef5fbdf357ce4a70c65947d4f4190c0e14c41ce1d65c63ad208bd1b859e2737bee229bce44c1c64ee545678f16244ce0a5fffba9ff48b3341496fcb5944961c78b8e3cddde259878c4a6a0d7db386cab758dabd2b883be6fcac2e5c7ac4b6d347c439005f42137f4916c654382795e961045ff25ed86a8f1899c2b1caa5961d40867e45ad4aafd92f5e84f4cc2dbd02b61c8665c298ffab07d0c286b7da352a9a98d41db5d86335f787dfc31bfff143da36421c3e1fc5e95d70af57da3a4d35ab5402410222168261da346640602ffb9281ff0e127b8d93d4b8fe2f16bbd0f7d5147491b340e16cedda94077d87e010772c65741fc2dd35579b2c9b6e4774bf45112549c9268fbd176c06e1d67d9db868f6dd4c8b899a8f4540d33ece9a725f8e52536a0a6b84e7eb42eb1dd620e6bfefeec9c9d75e7f7df35f544083febfed176b943546ee504b32c3db862f48c0fdfd3ebaa3b5150258dead0252b61c9db447c2b01e6ffb904227b49c8ac3d6e1dc2079102be006868685c5a815238be5f19d89f8c54a260a7523673ca063718eece5c1bf39b2b348d90ad668a8022db168f900af39cacd17b71b329538982e77974f532f71ebd71e15d60c975e44dcc7926e130e60ff4cfbbb1b15c21e52fc13253e13805cb4846bcc73416d504922e8951ddfe9f2c06af23c98c52606cb29d7578f13c4ab5df4cec1ffee2454c42d208f9ff5da068b7b6887a01bbbe881c1441724cdf43349d50041576378c9be11546b5884f8af35f17291c8e21c8a6bcbba71e3dea40384c512a5a4906196d1e8b9c765b8cced2e233c121cb53daa4d9a9ba860730eddaef8f5c190d4a18cda65c747d680cbf02b10270f1f6fa73041dabecadef33aef7f6fcd54037075661fa32599161bfeaa1ae4a91859742cfc5e1235da0b1c1903b78f5d8a67479b61f2977f6cbfee1ed8df1469a2569cd327f0c1769ed326d2a537986ece85bdaa5bd004b33c59ffda71426c2a4bdb4d844fbb49e8327976a0a97c61e7de84377ce20bc9b6ae7235c194b8e1aea162e93196849a5da452067f3e40ae6478138a909380e893f59ca5360049b3df59750917a2a02944e99e3a71a2543ac5de929393a1dc7dc4ceb6066daca2545dc169f722064f550eb25fa96f8a7dbe6a17479fb48923413e24f28095290ccf1e9dfcc6c9aac3f21deecd9ebdfc4687225cba2665c546248dd95f9ebf907a102efff4c1ae795dfce8012d6dbd98bcd08a334ecfcc1fbced2274650d7d703183d64c19f78da224f24ded329259cf545b6120f56ca1fd57f6034787cb1e40e32e162c99dae24cddd0802d9920bde0e53ccb24a0c60bdec1eb6b0c6b4bdb6a2b9a46aeffd54abbf303f538fbb3c5036722a5bebd8348ce578673aa5a697921112ccd4e21923c7de8d60ada1401156ebf6bfab4ec5e8341fe7db58e3cd6d5fc3518a66166594952baf1ab8bdee76d819883a7bc2bd49f98e4e4a47324aa28944a6a8b809a18530cffb87a6f089b65f247b9f47c6d78b84a90a665d6a4d54c2850418f9668710a26256cad6c4225a4860636fd4872094527bc1f7a22e118860eb6fc6995e640e8261e41955355ed6838ea0f39940dca1727d581b7e8dbe3f1a4ae5f9b34a80b4214cfc975126eeed85df4528c81089aee2be981aee9a585978a0c1f62e660ce8c882bd0ee3f5990a4c9dfda9b8a72c20bdecc1dca86edcde99c5360a3f171a229a82d01057ba11923d4f2bbb4eab138359c3d28340dea4d5cca075ad469066486a469c6e56c2a405721d545db8566107e95cc7895fc145b09b8ee1cff6847512bf7ca8286e79e8ea3b7b74cf026cd31f21893a9b54d7251d853ea3f813c399a83a10b569f9d637884490f9fbc8d533c06970fb8e0e48f8357d374afb1d81dd190fe85e1d2109c974a32848bad19b790924b780592a81610e093708206f23110abf7cdbfaf40be4649450dc062a388fc065cb410d82b0466da75884e66034d294a2e3c39dc66a3d2600bfce658c93a9db9e4eaae2dde1d7f1d37231614aec62bac803ab4ea3e4956137aa113b3a10e78d71ec078dbe5eeef0e29336dd15d590dee4b80037f6f78a741b2aeac5709cde194ca8f378909a6100d7d24ccd78d2bef97418cc934c36c30a561bcc50cad2c360ebc1d11d157b14564a1946461ce72f2fc6a69afd051b3fe076d7b8756e073a9d9d472cfec314a425f3bd4952b5314503a6cdf424c1a60db8c0b99f9a47ed641ec604068c17e0f4e2a8119169bae7384e6e7d758e7518aa4a1adbab967791745057f0f6f4df7a6fd34c3981b9cd71096592034bcedc18e7599355e04057cabdde2c73995e25320b949aacc45fb94e3a9ffba4360bd121db602ba34834d7e63d39f4a0ae00e642ba7e8d7e816fad39720b37b61152e4daa63af1f011d6a20055946555b791334da35ae67fdf9a5702b73ad4fbceed7989d11cc77be8d7e96eeac433238781bf1415fc75851987e88a02ae3ddb6593f833b7280099961d3a36e09b2c577082304da689d156cb67ebb3372ce3829ffe12c67293e2bfc91a87a3c5267bddd7c21083b6c4896db82613e3aaecc097863efd377a5cf9f4ba45d879912eee5bbfa73fb1fa995193b1627240139d57ad29944762b6a263cef6e3a3b0df2b691ab2e211284888d77846e42fd0ec8fbf931f85d929ce584a637e4806c03ed7261ff9e6c3a0dda3d1f92b1cbd43e3d9c5ca98e537be898a6e3a983b22415da067cd71ee1ce87eceb8eb579cb1bcd070f383f83f5a6c2631565505ad825d2a5b32f653624dcb549da3298d5c62bfa25098c8a63af4a262c6984736e97553fa2ff056fb4b10051a89b64889232cfddd1a3edae273d6a85ccb5db3fc5a3eb654398c287575cf49bef56d3afb07d760d2ac724434eb06399bfc8b1e9a170a4130a6faa2fe986741fbd697253d5db165f2f8becb136aa3b9a29be053eed753a6792f8b00beac4acab95434e961c773d29785d33cb2bab45831572dce894e6286ac67a6af1d308df19dac7fad9d38421c6caa4051c25f77f78d0f5a5e133c1d1446f7866fe926e74ce6b9c1303b5eb947f40555bf957aa83734a1b5ab7dc4bfb71708f7ed30294fbb4b0ae56e1aa810aedc5b76965219c84fb8a8e965470b6a619f8a8bbea77c498b515ffb4649cb757ffff89bf00ca5a24334d743769530562c765730ce1773b4ac0da61c4a550a98576ace17b3a3db56bb99b973a41430e3f7398f5f164af538bc38b0e93f8c985edd4aa97b30391da2924e7d1d7fe59017333d25e73b23d6824f4b4533074df29d18316d31d541d184f96c4fa5a017736f4108ee17af63c145d854567074b1537ca536c1afec1a327397e7fb1a8d9894a039de0bc7b84be3e5f82db02ceb6a70797d0f731a3b12ecc72efcb830604564adf8fd26d666ecc5966e7928652abdd696a463b1e0431be3bc6d1cdd03d8f2ce692c39498760b0b920801c16b99bf7583736f81361c6a84f8add2fbb3658dc412192e144d966079bcdc839808077fd9dd79ed6523422e22c85e08325510b26879b1e28b69686b89e907c5f33ccb5cdc5b5d33f2eeb5873ba1c1176b1651dec02e06359e04ed40d692986233627d3ecc8aa6578d00c303fd68b72befec6e12b08e7fd5ed93ece0ff20474a1fc6a8e302d936c2b54d843209656fab58a22a1918bc5052891d208582a5fd3c2515d8965d817abf56ce9033f4bf6015cd60e1b6101a360b16ae671f1d0ab3d34f9abb3ab3504caeec47efeeaa077dc8119221eb2fcab699788b3086b6ea00c07ad602d19cf0bf316c73aaa4dc5c07aef1cf9c270aa4d5c26d212483420c3f2c940442632cd8bb9627213a8d76a1c273e20d85a1347f1d432ed1a74a01241fb7db01b99a781f16506964296d33d315a3286b2b20a945aa3824d21602f7b97cb85f97ac610a67f12e6b3fc853bc59d23aeff3cf1f7d848e6b358eb01c6af43906ab44f7250afdad9aad15be0933af1219ae12bf7328763d6eff6b85054bd153c57e77a23663cad6e71728aa66b3aee256a7143ca9a52802ce085003413f48292aaafebad5dfb0ce3b149514fceeb819e75ee0ca391fa07d9ad39e9973115662efc11e588558d649ac017cdb61302be05a0229c13949ce3568cd49ada04b9414e63cacaa95bb1b20b7b7fb2f9553731028a830de1f3ebacf7a96744e71cd1c9b0604faad3ccd27e5764671a7639cbf3b036976c2d44b11f21e80f8178a8463626c1d9a49d885d158c363bb3887a7967355f48b2f45888a00c9bb305fabc7de79f59dac9c0d3c5f3d8157f13eead0f9637b920a650d5ac4c0b81663766c23a8adc76c233ef63c563b1287763d5b85a29e01e9613029b85a0c1c7c8f8a77bd8a0c354d80699d5e42b0a90e097931317b4a06844407ee596838b5a1540afb384b8252ee41d404ec5559a23f85fa6aa17393a41e29a534c58e1cef5c1f13c8b088134f0ee64d833f6e5e4531ade66540980a729dd620d69e837b9006075983516bc63eafca3b7716fcd5c1abe239743a29d5ecdec34ec358c5b349b5d9dcc8fc829f6bf9a29aabb7c1ed2a3098b0d374d0f378d4f9d9e01207549783d5c043e76c5de46b6b35cde21e05da875310be226ddfdd72274645daddca4bed51d82ac9d55298e809999e52aad076c019cfaa8cdcdd8dee8381801d982a625231e3ace43c4586f99880cb0d9e2177e8c7511f5eb7e0ecb3eff5514a6209e070cb1002a31b0802dcb9ab5d8d35c9ab35f8b41934378950a67adfc92d19d62a8203f149c7570b86ec85c5352173bdfd73d29743ffc38042e6b25f12f49ac14d43c0f94df0423297f8ede5961609833dcff48525f79f1a749a9ff0cc04ffeb4322393c1afb4f1e138c5b07ea97cffbb42a7aa1e4dbe6b4de7556b998c4a838a0ce9f121c164846d55b5cadac896867253fd6f92efde38f0628282b8bf0cf5ae07490c55ace976256b711e27601df41c739df91c08a757ed6900f5ed69c683073a104a076c19b39a758cbccc7e81db12e1107dd081702abbf136e43e20828ac1c108d3fef0a651477e702a3fd04a83342de51861396e97fc338c480f84b9ee54965f635ed3ceada296e633467358eb05f62646532c64986860be1abcbff2f1d31399cee0502a6a6bfe848ee4987c8394dd4cd38b45a2b50758bdf4bf060075af256fc9a815fb3a9234c307e5540c499addd0c14c53b5f05d9c3b529d354b98eddd6567e5aeb36a67a64bbcff6c8e74375220b9d892345c74486b2223a6ef90e43bcb5849b3330de9850daacb4fc39725c141681526071d4a3dc7752e83c9d8237a53b6f0220b57113c0e80aaed33dc9a528ea248f7a2012b4e9c61a72f81e86f27aec73ec2a1ec663b6df0be747f403419ae19f78c774c6986d59d9534e560616769669680d8f7a4d91f80870bd89d15ba21ec058d557d33373ae07560530267f5feb726e61ca11d71edc3425307402608635de22d12ac70192c307908f21052018d0eae08cf38551745cab75a4825f58d16a4cf932cfb3950aded3fa832f922e15642b6d4f2037fbc89c1d5cebf59ab232df4fa6c8ebf2fce48804050cf724d40e32d20dbdb292ac3b7bebdda94bfb739bea5aecbc6d6f66c075c0bf5e0de1ebd35d78831d56f609aa4b12c17789bbf50cd4be26d027866f77f066f3d940d4e2925d22e57d24513f0c4745db874c52b00aaeae546a7f9a48b631edc7303484b3fb6300531afa91dc9eec5925f7a231dec41318b922e88b4c90f15c07f85398d010db4d18fa422f29fb3e32a2fb0f75c80de6ffca213419f7effa599a6b94806236e55069db9e9ba83b8c26f4ae657a55042cf23f1c5dea440b0569f3b65ee302b78988e813394d59e8be175666c3f90ed81c739683ee35e03f9ba361449060b8b1a104825cab383626917583f4dda0db1d9896bb0bb24f9432cea0323fb22f6f96e125863a79f7dda3de55ebf30c50e72541deb5b6d09ca88f004082b9ec405417d4d425dc186f09a3f24280ae233b939d4d6d1da5d382f48f6dfd3a23c0dced5fe140bf3c884ee0c02f0d4773d84d5c48defd60851b353a0cece5415f160d7df5006d8b89b0b1d6432b063f80408388692cac2e70edb7aad6d66bb920f866434a41d161e1d381e6ba55a965e0353890de5d7aa7d7c4c7a05af99c5310f2be4580a305d6a2708301ce9a396bf8ec68132c4e8e51068aad2036b1dcaa0a2d3e407956f49a6de5e60e9f32972765801d7204c6f65b15535f020f7e79bc5c29fb1d1dfea16a64a0c232195aba38aeb850306bce9ffab170e48515d27b37ed5a83e0e415326a720b57701518460e02a301d994b057a7028cf644ff607e920925c10852c60d43781a1737a4dec21aef73484b35b2b2df7aba62281e5f4db27dfc9e95176028c5292cf706ff6b186d886cb58d8a3ffbafaf8ad77a12c10cb73420d2a1c0bb80f469a834fe820438e2b48840e154b5f034104ddfc2339abf595ecd0d790570310b958f2c940e86ba3b7df61d2673336530f3e48602d7cea8fbc0a6d7a38fc0854e7ae993ac9b4283ee9e3a02a56c892be2be7cbf97ac98b92052002057c35f8a9f0222753fc68c2be23f3168c29446d37cdf69c426fc72269ced2a563fd9fcac6d27f8a6d13ce11f99612e63d9f1a9a4dd1ff4c5e2ed5a753a76fd376e37f203d01787b324cf8f2943f1d682fe2df18181b89dd20c94e1ba9e0bf1329152cf510c1d791324223ae12f394bb539e70b0228baf04c4b1ba8744d765fba8e6db273f03399b2d9d5a7f53b9b8a5187bd212a14b6d5b80a0ed215f7843837aab30c05363d9d8a279b5585a9beaf8838bf1cdf59a5ae205d8e37e99992e861be12af379691ef914d4803c19ba8dda1316855831563f1717d543873de8d8df1af28c0b3e9004ca0004493cf4b335e30029589611966aef2b7f3ddd90d8b40a32743be2575e381cd99d0ec86e0e71d136780851e82ff78b1993d5abf10da052faaa263159c080c22bdd696cab6184dea408300e4188c03a5a82545059a5a45c627fc4275fac54d9b80e27e88bf8f3853fec1e2ee9e1fb120c4ad2d841a7e6ae9b500e52955ce74f0d0646a15087295fbcba4deba8982809d28b5c9ba898fe350966b2f2037a39544f4999ad3405956d5b311f57d7bb3750e558806dad5a7872db312d5124547d58c431460e342c813f62184f9d2c406d162774c6226f2747218fc7100e9adc71ebabf8fc948126893e54d27bd0806a96001bad018340aac01df3f663b02bf22f6c2494dcee2b67c2ddeb725571a11f304a59c2cb3842f80f5602817db3bdd1bec81e1630f91ebd83f947290809902c0beaa12bb2e7db5269f6e169d7838433d4802472d86e76c228f64ac12e1916b19b4c4ed2169c9dac83eb69559c1805bf0862373752ae7a93df8af31d1b8655d2fc96ad8d496ab529cd23cbb8befbb5ec8ad06204cddbf82b69d103da68d3ee7a04343b4c574c77eba492786d5416753eb419f9d4a4f4b04cdc03d77e906c3f9c1f19a76dfac3c631a749822b69ff1272c909058cf5a74b1a500cb52a6fc101f66b62166a29ad3569d00981aef4f1d747a4a3d1c3026eae6aa560e4797d408b8dcaa329fe8afc21e5a46d45dbd7aaf4d95d43c6030256629de6e072e2cf217578be720418da66b002fe800339a7f56544990f0db7ebd4f807b209b36cdc51d92ec0b9123a6315de6ff39b4a254786f44e18cb49e412419ad100bae9cf8862fffb7ba00b3076780c623ddc2a24521aab4314951d857999609c3a866668183d7e5be846698be7f1f41102adb10fdf4d3d7e31ee7199f2984e189797e07596fce3665e4ac79c8c2763ba5963ff43d75829c23cc8cf5a6eb41df573904caa40893dc4965ad94e5073bb397edc074b33e0e40357e2bb78174decf761972af4787a28e5c169f03ee6852303504ff98d3c0aca665ead1b2f3c90e89da2a62b0601a98007af55f5a5cb444ebdef46aecd0dc5447262a7b767fa1ff5b580cb0770d0ed3bb4db6722d1574286729152ca2903e636a185259c5d0a627c7e57922e438568c31665b29c2c7dd704ff4795d131f65c0fffa10a29fbd6e971635dbb177593a0ff482da6685d9c909881aaa1693145b80d394cabe92d9150dbda06dcdfae8c200a6befcd63a0a1b6f4d2b149d2d286d75d2f1bf9e9124b978d9c35237bd36b8bf49887c9c2b77a51f7cbb52c0df206d83020a746578181f66ae4ea9739afa90c9ba3f68041d0a0ba4e8dc12e7e1b4455cd49fac76130fb52527847e2ddc3bd3b8ac5337662d83d80e16bab3e185209a739de757de1add253d7384f348c364d003cccaee5bf19886c69d4f4ed856f1d2760a653b8772efaf01aed97edaed56c458f8c6f7cebfaea17a003780a7e30042041c472a6e2fa47b404309dc3ab56f3d0301f4a3c3d5262e5251af4930f3e2542de87cefc003aae483a4726b57756a7a5a8b705b44a5997550f2aa5ac5afe09d8164320cc94b529d602c21d11a70aade12824100794849da2e4550d97b22a31496084a1f43f151273b60529eb01eb8e3814e2b9e926434422ecdd897558f7193379cde352691e3a64d465016852ea0cade4e7b920850ad8ec2cd49ccf082001db3f8859678345908ed7b94021b54870701328e63558a596a2e4721edadbc35f79d6a5f739d3e25c867ed3fd9117d69f0a377676bb6a8e6ee10ca7b07e786d01c1dd8f907174d57c72e1b28b475b8a18ad7558c46bdd29adad8317b13477da8567a1f00eba82cc3c6c11534fe2813eba7500a039e0a3db8faee958a9bf97df0c35b641f2a005fa8645b4631ce5d74a36c29e0fa79831fb9084395ffda6781eba01fe513140b6a7fe8299528ad56f8bcb59bb6b46b6fb3110132f3a222b4ad624142f44132f5e6590869009037d5141728dc50ce6e177dcc2a030b148369c98bd36340ed1b8ee44761bb83c45466f74d2fd123b2beff57df5c54c1875b4eef6e00f22cb0d932a581de4f00f932480f12d9f618cf8c03b48c0f0070129855652ce68568bf320fb2495e2cc2c70a97b16efee650379b70204b9a55d59632e3c1e79aa4596872bc364bb65f0080cc44797b1490ca1452a5c793cf70e537868107e7f351edb12056a89e0f737220b424af496fe6a2b93ce594e0176add3d8a2baf3b8cde96f0f13b45f436d66aee668b0ce4bed2682963194e1237fd424871e068431bd9166a719b87584d1415c7286eab32d0ba88c7e472f9223f0e063c7741fd3f2337bbe32e21f18a08452df29ff7a60e7a9e8121f4e7f1d2fb15f16d503d3211f36819a041bd36f7718bde7285541f2cd52e0e5e8c527e2e7398e4441e22462d7b6e46ee603071b7d495d30ee01ad96f444105b2d4062ec10690ec6f2b435da0c8f5cf0b0c8ef9b0c73c6396764a72849c7c043d96b29fa24fe261d3781e4ed6506d2c57d8b3940871ac555f7e60ec7e06d7001700b9ee8efbafb11c0a2edc73ce8fffbdfbc2be5e32d7ff33bb4097e52119d4ee67e51137ba187275bfc698517f50a25682a2bbbb0c72f035f62e25dd4cb9bb1af23132370da1f1a2f7788ceac84204a5cefbb44e254215bdcad4425d5ca9ec3dbad1145fbb212bfb0ff9408b076ddec730148dc4abcd2e9954b6f9824f5b926998aedc37689100a6ab805f9f7f18aa7db828d9f88a862fd87dbac4ed6aa256593b5ecc764536de8a17ca2c4eb121d2abe2870baaea38a15454c17ea50f14401d7453a5521c73eae178704de4e692c07ba8e668a78974ddd22d81956229f4e7db781b62f062331dbc03e0289f1ff943108b84b7b1bd6302a9b18249604591375e8a7f9aeafe1342a1a17388e89db5d2bf4f32d109af02a1ccdd109e81a49e516f0d9cf3ae735634f9d64df50168902279d2a1e2d0389409f47c8061aee3df730b9bc4cacfb3ca66479f716d62ebd2c44a1ce03924dad49d23270ba17586c6fff4cfa1f9adc1c9360e649e3a0a3ca4c0d4668c741c8e73caf0cbfa5c8bdb3ca89b26c4b5bff3b3d178161d558f22ab302351a441420cd685c47a0de57d3ddcf528162cc58b6872619641ff731766c187cbd82b364ef7bdaeb54996f05cd5a90d38ea07c30faa0de68827d3f7007ad03a25e4e30a18d37db2f0faa98fbae96b3591da929e45642adf5e61a443868598e3d5cb5674188465402d4eb366b43d3191a54c5732d1c68c02a74a8457dac7c9b1e681dd6d7d036eb72399758374801a6c1c7f28173d6a5326023ad2e709b8f736e1225b94add7d2cedb1ed0e3113bd937e0eed063e35ca9c81e05faad3ce2e91067dbd587afcd9799b84bfcb676235a6ace799f2345b99a1761efa060783ed26a4e9e18e92bc2c3b944059444732426c5eebbc57b5283d80c8d51f5f4224c9e4a8e6e87fb1c0856447af8aa98c7c0ad6f36b25a0c37af3310222ad5733cdc22f57360ea47b5c8396aadacb4c3ff1d8bbba521bebe5216da333be9f2854e753f9200b413931a37913205d86798f131996e8f3f781db543e5d27361a62046f851962a72d96563d48baa938fc4db904c20d40ffdfea20c58311343ea230184814b53a08325776d5be433db08a80449953d34532dc6e265b6cad76ba3cc9dabd20fe9957aaf7c26763c7d04302064f02b23018ba7479b508b988970156218a81ae354a41a3f47ce1c8c6412ff1efc3422ee86f85032342ac09eafc1648db3ad5b0bc9fbfacee696d100593b202fdb26aa13d64d9a0483f4dab85e32a13d7867ad0f9be2a8d74edc7e6c594786ae3386ef0d6fef3eca084fa95c78b40c3b978bff153644695708d56ed7762edd0d6ff3c6b989ef36a016eaae3a61572485d3dcdf5e4b18ab391eb99ae85da797d2629054a3b9282599d1d2d3f2ead87e73d6b8fb1aa3386ecafe54fe2a2ad5c891ad44c66d10e95b674c8c1df9922e6cf245f031b0bff12734541c7851f184ec1287a682074ffbf018e23e6629f7f2b027e6a05664d8f505cb6f8fd7ac12efa5f21fff1421fa0a1df98537b939a5b396d046db1d83af30cc6d4949eb1bfb2e5118a0ecb9e8f3b58ea7418afd4009339322cefa07ebdb32a256d1fdfa1bc57881001a97f12066990332309608c6241ddcdb6befe01dd8794a5bff79cf80450f68bef884d308acb71bdf892b440192b8a2ac8e572126584c1bc9d1cc8a7aea53301ab8aa661612ee3088515295ee3b7e5dbd62cbd8b2b9102d7d535640e8ec647ac1293fb1e655c1edc477f453cf5df950481205b5f4fd581d2ba95806c1950e2ee0f3f8762627f94e4a9359939c741116052228a82969ee9253a882ac1fc5e8df4eef83446f99d415ba77d4cd4549ed7c337ef60cab4aa18493dfde4afb6f9730a7448c4249dd0c0e61bf90d7832c44895ddd5e62a948096f1b0e3efaddb26c05a7012f22beeb9d06cb2c3bd5aa03a4926105960dddc7f168cb3c50d550da132ed30c5851a471dc8701ed0077d300e5d377b7ad14bcf0f88701e6e5c23c00ac14459ac6f3a4f82cdca9344b7560aa455d5bfc99bef207387ebb6da928bf06d9b15f5e0b30c63bf95825481e522621df0e7c1befbff4f6f3a81fee94002343f3814102dc15b2adf2531f1d4a31446b102eb0cb848ef6db1dcbe5db47482fde478a5f7d55f8156db0b450fbe9f8e23196a33243404f487367147c363451da073c1ed094201456b1687e01c70b18d54d97834ad87dd5183c81efb1f25e17d057715c9d70f2df8ba5560cfc24305f2220eb175a0de37f137456f1853c94356c6123b26e15b5bba23479a03677b39d9348799b197b7353d8e49904850002cc4d3738af51c73543a2e9272ccf6c8f3408c425523c655166128b2e9afd9261506ab0f00d61a3483486509aba9c1d1ff563e98d9a526bc047636a10ae0d11dbf60febb18815411b134102ae525663031954a2f806386624a923091bddb62a880c4b5eb227e9f98c33e6e97008981232e19327b831bbe1aea4bc837a8a962b61988bef624ed06a2394fa0c3bf1e4acdbe7a3e6e4df0e0f7fcac8c786aac33453835cd7f006648b8099d492d3fc0b90a242585ca870df09e99ff39134d9756bed4782042cc3058b24b80869f9c7451f50484482f4a5fe7042867bd2fcabed780350ea851846f2af5eb6d439df49d997e55d6d0b6e4d8597ee0b70989ad36a11d32d08ca878e2d83c86c70319c4d6c0f2c1a90c8938530d631c1db9015a1580fc61b6a1625e9e1505f41015979ad56f7531e862952f9b6a3ec9c3cafe7caa77ae5a8f162ce3a7a707441871030828a5d669a49db2c91b7736e0af37394d30bdb4568965a608a15b0f02e08bf26193b98f87ab1823a763cdaa0699d5f6d768b68a65a622d36b9205ceebb19f6739020699262d0f4ef3564926faeb5be0f83f4f1e50109d23ea8f67804a04add633c3b89e5f3f484d4fbc730ad2c1d6f6f901370f518d8587c7dd3974dc84d48ed80f44fe0915edb1dcd30d7134971e47d92fb67bb4c92c586f199058d12065467b8e040c68441b340cbf29c311bdead5312d809bb873559eac3a49deb9dc0ca295ffa40d2ad992124601b42521655e52b869a1715de86015d112b6a35adcf1b6f8f0bb065883d95134c3959bf6f4c8a199858d4423aa588e690d1bb192b104b9c99e0ae29290d20d6ff706b4ac47bc7fdc6a43a4044152994a8f4b7d75471e3d3dfb3470c651fc978a52349122e2185ec886a495296924a2798760c38c4bb0e622f4aa144355e1cd245d4a5cf5bebd86388a56c62fea28e8409b6ce8fe52cc4288cbe11f7c58aac003548ad5e1dfa1647aed280797369545e38244d8c41bfe1545b57c4ff976291ced1c90b567c83ec77ebdfa9deec780c5b31e8328cf02475d905b03da08a79f6866da4d0b37453d2984d58fd030bc62f90ed4b1c5701834d17e7d032c66cc2d1fb42a2cda81470b98fbeae4433c6787042b1641481948409627d766af0f8d62f953e6eedf004b25766a5b912cf4db0b06738c1ad6cf8307d9a0eac599a53d96d692741422c2128dd1600b22f46235389e3882a10740948ad468f721f201ac2f99e52d0e3a69d603320fb9115ee9dc6921c60a2b305766c5932b0a20d0a3c87e888365b554dbd1c249727445e6665951245fb4be66f30ad355e220dd38a5089562c4af107292c9f5838865d5c25fbdc8a8198cee6d0bd8da37605c57002b2c79aba6b22d8a600bd7fe59485167edc451f3aaed44b149ca89603346440c9ea058c30b4d380552165c8f91eb22bf9c22022b7d5839fd8156b7e77cdf163563469944a682673158aee487bb9840596837f5f1ca54be4e71145aec9db2be8ed27040cc5e260ae33d577d26b42ac9a25e83ff5cf8ff6acc55c23a7acc6b08f160c0a4b632942add91ec1107588361766af58e9a526981c002723890c476639f0dae530c689ef0f4bbd3e2830e4e9ad20b7e43ee55794a0b027632028b4e8bcb9128025626dc4485be722e0cab7398d7ef7c76265d48e8d8572d35599cecd1768a6fe00b9d174140f940b4d30c5013b3f7406526e0d19f8f16de5f91d411c6f106f99bd78ddd0591148c87fa0c693374b9d9efd25300f1b26e745e79c67958f977717618c10ef8f6ac3030d1ac06a57b900190da23e28ef723d7c1c4de348c4f60f4425c7e91e0a859777f5c21cc5ccbeff9e85e7127140bc580891038ef2d6d87eb44e7ad8c0025fdd0ec7223d3de622b0e4e244455ad57615e679286b0773ee83305e3641ef271d3fbc28f1c6890b9193b0b393864d57a86c59ceb20e08560acb570010fe2c0efb63e9340e89b3e0b8c572cf09263819e20f9889e40e9e0ec5196011d2226badaa989e76c26b772a93aa00e102b84e2f4b251ed741b02cd696f735c99eb2e264483b4aca24714571eeac3b87163fe5aaac0173542c02513f424bdfd1db7248aa4bbfc1d35db5c2e05a1d1c18073725fb7cc77bf952fe824734d40fe968923b70497c9c946555e3c45dc4fe6d7f64409740dde30004054d99457be15f65097606120248015db2a471c2fb8a0eaf8e30aa1b750e53c951a66a80df85751be0de1caeea82199e1fdf03043d30a436410f2df8f00d2d121210e9e9a19e20e4f5ff5665b023cddea7f7444ed705e04205aeab37893886dd71ddad4b4bf41ed024867bc653970e52653bf60d1c695813210cfd482c48ee223b6f430b1078513d6e02af9c6684186514012756727b41886cab5dbd7b5e9fd7eb96740f676b881e244b383ad41c0190cd2fef4ba6b5f434ef8ac8b906044c2b327bbb681217f820e2d23a2a5813939f82ffa82a1a8814a20c028ccdf6b40c10f7e5e8b5e4703d7da6d77618b6c130f93500a5fc1a257a41aded7c77c49be5ebde15d2ff250100bdd83fd9a301e78c047a548a7127bd7d63296aab3e2003e880f4052a13977b607c1f5d31ee76e11ee673da83f1d97af59c864590fc43d61235693a1439195988ab81686eee61828cf33cb9bfb6299633d2039a806271e30f02730f1ac07025113f1866acae6c45c7d5661d06b6e5d070d462ada3ef89584059c0dc8482031e0a98b411a5b0710b87302275025e48868dacbcc0882721f33c4f6b725463ca87f80bc030e37a8ca868fad3b0f9dea8dd53eac4714cca0a5f92b3a0280a83166ff48dde69a1241682879219a108284829e0110fceffad10d9d13725704b4aef0f471aacd87ea1771995ca8dbd3653ad55f6034f2421fe157afb89836a388dcab96a44fe682088afbf033139f5ff54e451f5a49cad62dad06f57a8adf0fbb206e04b131caa7c4f246127f3729c3a3fdf57f0749fdee84f9ac23df6b08410a294919b29f6d151a3c8551e6c0c7dee91b5a9459456e37e5463eade76b197f9c1da191e44d037c1404bad62e8f5a30561aa5037651778b30560c9940b8c78aa12983a74e0261b73bcfbe858a1fd2be48a93e694430d1a86bf5aa1bccde959957c3008221c63bb57a51c30cb9f9d6c385165572c8936780c40aea67ed9784ecbdf79652ca246592010f09f708d20847605047cecd4d94f20992bc893b74e2ed247ca00355dd50bedb6dee0928091dd41a6a122ef8ed5f2b091bbe4bd11958487d97fa20a997ee26d4100b891b9238c13c4382d15d441d9396a12aead0147daa01f5af35f48321a1ef6ea6542114a52665699160bd216ae35feb082e5efbd73ae20a8432545fce8d8e23828c80c11153361d3937371a8c4724413ab134552a1ef1c367ff5a4724f92e3514891024857282842da93382e4d4f83b314a9a6841909c29eaa3f1d9e9261e7e7aca064eaff3de9212ecfbcaa922f6af65c40ddfa56ea0c826514e0a2fb69e5479987f2d206c391221ca4df47247a0e6f614a04a855e427d07bdb15b4614f97694bf1382a4220d1a93d3c1ddb49e7cf1f45feb0997ef6e1a4aadd7e51886f935042a54baa3e4e9185e627e7557db250bd82f9141621e1ddb80b45f7e6d40ae8b45aff42706b8043a69c43f17b82cf0b058417f9b05e8162b98faa1227f3a1998e886bcc49c39cd31ae02d019f34ef2a41ebb4b629001ba7659d0a9f4c09c39e892ab67d2b1ead9ed24900682dd4e067a97c420c39312b48297c554fef1868127256815b3d11268016c053ddbb466af3e648f87d03dd2bb933f9009e854a69e8930e05fab88a1a73ccd937abed0eb65615e8a693c92bf5d72dd90ef56112cc01e7a6c16b018be3b137c4b7fdd6b1561c6fbf0db726d3b1008bcfe61b1c503e1bd04c212df3c40f876320c61e16de909c28294a087379b8f6623bef99fe6d945f652b04f70b2d721fba05ca99fdd8d85b59d30f927c5bf295c60f6fe75f6606b0825ad26623c1c0f4713209a2f3d28a3d5640b92560f889e3c01a2d5031f9eb48468c203a371f6e1c0340ca3f9725dd7d56a42a5d584c9755dec57ab0747fe82e14932fe204ed74f72188fb95dbf46f2f74ed06ab41cf43a72bbf31e8ecd49b73e1cf1b37b3dcad99f5c074319ef034dac5d91bd940f43fffe3d8cdd23b02d2f3b61214b9a2b6c677a04784a65938a5b64746e114208b70cc26dd384c4cfeee5934b5065c576da7b46d3851d017c2d424eab9c0a11802a1a2c6ca7b134e6614ba6944b1d9a2db6831a0fa2f460e5fba5f49e550b2b99c743a15cba2d954c72527a3bedf97696a7dfc92de5055d9e01ffa2bc40e833d2c9c7f3e85d9025754991f62240be6abf4586c0ac8a4c79874cbfdc885d5db708bd432ebf45e4dc56d4e52d6264465ede6ec4aea41bf1d5bc439aafac680bd097007991ea45e43532b3ea5b44ba11bb6abfae115fd13b4452ef5ba46b77bd456875798b4c3732630466456f91be43e674798b18b12b69645bd53b84de21f216b9dcc8cc8a7a11f6b232e22be97d8bcc3ba46f112330ab7679874cef5ba4ba916dd55e84c8758718f155bd435e18441801082a6820429431b61061856887305870050dab767a8bcc3be4757952842e5384a1c3962cabe946ec6ade22ef8b104538b2a4f54494305645e40de2dd6765983f10b6169a2c628c913d72732c42f6528fe38cd14da89d66b1582c1fee87f704043a3b74be3efcbd033d4e318200fc0b3ff5d92b374193850ffc1dee676f76a642bef7de7bbd096108b71f0f0bebe3f603070b9e465df7f28ea07633333333333374a6d162d921e4baf7449629ef0369b4d84e004b9e1d72e6ec1c450e68bccd1651e4d025da6c61b3c573220ca1f7894e10c1c5842dabecb29e0fec9e14a224ef039f3b012c6901f5ec345a6c77b33c0ba8204df493468b75e1b27e5e169ae8f90a71e84e1051e569a43c3b4104949f3c7d9700ddac309fb7879d46cabf0d088d94676c09f688d072f23ef1071fac0a5641bcd0ec5428f9be5d0c4c58cfaee3e1809dd34dd38565efce61c0159969b6b0cc0ce0713120e784ebba3ce78a020842ef03a3d0e1880c0eab205ee00b52a795c957e696fe669dd5a7dd78ea2dd57a1fe7e86ea00af6b0f73d5166d9170509d04bb7f1d1f9c45739cbe4fba5bc8f73d0ebe32dc1b2b981387c4f259a2f6c97d39e3339f6806ea10a6e3f38b68ff6d3e517d9ee33f98a678600dfd4e643c5d70508876c12a22071f2ed910727dfd1bbbb3bbe6e9c13841042168ba68be552490b1b23f3f8f885edf1891f5dcaee9a47fef3b7f9784b8ca07ebc44584193f7811d3b1158acf76119e80b5641bc106f90684311216ef0ec414a80842b6114f1ec3664bd13cf98f242625151248315c1883b108255e0108b7de01e86b8b0b43c2c4328a4ae09a8520c6bc4ca821e13faf9e599f5bce3ffb1638c2ec4eef8e27b8ffd1591bdcf48ec19d327fec7fca189285cfe3dd5bba07c1635b9f912ece6e4b3a909e1651ce299a31b055e1644f4f0850b5aa043972c56efd5bccd97f0a2ec20f4d915afeb6a9ed793301b75317c10a6a0507dc576aa879ea2345cd49f9c76afa8f84a0ed0bba61dece2b37733fe252446ef7c84c48ffec2cfb34f2eb6e3aff5f6b04feaddc3be13a188b243928ca60b9a2d48dd1e47ddefd44e7304db1202e8b9f7de7bef39fbb390a607cd9bd3348e855c8716b71e7493cc5b0f196f2516f32a5bba8a66a3e6916b027768ce42f00733ae031de2c8c438741584340e674e0e3d3b59cf3c7ae703c36bbe7996712dbc06819fcfee90d76e67f22534251ace63cdcc8cd7a851e346e637b2cc4bfea399227743f34d8b26ee7db431e3da4c0dce42d50c91204afeb6192ee36462b8862acd6138cb693eddf176598f628ca3183bd334cd63d4a20e88c3fc393d9b0571ec8ff711a840f4f7cd32c1d10ed9038aa20393e7eb133f010ca4ad2048075cb870e1d22d299d74ce6e185d56c02641f304a554529eb42af9aeb2e105c4755d2d25d7de4e7d5e4c3887ac49ae1c700e28e5050454c9d93ee99cb221d3236e548184963030d440062ea00108619002f46060103c0204571044f6e07bf205d158c954c2ac4407c862a0ceb064563ac3a2257b291315b6d3503610c77421bc44babb76f79c3dbb5bca9edd2d65cfeeeee91d3cf2f34e6f29a5d4b6685b342d1a164d8bb6054b237bde528890c264c567e0a088b5829caac98a679841064c56cd456ec8b3e2061928b19241e2a00512055504f10d457c61b282dc09596251132760b282dc93c208ab3745872665ac20a4a203901056326033c0e24949c24892558669903b21cb2a7243621a45a838b292a16b300617f1822e5056902b000ae0107858491f45994cb5c2abd65a63e9b2f6d234b8237a3f569d61c4ee75edc4dafc7074cbc6b43ae5945276f780f91372be49a12a269a7fad2aad2a43df95e20b9cd89e2ce314624c31839454fc10a39d7c603b5873fad7a222880a22dfb5852e88da10cccc115e25841022d510e7417e9163d462ec81022aac288ea0f055b85608a9549157d503fbaa0091020b53aee5490a2e9b146368b59bd8940d102ad144458797ff5a5482be33751173fa48631ed7bba633475dd2f8b2a8a8288d1e01bf7863ec18e3ab100728d08082e833d2e49a0879c78b35cc8372cf25e56961f20e0ce31ed7c8db550e728df4476fd7c2e31cf2763e3e0dd9bb9f879009965310535a503c693df1a5f58492d613393c41a435458c1c5a538e58cec1394e41b4a000a20505ab3565cb881b01bff5de76e05baf5e6f978d1eb477443987e51cfdd9adf627d7b5f0e57de20db8d5602ac99890691b367a4e026b989c56603b660244921d9c84c977704b13e6daa3729267b8e5d94f40d88e817876ecf986ef3a7a76ebcc237e3fbb0ef390cfbe02f398cfce01e611f3ec2d308fedd999c53c46cfce41cc83544275363a729e5198acf1b3b2e575796810297dc7474c6cc5ab795abc9af75e5ecdfb6beb9199a260506055d812111712d710487f39dd7a5c322f78358f063507afa63ab18319136ea03bd0cc091a5ecdc301e2440a9eea7d573532a412e4d68507102962bc1c0fb3226e194d79356f07102953bc9af7dd370f10484a2925ca4625a98447a40c116188284d229288430c9211494442c62907d90b623aa9c04ecf8e40a08843c4011e99328b641d9f0bf01f7caf6bc84e3dd81963ac7476bc2eecba3a3e35cb8c7d60a7caa7c9f2256c1a619619e4cf30c30cac194642c8deebfa1f7c0f8b930fa7189c66708ac1c987530cec0906271a047192c12906271864b06a3133a120a59452a6f5aab5d69aa96c4aa5c89d6a603b0e0a72aac1f035b3e696d81dd85e62bdd65ae79f7060bbeb121887818138330785aa93c250b7f377b7bdb95a4a292749c3a694524a29a59cfddb7c0977602da4b4fbba484ed262ac6f826639e0818b543966c1c381830f9cc42ee1e6d793128b733984b930c41a785d332df85c2008c285fec478c57a5d9a771877d2b0d8945ef184c4f2f333bd13a2091a3c25b1fc1683af371e9c4e1561885d79f093eb44071b5d48c2009d9f68d72d839f5c5c854e9ae1152a70e5a98fb8f75b3f0cc74d600df44b86b20a1180622fd7204ebd40065e9587d2e78c4f07f6c8620d49a316946d3c427007b39cd4d3d6c3f44ee8dbfd14406beef28c8b9757ce41a521812aa82d017280d6dc7bce87bf0348d0f08a56309ebd25160907ff25b1ef8696711c803064f8f1a1039d6ba79400d3535e390b028c4100300600712e0b55282d93c1009b8f784f718c9a8d47c66b8365a398518fe2488e4895c424269168c31144800d6fa2c0a9c8dd2d473346ee2467d31ab953865d2739bb69d34aa93445872688236364b750d539dd83eddab68632cd1ab2f84e3163558e0aac23058823a526a3eb401f32fe636776b6cfcfe6c7fc7855a717d80e05f98af7965c0c44ea3df8e07514e41d7c6426fcc3933df8e89c430e6cc74c9838a9d181106af262e51c28bd27261dca03b00140beba3c3a0760032eba83990445ea90e31c82801808d64438ea980854d980880b9dc20eac0bdd2305a83ae1c0bad04f8e744e4c6ca7622697c9c371ba417446419c8b2bc19ae8196b0d1fdbc076f59a72ca2187530e2603489183294c8f769450fc2442e32751110e1452a8608b1340c0810eac584d1604d1450f3dd0828833b6ac82e43ce95f8bc80b2c534ae7d3129e1ed987998b9cef723e48ce378d93284be5a2fd49af3a3bc40df82008293042900a92c8c14a6a41e28b2e6ed0a409317458c92780a84d463b98746234430c253c648192850d2be95500442ab03020ed50ebcf0d3a3c8182284c6499426825bdc61d3a458aa02c1145136404adeecbd6192f2511919752f6dd815974e65f8b88884889ef6e6610df5d99bd51b3e7ecdb33e9ec930becac5a1727cb9209d5ddccdc0890b36b68b59cb4a22c116be7fc733aa525c63ced20db4dcffcc0e016d481de82a205e5bb543c23b623f902fc6b41f9d2c4127fe35fab09269f454d3ae92651083eedcbe4fb52a7711ff87c69cbbaf9631e31de91b846f3c82a9af9639cc72a7ab3dbf5531fb6963a0fc11aebf1dacc2d0f15d97a83685f31b7f0fa5c3f7aa6675eb7edf24f87def9f0f31199dd1ee66d876fcf74f9f57ab7fbb9ace42975da9d4ff3ecee9e7d7b2875ccafeb6a6625978a122adf2f69d3cc3b3ef294523afdb10d5309c4b928752acf937d973cd3d8c98f0765b80a6ba85f9a06719cc878f425258f25aec21aacc4c938e5a63f19cec29ae818c74faecadd661ba47c0f266868084484fee65f6b08452f043196e082e4b5b7e150be42c1f20bf8d782c28489325ef5afc5c4948702f4d9b323f9fa12468baeb907608d7478e4068db7e3d1c6933d6fdb8f18a7de10684e8f48204ef4b9f5881c88b546e959f5c955c7b8189fe1a8479ef176956f676df81c799c8e6118cf4c0804199bb93dd0e3c871601e354c3ebaa61b913c3b8661b74617c484613d108b37e230ba7c4f23a75e37928d9b65b7db619f3ee9d4895e647de0cfe8957a8cb6fdb0e133b3215365acbd148bd7afed4ea7b542913fe2e68fb8f790eb4af0d304138b70080c31e82af92e3e748640318879b0d3e8c3773e42e277fcf0f6ccde78b0dbc18f71aed46b176f17917c751ff8d331a6f124d89ee9311ebd0b528a353c7ac31d341ee3f363b0fad34731773add7ec438e69563d7893538eb34dc8d18175a8673a163b80781a06a4678c1e8c0482b33ee54fd3db6397b678261de981dc661eea9fac8a73499ac8d3b3c461ca417f1c8a76b4ee345364810ad83475e73cbdde01ad690eee63da3de78b467f75167477cbb177e9efae69a4320245c5ff26b093ee2c03c3a7ecab70b62ea82685f31970075ee8268f0c84fcf184638ea4c705df7eb4ef6f4461c38c7bc2c9a256493f69331085394b8024f516057b2dbc55be24c50357d49b52f4a279e6043d85e108410a3280b134d7e2045ca0c265a20842b46925081f4eab25e0badc987ef258220f9aba714d812ac596289142cc1faceba95930d392714a4e00aafa52a6563a34a3db36afc6b29c1c4f7bf961241f8ce2425843bcd62f10e64bd0bdc9ec97ecd500825861829318392122a28b91758a4d49773a34326119c5d40078b82aad433aa0699452ad5ddd8a852a9924da96c50ec9d294b18b63a642fb227669d1842958d562fa59c167d4a1886b54b487e9136924622954828925f3e223569f3de48dcfbd1a665d85529840e470cd3783c6c53fad819f32b6583b3e199cb8cdbe706e41515b53f1cd2deeec79f6443fb9ef152df8ee445b65dc64d5b0f537c1b5e3720364c366acc7025ce241303c3917cb439491b71a3eb237ff3b90109c09b3897efa5db604994a55848f9a53ddebe3c33abf09cc2b30b91e1b32daf5121fc996315aab0db0549fde592b29062d71ef5026b7bb869140fb64b350ef566092486a2a222283f6a18b2b217c4f4b0bab4d77565e49809148b29f548b58c6687031fe3ed698f1ce456805c177ba277bc3a3705a8923a5025e5ce3b61f44ee0177aea2720ecb4e4a94625c9c608facb7be4592635e6308f71597bd491635c172fcf324cc6dfc38195764619671de34aceb3020dbc925b8f114f563578f9e7b3dbf568051a78d5fd7cf78cfcf21227c375239f1ec3751218711949a3d3233b8c5b8f5cb7799c75e3e1f9e169cf469e61ae6d3cb4c47379e99e8064238f7eed50efe28de1b8f150efb4d412a0f7123093712497e1ba98db5d3d23e7b75ccfe63f4f9ae1465c0e0fd550da3b819f5b630c7df4d6de092ff0d3cc6e10f8410246e3ed478ff63eed747ffcb7ed58f842b8a8661e33c75ac02ef799ef02e63e9387035975ecf2b741e0c7e6ea691574fe3d9bae638c1707b6bd87a31b3d6f3b7d7d402803b7292a8548be661ae61a89316e67eb2df41ea3ccd4b3fb32cf320c86ee0dab112bf5a6857954a73d9b6331de98c7dc0efee65c9e7ae9763eb06ede4ebb37c7bcbd258051677a4f23ef1deacc439d9d3176ecd66ec667bbcd369e669fddcc2d35addd5cba1d37f941bda7de8edeee058864e3de336fcc94528a89f1ddf41e519ecc837a771959a7de3197f639720cbb1bb65d1ff8a3eb039fb25b6ec2bd71cc3eb2d4e9f6c3b2cb709ac77024875c0d8f9c0d9d685908666318e60d46cbacde6110c6d9ad96cd5e2fb23eedd33638eb35b8176b2c89e3263f9d4e2dac456e3d342e35ee88d1a7598b0c101849be6c0123080957fc172a5f4029e3b5679749bec3180a03088c2a600881c1e5b31ff997ef973234733a3dc618b3f652f2f7dc5efa0bc4e1ad07df368d3ce34a3771c733b90d9a13cae1e6e3ba5de5db99e2edfc5530c221d9eb2e59a371e35dde5d2e006437607b611e376a4413fc9ad05f9e51b7535939ddcea9d0dcce4464e3c6a8e306d731bc74c0db737916b3db5e0070e13ddd70ea23e7a04ae316e51b6926469f94b3ece423eaa58c4bd199ce3800ae09a84b73e19d3e62e834d727c24018bf38469f216d36d2546f2f30234a6592ebc60deefd7565110e616e34be1bc5cb27f5eec23c628b31e2ab54f2d8f5971f511f79e61d74e6dbf5971ff9e53629aeec997374aed7077e767ba6979cbd83d707b256c5ca142a50883a146e74bcc9bb9be9232e95ae3bba6e705c1a759792673ee2a2eb441307e336b818afc1fd0c47e2a0a012f76efc46c36460fcc93c2caa97ce51cb6eb6c8f0e8f6607e31e6d76d2f9c43a65fe69eaa539fce81285da57237992c96cba7d378d1c83a8966641f54f18519798fbd46ce41364e52422826373fe5e8f2edb697f6c23cbe3c26e7d7123ce62527325f1d7f791744c7639e7917e47637590fe6d433cfb0abbdd03000bec8180a3f7991d36fdad217425e9e14e18ba1ea857ac9c1cb0e5e9c58c99ee3c06f1bc843f67c631fecf01dbe82ae02c45141cbe46195671fd8ee262787872d2f420f5d070a423a422e3f442e48643aab8235b909ff5a5e90e1c59628373ad8f46a7885f804604279ca4f564e54b4bcb822c6e885113ec688a2395678514574e80515cd0b2acf6e9bc81ec491f2491a2384ef9dd071562e4578417ad108bde1cbdabbead4db231623841d0b19d24d7ba2f79b2bc092034f58a4cb2a58b0a4b4d3163a344f695cc96a61abbfaf5a573a820fa894e655d3bcdeae27fae695dbd1b4aa554d9350b3a52e86be337181e5212aa5f11ce384c5290b16724ea9a01a619493de1cc13a72a87737d74ddc715d8d522e8aa033cb4c954ca31fa40d99c6f3c68666ea9315db69965e4b29e542c953fa9466b972b4122ae65f8b0b1cbe4bd540a9e042a47239a26d7106b60512ae2db2d82da2186dc184265384fda0e3649f511027c22c906cb9c19faeb04780e2d04a75a0eaa707466a8045872e4232b0c18a7629834b1633883c91c5145b0495b65022001d5b862983e2a48517991642578b23a9316c609949418537a46367941a2593b5d3490cf514a04a054a2dadd42bcde2872d0b26f169b136b0a62344a5acb0dd1bd25181cb10172dbe53916e98cf849a338b9dce3dbd4eb773cea9e5548338e1bfd696194491f1109634fad7dad28288c5132d2d29c59623747a958205d1d7fc6b618105164690a289f4027440d57386cc25edc609db695e9f4f09e2d4209a2dc5e69839464d8381c5e2684ba8c7b4ef3dedf4c9474a5efea8fdfc8fd3215a90cfa543799a0233c8d0a79fbf102127fbd7d2321421e7137acff4397b723ddb6f9cb3a7ec21634cf2a091ec32bf2c4e1e76361deaa1c31616a28792ca771ae4faee6b984e7b432838f2a40fa94db6b7b37d67efc84db69400177d5f14e78862216a5287930626200e3f7ecf34fcf88b8ca7a0c2872260a9e2c56ce9e38484d5feb5acf0e293b0d8bf9615587c57e3145bb456868e3041edc6d66abfc49a674b5608bd641d50c53937394670126bdef7e9086bffb5ac48f2d60a24d15357b25cb1f29dcf2ed977f9d6154d3e6611ced169e75df89615687c73093adbb5d957c8b14140ef50f8781ab2f15febca147f02c2152adf7510f623146ce54a141fbd4608897e76910e724ae9c641d0249452ea2614a594527a45e8ba6e0449a1822d622811c289159d620410762822071f2c216245a378ea26274fe995239ed22a689d97945262989452567155a10383a8e28bac628ced86074b90e20c2e3c38f1c14a7ad5ec9c9edd12ac69ef2ab8c82abc88aa6e2f951c488994123992a1d37732c252cab9c95591facda35e699f9ed8f7adbd54c319389d5584a830e20890b5f6aed6528c55b47c74d43d1561df974a0142f18695a763c8205523ca8814ca88219412a8242676b228d40f2e4a57404403209e7a8aa28e981daf258a01eb69fe11c940c95fff8864302506d9149dca9d004c2913ca8968e003d10c70800202ca532847c208a2dc64e2a2a64c9412c1000b9d2824260a32ea89edde908e0aaaed1f110ca278d23f22182cf1dd0dd07befbdf7de7bef898e61dc89b04b7bfc575dab555e135e55cad81e318f596b8c5597524ad95b0f8979f45aabc718ab478731da2aeb3cf18c9213125f46ee042fda9363c4b07af955afdb49593d3e9d58a340adb94f51724be618b98c6f87cc837974ec3efdddf48e8b9e63f5c8c159237c5805727b60cb864dfdaa537684befde861092901e80d290fd96316978ca58c51c61821941046a835841c3fac9573b0438e11c6e9ed3146ee241b3e08b9f76f3e8cd5218e8531c67eb19bf6935202892ea1c30bef85cd990c7034c9923bc58f51faebee7e2fce172f7c56628eae529b18ddba7360db19b5c4360a084ccb48407e9edc50f4ddcf1316eb5f88af6b16eb5d80c2fa761f6c0aab0cd6776f88f57d6b700e58e21cd05142bcad87267f807f443d007da6695be92111b62b95e29b79389a7b387c60dfb6f3f32488f52ffc2021c4fae884f52dc4fabe426219ac8f77c439a010f639c6108b1886f5ac18c5b00a8c3a0d70bb66fba7ebe6d7ddfd1ef7db9c40c2e4a577764d67be26373dc1eb03fb133d61d70776aad79cb2674b279fb58c97d7aca16455e36d87d4974fa7ddd7b5f545e975b1766dd5e5dc7a7013f6c28b6118d695084995cfbc1d25642fefae7fb097b7c39e7e40326f2be7a494e984b5b913acf2ea4cf3ec5979ccbbab39ccb1db75777913f100f4d8e5d57bea441ed95b16598cf19e76809899999919c2781b87c7333e667e10b25b41e1008503283d4606748d07780faa86f00fc79f0cf5c3034ad943d5e0b510441f5d8b9df69da36ae0587c7c442760f231528e32c39797fedd5d4f3bd13be3291f7dc6a3c32f3f0389b05ec66d787498e4a9f70c41aff9647d79cd2dd10cac762a9d0e3dd10c58fee61fd10c420fc3755c7a221ab07c74198f0e6567feec56f20ee6ab06f3350436427071326ec3491b4fb1eddde690b5d1f663dba26fda0664c637274de93d301e9d3beb2387db0feb5246e676974b8f366e07f3d8e43a988771cb7521f81eae83a18013d1830ea6c0c288212459bd5743a23eb9ee226d3ea293b8eefa4e3acc0c97719d708bc0f55d93e0357fdb0ee62478acddfa76bb27f64827c1675c27334c7b3d339cc99babe11bd753c3371c178c4f6e6e3edaad4b790242721b4e721b9ed5ad7b98bc7ba6f7907cabfe8371efe1b83ccb361edad3deaef9bc27d3f5f1f3233fedcc38c9679c347d86d36c70d3b51105de8ac66d7033de7ec325376f8fe652c649326bcd06a7d1fcd070c351f05e02ba954ebc5163a624c3f5689edd1ba862989bc39d80684e72cd4997bc3d9ad340e007091920f013811f24b61f433e06197e1ec332f799ef821007bce63ef3855092562f7f19764560fa7a3be9a38de804ac8709226225b1229369889106d0675093558b0f0f1d053bed69f98652ea6078ae2b7596876e2a22f2d051454ff81f4cc5cb4358989b21d260412e714a3b914a2612ba8423158d6b0b362543e3099626bc997c185d81068b24adb0bd044be54cd5ca2b4bc0fa606ccce8aac1a1b312801ed629677079e8ad1951c2b2f7abd1cef1675ee30eaea661337f370586953599c9b667ce4d843ef3b8f5c86203a2b76bb00128cdb5d304a293dc02d0477e5fac29027df435e33adb653e2facff12faa12d329875d89da5cd54ab9fc8b09d8d8d741d1087e424978e42e6242ef31197d558ee7116bd5e511b8255640f0b3bbdde7bef39a0a8288dd7fc713b39dffd04bd7659c8f94e858fb727f31eeab5cbe92e7b9a5bf6aea4e371a81d2ce6373a9e5f5ee30eb8c1fb6e9765f5e23a9befea5f8d3e0db61734461a6d6cc91424e7a153ca900ccaed5c35a9fc66ca9713ebac662388dfc1f018276b73f1391cd40ed175b8ca7f4a82ed72a086c44a32b21e2d4015d4b2d1e3f7eca38c33cd37ede28d0ea51cdb9c320cf2704087300536daa05c601dd2963ec2320ce3f8471c6a07bbb1500d3f135471d68e75f5faf4cfe6f88810661654410b55507420aa075b6b517b3ff4e915cb28c449bd1346fe7c00eff98d946e3d462921946d515936e2e87c4d259f34808f7e39cdb661d80684af8debdb2fe36bdc16471c97613bd5476df4b83e99613b55eae1882eb9cebe7d18874e1d86abb046ba9669de1b100c36acded5fb21f77e72764ae916c376f63486352531d2b03a8b80207b29f927312c7f40880b172e5ab0b0901608b978f9225136583184be7cf1d2ddc5cb979746d69e4da8492c6252537dad73ce79c37f4242f6f8cbcbd6fc0774ed6a3abe7a96490ce37ce05f43e86c8944f69e8d4a05558fd218eb95f20a21f41ae99429efe62747a987e35ddc66643c05153e0c09b5ce186a99a144477fe92eeda5bff4972488b0af65460e2d336c28c38c32bac80012d35313c461a7f40c6b4271807a00042df8c04053f4f6300b0932a6fc14d203f32a640342b8c8a5478e4aae1b892b3ede97dc0b3fdf0e442679cce3e6335c0fe6331ec37598c79021f4d22be5646e645e7fe04ffffcdb62e54a19cd2a473be32eaf5c8c53af2ba0204471349c1c05bcbab61fd554eb9b485eb91b72e369cc33aa655cf42c72f4478c5f5dc4bcde13908ceac447e327df347fd34f3faab789eb99f1f71ae782c96b64dc0d13c7e3dbed301eeb7d37d789363821fc3b98cb780deec77bcc4fdc0cd7b375325b4ef7d333daee7c4bd0acbbb59a699e65d5854cd3b2da2ff047cf6af54be3cd07bd5c3a951eb98beba14e6f3bc332b83c3b8dfe5c277643de878cdecdf51532e4d98734285a6500fd6b25218757c0bf16195a5e92a6bf0d45c4b2479f58a512ec0a15b800f3e0972d32b07c7b4c491d640f2e6109a7259c9640056f9c5683ed6e1eda303377371750a166582195da9c5dcbf98d5135dcdc984cf576eef456b9b9404e8c92267070a80aa592a814ae359539ebd0cc0c000000027314002028100c07042281482c2096abbadc0114800c93a04a70501808c31c86519431c818408c0104183230022030421807ab53716300ab89206eb3a597ad7d69814f0d6ab09b1fbb694712f9b889aed87a7fff8b82b70a13187a2df41436b9b1216afbe73062117c327da3c0c3d97b93b171caff0367e8c5ee9b9f38995eccadd987bcf0e4562330765a397425a587040a65b88a1b08ad5cd5896d93b10dde1215715c2b7722e29f1624503c1ab9fe1b70da8f6f1e3fcab50f253222de0199b7107dc2b825380046cdf45187b99a53269b1a3a3e2f6f5c6eae0f485e4e847398cca12dab07ca54f32d476a444651232aaadf1efe618312e0d37c9a42da502300bf269af408526960f61d87559f25de6e398088e757a8b116f0ab1adaa07feebcd0c8ffec9ece86c2f400b5653331a7a08a50cf0d20c05719410e50f34bed9f2381f5e9c52fad88fbcc4f5b7a2e46bb6906c9eeb60490a5b57247d4ca7d7dff3e26f67ab7abea28b9809962d1ee5a75b19d4a63940f62bd73f399b6de413229048a714bfcc547f41344d3f48504d51f03381cd0ae4438a390456e82594744255cb319477fd7a38a5fd07f5334ca7dfae84d2490abf88e1d3dbbb5420b020fa21a85967eb264277323722eba5e7a7e9ad69da97544a18fa7430b6d28d15ac1e6585af5b4543e18d5fde432c2d6eac00bbd2dea1f4eab0a2a4f9c0d7dd5296c812a74d3d8648345f081d99701f1ca9a56126f5ac3bec01c4fa3673b895b3381cecc1256faf32b736f89a4615ac65fb294bee719ebc7311800c1c657ade600bd1e1777fcb8e9c6db1d8b8401e4122b3fb5a473012e0024d63cb14cd91d494272b8143f0e5fb475f0ae53d4773fd9292cfa26bbcb64403e1599fd0c7d94f226e601f006a333e3141cdad6d0ad7221e6915841412116a359e1f7fe0ac09155232951e37f8920aba899678244395ce3ebd297f7ede44199e227e7716b6c71b7db9100d7048928ba6dd21a5a008a823d179174e8d38cadc30a0cb96e36797f736fe6cd3bbda122f149bd27f26730fde9abf85d2a26004e84d13abb4b67542c3c6f9b182fbce07695822005a0f20b3a78289d010ee15964ad9cc5fe2ef7335895e9cce5d735a5e636cb7bdac3bf498a61ab47953dc0156f284e0d515733f631f797e7178e9953150e17fc1ee45471981fff9528432a64b728f5b72bfa2eb594fe3e396a3283924be01989d0a92789b1436686273599488c43fcf897cde42b7c74fdf20567730414b3163c5753e0a2c02c8922191af0b88a93094baa89008f8f468df0250ac9711a878b0c17b3f5b56fe4681fbfeb5cda6f9d0475c4e01937891246960695f15a728b3617e5bc337d43866cd21d6b855c432f33d53e5f4dceda6cf1c0658440cb2e8c186617203eefcf32c01ab926396059d0bf54b0865f60b0ef4b330b69efd145cbbe12d0e71cb4e4baaa4b8e2cf95229dca29c8fd808a9ee7e57f6b5d10ac026344005a33748bd25ba4d1c831181a12083abf4a67b09ae8f844cc020400d17bf5c11e49073421e6362f52d39823842fcc564114fa1e31b6b04902eb02fae42014eb71d8e124c11838688ba72643ad00eff2b27f6693b48649c70f03b5f0c35606f41342b7aea82ec8aae41d9942175081ecc4de593548e1a87494e039b36d9c3f4de79e9d0e3582a432b794c29e8dfa057365c392a8ccd538129ec6afcbb3fea24d314bf7ccdd9e8f72a7e3a6ce9c1f1cf428d819183af480f66118a6c9794d4875ae73ad553bb79d4b4a891892fb1d7ac680525df0abef1f07dafaf6d3adc49ec2eac17786e0b3e8da6c5454b53b9e7e239ea6d6774792680fd7d6dd35bdcb685078daef4a57897a28f2eaf4f5d46ffbb9cfebb707d651791ee9dc1d1858bb86446962b087ec336993c05bda797e18e8a5b5d7414440a9e3e28975d840f7c2649b3e188905bd3530b09caccbf5ecdc8b4e58f72355ad9b2f45a68a971474e1c47cd0d5e6a0c92d64d827b73d27e22c9b82758a334b2240654df6dc2c04f1097a0eb9a2a512f89cf63784bf3e17501b9ae262bfebbfa80985e97348ae7d653d7fc10d1d41fa942eaf0878e0382fbe38dba2e4618195f4c60be07fd762e4d1b7c612ea1278869afba53021e01975b3fe182aa49d23158d99c3786e364f6a53e2e2489f9963d0d639fa095bca0681406491d20b9b1f4c8b7708205e1a1942123e9b042cc02d9945cf91f1d72009223b7e63402ac3631106f8016a9e9c7971b66ed8670d1b4f99f2feed41b92762309db886712cf4257dd20d6a7a625b3c604c71ea8e84d07baf85ef0f9160d060e4ffe8f674e2c18277b44b1ec3152bcd57b718b60631383811f4677ea8fe51942409890c4ae42e716e6e84c9f8b323e757648edbe9d2078c811b0ac4843c917b3d18cd2e92f544544614159cf95134bfa7af78cb82e80b70380b55842cb20f06c8f5710d2475597cc8923e059839cec12175903fe456675ac6b5896df9c27d06c0c25430100e964d0fea1391778677c4c0687ad74e0089b85124779070125e9163cdb8c9111ee7107e732e3745d2c5c2c7ec736c91b5f0fe6abd64a742bb9ed82b1571bb7354648abf553a1d59a6081ab486f56c15b4973a22282ec1f3017b8591a27fa1b0ffd14a171451e7ae6c8b04bf346e1756a232f7070ab430f8fb05600c5d445cd0491449418f6ac296e967c058ae65f6092cf5308a3b44e71cdc6c3dd6847b8e3a42f19740e387748d52344d204c651aa3472898197784cde80112318162308840397eea8f4fcd17f1d66ea4da8c1a515145aca5ece0230e4d72420c0b19483c4d0adc6c691f415b5614970896445ed546db220255b3ff5276046cb985f39957007f3c447e280b3498af17e48f49e43f3575e503f0a18c1fb48b5c04051fba785880d972daffe8a5103c199241c088505f153dc4dde739da01f6f7d50f5d7579882d169dfa73032273fdfc7c65cc14f39c2809f6b5bcf7bf17dfc6d0a3f8ab5f073473cb3424794eec601dc8b20660715da8a820721f447bc7a7d525040e6b6a479f5d6605b325384955a71dbc112c72f5f16e9f22d222d0a3f94899adffe4e3f5fc49fe87c4aefb017342a0af62648c9683bd751aeab3d9fd710d8955511c78e56ba213596f082829b5289d28caeaaecd48489226f5d41a67df66e0f349ab2fdba394698e4c09a0c60441f5fc8c0833dd7c8f96c28c2d77d22dcf86d7ba0e3dfe9555c711d30514dbc5291f281f1c00a6d2c92dc63fded0c71179178c74c7199cd62ada1ea6a07c8b1f7f131cfea9888bd9ad0a2ecc342b978dba4471c284fceaa8345896b54c27edd008726ac1c89eca10639845b57f8c792a22ab823c6bcaa13837c751aacf291f5bbca90eb223e740ca8edb17518612378e9d2446fdda4b01156b3715314c001b7456e367bffabd70a154d6167b20f8db21ec7889afe1c67ab614ca674018c51e06e3417b90b31a2df28185a43e3168e3c565be1be6ffc4c70912f0fd80afab14a446084a403243fed68724c9bca7352f0658965d1698b8fe1678d7efcb218d029b8b97b6db9d9a7363f3fe5267d5e1bdf170258900e14771a71cdd3ebc2142dc0e3c7d914e07700118426ddb0e01a500f49a8e4858ed5016b0283d74979c1419acd33caff377677b3e8e71a4fd65e7d5f556a826897c4a4ac038c13bdbc31b613a33182f99d1096bf3b1013069d1c930dd53187faef835298654cd7cfe914be1b724ef13b5ba9108d0ea153831a58b05ddfc831ac266812425d39a4faccdb5d17b035b50c25beb7e730808a3f0d6b780f7e754596caa4e78ef25fbbc7217454024741adb889e369f80cb70b333bb11e73035599c454ff5be18e1d572791d14eb1d69e711aaca3f60507f2c3985a852c5e07b46d64b273ff780e9f78471d6abaaf83830a86035c14edb932a36856bdc5244c422c3cade0dd5bf56d9b6700bbb1d6dd94562da19f6e482284da26162892ef6c2647f270ecd4fa7b0152217ae5abe5f1de691a5e90ac3ebea8c2eac23d22ebe01f1da1cb5979331e73e19c1929afd6517d286bf24a84a2c63056a2d6e40099b02cdf715bcadf7bd673cf3029468e5af489a63d41ad6f9779efa545bf9b3c864c7718cb2b3c9cb131e0fc429c2cea5f58e1f0e02adf8d0b6d00c3a85ecdda3b0491a2ce26cf0deef15e760858d2e174e96af0a612d2b3fc8f19c355d84722524e881ce9a264e0320661b7d5026151c9fdec07d54e58441fc1e7411f1d3899883ea56d8cde81eb49cee536771a1c69f0bff86c99904828bb1c9d011532cf00cb950b5a94963c30a3247cea9242b814895e8ce0d242f0a8a3b39c77c33f4a4c3215c5f533d50a008d4cf3f2c9d1542d6ad0115bc0542733d913299dc931edc6ee1f090fdf6312beaab8cc904c4f0edaf35d47958ea0a64c6ce239d33ddd7b7a216c92f5872eddc375efef3af7be4e7b5cfffdae6bffeea2bd5cf7deae0ff65d728d3704111f813af94a429b23cabb7049fefc4f5633b40d5d65c956c655fa6a06030613cde515d4b664d708ea27d0526272c5625609b22015858e64a0ba6f64d2530c15cccbc82e6b3c5f9b85f29514353626a8d3e5570f9de433d69fc6e0ebecc7e25cd0d4b7bb558b4f0e744e7ba30323eeaa59817d26c44b5e1df0a5ff5544cba6a0f7b9d256214014912560b90bb197084b5e46812e2a64884d97517d794506ebcd7c6bf17a3db399838ed65203af878bcc22b1ccc6880de433640e159a92d221714ae2b74070a006d3e50b1c02e88296e20264077e2214592ac08f9be64bf32d9ed7fe6a4fb140be21cf27b46905f1200549de05a5d0cab764fa99e390484d2125153f1483838ddc42380858eb020feea950a6f61509da090a8e88d0fcce9c33843e64d2dcf40dd20e451f7c6a199482e2f8c98a640557488f394bf018e1c86618a72d38a9c52f6e9370206b2dff33158092b365832b71f369bac35188e119ed03de0acc7440bb2080bd7ca2ae89309bb65ed02ab6d8c724c92d8954f259855277b6fd4ad2a72bd6cb3a9fa9a452ff52ed1b20eff958548c87e46c2007b12d160406c3a77fb35cb5cd0e6a80a018c494fdc03c9791f8495665321b279d03668db5a4f8a090d9c8aaf60c924aad89dbfdbb975c163a84de845202d635343f6ca7fe598a7d135f93e4913afde54435cfea69dfb07df656e34c68fbcb1c1836df84641e65a94fb49e1464fd6d67abcf584956f836cc4202716c077b1b0fe32a7ac78d8e1027ba1a47c079795d9ada180469ae413695808a206b55a4ed970b824416e880e51f582cb196ac019a4bf31dbe5614d0e50bc488884d1499e35384553298357acb678a0a846bd8deaa5288c9650c8ae7b2e865fba7390e361ed38cc1e538d839b81714f42dd53678844e0202214ee5ecd472a754769b1c626309a7dbb026f00a501e375b84a9eed110d18b65885f31d97578c796fa160d2cd963c7acd5689faf71b2915825ba3a4d5a842637a2e56f41cf83526954979a75731ec8590e9b63c96a61e6080bb8822f9aa55e90e49bac542e52506cb5ecf02cc7e23b89dfda98040549816d1083b71eb1deadc498a80eed347b4914b7f26e46f786c7ccf500539894c2f0a71e4baf54e9a1addde8088030e81035ca08a69dcca63b2284986be352a83e6f80dc285fd9b433620c6d2f4bf5f9b23627ac44fc72d15910214306087c373946ec358a8c4f0a927f1172ca7aaa89b9d6638145d16f76d1be5bb0d714f2298ce77661ad6e35e02bc9ec8eea51713e6340a3d141d0cdadaff9dfae78fcbabf183c4b3bad8c82550980d0b55cda92b7f6681ce82ae12ea7e3127f967cb7102c402747dfb1b9f9f59af485ab4701c243fa00a9e7f6aecbdd70ce67d5fb74ba398379a42c9dffd5cec3eb3ace44eb8eb12ca9f53bfc964b8ea4953eaa75e4e50307fd73c694e7047ed721d00e6c69f6462942be047ebd5d75670ba2099a9b2a117f5f8c887221ed9f5d30c498332152939d399191d1f58d658f9d8c9d2a48f762c653a95bc52b9435a22fb077bea374f150883ee1250c74866de35ac325be87c36b969928646d3823b70c94b89161fae7b88e22a572b330f42036ea381183516edbda66b04b50e805bc319a47436f18bd119fcece8b3788b4e62d09191447f32851455142f7138e686ee5904ad7a1ab5cbf4d27a0ac776805e7adfba0db3300fdb97ca3a46534c14092ba75b069962bbf89a5272840380aa0cc652b84a42e6f9e9e23b1c208a267365b516a3d49af3a3f755d70268d5cd128cd12c0eb5036511a44b4771d1468312a86fa87896ee5fa3aaa599b4084ce0ea2030ee78fc372f5b09327122a2b1c86793b394b306713535283dcbedc4ccdb2d35ebffe5d56a46d2de5cfd4f0b5349e1162f39b8b06a27dcc25046b788cd57ff2dd75216763bdb66427a03cd23a2cb643cf8c4a04d8035c826b693105c5601caa175aa180d4f01850b2e77fa2b0aa464d263d9379bd234c09041632f381cc12320b8e693601c5bf05b8806350efe3b2ae318134719967e36ca23b55b42ce1ed804528550acc5d869a660c51383787230de6768939f980f43737e99ff657d2da2cfcaf9c3faaa45deeebfbdd11b1c5ea269a7f9c02a9d2593e18c1a90bb58df6221e35f46abfd95799c4ca46810ada5124cc4ce659ae1552de7fbb08b869aaa2d9d277708b730793a24f050c769d3824ae1a43358ea6b4ac3b3ec993988865a938b1572f25b156303e706078917c946a6f0d83d09cb01228904742ab677e0c54ab118b6e4b6e97e0e6c2aa6e4a5c8ba579cc9aba7db02ce8e398283295615e7abd3ffc5a14091dfdf0fb98aa202f218ccc1b9dd9e833ae34a5806c81ef0f2ef0b8c8cce0fe5f88a9c48000ac8036e80d0f30812d1e1977429d8815838cbc37ea8838d04444756efe65eff068e6f9dd0cb731d9ad2440ffdf0466dce423429935194993b45e98d6068edda1313d45b3aafa3e51f371eaf84744f2f3550c0e5d5870585d5c5ae86072b9e15daac1e848e20e22018227e4fa8ea0f608c4bbc1304aacf91787759066c8d0643d1f2d0790f4dcccaee4e7577b615b86a98b97d45d2e5423dad29ac83579ebf0a28302e5081398f423ccb943089a9a8dbd1f70724d7a453bf8b047b6fd4a31a418a81336505955b32d98cacc83e28c0a6d074e58ee6130eb83bb4d2a289e9d63f9cd685c03b7242b2bb18d3e6e848026566900959032d7b702bc6e3aa59fc7e90715fa1fa9af9693098b187ecdbc45a1281e8431c7eba82c6189249af6f811719af9db6d87888d00e5d31d64a68f03546a3c55b76e6e48c6cdcd1e0a0de3129c7d8af03bd59dee2fae910f35f5144e276ee29fdf76816172941529c14ab0c53dc3aec5c2559513827ef8dc59920df54311b2408ab91ffe66abe1b28a595ffa074e91098b4b0395b21b4ba8441cbfc5a23e0274071595a677f86f4c28a62aa9b3c216074c7540bb4c15a8e1fff407009f6d7ac731805222a51f6df0f4e92c4c0c7494e2fcd3e7c89d8b72ac8ac801057093f7a7bcaf490c65b7770c9fe72c5be1b43784d92975d432cf6e056fcd62184a42b1907539582e3515621eccc038a1e1d5256bb55df60942168331b107f9cdc6ae740800c6f8d0e137d07c6060be8536b5f9d7070dc19619a6b7e238958772c41be73d032599c35752c5d7dd342bfbed2b838b03828403404e86ad0f361957aa04f589bcadee2fdf87aa82c60f68156b2d540d665d4fc1ee5634c45d7c0f87fc218e0740a6f140607c960394124d7a78fd516d08da5c1bb3d9d5adc2bcbd9885a9fcc69b5e017b082f77f0fa979cb9d561f349f82892339064375bee1d150c1f6c3b5cd03adcd1f237abd003353860d3d20a4cb8fc2564ea58f104a4696149bfa4b978493a4037f6c2a5575518d23fca2150d11448995064471c272b22c47a09366346e4f2a20def2a987de399a2b0c42c2a35594193e8fc712b36fb5485a8b20d2e52abf1f7a58d393709700d330654e50ba0487c36a8564a2f8347928b8726f13d05c85b138093371fa0d6900bc8032e910217cdd204e52931a86647a153aad2dd237d00b64813a0caaf4c674463e287af5296dc60f1362e30f3bc50deb83dd3d1123f0a5766cc434db104070c3974930330001ead1820b268e9b72c518f92749a0903ec003895e9d08ee69ec29dfb29d1520f78e7babc79a9b0df15746039c647df52fc1864fda3637b9e267a21e27df8c69c8fd9a1b3e75135a7a5377ee3e92ddb631a39018ed2bd0619deece743901c6ad5b4ef596a1ac0d1b3a856ed138b232d2d7241558234b263a9c06ec5c51e27b0f53cb68f06f9f65016df7c9b2e0efe4ab885ceef23ecf4e4e451b1d80b48fbc413928f1a7812788b6f08bb96486bb366106215734219cf343510e226e286abe7c9d07aaa058e9cce4dc485b25a31b2456718714db8c2c8f33c5981c033bacf7e0d8a00084f27aff38960b4597fc5fee1557fe44ce76bbf4d79e15c891fabfc6567337472c30ef9e0be877c3213ee5c4a4a10884f1cdb5579a92ff3709601700e970425f184f1a166a6f907d2d966469623c686b1c15f170bf2f7ca482647b08227c43682cc25f352508b757f4f50679f53509c1488b5aac21442168d4812d0f7f596210892bcbf90959a0f79eb4454ec8d19ae145e097f1c51cc624de8db518bc575c25ca9990f052dc33ad8c9f4cd652ea9525254880a5343fc27292708a64a52fecc18a83e7fb2a23e8b55fa5e8ba65b861b967c3ace9c0d02e6d80d40239883c0a2aac6f061ce0aa41062f26622d51fbc2111b422fd8dbf2d15085d645cd665b2a54a0c605e54f286098fdc14e00f07ea024e42c54bf01ba4832111360eb2d72b3ca38dc79c7b788d56f4254a4389d88124924ccf9d82283e4ed10d83f146693950892c7e802409f935d92fdb5f8ef37ce612dfc46bb325326c78921af4f5f6a4cdb43032bc8c4c52afdaece903642d03c898a023758d972273400ce52057545a70412817cb4f50ea0d218529a5489d058ce49a7f431a069d20046fa3752a79e97dde61cd9b9edd1e8a02fa3cbac48c03c1092a7f2c864831a73dfca96e23248681593e07bcefc4ad0971fd08792e9f3900ee8932755105b10f37af1f0ec2cdcd99e89a52cc8ca688fd2b13437940030da3375034e8b12379460cf5156c80751b54ce9e1b63426bbc309989186e183582df2b08a38234aeb4d32efcc78a19767c4118edeb7d0463d7119c961454b0a294e6bd0ead109c7b8335585d53d5709bf46485ac923928402e497d79a0ad4a9ca7a2808cf87a5e2708c63ab3800841b3b292da0007985db17543dc139544c12e506c1e33665c867d0500b33cf552bd8308057605ac6cf6dc1ecd64366c310c78037079205cb575e56088d3444a0e32a044751fa29e8c95b4b90dff1ea0dd035f5e4a9b95684b8283b45a1d7d91e43bf39292914a421c300a8f2b6f91d8f98013f30b0acccdfd46376b16febf5384d0701b702c96cdfd3f845f9c74de488d5d0060a4acc026124cf1253c064fed900a97770cd9f5f2db5db63581c7ca12ef97400f5e2dca2af8a683d2d8aff0f32001df5cc549e23bf3a04d44578dc5f632514e2b3d81cd540d8eccc695a5ec9efd5e3f7204c3100d356bd42590872ece1ba66145c0029fd98bdcc110a6e16359e1131ed508f556512ef9e1803c2c309e3de998467d64e915709ad2a0b0624cf53b42392d7516422898e8a39274db9bee359ea21d59989f9c1afc58c55322830eac08622cdb153b6610dcdf71ddf5ce151cd08b9289dbd736e763def2d6956ebd5c75581cc244c5485a80104d8f679934d0930398d7c9d52dfe7f2bc6d04d9d3ebbdf7e460f700acfb8390f7807584c86c3af685d3b4d0efbbdf0c2e933ad25710812ce225b823110dd07344f423f931ec6f7e2b1386996b6939a45af8c94d12e6e1bbf955055513a6f3cd851384908e1583b4bd73ed5cfbfb5f7ab0b723ca197ecbc5edf56a9cdf8fd49e72d3303da23dd04b6048fdf4a7a80eebd166d3b43126311f7ef747b399b1ab5989b9f47de2be7e0d0e4e86b094265d8274e77a506e592ba52dd9e0ec209a6bab18b7adf1c28290f38acb2d8ce8eb64730d7746bf99d219f666ee01e7e1fe953cb30620ae2bc368fb65ecc232573b7945c88a8d006a7968bf36edea17b21e32b7a50614d1549b84656ade005bbaac97bce730cc4786843fa2ca479579c495f2b4bdf756bcde58fe49903005acbd6263cc1041f024409e4f9313e45d351dc2596b810f9130e124b3446408db4c13fe9ce26ee68552327edd8b2c5b512b29835c70a5b1a47da5c0ad1810836c9364a362feeeba82ba20e20c756868e2a8f65048174ff7bee5f62f4522beabc47e195d49ce968b905d1c7697aaaaa7a772429edfbf0af907c64bc3749e21f63ecb21fc565f3a11065508b8ae6d1ba95193a8cc73b5e54feea74593a8f2667c89427d01a3a0bb95b421ed42e54957a06e61ce9e38a56666f41a56265a5b7797c86a8b2518362584c4425a1375275ca22c6f90ca690e8dd414e38d047e56f6e778c6098ed4b7ba12c9e294d60cc4488078e56d5f7a24e39e9434c0f5d6ca1bbde4c0a75843e266d9b854377da64e008ace1a93b82d1285d44b49b1439603b09928898481ceea2db75abc34e2b33ac57e1ba403645a37616dd37f23aad2f9e64c1c750e42573cfa8de9742b25a1f504bb29a8a8032db4f32f6a6d70d32df6291204ff272b8e67b2fd21a86393b960bbde127aa54297f086fc49488577296ea84a8473081a0ccc40011ad51c23ae0a461dbed1931ae19d3b20bb759af3f04015a2dbf2224e7d9f2c3f7710a934e17e4681f3dfdb5410e21cff32416c6019ddb9501eace47633e7c93a4c09e26352425952f35f8cb512013f1fc8451d01a00ca0fc1fea8799ba8ee97693061d4045e316c484b8b7b7dcc2fa7725dca80f43814edb49019bf930bf159e7d0ecca999d64b39a782bbe549a8dc90257e5d97ddc042fe90563aba951b65b03f65768abc73cf20d1f7b54f63c58958904f8b5d4b98677d3eb4e2633c01d280c7de1d341d63a7fe5303d7c9735002ca183758702146f07d6c025712bb69a12b989193a0692b6924ce6a2263bdacf9ccb4ddabd59d54dbe53699ac1bafb4d13208c2db7bdb44b088d8f58a0f903d1e2b454ac3c967ce768146cdc366c1e237842c0944996b91c47935ddc3ac1316e01e52e6ff8b5dcfd9f20060c0fc1da15b1a280f2ef8ec24a46bd8326a334b962e27b4255cdcd7d67c1f6c564017f9758d91a653676e3451a241bf4a91e43d1ec14909c7bd648696a0708863b5dc2a21fd8bf9bc4862a13cfdc3709230444b97e3032ad5c9bb673fef8856c96c39757cc9ee04e593c8e39bb61794e7a5087ad60809955b3f1beedad51e4c5ff1cd7299dde2c573d6290436b0a916f1e6eb7bc4a601992fb91e0b2d6c291bc37cab481d2f4374a055f5494c37e2c04eebd2d7fe5f095b5533bc6e82b28cef5315bb8562b338b6879d4f78572589e03b9fc803644a2cb786ca9c7dd8c17de9a507ed63de4e2fd3d94eb11f82ba8d2d41d0b3a3fd315a91d62613c09d88d10c040eff86f358a88a75386681a560e5cdea17d94d585afcc02eae76118e8c54ba354adc93b7c5bb1ca1ca3f6602eb49b5f0661fbee6d66cbf387938bb376dfaab044fe686c4d195c01d4e3797ba78caaf2ab057736444046b4f67fc7cd2d24656c513ca39de78da9683392b1e0d2dd102a413337bc6fd38ee82b9acb1610247f77dd1797bb4e107e5738f9cdfd2ffebce0cc69f5ca6a00387ee06c06c5c3a6616cb6b9887060db13c806ba3b6724793f678a76ce26365e9421a0e32e83a7cfa8e0d7675e53e0dde72a65fb103c613dfb749a9f4cbbfe874ff1ddad8f199c959d8f0953c8b496f6209183568b8b0024987af4c907b1d23fcf175411bea1a4661767e26e4511a529011671572b94de9b6bd423c777fec23a600ed8975a90426cb43625fa8c969b20030d7cf8212de2c4bccb99ecb34ea1465b3a97429c7e8f533a484d80c3d717e49a6d1b16abb18215f62b96368693b2b616f4843960b3f5c9c0603410120f962c1d505d4e785d3cb456a3f7d4d4c798803cbc18a348a615bffeda9314005a33f84cab9fbf54321eea219a76076912ac1149c0b940594832304dab39123b019b169fc8cc8bb19465d37ad73978ae9137d67141428f32703c3c83fcc4be707e6727a074408e8ec83452d946ba99de1e3c85c8337ea331b7e8e4d4094cc8277cc6c6a1c91bbcbdc31d539f5dc2a26193e165eba86018671ccc6f687172424289995058028eb085bb5b017e0fe7546c637105055f6a988f4da4cf3f8f6859a21f243a1ef9c496b348b4a042b134f362c5c1c639d1fa17796a035e9e8697e6854d026dae1b48a0daa3505c63f2540de71f3268d65437da8da2a4d60e6e25a8c425dc38a1a4564b316c7abf48189ec501f2708ccb6bd63a59dcd54409a840b9551c3d8e8e8f8b86967061a8fd90d5387bd431d93305fe4d53c10295e97116f169384a9f15c7d964d3d4053eba4c7b26ddb6ec6a24760ac567fafc72d67e9f4aa715811f40abe16c9a279a5a48c68eb3ccd9cd5f04841f559bc430adb0a28c759579678348c43e4ad6367d16c82784c2d410e95b7524e839eb7af63798894dcd8e2119d7d632a28a89b42a5ddc4045ed773bd4862a48647aab7299aa70feab8b5f57f09dd58c90ffc5ffbff370e4fd8bd3618cf73df3c3aeb20c65d2ff49b382fcd4754ce2078c55d688ca193a65da193256d93deb1336fb137945478a346154a7dcc98e36217a3b9915403dc159ff4b22f0156d1cf80ec625a9263918ecd5eae0ac4338a16f88325b90e5ba7c9d31d3fccb8aac870d1579ea173b1e86338aee648bc08862b4931dd69a429c768933762827fc879ef9d8ada0d11abad22314abb96a08f5dff7480a47921fb495ece95f61c14bbb068d0ec2530d3bafe68e552b3459190a662c6b8be2695413459fd68a699144bd8e729e9a173ff77840336aa952c3e70e0c2941e62a5da63c0f80ce0d19b91006e0a38cd561fe184cfa1b71302091a3812d2240d94b8f55da3e7d89a95662d680c08554629595d5b2cc3a2cf0f581e2ecec60d18dfb09fd28ee689f07a4d079c2c2265fe6e29d477e07b6ab2c7622c5faf97284fa75f1f90edea15d5c583b4dd35d8c005a7ae8c5b48fb8b0ae48c29bf3779c28bb871356ec53fdce32e7500115c397ef3c266af14e005ae30dbbc686963dcc4b0a97210507e851a257f0756bb5ba6a70f25802c26171799647c7dfb0a22a148b32aa65352eb63cbcefca6996572af1bad7aadc052ffda9d2d85f7b5d041c5310cefea6b5a72915830f0632d0c31a187fc21ac00486202dd6ace2ba887ccfd7359c0133cd7d4e37f7a0e01d1220acd13192091378825c9726a17eec5cb4794b427e9bc56e3271c28e0534c8078ad6810156779d855ecaed7a927daad738e0c68d442a4e1e51965eec258c88d18b68ad293984b0652a62a85a50eb320e987cd2142e28e80f60a11f8569286131c77d27de34514355494d5880964b7ed7d13db335a53508ce65c7a640f6894e63703fb25a06fe53bd41b9a66124225cb12e2fb82d950e0046a35cfa91ee24c550257e9899bce064027cc2df33b7a6f8f184b2a3d01dedfd3d92a871a9572b990cf0e98cf366b1a71024de63fdb09954c7528379845fea74bd003ab06553a662685562d23525c172aa2519f2b9677de108a1b3de4ffa7df860730a4e9c97236298423fcd21b78a941123d7d6d8ae9586a71afe21ad4b321f7f16829d6fae63098b1f2d40c5e476c18852ce657bc88d5c3af78b139fc3bed892f71b84c302b7c8e1044420c617bc322da4f5eee52dd1acb311b90af8586ac0040d8f5454f63086348b2c7b9976ad3e02388491655aef8a9664cff24b0376977ee6850d5954622853fa576168b58e71ac67792031bdb652753886734c4e7adb727d449d263078b694e8708c90ac508a728387705697fcec849e4a88f46798f318ed5fc815066262dc3cdce47c51e1b827a55b554003c2ce9938d988aa02abe99727093f3bf4b2c29ec27f819e5c4313f1393bfb8d2577445332d9e4605095c7900c7da78cae180df36383db2669804b44d8c96191873d022eb3cb6711b1ee77d92f002e645762d79ac300e823911804a6712b95587ae1741f6208b8b0b928d43435ca6e3c1a7d93ac0105d1106600f098328b928db261cd3637ef2e20f38190c883fcc1c18d3539d241d836fd1db58d23dc0a264eaa4ac6229f721891011ded5832d0a3a4631b42361261b0e797db2b64811e4a224c03185da82bb5dc16ab53eb7e1c144184bf0612616c81d51f994c842137cfc6ce3bafaa0d89bf17478d4c8441bd70e9e26935a4172ff1c24f5d6a5ed31ba5561f9c466fe15dee33f612afa8da462407a1290506a3182d701a3e5a6fb537ecaff1124e5d3c72fbfd93cca8bf0f36d5cdb148cb6c21a3bb37d64b2cd5ad50bc6171d94dd5f07ec45f1a10a88d3679561a254ccd521be4134a2101959cc9a222aedf5d4ac97218ab4c06e6309f3c27f61790a214d321c3aa359ca67565266e55d05672863ac979b8b6b29799dcc99944778eb5709c1e3ca4b03ba4a727a722e79f931e8c70975e5f98bd7147e509557ee5b1a4af46755e3b1c8438121466a117f33585091312d052799a8e7b017bd62477288e8839d504f80e13b1a1081a0967fdb110f48b20ddbfa34cfff5783f1be592d4e142773aacccc02f9ed6336dd63dc01c3ee17eb35fc0e9b36a2d312ec6206087dd3fb58a1a3cbfba1d47e3482f089a177e9de7e9318f8167079682cf5ce5ee90a572dff128c82c4da6c01ae1238b588d9d119bee9e01a588ebb73e50ff5b38aa8e90b1874839b379959d4abd361bfc5c460c7dab1326811a525c6da97405f64613ba8d5c5e696c3571e9c63b108af85aa92a9959312549e8e7baabed016828c4d5a89af0394a4af2842b2712aba4414db795fce14c3c7772ab417a310dae36d5284c5a85f64a0349fab56faf79ae9ac9d88a1468c0b9951c18147d647940a0ba2cf282dbacb133ae3a203c8f674c762f60d38aee1992a1497d50bd8aad36e9c923ed32b1360cf0ceca11c32e6d66ec2b898fc12bdbd4123ea0080f00f4afffe35edb8b108e0ff304e8cc56756e43849715a647c143a437c9eb328da6999ea44c6db4bc7818a0c957df457043b6a24a6f341edd925d840755925dbde1f61b982f558d8e385dbdceb9843251ba12b9f8dbf490e18f61cf470ad40ce3f30f906aafa94230e9f6fa62b715857c7ef0f68bb64862fc349149dd1cb024921067cbc1701cd65b4bc709b8c3e8dc9f223686d1cc9d8b4aeeb0bec51c53872afc0b9abf81723e0ebf841113e109da3bd8c59a5c854fca4c23bfc8f1fa5112bbe5327aedc047c296a9150b968886066c914999c451247328b0bf942c371950b8680f4b797700549ea397651cde0636c07d2e9f83f3ef4340eadc07a4c8172ed294900309aaadaef2252c16dcb59c28a69c0177db9ffec05b088cee8588047cbb0eb498ecc291be84e8a3db822d41b2fa0c7ddaf3464e3f654066b4b38fd35c6975216efb7a33147a693f03187e9a662e85d417dbe18d2f754c4cd9b3106aa56dfdbb4a3b6dd88a842b2c70e2065986040729f781d81e53a756c6e66682bb680cd9fcf339f0b97ce363529d348434059208031bf47f305221acfab8481bad6cd9a80fb5d41073a9f1d8d30a88efbbd163bda53843cef0bd77cbefee68adc88d5b3ab4c8dd40425cceb1aca6106511ff7e9296600d7833d9be624074cfe63748e8fc05e685aef2324298bade1d3688ef2e4c2c8eb0c745cbb83c293a4f72fd06be27eee302d5898fd60a06a563309290a84e09c492d2ad1442c919fda1c0d5b599f2cc281c5fbafed9687f505302424e72f34e31b510e359b9fa8b9e101f33268c37617ffbdaff3c531643350afb67031446f6f6034f4c7de38e1ce396672c64440520fa5bb04ae3a8864bb2e16da08c9b570939f0eab468f16cbf4f9682c7dc9f7166d8bcded12475b74e8d6fd17acb5c337c42f6b6f857102f77d9ecb61f90c11d1e4b3a45f7ff36cef92537fed0626852478be138b421f3b80af364454ab45a9ca3e339fcc62c1399a01d11ee017cbf68c35512495ad87b3ace6d773fea27f85fa18d44fa590ebd7215469166a505cd4f7c1dd7c3567949e77a72d25c4eb26920f28b9cd0520b903ae9ed2237beb750926e44d608e395792b086a74d972f84bab5108c1cbf0b5171f897064f188ed65983e11913f2d8803f5b45f7e28496b8c8b7cdce3227350d68fcc2adb8b2359d0f384aac3a7264a128ed98f311347d74cd1a8a72abe51cd352c6ef9afe31181eca58816e14dae898b43d7fb6dc22be0e9d83aef7d8fb0091f100e70eb35f505ceff2cdb1d9999acb88980b11c207b391b300f94743569aa2035e92ceef13aba105c594f70829e1aac46e63aa7f47f30bda544c30da4010ee2603b364c37c6e81503913eb974607636663b8c1c6aa8c1c970b3e5635191561c571e9ef2e02017157d3155d98f4897316bad2bb8f1496b6ab6949112ffa08bbe22cf3ff2cda87e6941592fa548c7a283fe8d0cc2c31f81ec203468f9dd0e996b8520a08d40be812d15799c199526e4d355ab30450278eabc3fd9350172ecad5fa9dc1606cef3433c1ecbd4658bc2c5a147ad8b8eb4694a7231cf8bf940489c2bacda73283382aac1b00647968963e9bb2f2c6a92e3ce4db1931c4fde76ce6e06542ab63ee7e9d04fa518c33cc7e81de37f2cd62fe645cf637915ec25b3815179ff9f769b8d45c9c580f506dfbb4fa55786846a61e4f4e26cc3bbeea22d91de14ff092143fa14c65836e8e9cb2d94fab65c6741879d5a0b734662e8e154496d56285163e27348b8836b46db4ba1bc3352fd05e7945087f98c17641fa2b056767675c23a1b3c3d6f0aaa5ab40f31b9521b8e625e6efb9f1c766dd88b7f684b4ef8294526c957e11c9472a0ba43cf2b0248aba2995085e59ebf27bc88fb75a63911bdc2dab38e59878dcbcb98cd5c7d8aa51d61e29ec8dfd6f62ab3a30ecdbd5a60437bf1e80fc51fe8a56d632fff82b2a27df1388dd3850005428c504a527c76044a1c0e1b8f258fc4777bcf181488f4ce68bb37d940a6e37687f699841d7a132c1e5884717f3bfcbe4ee9bde8a04458f98ed42c3902756fe3ebf53f29f5a8b93b5c8441e37bcaecfe74028718844b1adf29f762f5d0dea8854f6fd2b944ef4432dee59c2585cbd6b663822821d55783396b2257012f259d6db00edb4318a7aaae1f1c641a121d5668ac2b60936b9750492681af4c8db43051e4ef2ad8405a4a9fb59fbb36b3cf0ed54bcd65ceb4be154115c3d977959bcc12d78303c6b55da6c6c6c2a8566f52b1b1d864b74edf4652b27ce48821eec6ed84b89bd89d34d05ea3a6a22491856d094596fafc199ede0d78935ba62f6f29e21ae5a6deaf11e6ab0a016a6fbbbb3fa221639551ebb2ba2e4e544946df0ff2069250db4e5d0edbdbf295158fa00ff0908817b6ab28958c2439e86b40b52f51fe7f6cccae45f34f9faeb1fe8b0647751acee4c9c479b69ca493387a1c6c93243f20817c7eea906a0ad1a462348a2d26f00d0e224905e4c158026f5ac4a158067dd7ed7ce3e27263adcae9b9b1f05be51f28f1336f453d8ab2f2937fa8f8b6da97432c0468e766013a9ad25d31ef0e64282234380b90c3fe7a980d4be7fbaf7648d5a6c57754fa2a7066fb8258c817073b4447f5eb792189331b722c8d9dabce941036f6b1aee3a20262d233e6864a7c330e45e8052edb821c689408b8f6de01e4bc1b716daae72118f6d9f61442b8b798d01ec59035448e1e94459c2a8d1e1dc1ccd1cb5bb06b6f8e3ed56e08b0a0d0af4325c8a1a4964d644b87c63e6a8d7b9b32eeda769c40ff399cf7448af40c6a8769ee5a248887644ef659a3f92cfbb3ae3a5bd9a05d892e47a6e3cc867003cf0f439707410dd505cdc18e64446db89c4956f281bd67f2d977490a3be3ce95a9154caf8a4d8a3db3b25069cee18dd3faca8848fc3e91844f08fe95ac5630ceb269286c947aae02ba6bbd8eb8f4d7a94ce3e61c82a5b13328213e74cc3401200daabe5098ffc698eb4cf155d0129aa3397b259464d95f69e5fa35b470140a25be1e419f038741dd1c449f0cac249348f6f2820c3238c5814bee6fa62079ec1f874657deaaa88142b4770f5e2ed4721ef4b12dea6c2a07f9b46711d8778809155e2c079592343e608700f5e10f46d00908bd7270fea8491e8f39bc0507bdfaf80621fe1d31492446326613c4aa66c13ce0242264cd25bc8fe307225913c95c704d44491792f0039cf797714bd25cb662adf8b13217a9e3f1024270b794330f1c96b63e9b4879e5ee6f8a59ae6738e7cb853cf16c22da15c028a7e07af1ae3a3a6d89cc3ca3b3614b9eb88c178b8de964f10589a00cd359f923bfa9c07f355e352151b79924bc3236813482bbdca4ec9ba9519a4e5d4798fbee598e6067a40b06a8b0572038ec1547bfe9d86b95763a6ee51c020a0d3ab45d1f4ace91bb81b2e2373772adee2ed931a0795a20ca258f44355da5317fa34d6f3b93a47f5a4c4ba0d29d6b81ec36b88daeaa59a224cd049f6a114f0545263c5b10594ded382d7e9ba0c2b46aa020314a5b74843eff45410962242e44dffb3caa0cc513758de50e698b6eb17ddecc67323b3ac70b6f02cc53f9cc6972c818f8bcf02d518681503708899717769fc42bbe8e10c5b1b836e814ae50306360e1c80b7a291549dcc279d131038b2ef3f382348af319518df2872288f1beb4ca5c0f5ed273297f573881312c7bdd06960e34532d88c4c735892d5fa199ab67a3c91c7ba3c5108831845869f7a66f04aad124a73c07c160961c83a926f5941b68fc98beb8d2767c33fbeacb099042d34b8056d8dada4902b2c3ec6d9dee720a7ab71ffc50449dbfcbf04edc1a4ef55b64b23ddeaa8ad3ff9a4f01c429fa750b0bf9a0d0a20635fa43fccbd6a4dd9d3f0dfcd266de3a19d3565292aebe7fc421f85fe130ce587cb99d5266a02bd245ed3930c4b4ec1de5724f18130350c6835c7db8043f2cc4b9644db65932512556fb6b1429527a7b7c3644eccc4a661161ab0d3843d53008db64924f629093b720d351aafcfb88971296481e589ae4de44bb8502e2f90dfbc506ee1807c19885b5287eb89729ba9acd6a4b465e516742e4e2bf77cb064293defbd576f43f61cb725cfe451120b0f8c49898cb8019e736111e0299d814325026322dcf3df0f9dabedbf833bc0fc5f4246d514ed68140e9331c095006feec7fa79720fb59794410eaa453e201a0195ae01ef8d793917f50ddeb93c9967d569fd0a593ae6f6fea94c4eaf39137497eb0cc7a1f2b25c0df6ca210579f1a310f4a2e8d2d1a895bbcbffa2ed3191de7d567bde7d6ac05c48e3b0282785c3b6bb759d6e1c7afc8d171e6499cb6e6b12de26dcd6ba77aba7f8eb085e37fb6756ea713ec572d70c77ca54bf7c1e02827593357255ef9355cc2a28ef4009c9f30b055a5cfc7cf7241d5045564cad73a200538c55e99e42451682b3939b8edc73dddaa6a00445592657e2fa557771c3abfcdf0e608a6219c3904eeb56fd13eacfcdf3b9c3696a67ce9ffc12502ecaf4bde39b4ceeb73c99a16fc079a9b9df17029807f7e39a8037ca10f0a98259f1a8d6cae04072b1a6ee5674b029e843b97062bb69ef8bd9050643635f3661022b6ccdf1ffb055090be1005d2ba8b600db56a34182a9e2604b879bd2eb6522f54c21a8aa40b890a0a8d4f2a6af0f5af889d3ea9447215e01e7951ac78fe5785322ab8e281c8ec35af152de632348808f2d798cd16edef0ad513be116040a7e69089e44335d9c8f0015a9b470e8ebeb16a86c27bec34881856aabbb02a1e30b882abdeeccfabefa9c1e834488167b5c85a63ed474338c9f800b14f04cb93b9340f3dcb35de44666e4508d1584c330be29f4f0a33abf25ac6d0c66e1e6353c1b74a6f1ff6988d0d95d47536564500dce087cce3d174df5212c32ec702d1239a6ccdb13ae6accacacaa228777106a3cd16732bce5a2b7e4f6514675d40cc1d5d4c56b72c591bc1124e826b259e06a187f7520ed6b0b4c85a50b249debd2ab20a63fd7042afc3eb029f89be818c18d72ba7562c1f3688d613f1988e95df7e1aaeb422763edbef8157c9f1d724e892ee4e061ba16e245cbd35cc116fb41af851f167fb3aca1fabf65485369526a4141caf1cc01b9f7ed31f79d3fc8d2c6660fa0dab697e9fc69cb6937e13738dbbb9c6d0702cd91db7e76d278c65b70b4faadd6a1c6fd830832aeaeaa739417d3ae30c4d6e90225703eedc5abfb941b82e62a2156d8a89cf97e455aee406bab3485650f8af518964973ece5819eb7c824b75806ae3f87f58e3dd8b9f7aafba1ea39d938a05173053265772d0509fe76e9923a64d5d283572b964f402155bdd0ee287a517dfb1feb5858b281c7aef641b28cc03fa2e4c99772fafd4426b0a1695b662166afa1f309b3e73fb106c24e2b26e1a4e80710ae6367d3dc5e0c787d55245089e87b6bc9a05df9a42c7ecd8d8b481d6f31c9bd4d2f786036dd1b92d5a29bdd627a988250e98729b2b631d1567ee71bd789564292a874bf69c1add7397167b142706bc3fb73611393f4b1210b970b1cb9bf93d3a43fd51da73b7ccc20a46d575614e539ab82aa913ac02e1248fbb25eb5c58a7b99aabcc3dcd351bfc759d893f3210e8363822b45c1920cfa7b99e4529630eaa798915616b36aab227e97b4a8d6ceda348f7ea3072930d931b7ce9c47c47bc33d57c0daa069f524fc19a016f6cc04d258ee7ddaaef3487967059fef7dd1ca315ace09f6e63e16850718098066176a3f225b3c35b04b729fa6adc2e824310300606ccdac8ea3efc9b5f3b5d9f7062d2f48645318476a7ffd5793b9534950cb50a28d77941bda3155eabac75c96fffc1ee0d1ce69b0f0e85ed3a3d590a86c2e017814b8505b3eea59b56a3911e8fad2a301816f9a96356da8f9a6b41a1bb143636870d5eb0b3191811f623e2e675c123525ff7d92a4754cb6e921cec13a10f10ab9c8a301f0cde804fa74badc6ea6143705de2e07bdfcd26b73f10da3eaeab95734486187e673dc7c54f43f1d488826525544f0c826a52f3d44b07056daf77f4d138172a68e9624fe97a30eb256c21c2d0e42bbfa48586c838b6e2baeaf5eff106611cb5a49326653f4d11655fbb7e946ef39312fd19c3abcf55a7e8b302cb79020835ba33a007a87b3fa80864a0b4ff0c9182ccbc54199855c98aa7d1e6515598410838f3b51c06b58194c92d9cac12d2a77e9c698c284287fa80c3f2b7d16eeed5dcb4ad1b9fa85ebdc45986483e1de19d40ea61f11bb0dbfb01556348838e6db1c14b693c987e0adc0154e94bdb9a378614c66dd892fc4bdd2902d8f04c09f7079f35807eb4d75c1040df373375d742ca543a07055fa48407223609fa2c074f2f68d6aab73d4d9f02e1cf431265fe2b94e29d5b0e5824e01433213942fa352c0df93cfe1b9f70534d4417fd8a1a2f3695b49c24cbadb6d089648d5fe57e2d7984a66ed8469bc9733c5e20c419ae9972f23a1b57da19a5612e48d1d01a21f77c2248512870b70af8db5861e14acfe986b54f7c46b46fdbc1e22a7f682d0b312fedde5226fbb98d803307fc584d9d45a5d4495f4e87555fb73e5c546cc16ed156d2b091e8c6a14a435917b48930d97aa57ad28c4067d392984fdce143c28cc8895a43bcc79ea11712d71015a4f755233cd50ced845f6fcb43c8a6488ebd0104837006dca06a93101ab360a89b040f3d335f01a6a2c0ea1915b10551884dd0c5162803b460d599d417c97b521d045b252f252e3e6768c19c49674636f208292654237567d642b7d7632e1df60c978278e0b97368f73982a5ed0c9f8b3d723a3255aadde622e01ed70221f22296ee44ce6d7b991c01fc5242d6f4df0218ec319c22eb17393aadb7c0a3b343c073931fef76c848aea93ef87d2b60703cfa93a76d6434ac1a7028367d46e67107dc7080c27f08d1a4f0c39084abff2bbc6abd898ed82cb12ad496f891c1333b00ac963a2b4034e2bdb0aac59f0081e4726509ee6f60adec22d5a22d4a1dc2a19f224f4ad3c8a6504a8f34ede0848ea34de8a30b42e1f1dd0b933b221062208a43b849009052638fe756b770433a168e6f3896e097a1078ffd274dbc40f1d4681ee5bc896b0bc5240ca88521bcb853bd680425ba00501f5e60269f91a440db5a9a13f01f3de372a015eb11870d234bfdefe3e11e4543aaa5ea995a9e7206c16fcc215de9a9487e892a1d1ea32c0f4ff4703668f1142f7473785401f87acf00f46eec800e6c71655ae37195ef176a6d884621b4782339084736b01a8953b83f7597c587a5ad0963705c0e44e75c8983136f8b882ea3a803408f97468ef2c7132774786eee31e235f8d545890e13386c77603c3ac47cf8b03a51fdee6aa24574567031963eac137802998437d147b4d26d73b551f751630b835a8f6b7b78fe20a20c3594273f4f02dadfce02f22093e5e5c0e2c17830109817c0c5a0142926861d2fa354d8edb697140309fa1df5941908145b9fdd10f9bc998fff852f2c095d6c7de8dc390ca85cf0be50727f209d9469471299fa7b87854d3a2980d53c02c0d2e98d3a73143fdbf347b7345b8c5d33ec26abfee621151f546ad912d3874ea6ef5febd4bc28ba85add3e498a267c1f5614957925e57ac0253fff8f0211245283934165f9251c7315eb885c5cc947e76e7cab2e233cb0221488033693a9536f96f1c9f57aa5e24770bc6cab1705aaa78be208da66b812f760bcb254b3c4e2907ed072c3bdc019418e32c659d27a1389a84c09b090964a4738167b72b8266b2c7fdeb9eefcfa679596050575989184f8d31ba9d062a6cd9c3e64dd10dd4734571441364deb46995a9a8e9ea4442ebdf13c28e9ca6e30c5d30759f02a03cdaee15257ff99179061a809dd2cca2d2949ed6a6bdf9504a77be0d3759cc52ea82b1e3fee6131f84c3d1fd794a14d9f2652329c44192dd5121147fb80281cac4c3425dee5219a60af1f7cb49ac7bef27730f609185a2593076c487c7818e09e25ffa176fb58463a06ca1e8f49adad366e90c809012a48b1147d90ea316d285628142a446e7bd4686676b5ec3b84ea918f1afc593905d24d90eaa280c503c22d37283a455f30d0ec6720503a29c52c5f83258092cfa724213470f6eac2f7db96f471e2510c6658d6a50724e116a690f504da3f1f1c6e7a1bc5e0d1ab5d50851238d4991b2ceea0d4a750fe8339624e34114a63bf6854d853683fea84c321827e49e5b965bd494c20b64934817b6799d67c44e76897dd31ca686f711ea34164ee4150bf0f27871fa8609a784b4de562f75a5fbd064664485b2588042fbdd551766944b90080554841909c5068197cced7bf55f045367e4fbab28d5f1ed67d6b986b51b1705735f9cd63f3489346e14563a0ed640123c9235e0494c16ad0e14d8ff01e647fc0eeac041e353382a69e9efefdae170495905cb7b39d32be5883c54c07330b4df4e4293d9f1de7b98453c368d38e50243e91af048f38578207bbb64cc5039011bad14d800c9f52f1d4b5c90e826f9658038cfa09ce1f172ad83991994088d90e9261e067d02a2153470dccdba14ed6307ff229d7e849981ab4c8130cc79fa51e5678e6b89bcf0a1a6bb874734d66058e37c74c33b3f3321d65433132eef62bf99a40b075620a311b4c084bb22497435f177274f6b48c037a418a1c2787d631fde98e85bfa7e6be26fd351bcbe9d0a7446f3fa18c2cadcf4553f88ccb10cfe7b16cb3c80f1ffebe3a4d62699c434ff879fcd25208e1388c0bc0c952e871a195e10064ce450aca37dfb51b842047d9f938cc9d977efe2217957c9cf4a6e6045dafbfa242e02de1a623d532b4d9e5bb8ca063c64e42826c5b0b99817aeafbd7d9d4e8462db9d6b60536f440f87ccae20a53b66c048a69eb3794912c9877fd89141b824264a470a70012c60494168b05fc1c7595aba90b0aac002b69e6c6369644219165d0f0c4bbd062a6fff126318ef33cb397484ffeb83be11768a8c461c359dde6a64bf306c1da8f2483ad38a4e5ea59e4c695e0154939fd5925bb3443254bac9b0ed43cc6d197b779218f4a42148a7c6a88046ee7a59963d87754a8fc15b59690e6f021bd3ed69ff78a3cec3850665f019353453313195c2f8ee6b1c535ebf89c1ff6aab9e2725ac517c4ed290ad2800e8a72fb6db1b4ac0786d3ec0c7c2d3ebddd8510e008037ab1c1b33a7102a5620ad8b9f9845fae7a3eafcbabcb4bbe008a243c6f756b28ecd1559206c57124dbe108c318ac37f3b045cca0af90651593163fbb19ff0029a6e739d71d8b093e0be0a4e4c2b346552f07d06b1bc37e567b2a40683a36b4b25304adff75e82ea49fd3c5a54fed839b157f3722f62be2c228a73ab387076e80546c33686adabfd4ea9760a1d02cfedbe5475700a68c5b8d1b65893f18cd65bcfcba62cbddd25e9828cdab34dfb02b0b06b2a6ef526b0030bc4b8fe77bcd24e11549932c968c38516faca33d356077a0b7839fc172a433d9d685d78690e6c7f5ee08689d5394a0061b1058e825237bc210ded803c0377ed148c23b9a7b6334df157e175774ea1f85982ba91e6c488afdc433c76c820256af8e0340e5bf046038ddefe7ca3b83c3a4f7811a8f306b3eb332fa54ad0bd6da87f6cc34efc0381011be062abf83fc5c679d8a96c4f5b00d49df8ac3d5596da5cec5b22c1189fa5f7361876bf030f1759ceb4ebc944452694e6c112c10e35fe0cce6af6d10472c54a52237a9a4b45602014db77e3870140ff0a330248e9cffe5a16275b1cb387da73db60d4486c998da08c4dfbef6ccdbe3d7bff9ce7625ee98f77082fa2c02278f6a371508d2b5c064f35ae656584c5879482eb7a005d6a9a33986b018319c83f38aea8d7f66f68093bd450ea378fc0965cd80fab6fbb22dff606c3be81238a6dbd56b0cd6ab71663efee0a0700c3dc4cf94b55e1dcc68dab5ad961c72f2c5f3bfc35dfcd07e077f75c0d875c42400c7671e640ece9bf784899d01e4f6c1f0e96eafce0409368b430d669f4b9faf0a53933051aa49f7154dbb2b729017a6f2256b0ff454778abbbc1bf34fdc8f4a959219cdf1e2b640f363515d5e22de243a5984d25aeda73a251007e00267606c028df9f14b80febe4075f428190f00bffe50c452603e573f84cb1fcdb6057fff3d75e3c3c03cfa9bb3b7ad01c6bc5757151e8ebdad355d679eddebdb35318bcbbfeb791d530e10392a4b4c660326f8b63b7ece5183f56b431f758f2b4e1232049c0060ea1a3fd513f158d43f25d803196f4ec36d733c37a7662c66ac47b4636178ac5ca60c97bade2f7f837234eb15fdf5e2cbb53d589196155998ad112c37561de5a573b228dbb4a800e4233883dcfef78841dddfe37ea7ceec39352eb65d152c5ee5b678de8bd801b692789293f625a96123166d53b828dffd50760e5b153873d0ff457343e733a4f3f9bd41a35819017d7eebd67118e8039e20e015f29068bccd6458afcaa4e453fc8937926ce83e71041f6a0e2ed4f6084846c2f766b6f321fb8a7d120b2b117429d1ae0252f7e7bc70522c01ffb123eeca7c4c135dcb35bc8d4fdf58a372e9bb70a564623330d700de45263cd81e18b9cd7716043fcb3e29ebaed7b91ae382da0f8b0f4e325239c51c9b00290c830c59e757963126c13693813eab6b60fdb5684a7dbfbff12649cc746312a88cbbb41bafecf54c86cf3a433e3ff254c6ff998400c93fc10856c8585ad1f765ef6c359f89182b33233e11f63782e443dbb2a76951c9eb15b720cc54484e131ad1168b6b71c6de9b12e64914c50ae73b808181637f2d771f6841521737021c7499f71eab1969954e9294a1f7aa9011b7d9e2a75ec066bb7a2ad1cb0bde22669c64ed54604c992c4c0f5153ca93e6f3f75328eab5bcad9ae8671c53645545a8b662039ad3fb753b5fec63cf9aafe432ab15ece65a0ee8cadc71b3b49e7fa612f40b4268cf0c998438889c278187224d9f1884791996acd3c48652a04c2fb0a8310ff1112b1471d9585d113a738b0c9eba671e13a5a08262d9a215d068d816825eb5f3ff99336b7f06ed7f4f8e3c8245327dd397d5f02d79c5dd2e6b7eb8a9aacaa14bc3de559ce68ddd0e67ea1cf763d1b69b12710c1e2f0985d1d40cf8ccfef1fa4da0a45790933749f64e38a9fea7ef35292a4a641c08708034311d0f9fe0166dfd693a28a3f6e753ce2f1c99189bef1e5288d593cd72462924cad47ded01d483d9f0779c02e4fc8d7c2dd4065841d883a088c624081c58a19c27258cdcf79766316268a1a10e2b22a041b957ca4a2a67cc739c3c7c84b78b61830adc7d4167e040831b508cd6a459a666aa0f84a43fe1df54edacb4877bacd6269a6aa42941f412a86147d612192b6a806f27852d5605f455b7eb92a654f5434b222b7c50d2c5cee5f20cc8d2e89557d9ee53215c3fc1d7eb9346f05c98d1a128d530a4b63dbb4792bf074fae1bce65828cb5ea24953b6323ef5d19c759ed3fc5f55017b31d806219e47291bdb0ad3b61185e261e710cf8a57551f965332e6e292deea325ff0618dceef2d14d1b1c0bfa1e86e943111c963b47a36a7732d19d338d164cb0aef1e0160884e4f1b9f7d226a47acf065f2d2d9d655643fd0ca83c1663071bd8e76accec019feda3d446166b86c0293c429ec4b8ceb29b36bf54cc2d934b2b67499b1fae67f2f2ca509651828cd3162bce1fbe5cfbd012d6a1dfd906962f80bb816c61db12589753a335fd0f3f34419d4321ebe608f5a0338b6b081c1c510fee63cb485a26230ba50ee6b09eecd3afb7d80cb7a9428ab060f47edc1f8076119ff64189c1c8372f926ea6204e58eba8aea91560b3daa3af86f9d63a73baf7bc75f44e1045b9aab82713837c93adce850dad7a1d67dfe4a9c9bfa544bc19f017e8a09504579ccd30cc3a8bfbbb5d994a76fb52b06227cb236a6cc074af17a34296eee12e40f26cb719878fb854168cafd2bd8eba55ab2ad8bb5c3a15d8605be457526feb5332f0a98f09bddff8bd4a870ebf0da846070b196161df14329042f0b19203061ea34ab469bfee35c2a12d5a37e9be9fa44a49c755e96e3605cb7588aa3a94e4e56abf59a1f88d0773def79f00ee32ebc4e9b94c1702ac18786c0bbd1a76a23dfc5bbf1df83050276bcadacefb75b70bb3783cfd80bff3d9225470d7df07dde35581082daf2918885a7e2f65a83bf79cffa50700db87f1e9c1d1aed0a25f093e282b65ce87034560923dbcfc5f471417f1bb3a184aa8fd0e753320a0f8cc3a680de375f5c1dc7d4eba6ace730155d51e6b1d8bab488a4eb8860eb6d0c37be1762926f495ab9b3100ece7f7c15a1451d5bd7b1c102d6969d6cd5acd05feb49a0154ad11d248b7c9d951a011f495172ef6aa0f3b9a873c1d87608a0e615d6f0c98c506279ab2cbc4b032436fd795e232c32b2a68ab6e307caee8125c8c3d58dc4eddda0c461ed3fc1335b7cd21810a539ac060a9111bd8d5142c1cab96d6324788a9a944280756935786c34672ad0915c3de84b049823ed9e11c4f78eedf84290cb435028efa252805216b8e7b31ea88914cc4a43b96ba3635201c97301eae216200aee82df9644665064668ab56345bcda0651e7c46a113de13a8da0aa8b4f8263077f371f850622bfa133ede3b0790b0da683976b022c885fa388759b6fec1f17c894fe5fe49eb8540545dbe3a9cf99fcebb298494e040b2c848480d48332e205732acd983e4004d154bdc07100b144beec6099685a7d1834fd57172e6b36aaa165e69d0f458ecace67abaff72725360f5fef9d1c1ab1c58fffa87a209206f5c0353966a46e0aaa36041cb3397f32a6dc7a36420861b99029a7397148000864792c710ada9926c30936c66ce7688cdea964830c30757eb43768a4978ec8f55cf51368dc4873dc146d348a6845bdf64defeb69f00c203777bd215a6553061bfff0e05185ab40f7d43be44c0e8cac4881005444912a205d6177e7a9ae707691c690ca2014b089325a291ff87015723be79ff3265919d171bf7e785e532102eac5a71da26425f4995a1d561f581123a0454a551584c96c9012eb715fd6cfdd95c7ce37e3172a87d0f606d2fb7e3f67334abd5163d30049daf86b60b2e020b7f86f1257315dab7e37ef78bcfbd78204d009313964852ae1e12c9704469a19316c20960bc00093a14e46907840e3a10fbcc12f23e057b34231bef38a4bfa45f891054b670cf9e316aa9ab44003ea4545695a2d6723851f944028fff20ba7423940a1485d05e733e960d477b404ce7393208048ce82004b4df46995cb7d5ba733062e66b2a671ce749e186f2c90a46e116ad998f850f7e1fdc2edec9a8aed8e20dd79092956944261c0353f1c325b7950f66a19e62cfabec4a689543b389ca3d9669aff84e84e3742d5846387e6235384e1e414c752aa2412f4696ed58914d3b07c61d25079a8f70d2cbd874ce2ed9b49238ab54612243eaec591504bb25b0b1f1f9d8644236bc88f6ff02c2d2e711ad19d9c623aa59e8359f25974b64559f38f219c7e16cc86ce3d741686ee1257de2272e3b7fb99821efa2158c6fec40ddab5669f34f536cab393f724e30a75b07d45d2b5f8b2c9b480490fe46b4ed006e1eecc575cd7d16c5ceb599c65947f7f207ff9018cdccb6bc25e97e40a18b0d379e109836ccda5066754ef08ff817069d1527a1609a141a2f542ca389a1bf3aec6f94357d2647f1e5842ca379ace1d4f939b0065e128440fb535c3fcc4dcb75c77b1ce0a59a8fc253accdb2c4b2021508be4d1900ddbd74e9339b1ee66c4d145d6ca1b253e2b18691fdb55ef9d825fcb09e4f41da86dacc781d2f367667a7eebff5051308087dec0309486720c7b0a06c29956e56252e351c2719be109b376ef3565a415839c6caad0ce36fa4cb8c69dcfb44ce2c6dd57431b1d37473fa402ab6da03ffea49e2b8873b001855334ff23cda24fa114e6fccac46252c071db10104f354c8f1487b14094a0902964412a4e3fde43dc45fab6cdae4b42b1888adb7ab40c8ea91a285bf058a19fa6b8238ebf7868731dba8471c9dd5fe362f117158f839ff2f026874ff8edde71e1b68a21d1e156eeeddb868f6d3acaed590e5d2abda7e7607b42a852dfce5a55aafd38b85e9210dc05068ad01ef6cb6c20285074eaf5936bf2a73bbe2b522ee321417510652c72fb8b986cbd74b2a36dbdd659f4155c0a930a55a54f465344196596f54f2a37ad869921263973f17a23989df8bc6c8f0fadeba3d01961460778a68103bac2983e1539459f999ad83ec2cede2dae13cbbfdf53cba507a5d04511a8af2d7b987e293b2cf4178c56107bd1f3074bf543e235d8a7f4530f07393cdca196a26d748b5713f053bb63c7049ed5c9c1c12677be8d284012eb75fa15f4ec07e486e405dba7b16c160fb2cf54adff8c706e52ddd5c6d5fe8fb309f4f619b1c02d8c7d0240432f8e1624a5bb4b007777f12a06db70b19713f076c04d0af4e7224fb4649b6d65e837a534cd2a5b1cbc3086e2694fea9d48f1020c322d0cf3b866c267fb537d3a31c4f601b44d3042c6660be252299a703db5ab1ee68a122e876ab7c3f34b4565ce3d9fcbecbce8940a6b27d2cbc1d3dda4110495e72934332c67ef443d2aec4ab312b9839253272113bfd81cf1563fecf85f4426475274e45ff8b2f97c9b2ec46daf52bf1ee0731331868fcff3e2d25154d0f619971015195e8f0218c34d17504c40e0c1453b2d302514c7ccd832c52d6a0809b2b3c242e1ea40fd55ed6c475761513e01a04956e8d48126f44cdcca66903fc2c051f267abca0b58d5e1d73b80a198683b62e0d95024d9d20503eb3f9201394a95c5849f56d07e549d5d1c81e882617be30a394cace5884b00d42b8273f07829e2f711c726891f1246d82b37ab98530c614b813e9419a7f471f688d7e803ceb3cc2cfbeafc6757bd06ffd849a477ae8b0e1ceda75c409c55e93944cc18a3dc8c62ed01ea2ee1f752e764fa9a2f9b5a21d99b1ad6d6e4731d088b6d58e03d34d7f7fe08ef62a4ea836cf0ab2c5d6fa90f6b36bdf05e716d7050c21f5660a51b8e8fe40622f6abf21e894d282e5c630a8f949368c8f53c6ca9d2ef0155b120b175b1061246d04681de1034839668b0d1d8b715d26c74deee8ca37416b31c379e2b8ed8cd7629998a954f845c78749200f419daf53c1e4668a4867a873f744538987dd955362255a879744b0a5aca069a7858669c0778dd02b7644e14cd5d8c70781029833a07c7da059cf5721ccad75cff988ea4f3755729e64f88ff95d8c613e88b0900cf45ba7c833a1018ba2063e388621b45cd78deba0a87d27589f95315107400437786cde152dbcb17b2eac630744e8f5c18696ec02ed41a3a35b386298999b1ec790a08c5e53869926933130d8043346daec807cb71f5504c8de1a61ccdc3b8c2f5569cf35361c431d7fee16a6f04ff530309e80d5bb5c449898c95a9306a03244e8798ccba0d7aacef2bf7db88f95b94c2f3d718922655683bf194b263b3bbceca2800469f8e58eb80ddfa1bc6599bfaa106d830a46dcf377cccc6591028d49a6c791a2c98086f56f794be3f10b908a5b3f87f6ed44c2ba020212541f8c317572b13b385d4437e7e2905211826a759a936ddface8160f5ac657b2010a467c95a67537a1e1ba253d50ba926e585cdc28805aa288fb91ad6c654cb467b23d7e0c68721934576bd98700e65c7cb1e08e86b3dde421504ac0a683619304cfc49a150b0df1d4a70eff26c32f8c173f2a57515879495b35f84a9789d0ede692112ff18e9ddc1e35c5a4d38c38cf27a111529236e73e263419e02171fda16a42c2cac15d0de4a58bd1cb2cda9fa712a77e04b2833ae08eca1e4b364dfac2aece671a58a55569692146ee22070fd8693b0bae0f306cb4209f2c27d6ff6b8c674df4a3aa51cce8e482ba50fdd5cf0b6a6d89ac2e5b6e856558cb87e9c36cf15867b35db31c693efcfb6fd995461cad5d06b7de8594d04bd1e7b37bd0c427ab01da029e1f739782cf909973ca211442c527ca1a41bffc9eb129508b9ce3a450f20dd6893f1ded7fa3054c24f81cf3ac51203cee8dcdaf362112a78071050776a39d9533959765dc9b1e854d397179fb82b28fbc15194a4d65fad43139bd66676c057837cdb6c3191014228d04e19a6a10b98f9a59d5a88a9deda9fd49886db94435c3659b600e5932c12d258a2bf9a2eef5ed70e2c8fc7566fb77cd490f374339654d01d9a0a5f5e04498faad4bc080a12ea14b9e227ea1b28f50939a1b7ece5c06e8ca098aac94a65ab63b9a71aed11701cbb6fe5d6a96a9664bd563a6556099d85089e82a206fc534c76193a2eb19b2f0867570b52b7bb19c1ff9259e723d307a8e2adddb78ccc9a1ce79d70bfabd928563b201bed913f1a79cec551b8459da0bc64f42a8aba2e6b43103cce9cb26dea0b440fc1b3fc2205b6e8bce7ce226e024bd37ac28ad00e578ab86a2f6215f57c9cb812adad01ce592e7e2d87ef86c1677684fa785eed2bce38385aa9f93df8ac888742257070d39d91a73430b0bbe75b65e8723d614878dcba885ae2dd6f0e5ce66601822cc21db295afdb54fd055262a38a36aabf38e2ab2924d092ec3e85d3206eb1f308479889ae90de95a18ebd68c2e9668a692e46c08cec890de6f0674dd54028a6e2e88fa1f66f4842946f18f6120226f48eb32e880f98928fd5339347986b0db0ad4422676dbe369e1217402080db7b818f30a706cd724eaabda8383095aff149d128e61fc6cbcaeed7e958689362c4540952d882ec5a19412a206ee33e33876808f1d6ccd870551a023ef8012278535a634b5cc4b35a281a9a758af7c794eccb289226d25b48716dd591d3fc54a0039cab4219077976321b2ea3e3eaeb14a9da5173dce8268fc50237c3e2950d655cae356810143d6b6faac0ab3dee9209d93a29b13a25abf375fa655e103214292661df3d12ec9c1443d28df740dfdbe500ee395e1bbb880ac2671cd95ebd0a1abfb83c5c1b76f889e22eac9233db574ca37549ec7e90c456847d686e278738823c85dad7c386216ea6ec3c8098cca3b3c02d49a87322f826d9d3855ebe017e9918ef4ec2f343da25187381897d6cfad5393cb07cb0e0ba9fa31e56d62134d595546132ce772d6bc0617abc297b89613d12eec7902fbd4d3e7981fef3036246a32f735529290868c2d0a2aac02ea11194dbed0fddfaeae57443f277aec9ef470a53ee8a6aee3eec0fd13dd3fe0b595eebdb6ea817f317227252e224123236f893fcd87f5d18f89854fb2f274bf81f5a9d58172e540bc10cc0c188ee58c241b966e5cf0d715cf2d6b6999d6f01a4a7403e8524eb5509ad99a577cdeb415f0c02039cb2db10cf7fb1b5f2e1329fc891d5dbab5c743c40dd588187ea3ef08e32c0d9af3df7633b09cd45333f19a77ba3b52f5c88398c972fa01629f4e7c5f8c459573e30b177e3ddd6b2b0eb9047b4335e60de93a1359e2945180dc9125774f1954aaae89627e4c70142b4788a8e4df0cfd3c75d65f884f5104994f4d6fa42a8645ccf72a3823eae4bb927153bff87813cee4802d379c3a980e837328c83eb423febc3251c595205947ea5b3bd0fe479d4b72e4ea47567981b2589d6f5d5f0fb632f3b9236a3bfa75a1c025a7f13bb0aa266ea36efbf38eed48982bcde0b1cf63764458bd8c9bf632c324a4a4c77f1ea20ad83b5d6880573c8e7a36c3175e1227ebaff28f351538b1ea300760fc0f6df6140f6120ff4c1bb1733fba935092fc303fb620623f90729bb6310e501e97a1d4fc1e28bceaedde27981b16b8d4ce94b1b59b95e0a72a15ac827c25c23791fa37f096d0ce5802999e4a2754e8ebdc2bc49bd24bc4e45735b85befb9020648a8f19191c2c4749740212c584be113427dacda73c5873f34727fca452a1306de15dc69f2ea61ffce471b150b0c69996e7d61cd0009f7e32b28d06f2036aa8b421e0b3d8fc9dc4f017c253a42d8c6c4c681599a44b67ad045de13d750eb48c7fdf190b25ba50d3fabdf1d053847fd582649b3ce98e7d086e2cf594d57cb6cc9cfa8b2a22326ac32678633bfbf0863a3f50933332be86345de97f53bdadf3b46f8e8517c187d11c38e36b6f4370870809a30eae7790b8bff7b1c838adf817cb464de55cc6497ae23dec906894ba410ac71995ea9ca46e181aee1fb9918f5a66845ae115307ede51d7c187b2fbce246e09c8bd6bfeee24abbae2573890780fe4843cfe3a33a97a131079273df15d510776323b962810e53b862498485d0cf577920b15b49b436bc1534072ba4422b975ebc485a45f77176091f8dff40e51f7c8920d36fcbfaa5bf336d0076f3e55a985d43ca5929e7fa13f1af16cee4e1637fbb72329b1bc085714ce2c7309c8e1c8bb08d8a192a3ced06dd64b500fede4e4f9cbccbf74138398635e78a40befbe4c5c0f4bcadd2e395369f9ccf85708ac8e1ff6c25c07877bc864ba5e024291e5e09d0e8a408b20006305a90a8ee93c55faabb52e29e84c7a6e407ec84e254b31be8503df7be5ccb18925383508e1925de6c7220e0cbcdf07759d1bd5bf5d7153d1492080365164bb26874f4434abf784fd7a4e8d89af1240e8486fcfbf600193073b7358a35708cd36fcbf2811e7cc82ea6fd882f23a7e3b0a1d2e8bf27537bdfd72613a411b62913e8028ccfe6f85485c448f1871ce0a92c76259217100b31ba6fdc46ece8f32efac0ff9f8c984de521408139510cadd5a0669264e8649d25ccb04a14a03a7b0af1836f967b3e70f3c9c841021469d52461ac75fd5a109ae787e204e30f58242832f49277d9963f99b495b052170092385baea6021c9c33f7c9b0cf30371da4b1742118e1befc9227068dc3d8033edbd184781676e94e0d9709458eca0ca9ace1c1b09c80daee94eef2a46b4a95820a3c7980f335eacd3cce8af61086616178327e4e4f65674bf23ddbd31a4235d24c98fc72ff48c010a1d613c5c40cc61940e246338e0ad92b113063b4047fa69cc3fa15f83f4ad0d9dba3bca186342cc2030a1edc61644fbc23630726d0fb073a2d6057637a807a3a140cb1de5227af491657b4e31129bda6c3531b5acac94dfc8de9b6cb9a59432a5c10358039a03b5535c9a69ae5385fdcc79dbf4a675c71d50fd83f9dbcfdf421266b661ed1f5a2343bbb34f2d8c2c70814b55f0b1c1f0ad9e0b5d0fae681ed882aee019715e0b3ae4dd11857cc71af9de7b5d521df8d4c202e0c75ab9cbb1cca2d016867637a554d27a7803016e2a730f4265ee5d4a6432170019c7b1e1e1881b58d8c859e3828c9b31c39328a52836d8fc90712da9a9274de3931fdc14f798fb5a3c5c03f9d0531399fb70cbf5068b42421b107140df1c31457173040d320711606454ca4d0d708a6469e1868ce24f0a77163947724de1161a9b58209c942339e74866ce8d8b8dab0d112c8412640b44f614be6cd922450707134de63880cc1943d5c30d4a473592822883b0a103ea869ba3a5352a08c1656c6a018806d610b9d658d79a366186c8cc8f193368a2d25c57992abb424244b43059fca1359e2e1b9a0af7ea9077acdcfb2ba5d64fac853ff0c97c342679cb46f8e0e3cb521b1e48a11d4e47722822873159d69ce1683bf24eee920684a6f442938fefe1c3a32e323da468491c0b4a78acf952829b109ce1800b42a42c25a14364ea0c87739747da1c99434b3525ed8e8808b4b4d181090e1d211cc8224786952b46c8109306ea1ab992c59f2713b43b2f8bdf077eb875848a912d3f08e1ef5e34f9def2c80ef95e22d71947ea5c64b0d84d452c948c38c95eeed28852167f64f82aa55f0d5b5de6ac5e2bd4f7a3cb225325912a0bb22d8df0b0f63922d716472a91bb3492946beed20812e9c281c8a92452a49cc1495449648a078a1928737838210b057ad072c080a44a132f2e2d18e42e8968c95bee920816eebdc5cc6595d522c97ff59e6f61057a26b085f669b86c7b7f231bce4e7099fd2e4c92c100d9f6345c667ff514e6326f7adb59775c56612d6020c0285091ab06bc095120ee673523a7f5e9cf6a46abafdf85334c81b8a7359c35cdf9757bdb5354ea7ef5f0c7e87ee73d588c9a51b7f3319a02fd84755fdfa8fbd9fcee57a111eb6938f39f21c614e83ecfef78b39a1105279e823ff1f86735a3097ebefbf3bc913f0fcffbaf4223f077c2d9ce83610b0a743d9c51f027420ac2591105baefe1fd19ce9e02dd9f206cea9e7ae1acd63381fadd1bd5efbcafbf0a8de8b3ae875e381ba1ebc259cda8fb19ce1c29749f3f9b21cd6a46debbf7b3ef490895786a32f345476af554beff7370cb4c7ccbfc45cf515bc603abbf33abb53011ce5cc6f3f84bc06278df3d09588c9a9117fa100a74bffb18437e0e0e79425f4281eefdaf83c318b31a055a26ebc218f6fbd6ae651fac651eac65f35d0624197264af67cf1d9afda2f9157099fda2296be239a2f33ea1f3843f5d3d0d32c0af5a6badb1fa52c2ada982ba07e139279257e700b6ed2f0d53ec3a3c01600fdcbaa83010fd1e0f394c81ec833fe79c73cef9da817dd8fcdd86731cec85677ff79056bf6852a7319c54bb5f3fa936a9d77b6fbdf6efbdf56e75b2678fa7fb5f33b0f8e5d97ee7ed70d210039c54db9e52cf397a450fd5df7e959bd5827ed1b451dee53cc57d0beb3cc5fd570d2c7ef9de7befe52ec07705cf4e9fb835875a56e7576b05b30d7baaade18bb7efa26d6f6900b09de1070021ec7138ebaca10fa6ef01b7598e7b3c63dc6fdc5b8e032d85bdf0bc6d9bb51505bebf3da7c20b5b14acb5f6a584adb5d6da8d4e17b628781d78eee9b9ab6bb9ce3e06b9170bb8054ed80bb796e3bcd0029c54eb9ef54935fadef7dfb1b6efb057bb55d863b95be7a4f22aa0dfdb66db4547a453880e6678e0090a7e26e070b78cb8199ad0c02b81bb7a2470526d820b18c23e438c5d011e0feeea6d75ab22b8fd6bc474db6aad21add21bee60fb2678f49bb1971216bf0fb74017ebe778ae2afce10e3c7b1dee6afd9b311184bd58b0f64187bd704a43da3657e10a27d5b8ef3ea9e6bffa2724242424198759d44e361e87936aed5d9c54f3b0ce18576b15f6c3b8956d0ec1fee7291c46ab8ead56ac1986e709c5db2ceeefcdbb3702f46fdd581fd0bfd77beef4f0ba2f09231b627297b538d9f30b470c0c9a2ab619b9030bc0fe5d7393fd68ba4fa9d3438a936a56c6cbbe7900fab4be68785ee932edc4ef3a28d3ee0ce88b061683e807d5b79da79d216d6b9251643aaccb1a8d2d9cb8a989d78167c7f46b131c65d1b387479b65757034fdce2a5e1f4d9e3b619eef66591fc4c8f62b9d50f52dcd1edeede70718c8f5294c0c614e2777e98dc9e39e3b74e155f9ed07b383a35cb337bde70ead3f591fe423ebeec5a35f05f157a7bd8de7f754fa2075c9f932b53413e604cfdc652d2a486d87dc652d4b161950db31313863b3c23a7759a391e7d482bb33a00f76930c1fb99b6414e9b1a10bcff45f78a6fff30b65b960e991e5b6bfd66e6f1f7004ae33029e6272ae23becf7219d010532836778924c9c47428a9566d9dd543579d77d529a14422247749e6c8a24f9eaf41ee7224337b084c5f6cc14860d13a25405b34025e455b53c5fc40a60ea874aaa0f9cff0a90e22b0d8caefcd99e73f6022cd49ede609e87e0b8bc01e04abd1865fa0c20b4b6ea6da04f14629ca92a5274c5152a312256b94fc05701c9d46cbf9c1077289ec370a6022077014444749821b35889036c8361498aa80a103840e122e4b4b8628319619e23900a1210b09a543153994010623156fc2b98872634995963046b4916d170471810c1ba8303f24916d35271e1a9d127c21bf31cd106e5ca98b70254d021f811173483a64005c203918e1900788c1460a4621a40e928905b60b4962c4a3dfd0a5c7c142761c200f42c5a885244107719524993402b8983964d01895c24b9b3131b61a1ec83a1e41bbc15a6badb5f64ba26485fb7515b6ac45b244275b12321b36ade244f416197cc86c9b4f19926a3682ff56470d163910dba972801413f3f495058b419cc709270fac5d89f5ad7fd22bbe9fcf02040fd02112399a8b35894992a7f84479870567c36abb2179637d2d13b0123ef092eccfe34d2f2d58c499849b43a8cfb9e0a9aaaa7a3961114fa470e3fea5036641c09b58b060abb0e964b19db86cdf3555c0b8d986757247dfe476785050d931359a434693051d62713d70550442afa0432c0f74c5b6064180757336712e03edfdd774845e31eb0cfc7b0714ff7af1b31005f2efecfb7cbff7c1b6e7e1f97befbd970776b7175964d6174da29e43ae2f81857af67c4f1515fc66628213df74287c70e7ef0e48a705a1f8932b0861305853a0132d980bd614a88407e52d1479de03b3102bf43e98978119f37f980f0ca440fe1c0a5853a017aca90de0dd6e4b35548b0fdc230be645f2e274534a29a594eba668f017f58aeafd245271278bcc1171e1f50fa140a0401ef5c2826f9eca75e9e9c5057f94fe6b0b167b8a22e5e9db76e79c73ce7b433ad9fd5dea7503165d2afb8cdc2ff29c0ae3b9bbbbbb5f77777777f7eb21f7d1d2f3aab51d95adbb75bb6dee5b3fd9fa93849bfb65548be779e1d408b5bb5baa61dddd4eb59f726d01e366fa93d22564f2fc6e293165de404b79de5b98d852d98a4d9503ee7e7e5179f585d6762dfac36b1188b810ea534a29dd005173f363abef7ea7823f414294bb421fac7ade8340616217ae56e1cf8cdddf81dda019bb4f946fb86db019522f2458179ef711e5ae135a796f3d1238afe3c20bc377ae5e3578dccf58f75c583f183881baefee67f79673e5197e535e5ab037556f5cfd2f14a1a936bafdcb09fbf717263655fe2adc54f9feabc4a223b11ec604e2de139d158ec0e52e143dce2afcb88d2ad710c6cd34ac13697ef1bc4c4295bb44d2bf41ee120993dcac076cd9050170d1ec9f2ef28452e0541b9ccdd2345fede1a34560152e5f952b559a60107cf0862a4a5914aae3fa9f06b0a8026487550456c1e17d5550e8bc7b2f153af9de7befbd28aa302b774905c50ddce52ea9a0c922e8130315324f780bb71a3cfb2493c8f7deeb6384ca1247c548be547e7c3bac6b15c402fc184b14627561b3029512f2fda19323fa5aae296fee5d62d2e3e27b95d0269d537ce39ab67baf9a293f64142f88c93e3fa674c9226e0283c01676fdf8b8c118fc29497297bb9c72c314a62cc67cbedfc0e297672bc8b72879fe371fbb14cf7357bf81fdbb9412953b3f89dd3fd60ecfc7fa58dfce4452b4c1dcb6b4c12eae7e98d50f152c8331d3ea4a8ba80ca62165d202cb605c9fab5096f080c10451995732e7845c4dc86af529c364862bc2d403c704c63271b94c55ac8f56eb440f3580a3368b0f25727d1107240d190510f8e62e999464b195bde50a12e2c0dc25538f2c82596cc929ea9e5a5138614c878a285392096f008b6e2ac225141bbe160e8a458193c5d895a7e973eb72c94d599be3c3a6d25ae99a5517c6c40a878f733d386367f096bb8c9225532724662001c4058b63bb6594a4ba3591ca9fbb841205c54b16859ebe183c6ff61871bf7a2ee4428ec67a850b0fda83ce31578fd16ac6f5fffcdcfff971dd77656fffb27dd04c0836c4ab89c3eba9424a2946ec92294e9ea59421798630e6f43f727f517d482d9b8811854c159cbf0f0c4818d178a4fc433c45d9c4293f52ae48357c2133e60ef8b9c3078d4f94cf999f24fd2d424b81891344cd173345d0b0d120a4491c2d62aaba0441f27903e5334684afc190609088f011fdf88c6919e047a9468456180a4556309a8085fc1985c6aee303073864d50cefe166b60d468f6a365b925ccdce0804e92ab40e4eb58540c2856c81dcb162f43125465fe34eed4310b2afb49b372389620c0149861c8f205720437a0c4e7eac81a47de584228e74e95186062e425268422583070ea4171038f1c61290feb4435b61dd186cdcf081871b499a6a507e943092b42f56943c511282ee8221ae741a67a18d805c6122054b90347592a67a60e1d1044c0b469c2c395342a977b841964748d7d8336edbb67175dbaed25412d200e3993a52dc8626c241300234240f64389e181b07120c99a5895c49395305a54407901a3a6a100127861f3154d539a2091329a3f31813307a112dd53f740f0818bd90bea40ad91a3b07b7d261709044c8de000d4b584c30216a890701c60821e70b17a7149828194189233c02e82730dd38db8a13a7b1147205061b6de58d104d51b0d0b29cb084c90c3c12c1403610355ea3f7b08ddea6a7a21829c1a9ce9421a9481100602c80cbd132c31452cc02c6ee42a670428d942267924943834218d2bf30a08d37d640caf02748e404a3106d833771217b4d0eb2c818d24703283f3823d890018ddca8644cda2b52c810d948008004f3150000180c06068462c1488e64bab0a70714000971aa3852382a8e8602a138180a444114c4200c820000c04000c3000083401cc4704d0f6cbb788fe56a531ae64b1017aa0723c6730f0460197f92302f98db43fbd194ec82cab36d8015b9cae17bbb9d38a788b6d2aaf8d822092324dabf6fb57d8084a03fe50ee7ceebcb0a89a7352bfebe04967401431bcb2aedad343e866d453c44123a7d1439eb9f7802fd6c1aba1c3513fb68503640a0cc9f0687406961fd989c393436b1f113858fe2ae1d5e9abecbfde27d9987584e7fb632447c0a64be9b52b1b4ef5f344c6e88158927f7d46405b93df92d272ef80506920259c06c0ba8fb39d3dcb88488cfc80cf43b6cde8271ed362fd32464859b3789361072e3ac1c69e11a6fe05cfe08e040ac3849be4bdc498ddd8edd27cd0ba93c54ed5572d0668d47706ff412b6951e088612f6c78863ddd6e8f3136e3c757e300d18dc1bb0dd0e5ba4d2d97bcd38b57a90e13034a367e21ee133a0f80caab318de0e5b5de8706851b3668fec68d7b5a95e606a72fc7dd756c42c783f87b1a95e07140064d86333989f7fec6b27f849b5c0b6791b6df2d82c8c0c58da048a4c5c75c610f6ce76e8c7acee93b63e83c0df32fb4646154fde19ecfde6a8589db8d557031e0e7509d48d26bcce21e9fc7c73fd915643a411d72322bbb98080fa301eb7aaa856b8a8c05649096c865e8540ed7e12289a09bc6cd54c76bcc020314479c7f3a777744999bde925c3a61640724d25341b47bce900f765a84bb3af469fbae96639cf6d41b366fd08232ec9524c4868fa84bee2f8a07d76baa4e94e99f41d053386b46b3c07d8aaa1e1b3c6145956d74693b456cacc38ad1675d594a9889605d9cb6eff8be5186a22949a0c0130309f389f75431079c7030f5fcc1a513121729f3ed73e60737fc2ab04fb509da5e5ca4a40d1f607af17176cb830a124f78792a1eb6f0a6fc31cd67f7ab419ef66dd2c21aa2d630e09d46bbcee9f8e471c27c97129505b7cf7c6595270061947fbb111a913b4a05fcd3972627bb4734af88c61292e26e7538856da0fe473854b8e44d88860d3d4245b2c3538e815df31e8a1790c696fa9c64fcb739601a3855aa68d9ee0dc2def148635fbfb8f2108e6bae739ec5426f056a6b95ca65f207abfc8251271ba6316713c2f7c480e6af5e021ef86a4883cf09ff282dff96b2183c7bc855af5f63b23d857b7d3b5b9d45d2084d3e537bacf6facbe60faf79463c67376d7f064da2bd3f708763ef4e8faf0e28e1a9e9ab9925c2b0001e0fa97418ba73f7e0557136d27a1cabb78a531c7abe10d60e3957de55b7bf051986abccaad975e6ce817dd57e3b52120f617037c40d19268ec24d896f8e29ba5e7568f4e86ea3ba928ffb4dd1a360a18274fdab31d579e3518d70ac80b38487061e827747248f6eec1f056f359e0c4064fc877a520d4261bad4a6d0e14606194125266afdb31d6b0db2f0a71aa44aa2e3ed5af98bdbd2032b10f5c2544893f7c13f6054d59febe1b42e903b71262e20fdf847d01df6e5bb005d325e8777baaeb6e424b9b0bb4660a5ebe509778fe0a79739baf0c5ca84b4ce471fa240a4e465d747773a1f569e5b23df6ed8f40b2b5798785d3b4b789015bda97fbb47716a6143b47bc72b87eea1946305598de9297873858a064a6d4bb87fa3b9faaa1dcf60f9330f70c31fe8ce56557d69079a05bcf2a906a232e0bb39802d38b461feb1ca0515419a7412c373e37291b95eed61523d6f99285016cc1283529809712c71c38b65ed1866960caf343f93b12578decdaa5d54ed2c64712c1b405633ff30899c12cb46d3d7be2c7cca1874fd03b4669cbfd75a81128174dadfd0c6a48fbd8effdd6f8606a6b598d9209efac355bab77c37f22bd4e67d016b28ad006525bbf48c18da2c16861b209cf8ad5c0fc160255349d1942d1b1d2d0f998d9cc1bc716e48532d261b6b6952f971505462d6b2fc1ef1656b74111aa9f0c1eecb783f4c83b138991734ca2c0042be80f57a6a9e77b7c81befa26c7d48fe7b761083735b11aea6ab05e3b937e89f95300a807be8a1ac4d8aa0040036fe999bcd893ca370d158271f5260d5a34997cc2159e8f4a60a73fd3de5d31d068e2bbebd14417efd64a14bac3f7e2df780668d607618d67e5cd99e183b36e829845774cfe5c49bbb69633a2b1fdb9a5625541b2a5c042513521474158b12e6ac925abcb53484049f8d3093cb934d1714f5a8674f4a638ca0945fe2887f13aab7240a17352eb44ebc4962752879b0ccbe85c4a0a4fe0768bf280a27102b413595a75ccab17445dc6b4e78982227372fe290b83da34432111252c5bbae829c3441d4c95ff440b856e2711e8890dda3abd89f0935e27c0a2cc22aa83925c3b11a2b843098b2add1d92cba6eba290ec155e894029722275c32a8ee95067a55414194a45a3bc6c3ebb104ef8285f4eba2ba7bbb2328cd461d250352f5dd0eace94b0c9c4823a4cd5414dcd28cb9ddd147ab239c98adc164ceb02b4dacb449867524671a0b477e2e00439f9d027e51c8a3be7389bdac16750554826efa16cc9d51be63548553eca76163ade259700fbf431cc71242ccfbad058d58a2f02fb89a58ef449e79cfc4e8643a69314aa7b28de2de9809e5c403aba824131a3f039c17e12ca8916c5c5282f36baa8546130dd1d93cbae4bd7643859b794e6c94f46f3a0a36471a2d3948651106ed3e15301a07f5d5c19a055e83e513ed921694429a215e95894bccbd3b126c29d9589d209ee938c9ec8b2d3b14ebd00e96aa4c9a2184693ef0a66c62fc900a76b48043f7139215b9497afce0065a867ba2d4d788004ebee82494a4edf1c9c48ee9f0a0bee9d88679388131ec5ee4fb8e3e800c9cf6a743ba8e9db0eda65503e7d109d884fb124ffa0c8d2d1b148043b8b22d5899639dd7a72a713c35b5da504f7490ec58ee242997a128e222bca0bb92e2485bb09ba56cdf0a4b05be79ba89c70a2a42812425158a1b3510a9f68d9d6f14e5df0b36486bfc250a680c21d9b4eafb4e0596266d67f62517cf92bd74d511119ad12a5a428404579e9eb784d951317ca27275a8674912a851de85425d6093828b2b8e9384d2ecd3a12757442fbc937285b5e75d7252f288c92d7ad1439511e8356b74ae23b63d2a24ca13c27521483a318a6d0dd9e5cc274690a3be1272526035b02b2ccdc3aff9baed21c27b18875c6144e97210976e2a0fc1de5e54b674165d8aca33b854ebe41d19217de2529e94f590aeb6d204fe5a250c1bbc9682785b90695b3c7daf2b10c3f19193da654f8288a4fc8517894aca21c863ef3370f5dff64f32541f55172414994bcae94a027563971e9e87a1445279c5d203967d843e170abd49fb2f57ab959a0e8c55cc936592a1e0a2f50149ee90029b920ea184580e2a2b0f7c4e924ea137027ea4ece519e4379a9d6a551c572d7bd2420516400d50d24c172a363558d41b8ce38ed27177de2e2ea04381936e980ae5ec0744257b16474785578f29f5886525894eea0c9e5a6e3358505467724d17882f2841c9497093a95c471a2f124eb275a583ae0ab2d8aba5cf17372ebc92b20134f5b022199e11c6cf3782691fa38e105052c739d912597491dab084e5c286d9ec03d310c59b79cc861f7b263d5399c4ed8e432a0635551765bc0a91385443b0d62382762d4a96afdfd5908e712a08fdc1c698e613030318f0f80cb34d764035f6bef066605831b2e9937c44adfab695c05aca93075ae0647fdb2c1a417b2c85267efa82fef3618b5cbd1cd0e7ba3d5cffc5c5ae27d5082e3cc168891d45b0ca814600b1ebc2bcb885cdbb01b3c1d4100d804c1c956762f1994b417adf682d15e1240a014250c27a6bd7a810a7a9ffb2f363e2d22ff71eb90c0b4ed436f4a5c55b3f1e6712cfe8ce362362466c3195d7b060ec0414366bcbe8bbd7ec629594314326aa07cf48c14ff62f49a7a7ab8fc6d1d282e3d1a22e93fbccd99c09c95e3e07b674851aa4fa8898a0fcb5d9c3afa6446072f1fc0da009926539b5c809b2d41a7a9fe3cea26d00ee0de302f0f573d0ad3e033dc9689e81ea33318ebbea9b52293cde661cb9c7240e5556330cdf3023bf07fc52ee8aa8dc738a2eac61b7b69ac370547cfa3b63dad51bc5d6ca8084ccd4e6ab4e996452d51e35389120c0fde528b6c55e97279a99058c3c66b6086165c82c0885655a3ea47ca317a9905a405b099588e6a6b720933d7b6cf02a47f6d200b7f0ff1d6231ae8111ef54d17d1db9ed954e7ae3fe4495437292d08c613dac27493226ab8bcb7f7dfc5c4f2d9a631903f3d4d2c8ed85bb1eed184dc5e0662544a6a90a24ef2af909332e31cee35bfd1cb5a4e45740c715180473baaa6fd4f14ba15db41e7cb0a54fd7e5ab668c88bedddcf9ed266379ada3595a8654ff6127e94d472734d54aced291b0c7f051de05f146d68d6eb5990d7a49ed6bdecc9f6558bfea35f77c6e1323ae9aaa812f1fcacaefe134c38b3203b487290b9f5a60aee746095b8e809b5255e5f5b553da5ff5eae915bb0d40917674b394b8725a9c6de00a6415e5e7e805ef09f2a1f97c753ccfff8eecefe98cf11e844b26c02446894226cfdef58240e0fa64e42ffe0245d065175e91bd9706c9805f7aa93405fc3147459dd7a0403f19bb84807a98d58c6f29713ca7cdfa569a1e54fa8aadab99c9f30286200436bdcd088217852d93ddc99432db4ccff10f9297262772e39baf57dd1939573600d033afd06e2f085f8b679a538cbfdf051afb5185bc19294525ed11ec19e16ff9a60801e1eef329375dc0a575405d9b23f845f2ea0afd249c2e43bea7298af031460426a0331f44f5497fc0a09790ff2aff5b1be14b49011b066001e62a81ed5f9ce49cb0d530c3609c8d23d490dcfe96172f0772c0662dbd9a692e8644091865ca666ef235dfad9bc7a8a12093150dfd1d0250026c56be8002bfb1c6d14867fa4896bbf2f9c575f573868673ab82d0662ae933a323ba5ee50ad34c3e15baefdc4bc027b74dd7a5dfa823b90f2f7009aa55a6f0c523447852ebf45e2454c833d789aa7ee01347d40f947da9ce3604833ce8487f9de65f20f61abee60f6940d2e0871866a442c75fecfdbc46c3623f74b0d2efbabafcdf705a424f65f1dc6ffade5f0ef88bd0032625ac2ef85ad43a957b38665396fbce2e40f34883ab6197f78c0590e97c94612c4a161f9a0c8feccb0ee5ee2397a0afaf250a0500ece520fb6d5a6e6b148cf31b0d71b5cb389434a54380af7d07522cb56a98536899947a044351ba961b2f13b1c6c55d98da8e1023928faa53c071e423afeb9abcc29d88ae9874de28b83375424520fa8b873e8f8ab39b43dc68c30a632b32975866292c592b0acfae2f4301e7a82c19c5108772f865c8912ae788e3cdf08dc411b986376664385f3ec21ee845d1a595854ad6e884a85fca10dc927d55572b4bc941e5703e7900c39051072fcc8589588be2fb5469ae374ebcf47d91db4e77960c660b0773d2c7a6033172cde5a182fcb7fb1dbad960ac1681d26077cad58af96839e36e81c4c96d6e683b11504e7cf6f313b1caccc66d2cf95daa3b47b49c25601d60a894339d81a97e6a7aa866b91b29c5f61523d8f97715a06e4faaf6e33948b631070bc59307324ce664e5f14a7f71cd5c96fba583ec97d5fb169c837f94e2c5036e09de266e12e491c88aa1fc91b0681ad19199454f3bcb9ed37446f545ec4c27101e1a8121b87f676ff1136aa80db603309880dcb4939da7c602c4142ede381ee8c3283786fafa4b9c8766aa00c162bf45be9a00f34b4f7fcb3651cecbf018d37f00ce877ecfe1c3d5d81b8f99377fad24ccf637ad9dcec4de6f28c42a4b5c93eac4e5bb0669f41123857ab70c567e6a882a048bf3f33721ea761b69f7382dc16b31f71d628d52e9d90389c25f0384d1d29cdcff46fc3121847779fb552269be6c8c7408ba6ed9d4fa47b871b9645086bae0641018b079327314320782e19a4d1b88a4f5af490420ef59992acd39c23a838e86b6c656fd546a7e5c4ed1207b7d5795b12be5a10082f13c7263adae43d33ebb87e617ea6e6e8c49e8b344877eed187addfa4cb4b87e1d0a5045606b9e518782672ea3affc41b5623b2a8f3856f56681112142381cec92272d58ab7939ec90e4f8f8c1af0073a1ca221eea0a9d3fa04200b8c55bd1ea9ea6087c0274b6b0e131f2c1ed95583f593b4220348d88004bdd7895fe30a0089b8d8de1ac20d805eeb619940c878b6c30da56bcb5ebf7c7ef66e245d97f455f012f52ad7ff7a7deeebf4c09604afce3445b8abd0ae342aba39209c621baf8d9a1986b7fd7997be4061320758c86da962e33fb633140db2fa012ac5746b36b04bad510b5b45ebba0bdbc208ee155a4c9f3e902d106b912676083dc16a75c9d40cbabb13878ec0af2b68d06579949cec4aa64da28b51ab0d4b45ff0048141ed60d538904cdbc876fc9e210af19c58e48f9dd1e8f8b793b12ac572a0ede0be35d32c50e81a591482b028f4942c547fa8e951be386a18caae27ce7c7f3e1afcc1fa154f7932208fc96d12336d4ce4c38f5d6f8c901f496702a8872f3d424af3eff6be5a8f8a5a4f8b7c111bd98a9dc2d777975a4b8e31d95e2ccf05036c5139a17a88f65844a4572faedb25bc93cafedd743e0c8962bec082cf779d8ae18bb112460e7e727eb6370b57c0c2c1121d0827950fb3116cabd96ac0650dc54026ed392dc4d154ed450d3a6415335aae87b484fe780619af9e3213d44265dd54e955dddb4c7358ac343aa84fe07d07e507d65f3f8219ee631d41db800577f76d243d5e0a04575a96d5853e0fd6fb84c2c98bf04b45ff4b586e52d4fe89cc83d08c09402e806a42fce4f374f09825d878512258663693e0a1fc588d34306939de9ffbc6d80f5f8a83155da0a5a53de391a66a00ed2834d9c450f1900177782db46527a239eefcc0f1e7b7ebab9201372ce283f66d8f1c12e90400c1fe1247f9cc3b9642e26d3dac0c00216d2a9a8ef1bef6e04f41c564396761a8ecec09e1e6e02ea5358233c5ee232de09b0c3d4b713d67b066b9135ba068b6c5eac0f4896e03df3f7159f44120c99350dfcd19e289d32ab4bf848c91c3066205bcfa8909e463ddfc4453443886a5fe20c8c92dd4e5132187310be2a2a322fb8b1813b7c6125574934618f095a3d695f96b266a9b2b4d614195954501c5660893a4e7a3a104d83b452ea0f9f95e685818360e0800c7273bed582c0e31814ba65ffd6eb8ae79ae17919a2d5d144e2ba87321d20a05f3843419e228c8888361a384dc5c4a1353ab5a3e87f5766f963792a0f3ad83c8325a81a6815ca431532071d0d0598ab54e22b02a10e5b14131214f042395fa7dca6b72c5a7826188dfb2568f0ca59bbfe626f0284969a497eacaedfa82480513bb5a2e41450763b0b8b75b6b744229124612e70eab5b50acad8ecabaea637417c449f731a4b7a106d8a73f7d9b12554edfb70ab33f031139398f8a3c6c43af1002418fe5cf583b57a678db28f57799407ed3d14992ddfbaccaefb7c55061d3b605ea6ca1f5719d8acb49bd8753ed28f14e627e288afbb854aaec17838c65840c75ffa1e34d19264d139efe9c77b5057d2dee5088d4b5b8c841f572ccf1cefe0bcf983b899894c1cb7fff56c6094e92ef6623a6e26bd72cd585a35c4ac80956dcee2c51c1e4ed6192f4e6c1dd03fc0960c6e61252f4e945edda42c1046783f96a09e21e98503867919f2826dc22fcd8b1d72dad37678d7df9b845fca01621f4a280dbfe638fcde2228781cf7c5baff9a41a9fff0a0f91d7ba5b800d8e4a270ac3d000928812b99e0bf44c8664426993c9fa1ae4cb8cdd00de82905fb8ee5c5a02eab87806206af7e6854ed313fc506207f9e2e6306f156e21d34f6c82a38d9f5523597c209ded96905351e52154a53375452a654ac573b742044857a0ee661582604a9539632002853793e81531e6d4d1d526b4c5d40c0471d06545878ae85600a39f0bb6ca811c8386448fbb1fb373aacd56942ca8447ef07f0c3e125dec2fa4c816b0b4925ce202907679ea30c9daaf39f8db1ccc9cd4d3bcf2105c77e5e238641b318245164698a46879ad078adff321eb60bd6523ad2fe9ca30dd5b1a7b32b22800e635a606b8e2a828039792cc6c4ea38b9aea709a463c06b260639a944fb9421bfe7f350a86f4a43ad8cc6b9d8df27e273440f25e3b10235fcc604b648aac51343fc795f223f7fde9c63170bbc0c9b152388a0c6e6d7db167361bda9d099b6f57fa38719aa708b970c0abf0e305edcae1d0fad984dd4cd91506287c14d165fb22d3507afb7697b8618fca54e0dd04bc0491ff1a706046b825f1921e7d320229383193a75c5ebe4ee71a48041cbcaa0276491da10f0eccd4d96003f0aa4dbdc6acb0103e12db4adf6f28c61ae5b221d8aa31c6d24d929b0f5977264944409a341bc27d8e21a5e15b8de42f3096763bf11b3287202308c1c1108a7ef07cc93c45c325dc2fad7ea9674e999266b85faeb19aa9d8287e5dde7c96678703f19bf7fb3e4dc797acb96be197f4d3413652a0945b0accafaa006d1a8829fdf0a57b8b734cb133c8ec0995514ee127a72ed21b0fc91a4666eda5349b5a9d8e861a3f44693081881a7c3fca6aac425dcded537fa7d6b4656e7dd58ba02e85b605eb86aba3668e6cf888935729dcf96023e66f48d9dfb606fa46dcebd4c78334f95e1454ef9fd59c52d96719e583ecc183b824025639e50917427d79f49d092cd196eb82ee0e3257ba5b33c689786335d865f4c8d7b4c4d0b336ad70fe8519a2bd64bfd9cf882ff9cf0e2d7a148702a8f6eb0703a01e0fe5c0e81d0ed6d95d5e3960b8af239ae91e0916aa6cf48a6dcb5d398650f33f67867fadd9da2ae623db1c1c114b2a0f04a14e6dfe292c2a01392904ce8000a497710570a68f0c8e2efce3ccc302900ab4545766706e0a9848c5a65553624524c5816effac541c4401fb31227fdd49e1e4db72e815d3f523595064b2b711be00aa4ccc5252e35c36fdb4408d132f9b8f26cce1825b7146c87a42717e4c29f49d9075314e6b915818bec1b2c8f7e89fa91cb9502532b81b0e0f52f2044be90089edf750ade13b317b1c5b6c04c7d02782a75265b57b5172160f9a8e1a8fd1a45dcdd3f8c91825e0f59ff2cc80a83474bb08fa00b8709af3ac216226e185180cde80a820ba7249e423eb11194ae16eefe40a9a159fe9f96e4e43a24f4cb7e9f4f31d596b111ba6b5195da16b7fcb4c67acd50f5680c23729e7cf04bfae5c0011c3df6c4e3dca0745afd6615d1481014c609fa6ce4ebaf8d2b02e57fb7a9d9dfdc12c09e22355f3517b8fdde921eebfbbf35a5bb9c98c045dd3007ad879e848374589f4e1e7e88b90dcc59b9f6dd686bb622bb48adb3a75073e011d5d0b6c91f8c2f225ecdf8c181f4bfe8417e68c3c737cb3a924bc514436e1b5540be746cd61f330d18589860591906bda2e7983e1810a39120b7cf84c1f567addbba7ab4bcd48930f20a990837834199afe6a001b2e4bd0cb1b81e744badef86ccc3352e9f03c47023301c92b55a4d51c86536289f7087479a4a1742ae5713253282852c21df9562201fc909542b77ba361fdc998e1fe9f3c9f41430487454d8732761167c6bde3d6192c253b7eb9b45440bd3c652ecaf3222136547a90e31907d6680062c2970c3c5a91ff69eb2db6b5f489af2e490d5c32f644272878ab64009b76d354d4ee3baf3273d3444ee3052d399794a4e59684a1bf77e6cdffac40f8d99702fc8b25644483a0d9173d1405e4d81f6e245c695fa42023fc9b5f18594040d6ab6a12f242631c5ea65c7a1491d0f331c8901eddde740f92925c17e6ae7bcbcf77dacc3f2aa8ee896a297bf0e95787e81ad6cbec8d47f7d984d0e8fac1bef73c3ff08a07c8c69ff01257b8d91a9d8dc539e0120807b5583855aa2304787fcf63982c95e0c739a666173661afcc0bea08348266fadde0c0b61ac1171355c046b97a51dc0f6b4838da020b48fd128a6d0e8103363da784f4c7d5b837e3891f4eb28e293fc22537ce3d73563b3e8029cd8003d75adbac2b99e1d2185c1aba03aed5c094cfeaf6afd29af3e701713b042c442431cde01496cb6594928b238882f8d270cfeb1650f78a5ab38904d36345cad94ed86590b7c38b9a01038dfcec0e6092a6d34f91c09a9ea54465d432f4d412144c8ba44ffdea1331179affc426a9143bc2aa2362971696aa041bbb5a04ec4fbe837acfec16c510152838bcfcd84d18428a481a8f4f853c0f51e206693cd3f9fea87b2c9e0845acb876f498da98cacf957c3715c40893755e5a8c4b43a47309e72599056f045a9a2a4e8936aeab2aca1310007f213969446fad0ffab4281b16064f52b94f1f76592f2f003ee66a50c5e977b675087b346571e93face7a7fe2d73a9c55972a04012664d379276b308daffaee2f00ab81485a64d19256aca1915279805696789ee66166aa7ac0fee983a9bb19786ce5a4baad0753e29f933a3eb808cf725b222e8140ce7e3c056d7bd73b694a5af810ccaeabc79c2aa686f4c2e055cb97c40227dd271e86937df90a652a914bda828f08adabbf5dd9177179ca8ef78f9b12f77db65c7734a74376fd43e4d545e46a68301d0652ba1cee08e922906d2db35da70e2e173d61e96a6fcf98368051376dcefc05ff116120c9628831bf15bdaf9de32b09b2a7169c750a4c32903d21d7e5055f40923a0e39611b24051c02808d105488545cfa4bc95001036c5a15061e0099428499ff5a6f9e4392a97d8d4e270c6376a50335f38fcac04c1c7eee436a0f61ee8bc402a1c881c8f25b1aa4f32bf23436deb4a6f9e5c73fd74a73fc263960368b500c37fa73c138d8cb71d2f79eacc313be6a75295313a6a8e1ee7f5c4a755460c567f5b6e9ccc743deb4f41a76d447c27161a28dc783bfaa4c3469f50cfc20878167ced068fef0180d6e055d553a0a91601a89e71c0ea4ab703cc483398daf28db1f09e227a7d1b504f1b4dcbe4904ea15a52e873982f46c00683ec2a2d9da20d95c732dcf6e61dfdb602ac6276be8ee80914e861c2218a395a1e31a47cbc4cb114338f41f2dd0a47efdbb267e8d89292f001daa0eb4cd9f511a8106d9d5a1a479c294d44e2c6678fc63400a6062defb89cca2ce00223b61cf409b724c1898f88a321343ea4486164eebfab521dcab7830dd91044ab180e45ef127221de0d1a050d81a521441308456da82dc7ad9a600ca4460916d269bf78e63ec32c4ce93379a8a359b83af537d4576eb6627acafad065a354d6bba993d2937f19307d0629c3a7b56487546912ebc05697ab3d55d7064dc161cfefd8159f476f50e60230e8e7b4f7f20b4b4d1e931612513fa562bfec933c00cb648b34f5d0bd2acb8710f9f4b3dccecb92eeccbc0af75f5b91caf37c3f1f8b71a610b276b5f97062b82a0f2b4b5250d9f1ab29f09ac2e61dd4e3cc4141c07e4651cc028ace41d5169df86a1d5ce6f5e5997ab88f25e61648a7d4be62d79f1ab0e887820751dd822854fe257319796de578f42a758ccf2f36c0f6128181a3a2fd0b963970efe0974acdeac0333b4997870a3c597ad35d2e4f0efb09518258998cb076e7934c898c0bad68fc99f8f637b83629fbfbc50cea651c29a8b823091ec96f2bb0a38b53bc0a6f0331c012243cee024e961e1a5be68f642b078ffa2c81e12dfb38d53cc248053c1b83e1962484178a715996aa7827a2440ca9488d6395248008447ed52b586f612179febdcff6809552abf0328840c85b8bb61277ea239ef97f91ad6705b955cc1fa471c66ec91f4a6af8cba96fb106624621b022f62c414b49e2131ea39dd6921d456f366e0332ea8e9b9b387761da734d6e97603cd0adbc3541915191b394444da5145f46b7e27d428f61416daa7c6c881b69794f93fe164694f7176070418fe0c906a3af0a1d1cf302547fbc5790a5d0256760243cbc987b8bc367218fc22e55db3fa21124a9eed44479d91f5e2ee7f94427abe62f40d2c2dda6ab4c4c86ed534b446f0b55f84c188353df703ae547e05c4a9ff55235b71cecf505ea610eb17c0abacf182e5a9b040e2a6f140aff4dbdd563386c5694c12a12970b6108f76a78e647503d77e4ba128c170a3506c7fd6ed7c6af78db41d5d6505e83783f114c335a21e7ce45cb3bf1363d64244ffd4a6a78a91a2aae0651101f56e7b3506e2aca3ef94e91304aac407954163091756e6efd447ec82f0f5953a03d2c98ab122ebe19762a95b379cbcf043fe402c6d6e6664c4d31fe8698b460173b05621ee3dd8d89339cb65a7ce3968016cdcd10062955d7ad18698af45f5d64568ef6000ccd2483f21e0adada295496f9b2026d980e623b1f4957e18f59c8ee802e4f3054ec58730194b1010106b5a030b1227248d5a3c11f5c14628670c498e71222ecc004b7193e51b6a7b3bdaf6fd99bf495bd6a600ab332c36a47d1b16e57f58b8973317581462e07b6888cfe353237bef2d53f21c8e1773153c2716505ae0c95eb166943080ea3d35f10360199116a613c17f777c6e7cbb2fcae7a48a0c592ceec1c6c3e0829a8764c1721dc1cd2f207b10cfafab6aa451eddcd214e364952061a5bcaa8b43491b54efa9e80720b0d420f3bc1a58ac277b75a415a9b3666a535ed54dd3b1fe08a18449146bc58a658264ad58db40105b3ef4d0c16f5b5600961e4a9e5160c22173b80045b9c41a57666c01f7b0e100345630c28d233d5801cf08c389911a683821ceed09280785281a960c60cb9e146a200f5014bd8105fc218da423d004355bbe0c4003ad2e444002f27e40b2663c55d143091170823864330082030db11a62609519643bc0914705264a6a08da3ab43b645915aca90502ba4cd842e10e24b0d080801edf1c4c588101a3b5c316191d5f1d4066e0c08c1db4b65879e343e28d195e94c9c08d225cb0f3cdd0869b23ecbc40535a0ae3fb0006030490c7064565d6a0f341d1b15ccc0046066878a0e203c326903c8ce061746ba3898f491276a028d394e7092e8cf80ce0c30a194e1d60b821831f6a203ccc20c51334a89c90c00e950d35badce0440c6e706ed050af3000034664908017dc14d142fd610e943255cc71c18c0327d41546c06084153098a10a29d6d42b239adec0012b0da22b0e6a0678f8a0d9c0880ea844486b961caa748841863bae22d8d505cea876e810e015400e5d0d5a210c59cb3a128705198c07156692fc91e54c12199a2e23842b602820b075d17827e0a871a79c300788375bcea18e5c0e4cc2a0029005accce686310b28604406232e4fae12e38b293b6ce5512355bb4c0a1e34e162033932e0fd14392f70b10116af2245fcec8307a8a0f1a3059f350f0281668e2a7e788aedc183270c1e647bb8a0014b207b8af022092316b471c0ade9b12786139aa0e363926143878e3d1e3401074cb782100273bcb1272708018ec02384b31062670f930f47473190e80a6084b1c7f64606322a1868a08a8bce1e22313cd08615753648f3031583fcb1059c0426b84c9820d1c4206b9400d3e30714438a50193108154a6ce1b190c29b19baf861901efce801d7059bb4831676182485ac359cb8210e1c7152a06190748d3fae8e784a3c70a2854104e08218114e506109052638619007b068628fd3932894caac192401023ce1c41d071198c0c1203f471c01c41b1ff6a889930a72471e6df8c1821a532040819d2062e8b005654110ee0c3e74822c81c60fbba30e9e78589381206e58a0ba810b2612c0c285264144a8228d2d0b2000c6164b8011846acd9c30d6f8c28a07aa6c11840c1153a20061000a1128581104ca1d4f7e6030c2c00f703c11e4889b11bad8e205285ed0a326c864a422689100084b571c057280362ec8614ef102c3182481682185ac85286100a1400a91408600c14a01586690e0a28258202e04418749052c68ca54ed0903d9400e1a8cae006087095a0412c858c3991f5200220b8b23f408a40b1801c80089c9043284404720b502d4a101d1264d2056de0844e8090a54b8e3463546cc0e207cecb91a2290279ab033260c40ec6cf1063172850c5664f13f081d40a23800025d800e20c0658d2021f54bbd2154f0d5eae8eb991850fd4183a4d38d584a906e9589e250d2a604e9a987e274972a77a572b6b41c6b3d01516850a6890902a62d380898cae02cb885b10e5cb14a90cabbb341f59eae763cabd15e4956d974f7fe25cb7eca58c95eb1693956d974a519359eba255851371dcf145d92bbba26e90e6a4955af14cbf481b37307177a9475d85163e78a3e266802098ffbc71d46e84c80cac9ed691262250b1802485224ca11105640c151808833a518062863481711943c2a35c858514091250428c38c1bce27c020000630d838a87f62f2d01400b39ca439a0892de09c414568070646177bd00180f48d25438a4c11045c23061f9b01aed489c680791ef8438f33b45ea8a39c52870e8a295a3db423a9ea8681083fdcf1010046c0c38ce2afa0b430d01c525c9924fd6c8d9ac1202c2fc6feabce3fe71303e62f5ae6d3423a9a3b281c16a95b52d52b95ac0357ec98eeaeeeda2574444f9bceac5a925641ddd3ccdd2ab3cc2d4d314d6450dcae0775d3316d42a3c65d9794cc7292bd3357827bf6d2b18c22cb60edca31baf2f27837dd4dc7928c1ac994e94286a92447292de518ac732cc92ce66975cbf1ceb4bc565c723c097855e3ad229b76631599bb5ba26e5a329555bd9da925bdbd33e748c6a6b9de99a2badd25a1ce4b4291697975a44dcb913c472b1d139911d5319d663a46dddddd8256a1d78a4c79553df49e64d0a525f45a912959459e3c5c69565599b9a52514eb522d2d51e5ccddd2d21594b9b434a261aea037c5ca62e5af5cb43479e895e0468da79996d15d0dc8aa9b3255dd94bcb9d2147373a5594aa1a3971b3592914247295c5adeb434733aa61b3592d191b81b35f228284d123dafd5ad1acb2b652e0a86cce56135edaece0c737958296e777566958ea98c8ec48d55572a878ee9a84bcb6b75a7f4d2bbdb8dbc8b8e52bc2b4d9cf4a4d2a8f2ee703a32776534775823ef8a95d22453de183154397397e5bc4f55bd12479533774f5198f4744c3777f6cc32376a44d11b4647e246b40a775e1d69659ebc2b56729702f496f182868482eaa1171d9f70bb3147966639e6ae4ce959c95d0aee4e578e52b88b8e4fffec27e2775a167ea0db913d2526b6264926544926dddd984375b78c225174b4a9595aa97424230b61193c1a32afb4e59ff269edcf0cec971984447ea3ff5b16c2dee8e9b7601958c313b94b4ff369fc22cff4a15008fe0258f609f10f15f0b27fc82fe40f02fa7f7e9f1f3d6d4a36283626494ba09828294161323e3d3569a293c2042a4a9249dad09b8e67ce8675a6281975cf2566d439e66c4bd27bcb1e6fc9ad32a5967ce99f923b1e6a9dd2d1c9c8b26fcb4f64d9a7b403e7454b52f61119e4376059c5f3977767add8fb6475bb9e29855a251625912c9aab2b497badccaa7be278e315fa37f96afe072cab50a0a72d5762a14e4071c7efe4ab0bff035f0db0063d6d678ac26e6f375a59a7f3e4e264cbd196a6755282c41bcfabb2b7b494ee7ae895c0c9eaee6e37e67efb9fee275a562d7adad22aa8d75fdff5699ee7b5e56875b73c7be93dd3f256dd1daf8ab429399ea98d2ac9341dab4e13ca8e6eae39fc082c9bf7072dfb86bfc8b24bd0dd1d394259f4a6584fd64299b634c974b458a75975abd0d3f655f9912c1be9175af696ffcadc419dd7cab45829991b79630e3d6db96b85bb1acf25b9135d923377bb7109d6399e4fe4ee17c13ffc63ff97f64cac11cc699e27172204f00368396ad4dc068998a00768843a42b8864db523844679c0b67cd83d60a0140e38f0e0b3a0f5a0dad0720044d3cbfe580ed6b0b159c4269715ad073e1666e760040f7c8cd8d82c461eb82ccce865e481cb483402edd603572ded1f568082ea598062455f2cf6c5be5d4647babcac8bea65a485f55997911616681fb885f6e7fb62453ef60b22e363c3a2351d00d9ea13b358be346a808a4678200b687f8ad6b0a959403bc20359425b838a6a96ef1361b1a2b30415ad09b26c6c961f0b2b5a036447b0597e6c05325203ae09614805ed8f911a700d1b9b2566bf20011475e00168838cd480f6b3601348e6b358be223635cb8ff5296253b3f858a022200bf415c56c188b197500b40656e62c31a30e6c073ff62bfa2972d99aa5488deccc5a589fd5c20a6d0d22f3d91a649bc884d69506fc5c3000d55ac4e663b3864d6804c499074600e2cc03372ad07efbce2ca70220ab87cc0e044425da908b91d1601ab07e013a1477b035207cf0d92f0c43f008a06bad552ca2aaf67506bcf984611802bd7cc2973d042d0c662b3805c2aa0d4190831a7260f5a5a085591808e3e005334a412ff536f5b21cdc7c8ca8442c20ecb3d5657468b7b55a5815e100fd017da6a1d5675d61d119a21b95cb7eab4667383843747319a5a0977a8381371fa3a9d05698d1190e6e2f23a3eab2a0058b42a333377bd018d9ed9302c826c9528d44a8964dd1ae978515013d1318ccbe5e03dda6604f812f7b11cc682a34602b063e6240401a79fc4182912c2254fb505e467beedceccd653485c6680a76248b08d5be2c16f075734d2971508b6e2e31e4208d087be0c1452006c8c28e1b5944f08003120ac8221a11c5b2704042cd021a91f0caf219c13858408e25e04000116674514516240a6859aa07e2e7dab347cfcd5a500a07407cd6824ac8bc5ca2918fcf3018ecf59215b98856522d16d0de422250c9b02932991c22a241251ea4b161063590804108210c40802c24d0b2580f944032542199d092313af285638ab61e8469c02ffc02c815d6429775c1a6c2dbe7636160ad2259a0240ad2ed5be09686b77ad65b78c485f43a02b320d2ad567b422077022923903a81c86982ce206c6ed31184063a81e8a183ce2074aef85cae213730fc90b8c83e5b6fe067c12ca02297b575c85e4740d8ab06a3fac27c81b8f93ea4d07e46474270ea34b0fa9911c260b6c26cfd350784c160f6c5544558cce5b2d565ebeb6561b54e0d43165eabfd52c51f2359d177ab2f97cb8a2e2b06928040d280f6f543bde29506b4222027dc44eb122a4048c81e21190aea52e5dc4258d11a20a644fb51c982be54d7902026d1ba2cd14dbcf918bd2c16304674a464c54b93d30ecd9a3634bcb985168848ec225f502c0174c47c6006c4441ffbc1ecebf309fa52e90042430d6282d9174c0cfa0232b98cc2fa270aa97282fe48c09a3ff4f8838edb74feb0f3c7187fd4e9a38c37b7fd80e1761f786e5bd18f3ed2dcaa557804e4720434dad62297bde84bbdd51484058509e3324a6314ba6c18a66118d16ec15a988637d0f50a0a53c34ca549730b6b5f0882b5db5b58b59f1579a0c3071e3e4ea8df46e15df6d0e3b6879b9beb8bdb7cac1903f43744147db8fcd82920fbb2b5e8ef2b3a0274f3b16786dc7c7c8caceaadde44ebb2a211cce82c68bcaa75b95ef688ebfb5eae977d81ae222ad1da326453e14d7cc9c7fe589fa233437c6c2d9afa319aaa635ed6f572d997759da92eb1da900c3dd8dc400bfa71735911cfed9b680715b7d96d3a756431c80f83c0704beb0db42e974fd191fab2aefafa42a0989d7af9d897cbfe581fd1be5ce249b0221808045a85b7a030a275191da946a28baa5a973d2286414c15e965815c45af0fe983593a642ebb0dbf85414ca0adf608cc22dd5cb61a1d81197d41bab9accb0809e9167e515e3a5db67ed528267ec465ab4b74d53343605b409f2de3e6b279ccb97d3b8f38371f0b04161df1b1a08f511ade6ccc8241436e56e1ed65d3f01682e01110b43f2018864141e799aae7a498d1912f48f6c817a41bece7c8172424ab7aa4c27c604547aa7559b1d6075d41b50fe934b12a8681871fb7816ae191d0e80bd20db447aa3d343a528dbed43cb855fb7a550bfb8c8e7c41a29a428d8e7c3953abfd40fb19d5b854d004a05f82e08ae766749b0e1e54dcacc2db992137d0a756d1566b61d6473c53f5dcc033b51a806a7818715bba4d07017edcce6ad37c46614cb475c8aef5ab623542ba8569eda46dcdf307b310bc2c509a34b76a04c146ae1f5b8dc034b78daceacd65ab9115780466c4f4a27251814655109f5717571a14d405668f04f9d89fa0a233358c0fcc68aa82465f5cf61a681180e7066461a1bd4b5a6fd5da2d645361353a027eb02e477c8e5885b7ed9921b78d6c0c6664b551058dbad4233e16665ff6a7e8888fd117a41bcc0889c96554138d6069bd7d57dcb97d69f49ca97aa67c6e5f1d6248eca56fe92b0248ce2db4209c5b6841b1e8cc90db3726fca6c033b5c8aaa6116b850374b5a28d1e377ad4dc401bdee1b22f3d02b989a005a27a5926d90dfd2cd01edc5e4043a6449bd6d0e808684465440564bf22a6d002d94f3c33e4867ed214907d4cfd2c906855ad2acc420074c42abc557b66c8ad1afdd830688ccbbe8cac6a35b2aab78da6c08360a07d19517d36adb733f576a6de3e2358e8439ad0beeea409efa813c264e0912f48b51bec8e0c046b37d002857b7c7eb982c604315531b41544aa9f91550dab1195cbc2fe125a18cc824167aa55bdbd8ca84450c473879c337f9f9d433625da5abb7db67e118d42ab1a051675302107162efee4434ae2079c12865ed0f10318433aa203cfadc86d3a7564d5e1e63675248784f025ba3e3a6898e30d1b626895621f085a19511a7418710341d066714407157470719b3a0ac485c0142f18e8fae458936785a23962089a23eb13c1e7cc31c250941066d04a80207a9e68238b88021852d061e38d1b07809345ac0348b8e77547cc8dd81d100b51174277402b824230e69871e78e27d4e0e3872ce2155945c471441d586071471671909b28079c9b28871241485e7264c901c36d4ae94710a45a93114152abab0b1991a522016258b1830843c0210105395ee8420d390880c29b1968b0820bf0361d395a00e568e1564b801d7171c1450608b0c1852d2e3ee0e18d2dd2d83087086e1491c50c7bfc11c7c69962e32cc9ac3dc21a219b52b2a2f464ca1705348ac15e20e8a213b34754591e156e200882360f09794830c2364107cf1d3a78f4cca1738038d609cb84166fb8712308571637571c7cdc5c78d408f1b0440c72dab8a18734fac012028f177fd800c41681d825de807333e0369d38eec411c61a4021683ff0fb5ef681170c5624da26ac10b2438b846c2a56e425977dcf4db454ae1891035e7a59a0971d3c0af908c3a96ac3b0dad08af66b037b6125dfa686807183cd4a165d160899117297915b5dc2fed0c36779b03c7c1f197e8816e8a7da9ffaf353ebcfcf3ba2db36566d0cb29f23db9fedcbfa6cc55bb5b023ff84fb14d916441fbb8dd95dec063342f321fdfc001df131fa22de7cac0fecc7d69b18fb29a2a2890f09663f24d1da1364534a739ab8d53a358c2fca8f9d0ae7084eecc7c7c662b19890581b6f60413f561463528614bd8a8414c5861489b0a227565c2e116651904d29ddc41f1b54e463b74224f663817e7e808a949e4cf9a2f8b83e1f2358bd01397167ce6d3a6bd4b94d21d159234e1d100c5d35b4d74ffcac68819040d07af990c0185181760b1830c8ba2003b7800141d98784045a16645331a24525a26834e87273a78c8fce1a6fe8ace1e6369d35dad059a3849beb566d4c02a06a42854d678d35b74f8d406e9f8d11b941506f9fdd41f6b2dfa68e6a1f11ecf5020283b8c0eab784d5a2934620b7e9a441079d34e4dca1a3861c3874d47043478d136472d0b113061d3b74e8d8a1828e1d23fe80a28421f855a9f5acb72373641fa5fe835ffd06118dcab03384912d800c940253fa8ebe0a64a76030253fb0ea6361b0cf07f4f929f29282ac5ad79dd00b20d17e9f05bf979d166e9f7dd1b1b3c3cdc7067df9eccbe78bc96a95b3fa147d373a66d8b97dd52503a584560619d5cb7e53e1cbba2083d9a91f1f1fa3b4debe7a93bd947e37d817e5fc3e99d05160413eb6064170c4c788a9c2829896f37abd96737b59f0f5597d2f100c620ac1a031e148ae0ffc42232ed68510f6ba830e32de001a0274508ce85b2c1614eb12de7e2ce87aa92003edcb86162946444466dbd4d022d5b0804111eca50645f0ed08684198eb03126bf80979d121c3cd2d1c23ce2db4322b880c160641f0faea27e4c702bd7e8c603197f851e8ca02e82f0a08825369b8bc40d0674aa4128d76b11b68f30082fd0252a32eb97d51de7ee110d0c7fa88a275ddea41696eaea2d008480d343e14bea2a93440b00a54f453344574fb11021e24260c6d6885184dfdd86a45214647bc7c136221f826c4e80890a512625d16c8c80a223b22c408f621d934b71feb6363696e3f3ba21b2c0d50fdd6f83e3943803e0b64813ed18adf18a020088a88f6fbf6a1f0b5f9a20471115d3f2f4b5434c48a452ffb5354c41a2972593b64852c1018db07884801b6fefcfcfca4077c362828c87e3f41b6a250ab1c60bf2ac68c88be3642768ac8ed67e8e7e7c7e88020fb191d39c0baeccb8b9023d60051b4a24b14c5362f972d121404c167c558d018973d621422f0b240403fa110d1ba5e7244d7ed0051147facf87de28b86dbd4cba61f9b138c168ba6be166e53af4ffc8ad8fab5797d6d6e2f22d116b19f9dda117d1f51112b5651146d3da088d187c27742100445ec8f7d15d521d64851902d5254848888d114ac002321d1473628454926c44ec9623e45475ef6db0f2c0cccba6446475e36c88a5e848441a2050a8a7909b261900d329ada117d28c43e361f0ab5ca6d60afd714d60d8642ad221a51c160302358787bb98c3e14ea12f13b459ca803460bb730e48491c20d8c355ef8f1e616bb19b1412ddc423d74c48843470c3674c2b843470c18626fdcc2f04e0141361634157bc3358448c8176b23f6c617e5fb8cda807186585751ccfebcecf7c5eee81162f345b953abb8ec27644405b651abc86c05ed8f11fbc18c18c5deb8550b3332fa6c8d7db1971522e43514ce31c06563465e469f915838e77b19f01915090a0a6a018481e0f7c5ee7c313db7a918f87db13b313cb10f1422c4d6376eb1d86734157be316b39ffdb19f910b0621f623127b235a9910ebdad9970b840989c5ee08b13f3656548758a122213b252b523487c86daac23045045680ad43be3705546b5440adb5ca0a28c0e808cc0ab5f9ded0b989168c034aa930c8441b6ba356794dc98262427632a3a9ef843737d10e093f25428c624153f54d2cc8c6da080a8abd1103edd477c26d6a772027dc5c3ba25becfbde11c5c2a17a80144f5c3f4864448868733c794e1e7df0d1c7176ee021a3c8127096b883c71d3cec91e515c5ed25440bb79710300cf142cf6d0ae90d1122224444888884728c3ef046e43f3014c3d70713ad0883000c7dc4cf05f4637fed030a359540c78b336e6050973a52b575a4ed4f1068818042d71d4075c85c66295b3e25d58246534234ea90b1c0ca94eb90f9902a12a2db13a2db74bc90e206dea6e30514b729a21bed0b2488004103628702cc90e4ce0a41784102185ea8999dd10720767c01071b3b49e80063c64416604491044f1c9a0a42149175420d342b5a20401d13666bd40101883f94d083451cb4396acc48106376051d3a53d05058a28b216878e3c30db31d5ca031d1450192c0d1c51a170099e980c72c4f9232ee2461830c2e6655544103a1095a0e45cca8f061c6070e491000034d072e5230001723cce2083293410f17e6a065d1461866ccbea813e78a24763c61c211593f7ca003cd0c1968346ca10202b660335362cf187cd0e0d4a1c71bb33668d4f98276021637c8492389d91041c0c00309343cc102ed0d9d1252a0f341123dfcd8e38e350798e590c62c8b30da6821470ada0f4ad08880331b412b891836d00c60003b5a9c70841621ccec48801708485207cf0c6bd0c698c1b1c5ac072a92f0c1040d09226631f43083e38626c60bb43a59a0301b240b110409c4893c92ec2107ed09366832943143a28bd91d56bce0046dcb085a155b7472d88a61e606166db2b02000cd8b416650ec61051d58b8a1c519b433bc4063cecc0928662d20411b03882463ec9064cf0c6a56f8600e093ccc513323a38f990876d04a80a3063b7280418b228b24804491e48d38333584c0216b871ade68c1882b4c90e20a10685afc314b42cf2c01712431430dda0c62d00820f3a1a386cc670a339848824611656cd184d0e18f196646b0300bc10a136876ac08210940fcc8638439ba7083c6068d991e30f2684183610a13984862a788d9165b333974a05131030d0a166678546142923aaa08c10b4042c8e30073d0a670234918682c01c64c8e16b317a648320713471441c3618ba6468729669871c1821b2a4c4812081521040208ad893cfa9863760037662ca091240e309224400bda1653d05260621646116d6cd1c8d021491a33cc88606185294c48b2c61421cc6c006436471e49f2cc91e40f37662aa06103184906d1a28c2966623021421149fcd8d2d2a18819866061d6861426d05a90220416004992471e68cc317be3066d0d1a49fa0063d68416b33ca6388309da124524d1b395e40e1d6674cc40bb82059a9b284c28218a10a290c100c12383e5f1031d42c03113448dd91d3292e05127091958d449438adbd475684130719bb2332d3946dca660164647ce0f37d02201ed9da438760459582b2cac1506a06aa7ac28dd94a6844547a0fd94be0fcf0130da0a32d18d2460c8c2db749e588326c51363dc685cc8e8c89972e4369d27867842eb3645741301e8a30a7bd827826168ebf71111ed54ad619daa462f38444fb879f93cc14210ec891064af30bf95f54363fc160f3f24c66fedf04361fc960e3f04c66fe5f0435ffc160e3fe4c56fb9f9a13abf75c30f75f15b36fc1017bf55c30f6df15b34fc109ddf9ae187b4f82d197e288bdf8ae187b0f82d187e68ce6fbdf04357fc960b3f64c56f19e087aaf8ad167e888adf62e187a6f8ad157e488adf52e187a2f8ad363f24e7b752f821287e0b851f7ae2b70af0434efcd6093fd4c46f99f0434cfc56093fb4c46f91f0434afc169b1f8af35b04f8a1247e6b841f42e2b744f8a1237e6bcd0f19f15b21fc5011bf05c20f11f15b1ffcd010bfa5e687e0fc569a1f12e2b73cf8a1207eab831f02e2b738f8a11f7e6b831fdafa2d0d7ec887dfc2faa11e7e0bcd0fbdf9adab1fd2fa2dab1fcafaadde0ff1f05be90fedf05be80fe9f05be70fe5f05b677e0887dfe2fd909b4f4a7ad9169fb4c0cbaef8a4045e56c5271dbd8c8a4f02c0cba6f824a39749f149452f8be293eccbe47c12ed65507cd2ec654f7c52929739f149485ed6c4271d7919139f84c0cb96f8a4035ea6c42711bd2cce27197959129f64c0cb90f8a4222f3be29388bccc884f1a7a59119f54c0cb88f824a1970df149b297c1f9a4212f13e29384bc2c884f0a7a19109f147bd90f9f04f4b2ad4ffa79990f9fe4f3b21e3e09f6b2379ff47a99d627b95e96f549e2cb78f8a4f0653b7c12f8321d3ee97b590e9f545f86c3272d8ef022052f8af0e2042fae79b1e9c5105e2cf322082f4af0e2072f06e045352f927931cd8b635ef4e045312f76f0629817397811cc8b1bbcf8e5450d5e8ce045ac17995e44f3a29717af5e84e045ab17bbbcd87b91cb8be98b5b5e445fd4f2e2f9629617cfbc787b91f7229617cd171f78b17cf1ca8b552f3af0e2ee452b2f52bd58e5c5a917975e245fa4f2a2d48b535e8c7a51ca8b502f4679f1be08e545dd8b4f5eccbde8e4c5a7179bbc38bec8e4c5252fda5e4c7ab1f662032f32f0a29217915e5ce045055e4ce0c5a31701f0a2d18b452fda17692fce5e4cf22292178fbc88c08b07bc48f4a291170d78b1c88b445e1c7ab18017855e94bd38e445212f06bd187b11e8c59f177d5e84bdf87ad1f5a2f862f822f8e2f7620df77c38c887827c18c887807c98800ffff8d08f0ffbf8908f0ff7f8508f0ff3f8108f0f11f0a19e0feff8d08e0febf8908e0fe7f8508e0ff37c88e7c3383e3cc087707cf8c6876e7cd8c6876c7c78e7c3353e54e3c3343eb4f3211a1f9ef1a1191f96f121191f8ef1a1181f86f121181f7ef1a1171fd6f9908b0fb7f890ce875a7c98c587587c38e7c32b3eb4e2c32a3ea4e2c3293e94e2c3283eece243391f42f1e1131f3af161131f32f1e1121f2af1619c0f93f810890f8ff8d0880f8bf890880f87f810ce87427c18c487407cf8c3875b1ffaf0610f1fbef950ebc3ac0f79f870870f75f830870f71f8d0cd87377c68c387357c48c387337c28c387317c08c3872f7ce8c28706f8b0850f59f870850f55f8b0cd87297c88c28705f8f0840f4df8b0840f3ff850cd87693ef4e0c30e3ee4e0c30d3ed4e043ac0fd17c78f5a1d587bd0fd30fd10fcf0fcf7cc8fbd0fcb0fcb0eac3dd87541f4e7d487e28f561d487501fde0f751fe63e7cfa70fcd0e9c3311f2ef950cc87b60fc37c98f421980f6b1f7ef9b0810f23f890810f993e54f2a1970f913e84e0c3053eecf2a1021f72f930810fb77c78f4a1960f01f061960f8d3ebc7d58f421960fed870f7c48fbf0ca87b30f1df830c987563e44f261950f8f7cb8f421021f52f9f0800fa77c48f4a1940f8d7c18e543033e84f261910f9f7c48e443271f0e7dd8e4c3023e64f2a1d0874a1fca3ec47d38e4c3017c28e443331f067d98c187b10f31f810e843017cf8f3e1051ffa7c68c187b00f2bf8f0f521051fba3e9ce043f1c3a60fc30fcb84127cf87d18800feb87643a7870cf831c3c38c8831b3c28c883803c988007f178f08f07fd78b00f3d1ebce3413b1eace3413a1e9ce341391ecc03c6f1e0011e84e3c1371e74e3c1361e64e3c13b0faef1a01a0fa6f1a09d07d178f08c07cd78b08c07c978b08b07b57870ebc12c1ef4e1412c1eece1c1390fbe79f08a07b51eb4e2c1ac07ab78908707a978708707a778508707a378108707e53ce8e641281ebce1c1271eb4e141271eace1c1261ea4e141261e9ce1c1251e94e141251e8ce1c1380fc2f060120fbef020120fbaf0e0110f1ae041231e6ce1c1221e64e141221e5ce1c1211e54e1412e1e4ce1c12d1e44e1413a0f9ef0a0100f96f060100f92f020100fb279f087074778308f07d33c78f5a0d583e883e783671ee4fd37e63f31ff85f90fcc7f5ffe8be03fa6ffbcfc07c17f5dfe3be13f2eff91f0df96af6afed3f25f96ff6e5f83faefca5719fe73e03f2bb5fbdfd2d7e43f26ff29fdb7e43fdb7f49ffd5fe6be03f06fe53f21fd27f0bfca7c07f09fc77f41f00fe33fa6ac37ff63fda7fb3ff92fc87e4bf23ff21f0df01ff11fd67e43f03fe2bf21f91ff86fe2be03fa1ff64ff0df90bfa2ff61fd07f3ffff9fc07fbeff59feb3ff1bff03ff0abfffd75cfd741be0af23590af807c4dc0d73fbefaf1158aaf7d543ebeeef1550f3cbee6f11501d58eaf757ca5e3eb1c5fe5f89ae72b9eaf717c3dc05738bebef1d58daf6d7c65e3eb9daf6b543b5fd1f87ac65733be96f1958caf637c15e36b185fc1f8fac5572fbed6f9dac5572ebe6ea1c5573a5fb398f3158baf5754f1d58aaf547c75e26b135f95f81ae7bf15be26f11589af477c35e26b11ff99f09588ff4af83ac457385f85f88fcdd720be02f185f0b587af6fbe6afda7e66bd6571ebeeef055878ac3d7fb7ac37fe7d71afe33bfd2f03586af30fc27f5f585ffc82ff7b585ff9cbeb2f07585af2afc87c1d736ff5df035858ac2d713be9af05f055f4bf88f82af247c65f39500ff357d1de1ab085fd75410fe2bf3f583af1e7cede02b075f37f8aac157ac7fcf57345fafbe5a7ded7d4dbfa25fcfcaabe5d7aaafbbaf545fa7be925fa5be467d85fa7abfeabee6be3e7d1dbf3a7dc57d1dc057335f33f88ac157017cbde0ab055f2bf84ac1d709be367d2df35582af01f84ae6eb98af62be86f90aa646f0d5cb5708be76f9cae5eb96af5abe66f97afb8ae5eb035faf7c75e0ab95af55be2e7da5f255cad7285fa17c7df2d5c9d7266351fabae4abed6bd2d7dad706be32f055c957a4af0b7c55e06b025f8fbe02e0abd1d7a2aff62bedebec6b92af48be1ef98ac0d703be127d35f2d580af45be12f93af4b580af425f655f877c155263f5a7c2bebebebabe8a5fc3afe0d7ef6bfdfaabf10bf2a7f107f2dbf901f9d138e3ffe337e3f7e32fe3e7e31fe3dfe317e3d7e30fe3cfe307e3c7e3ffe247c0efc5afe7aff3dff177f1dbf173f1d7f16ff1d3f1d3f9e7f8b5f8e5f8b3f8f3fc58fc78e2f8aff80ff05bf1c3f157f1bff153f1bbf14ff1b7f14bf1b371e79773bdfe7d1fb81e354ebfaa5e872f37550783892158eb770d40f840bdfed43dbe3ac757abebab0110520da8b55607eaeb5b26936d47857d0c2cd15217f823f3d99f1afe91aead532d0078d114752c56c0f0520a99d0947ab58249d507c8e7ab4fb0d8ebab01a8b0b07aa9493e2a1f920fe87b7d6205eb87547d6aacd65aa5cebe1ff0ab3fb5d6ba5493d84ac400cc0ad88058c1ea5343a2eae30380b07e9feb7bdd2a2ba204e4e5d7bc0590a6eab9c08eed0538e0a97341d11b745430b611c4046cdcb9a9e88ccbe0e0c52d3376b104383451830445e69800e030a587ccf8040b181c66797819912851c18168099551c8961436828ea414fdd4286c5441a238edb1218a1d649b1320b324a7375fed4e9659b34a0c34e0a67607cdc9c668d64801bb1932b393a8c2360c010117022e04def2955d2e22f56718ad1e500ff8ae2fb056b18615497d55d817d65b7dd55a63f5fb2a047582b18c6527414ec0af5ebffaaa432a507a141e3991190117028bb1d7645c426a03835524126bad9f58a58620d49a5901b6631f18bae0f8c91f68856a288ae15743570dab4b046bfdf96a586ffaaaa01814babe107c5510acf555a17cb45a619feb53e0737d63918305fc1a78f9ecfa2838ac0d7c55ac558195f82850b36026d4329548adb586dff7850c542771f6bd8e6a9d30ac53545a3522d6b0fed42508b810b8294004024a50604480920245794e60bca364f4c11a2761638cac2438847192b1c482840d223747d888a939a0e8a58608877022bba7c888132013b9b3a534e4948565c8d6f691738404cc0dcd009845a2c67567c8cdcbdcbc1e354eb3ba38aceab578e8405d889b5a74451485eaeb215534a00aa9b026a194c116c2d9eb93f9801bf96c87af1afed50f8bd003f5d0e755457c884be85aab283ef980be6bade0e7a5d657fd6a055d1a7cf5abafcf00096a75d5d75f0db2819fcba7c2c2cf85f4636bf87d619b1ad6fafd559fc51a7ee0ad75eaabf5834df01df9eae70aedf8ea17d6ea6aaa466a053fd81422f84aa0821f95af080cac35d4afbabe5a3f1057bff0c7e7c917ab5760553c029bd49f1ad6effb4226e0cff7552543a2d40d4226405d4032dfe11f0f35049142f1abe03e9581ea5a34406da30e16a95abea4bae4557ba85f3592c52a285b88857a0deb57b1401f5127a41ea9f513bf0facd54905aa00a8b01afbbeef7365f98a54a1ef0bbfaa04da800e802950830a40e07ba18adf0135ac60857d2018051aa9628c847c644224b5fed4f0a9eeba0e9a7199a9a2088647f5bac43ad521b503f0cc77919320590daaf5a78a4cc4af7ef5e783058141201058ebd7a8063dd0e403abab86af1a5441095c58be0fb604d60a7eb54e01ebf785f68bf92055b156b156a590090d5617a8df8f0bf6bd6a5daadf8706e8aa3e5f085a55a3ef569d884955ac20d05761affa61f966dfec4b020e5e07508754d7f7d5a0500686df01dff755570da1aacf510512bf2a5621528e7c4caf5a7d7cbefae403f4faaa006a055fd54b4df251f9907c443eb1baea57976a920fe87b851514c15aa554b036a9b1ea409d7d40dfabc2c25abfba54abcb808f480dbf2a8695ca0754c16f5641f0fbc22fac54beaf22f011a9b030ac4b75480dfa7e5e600d6161ad55ca921298eb7bd51ad8001151fd6a08b40484c19159adb528ac3f1576abacc84f0540ad403f2ea05aabf5ab5fad358949156b172f406afd7c6af88572febe1ad65ac30a41ad150015a8baea023b28aa9e5d79a562230f40a870c05387aae88d39c8a2368288c2e1ce50e3195f36bc88ba6317eb7068a2861c0e42e87962c31cf3344ee9198b9e28991967795cc00612a50bc603aa7c1989967c2912b2c58443d09117367eaa97a2979a2d631544cb9d41967207909914375931294e3bf801e58e9b224f9c9444255be3c0c889e684913552c0e766c8cc7f70ce2b959a4fac158ba66414a933cbfa83cca88928f2694955af7c28a313fe0d7a19a0a7edf2c61c7a33783232a32de8691bd351870b1a021e019f501316404d08c6c580adaf3d3e9065a911c5d84b81333e087160121a89edb0e52a414d08c6c7801f244421a8f1b920140038034a5d315817d814d70f5885e847d4420d2c8e1a22197ce02305ac018fd81a6ac43d6ac4180263a889a5464fa8f12112f2bdaa884bc416d814013ae00510c213d40c291a520426092d811109ed01416c0036e565051c025a81eda0060cc36489ebc7f5831a10c8854058036202d63016d67eba880dbc2e7021e0fa714dc588c488f810f918f0ba001404041702201c10c4396a12980aab2c2e8124e1526c884b28ac6012a825241333e2fa5e15bc8ebcc488458454171028863110043ff005c2409f1f2421f89ae055c010323f422fd7ab82aff049b824acb003c0231ff8d0c42d35427ef840c8151e816d01215c0304239c7dcf20719851861775b098d38b2aa3421b2e591e70408a59de61c792056443602f0c043046cc1e2ec2f8829682120c2f6091610d32bab8028a2484d05a6253c0855e9a027aee81003d76c408a38a23d27830800c0460c118311074a1cd8c18d00413698408c2830e70499098254dc81a6a9ca952b367903ef8c8000323060891718515514091041243a4800209b8015c50c118314c5d7061c5164ec0e0058d33bab8a20a289ec8dac104114240801e32c480e289268858a3e6ea98b80805e981e38d35b0a88289258ce84185025c1d6e001960500113972a4b4a8482bae0028b1a665061cdd50d2002a62e5caa0cc71b5d709185154c2c61c4103dac80c21a33113039506549ca13264a0a100adf03c71b6a648185155530b1c4103daca0020a0558d306ce4c060f2cb1050208982f4384a481a4cd0926585081520e0530010b0d103e7bc0413e414440be04c0b6421fbe1e3eaddae463022a551b5012d800680da07d48ea911702e001952834520df0192aa00050160e8909910521103b0008c98f90cf0be67a7d2e97288275d79a9f04b450f3f279f9844260515e3e609258d307628c6048ae1fd8943036a48631172ebc028340a1b08c106450e312f2bd7cc25a50922941a8f9a120a60b6b423ef89e1c112708abcb8a146a1c00b34528842ffc09c128e943cd014060a0ce07555c12a261f9e00b11009378b5e88ad880186a5c2e1a9935458664110184e00302a839c0a782189118110dba14e1c1d01f3ed458497d20705a41f6f2018344aa9084133e8085425c49ea10271fc491830f0363ac81f9f182900f48c422f4a2127eb918c001614844fae9f2a3802b83908117151094c00102107c48c10099d29aa01c9812a85003d4839a2184a026432a0548c02aaf03a27cf0f3a2e2fa810901a530410026f9e9c2879a9f175350199897235cbafcf8788995d15951428d91b016e5c7b53414e4fa01e26234802c353f302fb32713d488a04cacae00b87ec42a2e06ae6401eaf92c00f3e2fa791d10b4c5e72814e363840812051030800158035f2450e0831f98ede524c889142632af58f842405c02a3f8c4c2052c9697cfeb275c227e09a760a9e211b0483440c9079603a970a94204fb31c047ca075ac4003d81218547e191cb07350c0809b7880d88339fa310c91026601210d4d89654100a4c0a417103a301b0f084590a11441d397084f0618712d2748006a582ba39a7016420000b2898a00c19301178599ae2044981040060432baad873071d713c70250123040e78b9d9828e565600b83cb094a4480cc84545134b00f1466b071d707053c304480b2cb1cd204353993d81e8f124803bec8002670aad90020975a5cacfeb8d0a6da4f89851460f6f96a844314204e807f6427224092432b8ba31622260eac265e9091325050809090a6d408104021470078a134204e1439a0a289012858848e8459d3c28b8e240149f976b88119620220717583061831b6cb021853162ae54592056010113f0f911eab1767c78c2383e36c43bf58c8f8c6f0c1f3162617c5e7c5d7c4d7c4380427c54e1543daa3458121149d0019f91af482522342416f009555928e403127f3e1f18ec7bbdc42fac60adaeff27ca092c43a2e6bb7b1ad3923c794baececc9165efea83a409c9114a5ad7b2237bc88ed4f12bb0ecc815b2234dec64a14cabc422597b75245a9216256d4ada2a58e7788e52393b9236c57a3a32c31113644708203b82e5e464a34af24a5d5925d6012b16c9012bb624a3ee93199bcd868154948b0ad26217d99170f4b495e74dd391b7e44cd143f0bb36b0ec80270ee8e12fc914bd3a8b5e53679520a11f50c201e9baf2a6a3450f68d295577680d101326ba14c7b73e40eb5a709758e296a6f54399e3eb6ffc83e50fe23dfde995e743742fdb417f1f0c940e90e2a4cec157b9ebd1c0354a84ca122854a142a50a83ca1e2844a132a4ca82851a13265ca142953a24c8132e5c91427539a4c613245690a152953a4489112450a14294fa43891d2440a13294a52a8449912454a942851a0447912c5499426519844518a4205ca142852a044810205ca13284ea03481c2048a12142a4fa63c91f224ca13284f9e3c71f2a4c913264f949e507132c5891427519c4071f2c48913274d9c3071a2e4844a93294da43489d2044a93274d9c3469d2844913a52654984c61228549142650983c61e2844913264c982831a1a23445498a521425284a4f949c28355162a2a4a48446e9c9ffc832236655af5c92564199f9a9fd202175603bf8a9fd6c606dcd6e60adb5f6a7f24ff9a5403152b34b46d6f3764966001706242133406bbbf4639752a8bbb3f6c729958a224f6b53a8bb73ba52b974ac72a0c801070ea118202533c0cb5b94b469efc95a94bc52a95d427565cf7cb250a64d7ba64573754f7e966c3a5adda5ca91e5c8332086c152913bef9ec6b457252b52c57649779f2c966ebce76e0c739ae7c9e5ca3c4f330bd4d5e59e462a53a44481f2c44913264a45dabccd56e44a5684e79381922fcde5dda119ab94a04a52cc28a681249b92ed899fa0e939064917609994ec25b89b8e3a72375ad9d28b922989e65a2e7f04a1975f2ad59157ba72cca2bbe804371d75bc09b4f0aa4e2f5fd15d1e8f3c5374a90a1dafac7c87d3e864a552f2ca9e97dc9de3b5ba6bcb7b9f2cbac031fc202c837253deaaa88be27457d7dbe54ab2ec252d41972c6102a54913dd94dc9228527417ca142a4f52a030a112050a2a9744a5439352533752ed4cde1234ed994b52322a2d2f7a4f1edaabb2bb5b96a354cef2aa4e29abbbe7b8cb5d5d4a56913b3cf2b8743ce92e79a63328a08055b20e14d9f4a25050e21531490105ac0357acaebc147c2845684488c26104493e640abd845564baf434d125329d05335d67ff91b3730e7f4672184cc117de18e6deb3294b999b8e6999a8924c4d29943796280e8735eeeeb9b4547553140bc595e428951bcf9187c3a1bd5dafaa97d31255922539565d096eeff60220954b471e4a6ec11a77570211dc8893c01011c0c450d426a889016a30c288243c885c20e2428c1eb678f04553090ea8e1fa91fcb4ece9e8bb7b7a22cb5ac60c2c1befbc5d928d44b0cad196a3549a96f7bc5050a4ce8ef65a8d52d64c2daabbb7b4523952eacad6ac9996a46e3477ba6be62cd6ae342d4ada460b654aa13d8bf56475d7de279b9aa52dc7dc0344aa74f78cad92a6a31dd3516751acf16a375add4549a9d4eacad14aa1a3941d9d6e6f3752b0b4a4bbe5d598ab8b2a49a9dc98b3f71cedade0bff23b3080654e3d2ad3646293d2c4a694f4a44bbae499163d0026fa91643829ac4b85db8d3933ebdf1a009e273626362649bbd23c49abf2fe4ae3960d004d3a46915663bd62ae6e29ced0c14fade6c01507ac12343a122985ba60962438c7a450178cb5d6fe6c60d1e82e8e2a379ea98b8a8f0b26fe91850357a0ee4ec4c2012b362d7b66ce3660cbbbc3e1743b134c23b413d2f04292a23aeb8003b9137d2272601906e17f756669edd2d599397b774fa3546ebc67d9b3ba7bdeb4bc76693796e74d4bd20d0d4c6c12d4eea2d601076c2a15455e29db8dd2dd147e0c9609c08bce2c2f6862d2722373d362ad58343a9277411cf4b4619d697997fc5dfe25c3055f7863d5927bcff469095a9a649abbbb9d995b72734d949e2ed4bd4f4e9e4039b953a030819273a29b2225e7c409155d93dc4865ca9331a793a2b42497a2bd73496992296f8c93d5dddd6ecc5df368b9e629bae6c972cd63af796ed73cb46b1e2cd73cb36b9e07ae79925cf35cb9e64172cde3c035cf916b1e2bd73c085cf354b9e639e09a67e99a87e89a87ca358f916b9e29d73c065cf348b9e62972cd13e59a87c8350f946b9ea16b9e27d73c055cf338b9e611bae66972cd23bbe66172cd33e49a47e99a47c835cf926b9ea06b1edb354fec9a27e99a07e89aa776cdf373cdd3c0358fcf350f03d73cb06b1e25d73caf6b1ea46b1ed735cf02d73ce2358f02d73ce1354f02d73ce035cfd135cf77cd03806b9e7acd6374cdf3b54c732d71d7d2836b39806bd9c1b534732d39b896195ccb0dae2506d752836b29806b89752d2fb89668aea505d7f2ea5a56702dadae2505d7b2772d27b896e9b56cba96e8b52c732dcf6b29c1b53c732d03702d79d792ccb534afe5986b595e4b31d7b2ea5a86b996bb6b09e65a525dcb2fd772ea5a46702dc96bc9742da5aea5976b19752d21b89650d7b2cbb5bcd792cbb5d45dcb2dd732772db55ccba76b99e55a8ed7f2762d9dae25962bd11a572228ae446a5c899eb812a5712572e24a64e74ad4c495088d2b111357a233ae444b5c89ccb8122971252ae34a14e74a44c69528892bd118572224ae44625c898eb81285712532e24a04c695a8882bd117572222ae445e5c8986b812d5b912c1b91275712512e24ac4c59528882bd116572220ae4474ae443f5c89b4b8126d5d89b2b812f97025c2e24ad4c39568ce95e8cd95e88a2b91d695c88a2b51d695a88a2b110f57222aae443b5c89a6b812e9702592e24a94c395288a2b110e572239572237d7181ed71811d71802aeb121ae313dd7189c6bec8e6b4c886bcc8e6b2c886bac8e6b0c886b8c8e6bec876b6c8e6b6ceb1a93e31af3e11acb738df5708de1b9c6de5c63715c635ad7d801aeb1ac6b0c8e6b8c876bec8d6b6c876bcc8d6b4c876bac8d6b2c876b8c8d6b0c876becce35e6e61a5be31abbe11a53e31ab3e11a4be31aabe11ab3738dd1708da1718dcd708d9d718dc9708d99718dc5708d95718dc1708d91718dbd708d8d718db9708d89718d19e01a0be31a6be11a03e31a63e11afbe21a5be11af3e21a53e11aab738db5b9c6bab8c652b8c6b8b8c650b8c6b6b8c60a708dd1b9c64eb8c6b4b8c64cb8c6b2b8c64ab8c6b0b8c648b8c6e65c636caeb12bae31025c63565c63235c63555c63225c63545c636baeb129aeb110ae3129ae3110aeb128aeb10fae3139d7989aabd8c45534c05564e22ab6701595b88a2b5cc538575185ab98c4556c731591b88a295cc523ae220a57d188ab5880ab58c4553ce12a0e71154bb88a70ae2209575188abc8e62a06711509701581b88a235cc51faea2085771eb2aaeb98a3e5cc510ae620f571184abf8e62a7e7015b5aea29aab987515d35c451eaea207577187abd8c155d4e12a72701571b88a1a5c45375711eb2ade7015d15c451baee2d555ace12a5a5d451aae62ef2ace7015d3ab28c35544af620c57f1bc8a305cc53357f185abc8bb86805c4330ae6102aee117d7f08f6be8c535f4e31ad6b9867d5cc32eae211fd7908b6bb8c735dce21aea710de95cc33caea116d7108f6b98c53544c035c4e21aeab98673aee11dd7f08a6b68c735b4e21ad6710dabb886745c432aaee11cd7708a6b28c73594e21ae6b986515c433cd750ce358ce31a42710d0f700d9fb886705c4327aee11bd7b0896be8c63564e21ab6710d97b8866c5c4325aee19d6b18e71aae710d93b8866a5c4324ae611ad7f0886b68e71a1a710dd1b886455cc333ae2111d7d08c6b38c4352ce31ac2b98663aee102d750cc3554e01a86b986095c4330d7f0e81a7eb98600b886115c43a36bc8740d8baea1976b68af2104d790760dbb5cc3d935e4720d935cc32dd710c935d4720d8f5cc32cd710816b78bb86075c432cd790e81a3e700d8d5cc32bd7d0806be8c0352c720dad5c4322d7b0ca351cba864bd7b0806b48e51a0a5dc329d750760da55cc321d730ca3514720da15cc3a06bf8e41ac6aea1936b08740d9b5cc39f6bc8e41afa5c43a56b08bb864baee1eb1adaaea1eb1a265d43f11ad6ae61780d1bb886e03564e01a7ed750c935acd710e91afe7b04f07b967ecf05bf87caefb1e0f74cf93d15fc1e29bf8782df13e5f74cf07ba0fc9ea6dff3e4f794f93d4e7e8f04bfa7c9ef09c0ef61f27bc8fc1ea5df33e6f72cf93d627e8fedf784f93d49bf07ccefa9fd9e2fbfa781df13c1ef61e0f730fd1e25bfc7cbef41fa3d10fc9e057e4f97dfa3c0efe1f27b12f83d5b7ecfd1efd1f27b00f07bb2fc1ea3df73fb3d45afc5c76bedf15a66bc5619af45c66b8df15a5ebc569dd7cae2b5b078ad39af75c52741e1b5acf80f84d7aae2b55a782d2a5e6b8ad792e2b5a2782d39af05c56b3df15a4ebc5613afc5c46b2df15a4abc569cd74ae2b59078ad235ecb88df2af35a45fc57c36b11f11f015e6b88ff6c782d38ff4dbd5610ffed5e0b88ffc6d7fae1bf0c5e6beb3fa8d7f2e1b57a78ad37afa5f55a59afc5c36bedf05a3abc560eaf85c36bb979ad1b5ecb86d7aae1b56878ad195e4b86d78ae1b56078ad175ecb85d762e1b556782d155eabcd7ff7b50af05a27bc9609af4580d71ae1b54478ad35af15c26b81f05a1fbc969ad74af35a1e7c12acd7eae0b53878ad0d5e4b83d7c27a2df3b5cad7aa7aaddd6b51bdd6d46b91af25f55a51af05f55af7b574af957bada7d71a5fcbe9b570af3580d732f35a19bc1606af2580d7bae0b52c78ad0a5e8b82d79ae0b59a5eabcc6b49f05a01782d32af35e6b5c4bc5698d702f35a5f5e2b82d7627a2d2faf05c16b75792d2eafb5e5b5b4bc5696d7babd1696d77ae0b5aebc9603af65e5b5aabcd6d26b5179ad29af25e5b5a2bc1694d77af25a4e5eabc96b2d792ddb6b25bd56edb51a782d065e4bc96b21bdd602afa5c06b25f05a47af0580d732faac193e4b86cf8ae1b360f8ac173ecb85cf32c067b5f0592c7cd60a9fa5c267b5f9ac143e0b85cf2ac0679df059267c56099f45c267b1f92c027cd6089f25c267adf9ac103e0b84cffae0b3d47c56d567ed3e8beab3a63e8bfc2ca9cf8afa2ca8cfba9fa5fbacdc673d7dd6f8594e9f85fbac017c9699cfcae0b330f82c017cd6059f65c16755f059147cd6049fd5f459653e4b82cf0ac06791f9ac319f25e6b3c27c1698cffaf259117c16d36779f92c083eabcb6771f9ac2d9fa5e5b3b27cd6edb3b07c2d8fafe1f1353bbe56c7d7e8f8da1c5f73e36b6d7c8d8dafddf9da1a5f53e36b697ccdced7d0f8da195f33e36b657c8d8caf8df13531be16c6d7c0f8da175ff3e26b75bed6c5d7b8f8da165fa3f3352dbe96c5d7b0f8da9caf5df1352bbe56c5d7a8f8da145f93e26b517c4dced7a0f8da135f73e26b4d7c8d89af2df13525be16e76b497c0d89af1df13523be56c4d788f8da105f83f33521be16c4d780f8da0f5fdbfa9a0f5febe16b6fbea6f5b5acaff1f0b51dbea6c3d772f81a0e5f73f3b51bbe66c3d76af81a0d5f9be16b327c2d86afc1f0b517bee6c2d70cf0b516bec6c2d756f89a0a5f6bf3b514be86c2d70af0b513be66c2d74af81a095f63f335027c6d84af89f0b5355f0be16b207ced83afa9f90fcbd7d2fcf7c0d73cf89ad5d77a5f43bf76fe27c1d778ff91f99af9df99af95ff05e06b555fdb7d8dea6b535f23bf26f5b5a8ff3af89aee9374f0b5dc7f545f7bfadaf835a7afe1beb6e46b03f89aed6b66be96f4b50cbe56fb1a065f6be06b02f81a035fbbe06b4abe66c1d790be56c1d716f81a055f53e06b137c2d81af357dede86b65be0680af49f035a3af05e06b455f23f335fbb5315fa37d4dccd7665f0bf3b5245f03f335245ffbf2b5235f8be06b087c8de96b077ccdcbd788be06c1d78c7cadcbd70cf81a97af15f9da96af11f99a96af0d7d2dcbd70af8daed6b425fc3f235d9d71ef8da90af5df99a90af39f0b5a0af59f95aec6b55be06f4b5a5affd7c8dcad77cbe36e56bb0af49f9daeb6b51bee6fa1a94af895f7bf2b5f06b4ebe067eadc9d7beaf31f95afd9ad2d7fea33c7fd4c51fe1f9232efe288e3fdae28f0ef04774fe088e3fd2e28fdef8a32cfec88d3fc2e28fdaf8a3397fc4c61f5df14777fec88a3f5ae38faaf82335fe888a3f4ae38fa6f8233b7f24c51fa1f14751fcd1197f24e78fccf82328fea88c3f7ae28fc8f82327fe688c3f6ae28fc4f82326fe288c3f5ae28fc0f82325fee88b3f8af3475efc51127f54e78f90f8a2355f14c217a5f922f38b3cf8a2f28b3af8a2aa2fe2e08b765fb4c117517d91065f34f545585f447e119a2f92faa2ab2f8afa22ab2f82faa2de17dd2f4abf48f745e817e5bee8fca2a72f3af345e317f1bec8e98bc47c51931f8e2f6ae0a7fa22061ec4e28b14785a1e4f0be4691d3c0d90a771f0b4043c0deb697f3c0dcdd3fc781a1c4fa3e3691b3c6d8ea769f034399ec6c6d3f23cedced3f03cedea69683ccdea69673ccd8ba799f1b43a4f2be369533c8dced37a4fd3e269e9d3b2781afa342c9e763e6dced38a785a134f3bf334269ec67bda124f1be2694a3c0dced3e23c4deb69423c2deb69413c8d87a701f1b41d9ef6c3d37478dad6d372789a0f4fc3e1693d3ccdcdd3de3ced85a7ddf034179e66c3d30cf0b41a9ed6c2d368781a0b4f9be1692b3c4d86a7a9f0b4189ed6e669303c8d004f4be169233c0d85a789f0b4023c6dcdd34e785a084f33e169203cad84a77df034129ea6e6696c9e16f534f369504f2b9f769f56f534ddd3764fcb3d8dea694f4f9b7adaf834f2694e4f937a5a054fc33d6d82a799795a99a761f0b4003ced82a771795a98a76d791a98a76979da97a765795a044fbb3d8de969589ee6e569529ef6c0d3a23cedcad3a03ccd81a73d799a95a739795a95a73579dad2d3983c8dcad3949e36e5690b3c6dc9d314789aed69093c2de969474fab3d0d004f6be069464f63e069454f53f234fb34a4a715795a92a711791a92a70d3dedc8d30a781a024f137ada014f933d8de869afa70d799aeb69429e263e2de869e1d3624f039f06f4b4ef693f4fab4ff379da4f83fd6ccfcf06f999203f0be46780fc2c013ffbe3677efcac8f9ff1f1b33d7ea6c7cff2f8191e3f43c0cff4fcec8e9fd9f1b33a7e46c7cfe6f8991c3fcbf3333c3f8be36707f8191c3f7be3676efcac8d9fb1f1b33b3f5be3676afc2c8d9fd9f9191a3f3be36766fcac8c9f91f1b3317e26c6cfc2f819183ffbe2675efcaccecfbaf819173fdbe267747ea6c5cfb2f819163f9bf3b32b7e66c5cfaaf819153f9be26752fc2c8a9fc9f919143f7be2674efcac899f31f1b3257ea6c4cfe2fc2c899f21f1b3237e66c4cf8af819113f1be267707e26c4cf82f819103ffbe1675b3ff3e1673dfceccdcfb47e96f5331e7eb6c3cf74f8590e3fc3e1676efe357e66c3cf0cf0b3167ec6c2cf56f8990a3f6bf3b3147e86c2cf0af0b3137e66c2cf4af819093f63f33302fc6c849f89f0b3353f0be16720fcec839fa9f9599a9f79f0b30e7ec6c1cf36f899063fc3fa199a9f5dfdccea67bd9fa53f437f76feeccccf783f337f56feacea67bb9f51fd6cea67e4cfa47e16f533a89fdd9fe97e96fbd9d3cfc69f39fd0cf7b301fccccccf32f819063f13c0cf2ef899053fabe06714fc6c829f35fdaccccf24f859007e46e667637e26e667617e06e6675f7e16c1cf987ee6e56710fcaccbcfb8fc6ccbcfb4fc2ccbcf6e3fc3f2b3077e76e5670efccccacfaafc6ce967547e36e567527e16e567507ef6e4674e7ed6e4674c7ea6f4b3253fb3fd2ce967b59f35f033067ea6e467483f5be0670afc2c819f1dfd0c003f33fa59d1cfeccf683f9bfd2cc9cf90fcecc8cf10f8d9013f23fa99919f19f0b3223f23f2b3a19f15f033a19fc97e36e467427e16f4b3d8cf807ef6f3339f9fc17ef6fa99eb67e2cfc29f813ffb7e56657b1e09142f1be4913cf132411e89132f4bc02359e2657f3c12255ee6c72389f3b23e1e49122fe3e39120f1b23d1ec9112fd3e39118f1b23c1e49112fc3e39110f132043c92215ea6e791c079d91d8f448897d9f1488278591d8f048897d1f1487e78d91c8f64eb65723c121f5e96e791f4f0323c8fe4cdcbe278245a2f3bc023c97a191c8f848797bdf1487678991b8f448797b5f1487278191b8f048797dd79246e5eb6c623b9e1656a3c121b5e96c623a9e165761e090d2f43e391ccf0b2331e890c2f33e391c4f0b2321e090c2f23e391bcf0b2311e890b2f13e39118e065613c92165e06c62361e1655f3c92155ee6c52351e165751e499b1f12e487f6f8a1407e488f1f02e487f2f8a104fc101e3ff4c70f21e087fcf8213dbf05c50fddf15b4ffc901dbfe5c40fd5f15b4dfc101dbfc5c40fcdf15b4bfc901cbfa5c40fe5f9ad383f84e7b792f8a1387e0b891f3ac06f1df14370fc96113ff4c66f15f1436efc16113fd4c66f0df1436cfc169c1fbaf35b42fcd01abf15c40fa9f15b40fc501abff5c30fd9f9adad1f42e3b77cf8a1337eab871f32e3b7defc5019bfa5f5436404e428954b82822a6351acfbc546f2c632b6013b9e28b98bb2710173d352c6de74cc95664e026b739a0295f69cee485af1d0dcd4a6bb17352d8a75a9ac8532cf5b5e08acee5e742e4d5cc070d9e2454bd38d4cd304649aca8c21d3c40582264e4af80327a114a12671849a04f1bb166af246071b9ac4d064059c182e60705bb858c0d4e5829b0412dc705c9a2ec8c2054c9609c66c69ba8d01d3e5499426314c4d9c3489611273e30266cc982c4d28882ad3dc3dc92d29b9e395d19da3ae1cd3323735adc674dc727958e92d4d31ba6b9a125c8d12340d299d709a4a2d8182326bb71c331c1df937c1950d4d7a7b69399e6394d59566cef24c735781cf8f0d3d2fb9cb599b8e5d7c7ed0f1693cc72aa95c799fec69429550763792b9a60bcc58955758e3eebc56e63d6bd3ae22f910f83c6aad6a71a5f103bd851ae8e16bef92dc9123d416a1da0c3d6d299a8be62e2de16e3a5ef24c851ad06d8b106a60cabf1b2f2a8450032e2106e8b04bf6cd45761d8418a892a2b949e3d91b8bec6ebca81d25e8dd6c390a29094428844348c99b5f490deb52210929497f9b8e16cd2da1fe7321243c8490e620c179bb64d3d14cb12e550942930b2db003d294cdf36a7077baf1eeac995a28520a2d2f6f8c29a664baa1a72d47c516c5e624297775662e29092b25cf9157c30a24861da1191e2105e8f86d3993444bbbf495a3ab8d990a5c4b481e1469d38bba16b04595e67975abcc32d6863ef5a472e57866716515307b7016e651047b8d41b1caf1eacc32820ae506a1a33925b92b490a9638e2d9aa17b70cfe85a472478e67da934a6d95dd489e6969daa7aade9993427b3c7b75668933d392c4e9ca9b43afee0ac212a8c5da9555e768af95f934daabbb4c57678ac9b2e5926793d595e3d2d25355efd45277f81d393aa5bd2aa76b5374dc5da86bb5c0bdc23252839eb6d34cc7f3a6a49051ecb042112a3242c8e21942885686100d8373423334f7bc5050bd277b77a6d495dded482828180b42490299cc8f114ab2c1ed2b849094f14e6c4f6c4a4968ae541f4e5657925a982a14a75c7da05ed9ea489b6df7ecedc8114a4a08013d0b2100467560a28510489b582b96b40e58b14a180821d0f4606e6198b470d922011708b83489611242e081289751248a4bc9272104860821f0539a244aeec65c05e8984129748013b39c22a3e16b932b13ff080b1179c99517452f6ecaefc14246e294972a373e55252d392a03254fc2420604b2546ecce12e79a61b08192082ae894d8a4d29292dc973b44a2a7b47fde3420608f5aac8a069daf5a046344c15d954a6cc695e2d52b9dbb4237365cfd4824e706e3175bd32bcaad1d6ca5839cd2ebbdda865376a595afad19126054b4b9787c3fd2c2de1d0abc39557a723a570246fc4f1d0a525a8dd45af3469c2e434cf134d8a831ad1aa2af2a217c59d66eeeca1e33dd3265798dc1c53ed5ae1d0b47762e5c63367565d9da9eba157ac2c2d2d2d5d21c3e3ddcca6a5a5238b8e763c7b372be3d91bab7216e82edac39da9d20981776cbafb648540373c9e10e864130291de86eacef14ae8d3938435ee9abe36e76875429fd44de85312fa8484aa1c5bd93bad99925728f964ee9eecc8ab9212aa3ca16adf7677a4d495157a4eefccd91435a5ec956a125a0a4d491b559216259f4829f3e459ac1d19a191dea6b3a6983f7e9b35c5c0f0385d79d13d4eafc3a5b9b1bc7b944e2fbaa7e2aececc5d79c2e92edabbe205379e23ef8a6ebc52371382097623ce8cc2e906810952c682d880c31a7982540962c4e6644a5d399123af762f9475e291a91394696b4ebd34373ad97ba1ecbd50b8dd48a6e7bd5077772fd4946ee491e995db85e942e14a9344d18c5581e0d28b06e2051708d10f089e07240e3ae200693389bb56e3dd01a2c3a5172dcd275247e200819509a822013c748c45b12ed5954a13408634a76c9900a23f49f4eaf45c5d317fcc59579a4f162bf7c7ed0f3536ddfd83cc1f763ff0942418397ec0b01fbc1f75a4ae1c737e602129f043b6ad0f38ce5bee7a5625932dc73e62f8f3ece5fa70fad13e76631f5bcb8717ff960f377c38f181b4071ede1e70505203b21cd3f25aeda1e6df5d9d5965967b58b0c79472823dec65f4e0a119abf478f33c3dd854dd94d483cc5fa5e8958a22a56ed4a8c7d17f93959fa5a526db74a5c9ca95262b4d2898e04a53992d78b4190f293c94fc40801c04b049cf8bf27a0870e22140490f1e8fabba2989c3daf178e38d1ac9a019c3d4a6f4aed4d09f262bb52b5703b2cc93b9cb82660c73abba29132ae60e366f43cf0b25758797ff0ea43bde76da01078a4cb283cd6f2393ece0d9ecf0f236546787fd56879eab01945932d551e7a43ade7c1dbcb40ea4b75deaf019259796aee4c8744ccb5874b44b4b4d56ae4860257729a0436adc3d717460394d281c1d45dbcc38a5e798a2e7e55da1c0d6be98257ab16473c030c794dfc6ebf5ec69a2a8b99b430e3972e8de769ae7796d4a5a28d23a518d71b2f7c9ee76e45595bb8b2a49d4ca1194878e45478bb5bb3cf49ea8595a5d79b190ac1da34ab2664b338f0f792c70725282f584a4440a1da590f210e129c3e269633b4da8fb646b58bb73bce87865af54131e342819068f05afbba75946917894de824716471c738a74978cc3cd6fc72a320e0bb6a1564e289a31cc68ef932dc7dcd52d6f1579f270ba9d89bbb2b474e50a939503946133e3748038bfcb1d0025750718c0799faacefb5475c35c29c713829aada5230ebd38f4ea76668adeab5ba623ee4a5ade2a33ccd252d39559c201c24551f49e3add8d0a1d9ba8d031bd0207ecbc56e67db2e7b5baa52dc7dc1b70b6e9ca1b7575cbb247858ea954d31b1650a1e8d51b532ef306d16b71c30fdd75038e8eb417ed8db9fb64af046e8cd60da76d3a12ca0da41f7924046de041c7d4ea4ad3963da88bf66e62a8d0b1894d1b16fc29d4886b43e9db80b171870d27c89377e5568d62ae5c21b3b4b4db8d5ad8b8ba62f690c159dd9377def3a6a695ec4e9d6db23b46dce18d6695bddd2163d3dda83b760d3d9be9b55a034e39ae81e6ea96e71a646c6b10a971470d38662e77513578dbca939452c3b4522335ad72b734eec0d03349ab8b8e526990f93464a81d3f7e3b739aecb8517379bc9e1d0bec9862d0f023d7d39566799a69131a51251a6f7e4b810c8d363f1a64de8692bab41c53b424d120dade1daf8a44533457cc1975b6e94e130a6a1c9bce70f36942a5260567a849c9f1caa267387d46917f826566c8d9c61befe9644fd33af59cac5454cf3ca5d29a0ebd52694a5a33b558bbb434c3cd5865060f2d2f6aa9c62a0bb5bbe82dcdf0623383e85a61a5659461ef4d4d2b1da9b365bcf96f8ebc4a6fd5886a2943cd5778e6c90b03754f9e7992d9ed462da96975e58a143a7a4147a928509a782183cd9361010e2b57dea8f3565d32ec8fe107ce4caf559db237c61b5c8a8e5063a8b199711ac38214257754b971f734c6946d669cc6808981c766c6e98a21679c18302c062fbd6290494d2b31ec890b43cf61c4c14ac9d39c1aab7061bc80628d65da33cbb397a2176bc41a775777539302acdd6e6cc2daedc65457dedd9892bc317705bda94981929b9a14d4aa7a3a0990ac98565aac4a3367052d4df20a55ce04739ae449e63449acb1bca949c14d4dab8b35a6374aa7c3e96e3ade13775e2b73b7334fdd395e8d5fd4d9a15574f7f6059a14cd2ded8e4ccb9e3daf9569d1ddce3c6d3a4a9155d051eaf2ca7ce1f4dbaeae982fa66cf3c28f4bd28b395eb8d9a6f38277f69ece9e69a14c2f6abab207656f3a8eb7022f7cfe002cab13c79696977765ee2c4a9a294aeacacbabd3c65647ea6d5726bac079eb60d946a6ce10345757a6a3c54a4d6b4d3157986c0dcdd5954cbb113579726c669c70d7caacea02863477a7bae07541a68b056c669c76e3f9a42bcd272ef094970b39e3dde56cc9050c5c7021bb6d71c7764f93cc163098656a96e416166c92a999da11edd9bb856843cb3145d39e69cdd2de5c49a2e598a353a7ecd17193a274d0d061fa2af29e3cdc4dcdb2ec5d5182145592512529858e5e76bb518b16706cbabbd382b716582e7b5157b7d442d6cbdd5b1665603da9f95b16166c3b4ddb248b2d4a62ed76a34d47292ce660c1665b182c2cb0614164922569e7e0d96695dcd3ac42b258b7dced462d73dcbc59dee690d986355e45912896ad5953cc9c279b2e50da2be6bc83bae778450736ddc53aafee3475e7bdb24d68c6aa2b5752dc7dc21aab76bb31875ef2347156d4b1c2cd5f2bd0d8cc38e17637578e392bb63c139c6e674aa1f7944a7164baeb55e1d0f14a5a9226ef56914de595baba72433386b13574379e661572be8a16bee8956aaa4256850f1565ac2bcd38954ce8d2921306f6a2bd1d2fce98d2d4622f0fab890a18ae06e4694aa5bd5b39011568dec2a4a59c800a324f852d7b26d46952f114713eaa24edd2146eb44cd1fb1b758e3b281307b51ba5ee13ae34a7402a4d9c4e374a9100148a47e274baf16a409619d3710b9a318c14bcde9559dadd8ebc9509238597ff16851f6fb351c8d956c1b2289cb695a6d55d747cb2226f2e0aa5ab2b470e9c74946a92e341d984ca9123cbf57450ccf9b4c7b3b66b236dad84a2cd434146ea0685ec893a54a77995ded262e5ca2e4d4fa8f974a47a828c549313816ccbe5cc9d13563881c6a633c9f3f2ecd528955e141d79161da5cc1a4a4aa566796d95d38412237342698b2e70a5d226cab0a119cdf4a24d34e185ca5896aaec496999c096a4454b530c136f666282f7dbccf36a504ec0c4941d395a8dbf99654bd4f96d76b4e8b51aefae5c02865172090bce8b92d69aa9bd2d01fb6d76893d479bdea89b1261d8466b4daa312d93dea8734c71baab049bd3ab8494cd8c93125374650fa7c4d09787d554e6f2b0525c5449528d296a45a6b95177a9c614c5e1ee8e774f5c8a8e3bddeda1288993ca993c2ee988bb1aa5d2734c519c54cee45db467a6f79e5055e609158768ac279b5ef496049eb424ab9298a3bb49b8297b5c962541e6bce9b82391acaebc3cb4872621b329b9271412736c4a4e93b41aa5ee134a56bdb1e92e55cedc21c1c6a6bb57a354bab40c092cbf9922591d04cb8ea0e38fd0417604191e56aa2b491b758ed6a62bcddc4553f424a18e50b2e98c2883d4dd3367c49b272378a3ee9e668aded388296fbb55266ac4ab8838bf0d45cd9d4d7ba62dc71a177b65eeee934d7b4fa82975555584d3d3d3d5d59c9c7a284adadd989a4d4560b15974bc8ab24d097a2f94b545d92e92cede2a93883affba9de945b733a588702315454a3d514084d3aea78bb222024977abc672b6adbce81072de8d57e3a943c93345efd93b43ee8640a3b3bb914ccbdbd399a9bd32774378799b5317346318278b5e0dee3da1c40c4194744f1ed639923912ea96370b1c3a763b92eacaa6e5adc21a794b9a745776a6f974ef0985bbbae5d252538a5e1d1c3436334e650f0e1938f6ef09a1271daf0e27849c6d669c74371d73f7e45d1d4e8836bf1b71bc7ba97042383de1d28b0a3165218cd8cc389d174a021d93046869a2e33da97226181d99963db36a2caf06e609359e291a2e68d4b883baf7840a62852d8a558e55d6349baea04b4b4d56d0985970e8b81b7341d877bb11170410655891e968459e5787434738239b07c2492a978e4fb89b3b4d281910b2b7ed9e4814357955a4451748496ba2b676adc81dd6fdf2831edb0f715012eb5259534c9b74cc913b5e4f27c10fb8b76d61b2a7998ea61814eb7e595a6afa41e907d858974ab6c564b79a7826262d656eb76a2cb7d89c84b5dbb2e0710bd396d257f572a60ecd1846cf9bd19116ad99525718589b0f704af26a40a23ea8b15c7cc0b20fd6f670a724abc61ee2dc439bff1ea47ac0921b79680f4466ca23cf1c7a7577d99b377f14f9844a60d172bc55b68666acb2661a46cb1ba9375eaa4e136a37565994b46f885e473269e9d19ab3560d57031225ab483068c630537abbab33ab463157ce4b06453386595a6ab2b52ca9bfb62c4be99f073f78908366acc2a51795f1a0e6bf5563c983053cd81df0d8cc3835b1c2ed10c7896c0735bf831728d3ee80f450a6ddc175495ad4be91e940062db1c65d0d037bb7e830c5f6457b1625edad1a7370f36fa14c8bea6e0e6afe1cb0d852d29aa92d6f65c2e44084839effd1a2a3940c873a29da1ba5d05c8b431bf4bc696e444b724c4b3327c3c182573225a94bd304481607a42b53579257162b2577e4989e66952d49bbdb91296a51b209878a75a9ac5491e34e8b1b375791e30e4d54394ae5dc7cf924d3a5a5a6ddd8744b725732e9aeaeec9959a4d0d14b79774d52e828659ee7454da892c9842a49dc0d6f78637993dd8066b7eb41a1e8cde57a77c7ab3273379091b236a9346d39467603d2df60cb9b0d789caececc2d39c96c60737557e66e27b34129eaecf16c5449dea79bbba735cfab415289924d35e8b1f7c99aa9ddedc6dcc9b3e74d772494ac8637db6e9599b3e9ae37425d5d526996572abd3a3247f6cad4b0a6062cb9cb432d949965190d07a0e100321ab66c143859a77b9a5a76bb314772b15da934379e299a6bcdb40bd6fdf2244aaf89931e8a75a99e7a28d58975bf605daa2b58f78bceccd1300547758e5534a0376ae4e178e395c2a517c5f30c716c669c505cda3367a03ac7aa7bcec03bbd689265337891cd706433e3848684ba270fb7db91545c9a78668ae64ab344cf5bd5434b3397963d530bd495004dcb4be6c674dc32a6a36e3cb95cc1e976a60c4e9bc9e0c420036bbbb971c7b354a6999aba1e6a6f32c0de8686dcf1783dd4a2a46e6762a5572a979257a84dd1de943593c1794d5d0fc520037ba59a6260c39aba5e197ba5d2f3eaca5be6ea96579aac408d01634a5d5dd9ed462d57a248a8d2d462d1d13659b182c6ccb2db8db918d06cea7a680c5e70ba5bf6906c669cd01167ea7a3188a717dd92a2378ad449a163dae3a5bd314b4b52e878c5cb7975e395d299516a62a68913345757c250ff3a2fb8d95ea95447ca5e50732b13e685ab23712f28fd6979adb83059e6421eba6b659e3cde68cf1b559a3b6b9657aa09eb52b9d0c53a261d8973a18daec9050bbeba9509937493b900fb1f6f8eb43a6f197b9319608ecc0068beca3ca1d0dd6eb4ba51cadaf22633404ada2bd5d4c29db729d1ddf34a5d59d486e622595dceb4666a7bb61cedad0536ffe5a8d3dd5af0f2a3b216600f679b85b2297a7b67eec98205a3a3bd52a98c0598998e56b6421d34255128f34a35adc0e6d1052ebabbf696e6ad3257208375bfec5690e9aeeede1c9a5b359656853b3a264bdaf2265341cd8f64ce44d1b134497b5e9d8eb4b7326154989293b5b9f393572a75335a33c5ba54e4d9d446aaea34a1cecb3b6f7935c6deca84c12ac7b4419242cd34053ffeaa5e158966acb2572a45754c231a4696421ca8dd45532548165de096829ac7ba5f6c7965965465cf96e54d9602965b993036a9344b190a783e1da5ae6e494691e71814dcfcf7eca53da892b4e708859256860216ac4b950465daa8d29e26140a30128a3caf95cd9152bcf18c32531ed6a9a50065dcf2cab4684a628d55b702b4f977bb1e9445edd52ded6875bad19ae94d568029a3e8dd5994b4672f5745774f7294b2f6a987da2bd5243bc18f5f67478b8e57d65ea926d909a88ec9deca84b1e5b522a3ec954ad11425d15ccb23a5d07b5a7ba59aa04cf3bca2631ad12aac4b85bbd264654cc72d58f78b4e77d3e94632ddf5c24099e6c9c39db7bc327158970a7775cbaab1bca999e2b02e9509306c33e36482547a775767c294b41ccf28137425946133e354029cff9e647acf12d06c33e37473e5589ed7ca8cc28da415ae042c633de14a906d33e384bb4f3833c55dd4e499278f843b235a8533539c4e3792f0669b1927b434491425abcecbc3a1b84b655add534602d436334ea549ea70522979851b71ba7b9ab89b8ef7cc2d2d396160ef2d73a5c9ca6976217968ae8e29775b5a6ac2ba54b81cb97beaf17057b764c286061190d6ec4240e3a8923cd332385e9a1b7955a696a5a5264e7a5770e7e5a119ab4e3463d5152b68c6aa8b66ac32cba62a10c09c978c0955325ddd7846f1269020454730644a964c1a90bbb124bbe448b424cf140d17ac1d8f77bbe828755e32e8d2523542a6a64d9abbe769e66c6a96a8b550a4d5dd34777968ae45497ba59a6c1527dc69e29c74570a254b12ca9e57b7237b59d0d386aa49038425537354258d11a7e82d71e60985cb5d1eba2477add2c050436852995421559479a0c57953125735de33451db0627564159a2b1d131913aa643acd74d4956398dd785ede98dd58759a62b04632a618f45ef0ebaed579d12bc1bd67971c4a562d2da1e5a532d3a52514eda5635ae6e6ca713766414fdb6ee4608e6d36db02e9ddd5d2f19e513635c5581b6a77e3b8ebe576632eaa2475656f6977adee0eb724e340c6c10f4ba1a314071bfce9694aa1d634d3a58b9ed7ea9eb664424f9b143a4aa1a76dc9122974942a7b4b4be969f2783d1477abc6136a69e9569169d93b3700b341041b44f99dec92934d476b7537e5f5ced3d462668aad32a587018a3592b9170a87628d3c141d775a5074dce52ab8d2a0008f15a2c1f357a0a9e08a897763c586779e5ca8c6fce6a512a4653d3bcb7a612ceb71b1ac37e77fb97ea72b49aad224531235793a3377b74495a44e3792892ac91d399e4d3bf3a90aab0c981fb64434058842a11e362573e48e87e68663844f504d854fdc1e740dbafef0e33be303e36f8c8f8baf85f0a166f893e12f854fcd07e57bd2c007d632b47cada281ab0da71f4d92a24a5267e6ca9b34a6a34e8acbcd91bb3255e6d905eb6cfaa3c29742472f57ace42e0550a6792e2d5df24c713c744c475d145a958eb8b4bca8179c98264e7a56260f8766ac3af32271633a6e912a99b6944c62bc40b15a5a1ad3718beea628899e97cc147cd131fd633a6ed18dd78b6ebc5254e75875de74bc6ae2a4575e993a9ceea2e8cd9927efcad5995a28b0529a24eeea96bcaad34bda1bb31bd3d2d4803c4da92b77022bb94b014e778e57bcded252ee5a2d2de95214c743c774d4e998d2f2923c3277cf12eb9e660e6742954cbb9da9a586353853e5669d99c35d9d592e79eaa14d65cec05345e45e51a2bb513af27cba2159c95d0a501c8ade33aa2471b7777b67703a2974f4b2b4a41baf142e77a60a77a64a773520d1f38aade998c673246325aa24cda8b467e27855a7148e5785e355f570bb3135d3264e7ab828b40a071955ec976019559abf082563cb7bafd2fb642f3ade335792166b979aa55965a76220806c0a097a8e111306cc97ff3136dd4d53b2aacaccd5086c54b9f1c92cc79c4d47a9d48e68399ea92d2fcfb4a618d702cb489b9ae669d14fea8d9267ab4c0ace9f2e50a2d7d459dd7803a3f4a8548e4d27aa1c059942ce888800200000400063130020382c180dc7031299a4882975ed1480057ac85482489608e52488510a41440c21440040004000406436144be28c330e118f3a245f5e6151ef36d774712cd83effcea26d6662e9229cb4d82d56f330e484e5313085b38b82a2d37e641320cb8f88d8b77cdfd36260344d77a2fa313a4496274c6efd0d32840e09e567b8d7a09f99729b353610337448296a637893da1c74d7274ba2aba61c04c2b34d8b7534825c43ea18d66cbe1cc290327514a99d476f7d1ebd3e4755962ff65c1fa7a15b994df949f136160ac9d3bf5d46e00a98907dc1faf919fe299a1227919cd7fe1726c07707eeb15f1cb586354191c337d3120d3d1c695eca1f0f32a2a24c988c1f2f9d69e5c4bcebe5449a4ed7018f680d0b422d0a970f28682755448e57349bdab7fc419c69c03da34b05135afe47531002ba4f55051cbc43284fcee0d57935e4575a2635f2c0f01559e32e201305ea4f203274cbfe93867d3ab49566a610e0bef5e0edd493cd01fbf53da924909d3bf0ec168b6d4db9126b618dd76109966e4e33c78ad56a326f91b48710de1d303fc72d35082f1bf182caf91c50f1c42450242a2f462602d637ec814b625d9bcba9a483299ea76bbb083cbcf37415d1018291336ef224dcddb99b8f3f74068bf07a44faa061d6dde1fdaaeb4274171e1d27f391954d4832df338f4a940312b5d32003e694732fa07022b6de6b0cf5d5dd64dad53476edde98e37298fc185a8810e87a2cba0bbefc93dd2f161b5fafc70933a20c7b00c88d5efcb4dfd71725cb441f6c99e69816d76296f0d031e7f8816e19c2b315c7bff6012c232fd818363f5e65e0b3409bb3ef6fcc080dad47485cd55aba52d1cfc59fb81bbd3da088b970ea673c4f79bab426e28aebd1a0f044a5898ad0b3ae7b3f78af43fe1264b580f2ff716627e171f6135a89a175a14acec80d6d3920cf853dec9d8c2435850c20e13132738f10b75beca7bd1a0aa7dbd961ba324d47c97c22733558084f9c16293d9dc837b27a3f3580df2e40e4070495a4eb6c425214d6432cab643111eeb9560651cfde10ed1f3bebf666398ba2ac41b5329ca09267a577d7c4ad423e1c19b2bc71094c4a930773d048fa17a5066507f2133f7d99420fc68dc3dd427a0e0dea7cdca835fab44b3778c972069b17ac5d5dc17ff9cf8a9094f4794beb9a3714fea4b3a7222ede645edd60e5580d8e3693237d167bb68196ad9dfa3a0ed98a9d702a5ce9bddd1c7a0de7f346c6f72cdfdf06649bfa784b2c4a3852f8289107ca97fabd9ecb15991f3f336f1a7a3eddc85a6b63c74b7dd5e6503c6bbc830cd5cf1e5c0135b3b3378df8f74cf34f124523f1b95ed4dc456e77c66575b95e08b1e717a4c01f3b2220d8ea6bcbea436d363d3bb056e0e71c0f1fd36ed38daed5f9e936beeaa4e1da05cb4309f49fba678260fd0f2dfbfd1cdd4154d36e84b815819340b772b2cf354cd601f0cce727948e3a1783749986983c455b13117fee70b3245a9d0b858fcce3bff5cd620602f417dcfbd0a3499f29ac7a3c1b1379ff778e8e5ed3d989d924f94aef934f7fc2d43d0110c3f9053b7e08c141cfd12d1a147b2433947006fa83a4093d1ff525ba54c3965f19788820fcbf74178d7392089ee68350db0b8034c9ad1db95aff1175e546d86ec9ed3fe7312c98b8ec79c9c51abcfe556893883dadffe00dc3a78c31562607040c48c1b5fd3b850900973e11e32599ce45d1d834e58cb321fddabbcea5d810b351873e6bb6e04dc832f93b4eb44dcd7ed45676921a041b68e6106dbbd30c9c60cb49a9c159fb16c25de5e192d76788aa19c92d5eab73dcf0134efd89e61a4aa1b71676b4d27b91e7caca679d95f1934b4fe8b776bdadfd0ca6e8d501b0d83ddbf7ea3c5b391677b63e3ff87e2a9b811347da1835c5793c11da1a6c25c9d1f4b1325df4080c772e59f5b8ec6cc97550d71e31ebb95f4a2d60a096cc1505651b59cd86eca0bf24c98c91a9bd4437f954ac3e4c1cafacaea14e6c93042f2194f6af748a14fe559de650b14dd6943389b24f37efed72522c9c2a2d1309e14a23b09881504e313de58e76c736d7f08e3c098bdff9179e9dc69a07a3cc7fa8a1f8dc9d5043eddc5e5043ae4f9a19be1e883fa6872093d54b7f620b9b130ca9cc894445e2e40dcab402eb3d693bc2b198f3fb92cdcb1f249e5a3737ef3ea564d271ecf3e0fbdd75c8f005d37c79b358f44cc4c2fc6e8fa817ae02421009591cf1ea4ef53759fdfb6cfed4cb0f0a4c130152f6b8cb267ee012143ee9626dc066cec3bd52a1375d86a4d7f30ea846d48fc5e3e97d29748a441bfccb322505ecff24492d31e6bd31a261e82ff198620d74c047c0745f096e3956bf11b394974bd915b0eb6344e28a57a665f94ae42efe1645cac8e608b83a4931c9a187c6da94010617107115aff716b0287259b1c57b52360d44c45b1aa2ed8af8448b741c01ef1fb5563b82bd1e8972a92f050818dddec0496fa0ab6613cf245c45a4b043c76c1eba709d4070bedb10a3f709627616a9fc849e9c4dc7e01fdc2245e5616dbf86631490a31eee01a4865dacd341588fbc3aeb6a0c70531179c0f936c8d1c06e214178c4c33364539f895b787f3811ea4ad009c1f35d32f193bb9a534291954c9e0f33485a2de1403504910ae45c16d94b501afd4949c8484cd8239022f4cabe48872448b3c34190a094cb9fb38672d30f850a563cbd246dd7d8e859a7acfedb5cd3f2647fab52a1b07d1a025868e53061f824cde3a62e2a9c6fdceb09fa9a1594055c5dfa10640033d6a869a080532cc3c2477ee7e7487b122161ec14e9c21f2db42f08364c8948c564b7a0f6522a4948de4441449a120a04b0bdf907c661e0f9e0d35408239f67cb675891cd1c808c6a972727aac7112b77cf052089ce83ec1ee134b31a4191356fb47b31fc8da6e605f9896506ee844c78dc8ec38cdc5623b18b5afb0e89a9537ec33d86349a13806e56484e4e3d3c121da64f9441dff7fa32b748b2f7c1b0c2b07d0e3c2595ca2b1976d8908161eeddb7184e7c93f076a84a73f006ff1df969dae5d3c8dc9de9d247568fd92b644f4b97b5c5cac258441dbf3a2434c70bf89e72742bf289a9dd2c8895c1de7a2918a383f89c2725c0d082c7a31fb0f9022f907e61b264e71c941e0244269e9c1d517970e9c0a050219c1fb6237bb51413146d74c7af21c16ceb01f07079ad331b3dbefe76968f168cd7b33f5b4933bc5233a5b307e5aa819ab69e09bdfc23a37305b92f82f16fedf0cf5e79e83e12bf4b59b16eb5fc475f5a6978d4467b6e5222f06ad33846c501f596310df9ee69f5d7f36b741d6986a846c792a03cdac21e09e506218524324a8ccd107a1669e0116dbc967a554e8db8f963208d4e64e9a73bf9809df834dbe3da991fdebe18f1974603992a1df108ecba85b0ee6d813ed9b479d92e518e18f43bbc4dcde98b0e95676396f9714be460671670c547cd18b168d087cdd3e53421664a666d4fa77317d537f914a7019509ec307a28de2e38d9e4beae7425f98c7eef8a9bacd7c499bc7e870b85ade72604e4b78ab514787c208e717e2bdd88595910b07182349ac99566ec2a187b8a8f35dcfb318db3aea4b2b19625956a2ed26512f4180f13cb0a2d21597e192b89c8248a5d1aae38050f5225d1894f70da8fe5476574012f8421b32a4826d7487f209e6406c0dbb60b38e619694074a9027acb67e2701ddc6fbd156bcf7d039a46598e431037c7b67710311c3f64ea680ee684f9836edf14aa54adb58fdfb2d2f05a0f0970fe9a768ebad4eec276a856f2a05b43e0d239e979ddb338ea0f3f385ba6aa8ff006827ae64ed0d919bdd0d6874af964b82a9b468cabca64f71fd5c41efb90cfa717bc149d041c3a97c5651586676f3d87e70da4952a6daf622254a5927aa2addcecacd75e84bdd958836c2644c8b057b2c53ba74425586a620c00919128348454c3fd473530d64b5d0b82b7015e3ab6541147e244f740db4e7dc0fdd8b7826c04e4df88e1f6f95649af0fe7558aa3a66a59167a81c5a4135f15522d0a7899b055b8b70fad621a814c6c6fef8bb30685c74ab9c96b67c61b9b69d4a3212e17372e633a061f926b2b822fce757e9adabaf1a556e70b1f103a232e145eb4dda520d577971d647dc7563648d703a9e13d2a49ea7ee6acea0ef03aa78bd4a9839304916b94ff6eb258b831a60d12e690db9d86c7691b3e32c7670ecf385fcef6f9a3b093541f33dfe68981f69c6c1087e32583c6b89b24cb64dd8ac26463dc7d7a05db93be6ea7408944e9a464f5c73f2313bfc752061be27c4c4560ff3661ecab8257049d6aa96076df1a62648c74cd2569b3999dd797ddd024e2dc08463591b2d5ccd5308574212eade284336f7e0dd5206f755351a2a05f04c181f13db35f47afee4b03e8040448dd0e2d518494902fccde3793e2db74b03ad5401199dab1d6b4a031193ab75801b988ee979df18bea0186dae64fd830e5e4c200b3b0178975ae5f3ab0625b9490fd52df638a06a5879fc00ee06ae79675968ca080cb646a8318f6096aa46020fcfccf69f99e80b0421477d449d750b381ab1593ec37e460adbdb5256c011249a49cddd26a754850734150cf16d7a63d229b986cf4212faeebbbf94851337d07ca3bfcfe2ec6ea57901f73060132a448654ccdf34bf7b8d3fe09db0434cfed701585fb1c92c70dd945746ee947c90bc53ae309d9ccec103d11ea94b4f2c987fd4832e9667131f48a6c38301d4aebd1b4d68d779a3760172d5de4db2fd5ab41da4873415dac81d4c16b7072efd64a2d991ad309c5f76532afc425f446bc0f5ebfb4468ee9cc1494e1ab9d85dc84c2363f6bdf881ad2476e0ff3d12ee374540f36004bb9798f3b5b93ed3a5547b5adb07639b6a8f49996267c728908820b69ebe186b1ba2c6a76083d54ae815744b38a292085297ba5ab43d8d8add39b1687428486aaacc146e7c15ba9a9ad17242353a550be590bf886181944bd5c25b4c3e0ab1680ab7ef0636f01711f0816245a1208e5efb62e0f45b73c3914542ed6b69330406be188becc17f371360413c30889378c64ed3f5ba0066a96c6b17a5a22de291638e2e811e736d4295699fa9e25fc8d733b10bf204d932e86566b2d2bc7566304304f46ff00a37a5ccb89724c47ebf0dce30ffe874089bfb59ce119c06df0e76c763785e788bcde5b9d4822494bacd10a4b38229be09755a8c6c72a059c9804c83acce2e144e8fd87450260f89fa1a2d434f25e9cadd38ddfd6d565861da6310da051f53bb49e1ad53b16c48da265f3cd8487f29cae77d4b18c0ae76e9da5d534e08a2646c300c7dc394fb9dd2ee725cf53d6e0f6cfb8e97d6c40b38b7060efc164ff72dfc516c122d4f06a7345dc0704ba650dc38966b4bd1a6864c20541cb36b6a3f8dd2158275b0b53c7fe5fa5d9f52c779b8422257952c694261cc7b25abf9a0d5a747b31ce79ed8ea201d6f6eddef134119fdd8c340a9580c73ee3e19367233d4b20c6ce16cd4c0a4310a6ec3792a6d0746238c287875471f3f60d913415ce21e572b37c7f528a95c03c0372d7df6e691a947d3f7215a384d320408baa4332de64ab518a3e0e4655913602dc09cdcfc6165093af32108d1e9f3cd333e70a6e2707b187e25fcf6a35781e55d696b224c4756f02355fc50561a3a7c6409d181ed7213c607219a8aa591f924944198b6e005616c8ec1d7e9fd885033ac99c8255742f6c58654264ba3e0e9e415eb9d22e5ad7ca57976442e83432342e5b059f76329a5b655e70c35b5bc3c5e944da377ca1beab2d2e90c3b07c5e2ac0b4de5a2e424c264bfde94482079913d5cb43b90e67b894c14467b69f9a4361e8328e6c3c9b8fb1b77d0331dbc8b31330c1a8809a81381123c7a36592699b9c9996a7eded0738e275b897f8cfa0fe1bad6d7193bca42aa00542950e6df04cd12b26e1f65d6101972b56e1461590b7eb7b57a7e4992c05bbf248443afd05ece7a15dfe23337b74f799b8d14fff34e94b5591de70d7e489c3b620fbcc53c873945ce53f8cc6b1595795c06a44a2c85cd312bf4f5366b493ba6bda65f620988c9a2b6442ce9fd71c941e89402fcb26f284f61ec06edbce13343bc85c5282d7f3f4d8e1fb8e1eb8a926aa349e707b2fefc6b96885c20b3213c6efd4c08be40c91c9355bb7b5054aed011562b3366631a88fed70bae4dc14090cf32c2dc48e2166d0ac139aaff95f71cef07e8886054318574adbb2670dccb230e3b3ccec5cbd99952629e1f32579af1b18d42ff7a535770ddcf8196cba94e5a6473811d94bff3272af62a26d43f20d5146eef8b08692b142bb636de3e940da32e2fe108cb2105332e88800c165f2156e681a6e531f0c2e55d6edbb0400da2cce3e633ffcff3007843518b77a7d396da65d73eca96599ed36e4ff6630ec98ddedb831780d392e64d4a2b865951d714852a9a54fea85ea8fcf34c44ad581364209fa80c0f902d59d5523565feeccee04f75c86aea94f0b766b6a356a37a8128541a1cbd400083ca899c2441e98c2c8645eca776ae5ab2622277259dec52333aca9f4080ae8d24c5bde3292e04a33afbc5e916d1d324ca774afe097349e8bbf73bc07b73d7a772a7bc24d8f0d99839151ca970bdb838e58fd62b6704973a4220920ef384027d6ec6722c8f7643e720fddf9393be0f73cb7f692c0da97f2667a2f1566c9dc2e9749d91949c714fc13b019a15bcbfa707aff0cd33a29c175501f2ecffb24ae32bf80d635d532d656f4f77605011a7c3b576509211b8c2b2bee85a01d164fac6e4b08a4b2751a8b3d5d02e5535e225ff84dcc3a69557ae852ca6720ac15d0f5617c4cf5916d147e83af7891ffb72f426d21d547178cb600cae4f26b2e8d1e04bcef65b0b806bed32e2817cc06a4d9849c5c1ebb66b6d1c18b0358ce034262b39eaf9ecbb9bf00527867930f2d5f77adde1bd39613800faf8712297d4645b520fe5d32abf8326f366139891a3dec35c8fe8658f0184289aec9777674d1182203751a2b61a4847728fe6ae3ec7b052eb9a558102f435b5f9ca9d2b1543bf9cd4c475d6af1ddc24f2c82191f88a14af599058403d97fa94881d929d45c3a8b4052c05ea1bd7232047eedb272fe368242102f1803785df415688d1b8da72b1fa6cffa698d3114b29fae07ee52503931bb6cf2b3e0b66d8a459f2baf76fa6bde41a24d48022da29cce812d15d9da6b8d6173bbcd4bc3e79b5deeb285c40b9da73c507b8d03eed549036414a161e588372bf6dc750923e28632b3d3b8ec9888dfc636d0bffba6b84c6b3d4293993ca041c8bce10976e348fb22bb701c1c9f6cd2a566c52a0800ded2a22214c2946bd429919f0d7715770499c5643cd798c322c52c6362b62722d7828dbe36fe74e211340ca6a354cbee146c60c0a30d68a635961741ed98a4f1cca6532c460e182def3ed9734f57417603469e23c66776e2beb0924152abb5abf5eb0d2da344749091b55bf0edaa47420c23ae904b344ebf69969938b24dfce9dfd352b36901a9860943faec53b62fc9f53294d6cd8e6903acfd9fdae9a0a2615e1161251c35399a7bfe7bd21c721f69a75da62c3d93a203abc19678d99862079658f92873cc0b81f9d41cd74d09192c8b12ccb10c066c30e1ac325d807643757a3e62fab967c3873cd018de9be107afae011a5d8b89252dddf9577e1461de9e8f45eae5b60d87b72c0bba9ea00a997db5af7d9e7e34acce4c0fa98111d5b2970c04a18183271beffad53cac4ccef2902fb22007d2e43be56a0d076499dc36c1955fa35e59a0697e3bc64c51691e82eca1852d671515b3098d9b3f7c2663a035666bd29cc068a6f82dc79083e0a16bb3591754bae32da570c4711bb3c1ae81bcf23bfbcab4430e31e6b5979babc3d0c34d887739ead63447954ef399d32eb1f3c619e47b3c8c35d3d9a52161bdf188f1339a8791b5aa00e0f4c1355b5471816ddb27238623ef9e408933ea27bb2bd0a23bec12f8666f9105421c01a2d16007071b5a4b0d80d050d5356d55cd6490df3756d66ba66edb63ab9ae22b2681b9a895e95b310fbbc251b83fe73bdd04ffd13093424218975ccc6d99a578318008d5fec8b2b6df8a0674880919cee89422edcb98907c2e18d9dd5f928ff1242d51b8386cb02a5f4678bad82306df710963c50a825fd1b4d3c969cbab60cad77e20c43e170fd2359f48c9c551ce461b8e04763359688e7e64ecc71695555f3b63b7b266ebc76780e16773f53b5190432233b63c867602bcab7a00e8c4c4b1b2758ebf0d81b70e96b0f1489de173a7958eb79a2f9a02584aeec931bae15e0f5fdb32f55751eb94a69e2eea385553658d2ef373aa4394bc65efac807eb7650ee6aa5e241b9a9a1e23dbe543f8ed4a603b4c8004774ee6c59115188938f8216dbb265f1a3277cd66be87eedb98679a26d72f635e82bc9f34908423c46c2321a46d83630c9f2392ecfc9fdf12844fdd264b36d7406abcdd6abc7c255230bd86f51d0295e6643e5c6933f24c687f7533222e0e99f8470a3aee20ba2956c0615387e1183133712aa97eeae9483a5631548938ad4ba5aaa6ece103fd35b023ed29ccda42bb9f2053212a148c2b18d55a613ee2f6340f89b368e27f80fd745bd6eb1267674f76fa979930b995dcd68625f54c3e2534118b6663a1248ea58438905b04ded50aef791263879fa13ec2d2426ba11c744c47597127e27e59040639e5324faa3066bd892bc3ba31128b2e0c784f97669d7e5de4e89de42075183038f2a008ad0421caa6f2bdcfbd9c1b30e5dc547a385daeb59efec3dd10b4e974e341faea8b1317f891be8501e7687e5707a69ffd80eb6e368f3397ac426512108ec1aea692c80126fa50d1a2305f585bcceb3000d4039c56dfe67688eb29f8d5194d1ec8e74b7b1c46dca6c3852e926dd89f6675aa6f3e42326f4cbe0bddf6a065d1cb08d3117a6bb23bd1e8d9051b04352206533a63d63fcb3085271a25f09410305a2244d67ee24c924a5d5652532f2b38a2c2202dabe0e00b50c47e3e1fad2bd85dcf871ef3d68bdb365690ad72fb2b139f1e223c3988257b5e04fb78c03ae503444396d3ab05c7f082789e3613265ac73e7e207fbbb933eb90d1decb41d1af0091057471445de95dd4a7c2e05fd48e656ea3ea29dba657c926df71ad8cc82a83d2e7516b5b79e729ef5bf892ff32bff6da6d3fdbcaf20192e3def669274d1cdbfe79183fdb3411fe5b911a34d78fa10071882ac8722d9ba338d2cbcfbd13324003930e66b2147c3ef28db08d4802ec40aae6b42189a010da4ca1d86908cfbe2677c1ac5cc413e47f9cdc796b4d48f309256708d1679bb5beaf7e3fa7a837e6d302164c2cae341ad6bb825412c0535e5f4f84b3000b85bcdf67fa5bd3e64374921adf6662481f20582a486e5863a7b94cec3617560b0103a33e69df0fa280ed2ae7056821431d431ea5d77ccf048136d0d1697c79beb469e42ddbb84baf99f16c4dbff1774660cc6fafea5a8294dc4e9f79be84178d811c9426da8e485182e7e3a631cfc616ab8609c421ece17d267f6bf949c48d50cbba98a35a23c891efb4cab6c9dce0ff824f3b0e6f1d9bb5a51a08bce9cf8a0100951c266a087d77d58471dfe921e1f237474355a379e57d336af019d724bd08177f9b663061433bee1bdc2704ec211961e04670f239b902cd557f1d284d41dba24d1d9d888726c398ea0d85ec76c72816ea6bfa188fbdbe75cab1843faa8d07013006fde322c7b26ba0980010e2ca4371921a0384de59e7abaaa71046f0ada38f957ed3e6537766e44d697a8e9ecac3dc2ae0c550a9a60690472c64a26e536a4f88ddbc058a12ba4f7c26628ed617b1657e1250b057794159f338e4fbeece1af99ebf7bca7ca967937fbe34e2e74e3ee19263982ad43819e415759e2404766cd541a0e2562cce00d05797fb5ad0d78ee5626a35e310040f1073a726e8e96d0735d012ed5553086a0d4c8c1050fe2f8ca45f61eaa22d0f9b72113d9841251a4e8ff48e8a51856eaac30f7f87249e4421accffdea13f72772b2da721c4729cbb22b6a06d64700abd6b6996bc9757dd85376d11273faaa20bc46905456f5e8a13c8fc68853dac1d9214069f046e96b7c8a2c5068b4a1e3fc421b92f781df38ddc62401ec148b97835a575b0c7d15a0d8f2728579a0ccf1783953165638ecf33d33b4c899e57dbd60b9a333b87dd82d694e868de9f88e45eae18342297659cf68886b7cd5b111f940cbed227fcb91c6befe5f998d9bb2507fee528e37e2b575c5234e6bce6edc99478dfbcfc370b29de6fc58ddbdb305934e15b1fedc00ec6ff075154d8b19e502869640bb62bcaca3776522a698b72b352d2c1ec5e9d0bf4440125fb31ef5aa0e1d0d0bcfa35b30254e67f8ecc040aff6f576dc850435035e1e1bc50243309748d9ba6969fcb6c0da1a272685bc41f22199dbc94d07730da2399f9ed75cc9b8e6930922f00b7639a463204572480a8f91116d6b1cab135bc67a0309e316ae56e890f862fbd5824e137e1f8641171d3bdde65b3b6b3105218e1a81768bc805ded8ec4752807d5ea90dd37850e29459396fa1cfbae47f00b9f65c6eb1b309f8524accd992666704f63e0733a324483b566637002a84776f10933bffb922d1b6145df527fab199f0c8a114f2b9058821e88a13931b9b5e06ee0472186e8096c94cc325ee518c92da9c833234ba6ac56cdcdf13be656ec182a13bd498e9b70269dfc4111318aed8629e5ed4304c8dbc5851c35e4be3547657d809db387a23b6036c0aeeb6bcefc7980e8a6583777d06f41f65eb1a6407637cdc055b0af632be1ab0f2dd7774c040c00d26d75dc7b772e1f0f09ba8e84ee2e55c9912013cf4a9be434ed4108ce19621351ebd2045bdbe464059b79061639d5404e22d9b5ce62921dbf7124e8b52e1b6e3a733bb8805e331592ce9ce7eaf03c5c327f62ffbb3b081097ad32f776bfc07b48100530f9f498f03e8d817c547c1b6b251e08c2f91190d7663d83505eb4e884dd094664e23254684a4825af17cf29b01a71a469633b011cc7fa890636d5b7527a1017d3dc8975948471dea73b81966fd224885282ad18d47cbf2408610352907cafa2c534386802a10bbc21f613bfba1d85d29cf34ac33b6dfccde4b69839e37a47f140177baac5eda1ef90c21c86de0eeb85014148c61979f7ebed858716241bca30d29cc15ac70f1ecc1d4620e47fa66e705ee9b09fac3f8968e059b0566c7077ca3ce3a9b9a20af50d9206fe2e2142cd366fa62573e46785606608e522284c4ba15c65c7c0b67370f71e40891c20b02e602e95918e9a3d74cce161603f0ef2037bd74783a744e8fbe476439d0cd80838dcd63445b03effffaaa518f5127f1e9531960119b183475a0649bc20d138e41dc117918567521bd7c7fd530e99ce32c11fe581e1908b892c2550ac0d17804b9039d8fe10d361e92a551c5b46bcd04ffa4cf01591bdb62aca68d29d13cf8b498ac06f0e71f9cc2ba700eab737704694ba52bdd4773c55d5953473ed71bc315fdab8edb3af9fd770e9460c931910c2948f317f2aaf930dc0d7a063e34c8bd15ba51dddc0ba4ce1726e2b2a793c084d436f96501124dcdcc8d3d75766dc9296b90ef3857d664dac4f28844af60d8b209584f9d64c1ff0d6c53950b85abee1de87d0cf9429c93144943f90c8366e50f7851ee82da96533765084c864ca4db5934c59a833a0deefbe68b1298416105b68418f51f5886da5be33fe3d5744798632fef996e4122350b0f25d6dfea91e68f3892cec136fa3fba8aaa8506c11580e4dfdb39024556ed82abdfa164fa5a23d5b736fff0c67a2a1ae779073d681bfe6c67ee44e5321e9e058dbe7695b934ead5f292b97291351b70a08d59ae7300ec4bb9a062c8339aab5e0e419de81ac1578327281bbf9c6e90645315f32fafc081b5b95940e9b4313363c0caaec3fd7fa70cf725190737b90b9b5a1f687ceb3f6befa6ab5c196efb3d75f14d260221ebcde0a4ee476470f90111a7399b74960ba84faa487e967d1d1d293500159b141fe7a76eb0bec1ec512fcb36f21889c3cf3de0685185fe214915ab598ecb54516031f0437f64dd4599bb6dc5c74d483b1908b7a8a42c924b999187389cd7ba705f2417d187af1463b8137c1d84800fb5d6bcd984c890868ec9a65dbd1325709ffdc7c61d34105f135d87ed1e7539c71f7308fcc15ebe446ce24950e3a5ef081a4395194960e8a9e9efe2e34976b2a055eb2d3f7987b76ea28f442f23cc66af221c8b2c4e75e35362acd0aaa2cd4ffc026cbfcfea397e04adddd2c71d6ead339ddb54b8d9f3640958d69dc13d80c19d40dcab814003badc3f24dcac220b6327a23368d4c7c5746dbf7a17640a5f8c90d2cee00ede553a62ffdc6736b765c7fdc879cd6db70873ded879b3303535e60bc188e84436cfb2ab2cb82dc3b179e635b928ab7bbf62823c24f4a551227691e821a3da2a0f4f8419fdf9729884044ac810da66268fcd02e8349f9140c6b849dd7249e23e471407df9cff09315177a43ff6259eb6875dc0c1e38d9e74acfae9e0a5d7e71fa68b150a3568cdace65c460bbe87c7a01e50e9e5ece18f8eb0bde2ddf3ff54e5a973701c762249b353be41483ba0de30d98cd464e4935ce6296d8591142e673c73cde60b294e1f209c24ada533738da82080deefb6d5e754c9e7ffa951be797a7592d5326d7e29353727d93766ee5c241990343acfae84e56ed43bbfdc3db35d3eba6efaf57524f64ed0ba8e83d1e721aea7f18bdbe2788b009d27b12ae33471777920904b0358ab2e1f64986ac09ab6e0fd94a58fe862f4f41f552c037052a86891e80802466a2bd6c7abcff876cca7241eb041f70d48bb44f3c4e6ea5c4f81d4d45ff66bf493b5ad2781d0f57564ed87844e37831d7b8cfa08b6c8c7b49d6391d31d8ee64efeae755b23cfe417f3ef7e67121bed00d952d3dedcb0edca6639ba4d3d9afa143795dfd0fb6f82a9c939ceec2aa3333854e72545da1e374e7570c5c1699e2507dc3ad600be9cf8b41ae4e0fa546bfc62ed53ab2bb6bf830e7513963836ef8c28279014ac1d3c1090b7182d8e43e5bc5ea8f1c06f9d3552297da96ead47f433de1439105ea204bdfa3c252e69a2a3e675a97b76994b9e7e1e652daf56dc0e252d6b3d289c92c0e26e64037a5e00e8772d8d2ac7925c0c3821c279a594181ca3b9af2bba5d15843b0586716796c11929da3d46c3c33da2a399ef5ab72190e785ce0b9014764801eef065a6c36599480437721dc3644083c7ad98d0d9ead0eb93c3ea300c41c011606e906d7c039f0cb531f185ada012e2a80017409da673c3116d519a4884e470ec6cb706da12b3cb0fc6de6b5f5058e4a53c80ca610c2ebdfda39f733cf54ab53197228f7cc20638b9d9b34bb655d4d326dc8b0d5e6a138ca59b7c9b13300f6c1ae1091c33d539ab8874095a9546378dcf07dfa14ade4d1338eac21f9f9265568ec0376e5ef706e03cf8566a89b75b760510e307da9542edfe54c963d68074a9fa8e6b429f69693562d48aecc92cde3b17d1a3ac6928722277b20ef4384bfa2c896c8b22664c229b816a7ac96af5b64bb82ad078960f6a67e6060e274a2b133547063fdcf95970d460f1d3030a0320aacc554b153dd4781d10eb010b76b44a3d80e5f961bd0183a7058d24e29cb5bcc31066bb51555704fefdc249bf659f946fc6c6ed28fcf8ef6fcc09ff977b5e25ad9c94cba08988477494a585382b5edbfda577d191228fc6608aad941765eee0997771d8a3c57eee3b65287b6b38623885e4a303ec9e3a7bde02afd0c387a34430aaa8fed213c0924196fecd36eccf6ed2ee8f18f868a80424fb3a7393b358ea6efa8701ac9664a539ff69e3ae7ed27999f76d984e63659aa860611ee521e39d1ae763f22371e6ab86405216e8c89cd656e3b018c26e5a03ffe83d19445579eff6561178bf5061def07ab97df6494fcb1c62efe165dd095c761247dbf578c2cccbef86cf85b930e4b06c4ac1e1ae8e4e50e11b86ad95a6f27e598d9b4c374f1d9dc1f78dae703a379b33a3e084b7a8483e2b4ee4939fdd9bf2e63ceedb88daf7497c3dbf0a99bad7fdce39eff6c9509d0c8be526d7c5d7d308d941708fb7b141b85a810ac17e855596df29806d5b4c6ebec424550ea86909d385fd039791676c8288ffd733705801c7f882c7326d3749b20efea1de8f4c7b0f93ec263e56f751de344a7879cee55f9566d063401a1de51c7e596e24aa47bbcaea6e65a07806136c5cdcfedcce56c41e06776788df7b21c0006c57cbc17acbb2b553d1bb99cb7d16f0d4c5cc8d0ccf2260ddb37642dd8f21c9cf54775659bb3a9366e1f988fddda93c37d6341d3624fc802c017e9a0bf171b2cdbdd4e6d70715b83cfab08fe2f8f7e53cae9fb9f3ec3ecffdf886f9981ecc4e4b0fe384eb5abe20f58624f37f2896e63ff9b1efc1affff39e67863a7af419aee52ccfdd3810376ab8bad118f8f63dec9adb3f7fe53ea807158cee7e1e7eb0553a9ccee8ec5862fab5f38260c1ce7cd547586326781b427eaa69e1341223ae2b932475df3c1838e41f99c3890a16e16232ccf1664022523112f37b68b980777101bc185d72839a71881589d6fa900d2c2f525e1085aa78868065a6c03be2b3728804b83f77e8a03a0d415fdcf790dbd4bb2e2da71b398711f17f1587ce6efe570c0fcc423165f943239085d3ec365ed30b97da3564717b727e3923f46fa809f09c7bf3496cfecbed6537bfc7e46433d4df2089b020597cf68c832c4de7c58c717c74ac333ffcaaac1d05e2a107bcab021c34df17d976cc16e9769fdf8daa56e34db7f2453f9d81b3f4c376bedd39c0483ed9a69cfb747e651ed7686a7c16640df4b1dde70a6c6b8d965fbafd009db175324309d5e177149d8f96f097668928f618c43413cd0bf740429a89176add914a407a73b77dffdfd6c7f8b941a0749f8dd807358dd407615441844a9a687912d1e1e6a87ff7afcdb86192764397dd3fb866f67bd60cb49bf6443aa8d6d444ff9fd5b55b6d7fe616cdbbf2c3f963cf47a16df4fd9a19c21f3452b43680cfbad51efac6cfd7f61bdfefed2f0e3205a5deeb3bc7db15ed455f5a43e43e1cc72e0db3023db723c9b863949abb8b9103d60ec56431b4bc2ab1f1abcd875849a9eb852eea83db8718d001dbd14247d803ff29caf3490dca66e518ceaeac6c8de0d53d3808442daaa1e60f74c04c6ea2b292de5c761f8f8be3b4ef666a45c0f7b22b1c9ca4cd0c19e0468428c4133b442d57ae19d9d709f9c97246800e6ef22f54b4c6b2daa6966f28b3f182a00712cdf56d5708fda25b3c997996ce86c76d415804b1a18816f4cf195eed46720b211f9f70d8188f989b5d3ec5bb93524ba9d04a10d0bf9fe1c83c8af9784e92dde6a47d3ba68f3b34fdcaf04d23967eb6f52cba2d1f80a4b8e317beadd130b6b6e544b83700c3b73cfc9b1efb49f7d5d80850ec8bc2688f081988f5a644fae2f3decddc73311b0cc622e4bf0b6cea0b5d38c1572b6a87056ee293098d8c40591dd9fe097a05f267d0ef7b077643d6c8c6404716e47000d6698c6fc46b74d782c9f9e6b733c46de684776f0d0e47fa6a66d1a5888337be394423eea1ced54cc9569bdf6357fe1bc87329bb9ae67e87ce586e40a365861c43d6714a03d4ff0b4f60d3b62c2f4345be6af7a8e62d8fdff1ded15aa05f9a6301be635b1bfebd71b97907d73a8fac66cd6dfdefe1a26befcfdc4641fdcbb245dc0c6dd99e320aff4f69f5f35e74925b1fc7a5c6d2373838aa3a8ab179b82eb230e04f6bf481e7b7ae1437b2eee170e3997cf491099f8a9f46c0063e6193328d8bd557c09d7b81bccdc9842ba3f70460b41b9e7324c7eae1e51b68fab3a65364874042caae8fbdaeba29037c807741d46342f659711a829baadf2911ecf68b25003ad0c16b95497480b085926521f11ccab87d09f3b5a2db287df5e539ec0b8722717dd771e37f29ea54fd0d64fecac320b7476524ea63d8c5fb029bb5ea377ba8fe18b442ebbe03be95b3fcfed9213f29ab9358b517bffe7beffd1bc5d0f7e3f4fbd955fb658c2bf9859bf1e0c340c750bcb7f33e77232efc890ac06dac299fe17893e330fb6106e9fc0b0f22763f16c752be15968f460f75e2a0500d479143e083eca6b9532f7d021d597d05b188e73d866acda73fae87cbb51d010d3dfd4793375c19f349ea594fee2f9fe4f19fa4ce28ff43cafa9192e5884a4adb59a9c54f2b27526da5df5b79dd3171e53138a9c9a45745ef2ce480a1b1225abc5f8dc302ffffeae046e12ce77e5ab409eafd1fffad7761fce66eec97bfb6eadd3b339fa25eb509eabfb84b7dffeee05f7e9bf80db877ff1839f70aecfbfe11c81806bf34e3ef5590bda8bad286bfbff2dddb405bbe89c6dd44219e0ec5cd7759989a529f7dfd97827896abb304f6deb5749a1b42749879ff73bce50bff710cf6efca93eb19341da4719b1bd723caf0b42ea45c9f49ecdec5a760e655af340c7b0aa7ee988d50d858957952b9cc3bb6a5c4e3d3278c4902f12a017b194e96d87a91bf1844eea03b9cb8428c2a254dd78038ec23e655e9024b6c37e62287052832c57fb7afc4f917de31bdb10325a718b44367f94c4e150d0fff4ffa8adabee34983077eb0e3921eed29dc3b1c8ef48fb8093c9d7c6c36ace5d77018b57b6cb127a8f9d300bba97f924cc3f65f1a0e8c7cf3ccf68d7dddac28639af799dacb8f122d73de6c6de6166d4b338ff4fbcd2e70693f76d9c31b8867fe88cf1305eced0c52b6167a503bc78eaef7a72acc19002f4ffba74a17e1aa46002d82da6ed069a5605483246bfbcbe4e3e8df1eef860aabdbe8ed4e392892006111b74af8be7f2f762e925b235d26621d241b83c9c43d3c5d0de9929fd58bf465906db9e70e304eda1b7b1986a1f19d57f64a1c4f1f76548c38c31b9acf666e6a2460133710b71327c2ae3ba6c028317c697ddd3fb6d7865ed224261898f3ebc3023eede953993dcb6f98fa43c71f2bd93cc776714a790749ac68c3e1d8fbfaca29c9bdbb6dbc68f5b5d9f115ad9db2325cf6cc2c398365cb304a89cbe2fa11c7682c5b864bcc40d9325c4286ca2a832565a0ac192839c3586a8a589fa4fc2f3832f453c6428acbbc6f99f8224c41c7307b059f3b317e98abe82b21c365cb7089192a6b064ac8505933b8a40c9435032567b02c192c214365cd70c9338cd2ee82183ec87534b6d463220607df06d87df8261388f2f3ad1fd1d04e9d84690a4709252d7595c0aab74296ec83977dad1471e4e1e9d03f2630005c2c80297c1a9dd39acea9fc26a40adf7d65da04d64c699175818be48f954cfe9f94feefc270d90dabf1fffd7ebce2e75bea9fad6c4ae6f4094916b1e1a83cf6d6f3862442e9cb2ff11b417f80cc1fdcbc8e6a3afcf7d1512eec6646cc691b8a811b8426a13289845d445abd7b4cd20d748752d23a68fdcb3f5961b330e4d3a14da052c5e450548cf53ca713c97fe3ae838418992e26d035c72e7186f52afc0e2f1070ab01e26dd0c038aec744f2bca352a706686262eaf07772854474abded91828588ace6585b05eb0b7f1b79a68fc9a96fcdc07b58c635ce17c2119a667ba06ebebafff21cdcaeff242b5ffd63802b98d727b6fdcf8b3ad108173849067880128fe73dec2bb79e47f4fdf3776e58f573037eabc003db18c4b111899d67ff2d3bc370eb69f12a7690750e192b17490e908a2ac66d2fd78270147cc560e92288723d9c9501d5f80506bbfdd78d631af89599aca3703dc308353dee1f7a889e51608fe53e6ac5b4c8c6bbeec2a1cb093b13415ff7e1b5b7f2c886d26671096cec91905ed4f49d0338d287b112f1c0af25e43ef0a3bf265fd211a5a30f9f3ab518925535c743eda2eb371c09146941c91ae730e2e40274e18fbd3d867998e54103b3603f5813a662eb3870fa6002e86ffd0f30e4446a8caa09790c985fd0340eb86b6360e4c3a87860d6a6e42d5874fd6949f1dd772d0230a82bc32a00ec8acc1b912bbb9ec314d496650e50e9a870e13f6d1a793921592b518f9f8a855f87aedfcda49321986695f8a649ba6bae0e13f3a45f1936086ad0c1dadd3a1ca00c362ca2d90a771789f20372376c1562fa0468e14f368b47d9f056fe4109370a2e6dbad8ca692ff0b71b8b857a644b3f8e42986dadd3127cfb4e1a946915f83933a994ecd6ec490c9b95efd8a5c704f307b72bd89a6c62f0621cb254abbd212f3bf2aed2dbe3daaf50b7a513c5ecdc25430f2947a97291ec3808b45f6266a1385974ed0b6735b66509129076f97cfec4b51ed6a09d4372a11ccdf14752e8636bfef1cce09ebfd01b0fdc79e1a2b4a794fa13f8c0910ea002dff4cb84f1c890b5022d9a3f393b004b0a3b96eebb6d5227793c1e643d603d9998d319c39b3a8b00d87e23f00050e85e5051008a5be4d7906c18e294431f3641ce1648c38101d6abd4cc918d44274da1b5a03eb0dbc40b1ceb168cbb74ad5ddb40483fcf2ebac038811eaa89b9d7630d14a3f4009a434a775b66c2ac4107d7aa7c92793e7c825c2afb94bc52e6d5cd90f6325ad43a510fe19dd6ae503251822500e655aa4e232428c0e13b2a16d9ca66aa9db0d9da4df223b08bcd0f89fc247ea64167c8d6b39853bf91b2d355a398c5c152d277ff5a016af418947bcbd931952433fbe780a5c31b70637fff3d5063b834025067c1ad909ea85a4cecb707d03aeb4e704f3dc3a34725095f7baf1f2dcc4718a8d00ac7e391325f2ff9d5975099da9f0ce1c02c438eb39739d7ffd0312edf5b987cd55e0fa9c595af120f566b02a37299292d0443c65be619116f3f8c7a39522cf07e08c286a98238f5eba5228b70a34153784506ca1f95825bb65669db726f19bb912059999d1d94cede50054a4320775f78cbe0323a78d92474c8b051a4027be8f473321123908d9d0dd954cbea9161b44b5ae11d552769913e8aabdf450b77d4ab0a17e26ad7b6c5d850553e41e44278bfe18b829ab38d8a30e12b0b5a10b97165dbdbf284539b8abc045bf7566a7d5036e8b49758df37a01cc54b02e7c0180eac9d107c5e29d20759a77adf499d29588113fa633888653d17b4325f4d1c6f330cf30f536cd18ad8ff131c9a1e940f8479fa3a70b3f8c3340c6100e5b198567eeb70155cc3b2dfdcf468e29c2a827b8568518a230bab4a908851530dcddbc5717073a8b1bd0390dfaf94b3f79f0c5af1afa227169b31ab9b6743f2af81e74d56f1dfae5c4ee660f9a45408f613e0e374255670729d61277e04323efabb5b9ac2767e76766b14f96e8151f84870ff6cd3005f054ae22c811af103981c26bd2bb0cc0d9cac51ca0e031002ebc916edc106910f730779b7adcace1ed90c010e155ae8956744c8d60b68edf720320a18c0de4267a69550ce4c483f3db033e07ca367028252e0a1658a6154960747424258aca6adc40ef5bbff7292312a2199b64ee7dab2cdb2cbfdfb098de83bacf76edad8b485dd34fdc4935fb8446507c5a99dccd15e61a83b9bc29675a5e3617501893b9842a17bdceb75c3c51526b5fa9864b4c2153fa7164cff94eac71fc6c46d1be1d7c4980a29006862e41f7300beccc7e2d727bba083d940182c57a4e7cb178222e6cc2808eed01a062e0196ea8191eeb1db566bd5317dd380b590fb267d5640674e1e35cc2b8ac02132e66ef6465b5a27fedcf741b12908e292b82cc0502db4f2e74b11b48f71ad4c5ee2303585de09b42f8ad68c534fd0c1efd6388cbc027287ee66e1e9eaeda2f7d431534ee8f4c777ce724043963de79c5822ab173cca446e3760c4b487e420aa4338a28997d5d50d74a530a5af47f345083f9a6b66b6dd793f3d2fd16c5f2d3b049de3a53c6af0ad00a3322a68e1aeceb817480c811ebbd90184b39bb18ffe829d1cd29c2f04ee73e560b809f7345abd2a64d9f61cd5f8e386a0091a61d0a910b804f485b1ed9eae94cd715a9d23d1f004583edd97d66cf745e45ea5631021a19f94853cc0326cb6266caea4854a043e9f8342013d10cc0e976b1126378667af7001d03e216fccd3b61a6bce7bc0d3d0ee8d2046603a6e61e9ceddd91236d5f05c59a92bd7a88c2819aea1d79826b7909a13fb6a268bc21e41b7ab7972a1798772cd4a957c1ff566afa4dc5c6e2e9c3be0c8e4afa622e3ca3fe40fb2212486ba065eb2f35942899ed69da0c9c7a6d8ae742c1b93543106a42c774bc617cb5d47735764752ef6b5809c0e373c932a94b172a9c3bc9094922abf8b10f64b54515621475e62f30ab662d0ba11851a5e6bb402e12cd44a528d34169470467d8dead4ce9d03c11d8a89c200d164f645c89724358200844415363f433d18db4f0619742f8b8e0b17bfc18b0911c3050cd32db4e52e32e162f696a4ad4b72814088c361de57330baff9a1f052a28b28890157602d24605fb38758ff49ccb32010d6b439b731a6218ce577797442e19e3e10b0933eb2e858310b6396f3a98eef3ff41e20da86309f1d7f7e16c33a9c5f8b41ab510df6f03ed382379db6e3505146197239781b6643c053fe4a6d16c677622c3c16becce6f8fdcfe565371ce7200fd094935b4840b3a3e5604f86a33ac316d0661e823483dab78b550387ce4e1ae053f949c05060fd30d2447c597424eb38467258b38a41aec54ed47561dedf456fc2b1899b13bbac7fc49be65e12d27ed4aa49a2ffb141ca639dc0c0e70175dfa9cec0600e9559e748c339bba61142faf902b96466a7dc0426a818b9923c3109a3811fafd40271cc6fd7220e52df19b5439f87fda989acdc51671af32f1e0664cc4d18e8a6e492393251ab2e0870a99d147a027fb3760254151a809d024d14dc709603667fccc18e8001e013ef15249363aed1f406d74efab18efe344aba17a6186ab114f26f41cab30abe14747e30a6d063c0e26d305c587543487029534245fe847345577baa8a7a36a5beecc8c5b02ae72c2736075e039cd9fe36fe9f07b2a05c4431fc34d1824e02f9ed6058881683ea8ddc11f3b3d2f92d4317ad353ffb11a314ce6b4d818cda6e29cacf48172dd89a4b5c9777c4ccbcbe4af8babb6a2290ac01752d346dfdeda47beee66da36054e33ac7dd91238473681d08f2e3aad88ffa48a14fbb0a7eb03750d1d9b2e8b3cd5ff744b3008ecb524385b678b931e92b1ff1f0096669d90c3aa8d9603342ebd78c43302dbaf99d5936ae5bddd2b469a74a30d7283323e993762b4734e07ab1353c58497f047241d8e32bcc408952bf6e011042d75f8bce603a0d77378bae8cfe1b2a0287caf0a3030044e3b3e917742f5657355d09b69fd0b19261de9a547d73b7059cb6558086e40bffa9ecca303356ed970127782059a282f03453e13abb4471c802b2fea6ce626b3e21c060091fafd9306ac4c8a39d7426d82a775208fece8012c2d2945036f0a3f67acbfe81db379fb33618214c85dfde4387b7cfe3453220d47eb49d15e7f9e2109c274c44cd7080406cfca7b75b1e8a601363367f7aee206f010011a8224463e611dd4ce528bddc7079cc0d1a5feb9200aaf75154d09e5ffa5632dbbd577d984f73235cc22a7e76be54f60db9a503f49498191831915c4bb667ac075d9b710a8af9655f0288a9fa89bb51c811ecdc355ee5d8d2adf3c23b69fb2148c98a210bd7f74a1b949bf9f0db262276c7889b09adc5553943ca695813aeadb6981f9d89c8fcc1858e795293ea099b5ad4a4d1c3def60233e39e2b656ee7e7a88067ee5901ef2b31832f0c19d3e2d8f77b396f1fcb22590616d8887ac3f5015e2b8332ac3a14e8f2dc3f792a4fd908736708d874b2a153582072c16088660c5adbf12b301bce46566aa927f9ef951a1a0199803465ef9ea1a6efd7ab51a27d7b1a5cf52489ebbcd7f4c8754f2ce9e3643e249b2ff2985f81b61f895b64c67ffa53f692c9f576cd376522205e9a64f149bf0f72d0cf5de0908df7a5092a6a60472ff77bda56881954c2d761e55e3e1828a1a9470ca498441935fe046912f4149012bf318d99fd785551eb2370f3eb265f172d3edc9070c72d0b6bd0569a5dfa4816fe5420989c0635492b6fb47d626a0882a351c933cac5a67d75b49f109dae2ba821ed2d3ecf575c6562415cc532c0823793de4d0f9445b82cbba9bf9be0d1eb62a71e30f782de980b5a0c9cb558b25e09ca4a8dc172be67b05123dd2aba7d0b482681129845d3efa0e23558575f0b3a87db2aba4cdb69b1571667b05a03360da847d264a130ddace8f75c67a1b233e946d146e9c534c2ae2bdf63cac1c0409e91b70f0e4330040021ae88bd33ae1d2639645a83f36d892e7315784b676c07984ff26907262b286b13e7eed8be0da15a40feb96449def79589f9fea60fd3ff2aba4f4ffd36da4b04c4f010189df8820b403d0ec19f918efddae08a825da014631607e8616b5aae9c45a02a32897716a3992481e36b9a712a4d387600d34a8eb7b11335ad7dde41decf43dfcc4202e63df740d00c6aabeb63034ac1c42ccd4e253a2b8269b41b8a2e71299b158cb3ce0b30d3528ff90cb46d670f11c4b123062a4e2b05ffe5c0b76c20b022181c698163771c565de69f39d0699317f885e5136162a8b824c0c0f39dc54da0621a651cb3bec928742c9ae6c0d13dc8d26bc4e9f10893d351ce3cd002833638d8adff34fbdd3cceff8a50a3b3f1ea9fd98be498922a1d615ed18ec7dccaffd0e235721495506876921acd5678a5aac66c83edb08d86cb108789b255376d472c9b3550f180d3fa718440e6716aba83f5f7b8e36c3b0db47c675c3d81fa232bcb14e5630e0e207d04348dd3fb69c90b18d24ce92ade7c78a50397a96b1b0d25c7092dbc21217a1e5c59e84e6241d163dad963409729d6ebf9316983de1fcc16b2fbce88854830618160cf156c81479b577885d2e66f6d4358a85c4ecadd812293076db6607c7672c957e8701af45fc121e9921c8c067c48c9715377b374fdf88b5509b94f227f8eaf8861a0ea0e5cfe910c4b61e6fb8947dabd6c85517facb2a3e1a93a9f86de05958322d0662e9fe3ee3719a992dca1554ef30092614dab10a5bb0d1ab1625d3c2e3b509ac8475f4143be0b3f46f1162b8bae91cb1244a992e90f4f23c0e3c8f4fa445c9fafa2f0bcdf7725cc1098af488f51828d64113e196c6abf9cfced5bc80d610e329a7ab7ad4a60229b6c4fa1b0dd30fe8d92eca6750242ee7529016d778d33ebf1461baaff1440e24166d2909d2608d64fffb5f1f82d6f812bb953600101701ccfeaae8ee208ae029ecb6b7be0b14d66f5b136e327a6af43dadadfdc05a745d4afa29951d150101e5d0548c8a35b6d97a82e30a1b27f4490c0871310400aea11f469bba45847d28c8f985eb41b19cfb2046f53492fd8e1ee6418fa44dc01b7174f9081e521bc021e4b76c6996816c2b4b0f69e023e599867a07fb1f66d2c24537a684e98bd1057f4d5b0263024b6be6ad945c499c2270a3df8c1f1ac20349fb567c449ad1dfd9a596df0d585ddfd17c79953ccc92625829b65b908f5d280266c1adfa1b7886d5b11021702d5647671e6e32b32b2cc82f70ba16772c3acb64b33a228b8cc7a3c2d242ded24499546978d87cf7629aa51f63c7774ea55c83d906fd37b66295fe8ed5f4b9ffc1a558fb62ff7dfe42705a673a6a2a60baa729017488a32c5a4d7205be31caf9ff895704865c24fccb0a1316ae8948494e486671223f8ca7495baed7da6a3b2f3690670aeb386377004290bf07a7c75a5d22ceb8843c3d4120c3513c7d4e7e99d3096c139fb7f4716c708d52cab0e60f2e5e9b337f8b2e71894d48088afaefd20cbe027d2c00a1fca375e2c22de128e5f8bedb64db2dff6f07391e4ec625ed40d28c89a0f6923b7f9c131af945304e2c537e43bfc45e0258b246295a44b6192b23f5c1f67870d42be91bc2d44b9e90d7a3cb3d92866af3992707e90666118b06599d5547020948287a066aae32200f7d7f9332711e0dfa26feaf25e09c0dd57f4c2ffe1602a2679effd971fae698aa357a36d313d7a925b9f629b1233efbf515a8f9e9e3415efea95bcbaf50356b8d09c34e63d5715e12990aed21b2102224c73b158cde07f94be8eb779d151dc6455bb6ef730aba6b3e3e50df2d5875c94fbcb695124b5f3cc1bcf53f962a9160964050d5a4962899589e2bd341e085a7d486b9332118ba1aca95826b1198d41da4c37f3f5ecc4677e48018ba133a3ccd557d88ab25b0b92f960ffaff41459a082d34a62ce6eb7b71aeff59dcc5c98708949b1835a3184698ed84411d8418e4c0e43a903b6f84b0697052faf2ed464951afd36445d7d34e86e157bf022e9713e0b0bd7d791b79da82da8fc75a0245995ecefe33542054758752f9a73a106a2470efbcd3905b0a2611edd13c38fe364c956c53a6f11a2e23ccd88fe9231c177672dc89f66cc8b398fc34cef9d84a8e1e4747e4c3d27c35236c08aa17d4ae5c3ec9f24e4c0b6ee693e07e81f941cc8ebe731b55d2bf6faaa44755ba9da0ebbf15bd21c55ad1d4c5ca9324b352b72b165dad8ad88c5e58bb0d8dde9e5345bd702034a7bf28eb87177cf815b2583b2532b17c53ebc490a7e89f3fe0dc01b27c8c8a05bd9e61ed1ea6cbef911b13204a1263fe7e0f2720d76e6475373e964b682d88de41610a199cc8edc79876babd11b39035fe857cdcc8f8f761ebae22fe63b590a11637ac490a89866c00e84bc3fa6b10fdb05547b8498a9b7a2376d321cd1f3a638a53ec144240d45877edf86b957849a075b1118f65b880a7536a7babd1a0d097b290a0f89e59c2edcb7675d3455be62407cad8693bfcf60410816924c46a7e3b58e0851dd42400de6604d20f104930497ca4a5ecc14d8423ce07a591bb71fff39856ad1b8850e58d005f0116be29fffc9b1a4fb42753fab753b9aa792b5069392d2754a9cec2e261bff9ec2104461c6a6c9ead192f8d7859fa28002d2f1b15260043d610cb25295c3829dd869990e91a4b287dbdbf5e83c28c85be6ee2c4e3fa0360442f5a88a80128646a0e335316762554505c41674f5149dd0c29825f328cf47a3aeea5b4f771bcb8bca4199f9f4311dc3dbf427c4e67d40d9ddbd6f4825c6d1a3c432d33332c7a50ed93804b0fb7e0a5d19189d93d8ec3d6c8334f1abbcfd21b1730167aea3d362317c9433135265bad4a4c064da624852b42c5eeb9937c93083da217cee0e7e970f8c1150db9594057994fd3297ec6ce048cefb4c85cf32d2d467998bcd07779faa43dcff650997fa417af361e03e3cbb9a91bd1dd8593121a2b4f9f2e4d2ec578d6b58771816695d05664dca3d70ee5508782004f85c2dd527160759798e3d7045bbc5821e7548f42d94fea5033583dcb2ee01c701422d2fac93aa74bcf5f178fbae41f11b4f0e2393ea335ddbe4b938a4b33cffaf070b1d4b09f2dd762576a49d4b547da6dc07aca8eb6fc291cddcfd0fc44d0258f68980eda0ae4396098f47c767b18d8ce68853f63f11871db72e3c2e94dd566bd892bfdc47680dbac2da9b1d459d104efcb1a6e62dbc13a3afb7298ce71e43365c2e3eea377077bc6cad1f17171d0b9865e828ed0cbb4ed9d533f8bcb99fbac325726db6739787f04029c04faf96c9014d0d153da59e86de6fa38ec691b42429f858095ec3e8ed0fe75bf9b5e31f0e32360f20e05e8380aab84766c95ef81527ee09321dc874765f9b31385b435c6247bb4337baf3df0f8590ec3a5667ad97d4b9608a2636c805d90053ace01aa93dbce955d55115d2283c23a80b2801ad706b2ae4ffe994dfee049567a842041c9b0fde6f9f0af84dd71328e5b7272d8f50d85691aab45be9de30ac69f264147f7497f6ec4a60e0ea8c28f5ada9121e7f9aa896aa8ab0d723f1358c69da92323ed27eaf64abfc3de31de1e6e5246c7490e773d8bb3a007a1178d107841420d3b3ac8647796ce8961a62fde69354e8f7590e69d61536ee13d4cc61d7fa1a0debd55a98f0c0a181c4c64c0e256eda0a5bbdee8600eed54c391e2c8fb0524b205e68f03c341d4c4fcadd1c52d77e1942563b67469a67d0a575d9a0406d396a6a4cc5140006f4df3e6c4ec67173569b350907b5998c08581b2c5819be03d69043004445cb961f2dea6f02c78c842295a9c2e31ebd32469e27f9596ef052f7f5a9d4cf9f2c23d8d9ab5b54c81553495820a1d8118c4ad7e4fa63c8496a917740d9ea1779834d3c9ae8ced9c7f91bc7541c8d91dd4fbce0be52b7e15252446c73c71930145823aa6bb1f8312fff0d1bd19c17beaa467e89ce005f7a144d95f02b0834b10c9831f430bb49e32479003a5ca8336653ab04593bcc189087baa70bc429db6c24e60372476001311fe6f7d8269f56b4bf61fbbfd4846d19adab023e70618c875420de18659a65a58178b53b7d0098742f57f2b8b12acfca26ebe6e0f467adc7e15fa4f2170d351bd01e0e8408dccc8e8059c43b673f092c6a0c32c68573045dbbf9585601102c6e812e13fc18e1b8e4466b68cb829326648745cf411fc3ef589141a4afac0315a640b960ee694ff06f51179ee02df9cccad9a10d8ed7ba6df1933c10bda0057681a997a205f81b9b90bdb17e2bbbfb4f8951247d06db1e226c06327fafd3702d383f913c46a56c11cb1d20f9a632200176dba9d80b213f223adff0aa56b01fd6748ed34d793e9da2b47c4844adde2fb723bf2d5446b0234ef96598a900a65005b17451ca057d05f122be73e6c19af7f409c66721d7b6b9e04a239f290d510074e1da233307a42db7ab006579d1d8e92ffbed7d384761f5aa854889b97a3cdfc2120124b19a2022f7f0865123ab988960db007f5a2a99f9ae048d320b7fa2526cb536ec0c020127f460a09fda7ad4045b59047704a2c1c0e99cf903ee0488fdacbe8bad56f092c343a37e9ac6bb3c934230e6ccff65f38cfe0c83538e58182584046248e49e8fb5b764b28c0a4f16d95da8d7e952c155fde5b219da3e5d6761473d3f47f0bb0e54000eb85c4c22180580eac5be462a7fa73f737ccdc0f80acc0eee4a5a0fcaee5a42aaccce391d6afcf7f769013f6243e7a765a0ecbc604ff0149601449234f52c2f6c9e42250b92345238378a53ca6e4ccc152895d576fb4366d1659fc129ddb084bf9fbe736c295c05f0e68f4d3ad02154efae0ba89018f9b85bfebbf505964150f4e99805d94888496a540fe138deb3a1d36155c12357b8827e72dcee1f62fb2b619b45f1cf99926d20468d0c11300355f33e69fa46a29a0fe3d3dd2f2bd0bc887ae70dd88af7539bb30c583cf09f7fa27ea859b46c792aa5efae43c9f1f2fac76667877972ee4626a8a78508598718a4ff18e7dcc32e897b0f1a5e88500a6d5ec92dced92d969380603fba3404a1c29bf05c5c46237ec4b7544efdbc1ba8b8b804c2537141ab957cb22a16956d505060d95a7330d138a05cc9ce99bec0881a2826db340ed21a16eddbd27eeac7149490e456332fe4cdb4ae7d11315310e4b6896a1cd133f3fb2a6bfa952c074dee7a16dd8ce6d0d5ad662efd05e287723e7b7e2cd9535d84044c9684075e624fb41caa8338e9d92e694c28f80c3413964e3b69c0a972c2ea6356c30cd31eb5526acbf9681b505b1b9559278a901a6f352369981db88777521c865f49de1fd841a166539e6dd10830f730acbf212cb0310abd1d0eae25b64fab6a2363e84d5a2c7ac5cb0f9139b76c22dd636a350c2830ca95f6c66c48113c3b514a3e9c1e637c142e42e064174c9938e932b341ae161e8321afbc2c2f78916d76ee32f1c5be93102d1f9959509f0ed8fdb03c00c4564cecfaa4406832b15514c002e288739d2f15f77db1bc1b0925db6a2edde8645d3e725a028d049a790a28f766f4c185021fb50d611ae8dcef806bfd729134590c4816217628ae7c4bf418a3236eb62cbbf426592855e00ef825e35536a00cc180fbf526d15976b33e9eb74adb60a279e3e2a88d946ae7305444d0b000d84d9cc1c3c21e8af89cbc521a357d839837ad8bb2f97976416c2021d865e1e1c21a21f04c5839ac755b05df1438606bb77babec0504b9a25d08621d753d89008192cdbf5146215387fe06bb6eacb6b3813aae1f5d1ac02f128cbfe46d11bb29276a586eda3a91632599d3bed0a7a5447738ec36f9be42a125c7cb81182f929d172a208a5bf64d8889defaaa840aba1ece6ce18787ba72649528de1e308befbd19624b1770af4513b08340325a5afa383b32892fc69ca208dc8c3a1e241ed96f74ce939b6c857ec3402d66f0d2cfa0cef2ae8d8021f9be977137f01b5d209e5e20fb5b0cbd48e15efd5a8208684b3b335ab9deb7e0a5dd0940afc4147113d84f86150a0146de0f924c3234a2c2147589396a2548f0e707d6faec0a0aac3842932e60f8ba0ab403788de524b0b8f71ad04b7f6e06f40d0ecb1662bdadc245e1c3ff7d479c25cd7cae0794d6876c8ad5dfc2eca22e88a632f11ec2a17c771616458fe91ef40fffd7eef88e0ff5882997d86930032fc95865bf728f445045132e834e57ffb072d123658a592eb8e0dada24f5e287c838097bc09b2616a4b37fcebb64eae33cc4f462b55c33850a74a523f7d164ea5db30caa7853ec3a8b42f91586cd25c66e1a64225a34f91936b6a951a1c54b2c55e3ca9161adf8585023221841839cde74747f12227d73440af3760bbb4557ec0047ec5a7ecae14ccdb574ff83da4a6c215a111d824a9617cbf583e0bcd018a42060391d222cde9c371808bcf6ad4f63402ec13f77d5aa40ca86cf97471b154017c823acb6560c29a68e0c2b90b6d03c7e85c8ef18e0fc4364319cb2f47af09919b64d1956a9a519dcc26e04d32c194c790586899a0121a17110b7b01609dedbb935806c66468c32da3064e4cdd3725e2a4196160ecf1a3ef2bbe9c495aebfdd176e5559de631c3d2dd301542b1990230c6b9848380efae57cdb2d50a590c0541932c07cede9639a5923c4b1a0b0168d9cc1f8bb5d3ecfe458c49c9aa9400002679d51514eaa230af99fb6b417ab6e93a40ee24c94823d19b23f32a6ca0e132e28ff663998a6998aba19077d8383046e656f11e744acef0d03c5cd55d72ad757afe3b0144f3b8f461fbe40a485f0c0ce077ff887497ef83e0145551680e424c4b2ac768ac3782e824eccbd26baed56a084525cd58ecf5aac1a509432cc7f5e5170a13aea669de2bf295ffa482cf22537bb45cfeb524cfd03d60cfca16f12144623cb79ebbd75218643983f61ec3d32bb57e857c8db88e55bba7a15418c15411d87a801aaa26723bee68563399d0edc39c49f87a841decc4fb74e004b6526f6e1d9cd78f1f2ffd6097420ff1b829c70061272ce0f9ab91f01f7d02a1b670ccfa2ff7b37589cb527e4f04955c6a55650a831ad44ff2995758c19329e8374380fa4517b2242e6df4845df83a780c8cf6fb44c561a1f2610d973c352f8a4f19e8718639fc48b4f7091a432ca748823d2059c039e68db41f2831293d38f11cfd8bd676d98dbc5be66192561c0d76466f8b2011b0397803112c977c361a6617f84daa7342c2f8b7b6b734b97b283ab69088245c52194733321c0685e137a9860034c87ea58d3f30bb2b184c290e26c7f5cc1c4d67c65c05aaf68c8d8c38c0d197ea85b29ce7b93afa6267182eb3f05517e4f1f74e7680a63027109890958aea3c71b8cee15803c8d5d47b24c35ae20cbdd0b4018a6b4753cc70185f15613c966211c94a3bc2dcbab488d04c35d5764028b98d0f0d387a9dcfbfc986fcc3c1b9f301470f2df6382c41250213a59bf6bf187bc2c1fac4fe0d46f9ac38841a2dab0224b56b0747a766674f66e66af531c9a73da0931d86cd74fd028050229f50a6c0d1d9286c7e4f8e7e811951869969c87d30bc3e999afee241ab98af4256eed4b465620215b6096c210faa15468cc84ea5211053dc686a7889c6be8df497bc7bba44c3fd22563f9c66dfd70b24c19f25081c3fc2fd5dfd461d447e090d16e4359a530b14c603ffd053bdd16803634c7a4aed24db3629aae660528ba066ae2b94c5af568b7447f21b48146ddd03aec8002097eb2e23fc8132475bbd02f804946707ca9cec93aad87ea6832edcff8d773652886ca647a3b19672ddf3177ce2ac79cfab8e0ea2ff879934c948f09e6d0d8dc6166ddac0a539a746f688143b57e725aa8fe64d70157eb25cf19065334f96561001a85ca2072237f727cfd17b055c4395e85ac5e88a7b8c0a012c6e76d850804202d3f9080cfffcdd63eb767d189fd4f6326ca6c5ad3c049695f5d2941f240f63f40db0a3577c7c69dff2c747b321ba0bf4f17d36dfc790b4af0106d2afac142f70255ccbcbec2a9cf44191c4b37657d66219777534ae5fd94ee17a1bf31889874753f4d88531b7d685f390502ed350094b8c67c8f87f1db00fe9bd685476ee69abafaf8b84e56cb25cb857af51fa9aa92f4fea1665e6bb98081aafcae1427cd79684fb9995bea52c105bafdaef2a86f6acaabba0d1bf5162a155577ccd8c6bd1a09ed3629a81c994a0f3cf74a9af1e9b809fe31fb2996644c8cc1ae3fc2693e30d3797542db5aa24a2c3f9cce2c76060f394b08e4c77efaf35a310c91a45e078abb837bd7335a1caf667e6b023c766228693f1c48df4110034691915d9a6808ddf766a427ede65813ea4e616a88060890fe15b56750bbe1947852edac21683b625b4ba4ebecdcd2d0e18024749f36a0e9148e0e00b9463a4c11cb340036ba54d43db143a68439062032b9b78da2f5da785e2e2cd567e8f3aa0f1e7130544990cbb0c62450578f4f30730069a610ffc78d9f48f2271a11f9a8343a1842551835337e8b63c60730b55fd3222679a99c3d69a724576c3e9a35bc4ed86d36237dcbab21d55aa55777b211aa998181e2e204874a15e49dca253e014182ecb561ae53bf2ac7590f6e451d4e2115de0cade5acb4b0cb4f876b99c1a23480dead878d3e6aa33d2ea87d062b7af3bde34914b9f1f87a35e1ad9480bf88de5a947cb9c40a6d7588f01ab63a3217f2cf8290de1c085950d9c0ea5468aa07c6b189e602de1e182d68707465b384930a775083e8a362170827be5e689b49fc820d4351e307c69294841c500f0654a45414e531f3c13400131c034cdc130449642e5a3bdc0221ff81a6054608ae864e0ec8313cd47073b2483568298f00a706201af934322a2cc95cb7b9d2e8af1328068e8d7228fd1d76400c86d172b2fa956cc0482bb5421f1b5100006de858e8a5a3f27208bdd54703c4a52c8c12fc48385a2054912a122ca7cf8eb00a3f9ebe51c60b9933a1c4f5b024cac1a190558ea038405b0050828fd3df8b8304b21ca426d4f30036f875d0c7675c6899014c162b2dbc1ca23b74e2f1543670620d4faf0e1a1b5100806520b004e560b71186afd387000b401a109d00b1b08742383106b7dc0f0d05a08c4c1d3678b876d9d0135e142e01ce8ad68b209d36397c5aa923102d206a200c5fbea02cc40d3843c045e970d2edf5ac2708854a00270d3c313a57b192c8efd3eec3c722d319004f5048a01d4061488ce0e1c5c58cb10e7a0b72600025e1330055813e13c607580d3803509e003560f004b660b7130b92588f150b5410e82d5c92e83558d2112840d04a0a8f7e167a1de828446a80c351eccbdc4d0802dd2c584afc32e836d2f193ac66d82f9c0fba1a321290503c4db0f3d05e56e6854827a8133a06f414621b2881217773dc028598d880228f5e1c202d8020494a26ac6f189c1a2f0469353029fc976071b948d6bb430c21c08ea8c638268646c06d119cd11eb3aab392141c127b0112b70febab42e85594d73c8c5166300380769a20ae8c0b3e66f5bd86bca0323c0e7a3a4e0f423ff0db9cab00b4da1006edb9fc3fbd33e5144aa523ee41852358108c8b6a37528a1ac80d86e191c4f1e8763f2db7cdc14dfc2d3e58772c62b42438b4cf260a595c409941aa9cdea6568f8c9994bf80eedb2827ca3ad788927c9c2553e9663470cd2bf494a53401b06e79787a61c3265b535eefd7ceb385cc4242f46501fb582d1db626899860d1f6dc3c69b73d18a5d113f0b3c60851c1a862ab26daafbb5e108ad4266f50448740ee5a8fbceb564b77332750c02f986dc433d513f409f13ab1f6240cac0ef08423cfdbbc16b5d09a8a46e2a7f060f1c28d177e227048ba5885b2e9c39386a5b4ec5a680b5eff58c38447e3fff9439716323843f23c77c01540ade7b2a0ff27f0fd2b6d25645f54ef8aedd8d6c872dd0938881c3e701cdd947a40619083df478dcb4fdc56666001e01ac5c05ee6ac560124b1048cea83190e994190080172392eb147559fc5d0400000000265245b61204476cf336436dbf86ece6ef2db1b2841b368e0c192157468fd02cc03d0f7ef1fe184cd1d4133385f913dd2405eb110a12ae10ac72cd8dd734b9e6b2c4dca63234ff9ff84e064132bcf05c95ab523899df54d92303eb91e958fded6280b57e63a130864bc1e0c607863b30d8f90fe6f5130b667971896579718975fdc8c2b2c4805c59623fac3f57b504c399473d2725570506015eada3acb09f3807f841f33ff805fc01835f61575c5e41aeae2e2e2f3f54fca4fd8fd776598c97423716c2ab4eae62713f8485c5818963e3d43823bdb81c7037c0890017c17b3d38166f83de7078e3f3b70edee0b840a64ea2be4db905f291872a975632c5983ac990a9d3dca1b07587c8e29b6a381363a54ed36a2a0fe6f1ba71aaaeb0ceafbbd44b28c8e29a745bb7a859b88f53ecbe3b175a17d89d0b661f66dfce8512cf2afbc5c7cf73552ec6399fe39f7df0cb8bda3342564f4dd85313f6d4844838dd52538df4f98aeb53af17b59686a95c6c5a6dd3bfa90528ff4f3b9d47471ce47979c3a18e0d91ac4c8bc235ddeaf4fcc21a30fa4f19270c162c98bdd54a3b3c3df4c063f6f5b812a1a0783dde53135b938653628cb3ef9b557459f6b702191d0def52cde99b2a753d145b8dcc4ce95a8e954af755b5eea47d4dc1b4d612e3c16eac5ce36c745756994cf5da50995c1299dc60e6bd29bb3c0a59f29185e41ed947d6da2854ca5559b9c6c258b34296946bac5464d3a2b02ae758b34e4e99298697ef7038cc3c62665a52aeb152869b98ec9bb26b7285739adbe5db14b76971c8a6c9176eddb575956b9c53388d89c3e110765d1cca357e57351c4336fd1ac62bbb4cfe72d28ddb140926e412265d9725becaa45b2cea64daeeb05303869d167676764ed439a2ec1726945ad28525141306854bb8bac4bec2acbe967481712d39720606f60306b1b282c1ac3030afaf2be018bc62fd5c30e6ca2ab556cca681635d29ec5534738d2d57ac83ea8a0597317592ab1876b7b056ac1f0ca655f70a59749559ecabc18aedd26ddb9f32f96e25dd185e5e69757d5fadf6a54c62c1b0ee8259f60783c52e9bc62956aaa6591dc615c3699756ddab350dd4c5760db65c4838ddea458dc56c1aa859e5fa8ab962400da748b02cf808ccd4495455c7e951bfc7e3cf35b65cb1cb06619f100516fcd070bef0e1d8aefa15b41b2186f551d5ccd48552c770bb6aa52ba6eaf78a4d83ea981abb403055c72e30ecd54ae59806ba40586d975ac7d605be3a76c9621758a65b17480644c2e99657307681aa667571cdedd24b2b2c9e2e0eb3d6f07125e6e34acc4cf6d56a4cf15299fcc146a3cbbaee5593bba65abce4b2298653a31a0f595cc2193eb66bbc662637ce6dbaa6ccad56d36dfaba5c3976c978ec9ac6adce70eb16d73833b1a9261edbd548c64b2bea2e9e9ab2e9526c74f39abb958b699be5b26faad5580d273532ce6e6edf3845b63aaf6c4eb326aa3a2ea6ed92521e0e8dee3125bee931a7f92af334bb1a835a605cf975b332b95433f02b8824a743788884d3ad6166d95cd44f884b984dd7a57855cab08b5c7bdde21056ba2fd83037e5d7cd4286705a2616c369d73037655fac93ee5a9c8d6e9ba6ab46325966bac66cd3ecc64ae65b545326d8e8aaaf5b5c2bcbbc57c7ae1aebc26cdafebc3aad98c6b166d36a96d64f175bb7c895e698473b1c66655e5a4a6c97b985f59acba6695a9a99924b3566d34cda98069bccbecac4320fb926d68e651ebca4a43ae9b494987d615f616159f98aebc857d7d59a06528054d7dc2ed715634bbd5c60ec02d576e96ac52eb0e57ab5fa7e19bfe2e517d0054ea0ff4f90f407d9522f5eaa95f6a2b2124ead78bda82153a70d9796948cae8f2c35ccf09ae6366535f2758daf9b5b57ff678b93c51c31143b08a4fea739e7004170249caebb07e81c0bca035a88eeee012cf74de7dc992386a7266166313dea2e31f87f93d08132a116ead855d350503ca8a6a25663d9340943091531e0b55b20869742e10abd7592c85226df2dddb629f2aae55226df2d35d55b45285e509258b1cb06d95487fd2792eecc376eb3d45487c5ae1ba6cd70e857c924ca3953c89973af23ff03f8e3efe4e8e09797c002bf5edfb84da6faf5e580d82560f61d5c5fc1f328b99e527174cf4cedea029be0b43d67f7b87ba3feb0109848664b936fb8de0cd9bdc9fd4b4a39c36a794929f3b276e3b57363c30d8ae7d9b5b1a30781416d9afc3091214b3b04c6b0b16bbc6c2abeb04f28047e7105c3b2c88459477e615f6241a1d0a74c35d20727117071c00d9929ff825ec8629c16b3724839146d9e04f7136ffe9fc41b97156056081a72049c2729368d1d4fe0093c471ce698427246a48ef61d9baeff5450bca7a6d875dff32c914b9443a459e1ebbeaf7663a17229a432c6637faef9f6b8b2e99fdb3aca0a871ddbf5cf1901e788b040cd0277cb7c51b3de6583e7f19f3cecd2a07027f8e541f19e9a9ad2983020d079aace5ae916e11c17b59a302dd56b69a92e0b16b55a519381f15a175e97aeba6626adcc3bf2746e992c0b2fe156b71a7691c5fc2eddb3cc839771faa64a65aacc3d7ac0eb9ab6ca3c585964c5cabcb8ea3fbaf6dd99157e793a76d5b8d4b0b87d975661bfd805b269d5cc99ff675c335886b515ac93e91bafe91a0f8b2b1f57fd6a3517665279bc4b2b9e7ed33755c2c7346e75f1d5603c586d4de6d735a646d72babad6bc54b2beaa3aa63a5ce3c22cc237db5324fd5bac82cba319c66ada64918985d6372cd9a8d630de79847db945b2eb15647715f2d55ab5aabed5a847518971a16b4f20a96a93a4ed7374e953a6c4c8d750cbb5d31bcc452f59aabb659616af8538d756c5762aab65ac996151646890b66d365bbf2982d5beac54bae31acb3eaded0ad9b6338d56c8ed31caf4b572d35e6d4c5ca3eddae6c4eba71ec5a65de9adf65ac8fcc34092f5d66d0c5ca69562e73ab95ae2f0d5edfdcaeb9f95dbacc1ca7d985b3abbe5a4dafb95b99a76aa17e97450db7eb306b63d6c856e7362d32e51e6f8fbc7499d9c8956f7c85652dc9c0df96580ecb12fb65851dc95956bc562bddd488d0cea5f31b79ca94acea5c45244f99929794dc574711c22b4febd708cc3cb5654a83adcb6c7f9907a7eb7098d321f34ddfb8758bea0a1f5b974df37098610d33c146a3abd5f48d75d28a371c2eddb33c1c0e33959c3393eaf365a621c9151954a65efa98560573ce527cbeecb6c3e1302be730ba299bce3c385edb65de52dc6d81f19fc78347f6a9ab900936ea37efb424c0d3c614ce9a989744b7cdbab854dd376e57e4775a68fce7e55fe6b599594c91bfec3bb66bfba66539cb0db13e966511e1ed9b2a6317b8cb82e67f157c15efb2b059b6aa98aa74bcbe6b99a92a476537ceb29485c57f03768d2d9622b068f0dfe7638929d17d9558ca60697b95902957c12f2f2aea0a10573cf0d16377e5aca87c9dc254cdb26b92350d0cb6f5f09f97a5ead6055eb52e302eba62ae18ac6a0dd4c91458d4cae0ae2dc9b5ea5a29f3ff622c9b5e81514d0583bc765daeb96d5aaa9530337e358e384dbeae16d5140ce3c85453c16056752cc62362f160249c6ec5f0bb2e5f6556ca4aadd39239f378b0daa63e7880cc4322874a263236b66d36ae7949296b984db5326fd88b5a0e87cb572c0f352f865db6cdb00bb7f15a360e979894861ad6af8e8d463709af6d8a2cea643eb66b5edf38c3fad8ea63fa6a35cd36c5c8e3ca66b8b8c6f05a5c95bf214657abe57449bf4a39a74a65ea957943226243e09c5453fd1adda6a31bb3b95699d7d4ae392573c1b2b15db386d7b5628eb932eff565897d0133cf85d93433659e722bf386c360e62dc13c60659a54ca70e629532fa678a964d3a5ccc3e23aea4009c19fcb7348d550b210249c2235bc545da0a1ddb20617f62c45d82d2bd82de72ce12c0b587ad92dbbfc4a372fed50cabeec949776e4ccb423fb946e66da919572f6652638a331d92dc99643fe67df9252aa74dfb8d5c2f48ddbd517038979310a2f7af62db169ec2a65df70286cdd616e630dc34a9e3eb66e7be44adff45da63b58081ce3c576f9c699c97d751478555bd59caaedce3dfbef5326d31866d9d4d8aeb186e197474cdf659abecbd45d012850f3b94288764943ff99ec93328de1e41ac72672603e1fbb228bbeeb72767eb10b8c5d37ac1d6bdd35ebcfd5f9732714d7582791f1fafefe9c09b00ba4e3a5a656b91248f87fa4c12e6d87abee958ddd9232e7e9d68dd31f8c2cc6a915efe8c64963cb9516e46a5dabab350d84d734500d83d7343076815cbfd805c62e50b3c4f5b8b2596b5acb75c5ce2c664f6951ab6555a7b95d631e6d5a54a6492193d571baaa3a995c87c30cbfae665bb5320f8d2df5f2f9864c729b6aa25657a38b957970da95795a8d4d2fe365326be210e61a0eaf8699b7a46a2666bcb6cb64d22d2aa99a09ca2eb8b53326fa7f43d5c594d5c594558a191fd819d918bd3cfbb2963a066b55fda93a8b2df55a73bb6057cc7df59276f5e20ddb75482413a9ca2a97324d0eb30fe6a541b224ca3429f4f9e0d655f595aa62a95ad5b14ba6eae4fa82c14cf64db35c574cd5b14b766cddb7ecd8ae30bc7ac52e908ba7b6690a1353382de676cded9a7c75acd50c2b598d641295e0f54d8dd985339c7999c7830909a7c85f2622210a4034c15b525a52e2b9594c1fdbd53db65fae114ea9a4627f8e1ca739bf2e31b94b8dfcdfa530be1b1a71550febec86ba571f55dda5b25f58ae320b66d9f48ad9a65eae2b26542214f252e212662a59d54d3a91c0099aff3e26b6a79d1323ffb59a9b04cbbc76f9aaec971314cf55aaf642bb6187e6eed0d2fec3449ae0b4a2db95757215cb5ad0c01904bfbc9e9a534fcde7db35b9c3e3f18eeddab6cb30b638e9f3c1b911ae5b170bfeb9ea32a85e3175127555974126739e5cb63a0f5d7519dc3189ffc3a9ab2ee1dd1245bc572b737ac5b2e9158fa9d39ad8e226cd2e553719bfae57512b836c6247cab25a376e7532ec17f452d3614c9d444cc3635abf5a4dc25321837227a64eb284a28fef2f899a53934eaeb113ecaa4d3b3120fee7d7351ed72d6dfe04ed04edc02faf08af49a722bc2677c1147e38e916f5f1b8bef1bbd46a2bdc6aa30f4ed78aa9b1e92817838bab4592891b4b69ac32ed9fda4d1d41dd085302751a91388d74258c54d6dd525797ecd52c9b5ea965ed940cf9305e2a87633b301cae5b3756db6566d2da81bd015bc6a931b76ecb9495fad549d735b65caeba0cfed277f98bd9b2d277f94b61af3f67410410fcb9079efb73c0156dff81476dffbd0cb5c90162c3093142c8bd0096884d2e0766f53fe7c2d9e2db443e3afee73438db2a9428032576fe9f57e84c51e28586e60d1708f8e0248204b1ff2771ad7209e570c687ffb907de62b8a0031b7b8aff7573e43c009614c21d20ff7345cc30f92243801b11fee7befc6063e93d1a12c1ffb32bab48a02f3cbe14f1dfa8c5183e42a85923429fff4807186044cecdb7c8c8ff13d0a1325312a9c901c87f1d0243126c902c3cb1e17f4e0780e795e36784b8ff3937620f852661a0d0f0c77193d79ddf0b8d17f21f72af9d93d3ae6bcddfbad90b1e0ee3d48d33da30389679ebd0c89579bc6cd4af7bc50b66e6abd586fa75af78af5653ad79593c647c7463a1506b63d646a18e97caa45be4696d54925bcdc66ccb359885427d8493abf2c773638d14e30d874637eb234ca23055dbf4c8e4c82466585d99c435338930132eb05f0a27e1a45018eb631eb6c31cb369d7283ca67032a76a7a7d63ed0a85c3624eaff2aafc05c78caeaae3f45dc6297c74d9b4a2caaecb76cdaf56661866d26a9a4416d71409e3c091df5523d9e551bf4d3017d8ef4dd965718ddf54995baecc63c62e0baf6557995d2eb05feb2a9742619b167959bf6e32c36b9ae1340ff5f28d8799f9ea2594b5cc348cd35c559587cc5899cc5923cb320f5657572d6d35bcccc5f5e8b271dbbac5d86561a6985d97c4ac894d701ac36e7209c36966d2319b4e8f9ad5c8b214f65a4a61271e4f09ed17f462f20b7a318942550b637d5c8addd6b8e627a534afc8d8252e291dc9c8dcba6b9a8d6bd61aceeeab89af36be3a3e1e53315e9b26330c6b56a9892c0b8463b57595f070a8e1764d8f696e9770d66969325ebac434c3ec9ac65acded9b6ad6759559ab2e32d6c9ccd3992d5e8d5acd5c606c3246aeca545874552777e51197c8783df290451d3bf960651c23b34feb606ecacbb46955a64ef093dcaed985d95f6eca30b34db32666b1e098576ecaf0aafc6536557ff975c9321ceb239bba7166c2a9ceed0f2ec65a2bafca5ffa2e7fbcf45dbe2e0ceba26e3317d82ff384b1cbc23c55c3cbac89f00aeb561f95cc98e92af3d277f9cbaf6b8c5d16e6a515d97599c2ab32cdc361d6483138ada8915730cf8d33f34dd560234f8b978d6b86b54ebac578e9b6e9aafc957df156659a5f9df6ba6b425eff51cdbf0db979bd29ead327e92733e5df75fe648dbf7964e32793e3df07e4e0b4fe21faefe19f2687bfa9c2ffb6fddc3a7e23129e8bbbcac531c1e2f6c34f2611fcdce99fa6833f8d073f95c4f8b9af7e2cba9f1bcc9bf12f4af9f7026f603f19d2df04e2d6e6dcb27eea1c3ff794dfc90b7ff3c41f46428d0c7f7385ff4990a4fc8800fdcc1f7eeeb2dfcb9e7fefe01657c2efa5869f5b05b7b638a437e58f44ede7de7f979e9fcd00726e30b02dc9bd75f9a9e0f8f7935f6dfd778aff596b4efcdc8bdcc2fc5802fd3b3eb70bec911f01f46fb680c16f34f4efdcbf44fa9b728ca2fc4a36ff46f423197f242216fd4efafc4d2c3917923f52961f919adbf9b351fa9b4c53d81fe9ea477ae03f94da0eff8efae1a8f8d994f123c1e0e74ef487a9f037d5dee0e4dc8e7027fc5448f877d9df56e5df59bf158f9f5b450221f7d6c05f66f77303cac1157120f776440eaeea77d2c0dfccd918018e8b9c9b107079fe2966febd736f4fff8ec4bff3c0cbdfbaf06fddffa580bf49e7d752f63785ff9a3f3f9be7cfc5cbcfedc1efe2f89b07c0ed1cdcfbafd9f8b9b5726e1cfc6b84fccd27bf1af637c7fc6a2b7e6edfcf29737eee177e24147e4437e866fcc22ffff6f3e6220e450e8e2baef71ba9f05c1c977f4bf3df83726e3ac4f98dee3c17e7f59378e4e7867fa3109ed3c9f0c726fe9de7376ae0b93806feb00c7e6e337f2ae66f1270c0941fe9821f11023f15267fb3829cdb08bf6ef85c1f1c6ec11f49fd910cfd49223ff7ff23f0df38e846f8e188f99b30c45965f04f79f9af10f8dfa99ffb065c08ff0bf673e3f8cdf8f9b97bc8bdb139b741393763dcfad38ad3cfed271717e72f00827fbbbfbbe8df5a7e221efcdc4d5839381422e4dc0afd485c3fa223fedbf05c5c04702b7e13cae7762ae4dc76f8afe472fcb937885bf3b6736e28fc5f5ffebd41eecdc4bf83ffa744b9ffcab6e1cf4d25aec9ffb3e7e0c4de06fd6106fddc33fcc243ff56e02f00eedf3fb89317c7231797fb7728fedd083937b0eb68fc6144f8b965305a200727e35706f9b9937e36cfbf913a17e08c8a3a3db93736393829bf91207fd30dc9ede791a99f7b80dc9b0b7f13ee67133eb9b74539382688a8fc6e0a3f379a7b93e137a3f63751f88f28feb606aec3917b4bf207ebfc3bed3fc2f8aff0f85ba79fbb442e2e0ad19cbf0bf36f6e90b342c191d2ff50fea319ffc79e7bd3e047cae047b4e68ff2f57333f991acfc88f47f24064cf06f2eb9b7a8373439373c88943f16373f7799ff6a604ef8f7d6ff56f037e1fcca1a7f13819cdb0c3dfe98807fa3c9b94abf9315fe2d27175725f7d6e447d2f2238a7fabf3e71efe43347fb3eacf7dcd6871f46474ec9120c638559c9130d321697184e587ffbfae8373694b2a4dcafd70e1eb005e90a8fc0887314520d13012f24b3323578311528ca32e321c08011a1849d17df0164830d6ccf88e726b8ed48c90c4a0a1d0919d6f9a7ce494208211c6c4d104ffcffb62f88f8494764e71f3ff280d0fa7161467917301eae80d54d99d264c6094e84810dcc573bab6dc0ba33e2448e438b82e2e77444267a4bec891a0714af03ff79e094c8c0219d541127204e8ff6fa4746e39737700a8b1c3a8870ea31227be801a2cac94482231c0939c085125e8ecf4e4521cd930912bda01736ae55a5d1589f38600e8713ae596c8490320bb0f6795f306a9ffff7f374c7466d2e50341a1111297dc8f722c18d9f0ffbce02ed8487340ed279133ce9a53851c5c4ee94ceaa9a34190d3e3c408ed50677b1a21916094e371f689596412ccfda40b93f321462e0aed24f1aaf349e154f19f548cbc08aa97b92aa1ec4402a653e6be55b5c268ce90e06928f83f47a344aecc738fa35ba342ea4c4e451968dd821c171265ff121b6818208a61a680b9f3ffa949d56f8a848546a492013760b6d498e9fba63f98ed1a7bc1201b837e5903bbca64af49ab6e716d9752fe264484f09676e07093afcbb269bb26d5b4003e497b5624a1025436a2acd9408b990e22dc8657d48e5e598f5e393b7a0578f4cad6d12b438e5e793a7a45c7d12b308e5e291100120a142c50281d1c85d2c05128071c8542e528942294afa350861c756b70f71c754538eace39eab639ea8239ea2e8fbaea7f172a56ecda3d475b128eb6161c6ddbb4568eb6c4f6c8d1f629458a193466bc70913ce168f283a3493947935d8e26a11c4d0e8fb2898eb23d1c65e18eb2291c654938ca4a709485739435e0e851890593b4025561022db1c638ba92388a1c84bce128327814897514597514c93b8ab47114f9e22812e9e831d1d1a3a0a3c71a8e1e5b387a34e1e8f183a3470a8e1edd1c3d92397ae472f428e5e8f1c9d163d9d1a3d6d12390a347a5a3c74c02805d89004e24a94842811ac51c35b21d35228f1a9b1c351af98fa2040aedc1515dc151edc0517dc0512de6a8f672545d74541574549de1a8aae7a85ae7a81ac2513583a36a9ca3ea97a32af3a88a3caa961d55b78eaa54ff033851025581162d385a44e06871cbd12294a35a7b8a4c8e167d478b3a5accb8813a8172d409da5127478e3a713aeaa4c551b4238ea2d970146d84a3680f1c45237314adca51b42747d194a061c17081234612da0047d1641c453b7114ed479bf470b4c90c479be039daa483a34de41c6d82e67f8a130124a5407ac184cb51266d4799c047993439ca04ece8123a4797487074899aa34ba81c5d323cba04ebe892a6a34b928e9e1971f4cc86a3672e1c3d23e1e8990247cf08387a36e5bf0b1a326224c940cf721c3d2b6156e8a8190d66271c35bbe0a8d996a366c6a3666247cda88e9add386a8662868b194ce80b14975136e46859d3d1321947c9141d25cbe12899dbd12d2947b7d08e6e511ddd8a7174eb478f0c3a7a0487a347f21c3d22c2d1236c8e1eb172f4487af4c8d7d123448e1ee971f4488ba35a828e6ad570546bcf512d118e6a417054eb80a35a638e6a6939aa151fd55a8f6a791dd53272548b69c763b4c85163f7b7d8a1275608c002cd6296438485cf7f3c2ba0637afef3ce7faa70a6f09f28fca79dffacf39f27fca709ff49e73f4b40f16a66dae502ff9304dd39c2ff5c08a7086708accaba5bb186e1dfd89acb6a2b26db7e1d9794d2dc3c6549989960a501a6642625a64e1332894221af81aaaafc2e8b5dba26da56e2ff6acc6eab3b01b5c2e7e7835ad9f23f6e7530ac08af583f2d325ed63a988bf997b156233276afcc5ce37ad47a2d452ed778996557fd6a1e8fd56dd22db62bfca6c50caf6a299cd556d56a0aa76b709a74b30bb369cc3bf274667a332fd6f08acc318f16595c5f9dd448a55e93396d57b4e190894ebac1610a675e6eddf5d56599a757b4a1d1d544362ec2b058118675112d0bebeb4a286459bde6f3296126684cb25ecb4c4dee31c35a6d3dfe328f4985e3764dd7741b2bf558e66530afb02d58a9759acaea156d98e6ba5b574326f0aa12d5d4d75dcbb92b03631718bbc0344eb19856aa0683c732c86939413831c846a0ca31bff1ae3904258ca3aea13fdf80732ad096863f490398ff458e26775e2a9e3ccaaa50d3bc97796c572613264c9800a04dad98f1bbaabfa4276c3c784d5fac371784c08102eb01875fde6a0280d675e10ca7596dd3d64dd95fce09597c73c604fee766d8b93ef18f50048108f77fac7d35580cbbc5bcb6cbb32b25615a19595c26c1d652a418af758b709b16739a8fed1ac34b35d56c315ed9b5981af53185974c6b2e32bfd9f5f994d08630ccbeaed105baf19adbe5b2a55e705abb445e1ddb952df50a7b553198eb27e6be7a49ee069a45644a131830cba66fc364ccfff306ba044eced9d37f07d0b212fe0b555dfccf0ffed383ffece03f39f8cf0dfe5383ffcc0003155f8f929dbd755b153f1e1dd371a32a683051bb02898a825a61264c011a2ce070912c490a7bc15e6106fc0f33a6705209d2ff77d9baebab95700a7bbd1a0c664bbd7e41afa2d1e8c66daaa65ca6b92e8b361c3219661c38d08643264c9d366cd2ac72299623478edcae59692ae7dc94a798a43291a62cc51495893435e5a528a65e26d2947b4c50b9a92ab79948535666a6a6bc14a59479aa4e6b57363359f54dd7d662ebb6f9d8ae4bbdb2b95d739ab5ba6499d25e770d4e63e65fd02b49461b522dd198bc4b4a6843a65fd02bf3e038fd05bd786b1cc32918335e8babaa5fb0350d8c5d609435ec755f4da6fe8cac0e1a591d5c936b17532781631718bbc01509c35e4c9de482282b9c856695c0a273b4060e476bc070b4069fff294c0c806205d9835ed171d2c595fd5950244e15969c07681123554f555884e42a2c415600799bd4106d55587ac327309e11a627017ae4b6bfad485b5b1b91b6366193125a85e5553c90ac32b906e13dad39d57c87128d1757c1a22d69e74297228015e78936004cb41000e9a884118a1c0c1b2468d4982123461b1ae40710e49454541a055ed79650b1cb0645594ca63dd15447e3abb644660e196dff6b44f5a09e9c784d4c3e7a2c29f11860878e1c386e641b3568083043465b0c182f5cb4609184560d11e22bd2d6d646c4c94710aa284cb635b5650cbf50946e9b64d39eacc8e39233b332b231b1609812b02fa0575712245c5b47b4b2b0aeac7e41a86ebc6d065a4350db63e40ef5e4be7a09d3aa755778555bb1d2fccf290df893eeab7524a8840eb4068c134d0ecf99d34905336668ace9a134b4a034aa60718d8d1d0172858905737a8000465c003eb0460518a20260fd6ffb4bb4fdbab61f801d10120cb12b5341a67742ceff9b20e078224a94738b96629a05cb79a54d833ca80c16011ccbd11858e097f7ea2d61b1fd616005c5afc25985ca594061504d91f277fdc4805f4bb8c2beb6f2d06b0c28cc3af20b06b3bc845861bf32b031a1d9cf6bf8a5c07f16475f8cfd87f26af190c554e7d6cdbc774d954332172ca77a2d8ed777edd56a6b461683688b283f2c15056d91e287ca41a6501653d42f30358984ff703205bac0184ec15aae581fdf540c6cd834ccf94d330f386e3556f6016b969832db544aedc754afa9a7d352d66a65b2526a9948538e52cbbcd6cd4c5c5905aa5be05735307681aa8e5de06ae5ba623c1de50a5de11e4eb760e31756309902db142906c3ba0b4d11084d21a6a8c972daae5ec1a5214a68c32525b4e190896b6c6358c7e9cb2e8d1a1ecbaf6bcc6ca957cca6aa3ea66d9acc193d11444f50fdbfc184021067793166500052fc319b16a6ef32454d20fd77d2c737455ee9c65cc7062d61e4544f50bc271e5453ebc24f845a7d352c96c27f51126d6a544f4dd8438f569c97d431d7d96b7b2e86911f4c9c5f0beccfa17496982e75d20d9e314c44754ac3ff308e1a2902e23fecb64cc3216a74e7ff9ca3466abc0c87f9d8a24669a851939f29fb008842cf23986c4efff33d95778d2d97d65ab02ba6b6bfd675c5dadfebaa5cae189ab3e0cad19c169a0be070ef75b5aed238c5327ec163ae984ea64066ca8aa95cbfa097aae1b42b86d72e578ca993c04c9d2466d340e3972b66fcfa19bf8c5faeb1e57a5d2d58c98cdb6536bacc364dea640a7c55f84a5dafb49229063f653786d718fe195d6552c7f99713795006ff825eb086631d0c1abf62387681b076b16055c35c573a665a6569566d114dbd99430caf5d6c69bb7af99af252bb7ae5cc947550096ba8720db32f37e5e130fb7a699969a8e1d4ca0795967d305327c94d9965d3abb1ff6cf7fc9ff25d11ca9d115a67ea34659af4f97cbe2280b85eb2ae56a649a7d725c20e115a52ad1281f51f6afb976ad7a126ff0f11a1faef503eb4e2bf61a80755b386bcb8316b08ec37e4646847a144c9556d5763211e98aa4bcc545a6263d90516bad3baf013272553ace94a4a2a48105f0cbb48279f328e9154d098641f0e184766c2a1a67a4bd551d6581f8538b20f078ecc84e389d7c3917d388acab775e1273832d31354f6e150571c520aa1f86fa84300310410bf31440a434870e3d8aeb975956b1a3c845a1e42486ed763bb363535c570ca121282100f30213c8414f8637865d3aaf6f97c3e9f8fd053f61df320b7411e1c7e7983c0e4a663bbc683deff6bba3d93696c1af2c98a3c1ab57a16959968c47fa64e4b93ff990e8568f35d0b69dfb5a0bf6b6178841404a0ec93e0d91744fc675f10439e7d41fcc2581f81b0f3e71d106d7ff601d1f5ecfb0190fe6181ec637f90f201081f2c78f6f9100fc93e1f74d9d7439e3ffb7a68f3eceb01f9675f0f4fd9c783a13ffbe8641f0f5a7800cb3e1e6064df0e12fcdf812dfb763ba0d0c12dfb763a2875a0fa9f7d3ae8feec5bf25da03880c800da02280664e4d997839f5f7726073039e8e031636512765bdf52d9ae594dadfe98f9b3f64789c3203d2bce27a793d7c4e4e3ecf1a358aa0d219cc52ed0e8beab922d0b4eb7d8340eba5afa9882a95cbb1ab8e8286bb08c9906587f1642ff36a3fac308faf7cfd858fc6c5f3fb7f4f9b96ff89577fe0de74fee9f3b451ca334567e38577fd30f10a304fe2e297eee0f7efc70949f5b8900a33a6f884749bf54083f371e0c4c18fd636cfe66947f77f4ef2aa871a4e65752c3df6cb1ff24dbcfadfbb15cf0739ff995487eee17477c80c507e24f06cdcffde77755fc1b78e7171be1df6faa1209b1f57fb5fd4df89fd2e7e7368af9c710ff1de69f22e56f52f0f36ccacfdde4673af99b3100f8c162f87708bf1835bf1804fe2b3cfc9b88261335f28fe9f1efb82931ca74cb9f89d2dfbcf257397f6ef7cf12fcb9e39030c45f46837f77f0078bfcfb07452eb8499178f29bcdf99bbe5f57e7399d082940f0b388939f7bc58d1f5efedb813f3ef273f3ce0df67379e0e7eee0ff2232efdfacf32b59ffcdf61bd1fab993fc5832f8b9d1c8f8d5f0fccd17bf919a9ad5bf4dc8f2bf74feddcce127190a3ff7d8cfe3063fb7972b3f11097eee1e045cfdc417fee6f99b45f09b1dd16707dc08c6370730dd4ce8f02d4406097ee392dfb8feec32f37303c9e9ec80f0e6ca38f7531f20ff920a7e26ff8508f9b1729307f57bb1f16f1e8a744428fd5bd49f5b82bf19f7b3ca0b3cfc5cd0bf997f13bee7762ce431ff12e2df6cfbbf4af8b7fe751cfc3a16aea8dd840fff0ee9df75f0a725fea6172913bf16077f0135fe1dfaef4e78f26b36ff2621809f6043fcdc563f970e3ff71061127869f83726fdfb863fcc8c9f1bce88061780ff6cebdf28a67e18837f4ff0b732fccd35102cd262d3ed0bd2f4bf56e3e7ce6a5af0a7d8fd295ec0f8b9fcf9b941f8553bff7e32fbb9c5e2e7e661c5061d294852bfb1ccdfbcfab524faf709ff19ddbf8b381511f2b348e4e75e6b9af99513fcdc328cda3c6784e5392317747dfea335ff11053f012bfea6220bb8fe251bfcdc5cfe31547ff3843f0d977fcff05351e1e76edfe6f05f73e06fbaf90fd545e9e716e17f13fddbc7d1ef4fb2f0ef435a2cc2741a28fd66a6fcdc3e0c7f2929fcdcc4dfa8c1df44fae32d3f37141112fcbedfaf9a38f443d1f36f3a419a84245c127f18167eee187050fba7c0fd4da33fcb0c3fb7025b903f96117e6e036e24c3cfe6849fcd18926ef89f64f9e7df8166f8d78cfc4d08481039a22308028a9b7faccbbf4f10e9fd318ebf89c40d100ec59f6a0c3fb7143e5f7e2e407e2ebfae1f89f8230dc1944364449ab836bf46e1df597e98819fdbc7afebe0d7e5398321510f65cc7eb418ff7e33e1bf9d5fd7c70dd102bf10dfef040c00206a8454f01799f17347fd48633f92f0cf82e7e74ec00dfd97fadf6a6439287f33543ff70e3f015cfe660747bc55f55c2b9f5b11adcb723af273ee13607435fe78cdbf05e9f07b39e1df71c2fc637ffea6144545e01f2bede7166394c14f18cfcf1dc19f46817f13522225ffb03eff0e4383e87f89ffd6fae1b8f8d99cf1bb39fe6de6f79b19f99b41da7e2eebcfcd811bf1f762c4bfd132ab5f17c449fc6f312604f8d92cfd6ceafeacb49f1b835f889bbfd987042d7f963c3fb71caa00a0fea5f2dfc4e56f85c8dfbc408704ff10877f7ff0abc9f0371df87f4e3fb7d91fe5cadf1c139ef8af10f9b9b7c005fa5b16fe269b213f93c8dfecfab384fdcd0cda18f0eb3f7fd34af87329f2ef1536be7ffc560ef87705715a20f4a7c87f8a017e3026fcdc6f6474f99742e76f4e80c4e72711177eee008e3c6774e639a317fe3348fe8d00d3ef04887f63314a0146a6e507dbe16f42a5d0ad786b734bbc79f9f8db28fad94431f65602ceffa726c47f27814bfe36a8fc360c2d2139e0d72d7aaecfb9f6a7c8bf49e4ec06f088c77f6682ff0c05bf59067f93ca6fb4f6eba8ce0d27876888ff8b82bff9046622033dba1b8ce072ba1d4e3fd1a4f9b9150d79f8a710f977037f72cbcf7d54e5cfb2c3cffda64f8f8db6a340f9c35dfe2d035c073ffea7403aff56f475e482851e381a787e25597f330e0003048473dede76bf90a9bf8d080bfe36e5cf6de52f33e3e7d6c106097f1401fe4df6279ffcbbc79f02ff66977f77f6ef36905f8b849fbb850bfec3a181f0ef08c0f0b82eea4d30b0167ef7877fe3f85f037eee1dc2ffccfeb97fd8f18369f28329fe612bfccda8b8f60706f9b793eba07e920df07387fd5e863f779d12bf9219fe2df68379e16faa7f9ae5bfcfde9ca144073b3f96323ff798df090c7f338b910181bedc68863d34fe07d9f0fcfbc8b959fc60b6c07cfcdb4d98e247bef8770c358ef8e932fddc13c0a121e03f16faf70a7f19367fd3ce9f86eddf2fbc51745b691bb84df9ad6cf9b78aae1f4cc70f36e42743e8e7ce8109d75f409c9f7b8f0f837e33713f370fd7251df80303097e3537fcdccd736f9d3b8a007d901a704bfacdfcfc1b099b37567f98efdf475c0705aec4af24f96f176230224e8134c8a622e1eafc4c76f83704647f96097e6e048cfc6374fe6600ff51cabfef88e5ff5df1efde4f80fa6f1d48100dfabbe0f073d3b9ae489637fd67f9f8b91d60e1821fcc9d7f1bc98053c70e55911f4beee7feb2e4bfe2e7df03fc4cfd376588a026e86703fd3b07e01df8e11afefde21ffaf99b5cdecccab9613bfe22897e6e22702ffed6cbef9efd4c3cff36e08d8b155c8aac33fb89bc7ff7f9e11e7fd3c56f14a789fa3785fc400afebd0607c30b37fc69fefcdb875fb9f673c778e0ff991ab2bf79e70772f937087f9a297f3305b82664fee38b7f2f1d09f0ef963f50e985ffeaede7bef22b67fcdc2dfea40fff8673f21bf0e5e716e28fa1fccd047a7db4fc6d5ffe1dbc8233e64f877fb30024e9d6ffc4f63ff9a9a1c5d6afc4eb6ff6badcbefc6a36fe2603487fdbe6df2cfc073cf977979f8ca2bf39c098a6bf4bdacf3d025cf1af92f5732bffb6fdb94d1c152ac295f90986f57357bdddf87746ff8e82ed81db5b1e97cd8fbcf2ef28afe0a7e2f4efafff38e36f9e79dbe1f6fb592fff7e7fa40a7e4468acfc6d89fe2bbf1fe9851f91058682fc4adafee6325ef49ba5bf59dacfa31d3ff70c087e2befdf5cf2b72afcdc28fe24513f9b46c7f6df75fdbb416f3a70f8c304fac334918e7f70f96f018efc5190fcdc4b0eb135fc44e0e967d34410207e32547ff3f827d1f3b3592201a69f39e6e726fba98cfd54d4d85c177f0141fc4d12bec92020e717eafe7df57f09f2378b82e2d4df480e3fb792273affd8d8df64fe4214f8d71efe2f66ff4ef4ab07fcbbcc4f86fc9b54aeefcfb5f87333c6e4fafc608386a8d0df7cfb19c6f50bd7bfa9e5d76cff5eb57e25959f1b065c98df099e7f2bc1f9b94e09e34fb1fe0d8312d2865b7f360efc6c1efd4a3af837ef6786f99b614775fe360c7e6e2c3f93ece70eaaff989bbfc9f62345f911a531c4a03813ff5376f8b79417705a18e0e158c21ff6e2df6d7288fb917e3f9203767eb7fdb955fc1f2eff665af03f3ae03f5ae01f0bfe6342187f1aafbf69e247a2f3239df01b3df01c5c738d2e75fbb1e8f073a781cbf1bf33fe5de36703f3737f1915f167c5fddc25d0c9b945fea29dbf19e60f5bfa370d35dcc0ed8163fa49f31bc5792ecec77f5cf1b7e1f9a1b47fb3cdbfbaf99ff030c3f4bfb1fadf5cfd6e9afff631b7bc1dadf953a4f853a828f31fca17c36f24a2e994e248dc024f88dedf4bf3e75ee1cf32c2cfed06ee2d081d9a4344048e233ad73dd5e98312fa9bec4f2b21c46e54e86717decf1de82ff3e4df31fe9d917ff7c38ab8f70887bf00de5f0015047e20a07fcf7191f47f71f9dd0af89b14f9f7087f72fdb98d9efcc82d7f13ab82379d8eff4aeae7860217230b0e6b8604f8bdc87e365dfc5fb8fc5fc6180187c21f06e86f4a217fb07023f22b41fecdf727e0f73739f89962fe66d08b8db8233270677e6001c0963fb9f673e7fe18e9df80fe2846fea6185c9b1f4ad6cf2d00965fc90aff66be31f0a7e1fd3b0515e248143a4bc2f581927385fc464afcdc455e78f9aba27e6e00ac4c8913f3b359f4b349a2ec0f53e26f9ae0b6429dad8cd35d5d27c03f85879f1b1977e30762f9f78c2abf171cfecdc3cfdcfa9bc09f28f537c13cb9e97e27377e27bddf6cc9df9cf2051783073cfe0216fdcd1138f84954fab9df1c9810a4a537157e668f7f6ff9d310f16f0c9cfc48287e24f68fd77f53f03387fc4d18bf26fb9b64fe3056fe305c8cf8a5acf07317d75c1f157f7e6000ff3e2ebd4190054e85361a9cfdc445ff866f82ca893f4d11ffe67a53cddb0d6713801b6d129ee278c9f123e0fe3b88222239a83f19c3bfbd7e2bcd9f9bf9734b103f370e3a1f1f164d7ea4b61f11da5f80117f1304ddd81b2abf7082bfb9e567a2fd4d25cb068e76bc49f999607ff32bce0160160f8ce2b7117e250cff76f19308c3cfbd1cf47f69fbf712382e3f1321fe2d029c6f82ff6bf9839d3fa231e347c3e0e736f49fc79116847f0361c40d6acecfa5c9cfad41f035e0082af1ffe91472f9b9d388fc54fe733f81eb212273a32a6f3e7425e2aee41019fa0948f3373df8d772ff4ee6101d7ac391c1d37f26f637adfc578c7eee2c3f16187f3309cff8a35cf03725f8b14efcdc5ada3f0b8d9f9b4d9e1f0b7d5cc0b97045fc8381fe8df43329f837073938167ee103ff36fe2f7b92f4ef2e3fbf16ae7fb7bad3ccff9e94fc6f23feabb39f3bfe53f4fe1459ff6ef7ef4c882b6385e49627109c8a231a7f31cebf971ab432fe3530feadc112b80de0dc9fc9f537bdfe2842fcdcc29fadccdf4cf21bbd792ececd6f15e7e73efe3b15ffae0437343fdd0b7e6e0be082f87727fe9d087f1801ff56e14f87f89b5fdc86fc55697e6e17d7fd743e44f06b29f4733ff0af71f26f3e7008fc5412f57363fd59e9cf5d41937fa9e3e79682f2a781f037d3fc647ffcdc0bd8f06f69e1df397eea393f77953a6b373200cf75219c7b0d9c983fac867f3b3df00795fccda9ff55fab9f303bf990dffb6fab508f16f3617fc6b5f7e6e2481e2ccfc6fd4fcdbcb6f44e7b9b8311422f891c2fc88b0fcc919ff6e61458024ffb7aeab00f937d8cfae1f3ff7d4df05847feffe36ad7f5bf057f9fdcdb31bb9f9f9a5f97307f18bd1f87710c69f6407fcdc623fad8a3f378d7f0dc9df7c601114e61b20f7caad055c12153f962f3f3799b7129ca27ea6957f0ff9956cf037a1b80500b7fcb3147fee030650f10f05f8b704703ade3688e04703fbf78d34ffd5ddf9ef2230f27f83e7e05af8d3d6fe0dc684dfe884e7e05ef0a1db23e3cdfdc934fe5ce1b938e09f45d0dfd4e037d2e0b9b809cafc350e40cef9f79f5c1f1fa1b17387701d93a09cdb073bbcbda1e1a752fcb9d91f0ad7bfcf48f99936e4e756134766220823108880dbe18d8adb1106fc6ab6fe9dc17514d071ab61853f05d29fe2861b12981f91969f2dcfdf8ce06f3bfa9b4c1cf8df3ee756c4afa5c2cfade7467cfe2924fc4d1abf011dfcdc837ef8cbcfbde4e6e4b762c0cfcdf686a509003b7ee20affdef13399f67333f0d38c8c9fbb883f85ee4fd1e26df9f32b819f5bc86f74e63938403f16f7df53de926f7cfe2a26fea6d9bf24f273fff8cffc7515c4b1f95322fe1dc0cf250efcdc4efe27e7bf4b88cb3f9931ff4e5af3d60115381b70557e2fb99fdb84283f7efdf5377f6e3afe340afecd00efb712e5e756e342a60637207f017dfe4de55f9efdbb85ffa8e26fe383d665cfff06cebf0bfd5d41fc6ca688d3724445fcba13cfe95a40e266c37f40485d7e4457d20a08e15733f4731bf98fd8fc4773fee4efe73eff306b3f77dc9f85f67353d0260ac1cdcf86d0bf65c085fd6c88feade6fa04e076e6a762e8df69feabdccf9d74c37a9385df18ff4db4c78fa6c5cf0d845beeedea391d97e774717270546f7270fc6cd2f6736b2c23356f4c904c58fa91d6dfc4f12fb3e7df558cc441f0abc9f1731ffaa7e4f073af644869b9b83339b8b61f0a9f7f0bf11fdbff78c49f92f9f71877ea3723f5ef0be0d07e31ab7fb7fd64f4fc9b290154f72341f91129e90acba2268357e50f5e95e9b1552657252cb6e65e4929209624b51b12eba0eab6708e83a428b3a49e9d2344927a4f50253c84a42718fe95e47403d7d661a323465a4659494eca249efa1b619530ba32b2fa4fb56c5aa0ed57a44c6102e2690c6f49626285493e12b125f9b0c04df26124c9c77f36fda66a9b262d6990b4942386f5317d75fa664d4d4d4d4d4d4d4949494949494949494945454545454545454545f57abd5eafd7ebf57a505050505050505050504fbda7de53efa9f7d47bea3df59e7a4fbda75e9020418204091224489020545454545454545454544080000102040810204080fcf8f1e3c78f1f3f7efcf8313535353535353535352525252525252525252515151515151515151515d5ebf57abd5eafd7eb41414141414141413d3d3d3d3d3d3d3d3d3d410509122448902041820409424545454545454545450504081020408000010204c88f1f3f7efcf8f1e3c78f1f535353535353535353535252525252525252525251515151515151515151bd5eafd7ebf57abd1e1414141414141414d41354102a203fa6a4a27a505e49aeb3241b57d2573bb1a90eea178c4dc352582d6605b3fed86d9368a0f98d8cfc46457e232255bfd190df48c86fe4330af24b9ae1c09366189f346387d66d0cf02248d28c144f9271e74932c23c4946fb2419584f9251e349318e78520c1e9e14c38427c5f0f2a418c89f8c4d8b6ed7980b7c756aa5a6563a0c46c6ef6a955ae977192fb55836bd1266f6eab8c23c550be16538d5c4948ddf9598d3dca6c4a5359785b53632d396ab82241879d8142d6b095750889585f57505cc12867d85856509b3bac6b0bebc84663f2f9f2f4e8fa9d27d955d6a448ea91858abd35c312a22491d73b9accaa5dbf5d866bd40e102882f29e57e1651e83f89380fe5e6b430824914c270aa3454e869bb26d7b708afeaf724b5c84310fa996c5c849370ba96dd2d58a884c99260c142368d53639a9b9986a471aa26fdf0d525d34b28a9f22b85d5a2f6f9f47b34a91faa469bfa2195d435831b2b996fb117a57261c52e1b94fab18463978563970da22b844a65eaf305819a9aeabdb0cf575c59e2126c8745d5835a26ad00c1c44fe5492b8ce09717af44aa1e94107eb592d5487625be1a8c65d7e4abc160e1ab95543da8b112719254fcf7f9925444f90fbf3ca1aad956e3582a541a359023720ef0f6dc9e1c0bb91412483ae101fcf2d454bf5670c85368cb0f77e25891408a8d2112c45156d4ee04c29383cc92152b9f92160b0c205809a0c70c40ba3164aac489e520009f37862a7220f8426284c99f2a491a9240f033465580001ae2e5cb36558c045014844d111650d183e64e9325305d54d6ac215970a30a002a4533697464a81142c5094c02231942464cd9019079001b52618a1d002248a14e0faa29644a1090b647ac39e5cc012b2d185d8898a2638b9e375190845206a59db8001155971410b06cc8e2238c96942d463a9c0454f59102b6e787299f1a19a4c8d021eb4611674ea204daa29bc174c44a940b80fc989283d551a47c29604835811b45cb8490b6a6323051767112190b9040c99c414a0500d6a278311b20034788993b55cc37802ea73971a09843fe245989a3b03049ccb0cad384881c5b9f29534a244e8e6c6ece78c900822706d88e0ff896c40a79c0d60be2ce8d1527ecb5455c46a47678d364ed8e8f4d1d20aa58b07686c8a2cd08bd01d68446624d88b228d794f6a87d716ab344ad100c3ee480a1d242ad04136c7812250d418d80632021ee009dd4c48235cce21001a396adaa4cd0b5086ee98391a23f2cf0105a6ab0671170ad049d655b03fa8499e471894401371bc02a38b16cf1458315b88421310e282ee89d7044318ee0c8151f5c58f3265ef6d13316478111ff96506820e20e8bf8842001d29435c0058633cb210266980e4ee0060e70a810f381d90346d0bd6257e01f7f9ef830516b013e8161e029c2136f0b48a4fcd0848ae055d3ae40001a4304bcc4124824704584dbdbb4e845000ea1209422169de022469819a0d4e949d510252e0728623800415199b3342866669ca07e2cc8a0e498b3c384d3b0530a825d04a4d0f4a0fc60698016752010536ac93f60b5f172a5049331c6874a903dca18754468bbd3c48a0ba84d9a16922ef2b81650c982a203ad72a3104b6c8094058d9b35c3d723ad8d9abbe20f1a2144a0c2d4caa0bb41a599dad032d066073588ae5869a12009b321d1914d2b04821a514def9816e9c605271470028aa40b1a889912a247996c23e622043339e890343e10c10a565f3f247b37c87c08c0395845670e32467800845541aa072329ec145833644038804a051758340dd0ea88418185e551a7ca8f13555369854e169cb86a8f34129ed4a0c80a1204695ec6ac40f5d242480baead31a444f694666387095c1a18d4f584871f72545bc200f0240341524d401628f1c44aa0bc7586043fe1d212e3852869639eb05829b0ba438662bd41ec0b320e16dc0a41b62180167c84d67807187171c425ab110f6e90400260052b00261ca34c80e402e4db710ba211de962013b0f186b8086b0b99a6f10051e40b0039f54309263c68e290392f2f9495584b3ae649518390033a7e38a68182c112206810704c0d89a9200712b723130854021d6171311281488d0f4fdc50194f20da204408166c6398274700125e19632cf39287030cf4a030e27801ce883127aab41036485852852dd51ec4d02da0360f3acb112d2b0ca9008406fa79012806b3d0302658fab91a73a5e630421137fc40f143ad20cd9951841bc85466168bb0a70cd8542c205771a113525057304d15b184845384e10632332b238b8a0b64c0a685c0b157548e399356c116138a3e2b615981e4ec291ef5e600f1810706887c0e058582b2162202386a1c11e86e44ad4120365afe00110a4d4b143eef9222baf342111948a14853f05d318d69029796b9333542112a6c691398001e0b880ca5039ce0b6c34d546738c4949a963335e770041c653e25426e865d8012f0baf0b86018c600d9173861868634decab258e82008e10e34d8906642484898c18b40827c19f0105601a3000cb41f5ee196120b1390084c844961a67860692a7062c3d6988b1dcaac3879000902b60fd03c4ee2a3b1a6a10c704e8ce8b074784d89c089893849a43f298ae6d65646b5818c255a1ca3044d6814d8417b5275c39601809268528bbc906a002b433b0bca3e496066133c36c8f0010d63d2c4002b5b21fc6498d224edc531400fd753131f5aa470e430c78b0911464d78e020573131a10d92a01d1dd43001d374f5811000c030212ba00d1a27210a30c15182ca9559222c4b80888178c4a4e9cd920e5acc00324547952558d6b6f6138dde12af2f0e1c8a71e76bc90b3940d86111a7c8d91f1e4658218891e78c829f930ab531139cb149ed60c08897d0d955131f7e685232e12c05a21ddbd66fcacccf9d18528823d5c34c8117fe50b52d8560e67eb01aba150a6641d21b643e9566a6f3d2008e421354c687c8d2a1132e0053c646910a416e78b8a14cc5030ff02288b6b2a7040e7990a4c348d66c23c29907be2a3214903c1d4901cd22b232250680d367050b644c8c54e5c90244c976e4595435e527c51821250baa8fa4226321ec10c10b6c35f08c71091334c310869c31253214729181160f63029ca95180075060311d6680d16e434dc430e09a60079a3a54c4a8585120a70b1c9ed811e4970d8274ed1043413081a682b24690062296443f1914830e1881c6c3044dbe8270d38b20caa8a00812a1000c0543a413044b7c51a00425a08eb017e4f4a03ff043230c4e9a0a134b672a84ad38de2408140409939a2186041e2115c2eee2040b6626b04a5610c186084c988aa2048d9a1864523dee2819b2e1b0ab339654d283498e83a3312960875a1c60840e8b0846a78616677eb89901564022414a062112828da9d921030f272b6037b23af8b3a504365f3fc82981cfdb114cbe389891c7811d1b175f572a800322058bdd5757d79724ae0f36f872a1809ca51b9a32c03f025c2982862b078012345730060441015ce3810047830a5540ab2f772200044705062041ace55b03c72b6e842517ee4489e1254751082982203ae2d512ede430c688d78beacba88722fb9097d1bb7631a665baf6d05832a06c33a36b0d2027340a59d0a2abd80320402714c2ea729a218156e74132c9a6e245c8cdb02c891d95c812405e4949c88041fd01ab7a20c992183d3c8991e89744070e5dbcb058410f92411ab02c0d2d1124208070848501549e906c49fba8d1a0880e12253352a050453d00c90c27554ae0f18de10a14082a4e027760ae0bb4f0c84083384db8a62031008458540a5c5a691d0cba6af2866b272885b33d54bab666c0008e081877985b0d1c62b373439c74eb456b0291116387adaae212a13a4d18d82281a58ba13648681ce9a3e7851e2e12b8e0c89b171e5c95ad338e20d1bd87997338126595be2a7861d15ac407011ffc4c31d2bad3400e38b45668a375c6830d36386a5f6809c308f252c2021d5a4b44ce82c401e3439621a81b9a3ac4ddc8a2c36307271be8952c02608002689196334b6c02431df48ca6b2f2971e4c4a67192c1fd8ae9830b8d1006b83a653051c901081d536680f92d79b19ac243200c1fd110486d5a2021a6c1b803172858319a06199aa5f456042f208bcf32b35a9b22d7ee2fcea578709e486b65fa1483b3480d46f0527829d1a647e2b394f6d0219f9ad9232d0c801b2a5c6c37fab338e30b7d0825613a7a588f2f9f1b4b419f1a48e973146ce6e44c78b0c222237440f7f723524e59a24e58824e59e4ee34939133fcb2edbec6b5736c7e998a3f8883e4bad12f34ddf145964f5899422e9996a79849d3f331da1c18f4033ccaf9b872f11083dc2455410adbe1a1ef42ff2f3b3ca65bc888e04719bae2fba284e72d96a74119a2bd324ba480bba88fd17992dc2fa514513a08b989ed1452b3ecc45458386d9658d6eff878ae8a08a3af83f1ce6639bb6a9665d9798d3786d97b022b0562fa1e8447bce1962f89fe32593e85d82225a0019a74a27662c430c7018324e9599657f3e1f1f3e7cf8e8844470e3a883a61174f37132424b11858af0faff63aab78516c1a20816ff856c4f7ff2a6f3a137080f131faaf2d40a41ca102fb4a81ab20047431404aa763864840e9a3781868891e005808712dca00041093b82ac78a188411009858884c16466a87ad78029a298e9302957c8923575c5436f4f32f64168eb0c8b040a309d23284c1758702806101a55393d07a0d0409bb2226d01588ee81a723085380499a3e21c2a1192d830d0244e004f7c446c080fc8f2639be066232e0554e642f3cc0ea6144a162b9eb8049a618f91957ca88e1a560d81aabe8e10e3678905a71d4366a04920ca6f803c34841945c01be1e90494160e8119bac1100af1eb127f60536a3edf5bcd0a99af10192bb52a248284d3ad2145284718ccaad832e19fcf776cd7631ac36a3edfab954b184e1285c59609afb92aebba45215b9ad4f1ab95c2e4b26d976e912d4dea28ab902d4df6a2964300895aaa5c5a75af7c3e424d8a5a75af261874e7dc31a8c9a02c74908effb96a48cebee130c770aa54534920c1bfa48eb9923ae68291f15a76a5e3964b8822c48458f34385d80ac2889ce6b51f1a049dff3c78494483c0f267b517b54483c8428118741ecbea3526ac81a8d2236b7f50647a7e407db0c007e27931ac8fc7259c63e4714dc66eab559d22d7343088fae0e37f0f6e7860b103113fdcb66ed135b63aa9f57b4c9b983aad89a76c617635baafb27599ac52bf319c16d5d47d89ba7563989874639eb285551d6e204224a8f5250ccbb2f21a030acd7e5e437a51633193baaa5caceb12e11449242856d46a81c60ec80dcd41c7d13f6784ff71687ffd6ae532f8ea768dedc79454548f0daa4bb72ed017a7b917b5cc5a36c48961d755326ba080aa07b52cc2ab97d65a280d8758e4507406aaff676665a91b2797ed4e061456652aec1d5d56b344b5b4f5859b983aed3ff5fc670bff99878525680c80feb5f4e545adb92f1109a7c818e86cfd316880c2300485216700a4cd0519aa58e0f193b873f4803b7f6ecc51316078fe34757eee42532f7e2a2bfebde7c7bafa8f03fc462fff46c180ff47d51f2483bfcb889fcdddb9f9fc6187fe6d8507250f4e8850c095ff4cc9bf4dfcaa007f534c8e1a0930f0ffea2c22e6e7de9df0b3017f6ee01fe3f9b97b51e0208bf8c51cf18fe1a1e427eef93793df98c2bfbffc4f5ef837140e3d3fd58e3f370a3f97013fb7a015ff31e9bf9233e107f6fe7dd4409a3428274414455d74557f52eae726f1b3aac6cf8df4ef4cfc3b107a30ea723400fa9f61fdcd2a7f7efc6e8e3f9b31bcc606e6e755043fb70d272a3ac8b9c0e21f33c0bfd7008bfc5a08fddc7308cd99fadfd4f8df26a0f28f11f23749fc5aaafe0de35773c4df5c7bf8b980fddc19fc2444c3093fd9b79fbb815f4cc52fe86ff6f8cd9cfc9bfd832ffe5dfc9742fea60201ac2404c9a3c0dfe6fe5b0d13dd0169e7e65ab2f85300f0a738f123b93f5202737e7e79f0730fd119a13064c6939e9fc996bfa91ba2041dce4d35815814a825f7472afe48859ebcf9e6cfb2c2bf89d0f98fd28c79f37387c9e57289de9cf386f5c339fad98cb140973f6ef2733bdd4884b031bf11187ff3851f38c0df540ef053d9e7e7be20c64fb0423ff7efa756899f3b47d9ef4683bfd9f493ed7f3f808850f20f6bfecdb59f2deddf7ae268e4745e4548e9ff4f48da9fdb081e3fd100f073c3c5b63fcb8f7f2fd2b548b740f98f39fe2b0e0cc118c0ba79c02cec0f05ff9520fe6693bf8d919fcd137f9aeedf342ab061e399a1db8169881a727e2e48ff9e52c3f4bf59f4b30903461b36eb12e3bf26d1dff431f645c1a12925b8467e2a71fe5d957504a3acc7ce680834dd0e017e24153f5210331f80f0a00835427e286d7eee1a88e2d2df4bdccf9d821223291ca84de92fc6ede7aee15fb3f4b3f9433fcb64fddc44fc5ac2fc5b8ad4f80b60e16f86f07fc9fd4de299322bfe2c397eee360a1021f3ff2c4d927f2bf9bb70f9b94980737f35bd7f53bdfdf0f3e8c0cfdde56fa2ff6d43993f6bffdc27ac8003220dff024af89b1ffcad8cbfa9f52bc9f3efb13bbf15e6bf75f88f647f13cdaf46e36f2ee096a6817f97e2df91f06f71f1734300c1d6dfa6ecdf43fc5c9afe6de3271b053f370b667eada99ffbce1fa6c0bfddec80e3dc67bf9122bfb1f8a738ff1446bf91343f77d70216e410ed37246a9690ff8d9e7f13f0538cc6cfedf58389e0e7768bffdd8a7f47e7a7011cfc6ce6ce6d439f13ff94e1bf03a5eea814702cd68198c410750600c00620002001831100304024168b062332a960baf31a0014000252ae84358d3095664192520821638c01c40000100100018119da06ed70bd86e014148569029989e91459f5b88f45f989da4c9b9130a5f3cc583764dc1d570791b2e5c31c6d264cacdfb9498cd9a1a7e0e1a8e042a8e924a41828dec78f22ba6057cf7feba71aa78a1a8c3e2683fdb144d89c964c77c626f697440f8293cd423ef68c61c88cf52f2afdcf04368ebf2ecd5f6f9258bc1748266a4795d2e74fed56f1b1b3d54857573744dcfb09c8390e1c25329c01c603a1a3d797a4d9de19d3dbf8aadebbd7bffc71812b59abd948073edb5ca110915683568164dd5251a74d15acc5ff66aac96366cdec0432fa640cb1f94d07704ca6b15c2f4d86c8448da111ce58f90c4156b5faa6bf75603fb1ef90683539779edb2ecef80e64e241a71a4a559fdd85e81d967aca6aacae9d9b0a4a616eade807b3b74a7e7674a15278574817687da2e0747b7fdf82b676a766e5005bc647a114c52f0dfe41e1775a9b2bc7702d771f91abe2c4ff2c7b0fb3d60b3ba1ce96ac4ac75cfceb8f5bd51e64fba2cd2f34aeb49266d7195a2584b6e623de2a2feb531bc4ebb885eda995f77144a38b36f767e2d3507fc5fa7e3431db866d4acaf0476e13e57410aa19249bd06d2641ce82370cde7d24e06c2c369056a7224d04b585e3652a7e120cabb08e2361ce023282a6d5789007c06d04dfec49d8e3012c80f70c023a25cc2016ef79e8a3515a229b99c19d15d516a2e7549049206de3180c453b0ac826a6d7082853d1968078e7c59c0a6b1193cb18c4d1586c00cd4e851a886913c6ca48f4290846717d67429d4564038d753294195843813ad85d7a6b39056eeeb7cdd1e64ab629b179796d96358fd526839acf10806704f410144394b6a138e3d0f6c10d27c1878058a2350e821d85658363390d6602682dd4d42c74248c3140f73080a1a856818c63a1c6e0d842bb0c410e453505ea1d053107d418c56410ec242a43a0b72612093ad12cd4fec18ab3d11ccaa8ba103c8015748e049804d21ea008d3404d1579387423e7e60331679e616c4b84d3502d1983552cc115ee6e603f88606bc35b8a6b8e8a93ca6aac175b9be958bbc493a12ab425e1f830c9d60e9c76d9637717cb765b6b5019d36b2cbbe7916a2a569072255fc6d83803c7526b0583ac87c1049c159c001cd48f68dcdaac15712d669e51ff49b0a17021078bd271e15b70b008f9ef0eee7ce9aa63e6631fc8e00e71db154c3579b11bcce8fdf585f55b10e91972f585636a786c257f718e8e03b0ecfa0d8c9a8cb46d966513840bf45c3b0be8a7169ed48e132116eff48ed70ae34f242b05e41cd47915fc7c93811de593c77d9d89bcd641d4d98b9bc284ca3ef3b5ed5529788c36f84650af650f508ff80e48e434c4ad9de48e104628388a522db22683b1e98be3e05a20a234f3b0e999b2babfec912110498f265a14a9955cf31755273edb1d7aa16124e660d19f66e7fdf75f6c440258ab27e5ad8aa2c35f51dd3c291c81a969804b053de72c02e289c0dfe14c4a11ce001ad06d2289a04d64066a4dfd52e9991420ddaf675542da0bfd45df620b0909071c495e101a2c832c188f63ded541861061d2ac00c6de10fefe2e806ed52d86bef07ea9988187d059a34129d7fd7a4ad995beff05eefe16097a94cff9b5c2383dbf63aee5b9f7fc08c72d72021e3e81eec4ceace2bfc278981b9fb7ecdc068acdf5c15af4e4029cc31638078131c161038be519ed4948c16ba78a4c2de2699db8c94bcab24742ac8e2451ef964777d493fbec17281f06409d5b964b7381ef84129880186cbf36dba53d6332eaedd4230f8059b590810ece8e07cc74aa205cf35f47fc839fc56eabcc7670832310786dc42ddd5f6ac36eb6f26ed5eee8c8ef9df31c463947dac5e527eb08a313bc7ced867066761ca9ace6586c121467b8c8a4da1893ed502ffda1a3e0930328e8ba37414cf424e4c3e3019afe66e61352011c3f35b7c1806055459e5271681d3b5457e92bbd5cd1553cf58b16ee891704f830b4c74393f50c7aad22eda2fbbe8afb44095d56e73cecc548c185110267f8ace3548790608dc85970334788af3b3f8477205c166d286f92a66781ca7d39548356a12c406040a424b2bfb066cc758b704e9f2a599e131a419540a102e854410f4c27358bac052f984d02fb620afe68a8df8afcd90c63d07fcd6f13f0e71419782983adacbbc09fd90fc5732cb7968f01e8f3cd66948b65ca33fb79cd1e71733b3ef1de9cc3ac9e7fe33ddc4c3b70ce7f36bf7c96cfb3c3d4f67946bf568d5fa2408bcb85ed4df0601afca355b7e359ae2f711d5cc0ed7716e5f736d3fc35fc6ced0a05b0390af8d15d8101b5133f992c47826cbdab9d01ca385e2e6dfa4c2c803dc3dc8506c8cc337ee4870bf46ba79a2713370fd43bbfd8071debf9e3864d695025d8bbef08e3913ff10e977d2f235754abf1d52a74d44edbc619a014d018185936cae6e4191bc9f97897d67c1a8117a8c79b60f0c55edb218a690ff847c6dc61e8b1bc7d88febf2d3986187101b57d8bbfd7493c9b48df1db4763df09f129bf8619a37077441944339808b6c05f56537eaddbbaf1911ce61a236bf647a7fc3fc3d5cd1d4bd8e806b618b8df5660c1f46b5e793089e1f9ddb97093d014b7fc6abfa8c8099aeac41cec1b7487c632ffaa375506c3e66c4b2a50fd7b5b91b57b946cf3fd0df0d6310faf2743dd8d92471c1e94a1141df548e721cdd5f3180945ad7aa4c463ed5030485476f395e357b071813181254bcacdd0f6b3b1d3833cdf6567ccb461d336b3122afe63c239c380f75adccc6f167ce4ceea98e57dcb4d235eee613c93a53e6627be9cc47aa218edde79e02ed42caa4430a6426ae8fedde127da0e5cd637a502bf02a73aff5c9999c7989ad4d1ff494b1ee905cf82095b40b7a2d669d64e4f61b6a97da08993dd60dbab142dddc22a20d7db917dce82b94a3efcfad6ff38e8b1c434e2f323af6eee6da75321fe5c34651b992f1726e60bd9c1dcfadc43073e20f9c25ea543bd7616c8999f47f80ef62aa3188fd25c4aa5b16673ef6cbad52d302519b846d99d226a84079e3f4822fe71dea3a3902c52c374f06f30022b05e638ca525d0074affb78fedc9dc929623af7710a01dbc62d53008178ed689303eee3575d44ee55a6eafe23db2f081f624d0181321b73c959fe831b90c279fca8e5e9d43dbb7be7a7bebcefa4e1279bb80bfb90332a41eda9a5c7462fe8c21ca1282a25f495840de4cfdcb9b0f06751fc770ed0e70c1a3ae7dacc08369b92d45a1ce6399c085939986d57c26033fdd7cfb18d4e19e24779f35498fee59117cd87644fc27f43c9616fe0da6117dd11be259f97c4d2a90c26d78b2e8ff7ee4a05c3c09963ec79fa5e342d52c4de06a6ca01bd5f457a47053da9cab80e2e1d629b46e45a3ef75b68a7ce89e7da261c6d303fca2b0771994f850f4cbf23c737fb0527699842831a1f261fd34a6dc21cd5175c0400caff7efb7ac72d3f7781f401cc9a54d42117bb94cfa8e173f6d6c767dbf389ab04af7a707ee1bd8c0f9a6d9e68001c1349ef0709434d04e454c73be2627d8d5c2f4d5fd764941b8765d9293c2b8360972cb9e1810c482aa51c35b7836f7eacb98c78407eb2cf934701b6d03d4f594d10df22e451e016722d96294b59e363e2d40e42ee281d5830617fe8692471a02cefcfbc82e44c36f53850dca6fab22c4eb279cde9956f0503cc316d2f9e12fd8786f2be6cf75ca01ae8ed2c0c21615e592d320bf99aefc876f3255b5453dcc8315cb3ba136141775721ce7a11a1725203d2e81ff1b18a13ec637f05fc798a761e602f0df9598a69109cc938bb349cdb6dd5db6bfad608ab238117f5bf8b440c6940c246376c8f91959e40c51d344df0c14982850afed7bb9c0911d2e9950dd03ca1e0e858d2f65c96738263eab07439cece5a396765b34eff5d836652f64cbf2b24b78f723da9401387a02711fb719a58652c580c58644dfcb93202dd685bcbe3743f5d8bf0cf1fac3a4e63aaee57fa1fbebe692649f111ac71efba88dde1e0fd5dac94b9634d5982144d7131cb04d61df6c7a3dc5f0350e57bdf463be2918764654fede62514a21f477bd88066778f8fad989273a850e8557f97e3208df4c8fa57c7d2c2f82f6482836225bcdd4fd375d155db4dc88f36ae26b49c63068393e5f7a48cf1896646aa6a9606564d1c740d377e198ee9f08c4da84ed7ff041c4230a67780422260f4e3d871d1dd3073794e4e42819c4364e1c8ec06e0c4e21b891de7f8df031afcdae8ebe2ad8796d3a98035e72fb8d67eb1dba668bd84b8df5978763f64f5fdbe58a05797cca2f547265471167c512045e525c1badaf06550f8af7453e2a4eb72b91706e4a602f7a15632f4d3edab71c084ea0a15ba63e7d633ca250ddfe9d97423dce7f719a3608ba4d7a2036f0be44f2c94996214dc158c29786e8f1e02e92a4dea269b03cb7eee2f308804b397e6f1aa491c94d0ccc5a11b48327dad4e1af500d3d7ae61fceffc604ec1795a3a0de0d0a92a64eea2e3a5c4a03e22d88c90efad631606b90490efa7635206bd439d1e8aeedb24ce715ffe6f8232a3c27afa4be0cff2289dd0c52f7d96362a38162c8a20796b1f035b382b3138f479d38c4dd96b79b4a7e0f74322eb53603a2e8eed213366ad74e4da1b82dd0de5be7e22b7284af61d05d5eee8c8a6277cc4bf76411b55d1a3e11ced9e8d95dda893d751192c381e7d60eb91747f331a9c5d5bc671ca2b9d2291bc3dbf2f88ec76f786fb5135346cc6f664e266d7c3f2c356e0cc2aee0b65b55b7c16f9115cacd23be590bfb72ec1ceeeae5659c7ffb1099f099b1e45f93336eb1a50d980a63c6ba163e4c7dfa7191b49339cc0a737feb063213ee563794752d01315e2a7273bb6d33b0153f1deb3da643e6345507bb869bd015038e84e5fd45d204b28e55bbf97b877ad0eb1d08010611d904646b2bc3dad63febb7be91fb77dfe4b3d85dc6d0713d98f87ec5ae8e4f3fdfba032bd1b2509c24875bb5344a05fcdb2752712d55f6df7d0b9c317ed42fe5fda6e1bfcb52bc0df9dda89d0f2d763ac5e3f4d7b622e77fabb695d386ed6d3f5bad2ad6907227c6e9eea86d627159949ea7e13b2f599d1c2ee7d078937d5d02abe03fd55216a3e73698ef93946c5c68556bc3a7d3607e8cfe8b383a14a83d19d05aa5ccbfd832704df6bda1546e1ccae3c83b8ee3914d49b7d11c53d0cd9ee52ab8afb87c1b9e321f0acbe66ab644df94546db7cbad7a5d7c681031b232754b954bf714f7f26a6285c1d92d5f5a04410f3a6c624966e4eff40ea7af3325e6c603f731758cdeef681b6a98e319c77fbdd70452dd0a48aebd81ad777534ba97fed6c54d3a2ff3d6bf077c6c93095327ef49d7cd8cceae246bdc12bf01b0fa9bf0ac695908437ec7aec61b67fd0e568af4cc394c54366e98db59c27674ccf3b0c476cee09b8d36470436b2cd2d988d8753b705c7c9d32a58422f13ed592a295d2a426c09aa46d7754985ed01df65b6bfbc13ba7ed603d9a0b03fd8f748c495d98ec06f4ae29350ad2e6a6602ef88489eeab05387d99bf2cf1590da2540ce56d950d855b4daf6e3f6b8789dac1b43d03b838c7f95c8c50e16177fff2d69f20fabf22f28f70f89bcec38bf1c1f39a6b43e0e822e3c9605123ccbb20f4d5b54434eb250f0eb7a73558a2f5ad431abec4d5068cdac6f40c6f01516c0c33e48c16d19e16819b6057666526edd96325cc2b97445a95b56290d93e74d964de5b987b033dc943d496274eb8c81ab26b2a1eca6a3a7aeca3c1ea94312e14cf1a21d9639c50a1b56dc80f91d40594de2aed90dc48f9d99d5c28c3f517a9333542e7de47cc12dc88003acb500a1d37c8e8fb1d05872bebc56b22d47d6f895ca2b7569774a16d83fb28e118ba318e2ccd9f911fa3f9414db49c6cdf5e76eeeebb83e17ce86eaefe7fa23b69c404babb130ee6c938ced6a6f6233116c0ec8bd0f769efde3ddaeed30b0e36c12247f73bbfd040da08c1966bd5948d13f28a6b6baed4c4e9dbf00ff475fce8fec0e71e640e834b40e36da39ba83dec132e787b9ce5c93fd2a1c5fe7d0b7ab8f4d3ad715b96fd0b6342341f47c2fab40b64ba3c547241a617793506dc0f00d7c74112aab63f76b0d69bf2d2cd39a57f023e7656c786cb1c24483c359d8d752ac9b02df958b1768e2e6d25f88ace3b06d88f12e937cb3e6b1df1ff12b988966aaf231669c31e2ab8344e84de328d50ee88e8ae51d9b34b0efd2f682a471a4f1ff8df4665cacb7935b83a73157aff76e76f4c9788bec53a86a264998d91cc112931b63f257df7c7287370a54bc63709f8aa3ad09c2cc14c3f258af8ab1572c3181cf595d96190459e3a60eeea608af0ff7c21377caf9a3777f24d61bab5f4b20ccf0dfcd94f9fb66fbed52a08da93ef2ff988b09bab465d1572899a97bbd6fef33b2aee89c71357eeedad27b81b898298311cf3cfc0c8b901976bf0739c9afe380dd34bac83e3fac1adf133843d7fe58ca1e53f0b7c027069c2bb60708b983c26fbf18854e91ed0c7957ceb6214a4e9225cece96cd095b4b9a41f11f129b9526ac513ba7464f6ef1a5b4c3049f562b1888b4dba6a1cfd0e4582cc4a9e33a1682d91873f7a4afbb5ce2e1e40ec8a9746c6f6c73f03775de31bcb9eb3c07ce5a8b9f6eb8cbd1a1084d86c9ebf13432f75ae4d3b68be8a6ac8bc01d04a4be25a0f52067bd81545dc453d53ed4965b2cd6fe06795ad8615bd76a027ce6a0ffb7eda79d56cc7cfdee81b995b6b3596f7b1f7c3551bb40e18f19db9571de33d771b1c14ddb4ec05abbcc5c3bfa767f95bd9ad932a3578a35afdf9dd57d8b3056d0f5afb59c501d76b1991ff26f21658af5855fdd33542327c477823b4b414f9d614c97d5b2eeec27f4a9a087dedc75cf9c44a88d73555f8b035b3a75fa952600b9010fc4f789ddc1e8edbe952cc3c135cd37066f69dcdd1947b195e5f8323aa8ff08ed3dbc023b6a8c0f3e978d09bd7b1f57ba87c60635fb73264c347aefcb8c9af360e733b926687f728c92b0ef23613addded5747c8fb946b4a3745bb4ffd0c3dc1c9fd91cfb42a27020489d11661c18b7fdf827f635eb7cdb66af0ff4fbd64f97b90c6eb8ee8c68e231ec8a8cee6788ce4a90d86de19b0376ccc7ae14adf74a436f418a8fc1164e179dced98f9b2bb1248586967066818c2d4fc28f20ddee15d8a1f1c62ee337f9b5a1587c51d8489fb4672efe38d756d1f1bb33b10ab34fbd4f9cf6d1918155742bdc653061dc6abc734dde533076e8e2b52d9b79c10f5cb41bcbbe281eb73b6df5cc151263e7c51d00d23a8afa43cc6a09b501fe09ba3c902307967c869f83f8b15e4cf6eccd585f676e0fdf7950765c2b3599472b887a65f89fd7d6d99389de5c13fb30f7bd479cb368d909493fe58437e51319c185298c9c23499c119841e629fcef1ddafd1c68b8d8b8c966285a149f96aadb3a3498c2ff2c1a4e467acebb1a29146eb3553ecfb0a30c7e88c4d610f76c3d96a21cddd9fa354f035f7aa8fc5f3b175a30297be09acd5e1b2840bc6ca335b89b72102efca86046e171da21bc22666facd0c5fab629d39ad3bfc5e866cdbb3cff3847bd77086911720e4737aaf3cc386ddc6a074263af6b3b5af68b26d974d964334dc7a2ea4e38cd693e05a78d6d5c6857069dff1e962cd59e0fab6191370154d8b10acd84c41639acd43753b2cd8576d3e4a45bd9728389403730fce20e37ab1a33fc5ac3f8ae11b23fa77d5067f75bdc65405810147e06d1cb6cef3d4b64164deffbc198e7ee368870bae8464370d7610725e530680c81c90cd0ade560c9366eaf511d19c17e54843be00c6f5e1c811bf33a3e31505d117b270d6ea71d75f079db0fedc152ec95ed97aa8e73d5b4a3988e619405efdd3ef75a57ce7ade3012f30f591481365c28b4281d0f4b960d4e7a4c7a330205ed7794fb51bf876eee854ec894bc6107964054b25fd2eceac26207e6a1ca28b9eafbd0ed96a47e56e807c91da4a677ca9a6126303baf83c4dc1693c635f567dd2df3bb8d24da6f332ec989cece64a2cfb6634c91fb43adbfc9e29d739e572bf65f928b9f93f3fc7b92b4506a830cc25e035a386e87cadd188cbcb69a82d54c774fdf0e33b0caca76948f0ea301f2192da3ab1e46c6c5db97e66e38e14bcfda44ab33de29dcef2bf65cc6abcdb20bd14a3739672333586ec326dd311f8b5abe8f207b48b971411cee31125d16cc3cbbc9ee931976f572e36d03393770cf2fe13773f41ef2db9c1efe1561b1ed4c7b14649320d917f96d709b169b010a13acd75d2d430a1a5cdf29143d98ab6d3cd3b94c654f592e4da315d0e81cf81904513d78a32e6f2a7327657dbbd7137ff89647e737cc607523ca7df8fefc4ce6d36bce632396581f0d0f0633e11f44d1fa0fea6a2eaf25942e69c4553c3693caf0235d9e1d2b0e28de2dc0cf57e8303c6015864fe7733279c75a35c2fb5d0c96ed622273701afd41a1565e877eaf88371b9ade948e88e1cd0cc37715ca4ff0ce8e98d073aa7faff0b531ea449e19dfa0136142b666737cb6fcf79676cd4238c75ad90e93da892eef495bc7dcc1a877d89e2c6fe0ebda242e6d1b17fdb0216418cea597b62c207e2179bbde3130c0abcddf534d7d7f4970231839656d4f1bb919a9baded79be5d8f48370365ac5a6772d42ebb838cc87edf028f48c2876c33b1ab961e1a8fbaccd5dbd6981df86aaea574637b414574f4d94cd1afc73d9efcac6b16e183dd50017de569f788347e6667f3c3ec8a39993d39cc5aff468f6c3dc6e616e4e413df41cda4656db9c74910fdb9d7a0fc3c337d496b7e27a6e6695fb37972ff1a1beb4e6fe6d9eea41c37593723e69c88e334bcde4d2e3d17537f57f434fdb421798bce8df3336747300fee320e39d4775919334fee1d78ae7bc0a320eed18bfcd9f3c971cbdad87e7481eec5b06a6c6cd4c1f62f562e31a985b0f7cd85cd07d987ae7d8b52bc7b8b6ae6890a275abbfe616e55957cea1b98d67d83f0e99fb2d9e72f71a1ed28e6e2671188bbf90a1ee134ef74199cfd7fabc628a89f9a8447255647a3d749350d506278ac8109982f5b98a8f49b3feb9b87a6ee6b02c0ca15df69f9c5ebc855d3ac06d34c15ff7f169ad2a9f61c857e3c91dbb1b43ef79dc7e746805b90f18f3fd09e44d0c3678f2fba727ba96a9e08d1704472bf1f55283f6968829c7449072b604b5698df1a3ff7bfd4ccf5f29ae04de2f05caa73a5b7f0f6754fadaf53dfeef1bb47944dfcb3711cf6d82c531be0de43010e8d6d73b82929fb641605db0ed0606fe0281bd14640960f292eb0f4d8c94605ec7bf3ad8906b6f5b4fb2a1a3fcd0ad9a6cc1f2103b8c22f819a0ec49d8c43c7766f9c053197d036cba11bc27b97cae3553ac275f8e7816cc32a7b4770cc9a60051a2c19984309b50370ebdaadaa8f7704670b9d13d321ec080a4ef7e0600d34350cc4759aba3bdd3e734aad1402e27dbdc36951a1e93f5877653ba8587064ce3731f82f9ccdcd7e9e61add1c07369a3d2d866840e4553bb99532d75ab7e07047c814fbce00cee38d194d60cd2a84fbf900d3a367ff67ba37436813abf0b8d048ab18b331488db1b36c6fe90c1c83208d03751d863bee56186dc5675133d92f5fd13f7e683c9e369c83b7f9f2403fe23e334236f492a7b15452223453f05eac5ce643e1f6a289837a3c2256b0dd059f3af7c58368dcb24d2d931afe72ca3553153b1d01e75c75268c35918c47819d956e927f5ccd0fc7b146894138c502b30bce75fb94c9c4d8c277f68bd36c2aa84d71fdc370be9f3b43199f317cf48ed2fe2ec922eb639ac844a51626f23396651c19cd922c3bff32adf6548ab411ecca3dede9c78ae5538eb1b25c866300bb765bfc0f5d231ef613c600e1b72bbe2a5a8eb705d6da20f8b440ef0d864ced7fb195f5e8e382c4e2cd884dd0ab2c9c5166c11ace9ae6846e6c0a160fc7a537d7ac4d6053f6d4e7b735672fd7800d34f9004de26c310f601a662b63eccdcb3db23bdae18720c009f01f41ee49919ccafc3406c098816f08d66eda14cfd8f0d68fe7447d1ce997e112848d3ca257e82724c4bdc2b237efae36f47710eb2f1bf89dc6751d6435f5bf9415907feb69b0c17405e028fcc6a0dc8e87981eda7228ef71b072d836b09eead038a5962f483fb8787ce8c967947078c9f20393eb02634fd175e7819363c0bd1be99fdb9d47fccbd126508e5ee1f2d89446788ab7eb89c4328cec0095cd90ef07bc66bf67cd23426e2cc6a0e921bfbcb72333baf2d9aa13084167e62587d4b88c299470df20dff31a5b3aea3ab5fa9e0105c43789059daab92a7770a3f79167fa46c0398f46590bc7dcd8ea8fe25e2e8028ebc0837e5ef719379f55e88e241e3a6065188f27970fdcbd6fb21f8f1cf20b027aa0d5d04294c04b8f1a5657a9c67094882e77f273c81d1aee211396a953f1adc07e7df38c0da237f20253b676e0337d6bc40bb0056d630c8a7e93ff6ff4e5ca90a6a72d4fdff6193bc87d4fb897fc8ede1b3e84e9363b672f99e3c3dec932408aad1babe0c91a2f4729adcff6447167641730e3b263cc7203a2cc016243ed0782abeb79465d2dff1836f16b9df8bc9667a509f5754ce8cbec4581f5460e7c47c3325f004bef36ecb66cb79dbfef16a50e33d0364262e5f33524efd88d29df18e80b17c731dc6534fff03f5d976ffc37dc9f0c7a1570ede7481ff2f551eb0bcc17de4d7c1566b368668786f3b59b50a0737e9e86cc9bfbfac75d9423c79d9bf85b1b788e11e86d2549506c05e871ed4ea96be242a0ce6eea2d1d67a9a2ff27eb75f67d7f0ec33ef85dedd01ee583f722233d5bdec0bf0fdfe06531362702dd458574f307711c95b89f5295abe13227d737e77d9ea894dc5edb72f7805e4b3bd54eaa740d53836a5468b231a7a63eee5f88ebafa30daea591cc99652f825474dbe2ce9559b9760ea8dcbaa267df3646d51c9c31b3d28df5b6852aec5288b771be8ca072d95edeebed29d84f92cfd5134f98bdfa2e3a9aca4739e38338aeba8fd3969ee37baf2864b4bca0a8fb89db238ec77f7474ff8c6a49a1ca7ab9cd275cbe7fb445abe2512e8e4b05afecf2eb8996d37e386c5a934e1bf3b732062b40d69aebf18334dfb5de74ced270cbd44b8e6cc9a60db531ea2e316473bbf4659e2a40e2ba97ef0ad67571876c09882a276b879166781ea8584f64acfb954508627a4b099cd876ff5a88b067fc827beb9002e0f5fa550eb7f6964a3cc98c2491127a076af0fd15e3a85fbfa9faa96fc68c8c26e30db126a4c504fa81beedf30b556e07107a445e0985d04d396a8ade8faddad4cd78105105c123743eba34e4d66993ddb1cacac5236d1f794d5ee7347079dd845ffd5d74329ba4d3227f0d3c9a4e80009cdf9c61f17eead354fc76692b67d60d0a5a6fc571bb0f183c9d3583248bf946bbc21cb057a736a4273fe0d99e79923ad7d4ab75b753931db8c5013897e8c73eb1b4ecb3620f39548c8a9a5b35d026b53e893af16491a3bf8bb64f25a1252389b6919d619f41f5eb147442310492260d2dedcfc99161d508d9fb544711128054e4a963245b76900e0453a1c7820634058864a772aa47ed295c611295eccec571326cc64f90b4da05b836f9e654968351438d7aa89d6db304500c2e5e8d2207ca6a4dde5a4254a6c21da57088b1a4ba64154214ace131c1b3c2405b8863a42476308cd0da8005482fedb5ea05e674743ebb6ed83421218e30e228910bab21681432dd949bbe71bb927015532898c475313d8678f4c3e54681983a3ead0561144e49c61c820338cce41e2fab6c875329d007aec225c485133136e7d4e0f5de657e76887acad103fa03bbe821a53045998e2a0fadff6591b90ac357b968a1e475b0d57b84988fe488a7543867559ae0d490dfe3c5bf992125913cb5d7a7968bf7e1f0e6f700f9842da45bf867f6ea4e86baa505ab32067db95688088ee09d476c9c494b6ad5e294daa4114a2af8b617bd78e474e776e73a6577236bb20a165a33f070509a2408b52586807a65ceaa0716e406a8c35594bd0899ebbad52c67409113907c5e0c95e3e3145836a10e899fb726555028a829733fdf18fe7172a0fa2da045b7ab663eb74847e3c58235732ac68df978291423df648c26fd0ad80a69ecf01913ca35db524c38efbd4ef0255a47ef73d03624f563f8e79ada5c82bfc28908f4bfad2f9d0ffa603aec633e2e211d537bb24d43e5043da1a9860aa47d016cecac9950bf3ed83762c9600cb60da72d85a58e3dae4c4080dc623594e7dbd2f3ccd4838ca036d56d6aa0bcab3036ceb04cae20b738389c1f0e76a6261fc800bf1dadfca9205984f43361311977d160bbd156036852ab9aa8b7173f76851c9246250ccc3db6f1767d10d9320ade60c3cbfdd601915d8e930ab618527e9c79f8ad112c10ab6e78469b788c1674170a5b30a3127c0573764a0c771d937f979b1e070678f7b77ab56ff46b1a6a9e97365cce57a8f5493b616a24df26eafade986ccc6e2455c38d8fbed86aa950cd0313311be5968269c66776847768c3317b912230c07a427a3c16e3fc7d875538cee9a168ba039cce389421fbc92be3e671468faff6cf7a3372e7212008859716cb973f4a179062bd517e0d9751c420e973b031de0f111c798bd68b1f2d7d80251feb20fbbcb348c56f0163cea60d0e8521671a931c7f5b6fed03ee1fef29a1119873e11de82405784cf4b2b03278c50a0b81cceb290ca70fb17356f1d4738c837dcf78666b0b94b5c13a9ce7bda0d3dbf2fc211aee5b90974c40b70fd5b2df300a4403d29df598a7f3603e31b12338b9bac3eca77bccede0a3355dc3dbcd839dc863a679a6532d3649061f9f9d808a072a860821ef8081b6af93a3f231b15aee233c0b04487e4230bb91109b46dbb72fa88a809edde08d32abd776f6486d85fa02390f266e745e886b4387c918093fd7fc20ad45f28afd132cdee9e0d712d34d8103fc0bc6193fd6aa99c34b4badc56cdd0fafac61dc2ae88084f114fc5e011943be2add293609447f07a1cb2944a99aafe9ace1574a69eaecb208d47031b1561d34990031a00841dfcbef6934024a9a6ea5ab6b38e4bbfc841f8bb4025830951416da93f15a1252ed1100e7a6506fa939f0b69df83a10083f4366d04c44726b343ec19e5572ce3237e4220d9d8f5569b55619b0d0b05547cd2baac9bf8a7313e87c45657ae5daaed49d3ce84d14786e64709aae3cf2fcbaebcdf09b6ed6e259ec745210e5bcc7a7067aa36b51e906ba6ab38ec4b26f35a9c773d4d57983c6510ebdae94d9a7d863c603145119bb6a2c8f601170530facf4d7b361f2ac45514d0ea605b46ffd31c60adae2c191769822ea04960316988c3dffe394c054d031b18bdd0f174403569a4c4d6b741a71f3e24185a0a4c92bfe1ecc7ea9069d9d352f005e8f3d40b851f1a1509889cd5dc7a17770804e97a1ae6ce915504297da778c2a673115029e7ecdabc1adc9e12696f4479b6d660ba647c919dc416e987f73f390847aa8d691510299fd8b4b91baf301b9515e15c13176b09ace988f149aea6d0acab4324114d31ae3770ae421e6878225870604b2f755c561ee21afce775e2b928ceb27b93a6c230ca65fdc71d979fb9f6b11f349071c59671a3eaa6a1c44e89c0de8edcc0f6fb57e3bcf615c262fda435c3c5a7b36cc23851cf5fea8c840633dcafcde08acdea48ab4f35ac5ba5cf4cb6898518f546d4771cf30175b597e7eda903d2a7c6254b23e8de0d05fa82180aeb003e2ad5decd0e7a5d393eafd508331e1d1968e15a500fc93a4e441d9327690254863be5efedbe0fcc899a8f8ec5de3e9a2cddb1e87059ab63f9c6f58c7b85648f04d0af87bef759fd757d63362b351f9d5a3e786c7767ae4d3b1112e302dd8af18c9b57718f3f0cb3080044cb97876d3f942e27eedf987b992ea1b88286bab52ead108f5a6a04eb5e75ec2f41494a6dbc401b94d6e119053325be42191abafe32bc7fbec187a68bd3d28264394221451a669f50c83cab2280190d1a1abfeebb8045cd3993ad0aff2c864e60e7566ddfddd03834748d459dab60e0d47e5664bfc793992183d539886a09d0d9bab770bbd66095da8f1413dd0abb03f272291ff27046a3a5a4ebfd108adb212ab324bb7e8025539d00a4e9e7e8034d4634bbffc830daaf1b1e34c2788d63a22c36bc37aa223ecb90d8ea6ee7eaea73ebd6f04de77633c612e20bdcd324bd0308773b2965e554e54b2d8a4d5c8e6d134674582d98216c786b5060909859929e7b86ae5fd82eed981e0ba1945d8142bc297045e01deac9a0741495314a684810b2590315ef892938e8ef50a195e87b664e1bb32637d877ddc2f3f919ab58efb2e657cff516339bdfd9815b4d850007d7b42b9122f9aa94af2841f05ef4fb04fa50f3c61a41c2f52f0f279ba55ba4d925fc749b07ebfe2f9a4f3160b4a1d250fbfc9f00ab1cb048756c10cb8d644f42f4052cc5391abcbf544b04f03373860450d8620a6036808d2a2b0cf86178022094a604ed58dca6ef13207a65d15258d2c8756d0d7b427867a6af4e92cec641bb53a56d0b90167f3c65c89c2da3ab0decfcce9de5d4a07f2d51457329cfd3d4c3ea53304b649de6a9534a4f3900920bb7343194759263e40ff109e644e98d805f0df06af45731c03ad80097318307f1167ba685c657ecd53ad9bc70ac8b0850d02601a142b20fc5b6191aae0cea4233b535f3a3370834cb1cac33b51fc5bee16554ab80ef2958b3488838119ab8f9f00a467146b8cc7a206243619ad7ec1f9b26feb386d5c883dab180180f8cd064b0b2bb1f352f4b60d134d6ebc25ce17ae0c256af8c8f812c546f64277e1711d3ad31db675bb57851e4dce16fbf9c1ac1be728e929702492c08890b85cd3f542ef4c8bef6802f132e95236cc9a668431301b8ec303c76984fd66aff6c26e284cdd6e45f02932eec2c37cef0653436558be89e705b3c3d66a707092bd1e7f40889f847215432a342908951b78b1da2457d85ca43e9788d2225cda65c88ca75928ef5b648b16d8798163316ffbd24194b77cb4c95db17341b17c61b8cd71f8c9fa9d721731e360aae40b734dc848861e7a157ed7fcdc869c54891d88bb0f7e49e5ecbce02e1eb0696120739b53796a1f23bf16e164573d920483a0eebc7f0b8a3d130b9010106557c06d939516e991310ff595906d067b024081b7bc2bee322493cdefcbdb611826114a09d1e89f719cb18ec5dd6e388f8a62e8504f75a88b3d42374fe15adaf29872d2278b300fd9b104b4a34e7d62dbb8f38ab5412c2ffb3e06500f63424785ebfe52d97fd1960546f90bc4086a0e839142626b1d43ace4186f2d9c7a23b875de4e64558425e162685d6d76773632eac24eee18622c816405eea44fe93f9c271a38725afe70cd8f474dbfb9e18c7a6fa4b51d071801f447be1dc6b6766106fa616381fb4bd24617c33b921081383a25b1d6f92443ddec59ceb876b2dc71921a4781281435633c4ee52c8f8537232b7333133bda0f829381ac4ef07a4d1a86406369341d44b61999249efd6f749366ebf4d7071af91fdcc8650b453221282e3412844c41219340482358e6447193bdfa0de4a26f24f47661a301ba129e839ceb7fe885405600aa9ff70a322dacffc29383026982f53a2f2022896dfe51a315381dd053d8b554e7af06cd7ae3a6f7e9070b9aace6a4cde07b5e98c0cae6989ee7640f73605a2c2300f29bdeac967f1c3efc4aed0ddbf13f672fba8e889f2e60994f5218c6b9df08d1c8c9ed1a7032a227deb620d7ef8ed1093be9f0cc802b5b631dde38a4714eb5d0806a1e2974efda8466bf3b5256f0493f1a9a292808f5c6137db4b50f30de040f6773831d1c6bc4f92118542c4214db119e831ecfb67af424c495db482e1003d8492f19c48012deea1f78a3f38f8b00ff70f1fecb5e65f6f94507710c3e460625194c45d0f591a0f2dd30f5c250407308c4765c61709ec28c72b9abd5ea996beb58c14ae0c1f62747938f2f7a40c8dd0a4e5a7f4f87fba1ba3db18fdd7e1eba6384dfb037c9f74b7c7c1349099c26bf2e88c006975a1ddcc2d00dabd51bb64c2499da4f648346f304f829106727cf0db3fbb7b9feb5746bf6ea43e46cc1036e0f7e3d0e27d2d3cb4d131da759449763c9beefbf5319b496bc521659e294f34ac864e533a19be5428d2f7eb2fcda2e331bf79d32451c7791fa2ac60e2cfe61fc7c980afa0ed24ea65f0884e43421f194facb1f94dcbe44b0993bcdfc0c36d698ae95b75deb2d32aebc30b04a16bbce48ae9778e524c19b3bf7e35f6237c6100c39808a34cb8191df4ab2a6f74eef24ba8a5589aaa900aa27e9e7057ec0bf367a7a723f9b67fb1958a17d2aafdea0c42240a6b704ff33ea3d1cb1d7ad8962a7dcf212887db26aae6bec0cc08418f8bddb62c5e8939b26c335d4f5edb2c2176a016787ec19185334436c7a94d71a5d81adff4d93aada1dfa29164ca3c0d45c991e6f807baf3a2862614d6a6fde7e23e98a4ab6128870b668d4a38d09b07e37a3b0c8773de77fe2ec8081bd88029883c388f0329c3ff37e14176a42559932fb11f329a8cdc613b21ead452990d99fb80b18af4e4f2a20e261744010017626166891d67c7001bbd63f29730ef8a3869771494253114522add117b640095bdae5bb063e229778721cc22baddd54fcc2dfdb3507125288303b280d24fcd5d55d5f4dce2b9b464761bc11fc034e7f27e16bc618f735fda46ed084e6e1a6e721e0bf18f53bc5c83d90ad54ac872f687185781b981ed0be8e4dc56e961e2b1c554c77c45a33ff90165a80517eed048dfbaee8c771a0db37223bde61ecdca79ec5c8ed664a6b7e53a7731decc28db7ca5d18f8d0fcc8258eb24bf46d124151faa83880b7d66ef17ef9e0f45dc0f12aa1223829d27f7152bed40558628ae9242e81a3c0c15be6253333a3bd231c09a6c12e368c124881532e6c92f2761d5705bbb2eed5ead176bff641baf6663447a49d9d3a822d42e1db8ed350fe09533ae98f22c744e279e19f1d4812941dfd46f93b850ea7eb46eed45920884e3c78e3d87590f35c89656a9a067e33e76bc56b17935078ef3b89948c8e3443698117b5e50dec828604c2c696905b682165db6e18c64549743d8674e5ab0e95346f7d79d791303cce7dd46c491178f7b5a252c66ae5b027d23942b937f0d5f8701a6593f7d247fa7456e99aa41524c293f00def1db4e1063ee0191d24229df6b19b86691dd593696af48b3367487d053142d29f98f96d6c7d009004ecf3b128d659860b3310fd1e0b7cb1dbaca1fd49a6198b54c527a27111c6ed193bfdd0f76651c7806dcd901a14f996e0c930ec47ececccc15576b5d9cce35d9e0bc7db21d6c1e89e21363b98e36c8b1c3f6b7ea117db338816689a3977cfb3d53b13f1db492d963099a3ec657e435256347ff28a1f39793ec6de54220c5adc24210d049799d88250da940aa14a5c92c5c761321fe7f6c5046f44b90fdf799283cc93a57a662a874539511f97598c907775b3e5ece4772a49a572967e8819c0eac3e003c641439d4bb4f94cd5ca12d5dc2cc73a47072bd84844d123e2ca11a55ebe12c41b30b2da317fca819063423cbacb26c8efb9412f56069415b697a8cda9cc13cd0dd992f3ead22cb13f2b225d247317b5f7a637a91600fe4b6e17e604a2de3a011875b0e88e94ce748c6328d06120d85ceeb6c3578ac63c7524b8c57756792d562cb978800ecacdc826f12e49eca13b6565ae89ffa38795fbf8da77407682f855a05fe36afcdf0eb5ee778c9bcfe2346e3127510a4e628e2700b89291c170aad4463a132d1dc887445c2b3786e000dfa76ec334766f29dcea8c3a7a804375d8aed5adb56d8dc385b1653640982953efb9b437019ed1c01c20402cb33068def49de382849285832ebc81d111b928796acd8f4a01980b85d9f7742014a4d4b8d1995fac0ecfa23a395eaf62a3378f92d7120c69c3c1d0584d1d08eb614df82f0045d9f473d3f201fd4fed2430de80df5982158d93a585fb6bc8932f561193017e393956fea0f42c4a0b9bbc3dc41d45e02df709c28652578c49c16ecaa90bbc99dd960df7d5365b9fc76441f30cc95107f5eac751eaa3eeef310b0a830f5e3f461bbac6bf4f91c36f9d87e7cf39a26216e64a9032e89ddb91cfa0e9a795c181febe861016e6ef2cec6ed73722e0ac152a3dc5ddd08d71de23b3272a07b17b97cb13886f2ee6015a9c6507cf6e54f62ec42d64dfdd10fd423ab55dff9ad56bc53a46990b2c0d4457ab6a6684d39073575fa27ca2b5c649c8d9cbd22b0d784d59cd9d4b343386e11147d55cb6e412f54a8bbd2f746c5711fbc9a992067f73e463e731e359059d1f3a9073f951aa3300f06063ce39b7ddd97b78f5038ddc8bfca5fc885c9519b5526377de97e92095b3e46508a6a4b9843ecf08e6cd00a7558bd13ece58fcb3c3b7063ecc323e7af817d018c1363e59ada92896066663cbf70c882d109d33e17117753e91e4205531a0c3709eb8787251070d01620df3b7f5e58a7ed690a261404b1005cfd97d33cf9c137cdc609f7631c78c1448f967732963c71b3ce10d59478794df4c6dfe1894aad0ee0e24f9c914248a0019c7f6ca9dea40423bf41cfd69db8ac38fd8f66535149ea0f7e5bedef185992152becc625ff79018ad01b560edaaf68e37782b2874e8cb29361d490e557a32879c6964621a5cc6560734a87538af35d4e61877c2cf27d3d8e8fef91eab066c790482bed21998248ae4644393590668d04667c9526b8fad2bcb9ece36df140251c7c0178daa015874824544cbae4963e269b905f651619bbe51298b1db3cfe20180667c070160187cd95a2eb0a32823d8bcfd4c282323da1f4f06e0d045e24a2049757774e75f088f912807f3ac9e2ae4d4150724318cf256e1aa03f355a0143f0c52cf8f90c57a7a150aed152d9209e62846e6ffd82cbf63b23c1a03ca45a9da5162beb8d31addc656a29ca672fa057842d334029612357df2e885bf5f29a658ee2c63148d21c086f5acc5f7ecafef83b85aee0bdbc4c344542f4405c1decdfd0c865a0e390f986db889f357863bf92aef3b2d01a14f4fb2ab52d359442acde235c579750e7e389fcb0fef29ef6ecf1bab1ab3fc9b889b08cf929d32ae5337ed1cc9b68e25f1516386d70179beb8bb092c7f2881f5090607b62393fea568dfc6eccc86d711fb2261999e42da078b366dd9e66b02dabc7a1d5d0cf37a7026122408bbd20456b4382659bc8d6b806d3841de98182557f3b8a4171813be46d0a2be9684d47d9a0ce77494a5ad3bdf8fb3a629c40195305b9fd6812b00cade38d751eddb0e23bad08e2553c952f156731d126acc7ee41ad4eb197738b5fea672ed8f6214d30fafee5b7bedbc37c70362603491b2ff98fad9971ebd21c5c6faff07600a28c3a886217c693e0ba4bcb23d928bba6c6ac6ca05cd0dc773abdda6302d75cbb48d88e49e6e2a43227be319b7929c239823e0262599ac939d9b2d395d2cd9ce108c957141d3cb29aac50cbd869e3e8ac02f12f224386112e3decbad4e78d7f2dd36329eb4fc6fc0ff0feea1f55fbf3414c4ddb9c5faf011a974d887e1832c65fc825080fe5ee8ea9337e269114f3c28136443fe57a61e7003a990ca255e06289432d6ded8d2947be2190722fcbca7d22c03e5e6776b70b428320519f2acd7bbe58dc7b26a06389fddeac81ce5bb6de47201c88e8a43296bf18bd33a6f48eb2d0fb435021aa8738357f896e6f220b150f16cd2f0d77212c020ebebdded2f29212a6180bbb69afb51d263203bab3f154ebd7ac713fb4df3e9ac1b8b160ec09c1cd6f6d4ff8aafc323961854499fd1b53d439e0cddfb51dcdf468a7d3377f6401e8056d68e36b7d8ecc26bbcc2cb3cc1c37b3baedaa67388edfe3f64d2f37474a17056fbf40721204132af0938443844f9e314cfbc04e777098b6770728cc529d6e5269e06e21656e22323156542de5ba1c801ce7c2f7b50494fc73a2875aeee1cf57198ffa9560f328fca28cf3af99a31f790d2ebfa47817a50347b9e88a7070cfd3f77c1717d68e88f0d480a72fd7ef7a53c00f4849736f57a0c1e0037403391f19599c78ed099975ec23e0fe21c93c4bb00e81f0e1b054602cc2b915ab5b742c143da43916ca3b5ce5bc9023a9c243326ceb32052489aa0bd3e3c50ed82af82668100ca3b314ee8d438a05bf42387633494001515f15942c64380b26f047aea0c769db7be063ca0f96cdedb7c4996fd5ad7f1fc3fe54f4e29b8034880384d065b209c30e25d1e15aa8609f47be8f3ee73149480053dd319662adeffcf33080cc336c4eb8ab1e9e2b9a8582d64cbb81d3ea164fed8782d9c4b1e883d12a66658c63670afe224a288de4459e769b8b188296228fa568df7cfffc74a31718a1deb0118199b0d9b3d6859efbe9e7e32dc188e5ac535d68328015f3335d7fe3a6e1405fbe29b3f166ddc88e838f7ef2d4eb9f95ad419bc06c5f082ad6ea1d311c1eea3086654b53b6cef401a4a6c69fb1fd42bb923375fe6b31e0fbdac38d2abb638b839f86feab6860de67918d1ec4159cd2d73fa9b326f1b51e4a95f0ec31d3c5a9f7d99f28d1eedbc93a3896a43c2f45c8f78586f4c970143db73d6bb7b78a47b10f5de9f06d524a0168870c80a9d4c66e0f2331e6d86679e5524a0e2cc3b7ac56246e91a5c1b82d157d6e244a13f32f388c751e04c8e504faa918b00c81c3316ddd2b6b56e8b647470def95a406875668e27164682f8d5113c2c63b9cf9a113aa6261c92244ed7f4808e1362ec66c636f3f38d839a5bc0aac168fbda95835d31299ad4b9ebeb41d9f052d80b4782a94f46a29c840cd1d4460766e5b9d15b42c07a64a5705d9e18379c78251d0c22d89d5ebcd3db10460cbc74ab15d5d9ce0725547edc0aced4b702880923ba0f5b746d57841db0368beaf03807817d28d740cba11031e483072d068ae2ec81d98fb2a6f10890fa1ed3c4e014cff8f5f25993ad76330a60300692451839581dd42cf42b025010cfe8734ce8838dcf149c6598fc74ad06e97c5264fe94eaff340e08cf844fe01cb2bced77bd54712a1f33820ea4f61d41706fd7c75813f7cc6287ebea04decbe2ef7d12f9c91d7d5f8839d27b475cbe5d73c3413a3e1708be9a2dc541f8c626ed34156d2495ee72ffcbb42c8c4e9102c8518ef75b67c2e3a3f6c864c21e6f7ab9c3b4aa2f7724e9147130bd92f899dbb0e3d3246741faa153af9db4e0af6937a00cdf20a623647cb30e12f063190b6ee6c0e25d849aa538817b3a36607f7f62fcb753bc4c05f342e5ac6b78c185da898fc8693927474e1e4c12923df677c8b1ceba42a93f303d7f4f99fc77054aef68dbda234b2ff4fa855bd138dc9755694c7d38ab9382924481a66fe551c0f522a19f46754805eec44568a7260430aee7f7e5c7b00aaa241551a40fa8fdcdb366886ca91104a1fa1c683fa0d750090d5635fb378b8f54f683f86db3193b056b19fd696e038193d039ee7979d3fd605901b9f817815c8d46fbf556a06ec04fe97b0b96d129d6f55bd96c745483ce540badfcdda4c8e4e422c8371cdf91b0b997f993b4ea975863f185892837d487dfae5c6995268940633f009ce86161f5a8ea2fab7d324a281a0ac234dc64a96d448651f4de6b73cc1ca5b228abf9dfaec9054aa21a0e9a8005a48d2bcd54b704c986c63e84893cf5f456b5212a7178b15386b952e7f35919c3a931efdd9f522356db6d50af711b78767570ef66c46b853843df545f5c2dd93850330254f32a43c6fbe22cab1f98b37dc7b9e70aae3c0acb9c3c7d4146a0adf4666c0e46af1b018391b1c95e4a301a25a37a1613d9b5cdd72cc7566ed3a8e6c326efa3541155186a809b3450f48a494f57981788edb6c46007412f39f85eaaa6a683fbc9d723552ed26beea356bfd50c3e464d8f09969649ae1115962f50f210f289663201efdd3b6e212ac161d13fb03e68fd4b3d256580e250a813761ba149bac80baa7e68ddba0fb3fc1dc6cfb6298c9d86130ac94648013e7633f2a2bc46de24bbe6334fe2453fb612f1892c7985125b58e00523bbe431559a35ed4e5c308c971f73a9ea3035dbeb6a81b421869e0273325f7ab2b24b05491cabbd7372c8c4ec889e2e7f7508cf7fc7d94db012bc2a1f03b0e39fa7586eb1038dc2e6d7bef24fb62c60aa372b8e4e29f949223acee05cfb3e6f9fe87e888bb01c83a491896e3516092b9db376d630762f31598f725dade058e30b0266ab12a096efe92ae898c26aa71bc9da1d7066563e3b08c7c2eaa0968e1a5f8123e0d42b49f9c62ee4db780757f02f082ad441cdd8a6ceea6c4674bf87d1e847cf511d8e9cbce19f4e10e98ee61f9ae277f4559948fbb0bf0aa9a758df76502487e35f15205754fc581dd065e01f5b6deaf78e1c77b7dedefe18403e62be363cad60813a760d69bf99faf7604f90f6e8af129143424a68182218528fbac46e44824b9f70fcabc30b65260ee0b4a00f027c19b34de1c7d0c907a19e743a08110a0265eba696c7c05930de081a4b9625264eb41c6b6b6b50fa0294c0dba00fa30d567fb01bee4d722e340920080ef458abe2259653c879cab25f8237078618bbcf9fe55fe8d707a6ae3f94c04a1f5f690c88629dea0126324ce1a6f0b5cd0469ab7268cd6857475a19ed81ff08704a3856b6635336d6635436f71ea32dbf8d82ebfe042a745ef2d9d1a1ba2fb925d9c8296c61e49f8aad9af634f5a26a9a70d0dbf6450523e4b690d2b4bcc531f43fcec825fab8c3309f6abe1481547cfa51884a411db6687c31f04a40dec57ef4f95ac24a5db88d5636fb1e7863272b4a963be33f1c3588349c7011ea94429575b8cee57e2ba8f8561a64ccfb1b81e15c728016b9d78c1a6e3bd2768a88db94afa926b109f33cf14b7d2bf4c401c35f5fe719eb9041c29bbcadd2ddd331032a413bb7f02e1ebb38b0bc9be432ed741e7a1bd7f77bfa04e4a5880a3b63c483178e72bedf3ccf6ac8b7a37c631f8f502b15b93e363396433b05f56695664166fe24f59718ed0153ff62b268b9ba96615e2cd380d54be3cc9cace8f19345c0ff4c03c1217d5b90f0bbd40546f3bdbf78ad2376d9e0ec533896cc4c28c40c1982064f40539270b29e614bbe664c9ff6ed0e531484b461d33c02841eb49930f9305f59666df18dac22a5480c2c042021392192ec83819d7d1a898ff28e836bcc3b7dfdcd27f46d027cf8ae850d6e29e1e67fc73cc4a6c30d3f41221c3ce4a0ab787215b2453b5cbc087a83cbcc8d6022ac4d0b3ad37a81e9c6d303a87f7aff41f6c229deec6e373f1b63702e73c6199a370b7c490b1c9cf2086f2b312ba22ae163f0b7d4f1dc46aa71163f5e21bbfd8a65978e129ca7c0535a6c01751154170eb123786e85d724013f6e091bf30d1ee11bfb704e3e4ff3a9c066c1d5d963e8d5a5e41d4bc5b7d565cd1cc65dd71022bc7e01090c2a2cc50e54dad9ef92422b4d8bb6ae175ff3af9e7eca62d83ed4212af0147e02f30ef64e46357f13f7af2039bf3410e0f0f74655210a9b3d66a4d6e1fe6a4eaf8e6713b350c65305ebc2c6343e59b9b29e125730b651d4707981ca63b024d6992c514567e427713d7d605ec0b822c5ee31e3d4ec7f61a0105173fa51c635244fca8137528401f9ee6a8b1972aca1201d10997aafa4fb0e29d244db8ca0957b01c967a52390127bbe368260565744f547bc00a373f70060138df198dcdb2e57ce010d8def5a056b6ac52cd817c8bc83a136c750e678035942473e859d2f8602b2fb59f61b26f958c1ba72631a2f466329e172b0babd2a1139bcd42fcbc44b739f19f7269c52ba6cc3ddfe1444b671bbd0ab5df8e1bd961253ec4592e65f1b5060ef82f5e0f2932b8f23444df0781c8046730d3f852ee05ed94c18654c80ad7f4946b1c512934cdf9786651626eda09abaeaedeab9e4a942c795a8c3609d211be0ff74d2aefe7d13a0f389cfe7c09dc9f942ad685f0231b733f1e82b749813300e44a6e60a73d84aab67a751d282766923ccf6c3a07f51c4d95f55607b0b335215daebb79022845282dcd9067c13de448bfdc4c81f74a903ad651a688f77441558db4a3cd4733efe4cd34db7b54f63f40657b6360ecfa57eb8062971a8193bb59353481ee05593b377738b024d3bff741c03adb1b4577ed92f35249f279be94670072d4ca5c79de322dce41274ea7e1ccb24ebe0722512c184f6dd8b8239174277aab6e3c501006a9f10cdbfe28917535cd7cd23e7d34fbe37c54aa2f58acc82516f710886a8360aa47e8c3f75c216117282802d53ac02e21921f6ac5a071a7a84fd0f5f3066d9526a116967e4469ff67b0cec3983ed09e8dfd4148090e5ace9a44b6aea7d3bfe3c80296490f9adc845b253f1a7cbe022924e94a624ba44ef87c18950e6bec4b9923f9ad77376365c41152c6fef8324530cf4cf9cbdbfed0bd03a97d53e9c4bb9c1e58fd5a82a9dbaa0cbb8fd4d0783c200968cf93b97c80a83cba237b41e23aa771edc7c29083de618355170b75a82d8e8b30f3b3a5469f6df0163b0d4db68a49978ef78d4c0fcc722ec5a7a6122391b8ab4d7e1f800e5b0fc7932c85b801b8600bf2c74519c841b45b54ad9f490d298df68d0acddcf31c975b0608cb9177bbef829467b320f1a22d23874a39d1dc16e509ee9cb1ff86bdf9d669a6092e4dd3a550b3442a89342f01c72f42bd65812edba3ad254409fcb3d01f65b68f8a62292dab70ea04910f2c51aeb6bac06350cb4ea4f43e45b25797eb904aa37aeab20a6416f7b78c0d17613c8e54d6fdbdf17b5c4fd4893ce07c7a0a8c2411863a22d2ac9e7c6cdbd83b958ffd4155073284801a926a6396bf6e223da741f4eecc7617d494337dc1b1389332c1dd74f269cdb95fd9065b2fbdc9f718302b3e7f07d95735509813cd4a0788a2eabf6d915e8e24c8718b71da953acb9582abc4304267b1b11200e81c30c08503f12f7576afa942111a5e1647d68784c056b7e560563fdd99a480105944d8465f1c19af743126e9f0be80d32744b7431541ba7fda026d47cf5bf11ab5074443b1fb3fa338bd896c980712361c066801e9af80c3d264275b9aec4d0528372fd7785a85fb0040fefac4d9b05af42ebfd58ae44e1d1fa8ecd25d7da451032a7e7978d3b483813c37561bb6a23f33e1e8dd9ea405d116a9d4df02aaa046c1107664f3868bcf4c30094fc985dcf02a1fed74546e0aad3cbe0db0ac3a3081ced1b531fe83cba26318a2cf497374737a045639a65f6a8c14e83e62289bc47ef22704d05795cd8040d2a722a1b8a0ffd57fc5e7eee8f33a92063c438742ef993b3911b346d26211eafd09a47fabff8df36b1b543b4db4cf428104dc12d7f64016baef10352b5b6da8386b4dfe8cce75599e114ee7b8f2190c35bf13e50890995d4f5c7406ef7420c48b1727bb800e63705505b8a2f30701092f0de56b72631bf12fe0b3a0a652cf4a3ed98c3c7278529ea7e9362153a14c5027a314025d71a6589fc8ceb001501d4e1ceee6acbf1da089d484a4556c39398afe81eb2149b0766ef91eadaab5be53e8afb1a1d5acad9f73b15404e9f6fc5ab14617cdfd57d6f7c094705895b917efdd7e6f0f48c5610f897f8fdaf0ee60eadbd8048055792cdc40d78b16fbb3fac8640998a8516499bce6ca7ca92a4e42ad4b1307123167082d0fedf6ad37d688f8d999b09c5fd465412b013000f9e3866f028681f76fdd7471ccce7e52f31871a6e8623138e3617b0a1946652f42ddd387d0dfd14fa0410ead304b5086655c809f115c9f4d8633cef61506b9e736268df5b831829903f0688d488799d8d85d7218cf84b00c75a0fd8598e4f57771e6fa215df272afef8f2379fae5026e0841ce19a148969de4879dedd76e5ccb136c7d2e4ddd968f4cee4acfa77e8aedb2ab13e80a7bf3d1dc14c135343b07e226cb21f03e5e9b4e4ea96d78709c100f3417b75aa605dd7d7f1e588ad50596c08d869b9467707acc6b9ccf46e0e2fb29fc54b6836358e23e7cb55c3b259066723a40e8cf0e2d425c76c02398c0ed240fb21a8418c65fdc617266d9d5ce0b6428c1809872fdf557652f299bc7bab799749595598c4b221478078466bf61eda19aaf8625de84900cd8205915bcf0ffeab305f411610b18aaecb8695b31c0fef0122b76ec2535ad125dee3c1e6ffd528ae1c3a83c18e31b5dcf93e8100285984977947eaee75d7da6fe8b5f24e75a3f2ab7fe241c26033f20b53b643d4be932a156dba4bdd418ab5a4073e1015112bd23f94e472c077cea4466f5865924619c7b2aca176f1d8b67bfba536bb72a145ee926782e22f00512d8fd0b5d9d2b8abe913936eab2505144e100ebfbdac3105f356d6dcef6136334167d31ef2e6d1a376f1a0c0ce924ceebfd235a31cb0ca5dcbfe946a2d9238fa70cfc14177f173b678edab753664ab1f9dbd5aac743ae9532d8d799f8dbd6af5e4b3aff6c94b6532dda0cf8bbbb6967baaefe3c299a7b6d3a993c69b2eb15b4e0968dafbb7108f28c95cb7cdffb25fd9222759ff61ac07b65ed7d436233e68589f99c1a9c5a1d31322c55dff7d42e23af27bdc36800a0c7de413a118413a4a22d13eddcda7f94e64dd12fab750bcdb6f8bcc171e222c9f23513a4383fb37cc78f4703510dc3b8d784cc5da6263635317cf7a0de261d215ea39d261e9763889dc6149627bf341a3a20f5ff98115a9dfad301f404c2a563dcf9a8e96e5d577287984d099f66778837fe8eb81f532e276c3a23af6a98766bcac4558b520dd9cbf61e1dc77d8cf323ae82fd5cae0d050b7db37fd6109b221becaaa2b01593f7b4e4b20dc0330bac4a52cfde5a9baea9b97b0a814946e4a0c5270c301a43d5a34ad9e4d022076f885e930842d79e9f0bc5be4d8658ac74db5b7235edc76365aa259637c4d292c7a671a208ac2224a13a2447f20d3edf98bf3651a202a00e1fe65d002215feee84a8eb32b1eeae2e32d1aed6f23354aa87d1596ce845141e5f8c18829e1f4be25fbfdb02c144ab42226477c2ea00ee0d6ac8b01494d38866015674fc27a32166a53d1ebfaf4f21657cdb0bf1046a9271fb9810ba68a96b0a33581bdee4f70891cbfc7c7905b297112e7f7a2c754deae80b63fbb61ff4f32efc9ea343fa97750a7d49bed8bec088492c23a3e27665a016f2a7e4cf4f22b19ee17b0e054c212bfdb3be47e04dc4f9ec481fe21851e7b98a46675309b1c640d18455fbdacd057c3b86f146958c2ad71695a5105fc9f8b9c239a4c4d5b4b2c0472851f1fc004972016cb6f376e585ecc1e24bc4ac858d1454a2aac2ddf5b59b8ce2aaeb7b0f96419f040a961977f8e4720154488d10d067fa1842484aa30d859299132e73274a9baeed9adf5b4c39f417b7005d00b863d3c98abc0faf6ec505cf66bb440fa071094bd55b1c415a7cd5a71b3a249eda07ece8b8bd24a70be5c51bb3186b73110a23b49a8f13b3215cf91549d955f80648dac4135751e289cb1680891e878dc2fa1122bbbed8e5dcc2df72f43d2db9ad532bf141364ed4651ae826b541b1987cb7734ce43b9232cecec9a4dc82419f08791d96d56e64547ad4c34061e1594cc8259115a10e21780aa43acb88f741cdca8a3a81db6ae93d4d69e871614d981bb5a6b4032ce9d6881228e4e1da480e1bbcaa95e8169183d414ed93ea66483760c089b1df997f30b11aa1035ef19b2a23118fb5758f203e30db8c8cea06c6ac83338f304d4b625339e07daf57c2dc86cf603f465ddda81cb3ca58c9daecd39507b0ada0781293aa1d090ee1cc9fcf981ccc1a07aabea045cf4f8b4812b427b83ace2bef50fb714a54948f4b9a9b662061f85d64c9673c171438dbfa18e462d426cc24c6f659db9eb136c6e7d616e7e08ec047a0c72f67a32dfcf661d50797e1539921eec07dc4034f6937feaca1be8b682e85491c1391e8230022a3283b5542071026be6b1d9dbc97b84f91d054b66183e51f32a7f0a59818c64e22c471ced191b782c32f71cac0b522fc5c29ee9d345a14b6015f3095407980288e90cbef01d33c5c49d0f92a1ad5a4b4d4a6a96391b34de69d8bf0e10ede62e26ad0e7ddc98447e86627fd5378d475c763241643594cc66896bc77de114012476bf9634af23e449a0d5b10440dfd3362bf6ae1c5b6366001c8f52508400cdfc9701160103b11b7affcd2fc6aa94cef007672c0b6a15843c197cbc9bda43a33ba7610960ab94c39ac5465164676b72e609ac4ddddc8f5a5d6c0383521f34977071f2e8dd9ca0d567201bdc2e3bc877e6edba15c41222bb713223edf81c4f8fd18cb79d769041cacd31ff604b483f17273f45c44940c4ce08795f1eaea648c92f07a0e518785ba1e00944e4e1b0d167dbcfd3f89aec3ff759690edc3caeca4c3e0a6c1ffdcfe5c2c95cb56a8a39507e80d05abf72be719e87d6fb35d35e59a7186674398a62063d21a6a8fac891d2fd4c1d0cd93c8741cbdef01085c04b8c54bc3c460a218f8969364766d75ec07c53fe9040ca6778d6eaacd0fc969f6301ffd9c229e98736e06046e12bd03a0d0e23eb9b841098f3f8162a192765b659eaf3669916d25a6a6347fba01bc1bb97387a48b20d933e96c7e129e590fa866a5b0aaaab4cf67b404251e420157dc18a32296d92261167b364bb5f6a1142189c11042b04d1d44b2e0e86d2b6df902dd7ebba386194a98f698eaf7047650a6d3aecc416e37fc34ee3564b51b2681117ae4d6ae4c763d8115c0c3bf64e6e00210b9c43a6c957cb304d2f8f9d43b0abde245c467049f2f863ae37dfab3ae73ba6516f0debb66e10984479ce81fcc4ba1ea5dfed292fdd4cacecf458eb93ef50e432e8ebcc5c1a08621c5ddf2bc0c1eaf91622201bc01106f631c49612c0a9cf4a84b04efbd8fc760b0d4ae1105c019e96ca415025c776299d60eae9e29912ded14c8b36d93483b331baf52b69d34398db4f701b8886ca306e17486c5daa49ce93f81aecc4364714279daaaca5facbf78d9d57f2af2df6de49abf009153155a6cbc5aa649a9976040d45032384b374d650cb265bba480d10cbcf414a0aa14fb4d635a7c394d25e2a947970d8be0322f021f3534430047f016144570c967bf176809501515c546a615017bfdad1a7f25e56e5e68530aaf14fbeb6e07fa17aa02010607d7a75eea32e96a918aee0a28b1540b6832aa44e43c1521433fd3f6daed493bcdc1f64035b9b1273ed49fdf6c21eb9b467dcf48ad9ba2ec05c81b5e50984851a33de44f0fc3b487f7a88559a6382023f10b470e81ad282a3f61869d9f8e625591a58763d98b25bb09309781f11d4107ffacf069e6e7b8537c33efb7104cc143783981e18e2de259e28a8098d301e104dd98316ca40d6db9b00d3df6b4ccd1da0a1b78e588b8dcb5b6ff40900b3eb9faf69c93f8ab413935c1c7b4e84d0faadcfef1254ccf4611b112b4779a1493300a17cc6dd8b1e1bc21f703ed3ca1f58df7df362965d139ea67bba0f4aeb000ae1d513a50d841cfa4c8b22d8213061c745b8fa3b044f65b9c2b77b4316adac707c8382cc610e42b4b4260ba1c3eb9bca19e174d1da8c3cd6e34dc80090eb949ea859c6e6644877894e6044f04cc268e2a80cd16a3b57216f181140495db35737ea56a211269e26264749d2e6d458c4367f07268d89aa854efd6ba6e88a5dddede6a8546ed53714b0ab89bee68312a8d8e6644486752584b73f20da3d1785e15cef9f851cb9e267febfc4f0df00fcae8eb08f3b9a2af5e3575380e39abe2a101d4a8ca6c72e6632fd1ec09f07c003e2fb5f3e0701fee9a09593cdcf6ea8a16208b19ef8a8f8dd9044195685f3553b21bb483f689d627bb763bd0bc674fee7470a074f4da4d1ab73f3fc5506b00dd9fa718bdebb290ee3ea8d3aacfaa8ffc7d3ee0f632d8cf6b5b3c44bc1b5416e60b2f21d91853ca6f0da325e66e5ff26b5d4a56c5a33fb02465ae6993d60e4315d8298f04b825f1fe86083cca2227bb26f6cae37dafa2fdffd7a0f739e9d75bf85a9edd897e0c47eb1137aa36712eaaec08e38a75d50c5742bf1a158a68873ff5c136607b5c5850d19dba0574395f4a44f76b05c4f02c365a6795ead778a8a1fc2f52ece0b150974a065ad23915d211de7abf1e079e40b0662462b41ec77ba8fc212c407256f0d12dc57d93f70706a2a54b15f947f54525df0aa3bc343ee39dd01ef28b1bda51c36d0fe71c5957302b4c274b4774eca1405139fb534c067b5ddcce43bd14f81e169bc838dede73c021f95fcd58d9a676d10c6bebf9c53c0cae6e5ca32ed19e826e146d9590acf6a71e42e619947c363991a9c46985db9be96917d5cee74265f6924b8d23a1c4b8a9a10b9c083aef5aa2a2919826c29e6447faf24b364ff51780d401138bf54da4348e7f5bcb50b477dfcd2a8e2544b4e183ea39b6a03dfc361d1fead8587bff17f8479583a5276b12b7e8ed767dd1bc617bada94f97fe6f0083cc402919cc8ef4d63dfd486e592fdd9dfc02c353ea7a7784c57e6c08a7050d1d94adfa289849eb1d89e24ba03502b663b0558e6c5e648fb823d1e90ff815720d8e44809fb68d2c0de81993b209aa5450033809e1f20fd31a2201aa148dbae6537e17e6cb9da1c84cccb5ebacc7e2841e4ff258ad893700c1c1cef891d277889e61776aeabd1cb1d33c2a3b26296c1147039351f04eee79d896d6625537431d8fbc6096e2b1fa63abdcb00c834d6770ef63405b27c3efe15470775a29a41cc707c62596f5728e915a52830b0b9320c23e307cc1c66d9c0ff7c8da7fa003587d9d9a8e5b07117e09a27c5ce0fe2b522f5f9bd30592ab2560391de11639ea58f3c768139e5cff2fd915231d57a31b003576604ababe9e7aa3bec90d826c48bc4148f017b42f506137c002f640ad0d03906b9cf5a0cf35ebd76ef5cdf8defcfabe2903ee93666344f6c170bf3a80a2aa6e17dda57b2b2b86d0086972e687a6a62b901f6f2c11e5d9b00e0df0d661097186b3e869279286ed3b3386ab78a66f8b9fca341290830390669f528a128129f091c54abad0b792f7065623a836b385868f8b1d732470a313409138709244d8a158d4f4bc2c8754e312347c0477577f9df8f5e403e72b9304b619775f2d7f78c3afcccb73948a1a2f929ab3879e4536ed7a32127f1e915d69458c6416b4e032be104625c69957e14cbf3c958f186da9051a5d53d1c940cea5dc8f6f4bcafa49cc97b44ee5713eadcede98fc647a019ec8631506ac1a53bf7cc34596ce5541849653101ed47b9c8068c95a9172736e475249e58b45237c32425c338cb0f7ca728764cfd3576824a3bcfcae4427e4132a9ec7c9dfb686fd1bd6f7668d4fd1fb01dcc0f1cf6cbc1db664c25e0bc8361c94e8c3db7cde1299a27b3e7235a19dad420c005ededd5e7df1b233f785228ea3beeec200ba0e65aca435c47f1b203589d1795db714c21d7910d26871b86625ead70fd5c25257a387070c8279117d0af3a4f700c6fe615aa3eb874c279cf16419c35da88926f6120872a0b2e4bd88e40affed140276a7034313863c7aeb0a93610c37215d9bbd52e6a4bf795984117fb84872ba1ce92b520ed1fc005374a419a26867609a37f507aa9693004757a743b8ac1fe034d9b30562cd6a4a377a331039b34e95acabcb8fd8179d6a149aedea20266666d743666081debaa8bc1b385eaddc4d08d0e5b06b438ed19d4104de28c3ac4fac5af01ec12daf6961fadef35a24e10afe4ae2cafbb35e16cfb2952a47988208d76e5be69ce7ca8752261331ad4eae37b23cff6b99aa75e0257bc924b3c50314095165919c70e23577eafc777670d5bf996c4719e135a0e3d66e70d0672f86864c9ac29aa44e7da6320d8dd68a7a699cef86cb566ec417fb0cf6c9e436599a8ad4a28f8273050643b27a8957428b212144a8460b4d3d3fa198c0d3fa81e99e4fd77e73d5621ffaadd0a1b800d8fea3045a9e51521612842dea5a0f2fa0da8fe91c107479981d78dd0df5142e9e407799fba197afe38411eba1efacae471b09adbf4e7a1ee00b955962322812871272469aa8b26818d067839742c3eae341a76ce12dc1ce598b0aef214050e6914b7c0e810f1942e1ebadc3bf36a1e8fb478f97eb13be5a20e7506c9b3c33c109e1ecfe28595d2f4880dd901d0af5e06a53410203720d87c302e5b7dba1170bc09ff85fd341b855c836412ad21a07f0c7f7494393340def30944b6847d91215b0517b0052c73258f2c281cb1b06e6d137e6bfe1296eb6d859648350d23a62e11eab75abfc7626deadf2414a6e24655ebacbb0b4eefe4700f5d39467d7f15d6e37e212b72e6d63213cce435960f610bb3c3a56b29d8c1a804ec0d5350370ed26a54ff32059b09d1d8ed6c87acad3242abfa48beda85e7740d8ab8336fa29c9a1fbcbdf7ac3cac160e43f5c4d200f1d1cf2bbeb7203d88d4968c72535981a732aa7b1577b40abe4844152a7207c5e367fc8072bc9717b72330106b78c01da6f1106a113b9e30046ccdf075982d93c50b6256e17f45f88f5b78d7c37488104e2ff3a573fffdd3298ed26cf893ea374e263602301c69f3dfd7117d5e98d386f4cb8dc1013c1da9aa42a31076f0f1593b7d330b008e478eccdc4601a647da5f1c52e63abedb5bf0da0d039767feed4f22a0c113386c1f7c46ffb64255ef071b111f3a02dc63314c81f884e63db07aac3c1637885d2b66bacca41bc1cc4262a69f43f0b9040b57cefa00c969aebf403b8d9cbb29d41d5ec64b5a3f9659a50163820273caaf73ac345835d63401d80ea39334e60cd8053ab89384d2e980972b009c03e139c05b32fcb77f787cfb7b781f60b5a11ecd5f12f979f0df2145cffd4860408a032f650290eb44b7fc0f04f761bd7970c7ba7ae6d1ffb9a9d9fbed4391fae451ed84dc5f3569ee7c10679b067c74cc294c045a846b4bfc7d8d1f471117a6caa01be333d60ec673dc334615a520393eea0d124cc75762e0fd3b0c26d4e4ae58afa15cb1553c1e899b685b050e531973dc275ec20d7d8f3d080b686e66e2221a1d35921b082c98516fdba36ffd88975bb9141cdb5840faecc45564be05b6013eb5aad6593e4324137f8a412320214eec6f03090836b2204ca3449516e949523d91393801270b01d8a07d57332ae09efec53f1abe3372c571c58060210425cca591149b6372e95df9ab025c5237807792c90332d950735aedb029d4afe7735f1f11f04c73c11c9a62337f792bf49da5c32a06d03b05d6b056e2d50f99260c93d5331b166a7cec2ffc8f6b608990b33e5a05f88a5a71b111d9bd9f10ca38af42cf44e688d42d2c14bad796b6f8bb8551fcfee3a0c381a832958e55e8617b93eec1cde268cd020ff158954d68b19b3712a32e60c0a5d322864a42e576ce3c43801708ceb21e1bc91ca560f43443bd4cbb9af6dcc44d1bb1987f201de2f29c8df7225a0725dab43d15b82ecd476c0c2c242224942798367001956a56a035254ea4328fc918154b59fa025e962c1bb7ddffd5923fd1162a2dd9a60b9a81cc24005b2985f31b2ee488e3e545b49f35b2ca3f877611d632610d15521839f0ed0231c26a276f3c85bdd554011623f7f10e82688fa504fc4cc588cb3bcb7dddf238070951b0da440df06fb7bd317cc66d8363913004b457e5c5b5e730e88f0a4972d104c0f222ae56ef9364a47a5ada57aab6ad0dbf5fc40aea1e43a85e33c958525a70bec2d66868f4be97fd0ee50e98150ee230c0da9ee253d8a813a8dab13e322bd9d02a84cea090b01f4fd077acc489899289d7da57448dbf65bf01db118c7a0915be2644ba7a80bb50b415c987a346340ae21beebabcd294aa3fe470d1c889bc88f0f47abcdb2b16cf8180e9f1bda85c39d7ea75a537daa10a0742ba137ac1e515cf1d0ba3e026e9a7393bbe56666300e4ff2ef87f130cd70810d563ed848820a1f9f9af5d955c8927566c8929fb5c481081e3791513b473606161fe4c2217738025d0dc3db9454c4238099aa368c391e352c400c5d13785b27cf4116b07af7a967ac0a2b6168f4b350bcc9cd5dfd41400e63769a3f011386000aa6621a4e9aa01ac2296ffa13bb0c363d84be04e46e73d293fa3291ccf3c6018b647eff60d3a191854b200a3021081d86db3b8d561896ceb9f88dd7772acd7009eca25e2e299daf2efdbfa05cd678572136f77af37236e92a930e5902123d80e3cb20ea488b7d35309577f00cfba4f739950d8f87741da9dde0f405e86fcfdc5a91fd356153d76103313563fe93d237bec9ba271e5c0bb3dea5b811b769ea59e350848901fb7336c675c99e8afa5fe91e538662c33578dc08f2dba89e302fac5198810c2add27b1e4e29506082c03836c0449f0c53866c7328abf5246790d9bc0511060dd1d2997f51215976d71eeb7cf03f93881d52fdc0c53161456981ae3e59e2c2c5f1d5d75a49abd73406a5f01a3425adb3a40114e90d3cf20626555dd9941200c82cd4cf9c0bfef7d02ca3297fa8efc1e6919096e185f1e7e7a228558bd457a6e741cc29ce15d43e7c4f0f7d9c982e1488c960eff3599fbcfe46f3a1339ff8429780e2bc582e40957034189e4fe4a474e69f629a63d6f516828bc981a24bc8788f079b9652cd109b2dbc3bba231841d232a6a9e1aad56da2b73b922120623c586c23c6197a4efd050443f49d929db2c73d8ccc23f5045ba1c86cc7015d0236d6b3bc1e6f4e85af64df57763d53cb25a75fd640d3390a721bf694888fea9d4e40be79ec43e356351d730251cbfa1467057318925e17bc9ddd4645c652de94fe461b7a1b6fe8d1526b51969d417eec369df6af11cc9f5dfafbff088483952ae0093c710170ea6c11b68e6044bd8513639933193c229ae9dce44db593015ff05c42b215490806c0c8505e37996f18f6604aac89cf5b5335736635705bd07dd75f91757d9b708cfc910a9155e3d69f36ebc123a36db90845bbbeaabc4f7567815c00b0f70f67e047752ec97645166e957715114bb8e5a2c8eef43d53784e34ed13cae6839eb75db186657316752cc29a1ed71585fe11af9eb9e4e0f9411995192de7971412b54b9b792d9a2e7333ad6b70ef5d969fb6971a7103832c14749a50a9794c3086208c8c818e59179f12f2d2deeacf86210d2b3537a5326416627d0d1860d9b7b62b927377605207885053d2d2c0e8b2b4dd3188ff73365b468c84886e558b90b6a4aa43260ba304dc18084ec54fdb2d431078680cc3012fd92a57c0cb27bf1fcf258bc3d46131a66471581c962493cb41b23eecd055fae0a8a3752e9c47e2a541b6eb7edcf50470f6157ee9c28c6ccd92bd650acc2d462d8e2a728ed745b0b475316b51bea86ba9c7524ef1362dae0e4e77c365d8cbd17ce5528a791a06cb5ad61b0db9bc04e4244336872f20cf9a186ff4b3946eaa33a0bc354b31284b9a9e2faae25933e28d6e4bb9e4e71157f7d4dd03cb302477d7c5324c86e56c7ca15c9fdc52ac8dab93f27bd62ce5d04f149637396f44c6e56db18ce23bc0f2adf2ba90d7d1ddd932cccee5a1b044611916c1f591326bc12f0a636943e08d9c5c1e9265d8209727c2526ccbd5f9cc1a1c6f3434cd86c71ba5f0bc1979231cae0fafbc2a242d882fbae1f2849661795c1f6277789661532c77b70b44c5f3b6c31b7971734b5eccca1277c01b61b39cac3a207e0f1a37174871813487a6bce3b269da686fa4e4f228903385f284cbb03aee4e8f655815cf1d927b078bab23a0b719a4aeec0619b8b9262f16c1ddc9598665707d8caa3b23e7f2eb592ea7bc25cbb0b2a5ece1697e5c5e194b311d9607499af08b1e78dee478a33b9eb404be68ccb23d3437f42e2cc3c0dc9dd332ecb6bcbdf146762c6951bea8cc7249bb49bd119dab3ba13b28cbb0e0ddb1598645b9392f9a0ba3b9065e0ccde565316d0ebc5195bbc36019366529f7fcce8c9bd39273e97d452c1fe26b74777c2cc3ae58de7278a32e96b514bee88fa5347b9e1697d780c495f901bcae0cca5b0b6f44c55277e7c79a5c1d962c1e8993e2875adc1cd7dbca93415a30edd6e68d9478d6eebc11d0cde92069497c911097c7551e0f4bb1334b1b146fe4e6ea6eb3b6c31bc9a584e0690e5c1d09bfa789eb73407164fec800978780a42df045676eceeac54678dab6bc11037747c6322c87a5c4f3ba0a6e4ec88b352de5f175125cde9be62478310d96e7217581dcdf0e3757467d8896712cc394b83aa8faf82cc5deb8bb2acb30a1a5eeec06addc1d13cbb0102e6f0d597be18b04594a2be509b00c13bb3c36b242e59db0148360592bfa22339eb6e31ba1b0945faf6bba3e4852b7c68f157075294c9b106f846649eb7d11979b83236f7ebc11d81227c40f8fb8bb30cb30a7cb7ba0bb0396613e1707c88b0597b3e97d47dcdc15b9ab5d21164bda902f8ae0ee9458867d707d929662805c9e02b2493497477356cabb43de6278232b963619de48cccd5d207145fc7089cbb3326b53bc11ef597bf3457cdc9c127206bd0f1ccf9a1e6f74e4e6ba7837af936e4cbb2d29ef4a7d70c5e579b1dff366f44637dcdc179236836cd6cb9fe5b4f24514b83b29cbb0a0aba3d25c99174be1e60a90b82c7e38c612f7c50fd758e259e22ef8a1033727c28b05717333bc98134b1cf18d4c4db3f1f1462adc1c162ff6c6b273bc24727351e5e9694eac3900aa734016cbd7cef53160b987b7c4b5f921979b43f2625296dfd01c1db9d95782cbcb92b399b432be08899bfb41b68a94574f73737372a44e8e1f9372731fc846298f8df252e88e8d65989cbb135b868d71797d2cc5b258aee5cfb3b4b394273c8d8e6541903710dec8899bcb41d246f82214eeeeb80c8b62792be38ddeb83b069661452e2f6a2906b4bcdd79a3afa5ce891f23e0491b7e51d5f529d21c1c2f56b69c52bec8cf9296e48b2cb83c0296616337f7427162b49b9037aa61799239c5bee8cae5cd65d81acbcef005bb3c16a64d81377ab29cb4e791f1ac91f9223ccf5af0e5ba3927f5a9b2dc237479412cc5d43c69bb2fdab2b46d316d54de28eaee2658862959dec278a3aebb73601976747960a4ede78d887737c332aceafa044dda175f64c4b2c3af9bcbe3632976c5b25d52eaf91d054b9dd8053259d2aa7c119aa55ce26d4796b60eea332469197c910877f7b50c5be2eeca5886e9b094587c4e809b1ba1bcaaa5d8d2cd1999362f6f6465298de5012dc3ecb839175e2c89e5aca1bc11ca9b336d7d230296057b89e4eecc5886edb0c449bd913cae4e84e6805e6ce9ea789236c1176170732d481b0d6f34668943e287512c7171fcd0ecf286cd3149da0f5f64c3dd01b20cf36259f3e28d7ecbd1f83659de83d4c5f163519e6d43bb3df046453c6b41bc11edf222588a0970795264b548da105f84c3f23dbaeb611986e6e61ee80e6b1996c07202dfc76b6973e28dda2c69317cd10b4b89c0cf33ee2ecd324c81ab3ba0bc2ed26bd92924ceea8dec71731bbc580e4bdc193f6ce34983faa2304f9b066f04e66913f246c6cbf361298675755d7e0f1c2966c1dd9db10ce3e1ea70284ecf8b01af147627c4326ccdcd3d915f95776419f6c7d376f4464d77a7c032ecb79464cf5be0f23a98cd60da6c7823323777a43b2296616d96b43dbe688ae55c42de0479a33f9e3501bee8ce7256f045b6a70deb8d1e584ab0df5959f687afd8c5e9f162ba272dec8bb0b83928f908d5dd20a55079b665d8d6dd15976172b901e52d2071516f0484ab8b92b63a6f94c1b23b7c0359e274f821073777d61c0fe5c9b1ac6219a6c2e5155986e9b1bc7df1466ddc1d04cbb02437c7c2dc01ef1d0b6e4e8ddc8befd21227df48ece6cce46d8537aa737756966143cbb97b1f06ae6e48da8c78a30b96b802dec805cfda166fe45bce27a4d6f5695aeeb12d71be4722e0e6f25417c2ef49e2fa04d09c1cd266801c02f99eee989661b5e5147adf959bc36aee84e68878312f9625e3a5cfdd41b10c2361395bf8a2224b1c0d3fc460592f5eea96371fde088ce57abe5d96d3812f0265d91abe7d5c9e12e5c9912fc969e47d639e35b3371ae0ea72cd0d7931a7a72dce1b615d9e194bb11d2ecf85ea2a271bb2087c3bb83e4fd3267ca3e21207c50fb1584a34521af9d9c2ddb5598645dddd13cbb011ae8eceacf9f04673594be28d70cb19a7b9afe68a4889e569bccb2353decbb03496b51cdea8cbdad1179db194313c2d8fbbe3611976e6e6ca26edeb8b9eb83cde32cc6ba9bbe2c7949e35275fd4c6d3e6f3464a5717e5f75c70734fbcd81a9747652946e4f2e8a82e8d94515427a4bb3996614d3c6bc52fca5ada907823359727c5ac39f04570dc9c03cdd5e4ce77ef80b93a1aba1b5b8695f1a485f9a20d2eef6c296667b9067226f145035c9d5473755e8c8d25aecb1b49e2f2a09662b9e51ce07d192c71777ee8b594627ceecbdd395986012f6f03a953e2c78ceeae6c1976c6f52160293676793974b7c732cc8ae5bdf2e0a84f02cb3dbebb0b631966c3d5edf07bc6b83a22647f664d8e37225aca3d7ec7c0e50dd15c4e4e089a13e4f7082d6793ff05707508fc9e314b1c0b3fbce0b91be0dec9e2ea24a0dd0078a31ceecece32cc878bf3e3c57c4fc9f47389cb4b5a8601b2d4f5f163572e8e8f4933e08bc45cde204bb13096bde1ebc7dda9b00c9360295f9835d3ddd432ac78774b2cc34058e2ecfcb0eb39a39038a0474a62f9cf4fc6dd5159861179ee96dc3b5a2c77a0b9397e4f97ba2c7e6cf8ac11f146b5bbe35a861571771d2cc3ae5cde58735c94c780a469f9223597a782b455f1466f96d281f2988adb3517c48b6db1ac182f797757c732ec89ab73d35c1cd5053527bb232ec3babc8dbd91204b5c963772c45282f1b90896380c7ee8e5f2da2cc5a29693c9fb64b8b9e18b35707946cbb03eeeae8965189cabc3226f63bc911b97f7652936c0e549d5e74816826fd612b7e48d50b9bc3da47ce26d003c6b4f5fb4757d983417807c86e686686e8259c3e28d7acf8ef976dd5c11f5e955a7c0a4157dd104cf1a1b6f24b4c469fd1090eb3380bc45f1467796e542d2e27c910ed36c65bc119cab6b40e248f8a1d5b25fe5ed96616e5cded0326c8fab03fe1e03963f696e0039d37c51eff2c2ea0345b389bd510b1737c7f7207157dec8094f5a9d2f2ae2b913ba77a8968735d746793ac879b243b49b006fa4c312c7c40fa958eadef831284f9af18bac9638147e3866b911f909dd9559861570730a7437651926e4e2f07831dcc5d1f162f2ea16f83d6d2e0fb80c93e3b923ba77aa2e8f0b292778da96e5317477c132ccc972eef045484b1a205f64c5cdd920c7e2cbe4f2be588ad1b094473c4d6ca973e3c79cdc5d1fcbb02c960b226b415f24c6e5dd29cf8aa5d80a77a7c132acca73d6f922a5bb3b6219c6c15206f1343d4b1c016f64cacde9a62d8537b25ace15e43c7e51949b5b42d234f8a21196b8e023e9b0941c3ccd8de5ecfa2204966522e70fdde9b00c2bb3a479f92236cb99f545052cfbf4d5e0ea7ca86ecbef01e1ead0c879c2170d79de1478232096b513be48cf7238a46e8b1f233eb7aeae85fa08290fcf128459189a2393b721de488ca5ace3755f2e2fb80ca3e35940babb611926669acd8d372ae1b94bba77aeb83cb90c5363593f9a137a31a8bbbbb30c036229bd3e17c7b3e6f3455f5cdd10bfe7cedd45598609af6e76076619a6b4acd5f045624f5b046f74e5eee85886397177682cc37ab8b92c39c792e6c0175db0945b9f3363a9d3e3c71858b6d71c0ad326f4464b4b092c0f86a598d4f246c31b6d71754b24ad842f4ae1f2c0588ad5f0ec55753fb49bd51b1971791e2cc5b05cdd97df63c2722a795f08d36eb7378a61699be08d1cb839aae6a290b417bec8859b4b2a4f8da5581097d75b86c1f1acddbea88b9bc3bd1892e5f4424a354f53e3ea74d571d01c1572e2f9a2a8cb3b5a86f971733d481c9237e2642917785aaf4e88df93c6b2baf2bc6406cb4947de79d6947c911a9737b5142b2e7126fc30cc5267c78f2df0b41d7923a769b63c6fb4c2cdcd1733727160cd7d69ee4d774d9661ba9b13535e9da5180ad76781e59e21974744797a48dc163f4ce3ee9a9661b6cb6ba33aa3e2f228af681906b61c8ea4adf0452cdc1c0652a7f563062c3fe27be4eee22cc3dcdc5d1ecb302a2e2f681976bc390de6b4faa2dcd5f5240ef74664cbc1ca2bd39d20cb303096b4a42faae0ee3658863170735b1257c50fbfb83a23ea53407755cbb0a5a514e477645c5e1db24f66cdcd17edb1bc4a4a363ee775732574e7c1320ccbe521b114ebe0f2d2d06ebe379ae139cd282fb70c6be3e6ecf83db4cb73609982a431f922aa67ad8c370a2e2bb77537c6320c8727edf845515c1e6e19c6c69226e58bccdc1c95f202588609b29cf279625c5e926558d8dd792dc38eb83e42cd81316b6bbe488f8b93e3c55e3648d2e47cd10f4b1c953732c2d5513547c0a4c92f72e0e2c8e4f4e38ba85cde00cbb03d5737427360bfc767292ba82e86e6d0e8eecc32ec809bcbe2c5e0b8bc3cd3f6c21b8559d276f8221a9e35dd1779b15c4979679662075c1d92eed25886fdf0b49979232f4b31cb9a219fa23c2f268d8e2f82e2eec45886dd707516fc1e1696362c6f446579957f8fe74deb8de6b839301217c60fb396b83a3fe4e2e6d6982deb0e8c65580d37479b3b21f7ced4f2637756cb30a6cb2b96d7a43b1f966158cb5b9c371ae3ee5658864db094453f5358def0bc511e4b5c083fb4e0e68092c6e68b42b83ec5f2005886057277062cc3783767c28bc5b9ba24e561b1146be1ee9e9661b86557f8eaf19c327c11d1c50952dd95eedc588619b16c63892be3875c4f1bd41b25b0c425f046dadcdd9365d8cfdd01b10cbb603903785f9bbbd3b20c33b2c431bd113457a746ce1bbec868d924523ef9b9c69246e68b38b8392c2f766629a55477c4ef696339b7bec8809b13404e2c5fc4c9cd3521251a9fa3e0eaa6aa9b61da0678a326578701ed76c11b2571756fa68d8e373ae1e2787fd4bb4b6019e67bda5878a3ab254ee98d587079599662484b1c056f648e8b1b04e7c20fd72ca7025f44b75c8c735b5e4ccde525b114f3e0e6b2bc589a9bdba2bb289661255c1e96c4d1de68cfb258c86bf80e79cee0fbbcf1a43921755dfc587179567d7ef56140da3e7823a9e539c839417955a4ac92b8357ef8c6ddc9b00ca3baba35bfe7878b3ba3ddce4cdb086f44b52c97af1a4b9a9a2f02e1f26a288f4e7378ba7b631986c493c6c517d1b9bc9f65d81cd747494a2be414e38b9aae8f4ed656f82240ae2e80e6eef83db625ede78bbcdcdcad3924e64d8b37e2ba3b279661225cde195236f1b6a4270df7455a2e4f8ba5d80b3747c7ef91cfda075fd4c7f366c21b49b1dc8ffa0ca71cd7e7a7393d5202fd24e1eeba9661749e343cbe488a65e17829e4e63a68ceebc5c6ee0e8e6558124b4994b808dec8d7326b49e3e08b4878defa462f5c9e13f501ea6e8b65180cd727ca728f7089e3e1871d2c4740daae78230d96b8228f646769cbe28d3658be829443ec01ba3e4ecd5551f9933806de0809cbe9f545092c7583dc9f11d78769d67ee5392dc7a49ce1697adcdc0ae52d55f7abce86e62078ae1f0ef2a4593169517c519ccb5b41ce2024053727457d82d53d501e07dd65b10c73e1599be08be6b839dfec202f09b8b92ba46cf2b38ce70d88370a63592b5eda6eee861793e2ea88bf6782bbab6019c6e4eae45427f47ba296928ccf49707548345bd91bb9b03c886fd173be205b47777e2cc3b4b8bba565186db917d93424ae8d1f862dff52dd95d47df163c6e5cce08b7e6ece47d6802f07cb2e214ff39dcf9ad217adb19c5cca2babec35c7a4b928b336c81b21594a3a4f0b5bcee2fb8258e264f8a19be560c8b9f80e97528bcf11afcf94e51e217727c532cc84cbd3a03a2df2b6c71bedb1c43df04694584a5e775c966149574746aab12c4fde5e78a32a9eb5335f84c7d2c6c4a4657dd1123717f67b869635b2371260494bf3451fdc9d17cbb019eeeecd328ccab236c317853d694d5f747577312cc3a62ecf0039bfcaeb2aaf84e63290930ded56e48d6c98660be48d58b839a41753e0e6ac68ce83eeee5886497177532cc34eb83940aa83529f2bcb3d444b9b9a378ae0eaa6d06ebb3792e1ea8cfc9e2b4be9c7ef26b83c1096620e2c2515d3c6e68d24b8bb139661102c65d6e7cab8ba5a771c2cc3ac2c65d8efca58de5278a329ee4e8e65181377b766190665592a666dca17b9f1acf58bb658ce21ba1b6119c6e5e692e80ece324ccbdd0db10c63737513c85a0c5f34c8cdf55e6cc992e6c11795f0bcfdf1467aae2e4e730bbc5898cb3ba03e352953785a1d57e7abcf52776b2cc384b8bb2bcb30a2bb93601946c0cdb92169207c91094bdc073fac608973e287562c6b5b6f44e4f27ccbb0386e4e494a027e1af12c5671764c5ad7173571734bdd69b10c7b6149f3e38ba8b8b83d723ebdafcee54169ce4c7da02cf704ef2e8565d897cbfba13c326407f8aeb939624de88bc8b8bb3f96615d5c9d93944f3fc9b83aa6df63c1529af1b9099eb7b2371ae4f288d595f93d375c5e93e4e3eeae5886b170736ccab361291666da6d4a7519fc1e229672856983f2465096b8306f848fe584e38b14b8bcdb328cebee5a588655b0ac5d7dd1f1e682e57d491dd78f2170717bbcd8eea99be2c7962cdb545d02bf87cc73c2f9a2a0a7edea8db85c1e13e5112dc3f8b83c34b306e68be89866b3f346223c6b4dbc91eef2a2688e8fdfc35bee7217a88aa53cfab9c2d3767ba3259707c852cc8bcb33b314336039b54c41bec8cad3f64377142cc3965c1e06b236f445652c6f6bbc911c3767417d84727af922f984e3e6dea84e00491bfa220996381f7e38c3dda1598621b09c64cab360daa4bc5194e57348dc9a1f6a79d6bc7cd1d7b306e78bfcb83928e55db0f3b9772a78dea678233596d3cd17012fafcbb03bcbdb066fc4c4725af045b7bb835a86e59632cacfac8bab434e2c9a0ba1b9392f26c6dd652dc386b83a2bd93c266d892f1ae2def4c81bd81bf17179c65923e18bf2dc5c1fefc1d3bc9613cd17f95ce9fbe964a9fbe3fe72588e9bb6256f54c052c7c78f59b93a0a7e4f0a5727ec4e8465d896cb33a2ba22cae322a5d24f249eb52b5ff4c6e599206d4abcd19aabbb39069af3521f05967b7e4b29e769812c57539d0e9266e68b3ab83b37cb302957b7427315481d123f467477362cc3c22c69357c510ccb5b176fc4c6d56529efb70cfb5ace3dbe68ca12d7c50fef2c7fa1bb369661739655e325f0fa34a9ae88a441f0456d96e3f962b9ba0bba236119d665a93be3c79e96381b7ef8e6ea2a90742cfbd47ad638f822b0a59c766be08d88b8393d7e8feee66a90ba317e8c694913faa22f4fda1b5fe4c47235e6ed8037fa61793be28dccb839273993bccfcd1267f446725757a5bc38662dcf1b0130ed467c231e96dd2aef0ff9d777ca728c25cef646637717c1324c80cba341d6ea78a3a3a52d80377a7ad2c6be288be56ebeb6a72d84379aba3e02543740797bba8b5a86012d6b4bbc51eeea6cbf87b8d455f1634cee0e8b65580b5727cb5b622906c2cded3127095f24e4e6fea8ee8759037ba3a4a514f2b384a7cdf846075c9e04b2bf6fd5f246c21b45f1bc55f1466b2c6968bec883a5d4227747f74e1577c7c5322c86a5ee8e1fa37271637237afd08ae53c7adf044bdc153f0c6349a3f345405cde93c439bd11ac9be3a0b935f5712269297cd10ad7878a9c8cafd35287c78f55b93a26bf278269b760770d2cc38c9638218f74c6e5592dc59896273169665fa4c5ddbdb00cb3603917f822055c1e9165181e4bc9a5bc2d5306f0f385a504e1696f2ca599a771b1a405f0456096b284a7cd717344dd795986057073449a53e1c5e82c6956be086b39b9907b6eae4a79b46558d67229cddd91538b691bf3465dee6ecc320ceaeadafc9e209613902f62e0f2c2a82e694edbf3ca987663e08d8658160dda6dcb1bc5b93a22f3c6c61bd17177c665d85c968ea40df04552d70701b916ddd1b00cb3babb1a9661577757671986c25217c68f2d5d5c1f2fd6bb3932c585c999c36c10e515217144fc3089cb535a869ddd1c0c12b7c10fbf2c75767e0c6a3973ef53e559abe28d7c9638ac1f62b93c31268deb8b98b8baa2df43e5f28e58ceeeb62cc38edc1dd8320c8beb43449ec6b4e5f046659638aa37a2c7e53d519e5979212cc5b22c0be77b5c4e66d72bace2eeba2cc30058cea2f73db02c1b92f6e48bc82ca7992fe22ddb44822d77bb4be46929bd3c0deae682aa4341e2a0bc91379747426dcf1b2559e28c6fe4cc720edfc7c352eef0b43ea6d9d628cf8b9480fc6e86e5edcd1b2db1bc825f6c8913e187535727835ca83a30e5dd501d50791f34c7c68b0d727950546782b449f146182c0b86dc83afeeeec2966162dc9d05cbb0e1ddd1598669707520d4e7487347e56d2dc5e2dc9d9865d8d3b386e78d8c5cdd91ee58588651b0a429f9a2a9e7ad82379a73736acc1a1a6f245c4e2b9a9b7ab1109652809f746e2e49736d5e6c86e53f7c892e4fcc52ec6939d554074379332cc5aa96b4a02f8260795be28dd0b83aa5dff3653935901d41dece7823382e4fc832ec8eab2b41e28ebc91a465e59407c1522cc9e50121716f7e08c1d5599138377e28b69479fc6e81bbbb5a86352d37a33e5d8add59ce285fa4b79c3f2f8ce52dc81af962dddc0ed5e5501d1729c93c6d8bbbfb6019d6c0f579b2dcf3b3ac15d9275eca9babe3f7cc65ed86ee105886f5aecf90a5189ee534e08bd8aeae89668be38d4c58da7e6f34bc3b3dcb302e9634375f04e7ea58983528de687771baeeac5886ad7073c7fac8a5981ad36e4c6fd4c3b37b5e2ab9bb109661599e3431bee888651df8a6b1c435f0465058e260f8219ba7ed8b370261397defd3b5ac19f92234ae8f91eee62cc3de5c9e20723ef922bcbb436219d6c1f28ba52ecf8f61b9b904e61ecf523517474a0d9ed6b5c4bdf1c33dcf39f545b89b4b535e0bf221ff194ba9c6e7c05c9e93ee7658869979dec2de0890e5edf846785cded552ace9ead834f7236f58bcd1d6b236f54575dc9c1ff5913800de48004bc9e6696b5cddb03a0fe4ad8e37c27379542cc552584a2e3eb7b49472d6b67c511ccf1b9c377ae2e67068ce87f2909661792ecf8d69c3e08d2878d6dc78a3229707267138fc5083cbd32a0f073915cdc92071677e68653987dea7658903f346e858ce417541fc1e3b97e7a6b923e404fba20596b5a42fb2b3bc35f146769672ea6914dc1d966558d172e6f145522e8fc932cc6c496be18b5a580ec8d7cbf216c71b1d6f6e4c797196626e2e4fcd52ecc9d599a1dda064199797816cf18bc1d5d5206f6ebc511dd767376f1dbc5113cf9a9c37b2dddc557314d4072869277c910acbbbaa1b529d0a9206a73b3b9661505c1f2bcb3d437787c732acceb24dc81a186f04bcb83f5eece73936ed36e68d8eb8393c7e0feee68cb2017c2fb8391abacbb30cdbe2f2ec284fb70ceb5ace9b046f2467a91bbb40a5e59ce38b9edcddd6322ccee585598a39dd9c19e561a9ee85e65278b139cb2a505c6fdac4e82e87651899bb235b8699717308bc1805cbe99427711dfc7082bba3621996c2cd3d495d193fd6747353bacb6019b6c052767dee8dababeaae8065d86eb90252c2515c597962dd81b00c73e0594bf345792c670fd539f93d66ae8e81e6769376e78b94b8392dca1bb20cc373797664adea8bec58def278233d96362b6fb4c072caf92224cb27a86eccefa9e1e2cc5e8ce8ee605886495dde94a59890256ecb1b416229bf4819e76980dcdc19cddd5d12cb300f6e4e49776a2cc382b8b9aef26acb30ad250dec8beadc9d09cbb0072e0ecf8bdd6e4eaaba27e591491cd41b49b36c527d00682e8d4a225307c58f2959bec4178065ad852f0a64797be28dd258ca1f9e96e74993faa2375c2ce50d4fe3e3e698282f0d49ebe18b6ab8b8317f4480656dc8178d717905d467c9ac55f922afabe3e1f790f1ac21f0456cdc9c13d5157f0f05371743776a96614f96b38e2f82b2ace0ea68d346f4464c4f1a1addfdb00c4bf39c76be08eae68acad3b21433b2945e7c0e8265874859a5ba307327bc77a4ae0f4df6285b3425ad392d2f76c1d535a98f6d29b6757759966148973787a4ddf045324cb371bd110937d7173b5afec45780655390b423be2888258ee88dd09613812f82bbbaa5f2e02cc5b4dc9c0192c6e58bd65c1e1e1267c40f9fb83a17ba1b641916c6f366c31b71717963d06e50de2888a56ce169c79b3362d602f8a2349ef3033993deb7e6f27c96616fdcdcafba08ca8b41eae8f8b129cb09c617312dc15c1f24cdedf93d455767fc3d155c5d50caa49f2e5c9e926518d9dd512dc38c4b5b056f94e549cbe28be6dc5c97f2a6e86e8165d890ab3b9237f14d727766cb3034ae6e8369e3e18dcc3c69555fa4c1d296a4ba027ecfd5b25264f5c87a20e5084f8be379a3bd110c57a7a4b9307233dfde1d99655893254d902fbae2e6a4c8a9467363147794c79936dd1b3159e2e6fcb089bbc3611936662973781a983c2769351bad66ebb77fcbdaa4dd9aacd974b75ae7afe643b3e572d36ab85c8d76abd5e4b4f5de4dda6c95365b5b9a8da66b0f679bf6cbe9707dd22a85f49a9338db9c462bce77ae34dbc40d55cefeb72e77cb733d5d6e0af1641f671b48b3dd78b6200e97c3e16af34a21be9f3ebb7dba658b642b938c7445b7213b399fb77d8f64daf3a6f9744a9f813cde349fe5342313f76fda88826841bd7f7a4123dda3690befa55d7b97fbddae15790e000ef76edb4fcedebc690fef4382949cbb39dc049a3770c8bb3f220780689cd2b5d6a48cc05d0e8155e71e82659f2f038dfc84dc008af4cfc26b07213101c88a1f80fb41773277e83990088d9f013fe57ff9e30eb3edefffef5328beb5e574fe471a8f69eb8e9a84e5bf46afec5315bee09f1f6d93ad956d2f413849f1bc4c80f6e5ff1e2f89e251e5b68dcb71210d8efbe01ccf9d911b5776ec9d0ebc3ebae3b850145edf96bcfa25c0b1c10b8ed792a8a373801d3fdac36b9c1dc7e711afe3f470dcc7e4f52d81e3446478f52be8f8dce2359d298efdb21dbff171ec9d138e4fa2d7c32570d407e7f82d8ad772ec384ea789e34459c7fa1cf06a99a6e372f0388e1b72bc889edcb73f8ed77a385ec3e1d8afa4e3b72ac727d5f1b122a197881d171ae2b5d0145e13b171bcb74099874cbe1e72ba958c1f7dee8ecbb9e3b86deb38511ec76b45782de7ebd82fddf11980d793ccf19a17c77f2c786de33ade134383e715af878ebd36e7385119c7de49c1eb9b1eaf2753afcd707c4ee1d189c17122408ecbe9e3d83b2078550887dc38398ee3ba8e0b7de0b5edcbf1394edcb6c571fc064cba47a54cbf908e5503ca71b3a4e347c7f60be8788f0c0d2e62c66ba1328e0b01ca5d244aeea9e4354ec971223b5e9d6f8e9b31396e131e5f82e7786d8b2105f6384e07af8bfc91db4687d71378fce6e4f5901d6d1d7ce0d9d6751c27e4786f0c0dbe2de0f51c733c97e5f8b43a3ec40137911dc76b4a1cc7ddf1ea1d128e13a541c674b638ee13e1786d08afce0c8ee3908ecfdfb14152dcc619393e87787d74e7582207e41ec2d37e09394e14c8f1d9c4eb593b6ed362649e01b76f51c77d4e5e0fd5d16d588aae11e1b5ee8c5cbf861cab4694638734b9f5cb85e342681c8fc3c1f1f9d489ee1cc7bd71ecef835ca706c796613a3eb1788dcb3af62b786ccfcceb213ebc269ae3b8d9d1f1610eb889343936782537ce8ce345ce1c9f58c771625ecbc1731c9783d7446b1c373372dc26c1f1c9c4eb5b99d73d06caf4278fdcb73d8ecf2f5e137571ac8f01afa71132f62123b710145ec573c7ab778e383ee4c6f139011ef591e0d5a10472e3e8f02a9016b789bc8eb5a2875ebbe1f854e0786d8a9fca613c8e1b3a4e1be1389118c7026591eb57edf80d01af89e8383e2538964c9e3eb978558d27c7ced1c7b175ec81e7233ebc9ebae3be215e2db3741cd7c6f1394bbcb6e1395e24cd713a4e1c1fdaf2ba26e7f8a41dfbf53b3e23f06a1d7d1c1b34e036911ec7735772f7cad0a05fbde34b02398e333b3e94d587d8f0ea8f8adb34128edf9e783da31c27da3a3ec51cfb75e4d82fdaf189e6d81fa6dc3fa7db425d788d0b3b3ea5f258e88b63ef5cb1b16dcbb13aa85ecb42c84b04396e0b3a4e478ae31308cf73c8ab73ec71ec1792e3351b8edffc387eebe3f8ec1d8b47cbab40799c28cff11a12704cf475dc56c7b17790382ec796bb2605709cd7719c1f45c6711d1f1250c7d3e7f851571f0ed0b51c3e8ecf01bcaa4b20779c0c8e0bd5f15ae80aaf6d13787d24c7715b17af89cec8635bf038ae87e333cb715c1dc7898ec785ce386e1372fc96e7b890378edfa81c8f93e7d89fa6db738ad7b825c78ff4e83381e34466c7ca513cde9bc2cd4b06393e548267a12d8e0b65e1f5b4208f85cc384e47905cefa461a37848392e878ee3f3c86b222f8ee3dc383e17f03a8e0fc7de41e138d117c7715fbc2e72c1711c0fc77b4f6126e23a760e3e8ee36e388edbe3b8cd81a37164c78fec68bf78c7713e1cabb3e3788d8ed74461752cd4c4f12258c783151cabf31dc79571fcc88f637d568edbe6384e04c6712137c727ef781c36c727ee384eeb788d86e3b51f8ecf24649cdb725c880cafde09c1eb9a133e1f6d1d5f12763c8e9be3b51ce0b86605d0435dc7977c909bd785cb36378ecfd992eb17d1b15fb8e3b822c7fa241d3743e2b519015ecf24af89fa38f62b771ca7c7f11a10c7a7d1eb381b1c9fa345ee19e6f892b2e3b81d8eefaee426bae3b88f88578740e5aaf3f12a1e548e0b5990eb9d30ed9d0fbc263af37a068ff589e035aee8f8501b5e0d16701b17c0f15bf1d83b1c78ad33e0d696798d0b3a8e4bc3ebda1541138d717c77466e3a4f789d333bd60780e3f3eab82dcd9167015e4f068e0b2d712c1940faac208f87ee1c1fbaa30b81716cf0ea380e0faf89c4bc266ae3d832c5e3b83b8e0b71703c0e06c77182783db51c7b070d1b0b49e135111a5bfdf2393e8bbcbe3539d6e849ee257a8edfc08ecf8f4f3078ec33e158df08c7e3bc39be248fe345966edbd838d657e538911ac7de31e1f892e3f1a33ebcf641b1512208e4be29707cc91cc78b18917bfa8ebd83c5c64bce8e9d6e8e9b1d393ea9783d01f0ba57a54cbf8c8edbf438b667c4b1c130c785841c9f4f8edb808e1371e1f53ce058e0c77167c7e3601db70d297a76f12a1128b76d5fc7de29e1583ca21c9f3d3e3447b7091d8dc3c1eb9b14af6f508e0f69798d233a56f774fcd6741c1781d7b729c77306dcc6e9217a0ae035ee8c63cb188f2f313b8e83e3d82fe1711b18af6fc3e333776cef88e39300af6d0f1c5f22c7711c19c797f471bc16c3f1b9c46bde19b9fa2039de830ab31006c783141c0b34e65e62c7b14133c787cca9e3293c36a8e6f812408e4f22af89fc38f66b1e3f52a3cf226c3c973a0ec9b15f3d5ed3c1eba3ace33e10e03c9b5aa016b902d7dc9e4380d74bf4382e24c6f1da11c706d91cbf19e0553c595ee300393ecf1c1f82c36bdf06705e42c7b15f3fc7795e2498888f63e5603af6abe8f8111ec7deb16263a2378edff4388edbe3354e80e3f3e7f88de87591e36ddc1a5effa0724f23af7d1dc0793a70fcc8eb589f008e154ab915b8945b2883637d53bcae7de1756d095dbf3e5e44cd719c045ec5a386d7424f1c17a2c2ab444f6ed776386efb395e0be3a764f4741c98d74bf6385ea322b81c3f8ed7e2783d91c8d876c771a2308ef3acb86da6747c5290c7b7038e1556707c09d8b1c227b96dbfe33e0de01c04731ca786d7436f783d1487d747605ee30638162b8f6da2b1637547af6b3c1cdf19702b9e35bc16aae2b810616e1c1f5efdf21df72920f754e2b59c3c8ef55139aea48f63efa86163394a72f535e0d5af24c76b35788debc3eb9a105e0fd1d10625906b50ccb15f458e0f95be8ee3c7f1398f1572912b1e51c77d0cc82d448ddcb62b442fe1e33811d8f1e9c56b1b1f5eed9d795d844e6e395ee44a1425770d06af89b6384e2be158221b722f213b4e34481d13e139f60b78bc16c5af782c70fca88d3ea11cfb15c0711c1bc78ba0398efb3a8edb3a3e2476dc56c1f159e678af8e9b0a4dc96df33a4e64c6b13e295ec7e9e038d11fc771478ecf51e2d55f9adc435e5e2ff93a7e83f27ac91fc70a2120d73b2a785dab139c4e16c785bcf07acae3383b5e2fb9e3b84d8ee336088edbac0c8d8be358399a8efbc0f0ea973c2e14c6f11a14bece91c471db1ec7de31e2b89c3d8e130982e7e9e45839968ee38e5e172973ec4f4aaebe058e1369717c2221635f09c7ded9c06b212e8efbd4c06970cc71b301bc3e5aa3df9ebc9e42785e3276dc0ce978ad09deb8b1e372ea383648e6b88f0338ebacb8ad24cff1226b8ed78c386e8be0389102bc5e92e7f88cf2e39c16af89ea386ef3e2f524e2f51c7a6dcb82f4bc1d1f52e3788d89ddd3cc719a08c7a710af67d571df08b987c28e9b09e0f5cd782c961fb612f9ca3d1f384e040a8e6b3e1c2bc7f0d83ac0bc7a87cef1381a1c17b2e2d85f9ddc42631cf7b9921b17c8715b03461f711d7b078ed733c86b22398e1bc147ee233c5e13c571ecd7d0719cd1b1424bb9def1c0abbd32af6f4cc796211e3f72e3382e8fe3435fc7cd9478154f1a5ec5b3e5f59472ec1d31dd7741084f048e1fe5d185b4f0ea0f1eb706d71c9f4e7d891fc7a79563ef8c69ef9c99e3da13bd89dc382e6429378e806383658e13751d27c2e378ce8a5bc9fcd196191ec711397ea4757c1ae0b51cb0e343691c1b4c735c8889e334138e4f08f07c2bc0eb5f935ce5201eab6be2f51097d74afc381648c6ad464e722fa9e3f8b41dc7e1398e3b3a4e078be336e0711c00c7faae784d6789e3476c74b3245efdda1d9733c771dc20c7717f1c1772e2f8123c8ee7b81cef35c94db4c7b14151e4b6b571dcc640917e0d70bc47456ea136c7e231e5b81900c789cabc9693e7d8afa3e3b83c43db28382ef4e6586117b76d448c96733cee6333c2421b1cc7a1719c48eb78ad0ae172e4384e04c771223dc7cd9678f5ce056c7c73729c7725f72c7a2d478f637d58bc8ed3e6b82d0faf6b5c102951546eb3008ed782f07a089063e597d735198e1fa5715c77253711191e4f28af89f674bd64cff159e528a7fc96a3d19ea58da32d6952d6e6ecade16853ce5a7dee9d269f36dd37dc36daac5d3b276b38dbb36dae3c9b94b64ac9bbd3b6ed9f0db7cd469bcbddfdf673b521db7ebe1bb8bcd6733bb13dbf1df4bc063cf7ecadee213ed39e36db725d0fc713ca3b77b473efd675dff2df3edd9019bc366ddbc279072f62e44e93b95b2db73c4793d3aed59826d0bd567b031c279fcb65bbbcbe27eddb37da42063e6568daf323cb9b1c341f904def71d43f03f9dca5acfb041aad36c8a43b030bc1043868837505e60d9b0cc6ac61d2c484b844cc1a29314b32c0c200812326f83225f8f2c34539c08ac1f8e8ea15b5e200df8c6042301f38c20036d34b9728264cf1e083130a58f3ad82c9658bceabc90ab601824de4fcc1262b50a971126c32e47de8e11d4c58808405d8a819f395275268d08c392aa07804c0111a2b3368accc30059f40384010404662258838bce082971d4820e8c4c506d684a7e8064c9326c126139ade049bc40870d4e448c95193246fc5668c1a0caaa4acd4acb9c2c2bab252c354e7611b2c7336fc987cea1af8313d9726f5442fd36e62bc31cbfd51ba5a23dc1f943fd3e1d694f822d5edc5f1665c96406e6e1ef9d449f9b13eee373c1102b726c71741b893f9a9672b893b8b78252c57d8407f3828f0829b25c50d2a5e3d4cee54e093e858e60078a3d70d6eb95b74ee8fd0d5c2ba83f03ede052ae0826df0dc313d199825cf8f2f2b5ee01c576b786b665fe4e102a5dcac11aeafc99bed7069569ee8e4fef544515ce0929b55e6fab6bc19143788c2ddfabac2dde59a5afa706fb6c1054e307da27c59d5fdd15d2d304bdd0f4f0674a706af84f4ac71f9a2f1f60279b332f727c9d5eae0f6ae7833e30d1691bbe1935170852a5cae3aee620a64bc60173c75177452f14a524b1ff96505dc1e1c6fa6e506195d3d4596401adc3cb4fb174fa4c3b41b1a6fdc72838c5c3d451758c704dae2e639f2f479fa320bee44e195867712f049683c7338fcd8bc414b57cff0fe60d099e69584dcda1d5f2ce1fee4e5133768aa36da1785b81384574272270daf64c0f326f646aae54ecd9365706b487c51ea4ee789b2dccf782221ee8f857b13e1068ddc2d0c6ef082bb25c6f3f6c51b1db8b93df529f066412c753d3c99f0b99bf26456d7f7c19bc9717d5dfc59917b194f04c4a50df1c41d9639207ecc763bc11fb1708358770b8ca7a4f349322c793e4fd6c5fd61f0675b17c8c0cd42e1e9c3f565365c9b972fdeb9c03a574b3e7136bc5188e50ece9381708152fc7c70b5b22e2de895ae7876d2a63cd1802b1ce07285706900bc92191788e88261b94130d9401e49cc15d69adbe2c72058ea4678b2dbcd0dd25e1f6f5675851c5c2eada52de88b4edc1f1dae961fcb20decdf3c2158e5d3021b71d2ed083e6ead487e7cf1458e22a78630a1768800b16e602d190bc27be4cf8dc59f1643a2c7dba37e3605a8f832f0be4d26a78a20a4f1fa22f7be0fe545dad3af727ced51a5b0e26bbe48f9a2e90920b36e6fec2e42ecf9341717fecb85b4d9ebe1dde2cec39adfc006c6eae848fb3c39247f5647cdcdc1b3fc6e61687474a72835f346875b7ac58eae078b2a50b0ce06655dddffc33092e7086fe68ddad01eecf587fb05c2d216e2f8b3763ba3e2b6f96c49d067c521c57e8bb5c5777ae2742e2faec74279ee80b929afbcbf26773ae0df7c522aeafe9cd6e58f2949e2c2ba985a70feecb1c78e6b6bcb18f2bf4e172852d71636f24e3d9a37d599c2b8ce37e8979e6aebc918f1b14e06e79707f7eae56980b04e1668df104b2e1e601ba40005c300aee0ff767162c79404f16c60da670b7e4b8402aaed6bcbe2ffe8ce8fea8feac8aebcbe3cf9edca0e1d5a3e40abfeed7981b8ca03f4eae560df7a7c09fddf094639f94c4a59df0c40e6e0dcf174d58d676f82204b7443c12d433e7e48d785c202c170c869b83a342e3e54ae1d64ef862d4f5bdf0667aee739ec8812b04e272ed59fa8878b3b1eb7be3cf986e5078b7c6dc9fd29f9970a7904fa262f997020972f34cb93e306fb6c5dd89b415bfb8c5a5e15e49893ba17cd2f102e1b85a4a2ed0cbcd9ae1fe0c71b5c4963733dea8e5ce235e69cb1228839b678e89b93f386e56112328b813e893a6b847f144142c75413c59d0f5894d9cd01bd1fcd373e1cbf6dce0bc5b105c1f056f96c59d735ec9811b1cbb5c5ac636b84154774c905b3be28b164cc34179e3073758c2dd7ae3d28478a20ef7c7c6cd02babf396e96d113a88a9b076959a33f12b2042ae1e6d15dda0d4f64e106dfdcad346e70ea6ed559ea7c7e6c88ebd3f2664fdca01af505f267579e3e517c590a57c8c705cb5dda044fcc72756d70ccddd2621ace8f3782b1d401f26409dcf9e595faec05bfcc882bfc5dae3057c8d4e9c42b7d59cadb23adb9c0b1abd5c0058621773d3c590b17d8c5d5f23d7de8f8321d2e50940b56c2fdc9b9371f2e90d4053362c97be1cbe4d3a7802f93baf38f57cae10ac9b85f5bae5084cbe5f504f2e2e6497aca253e8986eb7bf3666e2c81ca6e1e2b4b1d9e2783bab38f57aa210e0f57b874b954b8c1372ed7d2054671b3ceaed0eb7e594da31dbf18bcd3f0444d9e35e317935c5aee959658ee8a9e8ccb05a6b959515c6194cba5c30d6e5dae25cf9a9a2f1e7069699e68757d77fc590217c8e88265b9ba25a57df044365708c7fd0af3d441f063815c203117ac893bc95e4988ebf3e0cdbeee5cf34a421788ea8221717f402850d5054be2daba7c318d270ef8c63257eb96ca1f69507ce0fec8b859b7a74fd697d5f0ec31f9b227a6cd057e00deada1f04529b707c69b1970e5f093aa9e3e475f06c192577bb22cee4f0d574b8fe7aece93e5f0f5e4fe28f833289e39256f8ce329b33e0988fb0e4ff4e479c50d82b95b515c6113f7ab80dbb34742334daaf924102e108a9b653616c0051272c10ab834229ec8c3a58d796205f72b9ea86ae9f39735b9422497cb833b993e898dfb3be366e9eef4e195a42c774c9e6c82a7ad8937ee9e4067dc3c489e328b4fcae1feb46ed6cffdc973b7a45c1b065fd4b3dc253dd903cb9a155fc4bac106eed610b742fe88f694431e6983676e8237eab93e2ffe6ce8fe8afcd99a0b8caa108cfbd5c0057272c144b8410cee161af787a7c21a2e571fcfda035f5cba414357cf90fb13fa3335f70787fe4cf8333d96fb5121d5e5a2e202072970844e395ee9843bc5bc92effa5a78333faeb08bfb6565d9dbf3666aae8d832f0e728567dc2f2f5788e5721171fbc3232d5d20db054bba4021378bcbfd21e16a75dd9f02244e8337d6707fc25c2d2bee7cfa2437ee64f249772e0deb8955f707c19f2d314d6af0497096b8ad375271816b2aa45d2e0996bedf0c83eb2be3cf8e1c4db93421af84c515b671bfa62ed0980be6c49d5bbc92982bd4e17201728137dc2c39ee0f4ff27af8b2dc055a72c1c8dc1f32ee96d1f561f0666ddc20945ee7892cb8b4109ee8e6fe8071b78adcae7924797f7caed6d453e2f14972eef4e3956cb840145cb0381798c3cda2e34e205e69811b7ca13e0ede0c8e0bc49a3e5f5f96c30deae93cf24960387175671a54c194669fa4c4b59df9229efb83f367765cda0e4f9ce106a5eed61437a787e469f064835c9f993743e302c1b85a3fcf5ad117912e1090ab15e5da2af8621b5748c7fd32736943afd4c5fd7140eec83c199b3b5d78a5a6250e8437e2707f51dc1b12177866caaf4f22e2592bf2c5a3310aae30cbe59273831cdcad35ae8fca9b19b1bca83f69485dd79315af8e497b4fbc9990fb3bf36764dc1f0df7b6c2052671b306b9be3dfe2cca3387e68d611768c7d532de89e493c858da96bec8c5345a1e5f142e7164bcf189ab13d2d978a2249692ca27ad79da7c78a3edfac6fe6ccb7237c493c170817224d01b370f933be7782514c6ae6e8d7824049e410d5c3d51cb85a42dc917adb835b02fb2b0ac91f145379726c1131db8bf327f06c6159a70b9be2e2d85277e707376c8dd204f36c57deb898e58f2764fc6c5fde9e26e0d59eeec3cd91037d8c5e512ba73cf2b017169be578ae2da6dea8d4d17a8a7c01d6e961dcbddefc9ae5c600b378beb5ec4135db96673e18df2ce215e89811bc4e4ea19e00a8bb85fc31b94e3723d2d77333c190ad77052bc3189fb13c4cc5579e31e3747467d74fe4c5ea9f449545718c4e51a7bdeb878630357a8c0e5b2e102b3b85ab94b13f3440a9e12894f9ae1e913c0977db9d7f14454f48cf7278ebbb5f4f4c1e0cbdadc99c52b5ddd09c82be97064c0f55df0666bdcdf16f756e706e1b85c4c57123fc96a1a0dec8b40cf9a055f74ba4037ae9600cb5d92278be04e3aaf94e5feaab83727aecf8e3f3be0d6823f8ae1d6ec91cedc1f12f736c41208849be73686c717d40d32ddad14ae3078b9c82c75643cd9004b1e155f26e4fe80b95a4fdce00477cb89658ee98d742cd7d35afd910d57a8bb5c52cb9c113f26e40a43b85c5df72790bb5565f91e12e8ece6b972695d9e586589b3e08d2a5c9b045fdcbac0125a03e48b32dc201d97abc97d8d279a6324e1d280af34c51348859b0778696e9e58669a0d8a37f296bb3e9eec8967cfc8972d7137e17f64b7487f94746944afe4c505761508ec8fcebd01717f4c7fc6c2d5152ba4529a0c4f3c61c9637a32ae2bdce172057283421502d01f20ae962017488e9ba7787b68bc59942b3cd25f9e9bc5e4fe88fcd905f72d9e48ccb2a6c61735b83f69aed61757e8c5fdba727f0cb85a30dc1f284aa3f244049e3817def8c3fdf9fc99d515b6b95c685c6116f76b8127eec81b2fb8c2a2cbd5e60a17b85c3e3c7d7a5fa6e5fed471b7a02eb08cab35e44e305ee9ccfd39bb5b5c2ed08cab45e4ce299f94c7d52d15c881edd6c61bbd64a5b9c2aefb45757f4fdc9b115787a63f393447266fabc42349b9c1e0dd12b3dca579320c6e50d3d5535cf6eabcd9f006b5b85c42ee0fd2d5727381516e169cfbf3c7dd5ae0060f28900017ac6a593c1e89ea0295dc2c324b1fda97193056c4053e31cbc6234db0f4d9de4c83276fcd9301727d30bcd91f4b1e9827d3e306fba8b08f0bb6bb33eb9536b83f650a64e1666ddd1f2fee1691bb184fd4c3ed118f94c0a59979a2d4d3a7ebcb6eb8404f2ed808d717e6cdc6b8bf10feac8efb63c6dcc7f5c0053a6910d2d5437481626e56124846ee4f803f0be1fea8b95a61dca0577fc2a830e8729db9be3a7f065cea9278b2a125cff7645e2c7127bc918767ceea8d813c755d7e0c901b44e3720170835d9d58af14747f4edc1b9d250e8c373671691d3c51cd157a70b9b82e904877e3899818fbe1fe80dd2d283748aab60cbef8c772b7c29391b094097c129a5b33e18b51eea47a25dd05e2e9ef867b73e1dec213199be7e973e4cb22b8538c57c2ba3d40de8ccc15a270b9e6b8b3804f82e3fe747f3675e9dc9f2e578bce059a5dad2df7e78abbf5f30c52e0ea51e0feb4fc199de70dcc1b992ef08bab05bcc232ee1797e70dcd1ba19e4058dc3c469eb39fb4c40d8a5d2e076ec1fc110cf7a778b54cb8d3c8277d717d70fc59d373577cb20aee8f09a519bd12181778c4bc91bdb16ab9fb79322c57d8cb05c1f5a1f16701dc9f26fa43a33e02de8c8567b578242eb786c7174fb84108ee9612f7678fbbe564894be18d3ddce09abb45c6f5ad7933adfbf3ba5944a01853e1d2c83c11ccfd91e36e355d2093fea4feacce7217c3939d706b297c71ca2d993fdae1fedafc59d6a501f1441cee8fd7dd22de9e176fd6e469dbe18db5fb8be1de50b842022e179c670de98b46ae047aa437372878f5fc96b841de28c65396f1493d2c6d4cbe98c5059e217179bcb18b2bdce382e12e10950bb6c2fd59fdd9155778c2e59263c9dbfa32009eb820de58c4a5117ff87481f6b8790eb8c111ee961b4b1e1a5f86746d565ffcba3f55dcaddf054e71b5dadb0b37b8c5e51ab2c47dbd318be7650da6b95b617cabf5be48747d4ede4c880bcce066697185205cae36aeadcd17fd58da92be48c5f541793322ae108f0b565bfa826f16c29d5cbcd2984b3bf3c4a94b73e189235ce000b5f5be88c4fd9d15e8810b96c33227c58f3570854adcafa75b05fe08cc2d078f74bbbfac02c174219e88ca0d0e71b7c6aeb087cb35c8f366e58dc4fba3408156378bce57941b3c73b7bcb8bf1aee8d85fb9bfa332a6e10cbdd1262e92be2cdc896b9da1bed5c5bee8b728c60ee0f1c77cb787f5c1327df78756717af44e602ff006a694eacbf25eead882bbc72b986b83f155c2d27ee0ce49576b83f15ee2d8425af84272bbb3f51154671bf12b840276e16d9b35a8f24c10d8ed16012fdce1315b1d41d9fece90291b9604fdc62f9a30fee0f990271b960364cd6e50617b85b3cdc89c12b15dd200d776b8febd3e0cdbc9eb2ce27dd70834bee169c2bccba5f145ca19bcb65e7faa4bc999c25cfeac9c096b6a72f7a717f8ce869f1664d374864ea2af8b141963ab02733e0068be82a3cd170a99be2c99096b700de880429e8e933c19799b9f3ec95e25c1f187f56b4d499f164045c2104974b896590ede62173696d9e48e60ad95cae326e2f893703de6016972be80914c6cd03406f305ca19cfb45bc3f31c81b206f94babe3efe6cca0d1270b74058ee4078b20faeaf8e3f33600c80672f8a3723b2dcddf1644b5c20e205c3ba4032e6edc81b03b895e08f5678fa00bf6ccb0d1e2fd70157c8e47291707f8857ab842b8b3c120757f8c6fdbaba4077dc3c4f3788bb5b143c7d1cf832315798246b5c7c51cd051aa70cfb242496bcaf2f1be0f6be78b3029636a12f42b1bc71bdb1cb6d108fd47469203cb1cd980637d8c6e51a4eabc92f0add0afdd1ed06e1dcad36ae4d7e1188658e861feb3388cad503e5f6b67833a7db06fe08849b9343d6a8f8229ae7eee9c92cb8be35fe8c80eb0bfb33072e1089d4f90a7ce36a11b0dc099fac8127509c9b47e8ce3a5e4905234a2eedc9139d9eb5a42f1eb9a5e08f5ab836315fa4e30629b85b4f8c9d7081be5cb0209e3e55beecead23878e2054b1d154f66e402015d30a72b7472b96e5836ec91c85ca19dfb05c1fd59e06af130d67585682ed717b707c59b0db9c0036ed6065f509e3e4abe6c82ebebe0cde2b8bfdd9f51dd9f0df7d6c2b327c1977561d4e0fe64b8b714ee4f3c91044f1f31be2c86fb339c39316f14e4fea470b5e2b8bd32deccc9f589f066765c9b055f74e3da3ef8e29e4bc3e1892d3cdf43ebaf823f8be2d9e3234ddd29c02799b1ed96c01b995c1dae41055c3d4ed747f5665f5ca0ad5385572a5e6008378b8c3bddbc12d1150e6bb5ad2f72707f8aaed69aa5ceecc9a22c79615fd6b4c455bd91852bcc73c17ceecf8b9bd531a43bc75e2988250fe9c9ce78f60ef8b23a4b5e125f062cb259f2a03c191c5728c3e5dae3d27a78620df707fcb3314b5e0e5f767bf656f832b169b43d5f1cb2b40d7d318a2b4c73b9c2b84116ee561dd37044bc51ce9277e4c9d0b8bfaf9b457457a04223eed7d29d4fbc92041708a541242e176da92bd28378a2059ebd305f16c6cd791558c3cd8ae3ce365e0984256fcf97393de7ed939ab8c030fdc15d2d0aae2feacd8ab8d38d5782b3cc41bdd18efb13ac8d822fb2717d74fc5901f7e313597167d82bf9707fbafa63eb0f1377cbf6cc5df046b13b0579251e963b0f9ecc83e54e8f276be20ad7b85f13dc5f7822a65b1d1e69c905aae08215b1d479f16448eed4e1959edcc9c62b7db0dc9df164422c7544b2be9f11ae561b77a9fe10f8b31aae8f8437bb63992be2c780eecf16772be80685903606be68c69d55afb4bb3f357f66e70687eed605f7f7e4cf72b83e33fe2ce90235b8595cdc9f1dae569ede1b4fdb932f8e7183535c2edfa591f0440deeeff767626e50eb7229b94100ee9606f777f46719dc5f1f374bc9151271b9cceeb4e39556b83f5757ab8a25af8127a3e3fe4491bbde9359493ae10a11b85c342ccff2f28d1b7ce272ed963836de58c5a5fd4a458c7d9966abf3469feb63f2662f3c83ba5c3d538e00b83f53346880ab27802bece0726d5d2006372b8b1b24e16e79dd92f048bf674f812fa3e20699dc2d118c445c203f6e1e2717f8a5bf247f06c20d7ab95b48dc5f0bf73682d18d5218cb35f89e134b9e074f2676b4c0d81c4f5c9b37ce708104dcac319379b93e256fd64271cb0dd2b95c5deeee3c191117a8e6664d7185442e579a2b871ea9830b34e582a1f00ceacd83e5f6cb1fa9b0e415793232ae6f83377b63b943f3646eee8cf24977dce53c5103cfdbd91bad96353a5f04737f322850f082314db3e5f1c621d716e68b733c7360def8c7b265fe48cea5d95e0989eb5be0cde85c5f1a7f96e44ea74fea5a1686473a7ae6a6bc518ffbf3c6dd2a1abfdcdf027ff6c313e8879b67c80502e4e6899a46dbfaa2effe98b95a5bdc9ff1cf5478f6c87c991f97b6e68962925478da6678e3bc422fb5497dd1eb061d70f5405d1aef959cb841272e97eeb943e0c9a69612c91b51ba3f0ffe6c8e0be4c95d0e4fb6c21257c21b7778f686be2c89fbb375b708b8c2142e171df7384f6465c95be1cbbeb526be78757fd8f4270fe93bf2662820492d715ebc918925ef8127bb63a9dbe3c90ab8c11deed61f4b1d1a4fa6e40ac5b85f596ed0cee50ae0facabcd919cbdd084f16c20d86d0600d32e7f4c63a6e708ecb05d52fee6d3c9112cb9ed99bb9b9c129ed61f1664b3788c3ddf2e36ec3131d7083bd5b5e6c18dca0090d82ba7a98ee2f8dd2b83c91ca581dcba9bc6ce379d3e18d51cf1cd01bb76e2d8a2f9279fa7c7833b1a74f992fbbe002172890ee8211707f10e80f0af595fd59972b3cba5c18dc5f0a7f0676e7f093d6b8404a17eccca55df0c4abfb13e1cf8e770ef049675c9bcf178fb8b4304f9ce002fbb85a08dccbfc04e4068fee569b1b8ce16ee1718164ed8df166093c694c7c712e79464f66c6a555f0c42db717c69b1d7081905c30a93bc978a50b9e4f40eb9df0656137586bedec8b3d2c1fd2637822a727500b37cfcfb346c1179b9eb9dd1bd5b8bde191922e30ec6a5959e2bcde78c5dd8e27aae2fa98decc864bb3e0895dae70c8e5c21a33737fdcb85b4323c6dc9f3b9dc14f8ae2fe70b95a736eaffee8869b1b9b3d02becc89a764e093d85ca0ef6659b9b9357e8cccedcdf1660fdc9ffcb32f37182479437c19effe7850a0a50ba6e6fa62783340ee347ed2d605b2ba604a5c5b992f1e973c2dbe4ce8ce415ea9876b7be08b6a5c5a0e4f8ce1fea870b5be6e2dec8b362c797db22b9e3e42beaccb153e71bf0eb83f2e14a8e882357081551a34a0bf386ed6d0edf1f16653cb5d164fb6c3f5c9f16750cbddd9935951dce03689478a5af2c4f8b2a2a58e8b270be0fe56b8373817984683617482bd120dcf1b95370e6f50cddd1ae3028ddc2c0bae6fe9cd6a58eab078b2a40bc4c7cd83c00d0a69a7fc5106f73105cefed4b859be671094abc7c9f5edf9332dcf82f1485e9e3da72f93e2fac0fe4ccad5c91fc3e1fe0ef8331aee2cf34a3ff777c19fa1717f88e42ee8c91c58ee2078b23257b8c5fdaa72836797cbcb1247e68d2fdc5f1b372be8299df8a41aee2ff767523718c5e5f279daae7cf18c254f8227c3e302690d22ba7a88dcdf903f4bf3945c7c920e97d6579233cda6c21b7b8558dcaf293738437f944c5e9a27fbe3fe003b2778a5f9ac65f0c504b6d9c0de48046ce8f6f078b30a6e2f8d375be0d25878229c0ba4e166c1b1e4917dd9d3150a307512fc98204b1fedcddedc9f27ee56ee0acf2e589165ce871fab5d1f157ff673813c54f8d460d5ddaae2893b7a639aa78f0b5fd6c10d9669adce17cf2c7b6bbc599567cd832f3ab93f445cad3d57c8bb5c541788bb5951b744fec87683570aa4c7cd63c015aab95c63189bdca35408bc5c6296bb0a9e0ccdcde12179003c999d0ba4d3bb9e68894b8bf244a8250feccb88175875b3e65c9ad513bf5c9a91571ae3e6c4a82fcb9b39f1d485f9b13d17285420a60bc6e60934e7e6297225d1237930ed26c21b11b8d7f04406dc206d768c477ae05933e08b045c5a064f3c736719afa4e6d9ebf2655bdccf4c1a185fd4dd59c52b4d2d75473c599125af8027eb5aeee878b224eeafcb9f2171832ad466e68b773c73456f6ce3fe8c29904c85305cae3cee46dabbe3cd26b83f5857cb8b5bdbf3451ceeefca9f11717f24fc191e178882dc25f164355ce11f17cc778112f497c5bd49717f04b85a1edc1e126ff6bb3f3d374be9024590b904de88e7e9c3e1cd0679fa14bfac82fbf3e56a2971834dee960b37900bdceacf8f9bb5e4060b983d9f2f9b737d5f7ff6747f2eb85a60dc6098ceab57f2b9b53c5f7cc1d8c17317c593e1707d576f26c69d5d5e49074f2c6e8d8e2fc2b9bf3d151a208374378f99fb9be2de94b839b3fe84b8b71c9e3e75be4c8525cfeccba0aed089fb65c0cd85f527ac41aecbc5e4e9a3e7cb7e28327167d027d5b93f217f867569063c91f8dc397932aa258f8d2f0be0fa9cf8b3ddd805f727c19f397181a22e980945302e2df84a54dcbbbc9c638953e38d53dcd9c32b452d7b82bc599ae50ef76454963ca927dbe3dabe7c51ebfe5071b77c3728e9ea39bab6f9c520eecf1d77cb800baca073e893b2280290fbe3e2dea8b813cc2bd9963ce29369dd9af0483fb750fe88cdfda13518a7402a9277c293995da012372bec76ea8f66b873c82755b1dc8df16440dcf9c62b8db0acfdf0c52f4b9f7cb30c6e5089f6aa7833e2ade9f9220cf7278bd9abfa32309e3506be38bcf387579ab2d4b5f064bc27ce8837d2b934089e78e50aaf2ed71557d864ee9678321beecf0d158671bf1cb8bdf2471e5c6012b9f3f26464ae6dcd17c16e8f8e3783e0ce2b5ea96aa9abe3c99ceecfac308dfb15c1f346e48d47a6490f3e4984fb03e0cf3ab8bfa13f637385552e17103768c5e50a2e77ba27ab7267d72b85707f9e5c2d1bee3c3c1194fb33a336325fb4e3ce0e5e29e90269b960345ca1cfe5aa32c259f2bcf8b2a12b2b75433c9990656ec81bb996bc1abeac768354778b8aa59cf2496a2e7028753b3c59f0da36f8a220d767c29be17183b2c23897ebec596bfaa200cf1a922f265d211bf74bea8ec6130d7185145cae27ee4ff867666e7978a4e10d6a70b7eedc9f350ac4e48299b940076e560bd707c19b517157e389e4dca01d97cb800bfca165e29116b8e5f247245c60175a6f842f1ba42887fbe3f267475ca119f7abcb32a7f4c6affbe3437378a4ede88b535c9f9b3763e3023170c15a58f24078b23dd3a4ef9130b8bf35a6ee801fdbe3d27478a20c1718a734dd2b317185c2fa94f8b3dbd347872f0be10aa15cae1ca6dd9adea864290ff8a43337984675446ab7366f2ce036f1f441f3656a6eefebcdba5ce1cf2e8c27fbe1fefee8cf0b57cb8e5a71379ecdd6cef94d4a792bcdb65cdae6b41a6db91c48bbb571f2565b4edcf3b74ddc6d9d8f56bbcdd27cadfdad56da9cb3b7b8ca5a8eb66cadb49c9cbd1a2eb894b5a7cdd61b8f66a34ddbbb205a7fbbddb485739ae4d95af94ef73fa9d3fdefa6f301da96530e95c793bc5637ed3687fedd96b239a9d33d69beddf7e76bb65b5bc7bb95768539dbdd15b8c3d546cbed84d07cba23e0ada7dbb5b2b85cde68b2405b85b479af9774916ddb7e359fe59d66e45f6d725a2eb8c3f96cf322b7e04d976b6d73025d139e9bb87de56d13e284d37ef25cf01ed5682ffc0d41023e8d86d30d2132ef776f23e3bef72db7adc8bb3b649f6f378bbb2d69b8a6cbfb00e40c6a0035de47b79ad23726d7de4df4ed244bdb40dbd08d324012234aa62dc053033d7b00f47e32f26d44645e94205c6e5ba54d689b3f9ffbab1da4645bd78e9b0f7d13ee7e07f0e3742ec77bf901d3ca5bea8a044004e079c0472eda77f491e9b04ddeee2b00844abed5f01f8013f24d0a4ed20ffb4c5be9e2c1e5531c7c1b5764dd5e46da370b3468701a590478f70b3422d7be0d19872b6714b672d10bbe6b37257370efda5f14ee46a35c1b2746b1b8db6e6bb1c29d09deb605b62d642b2dce6522db7c9e3436bfd0dd03c5f8b9157f2dcddcdfa06d83a4f571af66ee6c0aba01c16b649cdf8702de87a07da8dd83d85ff1f23d54b10c02866510bd2510b51fd0781ec2bc153ede0a1aefa080d461f80ca0310e5c3c0e453c0e023c03c6bf618e6f10e06fd8cd50c30cbab7e1ebabb8f92a6860889a8226a6725cb280c154685061cfcf00740c1c1c03d7c7f0f430141906e0bf9087043e76e10907c7b3e0c72c94213f507a163078852d3890f32b74791552f8e1a584f1e66a9941129fb0e713e0f813b83e81ea28b14d9063134a7813ca6cc29b4de85dc29c4b08e3401a358e92c252f224544d42d08ff0c751049c29b334d3b408662cc21611ee7811ae78118e2c02d58b4054c680e15c311c2686c3c37060f82865864333eeb034ca10a688ff02c5517683d08411cc839066102ca8eada4385c0541b535386b2b407f23b08e3a1144c091cd0f11ce0f9273f4c00c23f41f20660fc447e2922020ed6a08a13a5dfb8e025072f019c8119196059811a5e01292b008581d118146521e2c01f0ae01c88d20010efe6b744f2c14a0c569a4ea0c86c486033c1084cf11a225ea3c202c2d5d02005b71a28463ca1aa01701a0c4e53e53445d24025d0c2586810b8339a324683e6334b9f21e13363ce60f099a03713e6cd9cf166b2581a60c59bc1b26cb26749b45b3661e1cb54e1c39751f30660f9325c964f457c19a43760c8937163d924c49391f363f2f83142fc982763842fc6e8c5b4b05c3a2346cb8721e1c3ecf902a82c8d5d7c982d1fa6820f8304a58d070189bfda210b0d9f25866f52c717802b80c85f51f9abb0b7a26339d4bd95992666be0a83afe2e1ab3cf8aa31df84c953cd79aa2fbecac892803c4f55c75389f054627e8aeca90e5812c07b2a077e2aeba798f8290a7eaac84ffd5e4a10385e4a89971ae2a59ad0e0a5ac485979a905de8230960164410d3d5493b720840723f660b81ecc190f26877fa2e3c1947930534ba9ae65718a7f0a038c9187537984f815982d8588a18228be0227be8225fe8983259208ff34f5158cf90a0ef80a923c0565ffa4f414ccf114c8f11470f01494790ad02c898e4f019425511d3f010b3f811616bc53083f819107b3e527b0bd0467cb22435e823f2460e325e86249440c045e02dc37917d13d87fb9fa08d8f82f48fe4b918f608f65501ecb20391fc1d44760e42310fa086c0fc1200f819ea5b08e87e0888780f81014ff01151e029f7f00907f008d8700cc0b9bf792e51f10f240d077e1e2bb38f15d8cf82e388cf05da8becb96eff27b2e823c97209e8b98e7b2c073797a2e3d3c17db6fc9f35bf458eea87e4b1cbf858c4f9366a953f2c16fe9e0b7acf92d5fb650d962fb2db5d7b28709e8b560f05ad4bc1629afa5805f8ae3b5cccf12c8128638b21cf158ccf82c437c161b9635063e0b0b9f25cc2fd5c982c167a9fa2c5c3ecb95a5adc92ff5f00ed871008777408377407e035534600116278fe5e9b11c70ef6061a14153878a3af78e9a0bd260a181e0deb1ba771eb844869708539d0ba4c4059ae20aaf584248c515d6b9c1078208dce094e20522b94022113adc1f15f787c3d7b2c8228b3a5fd3ca030f3c771ceba0438e2f38bcdce86a838d2dadac35d4b8f3352ba6f85a1a69586105175b7c0d8f9a9e5a1b3e40597ab086d442458121d2a8b54c126599a48a0e3f37ecde86331bbcd4c0010c38b8f0a4420aaf02540a662994914216289460c21b11b420d081041b68918119185471e3861ba33605b0b9408d12181491a6a88c334ecabcf9305e3e4c912b36555aa8bc90d223d5821416304854d086044922e00281135de6e8d245cb9e2c203400421628e00cb1a08d0d675f031d2e44f12ce0548042a186111e80f306849a074ede83dc065a68a0c01b16de7879b3c01b04d818793504fc0568d0088921c16a0e293d52622640f3135441a08017db962c5ac670e08e6fe00538704872431fff42590a611f5c6183973756ffa6023764648103822f591440418513ac5c3d210109536b7c0571b434c1a2451a1c38884183323e043c616cd8e10112f65c90c67321da92000c66fc0972fc0976fe8337df660e337684c13281951601be8612c40801a3c2993c1c20608ac96739d3c1af4d04cf2677c649980d6a60e2030b23905d8086150e12806129a18629de2471c3901a0401410a9b31bfa689b76048823bb0d4f16bda9449024c2029d049a34588d722e485232e04d001206c50c03a3275056cca60a04587ef018d1cc8bc19c0ea8b08d6680924053538b823cb189f654c1b2b3876fc94990b4b7c192a46a0024105bfa58befc0881933c0ccc960ac8d0477a460f664a40a207c0d6d3ac8e2a5450d0f9cb07c648210b0b102176aa638b00082387af8e065a075f043062be8c0421f25d81e84be9b3bc8aca1058e06ce90a9808c10d840a1ea49e8a1484d912d6d70c8f330905903c799222fb86002155f42026ec644b0000c773e822c3eecf05bec4073a705325658a04c4f1e3ffa88e3061b5a3fcc418d1fe660470c30bcd8228b2baaa82305144e30a1041246f02065830cdafc3007353fcc014bcc559514180a2488e0812e5bb23470e58738fc908101def861ee8738289e70a2891860e8800323e6c809c284124480b3810618b859a3c6ca4815021b70c588d4072c1005c500008eec7046a61a5969cc10c3cfa7477ae168fe91fc9f9833678e0f3e8c1115b505f3299ca5d9705b6c31cd66646664666486030e38e0809b75ead431cac2280ba32c6cb0c1061a6890428ae544759aed49996062ce9c39638c31860d36d82085145244098551514c8c31c6175f6491c5cfc49c3973c618638c9f4fbaf0c9932fbef8e28b2fbef0c1071f7cf0c1872cb2c8220b1c70c001873a75ead4b1c1061b9e3c91420a29a490420a1a68a081061a6880020a28a0800106189e3c691706e7cce57ef3478e7469d3a64b9b2e4766ae489122580d603580d500560363a88ca162156515156535672e77e488cd66b3d96c369b937964ce5ceea593dcef44ca493ff8a9d31189c42347a4bce16ef3f63c72e476c3e1dadd7871e365d2e65c324cfabbb0e1c2860b1b2e6cb8acd9b266f6c8ed4624d268478edc6ea7f9d93680d500d66c9710d1604183e5cc953357ce2c594224d26866ac9461a00c039761603864c204873b72e476a3d1aea44c24c3a155d4a44dda92257f94aa285551aaa254454142fc9fcc23ff93a92700fc4e9e248080014d803ebbdced8b307d91daff98fc0f80178c8803c40e315ce0c4fb40785f13ef63a3e67d17bc0f8af7292081972c56de27c5fb9ebc4f1c76c8789f36dee78129ef83c0fb48799e16175b603c4feb79593ccfcbf3a4fc8e2b8cdf61f13b307ec7f5bb188cfcce80df21fdee0104765e7e3785802121414faf33e075452582f89c159f03e2735c587c2e0c25028c200d090902320e3f67c0e792a8b1855615240bbc8d8b6dcbdb903040c01424506847a01c8172e4ca123cf02050f434e48936c4494853501b6cfcb4d186bfe1af29a80d8d0d94a7265e8c4c4cd3669bcf4edcecc401a9a1c6185f64f1459d2fea4801051344e050670e113ee060030d9d2de0659d199cbf89e076bbdd66033824486e3c5e0001043003f8b7b4e9d2a68b1a2d6ab4603580d5c0182a63a858455945017dbf9330368e604cdd61a64c46c65029923480d5401906c24c398221e5c449972e5d268ec7e3f178bc22458a14e1dd6e7d1627e594334992dd4ea7b3d9bab4e9c2860b1b2e6bb6acd9b266cb9a2d3f793c24483afbdced6c361a8dc74382a4e5f19020e9b30c0364aa501943650c953154e6534e24486e379b4d4e3979bc24496e379b5554d5e4f16e3729db24496c361aad38d9715376ce274ef689937d22d1e1a6eccf4e9cec4fdc947d4e9cec4f9cec489e3adc943d374571774c9b096f54b5c4011f2987678df6455c5c5e1edd19b10cdb608923f248685c5e20cd19bd1802cb79c41709b09c43de07e54943fa220a2eef0a7909dfde52d6f0b43d2ecf8fa5981657b72bef89bc25f14667dc5c04ef2507a1389f470a6029d33cedce7231ffd91227c01b89b2c429f1c32996d282a74d70751dfc1e3a77f7c5328c8665b568ee4c7d7c4b219a83a2b9aa39399836aa296fcd155f2ccbf228dd95b00cf3b2a461f9a234cb7a4999819c5fbe88767544f266e78de2d8086f29d3f85c0597f7869c55bec80177b7671946c6b356c01771dd1c102fa6c512e7e48d64b0ac89f9a23b9e35a62fd2ba3a2fe54591b6396f94e6fadc64edd8dc01d3d6f44608dc5d20cbb02f965bf15d72775f9661033c69157c5106cb2966da866f64c072fabc8f9525edcb17b959be43775acb3022963d6aaee9c5ba5c9fa2eea49661c465f79017670d90370ae039cfbea881e5d852c7c48f0d707d96f5326b117c911c3727c48b71717954cd7179b1355727e6f7d0b03c83efede6c478b13bae0e82ea34f83d452ca5023fd1b8bc314b31a8e5d4f34555966c963809de881c37c72b0f0d290d903289b71959eadaf831056e8e0429e13c0d8e27adf645592e6f07d923be66cb9ef0c56389fb8dc2eeae88651806cb462167135fa4e4e6ec3437c8ef2972753879a3f346655cdd1c5a0ed57d306d16bc9196eb93a43b33cb30036e8e8c17c3638953e187692e6f82a59892ab0340ee8cdc3b565c1f25dd05b10c53f39c645f8465899bf2464258d27e5fd4e5f27a684e585e051237c60fb79638207ed8c3e5195986e95906fdd173b7a6dc9578222fcb9dedc916b8b9638fe389a0b8c11cee569e3bcd5e8988e5ae85272be1d2447862063758c7e52ae016884762ba3fda9f4d7069313cd1843b5f7825a725ef882ffb2d7162bcd18925eeea8d2d4cabb9f1c50e9e0f0234a03d37deac811b64e37229ddd2f148163c83b45c3d526eb0ec7271b9403437eb89fb53c6dd3a5a4a289f94e6fababc9914b7269eb8a637beb942a7cbd5c2ad1dbf48c2fd9172b574b8c22fee1796a7cf0d5f06c26dd01fcd3b9d7c521ddb7056bc51896bdb7d91ceb579f045b12b9ce172f171838c578fd205b2e3e669bac0186e961b3718c0dddae0e953c697c97081aa5c30166ecfebcd1cb8bf326e16ee693be28db9fbf375b798eecf06572b8d27d00c378f709a2ce19348b834284f7cbaaff044c4dbb3e2cd8a1758bb594f8c1cdc1f2bee16f002152f589afbe3c7dd8a7ae26678631037a8c7e57a72854b2ed708770a3f498a1b5472b74258aee41bc6f529bd190c17685e30a3fb23c3d5c2b3e461f1654496bb379ecc881b7472b76a78ca223e29862b14e482fddc5f10f786c31237e78d73ae2f813703e2fa06f9b3062e50809b15e6021128edcb131bb83e35fe6c80eb43e0cd7eb840c79bc7e91964e5ea89727fa85cad1e2e90d30573737f8cae169b6ba3fa221cf727e5cf7ab833814f9ae3024170c174b840afab35c0f53df167bc65eec81bddb83f317fd6c5b3d7e4cba658e20a78e3064b5d1e4fd6e4068169d0d1d53374837c5cae28d777c59f015d2198cb15c5fd3172b530d8fae1ce37af747481c29b95e5d2e23cb187db121e09b8d49df064b92b997cd2d4fd21fdd99bebcbe0cdbaee8fe8cfda2c77033cd997a50ece93d96e41dc69c52b518dcd707f1eb85a47dc600b77cb8e65ed852f6ab94114dc313fc65878e64478e3d9154a70b99a58ea4a7832dcad49f1c5324f39c427c17027f193b29ebb2d4f36e60904c5cd6374a704af24af8ef763425c1bef8b46dc09c52b4d70814cdcac3d778ef14a69ee4f14776bf7049ae2e639aa7385185cae342ed0cacd4ae102055d30a8fb43e46aa159f2824f06c6b3f7fb323a17f8c2cd6ae3e9b3c4979d70838857cf926b8be08b59cb9b096f4ce00ac32e98f00aa75cae1eee0f0c57ebb8ac05f145099e4039dc3c413787c48f1ddd5f943fdbe14e1b5e098169343d5f0c7acae32715f1bcb5f04627cf5ebf8c88e54e8327e3e0fe34f833379ebddb971531cdb6e78d45ee6f887bd3e1cec5138db93d3d6f26e63ec7134d71c7e1891258f2327832416eed8f2fc6707d46fcd95cfa0078b3142e2d822762b99383573ab2e4a5f1654696bb369e6cce05f666217087e3899eb842abcb65c50de271b914b8be397fd6a78ff0cbb85c1a01afa4c6b41b166fc47283905c3d47963a2d9e0c800b94c0050be1e6f4fc180a1768909b6781fbd3c6dd6272692d3c518467100457cf0217d8c1cd0263c96be2cb8237c74681fab87914b8338657827aca403ee988fba3c7dd52e0fec0b85973b9c693b7c0937ddde0ef6e594d93297c520917288f9ba780252ec91bd7dc1f3457ab8b3bbd5e4984a7cdec8d43b72f3c12d19d615ea9f7ec057dd911f76785ab25c7fde1e26e09995603fee8810bd474c1dadcf9f54a26dc29e7951ab8bee29bcd706d217c91ec49d3e28bb80be4c00593e1e6d0f831ab9be3e3c74658fe3ef8333a2e8dea89102c77373c990a97b67ba5266ed083bba5f56cee8df8484a61a94be3c9965c9fd59b85717b4abcd9cf328876f334a064c59d453e098b5b0c4b2036374f2f90849b85c615ea71c16ecfdccf1bb5ee8f18778be8fec6b859b63bbf782533d7a7e6cdb22eed8727de70cd66c31b69f7878fbbf5e4cea54fe2ba5de191885c20a10b46e5a963f364bd3f53aed60e777af92558cf5d9527bb7aee9c78b21b96bb389eec881bc4e27201dda2f048404f9f3dbeac87fbabfa332b2e908babd5bbd3e893b8584aa84f2a737f40dcdb0d77e6f14a305cdb045fe47afa38f165284cb38df146e0052a73c1a0b8bfab3fc3e2026db960353c6b4fbeb8e416894752e0fe9c70b5deb840bb0ba664d93d1ec9eaeec2132d5de01d578be90681b85b614b5e0a4f767683772e57920b6ce2668d5d1f0b6fd6c733a7c11bc92e90cdcdaae2f6c91f5d70817c2e18939b1ba33f145cad266e5b78a422cb5d194f16c4f571f167424f9f0bbe6ccdfd11e26a855de197cbc5c4d2a6e48b58dc69e795dc2c79143c591ed7d7c09b31718116b8602a3c7b44be0c89fb43f367655ca009372b8de7d47d92131788e566ad7069659e68811183dba13fca2d9be48f8ccb5dd99355717f06b95b56aeafeacdc0b8411bee16d80dca70b7f2b8d3f14475ae1089fbd574690d3c31ca13888c9b27806db708deb8747d28bc991ef7478dbb85e4fe3c5d2d169eb5f348112c7978be8cc9fd39f9331c2eb0cccd62e299f3f2463faeb0c8e55273816a17ccc8d247e4cd46b8392c7eaccb157e70b9d8b813ea93bc6e0779a4311768c5d5aa2d77b4279b727d7efcd90293455da19e0bd67bda9478a3ee0aa5b85f0a4ca3a9f1c5deed088fe4bbbe02de8c8725d008374fee59271ec981ebc3e2cf829e3e3d7c199c27cd882ff602c7b85a419796e495ec5c9a0f4fb4e1e6ac9038b0377e716903bcd29d0b04e58291702712afc4e5fab4f8b3213768bc5b275ca00537cb8725ef802773e3ce255ee9815ba0d2d03c91ea4e225ec9ca73fe3e098a7b124fd4e59aad84e923c297bdb9b53cbe88c2fd39f06772ee8fd4d58ae2d288bc9216f707c3bd9db0d4a5f064baa54e902753e00661b85b78963ea2372be1fed2fcd919cbd5bccdcd12d7e58d26dc5ff1cf5258ea667832dfb45b97371a6f4d902fd27081c26e1e2a4f1c136f3ce2d2b23c51ca054a72c1a6c62458f22278323c3738e46e9db940a49b05666cceb45b9c372e708566174ce8e9c3f46560ae7088cb55f6dc15f064523788e9ea21de9fa4abf5e6cae2275ddddfcf9f9159f28e5fb6e4020d2f189a3b3d782500ee433c51956bfb7d5189b1a43b4d782526cb5a0d5feca294c153a7e5c7feb8413f578fbcb4da2b1db1dc7d793233cbddd493a5b940682ed814771ef0495f77167dd2165728a5bfe19f9d70852e5c2e3cb7731ec980676eea8d805c5a9157e2e2e973fcb21daeb0cce5e28258bc412e77cb8865efce9b51b9c03dae5601b7d7c69b5db9c0a49b357583acfabbe366253d251a9fe4c3d307cc979db9edf24725dcb9c72bc9707b79bc19983b2178267f2c796a7cd991fb2bbb594d963b379e8cce2d923f52ba338c5742b3e42179b23496380fde7803f1802b04bb60bafbe3e0cfbe96bc119e8ccc880aee5cf24969dc7b78a2284f9fb12f13e2fa9af833dd0536b95919dc9f24eed65cee027832086e6d892f56dd9f39ee96d3edd979b3295738c7fd2a73819a5c300d96b611be78f6043ae2e619bac22e97eb88a7cf942fb37afabcf1653824b1f0bc8579a3d3cddd515f147fd6bb40692e18157726f9a4326ea5fc11064f1f3cbe8c87a5ae89272bba63f14456375847f2f2f832a5eb837a331dee0f9dab75762713af04c1ad0b8f34b4cc1df0c63b961fcd26fd5100771e7d52175778c5fd927283965c3d025c5f95373be2fe5eb837132e30cfd57232cd26e78db84b4be0894b376876b9ba2c75749e4c68a9abe1c97ef7d775b384dca01497ab77833e776bea06a1b85cbc6937dc1b8daecff86634dc9f09ae16139786c2133db8c12f778b89ebfbf26656dcb59ec888b5ba5c1bd617f3b8c023374beae90be2cdf68c61b00cc2dd3c656e90f0ea01dea35e4af1c43df14624ae50e8725df0f471f26554d7d62ffe7081e6b8798cf787e4cf3eb83f376ed6903b0b4f547cf620f8322e96e31a7475c7c4ee0f93ab25c2a579f0c435f7e7f4672edc2ef0476f9636ae370aefaf803f93e1595bf2c500ee0fd7dd52727f27fcd91e3728c2ddea7af68cbe4c893b6778a5026e900157cfd313a8899ba7e876c81fd59eb5ab2f42dda021578ff0feb070b5e63052b9c0ddcd5ae0591eada6fbe2d07227f4645a2ef077b3ae5c1b9a2fe27181a45cb0136e10cdddfa62e9037a333877def04a092c757b9eecc91d88279a7285b6cb45c1ad973f32e10687b366e68b053c75553f26766902bc521a4b9fd19b99b0e459f16543963a3f9eec80fba3e3661d5d9f1e7f06e50a2fb85c622c7d486f76c2151e70b96678f600f832269e32e98d2cb9401d6e561d377745836e5caee292c7c093c9f1bc0df046019e3b079e4ccc9dcb4b39ee14e1950658dee6782304f7b7e6cfd4b8c2a9cb55678933e38d50dca00f774b901bcce06ed9b9bffe59041708e98271b93f59774b80fb33f2671a14bd5ce19e0b16741fe3897cb842a3cbe5e6fa8e7f86c03479f5491d2c754f3c99d19207c69711ddb9c32b41b9c0256e96d805ea71b5a09637a91077b9c0dc9fedcf2a308670854cdcaf26774abd12eefef2b859482e4d85278270c7e389b2b8bd37de2ccb053addac36f70776b308b8c120ee969892064b5c1d6fdce2029f0a9c72b348b813804f12e329bf7cd29b252e8037aab9f38457521a4be10a2db85c523c0fe17d182c73f38d68dc20d0dd2233cdf6c51b7f1798bb595296bc254fb6c692e7f4646cdc59f64a433c69637c71f7f4e1e2cb5a2082e0f6f478330bee0f12774b2e6f49de98e4e9a3c197b9b9c2172e171e4b59c0279979d6da7c1181256f862fa35d5f1b7f46bc40075c300f6e5055e7f19558b8bf23ee4d8869bd0cbe0c9065aef7c635ee769e8888a415aeee9ec2133159eec69e8c8a2b94972b82a7e4faa420c6f0dc19c22b25b941312e97d1050671b3f4b8b540be38c3b296c617df2c75614fe6e4796be28d0c2c77f2c9a45ca191cbf5e6d9388f54c00516b95911dc1f20378b7883737e4f7ff6c2fd05fd199aabbb95a6e689616ef08fcb55e5027f6e56034b5fefcd3c58e2bade68c5b3b6c0179596bc2c4f56c7fd9157eb810bbcba5946dc2092bbc5c1b307e5cbaab83f67ae16174f1f2bbe6c850b1c72b3bcdc9f2657cb85252f8127f3babfe3cd3a727f63fecc8b0bdc73b5b05ca00b2e5815f7f7c6cd12babe296f36e7028b6ed604cbdd0b4f66c2b49b066f34e002e171f334b9393324adc90fcf96ba259e8ce8029fdc2c109e4042dc3c44aeb0ec8211b9bf297fe6c313677c63065728e472a1b9be07deacce7237f4645baeadea8b712c79595f96b4acc5f1450f96ba289eece806bbdcad236e8778a4a7e54cbe62dce093bb65c3a58df0c4375718559b085f34bb41015c3d46ee0ce295a834ebcca5157f08b5bcedf1460aee8fd3d55ae10ab5b85f546ecd8f2fba707f3cdcdb0c7722f04972dc9f19ae161e3778c4e59ad7e7c09b3531f6c01287c61ba3b8be3b1572dd2f0b3ac6057eb30eb8be2b6fa6c46d963f82f3aced8de2b8c0b3abc565c9ebf264c725cfcd9305b2cc2179e31b4f1d951ff3e30265b8595e5787f56366f727c8cd32dedf037fa6c4dd829f77aed08dfb55b5d4e979320496bb2d9e8c87a78f972f2333cdb6c51b7d37c8c5e52272737dfc580917a8c5d5d2dd9f22ae16d91268ece661e029c5f8241e2e5077b3a63c6bc32f2279fa7cf1652edc16f923dcfde9e06aa9b1e4b5f065bd41dedd929a863bbe918b1b74e06e1131ed46c51baf5ca0a90b76c4057aba60183c7351de98c7fd1972b5cedc6013972b777f6637ab80fb6bfab316eecf803f9be1e913f665415c20d7d502e002a16e1606d7a7e7cfaa2c2bc72381b9c22d978bcefd39e26ef5fe2cb95a70ee4ce295badc2095bbd5c3a5cd57a273cbc01f7170815a57ebc8f54dbd991757e61e89cdfdddfe0cccd3e7ce97d1708543976bcd05deb95a46f717f5673cdc2015970b787f9cb85bb8a78f982f4b73832bdc2d3aaecfebcf969ebb2b4f16e6d256786208172876b5ae3c7b0d7c591697e6c013a3aeed822fee718552976b8afb094fa4e40974c2cdf3bb412b770b883be1bc9200cbdd0e4fc6c2150e72c182f7b7c7cd1260c95be2cb7e9e92824fd2e059c3faa201f707cad5ba61d9a53f42e002a56e56104b5eeec9b678faacf0651c2c7dbc37ebe0feecb95b0d4c932d7c92091778e566a9f0f429e2cb4878fa6a783341ee6f867b53e1f6f2bcd9d53409e7934678e2846f3473e719afc4665993f3c50ab6d9eebc3178851a5cae35eecce0958c2e50970b76c37257c293c1595ef533eb4e2d5e29cc059ae08211717f75dc2ca467af78a42dcb5d174fd6c3055671b568f72784abb575855af7ab827b174f44e6e9c3e6cbd85c200b2ed89c256de9873adc79e69584776ef04a469e342abe68bb34f94a73aeb080cb15c305c671b5965c210d970bec39699fc4c49247f464652cbff2d28d0b0cde2c072e0dcb13a15c5b075f0cbbc0acab6564a9b3e2c98e5ca01c574be9fac8bc99194b5e0c5f36efaff66714dc75782227379875b9087802f170f30879de6078e3934b53e0894c77149e68c9b5b1f9621fd7c7c79f45dd5ed79b619926dd7c5208f7478abbc5bb3d3bdeeccbb55b93372e59f2804ff6c505b671b5905cddeec78258da06f8e215f7349e28ce92d6f4c31d6ead8f2fb6708102b979a42c7974becc777f8e77ab80b135eee4e195a22c75373c19f002b571f310b0cd16c71b83ee8f813f13e2d284af54c59d443ec98a67edcb17996eef8f371b736dbe2f26717f64feec8beb03e1cde6b8413677ab8ceb03e4cfac184178fad0f0651f2ca5ee91da3cabc6237db93424af84c65227c08fbd71691b3c31cdfdf15dadaa3b94591be18b50c6dcb8be3ffe8c810b24ba59122c77554f76c1a5cdf04414ee8ff06a8db9b93c3a5b7825a63be378a51296bcf964585c219ccbe5c60d0e72b9b05c210f974b901b64e272e16eb083bb95757b75bc590417888e9b67e9062db85b522c79517c19d09376c5176fb710fc110af767c5bd3d71671aaf84c1fd2dfdd90ad7d7e6cdb86ef08acb25bcadfaa31a9e3e74beac84e58e8f2773e2fe8c71b78a963c214f26c6fdf9e26e095da0999bd5c4adcdf1c510eec4e3955eb83f57ae56104fdc036f3ce1028db859805c2feeafca9f05f1f429e1cb3498d603e1cb04199bba5bf144545798c4fd727aca2c9fe466c9fbe1cb74f727cbd58a73695e9ec8c0fd99f9b3302e10d8cd93c0dd8b27cae006c32e57031728800b0666e943f2662adcb2f04842d76e6abc91cb151e71bf98aeefc99b0d71f7f2928ebb144f54c10dc671b99ac69458f6c2deec820b04e066515d2197cb65c4ad0f8f64bc3f105c2d24ae0f8f3f737237e289b42c75594fa6747d29bcd91ecf4778df9b5b07fe2884fb0be366d1ee1ce19508b83f5c202317ec8167ae833796dd1c15153a70b98a78de96bc7180a74f045f56a665d8da4ccb09bd918d69bd395f467681865cb0273708c6d439fd581e579766d6cd23d59e3e425fe6e5ce125e69c9fdb1f9b335ee4f8a7b4be2298d1e0985258f802753e3d296bc52d6b4db0c6f8452ace2dade7c11906d3640de28f4f411e0cb24b840bc0bb6e4021970c138b8b6db17e35ce0f16a2ddd5f007fe6c11327e48d672eedcd13d1dc2004ae9e26f767ea6a49716b837cb1862b0ce07275707f60fe4c8aab53f26371dc29f449578c7979ca3b9ff4c39d755ec982bb164f146699437a63d705bab959582c794e9eec8d1bf4ddadaafb6be0cf8a1833e20a71b85c7aee543c91d453a7c193cd25901ad90e1e29b7e4d5f1654aae90e872b179e27c78639c7b022f99b83f824c9a9d2ffa5c21f1729d7083795c2e27d73747a710af54e54e185ee9e9fe14a96e487feadcaddef54df167bf658e881f13dee091bb95c1b5a5f9a21e174878c19aee4f8f9b95e402bfae169325afebcb905ca0de0553ba3f4bdcadda9d4d3ee98da7cfd497a159f2ca3c599efb7374b5dadca022578f90258f8c2f337a026ddd3c03dc56f9a30deecf01572b86fbfbf2674d5c9af1874dc692dc9f332a7c72b97078d606f82200f7b7c19f795d5df0c7e43c6b1b7c518192718130dcacae0b8475c1eadc1f3b772be90203b95a522eb0ec6a69b9b6315face388caa5d9f0c415ee553cd1d405fadcac2ab75bfe68841bcc73b916b8c29eccc9f0633f7180bc318cfbd3abe565b9fbe2c97cb84075dc3c4c37d8e66e9971817e2ed8d20d5eddad2b9e3d2a5f76c505beb9595bdcdf20376be9894be28d465cf92361dda9c72bc5b0d47d3d19d3f316c71b1fb8353bbe38c2cd9df16355db6c6dbc11e8fe02b959c5fb2376b7b0dc9fa0ab5506e982eb3be0cd7cb893f1443f3c81d2b879922c79707c99004fdb025f2ce302f9b85a065ce10f974b6cb9abe1c95258e2f678a3175798bb5c165cdaef95a478f6ac7c191617c8cb05c3e1b6ec91cc2c773f3c990b4b9bf08b4d2c6d4d5fece206a3ee560e57676b8dec8b3a5c9f0b6f96e7fe827f56e6fe6cb95a72ee4f8e89c37a630cd36c67bcf1e7fa5478333e8c155c1a9c2762708168170ce929057823c31b5ce3720df0a425f145f9a475f1c5dc53eef149739e3907de08767f8c05eaba79942c77473c190d4f20256e1ea29b8ba3c11bed467b63d15d86277aba3f1feead866bfb8b3edce00d77ab8fa54f80375be1594be08b4aee2fcc9f7171693eaff4c4b397e4cb9ab840f282155d2109970b8ea70f025f36a5b4c605f670b3ee58f2c63c991f774af9243c2eede795ea5ca0dc051be002e9e86f843fc36324ba3f68dcad235778bc60bdb9287e4c802b9c73bf8a4fdc006f6473815e5caddf954a3ec9820be472b362b8bf39f7f6c31257f6c632ee0f1d77ebe9d2a29ed8e499dbe1c768f767c7cd327269554f8ce0e9b3fbb22c4b1e9c271bbb4232976b8b1b3ce16ec5f1aca9f04507ee6f803f8373a7d62b71b0d4bdf0643e37e8c8d563747f7a578bea0a33b85c776eef8c3783727d62de8c8c1bdce37241b93d26de4c788364eed616cf5a085f7c727369fc5898eb4be2cf6c3778c7e542e0d286bc5216374876b9b63c6f476f04e00611b97a80ee0fd9ddcaf2d475f064b4a56e8527dbdd9f057f36c5d236fca216d368737cf1e7fac2f833a33bc9bc12f0d2347822d615025d2e331728cb059be1e993e1cd02b9fbf04451cb5a0f5f8ce0faa4f833dffd8173b5b86e50cedd3abb3f005c2d0d6e9778a4293768e66e7571dff2f26bb9e37a3239cf5bd01b8d3c71bb378e79f64ccf89370bba73ea9572d737e6cdcab8bf26ee6dce0d4a70b79ab834a51f7e850c5cae20ae8febcf942e109e9b07ea065db85bc7a54e8c27136029831e498325efca93cd717f457fe6e60213b8591ddc1fabab45c53327c01be158f26e4fa6c532477ca31ccb9b6607f8a3a5670e84379addf9c12b05707d16bc1917cf9b206f9cbac12c774bcefd4df0674f5ca11d42b20b36e40679b85b805cdaf0874df707f46767ae9085cb75bc0d0aefdcaf2fcf2afd91d30d6a72f534dd5f097f96c79d4f3ec98e0be4bb60c3fbb3bb5a16dc82f048bbe7ed863746b9400a5c3038d76ebc371e3d65d72709f1c4f5de4866a903e1c96af78786ab95c79d6c5ea9c8b3608f7475836774d6f04a075cda96272ef0ac0c8f84747d667fe6e5fe1cb95a19dc8ef9231d963c40be6ce902dd2e18927b0e4fa4c015a271bf1e58d6b4f8e205f72781ab35c30d56b95b3edc5c1b3f96e602816e96962b977c92d4059e70b3ee5ca01a57eb688c84fbc3c0d5fae1cee22769dd69c12bddaeb084cb15c7365b106fbcdd1fd69f9971836eeed619570875b95eb83f1a5c2d3b4b5bd117a558eee47832246e5002574f01cf46f148592e90829ba5c3fd21e06a815084d815cecbf565c9dbf26476dc9f16ae161d778e79a5dfa5c1f0c412aed086cbe5c795c64f0ab3dc297932099e38336f84e1d9d37d999c2b1473b9b2b84110ee16d715225dae0cc6dab8ade08f5eb8e379222caeefe9cd72b836db1789b84122ee16d9d898a5cd812fa2718138481c076fb4e1497be28bb4db6be2cd8096bb214f96a57f2c7173bc518b4b9b7ae203cfda982f3679fa987dd910776ebd52075708c805fb5de118f74bcbfdc5b9371e9e92ea9338b841402e1703d706e78b65d7e7e5cda658f2c23c591fd76e1ebcf180a5ceebc98cb75afe488465d93cd2bc42accb05c60de60a9c73b3f42c7d45de8c842b5ce172d951c41f1708c4cdcae3021fb859342c77629e6ccdfdc1e26e059fbd335f96e7fab2fe4cc9a5dd5e29893bb9bc120eee44e395da5c5bed8b433c7db67cd998e5ce8e2753621aeecb1b51b83526be6875856b2e1719f787c29ff1d1f37adaa2be48c615c670b9f458fa7e6ff6c19d2bbc92f1feeadcdb12171874b3b6dc89e695806ead8e2f8a704be7910e98768b7aa3d25387c193c9252eeb8d75eeaf877ba3e1d69ef8a298fbfbe1de6cb823f1445caed0caec69f9322d6e857824a767d33c52ef0f9e59331e09821b4ce06ecd30e6b50412bb79aadce5782229a6b5ce2369b9c10feed6d65347e6c7c6aeefcc9bd9b93ee29bc9708303dcad0fae2f8237abe202f58211dd49c72ba5707d48fc59ed59381ea9824b437a2531aeef8437cbe3d27aaf04c552cef049284cb35df1c6dead25f1c5a9eb73e3cf8c7736f14a113c6b59be58bc36355fe4e34e3e5e6986e7f4f9a427ee8f803f13e1568f47aa5af28c4fb6751bc223f1948cb84228ee1702d706fce2124bde0d5f665bf2e6f8320296b8a937ae706d60bed8b57cca4b36ae0d842f8e5de11d174cdedef1cd2458eed83cd91b2a9eb28f4fa2737f56fe6c88fb1bbb594fcf1ad5179fae2c7aa40f2e708dab857469453cd187a74f1f5fe6c305c2b959652c776e9e4c83fb83c7dd42e0fed870b5f6b839257ecc885184db33e3cd9e2c6b437c7182fbc3c3d5d2737fbc5c2d23ae4f8c3f3b5aee2678b2336359cb02ab033658c1dd82e206c5dcad2c6e0fcf9b51707330bc1160ee0f8f9b15c0cd5551bb41f1462bdb6ec337123076e606b5dcad39d727c89f6179e2706f1473855bf70bcced098f14bcbae18fd171695a9e38658c8debc3f2664b3c77519eaceafe5870b5a0b83fb29b05757f7257ab825b83e28b63ae0fcd9ba571815315de2e5705f7075ed6b10cea5d3d3f6d5abe6867a9c19d70bc1209cbdd1a4f1667898be18d40dc6092bbd5c1f555f0665a2c837e574f6f777824a53ba33e09cf3dcccfad272e87370e71a79e57c2e106cbb85c46ee8f9cab55b6c465f0461aeeafc99fc5708176aed6d05207c693259956b37db1c8b266c61731b8c11eee5620b7b7c79b493d754d7e4c8fe5ee8f278b42894b63f3c4311708cc05937337e3898298d63c8f14e60a85b85c6437b8247305bcf178833fdcad416e0feccda8963605be28c6f2a16f02d797c59f09b9c02c37cb856db723de5865a9cbe1c97e963c3d5f66bc34049e681ce3ba3f125cad252e1001174cccf5b1f167c3a7fce29376b8bfad9b15dc766be08dc53b957c929deb1be3cf908a6beeefcd9f752ddf5548e77e19ef8f96ab55c4d347e9cb28b8402cae16ee0287b8597cdc1f25ee16edd2845e698b1b44ba5b6e96b8b3379af1bcf5f046297746f14a145c20dc0513e006bdb85c459e03125474f5085d202b17cc855b2bfbe20e774af14a15dc1f11ae161b37b8447fff19044bdad30f7db834069ea8c09207f5646d5c201e57cbe94993e28bb5eb4bf3666adc1f40ee16950bdca0bf0efe4c8e1b2cba5b6b2eb0a9dff144572c71626f1ce3d6c6be98c3f549bd591763112c65d4275d7083945c3d492eb0819bc5c218104b20376e9e256368925eb89385575a5aeee43c990cf707c5bd1d718352ee960ed776f54539aef0cde552e30aab2e57154b9ed79725b9b6a92fbe71e703cfc487a78ce2936cb83f551ae474f518ef34f34ac1a574f2495817a8c0cdf260abcb7366f901dcdc99c22b11c7902c75729e8cc8a515bdd2175788e782cdebd3fab3252b3559027170f3d42e308ffab6f833224f9a1c9e205fc674850f5cae242e4dca130bb841a20215b9600cdc89782206eecfcb9f2571817e178c7869609ec8e5e983c2976d7069559e98c00532ddac3537e8e9ea595aeae678b2a63b022f97b8bf2bee0d8a2b3473b9ba987623f3c6a70b74e48245f0ac61f922f1d9378f64bbc3f0444d376874b7d8dc1f953f03e2fa4678b3e3d891fbb373b378d7c7c09b2161c4e202fdb85a0a3c75507e0ccc96c1f591fd19970b74e68249b1e4c9f9b2defd1172b5cc5c1a0f4fa4e102e5b9799e3c79679e4ccf058eb9594a5c1a9357d2ba3fbfab65759752e106972b6b6c85693d365ff6c7155a71bfa2ee8f98ab75c5f5b179b3ad7bd613d179b68b47eaf20482e1e609dea0ed6e49b0b40df9e2134bc9f4496396b9bef18c6bd3e08b81dca02097ebcaf559f167c2fbebfdd9d5ed89f166085cb9f44962963c019eecce9d24bc929225109c9b077783c4bb55c2fd25f067362c6b687c3183a70f1a5f36c353a7c08ff1b1e4edf165c35b73e28b612e10f08215ef2f833fe3ba3f035cad0f8c115ce0969b05c3fdb9f933ad1b54e06ed1707d5cde2c8a2d19aeef8cfe8cfe0c833bb95ec983ab036a1078b7aeae0d822fae7181bd9bc5c0f549f06657dc1e196fa6c07236f003b4b90df347385c20d8d53ae096e88f74f767e86a5d708136dcacaffbbbd3c279249f27d01a378f001708c1cdaa61b9bb7a3235d76e40bc71ca9d17bcd290fb63f267255c6192cbf5c1341a1c5f04dee0d3dd62e10603b95c5690ca4c93643ec9831b34e3721db940572ed80bf72c9ee8eafaa2bc599c3ba7782530f757c4bdf57007e38976307a707fcaee969627aef6c630d76c76bc51c8050a73c198b8be23fe8cb6d4a9f1644cae7084cbf5c6fdf9fe2cccfd7d2179667cd9d1b226c617db5c5a104fcc61b9cbe0c9367876e913f266224ceba5f9323dcf1ef1cba0b8c03637eb8afb5bf267241827b8c2162ed71d4fa9e7938cb8353dbe98c20db260fa0cf165233c75567e2ccf3387c11bc72e508cab252472e2064d70f564b9c21b2e579e3b989f693c71446fc47afac4f0651e5ca010376b8fdbe3e2cd9eaeaf8a3f0b5e1a054fd4726d6ebe98e7026f372bca7277c2938970854a97ab84258e8b372e7181885cb0299766c21339b83f73ae96d9b216e78b145ce01557eb76ed86c21b15b87de08f4eb8c00f2aace0724171834d774b85eb23e3cf8cdc9778a207ee4f9bab45c69d14bc12eda993fab1b0db261e89ca53bef149435ca1d80503ba3f015cad0d9e3433bec8bb40176e161bcbdcef8d594f49c727c579f6a47c991537a8431bf5476eae7082cbe5c472343348cad5f3e4feb4b8b7299e12cb27b5b94036a6e4f24918dc1fa0ab45e6ce3caf74c3ddeb899ab8c0156e96d6058ae3e6192e8382ae9ee0158eb95c5adc1f36eed692fb83fa33186e908ccb85348dd6f5c5df7d862782bac23aeed799fbd3c0d51ae2fa98f8b3dcd3e7ca9785b9c0146ed61acb1d9d279be1061170f520b9b5f2471ddca9c42b79b9c970736154a8e572cdb9f38e576a61ac86db0f1e4937a67581541207e78d395c1fd69bddb93ea737c3e106abb85c3f9776f544096e30e96ebd59ead87832e25247f664506e4dec8b37dc9f587f11fc1913f71f9e48cafd1df9b30d6e1000570fd205aa70b3b22e70e966a9b936dd17e73c6b505f1ce0ea666704afb4b1cdd327902f03e2025d5db02596bb209eec8565eef6c6346ef04bdef4bcd1823b933e298ce58ef7640c3c6b515f6432368111135ca11f178c7781cc5cb0286e9000570f001708810b06c2d307842fcbe0024570c180b841a5bb3542318c256f872fc33d7365de38c8d8d67227f6647596d2e993c8dca178a2096e6d8f2faa707f4cdc9b9c0b44e266097275c64e2f5ea9ccf56dfd19932b6cba5c2c2c7b5a6fc6c0ed2df166c1e54eebc98a58ee2c7832ac654e881f0bde5f174142574fd00deeee9605176874b328b8c10d2acce382d9ae0fce9bd57175b5f6e478332f7762f14a564b200f6e1edb5217c393f5c64c58ee3878b20e2ecdc9139beecfd2d542e1fe94b8b7389776e495c8b813875752e0da0df846a41b24c1d5e3c0349a205f14b2e471f16545eecce1959cdc9f121aa474f51070679b571a7af62af8322fae6fc99bb9b0dcc579b2188a5996bc29be2ce8cea64f6ae30aa7b85f4e96bb409e4c8a69b7a13726dd9f923f1b21c985e2177706f04963dc89e7955cb8407a6e1e28778abdd20f5778e67279717f6e576b82e52e85271be156f84be2de88b8b42b4f7cb2cccdf9b1a03b2b78a5dab61ad0178bee54f34a44ae2f8437a3e3028f6e5605d3249a4ffae03687475272856adc2f09ee54fa2435963b334fd6669933be718e9b73a315f34739dc9f0bf746c2f5adf066604f69c1276d707f7c94f6c21349b8d3ea9578f7478bbb05742bf54732dca011974bde60f16e99707fde5c2d346e4578a4def2060a7474c1b43ca5159f84c3349ad91789dc52fd110dcfded2974531ae07c4978ddda0537fd65c2d316e6d8a2f9a59d6b0f8629aa58fedcb0eb8407fdc3c516e8bfe087885095cae1a6ef0e76e8559f23878b2b01bf4e3724d79ca073e29830b9474c12478e6d8bc71cf52b7f564c3fb144f04e6fef470b5feb83f4d574b85a78fd59761194bb8bd2ede0ceafa0c78b31eae6f893fc35da0af9b8778737b4cdc0a6ff4e10a03b960c0258fc8938d717fac5c2d209ebca8278be306015d3d3f77aaf14a6fee0f8b7b8be21ec613f17085612e171645845d5f096f86e7fa2678332c6ea3fc519beb8be3cf9cae2fcf9f51b93f316e56ed0625b97a92ae508efb4566891be18d3adc1fefcfaa6e7b7824e2b247f6666c9e3e597c190bb74efe28cda561f04433f7b7e5cf8cb8beae3f2b5e5ad22b953156e602b76810aad38857d27227d22779717ffab85b51ae0f8a3ff3b93f5057ab850bf4e166e1b94225974b84fbe3a6c2082ed712f7074927d12769611ce1d993fab22fee8cf34a57965d5958f7278202415db037d777f6670fdc1f963f8bf394bc4772737f497fc6c10592e0820951849e2b2c5e2e148c125ce0d0cdfa727fa8aed61457c8c5fd62e0fe98ddad2dcb1ed79b59b9bee19bc57083510a14e46a5559f2e27c99cf15e670b9feb8be9f3703e136823f4a61c90be2cb7645a4b9400d5cb0189e38356f94e10675770bccbd89278ae0028bb8597e5c5a00af74c605ca9b95c0a5d1f0c4149e3e487c9909cfbaf148145c6001d3a7832fc3e006f75cae2c4b197ca40c9e3e407c9908f787e96aa5b0cce5de78e77ec4136db9404317ecca0de2b95c093c17a0b4079e68e5d24a7862444419894e4f55c426a2d512d4d55591a9498c1391890d551b356cb610894f6cce5c1987886262aa72aa5a9aa22a4a15ab98a6a6aec65488a8292bab26a9aaa62b26ab29e3d49254d18a4d1aa92a2755520e3061b2468d55980611657caaa2aa2a16afaea89c86c3a6a72a346d8c4420a2988c544422d3b06a69494aaa08c534e58409cb173010f48728e3d3d5d59214d5131495d390c8d43455ac0f51524b4c5650544d5057574c4522b1890845ec218a284555b5e4542416a79cac8c57c3a92a34633040d3060b0d0f514b504c4cc3a7a72171c9482c325d5931a53933c638d51da28a50574d4d4dc462b1aaea89aa8938a41a8346ca01264c8c4e58be80b9aa0e4e565454564f4b57c3a7a9aba9629594142d494b4b58be80a16a0e5153554e56554d4b43ab272baa2729a6262aab34195819894dc5e2104545457c827aba1a3a595911aba6a488629cc0ac1953245a99999282ba214a8aea8aaac9e8b4446c2a1a8d4e5754629c884d5568acd8646005c6ea8c959834526ac230118b44a72ab521caaa496a6a080565241689525252544e629c886c32b00203a6a9b8a60a4b0c1bab334e6aa4c4502d6d690d514b5456c32aa826a72722d3151313d592992929366dce0c8d4e4a439415941595d590e9c95864626272727a1a7686a8272826e2141471384535c544ac022305a6583463c68a6a4986a82aa827ab25aaa7aba7aba6225371eaea4a13962f6026680c514d56c52aa3d3d452f1c9b8b464746262c2c48c192baa61130c5150c3e2d5939551ca8ae96a6a6a785525c68958f5068d13264cdea091e262c4f2054c545f88223e3d41158752c462f1eae9eaca48cca08a4a1834525a9830b10a83464a0d13266bd260119db07c01535517a2aa8a5752504c55442826a729a92193941827a2159b316a30600aa02d4041355d412d5511ada88ac329282a2b0dc6ace982a5c6ea0b1a2c2c4c9860a9b1d2000d161a264cceb441c34159301a894623139311caa9586c7a1a16894522d18a586574a2a29232364135199d8ac6364c67daa031b23973e5a62b4451415119ada49898a09e969aaaae8a524e98300933c68c1413266ad8a4796ac2f2058c5455882a5a5555351197ae96a496864d54574b54565560b0d88071223685a8e215d169e9ca48b4a25a2a2e415d4989712256a16983a506cc1b335363d6acc14ab3144151886aaa72621a4e0d9f8643e210cac9a9aae984282928a62b2aa92926aa2ba9629591ca8aa9264441493119ab9a884c554d46314e443669b0c04011dbac19a3260c939596105545a47a7a1a5e4d11895452564b6ca8a432b0925212a28850575056c3a215931313516a6ae94a8c1391494947887a92323a312d5141410d9da8a8ae864e629c88c527a88a1075753535557565742a16895652452826314e44366bacd8a8c112b38689583851c4aba253d1c94825b5b4345cba325a8971228231d3e6cc90385ccaa0680c33e6c95393010d21ea4aaac9c94845243a414d11a1a4a08a629c8860d63c11c3a019035510a2a0a6a09ea6ae8a56574f564626272928314e44345666aad05881592a3259518d31b386e983282ba293d5b008f5c454b524e5649c9a12e3441c1231c04a03c64c9b335068b0c248a9a96a7a723ad306cd130fa2aca486574f534c53504e56524e4b57c3291d444919875350c42b27e31215157138849212c35454c3264d011c4455594119a58a4c50554b524fc32a2927314e442b2a345860cc9891a282b2a242d3001a294d574f6bd26035d9200a0a4aaa48b54445645a9a1a12af9ca622d020aa385c2a3a2d0da9a0a896a4aeae8a526fa28c4f5744a8a72ba72a22139313d395950c9e9a9a96a0988a504c462293d1e8e4546c7a1a4a0da7864c5553c52195149314d4130651565454574e574f54c42a26e2d41315939ba8229394531554b1c9e9c9e8c444755524a14d141595d550caeaaa89d8341c3e595111d1608d6193a601264c864f24b089ba220e87c5215371a9ca482565b526ea4aaac938c52425652c5631393919abd4445d41314d119d9caa88524f462bab211408174419a99ca8a6aaaaa6a8884f55574f574d495ca630614265e5c6698d993467c68090264a6a0a6ae8645c225215a1968a4b5743221558514e5357565345aba2d5d3121493959414131668a2aaaea0a4a68c4d4d56534e54504c50544c98108960884dc42ace444915a5aa9a9698969aaeaaac864d462928a820cc44514d2d1597a8864d554c4b5045aa2aa9354f58be806953268a69c96825355584821a2e55353d354d1575201365bca2729aa27aaa62726a6a927a225e11731813253505e554c5e4b434f53484b282725ada414cd45453d514d5d0b8642565b4323255513161f204862875c64a0cd59aa61ac2442d15ad9c8a4d5057442627a313151413265469d4189fc010a9d2a871e12aca692865240ea19e989e98885255442618aca29698988a4f442271385565557535b462c2446acd99273044a935678c31544531198b4c4e5543a862f10a4a8ab83464c284090a0cf1e907aa2829a8e2d292b109ca09eaca68a47aa26a1a128d988a821a4e5d41353d5d3d3d515d2d5d3d59897122a679c3860913264cd2bce1c28489110a0c718d5379908aba829a921a36415d31355111a998a6de5895291abb5810357482927a92aa2a3649119f8ac4a733526cacc230159fb08089325211894d524d43e25515d55555d128c68928c546aa0a4c1a2935183411d79819c3a60d93d3930aa29a8c4f4e5355462a62d5539314d3d413055152c5a19591ca5825e5645c9a725a2a4e10556c7a1a4a3151514d35312d15a99c86629c885292b858495ac3068dd41835525e9c885566c6b4996202332462f902268a0451c4a7a9a5a6abaaaa2baba9e192516ae9ca4acb1a2b366f9e5c250d8b6d9c9ac2b499b2aa4af3258aeaa9ea69c96958a42a5635555d15a1c43811d9a8c19a923a1281d59554d5d3941453b189e8e4445c72225681807805f5f404d54445457c2a3a5d358971225a79c0e9caf8d4349432360d9f9a8a4e56c42291012f51545254544e4d56c4a6e1d593b1cad854558505457cea12d57425d534bca27a721a0e97a8a48653629c8855584db8443911874f504bc5a926282928a9ab62555515d696a82baaa9a725a291585caa927272622a0e8b505aa2a49ea4a6864d4626262aa626a826a729314e443369ce8c015365a5464acc9a27a72c51524d50555750575054c3a5a62629a2b1582cc08128e313f18aeaa949ea49eae98ae90a6a6a8d53530351534f545345a8aa2a2aa62722d493d3151a2b375660b0ce60a949432c36c13264ba9a5ababa5a822a3a3541495119c53811d360a9a92256b91245b4729a6a828282926a323a159f884e629c8854566ec060b13116ad0c8dc5a5e2d210aa481c2e159d8a44e3d048345a4115895555574c504dc3a1d3d4508c13d10a0d96192a305463d848b159532432305525aaca48b4321aad9c988c4c56c6a9aba191e9012a514e5055c5e2d570e909aa6978d5f444bcbac202c3668c99346ba0ac2c107555242e11874626a92922d3d2149453139529514427a9a929aba6aa21d552d5d2906825c68908c64824129b8854566e8c0d4889a2a2aaaab2321aafa0aa9c884e4b5257629c88566dcc48b90143a546aa68a442f366cd5294282662f149ea8a589422323d159b86629c886aa4c4500d891944719a922a5e3d551187544b50575653629c886ad8ac7962c2f2058c1b2851544c4e554bc6a7a761d550ca68253514e3440453847a1235356ca21a4a395d41313d31550d8b57629c886fd6acc13273064bcd1513d1002751c4aa2aaaa2d39371e9098a0a6aaa28b5d4d43454208aaa094aea4aeaca4894a22a364d5d418971225aad91a252638501961930586c8a6cd6984973660cb1a886cd1a2909443d5d199dac8c4fc4a72728a371ea894a8c13114c91d8c4e6cc95b1098133585860cc54a90103267740949494914855556cbab2826a221a8d4f629c8862d6b44903460dd65513d18a01514c46a9e2b0aaeaa90aaa8aaa58656514e344747a2a206a69496aaa58bca292aa7aa29a9a323a8971223e119d9a2c2d19ab9aa098a8ac8c565553c52727314e440cb0d48401436400eac969aa0aca5835ac9292622a323d3d89712282c1aa2216addca8b15a63a5c62989cb942427495092b82471b1924465e50503292d504427262c5fc0a879627ab2829a225a514911a1a6aa884f4b4c98403561f9026603a7aaa2d3d5506a6a096a48ac7a323a118d61da4c5945592395342cb6016364c2f2054c99a6292a26292295d10a8ae989a9e83425b585091326c5252ba62b282aa2141513b1585555741a325d89712226719992a4064b8d9a28264cd89cb962c2c44a0d165512172b4956545266d2804133064c1a2c35554e46356cd258b0641c420d87442291b8c43484626a726a2a323139e3c68c192651524628e252b1f8245565f554240e9bc43811d99cb982b2623346cd034c6cce5c19add460512d61f902868a518d18306bdaa8010346a8082603a933464422182c3360c2a01913260c961922c32325e2183668da8049636565668d11266b922c49a2a40a8d14182b355269ce602d1130c00063a4301040002649aab0a6c058b119a3060326480408c0aaaa4a0a4c1a366cc430018088a68d1a2349576cda101dc9c04a0c1830546bc69c31620463664c99211292a32446498a941021191aa0c850080c1b336da4aeacaa04207234c48890a526a2a00cb030605304d4c4543c123e158961d08c11b3464acc51508d149b35487ed610010afdca50494d993183a566009f94951aa19e5599221fa25518223ce21a366bc6646035b41b73e60c56125d318d919c1a292b3354457044345669d2480ddd88678a6c566aaec0a8c16223458565c68cd450ad482382016016abacc0a8b172834565a5068cd49a2a2a2b30c4324d4cc53454566b9c24f1cdd51835566ec05881c16293e68d1a2a306c32b03ad222183658586ac05459a9b1aa528305a689a908660a8cd518356cc0b0c9c06a80914220a263865a9d91424323a2838cdd592a88e1e401044882240000928e18413a322a221a2a2244648890202061f007f8f3f57c783b5d0e67abd1a6ec995919d9d862613f6e40f08f1b3fd3d89d654298931f1776f1a8f238243800868878210e5e0e08f77ae776dd7267dcab0d17ebcbfb3af85a9d4ba4c0bdcaf06603fc4d8f3fdaba5813fc2f85db95c015cad5e83c11a61f1ae48dc0e3e799ef2ddd39c03ed7c50d92a24609fcef829703c0ebb2dc324c7ffbe37659f9383ddc2b0b4f74c7cfa737c3bd90315e488c7b9de289c8b87375b162b842599e4ef15e19b844067c91035ece15b76bea97f8f171d8fc8d8f7b85f2425b3c4e870b64727f54605d30cb5c2108ae500bf76ae45e9b18b2e1e580eda6c3c1e3eab83f4a4f5476af4f9e68cbacf77496b8424db74be92705efcba058303c91263fd1fc1c38df83fa9b9cdbd5c013e1b943711e87e7e54cf1b69f4b54c3bdeaf1ba0b96cc71afc6db25efd58c2b647c5f13bf353f8d7ee88e1b7c529fa4e231458889ff79f9d9e47621f142d4b85d597e22dd2e225e08cdbdd6f0f3cbff9eae9d7ecd86373bba58113caee8774f7e499e6b050f8f93e3859071bffa3f17ee950206de06bc42307c8fb84f87f7c9b958601e37e4e3b8795cd00fbdf1b636fec7c29b11f045f0fc1c286e97d1f7c4781f158f2bbbd779bb9a9e07e55e0ff8da9c5fa2e7768d70af58b78bcec50af34213bc1c2dae1d02de27811772e295f4f145fc789f3470643fb13c2fcabd8a795f12176b84f771f2bc04bac67ccd873b44e97d4e17cb83b7e5f1426dde6cbe10d613e5f1445a3fa7cae32478b3244f0476af679e88d3ed2ae27d1edc2fe0e3f2f8227d5c3b416f76fbdcd4d3d94368e95eafee558e1b94f70be95ee3b83f05ee10f17142ae500cf77ae55e7befa070b1a8ae1ddaedaaf24bc87e891c3f44c75dd2f2d3817b05e35e81b84394bc8f885edb781c0eb7cbf7477e5ca2a6db15f53f126e57d5bd5a31a4e47695f92265ee0f9efbabf3bf02c68dbd4df83526be089a3b34c31fe1f91f99f781727f98ee55cdfbe04c2df71ae78bfcf1363ade5744ed89abf3b939fd4fe90a3df03833bec89c1f32e797d0f1448cbcadeb5e8317a8e4795cb46b8217a2fade187f5be097e0b93f4b7ec8eb6f0afc0473ef8cb943315c3c6a00a9783a4c7ec9d7b513c54c5eac0eee95c83562ba404ebcaf868b35f53e0fdc3b24bc90358a55c1cf99b24f84177a73af13dc2bd2d786783947fec6f44303fc501a8f43fa1c02f70a748920f03d063e77e56f6571f2dc32c497c3c5cbb1e35e5df8a33b9f13e3751d2a3d1101dea78d2b8480373b72af433c51207f747c1d037f2be26d6e5cac101e57c61562f1bd3a178bcb4fa0e719f073cbdfa22ed696c7e971bf82ae1de111d7e712f838587708ea857c7197aa5c3b4c3738ff97c3e3f8b85733bf53e0224f2ed0137f64c7fbc82b04e97605ddebd7c56ae089c2de27cafd12deae23ee1296fb13c7efb678a10bdee78d9f5dbe08d6d762f8dbd30f2d79dd93c745300444113df7eae576997921593c9124d7ced02562c0259275872c5da016ff1b737b663798e67b4ffc6f84db05e687b4de67c31321e00ac97081488ae5e5715db7ebe87f4dae5c2103de883a5ed7c5fb9eb84b0b3c1de3ff44b844e2b8460adcab168f13239a632240eeb5ccfb96b84b56eed5898e9251d3e376f89f984be4e4de392138e50a21ba768edea7c1ed02e05eebb85870feb6c70f31f939488ee22072e45e53b87210bf67c5ed22e00231f1458cf825785c1f007c2c7c0ecafddafd3c7285681802e05ea53ccf8bbba4c0df86d359ba44d4b8571d6e97ed0e2570bbb6dcaf001ec7c6dfa0dc21c52b94e2e5f071878ef89c025718a5d713eed5f73c047e36dde003f75afb9ed3edd2f246d871e530be90173f278497d3c50b91513bbebf35f9257ae8a0ae1097bf2571855b3c111eefb3c00daaf91b029fab728764b8d7aedbf5f33b2e7e4a70c9e4b9422cdcab962fb2e60781aaf1e485a471af46dc39fab842503faa27d2f43f359748867b3d72af0bdca1275ec2c7ed1abad7e30f97fc2e81e73d79213f570d28d70e947b4de285146fd7d50b59f13d2cf72ac5d371e2855871bf92e0881612c6ed1971b1c67caecbfdfa3deeceb543e45e8dfec8eb5e9b7c91a75f72c75d6ae0aa11e55ed93c8f811752e70ae13e27c20b59ddae1d7e0270bf7a6fa6bb7324718361aed0fc31f143017c8eca0f6d5d61939f52ee55ea6d5e7e88f78ae462e5b95864ee958c308a277ae327997b45e1cd684fe4c5b583748eeb89b2fe477c212c7e3a5d3b4d7ff4f5b4132e51939ff3c425b2c6fb90f822c727025566e9979cdd6b06b76bc94f244fe48690195fa362de1f5fa488f7cd79db1d9fdba25d0a7c4ecafb3cb97680eed5cab593fb9b9e6b6778bb8857d7e4e948f1b928f79aae9d9fff1d70bb825767c715fa72b15cf8227afc3ce00e2d71ef587d9c0e8428785f093f99fed6c7e3d4f8de948b1051e03f84843b04ea6f509728caebbe78215cdc6b142fa4c52532de6b945eed7c113eeef56939737c0f8aa7d3c4f3e6cfb182f3fa257f144f1a1748c6bde3c1cf2120d81f12f03f147efa5c3bf3d6b147878cf8dd19ef33ef97007f6b6a970f7f44c70b31e397d8f1b902fe67e67d08dcaf01ee15cb0bd5b9d7362fc4883372af42ff8cef9be20e09f173a4b84212dc2eabd7a5f99a105f3e3738f54769144b8392f1e367f15ec9b8422bdca1e1fd72e1715b2ff4818f4df1887a9fac27fae277576ed702f75ae7762170edfc8457dc60016f967bded4cf293f7bf71af5b83e6e17ed6b337c8d885f02f63ab37bfd5d217983083c91d9d7aeb8457ffccd8f1b44bc57217e0920f7fac11dc2e48794de8c89103472662f94c1df12f82581fcb4e01251e0e54871b1fcb85d0e3c1d416ed7f0734fbe56c5edfaf235193e1775af1edc2e239e088e8bf5c11d32de1f088f03bb410adcebcffb60b83e2c7408783a603fc55c2207fc6ce05e55f86005f79ac3bdf670856cb842036e57af1002efc3a13f777c91dea0029e47c6ebce7ed7e55e2b7822ae7bc5e05eefb887c6178972b1cc3c6e8f3b84c490ddf3a67c91a6e211e55e995cac12fea7e47ef1da15c00556f13ea8c7b971bb7ab876a4fc911a95a3e9e528f959e5859ab842b58ff3e67d1bdc2b0e6fab60486c5f9bff9579a1302f34c52bf1e30aadb84436d0b9f2b7393fa78ab7cdf13f02ee95ea75f36299f047591728c5055ae285babc99ed8574f1be1ceed7d14f1c4eeb79b42b04803bd4e46b3fdc2bb04059fc6f85d76571edd43e37ef958a3b34e7da915f24cebd13c2ed12ba5d4adcae214f278b2f42e7e90c7f888f7bedfd923e2e9016ffd3e10a41722d87cf65f14253f79a74af21bcd019f7abc8fd4afa394a1e6787ce926b8778af53fe688f9fb3e55e47b843c59f549ea88e0be475af604f07cae38a5c3b459e88f17deedceb157f3ba0439afee88d17a2c50bc1a2414bdcae22f76ac7cf11e05edd7821333778d5ae275f4488af01f138021eb7e78fe638ce06cfd1e25e4db85d5e1e37c892b22baca258622e11adf785f04466dc21c4f7a9b94237dc6b98175a73af05bc4d8f7bdd72afb80b94f2b7a5f7e9c5a3758d9abc2d8217b2e07d6f9ec8004b5c9e48f17ef9ee75eb76f17e4e9d9763bb42283fe78a2f22fb74af02bc9caf1f6ae312a5f0425e7e88ef7dfeb843073c2e807b255e2cab3819dc3b1cdc39f8b85d52ff8be02e65b9425bee3580d729f042844fc4c6e3d2b85fb6db85e5735c5c2117dee7c2ff4cf8a1e39b19795b1cb7abf743733c6ee88dd8e30e05f1bd2a2f274fef18717f70ee57ed735608993e48c1cf02eed010d7ce0077c889cfc1b95d732e19402e11ae0b54c5bd96f0b3823b54c34378ae1ddd1dfae17daedc6b958b75e65eb52e1604bf44ec71783c91a39f08dceb1113b5f14376bc2d4beddc7ec878898817088b717f7c11dac5cae08de0e36b3cdc2bd7cba9e3da51d263e2e2799cd10b4971afc23bc4c3ed320097c34fabdb2bbb58755c3b05bc8f08447abe56c40bd9e27d51fc1c063e87e5750bfccd809753e70a9778a22eae90242fe4ce17c9e37d26dcaeda13a971af553cee8d3953fc511df72ae485a47e491e6fdbbad7226f63e38920799d084434bc9c285e17826ecabd63420d861fea7a9d95e755218ae37f676ed7946b346f1d7ddca52b2fc4ce0d52e20a9fee15cd4f022e913a7e0eb957db1d52e26923dcabcfc5eaf23e0ebe881c1ed5bd8ef1437c6e553e8e9a7b55e089ec78a23fec3cdd1f9b67987bb5ba4407bc5005bfebed4aba77e8dcae0a2e91371ee7c3bd5ef042427e888dda31de6bf176c9791bd0dbf81062e4e55471bbe6bd9e7185b43c8d842b24e95eb9f8257bee500ed7ceee2e4db9d73d6e9791a7b381506f99e12502e5124db9586ceeef83b77dfd1241ee7537d11a8f5b7283512e108aa1261ee7c7cfa1f236a1df8971b1dc14088a1f5aba581bdc6b07aff3e26fc46b27e97e11fd64f24777dc2b0f7f84c7bdbab9baa77b0de37921bc8f1af71ac3d319e097d4b124ec713d5cac2c383db78bcc25d275af435e48f0a7003f54c70bd1f23927f72b778350eef58ddf95f1360a1e77f442c4f82124f7bae65ebf5ca1dbdbc0dceb0cafd3e2cd949ece135748778956b8bd233e6746bb88bc9cb35b14c80d42e21241f989f5459c6ed7f78ac4f3c2789d18f7caf4c3012e30ea76157f28c9357a7289105f8817cf3be3e7887089667821282ef15ef9b844dcf8dc02ff6b7a9e08f767f8476edca1a51fd4fd1aba3f79dc2b9d5b24c80b91b95d3c7c11a81f32791d164f7446c7caefb2b8425e1e97e7e904f2b66097ee5eb3d695717f51bf9bfa38183c2eeb85aa7e16b942053c11007e12b957decf2bffdbe17d746e99e21709e16b3a7c1c3f5e48cc4f069ec8eb7d20dc2b01f7e74b4e1ff7ce112ff4c0bd3ef03a03fe488f2f92c0f3cab8570e2e110bf75ac4d7a2f8a33eee1580af1d71af505c214517cf56af3fbc9c10be08d8cf71e07f275ca3a7c701f23c057e27e7d1f14586f821381eb7c6bd6671af697c8eea8ff8f89b11b70eb07bed72e528be0e818b75f572e87821605c201a4fdf9583e97e155da217ee7470bb72f7bac6fb84f0b51e5e288b6b07f744605c22773ef7c01522c0ed0ae2da79f23801a69597e3c5cf9fbf817defcae378b85816dcaf23f7ca041d25b70bca0b597ade02dbbcee15ccfb2870af6984543ceeec7d3fbc6f88ef45718798de8c77af20fca4ea95ca42125ca01d047e28eb122dfd947aa122e7a67caf8a17f2c4174973bb925c3b02dcae012e9608b70be87565f71ac4ffc2fcaf847b6dba3f4a5ea8cc0b51718960f839035ca227d776b85dc09f83e57f532f94e606c7fc0d7883065c327aae1d212f078a0b4cd2211c7ec91eb72b82afe1f0bd326e9011f73ae6e5f8f1b5383fc75ca03a5788a90b82bf3d799fa9171af24461dc2ee10b093dcf8a3b04c5e302b9d7392ef089e7f527d11b71c7056a62215b7e08ef77506e9792fb85e47e0df95cef7587b7fd2e993f1ef7f542d63c8eeb836088c4ee75855f3276839c1ed7c6b5d3e45ea77e288e4bc4e98fc0beb7c00b89e27103fcad803bd4f4b8339e68ecda49e08fe4b8baa3101af72b78af43bf33e0e2b9f3363c3f04c8ed12e085aae815eada49f272b2781f0d1741e2755cfc58d1ed3af23e05dc3b1fdcab123f95dc9f259e939793c7f551b9414d3aa474854d3ca1ae90ed5ed9783a7d5c2ca90e2571af167cad89a78970af09bc6f849f533fc7897b27cd45f2d839e0da717a9e95d7d1f1b83bde8571af1b5c202aeed00db74b8897b3c5ebce789f0ff70be80a9db81383de29e10ae1f0b7e2ff54b8772ee810a79fd3c0159a01eb85f789e38b98792234de083c4f44f642a49886828fe97358bc99004f64e7e7517b67170bebcd769fe3728718ef95887bc5e27f4e258aba586d5ed7e6dab13dd11637888917c2e00a19a0580fdcab13b7abcbcbb1e2e9305d3b473e8e063f67813feaba581c3c9d2d6ed7ee7f4bfe87c0137d5d93738310f8a3367e488d9f50de56c7bd1655c891173a73bb843c11e2d311e075567c2ecb0dfe667d5bd00fb9f14b8eb74bca1d32bc5f3f57a8867bc5e3e52079df9abf29f145d45ca102b7cb82bf19afd094dbe5a4439adcab01bd4670b1de5c9f94760df1426efec7f43e6bdcebef4be0da51e079706ed0012fb4c4e304b9f6c50d96b942075ce0002fe78e1b04c50f0dbf67c6ed1273ef6cf0447adca1225e37c6b563f442aeb87754b84396dc3b487c91205ee8895e9fb8d72cd70ef0761d708515dcaba495f0729eb8c02bfe088e1f4afa2247dcebf06d133c11176f83e0774e5e08d0e3c8785c1c5fa3e17321cc01de07c61781f3434a785e16f74bfe1c2cee95f63528ee15cebd7ef16648ee1dacff8179db1ef70ac71fe56127f83e6edc2b979f012f34c61309f266be37e2f8664aae1c4bf79a7b9b90c71def9001cfebf2b5259e48004463bc8f0139066e57014fa4809743c5bdb670af24fc1c107e8e1d3fe474af345c22a65b04c817597a212e1e07c70b41708551efb3758912f899c00d5a791f38f7ce9985a2b87850b9442dfc14fa1d16174b826bb4748da0967c709718f839595e07e77f4bd727c2050af0bc2deef5cded02a2eb81cf79f145eef85ff16700b76be9890cdfc6f54af25c3b469ece144f74e7e9e871bbc2dc3b20dc2b02f74bc80d6ae2fea088e3c3bd13e61231fe901c9ff372bb28f89c96b77d79223e5e47f646e4f19c252f27e9e704f066496f93e35ee7dcab185728856bc7e76b5efcbcfa22f3e7042f478e3bd4c3edfa5d61015f53e2a7993b84e9715fbe47c50f11f04462fc14f244655c21a737f3795e174f8778f1ac717feaf8db941f0abb58696e17d51d8ae28906f99a132f44cd426a2e91af061d71af0314e8c41d7a7aa12eee55ce1701e2ca317c223a5eb7c50ba1e25e7df81c1d170b839f4b4fb4a773ec71bbdafcd09dbf49e915cfed2aba768abec7f43e54efd3d5ae2b6f041df7fac21526f0be21f70ac3fdc2bd90376e17031f27cdfda2bd50043f83de26c1f3b07822392e91ad7b5d72971ce855843743ba7752f83956bc501837e8894ba4c2b503c0edf2f9a1e2ebf6fc6d896b67e91279f293cb0b11f95a183f27c94fa56be79f73e576317d913d8059bc9c3d2e56d5e7acfcd0d7e79a5ce1133e7a7efeeecce07621b9782c707f4b3c91169748f11281e3de1173877cb85fba8b45c2b583e4da31e07573dca52e2fe48c27caf33724ee7589e799f1749aee90a7bb44e506d77cae81dfcd6b67c9e7e6b8575dbb98dc2e2ad70ed1c543cafdc91be4c44f05fe96e71a39fdce8cef3ddda0e2c55a738dfab7283f270a3a1d5c2147ef6be10ee97083a2b8570d9ea8eb0aa970898aeffbe07d33bcaf87274ae35e25782153fc1cba4202b844bcfa65f43822b78bcb0d4ae28fb41e842f72c10f357d9c0bee100ded4ae25eb7b84308fc4e8b7bbddd2ee3bd563dcd84171ab3d017bfa3fa1f9c6ba778af79fcce0a511f57a8cb5ddaf2425f5e97c00f31fdacfa212e21462fa48a7b25bad73efe07c1fb885c23272f27807b85e07174dc32463978dc2e093eb7c508813bb4c313417a3a58bc2e8c7b55724efe8dced3e1e3faaebcce8c7b0dba7602b842b43f62e3d6c1c73af93d2b2f74c5ff860f09f0bfaa1b34f33e2b5ece174fe4c7f7c87839bbf761e35e6fb843742e161a2c1080ac78a233669627da43e8e95e8f5e088c273a5ea108deacf638b36bc7c9bd03e7625170edf4be081eb70be98fd6b8572f6e54def6c02dd3f46600fc34ddab93db85bb5735ec40dd2b1ad70eef892cdd4173f164bdd0d505ae799c922bf4c21576f13e216c44e41c9f37c7173973af0efcef8117daa027c5e3d0b85d3adca0a562a97939f25ee978a1325e4819f79ae479f2da19f2d3c8ff78b8d72e7e0edf6cc9e7b4b85d444f24e977516e5794bf39f95f05bc2b3f54f2bd295e88cdb5a28797a3c7cfc9e2970c72870ab8d706ee55e9da89fa386d2e56996b47e88534785f15af1bfb1d9cc7ddf0b738af73f266017c2d88db15670e15ef63e2caafdbb29783c52f31fb1f9b1702c5f7a8dcaff973b4bceecac7e1e07147882c5d6008f7eaf53e252ed0157788897b5dba4227df6b7281deb8d73264c73dedb626657372d264793a9ad4d16a9246e3c9e5ad960396366bd33679b272779b39da9435dc8e266bb6be13dae4bc56fbe96af37436de8d27d7ad5bdebed6e9eb15cdf3d1f9a4ee1a0d08494eb7925d6de6e436da8ff4351724726b8f80b8daed6993768e070caa4d0e91bedc9d464b69fb8debdd88e43ebe69f7f639e8e0ee652eb80ed879401bbdfb99365f6d2605cc5b0892dc916f03910831220437ed26bf6e23de1f1591e50d913addd1f2a7de41a4e533e8b7ed498477134ac007483249324d6e811a68e04fd7780b798a906b1b0dfcc85c4e330bcfa18bee6d9b8908dce0e0f2e0932af3683e4b715aaedb37c2b58f004dfb376d007a388a5dd21b57def395917039e0d7d46efaf6c37fc33d3101aec8c139d8b60c7f6d22d3eeea993f8c0fe495180aa560fce58db8d950b8e6f3644b1f0fc606ab07b4bce1866b6a4b9a3a12a080658521d0501846090c57be4b146d8c1f06870684e7827b0d34f83721fcd416aa1b96252f54792c39aa2e3f45c363099f0bd443e0c7af30a78327af85e8ad9600b3c26bb9f25638fc05487f75f4588640818e8f40e8b1acb0c58c97e0819f62c089e1067f152d51a06cd9b24014270f6819020d857f4902c1035eba70d9a2258b030d60b96285812a54169822252a0a9427504f4e4d4c4bc62271385402820aa6284d51a660bd0d08344f4302969e38312e5940098d898f93e569463c0dccd3bac050c509cdced394781a1e342f7150781a160668539e2625ca93a7394980664093a73dd19a9ec6f4b4a5a719894f9b5a8031851129c6175d6c91c5f38a59c54f2aa688e20923b72927ce4f22a61040f8f0e4e1a9c3cf1c7ee260030d3f6788413a7d89501a787235c5c993388a6e1cba2f17df2dfe869741bc04e2a50bafe4829727bc2ce28d08b394f31284971ebcece0c6817ba981c4e0a59bc6617bd9c28da3f612cd17d1c28d83b634e2259d9723bc0cf37207a9c3d4cbaa97735e56f012822782e1e50372889744bc11572f859038c83b2fd37800ca78007e78241990600040fed19c9f883f8e107f10c31cfe1892dd41c70fe710f14321f40c2b40092f0009ff06165420410206305112c011a42855a82c30454a5414284f9c34817a726a625a3216894325264b94103080004990d890dea645cb7f6453e0a38f3e6280010592fe090c98808f20359909050f7d3fecfdd0e787bce1ee87ba1f027ff8fb21d00f8560fe28f847c29fc950c80f839086f287fd959831e5232553a27c44858a71ca024cb6a82448a2207912a58a1428274a9e4455a952850a152a5154a4443189aaa2244a94274eaa4451a9e2e444256a4994122a514a06881a8081b721719a422412894b4b4b4b4d4d4c4c4c982851b264c9d292d1d8a409149493934d019b023605de36252acad292d148405414972969a630513265ca9428264b9454a922458a142952a44451898a42454a54912825aa48941255244a2912b338d000962bb62c6fb3f21f5121be2dcddb86559854a93265ca942952a4489122450a952a54a2982c5152854a5494b7418102050a94274f9e3c795b152a514c9c3869d2040aeac9a9e96d514c6f8b62627c5bd4122551514baa508922e06d55a8443159a2c456258ac9db922449f2b62a54a2962831834a1a628011c6025a48a8a431c617658801461848a8818556155430e184127360b8e184165660c18412441821ce106f3ed000040f36b05df035af09c0f3b537dc58a336c7d7ce94f91a9b1a1b366cbe1a23597823b418e1f44520f96ef90620a508aca759795a953046a827a72626a827a726a625a3951d504f4e4d4c4bc6e244234067bc3cb0652d0ea47100cbcc99cf98c142339b2b0c8c59e04d155618234055544fce48cdf9cb5c29f39969059a3457bc78f1e265cdb4024d51cd942b658a46808c46e39962f10cd567ce983133ade0324583320b849122c58c99273f79e2c48993d33420f4607c66aaf8ab5e0448ae9654b0e6ef622c7a5133b51329314b46a827a726a625639a3a69eaa4a993a64e9a3a69eaa4a993a64e9a3afff08f2f323df4c0410f39e4c8e38f38eef8430f3b700cc1071c647fb82106191b5eb051c6156c288147115d0881031e4e8811c41e387861070d32c4c0418a3a6248410685125038a1471d26c89418428f3ef49003093cf820d303093b7e8844194818f1070e7918d18511437cd1f9838c0c0725e4ccd962883f86200be28f21103fd40a826c6887cb0a8fa58e3c7dfc908f1feef1433d7e98c70ff1f8219e1f1e7f58c70fe7f8a11c3ffcfa611c3f84e3876efc908d1f6ad9f9211a3f3ce38766fcb08c1f92f14331bcc8e28757d48182891f2af14324e8fc50ce0fe3fc70881f06f147f1a2264c185c181cd49353185c185c185c185c18dc10eac9a989696908f5e4d414c1d00a61b8a143021b7e4b01bfe58fa7e05886eab3e07043edcde0f92d693ecb00ffc298364eff868dd7f2c40a4070f10993b3b203863b6696c2e0b0508065629901cd0e38468a5c4d322d198bc421d4935313d392b1b8810b1570f05d1af823843c1a00be39b385cb0a61345037744870c585032c746879e20d052b00a1e60d179f370884c98919c0ca8e078c60b813268999a53465c2e0b638c142419632586696335866f0e2466e052cff18c1dbf17e803f5f8fb7cbdd6cb52907fe0081c01fd007ec0179c01d3007bc016dc0da491e187e04023c963e16226d8a8f65f758963c16dd7b71e3b1e41ecb0a40201ed8c3036778600c0f84e181273c9084078e00c1031f78a09e07e699d2f4c0e203951ec8e4814b1ea8e481043c5080072279e091071a79e0d1038b1e48f4c0381ef8c603871ed8c603b91eb8c603d178a0190f14e381613c10e881c2075a00640354f3c00b1e98e681580f44f3c0330f34f3c0320f24f3c0310f14f3c0300fbc7aa0d503ab1e48f5c0a9074a017d3e0fe4e9901e887be04de881503cf089073af1c0261ec8c40397a021f1c023e83cb00fc548e18727fc3087210e5ba27e4b94e18f0f3fbc0f3bf8a0e57da872f43e04df87def750d6c39defe18cefa18b7b20a28736bf831dafc397d7c180d7a1f83a28bd0e007c0e717c0e6c7c0e721e87231e071c1e871afe8638fe0637fe06397f43df863fde063ede8632de86316fc3d4db50c1db90e56bc0f335d4f91aa2f81a869e06109e060c1e863b3080f13050f917607817a07041876f818c6fc18867c1896721cdb350f52bf0f02b64f02b74f915a4fc0a4e9fc28f821a8f820a8f82077f02d59f60e54f50e04b28f3255c7938193c1c350f07cdc3317a38451e0eef4320fb10fef810f2f810e878105078103e78108c0fc2cf83c07b10fa1f5cf11fa4f01f64f90f9a9e83b0e760cd6b20f61a94f11ab0f93758fc9b29fe4d93c7e08fc7608ec7c08d7703f66eb2783749bc9b0ede8d9b6f13c3b751e1db0cbf4d926f63f46d863c9be3b3f1fa3528fc9a115ecd11af46825713c1ab99f26a12783505bc9aa65733c0a729f36696de8cf0cdf8be8c1b5f26ebcb94f1659c2833f5658e3e4c920f83fb2b3fdeca8eb7fa7aab3a6f35c45bd9f05626bcd5d25b29fd14033fd5f453b807d3c58359f360a41e8c030f26f860765700c857f0c157a0c157a0e629307b0af23c05763c056efc04173c4de07b09c25e02105e02072240f211007d04ba8f403e047afc0346ef85ebb7d0f15bc4f82d51fc1638bf65cc6f99e0b738f92d4fbf45e8b700bd16b1d7a24396403ecbd76731e2b3d4f059e07c96329fc5eab324f058a8782c3f3c96151e0b098f25022c4d8f25890f3e7c99337e891499261a9cc16ed65c309618aba92f1078d912c589066f32c0c04d1b366bd45c90060bcd193365c88c1113e6caaa8a6a2a09d4935313d392b1c88409d49353131313264c8a442291482c423d3935312d190548421c423d39ddc4c4c40801c32a331964e0668c9b3151ac5081800a152f4427a627621371c9482c1e452142398d3102fcf9c34f197e3ae1648c1a695c8982f2e58a152e6fd18285c54a91fc62c2bcf0b7c1a25a426aa5356cd27c464680253511cd016fe4e72760e92801a459fb8f46623a2afe474fe3d14f88133ee94f82ff91c4620a185ebe2057201a7a99c24b14a4083283976d5eb279b946a6f1e1894878798668839764a41829f512cc7fb51f2fbb482d4f3b608bdb84f1138ce9041100bf1b22a2d9100979a2a0975c7eaccf847939c14b09ac88e4cb2c2f1df8a5ba387003571858a02d7c94c1f8795db0fb1e10387ccf88ef35f1bd33be57fcde9530dec6864d0dce14e227145c5001c6149d514b1a5e23a93efae8e8e8e8680ce4062fdf4c464c143458c890b15275942f6ba41566beca4b47517ee2c4a3a3e2d1d1cf0f572b90fb23fe190a1718c1cdb2e14e335e69cdd511f063702c6b337c91cb7287c79331717f6a57ebcb1297c61ba5b8c1dedda25ae2c4bcd1850b24e26681dddc1cd266e48b756e8d8f2faef0cc45f0c63c4b5d9c271b727b7ebc99d5019f07a8b4499589242c9202180827602086e1192591646e4900e3136060301c120c07c4a1500a24e6f514800a80a4bc962a1397864003082140040000000000000000080800c23b4018f99633af63a46f39aaf5b34e8b448a3bf198b570af9fe2be8169646ed7dcb8c91940291a0a8c1adb0675693e434d85117a8fc8feb764dc290629ae7ee8594f881b9dd2d74b95e656f6cc9b68eab60a05afa5eb25709fb3e662d3b3b8e2970dcaafa534307ebc54344143977392ded7c1818201f9bf09e991cb795ec2445a3334bc7168f10f698ae02c7d89d2ce7a236a02ae983544051dc1a9e54a08139c0d26f1463f34f321bd05a8bfcae27bcf43cdfb2af4e00ed8233a2eb143fd8ffe8eb6b9433c47d4ea2bdd4859483aeb95667451106562b4fd8d7a04b26ad46faed71cca34998d894c058989a2e969cbf7b10385a16705137a949b0b55f8f1cc45a31e95c510a2ad5921440420134d476f07ee4404770bf460684a92149ae9423c05efb10e821e018a8c6cb40ebc636d96c52f7197a828a45e2e825869febbe3aeffaf293c6cc9a57d4de8d7c60ce70e9379ce747843f472c1bcba5646c83e2b747bc70a3dcd9fb50ed3c601587ab650dc894bf1d84709d9ad1c385246cb2d094c97c0fef06332182288015b0962bfb58774870d6473104a9e984cefc00ecc85288a25826a20ce467ed6fd205d8120a443ebe43517645ec9a7f8771e1b448aba4e395546dc280179052d0173ae29e8c8faf847b5677d91369511cd3fc0e2a58109ea28ca12186ff1e27f17cc5355c8df4f85007ce9fc338e1f32d1af87f5fe0dc151dc53b4880fb40f647e323ffdbc88fa396e4041f058cf79d7c9472cbb34636aefd51b1a4cfac441fa91a1e6664d575467fd31141c37e0bbfcd6701bce22c4d6ff48fec43f8ca97e416fb0a5779ea2ff2e8d1a01e3400e2dc611f5a8e0de60afc6d9cb00a65097aed94471917c7a657ab44ae53d45bd3fe4fc5b6ea4d2bdefb68383caf4e4a72b2b147d3ba470bd2fb5cc6769b789268c720b36ff7d2f50e80b1aff65e8502977af12d127baff7642beaad938c25ea1d79f13ffa1c848a347b018d793cd58cf0f35d3bba2f5dc669112907f7d22fb773113fdf710a257caee8f017d04bfa2ee0283a77aa5446fa6dbbf122bea8b5a73ebc7f40c81b26a79f41abbfda79ea2d67f488abdc24645de611b10350e3f4d7e1edd0e99303bf73f11eb6f089b3eec24ad0399cd575080ba894b2dfb48772ea514320989229932bbd3bf3e24bd960a8763aeb618bdc78fe896e9e7cbcb55ff0d492c80bdf1244f16357cb7f706b283f0d56179d42829f6d898fb1ffe3a730818d17f9fe22990364938290a7a4c0e589181264f272babe873eac67dbb79a3d2148e2850694ea6fda251a336643a3f77cca36e8b93cdf2e11d08bdd8cbbb7c8f692b5e3b462e033c0ede95dadda1d6d7b91022bea5bd2845ca22f99e1d1007566407c926b6cfbd496219f49b632b4f20012798a446d99f0d14a8dee16fadbfafcb214d322b116ef0661f67dc5906bfa0a085738c063737253736a21eefd87f01b323984994c64516b8a905bbdeec4c4e507ef5381677d7bf9d6ace914771d2c32dedc6fbee72f6b5c3109776abd2f91e07dd9f598c63b79e02db891e17759eda2203db39cb19ab7a2270c19e925f87eab5d591a4bf847030c81249be31f4487af00d01841c3abe5e8225c0ed1db496b8ca6cd71d12105f0b5b0bc7b8db0d8eec3bc921a8ab59ef14d6435d8b2e5aa4dd2f80429a48538d13fd1959fa05a32e55cf9c395cd7b41c936d0377cbffbf36d499e440a07b928342d710f67e42b89d2ec5568a9371b0ad308e2e2c3a7e2972a8d47c15427f20d175154e57a55f6b106d28eeae864bab11791a6e242a2f9425993535d8f659f98079b740488aa79a376ebe2780954f3650979c14108f03c78ec85ca3df79f9c4a2a8eb7ae5bd9a0de47d02c5ec4ed1c802ebe94791a0ecdc017f6617e8100fc17a9b0ae8cc90c755e80711e234f462474ce16c6c70d86f515feea8c595bde1aac90e8a5fdb3e3095de75cc2947ad545313db424c6e44fccc73a3d2ba897d42738c08a5bd8f794e1cedcaf51b9a838a58993b8391046d4525f375eabfa7f57b74b66455f9bb4bd2d41d02f9b950407e1cd455f7d9296814cb68a5cc95c03bdf18a9dccc936c027535391118a7ae08801835eeacc891727fb88efb1cfdcc795415248da84e15aa8aad0ca04c5ce268b92e340b0c66438d4acfe3447df8474033bc6a9e7088ef6c69658132ad249636509d72c30b24551a1722995fa1658d08fc1d76c451cb57bb96cd890af483969bf880d4545fe860dd88d0b4eefcbcbf70a11462efedb24fdfb6bde73fbccf6d2ff6e95a97335cdfedbdff7d59b6e3d8ee7bc0522d4ae0dc5377f8da862d361ced0912d076747a374bd38d3f4d194803d63dc78d31e7f698c8ef589f86e8c336a27e4bf74959ffe4749c84073eb846f1ffda5be2b61582f8600c029f6f7cb45b57a3ecfbb7f95b6d33fefc732ae2e2df7c10e60288834ff6e3f4a9a11cfe1ed59bfb2eb8667e92e152fc3b2bbf4d687f4c06991abfcd163dee6922d58410e7e223e9073ec004fb2773e3fa98c9823e66c3feed34637570c94cf3e6a26fc9833530ff3da8f5fc911137694c9195be2b01dd5115176f1da40fa2d11f00eed49f833f3e466158ca03ac4656a03498f49d8f13ff951ab4686e534c942924438cfb9f93357aadcf7b0d98bb482d3a0eed92b710c5ae27c18feeb791775bd3b0b92d25ea066801a5b9b8367f392af720a0787cde08efbf254d9fa303f0743837d9f472f8da6df90b0e961c29b2680d564633a01cfca7704bbf5a58fb9f26bef80f176becb8e5aeebc5c0d75b50af95a7d6c75ec6a5ee4e89f77307f5d58d7bf4b315ce37bf8c2ef6e1cb29e108f9fba6101f1e0b536a93ba80472276bd39ee8b30d98c98f903b7af2b21bbfe0eca211b4b425a3ab121f44f3c17c78b3ff1459a9b744666198d554c5bd71710127d62884601504b39dd947a774b84cc071fbadf1010cb21c68ff476f68184d8fcc5dd0b87accb718e56e5fc8896231fce95939f88fabc967fff92f27d93402f6e7d8ed819f13175ff490ffb153f766fc1ce598ef2b94d8e927ad4514f3ad72a32931c72f7c70acd9f87fe2d9d9931d4f2ed5ea1bb119ee1e6a2bbd620c7c37911a6ed830da5be170a7135164950caf922971d4efafaf82055b42d10b7d1238586358f07d74dc3be755d22798928efe3c6ae7d0cf73c3bc147ffc01bf5ffdb0a04fc2298d68d357872ce18c952e7eeca3ae625f4ee14504cebbbc5a76e28fd85aa646f0291b343710e3e85dd0f8a900f2ccea099028d77b9fc9d3a03f7605335fe4db1dd6f6950b3373577fc842877fe1b38627626dc1ca10112db8e63f0fcac1ffd57059bfd72054d11660d9d3b820b355ba2d1b53e70a0b5812e1efb7d92ef3c3753ab32b9e9d13a9171dc7f96fdab9f25a3e6673665be4753d4c1a803a0bd50ea7cb986b1e8f65f9aaba3d24ed0170fabfc3b97ae18d7ae1ef73b56b55c8db3f47db85458e77af3cc0db65e35b16cbe1faab76669f6f6af25f07d45c0f73f1c129af6f8bbe269b4fb115bd3f58798988e69ebf7701e9f0b81ab77cbb4478f02617d5ae79fe4317ee6027f9cf8197b68a37eb034acf853ddbebd32f682792f819c5b71d9c75486bc64c11ba81f296868dbcb3b4ac2c0426f971f0907e3cbd386d18940fa9539c24dd1219bd0f112da6eb69a4e60c06dba92904020515231b27dbebcf9e224b51b255d87cd4d8fdcdae6a2da4d5f857b83ad892cd2c2177b69e75efd4ec60c566759e74ec63dfcc3deb1f25ed8db78f1fc8517b743e128339ed1aa15ae0bcccb403c23146a8a0ac516fd95a962b740e25e7b0f63c15cf41ddcc5c3916944833cf8a4f014e8543baad27c1955d9c0eabc6d85e25bce9787d1d1abe2589c8c6026d03ce3706effc805a5048769dbe8c978273043e7a3bf64205f6fc214a0c9b293e93eb5ad4ab7607ce49923e9da3f98661732602e64dda95deb350bebedd8edf9ac51462f83892232f377ce259334bf2916d4c56abbef31601b13da8ae181ebd28c47de64086eafe87f8037631359a963cda39abfdcc4e23bfcb1b4f76b91a75ae3ec97f3e091462da793309b32c0c018f3b2326c540df27507b7c63e2aed0f21463f6fc8c34cc2ad097d4e5f5fe16340ed58ea67ca5127f238b4d094a2de5e35e1e3b8ede4f3ecc3e0c4a7d15d2431173073176e27a0b95a7993d90763cac760dcfd5c096557ef89a6e89d4ecf738c27ed251ff84e0fabf08b065fa7918c1c81399d06c2bb79acb563a6a8d239f1c6faf2323fa33ed54ea67dc9a389dd01b3df34772b571416bf1e7fffca22e5d805a1f9081289c5f1bb70bdaed57335ca125846326661d9bc5e918e8c14f367d8995d1c5dd149b855ff8f830c98eeb8735ecc9e9fd2ea0b60979af2e4296feca16482e308f611e5da77e5572d72485c2678e7851ba892ee8c475b90b6f378c7bd88bb79e62ef161aa860259930ef6a810a1be2de27d6686e674b9aba8e3718aefe4c8bc1b5f232e8b787dffa545baac85879b0006f408f34e57c4b5a72dffa03b7752d7390332b162e16fd96ed1385a2219d487cf99c642a82e111f39269f38869bf43581cc81aef939735b80e7a7965b04cea865f74fadf0f9e50df79e0be1e374f0c55449de9ede9eb450d477ad0ded65b27330f8d83cce28cf5d0b9f6c445e18991a0e9ce14d8ad6d3dc4ac996b98b4fd7b639a63b4bde4a8f99235ab52f17a4933bb43a9eb641cedde25eda49e141cb5cd00a5eedda21dd98a082bceffe0666c18002974d6364bb9678beade52caabb6cc9a4375cec13d581fb1b3a5e958e4655cf51d91786be911926b1ab3bd1f0c780323385f18ef68afd2fe48ed17ded3c9a922a392f3cf4f1c5b1f74df8ff7d7ca60487cfeded9283f0b79c36d73936ebb399608e3b61a9fddd5a9bde200cd740fc1025541db7d6fd57df9f98b246d216e1a3f7e16a34af998b81f4800a8143bf6b7153cd8198b0c1fc141a790c1b846e54cab654c59be77598962b25383e7767796c68334f57c26a387003a55430ca7c98bdad52170f7691023af5dddf2d1011797dce62c365e8695c9b8747e3fbef6207ba3ca95eefab35cdc5d693196b75fe379c07cd3d565854367653c93e03843626eea82567fb589ca5fc2fcc016c9c433fb78951e36e49c91c43954709d13759bf390c7c95911a268bf4ed16138e455f4687548d53a03671eb73cdb7d3ae1889572d7b3039efa0e534c391155b7bd3fccbcb41bdee55ad620626b4d2a6b6791c56158e1071c6b3ddcd505b86d79c2765371e0dbbc1b257969c0d6a2adcb754dd3fd36fd073a642aaebc734d43b0ee6728199165951ba2d17478873f896bcdeecbb68cc354c857c7113b31874fca95ffc5a3dc9fbb31f7fed3e53dc73071b78636bd4401f0b49b7e305db05eddd052557759844fd506fc2d197f10e04916d60778bbb11d49923a97fc39cb37aff55aff5058b33b39cb44dbd26e28fc86f9812ac4bb241f1140fb22b5fa876ebc29ec3beadf9ac7d6f5c3f03dc315c47f6b34d8294845fbc662cafd1185a7f8234d5661ae763947e67d6904d4b3b073bb19fb76e4e738af9cf22b9a8196e844b2e8c42df2067c098ba54b2278c555ab1fe18be79ebb56491ba22a427f64fbbdc20f67028ae8d3f1df73d384648e7d20dcfb07bfbe9244dae96ce02af88a1adf6a8d1ee8bacf6e5cb2eb57c04c63490d4710a30caa3c078c79321b75f4de29d13fb077fbba804bfbdb5d7b3079b9d802a36a9c70cf9b2e5e11fa78e15a0367972eb93766ef71cd9c8f66d44669d0f473a14fb77f8026caf05739b4a31df56176c935609b693a809d84aab05da25d4046da442bb57065f63a77b505b2df0ff7bb51786c3c7a24e099e933a5ba0ea9eb57e12d7cc7857beb3032c212fce07313d9c5ddab23f8bb6f631c8ebf1ffd06b2275b5c1a29975c84bead7ad7665af45c3ae0ad8c38bd2e3f3d5edbc5d5617f12174c730b9bd93513673f57cf338c5ceff885e9d0e7d1d959eb7e94d3b3764738e3f5bb56731f0b1491fb4379340c696279e32d3885e2e6d9fe3ab115ddc5923ba9a6b44d39f893377b11181776be2ec9ad946f4b83cebd0f75e90f0be11cd153fafef0f32759f3c0bfefd1bff91fb4ab5778a749fdfa37862745fe94d6da3eaf1a2bfe6d9be486e95e735fd4bdf501ad08122babd1c62b9756cda7070824ffc767dc4db65aa47dfef468d647dcdbf1f0b980e73a838952678a7e77966e8401ad61fe3ebbbebb161dc10fd4b767ab676b7c753487fd45232ec51c5e1e7ff3ad6be0bc922a377097a0de476ff6ab06f0ff9d694557f0633b7005ef37b37bfb0ee65e009a2a78fb79fcfde55094c07f44586ed8dbe77e0f1b3609eafd0fb2aefd78fddeafc3610204f1d70971436c23ffcab7d6a00fccc95a0ac71a0ddbbabc8e2ef0751b12f886ed56a21568f6390ade67b508d39fba4b34df2066ae8d98319430b16f0357134780fa0df47b9615f8b7b0ecc8177fd66ff11d2b51e17e8c0182f2cb0059a979a4ea9f20af9c888f340d9968a573ea7b2f6840e4b30b03acd7d5fa17e9c98fe0772dfc7a01bff9df9f664e5ec1c77248bc6e393a3f0c494f1a4273d101c500577a8bfb798b3f8d07f6d356791a1fedc72ee6aaeffe48b0cf5d79661806dfd136db7f65cd7f7c5d7c3e62bfe5dabc03ff1f3511cf1c3a2a1c4ce975bfd4a107f9cad9992c29634e79388e148dd1f3fe3c873bf48e505c52f73ac3874e5d70a878f202867cc765e396fbfd03682ece6fdee23fb8d769e859e37ce3fabdd3b0b05edcbe6ee66c8441d81a0e8351061d3edb475a04f16f4f97a03f50344149c8425f08fc53837d9bcb25c0663931fcc43cf5df3f24c3e0c3ad62ce82fbc1e61fbc0d95af7c77f059922bce75ff3d282789e923b0cef74cb4fa0f0c8f5fa59f711b6535f50933167edad5382897f42281e3eecba47d765b1c42ef5d3ef6abb6a334204fbaa7cb2baae35c869131a9fd3bca5353e4c6deddbf56f95d9de91c0dec6e04cb70c26ee18fd0cdc9c14755e96ab16cf00872b1f17da77fcd4e4e12416e33b8fb7ef63ad8f16a53db99e142af91d8b051e71c712766dcdca0f83dddb5bfd54298344534f709191b76e744709461cd7074692b45fab279f4f1851db15c02e41587e266d05ad007af8e7e7feb25270f5345d2b8857667c960dc342cb9ac7af48ee79f822d9829faad7aa0e3d52bfeac84de596d8883da583f3c4b6ed37bd95ff5bc0decb916cee08995ef99478c106f40efbefabde7aa3ee6f40f1018d120abb511a5b83d287cccfa86d0eb8feeb01cc5e63b16ee77c0e7337e70499ae60cafddd48ee76a1dd57ac4e23b23ef038507aef70fd8ec5b79b5cf02ff7f1af6bb99ed7ba1cc3f4f1e0adc9fc76b35c91778dd6af30934c80476dd1cfd166709c306f6080fbb301e1e5195fdf9364057a43e17b07e8e51f5efe47268d90637d8991ff2903df2fadacac57b8a6b3d733d39e6bb2b28c6987ba2cf72cfcfe016ad33e3e66b62dc38fea30267b3aff43599e92148b610439357dc3ffe236cc3f3cbf69614ce59574c51eda12b3e8e85d6b04c55011d9de5db0daef71e156e970571b7f1ac5547d30519c1b00ffcb56746dc4575ac6dfe813895b2f06c819c4663b7deae698efefcda947a26241a6bbddfaa77a48dbf53d7b5d1eb57a0bf7cb9c71b069fab21f86a7a29bc67ca766b41ce7b1486d46f4ebd060727b5d8eb98854c0703100e070db09a8da1e525ae1c4d3fb8e8496f4e34bf7037623bf8b9851bf3942e97ff27a3e009be03629d5997489ea0efc4f831cb9ee9b77e2e84ff2adb7f542afebfdd7fbc95bb4fc63ba9ef68b5c9b37b506919b7d835ea0e916d7f1802e06574b11a1fc566a4ff884bf42f7aba55c4584e6570bb98a094d3cb3e64e14c68be613237d654cb1de801ef72dbfcb850e8d13b09d73a1a3e30004592937c0893aa3ca173a58a6269b43383d33a179ff17eab3bbe45164ae89ef9db7b2088d4cdcb1ee289684c83a5fa2b2e0aba775a1d993119efb9dffebc461fde1ff8ff577c83e6a4f3959c004585fdb1a57e95183cb0c87eb399dcd9a32c03663bbbe0876385c5adf58fb4a5ceaef6879de94ab065d2da9c5b5779a937ebec147224f52973766bf76d704aecf3b2e3161db6b9c3346449fe1ae417d95f7a59c606c5cdca3db5cf3e25abb160fb3a983c5861c7622ed495c28343f9671074f3aa59fe285827c2c99fd04f63f323e7c178bbffa1b48d6b640fdc608764ae0047ac3383a28d2c844b6f26c6d761d390899cbaa2a9c8d9ef9f7f07c3ffe9cce6ea1b77da3cbd5c7bb7a4af47e96dfd78df88b2b1f04cdd49fc38103b014827694a6cee31ce7aeb0c13bedd429feea6ca1e74c218ae71177a3d44dbaf7f2e7f54e13c618d38cb03f7e4c3e511996a59a99f15c1e4efe461dd2d39ada32fc95c952bf1ec6cba4df7f1b03e12a27347efeef78f9a9fa561d67297e3ff4800b1bf47ed6813d3cdaf48daf9986352fb651b511d0c9554be8a80f9f6df30170663ce0f5b791eead9f9bd70715a50d46eccb95b8f9c6d4ea66ac0ffb65dce74f133e623f3835883a02c6e496c613ce21775db4dedd977f2327bc39d0e1fcd980c19f865e8d48e6e8d2a572f321f344b6ae3de344973fa8166a1a3f133bbe0eee7de7ad4f494e12d9cfe28acb15bf32ee6a014fc52f517d08308ffabd365ea57e883c7524e0015d171da039e8fa40b8f474d8c335f9d9f2dff09aad5f13fae8cfcd76e4daf538df7e87966b175798462ae55f39f67086e3ee7dd0ebd40c0e5ddaccf3e427c34337338919f2337f669873545c196acf7e1878b2be3d3bdddf3e637d6372d147f704f11b4accfcb2f0e0148e9c3f717fc2af3bc06be7f5df0d7e01e7e84fb0c0d851cea9a3be141c34980a9eb8652b68b963c1f41664be0b4e9693b0721f83b7be97521cfc5884e39872b112d9dbb32dc67ca2e57a087fb22c2d3d85ef89732ddbe8f39ae9a7f6affed67042e8b730e70b76c493cb488f1ee98ba1df38d73fa56bfcd9147800c5da0f6d5f607cf3c97971981e957c3c9978892aee639473df6842b17f2f5f0d3e228afd38a90ffd1dd70ec93add94fa13ded1f74f2f573d7f2d7276beb70b77a5ff423ffcf6f8f065f7cf65b5830d3d2c619319cf36f940c5f741a4d6bb42b33bfe4396ce3bfe9aa73ae1fc647c9a7eb1fb22763a5d2395e5bd30897a5c25bd055e318dba5c2fc122de3195fa5d90c432de32bd1a2e91c652de37412deecabc4935fc844bc617f51f306d6ad7aafc924e7f699d7391a1ffde32d7a243ff392df3f8a5769d30622a26aba0bafc8b2759d3cb275c766dfeb31fdfd6ed65dac8d0f5a229a207c5aed961899f6550d2ffe70bde21d7d1b83aee18c2d557669162491673747dd038576d72e7b7fdf7acea7e244364371b0294473bbee338649de721769022ac11ed9e69d199cb4f4c7e3f4c27e8a736101b9ca56b8c9e6ac0b7565f79dd7bca3d5175e91555c5cac88ceb0adcd569f7d4ba005af6b39791bef401e9b28193e292c951ca75de14f53f24c80585d48db496a74d7d630e33f24ecf853ea1eaf3b1d5957623559ed1b46cf97cf8a2e4ded6f3d8a34fac06dc4fd607eea756836e93eb83b7d39541f7413ce9b3447bf8cfa2bbf504ee6d262b036e933a3289879482dd2780a1986310db9ddff3e43ede0b3bb5941a75281ffc6cbac505b9275df4405ac68b580d4d603f7430b6db29e0523dad22602f551329da8adda0d5ff8fe3af1c7c43db08f45b2cfdf6855e3959cdebbecf73979f143bbede9f7e9cb0473035e16bc765d2bcbed3d748c95576a94eccee8597d4c60761c4a7c8974036748f05d40985c4c3b799bb83ab682462ef7de23f3f2bd3b78fae8a55e8a4ccf716dd00f94ee773a1e36d7ce0785e4ce1c684cf920a837177b72170feaa327fd7086bafae5c6bef71663f38a35fffe88154f4b7ed862b47d5e9bd06be830d88f1bec5d0a6559eac391d349c228e630296627f64f68d063d8ebcfd25622f3cce2b9c6cc84eef19bfe7649feaa1e54f2fc4167c6ef334fd3590b3f5855e4f4798aee33d9700a5b103a59b166aa6097294519d02c2bdd4ce9d2246f07cd407a8bb9bb9483ca9ff2e75a4dcccb6db6bf4d97e17ad107ad4c5fad610baf54f7279e62e0bfd7d1ca213642d8e917fb9f5748c90236293d0853f58f0066891e390f20affae8036615f7fc6c4a6df3f74e81d8e93b15b41fee84df41f22fa581641faff8d149b3d5fee24d6cbb47c5adb6bd9f07507848ec37c9748c6e70d29598d55ece67ea56fe68ad40da0592e8047687ec5aebfbaf56c50c57c8943b71ffad01c2a63eec6022f87d2ec90f79235c9411f5adfead9922855f1fa76aed5271667c1255fb8c76b911a5d157f73cc4bdcea5c0db28f5c693eb3b3372568e1337dd37449aef25b17fbfa37d158d2ec7a313fe99371304e3465473a0e77890dbaa2d99cbff56d790919f8cc3ef0547228c976b7b5eca007ae7282572d03cf32cdedea381c279b145715311bf646153d4f50e3bea28ce098bc0c99eaab4ebdd9e69cabb7d9812dfa475875aabd3523f7756d6acd674b50c1dcb66f54ef31883f13957e9fbeb01d5d234392f65369eef0dcb468ffc79669bec92797f9fb9b6006f197f5d72feec8a3d34e28587d3b514c9d3cb2c6c2863ef68c57cdb2bae1dbfef0d1a20ade394e9cf68a142d158b48ab37f4a6ebcec2fac9cc243a07dc07bdf4923b09650e34f17399c8a0de182fbbe39610d2f3d42576ffac2a805abb6db132af25b7b2600d71ef34abfb25c9006a73e63e6d75fdc2fdb4ad5f8fd695f609cbae99bbdf7c054f0a2a61bac57adc366bbdb5776cb2e7e9b4dd7cd6dc93e33b08442a8946844a2f6f2bf5ca5762e5f0b66f464f3265e07dbf35763ffbee0ecd160df7ec4014fa11d99aad8bad976779ede43a94e9193e6f1d63b2065db194255d5845a65cd77ef23a28dfbc3f5c0a58b7fa8f986605e7d724e8d1f750d2f96a5d4acb6c2a3fbcac8581af19447cb30c7a53bfadd3c23aa8a767634d1a7daf64760fa996e11c8514577e99c4c47d439cca7f18a9fa6bb08cf4f7ae4373a521b20ad2a758bcc9bdc7da60d6f5b11fe3d45d1872352f82b8e3d374fd709b6b58e65eec7687f2e00b46b1bd6718b212fd2d4313b52ceaefd4933dec6a5f6cc82cdd9d745a5666159ad072e966978c8d499afbb37845eb0e8e6c7c840994ac29665aeeead0bfbb4889e05a99336961a8e9dddba612af0390c6d5c84ce0c30663a6c72511d67b877fe7426b14f76514473dadf27660fcf3fca6138db501edd16c4a82eee6897b0e0f8510e338759c76387137eb3a4de6c0fc586bc44e5f17f729f99a86e99a5c864e1fced75d468f1adb325b5daf7dc22a859d64f58dd1c910377299e9073c5d9a2bcdd57d1bb0a5e15ad7ca6db06536fb6130947ccf79055e4b8dc67d7d810b335e9836fe89f8400d82cbf81d70c382d9434f565aac874af0fdb932d88b9884e81287360393a4da7a0d43c38617c2ab6001687134f07a7c6db0ba3749e4f1372c7f90cc22b32d2279886f7a62234fb6d2b7b53e6d867d2f9099f119607d2caf3dbd878b827da6c7e223997485fdfa08c72e160a779210ce09c1db32d617d90dfd887ce8a6720bdc8c7c4cf2f12d8d02b73d14817ee2cedfadb9cc73cb082147ef39108495034dec0c97115b6d3f967e9850ebffbe9926337de86c40e7cfdd1923c3d3cb715f1837fbfcd26633cbd688efbf9e9671f0ddb802f3fa22d87c69ee8cbf6a9d6ddd91e1dd33fd0fc35590de4284d8b01a75715b576b6331aaf867104d73d8b7eea3767eadc9357f98fdb26d56feb42f26c43931e41d7fb4d0ca52cc762e36f89aff51c784bf56d3dd8d8cb97aa611dbf43a9914380cc5e19b61cc93fa6179b07c4da76987792c546ad38f6894db8fc93b1b3af6c67d1cd55f29b3a2ad87f57428a94556b7a2a3840b8e7361381ef69e1efd1c9e3fdb3e092b1b7302e9b49c07f8feddf1ad8515c26458cb7879bdf6f4686fcb4a881816eaa0bb75b6ab6ea92bd15cb890f48210b5db62f0db66ad2e77ab53aecf6c9d956655b7fc9e31b26919f2cbe5b6fc05ff16d2519e3133df9ff6f06bf48dd7e5e60adfc69f91776c3d8a838d310ae81097693b0b8bbbfb63f45c5f83b8b9859a07f82e59742bcf23797dd9f92d09edf35370e7e2d0796fef2c65d478330545606c4dc2ee11425ed63628f60659e8961b5cdbe0d2c12f86197559182a326415fe03cb441419910b5f41b33ae8bcb5e7d3b056e4c536c2e4f7db49393533a8aecda699fdad1f93a6c505a6d108f4a22f3b71626344d1d348503c46799e1e005fd9cce5f3179b41a37fa790009fcb41e0ebaee9a0236164da181ac09120c06df4e848cfe784597f4024870d5bc6eb3c061c742b348155be192a13ca6b3c3896d870b309b05b3691d6e637c2217371bfb3fa5816a81c3ebab936933af4fb0bbfbf0f64a439c3907ddbf98af1a80fe46eadec35ce62e37e5b6f631edb81e20fdbe0761adf937065501fb40b8cf74b5d70ed7393b4343ba015af74aab3953723cfd538e7eb410671fb35616904d255772034d10f8a858dcfa870820a865bc5c1f2f6812e79db3355368ebabbaea0095f104262039c08bef9cd8c3f63c590b995f1abf936d366cdde0f8493ae2f139a09de829203bd8678ebd354ccb305c9717354397bbd63d398dd983945c81f6384f21b32d25f18d144b1718f5e77072c4ec3dc0fa851b08bde3a3386b37a00390d858826b870ef960a90f352557db7c55abdd144820b5e25b54543aa6c84798e42f5755e75d2f4ce8e61687590e77c527b70c5a3be7bceacf80aa7828fc238cb2cd41868fdabcd793d49c6235b984b6460fbbed299d74be2ff75183ed9bd1a697797600c97a163daadbafeb6ab53c4b3a0d43f0825d7f91bc839018678b32d1db89972e9b62bd6b2079684b33361a87145099fdee8c33a9aea91911e9bcdd25887ee0a6966033b00b7991fb0cf52d4011d6829bcc753e4e68d46b18583f8035d62d8ba1160657beac42f27a7183b22dccb3cc2612405416345971a29a8589b59623ab705ab6dad002fd0dce2a334b577d92dc53145d910733c55e86d1d83ed9184dac99b7ceb250018a6b0cebfb7e5913bb3e4e64054b56e24e96a8b5e38d8765200fd299c93eb69fd5df7431bc59fcc2ac8b27a53e9db8311fe28091ecc5ae1a65cecc28d09b98c6d44f97deca860db528ad828098c992edcb3707278999fc0cd6fd1dd4853f890e6ad99cbbe4a1c3d18cd94daeb537455e3d52ecf14dffabce9d9842914d0c4bb296c6e9b29285dd3f7835af6e9adca23019bdfa573bdf57a846224fe979c0c5e0449be08f860b3146c3b9fd611dca7a6d5ac615e27414fcb8372803fc60348eccfaf88f3f1c79ce2e3bc80b9c75bf6583d5da6753c1c5ec9246f68d33c349f7f6692d66c23ffc4dd59ce7eeb86b92868b8b56d95a5b420686713ef77e47a5b16d3cdd61ffa3dbe1cae90623b7dad72772ac4b3864edc9fe0782d1a5a63bb63f76857398d702d457b1f5e0ec5707c67a0bb91982403d5589dcbfc11f91d77d927d6002de39577384a029b84ea1fcf2fac3e10a935d0cc1e1230ef425cb44dacbc441f5d828d86d741b65d882206e09a82ca5ed89b2db6ac43b42467da7849a4144e16575c6cb8b24857e7fa42e6627aefe7ea197df15be291f5886febcbc38e5a8a2a517e93eaabf83e7b808887a1577c7724eda9c4de978e62f2bb3bf05f7e671f9462ebf4b5b0cdf99c51ea6ddd618c98ccedb6f696c1ec08b795b6297769a196a184dfd5dd8e48576aa2862e0ddb14cc85c1adfedc26e31db630fc71b0e51722be52c405d89d931e7898d3e7d3e774bc621c7f3ec57162fee5ff487e32bcb370789cfa35b1f95a1f8c2171ad53a5944e9357e4e4f54503dafe72b20f87633b74b9816c57f874a944482e239be6814647055751c7e121ff2db9306e9a1c4889d3d465583ca782782afbeec21771827bf571c94cf2424bc2637a7be70115b54916c2b989d6128383892a75e083d775e0ab1e09ecae7578cf5fd2b3daea37d09775e5af5cab467794e8fc6298819bfe17c7d9ccf3cbcc2c84e18f262c28eb60372ef515b4205d3fec599eb0977507a7943b3d16339888d202e5e0764f83d20e795a8cffecc5511e04b31548d4b3da474aaeb00fb5d8e505e7c32ab9d2c04e261e3c6eb90b12478830ac53e47aa1ec798ce0d1d7c039d253ac90196c117bcc540908e5d597c90ad0dd8565bb2bd7967cf740e44b007fb8574507318bb6cb12e499c75faa0e18918a72f60e9393dc0224262ec5854cb9318f18f64757a72f8ca2f2203df46f46a97024a9b5e9b3e3f650f1ef03226d36fe330f9dac7e1706102f6027067ff3c82e82fd32484a0c899dc1ae27d36e1527f4c2d0b99694384ba4888dabfb0ffafc27cef0d6ae870bd3f529ba69e18ead71dde21a3b08f42a761e801a436265108fa0fc4e824eb6ec6585a5c674b4ce0202fa32e1c3d3b1f715a01b4c9803fe9deaea33bce45aa22ebabf7b9977ae218b2d7c17c7dc16aaeee2ad48c88e7e75c4fd625a34e92b2304fe025414717c5270d7646143ab3a11564f72f67aa953c42b69f99ddc8724eb0b8e74e22b8739841eec54e94157e4a0fbdbb81208ec90942846092adc135c488449817a4553b962def1d8fad89cbc8fe6e2c320b551f480813c2cc801b2cef2a8207025dda59af36ddb604d31e1f3425669e10c4fdb2e4293b403706169ef7fc3b0b6c2b0d525cf5bf522b5b77e2fe87064441aaf884b43895e99c87a514c4cfdcc5ccae3be7c0f589c389c6886bea9a792f96a3affe189e169df778889afee4a171d5a4f0d608c3ef606d9bfee7a2620da05613831d7c0fa43f31b8451026f1260e3b9496fa0049f094831ef63e0db7af304a86f5dcc4aedc510e3d13c7fb72bbfaaf47eb01b1630df83fdd395c761ec31bda853d89b807d8f726c9c92dd2d8233317b17a7bd5cbb057cb8c6f73414f7445b9fa9b3e8bc8d00ba6c82242db911a165c87fac9bd2149733174d17fbe9adee61f357af056c3304c70b9c07351c8bd7accfa34238eaa3e668a68f0d1d4b5cc55b5cca1900ad9970385a82630dbf93e11384c9fa696374a50ccc3d84d077d7b494fcdd949e40f58a7e820cee19df3bde7a92edda49896fd8814d350c3f401fade07b7e3221cb7ad130d010f3e61bc4ab87b8aaa1d7052e0e82a480e743b61711e6777e147ca723481e34ff1249e97cfa9be47354ee793089a691859bdafed990bdb3b417863a52ed51290ff63f5b6a40954612f886063e26c29f01b39d007e8577e641ec9c01ba1e80f0a36eaaca5b7105e27e780059810838bfb28614b007e3709549336ea3c7b72b2e08c713fe730b307efd4c6cd5254f98a7ca9c15e37bf2fa46587e9c79a05d0cfb7200181c31ae2ade030488dff6314e2798f89befc58a0271b39a41006f26cf00f1f9e2c7ef5340162c36e19c4c3b0768a3be394f9688a35dcbe3b1d07bcbe853d8e5085e1a09d3b8e2dd51755beb6fee893ef31a9d7179eb00554efd68dfa1194ffc8fc242cf39cc649eff7a159db0ef09e1bfc2668cb6dee7609fc80655c803984f89e354bc43d97ded7702cfd1380e406adf1d03d9bfcf98e75463b0fad0df1847297d4f80da527e0af0b0b30d0732b6338f2adf360f7db302119b7e167efad9b61220bf20e0744088b11e5e5617a151798f49f6f77d966be034dcf7b5d31ef93b265783c13ccfcf5734f6f6fe44cd825d42fc1428ae23d1dc879eb74fbe59d8b7430476e698fc302755faebd061fc17c2fc297ba7aedab5e92e0cb85a05aca271c46b260af60e61fec30012c4847bdef13caf95d2c2be0b95ecded0f45ef1ef17e1e197eb3a139c6929885ce179b527814ba3ff379d2e1e302ed590a0d93e1c20173ec7a03a84de29b5f8c4a73c7f4c1a38c9a4fd2ae1855edac149efe0ab3d318c0b77c7939be181e0a936beb4c660939e0e6055a9a7219ac12e25f69437ce5605c47b8033ebbab4dcfd3ef1177ac6e0a95f61a61514b5c19e14e09ef7d9eee983ba609d65e675bd95220d63089ec9e01f477215f52512cfc9da763d71a8f6964504dfc850270505aedefcb8f5a38611cd7e8c3896fe35a0a0c8d53f5c00528d2cd3b8c9becedd4a6f684d4060062be70e0865a4dd8f62dcbd70d822b5fb94977ec9d38655aee132b5007bc04fffa6b53a3e6512e77d3069f287b465898d05e073ac7fe9b62b521fa711e0324f9336f61bf71aea74fe177b6d33c13dee458aa997bbf44138f1efdfcfeca62725b67ae95321cddc682b0c73b0c08772dbe1ce607e305b5e4e6ed04b79853423cd731eecf90a7774e40fdd7d3b2cb03c0c20cffdd9e86a6cc6e93d837a61c568e508ec477f9698af8ffda1a0ac97db4e27fe95bf70136675e5a95d26246d3eba9dc7847e25b85eb24cc974ddb0f86795ab9f309ca50adfe37dfc854f98e6d3b0436d04cdaf5e1bb1c8f465f759a23f1f54493f5866cf27e91fa62890688fc08077f849fa015e3951bcebb4c36b846ab626a0fc2e03555d9332675484777d01f36fce6dec4fa7de599a8ab51b299e0d807c4483a65b90b347371ab1c853096b27eaae1990dc2e60ee29e1f2d59e8a61ddf2760ac17a7c2c44f76f86625863f4f902249e297cdb11707c68c3d9224dc56c95e87c8f40f80c01e34ae7ce7d45f1cd0d766361ffd7a5888f6ac462ac02ec5f00886f0317cd49145ea268ee7953db8d74f0fb7991f24802f9a901f6a3cef5fc8369b94750d0d10e513b6bc0ba618132c672dac63d0a9dba14feb7d1e6128cfe64285ccea472d082e815e5d9d30fefaf625c323e5351bf2ce81e47c13464036da9e568b332f5a6798a2c9ba8d8b44135c900d29cc8e55321353cd642ec23985db97472f122e60c04f6bb16dc170e4777bd8c730e2ef82700ee5700c7fb985b9e5aba1ffff48f3bceff2d98f14ed0f2bf50ed4b82e49f1d7c2735d0cf724e386ca9f0bea0c97989a26b07f00721300e59ceb2b58c8f1d2eef0a58ff21607bf938f1c3a4c7cd4ee4f85ff623c1a5461ee42f718831e6c5a02726ecdaef11df341e1576a0466cdce72fb3b638f363c11dfd0f08dbcfeb92839ff5522f04d2bb47d0dd979cc61806ab5daec8fcb3df4e64c85068fa63153ed5f57d21db4ed59266d0324eabf0749e64ece234861866ac323156efd66ceddf55742e13d9c9f47fa09d94fa0774a1f7d4afd34e6fb6210bdf99e7cdf81a47502245290a84198841333a421393a5c9c37aaab64c75358d34a425ab677e92b9c74f99e69f34ca662a80596ac0ba71d96e10816b17a6df751cd224f847702cad059fcaa0f598df8e9c2f8ea432e671984594baabc7bf9cce0ba43b3bf2f65e82bbc53d0e1b5e59000834f2f2eb03c3adec4f2cd53c926fcdc0ba8e7c34f0ad5c0b20f287ee012e7d54d9afd068af00fb1c0586958c332ebb3419298834866f7dd43fb114d0c3015bf65d226d3da0bed4f1635f2ff1802393a645c0cefff33988dd7bf6c8560d2afc5606f8eb3c6fe1dd6f41ddd70bf2ce3950fc81e0f20972d2e348d7ba1ce9f5f2a2cddf045ccf05e86f528ef87e69e5cf99da0b02daee5ec03d8a016f86e38ac6297aff55a47ad1d7d5fb7ec6b045fbd1011d474fa0b4f780f991c7dd47139dfda7d4ff8d5072c002ce3b065a7777f93f2b1af86a006f7c05ca8c5ea5750bbdb703e0351d82e96dc18d4f944e8e126aea1d41ddfa07d88c4ba039bb71da6649778b0319d9b8d75d33b8f26fe1a71300db7707ddf5f4a0754b044316f2f13e279a5c3c88741f82f6f93cde8b4a877300b5bcba749f91f6dfffbfbf04c4fddf939f179b2e4bba7e4ba9afef090a2f1ac0ea0a9fc6ee42fd8e8a863b31b0c3073018f56b71a0a07e2482e2953d958f8846bf249a1f55a0b84601f8e977d2fd9cf01511db5b303edb6ff19f4de86418459e1d1454b325e03b3071d57b888a7c8074cbc684bc471428f8e981ee9fe28edf1b55ee011a47f5fe5dc1f0328a6fdb62d0d7cb9cbdc2070617ba9eeb7bb98930f4a57ffd4d82c00d07c6af04587e370e74cb50fd52a5c3ef84c68e5b305aafc73221d298b490dfd0c7b90308e5f61c7a9c0b900e52a0864a00de09dcf53920f6f3cfb61f24c7ca82c9ff4362def45c1ddd81f733237578de6184c3cb16898fda31b0ef8ea1f50b8978fd0d20aa7df5448ee1c221966714e471775df7cd966402a246dff04fbfe110d8be85c598df9febbdd7653f9cfd1eb514edc50403800acec03127ba21b09a0d2a420735cf4fdb6b9d4cacd1b8a5791938899ac699bdd87676a5d60c4b596d517595e4828e866b5d326dcf97555fa5718a0a39b3fbda83c779e25bdf912ff65f98355d963c177b3e2f03973151de4e68ce8e6beddefc73d3e3f2d254cbf5f8bf912da2ecf5e6bd198ac926e2620922159607f3e1df79f37592bb00dc13803f60d8f31d110fcec15adc4bb08067bc763e8559abe506f7d4bc3ca8ea6e4d877ae6b5373e1360eebfdb0ab03987ec4f75dfaeb547ff84ae79e51a648badeb5ca9c60e01b6eb9c51a691ac18face9569e0106c8bce59651acb88ade39c92c60e41b6e99d53a6918c987ace2b69ec28689b9e73651aca0aac9df79bb25980ac7747f734f34b441c61639437a4db9e6aeafa8ffb5aa93b8f304678aa6179d587a626a4a82e888b0e08e2dc49cde093ccfb3bad5dc5122131a9d7a54a62045b9d8052dfd351be0770b6be012de547ac6b4b0b313d3495418692c687d02f4df1039ad9d08bb01cf9b2c02fc7f3b7c1e2381cd8fe5fd7ff82c9e0e4f33fec07eb3dbfd7fcfa38ec36c7b8779b5a733a7e83de629093497027e79b58dc786b077c3dea4479afd9c579f63eb818609b71fab28bf4002ed696270f7d5a84d3b644bf883f7c3bf78c6b26a43116cc9800d6dd74f61e38df1cbe0093a03fbdfc01d94e27fadf0dadf924e6f0799075fbd77b325f56eac59e47105d007c63fb78721f3dee6dd7d32b036cd366a7f5fdb52e8f2c5d0de1017861d7d2211952d78be7cbaaf5343ba5fe5abc6c0eb2e8696bd45a60c31084f274fa7337787f9c820f7fc43a12f016682f5557c0f63476d862c25b9a75adb10336f6d265bf26ce37a8751ddcbd76d7d15c17d4a79a69af2acc0573ecb47ecebfbd89b76e78de5d832fb152a88d26fe4f6eb0d686a2f5bf3ef2867602946adf5fab20766f95951ace88b679800d4f54e96717d8782bc0cdaf2132c85d720ba0becb037e289f6c6960e8989ce54fc5f6ddd10d84abbfa38bfc29248df2fd2c6111ac71e7631e08f6408e7cdf24ce4f2925fdad19771da7967ee9cb6ba367b241d8b51fd1a2a5032ef0009cd481af1ce2fa489b725dfe74c1a9c0bd56c935bfde4e06f3dc3798b70e13e602b3eeecc5ea1b1ef96c4deff0071a22edefbc21e3edef93d73fc392e52a7ee7e42c8f24e6add5d0ce1a01b17c2fe541f439436ed77fab4bd48411cb37e41f1ac87bdf7eeca281d381e0beb3e73fe575b0fd0eb692999ed649bd72ec7e25586d54d742991bd73508008ff4bc22bbfdeb2a59494ed73318f3371bf4b31eeb79fedb5e7ffb3172a90f3dbd5e1237e091fe6ccb28a38ea34ba1f9089693cc4c5a3e4ae11b9c38617e1e2cfdd7230d2478a9c716690c3a768867151411afef62bfe1cd5048e0de5d7a0bc8900ff3a23242ce82656d8ef9abe81c9ccf1b2d83794558a7d5a284cff17da609fe83ac861d426d8c1b6c5b499ae3bf949fae5dfdfe7641eae4a0dff0d6f68398f50cc27e2b9c3fc7eea37d387954dbc4f2cc88f35a36938b76c5753653b31739db3dfdefa7b05d4f547ac9133ccaaddc96536da84e0fc4d3e242929bdc0c4e126e966e5b3d28e06a61fb8bedc55cba9977dfbe570f89d65e99f1499aed3860b9e92a1fba4de4f7040a59f783a00875e085f8034ae13f193ca435e8081c7a780c49b80d779a1be4da6c68ef8da4636ad07e36cb37eedf7971e576bff00ffbc116aa5268e5f4e141bd8fcaf0fba8ea38c8fa9a0b7b5aa633d762b3038494db3dbf3e40e35264c275b0ca167c7581fde78ae9e11982bf5042b11d866f04e23a2f66ed1ef64fd694c702e5eb32af30b0355f9b99f9a6d5320337502bd54da3be5bb60874f226a232788e1d641e32a8b8553bf9f91fee39f37937a87849bbef2975ff1445bc76efcec13b7658b59ba8867dd5eb166d10f3a18763e14ad6b42b697b34a6acc225c5fa713493a5bd316f1f370b25e7e11d61f655c54ef2ff65899792d10b80b595d096de72a30b1db3041b16dc5f9f09e8aff3b7a9439a1ac00fdf8b454e5f4531673fab369c50a10e659178401fe37dae191b71b6f78d68fc5a99730d26381b10f9ab5fb76ff8eeb3fab45cd846fafa0eeb93a70c3426ce2c335f6887c87eeaef6ba43d6fd4d6af85dfa5735f7973f029e354f27f166f5e77d7ac67bdcc76c79c7ffa2feeb3affedc7abfef3f3696dd505b57b70f0e97d3dc1e16ee4427eb6c203976d7ae123e5d8fdbd546bcdecc383d6d7243f77162cb6f4f0cff2f6f7f7519c0b1cdedc9e9115c265b7fad26c7184e0c50bdf915d0765d66db74c2981787fe56032287b3d4d7028eb5d56a8edf803972b73929ba85012c43ec93fb00f6c4f195bfd9769a64bda10e1e8c102eeb84568e4b4389b1b87f94957837e57ef2c369284b03fd2e934b6823d145be18f277a5bdb7dbf34c4a610786f5570694fb01e8ed6faffc835ac1bdff85583d8636ff17d6074211e40f010564d180e3cfb499719040fc8901f1bd7160469dc23d032ece2cefa30d1e093c049f9f4f437ac6d6161a0ffcf67d1c730ff75fdf1e78710ce48238902f91a5acf04bb0dbce80668f647e09986055fcc9db3491b7e69dba5dc5e4adb3e177e480668777448e194b73f23acc8b7928de9a86622b46a8e167909704a18533d10180432f3fc39b259379483d9b878f90ce26c76137dc9d41ccc642c13b550f8fc9a1ddeb879f4d0bfa0fb18a18d617cb3bed01d8bf6acf17edb05bca503374e9d5657936984dccf7daf9a35c02fb6f60ff07e227e99d368c16aca5b7e0221376bb11786e287dc6c41599cf2c51fe9f1573d8b44ebc39ed8061eb54eb4220bece0667936230dfb3079c1d460de60c1186d7b185da67bb814fa506745374a813fb9217f689ff86ec61eb560f0dbba1dc463ac83da73493f5323de08c1ac81369abd8c14ca2fd889f950db4c386f0fe2f79dc1cdfd98d928f3ee7c52bc4d8e506f9cf90a54cdc048d7b7c6bc8483a74cf47a0cdc09b9a357ed206d909d7d7847078a40ab567d4e0bfd9104b7940b81a56e8105ee2b877c447c640f3be1066ce1873669878d7d8330f78617b6d1ba8f7e61837538df9210881978c812b43c1829875d4b5d3d33700f15ee64b4c41e79c768fe0f3d3103b6d4c786456c897c2a556d0a3553944b98e1af3f4d66cef4c18fa0c29d0e9a8f223d61286bd93dde01cfc30720cb9c003da51063bc4cbf3e0b3acd160fc0a9db4fdea58cf2621c8ded8e07628679af78a4187c81c581e0bd6db6cb1a34d386f584187caf2bbda4ab837a803379bc6b0b66f841aed659257bd468a2d3c15d47b44397004183c1887367c0dd60c1df89f0dbbf11430435d808b39d0fb3bf00d75f8a695b3fcabca4273c78807d1641c378e4eb6e107dd215ef01013ec106e648556ba25c67a113c96256e293aa8df5b8f5aef02ff216110bff668db5eb01d5f201ab3621a93785f4e8f5d5137b71d1e980393cc9812dbcd763d76f0eb73bf3be4383b4e72b6dc80f29cd743d92e18e33fe588386bc7a2ac480732b7f4285b9a61f8c38b03ddc3d2a98b5f92bd0a07cbbbc20d39c175665647c84d23f07c9f99e605f498559427b0e5dfbbaa03344b5885b519e0305ede40fb9a0b776517ccee15c3ef6d404e9231328b356033f7065d4016b3470c6bfb520e38891438fd153b0c06e6e63454af5b05be7c238ffb3ad49d56ca29a4855ebf6e60636390d52b6c6bb2300f3f6507b625dc0a878c7809ce0927ecc020dfe1c37783642093def0cd11856ff0b2be230e64094838989bed460d78529b91235723ea37ab8007c5f3ac8c371c978c528e3e209f29629393467a6f2563ba5135e4daaffa4bc0c47339cc77e4ca94fd24cf3b56da73c30c5c444db616637caddbd407c2e9b566e6be6e413930e445782fdebc9fab0fcd868ecc6362faf91aec1fa5b8d9dadebc92cf9808ff3183545086788978b68cce56a6d96b5b115fb6d5de629989652bfd3f9ea47a111b863216d26c6e1e33c6c9fc4c4d1f2ed0c0b263ac604f57b16e9add9e743b27e09854adc7f24a3d03baf5155eb047e33cf34bbab3c5c0a350cba2aebffdd4947ec7a9e71ee39962acc6bd5b6ccf53acdcd11e3f3fca814b3bb26e5063c78dac5c1c2766469dc2199be26ec33ae43a2ad50e4df61b39b23cc60c9c9e378d7a793e2d4c53bf7cc98911de9110c99705f5d096bf1204e85a67a09e8d21677b5112bfae4c706b3d0f56eee8255be85ab0c0b22c326024dbb870b059aae54df60cbd3303b0f6d3d1dd481dd93212cd0b41d793404fc38237a48469e66f61be4bca73a057e9b4cfa13c9ec5f04bc6855c684ad1cba801ef1bcd9ee326603c75fed727e8e59fc50743f8352808b791c2d4dbca2235502de98674d8974b0f834f4c1c3208ff8d5c5197cf9b202b468d7ff20cb6e2021c3696184225e2877a8e177b64b8e202de6f82bc960ae4467b50bf880cc5b678027fc01da9ff3b435dbf1a753bde186b28e273ba29433ae81558a0dfc74174a3b040365d82bf532a6d905bac43c2a9e348d0a56f80e747b0bbc21096a6926d496bb85955cae9246983347a1fc63d68808a6f8e69baa67989f2b3ee63d6f34fb0fc0c5e6b12d8bf277f179d1d19fc018a4a19cfd1147f4f587c29348ceb59c87ba03460656880a79009fac83961da45c8fe520a3b641387b055e22ff6c27b7f33316769dc41585539323ae6803083778c10342b943f998958e8419b92016d70a339619567d45a3960eaddb732e63273ec78d2afdced112f9fa2b471a99bef829afb104cda44f278ec34c3ab2232c8cc3597c1dd752911b6dba30a3db4bce7cbd93ff2fbe8d4533746db228a7798d0b920da50e337bbdc219b76cbd212d354e99d59716f00157e3f44c406756e4005c6e3d4206cfd85911fff29c276a245ce65a747664043b150c638d0bc090afcffba8c201b312a60e137d54d8206595fce3f3f82783133ae63a3c9ebbdc86330c1a1ea106e5de6a96526a4d3c5b0afb202cf04cb73a76db8ec14dbcd2ac4ee90c2ede030b026d3c09db6e4bbaa406e3f29b8e7911556057e763a3a4cc5fcb34383ee18e11f6116558a6d5cf76765c798e0eb5216ece847f41d203769cd34d6ffca936cb40a35234d79d5554d05bb6e04836649acecf3b6475d4c0f2733c40e7e262fbc487630757a11d5c8b3408e2cb3067ef7e521df9561ea00a6485bcc757cfc92223ef5196cb465c299a3f9967b42bc96ab38bf5b19ee40123a2c02d86b86ec8911b807de404eb59662139c52c781913749e4db5699c3f749f075ad93016aa9d0f22bf1def83cb9fb1ac9a395524bcb915791406ec0126a8606e98c25ec8252fe055b9da16342cf1c49f9a0dddda641181de57c2945619b937be76834a02cf535adf3b51e7f5dfba4df6dea665a9e51b930cc399c12bd64d2b50fb26e075f84ac814a9d7d525de3fd4f19296cf6625e6f19c74621967ea2f8c194d6e132815ef7c24e69aba726d6807bb4e3e4d73eae91a63d74eb990077762a8e23e3373eb2047d55d2dd319e27bd53236c5749e1b68fc2c630d7473d237a3aa31a98b173e2066193291f8769b4ceab121fd098b2a95463eddb96f2af344fe6780c8d68284fa1e8db8232e5aa917ca097ec6e50fdad52f58631fd3a890edf91847c96141cf4edf3314eed16891f0fa18e4eb818e26c3107bce98c689b06fe074b8a71ced2e3499c543d936d6508e3662393cc61cd7b1f853ccc95a1f15b1e4a6e8fc4f50757282bc814661ff88d643239ef107261d7e42225f5ff995c5be9711a6071c9c50f0438c619e838d084365a0ada2c9233b019787007cff948a68e858cd07d66e087f9c8c7c8414b1488df558277379959251968b10635e5a89c1fbab9e08e00b6584753d0d1275b51bc3a974d5daa3d69fffa90bc5c9cfd42cc0258b308755a4edb41045fd785beff1a7af364ef819b1d0e0cff88efd23c237318e354c066ded70d407cb0fb06bb1b0350c783bae42b7a6fc679f7d18cd3389c40e08eb7fcf6d1e26b02d0ab3fa1565a9a0e39dfd325ab73df97d00db6fe71c0b7926c54dfdfbbb524d7ab7589d944af59f5310634639000e049cc7b58d2bcaa20b04fbda8e2a56460c0ecafcea75aaaff988661cbae7768058c6572df31d11fbfe4f6cf9a0b673f8f627f21ba7df9b0b4a4d27b3fd0b7518a91dfdaeaa7d537595dfcdd6436a733a55b07ef79e0aedd759e993df757d57f77ad893df38598e56da70a1c5a015f509f20a57ef80389e6ade841a757696e77b65c778b5e824f2fe3c3d7a12dd6ddc3ccb0eeb9a076ddee8ad6ec5ce354540053b30e20cffd9e89c7d65d4074e29627941b755658d0ccdd77e5ea497d0e8c07ae60c7f90e4e9d0ce5a98f677d370e9e7167f1b87fd7dbbbef4a162186dde8f6c66c9fbbc63ab27dbdbdfe9c05784df737268a1b86e776eca21ad62239406538f7eae3ebf3ea6a9e1b6ce8449b1ad369dfdac354cc6526cb3f3632fb85a1279e9edfd592d1f66e94065eb0b325ff71d25fce72d0fd66bb4f6705c26f4ad1aa4c45b298c4b95824bccf279354ed3445655c895dd55e3bff64a612d76fa4d37bc230a4881acebcb8355b0dfe6339fa063c57e9b8cb5262ab7de70382cf2acaf0517f69758b91de9373647225d638fa2a88af122d59b949e4cd6e2489eeb3a9a51a97f26b570bce40564e614ece67ec05b98f90fb4d8dfb8c7b84059b95f7cc8d2dc57f66bd46b15f2456be196ea7459c767e80de4b8239a46cea385597e3457d4eefea622b761a049948d62b8070b9c4db3a0a7d5b8275d9de8aa6e6dbcca6d846e59cb0a265d526ed7b964eea34ae59717bcce22173ab0d3fe5e1c1c3d4a3b49d577fb9570dddbfde52216a1929af86baaea64dccc5e0ee3d8e2226eb2bb21ea360441b75a7f23e8ae2df183d58e2f25c1da66d286aa028372bba7653d2683d2e61624152c3db3aab3823ba9eadf28a3b04d9b39ec802662485e81aac5d86fea465461ab7214fa63331794eeabd3a6cd4a28b2342fd392ec12c646a3ead8bee65b5319dc3289f1c371418190c718198b87f3995ad31c2959b1bf149a4737da541ab05cde822881675c74b0518e75cc4d7b3d0b370ed41f795c4f4f1ecf3759cf5c346f3290b96936f03a2bc6f269dc90336260dc3d2c7cbc11bba28242eae19a192b49824ebf78423b77727baa17a6f05ed6789c3c5015796141cd2d3d4774960486859533b80e2fa7836703f8afb8cf43b8d22a37143767dacb396a8789ffff74cbdadbfc9699398101c0b29392c1d11685f64ddb67128902b90ff5682da8d0bc7835b8b86f6e72bb6351c8c308428dd9faff4e103c1f14c49f51916825a80ffcb0939180c3457831ceb390217835c6470abfbe6ea73c6b816019a1bd4d1fc73d8ef9a305f9e72b7b56e14b0493e7ae30f9e9b821ae727d85af863ab5470bbaed08c2fd1ef2b1541bc77dfd46815910d1d85c65aee323e7d0678370530b0fcc1e832fdfa393ebcf32cac5ab2eeff63b4345d629dc0ed032c08438efef3b8eb0200cdb327fa9b94be041e18baafabbfa2a692077678d2b318cc22d175f158ee196be78e442d78b64dbe128d8bdffc77079fdf94fead4663cb83d5b598766b248451b54fec42a4d600d318af43339492bdfcac7fb71b90bc65f5fb88bb2ddd4b7b5847e8e1e02e35bfde9431cbc5a3de29ebc6da74b5a7758e289c1f4e4a287bb4ca16b37a1e134f31925006554073e83d71fd412abae3ce670da7aa74aed10bd72d25a7298c242b944c507167daf95221c7b2fc334b8b5c8b2c71adf09d0774111ec70f1dbc2aa620a2979c3a033a171e5f6303ace6891721251980e7aa5e8635b2130391a6cd0c7fba17ae577f9230025279727957db8c19f754443d8c4dd26668c5075ead8b4a30c7b6cac515f6713925772f6507b011f471a32a7de109ce0573a3bde6b227c0b3861fb091eebd8d5815f951f1018f534bf98186b5e16a82c2e33b247ad74aa3ac4a494aa6131985f8e631968881a5e2dd8a289c0dbbad82f7417175d7cc94057d6c6e4ff5bbae725135c1e50015cdbfefe1e2837ceb29912e72ab743dac7740aa399a6d5d65e312186a9d26164e677f352d13bd8f8745a5b7e96b9d0fa8057293be86d0ee8b7bb98f72815f8a5877e8b710b0ee21d31f5daf9f011be864e290e1d098edc3d8394b53d31ffa3e929156373729510bbb31f539f6840837eff66885edf6c2b8f245ff6637cbc1787bcabdbdf17c463aeea3e00eae2112ead429dc496309b935a09603c355f2e60148e0c0d73e7ed3ccdc09e4e8f1783f79b6ea663f39e9ab3bad4b1e80924fc54c67b82853bc2bc9f5c435524e271bd255cf4f8631f445b3f8ddaf3fb923c91f56d65764119a40561b7c86943d0ec02d6e4837ca35df329e89b48e3d90e663e774af59b6ee818edc170f3d5d2b8e601ab32c5d47b72813e4d79fdacbe7db91ce7daae2d2f3016723877832b9b7bc89bea8c5b6adf0b976a00bdd77e6cfea3872ba755d55c6e7a256c2f9b56f2eb6287c3f57797fadaa61282cb149fb7de6f6a46bfddd31aa7762d1262f88772cac04b4d7a2027567966d2a1f5c70c5f151f3ac4fee86ea0094cbf8ebc8c4671ad400a1765808d9f1b4f4bc2193e348ab33eddbb1b2c899207722d65fe385ad8f9c5c7a69863a880d07f401da0f43bb21fdb66410e5d6bd81d2f48ff561f255eb3e8fe4491fb9750c3458fb469350ffac15d458aaf0a51beab0b1bd1e0deb9f9f5038c4dcff4721f7ed925844b4429c2f23d0617b77144ae7110065565bf98163e48f2ad8fba5bdafe5f830cee27b64647e9bee9d0139c99db5667a0924d4c2cce4524ea558c4ff1b25bff1697c2603ce2a46ed0f3c60b0a6d00130333333333333333333d3d0a18ca0d5a48f61c9df294949e96ae7ef435e479e529249a6940467263efc226df88bb4e18fd5ac2bdefa978010720f7d0fa9b7704ae2c55027ec5bd88fb570d022c3488d3d1b79cac229c74edb75c9d4ae0d168ea32a9d984afdfff77885a3955c8dacc9a6feb3c2c1ce5fff2fabce64578583c869a76836ad3e51e1d4f6a346498bafbb94778e62624ce1a464cb0fb57125263d91c249f489ca646941a6a41485634a719af2c8e5741114cea754e616d53f8d5f3fe124ca5feb55f42ed79d7038e1bb9b79c147af6dc2b92bedc76592696e374c382925a857152b79aa5fc251a498d0754abf3b2b4a38957f495230499025aa8e461f4938892e71ffbc2441a93941c2c942899f4bd25d0cf2231cd3e7548e0b93fed46b846352614a1262e52b2831354611ce97726da764b953d9897034a954e6f86ac6dc5c8e211cf3bdc53c61e39a0813211c3477432d7af808d106e1203e2f96e72a4996528070b29f71bf98ffe06473a1d428e1a45cd607c7dccf9852c91e21eac1319b999f30ebf1e07031a5682143b447dfe1c5475917386cf448fbc5d8c131ce09721a629b2633668b0e7c8020860e0e277dcb4919939870d7c3e38b1611e9c4408c1c1c7389254d73631ea204513b91911c04888183f3b69d08fda99927c9edb80fc4b8c1e9cd73dde4af5c91691b1cd3f2c516d3a4bfb418a306a70c66c2baf4c9a0f94717386ce8d881661a108306072555daa8d3bd19fa8e3103db55343366175719ad6872572a0999b47cbc39882183a3bcd86dbc7a41d442463e18c789118363d909a197232feff45888018393d0265a869d2075d7240b315e7050a3ec2b4533ed92d42e38291dcbe06a29958d5a70d05ca5642f5dea94b020060b4e720821642b356986bb8a83b6a8f68db351c5192c6368766b676c8b694ee457921945e83f15c7ebd13093a4703fa9d522030c541cd54454a5ffcaefbb7ba417e0e161051a609ce2a8712e558a693e4e39bc1001f9305353dca2031f1f80618af378d9c51372d75bed15038c529cfa72a398342acbc8bf06175ad420c5d1aa7444c4856c31718bd3028c519c5f43deed4633512912c5c96d636e29b7dbba24233b26e0e151ac002314078f932e69370d1f5b02c54975b49e50b299249ee513aa28a17ad12c6e57f4042a09176d2d1fda4eb099e235c8694ab14ab998f69e41772bc68a1523c0e0c4c1942083d07ad276470f631367af1c4acebfcf4d35f1f0d80f7b9190f4a1036f8b0e7c583104189a385f99ac26662a19cda21c80918993341744e84b375593848189b3c7be9e9a6a526ae525d8984245ab325a5bb6b6c8d8ce1335277f2ec3b0c4b984fb91619964ff4da6f7902cde43b6e03202c0a8849ab2b58b5ac52c2feb1633e82c611a74a9a4c9d5d3000c4a9cbe4dbb423cc62b68267132b1e4bfdee8e19124f0f030fbb024c1b1244ea6ad29946e491efa241287d1cfdeb69cbd3a4205d4c8a246026a50408b1ac5ec800189a3e8ccaa182a6ea66c318f38fd7a699b55a6932fed081b301a611e386030e2a092986f1263cafa1c927c7c2132b216a891458d07e0d8017281067878e8689303188b3878bfdeea6e564badb9d0a246161e2503188a38858b2969cf9b3f95f2101c68ef215b9485918863f2d3d6f69bb2414c4246d2ca12000311c70a29aa843ffd252a738853092763dce5103d7331c4696cfd6456533aa247188538dea53caae4b62a29f60d1d2c9200638438092a261dd5f5dfd33b881a032c5063cf00300671d2eef57f232c2ea606a25604719877d1ceb364a2a205448d21dc51a3d0a2002310275dfb26f3a762f93340ac29654b715d51c4629ac6b0b8ab1d19f7bf3bc0c3a306175a988a8ce4f8c3f1362b6a6b57a9a08440d4d4a39c1f4e164e5a26cd94a149c43e9cc428a94fce534b520cf3e1b4b94eeeecea8ecc923d9caa4295f65cfa09a2d4c34930dd1526c99736dd674304988753e892e4dbcab92626742780818793d01574c926635c95a7e30e675142af596af6f7eeed7012e34d9264946e45bdea704c49ba78de2629897d01830e478ba74654909644dd0a440d5100630ea74d95bc2d9726e94c07a2566802187238a5e897ca52a6a41bbb101871385d8add287a62664c1a040ec7e015768495b0debd81a8e5e980f186a3b768888f09a7e42824c40d0779c98258915b1d4d02a2b63760b4e114c574cba4979d3951103566c379ac347d49b2eb3377b1869324bf6571c5828939d7614200430d4753ea64a8a04493942c0251f37e111d21206a6938fea67461de4f6714138e101b8723c4c648172b2230d0704a1bdb841fdd9c361e889aa9c145036a2cc0c3c3c3c30167389d7c5fdc650cb3b541d4bc0811498a031c908484887878ac2521212239d00a4dc030c3c12a9f343d3f9544cb096c98bd87e030d32d3af0c130cae0578bfbfd20a9b3f0c780874716203ada015948e00b91102fde0b355880418653920b7247abbaa9e49607c018c3491a7d31655d27291b89e13c9f39e54ccd5a691c864e052fd1a2d7d5e441d4160c6a86a668eecaa8c95ab5632dcceb26ad5439de038c2f9cf2e75a0655b1eff677810e00d1d10e00d1d12059d4c8a286036a6451e30235b8d0a2c65140312fc0f0c2a9cec366f63429cf8d1a1f6074e1eca14c3a795f2a89c6ed031030b8708caea65f35ce3795ec8fb4e7c080023c3cca7000630ba7bccdbe951b4b0966b20e430b271ffb199df516219420681f6b0846164e2317d64c2579bd4306511bf92e560b2d3e120b07e1a5351ab48ec5106d80e8f8c8837185b357ccbebbcde0a61610fd281b1109d1516058e198314c490d3339ac24a9c2f94c0895730ddf25732a9c6c4bf594a825154d7284882cc0c3234788886fd1810f2b5a00630a57aa145b63d4e22bce2cab98d4747fd9b52441d476e8f848688923e446161e1e3c05185238bfc9a9dc7ec1bba247010b50408b1a2123ede1615138e6ae92effbab27ebcc801a59240f18492d3262824304185038a9303a57ed7c4c1e719912603ce1247fffacd48e65df5ec7171f01271c53cabd3842fac91ab439da8b1bc068c251e36474475ca98aea027b8980c18493f66f137e672c4c763d3c3c3c8a7d9825602ce1a8a6a2afc92274de8b22863180a184e3ecda48732fb152be40d4de5ba48b1c3bd6053092708c1a465bfa4ce9311b88da07aa000612ce21e39898cb92d49b0f3e2b5e00e30827bde94c9a0ed77099af0381618493895e49b6d1af4998a4229c368429696164fdf55956674884e3ddc6ca934c89662a08442d0b18433806b9a26225a5a7335a2f6008e124488d418eaa58259d2d02184138bd8691ea19afc2664c023080701293d624cb62896fc840d4fc719420e4c33be48687c7c877e1e151838b067c2860016f43840b0f8f1a59d4c80b2901172f82bea100cb8087878787897104183f38285137ad5a9ffc15272fb24347c88df4b177a371883c48ea9463c7870842426ee8d5e0a201352a50238b1a5ad4e0428b1a5a3072dda2031f2480e183d36dbe3de197f4f7577a706a13ecc4d27d9f2e0b44ad86eb8e1a5ed800d1e141821a4877d4a8d201183c38984a16fd334cc9d18d1b9d0a0e069cc1d8c1a9b392895a177ac1540f28fbc0020c1d9c4a10af2966daab578791835389f15da3b5f7ea271c1cf547c870bacce48a41206a2123381e20f2230ff022448401e9735cc0c343310b306e70bc38ff2743ef306c70ead17bcd54efa24e0651c3f1373e40466c94e0832dd37b48faf862c48648e75806c0a8c141a596249c870a5f3d0d8ea75b56fe39b3bb263338ba09f33ca541ab993238d66b583c33cba8e1c7e028f72749235b393bc2e094ef6df4980cb1e9f3171c9416af20d4e6bd93bae024880d51bf278ffd865b700e4dea698256941f060bcead7dc29ce0be22ebaee2d8632367e7548dcfaa8a53126f6d6226e1a9312615a7d4a5b72a72d45e34517110deda213cb5244d728a93bcfbc9ffc665d6a638a6d552d69534468e588a83ecc518baa9b67f27c541de6450d6636a2dbd511c83856e984b279e54228ad3e8f32bb9b7d69433103590111b25285f7c04d4be7811305a28ce769762b0be7c7e72048a63c819695d271b2c06adf8c4594497702568321384de1327a15ba9ac335e4a31a613a7df0c75ebbc117f9113c7d420cf3cf445c9ea6de2342763ceb0240351c361e3c34c13a6aa6cc9c232468b4fcb70797536d5bdeac98a4c1c2ecddda5549331248108d61cc20a4c9cff357fc955fa64a938881a0944f091f4dff828968108e4993c58718963cce2265e8befad8b371a87c804fc71946002ab66ac1085159638dc5b29ed167d4a8f1e44ed23c4d7035654e2a8feb91d2ac25eb70351fb2efcbbc061e3bb10792ff242aca0c4e9ff475466df46d327206a6612a7b3abb8ddcc635a4dfec6c78dfe111d1f22b8b10371a1458d1113fc088e902cbac0618325718e19dd382df2438a1c89e386124225f1244bb194206a3bd28b7cd877e1a75f8b2c6a64a04616352250238b1a233b24e0e121f22210692f92b7c07bc8161e1eef21383c3cfe4546908747d9bd87e028690603095640e21464491be36f3871f4d7d1291f710c256c5a1a3da547777f03b548088e2e6c7cbc8e4ec511a7cc7133ba29092a63a911274d67a96cdebe44937730e2bc2668d1fa263755ee8b38b5a9c84f0d164c5ba988a39bd21632efdba810592252926dbafdab77ee206ac5680e2f6c20224e62ca54ab31ae970cef214e4a463913325f4ecc7231c459f39c5966df2489b61087dd13756336b22d2b843826514b3e172bd3dd95411c33492a98b59d888aa7204e232ac9ad619b446b158893606732c9de5249dc3c204ea92b54cca3ca7ce5ca9103037f38be6c8ae9dd378cd7c58609de01225f82102d3e60851f4e55151bb2a252ea10179380c08a3e9ce2ea8995438c8c1d253e1c4e2e43da7b5a775b838b06d430b6e3025e848830600f4793e4d61c99d3bdfd4f3d9cce042d41a553ff917d701e0e67a12bea2599138bc1516a70d1801a0ff0f0100919691d23365a64c4c343e4476c8800c70e902c3619c180878787c78ba815783889414d5316d730722e206a25781c28f22049a4ff0222231730c321f223239d43454674e01d4e31630a15eab38290d5c70d9106497876387f09a73a9abcd4750351631d23224f021c2169454674205a518793b4babed6a6ed6695171f38fe86dac7173942529ae78e1a5cd440b9a3c6bd1574386c7a1f995593e1e77408b0620ea7cc3b9f1a5465ac249905582187834cb9a41b71af4a4a0a44cdffa3980848f2e2bd3071387c88d34af3bf964a0887833679154bf01eb541db206f3809551b37578f6abfcb0dc718b127bf234cfc158d898ce8c0361cdfd24d76cf68b2cf111d6c38878b8c1ac349498aaf8684a0359c844bc2a652a3348dca6ddc2853c361aefbcdc2640a26334cc331adc95ef153b994bf8786c3e65defb293476cdd77869368b24d7e1b1123ff1b39768c98a9156638beb69f90b958264f8e65389c5cf25e10cb27efea91e164c299cc2d196271f18f0f736338be599d92c470b13586c470badab8bc396e73dba6581186a3c556f60c55394f1ad981e198d29e8e17a5b54bbc73a087155f38a6cf8eb312d652ab0944edce0ba7185ee4a524b5a4c61f215e2c454674182bba709025fce2e45cff3d2e1cb7e64bc4770535230351bbd1225dfc080e1bb705fd7eac6ddc84f11388da9eedf818f122592bb470d811172b9b185e25277b861f56642137513b67362a9c1a44ad981d1faf43a47314dbc20a2c9c5285507b2bbfd6a643075871856336f57af2e42a41891d44edc37fe4c33b079bc88ff08817c901acb0c2794c143b79eec44e513f6eb41736f8463ae446925538894187d4b11cd5eacc880e1b5a30150e2a0525c93e5e994a9e41d472e477ad98c2317bc489a9a444453b81a819299c929c72415dcca75bfc6fe4d8c145990e9177d7e7e6a93866bdb9525b72c631a1e2f89733a64cca4cb69ce264f29d3c95ffeb3f648a93f46279490975b2ec521c2da6a0c14e945c9749719272dc744e9fc9bba3386b92a45768d534534571fe9dd334c2da6c37a1385fdc3aa1c524553f280e7e3d1a23266aec9f38f9ffab6edc9b934e4f1c93ea9c3669e5947c274ec2afc91332c7c9bd70e2248eddf59cdcd61c6ee2a0b4b748af1af75d132749dcc93e25ee573413c7201a2a98bc30c93b4c1cae65b38951d34b9ce44b2af645534b1c440996154757de93d24a1cc5c72e25cdb0389752e2acbe6f1afffe674dcc240e7e61c5526d9d24263192388f1aa1523649244e82cecc8c5b8212bb041287939e9753774bd0fa234ee3b6a736543c4b77c44147fc25392d49b5a4469c2d8c9d9a2c498a6162c4319cb6ffd2ffe93f5ac449fcb0bdacb49876a488633c11aac76533b62811a7249518bb359824e78c8893a484aa3a1b5d25e2439cf24a507a7ae562c5863856e8138d132d365b538873eba8ac7c88deae8610074d3a7fa753545051338893c9ce6c2c79478b8c11c4a962bb8fb6a46a4e690271de8d6e79549ceb0e0d200e9e4912cea465e67ee60f279317f7d9d72045337e3805d30e13ab52b999e9c3e96fee75bde23656860fa7feb130d7265cae327b384593f574bf2f883dd1c3498a31b1db58fb2ac9c3499dc9969924e1e1a49955f3891fbdf7dfe1789212f35b5b50d27b3b1c63c765494a9d1262afc331055da9a6fbffdf44876349254654ce917da6399c33ce9910ca2ab64572389d5c6f69fe5972451987e3ce5d0cdb8b271f4a381c5ec6e4823093b277bee1a0bc4f8ac62436429d6e388961938570bb0d27b952fe29b951f2a5d970922c4b892d6b3522afe12437f33e472629cc55c331e8ae723f15d3974dc3b1a4740b8beff591a2e19c5ab9baa327746bce704c61e62faeb3d54c339c94b978e8374992fc5286a3480b6e620651a917321c4be685922de532a98ce160a14f963cba82068b184e5246fb9273d5e2c60cc3514fd0dcd326c8cd6182e1a482f7d69c7c721ee6178e3a1b23a6d6a24a2ebd70b62b5349fc8f09f5b20b074b827c66acdd89b9e4c241c96c9229a56d775d6ee16429253549aed0a6b7d4c2b96264acb4c9a34e95593826f11fb6265749320916ce5ed2a92b41c9a3947e85d3ac9d868d7327a6b8150e271a35965c53f287aa50aa6938b75053e1944d65b3123749d57a0ac7112d4a0c5275a4d55238a9ad7d5f883c3b7114ce95b7b749d2fe2a31144e9b729d94a9a5cae5279c2c99b85a9df1cdb013ce1a3699923642f6da261c2ca9b8c8702747a94c38dac613e4c99ab284e35ea824f7c852faa414259c66f62dee64cccd9792847349162fcedfe44c579070ec6c53ad72523565e50887bd3c6f92febe98ac628463a574cdaa5429c261379398a427e98d9c08671993e6c24dac543e84d39932ed97f27ea65c08a70fb78eb194d74c290807b9d6f470b72f7503e1a474c91b8dda5dc1fec17945a8a65ffddfcc3e3829b933eb7dd8baca3d388c90f3154a3441bbe5c1c1c2a9f096c90499373b38e92a496efddfb4dae8e024c595a0b55f677ae6e020ecc4924475134f5810072761ad046bdf93ac3dbcc1416bd09b2d939c5e1edae0ac664aa624d7b467863538896a62aec9856c50210dce192e57a5c572d115cee05cc2e85292a05692702283536995da7a1fb5e5032006a735a17d74766cf21d003038f89958b84ddaab4f0078c1d9a4acea5c690d3102800b4e4289567d9d1b4c0a01a005c798339a94a86cfd0c00169c4c636396ecbe59e5559c4d924a3db652ca17abe220e34c104a3e7153c9a6e25cab49ea4bd199828a8a63b8567351e5df9639c5b1440b93a4a0c4ed539e290e7229290f5dc2c998bc529c4b16f11d39f13d548e14c734a1339a049354b6dc284e4a96d81ce69559534e14e77891dfecb927c5ec4271d0bdd3f5ebb4709280e2701b3faa4b4bc6947ce22c3732a994257ea7f7c4c14df41315cfd24cdf89a3df5eaa0e25d3c69d13e7134db4e6f34d9c426b5bb3b285b1244d9cc29ce88a2273ef77260efa4c2d09e22475328c895398943164bc93deee258ee153d3497a529acd5ae2244dce4b7e325689531025e37966efac8c51e27032662f751645e46993389f693229f59f98bb34499c2461445e0ce24e988b45e2a4e2ea2aaa9c1c331a244e32a6929497307392688f388d09a1efaf1932e8cc11272d2a294d7fca4b67d6889398bc24d1a6524ccf8c1167537d6a35327c89962de2a0bbf53c4c14715075828aa14f304f1371f81026c45ad8a827224e495eaeca1f32bff58738982426d1244985f6db10274128f92f6fa2661415e23c32645488fa96a909714c57614c09f16dea419c5df64413a45baa2788b345b1af78117db1401cebcd4c9a92a4cb6a0171ecefed12d48fe85eff70aa30265efaa927ee8763d2704126b11e972d7d389d3adb7c1b912605f9704a967249f17bc2a27b38ac95523657675e393d9c92c6cec97a274b491e0e76b28c0699242b1f0fe7f11dcd20279b246d77386aca85e7b7db49a9b2c32964b2f7ae5452fc7771ecf8b8d119b805c415753849ff3f6562ca6bfc980ee791496eaf0977624a730e67dd9264172dba2f08cd1ce20a399caabd94fc77250555a2389c4bb455c957f2962429e1703075bac2690b5ef1866314934ebb9e523b27ef86a3096be1ef9224694c92da708a2eba5b33c90a13d46c38a60865e29edc1ebb98359cf228318a12435c674c351c4bfc5042a54d82c9cc5d9186c3ea86f5a5941773326838e51053d1e4553396f00cc7bc18adee4298a9be3c7085198e976a9a51c4a5307f97e124758d5bd57e690a52321c5e648a167e296f9a2be48a311cbb7d47b4a89aae528be11845a649429892b46e4a18cef635ba6a253e448f26b9020c47cb7db28d8cf19498a02f9c6d749358e934480fd90b07b124baf24c6c5119ff8a2e9c5c440893e3e22879752e9cc64f1425ca4585b2d2160e27b9a79ad47016e2d6c279c4ec8598d655ddb37092a4bf0c0fada27468b170ccb3d36ad520bd4d573898ac9bc45adc6fb76a8573969ae7ef98d09ac454e170d935afa96913c4a850e198e4d618f54afb8f760ac71499e2d6a48c4c3252389b74e23796e493eab2281c63d8f74ab16b2628d5155038bc56e52861b692a4ad2b9e70d4adcbbed11257d39d7010d2b32c6c7e5734e1a0bf71fddea2564e8f092731b3c93159313b54c6812b96709031764f3c698496e64a3855aea5d1ba2765a7aac51549583de4bbcd3476e64c29cd336fd414f495749bba020927d5997bca2ba60bfb118e2b6a6aaac46f669845fe095718e1f0657a4653a9d1a0a48b703af911779b2be6f644386efac5df98273e640ec2154338a54eb17c277f4238c928a276af6a9349b70dae08c2614f7f75094a92329e69100ae8877d710510ce27566eea8a72514cba3bb8e20787d36f39f3bc090957f8e06895479c6a0a2ae4fd3eb8a207470b62ee9bdf1d42a630e10a1e9c3266a385689dbe3b41aed8c1d94fd7ade90b7f58a1832b747090564990716df2ead5200ae01c9cb4e49bfcf1233bb382a8ad8e33e3c58fe8f842c75d8183522ead6461cee343938526eb3725224d779110119193012f6cdcf0f028c1153738055575cb2e2b65ae5e618363c9a552521b34a7a5a41a9c2441a5d0d9d91746651a9c4a6b2a49ff55ad4cbd6206474b351e3a4ed44d476ce0b0f1f161b448800226a045034cfa30c6802b6470b4f550cd0ebb7253526a70d1802b6260cc32b9f2d0144493e54c2677ed5ee2edd2850d64233b72e078c09999c815303899a4bc3af42f86065101ae78c1d1c4e96f918b6d527c171c33d9e697709d2649f22b5a70fcd3f94af1c2a653af7ed80aae60c1715488dd0daa414929b64188b18a531469d2a69c7c134d5908315471bad861f12461954ccc7cd114f0f0f8b04dc5490ca5424fee5fabcb6d812b88818a83c834626eabd468f13c3c3c3e2ce9b0e14531e614c794294da9117a3597a08bf48e0688fc17ad85294e31fc7dc961e5bd9504511309f918f92e8ae1d8b13b74a0958215d7949ab9d282a8bb9e10b24675454bd64f108314a7ac1335c6116e3f423e8a8378b5d13daa41359344710a93d3445ca5dc68d1509c3c3c7c2f9999301904c5419a98c4bcacb34ade7fe2141a638c99541a53798ae109e3a2664b315a9b9aab88ece529613685ed9898189d38e51e5331879aa864b14b2bc4e0c449e8c9d855296ac9db676ee268822e0baf63e1524e1367f9d4a4a4df50aea16766264ebb39a38c9b30499252c3c4512bf7a8249cee563f3fac5ce2245a83b450537eb527584d886189d35b70136412532a35e9acc44937a993eae4b2829612e7ab3c31c3d69f2c3d664ee25452fc4a68905d104312a7b8ec275b9035bd495b2c039b458c489c4625412e56db9f7cf5880e1c215950c0c3a398a285189038091a2fdcfc9538ad4bc0468e04647221c6234e4a689c5c3aee3393ec0b91111ca718098a91001d71102a5926299686b3dacc161df8f0188d385a9cdb24c56ffeceaa2c50238b1a55811a14d0a2869a188c38051be935bb7d5290e3b001f2f127b0a103083116714a4208995bfbe476ba206ae6003114713819d635548adb38cbe7f8820bfe5824c448c4294cb493963cbce249f2f028fb90420c441c4f4ed07632a62ee99ddf781b0cf0f0d061be183927c438c431296de1179b24dbbcdf8b16690a7c31f2615f8cdc116218e21884929b3c3396db560a7192e4fa3fcba3e470556310e25ce31a9f97d743d31f631027259936b59a5e227e2288e3a6b8a0fe4f90b94f02718cb15e4c832c7929348038e89651cda1297f38a933493a31990c2326551890a32550e687b3cfa597e42555d8e8f6e12053895143ee9a6a5c4662f0e12489f9e4ec132e45863fc61e8e21b64db86c9b7299146e410c3d9ce436a98ba7a4e83d7f8c3c9c64495a319eca184b50db0f62e0e11c1aa7aa622a59dd478ef6426dd70131ee707613454be76dbe7aa662d8e12409f28485cd247e4214a30e27e976215f529bbaacf853c0c3c33ede8b16494a1562d0e124a868a9d925176d2d5c700c62cce1248d4c4b4a36616f46480ea799d37f7155be31a6389c82bcd8e3a515381c84e8be242e8ddaaf50c0432424878707a7c8480ef4408c371c432be42415a69a238fe18642e432537aa514365b99255d82e8de11a7b64e31da70b44d274ca5f1f40ba2101c1f31d870ca21e6425b29bfebca1a4e1a576272259304ed31861a4e2566bf23cbf67204c448c349d396d62be117ba94a0e1987e3f5dbc94e496f7198e1daee11bef45de04cd7050324af651fd2f91568c321c4c0a724dba293b691519ceb71983b610a559f2c9180e3a8305ddd1a5493269319c7b540edf11fffd3485e198e6b2777c2f7bc9260388018693244c32a57a55d48406a2e6c5173ab00b1c3616637ce1a8a633a9127dab2b49e2855389d82c9b444b89fa77e1e42236ac2629a52f93e6c2d9f7fb6347eb65018fdcbc6a4269905904a21b90d187630cb599eeb4c614652e6641061f8eb6ea1764a98c1f262b630f27d3663f1fe67bbff91d373a03653d90a18763ecdfd0e26f268bb85499c8480e1ec8c8c3e9366ef3668fa82096818793245d3051c9b7aec47e879320747d536fe6fc8676385f922b114de174acc3d13569da24df224d5d0fc151a6c50e09ac711732e8700a42a9dc996f2d5b9ae670f60fd514b36cb194a00c391ceedaf74a9276ab33cb88c361d447b55d88d0cda70c381c936ca289d104e125cc35b868400d06ecf0a206032c50c3c3c3c343c70d64bce1b4e1c4f63475cae26293e1869329b192a97f4f7377db702af1ed9794a7ad76860dc7a89735ea7755e9e61a0e7299a4b86a37aac47564a8e128b341de04f1a15936206a3abe0b1c0d92c5043c3c3c3cd08020230d671372266c5b3461ddea908186f37ee68c8aab377944bc11c838c359d42e262dff2bcad2202ac30c4713fafe6d2c36b7582c5521a30c677d933c357b0844cd8b1d38fe63c4860e1b2428abc14503466ce8b091818f0f0f0ff7f0d8e246db10791dbf000f8f770f8f7791d7e1e1f1e1e1916c88bc173b7078788cfc8e1188740e0f0f52c820c331a51864955dc9a1ac96318693e4de962f7bf4fcacbd830c311ce524d95cd398caa7cabc309c925f2c95743329b11fc1d15cc800c35983693639cdf4c64d7f8cbc8e17b9ab808c2f1c4e49fa4e47a81243577624aa850c2f1cb3cc6dc915a633a60b67afafb85252f2731dcb548f0c2e9ccf4f44494166092797260232b6700c667ea25c89ce70293ac8d0c249cb7565cc71b25ee5eb0221230b87dbe0269a78fa62da0b034206164e2334e7fbcea85842fd10097990d459fc41c6154e1562947cacd5efb566906185e3658990933b62158e65d2bfc4df450432a87034a9f23595595be509a218c0318133c7b1e30347081a8740c6148e164c0e21f49c52385892bce284faaf949440d4bc78ad828c281cd4a860ba54796e892a881a140e6bd1749d107a43eb04a2f684f38c5691973509dba33e894e4057ce89afc9842915889ae3e80f91779190f42278439061c974527f9af4db10e1c204210af0f0f03741082a1606194c38888a5deacd45549f6c652ce13833268c57924b1711fceb284a38eb9f124fbaf87327a6b975808c249c2fc95b41e8f8ea7f7ca7051948386fe9507a634af9a4141ee118cd42e5b4922b6955d68a156418a15449566dd283a895a045d68a19c828c241e685dbae4b329ee48bc0504106110e3f324ec79aa4c5f25d969843c610ce6972a29b95b5340541d4300a328470ac31cf32afedec01328270b0af1cf2df9beed36c903328c800c23163966fa68a2394600251f32244e40b112e26e000bf6103240b0f8f911d5ed4c9f8019a33b66606adf28c3166e66f4c2b79f3626e453ac78be4d012b405cad519dba2031f2890e183d36c8eb451d1aabe662eb4a881c3468364e1e1617a708c27c927959292d6b5fcbbe11364f0e0546b52125fad244d92fdf8027dd489848c5ce078e8f0f0d0f136466ce4d0e180e3e13162822f4490b183b39cd6d0142e833295d7c149b6d206ddda156a7a0e0e2335b7671233a598acae06170d48fab5481c918183c3a992a529defba425dde0a4242154ad3d54ae8b6c70d8bb112afa894d4a946b709cf3da1c194d45c697060775726c10b5be59becee0746e9a4bde732b6d323875c9a22b5e9276d5ca181c7cdfa4117662da51df0d19303859cc254449f5d1e4a78c179c925e34315a0caa810c171c448b97a463366bde56460bceea63bf419469748b0e7c88c860c1d946f75ccdf9093eeed98e559cfc2c930ab22f962d461567d16f2783faf593cceb0016a938ff5c49f184b8afffff700716a838689364a9d166523bdf406ed1818f0f2c4e71388b495e4c173749659be2385ac747cb5685720d16a538a79510fac6455890e2746965a92cc6993c3a2c4671f88da784dcbc0893ad2f5026000b511c36c67062bb7a841c53280e27a567be998a963f28ce99f6cdc76ec792fc13c7bc0cfe2554d470e2f4c4e192a0644ed7cd24bfa513e7df6429659113c495249c3866952af96a439b3879fc26bf6073a7764d9c2cfbdbdb9f1c9553260e4a6f9d6e1316d3441f1327c1842ca53ded458d2e710e53511e422c474eb7c4b9f47d772db309f32b7130ab3c492a0b637a52e254a5d2c647e5c81ad3244e258f87f8df481207215476d7134691385c7e0b6a378dba5cd290389820a36691e97ec4e9369e925f8330b9ae1d71122f66fad235fa243937e2a0ee2fb9a6b6f14b32234eb55b5fe12abc88538a49320f6dcd27e455c451b3d76489123d5db38938be57ce916a416a5f1611a73496164c099a4c09ee210e3323e3658a1133e21ae2244eb5a61be12334490b712a99a2e3f67aaf2125c4319ab455e97ef7aed6411ceb4ad23131d3a2a92a88932e21836a1274559d98409c4b504a9252f6429a8c01c441493d7232eacd493af38783f44d276a65b6c1337e38292f551142caef5ab20f274d7dd97bcfb43f4b3e1cadc486d36a4ac5bd720f273169651c8b29b492143d1cc39a586e2a9b9482bee4e198d4d96b9d7a9379173c1c8330192ba51ecd5d973b1c46555399e691676bb1c3b924a929a694aca496601d8e79dfaea722fe6f83743825adb92f949676c6e01c4e529ffc72324511cda01c0e42e3f926552a93055d1c8eb7e2db75f1fb5b3e381c336ebce4b9ee0d4751e5193426316ef6dd700edddd2aa72cd4d5369c925ead512ac99de5b1e178269b297773bf50d91a4e254a298bcd1c3289abe168c27f6e085d826e380da7184bda1051e6a751349c54fb482dd53f132cc5002cce7078dff0cb246f92f1c40cc7607a17c4c6ee512665385550996bff65fc4ac870d6bd51523449ddb8690c273db9845e9b4d1d53228673ef78f5d90835224ac270b0309b4d33efdddb09188eadd935f4a890d93af9c2f14e94a4ae252f5c9d78e15c41a930a6d5e7ec4dba70fa53ea355d6c986c132e1c5b4b63afb886516bb28553def99292c69c266c122d1cfb82eeb21a1bfd99240ba7a027e5a933b17092e2cf045d62de897985a3fa5d5bb4aad0205ae1641bcd4d0e7b13134baa70dc909136a334535f09154e82cb969ad292362899c229a8afca2132c568265238c588a619ed122d8ec231c3d54fc6a4b152281c458545dd24ab28f39f709294b07acb98d9dc3be194476c5812aecf5f6fc2c94e58062166ea249d0947fb8e5db360375b5ac2e944bd9882f2b41c424a3866115da26e280927fdfefcba53b9043512ce677b270525fc581ce124b37cc635fdad227e2c8c70307da635c929a51f3f16453889dc9ba4d952de8a1f0b229cfac479c967f8f6f7b118c2794e9648cbbb39fb3e16423865a5e950bab2dbba8f45108e7a7e9769a2c54aed63018483892b1b329eb45ae763f1836334b1cfcf43092a9a8f850fce97275389154a4aa7f258f4e03c27db6ec91bcba3f258f0e0d85b7a8488a6b2123e163b38bb6ac9891a75b3748f850e8ebba1259578d2f2e61e8b1c1c3f4cc691a332366f8f050e4e2a6e55a4edc63b491c8b1b1cd4923c6216d4a93e712c6c70562db5a6644c253d712c6a708a36737592b8ee9638163438856929f5f7f7a6f48ec50c8e79534ca799f89a7ec7420695ed5c5033c7e02426215c644a5964f63038e9ba7ee9cc3b7afa0b4e2ae6ca994b8ab720171cf4b275f68ab824935a7098d1bc6459e4ccc5820507252eece6efb0248657718c932377befd2ea40a47254168dd573d15e7d1ba9331aba838c9254f830571354b4f71f81f65bf6316f394a6388a6f52dd6849265196e2bcb12a9f0a932b9c14529cb45bb99a5b66b8cb284e4a9c9d92b527b389a23897cae51e5667266aa13855924c4e5e96e9690e8a835957126483a97ee59f388d6714116254d824ef8953ba146fe362b62abf134731418ea8658e5a3971ac503df72e162aea9b38ed5c2af9428c5fe69a38c57f9db814cac4983271bc6c4986c511260e67712706212fa9b92f7114954f50494c5be2bcbeab771bcddfec4a9c43e75ebcec8ca74c89636534177da2933808d17e9d1937e61395c441c78e121a34362f1a89d38599182d73ca8b0c244ea641fb74a8d32e328f3887a9b1773b352d8d230e1a9af26fb2d5f4d988c3a6998b7b277b879211e7f492d955a55cbeb288638e7c39d94f92f1c5a4882e53f40c0f3111e73031ad335c26f11d224e76524c9d86908ddd210ea777d59412aae3c492214e41c9fa9384bdd4264b8538c5a445cf8b8eda8d25429c848a5095379fe8a1a5419cc4fc2531657c4de90be224854ca65d7e208e72425e12af677579401c37c90fdb38f2dcf27f38a59f99f2186976e27e3888cda3ed5eefc3394eaec60dfa5e5ce7c371a366ed1dcd3a75dac3a9b2f7c9ade0d637d2c3b9822a71f486e911771e8ef2a7facedbdd5fc6c3e9634f29cf14cf947c8793349594344ae7c674ed704c3128c9a47f9b5f4c1dced626a9243b4387d367ec136cf77f343987d389502677f54fda8a1c0eca44cafc86280ec7d4ba9b4608e170969f93b182d8e0a5379ce4967ce227db1f1a72c35136f389298916bb4bda706a79bb13d57b42880d87cdaef43531b2425fc3a9f4877d6999ad490d274952d98c416593c2693886a5f8a12ae5931e1a4e4a684e5382d219ce6232c7c78ecc7092f535c8a4e2e73997e1bc23d4e346fba82426c341b74486f3ea7477c7709a116fa2a8d118de8a61b524878df5da6138ae668e30d957eac434188e75a264f9757999a6bf70d80b27835b49d3cfb4178ee97268b451f9542ddd8563a6fc1acf2bcd8593264198ec0ca7b4e87a0b273927c98d38514bb65a0be7d994647e28e15f539d856385c5ce712f93e5040b27717f572688db0bf915ce226249f8af8cba262b9c37e593ab387e621855e19454ecb4ec5f252a44859320bae46ed5dd60d25338c9d6b553e1b54ba9a5703ef1132bbd7d5aaea37030259c58ea62d3a51a0ac77e6d4bd50a1f99f909c793b7d7524ce7a25f76c279733d9366bc7bb9dc8483d01daa71aab4ca8699700c17a2ac4dca2da3e1259c526a1cb915d3c78eac84c3669eadd399c16fe4249c4f4f10659f6142e51809e7fe515bc24eb0b68c8f70ead1cc1a2c9d0a7db1118ed14bcc149adbad9414e1a86b929cafded22d21c249c5929a4cef4338c9d1f67851ad0c72211cd44b9a5fd4f0be7a10ce5961edbb45b6461d08a771d36f194f9a78fe8393c998b8b6f83fa7e483530971bb5925774ba907a76069e3bdbe92d96979700c732a2cb95b92e2b43b38bdd85fca5052851cad0e4ea6923619750e8e3666a59a744835591c9cf48276a78c9690f306c7a4244b6af2259d263638b6c9a7463f0d95d6e05cefd6a7d57ef2526870940b224dc9a6cae4710627c9624d6b102e622283638ba92a752654c38bc1295a4ca5dae4971482c1e956e404953d4d5eb52f3866e5ca78b1df2177c1f1645ea7ff95146fd282a3dddb883799d14d0160c161762c88136405e1aee224789a14119b8499af8a63b064a207ca3210800e4eb20925f76c5e1053311d59082007278d1bb75c6b891801e0e0245e8a49575f738bf90ff8f8067878f0161df83881006e701aad78c1aea2e838f9ad81006c70d0db2a93a97f262a0ba2f621f23870d8c84608a006a720c64710351d1e1e3a4af037508f5c60e41b7003d9e8c2c68db38f10000d4e15fa4bc3d6e913de82a82d0626e0e1a143042121205c64a1e325802780199c46b9a88a52d394ec8f91ef426de41b300301c8e02036db665016a3343a3ef60e2180181cf34c0aaa64a6cc7373e81738bab071810cdc161df880110701c0e0b0269fba52ca62659e05f08253da1467625e6297aac8480e1c0270412afc4c2f6ef0f21310b51001b4a0b8c9fed32d64b704a2e6e171c346f2e1de1e1e365a840b3e91911c302821001678e289da8f5c999307510f8f338ba0b18a7d4d58f8d09666f7ab22cb9bf6152d0553e6a6c258a2b6be524668a022c90435f1b66b627ee346a71dd921011c0c480bd038c5b9f49a0cdbfa22545c0f0f1d228fbcf8d7d10aa0618a3acb5205f5a1d7d4520a3eb36870eb9235eb0c66ad7156279d4ae92b29ce99bcb2f43bcbd435a338a978a515278a8931e41c020d519ca4be343166554271cad5313e4a2c31a3f8a038cf8cd49376b21ebafac4417a5a970ad327b59d78e294d48d9570574ab824de896397f98eb5c84a4abd870627ce35275e4a51312559dfc4b16da308bbde7c71e68d1b5d7e404313e739df7b13f7e4dacb89fc8d1b9d8587871a106864e220ef64da52b9a46eab5ea45802fe066a2e4ad016b02b418b60e22444a69025d789726226200b101ded80bd1ced05f2254e2576985c9631426b8925147d76313694a44a9c3566d11d4a5f3825662971daa4fb59496b90dfe9244e29257d2784064dd2c948e2a419cdf2a5245ac3a644e2707b22e25fca248b41489caee6425a36dd23cea5a453f92ae48863a97473933665cbdc8893969894eb9a8708f11871102af5cf86aad36bdb22ceb179dbe4b9bf49ba2210263a9388e30615b4a9cfaa1374858883b694744f589618a3e41027c92fb3843f5dc26c89210e26eeb888c6e8e1962fc4e94c49fbb6db097112cd2b5a0c4a33fe9e0671122dfcd6e5f98fcf4910073ddab2be6353eb9502718a9a94d6acb8f1ca4a8038c81264da2ca519b3a23f9cf7cd84ef134cf0f2901f8e1f0d5aeb731f4e82124495afadd5e6f9703425a679d17b7bc9a27b3828f9fbeef9265cf8f57032352136a6f41e7b1e4e7b52e6fe6a96d0148387935836a725544c154aee0e27a9c4342d933ecbd476385c92caaab347d55407c324415e772e4687c325b7d17ea29b2c5d34e670dc92358cd21b844c63d190c339d35b5dff55b8a42a1a713888c5fcb13a1bee79a10187838c1032e6264bb8b6d07883a75f766c5db3989a4480861bce7b5562c4e98993ada40d870ded1127bb4c383168001a6c388ee61aa5455b5cc6e41a4e7e2947eec9a8337a2c88861a4e15c462ca5b19446caaecee0b91111c9f39da0bfc008d34ac0668a0e1184a4bfea993c2858834ce70d2264c10e24f52af3ba16186a3adbcee6fb6cd9af265389d9d36a533787a68a04186d3c997fbcfdcd838168d319c45a5b49a6d1aeef4654fd010c3e1b4dfcb5b9204372d1434c2702c6dd514276e10d995d7d10a781d8d6a1334c070949d8b756a5cbee3fdc23186f9c96eeab735a85e389b55daae5f59d764a1d185b35e6edf8d6f3ff50b0d2e9ce41d25a66eae7faaa1b185f3569fc8c52836274e1a5a38d66aeacd9dee512aa5918573c6af6c2afd0935268e8593d86f568d65a9891344cb172339bc388ec34604be10f91d15a891458d1a59d4f8e22350238b1a38761234ae7016734bc1926c95c47aad70341f99ff84d267c9e435d0a8c2c94bca77a394c9c240830ae71f65c2c51ef30a34a670fe31ed99a54d7b856b8ac1030d299c52d82bbd965e4990495de0b03112920144e3061a51385bcb499bb2e85aa514536ab8de854dfb09a778b94f2ce9b7cc5d271cd495dacb2fb157b46fc2295f4962bcb557b0408309e7394956db0abae4478db684530af2252e66fbe64bf250020d259cde63830cda2ac70579313ad048c2a97c2f6e09a3445d1509c728e2367746e566dc6a6491451736741c9e81c6110e1734de79e5937e356d2324c77b61830b0f8f0f6b020d231c648f664cc9beda44dd042d811a5c6851e3c6043c3cfc468887c791c0c303edc3fc46081e09ae0b1b5ef01c6814e1b897254b34a5b780186810e12035f9b86ae85faa8919c2c14db89f78d629b199108e75272d5e572a996cb3051a4138880bd565972da67b0f0847b1d6f0fd8db635aa2c1e803f3885bd5ba9a0552d7c70cef499d3ea53933c490f8fd4913d385e526f3529bb7a69ce2ed0e0c12958585d9a0bd66abf1668ece014aaf2be2959fd4448b9404307679b11f30a9382f051f9056481460e4e5ed1a4ec2b9a39428889f1cb562d4ae86e700af27d3f57640c2644c30667cd98a79449aac129fce5112b31994ca668d0e093bf5c56c67c64a6318353ca22de94249348bb0b44ed476c98fd0dd4223ff28085020d199cb7aaed74c54d394e4c2306c7da74bfe8d636608b1ced058ec23460705ad17b974950ab16d3518c0368bcc0e0b15a96dd44ce34b3fc4a5b95a071c79448c3054733f95554f811956bbb041f5f888cec888edf3182b700058ae51819012910a0d182838590a12ce6732b3b1909c980c78f8490c0c3e3474248500c0d161cef3ac33f7d83fe4999b18a534a21a3a424abe2f0f55e32c2ecc4280a66a4e224282586b78729e95303a2f6396c94a07c310315c7aa13a5440b934d561f44ad048fe30d4f71bcb313378dcd25a97d4d714a9214269d282ac38319a5c02a49bbf43d39290ede6dfae41f19db8ce2a8ba6fb1ef2ee6657a07334471ce3931c80ff585e260616df333a5d98d41a038afa54f53e2d3f684fa3a3e7192c41cdee2e6abf135753698e18993484deda5d289baafb906333a714afdeed1aea2166bbe71c3860838714a176f5e622521a7d7264ecad4b2369d12ff4ba689c3f509dae2f5659938465df7d74bd3d2234c9c9238294cbb7b5dbee0258e31e665625ccc25c489254ea2bf72fb06994eaaa0528963c557eb126dd1d7d4418983ea5c66da1a59b741206aa96fe498c4f9ceffd4092eeacecd1fb101228963da6026a50c21349f2a12879ffb90d9a284261312e74a7142b68ecad9937bc441c96b505addf2088b9d0b6638e2305ee20811f1b2a1045923ce61ea4ca6ba18df323f8311e709356d529d98459c7d73fc8ad01b4aa55f11e7cbb1b5274a0a1da926e264faa494edaa0c968410719224c14d2cf9cbf4e61fe2a8276b10a744682d1919e2248d30d90ba52bc449549793dbd8b6116a429c0425295973979442fa368883ee10b116964afc5b411c4ef2cd3f1e72f6942a10a718ce632ea83dcb3e204eaa6d9494fab26749fbc331853241973e71599df1c3692f53aa659bc9e75d1fce6356bb5ff2c6f5977c388dbcdb0c429d86c8f670ee13abcd24b992ec0ceae1bc995e59845c8fc6541e0e2ac6c8e426063fb13b3c9c5de4d9987efd5ccc66dce120232787a81df197ad197638cc9e6caa47ae7ea811080666d4e1a0549359bcdfdd286a10b5111b5ed8b891676cc4048f1d984187e39f182bf764f84bb205516309cc98c329cface851aa4aa975861cce5519e3c8a026651be370b691af7375933b7e1d76d066c081cbdd99622b7a06ab18db84122976bad1b5632e66bce124767d9579c5cdb8a8910505b4a8b1a60533dc70526b9a84b213f3d5681f626e0a33da703e194f57d72eb3459d0de710423d7567b48653dfa56a9329ad86b35b4ac2c4522a4249d3703edd26de367a86ba301a4ea376dcbdce4cf8706f340942bc780be098408d2cec0c27a14b89575839e9767a1b225ccc30c3a946888a5349ca70bcae0cdfd19b3437890c078f2f61f27f2aab89e9911d5e182d668ce168a1fdd4a63675f22611c3d94259cc7652eca69c86e12c33e75a7552d83c4ade02f980196038c79e8c450b7de1f89aab5e929d10afbd70d067429dabbf5db27417ce27939ca9bc5ff1d571e17c96ce36495ea282c5666c618616ce25f32849d2eed6bde7171f01cec279b4b69dd8144a2b63320733b07092647a4db9d41593181a3e61c6158e3ea704195bfe2f7a668573a9a826ee56590a1a56e17c6e9270c14ceba5182e38984185b3ac5aa598557a6405c160c6148ea5365ff00c63555212291c74455eeb45d1226347e1a452e906b790b9df170ae7f213cff4476f1259ce60c6130eaaf7c22449989127ae87134e3d9b3db3b2a409a76c1f2e262893ad4e67c2314f8fc6a9f511a14c4b38999cd8fa35279889ab84937c4d2deb3739f7fd249c54c92373767328e915241cf32565eaf4e408e7908fcb96eb2b153e239c84cd6e82e513bba359110e3a64c5bc5eb2865335118e3d7352f9e9758b297c31983184b3dd7a8ebcec3f51a910cea66d83d277d1e8e2199b1184938e52a54413af49c10c209ce692c9dea4f55ded0451d331d22f92d44c703c3c74d8d82d3af0a182193f38ce6dac9865c64b5302a2564c99e183d346b39464d7e4dbfc1f35b8d0a28604d6407434888d911b3bbce02d3af0b180193d3825d9d052bd961b08d9c0f1c13498c1835398e82559e38cc926a9bc60c60e0ea223c652521fcdd0c1f9b32df9e68be67c3907275f913a32ca7a4dc7c149698576dd560eddf50d4ef24bf8e8099baba4bd0d112ecac80c1b9c434922ecd4af9ae4a71a9c92d43eff7d9da37dee161df8c0318306c78d6365fa6453174d3383739550a237ffc6843238873ce966732efc29e5cf88c12969a9065597ee45a3206a2330389cde7808cb0db695bee01c3aead2463b74ff0451fb22446444c7bbde0c179c6d759364a26ec5f3ce0436126ec08c169c9454df2256d546d5348305e713393ea35f977cd45c85a6234bb5c997be2e892a4ee2b8d9a6579e8a63db953c331e1b4e0c83a8857cbc885240062aeebdfb3b51f5c49b5bc6294ea28bd678234345d723e973e8c061e36302324c713879bdaa52e29fae24a538ed7968d0232a98499ba4ff06ab4006290e9b646fca97df4f6e14a7a441ef9d185fce6513c5a932ca9f18650ac5c94ca388f9095aabb4e34693c020200314e7aebc418b90cd8c7ffac4b144930f9d76e265ca40d474ac076478e29872565249b896129b0551ebc4b984b1b3ce7d535a3327ce1b32ffde2c64db563671aadbf4f23b93ffcd334886264eaaa752691162260e2aa6f8b333d252fc0d13c750afbb49bd9c9eca5de2a492f9dcc93cb35efb2c711294f4bd3c2a4cd75267a501322a711e2d2fc1cbfda41c3e258e65f12d5f8cde61d2491c3357b252626abe5882ea24718cad141effa541c925885a46e218e3c5984d593a397242e2e81b2abbed66327df923ce25d5a5b424ff9a498e3867d78838214f8d3889cc2565533174598c8c3826cd1c1a4e06b98c459c44db187237c6b0a13e91908fa288a3057b51315facfea26798888350ba4b097f7df2dd86b7908188939225c82571be4a4fd02e20e310a74cea9230ffa7259918198638798606cd19df4b8e8d8c429c662b2bbf84caf38aca20c4e9b484c9957609d37310e7b353594a4f6e91138ebe914386200e7a6209622abd45de08a236821fc1b9d136467278a1452052200310bb8cd893e40d5d55ff7030b992924c9a74532be13a41861f3c8dd2a804ada5a3b1481c0e8602a140180c062fac67b5005314002000141c1286a30181a6c9c1f6148003424a3848342216201e12120e140804a27030100883828030280c0a0483c1303814aa8c4b8b0f85541320d176c0908be75dd8b8a091895e413ef29fd775c854b83b48fa4cda710ce3a04569bcd44c5e28e860938833e60344678f83cc144eda9c203896fab48cd179df87660eaa37390c9416fea9c70b9e547a239ec44bb9d04bbaeac61f472cce283bb599583a9e8bc65405b272df6697ca072e0a4cb1ad4cec7e6b18cb9e53d75be5dd3750401a32603b89b7c51aad616d764f4f90c5946c102daa3a00c91585a4f9ac6534ebcc1c44b47198060a369dd9ec6c09faf50b635260de624cf94cf38973f4193fe20c7145d59d8f014191593af05d8522612311f4f7fb0e9763b061479e924f965441301cc9e9f78e13238a735da2fc36cba6f699274cb8f4400c9ebe229e962c7b191995f2fc47fda9498bb3f85c711d95ddd1e867b750d89461232b386fcaae60c9f7f5235187253a17062e639339fe59a86f400277ad6baea72690d3ef0ed7e649e19e037f7bcb3b617c706e48c2b68296105712bf2bb76c3d8d8b816f718c23c38af4dcaaee49a1b1c90398af12a83745f35d0681d3b8d13c9523a724631780bb45ea568ddc7655e5ffead5befea4e76363f7ae85f642a4991fa5522e903e269c605c22e81b804950e453a06b800277b34d8809e98e74d4417ec741a15f0a582f55298ffc2832bb05c3bc61a0e6020f978b803c8c51e313b4ec964fce3cbc891b094794f80747b3d96cf28cc2afe8f411379460cc37ed4e1623df2abf9c4789276abb9a3a31e76080c9fea8d4c58898f881ab62299c9a66107cd11eb7043790f0014e8cb1bae73b6b8beb5c37169882daac7247c85e657d5864b8c7708eb59acb26ce23823c27a6570daaf67e8d9f53bcfc7d6210a8d63c6a3140e9b1156d6e52009d70a915f2d444799b21c41c250a64a4166642caa486c3bb67287111ed1db9b11acabc509739b24c8eb0341793afd5b1689416b1058cd98db7c271c091907496bac7dda08e622703eeb3309423c8127ccf68d0e81fedd82a14c159e6d9307e8c8d5b6cf1ef73220e3f2e721acc71ba9932578b4570e280675370682e79929e20ec485493325d9cae81c8a954cc86657e93103f414c15dbecaaa1e41e98755b48d27927f97c3acdd90209860bd5bf4757fa8e22cb56b4d7a781b8b58b90de59820065b9f44bcf8482940a92a3eead893e2316e69f6a39678c1504e4c8dd4c23d88d112e95ef8dbfd0254866dd56be217dbbe9da61b61ab679d6f2817d181cd47e9d08f7b4ffd004edf5d84faf8d296603f0f99166d2bfd939ba949f9f77358571fb56899d63dc86263a603de0605d2bf68eba617d176d75e51ebb46ba486499a83073cc385a5e9be615c9c8088f8a1f9464193279b1ac35edc5c5f6d7d5e161f553a8fd8df1fc54a61ad297d5f59d184fa13194a3d9c20ce379e1211ca4af967b7d9f0df027c7558c18d4e350d2d1e973c87d1fcf1042e9cf98d6f97f44faf8b9a0ad2475f13f445c7d0ca4501ef92510f84727def9c94e56a83be74b88c544a1d628c3af061c136f44242b3c8c69f4a9331698373a8461ec34e18054b8e89b7a378a60e928928bc56705f8f080d33893f501f6272eabec05f2fad3727db9717afad9f5ab171b1629ad300e090dbb8563fb0104168a3ba1ab50873920bb560245e8c25ad0663470e7847cd77dad732c8703ee6c33c3b39415c42c4c72b2e9b175883a217a70ab51d7c83f369a046f8e23f463a5020049ac7bfff14413fae4e50ccbbad583314251d04b04284efd98d08e43527453d2e062e5bf6b1df24f94cef5cea27c903d82541a76d671f7beeffdff904170d4d56addaf5af78257260dd1a0f068f35ed5b65bcedf5e21d4a2a8ddbac6b7dce0851b348ffa7afb01dc74c4c384b90793d37b44271fbd6fbb729acd1152b43e867fa22dbd45362a614560ade90c96e772d9f0745326aa2b7751b4f626e295ab1ba6c3ef00bb9364f3454dbc2538a4ae27221c6d3d1bf90c78e030dd983fc726c44a97967ccf65734c5b5b62e381ceeae252835d2e842048987c09570e7bd15e5941931813d2f884894ca2af3bdd7ad068f8a81b8750863b99148184856312f443cc4d8e1977d08fc250eba004483517867e84412d3ed692266b3fa5dd9e833a70d8e481d068f919cd391e17c7ee42c5950d4ac36f5343d350b68a16e21a8c36ed8198c2b93531e0521eb162a8189c494f647c1e7316772c705275ec2d66b0051772e1429ca33fed09504ff71a3dfdf7636c817d83a0a00adce099992d95933ca90d6a69084cf7744f88c2556fece78a36209710b1b62626182b910a9590dfb872d19c3c38030afec6f3457ac83befb5d88be208b99dc98c5ec72836f87a03e24cd58042b3809e6d6d58d337c0bea53d9a4e1945be271393866a8d44bf89bdf80fee77fbfb3dbc3b8bc7d591c039c8334218198aa3d3e2e879f374d22a79e5e64b40920932426ab4346f310c1fd58b4383188235ecaeb06f70060605ee94f3b3c728100d220aa279212e98b122071345e285c1f1163fa2ff29f7767188329888297a72a866cc667ed325fe56dbbd555fb89433e36a691840e0a0ddee92c7bf05a6d68301c6e6ad09a02c59beebe4a74768ad3e5aac2cc5088b1f6a4fb9f97f1255ba454392e7743d62e2d04a7f25d6f072baef8ced332121e0106945722a3b0e515977b74c59d2bd7ff82bea5cff118fefe5d7fd9723c27858be95b7043e84760f3de5adeac21a59e208fc8de8894a1dd9251a38c0eb0871278e6b355c77a1613e7bdb8885f478d76a7ab1e1bb9b59b56444cce985423b8213d37d84c2d6a0457f2bcf913da1b813da26f6cd10e843cbdef6151254e26c824d7327d36e44428f1e7b2953fee066c449ce89586c9e4341f4543553a593d080ded23c16788781da12bfc21c98862828687db88fb06085a3e67ac0a029e49ebde841a4e06a0f00b7f6e4c78c426bd02f9a2f97c81b994eb195d670da2ea25c64bd1d60c6e7e8a006252abe8cdda170a134bba5a42cab88f014355bc7448e66d34c9c3b2d09e6ad1c5bd191cdec0f123e569288a9416282372c5edadc072948fb86347ef19d41117d895b142b26f73ef0f3395a9e36541f7bc7c7d482105ea6e3a7000d804d3bdd43c2d13c8a4f16959ca696a68a99edfe6fb13b7601b41d23399428ed411d630a8411fc866f101c301dd98d16f61105a3ef56f2cb7341eb44513909e8064ea611dc9f553446d7099c3886d16cb708cecd571e600e26505a412e089cf8f93225a3d4db6a88c8b7bd029d9c318c21cc2d3b6ec4d338b8b66f9325f0372ae048f7a59e25a90dca6885872857e59f33fdf113da822e51c76bc50361c26539796985fce119a139fd02e20ad245f012081c7767806dc77fbea06c520a124826ea5d1cba880286d40e5e93481d0e8956a2608b3ee25c1641a158ff424b3a1fb3872d4abd43dc46b4bd96cfee50d435601e92d895fdbe180f89a45b2479bd035a020157ffbbbbd385ea2ae4f9c46d5c2924a9a62ee549eed29e5b4b8edfd9c1662b3b34c366c52a8b7544e2312eb5d08088018e9675641ecc05a110fbafc403340b83de11f80ad93c59e0638969e26a7bd04899ea78dd20ac4e4405cf0d1294232fffde1fa248d523aca1a58a3f80a1e2a30ab8ba8e265a60c327548b9d0969aeb4be6c99179f4d9e3ba512074d1214173cb5521b114a294c0c476be65cc04070ce8ebfad111aa49c9be3c15f27a6418a5555b8eacf9432cf736aa4ba58c4154a1360428986535d73f5c082e8a078c1ebe0590899a96cf90c762c0fd7eec158072dc515f2103d4ab8a81773732992154cb5b92028fedc649e18384f87fa1e34e35587b4614aae107ac3be193ee9258ea99c89e0e30587051ac2f4a53d1997ae53e55e3e037753040b841a0999dac03617292b7fd5bf88f5f1acf1e06c5e908f15ea0a9a1411e505201cae83106ab61a9b72546afe396262e183a81c56cd00cd66c847b2384fa7986a53dad0e79024504c59069c04415f38cbd034e85dcba7092881041e6b1c6d2312b72088107c22cec4aeb20aa2c60c0d33e858091b4da0443be8bd60ac98769b267fbd01442c00f69d2d1857ab57c4eb681f15eccd0c483c0029303b20a37b61b138087b86faeb5ab6c96a3bd506cfbfe7558bb0eb8b0636b5a30f6472950bd1e0749bfcde4e071bd0b5173e9fc6d5cd692e1ef34e562a6f1c270594a5f7af4ede2491001c450a978103bbbe26496e00c83294825ed9ae3e3630d96f264cd44ac1b4c5250b194c254c28cae065772b5e612b2c433925ea3625b13bffd6fe2f1f681c86e11416836eb0aecc4c02f1c013a44327779862044ba60c9f76923d074b51f05510076f51b0af7a59ef7ce0e19fd8e0b5977b6a0fc04b2e23709d754c36b551cbd11910a27d3b753558dc72b5ef7f81dc4ddb65d71a10d9d80ba9a515700f5e3dded97b9004db7638c0cb1b15390c7c9a83f58a9ebc20e55eeec0e24b3190ceeef9501ed6b6b85794eedd293e4e0226012d2d5596c170a85a418681f4b20ae66396f1723416c19242b2c6f9239d9959a2bddab236623bd4689c5fd1a6cd150c6c10c876b900e5fa027fcbf811e8294c1481e0b9dcd0914e763ad6061de4618ec54f007b83f93fae6a7ad7d8f6a8fc5cd7509ca11825a4c30d47a82c9d2ac5b181f7908f465d2029e94974f5b22809749883882fcc16f5a0e95df799fff8111252f9507ffccb14379a9fec48908bacd6af4d729327931c9541641648915f0e231d791adabcfa31b320fd6372f4c64fc8fcf1b7120ff36ec7081af58218927d4654ab8d2bf29251939606cc53b3bd0d9a5d6a78653a0be03406c871a9ef67631013153340916fdab9b105fd84dc8a1192196d77b4e0938cb34fe26619bf50f4f34380a537cc367b728a61cd3424f67f5991024101db822c165733a21bc67a06dcb0ab7f2a2fb9e7ad29da7b725babbf7f16ac7f060635e83e4ee1466c815b8c49589bb44d41721400c695b0cffee77001d9532fed8c5cb5cf4a45e79e4c4151c1d73cc6086022a7909af48aa255362520b453fd2076f9622a87db3cc9cab0a6e95f82c44c280565406da2f3e6516334b42bb480dfcad281156336cbe72189019970391fb316f8a0695d2211b14b9421b5a7cd3059d01fd5eb3c40928ab8592a4bb84757f7f022253bc5660ad7fac6eec7506454c7256d35383d0c677136c9388ac4e8c3823323380da89e35c2de346882c718a030a5d74eeda0916df730ef423257321532d4cd2e0328abe058c45f5ef5f86fc354eefdf81b56b7c23e3d85aa685a6e78382a370f82d412f55ff83ac2921d1bdc1102705f8ec0e2cf28b8f9010dc16ebbe17b44fc4196d2e3c6b6ba1be4b1e05f8e6fc04e030221cf24a296f8f18cbc788502f28c3c1daf7ae440a730b0460d8bcb305803c94cc171b106c1dc45d0c759c330f19a9f4e5306e41b464006c7b02c5908c61d761e16c378f6e6ce01ac80672074003e48e282a74aaec38a064702426afe08f3dd64c8012ddb48fa0c225c01c74410074f181c8ec203af11ee8be360f68178c82c7ddf581ff2610a990a9f4b8179b36e0d6079c269cdc8aca20ec06d4b768f24d69b60616e45d6365a00a9428b76770312885f3cd31f943763268faf1277d6232a91ca8dc6505788025220f0b1313b8136e6d39d9a82f4eb0f0421995e6bdecf9b861fb877ea73c1e9cfefd35a6d89608f31df6e67385a0c1478fd24804b80bca18fc0c8a2acf7424ec1ff9fb6b1818c6243d0f3f3676ccc1adf3867aa2a28682a9761616266d11ca0e3cd058b3c9abe1f24e268af8d52ad2111829260901e3f0f9f7e5fb8be6e8dfe4f887352119ce52541b9b963aac0b8594535301416e40a72ac0b7c2c0ffaa50d93fd34a837c42c81c81f7866eacca57365b4bfde1ad4b6c4e72c310efc40d89e09c293ff5995cc09a7138c7c551601e1517e04066e500b9d684a2d1c53949b2c5735a7d505f68159c0d9c067c31284f71963900c4102f09a7b5c446f6b10afd40435b439e87ab091b3e7d64b59e3cf08a33cb06793f3fe043d1ee8fec9f4e910d366107acc631d34679049fdaaed4871392e07f6c01e13061ac0ec90f3b19d38290fcfafdbe0f20e18b9c9d1ac60b9b1e8b5d32adc5ae0e0cb432a9501355bd9849deb5aeeb714c5dc234107712a8b8391162bd5cb657c5a152c022ffd522b8f9482d42ee0c9b1d95a4c6915cbef05a880c89805b6a3538b95c553ff5851e8e489da50b60ced888f040cff1f36aa710a6e218bd1c8c10f7331800934473f4e901f791c601ff3b1837e14c701e1918f0fe6631c13e83971c98d464212a9b184b751f6bc6fdc6da04c8e8429685cc4d589eedded13b8a501c9a60dea529b02482469da205c2e16c05562201ffad40c44b7ca7d05d6841a697553077ad61bbe44b90891de4c413c8436a5948fb05c673f9c8919fd786667e0a1ccc9f413333da38fc87c063f9ef94c78221323eebcb6c023eb176b878c6c1d2b37f7a94c4a574658bbe6c0d20407fbe339f1ed5ce9eb5cf6b34c9ec68af700369c1197fb6adc22e562f7c9c79ac3421cd16870f937d6966c5e9c71ccdece215cd8136ef3155cf765cc43ed3822f405682ee18ad6a536699057fde37d348c8b40bdc31feadd00264832cf72caed3ec6453ac67d5dd645afa43f6ce51cf0bcabb9f1758aa5096b272041dc8e9686b371a2ad58ed207b2d038bd109a532e09ce180cdec080677bf90f7bf3d87ffcc6ac43a419072294f51aa78256f0de3d61a69894d3085f5daa7f5e4b7f408ce7b13d769090a928374e8435c82d14c1194559de7be4b76b8ec5b002ffafa5efdf29ec1396d834812c22aaf984de8d587763ad68e39193f25669e3f068f5eda66506b5fd6f43fd71b30d844dce66b5cee0b9c2233c0af84326fae5eb0b5627efa355366a59cf4d0c94cad13952531e18893d81ec9cbd8d6667bea0773e44772e16773f2f7f508c77b076b520ed5244922f413202134a74ceaac9c73dc8378aaafc67c9daf72b9afe4dc4f6777821398eea1e45d74fe79d7a7743377f828077d978b7e3d573f2d676e2f619042130aa51e85494052b5f3f8c773974f908858376770df477af9277a8fcb7b85abe4ae55d1476c8528a01d5d28430d53d691bc57995a5aee71526fe37c6fe3808f70a7af7191ae636a12a39730c843cf0a7d11459006b9b4411022dee9eb5cf4eb999ec4f4261c72e8a7822ff4e24febd9b0d6edb04555c6f1a7f606eef8d4d0412cf1913f3de9c9446f9a271fad499c3ec226f9afc772b741128883cb2963a7d372c38d8278fc92f5cb63e5e97a1a769b10068c8f4ca82927744396674697e1dd7132c2db350a42b2305b96048cdcfa2da8bf8c9ec42a4aa6bbcbd1b346da5e50c2de2989950eb150a4788c3e04124feb3d78a842b0930a36eed896ba570695b2a2ca682b5f19e5beb8259b08fedaa4b063d0284076a8786955a7ebaf03e6d36925275279c4b6f4f230e7f9f85ce6e5cc4a3276ec98b5099f255af0b6057a79213d3078c30bf6c6b0de2c7083053d5d586f32741b43ebd5c2487aa940372b3840a43c295c0ce9d50c4bf37eeed3df6b8dc828234952fc9eae1ba7921991361f3b3051b5c3a03092bb07d0b96f02a772439307dc27c069079c6d3340c24e302745ec38a2a862d1a2aae34edfedc6032df917560243648c955d3e7a748c05b862c1631d93ff1310f816bde3b672f515bd1e88174f6880ce7ee62402493b5d6086a338a10cb1c7a8acfcb61dd42e126dd5a2618e818ef4ecd8838e3968fbf8f7ee959b9fbe17f428034a9927f34169bd6bc6826ee80a3e4e1d8343a9089b04de6a242be23c0340153df6014568a75121b73e278f177efef8432b999d218afb74ea69fb32938547a4c65413c7a1815a262c311fcbfa24b8c3b4524c4c62a497e4dfce692531840df618f8fd97a0d698ef3b7c649b018c602a692ce1ea6ea6424b2109d00873a28a9ae1883b0eed3fdeb051ccdb5d0706b1febb817e251110975373a27ad5ee5452de242083f2ed304a9400ff489901a76268a9eb31e1c07815e6f301e55ee0743a732a19ac0899522b71c45784e58b25813324438731a34dbfd416c868a98226b014891c73bb0da0476d96930dce96caf2edd8dd4ce74a00516e1fc6ca1534881255a2e27ca3f254f089cae163335d95c9086cc052149db9288825f4cb127cc1fb1f706e2e34aef87d552224fc257cd4a562c3713cebb75e4ac2455c69f58f2f1ac5f6f6ad32a07ba6c616052a254910256d173c53cce3f540945b0f94c13c044a6e8a734582010aa575224ce7c0eff51a883845c02f4db68319a17b261d40505c69fedb5f963731c137e0b36afb005d01e2b60ed828725bc15fc540c7da1912f74589a3d83b4ed22d67869be3364e38ad3998b35e1bbea07b1ab76bf18850597fc05889ca02cf4f450494fcc2af6e5ab102a9d7001d48834e3192cb7c724b7af380b6c2f67d42405f742f9b5a1b8a186c0b6f101714d84e59df3690d49dc642882a8e642dd8cea115d77521d8a121411c95d27fc0f227e5da37daa2e3e4ccae91e598a121643dc963dcda71df4428c5b6e434ec1c2a9ddea840f0b2cd39f53b4434d159d3d2dae7e704d53893935d4cc667d98df25822b8e0b0dfa515ad926146dc15b059d960f845064e50542aca7e282cf4bc1e02747c6b562d5e33a7b306460e3a1dbc71b707954092613729c447b9064d481aa08a505e140f5e4012caceeda169023b9b93f8e4040e4663b407dbd45663b05f2822a824fc9674cd3ad7a4935013bcc8577d61e5044d67842370f8165afbe4c822e4a0eca0821c2b22305938f5ed80145162017f7fc4be1a50f594324ed2490a9c8d2c0c8be9c0f1d51eaa913cd5ca917828a7c7aee38b333f2be6c5765fc4dc3f4787742d255b35a24619e5b2580d289471212cece6ad08c316df603f34ec82d51eb00065cd23f44fb48cbd985ab1fe8dc5d7b1feb42a383be1e0d0aba87e27b1a79a0463b8ab695306f8d8f4da1d2662007f45fdd7ed37fd28aada3848c4388071a42056292558e90c9aa8589d6e0a25c10d6fb80d617cd9d052184239102139d643ded33af186effa3d9145d16edb90868e48f04885a44b3976e83a4533cb3ab7f5c98e7930071fe2ba2580074d78e59d0a426fc97e2ead82adfff24b682d406c2c063733b1a90ddbfd262388dd3c4bdb66b5e82cebccb9a4f830fd60a9841117b8d76a1a320de8823f51cf42763d433669c357705ebb6e494b55c3f914635d7a6c2c9946a112d75d6ba3b5681359b1f682fd6026ddcfd7ac44c3c4347e9bcbd13548ebaf1ad400e9ffd374a5720235516eda0686de8af42c288f5cf40659fdbb21095bd42c3bd711f8b4ff7e35d9a9bec2a57bc878938b7c5d529d39a4626f4e56e88bc59183cb7e7b1357a0ffe2d7233f8102ed1264e0f0e29c34d08e170df21069169fc52afcc5741d532b2c053673d7d8a54497a707bcf0a7946957821fac49c38a49b804ab19b729098e8a0609a909bfe6d657269a2f6c2ca021603bf551195db6a044bd699a1469ac61293060257aba8ed8753c19767cc5634c18f348edb7db4deddb9531df6c6a6374a623f105c7a48ba5ef2a072990c0f92c4a83f33b2f7ed601c16302bf3cb218481e3734bee8c8fea32003f9c0fe0c60fad36844a76e5a3f3f9cf721b49483f15149e6bd10e54b05e0811a0916c85eed9144a0714222e6c88014da0b482235559bcf56bf6ff5fba7d9b478b8202efe29d1c42337ba60fb482b01d82559915417fba69ce74ae0a32e82617e50485d23ab8f75d21705bd10c8f3ba97285812c5d1fe8247c839adf9ec64f99620ed885069833c1740b7eef09b5d519713b6b72e858d3290e6f1a18dc269cb4cb9c0304ecf041ec5b80629fa18ff3f6d3801f5e71d70a547bbfda44abb4c731c1ee9d99f532e3fb658df8c1ded8637ae162627615a2256781c85051519bbbc17d229eec58d1b387937e7a3df518d3f0e90c774742316bac9ae50ec8fc9e6476cc408ec61e70e27c4610c3ccb49e1f118c89116e9a5391e8665b71829014578111b693817ec85cede367d9ca5aa11db0fcb91e0abc311c0602122642a005b8b9628d649a2413be03f961197bbb702e1c4be9326b0894ec1356f1b4cecfdef606fbbfc31514387db3c3bd8f024efc578af3b5325f23e0000dcfcf338b73848b52a3fe9029be78643fa9da0ce2172a2c70d661fd20421b07f8ba400918cf0ee1eabff70fb4f6b983d161ef8f7867892d1f12dda17dab3e50c3995572405e900268c2328d5d9bbd5120fdf75b0daacfea5bf4323e32816e9b88b7530966c71b27eb75d02a9bb112f6f62d608ba8986030864d5da5bd9b40f30de686e7d7c47c4a3a04f4b40e609caf0efdf6650dca6891a0b162a76d9ff4c23891f946baa2b1495ab5e88b55e78670b23ed0a4fae12e57a90302a8e26e7480ce1f9ad14935b002a6791b8d43d34956656ce4b07fee288f1acccd8bc38d3796b10af1b005f4db61f64d107209bb1de131064be6662233f7f3a6c3a08ff1c417493241834f7d3291df23b8dabddb770726dfcc66b867437981e5e336c4b541f13024abd013d6deeb1ae6f1f540f2d26b8a986df34543c219c17b8c0b94b61424ba02964f292c6928bbf2ec3781b674ad4cb5fe825b1970a9d7dccad1331dcba18f74615ebc3d2e31a505bbfa3428cde1a36086b994de6bee671b87142cfd4dc4c60b76a067b08f812aba06936abc4330cf34de303e6ce62236deb608695e47851587223f10c3940c86d6cf15c8208abc39fcde1d7ee958ca136c98b44dc44c6a5285f04adc69f6f5d2b13daabef5d77d23310fce956534c70456abf7e21798a0e91560b9d9bde03a1482b625fa6365421e722eb2e00781f29cc299c626e00120ae14a581d4ebad2f52c7f162c7440ed8129c761d8ba355505b4b7c8fed2ed21129c18ab54227a8a8a9e2f2f71c2a67b02b1ee242c17c5673bb9a4fb25d97a041e3547e8a09a6ed4eabeb96892ea4ea705e87030b559a01ba654dbae29bfbec8f931e8c5eae2701ad8e10b2bdeaa5d0df52367013bfa76bd3feb0f57e29f1f915e8a75b41c8b6e9613bf4ed72b6a4159b1c2a581de04842b5f5871791e8c1cca107ec5134083812bda7d726a58e52d96cf957f94011a88ec89e70ad019d15178692256487c9cbe6521b06e9a385c9a0a916f179be6ab8af5b4d870a3b890f268aa921096039e5017196f329669430dbc34159f9cb6177147fdfc18508bbd9cd68675a186f7dd04b8d200e138749ffa2d69c8b25e21b0d17275ae1e530212f799dd1a2fdfba1cbb682d0a96f010116e7ce21b3da45531ed03ae1f74d75a42c18380606249837f85f49192d781e31d0211999674516537533ce4e3916cb07cb394cf64f9826d7ee331b2b713c85c2e9b82fefea13c2eeca54986cea04313eb2bea48ed74d8f24a14d1545548789e30d590ec1072ba3037729116521e230a9748841051f5c695618eb2044a8995380aa4897829b43e2983eb5780dbd00ef5903cf2a60ac029e9fa1a419cc5bb150e5ced61c02d3f3522cc82669deda0cef9175ebda7101078d6660430b2845508dc0b393fadbf7d1234f44404a141c960fc72fc15f0acfb184e298a4b15e53cd1de02ba43de9fb64ebccfe6cfe5c50fbabcab3fb33eb3f06f8cd079ea39172e3da42008c845a944caf275bfec67c1f3b2c2d2646f1b299235df67773c5b44d678dec0d0cbd38bece42dd24fdeda10ed5be1a1b4e59549ee516bf13247014fb64eb8bbae75ca39c841cd1f0488ddd5398e5feee3b73d3e96a72c200dcfc1ae6d0aa3ab41b865fa9891698a5369e2e300b55dfc6cd941f7d9bf0ee446089841e3673b2aea59b7e05204f9a404fee5148a1d70ebb344bdb3844ab855f882a340538a0c5fe386abe3fa5be3856706531bafb1501ef63cb522d5d0246c8f3edd1a89e7439fa5e8964970629d1cda78937dd26637924d98aa6ad2a4f96143774eb1bc28e5f1ec6c683d4ac2ea4315bbb4b46d9d06ca5c47915790c575f18073a5dd07f56615e4638daa68dae12bfd2e6c52eed4a7be6c495f6989ff64ec19bcc02577e8c66bba47ff1c7c0b12ef18a53cecdcbcb191f75f46679f43c306de29e2dc77c18693fe4d6646d2ed4002d77613e635b2cddb340e9610e58f40061310db2db04c2cebadb6018f6ddbf36fa98f1706dce395970a01359bef88e1e8b8454715e888d6e88491c7887ea54ffcf71a4ec815570201dc4257eee5c39183358417cc4b19d6bd75d8d344899347871a08e20272e52019f41d18f6adad545ad868beab0381b4653f452a70a6e06d357a35528607829f8321d7e0c3c819ee2c206477b30e8404b6ee2e8cf81503dcfa93bd9a493d60178bf320e768ccdbb4d559927b44de3b6a8f08b6a39d65cb2c4a32d6c13f28aa18f5c1f9f89168a274d45c2eb69e191b99b75b08e9620693fac9dd7a8f4a01ac0e086a7f22df9fa0a13c2b99a6775abba0db0bc89aa845c2319986fba5ce2d9f232efaa83829c92b43e12869fa71572b769cb5fb8f91eeea4ad30347105ed1300ec264b933702c5a790dfae8b7e400b411be63493790be964fb222674f880d5da515c99b6d128dc59ba644dee31c4c73282132ed7e23c61c91942ac7599ad6f6b8bb52a71b3a21620c14545369be42081914ea1dd1d66acc291a4e083145b609242c35b8b60887642f22477eb74c3f10feb5e3afee2e1783f2b8f86fa0b1f8082f1503c1dcb13d19b6d7146c4c79dd90207ca76d6c81b95a667e5be1710079556beffe16524171cdc8305493378a8a8e0b12514b1e47a8698f85c0bad83d1eab507c0cf6b14f067c358daffb14b2e85e4d61311c93976a0e8718e7d038759cc963fc474c08a035f462cfb21859bf60d8b4b895a0206947f9af0e3024a66be742e7bb8306f537c914a23cbb135c324e10aace481868442ac772d00bbfbb18540b771b2ad37a494b35b906626d6b42ddd42a8a61c0342ac51b2979dd618b34a9d95e5a8d5c447a1aa7ad8797684d417bb094e4bb9b3e9691e3133d25c6821998d94fe9dc97a1ca9905a491cbfd3ab5c65b3de68754d9d3aa57452bd98b2da7608a4167c370a3226fa2712f10d8110a980da34b9ada231d8e4cc7ee9b8b50b5f8c83466bac19c4205e913201438e54d53c4fbd1f4b6318202891415dc979d5b136e96182198ceea5d03524c6623318633f64bc07e7cbefe3b80b724327b7a86ec7cb5cf14b4bd63a08803004f70c0b2b960bb02f4cd027ea6040d0c3660b4960e330f0f0f0f0f0f0f0f0f0eb89b546f1ab56b4a3229b5879f2e604192494a99521230131fbb8377f00ec7b637350169e3971b440cfb0b0d0ce9f9aa582dbb2e37fd6abc9ca7620b41788a1339c46465a36291381bc4735c4fb107ab3c7137d56a846a8a65a3763e8d20b2629f522c1efb6b43a9fcd2a324c59e42c90cad33116332a3583c65da5ff332a163238afdf395da0d394d4b6842b177f218e5417eaa391550ac966c3ecea77c62d313f634ffc89411124f6cb166dea76329dedf89cd94f49055494cca204eac9d539015e42fa892d826d68c7b33717f82d8f035b1fa27d13ef58d6623cfc4265bb79b828c1eb23126d6d497c22425f46d88aeb449239f7cb563894de2a8887015848176141819625462efd3299f9a2483f41463506215bfa04ebd444855f124168fa061922e7958b9c490c4d665a2b6c225083122b17ce6dc51e674a6f935471af1a403055c6cc15dfc00420c486c7349232691431fc478c4966a416fa6af6810c3116ba785f8785a9b42d8d788f564769c7e774a0c46ac631ef37cc9abe0299a82188b58741c9d43d4049d4c6f620488a18825fe8ae8590a7bfa8e1d9cb7858e0874a1630b1d3b70e4e8820b4fc64ce00338541023118b2a95623644da8a7ac740c4e6e39fd395d2f931568e34c4c1c58f2b418c43d80d33410c43d80d2e6214621f654aff8a242de0029880188458c7be82cdd859fc3b73a4f9e8820b3dc418c41639992ef34f132272102088fd43ac9439430fc412e7f28d4a3e0620d69caf52ad44adcef270616623030c3012f840c00f6ec09d59f9f01c3f1827f0011c00e8448c3f6cc28427334961fe736536c4f0c3da59524473af5fa9a30b1d3c1c7013f8000e00dc21461fd6bcd621322729351d25c4e0c35afad773feface5232475a9d1062ec618b23a48fca9923a62ee96199183445fecf5d1e36d1c1f379ce5ea69af7851878d83edd9910e972f753a377d8a2c8db8c1983b2af93da61cd9315b7e1f3849ed2d921461dd6bc2a2562a7d221898e69884187b562fc4c8a9cb66494a01962cc61357d417c58894e4931392c3b9b74995096733b270efb59580fcb9f4245150e8b92cfdc95eb2ac62dcb10e30d4b4e156939eb47c589bb61ffefb00b95279669c7d186fdb24ce9f033ff1be2670431d8e0069541e8488b4ce003384210630dfb8696a96d5ade34c135c450c356a9ec4c86a69424d669d8ee3389e021294b49cf6858628f08427dce8cfe3134c438c36aea22d68ad8529329336cfe7f7ae72ba37ed2639461bb0f1bf523c8efb06132ac262c84d5c50ee9947a0c5bbcb421c70ed24e7c90a8183655a7611a455efcb86b18f6f21ab9fcb142533a150c6b304b1571e34278b0637c61b9fd9a24ea5235a325d50b6bc8ac95a810374ade5dd8431a9dc2261d2ba5cce1c22a7b7afebf2cc60cb92d6c5293de928f1d77aad4c226ea763665b3f2ff928525e952b9f4e567ca8a8a85edf37d90e174109a51ce91b6850ed62b6c92634aaad3c88d9ce31c69387aa48c610563c8f1ca63ec6a32e5481c3cbcf0c1c5392ac4a8c2263bab1a720491493efc7b24fb220615f6d81f8409cf1ceaee84011b5adcb871e3c60f1e3d701817bc058e34cd438c29ec418c50499d483de97229ac922be43a4f1242774e14f652f9bc1d9e84c23e6aa16ba63c3de9c913368ff65be1d1bfffbc03c470c23eaadd59514482d7a8095b85949eb6b1bd162a13f6bfae8aa44cfdc27696b0e70ba942a3c9c89e1c30c450c2a2228eacbae031204612b6ca23d3e4493a48b05352f12736598eb0e774a363e7143187cce609318cb07c0e5611d6cf097f1a93279d1083085b0e897922ca28213782841843d87e37888cf2f11ead85b0759d5d0c3a3f4a8d34088b882baaa11a4fed6ada851840d822ff5e90a53aa38d45b510e3077bf09c946ea7a073a8101fecf1429ebf48122b56500fd6bacc63228724214fc885183cd84448a32428cb1b66f50ed633518d242bed65eee8601d1d4a8e92d59f3121270b3172b044edcf41ca05d5fde88fe31838d84afb4ae6cbfeb49f7483353b628dd2a983dc6c6a1d8861834d838610ec74642aa5a9c156aafba469ded25a6b47e3e8918e173168b08d47cd95d1ef2b6368067be65aee4e6549c814ce91387aa4ec22860cf69836e9202fe950a5c231d8476ca84a49e6a9390970241e5cee063160b0899f5429723cfb18735eb17a877694983657a8b14b6508a9d48a4589a082fed09cd8e5611c3d92c600062bd6202e770a93159fc2b98afdd3887eaeb013f1901c6947157b4ec1925d991249a8702a36e92763ea9873d73b1847311b1960807114a0624b9a17479a081693723812c629d6649b7a9554ea260fa98b000c53ecf1ccf62e7488e9038c522c2ace9209fddb0a0fd1030c526cbf12ac32654685197db1630767a0093046b157dab82453a48895ec87175d70171840230718a258f3488931dc295d9e6e1b5a8462ab1ca3922ca51a63520d28f6af11fdb89ee7520e7e623bb1b4a0a79ed2e6244f24f7447b47d63c5240818a028c4e2c1b632ce5579bb34f81f330cb000998074bc00002062796341a3ee6889366930763135ba8313de9f495e7f56821030c4dacab32796384498c1663438b52c00023136b4a6aaf925e10155353b6051898d884e94d95543354a90ae312fb67c5d47823ada259c412cbff9f07359322eaa995d827aa668cf12e27ce4429b129bd1983282dbdd5ff99c416773e4a97a6345763219258d2ceacc4f439496a2a128b69b2ca9ba2ab27ee90d8a2e6496a43a8a5fd4e0a301eb1f775c5f4b174928dda116bcaab2c9334b9fcca46ec9d947c8dd24d1d32479e008311eb4fcc14f98839ec9f16b1c618f631b7613c82e39804d0b203301451288091884d8a874f4ed95b17320603116b6f4cea2a23a8a453fe8b4e3b2860430b09681a601c620f19d7ff1f745d8061884da88fc6cd7a07175c70f96207175c20807d74a182b5a185165a80518845fa98e5c8c83c28e05de8f8d1830b2e2860430b07dcb871e3060f2ffe2021f6d29c3639c2fc6a5ce0e0628bc62db4f862070f0a38097c870e14e8f051811decc509960a3006b19e6688db107b8e34be2bc010c4a63784949acc720e4fdac13c747ce110b871e30b37c19916366a6d542002369c0023107baad95c1634e7942b0910fb5dc68ee93bfd58aa340930feb0c9da2c8f1d646edcf861999191a4f6fa24a87dd894bec841c8f8c9fa2c01061fb612ea7312b14977eabe87e56a4588b834e13396f400230f6bceb997693b6e9fec9000030f9be5df989b9208f3173b0aeeb088a7c8916b722bf932765837a94d41ed5d0a91d783a30e684ce9ee543dc4cf0530e8b0c6de9e9d8d648e9cc33a3209a1d2d6cf9166c50c861cd6d3eb31e1b931d7eadb408f0c681560c4814d7a82f9d944ad473216c080c349785f4531479afbe002478f54acee6000e30dfba6ce4e49f87cc66472c32aeb39fd5857ea4ff2d2864dc9cc3d11f219fafce307186c58536d18bdfd2af9081b186b5864c7259153884138c050c39a42928c4f427de3e7cf7e581b60a4a14f2aedc5e6eb8adf381d758c808186cd4b455319efca104767582ee5b09cb444d307b119f61225b3428e38db49a50c7b66f8202b6855483f21c3e2417fd9ae7592bb1f19c322e6b12774e457bca012c396d4998c973bad4a801186ed328ca554bd3e2584c0b06890dce157173f4dea0bdbc50b4245d294834aba71c37778917a6ce13bdc871716c9f9467dc3068faae9c236b17be4c2f627e247c4445149e52d6c9b7fce62f0cfa37cd7c29644f46ee6a8562977165651691b3b666a248d30d085ffc0010c2c58e2a953d432a85acc609dd2a71c51a6bbc212d488d815be6febe71c69aa80b5a1c5056edcb871c37d58612f751f2d97c829c85739d2ec7e7ce126203c8051853dade2472d11c1420873a4fdb01c3f34e0ee6301fcc35b023f74fc701e4e822e6edcb871e3878d0a44c086046edc580ddcb871e845626fc08d1b376eb40eb3811dede9c60d1f8e838b1f5562f8000615d638cb99c4e6ad28dac91fc098c2b69e2b8e9e51b29353340830a4b08820e2ce8711a52e84a3b08c090d324e74fad41f01061496a01a161f541e1dd3613c610f4975e12ac5fd1c1c5d78c1050ebc5304184ed82b534e49834e32eac49bb0a7e60e093af987a42447073098b0862e2dfd8f9ecc1ac058c272a52a8d8831ff28f52821f1f09ce92921e475e0304b0fc048c2b61d62e98a193f8c7efc602ebe4038ee92f3d000136020614dcd99f63e8978a54a8eb49101069c097c008717308eb07688f221686e9e0ff933c2aa29a8a4759e5aebd0c251a043d107308ab0e89e582a92f840020611eeea09ea39b3038c21eca525f427d1073084b0675f0e8993438a282309747c9d276004614f4a836cde3ced2856d9010c2070aa72065d414dc907e307cb9885b228d252a79c72a495f1085b892423d25e58685e8a6552ff68b290e379936251617394ee688f1e8d62bb1eddf1308b622ddd41ceb22f53d750acf16f528a9da4fd47415190f1fcc412f2aa5afea4525a7a62afd2cb312fef928c9c4e6c6bf246e3f59cd83a4f0acfa56f629d9ca9d4f948139bbc106595e79489356a95385d95712b2731b16e655aadbf34e7675e628ff55893731f931cd312db49de0dff2f2bb1e6539732652aa5e29694d8fa2e63fea4de15b69cc4a6e7fbffaa2c87d21b49ece731040d4a78adf526127b58e84c395b4da56320b15fff5de67c7b9282e6115b52763277083a62bbf39c62425239e55823367da362fcfe93ba29c38865d4a751bffdd1afcc22f6d32393c9fc94127645ec21a6ce1847c9d49f9488656f739ca03ac66346c49233c4f5127e692e520eb1c4b40a29cae58da62b8658ef42ca7712e62cea85582c57105b9dfe922c1162517b41726cc7bc680f62dbd2b94c9c4875b916c49a699d4c8d2c0d6a1488ad6209e9219597e91910db797dbc8a2661f5fcc3fe13520e4939eae2f4c3369f643da52e9913d3874da74b9b3b688611413eac3d397a7abe30cbf7b085cba9920e4a9e9e14d1c39ee9ac2ef845f2b00975975fbf76b3793c6c16d7530a21246ee97758f763620e422f36e376d8ca4caebeee343e5d877d6299c95b3dfd4c231d96d5ffafec705b99c6396c3a230415d6446cac2887f564f03b3d6b9e9b837158e3fc6ae4be9cfe3a0887fd4c76efdc6d7f26f10ddbff45aff3aa10a306ddb0a9d3b3d9be1d9121e7c8c7a20d4b1ab9591327a9ecb061ebf88d28224a4e9f59c33a97bfa97447edd2500d8b8efbd1b49d3794d2b0a7dc914cda869c85d1b0dae5481dcf3c3d2b6758c5f4d2c354546fe4ccb0e5898d5dafa69e5e86254e88dfbbb719274d864dc5d248393a55c8e1316c3f273f8a888a611357d2920c396158be9347483a984eb980614979520a164942bebfb087dd944208c2ba2e5e5882521744c6a42a22a40b7b263399c744e38271008b2d6cd79f62a7056931885a584baee512f59da259d8bf4bcf68c8e1cb2bc3c296aa49a83365ea467f8565430cbdb82a32fc56d8537c8cfc1ff13352852557ea14c53f78754d854524a19e974bc686680a8b271d21a84d0e316329ac21a4688eb329595ea3b08684147cc27ccd24a1b09d4a69f4a89893b094272c3247c7519d7a6672c296c7fc23254f1356d5d8719f1ffaf6e223c082099b7530cb7c3add06ab72a419dbc148012c96b0856ff40816648f5976062c94b0d78ffa4c19355a4a9e844d7fcc8cd631ec8891b0874e3125b54123032c8eb0995caadba4ba621e95c3c2088ba689842042ca18d5043e80630058146149b1afa35c8e9cfe3ec58208db58ec49427c4d2cfd048b212c1fe27e30eb491f538383470f828017602184c55333e8146af4ae873ef6c60df6e13fb00882b93b87b3f1a02a734a99c00770f0c002089b8e23256e90fa0fd6a493884dd131a4b5201fec61cb34e985b81c2feec1967fa2126b6bf7cee3c1ea9776793da5b0d8c196a12bb739c35373100581850ed6f88a267367eeb4f3d0b1003f6091833d8d06c94965646d23e811b871a37fe8d8a24ce003383080050ed69c34ab2757c94c334953089ed5e94953089e999e3485e009001eb0b8c19649c964b2c2fa4408f340036061833d7d86547131979092cf91f605c251767c78173a081635d83ec84dfbafa4bb843447b68e1dc88b0adcb871e3c68d1b3fbcf8c1c37ff0306d011634c0620678ceb31653253ebae0a2b190c1fe316e8eac182c001631d86425c8bd1352f3c985050cec868c57ac9d172c05911446772dc3156b480aba1d3f87e69d325af128f5619d64920e1c3c7ae48ee4004c3ec860c5669eff93a4d821c18439d2bee842878f1e3a7c70618837810fe0483256b1a74d0fb95b2244296fdcb8a145076c6861430236b4c00002dc1790bc422143158bf2dd52d13194bee81b39c848c516f2766de65061829f2090818a4dc7afe0e1312776fd1c695ff8e8a20c6f04324eb1099544890c396337e94db1c99cd31f3b9562d324825eef4b193b9c48b1fd5d123a9a734c311ac56aa1a29e3855f15415c51ac4595db824423deb50ac7f615572928a27d408145b7e8554f22bfec4a6373e635a2e3db156a564369bcc4eecb94f3ddfa77062f35cb9b7a3376ce6c826561b11c274be92d2a70df070800a3cf170c0163d7c2c20f1d0b100e5840c4dec711f3353ad25139b58911931844f17b3c3c4666339eea7d5c9e8f94b6c97d2f689c69225d6941c3aa7995c6b4154896dbeb64c46b3c8a9674a2c32868c1ba3f3a60e3193d8630aea1d548592b21149ac310659e1335494ac4824f648bb26566648ac264beea40d27424c1eb1483a31bb167ad342476c327f45269113f3dd88fdf6cf7c53be2022653218b16509d91d82502616d345ac17527518cbebedd41d27c850c46a2aeb739851fb1994c0202311fba58c51d48c8f883da6e69c8f8f7451f3432c26a3d63c5d6aae20c3104bd227464ce53a85d49542ac61af620ef99449319528c820c4ba13c6aa34eaa5902b19835872ce8a233648ed9f91e23048902188fd34a55127a28498e9128855d46c658aa33ef54f302003109bdaa4f99539e730ea23f6874584a60b11fb73c8f9998d0c308007057e48c08616367cf8f0420b04dcb86164f86149918408264ca70f7b141972f9b7728c163e6ce9fbf25965883b7aef61db4e8bfd29e63d9d1b3dac215f3edbf988a574998745c7e40cbaf48f77b8e061b9889f375208afd1f40e7be9c668fa6b279896ecb0c6b9184f21666656b00e4b5ed130bdb4e1314b3a6c4a87515399d11126cec1ba8efde4b0dfa8eb4d91734dc83a0e7b8ab7a3e2fc679e8f705854920de1375c87fcc91b56cb91bbc295c613df71c3a2a2e529e993794e721bb610d18d70a6d1b204196cd874be3d15435fe9a6680d9bbe14c95446496925870832d4b07afc9fa89bd3788999051969d8635c76509e3744c96905196858ad7e63c8fa46de3c9d612feb5c79d2291d677266b0927e69480c1b1664946139cd24a3a9e36eb626c32633e7937995e3461dc35ef9bda967a2e73ea80a32c4b0585a528dd3fd2904717ce1a38bc397118625891b39329506cd18f422e120010f1d8c638b7360d847439ff4d093d6c48843c617165d22e95acadf06647841193b9125722ec90fb2858c2eec3377f539ee8488b8bbf01fd505fb0adc7dbc7161dbee08d16c3bada29d23cd0b55828c2d6c5eb2232565e2c3c62e471a12646861b94feb4e5b73fce01d3fc805081464646149e2b344f08e16e42a820c2c14177bad4656e8c804dd63c79940c615f6e0299e61a3788d48e5c808b009bac78e4b820c2b6c1bb6669e4927471a0978e83006001ec8a802e13e85a4a139e49c1b37d4bee866820c2aac9da2768816c642bc3422923185453d88d59cdd2dd341b3910106dcb851876307175be8402b0020820c29ec1546060d9354c389d89180f1c13bbc2081fbc8a3011951d8b22a6f1afbbc9fff1c3fb80136b4b0918108d8b8004e410614f6a8763a6388396892d813f6ce0de1b7938da54b35418613164f3248bb0bfdd05d6ac27eaab6b6c7944cd8664bfd0961f5c173a704194b58e385e45936e29b4ea68425afa4545de5e183dd4190918445d9f927113b20c840c2f615eac63787ccfecbd1818c23aca34a7cec64a7208466843da6b061ac32dda7f33c414611d6d173f9cb94fcfa91950c22aca3e4e6989db6beb90fdec27d1805c818c2aa21c1b7762d73f054076408614bd122e5abe4a782c685023282b0877e3e0d754106ad40c721810c202c499e4c51444dd58f3447da0fa202193ff0c11253854efc93a783ca73a4e9d8c105178cc3bbe8c1e30e05327ab02459492f57e8511f3f47da0f1e2c9ba67327278f784671f0e0be1d32766078103a318d9e652590a1031939d87e5329a96137f37918f0e1dc18b8714371b0e5b2a8a92b32b9aa93107003c74141c60df6103166a905116410491c26604f411264d86009a299a1a683baa8979141460d96ab6031b2592ab44719345892e67c19258fcc6ec53ebc6019335873924955044fb796f70a810c19ac4187a68894f3e418f3043262b046dcf390a5d38cc60a37d023038ebc85e7682ac88041162631a2a4d01c35434c4f2109b97417a48952173c1c058ec3ce460618505eb1a4289be367d055db87173f7878d1400c57ac7ecab62a049d8289498eb41f3db8c00ab4624b397434694a8c7f261d21062b56bf5c9bda93b4001cabd8644efd410915be29d3b13c085121c5fe9142a8dc182e94457c0c80c62856ef1399943245b178bacb8c663ae8e4141fe9430566021fc051688462fb8da24ac2f5a7cf1b14343e81daea471d4f5115d0f0c49ae44decca0bd5122172e3468e1f9c83d0e8040d4e208d4da049f7428a9211b4ce913c7a28d1c49263dc2437bc4e57888903686462515b7244f3d42ed88d8955539408416c2d545c695c62939392c7d1bffb492a342cb148499d7ba2fade55be12eb7ab2103a935091fed1a0c46622a69ae66a9a7af8d881c624564b7243cf437c34bd35d090c4f2318989a57653583fd979814624d64d9f74c4a433e9e713125b693cb5eba88a80c623b81bcf212d7d069576ffe2887d47645d8874b626e339d2ca06341ab14e2a4bb9a3e4d10bb21b374a14683062c9393adfaac8dc7feb229499902f283f0f4043118beaf29ce739978a174dc4de418f524a6648f29c828875266a3891ff3b62cc21f69429471a131f323d34c412cc94ca49d4a4b4c9a351882df7a4878a71cdce335ad8a80ad8d0c24651c08616366a0236b4b05112b0a1858d8a800d2d6c14046c6861a31e60430b1be5001b1588808d3bd020c41e4975ee0c157a2e3f0a061a83d8eab62b59492cbb4043104b38eb4f4266abd406530b3402b1c49399141b46ce544a0262916a6992905a316308cd1f96d81b3fc5de90e792ce0feb8590d26dee47cb956a028d3e6c19a4675d501283c8748e342d786ce1058f1e3a786ce1c58e1e4d2e1f41830f9b50b9b53e613aadfc3dac3d7a454397069598ea61d18fadcc98217abc4c1e3633495e418ec88f56c1c312444a32fde8acf02772872d5a9291f13bca2e09edb055f891abf395a3885c1d96bfcc78497c9687a0418765ebfb848e15537fa939d270d098c39621271e2a2a2fb6c0414e40430e5b5fe5d4a42b7ae1734d230ecbe79c79e29472a4f1d0c13e921d1cf692297e6738254d049d37aca11592e7598b0a44c0c6d57582861b96142aa24ad257dd1634dab088b5efd0f967c31e5396b7863dc3835e986cc678416ad83793e44e337213d048439e4c6a94061ad61bad0cb1e288b5ceb08f8a12e1fe6c3ec8b00434ccb05ffd598ad08bf9c39223cd87776174d028c3e2671e26afa3c68ff91c693ebc0b1e4e86b5e2abfcd4876d25c9d318c39e378713b93277c3ec34c4b085f813f4bef6726961584fe9539f543e57c93818963b35317a0531a163d09240e30b8b06dda1d73eec534f1a5ed86fc53b2cc61847e68e10687461afcad591636267949a0b8b75fa2f4b957bf3c9902bd0d8c23ab964d069f23a05592234b4b05de994166fcec2329f52a84e50cd24232cec5d7f7dba34b3028d2b2c3f162ecc57d40a841461477f8e4c1536d115d35289b3985436051a5458773572f44ed198c272aa67731012f5d426694861d39f962c9ed65ff8e8220a7b86454f7927a9cc5f1f28ec39e87904b992113c25475a49018d276c173d8cc6bbf06311e384c5c25cce5bfe3f41d239d2b8c091a37978c13bd00b1a4dd873e5cf659223097c87a72e6830614b3762a306351265fb4163097b1271ba2b85203f778c1296d328fa6bc26eec4be91168246193da9173a99442aa6646a081842df78cde7a871ea5807de0701e3d76a4802fd0a30b1e0ef02e74f8e040a2718435a792bda797238a0a1f20d030c212c2e813b51947e4ee45d8763d469a48a373441189b0cc9acef0b9c26df27e088b5e6752b99372487916c272211f339a883947ce20ac97ae84ec0dd6bb1107c2267f6a37f7c72621927ee0ffca57521dbe12051a3e58729986a9f21493ac0e0868f4603df99fb98da04e4bcc91a63c68f060b3201e97677fc36868ec60534a04a19642949cb1f3e15cf4c81d3474b09ebe8aa9a61b7926849c0b68e46049299ef8525d4741010d1cd0b8c1e2d14473758ffa0a417559a0618335c548497379c612f962021f3d5250834d444b29c90b35d6f98277a41d3d9a043c7498a0470ff4c30d964dd0a001bba946577798c6a41c6926e8d123078e1d49c75d1d68cc6051f92542c8417c54a021832d55921dd4627ade9852051a3158d328f9a36b933725a9458e2e747060c70e04d8d0c2860d2d6c6861430b1b1840810e525668c0604b12bf3f82dc4e2a4e011fde851714b0918108d888800f47810e053c057c788e2e742c79c59a331fa6ba7992955cb147d0dc2a4d0b1da2ad58744a226653c95153b262f95c49044f4a282dcf57b127bd2532419f54b1cf84abb93e213da33c23158b7ec9db9231258d35a362f1de24f7433da7d87e74fe6c3346cfc9145b10d154fcc939ebb42cc51eec84ba09e93f4d6948b1c57c31d739f1fb93ca28967c316c5ed75f8cff896249ca33d8ee8c4e3c4d28f688a7aa3fac4c4a94106106289670a3e77feef37e4e8430e313cb65261d4aaf089994d0136b0a1ae13a92b013eb7c898ecfe9f3c9a0c38967772b84b51c5d6d62f97839d52751696a249a58749059522c8d5e7091894dc88e216c9744d3939a81893595980d51bdb029f54b2ca3549ea4442647f0b8253693f3b3a527a5124b4e51427edce029e748892d6386587cc926b18ede7422d6323cff2e893d874a31a44b1f538d29125be988164ea98c23c20a895564c57c31e9cf596179c4a23ab24aad7c42eaa023f69ff41f53d2a13f7aae119b061d629aa44ed1a12a4998c188d5ebf3a6cc1c392c052d62f9f3bc2394ca54d9ab223619a67310c29489d8638e4f2adf8947ae9806cc40c4a274c910372e99c5acd030e3106bd21b31c36df97924196299b4b9312aa52052920bb1650521399c890f495cca3083105bf42ed1b4b490847a10eb260d49a6db50229a48107ba80425331f883d7be594ec5d01b1965a4d1946a27f58730c4988d47bbed9493f6cc2c3492f4d39d8eda50f9b7fc9bc4d79c287753bae799e91ec613125e6916235e7a9873da81ae5253c88781de661496b21cdc91c73c56639b207da1e0666e06119757182c8195b71d43b2cb2917eae62478c5d29c00c3b6c3279c328cf192486a80e8bdc0ecf5bf32b22c69c470fbb07cca0036a4953b03033eb67da0666cc21496137e9c9941c69660bf6e1030108d81d3b780b0cdcb831430e8b0a92b77352a4b9eab4b0a1c5f962461c56add0d3f01b319fc8c3619ff0dd1144cfe3423f740b33deb049d0257308492e4f4b6e5892c8d8e13f5afd196ac3a6fcec7beb3b366c6a9d9582866d7f98cc58c3769f7c57820efe3fd60c35ec213973ec4ca5ec5833d2504e988186528e28c152cac9b22b6a9a30e30c9b04931552c823da79106698614dbe274cacc9942c3e17cc28c33a773d1764dcc8a74d86c54f2879116b3eec49c7b0df694e356b717e2a27475a4a8173f145067c38175cb00f0ecc10c32ab2749c50f12f85ca0ed01961d8a266f88e3149d29a090cfb79920f251ed3f5e65806667c61cf41764348ff4862ed0207076678614d9a4448c2e4a5fa4eab162668ee02033e4230a30b5baf2835973f8edb195cd8328d841c35c49c54e4c50f1c5eccd8c29e7feb525ec67439f939d270f0d0410247aec347066ee4043e80e30433b4b0079fa4d28551e9924872a4ddb8617c74c1459a9185bbc1c50c2cac49b33b37f2ee8a4e7630e30a9bce6afeab0af96c762bec494d4cd9b3296848b20a7bf83f1515cc8288cde840010eab2ccca0c27a22693d478ef4bba7b07eac78e4adbc14969f14c742cc4be7c18fc2a27408d13387a084650f852a98daf00c727fc292828a2c61c962526a77c21a7c644eccdfa8ba7913d61c43d9c548ea1936135651892b6a649a98474bd84c899594e38d6d0629611f99274c0ce9a37328097bff755eeb5c21578c84f52227ed9df5086baeecd53469732731c25e253caae9209447b0089b99a97e9ffecc204b445884883661839686b08e08662313acf22e84454de5637fde41d863caef52cd006149329ad89844fc2691fec1662a627fe51474c8fb602b8b21954a63a9afd4834dc5cf513c68c8cacc8335629d5f68678a7f075b079946ad9a8c9f12e9605322364a9c08f5399e832d8a0c2217344f12691c6c6a79a6924978c60d16a552c94e17cf44ba78860d96bcff9b54a894394a336ab0049594e9f9d5d7c93368b0e835a153e70bdf09eb8c196cb21f73e75c1353a43a43069b4e19c33c04139a3c3a23065bd4683b7e9b43a95267c060ad1b11cda3c9a81af5159b5f0afad2045db14953a1599d4c7f74add8463be8cd8dfbe1192bd6642134c69c33e5cc56b1555ec93925554999a92a56134199aa301a62549a8a25dcf5899e1484e64a51b1c59ca04654c920937f8a2daefde6260d3aab9b2233d8ba63bcb837a62133ca600dead48920b763bf3401c4608fddc8a5413e835cd18d1b993d10000c36919f902f5529692343418d57ecff991fe3246b87efd82d7c87730d576c227fa4ddf1af70a0462bb6a094c7987fb473655d83156ba73f53998268156bae9a3c3a09b1fc28ab628f7692d24e7c3b872515f8886a3550d1811aa75894d8898c9fe227d92071400d53ec3fa6a72b4709c242be147b0e17c4adfaa4582fd753c476b4184ca3d8e2e90c45b1460f15cd2bac4453532852b71953681228b6dc3e99c46c3aa1ccfec49aab73e68abd53edb0271659a7f4d8a8c68d18edc41aa4e728cdde38b188be9b0d7a43540b6f62df11ef91f9e0e174a5892da6a5cc792189cef94cac9e72fa203b5c1ca92726d6f0a382eeed58d917bcc4361a46051951ab6189c53cc9b49a2f35c26f1e3a7c300a4ad5a8c47a633662f1a27c7f6549871667494763d2d138810fe0d01a94d8c4682ebb114a6d4e4a79a831893dead7281d84e5344b4b620fde6134cf6ef77c91d8e66af238ec5003128b85188486576dde94faa1a30b2e28400c87114ad478c49a74c80e2251576c63870e351cb1a614d2fddf9dc8309d466c15b3d6b9420d46ec1fb6bb729569a38a69851a8b583b2be4f815b98da1296251b9c465d06372f3fc65a891882d47155193d2f3e5fe86885572494a319a79883daf7a66cc7248a322436c6a4e28df15093ac624438d42ac9d62ae7312322196139e6c6743968ad319c47a7d7ab516bf991d62186a0862911fbf1356f3fca950d708c4721a57521c75e12d3c47ffe0410d40ec1fabefa49925479add0e6afc611155eb4b6be39df2c39e42b89441a7ffc750621f24e01f5bd4e9a0461fd61483f6951e299337ca873d72fe1872e9203729191bd4d8c376d9d9a5fa749f1aaf861ef62464524a04bf5237b13c6c7a91e227a6cd8a62e648d38187cd835abc183e854f56e6482ba60635eeb0dfc9f8a31b96d7a593802bc01520e7811a76d8c32a438ef7ecd528ebb02521c5521a8b27167391430d3aec3b7bf95352a99d4ee7b08810226d377ff5c308e150430e6b4c92f2cd07791cd64f9542129f9252992c7058f2e938fa64d505135e23e0d850e30d7b68f299f9132194929f35d470c37632726a55f8ad4fdd0a74a4a1461b16253be8c5d38eb97095186ab0614b4f57193f67aa90931200861a6b58257e9e96859c1a6ad843aa1454263f0d19822c0635d2b09e986e8c4c3f0deab5a2061ad618f5e2a460a982b0e82a6a9c610f6aa38990bf7029277968c0b7d091811deca307175b7817a7a86186cde62a8885bcbe742ac3fa29e9ee7c9b62bcce93614deaa35f9d5e89a4f263d8e37c92138f1836912608331de463653c0ccba7d839f601c3ba1b3ffc764afac25699839279417fd494e4853d6fd8ba7c7e17b6b495fe21346432bdb9b0e51cde252be95359f61616fb3af364a5fe84a6b5b0a93e8dd9733af6239d854d6aca3031f9a53e85b0b0a524a324f3b3703289afb02725bc729d87adb0e7f0594f72b579f455d8c2c86876b6b9319d4a8575ec56e6ff5476ac4c61af9caa44fa9329e7ec48618d7b797ba62f7552721b1988800dbc1a5158ac22e89c26884f119350d83bc60cdf143d611339a8fc31770c575a3a61895b6621f543a72699262cd6d7dba9c1c486da30619125d39fd29f59c29aa794c83175124b6a51c21e94aec9b0b5a2aa2b49d84ecd56fca0ebe24404094b1e21d61f17a752458eb08d7dd26019a311d6a82b2721c964e2a35884d57b435fea9fcd978244d823a98fa9aa0afa2738844d99b48a984e42583c97e8de88e94f6a82b07f3a75e2ef3bc9946240d892e70e9949881ce4ff8325d9f9a7aa4d5d91fbe018d47fc573dc836564a64bb2533eb9641da0060f168b5e415f8ab27697ef60ab8e55cb34eb1774ac834de76c84931e238dfad4c8c1964ea7dc07f1cf5f1f06d4c0c116bba35e9e526adc604f96274da718734d551b6c4157ee1adf10d724590128d4a8c1a99bd3788e8a1e6ad060c9fda9937650951c626edc2853a8318325a62d331f19b5538d6ac8604be91d83d797889b758d18ac1df486a042f8919b84a45003068bc64d399c8588d19a5fb1869d1c33235498ea9a852bb6acd8b8acfa8ea4190b64d10a834893549ed81d9723acd893ce98a573d2f728a44716ab58e47a6290a2a4a98654b1f926ed8c32f27ad74fc5aa5e5b651f3327f57954ac49246a074ff9536c3a5e5cdd5c2dadf04db1a974a22136968af92ec53642996ef905d1213a29b68e31071929378a4542f0943a42cd05998b82e49f534bfff2506c299e886d885bb79d048ac5ae3f24d597f489753f7f7dcb2ea6157962bda0a92e63c8314d7627d6b8396f860d9b13db46dedb59dfd58d37b12925cb53f81069628df1e937834c26b6cadd15fd218f9815137b101a7e2561cfcb73893d338d94bfc925f3c996d82ef96ac48c9cf64eaec41e561a468c061552c39458f4464f87cd1c7d623c89adc27364e45e128bb00ca6f3413eac8ec4162b546556249b4b21b1f72599e4a5b864563e625ff9dc1349a78e5843ec6f69f81bb187fd89f9533a484f62c476a5b1328369116ba99ce6ccf939c6a0a3883da694f5a4e3396e3d8958b4f369e8d420625f9133ca2e82cc953b8758e662c514635213fe36c49a7cac4ee387247921160dd1ba6a639210a6104d96f464c9412c218fa6c58a96f4091941ac2254529a15d3c7283281d8d4cd475fb90c20162127f96edc9d8c95f9c31ebe236f2de9ff8f163f6c41d524f570756a31a50fdb66f030b247848929850fcbac4f8c31a5184cb4b287753de2e9a6ea10ea133d2ca7e4c6b194c2c7be491e364f32f427da040f9b58a8987746c6103ae40e6b55b44a9f672985186287d53be914fbe398be8bd46153a373c9ccf42dd1910eeb5dbafcffa92a2609e7b0ee76b449f54175332887bdbb63acd51de3b05c8863419a574a5b82c3625ef97a56ef32c66fd8538fe6db94e36fd40dfb0469c23a4e05a552d786c524c5290f29412e880d5b5986b50d7769e1356c392178bc9157253353c3f627f387244b23cd290d9b7c5e4a232c09e11534ac79e9720af669e2597506f72ac83fb598d637cec20c452cd3b2f28aa6c9a20cdb4e12d22ffa75c84921c32654389910631003598c618b314ca9797d52d12ee741021d7605c8420c5bea7e8841358844b979904518b69436cac60ade12b200c35a794a668cc7897a500b1b9bc517169bb4714ea8f153cacac20beb464d22e8853c29bdd48545643ecf85bde38375a4d4a4e7d45bd8928eb093d692e4dc1b2d42165a584d4d921e6c6b1438d9c13ab6e8c1e38b1d3d2ae0be80733f1690451616d9ce52d24b2cd3c7102b0964818545af65fa2493f23705930ff682010565718545e28eec0ba33cda2709908515d64827c42ae5279d757a208b2aec7dfd219fa69f54c711e81e7526e81e3b34900515d6096a6b5e969d19b298c2f2f7791f1e352f72c964218545455031e7d131a6a5d90e59446151d64976048d0d2fa1b0ae06a53f29a5ef49fa09dbc9e4579542a9960c2238872c9cb0cc46b5ad53cb41249d0a3cf1384b43164d58744af14bdf2d1d9398b007ed186c4563bccef912b670a2aa6ad793049112b6ab155de59362e5938425593495d48e999c1c12165949e1a4a8e710b47484ed440ef6312ae798146484e5eb2a790e22963fe2222c5e41c548d269e2a44a84d5e7529d97c4f8dc9f21ace6397912233f65a708610d6a4a77a658ac7c1984cda32535a2360508cba7f8f575c93f5863e4d991216f9c657cb085cad15344d59f24921eac1f3c4728530f1a51e4c1ea25725cd8901426b2832d7ccc6b25d49ae8d8e9608b6131089136dca93f078b85f6a8e4f33da3321c2c33a99308a666449955832c6eb0a5dc94f174230793be492e6461837d7249cdd4aa330bd1b2451635d843fc24be7926049d3e12b2a0c166f3e19d4ce8189163b29881ddc8420676c3b2880108b28081dd281aafb01be4b8620d3a87875f55f40f338d562ce6c1ec6ef53a5de98d1526e81e3b10163456b1a7af8d2563824ad26ea5a18a7553251d9983aaa0c2948aadb2e3cee9dd584aeca858d3c5509d845af4b22802bef09181097c00c70a689c62d3e439844a0addd4a072e3862916f911414da7eaf4a337eea34717814629969c421f8ed6a8c43066e2582412860281502810c340d9e51a00b31308201838240c85821181ac0bc30714800347343c52383018222012140e4562a128180a84c2c13020140a84c2806028149105c29c027b00c052c83103261a52f898e174d53787cd44a769a97c6bced24558fccfc7dbe4c285a3adb8410058e0fd9a4158e9a9ed5d783c96aa4a778c51d5351c55ca2db989c5f1ec2d87146df5af768563a800fd0d55844c752edeabd4b13bc665b8857d38d755164b6c9ad13bfea2d41a637b6eaa25eb58fa470560da4710f573c1fb2bd61bf0ca5ebc033ab9366ae3cb97c5c9f540af5b106935eb4a13e48bb748f4297d4a6f6af4e225c60f7759e1e286f9ded4914fe545e41b99e393866f345cf66aea18e7d5c2c52417fff9f94406260817731f2ec6b18c00e6ddeafa2d0f76b735bb6c5b73af328c2a5057122d01628a5f3eb51bbd62c8a46832048af711a4dc31e4321e6000d79ec828ba5e95b3e2693c830f0027a7e732551dbec6a2b686a5a9f71c66afe54e6eafcec2c6dc47363c0e8c76463eabe44d0d97440d013f6f103061d7eb0f508a5e1d4b814799d3c4af45af0ca8a2d0ca93ed7ecf9d4eb79dee9980a7c1fa505cda488330e005800a1ca998e288b3af50c249433909431db023c5970472e5ab1273ed7086fd1d285f503a40908b3919edde52d874364f417894be6dfc8832760f90eb02e168f17be41962c9b39aadc73a31097c3886cc968f30d1fa85c0101c38103fc974f32f55a3e27df908672362f0257dee4188d22bbda6c08c110c5a67b51c67b80f38cf48b1e19e088f845fd62d22320a4a1489e8dd51b395a6e0f894cfbf2700d1b01cf83cf3cbe573229a23e06bec4a3a9d9c4c4302053ae617dd52c7b38b9053a5a05f158c02c4fd17f81dad8c8e06a914405f263d9f2cb1c75dd2194d79460dbd26eae91b6dd32fb9718c7eda6bec763fe9c64592be8bdbb9d425c6604dc79d7bc23fdab4830abcaa73ab3d812cc186949c1dd02f671183af682aa556e2b71ae652afcead3bfa08af0f33025da873efb046814684adc17dad0125f6ac94de88146b00b267f24a609901a1b73ed9ab9a780d1590137cc1c3b35a0c49958989971bceed2ee2403a6f3083c87860d20e9257d87986fe41fc3edb128c77f1ebe7fc6abac0601fa0d5caa7f8851bb4540b4ecda838b6e053e1e932049670804705fe60d783471cf24e7b9becb09f4b520bfadf47021a1f5f744ec5a04703608016d6ee97abe429717b5e8509d003f40a4e2efd8f0187e1ec7910cf4e84e07ef830aaed0c8c4b0ad960877f1609d45c335408080e2d59e81e70e56d28bfcacb7bd1e71f0f5d7a8a53c80996e28d48233cb02da444d8d8864d708cac0d4b2cf8a51074eab8487a438105b32e6da4a1ddc0112f746f36ab5add844dd4c740cac66067f6ef63d08219dcdab4e8ae71ebcbf29a4e20b9e42548bc424eb013be680b9a7782d863257bfdba7ecaa9e9cbdad3c35d5f91748c31c5ae2d04e5e4106db1b061a27318075314d746024c6a9a8ec2c64d4fa22dcbd179c9c83dbd60c74b739b0a3c4e17a33291de45e543230d5d85b4c31d4372246ba7a3918e70ccae78c99e2eca354a8170339df6d91e345ddec50a058d2ac7ea01a57f7e7e612ac9be18dace92cea8a5d17a2fa9ddca46086cdc35159385eb6a04ef0dbe90e19c9097a125235e4bd9a27198162bb0816dc71d6bddfdbe43abfab427049d226f59049300f309f685c607964a24f97c29c1a380f614589a1ccbd73826d531302784647423febcc06510acde3f501dcc183cd6e979efeaaa61e377ca8b6f1f1f26dd7794e86f043e82da13de6ae880e1717d607f99249a506f65b83117718af3b5df9fe236c5106e2e6483148e89052256adaab08c8875d1bece97f56a65555bac7d5e84a0351d95bfce533f171a98197a114a4abf0bee8bd567fda6f6e69ffb8dee144d8fd0f6461374ecb034e2111121ea831d4d6a21a39e953dff50902a28d07bf3ad4040a98816137a4243e80b6da14b52b7aa7df5533812d7625a43eb6b6dad4b47b77ae3ca3dd9220d919a16a2c9681eba107da3cfa451418b01d32befd4cf054cc429813d5b127b5bfa62ff710b6b50643032cbdff054762c896cd5f0f80cea410ab1797e509b14191c6e0046f749e8d93383980c044320047bb8238a6a27af1d558aebf28c2a9e78b475534c47a26d8ce51c4a29998772de9baa01b01b49cecd53f8d610d0b9eee836a84b045aa64069eb9ca7494d6d85a07671189d4fb760ddc7839dd39794e1d8da6610948dc0c922a3c226775590a754835e1bb4475702cde04b2b580216c2b0112f49d0fa829554405505e76b8ff238335d616a86595e50a9ba80d8a1c1b324abbd31ff4c98ed4d85123dca0794e9b03344fd7e367e821b559d14fc8e8d0a0e940d22b765204e5f5b606600e18dc65aa700506c238c68c433260f414ca72460130e4dd92e79ae71446f28e70864124a0ad0932524e5dc700c298d89137049d2e404db2da7b1663049a66cf65ba2baa615cc9f80d9e83a25042c35a137e4b687274ef4bf731a439f2a6f7e308cc7c041fbae7c062a15e691a35ca9bd2ae5c815b32bde2abe50bc517c51f9a1f895e2a582df28c33e246ec9ea46973013f4ae26fd40c500c5ff140f150f53f9a8f04119e917be570d55117171d33ca3b2d4101df28653a7c4cefac780755be238764be5a55027271e8986d856328a34d7c6e8bb562b7d57985ae68582bfa8ccf700f6ad6ddf98761e29071e90b8114e909a1fe84c01925c479fcbbf9a5cbbda2fd737ec26868e7ad8f58b076ea6d14e986decc537b670d49b314e4aa959fc7ca79c491bc95ad0e55398384f12ae6f3c5e7e0d8231ac9abd32c8856b9aeb96506d0eaec797934f544ac00e6406666b8306659c4a6d8339a753c7154a0e5ec48241800678e60ed801e71d514dd71b96bf3439efb51c846ba23d7161bbeb6f4ec4d447d64cf7001dc32d35b97b3c376639f96bca5c1ad8884551efc30c3a6c2e2ed23b2bbff4c43ebb6044a55215c999715ee506e055745e6c8aad3de7f4dc5102e6b163a6da9540e1e221e224af1bac3a57afd0efc08158e9c6405fe5f461039b549345344df9c05370c277d1ab39491ca5090e3645b65a8aa9269d66ca0fd4bcc99d4a395b8f2e2187d6d70535896f64c6c6e40ff8c2058bf5c0dd36927ea526507c6fa7f40fbe6af354e2540e9a640699cd3b08589e0617a0b90326d559b2ae0fb34450490031fa7aa74bc33aea73cc238baf7da274bcce2b54ef466fafb39629954c6f751d13aaf4d6a6e10679c19acf904448cbb83d879a0acfb18b9a536d26750539ceff5863843d3d8c0b3dd6efc2bc28220f804fd0b0eed563a16aac640c47d061fc51e6f6c3713ae1f0a131270aa4585b2ef76d320a6f76ba30c7881d41774963622e5b766b6860247c8241cb616bfa03ba1a6fa2a50274584cf1368959581f4672242c45854b1b55160a342a64a8c8131a9923a9630baa0bb504316469b359b9f5331b75c8008ba4f304553093f410edf4d31cb31892d9aab681f37675a79f18530fc16fe68a4ebae7fc835360d80b5af76b9b67057641c9d50808d47f9672e7675f71ae34d546cb2ae8a9c8a994529a05f330ea613b501406f00c3bf9910a0b3ddc110c924ba17aee42f2e9b1e3c156e0c0ebd416d6f5a52e6a9a0f78edd9d00d26bac1370c65cd6907892207f2c918e005c09a01eef60d811ceb0d0ac281e5496bc7a8c4882d46ae19f93282c6481c236808a3b7966856f17be228905b474a634727cbe9a172546e7314684119f553acc4b2221b0dd0945226debe9a17321726b7a1d3d884725e4434f2635ad37d1b74ae62159ad0b6e8e8c3328a05fa23c24d9a84f4752ef828bc925d55203259140e89a7be97cbd9e1ffe344860dfef1d82db270fdd58ba77f685617a96cfd7a63279a4714eca5d9f366f80ea7d9fc5b0bc6c523c1da688bcd4f6c109d00aa7daf39da3a2c91c0ddba4ea1839f7c515041c636b9b347c949673e81444e72028b23d34a354540dd7cd698812f7853b1793ac3f13c151ff5e64e13b08637251f464e468f43a22d0c67b7ee0678beae6beeb2f6dcceb5aee0e53c4173921f6f45f4bc53dabc3b6cce07ab79c3f2c68258cdff168fd458874c37e60131d47ab6156c4fed2c84f2b21b3427c0e44c810a8441b03444df4714673205429c27c2d9c87db877368ff817503369a0d15b57ef715a963bebfb0d309621fd47db3ec105400b0a974faae4be1282a9b2c967619dfb55d8b52d3bb2b3af6e893ce4142b29a61ac03e93c8e44a2b09c441cc37f61bf2ca987654613ad972896a29caee832712d5fb26e3a46885da8284f53cba76dfedb9c99ae02c998b82172d30df8c14d4fd8cccf80ca23ab351bb6104b99715d1ed498867a4968e0b13da193b3ccdc5bc72756240fc717af90e78f8fbabf592e3b0f8d2aa93f67a92d4fbc50f88faf1e0b09ff5fe6e1fcc751f998e40c8429d0629fc13e4d9157e27a002b64d9442fc14a4091666604925e28cf8c85c7e40b10b798e075b6733044abe371024db4e3a2a152380290e2be4ce7ecaeafa4098a296740319c19a451e112e7358427ffd38587d70a01929cbb6fdc2b16c4a0d173accdc855c38cfd8bd64438c52544c69174aab5290523a8fb9af67e4393b66da91040a6c934548c57d60b6590874303793d5db6b00bdabdc8151c17a472e07326b1014d3d90595f7147082bcd1405988a63bc54f8c1187c6acac0e40f231b69566dc7130f4124c573e06f194994e8a5fc78a5b598347ebcf45da76a7641db6d3c091fcd51c7d87f1cb24c393ce6eca1a34b9db01bbce2227b6f94f9555b4500f6934e6794ea02d67775dcc9f74ac660f8fdfc2a6c4a3821427599481cf451cdfe1af51c33d5458540079ac99848c02c8ddd0082e740a8c09a504c29fb7545164ff0a4320d672bea0c438e0b24e046117d3f29ac40e4a94020c209b78cfbb269a30f5caf8fd195eb510317c107d0bd6b27c43b5cc82a010819712814848ba6313c8540e450d4d3e1b045d37cd2ba0360259cd8c63abd5322478da626a28501556c02b1bed77e6ec380adeea48d822c613f1a7b1a603ca6ce97581f72a8e1783225cb2264099e78840d682ab07ee47ee515e297a6cb9c60e5de19200fd0977217cd30d36e3fbb357e10d04f8b321ac6c7788c1be1c38ed3307c122249fc18206b837a745cff4878b1fd15a65b0b9c991184a5fbc076c003c355736b11d1739618d3300c68b0128b4592c6e4ba66bc7c1e8029d411e2a1900035e21b87abd0cd2770f48d036cd00921b404bcb8e74326b80e35100e67d02eddc652125e9233a35168454107441d000813308b18500ed79259d05e0f49807571dd7dd96e608abf44a42685e6cc73d83c3c11fbc420beb620b020273ebadabceac9bda99cdfc9f516107191ac4e99e1929180d2cf2a9ad62c48de083a9c1065d41cdd27bfb85908003895709334118b7d0085cd3687055449c13d9723600a64f20993a20d9a3ab581470267c491ec242716b467678ac6998444641cc22c95201519b49b3455613579c1b4be3c44fceb1920608ab05a8b1156c3ce4a01702a73235edf0622381c547f30ab9916f48a288bfc4ca6d8a143b25b586af1cb31b67cd8fad0012c07eb35cc25e2ffa33626b84c738acd957a3338805f082e6032f5f15129756207d94f49c1f533bd08ae95d206ac16e750ae4d97a8882fd8453992d9d21499a5d95659f297773fc7a1f76631b0fe09502cd95acc3ed62547f3df69af098ac66ec1a167915f052687fd65fd2cee239178e84c9addd814e24883c4324815a18f81c351119dc3e86b318210193997eb1fa0f23ff19fa97e052cb9fcb4a5d0558e9b4d550675d456cd32ac55c38e9c0a03ddae250ba405867b1852b90f7eb31dfcfc4b313816d94ed8ccfab7ed05814c616e1a96d85ee24053d906a19d3e92126d9e7167f352453f62a62c276b9b90c3c385efda8dd38a6eb4beef77446cf2e322bacb7fcc11600c045bb50a0b13b6de58a6ec2d31cb552bc95be7d638cb34693addb234788b148fa11884bc07530c0ad94ee77f322d91e744df76af21cfff7646f9fe74ca9804c28029d17822c01c1e2d8452b7e1af99b48734c6cbac42e1a72650e936e30b05bb2bb35fd0193ce0a6901ec577ccd78922d9dcd50340f180e8925413cce781ddec997fccef989f1f31186dea957d6496844460738e943e5ed32bc79b799d8bc6938dd4bb80e8cce797699f6e88cecf77498fc2cf4437d7f5f59f5590ae16e2de767d82315434fc7ff27d9c1cb931d5c17ba8d38e24ae87cc14ae78938490fda593942862d474d64d6ed024d9aceebaebb5e50a78b97297d8aa0a5a746a4e9b491d7d893f32c6feb7ba639b16fe73c7f2adb1f8f3e59e293c210b2ad98a83b50187735a14935f1a6abf1c7e78ff7c74bcc70aba7d5649d4a6f680d02b6104c476aa32b45254e292a310a2aa4bd224934adffce99db528e2f6b9a039a1573a4ac589dd8ec34a737fb9b239bdde698664173646b973976dc5a4f7ffd668a8e7514fbe6783aea0d3e4357612b540aae4254b014902a68604d3dc31614bf73ea06dab6110affbfe7f7eb18fda43d669e7ac7bd43bf07cbae98a2a6a44ad99d94490dd49badffbc4adfecbf9aaed0dce93066ae87645db8e08edb799a76bb3ec6115ab0b754107aa629db07506141ca307321f7306a9036cc1ae41a460d520666bf7af8831ed8a6faf1fbb39f6c523c50e7393eafa28da54f7b69245d72cbeb413671bc317146f280f2f36459fec26149494aa5c119c5917db2b279431bfb8b0f0a67620e84a95222fd74762a7a64add7913b9e7460939df6c3d3e8998415fff600ec1fc4ac39d508700d67b703826a6307cd6d2a60e13d25a3922ede6e19481931302779efc5d4d939ad027da72cca30d6b3274e17e092cd165befc9be4edcb8b207591abae0107adb1852f134e84e6b8cd818c00f484b6ab45103ef7a41fa9df2b626ccaabb436258bf600b4625befbadf7cbe2464b1d2a6a6c6aca342c4a978b7b4d23ced4aad80ee18abf92614a1c462ac07e5521c5e9269112d3a2512810f73d6cafd56e4700e80f53864a4a49079a8fc8b25703bce525aa7e1157ce46268a9e40bc5a98de41ee61366d0375ff579374b33045648400962e1692281360c488e45e5fb40b5c2db8f4a801f98bdc98092b31b01b58df69243cd33cfc97969f3e5436f71fb2ea82c19833d5e2960edd115cb25816d1976db70f325da3755f9ce2f7ff47a6e917a24b45171bddd3a266eda20b4cf5ffd8d8b94c5e0ab035fe7df0b5621dcb035a46891b7708e52a2ebc4697cfa0091a78e475221c3c50daf8a9990db0eb7f0a24c26b66eb3aff0bc946ec57afbe7c30c090047de370074b6c32d81cfafeaabde69189f0382e4e1e87613e8bfcf94244a864ae120f596e6feb2ff9f8d571f2f0e8d1c8e39285e76e14fb82d1ad0e96d952c07248487fb12ca19bde13ea76726e954cb6159a23679c4cf133340eac793fb68c46a0b4760bb4a7ef2c02ecbd7d30361a87c93bf1cad4148480b9ead95520fda1ab4ce432b53b486de83d414e76f597a20a3832352625186e03532ad8e40ef61d46536487630e90b2eae83b497f914666949136da857a789e71ef6877427a3d7fe2a35dd5e804728e763f6b943a86483b87c648636f3a4560f303a32ea84f1bb3d164c8e4313c5d5261b2c43526ecc11ce05782d37661b4c35b00d320d484e4c2715cdb8d0492677995afba59385893d82518c671e2ce450a45e9b9c934568599d0593170fbdbe856bbef46c9d532952c254b71d6ba92d4713c3ceac47682e1c9f08619892967b646494ad60445a6c9ab86f320aa496c5cead46b51134b19f01c475a66c1082b4360e1565a5c61a575c6c02dad1898bbefe4f65f4386c3fc1548f4fc1cc238906d679af18234aa638641c8304dd354ce2f641c764fe3199d22abc45149c51f921a7b9644678b40d12a222a80d4ef03ba31e578590dc8b9600e48fd1bb8c73968795980b6a70ad6456e8db3de7969bc7f060d54a623445ad254b348f13c0211182cc899d3930bbe000a4b4c8905d47e28c5310669e4a92fe17dbe59ab780046a8e3c036372d9d13a7037fc34b8b1ade03212cbab4a8f4dbe4070e9f4cec91555249e6100983ce4a659f4ad9c5bc37d8221bee3795d45746dc30b31b7c6be4ccd3d8d813460e1fb33162eae4c01b91f22186ece6508aa32d6474eb82918f986f50020cfe05b30d165b5dfc9b46021a6056858549304fa8020825610d8550b40885f5aecba4ba8ce36c7ad19413b8e65b201bf032e856d00b94c4301aee22249724de646b0cab88613027ba9f22d18eb6c1ad25b20941aa4922bf19c28e91f4eebe338e47b3629759422c129df57a3dfdb1fc9020d6bd519237f53e3a100314a00168dbd3845da82cd9b4045cace66bd2b6e8011ad686ef2680c875c80ae0851cd6163bfff23aa9f47ee10b84d10cdb871c3a2649f92615d6f870c0642a4ec61922b3a253b4e13b71d390468d76190a9ad5ffe4b08c52a890387a906452aac52af1802f627f7379b86ab5432079a539ae0f07ebc784619533268afcdaa09f759c6f72e80413e7769926f14b2209ec92b5012ac018730ba9358b17d268768b8ec6655845042717b063908c928d9f94c9756443b7b4e2a2e17197ded4f51f6c1a131656fa939075e1c43ad62afaec405bb98755f2a77f9b8aeeeee34c58777f0a8de2343f6e90d4319f917a9eb674af3c046c01c70c7546ea530e463e6af6e2a9ca258ee46d2adb341409a9f635f9e9d8a8803ef723f04e0c6c92c7410fb360409574e048c61afa81e2476b90a0f2dc54f4890c170deab32e7b5d502fb1096cc74e40f8ee9b2cd958c6141ae09d17970b1c3f0755a0c1369adea99fc3c42f495d42a026898c7d55252938a445d03a9455b64805caee7eabd43f103bb6b944ea142eebdc1352d486d5034c2a5d9948941e89bbea27f48cc7fe7d73106e4f927f61995846bf013c8b810c5f62f57d4dca9d1f0930af1560436b5ecb28864d186ba67d76186c2c1383b4e2b6a4b39b1c79ed2636900865962532fd2442769a414239333623a24b46ad503f7ac3baa50d04a69428d7d80b79722b609417991fad12b2c0ec92a7093d09046ceb3990a85d5e2717d003b2f2354aba0f93409ef31a0fba91d1f7255a1e02df25f3ff20302d1fcc103dd289c008f316ea11ff5498e7089e91916869cc50b0cdd813c2685a3e348697ecb358f025a8a39d57b5e37843827b607d4cac556f30dfaf5ebdde20f06ee492ac5c773e10976ce263dd8eb49c0f9cabb2e603a7fe67b885001ee5732c753f4ac312c91e9c3ce25234baa152c4ca2d6a1d86d0f1138f405882608ad7126a42bfdd9b3ee85c2705969ac2bcb0e4ef2b4edc26daaa073343d2342632fe94f6274e2634285bc60d21f5bf90a86e27ddcd085d763e8a0ba089bb8f91edb64e4f530c2a42f181746242659e22d023f6844e3aafbdec23d49be80ae31c52dbb8ba411f4191724e7fbb7ba8d99c67df9a8d03474752f9f818d21cde11db9d8d8dc1ba0b04d17b45cfbb008093ade9dd2a8a0fbbcb5634dd7afc8dada9eea2837dd0eb2748431557e2488d1430a9aa28104246e08c7f56cdb3fd2e924c6109b6a310e18d31d9eba47a8b453b545b7e5dfa9acb2b0fff11976f833a42d42634e00ebf0e7d579e9f37ec4880601022cfdb86210caa67fa818db6d0273e805cad09177e3cf0e9d05082713c8d495a93b1edfe5562b1ca1a2ac93a304aba7625cc82cf4183e7e213aa90cedd0cf6733ba7ea13b0a1e40e48108524a42f4e0486786e4fc2e58a57265d9958d8cec7f7c4c7e6fe4781a93ca18abe663e1e3efe3ede3ebe7c7c7de8c97fca5df0fd4cf393e22fc5005803b8381d779c588e3730c90b863297891e896dd6d88dd0586dcb581a396be24bbdb63113b30cfe50a382a4df8f67e3c5cd9136ce122f051d4b5fbd191ed5870eb4b1f9a5ccb178114acd277654c1adc846904afc487f2d2982a4f3dbc89bb4fcecb51e40102babae5ced0d378c40d5f7ba608fb49a67791f997a6082feb556f55df2b2cc397f94f46afcaaa4fa0c9d9204e4552f313132bac4b2ecc2561dae8e81839a4b05d223875dda4225b2cde2198d35d8cb5c5e03215ed1437736a92fb84e0d963a366345dd62467f208c6f656f6197344623e77e93043b55f6efe130488d7cb5644efac512b2c54eaf814022750e2e45fada8dcc64d886118543900ebf168fe910e419d49993acc7ba455664f2eb403074b4a5b5846a745ff2010f93052803618fe9fe0bf201ca3143cfe023092a246272b20fe0df19a84191fca288d51054d529b9f4b4c72e1aa8baffc30a07272f5252eee91b2263b3842591437ab6a829fca5784458463202a0fa6b64fc21eed73904bf7bca01920cf17f001dc0332ac7be090c4a6d00761882b7134328e30c38904edc252fb611506e4d292c9ea90a8aa62d3a4954e22e6e5bc1f3c1e3df3b118b94db62a1ce68d0459d78021565e5c27ebdde987463c73891262585c0b4c21d2bffe5e655d60fd08a474d796a13e5a6348646d024dc9c7839b45bb4834d37c832110a6279d64009df14cf041b29f661b6e8d87c6ebf84536e43621a5804e447197df635f0b3f8cd744b2864b2c6d0ec80ef50df30f423204d8b97c54400203ec5cec8aa4ffddfbd3a83868d9a62749b65fe57da44ad878bdc6de9b3fbe69b71113e156cc51f270c42819b7e05ce7f10136638d675b04898b70dbae1595e592524d75325c5c6653ff3e062757e7b36a0e3b2456c97fb4a7a667539f704f0db63b89104b26a9f094b6bb69da11b7830013a34fbd21fc0afec37415aacfba8c02e2e860a0144e39260e6d41b604f09cbfb6b9da320ac43d2534d9ebafc65cfe36f860a2d61882fd2ecbd53a80624ad86126f2e13fd3c257bc0f5532154cbb8e720898d98f52c203a4213340c27f3bc3e5b381a1bbf71187dfdd55828e1a61de4203a900aeb078c33ede28dd776f68762db0a5874161c197f51c6f66fab013cdf64b4b88c251e12c672663a218dd3efbbb676295a05f79c661942a889762ed0cc2127300ae40d8609e4e7e04f30648ac8b8c52b63bf88a6d8aabb8fe4d5b6811778a50de671cfdc0c62ca744360239b345bc2640cd955b30e8418008cb434d0007fa098ff3bfd9ba7fee7073daf5f545acffcdd27d83b211f7c011d791da8c246e569c1503ae6953d0e86cbaf8e5c6101c962acd3e0f7bfb1d65bc0200dac39f02092cd2c47d8473967e027b171820013c1e40a06961fc3ba156b834a0f43579974e08a9e1310812f1801c6042c22253b4a3ba180a17b9daa1d6ac9d60b1945b25a5226e0afb38a28af934f88673818a4b9f74b8f696e0050a23f7cb9e1a7b9220513c028b69f74c4738216c16601981545c826ab1d4ef25f9e18f6be378e2c3e3b3d12d1959905203d5ae6d0d692cfa37442b85ee05ea29b231fdb0773aa48f1eb0e575a3390ae6c1715c5c8df0555f62bfc69c39e1aa06d16eb354b27b6f4bfd00633d0bcd9aef34321bd11dc030dc773280e137d1d8c82812b296ba563a63e91f462499bfd7bb99b195a5a77069303f13c10418ed29a6186df7d2fc94ada928eda9720f562b020f37fc63ac12e583275272ecb0f5a85b5a8f14157c00e23e1d0a635e1444068cd1616fa18c207dbfc454a506f8319b62a82d6f8e58de333e8e00d544f7808afcdac0bc53559845ac7a81227ccc3c0c06616a581c9e0d5923e64062d0f6114ec42d22abd1826649dc0c7ef73315fa28635c9328f05bccf646725de416f081abb71189b3d6e8af723749765d5141d280ce89c7560751cd321e3d616e4714ff4ac170b2272a68b330ab3dc56acb0f26ac4eaa837c9f20011f684a0c6501ca59cbba3f93b98a0bf282d4dcd1c8ec1210470096e74115803bb2dba7bd24972714e932c1e0d80f397edf1d69f04c13d55707c539196006bf3c2e600bdf5d266d829ba22c1629ab789cf4606bcf1f5214f176f40fc5707e80514137011b58743859470e7ba1679d0dc0e9fef7246c870f38cbbad04d7e162238dda24c0943780dfa86939b9cd91131be1eda292cf1ab42c8f4105602447eb56c495aaf492f9a2a7054ae094554d3187e18b7bf610e0a518914ee8679a4db82d56d50f42255603225c4c9fea2d3140d49061191082326b6cf978323c2bc9e72d26d17ebd0da6ea9ad9cab78fca5ba60b9ccdbf1812d189942cc0b67b9dcc020689a5c2814ce857d0a11d2ce216e49ed945fcf825fc401247414e9548b10665ccdccaaddac15bc510978dd125d8c4d4ac445fab03c6dde9c25a491e32d3e46fca85826aeff181ea763e04ec31a94344c7b07b3a98cc64bfd053453a84cff0e7c3a8bf3a26fa4a26574b8b2600face18b31aaeddfa42430b4c986392d88c27f805914463b94451301d0583113f1e15576b5e4ab5012dedc1beec1c2f42049c791cdb2685db3c942ee5283816ddc56fb2449e16b37254efcf07502ea256f9dd39b2ee682c4a1336f1aef6b3c4794a89e7a34d4205cd1349bdf88d0d6dbd6e689019c50113384ccd475e50cd3b617fe2f791b346217b7d44676b5ea08b4a3c9a27bb16e61572ad1e991670976ac2e8faeb79bc20deaae93c1e174e3105ddb45e224c529f41902d845510554c5d99bdd6ea3c292292ab2910e2b53636f01d45ec63304fa9a1db9c03e4a16859f1e041ee8d9321df266b37680fe4ad647a7cf7b3a1de1193a282bf5d2ce51239fd6999e1b813704c8434a012f5debb1f0a3dd58d9ebe27049db5214098a4ae124390746bf2349261ae89632a20a752007fdef8082c39519cee0ea1c3b7492c74c827535181a540047e35be5e1429a63bbe1c6e0348aec35538648e40f838b2a944aee9aa424be20bdd6872a7292a864fb10e46378f491d15dad6c686143d9f4c8981a741bf98b2c2d434ab09fec59417c3b6773984bbc267b5329a9a809648c53f8e30b6d7d2e9338c517dab5df8d13020f7f10d90a3c2ccc00a6d5a10200dfc392b1022036d4712f668d80882da8f920b914f420a189758b80a74d2c50e9fb83ddcf583c6bc6cbc1d65d6dc7165e310b9c8305cc5d9213f792e1caf196eae430758ae2e0dc3665b3c57714a6e45159206703bbff0a144cb910be252bb35a2a315fb53f36f748abb0a043c037d76aa88cbacfb58702485a7a100bec393a6c4ea2a1f55687608a6ef459c274a3e5c09a0d4ed107e55ba035ad09fb64d74d6418ff75b34278aa55f61ca73ad491c97f1553932a8835fae34e0309a262ff5de9df4c3b5a0345a0545d33fd3947302766f1d4de7baa633c0c3214337b81045613a941142d0747768cc7b08b26d90ef16b4ad940d184607ce338f563b26d93a37d1043bc5d907d617e81421849f7f6b4628443db792f5d59a0dbb6c47c08e2a0350d7024e2f28c7659eac82311d21842a55a951464f1c55225d2c18f5d163c3e8cd7aeb580c8fafae50a55004346c1ca9574a47a6447c8cb30c83c719ccad5088a41d5995b7d01f308a04f62d593a8be23a5045540f68c240064f8d62e503bd5f02443c820796c1c8bf0628c8342e41a8370c5f412d8d08f31c1e0ffe257c2730844db25423c98398270f4b3438155dc2234d2c6a3ac761c3a6e97595f9191b16680ee21b796f5f2d5455df937d99f5af7e3456d9fe1964d86d8eda27a80409d02b008f8eb307047e3345793a83559ab82223d2ee3f4c044348856e9070b75fd642b70d3f43fc46280b9390605a5768750ee1a125106e7bfb2e046326ad407c6f1469bc43086715a3cc97c550598cdc699a9e21aa40ba4e90ae4e5f448c142af07ba5072330a8dc33a36e355eadec7e7d3f004442e7bde225ad43be2a2d01d200d82a9758c528c8c11d8260bd98c13c45e5112ee4b5476dece52f505d8e2d7c6e0516cdf3c696b4e98b4df7a0e384708fdb32451fc0871b1e7411a66776cc16b40cc94a82eed8aac1e257d68767f66d40a01185fb82e21f84daea0b0fd96e5761062d15263edfde791d01df235391170eacb91cb8648f66e326519c8e47c220e6c03d810ced574992607e39a5910a98e00e43714c5dbf6c43b6fc74ce1ed44cbf189baeeecf09283135d8b4910deefeca732521f25502b0af10f87f9cfdea7edd870ae92e44e29ebbe1d35ec46bf0b6e794d483243c1a1253f3a6f662416b0de6c84471cafa55e25d90499edbe4cc73834ee6e9e1057874daeada136301a173b32041028b102bc34f1cefbdc6fc6482c31f9e5923031c56f4e5ae9b25dcd599c526e5bc5a1892ec40623d1312ccfde203d2f996baa30d0adba1bf7be83e058af312fbf633d3b50aed35ac0eb2ed22020cdb20d9c8d9ea26e41069cace2bd0b4745d0155076797022a68f96f7f7c21d839e1810efc632fbe683a0ce081074591aff1dc4576e1bcfb6ac5ea162d02c56c12cd48b738b26df44ad4fa87c090a52d53f5abbd5d5e1a6c61a409389c54a18aa3bbdcd2f0ce4906d523910fa9c19c8049983a5727b03c85d1030c156e1f5aaf3069194877d07a121ad61550dac6457816f80434995837d653974ce1e7a7892791be485413c5912e9166c071dfc1d8721045afdf8fed8113ee41083d8c3bad3cdb2f9b2082ee95c7888157a2be071672215afd0b5da198d8a3713f2c34952c42fead8f97b77fc093a0f5195cbcc43cfdbee59a47368414d73d9cd936243ad83643320263e8240edae6c366cb8ca60f7052a87378c9e71fdc45025ca927d95acf30c46b081f7781b34ba308eaeee0d5ebc07aa79752be14071a63174e3cb295e52605f049f141f0d900719deb4ca8c92158b96eb6d0549beaf0cff36ff04019b2b66b58f779879672291a1143569154ad6b8a098ccb1aa1399a091aa7fccbe9b44c78023e1484930a3950b2a4d001c33f3f3f3f3f3f3fbf9c020ab6b5a1b506425b9029a5a5dbbdc089ad025c99644a49a6b41ac09123d548238440eb02460100c0059f0a700a5c0a87091f3d407d7cefa8c53f93326c840f1e203ce789cf154becfcca163e7680704bb93162c2de637958f8d0012ac9714a2b798af97dd2c2470ed01e4bf6ce0eef5e97fcc0013a4557ab4c9bbfa773710b7436f1a46793f529e371610b846bb0ee932a29055cd402a1a64d8925e9dc52e5a005322b8668fecf492bcb1ac6dcc608eb00c3ae045ccc029d04b7b4d4f1739f090117b2406bb4984d4aa2767a2c90f6414dca913f255ea786b1111cae06022e6081f8b28e7b276b3c93bd57283be7617bf7744d57a04bc3d2c535f134cc9b5e70d10a94faf70aa6d14a69d36b185b1dac40567f468d968269ea690d5cac022573af55bacf15b850c5293cda75e5f6ac4b2a0eadd431c5052a90177de3bfa913454fa74067a939313eca9c26bd295061e9d4fe4b7c8afea5405592be4663bbfb253529d031279649f2f7784ac2a34057f9c796f9799373458116bd9882c6513ff56a28d0a5dcc498b3b96a6404057ae66cbb4d143f813c93d2827a2a299394e209945271fb972a9d40c997f25c65ab473b1d2790495692cd5a4c3c25bb4da032a524868d9bec944913e87452eb73be2d1328cb1dcc3a4357e562984049639f93c62f813c1d4e5bcce4f1ceb7046a3f378fe7a62a811277f7a61affe2b2530261b13456c793377fb22781ba249f8ca9712581fecd7d3188c596a8994820fc54256193f4e7652b24d05dc2674d9fe44720636c44bd9418b5333902ad9efbee27aea885df08b4f8a55cd5e3579bf28c40dd6697e6d77a55892f02d9a56437c17445a065f359eccac7dc712702154f12a3c1bdb374932002717da7944c99e41008d35fc162099351ac6308a4ba9ba031eb5ed2395b08745ca53bd73c2b3f97102861d6c4f9ec0927ce1d04e2f4aaafc9a5dab5ac20502a6e9fc6dae4994d2610c87b97f53fbdd994640081cca464da9afcf8e8317f40e512c652d6e2e5658c1f50c1f792caa72efe4ded03fa64d5fb209ef12475f201edb19b6733ce3da053ae9c548a9e2bb5897a40784a39c6a92449725a980764dc78a7bbf7f498070f688dd79dfc2a2c835bee80582fd15229a5a4f856b103e2e4a49f799ea41c4eae0ea8ad3229f5c79a8edde8c0c51cd0795a35ac2bf5676c7240472bcb13b594dde7c40155e249736972cc9e638a095cc001e92b97745ebec806d31bd0493ba99a1427f3b9c60de8bcd9a37d1ad3d6f6da802c5557614f6b5e8b9a12b860034af877db7ba5b0e41b1d6b40875ff7a9249a9c94351d6a4058ce279dfc63c2629dd2804aa64ab8247e12d52c090d28d94bc92116fb433f7f06a4eddfa7b2d7d327c9cd801ab1d4e16ef532a0c4147e5ffdf9bca49c0c28d753c9f35c0e7e6a8f015d7fd5b19536e9d21331204ff8653fed49b88e256140aa6dbaeec6e057f20c0694707b56ad1f7f01e9a92aa68e05f5943a5e4055b99bb4c9d3929c77011dbaedd1e4649e7ab35c40e69a24f5a6d16c01254d1e51fd2bb58092525413531a330bc833cdbdb8aa7599b18052611dcd3f89987905741ab7e4b974bc66c70a083bed90d7e429aa5601d5329736f5d7c40a910a28c9a3c5782679a5fc4c01f19d5b764d4aa2df29058455792e49c99f4d095e14d01ab6d6e9e769c35040b7d75f8bde75bfc91390c94c0ef2bd65da1527a0d4c48e1db3729fe6ac09888f9ef9e52598051326a0e74ab83a295849e06209a8e4622d7fb94e5bfa4a40277d52eadb98574ee324a06b2de6f377120b5c20017555827dfccd575ea52320d4c6c3647bde0828a9357b5fe1194e4c119049aecc7552d2fc462602529396c955ea0c0155f1b925c5ec0a0179273e6a8c7faac3ae414057c6924f8c7301024ab49474c9d94f5657eba6c0c50f5049a9a7aa94fa00e1229764ef32d1464b7a809225bfab6dbc58499e07a83ba54c4c35f30e10574ad5d86dcb850ed0dd7fdbd67b3985985ce40025269973f3a94c326319052e70804c4a688e29773a69b27b0b94b8d355c1d4c51668f5f91b4d15a38de56a81daf2dbd225c768814ec2eac928a226b7254cf09805ba94209e3a93ffa7571eb24095d4769fb4fa58a07f3cbe06150b2fd56151ec9cd9ced2ba95ccc0e315c8b4e9757a92af26d9e30aa46f3a99526ed4aadb5c0ef680e560304a2bcaa6f1938bacf083ec6cda897bff2a509b4f7effb72b395732c6bf208f1c3c54d107af8bf197d7a6933c528192db4bada72f5d52d21f3778a0029924c1d49e099a53a0fef573c6a43b5320d3f3e66e7f3eb972970259ead24a92d118134f05830729d01b3e9b8cae39457f7d14e8b360f9d72eeea9e474c14314c82dbfdf58b2641793148a44cb6df1fca41383026541cca48ccb95d9c57c0275fac38ee72b13bb4c9e408579bfcb19cfb62fd309f4ebc53aed6225dca7c7812e2ad08595c18313d89a88e6ce64d2fa9bd0645ab7d3696dc64b347168560ba72d7f26fa98b467c9e231eeec8109648e9d149ee2bc5fe95f3092833d60012ddbe1710994a45b92143ce69630bf8077a06d0e06a320c1c312283fe1a47f4ef2da99f8efe02fd472b0077e6d041e9540877eac3271d327b35ac3581d073c2881b8d62c5792c9e9c48bfd47d8e03109d4a6d27fc131781b61ecf81078480225a6a6a54aee698f5f878e6f1c61e428f7018f48a0a4c59e9dafb273ff78400299d2a5ece031fa88f370046a53a74e9935686d8b39188ce2d10854798c1bb3c949739d5dc3180d1a3976eca84183865181072350a37af1996dbf9e3be6b108c49b7c953aa5db83387cd55887872250967be23256ba9374522210dbf93607cf22a357820874f2cb6bcadfb2cc3bb1f038042a6745f7132c5cee9c3404b24fbdf2eee6587bab05376ce8d061038c42a09294535995565def7bc40981382963ff696aa6ac9f1ac6503d06818a3967fb4e5df793740d63662f8211808163c70daee1850c3c0481d44e4a36a5b3a6e9c9d530a663150a1e81d8bef25807d72465ae86b13233e2010864144f32fbd9e89d4caa133cfeb0af5afcee6417d6319e033bc2e01c23e8c28b0e7471050f3fa0725871dbaffb8032f99db48f87f980fa30db986ce7911b32c071e30537c448e3b1075469d9d114fea307941c4b6e3287d78e399307cb93695b59aad454baf3efaa89e997c6d871b6e38615f37e87061e7840d77b955d7dd89d5cdfb0512cdf2f3f908291f4b80332dae5064d4ac5ad595ec7c8998eef9e001862dc40e94300861837100d1a3b6eece0113b24c0a30e745880c71c5807185d78c88186471c20e001070778bc817578a0001e6e183980471b92910778b041011e6b5880871a6ce49840f148038e6463073bc0030dff6964e4789ca1c68e16dcf82fccf09f4670ec18f12803033cc8306223c70410e03186ef1b386ee498c0f70d037888e1001e614880071812e0f105077878a10b08f0e002013cb63052000f2de898e191850278606144001e57f8f0b0c2003caa10000f2a8c30c0630a1e1e5218b19163021c861813f8f08802c293b55789d19299384301254c9b897279dd29e63c0175264932a632f1e4f6d60908997b2f25a9f7b6be09e81cf5735b9c9c2469320195a4ec9dbf394b4049a61b1bab0435394595802cb1e424850b5f1290bda72fda7d1409e852f25ae924bef6a618038f23202f5876bf20ffb94a6f045489f97a664c82c5ec45409cca3e5f52fc1ddf3411d0f39da464e79fdfd61e022a4b87932d9b9a26b610909d732c2993494958340902ead74dd824750910d073a746f36dfcb6757e802e4934d31ac54c9893f101aaab4edc35bcc5ddb307088feaa733b785858c3c4098f87c9e3ce6d9fd38022de0911c62dc001905b2444b725369c9208288029d64926399cca5a9f3021dbca3c20009054a5266b2556e1c6e2c8cff420ccf314040818a379e6766ad29893dc827507eb2a6f9bbb7943a05c413a8bd7d7db597fb4d274827d0ae6dd1e4fd140827907d82a7a9d5b7806c02f926653125273f65d5044a347994937e52f431b900920954ca794cab639694fec7044ab69c3cdbfadc92a65c027dffaabbaa317ec60fc412e80e133179f3ae56d3358c81015209c4c99949a7be3300a104faaf6df6931a8bf949904920836acebe9c954e680b2209d4781cd3f97501890432a7aca9a6e07531b7209040a70ef168da920eb700f20854a9f9f3eda4c6663d87051047a0047d4dc1c367ebe5ad11a83b9d643769ecdfaf8c40c965aa54a7ef732c1dc822d031c9d5e795b69aeaa408a45dcad7f6184112813c71abf12ff9a47c0b0822d025d549ba3bc9244fae6b181bf11b7c2c0039043a7ebeabafba7ccd272086407ee5987ec1fde37846005208f4053531de68257f00420894384f7d0fd626d5d51ac64006814c396634e8c6cab21a4188011208a489b7c994450ba7dcab610c041028372dbefafd6155fe913192111ce9868d911174600e207f00f103fa674d9afee5cb7280f401193a5fb25cbc7b3fbd287c40e92479de5da6c5700487dbd500640f68313566b3193b9b247a408d5ea95282774e2af97948fec5cbe301192ea598c4ff3b66d8ef500ab794c5c66f3ba0d48f69674ef24dcae93aa04f57a614834b0754652c4d9d174c4962e6802ca5f489f1628ec5550ea8b29824d313b6f3a43a0e08af24bc29cb9b74c5040e88eb4d19b6925c9497df804a2997c4dfa483d97edc80b6dbd2aaffa4f379b60dc8a476e173dde3aca36c4085777b5ddd2485f8b9067487ce5ca6859ffed580d259d2c9c9b2544e299806547ef89c4dc9d92e221ad0e29aa994ae1bf9ae9c017d4a92c44eeb12939bce0c6859fbbc783b1753deca80ec8c6dd257b66a18bb6163e4861861a0819001f96763a26f9db5a70619033a36e9facdc995fb31881890d963efbb93ea5fb08a2240c280ca49ba9863e958ca64ff0801020694546dc2947867d2f11204c8179095546392534962062f5101c40be88acd29774909d2852abbbf72ef577f865a7200c2059498af7a63ca276597d3b200b205b4c6b9525275fd74ea680125a349c9cf5449256b0808902ca0cda48babf13d5840bec53893928999fcbb02b2929cfcd2a724eb07102ba0a35be6b551cfb513ab0232a7bb933ce7d249e5947b00a102d2933ad1638e317bde640ac8947276d4b6f29c32450a084b794daa5da9f6f6514076da3c5a9ee6ae9320ea01040a28c9dc92869355bcf77a02cac3a45bcb61d733d54e408ebbffc95d9374f813cb034813d039c3a90cff34a7d174071026a035339a9419e39609a61d4096805c53924ce9c474dcb091a419409480f824f6050b1bc3ba44df009204e4a692abfee79dc35224202ca9b1a4537e2dc77ee30d023902ea32794c13b5cbb78246f073ccdfb059be81c305090e17801401259e5c2ac796cc18b3112149b898aa3d97ec6508489fcdf2b9d85be29a1500118225ee993c75a598b53398e73e7121a6537c77c66c8004016d269e9ca2bda54d0a089c24c44f4c32972b01c80f5072b29859b3ac3e406c7ad1be92f1dcc3d30374fc98f9b1a3788c5bf203203c406ee79cf604add4fa187a006407c8d792c6f62fd7d4a7e8009da49373788e9af393a97400240728ebcb3f25bb9b8c272db881e38b0501080e50268996ec15d31a2ddc82df71c3c62d50c252ac74dd315ba064a694b26b6a6b81923526d918753cda7bb440fd5f9d575adc98459e05ea4b5e8f6ea6b3a5ec7724f890053aeef6e7a90f9329357f03478e197c2cd06237e7bfd92558dea8093df0010bc46611d9b274375e62358c797905325cdcc59cea4e4e79c17f8e323b0d7cb8023967565fa984abf67443f0d10a545c4a0fea4926938257c358d9fb95b102a55b498c4735612bc9ad02ed97f2c5f58a49d62fa9029904f79c5f64bfc298a402a1ab6de2328e9560c24af84085d94f6b56931ead5320b3a594dd327cacf0610ae465bafbd874b95de952204bc969dc4aa9f03f2d29105b7d4a0aad93754ce16314c8aa187e49c8e73a9dab614e1d3e4481cabb144f69c5ca7ced4728901edbe37927c6d4e6a04099a89aea521777be7d7c02b1e936fa39d42c3d29061f021a3462f061e0e0c31368533aea23fef14af093061f9d405f8a2989a92de9643158c3180c5e07275c93a439180c94c1c72650d2698c4da7dbb7b3621dde19840f4dd4e02313a8d991cfe3e9bff2c43e3061fbe9fc953d6d06f7129618f9a8047e500219ef52fce494a934c57c4cc2041f92a894294969d66ebb068b8f48204d3ad132d8dbf50109544c629b6449ccfa9fe5c72350bddda9c4af991dcb7651812e2810880f4720eeb2b3a5b9934c35c9f4a31148933d9e2a0b9a21eebee18311085bedf49ca75a829c7c2c029d6d4ef65462b2e6128e11c68e75c18722d0c9df7b3e88be095f4a04624b9e5e5bbeb378fa6cc10722d02795f0ced5387d1c022beb3a59e673ed58c37c183b5aa0670884c92fb952dcf4780dd730369223ed5fef5821d0bf316e796abe797542207c83f689494507810cb1ccd649f633d32808a4eba9f68e1d53c25e6763fc7d0402a55629ee041d102893939686e91ce4ed3fa04c8dbac7b688658e1f504a8f8d09e6795275a90fe8aa9872cb7249e2763e20e6bb4ffc9c399e700f688babe6a5eae22afc7a405c670e1ffbb2975cca03f283c99484edb837130fc8b6fc8c3ba3df015d5925caabe676408b6db9f955da9cd975409647fb784f2aabe6990e88973d93a449c27340a793c35e09dfd9dd440e8891974b9ad53e343e713029a54c65f4cfc2e19cc48768fa0d682d715e62f7c2b47603aae6a3a7cfce612b65da800c8ffa356e5aee7136a0f5b3aa7f465d032ab305cd16335503ea4b07df74d298c7320d884f295f9c24ffc94b49349831858a67407c92b7c3e669069494846fb137538209b10ca83c73c2bd986827750a19d0a6cdb662c34a6dd2181097adced3a978303962408596aacdca2549a55d1890f13b4d3a31dff60106b4c8ccbcc67cbe8094f7184b26cdbbb2175076aac42e7d79dddd95c0471710fad1bc93ea9864af0a063eb8d09a701ebcb41ae6630b283de3e1a412fbcc106b18d31b3874b860443f908211167c680139b751db726992c1c46401bdbb67d7d91f1650e9368c69e7b08a22a78dd8c715d03156fe4eb7958e2e2af060f00768d018b130f6f06105d77d45b67a4b39c478010e1c1df0c3471510a7537d7e66add3387f50019d632c7529a94b976b1f534097e5e74bfa4e3a95bb0f29203493b02dd9a944c24714d049d23b49854993f974f980024aaa97e7a74a1f645f2e7c3c01216b31fc59789bfbc609483f4da326a37b4a9a26a0d4977a4e726b4e52cc0f26a02fc3a4f620a7ce924a083e9680b8cf9c4ea9edc5abf8753005f07570721f4a405ffbce6917c78e911c0c469ade471250f93dac7caa4ae2b5f98104845955a5f2fd0af30c193e8e80b828e2653aeb34ccfe610474e7f47426c3d817c6471190e5276795fd24fb98bc863122204f5ccca573fc6dd69d0d061f4340cb4931f9b4deeaa64240ed9814ffe39c8280d26953306d8dd6e10308c89ca4ec9d8229614d5e7e8052414ed3927a5b93d60f1f549f448b37f103e592c408945ebf94936c297b8efd22d0263d34dd5faf08c467a59c4cc9f7d8291188570d3979aa69a67644a03e73ce5a39b8eba67e08849698c5c9973604fa94a8cf96499bc62c044a986d092150f992c7945e9f41a04b7c0b67f9b9e979230874d40fb30b270d045a4b2629ac694a49d21310c81a53974e76f20fa824a6cc26cf1eb44fd00f48cbd92d654961ee32f601e5bb6f92c62463ba16f98092933977ed7b94bde01e50a9f93909fd4aabbee8019de418d367c4dd92a7e4015d7b326689fb24ab5bf08034b1632a498e31b7ede60e0839ad2ef3feb21e8b1d106e593a930a963aa0ab9478964e30e1d43e3a206c2b6793d782793ecd01756396f1a3c91c973639a06c532e65f6eb4e8a034afcd5587a9da7763820535f9e94f269fc26ab86b1b33d90f106a42931ecc978395b52f26e4099ca9ca9aebc5e7c53c3d8f9818c36a0eac22d98bedc939266e48c21830da8caa6737a8d09976455c61a903149a22593e247861a9096f4d5979cf69dfd6948a99464ae893741035a6367a87fdc34513e2337d208183a580623bf8371ec28850232ce8052a27f6ec6f9eb5c6a33a053a7ec2563b8ee39e90bdac61717d82c03aa6ede3bfb7bd6d43a19d0e19ef49e09963999c91850f15cdfc7b3bead8918109b93f6c56c53f79509033aaef53e5965c080d2194e5c3db1a52ae21790a55edb83a5c50be850cb6b971539b1e9024aecee98e59472abeef6860c2e203c3e8f9698e895feb205945d894b62bef0ef776b01fda7f2ac44f1fc249b64015d7f496ed2dd19bb3732c0d1012d060c195840c7d44ed2f76b251dcd1590174b77c7b64bb2c9dd3b28b0f93a9802f9021956407b8c1eb44bd038a9253b5c20a30a4893dad35ac724deb3a5c2c12c5ffbc5dc5f41c614906d5da5e349a712e35ef63a980257438614d04957d0d22fd95e768a829fe42cf37633430179f37931a924df83ae4f60a355559c80eacd493a9552563b2555e603291871194d4058da58dee9ef777626202bc689ffdd76e9322d01fdd9f24dcdaa0454de8fd5949e270119af3adf68a691805e97bb24739a242d7b474067fe46dfda4e32e64640b5fec949556ed81aad0828397c96a0498cd954aa4c228308e8242731fdf9568ad1ea21a0c39914eb5b61b1722c045465f58eb9ee130464faf8df64f9c4926d020125a8662c31efe85b6c327e90943b26cf394d4ee12465f80071e171310931e901e2838789a522ff7a1a0f50b2cfd2ebdc92b10374140d6b61c9ea6297e80025c7efa5598db6c97339405ae6b7ddd3a0299f6ed8e01d1f464940060e907f551fa6e6f3e7197c8dcdc00cbe8618bb82905ba04d4ef99883cfc9964a6c81fe2db7947935e545b716e82478a7cd704a7a12262d90a64ec4a466ef6025370ba486b93749f3eb6c293141882c9063ab666de3314b8f054a99e07a6a653e6e56436091af40099b55d3bf9e34b94e0df345882bb415384258f1b9fabe7a4c1534b80a846955f157eb7c612f425491897a67e6ece2a1e156edb7277f3831a877811074510e0e21a94089659b61c377d37e1c820ab49a2455e7cc319d78d19053a0aee324e99f2a9cfc2453a04afe349530baa26b2a052ad52759f322930275da4d125d4b5a785c4781f49c4c9fd07b314da328d01973f33ab617120a94944337bfcad253349dcd220414a85496f27af6c66dfa13a8bbd8317cc513881373123f9f6ef97462423a816ecf5d3553c2a3c92b8413a8f04b6db226a54da02e656c4c49b8e8b9754da0f4eb444db8bffdb899408dd67676584cb2724ca083f9569dac4ee19318104c21e412284fdfb1fc62a99cb9fb4b6034c412489533ef187f4a18d36a1873e7e21a480a8454021574eb648ba52b96ea7861e38b4309946c4a33aca6d8393a3246183bce83c11fa80a844c027d6155bb692d7bca8f243ced539a32dd8c04fad6e7befd725ea3a694210412e84cf26ddc66b1958b3f02617ac38b7bb448b083bfb8000d1a377ec70efe222521c41128dfdcfcefe9a5b39f1a81caf1a89b3cecc9e5264620ff2d9c54b2da4925e917812cb19e42932427d1fe15814c959ab5924a495efa1381cab9be4f93f01181ccc98496782ee1ad3f042a47b5cbaf5db1a73604fa379830535252671f2f04c24a5e3c070dbe1a7342a0f4f375aca039d5c48340896896cc7f5b102861a5a7c6bb73fe640702194f35aac64b030271b55b95744ca66d4dfe80904db69edfe3698cfb01253bb54b653a25cb09f7015939c3f73cbb94ca311f90769aa4134eb7473c670f9da61cd7baecea01194fc65297f3d22d6ef280bc182e936ef180dcf7aa143df553c27740ac9ff2cd66faaf9fb103d2afa4cee6d9534e9bd601b5b1937827c760993bd2019539ca574e9f4b987d0ee8f877ebdf739103da3a9efc53d98b034a2e51e326390b0794cafb94e9c4e0e9ca37a0a26a79dc607ab19db901b16ba6c6a295da8050f3cff518c4424cce06e4e86f588679ac262b640db80613ff1d23440de86c4945adb08a73922469405d2e133fdd69caa484d180d6acee7252fa53a2c69c011d53acf3b7f41b365ecc80b224fea43471b2fe79216540985c3a4d5227ee87d942c880ca763af56e2ae1f164a862848c0159f2297d12dfaf7218c580ee17fb123ce54ad7a79030a0c43bfda954f84b92348780c168181c847c0171bdb941c3b6ad97bc80b037ad9a24294e97a6bb80f494a9f92526cdefe2c091281042b8800eaf3ded2cba7f4ad20e1b37c428215bf8cfe42d3b49dea4a6102da082bca61f55133b5d3812068e111970181a9205b4cdd5bfef8e6e92971abde393599a5a20040b28292529c9aaa5e47b9b5c0161269c7c9636dc842b59019539951ccf67e3f77f42aa80bc68c1a48ba7674a34dfc0e0452083102aa0ca73a613acda4db31ae35f90833da023640ae8fab7fd14da4b01f1bbfe9fd46f42a28010d377d93f6c49af53081450f5fd779653b8c969df1819b13b43214f308ae994561e84c15ba0bf04762f060cde47fa63706c843801dd974c9c129bd5d21d0d63478e90268430214396705e55132b89ebf8220718362a4394b0214940a5d52457ce3072f93484200155aabb94f8f16a31ce2147409b4cbdf4e763e9a7fe448811d07b4965580f5b2127428a80acec62973f9a7dd65a228408c8ec9f647e58ba99cf9f24428680fe9216346fed2549520a11023a99cbd6d96df649eb0a1112045495f0362987a75c599f40840001199fc9742e292ca98f87fc0095ffbbe3e262b9f367063fc261a420c407288f26690c0d1b74d31388901e20e3a5afdf659f183b8507e88cc95376a5b42bb269f143c80e509ef33a869b14b62519023a84e800e99b92bcfb3b7d95a33940053593345f5eebd933040748cbebfade9ad63f651200b945b6c1c305d309406c810aa727f68956395bd50468d0c804482d50a692285fa63f9e24896100841688ff9354ff6826b9ac0199052aeb252ddf24732a73416481182bdfd6d21d905838082c90b99d4d8af7be5c519500f20a64cc49a59257ccec121057a04c0e4b95f495e6ad28482bd02aab5592792a65d2056105ca3489b30e6b692dc5415681ccf55cd264694f525b1055a0934e391ac3ab4e3307241588abd4bfac27e63827082a50a5a9d4b6c59f8f990439054a4e5a6af358e720baaf00c414e89227e9414a81924973cddd353fe7ad61ac4770f85152a0cb742c397d757ee30333da808c3159daa5429392e44c60061b9071ff548c6d9ea8f836d680ccf15e5e5dcda277d48092efd7943a6db39cd53420442fe8e9a8aa259968409fb8dfb154574e264b3b9d7106942a69e744b1e4297e630664a7eb4f319a32bf24ad616c84777cf19e35a30c4663061950b2ff2616b77631020c70dfc061e38b12cc1803cae49284e9bc9de4c68801b116e7267b3a3565531850d963789b548301f5efed9bf496e9f5dc8c2fa03c5c66cee027096678015dfd6916efee2ea07c4e3693935c974479c7e030c2e004630617666c618616f8cf4ae93e9c4c3915f06fce2182319e0389288b195940789f927d39ada5adc4022a9ebeb2cfe8fd22f61590a7def54a2fa5f0a79d61053acca8022a774fc5f41ab3a7c61ac6ce0c2ae82966dfd25eb1a1650a3e98210594ccc9663db3ab74614614d02797d23c46cf33f3ce8002ea4abc8f492e8b81608871a3a860c613d0e2313f9a8977529c93131027e7943ad3b394bebe0948cf4adf29bf841dd36182f3b993d47a7699b104c47abe93aca42486d1ba86b10cc30c25a0cb9468b67a79cd46466ed8285f98910484aae6babfae49f59e1d89479080beb998329ba6944bba5c8c2f7ae49331188cb385194740886b1637f3a830c308a8d5527d9e174e6bbb29cc280272e5373d5792affc635198410464a73cb14918f15249ecf461c61050b1fae7520c7e276d470f338480ee56afcba3a5f3af4140e6a4c4d2e9c3fddfd97c9801049489e1ab49f2bd7e31f901723c6df8f0da3c31ae0f50a231f666ad2ffdf1e561460f509a15733f5e578dc8038485d3759ff3b165260a87193b406b74ad2db12db69d32df30430708cb6b73a1371b61460e6e1d510d315d0b1866e00015acdde40c9a9ef14fb740464bc588d8c24e6625e75416adfc8e42a41608937eaf93975fc72c57234468814c626a4fb9dfdadf69d92c90397f36b7934488c8027196973cb7adbee7dcf641241622b040bdda06afddcb4a6e6220445e814cea4bd0b7523ffb951371056a2b856cc9f9ea597ac983482bd06ad7f26e350d1ac686082bd06f1fdfccf3f696ab40cacffbdac9a7e464f5e24044156879f73fa9e2c6ce0822a940a74fc184cfbeedf2492188a002a56cb3578925a97a8bf181c829d05f67664a8b66b594a44605bce8401768a6409dd871c54c67af0722a540c78fb66d5a5259def5900299929cbc6e91454681fc981d311dd3fed929220a94da7e4fbd8e72622b054442814a93ec722a3928d072c2dfcb76d662bc453e81f64da69917b3e7f68e8827903627e73725c65896ef1f443a81cc974c8933726126f39c406d58efbed3bb5a92566413488b9a35dbc234e56f3581fc2cf2f94fe64f62d84440241368cfa151aef4ee4c2723218209c4a7cf5bbedc6ad99a30de0b1d7808914ba0fe3f88d5c7de932f89953a885802659207cb35a0954049b266879364aff32947e005114a2053ec92a4949cbec824b0bbf6b0394ff41833081149a04ea74c4a7b6ab230a548543a75bfcae3a2c76a1813410abee012ec7811d0a0f1057b11023b85082410be61ea69b3c7e6d51ac68ce50e9147a0b2856c4af2963ecd6899882350515d4e4bfbc986e300431b81f61cce2dbea5b6b092119c3a49cc94ec1294bb81c822fe249b535215c59436878822d07639a7543326668ef53564606665670e228940bb978d891deb279e8508849e4a79934a5e2a762c874089999b4d675137b7864007359383a8b7debd5608a4a7255d9edb7ae37508814c6966f6b267aeffca205031cc622b6e12e325291141a0b73cff7a8c31ec2e2d120884cd56529292544fe5440410c82cabb4235bf29b3e651744fe80fafdcf7d39a9b54ba5a205113f20d34dba79cbda97ad15e9033ae54b27cd4f768b9fe503da4fc754be87496529227b40b7f68e56a6070bb311d1034aacf6700bdfc4d0a1c3c648297940c7cfe512e34cd0cb080eafa381081e90255ed4cb6a37a6c1ba032a9a18ff797ead61ec0537c4a8d123628cb8b3c640c40e082dc9f23edd772a5b0cff3032eb8094b9ff9344b513a103ca44ff64e60c1357fc1ac6c2c0916ae8b071e3bfc8f121a04143640e883d49edb8cf7986fb34db202207e4be7aeaa6ce4b0d390ea84ea27e279973ea360a07746a0926bee4f0cedb790332a71cc6bd5337a0dfc3a67e4ef2cfed97810b70e0601b50c2e55299e5a3dec9415c83081bd0f976623f96f8880e2ed331813388ac01e999b166fd7ce3060d1944d4804ca573953897318e7d6c0c226940e5dbaf4ca1336b29870b2268409a9873baf3837706e46a8c8f9fb544d55312061133a0b2c46cf94ab50c28d9f626593a511b3a707841064f9c9cb642adf431f8000d1a3ac680baf2d97f53924a2b273120b4246982bc9db87f49c280ca7c695ff6928001d5379a493c31c74a3afa05b488c7939452b275daa817d029274dae0cb30b2851cfb164d1fc7432c805949c64a570722ec5934e640ba80b9fa56be3e64f5a4096747256d78f2933d508225940959ce232c793ca4b9d8605d46653165a6dfafa64011a3476e8f816d870c582c815506379192cfc9705112ba072b20aa7369c4cc2fdafb601912a20632e7fd61247bdf254409d14cc4d683a4d01552ade9af48c29266e80202205b47ac7ecb6f952fa9a1044a2803211f324daeb3f108102ea93b0db75c972353bdf6607912720dd379549ffb9643686470811272053d07059abc47babc4ce11224d40d8a75c4163660aa3990d7451812e3480010b5440840928fbbeccd9f749eb4b968052e253ceb693944c8a8812505dbae2a49ecf53262886481250f1ccde4dce34e1194702b23d552ae99458155d153902ba753fb996e7cf924d1123a0354ca64b0a2245406598da9b2cbda5d3bc4f102102324cb3b3ea8926b68543408a27a56a49ea12b15a08c8d49bc9c4d87fd2a56a08224140c57afb3cd66b144480808ed69da4e5e0dd7f927e800cf3bccd32694337ec03b46d8c31ca6b092689294e10e90132099a245975e5c366c30394a5a8a611aff3385a16416407a8f9d2b3f9cb23114474805a0b66e149fc2b2b4976a47c209203844992a88996d9e63da704223840988ee35de749eaadd30d1b38bc58838c5ba07276099b32781e90610b647aafafaa29956b0b4e0a64d402999496526e6ac92c810c5aa0fb84cd2db1ddc35c921ac6d674ecd861038c30de0b3d14c898053a4e937092e89a5e3e5bc3588e11ff2b3690210b94d8328fd722d730762e1608d3d96a6dc35f894954062c505fead28bc61ffdd1c578054aa9969394144df374054a5ee4beebb4358ce917325a819035a529f67356205dcca3494a34f14fb45c0532463f65c9742a9bf61ac612c70d0e030300e0840c55744a1e4b2ac73011430c230419a940e67b8a68ce7531020ce0b881c3062a1017ee55ac4bfa0519a74086bc073f712eefef6e0a549b52f757e66bea7529d025a56a6baade7fe99002a52449e5db1f771408dfcf0b0b59142879b1544f5ee52ca60f45a7a3769b9558b6780105e2c49727e9737b1df627d0b1dd93c9555a4f203d897f72b3f409bae7106474023df2b69692c9b4181f2774cfeee169e9ed593b4dfbb6936653c2adbe92b10994f8a7edb4e9dd12b16468026199a48f61d5cc044accf99e3f654e29e53426109bc4a8274972d59c3e494a2d81ce4a918bcf3f8f95ae04325d1a1f4b92f0fd735202e9a5fa6b64f4e494cb4920ce74a5d21b2c49a0c492fe441393634e92522490e9efb394aa48041990405ca9ce25d6b62707321e81de54dd9564ce995bb323d295ebe297497203643422ddefd65c8cd0a8f43065325924128883a150188330383e5d00d31308002838228b4402917040d7e5f1031400045128264c42301a26201e160a46627130140804c2c13010100a03c28060201c10c7734009e70321434a366b6baa3acc206692ca247db611086c9c4900247e387205bcc16d12d2cc840ed432a181d784f10a5ee488afd0e997995257f4c98e255417302abda9c3aa23193e63bdeca66f899e87a1467c81f57adc7494e2c1a8e22155d2d64437176fa42dddb964790ce12b7146040259a510475933d8ec80d78161a7fdf676c23cae0b46d850723b97966b0971c56a9518c435872adde73f3a5c789b9399b93eb81fb399fdfd75476bab4a67ea9a140c4e8b8df9bb84479d2dbcba88149f3f11e93665f318b2cf96f02a02df8ebfe6b0fcd5b5868395ed74ff8bd907e60555815452c7d9047537dc7bd190d79682548d41ac810864f584f052fdab6654502244e2ef8caedea84a6955123f0a57b99f45d4f10e5a5bb887837a7d89ac8d269930ad5cd491d902b03a144d605bb0c4da8d8329d6af58c3d269fdfdbfb360804e56a5f43a8000e15559009aa3d269e6f26656692eb13e8efda7c4496fe90af3de6cc5510a752553650dc6e2ab1aa98db40d7eddb2897971ac244b77db6a8735f15c80d782fbe419e954945d0bb000f8d20fcaa96aa8132412a38bf35faae648952cacbdfc5bcb5f700b0c3593e81bf9fd9f87b8ab3190b60a38183d5175512f09522a4d7fc31ca1968e092a9073ef8e55f3a4d727a24e7336b189c05e8bbb933c3b59dedfc586ca5ebee4cbaf7b44de7dc60b29b307da92c58088906f67618b16973e18bbc190c8b02af31ea22ea856ce0d6bbb10ae198c4b9d24cefba941049556becef719fa08aecf88ff3bf53f1e56b988839bec3f37dfcd3e067c81d8e81831037e014b5e4293d2dff24a1ed5ef760aca7a2ba85e45e05ac15648266aae424490f65e3b67b7557e885291e6de4f29c9073032ce118cbd35556e527d4109d2ab7886a30bd6e2dd3596b842a1dd313a84e41bc9209220060a8811f7dc6077ff774a03fa42c4b85cd930aeaf6fa670fb791bc1277c5c7ca6a59a77832358fc07415cb55e05ab78066e4ef9ba50204042ed731ad9e45cd00099d475a2186d4c675b97f565ed66998528c5e58217f8d28667a7df14f7f238c20afd238588d52208e5ad7ed48625e60915d6fafc1b9e84f3e804b34937789fdfe190694a4f4b56764159d33f5d7485b033bca11d86094ed1a97e74140ffba5b88146ea9715b94dea71f8729cc5ed85919f9d481b8854ca155f598193e2bd5577e10804c408a87a18e403ac3df34595862b1e8df867efdc7872fa52522c1ca18fa79054881b74af11b78de2e184c30d35942a740f24a457d5b6390530f482e3f7f3e429dc1ec6756d22a721c62f88c34b114a71e547d4b8120c427e6318af06cdd397b3bd1b19cc3c68f0b7714babe6e06a800749db022b22a1bc2c976561de8d1001e987c2bd6cb14140d4731f87ef4a90a3be4473a633c8216a0234b1c105812f19506da6485209334f58240c09204c2697e30722b67eb8511d0a8840d48f4c5a3a3d3d1bbfd66601f23611b68d68b29c7d0ab8c479f8d647e143e7f5aed155667f235e2ebe749abdf0b1a5c312a0eaddb89c43d6b12c16824c4e16715aae04046efe72c30389888ba470501e09f0018749729e957058093cd2597593d0b8247803253cd62f893823e3faa97472eaf0c055bcbf0f1e2ffed597259464d2c35d980d357c3404766ba0871b1bb2c90e1323a995f770ad8818391f6b42cebd11cbabb37f023f89699ba6f07bcd2a639876d1c66c4f8120c13a086c7413c0ef211fca18967e866ec0b914477584eb0405b688a11cb2f9a0bc8c44f76513736dafa98075200b490bd2a4c4876455a8f0f1fbb2ee22d7ad512954e747354c46a3fde8dc7e6f2709c526b654d51e74cbef53252ab4016d7295a9a7b829deccc071a7519bb6e03e95def40009e43ccd319565ae44992e91ef04e9f84e40e03f71fd17b13d9d654d28d847782b9ee8e0cf235b6adf510176fbde73c9964007102fac1e0252828b41cc8e57ebc146d4d3b99e81d94ab92e24d11a15dc1e5b317ae7585ae0f0ac94007d6faee35c8a244c859fb9657b557cc3c49429e21394be9bcf0d63d7552a2a3eda099b77a3d7516d8a89560aadc4c4334a64bc103ba3c51e527d0201895b2aee424fa7a6c0ef22d2fabe7b674e327e7924161691b6063dd18117f70bb7a4142f072013500dc06aafbdcc80297537580e32e818ce029e517f10a1580d8f953c6d951332803cb48fcc62f2eb8361447df3a86624db9ad21b849820a0c51ca0118452f0be2755122812ba39cff7749853ed299520655ac6f0b9a229f4c89b3f941b3542b138529975702d7b6b7a575338d6bf880e98addfdf523eeafa49c5cff3bd04b6585ac4c19a748567f5e8aef94661c4c19fe8f9ee7d8c70884763bdb78db3f55e7c0bb06360925187671cf6c1cab508e351c98b465ca091bd082d96c3ea617f5cc1e8882dcd3977cb8dcf5f8c4561dba928137d3704c6e88cbde2da094381e24c6c10fb3f80b43cbc839ae3c8f27cea3815c6fcdc196524f2c5cac1c9bab5f6808a61340b5bdd57c0360189a182080b517299b57778b89615cf26dd85805e9a2104364bdea8cb6720612cfa32cba164e6cec0c82ec865b845a4cf5f04d631c728a917daa5a5d85404a78a03b59d4af1f8ab6480e0e7d58bde973db0801d89e0921ccd0518f9c8da563ea934a8f6735b26eb77f4845db50e8fa04d13eccba38ef9934aad825675763a18f612deabea33bce072f691ea1992716544665a20e6fe474fed0c97bc8bc6132944c19c361883ca9f866f46865fddaeb9b00aa87ed131da6f89531f344d00badb8663409addcfb5e0ac8ffe59c3da89ba63e921b09b0b90c17a749129815882a54d10d31b9f6231047e126800c700754b4839313f61bfdb6e472b974b2f4264f0253d7941e29d6ad048c6ca2a24e89b4336445dc6f16164eac3cb352e02780d390d5c0c6410324acecd000d9a4d73396ce28b3e09ab1251b33c472e2d19a28f53a4a866a6e9b992454c102aaf64f3d8397b22a2c1b97956e031262962202888ee0dd9b9da0108d13d74d3f1148c58b2a1ef0fb50308f1f7ce48d268ed3e28f4f03af20c9a95384d8fecf8e1dd933554ef3edcea884f166f52a448e228095c0e2da363fca764602728721b8a6074057dc4ad8db8b19d2551e41ade070b9649091b11fd4fd95ce4dc90711071fa9f27125272f9601ad439bfda5f619c250664aa69648abfd8fab82491f960a9dee510145bf168fc802b59c9aa0b1b44671d8c192f3469be6d3c114342b531c6de2488d3dd6190f6009b396f50832c6cfcaca2500fae963014824f61ff3ec4c3adcea8439a899bfecea81dbb18e3ed7dc7055bffe69b1a1bd90a7ae25acc1042cb3969a355734a3b0baa7bcfb9ef465e85b8a53b5c20501e9585497d30957e3a9054bde5462011e020288078e906a67326c2f074721bd68ca33d83f7a40297a626d8d27573da4b701bc07e997e3781bc82b7153af3a52b3074e2f3e8a48be0330ed854320e6b9888f0b829a5cc9288c1cbe964d72ba9fcb68729fac34d4ca1fa033c61c603eb067adc4482a1d320f5a65f32a16c312fd8bc960cbe9095ee1ab1695e78005190c6fbed58eda8a217d0635b42eefc32b25e3f377dba899957b37eba8fa4cc9a4c3a4c6a59800ae817395f53103c6bdee9f4123290b69a17ea10257e7bfc4625d98c2b30a5d864b81de48dea23c148ff5b832b2ec120e8a3f2d5dc8e0ae75bf5fb491f2e32d400a857d3970b55304c6ff55c1d6928d412da687e675d45f20cb37fbc814f98e20ce1e488d1f722210864c51fbd8f2cca22c2eb6cf594f084057f948d2f66dec293f7c963f810010cd13527ba833ad3bdd5971ab9ba10762cd91960f687b2e099697953359a7eb1bdb7b8ddb91a1b6fd6ea54939e2c40ba76b4dc7f1ec5d4db6bea99ac15b5a156f5e36221841106494c482edc0d365e534a0f6883dcec4bb098ee9fe829fa088de367558f8d0bdcdefbf6117e384892467e3d98cfb70d6849a55c56b4bf90571fb52f676560d96b63682b461f635024ca13ddf701ea212453a69df9189ee0c0cf046a7e539934c82a20d1e1e025721e04d7dfa18998974408496347f6fa6bba0059523e3804369c6d95843d11b4c42ab695acc0e8c1b4cbd78aa4bd994ff021269a9e06f596ffb7ea442f7c8968e056b2ff291f987b14f7708c4a56825b620089a837099ae99240e1d01d14e20f3a2e2bd94c3b382c80cad5655d2f21f206e7a6985fc408e2e49d2357b7d1ed94141b3c896d80ff8d2cd88f72e9016e881be461f9a9ebfc6d4f197e1f08d995b9924dda8e3736ac0d027e69aeae5775ebe08ca2b27494ddfe2f83f9c32b7e8958bc4fd6b4cbe05530a00b66e98915775bdb7eaa8f4a09fdc16985863e61785c1a399551af8b947223e63836add0f1bdd19c4075025a31a2a56e57a24110b4ab87ed5af9438da1fca0b7d007a802f407d42a1a3bda94a0391d198e19006aa8147b75c6d067b096d9321a13c6087ebd826a12c1679081ab4893fae54911c36f1dcdd44858a6db70222ae76bc807827ce17bb14610b40e6eb81d0f7bc24a2fbdc68a2955a6a211a2a45d18773846e95435c6024a770ec71007a21fa527005f81f01c5c12ea0710a987424ce1731d389a437d50a9293da5cfbc694468cdca3c1c0af626ca8473c1d6ad03072c66325b2102bb82f955da57ce65ef427a281486be70f94538a170430ee09a7e5751eb4a2f3513973b8bd05f2a4c236888337fdbb5624d50f913178fd12c99b91f38c2cc532d956b365836a1e16f260cc40e08b1df59fd833db84e3f59958ebf2bcaa5cd987984a5050a6eace05df7c48eb87e4320d35e75854b450767ad778a5d99be318e4327447706a83916ff26442a636d8c444733594cf010a12bea0621f224379a32ce881af1d0e53f52a0f485e9056828978228f80934f17dcf013184cbf40e60c856e0d80ac4121f13a0148f2ecb38569a00af63b2381a8a8b67a078930bc7774cbe7fa5c2c6883ce2c31263766e9fdb65808b04193e1e653bac959e2c1207d19c3f79358b58eaac4907d734ff481b39d8cc2a4bd0b278d7b87b53730d0f5e3118b5be46150d5d82e15bb6047afb3ec8c11aaa5909efb489227d38dcf8d32ee9a562811c87e50941b636297ad32a68873ba77f1228ec24365e0a2a3e8fcaaf2f7d9aed99eeb88f422fa806db44f92a5f0ca6da7a050e6d0b01af0aac3143bae757b1eabecc7b8f5d128ca0555c5cd73670d34041060d04689dd6701d155d4f4f7452c120593dfe6f8a00fd42fd7cc4de52e751afdb8894d6bc525e78db0e5225a2977c02628640758962487a8d0c6959bce246e8144a26af4d6dbfec401ba592c26970c5e6acd5d12d180df9d8efb31c5827b85a86e526d23cf3689c211285795cfa46c415c7bfd7625cfd373e40a10cdc59d99d954b46321d755ac5c1a65846f1e68a2d5b88604f4cdbe20743e83fb68d1f65b591dfde4f31d1dc470233553f9ac404114609f225368936e4c73a72a6c2a813a62eeb8e48b7a516cbd62bcc42887ad084e7071717908edfa3845946d114318fcd96e4218d427ce6b65457208edb44f04748555ea801c086d4d37b6b789540e36b4dbcf6ee0f88e5d06004239a85398786b7e9320eb6cc4d5567cc469a06d21a0675137ebcc1d68e50578f626a5bfa528275fca2bc01988774651b6a32652b4ffc272eedaa4641be34c29c1a625590640a533fbcae84b398fc7aeabc613c5d5ea5e36d3c9950e538e4c7c4903c888147211f1b0d171a8da085eedecef86dec2f6cd614bdb1fe6605c6f4987995f116d8bc00204e4fa1f2db88602342f2283b309ec7cc2bd757e6020faf8dcfd3b1dfe16b8103d316bf05f58f0b6b55187ee0a1d4feccf8658b1091c07a841146e602e564dfeff3a285f12d1a94aa4f217b194e8c8d1b5e34f61c1a7f4d76ccc968586c11fc35f984e1b720d90961b6c85ebf31c580711f8749de340807c23ec35fab962abc4df91db3a7d07c7a99c833c0e1fe5bfba287386dd391b4f275e6c9276bb5dcc2c7f3853498464c6538db1214760a970e29f9e5a0314971d9c9c9802315a92aaeadc41a370706dea1a3b48c3caece74f004110dd6553057ce60ec06ed99fa7ac4dad9afb4706c52bfb4d07672b4287b860e63fea7381ec1a068def6cf66b0dcf2a22cc89f78e8f2ea790bb85d5884246326b5d3851c61ab2200875f239829b91782b8bdb18b5c45942b11111b592bfcaa4d73816c832ac825ebd8f806d0ce8ce92f98200b8d4069d65546ff1df3fe0f75ec5b02bcbe115c24f9ae54cd53c54b4054c78bfd119f5226cb435c44c550a297d10c47978dc5592a7ac483202bb48ec00335910b81d7d8c5b772056373ff7c192595ce1f4a117109fe7de26e580b3898fd1a9c5ba2ca08299a3e6c4e639982a9bed948d78e341ee8674ad73c5c10cdfe1854831d0e433ba6c4a3e5c63e60211310657b79510b18bab9d23e84b3d84da338c37ab50bf34e5ad07d806b0d61d09d56998fdf8a2179f87b3899ebeb9db230fd3b5c1d3e3227a353b23c2eb0c3650f24d766538395c52116f6db130b02825ec09920c562541b57c0a016c942c11c272c7e6361e2bf69a6ec8d960abf3d4122a8c6bb378f588359b13b0ac70f523680bf8ad2a16e223d071967be71b41c65c5e3c331019b198edcb9083db368081d5318546bdabf8b3105fa9032114cce3e6c3c2da9c8c3c32033f812550140c786ba0339a42f5e49d507f9b67853e680d9900d7161a31fb551ab00568eb7ed33e2c62d7543038ea4401e65a54a455ecfcee85b69e029846032bf4b7a0d7e59a322ca509deb7f310dd26e1b041bad94981b88a923aa253e8b39968c5c9a50eec8b27fe74a36a0fca8cabe3180e2d6d9f06cc26808f60b9c6f6400a5b0b937d685c0ee3da46331a6151e143df339d4a5f84d6ed1e40b02d0336ef9f2d10c8eda45190dd6b8cbd868c3e616a61a0e73cf66cd255796efcc821b3ebfac7219c614367d7e51e17a8c1b6ef8dc8494e331ecd9acb964c9729dadbb51f367a9929da3b759d36772af0d05ea258f048866880c9929d0907cf1581ee609db061c14a821b7ab092e153f98a3575d9a5dd93ad122952c40b61bb05fca448f3ba121cdcb79a2abf981c1f7f120833d5611cda3040681989f8a2c083f62c2ae24c8ee3fe7a5b75ac573a081397900adcd13278cc243847078d19e0162de77e00a96e715675a701dca67df3e96b9b3970a55095f9fbbe19d60926bad5cafe494086d2257a27b83f3216f68b220cbfc413686dc98ed284459094b3ef4b86e44acd3d1056119088a7d98da4836322373b1cfd0fae316af1c536b5028b471b853a6c1912a44a362f5aec6c5487a83b8ca84c695390f2730ff71d418064db68c687387bfac7706adc9426570a9e4172b6e1db3823e84838eca12b7acd3d0dd08c39af67e4aac68804ce7355fa8b52745fdd60c88de72e3b504996078a8604321d52229fad1530a2884f92fbf830e538cf9edeefb4dc91f6eee344c4b7008d27afacb63f9eb384ed777ce198e203280dba44aa0cec3f1239fadd27c86251f2e46af06e431f38bd12784faa1cd61ea940327bceeb0b5a446deea3b3e10fb3cd99aba58aaf76f9c4b8f181eaa958a1560e2d91c8e7650a7962f81bdc3c99a4a56c89bee903b0f90ffe9d670bceae1b00e8e9ba4059cc7455d3a883fc74e4be644571717ab05d4960f305d47b82c8e2e68943b3c526ad058db644d2016a87e4cb96221517915365cfbfe0450d14ee9d4817cd15ecafbf484ff40f377a074950e9875dae2f405d79bfaa4f5fc787e657132e9ccb9d236f5da05bc18964467127fff312458c4ccb33cf4340bd0f4d3d413e52032574c338e0a33c2e970d1ea90bccb3b738f0237c0a5811d66a93c20f9a5a5b888b01407e18fe6f74b5da9a0316293d483d6990bf27f43aecb639cce104c6b8daa09d8bac70c392906907b0c5e8d22204b132c22305626cd4c435b8fdb1f8ed742d0c47d0b19624fc101f63f2326b12db7fc9c05e75ab6500845f3c26ffe36ae3bf666b8bb25bbaa45e16bf2612922183d605cd67afa4232b767769831e45a5f07d14c69004e884d8fe85c0ee1b2db4b4eabaac24d116d6f4a3d77ce056339fd199a217429f1184e095a7c07d89514140f37dd8757543bcc65caa22c81107f5a929a5d31b8f8f90456f27348915d7cc982c889646f48e1d8fef0c292e6288e7223cc30f4995a30b10714cd2027c947e5a168215f158bc3710399c07c399b9025ef9121c9495eeb3498e6132c3145b34e865764a559b8270ca39e19c61a0f036a1726dd6380d042ad1fb0ceea433cd4ee19083649932a206f2cb5ff1e3f9bfe09b63f52278b2300cefc73c73a60edb2f86b92beb32af20065f9bb929d95f16f88b2d096fda34992195ca002fb15702008db9b36cf478396aef76cc5a28aa54044cd485a1967b4156c50746d8afab4fb84e42b6bd181aeb29d82b910b839a6c5b5d53290095b81c3d68361a848e92f97a249943d462a58e21b3871682b39e5adcf4b4d7625ba099882bc7b09b920f938a1941ed378a005504a51fc4ffba15152b8ecea719b2f18ed2125c6ebe3318f4d96af3c40be9994e21048a236999308a9327bd5315204bd9748e92200a8eb743219e163a8040350610a2333ddbb0c187b9f5690e05946c9afb596c671d57603c98a1d49346a5b2bae419008dbfc18fa9492190ff86247ae8229ba65f92536f8859f3c2224a68fc7904189f24100150219de1a7e3a4c92bc8a3e84f0b9cefd8a138230f717e55c96009f520fea85ae2ad6022c997341d459daca3aa7717acad8c1b722dde6742d821e85099042c49b1802dd5feb45e5d8ccacf9194c83846b8cd78290eb5c75eaa7b3d7c011469d57056d0aafbf7b4f4b043aab9a07890bb40a556bec07985fa008190b4aba2374b7c4c1442aea981fc01bebcb08146058a47c90f7c21999d602b426a1a21e934c2b63a0e34d1ac16445c87412c1b0f8c58e88125196d468574801ddf8efa35498fc208ed90ac1d83f9fcd3831f2b5aae7c0cfa4cb9eb277102b787053c8b4bd81f36f9bdaa4d613f5bf032243bf60251f80bd80d82f879465afbe459a5b70800803d98a798e2c8cfc1449edd555fac92dff7ac421d893436f2c9c3d56fba2b11d8e723916faf78c64db0fa8b10cfc16f7160ae3ce45ca994f6c8ea1628c1fd72c0854fdb0c205246572af50779c64ccb5cc0d1c7e463daffe354938fb3c0f5c2372686c5e41d79ac1ed0fcd28369552ddd749cdaeb48566f81804259c2c0b0ea4ccf778243001aa091ba8adf01d7454281405c15f155c689b327829eb754a326b1fe5003b8b9b838501c7342dd0769485c17f4638d092a8e2914874f9556d6fae9f4957658d71855ae5f4b761bd4af49c1826f8658a91749da144fff4691e47ccb8dc05ac5f1b095c902f4fbc8f936bb82b8caee3f4d4562cc2229bc79eaa687c8fae9452ef9f40c86c02a3fea2e957c4126abf6d2390f1dc9c3c90e6440b02522971822af34ce4abb8e0914bb657f31885011f5faad2aadccc53705b7b21dd8b81b7a7dd90e24de5dbd0dde8f596b1bdf57f07d9577ee8660bcfa910405d1ddd054237dba6e9119eebae2e5e32bbf5a3fdfe4ebd7597870bf5c04b060be135f56eadd35b6701f25f5875b31570ca0cdcb67b89779bba75d84a93dff9221bf3bbee6b9f15ee65f35aa0db865d8aedadc55ba7ecd60f441e75ab9ba3a3f2a4e043eec601ff6d408976ed5213d902b6874bd4516703124af3bc67d3568954e308ca4dab26d1ddee7953822ee317475b5a41420a1904ba7045523719fe5ce8740d12241a6c49d12e081c99b35d47e31e5f964b3ce5e65e6bb70d660e801d41ef593a1338d44bfe598ae61560dd7b34c5c554295a33ae0fe17f65e30b40fb37b3a0ccc343cd97398d1d9c1e9f5c5dbb749a7eda6ecbb35da2ad13f668ae432f6d76481c43f31771a112a2a4f12aafea5066a2b116ec0c1f063943146588c3b1ca52506b1246fade33360fd79ae5d42073d01e095e97e9e2aadc8e641ed1f750bbc6895368d028f35c959ebaa7912f1ad8c82d896fe48c08d2ccc8cbf5dba166292be889376657255ad0d3b26c05c24daa1f3de84801d0b887ea08ead726cb54f817ae23f5995698fa228405ba674ac4d9951b59872983abc190a0ad722219247fd75db8e2330b36f645772cd26ea921d41741f9a1fb27b16d085b45fd62017c175fa6f71745b656fec47cf1874b056cab8ee3948bb357a881052a8683ddb5d2fad152e00de49e22b36f77142682ee5cbeb656a51fa9f9f0feba33df88eebfe0e0853025801d5f0605a6c81e19967b500f5bf6534b639a59767af4ad96f79b1525ba4b5a4df48b9be43c80199f03f9719fd2570872d40ec6a265409b2918974725af45c310b9a6c30a656311f706b60e3e79230c95089830d2e4dc16eb3be7c8351cc19f7a949fe198fbcd8d4d7f840cb0ddfd43a96c07465e3d9795eefef10a8106d9fc273ed8d1e65752f2f13bd4f56c58dc9d2e1f549a52013bdd94bd2fbc23688c49a028437af94033609aa9d3600398789b0df44f9a8dbe899ac74dfa40d4ff7db1c693cc028ce2aacbfd9d09d169e2a1c4c51715c451b8b2c5ade0d1f83e032647f4c642fa8a1a0eafae59776f0c6eab14288b8ee4324b8cfeaeeb7873a2273b1c0b466868cd6fe8dbb3356a210a9a15370362bdd414284190003967596cda7cc2277fc6d3f788a72f67c9d78d81cd661e7d2c79cdc1d8cf7e0cf6baf7b67efcf434fba0ec9bb9cd3918d952366b5ec54f2fa1e5f91798c98dd1a0772dcf8b13af00249d55b440164528674c4d7f24dc4d865f6a8b14ba455a4160d705c6f4c84cdd445515da4c8353a30bf610394c222833806370cb60c3c087c10a033fa0c14cba0f77410611ed608ceb19648419038906d838f8bf08338a163acacd40d4713083dc962bcf8517370b59bdfc5d577642a17f61b40706e1b5c132fbbc11c2377067e065e3fc4cef4378049dd0e198875e6d00cd209b417d3d58662c632a0006d20d7c350723e39b155b74835506f40cf218641904372861d0c2a0aa41dd06bd06055b83c9926e9e0a34a869d0f901180454066c663013c5e0590e48efff3f8959da8bed837969f70350206c6edc60cabb5004b40b34502033a9567ac01545950eec4f1707880a5035407905082c189b6fa6024802b00ef0012002a06a035cf9e2900bc2027c2b6094c0280fc0e45c14b183d6000cc664731101520045e1edfe5b009702e12d40a9018e046a1a80bf81cc028103286341fb062a16a85d403d12c01cc2cae50d7eee75097b38298f932b7967893c0746023bc015e0bd7d23a4082afc2d18b10a110470a0f76a45901660b3145344a014a21270121c7f0a113a8f47ff8790d536d6566f307f1c252420c26a4c80f8a0780e642040d0fa7bfadf83ff836898697885a28b9d96e3204ed03a1027030448896dc48e87c0914b73a97e02424710f19f200fef662177ef2a1237513ba19742a8aecc4147afd83dad4ba3046b58edde11d3fc06f0dacf58058d25fe1952b80d1e1776ccdade06652f99dc1646a6521717d6dcd740ac0a6d6259d3b7591854f609d6cd540b8eb88084c39ee050d4a12bbfb2baea7be915f1eed86a74a74cb8ae6e7a1c5a7579f5da0b2a4816f0a3b04ed6b5022ce01ad97434cb68379e309eddc1619d093b078e6871689f502ad3fb5a81aeb666401dc71694f37d16ff316cc84a6d4b03a94bf08df840b4c189064d05cd24100a225198bb306ed1c1f6dae2542496f0b86f46e8cf98a03424aad7ae46eb6dbe158537f3fe55c8bfcfd61303732d407d8b79190e26463179062798c08d573e0bd919a0eab7cd2e948a69fc147f757688a2fd7b3f2a6f3aa7069904d0f0bf8662bafbde49f8f3f720b5f1ffa76647901c9c73adcc8fabd894cb59f4ae87fd3ed6f12a6885ec95e34a2080dac1434e06b50a17388619d9330ee5e699c4b5676c6c59898745b959500d290b281f609dc873b0cc446f53c1dcae5850e8c338982417a649b0f872b8b05762de8842c6abe33646a2e5dfc0a5e6b06c8a87ebe3e13980114f20bec6596de9636ed27883d022dd1d9988d6b435793afc652d08e2c9c2af9933addbca93c962c0851249f349adb62e73aebe9681c4dde1c3950e9cd01babd7da6a3074d5fe82a3f2db2ab003f1e0ebbe40f3920df22c887a0764b818b30901b7045d0cfb9b82afa9f7203e4005172fd62cf7fdab180d35e1f701089b45fb2b50aa6405582981fe88fc95098840684ba8c5cbe6888ad9a1b9e3d417340b1b29be87d62b6126566bc37605036fac3de897242092d56a94a2f08eeba3c8e4bfa65ee0e5460d00022aa4904169116be4b12fe75b03f2a4bc3f3c11e3004f9195b2539e7d8e14bbe0ce7a685762688f2e9cd4eeb6164537fd0473c2294d3c9e14283d7aef9fbb797315b69446688d48a21909bffc4c50e44381ad7dcc6dd2d0f1302d0188ba51a47f81d947e03fdee9ce596ca7578bedea17b61c7fc09b920fbfde1529f12adaedecd507afea5f0e5be32020e6f16468c304ea5a5601e0c20e8d18bc7aeed18a40dec489b78fe251ba65ff4fcc3a9ee42a92be6bfba29c395c3abc9d7ea162f76a7173a16de8abe9f65240f39e0ae842f34b80b20c92421ef2ea34af4fa3837ab08e35cf52c5faf86ee57f91e5acbc57fe89d076409e2a2f448806eb90a31dd0c11440f8de0321a87ee0f8bf2c21b91afd855fa0c46b8c3935fc209c54acad47a1f5a31794244ea328caa62360e20c6b3b5d48112bf76f580ad2349c6a5dd593dc792af4b886d4528782407ea5d60e6087df3dc6415bde7e36a033045cc083abc23e87f094ad2c0ad0d6f37e971c8bf4b76538ccb8cc0f3494c7e72d1922ae8f189c4584cbaf434bd0219ce8e29e754b97cf934ad9f6ce283e841ace0400bd6d6ee78eadf043fc70398ee2326dfedf790ad4bfd5102c2e94ccfe8cf5dfa5f81de075e42982b4e497962967a91b25fbe5548467c2c38e7bcbcb21e1730679f619c26ff2c0e76f4709fc0b3404a602c585f048e8a9584fda53842c85780223815c030d7b0201bb02151d02fad91f9f3440b2a4d001ffffffffffffffff9f26d8d666238df9ad5999929c9a132828b22e48322599524afa4b3f3b666723ac0b6c5c613e84e109050a5a09a570c1bb342d53748cfcdb24f98b639b8cd90475db17c79b3de14409935533edc549d5878f6a69bc38662aa1d2b56c7671ecefd8ded2dd5379bbb11fba38bb98694caba6192a29179c24095913ee7f5c9c3736264912d72a64e93e6e7132c97db55ab4b6482ee63635d7b05163ccf3bd349b25ad16c738425ac678f249d9826871f0afb467528d5e97ec2c8ebba327a96732d9128be04316665c67acf86e6f4fb9b2d7cfd4912528dd948dc5d9faa420d67382c5e1338941058f3df9af5e714abb0f252c7488dabf36ac7cb8e274fab2dbc8247fc3499703418d1a232ff868052e2b9bc32b7bbce59fde30fd950f569c84db9b3bb97333e86ad4a851430c1d38c4e81e2339306af85845824893977fb5aae2a4499fe499964d89095371fcb2925393924d92828f8a73dc67d2fb0f153342a7388a8abd70d3cd9a994d7192c452fdce044b71ca231bba6d4a34a973521c6433bbe4ab3a0a2eb3253371afe8d9aa394b9839b794284ede26561c215e33b51a8a93fc8d97dae783e29c77a15767faf8c43159126ec3fd5f49997bc387278ea3b241a9b75b51b9ecbfa101910f54163e3a71fab114f5b2296312bb055df8e0c47164f75975e986ddbcf0b189d309aa67527fb664ab4a0ece3e34710c33f57db935da322613e78fedbf94bf436b3698386913f73635aee2d2450e1f9738e78f064d696d53c51202910f4b9cf5043df1927c2ac67ce180f9c34725ce1b44442c33472c4992870f4a9cbbc4a084d11dcf70ec6833899324cf5b38999d248e9be4ef52269c20fe660f7c44e21845efe89199848451543c653c5545346c6cd114f7b5caaf64bc8f388d49aebee1ecd6e2f4e1886392efcf52ada44bfb8d386b888cabf15b4549ed07230e2b420995beea6c4c6cec8df020830353f858c41acf4ccad1273f541e1f8a4866538a55c965abbb33e54c4595891ecbd1137135ae061f88387abca5d8e8f8102753caf28e9d6ce1c310a7d5bc572926adfb082de1a31046f7aaef09713451bde4bea829fa9d0ce298c4d22469393182388fad9897052d31340dc431bea65a59b5ac950042d34ae2d55e31864d1a1653c997d15dfaf8c329986c632d6e17f2927e38bb684a3a7a630911d6471f4ee95767275aec423e2d7cf0e124951267438c922595f670b064826cc9cc9edbbb1e36f9c2c93362ee173ef270ae7cba4f0e157a824ce1e1e49b4a8ef6cc2c416b77386929d16ddd567173e5c30e478d27ed65985b87e365dd141937d1e170313f837aef17f3bb3ee67090e6df6faa72e525e9430e474d262798ae541393cc471c8e7d32c892ba458fd21d0ea7d2669f21c32429c9a38f379cb3e49853291fc2b6fb70c3d9a2bff6c885f8818f361867319865aed2f2b2cf92b938256e0a173ed8700a25e4f372fcffd21f6b389afc304974f8a186a3e7e671ddfc3d15d5091f69385c6a6f5bcc93af4f5bc8f840c34933cfdb6b52b2e5ebc7194e657656929827f830c3b1f484a5982f972489cc818f329cb4e56f0ccd7be292d2b9e0830cc74b255730bd5c168430051f63386c12268e2a51d375e63ec470347da64f460b9b2dcb8f309cc53ecde4b3385ba7ff00c349dcf0a5a7ef96adc98f2f9cda7e932468aed94a927c7821cbd40aedccb26c9abef52b64f8e8c241658fa6c9a5e44ddf1f5c38ce957cf963b3ebe6781719c3866de0630bc7b224d4f3643acfd42de2430b27f1a6fee4ae3ead1dc5e0230b27a942ec89f576bdb260e198aeb42e4fd4b246bc82ae31b965b24c3185bc6c2e55496b08d10ac7783165562d495e3bb98f2a9c4fd5a78c1cf107154e32fe529c06b777fd320a1f5338566565ade9167941e8af034732860892c25147b58f289c4e7e0d5f25b27eaafa80c2c12da9e91056e2bafec7134e52c4a6e8dd14a37364a5840f271c54dc1b7dba2bec2535e1983963959c7d6b3ad507130e26a51484e8978a8ffdb184539f98efb321bd2c6f94709691515eff7449d85d2d2ecabba6ce60665292bcf28184f35892a149ba8752b27ce3e308c70d7f62a5269942c287118e499a878fde2d15bb7d14e194652cc699a98c850f229cd26c335a7a7669a9c0f03184c399946edb6655afe687100e2a554929688612ceef609ca4175ddb93d46d38255798018cf3667e2829e2ebd4afbf38ce7cd5c9e89852d9f6c5f1943e25272befc7a57a718c134c54f5d0cde0c5b1faa4d1f99b2addbc650a3376711a752954d0b50e9191d6c54969922ff5c44b4dcdc5f9ac336afc2bf1abd91b6b1a01167c4003222c18830c13d4a8d1223dc62043871a192690818d14ccc0c529e80c67522edd8dc5b1a36da0096460a3c68c5bd4b6e2a633ed96748e54d00c5ba033236f17a213432407f68c5a24add2aad5ede6df3a7e23c0820f44400c1112fc0c5a54d1dada642b69f2eebace949224c8fd62882142821d2226a851430c911cc8a3c78e19b338cec997c494e43f3fa999218b73aaa75aa93867c4e2b4f6f327894b329df4c09163c78831589c04d325dd24ddea3c1be1d021a2a3118f3f1e8f3c30e31527b12f34a8bcac5716efe8bf6143a4c75d193a70b0400d7d0ecad081a3c7bae2e45e49bd9d14b51d3d06a61b3bd00432b05166b4e25cb56dd2fcdfcefdac38ec8ab27cb282ab386fbc67cada75fa82178319aa385add973c26c853714c92b8aaa9e142afbb19a8d02cbab5450b2a1a2b59a85b929c718a83bc652b3125c61487d1e6a57dc4b2ba877d039531a31487f5fe52937927366e8c90b183717400ef4744768c61478a73c9943776b309b27bf323366cf827111b233d46708ce81041993498318ae3e9925492ea824a62c423388ce5804772e0e84146076688e218455d9f982443713c4977c84f3db1dcfb19a0a83363b52a936a5b3877119b37eee631dfe07de220167c4bc885333c715029bb5f8916f5d5a5c8880e1164a62782199d385eeb7fa7589228cce0c4396343563e49be8de16fe294b4e9169979f44cc69a387d66b4b6b86282e8331356796617a1419838861a554ac8be973885492e66faba255589250e5739649e96f0b3fd56e22026f8850a72338772297110d7a921e244a9d099499c94602666da6b538a511227992726861f1366a747e2ec25e4aeeee6529f2b99300312c714636c125774c64afd234e41c8a043337fb457d411e71d31494cdbbdfc2635c6f7080137e29ca231c820d74e46597b308311e74ab2e8ed0b7fe142ca8b38c9d66ec94adabc269b8a38879638d5f436bdbb9a198938e8ad2469959a88386b9e097f7de2e8e8cb210ef72eba4e9a3ef92b89214e61b9269734a2532ea51027694cdd669127a4859d106759115d42c93b4958bf831983b84f8eaa9dfd9918156608e2383aa35d5e130d84693aa485d41822b4810e98198038efdb26954aa8180ffd0fc758355f512eddbf7c3f9cdfeb4c4cbe66b265131dcce8c371d4e5ecc96af66ef70c3e9c6b739d9b605bdf9991197b387cefcc9b209794ba7520c2811a357420c283874862f470b81f2b294c6d558ca23c9c3489a1d9dc040fe7d88c39f4a4928eb68a085e93fca6f6924ce310a78f8d93dd72eb45cbd130c4d1bde298e02b16b467340a71d84f51319d083b611e010d429c6234a1947492e0208efe27cf852d596c27010d411c94a09644735e25cb027152aa412869e384b88a8d00e2a0474e1a15ffd2b265ff70b4b3534a92a458f25fd3f0c379932815eec341df7e590a73273c4d1df0e11877bff484fb93f73d9c24d32496ce55f8c9961b6b7a3896a6241a62547bc33cbac788b13c1cab94eb8995fd1b6b7833a08187d36ac8d056dfdf582b7738edc60eeff7eb977be8b0c3b1e7f4821245c99eb90e67dbf2f0da8c79d9563a9c726f28417cde24d5f1c81c4ef23623a42951bb64891c0e2a37fa4e3ed937bb8bc361b35f3e5315031a70382825b7d13bb564cafa0d47517993123a93dc70d225a9927156d4e7a4018d369c4689929aef7b3465c5ce0534d870ac5063416fdea98c298d359c52b2ddcd3426baec3542430d2759314a95bc717308258d349c62fc731551826838a8ac7eb14906254613937686739d206e255d331c45a65eb8205ec6346538264d4df5929623c3419f58bcb41a2f96392b2b018d311c344e92b25b899394ecb38086184e9ac34fc5f072d98268240cc76cfe2163c9b31d79c170dad7a44295f58583ae4d9a522df7000d2f1ce3c6ad34a694a279df8583f7e8cb9c4145df5e0f0d2e1c63af8ebad0908b796fe124e6a8f7918d934908b58086164ee6fdba7f59c3a99527a09185e3c9ed08392747b449950fd0c0c249b6b497e42549bdc2497a13222608d53c49360b34ac704cab79a2de4cb27e0cadc249b8c99e474a06010d2a9cbdc2865327e63d72909123078e11d4a8218283c6145c070e1de820830134a4a068c97bab4691cffab59e374992ca4b37760334a27036250879d2b792107581c2f9c67ef45498bda49a0a683ce154277db9b79537d6129d86138ea1b9b2fbd228c9b49186021a4d389529316851a54e4b64c2314fc93e39635551e3259c342559a3b5a49570121ba3c524485115d36824e11ccaa40a5f79c32861de58c31bb1d16344e4860d1d3cee71f0e89122386cec18a181041a473811d030422982499a54161f320d22183ca345f94cadc15483dcc63eebb7e026f905d118c24938259e90374ae9778686104ea16594aed178eabdcdb1638c1094b181919146010b6ad42823b13132d23b2c18c7d07e49659359601cb48fc55e6ca818adffc5a924597d7d72e5527a105ff800a417853593b3d8a82e16bc3d2d5464bf82d0b37b02e1c5d9fe2d549e0b26a79d223d7484601707f3d2132785776bb170a464c342e0010f8c31d23aa851831f75e2716600d1c52979b9597a53e26dcfc531960ef9dedb328d352e0e7f269e9ebc81dce26c65332685902901c41627bd9c2716645425b95e2d8ea3b145b8491e2d3a15a329946c1518406671129675bba5f32fd4258bd3068bbf289f6162b66271b85a9364e6d793b49cc002dd25e8f4cc222703e41586baa656a5572320ae388b4c1df2afc4b4e2b8176f265f9c123597ac40e46fd6ca7c51b7d72a4e4f39cd216af1669ea543e9115a3f882a8e26690c269fe8f493f4fe3d708c8123878ddf218246d05271f8ca179e27e8bf3425541cb764ba876a93539c75db64b14d767d23531c6e54925dda3f5dfe2b85d699193c46462c5b4c29ab2bb3f377fcd49da4387fcca524846b46d196984f92f5244571b2246eaaa4cb2b4d69a13826e1a410bf97ea548420a0389dde5f6bba0d87880b740c904f9c84caee65bc72fb313d71dc581199abe3526eaf13278d4b675292ae4c772b04104e9c640c9372d22aee28b56e10403671faf0ed3415c6e449ae264ef22f8449cdd0eb76268ea227fe923669aea9828983121dd3b7ee1d3249815ce2145fba949837da434f2c717ccbf61333d9b1bdefe04150a3c60efe0648250eeae41b735171e12d098412a774b12143ec6cbca5804ce21c1b633d479b78a96b193f8295c469ccddef2d59c5377111402271504a2641895a215fe40381c4d93688b9d37f629c00f2084ec83b1567d11c2ba851636dd8480f911c23c608208e38497a7e93ae8cb018938d389b24f9288b9d66c27907c28853ef8bed96f87372ac8ba85a356c765696c789854d72490c1a4e451cd4694d39fada84a524b35d8b0348224e97ac4e55aba8f4a6b90e324478b48d32121b65e4d891280310441c83f858d073dfb559de58cb010ec70eb039e33cc4d1dc2d2eee8912439c379914a29e2a2a95588e1a35ea0a208538c885fa12a37849c277421c37f6bfabc9679be60ee258b228a155948a208ea5374e38ad2090401cf382b624428dcc1c221040183d2d6cf2d454cbb21616ecc44d554c8b5e14e40fc73ec9521025aef342ee8763cecf3ca784ca9da0eec349958c08b57abd01840fc7f853177a966432c1b22d80ece1a474c3ef28bb24899754a306eae15892283319ffa426b1ae019287b35e980d2ae5fcb492c8dbe021627838b529a543e3a92456336280dce194f9297f620e3573527638bab8c5c9347a529a243c7a24903a9c2e337d9d5c956d7d77f0377880d0e198b2e83d417d9ce529e121a2430c1c657338977dc95a318a9b782a881c4e16b27d2dd98c03240ea72d31396d1d671945341d2070389ff41d27f6fa786f22c0820ff4abe0118e1c2ba87103e40d870f51927c72450d6da2493dc80071c3315d38d1369c54121b21479d80b0a1e495e1335c0cb3b61c1a54aca442fab69b7609640da718b3668c5ea968d04778340aced4702af9bba3bfd962ace80d5f90341cc7734e095ba2a657111a0e7e62f3bb4de5abecea190e23da64be68ca6450317f831ea30a88198a6f9113b194c5b48ade131a4fcb3a0029c341c960217b6ac3a6f34ef03a4ec00210329c57c3345f73c9532766d30432b0410290311cc6fffcc4f08d22d7168088e1b056a244cb1bc7c1af40470840c2700c3ea37b426a9e143f188e25574e88897dea6502f285d35b9da61d3f79e1244f6caacf92e2a9d8dae0216243078f0f81310148174eeb17feab94b904102e9ce40dd59c66d1a4d6ef08205b387596fc7327ecec9b0802102d1ce48e9065729430fafcf41dc8014816cebe734137e8f2d3230816ce26762ab6c64c672b205738d9c8fd3f49c812aa72bc03c40ac7f88cd1c4248b4a9b57e1e0292f42b699389d27154e99c4159d0b51f1f74de154993bf4c973a521932c6f002285a359ba3f7dd94db955b40148148e69a5cc54c3fb6412e71011494ac901028553a8d1ad12b4c4e58d9e7098d1f19ba3a4409c70b84da377b16d178034a12c1a1a2d643be5b4c268e6cb5a41f5bb650c1e221e188387486210261c2c4cee0cb3c1259cd764dd3ad57727c91788120edae4bfbaa43283861a2409661525a6ad6c49b69307204838a64b51a6f29e5c97b41b6b3674f03ad4360072846338498911f925aac6f88d351c367a8c90810110231ccedce7777d7eee7a1d78a347a3206ff4e81d59468f4b9022981556345c0caf1563292522c78449f76814d4a871a347efa851a38c1e074284533615ad2499ccfae3328473493145cd924e10211c9467d097b24546fb8271cadad9ed9b64bd8d070c0e28e992b45c69a13d9c4f8a2196731754ac87f387d9a568974fa8641e4e926a680fd5cd95927838ad66ad2a490e99e4f00e0737cf35d77c99723b1c83bcf58e33b70e47b1bb38f9d456accfe970ce9cf12cac7338ebfc8f49ff2e1d9a1c0e9647a80e17eb532a8fc3c9ffdad4ace86adbe1709245b5493aa3a25fd01b8efe5d3fb2c1dca4b8e19867545df29f13bda40d07759b42edc4109b62d8708a3f72366e554cf26b38c824b6da33456a38ed596a1599a6e1f8fea54faf44575dd0703e29e8b21fa11ad53cc341695c6b13638bc698e1a02bab66c9e24617cb703a1d26aaeebc526a643886876712f309a2bd426338c51521d5d52a253989e1d4963c67f70fc331a5ad0c9507c341264b924c6b926712ff42fa44e8c9b0ba178e2537897359adbdef2e9ca4d75f688fe9b63a09830b278b77275bc95b385ae82561ccea35af85c328495f856df0db68168eb741f4eac6d18c25160e724474a9885e925ee1a06486d5ca5565865638a53ad12ca6317a5285e38e76252dfd5ee651e160392bff9a3aa9f6299cf55bb425a1f94b35291c4785a676af92289c7d6fc6c5e25038ed9d103972965e829e70983d5954ca187f64c809a7bd9461928a258b9834e1246ad2fed022640835134e923427dcfd259c4ca994268bbe10372be13832e7ebcdc63b2527e164f97e9a4946c24949fb674a8d491e9b239c3a3d7488935e7e56239cc4a06252972e4538fd663f6582c8d7970867f9bbd0354a099fde100e32fb3349a5b2a4676108e158f992be3423346fd5c138e84b7933067d7a609c4c653cb4e853a3927e7134396f469fdefbd717c7a0225eec4d052d7b713e498feafba6462de1c53975b32e4596a0c4bb38a55241c9f461f1e47471cca516f397e5ebd6b9e02f33692c39e3e218ff4d0613e75b1ce44979922549aa24655b1c53ff66a6306172beb538c92583aa9c934b122f2d8e5bb2ee9438252ea4b3386f78d72f25799e466571d099c4b56ce28d2595589cfbbfc4247192f86a81c551cde49093b3f9b57c45dadeedf37574c5f13499bece183e166bc5492c94aa9ac68a93b258933253a916ade2a095d1c42a2956c5f94246c96916a7e220739a08652a2cb38f8a6309ca4dcc68d4d025a738ee6bbaa4726a59129be260326689fba53789a614c798a984bdd6142a52529c848c1c6559da65a3a33895d2fe15ae048d27511c3664c68e0c27be5d4271cca0eea2d7792217501c7cae54f435cd274ed12c9e1253297d691a4f1cdb2b062d7eb14e9c52c624da98e865e2653871f48b17954c5fc5f24d9c4e5f59104ad5ec25d1c4294b3706a127b3d6cec4b182ee49490cea2dd898387e95921945e612c77c9a3457dd7c7ec612071383f5c618cb14b495386718bf9c1a539438a6a092a0192d0625ae3b8953e66d398be1c2b46525713af98d5d62384db2b291388bb64d0d4f8f4bc985c4d93449a724c1dc471c4e4c925e232bfcc675c4292ccd2b9bbce174b58d38099f3d717429db3c31e2209b42599ab79c9c167136315d3c4964f9feae88939494cb2549b25c269e8883a6981131f21743081107956ce47fb7640ba1439c36c43567ae0d711a55f2fee9cb14e6429cb24ed5ac8a944f99106552715e799b411cfd4b2d88834cb5a22743a8d86e20cede971a7e84fec80a88f38f5d2cbdbea2affee1949fa15d7ae3875390496bdd5e3a61ca3e1cb6d2cac91d35a54c3e1c94aca6bccb24282ff77092d1c347962a6193500fa7589697a9849a87832adf2ff93b4f2fa77838dd55fcdb6f09da3abdc349b95ffcd0935c4ed352e9dba5753855b0d84b256d1273a57438b98cc69346649795e670d82466f81273f9b52f87e36bca9a63f1eee21e87835041ea874c9e29e870386f08b33121df76476f38fc7fc6b826891bce6ae9e4ed51315fea369ca40c613ad6e2c651b3e1e45fd999cbd6b6ea359c629292baf6ac86d35f0ab325ed6d9b6849c3c164aeb5172dad540b1a8e196b9294ed4f0ca152ce7010b229c67429c50c079542c92d490923d359ca70143d7916d32e954a16329cdaa4af08dd629afe184e2946852eb947e80a8be1d89eb9f5545a7a6fc270ce743994ea60386deabf8c3f4949b6f9c249f65a938492dfb3ad170ee3eabd26b8e538e9c2314c9b184da65c389e9c197fa5dbc249dc9f8f5d3d1fa08573e82d6d92a8896f133e200ba78bfef7e22e32cdc70760a1ae8b415738aabc9dded4b8fd2756389b94c49e9204d90d75154ec2886f9d6b88b79b0ae7ba2405db2b25085d4fe1204fc6ef068bd1f42c85f30871d6612a4c751b8553907965369d99bab55c97375b0ff50987abdf0aca545226a64e3896097b41a951156b69c2f982fad9b4cde57922134e1a64dfa9cc1aca84b8845392374e3429939512510907b5a5359f984bc229ac65b7093bf52743c279bfc4ac4bc29b7c0b8f700c0f19942cd7924e8c7012e3976463d6f5612ac2318e6ad356a3a5434e84f3eee93161ee070ce1181b4bb9cc7efed60f10c2514d363d4244d66a3818c7bff0a7cc52ccda1b609c4626952cc4bfa9cbfee294f69a4254cc4e92fae29873fe43cf7a49b917274f4d9fe935d5ab851767b38d27326738bd945d1cfb2a6e4d3a695d9c6e4c86fc0ed11adee5e2e861722b4574b8384593d6e43ff30a2a76b738c5a9491a747a5f65678bd3e9da97ca3e1751aac529c7c6646a7f76b24f8b93b45a1b4baf9952f2599c3adf4bb26c6ab644b238a968a12a55ff2da66371f6d2f70cba24f17663b038a8d425acbbfb8aa35e691257259e3ad55c71b4bce134d89c10fd592bcefb6aca7536897c8915a70d42cfd5feab388e52a15d455cd2ed5571ac0b9125264ac5e9d5adbd624f2a29848ad36893d35eb162924d4e71baf11069622c1566628a93fb9d74e1ed529ccfb45bfb98d65169521c3798a035894771103bafb2daa6eeb328ce352629e1c6376acfa13888bbbcffd06072cea038e968320b0d221fe24f9cf42949502589b15cb49e3889276eacd4abd624da89a34927d464b3922b5e38710ceabb5bda6b79974d9c84b1ec9159d1c439c4cd6b49ea2a7a26ce7bf9a4a082c66c8b98380535c25f4c4f972e71ba7861b266cbd95be2a8269ca4697775825789839e13335bbf7871a34422bc72f5c9244ea3d48cc9092a6c5c342471acae944b627e9a20e3522271b6557ffbf4ad12de2ca540e26871551a545c320b41e311878b62a29d2953d1257a79a0e188b39655bfa5b4652a7273415a0e6ad408018d461c652e95ca6bf9c68af4c061c3c68e91428311a73e93255e9468376d692ce2240993e9a494f2651b7463edc5e021920eed581147d7ac95d9cf3e4fec6924e218a2e6c392aa6c023d76f016d021068e110450602447272239c4b0c02f80020218791e64f4e84f367a2ca0020098409605ae2c905717228190aaa15bc368a01e2364f0284000ca482ce0af0000f4182143050408c08bd16488a1a373204000233c1e91e1223c7624a004233876b40202700a000400000000c0070000000004a0030bc800004646921a041040f768af518000748f76111e350e0080013820013cdec60d50f718b1616301000840030e80387ae4b831d2366c240002422863473010478f1ce07060ec1803fda2c78f8cf1631820c41768c30602427a81387ab8c81864d8b09180105e9c941c4a679e32dd587346c6d918cfc3460e70b80d7f1ee060eba103470a427681387af0b83192c3868d0484e8e20021b938a6184b748f3a654189b83859e8d49427281371fa2dce1ac3d6c6d3a5317e8cb5c549ccdd6b9a52c60e34c68fa163fc1838a203478f1c38c8486cf0f81c387694905a24659ce09ac6cbada74515b52bca66595c587735617f1bd3a8741d27a937461a043b8081e1418648b251468f1de01829bb31d237d80432b0d18290591cedc4a0b71763b94e56c9010fa82002851221b2c841482cd030b3d22387c0e2e497ef54e9526b32585ea157bc6c5c97587c46f5cc73f9cd47a4495910e28a53b89427fb49f94cd24343482b4e29a65bff76de2f7e4346049242062b8e3d16744ed4bf31799ab186ace2f4954b125ea4ec9e8e3774740e14bc8b98c060882a527126cbb0dc55aaa25ea934541c5d9397291195fbe53e459ae2e0bd9e75db6f8620a414e7cb24699f2615f3a98614a7a0ed972d897741eb3b8ab3cbc658fe7a72632de1b831c2233b446c5488284242d168fcc971931e3a7e8ce78174e0b0e1bf37e87fc182e234da4e129339f234ed1908f9447aab55dde49435791d3a10b9418827768b41dc3226d394b5184c776d838d92b65a4827cea34a3e25c4963ce1826a08e1c429e67fb3ab843c619b1b6b08478e111b39fa701307ad5f4ac971c21b6ba92344130711df53bfa4ff43884332718a9bd5f5e27e6acb36d239cc0621983805ed167a5270d1b96f07865ce2a87d9f5e5a2d5468187d0ed8122771329a456aa864d289d0799ca01227af649e262825c63bcbb920006c08a1c431e3c832257b84ac6737766412a7ad9d4b42acbc5eb419228983de58d9476dda0c2a130989c4e9fb947666c91be49514489c4b6f7de990a32a260b1f717c17515ee28ac57a8438e2a4fe54caa562bd7ea8222b30418d1a669f234970e80869c4b12b29dfdc92c454e633e26482dd8fa86c0959c46993a44dbeaef065ad8728e224dd25d34aba67eebd90449ce497104a05f926410841041f1a1734966bd2a0a129f6a693f133fb329e420e716a3fc9358d586dd317439432a966f1ca5dd9ede1ba5aa35e633a3132268538cdcc598955e70e421c94d8261d7f25538490419c35769f1eb1b9baca13c441ae596b5435494e8642027192adbb1f2d5a7b2c03c4d9fcef7db7467f3886b7cb61b1e2a5931a3f1c2fd8d8dbfc6dfc4efb705611270917524cf20cf1e1a4a45ad8d6f4277e9cece1eeca71da9535d663ab554cfd95b0e9e19434b694cd057121240fe7349739ddf4ea62128287c3ae99b0249e74c81d0e422c8daa2ba136fef286103b9cbb828c31175a4ad921753825c9bb84b98a52d773081d0e964bd00a151377cb2511111e3bd01e078f1e550899c3b9c4248be8da8fc69c37d6527f0edb1122076f2e8392554be68490389c2e9b9ad84c3aa428e98e3a2e38544246a551b9c2652c7984bca1f07697d3aa6072a33134671be28663e68e5a92ac2475d16a4372ae7be8d06c193f1bd8cc9a2c650b9731e6b9a52dadd414f4359cc465af742594bcf63d440dc7b10d25adc8d117e386a4e15cb3257e8e8a6848db925ab80c2ea615b388ec52f73bb52cba0b39c3e94b527e88194e2a87d55c6e5162fc17a37bece09103216508214332dfe261c14dde4c92ed1ab7f94e43c670ca8b21ebf4092f102206ac414818ce5f595a46864c93e3040cc73ddb24a598c2a4edf13e10f28593884c256d6eb3e22409f1c2715318751b36538cd7250ae9c241535f2ce124f9102e1c47ffc4c97efc867243b6a083102da45da9d3c53d2ec5869c3ed972c64d99d21e9285b355285953ac517df2898ecf61c30ebd8ba00282102c1c6c3777b3ae4949146dc8158e497f5d5a8b1644fa186285532ccd90359d7988d830866682902a1cc376e8e92a25e692124347f3b021860e1c3a74f48e111b232f86bf8dd45fc88a102a9c47bd09a115d35caa931d3bc898c2419924492f15c452cc9d0d1eaf03911ce78610291cc4be3694dbadcef65138c6f62db113ee52d2f412215038d6c9a958262573fdd1138e5984dac88b27c32e4988138e272dc74fa87656bab110d284c3ae8b85a6147c364bc8c0c14780051f884031e1a8499aae1c99f5ae65c8124e7d5571a5726a4ea594700a272cae45ee56ed65242409e73a2fb9727e2999f7beb1a62a18e37b8480439070ccee622adb2e23ead4f1371061010f428e700a9afedb74478961fe0f428c70ccee4cd1de9252392e11428a5095a46fca1e8410e194432be3c6584babf6109ed797d3b98110228453d0cbcb3e774a5ad006a3f0792ad46e538980b18693f3983719d1f24e6f0b4a7493fdca690e1e3d769411c62f0e9a5a5210b16e1794bcf718b1b163240c5f9c2ba868d16c34b5de12462f8e1bf3c6a0cedf45767761f0e2e41b4ff86b34952fbcb68b93c9b529e1f7473cc81059011cc2d0c531978ca5c9e3a4d6d0f21dc2c8c551c6c44a4235ae95987071bcb778a54be489ac3d0e61dce2a4427344a570fa25b7d78123d1306c7152a3e99409d7f8218c5a9c7ab3c824ddad61d0e258aa5da7cc364feb248c591c4e86c98f134e61c8e26cde2565f79df0a7ad3062714c1ba7567386c280c5b9ff370969bd417fce2eb2011e4218af3895785f262ec82408932bce35972f96b6e96534b5e2f42942c60c9b794318ac38ea8941e76e1859e2495ac5a9de36c815e9abe2bc49c89d4ca285918a93262174a88b0cb2949230507134e52789bdfd290e274a4c62ba2585618aa36bf58ade3df94ec96194e298e25b6ff82d415616631006298e5e29bdc458aed8171ac549ee3049464d720959256188e23c3b42efe7aac9175d18a1502dc6b7664cf216f2aad1fceae414d922c4dc6180e2182bac2471f9e77f923e713ea17ef9e4f24cfa4e9e388e26591d993b715e935ef7df94145ae6c4a9ace3475faed613b389935f929bd4d46d34a389f3286d92f8193344cb9489b3c6e9ac785fb6294b9838893b314dbf9269a6d2258ea666fa24596c2bf3963897956dcad6b8895f8953be49295df59438b6e635697428afd927716c91cd27a86db36c4b02a5626e9eb71d899358497621d399b0319038c89cd093bba44cbe3ee220dabc2e9758d26ed41167b53e534a8e932ba38d38ff7eed87cf88933e21be3bcee48b7211a775ffd8aa12ace254c45137494950b5984106137110153435051f1127f169eb55622571bc3fc46163c50cafd41be21cb759771bfef49d0a71ae117d6b69774c9a08713493648916d3208ea2e29b99ec2558ec05715eb9b7d7d5982ff1409c04a5f2e9cdbdd8cc0171eed1f3a5424daf29f9c3c14c8dc6650e15bef6c3499a880a1de326fcdc8773ac97d2505a3e9cbf8988a8d4ed6422b26830120a45017128180a2adde600931308001844200b8642b160385575f1031400035f3020423e2622221c10148c84429130140e83c18040180c048481e16018101087e772e5dd3a48371009a870d2f883da7d246a5288fd56fb94e92904d8f6a5b9bff5980a5135293d51357300940d3934ca42ffb3eb553175f4a33254eefc7d6b54ae3bcbe4153de1471b006957ada39e27e2c064e97bb1112b549865e8623c3d4fe2117380d5bdf5ab0b669f8c45ee372bdcc7e648c79ab33f17f30109040a7e167bb6644977612ed00e795be3214f2f25a1f782f9088da5a7a7c2a00ea2daf883817dd80e508999f79a98765f6402e7188e393f5902015efb313c90fe7cb812f1153a97c76910e4c867e56280425be46435e22f11e8758829d01a97d90cfa5c2932c1e14203d1cb39629d77f3d9b82dff81bdc49408dbb9a0d55ac137215de5ee79d38d543cca3b95f25bd81158bc2d9e0297a2491fd798987cdd3ebd32595856d424e371fdf60edbf02c7052359e72d386e1759be91fa4bc68d1d9551e1ebd239d68b9d4085064e4ebce195748921a96f42ca209ad65a5c22a80a759e263da44fe0b4f06c7320650328e66bb61da13f00feb66fa81c7fd47ee809e39149f44d22d683a43ab622c2b10d1b5387ad1209ddbb26b7220bed13d916bf93188510cfdf7f6e08beec35feb8a15ead0104e05ab568de38377345521b5be738a0534fcf5835105b44c266a4498d67cea59a8098f4c3710fb8cad3dce6a7c57aacd04311f0b6820f4073854a63180b39b82f49f6bc4e04d37fd6ab86a74d29b8f83255c7cfc97082f40e1b9f0d6a2d11371090ce3a9e848cefd8162712817109d212b9975a654176a8f3c67038f7ee398663876850671bf3eb7e0bfcbaa29c92cfc626933f2d500c777d1f88d7884e3bdbd6dde75885744989fc52fc77e7c2a23de03dec507a08c7f0069979725153adf808427cba01397068a6be007e9e940631686245e8e7714c2b22a95bb7f9fdade3ccc57f0a09044266988ab25bd4e54307003b5c22f0414f3a3d8f629191f04ae27512509e3f9620a952470d8e5827f8b2a1873a1bd8488fd7849fa99510339933ce4dc19022cb842d8abe8c0a8a956bbddf7d0ffdba43325493b636fff7de3f0ebc60b720b9fc366c5f97631cda72f59551a934c56fcc0ebf3dbfd4348ec650420fc96a385077d330e32c4fbb1a18b1fddb0e0a2e38ad09a1f0b542a1b963c15e8b4564d76ebd99f6771efb25e0087766b013148c7059276dfe1be31e02211a0913404f0448cc9e5b2dd8e4c6ea8c5703b5831f8eb593e111e3a7b177ae4fe90cb37602da95675dc30db1ef952b874221b71132b953ef21f8abec21281831d8e9fecaa9452b96eab68319870752a081175f9f4fb873e5c31b2a1a9a59b76f8bb50def86d8b897124d72cede817b0fc182859077296891c5589870be55a94abac90ced0ff0ec7363b5c041bc4189a9ff14925cf67150b9539b6e214732dfdf9fb4cdb37b288b3408312f276dc3e830b9f860611a5cdf9409822c2b54e769fc58db3400d0551b689664312a1ed9fda99464dd24dfaa87f35499f0c0067f219f971a8645ee78b690b69b0826a0fe109981823a4712f9478f7385910829e2f07676a171af5b3687d39ae3fec5730a8e05a2658938746eaad5e04af1c31f257d96784a58d998926d8b98cfc80b596417856846d3b2477ab092846023378cb6b38fcf1ab244ff7d0e1b3f9da35b29a8771bf13722a21c0586fd28dc23c38846aaff527e273b1a7c9a55bcda38753035248ee343a63bda68b4955d06cd9c32e0387d9d850023452fccdb2e493f9f0f32618b01c3402d02f4cbbf4da4909c2a527df61092a241dafe0020a4624e125663a8ee3e21e9e51f285ea4ac9739871e8264c34a79becad2f2967a251d8ae7915d2f6f47397d7aa633173c22272ed2bd71d6e77e918e7d2b6372e2913c7c23b44e814121723b016f76144623173cf3d14f378130238d14470868bd919f8dd46c50a082945340b23e8850a0a6cd5ab881dc5086a01b6b9713018316051a01ba8ef060a49bd270aae72f5eb36f657025185bd63463636cbd0e19df4d1f7ce4c800718b34fc4d107f2a095f382b2b5d1a7d4209e0ebab4a1a14cd0455bfcaa5f11449710da6d588ca78aaa1b5e031e8abdce33608117403632f457947288fe66961e23bd0e2e14847a41f3cb1a1ef5cf4c78806a559daf28219dd556d0d893a8684d992bd84949b69be029829b5a06263ad8fa2ef5be64c0854aba081046a3d6644ca54864aea6070d4eb7601abaedfb4306fb2f8c58fb014650c881c025b89f3a624dacf6cbf7f5756a5324d31d2edd3cf805ce841104fe97771a6eafa943162111b3c7829bbee46f98dfc7aa3e30155d08277c8d2d71bedd646f7e56c1f7e1300b07c2d959cd7990008109921c31ae275ecbfb88885ab02d3eea1f72d4eb69ceb310fc71631cce48fb78dd490b8fcb554e90b41fdb465f2b1d593583e4fc57867f192fe8487dff47ca71f1e14dfda015ba2c06a2bf59ea52380d24e4bab666189ee797c952f4c225b3fcb4111c192f19ff45e3f3ca9b6951e46c0ace35194ccc2cb32cd4e538888bd402b10c112a88f11544f5bbdb0a293076c6ce689771406037d9dc23ed687405150c2134ff213f32d72b5a8cb96d8717f5e3ea60096813914bbcd70e03d8957d93e3482bf97e4e180f5c8e57928cceba1187e675a36e9cae0cdfe08221bf83dc1c1b40ce78870b3a138ce95efa4b9cd07c1daddc4a5fe1f7aac14305a1c5d82abaac3cfe1e2792587ce43ed85506fd44c412c42a41d1234c94727b2eec2d9b3929a36431bf6a1c161e8394a8f43aaf5633fb0d9219bddcfcd139bba737fb98234f9a554975deae212d72bd713edba470286cddeeeb4016bcab4e467f7c042ec26b7076e7eb021edad5d8d1b74902f6665b41b3a9ec34d7d8a86746c2074722bda104a5604355c539ca426aeb6c9b47763e745694a960ef7cd44eb423e876fd219fe00b6849d9d8a5d84ac9c29496d514d3418bfc528161642e6e11512fbc49ff226311c1c59e00dea81a81147ceacc28155959d258cf2939a7984618c2182433989aa75277a35fe8369dc018d650b2a548429dd80c6be42f163dbe97a3ddf6d12b26e6a432aeac763f250452de25861aeba79359439fa9d0146a28f55b1898a0bb8191b15dd4e93b9bf37dfd0fe94a3b29174187117df14f342c526323a6061b6051a9437181d39b922596d725b3d6bb9edb7deacfe89a19cc2c3a71bf08c29efd2c095351eb1d8fd40d3a514c67ed649e580eeb4fc0f62b5dcde93b331be00f1847919449c5481e9220776c0da7a0d02458c98fc4553bb3b338393bacc3ac11b8b76b498729e8b5d8a700f761da2201059c4ceddd5ce66b3967c6bd7137dee93e9567746afd3e80339a564b85e446c2a20f4481e65e5e7b27896be55d5567f0dc4e68db47648402c87bbab24e38ef63997d2a1c23a102f5f66a353196f002890a1996c5f33a15731fa08395c196982e9835c2545ce33745739bc27f95f566f8290ba4b19fe66dcc88c215ddfc322c67b8fea775bd0edd3539d567a70e3baa382ed129cc81ea11b953ab612091471fa5f526e059e924d42936d1426a9a8e4ccfd9c93c91e54e802bb01701c549a78eb2b404eddbb7b7422fc44675bcb153760697d848541fd6eee7c9d510295b346691505a72139726ef83fbc700733997937b82b1886d69a0ab7f916a82bc1dcde5e81d9ce38b77a1abe982ddc889f8d147f2e97cb6e94adf9ba257d21a5c7553464a088572940a6870366b22b2330bf3085f1fd24f29da76122b930f1a6724d943e9f9fcd591d875eb86023ce4a0e5f83cc7bc9e0b7b2d1a42e97c72bec03bdc8e501ea33c910dd518584b148515c113220f9abc9247167fdcc1b07518281f1dc3433e2d05555c3438c25b285fd4183fee0b0b74be46e1203c555785065f4913d66574a3883c3ac6f7800a9f74f26c6af3b149c1c0dc5360230f61c92ad436f798b5b7e666d63536192d7d0d69d5480c6bf82632fb1ef477d19622edd232f2ca03951ab340e7126d90ec737fe133e34e1f90964f2f4cae20a03e07808756d3e9bfc7435669b715ff812739d58358ce21dc1f62313368b15988716795477ce3a4c37507236068fdac208f337cb994dedeed25868f620cda5b72c8dccf7ad9217dd767a790d4f1723d23e6e050c884a587c6f1e0c340ea59e028f2ec498e3f7ac0720a2b813bfd32083876046e0b084311976620f31562a4855338c53fe6d43accd3d69c8217b2b31012e4d9a875c1658ad2d5b76603212bd68a27f03f4233638b98f275aba54d75f88c47cb5907a05b13bccc835608df7952121d55f30e7d21d8520e482120e96d84d499282f70083046b497618a2b91a44014057f6ac84f42aeea278061af622b4d85b531991b59e3e855fa96cf45a36839d146a130a0406051c8d16e835ef9a92612166a0b36fb2a5bdd8c7fa688960558a370883d4feeac494d547dea552726b26ab74bc9628cbc54956d3a440f2968b9e7b85d5a13e1e29a7671909acaf6a60f75749a520567fe501f20a877a15c3c0f9454135a6a35a92c5e6d1af58a532a90e4e98046d84e8622213c0fa4b4cd5dc1408b659a1d9ba5f7da14ced4c9da2f8bd8747f1066a3f9196ad38cd9f4f489a5d537b95e088187386b3cad199089608cb7513f5cc7e5998646b35777d3969f423c9310fbe32942b4cc638d5d83d7a32873440c39cae2b8aae442bdc68eefcbe6eec011c06f59877b2a71edf38b9bb9050cd215e01aaa1c792d251f7170ca29162f49c25fe543d3dc3416043815ebf48ad30c6dc60251b2523536d16c3341fc96e673ef085e8a5bc98b6cc5383f963e4a1e6fa0d2b7b822300e6c725388c5771edd347104cb0fe003a21ad176013b6466a7b501bdab82d6d26a2a64758ca97f1035a4595996f9f13cda69103ef2d8ba1fa5e6c9f8f70fe152fc7e76c8a5b72484936f88e3beca4d4ea4281f9b04d93c682a5ebf2c668c2781b7866674cb3e85a3d1ae50c21da537854771b85e37f209e9363c6db3b061c315430b2b44710e00ac250b9254a15a6f0a404b7aae2a28c978becea892231647b894ca285cc324c9ec0082ec4a352a7314b7298b405469217c9c56d6886c65e84a7f088f38dbe065af2e68f3062f7cfcb4ed3ac65b292a80a4763a7b72296f9aee25a72c427d4d34f5f8eafc5a91c122ceb6633b5803778d0d66104981d98281835333a3fc32cccd5a512e009bab3ee46af20f6e9087ff174eef5b389d317a0bbd98b089a9622138de87d3685fbc10abe8919f1b1ff6348ea7aad5a1afc19afd29eb8d689cdd37d23caf734655f39f38b66e9be73d816b21c78102304fd4b3c6527cabe11eaa742261cd058fb05dabe47619d2fd26245e1a854dc0a032c8117b298cb80d5ee7f10a7f24e74c4032ef14a76c2fe0e05dc038e1068e110cbd1d5627a9a534bd471969c1cf510ff448b6b031467162967190b9e726781a413f244b18b6153b5126e5904fff657905ccbdcd3a5de2acfa01d1a303f1d7441be7ea5b5c2c0ad816767dc39c2cc6de6609698a0a23f8e3027c629654966cc0cf6e1c85b16c991843f881a74049b8ce930a91decf9a22515c1df65f27123ae3e7513d585326d4409696307b8eeea23050e2f3cbc675bffd23aa6227d90da4f88daf9af8d9b48a4d3702c873e7b30395226f0e1c8d4c3e39a413cd6776b4895bb5b0e8b1f259fa7ce7497a3f420d4c106b057e94ce6338a7c3f3654b1ed0173a62e6db90205e6f01f46089b0a62a37d2c788e7a2f1569d2868547afcddd2e3e9e84701299adc0f45cf1af1750d4d367450c31101662ad2f53e7b8fb8e363fb4d1c49de6c7f0820d66bcdd50de01e07ffcd131efe9a1f7e6a268b36c82fca4ed22674e5785abfb397de97a255a110571c34eab0374c94a6b2e367e5d6f3e7fe7046bf39340c0808c50283c580293ff03b9c974163ce81656c8e65b415984409600835a8dc6c379e1bea844db48a6c1b0fc8d0494c26a2db61e546637d88230d05b4e418cf058dfb3a77951af8a73edb1b374e7de7c4e7acb29c6998a3159375674c3662edfeb4ee47219ca150cd578627d8ce2e106fb3a22ef461a08c590f551b8510e42e3dbc4b141dee10ca3f8add717a6d0bbaca1eed53f5b1589e46114ec93ad31987ce1e783acdbe379b4105dd02718fb9a4f77d2e59966ab50d363ede7057e2185d3b39917e78690e1932f61fd0d235386534e8135aabd677c70cb4c61b80fcadf2b3d290a50a267fe0f74fe31668c9667c8f8e56079e0e78bbd9680fe63a18979666c358dfc88e7ae4d17858c912a2c8d51326e20a48aa8fbc42bff3c087ea77a2e18eadd408b4e6500d3c93dfd511224d5aa7e235a9d7d2065b40860906ab5d99cbb8138106b2f1189255a593d50cdc1fec57ca9466d4eba87a9b2ce0871b6b7cdd0b674df4da8785f191c7408aab2bd5ef199a7437ecf853682cb6a6859af1afd4230430fa0d8d608307eec5a448e68654af28ab8f55306395ab7d7863d7481089e2d7fad4bb8aaebced4dd5b01d5ee4f2fa7093efe405f787d952978a93dbf218489a367dfb854863ba7fcf080eabaae667cff847a3bc369fc677daaf9f9aa240c4e8b012e96716af2ac5d879a70b0832c6623440de6471696f139d2edc26b8b1c2a743952d4380c492b5773863d848629002fa002029fbf23144401d47f1cebc60062048340d15f22705c3f385519b4b851400b88777b9fcf548f81524f7a89e9616550815d7536b235d0ab3ff125c5c075f47362b03f0dc31f59dfaacafd2c8148a03afe363970c370007eabb49e5ea431f0ffa78e592ac9587d3163c89c3ea09e6f995113c6638d283e59fbd8761b3b148e05653f68b2a084ed65987c4ddfb78d3a3b67a2c09a82f2646535c9503fa98420fac20fe556161c913972a8343b4328c32f0ee0e5e01a0cabde06fc022c800c5fef3b9e41a05c4a278ecb5d9d9bcbb994d44e3022bd06676fda9410de04b838157401c78c5abb843d906e7584c568024cd2a40e7069e370b23a6172d94b06e91c9f8a4d38eb6bfd56f4659097672f4207fd6cf2bf7bf65ab7a8636c4f8e27fbbf1bf761a548fd20b41d5591830c81fa976b0ffba89185878049c2d3af589fc10d4e4bef188ac0a4d47125d9545dc6fdedda235d23ffe94981e5dc3133c4f9ab5c597148e38d854a7c64101a50f2de2b1dfc37fd4c68034d1115b696f2a72123d1b7a1988fcbd76b56ca124d73114282ebce548e3d4e5f715e2b2982d706a600c59d2e06aca9ca1d2ba95e435b8272f88642b1430f645a8403dbaa849258ede6be8e2d02ed80097a072b2a2828cc06015f5e933d9d302d1340911e4789d9d4691d6c23f1273d1dfa32aa503efa40db8ecc9a5a8613494010292c2e2af4a0de2d520a500d7ead0d0176d8337b8be496d45ca31e7b2163cc9328c56642405f064a1d028b8e91e39514952daf4d3e5fbcf936ae328982001e9587201b11aba0d8f7c3b14367d01019f9935b132681ebb9898bb0984307fe2586b091971ac3ddab3590623df0d496c0321f476dc6f2771a496dd613e583f44b10360c41309223b3520fc4588a5c92124f30f4c58ea338039b5872a4574d41150a650811e1db9174ac641cc6614cfcc138963e4b19282a8d18ae9830b67629af54fdbe3cfa2e303050d16dab3f76d2839c87071d5b81cd685ac4be1bb6f49d5e717b039252fc42946045f83fadfdfe35a220afcd3fb70d78d941f66f7fbf14b227a1510d330535ebe64fe27de5e066aa0f9b3105289c2706409e25727aed52084c536323a4bb291027895f8805ba82c737f69b084a8c3d199c24b7c7aba51dbd984677f56e21177cbd3ae219d22cf17eda2a3e895620f13985db137416f36c72e96e63da6f081bc399d5b8672dc8a6593499116b8ea342df09a844211beebf93f39f5521237952b14c0a2aa614f7ea268009b11fbe5de4ad9a97d7db5a632e904c21a90049699a04326645b5ff2a0dc565de5b20ea88e8181ce84c2fa095d2ad26649bcdaf3d57d4e549ecfc1b91b5fd956e355c1046eb61e1ce58c34509c6d48b6dc43b8e69259f57103a1047c5b07dad7e2c1bc66f790f4306c070418746fd3b54685c156cba872defe1c5589f6a8794fd6ffb2e3117eecce03e87ed0bb9faf5805c1c2248207df0fb46e9e308a6b594211303122e852e6a4609c1898442f149f889dbea0fe80cd09ba63ee3361dc3813d9bf50fbc35e925bcf2b157a622ab493befa24cb7713feeb5c7dd2493d2f515e54f25c98c0632bbca58694aa0ecb5aacc15dc53c52e00049506c388120a0132ff02ac4db9af82b69420ba8a4e99b98830de99fad8732294486236e49a1059934da3ee31dee989593566892cd9c7820e53aa229a202627ffdcf24d13234b27ed61a0a2047587101b9c58422bb8a412af4f219635efab318990aa926b9e4d9e7a8ab5d5071f0cb8f964d6e43343a834732c875317c2c79e6fa9a32235df606c8af05bf52bc8bbbef40a19d40d070d3fe16575550b06f67f32a6e626e2c2e3aff42e38c3dd370478c48ad5ff29b5a76631574e86afdf2745e7254148c91bbb207bcf846ec5dcdfb7529e69b36497c88b636f520bf97e71faa503236a356fcfdd596dc008f5a347bc554446d978a4e612b10595e9487433d9c3fa5d1aa487ce3a444ba11e1ec5d3f7220d241dc3d0e9676d66ac718a24c5de20530ab5ed307ea17bf2756df74ce006f3f9bc709d14fc3ec9b221188bd2c0a61dcedb809d54f4f89fc360974d4bf415efdb6cefa494a341f74077bd84381ca78c90e07077aee1a053725a09b141b96e82acef462c7e266f63dcf8827742f987049dfbe66b150df7e076b759a91a43af352567d7095d8e13d64eac33138765231139c549340e170550c552493a59a1363b88333387ed1731b716b1817b2011ce615d1880a8e9e454c0eb9fa5f990fe457265efb178425721d9610c8bb34b09f4abf3bb5890a99437c2e0821102fd61c8eace8cd2a10559af8f16c11747aed04c18cfe0ee4b5f8603f6199fb6409aedb83f1f4c51315994a8820f31a5a39e7f6b7258cbec9969c30d50dff3d7928cfe60261b0fda165ca53c4f1e269d1610bc30b1bdf2299ea133bcb80c76d632fa76e265965709340f6a48b69931c4b9216836f06246450676f921a3cc33b94159c131263bfff88814890011978030e0600a6477cfc5086efaa1cdd97340f3e86202e562373696d2f9a850849416eca63400126e00b0b543f96759d32d730944371f188a338bf04a9e35616ac10cc778b1c7b7ea562305cb3e25f4a739cf5487c27e494bad84d23278a946e6beefb201e7d6f8e88a43f52d071ddbe5f7409d5fdd80f576cbbd07a471334df9f80bd489be0e2539e63c40e77d2e587b0d26fa6e2292694def6c948e329a2825486a79c349b14b8d37b60f087d67f9b961278065c83fdcb103303e56d978bde8716312aace620b62c4c71b29f4ceb64dc581eb049a82b56cb3eaf6d9c128c98a660e96605ee5e045cc6dc32fa46f2cc989c0854cc8ce0a8837cac80dbfd7e73205070830dab0285331f0ab72172542508c413971349f27d1e9cfd4c3adbb464b50cc5ad1ce97fcb48ad4153e2292a1fbc7b26d866b74d402985faff6dbce513ee7f7da46287fb5c3b12c1c31200af482825923128554c4031b116c684a21fc577607dcc5a41b05ae9d95ea2de2e67c0f001a9d751c73bfc0f7e262dcfb6760842391500906e0a3fd4b0cfa0aa5235eab2312cc052d4870806126556a36269d13bf02ac5674a05ac26db99da898035d0c1534eadbd934d452981f44c6cfa4b70ebe4a80e97bd1f739667df96e819119390300018b6b196cf7ac41ea42556ec1a50ee15a3bca1e7ca94aae6b0182458b861a9ae1586d760c0100a2de83282f86e0688d4cf0c23a4129a13e582587a7b5bee3e59367c120465544e4bce5c4005ad38103306bc0b" + }, + "parachainSystem": {}, + "parachainInfo": { + "parachainId": 4000 + }, + "sudo": { + "key": "5GhDid9V5rpReBSAK6sSEmCzeiUXTgAmAoMJQUuK5gFzPXoq" + }, + "democracy": {}, + "balances": { + "balances": [ + [ + "5GhDid9V5rpReBSAK6sSEmCzeiUXTgAmAoMJQUuK5gFzPXoq", + 1152921504606846976 + ], + [ + "5F4R3YYeW7NFa7LBa5tMiCr9CJhqBvnhzAoegoAGyNMWHfLS", + 1152921504606846976 + ], + [ + "5Dw9hdb8Wy3cMFf1ZpQh5HuK2GvMNMcxfka4JsM2GRpjqHSA", + 1152921504606846976 + ], + [ + "5ETnrcfDwCTKZt5pLoKcLNbbwUcddkDAxEjtcgibAtkDhBBe", + 1152921504606846976 + ], + [ + "5FpQTxEFHAdF2hpkA89qKenSjGQBAHi8uCo8F6fJ5RxnR1sn", + 1152921504606846976 + ], + [ + "5DwKn9yg7Kqa71qTaZVfoigwtzyPgBp23wzJKmGiUr8S3j7A", + 1152921504606846976 + ], + [ + "5EyLduUEpNfUox5HuogrhbKugAdHnsLHrysKSWL6u4TQFAra", + 1152921504606846976 + ], + [ + "5FHFyMYQH39mq3FA2a5ZcDe275K7RZs3zi76gsQb2TE1PF7i", + 1152921504606846976 + ], + [ + "5HYKfXdGi2GUupHksmQLtHoWtwH3wPkJRSr3RpbKivTovpqX", + 1152921504606846976 + ], + [ + "5HKXEFkNLeutZ2yZ9mbG2v5AbTDMXhza9VEfeDCiJGGBUyi3", + 1152921504606846976 + ], + [ + "5CXnMFFgruHxAFtvCogwm8TFygWg1MWd9KhMnfEPbRdCpf74", + 1152921504606846976 + ], + [ + "5CWzQaAJFqYoF1bZWsvEnzMQDGokk2csTFBwfPpo1oNfBGkn", + 1152921504606846976 + ], + [ + "5HmcreGLq25iA7fiyb6An4YVWC3k1Cq8SQgYn2Qpeepq24nV", + 1152921504606846976 + ], + [ + "5EYCAe5ijiYfyeZ2JJCGq56LmPyNRAKzpG4QkoQkkQNB5e6Z", + 1152921504606846976 + ] + ] + }, + "council": { + "members": [ + "5FpQTxEFHAdF2hpkA89qKenSjGQBAHi8uCo8F6fJ5RxnR1sn", + "5DwKn9yg7Kqa71qTaZVfoigwtzyPgBp23wzJKmGiUr8S3j7A", + "5EyLduUEpNfUox5HuogrhbKugAdHnsLHrysKSWL6u4TQFAra", + "5FHFyMYQH39mq3FA2a5ZcDe275K7RZs3zi76gsQb2TE1PF7i", + "5HYKfXdGi2GUupHksmQLtHoWtwH3wPkJRSr3RpbKivTovpqX", + "5HKXEFkNLeutZ2yZ9mbG2v5AbTDMXhza9VEfeDCiJGGBUyi3", + "5CXnMFFgruHxAFtvCogwm8TFygWg1MWd9KhMnfEPbRdCpf74", + "5CWzQaAJFqYoF1bZWsvEnzMQDGokk2csTFBwfPpo1oNfBGkn", + "5HmcreGLq25iA7fiyb6An4YVWC3k1Cq8SQgYn2Qpeepq24nV" + ] + }, + "technicalCommittee": { + "members": [ + "5F4R3YYeW7NFa7LBa5tMiCr9CJhqBvnhzAoegoAGyNMWHfLS", + "5Dw9hdb8Wy3cMFf1ZpQh5HuK2GvMNMcxfka4JsM2GRpjqHSA", + "5ETnrcfDwCTKZt5pLoKcLNbbwUcddkDAxEjtcgibAtkDhBBe" + ] + }, + "treasury": {}, + "collatorSelection": { + "invulnerables": [ + "5E9QpPsz28HM1JM7AMnDS2aRN5unyf8EuNtz96eW4KvmxRrV", + "5CntRvAGYzzorsvN3UKotz5gpFd5BgMwUzALKtbWGn3JsQAu" + ], + "candidacyBond": 16000000, + "desiredCandidates": 0 + }, + "session": { + "keys": [ + [ + "5E9QpPsz28HM1JM7AMnDS2aRN5unyf8EuNtz96eW4KvmxRrV", + "5E9QpPsz28HM1JM7AMnDS2aRN5unyf8EuNtz96eW4KvmxRrV", + { + "aura": "5E9QpPsz28HM1JM7AMnDS2aRN5unyf8EuNtz96eW4KvmxRrV" + } + ], + [ + "5CntRvAGYzzorsvN3UKotz5gpFd5BgMwUzALKtbWGn3JsQAu", + "5CntRvAGYzzorsvN3UKotz5gpFd5BgMwUzALKtbWGn3JsQAu", + { + "aura": "5CntRvAGYzzorsvN3UKotz5gpFd5BgMwUzALKtbWGn3JsQAu" + } + ] + ] + }, + "aura": { + "authorities": [] + }, + "auraExt": {}, + "timeRelease": { + "schedules": [] + }, + "schemas": { + "initialMaxSchemaModelSize": 1024 + } + } + } +} \ No newline at end of file diff --git a/resources/frequency-paseo.raw.json b/resources/frequency-paseo.raw.json new file mode 100644 index 0000000000..5a8d184561 --- /dev/null +++ b/resources/frequency-paseo.raw.json @@ -0,0 +1,103 @@ +{ + "name": "Frequency Paseo", + "id": "frequency-paseo", + "chainType": "Live", + "bootNodes": [ + "/dns4/0.boot.testnet.amplica.io/tcp/30333/ws/p2p/12D3KooWArmKDbY8Y6XXHGodosWAjRWWxSw5YxWEjSZTBNjJXVSC" + ], + "telemetryEndpoints": [ + [ + "/dns/telemetry.frequency.xyz/tcp/443/x-parity-wss/%2Fsubmit%2F", + 0 + ] + ], + "protocolId": "frequency-paseo", + "properties": { + "ss58Format": 42, + "tokenDecimals": 8, + "tokenSymbol": "XRQCY" + }, + "relay_chain": "paseo", + "para_id": 4000, + "codeSubstitutes": {}, + "genesis": { + "raw": { + "top": { + "0x0d715f2646c8f85767b5d2764bb2782604a74d81251e398fd8a0a4d55023bb3f": "0xa00f0000", + "0x0d715f2646c8f85767b5d2764bb278264e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x15464cac3378d46f113cd5b7a4d71c84476f594316a7dfe49c1f352d95abdaf1": "0x00000000", + "0x15464cac3378d46f113cd5b7a4d71c844e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0x15464cac3378d46f113cd5b7a4d71c845579297f4dfb9609e7e4c2ebab9ce40a": "0x08202be6542ed50679271280b8c37140681bbd5acfd0e508668297029f871b9f0c5c0f55ba602f76d69b5cc075d81f6d27db9157c90dc4be492f4edbe7d7c96d18", + "0x15464cac3378d46f113cd5b7a4d71c84579f5a43435b04a98d64da0cefe18505": "0x0024f400000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96": "0x0000000002be792cd9a7", + "0x26aa394eea5630e07c48ae0c9558cef74e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x26aa394eea5630e07c48ae0c9558cef75684a022a34dd8bfa2baaf44f172b710": "0x01", + "0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc": "0x4545454545454545454545454545454545454545454545454545454545454545", + "0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746b4def25cfda6ef3a00000000": "0x4545454545454545454545454545454545454545454545454545454545454545", + "0x26aa394eea5630e07c48ae0c9558cef7a7fd6c28836b9a28522dc924110cf439": "0x01", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da93ae135361cdacaced7dad728a34cd552847c1ac02474b90cf1e9d8e722318b75fd56d370e6f35e9c983fe671e788d23a": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da94ddf562f8c67666e2f3342d89843ab41809d0a4e6683ebff9d74c7f6ba9fe504a64a7227d74eb45ee85556cc01013a63": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da95b8d27699a0bc406fb94943829ba1a40ccca4a5b784105460c5466cbb8d11b34f29ffcf6c725d07b65940e697763763c": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da95ecffd7b6c0f78751baa9d281e0bfa3a6d6f646c70792f74727372790000000000000000000000000000000000000000": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da96336d7650677cbc08ab8b31834843ef114a6bff08e9637457a165779765417feca01a2119dec98ec134f8ae470111318": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da971cace5a4439d1fb2dfbaa59c8875654140c17ced6e4fba8b62a6935052cfb7c5a8ad8ecc43dee1f4fc7c30c1ca3cb14": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da978b0ebd097b0919815478914c43dd9485c0f55ba602f76d69b5cc075d81f6d27db9157c90dc4be492f4edbe7d7c96d18": "0x0000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da97a4f65a0e11cd93ec70600724aea4876f23d555b95ca8c752b531e48848bfb4d3aa2b4eea407484ccee947501e77d04f": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da985859947b39ab7767e351dbdec81b3e16a13f08b279cb33b249954190bcee832747b9aa9dc14cc290f82d73d496cfc0a": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9a8eba6b945a9e242e8cb3f664faadb4e52d76db441043a5d47d9bf83e6fd2d5acb86b8547062571ee7b68255b6bada10": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9ac6c57501d9a33713cd15fb61a78a5e3202be6542ed50679271280b8c37140681bbd5acfd0e508668297029f871b9f0c": "0x0000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9c2e5ad33072532f54250efbc0c0c955bfc61655783e14b361d2b9601c657c3c5361a2cf32aa1a448fc83b1a356808a1a": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9cf629c84a1288227f768453aa631e653e87a126794cb727b5a7760922f81fbf0f80fd64b7e86e6ae4fee0be4289c7512": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9eff217c3a0668b90420161d37f59d24f52b580c22c5ff6f586a0966fbd2373de279d1aa1b2d05dff47616b5a338fce27": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9f3f5df125cfb5dad27f26812c2381eb08e47c13fd0f028f56378e202523fa44508fd64df89fddb482fc0b128989e9f0b": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9f7efacb775c3f304ecf927f111ad6431a608f3e0030c157b6e2a540c5f0c7dbd6004793813cad2c9fbda0c84c093c301": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7f9cce9c888469bb1a0dceaa129672ef8": "0x1d01446672657175656e63792d746573746e6574", + "0x2b990bc41ffaeaa6584f5701a4e961024e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x3a63": "0x", + "0x3a636f6465": "0x52bc537646db8e0528b52ffd0058346805eec4061915562056324a3af5c2c9e233e93f689b7dcd1a1700e93d31ec49422429bc0401e4bfd5a474338bf6600bfd017cc50c01dc1ff11ef8eb2d12c3a2ea06f2e326efb2efd92ddca4435fec0ee23f22ad11421ad984ecbde59601d516f414e713a7fdb175b7473c4b4e2d9c41f7f9b48f29cdf761d5264da1d2fc19580561d7d0eb658ad11646e936e908377af6261d61a597e60d2825140d02cba993062dd04959591036c00b0618896376f9bced87b61221f5fee3c3ed609294377a93a4809152b4b4d43428b91b58bd9cfa64b31a9e3d2d7241f356d87b3208a4ac4201817dfdaa9453f0dbf0d383bd3cb20e756c020d025d3c0fc17ff10ca1772b40b840b4b5c0d6b2b5d3ee4c0e48a401b9c6cb79f1598502c28f8fd7e125abbef9a178f9ebd729abf8da1a888198052dd069a723a8f4c24a39252faf9d881021b5bc7c10116c5937a02dc7d3b22a9ebd97e96414d296559b24854a6ffc7ef33428834eeb4d32a28a865f93b66c041530fcb32a3eca8ef13c51ac74fcc6aad8f1ffe1d5b7f5473b3e3a29e24b6f12116df477eaf801f42611d1a5b513ab3f3e1c32042b6a886c78d9f02ce59713f2416979598986b0868fd0086d1ba82b69dbcc87fcc81f8a0dd028abbe78f98de7cfe7dc0add10bcfcac1ffcfc37abe6a38b97f14392c53002daf27c3e1daf82d26ab55a92e3b66ddca32da7fd93f9d735beeaf478c4e582643da7e27170e263f30f5a818aa8c1f6d8feb861052ae28b8d611bd68f7fd58e3d9bd8fc6f1bc23dc4df6c58c5f583bf1ee5bfebf3dae5d9702a7e7a1da7e2f6b7753c3c106f9d0dab76320f4ec5438f8753f1b21e96d149ba3cf182328cb63cdae317fedb9a7d74f044e08762a5d0e324ee07fcf7c18edf6bd1aba18b41b6524eed8158e30d7ab2b7fd5104c93411d64f684eb1b927d716a69f6ca6fd51045bcd5f8e886cb51a0ae95a0dbfc133430e4294dc13bf577afbb6f6ecda422edd261571456bbfae3de3c3d6569bdb72414a9fdfbc6f7e88fb760da8bbc61b50771dd140ddaad1cc09d91b9069f5d7a4d54ea296565fdf2b1a1e88b5d5e2b6dc10ecf4d21bc22a4ac8753ef60fb63cada821d7f9f4f2bc4943b0a261358a2deb87fd096c79a008c4d42b9569e995ca34065b1babe27769c0fe5da797e7a3e3befec98ed72037041ac183d678839c10eea1ab4a4ec5631e1fc183d6a04629fd753d6230c2335f37ba9a3f2e62881d88215f18f6ebe2c11c10f96b5b7a1ff6ab7e9737745dbba65dcfae6d1be4805cd7bedc90ebda81f8aa1ff7a629a1c3aeed2f8f5e939bf4b6316fb92098840efb7244b04c4be6806095e18daebeae5da61b5d4d84f5515f3f9984d861035043a4bece3980d55c81c069239cc6ea6e0f5a3f16e48064bf0e1425c6ddc002a377797cdbb303d1be7d3921dab7ed40acd10d7241368c560b088682beb4e97db2b95f1c900da3d5eaab16112d9956ab8d689a3e46a3ade9b12f47a409e615112da0797b7037ba1afbb8b95f5e1176a3abe9971b62a4af0331f58876f475cc235a40c3edc111c1327d7d7a1f6cee5b777970753e4e2fdbbc6dcd1b92e797bc8f0f2f3920f2fc8d55f2f19255fc78caaaf9784d7ad8b5e570e05f971e563fdaf297f7752dafab3ea1b0639ca6ff2286d52774765796d527388dfdc39ad25fdffd5184dd68b6909c268265fa6381d1d8e7214704250a1143b4ba88d6ddd475aceea63ed957fde4e181a210da7cc8054d660d6ed3832dbd05e2b841ce086d79be6e39f551eee1efb5fdd15d870d4dd06d12115b7a9388a8d2dfa9f906e84d1a024c3317a4bace97aca2e7538db9207a5dd7e0065b83dc75edf28c205190e494bc90aeaf43ce86edebcb052da7beade1ac1fab27a5078ad4fb647ff246b1b12f17340fc49ab65cacdf51c753ef7bd35fdeb79c82d2f4df72ea6bd2f4dff5e5d4e743d303c5e86195e8a8e32f6f9b7a9f4ecb6b70c3bcedcbdb5e8e88ece911c58e97de720a56c929f80e83718921cad01692a0dba421bee8ed14abbe0d87555faaf97c1e435cd17c1b5671f3977fe0ead3c941091c6c8f6d20de58b5e72f0fd7219fde1758c0fc1863847c208ecc87cc1ccf11c2d3861535045e1ec6fac1e60861176d2114dd26b5c274c7aa3d65d526b5bef47e6315fcd9d567d3fbe5590881b42d40b787df4c5b56c185bdd74ecbaaed8ff65e83393928d1657b6c6b7039bec65b7ccecb74f2f1f0910b8275e14c0e4890e1d4363f7acba9782d6ed083cd1c7f3959975340bc5c90e4543c1043ee0656f3970b624108a3a02dcff78ed796864edb1fdd72eaeb3a1e7eb92078c80181d26ab58668788d37c92af8fdb28abf5f8e722a1e88a1b7712a1e01dd67d3f17cf98f76bc66c32ac9a97d3c0eab60c7ebb00a3e5e831b0eabb6e3978307622096de931ded84459b4f9b2b6a085f9e2fab116c5857083cd78f0f0fc440bc3cb10ebdf705164398036de9ccc6a9e5d487d3f05a6f52cb88b6e114fcea684b67364e2da73e9c869fbd49ad56db700a7e75346d77260724d2e0d4b6e4d47eb9a0e5d41e8857475bd620131dfc26b5aaf47e4dda26a083df6f761ec02ec20041e95138120e8527e162be8437e14cf8114e842be1629ccb6bf0a48371183c06dfe227b8094e8297e0586ee5543c8a1d69bcb5a3cc8e2decd0c28e2cecc0c25bb0e38d1d6cec50e3479c881ba173c68bd841051d21eca8820e1174b6ec68c20e323b58764ab043c50e0976aeec8c60678a1d2976acec44b123829d10ecd86087cb8e0c76b4d889c10e0c765eb0a365c7053b59ec60b173c54e0b7658b0f3c48e133b2ad849c14e153b28d839c18e0976a4ecb4769276c0d8a9c10e0d76bed8f162a78b1d2e76b6ec6cb133831d267696d8a1b2a3c48e113b45ec44d9196287089d2ce86041870d9d313a50d09182ce13749aa063049d20e87cd1f1810e1074d0d019828e0a74a8d02181ce15d803780408860e123a527488404501450695064a0d54105063a06e8002c1102a0b1412396de44c21470a396ce45c9183829ca49c1ae49020278c1c31726e9033468e0d72bae49041b3464e0a72a2c8b9c22ea055d01450145015d013e8d042470c724c907382cd0c1d4ca0be309699116c32b8516243814e185a13b42f342fb42e341ae88842e32247131a0c74884047086e58a0a3091d20c0298323e5660adc166ea4b0f5a0e4c50d1ba72f94e82802074c51fc70a3e52689d2163bdc5c71d3826e0938d0e8c4dc8cb951e3c6899b2c3849dc840067ca4d959b2666a6f00b6e5c9003073463702041a70438bee028020e23e020c2cd1368d20d14680d68d4287541c304ca85a609346950306ed6c031841b27e010c28c084e5d9446704ad2d2d0e1848e236c4c403d31a3851bc3b5c15da1e301aa89cd095c15b829e878425ba394824d8c0e30272e383634364a54d014a139e1e4054705cd04372fd8d2d8d4a899420d1b3543a8f95283066a8d9a20ec80023482ce0974b0746a6c5e689c4043051a28d0b0d13581e6093456409501c3d0e4e00608a5266666302383192266869869d9b0d195a969a3db4207054e0b9d134e5b4e5b7451e8c6a0bad0e1e24adc78711306bf7153062785530d3828e87043c70bea0c1a299c64705a81e90a0e12a62826292623b637b62cd0b44113858e095c199a299886e0de301561aa6222820607373b2839716386a6c64d9792951b314a50dc7cb18971d3c5cc959b1c64656eb8d07c71738313971b1cdcf4a0f4c4cd163347e8dc40b6b824c9c4c7904f482864086e924a48d054011681632247041c129c113751e088e086e8d2c8c9410e0eb61fe440714326e7899c10d090d9cec0516243434715ee09da1472b4a00941fba2f3031b32ef7224b42cda13252d94ae50ca42e98d52190d04a52d68ad9c2a34126857b411e880429b62068a0d6832d0623033c54c14373c9861e2868b9924180a388280e38c1924669cd0b4d8e186b6c58c941b1fe8b4a133059b29cc34714383db60c6881c4ee894a1b3839b1ae89051fae206063898d896a09d4043418e1b3731c8b942e9882c4b76822c4c86835fc96e607a02e7882c0b5a051a06ed42c9a039a038a0635031e817aa83ac0a1912b23432266454c8c6645ac8dec8b2905921bb428685cc8dcc0919143231191b5913b2286449c8c8646d646b6452c8d4c8c8c8c4c8c6c8c2c896903d215342b6856c0ab44ad6020a027a06fd818e096816b405f40a8a05e5410e971c30680f280be80aa80fe817d40bee017b611eb019bc032e8375c039601c70172683c76031380cbe01db80b9701283c135601acc14b1a4332307116886c821041d39e07480830a94183321c02145534287049314dc14a8217065dc9c8132e2e6073435e8aca08ad842806304310b39b2c059a1b9c18c959c22688880e3089a22e088028a0a6781c606a8177459945a9a14b61a705128594123460e11373aa001c3f94013b3c30a3352cc54d9c8d871858d063434a009e3437453e840a1898184dbc116831c4de8b4743bd8acdc8c716383ad8b36831c57d872c0797133039d2270643829720c6183c137b3444e940d073764a08880c3081d514a25d0c8a086d041048e29b218dc6ce1689063091b14190c664070a2c18d0c664870a3c50d118fc27d71e345070e3611f02034f3440e26d010b1bd608b6246891b304a577498d0c64011a19181da4247171c40388191bd2073018e2b9d143354b835b626e880d17922670b3759e4c0820e0f741411cb645a4c563a179494b8c1424b423621412095d8210519859c428a408e404a9143c822e21b510b710b27431211dd8849442fe21791061189c8445c227211bb884a442af1087683afc05588adbf80ad1087885222114c052683fa01ca07dc064b81d9e019701a2827a084c06278093e839bc0326034580b8e016f6114b012580b0a089c04970035869de02638045c859fe02d7809500b44013c0144c211ac2204bc010401c4024b00a7804d40273e0097805474a630719284c8871e7440f0c40888263a55749ad071a20886017da0430528e0002113c841021128f2001c6e18f2a39ac1000d60c001e0950b8c067b21d744c651c809920d18698244c8072346341879582264c448a986065ecd178bc4c90f5eac1321284938c001209cbc50d3c52271f2839122261c30e283121e9620b181a7860b0f24f941c82809016ab62c9225497a40d2c48891500f1250020407848c90184920869a2d968724469038f9810721a325488a7a306224d4c3006a66b03d082911e2c18813243e207182834e8d0cd689d112a127424a902c6192c428090f3cf48e1a2d56e807244b8c04b101233d6a62b03c249140ad81c1f290c448101b78a1e605487e10f26107274682d880911f8c1809f5e044a807244e9c08e160801a2d3b1861c2812542942861c200a31d84942861c28001d4b860072342464034f981490482304ab2039226481880809a2c7c30ea618990122c564888034698181931f2a18724421de8a9b9629d284982c44888072342421c80a1a605cb84034b921809a2480808a2209014790d0b566887254c9618416224499316da61099307182d0182c90e3bf44ecd0a7860b283100f3b6aac582741080d1971e22408a1214b982471e24448025e4d96ed4092265d243454c4a40244bc1a15ac112120848080400e3c08f5d003921c065093827532b483900f3b54b14e8c96081509f9b024c96b50b0240907503527d81d92385992a4c8088a90912094346982c44891100f4a9200b11ada818992954e8d09d6494e0d96456244a7a604fb83112446487840622484c34c0d151e48a2044912a3244b92e0a82101103b084111a2a9b9b2454c18b0d58c609730690284111e9424016203469620d9c14892266db444e8871e8424c083100f4028d9614992251340520444c35033c53a114a6294a488890f464020a9a991629730496284a408081e8c183151e2c44892268da40888c6d16561877660a2640346848c90f09044099227a685424a3680c46809101c3062b4835051121e9624316244478fa60516e60c25cee865699bd46a3564451dd75584ab08b009c4a40bd4a3d4f33c1728a594de709c3bafbd3672737737469694b13837deb973a7c4366edcb971c6c825cc5483491cbc034300361a8e11cba40d86719b8c31ca4bc62b639e171699e1c68d1c331763843c25ef9c5da4716eeca29472230081dd1959529e14c2394f58649e72576e135b26003637cac87c1339cac934b29c0b574a2999772796e2999999991821735cc636ca8d51aedcedc1b28d7399794e2a63a4544ac6242601a0a3a3a3636333993189a126c69063b654d2f0c836ee623b77461c149b3445e2014e07889da41b77194a661c6689e2d8b33d1142beb9b961e6994919b328e36e6cb3bb31db8c668619208470d249310c4208539ce29999f1648e93219dbbbb6ddb961500c79622c7e5ddc588c8c8dbc1f86e17c36634408c715d8839628c1dec208439208410ca18cff1011c631723c61d1663641c985dc071414a8c9971386e17a701b039e3f266196773d298c52c3273cc94b2a63186cdc8d81f4301649853060977638c7179ce19b1186344c9c8734e2d2e840c314cca9d33eeeebc8139469a95d8c209396c576610a30c61904358aedcddb831f24678edc2dd4bd62cef4ad3c20897e332c3183966bb13420877576e716271c685cb739e1c80b32c238430c2b8bbf0b472e7743af9b0cfe9144f3bae192fe60985c48d9026e362c498e7e48df2144b1ba35ce6853046b8630786edec30843be3c218e75c4c2ee419797723cbb8bb706e8434c209e72ea5702733c7b81143edca5d09e16271318c935b0f8945c93472c458dac4b93a52326392513144186324c08c91c6c8317296ed628c49b96d72dba49471db30c6366cc3329949893163590400cfb951dacc39e7461999b118b9492546e5eaa092312997b18861988c329e4e51469692522a7729cf0861646619a394514a1963cc308961366012c332293946b8706e8c4be9ceb9bb93658c1106e11d31468e30728c71593286ed9c73ca8cb139b72ccbb62dcbb62cdbb66dc3300ccb326ceece39e3ee7294bb7377e5728c9277460cc37677e74a4c6e1c26331becba2e662cc6c9329331f2ce39a9e4dd19a564de5de6b830eec6185962189645006c8cd126ce189727944c21a45332cf3925c71899a5648e32c60c837002993c79b0884d66663927c5e88c413c34b2010ce09994529a3971ac6603cd05400a29cda4d89c1bcf391942deb873c649e79c9b023096184f4999e7eee418e5765d9452ce8ba5cc244b3997997952c991638c57943ce7ee8ce7c17b10732c0751c4e407a11fae92d013212546a020f961074e0f4c9418e96149921e7a60a24487a9c90f488c9c08fd90c4e8498c960061a4899090122715c7492a01a91a785882c488501192263f3099a153826407264a0490930449077a9c2c61d2c409015ee081c9068c08192529ea000106d0f382100f48847c30c2030f488c183911028248a8c8481323231f08f04312a3254014d51a0e1801b123e48311a325498a9a18d9c149921f740ca0444992211f1e30d090fa91cae1910303020430001f1d3c2849e2c30e468c9400818403423cf41c8a100f4b9218599204890f3b7080034cea0caa1d284c3a60e482ea0005780e1f0590a18725497c7082c4871721317202830e273a6e72867640b201254a981409c00712a1a29c2a3464c4088ad01217eaca20d4838e1c4e8c9c248122a473ad0c4b982431da01899325488a8c8c1825f9e10726a99c2d0094241c102a6a526b8a900829d901a563655822d4a4091223423d20296262e44407fee0c20a1571c048111323243b3051a204894e015ef85919848c9014092d11eaa10800da16800721274e848a9afcc064072345424f98ec2054640489131e76103222c390ea000568b28390931f01ac0c4170204991d013230890e1000728000f424698183509a26807234650845e78b24428aab60046963049e2a448e8891123264c8a8cf0205424c443111323aa0314c0480184869028d98011a1244546468ca00809e0c912a168806e0bbc2c24248ac4c22e24248a743ac282484812e988158f58120922b1188985248fb02012121f41822c24163312766459487c645917126b4ad69545a4888484c49ada1116844716090909292221b1e491454262958e2c120b09291e41822c78840591e0c5a24716091e61411612128b8f2c12128b258f20c13dc2822cec081264b1f8080bee91655d475890c56245d63cb27b840559f2c8b2587c64592c563cc2822c786459f0880466147077e10f4e906c97988534c034c0f49ee1cfaef62548836cf5c26b8b514ae9c5944648299d2913fc15841e6fec54e9aed8d2e7eb401a602fe03cacfa6268781e0dbf7d69f88e5510e701a62d5a7045dbe8681b7f585e5461850a445869c3882a50304414a048230d29a22cb1da6ffd2721131d9fb6008ae66f36904a07bf07e2c845de42f973446410ac7e6fec19d7cf28367ce936acda1e377a5df5bb5efa4555f4900b3280969ce2eac7bd746a14796134514ea558b5dbe3d369f8789dfa615a8450f3b64b1e5d40e619cd8636cd41ae43efa3bd91db39c32d9dd938457f4ed1ea49ef834d0437f67eebacdd66f394f4b67558f58ee7b13ffef1b4066717dade83543656f1583846b7492ea0d2b0d5bb3c1f6c355ffb81db7ad005dd506c716f920bae346c78e686c0566ffd60ab6390fc7a4f64efa527a4eb7df43e564779949052cb4a74eafda2d13efd6d190f82e9e0612f1f600f39a213751dab0e6c99a1c12f8f0799e8f87b1b4ef1683ee3acb79ce2c12a1f04c002379abbf6f4b7f5870341c0822b5ddd48a377f426ada04baf60cbbc273bd5f33c3ae75e4e7e881fff75ffaef3b972ac43d7b7bf4e62d173bd21be7ce470e0d82cb8a2bfaea7cda7d3b30ec5f3bff79cdf702067038c873470471c7ca2164d7edbc0c10a31cd8f2b88d2fc78925be9d92577c3e4c74b4ffa7429be044bf1dbe488c4d2e3f66dab5f7ca9f4a879f0a52f1efee228402f04ad42d06f911bc28f14a017900257f4424881abebba10d7b1eb402f04d5811e93304ad16774fcd1c5591146c7c7f9d2af99c7331704d6995f5e11f4d7a787545acdeffec07e55a4d2ea7ae4889cb6c894ecf370957958102de00491e84a97821d0bedadd26a5efef45d2bb4d0be69a64b0e083ccdf6cf1b52a27d3bf7b8794bb473078ad0dba6f13e56cfc09f4eefbcedcbdd00eba902d1f5275b2d78d3350fa57159de68af37490563b28c699edea42c5db26c999be6a14c1c7771d8a67928cde4a1348e3b104f0ee38670b7624a63dc9052047675d522683d62ad4a550a76b89a59a6605bd50ed4b31e5df3587655a4397ffd0889feaa53beba3ee5abac22d13ae5ab59a54c59c0ca08d66a7e1ebba2568726c09a476912a9a3471d945951dae73c8415a5cdcac2d2cc05c5c339ebc61e8a743155435b4845b7494f7469de92b0a0d24db71a24abf874241d561d05b823d9300e771c9c9a73d797d3813b8eb7c1ec7b1d8e8458d51c78d55d6ecbe52044ceb70bd13de7cbe590f3ad1e99decd2fa743f745c743155cd1f1717239d47ce69bc7dde4095173d32777011de77e7939d47ca61e998ee3bb3fbceded3b7e64d271ae1ed57c3379bba2f184d8aee33b3c2174bce6383c218eb6d71cf33e56b75450a5b5e582b04f6f494948a9e7715cd3207701d371fce40961fae933de91e933efbc23d3bb2f77819aeb3810e3f08e4edff1cd63b5f6d2356c9bcb5de068e6dc8f4ea7f97239d45c473deaceedf084383ae2de1d755ed178421c1d6dbb3a79473b3ff27ef4bbf0194f08ef42fc42b8f0232421744e731c3fc2f9518e1fd9bc9b5c0ea6cf7c723a74afa947acd5e939de115c9deaf47230cdcf5421bacf5cc3b6c85160bb8e2a0477d331eeaa39d45c88eda7e37847dc4d1549889befd061ab45e8f8f653452aad66ce7948a55537ebe7d359a698be55a4d26afbf519eff4cee3e02a083cfd7214e8ead176ae4a311d8bab0e2999c77e7de6fb43ab9f4f632f55e680c0c763de92088bd0f1997a0457b50a81aa47393f42fde8f499ef78e6d16f5e113abee337de11ce6fae5d4b60e935a3cab50496be3e5b7615647a7bd0f088eec3f9ba27b638618514904941520ab4a8a00c1580490196145449416bdba687a27548d6d761971a4ba3570c96465f8fcdbd9c9015d35702a224c92460d1eaeb585fad99b6e9a1e6a9879a55485fcf9af672426240c306ad8d13928028497d9951c5f41df508ae8ebcbaa3fbd177b8d055249d73dfa9483a5860ef8ea38b869ff1a67c35739437e5abed270fe9741ccfa948db71cc54a4d34fe7aec33b62ad6aaa1453c58268013df42d8ce1dba429b634fcfc365ce17853be3aa2473f9af215d276ee35bff18e7254a46d3b8e1f21d11c479df295e93675ca57351589a64ef96aab52666a110b58cd7c3b578b38952953a6ccca5437f67c9b34859686d58823b23d68587fe8cce86f66d1d24ad64b9f85a5b36dbbe997a71c054c3fbd8b3f459c6eaa53662a16d7592b798cbb81d543b30e617502ac55c72bd32552478f60abd541d9a48a9a375dca57a65fff9af45551b3e6d0c17f471afe5485e0be5d9e421a60fdc55dc0c4e5b0dd548f4cdf4cdc76c3a2dc912145988e2f5d493d4b43a4f0d2cb82712b791fecebdb234724be94a4cd0d720f00a26b083da3aeb16b25e680409fdefd21830cbd5ce96335a4bf3822a57fb087e04bb4c4875fe97cc90db9b82022c8118987f5e2828882e0b56bd8063920b035c83d3b77f632613679ce391fb3b7ae4df3606b3a3e45abe34b47715290e978ba6ddf68960384e34c1b843ba713ca850be9502eec70500bc7ed709cb7639adcceb31dd3a90685dae13350281a897a8ea34edd06a1cd8ee8c60e14cae366228afbcdb96b9c87ba8255a8cf6b5dcd50ce4bf7e91a0e48ce4b9fdc90f8d2359a8d79dbd1e1b822219b0bdfba0b399d7e7361fbd6d58fe8c4793b9508a95187deb76d1e6c1d14ea40bce36d6f41a8478e08f7751d6f7beba9a13e51dc71ce5d930d2107049e1e28eaf03ed839dc733c1d3abc6d9c1b6f5ae1d47c0e2fb6c129cef3bea39ef1be231aef3b3279df119c565805a31b3d0f631b7c46cf6bd756f2b635cddb865ca9a284c40f5d1efb72365cf2f00a56719fd7388e3b7387de182898a2ca1458a4d022051629aa7453befaf6975e8fbef5e4b803b1c66ddc10d834bbe9d94da6cf6ba636954aa777db5624a454d24e5f2a954eeba76ddee9f24ade76673295bced93c994714352dce1b90aafe0d4fcef95a00881f4d7d7dafa3dcff3760569c9bb87c5f5ed8b2332b9a027beb41177a9a761bdbee0d43c7338645daa5f075801f72017b41d094ac3df8397f2d5d18f74840228c6b456de5b11cc1a50b456af51a47cf5d3fa49edd71634b89dfe9b5760845ef69217af791f94cebe1c0ea9ce84944a5efcf505abb2cf6f5ee9f9cc632f9c9a136ae9098b98672f50cb845af4b4e9f9eedf9e87577c7e6305fc53723978ff2397c37f54ffea7dd6a12ba9f705a4c842710a8988d3714fc16c6d03abb11bc9c7fa190999df51d113faab1ac95f678e48aa3fa49e1f14a21d44268f21a5e3796ed88c13869e0762c905c5fa84d621f86dcc9b8ff53bed941fdf881b3504365fc8a547b4a3e1597dd4d717af8f1f3ff7dec76a7ee486a4d87b3289945a0d3118a100a38831a6b5659129616999f33d853460613a3ec7fbb851dffde1d3a79cbfd1a1eed31f44fd90a1f96f74d77dfae3a687dc10d43f6e0ef66e0f78beb61c1004b02eef03c26a7879ac861eea27efcb39ebe0f0d375747474a28e0b3ad7e2a6a37320ee3a175c70e11adc3acf0517ce5c900ba793c964ba06b79367825178e9f8084dd796b5f31c1b0e4e08f775fa2057a595d5d0fb8efaa7733f79df517f710c764d2a30479aae7141a69fbcedcedbd66e36c8c1e368907bc0fcf5e560b5615ea36fcc9defecececcc9d1ddfb1f39d9d1d3b3b3a375dc764d23458458ef7c1463dba70d35d307df7c7e7d33aff50e75f1c9078146c9d9b74e4ec98e2981d93c964f276d85451436ebef39bef7cbc9383aad14cdaceac62dad9d176763c6ddbf94e450dc1b9769c6bd774bc22d93a47e9d85c5a9cbe1c0eb0af12911e1d3f5dc74fd74e9e761d8f36c4b2e1307dc709ab4dd817d83b26d8cb05694374bc6df80ce5e51c28e678db3a3cec0c4ec9e37897164ec9df78938af71d95bcef68f3bea3cdf1d37354ea06a7e44f1547ec0ffbd2f2d40dec8b8d078be8b8b13358052f2d5a1e7a351e2ca2837d6961d5e99b555a5e8b69b06a66a6543a3704862ea5c1aad2a5c6cc5d4a672ea8740e8355f0f21af43ed85dd7bdfb7240dc65316e1faca2bb472ea83bf4b667bcedae72189c928758b42c83d965e65d63f5053d20d6ae2d2b8aa4eed19b1445152b5bfaa72545ab55bd4956ba44d16a1d3167f44e6f9208b4681154d13abd492238a2359a0df33ed8d8b5d5b46d397ae879de94afbc0d7af5c83b5269b57c004aaf699be7ed0a7af217855966c3fc7514fc36ab5143e8af07a1714ccbc3c3fa1d353cab2117040f143d236e788c23d2a3fd74eda73aa9704a6a97d7348c1b02436bdce1e92127e43ae40eaf0aab11f766bab6dca97e487dfae5418ff38a8470a7174273eecb2a5abf2221f43317d29d9ea3a9cb29ee5cfde44cfd886073a7f5ebea02c593b75522a4d60ebd8fbec179db268f08b6f6e580c0d6ce79db9ba769dc90546b1535a4f4eca51ad3e0947cf6d215566597cff9e81b2d9f79100ba7e4b51ca4ee3a1252077b08fbb6fc720e6015d10dd16f7f710c77c9814574d0866d5a310f88ae8dbabe6a96295f1db11658766082d60a49a6c1650a1bac8408e288b5e2f9113e2b293e2b2ce0271556c531ac827da5b7bf48a6b94bcb73192fc4345ee02eac801760152d0fada81c468555b002eae573fe4607adf4f64755a8eb59a67ce57d5157cda1f3ce0d15e05d1e7a383006f8e9e52c0ff8c9e1c0e550ef3d723978e7a9472fdc3b7310d8d50bb58b3df09083c0ae6ae520b02baf6eec812f49d60ec78005c4c2aaecb1be4c07b1b4fc52f8ecb066871e2dc1cebced58bab6b0154bdedc4c25c9df4a7c6db98bd2974a747244525d822f79db2f0fbbae97bc59afd2b5ed947240b8971e3dfacdd30e14a956f2f69ab7cd79dfdee47dd0889bb5d576831ef7cc430d89cf1eeba73d3ebb163d0cca631c9154c7facd6b59ba0371f4e6b5e5b6fa1df5563a848f9d37e5abeecb0ae8ea11d2e9cb0728fd68f900f1dde3e19713926a58f2f6d0d3be79fccedbd5c9c362bb063dae7eb2e1376fbd0fb6f692977140aec347af74cda3078a257a79a0986db367c43d8f795cd0fce57d460c39223d3dbf9c10fefc1b1dc4d2db10cbc6d71257bcc13010c3a73d6a0cb74cbd495068d1dbc2ac6c929cf21c3844c7bd4950b47a3bc6cede27316fca57d88661f5083b520c68d8a0b5c2b06d22da505bd84ab5063788c5887b080c1d9f851e88d95b56b7496280e994c6db51cbb347bd295fd18d4ef9eafa551540eb113d12f6e503b0f488b03265cabcd1f21a6feceda9b7abe588c4e6cb4a14cb942953a63f56c763def201be4db2824a1b7133162e12e9e95821164e2d1146056d595bd6b4dd5831a703cf810f1a5b084d153878c24707e4a7129e8e97cd46dc4274b6b02146094f4b0881a0ad0637de1ee33538e7639cde598a0650543290d3f154076e7ce90fa7e1cf2a986aa80337ba34bc0ee46928e1cf5fc447940e0bfe57437fdb0562a093bd494e7c697838e774e28c9e73d64f098f8422373af1838e3a3a9ec63317148374a274572fab2e207662077dc9254c4a1c810d3260b8600b0d606049f142c50d3498b0b28425784300d8af126d93e8eadb2ebddfaf6bee3d0eab747a5fc447fcd924badf2129302cdef426393103ae42154c3c81095950010a2b794411469880045524610c170148010b7474a29857327a726204fdf978c1762005a6b3441473892b196a8922b6254040a98f20724e52874a15302a5ab85ee84d6ac28dc6e94d6a224c7f38fde178a1504042e604ea5121021535382a5e70f42635a18337f589db05eebca40ab60da7648c3152b941476e15a3e49ef858af9ce00c10647903062378629583660034d7808b1c44610919889181192b3e0ebfe1758ae8746cd1840de2174a032a8c808a18314b54f912001444a18c35b04c61230a1e2a2ba0545e4043e40a6d54210512ba2c21893782b00226b80053460b122f5049a2a332c5090421e881941c90818420680132a24c97307e80832a54a94a58a14465884c09294c1d25909029e104da8416580f9a40c10c372105e47a939aa0e2a5a3360035a08922b2d83c50b240b979a05841f2402183f140d9a41312faf3f132c748a273a1f4e133439521f040a1fcb33f7255c54ba9e5bf3fb679a06c928edea42a5b74d69b54258ba8830600d9a0441124f665f20eb2a0a2091b00a109348830758045136510b1c41398e029e1e5522208ac83a955b1d2b437a94a95fe7cbc5c5d94b4e0c3d8ce2b5e5e37bdcd261e884fb005e123e6a5b8e668426b60fae3f1b99887e0a5a33a38676139c10db0d040093920020f8cb25081023750800229b41c06a6246d87122e88584e3b30010c9723104104135cb0925d50b172a58a133898c20c76282105a60496d389308226c860610b25769082c5021623207105192198620917deb89420e20608274ad4123636349d22cc249210654e12609c9230e3c4a54f30e8cfc74ba9954477061f1f3780411b65904086165d0081e70a643c21461190e0b2c48e0a68163333f8f0f1d93e9f6edb523c9c8249a8de2426a2e88f27491aa1c17ffba5af7f35f46e19bd2f127f68ecd91f1b7d34603fbde8e1785f2845b7494888e999dea429647ab92040cc46abcb116c68e10a2ed00892e2440fbe903923042ad081e24a628a4de7383840713e2621c524df00e9d920ff6d5267c11e7fb08ac33df0506e524329e571da68791d56692d939028d3f23cfc83ade479f08f5c491d4ec107d12d0effc0164ec35fde0cdc03cf9e0fa7e069845f56e918d16d6fd2125d3aa73769092db4a937698928f4e7d3f0cb03919835795e69c2118e20bb969bd4fc19beebfafc27e575f96f86beea726a487e064e710dacbace686ccff6475b022dc183edd996f5bb8e5dbbbc1a7c74bdfdcdc00969d2f333b04a62975c1016b91b5833f04f5743d7f34bf0a0eb4fcacb1c2b742e9456b0ebe2cfaee8eaeb1a062029f240db1f1d6dd8dafee8e661630d5b3b2d0fa7f81fed65d547fb7aac1fedfdf1306fb767de031d1d82f5d075b9fb338f790ae04208599091832946f86215b9a0495b7e9bbfceb3c6ea816e1eeb4f365f7a2f131fb9a038e7b19ee7e7dc0a1f8675cecb74f3f2b0979b95724a62cd5d36b52aa02574b0a9ed2f76c41a09b226472528800851f0800b08748003346abec84209495ea6444903a5021e60a670828a1628418d14b0a81833861690000195294fe45cf583bd9cba7ed58f36845fecd7f5f9eb1bf3afeb7c7f409ebeae5d1e94ee3ae66dfc59318cb8f284293481454b1356d769fc41c28335b0b04265064d6c595def58a5a3afe3fca9f8b349575ff553e2a367dd38251f44b7fdc99697fc035b527e42cea2c52fcfb75e9aaf45cfcac76af9e87db06317f6e97cb06a8f03d3885c109c4107cfaacfc7c707ffbcd56ab5567c20fef98a6f03ab68f36fd81fb1f9a433254cf36d7878b0ea668f70a439200ba6f75adce419729b5fccede282b460db5503ffecaa0a4d5e73f905d33e5cbf0f52c1a4e91fbda6d50f52e9eba59faf55cc548db8b96aff6835e2c6585573ed925536d7eae9da9713224b95e1395698c4141803768c0b62ba86c32bddc69b798dd7fd741d289a60d58166d34c34a7d340133c99928059ecd23fa378bd5487b263d7fe95aec5ec18cda1674a02d280fd3af4626cd3af974ea577de72aafb8c2739d5d5cf287227cc54b95f3009aec224600cd74bd7a1749844e9930b2a412a99b78d5d4d8368ed71f34af55b309d65184c6206d27c69a3dfcb450b2b6420a67d7ab9c8408bd6c24a0fa0970b0cb07ce9ad6fce5d5a6ec1d207e8e5b2451acd658b2d9deae5b24595e6b24597d61ade0a4cea49c3655c769df9951928f65cf5268e88d6cc05a97976c92abe0eb7e1f9ba2eaf6f5cd09579920b8275b5ed38bc995fde76ccabb98d97dd671e07e4eb40b6c3ea47215ff5c3b92a3dc430cc886db0fab1be2a401132665387e231290248c3cd67844384d68f1b3b8eb482a362f4f1625a87623c67df8ec49ed904f51c383fe9789773d3affa09e15fbfb20b7b99ce88fbdab2d7781b17e4e69776e37db039cb7194e939f5c3e9aea37edde938f5faf6dd64f565ba6fe382f087609d79c611d99a0fb564f093eb37b36537396afd70fa8355ba0aeba9d22ed7d53488beaeeb5c3fd97c2cf21114088dba8afeb61bb190d8f1da9e5d420169e0677539757df24a7f1b51ec0f762482d58fbbe636ffa495deb66bdcd83f583f69a5b71b715f97f0d8e1f970c3ead0f59af3b76b70f319f3e3137be63f16d338e0f58dd2ae8b3db167d6fcbabebde62c3b7ad7214764f6f59aed120a18c3758c0b5273ec9bc7078a38bc99db78a7d7d4545985533ef1e7c84f177be693e23f1cad447338f323f1076ae9e24f93d8334fb3d53038385dd75fc7f5a31e8a7e1beb361a0821ecea50e9d969202c3da339101bcd2e9da6a2e84fbf0eb5c41fa026f10756893df3530b0e4ed7c59eecd7735ea6fb4ca7fa329dd16cb8fd3af7196f3975fae482c00f6db5bbe4886c3f927b4e9f8755b64f583f27accede9d6a76130ecef6afdbb8d5cf6876f6eb557a5e5661d53677290248c336f7c80571561af364695e4dbf20ba240248c3f5e58fc3347f9c4673fd8caec9defe19c9cf48360cd397d1ecad0e958e3dfb67341b9ed2aefb703afbeecf6e0f1f7b4972ca28b2e9fb40979e79a5474ec8ec52a59e6c2a446bac4a11c018ae0a6fe08e29d80b1e54612f1a9ebd30e38b1cec45b367830387195b7274f4725c6b9051c6b546c35f6b8c11c60bd71acd9e57eb18492f74f45e887157ee561d4e718a75a041301360adf842c41b11eb110b58f1b922313c34c0ca20250cfdb12645ea5582473f3d0ac480069732abbd9cf1056456b4b6d68c2af25fd61186fd721780a17de00f7e7e989097a8eb1b650a5dd167c7bc2974857dbd0f29076eade8334f8a8f15861202b1f49c572d827d3b876e45afab129d7ad62cb4d514f32673951f2aa43745aee4a39743b792df8db1129d3a8b64862518418c385c21018c818a9f2bda6eab63fd60ab9723d2b57cf49ec896f1bb71210934d8821574871b07b0678f08f61164414e80065b7e4a4a1d2fafc5fac9cf9ae5bae4826c6799f2151651d6af48c798353f68f7c7fed8e6c80c8556c4871d3dd490ace365abb9d5daa968dba88b57526a3e0eb2d55afde2a1f7b17afb49d75c9594b28ef52bc25cd0e45633fc26d0bb3df645b0b168449f67cf09ecac0ec1675c58d145707bcc1bd126da32db4b250d56c8dff5f9cc5bf98d8b2dbd69197b1f8bb321f2db2137446e900b825dcbbced921b420f0feb6e0ff871cdae791f674f6813c52db43e23c8ba20af210f1fe507d09b946589de42a6af47bae970648b2b3d3f032440111db67c11090026a2aec72f8462be08ab3e1e1d58f5a58ef8c0aa0f67bbdcb0c51b3d0bb05d64e86fc18821407f3be667aebe14abe22784105e8fd77761f3b06a16ed8dae21469a7ff1177e97070c1abab81bbef1107ea0af1f0921041245e2fab1e266f5e30fd1fac5efbf0bc8f538e4aa4278ecc56b9087c45f7508c46115f6799dce2669066df4e5cdee0eb5b0852df4726596c7fef260995eaeb53cf6407c79dc1aa2e13992c9b2a0acfae487641c9a525eb26c19bb7edc725e17f78007507a6d191744462e6dd2fbb8e5372e4852eff64009e1cf6f520cace88ffba25c8146e3cfe99caa74ed7b9df3a458759dd5258f3be6b134adf4f8cd4361cfce8969f9d2192d9f5d5b1624a3dba41968d1d7ab68796e0661b4bc76adb45d9ebca6b1607c96795383dbd48e11c5d6b64fda875043e8e729cd2a87438966268a5dcb4adfce4a1508f6ecd97608a4349f954a44e44b7508e3880c5d97a7f5bbbed5ec17ecebe44596b22b035c45395dcaae0cd7e10a286e5ea9121dc59fbc5d69da76f27655f2b63f5663de90ac0e719741d742c73d0e91bf1e3921daaffa71d72a4a3bfd3c7342b88ad2ea10ec57e914a343180e11a359fdbc6f3b2afba2b20a645ebb56b737edd9874ad7ea07fbbb886875b747258265b24722f29a07bb946dcfb0a71ba48187e8bdc987551009b24abc8180ebc76afee4f773ce39a79c92e116548b4162e55d1e314ae951b0889a96799bc4acf116b7ccdb30dc0d92231277c5d1012c103425e2b3641e00d4f4911bc2a7c6aec169fa90aab00d404dcf5c90254d842464eb1d8d6dcc39805582a64058589ae80834993e242c7d2d8f8f1e3a001ea35b89d60fee4acbb692b7abccdb157342f857fd4a1f526b11a5af77de635d4e5d9139221c51eca1f889f5f8e2611c82470df9824062d6c5d38d188c8931b012469415f360cbb33c1063525ed78561d5c9fcf2f49468124ac72154cefa4120d7777b7cf3fcae430c842f2bd1514fc8556870cec01874fb6fd3d693cd3da13971bded8fdd352d11d912d20515d165b6028696bcdbe3c27eed4bfb03ab1fc50e8f55f852c379dee6de978868b5b43d18b69abfdb8379889eb583816fa0c11874f09ab670079dec5e40a6a1ac3da10699bb613b7bf09b37c441f8f01006ad2ead185774a9b76b5adc2017843e7bc9fbb20fb1f7958ee2963b7bcc9bdced71fa3c7ba69fbc8fff01e19bea079903c2ef0e143b0f35846f3adf543dd49052f34bcd35677b60f1a79bbe8e48a9b7e7ec8f0ff686da1ef15bcd311d8861ab970b025b59660ec45dfc99a9f2543fdad787f8a57f07e21b5860944aa50331106b92b301e8cc09e197be43a6ed117fda1eb1d5727b441174b23544735aa671f5f4dd1ed9e9a6ccfb626b3769a64c3be715994ea7ed268ddb9e791f6c6dabbb3cb49abd77e70c563b4e5db5f6ac3626c648a0c118bc408d1874b337e90562767b00405bdedeb377c5126d73802ccb327aec599665d99727ab02866118866151f0989bbfdcf698ec514ecdc3f9f5600a3ad9739edb1f41bc3fd2c8f64750fcee0ca7d3c974eedbb59f4ea7d3e9089aa6959e9d1ebba6699a7686c684b6d926b40d91acdc7adcf6c0b6ed811d7ab08aeec2b06ffb838f9ddb1fcb83e1c0667568f3d7b5b8ec9590807cb4bda9bd49a9b5baa4c41f5f09ac42cfbaa4c497f52b9d96fa0567f4ecd235b9f197237275a95e3372250fce5981f8a37d7176f618c6705d93f062be16c49bd45c3fa0e66bd936bdf94dea4d7a0114bde7d25c25a7ae2ba398f729d97afe0a92358333094d0876794d7a983c26b367672ee8a21ae63d818d310f511ce8af67557a527a1a8510ca5308213c957c0a213ce58c29533ee4cb137b28797879f650f26c0350eff290de02e163970cc444b04c91d1d644c811072c0ffa21f998c91295cf4a2579a3ab4bff8a4a59f692a43293f357951e85c760ef838a64a5581b715e9b1e0c63a545ea7dfc8d5e64ec912bd1d13e7adb91283684d889748628d31ae514cd8e791f2639459f61585d4ed1fa197113c1375afeca1ebd2ffe49d74a646b88fee889b0378628d34fa876ac526fc3fe51ec1f3d118d42c4105df4e46af827583b613576a08879d7e9478491e9f9ebf2194a084c0ae25f1efcb05f67ef09d373cfd32f0784e88b10f38eeda137042be645a6f583df63b13f27ac06b22deb50ac437b3ebc9ea041263a7821d7af5fd9e7b36ff6d277bd92d765d713d8d705ebb7c70537ec5b09b656ba4f6787f0ba56da30ac4a4e9d363be4200cbab8158753fbacc2de52fd585d82cf0e1459d34a19a50d9f79d8b53cf8532e0f06221b56a2a38ecfbcc8cb83ff39800546c3e5c1770067a5cd3cf8822e0ae9d8db7978eaa16025828dd501f4e8fd75d5409b555a7ecec3d0dfdcde16da1f453e9d65cf5a261c7eeb55a348e9b1ba3ea566458555362d9ff337ba4f49cffbf467d351ae4348e58aee83545afedb25b4fcd1be8b3d54b8b24509b6d012a6d55a5d87dad5922d600205449c8006ab28527aace0a7d4acf651a4f00afb1405ace02f6f8a02564758e4007f5424f6c8c36fec91bf7e84450ed8af7a04147be4b17a84450ed7613d7aec91bfaacfc69e24f86fbd6c158ec04196270c810548f0c15bfe59e876c50a411934a0820a2e5f603085d5aef69f4f0e6fb556900aab606809ab304b1368308b2ef67cb467bf395e10450b13fac717cf2fc94b89d4f1708a6959e777c963758992f802323deb927fb1fe7af4cca8d2d7fc87d41f7c9c57c2bad2d89235a34acf7f1ee80bab4b564ccf6b4902a224f5ac5eaca8410c68d8a07e503a1eeea517bfdc058038cbd11ee954a64c992bab2c4b6b6789144081a50800585cd0a565d464c57496560c68d8a0f524015192a0b4d68c2aabfde7819e44ac9855565b2b66b5ff8e3a6e0cdf26b9808a36829da595c3082f28428d566bb5f5688fb4840a13086188375aad15adad4f36e9f819241841055b88d26aad70a869768126bf3c72bd14c9418705d35ac077f424a7e2758031c4e7c0a9f8229c2a127fce3df171bd7424c2cb3915a57433fd9d3afedb3071bbbc431ab8e379e0467ad892ef041894ac12d815bd7c6c29ef81fd211f7f24fe941eef43fc81abf826f1877b3c144803f6786d1e25390f254b1e4a964a7025bd22dab129b3a3aeeda8ab16d9686cad545193d28c4a1ac0d6f4429b9f1dabe8f7df1f9810f9796d7ada970b322f8178425e4d6ecb05c167bffeb17ada785393de13d81f7c025bca6bbc70599a66e943f0f1f1462dbf354ac88a694d4369cb09c1d268ad2e8ce1e39e17e48da68531cc283d255bbc7ed5a1ebf1dbebd3fbccf3e997ae4f0f6ad1c1e3706aaf97e82147445b677beca9d7716a8f79df1e5bf7aab2f2b795a07c439b5f9e8f926141f7d1a424566197a761b08a2f4fbbb08a5efea365b4bc16a601d09bc4822dadc52de0f4b6243a194f4fc348ba619e56da05124026c51f5a857be4651234a29ba749b40aa7e4e1946e5694106eb53a1ea9d5eaa1fae1e827d24b1522ab85a49e55c93cca86ed493fdba8b1b80269d896144bcb736b71d3426e9847abb4a455200ddcf2148a17b43cb5c2aad8f21a8c0ca3893d143fcb9405acb2c39e1e6ccc43496057d951fc4d628196de2416b8a085c49e8f3d2b9213f6c7bc3cf5127fb4cbd32ff107aee46998f863ba3c4d03d2402faf5d47cd77a08cee800edae4a1e6e18a579a879a1502f452e04afbe16a7a45b653efebc00efa92ad45861ba5e96335aa48e928ecb263a320c01d85d5225c2d62cbb8915d36376c208ebd7945c095565157253a95e92c536658652fe254660b2b2970953d0a2dd522b03265ca702f87041e7a3480a7647a5f40ba58933121680b85b6e1140bc2034429bd7908b139afc763734e1df804c94798974157d591d2832d9981a0c1d3fd012b0bacd0369c8aa7fb23298b316d43245b677b6c8f3de482c018649b08966156843005f14bf7c7fc5e9b1146fa783d5e8fd8e3e9151fafc71835ccd3e1d4c54ed8791d5e47c9c3e6464935ae4facea70eaa23c917da0edbcdc1fd7f7737f406f064ecd8b691f4ecd2f17bfed04dba6c33fa5cfd7b03fbe3de8e779b0aae314fdbc8f1eca3df443f5fcb1e11efaf94dea6f869e47ed0fd853cb3c1d4ed1472400f1ce99c7677145e3708a428e1e85a1b0ba495980e94dcae2086dc329fa8b487656753845e7f6d81e0bdb05dace197820a53e71dcc80c8968d7b50b724125cce33eaf691e10567fdb4b43d8f79bf76187ef4dcae24bcbed313d3ee761cf3cd89a46afc56d3d7a6e1b6efde8b76bbc518fb77ed778dbbc52bf1435ee5b3fdabb6d444e589dfdeb4016b450a69dac172ba048a2b3bad56fb5d5e6463dd62eb56ba31e7fb92043b8fa41696dabfbc901296d2f6d0f95be5b898efa8b5dfa7242686b75889e3f3a844fb3034520969ec7d2a0f4425b08c5f4c1aaf9b38a003d8f9385969ed7f1e939dfd9cc6f9b64840699e8766db49d331ba7a4cd6d28920515e97386fc3c36dfd8d7f5751c20567dd406567ddd115661af81550468ec3a7c69ec1960556c6cbf3416838fc6beac8aa1bf2d6339350fc43a1a7b1816484563dc585c61b8d14404cbf476ac8ac76ec32a79ec9455f0d8b12f0f5687964c64018f4efcb9e37bec8f7ddcfdd775136d4d5abc3c2c12c508218c6084972a4690610431ab8d3d46740f60f04419695cc10a5c561b7bf81b6764e5542a52daf5155ab4a4f392ef03bb2baa34df8653cd3534c76e5b3a33ebd69b7485152dab0da7206b418331e8e44cd731f26015013abebb224ac7dbc4d32d031a34a36317f426d92004cd25e84d02a30a9dea4d024305428c8a20d31feb8bab3f209a18a3573b4133ba6883de242fc4340ca337a90b2ccda337898b2e900b52da4198263ad2fb20253254341192a93fa3241801a704fd195951022d09fd19299184d99f1321c860005d78e9cfc9162fbda7ad966cb57acbf49edecb2178a3271a1daf9d8860cf21f25c3f1f78e99e5ef45043261a0dff3961116d993265a6978e618c696f7a138d666f47432ec89fe088d588df7c1ee20d714509819fe7cb8a1a023f2f1f6735d2ba0765b4113f811d0f14bd8e9ed7ec6d43cf48eb3d6b4216a3fd80adde4afb834bbddfa561610cf2a7fdb15af8b9e0c2cb0b480c2bb6873c271b0289a1828d81eb87d44fb87b28820d9fd9943a6ddb36a905579ae8d44fe80569d8ef82563a780d72308a8ee19ac161402e8848b65a1b466e99600233700a5e7a3e9ca21c37e9e311a33f1f1d500110a660030b165a1061f5753178d98113567021416b8ad597ea28c61852985001982f33587d3e596c181d7f177414e30924c084008a35b490c16a9368f3182aa0330b5f9471fa647f4ab68ee7795d181186c94bf267f4f8d18353e01f97f9104ac81c2b110657468652b5f59cda53f1051965f4007ab98ca185bde97d461b33f3c42e4ef18c9792cfac8a719e794e22ac27cbc891eb3925c108b303677be00f107d01870747e7192892830e3914d18153371882112725d42238b08d2d9011c50b0cc488828c0f2facf8d28328d6f8011737f841a784aa739c522d127be02f33a8a0021d706961a1628c1576860aba808215aa0082166c200424601082961772d0c14b111c560ca0e00615bc90c00a65b4586138c04116241001852aec20cb7219b37d7163460767069fc83ce08be880f3548e5e2e6354e9cf270c9df2d5f4fe6c7bda1f9fd8034f37fb57c3cdb761f41acdfed6d900e18d9ee9e5028429bd4a74377c4a7cf4754c851dbe0136b00aab0de01404b281534630616f00e6d980958e95ea866118c6e50b0f1ac3b8a04185c6e20ac3a470a53c9e6e8b4ca5b3e1675750470c22f40bbd5cc4d8d21f0fe549c69441166af145186554a1ed0f29bffb639e93282010f6e57c02144fb8f2842a9e7045f462c3346f0b7b6ebd9fb0b5b8c1285810c1322d2f85aeb27fb4b39d35005f8acf6ac7cac0d7b107e0e3d05fa7df96879f941e513a67f7a4156e6a486c4ae725ad45f446b4777b5c18a5f46315e96c0fe6ef6c0cccbdb0e2708a1f2bea081dd07e2952430358f5f9b881d94733df074efc19b2c615dbb35ad035780dc9ad30185f4db43a9e3217d4952217443383cf4c877ddb0c5c900f10a7a2d6ab03d2b0f3ef6a0867d6fbc5f688ff268e8ea541fb1eb53f4adfebec8fec7b1f35b0caf4e58154f8a7061866e87a7c00e0a93ebc1323b5a1b979031a00d4801a6a68407423070e7403c36c66662016373afea6a6e6405c03ff6c036a1eafcd7cb9a0ee405c71dcc78e7f3e64e8f9bc96d7b152c7e5e7fe70e1f217a46147e7a8f35c1e677fe45cd64f490d0dc904f1a93e60eb7adcd35edf51bf1d2e7842b647fc8ee7001843bc8e7703a7e2515e114ec5f37839704fe7d40c6c8f781d9e0d52e88050ec0fee781db2869b1c52d6a0d271f95d151624612bfebcf0fa53f54ebff1e7e77f0667fb056fc81828b667bb7a43c65cd99e6dcf1b32a68aedd9a6debd2163aed89e6df63e9cc6f18ad0f1375e0eefa38dc3877fa80f08856efbb2a98934187606183163c6c899a42ede4a77d8e29f4d825358b5300c04c3a91a7c6aa8418bedd9315fd03161541953068f86adf1c692a397b53379a82152569b865f3815b9a0d346bdddd4f6cb939bda4e95e8f421b14f1b0c532198f81b5895011b8ae870a4861a6a58a38c35ce5803cc1a62e445bfd97b6d6ef3df94fb036b969bc2b820b2898e9a7e53d8ca8e1c107855d8621f743c5a8ed99e6d83aef146b7fb33644c6a555790e4115403a722dc127be2bb6ecb96edd2abfe200fbabb7484490dbfc49ef8b8658b90373dfc127f602bf6c4d32f7dd31f6cdd3476cd831b03f69217b707f6cc93db039bdb833dea4481a3b1730d69855338158b6094ed11e1111d0f8dd818a29415b638d5800a843a42f7c12f1dffd5d0f1100cabbe3886559fcf970f62e9f808c9b0ea8b5efaf3d9a26ac59f2163dad89e1df3068db23ddbad1ef2042adbb3fd412bb2d5f0dc9aac1d7e018cbc16cfadba49bd6ee48044522f971f7ce98fabb43c244325b75a42375ad2d9751fce9f4a7db4376a45f7d9f4720ed8d634b861569a1544afc16b5c45d9b0cd3dc83677566fde772f7adf918ee7bced9a57da3cec9ac7eae819cd2e61cfbc8fc1509bf745b37017dd07b7b4845be2acac050adaf230dc197af4fe03c0b7f324f67e6df607fc1ec7fe6c9474ebe0d290c9b3b731c8de1ef91976f4c00140cb1d9b8d3fa9d813694f9c1dfdede8296991d8334fb794562452eaa57e385afec3f19a4db0da6c0ff9dd96eea6644a2ae91a36845b75e0945794c3a2d1f313d8188a706ade0bb871fba15f591425bb14baa2d732af5b19a248f96ad7001f8e9e97e2b3da95e1bb3900ac1b121d9f5f1403bc114e6c79d42c9b8948b8a9f981e6d98d5d63a258e60d1c60992ec26e44793ee108579a88229c36d02bea8a8cbaeef9998d615e833d957dd03df29452925e7a5efbe1f95ee3f1a2608145e91a7fe93efe523a7c9695e072f47b23741addb4c95f4a1bb669fc657fbc115b3dafbd085df6ac76f2d0cb2ebd20f099c43a1b21ec8fb4127b2623a1e777598daeff988d9e9710963c1b2bf107877be6abc4d2b3e31414dd11a7e6a1fcd2817f8eec8fed1fb83df5733331b5428fbfb00a8c771ed37d9ebfcc339830ac2a7d9ec5b08a4fdbf8f88d9edbf3c528cd5fbc0331c61509f1ba54539caac7718d559076de07bbd2cac3a97a2d6e1be42d9a767bd497bc6c2b7118fec26044d069bffead1bfca556edf138bc6d3ad371ea8a9e9e57b3f01c87075b52896eac1beb064ffd7c3c88738a737ab9d1cc0528d7c505eda0992c412bd28a8853aa5faa9356a8b442aba646274fe7964aa3374cb73f3a407af8299d1d7e81987af41b8d42b7bfe482765c074843e9f317d81fd9e731b0aafac9f38ffe00e05ff783667be8695ebdb829fa92b71b03bddcd1f400b8697a9e53d3671ce42dbd4f7b293b9d5ebb30fa02005e3810d77aba556659767a569f0cc17758c93be52b588b8d57f25ef0b80ba7e601e07119dc33af454a5f8455a52a54a8509155f4a4d2f3d20aabea7f783e2fab905ae4169924ad9057482de4173deb8158cba41569455e915832251bfc13d9f444a7a6f5e69123723aad4f60bfabc9e4e7a1c41fd9f2dcd88ab00ad6afa46543de8d60d797ea77d07ddbc5f3e494eac928d9b69b15ee995f0641875de73b8fe799491dacb2c2aa9d4f9c7f704a4f48a5a1d0f907aff4fc77d00dc1771f925338356f045b46993f62151fb67a6a2b23c39da6d2abc73c1e2771cfb4a271fce32f3d2f3d580552e1d47ce6c129adebf3ba575b3d0f145d2855289c9af47fce5187c23fac56abd59ad26ab58858cdc316abfe79188555fbd1cec1fdeb3a074ee7f86e8e7bf20aa7e6a927b1706a5e7250e28f0eb1679e66f5eb68dd51a5ce77fe492b43d04361958ec911c139fdc50dc1391456e9f8fc116ced8fc539cd9ec0ceea3773ed40d1056f7bc7d3417939debc0e6f65169ee7f0be0e87f741287adec6fbb61aaf08eb6fbf749e11ec53bd8153f33a98ea47b9fa65fbd2f336c41f9ebadc233feb47bb9ba5ec5faabfae27d6a558b5294ec14b2f3b38004368cbf3b196beb4dd9ac49f9be3f8f68d3f39aee9b8f1e0f6c4e798e9781cde6ecf97758c07d369ab5d9b49ce7435978761f607e671731456c563da8bd0c12dc73cf89317043b04821d1e56205b58150f91b03f5decb98ea3c6d9d8d415faea3a1c9c8bc3ae615d33e375f1c727f65cc7c1b96ab88831a54d8f525e90da24e974691e2f7dbd44e5c6cfb93c6c6a6a6a3e43c4f49afa04b64dfd3020d34ac70f613f4939a6b4c12aa699d3a92ea76291d873c9ef1f4fd93253bfee8aa96ed9a26dd93615b74498f42ed5116e399da0b75d900bc2bddb23d6cfa73f253c8d22828d9de8d4104a8e88e9b03e818d9db6e8c12a9cba7cd0aeab07dd973279f00b4e5df7893f30897bae1f07a7bbe0164e5d6728bad3210c1365cb0f8e5f700c6ce30dbe82559f0f476115f6fe60189c2a3abed2d737437f308c15a6d2174fe9eb38bc22b1e7fac9936bf27c6c2a7e53df9ea1c54a1858cab062cfe8787de36e6041ec26cf07a7e20c1a862d771f7461409106ab96cb0dbe340d7d1d8661d5720983ca05c7f4758d6e1133e21f4ca3afc720acfa702ad60c2c9c32f27e480dc35c8762763fda7db73b9ca16baa0fa760cd00e4a8b76133345f2e3668f507b7f4f50f86d902e60b3249acfad64b1855bab0ea3a0c73fddade69ff3a1c0805abb85f34de8c9705c73bcf08b6a9f250a549fca1db137f69d771ae1f893f38aeeb19c83ce915b9be3c571d622d277641071adc76dfe1e0bce3b75d6e6095761bb417c98155f1da33c03f38b1473b15d31ace189fd6fe6d1bad418f0b1732bd637ab97089d21ae4a8941bad92533304d13ac38c90e7cecb84127235bd6c4c3b3663c3a9ebcb25894c7f35b4f65983a6d2de001bdea50b4efc91db03bfd56fa358fd6c3a5ab52fddb75d82c086d5064e695fc6c1f9fe4329f6c5ea6fd06e83761b56d16b5f1ead0ec1960db4653261ca20e3259269be1693e83f9cefa986495e6252fc8162b887affaa5fa8b49b37eef2f26e1c031cdcf62122c42f7c966303d1b866135baad52188666d8d6a818a56198d8c305858958fd3a4a5b5618a60fd3d81fb089209956a3b3cb30500cabd2d81fdb2ce931ba710aab9453329221436327baecd8cbb842526f196e8819406f196e6c69eda423ffd9707cece1c7fd743e9ede6fbb30e7ea5aadd6102b785a372ca89387fd519caac329865c7c3ceff575f0fdbe9458c02edd72490ad3d99fd16b12b674dc684aa6a90fb1871e1a91c1ec823e2d9b39e8d33ec4d23f9afdc369786de3ccc6a9f96fd3687abe0ff44a58959dbe09abe0e98d8ef8c747eca1a74f23294ae7058aa69f4738450f3d1e384533c0292a67364ed14f1f94b28fa6998f20ef2c83d92517c459ccb22c1ba7e86d28a5f76115767a1a7fb44a753aab94a7298fa65f1e5a872096c8d718da2ac1695e82d343f172054fa7ace0356dd60fe7f234fe6497c78a44318245450dba20e10b183ef052c62aab1b7b8c58217c21c6165050c41b2770c28ad658374886155d0eccd22d172254e96f6bae41071f3d7e328de6149eccbde4121f3d14bfc54d83d8e959898fa6cf3cda46877d338fb664fa0436c4ea121f7dd521f95969c755d60a4eb80118643031a50666fc488a320535c468d940075756fb5522972ef66da36c74f39b62ba6173962953a68cece5ae8a12c2b33e6122683b255f73ce4bc618a394315e45b421665e8b6197b7db2356d92e50c2b884b61ca594d206e765e664963268ceeb9272638c71774241c28d979e13d8527a0bc930b39452b2642e0359b2784c339f999967640821c32a5c73d21ae075c94bcadddddddddddddddd955998f29ee48282a20f9ca2b7c1d1b934ca055d58b7492929bcac688b51aca9176fa531af0876aca2d9a3d82546e5d69512c3e6bcd468719820dbdb83659c32c62823133dce9832c625c8990c64dab7ad748e83bd75f202333b593f29e5f4969be92e05e1ce19276f5c3e425b795dfb38569cd18153f49fe41217a4cd69c32a29cff2d9b74d4eee0656cbc3e9953c1a63bcb8a039e36e31c6ddbdaeba71e5c6cf867777f793cd1bebaf1f6c1844c46bcaafbcb0a53a365eaa8c525e97bc649c32c6286398d54e129b13f382506dc374b699324e19f28679dc1bab26b65d1dbda69427829c8c6152a7e79c1836316cce39a794dab28ad64f521ae735a594530ea16d0dbe7c2c0d0ed15b832eadf126af8b2e3623cfda2ef9b1ea835eca94911d563f8985a05b2e6090698de1d690728a059fe8960b18611ace2ca7a09c54183e21c618df6ab58c66fc120423e656abd53262349e50c3cc943050504310e02184103e91906b8cdfe65895d4d0f0901b3233258c1334bc3c62967e65501a3bf4b0a654802286d47366447410c2c3637a389c92a79e0ea7e439d5f2708d8efedb5abee39fa32652be82494003c0cb6f477542a4c6788d4e62d56361706269b5d7cb650660626045d7fbd9506e935c257f39ec1aac2bb90950cb0e2b856a74df3bca2d720b99d00d619ffdbdb56307e2b32a2b9db4093fd6721aac3a700a5e02c5594d1e8e8e0d8e0eaf9c4d9073c234baebb03f1b1d56658f874ce860cfd2e37d4c8f1fec0f26016380e7328332fa7b0d1d1fb9cc208c8ee7e1b15ca9c2293006a903a724916992d7386ff324a7a62c7d103bf53e239ef55b30cb13399871a1c16df913d653bc92b8aeeb9abf2eb9a0eb0ba028b92038832615c92a1937c6ebd724a2c5aa03a7f6aa5e96999bbc2c53be9ab9b661d74e571aada397cb1765b416b789455e8956180ad8335e0738a5422a9c8aa5c3cff96ffb8c9f1c10d892def46f8fcdcfd46f9ed30e6fe24c9f8fdecb74b41ac5e6b6964ef5c3e26573758856eefa86cdbe3821b3b9caf49123323bd6cfa00c8846afce9bf9756d5dd7389bb73de3d19c7ad82fea5def3c9a2f0744ab1c6c1a4f72cf46bb739eb6357de749eea1d73cc801c14eafc1851c4ddba547b907bee47536383ad1abf1f197f7b1fa929228b6448a2c8e392d64df29f21aacdf76de6bdb2ea5bcb69d26d3ecd9b66570cbe096c12d8399097eb2b7ec1c5781e296dd887b0362d3f65269c674ee5f775376d16834a6edd9a97e2713cf94fe7526aed28c5fcaaac4ea77cd861d5f35f8e28b16402f972fbe683564a2974b17645aa278e94d97a97e97bce455bfd365f6d34956e19ea70cfb64d350d9db7532994ca61993e974eaba0a144fd7970b3255a238e37d483d7422c2dd66e6ddbf9acfd0cb2fffe0f867147178cb3d33f5a2a946dc19fd0ccdfc8cb4399dfb57538db861fde0cc69bce5d44cfd3ad355ba3ce76d5daa5f46e705938031d8cc8a0459338c35d145985d39afbd765d5d78e9c28a2eac74017ab97021e6aa1cc7f3dc758e0f142feedb3cb15f44b1b9c9016135764d8be7bcaf6b6e63fd625f5f2b0c45152abd46dc173cc7fdbae2f55885ab4431e756e83eeefbe526c771b7c2d42a776efbfcc7a6734357fda0f6c5d3af7797a91a653f6dd528b6563f5629a395da6c1c63557071061757b476927c236e2eae340cbd5cb6b421a60dd0cb658b96d65693fdc1fa7dbdaf6bd61152c3bd0e42343cb6b1a3374474d4d8b7972f3988d50fb6fc6467df7fb02effe282b020eccbedcc3fedf4cb3fddb11eeedb9755a59b7ae64fde72ca7455a3d857a4decb745a352acd20571d8a9539ab94320ffdda5a7235f1dcc284c12f20952dd34ada4b90cab14b56cd1cab1f5c3050ab377144e0392e880983d7b6b52fa4c22aedf01b1704b16b5c90a6699ee99ad4308c628f513b50d4721c3b51649804a4815e93f554a93476296b8cff8c22f65887e8b5cb4bec30478d5845f1e5af6b9a10ec10bb84d76afc72fcba69e382980e25fc7589c91cd5044d252e08f621594d5835d12fe86cbe288418768e7ca46956fabb300c938753200dd825acd2dfa5c1c7a6cda8b40a7415ba448f92902944233323090005431400304020160b4744325193751f14000ea7ba52561e8ad320c8610a19438c318400010000100010186d1b0007b258e90ba19d38804d04313431ff4013395411f1099e2f8859b0b1021fb1d74f181bd3c7305287bf61bfcba5ce19fce10a08f1baeab98aa4a73a93297aa39faba66313caca092a726c2f66eeecfdfa83ed678e94f81de7128a1a44f831e749d9aaa9cfb865793ec6adf02c7b5b79fc86e7dad977dfd2d4c7e9e44203a5bd691ffc40c39c5a95ead1f18312a223e6da38ce23cb589f5a71a316144c482875ca27bffe0335c7ba4807de13fd23a095455d62412bfc5855656aa500c6c1cd3f06502939cf5a263bd37e42d3ed981c6e095c189147e0147dfc4ed5eedd2031459fa75cf20f9b0f9e07352896e1eebb61e3065527f153d531139b179d141432c6a9f01aab470d3ea332f94b3c6b7ef6b4364ca0a6ce2ac1e4ad68019acec71bccedb75f9246bf7d0ce7e894897398bf13ac8779c41cfbf134b12785768eed3ee27adb7dbee0e40b345eeec87e270e6cb71bb705cda9745098c8b17e19dd39fce3087bf3170c41b9b70243006ac0eacf8e93b2661e0936e6f520173137702ead1da3f8d74273d7e906162ffe6bc036a4d062904981d83298f8258536f239219000fef0cd002c05eccbd65008e06b46372f9fa7bcc5a8061ecb3c2fb2f8362f7f84eb20925dd452f6b6337de59267f5fa4dd50c7f5be1a4f35390c38371f24b40f68af0c4d71af5375ff3796a50cc85a90ba0d46ea41863338026db7fbadffc33a4a6bafbf1f919da32a2d2df77a83d4b4d03b83f8b83197af80e246ff42676f8d335cb7a21cc0a0e41c6c509720db8666ca4d28d56d4a91cde70a7fadf1a8ac056402577c02d7b6bd70d6a9ebd464c319afbf0fb93e25ab9d99583b05210ca7f1423d8dbfb9118f5fccca165d57e821f12eee13448c7e0b7cf4d40dc033ccb2565c379ea72d4eb830e5633bd835a1f6218f170a74e7d51f43b0f282a888ef9696e3cc442231c28d545cb92213109814bddd4b97020931c02da37fcde02a4c0551e83ced7046f2fd8c46668e77046b1d7889d448468ad2b9dde8aea04e7b215ae6bbaac67f252eac6baace1c35b8a5071b5c7dcc624c4fdc2e724492f42bb4e1703cecc153b886fcf7751cf2fd044e4202bbe1a02403fb35d04f7b4d1a9b29d2a809f6881547b82a1e6d8e9eb49e8168868311471c87047400aa41295d9488dc1a4e38d1ac5d21d1a7519d3a7f30535410e245e2a5e1d25d046a046a2920cb3faaa1f1a4822019e60cf2e82047e7898108a7d95d7c628d257ec5c391a5e712c01240beacfb4475602e4eec020fdca1730672a2dce5edfd3ada91a3d2d83acabea1527aab454fd90aebc73f8c41b063dd32aea7a8f63f3bcceef15efaca9029d02845957f143531545612ca96c715ec0c0bdd5d24c4e8958b12e6fe45818b0950b2638e22ecf817bf4815c1cc5ea2e77f71a2e1ae312e5495c75ead6ca2649af53d5b5c05c41748299170298ebd40e21538b3a2914102c66451b149be9fb8ca162a5fcaa460a2d84821dfa3155e68447f86da42882038ba4224be34c03f46ded55f54b5809a680928237ada43148120bb41ed57b746b859f73182a34861c22b1ffdd3035c289fe04d6f55de13c320d16a3c8fcfc54718148f79728b2957d17cb1f987fee3117efe411cbd7af4370e7afcbbf7091eaee95ab859b8e2d1ae8ed58acaae5195119e0a5fdc222ecf940f7536be4d406037c99728de86a3b45df25dad038a0b4b597026f09437bda0d58bd65ac43305cef542fdc18a5fb0cdc04e8851589d9c9d3bc94c15f9e87ae7dd9b6e4d1be94e71d270579fb5d9941f3f28b184c41604b1e6ac7380988d4ad19ec6ae3f736f88fd04be86a44780f3a5c504f4efed686a3817875c45e64ce1a26f665f665b67cda37ec747cb80d1326376ade51592432a76824aaf631c712dc4aa302dd84e4242601b3ff57c56d4ba502a982125b523b8e49f8f943e935d9d03964dac7c6f57af31d9cf83433049c5d1e591f8e79d3dcf9b9c1dd9e979b4f996ed79aba78815a3c25fb3bd25e39ba04db52ba7aefe27f3adb16f281c3757507cd00ec1f8ebc6b690c240f9af55ba02618e0b44985d3dce0ef97503fc1c1883c3cc7b31100f40924dae971a9944aa604e110f06fb59120ed5d13b65252adf78824c473cbdc3425e31ee7a8dee662688ff5de85b975fa1357569de78b65873346fb622ba57ffe795a490710dce4965803cb951fbf3ff36b46fc3c7e3c11f708df1206077d4d45c636c6c9bdddbb1f0120c3f4166124ef8b51cbd5bfbcd7ce55237ac904c9263046d76e26c88fd6a8b13dd4058632181375184d49d82f5256c56be141a08061ceed0c15b28db34a1da57ece018ff9aadc8a9a5fb415d4bc886b005c5f5c1f098800c66daa52a4c9e5afb828bb9247eae3d2dda3ef645756e1b8def99a82075ae3f36e37c52520b39c39d83ff792c3826012655718b08414358f989fe8aac9fb2d058d28aba5567efcee39ecb65465b30dc724d4eb99e0628fba1a48231f030e0ecb324e66f76a6d27707e867e0812dd4ea48768dad14898a7c2580191300075d9be04b43ca4e6cf76422c65a50178fe25b32be047947cdd2a3420ccf032a163fa76899057cbe62d248abb2fd0de0931ac9ab02688ad07b106d5af3f274ed0caa92d9c3871d5a9b354d3dfb6d2041ef83653c41bf90b35198f27370e40ab42ce142f36678840f5b21c229d0b15ae574cc3a795380a14c5f70d78810a57e846e3b24a7bf3641f5bf02a1001d74e764b4ebbb051348d3b2b1580dc0254ef6e03f84adefac82822a4a3ec6dd19c997907e6b521ca7b5337fca6c8fa5b13d105665c028c01d3338c2eac13c162db88ed68a22592967b4d30e5f160f32a498c70064be8fc0e6d60a1a7149311b7289dce34993a7159b7a5997e5fe81fec8e9175a4df0599b54738f1161478dc0a76fefa11389ceec05c97b1470af47038f518b19d54b501843b7bf1355223731db6b3962108da99481af28d40f751dbe2d1623722498a371983d010489636c0fa585c33164ee8ffc506ba0f135412eb6ce6cba68ef5f64ea4bfba1844191c431fbd3a9da21bbf626124b360f621cab5c8c73e0486c1f60812ca1cc442ea8cc4aa09d0424e52c8e50e98571fc9d867c81b9d5ae8427f1dd15b29787735d2f2584533aaaaef54ad7b4583447760774fc888136a2cbe2dde5082dc24dd73881ca9a759c6cc1d6b8611c8c44fa537c766efaa8a2d389aab975715c3c9ea5d8650a56751e881d88273057d302daa55740708d26992adf97df43cce3f2756f0b38e017d462da97d89c7ad3bb366470c1cc01e9719254ac2a24424ea92164085501b474db517f5263d30a7b1708307c982c8b24004f43ca9bfecb4666e5c8356f44329c9805ee6555dd648cf6dd0fb216b10263e8522c6c9b27a3991142ec741d87c5a390fca903c7bd37ffba10fce991e59cdc0bd61a805e39644df45a35519483ef6c690cba7256704a827b6c8bc09e581c149b372adde704c3c549842142b2b56c66a27c7217bb89f18dd68d50a7b5ed743b37c16a5aa7e419f679abd4329b8071c913586960a98c5ba5677cfe2651f4a8410e16e501dfe17301e93d3297fbd847ac1fc6030386110c7955fdde96ca9795bf4c0309265ced8c7ddd335c7a72dc6d90571306d947674b414e1fca93791755f60813915d0e32a246b21d206d2efbaad69332724b38348413ccd445a8a4595b4d05943d8eb42af5292e29feac33cfe30bc6dabc899c8b25ba2dddf4deac93a440523e42f833a90c8f34bda7fcaaa3e8e5874818bccef1c8f0b49bebd2cdeb006f74455f744917c9682852db2222c2010a5e8f992bc04585ac3966994a88b67a024164ab260d806ec10bc8f7800f7c5ffee2ede1623c1251ada9bc16fe2b3414f08dae317c8d2d60eeb530f8a48cf0c2f3d3a7914e16686ac2d0864acd1a047189a9ded7002a1ddf3f6a95cd63f7b1eb77edca646ce7caf7da57cd5ea237ec9e82fef02d7844c74bb9f4fba004a33e0b78e6db6cd30687d66028d025a36264c64351bfea0d3a16e8b501406c024bceb654f3641b359e6bdf7ca3853d95601b3a2ab5eed997098dfe837333c50041a6704f4b6e959a075e890fb4c6b7fc11da1d617417159bc5606c2ec19b4deb4dd98f6a2653c81b27b09d8432255bcb9f61e73585d7f387600022810d24441975fd57522127f838772c0c1b4496fff0036f6425fdebc600adbd37fcfe1d7c93cc05677fafbef034c833f53681facef86d711da001b4b9b104a18090d17f1a3bb8882970b8c2e55f64f010f42271a85d89e62315e0aee51911abc46f9a91f119395ae904074f025d8e19038a3ef0ab6c4386e1e80fae47208b8eac9584ba4b33d8ca88268311cbaf2ae5f4dbaa29060ba216a91c8bb9622b65e75a268b0622563aceb16a5f25ef0a692ec348b48fa4a4ee04e6b217e4d0d6aa65ab78d3fad642e2ee14bd2f1893eb1185f16f03345a510acf4937bf0b472c47c4bd48541ec171ab57d89edfbbe8001fa98ac1aa8502210544f02a2dc17720a81cc98629b50986002d3e9662601a9e6d70025091d456f8806dec5caa9d815bc0c31a877bbd3f59d95e1f60e7f1e6e380963dc061252eadb70ad8d7a747af55e58f00c7403beed46447b5fb00b624021cad8c6a092c93357da4b9950f57c72727629430f082366915f51416d0e1b9d39a8de55aab6bedb315c751619b8eae5b73473e90e47fa8550f4c0bd36703a30a1308ac83f660823223bb81e433cba977144938e50fa7ae1692f20b267161cf1fb07ce86fe7781a24e3390f6cfc9e526cf7f120d6f0376114814ec5e9386814c4c8f9955db2647bdc45b9663444bf5b5b07b79d09e38584cf09b52434241c77b8a9a07894f5268f264636690b18c2b5fad27516d4702b525a41c8c078970e0b451022875922a87cb03726ca64800e2b92b7436252e8dcb0fb4e182cb341724576ee9e3b362e0118e791a00884448e8140f2a40981525106635a843d2f97493803a8d2cd06b17f4551774e4f79733e364041f219dc6758d8d9006e966c7d86a0cf84cbb30b5fe16c7b7b400052c36469bda3302b0af8238b33a1c92b8a4aa2c85262358359327a76d56e667dc121ce1130352205682a7317af2551392adf024a92041e254127bf0aecb12d62b8db7d12eb82bf12c0d70232c5a0f05baeb52b87d76dfc99e6995921c1f90523f1bd4866471414747fb1ce1d3554a67f681fb9a9cc1d19efba3fe54e402b16883c7fd4ac45ec43db07b276cffcf5d612fa006d9a697be67406b30713b0a2ade7ed1d9a6a70b386504890472af09a4032c35fa10c20f3d7a9f341f7edf49df1c689df7e2689fd608d4e0b3c912cb3f80ee05a2178b706feedda071416222764b5895307074d5f563ab6c4ffc45e1ad1ce13afa388cb69a4ea6739b7bb0b94775d3b481009b53b906f6f6343531ea61dadd5b91ba295d08f2e0af2ffacc613978ba73fa5f3cba211ef04e6f24f55b405c3ea07b2bcb3d0a679c49b6260d5e3542e18340fddeb941d5f759fdeabb942f15fbf85dc2f62af082e7e83bc64667d1a1635a1d1dad0ae4a9d2af207daa4569401dedda012eaafe2bd19541dcbcd7b32f2f8e6e5da5311c4bd841cd9f623b1860e52abd96bd228be8056348372f1e6e5a804cb1923ef2acd1f9dfd8e1fec616d92e24bfecf3ab3e84394ef45869e41f817499d8ae777d3f8d1502f68a0257243731983d60904100edd44bf761ed91faccbe18a60d4786db69ac66c0352c692684d3008a8356aa0e4fd9c189e451938ac6b9be55170b3d8b9e3482a5b80ac40474f6b9bc5fe3ad25e3908b8f88e18ee36c7b0343b5454843f442c36c869e80a114eca36fed1c2c46963f9ab82d8ba9df6ddf898a7b6768c0d7a93dddda520097362a24f899ba2e80b01f884e004262307d6a4453c167226ddd04153893b008b5d6fd1d527533606d4e98d2aa1ddff7e018cefd4d91deeef6f537088175b3601632c50175e5b56c7e9a17f3f5e3ef95b01f2249d420d065404c35950c8e4ac800f880c2e6da01f04fdf86d8ddea223e9983c1ad844816d66dc95d3c7056b8eb84549d1f9558f922a77f2cd9d74b202b3d85943ead06502a1bd14372b87c12544d2616bfeed3575afa07dbfa3739f1c2c6358c3f2589d23f11007ad50b6661d98a50e72fa4bc12c68289515029df50820d0495c7630c01da6281cd9ad5c5398f938d671bda9e16ccd8153757d85ec875db556e4f35e9eff798810df189a24f9884e065f3c9297d52344c5af466cb44fc49ecd64e4f78625e7847f8a235f23a7a9df1e2d964063f71a22d980012d4f6b52bbec0f1d5f78b63482f24a7ce2abed32da9442ac2462f6749a0e168332cab96c1b4f0074e1054952adfb1954cb3b31f344e52e372dd41014f79a8d646e46785b984abca8c138bf6aeed5b5702e826bd8012701a7c60dea0e616ac14712090b4435c8f8f65c582a905696d78ceb2e1163325cf6d5b2dbc896183311a973f97c54ce0029131ce00e592780f22feb6415ca121282c9a12a93a28dc16cfabc5138fee0eabccbd44c2dcf0130e1eaf8cc50a222d874194920ef87a3c03e0aed3a0520896c3cfea5ad91a1e71840166d083f429cada61044aa92676f5739c4646319bf1af2daae93efaa25ae4805941f70d00a7ed3584b9743d155de252173eeb781a667dd6c4ad3f262f60032370e504fa0a0d4d9e816029d81e0e093ed6ff65ae0c2f6f8178a422e461ab450a9079559af0466b82bc39f31356a7b4cbc44b8aaf5040774b42bf68c5e59c445999e25e6d16a4a669dd1a980a3f6c68e64a21975b6854ee75af8e875cb1e75873b116f61d5970640e4e1ab68695473b9ac67ec65cc02dfe6017f0e0de6de1971bb54ce9cbb12eaaf9114baad5e9d239f6128dd2946103f8bd3661fba62e22d03b035e95b3a39b37e47dd791fe46925ecd8bddadfba70c593d5144404ea24a45401dd398f246bd66bdc520f740915f3d7d67a5bba69d6e34715a0e96da614f73c513b7f6cef7a67c0b4c9b81fbf2f15b56263c02e8125008f747df34d2c6be2915904c1a1ef1649a015aa0737b76fba4f1e91ccb5f9ec4adf04b2a84fe344b12eb9cef467ca3cbec3ee2438c22000fd2d0ba777a47b71797df77229a4a4466d1dfab2f20443b17fbec898500d34ebd2b61a75171b2e338358adccf83ca844ee79ddd3036e0c11ac267d2b3c0e863910df5b487edd5b62d23d8b1b39ac6b66f8596736e5a3200ec6cd263adf33746cf19b8e353bbb2f1f1a84ec64a448c0d652f8f1d6f7e0a813759c01c000ad62786a8f8bb0d09f69aa21031fa0e18b62b5a1454febd100043be2b12272f1081c2b71b3dc2c1f9c542f29003216be065f2f584a742977626add3f89aa654fa4b7477432d4aabf306cd09f93648270fd2663d98c267d0e3ba9713782618b9980c0d39239afda5f75f5965cd3daa87f0ee00612e3f0be97713c3db782561f9e29802837ca676167a3db135d9c483785aca3e16c8472498aea19b5586f45eafd64f56a146d7d8b1f390102ea657018c840f40b9222b9c1d87ef8b85996afd31cdcaee1b7d69aab0ebc8f4c6fc7c9b4003146804710b5e214683eaea10ccb127ba569cb6e895c6ff7145bb5a0fef64c3c4c7641b0c1e89b886ac0ab14431ef1320bed8135b519c8b44fb393bb116eaa26aad13b1235af6bb59592491890286312c3cd2cc2cfa3c7f7df051c4cfcbdaef518e8841393ed61e3d729e436409a6839dba95d5cb429a398a3786e3f435daab6fa0811d46da21030dda3a4c0b74106ca2c0a5a986d53031d8836990c036f166c06397f534e53dcbc6afc80510747d93a064cea9844d26c469d503a7de971203141a63e40a9924d6dc7f41c9bac1b1351d428caac08a6c2c0e25d9c09e22181d555bbe88f2ca682f021225de890ac8cf01d5a06363c7e3a1691cf7384d1f9046ae69a5160d676521a48188dfefde7040a59e9ff738750a5a4a3f7e30619e68c6c60bce69f71072a66d3fa61ee1ded34b61cf4c8f7a86c4fc6ed0f327c14493df441f520d5b36134f0bc6fc6d422798ccff19e20f2a7688e2a83e81f1a0a30cab208a612b21d9e9c1967d74b3302b38925b708846afca6611ffca4ac2a002eaec9e13c875765a92109697d603e95e079b48dc83343332de1f96d59c7a091ccb8b236261ddf0cb4ed1b3ee6d4e1b1c02b949d842616c5b94b412254df5b1b0b60d35724ae15326a08ec817607ca008677b8a7e82de4f54de4df76e47e1694fdbef749d32d870616d512743f30d8963a37f428609644c24c6a461e838d347f510ec745cd247c120949dc1c1ddb2b08dc0c76c10f88e186a0f77f25abdca602b0171aef6fcdf2c586a8188805ef96aa08958714e03681ddab145fc51317ab497f938923692369f08a6d4e5614290406d075b4bbb9da96645e2a69e6adde583f2e8f900598c729dcc83289139752a42dab10edadc3a017a18bc8c92100b233f85c3c7e6bb878984e3f42f32a18c3d7432dfa6feaf9474537a854d7df4eef83c78c0881ab04373753f8a7eeb031ef9e20e90b6eefdcd10d3a333590d9df9457f484cd11ec2c17088e99f87d9463f3744c7c5241d445c1a5b011cc281694697f71d3cc2009d6490f1a97ec466efe308b0866c8ab1444954960a03241a1dab5604cbc1ff2427ea24d36e160ca8381f897ad6f97f5e9ff85d7ced718216a9a9aefdfc7b8fdc8a6b6d301d165194a1e55a4ea4f8f2effbf34b4c4416ce17d118f8a36a16fd427dc297864a8a854cb1bb943d30cb2a0654b75c0a554079dff8bbb0cf45b97c9557024dc58ef3864e2cc5a7ad6a67aac891b35243b3aedadeffda0b063e3469d95df3f5ad44c9f5aab7ba851e3a0f51007ab0b573b885039d1980de2a255942d47e78950cb884bf4753c3d651a7ddbabd846d951b684704c200d2ad0807677348ada28a940db3654d2c3ee2daa368354debf0a1381f0b21405449c711f55cf0109de7359e574d76e14eb0dd1ea63fb7a5ff788c3b5d8563b630239c6149abc003842f8c60046d1cf1de38edc20c85374c5f7fbec606091aa7090dad749010b504fb88e9526626d19f70d1d4294808474bdce21f48b54b39d19b886fcb14712042a0988da005886a655171742adc59df69d262fc2e725657c6b7b0f138ae60ad6144d3878c01794c035611b9198179c5264123b4dcb90ead570603bee46a75fda70d3de0834ae6896b358cec4260f830d5695bef2b6ebfa885e6328bb5c7a59f458f27aba74562ad0615ca6a75fad3f740a24a345a958c6253b9ea5e1a572ad74029b290755811b41546a85eaa1741c2c61ec2a6944b9b45623a7cd1307facbe843fcaadc268a5f1154937ea78cbd3eb26a7f397bda2971be0e2a0dbd23080b2990398219179d909d8804c9005cd0ea5d5bd016fece003f787d18b9b7ee8ca4fe17220be1870580feebbacf8a0a46e10f9f85455c9729494484686d06ffb92e6a00d0516d4ddcf973f0db120d3401520ff9ff4bd0a136fe979644a8fe5721bee70959d6315acbad3253e08d9da49724f28d77e06312814b0a34df05c35ee7cd37ca7f84ef4ad04e8d05624a58a9061ae8bc66b3297f66983efab8986fa9f325777f5570ee9c7bb106ecfc7050c11ad410297870428cb9091105d40efa322a2c2bfa9ab320e1c31b50145a4bfb901ed5a387bb7a8832d153541668df1dec9440afc1d5c6dbc240c66c3db6bf10fa8d9fc483f02f013077ca16243a83a4d2484d90410c0dcd90cd66d9f1b2a2bd5ac9f6a021ec4009959e8b686844783435eef97082e1407eac9c162326f0c0c692b8c734ab067ee6bae18771869a2ae000ed411ac4df19833bf32c58671fb2e704892659811c9ac4f1ebd666bc94cfcc1f1d02def4ed7f93abb259a5f8cd9a82751ed8a2e4bbcc8b0dd4207d971fd8bec5a08ddf921b66f4b8ab72841e09384536b6e393c0c91214766935f97f0b971f2f89374ce511120f18282852463ca78c2ca83e6cf91030198d7349bbd2a2d4299bc81a5661720e619cd880a25ef365064579722d6eeb4ae2fa298e6e04fc3b13bfe255b19a170eacd53398adc2459f5363f736264a5cdca2b4916fda174c7de60b984356cb6ac3422b9d183ae38b2bf883b362990848b2f9761c6cb72ade9024e58dd3511510e6eeb1c134d4d1e515faa01055a6f9ca3fa159d3db9dcfb084aca38b95fbb5919ec46a37d2ea56e423905b8e251f0425e78c4516e645f8f62e347bbf08180aef88d8be68aadb202012006cd4547f0d617f48e9e64f0d99f32c84819bc26bc245456845a3d1b06ca411b2828dd1bfc0d3f63dd3ea485c11d8ca39b0b2c92e2c43d6abf86175893bfa1492e47621aa781b8bd9f2f6308a364b52e969e139064963d4a1c3c3ddf00e8307de95fdb9f6c9a13993f8d99d001c465d90c00d011faf18c88deb4593951b917c53dfe125603c06b704d2787993c555146ffa05df5f25f7499d08fd2838a0ae2504fe9963388948d8e1373b62db20d8e0996134904c11722300f9344c98bd666cb0d07fa6ff5b121cff20802c5fea254e5c7b3df800d3034af27283b99d2180e59191d06d0b4196baeb553f441e37944a1b99b2547551328b45f99052dc064f9e370d08191eee96e1071c8d89c022fc00f3bc1e244ccb00081aa3cfdad541f2f476ccb00334c1c88df554a7804a51009931ddd345148f1abc302800d7827e0480fcabcf2c8a8e3d9eccac195ef5102da75fd0e19f849a47aa98bb8d3b15dfd46ef65306565f44037b0638df39ffeb2afd88a63747d3afcc48a275a5ddd8007356cafcfa0586c6b1af66e989ad5b866ac5ce858c17a8afd4c838061ea91eb39eb01c5eac147dfeda74146ea3dc1a3151b8f35b2ed284894415b97a15f93e896eac006237cbfc853a98df58bea58a06a0536886327bb6a30015646a511b9d750da0d0e0e537918da7284881cc0dbc708a13a05ab1cd8c19d31c1b0cbb15062a9f055f473840fb0eb39dffc3b3d68866d4a1b4c326ea8f7d840cae0b34cc2b6a7c487340dc752e94cdbd7c9bd6097c8fbe9ea234c25c1661b40daab26b34dc54e48e157fa76d29902751d1e03fca051b205aa8cf0f8ff00776e52f8c7581ab333264055010c6e29733a8fb3a3eaf83334ad7fb195c30c22f07008df3c9cca894d431ede920baf1e8b67f4de5da222a4295788ad57191e0e8851800595d8e8a296d87e3fcf180f3baf525e624b1c4c8989826b2113515f55633fa3feb7e705c414b2cd58702555c12f3fa72ea45d230b284fa1c580f8c025a2e37b80132a9f60e9528b16d9b092300c42ba8f6021e40ea1357f500816fb096644867dcec0288805c6974e63b4d614e200a7c770cb8e475f7d8fd68eafc125cd6fba70893ddb703cbc20777550a4739b49f7a6080eef00ea84b18902df906235f8aea3229c8fb5f40a2c9f916bfecbdc5704bdbfef9eea5a140fb7816d75f80bbc9985409c23860274fb8cb55038dfc018faf7aaffe5474881ecd36afa260bcfa3327abb06a3cb81695233379d975e8d402e4787ec1b69129942d62021ea4d571467483e3a8a00c93a44ccfea809aca5bec400596a1440751d8e6c73a123948f3b648faf1809ae2ff10586c74232741448c862c9a0f661ed8860f02da95ae3e1492483467c3da908c2b454cf5626735532ffdf8e3a5841bd4fc112b35d459f9984a0eb82ac073a589ca6d83e5f1ec24e1e641ba99b3d2b2fb09c865c76c161b9561641914d74335210809817ccd91db90de67b54c4e62844339f190c36ed77b8e308765d074c5015154f6967b2bac32302c8a8a13502f022b0a09a917d115853c1a8737022aa2ef28ed038186166046a96904f53eb51d351f5447114430704479eba165b36d1724aa1041a9d97328fcd98c14abde18750d32f1a33d57b14cc40a5a860fbd8a315c01f254b794080f5971997863ee891cc1baca9ee9192576e528fcc72289b0b234061f88b6ab30db03d5d0d4500a511e9479fe743ea89363cceda819004402fe2634a25f4e24802625bf726e57cc6ad25bbf98f47d26d235530bfbb5a6851ec47f4e6d57b85218e9638e51817f319b1f7fc6bc05b407c7b483aa15d2a38779427ded4f68eed95011bd8829bc4f7e1c42d2e14f98c9b3be37a8ea6d69778612337627cef2ee0e7ed2fc95efbc722481f966031d29956b4d4ec7ab8a27494711c8866cf5af96580a3282ffe2849b253d86d6592c4546fc60c505189d9f0a27a010afe772f2c9949c5f3bb58a90953755b92ac159d76d17e6c5b90c50b11c078576e841a0974cfb5624cd6777be4d6dc6510e8f1c51d801a688110cc3ba1de415998bb060c821bd7f77ee32cb29aa4323117c7c2594c6195543ed920ecdc8885c41b7b7259b2446cf1579d553f3e182f36bd00d6eb1bd66d51e8ea1602e4b3e32f46a75cbafc07e254742df15b8a9c1a18bc56345753d840dc2765c5a8495ceaff1c663185c740324a50f62bcf77b9c457b340a95b1d1177411761e04c56fb214174d1647a6c96948de9a0193e5ba2890afcabb531987e005e1004e02606897c92f9e82189de2cae8256256b512250d047ca7448d3ab8fb8ffb6235a15236a8b3c919f78c4f33a1eb0b497d6b730f3c4d94b11b858d20650b49083a8ceba3e92daf611d4e8a58222159b124669888c224bd855bf940fba5957baffb6e6a609a9a31078e23abe79a2aa17953e48d8c94b5d2e4b9782d2c1df2a9b3e796a0a80c0316ed31873ef4b2da5c605b438bb6003b481b2ae2123455149e26455ff97c51b6599aa6c5918ca5157be8f6cf126925c3649adb68db52a6e34d9fde0499e2488f222d22f9349947c7e663ca81983049a8c76a2014b06ccc998516d8e4f22490a885b9e51d48efd61a12fac710051e4013ff026f26964ae6258ee6083f8374842bc6222221a24b434f084acb981301df558538f5d099d4b504426aaca76224afc79f0f4c16d27d9a3d83e23cb668890cf91b438a6cc9f3ae594d703d4254e882dcf25a3e7a923c1fcd7ab809ff1869318de1f0a8842924122ec74058b37bf6eb1d0ec687f20cd9eddfb39fff5bae3ae4d5d94b050aee0b043a9a2fa6e5c5ded5c238b930d98b132265ac7981b18eecb7315fd2cbb2fa91630cd0e788eb7335d290b8ca174e2ab5f9106785bddb054acc926c34f94d6b74265164bfcfa46d11ec8e76566acf6936547938098e24d34d5a437a119eb1cf9b6babe32e486cf9e33937700b4909e10a7163783a83ea675690337fda1cd5ddd5f9ad70d78fdbc0c4529b02f548b893602ed9613f7e3e4cc343b0dec539e15e43f1570cd3266639108b8d812e841533b864d6ebe74ad2240e788d15ceabddfd8a24a45aedfa0345df74d6498eb880bbb54e46b5c995764a49615def254c84fa25206fff6cd13d6afb502a1f4073ec50aa01064a1e9c2cdc3b3e85ae8c835753f3fd72ffa905230d4ccfcbd3bf61979b3ae4fafa233ff8ea3ea6ce81063dbbbd15a2777c4915cbbb8de1d3b7b0334f90b0642925dca9848118310bcd1b9b202a23e77099cfa928f1d9473f6ddddf18605e347603dcfa72108becd18b16a6af61ae1b2065229752333c46430279447c5af601b5e688d4dc880e922350986ba43be194260c20c8f71127f34179295e03077a1795ccc8339b810c067547d7e0cf6164ee044bf05ab7614ef62dea0ade3372fe8f959203900f09c8febf68eb31b565c089891afce1071daf9196333e1e6272cc032392e1c72dccfe346c1b0fdf60196dce6c1ad337f51086355fcc925d328165e0d295873dd782b13f891dd78e5dd0cec8c22818647d67c2cef74bc1644b8af19dedd53064410bc9bd815d1a5e0a6a502b6f920d85af3abe07e3ab543f30df003f8394e5e954939c65113077f0d6e3eb0d5d1de123a390c1802a52de580dcc0593fb0102faab800ad1f64f1c3dc4349701cf50d49a9f20cf3d9c39c528848b929bca8ba4a9f50e986e7a914c5a651e537ec56dd5de09ad6768eb83a54e09ad60882ae28486bf3b83408027a56d064b409a529d5cc677d4aa8602425ea7bcd997e821fde2e7e13e8298c7ee51bd7da31fd9bcb0f4896dba6ee3af2bc86518f9d0475392b025c5b4831c4e882d0567ceb326fd88b8498449acd5428e25c3d483308e38a70eaab957eac29ce91f0c9849a02fae9a6f4cdb0575557bb04372dbf3f8990af638955898f8ffea4550f4cfb5bf189f2f680a799000de89ee80e853f0945d2e82a374885b6f8810e72b2b4b5f4cd56078907081291e85623f1a1d26f1bdec578156fb7b3953a0708d4a638c35abf7a560860afe91fad3338d5feeb7ea9fd9cc433666dde6d82005f8f31abeeca2b07486d2c0b76b47a1f5f4111211a36faca94bd463df241c7db5a39ec8002e844f3225582c02b861b0cba5d6c9c47aec59ff62cf40c0df954793a2b5c3dfc9c8b1f04895001bb17239b72205db3cccdfccda262eafdf571c0fed0bfceacbff18b2622a831b3eed6a6a56f5eb2495597927f1c282ec12d68ffe1b4de514de420e2947da1fe05050df63c794fb007c77e979241f6b13f2aa50f63d8dfbc56280bc0924f3523dd2a606df27b525db2731a236111dbfd993ea5311c7309d771659ea02c9e73184098a3701e833e72f0f73e7f865a8e702a1c51a9cc41a8496800d504de6b5e6500879a0d31ad329685228cbd17c5d128c1cc10b6f9da9f7d58ff6f0d578c0c4f7db295223cfc5842416718202d302e6aecb7f8175aae18113c7a60532cf5f6b0041d1d48c01816082b4f9202f9ac9389db0d0a5c6713b78a61813770c7f8e59bb4e40562fa8781ff27217e19122b408395ea9607651a2bb031de52a7fb23cdaf643b6f8ace83b2f8dec99be9292eedc1ce2036c394f51597e521acb67b52b5db65ce1f37f90ea22775a82d344dcb8bf95934b8b8f02d55edda0f6b9b5d278e2f213ab4928bfa84d231f3ba064a044139541d2231017a098595928a5919c6a186c641a510961819c341222474658f2a10fcbac0bb89bea62c2e5b5050fc8915c425e32297c3ec366a3261f99ea1498bc501b92257c4bcaeadd82683eb45e7c8eb3b890678fc0b6a0112a51ce58d91d89ef1769ada95779f2049b653c8bbb00f5e2adbe8519b57e9a0bb55a0a357078d700b7558345a5cd18f60f6a9133dbb234d9458f36c9cb13ef12a2d5afe44bb21fe8d24a60e4750a84a8dae81e8bfef578732346e04915d061786d21ddf75de9aad4d4ed299b2f8748ac10e222fa27609983908bf1a78771a9857c81caf57d3b9c2a4acf54ddb50a0c7ccc2ee47177a271d3105823ca328e01603e368e053d15aca31c62e5e0e8b4938f3b850dd21f22c84199c2307d4916d831eb759722f8eef3dfc0442bd4a00b16dba09df4999147314238cff80a0adf07b1ab59db98a500df31286fd11150c9845cd7871a172312aec6d1df1cec56845e41f984113b8bb8a6e18c81382095748b58cc1ae646e4c76471638f480036cb61b6945a1de393c396b690486b951c2ade208a07b6aec5800ee0ff145e6249bf0cd6921515f1f6df7f8028808c315320c160159fda82540be3de8366d50e14b051f54465ee0d413f1f8136aeea416a3ae5a627d7bc66259732bbfb3a63ac39a28e9bcf0539fc54b85bfac03bce337b2993aa5a43e8180bbe21e8d5b8f6205c235d7c1162e8d8d815dd7d0b443a32705bca198a0c0f6a423cab91eb4dc85b52a3d1ce0a2c03f9224cbccd6b520ab05b23ac406a5d2084352d61b0a1beff9b3841ea8923a7088f776265bf061158039c88e7607ff02a409be3ca5cfb806b1cf7e19c5ed3394aa23b5622157c74952664c6bf1d86097c986daf86b7eb7d845171ec7b9cf4b87b91653a927c5026d7a6760df82e599ce85d3096ce41e572f9e48aebac44f2b6a3252a4e1b610daaadaf424c1b4040174e97e35556cd85618a8eb50b87e8c54ca8d88e1897235114e992c82d9d1f3cb00d8c8194f01a568c4df2110d2bcd120544c613183a4fd113f4c308ca820ed60050bff837e1eb1741e33aa69bb2ff8e3698507ac9b3ee7b22338fe20845cfa05aa405cd07eaf7218095ff0d9d316e007a44841df2a6a3596a59f050d9fddfe0ab44de5391d8da41c36ca002e90d1b77e9fbb3105a4ab291f1a3de0d2c52eb748214d621750e18173b5b08775e8a290aa248fe52bdb51360c16bac0df3a26c2371974b8d2d019a2414fa1f16c0197fb747e6e20c983ee068a1b3be20c69525240c164154ee42fa49923b634623883d11eb750168f630ec24a2e8e663ccc3863c353c55677496bd05b5f2d0d18315f230d18b9486e3e195cf7476c7e0c77e08ef2883b42bf92a9809cdc8e8a514c3e7e0aa5ddd2e1b4473cac8cce580b84c1a02636235c88004a7c1a64fe87c4fe05fb8f3160c8f6e7cce3308655703b6476e4ec16674d879c2825ee1909c317a1a562c2d9259d40a34f33db7984eba9a17cf2d8a4511c42961dc703722a6fec5681216f5e64d704f7d2cc705f5d0e0b234896116fdb26ee760d4a6428300018673cb23f0b5eaca27f53a8aa1ce0642fcb10f5b26746e34fd002d9ddf51a65a3ace9fefdf035cba57c386998d08de2542f23158b52a0f943b72fba54fc0b2261a54dc376711f00ff41174cbbbdf8c955e630ea04c27369baadc71552ca14a0076c286009dd7412b7ed6d8e4edca69c554f782576e631c1c9892f7830fb70611f092ee885729fd47429fbcb46905a5adfd693f5f72e0b8c8792268463bff84a1854e2e68950d12be08e65df49dcc03de16b4dd23534c7da6639611be531d4ef802cdfda79588665c1c53dbc85554bb214d2627f823d5f6263be75170c36c5e823c9269a4d536210ce91351484d4d85d9da5b8729d5c364dfbbc165340c7e52c27301c0d0434439e5625784a863161677336c1f95abe46d04b32e0ee241a93543c7a2719297bdc8d28d04726dd4a9795361980c9e8767aecd78e6bb603b5bd0afc663945ab27ce6541a9894d87e009434e1afd88bcbd17c85d622e055c828f0343f001b61db35e686a65e2113fd78aac2123da56f0d438bd40539433b789853aac41ba917342f505a3d73902537e88720aa2978cf4dbf60403023d0a14d50c035a17467e8959038fbbcea7de460ad10cff7c6af6a0b2ac9b46df77eb6cb119830257254056f045b90bf2d48e7848e61dd96274d0b3a0f25f6b61a5e2b817ce0ba217acaa16f7cb158a39cb112a2e3e542094241cdb8a403be1a61d1f1002f3fa43f6a24bd1215d8f6e5a6b3fde9e511ef0458df2fd7d2d71444843e349ae286f7a60fd6eaca083d6ddbcb1ea0eaefc83c7e62ba4f68d892a7cc192b1f87e6074141557364a8f9ad62628933500addc09ce10d5414f85caa684f2fdb894860b838df5e156caf9eecfa6ed780afa10e6c441afa6581584976cbc35e846d3dc55851c83ecbf80fe76d557e178be8bce4015941f4792b02f6077a5e2d36d3f7a10ff64bccb58c8f972ffc051062b30026a20a42029bfc655cb59c7ba72accd473a062482e50a215a4db5bd9a292c176183b3019ca0ed0d9a1e1138479d7ddc6326129e04b048de9e4fd473281570e0867bca5ecaf8ded156d0de059e623f64d658148dc59c0a4e9c969145a403a49bb9df59cc23ffe56f0db582e1d07cf10b530d817a088c712d4f8fc7bdad4988063688fef5b84abce98d6103c544ae63868f92a6f52fc23c9201bf3801690c9ea12ba7fe6ed8da07b3fe6b64d2838fe043e5f5ab901c0710ca83417f25bd5d5247bd1b86553a0bba839c42a6a8bc8428a32050107903349b5c49835a94ea45b683c735eeae3249f74d488d168b4a02b017600ba90308d8f3147d5fefff64d09ecfc34efa4d6089dbce0d750641331dc1aee45465f6b70d85ddb5957f380f87eee6c4cc0dfa7f75bbcf5b3549567ef241fbba883f69ce6efa1556966982ddd016606d3635a24df00c72e3056c22ef5ec00b58fb8a882e447de52ea07a1aa723cdee49ce3901bdc3debe0c9192b31f215d1852e568d76d0d689e8440853f59b0011935446ae7e69770b468768974151fcf3138c31d74dad638f263603f6f79471dc585a0f8409e58511887811f66bc2b11b5cc7cd671718481d1f36684e320868a7351021f26a1a4fbab73780366a2ea67d83049309854ca384fbca3c855d0512738968ab13c47525f5e399fad944bbf970126858bd0efda5f6c92159918e9ee7e3bb9bc681fce8c0aad0161dd89a282a8eb1c80416284584bfca6932c7e04e2b3428b5992779fd48a2cd684dd3a9fac872e422ad8ee961d0050095dd754b173b5309327b0a0c7654e5df4fa34b75273659153fb6d391b227d9e575a50f63a470e408e22b1bccfaf26254bbdf35b3ce0732da43aa80f85f9ee6136e1294696204e44812e456d3556e0d6db4827e2ca82d59a84af6c519da55db2456d044a9cc30c16e97c0793b922f3beebde64a82535d685c220b4de4dd1a49189b2c377785c8db9bdfbca05836f6929b00d69f93885c8cdc864942fdce9410c123fc24b8458d96b68b7cc443f6ab984a5be5262c05a8ead2414bb4e47a1fcc44a58c25f15436e47d2d4f888965589eb777a0de3a1a46a795dc7c2857995a72784ce3d23f03644684e12f916a765647d06776427ae43dbde4bf2044b7af29b403e96729d543a945806302833489c42ba15a7c3484e189e67c7107e40617d52935c113b6a885130c3f3e12723f4ee6b3bb9224fc1b5c45e994a4c0d33741b3ed1e62b99b8412a092d6a85a915d5ab8612076467f6774ded546dab09663108c43bb9d4b9a34e83854fbe646f8c2e2a8336695bcda9f6d6c1c32555163860687aa7122d8138c2948c4453c9d73198d36a6f4a682f238b71a53c792fc58ee325e3929a213c0fce421d866de200111544050cba9369ac61017ce44060a19e057353bcde2f8db72a3dce55f27743c7161a2aa241a1861e8c62d0a845089a4e3753b8b1fceefa52481bb03084f37be66e27460c24fae51d26b0a2c0b5cadd0283838f7d26ccb511c51581702a37855094254dcd86f380492c123aa09516ab09a88026b28ea61e9c8217254e99fe5465be1ec8e26b0bf669a02989e46b0e8fc0c29670fee79f3351ee0721873c9361067bcf18a7c9177818d0c51917ddbbb8d9459f39d104abb9955f6879e76437f80d260042d920f111ee6970259f4a45c9e41e801d18dc66f25223f39d1411a563dd7f8b890c726f2d7d46bada7ee21792089a88ba8df2888d0c7d519f921a76babc07841f98da1882fcd4717b3db155bcb34b335bafd13b7ef7c8f098eb4282493de972f8696dfa8351f399d4df9ba2bfc4a90ad97636ca1929e0985cd204813faa799abc75a204ebcbc2c13d085c8fdd1aeb4aefc829e2db58f243c048713b7544b1ec46c5ec5c12c6f81f666989dc9337ce052d3db430ae38bdaec624a3c61c4053d94e2a00b07083fdf1030ac2113ce2a978c434bae3d20f707a255708f4b22d67d65ac565414f31e8af54fd4a499ef22ae3f471255a9db67caded9dd5d997bee39603ed1add0b23c030aefb9fc9628aa196a5d7cd82e55190570f3461b098316f641849f5f6e14c255218cfbdf0b704111c487f8c13237f89bfb8530d52b88337e8caf7436c099eb3c108b856a0fe7e08c8ce941e8a85a18241c5d0716399b7541dfa18c01764b246ac64da1f9193083dee96197edac74922214cd79918098f6656a1a36d8f241d80d0c576c468071f89ea072bb8ce9ba179f1e746986109e659f58669fab1888ee5c9730d4af6299b78c886aed71d133c1a512404f8f7f13a79636f3a93c1c1ab1b979cf1ddc59830ea974561cb5162b39586957c250dd97325c033a3501643fe6635464e7bd59f8058b01e5e4dbe9876da7212e3854676981d357cd9a0aee68b2d55e4ab1bc7443b5a3ecaea210a3bfde247d014dbe1e918b4f323c3d611655148e354ca840b3bff38c53f974a59ad0f3db00eb83cf2fb5577468a072358efb7a844c91c8158f39d2ee67147881eb900c050ffc21c62aec7ae046462b5c43e62b2c47f287d19433e8a9553fb997e1add17a628d2cb3142768b264161c49946610317d2a1e964601b185763aa3dc4557052143278ff1d64ca1fbd132f271e348bb7544f241fa7647625f38e5bcecda492b4982d8b739eddb33509a608ad26173a3e664670db4493989c2200de74333eee13b14e86bc87f1b4e2f3ab1c3789a8afab032c1823496eddb6c7ade883eb0633acf514d6c3b81aaa4fd7f5dd43ab5f402e2ca92cc8d2ef3c983d6082e1576faa4005b0a5ba0f8d35b4cded71cb6e3bc5cf2fa9e345716888c024d868658cb4dfc09e2ce44addd6c0108e8cc8949a8dc2b5000e6f22a5a30153a3f2c9ecc07fbaedcd0d0f2c96d354b4fb42e4dc7fa3c50db40bed8d1050ff518e154fcdf447fd04e508a7ff8b02fa8414b06deff9fe60c78da3777b0de1aa0314784bcfebce0aca6e7b62f4847853c660896b254b62dfae5790b29534857f565f5586abdad30e6cf7a35fb711fcc6091aa3151eefe735d7fd0c41abbf2cda51d4b1e9b161fb41ecd894cc3ad1a5bb9265390061531621f40d7ecd8b5affb069ae2345c722fd661a03f79341d27967643312e3b6a916bcccb18463f551e83edc29a617de953691067c66e415e8f46dcc45974a95655672996ef7196071f89b6435c6c16370086421d633b7c9ac03593b7773083777b70cac460d19e6cfb3682f86a1f5fe5763be0b9f6e1d11d0c12c6d90e071f9c6ff5b11584b0ba2f1942d9e7cb24e74bbadbda2c6eae77280ac6de3046852e653d98500bf2300777d174feb66eba30b439cd6063756aa016c2102a0aa57496ad98c6fd39d9c6ac14be198405c70ffa3429d724b91a30ec596281e8c39e8b9b199b13e7c961405c5212af3a9676f01a19c8753a4fe53d6383f7809187679c6172b3ad2734d2f4952b57eb34a2d01d8667d84a663d220bce34f8e82023761166d5b11cd05481d82ca1708989ac0015fbfab754886118f142999dbe468031bb738da26582a84cce8825b672663870119d3426695e38b545e1596675567aa74e65511bf211e5486efd3183dc89b5927c213c0fd48a327551411f06da7283dfc90400d2bbb24995a2e296922066a63ce1a8962e651598e1a55564adb3436f5748e6cbc10750a80c4425054b00f88a145c4c6906cdbb4f050024d03b96d2c9ec99d98bbe3ff7b9ee4989e9cfd12a0715ee4b859330c8abe70102f9cbf01ee19acfd4913d5d894958be165923021033f6e2fe6a228c734056e904a223ef08422b4f18a379815d790813aa9309d09026d5d54892e13f5d9663a064708efef1187852aaacca479d83e7d13685f03f0b0182c95ce1ecc9698cb1f93fd17dd057471f43569a5ad416424b3c931c6fad30e43fbdb603df65f66acb52e4b0495c0d925bd405b45c78b7e484f272330823e570e6e218550ef3f944435540971987a8c9afc51071a2fd92bec40e14964c2cfa9c473b3d0ec39afe57e9500c59d14c04e756ad841143250653811a64c16c389e64160a3d6a3edd38b4d25c85a26b8d3b6e22ddceea18a3ade94166c787a536d4e0b1c51ea49f326dd56d8e258b1db41e2a4b0129b4e267d4851eee252f18fd2d506261cdeb414728d8c6cb1de18112c32dc26c37fd471adf67594c8c127ce520870ace28444dd585b6a3d7c4e3fa409462a07d5bcee0aecfb4083679df0ce9841c42572392b6eef2c53f2cc1ba148cbc76d4dd7bfa30509b7df61317fd311c2fba7fcd0ff2a07db6ccb8f8bd36af0f473c0ac864cd568f22f294fa31719b8cabf3e6ea22ffa37e76559b67bc37efe319b067860e4580f43d5a5cd8e0c3b3820bcdb0e833610ee713a098ff79b08fc98e1b86a6f5f80db8deaeba2bb732153d3155cf0fee8c11d4b2c94d5cf195cf623e3413281ed4422a98227a3f2fafe44052f81325c429405b6f35322a3c9169e14442a90daa4d61d73026a6e34854dd60a71568f32f5e0f03e319af1dd4c0ab186ca236e80173f987984a7880e41d020f2d8254d0d5f120b030e536c96208c9ea3a7a5c59287044730bd73c4dbf5500a7bd1184c3f4259d1c2bab9e4dbb2280d56fbf8394d1edee8a2ceca92ab0a542927c905bb8a4afba1405e6c9755d1aa34c0fd73a008f6cccd3f8a076378e6c0788b319f46af28b40800d627b3de38f14babf90af55c2acc8dc653fb9ece4003c189eaa622ee21a05b33252fd0039178ab52f80e5af402ebea583a30be663f8241e493428a71adc0659a29ae949228f65d13dadd1be4710d2857cdd676e3459082f2e42f183f4231178211b1560821953f3c94939607eb2b35c80b2c61480f0ee318b3f3ce4f522cc02327142e62a339df8bdc8f6329bdbb9bc29c0099aeb4efb27f854592abc89ad72b687b9412ec165230deeb010ca182b0f51038e1762022ba231b73f816ca0ff0a77239283821206d34f6cb8a719458102a8b6024a0012485eedd0ef78ab131bf79651c0f9df2487690f5eb97ad211603e19f467d57b8568491fda51bb4f8699acb32d42f5c7f35d10f0dac7bb9253e7254f0e6cc7bf81c8f5785aad50606e90b7b3e2b3d0b937643eb53b066af29012458f955ea910240246020954b921378714c8063f431db6d5c0399b82afd220032457c90f406cd3ec8c2826ed9b88c660dfd4c5090cd710009ab72848e17596263d23d2a3f7dcd9cc8edcc546ce8448384aa4fdfd3d94757027e5a88de8d5fc4222f930b0b97807cdee4e51bd1326656f14cec20364a1022453d9573ad7752b241b6561689f4d92298cb29a8cc96c67af29ba0611d4ebe6b0c484959a2c6a2a8066846d6635625793145e2d0aba122b17e4d78a9ca4225839489ed5ec64282c2eeba14bb03272300fb963abe01ed3bf6666f2a6a55fa6e74c1a04aa9d6c92135b99a79e9583a99600f1eff05ac5da947178e101f372fb93f7702e4fa329ccd8b2a13f93c7cf1dd508487df5cc21dac056e0b2d111a25faf400ee4b46446d79c5139224c10dc3e1fa26fc5513a00631c1c53412c2e233d998cebcd67f76fcd2e8fbb64e0f520a782fdab232ff72d5f4e85bc933a00918751d876d02ec2d5f5cb2576f195c6841ca99aa7b9f37afea3128dde9c8577221213f767917fc936525961be74726a8b7601ee7145abb60187347b57ab49b3337b5c4ac450c04a6d5bd1a997c1c9c394d0f38a9c00a64e9636cd103fbf4c2a1b6b2a6d7fc7b584077450e7c5efd51e1c66777ac5aa07848a9eadf37501c49a2174ffb429a88bb5a50ffde4c34edbd3f0b97fb2b9f177c7b81903b6b49f15f0c1bddb2ae937facd31915e0250f7373e17302550f9bc9146555546be7c781d27491fd7fd4d14bda5ec151d2372fe1725ba3e43dd09c909160bb4a8e84872d3d6991b78dd650c6455c10535e3d0220b3cf736a6f3f022d0cfd8b877159767a81ab7a3e6dfb79bfa4e804f652c05b649412a33efcb7fb23018c673d43611f0cb586ac82a6ed383c115a7527b02ff4757e4114fcbc0fdcc26c37ad59999a831bea1ffcbdbea917df8fc908e7e72cda3d068e04a14e812472b4ca346f015cfa0a1286c883a054346405aabb9998a9902e37f602cc7605f40e472188307c161b1a32ca6cac84625bd2734277632992181ea3b09f3aa5cb0b2fa714189c1d57b4e60902569ec11d978af3702a8d7d48bd99d72ee40064b99d4baa8f223c49c95c406150c7123980dd48e2758742bd8ac7bbbda90b68ee6ed22f2323183e725050a3c1ae3731f341be101e8ab849df99e59028fa57b3b808d4a2b6c4b743be898b05f2bb671d11b0921f9c0fec0ef6035dbf950f16799d49ecc54f1223532843b827d47b110e47e47af2dd75dcd56df4d28fc1d1988bca1c2cb73e4bf47154443dd5f5ef17778c21c978085496890093fa89195ee6bf3024f83e88550d99e2af87838650bc2c6b775366868de998e09eb02899200a43f87ac236b973a2d4b47aa0726aa328137b649b67514d904d93cbfbf0a7eae2e3da2a35d10b53e1977ad68439ea4b5f165bef7d14e50562e0a93cceb7b860702927d0feb80c8abe8073d493acb03aa15187c664a080f0cc9fdf32214707d1565ff782d15ccfe0a32c067b041e8d4ab7d4e644bd41ff1e86880a37558af6eb2baf07bf29c1f8a8cc98bcabc98a744be023815b5acbe673482a2d375972cc2c1d9293f70f49af8d5703d2ce40be75b7dcb1ff5ef658458b6f804f308e5ad2847587fba95c098e60022d0a2245f8076bc58a40a2ba47e193a92d094599c36234e92ddb12ae2b15e3ad921fecae555656082446154fccc3f10edc02db0ea6f86d552221d9c93d9b6ef90ad48bd06b53cc670fddee6a49f4bd85ca8a4fbed9292d5db499b5c1d27abbc2f6c5b8874c848c5d4ede215819a8625a557d8ededeba7c9e38ff0ecaed961b0df11cc5b7983880e56e821ff091e53e21cc4c70d8977c434a62a348ddbf02633697194304f99a2378d4d6da385c790b81640b7f86e42055e5c0f2bbfa2fbb5f2a6ee2b8a00de634ede1ab72d19fc3d397313d7ad8cf6ac39d2a43c01c4bccc81ecd7a5076e9d85b4701fa2817ac2faf709e1be03b3587ba7ffa42f78fa3ca82506c808d9a6837c7990489b96cfcfc18ddbb3331881229b94b49bef424eee384ab4a274b138f17b2a5e3f4fc94ca7a415efb53f62d885b08a389129d04f3c0d0c3f37a16b69ec886a108351239276a1cbaa1a5dc6b0f4a8c28979e1b6dd039ed0e1762e92690b05d53f5280dd7c1dfad387e09963fc214b639df80c89ab5aae8f0b958f396c1eeadac976b4b1958b2aabddd0f682f3b87e24f6131a1ed2bf10227889604ddd2e15187a8a3f3f429d39812f28190d2a7130bcccffed5ca5d8ad08bcbe583ead3709e7e8d4c57201f699603fa5fbe89557cc5e3502ebaefc5edfc5da153be7a0f8a440da5c33e913d03650296960ef2c47eae0ba9e66d5f50503391911a20008c03dec44a8e0f6727db6d99b01e87d672824f53a1395757a0d9f04d34717b0b240b0538eb9d65b38c4f39bc7590e72dc96c7df99061070a15f5aeade076cf85972b948560cf4b29be8f2ef4276f9b0bfb4bca83605d167aee92be7bbc2ea5643bed7734a26d321ae90efb760375b12c561901be56b7355402228987926c8777af62b243be71f04a280ac23d76c818f7326b2ffdbf02798b7a902ab58cce3e2b016fbf201ed1939c35f6c121812bd4c1b1e3308775af31cff4d58da5a7ba08acd5db650adbd6ddab595af28e3f1fe80abfcb1fdd20cef5ee283c168e49058f1a5ee25a0e22350527cdc8325b80bb6b173b6c8e81d1346f138c50eaf0c02cb261368279c5e457b56677a44e287b43d536a180211a80306ce7523da49cea9b99ded73839f50e9e5973ef43867125ecaa9f7e3bc0a206153f23f334ad77cadd7b46a43959ded57b440886e7974e460e4c3d836c1457a0e1c0e20a1d4bd0786ad3a2e78a7e5aa1cd74fc67108db30f7dd0a8e9d716593db5f988ad7a38db85cdaf728305b95ed2eb06dee180b13844d840b5a29d8dda5393f8d458f3d9822ed5f754e40c6194e3cf47804d95c47ef05dea4d8831e42e363fb29113ea3eec3aaa8b4967b366abcd806a7375843e958c6533324a1cbe765b76757a8feb7922c318511b5634b581e95da8f7456b82070e3166a54ff1deb2a54bf34a55ebee8012f70250f8c8fe21418a8b35b00ce8350ea03c194dcd0842e4a6466535b94d8cc31c0dbd69527e98171fe8aeff59388953279570541ce367d35cb16f3b86926dbd899c55a046c984e668de92cc7aaca4af2848840a915d20e2cb02347e05ca1c83d90a990b18acd75d3e12e783866ca2a75856e170cb9552d1654b032cfb8db8b531a1d08098638a8e1af9c3b2c38080f3305c09900ddc6e53f01dd42b0cf73783ab9446c926caa41716b15dbb3ab8cf4a4ea75051d59152fa2ab3e0e1cedf418011fafaecd30b8b1f028fffe8387cd89b3053c1a25ab6b86ae508aa1bfe0c1fdd7578ffe68628c81f5ecfa1e038501fea1b6d7ceebf59c6325c3df7471c5c5023117c8e58ad9e311838db19c38bf5d96b687a233a78d89bd4c0e411d29363bb187c73dc3d7a7296b313b2958608b88875cf5048943f8a884393de8b21ea1b6a2b9518e3601c52038ea9cad2c2a708185b2d073e616a03ae605542c9e948fbd984922859deb02aa5b462180581e159d5ab81b0b71f0d68b753e03d1ffdeed116a5b0427cd91d014b91da628c5b749c2d339353c8206f23b257f4ef57d6470287a07257b4df31045a212e1ac2868762730651c5b3ac1a6fbdc0c55103d270e6675ee97d7324a29370ab1a8b99f5a80f9f00c4bda683bca53bc4fd8b0af07dba293ec80e13845823a610e810c91dd90957b7dee7046a51e8c5a03f30aaa766e088e82b06c9798a590d6623fdb5460c66550f80507a8b686caa423a0b4044ad52ba492945b03cc12a72a1728eb1b3e41f6245b8666cac0278527a5e04574845a1972eae89332c26072e1d2f97aedc4a487be9e846f26ed3f14ab84d9d57c455a37ea93273206132b9626fc55693844d56d9e5e74384c74eb154efcdb7130fdc434321418cbc52d9e994d536dd35ed92b002a0c79f8e6bfccb690845a10d4cecbd88e01d1a7b34074a0ea1385c6e604e6f0b09ebaffaae6b049e761db7144b38820b3643e30c5627444dbd59e80e70a6530842f3e8fff92c0aa4cea7b0187cc14fc1baaec0aa5226d417c22d0153a92b74c6cdf7f35dc403bb7635f108e848410223eba93ed2e1d45a826338a3a18b6c70934aead4a7dad9811845c6ac725192e7519100cdcb31cd559ae61d0955c34199bd2a09eaa46516af00e2d79deeab60dea3456905a0c904a9c6c33ee2e2b7ec28fbfbe5bb2a99e07ab35b57f4ab06975e72d7ded1afa08d3c3e6b937aa0da4ca8b6b114b8996bc961d8cd00b73aeb70261f128c4c64376f23b23d5e92d4b0522285fad29758f083239e7dd4612da12e40a397db41badccfc310ca0f0e401ff84cb9e3382f057863231697d09c5fda63e5045f5a3a2276b46e70690807c91de0e31ce58e294b6b20f346c665c7cb9014094358c5b34345cf92669ff168fc36812814ddc547cafa82f755f01ea581f4b835a41b08c1431b2d1502ec184bf924bcde5377cfb5cf564e3ecd869dbe9bfd02b10fc4e950b8973e34812e7db93745827340ebd6e163d208917ae9c1222bc03582d144ef6850114a13691dd77f08564d470c950f604221ff52c1c04905911d95885b35418ca8b5977af6a406bdbbfd7e88c2cb73616cd5a6939be2b4aedf5f9c118060207c3cd7d1370b541b8d7363a43806470a845849bb09598219fab95be1824e1efeab1d96015720d65d16993fbaa6f973ac9fcc88c4e80906cd6245ecf18a839f0a0198fee4fdd2d196a361becd140edc8809c31349e646d7c3cb5f467e4a914fe80437515d0bace7374451d7d619bca32a23e79613e2b54967bc3e4eb1584816a6890211b747c9d062492f2ed55ac3ac45f81923d377c37080def979d4a208a46f1ce18565d41ca7b021209368b202fd92297e9a9d8320f8452bc77dea3f4288003d7f80b251b11e9496eeb1f0ae6f516577d4f6644b89e406527bcc80f464c4d8256cfb4236955831921b9117a2d21027537b501892be70825965b882d35a9f2912bbde0a1ba67fe3516b1fdd0a6d92db8182a528d4c348032816ea0371325094d015299f2010c4fc38e365e256d6a3cb19051de08a53d72ab80c9eae46572ae1171aa31b209136ba2524625e0685c3e9259bdaa5986bf656a11b5a560cb414356c7667b6ea73a494e9520e16bd086f4d2cea57507e8c8b1e066927042561a0e8ae73d554e9ce0ee6305451c1cda211f2d77e35f7882472a3eb61f9588c55971abec1377c56010fd108bb49cbb7590245565dc14b798c9e3e610ea60e1ca1470843a924dd4f6368cc655a347cc96b88b4c30c700cfe6d8125b4e8232d2d2432e6b65d3b8dbd5d18daba5e1931fffe03a539a92ef589f479062c14a36e206f5f9d47d8524f18bd68893166cc9eda46dfe5002b0c1de2eeb3b29628e27e8a7a54b8910e797189326d1f3730a21a98a6b2617841fb67dfc053e877aa21f5b050a7096e93fcdc615b81b3d3f173413c0b92fe19da59677cb9225b9035d39d3c5ecf95249b0988d36e2ce13221dc3cc452554ea9010226d7c42ced10a916d4e6aba8aa164a05e1a9897754afa61a82d6d5c49a09d6f95af55f1b57eb91109cd307e60e7c3c8880b6ab0e23418a8736756b3ee1f6d78640ceb66f4a4fabea81828690f9ce1c79ec242db85db7b1de5b42ed2684b160b96e226d188dcfbc905a4e16574028d285eb8adb8c2fc28c05cb7248e8b64ce0ad84102b1198d08079b112e9f62a3289350389fd8028fb8c4d981f7fc5975684a4e0532392f3bb25c019458d2bce46537413502c55d7f2a6a3324bc8e746966d5534fb3570149897734bd44948970325ffd5de0417222a38e270e2e12aef61b5995030f1087b48a73fc6595f4c68d29fd2e6e77d1842b6d950d403388238771acce11807b6d36c737766cedc72a1b5e10ac70e07633e0d6dd67ee1ba296747507ea5b934621b05c1be8d75d92c799b1b5e3a1c54426a4a2a31ad9ae0d2cdfbc0ad6f2289b383035aa6ab1c72ba5235375e788fbacd44f4e1efdd4458aa91ccd0dc470a96ea4853a8cf3b540ed9a1e60a298126bb71fd95cc5d7c0a32ad028fc3cccf4dfa94415049ae90733b220ff5674be3c00252721274933a73a008600b2ba33c0142d6f496a6f689d1e2b6368f9c55c9ea2b7375c2678ad353d450b5a3d3e0f71ac10888d99f24924e332a7aef03b98b413ad994aa6cbf78c5a023a5c42fe6d59d845341cb0eb1fd02fdece3b3ffff4c166419ca1c00c96f47660bb1dd8e2772f0318c0b724fa0b1888f26f33c2ac9fe15a9a6925be3231cee8337fcde841530f5e0b19615c1867bd2aaab8eb2470d5c6291151cf9fefeae0f657c2916d5ee80b2d0259313f481ed0835c2b20e49cba9ebd4e441cd406a601d9f6105a509ea9e063c3d0c06dd0f1f47bc2178f326b7d8669bdd41894897b5bfa539ea896131da273c36dc30c54f3a52734335fe2226c4510f3032f810ce0d796f8aab3020c7695bbe7448aa2d06b797b48df47efb77f8247252874f390600b5db3970ae9dabb19a1f81ac35add88370ad3b20760f60fb3607582218634fddda4c07ae7b1aac74598bf45c9bfbb8dddd93e30a374696e0ac14c676fedb4bb609478254e1b446f63293d3ddcbeea537235bcdf7cfd4cca3e52e3e55fa6da1f96691e39aa1782a0610f403024c1c54eba3b50f5b5cf8407bac9e1e165ce2584a5d54039f680d7db65360e9d4e552b11a3947feb021c807c63c8215dd0dc94598060a2df1545bc30fc98023faac7c279630458726bf5998fa08ec2ec1a8c2a22b021147fef48efbf74d308163254d7e036a0bb50886b63ce5cdec639dd36b35468a22ad9bbc13cc176310b30c9f16628bf6e2e2ef541c3de95af069f78aaa3c20b443db31b9caf5a6a8af3793fbeb5d282b3125ef085b9dfd7b0c82375c00739e313c43bdfc63fbdf59ff441c735512dd5f2e63e43877909bc50f4e8ee6d6d8d98cd47d40825324c39166bfb8ffba081ccca200a4625ae43587e8f4d6c01de1ff9870f066ba35e894ae943a9dcc64cb41b60f08e5fc0dff58a2279eae05af4c2ca0bfca909124168407203700fdc272719a154b8431024f5ff170bbf0b195fc41273938ffae7724a481e14d2ce833ff3f3a6746594a55028a99d201c909c7b1e4e62c6b270bc7a8f8a779f05326d295a89743f5cfcc28039aaf780ae3c1f86abdf292bb9eb8187a6a6a7c704384d13ee223bcde7c3226ecd09ca24e7375018d8aa7d3a154b26a683ed7dfc9f53b8bdb7602b7f8e0dc96a70f88a2ac5a5ca628c32af57a91ae2c2448411b642bf175012eab5348df7191dbb74d069856023036ed5ac0a153f078ff73cfbe96600a1fc997c1ce1b9b7ebab99db184230e64e3ff10aedd65fd82bc327d359238faefa74cbd3db35847633f74d1f4c53bcb5c8bd9439750c9ef96877cbe5aa4bc1cc779887afc626b6b3417000abdf56c9d35cd6fa95da8c338114036c7bfb9ccba9705053c19aa4817bc161e58c4fcbc9dea6b0d1347945f6a72eb8be31d05fd62ee195b829229e27deb2486c45a4926e6a3211c07324005d8fa8b75c48ad81973ff14ceba4e9d095e6ace1f23bbb8b58f927eb4553c5abe46cb61557dc12d27f2810ac283cdaa6dc6e20b4a45a16a555e5cb883e06072c2d05c88b415c120689968e257a657230cdf71cb69c711bfffb0ef8f74e23f1775896e7ca1ffd84b44d383a0fa0b65c4da56b12e4b1f12e8c899fb7ff95eb0282d73ee71d0a0f13b4d480b8ec19003e096046caf51620a02a4b5c533713e32ba049ce7972533c0bf4209327461d36c32409943250da31ff6db04dbd21ec8fc16c95dc4519c3657100f0254ccf327bcf2863e6cbaaa92d901f09e0ec6511104f747f20d1a1e2ad9654cd883b748f07bcf77307776bdf20e0423d99cc23dc9cec0e57e7113026f4e2c64f398f38c7a137c11d36cf883b5939ae1d9df9803b22a33c6f58772a93ca1421ba1f72b7338b5318d37075408197e3d3e297f467c921e5099c9c3809a03d3bd83de69d13abb8722292b52423b9faac22e6a0b70437ef956d3009f8e291b5f51ad33dbdc32fbd842c5b5e0f5b8976fe0761017f68359c109e8cdb4027b93856d22600f7fcc37931e632bb977ef249618d218dc49cc96dfa1a8b2f3f593b217f7d0ef8a54898fc9ccaefcc0355a51ce418f2e20b45c53a64809d1703e4b199136e9666ddb007b1c9e09cb41f0c55324d3dab9daccb02e44ee63107d664e8e943104f74905000e12dbc1500d5ec8b7c6219600fa75cbe56c1425eb60a034d6d09b359a4ae9a383dc59de7490a9d62f8c6d22346168e6ef3188bc9b489dbffe1bc5121e41c2a74b7558069f6f9ed4418890b795d67cf113045ca7c962d18a657606e034b23a6c3197c8cb2d77a6b88ba32f394910a80782855718e0df4f93110882be085e67f426dbcb5e5099f72b605c77c4b8e893489658a57e50927c5283cedb752ff9ad0483ea5d0bc1a1cabe3e355b01b56f4e299bd8f351bd7903057c0b8afd044a9a6a117321d9f99b1a2bc602ecc6fc21d43913d69cef9371a0e0d7e48a57363bea7cfe67027cba0786016c23971d7c052232540b36bf6721bdd532eccbe2d1a44b6fbf790efceaf8cfef7bd70a08914e26333c19d5f465a856f34447a0d3bf987047b77568be37bc10077735b1d23c70784dc4ba9b6b3c3053a5158232f9737f59503e388e9ddf7c18fb77667a578909ed10b85a1847e981012143e0b12423d2029fb1ad475dc832011fe1b2383eb68f39ed497132c561e29c59e266a71dc6b423e2c6d11decb449c58d6b36d893b4c61431e2373c31d41b26bbd54044f465a0798138a534f1a10eb8884a812ec4792cb21f0858ff204bbef545def5dfbec17741a0b81ea8d0db1251f50ce04044816132727f809819d6b27470ca04056360c303304bd1de1815993d6fc7d7c52626e88bd661e22aab11902a4e298344e18321d4ca82cb453e4870413e282bc0d0014ba2e0bb8335d9bc5ab0205d151260f59807ac5788722e6f3375d753100d1ec8bb123862f4571a3d2761349e767dc5efbc3ba5c30551691da1d181f82284a1d2a10523107240dd8be6c68fdd074eb27490050f30df1a9bdd8258de15bf0cd03a904b4760d4245fdb89670bfdaf0b12c905b4c44e25d3a5e09996b00c7f721ea2a4c04ddc22dc6da33ed1c9078daf14debd45f18da896a8fb58a6ff013478035a236b9a5420dcd9241d91d0f0029189fb66e2113c578d097e16db3421d9509a7dd9453cbdb7aae7549dad2ac4c18ea8955501340000442449d4c16b5d7c7485cfc9c5e9f7ab4da7b6b131befdd63621646f42f626646fb9776a093f0a4b0953141c9f21c9d8e967fa99e1cdc736eaed1b8ee64f57904732acb4bb820c2a6434a1a80942fb2fd86dfa8990dd9b30c725ab89171a5037b35d6334bfc995d7645ad2db9c57e0142ac209daf0a879ba5b09c6bb91288653ae20b3e38552c260b797a5f933cb2c956c608db379cef580dfeee01b4ee84ad0b91ce09d16dff1d15d63504d545152c6962df1d0016de14a6f733a806eb4f9ce3dba1bb9146f0fd43175bf824a4b0145cf1188055eb1220a9325cc85c708bae28914497a5e9687458a154d98b82e8e4b95a066d68163cbb484ff82ae7822454c127bb2609162056c029974e15225888a27ac849368c93245ca6b524697667656aa346761f9ba1ca58cadd86d47bbc71d37dab1153bb90823c474b81ceef4510eb29cf8b1f96e46b02450e76213b149195dac54a9820af803956cd142650a14dc441957ac44a9e2fd8c91e3c30ccdc2be1b9f7b6e5ac207ecfb9600ca25b705eb4e99a18b910f9bdd8d10422ce626369f9baf0a1e15d4cdf0161e971e84118bb9991a1e36bc9b3ce38c33cae838f9891df9788f3233383a026161a5371ecd376018c418473e76931642085d8f30242529f9ccb0db5bca110e79f999d288244351142575b00bee73031878228df8ba35d86d3422c9c418edebe24d4e6237dbd132cd164724a681354ed3141fb55ca22820af0cbb919a2231cd56653e53aaa73e621af99e7c94153ae1e47848c18b036f0ccb3bb12e896f4c1297a61b7169cef999f8f9f96a9986b9aa7404d16934621ea9c16eff4c69fe51d4a5b4a7630d54b6d024065bd00296a6ecf841ec05f601d405d60675336c20c191096bdc8869a608e8145f17bbd99ea6936611f10d7683cdaec7c3a1dc33001ac4f50bc2fd18897d770aa0b69e513d40ddf5da60e3e3e70fd4cd64a1899e690784c596a6af4eda6b00fc0c1b7313a78b335d27d39dcc3b998a8f8c2a499af4162d13a8e32f5807a48520a6e205eb80b4f0d3db8c5a480206bbcd2b3abe66a14ac7f809b7cbddd79b61a7471dc4509fa8ea5c8f38ab0adb7112ecfbfc36a16583af20366c58b675de18fdd679587a3e1d1809adcef5e079ebf4a2266c8a5975aec7d46eba7518adbbbdebfa61fa0eed2e21d337ee203bf4bc3a3bf43cb5d5b91eee590c23a602ee2294bc8eba42a61b99d282e7b4a4bf54d241b358e6f30fe459f1cf46e2bf2ef2dcc5f1d3d2fcce58b8e669e11bfcf7f8f3f26d8e60be91aabfc368d5475af5b4d4333dff71611a2960cdcb193bff61119dffa23c2bb8e625816f0af347df668faee31b52bc5cc737ac4f0a84d2d46f42f44644c3d3ef349480eb874d94aaa2ec5eb70dff8edd3ef41fccd3218b1d6232d34b026b807037f83ca7bd4eebe305a452ec9876332cbdeee81dbe6aaf215f5e40465c627a4a6192e657da167b7b51b6115f6966ee010f4cf3de0de24ac0343113a8c00d01d34cb7da11d73c1bfe080b2e74bc1b29c4758a2bbaa8a2a9c708a13e9ddae610ea15f79bdaf6cee879465792faf4a9652d3537dd19246b1ef99e12284b61b7daef09f6dd85e8d3c216c2f0b2e8826d62dfcf97e73d1d681022d8f70a502682e5d37efdde5f06e905e441f71e04c0cfb0f0d55fbf2a4eda6459d683b8b6ced395b67db32f04d559563cfd643c15e3ad50236dce4acf178fc890a830dac00430f4e0093b8822c8461ef105254a08bac1135b44610a567870597932809f0c06bde082573b202ca85059686fb50b5d6817b654582c81454f15b2764058e0e22e1f50f82031cde6b0a06f19a661fb5e7dafbede5db1566b7a53e3681d0b55c857da8331c607998fe769a859d66b8db06ab442794b52fc98c477eec17883381c3a76f0609a98c79106c771c9093fb0f3dbacb6291dfc033bbd3b2a335d23c337aa6bb11376d3611f29559f46c5dc8ccee7bb893e3a4fff602c40d13bda015db1a5a9ac7208cccb61ce43df9c524ac95a556f69f41366f417eb22eb98363dd3b0d3574b5c636798c6cadbdbb6f694ab25824bf13b5c8a19e8c26eae4acb6f8e4bc703713d5ef12180f00242dd9820d26a988669a1bbeb611a4f87dc954d8886252ec55b2519609ae91104212801d360afaacc68b9e484d5b18307d33c8a866f10d7efd1f5ab00d3c4bc3b8550379e8a3c42e47537e646de9d87a3b07386695ccb747c719b89a26739e1ca68c436b09b9bd2b1f2e003d3c0c74f60c4f13b7c30cdac8fb7f21b0e4b92b5238f8e52dcf45b5ae41275c5154db956d4279db4d1bb6b170495b8d20968076485274db3d79592f1d44e539fe0a5f6389e4bd474b79cbaedf4e69e539bbff1344ffcce208581605fbf21af1f1556685285a02af434a5a34d053c0d73d24931af711a774c83c30180635f6f6f9d5aede59696bd572e5d8f43162a54e98d44854bc393a86c697899ece5d9a9eb877a6b6f695b6d4b64896ecc8bb5cf6e61a7da16babb04622eb21a767751e0758c3d767f86b5b71e4f5d435e5e6fb56da7eda96b88f50ce39a18d1ebdd627e081d8b11dd9bd0755cc25cef74b6854ef9f03ae62ff767d87a736abcbb7e88397671622eba3838bce6d4ae37a776ccb570b83b00b42d368dc34bc87b3d5f3738dcc825d27d8d1bb944231b92dded35cc10985fffc130da66a4afecf5b46ab0afebef1ab2d9d710340661bf6bc896ddbe5ed830772ba2af21dcd7ad21d96d0a1abbdbf41dd8d716b964dd1addd1a78ffe832d6d74b7d756ad96567fc6f4faa9edbcb682cc5b07828d11f2dafeb57d7671e88db979d9ddaca638f495d5f6951594348e764055c0d2f45d43e8ab4aa356c3de2b202a4ce9eaf499b6ed74f672c73532cf5eee363b9b5db3d7cb688e6fd4eb99b6e5544c2bf2da3e5e37dcf6d5abbbd15bab61effac1315f3dd88b3dd342afda56bb1e5e37d943dc55dbea2576ab65b772e9fa0fc62e0efddbeacda94d6f75f71fd0b6d43652bc804c47726a177937308d0357367420c6f8def4def498b903cc714bfcd97662641299884be24f642232894c9850e79c638215f79c7b6ebafbf4a739e7d8398eee6f46372d41dd0c9528af420b85c42ea589aa73f51a1fefb4c36f06538c57900ebc19c40b084799cb90d5328ddadc15790179337839d00ef019c8442f207c6714d6ba4ab834df0c5e4e552f306eeeca150ec2d4e61f18769b9d531b4ed3e37b8fa7b0f1530eb57df41bc508b9388eb5e9efe6d48ee707e1a371de192641dd8c7bed98860f798bdd7268fe679886929666f9c67b1dcdf918a9a83d2553f6dc8ccc58012132efb834e7a5d4a4e5c4fa0f6869cfc1bbd59e0caf204507d3bcdb1db38ea464d3dd7835ffcb9cece89d8db03ea48e1db74e3218814911a8b0c11947a0d840053cf902092d28710337686103a550823aace5a1053dd77d261becd64752be5094689a4231daeb9c026cd8b03161c71b993c144f2e68a562bb2fac68d7d6691699260776116e1d22dad251014fefe8504dcfd3ccd3916a7a73a88e3e9260bf6e611a4d41530b8a0e8fa6bf6653d4da547aea96b6d14f4f88d44af1a5f55c77cfe598e7f3a5f9886c2ab4ae8ade1c08dbaaac4d8f8fc8e63a76ebcef948326d7ab0eb536db0679693ecfa5036d9e93716b203841973f3b5811d6cb05a3bb083cd759d53c0e65c0e7ab7eaf03cbd8a11f25afeb52cc21d6f04f2503c8dc13d8654e4c8912ac29c73ce1ba9bbff6e123eb65e7537ea8fd231d27c9dd74c3d8e4164c973454f97f29394a71ee50d75794ae3e428a9bbc30ddf30e9a5558aa228a5e6b445cbaaaaaab2a84fd75645e9c0c9a22c586197655593525c9961ad9e402fcdb228d8968643847e9a9c0d9d0eabea55ada7eec0a6f472a2e8e55b944559947575def3d4dd28654d8788b6a83559f23ae98152d1a9c6ca67daf8581b2816945a7628328001d44a494dab766a4e929a228cfc1ec30cbbaa59ad8a9254569435653d502c9f192bd7db73fae8edf121d9c04a0c4a6bd5e61ca2e5e5e9d4948643a4ba65399bcaa25a0fdd815d559f96d6d3d3d343ef03653edbd47da01021357575de5c7dbad621a2a9e66c2a3e45adbb03a739492a4e3042e6f72c8b7a83d532c3aa6b562aad6aaaa4006ce671b0a1b78756b7e5346a273df5f4fa906c9c5380d5d575d2435faf8fb5913cd1674dcd56141ec3385192b6602ba229b943533073c24c494d8aa22e2525298aa2ce97da4651f3ee40aa6553b2eaeaae8259579761537a9dd4db03853a25efaaeb2ea74b0d4e4de04c8f9f6e9c5252d434c50827393dc79f34f8cea0f4a23b3e7a6b41cbd7e72409141d08b41475a5e110b14ef5801345361156ada7dee77297a6a4e3a5601dd0174d8ca4807b7aea7da0e8e8e86d2a60de078a0e8f969fb3ab8e91aa399b4bb336ee0a82c377ddd5c59197f2fcaa399b7777e4cd81551521f5a86dde206a33ce1c32afce446d6d99f5ac30ab5e55734e019bd5f2156d69553da5655173b6a4b26745d138b5a4da490f14eb9575de195da4b6931e283bb6abd7eb33dfa3305a77833d8b30bc2cc23d05019b6f847924cf362cc13aa02eb484da017551a51bb0238a75406194d15b75406190d10ea88b29ed3edb01852146d37640618ca1dfebbd007d46b04ada1d684b93767787dbb91ca5d751cabb49bd77e36d344e751cfd3ea96986a37334f05b752d36578fd5e5cd6ef3be1d651b9220d3440763fc82ebb992040c34a9c117cce8024b1529bab08019461801085e800185151c4d8c907560c621f2ba0797b41da6e16fee518bb15de3b8df6d739f3154ec9bfca4b4e3810fc680cfe059424b122e369841186f50220b07be80841a4c91418f185c12508594366c61441552d0600c59509285295c89421267a8019b61060f2acd034379851d914696c4a508142592b8f448251c5df456a2823215e31427c8c3c4091e4421280c577022893b4314276244b1032158f18418ca78e902891b329e008a175d000a030c7ad0a0819e265f1841033150818b202e6246246bc39882c40a65e04116309862139580a103293f5e8892052fb04c9165091d616c628c315ae641d24592265bd8e2042f0441a2084b4c79220d59c2b0895b64e9c980b2281121c4a1952601da017121a561da01710184de4a3fd3f93089dda63b1f07d74cc0dd607885f5b1ed701ba9a938bd6a3154ecfb345d18d86db2db9233ab9da6e96eb11fa4020d500d19174bbca7c517a216a3315091585006e26206cdb4993fd1d0a2764058b0d8a02dc4a0850b32fab929fc701170352eca1d56e8c73cd81dfd2e4319516d0021fc8441c0610a23928577138e01072f6380f278f0017e73527e58ea422b62e842c7f08239b2384a326eb3cd5ba9598716fc6fd1fcc93233544c010b15bd95b2a833a36a49353a18e06a6678d3a11f337c8125c56ba9c96dc104295968f1e182c56707244498a20a3cc052c5119b18868e31c6375c8929c2115148020b5698044911c3963364a1ca169610030b142c41c0e2031fccf8a0674f51bce70e1d3cbeb086e88611fc0e8d07fca64347856ec2db306c6908c3a086866c03e1c45ba6a8cd7009cb13cd8fa42d80b018d12fed80b6e8d252a61f3603d0166728c366b7d8e205a02dbcf0e287cb407a220a32bea0b2832114010c0e0a5e28421219d0800c34f822e70b391c0603808085139e34014916b4b0a19c40a10962080aaae2882436941778cb14d45292d3603712e94061b80274458b952db8506da1c5c47c6e500433b270021bb83031051834e14519a0a821085e1eb8e4c30f92103026901c951f315b2411b3c51318495d0083180368c2175cf4e088178670862d382f962082183e3940624418a853df48a41f300b2a5ea040e2b101192fc881922cc4004517447e60440f18519822a80936719aa6f9695e121790c880b4d881e80ed6d8802206465083132b20e102074b9618c215a400852120b189bc45d6680774250b57a64c2f30183c188c99e95adc71704d0f942a0f4f92f90cd354d7e1e30269ecaa39c92eb34be9ed7169d856d4689077dd6247d9ea8dd00a2e15b18e41295758c932062c23c992269e44991274450bd370a199d603658a8e873f4d018a9e4e87588f77bb539da66b4e22f297c61d2f20d8752e878d9e8514d1f4565021d3e5ddde34d25f97e6e0250446e1d2e8422b34beac1676835530b48269a890e9c228772bf27a56f1dc9525cd9fd78dedf709a4ba3a0f5a01815c0e783a3df7dc3461712b024ee1127439e09760375845c36f504ac3c32a6014a6b18269dc74a4f234e2dcd10a6248e1b420d3ccafe44a1335499b4c2d358e7638b60c349c2975a0e167407069320f4143924c09a8362201616976945369b5ee482d4e776e82f77a910659e071828c34f8e8c08824826ae0b44086962cba18021bc400832935ec8bab891c63dab62531f31d7ff2493cdb5dace33114a89b09ea078001c511a860042d44010b1b9705c90b6220052fc840d263a3c4be9904188e70f1981f16fbb0303f255037c38595524a29e1adb3665d6e2749077d80375ed4018897c33bbd3c63b1f60b63b4edc7f23ec09a09c4d3618644b2d7dd2c157ea754cb3e614d69e6e9c0c3cbe16da439f320639b91ce6e8ecbf152c0a5f712ac79e7e1e9e05c0ed5afbb91e67ddc9b9bc2cd572c9fdb318d7537222f67a6a7572d4688ede9b6a7db03bc91c73eca093ccdda0f44b8a9e16fe2cbe1c5cb5fd105140d6f8ae8f829643abcf13d3eead4d5034f473821536fc86b1ef9a00b28bf4a97867f15548346413241333826171bcb20f57c52d24996b47bdcc241b0a6ea5275090a0a0aaacab096584aaa583d56aa32ac2332242b55482f884b2f62895bd8ed054d35551778836f1db19604ab2ed34fd505d6442c7c83fffe9348559788a5ead21cb3c4322297b825c81b66d132b260d878453f2afd0ea54c3fcc05bbbda118ecd48469b637c1345bc4d27cfef4c3345b5c32a5dff91393888569ce0310ae07bb1eec7a54713db88914ce92e44910e4c2245ae17a70ff70893f5d37377a8ac2257e89890ecb8324c505cd706946a6c7005c0efe266b4a7cc3e9a0b91cf8ee8add2cd3703ba681af42bac2f20eaef9035996d98c08421061074f66555959134d5894312797135a1dd3cc5a1dd3c0cf3f8e960d59d69251eac03e3e9317c7e6509d9d665aec4aa332105a9322314df5f94c63ee39a5b4d7252f99cd9a5933b344a16a2dac4eedd281ad70acdbaaaaae3beb5637876a0b7530d9cc5acb82627d9b547e46cbda2cb3966559cb8a42d5da3ab50c0abd415c63d6661911a290b67d2b41284d40e824886beceefc304dc776059b601d501852b8b6f2114953e9d9b05e3f60cfaea33a877ddabba6be65ed7e391d269703b5d99e0d2f0f7b7db81cf3568a764370b24f9fb7086c0b4406265d55abcdaeb40c0756ba66eaa98c457ad57f70e57a5c23be7aa87efd49a14b4fcfa6675a3abb84c7c860a5b14f3092343cf6eb6ef292ba7ea87e4dd7e33a7579fd507dde5e3dcc57afaad55c5748ae7bf9879d4f2b7b7130aa52cb86fa74dd8cb844fd35ead4b057322e0735047b7d9354f6ec6ef2d72d02fbfabb84c09bead5d511e2f01ba9dfa5ee21b81e58b5c229ecf458c9cf6b02553ce270cc3f6de3233da3c48992b3ba53eae012b5c3e5a07e040b4f518f0c2da87381a623047c4430435859cb993a6a3910ca1ea8d6a1a8e6bf29244ecd87d5b3ead3708280cd7f3707365fd21a359d225cd51ab52290be87c1e43d08c7903dfe790ca921d46b00996415da80274af2129029393909c8b3b29eab5505c0cbb0d805246e74087da490d639a9793dca9a3aaf6b6551252c5a974cb45e4cd4eabec5c34f48fd104fc95341502dafc5f457ad9f16bda3ce5575cb0a7d712574777ea5f4f38b32da7afcfc624bcf57a71c748275406074e9a9051c4062031ac8400b900862880c2081810b0c8104111790525a971613d6babc1b5bc0ba415015f881990859c40f4c506008550413150aae9b089928a242248690c0921b1f820cb1448788204b7a0042c49269031295e0618a11b05162da766c94e81f4a4c1b54621aa970c99c443cc0877beeb9a7430f22768ae8e100f7dc738f474d11eeb1911a7a8aa6013b8cb0a01e7e47bd4eaf4f065c37d7e929453dacaab0ea1279d85d8faa876a7b5fc075531faf80eb86be8e0e737add9d575530b47ef48bfa96534fe57cf69cd1e9e1a915a94751f26ef3d8dda9ebbf3478aae3dea0c33d0ff3466fe879135c377c03ca5361130c2b220149e4c081802292608111042471801b4994e0c61584de5d9cead1ddc7304e94743de61d764a79b6a7231bc7ddb24e9f669d7f58c2f2adbb592f5d42a8f30d0276bd44b80d70dd548f2fc07543bdba9b7573ea47a7a4bc39d547567559af6f1826a535faeb51f51f3cd282a82e8a4979a4004b1060e6c81225b86ee612f3488549cc6944b3c16d1811400b78041000e6e7282813c3c371044762ae202126d9dd0180c375984bec080ccc5fc3c090ae9b48ba8284ee2e0e7d7c3dd76335ae9b7a66292f86699646e3baa18f87b96ee6cdb99e9d2b92faece53a7de8a26ff6a34b39a9494d6a56f452b33ed2b69cebd821bca5bd6331423a0ba2de222cbab42d64afce2ba3e74970ddc41c64482ac44196f1884296a78823b6061976a40648b0ab227947ae9bd8e3823a0f5faf20d6dde18f95c7be51bf6ee6e3adeb463e87febabc3bb0b18be3826b087573e42f7aca7afd569d3afcb1d5a9cbcfbbff80131ebbfefa9241c85b04f63cbfa0dd3684194dbdba3aaf4bcf87e0ba993ddf0b2afca1a60b2aac012c82a5eefea8731849e47d1475eac22a2c3ff44ee003ba03f9655e58691cda017931468341a5f9114973bda84a4d4d333a3591d83b30b4f38280d54b15046c22dc3b1066876b5c3734dbde73b621cc687e10ee1b4f6feeefeec07e972ec87660c71e30b434d60e080c2b4d1d3545c88fc2369ed6911d91b81cee4624cdb75282ba83c1a4dff9488311a51d101852f49635bfeb8c1deca0073d78e2091ff8a07e273635a767bf133b4e4768a28921a2b8995a474e8f21c318276aa2a49c2c9851bce1512032246907a4a54bcb23a01d90962bda310d4e10504acbaa2aca83cc9ad70fb0ad579710eeece640cb8a708a13d594d64b93edae1e303959302d1e4c488062cec70c61ec38f5445152b2604211a1a0521eb314f5eb34cbbe618f7f59bdd425640282d94b33acfefdbab25b1f7678098145f475dd8d3ac5b4ed7ae8d7750cc32ec270b622afabcbcd3a3dbc6e89349f68237abc3e606d44d8d53122d29c8d90ebe2c84fb77e69d9b14f9790acb3f7500d69ae6d76b7ebf3eff4578c90b6a8c59f4e4d4e983ee72df8092fe52b6dbe1b182436bdaf37ebf1b1697509993e3f2f20d6e525047ed268559fd59cf4d425045e7eba840cd1d5e5dde49d1316673e1e471e7ebb999f5ada209a49ddb2823a9e271d9fc5574dba3aa53eb52869ebbabba54d2ec95f3f685b11bd659fbfee0f863ab0d9b7fae9d7317909b96eb267b70814129fdd8dfedae8afc32054eb506ddd1caaafd3572fcd3d6697037341bb1cd88dd5e1256488a6f3ea2136d481c5b13ebf599f8e533d7eab2ead4f8a92b189699a489f6c5836321b231b38d810808d01d898266bd988ee93d984ae3d0e0310c0cbf5996cd8b061c3860d1b369810c159adb72e6736b399cdbbd5579f556f71ccb488d1efc4c90642406de3d1effd2587474f6bde0d4bbff7d6815a5f744afdfe72b779abf4e6b31e4fd304638c10c2a952f545f391362f9fd689ecbc16856c86d1ef5042a014d36a3da575b665559ace83929295ac329322096373fdbae8dbf3a96c4236eb195d747b7ca08de81bb76c8310f045be56f89709eb5f3e67cb5a29578aa2a8699aa61863841042ae2f5acfcb7d9ecde8a3fa6c5e748478a957474ed996e84476a60e9d0811223bfc2c294514159a261b63f6de9bb0e193d05784fbbd395996f56c07b655597fd6dda4cc5e7be3ae77b32c3aa7e3501311eb35ce4cebc9eec336f6b6fa9bb7a04d566513529f1e3d11223bb1b1ef705faf6e61d7b91cefbacee57843a075b7798e9f310fc21b619e8ae3189765518d434f75dd6653ccb2ae6b1ea3b3e9bc3aefebd8e99df3e16c36d8d4722dafeab27e559b2cc3b41eec3e944d96611786bd52d9f5a936d97d443676033b5c3b5c3b5cd7901d7248a67c0021842299c92a2b494928659d3036a3fb886c5e44eff1a936a1fb5436164a29a5945242813233d34988a694eee8c8c6a99f5a053cbdc3d35476bd39d3f6b6d9b5feaa946a749acf72d7d7ebf56ed5297515f0d453a7da566b25c255001445e1304dd328c6984108dbb2619d4e36e8066c545747086a5d1d596fce34cdae4836d737f801d88cee23009b976fd1e26023bacfc826f48dbbc727b3b1f7b16c7c5c37bc84cb162e5634a5a780e077a96da4f8aabdebd574a3ba9bed698ab18e537dbe9a17889e4e5d47aa00093a117468450a97273dd380250d4b26ccab1abf7e6d348ec34900c0095d44431af64ab3efa134f474e8950b101ab2402034f434043a43190d21c46e8bd8687a7beafa41f450e895b691baaaaaec4a80a769c8de3ef42a744cdb467797008d670f69a1d3f80f0e895e61173da46d4074e8d435a4ba0d8dbed91edd1809f0f4e836bbbd48053c9ddd15d8e8d18da1c7c93e3acd3e7a967d744bd9dd80288dee06448b2e7ae83f6048db46a7429f2e1f5ed3b848db44a2fb038d872e0e8d6717a73e9443ead0adb6896e0ea969dcaa9242e7eba6de4f0fdd0d073bc4deed758dbfdc5d436afce59b917e390d9d866abcbc54da8be8a111842d7aa8c6cbcb2b7bd1e8a5baad605e2e0ccc7f70a5c1dced75150a55a150e85615aa2a6845f4d7a2db39ad9da2c9a5491ac6a054f43ed150a527a9b38fb40d881e8d686a9c140add922e8dd7d01c9768dccd76e82f5ae88e6b624e83c6dd6687ee06f3d15f1ea339be61ef569fb98f34ea30da96436ad1ab4824fabc1bbd888a34ec5d12e01189eef65af472bb913a74981dc77ef4cc7e74fbd1cdfe7243ff01451a7748a471c7888e13babde8de0c1b7313ba7de85eb7f73aa9e99dd6ed008244e20c0aea66b6d7c6b4c8251ec9d04b2436dfaa6726a89bd91e16cb9f777b473a28880c56fefd34bf1dbe314dafc6e8e929e0d234eff67a5c909cae13eb3f386ad675fcb0f01229a594f2ea410bc269914e8bbbaac84992dbc0bc846cb6ed68c79a1398875e3419266c65d5a071be259d4b32be683296c6834bf235b4120d1d2d351926ec56d2016b46a1f34bb006e6fc9046fac125f94ce3814bf29896012ec95f5a07b8245f351068217039e461b4c93724acf1816fc8e7f010f1f4053539e79c73efba75e7b6eb6e3cfaba74d8b7dacfde657fa7210dd3767089e99d26c384adafbe8307acc9ce9fb0c65e076fb80aa13b7593af791f1a473e67460a7432c17979371e2db52db60bc93011d26498b0f4d5ad56b9949d2fa58cc4d1f2d70e279f5ddaa66d3afa5d22b1b7b94d4baba694c26680b1078638900a4a1d4c81949b8e765c7a56aa0079ef51d4ad80ec5844360effdd59e115146af13f91a2608c147495efc6e82da7d45485f0467675082b0ae3f967629ac834314e0d3a47d579a66178573d0a094ec23face4f1cf9248e21215ec2653621e9866cb1991ba6099e1b55ce229d8ede72024d4c19aea5d4a63dccdbbe5943a7e727c6382104e30ca184dccf0d3d74d64e2e5303d324708b3b3363dfe08d113c3c8844b0c219c8eb52c500a36c775e969653040058be5eec6d351cebbabbaf2539bf8889783bbfcc44a5e0e93bb9ce4fce3ce3f4e9393164f69ef0c561a01ed80c678d2efa26210d7117a21ce1e9421cb162d55555555e49fbeaef703ff48e9d8352f9752cabf2a9a3a827f8ea028fea9e4dd4f642992ba9c844bf186529e78319a74a91d5019b88851a50dd00e488c276638d238b40312234b535827286213b00933794ddd252dcf4998460975f9874bb23a250fa9bb617fa1a8d0a98fe8a91d9bddb0a29bdd6dc2ee4e6c595de3eb1e4e75b747c5d4f17cc4d3615e9c7a592fcefbd4d385f74e77e39fa6f88897034559e7129c99a4a62e63fc0f06a263093aeab8a86d334dea0d888eef0641ea7871e48435a1c3d3500664a0053a09bd1e5e41262b455ae51bf25448737c43de8dd4f29669a413d127d15f34abd5bf8b34c7374a222d744ba39c659a1f10872d71093ea44d7803fe07849f9088968fda9df8e78897437cbcd4b64907f634452705e3d010a84c09c7cccc9411698bfd18c689ca2016de7d70e9f1e0d29b2639f57b2fde99192e4d3332779ad3361eedee9c9b361e3de9e8e94e470ee41184827da74e4a6c13a2637c10e2c891233168f7ac3777b5b0efee3cf2d12426c4c26ef6e6f444bf09d153755a69f30936663a4f4f777bad23087c0fdfe0bfab076b96f840402d10529a0f88a39f66d9b2e558559f956be8abaa9a54eb69febb39242107e0c2145c68796384c4968f2d6f8c3c4f9f4b0f0bfbee589361c202016b7e8c419aaed3c2c3c715f6fd544c6111839a2909b36069d4e0297dd4687453fa675837a5b797047a61e70ed3d003016fc4577730decad2b1045c8af2d6dd5c97e6cb69e6b829469088c113baf4046beaf9956fb82e2fc86256436cebbdf7deebaf3f6dab77e3d1f59107bcc19f784c4cea096ab1f43a604df6391932ccb487e188ff0127cdfaa56d3ef4647366888872863148d1530c82474f17a75e1cb950646a1cea728733ce38a361ad95475bb7ac9db652a0a32397e81dbd9f5e646a9ce9b1c7e69d4ef42d2b066ff0e56114ec86a3e7e9fcac2697ac4f0dd32cdfb07e6924be61bd6a954b169dff015f49ed56a61c99a0548634e100520a425fa3bbb0eb9a3395caea6edcd5cc0f96af74228e8ea791637c6ec2666204c23cd89ba60081724807e0c21459e490ea9b286d52875eb0fc7a2707852d52b650e1d84a6fd5016dd1c216291dd4ef33be2cbad0a40896db016d7932c4f5a0a629324dcc0dfc74086f8548b0d3a989bad1e588f6084a9d3e9e7ad00386d41453c0c8128a0b8a4c0808459c26aa72c2094a5a4210829cec83cb0744401f4c1946332c9302c3386259966199958289885238218489a2a4e4010f20bfc9940a9b6599cda88042c019a567f3740eec8bb230ceeb033ec1196cebd4c2217bc04ad435334df5315296b148cc4d2b1e3d7ad5392bcbb2d3b2a2507537367b42c8e4ec0fae5e8942153e5181006d96653603021402083c805450b3aa4108828441b0ac7a7186d90ccbe40f308c5fc4ac2a2b2bb3322cc37ef08c3c7a55230de7b3d3ec0a5d36745dd775d5d7f1fa14a1bcae38628d4743f81a393c3ac67384afc6abf1e06b7c835cea0823e41a9a4fb4a97129a7bdee96dd7a48dbec6be77a10b95e6f69725e9af5355d3d4cb79f1a86d17705c16e1d93dfb04f248dbd7a8d599f307fa141e3a1d1e8d7acf39217d5b6ec7c7132ea6ea1cfbb3a5d42a0e8d45d41aaacaaecdb3cc5b0bf3f675dfb2735d12bcdce97bf7e89a759bdb4d1431a8dd3385f3730a771b7d061ae68f4d1ddaecfab63a44517e73afc75b9a696f9350e1dd4b62abe8eb0e3ddb87af63fd8deda4f35e0d531d2f0356eeca70afb4eb464a6bdc6a456e435bc24c0037f20e7acb01dec607a11852a8baf274f84b068b4ac65d51ac534331c5262a56b669a7acefa18a9cc75cd295f7d1185a210125b474e2fa250145366339b5944b09685032b5d33f5369f85a894eb58499b9c644ccd8c0001009315000028140c078482c1689ce8823f14000b8fac40584295c8226112c3280a62188c320618a39021c0100084666aa8023d820bd030df6b1f4c82f35b76bfc0ea3737003fecc696c754170690ac86a98e06e7d0c5dc41b6e14c420a3d5f3c54190765a6fa1d941ce062610794d0d7e4595aa2603c504fe59562eeb3095837aa165bd78fde79a05055ea392eeee5549e5b81a24534eaf540073a570aead7b5e83a15fb1b7deb64aff08c2ba343884daace6d0db8e21defed2e7392d19d5be1678d88c94f4c46404611d36981b784e68b54e6aef33167fbcb8dea057e74f8114d3a8ac847801b1aa273cbf6384568e749d16131ce805dbe9cea014e0eaaa10b8a435465e5b3c9d5c25ce608cbf127a61561c266a42797623f7ddd61ce51d574b1b92c00873e33041345e2f543fcf4ea27e8ce5e6ff02524d058159fbf5cad2a9f78f8258c76ecffa7f09baeb92c1c3e0b1c2f1fcc7ed9855c51afe5ddcce5fb3198a990de87a80d9e577f3878d79a6194c7cbc9bc1e7d835cfeed9a992cde56bef993188f60bc5c7f5d34cbb2f37a25809d23270c9455557af03ef3918214040cc1b07a92395e3e587da35b858bb26067b7741402514ac7cb336f5cf29f819b5c186f1d185e2956c57376f1a8addf13bbde7cb8632520eb13cbef7bbb64ee577c96bb4854c038ac2fe4967991b3357582c3ac579ef10d3234050c5037411160623828cf40c0b452559e64c28cdaf068f30e416196f2e64c64980b41f23512d5fe9472906df8ef3651c657938cc7a8f2522a095fc4bb5da332634ed396bc3acbb2425f7dd9892f8deff0846b163eb2d41acea16ef1113aa2c82e9000fdb309feafeafb4d37eb77ee5a7655956879a4c9cd4b77d6ab6c23b417a26d6ce190cf4eb94a1062700aeca93c7a7930726ccc3d4739d9445617003b8976c486cd8c24bd9fc0d37dea72ef0fa55cb2fb4ec2a2f853661081a98984b01ef5f90c19cf170dc8448c2cf1186c45ba0e58962e4b203e8e59d50d39182ddec247b2b06ca214dc2991da2acaa1016a187367f537ee71b31a8e8b7e6374484b8e750e6016e6c0e44ce103825c2d2cf480dc5ce6a6ce2345b8a6dd23b629550055b971e76bcfe26eca577f4e9e56f8a5bb5eaf824f9fbf30f62907d862f184093b75e087b7bc2f86e7efa420369f8ef2530b3ea8a3175a5b85e144861615ffdebb5292525e1cb1b0308a10bab4dcf3d81c2b8ba97c6abe218033bc5103dce348d5614b1d69bb5284062c7f5bd6cafb54b5d17ee3d6cee0cf33279982b2599da8cad7925a6a574ddd11011ca5359f5ebd1538e534ef53333d4f077819d1e3159d498b00b6801b3de2c3a1536a0671415c591212e8f09c9762a033c8a1f54a6eaf17839145c7d09b6d0205d6ae9f0ac856d8d1fed6835c8f3e44cba7cd71aa46d9b9f167dafe7d68be69df677a583c3f69b90bbee869b8ced377d9cc21e084c4222114b67ffa0894cff975216648b1acb4be0106a5508c8a39280351c781c4e377f80f042049b216ab39fc7afd27e32a6eb4e8b335d861d01c1ef970221f5e25026e29cab98a0818a0e27af8090f0fe6cdda6dc85f496b949a3ea1ca0602a22bd25b443acdeca065cf44fb680689b366db3585bba0d68a920f490defb2741d0060e1a4a7786d68899725d9bf81212d354a2af2b0b06d3c83ba2cff27bbf93d0aeb0e61a8fe1c4c941a31696209496a2a596fe8465275c54161cd1dfe3e296b43126a3c92919da5c0ab7551768413579107b257bd7d2a526baab1e8edc2f52f4289014b0b3addcfbca4ed61a81395406838055cfd211b94a103db0773212cc05ededc680de9a24a2b328c1484b8bf1c3d4c1bd6dffa88565cfe608d453d679f0073b4837a3c9035320695cee4829c852370762385bcdb9ca6db5c677221de3a94b2c19ad944548ae81e34ba57d34c9eb24bda2d029de2dbd7108ef6495e40cb29c947b9f6d61b803759b31dc83d1472a8d12fca1c27c954ca43b1e2bd7e987484b818a3bb3e9add7591cdbae4b37b16b6f5160374d5bb0b739971385068efa00dd812b748ad735079761d22aee21e62a90a5fd94efb4fc1fb7b49c9dcba225d014c6af930930e44222c55d8e59e322c82b09212dcb5afdbc11d39268be0c66901d88d0e31e8b6e6f7310b1bc8ae561249d91ebc35567cd96629bfffa6004bfeebfc85b2b0adb662ee90a58818974b021eb3d15a746604710fa516d2ca9346ee6424423c8bd29137008e7259a975f31347441e360ec43bab28017e52ea9490c005d6b6b1069439b885f9fb42b7d38846c60e0df6f1e78aef8555295218f4a9b2e26a48c63a9b378864901eddcf668ecd940f5b1777d7f98a080f6ffdeed703a80418c20d27f2d020a768be38de2d68da4477ebf3dc3ced8d66c0bfece975f8e48bdbb8c0bfeb138517264bdd2e7aa93a059ffc78600414c3c228dfd5cd820882f6e3065cc725f11daa0458117bb679f99479accd3eaa921d965791556927b29aa2882f3f9905ac4b0e5ad8561c01cdb3b580e0c3a144ced18eb56c730d2599c2862d3974d1014c68e5b2340cccdbafe4464b3140c454d85d4f45a343ba9b670628aa9660b50da5dc422d6c048f5f7df0cb6cc1bd46c61fe6c3a215b710a25726b5b09a1f5f796e2950fc2c454bc7c053c1305b855e84107f01b900679e686901e0f77ae253e885f8949d9d72596b2d729e47c78101813b7a68e596907192c45848c19f8fd0b8d4b5f487a006fa128f51ea3d87a779469414c92708bc00c092f24fc938da8c16a13db016fec566ad69638700c6f23789625c45d61151efca8d539e463ea8249ad13fd89de359117bb4a74359aed3414279bf4060273a7e7ab80f685e54d4a8673bed56752bd3b6e5328083143170833e966e62ab3ad043d54c0c5b60d8464c672c91dd3ed6839c2c33d9aa535abc5d6bbe6e6f2627d9545dcbebfb9d09b0a600b1cdb0d93af3be267f8450f98b3ebbea33cfeb11fc78a9abf56b663cb9b2af330d0b8e091c046cf38b3fd5e2fab275d018598404e4b323cd277003fc2a143ac80be70385ab8338f0c7fdc8d0a2ff5fd430b3eaa0a6d40bbe3a7713ec2c7427514cacae605badbaa1fe277cd3602ae7a2a30e62608eae4b6cafca71bd5ce8efe73b1833ed94a82f6b78b991808b4f9095cfc19f42295c6ae81914f8113514a991b98130a2d60516d6648354a883bcc1e40819bdec3f021488a213a3403f275a583482c6feaa6db14434578fba842a02e247c2857ecfab3fc3a2d3b541726232ce0b4ea07c20154bf06a946aedb6ad31b54121c4bc801684aff3276667a477cc0d524b661426bf628cf3c85ede23db7c01e1e1539daf4133957bad8aa5b74af0aa0054791d54fddafc8c909fc50b910dde910be79eff2f383c45fc565310b3e8a3e979a4a5582621753f04e0480b67d205f9658334e5b883273bae7872b28ed5c8e767ace16f3e97126054ca56a78008076c00713b38be72504a421667d5b521b3501194dab24a2570da61d434514ccd667e3b11155bdc25868a821a2000645f90fd86b69e2aa4a1f67e18f379879bfc05699da807359a3b5f5d780b133c9284e54f4b78e7af5f25e16760b45af3d902a8145e46c9f60b6ec86dc67086518842d8605b2c5d1638d6cb2cc018e5613c2f7555c35b37503cb868f5c3fc5fa8dfa79bcdd994b2353984a179997e18d3e99cd71c65ac0f8ba0052c26e2f7b6a1ce1994cda7a4e0065d4ee31da0ce8e753a4773b38516cc0b5be3ddd2d914941484613c56d6c4c6cbaa5a63d3769dc43e829ec29c0196365ce758fbaffff98fff7ef878606cdcd3509ba9400d27d45494f0413953a33c1ada419ed47b39bd93e65320762b63851ac6d3e2935750d1dfb7ae2bf9e0e714475c73631541c04bf2baa141723b318805f4cc0ad906c54d16a475180b4b02dae60c8b9adb2e675c2abe579d8613b2b211f11a1bafb85bc2271f1a7e04a1bc26aa14e5b2bc90a157bb66d1c7e12208a90e187131e0c6f00f7a5e630204c3468c9f51fe04536ad16d47e45257f30173ec088c0cc78acc63b8bb04f829f5eafde855d49a34505dd9da95d42a6de1be395651708e51a72fc40a9de8bf151be963b0847fd777b3c5d4268a20988702215c1b163d358fbb1c147f4814b5e85a236b13aa7f03bbc199302e635052c8d11f7245e7b9a57d2c458bc16bcae84f817080a608aefc4267041cde4c1f58896b882d04b81ba743a4f9fe708276441e062fbdbe1fa8201cf7ecf49b11f1716c906d409bc6dfe6afa65b838d36c59eb5968642b086fc31852024c10defe83990bb79dbc08b0c852454e4de36ec779ac478c881105a48105bd7fe9b026cd7c2a9ba91c220a46b1d37c631accfeeaff39edce82c9563d389810828df9e293acbc93b2f604da27717aec0d10be813888992a0ca47444409d43447c502e32486b1dee3e18022ad72e9070eab6ebb2aa36d72fccd54f4082a63916096d31d3906baec370c039aebde2fdadd0e233cbd3a666fb2b898caad835d51897a5f5710928e87375083900a7adf58e4a9a2680ba36a715a045d19d1c127766af88a239855354b5e33dab167f3b5342dc3f4aa0c3bfbf0cf14bd6dea2c0b150a89539ac98908a86e19679f8006388ee209bc4a05fe7ee73d1503258f8076e05b257c9b100c3c54ae90e6338351a2e8472e9bf5fda3aa960f93cbb8d3f8a4b9613f0af3cb96c4fc581539e41fedce5849e05d068ddef947887b83ed5c7cfbd949aa27433dc24fc3c85802efc95fd0a89106ab8ebcc222bc4b69c605ff3adc33bf61d015b2b2277d383b112f8e65bb7621c1f69d635e41c60b5716fca4ce89a130f7e046f871a8d1013a81d8465e3fc681ae37472f27d772f990640617249aca6ce664c25817ecb954149dd3d5432948521af83dfa6afbb27c49260b462d7022777603050238ca82a49a06dacd88b8074fcc32ef99c4944c2a9330950583284194cd0c6f51bd9982e9a6ec721c0ccab5cb68539688e98fb53289c37cdfb113cc7085b815d0c57ad2313a26b408beb8d0513dfc551d7e755d0d28df9738aa1ea73d460c1093f495e0277180caf114ebc6a7babc7f99aac759aef8162d7266456080fd564a5e6d47d6b0fb50b4c4fc158945030e639d671f91987db3e82b29bfe01d0368ad0a6f428f00994fdc076a16c8b7171abbaf4487c11059f7304e7c14cc08b5c7a343219dffb4982057faed4692e2d6d47d361a7839dae39cdbf1c2cc39ac9b872b5a25547f31070ada7682da6c32bd51a20ca63abf2df7ab377271dbe9deb08892f4d005b460b06dde4852bd7292eaf333e6d76f625a4656b41b532d5e7a5ef2dfca23a44367a062127d2484c2ae1de4664515dfce19b2b2d7bd1205c9687c9742a661d7ddcfdd0d82c5dc040bb6b031240e6c98054ab9b3b273cc9e9b87594ef72afd8f7e84031621f7feb85f06a63b2b97cb27f008c9d779ef3dfb5b3c9a386973b978556f30132315d91bfd0e639785b15073263187dba578abb0d67f7a21636a48c16f416c80125973b02a890ac3f02c0cba37bd86c347495aefe733f1e7321ddb59624cd71db080b05badd55a0c3d2da040c0e240a7cb77ef888595d5b91f3cb5c0b7b66eb7fc024cb820d510ec4f70ce39c5a8d6295c9c452dcc9d7baca651bfb8b24f3b4bdcedc3c6aedaacd0cb9224ce41e4c52b0ad93db45205f4368c715dea2658a902a9df386d2c7285c3c9847158426ea47fffa599478bdd2286c027de72aa7ccb12ba4a9c8c16a298ffbc554a099a935925bc5f1e70405c254ac9fdfab052ed4f03803fa1a05b42614e68958a5d2974da6fa585b870850fbc13d0c7536df4a7cd4421e56ebddbb6d71c65f9af5b97a867ab4df5155c3ebf818ff16ee1cf841b0e02dfd42d4d1c9f21ce5a2176311f61382d0a0aae3a151451272e63d854b2b8490a6d7066a1243a291b286556e3371670f501c1e3fcd10b46e582d8fb3d084533facabd0a36858d1eb5ddf6c6430fac12dd3ec8b8291b772a5d3502decd023c4cb25aeaaf300f280e219bae229c58d8cfdca4c4eac01a7d74a39f0b19c620e1bf3618cac09a164d686fde8317aace4fda536bd94c29b8425d6b2f987492d1c4d619d8113e2c9a9459f28a6cc0f82804443588a91289ec60fd1c6f32221980fa3e6ed1c8cb889ff3e2cf10ed6f54564d645347b82c20ef9aec6f01faffccbb1718ce8d82a49e70bd15014f9b5c0c31013cae0078fdfd6b91fae374ee6fb6ac169e47327c03f894af7582a46e8073aa20324109dfaa46ee05147c47c55e3006381d08752f5ad080271e0d3b46ff869eca0b51f41d9f83ff3ee165aa19b220aac27fad87b45dd3005846d88630671a701f880d25497be3a703ac24dc3448fc538b3b2bad86b74d9a73f075919e9142d5384deb6961385a7db34f0389dbf9805af6fc050c824332c9d8b744b82a73529ade8e65542eb72d18a7afd1aa9865db28a059cecfd1cdc30d3ba858125e864d4eecacda1ad3702de5b523d7cfe50580953aefc2e024bcb9e95518681c1172d07f1241170a187024dcc204f163a08539b4472c2c23d8d16058405c44fc5cc02d505917a4a89f503843b83b74d8743ff67e6094216d2f00f15bb624d12d8f9ab6b1746cd30bf33928c35c661061575f7d566cf6fec2f002f4ad24840619974058ba573eeabe04832641e9195c22f3a16788a640063482495d29d1f40533f198ea3edd0fc54a94916314912e7e0b7c86e9064e04df23bb3dc90767ccbf3341504f26f47c58d09b190b22d2d53888ca84a81cbf0b521bcc51e80d2a51e1a0e737896e863b58a9396a2bb2506b71cc45a18785422c69a11a7f61980ff4d5e70cd20bbd434c1edc50578fc75423cb3c2c440bd1fb8a6f1cc7c8789fd11d3e708d4d8fb19724a849dd821a26c1c1254d288a460b478692d2a5d07842adaa785014d10e9fc915d3cbbd311fdb5a89857b853ab5e225c3ea1ca776597d806c27ac7a85466c95eb769d14a00f3cb8f27f82462381d72adde03a8301a79694571ddc39bb18e231d4a0805308c09b9a6cf96602342f09574114a0fe04b88afeae3a184c1b4c0a6b6065d3c97a26404198fc4055acd9f8e1a51029c6fa1867ee61ac7a4df798688d8b08e7f96d8435d2ba8670a728303b0dff8b0cfdd735ead2db01b3d23080e03db3c0865d850cf9d9ea286806dccee1780f6120f41f94b2423160cea584b8631824b7807860a11bbbf37a55d46b9262d0c3e1869d1835babb836ea54ff2e348368c8e1e7e9f191cf52e7a29fb7552f1c4317a839ea09bf9795fde8ddc6dff60cb2e29e82e4ac08ab6bdc8cd0ad808d00fbf7d1b372db1acd26a9d3552c23a12ffe4350fd6851a2b7e4361d1baec5ba486c10a3c4edd14b9c900cc51856436077d38bce2c754a72d84456b43da286f43ddf01cba851d73d86c6e031bed6bccaf0a31d56a1ea31991cedb3cdc6b6e1241250ae23222d6f27df6bba285eb0870075b4096fff32dbb08e4cd5b75d31df1810691031d22073a237a0506153f06c89c10a371f87d199f9c44187f7a4325936cce5fe8882edd3d378f881464e015baa4c44d7483fec12d40bc5f2a4137b0116b9a08b9af021b8e157bda5f69a3ff819b5618fe9f326a49e8bb3c0bf0ea7c3b76f4bff11482b3c7f64b24c2f356430f9a67f8ca23090e13ea92148d138ecff333dc65e2c3f137b9781ae078f4280609e098011c0513f394695c91c903db6114e6c2b9f5356f833569e07ae9bc0a6b3e098c80f1863b8ac2828e6d413d9115dea4e5b05d212d440d5daa74d212d039e51ebcf28e2cd32d0679024e78256cff88c103c4cf76d2ecbe9894afbb7baf368d43a4239f50e5b3ba886cda00a1f6fb900a8bba754986d5baa15542af72058393dcc22220813d40ba04095d68f442a2290fa81eb6f3da0eb677fe7df0dfcfd8224808433aae0463bdc9afca35ccc02e0d8d173048364393acf2e832ae38181946fb438167cb3b9b5f1df505e30718f2f9186a9f95eb25bc278f2725d6193d814e585f39d17eefacdc51a0908c71159de3963b8df749a20f5cbed59fda854d8ecdd05a7644d5c041e152036acaf8b2e956e7adf188834538bf877d9172586fd3e55d0f2aa0a95f220582a37709e2468bdc8910bdd02076a1417ca183e842e3c823bf62f57292f22a65ff46de0883f1a9521be122b5a9d6b928cc36c749ae11b7c9d08a17710aef13e5e19f89427cdfa209d46569122b0432f6abe002c6a235510ffc997f5cbdf27f571aa09e03d3dbc13af45ccd691fca30e29f846c5a91121da49d23dc7b863139cee3bf14c18abf22373f03f49a354d8a8ae413b7d28641b7edf70d122e7aca92a9addd5ca7d8e50a57b219b06e834e960516797517d2f5a4e4cb94d0c5e347c246e5a1e3e5009ac0177890e2cab7ae603a540bd35b0056401a4255b4e5f55b7b53b4caf65f6577abdcb410c7db56544b2b47188eb3c2b3fe3173f3580a92bd44112f5c51d782d27ff4649fede136e1222be6b30651cb29877ebf7ccd3c989cd3023b53accd7143e461f6bd23aa4e7059981c2d73f9946f386b1a378407184b9544332374b7ee4e8c158d57130561ab02ae2e38fcc53503096de6d41bd1dbb1a69945ff784368ce3e3ed2497e586c149e9b9229404cc8753d1e58f2fd82798669294dcab2383563159708027fb23919b0f464ff8af380d4cc6e0acabb60a4c9018433819a242ec0098ef1fd15b8aa058c71c3ec9a87e1c77ae7debbaa04d598c14330c201b9a1c914a53a93c7f7ef334a9d105564bff88e92c55d4d4397a73542a048edd63e344d87d77f4be32f084e5580741be210a0b2f96658d855bc3a0027d03e0b2583db4f115dd63b002fefe6aca590a56b9cf12d47e15de9022170e79e7770280d48b3029b91bae09f0bae8d6b2c545e30275809f836da63e23e3990b08e385a4bf2acb3aeccb61ed3883e60000108ca30cb874e62843dc45b5fafa87e0ba2898d7d5a311013e32da0678faa296246b1b5adf2385165e8e1fb980dfd0bc77cb8692adbb3532d733464dc6274fa74a27a32d71c884046f634c83d3342b6de55db3dd0636059100c8f69b8a643d7e1393e245bdd577039bad09e7bfb401944264b8c6b4d800de9a263b227b6525dcc72a1736198aa97d10b0a2609833f81a81d7d6f9375c9cbb0ef0cba72b2eb2d7a57632c0312800f6560c7815898fd267d742b88fb99d92ee4c216d6de32161bc5e5726e18408080e910731d1310610aa39b6ab5c4886760f680854addbbd6f355110a2e36af65c00f38310f287baec7367d7c350378fd9e180780bc0a0e1fb854c329596006d2a2feb3065910bf6551ec1a8fa7edf5baaa17d75d48751d4508842858b028388e2fde892247c8c44405c49cc63df68da40a3cf9f09369aa205a50aa16a05c8526dd3426687fd412387616cf8ac28c52558d2995abddef1d6a1c39ba7ac8ac02b35c358de50ed577989b93b23206e9a67e3a6d0327b30bee984ac59db889f1419f0f0d74501220bd2c74b84c3f401f4116a89f6d2048594ff799442362d7c6e3d4b7e1bca67bf9015df72e6bf42bb6acbd40313710e250150ba8c30994d46f1a4ec8bb32582d7c9579d2b4d16b1bf82b7b1569b9f740195f3ff4a6d3c25cd603a4f58b49eed1b601be6534057a4f67c6b30ae69ab27830e4520358dd5d407209bcad2b05b458ff15950d4c77579bb66de417bed132626d5a5ee6d21f7808f72627e6b7a5d21464a892e855a1717fcb3ff0577dc0f9cd153a20420a41a4b059f37ae4511653fb96ba4bce923f415b7c1b7e86478b44dd3371526a030f4a3da04371533afbde2bb54cd62fcea8bcfac166f66fb7f6962843701241d98b7a3d6eceda24302b845212438bc6a0ae38406888d5b517f2383e081fcee6e3d2810a4017db0fb552258fe9add40636361cc70ed6ad1968df363860c0fa9f2eac6afec27382fce24945e2907cef2134bcdb0a4d69491b29debb0dd6792efd75aae9177221b93c9e66f1014cf33b6c3aab613ed8123e697da1a2af185ef8eba65fce4a727073bdc960516d6e7bece60cd72993f9f850e05c59084007a30de00c096468d2349b6ef4c2bd5838cbacd8ca0fa40c67de07112c0ebb2c73ce5c8371c279eb5f5cef0a6a0d91fe80c31ea15fc6aa75bae0997451c676faff80b3d8833299601b437ec828b633f03133d40d560550f1cf01835db470ae3596f12b3ecaa46583f3b223aebad5b112974c1480f9d510a55b295e668a11848907bd4a7f4b7b3dc3118b2082a372050cd60698fb5bfee5800fe5a4a37604d2bfb103da5a21bb8fb7e63f39e26e51aa1248bde10ab6d24a39035fd3f1cad8f181d68b772f491a2675d90b95c72b283cca9aea72b5ceeb14e3ea1ade21280330cc79a65e4a9486e72c7eba18676fff9053ae1be2434e1ee0e16754490b367773f05d126043bc0c8eac9602c7c7b2a40a6f6d7af717f357ffa41990d14e33a1c6b7c2abbf902f886393aa0508abdf080a161b50bc4a03aa9a29f2d60c73a402125ec35ae8ba7971ae50be3e7b6c0b2a52c1172c7bc9bd676fe1c7ec5586879cf36b9dea17e0efeadc7345a3296841185283ddb8ffa74909abcaf0dc3c5c157c2b18346561e5e3435a7c8116dd83c04a6aed286b15eb91c3f9adac50fdd7bc9d6363645978045938a3075c43b5abdf0c8c07e390b033751f895de9fa55b42780a7ae990041a37ec0ff921728ce36e39567138163a79a3dc1c1d09a8a2d057af33164e5835e74668f823ee8a6625421969fa14cecddcd9087f8c62155cdc1c4de4018207e8103e1abbf7c7688528a22860b3cc60eb1860be7ae721315281512b87eceaa7caaddf1342a2f4424e0e786e2438491d303842ee143c6022ee7ddeb22c24f74026b65ca5a9c30a421ad1aa89ad55017f46bc5470b671ef76bfb61121f4d24a6a4e06e41992b15e9400e4839ea1d111ffb0b5948aeb0211273d3a1634d8238c201e80d8d4d11356c9355474330661baf001609df55bc492ca010126004b40da82580258b3973550a0530e9a6e3d5094715f7e3cca452d0c9399e0e1c8dcd96ce5fda3473deaf09520366f3256ca7eb754463c734e6851ff616ce589774fb7958d9376a9a4224dc590cafa36a9eb8280940b85e242973a34251f2f26f1f8dad48be6a5113f5ea995a2cf9944263cdf804c38735f3368d9b1af4bc0846eb4e1bcb0159424363f6e7ed646166aac9e513836d5ead79748019cdc2090489f7b5e02ab48a1fb18ea589db1958c865d7cd91506a0336c6af844751a0516d5f77ecaab0cf06252c500e4885a21393b5dd8fa98f0f44bea6b02b7a7ef83b47e63ad1ce466d9000dfe2be8b5bbf99e115658f59ca7878a723112d28578e5e3ee87a4cedfc21b0e9af00ff381889cf8b6e560aa43cb10a0481b4611986b47997133a9ea126fe4dea841ad5103082fb80ae806224d7906c78956f05f5c3198da1b2b87ce128a0f7bd69bf425f889821df71144e5c2d6a20f0790e09b1aaf2933131f07a730373dc427ca502e14588533aa36a9607178491fe9b7a037d8241dc80ba10e3987a155731b29b3c6d4338378f0b624f2df794e4e492c79ec468dd1bd876bebe3f428967129bd9cecc1ae197093c0e6b83dc0a90a8d1ccda442dd25dbd48eeac0e506d05ebc591ff64ed7e1c6f2d8e85d18eb1d857c0278a28e10ecad9caa8344067ce837a81e20271407140716071896b8e925473260a3413892af6e52f8a40fa0a56572ac78df6bc0136a4e0e7059c9f65b65966cc66c64024f6d48899c5ad08386552ec47370161371b20a41898754ea229a26800a16239720f697531db8324b076b0f6039c8253c0e7e67d15e6cc612d8499aeed3df501bae84cf2d61752090b96ad336a831e754ccbc38bfc6aa0599d84dd3ced6b7e84eb36633680d586dd08e7ae383dc444ac1931c8d59d545be47fe26dd7b378b65fc82f92766c7eca07eac0b60289436c58f69df0853eaffc9db852df86b476f81b9038352471257216e219f87e817a41e44abb9572d1fe62c810d12c49f000945b2e15861b1441e1340403cacae5a657eed9568f57eeabceabeeadb80dbb77a9192fd75aa5f7a9210c3910ef2a5c6b6da52a90bffe6118549e422ed85f2b1861baac5e2587fec41f006283533fc793930f8d9146c82a8efc4c7a9ecab376d3a3888b5e5f86eaf25a89573070941e9b3fdb7a2760e470a5789cf23a63752a8c88a2565636d1f3ba9560e9ad42159080ef127bb877dff759e7b13e642a4ff3641202f43d2037ee47de127cf3c91120efad97c975e7ccbe21b3c8ff36fb4d9d86a967091e138382774af7588905549eac5ba341c9826bdd55ebb9838e6836d59da83a663448cb43cead794f51a765aab8ca181d3c40332a092a267ac03480ce86dfe4a40599081bcdf46d65d315a3b5daeb33ae0afe6695eacc65caa46cfe643961b3f39f9308faf6637f99d73bcb682402cfbd87d04333d27532ca6369b35fd22ba48708787bceddc1aae42de46d1b837024ab12a183e9a84bfde498f825a9a48b2301668f1d3c419d6ff31234add9d4f4c25d2af17df00fbb9f96b87d14619c48b885acda6b2f6aefc4754c7a32d0410eab6be7b688caed3be076302087a36703ecb32f83048b1dbab82e90630de7565b63ca14a00b615c655c315db15d35aec84520f15a03c98c2f808c4dc8a115364c642ff789071fdc70c30f3f9ceaba98c1c710c46df0c87c33ccc5c6676e0666b41dd7381add67814ddd5d64beb60d0bafdc422da53ab440a826225e2c907d653000d7383e507f29731328cdae8f2b84bc1c7d0dd163d21b88d08406ced291805c0f2e59ad836d57e63f7941649e053630acb5a047088f7714a6417adfa3c88bb63a6edd28f6ba90554b89cbc9bc54ef3b3b740ecc3d868ca88c8eba5816982b1a1e1bd754a098633b2d7a6c346e485d9a22aa014157f022be2fe0b3bbdedeeefbde8eee0f0365d4adb653c5bba357d4c547f180596ebd72f292f3484730a74df7bd25a20f06dbd8980a69b2959de2a71c96cf3b294ef098b6c4845a0d6fdce6ee3f344b444256b254c2a5771cc534d9b11b3810b9ea6885b7690381c6bfdfea4e2b8d2010c3be08e2a59c4114e271764a8ad54b0d9d671a48b439aefbbd4b2d44706c933b81b56acf770953fedb8f82756e4637066c171e3bd178d9d3afd89c2be69140a2126db0813cc6e8f8cb7c7a090e1b77028ee348a4e395071d5df4dbb57b4be88db260279709920cce53fdd8d6d634035b4480ac4964aa2176b2689ef582fe34ece44600576d424625751c892365d9f8b5771f371c50024bd3d2d425bec6972ffeaf7ab23291cc10600694c81753e768ff7d9162c48b18114143e94b8db65406c990e18b78abd873351798001c4c138753b14fecb9ecf59e11ed52d3ea7216561231ae6a11462cbf860178a4dc5884554d9883bf1d0027de81865bb416f0353209c2cf0a29128c4aa9b565c5cf8fdfdf6b70f9f6df8893210ebed1b3ae0af18b1eba35b734581d0dddb2a19e90184bd44542cbeaeb3201a518b3ef550ce2c8424f721eebca99b5a30b1d8932dacdee1892b5f9de88d1dc74a29975c1687f0799687fe1985665ba4f7ec531806a2809cfbf07643c6b319a4d9919cc7a5911491c637c009c61c34219b635e461c03ec6e79c595858d1359121161ff8eae041d7c79a7f42446617c8770f27acfab51f648f1a806ca21399f74273eeb1a3e3f8d92f70bee72a99777709c47bc991e9f2c84f66338d2be48c74820c0d5c44fd2f181d54432b6622c8229ff6dd8329ca0078f67b22f3e38cb44bd14afcc52bf51951f018b321117bd7c7c250e23a4966cf3517db1571af8063180d22219c0828869f905a1c40806fd71fb6b082598165d8ef9e10cc355d891a9ea6617980b6558d740fee9b5159da9f5a23c42b80e15ff70c282bb2c369d97477db4b8f5c3e90bd0b4958e22156b691c482890717b5bb850ca0da7073f192cf5bb80ffe55c0a8d1dd0ed0f0f3ec660a3c646c77649e969598ec9932d1a1f49db3dd890cb785cdd80994f5b64d8ac34e3aac83fbfa8ec63296dbdaf8649a7cb9f7bfa74526a09412d9e63605aef29f9e6664bb42ecbf2caac30eb1aba77b153084b997103366e85700a3aa7e0268a2b70fcd5dd59991e70a8f72e24d7c275bbc8d5b98546a0e41bc1381a8a5d05ca49fed2093ff66a7aa48c25a662a8c971c1fa616cd594f6180d273d74315925752ec9971a62835c23b0dc891fa3b4c0571d1360d50e89d9503b96d1a5ceb4b64d2edc4499a77b51110044bbd71c96b6423b66d725a7640bbf7228df5d1970bb5d3e8cf2b051976fa19b3698e068cda0d594419ed69e60243ee63197f88172fd42d228e3a23850103f5240ab424642c8198fb588ff270ef49f3e47e4e92b77f48632efbc60777d92e509bc2ccf43edaeef1107d62d50120bb054a217ff82d0d875ada6bfc79beb1d7f080af9626914121db8dc47bcb805f07d3aba6c513573cf116e62e7c9a3628358aeb2695abe9c50d79499935c48be3edb014c0790d31132341de18c5b82e2c4a86f4c476a5d772da8b3edeba8c7b5bd3d6208de6862bb6e21679eeff4f1f6e9180d6d1aaf57e67e3035e255ad3ac4fc3d3b8f78f3691ea8acda2595444b7be05d952cba68bdcf00a7a6dd757a80ae949ce008c15d2393500e9e17791e9e6ad5e49cbae4dd6aa5962b85a827cd0965032ff134dcfef642f3c730b49373eb40561b8b8c7ea1180f0c89c9aadf0fc3859d31c7a167c353f7fb51854eae1263ccf4cb92014525b11ab8425078799bdd248e2f3c23b29e01d40593da400eee810e9426ed019c02ec9d000bca3fd6f0fd1495a3d46b29106adedb92d3ed07abae1257937feb4aa153aec89847870433ddb5e64d731d8a11f0feb7960b9661a08e9bcde2a20d11014af3c340d4473433e1eb6b6b150c8f593d2d7edebf06ca9f49aa3ccfef7bcba1dad3969214a7dec433a94f1bb141b017080a2da0e5394553507e6d69df0b896a83e7bae97f573d3925cbb4ab17236c17f746ed87093f2e538a53638055ce9509febe17c656e8b46b2cee89a41d85076b0c5f440407a62ed9c01c175ead6ba9b61682d267efad885997443a923805b6bd28cef25b010d93d2b8175c1de85b73ae33f843cb0c5a6e261cae2bf7f70a6a2931fa0d8a970cbd2cfa427c63c865285a973c5c5e37500851bda3c6c6284e78fc859a521af42c7e23f9243b62424dfde9ae3811bc29165d9febb3848d2d7a808fdb1bd157dd0ba051a3878107c9153d28f67517b81beedae07eeb81e920258fc500d35138a7230e56565d716bd61dd390fd57d97a1e81791f22f8ef9c0dc3f5a065b7270fe231a9999867770d22b6181bc8f44aa0484d499a4c795d6b485dec2c48f9d13f56e9979efb46c7142f8446a0b7a537399050e296a60a7d3205abf78d1591ebea2988f4e438c67faba2eefa8e71510d283458b0cfa5f653169442eecc3a9202587388252b0f281e064ff08110ff5d84e225f974e500574b049475ab2b3892d6c2246f2587ab7ba849d4d2e22280ff9fa85b797f298453043ab90304bbc163cc7fc65a1e96c6833c272da32b7a2e42c2815bdd6a930ab34def3bb4193db7645d0cfcdff12b63baaf36e6e4caa551eabc564a2c67ceca7cd9f107943f8e2f39687a007bdf9aab8d60c5f8efef8a671835747488199e9287000236363919ac9aaf579f874620ac3d17062d15f1550177f1c2bc80759ea2aa30eccfa97b04022c7f0fd9f6a81649bcd22e173369259c3396769a891b52399448aa8c535a8da78058231e928fc2334e7f30d1629065f8ab90951e8eb3fcb2c9656117990ba63196b3c2acf1f591768287960aa3899d7cd6b1e335a1ce18062609fe106ef59022bb143cae9db94416afda891508c523c88b774c73dd5b4b6a0a0bb0b9d4a608676f06ad674bb3471bcd37983c8d5886200827013c9f5ff61f290998f57394e9a743aa8fd7e34238823470415a5cacc71e390c7f38e5f223307c5ef9e6e71412a96070d9d853d4475e1fa17585e76a30a7f55e3855dd5f4134accd6bc5ec4ca4e4491afc43d5eb733e378371fb90b09c3027e8c4bbb169f904b9c77e0e636449942fa64687205479aee5d6496c17826278c3cf411521cfa97fb1f4fa6f010bc891e05204b8734e1fbedf17bdb9160a0db4f14771c22a15ba46026ba790179aaaabe321c95027a15098b40d6f3e940f241429441210e6559095fb7e25a38fd9784ae7b2486dc42f200b002cabc57b2375d13165a675bc8eb3ace6e18219a1c601dea89d1e2b317820d6f68e3a734db711225308bb831186299138b484ed060ada2e4ecd5ca2683141a8bf0d74e417ac49ae65533001f08fd6ea2a4d55015f29a02050340bc82c8b506098c55c67be2e5a468d3a18fc3957e5de01816c9cabbf61efc7ebfb8ae2035a08206f3e6d7611d8915de8a97e90619bdf79c9f88757b465244cf406c9173f34094a7891669a993f92e775697bce0e48ab0cb1b9f713c00b6f248d70c962f6c1013d70f9cef52612b59b4959b158dbab8987d34e626cab08ab0913bdbb14898292b0efc6674fe83a87d5b31a5325264675944df901d9184217ce2c58b84318fe55dbfa4949ea03e5af844e1a81707b4e512d5280cfce802d067798ceda8d5a010516f8c00e4aa51c171de8172d6696cbf31e88a4101b636929f805ee5c951a4453e654df8cc35c197d96d43d184bf512a340d8e6e320a48beb9e63626d48b1b5179ee87adc96e218e763aa8191021c0ae454a24ca3898436e6e133b1d4e35126fdd5f0c45255821bef491d4316515ac91e7ba1fe6b06315dcd9e67e270d20f98cfbadda4cc02b1d8b0152a8e1c1dae72d08fd0645802c9abf810260570a8d1a4c99d585dbe14c006c5c0850e166e411032ffc6f42307980e92581ad12e0a6c3f5daa6a33a546e4a9aea252e61d3118d6b3a50031bd89100af957e07a9adbb70fcfd25a1fcec68759146b80b782f61d391b48de133013ca4386b5187ccbcd50e9660307dbc71fa4e0c04256f448b5f1522dacc82221051a60be88be37a1345ae8315c5d7a51de78bfd49deb1e02f305f1607f70fa6cdf559888ad59b26e38420967d5ec734fab1c6fd94ce2103dec46236201910a210092aa448e5bac2cd441e5dd21281055c1b36e641dadfe0223ef9a1ba8209592d25e8f477540b266ac1a2277e606e39a7611420af7b863de9e86b270c38fc570c93011684d713133b1b5693fbd002a4ea15f2b0194b48d199517522b491162b8ce2849600efa0b68512b24e201349e41bac55ac139ba8a0cb62df8015e1a4ab93e7b7778520cfd970c76e55c20ccb212cec8bc30c4fc5fdc4d1823a67a019dd2bec28465925fa87fa8bd7e86b7c1182fc1d4f74c1715eb3c21bd1b0fabfa1c950729c8aa1ff79902d3f79de3b6cc7fc84a41d4d9218888150b4348c31d1636ca666990d544031dfc7f7797c3fe64ba49e0b69eff113a22af29304553a0634f98c0593294bae1241c8085d0b469ae656ad8488d61cbdd5c054ef102f03ba4bc067f0fae9ffc073ddd4a0a2a5a7d75c5324b240b6afd91ae3bbdb14bcbcbab54e273206e6532008eba7e74c9e887cfdee65bde787e26746d13d8a10e268cc4f88e5db4a608d05e006b7a0059c4426c52e647c78b33fb0b69dff1c7f18a95422d0e718649c9afe51e8e9a02ca139a09d62bb8fd0711a7de5ba4fcb10301b792dc89f7d1c42dee2b7ca184eac4d714f2fe4f2973ecc39f58273f5223bd269bdb8ade1b9625927fce2d46f51081697aa1b35290a15ec395d6bebc6c9b181021d8cc3aabc624479d4273fe1ef5e32fc0b1a9bc4c402cd010079763c29a1847499731d8edbcdafae76dbdf7f203d1f25a50b3f2e544c976c61dc6675935aa3c54371c47bdd4352a51e5d29b0bdefe2a19d4ad4c86461d16a59acc4fafb270a870a7c3a13a80c307cb662de08550aa0865e523b30d244abfd251aa932666c08caa221682c14baba5b599b51f6c3a97a675e8d9741e9babfb798368ad34c695afca9d5e832593fd726ce0bb29d7847c1b1f5c524adb74e5ac3289e4ac8475ef078ba37ad6e8e314f7e5f334a9514bdbc099624245290647432d8acc4f677434057f3de932c3c705a1aa81ea8b6d198cef7fa2f337a3be8c390704c6bfeb349e3f56f79c2ec2358ef857d21c0a5ce0c64b439c1be50e0516326725a4e622f1470d4338b2c6da7b13742c9707e5401517c696e594d69ad57768600af5ab392d3f6243b4380579d19c9b478ca8ea1e0aa66b6e45a3d65c70f95c06b382cea99b43ce7ef5e9b339351356ddea13f060f8516d55c21fa5668196b0ec90d24792b16c1426555c065416454c2cb33a655b3462638d4482380059577311bb70a1356c3991005996f9dac2813f7f4fab2f801da4cc4458a169d89484a7ad781d9b31991ace4769541cb81f5850d8c1d4a17b7c5daa6e84054e384268417cdcc1af5d4f9041a30dd0d3882e8654222cd4952ab7060bbd05b50f4f5a55e252b2e94f5c05669e3183bed8ab9c19971d01c28728733a7d783ec625e5783ef0b7982a78f1ffff4820f74a32ef69c3501d00f868babb1533fdaa14d765f76c7e1c7549449e1962da9960e906325778668dc7b672b8d4d4e081d16b558d9b4a79e180e56d13ebbfdb58c3d3a8334ac413db73184adf6ccda62296b51c9e1d2241c9da5a29784e533982b19a9ee65ae2bed053bf9266a0491642d2a9b3572de2617d78868cfe6326fdfd2524884bb9b27dd5bd821360e48cdd4c6610535d6c21132ba70238aa838ba6701e17602e29062aa61f22066fbdfe5a1a18c4ac459b74aee15fea060557e529215844216562664813bbc85da88f39621447cb6617b1fde2346c00fb070a20f6a3344481600f9b2a79a0b4b0c3f00dea203167cfef8c99fb722c10514513326371575c22dd6c89a702fcc3eaf989e8a206844881ed7624603d38e3ddeb01c5fd8d6c00b3454d4c5c2b4f84c892dd3050a1bdc790ed699270b4c3eb9b5dd006b66d47842cf9dd12d914794d5d6e244ee86ae85d24911e70f9a03d31bd5284f45ead205dc9d3da02ff3f81d94f8226d781b381e45fc65398fa86a7f62cb541e84652d55779345ee60832d557da08c44b35d0596c34056560a272556c4724858b75fc38e8b7b38f73f194c26acc287e7ac1eec444c56ef7b44072212703ef63c810c5ebe4d81b27913994533730c31233b8a2cad14532501ceab812cb05d0d1dbf60c5a080702e025eebb869f5d6c66198cbb9fd24e4c61bce9823f4333245bef4cbf47e6502fe7a9abf3dd3e9517aaca93637f89e539b3eb6948965a19996942c6e310494f1c237e8d8177942071b0004957e05def02df972c3f9f2a613579775fe1fcd7a3b5344ea0dd2443dd7dd51b8f6827eca0fe42c329158e7f5b2b20fdc2923b1b480d54e98277a01a964d0b0013bef425a1c908664ea412aae3844a31ba24d34c38fde1dd4b05615b5faba1fd643057f69e5469e300cfffe08dfc8f71342dec1fa7ec78e7a258fa727dbbd7670de836ca4c106f3c7e894450f54f692228d1a751da7040570e7b7ba70c6a4def4e38fa0153b1d8dc9b19928a429a30107913625cbdc25391de954af89911e944d3fa909c973ae996e72d84d8a58c15858dc65075abf682783386e3a052304f2014e36f21334378703da241696d6143fddd4ea0238d34dcf4b2389ab71319860ae179b4e4a48137eaab9215343ddae2e7d717162734cf03ea175bb9321a1be67b7194fe51910a5eade82b982330622468b1dfe7d6df5506238bdbb2285a4a76cf5c4f1cdc54f4a8c4e839a23ce7b8e899b9a36e09f6d0d4e3a39d06c2fb118636f216bb4b397c02e9be1d815de7ec44411678d40af331432f1ea313061b9c5ebf0a4697b62e60e48954e028aa1ca6df44f3521bcc516f1ebb702183dcada6a2189f22c24072981cb91e2b7488da81a3aa75f279ef825e2a859c0089414d1c26f9cbb20da3111c789382a96370a1505b4f007f72e71a4141f2fa21833b49a1eb46db4b355f987d5f0a0885498824ef74645f7ce0d79d143f0d5840f3ab96cc411a38ecc258c4aa5500d7cb5e1b36e2e1875c488638747e78d3245d1568677c59b445a8c4a32e29e3793e7e76e9fd2e58f842ae7285a06aa8eb509fdaf870b181c7237c4b7d6917dc0bfecf52191c19f05ad5921044266f0d1459ba0ad30dcae57daba7e1305f4a94556ff4d68a52488f4421be9069471bdc941c300a36e0132aea76cf68ea3a64fc0185dbad727a585bfc18f5504018f6c28ee4afb0a4856b5bee75ca9a9973a4d63550cbb37f92bf4b11e009a0d6017aa0853bb616cbda4b18b6f91df06ff220380827a8cb26a334a3749780a7cb80037c425ccf53cb701d2099375718c24f9be4e3d0ce4ac178ad530310af49567d63a15b403c7e2ac3b3c87f2fb3df7963487306e0f3e1677b2e631e90fe7556f89cbdaedfecc811fa0e4deaa69181c8de4d9d90555edc79cdaa356fb919b7400aaaf2e73f0b5ca899c5b22f537912dee9555a4a6002b106d0427cf1736a38329d7d804960204d391dd189697c0855b60918e4a10ec965defed97ab330c433f1cf01fe4475228274b579a0670f5d4b68a38646df0b024ef8867f4e21441e93e8e1404c0d93acd6aa05ccbe7582b4fb1faac6f60768d981bc03ab0fd0651abe543813e8353c123eaacacd03005e68fd992c9de8c89950f130e057896febb8a9bfd84e5a6205deecdfeaa3a2a74558285981db1113887c350475d08105f2acf6f6c5031cbd2c9d64450750c007006ea5a1b7abbde246aed05d3e987ebeecc6aad34b24d4dedca574f2187c35f90ed010a87ca3ae549e00482d7ef166ab4aaa520b6fcfe53ef9a93cc39d00435eb275416cf7a507e979cd88800a966bf49085d1ba325d425179f6f51c9752fb38b5a5f7e3f85e07f9c00f1067c5e2f015ca4301136aabc8484893758b26fafa593a642216c33704c816685d3783087d027e43b6916060778bb2926e6d44e74a0d11cf569716f8ffc001233c021de59c72390d1595f5cf3972967014ad7511c11fea4611b13ad821217922df2ce1bde5fd872a018c056a4be563bf446e90a7f90b915fd7cd6060c33f980c30380f23985e07e4c1640de8863a35e6b462d2cb86a1222c192941ce1cffe03d61da2a7a9d160278004f79dd2e7d1244b6a73c40fc8bda2a0ac0e493b09e6c00356b136e3281bd75d407dd16fa64e90c385e019619b3136b857174739fac1a0e34ea3c9127d106b6aa8e62f0aa100a000829d0ba3da5ccbc3eb372306e876403911bb07bbde888cb6a428f1f81ace97247a7f16fa53ddae8a1832614110ff10965780b6abe13430037e14a6c3ba0a4b41d65d4ca02a8f0bdcf05a0c4e294dd23053f0ae81bf7677aaad13d86aceae72a25f0b156665a7626a3b923660f8ccf83c2290e0331df6c417b06d3e60ce8eaffe8cdcc62794a293264a737b42b407b0e3bed206329c9de9075077837fda886c5b2faa4fe6fc5505b476f97b029593c4f301cd80342dfe531b653b53d8f805911660b136317090baeda2b5fe2d4b1b6e37395a44c02d35c45a2d9d64bb70c3c48d1224b739cd044d119e4428c56242417f2c8ddf8ce7de41f8aa82712930f9fe4dae535cae33d7c8f4372822c2969b900cbf356f202048889b5e33bb0bbd9be3762ee4bc20d530dbd1e0f32ab39486b5cc5e8ad2354c8a7e2eeb3833ee33894f1bf3b380d4118810c985e20b9c5484ad8c76f35ef0f760d8acb98f4f1a100c0502e7ebbf1c18284ae74857bf8d61a3755b8d6acae3c4e47eae58f7f3f1aa5f83726b8fe792c2e2d18e2bd8b1adf196d28a16e0a6d7d2948f6df6e35ac5449a26dc66f16ae65b0564fca7b22323204cb8ac73644ac7ec5af7b666fee15f96ebc7f3a327ce5463e10989cbadc9fdf3fb26756f2534df1da4ca7be739b05459924801ec6b54570befffdc7a5c0a0b399e1e8b64fdc10664ff52e2b340b9b5896b075db209bcbf4d3ff392eaf0880921f366b519088bf0d43f4eaa00014f3194419b8419bcf68ce87a84e726e9e7feb30e44e42dcc8402e28393ef703c762000a2ee16b47a7813ebe538132b7d7ca5ed8a6847b1591a2040db67edc4fe3183444118f58a2ce1d88cc9ae1ff70c4481d0f072089672be5f825cece20a95e2b4a9ad35a57d32e1da144ab1530e447df645f0e5780bfbf04015a54ef786b2fe01025fac14618dd3278246ea0fd871920393f4b3210527aaf812d1e540c546f1279b34e876bc4f0f5672ba9fcdb3fb2341da7092ea2a695b6500fa079d792718b576b868407f3608d887ce78b6c448ff6df7175032d05cdc462ca65000e0a0235027c36ddcb415d8abacece16d8f1c32c225c72c8cf8498eb4cba2d2e48d8c3f971465925550547a9e5d1bb0f4970ec52e9cd0b5fd190f670c8099826333684158df44c34361ba918bc7781411794674d2abd3866db1af4ff968c55f2535e461a8e569a4c5c0353c8aa80b797149d3ed192bd07745622449d504107e234a3b0652342d0a1bdf514db91d0ccd1d957e350625152276ec8e684fb9e4837d5758758b9cbfaf8b2ed8096afc1558e31625b6020a7ae1febd8e843cd47e5d5f715d04a69f9451b4530b712515e065b2892b15ee6c24a3ba2c311fd58c739f417d7d6d7d67fe4769bc8559e4bc1b78487078b02da48d5ea77e5e45b5960ecc7ee55f1773601f935a48b271894557fb38a8b1e1ebe93ce0b5697749cf71b5ef697034cfed6cb719bea12dd574986872cc251825ba6b188338d24d2380de243951bf2ef83142f73835f30d9900a15305722984a81eede618bdb9e4bc253cca29b20494da0a407d1dc89a2a2232518817072c321c26a7e9d8acaeb7188efe3cc553c161f7b9565a6d0946252dde353e6384dc71cfb5e6b57ad32c242478ee520374edd9c7fcd2cff85af4fa88c66340264b99d7aac28dc896887aab5de635b16a6b36273d6db74ecc817e3b85477d79471a1751cb8085b548c6dc03dc5157299c1558a36d5b31530115ceee1a8b185458f21ce5d9d8825198510ebacd82424b51b0a4cd70dd1d40a04c2242a5fcd4e2bac1514f6f9b376614df43657cbc0f091063e111da894568fd50707ed074ace88d220672a6f3d83b06ec97f4e287602673f79ddcafa70632f4092985372457a919e2c580077a3f2a29e6a4d79ad5286e4c8f1aedbc5d4ba53511a95ac485bda93500434991804647d024f8f84738d7dda042562f625fdebace58d3b291a111b8340522c343895b4b87d81ac2e98a803405379a113fe9c9f4b50b11ca8ace054644daf09ea0fdf14b1d9a18cc61a3bc7b87f7b473b172ab38d944a0da14652b62341dca7798ce253ec0d6abebe06e29ed01129dcc1b62522a6cee831db14fd0b61ea30cc41bf159142065eedf4f35a383aa6150824430d82f7993c0607c8db37eed850a2c89fdf323731e3846765e957b485522eb20f369bf13c8f0ce927dce89ef365692269baa2378b45a723c220d68dd73092d1f92f4014ef57800cd36caaeeb2d4374573704ef76461f6146cde1b7fb1e6389ceab48037c607ddd0c9a8060c45fa8e0cb5cd983a6a3aa90269909186866e0cd05b9072f321e5e5b258ea8208ff0442a25cfa8a8d7c378041d17536f49d02f56d7dabcbad980a2de93e14539a0241ea5e5154fb7c4ba8f63dee0b757258d68fbc512869db38ba00e21272ea0f0e0103c72b737bc604dd2a93cbbb08125e8ad162b4bef6c7c345ae0d41674fbde33836cf99ea573d0f06d7e3df968df032133059442b81bcb667fd9e62ada8ce8e33e5202dcd70506f57e40c3a5f95be48a1d126669db531950dc03c7b3d4a663f2df636e74e52420614b0f9d1c36e68d4208283c1151626336cd5d2c1dec272816699219a7318dc1ce1ed93ff1689bc42203e1067af7a77af20b6ae6d6ec36dc4664aeae57f1fba82f3e1c3c46d6dc213b189ec9e0616dbff2818e2c68441207267d20dc2c29dd9a0bc30c14ab12cbc1a35b18d3a2b160813c010f97fe48304db98a5b87ae85599b9956c482ac78711b98f640c05add110787f22e63a55ec4a7d764b10a6de938cdf5b504d6c028a8a654684c3a74c892941e0a8b6b740dfc865882a394b16e1916ebea4a466e06461000c30ee454a34813dd50c89a4220b8e4f26a53b2a67d2580c76a5b610b234606cd3bcbd85200fee23e5376cb3d1c9b8c23d43c41df0ece4a7ae3ab662741e16c85c74816b8e4ae38e48bde0b48d967c413ce6797921532e8c2bb20060ac3b740b1b45c81efa73eb3442a1ca78a7fd6d3b86e841e451fd6abb50c382afadf6125945c4c47fef61fcc60ca98b526ca4b328490e52bd22fa8ab148b064bedb0f0c165c6336077d580adc9a7b96e44a645edd69d2869d15439fe8f710aa5bd97d62222c366739e974f0f4ae1442fa16b746e7d1f33db9dc09c41ce89c5f4312db3729f2de10acb2931edffd92e5f08de75d0bdb8384697764e3f48ebc90f5f1b99627d37b9a9ec0386dd386277e0a48481b4c96b0b452996c7a129d96ea4306499b81fb1179567cc67fb63fe639317aa3a9b44848beb7fbff016b12e4a9cb1cebed128ca52d52d756a0c41a92c0f5a898dc424c9b9c6cef0c23822f3bfc9b509dcb24cfb2f90261fd56864215e20c8c3088ea15703d722e356948589b78d6249415c61a56438dfe5611d4e03573fc281acec2f4ff294f51136872ad6c3f016c030b4042be72734963f7ceffc896eff16c2ef2f0cc28784ef1de7282bd83e4182174ee4f115a66ec086cfc03a5da779c7725c590e927c2ae0949b49b661b9c90a36e589ed97fe8ddd3f5206545d73761364c8db69f011abfc3ad214b74536d3c6094b6e994c66484d66148665c435b13ed6921a0be5ce739327a2d112ef48d61bbef6d62f472843232217683fd1221c608f1becfbd2bd2123964e8205fd578b5c91f75134fe535872c357df02b5eb16452128ffe0c97a3a8c2ba4f1063f26b9d6dd44551ee364c911eb67996172b60fa22b3f5b3591aed074daa84d00d8d60aa7a763e1fcbd2fa67f6338f4ffb4a76ec92b460731d4273532af0fa6dceee07534eaf6ee8c23bb6261283b62ba991688036687d6ee39271d409a958a5277cdc410993f6610400c40c1fc82761f2f19a173f3ae43685ec7ef2a107524c8bbb08a4c626dae31f03017247002c4a8af61397f8b5903e9895e4fd443c43e4ff32a399234a0ec45294a8f15fdff218da5dc55a13f589789b8b369ae8410fbb795eb584e944a5db25b171aa7635adf4663e7d6b2dccd8acd68d218af73e953e710c2f4c7fd2d17f03556438d006c7e05154fe5ebd6d383f68d8e28755017793c1b7a8d43a45f63f82816e8ad915060d90b540c7d6bac906d2c765ce9d79bb6c1f2bab347b10a216bb052cb65fa2aaff23bfe16a8395063062357430d5b45e4d22b230a19b7a35f355f6b817a085e9d20ebf6693f18ff279fb6bde5e5e8ae40489efa40ad9b3f9168783ad953fae97253f4909f4d3d3b38036e6d3a73997fbf28ce5985515152bef4cd5c6481d64309c9538069a0391c473604e9e8f24b1537eb0d35f71593cb43738d425467357a1e9a97e82869a1883033a8ceb1caf4441ee47c8493d02077f774b66b42af4acc0da444398ba82cd488ed434699b96e04366aa34c398e8b39b6a692b4f7c8474ff24eb63562b2e4d20e6927301dc4375a41e3a35d35c996940c7331cb2bef935ca338ec6e45a573a7523c40a91233445e20649f2aa3d6a08b40958228eab223375875b6ca162094c73c72d596cf7801446dd0f94a0537e06ad12925e1e986e3ca6f8a18c643d5b6a51add319227137676650dd19c9bb304b4c97d5cb145c09288aa74c78aabbcef181981ec30521271d36dc3df13051e0e7f43f723519e611d0f2331b673110d824979c2ea9bec1d78175200518aabd5aca477646826ade3e2ce7cac91e92753536161ab2cb71d14405dc90cb2768b1fd50211ec485940072fc07a5083d5cdea1062f3ff6ff1f242880cacd203aaf562985c4090b24a07826d0c8643fc7cca06ebde4ba50af044285e59e69e11c174a236334006183cd1059b55b401ecd2198cbd0d1e0277c26206fb7258cbedaaa77570c217782c60a7670328c895878e5964092164efbdb7dc5bca2da54c49067f09ec08b40849ed93c893f1ae3ca771210b8e716687ebba3b3c462517ae88f13f885f8edcc18b9f77ecc8f1c1e3305472010a9c3d98c4049e182ab99004ce34d265d2ca6345f162c80b30c0308611420871e105208078a2851f27579e94a6f83c0f0625b00b0622320d43251798e04c23067cd8473124b8107cbf52c8837d85601b632c92521275c339dfe775a02896546f070c1351d2a289c853162466c0c506244578514404539c01830b9b120c429c14030c0e8dabc350c9851c68b0197e8e9ff3bcaea46bce09df47093962cd97234d8c31b2620dfcb29cd39b329bf28bb5841edecdc381889778803e86e16682fcf931a1dd0498a443ef08b1a6bfc62bb490cb2515a516b4e00444ba033aa1f44213a5214c48119c30c44396167eb872944486c50b58602074250a2e3ad20c2c9f8505964a2f68f122755861a8e4420cd862a8d4c21313560679b962478a3cb04e6a299815076a419d468a35fe1685c8237bfaf5a78f2200755088351e79644fff6b1dfa95106b309afa3dbd312780c03ed5813ab6b5cc472ca162d957fad95d017b5abfbefd820871427f8184143f3af6e9075901fbeced5d017b10ac90d1a75e147918451ef4dd00d34a09fdb991d37413dc5f42cc09f5b1aff48b39e1b1eb257cac712f8a356e84fdfd68fac5642b04a15d07beed6e7c17cf8d560fb7144ec8de53c16df5a9b04a3db6fa5450adfaa8913a298535152efed352ace06e27dc9f6a35e17e15d6697e71dcc7acde4bd5df7ebb20d0897f42cc09dba31e7541a0235132a2ee0f37407ffc6256cfbd101d2ff5a990aabff9d7adfe76635ebebb5791117eb92568d7a98970ffea2b01484805d5ab90c209d9c74fbd0a299c301ffbd41501e225f255f811847e106b559f0aaadfdeb777278a30d6ac7efb6252afbd101dabfa5478f914543821e684f9d96717043adb9f107342f6dd771704f5b3873adc4700ea746f7b2b81fbde4ad85ef535865b09dddd3e2fc6a4de5f88ceeacb5e04638deaedcb1701a833649e70fdfc97fa83bebd0e146bfab31bb37aec478835fdd4856256b7047959b1a63f5e186b84e8a8bed457428e58136b84c8153caf552cf42bdaebe64ea1fe0684c4aff1b3acf37c2ae707028661f7bab93b8520f3e990a6f4e38433ab8b932e4db0e31988bd7f0342b0fcec4b21b67c3bbf15fdbc2d1ef610670d637f3d56311ef9fd3cd147affc66f3412f1278e24f9ef8df9c1fcffc20d67a8bd0af30c8e0c0c4c04ccf4c1c43c2240cccc432a0aa0b10ee6afd64a64fe9572bb8be136948c1d7d34f0ef1b26bd2cfb0bf1ebb5aac3cf4e9d72fc3a39787d2bfe8fd97894cecf52cbff934b860f9338d26348cb08d2cbfc9fef357ac5740be324e03238632a148d165e5ebe7ff6a7e79fe7cc933ef3b91858e0611bc80ed1558b185a7ba3229a3bc2a86d522564c3145d3d30c4a2cd1a15166407206162e5a4061a443c9c09409cd64f4eb79ac47c3055c3174020d219c69240f3b7c478c27e3ad5832861dab254a4324208115414fa0d0a129a8214a0b5a780268082563ec5081902b96e7f5884231b0f2051a4531543140922b9c40c283961418d9128429a664d080e9a6433fa09e0e2e2c352184141bba08e9d03290900283a62c5918e95031c8f8b9c880e18a62781d780d0d6be532deef79acd7cac099a645c51b00ac1996ccb358323f23f3ac2f30c733b10717360123c4a41e495b5c3230a9c7084f54a8001de147f1e9e849092c3174e20989f8612843804392771dc369cb9304f2b2465999de9e19fc410ea7f901534ce98e0f28f614a317a5ef3df58029fdf768506508bc9c23c7075c84ce48e38c30709e89c14a9409459034bf89281388488f91d23116fe0329920a952ec98c31709e31830ace390280f30edccd4508679824a3dbe8d85f04c76ebda1737e630d3c15864ed4c00aeee1deb211d2a0aae79988f29c26c60a8e1f332f9c2209271e31c9bf47032a4005bb16f94306179c35ce093a510611ce900a194d183a995064ca6702d0d0670210d18d67d805d2007b18340c681c5f84c6f19a504408eee13d1cde25ac785de8358e32a188904b8f5bd846c29b183a414611b81f7261cc8411a78861cccc29b960a18306e4c82125015504510aaf9f8a138c2223cdcc0e0c8fa88041453eb13124f8c85c3fdfbe3786041b43828fc4f3b37feebf31246812dbd7b4bad5ed564cb397bd324cca8f61ad4feb1d4126c069e035dde3c4d263633ca3cfb81923c425afbfe7030c3d8d8a1ed003b89a72cee9019961ea99c1734ea9552d5eff9cf9e062f25ee69fc028338051b09471840fb69058b406401082400fdace68006ed9816f60528e04501fb40ee83f0bbc3c135fca0aafc470c3b2dba3e18ad5fb3988686c0bc6e09be03c7c46f09b0b7ee03c2ce035d8675ce7699f77cc1fb106ab3fc4697e9c06c38cda68f3c7dcb1efa4f61aec6b9d99c118eafe50b1650a524bf19b18ff1ac56f9a3ca1d452fa318ae77ef9c57e568cfdb0b2028b72fb9bbd3e123b0afe9e942e07c7c2d94c0ff4c07f84c8a3ab780df658631fafc03eb711c6b0ef210dd448985113bf39f21b277e937d28f65dc56facf88df65877158c693d02c47d7b2015bc496c3f89e7273bf8c079401d0c7b96dfccf8d87b9187ec5676c4f6127b0f088206a007fd1a86343976e4dca41e3eab9bf11b99fa1a7bfd2047a5b1d70a8da2bea6361f54d36ecf0c036490c2e08256c0699abec6deb3628da5e1bec6dd277383e75ee4b1faf8acf8ab0fc69a7e68555f071f4d152fefd89123d354dd6a1fb56dbb3d1f60fb7163404a491447b0b5b77585de124698899e5f69580882a7bdc44778a603bf69d6f5395e733d9409f234204ef3c3698c781932e1eb639ebcdc40f8f21b6ae437ded83f257ee3f7823849172d91ffe3fa5a3d79ab15991bbceb47883c825c1f57e065680548fbeb81a0e03744175090df647f7d0bf5903f7cc2d7dd66a007fed9c7fa646ef0fce314def5acebbf03af33beec2328305e10c220209459bc7e19561518638cf18234184ae9c18c324e036b96c190b5037a00bf83200dc31e4d0a0b3fcde78c3fbf6794b971f4c283ef2af4fbdc1812e05541e21e2158081682ad4f2ce1fc6086b11f8a692e1cbfac65964739af8e2cc4fa85ec7096b20b2f6b9c6f519376661746b595dfc49526e37de5aae21cdf8b386b58fb248ef14a8c21bc41c18b3786841b5de0f50bc16e59784bfbc2019831068959c80e6ee4e718638cf246cf910299b922ff6a5b3514be05f2e9e6437e8e9731c2cacd400fe06b00cb8f5fd4c2eb8f3e124be9c54be9534a61755bc57cf8fd37e267f8703ee48173ce89426c81d72f7d269e734627acbcb9620921941f3f59a50c0b4e6fe9345246f7c1c62cfc2f29af8635cf9fcf336fcd55de999ec9f7beed555feabbaf3e877d59d6b0bdfd93fb1ecedd98ebebcb9776fbb69b7b344ba43eac3e2abd2891c6a93cf467adf4e747e9ad125f5e16113e6109a76069519d3da665d8389e8f8ec6c92eb73d60fb9803ea6880df6431bbe0f61d3d4884117231fae770154775340ef7d9f5d9c723bdbe835370f6aa9b3d1779fc7d3afbeebc036737863e967d8e2caf7e62bf6571c35ec7eaaaaef8ab95c4aeab310c3e39758fd183649f2383563ccb7260904ae65bbc3f058b9ffdb3ec663805cf2c5e7a7d1c5fdcf6d967d9381c09dbf7e5e3dbd59163eb4f7dd8779ff6dc7c14eaedd6a8de381d8de3d3b8715c47dbf8f40e8cbaf375f8f88dfebc0363ef7db06dba9b777074bb74e8689bf9d8431dd8cfcd0706a7c8cf3efa3476f30eacc3eb9490ea72225c9b70c5b6b3a8f8a8eed84b7df3a397e8e6835e29427f16470f92fbda82cab20bd54b8dc37d4c3d4dddecf4a3dcc57dbce27563b6a73fafeb7adadd945bf57d79545fee2515bd62537a73cfbc9e27d28b6a9a13711bc75d57f4201d686dc9aeabd538979619b3cbd39f6df7a23f6fee263cdfc7718c1f3fc60b5e81adf84d2f6ecb5a3def84f956efdfcba33eed7bb8a759d8e475d7bf6e2f713fbf971ae7fab971f76572bfe2627673fb522ffd8f5eea26db4bf1b3cbc31d707dd75b7ba96d6614d2b92a042bec0ad624fed422cc0875bde7d5083bc6e4f2ab16f90dc49a386aeb30230ce9aa459851c48e62ec3026b1c39ae056e51e98eef2c40e0663d2f58d71ac893fb7e256be6d2bff6cfb97cfbb2b8c8957ec4aecba0fe21831230c29d622ccc8b1238ec39a604c1ac7b126d9d39b7b2a0c07c3395795c48ebb1813cc88f31ee67bf9d4d77d2dda3694f7dbd749a8edbb2f0a85c298745dae4ab0d6e51ed8f2223cff85c398604c6a11c6046b92510cc398c0168eb0852b065b5509463126f1e7a54a9227c9b7f3eddbf9dd3eb50b48c86ffce74cbadc5afaacaffbf9d1cfae573dea6df456a9b7568b1e24cb324f326d4cff6df3ccc6e5d9be5d86c6b1f19eddbc09a132559665d7c6f6bdbdbfdf181b7384793309f31de87d4ea117ffa96d0fd03a86660ec3e228b6f9b0dbc4362e6ce383789bf3e7fcb287a307f1f90ee4419e0467bad1ec433853df5ebeb30bc9e0cfca2ecffc1796c71af9ac979fb98785e7f64d3cdfc60bfdf9f2d953d6f62f1fc430dff7e240acd555c9d4654dec3d897d31f421ce3cefc6d0df7efe08b146bee46ef6e46bf7fa2e5e0f0b37f7f3eda68d1079c8ed33b4b2dddcc3ca2e8376adf561b34aab0c8d332f0bf3d4bfeacfcf3d2cdc3fbbd68be9d7ac7e31410dcf999293e4a585e7db0dfbedaf77677216cbbd56f7d4e5ad1c243949fca6316fffbcbf52affab0bfae4944afcb51d73789e825ea4b84fd6616e67288728c54fe9ae6547579b41c248d53e35dd55ab7f63949b0bf7f0daebf9dbb3c5a0e12cd6f0cf7d857a31718ac29cd49827d6ad3b018615ee2e72071a6ed2df69977ace119c51c24f5b78711e6c6979b3d18bb9b6bdc72a6689a16a307f11ca21c239cabd7c73e8728a7a87aea3d2709aed857ea3949707dd94fbffdbba6aeaf199558135335f5aea56e0e921ca2947f8fb8fabc577ddca7527ebd75e3bb787922e1f81995c8c3038a35f1239651c111e57dfc32270f28f2f08c62cd7c202023203c1f459de907fb4575774316767390b40d0a9533273cdf338a3c2652ac99ef1979469e119e9f83a43f771c4784b39482a776b1ef26520e921c241369224d243cdf5b394872926059968324098e3d3309d67a6612a60ccb41f202d31c00bdb8962756a3af79d69f34cccd16f726c205fbe889df6c3e2eb9f9a05d3ffb509ffae27bf3e56df4e8f559966529774fca5297c7395fa27154dfa9ccb3d503b8bbbad9b1bf3f79b95976559c3f77793ccbfa2fae6f0c97a3bb3fd22cbbb28f677fb26d22bcfca5bdc4d5bdbe7e8c91decfe87663d51edb7c68aec539ee83d8af2b7a90dc34d7f7711222f6ef23476a9cfee8493857cf6e768cfaf627357ea537fb135c3febecf25c8f7afa39f3bc583379d478d4a3bebf7c7d569d4355476a9bebaf4d04d4675fbffe1e51f5755fe383f9d4c73dea437d7de445eb7d776db3cd43bdd7bda136eca9f7987763ea737ffd471e3926e5fe7a4dc3cd3981f9a4d77437f76833c7e46ef691be842fd136d7fb128da3f9936c894bc3f5f27ceed1706758eed19cf81228af5184083f864a40538800e11c182a85c00a067a820780a1520c474f58c3fdbd4529288a52509052912b4a459c2815d1822db6512e18ee65928c927a29a594f25255d3e7b64d841a5f5ffa8da43fa4928c42e9962aadf597f9524f6bd497b911b3c14378c3c1fba6806a59f46601e0ebaddd6492a4f292645f2e4fdca452e3bce0d82e8e2858727037b8f9d188b99935c68d2b9343fe4ba432befd7ea914f3f2421b3cc6c1a370fc7bdfb3e4d39b49904f9f56fa6db34ffd1a4fed7765fd77b300fee6c771330bf51c5cec37b8fd7983fb5d3c5765f6e6c65ab23cf99d7c94dce06678452a55e7b82d2f2f1fc4917ed4e2e841baa9e0ecf287df24358efc9aa5149cbd87cbed01f666c7355e6619c5ad8c829de6b381aa18eeeffedcd341cc0dfa35be1f8b1e42050d29632479717d862fc8700b99cff00a7def1a4fa9a494d27fa9e132a96de8d34d841abfbd7ff27b44992ff531dfea6f7caab7f1bd7c8d2c00efcb9f5bc8c3b9856afc701a7a7df57260ff2c009c736830df9b0811a7d05d70ea61e481028cdf2c807f96bd99d597f66d5780601ede8681b931d8bf3c7d14e2f59700fe595eab8b45bdf772bf0beae973bffa54a96f6e22d8e7415ddbb0a6ffa229c17764c30855d4b7be27951ac7dedc3df73fb8974a1c17659b18634a8d73a532c97ec22dfbd29e0ef096bdfddcd301a61eb7cbf399c21a69ad5daf546a1b7a93641a470e500bbea2ce0584185287206664921999e483de818a5765a27c82c93c8b35c5b2e2b35080637ca265583b72d4990e0cf9e044a50b32885ae0cd02eee0051f88b03039aad2d2f1ae81a1d21025d8c35069c810ce392e1f240fb2e88ac9b207a521424145e257a5212f280d79818604f418c10a2959b4c0380116329a4001c4113140c28b28a200238d1864c062c0c186089c902023872ab22cd191359862c9288b24565041030c0d8633543060c82d02f255adea24280d41d806864a424ed8466d4e915262144f7a82a9135a336c24d93773dfd9f7e007f8ca81afd4a6faeb5fbe7b5ffbae47c39d76b7f7fc7add457db7c1eb7daeefdd2ce977128d83ba3cdc775c3755d7c7718aeb24da8672f7f27e4a5427517fa5b002a69fc2c7cd6f0e48cc93fade7c78298e7e7f7d10370af53dfc427d0fe7be7b2b35e86933f5799fac5ee329a0fe7caebfb975dcbf7cb66a4e53afbf6e237512294fc1d0751db574eeeeb1d39afc8a1ea4d35a5d06b9aecb7e7badb5694d9dc6e4411e14813ce88ace69ce394b5bd296b4256d2908cddb6f6e6ff7be79fb38e7dcbe87d32b62d9e6ee9e412e4bbc75dded11b78cdbdedaceb7ed3da3d7d464ec34cee935354ec6bc018ef38f6f3f8ba56d32acde8ce18c734d6700f224815cb362d18300190224b39bc6a5dbb69b7d3a6fbe3db7693b8d437776dac6afb6f96584a4b3e96c3adbf33c6f4acbe4d9966d592c9e47a5169494de67afa42c93b4ad066a201f921ba5a134cd62b1582c168bc56259ba1ec8909f2720b3c32817c86567277a10204380c0a78df33a2e29ef535ef61e360e6abed736decd3ebdb3b3b3b333a4a524e444494889d20c43d8769d96a2a94bfb53745229676d927fe3bb64d8678da9fa92b6c4450f924abdd64a658a4aa51c486b79d44ba5bce7529f7d3c08639fbb67ea7304c2fda8ef3ed4cd1e84f5e7daa56ede8090ccc212e5ddfa9db6d438f6e77374d332ecae28fdb4a5b6595d6da96d66d7340d0ba1d498dcdddd57c00ea4b5fca953cdc92994173ab99626260c6fa6efeeae35514a3526a7943ecd3d3447c7fe86cd556ad6b39b7dcd5a4ddb5eb3a8b70f6ff6fc55abef6eaeb6fb957beaeb6ee66e0f0b637e730fcb6637485b5a699d634f24e42224089021408660e8fe7401891be532bbbbd52dd836d8add7ce0a87198648dba254862d324c91e109d681a1920c40d8422b8504b9f60aa510c70b9b924279b57813936d61783386517a254a0cc3300c7b4c7b0debb6d73ef768be89c043b38e725cc7719cf79d8a3e4ac3a8d4ab5228afbbf0cb6c76575ae52221172141800c89904be3344edb70176b61f5b34fefececec107184a9d498e0973d21411c486b619a93c694694cdb7344b1867eaddadb8f4e449f623757cd8932cb6ff6a0ec47987eff441edda33cecebfd417dfdd4cd1563d8a3beeb56e8cf6ddac56cee61c50c0bc2517ed496b4256de968732a85112e46a81461ffebaaf14a523242a464044829a88aacb5bebd52e5c783e197ad161c5fa61071b52d59eb8d4c28d6f8d78a1535d00d77b5af48d32ee7df409147eaebadef7d1aae8ff26ee67ae8b540d8f75dbcedf668384b2c4216c263e567999c95fe45e55d390dfc221a84c5287188db3e0ac51923a55128c62371c86f301f91fa57e3e18b0af5da6394521fb7d27d836f6a1f3bd2384e59710877f550d466cbc26e3cb2c1bd31dadf88799978330934c69837f88b7e0d6d1301fb88d17f994fc52314dbe0528ac9dc987be3c6a7db16a3c418bf18a350148a4251a848f35614a291286a97277ac7216a3f6f43f87a2dce38e38cac32fcf2c4aff1d8e7edfa388430fe85c5feb216637ced8b426dd36ee3db9ef575dfdfc57d8d1af1560fa72eebc8f49c1ed9e29c53b39a3dd2361e53f7f8244cdb680f4ae39123f1c88c431c9665daa6d923d046b3848662f4a18cc96236dedec8fec68dd8dddddd31f612930fd5ac3f8dcbb22c73f21b59563dbb7179bacfb8fa7ea3fb6ce6e30c13f6d9d9aebdf32e76d9d32cd6cad44c387b4d8b3359e70064b1babbbbbbb70780c6e7a91ebf9736d04b9b0f755d57638c9972dead6ea2919b99f91b9f3b7b5a9d095300ccfafd331f1d8498cf14c70b6ff079e2f81282c0c103a05e1c9f2108fff11b82f0fd9da133ef1d37d3f2412f7d007cdecfeffafbadfefb54ff5fea717cace7e043fd065f8d97f9603ee67bf91bdf6643b3d159bb8db77163eaf753efbecbf6acafc6d70ff3f5af545f430ffa539f430ffa519f841ef4cd3ed1abe97b4584ec011acebe973620a497361f5b3369eebd446bcde6678ed90cc3b0eab79784e058c11d660b1c2d936019b56089e7db8d8bde403fee3ef1fa8df656ec226af11bcc6e3e301472bdf12c9817eb799018231797f9f6566ccad1a965ba681c8b6114c7cdae05f7db1e0d6bede3630f61f65e621758df189ac3468d2fe6579f8aee7ec5bf81e3dde2888fc2069f2b8e79e83c62befb7f9f839bab7310b10cbb381e9b9f03f3c7c1c106b7ab614326d1e685a9bbdbe8413a807d6cc2b8e07c3dc5b0566c8ad109e70ba337bea396d8057673d4822fecb1c7e28c334eff1b2a1576af5a2776e3bddddd9fdeb8b18bd8d4367dc35fe6e3bebf6bfb1b1fc4315ffe0fe22bdab8b9b26eae356ef6606ef6ba9b592f37b3f07cd5cd8f670e4ce3d9cfcee484fd66cf76015d0b76ce3526fa988dee3dfdfbf351883ceecdd04a003efffdcc02c0676fe603705b68a656005c18ef65cd8f5d586adf5e4dc8fefcd845eca26daee7ac8d5dcccd0717b56c0ea0afb5cdb0d8456f1064046304b900691c299bee348ebc5bf6a1ff0388dce980dfc84825b51fe7e1e8415a02e921b4fb0124c3a7d8c99dc6b1527289d14a1b6d27ef4edbd058231069ed159f83f9be3c305fee4865c3d6ef44a34a69f42014881c422910f87449e7b8f8979417b59787762f9bf3e9ea40761aa77bc7ee746ba7bb457776dae6772097c6e9d6ce12a8d6846c4b5a9ad2307afd95592c5d5fb6957597d264f420d9db2b5ab6eb8a65a25b578ba571b8a75ba36a3fcab6307deee929a31c4cedcac1d01a2dcdb268bf437528bb5265ab18add584bc7af420d45ed182737ca7d45eb19629769d6dd98fb685e313a59183e99e460ea6b35deda2bdd27df691ebba4bfe60ffe9ba6faa4ba56e4c742c8dd33dcada270af463b1582c0fed5b2cd6da96c5f28463ee814f4f38c3ecb5b64793168b4c03e5fd4452ee6d37bf7377f79b0ed2361f7ecd3a637fd9dbe8412e08741175dfd6cecb35d4cfcbbbd9afeba2acd631dad797dddf3daf4b66a8077c4d0485cae6dd88584dfb20b6d64e20f953fae5fe755e9efecb839a88bc76be741eaa9fdf56bb649452fa136b60ad620498854fecb04588227cb04228a8684a92232868bcc009104d949038625505924515e92823d802860b7ce0e282262149b40c910489a71798b1442829876d563142c59024314041c30565c4208a201ab4b828fa416805388cae0b065fd715831f21a02d5a9cd1c2103d58094389144660d085921a9c705075a618ddc0c406a2a2254d2f0cd1993f4481c20834b418a1a0063a73da1404a1ea9c73ceea810cb2a0020552a4408b110e151809e289145c145962044ab038cd39279e73cea97302270cab74ce499bae215a03b4a0a18a0e4d3f325002c10c59a2081159010cbaf810a5880c10b0c40e21514a29a53227a534c62aa0bc5c1bd5210546d2156bb711a75803ab18590b2e8fc27004913c22090ee82159d1a5cb184988b0300401a6805203900e37d0d0420f321ce964e86146072c8e9282b028830a9221201b84f8b1a287171419e1824a01caa1c8f00476258c5884e7de55aa780d0ca1ca15af8138576f066eb1688a50a63c6123142cbc200269a354a34f8428c932b4c40d2830ea8283cee5c519326409420aa222271e82884dabfa79473c9991040b424459220d9f1e8a1c69d1c30c43887a872a8aa059a69050781063ab4946a8378dc0cc40882aa090c28c2688b88052152e94c6480193183a089560490ca18b105293ec426042884227924220a138612485698b1d9ece688981040a00acf0e289952c28808109921c9d601e4131128213ad173c842b4d91491017236406bc2003090a17b4404a09522d183ae20a1826f8c2490e446888817d112942085f46b0a9c9298ad644164a03e3c404102d343561040c4ab0021fb628a30631a62009c28a6f062d09065052f4220905e4b1bce0e25106485658c1f8f1562ccf6385f08591c7aa37f4cf4b9530ba3c91c3155b92ac6850126444c90f193888200a095c805e908022b594207205d120042d2aa2e081c8881f4205268072460d3d4c4124436042942d798ae105a7226a80a273a9f043d352962aa4c001079d0b077c55231e175c0841b4aeeb9a508e74e8963c042e7e680c3900516fc83204859205892bfb42092e492868a2628a9a28b600a28619283962861b86c04a5021e0e4044f3fe410821a6cd0a1495a080ac38a2c6820b201ca0b68907ad27997083a0429474a57b4cc382794202547ae4075398090272c102309182d1012c2053a97164a320871a40a209e866428e26065c48a134a2468a214250149c800098c29605882a9861a5680e329a554470aa239738ebce0820f4b6cf162e984a629484e3c59e2c4e588154b05173662705464a935041555e8d02145907ec88205425cb94287d2400551a5a2e8030f4a4aa978f282ba486f0ed90fd8ca693c18a7111a8461460e3bb0a007094c31420b1426b041871c84a4a822050690157a942a55d104a574e579d5041dc2163f94d22b0ca7244a696412140216a7212a2b798b2f8e30d1441a53403181317e8a986104684081c50c540706481f4852c5112655cc0083259d790695115c71022b31c84006a52d5a571622b239e7114ce039b524560e43594841c50f3228e2870a9250a28719c820e464244a105b3630aaf154c50c4c46a0344509288ca723b430a2040b233ac86de0725d38c480d62ec638a3881cbe80610a268410f1839521aa9051c511538ad040c33f6c42c531102c41411965b4c0a589233af40c295e080d518952450a1d4a4408a7c82448f36af59c4612411479b064562b19a79143489939428cbec8418c317c48a30b0e42481005083366c0420c74b82204434337babd39a7c573ce394310c2494aef76e2ea268a308c02405bfc80c408112d68d0b96a40830f3428c2c30b6ad8a2733510be9a90822fa526aed09ca943a0c269c600a50a1c342570885e3491a28934825c78a1890564e9b243953460d0c50f30403112a342a1820b0e172e2e3568c2088c328c64f08412193064a142890c8cfcbc2014c6c32a39f050e4882872a862029debca1741388401c4902986d0b98644b1c18c0d48e0514abffa0da5f4c294524a8538a23409a5234fbc9f9f9f1974e87790a36a52be24a269ce22baca8afd9c73ce9bedfc6a90371fdeaa63c528d6408c61d30522a489c396d79c465ed767772561172488c10d4b2ccc90860b7426162060a0628a2ea40811d1992d6025a43494ac58c1737e073723e2c95fc9d5cb214782725582730b76006be234f2c29ad8f9f1e5373f7e9851dbc85a24995421b4fd4912509010906dd956128e8f25355052f6d18f624d7c59a36189c55e81164b9191121c351c5937d7272c168be589a4d843d265073426a7a11a93d3cc29e7b4527e762a383e2bf2d0dea5ac48f2f39bb556dbc8effea4137c84e38ddf48f12b12146d692e41b9aa58c76677a0034ed3b0afe9dd363bd705b2c36a9bf8f493f13cc69d2ec077e78e9497cc426614cf3f3e9c72ca38e408a885705f168eb56a4edaf6f5e6b762c2cb5ee4751114d3ecec499fda2b6dd3164b9112a32225464a1421398158ce3995286a72e404c9a808afe9cf9a498ba56dea9c45464d8a9434b158ec150a2710ce5ec42aca5e446b8db428f2d02c96a3966d1c89c4935c421e8101a1774722c989849c5322c923bcc6f977da269bd9a4f9990e7680703b3bdd36ddaa542c9c91b989304d82e905a12bbd502641eda44fbcec4646783cf5e7c434dbb4b59b854cadd536b4ebd59662cbdb464ed3e4c88dfca6c9119434098825a55496c0bbbe7176a323bfc92d8df0ba891fb913bf79e2497e93694b6d53b38f1025224e7ee437393e7123bf814a449a707c6fe24e70fcdeb4a5b6e9d6041ac2d98d32232a2b7d4cc6ca7223a35b8db4a598354683291d7f07d631a78e06e898027534e0e99a3aa0457d30bc8e10f3ad56b78f7bdbc5d99257a215af027334c0fb2b66ec29fcfa705edd5feed7e9571bd379eba459bbdcdc31717c1d8db3619767fec4547659c8d5d136f17a1d22f46f7f7dd8cd757ef47bc46bbbf5af6bc2b6c12a0631d45bec437d436017007b185e47ba01b0ef212ec42e5d7484d896a05efbe0955ea3236e4e4c4b4c4b4c4b4c4b4c4bf4478be9bb25a6a1499728edd68f5eea1f4b4cffa3f56389a9973cef87b78452bdfcd1e282e9ff686dc1f47fb49c30fd1f2d2d98fe8fd68f1693d3d0ee73335d1dd3a6f2b4b7d77b9ff7aa2bd678eabe7fdfc5d36e769b7da2d42e0f177bc9bb3c5dd74b5532e1ab97b6154d8f055638f7ac56f353dfea55718b40ea5755f35652bbbefadb12d5a7fa34af59e16bf5a57eaaa057cd5bb1ae4fa6322d31f5d27b2228baa69154128b3c4924c271c8e64db37188f5578d0be6aa188ae371b12eacc9600d076bae9b7d260aa887d7fb6b85f299293a719d2ffd6edd7cec25ae9707752bea258abb3ca8af285c6f3ce265a838148ff486423ddc2e144a5ebf52a578f48835f1e9d537cb78a4158fc421d47b2b1e41c9563c1287e21114aaf591c7cb4521d6c487f9bed9ab0173552f37f5f6bbfef19af8aac73e9b37cf6014e82502f7defc2a96a1a0bab97adea5767efd333fce8fd3fefceebd8ffbfec962f7dd073f49d3c10ea7f18e350ec523ab1304f12ecf93dd77525e374bd9c1ee0e76b7d744daf33cee7bf3815a927aee7bf8ddbe8753fa5d0faf0df5cd94d794527a51795e1fc7937bafa3d4be67aff712739707e57597673ef7dbe5b97e626eabdb4627a54da794917e7f2974f6d1b0bc3cf4bbdeb50adbb99caa4ee3ad9ca6f32e894aa552a96423ad7eb56a42c2124b6ce50efc418fd6493492ea6127d1482a27b09368a4a6a581a8c42c78a53dc910950c00008200b315000030100c88c482b170206889f40314000f80aa5e644c1688d324884190310611620c2004004088210488884a1c0407abfb11211a42486a44b72a685788c9d2359953f5418b3ed55bc23ab79d68722cbd2af5130ec859616431173192dbafd3cd076695433084102c942688d558433f5f36594bb2b6426d1635bed4b309646a715bada2319819aed916734743bed537adc21e455698126aec940e0ca518a0ea1166b2357b811e7b5edc1b2fbaf5902a7cbd4f3dc1955f5ce1e39a5c4dd00bd1b841e7bde6471f5e0c9c565edd29a55915bc03f021e4c7d82c26194d9c3f1a4bc36bf8441d6164c22477ac62dc26741259dc051e726e4f76ad424f1f145d2f256b42e0acc98bbd32f19562df2066016c33ed65e09e2dcf5f246e8bf9276d3368e8d40922cf9652022626be56a8a99a93abb729b13acec2b1bec90aea0dde88a40393a5b483557903662d2d65fb2ef8954390c8f6d26b7f71b96e2acf854ed24e31235554e1adce376af941252c71c546dcb6714ce2604b3b0373344877c7f7369b239e6a8d2de01087753b6552ddf513ec56cc654c0c252dbc6d6273104bc66f70a898bc9425fca5770797c9a9eb30cff20d140eeeb4a01aa9ffc96d5b8652a6c2040212c1526cc0e759890cd7d1517f39fbdd9de7a39dc0ed3bf9b6943fe1fe16b3240ba6aabf452c49761bb9fa5f0da1e6fc6efca0e929706eb2a6801bcbc64675901453edc5541431e60d8e574831f4885b9905e5bb7e8c1552303437fe743a032f82d917288a44131f46861b76a864aaff534a3f86e6b9d93a85125aacd68122eeac4fbbe486a0d744a579c17c660e2c6a9686b2b81070599293bb6090c989937f802ffa865e8fe6838520fe06e2f929d5a524175be2010b3889a60d9271708f886bf5c50c0af8caf46dc98cfd00eba1cb6c812b65f7445200b3c54501e1bde42782f4c37cdf07c0f8d237dbd63bf3d57a64a2dde48d1069d64f10066ad37e3729fa95d39dec1e9f5762496b6bde689adf0593347a1af1ee5332109a80db3e87d4f2916952cc6e3cfb9a2cc1b777c2d77d251281d1fff30a7de8a0652f6c2f9141318ac7fa58d02d9776166b5ca25d692cb809e1277fb81b959318853fe86e94073018ba0140514524334daba0f54c941e72d928a2a008ea015a09505194bef85244c73cd66f044e92b1ef40b02a0fdfdfa374ca8fccf48db7919032d62689bba9e8c14e62141181f37c9bb8a5e8ec2a6dbe0bba5ef49a5bd1caf32f8f332bd36fe234c2eae94cc60f4ab28c20265b5132830a29a56299eb90b913731bac27d944ea7445a88d5b72ef95233d4c41be598877e4d21215c3b9d948394c04637bbd48332e1511f67e7689b8b0c30850a3c6be79d0256188b7ec72dffe701bd854efae3cf56d7c4a211ec72502250acf7ce532756f58ccd648c4670198ffac2c8d04b64996ff8898489f2964d3691cbad069344d29438b7e9f04e6c4d77d56484b4ca6cb78f5c874ef84ad4d3b04098a8b3cf92b74e4744544f093c58410be439d604f38a2723724107bc6f117c439705602ef46278a7f2b0158441c173b2b4faefe902ed902518c65d8d8c89e15bd480fbaf236a584983eb9396caee2d3d414f6850f7c0866b358ccfd192b49a030d852c96d6ffb390dfd6a6ded9cbbbd375fabbd5d21e786962bd6370c276c54e6464bc29e50a5d927be6d8fb52bfba668e592200bba060672bb1c35ecc66594fb4f79eed204782f7dd175e514bd81565acd2cf4ab2cb9b8f9388cd1f43dc05ebc77fad44f74ba4b69dc845baf5f8dcb65cc46a4a2ad84020638d1c456879109d1a9f9be5979b962e1bf0540e184bf1692222f7fe8a76c873dcbbac338cadeb721bfa39cf9fed40ddb904a80031fc5fb9e035c23075b91b8598b2bffc03be6a2376a45884dbdcd8bd0772ef343dbb9b71f07c65e8e99bda06888b3c0698f206e8f2529cfc63517ee63a31c9085fd748ca74e583c0f084ce62c191a5811352457269ba7ed1938ed636d6033e5b9e1c7c12745ac35fa4614ff01f9842b54b56e5f7c76ec1a9667c5394bbdcacc4c146bb318fc4c127ed43054910dec53b4600d93553159166f258eb6635c5665bafb4b723a327c0c9715b35741c0a146fc86f46869666cbd536feca37dea7f1a05ca312f24932ceb34a03f752b6bbcc0ae2e6ad00a9d39bc7417b8ee0863767317baffae84ad94dc108d6e04e1248b2e2e97a6b12c0c1a0b9d4d3a29f69651ebfb31b09f7c1a42c78fb96c7dd6d4fed2b3efae5ce792c8e6ea84e61ba83fd01157ba33555e45a8bae549c50ad7a94b53b0a6af0af509a7846dc1a13af6a579eefa43443a8d346f8a33241705564820c554a9de8c97fbd107984a3ed37ddd9eac87ecafaae22ebc9c13523c54113eb64c3335290b2d361836427f1426be48395e30e81f0197f4ad51fbc648acb6da5342b36cc2dd91959c1c31256e1b548edb071d6ebe11d835bc3757cc280bd984d637abdcdb07386a295310f72767f6d766453831c7495c6050a14266258a40b22512db3dab276b54d8d1b6448d33f726199c7be404db0cf2ff9352aae69b4c940236a537db2b832a799812f17cc9ec10329936b7819e755b691373a425e810a9390f24e8ce4273800f7b516d08ce90cfa605c5025425f19cf258e913849c1ac76aad2ae67f3fa9152c2bcceea7209a0093a665892f99d803fa1723d7f8a6a27aba6d83ce0ac69867cb26e362671b439db68b6210c9724e2f7af103a5a97853e22ce8a808dee48cef22f95ec63c5c4ab15eca6b07517a103552b72f4902910161cbb6a976404258677da55382ebb977cfe2a5d152303ed15aec18919877dc43233248e220559ceb2c428d1a8601ba0105e3552533251a405e71f04d6eaa9a55d61dd26bb3d2a982a1e7d431495003ca778cc47b419376660e3a4bd41b914fd0307303419ca0ed7931d3ad1b64a3b84b91aa0e893304d97e0660587014caa34aacbe757096f5575d975343f64be09687d7d51bf23e7c040483b6e28674fe5062afa5e9f7bb26fc568475ea158c29af0c58b986d7941c7503461b4fe74b83418966bfda7fe5c3eb5977ab897eb5dd01d476e295dc50be9f9b18bee754f5130b802675bc52c539997527f7e88c5682acdf3019862fc98d8b148dc30ef3a1970c4aa34ae9782bf9ac160e416385dcac108c109a05bce649ea3f926b6d91ceb4b52fd9ef65b98329cdce217dc49666dafd032a0d4eab3b7654010ad9d0a7c13b1ef4e547c6ed7f5e14a1f94441755cbb15e4c5cb67f1c410c48cf57591b4d61cba533447c982c4bfe6d0b1c8ded8afe536fd1ea3636637975865a5dac812caddf4350702b2728fd5dd3566fe3ce87264ecc36681a0cda13e237794b4f9e5ffe69e509bc36d66b30d3e68796825733e1622ba88a810c9d5573695e301125c0caafecd210eac486d06237af14d5a3bbedd97eabc479c1cac69941b9b4e68da8c092df14b46e5d559baaaa2d3c4fa8c5bad0a7ca23096232820c2ea16b49f26a193dad017668c16195e6e996ebd6670d52488033af498c27e15efd6b051d66334a9edc2266ef938d3a435a4e3092491d45928291a2a73f1ac8e4d02bc5fbe40a56f6013abfadb24106c7342711b7133eeccb3c5b8448e35cbdaa4c25ecd1c4f370923d758e89af3e6b6158245dbebe3a69bf40f1486d73b8b01b26119f4d7917c1b9ff8d7e1492c2e880c9951241fe64f529893302d400dd1a09004dfd4b0cc18881d855fbea2488d89a79a4379c5a9415f8381e165fb8ccfa921eaf89fc31ad2f49d1a6e4663d02fda7862f0259e1a3ab3414b19bac6da0f1715d5a3b5ff93a075a3ee6756a8b85e4f0d7aa9f834b48238a923ee571e5b8e4eb8afc667b135e3502a5a949451d8ffd4a0e31da8864e44d3701e176ce2a21abadb8ed2becb08589059a8d634aaa1708a31d41277e139cb62b767db165f17135d7a3c6289f68a0a426201d540c24e87a1a56b82b2b214a6fa24c87f966c723cd03cd9828f20ecc06138a387af0adef9db9a899072d87ec99fcd5744117187145e5cb17700b7e25854d23068713785e98e9888a4c960340cb139bf3e55902c30b67c8854dcd5c36b189c9195d3a7027804a4a55786c109535949d00f4970de13fa2c9a9081d21ad2099ec902f8b9301cc3310c2a282b37af3972959e5bbe4100b26fa1d0bf6176c5d1ab79d36982c11deb18d90e5218887f51741f7d5c84bf1cf90546acefad60bcdcbeb739fc2f380e8f8a9f736acdf72484c1ae5a874e188e35ad89e45656d46299cb87b9c7940c016ae94e20381062db73ca199ae660642aa3450a51788501ea063ac3e583277018e9e053b6c496b7fc2c42a45c821b02f2582c818a1184cfa7a78879d16ae5f70424d1040c71bfb9d8d24ac1fab3e10412dd31eaf6974652ab321fed7a1c61c6fe83c1d0472a900c4b2fe7cfb39b4f022fa063ffc82821e69bbd61d64e1a0c7aec459779b56946fde6a76783e146119825668d1c202a1aa189de032ae1d306832ed4b5131147a701b0ac6f305cf8c36aa13e172e9f78cd591ec69280370e06ad8a9a309072309c48ed60d562a6d583adfc20306db6e8db802f313643acba8fc47deda8c93da4dc253ea40d062ac540c96d44443acc03e1ceac2736061d41f2630d61d95aa5de5dfc14d530049461f45e3616585b712c59279fc91e9c78b85c73cd5a435671e9a9cbc9a781604b5dc3cddd0cbf36ff19ebd4b1d05ad0553e7806313f8b4e29fc0466ae19c168f904acb93879a5176328e0a4a5a901ce3bd0eed280dbf83f4573817336920e7342c2070a6d4b54aff3d62506028943011725ef4c1bd4844d5405406ba36f41ba432e0d5c27f9011de988b25c4fd0d6b446ad20b30a5e72dd8ca3d3466304f4e4e08c6d804284d84fae752dab01f8397e8e0d84372333cd74ac939fc138186e035916bc97610add7aaa91527805180c94a1663dc05a307483d5d55d3044c3055ef28221763a9f97d32f18ce7323cc534c040ac3f4efed937d006b5f3e1f14a8b3023f580ae68f4f03c860a7ca815399fde14f5c76f72fc15e52dac389bc99f88c318d4f296ffca979d1d3bd935cb02641abc97a714fea315a4cd0f83ed13d7a5f55621ff90260f2a3a2d0f11d6552ec949b708604ee1f3ca78f3410b02e2d9cc965b4b2cd927c1dbd7839c09f6b1173447f8bc69a95dc3a3a11a41c812a33965c1f45f1375aa1768e3e87d2a78b877f1761e908385a35a13676bdf4849f8da29f11818e424f2cfd98156895e7ae34723f4705d5d6e6d2186b5c4c5385eef2e1c6e48621e2ba561c60711d48d3cbc0045ca7f6db31a9d9b72af720ab8cc80fa1bb2488e9340ed69e04aa92a5d36d0e681cc112498a37c6a7a7bde59668d9830f068880bcc3e8524f35b0662141591642bad160699c5dbbcf3586bffef322835d3d8109af2bdca94e01e5b784f39d8ccea6b9ed9eab5eb60a0515bc4f321068d03b8ebc5af06237c152156bb842f04d143a60230c325411e4eb0ac2b5170fd22be86cb86bb8aee7b30e083dfe6fea23ab59241181151efe375c00efe67f1c1834ba94215df353864262f666f0aa941f75b0e6d23a2bdbdd02587dac17c0c7534ac3c762478a942e4d7b6cbb3bd427253c9040d55dc44a7d0cdab721e8b0f7818e7600a2d99af03728554f5273c7458689766246818830b89a41d2eb651a9223da153d97e64be85dbab2311b1c295ac572a8b75b2e392dc3b6e550451ac34b3fa00fbdad517ecfadac9a3899074c982a9c0c32b2343e6ccaab8b4138a0994ade1809243ebec72079e6e0e5e25e5c80b985d98114c137e521150e68bb0f71b1c67c3593579e2a01d20b03604c870c05b29397b6fea950b0c77c1e04fd60bbbe98b3f206585f6a0e0adf2c5e270c564ba62465ead3a12dafe92976d209e40df1a8b5802fb1e5a0316bc1547229d3b9613059ca283e8563654c428de7af75c375b8ea622811af8d077ac367c5681b5e680df1214e1254acd2e6bcbf06f107a625891142f283a92196f8e354b3acaadc25f2b1e37e0caede4079c8299f2b4c6a6d155daae72fedd3583f73174f0590f23de74d323f49799d9c0fbce188b96bbe56a2b2abdef0dd9031771e933852d718f66a341b6ab3d18d028c144c34032988509885a1d5407c06c27dd641c2665389fc34fa8df37c142aa9239b42510a6cd4fbbec27d53bf32b3b98e841df1566b7cc4d22c60ab1295c836a8f18c5f8ba87ad135fa220865b53a28ffd8e9ad46ed9e0879c2ff9d9893220afa9de5e15edae078858c0117311ad6016272d90df91e3c5db2fc7f48d5871844df32fa625811b33831e520ef2c8b04b5dd89e565338c56b862ac7a3f9b1107578377f8383b8cc7adf606a9fd816777df6e8e0f35935d6cbe7f4ef1bf2440e02e0cd714ac29912c83169d4d69e3e819816769197ae6d878f709cbaf00b466fd931cbace1a9b570e64130bda51afd8244c859e955fa47701720bd2236298a087eb27e64a6a48d5563f820308740961700de36aff07f6501047f7d2d9f36359227e101cf6aa2e2169340810688fea960930c6b21d9d0ce7151288ab869b406516298db98654e20702047ae4e0377f744373179a50e832af52e5ab882e59e04561481398667f79f7051cfdde07983e73ed20f8486b4a7552ed1b3f50a12a54feb611a4b9afd0f6a310841bcda37e423de93bd513107ea601c338434a9bf6ea0ad6577baf07082a83a8563b1a43d40ff0803a4d9445588b8e5e4a1456176fce9548eff8352dc70be08e1a80f688db422fcecac4d01a740dfbe9bed93d48ad973f8bb4d7025a09728ea97d5f2cc7a3d3e6ccf819e0208fc742b0f8ec06ddfa1c65f59ee01d8620c82d05f38b307287a676843e0181a503624850c33f47b74bcb126cf645f880f4326d87cf48aff11b3e664811ecf0292fdc1e770226c3e979021fef7a6be97517f4c269b454caad318c98bc3764d1e9031d31b54c14cd785774d6cc325826b4b4fc3ce2a8301304e92e6395e41ba12a83635e6ba3b71cbcf65e533dd8d9aa3485f373814140e33fd900eada8f1acd1adb310beeab44f24ac2ac9e46d0ac594491a29fcf724aec8b71dc671f62086b955b120ef7a27f75258ef0719a4b9c853709e7e6c2bb27fa816b10731cfdac57266a86c9a63f4d505f19118ec446b94883129e71e6966fd428e9b1ed8311cd284a38d3ddbc304aa8e08f8595f239bc04b2025f9280f250b763c2662b25f45cfbc6d15a88d10d64914cdd949034a78120a634990a2b6050bbc2bcdcf7bfa4fe5481c9de4d8e94f8b756639690145caa0161aa8cbfc54b116f29173413740dca416a672110e7b6448df14b089dc8cb97ca37864bb857b1b4919ea50c6f72680ec042ec3b1dc4341e6292970fc8798b81072d80dc0eda44569e5d46714ad10e9eb6f9043a05cfc3a74730e12fce1aa4e04a62fcd9db266b51e7ab8b3d43f0770931a670cc5f9f51585f8028af108a8ea5c393b14dcb1112d1cc6a177bcd12965b80a2a30cf0b91824965058cd48a200ceec0ab01dd0a3fbbf0904ae0c06a71bdf4ecd85a492e3d1f6c278511bdb57f7fa4eb85cc80c8d10ae60c18bf3efb8e860583fa98352dc73e317c53ae42de0138995ef7c85a647782ce4f36eac372101799e7bf1e1e074307a984c78c65834c2664dc34e1467adb44f623ece0259f0553631f4389628238f9bbc20e47ce8817620bf281507536ff3f783b72d05babac18b82ae2540ae88f2d3a81270c1dece2a40ceca155908ed952bd75a591b62576e9d7d1ec98a6b4527b300e7460040a850bf317af1f18554714cbe2739a96de678d7892cd10c88bb383f0592c296f08750017159dcc24054fc1cd40fa13897111e68027bb189d248a224ee23cf6b4a01243a27a3a5184c4d395b7f35afc20000211a9acf07c87a68d7749f88f5b242227a8020e0af3e8bf204b598dbddc24e9cad8fbae06270f734c1cc087294a94ec23600c7d4c29627ae53a4b3bd5bf6c24515361d89522dda0215aa83a08eb82a063373139a1b89b8390441c72969be06ecc563948cef525e9fc8794bd64c1f09fc1c33acf4b279489b4d8f4bcb36c8ca8ce33e4a5591e240c31872149afc219fab81c166d4038b3a9ca6fe58de0b8192a2d1fc73a1642f7574d482ce1402cb78edb28f0fdb63b4c2d382c34b4e732cdb35485bd178df8e04248752bdad3c87513c12afd995a74e36ab0f6af4a8315a68f39c413e09fb2c5bc1566e9048607999ec6205631c7e4031155a9f1cea61b938a88a57a6061d127fa91875eda1f16221be4017cd005ceb65dbc657eae03e4d008dbfd63dd0fd25c9768364949329d40424540f8190ffff22ff71b2c3b2fc6eadf32c69bd19a23df15c1f97fc27f2ecb9a48d22f10906481037f9cf7de488f206699b88263f489a9b2dc351f04fe5a0b9d97e0acb8ef2ff48b77fc2aac052fe3f90f64c95fffd62cb8f45b4c757c3c0725d43fed7f8ced7c67630f54bbb89c7b51ba3f99ea898c6d6624ec97f27a49efc3fda12ed7ac6618ce9c315d76841aefc0767764cf201f10cdaa89b42a96d3f9bd2907b3ad412b747beb06a88bdc8a39ae612316f5b15a4b8e16b127d925a95ead97ac2894c3b9f48ee921fa8423b2d696d0ac795c074ed705aad39871ced6e5c708b3d240cfe49d997aff653abda7c197491f15da757b73efd35abee5e4aa65184de0c76b2d1bd857866b8a55089fe9c1e9ab3ca37ab14619e84cc0ec29273775a70bbda4b3ed875327fe2ac89634a24d6bb26ed2f072d3651693f7345d333cdd27e73d9b4b48ca931066148370dd26dda3f8bd37e5867b8c145959a3565fae6ab3ed73464697f3fe7e66eda7fc740f95dfe3f4b0bb5ffab603f8cf47751fb1f25aca5f6e7811b0febd317bf59d455669193f61be04eeb9362379a165150f4e903418f344dfb691e887dda9fd3c674738dda9f707ce894da8f13a7f6771da8f6d35fd57e4eabfd03c3127127e9d746f3c3f70d6c4ea2855ba7d2ddfb32490ca023401f22055aecd2f8b7ada85bbce9e4137a40877dcbb3faf11504a2b2621463fa61ba8199c8d0a93e0a54bd9256b13fa9c350c493c37ab282961426d10ecace0b55778eeaaeeaf58ce336037b1d295fafb8099efb7c56d110f71a061150cb757db5a5a9d30eb3a98e8ce09722c311829ed1d4815f2abf890442b0b77792d5a541e016bcc296ee8eeb7d50e9c92508f2276e5320e26a58d596981b29c7049b1e3e6d6c37bf887f7d0d4492d9fabe62ae97416dd1917e5cb8403e00f1ff11b14bb543896c44f641660677140f2e37913b8bb02c86fcd6b283cb3026e457fd19943270e5a78f5e90dd98f0694080ef35de51e680c7d88960bf7add0f7c601de9423c5d0d8b94fecc0c16081c07f9e8ad92d0877e1883cd36518212ccb214de115b4ddffa98036166d54778f27bc8421ba216b3e09a7bcce2f190fa0558b835708fb5e439a9a99cbc56c1a61f1fe54e2f161985ee9b01bcd59ebf8729934a7af2e5aac80a5ccde69417ae396fde18f8291caaa064eb5bddb15928f0e269a74246c3fb6c5068d39782a3aa1e1ae803f1c8d3d84346fcb5513326d39698b89838e71279820d73c47cc291edab7f3125388ed5b7fa2218256b7be70f2667c92c66a820bb216c57b1f846f8ed316553280b8a900529b32ce60bebd0fda6cb01b343b477f1384eb0725bdce22033cccee52c2ccf15ccfc2ab0cca75e6c68346b592cadf8836810ffe74563e5bb225f7b440adb02300c7d7894c8819c74779cddb4c0b662ca27af6360410b918851ba5667ca7ff60f6943bedcd27f2c6d4ef95f54f261bce262a7fc7ded293f442422869287bf7c73d0bd7d882b532f82d8c7fa1e793f547e45044b1040f2d713886fb08ba5bde6d9f55dabb2f096cf4ff963aab63a5e5c4e168f08c92a346a214787c0bb2cda767ba1f2216b55e518c1ba7663b241543e85c83c2f87cb50572adfa6f1fed017e7de7d9185e0d8b0a102d2189e4af1f22d196a6979d257f00d1aef74d504b1d9b8f2578a5758fcd59273ae1e787fc4569614d3be2744f6c9293ae517db7b8c6db078faf5b5a91359eb7bf72565d9fc476b751ba39d3af7ba97f0c9005067417a0a05f2b8173354772f6b22d1e67d5fb32ff7e1bd7b8de47ba837baaa94a0a8ef7a4b5b8dfe65c8e2bdfbed7fafcc4a1fa5779f95189a15ef47a18d1b0c8a14ebf75afde9bb1d06f826c9bb033dbbdf8ad16bb99f2456c44ba4409b700f63c398cd551373636d299760602a0bd34f1053dbff584cbcd4ddb422caa399684e316804332a1da43c38e61447d14049c6d566acb8f27ee1c97c1eae64bd97d6d88a850deaf0d01348076d16ea0950ca2839870ee24aee7c6c00d46922d09fe41b96060e28acb728822f656271efeaafdb04993e86a75836bdb8ff7a880bc67dabe0930fd8b6c66a1471ea522b5d8b7bf0703604418b7be0a7c7e5e96b712f2e5d8add09d2ddbddfe21e2a5239eb3149bdc3e508d7332ac6fde0c8b817e266dcc7b4f95c28e40eec0c1b1461242be72a15b7be1848a652e7b8cd29964697df579713603a4a5e0e22ebf88fdf16f04995eb90186b5f0ac6e399fb6c4bac99495fa9c8a7e5ad03a3e59a03773cef28768257de6df65d2695759062e1fe4ce314d9bd180c9ffc742f6dd1be01cd1b00c99c2b040b6dfa0064492b62074ec94814d7c5443bf4e58ec8311fe404a4cec99a650fee48224c5043586674d3551ede1598c6dded72176c1f01744c2ca9747c67008cc5d77c993cea23997b714f55ea9c7d5f64e40d814c72ba80e6538494c2e540bf80f1d746db7e77d3f3042d17233db97ea1533dc994702d21a710a759b581d49da07bb821ace9792767981556f3f9ec3400ee02fd697fbe277c6ab04a6e712a5fa8061cdaad8c9e373a60da38f342eef079ec2ae786cea377e35c0c822334dc2b01bb0362097e42f1fa4577adcf4c82dfa86edc0885c6a9482bb4d884908baf5de3193b3ea12faa0907397facbfa9e5254a73a6140027cdc7882baf93be103115f38bb5b7652072674a53174e1642280e6599a8bcb20e16461ba68511d3578c084a72b0b878682832199c5e9e7fbbbfba16d7904f4a0410a05fdca276c90e907a0888fb56a03bcf91d884b971f3caf978c0b879d12285e8fd97944dd70ef7158cf4c892b2c95cd64e2a5d991f19d417ba9ca7bbe528aa32e95408d305e95e9bef608757915955ef44d65f97bbd0dd230fd4f90fa0cf852f1ff5808845f068b37f53b2a6328c2e9130e365cc04cef47cf40d77be3fb388f18ad94adaac7f46805a26e9adce1b853ec503f4424a397b8d24ca36216c637aadafdd3569202b2c6f8588a9dec54e98b693d240dd8a93249a76dd0766f9bfd1ed9d65e39c499ecfefc3cc8eb8c57d296aa13f659dbae55ab5e7f7274e1650b622af4838d1e135df645480ef12483bad350abf40344007ee6cca0fefde50020896ac625fc0a3bb388e5c634cbe5c57a5976c6cad914929c99813068004b516a186ea2fd8976a70789caf2af35acb54a41675610b95567917bacd29ab6a29a3f03dcbbf4cce3da2ea7047416fd3b90a28ccad470330ece2cf9f2b1b0afccf5a9f3df5f1b093d51b21769a19f7d569b80ff998918bf430f910a5131116b33c8788b604630173de5b5cf43c0730af0810f36fa3cf2959d990508b50afcd98f21d44fe382c10e0205b510d56c3693370783d922548e49a3813060ad7c8c49f604218079aad222262809e85292456c8ed536821eb2c11053fcd934d23318fd4a3bbf321aafd17caf5bc143075ea42d7fb1871e10d49c97afc21f0dfd65cf916db6d6bd203178cbf0983d7380c2bad4a5b82b0a186f196547efd851610f9788bdde58c761d6bf709ecf717a3bb1fd25d9690874bff7a77a78a4a335ae65143f66c092a4a87790499458e2ba84a6f630acf07476394610c88f31fbd9caf2341cca7701d6479336f09936ba9e6b3b872b6c5c6068ab8f2ef2669796bdd72f800fb5ddd3acceb383518212b092b9bb3e4cb75e2355055c4db629dcc0f3d7e69a5f8f79d56a217e0abab34dcef2198d0ca9291773262a4a263c3d15f4e262813b05ac7a5cdc428f8bfce39686a08e76a4495ce0d0fa63f81ef72c9d4a59e473a613b7d0769de82b35c57f1e0f9a4805dcce4f741fc004796be421e40ffdd7b7dee39db5349185ffdfd54fa16db3d98c52917541399e04c04a2e669bbb6b4d0f2d116d52958388e68d435a682acbec187eeb6161b12ebe00d87e2f757247bdbf85b7100c32291ecc4f91cdb0ea51a3ee6de6d0b72f578b00ceb93812a7ae198bae511ed2853a3438d958a41570601844746635613b0777acfabd659a2bf9e0cb47786ec799c39e03069ad417b8f79c47ad04873487bb2dbbd492659277c085c82bde0f9daf524c7f05df305038e26d7fa8cde8548b2a83ebc2ca6dd392640cb299c470938901126bde19a4d400f2b148999d998b2d7dae49595f605ff0ce24849860c0a3a164d6e2925cf7080f298cfcc8624833401643f06cd707a9c48d8c88752d134246033452b699521c6fddb7c115f29a4a41f6d9d3674ec98c17a4ae65c8cfa985cbdcb4c91999b9a16d2a8d384bfbdc37907cc78ecccaab23ad007618ed74dce8faa0c512843f4811ea7cc94fadf7a412b313d0c0ec599f0c9add03e8ea3e68cbebf428e52218740c25478c00d52922e340b9d49dd41b0f82e9023eb015a6e0d373e1c1232fd0c7a22df095726ef2cb960d865f7335adc2a1847efd78f8d741abb5ad2698326aa9104d66a4f1bfa2823e344daf2fa36f3b1fe4c5d521f7650cf3e47498b230acb60764192671b042377ec7b6706057f192812af795c55d71be770d9433897b0e2c93081621ee67d2f62131361c8df3c56e9a2f869a941b2b6257b5a8a4680a7a49bc4b390b6b1e70c9c924f15a6f77781ef8bce8a283542c541d6bc7be405cd3f89079ad2baa6be27dbc9e4912e2fe439fd03133752d2601fedb42d37362a69a42ce9832b7fb142c0f400bfccca0746b3b399b11eea6b67bb2a843cfd9d0b97928cd1e188cf72d85fa09e625d4c11c0239ef0d8956c77c257682bea3c5a149975bc9a7f2f0d31c75a652752d118f65827c8812d504b0f90a127e5c0f34615ac3e410a6d39d1f87d643524a4e30ef9982924dcb302e8d089a8c3d10046b60ab3c0b2913dcbe8f18ac82996fe7659b7360cb5489b8a80d92c395edab1922b57875d442cdf38e848695a77e2bcddb085fa26a2ff0a336efd8bf0e2bc3a98d3d73e3e2c63588234170614f9b7b79189cd877a44a37f28678e29afd5301669b063c4ee88e35fddbecf4ceec2c778dc40040b24b471c2c14a23a75ca0589ab993025f814e50c44ebc2b186bbf62011a8b88b8e7353b3452c77227e4999249054fb93d6aa450dfa70287875e23aa5cda3c4e7635e77de5f87e0d7abbfb0b3d5aa14dc6572ebbe0b50cf516b86cce2d8c967dfb0012c274aaf57e8c5ea04815e2742a8647461542dd02592a53978185cd1180ac0efcf96713b712f320e15cd959fad2eda30fd0a25d7f78c5b3942e2771e681323faf567d1859f727de80bb968df3c9cd1d3f6e335e3aa00c9166e93ec38e28df6b4a2e58a197668ddbc84fd6957f6e8e6d3c0302bca36f6d12334bcfe080ee026eddd5322d38dc5712f0415efcc0884ed2b6d6e5fe310f0a715cefaaf590e1555dad8b41cfc72092f4d4a82b1bfcfd02f144a0fc13d2cd82d9fcd2269d48a20e0a0d5a87256fa0830127b8f3d6cbe4ecbf8978c8f46478b1b2f76e4fa36a7d86392eb5300be290e47851463c64268da9f36a261e3704d2629064abe04161cff78b0389813826f8fc9020d1ad582a8fca9ca6a7902f3edd723d45dc682bc6aac4af5f87d29b8f629409f7ad6a1f589a4c761c56003a51f65a2df920e09a1d284727dd3609c0bdc2c508d6192c05dcfbf2d4a35f1611786390c46ad9065d4c1eec20fba338ef0d5cc04caa17704b9a79e2efc0d512b0bfbd8d9d7b2c7d20ed451e63d496cd2c8e318eadf7ac81a2d6de4f97c01f08f264f2be26be7a40b87869d91a46c415f5e1503be9918e20e6defb9ddc0b4c5cce4ff0686164174cf18f4e8b751023fb9aee9cc8f3873d61e76ee58b48ea8cd1ea0f9f655bfa8bfccc7ed2f095b915a9f6b0cba6c96d7c7c6a7fe4a084575d517a927dfd1b42e6f6f1339f6c8bdc0d5da0761c660fd50656aafb40bcfd99e608bcb191774334f0b6bccad4440cece78386dc8bd283981df4873a8d4ed106ee6d1b380c333c8b89406ae0f151a634e001db883cc9e50ee0062e5cfda61b78e556397a7a8cdd887b03effc6b9e64ba2c9c8d5ede6bb937a06ac2d11fbab93d020847a4b9831430a254884d72dbf5f1659c012a2759c310e6e32518b8babc52aac8df5c9d162ed0a598c5819b0cdae3c0c54301a81b599a06462aea38f0b672ddcafb0f9f474f8d121b47467f6147cb32b603d91c78aae101c72c1ed8c854102c8266c4e0cff167d59999561601de9504e2a355a66208c62f6c4ba92df163cd51f1f7b6750aa103e74f75e66ab2d7a7034f98f191e132ebc07d172a4d117fde8c4d4baf5466a658ee5d784df00e52beefc0c925d4dc4b9076b55ba5a213d7102daa07674cc876ffec3ef71ec36026cd0ec5b02cc3a936b455418627a729eb3ffd73a49d23477ac0bef3ee8a647e28e8813ac60bf79cedd8fb4419346ff63f064b22eed337c74459f8e651487716e363c5b35fa26f6b3e7634c203b7bff344cc5b5b9ed40114c403372df222770c3167c41f0be8b46562b0e30ef2c0e58ad93cf055b50dc9e44cc4851ef8f82126893f39491c7b9b3465a77b002165c5a61109ace8ff3d7029a7be48ccf8c041775ed64e2925946d3bc7b23883cc9ec122d7669d0e376099b008ad88bc423b5433fc575689252736c51c518c2c6b6bfeab18e6cca9cb9a540105f8233992245cf18f91a666e9678a6febd4f5a446c233c6abd1fb75fb642c6b5bff6303b378a80dbe325999fa55a961c4dc678aaf0198f22e95e68623655717ba61c0007c21af9aac7d8611c1e8d66e3b67d472c1eb2f81c8bfc75da5cd429187cf44b82784d6f98d852b877eb6b836e443ba8a35a0d1da2c2d9f2b19e60d8623188d7fde40d6102457bcaa4846329c7a4f18f9e10a8b7436b22637439d20a1c4be4c0a04247e7d1cabbb13d6fab4bc8baa474e18d88120f9bfef829a58efe9aa69f6690a4f2373a28cefae6f20e6ebc361fc8278b1d2fa88b2c68852d7756afb0046acd434685370fc9807043575d56c0f9ed05d0018fd0fe6b46fcc80eba9c86618778e9916b2d79da58fe807594f54126379f5c5c8470478daade0dc04e1ecdb0703d75cf6d18c3bc6ce07b5d06034c327d4321d5d708d3fe0e23dac9bb14f68193a08e3248358e9dd5bc8ae5625aa25b1832d20cd97bca0d96392aed10c37ee9de5b34df8574d9036f776ad589814d431fe3d6508c4b5575f823971f17722ca47a7a3a5347590c9cac9677068611e5df7bc2a538278947a157a0683365dd803813382ae9ae3e1f5f7d5b2ade2773f70f8f08be45f2d44f2b4a41cbd04fe690692ab6ca33fa01a8b93fadaa8ee66c42c7017a388daf454c9381cadacbb599c11d0fea4a8ffb5d38a88e7a06df5b9f9c9daa5d223626bf3f02f38711a3c5953f6e568188a0c2b375496bccd41e55aaa79e503de43e65fdd1cc20be50053f3ffbd11988a9857a032cb33bc4fb84a6972f4bb41b0f0e71429edb12499cbba6c583b6d844d4630e37e4f9627a5d16c48af1dfe6d8155a1df484a231727d5bddc08301d0c527132fe0a1142340737c582348d218da153def0b6019f63cb60a3fb84b7818b10caba393f4fc5b8960c0e7b8ee6577a2f4ef6579361cf9d89aea3f47cbf13d3c788b8ea686d56762b57843ff04a706ae784390186e7dfce027046f8716c5bbd046f1d2070b7700435eb9ea2f416365292f10e5c25cdfb6f84f345dd12d539fdaab9c9780200c14e391d64a274c2e65801f57dba26ee362c6ee5c9fe4c0c7237f47f61f972720590496a3577a08762127caac1255ae49484cbf6a4e90f6182866bd45c5dd0cb2d0e12fcf2b65c4b7bd660a575e137d83b4d168fe066608d84a5d981187db891cdbeb55d76b5a5af2be4cceeb0320553db2d20425a413db9e69f366b36bc2e84384d23dc6b2299d8582276795429180c574f0c4c059b201f09208e480ed85ed2ba9f45617fbdc012dabb6f901787a28a0cba440c01529431d43d185731104b19bff2194d849e8465db5db58b1785c8f294875c6c3504232dcc4bbf0dc072797186a1d0f78d9679261a88a4fbebbf67ce9d4405e2eac854429788ce9c93f7a6b69e9a6529cf128f818063b5638f42cc830ad90444a2de04b2168f4e1929bd02c6affba23b681a719d07c6867b28be49fe39bc012b2b8267cb87808d651c228dcfe0c9544c60522606bb436331c04a12322115a0d2033548c5cb5c9e214a69d8258bb47bd153fb961dc64da41757621ee7a5fc6544f35643285d3e982566c4b26400459ab7005683b37483482697c8d3cf23a2f2cc94316bdf602629bb4e81fd62128392306383fd84a51f889ac301a8d6814c0c0373810dc90bcb0244ccf72f92d38f0cd238c18597ab7dc78d86d3eacc859425fb8eb59ac73574da1d99769a02e67ad87d58b62a5674193b0696b6fe9990fb931de248bb227e872467ab6031dadf6e5829d8e271634f3c898b39b38bb45c859ed1ffaf807ee0185c5584dbf84971bc92a3f95f5b72a02d19e1e8d42e16429170041071ec10247e8fc13bd11e2c1e41bedb1cd74f19549c4239eea62fd56504cd174dfd419a840b8b8e74f44f3746e6d5ddbe237b37176ff5fcf455fbea0846c42cd4dde5873a1615e8a750f213058876cad034602d888d3bcf06b68543fbdd491ddb3c4b1f4de634acd7b3d0835e0eaa95e82f13b7393b7a54a980cc9a15d38a14e21f6fd0985302e4d501d9076430a777a6f3a35a128940850ac4daac5f492c60bf95ddc00ff02add740d1d33169552cf3703b949d8606d4c479e68a1caa18a5aeb6e3a186cf9c29846490394b600e152cdd57799566205c3847c3ef4796d02da2295e3462366040d766e0ec02dbaed97083e069cc2f36bba5b6c59080523bd2058786d260c6a757cea8087741c68a6af2c78736d7b77f767aaf34acef9cec7ca15302902a664b64f936eb4972402935d85f12be59ccf793f202800cca6f2f910ebee45d2e387be8cca07f690b34537dbef958bbd4aedca66f9e35dce878e29e0ffbf430da9a53738e28c097edbd8518da97271f1f5b4022f95382517dc8c1775dd3374394e95013b32c485114d87e4986f57ed1e1d6959d5572a30990717787955630b41aa0f7048083ec138ea8a56903c73c83cef98ca4f419200ea21c4d1aede3ed0495979b9dcfea54f54481ad6ce3deb56e00f674ed901a4ca72baac916c279f3599c10fdf8d73b68c2201711d2f351421636e62a12499b0cc0841cdef7c929b0db8bc5aa02623867cd9b79639b8f81525271cc4374347b6c3093165583d2d8bc60117eb9ab26907e0b4f2c415df62e842692d2b7fe32a75a0ed9a981bbb84ef708e5c8e848b7b05fd132e0e1fc43eed90e8083eea71fbfa5e205c6c3227bdd531a8b85047d16edcd0983aab84387c181b4648a8db3d6c1780c5ec80d35186063c89f42a7104f3616888408b5dda2929bbeb1de20402e3888fec4e32b9355ac4a2adf7eb7043a5596dd534fb28207e860e571d1fbe2ae2bd44e7384818083faf51e0cb87a294a2bbcb9e1d1108a3680a5f144add5509cc8b83b1930d20ce5bac6292966eb1798bcbba30ebcfa0ea6c19663a13e93fade91d65f795e00ecd92f9f42b365b2b39f7c29e277b95d08375ea2ede48a8fafbc0687dd3a0af84fb2b1e00f954bfe62e5678d44a05a163bf033d61f55309709779d6fde3f526f4e21156211ddf578c7b7d5d922d64302d9bf80fd9dadce2917d0d9a35b71fc442a1a374f295a9f33c80b932ac9c30f2fa5fac4b7f213a71832092fda22dbac098711ffdbe5b897b2debd50f6a85270ed03716c61287c0c9cca145fdcda479b276a514c86c1aea5c719a6151927eb36830852cb104b63930fccbebb87fb1c4e8cf6224e103de0a5c12025c64bee758925ebdf0000d6b570661a01f83a1ec00c5921d102768fade8dc70ebd12cd9610dbbd618409720f1338e98dbd04de8bf9f2aa25b866211f7e498befc08a2775b2eaafea846320ce98fafe121a1b33732ba9d3585df0e89c59dfda32cc44e20405ebf0b48d16db4cc2523603b5616cb692f898ee471e4473586f4cd775d0f4aeddad428dcf72263e045982d081d3189db783dca9266970114fa03555ffdd1cd86dcc763caa40a44728baf3daac1cc85ea5761b748dc8d376dddb201477e5ca0b08cd99c7d6c09cbc8d55120587455fea5351403bfa9a93f5c8bbe7cc38f33371664b5c7abe82b009ec114fdebd61cf9dcb3272ae06d58843f60d85055c7b018ab50b05f6a98142a89ed18964c6160ae9351254e19c62588b21382ae510791a5a6bbdd445f83b4a61cbd7c064f44d0f53e4915e2b8f3714a653c96a0dc6fd290a1553f67a1c0bffa9a7347743ae5d1159e5e14ea14bb3e2c228ae053329a2ec7c88cb2594d83015410ec571041e2800e672a18ab9cedd71c71c34f4c76371719c55466f09d8fb9e14699a73ae3125ca07b0274a828c99f39e3faeb6e47fbd82b2f370f5be4669e71aac29863401ecd5418a6e10bfdb4e51ac04dd8661b2208df8c33a6300c2e4a143c316454a573c028203583a1c3c8e4b6ad4f0b3a6fe42a5eb4203fe27ebdc1066f0f43b70d6e376bcdf1b22d8e944906fb01502d80c676a7dd99e18e1cb4a4d51213f3eb1f5e0b9ef5d7fd27542e1bad19725ba2598c0d5eee842c9584a9d86896df6d47594787f8404da0b606e92b3f9015f0acf256098fae1b40f4c605dba69c14e25c3b8cb39eebd09f5c9e5541b41cd6b7bedd14825e76b755e97c6fa12a8f70b17a91a9c8a4aea13d628043fb007461ced6715f5b6b0fba9bfeb28b9c80b035beda7c05c5886cca5db306034bb9f911a20b58b303f0ab0e84f0067fa15c88ad11782cbc12d81e1a7bc4aba58fba856af23265e32b3ae0b19d0af59d61c0648502a9012b170e8927c78cbf079d5dba741a759a7eeec2e85d81b08ab82dffb96db7629cae12dfb9ea075f0911a4e2f53378e0442b66e87041a813c30846a45b528cca50c7e1a09d138bb0ed34a4a1b62ff54c98e3d1c2a84fefe99de571a521eb215428bb9ad10611df75832345349c91805e4795ed7379747839a54630fcfda5217277bb7a413fd8002e11dda39e4cabf7c7701290488b0a0a125022d13ac7aa8cb5a7825ee42b13025e29276d16a9da5d2abe847e2f04775bc86720c43494a935829ff7a88bb649fbc23ef9574d6e77175eec85ee8c554ce0fa3ab3b3a3e249e729912415259ac03dc27c7d1b0698436011a6e421ef097f768c71dbb95f6245fe1087e3962035d860fc961e843218f4a14bde9fa286ed212594432221d19c8b05c964e3d96d69313b968210bed6a8b28d9b340728c185d2b76956aa72d2650a428da8936809b26cca7559d2cda39b592fa870ddc389d3aea3a89ec41e210e8e0cce60626e633768bcd21b3281101cfa01052dd5ae1185101cb746c1d2b3b05fb091e934068b73f6b27955a1336aee1f41fc79513ed695bcbaab094005dd7ec62300e2b707fe4b12149810b27c97cce1235b6815a6e77dd92c58ed6041a32683b9251c77772775de28ee23fb205f8e9a86d6a9b550706f65a485814ac1cd9930b205115ea718f27afcfec90cc7141deca807b5b4a5bba4d8cab2797694515c4c4d534277ba8a59f9e7971eda92f53a34029724a92f823319b1b1f6b46d7ad6940503e47ad62e5e996ca0d353c06b325522b31c3660bb231bdea2975ebd79139c4682029826fee8a6684ce97d35a63c8eeba69c366188afa26fb2b76eeba8acc5961594072718944bdb8ca906e7364b8bb6eaa253201ebe1dbb970cd002770997d8451d8dd7579d77eeb52044dcc308a9b3c2a96c9249dd73d60d9244b96181c5f0c955c28af6bb0b147b1d75da4561ddaa4c371ef16f467e3989706f2cf75af2058dab4cc4009f9fbb7f518481802ba6f1567b9abb76fa4c948618c879f24565b462a77be6eb348d7575b9a38af6da8ab971caf4f89ca00e2d40e1f360688a646b9c4d866be2e54c5c15eef0b7682a0d608a13641624744e17a749a03f11d00b81e5fb702b6853c3618c89aa07edd4e2608f64e389f9fdcf17115917fdd05b777e86c036ca17e4eecec4a10ec8ae81cd8350f5193fd025cb9762edd9433e4da117d6110743a17e2cceb8cdf1d75094470d31decc2d54be5fa9035342ae54ece71baae6cf666fcc6b75b2f762d3a87a0888bdd2f824c552d726106468f6753106a730612839291e9b0a571bcf174836cc0db5073bca86b529a674e46f3a6c36d35d9a83fc9276bb088f0502942e64e889c6647c1e1c29ac50e3f79ef00c43fb10aeb50b25bab464a3f8a4a8403c9aee74f76595cf07070477ab56b012aa70ae0f80fe5c6d88d693afbdd52db4742be59ed31324bf129bb1705c83cb7e2412d7501ec498be11dba225922d2cb627635f61e86d95500850cad392e8fce012cfe4fd6be94169201b9fe0d6bb99d558ff6541c6aa7d0feeea68cdbebae812e0fb358cfa25640b01f1f3615ebb2c3e1a7e897d55f73b9c56a24729aa9002aa5385afc27e95ef38ff981726ee4375d9856b9a7204aa5bcbc98e09391c5d5f7e47e72ba1acfa36c705655921c85e2cb46cc8d353287bc9585e71fd93e2490535257df4f17edacfaac3191fa054a96b35cda8caeab3bc6f6912559fb1ae63177c9e5b5304f24c4a2f96616992df9dee816578311624892a6943626d12de71e058d76b653c2c3ed84a74cdfab838e38324f3a9205be6e878c02dac53b0b0a3248e2f29d9cde92055a4c7c5e8afdcced862730541a4030370d4d14d1027aa83d446c3eb2ffbaca4aa01d4c9da3d65709b4975ab9e69af7676ab3e595f60f03168d0505c8da539e6779d7c9f49929268af7cea50f96a65efceca1c0eb9e102a506a7014038a39943dedbdbf8f2936a2f289536b2aa422709e680bfbd014784e3b4be0198ed7a5c1c73985215a073fa999f35157b5db6961b9ab8a35fff2a77dfffcbeb8c34f264ce2f137e06ee27e344bdb7f4fb49cc3404e8fb50b21cf76b4e2788b1226fc31c427ec63c0f6eb03fa6235e39506fd08e9ed6601ed41134790ca90993274381219f42458daa38dd04adafe599ffdc678ec077811ab7981d2037c90bf05e278448c67a906ebaebecf203daf2569137f2ef7ac047392c5df67363738c869d9d618e4cf23b7e960a9ca908efc2fad4ff6aacb9df77677d684301800f7ddc66331aeb7986ddec3e2fff343f656b1c92d1b0ce591adacc1fd9f3b51e701871104d4ae9e4b96e8cb9647c973660233e160cd13237c7865461ad2d147a905cb28cc0a413496b3c4f4c212d71b31a57c9a5ef3f95bf376d4bae2788388c8cd7a7f9bb1653528eaad09feb03056c5ef30a241662828a7b7fe49da8988d3eab47411b5bac7a78755ec475e97858e6097b342f16d5e1380c8f30e5c0f7fe1246968a29c59f75d56f47c38cf5dbc3adc6afb1eb9c895a847a7ce53a0ad1557e87d045c48037a31a341714bcd743778d3cdcc2eecc5b3de5b2998620334ced6e659eae686d121f5a6ca475d4b484ca78f55e2468d58bba5f57e6bea9cb41091c054dda6ecfa5413680a3d4a131edcb72f76cd4871f124b2f3e206ee5b7c7be42dcf2a0af0d7b965f82872d25db676ac476dcc30b0141d42d4ba176c04f812837ddbb104f1008317e6b64468b5fe2c539d80cf35d27297d340ac1b461f0eb6385b3d29b47236760603e401751c85e6c5936ecd88b81ca94deff1a9cbcf8b0a74c9f8d486784dcec262c281f50e8450e54429c0779071d4d70bb5d21a7a4c3a914efcf542250740733793af5314b9534612bb779d196dad07d356905025858970d8483263b005b56913103b6a23b716537ac73711547a2722ffdd19189d1ae2629a6016da483839c240dd611d25221cc2b0c61393baf303a7a2fa8b0afe9f92675f5b77abe2ce3a7951630146da99a144a4b9d786cb8c307db282ea22df1fdbcb8fbc6e43325e44f88a41ca1ebf94a3c8ce08f07f75ee0474b81bfeab0f02aeaf3edd19ed61c76f29a3deb0a0b347d6872d3843119dab0481f86d00b23d8079652f57804578d4049cd8c69c3a591140e1a491350ebf08664bcb4fd12cb49829b573c1f6490911596aadd967ea418b5b62a5a18d6d5b0b115534550886e8a981fba924a27c26045f08c7bec803b0e2c28e52bb8f575a31b2d2da098fc989e8696aad3b80e0c234123ec47c946a913b156e3619ba20b7557e8fbc7bcf3be16a3d2fd1e4a7d34c6e2b4fca9ec6d53ca4ad6edc08525cb072a139926754dcb06177c488425d3ed2dc784b8e177e2c2fbf88b96194e18048d82a45f6b5286ca046e58c5900086c3380eec995b8878aaf969b313c7dc880d508e0d95b30054c50e6a0794b4b0519e336093e58d297b5952c533e5750d139248cae2a7c8311947d153eb1ea1a436032224040119d539d6e15ea1b5b1d1916c728e84afd98a57ef3bcb36e8ef3c9d6fd517e12cc62d589111aa660bed5c1cb8c7a99ed6fd0865c3799c4d38a7c1621f2c0613f3599e3c609084ada36e95d99250dfb239f7571a6d0aebdbeaa5ac2db8e2f6700a3ab535a7601760fd3e3f3735d4dbed1ab4eacdc27e353c1d95adb86c88a36d2a211e529ad6c9f3218034d364b9195add9dd065757779ec626e1c2aaac37ca5d0798862daac767623c1ea54761cd127fbfadd88aa61c533bd43a69ac1cdade4197f951f24b994eb76fb522ce81b029976630d3561c7ab519003ba2dcbb41f37742ca91adc048149f0d24dba555018c15472cd1344058304b47171216443aae89a512935a41d8207501c0392210e79819a70637c63fd2d26d2474d7aff1511e4b2fb62dc126dbffb8cda5dccfc3cd5684c6d6eba73f4c50514b162cfa59eddb476bef022cc65049fe862beafab27e5032a562f7a58cee42ba2a7760e0e22a4dde66c23060b8a8b3e05c711146a5135f18e83e2c1bdd6ad78ad59f2640925b6739fd1462e9120abf12bd86fba15b4bede422cfc25ec3d7956486859696cb01b147a8a040fd4f233b3d26214391ec6ed0893a56b2e9187b27b0033db4314986077b1f7985780a38a9f43631a9d1b08d75c6ec87a0b77d1e6cc117c46461348465a3e81708c12af8dd4ea7f2f4087a5e90d3be960ade227cef0b1c810b5304ba7e4975a745d765e68a647c9bb50a7e3271b8dd82ca60651c9e54c17b883f594205136ceb3792ba2dc243366515e9c2d53404ad4b34365f34d761691ba16eca9d9ad0c0feb0638f1ad6cb46f1a39dd8c3348033e7ea5bad6b1b764342bbc206d0ab7025324ee9eab101d463cc2db68966289c09cdf34f2382835cc6d8ae0232f0fd8511c58e5398df16c771a6eb0cdc04cd4bf9aac758022924fd78c68968e37b1562990eeb43fe69fcc63fc1343ad159bcc3cf14692caaeb247714b10760232197e22311ae00f921f87157b2468d0b4c26304665333e3f7826d21958c645a99c346e83dcf325fc60de06e1940e2675394a46da6e724fca22d499da963d716a8465d70ca4f87bf8579ff022c3795b5ffde917acf04fdd3f3d943d24cee3d410f48cc6fefaa4d101e72aed48cff37d16277a71ec601325bcbf5d8e52e517fb8b004a4eb401e148bdb11370bc4c2332de87d3fd56d3b1dda25096b51585cada97fb5bd4755a1a40ccd3b3e10832fea1eb2e6e29bab3a4c277566a6bab44cfaee578634fecddd1dd678db79d8efb529c548352750d88ffd63d4792e0809d91bde5db4a503eab9dfe58c9db40ea3129083f1ba44cdbe93efe0bcff2dbb8ac133893089c40f38d3b0801a226b5d3884362686a57ac65a8e0d162fdedbe71b5a37ed002b5d13a234a9ac410ed701af4444d59cf26b9f2dec483953833094266eedd4f94cbbdc81b8510c96952331e39e45aade8f1b8d6e51977c751e6f51de121dc3afde3a6b156b46fe57b65e6703d01b8b8084cbf9ee5bb1950c44e25927253741c82391817d0ae93cc7fc2aea083e039723056a4ed0666404a6e63ce6f8f71b745e45ebe0af6455c0b8b8c41762f6076e08f65a8acbac8f200f65f08bb174b8c02a331358e5376a070a87e95610c461268bdf1ebed1ba6c55c1106108aff778148861a12ea19248ac303abc1b93f89903c3ee445fc17e6766f498d7c0dd580e12cc547c80894affccb818f6e9a0d00c4c48b66516ff05f3593989b97e3d2f85a3fb0c5d39963e8d70d24ffe85f9f374b4f1fee4dd102452c45cbb26d0bc036057e87fcc185868d8bfc9e3044fdf36fd95aafefda549cbcf7c35c321238a0e7cfb767d288135825f137175a5b6be82d96c309f9e1a9ed19a4680eeb649bbd820a1156defceaffe919ab7b339da2334533ed65c7640d026b87ca3a1e33ff4ccc43130a51d8f728c287650b0d0918a2b0c1e29554d1d1744c54679b2af029c531ccbd1a4235940cc0af85eb9997df62bca4f156de7470c26f37ade8105c93928a098d1f14eeada04380d2e6105688e375e235b09b57fbd9fdd15a7bb00557096702a1eaa458c21555c6fb1b3bdd617055703157202c1e84c886c760aa4d256905c44e2019118c236ce174df4a1ac283dc7a4d4009a0fa4e40132127ffdddfdaef3684b8bf12e78d16bca9f033d7a9b7a7e33487d77e80047618ae85a0217cd80bada2d9405d917bbe1cd789ff556d11f2100b8acc2da53730a2c154d4d53bd7c8c51248497df018a59a9f6994314b5490beb6e0f69a4641ed5adb2d1e1dcefb044b25e9bb2892e52043b6e33eb4cae21d0b2959a81c20cc803e992ebf49432e7fc2b657366a5a06f34ed2e20cee44ba510908164682512f3da699e53057cf3847d1c959139db40289779623bd8019b800af266ab02e6c0ef3613ee8455b09c82dab35c7414ffa80be4cf0414e6a2b4415e7992a2102a383ebbf3a074c4fa37c2e477cc63b15370654dc112b7093ed41e058906ca21a0f99f0b04d8dad78eedbab038560862e5bf33c7444596434f701ad326360f0420acc17c729c85b110a599cd5f74d4b17727c1bf86ed1dba2f4b87302740b2bf452266014c93dab9ced45355b905959d55f724dcd9f56e3ba853d7e2b01769f81026556b8e0131d5ccf20e210b63b7e047d948d315016f1d34a966b4dcbdac01f32eb0b8b9ef5903cf52d307548169e02a6623d9474be05be65e705ea75e0a44f048cd30a1760728e86607e5be7c7ed28b9c862652f1bc449240ab1904ae0256d78b1422cba71138e165c95f4c3a4587649609cf98c53a1c1f7672c09688f21580f60c575183a20b1fe2e4001a226f386755b4f73ee87444b5c8562f42cb09668d14570e1cd2cf4f0908a3c4f7aba021b51657984419b5329a007105b684188572b7001f3f345c4cc17d4754d56682622e4037d35a6b30868e4e2e894fb87dd5714c530fb251349b95508e72637f85121061e566524fbfe666fc5701f96a06dbb08a1c892a8e30c799908f832dc42f6240089a499cd50bdd313d9b56df2ebb9a557e4b8e8a5067c87f6ce849bd1d7fc9d64a7128364126cfdaa093ffbbf9556ffbb62892154fd9b5c5a2c54617512e2f9fb633451939b35568c0c8e10ac532f0b069399982c08962d448be1f44badf14aa0d00fa2f8d0167296f54b430c7528ace0bb3f97d40bf28d4a622f40568db5a37ba67470730d5a0b0aff89e27fcd3edcbe572d7a68d42b7f542764b07287a7edc1702c28ed7e4f6ab04365d40a00bc9089f35c2a9cb3d9312a5a7e75fe770f40c35c105949dc1da4c885f05fc8b9dc57ace5418aa15b7953b4ae98a66200c69bf0b5ae12fd86bba46d61482b6d45dea5d41f02ce63d9426c60bfa2cbce6b985c270637238bdfb9ca1273f55140f03d68855d491552e61bfa2eb9b431ed01cc00838f73977469af211afa4812a1fb9a7a5ddaad016195da238e5c512a6f5819fb9381f79d52da05dfe5fd09e37054e082c0781b968b54bafd6f6a95d9eaaad14a0892dcfba3b8541b72c2681ae00243c8d16e49fc2128deedc9b07da77ff2c70cc0a9436d6965e782bee95a66598122578a0e0b14c2e5d9d53f0345c9cf9473b303ce46a062fadf36755fcad3df413303c99a45236ca0fb4b39d0712c1c40826bf6bab219ba50579db2dfdbc235eaaaf1de8e840d65c388a4ab2518064eeee2da2760c7c5dbfe96165be97d921fc421577d9e61936be42142031d3ea0ec477a0bcdef0425c134a23d28a07d26b20a0f5686e98c16b7e605a4922e6ee73c643eb1a078873fc17782c40cc86708666182c6eea0cb8f295ac46eab1e96b162afd64c353911494dce4027b4e3c8bcc50f7ed5fdaff2cd8e357c34d0aa45c69218ffd1d6efb6ab5fb7fc98cde15d30e20a0eb4baca3f39ac0238478bee2815e05256ebfe0f6e91a704f48b86415ee36eb8d703f018375a00a8f0fe110ec79c6709f8e3a38d7821e31e3da6fe412077fb9af1b81aab2b425a4ce2f56e8fb115cbee1f73699372a111c4816b7ef4989945bc858ebb141c5d17d988c140ff4f52b7a0735afac892b8be857c872d3305a2bad03f90a7bd3e80325bdb98993d8d9d24c954d79b7a9b2ea969ff7d5f7f2ee365d360b0ea853cf068330f88de6d923670621d442fe371e99b122bf44990157a6f8ea7329827f6e5064b3365ca41f20305b6488e9c0765d01b0d051840015da1103eb727aede7e2079e5ef2c8dac890238be2479c800b0e6644d29c55cbd7f0c428188ab7a360c076b14a792b3fb9ce26087061bb819de1682ae644c4423800205c0261e58240b2a0eaa768428f5feb1238740f5c5d93f5af9f7c5fe2e3d4ce072eb5089344f9fad2a315cf6f3aaf0958cc960fb46cfc9b14166fc2d5505e90315c2f8df62fda90057060cce32f731184c056996cec976e075200c8f7a4978f0b65fd8fd956ed5535539c18fdb72da80e2885683f7ae3ffacf5f62ce20a5b503427d09c392acd72ee8bb0f9d79fa661f181a0e0cb074ac1f2dd97e2fcc49516a82ee32b9371027962398d6f564fd8aef146c7ac9dcdb72ee21d015b6bad562faf93b211e0034b3db785039d93c55f038f0037018db58ee0f830ab89bd58d6d44f841301c6fd486a921f1b131e5054b430daf5b0c640b19b0832d657c7922ce768b6c373c2ad7e8155652199504970937f649d523522e8ac1420ab4adddcc467cb6e828481df4615faf412aba55a61337d85c497023316d35c6288f8c79dba8ab87eca9a001b2f1a4603066751ab85076e08865a616ad28084cb06b4f684ef0dd88cdeea7ad10f2855d16e3dbe401c0db67506119dfc6a35e6de56d842408b7f4302379ef3c991e5a95573a1eaf2a6143af3035992c081a5f11192355151badc434a6e79302a46f3785d1210707952daa7dfce5d12f4e585f6055071e8c1371e56132e39daadb951ed2a67c29cd5a0424cb600f6c14bd035f65c027a2d1f6c788a5c41f5d211ea21697d70d0d0bc60afb1fc6de404fcf0fc20e66a3c2b8dec02c28a0733f8bb6232695ff3547c45b70e63625b12b2df1add0bc1984a56fd0a680ff02ecfd79a532e00310d6c1bd7f1c099c2960c0c7322050d7fd1e8e3dd3a322679e4b78bc129d850f6dd8073a3019070e4dff6dcd5a8c69405d3e8e2047ab46954566579de7efb4fd191037f3143f9994fac26a4d55b14681111c3761deed439840062e480e9cd0924b8473b3fa7b531c252f1b805fd045306da56ecf4f9f2b96675392e69780c57ff543b20ded89129d2b15d510e1e7668fca221b128a5c47108563ae70b9e04c3933d64758d93c08f990424da4731640b64091b1071d0eab429d2f18a5fd075574e046557d02a2dfb368e55e364edf25cd6d880c8a40a3cdc7ea5fe7ac6348372324f116688a4689b0bc5363b049868350c3f207899d60707bf9e86f8eb83f06d79d5af9e08b4f2e9535a009822c3bca82a2d3929f9015090a434af94aabae418a74eaf87cb016a8572f0175b8da560eefd5f3b3ad2b0e9d5b47433fbacc6b512930c0302b4b9a1bcec6c0183693b404634a438fd849805ea7954af99ddba7271f14481ac9b3bd739a40d598f623b65fa2de8d605ad195d5597ba8cd26ca7e3c98e33e38c9c875a71071d77fe42c87d88030302e70fe863716e17ec25d719c0e5bc2a4a775ec98639033872d632e8b3ab2946a1d903e4bfa3c7a4e59b3274b24bf7117281b55623559e210cd2947c236a4f15f28d3a35fc4634ef9400355a110d4ab7012b1f34b4bcb35b7f5b00139a90f2687179ed506b313bc3aa332761594e786195dfbe58554efb01dae5a0132b92bd31535d8226cbb53c18efd8d5b0b22458098f54d4f07e1996d3e6b8fc11d98cbbb0eae64d5d666f376f4ee71b37c2d94c2796fec1a931edf4780c80058dcb6db34cd19803c8123406c2e1141e80f3d35fb8f030a2612f441dce6a70ed61cd32d9066487960163ed1d0dd551275bddee75876a7a581fd80739c90b06ae1a89ab03cc9443b86122c4455191caf75f60fa616bc958bcbcf37434be9a999f36de1ddb83ed8e3f1a7b7e013967fb8752b6e3df5d5d98b2108668fbb7d07d4b62d79dec2a1889dd096a84ae4933c0464abe16321393bf6adada0e84e9446526b245e5dbb5c101ce17dbaf22f75b58dc81d4db2bb0941dd10cc75b4a0a35047b08aacb555afe5a93ca3d4ebe9ad2214286b30de54529c5a7a03669a0f3ff6dd177cebd346bb3e89d46ea27cc4f6498c3130e7f9a9138920aeb691c86cead09f0da0d60c8af1b657440cf20dcac6310cf38fd8119e20768d2030e2973f8571d5fd95383147aab56fd70ff08e359294e431c81ace37a8e4ba3cd2ddb1ce473a30d77790b8780ab1132567639126775a2027e7775108b000d3d8cc80b46940634168604a01668950a7566439c4a541d872265c49826da9a29e49b798461d4b2f54dd3e75af0d18e2e982c07e4165ed43b993e1c166fd1954ed44c42dfde4dd9ca3094469bf43f90fad6b69edaabd0424c361d45ac7cd96a92c5e41f19fbb21c47d806d88d308734ade7181bad793e2607e809507b24043f9615a0055cf9533dfbe22b95cc86a856fed706d1b10f2eeae3b278bb406bc1b6a0e5cd01b5229142fc98fe3f0c88cc2076088a0aaad6072f06514542386af1a6e2a63981facc1a84880c08b11a53eb66c429a6d1cdfe14fd3eecbb0adc3fd5b2f231de321500cd9476aa4d730b2316a1f996c44fa58efdbd19b40ddad21ea628fafeee9cb335756a4921f79c8557e23d1b87e291975ddbfeba1598037b93ee9138a73ecc131652dee06b1b222986a1b037217bd81ea880c148bafdfe654cc9f392ee1c59d7f27a96ea9dd9f427ba651efe1e2da1e9e6052e0c0f1460ca81887b1330f53dffbed08e37752d70657f614772c67307d1f78fc20d681b9b21bc3ee0dcd7fdb294c4f5771333ff7fa83907ff99be9063f61dd8155c803fe8d21b636cc6b3ba05e75046f3c5ec7d989f7b09a2aad01cdc632fef4ae41af46c540a6d2bde576b9e3c7556706ef831d3f3cb19ea944243bb56f098ede31067339a4dd1d2ead412601806c73c2aeb62058ef9397bea44246b934539c947a377d4683cf1c63c4e43df79348136db3d4f4141c158ef47bb940848360eea9711bb2c7619b484a7903780fb8eb3c018fca569f0fab43acee263e5e8ad785e7daed974659094beae5b8f1e44aa2c3bf88dedbbaaffc594e588279790080748095bfc6a4a14b4d10dee01f27a2f9088826cd78e0a8fb18fe681e0681a72b7499401967fc0f1e52f966b90c277ea4424f820cd9c2149160b58a29eff4543c18ad9cc1120c2fc9b06e7d5da4ea8061fa713bc56ea4d8d47c376aa75a8aa7146c8b6fea0a53386f4b483ff6173dda17124cf1abde5656e1f334a761af4e005e70f9ed391219fba58ef4fdf3b43d7083fb45043400942309db16966b32872b64e063c60b91d9c8b98a91eb1454f1ee6b3eaa3950b911a252c0ac177c0186e5d6e56fcbae368eb9d94c62b000325ac306dcac00bd2a0fcc38ec124495ce21b304366edf2b82e13cc540de5fe89f2014c3a462ffb8da34a2b6753d3415106dbf7e2ee992f700c2a70f0162108c4ed0e4c3704e128e0103b2b75a73754c34010a04a53b5750cec83a1d149c26494001ed554a1f9ef4e2951c4cd6700cbe4ec0a46172cc02ed785e4facce20fc068027659861b1023819446f6cc9cb1287f0fdf25d97d0d579430334c8a66fda665a43194dec362e871da54c1b423ba903a60399039ce3664fd07fa55dadf403024d8ba725d5e5e66a00c44f5c940e429eaa9b7f484ac2fc9a8c8a9a53a7174c4345ffa39cb62865bd8be870a56f1f68d7f5e7ac8b79abebbaaeebbaaeeb0f6ab38c990cfdffff5bae371bdd18e9e8ea1982ee365bef1dd76f2a368d0ddc0e29b989ca63e9aa058fd11459e47464f479b6d385cb88cadc69afe9ee5e2eaf0c93659cfc902ecbbf1c9bd880af1834b42112f9d8b534ab80244d310e0e0984ca8ece5082c4c3c43a02ab3c4b30393286bc1c15a36e543cd8ac2a3b36dbb66dfb03dd32cbe9a63f8d8f4d00051c2f23463555c4230760573c406640b6321e5284beef1c9ff0c57343c661e4cbbb1464eced6469604c093b2c69c24ede312b89f25fc9978273dc0c0ac743d3b901c9fa2c8038c9c18add301ab2816e51f05cc513fa9ffbd712dad91ab4ffd1e393edf8c5fd1ba314ffb95e85c8d13ac2fb6e431a22f560748d003762b253a8991bab2f5ba39c8e1feb6869c425e82b6379f31f21678fcb02ca4a83dc106eda15d363efd5a904eeb953f7de7befb8940de7ce90d70c99e6e62446562554d4e28c72c58bf972437db7379b0c90c4e58ad8500dc7ddc55b573f29581b0b99281bdbacebbdef36e63b66c839e77c82a790a18d59294e93d6e4b204cede94892753a21583bd6973dc970ea133768eae58f284ddaae4e5962814ffb80ff3386f1659205396784c2f11004491e4922851750cc32f689d6c54e6ca826405ab53020ad8f4a703a408e5c5898a66dd81d6e6db08adfb6daed810e59c7361ef72ce398cf2840d3b64175125d78b9b67c0404a5965ac20c1966e0e8d29a263a4bb5a015a52b2930fa4501356d9b8d74d2e37984f604d97c3d4bdb01aa572d984d5e38ca9fcffff13fff4aeeedd70b4d0ac0dca6253c3350b5a85d6b4ab4ac1f9ad694a2bf59e98a04a213e8b79aa4392a8b321232ccbe5a9ac53e20a819a6669756dae29c7d37a6741a7b3c0fcd759e044b4bba6cf6ef276c680973124b0af4894061cec11b5626547e1165b0cb4fd7c52b02ed58593450b74c6a85457d50d322c1f4313b3bb4759bdf2f8efaae4371ed7a98bd6141790588718a90c4b93e789918f14fbb1b211ee867f602c6b06a35514d26a6727bce5049970e22e006605059592f441dde2108535cd7a813e35415a5098a580f1ada00314ab2035672877ba0c6f04ddbb3583db69b5f9fec0ecbdf70e4c82f6a096774137b53018233dae4daf1d970c3860568d2f97243cc28cde5a7438be283c9934490f2b568ebbf78ab4594ec2aa0d36775771c942b8306d9439e7dceaca39e7fc04011c98a0c23adcfc7b81d5da246b7c984664aa9c74f2bb7b995caff7de91983486b9d67b52f4f70526f17879c839e7fc3613a13ba6a946717dc0c01a2bafbeb6c8942527c45d95fd7fdbcdf6e59c735e47dc581cad31d37008cf177c040a173d884a416f9db4fdac711cf1ffff7d2603d659bc5ad037f57d3d2ea2dd19ec217fae177845d2f08a0601d15f43840f7e4b596f724685867a01e455149be2c2d10aa74060d2b4bd779bb2ded17a8f42d9d527471c88dc637f98a42396ed9eb87c3040b25942adde30c792586ab37bec4ab36b411e3058d1d3ceacdadffafedb6a1bd78dac8e03f81105720cb985a3cb5614cd4655cb83a08b624fe884fc7ed800f2602e7e773adbb8ad598ddfda9167779fed4ec7c1034c70e1c3cebcd1174f598c2399383ca521064bf1081391a78b8a54344e712070a78c7c1e22d7921554c952b22b5eb4eb28c8f4a0f7de7beffd64fc6f4d86dc7aef5c99a3f5de7bc7e96e2fe7dcc6c4d3920e992ce5948554c60f3d649baa16ec8751d3f59b8226ba37cd97f3220a5ef76a9f72e57c1942c1796e04441a1e8e61415c5c15344861ae1d55641ba2e6b8bee668331c0c9184dc2d1498a12c8e87a24d088d4a4d76660831838c0001d8d7490f990c4cd6cc64fb4206b24a111922298b6bf1f5ffa6cdfeff471d6dfbff39bdd31ad2e9f9d0448e61199755bf7e405863218f13dac7b6ff9ff693d57df0675bff702fd8beb260b28f59735f65bd98aa42148ca064914a0dec11764dca1f8430a67ca044be94ac14a5196c14fcd12c5c97b6ed5d9a290306bcd534046e8da5801d6bc41dc25f20a331eb9c276c9b2662d3c516d55c804b387085b2b0126b96353f437f7442ad340b80eb69018efaf06e4d535cac7874c4581f0f700714c8f1a0e2cc643d3b3a220036751ddbfa8ec15c832e8870000e280c29614bca91ca52f0e27b92f5e8c9a2e0cc797bb4ed206c1bc20657d184ee68fe529b39319936252936342c18f315d56c91c2449e1974e46d4a68fa4863986bfda543c37ee1d5e85e2264277520214193cc8e632e887f2650fdffffffd310dab6ffad1cdf6e3dceec7643735683e195c5b109785c6a8e60183e9b4b5f31561c769e3eb6a7d1eeffff71b4f0f1773a60adb3607b6bad2fe75d4a48da15aa57d8cc38c762638c357324e6e8684891d0a4c14aa0584bf7998c28bff110eb2cd48c34ac6defdd46bbd5ba0fce545f5438394334f2fe40006d8210c56e9c4c2bf16584a60c768e4c629e12d1951092db213c1d0bb9aace5cb0459e6172995aba4e5001bb114a52a1bad419651cb6dd31d589e8276fe65989f0f4d65baecd8b9780f2701235bf7a9098691f9eb900ec46d40619efa478f7a9d1f529fe5959b6bad90f3e082aec0148818ccc108afd35a524fc80419d882fdaa196f059817eb181a212ffff5fabb91c39e79cd7b462b4f7de7b04edc85fa0f4a2f4e285e37cfa9e4232a64c561532c9c62cc6e39c733e419b81574ed49286b2a79b0d8e57185832b5093ccb5a52d55e0e6cb6ff5c6ffe80ca1386880aa85b1dfb766d0139409254c64c2403f8d8de9093aaf003ccd8183a9dc4ce9bd30c95172dd962145606065aaccc2bf38f0a0b263dfdffff891dd7e66e2cd059bb729145cab9c0e0b8bbb6fbb3a4a9f19589addb162b4527ea3f24c4b2a6c14dee91a2ffff1fd17dbdf71ee6fbb0a0ee0b890e0bb9d1c8f9a64e2df02471aad2508285de5d781d566d9e65e155983a6400ead6ad4f453b300403ece0e9e95dec525caa30b0be375e30956f26149535a19678d8cc5ac3a48bf237e3f3ba3a166dfd9773ceb96e2641188d941c855545ba19516dbd3c6a884a2bdad5c6c45f346af51d64c2080a18388077c84f3853bfd90be7e9036fbac4b5ad0ab942c04c46cb97cd1d6db69a0c9fe5a1e5531512bb44cc0023e2087f457868adb1cb667be0d82148820405f5b0f4e1605daad15e793f5e2ed068dbfeffff3abba10184aa3a16f671730d32938b0c0a5f51fd4eefbdf789dead27d6150de8a60fa3ac62cfd809d4115450792545058bbc7bd727223ac2ced44bf4de7bafcdb59182c7d0da2de79c7310b843a31d4ec9ff6f17baf273a14bb9aa0dfeffbf4ee1777c2ab30695a042708c0ac9e6b84bec82f3810396c6e8410685698a83475773ee20e8d1d474b483d47881cfcd16994cec0a476af602725e24c18f3486b9767ba6ff1824feffff13b49dee46f7de27669d0d31932afffff62d39e2881c315c851292a4361f2c58146605be4086a436c3b25594060e0cb414b34b05448a232ceaee5d4c606520e41edf744bc51cc0ad3ba1b50aee3604279911700d96f4a40518d69f78e60365078a7aed562f4d0815b8eaf1927495163c771fb20853713baa164fd13f7644d08e38b8dbccc8ac67ba76ebe07663fe7f37f6dc749c73ce55b6bb783adb4d6bae81761a681d2bdbfda7b7de7bbf0eff7befbd47f4de7bd7f5de7bbf10cc59316df4b55f9080d057d611c4c1991a7ffc5eacd5b2112f279d8959ef43be8b2c74aed0462b5878b7ffffd7cdb434769ecba2827a4141583b44f310912ba58144e687a4695611969da84101ffbf66a377f5c617172ccdd90aadcf60c6dc669b98dd442132a03512fa7885869037bfd1182a02221937851c390950a1a1518e24214567ffff7f02376692446ea74ec9fb89e59672cc35486a7a7f70cb1eab3057b1602e2bce0d695009930b49ce2afda6681c1a3c1d34e7b20933246f4c54525d923080f123528198b83f1bb495291d746172adc4623c4fac4707a2a91da055f904fbd034c0f496a6740ce1466ca548032335b95f588552d9f919bd34a052e285837f10e6acde6d5b035e4f30651645489ffb47985a222f4496e2fd3faa7a6955cf342867212c3a474c2840aa979b17296d11a58e3d3e5a06c4cdb7f7de3b07bdf7de73dfbfd55017a69228d723864b4ca826e50b4e6222f20eb7440bbc7b9de968f1a10c213599c4904196b85a4264348cef8f00b72ee3fca76dd7db296fb38aaf2f264d4bd5255b1cb78f892227b9ac5def307fa62affff56dbfdbf6d7141897cc4d3d41907e1503fa27896b4be93acf01c311f27ba35ed8d6b5b89f69b8dd6a1bbde7be7d118e6de7bef13f408bdf71a4982be766920a1b4e9b29007de4f1756599872bf4497161211d397c3e57eda05c533a970369bbd2147635ee16abbdf42b001464ac52c1b2fdddc24d893ea8d8dc7145aaf24077c4201881a39291a3fdfa2d6c752c74f030bf4d22c5c28f86cde1a72de85952819424877b91ebf6abaafb83aa79dac5570fb42c5519b814a85bc654e99c61b176930e672bad67167ad4a5cf41aa5c84b37afb2f27968d0d00452b671e5c1bc05a3a10b0c42e58500194f09946345bc4266f45e7197ac6eaa4e01a83c429fc64dbf591b8b5d8f7d4e5cb680e194a56406a2978b570a9555891cf386f45946b6f75ea375b10ced0de3ba01ad8c77e58d31a616dfe0f8ffff27feff5fa2bed2186e351ebccba6dc635c8fa9b6badecd5480e123d3d10d17b522c099ca0c59103939840d8124a8d0e368b4def6b22bbf28ebf632308e1629f7ae2d8b42ce0c0b706b1da376c0887b1d63e19026c1981e35f079ad81068d8c91396e843840c42c445b4c275f4214fc8675bcd1eea6e944170513608f4c98d99f4df1e6303f2c8c8f5557574db9c30901c771a725afb81987af51aefee1fdffbfeeffff2f3c30e2450aad02831d3d0df8c10942599af0a45e24c7158a6e0c034004572ee2f8b3d3f1e3ff3fd4b6af399b0d265703476fb331cda5efe23603064f1405e3c4c66879779f1c20b0a72e91a44bc4b7ab8a1c21e60ab262ca7049864a5aace9913577a4bc442bae9fba2c5ba13b031d39114849039dd8b6f3ca39e73cc79d2581358d54ee33710f8cbaa8842b9e2b0d1000e7d200031a08040d44712c9034dd311400030ec49cc8784418142438440a860241001000040000001000000800200c0e0240a3e380b014780d3e5dc4c0984799a1f9a8ea435c5acc85c96af25c4395c481c00a420566c57d51c303806b02af78783c1a8b5e8cde03024baef295fefc1153e1a94f9be1d4afb2bf0c4da91a6de5e8f8f567041598781f256903d583235387a0675b07cdc44fbf45e6f805015fc38fc0f59bed0fbd049983a27d8f6985caebc1deb513c58c82d377a899a2eaef8d03c23e2acd81415f864823af55ff53a979ad3652f0a2152fbf1ce31e4beece5dd650ae773371e496a850f5c1d0124703c0241cb9fa14f004b5fac8e9b90a1bb8b0d602e3773ac42802f55ac2a0e38a6b51b82f3725b9e811e116bb7c837f27a121050c3b262abb37d9f5948226a78298cc102eac36b941c58b4f721f85e8161bf4d4f9af6a54cc518d59ed4385e778efa53549ed7fbb8bfe592ab62f1eac0dc5ba51bcec22d65ec5ef4b08a22998252e7011c6d431af82e14a617d4022808e116fb1744c151be6488a33244da50a28683f7086b547960b29fbbe87d6eeb82a0b1028852c5a6c9b1a1680e7de0c50c8cc6a95c67bf4ebaeb9bcba6d646a22fadedbb8ced5a112ae611124aa41076f375696ec53eb0760dc2ccf8756b0dc434d8629138369fdbdafdc265d0cea447948a25f14edd65b622473840fc59c9d6f4b5ab14d7e2f18090863bb2679710b511705db223b45bd9e09fb2edf5bc98abaa197a63e3b5c3fe7d46ae73014274a764c9287e38217e6191afe2ecab0fd5bc45d25e104efd6b86b3ada357a83c1073f09a159f48896eee068a83ab85308f5195438c3ee9c40832807791978ff1218253ab0dca98a6a57efd496846efea13014c91a7ad14b55691ebd820cfd6aea632515ff8e4459bad28596253427e0f1dc591e3f92c68f405ae68b8676f3fc9541b4ae3adc33e776d786ab83ff8fd12da1f018eecc3d4352515d890c91cb41c5f23ae403f9d7a8a0dfcd39004205a9d8dcdf5042a24a5096047e4c09a4b5b87daa021be607d595946c483953951edd9832e251114dec9bd063f41e2788b538cb7e804cfb32431a175da418b5c106518c8e046c1fb10ab79321b79581d6ce295421e0e435e70ed65e2dadc56086fe6867a0e5447808221253439c77acbf48aca8a61cafec0044895a56ba923061daf9f3e102cba56c43c44f2ac401f8ca3ac28dab22ab1b32926fd1aeb4d14c59a6a0b64b75a7b054f0c872cf39bd02385dc907a86ea38a65295706c9b6fa742764a965ad6341627dd9be97ce8caaad4606b9ab6b4a77d5d95303d2dd6b4f73bd23e8c52420a81e220db3915250816daed16daac4be20544aa56baa76e673d9c2b5a69c2df4fadd33968ccb055729ec0872a78fd4935bdfabd8ab0fd13741b9605deb899afd39528b72d67a5d1e9ef50c4745e069e1f2bdec74a8cf0628138cd274574777a9664775dd93f513946f310b0572d05a76c0dc7eac03339e05140e5db7b354ede9d591b8cd15bed6867f2818cf9f3c7617e035ced89d82d0bf8201a5c5f7cfe0c9937ee288bc66afa0e76777acf639b505331e4313503d94aefff8728cd1985916b75b61a58df9f1f99417b61fa861f560a7d705b39bcee5a84b7628e7cdfe00296bce31e7b475f204d38082b115f6a1147ca9f90691236c508b841047a12949eea59a551519538ab25b9c052f7681583345320bc0436a1f1dd6acc1f1ab3c7407528a023760cae4b86de2249a276eddaa028ec99a888bb9835a2121b7f4e462463d5a7019f0b6ba5d092e97d14c88ed8c28126efaf6a46ec463299100ab52e8631a00fc895acc0c43f7e318764e924950b2f532b0e82053d7ba619744e47a40785ad716162218bbe99f22152c652dd56985900fd1dffc842e91e5e28764fe46616821ea8089a42e85eee045fd11abe9ce83882352c8f6f5a87930fc582443117fbd7692beefd2f93864ec6af841f83990de8015d31fdb1be008f2d27814f6fb588e2dcdc0823b3aaff82270e59edabaaddf98860ce27264d765adc4850283583c2bf46c1e71d008ab6b89c9080e55f31c027c8546c53720e9f7eb9571634b863d5a608ceb40a8f5a9d0044257f3021797771fad055002e7a83f8dcf52aac37f67308cc887d686b440aaa0fda011e9865d9ca80c5916e649569f226901bab45fdca5f5a782e11422c9044c777618e2d64642f2517b69cade3271684ed2a53cd5bed159e16a9c06b600266b600eceea431f559599738bbf149370448ddcd3ed530475f011b56a50266a9b91ec116ee900e541ba0da0e9a0d0c963775686f0fe9f97543113bf23d0b0778605404e1ce456819059e7c841f77482bb9ef203c7535449fac47dd24810a54260859224f755d7c72304528616eb63b9fb9bce8b26f0613e7bb1de080c4a22296a083081bd237275d4fa5d54110c603859ae4cbda599e58af785c392e265f84c1481fcdcc4b844fdeea1f0289e9f63c56617914f1c3cb33395d798f61a34b7ce483b3be8c0f2f51c0f85862f55c8a5c81ea0d8d681b96fbcab52ab6dbe6c2362f402f64c505c5a62dcbcfb504bd4f92cf924562e455a244a5093e412909afdd281b72519bac60225dc02e962b97d80ebfeb8e7f40cb2106c29acea70054fadbe3e6d560d9a8c4dc7e295db4f3c313e03e8f2b3ba977f70d02afe3a6277004a7716274a8203a363e09d0ae5db4831c8f34642d387d9a79f239d5d806f86a6493dfb4e1cc9d3c98a9d88c09746957a7148160946728f6e0ea0e12e1553cf4850af7a0348f691e983cb5dda12d91b5887696a28223a07b14451b3e407742bf499819502144f92e3fba3b37dc10c8588ff3c6c789986401b605902268f2ca58147b0b85de0edf3626e098480e4293f92764f0be41dc177aba07ceeab7d2b4f06c860091165e8a17d6d921ed197628af9b53264255d326da756ab71868468baa2760c552d5c81381abe64908c02c09b314d161d2404c69a77ba3edd6defe7877e70d7974a4dadba2ff27e4c14553c9a918e6683f497868627dde49260b9428574f6274ea9b96babbc853a042861a0e81962b8404b0f8a99391d5a0ebf4112224807677bcb36ea7ca025946a77afa0d9e32f4667b4ea07fd2a9bc94b4825d321fa23dd121a7f15b95ef88629d05e30146e6d07bf6174ee1271e48d2f3a810bd80a462b2e140f252d6900d1a881cdeb8e4c39c14ed3d0f83b072bcc0aa66512d45289caffde5a84e0b270b79c75ee6fe787c6f750315a5a4ed7453133118b55e58a09f240e2c1013f1049d0d3729e7f276a55572f867f93244be58a48077663bb86fdf37d184d9de20901c4d40b6982f6e83963d447e6afe5a90e11c2ce24a109844fee27b3f962caa69c4adc1b68740b08f869b05b36aa00edc288843a1ef5ec106ee665e327e335d15508b54d72feed43810d5537139583b39056b8923a02e5d0814fb46042b66d4f0add9c22546ccef22a09e45ecb29630b2b97c7ceba03d324dbc49ae190ff652bcf243f990047cb996c237a53e03219416220908fdab20b73729549605fea68bd04f9c7a1718ba688ab8734c74656b1895254cb0499cac34ceae549872f019435a63aa7e564e5e21ad1d9054695462f1cd71e4017dd5f4c276995cad881b41c8f07855a2596ea8e76f9e943a8906c097e5ee9c8052fd731317c4e742f624682b9b231fffa007acb7af429f716f6c8def49887b64fd5176b1ca387785de832c823564c8c7a49deb7c5fc9b4ff3efd08407c8c2c71f59434a079a2e4f689388d5e7f78ef410ae494a6bb67c44868eae93b8899d4df9f29694210060770b9a13150954ec2669c2ff146a205681de28110eadde8edeb9020ecf098f257c135ddfce7dac0dcaff92c5835e8eacbe0a3c02ca879f2f8672ad1e30371074c8f1975cef11d995ea478539ba6fcbf41da9ebfe70cc30989fe9dd04fbf8b415be3b6785253d3e9d6a80a6d5f7f0710adcd9826e807ee1b83d992886cfbfb56effdce4782c30a26062918f566843fb61a4153ab257d0e7177a88c594950ec602cd5040423a1e5d1164be2881b91cc98c56d85f00fa542df78bdd12430e624bfd300f19d368c588e0e606b00effa785ecac35789b7438963e9772ba4e70e4d18c7557e9b7927e5cd1b0532a4819555bd232bddb31af7e15c1d30770ef634a36c586bb47bcb04e380a3969a344645e29f98685ddf90fbecaaf8d23c7b25c19055e2b0e1d16a35447227a31fa589384e80dbdbee3fdc3197b3cef618f114ac27ff28d0ac57007e1babe886a832666733a809fbdf587b11034c38fde964faaf0845bfd0d46b54be3c30536ef4916d1ad40372cf74ecab791bd936034e093be57956688af0065abb34fe30a9e092568adda4e44638bc52c3a5c87158e2efafad6ee057fe1a8a866e73f5b3382a089a9a7c9c1817e73ae2d4571bc9880ef7e7cdb210ccd80b0c07063a090e740dd9ef499757f1c075b78115234b88f5676a7f424010f48b32e85538d5d588442bdbda864b76259274997cfa5f7d423d741d363b75cae0af67e2c003bb8410eec958674a00fb95795c27f4fa81c12974069a0bfe263868427a644e996c75cce0d7c083d5f5b09813c264cbbbe189af4b61d5b2da34f4e21becc54b69aad6eedd7e8c03079575ead653d58c0026f583496e9a7a221c48dfffa529a90d828a5752a2f522957c2d0405698916d737510366c7c3dabe4867742734a8e5856e8a79984b4ee1032908306451c3b2d90700be4ad05a73100e98bab386200ca44ed7a2c26173cdc90dc45e596aa3c6853c0283c1308375080aa35074dc82165a2693621f284065c5e57b42fbd7129c17d2e2e3bc1c590b1acb58ccf964597450b02ae922d656120253d8bb8588b7c31528a0f1eff97aba09c01c9d294a9d9ed6e18db42b45da57beca640d950d22b5b91ca2a5992925a9fed73911a9b1bc3a3841eddf0d7fe9530a3bc3edad2f1e1dae0ba84d31be2e725241799fb0655f34ee460dd81f6ccb8a5ca064f53373d2e1d2024cdd2ff8c530aca3de890e823dba5b519d563ba862183890aa5c0e743f71d7e4bff3d085d72b407c82820cf652aa0120c8da72364bf50f0972f5ecb3534d7da8e00e1d9ec4e529a1b302aef548ed769e6d787344e4e735d56d4a862d4563270aa0688ba670154f9bee1308f721f9feecaab3bbaa97fbaae0744ee35c704c7aded9405caf8f5c2a2dc6d65cb3359a25654dceaa653e44953a283456865e2a291819c1888b2107d53ed065c8c819a4523d7327c0a91477b358d32ef0945b6f0294b9e581a154ea252d55f0a49a215373b6345eb28a03ed24998c01be07b34c82806a0e95118284ab8c2bbb49bbbf6a8d197ac6c645d00dc4b201013413312a129e1adc03562ae63121ba172e699fa31d48385802e8ca2ed645ba011fde45f804fbc758002c236c8684a0bd222d7953417be0c069103222f4c689b258dd39393c87b20ad81ed6b69042321f6032141fd62bde74904a6ee27a5a75157f6054212ad6167609175af7dda2339bca1d95f2f74a7365cf9665d8ba8df2b574eb8e67ee1ce9f42f96692da945430a87ec4c02522a6fc7991ba695e8627c6b92b808cefb52b998bd67a610c35f47907926e465fb53d131b8cec0d8d3134904c679a0f96fde39da9ca2e9f16ef2b0dd5bf7ccaca23f51651f1d017837c92046c8d462b434672a1b5ab90d7d9660497d8401568952e7ad0ec9ae07826937a4ab1950472c3e2d8b9cd8d6032423794ceaac7eccca41b045418e20070972f6b2d793886420220438161869262bf623915be3bf6e81fba71054d8af18f107f781a352ac3254a53240cbebc956e1b18907166a0593a27d93f5d3f110124e4ca9f96ff2eb1b04ba1eab62639365dba20f2ed9cfc1659308594554445a01d473ccb979873e494e7251606b1462597ea886bd1af639a67b9461f928841515006975babd25f34bde88aa45742005da372246465d1899e5ea5c75e175927224d946eb5ba7cbcafc2c4e7cfdd72614d2a85f60e823af89601b92933c5368eb75c622e8299a299d91c2ed767c5886a5e027842fddf0a650cba9731f4feef47eab244ae546471dc8e144d55efd3551b9636f52b2388932e386cb95ca8e4a2413193adb9e13e7543395efbf348eab9c68321fe12a5d41d8f579cae94464aef20269a7af012efde1af4b851cdb7ff7d34f3623a3a0bd760a09f92ab38f0a192c4cce65cbf56a29bb2d0f512b3b516aa54a36643a5257405a09702ce51547b578066245202b95d4a9318c56410fbae0367971662704143c457d2a5fc8c1166a2a22bb5ae75b7ceaecf71a5d9680198a391db6538e8d1833cae541860e6d5e5428698f8e154331a720f98a17f35ee07767c4e2ede0a2062d96dbd87b49f2d1410f1a1a8ac0ec216f6542b014fdb4cd5a2b9d0443f06a47850b184b356a1e41f82c9c1000f4b9f1f8ebd1916ec1c1821426245e3906754774a0427fef2e2eeb5c9eeea3858694f145e5a66b12aafa94bcf48c1fa56d5d1b6c4277464e8e751fe3e01997f6d72cc84581ab70af368478f310154bd9c94d46bf269d2e3928c853c9f0ae6751fa73f89e98a816a4e8a9e7c0f99e2bc9f5543ecab409d67787222230aa20ebc72b1bb3157f44d23f939013599280669e3af6160934d570bf879e62b4d28ea3b6cd4d86e76f06b7059a1afd1db6f01420a4388ba58e6685151eb6123c804ca46d8884a932d0cb7088150b44443fe0b509464a5d31294dcbaa9ee905a43327cda7071ecea1cd1ab378c774f6ad704ce98a1cc5fdfe29d74b3b544067ab688b51f435813b44d1ad1595e3646d1be1bf6ba0ba21ff59b83bd28e3d1d16a593829f47be86f4c2d5bd1a05995e7f5332badca121c71588a03256caa0a570947fb435a3e666d96e267021a59c5ef0a3f6ad74804c22956bc31a100379c9425ac9cf0eab9f833455bf6074a38259eb5136d61b2197e508d5298c153204c4247d2b7fa781488a8c79901084321c3aa89f13f9a56ff7b4a83765573e0d4962843e418210bab65889a04bac00f633124e2aa874c6c997d750083aabd66786282c4f7b5a95ffd3851dcc7f409f613c44969aa21e1ec4a977be02cd6758028719708d017d0c7bcc9a75976d41b316994b5f817b536a4ae91d80df31fd095bbb4e9d8b4d4232634ddd316114b47332e384635f5655d9153c9275aaa27c33e12208e74dbf217030e52a8c28b1cee8925ec09168ae4f8bce7bdfa965246218c928e844462b75422cbd7d7ad93e4d47fd92b5a221e90c06a1202bcd844da7be972a0dece92c8d6ea485e0e3555b46e05891fa597bef1368fdae85ddbba026860c03556ab25be664cc6d4506d6a58ab21f0f0bd39398b9041e9c68846bb36b0344776c9691333e4711eb03656e104c1ca3e754b935fa182d12e65a5343ddb52932a583b993cab5e484384208073869468c6402453131bea6b48b247258ae91d1b2fe6aee546a0b726d9191deedece1789fb06f6544a32c1c67e5ef608ed8ecf4062acd135154fb4417c98d78e198928d9a57e02ed87888f8c2916caa525564a5aa24b30e4c591f1d0ea64588270ba8c7fef29f441a9f7871b7a109ab24b53a95b2e12a13e7772a8e1418fc5fa5aecfc99c479f63083d633ff2c216a9103ee095e238e52c6ae56794c7d8b08859f6876818030930bafbba9bad611e197c3d29f77f3066d14c71b4857fe1c243f347bbbbaaec162cd2f8c5cbe85052e3c30ae5126c0fba8297e15b0fbba5cde14680d654bad54960bcb2e7003bf25d3f79852b676a499def6004798e06df38576c16a6d702e929e6e03a49b875e90a436797cb7453a41a53d239dc2ab04e51d52d08d680a891169106b18ceabc6b0c39858d3d6817af4a2d98c6a5dda49ad0b567b1859c35829d147d1b738dd0a0b02f24cacd87f8b77ba05e750c356e3ac6c15cd9a60caf352c74c5f5dc3b130c4182fa5be1266da0a7bc1660b191ad70a2244eae229a8dbc6c10a1fe1e566b85c62d3c73e25a500261cdaa2de0af9e20817c5c28118b52b78a40f79c0b3ab3388ab4bd16745a796bbcd4bf701f515eb8c05de81cb7b49f8d6c398e63ff36fa9a71982517a9f223c7656a5b8962c16547a139d8fd422891c90266e3eb05f1e36090241077802ac18894bcda3fd8b6f51d0c0bec364c105023614761ef12163ac849fc70a1ae47e7e4db78aef8b81b1873f5fa6d2d7fb0a3ba1e355dc63a86bc28ff46cbe156b429607137e838e1cfda05288c323810a6f407af99f191fcdb36fd038bc57da460f7abf0f3ffc075dbc725d7ab838cada9b6e622bc44d01808d11f090e0802c136e274f2939edb48c2d8184d6ed00c94a2433bb01d4e75ad5951ce07278ad24a224f80fb7ee5352fb54af42371cb1e8ad792a2a9460b36e4078a39dcf5c90fedf93ec66e1c01f7372c7b81ce86ee54da5ebb7c331834aa57ea53b4e77bed9f1a17697bd5f5a77dadf8fbc27042a5b27a758309c9149070985e0f1556f2f437292a726a39bf562de6c5052972c4b55a86453a4d6eb9b72faaa161919a8810300e3c017f04050646994f2cd372ea80803fdbb3455ccad36e42612f822bfe84f24217b6fb2e59632c924656e0a450a330a6df94783dc9248847270e405f0500807445fbd3bd65eb2a564a79a7624da209907975c0c10ecf246bbf48e6942a3b4c38a40e1e8619287455e4d784d6e92c3b8b54f855e1df3a9d31b047bd32b4e2c83565d9967b0d622642e885a542f712b2bb9362fb9d665be752a66b5e625f8126fa48e602712767a96551d2098a9b776a47dab1802fa19822f3d81f82104355fe5ec80e8d19f3911f4f1e303117f728cb0853e0e7c1e3efc2fc7b77f344e7cfff0edf87625e8ff10bbf88f8607df178ba15725477b64ed540aaa36d5a614540aaa24a8ae4daf95525b4d95ab5d653d55e95fac3616755b5a2581adb5d6fa5dab100f80de4a96d204614b95ae32494eb635494eb69432046f2f0fd82237c09e742f73e939943cf332af3d997203dbdeda052266d22bc5a8dba73954488310ced9ed15506900e7267f00e7a6fb009357cf7c8774995cba96e2052b1d7ecce2611658d87cdc00b7be78136fb805b3103a7ae911875bec8297de835d1146fa05b805b3c082e7a5f380317510a6542aa994fce434305ca752ba406caef1604f9eb64e8673d31582bb0e803055b21cc204215992bb1b6003488730f25e20f502dbce3432008bbc33d3a8c3bc5de2c983395dc608ef271d4ee93287ff8ce46a61a2d3748c584817361d625dbc1a782923cce4c1fe8c64c93106d1bb55a443e7d72084ce0faf959c8ea8035fcb5e093415e82a3ac48f973f3e3f64d14ef0361136fe77fae8d0653448d3d23bf81fb383e0a5cf482e42366c0821bccd25e8e66ef69e6939bb67b33cb2a544ff9a3df9ada4cb1efc2cb7808d920102b445b7ecb5cf995eb5ab369bea16830621f4183dc0ec342f933b973ab4a4e9c8011c9863b481bd4829a5b3930253666627a0374388643fba32a75ea1ab6258d6d5aea36337528fce49f6ebfe686317d5c59d2c74995cd631aff005be54c7bc045f28103627c1066a6a6a6a60500e4bde9ad645e04bdd0c6f4f3387fdead064e63b07eaa97f5fea4ebee45cd7014c077d7a7f805d7cbd13b64ceaf403954dd9ed0982870698ce5c0ca558c6d3041aa4a195565a4b59d64151bd721897a36bedae6d91e8397bf3d9c4cb04b55a4b8300ac0e866ab349a8d5a652291853484dda5de33b8bba71f79c73ce396777a33ca1ebc6aa2b34c8f2b9b8609f67bb5307250f97af1508b6fad795eb300c2b75cb2c46753179e2084fb87cdf2e713351c28354dd2cc7e844f79cdd37f69c73ce39677703a137db3365853921b3850db75aad9d73ce593b68b31c2315641361d9fb7a12cb918b69222cfc1839395574ccb41cda424f25b8cd1ff31e73798c06fd5a8b60ab67efe77d90c8e53f4bc3743f1adcfd6ac90bd77c076461fe42a52ab91742cc21e6b5073d75d14517f4fb4e32e4a85eb6bbe57b866f007c5b13e8da910ac2a690b06da91d41c4804455d23b03b64847c169893462ce1752299e9369fb9c73ced9a96256abd210a0a85eeaa0980eb98579cd3aa6cada7d21575d50b91876d9cc441dc31da9cfd83dabcfab5a0d21955ab127a1985e3b28da613bf5e8b31d9bedf0e7ec9eddb4a654abc8dc053aa3d3e8ed49ec8c33fa8cb74713eac41ac330ac6bdb9093c6240c832f14c33086ace959e967c94ffbeddae422171361cb843304948bf11e067dbdb16326c52886cd496718a6ad6dfdb35fe94ff8b2f9c9a747f862f2e90c5f389fae822f58111dfc114256b362e806206ca16eea226ca1ce755bd7b085ba463da35e3bac52da57b0b0549a6131c83aceaedf41348d2a166f466de98448d4ddaadadd2e5a1361fd3f9797d5a1849f4bd72daae8689f3eef8c8a8ee9d4afaaef8aa80418510f32df2178f6a693fdbb9560bb67c568031826bba523e666531e8c225390a27adf359f67b4fb7c78aa6d5c9671dbfd26a763023f9d7bcb6ad624f058d8932c2c33dca654de8c222c2c33ba52c75c13990cea6cc682c8b8fbe98d9fea258b37c305e3e69142ba16139d9be88345d8e753fe8ec12e14aa7103cbf7ea5bf319d0a5f260ab7afb065d341ab6602b730c079968838445be9bc876434843baa00c4aa532d1e0683c8d970ee18b63df57029d0fecc9c76e0f2723367a43a3970e8b5ec2221c11a22bc022b508d64ecd2e1b289a5df64baebb638c596cdbcd6653571449d980526fdaec1fa743e66876f8933947d4423a76b2ed9d63be586e079e77a6af658faf9ac11274590debb68a61b394b5c7a61836e3fcbe2e128bf696393571b3ec697cbf1e9811545a4be9264ad8e81fe7c0c826085b2817333fce49d1eedb03fbe911fbce9101646abb396ed7d66aad0bdb86c02556d4cd766fde35d0204dfb171f0850f079f8344f6b63b77a51cdde629c8ed6416695520cab58fc99796d128df9873df6d1c7e00be7987ccc3ae611be9c1c73862f26c78660319fb683b065faa98bb065baa963d8329deb1ab64cdfb4d2f46cd220b049e1f3d8e0119e38c2133fe9dc1a47ab755ecf7cbabdf30776568c453deb1aebad76ade314b139697dc8d196422692dde664a4f8ea8f450d600e7a2b69f3eb9b8bbedb7948bae40d074957c9fb4a1f46fa6e26d86e7933a7ff276f9e83fe53f93440c2942e9bf850f18b91d888054b30d2449a3ed8ce09230e451d3fcd436e7d34fc4d6994335e880467a1a76442951f0a17b69d93f05facc2772cd2a20a2fdd96b460a98d45df4e3862a2c6a28ef208cc23f5c8c5d00d6a504e7a044bb7ed7e2acd4e1f9e7ae64f6fffd4519d62b5318c52777a3b305d64193aa89bd64d08dd1bb38702852fd575e3d8aa22aa8cb136ae4d15d9b6147b5236e60008a3922ce92824b0b1e7d411a38b2ebaa81d983ff3925660ddd806d475e31867ac141acb2ff5ed33a6fb3a7e3546d826085b523fe7bd56d66aed67b317e8f2244b7afb66b1a8d57ab39e7e9efef3e6d39b822dd25382602510d2eb6627f34815e0882253f8eeab922303a91ee2aa548c93678c917a742857a9d46ad5756b5775b74aa556dff4ea33934ee672ccbb3597bdc0c6f909f1b7654a32b7b3a05f8338586dce39997a9c3f7492b7d6b68d3df96db3479786eec6eeb2d9566163cfbeddb747eb5040175d74d1fdad05084348098c90052592b801c221410956d005203f40c24738c119000848d899c16be747114744518411a0000c3b3ae09d2424200748144e2041c50e60b093c40d845c31d4832ac6d002237870a275010c5f98024e911a20d0e087ce0ba410851e26581003221240240745f460a70a5900014612233c2708aa8116462b682206489c68e2e7c8893094c10458407ac24b094774810b37f0e103d6b1796a3a620631402ad242114a3c11061208d1a2065b48c1062a5802069c84448d482267632983137e88904512212e2c6109250439015016783024053db010a282203a4812c448e60926963801153008420d180540809834c1423d5d4b39a539370cc3a40f2dcb300c9335f85401a4052678d0051960b03220218a250819818424b680c138e7316c476755846118162459b062188661378f61270cc3381a34671539b20a18d01e196f2810c518807600862b189154851556102145114df8c216394b6861010db029e8a959e0733af11066044f144ce0fc200b262c0083215224810a59fc80874fb0822373ce79d4931df96459c5e69ca539e796828c062b88c213439048a1050ca50215a828031247882832028929f00f886052d21694031f1e1ee0eca00446d02451c491124bb8c217a678a1200b0af845401e8ba4d76aadca8b80e6ec2ee67c2c42508f4af8397d7ad14f7757849937fcd4a2470bffa92835b1c0761f3f724dc9122f233b76c0015f58025b4018869f3dc0961977a2915804671c0a325bf0073647546e555568871d32478cc49db893e4c6c84fefe12612b9814984883c3f5d082241427148dc893c5148fc8941e24eec915bbc8938d37168b2e30ec7715bdc893b71273a852f14734fbae2117189e8448c02bb7107b64cffb8f3daa440f45a9c387a70009b2e947f34a0c716da7ac41a5519e852a13a1b28bc0beb928bd15853410cc3300cd3983bdd147b0c5b1800b0857b902ce9d5aadca3d1c7e66bd88b0c4424e825d671121c160a1119fae8ddbdf5e0e2e279eeb2f9ca6621f624076135d8ba120152adc07e2e3f439dc78eaeed93814a3eb0f0fb32107b5c8ef6983946e3cf40f666b49ea6cade47bd6ada06b918e72c713111d2fcd76e9b89f48833f13211f6248701b6484e822d49d8e9b4b475537a332e663a0771107b12b3b18be837e0c7ab123ddaeb4dc34992009af57212f6a44bd6304bd2a0e1e2e279ee409c8484651f6ea954daa1900d84a8f4ddf806877374b8259d77b8e73f55d6fa6a4cc2ad1a6ed9704b73c9b3b926893d7939893dc9493f400c041424795ef69c73ce39bb5bfecc39ab73921f223c32881089c39cc449d8f5c2a54b1b2975e48b8e93244b3adf4857c995377cf372867aad269309c3302c89765f0f6c76d35a2bc7499c94fa18932257ca3c7a44e298235daa1ce949d205612a4c924aba24e0bde442255d1242a387461efa0eece2a41e37d4c04143ba380c90255d043e240a5ec624d8229d935e12b11411e48d5e576b1f20db6973e36a05c2a4451e9bff36dbc52051481c121dd5c51f8e471149e482931f75eb6dddb25722c25287bcb167d9f4314e0aec17735438a8abf11055afd843dd8fc6e5ad6b252bacc5b05bfd7b65d4cdc57f516748cc39c27e8cc338dc1371883bdc0ac22d761692f20ae0c097ccdba309e0cbc9dba311110793370a8542390bbf2869b94e1ca39c89b7abb8b5b9e6256feb1f14fa6a58f6d7525d8c93813389f04b62d247a08f7eea7809d812ddd4310ca24ff4132431c8e3441cb8c675e2b2a9d50e32ad68930422f93eb91bb3da7d7abe7d87875d34f47e3148e4612f7a97f089892888bea594524a3903d6db04e69f8a05bb2ccc9ac11efb12f6c3e1a57f500b91719837b027a53b0d2cfb370322d9f8c05e0f94524a29e6f2317ae30fb3a643f791c2b2463b09f8500189d12142d89bf4f6c0de2cc2f1d911427d68f4d9c126c5b088830485b15034e2306b3a86e90861c3835d253ebd076e6d3e5d02156057cae707b978d1e190ae927b8199ea1cc7b9a9fb68b22cf31bf0b34bf3b5fb7a7c75ea9c9fdc529aaff6c4719b374b3d700bd649210059d3b7a8c24faf5bf8e9d8a5b707d832bd05963d126dac19a141960ff3f9b95a4961e66200e0da57893ed54f22c99a9ed795d5fdaa4f09a864fa97c23d1c1d724f29c87e5d53e22fee1a6eada8f80b4fadba7bd234f8a7babebab183df36dc5ae91b38b45aad7c7571ecb05aad7cb5b2e2bde236248e1d628c5ab635b7704897e71ec3a174d5e05ee25e5743975d57f115d74a1bcc3695ee85af74f04dfc932ff92ae9e2cb2d60eb85a7fc935290e19facc2897f120bd73fb985ce3fe985bf3650acacfc9361f8e91aac9b4da956ce522a6d9b4da956bed5155f6938e3e4deebdde47850f17b72bf95afac449f59f90ba952b137e3f78a88d526e3e4762b9e4da956cee26d71b5b2d2f1a0b2f2176e836df0d73fc4add5fd56e6946df3a2a301bde8291927b75b59755b29c872314aa317353e7a4a86d0c3e8b783d0eb3a08bd13b703cdaf1c720bb2b7e22baed2d1606fe5dec01ea5423e383ae2d6e77943d80550c8075322f9b8c2b898555cf1fe95fb85e053dd173fb572451065c490e13264f84ab7e2908bb9d785bd958b0d616f5af626c450280e857c90840d9971832472c1214312712be513a54bb167e25dd7040d2ea3fb6a8ff82a770ab197eae0e390ae592459d36d8cfb559f13e9270d7775b121dce21ee9922fc99a5eabb533c6f8c508571eb332a1d4e6a7374183134da24944438cde8ac6caed6ab55aad567cb5ea562b25210b376faf48b032864b2e0600ee451cdaa70700be449f2e00d8ea6838d5705a39adfce45d27a1b7f2ee20b461e52bddca6be8564ec3e9571ebb954af7a9ccb0e21d8bfb0b21fdca575c2868e8a3fb6b27cbc2c2c232c30cced275ab78573e5d43c17b5756ba15ef6e07e2dffb455fcdac5634db5328ce20cc865b327c3a76c32e1a7cfa24325214d44e43c739ccdae10942b755d7ecad7c15bb2ebe869251c021a920bb780906a90548245f120af2d575f2d5c957e79fea2977c39f85c53bffe44b46897cc997349247dbca6ae53f9c7eb5e22af6a67f93888795afdc0ec48f7765577cfa7c716b65f4d5aee31c1de7d6d7b9b35742840e33903d19de237e773d08d606cbd77519f7ab5f52f3d0bb1afc834183e75f368d00bd295fd2e5dd9904c89a3ea716926aa002d2cf0b21eb9b4ff8e99f3cfa49146d8045802dd3bf265a79add6ae3cda4ca295ad554337667c7567da7bc49744da8b0d461ce0c36964166d9dcbe81887bd12ffb8c70709b0377da5eb81e85e221de67717077bd3fdc8465ff9275ff2c5ad95192459f3451c7a134fb90db9ea62784af7c54ff9953b89669074bf5ffd13ef1bf4d32b126cf418fe4da249348bb815c3a7cf23dc8a16c521a3c4e8a451278fd89b252eba1055bb723fbbba100057bed89b9fa74d2510710b465479f4269a4666117c813fa343ee87f8abd5fd4caee236a44a073fa583ffd99349f4a5fe9b44a917f235048d36db11fdf4530704a69ab7bb81bde85be7524b33ab18c57c3a4e004e6fec611886619875f976d555d6b77f9600df07f876c180ac56d5155858b4c32d1e09f0e7f68b365f2bc6a3d3830a0ee97cbb4ad68ac3c22498b51e4bfcab2f54d653dd8bae04ab61adb59a10b1c6865bd6db79b0eb8577bb04d895f2f60ab0cba4c4a4f341b2da535d0f92d5f70225599d39b9a6d1a0502814ca3f58f461aeddc0dc44f32713a7b90db9c55a8bb222f8f5834762909214a0ebcb1e5ad407e3a147e8825042a8ea1aefa7e228a3f4679945d0b794524a8972f928951b44a8f4802dd139005fa2b4ce01f8123f46c8a821dfc35ec98d42d8eb20a82ee674b6bbf998235d2ecceab68df2265eb8bd51e706ea46e67004515353338297b72a61e305b8d555c80637dfbec307f62efa9e0e85a2e0e235d909893ddc1a02d943ede4b0d7d7060dec0783be98236bb5b6061a7db391fd56df28d5a350aa54c746eceac1ac76142a3eca251783dadc06cbae871015b8000f6ea1bc5d865d26de6e2307769db850bcdb51ba93ce45ba4cee15aac1ce6b75437945cd58df36e7bae662b812d74aae0a0ef8257e037ec92df10f067d12d599fce492e66d3744cf9f3a6905c9c91bd4a2493d0799ce92ec5e918fdecec22d2814c5ebdb71b01765202bfa910a917000b6448f4127e6aad020b77ace39312999217c990e35c919631926bb3af6b5d7d6a636b5fbb5770bf1b3a5dbe07967a4f72d456a44cc9a5d4d9bf294d3db79cce9b39b2533cb18e326822cbafda80e2c478dd173c4bbb187ddda3cdc6f2f5de28887c4a424617be8d39b6d09b6d97bd865d9d9875d90893c3b7ca8c54e92ff544cc47ef4e686e3bde1763095a2cf21721cc0301c2459317625b72187d0f9d2e51a1e8cf46cc31ecb478f3836180503fbad621276cd24496b9e67c459392a06b01e318b65658fbfed08b3c17976ece6d9679274d1a4a44f7a8637dcc39ec72539b01fd39b670662cbace8cc9e2139cf7002bff081d1d7b7ecb1c8532b7e06e15b8b973eb8a2084f6716df57bc34f20c5ba247ee0614c247d8125d63c8cc441ec2961bd83313da4b84380011bf477d54090e3dea67b0457a09b648ffe4c394d562478a2416b6487f4104cb0f857e84def450e8a7e779c58485593861e761165bd8c0178ef985906526b06a0af6ebef5bb77e6ee6604bf40db674fde87f3de44be7b1bdbc354201f38274e91c53a20ddd6a99628f7168a992524a2979081a777777e60484ab6843b75aa6d84b89367cddf5db633b942cf8f1b747ffba65a78a3640872c2c595e71a4480e34504ad9e160cfa757cfbaa868f836b4fd8c4141d2c53b27d5bd20de9127d7a42631928b8a060c1a22fa2fea7c370e7b3b5426976fda81ba51a5b2b68724a954d6262549571435d38a9cee810212c9ec902f693addc66953d739ecad521c759dde1dd2b5baed04644d5789a2a654f1735e2b88ba070a1af44d52120f8a6312c7248e491c93a67cc9219dece116d6389d23dd15a58d44759f44693b70eba33f3b2449160ff6761082a5fe41a11cfc4dfcc42144ddcfe43217ec4d0861ea7e15c54f9491d8659392a42bfefcd4142658a7812d09c2c43f97947fdec93f37f9a7fa2caa6f5c5cbcd4fd3c3fddcf4df75359145245b93df4ca223737372a55ed9e69225f3e4336182ac22dccdb645134e5a92b8b4823ec4d3f7592a8c75ed4952f1f1bc8a1eeb929fae928a73d437c7e80b875f2e94da483847a886fa44b569bea1b79845b1f23c9226e0dc9229208664e7be6c9fd2a4af6dc806ffd45a7621dfec93554b7f5c096e9b505b6e47ed00823718b0b6ea17c3a27491b6e410ef531d1a9abec513721fdf4ad7b8088f2bf98042388fdea8e4994c30e9b4df96683533c001c109162c89f1e0ad940c8c3122d7ad76aad4ae56eedfd78c8ae2ec14687529bde9225adb51f0f171a2925accfb166b0a53d09e6d6426bd7ba832f9de6319e6f1f22741bcc4e3b9a875d8ff9f3d67041f70d31f41c77a049a1c91c9de661f7d56fc6cb1284923d5863acc28ce849791bb638613f17efa2b918e9edff69f1a5b7bccd1e7bec49be2cecf143d8221d72f09544cbf9b96d93e7351ccb84fd349b52927441deee774329e9fb9b47d868b3bfa97edbdc76a62dfeb6d5e039c2ad4de7e7911cbed4cff8b1cb81bdf9dbb5c1de44599f90c56ee10d346ad819a61bbb19cdb11a3c1bcd6bddf701a3d7b0ac44f39181bed4f5989fdd1a2ea85a4ec65405b0d322ecd8a39b3e8612ca1cc418bb3b3290065934e8b07a7687c8bc665eaf0a57e618638c3046df215d1ebd07e9ca9c3a84357a16a3c7793f2befa79211c65855a06b4e03533b1578551a50f2cc654a9e090105bc32d5b52b44e65588eaa50b258b0606720e88302ac9822aec10a6aaf06d40848130100963ea84a6c1c8abd280926bfe80e8f00e013dba76878042067ad47c88e8a55b7208a3ea4a9dff8ee8ec3d48974ae6100662de50b2d8610725ca0ad65fba7640163bbbfce41e666143c5cb8b92f13104af0882c4db44870e91a8d06e387703c614961d56f638859692032bdd6a293ab0eca5e0c0b69768dda9548431057b2955347b429a73f9dc0cf6ba3d1425ece626ff68dc80cf8e835d10a6c57df0c873de70e83f78a4bb98c3317311873daf69d0f8a4ae3508e9e238eec4590ec5718eb2271ecc6ae738ce2517c3d51adf12f081b38eb95025de259d8d8e8664d98be374bdefcd6bad9e652eb998cce49ac96fc0375d13c799ba8fbd96349adfb452562b5625abbdd6da93abeccdcc95dd47638d07c6c8ec1d900e7b761eebc2cd63de3541a58dcbc17a1bb0045fbd370b5fb298ead3353abbf81b982ad3559e0d19bfd69b43e574e0c77c4856ca4ad94edcbcc87e2c640a812f984b6726e04be6b2fe707a085b24c743f5d638d3517fa0755e99d2c6dc0d7ec661afb9053719376ed347f3388e6c7b6b067bd26b3df5c07e2a25af8ea994ae0e8f3a1cf26817532b132cb3cf43193435664f6890e5a32fc82d0c7b49170d922ceab496583fd1ebdadcea0629d6c10f4271150c2efcfccbc3225b48fa1347716dd54edb6957372579936f26df82fec43713133f710dd2548f63c0f9e828171af27948848742591c79ed6e580db7ebbe138fb1b2a2c2828262e22a5c8c89ca4d4c542a2626ee7d8aab4c5260a098c04851a9784a8aabba4f250546173f85e3c1c4c4b70ebe89ca4485828282a252713ca0b84a06a783098ac9fd4e66d8a21bb1a7b7deb235b73668835360c0403939a911e2bce074e0579938751a34803071085b36ff54b6137fc1c59c5c95edeaf07ef32d6e9bca3f143f716deb323fe9503ac782b5aec5eda4533971eb90d341e5c4bd87e1282a275787f730aeaaebd16f4203b6985c951fe29b7807fa4ffc87d39ff8f69b9fa038dbb077e228b703f14dbc064e07937b72591b0d42b94a656dd0639c7fcd41dac8508fd64da01e1f7314c7433b756b845b4547dca6526ee25d845bdfd64426c7bc87b865e274443120f9ea268f1c03aa9b3cc7e626875c8f74c597e6b245f8d2c17721d88f737ab09e1fe29bdc8bac9dd9fc04bea81c734602bec04071ccb5ad4b7118dd0f2787e128dd9702e3724efc13c7038c58585804c9e74f60c047e9becd3987d3718272d2b14e07e2a3dced3371c6d10aa0ddb07901381db4016c11bed4ecc49e7a8677d8c358873dcc4d38c766e73b99397113c7fc64e2262ec789896b8bf0458719c6610ff31ef1f986bd20483782fdd8e631cc5908b798875bd80ccac4713950974b11ca69a2487e8b333c05c05393a7ce41577c4916e6b46ef0c5e494d225584a53b05a6b751b32d5443ce6b6fbb68f36d8e6255d4d0464616e82153ce627ac9178cc3f15e6a6ae6d600b76b9cbb3699779a6f378ecf56bf64b53c1bce4990a7675787fc3db8f1886d55a297db1e4207d7f0d257aeea1193448d21eb94117ed912c7679036caf11a987bd56cb352aa63dcfaf1e7a16c1e3cccb38284bd8f8100853fc44f626c2ad206eb5fb1351a9ae57b9e66d3025ea573f4328c35e0d62a96bbc31737d1df672e2111bc04832333353974fa311733744a084e56a12b6067bd5773ef6a8c35edc218265cfe116dfd9615dd421c2d23c7445181d1317833d57835b95c65797af1e466bf55abb68c4def4195f2e2e9efbeb8584fde0ebc6870a5c805bdc9abe811905173b286b2e77b037e3abd6c8363f99524a2965a7cc1c8598359dd2cca8880ddf300eb728172f6e714648921cbd7c40da5e33986759566badd5bff8c2baafc763feec19659ac7b22ce35eaff8fab9835ba58b2387e92e5dd0dde316b10a5b08437cbd38488a0a3d1f219111e842aa1adf0dcc9a5e338bfa604c87ecd9400855aa2aa59452ca8f7187bd59a452595b841475b4941ac0af110248ba6251ac915db4616fae00b2a623f155262c14afd2812dd3b5941a4461675c52df08e9dab517d61c921ab693d7c0e560bd467febb8234eee20616e0b68c3ce4e128e0b2e0ab0857bc9231b845bcd0df7e28cd8e34c35dc8b2de51bfc1c92a4aa832561495852d5f9e95483414f3aa71d760d80436274c42d2cba74d18859f3c69174d522c99a11072d89cada222d49dbfcd49843b2d91449d776c3ac2411874d04d086e933c84f2faa45b5e8270960cbf44f2bc34f2f6d354eb0db29c8c209e129e814f445b8f5712fcc0877fc1811b722f7e29611bb5a7c3a878443e2b8e016e659375f024917f7922c2311071b6d98bed548d674ee0504248dd46aedce4f37b5b85692d063df3a0c7aecdc4bba34cb3e392cfc8b67ffb8a39fcfddf0b782751b3a938da9a646bab817b3a6d76aadcaaf60bf265abcbddd7453e228619d26e9d900ba58c4ac6f46b7742a66cd392712f79acea9aebc76abd96cd8257724ab66db76a40cf2935d9c11f7e25eec4de75edf27228f315024e88ad753f72f7997bc4b9363ac2d0f612f724f10fbf1cf100ee94f9d7f52322ea66e14d3300cc3b412562a752a58e9628ee570739ad89c6ebe51c766a8cf9f296856ca28c63bccc32cca3f1fe6a51ff812a7802f1ae6d33f26a295e237c7c3f46ed7a663a56e871d3d7414bb32f59658192d076dfc82a68e1fcd6bdd2e4ddbb6f9e7b9b228f230080f85ae406aafb69d3b5d1312212c82de7e3db9e9e426eba693d7ead9c94d99d79357d5e648b05f7c189b1fc162299b23c1cecc00402505060c140ae5e4c45463a0348eb7669e652847e162509967b076d333944a96b9f72f1c7555b2abc3fb17d46749f52358cc4d259c8ed357d7b28ebe7637c8ad0d069aa2a9e38fa7d3093b99301366433ed6d5189ba98bfe25ff6694fc6329f9b7fa52df0e4ddedddd2693a7b818530df6963032c4ce46b87572693a025f6c179fa5bfe01860f2d3e9aa587b2a51395d1dde9ffc744f45b8259d89b835e33cc42dcbe98827af5e9dcb9179356526af26d7ac74b59b7cdb19b4ee641d65fd54b3ac8b6fe27838b9e9e426db994ed59aec09b569773375ddf1eb307d3d7d65137cfe6f087e8db75367e5db8ec6898b51d1e1bdc9ab6e72edd44d37751dc482c5dc3a8659f7dee4f5aad8abc37b939f2e0df6e20dec49c96db0a56b7c894bcf2173e935e0cb0b978e00f89272e95aaafbe154e2a8175dfc8de321f39a79ad9ed29179751bfca2838f425d9367dd4cf6656ebdc4e93879f58ccb9199bc9a3c0b220faff050080ba2d7bc0d724b65832ddc7f0ef95f0878b8c88fdfaeb168a58c85659ab8666c42dd6f88cf6eed5ad2d9d2f485e02b7b26b7263f99b4528d97deddc7c365bb814b6217030db27cd8eb67cd54680d03a086d694e89623d9b475e7740e7ce1af0e941484104108d128802e2eea237a89af9d10a2687a773f154c2a8249fc0a220996dad4c07745c8ea788474fef590da4264ec70ab34e4e76b229d733b195dd7e574ada304bb72ea1fade99c6ef5f3f3ba0d6e8245d21a5ab342f188e211c523ad16ba7aa8b5d60c0909c984d6ac74ecb2ce6a5d75dfcabbcc3b6de34cdd0c3b2abc37cb3a1eb2999a7131b89848d80f06844292aeaee962b7c3244452104134cfcfd6691e6ea99c3da583b4901ff2f3e7a7774ee7b44eefc4701cec653b76b04e71aaced7c5689da1ce91aeaed14e5bebb037b79cda038b390c4f7189f333ab1e83702bc5a7d31e9af354e7797e522131e050d28e1d84a8b191dac8e9313a19253188ea1952a994f2172baea2925d5a83646282b4e21fada9319cd6d01b8ac3adc86d5a8d89b1d2b54eefd4d01a18fed19a14ff3a87fab84141a135dc52f9746ac3ad8852ebfd4cbe721b72053fa583a1ea20ca4957436b684daad439495187d6d01aeee2c05e1e524d02f54844c807494584ac28120a42221454540a62f922d24bd7d83521211891b4ebcc3897c9e1b77ae833b8d525ae3a3cf64a77abd125bbd4c021e3038f20a24dcc893cb127fec4a0582416452353670385a6a3e43cb3d40cc959e662b6a9cd881c035847e97aecd9948a7b6a54720cf0eeb79aa13a82675c8f8d9ebd858420c4ddfe439c316b661000b6c89c9a9a1a226024c7696abfc105b64857496159bc88a4714685065f3b3d6461618fb5534c7ce8f114e364b03738d89161249a0f85887441f5b04208a3418e19d034d8d2b428616419d9c4d7e5148dc8fa7933b2a9610b2c0559c8c242239ba2eb203f3abce1e1916e934a8e964b18c2c54b97a7863cc50fd8e10f901ef6e0a1d00f86bc5683d878a5112a6c2cfaafffdbe2ad46f168462369440649392bb7a64b164923cffe6ddfb7a5918a0486212f650afbc5a36c9b3ed347ce20e98a48a6cff4e1e2d933eec6fc78c41e63fe49a12176cd205268facc2052ce9e67d7b0adb99561d247b2d8231276cd1f66b16f91bb313fbbd3873dbeb248e4a68fcfb314628fdd87fa278526d0ace2d9e7cff4993ef367026139589256b1b0d1571b8418e416401389d0200be6b05d70b4efd0eeb5cfe81bbe61ea9c5385621d0d0ced8090c1bc5e212a942c0740182b59303424abb1ebc20668873050b23cf6daf38824f313804c745052844911ecc3a0131c61833de8292f804436888aa8c8fbf14861dde73dfbd72a3c9efddbc0b3fc21049f82462c12f49421704d12d6624c4a4902cf78198499a7e38eb5c27ed1e7a1a710c17e71c843093dc28f2c42e0439648afd0206b9081a8f0395a3d149a42c80b5151f450888aa1ff322d3cfb8b87425304bd1015354284a638aa62e85b1e0a55b1f3570881c8154d085d21849f67a73854e7d933a4677729b539e79c9147aaafb3c797858bd83312637d964782f03cebe4bc2cf22c87b49420f6e3a0674f51c27eecc344cf455292b01f171d31e2196203c3e1ab1c3e8ac33f71f8268e43e447888ecd10a194c37fe1f04b1c3ecae1db9c37f5fce64892fce0e81011f2dad1670e9f3a7c991f48df392f0304e8a3c39f0134c2d1813d79c2d6236e7d7c5391706b3ae3203114a222e9f9a33748b8f571cf23451ca0744198167ce982303ed2058182e410b7b0203546d80583ea0bbec0ee7ef5c6ef578bc4b85f255ab95f3d0280fb613dcfabfb613fcf7e3f2ce939e57e58926797f151c42d8ee2e1c3e8647c14f938e2e3888f17b7d8e7e1ab3a191f2f1f463e8c76b8c53578f8289dcc8f1d1e9e1e6e310d1efe4927f3a367c8901a6e31140fdfa493f9516363f3e3865b3ce4e1a73a991f373f707ee000718b67f0f05f74323f808810f191c42d7ee2e19774323e927c24f191c4875becc4c34775323f7c7e7e7e04e116f73c7cdbc9fc08f243c80f213f72b8c54d3cfc5327f323e787ce0f9d1a6eb10c1ebea99301526363d3c32d66e2e1739d0c909e21438004718b853cfcad9301120444088810901d6e710c1ebed6c900d901c20384e7c711b718060fbf76323f8e7e20f98124895bbcc4c3cf3a991f494992f8708b833c7cdac900f1f9f9f981c42d56e2e1639dcc0fa41f5cfce0e2865b9cc403b9c1c1c9e11623f1f04b9d0c901c1d1d206e31cf03012242440648106ef10b1e7eec64800879215288877b6ed8157376d80561d86910da230485cd7f984d134916118894f0fd84d7b353a328a0aba94a0b6b05eca32a9e2912cac5334df24c7d9e23e5d87daa8f31fe101f6b22e9aa477d245dfcd5a326aa47449d51cd9662d0201ce1d9231f79f6eff40c0564b14fa18367bee2d987c01676fa02e89ac159fca33190e11f9dc1f58f4af1ecf548ba66b8d40764b1b3a0e0ab8c2302a54ea814cdb5954d2c95aa11080000009314002030100a078462c1604ca2a888f40314000c8ba254704e9988b32807410a29838c31c40000000000008119d206008fb0623637eaf23c6d7c7c167aa4489e0db041fd89ee456a12843818bb9ecbfeb9803b28b158c6204f59dc3e198ec53d4af71a7aa950cfda1a03d2aa8ade491ed919cb4949bbcab727ef4a7aeb9c81dc9bd11e735ccbff5207206fd4f5a6854ed2c94598d03608c55b126b3f3d7cc69a9209b08eccfa3783c1a897991c024c131493e828de8862e0526a88572a00e5365b42fc4f8f4e0a4c1413b18b9aa1c474d23465171190ddfe76dfe9e5ce3abd3df34284cc001f9cf0852a58ce00b60c40291026fc8d7080e63ec01afeb8bef617c219e8027653647b3505e976e4d3a7045e1d601bd985bd2830b3475fc504192e0e2b472c0721b80dc0f15f137d3881e67a616c361629f7cee11acd9ad33cf6172d1710f2356644ca44015b404c427b41dcd4f40cd22b6df2d2923ff2f58a4a3e314fc4cbb1f988dc79904b66a608cbbc9b71ad282991df5dc59f45b47a0731f37fb17b44f3287eab899b84701df02e4a568e86240b12523b42b03c78ec10ef3f526af3cdabfd8910690dbb47eb0889adf5087fe3457fd50a6b28dd2ce9041688f66dcef1b1b3789dd17e69231bdffeba553434249bbdac0fc41e101ba52f5dd2c3905a780cda00860c4f9d6ecf4ba80ad9048f4a7a8272d7c61badfe30940a0644cc529c123c1f1d67a6aec7326de6b86e0658c3f5fa7782686e55507b8339fe7f5cd04471c2bde0cab87f879a06cb55217ffe596fd3901bbc677778ea8df91b39f0c497086608544ea67bb5ba2dd3c0c45c041afa9c7e6ee961e1c9ac9df3d0f67e7a310b6aa4f8774a757406781ca6ea7763dc435ff5af508276b2cf3c72357ad968350f24ea9e241f63fbe4d89450d406d28e5b758170bd6cb2e57c4601bb16762979ce6730eb7b71ad0757f7302ce0d2bfd054fe20a737a856da790e1fb82fa3a30ed436de915f1d04e308c53672537c8a68583d29372e398ab93a2b82daab58c4b70beaf8539d6d447b1b7d0938ea9943f2789999e9b8e77c865ba6700ce87189fd6395683c7d2844e32ec9eaa2916a6e712ad699c2abba54be632c97b3f2c599512fd5914e7f4384549e9f558f2a30b8fa5737f1f997c0af5cca019854c24975f54af326d094cc4f6f0d2abd204d563ba8be40a227c76933376f1273d70432b194c6bc692e7a3b328c4ddc7b227a7250561da1ec44a92bbb137ab1126b20827cd6d8bb6a5cc7a3e6d5f5dc3d97eb6693d03ecf3ca2758a7d22d0b455423849c7fd685de29c7a546d327de2b616212b36117c5b4046bab1003d47b86181f0dfbce819958757a7f8e9e83af7b9dfe26b6a927b169b1acce3ec44896aca646bca4306d2737330f404a6a6c2a16f724f534e6aca87802a5881c40b0550451fb389d3254813de1dc19ff2b1792e43af818b4685e9a52a395df8c9534f9540991e330b7aec13c20650f46c73bdc2a56baa142ce2e77cfb30b218d5698527d8844ceed81beadcd558d101cff584ae00e96efc540a427c592379e408dded57eb4e769e10596bf7c10e84b044419bcef0854779ce40dc55e873ac75dd47ac8e995106f4d6047f72e44193b87cbf9d2ab9d79092a13a1578f5c3d32b651c2f812cc4fd1d26a09432dacd274d46674b94c114dba17d55f728f44c3d634cea88f5998d32a1608d7c867d45ef693d30ec172cf3c47b5124de4f24c6d026a27dac4f928534232e92465be15a420ea75a235a927e36d847b432072cd4ec36cac74db9e0160e3a190d23f732b3b2a342fa51bdd90649ce2f17ba54a9e01249004c3bdc2b3a88b431fa285013d79152488c422b23418851caedbe0869828614cb1d8a2c4feaa0a9b130e8576e1b8a3589e31b4f8afd1da2d08f0642988d619bd33854691907c21d87f58518a7640634b613d4f843e4f553f91b905a6f814712632ca8a8455958879a0d683b972a913985545a54ddae576ab6e04534b51884028d8978aa1c45a716fa084acb62a344b6943d3dd17e6cf9a1378eba8da2cd2b18cf46f572807b756d4a6c31e24ab539060f10cd34731a8d7f9effd862be35548c9953149a22010409fe0605a0c5890bb847152fd5a1c0ab643a24d67b414faf815508ddf629cca22bc91583e3b8a3cce277c25c153e601941a196506b71294c285fd05fc8088bdc1c96e52de449219301e1068ee169511ab56e1248f6fed84de48ba6e089056c1a542a62889127c26a312e4aae29e3e05178a810c092e51e72bf3bbd3cbb7b12e08d22d9eba43807f44ad84612ef3210516b20262a05852b5d4294e9620f5bba226d87fcf6963977708d6f12297c2352a45a2238b1363d755e9bf0f9e935369bfeafe7dc81927f12906b10a33ee4b20e447594690726fa4ace2db665fa362f3c7a94c5345120c4a053bd77777a4311c63fd0dd81f7ecd60f88be15a9194041fd17ec27b5e9e01fecb73f9a52bde4f09b9b41f03f2cb57cc03b50e3ad489eb98a96bf148e21ff75830e864303a51c0caab4d14513eefa45af59e1c9ed991fffb4381731484089fb0d0274b7f899ca21fa7aa77742175a1714eda5d8f449a23b5a441903a4e5631124b81a073d7d11cdf9a94c46ff0191d761a9fb41bc5907d458968fed93f897110917b1770424b7f72df7c499c97754ee3b1c9a3f2c3fc0ad73547140da22382d8ea3436fa6c80931705e6095e3689ee5d18b961dba644556221c9496cceee63275597704e8d8544c2db9a13f0f32fb08abdd3ebabaef2914c3d641cb03b01ba44f183e7504e8284fe951e959256f5151435f615f3fca0bcdb2e828e34f37dc5e74166b7a64cb4687378e0c5f11819a393a02ba28ea136c3bd4dcc051e3f67c6bdc7ecec3595058522af3cc66f48b10a552b2b6cff8bcc53703c60ac20ee4b61be80898d2e0bb1f4f26c7c3bfa17910a2ce319f1e86a123e03a7e784732469aa16c656f89f04c8e80c38ea8a22ec3e534cb6d5ad23633e5db3a06c7e778d44be5ca11a0840232782a8754286548e23676379c02247e5e5aeaa32cdb239483cf93657bc28a3ba2a85501911863402be1147019d894d2276898c4ddb3c6716c24386ded304a3a9460f3820664cfc4389ac6a180bc87ccda0de3d5234591da73d094619317928c80bb91cfbfea3c4b7353fc0f885a91e67ba3c548d26e973bc5f940936499543ad999b8b7617df1208c4a6e3862f2279dc0663bb3f74bcfc734e93e01c563677a578aa74b8b5c7811f9b4ec3df3e17b023a8720cbaa7bdb8ae3a02b56b166f01b40b495a47e65cf1896ca1622811a37fa768c8010ebd3a8fef4a640a588a307e31b5744b41aaa4bfcfb985bd223c423fcb57f629e80412cb1de092e3a37e486a1ce59227bf3f70fbd963e25018dfd995035505068bd0ed0b93a0177f5a24c45b22d69b1aa5696acbfdde7d98ebfaabfa337a752e27000fd2d491bca20eb894feae92a22c5b3f3e31fab9c47bb57d83cfe9defb597736bae9d9cede5699018c67120299732595a440872cf8742af4d50154b6d569e4de782ff52f7b027707c007db6e0e466e774b006de0500905b4ae0d45aa9d3aee06e94bcd97e9e74d661958e2810b37646e9f6e12500f0ad4bf03f3d9975c918eabf6ad31f2196e0d0238afda32c9131352650b02744417397e01c6ff48a35a2408e28488052e2de24cdbd08ebfc031f382b8074bc2d2870bfcffb8a838f804e6528e081b3cf4ceb5531a9d47b5615020ba596bd095772073ead9e1ba3b2867820a5d9816329c517ee8109d0f300e6cb9856002f69acafe3f5350efcfb4502a2a54187dfdc39046c812bfff44f2b7e2e611f908f9a65a18e7c14e47a2680fea825f2ffa58e829456fc9d01b0c9b131e61140c7a3c43ef07b53b449eb1c460ec14b490093aa4ac7b5474b4ef2bd5207ac920f84c860a1cb14ef08203957a87a7b5d2b94e18bf27c71cef73a97e35416bda7017a919f3b0268fd484f1bc3b3b4aefd0285c7de08e261bf77d738fba80515710f9f95908243621153885190d46a38dc8cc27c569418aab62472d6a896a9497b668b66cfc5b0181d5e403b14cae4309f611b922217898a1222567958edf58473f751a7c79766d50de5349fc1f38ad54b58c94551a3f5d0e7725c5a1e341dfc597af27c1616c621d2cfc3160ecc349ecf37b6c548efde703e7bced4114612ad3e3479d7de2497e97290b9c41b7dd61a8c20b360f777017ee44c48cceb5c9b5c4fac8f8fe237cc367ee9d9728579150d6cfda2c70e4c6f770a259b19fca3b005883202eabdb2df881e988e593fba58c29a71c184889985ea3d2f32e97b2d671bee3da732bfe483ff580c12c2bae724cd9372375143ed7811642830796b32f6d257c0594d6c74dc98034532badd734fd53b69615b4f4f1314aeb20ebd1f5fdd1bf7fc6a8e7b8ec3fa8b8ec2c1ea83de462f30c661324367e616b15590c476a27d0a4d6c245e14e578319f220abec44cc99dc5b36ac1f1ce5560ba7e0836f5090af24a62c434080db878ef89d6703b266925e542e8134181b4bb7d533397e2e0b86ba94d51d116bbec35ba68878caf67dc063c66cde7e64767bf77c41b7782f2ca82aea9e86b30003d27bd204704880606f96c62f40e8046c27499511eebc1b32720251e350690f13faf69a85283518505c021eec5f4d272b9401743e7971947cb295cdd0ed445b11ee4c99bc8ba97747d484a7106e7d5dd0009d9a8892499e59c3ce0658f44e03825a0de356e44e23b3644013dab6f8fa8179f94a29413861fc9be66f24892c344095a74e21a6b1a00e6e802e106c40b3d6d56915df64a81ae5c7670ae44199955fe2983102c520a5fc648bbeb550dbcda14aac8366574a884c80155d8cc01a9bf30104aafce8acd75910cd626316d70b0809051d98a0ec6eec8e2307fe4676ebcb4f39582a1e661448b7701941f8b00118cdb293575a3e54d10b9f011ea175612cc106067d6659a77d2427e041551f2d33d614982b0054a5e1ee0e61f0b5cf67f12eabf642c5fa320aa6828528579a4e2fbb57f36c97f5d1d0a1a5ad67063b64b24f9ac8a2eae631b1612e8a4ee34a2d2881d0dea9901ee1540a5be5ae190d0f143e118e819119122abfab9ce1d8ca6ea06d050dbe2b83d75abd6f6a97d2b7fc901be2a3589913fdb6b50648dd886f8a0d46a5a88d87ddc742c7fdf4a85ddbc233cb5cecf4014da788d00fdf803c0e7503b22f71180f399cb468888b6d00972133e393cb0009c83c061e262a8ff12db5f39f06455554aa25f3f7f1dd55b03bfa1a03f6ee6a7efacb55f8f3cd22319f0a51250b73f459270fcb9cb9fd8ea4e7c8b9a308c0e38c8fd51ac054bc4ed5f65d809635faa54406fe30fdccac6bf789aac22333eff7bd9e82141ea8a8c65f94cac16ed8f889a97e65445f75c0810b3e8de180cf73e48255a2bc300841a4b3c340e2e13414dcfe4a548ff9720fd7f70adc3a0f0f6909e10b815247f5dfb5feaea7be39c07c4729234f6d15c2723ade9a440b5d2c6aedb1c9a6a7cecf6debf43cb0e0987db881e4b4a637730f9b43efce9115e0bfc5973ca7fa6cd53bb082ab12b67e1b9cda2c9b6241676086d6b80305235608fddda6fd7a9991ef5032b881efbff4603a3c3dee7e2a1304bc96d579a20f927d7222b03ae0e4b59c4647acb16d1a2a4f3e67539a7289dd461bc6bd2d0055847ddd2620462752a84c29f01bec05169734a262978e2cfca3f73d6083ac2ca4c360bb9066264c8dd9b90bcc416b86a12a5bde23e49faa6dea09c52087af4b766eb88f4892caf78cca4ec18dd838715df45a85ede863967437502a0fa7477a6235adedea4ce16af50f57cbff17073bdf398a6cebea902d3b0daa61cb56d9f9dee341d5311228f338218da4327150c8085049442ec3600cbdde314419ec4b18675f16f4521d75f4455c88a4dfa117aa0f178014ab7971ab43a536400f6a0f6b4119f36963ac12b2bd445cdec44dd52d3fd6de2c0444ff30ac52a174a7d8de070456de0944c46eabf1e34a956f1027e93f32e50c16c4250d85f309cdfdb288eaa50db15ff4c05a0c0b11f09d0b0ce5fbdc7cf6e11f7784fecfb94c4123b2f0da0017f2f90fea1d5813f7180a3291d11ae0a1337b2606647d01a9d600380dc540783654a2b6f41f473df7b914da49c2e94cd89c2151b34521f56ac73ff1812b4c504e02316710a6cb51d3c8115b6cf83bd310650e651b9c49fe80a130a60c6faa6e9d7be04598661b64e38c0e603f95d96334d2c3b89c8835609bd0d1a2507985fa1a23a5a4d021758a72099fb8c3ac7e357d6908548793ac3c4a44808d212d3861606d4476c0712081bebee381c6c44118722d379d7349b5bc445a881c9185f67e4442eb4c9372ee4e957cedcd4d06ddec00c8d0c604a3f2f83580368a77fa7615381a6d5039742b7632c8a50db361072f6d4b413abe96b72afd82fb8fef1ccca9516c65c1d637eb2c7ce2e3f076a6a680aad9389409222d52d2659246176f3f9c3c98b2ab216a01cbc1eb3fb12bc4705327de652562642e233b2b007466f250a4d023c0729a10442f93ac9940f6306f9ec35a0045058ce97ae8148c899c37c3a009104f708540216abf2c548305f5d8048821d422a41bd049040a59a7c3112cfd72e215629d2c38f7a7b349317b29d5c15e23c2a149d204315ff88a679c76034c0615dd18290a02003d047c4485667eb77e931647b38b1bca3d4880eb102619a9f3359e40c70486332043f581846b47427b33f3dc0a10ae9efcb0f401e881a124083d039dda6668692dda167fd39212404e8118b1c7cab73a507f31c079820959dc6cf510f34a5170aa41dcf69199a5f915b836e6bac711a08789686ce6b47f1b4c8c2ffbea96e5bab44b5000528e2182d3e8bcf2ac0673e96cd08de33183040cbffc958902436a7254d02e0eb7877ad829773ccdd17617101059d3d3baf2a898ce25ca17d664db8c615fef8b23398527d905e422f0d8b22d2071b5ddee4cb28e91c946bf0f2c9f8d305f6535983094987ce9dafaac3a81a03daf8f83e747648e95e17c7e4e335edf330e6f1f0e6e30662ac3b911370977369c70f4bbed3bf6776f3f3db35feef9e0e980f6cd479ff23f91b4062f3b15e48ef8d0ec61912221d3113de049d4d76aaccd959648b8d77746000cfb3987d47d149d44f1d960542baf04b76d4143cee517844e8173409f3157fce619becb43c9c5075ecd953b6c636cfa6119849f7e1cd6bd6cdc3d5528b1c34d74196f7b9ed6bc784f8a9fe08a9849018a84ec9555f6c97cb1e948d1296116256761bdfbb0b8bda382cbdfac3c749b92ef274c7566a2cb393af9c9149393a97a7004a5bfc684ce098a8e1e7fc4b524b9348c5e200a3e22b23defe808243c6540da4388432ab4aa8445ce87f6f0253def3d37ae761d618ffadd96f4d09d79e9f7dc3177266ce60021a1ee2d829e723a2d4cb56e78b89069dd2f65edf336c9d710f61396e2572ae318ebfe9398cf99689bca14a7ca67aa093bfcd4d4aed61871a3e9daee0c4b38209a056b7a754ae9006d19c491c94065de215c3eaef6550e989ce75dc6ee0204e9b3ea846273585a398418fab81a70e46efc7f427d04b646f12fa15b4d24ab70aa87e9f09cace83d2c23abae290b006dd8ecd7610c27e02a80de73a912aba5bace5cab9121b979a15281189277db2edfc48aa10128d9c9a0ab6c35c73f5b62dcc4b4d4ac4e60ecd0a48556e7ceb8a2b321c8969b5e3617ace7bfc0c1a8b53b88ae14422e3f64e37a58bd932c5db6e0ab5752a83e5d71e090a586e5311ff2b2f7c2a87d7b66dd8da9b3a61aff22092aa8f42dbb70d597c0cfe33c201032f01f9c50c0d2d3aa435eb45ce44b7d52fee333d4a53018d417291df526b6daf6ac34b5b8a293505aa4516dca21c4b9d2cc48bb67fba62fc1a22f3a2d153b1f8b1716536ee6e603c023cefd44a4b7165819bafd6f4ba89d4d03cd6ba850e5d8de3aafc3313bc4b55e0b284ca4095774a7c7f33ca3512af514908ad10f5bcdb70f2949c0aa2745956210354730aeb88f698e89eb02c40911258ce75b8af7321284ab91cd6b6c822f2704200393990ebde7e4b3cbe6c1fb8f68fecd15990433b0fd08e5cef46ac7d3b8b563684c33261d601a1984b9adb74a36c17a7e9b12da2fd1a7f7d41ce376da4749a5529ef1d5c6bad07881e85b0055937ec54705087720338c979444738cf29480200edcab17c0c1341a0ffc05e1cf3440f5044702707c8f1ef7b40cf5850082c4a94eb6122e564be52e80827ba20c30b988405918581a65e08be6777d6b96f805902c59e43b44da615d917580c37c46b3e0dda8f9fe8e4ca33ad58e87d2bbd74b2c48994d02280edb2c7dda6eeb0185e38b40daadbc7043694840b7ab8ea241d9fb614d8b4411c323a8c7f6a1190fbd0496e4ee9deb81cdb0abe6d16698a8aeaed411ea50709ba7d632bd818c18f96788f2aaedf224c03bd3f3a000aefd6df487cdd25d74b4758e5ad6c43dafab53e8ea969744a51168e2917df0f52b9823b513944f54d3ea89eaa2052dc9fac205ad02a5291f18118f348ade9c7beb5e355604305040b31ff106c5972b8b40b748350d4e514381c445eead20bcf0689c7201c9eee24e75982ee00b31b9d84a77f15c8d13a05aa275ff92904a1cceb4cf066c197dd7940baa808782df04ae274f260400080393ed59a6ca4db9bbf0269a48618d728701dfe97b34a787dde62f932d852712e02f7acbfc3674e1cc4b13027d86a81bcccba799af15abc5bca96d90e37645d38208464f0cac5a92d84ea48ea6fb89aedb1bff0c6a7e7f9281024b20f4ec8e14900fe06123c30746294a90d1948723a5273f7204a80cd64d7581f88e82af24ebcf30ada93ae98ec3e54127a1e729481085ac289a94a0f88545d609a78d659634f0f277f44373f1b3bd45f573314dc0901132f9b640b34cafb7963988626c14b06600e47b8a4e218edd8e897ddf2c20d05c5dc272b226495dbdb0b80b2017231ec6f1f4450bc4b5a307953f1642e1d200eda392789ddb9f7a976b4456e005264b2ae4e1cb7accc3a380c20c28508ecb5cb85c443b101a6c96eae185031da6601e0a2491c6a763a9bba6eaca76c141eddd2995138dcd42342459b4bd4c2e47817fefc7a702f2c96c4c17e23bcd1152fc94d4906814145e35167af54ca2b0f83420602a33c507a3030bd10e39bc1c47c7c182e80ec52332bc2a9ad5d7535721a0b056c1b2a6809618597d33255e076a361492b1f7c644903609cc92c764b82793b5745b29bb92a7c8940458e83266d617ffa97aa5462e1d71dc9a1c96d8d5fda7ccc75d5e5d48ad70dd5cf5ddecf8071612cc2217e5244a2912c023ffb222f1fa47ff5ea572e45d2bce0775a8f8d2ee3991df04cffd13292bc537b3b80561646f8b26800a0f0c6984531a8d002a947e1344906ef6e306998965961e3254d1a8641b6ae17de9a8f172010952c0ea4540eb4edc93c0c0b21ad61c896b74ae42ca38d9782339885db4b204c8706eed565cafeb86822c8d03673a0c71661cf71c46569509b11228f1e42a8ea31c396327e773c11469b0dbeeec42d6f711895e9418aa7e1d646eb37dcbeebcceb7fc520b2a5bb290f3a59c1600b73a0543c3c458e6e31f168fca1edfd8a8e3e11f8da30f625ed8973763cbcd43f1745261c521051371a5a242a9cbf2a23a13d0b1db48a4871c6a0abdb0f981d336e32b17f650f28a11fb3767319f9563782bfb87c603c87940e81c706350a06bbbc56dc675a450e076a6d427499a83e2496269b0a7497a09f701d0d1256a56f16c32a10115e74d26d5a79190ea9c803f4d80b8582413ca6286d832c7be1d6825c853041ab7da9f2826550699ba307ee1dc44263f4e71b1ec17ae9588f5ddf5cab8584b5a719c0e11c987b281393d90e5a5235e61646c75856b674a15331617d1f0e3cc9aa53f4b74a7c768502079464ccffdf90843310fee93cca336524906890586f29502ea42ebae65e57abf9dab60c735429aae179655ef6a1bfa0e58bd6de7d0182c5b63fcfa62302784ea414800c693ea7cc6d440221fc2efe8e8190fa16bc6a6030a2839e7dcfb93d8da9823f2bf416d241133ddbfbd0549779d186016c6719140d0ba865e140614a71a8c2ba548b6cb6ddc4e3507a36b98650880406f709c53a637b63b5d215e66ca0cfcd4135733f6f977028b66f0d3ab2197bd63267507c11a0d948da6a8df1cc4fb11dd584b59a6c6de7520f1c4c2d9a30b7e09e750da397ea79b0a604031dc8d6f767ca959ca635008eaa8ec14d7579dfc813723e1df6cb160dd59e0542d71ec9ff9c70c2cf5974c6d7ecfc96298b5a244c013dad8be38a1560deb71282f961798c450a7f78c8fa8e9f8b3e80f6d28f4bf44860f8996476cf5fe0ad8ee8e3f78736c58a490280a0372b4857461bf671f342cd11e0506ea6ba656c9dbe78b92f926309e2c7127a10dc4548b70c68a2a36895a86e19bbc4f3a6bae5886e10fc4f51b44179f8f37707e6ad7e0024c10c2f1d2e1a58771cf580a38022ab3e4d634b4b7cd14a3eeda06121204d6893bbb0382d47d0be1b14fe68dbf21b5e28e62139ab4a3abcf8787ecb7ca90de33da9b3a3249c3327f68dc24acc883256bc42606ed0fe43e27ea7bd57a5365d371192efd0e436344e6b40389356b8c82662acf7b93b71160d12cd95551ca16ae7d2d81ece502ff5bb9679540f12d1198a32787a3cfd027b97d599a1289b6390a335d3849d6703c533b8cdae3b28b928af856d108abfea0ce2929d581dc49dcc910c1781d489966c9094129908b32453aa0160109d6d9777a5b5147df94170347af6efa8a5b67ca5cfd3ad30e906fdd1d145234646213a523d621f61e1f4b464368dcee22b02d8c81f0b5d00f906a7fb09160dd44331c918b8a60726d62681ccf9fecd6900537403c0bfd1d026c7dc79f81bea93530822c9271839d0ac8d23118965eb59fa8270d1a848846e3e13e61a241994ce290f3bd4e73a067d21b050d87000ae3a36f0aff14c9d4eac6005f5d1a169e1ea19159ead0c65f4925766077870b2740d9b0feb6682e86097edc5e4e42fe811126847357918b3d0d220ba742a880e054cf0f3f45246ea265a4e44662cd597719d6fb8458d00a41cf757741b4b3cfbb8c8e2c502dd35487cba96d083c4fb200f7d3bef98a53727cea91e370ea1a859271565f923d91e104e0e048a9ba8362c7a0647aceac228a5b8dd442e20c82d29796f3681b8b83c5b6c2ee08cbe585003dcee16ecae8bc2f118cb5e5f15e35761bf282622181f89728a4ec292b819e3a9fdea5104aac9e49d9e54282958f309f76ef9b974bb4ae00a3ee1d6a9a16a0d1d08ac104cd0c190b1a478610357af14903ac7dc629d213707b30101cc77d2d1217060ca5bc68ce1d039aaa8117033bd55c090c4eee8a0bba212ab1b6c0a8edab6529daf77d05b32d5c2d83d835a9c7c545c15c3a9c39067aa25ccda73201ee3e89f3f47117168d80f806dd498b307dc2923b090697e38b2398cfd003b7200b681580ac512c0bbfd7a20328280231e6113f8ad830dc3ca9f9c6c396d13100d222a48c8ba1f084d975ff3214877289f33ef22711d274e1454c7758c9984c9b7e7a9d190e9d70b97728f0f62883cb649188e8673f4ed3a9328b1351a6d1f06728ea78eacf4e6de335a1551138260bad24d0c12932f4983e15e7c191498658d111dc6a731d714c021a6a6bf5e233e3a652a128ddbc01420fc0009e1ca0a1325e44b3a4dc65780086bc63152750f3adda3d12c72a277066bad1d3942fdd78375ac23fd3414acde49190e1232285922e8192393d5712f1826f7abc35ff822deb0a1676c70417be9da6f30681e446c5b263b9a0d3c0a1110834fa8ff78fa0b1d8d33bb81906c4468bae768c1b5b596ba3a157a6d0499f7f3cdc2513434b10a1ce9a280aea108019f8fa38e78b0ead41adffefd0b4e52f6235a3bd50f868125ad72d5cd680988f7bc2cfaa7ac5d12ba9c8f990ac38d9d080603f55a21db54db5339a506cbfe49abdf86529d7fd5f693b90010e9c0b2f55387f60d3d97daabc03b4c10b4f1fd329384e5a8c5fe1b8620b1eb787d021c440dfad2c1eeb47e2556dc8202e378401a791778d6cebfea58e32b73373575ffaa4180af750dfcc68df3f93e4b3fc01bc816f840ab1b5ede65b7b4c11a3fdea538f06dcacdf8bec4cff281dbc8989091afd9072e35e74c43f901f726ab714916685716443811ebaec4695e05a444c2f085b4906752024a758303374585daf219ae33cca8c76f28338520b0300d6fc3c84b8622974a1a1f6624ad71da0ceb1894b80e48829eac16329cde8baef44701bdb7163be1e1e2c2a55c2c9499572134fa0c53e0f8b0b3f32a6a80c15d1b6d613b59d7c273c000de44e9778f180715357fc73ee8c73df1b1981477a16459bc93cc31a716e802ac4006cc499ad2ff046c5cab90c1ea5b074c54bd91d6af8b86774199bd3a06edd56ae291272b778451f1f6f247699d06991a4a50a5c82d6ccde4aac18fb018ddb726634558972816c0189a319ab90792c2a78968a203dcdd0cbb95ba641e273909ecc842cb36ca8c0f91a8c39845caf14d115d1fad2e7dcdef8cc46f2091929df4a2fdcabd85495720a12be6e8e76094be0ac0a3a37a69475abef19dda3297fdfa5ba903ebf2f1e5649923bb3bd2d999c4c6c9763f82332100fbf740fe7ad461b818d200e4a20ac31165ca5febe7a61f7f30ece555da2de27f84071b13b200d3c77d91dd5e3a23abdd6640985394e243c0f05a79c54bb3c0d4fb0aca7e043382fdfcdc0a8a1b29d68518fe6923049e1b585f70c01543f051abfa46d327968cb00370ac05d793cfbed7a8fe119cf399d8174ae5783dcba10a0dea4ce4593f5809745cd6d524cad45abe17bafaf5107baad2f20be4e72ab8ad1e05b7bf77f236b60ac3372f5f474d9c5657d97d44702e2e534326763990bc1df5882dadd5eabbac5db0a9f520e369430ff406427ad46fe4dc6d6f67732010ef41b3e2ae58e02b6eceb47c9333a34096f5d27310a502e10904cad882efb08f7faf4151cc280c8d19f920d60e885a48597a2e6c2a22534a73ac9ef69c8c678e5197975121acbf56a23fc312bec518daf6508a0cfd47380f472e44a444c74664f51537411028459305f9ee934c278e5169f2e8e1e01c30e16e1e8736528d20d2bb78a02f7168cb72ff783e9511ab22bbb97dd5ea5f0120a3be8c4fbe5e8bdb5252835e10cdca335969fb654421a3757ae0b05863e1c9b53180ed449745d3771b767a4f5beb79e454b4619dcae9b5cd19f271373b53de0a849a59bfed71fd66ce3363707fc2b1a5ca50bd89bd399e6f352bfbd10389115dc5eaca7fcd835d4d18ba00417852ded9c6ed97dadea017212600795cbb7a12c8413195471be15476365732ae731a900bec6a438e508297305e097421911d72e8869fdc9af9caeb9d399b251aa50a8e66522657d11f323264d42dbeee1ec851e2bc7f216a01421476c7d8dbdbfaf54da2acf675c2c684356b245f86d463f3a9287a8904bf29530aabb4a9bc5c7d2c063ea02bb4a911517133db4145d25f15a519f8d9d5ddef49af8a67893157441fd8eacbd0209e624342b62a0b130fa4f07b0a170faf92d2c6616298665c43736268617df35dadbe411687e4e5622189ea244019f2eaee322e05355efe4ce6519efc6132389dd4a83eaa4f70f0893b4c23f855afb10827ffbe7d88a622b4be7ffa4719763b55871e73cf349a039984ca0c671f0bbbd91acdaaee9781f575fec11b563b4ede8f9d5531f5e132cbb5750221270cade71d25a6b6f652c32fcb6a0c09057459c5d2057a13d230815bd7eb0f82b529067fd1dd96f497fe3328ee1d7274e07fbb13c82d70bc2181665ec0f1342b526f09e46c00af249b889b7e202b17b5d0be58c24f0c279432b3f90a47859bf0e07a8a0b0d51023965638799e22f664ec853f7a45c1877d3d19c0b06d13bf77a4d98a4603082ba1d4075dffd1e676cc7ac1a3caf383717f8167f558582615d9244bea86825365c1f588e3c0dd93e836ed95ecb9c6bd40e8fb159091318530fa3d68b89bad3380e6bb53b228e455c50430e47caa4322fb172a7a46c593d900b280a1a84352b9a5a41c631b033c695ba2fc7da353605347f9528d84f5e9ce176d6c8da89d1a30738b86dde7a30bc0cc602ee579a8c3a0ec23ee5bb619d48eafd241e1283ca5a233f58e8c4bc1e037ce686db2f5bf62fbb63fae8607fe92866484ed6c21cae98b5e8c5f86506bdd74ca755c24f0b50d949d08d6e2faf5846da83418a676914392b85e57f7408c76a2bb6afcadd7883ed2836847de2d4d453c6b339ddef40703e43df99073f24ebf8c126f7211979fedf85a7a17ecad606808d39baafe88ed8958b964f610da9afa8ae8be9fb257d8cd5fc39c38f95b577d8aa7a4c00230eb10b945292781aa6e614ac7c62b284e83de33178dc8e61361104141b8f3d83e59ab7bd62939db0ca398223c378e40f03adb2b5cfb627b795ce6d33c36b40798ba12a8526835817eae7a990fef00298b3b44ce54c905031895a994e02c4d637007a9c51e12929b8b99635eeca51909c2cdc1d5a61c185eaa1b9c05a509feb885681426f3cf61a2f5c34576dd7e6c42a951083f3b30a02a328cfb8d48293e437e8477d4ecece86a71bb615af07b487a7ed1d7a04f5ba5548d57567ee285f99f4097812ab0b77f838aa8a21b02804625e9525439660aeca17b9c1f8a39e367c8bbf7646c3d7e5a3ff2d702020fdf1d2d45dfc57dfea7432a2f7124d4d21f52dee8ba6691c545d645662946c4ea3f909d0db6bcb1f2742bed6a12f0c3bb24fb5b9d75b92de7eb6c455fdf1cb1ede2b71370bd5d032f6fb757d6856650109799d150e73d133d01cdfcfab7b3def0b93c1696c474529be8310b301b37e925dc42cfb38dd58252d4417b2e2eb0f2b9e98805aea6ba8b415bdf111babce72348ecbb224843592399c0f429064e89f7ec59952abe7700831c7fafdc65529a164e25a1892a424e9b9a0eb08982328fae4a1990c759d0f936b8d56eab80bb683b468ff8cc8e3e01a0109654e291a677380369d381866e129ad10c4352f7c2f15611b2029221dd037487b7991b083f52e298dbe2de986e5322de7941686f3e8c7ce625689b28030d44a8b657868e6775280ae7721c15099dcd3b5280c3a3577ff4ff1fdaab472fb4124049a61c4d87b04ef2bd954b1cab89aa81c82ad75034afa1fb908b7cd9b0b3bcb0012e8eab1777d5c8388d92a54d509131d64acdc690853adad8b4a79d9f798177154ca28c8aee16934b6340a0a4e68dd5e8388385191fffac5ef9d5d48cdda731c8f701b54b700e96f6edfed0414d8bd1e607e1e64d7888ee1e712f29b7c135da40607193e37618353558058bdbd085be4baf1fc0f0f963245a66611b4cac646e504c0fda36bbdc609a6250c0c77fb40d76d106cccd06121ac40699bb067a59031e5e0d9c24e4e69f98c0bb1a0770ca0730397eb07aa5058bb5f12e585c11c743bf8336213a6f50e6861d660168f9345560c10306a4758863738b1ca580b439311d80c1d80644f926cb43fae79ba40acdfc07fb3aa79201190629a2c67c666f89ef49a5b11c3a347d396cf6ead6712ab67c6552046947213ed83288cf8dca0bc615fd2af318305bc014e560855b27aee07452cecc4f1554f250709e92b54379d1410076645ec1a600e60c1eff23c73c8c86e4f420ff31a959790474719d406f74bd6fd010a7092fae9f8f541d82e8a67f11c7a5e47b6d409ec94de87994d7a13eafc251617eeed63386d5b3a88d0dc526aa35854325ce0972cae8f37e5f942ee28078bd418b7b09609a3f8b508ea37763fe2344576f73876d682f0e31307dcef31b47544109bb2927a092feb001bde51c411670e1a6431a1dcdbae15c7d25f17baa08d700aeae763ebac4c9efa4855138b78e46f2897934979a56898f2bcf500dcf2898dcde5aafded44d00ae7b340b513c721144630192c0d42bbc79660b03d112ea754a9194253e0560dd81c9522223b8f09a80a3c96bf0c204a19f74dc3c4a6d3c2538cf27089768bdcfb3bb2f70905ec88b649ba5fb95f9cc84822be0a2169c550bd632b99f6f30af9a10e1a275d744bddae2b80d9d37ad1c0a7a4a67b42f9b351a2b5cc8f304d4c453029e444c70e800f06fde56ef0b5b2da5c663434bcaace9aad1a36bb05afdac06a61705acd114ca4c7887030792c74dadf9dbc6d35a5d17d5b6971cc829dd6f005d6cafaff9e82c3ed370609f19bee4172595148811fecfeafebb1d2c22770d3989394a2f25c8ae11227588f97b3d483bc89f090ccbd40a3a999b06fa4d5b290fb4ce57be834829a018a64757464e24b2a686c5d3fbcb37f6d49b6b03ac55ef11243476bc7abbd03340c63312dccade09b7462a16177735301934bcc1de06d19aa870ad21229d42a04c7078a07c1ce0c7840c0c54c103d0f72dad5bfc6c7dfae8d9570e7f0a9cc9f66e0987444a55fd56103ef89f1a7538f6cef73e8c875440b4a1114088811f8466a49411e99e971e899ca401c9a253521be986c1a4400eabe675d646cf8654cf26739c7fbdbd77d8f664269026c030b1a994532517810ddf9ad4fa0bc762e04f7939c4222f4b50abc2ec86ef127fc4e62968a1f3171148c1b58bbcd45d34e862c368154dc45dc7616cf0e7fdbf05448f47282c4c69f979c8394c19a23078c16b146f6a00aadf58655b11c252a0464c0312a6eb7c6d8486a1e1fb0ce6dedaf28d9f40e5e4742e0b247eff57897408c1baeee255026cd5e2d79fed6690536f1024d9fd0c811bba9d47dd87e59f67a8785be939390058589b65e74784e25ffb6fec001c8cc561437f68367375cbe14ff99435f2ed405b8407908ca698418fdc5a8d8f53d662033f82042613276774e96deb449db57ea57c8488fbb0ab8e5d10edcdf1decb8e963ed916429c43f59cdf11201e107edac7ba5beff4fd9994edcdb7706820997e1983b4a89673d4960f7a0aea728e57c85340be5cb8b939d18bc7a643665f6c05667ad3807814cbb19a84c1f033e240644e5183da2647f1476e49b2a8126d3a7d3fee690369e9a707ea22dae786d5853fd91b217b93419ff74875c064992772b58d32ec5e1bc7e66f5b0f8135b389a85a393cba129f5d167835915042a96faed4e6f7a5b1a3ed1912c675d29c00d55ab6bbb28f33e5164bc8630b448b8e369c5b38e5be92aabf16bebcb50d4987ac03eb8fc79bd1bf115fcf0a82eb378744b611584f75170935d258a2808655c4c33a00337925ef8574b2e3dcdb83f5018bec918c095500dc3e8dba19c0c9c8f6a24d75c4f2be869d1823db2c8d657d798f336deb970ea38caecfc7dbf49cc7d8a731806e8814cb6cce339c415620e3d7fdfe8282269bd0733b9a07243563222f10c93b29e558db11003f2445c28d53656c10f4654c4de7c271f29d0d70b977fb09d120bbdd11e3839e57cc5de230d58538fa40c9aa70add122c5bf671051d788a5bf45997c9810310e48fe93502382c2fd2630469c5a1b09f53c019a317784e0dd389503edb208b272074270ed6a7d75630b00d1bfdb2b4c5b268607068b8db8422c589755ecb07e5713390fa05a25c9ec11512eee8b929cea1682cb92a7417f14e7052921bdac51617eae618b6948b27a709557565c6aeeb24a95eb739fd6530b671babde4a71db38298f0d34988c9e0a56338deade13b362774d045c04fb5967cc5508b00eb895353f512a93b1b7870eda139336fb7a08626b783c07146062822524bebb76176bbd2c0096f6a5094a47ae3d70e4971d7678d9fcbe89bf2f35596e43eb8025a628bb66dce748437ec2cf93e8532481b564792a5f186c482355a18c0bff91c837aa5fccf1a4b6fe495cbe478c42a3f9d56c5610794f863ea5f3357caf043a5672825721f9c263c8f2402a9fdbfd99c1714fe544139133d961cd45b9a1e0cb46faad4b8f07f26e018c52a939f9a2b4728c4ab7f02e9a22eb41942e959028877df6fede24831557bda07b66e1fdcc71e6e446d45bf68566ba7ab5650a15a969f4bf358bb16d9cc54b1c4df0f130f3822315d4db1825fda408646ffc0c710099826e463ed6675fb1f8ebc1e813572f6a6d28a988cbcd431df53633dd9b0698dcfec8f7665dfe7b2f0e8afa8f1ed5ee319e8c076bdd3d09859dd434ced44df79d57d2a41125e7f587bdb16e84e5df55d96d000cc1c2db3a59a50646f94c71de9ed1babf718022dd0edc666aa56535e426f903a904cfe001bb5d45ace36713aeb3008108cc70cdc2df8e9fb3383509955f35dfc0998308243cbd5f4c25106b293b168d99b90415233a02aa35a0d284ffd5d7a638d1f221fc9542576d9943860d77502f04fcec8429cf2758de7df61c4443a2a604e659bddc486fe92b519260168f824a610438c69dd576e9397af7077c2cb35c690e9fadb06fa38dcbfaf04de45c46eb7be4b29b95562805184ff17afeba4a4339e424b485d2e85ad23e052b53437dcc01ae1b4b93493d65cf274f1113cfa3fd8d3b62c1892c0f80a708368c914c7ae281b357f247ac8662539a8c5aaecd1ea4ce94d3d406b21b2825e94d01ef96da0c5dcd3594077c44c6667ee17945be2a4173041e83749eee4c7071537257c5930782862417a4ea9e6fd612b16cab65f2c62e30db7bc9f955347824b8d3dbcb9523106f95410a60d51e8049e6c570d76629c72f563c97b9edd629baa676493513263db692adff18ef11f43fa0f3bca9b59c428869fa4e88a92f46b7f45eb301abcfbe9445753f25152fb76245efc587a0ab4120c32ab52c418c044f804405396a4da53c1e7480fe351b0ecadfa22199ae8f666857a2ce9de28fb06df962b0dc2a156e83ba68db87e5aa519c48a0b3b828262854b1ca9a0f6d70c2b2527489516c3bae3f312fe3f598709def9b596ab4c37f1cf255edc529224ad3249365f6f46d7ba15d88876478da52a339f2d4f7e015db01dc1116e3418dac98a1236222cff3ce0fc1f73472b6f5caafaf2e5cae11541e0559f5c0ca802d1b220c810fba22120131b03140bd06a4c086444c0abeff6f245adbc7fdbc937f159c6f26991f5625c3e9c3a2034493960cf95d40c54c343190ddd78da7e21b4f5433b75a8811b6e71259522932a2242a28d8b582121627e8c8007552706144757f948be29af615488c684aa9def340ff7da961a5c22969b67f1e9827a56dcf92dacc72341d9fbe3f6fd4e659e89e5442f1253421196f6d4654d50cdbc092e66572dcf43f188f39be1571293ba14b220e0a4962887d877c227a5b22dc153d64daa252b75a3b1a23de33465ff74177730c1276a6be781ffd51fc1539dfb28cdc5a662d2a25732fc3044b5647ab4a446ef83913ddcd7e0d3305abe64d47ed89357565307ba503ae89ede06a38c70fe64c79146e622f3ad91c22b43e6a3ef901c6343fd0bd966a9c9a4751dbf810c86bc07a0b9a7d0226f64bfa73d2014880b881c8fdf83790ff2901c705876516c279a0a5985d621d2262474f666063bd6c7cd4f400f972fda4312288709e8e77e10a955f282ff138c38c062b6a1bc2d93c7398dbb77d4cc8c400d2618097ca7872a22510b76c5311c17c6dc89dfd187ce12b0f37c538ae91ef65e56bfe11822cd7ed109ed79281e8307a230c4152265e170d45cf1453cd625473dc7bfff5ab71534e9acce00035f0571f841ed6cb5ea872d13bcc792ca6686c3bfb4d755f680e6e8ad976c3bbde750265c5d4c965c8c390e90b05e217db50311b158cfdf9abb536be7ecf3999661db21f6d562c51a298803e1f41dd25100cdedbbedc914b11b8d61993618c2e547b013cee8cef8f401e963a1081a830e009b67e0fa061881dacf0ec997594a4251634b65299c6603738c831636772efc1323d82428e6871633ae24b1c1d01587afee7c33a4e41729479ae7363370022d77f093b489d1b9b268b457b72e85277a74aa9616a6c146540483c948b87a54bbab424f70fe6064d7a74fb1084b3c422491b037abad20162505218edda84629f3f3aa4c5ef8298a5f5df5293167bc2fb6709286253742540633be710517f54c192a2c233e9f82a5463dc23c04d4866924a4cc66afe3c89971ff83bd01db06438ec98be892e37643e062bc119fcc2e4c17e8b5d67aba42a9d75aae23e8d0399508e9dc18112d50319da227d0c7afa12bb24fe7bf7aabd934fb026cd437ccf5b631bd3defd7e308b170b161f177521abacf9bd300834365ed66aacad25e5d8880a745d6cdb75a785e4d4075d07f519d038774047dfd8241c535dbd7494d9ae1ef6c4e867be9da174894a218752b927b87c8263eeb1de708d3537c19b7a4cd0cd01f1afc315e8e9597434c26f7ce4c0b69173e59d606644fc3851aa80e7c8c54ac996c2a152e23a10fd5ef527370d1cd984477ef7a0e527aabffaf79ad5d9d933f2c0f9b409c55f6f90217c1bd30b701ef3ef6ee87ea5d0c6fca63dfae468d9db3d857ddd3acb4fdbc45119039b59af6702462be30035404715c7688ff0339d51ba305012db35e92639b6497c36775a3c6abfce5732e6306a012df6968c27248a68ca65e322cd0d7426886dc62eb63333c1f88558635537b8b86f249d7065a39fa258b1a7bbd5ae15bb1955a84639be18ed4db512273e89dae19e496eb765d7b78c902aa717e3dbfad8a63166409d25034c40afc19ac27a2ad9d62cd669af61175d86b41ac2f13157407041729628580b8d988fcac99683eb0d47ba0310c914c6481d679bdc7a4c839b9cc15a8bcc2607d65b4bb3c34526cc7e14672d60952311b962f502bf68c970627c5b1228a0eaab761b5cc4c13176168cc5a41d891dbce218dbf26e23e6623c7f7e60708b0506ba05233cb20d333e8cf3117a6cb087259a0c022356ba2d6a4fee2891552bc3bdbab871c5b88cc26d6546d09a7a0f96586045f6c76fccdccf6532c69999084f22d416a7f14a717fdf040d0fc9abd3784c032017d2ed9d5720988b1874919a84dc1c4f4d72288eb7a38188cfe3f671d1d3493335d9ed6681a8d95c1d19b5297eed38e113d31997124e95369e68aa2a35312c0841618df53ae7b9879b2dd3ffa95dc71f981e79e0d157a0367a2b7e9fb34af7066d38c96c82bc1d6633eec09413a638f6db023fc8a53dd5575d6b6f04288885b9ed763840dcdfaf5908e4cfa631d3ce552631b75b503034654d73c93d3f2f3c44b8ed2f13b1c9416a84ae6f35349f0116cff79324fc261e6ec5d1b4baefde55ccd8399c4bcfdf75804d61b323cfb87ae01cd96d2d071859aa539c0a982418041080e7ef47a48d8604ac683042cfb641767b7ddbb6bbe25e3dbb93a5639d02374ea54b354f43bdb3774d0fe1cde2f72fe8c8b055702096181489cd89b1e6f7cd87869d9bcf15bc3d546e4abd711d578c3221d30bc295699a7abd3df399fc7e4cd817f17d9b6b612fdc5ac7dd59e278ed78f9d02d780d6c8edbf6ea77cbb7b1fe932ea2df66134ee40f4701484803104d3d5f6db1299ac00568152809515bc5814cf62221f806b362cdc4515baa8b74b087ed2345178da7540dcb32816eba56573c4f66b4b528e263e8d32007cc39dd740a3b3f4d929faf8177aca01b092a777c84e1a291cd4aab9902880252d48449fa44503e0c9469f34e449081a07aecb4c39783723e1ba0b63b2f5379b10c51a981b37086b2a9cc9c0769a0aafe48f40c46e872b71f73513cf1bc5be46fbf92c3d212fd6133627a86f54f47eb21bcd9c078b315650c677edca08a2977ad52842dbe1a00231426e0823d8996dc67c8f956d4b3c5b612bd2b3dbeffc158cdaf33eb0b36fd853aa6bbf55575aa5808b8d1cebea2cb6c47a0e6a3856fbc43e4b1d9987a83d6da946311b3f2f5b394025764f1be6dca748ae289b553594e27a654529af5e1512496a5eb116cb51b6cbd9e9cba5597ca9d97fb82aef7b424124eef4339ad67f1dec8e38fa08820937a9188ee55f6b1cf075884ab7eebc5a701b4fac633df7d37ad01acb3ea63b3d5729bc6564167a554b0af6a4b5c2344102c7703f83e76a70e80ebc5c58a87fb052e0a23e628fce84faf50c9c9fa27019941bca64ce389eaab1bd91ca9d45b104f5156553d125674ea6a09a801bd4ed7390759639b471d2e673cbd909cb581c7a49a85bcba2858291ad5ba48c27610e16ab5f94cd8dbb76add307c560e57d53635dc4d5d0abac60d7f1519be10daa607d528c3870beececf5a55534f72d7d27849ccde8f5860cf421fcc49603ad55f68cdd06ff51b7655d7655589b7e605804a1166bfc0340e678672b81209051bac16834cde8a7e58f6d1fa8153c268288fa3f72e430848579ceb6e90854cb9afafcb15c506a9f8670b81f34286d6e07fcb7aab23e6c26804b237cd8dd644f0541a37eec3486c5c4e4d1372171b7c234cbaeee47d157e551255afbdf9effade0ab6cb43997694ba75af2fadb3789c4321e718e8e1c1a9178f9abc1917edad013a68f85446f6c4ca74f8793268f8befc788ab4197b206b0b357df0ff548a50b23764f04857404781a95c5af5d90c9b796d67337280e129e87d8eacbedd0fc08081c53c1625e25d1c0894112422a2b3c1afc33a7930bfe13417a410c160fef67936546a3156535784404085feb7947c34610808a11f72844f487cccce018a67460e06b2f9972c5487efde8fe12dd4417a87db6df535018f92c6123dee6c5cff4ec01b6e00e802b3d7a9664d3dc0c78732b0d53020d31915a536c026827b6b1b560bf888222f7f749b27d5036d4c122ab289c16bb3d11fe40ffab0c411a77b9eb21952dca78d1701cf0bb3ac26c88fb6d9a74e80a20736c5f79917964f8d162200b4203e40d2116f54888147b892cd8e2d1878928330c4f7682b5ef6f92dee566079267f775103c9608ef0ea7e665383a8e1d4dcab4a493fc40c757a62d8f25fa18dc1bec371060c004229f44a4850bc994ddb3d8989ef8dc79759ddb85f2397ed21cd947655c220f3b38bb77b39ae7b0ed03df594460b70b03941e62ebabead69004feb3d792824944cd84e5adb9d9454fa1061756d73eb716fa0cd6e61814ce2574b79c21dcd59696b70255f850c4050c9b22232f92fa01d02d90b5cc7ced06d6d61186be0b9867c666a287c41a8d2e334fa520915a73704d9a8c106245b75735e29410868d930a28ad3a7933d4a67a65b5764c3dc33e29868884b5ff66826654e41e8f56436f77a3748cc993a2f9a83d831adf8a36ba0d99e1f0bef918c1a5b09f08635284064139af6ba2537ecfedf9a6d352e28f6288753a4fe34f5d33302d03ed9b0902e3ccf69c12476b544d948fe2fdd3c190d6faa8b843bda3440297a4bdd5a7f84cdb3f014732877245f67ccdbfbf9a00f553bbe8ffa6eeb2aada71ef4dfd9fd00d0b8a323ed33f0e264b4607b581d7481fdac9ae027be98a47d6ae75c6512e4c95bed00907e55bc8477ba5bfbb0d5c4f06043bd837e0b216d44b9df3aa804286bd3bbef0bad60b0012ff79172c694eaec35fd62c369ad6995ec722643f3054e0d1e3b9c0574423e6139230e45e72374f9e9d87c82a4ea5534f3273f2bcb6c9a7e51d07440aa01da8ba0a310d43336cb0d0ba4e14b7d92ac88fd8af48f5447b29a2fdaf12999afbb215f9b11b1ade377f07ade2a7bf62948da9eeca928ceae0d36ef9af25eb4de34e04d78afe3ff359b8fca1c71f18efad24b6d87027cfc960dba1100d0e0af2269f6ca6990caf0aa56ef002aee04f98cb36e04379556576370a7c43a6a801b25d56943b8294d9d1ac49dd2ead018ee2aa98e46706b2891d5c1f70b9c4dbeaaeea5e89c7d035c53425d1b8f8b92ead2585c2b55770de052e9756908174a5bf706b8a484ba368caba6445aa735932b9d7055455f0d9c2c76b23f904d35c74513768b0508edfd7190ac095a4158d53b9180643a0854205878934107e58af95dd7ff1fb05252533370694eb50265209856ff0b956a4acea11bf06cbde1456eadcfedcaa4257fa06b21b3e4d81f847e65bd57364033a726d934c3b2a05ac6a20836981e250a121ec070a3cd85f85de3d7667654364a996f0a2aeccba9492f26c7fe9693c4c4718303fd5ad347b25a89446d4c8e570d6dfdac4853cbd52dbe77afff2af408f92035b95089f75d86ac64866b21975293d6575cd2853119aec848aa4330ff4e20128235da8f4632d99bf96f8b637b1542fe30bec05e2e8a6ae04851b195d55abb221b614616046245e527fe667cd88d0f569c3fbf23192053427d0c445fab52c45fb6d2692770aaf41b44fe7c5c08b7d1a3230de93d34f69be5ec32803887c6d4068d13d0d826b161ec5eb1bca464165ed82ce5d3a61e00fe45668ef3190d401ebc8fbdbb03847e29f903a02658e9504b1622e60c4cd61a2cddccde492678cab7bc3a117cbf5afe22e2ebf4e58c7420b027b43f98fc4bd859fe93c3df940d6a86cf48f2c4f56832cc12a29116ffda2efedfd6d425539ad0895fcf1032e554da8db7cea2d69c530a1a098a7aefc703dde4eda41194834ee53b76a86096b900f3ca172e2a76528ecce86d2ee1af61dd259e072cc33a3911316f6da4614d245a5e2a3b4ff40611b5910fe1a85bf05fe8ab36a8550fafd3ca04f8a13081ede6cd4131e2f2467dc9eb1fd80ba31e72465e114070f722b20937e1293581a1df97e3383ca0f7e8f368f219be630fca909fd720ed8f537065c3aee5059ee45d98aa6f4f798202a26a0cc03f93aaf84a227b8ca1cc92ed5cbead3797e1cdc139ad41e7f316009f4f84bbbb44cc8c92041d24f3c30d38000ec537aa3fb41c274da07adca1e73fb1e8308e2b294b8ca7966197ca1899c5842baba0139e978ddec26c4406f1585db540ffdb0c7d82978fa99ed7a4db8d18bc69ad6ad9caa2ecb5160a05df997f711f653e4d62b2fe4ea8cfc2ea846ba429b898bd8219fce01701c6d67f3880e10cb15464a2eece67dc55a6791d34020b45a21ec172f279ef107aee1024ea2be740f0a9ba1aaa90e5b3d215c0079354d287f6145d08d688a0dd57f0502fd31b52a7e64f811d3440cfb3d3eb03097960baee222080396e156c504f2a6c90450c62839d8e7b657d06112bfc49fea4862fc3d69e4283a3bee5acdd164f06d1c461fbf6763f91555be0bf8465b622ef2b4761a9a4331305bb878fcfbe1327c229d8b123a05b7a8f23c0fb7183bb51740f10d9d238061bbddf3c535ac0e445c1acf6c1816b7091f4fe17d2155efd0da8ef7c275c27f6ccfd34bc85c94104d4ef53f94452dd26c22ffd0b76b4f1c0b7a16dc56ef895706edc8cbda1d0e94c11fdb190a06e389c2d9efa3cb3e75c0015c244bca5638665b18405c06d43f5c6bb3e08841ddad301d74404bf14e0a747e10cb7b8c1426c18f36ed457c6aa03517a488ec9d8c0dcf651e02c9c971b1f46f4958fa92d92204b5048eca67ad14a686fb887de5c726cc0f896440077a6c3997f99fc3afdbe926740978dad2f64c39e1148ded571e910f07c7a3362b1bae9f8616c3ef002981b02887902cbc957cf2cc312c011eaf0f2bd6e36022921162299f195409069dc3b408c982d8203bdda13682a5c07b96347f3c4a301cf544590fec4a73e65d0ec2942d2538b20b31a54ff6d5c91f57da7b67026556f16727dce6d5b5e08517c15628fa01df3b5a26b612a06fbd902460d8dc5cecbd13e92a1e786d93920b05d100191e020e0e8783c21dae9f82cb45c95601ba1c30ea313db8c7a51a3c6378434ff06f2876c049dad30304bc4a3ea319c978388a882d691f463bb9e0fc2d5fc35c30b54024995ec4c9ea49f0227e3f6d823c41527200206fbfb96b01d462e31cce1dee47343cdead239c64e02d358a058ac7060735bf8fb235751d6d4d28cc06a245be5c5b55b613b66ecec5eddff132a22851b9c05e84d0160a09259de1fa8faeff3a417120ffeacb35ac2460c79bf7ae760260bb90f85b66c564ad6c392215b83d5c60b6b43e864635208eeb0fdaf27db08360e6b75d335cc55347ea14bac256bacb1c015f495051042d0190b0d5a6147a21573bf3d9c950172123f5285d5089dabd752b7e923410442170a4940446ba512c144992b04a65580621565073cc82680ff1e96c6f1030250e85d3a93b9351e01a45d06af0c85c6b06dfdf18c1f74f70d9b40199b4898772103a985085492856062bbb011217f0b671b91334cfc32c44c84944c538674f73a820e28de6a30c38f14a564cf23b2f23ae9e3b394a66bfacaf754660f3749d8fda88ceb44a491c918d47867f3aa2eca6f1a782da7cf3775da36665ff315fc8cb45dbc953f36a0df836dd96a6788849e091568c130d0c614bf41253d813817d766fb252dd401aab62062d2e5c2215c0007ad31fe84f34bbddc210bbe940cbf31e6b8e152fb1592720fe8402350116be7c83c85856d2edc9499e1f9b78bf49678c991c40f3776cb7633dd3df2ea5d3e16431267296b3d84b3e9571089fcb44030ab328c407a5eb7e1b70c4e68d093b9451a0842005b9b0581329dfe9a10b14212cc404f14bae247a4330832220ae596eb85e676649f77a3492f41effaed384a26c3cc26fd1b293e8b28258a7b79e33caeaf1caafe83ac003435590df94346d8dd52636c94fd62edae1484b581fdb6531e486609f18c8c514924142751c1120c94c1b15befbb9c1a6ab9011a524a303dda33be8726bf8ed1be22aa1c812fd3c4073461d69104f5d1ecbddae8f6047f88477d403b1e0fe53b80b27f2a4e0cb7d540886d11e393680aee2b0142de5203367572d9cfe7030fe97adb14328c1acd5f06a510eec858995215e8262a07ff1512afbbbd7b644d502b20d6a26f77435d8efc15c348e9f0b7f8e946ab8f84b646612776bbb4e76351b84cee98cba7178e14b0f366d109e9cd4fbd52e229e7214979745ec64a1540bcb7ff2b75edef5ec7dc4a916d7de7e796eb419b314119624277e10e6eab56b65b487110a73418e504a442a126efa2ebb4bf27c9c33f2412d516b504ad98f4eef6ce82ffba0c48d4c839f54928ab3d81c41845b85cd50642eea438a28c375da7433ce39618c958cc077140219471be0838f67f42ed251b039894ecee02751cb7b96b7914af202ff9aa03b805495aa32d158be210442b32d89fe586ea05e89f7f311144918ed2415b2592ae8c752b01c4107d2367b745d083eb0961aec4940f303a950d8260f5d349902b46eb6d80bc7de43cd41c57fd5148ac33f23d36000467d985190c63b3a2cb934bef4998685e61ef65a5fce5219730f1fbd2dd1ba5bc30f782be546605fd99717185767dcbe311954544e9b5855e48bdcd27ecb929b8f1e89149bdc395f0415ace7025b2a2e386efc6d753648283bc8e623b69645e954700d3857f33879793b6925b98205c870e61cd3bec641ed3484d9ac62bfa564a31dc11217702906c8432e16e6ec5432612c76bc783e4b09149bbfa406396bac9ba4eeb52a177b021b404e5d347b05e8641793e80aba8b80c56a44b68c075b0123552ac752668240a7bcaaf00ebf2a27f0802a265d062103b358845929b86568c47cb19e42cf3fea080c4b7462b432101d2382ed8669cb8748c83a85532e3a5ea0249d3aa960fa8a5944dc474853c379bfaf0b7edab2587528d8202ccf043b6ee5fd50b1b685bb83264fcc5cb78c9868776ee937e3b6606158be3a2ad56c2cb02226b4bc4d53ac26f807301733e622ccdc1738acb00fab603d629ed3721972bbc05fe8be3e44af1a6a6d505845a93c77f85d1a369c6f8d171ab0f7b28b344e467c09fbb83e346a273888d58096bcf954952bd7ecdb775ff935d3502095a9d731a051d1605aa5db5011bf9574d3892156ce681b41c4404e15f517c88a436943f4df7e787a8d621b63d85c20f11ceca04b42a4e9318bee45f311a1711df43134fbf7ee267f4922f028a41a91c90d2efa394b008fd7c24e9a26e236bd66729cca0a35f304a51be49a6972a956db57a320c96cdfba96427a757435345e46fba220e1e44c48b942e6503d21418d8099e2661e10a0e1759c6823f87ff49697019e43bef5b348f22d062253294b9fb006bafc9750a74a7487c2625673ae8ef33238b7524f94c21998c272285a591c9af1c26aff2973f929c7d51a031ecd80e33204bc474721ec0d359fa4d93a692bbbce864882a0371608cca95a1ca29f48c16428bc8005406364b2fc4bdc024bc728862ae7d89a6f5cc2cec06ac1c3b8c03d8e20be3d4e3107706fb2e4e42963205ff622cd554ea7fec8e5fe8fcccdeea2fa8a716df3fa11077a7b1d9d47780143d483b7ea82a0d40aba6cc9a5f0ff0a912859b351f2451aa8b73538c5e77c8152cd3077bb3e10cc984132f654da9537d8d2232c840898a794af5c49917becf5ba047076a61a881c31d1992d1a40505c54477ebf6955a0c388ab236eaeee0af63850021a5a050848690fef99def0b41d6213e424932351d139f6ddd114371d3742a9ff35343a11064800b93ea15c175be9c2906a593e61e0cf40065426cf8847d0baed9c5243055570a875557e0990244d28e1632ac4f98fd3a6b45495ba6cf13ff071d0b66adf29d94fc8d3e36a71d0c15d864ea4522888cf61814b84bac4825790e8088ad1e5979be3e0e63f08d5766e26cff8408b32feca34e0f6d9da56c68a922049785511b2e494bed2007e48cde355da737c2761f0734122b960692a0ce6f5e9d04c98c2f0ec53bc2bfc0952c73389b1ad4676e5e8bf41f61807467e517dfd31c73598436c53d4568a22606ac00ffed231d830fdd5aa32113634b8c0394ddbd5218e4096f78f3cacc2008aa1b9e2712fd878872a399f62d52c1f43ac8f8b5c7cf0be2175313ff7de532d917fc788f7e0da9a9c272cb9e3247d31447fd87a66e027b37b904f396e84d8a4360d08bffff4061cc05339c013821e9e1ae1c35c5e61defa9d6eb6231cd9ed1abf68af9110c5e6f024af282b6b06acbde228a9c51b44eb627518d03b4c094d7c3c664c14884111438b08cc29508192b2ef2994cf1fe030c1bfd69c8675a16500491659ecf5edfca00783f47651e17b16f96ebc18e8f0c31dfd812c318c13f79d4dc088f027196fcc523c4e1b2b5284c0cd247149f0222ebe5efb1433089f5207322e459eb5efedfbbc062658c481efe2fd9f3637e277650903ea4a0f1c538b116f56de5bc40145511c3e87add97d3eefa89b1fd86ecf755db91d12a40c08fa674292475dc196121617922832f795e3cfb311836096b67d564dcc84f3618537fd524e9636540a9963ba035389dd44d9004e2f0958ed9a9adbd17988964e95f7a7498f91a978c12ee43212f778df279c41460c2d04b698792d563e08a67b77e31fecc03b3d798afc1f355b95d24ecef9a51a852c243ece5315000d70986112c722a4b08295cc677996130e4a114e554453c3fc1815cefd6df9911e87ccb2e79b87bb1bba992aeeefddf0b1a05d09cffcbd6947119c9eca95bf8a8a8145b61dfc2d833b62aa1df1b847c785d5b356e1398ab3d2446617c6f0442c3cd955f6a805e4f2e701c708d70f8655052b2a7467eef763315efd39e8ac14b7dd5351860ae1c9e40c4598d2343c25463f940557240b73870c305d86b6b4fc0c09706587e90d4e9b8bd4b2f279f332f1a150cbc07f01678e0a349d825c2dc31d6da19e82e28c3d313f158252b674af12b8a3edace2a2d67e41a9d2438d8139fca3184a5326afb867cd7f34a10746ac25eaf735889bab9b7f6e551cc3929ca0b342719aad149ec0fa64edd58f47dec578014ab277bdab7e864f2aa46a4df38093572b6aa05a5c66c458fdbe46489b14376913d7b1834c187fff015b7743078034e68c476b9a613af93788d4144b21c0ce28fcb2f0b9ec7f78dd4caf318ff5a581e67d46284e7db433f673bd3e84b2c4f26b53879f343406cf5240e080db529ec63a20636b3335fa1263931f60681b819a7c59090adcecf1776b5387aed2ee201fa0c14c6f01afe21128f60b0270e1d0806de3b880272fdaadd470804a7f8ea135d2e617830f3aee62c7a01820da58946c36bbaa59b9a6ded33e3527fab2cef28c0979231ea41bbba72291192514ba6b387bb32a8558552a9e8303bf4cd2aa0c8e901f9bfebe08404c157ca83e59ac24aa6f88407b5c92c8472c1f0200d6faa3f0bdf80ba9b66ae3a30cf95c52edd31fd8af38cc4aa9d43dbdd5155ace0d91b33e8d80a31bc4bd35ca4d6705f73dd321d82401488d0b8d247b82c878458a5496de3fe6a3d51bb76df907ef016ec46d9184b4d27bd7004eee2142592d86632fc580b2a920e81fe7ebb6cc49fb38a0112899d599ea79bdfb6ed5033b188c0db2caff7b3593b1403e299ce3c7224eeb21ea565614bd69e02682970495194911561ba701294ce8beaa0d885923231d11902a163fd749678f2f6bb4561cd5a7a197fbd76631e0b6f24bc39e06784a6ebda451433395a2e59bcd4757e13684d30b054a20be5a9a1ca289146f05c5e78ec55f935ba0866aad068be58059045ac02cde8a1044fd40d020cca82febf290a27c7ba31cd71fdc36aae4e5f44c719762e72bafa8dff8059d3958dee02f7b1b566f7f5d6e65bd814b8bd7aa3ac127d1e2f06beaf40180656b68a1e0d1982e5e3dd60403b52b06a78cc3c2314207562fde379ad9b9bc68a074f9822d5f747bd23f7ad025c47daa985c700d5f9c083a2e67fd96361acafeb37062b31fb4c69240d14077854587e2f521a23a5a3ca922294084f0712785594f9971b2c553dfb04a3656cb7a075c5b08c0cff1d8245441787b7ae5045921a6bd5fdd9f172d0f4819ff7cfecc8d7115a3fad04313754b0b2656f5564eb3864ca855a93ff528e9508ac926c0b5dbd5b59453b24b703079332143397cc5ebc44acb61159fc0c59850439ca2fc831dd5303660acc9331c74c620d06b799c9054e1c36a344903703be80352d26030fee640d0d4311d41381b5ea6619402923a3e0c2a8b688d383315b81a11a96e99157fd086a7ccb53575169db50dc7dee4c73728402046ce3921a04aed654573c16143bd71aac9f7a624b48110e045429f650e05b27677ec2e033c5a2f3bb7bfd1f9fb952543405127237d9df870dd3c4aeb131bb176f7d33b2e0e5e7afc39cd84d2df2dbffad23a85b74abd32285aec33adaf953b209c6c95b264d221210d3762ad3b54c53317fa8c65783dbb3d318121ef91e3001b2e16182fe3785b3fdb97874d9862445f638891aa1be697afcd0c5994106d3cebd31e6a6e9fedaae06217083e3a2ea77bf10a3d7b031a01f0adf0146a099b3dc2f98b23a671d083802a31526c2385cc2b605a058f30a0fbba5753a0257d29e6740aa596107a6153d0b28e7d1f91b9832d4ae27e1f70d3884f3f83353d7c1325e7c637e04a84ba99f783613a42475a2a4937539b9b63d5e671f9e2173e23b786a672a2994ed2080418262b60fdd2ae1b436eda1eeb25938fd35b0bd424fd9537b64aa07946dcfd9d0c8fe06a9d2b6ec469bca0fdbfc00dd34e194917ba035d5ca4b4075f1476a42cded221d132c8d25f7d30d2d9d24d54c9b6d868a58a158edc4964b071255bb375f762e5bfdc08cd85151f0fa23606ac44c3cd28197138d13b957453138c62f5f19478bb430b8639ce9d7cbc5974552ea79bb06491aea0fb2b4b0922a9d2ca5d81749b77e84c9e3c0433c41e99f3222e54a3f4eca3c0b7bdb6e2770e1992bfcc9862b5dc11282bdf19b6894ae09512d5cbf65de8234c43fb64caf1e6cd946523fc71f018e5b56e7583a370fcaa5bca818dd62e84280fc7c8d76cd8bec4cb0ce694c81d11be89d569b6ef9e9eb1ee2b15754764ef342a385e5592c63b414a44598ca2c5c6305d14af31ed475f157e699e6d26f06ca3190086c784b69a05fe75b578af9ece3eb18e1868e62a466ceb06050c0115ed3176172429ffddd2664fc9a8da3969620d2060f89e6a08fd41c7af17e9cdec841d4e52928015a00d4b394a3674f4475d431e1df4079654202cc8b3542d38ad77fa38bac32aa4f20538796c645c454ffd18a3c8143a204587ea3606f2ef4e2494f449a16b093af89dc8ce97285e66e249fd758d3a157510b7655a32771785621f214af35458af5ee92d0f8572495af60496c02e815c60e83e2f61a78187d93e5c1ba8c9e812ea718ef9fde39d853d405b709b8417a8c0e94fb8206491bc196bfc98859c3178a9ed72ab95a4db80fe4498c1d4f59969756a6e8cddd8a6ee6414d81c30375de2e54c9d269377cfa111d2526f0c5aa60ccfb0cf0391c2a46592893dc8ca9ea952ef9864831a19ed895e1557a059128d59d447453372f5179087229d41b1dfa79effc3e5cc6f06e89bfab2b9b43d94adaf4a1dbf733f62d5420faa6d13503db8f869bb03967b21c390e37a232637b43654ec22fcbf3ee96ffe08302cc84857d1ae637245e302ab9483e19c92422cf827a451dead0f0f01cd4815521ec6e6ede9d26cce505f163e9f51de85f8d6bd613f3e69f8caf527700711abf3b53b8161e335fbf10f5a9e22547224ffdadc395abca94c5046ed137f6ef376a9d50bea4e925394350a814af9d2381aabff9579e22f1c9193932ad5d78b64057d2f4c33fdc068ad08a08b7e04f067f500369e746aa18895d79b15cb04e600b89c323eb3c17ce7e9e5a8f3e452f433f41a39e721249bcc51acfa117c80d53ad1df2110380dc5a4cb9be51609edb43856725a0bde70a9d29dfbc22d46f868092fd9832e29987dba07e2cf54f7d9e4ec6ac5d401ca226510d0e0b66f678bea22ec69d51375ed9b3ce41949872df2be666226f5c7a8ad2bd1de65645be74aae284f2ece8d3e86da35f1b27a9f209e981dc71406fc4ae79ed911c11f48ad32b0b428b6e486d3d360fe619970f3798da2cad027a59327556401c116d3a29b60a5f0bb562fcc2d77144148b36184100b28f02848fb720800862ab70e6944284c982f307873b1fddb019704cb02ac93abc38ef72212526a7b8aa32d06b0c4b1fc76c13b6096a2222424bdade52ee1d7307a207eb061e4f8e7d69b12ff6c5beb4b4e8743a9d4ea72322227211914e875311e9743c17b94724ec746ce6edd8a0c2a04add884144a4a605c897c54ac76ab5d2a122242424242424a4d3e9bcd30959c1a974424244deb9482724e421212131f386c4c82ca107cd134de874c29a514d4dcd68c5f77ddff77d2121210f09f954702a21dfd779c83b5ff87df37eac836970e74bfcc224b641484838f9aa00f96a5789a5542ab1741cc7711cc77ddff7efe34238958fe33e8e4b5d2e05640d779e2548ce8fefc3b9567ae55ab956ae95b9e26ddbb66ddbc671dc396efb38156edbbe73ffb870db683c70de8de674851b540d16382e44ad00854205c9300cc3300cdbb60df338950dc3b86fe7b6709c18362f063387f0840c8f49846d0bad1815c4c4c4ac346badb5d6621866316bb763dfb0709cd606b141e64a1e48b3658ef68061e1cc40be9a356a22e7f6358b524a29a5d6da5b4b394ec5528ad9709c9452e9438e2107084e19ac0de74d8b34d209668af47cdf4d5fb5d65a6ba594d2ba712ab4d65a69541a35ee58803bdf3531a7929c79b97d80f93bb2c92ec9a65063e6949299449399590a664ea58696993521dcbe5dc3c7d74899a924e676e95e53b8aa6f142f68f36457cacbd6f8663ca7d76824d41469a41429ce579001529ccf4c2d72800cd59a2c74e1ce8fd9cc08639b5c695cf58d9474fb5a3dbd351c5bb08560ce2088210a28707070707070707070707070a288220a29a490420a29a490420a29a490420a29a288228a28a29839d5dceff2fbebbebda5e1932cf68cee90cae95dfe15f8c5a51ffb5aa0694269e58dbdd0e34ecb27769e4ed0cecb19da6da6e1d22a53a60f1489e2856f64087b279fb2d839468c083716c3ce6d0f9f74a3ee2896f89829a034a1a7f423df21ecade12d1aac4f4a3de225d7fe66b5142f19b24e0fb26e9d7ad7025dca36987247b8608833cf9b2b0a4d968c5ecd9ddcb45a97c5326de33a0fe5a333975e2d44c58a8e088b169e8f8b1110c90b18d77f35706bb6362951b077978fb121c1279ac8e426cf4543d4a60ed5b69926298d9a266d42cd146fc67e1fca5a702be9184919f5584b0ca4893743da6670ebbd990b75a12e1f2c9a014476137083d95e585ce150fd3f7a4a01087da43203f062dc038007c43d0d8542a1bc927bda6ae5fd704f33994c262fbca7d9d878e03d8de4799ef77b9a8c8c07e35eb65aad56de8b7b9a8b47722f43a150280f742fcbc9f146ee652693c9e4b9b897d9d8789f7b19c9f33ccf732f9391f15adcc356abd5ca63712f73f13c917b180a8542799d7b584e8eb7e21e6632994c9e8a7b98cd34a9365ec83d8c44f23cef53c6c3643cbb5aad569e87b978d73def4a4894ed5eca64f28e8345d6d4a16ae3dd0899626d485f1024ef3158644947f00977ef454894be77914fbecb782b6fe579c7ac4c8944b1eeddb2e8f2bc4f99625da649bd77090467c38b318070f408201c3da170fcc43000210042206e3eaf04b542a150ab5b0ffed0859ac946336926cd6473eb0f72d7489a8c46d2481a4993b9f530606c2f569acb6ab5d25c6efd0b120d84ca41a15039b79e64247391996c325366ca4c36b71ef4c13c192993c9481929236532b77ea48565b1ca5c56ab6e95b9dc7a172257074361391e86c230142ae7d67f56582a301366839930cc64b2b9f59e906a3112268391301246c2646e7d8bebe6a377bc7aac3097d56a85b95cefb385e7752c1d8bc9c66432d9dcfaadc13ec722b424194bb2244b92b9f50df2fd44aeaf2fd434a907b7d206b38d3696152963d381da71ebab8bedf18d1665513e5844809fc2b0e842a1280f1495e94e5ff8047c773a049972e5e45022dcee748744297977bac2a2ab54a2a3126d295152103ef9210f32e53a9d7a0fb77baf24ca8b776f1f2cbaaec6b91a48ceed48c620532e189832d848949b5864a55233a953aa46864f603841a65c2c17cb1362248a8b776f171659a753ef38c19c78dceeddc2279f77ef1bc8140b07a77370bbb70e890252b1c82a9556a55e29f508089f8cb441a6583434fc86db9d531285c5bb730f1659239bdb8d7c7422599029160c8c166e77a691289e7735958a4999ba16efce459029168bc5c246b8ddf945a2a878776661513d9d58c7895dba9029644ac5c1e9431089d2b961512d955225556975bb156690299586e60cb7fb444994ebdde7132caaa30ed55137ea51bb4f139f6cef3ea120532acc34a93051b8dda78c44e1de7d92584453f3a5743b8f07b7fbd4814ca92c4db0889e3a547f0a72c291c3ed6e02994271668b44f9defd047c82bdbb1212a553df4da93b0eee6e844ca134d3a47e41dcee92bbc760111dbd7b1112c57a3706e076dda5badb01215328cc34a9ef5e225158d4a90ed577dda74ca12cd3a4f2bbb7e06c7433e085ba7250a80b75e5dc7a59a286cffbe12a9dae527895c0ab74baf52b5e7424d7e882b9462fae11c935ba606ebd8a733052174bea458a24551fe262fb9c704e2e4e9f13ceadff40da8855a2b14a2e3e5689e6d67b2c32116b64c158a35b30b7bef3602d522916299114a7c2869c704ea713ceaddf3ad78a128d8a70f47c6189e6d66b97b5d5114c584775544730b73ee3aa97aa2c9e2daca9ca72ebb18f62f44471427aa2277ac2e9db6af8fa8e578f159a52a94403f6a7ed2f6fedad5dd7f2f0cdf7b5697618e973f367f7765dda755d97e4ecf6b2a17b5d9bd37e5e0b476c7843bcf6361459ec182c4e7bda36bc194a2e25d4fa5a6badb5524a69a5b5bed65a4f6bad71f86aadb5d65a8380871c20dbe7f6b9e5e1932c5e94c5c97dc4b6f1734f86afde0edff86b8dcc6bc73e32f9f66f2e1cadddac2c0445167982f20a01b1889dfe2f11258a86b2c4548da16bbd721198df46b4cf6fe2d5ae85a2a6853158e450e200f966f8eaa968d12fe4a03200e4d277a059eb5f06c74cc59d2eeeec1015e96bcc58377cb44f1fa3e43350f8d21f8143a2c84ba594319bf423954aa552a9542a954aa552a954eac78f1f3f7efcf8f1e3c78f1f3f7efcf8f1e3474b3834a742e926559b945386e6654df34093dbcaed8707c1ff27213908f4cfe71ecf4544dee93c24e4df778efbb61dc36eed297d5db17577a7626e686de636969a26124bcd94ac659ab460a9a9792b64687ee44edac27e5a914d4a29777049bbb57066ca5a4c2653e6c915529c2de8a81d01c6c89f169b9428f4ca6fc1f4c22763f66c0b31b79f3da191768c1acce528103a04299a31487ca447b87409140a13f8489f00f320451385e3237dc1a534a03a88c0350629e295233e361a6eafa1e160c4c7ce2171821471a9888f2d85db57e82dd8f8d8351771cd033e760f6e0fa18f703f368f8f885742701efa050a0065418afa25888fec85cb63603424e023e38888fa54e32327e1b213580a08f8c8331e51d3f8c831b807f8c837e01e14e023ef0811d1191f2714261f671b6474e4b4995e985988f17156e1f2271480f838636612ee2c82f871024144535c3263f0c3473985b4c3e59b80c547991af928a1b8fc519ae1b20c83a862db5b28e032022ecbb03e97432e63970f8414d59b0ed9ccda0ac4502066023138502afd084cd411375620b062c44aa9881211a5214a364a350fa871404d036a6e8d100c5800af14c0ab20525e505e12f072aa71129d4e4e0838d13880010ad0aa19262402906490664a31660630238099d0cc1503000020680ad5a13e0c4f188e9eef8770fc5eb45817e1f88d84a3874538c2a837568b708411b322ec42fb8d1e1877d448a632d49c664e9784e1f92c2b1c29cc0541be1a49d6d28452f69291e8ca53d90c562a100cc7f671902f09c857fbcca80155733281301216052c062b612f2424e1d82e77f2fd807c35111596036c84adac549ed38f1b54cde7138edcc303f21501f96a21f6c50aa69852a9b3b23fb02d7664574444c29159f886807c35ae460ea91bd4cd77952e2d5c3397e98a090909c7f9c407f2e5ae958b0817e96ab9469374270a0faad40dc7857c3190af5663c0709a31611a49ca680d089a09094e784902492bc2edbe65430c29836f05f95218299a3123f8487988e023950901f38c24383c9fae48d14481e0231d7de0236df100ff4ca303ec438a7885031f1b67031f1b8806986b64805f98a4884b18f8d83317f8d8270b30e81c0412cc6f1729e29a0a7cec1d14f8d8301360160207bb504911af543ef24a021f7b25021f1bc8038ee01e52d42f373eb20d043eb20f23988b28825994a4a84f447ce498213eb2c90677ce473c80f9cc2245ad72c047d6d1808fec72997108c12a6ea4889218f071a616f071aa14c0df198920f80929a233291f270dcac7d92301cc1998265d833f65244a77fe2449114d893ece97938fb38400de4e833bd08414d5027c94410c7080197c13c89424bcf34fa08444c94c3eca14013eca1b19c7213b06df0899428269d20f7d943402f818c4001e43daf38b9028da59fc1880cb01f878203e7e25bf4ac0b772ca1425a6499f391b1cd3230847db2208c72f0431974712335a94b574a86f41108ef603a107fa3466ca2c7580c64a8bb014075636b0a28195dbaf3153264c066adcc6663050ba40c90241cc94f9824410352dc2481508474b8170fcfa13a8b97d2166cadc81231c79d522abea50dfaa84a395401881f0013365928ea07969913ddd7881c08b112fb75fc44c992e459c4e2db22f449c8638d908474fff8899325b1ed0aa165d2b07b4aa01adbaadba7d1c3365ea10221cf95e351d620069012405847d2466ca1c4d937e1074a64557a9433365b25c2b1deab9324dfa293328330998a981128527e1f821204cd1a82d2db25049cc9415d41812cc14154c93fe015a0cd0528070c68d49387a08108e9f8c3006ce6d6bd444bd5162a69c609af4ed00c2d10a20ec87423100e1e801400844581202e13153aaa94d2108822008820c8e702a2108963c7c4908820741b02604e7056b6c4c5e0082e3030c777eac53282909674b296bc95ab296d20fffff1f0441f02e3815f0ffe1e07f00ffffe7f10338ef79c424e1ce9fe80c3529e1ce70fe8629182c05f382848484848484e4ff7f920fa7721212f03f781292939090bc00e72501a90e1a030a437750173a833fc4665eb0196c069b7981010281402010888484e42424200fa7420202fd243f49384e10080706382f082705055d59a9a42021b98101f27d01f2d530d28e1d2e3e9fcfe7f3f9804020d0a705a702fa7c480e3a09e8f3f9e7f3997101cefb99a1a9820f9b1e560081421549a55291463c1e8fc7e3f17c3e9f7f3e1e169ccac7e301fd73d0271ce7f5783c9e11705e0fd82f0d8436754c975a089f4f38f9bab027177bb2277b726121222222222222e2f178eef18888702a1e1191cf3dff7844442e2222b26201ce2bb20a620797d6d12c7808f7b260eef5821b82af1e4e573d244a7bd8b2c81ad1d3340947254aee8813f46e5fc2bbdbadc7738f18be6f52d5bd98a66a3ca7192ca2273a53e221f94468112ebf4a112d820c5d9944b13815e6183b178a1446fe3acdbdb2ebcaaed3d34f18e731e68dc2f094c30b8b50a245063583bcd0704a478c4daff85a0b724965d31e7243845b83d6d5401b7c0b5a234b470b87aeff9eefab6f2be65e5ce26ed49079cc5b3aa48ceb14b4467bf8acd7ec73b4b72c361139b463b7312c5e5bc83c4a5989c7752488fc3ac7f00258fc7a778e452872882f12ce589919b5d4946c3f70437098630bd98716322ab3611b2c648276ce75f6c127ade2526ff6f3fc9ac1217e0d3bf39d3c351fc5eb1a8d4dbb556f067a5a648d3874ddf2c5973512efdff065d6e85ec7b81bb34327e6b57dad9432f897a5ea18056aa8831bdad00637b481d6ce518f041b76b88674d2496340650d6da7733b57c786d5f43a51425734e982aeebde6060b9f32b68c0e0727f2dae2f5ef846911bc25e51caa01bbd61915e8ed895760e1f4a86e8b170b416c5280f4c97f82413f1a843f4563be5d18be74a2811521c5e8d8cbadc12a5327dc645a0dfd58a7146f4bbdab504078b7c8b5a29e2950cd1f7ca77170ff2e598ff95779c382cd219d29426b9b19fe827dac7a5e7f6c1226d93947133290b77a3433a62f1060bee8a4f70e4bbe2dae48dbf6bf20399f8de61d8353a62b6ce2ad673b0c6a980d7a22d1e3aea461897c71697bdcb6f7962897ce4142a334de8f99714d1960e75ddbbf0b5a7a41d354919f4891615a7a7329d5315f784a347c55b84e3a7e22c68e722a1cc486f28cf4b5f8120516e3c9c1be2856191f28ac5fa55695d32287bde8f7b33313bd434daabd1119f8cdde769f7efdda74af71cf374054bc237d2153ee94e7965858ef8848e4e5958a4a3307c2b3ed2951516e90457847404f2d57ac5b33fe6c4e09b77124155215db148e56aeb2012c5c63ce1abb8b4a182c3ee7365863f7ddc66e66c6bc148238c4d12a5af8757e83d50f8c6567964be91aa4c748abe30a37162dea9c98c91f0f97c8239be8eaeeabb36b59c4ad77d8ef38d73a3fbbc10ac6291fe03d21c0ed1cf06c2223d55c96892aa90f0b910dc3bf8e4854fb84fb85af19b9877ce5ceeade2132b1cbf5ba735ccf17dae3a88449942a2f40762e0bcd87cadefc97762debe8dc327563852ef859de293198ed4da40f844a2f4e95b0a522465c3b8e773c736c9903bb6898979c7591adb14fe0b3997aef8646cd5a57c2269bec063d22097de023918be91b6886c87be3b7c92e674739b8583f40acc8ecf6add168445fa8e3322741b86453aaf4d90093a73c692eac222a52a29837ef5e5e837314d3737c76c139fccd07416240af6eed82b38762116d2161669569bda377c63c75c4a4f4d978e8cbc72e19395535275a9243ee15ac44f90217a2a582c7c5d10439086b974e495c7a575d01b8ac327298cb33165539eb2c18ee193b1a465e844b148cfd5704c8b661264883e669ca5987196c659b2fd02f28a451aa477dce5523aeaa33e9ac327635f2551e64057975ec3c025bc3aafc53f06ca3bdf3dd21f417e0945a7a4b52465d0370c9f6494aaece7a12a9162e7574c65a92e3d8322952760f12c524a45bac24580dfa298a35eaba0d82d7cf059af0c524aeb8b08cf28822665c9ec4ca65206d777af4fd2907b1ec4478a8ae8d0f5b100d7c7d008d612b078dd029560f1a21424c27ab55e5f434b882e019f64455c963cddebcc1d413330abb5d65ab390b2987da4712b0d3adb9216bd423a345d58b97ebd044a78dadaef9d9a659e7b6119166e2c5eb7f1d5ab5e2f24b64074f84659d37958745478d746938fc8959f41e332640a0e690222014989030916fbbb04b77fdb382f211a07127cf2bd4fb50f3c09f83e7ca06bff3e10833ed00c3912ba083fb39b1b7767cec6b681230d1abd6d9de4aeb3822fc3273b0ae476e2edae513aa964ba85738b11e39adcc2112943f1fba8d94b5052387c3d22df9723f2d8adbc78b76ba10cc54b6f5fbecae3e050df138eb6c5d7f1dc6eecdbb78fb2c60b47f1822248b903e99655198e25575edc10f4daa84409fd7747f1b6783b70e5b539d20b8e31ae04c7193d2577d3d32b47e686034d96502a39794d8244c88b9d69cc192c8790b76f797b4d86638d2baf2361f40670470277eb6267404a7929e5b37320e5d0d44620b0c392f02c56234217078b74f82c122cd6cf160ed55bfb7de23b1cc93e8ab7b6cc7014411c600cf13e3e4d6625252a20ae24b9528406274519d036f9832564f8e44710282c61b1a2e19b2d9744c8f710f27d1ec20557529ee0087f14a5ccb2110e6f843858ac8fc16215bfd7ee9e16c9855a10d7bec191c6b567ce060d162565d182e3572d9ed26a4b9e5e198e2db89bed7c208f7847b104f42bb72b445ed27081e5ce0ed861f10a4fc0a27ccf19cb5e0c1e7254b5d65a6b0d821650fc609e932b739d3729155fe0649129f30530b0c2b982866ffc92686b6fd87ae6cb89bd78b36bf8c64f8630adb79f87adbeb9a0393b34bb507399b3416d90a0042cce15fe92e8b078713e9435c4c322bf9e8057b0394c3105b6d2dda679ddbdae356f9ba2eb3a4debbaee5ea761da47ef9ad6ddc33aac5e0b52152d62deaeb3b376ad79db149de6795aa7755a6767b55ded6aad59cd3aed3248b72051249091d6d4ae93289a450389d2597b4eebacceebbaf9da69f3dddf3adb59d6db6a98e761da766b39ab7d9ae5344bb3e72c7badebaca7a76d5d96655d775db7755ddfebc231bb366bdd6a5df7b6300fb330cb3a6679dddddddddddddddddd695dc7691a482ff28ee6799ea76245c8877117e9ac50e1857c18e7719ed649942dec3948948e0f5dd7e5d036f0ba9ad79dedee6e1489d2755dc787aed3a6d0ba4eeb5af3b629bcced3340fd330cdc330adebae6da075bb59b559f9d05deb34162d7edd6bc1a2f33a505e0d6c62de1bbff51ea7a0069ab5df37457176b79432ac0f3b4d5acc408b6c3859a83c8d35346bb3efc33c944582d4566d4a19cc35a44ce5d0ef6ee9eeeeeeeeeeeeeeeeeeeeeeee7e121e1649c0a239474082609f2377f1f96cc142e4f3257cd2f90a159f9fc127219fa751e341f0c909f7f90714c127f6b35211f8f924f8449b1d4e0554026271ce8b2c32016ad12c9546a551e9d2deda9bd67aae67ca3576cb66beeb167c4141925bdf407b8efb40ef21e077156048075c7111b073162cee015b80c0255ab0b244a9adfd3cd78bbb0047fe015ddc037e40906509242eb2377c33c5a279ead0859d57bed5d58343d7b3db06edfd3e8f877b64a378b37064964cbc20cd03ce0b035ce20459df6a6fed7d2118345f806c83f24102364c8943d7e73cb588043224512890d3bdf86262de0c04da0d64ef08c836e007641f7c03320ec82916af8b800c0464158b9cc322af3848af344b8f5a078b2d2e4ddac1e20b8bd741b061c0e60112c13dec2b0d9fcc193ec5b8d725952c5e7ce6abe18ef332e54aa9a556e4b8078b357df87a0081c3ad16ce4c4d2035e47a5d17ed1817dc39430d1679ae1929c5181d969dcd948d5699c2975ac7516a59ccb2efc5b71bc79d35fb595bc35a6badb5d6be86ed9165282c4361190acb505cfb2a450c85a4c127d8adb59a8ad56c77ed5d381947da8b25480e90efddb17014412c641bed5de8c4bc5e38aa4cf6c1e225f9da8a60cdb2340dab41f1d043b7cc6c0de45e8d835d57f7b8d7e5f56e699164f1f7785a6c0b33333333333333333d9db8100bc32cd432cc8645edd92f6bbfcfdade9f3b6ce7b46a3b8336c8375aa3161ddceb960e9628f246768d414b4ff223ade9c2cc15c095345d70b95a4848e77476b048e976ebd92cbd755dccaab161b81d36a7b2dd9ef8445a89226f6c21ddac51ab5a658d2c1d2d31dddf6ed1779669cdd9393b677cac6fb5db6be7fa49b76b7c0e3bb7ddca6166c646414f93dd1bec9be9a83143d4be8477b577cdddf04553c5b45a67e65b89f26132458e1a37879efe1682586c91450bb37ab338b41fee467fc3aeddc3a9f42ded00db0138234297e6d89a8f7b700d8b172da2456cead0f5122b41cab8ce2027419a5caf207b20c730819720655cb740e651696517dc0d1aced1d4c16296915a462baa5665a02ccb5ad5aa56659facbb8ea9e2d075991a335c54dff51e5ff6ec5ad84ed0db5fc2bbfd4e932c7adccd519e9aef249a2dcc73060d6d8453e150f3aedd0b412c6acc1c68d9408ae64c87aecf130f3e21788ca08439d3755dd7755dd7755dd7754bccbbddc3d9e8264b877334669f3a66ba45fc3d9eab345b5a664b5bcd82bbc1d74227e6ddc2110bef511be41bd9c662a2892f0397984ed84bbf814e7c3e2e8c05a7929d6df80413e16e64e7f39823e44dccabe25cfabaed1db0eb20655c5f01f61ca4c97515e01c815307683d5f187af8d947ec59765d45e88406da317c63ab4a52862aa757d48592445cead0b5f1f5b1c3179f24d7cc78179a320bc78059244ac62cccc22ccc72afec9966c7ac05a7b2fde38cd09ee5d8c21c5c38758c260b0b9f8cf099a0b4c71cf149cebd7ed193b49fe7628c53169ee84933c036a90b8b979461aba40c036c0d5ed7025bd573683a744eaf680b75a1a40ec23a28cbbdaeb1edeebe49a1505da3fbf6addce427e50995fd6eabd2b6addb5b1dca6db4ef4d7237b4d0861601db4976ab09f7fa18434af92a45d64886aecb5b3690f2e4095782c7089f10ee68f1e05e9f1c954c1bdc83bc0981144d998444b1ff7c4242588613f4f297f02e3f63cba276fe0837840d3fba752869060ccb6ad13172e1d075991a3ceef57186b8e35ed433524ae97b7cf63e486aa9965e7964bf9698177b8f7b559a7bd527ee5565c66a637d7c381e20f7aa39f7aa41368ddbae85f6dab56f19683d61992c192bc66ab17420655cdf406b07d3a4825687331cbaac1d1cba7eb2351fea26159966a8748ada4b932455442300000073160000301010060402b1400ad3648d3d14000d72a6505a5a3a14c9a21c885210314831038c210000000008000008d90600566ebf45a7c01ea5109b118f0f5783d36a6e1be3e1494d211a861463de1cbe0330af553f72f55e086daa13556b05ea9cb8803fd6fbff372253f0c2e94a653797378409be6bde3af0d109eafab061c2935dd9b62613e63c6c5fad417b26283601510feb5ce2d94431fa442fcfbd3788510545a283ce63948f9dd6553b4be6db43553a40b9924b55b32263e1f4940b89c52975639a36336bc2a3faf6714e34af2241205ede9625589da867c349ae999879d56512e7723167926cd722afbab60d7573fb5b7e4754a0fd352049b837ccdec1fdb81e835933a9b38336f9039ee6d7501871bc89724ca97f5950452b1312f0120f6c505fd3b40d27ac2a798b4a83921fd9bda10c90a857eb35c14670bd366027ac93338e58ca2aa633d60e6fa5bc494171ee7a9ce0306000ad69471722d67cab8240cf7732b0acf2e9c5a3af1f585e9699987913578a837e3c1e914fc1852c2b603c266d97c392f2a364ddaa9182deb19ca83933cf69e93d5aaa9d97e35f98eee42408a4951dcf599b41cf55142c018d9e7605300342d5e2cba1870a3789df40b898b479ef3a6cf6e61a8fd6ed0e8d8d5edcd8d1e17cb456c240eff7553632c3371856b1fe4931fa0f8b41f58196f541e93a2c96b15bcd2288d11a90a29de26dc083e7267df990bde7d28c180b3b66d4728e1f67743bff27e0a0fca5a29ea2f8be686cccd2cd9d8318a533e9017a045ac174b9a3d474e053813bcd60a85f31b7ad808a0f41ef6b614e09325ad1a18b86b4009d341d11ab0e06e12feab344e6f05ef5cd568cbd8052b5c5f17d60081a382a0eb47cc0e2b077a60e209552a071441706a38e21bc2a85e3ab76085094fb07393f48fe20c1b0f381888ded4bf313ae0bd9a941291765aa5eec22395f58c65d09512bf43b18c56e1af5ef0c05215fc7732eea4e53fe2543c4d3cf4c794e72ae3c89e5d0b3b4bdc221c92ea2fa255ff8311f1264dc1af9c3c051e67b8d20a64c2986935ff5fb477e81554216f946498f26baf769ea3410411880df8dc5e60d2b871904178979c3ece158d552272e4a8737f8025a96b00790e89f1cb7b54a959046e71ceb903872a4f0d6f4d3961c0b2aacd9ab8f0087473c99d85d7ac80222a84aa3274448efd8a5cedc3016f99c48410448197a4e64bedd9ffdad64e22dcecc4279fdede9a3d6ff6394ea46ac0e1a07f2d40dd448d60e30ae539ee31294dd344aad181aa8e0b48347634cfa1b77b50d23d499010b620ff710419e29b8743cd8777a38440a6d2c31a6ad2ad8bcc2ab0429b564a3e0be6b486a816ed86d4c49fc1a219da9b85e4ede1096186c9e46afea9b570af6433214531a1a6ab870a2aac423b21781affbb99e0d22ae41f8e587d820ff9924f2cf03f098a4e87f674a80c1b4d125e2a9151bc00f23bc4610b26cb2dddb46cb5e3b59235f0618dd2e3be37090f0042d0f7bb0c4c49746f953fdd85a672c7e748afe49a1583f44e86003aec14510328d8b75a2ed5f81cd698c727ed15914589af5463c54df8479ae6b18320915831f903c28eebc3ceb09ac4c5cd3568793ca054830f8725bc2019243e139b2dc4644dcd8964d4b3612e64e06f31de2fe18c5b773baec18bf388e517c253f62885d8f2717b52901fc4ed21f469bbab8bf02a4e8b49d88be29b1eb275ef21052771a2aa4e2fdd54aa9ee9330e307c2a15e4c693c3227c77b3e4db60554ab239165c6d44ef2c43416d045dded53bc371d130644216492c2eaa0571996287c0222bb64774b02068e7ecad67808c60442d73b146046bb2b18087ebb099e7cac3093b2d109f567887a22c4ce8882692a7f4673274ddce316da8881fe9ff5e0f76bf4ad1088716d950e74a1886d9b859890bf2a5017bc164ee4f31624452ae200ede9ceec444b7c84362ef5a6497316ff97af1ebc835efd4ebc2eb4bf40db983b3d211b12cdef45b501ff9161536975af22db15943ae240412bac746e0a6024ac965aa7eae1a49432653bfe1239695b89d80441905b02901e79f8f37febb4c3184c05cd3403f574c1669f2f311703434d5059ab8bfbc7783de260b3d154de36b1d55e81272149c0e065093fac10be4d32f8ca68a88a9de549d74bf7df1abdaea186d50b16855b5cdbdf8dad382778af5a97850d6e277ab1adb0f73ee855362442859b1694960dec55ee9d9e3b28acff2661bd45c57292051b1d9918e66999156b2962a852863599f82a756577005244f56f04e9593964e49e261ae8fa14791df22e91574811f9a61e7d1ef2ffee62246367bc1cefabd46a801c179d9b9ad303954723af62c52e1eaf2ba22fb1ba6106042e2468448151947fe469c2968f33eadca5f03a92d179950a683addee87ac6f285cd52da92f70da02b5d9f0a67028cf28a0be0c88dee4f4ec2013d3eddd2161434ab7033df35d542145115d287fd8da9a90a7b907c10e31a4900a20e74ffbe66da797d57fa3c801b0d060f03d4350c247d26de1cb29708c7e6795a5ea0a31323ef89554aaf09d6851f21007058398dab11658d250aae7e652535bb99d1c60429b59169f3ce1e89fcc2b36dcd186e982e072b0f9ce30b5017f71a3707032b90f801182ef3ee315a616ab88cd893075ca38fb96f00dd09b2e56c506f1ea4bef29dd3096a1eafbe8c1a264f539fbd3883ebf88aa926737b1b06bf1bb0c6dbb3da32b76274733c2ea660503199374279a861f998dd08e4028839ab9175ec1ea648f2212b3442bb5124ff8401263799b970314dd98e35cbfee66d1c22b56c8f65fbd3a43adb1bf61a556450dd829ce9baaf7521f0888cec72b4090f99fc5a41d9bf2e2254cf5b44488493011de7612952705d6acf3c88be76ebecfcfc4999f4fdb7ae481b104352a4d790c568f65f55a180b639c375dd80016948bbc109730701399d24e7903e6255d90053fba20283330a4292b160631f02cec796c6ac90874a42f76b4dadc5763cbe28324b16492c886772be03c5f0f05726d534a15fb684e0bc388c6f5cb47b4f8f7980aaf27592656f83b154fa60eb38b6041c002f04aa457128458880b569f7008452730b5f766f4f6493b5e9dd4e4ee04d0fc05a41c46151e4f77b630eb9fc3231bce4d08b12681365f9824ed1ca41c11c466de7fdef71e63094eee52cea9fa103df80806c4d199056ea910c00664e3dc60a199ad2eb4e8a71c28295fee8c30e100bb0b100e3337408f385a0ed7f4582e52e16a3cbc8f9996eda11f92d4b2511fa205642d4eb903325e14605abc11b22cbe658fb37e1adef0838916d079fe925380239ee60aba6e35f51e6f7d41d5526d3ab6ef51aa32528606a2f0ff38b7f1c3db2c0412921edc0111c47b11ffb231c100993f98d48fae4403cec48c8ea892de4d635243bb00197167eb31b6261db763f9fc392b88572678102d0517b25296945190da575904d983d3ae94f50e259f4bd12c22991a5170317b8b7b95918cf29956e26cdea86fc578e5b8e833715a2436f433971d80aa91afa51e1c290344884ecba6f3ecb654f2be2a0cadbfd42019469aea3cc66d0c65168214cd164f00a151f317cd0a38ad5f8918b8763ca8d8e76fb38b5d54757e38dd59ffabc0334fa03f343060605e4c615ce8ea34513ae304a420888f056c8119f830defa77d9289cae26150cc6a0e92a2716a1683636892f16a0c592f9d83d526de08cbc2725b872bc7b69498422e1a09d5bab121bd044aea1c5481d5a888b6975f96e16696dcb5d7f3232ddc2d8a613b82055e8b19687f9f1fa7160412b455a20f3e6a528bb8f2ab561cb505816e9fc4fee5a7e4b0fb1c57078026e47e6170d17bfaceaf71d171fc431fbe401f35334ac7afc7c9da5e544215e631b200798ff6ad25cba8f70cae737317c3b90247d782bb91aab9218b37eb351ab2f1f034eade8e8e36fe7d90dc2d884a886a8a57455024c6de4e15d4374eebc42078bbbdbd1f04633455c2140fbf28215db4a41fab1919c81844bb8c45a152692e013ce18fb757ca3a8a323fd81917c30856980e47bcd916d7b8387324194433bd5d50750e52a21e37566e98f198e6633e937442b80c9defab9f4240ff13fcd7dd146471521839176f4d1194578b83f24faf90543a8528ced14a140f90c66781196cbf5fa4056279c07a0dfd10be1c7b41d22fcf44e5d6768419f57b1890b0931ff4dce5d5b4115f685713d0b0e02e4f44d57c6d02e969d8d9b37a53c1c12b3cdf117d9997088551c54506136b6281cab71e8100c4a4b4f11aa25df33681d85bc5f3b93fe7f92836a776686a9da45ae2e87ff102de8d3cce0c5cbd1c14b7a3f086fe507c1a11cb2e84a6f2f9b7a05891697e35496ca8ba6cdc026ae693a032f07a97d9f3b4e0c57dcc882d107bbc346ee1b918c662fdc6de5109c328187062db9db1cbb5c41a168a6fa249807fdaf4a7f25f007d5c0b1d6ec9b23ff22a09c61ee5440eb1a2771299626d3a6a8e60002a43b5d0ca18e7e359e085a6a69e8106e360d118bd98ea7102b7c9c588055f68b1b46a62be295171031f7e307a9913c56d69ccf9eacbd03d703fbe66c2bcde36260c4a7b3d3fa93c8ea9f2e0d1999c31d5a53c4ca65e2b2dab7f960c118211865c9ffc23b117d78010763a070f3da1121bf12ca11289ff9c4abfe95054c7820300c180e8466c1ddb9b90ea6338444cb814e72947d7e44e6594660a138327a0f82eafc37e0b0984918b07b0605ab00901cfdc23783dc25fcd1f782916624708e8d7a0e4ba3b6270966d2a11f00916a2f2f0bda0c72c5e0a0d6f39d99614ebdb3f9afa17f1523d602e97d12d2ef0180dbaf36ee056b170231ea097a364dee44284ba818a8b4d9098d71b03c833c51dabbb98034ce4e095229d2cd245e4385078d40586c7683417eb7fe7f7b40c99bcc6d98c27ad3e525409d2a8a4f8cda898c02754ca5240f7e4fdc7c5fe571cf7359c0e962148dac9b4cd72a697308fc146bf6af934afcf081ad2cefc84c51fff0cc5ed80c6658913550c121e65bb02a11032662fa9a592dcb1fb8ace0493b2fc74335f5df7a1071a2f9483d80dba64db15b9a12fb3b39c219238bc167ccc926acd6799cb3fc5be3c7908e447d8cdd923b47386e0bb0fc6893da677bc3452c3a2a06b343ac3398051dc2b61bc368e160f607e5add21ea5ef6f3cc83e311a8e2c5dc8f267e86dd51a57c3485ea93acbd6940e19cf8c0904b35e6a40ff0210ff1004028944eb9c2202e4818236e83bc17c4e0b8618c79701db0c4b9eb0b3c711be8c658a8f866c3a9e04cb6e371cfa8b309c2ff3eeb50c3363f74b738b720ad464ebc3115cddfb0e566859c8f1e9023a3c30bf00af0f83c0988c46e4a382fef29875ac241e36920233e0e4c40418d1b69cadcddebe672b11594ea9c3c10bfdd52472b7cad4f6a2bce508b9d8bc9d1c2d991a1c5926456242112dd9786e90232b110b94958638fb22ab309112775194c7f8a92982f769aa87295165675cf61c3c0dec984a24043f98378fa920fe0d107999302641f8eb6318f6f801dfe12352e8d7754709152bab5f26c098ac81c0800815bc7378c5945e96240323cacb22c168277af090357755c13984e3ea82f2334b8ae98dfc0dd5a338f1544a352f297b27784b7b959cbd82c2b29f49a6cec37d930dfbe6576e8a0073f360ec764546370387c1971f5403dc4028c057d06dd7fcdc651c60abcf106ea6e3f7206e9c87a0a4f2655b5ab16bfb473b6b9364be7bb513a5f83702147730b3de6ce35b4e0166bf59151933fe1beb33da02b8cc4b8d7cc3b2ad52b924a6124d2d8348c70dce20e5dcbbf2895482dd608901645ecc7bdf3641ec4568d0bff709377fd8a6a918a6b372cbf813a7041179c1c03b570b7c779bb6c9dab06914affee664504c8e0899d18f2777e2a18311f2c455c34a00b7e7a44ec57e04aa50d08690c1182cd953014bc6d25f4932522da33ae5e91fbb39eed0968ded2571bf58dd04653a46428c04e71e620d69b5d9c2a936dde61e38aa9e60799a1a53c89be73e33976f5e1e8007b8021e2c7efd4caf328399cd83e02ae00b7ff3dd7bb86663ff819eb6812e74f93de26092a5944b452544d8e0f41e7ba7d7120edac9b9df85e96640c0a6623d86a3814687e41864e46d68b1f5872cafeccb9235f20f18c12ab063146ba5ac04eb65dba294f37098359d686abe56d8d61f0d8fb7ab29642631e188da872b1be83d857e7b344a3c3180ef88a902d2cdf6167f044f94887157bc412f44521a1ecea90a4951a03c0321ae59015b0fde861340fe2f26766346a458462a2981001ca5f26a039fc6e130cabaf0c1908d2c3267d0b0e6793b2add92ee951b3d3748ed51a51f24d33c2d1a3294316832fc99432c98f0e9f3641b7b27982638e165277060c02dc44a02f8a97fc66332a369c84086a252f7d1f4e29d8104a237d7b849f9bc7a061eadeed92db78e5d94bb3feb3eeb359630b4cf201f87d7d76770bd1bde4cbed833c1b5cb523b574c5a241e3b92bf21b425b7bf40499e9b4d71ab8426646a88982f6626a3ab7a39668068c23c024055a6ec4cffb7ef5b7f76108d2f96f6e9952d7d06c28a380edf12414fcbe1b4c7171448296ff24b578ee867868a98389fb5e76e299bcb736942e6a6712a7e6e584452e8842d589e1f5e07043c1e0387993eff9ee14c9f1f75629b03e01ea60e805939d07368deac9c0096567e2f4a9d1d5c61247976aedbf4197efa253444f3c275eba16742d0334a408f1f701159ce44d1adf138005519dc87ff93cb0be9f1466c5f954db543fe9eacaef7ab7d9b574b3e1b64e20c15ae24c189900f4d9a0cbbf7a9618c7dc96904e7bbc154a38b8eedba645b79cb792dc4d356ccb4136fbd797d0214528faed1f5829a7a216deeceeeb9e421311f2eaae9c534c3e1616c973eb8b52f4fec5c5423a62d5139ed4435c3339025f4b993d3c213881a7d15ce2bb7de6fea5b6048b4a85971b5d4922fdd5abfa4666a9dcd0577d427503ac2f7fd2d10a5093811a35b727b617c9bc941844add8ce4669747085d05b260ac30e8a35aa1b23b0d1fd3d426507527af8ffeaf2f87f45ab40e0ce86633b4cf223f831ace0da98d5fc8f14b996baa970fe8551c8a72b0f6e835d7249134c276e25a1ecaa0955ba3f98bacffb9ac3f47604988201b93bd03a54b95040d626f0dacb9f012234f5c8472fe92e7bff7ad8e75e70c76493c3cb49d55be55a4146e1b6824c036732e7361a7ab8a4ee18050dc64a1f268a18dbf9264705e04bf70cee417deccdd14db01d33d33a0584b1130e312c4cb614f00f4962a1184ed36129d21600fa3fec59bb21b9280b9189199dcfb5c98ad0b918c43473a83c65901f59a0e14a5866b72c9a9a9755df30efaa0d96c5aa18c32f9384a3d492df2095abacbc99496545916ba5c58b1744303fa87030834d016d09c85ac1b5acffbe9d76e8479a7d15e62441a4d4862233169df4f9c199d213704812fa35e25519112ed3f50aa665359e296cf4c2cee1bd4bb0b0b9849f0446fdd01b582b1e3d217804d5d66212705bdd8b142eb029ca5cd96559ba02cc284e0f1c86ba6f3bd9062bd7b04e0df01fdc19211007d18570420ffd94d3646b881822a5b95bdf78981e6fd39df613312b82bef0a1b5b64c26d6bd6461546036e02cc845eb3e3f6f69211a9bfaab0f94f89745ac13396076ed6180d159eb50df3ae793d003f2961650ba7eda9bada3ae9f36fd80911b5d12d3a3e3456a06c8249b4f06c76a55cb7a6e994e2994865b4260198cd53bbed4cc2a3480c968f69c6c2aa902c3906fbf0e4501fc0851f0d141b227b81aa3b8f2cd333daafb4f2670c4744db98bb620faba5c1f95bf5b5e30a612da98bf7975e18916d537587f1377a3cb50652f790b4af73faa66f5fca654a5c7a71eecc1d533ae714ab5518310373b1885120c507f67a0d391816432c05813527c0ac388d623a328fc0894000372c87f7164ec4a4872e89194d020d7a654f90b54b849a991a6a62afc78ee42e4694c1b9121d08abc4ef6ef26c9d759e5ec4903267d0e83344fb6b4740520d45c2637158374b90fb2c2a90326e328136ad5c9530d0a9ac8478d2694dea269c8abd09ee9350b60fd20aa91d98fefa2a5f51d01bae1cf2210e6c8a3cac08a232c53c824eb129b3608e3173ca917c8144a708296a031c58fc83dcf8ca55d9f382649d0561baf649134ff889479739f9caee39e9e4575bac040ea4af34ebf7ee64fe1ad77279920de921da5b79c3397524a69721b20edd19bde854d1428e3460e9b04fd8187604c2b49df88d2e5f85513f93c30408c0b2f9f0fcc385e8526893a9e913cbe2fa59abee96b64e8bd811e6a6aadff1b87fac371ad0300ce3ea325e57c2fd04bcd7ac9560e6efaea9c828627036b7fc7b03bd6b3e05db11d380f0ffdfd3411042dd72600eb2b5c91a4969675b46cdca45319b771ec59ec0cdfeed675066b5c4c37c64613f07ada940d016a876557971fd2a9931f0c8a03e10cd0bd57c1259359050a1f693f07bb4df10aa554cc828c719c58a196486a7d1a5f74bd1158a67e7be71976f2b8c6c251686fb82e32ce3ac19847c1849a08d82b89d81ea1020453ef1834d9aa45273568d6d4aa44903a82ebbed7bc6bccdf8e18880d79280e5a9285642daddf664970b8768265a0787520ea322e9844902cc6d625f659435540a6946c99a3a80ae52560c707b6613caf2f167216ea90902857a6050543e5f24e27c9f0c734a65181570c5a7613a6b0ef782dd3a30531e0494d60973eeb2f948a2fb7af37b86f9f8ef22ff6aeeadb6f3104607e1a1ef8535dd5b71647b5c7904c85418f8dc30bef672009ae6a500dd3c05bf524529ae9a019b7bd09063d1e67641121b69bb177a9f53ff5b3d38e8e84f93d0d63bb94989f75c8c24c4a662341812a94da5cffbcc4f875906c8ec268e83b333d51f21d1215f3a27f92083667c3bb2fdead50a397c94834952544e0b9fde1bced343dfb04aac35f14857b196684af6779ad9ab1c223a97b1de0d05d32f7108349c53a19e5d5edf46e312d750ec56aa10b301de2dfbba2050f3907bd76ac7636bbe14814789b5c95bd31ef7ab0fb0a25ddd394e5755cbde2297c02be2668fb07319fb4e83cd333210abd843320803b2f09c9eafebb8a5c9035d576869acb868fa1a61ec5394e23637ab9b70a91071097931ed10fd3b135cbc83c996062ecefc7a8f50a120370c04b84b6f462d9c5b9c7a2c9fe7c763e5b715df19037ce32435878d79822ff5c1396bd5a8e859194ec7c4d8779f5cb6bbcc399bc30d0aefe088bfa43f723636c18c774a31df1062ce4807a3bbb4ff3aab60bc4fd16f17f7ee7e06f952d377380ead55776f82007e7785b1b825bb509f758a9a858da696db0e26d76e3c7e396b585632ae0989f8429218053e5b93d8a5532e4ce37e622053be132da163cc50af62d4359aeac3795b50a543d18044d5108dbcc915858c9c87492be8461f84a1cbd1c24eccdd13ab6efc95ba1f08541ddd222d52a6b3a8e955218d30d19440a7dda518715d4202c437c4e8a2e9c775031bbc35e9ba10341eb4c322551f0f339c3deba01d3a1ada1a93ab3b220c9e151d971d2a7b884105ee1dbd9f4df84be49648b9c0199a6b3cd6185d5111a347bdbfbd48201dd1b6e1c8dc1d328196a4916143a946824b86b98f75244a0177163aa21d9b8261403199e88fcd77590d2f3b044e787282721c22210831b1344e5d5076f4750e4822b58ecf13af77a77ca22c6511f47bc342e2538d6c30e2b0166c9612c532f0d50a5141b1ccc3c4f4a8fe3a251d66f40a9ded26b704fb4cca2331e36106053e974e9a6f050dd7482b286b5287f8726a538904b6ee67927692d1e83598b87a2c1f9309a68cb804aaba5b3ea11cbc1066ea6cc7b2984c41740e4ca715eab8343ccb11bc69f63aeaa3f505f8421939986229f94438ad0aa4ba554a2ac249f6c1c92278f3f6ef93f06eb9baa4a7bdec373e2148b083b7db2329d1e4f50579adf77bf037d5ab1c4cf13023319b5e6d8377cc607c1989a096b130c295a8714918201f8901a6e89d09ad9317ce89ddb3017bef3e61b0074140e56e8e47056f38d6db733ae247024354ce96ec7dc6e9a7779bf36b37971edfcfa51bb9f5117284f9616d1529af426d2863523640a9476dbd3a3bbf7b82037e0224b337d6c39c0665a58b6bb4da45ebad6f4848aa3bc5a16eed5f5a31574ce7c921b5bc3fdc81d5e4662e39ddf93b5bd3119f2f2e4cf693318eaeba35269ea8402d85bf9935cdfcd80e118c0ac6e7441479d81e298678a78521ebdae9dc5f119bf5453da46594667ba67683000e78f2b0867ced608f0a7b5d4f11068cec70a62878ded794d8616046c1c37a22d0ec154b80d585caeff3683c9bb21936518f2952d31b485373e6d8f5e8744d6c259090ddb4ee8171d10bfd4b7627cde69f74ab07ebacc8b28cc7217ad588e08f772b0bd8920648f581035b68027e445ef5704ca969442663114c9b001933bdc8535ee7091e45281c84db5dafe5141d6c008949aa901e1b75183a64c726f60d34dc215d1f250496f05a2fcc4d9a03386c0e2e2e6ca78c1f160a24c86ce2e1c901d0abcf8a50327f0f707f73d6ffe056ecd5ad3c8fde73aa5fea593f08f95c46f4755e95e74cc72950fc185bea426886e9e6562ebce4a0d550815f3f20f43be5e91cc7788e49578f300d8da2bbb80637447ab48fd7e136cddd5bbd317d2113a8b6a9836c97ec97e75b15822b8d8c39cfd821f4eca4e45b0bd83d8510011a384df2a11f4f144d693cb4caf6dc239bfd9968db65d1578b2fe0764e094e5db33ed687de71423569271e863d2c628b17e758a4077456258ead8444b8e910c1b33c09cb83cd38e18c34b23f756c825ed81d0b57ac2bb02a5fb8eb32a494d18cba74e27048d27f50132ac12817d1de5d0b3c0a212642069ed0aadcea6b159c1f0350a36a58f5096eac5a50a8b313da4d6dce43615810c51f92fc66c079e0a546875bccb85c38374ec7ed490204573bafdd3560f6da1880246fc146b7d4a56d9f339ab9bb5ee65c82daac89d56f616ca3c9bd1763f0a3abd37bf0ac484712f3b54c4024c0ca6ac9973461c857c36156c90091a75308800019da2595206618c6e664ad899fd4bfd62ade3ad1af2aea90385d34680be3ad3ec0f694a7a08fd4f0563358a15265b2e261adfb13e9dffab541815395f209603e7813847b7ad585b8536cfd089f00a8b8b6590472895c43346e2063b7bdd5fa32ec8fc11c3ffb0a2bf28b915cf6f86c5e2423b1b73578ddb155d5795bf5b27ea74e420a21db348253bdc898ad0bd80e4cc4e3f529d17f0c253f1bef2bfba4cbcace93f1fe6ce2c8a71d843e77fdfa0a87e2b5a3348a7d147b2b3b19708ba322b3e7b301f6f7553050d9ded112d6f08f3b2f039418c0ea7155e20c96af812f71e076cf58d2fa02371e49903cbdcfe613e04399f5bc6c88ebee8c3d34538e056e9a60b12b38f500aff4a374cf10b75123631a49ed839674875bae0382fea5eb0abfffccc3f02741ada4ba0fc523f61668e5d98c15c4cfdec7dd028e9b08140873249f0f7bc5f1779ae7434c05ef29342a1a96dcee857073509f5845584c905dce354d4f85eb229134a27f212d143077d10308092790f9e70a01e2b93f5aa18256577cff30961bd259c109b621dc86b14d7e753fe9bd9959189a8f17d69f08a159d6c9c3b7238b4b8d754494a7f2725e46daa314167d23a216c4c5387132ad1920fa5b1fbe1ff253a676562d532f916da4f68af9fc291ae08d903d783d510b988fc93bcde8cc3f0529adfc5a85bc4b0b56db71b0c329a1461bc54eedd8110a452ff5bfab2fcbcb52f31ace2e536dc45c7aef24f864a8fe8a8c4e49e109cd14440f5017513ca219d4e3d7be0f40dbaf55c4d69ceec2351c66e44b5dd0793cc69ded9b99d2e6e2edb8b01ef16219dc75bce78c80c25dddd94c04a27775c6615f91dd2e198a9064e6373a43d454162f199c3bfd49a9a1cf1f849fc70cf14cec2303d1a2f0b24b76913d9e33cdf07f27b2c4a7c75ef3182f4fd421f46566bfc4ed1b6f5e519e6a410cd3cc57645257f40eedbf85dc6f94630670f189fcd4cd6b0eceafddfecc110df60c658154d621906f5a2726d3500b36f8c5ebc3ec482b34fdaf4b374ccc6510db601ef4c18743425821d42823f385b35e538e4ee0f1d7b437e9bca28789328f5404975d7516832470f1529477cb502c7f4411a25be9a3b95a2a8b1193b3ca0ed13ba99178e53e5e5bbb3be79a84bb46ccc447ff13950909f97c9a1f9a21d8b19cd536fdc549e74510652b2cc64c15aeb635d9266d978ed3b0f2cac7ad13c70d667175a1ed211d82ad6486c5ed7f892db9a1b115b9b0b8254c72e525fd5c87b67e7a4bebd04b5f68c63c710a5adcdb7b6548fb258ee086876c88521cdb3c9c06f28ce75c155679ca294cf2cb05468fcb6b982d04bb6ec0fe882644e36701687e1ea5efc2e40026fe4f45a7014c82068f0e0e67094611a36f0f6b5ecf674badb8704b9d3a5659b419f2ba127d112f37d46a4c7168aec83849cf727c77fe01888d7d01c4867f0062e11f0063e35f8058984fc0d8d807406cfc436c074f433d20d40343bd20e8c5801e10f5c4402f08f460a81704bd30d4f3413d17eaf181de0be825d47a947277b8b6ed560f9206ffbda1f0480e5926aa2a1e6f84524993f283ec0bf7d9aa3a0fa4b1480f8f678cbc515be1c7323b371a77089a68cc0d469079962a7a8431c8244850602d95f316e7292b3b3d7b87c470522ebd8d39cdccfa4cce6215fed36c0b2b497d1b3563654869cb11caad7627b26e3006d5dd96228d24e2eebf7c9313779c8c31085b8a65a73c72deb0b7581747029d7ded703af8805466296e88d24747d019f0d9a2c40ae06a57c44edc917fe15b9cb8a79d6c7b62257233d36ea9467b82a64d0dc36c91ff5ed6af8ac6a03682e25267b17df48a88394e214e3f2f4a1a554208ba2964c2b8d244798b181c9b5ced4188f4d18748458e9c1276bd20ed8ecf8a589895c35683a4de217021175266060f2527217f76189b6aa3c45e1b3630ec4ed5cebe22a4f7331cf236ed93a2c2697943e4676aa459c631c73eab82bb50384344b4b0bddea856912804a9edc85e9fbe6783f4c6e5b9a1a6848d36e06929da9b6e405bfdc4c4c48fef207ce8f30f85b8d356aeeb9395045930f67d8e2a4a8045e7b145407123a7b0cd909f6e0bd7643dc927250e096d14fb6c2ce74c8be2780c9628de89943c6843d6a5722b61f928f7a25739e9edf9ba16901c3bff147355f4184151d4f8291106b14fe362f75dcfc7934648c416a6c5a027d40a255f4ff2c979491455d33e8032225dd08a97bf9ecc93429528894e4b0c870dfc8d32102c26663d22d82938e9d528eae6082147cc1622d6d376beb29098d6d58b66ccc342378ff7fda6253b01db93eb47d483b6d4d88626817a1e3571b835f04dbb61a4e8ee221ba585926a1f0d3fe26b88260621c76450b3d458ba174e390e1fde13dd4decad17bb5e1a7b18c83d5576b9d62d1bcda1c2184fc1d563fab354678d024dc69592c942b5f923de568ec6a961629c3b450dab75a8560338667302a5306a8ee59662c654c2bfaa1477c005099b5e89d374f6548bc982a1eaf06202e5a9c5149a032329fe7d06664aa8cf74b259cf34fabb0692a91b8de471bcd90495536453340ff8a5f8fb1272e324b4b071122e56715de3843db248a6447dd9bdd19d866c2b5572a782bf76a7e17f44975ebd1392cce6954f50e6924f91e9e12aaddf659123a8c18613547183b5e8ee8da00406ab8a1e5b32ee97a1fe87baa463b9f243ad6cfaa10afe93c154d52049a95165482bc2790a38d4e4a71daaf43905a6da5b8d7a544d3674545faff5ca34fda8087aada747f9948c69add722844c8bcb2d76cfa525ea6ed70053123b0b369ceeac20e20a0b06d1f8e0ca75bf241bf7eb756d28a63528d0b09b4c355717bd1af0e484a39642634eadc9a0b37ce77f6e2915269d9492a76155f5f5db165112f866528aca9d516e41b3377a1ba412597ad0dca76a769ae1e6232aff9aa56f5ef9d7c7e01f13565240c40830c61a34802148b67554db3f336928017fab03fcaf945edef784b0e608f82ebc1fce2feecd212d2dfea1e44747970c0c7fb3dc07e41fbde99d30b0592a49a4eeb739c0ea146f0f7061c35d640e467deff1027f43fca08d94cdcbcc86c86edd8168f7a3d48d6ced868781f383aca5d73cccde4262d61f409fb7200826977d6927a9b0eaafd2b3b4f6280f0ff001d8e83076bb82d36984a4e7dbe309b3c3df3602b91524f34e96b6fea8eddbb8830dc019266e032fa3666f6d2b79e7ee5c530551a5f11ca0cedddf2e42c0a46d9beaee94efa456fb16872c6e09ad43ff97a29359c925a726d9a5b87b733afd588b9d73a9df1399b8845df4c92d26f5bafe0f454bdc63720cc3124d522c4f9b6bdf56228b84f8f681156c8c62e20f35d1a1f75d2f0645ac49fe43d5ba2723dae72728a6d91388f87f2c2221197fe307e56a7cd148a53849b8fcd314bf8ce4049b1faf1b0711fd822ffdf1158f7b7eea1f10c41489ac89124fc6900849e6497c46fb562422db082cfc632c26ce8d7ff38676037e51cf7ff2aaae9e8615fdb9b9b8e41850a02db8953249fdfb8b578459114a3d81e605c0f0627b9b56f55f483f8043e9c1e4ff3f1410a6ad91ff9875b1ef9810c734ea2b70daf68e2cf9fcd01f356b0080578db522c13b94a63ea814b94fdb75d29083bea418a21ade90bcf8233c38eea79d31b4228cb934b2abaea673007a3391a603e8b5a01aa74e14a4fc2eab8e67bca4dc7ddbc5d9480d3cffe74e955314923bb39458601655bdefbf02a5776da32936be877f8434a11ef2287ee37a428865eaff7530fa2f270b60a839af58733093f258996e43f0e7f1ec38271719f861d8a42c4302fa913158aa65684d1bd1a6586647e521f1c65077708ff93d80547966ba81a520a6e41b279fdecfa376047fb7cd4588dd3392f360b66c512d77c007861106829dad1f4cfd170bca29404ba4770c7da0182ae1601153c808359d47af119b19441a395b30fb6b7e9105dbdb328f5a48c6209469a861ea8ea27e183655918627a83671419ad66aaa024988a78e87e812d53e46f56fda82ed7ca8a5c59356ff66b797046530cb6c76b4bfc5cb8e0d7abc05757eefe745a85999ae2abcad30d799493051eee5afc6cac6c081aecf22dcb852501a5506235fb0133b392119e31855609a3fc0951a113a6980cbe4295a887f76c933ed724bdb587a79b6eb6b53a35994ad0bec4260dd7d6dca8c7fcabeb55d56a347b0ec7ad4748cfe590a297889eec097d2fecc5e90e9f4b96567dd1fa5bd13e768b95a9ff679a6f8ef5e113491e86f5758a13e6397be4f1550913eee3d7381adb144f339c00bb500542380df0166a502612eee225196945aa7857a384c14048912426eae04376107005c92d223b0b2ecb1842d13aa43f350b02754e039519b558b1f9745e01dd3332a43a8ef0842ce50fde2a00faccfe050a910fb0dcb8d03ca5d97d6018ad4f4eab36fa4e9d3b9d640ce81a90402409307bf169c92bac00966e45f242153d27dfaf1d169c3254b5a912feebd0e85366e0802bcfbfca3488cd3886f59695d43f949513cac38a453182d37c12720b19708d757f74b0c0dfcc0b933e175983e9cdaa143ecb4735b9ac37ac305dd2e0beb20456b72e5b33312f0e9d313584582210e80c67c7945d90aa778659aa107d8e82e313c862074c68cd82e47e5560b76844b9b8f9ed90a173af2259d72fb60a34396606009eb42f20924edb5454ff96282658efae89a3f902f646b6e8c31f9185688d8c3a6e8c807a9e26555c777e451810387c07c7f3458ed0d1c77abf510846c17058483616fc6f8434a0a7e26bfc7353e74450713608b0680fa6ed6952052f4eaf2b9656c6811d92298c9e160315af063cb2b5e3952c1777739135b69b703d8ff8b4682be5db795c04a68c5f2b9732cc0ebea64f036344400b168859ba3617641be0c7e627dbe694907c2d54d6cae8f3dc4e6674c780c0b34ea41336ae4414af1b452833be2c85ce87c81acbd776c3a74c8f74f413c0ca77a00db872747d1aa0d619fb113c6b11c891da245817c48559fae08e42732e2724e0c0912510e0143db4d9345b4d672d483ca224e93f678bb9e78b97c1555cfc4867c4344ab609af0ae418cf234c9182c511807cd6bd18734e4330a0def85e3c1008942ce0706584b2acaa18f926552feead23dd38b4169213c0014b442d4274c367d42846c8a0ba176d23610947763b1eb2531a5ee93780e0f3a725b02568598181676b03be934a60b63a95b703db3225765460b1346f096c725b5462a88c60c39711c2b88d841ab35cc9f14e1f7af78dc29a509427c5cf4209803087316a015af2f41e0f8c808d9a030bb8bc0363cc2f7b0780f95089393b5641043f9c4635821230f9ba2220fa48a17ef3ce2ae0c54b8ade60e463da58940d342dfae28f30234b05b18bb891614858b33b899eeb389b7308f95864833909b4cbe4d5e578b830afbb42ff91b5e0fbc12617fe59c47f4577411f80946fa940e2369ca319b1258d15e802904572e4b21d7d863e4f83063380c311b0cf9865fad414ae4f764301b6164e04e2740029331f72e30f2c73f0c05f46a6b4983d00b11a801e5157bd4645d3490bd748c54dd55e299a866a9ee6b233360777e48c32d8b043bab413a312ef99aa1bd8580ad35e22229a104814755dddc457823cfd39fa96901db401c5f2372b747483f877a41896c94d0f93c20b7db5e7303fa1030a50e07f406e58fb210e2df02b08ff86b696a30978c5b22991cc08a447dcb618f9b806a8321b59518d5909744374c2efe3f1546a804ce7159be5730e30fded374428f6d378a9f84a57250a1af9db13bc49fddd4344c0259fb133628a47fc43b0c14079511516d5fcd840f78ac30ef9dba54bdd114c5c40e7c11815846dc04967af7a411c5bc355bbbc45bd15a9547d0be18d3a6d8ca9db04bec059d09622e9176eb5433ca4490aa9cdc11f10d5b893260f03548989891c24769415d0809671540cdbcb6c76fffad917ceb78f2d0069c17bd137116408fb655a332afd7ac83653c8e8d4860ee5c3723c31d9cf06a959c82b8e3eeaf83f27911df0acd7dcb20e89a9790b03310648ee30ec1408838d8214452041ab44a4080ce983cc391db3d7d82e75d17d24698c6bbaddfc962c6350485525246b199f528878705149cac6a4c2b8f85305c98757636e97d0a167989eac9e2b510ddcff479d3cb22782b5c11b1a4d015815e60656449813b027ae1ca8892493708dee0f846a41bba037ce4ca829208ee42f488958525115d856822560a9444ba27d045801ee29b696e26d86b03d78b323bdd586bbb318a37665f1b594caa4af81ef31691b9b9e135f8bfa105a8cd0a82c96db2dd097fe70c8c877517a5f7b53f293e1f584c210dec24b929238186c76d5fbf4ce9c57140fcd6d87aafd5a113867f0dbde7ac6cffa4d23d4ee94b20ca1552bea55d91387cc9c5c49e65f576cccbb18ce3fe5c3ad4bad7b1e7c8ffcb795dca23f27baf567690b7a617420fc8817eaf70639589d02d0f8960fc27437b87c4be5cb62a8bc4a66421dd358667a87e18e6965dbb623a2f1da39f314d68bbfddc6dd5247a2830aa9e718abee9c13b16e39257b95aaca7058c8518094427d892ccb2dc3e1919a51fbab1bcc3f8cff4415926fa922b4e0d7090f0445962b7d12e4e0e2da3dcc1e39af2c9d391cc386de304b48dba71e2c34f261cdeeb8e3096dd1deaddd22eef9a511e1b0a834d51ba80bd64c159d7fb5acd9c056958e021c3d7003eedbfda017d4d5d86b114dd8959eeca382a920ae372702c7bc09e2423bab6c33f77f4d05478cc322d5a1135cad701cab11005dbfb6d2831f6fcde520551fdc0f445f76faa566f5c7372fd042f76f0cb794e629d295bb13d722bb4d97f5c10990ae4cee2ab201466b53b0fca8be9e1c4d7cdfa63bde870df8df4cc4585ac7830206d10433f22071436b316e75efe65d4c1799faf8c7571ed533e228388fa95b50687fd7e64d6c57d9f8f92e1aaebbe388e9c63c4b7b220cb87823e617d0dce1fe5af593459dc293edf6a17a580d641d42bef8f5309c3921e613f058246b83f61b5bc52bcc066b0ab047f5879bc6862ad705bf9afe71068d065d7019809ffcce02a0604d6ee2194404421681a70302a30cab99decd17744b0bf3b817382a8a8c00232357a3965ce53a4f3d413a418a14ab290818c6096d283613fa4a84ee19bee784bf7f0726a950d301ebedc116db0d7d835fd2b0e16fa99c0aa4dc1da8fbc84ce4b7ad85924402b99da34c0adc7612eb974ab82ae641bc9ff9e1803dc56dd95641b84a3f205d25c3d503ede51881a3e68e2cd8b9400564b5f43680dd21f2230c994a25156a208bd891e6962671a8bee9e3b7b18f74571ecbf52fb8bc4f9cf68697dd128fcf868f85fc4ba7fb0b8fee7f37fb867db17d5fa4fa5366ba43e5d0090ff6f10d1f346006231ff8b1ce8df84667ed13dff5ceafd640cfdfca1f48b629fa7572432133cfca275f85b45fb7b7ef99355c6bea81efd6683005f44b7bf8db53f4b973f992afc17d1e36ff4046fe4c6a9e095ff07f194f375c1ebb1f08b9ce4df4ce67ed13dfd4ceaff740cfddcb578fb611288c7cedc1725f7df4cfacfc7979f6c0af645f1f03f7c927dd1d8fad9afff2dbffe4935437c513dcc4402615f44cfb6d9e6f00139bb3598a2532ab0c717812e1245ee22a56ffc1dae168d84c295f803676c09f30122f204f44511cd157a88afc902d0020305eb85b2d3623934bee84e0390ad2f62e53e5b2c0efa176d59bf5a6cd8b46d1f90e2179973db298293da177de55e885f94c201c0cd0b0a6b880d627812d303c31a805f04e6b913cc1a7532b5f9a7510c487a9f6129a5baba22a6a83ec527bdf17e07174f06d7d60a88cc1f3d23660d22c27b2e4a701ad6c7c880137611f35223f583ef3c48d2006acf09d5c1dd8347e40029447c7c8925749974cc81a882496c1f350349da41c84b8dd41f5ff3a10483283d075407778f0fd103823031183f4412ac87e28e93d17a00cd47e444d179eb24418798c9e6317a9a3a5e645e2e9ef0a779c8e17a12425317685b0c70cf2616350699f8fc4fabc613a9f8d18fd0d030907cca8c6d8d1182a958f432e26709f29f6e9ce0784b339f34e671370b8bf1995a2a7c62ee8634d4b5f671b4f9a0652378a249933a83f6c9ba81729663fa5a468ac70a84ba37d0cc862993cf8070efb0623e88a53136c2cf1e0486ec916e490e12c03283c0eefcd545b2c766b6ba16a3af1e50ffb88647f46d943992526ac992dce3c6bd364d19584b86391797fb557adf4ee7f6a23b687aa4c1ee9662fc92cb04cbdbda9b4c9c1d00a9af31af9fbeaa89ae14a3a6cb0e7ebe21ccdb68239ce89d18ca9ff80c53645a3192672c4543dd0f4d93bdd732bc9307277f2d63b17d338edb89f9416feecf5d0dc4f3f569a597b8cf10bf2d93c52920c2b015dc38feedf260a0e106a23652b4f8d9e0ad07fbdc7e34097797b7c0a6f2a494ec4f02393511629ee9db29f9af7cd9d9b07d1c90fc21f666442dac1d7e67f502eced21c84906f8b799dfe34e8133141a8cc6019175b667152b36285c14cf0907e157e68eddf2587c3c24947a6d1e897a5678a6ddb0a6d15d7adc4e31faada15c93e35c37a7f4b3252c83e2d663951d4906f7b4b91eb0e03ce0d15c7dd7d7c5e5d884b27c0a6b8db3873d9043e9348553ec146a40e171e4b99ee0a6c9e79fac679cbf7f0913212f38bd06cbe82158e5c80a292f4f1792cb05901d12da86f829e82f24a4734b33badc6ae31267dd1e5ca5f2d0dbc88556c271a149fe1233e23c57f673da0d76590cff73be89d2f1f232bef890e50e8100d27998ec409ff827078174e850f2168f76d4344c9f139f78160db2483b187290345c1888841f6630a62a22b4b58c581b4f227003aeb510f5837f11061a9f3d849f01cdf08aeb6a47a0cbabc01370258d815efb46d73208c03a8990415e0635fa8f0f52d0200042ee19f3d4e8aa1fdc7a36628b603d43da2077f838e6f023c4108ab5423a0a95f90cd4517e24e58fcee5125ef6c4fcd9848be5aeb7f89478d53b8e592c01f8be07f41e3408ba725e016cdc5b5a95911a102d05f6cfa0f5839ba90926c9d86d9d7c87297f9f7ef18e2d7cf0a075bf46008390bfd7219457035acc0a8c58309c15251d993c079b9e42c8a45a4e5e9bed004e27e7eabd6a74ce1259adeea92c76bad587eb1aa21cb30c382cc007960e2229f5b3993b876b19eddf401880a7d0303048165d5bd117fdf6ff465a239b10b209d97bef2d03d6089c089208158aeb9755b5876766700ae6d73d4ec1f875199c8af12331fa3a0c56d523d75d585591f00c4dd2d2d74dacaa49ae93585557309cbabf7ee2d40dbf5ee2d4cbaf739c5af935eaeb1babaa129ea1bf3056551fcaaaba8467a80fcfd0adbefb95c32fefba206c72ba3eaf292f129d99a5a5e5cc3bec70e61a35ce4c00029cb9000538b3010c70e69b9b33779f1907e7cc0738c0998308e2cc366c087166216e9cf9068e33e338734e0e02720c41c4e95fec049c190167ce71e621ce4cc4f9f4045ccb2e0e9675ee5a15976b3aeaba1ce6a20ee3c23cc685f1df18bff7bfe1de1c6ef704dc0ffa2cf151b24a82e4480f144f1829e20491219547cad01751a078d1052d9ce4d0126c090e36b1e8131e28a5e9097681d57bc1592bea133d8ab2073297747515b4e2368b5956b5ac15b759ccb2aa6559167d429f501f59a90fc7506a04aeb19c785b684ab53859e1844ec104d8c486fad025910665612b59bb200f3669a15fbc41d3c3a15873c5224f348d3d57110aa1343dd4e23abd92c49cfe8ad1e78a1676b1fcf4d38bc89a38249340155572d28af4a5e44a6239a19793eb74e2b86839e918a3d67d9447da045c22ee1037c745c0cdb938ee578f34fd8d2bc4b57183b807b838b7efcd35c02dc025c0ad7177b8df15e5bba07c971757172e2d347d3c5d2001b8dfc4a2e967dc6f66d1f432f79b57687a01dc6f72d1f433f79b5c687a1af79b5e343d0ff79b6168fa01dc6f92a1e97bb8df3c43d3fb70bf9986a6ffe17e930d4d4f733fba44d3d7dc8f36d1f436f7a322687a20ee474bd0f4a9fb511434bdea7e74054defdd8fbaa0e975b800b81fa5c1476fd034074da5681a657cb68cee8b4339dcda540954592b254d4fa560d505054a0f92704acb01abae2851e80e9a9e22e1140ea7a73788e208a7321ab0ea1aba866cd0c3292c06acbaa4489901149cb25cc0aacac30383a67605acaa4386b4c008a73814b0aa1221a282229c22958055d509274ee004a75444c0aa5aa408098870aad404abaa112321687a3a8453a6d3d32558559fa04c343de5e1940b1b5855a14803ab6acf1958558f9081551589144ea14e3f87380573faf905a7609cc63814537ad6d047d080c40c4d3fc3c0aa9ac40b56d5151758559570c1aaea0367a070eaa79f4f38753975c3e9a7134ebd3cc918566068255e985be84e3fadb802abea123843b7e0d48a0afac019ba9d7e62c1aa6b0567e8159caa8255d407ced0cf2cf4d4625585a6d76eb83bfce5def095fbf2edaebcdeedddadd76ecc71b85a00023063868c8c000430334383060f3c0c60003df4e0830f3ffc4043535363630304102995a7030000b0c37fef63dc1fc68d71980be3a80b73978bbae9babc744d57b9a593aecab94bbabd1c76ad67177b77e771b8d96193ebf4fa450310006b0565c60c28516464a27c210001fc1a9a99f917e92f2934685c527878e08167c800063084480f3d1071c2071f9c28f2c30f458cd0d01879a2a6e609286c6ca068fada03c481f817e9eb91141255126fa503009e3aa242e225691d560d809a838cd3431f1cbad3539f1cfe451c7cbaafe63fdad771b8326e0e1700f733f5751dae773f187d5d75bfdbd753f7cba1af03716dee27d3d76b2ecdfd7ee8eb3fdc0f88beeec3fd08d0d77bb81f2ba1af0fe07edc84becec3fd180a7d9dc6fd988abe3e733faea2af0be07e8c455f97b91f67d1d767dc8fafd0d703703fe6a2af5f2c737dbbd5b2ccf597cbb1ccf51b6e8965aeef704f2c73fd5e1896b9fe7b96b91ee3ca6099eb30aec732d761ee0c96b98eba3458e6bacbf5c1a606cb5c57b9372c739d74836099ebdcc531c40e1e2c733dbb4518c132d7636e0f96b934f6b295779b4f2ed82988c9173dd30cc484a735cb6ad7bce09c81f77b72e14817d7c42125538ec1fb3db9302683780aae896be0187a1c7040a15656fa93415a7f51a311a1b58a1e05322d255d0eafaddf0bee9341d7aa3965a1942d620d5459f9e90b28b18b4a7d7c2ac79d4ed4878a25ed35035161a4358ecc708a3e21f35a8d6400c07bf9a7c3f712fc281434064d6590f4288f0dff501fc94da10a80eee372e83e4e46f79d70e8aa0c9241d59348644df489319422a1bfda8d43a21757b20666c131f42bef0618369e0efd5d2b53f79dae1517d7aae7855bb00ca53e4e34bd8293243f7282a2e98d347d9c011b7e865318382e34fd57e91936c13ec0b11027540c61d245cb680662f2d37346a9bfa688a2b1d8962d47b6b6c27d6e9b0d6b6529595d955359702a0b5c037da216b10954d5254268e0c6d0b4462f741cd9393f3729e73637b9a166bda8f90b85bd7e12d1d14da1e9c434f2328f7c3389c954eb4bf55e6337550c468541bdb8605d496215bba6aca81c5e73e74eba4e5f974015f4b9faaa4bfa6c9f9db4dde0ac6318f6d93493ac92bda386f68aecddecb5f66af666f662f6567b2f7b2d7ba9bdd35ed93a38a2cdb8552ec9668b8ec76e8df0891a1d7fc58a09500bb604c73538354f6fc329aba946e11096c25f3014ac09242a9a62d194af7f04687a4d47469535d556586bf5fada6ec0c9290c36a1875be8d0f5df0cbe6913423bd9ef7ad645cfee93d1da75b9b6eea821142c937dd4d6150d89dabadb155b5bd7ae6c5b57934e686dddec49d6d6c580b0b66e8d3dd6bda4584da812dad69db008cb64976c1d96c97e1371c8b66ec496c132d9996c39313d8778d11b9d371b537bd96c4ca1e85dc1c309b19cb69c1e72c1a921700d7c42c60081e70aaaa49495149a2279c2134990aba6df0266cba1fdd2aecf5f735e59c7d1cbba0fc642cd679f6fb9485cd4d4e645cd8f3e87cc24d1f3be39c45ac918aa35893cd64ad64ca118435fb993d0ec3e6f5ec86a228cb411316fb92d67dea250b3136a3a64089020b3eb27f6d16603eb50b39b708be855d8046ef1c1265dc380996401ffe61105fc9b50ecf8378db40e06745368019d02ba1d9d8e8e7e9afe59a109c445a1e35e03b147e20790d9df1492353aba5a39eed471f4b6d1122ab3ccecbe6bc4b333db7ef24c0c364161ffbced16eb7278bd75d1eb39e42201a334f697673185ae984d224f69d3b10261635172eaebaf8d88fa0bc8944cee0584b40c8ade0eb471ddde4f485ff28bae9a9412dbd0f4e7c40db38ec664191a2b8ca89cf88a80085380050e4cb4c1622e7ad60f076944cb32165bef3f9d383bc3089629227ad6eb1ab8cfb6754b4ea0c646c658b74e010958b7ac736ce3030f9986b7a055c3a6ad9986ff980a6d510cbb6c58d68b502d98410c62088318c4708de6851a5efb894fa2079f440faa4802b4fc01b694695939223ed2cade61d28763e0b1ae88e8d56e46891e94e8c9e708829218c33982b0247adc5fbd3b188a7cc2324f64cd5cad46d7e872740db3300bb380583bf093d11986f960d8932775d3717bbe529f4803637ca3c62e9966fe8b8d9de1b15f24122a887b93481d9c527ebab0871c775fb5e7baebc9130c0a9cba0e51f322d9c5cfe43a314cc2b6b64a7b80c03be413699ae0e6aae5e76a05ab9c3e914649f4a64f15dce8a351377da2870dcd214ec9e6664fcd2903e25856cbb7f7e3ce621ff66904c3b867f6f30354afcbd903a5e1e71158331b7bae640ded8931f02b2491463b3c56ffcd8b7d5f3de603bb8ffaeb557656478f440fca1e8a247a90915421b05f4938c5b46708aa605b79ae97257ce23262a46aac61ef4cc91838e9a3f29b28b7904e22cd7695cec7c747c5c52d01dcb2fb6607d9993dd83c1269b4ce0776f82905a7ac2331ca8eddefc2c66aadf52d3bd4bca87b62769253d8e1a5170ceb63fce44292d8377b1a429aa4e59320387f620feda13dafd2497ce44eb172dc922d27a66517d17b329d803eb0efc09e273e92706a1e9e4ac1a9cc7a263fabfbe0fc91512ef7273f7fb61cd71c9a5228cf933a83a207143df8b7bc40627ff289179cfa02aca13d32062229831ae6071a9e37e905ed9135330d1c03bf44c3f788e0a32b8a8286db1c6219f81a8593e7fe26ed6978780a1469bef9d3f0f0b4871ea1486810944f5806fec8254091e6eab04efa54f944d64433700c7c5c43658223c149aaa0e113287d7ce693285042a128f0582571d2e58bd1f1c9adc07dd2a7a5cf9450a83592e54853ffd1e85a6badb5ca2a7bb0e4a278b2d64dc7ac32fb7cc63d65081a9ea0b6a0219c414318028e8154d208291561a79b8d1fd1930103d0f0d8a59cd21f6c29397a1d56a59413a6e5e50c9691148834289dab83c8fe60df881e91869e7fc4cba570704a4724d18332a267ff499f86d72e7d220d2a3b44b22487d7d9b38ea3e7298153100bf9a369b75a27237a56157fe00c127805a7b2d7ca71a713d67d5e2402218c3f500591c019182193c6fe799ab42bdfd118d62921044725de4495cb84ca951082a3f2793f2150454563875268ec5af7c5ce2eb3cca7c342bd019573cb1d2a9dca3196311ce069799db705308eca5be5322184e7a7a70891211f588207a70921382c6322c4a2a993e6f393279a1faf11d1a34240386109102cb1c4124b8060091084200418cf844ec423a2472f89f0845134e735692743991c4572a272e6b489355c93185341b492ca0a89eb61528d2eeccaad916e5cb18c922b9a5cad49920dfbd17cad2729949808452f4af448a46b15c3b41a05ee834142c0d8f39f4e1c57ab94524a0a83ec504f1ab8868553dc2d8934441a220d9186b8df44d23912472291cedd2cbd4a810a28a72eb6305d8e8353e820bd740d1a89de8f8d0f5cd1d188f411e923d247d747a5cfd267e9f31aa90a715345458babb85a912ee393d2bfe845d3c72e4adaa6a3f4517432cab61ca552a9ca218ee74424ce225193adadd82ea237e286ec1014198548112717e2bed8137b4aaf3d5d2bc7c91854ba71d51cc7715cc320d395bd6d377cd4e8d16dbb41ea4adda9e04a1f75a5525050100c2a75bfe77dd088bd6c13048338259b5efeac64d027a1d03f9b0ed2473fa46ef4515cd53afaa8fbf84949854674e2c4c90fa7ae28128809573ac1c81f92b5d706e9abd147d754acbd30028165e8a30f78c66725ed85a67b75bd21fb08962159328a3e0f34a99b352c2c1772ccc87277218d206924331a1d89518f46e7679b8eeba32ec8ca27a8c8cdb61ccd64a7ec4249dcc28e6e90daa473b2461a8931f450d4235c12922c229d9044a0c418a88a5cf0cccf17710bac85a6a62e3a61197a8c098e3bca1f4e59b246e1e490fc61215dee2d685c1199cc08798a2410cbd0cb9f211cfc3ce9a5eeab432b37ae94f8c020966162359c8265e8211478060ac52591fb2ee30403d4c99f48831a1dc88c342add17b768fab83ac209ee2228a80483a2041959ade26ac59b8e989650a2476150742244ed3f58455f9b8ed26710642254fabcc9d47d3e4cdf81bd054e05e17a74fac805ab46a79743249148a372faf824728ac47d155727272d6596ace9d2e66ae24ac6f0cfcac4996ebae99fd75ae9ca9fe8c99f0a8efe83d865e7a3f41dd815c80e2725d2d40e556f8faa260954eae4cf8aa7728f6019faeb82c18bb88246e26a6875844b7252f2254d6f9211b2898a449f2dda3a0ab00cbd766143204e659d1058b703a9d5cd2090a0b18c28e59dc4289b83668c45628c31c618638c31c618637c103886d8c123be079555cb2e0b8b76d30113238cbc40e4611e89cc2aa5949694519ee609c36e3806e3d775ed66b7579b487880a7eb612e923925129904885bd2544953a0579839e7ec3e190473a0a618ccb74dc729c7e9f3f479c230191499085d01e34a287a620cfde454a53027ecd6e8452945f5c6a0f872a310fde9c6961b596e7412bbb8f14954b9314afc220e452992470e9144b42b9d904528fdbd128a18438f5d79240235c1c947209a48240748ea297dbc3d640d05628cf435621b1111287a411209d08a7ed2075dbbfa289124e11c3512a1b23e1e46cbaa57bdac2230f154042698a85346a7532c71276b25128d657cf5a7e33528c432f4fae41477136ec233f4323898abd2e06cf887a7c65ac56bc5defcb95ebaae8e6be87509b0ead202d4c216fa7a8f08b0eaea4217b2d0d78de0140ebf0e01565d5e78a1455f2f8253d9af37805517142855e8eb3c3885fdba025875458962455fdfc129ebd7896029f4f52138657f3de73a0e4e71bf6e839fd0d783e014e9d79b99d0d76f38a5f2eb0430405fafc1a9d2af03a1eaeb369c32fdfa0f357ddd074eb9fc3a0f3df4751a9c421999e9eb32acaa469e08405f8f61557d028aeb39b02acd4f1892a463f771577313667084fea29228f2e782625323081b3baa8ca9b5da5a6b8541b5e20423a372d3ce3ae7ac63a8b226e2d4ca71a7d35fbdaa8088c3c9985aabad15090d4ec55a39ee74fa3defa3d11c9b06cb0c818363a0dd78c226091e3a387618d1e3881f3b341f3c814d8d20a2f5ec0c1c1ca4040f1d1c3b8ce871c48f9d24220db4dc1038648db59fed21760c8123085b5dd2fae7611686591f10c22c19966559509ada901c433e5df7619d2b5df7533869dd8848735d3c4e68d4b8c1b183470db424479152c6ed9252765164f7628cd9a3c81eb3ccba6e5dd667bb5e41638d2d895e955e17fd1131287233c48e227a50c08a1fd7e5410226d12362e4099a8fa7c431404a2905b2628b68a3bd4832a2073f7a98470fce21ed9aff6cbc391f841130b8196247119106d2b00059d1d3f147fc8835707a51ea9c737a2c036f5dee968a440f7b14d84f30b1063b7c8d1813b5b9d990f0319c626913bd8bc4630430d18336312c037f6a58cf20a3a66997a6cd69ddc89a52bcb40ec54353c2c6eecb8ec2ce5dedbdd9ad9d94504a2873d45b29a594989412935b11da4dd4ee3c45cfa2d3891324766613898708887c279c88c33fc99a686311584eedca3157bd60472336019b8b34321ea7ca9a68210ee3545913d944aab70d7ff3c3430444b82642ec241c70efef9735371c335f6bf62780e00b9d755673137ac6d01fff14a19d45241e22407227c7d4da9da257fb53a2ebb983895e297af35dc9c96402053bb6641b3d38678fc6470911655f947c9c73c6e6ed9b40e0624ce41b49cc8b0bdcfc779a713ece19e7e3b4e69c1d102bd26959b49b3c4450648a2d2a004d60a1be172d7ab84ea18b962489b2e88d885cf4505627446cab66487432c4161d4bb08a3543443d405594a1e371ec88342c1d81aa60d2f13d624dc489b7688c513a8ea1239cd2524a88532f17850fca75358aeb92d7e1b9e8c1193126de7a8ec7040d9535f4f477aaa2487ff5047319a81df5dc3c220f4ef6a8dd2120b0c1a9275271304c7bbd59767fa016c038d895e01f1c0dd46b007b0f3d7978cecd03a2b8db81597142d14e77d0580654c508218d9451d46b4ce201c74055f0349050d7a18eb740422bb9f1883c3835422215278afa4ffee273f4b0dfc824ae0eb675cbc74eecd9d5af401e1e9cca837fba385f3082336420c5a056ebb2e8945248d6abca476f328ebc40ae7ac95cc45eef00ac4e3ae46219639d7988f3af3874ca0bca2bfeff7f4a021a56b3f402c940d333ce65b5db598094c365f6da6eef80cd6ad5de21f62c63329c6a2fe35c5b8e1e2c66beb6cc6a33d2c8f062b41970263edb6674fc0c195e4cc76bd66a94c6c5836b12b2473940afcba7d72c799883b53c8e761907728c75aa75240b905ada4029c05ebb036ce7800ff978d2427084e0c4d7eb5a9c8c89d7ee10ed2c632e0f87040ff50e8e35b5cb38990772f4d0f51a43b989b02e48ec9ac56a599694d5b2e4b35aadcba253d648a700122a010ba425a58097b29b4d70d3eaaa8c89affd559c695dd22301a70cb1788897db6c82bb918c43a79c5d90d8324229658533f171832a9e96ac2c135fb9afa0cd3a2f6c29ac4fcdbab36b1e10720c9601aca3ac9fd7bb0f56661e2c2844c499f7ba113273a42229af79497ac96ea240631952d033bdf04a719d5e20d77366337bf413eb7c504979401ee6984833e533f06139b57dd0cbcb6aadad0822522061d33e7664d77b2d04273bdd72b02301a7f41c9231f3f0d15b174208c5c1ac2dc70a65668b8a6a1724f645849c32a5ce4893651b11700ab65dff304ba5b84eb1a09645ad5fcfc181b67a5a977456083b5b4f235461b5d61cebd2a27108305a292fbb3a9be06403815d39352311704acfce8233715e4220b0a1c5a9f918e1a42c13bfd9984d70b03f4ae30e7e9033797878783cca01da514eeb1d67a456068971086d602123f9cd4f4873fc99134fef8376925342248c2bd05808bd102a2db5106b0117a1ca06d6026ef667a79c41228cb39337aad018aaa00a88a5c3f2f0f4a704cd893c0dc4fa4e6dc832347aa0e3e10c622121dbea601ab41885ae3a7ece6b969532e038255bbe045571f6809bd8c46eb211f236f0c69b41c3874863136b68f83cc18327c0200853f80247fee66405ce07a69d75c245b8cdd30d07900e14699d186501f150d59216893070ceeed339c1c00ea6ca981bb0a36019c305077f644dc499ac869eb3935da605c7fd95b4e80f62a1868e7fc7c844df450a0efe7b0d8489341c89a031a764cdcb3f0055b179042405943e9d8e1dded83033008e14f3dca269988d76b8b16459e5213bdc4cd65e3bd8c3adf46db370c06182e1b622125118d1e1a6f2d1689a46871b89bbec973be4e520107177f91026780acecb4170e130c15370a4b0ae716b2a595fdb10427a76cc332ccb72b95b30cdc4523316d3654bd6763aad50d149087912ecd39da379aa978d779ee1e9cae62295d0a54380901956cbe566b9cc4d62d1e5deb8f9960fd9dd807fb94cc029382fe76d0821578aab639e11cf9d8f394f511b81649c2a6b860c9182896b4afdc79598b4a282ff4cf05f0b8faa009e91dab4a2cb385a6f5c4354a14ab3ffb2e6cf8aaa8c912dcd678ec133cd35cd06c8f8f62e8065e4b5bb03ce3cc000fdb1d0c73f3536333474f084b81df091819634e9896aeb925ab32cd1e18d82888723a25d14f0328065e4a30358469e079c912c7471444f1e6e39b18b42f421a227719a3879c251788838807f70449d50113246ce6e07cbc8a780fb380847a4819745b278e5a062d4b2ce10bb8d5ecdd1012dc26bbcddf080c01dd891fe3bd55a6d74dc13574fdc4f275abb0ff6755dd725e41b195babb5561f15d2489be0e2698d9ef5d5b66ad48834d6214b518d16570587fd26c68bd59892cd342e012d5bad53103878aa5005dbba3dc158959e7f322f7c31e79c537ecad79b219a8d8d8d4d8c9967584fb02b227af02340c3ee87d6e198f9199aacd1f3b246f6c34d23984a1b969991e1112c332900026e46173de50f0bec5001567950878b1d141b099b566feed093c2690595abdb475d85331cd75c0cb92c2b096a59dd0ff3d79582b20c953f2404c3b5c0b04c7bc9ceddda3b7219a96452d4d995cc66495894cab3243a53a2b37327f16559b723b72ddb91bd6599a6699aa6699aa6695a6018866118866135891ea97c65a5fb668f66db913d09c32a64996f62cc959218ea9d7882160c9ac974d268b4a906545937bd0050c57293e99ae9a669ad1c773afd9ec7d2a64da6c34dc7f9a7e5d2f4cc742b4592932ab2647a3dcb2d009ca16779d37259c6d015d2773a89baedf33c4983c605672c213c56295224648132b11ce62718a3958f2e265f795af9cad3968ead1ce374a88c46766447766447766447a30eb5d2e5a874d8c8be64592c8b1dadfca6edad8d88d131ce7296b39ce5ace5fed9b4ed502a17751f4a07e99ce818c3994f89169dfba6b1db8f64452b1dcb6de783c56adbed58cd62c1b02e2f302693c96432994c2693b528538742a1b2b8e9510c95120bea2f306769ffcb32c6de00f37262a1d1a318dd67d3a3ab74303ad4e93b9dba96eef3da7a2d69b4fd4af7d1681552f7d9b4dcb1bad60a371d3f6ded49770467be1abd7dd449d9b1e0929b9fdea13f30223774ab52cb2ad5d8596c15a1532243156acb311697bb683f7d65fb8b481b5d956322d1b72031441f951a238dce916ed2ae32ba24ed375144c2441fdd4fa747a41149d47d3aa54fa7b97f3aa2ab74a526913a1fda553a1fdb45bf89a5ab536a914ea93597bfac88369795156badb518d6d2d2d25285529f3b471ad3e55a740e65d229d5522dd5defe954a259dd2b720eefac4e805371d3ffaba85c9ab6677c6981ff3c78c3ac0a26225ee6ac7eec85a19db471a76310ddb30edf6c78f1f3fb49db93351a552a9542a958e954ac74aa39552b7b2b2826131badf0f185719910ea3568ee3a2779768d970cdead194ad5bafb2c6d6ccaaa71c437bf40ebda1120756d46bb46ac74e6741b5dcdee5e52bd8471a76552eba1c86fda5da92e91de4a55546c7b08beef7168944a252870021adc29dbb91d8473a1f012d2f61173b6f09c0ba4fe146c7eed78308d1391246c248a40e8580d2b98fba6fa7d461204693baaf47731f9d84b57c74bfd155b096639d8f96973a1f2fc77e134977877ea36e8736eaa297f3575c5eba193d5477ebe2c272de88389de52716eea26ba2cbc27211896574d18985654462118934964ed3349148241289ace046a5fbbd7b344924eabe182d3a7713d77d316eb801060c181814eae5c5c5e5746a69616131994aa5951515151289e346239168dbacd5b42cc3b096b7745f6dd14d67b995e5dfd52f47d1e64ea8eeb35a7497bf5c661997eeb39a3bcbe5cec2d27db34537511ad345a2ee5b39e99c573ae95a5fb9df0eedd1ed553e5f6bf769a2d148725c6c6eb4fd3b7d0f27bd335d606909d6529a7aedf4b417cd95bd56abe76977848e8d53541124868eb524d28eb5d65a3bea7674ac8ed5b13ab68a151d6b6dad1c5f24050dfb8c35d83b9dbe220dbd91655df67a9d223aebbeebaa6dbb09b11b5a8ed67d3a4dafa35362c1a5d0c45ab6153b3db36f79f98bcb59507ff914cec7e8256d94a37252a7a3f4d105be52735c76495fc9ee4808d3b39c67a39b5de57ea3f3577e13b3ecdc67965d546d49e5a567f7d3e9ecd646047752965d1b5dd2ca47b7d45d00f6cab94b27f958e990c8295d08d357ce4d1a9d371da68e6bd2574acfee37caaed27d0a57ea746ccf3a1fdb573a1fa2671f5d9d52679d4ea9b79773dda7536ad1f9a84cf4624f9f759f0b890852d772de88b06ff9e7816e21d9969696d2b9510be9a573b6a585f4d2a8853b893bb574a7d38974ce9ee33e371b5ca61d930247ea7cd8631775a81c78d2e149dd97b5bd0fbb42b71c7bcc642ae9a890380ea6a5a56379e92a87b91bcb4a10d82b2b392bc7bab8e9e0e87d4634e9a4c7ed067713356857aeaddc513752b9a693ee576ad235b9e5a8dcf412478f742357e0ca96a372ee22ae138d3a1ff6f0db3a9d52db0e3b9f6bccfb6c744a1fad800acc625400693104c80a5770d66bacd1b2ffe8e8ddcb31667628ec3eeaaf1f3bb3c7ce84c2131ad8144d80ac000494c5105016494aa6d34fdb5bcee2024fca028a26dd250b279a48b904baa248cbc3c84082eb202812d6a1acb5d66edb0f6b77e6ceb4d6daee87dd76e6b6b9d8bb3377666f58f7edcc95156b4bd81440565002640522f015a80994aedf8fe6449ce8a3c370271d7539c6907e2349773b77bf9dd996b3d6db3eeab4ae722ce34794de91344e5104a471fca133d60ca936d1cbb2cc5a1ad1cb7c18da61289d1d113df8136b980a4560d015d0098462e11790096c02bb804f601438d4d9a58d9ce8328ec65ab4d2079209b28b6234619c9659a26427446c693f23d6f015423edc0c116966672f82083b894632a12ae42003aa42912c83d9a58df027d27c31099d3d3b048a34d10cf1c6ec680f5ba31622893447a29709690c13d2911342067f2c57823ed1cb94448f0302170591e38c3ebb28461f54d2d9b52abaa36b371eab17aea2977d74619218939d6e4220895e76d1659c9f19483afb11f0c73eb336fb0c7824d2c4679f3da3b3c70efeb880fbec077f3acbb27b50c59dc164d72c1769b4ecda66aded2a6ff259e7238a6c203921705f898b9b0d2aa534a27142e098040f4f8d87f387391f70f1a39e1d932dcca079cb1975e56a1047325ae79fa0eafa144ec64f99d7d8c6ec309eb6ce9d644f0357cbcedafa067ae64cac03925df28cb42cab03927d476659175946feebc0279967e4bc100b4a2ac8918c4813cbd07cebd139a3272fad4b371b168542248c37c0628bbecd4058f86081a4716806bae289be9f4e13b820d4403437810b4efa8ab88409fca1029258a4e1c7437149a4819081a8f044c3d8902692a13f0b9f04c7c3c923b1e6478ce143fec7435d7923f12022b44395881efcfb8b46841a9ea71a6918bb28e67da2a7247af00352c4cfb8247a5be062726a4b1240e10b5c34b3b7d9d0699d52cbc76b3b4e48d64011700c3c0a9ab8c0090d9e7c9048141fc0212234844a6848e4c4c37d5149541269929035514912b286833c5109090adca392a8242a21a2059da5a8748cf6b4554e2aa548440000000400e314000030140c8683a2e17024ca2369ef0314000f90a84c62481909c42088614a19630031400400004000404444d804048bd2b2795f3c9e946eaed825565af951300a26ac55cd0d40cddfe8751d5bb3223e4d4ff1edf341b81e97924e9250b008480f4b7d25b40d2ce920033e5f830280fab8cc8b1bc953ce6d5a92d4d841968e97e02f052697b30c5ba5ebc7f5d98d391d0910511b258b49fc651853ff8acea0103d94530433adc47e8b4eec9c4303f5853ea183498913434f1e302e8d65ef0b6bd633ff492b3ef63ff698aa28c9a54111749c44f431da2a03d87a8b64ec7521c260c7b87da71e2ef370c6fd4a93e365ff1f773e7a3ec88b3a6801fa16e7fe286f520b0875334237ae5aa306eba8190bc14fe597bacfe3e1d0f6b02aa800f394925a6e9a85cf5a335a4f2aa1dbcc6273b5dc8c93958433105afa201b6409b1850690e656969a234eb97f7d658769a8bce118d03f477d2c76e0041e14e3a67d54048a1e4c5c989f9ee300eb2bf230e97e5018cd1376293bfe3dfc25282f6fe1c15ce93c3478179ad478689498d7440e14f0ea3f31fcd42cad2bca1e02ee784c14ddee5253da596adbbb4ad57247a9541695535ebf4af836a716b272394599eceea094a041d62940e98b9bf17999c17ae77bf607ff69005d1f3cd09ff3c2582fa607f79aaa9e07e21c1e0faa48d6f3b05d1fcc83bf79307f296756827e2a0fab28cb003f22cfbacc0b412f53a4c2542b0f92abf23d541b3203986f333c8a7beb1148d28c9f5b1f38680b1b1410a2ffbc39cae83f2e31c247f8f0c3dcabcd770950bcd559635b6139e84e687471de6fdf3dbeea03471856de195d5b50c9dadf07a70cfdc323168a18c1750dc3abd4c2a5e563c98f644df82cbbc77575f2ae125373d9476ccaf63e644284ee5d3a0c5ce7910469d0f3927cae84fdbc65f77a790be67e36c549466428adfc6f02203987cdd55f26b47b00ec72523f6f3463374882f4dadec70eff474602ebeb6222c3c55ebf1673bb594c6f146f2889105bd3f4a7a576af4a98cdf4e629c44029203a3f48299cf56b6545ffcec5258f8b474fb294283e1cb1354304ac282604af74e42a38ef1de3bcd25a2ab0625f82f072a5d78359b269f1369b2a00143f320e7d0eb5a5470ef232ecbfb37b9f5b223f4c2d21841cf7844e8726f9eee2d7878d7b4d4c25beba520d1fd6c84ce9cf16fa5b4369fae1366e6e84ad83cc2a457be937f5966681a5913ae2d9ae306b189abe67b878fc3f462dbfec880bb30a011aecd0bcc3b97f0aa0630f84464f36ee39645cc942b017819100662b61f685237d94ac9916da405d66fc5f0d9ca2917c8b12c82733ccb1fc991c113d00817d67b3a346ba3334c74430da87787ab32214559b8000266c5ffcc2c8d6fab0ac4eb2287b0e608010c462aa0fcdda4521f7dc1c91dfdcdc5764316120c0f3aac11df02b9062cbad0052ded816bab7018203366c51028167414eaec8cd3d1df242599e86288414f68a950cdd40b0858ddf711b3feb55c63dd0149ab83cfa96181ee64775e8de4a004f16469919e4b1474090553121c90b558a0614a581fa371218ef319803d591f2b14d5cb4a05f443c86ef1c1cfc547a18d79fc0d736fb0fde4f87397dd8feda0f56b17dcf0c52c4e1e37405a2d65a9ed349c20d6d794c83ff69328dd623e603c9d80cb18d50bda1a3a55c71f3986fea77bb64f4ae226090a16074b53799e2aa2431cf29368a682a0015d785e00ec97f5cb8a07fa9a045602edff43753aa8e79bd6cb495ee18e919b4e323310fc732d04ddd82a9639eaa3e54007424e69cbf8e795426095d528108f421c83b63adef0de8c1a8833163204f5143cb29ce86bb78023943cb4b254c7f1e9af8afd3338c7830df7df6cbebc588cfa0397def3e38d1aca4a861e63ae60ddc89cf3dbbbf85358d9944f206258aa5548953d41e408e281ff6afbc8e79b9246eeb2c06741076dbb15c79230d858b2634d5193f55f94ad481cab4265b164b4967813b28049e238829320d4589e2182886876297ae88235543e9a82b2e848e5219a2b901b4e83576ed07bc6329589e3885bc92e529a541917e1d968a49807a105111d34299df9424673c2494b9b47b650f9055bc9a65e0825388f3dabae43b80e26be1808f529a767fc89a4445c1b5d3b2af5b2afafa68ced8e148a36bbd33aa0308ab92a18f1976bdc613559a0017c8b0987714c6da110d4553bc4833f9b08c67ab59c1134aa956cdf812c8d6eb5d534b06b0b9e00615b7f89d6cfbd7cdcc5ba7cd344d52999aa4eaf35beefe5912ba2d17906a1e380532d3b2b019da77d6f9dabe905ac94018fa626017e31d6e77bd8783bf33519b39ad0ef33d21db71573dd4906676da3a7189f10ec8346c5afbffcef9e4691a75ca079faaec3c0bf1e6d425c27776d439ee3921174a7c66ff504aef077891c2895cb5c56af2969a83cd2d09bb8593788f2309d5d9bed37a008d3466f7bcf53bcb62a2fe3e7298afbfaf3cf3ebee93cf9c9afbe533b77e7f79ccd5df470ef3f5f795677edd7df2995373bf7ce6d6ef2fcf79c5f6d2bfd042b1745c7c7cc2c965d69839aab9333a0dd14b01e8c886cacc53a638fef12161f17ead672b09b1414cd24807c26ed78ebe45a6264833b8a7ab93c920080908ec467756b92e8e8721ab1eb7230b2b9982427e12db2143c80dec04be816342323b72a488843837db81dbd710b24b7fb307a3ae5473f80ec0b32b9b91ba9fb65f629f0cf60f739707839493601894d375287691cd88960b358ae649ba87a45c4ab077552413e53da05875605f96b1ea437f94eb91cc02ad9767a9bd0013400d2206d3be9c649d5c8abc418788d0f398fa3a061e9ec4fdcacd9827b15290a796b814732cdc18629361e210b1694a766f281d7f0b879a328dab3a1e2c84037d8353a97529e9a9c1a57e219273b304b7970726a74b7365e8678d22216b30dcd18eed5ea0319d3fedd6407f1c1a98ecfc08372d9904d0c6b053b5e7b773f4c5a44e7d070920132e8b979c1870a9d958479ce96f3425c2612b691ce9608f874949359c95e3806678f909b5a5bb5142558b030fb690c516ecf08bb1235e54e3510443c8fe550a3348631bc31d52e0e710ac9b2174c93106e051e8ad49c1d55a131fac450f23d04994820253a4b18e8f05a1ff86bfdf088ca5a35ea462b884293a26574d5f8fc8378665f67fb6a4021b1b4c4ef6573aeba76089fdf94bae94828f7c90172f1f07972a9172258c805171d092093403ba6c1de254d089ced91d5b67981d3334d2e5e837f13e7426d16ae23d965ae68594cec84de0b1831763ebc8599c128f2dfdce60f09072952efc583ee79db1e590a85c37b373c488c0868ff71d11b4c4c31a94c369ab7790f3415980f4ca7e633910726a5f2d4a4e9b5d3d4a29833fc201d2abc3109a9fa35e8799d18507768733b6dd090e741ae03d0cc0a0423692b0633ce2226dfd10e38b7fe74fb9c6b2656fc974918fcb588c4f1daf6b78effd212f17fad9be6fef28212f86902c69e8550cabc51bd561231c80c14a72b55a49fc2c14e19e8dd7b5a5194ddac7692b5638c56f646358b61e51b1931c0436ccf277d2491773f35fdb9f04ee3debb7e1b11978ca2e4c7c0640895f72f8cedbc1d935399e4c0f77ea2a58310020960b50a67f0a91636a93a8d3e96dfac51c0f4892c921ac76210410f5dc3532ec73c5312e0fc4b575162e0af0f2f26d6076b34961ba9f1c91815df87ad191ec3f2f3aec956d2b43e5e41f06f78065720e26425e35a101f9983b392c4e8cd9de0033469a808ae3a117ee14571fd8df68f22967857603b558bf653579df368c101c3877b75b23ae719de7bb2639aeb701896461108fef404940c49aa398c48d03b01b30f4580fee326524acce50f2d02f3cf37b2bf91ffe0d020d142673954e67774d4892e7fe9c5c131ebe58fdb9235841d47c87ab152b745c728090fe5c96ad5528d6c62aa8bfebd4f6b75ed1827397820f9e059f449d0210ccef50e67a33fddc17a6f84df1150068f6204fa7538b8ec89f47487339f4aa412fe1e7faa6844a6e20364454b2f444804c8a739c3d857c89cdcee840e8b8ec607e2f0233b9018e7d402b65c08815f3fd9ab84c0a9349562571ff2bb315d4157a2637b732b0d9261f4e0ffbce9fd59bcc1e0aa4d984d931fed276797828378c8f20861249fa3c7b2fe37d2a3782868bc6e2146f45615718397875fa0663f73285a77243f6e822b260091abe2f272f9ea5fbe8bd1afac77e596ce59d6307e728979aca4d0a4e7134d8339f6b4d94028deee3ebb83a9fbb74e526b32b26faadb9d154984363b31b7b70b4c6c37425e6346753f55fc87d5d260a684ed0ddcbdc909c6fe39ec6815ab041273a36ca7c46231363f57aaefda7f92b251479ae536e3dd77366578c0c30e57d4e2bb3a1c0f7a264bf7ba0a2ccf6ec39e5d1f104730294977ba0895fdf742a3a9b174071aa57e8a05366f930c57726474794940e0b6a9ae583498b794b290392fb2a7b5c2af9f5d322447b0092ce225a3288ee427173e55035183a7be7a33e841d547505adeaf61de4817500caec595b90747b0d77fc6b50ad4a424708541bd18189a8483a3f91e36812fe3091e885e04a41267b85a68282d234931f2d250f8a92fe44d0042834a0e3893b79d67daed0499c8fa1d2ca9429e9f5dc8f161756bd752c8851f90efbacd7c38554afbc4f39d748ec8484899966a218b8fb453e7e8259c82d6d1662fc2ea2eb0740755916eed0fa7a4ec6c110e02e725768a6d611756e6bb25813175e1340eb4bc19381642dede22894f611d28d32fd3cddc680ef42fdcce857fa0d2c9fd9eb488eadfcfdadd7679711b5e150da037824544bf2c0e527a56f863ae5bc308f3bd66ae20fa125c2d56d6acd5520bdaa23e9add3d0cb36cafeda9de34b9165066b7f75dc1300276f3ceab454c00386be8d9e482b70d9bfd87e25ec15467747037e77f3e0756a213f65d9c83323b1230dba06e608260388f65599610bac1702974e2e403f278710646f320c6d557459d9e91d36d4e127bc16554db80c8601bd5232ef7b9b95e4985a65c74078fba44087d5ac4a4d48d3752c9f42856554322e99503b2be674567411a248bf898193e46b3b5984174851ea8292c06d6f0e7c3319da0e769b081e6d9b239e272031c5dcea70e43c9eaeea3549182f4f601417a15718c333ffb95c098c4e2994af6bf094801038848ea8a194154341d536a7b79b14d1a45dcff256a75157c8b8523ad5082ac86e9d2d550b6316cf3be889dfad48396512167f26760c6783ef56fd7c950c3af57ed081c7fc4b1a88c95671d27fa20b33b9b971ec96131ac22b467161335215b261cfc858ca763b10f813025ee3124b1ec8ac56ae64b3b3395723face5046cc4ff6b4362a98c28e59205c516e1db18c97f4e3012af056a1a19ef6ab9d351b633a69db2ba1a999a662e7f0a5c3d6419f09686d168bd8b5469e773ec8fc45f86f4738db1d91e9500b8cc6691322e05376003b285c552e9304b1110c2dad1f8f4e84eedf2ee38b9a08b23a713ee61c7cd9048af7f9fe01a596f449a44f5cccb41ce63f2b7aef887c13cf329342369597ea16d3681e1cfbfd179bcda03a8f1b55a3e29fc354a56fe7e60bc400d476068256a9912099cdc120593df7b7e7ef4c5ef5a9d0aa8b9d74739baec06f0ace8235d4b12cb968ba3d985d34921d79447b7b4050172f78301a82e08e8e2c29e5e6d5521194c14e7a1645d2a6bf0eb689c259966798d6ca2567029f785a0f72336e04aa39c9207efc613e63c9695985603abac70de1ac17fdbec168d361cf6b46da3bcbad21fae3cb1990f9ec36d58223c32b5274a0e81b65eb60ca488f010c2a51e8d5b1a5ff54e5309b65656cc11efb1bdb9d906621450aba251c8ca07367f691c99c4b166124e1079c4959154cd2c33233194346494a5365007477b90f79569a477c15df09c5acf91169948e5092c88ba22a1d54f20726937b287dbea19e814d2a7ed5ad9c637bb62ec4a1fe50cca4dd26f1f04e97c04b684d53987e28a9526f76251d6fcdd174c46ee30ea577d475b58ee12d45d6afb8e64284dea41be0477b2c6fa6c92c1ad1cf910b67fe44c0ec302927a47b96fc8a71fe2c60998925a23e488578e8b2c6c4c6d8af7e302948bd553a78984087725db2aaade29fb5562a0018c63fd90c46d06e46bff6cacc7745b7e706a577e477b520862a6994e396b29dcd3884d8f48ab24266338506168870930180db142f733bd42c81422340c78a888533f23239562496c02bea65a496f045c2c122c9f2fb48ac654ac51be64456c07b2d69388b421418c84eeb184b5e5af061951d22dff8b575cfd2a33edd08448935a23bccd536d1fa2e4eb9fc65c98d5c56ba21d15c1024c17c0ba2850af99c63df8e9a6c7025c2f1f837a6033c2228a078f16c68a0880f8378a2a0d03556e64f8a0e1a6376700d58ea36b363474191ad33d85fc4da2a4b32e60d181ad0ac20343fe04d499cde4c428cb9478881b708b2f60a0871d203eda90d24746fedfa28fbda0fdf3403741ab344ffe71c989025a13cafb6384a4d011be6f1171372c656232650e28854db9ea81eec3d35f2f7d01c4a744e6a650e78acf402f2eee4021ae0e586106acfa61c3b5e4d90a045420750ce579a608482c68d88fb5c35f78676c3727c8043ad7d4a6547acff3aa3acc21b4adf60108d24bffc911f282c437aea577f4cbb680d743edd7ea6ef09d03020484ccf9fbc6621c1f05b6dd6fde084e25bde454250a0081f038d1c93085f0a8c2b561c332f43129cec7377186ae965b4e0505fa5f6a1d1bf6337f8492bf1a7bbfedff8aa4fd55c9eb8199d78078ccdb37d43a97fa69fabda2cf595169130b1999b7eff30d4f48dff9936abb566b3240bf5e5b49dbd2ae74076c31687ec712074b68be1cd4f4b7daaad967d2540311a3e6380260ffe3e262e0bb7ff950fb9c8800352f867cbec130aaeb71b99f84bf50b7eb1180b63bd24bd9c0f8efd491bf584bc190ab98123058491d52bc61da8a4d986a61addd40d1d1ffaef835c40bd121885574fb4caf1191fc3fddaf7788bcea95335dfd22b05e2dbe1b8866a27b60232c184e5f140ccc6a517ec11ccb1e1aa2e696381f5bf61cf7ed60d671a8d8dff7a65a19d52a0dfd5064a410729a35b6cfa7525f65f92c2a468e9fb036f6001fec4dd71a5aed334d1735b10f3faf3d2c255d20a4e4855c17e06ee1c6dc6c31e3f0b344d5a79a324b0875e7de246444cb2843ba41a214fb82de1bb9575cbd75cc46145848872b48f07d9d60e123eb21b2ec11d577b1602e2c78e8c3f82c72aa7cd0e649c3644e92d6fff990e4e284d9e5cfd40f7f13068c1b4ee080afae5fad98d55cc1303193ca9b5011df211d18700d7b7276819e08d8eab5784c2a2f83d404199cb11fd49580632d4b58e86c00362b23543aefef381c0fedf9c2a3da44134bf48b304e23331e3edcb014249a7a5be1a97d3f3f562ee5c59598ac0f4d68fda96d9204046b48da65a4f6367c9f8edb25c1af67ff53c997532c2b9f3173e0d8602bc9b9d64997c2a7e58760c2814d46299ce802a0c051df05fc1b7cc7aff1bfe44f0d9b09fb2d4022e3b8229b3a0feb92ef4f04fa582ca963326458d20a37f7172ad1014e3461d1f2232adf035a395a0d3fb045b7b28ecef9645fd2e7cf8ff4e41d495d19c647dd64f194350d4833bfe735cf316e0612083fad905f07612298e464499699e3129cd82b98b3c8055a4280d555da92192c741da2b83bf1a2ef05df5f98c9da2748561823d7932a7887a88d380c774ee40c49208e833ae13b939afed51758a64f5384663ca40136b31f925561f2ff3021dac82e520a70ade201a929915547a60d37cc7d12831589bd48d503bc102b7c94b9a3a336871ad20088af243cca1c05c4ff996d088c82381ccd5d19d670900ee61382f8d3b2d1fae66e13b8f6cd30e1392fbbfccc0a2cd3f141d3f92e780fe2f10a9173771a8c78b3265a8bb004cdb133ce6875452c8ed898ec5edd00506d398d982cfdca2d33568e3e5521635383c75943f0c55030ddb1bb53672cea7926a78e5a1fc67a2ff5e3f143328fdc297768f8464d812bdf86b8b395a8beaa11fcd2f8959db6d2de3e189df9043c7860e48a9e997b2a6af017816d944023f264e154854b1eb10111ea72c9b0dbeac88ba0ab5a4c46428289a60551d81ad7b98e44418d1c59269f4dd7ca4be26291830059c394cc8a7958a873f863eb9efd4ad7cc9de08d0e7d7095673a6c8c4a431a523be046a870c21e954172385cbdb9c9e9740970a436d02a994beabf5258e5bdb628301ee22433ab1b6db5e2b6453820a4baf6ad3c4847742a01de51287dfefbefcd562280647f9cc1e915bc83290287a1d9faf22d9eceb2c89400c9c80521afd172690d876f70755131e33b1eae7de56f0d90db9edddd3f9391feaa0c9ad56a2de833a78464290453104ebf2ec71f2d88b8d90ce1492d8532c192735a33095407a72fb25ca4604ff107255c2948ba05a22ad8c9703d4c6cb389b794d624dc3f1240cc6530178c750a22b79835bdb9c6e161f933a94084cc355a6a8819de819f47b87f0dd996d16971c3acb5156b453dc274643ceb29dd2f8ce8fd3bd95a155ce8476cad632594670a386e65a69a3d2a947159bacf05aefc85557abff494c216bf61ff6da6801665f6c2c4ea7100f8f71624ec61b1c4a3c6297202687d084d94f4c53335ec536b3bd82ff2d737275a2be5c457c7bb472743b889513f157c68d1a840e0bbb5a97592c928e8a34f3c1b89a1de1308c2dde3b60a12cbba27ace07a2649d07a6ac1c512fd73cb07200dab395dd7e0e8aee8b06cd48e4a1e70490f06f045bea670196869c53b94092875fd7a181446b1a067063818b2ed4d0e19ecd88882be133885e734b7293991146272e66a442086a4d9642272c4bf1712e314db2393c91c0aa64b6940dba6daa1c095db24819725096d2e2d8d7a41ea9816abea875f560adfc7a265ec2eca747f18947066d801260cef0ff1ee30cab96904b2870db4b3928fcc8811175b1456ac0929dc8f0a44202e21d552ee5da6cf24f3dc71f23e10e4875f303614ae4dc4fbd66ce7930a16bba095efd589f33a06e7c64d88a9ca35a5504959e1b66820820b00fb73e4a4c83c8cc6f03e41808f85e76806cc2ce34d27b77016b7c49f1e197eed4d7db93f486422fcb643fb2996c79d286cc75aea0c6c122069ee18c57d571573dde2911b8042c4dfcfcad714d31703e08f012f0ae86f15e44cab815f0c4c1126f14c0860c80293ccede354aa105ec650116bdd22139134896de36bf51f3e0118bba135dacd7ef3f54d5ea755cc5baffc295fe20a87d4dcb4e2a4f028d8c403fb5026b8eda7ed96f598bdbae35a11d41e26d9615731926c58b39194b5004ebf08a4ba92e74888644983196d4c9dc2bc385003e38bd6bff1990499ded6365a950e2905bd0b579d77678c168c702c17cc69134a5755c025708fac11fc09ca23ebf57f0e459a40982e243d7fd7267458c382e423216c2f498598bccadf24a6e8ddb27beb43a12972e36109074780a046479af4fb8cb4db8a2935fbff65347c8fab10b51802b6d23eaf146000866187b35c1020c52d07c1d98d0e39100875b31355245e04e34224e3ccca3511e0684dd728dba613eb3bce67419ffc8e9412fa9ceb67f909943543f6c3eecf3f4a0db5c45d33bcab42099b2b3c43acfdd4ce92020acdb8b75ddd1e817c821843cda3e8fac7acbf8bb9a9811ac71a6041bb8d0a00eed40b1717e7571484a9d2467701e2fe3c198cc4f762a19287c532a8ec21983fd21be37974a367ccc3a152609a8fee9b112e14ecf22ed4008cb539a1ca9e65601114470b2c707174e9ce7ccf68a5cd47b18fc6af1b8c46a8d5a67152724a781b07e0a58793844a1c219e8773378e56f3f1efed4ddbde89b252c58716e59515881e3ccd96ad118ec12bd8200aa277ea3904a083d34835b08e469573fa550cc61cb2b62d285aaeefb580409ff288ed5f42d52cc0a9f82b0b29f3016a9a616632bf07887f584d706c755af47f098dcb2b2636ce1eea1e43da43e8ceed5a38716c3842a78e974c28e98aa13f85a85c8a8ce63b31faa783ca93c5eb5cb5ca45343333f171c1e1f786bfbe5d84e5385aa3034fb94768eae9779125e8d07750a1fba60b57168b138f33ce44bd6f89074a45e244952a76da192bfd320ba1f087e0f480ca9a32783486feb9b9bda495606e80a1bbbe449b835ac0747a164ef69f72a58e68ab7a01fc4fbb223c6287fb424acdfd941eb5e0541ecdc0513cc2d16854c30c9f62b608471c0dc6b335493ca25890e4fd16bce9f68d2beb002a38a6fbf11d3d453cb15d415aef3975cb184f3884e96e8db35a447650de0c22ed78ccd092de5b3ef47a59a694788c5c324e6f552964d835619ca3ea60b13807c609a7c5f9d44512b08341a124d0b2d405a38751cc4347ba9b3847c8a6a16830d3bb7663f892e6801cdec9b2cb3e18be2e5e987e5496e52cff3d9ec8a6890db9e043f138ac5252113090453036c8ff31adb3270d4718f40930bba365a9d175326a492134edb270f8a291d3f0f93827dce0f7993aa2ef61b02f11c8129f2b25eebb67210d4e28c367000874ccf143659fb421e8fb904c02b0af81ea442f8b01d79349e8636b7d9f924aba2acc2f7cef82091b8f24db701e670a0d5a88b04f2db9f23b2d20038245e82c2b64bc681ce49c0f4e4a1bf3f8bf2e5a59763cce7f3f084204b71421a071ba8fb083303a228aa4d38f05a4a9c3b12f758e5cc752d327a46eee412d9df67b4cdb057e957f7d5d57283abce13dfc5183cceb198d8903fe301149b0cc1800e6632ce073614dd23087498826117a9c2ceed5cd37630ee0993a4f80153682fc2035ddc1b52b80e4977d196821a85ed2ac6f5dceafd6dcdda1127cc242c84d7db11953e4d522985efbe6bd11d8f70f5cd6cb5ca98353cc50a6521d28f0c89fab3636c88427e2c860aea77cfb4e1c99d22aca875e29535bb134664f57f38e049de8053a226af6bed38165d413b98e279cb0253fc207e32afeff49d0beeca83370c9197da3fe201a5bf9c93d7cb729661b8fe7f691fd678c62fc4b1db19b66f9af8b1131e50c6d2540fef85c5888c1965932bbf6ec7f0a471976528930642863859974d629debfe8b46f5190fa0e40a57d0598f2bcc11d0cb4553223a35ab3bb920de8f7f80cc418348f170a517b241fea93e058a5c94d8783508939dc9328b57c5555ee3efe0387f383a2dcd4b8a30ae0c9c5af3a4302138973162f339c48220563f99fb7f39c9e5e82fd12e48d6d54a58b744bb6538714e312b7e46dec302ddf5bb53493c4bcd08311a8734167ff4a59fe373a9a04d8e867f422c418c8103905d55186c29e4f474b763d617643ede949ac39a427825b964aa459d8267f9aaba3625a222b2c946c882f051b4a94a872027cac7277777e19a1cc37805aed00ad4ddddb71eb4d4c2733428af37f9b87264a557aa3961afd7f9d67bb909a4bc0f2f541008ce87e955ec167dbd4209035c01a1d806bc481adf25c140c115226d4f93b4b2419c5eead46a64768cf99bd3df6e9797aa85bc8cc90b7c267c44b7dbc5a6f265ef909aa319aa95a3c965afbeb2f3c28bb89d908eecbc9de0446872a23804dc2c1429abe61126d1511a64533ca20455220d7ea00a83781568df25868919174729dac26eb3610628dd2a8fc25c7408350226a0cd7f728c29fb37037dba924f1090ce8a81cbb8f7fa3411053652847ddcf733df6530322a787a292820069b3c458df6a9848931b19c245ff32dff9dafc4f13988a3dc992e546e27985c5fc62ca5f5ed4d631270df427f2199e51923cf14b456ff94a80e9a766e65a1d500a29f7c8cb8353638ba080823ecb7a2492e0986b15da439c5d14da11d94658ad42214176c3450267b97a692b8c1a597767ba7a45feafe72e90c17a295297646d72463ab7f529cd2fa53f3e421ef106254722bf621d4069cd8bd23877648e73860dba85d664af1837a38b3dfb742c076f4b4956da57d672803a901a21bad7b00c4609063349d05c65af5f9f7607bb62eb7efa8f254ea0d4220759a0b6ccf65f033a7ac53109a47c0ecf183328ecf3de5a2e750c686b471b04a929a3ddf48bb175e73ecc06c128a0633b3134190f4233e81c5818da83020eff5d1a41952c14418f30f94cb25372b81adb5c4f9944412745212e9800a576dc5ee2e426aeca56fb60b77c7da121d21a2263e54666b487e56e2d785b954e76c5bd87dbefaf405b96ebed298f3aadf81a0b0bbc90688be6c126248b2fd7d2d43de16c31adbafbb6e2876bfe31f20f0f88d8d6b052976351a1d7b0dbd8af50218b77d1a53e9a0626900e110ddd4362c5c274eaf459eec1a46b14b1286a23a25aa5035a9c36f6610f0fd2b1ab254750e9b0c2f923f125334746800060ef9b29cdb7248ece3cd3418696d729e38d319a46f489742629dc8d7f96fb091d3ae755896e4cbc09f211b844407eee776868c7347ddbdd89b55703eda6b011746b65ba0e31339bcafcb123ceb12db14af7fa81d0188b1bce6dd54f50600174e5ff95f59a8bf29d9fafb9bc5adfae2d2840a1c577df1df514fb1a7dcac236196db101959f981800db84417c2fcc5ea11ade36f464ae78820f039f780ebe42540c354fa70aa05b39e6b39c6481d449034b8d748999fce8414af5809c37b99fbc8535bd4b6b7a040972d0b59c14b7e1848cab1e3fddbc0a5696e794a9a6acf1a4393e12420269247ad87937229684d9168217abaafa73810ec7cbfe47e696a983e9d321878f712d17766f0d9698c6e0c00b84839aa821f830c933cadd2bb8c817e5048862daa0de6853c72c060140dfd0d32b1508acf4ef198ddeb33b47e548fb93f7e8925f26a10d95d549a0760bb3578a95fd46124f476d0827faf80107aa1b4bba62a87bb04b684fe94055de225678785008e190c26879c4ec2c47479ff737dcc9fc1b106e19eed6a8dfc138beb3e2ae865ebd15a419ac0deaf60727cb34941570ac9a8c8251ef6d0f85328dc766336df3895c196ea9882ba8df47d52a7f35517e469f8986513e7a10e90494cae609c30664037125cb85a741673f0d2c2e1cf91d34e6162defc1bec02fc1da876ef95b3f76e6c453725076bd10b13e1cef8f86615eef3f06bf156f32ae740c587bf175b2f6aee5c23a52e460b70ee668871307d25a9e2900bb84afdf35ba6bf9414db62d4395547228857d3c49bbd4fb69fea553a9994807bad3e877dfa8f95800f5e74fc4f22e9e97462d0fc0664b301fcef516fcfe2df071b02fce21e662e0276c72e7a5d73508e5e7edb4d555b606b3fbf2767f1a3101dcb60d0a11783481f3f4795ad0e68ca79f8f78ff32664f370bdb9bc68d831ca9b4bab6256b50a6b27449ad7e2b22889efc4726b4ce4bbfe436772ac620bb2aef2f2b6d4a95f4494ef73cba57763ad04ed7f4eb499cecf14873bed81859ccdb3918e49512f05adf53fed031db998b08f8ec2dc3f83cfb58bd5aa12cd3a51716541b3edcdb5a7224c266c09e66e372f61eb04d54c0e2f0612631ce9385486c70a62280e9d4601feecb20f1a785c0d5fa32fcc47a81cc5c17764e54d8a33ceeb19ff43ef4390dfe2e583a1d72ce613b8e68fcd327324cd7b2a26e6e5b7fabcc435e8edfd04920f1725f8a2485a3274318f4fffff13227903eb434b59237a87b336bc853cb77be0efcf340df42e2378b6e78cded00632e645227a4a1aa7d145f2d526fdf5dafb1192375d0db319d407cdd7cfafc06a762b6948b3ef71307c4a7f601080c5f56be8110ece1f64fd6d8149a6950373115f986a688ed8d72223631cf39bcc365f41d6b4f8dfa4d8363f6f5a09675ab28017663c5b466dbe296ba1f8086d02200bf1a3e7f0a080c77a0a3407933283f2d35028f6b4f1a16bf33d185f75c9ba976e7226a5db5f6ef103e32da6a49774496a9047aa97d215e8ca5588ceaaf44980a1809f2cb34868cb30d0d3e2866df8f110971420246b35c3c4887c3ccec25b9eb34455453c0cbc918193d347cbeb38a67e741d8bd42d00f020c8ca26da9ecd2b68e1256dbe4e12707e42938071b7b8cdd7dd68a3c5c8838e56e5b26b1ccf78741427afe3b3577ca2b2844ef7208ec273860959247b1685f1255d5f0604f817d3e02bcdd7db946e30cc802260795ff9227d1945e381d3b338ef5f40f2e5ff3d75bf22e85887a7889a9badc698f75f342a2a3999c993568ead963b629ed958904aae71044d232d70d96a7a91aad4a9910f9a7558f7ff582df263cd520757844f0ba70e784e0b8496ef9439230497caab01fd4d43b298c1e028e3a169f3d09d4ec397af4b66833bc9b366c86c0673b89a4bae442561709e10479a4660c78a6c1240480aaa1f8d560d369ce4d35302f460cc346d5a1453a42837065fcd1d16ed806f87234761aecb2aea613c3ce837a71ce25023b0539999838d158dc066ffa1c151d09a524a37e555f83c9cc240b2b06e86aee64ecea02267be987da9ac87edaba94f1fcb688f3ae57f3cbdeba4efd6c2cf91b83bf49294b13d2e14d5a71bcdd7138974c5986d8612fab931c08b93431b7a4dbcc9e1e80bdeae5f749ac1de41f93c74383b394d7090a0eecb54089216d54ba4aa112a78bcb765ecaf8cc1b7b7b0e43120b7c93334c9d457f5223efd4204dd31429497c0babdf2c687f07f02121299a635b8897362d8e23e84778c6416d830929633ef32eeb2b1a290f12a87eab8c27bc4a43d2f5ec23112e32e59f8ea2cc3c5d61c77b36ebad8a2bb944a6246828708990acbaf2bd82e589a29fcd4a6450a5c77e0739485ce77a266fae6c5a286c6d47e77f942564c1d869b5d1455b27331d8779d25ff75e1932d1bda382491e91591c59176e47c9ea0040e560474a79408f97b63eee5cb4cc2e7f243c36568f2884878fb3824c54b7472ce75c42ca6d556fe5652a9e7f5c840a5b56527dffb89ed3f2f5f081f24b99afb543be69c223af9cc38ab522c73d8090877897655ebbf2cd07cabd3c5c09c1a83787adc999fbc1f0c7c6ca1a4f7ee90d0a886f0e815efa3b01c4e224079f4262b6f51c27791af511ec4ef2d19bd2eb42c9af595b7d6256c9095d14bafb2b1187cdedc3eb689ee836ed6030910c525b3b4f5a3504c5f250d40c50880458f4cacf186bf4fd6774568cabd1a999d4ef65b8af36a470dbd25a1292e0b97278df1966210283c6b8ba17fa357df9203ae1522431b937c386a452d319562b9b32c3a36ccda0c1775790ce08c419f4c148ab2745d23d5ce66f6a31a50513b4a3db8d5df6218e42882f9513ad177298f07c2846f9c26970b3f67de35aeb05de3429f4c361010b8acde9317877b2ed73b3447835062b645d916e2bce4292feb7ad8bd1467396043380aa4c6748b39310525511d87e7bde17e1374ef1a6efccd169ee266a1c9fac08251d5925cccb3e06561eddd104bc7dfde6311d9f22c19e1cec8fbb1c05bdd6a5b7e77c5c7b0ba55266d8ce56773403b26f81f54c868505596f5b5caf44294d391124c2abfe4109b777f9448d08d910e94d2471bfcde7cb476bfa0e8b0ef411f03d04e7e432535f8d7c5031ea01e5ba13ba29e00604bbd6cb37737b87394bab67f465ac17a2f7bd73d4d64e329aea7f0dde5694b22dcd0dd3af2e43214a2e816ff005da66bfc429514b79677b09c108e0dad9eeecc45f4f7aab3fac45e36506794cd95891d6e091fd89911e245fa4fd0da3dbae9b52c2f70148d9e77cde638ff31e14c39c203f7089dd1419547a277442ce150f2e17ed91fc4e90277ca2f56e428ee85e6a839f8997b103809022d42e45f9549b7590c50a131370773a304386240ba93c1bd54707992ea3504902263032268ec71dac256042137b753c3b971bacdfcedc7e6031863483d09c5cbafbfc0c4610be6d3072a305d22f0bcb42452718adfee7db78d0b4ec4996cee2e9a0c559a3d5042e51ed0683d172aac274554dcf09d7a7cf59089e9e35f3063716ef42303475e3f7420517cedafb576e1110682af59fcd63bbe8aaf71df01ec3156159e4416a5411ac6e59f83e2dece31176f1b432a7cd4919cf5d4251e8f572af99bec3ee8de0fd84668c256a415340dfbe26472eddc481285d3920f3347251bc04483abf83e07e44f2b0ca826d652373e9fb158266eefd8b8f1522b9519734597e4f8f2c6398c65bc6cd39b583f9ec975457c08fd66e99295b3ad0005f0d29c038a9bc68f8f0fa9363ff1b74c3acb69626ea1472644cd05b4a197abe62c54d4b24c830f6926eaf1a95ea623114b329b6d1ba7f15cf540291c2c115ba4e22b6d37c04bc72f6e36cd1059c1f7766c369e34c3ecbff108260357eb2ece908e7660fd330c1e4af2794b8f834279f3625d3e89189ea5a6a7e5f6ee88bbb79ba7402fca3d9d2008e478afce801cef9a2fbdcc5859d051f9ac78fe2e92bf1ff3adb27c2531bf32bd1a77bea07bc16de34bd98bc666af2dff1cea0f0d81b4e238f7d4d10d848a1a7cab22a5592c69046f238556ef2f4a819aa22f19a1b2f0f8fb29f488b94f77867f092c5f2b1202ebc8ea0a7441965000f58f2a04e4ba4eb8733b9b55255e50b30c9b2d206aec0a6b9737d8d9e74d6168900692de44578b5f1d4b37014fd5cc44b2a397dcf747d7619aa6470c9de895fe5fff2b2832041e002b7a130926e9396ff558489a0cfe9af7d1e39040e4607be4201d69a224d66c6540df1607ccd4fe9f73d7308c719ea18ebe2b2384fd25a5c0a23ac7f09673a0fb14198355f566ae92457dec31e2a455b269f3a0118d395b16ab8721108d7f75be3bc25d39c4fe55e3108ae7d07e8fc862fb55a473f8183c64360f6429de7bb357e838ed5ea84eada9c7e0a08af64e76d534ca4646fe50f16e8afe8edb94657195de8940a0285c62933c165890f215a9cb8956e9036c094503dd4c2481ffc106c00aeea56eb55d1ae82495400f2cd013d482fb5f511f1bd01fb6062d7c18ae2180bcee669b38919f5c405e70cbd6cd3f50d4e8bbf1e1ce458ca5f6a7f9c99d73f571d68e5f963398db4b7acafe0a39ede53c0ae60eecd6c35fec7f439cf6e83f9e99fbac12e3b82596368a09e334f69888e80d1a2b0a8793b2c6d38918dd2c0f0e7de0323420587d987e4c9692f2bbee5b754274462820bcb36b6a91bd34c447dea35e0eb386bf054df860d2d22051f245dfca18382f7fe055b99b47822248b2c30e3b87aa94b39ae22d02aba19cd8101ce75e96432185cbed080c0b11d9a779eab4ca8e845c6ad7419a56ea083ae57bbc3eeae4b4e9000f0eb4e5c6d409a05be4494f97a024f4e505ba64b0bc5a411262429da5b2ad69f4808ea74802aac275f940104a96e8a73f437984611a48a73c0a16e87f47f9476c22f5338a94055d53e8aa4d1edf3de646bd384f02d7701772da0f95f009bee10b26ce2e179d0baea065efe2d87941fc65dd91a9444511ec6f8292c616611e2e211b28cb4ea9b0134e4996c017eb0e54922bf66b872fe63b600fcbaaa040213de6056cea640e160632ebcb2b56e47391ddb31cf76bc14ed1a8717e20fac5560f0343ce7b86e802de0491cec1432428eaa3c63c29cca18127a4353e6a38f1c0c690f394f49180f9d9a32fc116957ef2ffd38922ea52b51446f65f900a0b48ca90ba5f19d8f53c1c4ad8988d947ed3b83c420d3db212994ede66dc5cc417a15cbc73a99e0f3db08de8790b9670d36378303af9d70b64cc0c77223436dc3cfe67027813c1a77ced5abb28a57049ba09a09d85c1d5f6a669f5cbd896bd8c1cfda17b1a3ca3d26af462bd78f3dd10eeef52008d314e26095d02d3e8ebc3880b05683bc4e7bfc30e48cf6d2a5452175d027302232e532f32381c59c3610097f903db0af8c6d285e01c9055b8f87b3caeab1779c45714dc694f5f3c2ec715ef742c8417a5b96d9537594c3f411540587ffa8c9c94ab9a1844040722200a1b1e808f965b4eb907b15b01f414eb487b00304a2c7e0933cd1760b4147b60645532f4d89c4eb935d49df817568318ec22c8fe43bf0ff35e33c28dc261d7d8fb71d3c928a607ceea01101c4c2f1cd2446d0df0a17b46d2942c3a8c1ca30333d1ca3d911e0f4feb514ab62d8dd5c0f0ae98dc54c93392d70e7df92004eb08b7b314fd799ab934e4f6d24fe074155d4027759a560606b4326a3ef2f6df00515c17e990c77dff0a00e9138ac16b56135a15d2db01a759006141715a283d2b60bfa1a47f00a1778603f0bdf6e209af662b4238ea9688d05d7cfde8912134161a76f4153267a56bb7f563bde83ae8ae1822160479442f39596bac9b23c6d4e314bedcc187b422392e5908edcfd9e41ca175d99c41635ea0c8b3daf8534d752007c096a3145e88060e106534f571d9c43f74f7373f3a60582b93114e08d8e449deb4529cbdac296837f15e09395f3b3c37119158113bc16210d6e9a36c9e08a35b3189d6c7e2196f121c275bb2f76ebb865156a1619fae3ceda21a2e08037b9c90ed638018a2ac6d9006e719650ea83c86bc1ec61afb54f8b3fd337fec4edea53a9a919fe60096627c3def46ce11b6e530ad6989d8d57b5bcf97e5fe6ad17413397d29b97574d21fa49d8db24f96541bd6216c142e9e18369d8d956599ea34db4372c60ca8a8fb0bece3c0d3a82b9e2319c9181f77a8f352a66cf8e08d9f2cc5005adc6e605e9e6d1d7f78b102bf2e957d8258f5852bf30fbffa28d9d0b873853cf9b14d68d7b1925f74b9ffb0e7db9645e0e1510b92e30de207322ee307f5d3c7517b410cf8d5098c5023cdd317102a4d879e27c2f934136c0c3da895aa4ff2a2e67e38034a07988ca3954ab16cfbc2a10b48ba1617ddaa4535790fb822a99e3c7df2964eec02ea1365d0c483a63aafad83ae21ccc6ca7269127887747351bda8fd39e58aa7dae87601f863f484aa6ea5752a5fe6f93a069cffe0adad05555bf0e0c0e8e2b2942da2b0155bbc8d68a6e824e4d958154f3bd4a1b150367a7ea79f8c8a34a4a5c013b311243fd5e3c1cae4c7d35f89c0b223d9e1d85f4f615d8477060ba31e55a8cb107ee184297b92bf02657a16f3c587ba4c81bd3cec34cd286f7f2cabaec14aebe53e9e5fb46f83b5f64b61c7f89ad0e81b3e4bfa8e86dbbedbf6149b7aff041627ded766e58f3d471c1e5cdb661300b8da861b042361b95f2e3501d47b4e91d01517b1e10eaf24f9d709927b4e5585cbf51ac83b6a08dad3a4f6084468d6c97a91b7101a57f9de5df903e3cd0f2d0e6ad5f07cab824fee77acbf504a605c030c408136465a9f911facdc69cc29e095cd7ee4bc417e040ca13c21b65f260c8e1f2d8a326124b2a867d3fd2df86d2410b82ec6c1c0f423ea8c20462a10f11b760bcba81b3c8cc0b517ac69733430f5d32af7606aba09fe62cd51388d3a233f15c371aaf024c338378bf6d9d96d47b870d72ecc3a8fc91978b45fd33173306fc4f19da8a8905934b16baa0f751af8cc1c640bdfd2af5c9e84852b8361fc9744c87eed24f141aba5fdf615bd85494ff909e09c0dd926e238f17d19fa72ffda315f7f78f6e8a0d810d54226e035a9dd532ba5fa31e7a53fad4edf1adfcab9c216eff4f9a7409a8acebd0e15c5021c791adf5d831972c8fcce2d687c3b7c2852a7f16de5ab4716f75dcc8bc0697c77d3d109a44824e38da03a6f349b90fda18cb24d72c20b40f5525414836a96b87f1fc078d9f5ccef61fefc76f566ec6ebfef4a4a94c885692d6320446ac666e68ceacf3b65e41ea610ab453fe785675bbc53d52c8a3c3d5c7bd22d6c43ac35e66bca096d68ea2fa5b0c7c16a528ebe8bdc37e906910d0966a9048d3c20fc94f248a87140a414d2a45d85a8d3826793faadee92a932af7998fd07f98f3395796e80b21a0fedf33008a754b36d14ae65184495107715cc8474478837be9d19610fc1771f6051cc83c41197e460018a7175d0b2d34747582183bc9b81efa33fe4dcafc077c6eba34291ed541765700dec049e96fbf66202df5502c6b25163b2e9839afd7e3734d27df51687113de28c41bdca604fc077d0402cfed2cb2a28d3c08c4bacbe6081383490cd8e68bd76ef7667c302806e8c4aafdfe2c6d2b444b888b6a8362865177fb79d367ff4d461787b70c28f7fac04181c004f8d7c2201e42f8b8302e2cb79ae683404dcb20e675f32bfe1669874bbfc36bedbd42eaf5cbbefb1621cd72f77db1d9e16e7d2c614579bcfc5ede15fc9156d6ee4a535b4d86fa2c7bbc57d922f9e56d0680c353cb685807790b8556be8a2fbb52e7aaa339e78c2ce01596b16dbbec47a3f3b4e4dd826941227d69824a189c406f3e76270e2b4a00a84a198ad454460830194c0ce98bdc1e24cec391f74c0c9098ef90b799734e408c917050bf1581c08d426040eb3483487a6ad06020da683d5b3880d0405811cf997f616b02c500e8a043068b908c94bb0a2c3d637815e79019319e447ec2d236d1f161172071aa0ba74b01b5997653c4f050ee70f5b3662b9aca9f767607d40619f90f2b438306b7898acd94bac896bda9a0adca5cc2f8746ddf4d59ba8d194362a451b50df65c8466b8cd5df89b8d11df3f4011138fa8a95de546e8e5631a4bf97b3a35b2c6e05e53c7a453f797cd3ac494d0392402c985c4dc798da8197726471b230d98271b07ca5d4fe9a1b40d20ec90e9bc289f76a1a651bed1fcebf4b733d9672c83398792b4c38379a10eedfe75d5732727115f7cb4866dce2154de57ea56982ed1fe37d285740b9307535cf6a955bc276e55c48f7bdf617da798c4fda61f02010d970b468e452d42e5be71c8d49beba8cccf0bac9622e5d884251024b4882b012a8cb4076757ff592f40dbbc639142a9c1bb9cf38243eb55d320dd42f6dfad5d60295f1c8d15f2d92947f51f523577035b1a74a544096210ca9d40f05b972191e1144af1f62cb740c08ca92360f917acae15f964df4d2f8fab00cbdc4e845d50c86b2a573e213eb02fce2999484c08878f85ad13faa3943270219fca3cdd5c17ad608a74e7bfaeb18c9ed373fe859af2241c4a098611ed40811bbc5bb44847cdb8bd55335eccc46bf8e6aaf55203143e3170a58a89d01b6eb19dd8b9806b029de604bc23e62dd34584e1fee528d48023e258a1109ff0e61436d0147084c4d992e66e87aa7b1e4e61a4b448a64f8c77ee23f77903d2ee462b4df478ae1a243da231d218a396e1f5ce190352a0c22a68b3a33033f9a178884c8233b64dc7f9f2475ca336bc33535d0d2c2ad8f9d4f20ea8fac6af2679035dfd8478896f6ff073043e9fe5dc167daa5bc68b8fada7145ca67348cfd723d2aad34ffe20c24aa2e814c84c6b3423aea608a1c5a6d88440e7458f064cb159a72f60f3bf1894f17e5310d3a44ab3b2ff291ec58052f674f15a736752a12142c40c9bba2f70b1b41762b9524d9af54e018d227c7d72a9bb1bd0100abc21c422547ca4ef22f466d7bb3abd0df816eff8846ecdae9647dc37d2407950f47988968c5280a85a01b2831ae921533f907b96eedcaebcece4a8a8e7808cc9a381ef82f539487675a926bf3d8e90cf77b6345aa95a405b57257dbfca9c0960b9299d6acf745083175a72a04feda34903566336146913cbddbde2d41138bf9ae4cb184987525ba76b401b0ea32540e5718f7133f1e46a81298532d998606915f2ee1fa528c415f751077b9709fbe14d7ff5d7d1d7194cc77ae7bbbf6691dc1fe8de0e0d93b469ef88a12f2a6bcb06fa6ed6246334af14a02cdfd73499054c710d9c68462bf73a9c3481d1aa40e8ec0b62fe34bbf4411ad36428d78231ea9e51c85493c130a79fce47512b7af82785020fef5c0489fdbd77001a875dab326649b79332996edd0d4d4644c10490b433c559c0c6b660e21824d0010c099666b639bc536ac82c459e7354c52db9a4e34aac46a5826390d993c06718fc7fb6888c6412dee5a1ecf0a407d1117a5db5988aba5fd2f00221573bce1362676f762bb8ac537f3306c560aa802e5e9a5a4c4c71545d25458ddc9946d8cf83113e4b1489b8b81d29cc3e525032de095893c5d92e0f14b531575060a613fcbd27f952eb98af6d86e9912e1d50ba6bcd055bccb41f5790b81231e220c7bc32a6132e50532443d15cc51f1a73464081cb20967f541a4929acb07200c48fe479cface24199e4897dd606d540e25f28ff33de009ddc3142e0fab8ae107607859f808ac970bf3e16302c04d9d92681f544ebc7124c84d19ac6c5a75159f6a4ea8b3b51f405eec7d8dbfa14ed6fd274628bdf32a3007e65ddd2aaade3c6ea5df009d00bd9ba42e17318060db7162d9f1c044661a3baaecda8240349565589664bc666af07b52c76915a01c0ee120e4c3200c866408e4d1100e423e0cd2700806401e0fe130e4a320dde4dcdd6a3891a27defb39ffdb9dc31217dec9884941444c50e7cf8aa700032ab7f227970b17df7ef1278d43feaa6fd7c9f093a69ffb0571351dacf7aa46fcb00f25515ccc5a2cc7740ce399f09a2642f644e0939b19cf28c770c024edd5b8170e443035f6657568a499b387e75bf55e87770ba7b4a147c0f08738fae48efce5aeb21ea02dbbb668240b25a77a89ec8f9dba10fd1f91c0c3213b2cfb3d73028207b9b83de78cf1af60cdcfa4a970335f99e1baee141fd2fc3f56d41bea4a78d1028ec2c93593cadf321f87cb8264c636bf5855b0f92dc8eb329f4a30daaefe027f41d015c3b60a827cfe867293049a1d101fb81f9cce0189a3a2cad43a3dc80122e68661d3ea833ddb7387e24f129b819501e3b15d73d0d7562032e2b6c0fb62c76f7596ed5bd5677dd4e86d4fd5680d16b1f0b422e2a6e7811ab117bc3d08a126c41e94a80bfb4b36941141cf60528e69d61a22a857001027c6ff23daea59ddb2086914bb3f779e2b9a509cd0731903ba994fe8022bb41dabdab6ff87768b7cf5f1eeff29add4d16cd73271863193ed049291b6ac948ea08ffd2252d320aefd2dd82de55a903c4c18d7f0fcf2bf11415c98d7f53bd2c0a6c78114bfdf39b876cccddb23e3c1ca0506515bbb5afacaa647f7a0f40b6cebfd9ad022eeca0f7aa12d59fb04d1656ad69c6b4bad6e2f900fcca914d01955bc1b17aee0297849a7143538fe7514a154dfbc76935ccaed93a09008bcba265b1cc9da268d5cbbb5aee763df2d8892dd208fb88694d9a6d8528a5993104d0970ac45b74152c3cd4b43e8f511bbe255686e608111a653f90bedd3da23d93313e3e757c4d400489dd2aca95820264358524c2e170198abe42f2187de94988d629ebfd8b99d91886e21bf9c35ff137bce5ad51595ed2bdfcd84ca3c21d407d51b80e487dec66266f8be54e3efd6adbdcdea616ad6247c02ceb736f9d1aa772cedcf1027ad5a76b58deedec8a7a5aa044ecdee61f40e56ad6ef0adcf715e5d570c2871319cc61d5da63f0030239b34ef1661429e53ee27ec95fe27efd98e1c187f95f0c411e1911595642447fb714db794af87504adb5c5df1f42a13011b6ede00fef56879655779e72a31b045a3074ce120ced85bfc4a69cb378f5cc3a1dc89f040a857c298841505d91290a2295454c18e3ccd0408e8193912aa5800d77098af00494079885b3ef4419ecb29325be43a635bede55253f7106e002e0eb55ee420d684aabdfa0a86c850368656523f2d8bcefd15679ee4e37531470b8e26154b93cb7a1995db292ad516836249b045de52b4a66ff21b16a357257e1db63ba2de3a873d350642ef3c2734faa5ebd99b08dd9c01a698191fee92b157cea2a33883a59ac5775822ddc419bd4c200e7cdd34409cc31ac1fb1739f72ad5185179bdcc3eee7f365c2e96694432a7270c01d9836b8c82a847c22d77fc2cacb18e2d3d33f1679ea2ee669afc159754909a3b6e26c8775b497e07a3b8b95db805e04dccfc9c99c4d46214c3dc74a36563bb0d1b0d5a03d958d616402fcacc0a63c9f5a7aca082d889cb34a107a5652050104ffcefbcdfc53db9844c916e168f04a683defe84cbf1730acc317201d3378d57bbe5c79807e59b94bc00b2a0bd1416d25f8d3079627a1eb37a1096fe22f6ba6e4d0702bb2c8fbd72f8770e6046e6abef4a399a43aa213e6d9228cfa69331ac48fc90bc57967fbaa1b2bd318c2dee8f38ac6fb87e929d46e148d2680c846531dacb408558c275d276a4881f327f76913121196888564db5689caa1bff26696e16f83d77e476636a4a1828f6caa419c7a6d2cf95d2c7c6e7833515e96db266c22a597d5006e25a61347805f3e2f36ff0c651781ca5ec244c88e8c43e6d1bd9060687a10862540206bf3f587fc9edd47143ad803e04de5f19e44df51010feae052cfb3ce319e39a9593f5547adc0ecd229be0d716ff2581a9b8cdb4df73b3a85ed61791087994971903f1e7e7f89ea807a23034ae5932d1698c2947dd33a571553f584511faff7b6d5289ac324bc09ca59f54d4a91ddffc065e3bf5dab23866a9f560b1043ab8e7ea1430e13dfa57e9fa44b7cf68a9e7dbc80eceff8c3111c1db7921356433d7fc5d3ec30521a474866cb05497c40b511b198448fe42c54c3169d56c5283c5809c08fb1179c211ce7857fb44c20febe7062e808e938dbf827d835d79c865bec5c1a1455db09ad1d6d5fa43a569fdf086a6aafa4216767691fae109f2db4ff8a104fa9b31f33888796ccfe48423c037acbd70dfc050132dec84e5c2b2a8dc3557faca4786aed76cfb44fb969484745543ba9ba801cd0751e4ab2ea7215e04f8a24cf869aa70bf213365584542200e02a717243af8a8c458820fd4854d36d532d185ef6b93932835e73c313057ccf9fed5d6d07df0ab05d662ed34ae266012f50dbd7b171cfa1235e79440c2d875dadfe9dff5c49932b368a9c8834d6d74a6d398e8e1124920bb2fdc001c2c0ffcee0b8ddb6f9cac688438299b8156ba4ea0ad429ed93b41d22b61d35edb3a55b693a4f2728a25dbf7d28bdfe87584a9d7e2b966d0167743338ef61483898d4b8bf47c5352966699775a2d1088e33752d7f32819b4ab476aa37de7ad6762b521dca94dba1343e5b45c7e93c352b47a72622a652841e6d2d087cebe03a0f6c5f74d4742ea3cdaddeaf05211ec7911d7b9dc7cb740ddd40f52a7ae5d229d022678ecce8689e1eaa1f1bfb0006510623f5c41cd61e7a055cd169bbdbd2414635ab1175403e06ee4c6b03b0e64c4a7bb03f73199b530f675c92f83bc176111a05daac06486dd2d004892169f6037832810c6f177ce09744c4ee26887a42b84d5c3691f8657a6a4fb41c027d37eaec28cf8f271c7b6b7fbf32c823190954fbb7b21163db5973de0eb6e37bc65eff457e6267f92449da6d22ab1e16f85b6a479d82d36e0c3e205ae40d67e69ec4b2fe3f4965f5a3b8d8cb81c34ec81832dc4189e484bd94e3d3d00753e727e2d9c6067bce0e4c189841f58b104ef43f7ea770546bd341aa892b6171e0bce76fd0ba87adb3096fe14e42c29f4287371b6760775fd2054e47edb2b1aec2796b9ce01110c36f879b33e64d1fd585044aea413968bb9e350f6c1c89b788fd3ca423786bf646242dabdbe9688a15ce1d9064d54c0bb4b67a1c972cb0092f632839f6512601f90abb1beb373cad10eb6730c67e75b680265339fbd23d80003a857fec2b779ec13058d4a747ece4518bfcc490c1c5a89567457d45341b51aef07aa405eb173aee354842f4a7dd0d22e9c37562d62173a16acba2ab3e8a8449b7fc074c6978a173dc1b04222ab9074a20441ba0230c8a0c779cb05687063f9ab078a0b69cb89590ccbe5981dec2d4ac565255c23a3f501a4193d3eee7d64ae9fff49d50147a05e9ef0280c49c02642ebef43aed55688cb18e1aec18a10f63833358188f3ddecba268d54a85abd158c75b53f30c7a0d1c0f142c047a79f7b2562010334e07dee3f5995fca6abc7fe1f5d03d5bebe0d0a02b769e92eaf8ec4f3cdf1f68ea654779461122e288e5a802c27d8aadda47b7ab6c923c5a767495b3f8c81999fdf580dfb6fd6c4b42dadeddb6dc5bca94a40ccd0af60a270baef509eced9a77020a7ee69b85ccb5cc33923953beb2433be44656ab6bb3ebe9da4f3b3b8c93b90daec6c10f685ff3a062ce8c1ad82814a09ebb3473028e39d3457841fbac6544fb76eddb3b0b25fba959b2294620d327655e8313d243c2172a598ef881a3da1148d44d631e52820910d8a40d9f7f495f91feea1c6d4e568831c608c2b3d049e847123e7e5f7b774f76cd39e784e24a9730cfdc3860915d41b283db74f0838cd5adf21e37246d328430031e3a8882899894d70a538488153186106b5c51b56db3418e2d0aa0edc66bad5a099a26917832a3ac5863e66fcad8c71bb93cff8d491c8d8c86ac70c6b3d7cf3f36ac7cadc15f9da3d20cbc433d033d6b41a5de3ee70ca99462f40b276ed5a5c71b7f75e01673a8a350f033ab1108f5b83dbd2a680f59a0ed46da6738bfd877d8b16b2bc2b6105d1a34a0a2a0f4e08c6083abbc539d3a0db979a967b3eff42ca4616cb93e0abd12f6a122cc49d9bf08c46ade5e234f664f3503eb0eb81879224fe6d7eaf4cce9516659e6b373daa9d7c8c3ae49ea9286957da61266de01991a19a69882090d7670850f64b400c385931c70200262c288a78478479075733ed26197e65074ba316930e16a838c95989fb58fb7e7f9ca1c49609c800206d1ebdae7eb7ad62982794c14d3c51776e07103315704d1a9baeac35f1ca36c8da328546b0feed0c868514c152b54b8c472b085cc8baf1853c50c4b96b8c1c451c67ab8c1604cccc6cfb6711e5a50a292cf121fa0b04207277210440c7c6cb812cb81061dcae0414a09ec3261c897836cdbb4544eea8046156dc583e78e6a168efbee48a7b30fe19ef5c49c858b7c8a35a84d86913ff0a0117f16683f9775acf5fb50c94e8e2451e4a48fcef20789833e3aeba49c58e991e5e038be62f3d0ebb3c6cef92cbbaccb3bc77b74d8a563c290ce61df90b01a4041be3624ace4cc47b2b4034776a7c8a3b345c932a36a95bbb065f6db752a76bd61b38f435ec8f8dbc998fdb43cfb8ddb120e51887154b68b42747a48c8f2fcec1f7bed54ddf671c88bd05f1ca13a7a6abf919927597ce83992299426ad31eb31585cac7f378e03c576b33914ee1bd255b8cad5ca79e584a23cb3d013cfcc1e2b73c9061b3f213a7ef3559ccf4b16cf1eeb78f6faf9c7fa38e425ca5bad0a17715011489cd34620b1f3ad092babe022ce4b8ec0d1368fddc152bfb5c620128992b7b123cef1d14a1e422fa99524a0a756f278f2944aa97dd48941129d926f9a59880ebbfc4aa9d32e7685b76553efe9e6e9ac23c31f1d18965d76f7eceed946538dd2152f604f6c3b2844875dd1bba3b3b3d0aec32e76b18bc35aaded0e2fd823a489f58f2b7c749d6e9d9e18868d7e7174620e7be5d2c7a1367ebe9140e2afcefbc0451c4eced9a3c90e875d1216675029fc70715a4b303d58e98ba713bced9b735a573d58777b1dc600a052f801e3394eec1cb08249f8b5300b4b32880cc2dea152f8b19eddf0f469f8380466c9cf32ffb14bc6211d8cf9ac882bcccc2da5f429c9f0f27374c4cfcd454f4a19b5e8b4639985fd2db11787776e12fef9c9bf5c0204a20f540a3f49f2255fca11a44ffe86e2ca942f8ffa78050aa4af52fb6b7f08e748977e4928d2a610cb0c8bf324846058fa71e8cb94f7c1d68f435fa2fcb5af81ae1f9c233da3f38695037ba310cbe7213664787e66fb1af2e2e4571f87bef4f0dcc7a12f2ff8eb8a465a5cd74b8fd75ff2b75e7a945ea57fb2e8c848c6d8c5c0de08c64f9f4ec290e99232d3feb008232477389a227790934c1532b1df620cd2c72dc61c7dcfc72df490c14b0f5653868d4f75d825b358cd6f557d30fcc679731c17deb02b0b94304f808f599850e3a5d72a9d6e6e2b71a1dc5cfa0fde29851206beb1373b7b35660c69f9e43909688e181a4847411f878e8058878f4369c49e8b1ecc5e61198da38f436818498f583e0ea1f1f3edc12c1596bdda1461bd8b373896f3dcda21cc591b7f08c768e5043babfa6ed805e2802e1d213d51c8ca9fad13e84f09a38c694e7ab69c73ce2d387b850d2c0d6ca9790c19bdb485e5224ce5152e562a2a372b4f12cea1444a9825b470839d3e99878913612ae528ef94a7ba4eb5cff891ef65abc3134218d835e3935d333e8457e812a64b98d87548d3648ab29d6b0e8c271dfcc0838161cbb9ee609a9f40f9124c02c3fca0c2c04a07e1033f9ddcfa91efddab07730a03bbacd37826c4ff206c9d9c05e9d54f5e1d04df5c7e5e0259ee812bf701d2f80da8f20e9461ba84e99299ba6ece9373dc9ca693694eef389f6e398ef3094ae740ce649ad37d7830176c7c3a5741389d402895906857c9f5f9f6e895acf43c8f1a912ef8f0d0235253c40666e3a1076b79c96b01871deba1c4c1874fafc88d0f6f1fb0ce2d38e3124c390820ea03e943fa83cd4f56f5b18bba8f1b10c7c52e1d213d434c80000a29802ab0ab047641097d060c01efa03c74ee8790ee6e9752caeeee969c74a15d862093ca09b0a76872ca799ec7719c9b86b03d792edde4791ec7f9e6715be602aaa35e11ea156997eefd788af2602e4fe2c02eca790b4d652c815dd4f3e91591de2ee9c16464533b2893b81b7aeaa5152c153bbd3b0baab4b063178541164ea01a1f389b859d3e33b94c226cfb9c760a1d6dd3344de3dbd91b58f6aa29e1224e67e58d4bf063d7b66dd5b512075a2becf412ce3603111833d3b832e56c52a985f7fbf123bcb55a08d81ad8fed13874a94229ede639e76c4a29a54c29a594524a29a54e29a5945222ec744a63145cac5158ce04e6b15666ae99bc8233de250ad74929bb38896a98bac83ba699ee643bc771d223525319e8c15261abb60733399b00015a02bba6979cba7311f6cd8f7c4f6160d7e6d433217e16b6d8b95d2bf98c4b9373a50e23bb0eac5b176e7629e71a2c0de912c842caa38744fb54c8027b7c1837b8b5775cc925d74506d93a043736d239cb83b9f075d22b82f24eca06ad6fa0e731ab3ea45d5de775b38412d8a583dddce5779eb46c9df33a697d084bf7fcc8f70debb025c313e84b97210c2ecfe794276bc11338bf1b18a4777397a4e948e78157fe7cc7523a974ab2d3e0a807738173e91589ece2a90237ee474f0ff6c6a192976002ef70f3cf2825195e55eda613db569e9ee0228e7425ec152b2b06b8e811a7cb4f90ef18435304f283bda6222c65e09a1bbcf9287bd6944ad905479aa47b7a2a3370724e0dc24ea79994528234f8cb89e992994990f49a559a845dcd610db55012f5106ea11d06de69e1e35a681e145a72e1587b1492406d3fa188d4442d704e7b4532d2c2efa514b495794b7a7c293f7a48683701061f16892fbd1d87773a73de91a17ca2d3146c2116937ea64f26eb9233c07c1c3a83cb4fd7f93874c6123f38677ae45a75e2b5543acf8f9833fdc78f1f3f23a352a84128360f9098333d0175013fb110e197e18f1f6cbba61b39c15555dfb0ab7ac963f5b81159cdfd76568a2d6427639bbdbd6ee1629d625bdd0fdccd6baa12d55c85d73cd334adf4752a1cc151e1080e911a359cb33eb7f14e6572cb99401a3f8128d5ca51348ef2cc9b8075d304528ef3a76d0b5b34a19194c9517ef2216dba268ffe99c0edf3216c371a157e43b1894d6c72ff2de576460553683dbe0a8f326d9f5b9a239f6f210b9fcf842ca87c3b82f35b7804e7bf50e5d15bdda6b2e93a16e72c8ec5b1582cd486e2507e42d5d4d4d4a05028140aa5466a06bc383fe326f0aaf0261aa739a19c7562178ae67473f29bd389e646e526a7f19bce67dc0466aeb2de796a06859a711478711e358342e1b0eb084e24520187c936c30bc3064e4ec0f40a3a41b3f0c22083c020b7a061618041d3d048c91164100f54ac5875dbeab6d52eacafd6ba95b8cef33aaeb455a4afa6d6ba95b8ce3399bc8e2b6d95891a9b5aeb562a6df5c8a655b7ad6e258e2b6d95a87553eb1135de091e11ea7de383061f75db6a35e2039b9a8c5d3de0e473a700bcf4183d00d2c3b853d9d5d138028e0cc22e5d4611e40825973efbfb37b09feb0e567967039c73a12ba6e1e25c44ae5202744adcb5f62c45d91def88205decec2530e0d9af5c00e77aba7925cc2d34d35ba374cef6d8b6794cc09123b8ece33cc720d43770d6d845978d2e39028d41a8b3df013c7be801cf4898854a328d656b5a344525b26cd61ec16fa08d6a8f2c934d9b4a29f2244596812cf809cecf7a4eadceaa79464a2f9feb409effc2b7cbd2b78c40a8676368f9e10532d0a1012e7004041020845aadfd3ef7eb7221b10bb54716526a71c30d52a431c71329d3e8a22a992f9052c2805217155cc4b933f6ec1cf8b179343b5d92e037b0e6b94943c0434c4b4c044213a3130c7fdeb8fc66709ac24ae79ad216bc06cecf3cf38c50fadcec34b035ed4b32e650af9e11fb59abe0a5918d658d93661e4cd6cde50ef267468cad048217442da2551825ee032f715dc79528d02f894403848d5f0d0d56fafd3aef060c22a28fe2995a651865cf52d8657730d97c8cf54f529214c339ecf2fb8848244bc4f759cbd47b1a017ffa4e666b6ab5f6fbdc85a2085f974a1dde0806170de0092280eeee6e76795750332cd6df6f26b5eae96c48a968747004c2b3db7853a868545f1001d46aad0cc2a141b3ea621421f5d1c1e8d131802b07642fb4180101a9bf5f08ccdef7b9bb5c3a3a2b3956ac192e4aa55846042372d180679ee720d6af006c18bbdbdde5d2d1e9e9b14bb0be2e4611501fbd540a2512e73002081002f34a8dafa68b5104fbd1e5e057d300ce2f4fe737c8b300bc5a3b6bb98f255204c2795163d3d5e8a51858d91ddab4baf83ddfd6b3735962d3a4d5791f234fe90321f270ce5c28913a874b7e05f049cf3f2f91bc22acf42b6f3ad6b7a251a566502ccb3ab14c1eabe34aacad6aac8c4e56b37440cf58e59c22b8c854a31a6bb47b4611b6ce59fb2183308daecc29b8459717733267ff519d6d3ef34bf3cc7f7f747465a5177e7274653eb3cf58906d95e337f39123fd3e6b430f843f659b683867cf194da61881649ed17e0659d08983c361010af58e7655334d3175f8428df5eb33e53dae3f6bf60ef4bc7da67cf488701be748e616be50f348a6a78085ea2667a17a7393cbc0ead5b91a22d9a6cfa454281a1a1af0aac08bc2b7a7c01b830bbe1d05de21df268fcfb90539939bc2768ea3ce5dea9cd32dec1898c43dcabc56be44be7eb457139fd72a8c9d937591f848b421cc4590c8f492735dc9ab1ff199f2ed4836bf307c872fd4bce7b76b874836bfd9caebe6ddab2c44e285506a587913254d7c9cc562b1be180d705df0190a9f0fe1156bb55aad56abd56ab55aadbe304603ac2c1c365bb1582c168bc5627d2c168bc562b1585f18634e9390e54a5631e6f46ab55aad56ab152b8c310b4b1ebf935dc65116d85b47b47fa17d7c8cdd5c9679e9c14ad904b43265cae4f15956a1ac9c3d283ffe5a854aa2d1cb8956fd5905d14baf5f5e7a41a5cb4bf92f90e0fafc09b4cfdce7d93362fa2c6c6ecf22f0827c2d6c1dd13e0b5fe8a7e1854549c3611ddc7423d2e3773ec1e848da2f0c2fa3b3607228d6aff4ce3909869d4d298c8d1ee54f1976ce95a1f409defad3a50fe95981f852852192ccdbbb0ac4179de0f5421468902f94a35050854b541e83cf4be55ce6114122cbfcf4cd5b277776cd22d36788e4857e282c50a1a00a97c4a0a44c166ac881470fc89479a9bc89cf4b153649b92944d23ebdcbdc0323787da67cab7a7b29f45685a2f214a844daf0a7e6a50a6b507913254d7c1c8542a1be25b2cccb09ea2a1a71d04409902cda90c11539c24882cb0be53e50ca98418f1914d1840c5a5e2a954ae5c40c55a185c3b277689ba706d6ab490c35b05e4d94a85028140a8542a15228140a8542a19c869e172a6cd2822c580861032f701831e595f2196fa2a4890ac058913287115b3071c70be54a546113eb4c9830f9e979a9fcc7f55239939fefa5f29ffa5239132634d4d79253522cf6bd96686362b197ca99d0e07a2de93d622f95d3d0f352854d50cefe354f0a072f588e8ab0e2c6d08b3d055ace91426021860e5e6a60460d2f963e4f987cc12489a2316c18bda88f895350643c59cece0ccaccddddd30c9c8fb9b419ddddcd5cbabb917a78d2c533520ea6d32419174a5d767777f36c46e22f4124c1485c748eb86a8adca0e2886bce3967c69f44be9129e518948ad132d665685523234926332336168b89c1598abc1b188529e2d26d6962cb0c8e74dfec329250a73a344d6c99814eed4f7299698061824b921985a614338710e20629868b6a1a41c010453a5025e132e40be2978f61068c92d012e614ebc2ece909edc75f8eba0709ceaf79e2abea7c77f7e7f399b32422a9b317a112bcf3257863f8eaf3114cc2a006de157e1a0111e5944ed8e5ea0e8abd1d50d79e1eeb1894f2d1eb93a0ad096993c4a41bc748678ed18b1ebdbd8528020a11888400bba4ff601e19c439ed5515248386848a88c66879c26265100c78a77502fde8b15d024927b159523bb8239d1076c91aaaa258974bce2855609e1bce911e638c50da87f08d0c39bc35ba6436b8c8436082ba4ac3306ab144f40c651874ca192fd5b208645ebdd6eac1344d33a2e9e437a87431e508431587e420da983b55f77d1c72838b4f7d1c72838a378263eea4aad2c3cb28027532f60927d34694979aa7c44b8f47bc0773326d0c3135d6b4969189f671a88da22ef63135838af664f23aaeb4552d6691c6c9e5798b52ece3562310a94520d28a1a66c83a7b0bc7a12cf6718c9f0d467b4562d18c09e9a257e4003f339965719a6e04bea78c945a2147c86633182f23902b74d2a634b2b419154e724f9a759377524236729186d0dfd3b773b6d1d2e4ba634f7291996fd1bc0c5320b597e18c40da2b16330e2dcbb24c06aaf6ab69996b1a77edd18836550cc764fede91ddec36eddc3272e7579f678e12a7651747cda9a623e49addd476ce8742c9099d2fce0846d36c1bcd6edad3399da3e239dd3b1981c8c973ce6ed6246fb5c36e6a5b5551d7fe76cf9d0a964d6d4eeff9191ed1799f8f6efcf605474b52b35cfd6e7ea9dfcc6fadae6ddbbc7328a55a986599edae9d2327379fe3e6195146097674cc19ba303fc97c29add0096a1e639685947a97844655d4ac67aac853aa2a8d2b6561f6b7fb7e24317c373ffb8e3b19a561cb880bf3e92561fa44a9da9cd3e7276dcfee2e6db1671881c41dee663011cc16068a14110c97972b4411e24711dc7105101622b4b04115affbfd007610032d558c30c20e2c5e29307513a8571a7b5a66877a09bc53fa30749c31e68b2ca27822062feaaee6b9400f84aee400258e2c3ebcc0fc2c49b17346fe66a8d8fb3dbfb809fdfe940f36c58395a91facf4d8c3920419a4b2dfaf73a2fbb012c9328e4ef3f6d91168cfbc7a27b4e035cf58732dcb3c584633ea948568041dad1ebcf812b7a4c80a21c4686cf371e84b1c3ff371e84b97f8cda64e2333a133bbda99d03c26d740f39c3ca6f1d34f2006a22bb21b3f89f8c8633b872b105d968c26be5f5eec626a79e2fb003167ba083f69bce283c537ada10122907900097c73ac1c2bc7ca0698c0f7e64f1dd555c885c0cf4da77970624ea543784773579d366a2b6c608c757eece2194e151124db2e9dbd13e297efb02bc26a3e1a6b75549a496dfeb5748a2d69a162d8acc86e3670ad7a235134fa32947d1cfa82c55f571d5ce59d18ed697a8d4dbb9dab9d4e9bc1cc85188124d1be487c1981443abbb99b7b892cfa74337f36c60ade12b855ef0414a0a60739489f47e151516fb1850800df2c1aec9d4b2c8a8cbdd306f6361ef6369797ee59b11e16f6b650ffbcf4ee05b6fbb19769b0d71ed9cb555eba55c35e86c27a4f482c58ccf033f57367fe741c1793d7155c7e00df35eec42d4dd09e551c760587b54a589b84bdb2ca4b974e64f6e3848a284423457a46c43b45bc634414832e76707e7ef673c5b6d03c1911e77c938b19a2fcf412f886576b60853ab3a29811217dfc9b11bdfc921165466158cfc8d6ec61bd1eacc783bddfcbd8673a5262e1295660c0fc84a530157c83764248171e838b7888495861516b5d5121a7c82a4292481a492e3fab2b6afd3e9f2b2b4c406a307dd45cfacbba95148ef10f03b19376ad5b51692129f603e484a876ab2a6088fd00390932dabad594c963580c87e12fa56e2574c485eb5650acf0134b4202e3d2e9ba9514343075ab2b3fb56d7ff5d4adb21802e6b3d5da6e35c575fd1823443241752b1b9400e847c69290aece75cd74ab1ba42059c62f2c26d5adaaa01093da235247305572aa6e5583145ceedfc7aed51332c6f5c7725fd7aa5b4561afaba72bf7e7b23f593a138e7362d96f953258e973cef9d54461b3bfee828c40d8e51bcc2e076b6ae21673784e3a279db3bb5bdac8137fe874119f8ddd34a334a374ce39a594b225f3f710b5c6cf8a8ead9c9823c7b03238e744d12addcf3b467fbb67ee208e5d522ec0c53bdc2d67f7c47244103fefb0744d29c9643ff225e3a0d245ccb2d0054a322df319ba0b0f7ed03c06274e507a285ae80225d535af944be7486ad43932b3818b38971e7d14bf3243978f576488c5a38f576418f30d144568a1aed239395877354f490c193c8a622f890443f3c8e6316da1a50ba0d84b08483a699e0e630c2d43b197349ad23c4ce60640310e6a1eaec2312a79d831e5259d9d20350f1b2581e123698434455629414b0f22871a442fe91a586148f374ac73a44b2259c5888f9a27be1aa83b66699569f4f2288cd1a3262308e1e19ec56548dbb4ad8291e306265572400516595e9a16369690a388275a9c41e6a5cdf09a7f3cbc365403100610228404fbf90e8a8618e28196213859a5ccc0243cfdaf27f45272993da5d29f2e3bb2b58aaa04f49139304f91687f02c9e569789544e13009d7f99cc6a1f4c2df838bcdf3b21c03f96046d04b4997471048718d1ecec892459797926c8b9f57e404c43dc678c3890d5e5c47311389522ac83091c39297120424c958168392f8c69156058923b07491b16f30b281478cc3cb1268bc944c2d373506250a30e2e58474495ddb5c82f73392dd1611cd37108992cfa2c66d44f19aa0e461c90b6678452f6bb0bfc0e135c118a41450fcb8f152c2e1e10d46315e5edc0463e02d51e811c54b09b7c61631749932eae0e1a5a4da404a4c7a1347b9d2c655cd94d16d8e28c888bd1a8c61f67871a76e82128929568c5e0df218272fcaa12c6aa29a9aae9229031c4144af06e50e5d5edc4ccfccf04c0b7f53f0347cf9644a9a4b11e965e4420b25622f259ce38441824a0845084989fa88050930c22270a846542340228e4a5badb5d6f9d2a54c29cd4da7134145d3c9cccc31c817e7b2372a1fb10451f952f556a9b4f90fe6014148ba90212f5d033760a021a9096119628bc432c4904449b983a2bff1a8b4554e7a4862eb84feea45faab7cb1ff0fb664ec8fcab5693e6e51851e4158fcfdf1f2db82a3d181bd130b7ba74d0e504c58516af3f4741714af09c610d90812238397920cca2b720262192fb003e9d5a00068787d61b927ecad568f96f4b8870e6688f28a486c5431a525432203e8f2ca91237e141d1b1c14dc94ce8bbdb553836607a72a4e2c19d82e0cd0c10e605eac245ed1ad1c81515184053011d2c0bca2571b4590cd135f569a7eb0b7be5c49a63f730f3b9dbd75be7b7acec9951699a82facbfe582c912414cfeea70983d2cf5f6ae765486a53a6cfb84c245113c0bd19374a055f04007ead66946ae7cb4b2a4e4c1e6d5c0cbece74b8fcdb90c67b6acc698a61b27533a41f91ad842a17ae9f9b9d307ecbdd1a9cb8ebb6157e6d4f9e94fd63ef91968240ac51ec2a7aec6062bbd9b81e5c1ca99ee06e0011042f8331e91e9bcc3d1c4b05281a5c29115b2db816ff0aed045f082e0579e11d9cae8ece9aacec3428303abf3aae08e6a4db7a263da74164a6d752b2f93c341bde92ad89ade9a2191570d7f7a58a75dd32b588a3fdfab3ae7a3dbc092d7225909fcb1afea371e11ed236b4553c3da391f7436354c103aef082b2f07a2db8fe14dc147e7007cccf87485fbb8930c3686301963f4211db9abb10e33c3fc98ec0bc272782d9d5bf326639d947eaa2c8b3d4234ade2f8a7aaaaaef67cb1f3e4c64e5b1c52805fdf5b7669758af16038ecea66d7755db3ec38d3f579a9d5aab2454a5d3d586457ec66ffe6c16216568a40368f48e749cf339d58c65609d16119db643a598b42cdccf408e1a24a4543a35ac57a42a558622c5319a90cf2a355ac92b48b20ca8233114ca95434e0aa032f4e11f9d947bf6f7edfd72cbfef8bb6831591af82a5bc22fccecd60b9d832d2cf3e5bf0325419d99e24d355d6860c1b4f5d65b16ca639ade264666ed94ea76579b0e8c472f8d59c5a1eacbb915af4d52aaa582c962b76fb1cde1450e959386699848bccb1f496d1f371a1487f9541a4175151948a5df2e3645752138148e768b0d16ff59070129f84d68ff404fab47e9cdddc519e4c77057f53f0338c47228864009fe404fa1d5619247e8c40228e04e24a7a58e951e3e4e51bf9a5247b552fa1e06896542e66cca80d5895311940e3642ea026874a0214d505c46566e69d28e9ec4827b33787977db2ab1ba2f1b25493d701cdce7ae1bc1ad412e7c6b6ba63563b839aadbe48ca19cd69738395cecccc1e10cc2c579146e559c131f16409274f86ba8fa10f133fc8205908cfd52983b4e64b319f847fb6af607a4ce34b617c2982f1a519c68e1e3f7ef11cc732f61237f89247c4f46fece0d778ce9b33bc489ec3494103a0c09fb3d94a19aba9d28e87ae876865c8ca7e8243d47906b7cff91a33d3b452ec0cb7f84325c6f824fcd1551e11d3c7fab2152310f9e0b394dceddc61c78c3b5df95e10f656391369545bd552199dab66c93229611fe68d4a9679c4892dd9bf1be664ac03817f23981234cfc79cf62c48617c9b01fe8d42d21b1281fc6446dd65601576c55ae5091c7b1a9a30042c610c1bbda60d7ba350498cbd5148f376135acbe4d5bcb4f90a4a8eaa336bd5108528f4dac22f96eab033bc3a3f65061c8d0cf14a77c7f02a89f2d11b2c89b1d2db632763b795bf73ce5983c54a8f4233643480762b31184023c402b4aee6c74a27a193525db6870fba99d85c75dd151a6f0b539783d7e5d079546a8953634375ab3aaa8d92a5bad51aaa8e2baa93a68b72d5d9fc4ce9216159342afb7deac26161828a4fc28c24c39611fee8e5e31aeff31c478e6dba3e2cb97ca90e1b67ca586db177d26824bc2d14a66f2fbf65a46544ca203eeddd3222f9e57f15e0d79460cd0d56829d13f656095a1fecaddb56ea2408a29eeb3a09d277817e126aea36995846cd747d9eeb24e871d1753ad85b25e8d1c0de2a416e0d7beb477025c6de29412b037babfc4b25c87d616f95d34baf7a956a8615647512bc5f27a3472e49e6cbb06544863eb1c8e77d9e9b2eff76d1e7393ed21df926d562355d9f6f99c0aefdadf5b948a35aa56650f664f23aaeb4d5c86a1961a5e09b4b397041a07c296ba25bce40a6a084a179349dc8a38529700e3b90a4fb256db5e739fc14c07e6b6463f30001020408fb6f1e917e203bd8e81708cb52974ad1146590e646a695d1aaa6cd19e54445d5b61258b7ad6ea5d2566b86382d5c67d47975dbea562a6d3508cfd4c4746ae264812caad6ba9538aeb4d532a899ba6d752b715c69ab566652b5d6adc4759ed771a5ad0ea554b5d6adc4759ec9e4755c69ab35a8686aad5b89eb3c93c9ebb8d2566ba059052678b02ee2c140e8f121ca673e3b88cf32c771350fbf32d7699ef9cabc478acf48f80c88bfd188559ef90acdc311cc67de4296cf80524e64142f9fa532a943e6924816f10e8d675c1e9586136c004184870d4b5ed75a608e2f6ebc7105194e90794180cc972bba60c38ba03b5e37129db08696294f10652183d0eb46a15896d174791a1a1a1a27e2c1683c95f29af2418b4f39cc83a5542a954aa552a9542a2fc183a9baf5ed5fbbf3f0ed154b0f3a7cbb035e1e2cf3ff60ca7fe0efc13ef0e1c3870f1f3e7cf8f01d94781f75e87ce6433c5856bbfd6bafad43986f6f80076b678007f3d173c3832a7fe30bf060376f48794bf3d6bae3f08ecaadbb9a27225917c23bda5bef59e2adfdc15a578177526e7d059bd9b6d6ed1047cc510324c230630a1a581d8298c38b1732d288c5acf3fc55bd411480383e73123c58f6a552fea5526f58f9948fe0c1527ee5f4e32fce0f217f85543049df6eadf8f6cf5d3a4960a6f876113c58cf57f9f02aaf2a3050bcca15e0c154dee3c16c2bcc936f398f076b551bff6cdc716cdc656363e3d5c68601e26dd8f8ec009ff98e07cbbabbdb13e0c1da8578309b9e9a3abec611e0c16aaaeabf1efeebff3ea0582cb6e4f57dff796d9e1666b0c186981e791821e5f501214750d2510d92f8e1e175ed7f1ed5f8cfcdf8ab1203041272fec6213ba0f8f6b623cb1d49dc51071e5be0d1c6b70f49aae2db0f4094dd90f93c3184184458c144872ad2785dd7671eb38c87cfdc95f8cc872cf121cc40841677cce1431347bc323b8cf8cc0de0c1b2231d0ff67579961c6b3ccb83783096184f4f4f815c3d639e92b0c3df68b442a728f516d6789aa2ad03a52a2732d0f89541320aefc42139b43c95f29dc3f377f358da25c81944d030870de0d8a38bd78b0e1cc61c21841851b478dd1b8946c092c40d5186e8a205caebc6a41f5f005105135b8ca414f1ba32d646132d42398c01f4859497153d08424c1c453060a283d795647eb5e5575e000fb66a1c743c0f201eacc1789a387a781affe1c168aa09b2e0210818f0e08e2737785dfb2a150eaff2da3c3e4de4d0430931bec072050f2f551c36bcca09e0c1549e82c3cba77c001e2c55e3557d76f399cfcc2d1d9fc121f459199f798e07cb9a94e1c48b25f0c84386d7b56fed0d6fafa081061d37c401744611afa1305fbc75970bc083d123a19f7162f4331e000f36130493fa27ff4e279d931062fc29756a1b4e27578177323ff90acd13854e7d9a272759fc0975ea1a4e31e9e4444f7df27af278ed9f8aaad4f1650c3d8a7838f9205144451241465e70a8e12483303050220807294abc6e4c22001a765429e3041d5ad278e9fc553d15c28da7943ad9e1a903e0b3d23954befdbbe33b081cbe1dc783b57f35f3103c5816c25b20d678eba107b3a0073b45a2477904e251ee1e0cf5c457edebcf57f7e6913157f3581d17d2f3c5571234507d85538d588068f2f58777e457973ff08e937ef2d56bf3c42d4ca8018519753089428c57dd610e28d44842862c7820c5eb5aa1fac3196fad83e0c1ec03d208a385115a86d0420d9a3d7dc1531318346600a587980f79bc280fd078ea1f78305af3272a7f721f1eec54eb10638a2e8684625dc27cd3f06d8514358ce49041076abc3a0e31df7ee3c1da332c3fd8f099b73c586613a57b93090dd31926cf643295611a80c98d37f934799d618a37b9c532c39837615962c69bdc45c59b4c58985879539321ded404e94d5ee3c14ca6f78e788fdff3dcd53c32c8f35c08ef94def3ea79e4f21e0efe76aa9b31fee298fefef8e6f23b41fec6223261bebfd8c38a322ff8f6cfcb08f1ed2e1e7cbb4e993cbeb1c4c2f8964106df46384f9bfced79ea918d29aa34010a428a26525ed74565a0460f3da8238c26902819304fbd5232673c759607a31ecceb29c0771eedf8ce693c58b7e33dc7e4397757f3e8e808e19d7ece7bde786e09b702c78579ce6bf3a0ccb0618a0e45e880c4965702bc34e1011571fcd461e575ed7352d4d0a58b23b660824417af1b859ef3d83c4884e0f2c4071ceed0c2e575235115cf0dcda185009ebaca83d12c7f55dfed168e6fa42cdf9e9af1605c444279b049c4aef6191ee9c98cd825b7b0868e8c4a2ba3d26ab5929e5b59955656a545d4226a11b5a4d0dfd66dddd61160feb65a45cfde8addd6cff36ddd56d0f36ddd5616039b2c0636365f9e6d6c6cc43cbb4df6c4267b62736de4177f6db4f86b73841c7f6d7a785d9ba267b789b1c76bf3f37c6dae4dd0f3b5b93676d4d851535393f45c93941426fba9f9a9c97e6a86f85bc33ffcadb93532fcada9297af69a187bbc353fcfb7e6d6043ddf9a5b43dbf8681bdf87f49cf4fc81f9be7c61a41e7f3f99f4f7dbc1df4f88e8f4ba5fd1f3eb7e63d4f0f7ebf21d3dfb17638ff7fb79bedffd829eef773f7a058b5ec162b1929e594242618c58462c23d611107f592cc45f16d15f9693bf2c56d1b3b36297f5f37c599715f47c5997459758d12556ab2f77b55a89795e8d89b28ab28ab2baabbb92e1ef4a6845b42a7af655ecae7e9eefeaae829eefeaaec8d090a1a1a1497aa619f31c8b85a1403446cf40341488e6e8d25c9a1afed240f94b43f4fc97a6e8d96962ecf1d2fc3c5f9a4b13f47c692e0d1c31081c65bad8ab3a7a56a9c43cabc620a990545289bf2a2e7f555cfc5535f15745a42a7a76558c3d5ed5cff3553979f6028f20c6b061c715afab0a7abeaaab9a38484d1ca45248a9a4e7d418a32f4661ba1ccda394d1f3518acb4da1f1377553a954d1b3a76237f5f37c533715f47c53375585ca0c95999999993b5365a6cacccc115094999999a269046a1a8142a150173583503308755147405150480cfd45a18a66133b9b586bc33c8b79b65c9e7fecb575fcb5d72241f4d7daa267b731f678edcff3b5d7063d5f7b2d1c27384ea7d349ccf3694c9ffad427c9c6dfd33dadf1f724f47c227a3e153dfb29c61eefe9e7f99eee29e8f99eee694b0cb2a58cc96412f3ecd734868ba94d6d3a028a623afa6b227afe6b2a72c273c2f3bca4676f8a37c513f2843c21ef7ad7e31afe7a48bcf1d7f38a9edd8bb1c7ebfd3c5fef7a41cfd7bb5e95e7265d37e93aa4e7a4effae727ccb393cee8d949d74ebadb8df1b7eb90a0e36fd7153d7b17638fb7fb79bedded829e6f773b343834388e4b7ae68eb8230e8943e290b8a319fe723289bfdce58438a2672ec61e2ff7f37cb9cb053d5fee724ca5c4544aa552955295125189a8744b4739fc2d4529ddf0b74434f3b754f47c4bb714c4396c9cc3b66d7763a08d81360eda3868e3a0ed08077f371afcdda4fcddb6ade8d9b7187bbcdbcff3ddee16f47cb7bbe51183e451e6b97ea955cc731dc339d26f1d634cedc23afcadccc3df7aeb127f2b91cf0b5eb7c6d8e3ad3fcfb7de1af47cebad38d070a069ac196946da9176a41d6960fcd5cafcd56ef8ab695ad1b36b31f678b59fe7ab5d2de8f96a575b220659a24c96253d67639ea3645fb23055b22a5995ec888ebf191937cbb2187bbcd9cff3cd6e16f47cb39b5579062206914094e942294d7aa64e287bbc14a88cbf34ca127fa91025a245cf4e63ecf1d29fe74b2f0d7abef45217c42064cacc39c53ccf315c3e76742750117fa7117fe7167f27d1f3df59f4ec33c61eeffc79bef3cea0e73befac628218048e325d5e0da6d96f8f69a18d6e73e9ee82ff76118cc960e1cb4897c73c7b94441c46036cc4e5f9f211901844fa95641e88bc0c148585caf8cb445cf4ec1c638f31b214f372cc4b96ee8238028d41a4d3971eaf8cb1c72b839eaf74f2ecf1ca2acffc5716051dfd9544570a0d310f3804ccb636cfd730c4d002f30d2fb33cbb09bcc30e0166ffd8e3f567d7618f2a32f666555eba2a0f8b858c1a6cc0cfdc715c99eb08a999c76b3fdb82e5359f9a5b0fa6d5ea270f56a5c983653d355ad84b935e7acd959930eca5605efaea0b7b6917168ba73e29a5d47528a55cf48087cf807ce69e07cbbed86bde7930cd83d11e1a1f6c4dcc5e1a7be9df1ef652202fb8f89ef96efbdd40af761d21b5db8b1f3e43c0675ef260598d9b07a33d13e94e242dba45f8abeaa206e0b7d7c6d2450ebe5dfb6ca566a8e4abd72a9ba064aa66200000007315002028140c898522b15818269258fc140010819442645e1d09e42c0b52c818620851040000004064004486682b0037bcbfbb221760e15b8ee8a77bd05892fdf50a3f8815e7873e981443f4b80e312c6e156547cf93fd633c1c522063190b95cc4448a4af6b4ae6807b87561413cda0c817ddc3e5c5f549d3e37def5291b8ffc2e0b1c3164cafe5476da5f9b21825f3818b16155708f7a506669c12fe21a87b63d211461935bf94d78808fdbb6e61d09b1e2276fa15c8cdae0b575195e4ef36d25171214cf0d74df6377ee95e946b2e6af66104bd362b3152dd8f69973f7388bc93e065996823dd5dc76858180536bd950bb2360d75bc41877f4a66779b62b544e1dd6387551456497e55a09e5148cb2442ae3662b97d8a5cdc14f1b633c69ad4dfd8e14a8b9193b436ba20d94be37aec7d306fce8d2f492b7dafd97514ee051b314d4eaad87e418c197f47861918bc1fb8faddc5e082d4702d80554dac52194525d8847bec53afd9b2cfeb02237019b0287d5882478cb227a7562b79ccc7aadce81d90a343af59c7c992bc52af109b14363a9057534c29d594571befd1afed68419c15a027d23bba7a604e9a8dc5e911baf8138c71b778411b836dd8ead9674d2345d4d275abe5f286d9a830bf1306db69cc0d3d4ab88d1252cc6423171593edf91b1cd4320a69f8a124716bc9e2b89a8a854356c8f8e3c8f11cce10fad16d598772a959753f6cef8c10385ba3c23c1eeb2077888b450b67e4572f6ead5466b491da7556a092ad0e40e88c924addcfd1d9d9a3ed3c4697be0a9bdac1ea3c8606766e6eb1a443c2264a2662258d720a3155187879beb69fdb0821348872b742d4ac79d139c2d8196285f851fb9e765c2b200fd086cd7561aaacdda357fb4934e48fe6859992b4d4239ad6b64fc009f373a8948b5a58c0782f855417cc5c3faa0de1b60b551b3a43f8988b774a2dcc15d17a55f46c01b52ab7b5b614fd2613bb199dd24074f7c96cf158c20d56f682ddaba40df07ac9002e0bfb85377ac5f3be82b63c06f01c6f9290306c1a882a6f9c98c020ad1cc70c36b8d9370848aa871d1f74fc4c4918c53065c86819f52cb4a6cb3e508ea6ed9c09fb6414eac519fb303a0f70f2ddfc26a8b32ed5fe5bd353e7d15e0c7c6cd4dee6b53786eef4b6c6074540bac8977849078a59ab9485cb7c284f46475a069509fec0ba930e63ad6be21233a794d5d04674608696af7cb239a3b3458b5df0f1aada131266de0c804739926754ab17b9413d3b03291166fe9f6133b6cb5439d860a0756432f237e5ea94ae5ebe66e463e47d97c9dfbbb5fbaf52044d8328ec5bd8fcba30e6d390402f7e613a472b913bb9a24979a0b56b0dc09c4df8a07033df1a60ae8303a1390644d0595ccaba7ebe0d3657f48101a6a6dc71b25c15c04aa52f8585d5acc29db665907a89e47e53e52d570db7e83848c6ebc87bdce96f954c57adaa2f8972288eaca72cf00fe17eaac4ec5eadc07594f0067f3b911ae9910f6be783bcabe0fd878b753f01808760bad394dca4f6fca880dc4caf2e931f9134e51c0eaef24613af7f950e11b97168867d1a486584da510607a019ceec053f82bfa5772908c0dc19c9c28f2f671ada3089f364deb2e2893229f59119afbc8a93980819ff3fa555ac51287fa7e141f0770b3d5cf264244cb4dc8834659d27fe1257b140bfa5a44233ecc27626ebdf2d9ad98d64ef6d7737c93144a9a1aedb5c96658a6dfe96df81c6989279a852cb7850a235f80e7827bae6ef21787c9ef10cce3605f6c61f22b98970220ec6718a71df191a1b564447d1a3e197b3cd858b080b51b5ab431bad4c22d8f34472f84ad06414e95da76f70733c13187fbf1178ebd840a36bdc74c99d3178e807c9f981a44404f8109cc1c57f1eb6fc93e61fe57a71b11541ef6b034cb705cbe0ac306548318001d0b155e33011406d4c450efdb0705fcacdfa1f008db9210228801e1bcc5ad01619eeee78e644c402d8329cc2bab0f7547c62bf22844247af0a353dfe79800be7e2ab3a854e9c24e1b90409f9c57d850ee7ccb0a4419c9eb42c2a702608b63713804e2548bb8af39b0e82f901e55338de3159844f610ed769dff25c9cf6c2c881dbfeed4af20883905d3f2b25b591e8f47a495f9ed97c024863f0e7e3ddb1aa88771cf8845e8e3e0aa79606683e4a40c3791741ad1b81799709f9bef0c4aa5b141380256bad146b117652999911426b2ca6cc6ea55a2f205ca759bea4dfc9c60d0929043ac07d372f324e72fb1e1cf0ac030f159d75a0c3db080555ebe48d31ad0506fcfb12419000edf89dea0aec3f807afb08e1c41a9388b168fdf15a7f6dfe6d5b7d43af9ae051552a9cd532969b526148e9600105070e1614c39398eb64fa9ff414f82a7dfafefe04ea1f9acfc0fa1e4797a26d24dec009edd64c9c70d40338377d767f138a717f47fa5904e39ea8239f1266acf129a4c9134b05ed0c128986d780ed03ab04c5f9cbb8e46589add2b0cf4d99676893438a5f43ef109d98acb6c9e30ff3897b7e9451de120e29c202288670c8092f460004d3c408ae76a132c61162a253f37b77c30904cb86787de7ba8ef9a3e3bcabe0ce4b0afbc3efd2d28fc1ff3d16031f43e9906e1dda7f5745768f4136571593d309433f554c35d018a3e55c8931527d42ba6610b20a06170517fe3a5f6e2ac7a35f748b7b260073bffa9eeebf749cba595187abf1fe767acf7572511eac8d7c43328acc4443d10e674a8be96ea600834b7412170de732dbd6819e7be841bc2715788f707290fbda4edbd533cb612fca0cc0c9683cce1089934013304f31fbc31a5d431b0382c4df39049f21967be7a8127232d4fa6ca1d464a867b748faf3c443ff669ac00c7d399ee5473440172cb2f8dac97bbb0edeb294bc7b60fcba1478427a703e380766cb1fc1a27761e5a5b5602eb7f94dc84fe47c75fbb2b77c34f95333d5ee2d21c94b73353f662a769dc415f1fec3987dbec9ee0e2380e01d02435a2a28594b28213b40c15a07faa0dc12b50e4f21af3ba74076abae3b2b5a60dfa32a813fe73cd716fe3000f7dc961d6f408443d84ce1704a2b7e8c7d2484fad5bb2fdae7cc43d843d0049587d060c294a13e224c7429c32549c4d8824464ac02df5427e7629ec073f3e31e19fdc7100fcd6d75c942d8ccb6cebec5dab92f1093b71cc65c8a0b6a640fbd6821ad2b3cb92a183ea6eccffe847d5cceded38e438af292eac8deb393fad09b751c7fd447f1ba9aafe94aa1a86a7e21164b8e5928531386610d1286d48877bc2b3605964bf73bf1208e712d1b9e1868aa43cd76a32c33abf2ee6ab5b3ceaa6895441332d354e74762894581bf8f64df6621a7cb4e15720064a3d8665ec84a5f5c36a07745d5ec2fbd350bee274d16e75873f0e8890a17984ab1b7bcf56c78d8e7f5295d059a14bf3b863384397d77d66c54f45ccc34450f9969c9990bb6658266d7fc40862726393c2509dff7f00299da8435a903ce2134c3fdb1a1c1d97252e9eb2f610e4fe7eb35e9302cff7c45415fd8aa1dbc4776a0512c193a3ac3999a2451ffaf0b1fe0248df31671b6096d433e86af8e88cef898e0f5f48d409c83d4f44df1fe483fef47e8e225872409d46a03ef172470082204248f84b5bfd8b87e4cb28ae04ead16bbd54e4f0a4821ec9bd47ff39fa13c8a3f4ae8b4cef1c497f2754d2cc502f2f59ada458a1552b348f1e2325fa4a859649b3de76878f1ccc15e7815abe163f7ea57b9c1ada4807e64c12c2bdc5849b3f1a7012b1665b9a7817d01b14331a3083b04e1b0ae32c222a81132caf85a4bfed6c18f575633df81fc4d8313d504d9fe93814fbd4324ba97bea85ca22b973163fb5dc0c1bb7f722b8aac83b2c909919e22858e09917881a7448244370a9c1215deb3a8153a1dca8fc7b6b20d2d4d94c2f871acab77536590a28f7ee48a43d0aecbdb8cd11066b631f6a4112d87dfa6d45368e5c78f31b471a2207c3f22ffa120511fb27344fc5c1ab1738a5d1f8d497c20c12a59f2d442da355f1bc7bcd8a29b91fd217aa39f876e5011cefb52f5c781a2908c5d92f7f9a1fca16e342e38c781ca9abb27b31f5a21ee9ed26a7f9e16cbe486923fcf21c7b9ff4c330c1e93c8a24d872cc68d6dce9aba9866521f347abc1131e4543b73dfd41f2b24126b0d2c0d086c3210ef62bbfbe07e2aff22a708c28431625a1f177c4e7ac29d6cc83082dbb45f29d4c9b1807a6b719015f43022655dd8cedbe0149d7b6436fcd08ca8ca045db06c1a51558ba18b6e818a0381e463023a638e869e00cf15c46a5c6ec23752fde9f448c4c424503b6fee4195cdbb74041b7a78239d13db8371f8d7980b6c0e188830e2a245289b85c4514316a1e644934a938e482a8e21fc14d8679d82a380b16d3fe31dce1506731de41440bf8bb032968b80076b3cf8e460d828794bd23c7522dc057d75ef6e30c048360b8be824ae597e3ada6014fd256d00c4c01a1468ccb2c209a65eb2c494482285ec6e8b29e909a0870fc8167ac962673813d0133a40b4aaf97f57099c998c48471cfe89625774ebb51a5883d3902f69bfe427505503fa047046c93728823859a7f43863a47d1b52af32a30f5a3b895aabb4369a49167275c572686430eb12bda3740f74390298a6e44fddf8b22b1be7fbf43f554f799f6345bb2509d245b0b9c59bd29576690492019383efafd46dd5f4482b69a142092d29116eab9def133d833b5189e6f6e4be3c382fc2b2bddd8872530f29eb15fc51f6e0da6e56489c178788888376030d0c2389ad16e25f66b56363bfe5f56aad479a2284f11c528e7f2ed7c60ea1e30baf34681eac7cc118df1663ba3dd5f387c27cee9b0a4bdf95cbf697c7ea97d0cccb037d8ae1541c1df43ebe4e89ed2d7d98e54433f3e9c899f0db4888ca048a9960306d64e694bf7b7d994a27bb84c2118a2d6b72f7a8942ae8a28095f0f2b02a68252a5a4eea1d5f421c8e83c94b8b80b8c2c8991fda1b7a266842723300851db47ccb718c4f9eafb4d6c393a4ee2ef508e5909bf47bed6e80dd33b5f885e8dd76bd428e01c81620f4758842f1eb14160cb6a26ccc8dc001caa3122141005f5f5fe7f854c042d1d647dce0489b9e5bf07d945cfc9648f508d460d5c64e5f941e1174208378500c18ece3ba428ab07f16e88a5488266eb6005c37d06e2572e0e1bee67c448882f5f444e7585e74b8dfb4f6886683c6011307666245b95ce628749113c40d819adc61a2476b507dc9a62443f20d15e4ba39bdc704b9a4140088a73d96e828ba696d965294195700c6bff5c99bd00be91e29968ab69414a5227b2e186a897c278446ef52ad51bf11402b73611a6bba6ee65dcd44dca0bdd1a071c0e29882da9023be641288220b427a2c2ce5e4bd873ec2c2a52661081867ec9fe0d2d829430c92f9c0fda89d4020e077a6fcbc9db7f5878f6f770904f3e78ab75987361eb04af62d30bf9c821af5b7e034eaa69d342a73c8580cb160224984a379f6c123d75696aae7ccd5d4cbfc8b97f2fc562b55fccdba3a940edf5602c0e8b772467363fefff55f602bf582ae2a7ac9f97338ed44fdcfb16029a0a03669181c2ff4565466a242ecf223e5f144b7145e2df9622688b37e343ee8c40038b7664cbe34e180f0cacb89a19304a9289aa0ddbf500a938b32951f6b137c3a9c72896edaae8f0bf753ebf9bd0ca0c23e5f621462fe638c93acdd309ad44cb462bf4aa105a3424d99d859b47577b9baadc9a7f4e7ffb798ec5e21df509a55a3786d846f4719d9e8c3067bc2bb9ae46bfa673d121fca16c97d624359009e28c41d4c3aa21abbb6cca43ca4821fa4387f28427142f23ec5d0e61096097d5dffe84d9cfe2e803f635e801d80e2804e0b835e3e083d3b87d1c1223acf275f7ac3e42e01a2a8331f86db93a7f0f0a73ae14dd2da0242d43ab217613cd7f0c79cbffd50b5efe706129d3427565c76196b284e6da8dbedbd4d0f44187a5cb758e0c40088e7e6958cddeb2e707eb5f34199b3a53fdce07fe131bdd1fa3ff50fd93707c205c4c6c1e71064b1df184e0145f7cb82297251298e317dadd27f8b00023d3c41f025384106557ae3e517a514bd3ba0b201271b034f0a0238887d23898dee96c050ff0e5d5a0a0900491651dae1ecfc0c156be3d6e961e092c5d1a288da519c3cbc3a893e878994c68cc430a69744f4c6accd78f4d6229d2322401ba4a51d5538ebef57f5e557a1173a94fd4523fd4a21d5f5aac3edd12521fbed599bc894ea689ac59740108cba29628ba0bddd31f0c21d8c209ffa3f9e07918b210e3245fa2e01579fab605c539d533f8a12ec34b0336842ed45a2f8dead191505fcb1a049f8d3c9983c894c5b8b0c0373b767262ce448bc19e45c49f961f235dd3652ca4a6de81fb758fba2daea178e8cbffe87cca9c5d2f935e1b77f1744675c1723b79cea5605a16d1e4fc499a801320231715393de37eab9613cb1ae2dd5e030e5818e6eb32e4c2b19d677bfc1920f113042bb444701bf044159cd97980e8a08d85351d583d06159f6b02bd7f689aafcd2fb72cc98382f5d9fd49699f3b4230c934260d6629f473fa65d307f9eda841c2bb7b78ec90b5f126815bbe22c18e68173dff470c0a314237789f55de8d3995506f23b1e4a6fe83add9fca79713959c27c8424ff63faf3849d3c3c51be2e1de923fde2bac14d0bd5bef543ade8166306f1bad2667a78d54bd5a17e17c4dd94d2c3ea4f9e16611079166594451a7033280dcf26d2da99dc373c5a86bc1d3c537476edec5986d196ab17231e140a0a5c280a39c94b9e9b0d1a5f4d455e0e561cba512aa0e56e442d058ea03bca4100f8d998eda72ddc1fe3b42f6643445fefbba1097f57704bb5c24cf947b1e96b2afa87b76c286af37de16ed3743aaf15661730940be9641d03eda6ace20858e9f6e7e10688daced35f84da99131a4c95fa42177bf113261ab4ba5cde00e5ae328a0f0a7dc3e734ca5109689a9120241c126b9362004fa0f7c5016bd3409801a3b1bb0765b43f964f8ce2dcb8c7cb28c1bf64300c6b9af88f29515f1f8c914a8c62738a6f0e6a652ff73ad868873cdb96bbd4dd188e8c597e35cee4e17f7fec2d9338828fa467c975c64a6d0fda681f8f42779c6d1b65f01b23c4d7c001a6c8a9752c81e4eb9550064128c6464b7b23724911cb942746e12db5ab188f25a5afeec1aad4d651c135ab7aab71b0534a792199294ec18af700c3bc82bee52fae8dd6bfe35f78187ced3c15ce1c2e97933425a1511f4575d573057153b60a38e1fddfae641e5ef052ba13121291b763c5bbb7277617f6377679356a1602977c158926a4cbf5757449e917935c79e3550705ae08919b7801ae533ae1fba0492b2d413a53361141a99cfd4e03cfd22dafd2c7b9b9ab0b9f21dfe6d120bceecec7a20933391a35731b9ed396dde32493d31f78f774ef7a68d8d5a99d9cb1b6847cd2591ad74d03f1c2297f345055a46feb50a747016dc03b00f3ae33272c0144f9cb734c204fbe45e3bb4ff3e58b0f3f48f39fd8e51cf80710e2418bd1305c92bd45f19283056b391ff82a4ae7109654ed2141841cbf1d1e68545534a432e43e6bb876ae53f3d271d88071998fcdf27fd395821d3c0126c1e8113cbd2a53e7f661644418d182f42d26fed274373c8f9b7e779d429cf65ad65ef1025a1fd458583c0dcb2e71b52c717df5c716ad029a6281654517d9e62c41f7d8ee938ad1bb013c97d190c2429c6dd5e46e44bba1c12c183df44764b7d7e82a3d8eae3aa6d6f0b6ce99fb49cc176ca786a862ecdf28046e765b924b63c49e096ef48d6460745801e4dc7f58a394c092c0d0e619a04905cf8611688dde80f1ff974e00da2b0c4a590a74f4320fb8f9a3017aa4b3e4c006f0fdbd06c8ba42bd1109081a03ecc2a6fcb9b1023d04e2507f71a69c22159d037b992bfbf85bb91c7b311272e9a349597b7cdd58ffce4f215fc790546d05096e36f777a956536be0b964901643b1f26e0a7369df013729ffb04ca345ae55dcd99fafbd278adebb616de727f1eb274363172ea6c194ab0994c75598996d1e58116bb1308d78988dc781275b3a786f4c528155ab0436cb714f7c0cac76813564af76442cde89346c7d2197552ab95a09ad81e9d97acca25317d0fb3f7de6c36177ffa856c1ffa52001ef6baafb743fd5beff580e9e1d48e980b24df6b2278f7ac1489239fcb54cda2e2641ecafc2cbce2dbc60f7d762413b3688c4802c7da0b824879d6818ecb57b23b33d539095775c81ec9b1d8e4338d55eaebda91b001c5b10dd81cbc525714ebcc0a18686ece1d5024d41c55b16e6559bc30a90aee1b62588ec6f4fd9a50c903ff41e49e4a934152d41c54f36bfcf995e70a782b92739a2cd468442aef421dce400058e8bc7145cdbca975c1049069486e6d4d27432fa5cd6cea8cbc6a04c87c0d2b239635736a052ee82425e9dca061185050f1f44b5269b9c18269b6d00731237dadc4638a30d556e9ba992ac0e300bd4090b1a242361a7f146f8f0a2411f8e3ef73191dfc339272b30eae789ccd844355cb0598808949302fb8ced23e78c7998d89fcdc20fbfe88276485e30a4c4e5c71f13d10d8fff8dd443369746dfa9bb52da97f5069c787e64f8cb657352ab781814c58e37c4fc3ef63f588065534cda0c7c746f066c7cd9845e3416442de3b63a6d3d5ab55c3415f0b950ad7321933894db390de3c62a59f2a7b1e110e7f9557248c9a5fe14ff820d41d2c071094f92863c74387ac6a302865e8f9e4efafcd5b5ef3043776aa84ef9bc3354fb65af485cd490cbf34067a91eaa83bad6cb2bbbbd6e94da2cc409d819ddda9418f2137234af1f9be0508da7b4f9f0f02794859edff0c4a13e0e39e50511022d4b5ccd50b697826a2c8044ccfe9f0b5aa9312b2927cd05969c91ad246a0e4094674a54c069e197256cfea3dd3610b70736055d1b687f1bbf329c11102998cb06e9ad76f87386ff8c3426690747e5ea052d7e921004069cf403f65c905311a9860434cd60d62f3bcad9f2eeb4bdafb5b547c63a51802f1ebccf74c043ce1110900ca8889d7f540da7cb3a835dd5890a74fbb07924900e5eb480274d0571055fe2144c6841864abb1e159ddd2a88315a8d3b226485ebced309d900384289cd72753c1baa1ceedb5a6ece7da48632a7f3388c6bc34a8e8516128101f09828c0484a59d21be8d941c70d78229369ae063827b15c80f0a49656f3b38649ca138c532ee1fe6b4ec384381a0a86bd60cd98c1c26b7d22fea24e45220f9a8ec44a027f43bd066a18f4ce212d825cf5d78688b8c6950e382a4ad34843ddedca197669ace321093a22b3c6603d231972223bfc34987c829e27415b8acd419ea89831bc07313bd15b591982daa40911754868ca632eef6aa597aed138aeb1280cbed0147a5b5714fc3c44c43144ab7ae93e9138fdbe7ca6162ca6de320cfa5dd88a1a60174c7d162b7105cc7d11b1f253559b54204312c169e95e2079576ff651dce12ac4fed843d734f7f94348a0701e0720ebd3e8d6389ddee627fadf8d388f05dd04be98afb9f339ff3770b3f1723ed910d28108e0365d199fc79324691f37b97d0ad200760ea195dba35331e99566afa20a975a0c17fc6581eaa50b06ceac0c3ef3af95900bd5689d3a2cc2a117a3a036010e34678a951f23c77ac016f71e5b2e3a3e99eda3a45bbdab1b0e4d89063f9786c0a8bd76969111ae2a6aecc190f8d42320504c6425bfd9de27f0ef80ad69815b56b7fd0297815a9169311be57cbbb584b22e51e4eed5a124650f5b0f0d9fd0a4c94b9eec1e95e0991b6f9a3e8f2ca87e53e3e3af83ed8ceee599adee73243584961f7be3a9558f5f1ecd5425d64f048da298e0e69a1068c0f4fcc343d426aaa9b4405188646b387b652067a7a552180c4ca5188b01dcea52ac3daf4e7d2f5c41556f8fff8af3bd7ad98215c8c8a90b3179f4b7b02b0b345e5bb55a3129ffeefe8230bb975b7cf8e74a51d67e4f24b8fea8857771778472d6865c511bf12e102d35e493db0d81d8ec85389f470c8a76fd186eab1e744416b7aff85fd8c0d6415668c216be506d2841e45992e7eeeaf05fbd401d558b5d36a798ca29ce49e87b730aaaa0021d60a914eafd162a668232ab4cb9754e9340544dbe06842464676f14f71baceee558d42546b28918b96fdbfa02513a043549c22e9e0f381c79442e2d21978049490896e7975368e1edd09d477fcf589edd80f0154a54fbaa3c22467491f1e2b946b9b21a07f4deb06e65c95103c0643680fb9225a810c894ab30877a2cabe394246b06e434a09b20eb2bb7c8b891189be084be06fa3d7cf41536870ec583db44dbc24d3179265e69c98b05b79a75d72904e93ebd737ff0c5a0ee360ed4c6c674dd546a2b38aa858ddac17b575cb1c26f217ee1818ea7faed5539af91c24e9c3abedd48ec47ca87efcabc9ecdcfa7ba416e40707f61554d4a42d96c4c88aa11635b87de9a5b1bd633a85aef9463b2674606674785b28ec0714eaf37a847d3f2de42cc1ac85892dd62793b920b68033107b2595ab0541a3bac89752e28bf3bc128d0aa6a799ec0c20b787e39ec474f31d5a762032f9679ea138011d3f829aa1c11e121a5d7a610136fc620485de6f1e735f8776bdc7c3e1cebddb1e5dac3a9c4c5c615a8458ac16da438fbc978a8818ba2fd16378d46d42f70ebd2b0cce7686806b136f0b5ff33f89beb1374ab073f4256274fce7f9920b1d55196fc87d6133d8e8a3d6d1d057e7703b71a1c6a4516305d8a708bf5aed8063c4b7f47e8a243e237c95ea5c876689cdbaa90197e8d27d659e3647534889b3fd3f0448c1d2e0af463396ac3baa30fe105b7880b09d299cba073546ce0a9f1361d738c168667f607280483ae91448b44b61705fd257648d214448e9002cb5ab341a4cc35557a99dc6a69e938349154c3ed47ee3731768c3dc1ae08f80e277b67ec65dfef6c5197fdd8ef14c85bf69043b92f5ee4aa569bb9b7cfd9f9ae26a2ba39ce33e4813e081356189908537df9623387b4615f56da02b54a0d9381614838d294294a1a55ce8fd30d3b0cfe5e46c1112e6633cbc415997c751b070aab729d79228c3af0a29c882db093dbab76cd414e82a616f3fc0011eed2bfc2b09fbe6f0f5e9d532b1d65357cea19fdddfc130aa633b8b9daa88ceb53ca2d21b701119b73b5b7be3817119b47cd9332fc8e82ae830078362ed9f2b689b4b7d13a656cf128f21c5fe611d01ec00944cc1aeee4648c89876ca8ba7f38d1667fd81ee73988296496640ca13860041d7df1b2c2c6cd789db2a9e820d70cea5cf88759378762ea2bcaa30e3614fc71bd86119af9e53972638f363cf2aab97f63c5e951139a342f4f188db64e138fd7b5dc1a91a06dd2356f9a4efb05340f77cebb7cb61eaf47bf94b020642a5b3a240771e81b5a71b7bc86ec0dcb90377694449e6cc0370fa853ec13f0aab9e9423c47c1b5fdd6501afa175ae4381a7b858b2785a063fb8a62910ad875c47af91b566f5ec87dd574813f66f9eed98ea07c54704102e5bb2d33d3ecd8cc6bb1e8bea7c9679c73536b13d9fa58590ff440e971589a3f69ecbe683d1e6dfb7a68a903441127e1c3512d7f823edacad1e549a5e56cc921ab0072fed76cecabcec146bfb12ac762e0912dc92d8b298bfa12810671ae663d2bf2148d4492196d30669db5f64620ef0af09f3ce9b5b17c2863174da50a9a322fab02144be8570c4215e033765590c625f82a2e0dec58dbd1199b20b8f16249fd81049057fe06619e0bf46e74dea637283632d7a607d4343269d3bb730964501e79c21c69366353c6ecdc1f81d2265336bcfc8f9d806eac3d83c66a79eee23775d39f08bb55248ef3a7885a5b1944298dec09f0b6cc44f99b75c0d4d3cece24597683b124e4d08b9640e35305855af0b3960b9c4d2f4b75c107de91a6a0e0313b68dccbff576c94e6dd53fade630f80fcfbdd04af5723afd225b1b0c56438cf5b969ac0ecc9f76c8c5d3a67486651ff891e341b45aadb1ba85b2fb86ad681f30467d764a77d9d8fb352a58db28f057ff5fe994f5a491e8f190827e1e7110a39de2cdcfbb5e947c0a444b91476d9938633579cc0c7287b9de5b68150b0a15a8a91c51641e1843d9f19a11ca983d3efc783e5b88e35e84aeadcce532a805f4e6e1e183e2c25dc83f6a079fdeb6ebd0a206b182a8fb96509b42ab4c06d029e6f3c82622562c14cdbaadfc01654366e5aa906dcc6344bcfa1278bb9c3fc0166d07915fa1d44c640255c3f82bb831ec88ba97810e1c3ea69459f8facd3c135dcfec9c2c69b101ed0c4a35f6b06060ad4a9f65611d5d8bc624a50e9623cbe3ba21147a59e1a322ec6e1618f63dbf7ed47d1d46c30a767d08c90582a8fb3d26f401283811d86ce92ba294ef75035aa16574ed8e07671e993e4d9eb190d9c9103241870e2b88026c8b422e9d55177ed7432214354c280f2ef1430b4c0be7b5a02631bb6b10c43112658377a26281f450c8fb6720f5a58f2e9b82b74161c993551419e922f5fba9f2597abe97c247010af7afa5993280303f9690f8da896d97e943de21fe0cf37dd357480efe323a7978b35f56fd0dc277cf868f41e9d5958186a22860e01a35eca5c40c4ba414cda21cbcd832dc9e99ed38366cf6c5b6a19962b9adc3b3c978ebc448782d8b56420d824b512de0fc034c551c504706cb78dc03ce2d20f85492f4021e7f7120414da2cdda9735ca70e3973e6e32001644540bf530bfe7fa9175621c0eb1ba626bf0c65ce475be08b7f63913c050bcc513fb3b9ec21a3a128719dc38d42dff04ef104540ff11eb4dd588aba9f93cb7059a4e9b44e5f1739e1738651d499dfbd8c00ca4bf3d7a95840264100f8a1292a2c076feca89f09cf752ae2ccecc15de2d3590da83cc1912ec1f4a24e593e25cb9b9a54cbc56353a8b8e316ca1d443e0ad42daf4ca6c80c0b27ba3424c917bf57c7faf50f533f5ac8f9f6d5d939c6a1bebaeb2448e88eac3bebad4c68718b1a2edce3c615ee0625ddf0a799428efb8f298e807af5af535f5d751eae754b9fc6087d6b3d34d2b47df7de678ffdf72d4875bdd139d6ffdca2900fd7ab4368d9a592d6dd450a6fff04f132cb265bd932232477938bde187b6afc0ccaf43df6db6feffdfb2c54efbe78b66eca00f3f7ee4b99620f6ce6be134dff11b7bad6af73286f080428a52f6d94cc3e768ca70a8138857570f74a3ddd2c232f4db47d5975c65a53d45592335c8e20b6e60c795939a4b2156969ebb779b2ea1bcc2b97e41ca07380e925be27c5a9bf94f98e5d63de4b6f39c5c2ee310c0c15dbdcd41d5220f816c02ed453f15ed4db2226f87c114e5d738001e06b41b51d93b34f5a484a6a20952264272a7057d58baa17b24686548041db48f1ccf43043bfe7e858a685a955a56731f76c0533ffd1bbc46b0ef8803e290f257d0a481c1a3f7260d0b84d4bc68f2f369aa53d94330e86f822312489230b837be3a20c3c68b63305d72c6c3246ac90489958452dad496aea2a655b8071cf3f9a11af0e16f5b808da787a457c949505f65c5a4438a41bc2456eb09ff133b4345ecedb93ec0b20edeace0cddb46da75430ca7969d4120cde9d1d2be3f825058b23a9649a837d1b78a2a87d3049cd02cdce7ffd29fe4c2aeb3ac8ceaefe7787d48749f4f009fc09ceec796c9f83d2442b62142300dd3b7f0418ae128216913e3aee94bd37390234cf963b44cf30c6c8ad46427bcad7e650591f21f526ea98ded5b5f32ad9d42604b408cb66ff3adcbb73c84e60af6148094649701163f116943b48b4bbb18a8ff65c7a89afae902fe47cc1c0410d092dbff3da144197b221115f21a06f710aa31af01948349fe66fc80572bb55858f65c8c9dc22f5d6b8e1dcec7a4dd0d7155c56baa2ecaa32482fad3c4d48b85bd071b998fd52c02bf46d75ae4b0add770eac562288d5e65341b0bc627e4fd15a37b248f64b3483deaf1b9cb6df527bdc8a3d6f2c6ddf25ec15dc90d35be02dc5be91341135b1a41d3390ce26a95f9798152b320a44b22be9e74b9ae95b27edf82a581c2582bd153a24322815f981b85c717e4b3504cb10e106be2ebe798936f56dbaf5ef29e8ed8a967b4ad7979b1a8f6cc7bc08b16711c3f1d30b40394b44676517d8b493f5c64e182284a851b3004bda3f226816e0e01d007d98b2f81f051835e3943f02baca8f02d484dc33030715103d75920449e50bba4c7939e62c48905495a2a64685165344c07445742aa295ec049f1221d1d086869d185bb21587d8770c249b1adafafc76bf3f992003fb97825eb791f36c2ff7acb4ab5e672e33ae041ce7011a26297312beee9399e5a5351c3a76866d65dc3f92d7e73e81575e512dcdd3b789b4eb36264edaf568d69ad1ecbb983446f1a152b1e63437006189cf70c8fb9a48d209cc6a9ab09beb80ffd1715e26549a9328c802939650ef5caa316ef2e88b6968b814ea8e69a53e5308993a22a7c8f5504743a3606a05669dd14dfa7a4fa2018e975661302f02a986fcb3c084fa65bb4cead3362d1390cf6362b5546d3d67e1cef1f1a284a0ccc05dd4cbaaf80caa243d7cbcc30a6773da0c2822f9385a9b6eda6b64f54e8e006a3cfffbce1114122c61b61939610a59f59233d796bc572b955ca363340b53f3b548b55d105d02e2841b4e38e3764f41f0f10c45b7e4b621e449534a4fff92082b38d8e21c88cd9e963cd0ff12ed1ba88dcf172c90e2e67b6f04681a672c805f4082e140bc48993e2a9779b8ef8c5f4f0bf8ce98b3d7641af25ef887678882518e52ef83a94ad7983f5cf24b3d11b35426ba9e99cca4f92e8abdbe16e0747480092cdd6a66e21d90625acd307d206c2fceb60f18cea48750fb4cd99ae29d9bc778e971f3593247cd5980d30f9e2615eb3f713fa02537a33ee242a24c0752eb4ee8d5468f9a07aeeb5ca09fdf0d2513d30f49313d1211658f3d653eeb368da6b26526521e816a3d429a6cf005b750ece6d0d8c13667e0d2208e8d509c4d3a6445c09df9aec7c9baeed5238d5f7b86d62cd8274946e8fafade312edb94fa96dbbd34741ec361655798ffbdc241a47f927d93005b4bf18272e3bebf6af7357876d140a5da48b991ad3772ca2039607945c2bec8e8851dd9b38b0b5c1f4e8b754f88bffeb31b7411ce6357ad57ce821a717d24e2196e1dae0b33374b7a98fad020026abd08e5b03c0fc6d2532733d6fc922d3f84f10d3922919d9821ee190475091c12286d9db73fb0a88ccb10c304f6fa0beca94b44b522fc31ae89816bfacd09fcf1b9857e5107afb3e8be9d413ec9ab0911572e4d6e4abfc05be86daf3ce7e794b78aa7638822ea110e11567c63cad40ab9ac51b876f60e1b6b34d786d601967e3a2bafa31a4864602390240cb7ff591caa8a417995f5e8538969b32fb282dcf835446f38acb84447d8cd4ef37b7a72739b6bf619f7069e134390d4e6381048176099c72d66b43522004e0f0c59c58b53d757199d8c4431552d9ee15895d8db279e9ef50259b1253c3a99ec5818d9563a10893eac960de9072e8569ab35d5844198d05be9fab0e901fb31dbfc00fc1e68d308bd392060ab2e0529d898d29befb5c002e7d68cd7f16096e01925abad2777ee39255a01296ed951f6a52817576de0baadb980c5607709a5341599a6dcd5c0a20f4e2f453d036c444349f56e050ebb01227e3aebf89518d3b3045eaa5007ce607c21235962a0f8f1f759458079265b985ac1c89dd1ecfa7e5a0592f88693cbe913e2793e6d675d283f148e67f689cbb3db4fe75927bd23e53e440668fbd52771a120b0886e20d83f7a51ffe1c0c779b9ea45afe4445931c32b1a664d1ae24b5dbc91d0439e156f69eeede45d5fb40474509f6d170575ac7f68980646bcf82e4df845a2104661398b4e8b6215cc505c34b0526db0e9d5a0c87bf8ade8674dde0fd19cf382e13cf9fc764a087d991a00b32b91de6934536a770b549386f6cc6f01b9f24080331558394f004813ab884d70d016179d5580e2185d5f0e88246f8da541caf3bdcdabd22db17ac3a9e6d42edaa4a5b11123c8f0ca0ae1dec5274ee1a3bfc02cdb86d7b036075eff260281bd2cd2db744281ffeebd6cd48b2488c21c46547515934e69a2c7dcf59c5f66537c168c200ebe5ab951e0ee2bb9603253fba47ae9c097ed6b177fba8cc8be903f99659860f00d2a38f292f038888deae9e748012ea9c988f444d11fd0f8f6c7a9a5cff1fecfa339cb2bdc1f2e2d820be0a657fd38a069b1f501e8039585b374b5eb749cb1aaa3aea52f3257b596916c4647a4ad9bdd93e8ca90110b9d3d7e5989bb5b7a0d6ee14b3a4769ab5cce1686da22d933eff95988cc8f024c25ddb9481cd1d6438fc2086309650df34e41f494405d569eed54ae68bdae870ba1bd90fb1872ced9320b4ccce8ac28ea1feb65e575fea30df57396d44f79c1a38454061283af78ef393a26883869edea806d56589be425d84275174214d662494927a27361cc77c8b01688f07a33889d759d7b67b59f1f1e2b33f2c46a7b9b3456cb85ac521e0bfced33a084fbe9c27b138ad2f9a745c91c5b62cb1e2531300a6b5fd6e592522f33db626fd03500b216cc746607a33e778b1a763087193e3670d1ebab675f3f919d35282662d9bc22a26c463e07e7aa78412ca9e7405b9ffb2e7e3cb5aa5060b70b8a16f5a375a9f1d72bcd6476115f9f8d55fd34af65266fb62cfd3fbca54b7df1f32eeb045a4ccd39b3e245b8b92dbd883717b867153f22b3aa1f18d35b935ca190fc40e6572a0d5a6e04390b73590b1834eb1660b8eebebc594109a0f0e77378b47f70604fb5d1030b797c3b57563d234732eb19e0ff6373531a896586e9040fda5bd97c50b0ef59e858aabcc6b0d3cb217672ebea02e4e6d6e1346eb9e64b0b4964dd3a8e10fa9fc8c49f5e8a4b61b7f5ae938d1d6e30c7e6068ab3f9dad9d4254eb43d86500f8cc0af9504a36f8d585e8d08461d002a85c900d32a2740c89034583471a7f25fc2841dfbe1a6837eafb8446947b51763044523dc13a2b6b2b95c3fddcb147b1438a20377e9d1c44b07e82d92031101b6835aee2366f1f74906184151557aaa7343a78be88dd25db8644a6f16c37d48cce5b5bca106cc1b93b6dbe7966ea4105fb5f9c4fbfa846c8499b54f815468ee61193a49647bb162d59dd2c9484fe6c22b29dfa33d1c233dee1caf028dccd1d8cab8eeb5f181e5abb6d4a16194265e3c3e7f5f5dc2a724f16cc6df153e447040ada5620f2a3008c1f824823644b562e38ca4052f714fd343729398ae9080de5b423180c9eeef9b4cd63c6430b28e05cdbeb77ae743a34d1ac4b4d271681331847a05747be8d652aab0324fc726c137be1c25d5eb44225f14925a931b3f204fef7293d1c4a77f97142cb4dabe71e723f8a0d1f20717dfd3502b43c5060ee19f2a72699ff52828d67082fad83c9f1ad612c433f47e2e1210afa4a84c10b2322e4f66a0ef994e7ed1da4764ca509326cf1de232ca88aa089b0f6812379fa6f72c21f119bdf4061a0978daca2da6c79cbca009fb8576a622165b2449684a92ed657240011f8dfab007d6246eb4eeae98345da72847e82351dc79f4726eb0712778a9dcba857e394ef61d01ddb640e5ccb4d6afd23af42a3670f9a15a77ef1ee3e2afaffa8fa37e27b0ca260ce07e64b6cd46491437673dbe162974728aa1ba25405828683e3bcc33b442d3f61b55f441a5b3c884506d996370caa5c29e9203b411d6548db4e9b6e2f09be7909261127d2c5e51552454f8e3ae587e0ea00c462ef0479b7710533b0c177126729b17dc101f2e6a9546cc43142997038d5bc0742ca8f45829d9227964721958812ae003b2bf4c4eb44da95eec49d725bb9fc6f35b4f60e244f8a24c7ae2b470aff2094295d1ea2052b666dadee29bda7bb9aaa8555f9360750b5ac1020bf0bcf3a776b13aaf74c2043ce8d0566c669669b564ca9996232dfe8c295a5bb52a558356cdc1173329b17314e5509672664026df0af4e01e7be29c8d0f3b86a413cc3e31c7b17ad31d9e870039561f8df9b4e44ea8bb1a311b84aadf39ae2676a6fcc938cf47584f15773ed33633c131651461ef7e0e880c9d40aa518b9343dda4df36247b8985019e7232abe169f0c3bccc97408462b664e68cbe15fee9955d4f332b88fb565b67f86ec98a057a35e1e130abc2f4e2270f233a8cf61769fa43ca4cb41ee7683a1107696fa829e824a76c17d0a21f18bb97b19bca6030043133fe7845e18ff7a3b2736e360f28c2825322c79b6b7f07ec0b9913a5a53a783d703fa197b7f079b15c0393beb5fa3458417682f5ea4e8754527dde8bb0a6f793dc0cf67f8d2cea9d1e9f14096de00b4274bd944abd4296eedf65c672e51ea635ca3b15fad0b8afa3e159556fcc08e4511e46ce44570834b80b9159612fe489f20843f3d5f7d97e8cc4f933edcaa20652d3db38d55f917c6485df0589c4d8b2e93b93b6b8dd0377ce2aec07b778ee32d1669db6e4839c2174e858e1b414de55f5e6304a87f5b951e3f5a41b09d1008341c035e813348ef2124d09bd8672b831abcdb2123e8402f6ad31f35dc3e43cec7798167de5b3df34ccc970680686803ecbdede752abeb7cce68f996e101b9611360ccb45792f5cf68fe7130edbf6589548e0ff668ba4bd599c43f7940d58dd4942c05835b787057327d951dbf732ec89811d0421845e91d03c3cac5b48d3b0818833c70bebed02c2f7b09fff7069613e96602caaff508ba3a13733cf30f8ce6857da633b8cffe25323dadcad7a784dac7df14ae73a185e677281f2095386f67a673f5d98b3cdfc757d2a9f9fe2ca9e0bed972e2f4b968b646d0a4cb87acef6ebd28664e1d6c1754c7b45d13a14f286ab5dabdb500b63ec3200125e7841ada9c1218d8561163257625f2dd1ae78ec5eea621cf273c65f9a9b352531e78157628c0891329edc9ff6fcc5c7a477a589abf864a6abd2a3c0a4dda120333178494e5b422137c92248dfd7e52e69aea67ae1cdc78e21499ab638dde3ffacc469074bfafa881ffc59ea67c5f71de61285e9ad72c6773c0f23945bbf90d0f32a9792d6de132597f07bb8c43679243acb3991ae57c9fe962eb81925378898e7a47a140644b9fd89c14cd9e84b9fa290658711ba52c0f6754d6c84f57e85fd75466aa4c3e4b396fab3c5d06bdc238922afd78703e36884a4aba7a572d665498e6fb324ac32597a464a5bf81d64f7f3ea0fa8e67cba0a8d06434154e6a8b95373f8fb203b8af296f19860f2260e13bad5fd336b95b041711a3c27c0710afa738a2af08963956c2802532a3ecb9d30523a78bf162bb664a613d58782d9fcd295321c76abfdb27df85cbbf33ebe52ba17f0784a8e165748edfe8c729c5f65015e7e4a102b9b529bbbcd6bcddd10ca900204e629e72e3823c55ca02e5288cc85d1d082058669281fe9ae392fa947f5f627e01f6efe715309e3b5632bc968509107cabcf1e3917a43257138d2e5ccedf129b8ac51e98b6ea47b971ef37b46913144136520296a5caca7e7948b1ee789c94225e18cbdf17385a798cb9d85b70b149f5efc0699bcd6bf52c8e78d4ddf4c963262cb5be48c04b0cf2459a628e9ee6ad8e549391684e62899de3311272ea9cc3ebb57ebb4b94167be4aecdd3032bf5c8ed5a4c20324a505cf6c8d2f6eb97eb714d9e727d3e9e0ca41bbc09d872c667b5e410aa47c86fb59179b04cb8e1edaa0a579c6612a128610620c12fe8f1134628a001a85575f0d2b9759d907d44bd526bd2d5435666afda72983a23352cf74de608ecb3c929fbe38f700c5f0b36d38233e0daa841a890f99c3795e2439a00e5bada09150ca24e39e780489506d51820f6b45abd6b9f1520c412cce5410f9253bea32c5e8a75e255b23e93ec78a6379894d158f84224033a4c9182a12550e95e29c1d8355a2546b6a0541ed184d147a242009c4229ba922e9581133ee34d74d49ec31241113e946210e9ae6ee75fb84badb9a7363d95325b9af7cbb91e6127524773d6bc2cc2aabec38cc302e425223113768b3eba19e753318cc3004c7db05e8631c9fde2404909ff450224fabcf4b87483930b3c5f502a36a91ace076aeb53406a65ed4ab90c8678b4608a3a9d09411359e726d6e1cab0c3469ca59ad99011491829e815b3e4c2efdc2e3c110b470dbbd33151b4674eca17310eefd92d6ca69d7d5de9bd0edd6a83d00e87f9a3de053bcfd34a39f3549e0924f09eeb403ea4487d51abbfdd330dc08ac9a3d21ba6bd22d2700aff84f995a86739df09fbb5bcea4efe298490571d105e23703e9d3b3ac42cd9fd54ba1e43f82d4d8a30d099f525c5e0279154cc023dca139e57dbb6ac75103c83b44ccf5e1635e1878bdd1d8daae2ea331fe15c7d790839d773f8956ab57fa093124bc1227b7cadf18a3141574c81573f45ad4690463b8327bbe83a88467e84984a1000d7fcbaaaf19f2c6b1c73a56a3d64bce852f05f841b6e7df49969b88a3af77df13727f61154cac77febb962bf5f471646b0b65942cb3525c09425569104c1d51db0fb440230db29bbdfc5353087976b0a04aea59beb5893137d09ec615e37647edd18f983cb06a2412a34a64c5edfad7731a14fde40c09e3a9df3d0923b1bb9fba960edfbc203b17d9852c9056e6c835a6222f563a8689f00b5726b41a279fcded747493d98b0980ed264f900caf4db4a3d2cd49ad727f512184ce8bc10940f998a257af28c5a4bc305c549406c799c019689e071220cb22218010004f3b8fdb941b008a1b4029b93769e44312c9c7dc587f162514c8e74acb47538b679b25b2b3cca07e9577687dca2944a88bd20ee2e2a85709501c97d09a6a2a0b3a604647b54ab9b62bca51aab09c37fd59f709d2a9c178ca63827442f70e83d115fffc82a112b7eaedf5c62d5c2a3dba00a7627ddc4e66b65a3636a4bcf9f63f2955289fd8eb467d1f548f6c131dcf6865a90a4a71e9f41b39dcd39127a1b64bc31989f455888046c9fb57292a537748054b489ee6a8bf38107ddeda58208df0fb7bd9ffde5e7bb4aa5571270dbf452748f2bdbf94e3678df6dc7f2ec3e88a7386781437c99a8eaead4b7bb0d17360b4c21cfd19affdb18a80fb8309b11540a0d47b59f4f35e9889b54aac519a41fa48b757bdb2e113854edc3e9ef97fe762cd28ea12d4d82ce575c6075d8bfc65887eb0fea63edfea0d3a4786b3a45ae5623788c3bc0874841720ec160dd943231efad49edccd0559343c61520d5c210e034a748bf3ad0e7460206f5cce5777156ba0c12144e86ea082308964c4a082ba867177f2c2d7a9dba8eb30b28155b52e50c48061681d1853b31dbd75a566a02dc8a006a33b135b03e48581d03a3afd0f2410c5ff457d4b1ebf9d1cad5d720d2807b0194b1aeb0d8d16367d4124cea40353382271f936c2fb2627bcde92f41a4f7d6422765e15724dddff0e146f3089feaca262d76fad1ae6d9c77f0112460474acfad0fc91c418438c89280ac6020328f7b99eaf644805eb1afbbc477f84ad408fa6ab604ee29bbfad2e70d80f00b05ee0c29a43efb3e75264b2b4d6b25f67117f4c76be08caf8a38fd37b6acd2654ca161546b17eb5a7acdf5ec86af3b96da88b02643b9788261816599350e8b3ccad707eecab8c8e5beeb8933d4c81641c21af4a411b11d5d7874d473297246467ff2631cd6befe44026062c7e088b35158fb963d82eb088e99b0694ad01dfc6165a13e6022bf15c99ec0f9007293d2309533af54cfa1affcf8fa9e179889432d9b88fa2b5d74271a1b3482600650730aac818b6f1d491a4d4760333731acfa2be4aa98ecf948710abb9f31c628d82ef5c0410bf130c9007e1c9fe588dff496a4833a3401c7092676efcdc0123fb182a0702c02e7ef004df2272a3b8751fc0dd44207e6900363b786ace9e6d830673d0120c671c6dc170f685b289b521108fb4cfb091f53cc5fdcf9dda338824518de7536303f6d87801b3f69ba410bc79cba5d8ac19c71dec87a64994375b548716ddb492312f529b5b1d09308cad079f1ccec44722ca11625c156364268b9fd476917466fcbcf1fe3d1bf3fb7f585354ec920ff66a3c415557a8f8d91f5944995f2098e5d6570c85df00fbe26e02d54f0ac1bc86e0d2aecd04882fb8fce24671e16bee00dea7652ca3f31d696edf7f95c3da2c06d2e53e6350b131c1a67e2b875e34e423cd9c1d3cbb962bfcf4cae7ad845dcfb4c9de60ac0d6bb3259a51c3fe102a77acee675211c176e66b5a331bc50d85dba2149b44a773e387d9428831210fb46a254cd7e9a848292705319a179047f9f61d244cbb87ca5a85d6290436eb8709901e9103cb6465679d8e180d095477f8a33636c87b9771d6b12f24c5535b7f5e85666ff0c5af500381e20d52f42d501e64a54c621f3effcbc46a9b001696d21a4d814143bdd0544ff0a1928adc6fa9a0c0860649456a1512238d8ec787413162cf6a4668b943d6296579c410d6f91db319bbae7582080a2a72495f095b8b7a94d9c57306b05b7d95c3b700e7b809eb890179cbc9c3cf7b7c538a0e784e277791eee517d4224fcc68da5f8b5830c9935279ed252f6a1712a1d474544cb44340551daac605187974a483fed890027121726865d32de3e377ec1bc04a734e1c5a000a528ffd113c98941af18d07049ce636478ea2f5b3c1572eb2baa0508aa50293e2abd7d957892bf9d2ac2f8cf74ca8fca4dba7e002f7e2cb8802ec2ef4fad7ebd876476be0461c14cf5a7f9e9992aa3083e420b39ffd4030a2652f729937b911a1d1066b1facedc1e13a3c2b62064d9b046b678cf51a04806534bc16db2691205704b02961300604dba90a192d952772a4327e9e2e0ab4eef0e1c6a23c0c14243475479de658499e66759177980527e0114ac4517e6bfc931cacff7389d245060468075860b1a173fec4964cfa7217c80b3e7d4e6074c6bb064d7228d9d9f5de41c185495af30bc766c9bf8f26b6f09bd39fa9ef1b0c01d16406fb0b505efc299b98535ad46fc48b46375e4669b25d922bc41ada7e8d22ba0c28022ec0031e81b1ac194473499868a6b6e225cbc9940ae657803e4cb021b57486d4c89124335a9f3f4358e80905c222bfcf05cc37e280f294114bef5240dbc8f6804f5aef5b09b9211fa66f6047bef131a688cc3a5741507eac73214a33bdba901ef25a4dc516f05fc768a0052ea77e5df60660fffde4b4503ea3e17f14ff57cef00963a8f53a1f192254cff716e3942d47d417ebd8bc3599ffb11c860d8e41403f9b5c55ce896881867fb17858be454ac740f0559631e1b5f78d4ca91df3bf6926fbfa6f721032164fa4b388c9ae9539736dd51929f8ecc8a67ffd7910d21025c17bb63592907f20c727fb1eb2009c039beb2c22fd2536410b493c7d7c2517d59538730b9bc79dc9966d86108998d7d9432f53ba6aa79fd2d159f67b2900a7328d2188e1383f38441bb66d91e4c5304fa64620384163a595a8683c62c4a4bfa13be5da3a14e058d47c252fa3baad9f4d8bac693204359f8c415a07f00986d3c0e4c78b23cc05d57ea580cbd8d892b5c00cec2106003af599b11c19bec1a235905ba72f3193210dfe87d425ae60a19e5b2d08f5d92a09f9d5b0ba5c130b171403a12cc285828057926298c85332777452ceaa1de645dc28bc981d06e493863b89eabebd74a51e3328c787c03ba0a9534cda8a82b38f02299d30f8e03d512f13b03b205f270a0e453be3dc8403101dfa25ec4d3ffdd9accdf1d71700e9f42f8ab5844a8491242c19c46516ed156fd0ab7a19badd1f638251a9837e5c51870f3e6470433ac71bf5b3d6fa9516c221ae56342fb3c0dfb362b78a51b08bd518f3eeb4a2075835e6229dd9f3437071d7c7982bb1b9ede7b547455aeb82759ceaad0f6415c1cc3afaadd2f34826cfe8b78f20bd5d3ff76a51dc3718656cd07061b433d58dd5b061d1009a2a03f0dc2b521018b4737c946110f850c78fcaed2ff20dc1f983262242c5b83ca446bb7f811dfdd2f5333d15c31b7f8df888a8e3b9652a6820489098c5bc7f67b12e6ad196e8f9bf0fddeeedca7966220c0667ddbc150f82964446da433a0c09084aa32d7b76736156acb917dbbd7371eec00f4cedd03b4ab06956904edde81f0865d9297c287f1483e57d4ee23a69627ea4b99f303725bc0e6a6beec889b15f1f66915c1704a8a046c8b7843db46d7a49240b18a531ededcaa3298da40b3d4488583f6d608bdd4f2b07222d6da646176bd671334adfaab2ab20564e534db87122ada495f82753f81852d7b8a554a81920a7bdac56528940ff2781f64e32ae84fbe12963d809220e87ee16cf1e67e5954717d4bcdcf5fa15243e2c28dcc463241e07fdf3a8617323c59721f6030da20f637914797fa6aa3ea4c611feae54fbd7a5320f37c1f924139ad6de17507a1d41840128aa19db1dd10c2bf56ddfb10317cae6a3c27c841119cef5f655f01866ebec7170ad6ceb34bf147b143e528c958d9f77bd02303520ddef9d1a021da4cf08f10ba2b9fd6ce52dab3a94b86550e570edaf345f3b0c2f6a5b8016aac74e9d8e8948280922aecfa2b1e6d3e0d04231c69199e2483ea72fd51ae91c2ed99b2e051592ace68feeaa2e9416203f346ed90e6a66859f81b949be74b160d8ab7a8d7444fd9a8b23e90ad15b3abe7e5d31a8d53129acea480d16e87b51502925b810a6ef2a516a6ca599ef6e2a65b9a08eebe9c0e35f4db31a34fa998e1db380a92b596c9995f181336ce02c5e6bf5e6e84042c081ae76819179a10d7b44d3bb820752b7a18f3a55c2c25017ad739674a04107b13149e219310bae98c0fb1c9e1646caaf00096b7f0573941b9b1e59b90405aa7c3734cd3b856f8d19aa35b62e449ec2cfa1825b261fd550b12fff38c7ca7886721f0b2e5cfae945120e2e33f38024711d451d64ad9c8374a1be596c031bfa9325050a4c499333c522738b8a97e8c9116469e379695c25b23dc88969fe1f68d639ce95b58276fd3020345515c443c7400896434167ed00e251f091a04ff3f9d70f4c90f29cf0031ae23a693eefa6062d154bdadeec1a541024a24736b99bc4c9bc0c86a84421d754c1a6e75b15985d3fbe69a25924148ceb296597d9019ea21298d6b70aa2d4a35d265235b8154a9d042752114709e7ace909ed92fcf944c5d3616874f5ffcb45b0f2da7d2169b61ae527834922872995ef17923fbda4e3cf5039241518e2ddce17cfc62b16c59fa1da067f6767e0a2e5cfb2cff87091ec35db8adf8253db21b6afc31dfe4be43f26f5a6252639fd4d93733046ef23a8672768e7001ae0369590f48ae22d06dbc7e70920fc1e3e65398a66be7126dd0861b28a9985ae66322e67853bbb6a1f0ffb28d1d6f01c5fdc9e9d150b8f8a9942432fd080989d82b95c389f16010cf4b49041de04cdf32a669340a20e52852773f0b4638d8eb60d157cd050e36082ef68e3ff7d73f248bb549bdf6feb47826c7e818d91e277844127cd893893c9e3704e4fc875ff3b1ab9fcfd3194106dd39896d94d333a10795795f641172da850a20a29c94f3a7c04e3e24fdd873469da2c216b8d33e66375e0afba78b8bde9e4142e06bdc43c015767e9cefdf63e6b25d964493a316cc00023ad265c97702de456c95ef1c836429f3ed1795b7c6ac93b839218280c1324c92182546b24f8d205c52de5c3e7c12d0cca615734e5f7222abab5b1208e2d21bae8e1b836275364580a4fa2938eb2ce7e8553b9dfdaeb852bb25aa3844450d9a2adf291c21f8bb600cffc7d43f3f7f407848c265c1fe27969a5f34f16f86079fb4894e5bc1a305127faa07c0379c32c3836ba4df640f3ade41347c75b44c70b539c4e86cb98870b5fc2d4110473893781f964f1f45b9709c6140dffb80eb886402c9467a91ab2f64e20ede63bdd957b64454b248f830caa41a122ac00e1cbfe5c4a223dfc355185e45f327b3d6ff44d12f85a2e56045ce2b39cc2e01fa05c08fb9047b11ad45b8c5089a0c548ac81424c1748c292671864378f6808a1b976b93bcb22741fd70856c2526a0b2342b6990238a182a48d1d8f7527a36d2e2ea110ec25f5c532d481866703c3c39bd44be29f5af1513a8a430bc4c6713cc36f61414329e204aaf753c1e9365275ae03783c872dfabc5696d8d17a76071dc4c7ae9c9ccd8da5117254b28667ad683e193897d85b36239c680308aedef4963e1229317bbfd6716852081d817f6e708165981961550cef61110c22054aa76780ba0b370d091afbe99b23fd6e2383ec40aee0345df129aed5b84d8e44020cad9f639ae01528b88f30129de00be701075cb8cffba10787f709f34382856039714c261fa9baa5b5df0c4a9f0de464b90d2b51daaabe040fcd75524b5c333a6a5b5bf2ccecd1ec2bf50260dd62264b9c2aacd8a31b4da9e6b3bad6a4472afcb021582b6b3d95931504da67ba259da07f431def0c37bbe71a228d0808c7845223b53bd419c7a3c401d1152512119d1bc8c298c629f857b5081cad478707a93d0d54de1cb6065204ecff86cb15d043634d9166c11f4806fc0837ab18bec3af5e473f970a80a74c543eaad9401a56ed80d7ae8227dd1e6d614e2ea0add0d982855fc6d0e60cdd5688c1f2bfb4218ea3cdd1afab58f578f0feb46118a4b770925d09d27bedfd43e7338281b3cdcf04db72dad0cfa998451298d7773a47e586c53a72a4c6e771ddf76323326859432fc1b826624c8bfdcf55a05e41d8be60926d689aeea64f39d46c92e4c527d9a2885e777e48e867fd1e32510268496b836f4a4125717274e443d59a48e4d03f12c392ba08486796187ad5e16e0731908f00b4408dc362b15c7db0496721491ea98d6ced489621aea0479f098a908d0df0fec113bb6ae3e08f3048b7ded8079d224a6255afaf3ba00829d680146773b9ccb2e6047f6921c843f417a0c3894ec461d91d4ac6a81b101f7a8689ec299cfb2e0514785a614ebf71176996166a0a85cb6b16d97ff22b557e4d81863414d176a46f145d3f3d724d66b15818fefff58f552eb0ece339ec6d370089ee383e553a98d247a80982ff405baac71c8be181f4b14f1082c0809770cda609473431febaa3c4171df2279ab07ed6e0797eb12009bd956299b1d35e11e2d9905cd58beda028bf7cded96af4b378eea878aabf835dcc336b73ef39bd24bb36bb3af79617950c598c1f6f2bc1a5980f3c915a192e85a069f4b594f5a9c8a9a0c23cf22dbc26f0f821c8355e46bba67b5090ce7208aa9b65c68b80e416096e8034352a956ef8f50f1305c8d55d2a78ac31d1cabcaa645d480059c414e4dabf441350980fb0da3c59b3c9d9a70e2d4ce0546e13aac573cace094b30c972146a97303d8f2b9180ffbc3f463c291fef44cf2a7ad49f90289315d1331d6175f913619ecb734e2bac2cdeb917abf7d67b1824a6d033789831ef188b3ecb374cc0941347d09d084f4c7dbe28d2512c496e24b93d9bf15dd41dad59835557875ed6e0fdcca840e34a955f31eda61ce86e8a89a0fcdaf1918e48b0fa7a0f7bcb89e2701b5dcf53f4a007e347c7a0ab70e94f48bb8908260e5d8505933e37817d41215aab6265070bb6ec670a9e4df1ecf896ac7f3f40e3d220ed38b2c1dc484032ea026c2289782985807405ad35444711a2e2db0e1d44841c81e8ebe154d52772335bcd84644c4d54abd433ce626fa7bcf8f0f83344deb6845580799ab71819e1d468c93dff1d39ff91fd1b54927fe1a5544990116ff51aaa0638048da754e184d252691e0f6cacdd197d0619cbed04171a93405afd27ec4c64d0a2884b78aff37e8e94a30fd20d8df0df6811109b4b7bbb21f370ef85e9d431d9c5c1714e80194522ef4ea305276d875d57a6227063081abc325c3c3945e39c15ef7371d3f9badc87bf50944f974cfdec8d7010114433275095165e029791a36c8761db581a10a85938b5581d850e5441eea635160283b3496dc03aea85e7f885f34405539e79b215cf0c6995cc4854770286022e9b793852b90c6d910b46fe3961df45031c69eca0d6751ed93956c10afd8f678e376138f12406cba830615ec6b61e5260f975f857472c18a6b7d3f8d200cc8378ffa5be692b48c04ff1ae2f88b0fdec7f02894134fbf3d1a99da5bd6ef527aafb55dec5a1aab6394512fb647810a12220ab710b9059b340660c80854f02b6d402d58c0bf325450b9e1d170410b3c4996c85dfcd8277084d252613170a22acbf067d0921459a928f4adbf39ba88668ddcb2adaeda3c4450654bc5e06d41d128ca64c28c1cbbc284776d64035944d66871aa136b4e0b1c32c92c48b4762e77ff80a2037fcc0d07561ee2932a64404932691bf28124f000683935eb6dd50089ae75a3a6fd89061280f8171a3d01b7cc4805ccab09fa2a0a4ac037594be1556b829cb9213e73df82b510e6d51cabb9594e24a4af29e94fe9e94079f94a3b32601aa3c916b5281ce8f77304cc5561514182d6d70a603e1a246498e564344ba313e8a926964a497bc6709424228ff7b9b4d04dfd0095d4a4a74785d269b981ab91101071bd7c3cb6445ea8ef313b67d0b5cca7e9f9d0a6a88f782e27e4ede28f455e970a0e32ddc9d919f1ca8ab3e287285331a42bab3715e027b48b1184b8f1315a4f857b001e92c70def533abacc7182e2f0a489a531d3ae720f3f3e54f25d2d6aec9573f686567e17baaa54bc4c2df605787ee8a11b28c939a493aff888c0f885b83c7115f750cf3ef33ed349df78690f2b63e79766131c9caa72680de5c15ec3af1188ed97c694501f32290ad221177ed8df961bae732585657735eb2f183c7e489dbeb5c247de5a92d030278855536797f06dc18e5be4072b9340c1129160a3146fc0853e72a61dbda631439e1a5805186b6a3a7bdeb7e23dbcdfdb8d2291967e17e455dc7668300818862bab6983ac86a28d7aaffe28cf1f658dc2bdc82e701d52ee8fadbb10c26ddac2882602358f65b39880dd431ed2dce85bf5906cf1a5a76ad6fc89b50e947f336ef238084145c79285017b7795d59f06caaf2b71cce57ae43df265b64fe489751cb8d9e3fa14ffe9e8aba408ec27f2cc92beec07ab151b2dec728d61a6723206e1c271524bc0bb331397bd7cc1c02654275e58df7b93eb3c76171e760c26ba8b9a8aa3643e5330cca29b44a1f458591384d02fde238f9b477fc8db1f7ece0b4e5d1f13ee35a1de542c8ecc5a71d7c2655f9b32338a114803a46a4a3ef427826ff0a5ef578b0b955eb0ac12fb68e9455c25688640482ba6477d2815b43333795c4f206f0ab4e6c5a8c6a07ee1927f48e47305c90716e89a4103e615ab45e388012aa6148b131a2f544cd2a0dca5c49916c87f36f985cc38df8eb63fde5b207da39d219ea15985e79df47700c4c25ebe6f1fe0813b185c31d5d2ab8cb2ff2ef4cc820f137bec76aaec19a04248d305cd8cbc812338a736398ac2167d2493163ba9a3d6a99c4f3daab88a732280f6652446721f6d1f01466f2500717a5e98a5ddaaff5f45cedb1ee4372de8a88931c5d88ac8cc1797251d27408bf5427ab3e6a970c941289286d55208c4a2829db4d17bbfb08fb62e94852427d12858155952870c5a590c8c64ec3a614edbde5b06da7ab50609e40dee0c1cdcce9bda66e7dc2c09d44eac46821aa9be12ba6a8a264b86af9607e3135cb0c0953637867bc867dafe2094f26eab3861ad697d2431b590aef55f6416205f2ab8eda7b89f007fef2358bb832e15e41f5f2d6eed17ba8aa2b03b0b1c2ed4a5bf3d0406fd487d939e64160ccf7491d9602708daa95ef81a74d159bf7e2be290196355a1b65138f09f08f93fffe15127d449ec459782667d5dfc2a3127d841eac6f3991030d2f37aa568557be102a40b9929f7b616d179239710b5e3e6a15cfe5504f56b97ad4aa8e2c43135f18d3ca7715169de5c0a83fd21a51f920e0769f1565cee2a8da23281e87f8a827b9b111ca7f6634e02fe29b941eee48555cec036c5caf31aeb08141942eba845012f38f68e09d45cf5f420f7063b728b0316a8f2cf180c5288747b87fdbabdcc06bf85411b210420fedecf07c68aef9a8a3c819305c4f6bea2e2dc535a4833d53db01e0146d12d2d29d591369b9f365b7bfb3a1261c758ebc380f2934464011b32876b2f502574c369b316ddff5d4c3041599f9ec17b590c7cda23c2e7b1b32d390d9e713840c33e6484199ecdd87397f1468df008b9a0a44a24087128dd58fda47a86ecdf2648a27844085a0aa9b4ddd87b95ed0a26a176609e8d4c643878d9064695b225272a885361216c99bc8efc2314c7ae6b81f1100a5ea3622ff45500703a4d769bfc681b490e4f1129b6736a3370759f36036ef912acc1ff75e9343487af39eea01e670295cb91f811b0d4fc8408df2b36b112811e31c4a04ff083cd9f54f70b4d08765680f2a349c9b8255fbd28c9fd210a80030e34046ad5f0df0613876192488e9abe25a3e215184edb509aeb417e8861a7b5b803d45b5714a8e932109e090107a19f6b84c52bd5ee7124f5730621f5dbbaf59cdad2c6ef609b71494f30dcb051a255ac224c334b17fa6c23d980ee5e6ccc2878fdcd9b5060824014cb9839c82eae79676b7540db6978d24c91875b2ea4525a8cb1db6d1b698a9719164b50d8a67b7fd5338c5e0bf9440d93943b10905364da6a177424b1e4bf2a64b57347e82f6f36dc30f6f87dd45234d74cfe5d8e7d75db929152e52af1a97971c631eb822204c190e1b2473d1e1279ef905f3ea24b4683119d55cbfb05b1fbd219d6f7c0607660025d49657b576b6072b712137ab86b42d56979c50e0f0ce7104de6793c5c2941b5149c3788d383c857984013dd26be4f07d48598508010f3571e6fa85249be1409dfd83712d06c7adc7168ff9735edef93a2f5785453cfa2825e77593cfcb681972e37eb01aabd6ce0f08b86ce7a7f1871cef04adc9cd98e8f041cb4b27c46e08634293bcbf6abd19a518fc4ae34ece9910aa4b2902c5e50fad5540987e1438b23ac1fbf542153abb3c7b115360284c61a65423addd7212309fed157aff5ee60b4e134c79724dfe6b1ce65f9b9fe8d19b8b61bfb2b8aab41073c2a8eaf4ae0da61b7fc183d83ad6a89ffdfe1bf22554b2a4b7ca88b0bcc855b571dd1746564f47397084535390bb476a3e4a89c5b717055da6b4d8358c3cc29568e575e22bb154c3e8c68b4e8ccc54b2756748168ce468276d5be5729249e39200959e22683a4002efa16ea1127c5c1f94d8427f0a069a1dd220e993e71b01f290c158a35f4977349317d87640456d00049995225a5166c083a29b1e82b9b1a351c17cb991cf4b4cb1b4533c4e685f46048adf7578a7b56ecc573af6922992f5fedee44776dc5de2433f30e6cd25092ab06fa068d5002b66c7350ccee5e3e9c65a12757df2c61fa9f5c070089552fb9ce381bb230be6c473f93eed600f932085089a3959a330e86842bd416043dc8722e1459a8dc8814851a0a7f70ab0f40bb219b3cd21fe2243be78c81505a19e1eb29bbbfa2a796e950f40d52310c9a4ed07753ad3f5a087792b844f6ae58e58a69ae088fda449729ee8be8782d253d023bf33224bdb59a6f14f20b1a23c84e8e54ffc53dff11856df82ecd13e2a2d7af97482583035753ad63db64adb6f0a619a34c24e15ea1e44cbbbd9994f0465d25c690aa6742cc4d2648d3e15aa2cdf1db7b5a707e0caddba73bc458b08939c3217f7619e2b656eb390f56266522f791c46084d9cdb0388034283d01876f9db0743094b528cfb79c246c502ce998ced1ae4d9386d93ff91fe8b39abe3391abddc011bbd6742a7ebbede98d12641d97d53b3a1252f378ffca383896bd8ef54e46d651d8502d94446534bb3f11c32edca28b3f0567678906fdb2bedef962e31333dbf5e3f223f2ae73ad3aca55fa9eae15b1404b103dab5b28e58204eca9a0ef77d758b2ff18b95c9301b6226c50e577755d3dcca11918b194837272680accc4003457b4ae8d47fcf15f5af778f5cfb8c313d06e89c9e5394d1a8e06d670b6a799f2e4336f13ebeb4b677b72df7963225290381099c0896080edb02cf1e33cfaf41d93d2a44b97d84fa82a47279225a490298fd1b49be53b84c40eef76f58972adf8cd12140687009cbfdb139e2a61f15fce5fefeafd4cb37bf9567141a1e281a26ac3ca3d0c480c648a6ffd538a195a5628de1a2d812c515312a8a2899fe77a358e24561841527977946517191e98322c5426595a718453545a6223502cf28aa3139cf28aa2f993ed86a67326b50ad7ea3324539abdc0a1344b7295ae4727e992295cb393545eeea34d6465153a072ff371042610ffa3d68a66ec44767b59fe79cbd54cb2677248c16567cb136b2b6f6ad4c2ea465b4bbbb39dbe43e8ee338aebb24e195e7d747f20a43834b70ac8f5fefd34b82e9c71c09a89e0e7c35c5642f0cc2fe087c09e9e0259731a82e645428aa558f95a9afabe5dc8c0e3910615f80bba63a4607263078181f6e0237c172c2b4bbbba79a6fc64aa73fed9302ed0cbcbe2c1018193db3eb467af31a8e7b31ae3c5496e3a1387ea0b87132baa62298fcdea09f3e2d403fed9f4594ec2ea675d763b1bcdb711708c9f55c6eac86acbc051eab35061d3a3d3809eb03bffe4f1df30341da05bd80e1e7657a6b592815b6582d97c7c4181ab93b100617066534d64f2096d8377168d6bca7178773236e3ac9c6b0dcb7dbd431f14e5745dfcaf709b5dc7664f0703518f71adc8b71cf8785973ca5704289e965470134c030d8cb6434dad151fef1e2d623e355ff36b493e90df77093e1de9138d560fae5cbe8043c8d72470134e8eedbc7c4ed47860c4a1b806cf6e5ffcfa159e3beb991dee699dce56422cf241250c3f1dd6eacdbcdbbddeeedd6ddfa36d272d7c24d868cfcd1bf0ddd6ef4368b92dc603264d8ea3264345540eb6751ff7cbfd51efaac28a550ae7c1933d5b3e71c8340a0797e0f9a27486b74855bcdf43d80caf4a72c87a9dcd94cd2913149c424234a8ca894f93d6a9eb4a783e9a41ca1429526e4343195664e0d3534755070d7648de0eb849382bb1daa133e5432d8c352e9e0cba5bac1154c16b60c48840383b3228aee0a1543542a80b05e702c705145d830d854303a2798e788e5015f279d15dced00c78736d8c362b9c0974b8501ae606c97ee0630cf2828604ce5e812403b285771be4ba170d77544e02ee31c5538b8a958e08b02a706bb58e8b0e04e897dc2f789fd01bb942a077f3d744df862c982a59c6021b01650304f9e514fde7061349dc1d749b703ee7648833d1f8ec01e161b055f2e28e00a860af6ce7056b02b4f28ae0bcce50975913c88d26187eec8956126992cd7ffa387bab0a32ba9aa7c6f55beff772a57d855beb46258ae47f9e64b3353be5c9514c5224fa9174c284cba94e1e10922a290e5910d2db688caa20b2aa8e8428679820c0fb715a8dc8841ea90860724c46ce1e50b1e7239a97c875c4ea82138dce280f104678915a654808d0a615a6025a6ce13e49c144e1bf1e419254f20f3e7fc394bea94e7cf89c50d5da8bca863050a6449af6883240b959834462c214b0af5b46a048f4e41a9da880447998423d7615231a1642b730a4d7a956705bfbed1a18663b9de64b9d272cd51e4865c1ee5aa842c79dc2fe7973a65868634b99c54b43945ae6bca69c5f3e5bc9a709638e572c6314296938e2da9915ca953922b174429a9952b72c0e4926aa9812ce9965cbf50a95c4b3a65a68d0b7249a99e4e91eb1a6a956b8543e3503a00f8b29b8c04e0cb7682612a975d76935c3bca945cdb8a17b96c2d3490656f99f1657f91fa2f7bcacc0c4db96caa2864d953885f76d956b98e5ff655ae0dc708925c769ca6d36424d7d29d92bc802697aec49be4ea51a6e4ea56fc0a122772e95a4adf52e34bff52ba948d2f7dca8c172ce4d2a97c4df52b87b3442e3dce974e27d7da545623435f56a724317891cbaa640959d626b9d6a9b24ec9b57ebdd2029c5cb7e4fab399019ee4d96c366bc1883cfb1384b699cc88129e03bde12868c0c293ec7ecb3f4468a3d9fb03f9725a0951939dc7291df7a27717807b0b4e2585c2f14e73670305141aa0b8818d1af2c891318e543184952a382c0ce1868a26238490c18f68811a15708042a60cd5c282179946fb12421bede2c08103078e374168c321002e59002f24b40960cc9c302b1011c34a0c17c812e7a22f2ada028d9a1ee46451c4072bb288052bb9e84b10da8a888c6c91899e04a18dc8ce663f67b3d9cc29cffeadf2ecef2c4d9efd0842db4c031eb2064f4268d3e0c68d1b376efc08a1ed4619da7c68684889a11a7968686828861ef2500c2ae4a11741681b72c221fffc3cc93fff3f2f9bfdcfcf1f71917f5e3f38fcfc8f9f17a18d86fee781fcdcf8f99132468914a0b0824243f238b15a93429537599c5019514454972856cc34f1f354dcaaa0c000aacc11b29c524e42e41b5fdb0801f9c607096d37868686868686868686863e04a16d6806431579f620086d334f88c6bd4719b965ff0f8436f74068fb91c964b297c964b2ff19b28c4e1859f61d086d32591856649ff7f1f1f17999fb0cbd8fcf173a69b20f007c9cf8fc0f9f17a18d7edee78178ed7d643eede3e3e3821fd0c84046091854e1a3023541c410a68b0c4994f8d0c92598656eb2ecdf64d9df395664d97320b4c9f0cfcfcfcfcfcfcfcfcfcf6f20b4fd549187c248210f3d90d03674a99426198c2de6c4b0449618cc9066d01c3122a50b21dc5421cb79e5d12972b00072a7c8fe1a086d9e81d0e663c3868d58b6f1366cd8b0f1bf26dbf86924db780c84361b3256aec124d79079ed6bd4a851c50b57f470840e49d44981acf1d36b1c00428aa82b589470e208b2c4b9c6cf3775728d9f6d74944bf04d0f6fc0647f11429be30b84b61ab1989798508ec56231244e3976044e8ebd05425bec4893dc937b1ed6f3dff3b29fefe9391245ee09eab9a1a7c7e77b7a623d3d7f7bd82c1103ea852c5e4043cf1704174c90d4504409343d4786c8b131c7be02a12de6f3651f1f1f1fb2cfff086d3e32f2cf1115f2cf53c03d84d0e613086d3de0e7f29569fc2c85328d1db98c651a00c834bae0926974619569c0319269fcbff024d34821d3f8a4d04643e64211f9f5af25f9f5ff7a3dad8d7cfef5398edee4177e2979bd5e0fe4f5f37ac5208a2660c0028a2fc28441beb89c11e3844a8816909cc002193a33d420450ba0789173c4d8722b6384112b5e2ea0c93ff9e72510da7e7a7a7a7a3e02a1ad2701d907c99cecf310086d3e326804215993fd91b6c8fe578e9cecef23b4f90342db6b84228fef80d036de9f2cba0d5914455114d31c69610523c84891428a3fbd8694664916515a30c20518c80995c50308150962a848142bd490fd1b10dafc5fafd7ebf50c086d2f10429bf854e4ff0584b69ff1b0193366bc6cc6eb67ccf83b63860c62f20c1992e497517efd07a1ed550b5efbbe9ff6350ff4ccbe25228a7d4fa11e419bf72c96fbeda66dacf37e9ddd14080a6ef1049fe13afae0993ae818815964df07ddd12864eba209418490207aa065f6a705d2320b7485eb145017f42953b7c33763a5a5e0bdf88a3602b9c165ed9bcc5e5d0cbb7d4ff1faf8d22b9fd980cb7afb92e0b2cbf5bdaf0fc46b9fac56a61b6c2c711d618f614c350c2ee754b6f62790135c4e33f95a72470ae61d81b8c0fe732a7bcd49bf148aeef0b1a7d02e53c71dbb875954bf3ecd95c96b427c56bffbca247695cfead79bd77a8acfeacb1e866f8871ad239425bdb1a980b6a82fc4ddefa54eef449dd6f719b54c9f99ebfd1d5970dfbbef8d419dd7d99f9d8f5b47da18fa68f2ee38ddcd47c3b087bb7bd801587b7acb7bd43a8b6a18f6e841698f163b0f69da318c816a9281f21c03c5943f57cf1334d3b983c5f45a01d3514a505255b2cf82142ac702fbdcf81474493b621fd5e663621a9eb4f612f5d4c607a958ae94d21bce96502882307faffff3fb9ee3b88fe3306679199436832db3f6bd900143c6da022e6130ef3afa28a5355e98d0e3978d6beefd398ec6388a83eea81407fd061b6cfabe6e598f0d98fe124cbfbbbb7677776b76bb53f175370cdff9f7b9d1470f5d569c95ae56f6114809ee5676cbc3575291d5058eb56c52d147b4998a62feaa4ffeba45317fd69bda695bb4a45fabb5d65a4b612d6b91d545ad3ece39dff711f9babb41076dfd717dd9ef5cb6ee9a63abee3c6122f47bc4f2c55a367f27074cdf777268af074c27ac65d39d0507d3af2d739fed2b54d00a80a8fbb8aeebba5a7d3c610707aebbf77a2c967771e8b0d7bcf772b85e0e4ebbcb853170ff3c6f09cb715ceddcabdbfaa4bb4faebbe74f9e78f5dcdd0dcbc78479113df8448337b4d9bf1e186ba3fa5542e5abe6c367fd9c00aa4899945a469b7ad62a9838fa1bc90a04d081cd3bb7db71764e982b98b5eebb918832a133d0239408d114d154474489724f11cda25b185cff03b1d7aef8210c075c3ff0eb97407339e3d41366513f52b3b8c0e057dd3baea7ee1c4b45155c0f433cd111c15343480da1c3530fe8ea3cae613de29708b6ac3b6a0825df6be61224af30f96ce63b4ebad37f33d8b509f51ac2a9eb5e18045f4236cfa82c6e64e86e8d26d5463437fd8e025f9048d6322d56b9a4d919706745f704fbe41995654c2e69f94916a969cb02e5b3d0c65d514884c940834b1a2dc7118f79710f5072cd330a8b9c5cc2a090a034f27c9f265cd63ae61770596ffe82bbd0e63dfcc5771ffdf37c1e3475065500f27c9f254028602a64e5e21abc0c2e98439ba521b5d42786bd7f9de7713b1ed0ced461734f1d157bcd73839d614eb8bbe0fc500c28230467981f1681cb7b5d57e01f3076f053added686a14f9e000031fd80429b85f57c5ef0f5da7517d018b8ac3fa10db885852adfc9fde47e511cfd5e63ee3ff69de33a0eecea8beea0fef32dd4b057e6707f697307ab6e33f0ecb57604eb8579d33a6dabce22fa73c2ec175c5b46a9b2b575a4571f143c73a6ad020db93e073f44b0a2948a58a8a0a07feba22553ec301722d3ffa88d1b9596b8a7e4e76e2b531727b7757c2a816613e85349733f0fbaa3df60f0e3a690b8aace8347d7bc2a0e7c8810c4abacc8170a6a8c5c4e3350556b32a53f29adde9d38c9cf8b2b28d2043ec6182ec2320f1e30188f4c3f1ff00e2ecfc7e47c0c7baf5572be6ceaa039841b86a0a56ffd76f7da9d3377af229e44f4db86af0490a9ac539da7466aa6652c2bf8279d6a23dad51902f6d90ce19da9a74c0929ef55ed7b6e2c89c0efc63216be1d4ba15cde5228f758be429810f8b15cf2f86444b9e491fb27d451becafd52d3a7cc3004b7f2593f545052f8ad6f8d4ad48acffac30e2104f7d17aa4fe40f1faec1b92047e3884fc70540a1f1c6f9804fe372a7d0f8e738ad48ab7aa18faa0f9cc5b23cc674c2ee5535372ff558e138a4149de830f7e625012ab950c21bff99ef8d15b3f0cc7b9d529b45b2a0293f4383eeb34f8ab15af799c8b89b4c9dd77048380a62a9bd0d9ed4f8fe371bc46a7e6acdfe3d0a938330914c2c8762c719d44b34e75ed72f2377f2e0fef4c1d33b382923cef8790ac51c9e5ccf0845cea1b0c9ec827ff21e477454fb475e353510c4aba1f9474af27062579cf7a161d4222b9fd497ae2242ba5bab4fa53719c4a6cc9f284bce224a938ef15454f0c4abaefbd372acd304ab48843def13e19d6fc9280ee56c1153f4481b2049c1fda2800ca1555d6a021420e14d91e446e2c4934a54cac5918215e3843946714114d32ae7323cf282d6f72ebaa9b7828cf282d5032b826ca469e5143d009228aa6b427a5acf6fcd6dacd59e977739cedea75af59d47f7eadf1e64066ca05ae698a17b81668c1edc0356143af9065aa441ca97c7b624d6bf6c7c4644431af6d2108287219cb45e0ce332a08337906e6a7f4a9a465f725413891fdaf4705d11d04994c6916896b6a875bae2b0d3be82ec7110fa42820e460d84749f99259794601e126fbe41905049a5ccaa6bccb5ca28b1b18e6102943b638bf1421bf065da448c4f09002d9e26c0e99e50b279e205b9c5dda90045003e5462a6de0240e13e452a8c58a23947ce4904b3d61903ecedea00433e566d72a8710008d192ab2c5492e35a5599c8e904b609599144d6b7e10432ef51009a28915b9149ec1420a7249460e3aa020a382154dae885a432e7d729e7cf1c41232904b544b962755dee0c0454e0c313c230651f8402e7d6c6ee000e64882b4a212a523c5141972a9e706b2f3a5d867f4ed1814827deeeda844afb0618e1c72a9e505699f1b95a8192a6c6020977cb24c57dab184b4e3ed0de80f2169942f61684156714615a48b330725593b2af124c1c51472092442da1f42563128a92a6570055987905f117c5b4637b0a21208860c5267c8256a441536a4fd2a2a551fb0904b9e0569c7586f40ff9bdeb6d2d9c493a62864156966481769ee762cdfa46541baa844a1c65441825ca265d8d0289a2c31b0427edd74766d3df982890d648b0318835c6ada81dbb20a82f80513fa988c88ceb252afb4ca021f547d941254bf15547fe75dae3ad8dfffa506fbef881ef8cc3e1691c4e9332553077dba64d65aea4c0ecffa39b9ffa8d8525eabc0b43a6321d0646b3ca2607994ed578310134e0845213eb30f16c1e018180553c8d4c1caf64d18cb2b062ea90ad98ed4852a07430dab061666ac74a7ec5f184cff02adc1d5411eb41c32a28fc1848290d0359acf262d878ce8639936adc0317090a963ea709a3a6298b586f211cc1a6682de1a8a2eb95e64c7624c1fb3080255cd04cd67adfcd980cb86ca1f0db8dbc069a3fa572df3ea3fbb4dcbfcfd1bca6b416e4365ef570b3888d7f0c52e6424a1655ec520428290d046fdddd443f0be8a5efe5cc0fe9e18441432adda59f92382dda9c9e7fa624d1a571d3cff65059eff5283e7cf9d27552c3075e01401f272e57f69180401cf9b60f81d0886dd733fbfc3200874cf7d52f7dc78dfabff21f9ac3f14693e6b501c9358ff8d4dbd713accc7eb33fa2cf09efbfad86b2c607de73df749ded7918e49acef46ecb3f9f4a93e0bb8bfcf82eebf2008707f3f89fb3bca92baff4617e7d7c19364911fe4ff3e6b1f4b88c02447253cfdfe24bb3b3ef94f927bee0ea96dbd7cb78d26bd6d34a7d4546d7f1fbb7fca7c36bf8ad508c82c9aef3af3a3bbdb8ef9be1f2200993abc8ee66ae19f45997b2cd698332e96853c6f0042b67f77c45ca2cf9c71df12db684e19779ffecd9d18d441a6b93fa72108ae1a17c8d6ce19f7a0e833426659d658ae205b9bbdd15e9146d4b21c3d9b38fabbbb35b0e1a36c16f5bbccacc066aff659cd8141d2753374466ac70192070cf002835cd2aa3a25aabe65438ed8b2850c1819ba707384ec2358ac5ea84224851f9c88294e58aa964582c1badb6313f6dfb6a18b3be72af10f067b981729be22ae4ba170774b797182dbe2057bc080aa6b432e8fbe48cd292f5f723f1286612f597229b365bc4c89a1f32285092b23cf282f4fbc24e94ef3cd366ace7634db6a3fa84da7e7ad1e7b70b4b978a5ee2d1fbbae53d24595b1ca336a88365379469551928fdaa8151ab1beff73cd980b0cfcc36b4a445bdc40914bb30b14345091aeef07e235a5d91c5269a9e70ce91a9f46603df84baf2ae413f87d7fb41ea981b451c9fafbfd19845f9a60af08240d66fda522f7430420f73ef775f76b68fb3aefeefb95fdf89da957e1884c0b9059e391086bc2e5a40af243840ac4036d549240cbe018649ff5337f63901dbfbfb9df48d0057778b87fb94f14410422a61b27d511983a51998e25fed1b56906487bee282f4d48aa13d8b26225fb1532b99c74c45c52266a84562a14845fb112cc473fe6aca9604d4569d860111e72aa8a18c141072845a889030518358469c14c13ae850ef8c6c8c7851660e7e538e2d1fa2297b1298e881783093d07481e20f1f321c17cf0117a180cc9ef77677a384082dd918b1b78845ae62171e00103600f73bd2097b42aaf4a90918e0b183edb795f376d8adc5f136dbc7efa9d78d4322e98aeeca859dfac2aaec32deb3c1e62c017f8ca33ea882cb98c5171cb75b5bbafb4f83ed611558ea0217b79461d81c4ae60bbbbbde79c73ce59bbbdbbbb836609598bafa7a7c76b2d89a323af8573d69f040882d48326d8f5fb8fbc56c7d88c1e8f72c7621cf86a10046791125c2f3875cc7a450fe8eabc2398c03456b8c481610918354630e16285ab828b14eb84c33ca3b8dcd0a5806d9e515c68f8c933ea898e9a66a23bb83c65b6e6da46f7ba8f6ee78ea738fafdebd4d1bd5beefd9beee0c45c7fced8f59acc677d4b2a8b95d546f5aedea2b3a83e277ae7a63bfc65d3b6adf49958367c252dfd6badd5cbd3c59a67107d2f077540331d6b07348bb9e6395ad06df8beeedb4fe3d47246a169338bfc69adae8fc8fcb80e6df33be803eab3eb1cdbb4de9b57efda94b3ee4e7134f783bb77d7e3b827f649f558d67661c2f2af7aadd5f376762695d359ab401776e0790b0b5adb850948dd50b1c0436bbb306971b57a7b7368adb5be3bd7b9df0ec68934998ceac7f538cecb0d9edfd08e3fa8581fc779b9e1eb421b03c7d10e729c971b428e45e5a3b2f503c110c40f83d16435b4d91ab6ec0b6397a5b296f506d7a77407dde1793ee83909e9f8830b6cab5c05c1bffeed4977d0daa4b37252d1b4f6835a80d6ba6ee4d1b336a25fce2b7848f160c32377c779d78a6735c5fc26f8c1b8e64618c7715c73acef6381ff799e493491c9d605035cce38236be45e52e0b2e269a79d96f50e6b597d6135f884fab5d62454c8926df5cae0923ef9402b729c7df07da46107f6aff71ddabeb7e2f53eeeaa468b401df910614cfd02062dd770aa8a14b99c525fd6d44995eb736e4fa04cac5c5f09b4d6da06b0b2f83aa165f5415149a44c2deb36aab0afda576a19657a02db3a52265ab52cd6fb5b318835f6b8ef2f06f5d8a37bef67f670e8c17c1b67e3be456c4db0f4e70994a96b98b2a82b8c8f4271a6094523c5538ebf5f28ca7c46bf25d25a575bb4c83c6073b7b555b5a5c9a7addda49bd01d1d4e5165fa937a0369a3924736f221327d1f0ce0a065483cda88fbf0b9506c2ca67e6022c31f425aaa31e1cdb5b45593152c59689bca0aa5e0115a9c2ecb2008babb8f60822d697fe208e2f77dfd7384feb7dd4596253df050054b1938acf78ed232d6132ea9d3b7e341d45a2a0b35e50ad49736f22173658c99ae3949df56876a6aa3b29320b16aa636f22c997e1b6923c7429578ed6429a5565ea353d7aa8356a653a10fb8f5ae2fa913fd92be8042b5def5ada7dde483eae31f42b6c4a03a0641a0f5ae4f728d4a4f754c723d1e9582eac348d72b05d5b18424fc3b1f8149ee8c4a779c3e9b64eb87908d61b927d9a26df9d8515ce224add8b71f3005d233faf7d21cd2f7b6e02bf9b3d76e247d11a68e99e934a2fe7656203eaba3140a5a28c9aa32e2066eb9720192eaed61287e0dd2fe21798620d0a423532d9b4de68c7e9359d5a44937a9dda49b74cd738a62654b4b11b1a6de8a4021973dc5632a42875cf61522dae4b2a17c72d95f7a4c4f99c9f4bb0aecb1cd376333e0e0f2bbbf6f3f481bd5b74f8210fb2704e5cdf5ed98d43d6b54eabc0777c0fd59ca83ee6823dd188149becf4a2ce5de71a91b9fb87fb2ff7520501bdcb9849acb236e847957380ee082cd152a546c118289212f78a90283186d987471c1082f67deb458398e782055513159a8909821c468c9fd578c931814ae984028edefeea6dd3dc4a785022da15ebdd581cb5aa75e021d5c6b165cd69c2fb5d92fe195eb6842c5e02ca2ffe57bb5916c16d16bc517f71c774900731dc5faafdb719cfdb4f470afbefdd2c2480073e7a0a00ebafc41e73ad259d43571ef076481647ab1e01244722a7a545c2cc1e6ba259b30bbb1d4a75c6d01f74faeb5b46c9622eefa1cf72f9b3f3abdebcccf0bfc34e883fadd776369805c7f88154b6bdf6691cb33e661d05b4bfa1f4b042febeb9c45a3b358de08deae72b5d6af17acf371dc94c5de5a2b546dad757cb56cd66a455c2dd8325b2b078375072d6e99f3f0f73faaaf571b09595a8e5bf2c8fe17a475fa20c317989b13bb825b5b5839587053f843c349957913868c0d224c940caefbb18c7a32fdf05e10bf406cc587c50414e8c42be3f48569a1e7966185813b25de9bcb353175ab782c13569d1361bde2c2b0bc0923f6d28a703588efc5462acd2f951d9a6348685397465feae681570153532eee1e83f762d8bf92542f807822973430b8a7cb15105c940c519700a2d6016287271928cfa82b57a09aaceb6ba23cbbcbc23c19641006f3f9ce514a298b95418eb58c7ed319fd36ba2df340afeb38cbf2581eab2bbbcef33a153c2a4553c76ee4cf35cbd69ee0bb2fa118c8d9cad5aed68eb33de78cd9cad5aed68eb3957a7b9d7672d3dd9d6bdbd403e780cea21b970079ce1fbbbbced95e278f3c9ffb42e4dd753a477fbaaeeb3a19ed889bb5af95ebec77b1a9c3df8f8a6ae49e4242a27e3df73a965781a6d49c9a54dde73a087083c53376f5b11303d37bbfaf03e7bff3f01cf745346b0ffe234d2824f7073ba459d43f754c1e3165f56e58534a713ba59e6983f4824e69d007f3476af367abad5450b1302a985e8f35ceafe5cd93b3ddbd9d5b8f0ac77163ad9ebb15cb589e5e41f7b27a5468f51e1b30adf5b9e738d1561a91c5a00bbe3288cea2d94d9bce164bcfeddd9d2719ede8bbcfdb01a236720d1ab131fb53d6e5997de9ed40efdaaeee3e98507727b4b558da164b2e7767b9ebe5a31e0b0c5bae1064128260151acde579d66a40cc1edea9b2faf131b1d6b2c20f44f0852b2bb4b91182f15c26b7bae179793f33e0c99395bdceb9eebbb5be486bc739164c5eeeac0ec3b0f2f5ecc25615d5f73f7cd6442d9321893e8e7ac841a3b9cd73ba7095d50fead4ef0d3fa83ef85c3f8c31b733b9f1070cb673bd9d1e1eea3d3d62793f9ccabf1f9e474575b90fc4ccfde74dda2dd63867d1f580b48c1b6bcb44e07e2081ebece95c2f346d07318fcf8f0cf04a46fb3e07ed133df059bf429b8f1d1f308fa3a31dccd3e51d3c429c32031df4e7c782f8ac3be8ea602257280b02838d20d4d607d446a0100c06b262e167f06a197682ad82643039a09d3c893a3ab52073d67f31eea0aca03a079945fd3d44300942c20e829cc1565d07d542813611fddaf78c7e94d40b3baf24a2b287e1a182cbcff4fffae702a642bce1a1b4a6cedddd55707777778fa24d3bbd35edd0098d1e155c0a65ca81c121f7d7a6eecf810ba43f037cb8bb1bcd5c79c0206924aac87e8510fa58940f0500bd1e88c892030a2940a120851a34705cd00297313f90493f44702f22fb73e0ee2fd4322b5c0a651a652477eecfc985324d904a4bae265ec0256d62f8624d1acf3b62441474b4c8c8a11302091bc4f0505833c518574548a52520365bc233f58b942a627828f040f5442a2db9686081489d1de478de9a354bb8cbba9dbf12e5f2648c10a4d2522b871b48ffa54f862d647da521333e3ed13a3eb9fe5d75ac78a9c19fedcf76f8d9ae4a7554a24b38710109a9b424844416a4bfd2924f16b2fe12b7e689f4f99e1f42fefceb5fa3d2cfa83484c67dc627d7d77ffd1092fc97d823d22b1eb0439ec6b6522ee8d5d4619f875e350ff8d9ff59b35e66cdc7d7c871a3134149fe3ddf332af9a844d334e90087545a82b199817cbdd252cb0bd27fc9e93441f6f8bccfa864a57cc67d1d958662402a2d4d24c8d768a77a03ee9596e61364cff8e47aff21e447077f79792cf859f506dc7b9859b350ee5253c7f7d8b36309e3c291c732f18d7816718fd42013aeaf4495d8e18635a4d2524b2a0bb2e79740336348ff2a2a0d59914a4b04207bc6a72f0e5e9a53a48f4f2e9f0980cc7d8dcc154d700cfc53072b73ff9a3ab8163722758b6528e26f9eef79c4170388c8fa164db0b9f5168a7b2029712acf32c78d50b63e7cd7cf10ef4c81dfdebc66a1e68cfb5b628ea70bba19e4e1f6c833967867fc20105c8f1f8f2384347c00f82d1ba5659c4bb4535ac6d95bcbb8d2de32f7168a7b8e738e73c15ac67d28c65ac63d2812d15a5673f979ca5ac68942e2b78cfb69abc2f6d9a28bb766cd12d74b0b6efbf7626c2d2d045a9bd388d2726c3075d4f7ee6131c06c2615ad5cd226986c7fd2b98410ac65d602a9c1ddbd770773a3906589af9671cf0a67077846515dc9159cff33bf76782ecf8e88c7b11c42c3067ce1bbf8f2d67fa0f8424f60f04b188ce61adaea77ad1350d77f33ecba2b96b4e50241300492c177b1133bfade8726d8cc628daf1efeb1ae196c232ec7ceac6d3067f68584c2b0a451c1fd25cdcad7ac2b6bd6e4b0664d9ca96c5faf96d9eebf30d8cb650dc1bf082e3fbf3875f443914be85c42e7f2a99c5914671625c19e4b562e6b9e59a865d6be1c4cbf7cf9d41a352c2d4954b1a0464d573ac32cb25f7aa64a7a66690cb36dbde018376fea98503ffdfdd50507cd96d9ef25b75cf6925bae2db3496350eb670e1fd75711d87f672c2f8847d7d87d90ebf163117489f77e5e4bc4af9659215ea34e23cb7a16cc1860721da9134dd23d5ab98ed4e90a5c12114d22a74ec9489310b1e038d1245de7e5f93e0b01e6022e61d9c967f67944aac4bfa44e6b302bcfe746ead4324b0497d4c9e9a3e18b35693c1abc20ff30a227a874cdb744392a119100000000001315002028140e088542814028516565cc0114000e789a3c785e1a89c44990c328ca20640c21c410020001320304342352001e85460d7ca22d3d79c9c11958c92e6203bb63da6481c18b25304472e29909c212408cc7caa1340486f8b6c040d850587a20c5498e6d60e69692289a273eb431618ef888a516c6b97b6fd70035335dd4c6d2de74bf5619df21f28d9cf17468a05ce5e53e1e63b79de5e611eddac1ef8ffa4e8090bc7e17337528619d8c205d3ce0a3367d575cc2a68801e8bf33a9ef9414cf7ff5fdc023c0022a303de92ac7e92f9f1290267589dc0192a11c3a224460d52fe01cb9e1b8f27b67823a5dc11ed688a1c267b712204c4a969a1059f1d66fa254941118fd7cf132e13b073ae80344194deb2c89baf1b31a263085f2d1f4152a9772f732d77b98b354c162db43051318fccff26fd1136cf6c3dfa63bcd523da5491b05dc31979a038352802a018952bc7d55a86fba821a4e9a3d82fcb51fc14dc1fe81d3e77f77c62509795e26ae380242e966e4e8c4cb886a19608e1ed4d10c26bfb5752c85a84db7319a7f521db6affa63277e8ef226aa2ece9e4171d87ee91e700c0883893131c788b8cbb5015bb2e14273a49d7419e03166ee970d799eb9c9ba67e3e3c149b5f20a9383e9a4d2fe5208d64fe360edef01db37d399360ae11455ca4e424cd4b16809fa3f4db3e324bb22b39a7009d8bf1ea9c327aa45e22f9c2f37bc03ffbcb990bb7300b46c17706b2063a71e98ca928ec8b6f7043d09ce225d656df9976965045e987547614b455509592cd867a6af0ad2f32c2e24d6e369e234ec707553a131ac878c447db56a5c8157f8de296e51a2cee70b5a3b1afa3ad277f4d4188afab39a9a2af0ad826efc1983c42d31159bbfb087a9217392b9b362aa4303e6eed4a3e919aa2db16cf430951a0319e1b0e5dcbb513d13aa0584f61a71dfcd510741a32b8f8dd648ac8d72c03d2fb1490382217f392d5f71bc38a2b79574103e6a0c30277495c33a1b1879de68a7c6343445842fecbe761c872ecd27c1ae524e55943cb0286e3e43fc452563c87c66cd27fe9d193d4004ded9159a55b57930665083619e93fe25862f31b5922e05eb4a0f769cf83c0130a1ee90e0e18832f2eef8793a59c23ec00cb2fd3620100a2db90faa60ddc9eb788671d619344c5f659ce91d0d487adcf1467741311bf10113e85650d58468c7a92f02991113b4e45582c07bc66bf71b038cc969c3f2b87f034dd1c38954937afcc600d4e719eaeed648ad8b8ca990c080e726f20450ad0a67490852ca9a4316a7f43b55cbd9ed692cf8937f3549b8c4691b8efada2b5a1efe2f191e0efdbe0bbb3ac0715dfdfd996b641cc88c80778c90bf04c24b495e84835d7bab634442159402cfb6a9bea15d90cdbbe36714fd4c2a7ca8c9c7a259be08477973b5a905ca648f3026d3d140f9b987d863f0ab35206841dfc08d854ffc99d9dbf537a225eba70c633b5c490300f1525e424ec8c9d9116eaf1bdd7a9c527998d75f8534b3511bb06f752375cf52eb0752eaea949af66fd892767da122c6582ba3fdb33fe9f54ab021d512f148e11cf2ddcdc015c41120aedcd5b7e9a2ec532c56087c1ae5a072f9ad048ac06b7055c8d7a7499e5c4e86022985c0ceb68fbc09103b85ac45abba97f5956389a9253e783a4661f0bf0dc6e8a62031645c5a2732a26871c6a20a8c7069c1165874c83f9814913e6db36de2b2815d9371bb4ab0b96cf4eae194e3d1fdcd6a74050533dd007149f91b45360cb177d42d231495bae15280c4da1e56142f05a1e8e83ad54bc3a57e19b7b864238afa85e28c864bf4845b9990857c659763cac4115d6e134af57962645a966734e04f6a5a8264803e464639ea6d614d4e30cb45a4e7d2fa99037ce612f328a0fbb40d002363d25f5039f04178dbc9401a36d09cbca8242eb69f3525f403ea27471ef740c04437ca11d150dcc142f4bf8652f6ca9326fea52ea61e527e551d4a4a44544e26979a03824b7524d0ad8e562d90b8ea175a9d6c6d661807cdc24a040cdd4236adab1bed856c44a93798299991d58f6d4f9642a23eed77da65ae7cdd83168409ba1d7ea0931b556cece106707758fd3c36f1b1a3c1e973ecb278a6bef131d1ffbc2287c9787b8797178895e328f770a5ebbde476db9940d34a86aacf2e4fd9b1dc3fbd1f85b0e21da23a8666023a14ca2d98ad868df4d4bf054a5a53902053498a4f84f642b5029da3298be609514a171255f28447b61c94e8f53566c02ccb6d9da818d03a879815dc38e7cef3b60af43920e780e0afc89d6f203e2bb3d7dfc00bcec02441404017fb47cc3b25def5eda6c1b9f8ef3362384f5537622943108b657c20cc6267fb300f070aabb7339c47b894192e1f7a982a7d781f362c3609bb81913ae844934c9ebb07124f826e00b07415e5a9e49e87fec02e68c30d1588b1d360c6687e63a920b6f97f3b8864f6948f79335df51f82651fd009253e9197719a3d30cb148d8fdbbc392936ba8cd51b9d72e4993d654e5dfb1eee80632dd9f4d668365dfd7e2a1fce594d018b446ac86c6ee50a3b2d02d267d8531d5aad0c4cedcbb5953f88c0d72938fd4da61310dfb2ad8acf2f1f65d06f353d5f40f85510fd41d59170e04068f553985dc15c9c1de9d8293045f902197382fc0159c16377eed6b9d7bf9bb99730123f6dd17f3c5e96d3fc76465f943d79fc9d33c3590104547a643c0f6c49c6f1ce51d04300aaf18043795f95941a35d26060d214f1e00d122dd096a2b3ae8d07537bbdfabf13f3e00bbe997feec6b4e544ed7a2d6d3c2d506780a92baf439bff1be12cebe1091269bee54d4206217153d00f850183bdc82c348141025356371d6587f4f6b9463dc114c8931665a1072108feef8870fb2c361d32856ca3345312c12dc411206ea02e0a3a1605020ae06283febbe07f6baa9c9d489314ecf80095e5f5beb8ac2cd33ed4c167712d8df1e3b52ae43bfc584eff7f72610a47dbdfe9b28373b7ccc461a36ad582946888c78ee8d84ce34c1f89bd6968d50fce2a0c434188dad616b2fc88049d0876f9be0fba9a73529b76fe2b1a42c9d406f1c27958f228f455813a1c7170189b4035bd0d1a80daf8d736b316044120e27c51bb40b425a5e6c8058de798c09a5fea9ab1eda25b2d4f0a0668dcc0aa3a6e301d5b00c4c0a025d702db7d96a35b8fd02a6ff4568db10ed7ead32dd596abe79855effdac8570bf94d974133e6c9457ff97d7e8ee27b8fc75698277977caf19c32743d52e1c8c3aa2c9a6c3bb7dcf3d663934c09b9b118c1e5498d01047606e4427493d5360a1a87e9ded6c78b282d4a79f8041a7312202ae86296348fb8b573d25a56c1ba41f8d11c6051e24cc9b882de82d93533084265a01721d07407e36cb3c58eaf3923e8aac80b2843159636d326bc4716c6c0a573f7c85af9b10e1c6038f07ab75594f9adc3d60d0b6c9a653ba73c066ec078bb0816db086ee13a067c725cab109e6f5f969ffaee816db1c8affbc4aa29d18fcf8308c93851d3a67a7bcae51bb894457aa59b8cd2be51534fa564bc37464628046b28960ad6221d086b653a70fdce7c36fc6a89e51ebd88060a146db004720a3965c7d9cef063113daa68437d76bb5e8a5fa7e38e86ed66d8bdf7c77d2b7bd3d484dd50f3da561b3eb2b0acf83d6c97c4076d0e979b0d23a0f07fe2e77a186dae94678215a256f811fa14bb82a8beea3bf23b8e4ea1014c9a15724c8169dfd3c62ee6621b7e525df7cff879aaa696719a3279540042606ba625dd2beb67ed50a5dfe5d5f1b1d8f50582d28e9a7066d90fe58cfa4f562f7ba77aab01faafad6168193f27f0a580a324c1785a2af18039c8ec7d551319718ebdeac757172c2017c03ab2aaf17c26557fe56d4b530729154782dd0e1c86d4a7fd98969675da92e379ecea20a335ba58e48cf6ed148b38fda3e2f274f6ed461fd7f4ac9e3854a7187a2caa6e3dc9780f1f23c69e887a8bbe4161fd5232f85f462db50b7d5fe7492b83ace01c9b6962849b9ef5b8484990a583bfa7840c04f58990efa1cc82256ab3d4190b5a081085a382770d34ecfaa6768ce186a09fb83a3d172a1fd7f2a9937768f219a5dc86e79f51573957768a90a97389257af488d5f80d1b1e69739dab492e3d9a8cf5d6c6b08c913658363a41578a476a7b38ee324d352167d1d9770acc510cb175ad2a2655ced2de06ff8577bb4e106803dbe63b13b5a95d38da195b7171b4c632e413d942acb66f75d4b6ad1e29a9c93c6872812136a56716fbcc06443d999a06d1fa7a8b53a2e235b33b25b94a469340afba3b031875ddffdf7f432a7f12b3a56b4bf31aafd20314a41e4b59d55e1e185eb6fcadae7ab42aa8cd9df7ceb4b715c4ff95de6ac8169016f6db100058f264d8f1c5758a7803f8a9f74083f20d7450b2e07913eaaa808654a61893343940b0305f9a242d00c2c23da142f22aeeb39d52edbbdcc52a049f5372632d06b702664d4d97240846b7c63633264be71aeff1abefc57fe56e7b7b5b35e67fa29d593024b0a9bf9196e73baa8054888a41dc41e0fccc23164fd006d3cab034f55f564c72942cb32dd59310164dd7a0240a4b97e8868751be16fd61abc0697d27c4f970c41961dcba4131fe0e7c916d3a98f3880700d331664f7f299e7ec5862c8210045ee73ccf5d4500bccf27c156446a6f4a7e316ac2ab754a11a0d0aa6426d2f3ba9934b4772ad42ff56eb7ccfbf48b0af9b9415cc37e2220b661787159be4ce44082493aaca04b1dcddf03e078a2d6354e7b0f02fbe04e7b1f843c1d71d6bf151091efbf927c528815c8751b69a52c00de3fdbe58a0791d37b8700b3f597e0a26cb2bb9a012752e097d3ecd20e8d0871ccc39e4c96c9ec96a32d7eabad788ebc1a845d740d63a9b8d00efece28c52ae72f54d3184f2b0c72625f266f1d504b4d77dc07090a6ca13982326a933e511120b59022833d5b85439bce8a6cd69100776e9f47754bec832dd9064c04676d274699c0263b54bea2e77ddd7cb441927d7e7c88e32745ba031c1dd447cbf3e4e2a83da0ae1c6c1a1ada430c1eaf2d72517f84765d75a360947fc7f9c0177126472adc9a0cc7a4208f0e9ae9d8c817915ef03f1f2869a5facfa097ad75d4ad41249f811baed2ea30d7655345167779fa1a2ac2ec2df45ff217a8993266c91ec91c638d33e26eb77af9478158a84b9e4db63af75e7c4bf5601c38106738c069fb0b8c81517f0c25fe0e34f810884a7f0f14362ae35ec67acb1d8ea641195b6d7f89944b8274f3103f89f62c003341df487436a6f1efdfe7630c4da2a58516f0f14db2196e711ad4f35e2938bc13f77bf2c67c02584b80527317d460685d1e9d7807b2f88991c87b2b396f81522a5a8d03e207df2bc8c921e8bea5367f9f6398d1658f2b4ed2ee07c624df953c8edf47749abd9ac8275602b99dee264cbfeb251530367c44a79430405766ba5f3a169c8848eb1813656a8fa388aec4c4d3d2d830b6c9a793c4b6857bed0b1f6ac8bd8866a5a3f34d636c7d12a1e562172742db9eba67877b5fa2d1144b9e14a4fb9a64930f7e47f78239116b6c4b6a9e43e3a0cacc72bccd1c2ac8585923efacc65c94bd92781a4897e47cff241c4e027849f47d1cc450ecde59a1c894e83816a522493eb51d31d75ceeb22fcb6d7dab7687daf7858c8e54b7c1a45d582ac4da1f08a48dc763b8dc473ec2866d117d4e641e1e5e199253c7fc114d2c187d7ee9d79a55cf43840fe0a26e9835878e6b2ca189565db8862396d831726d3395296891ac49c8bfaa3621571cb618fa03463f88c094da075ec5a0108956da170c7f11e5732a628e46efd761b923e288e75df463b1fe8010377c35e9b5d4257b5e9719f9f23c6508f03095c72f6e97f9199928308900076874848e7983dd29eb74ab81bc5624256b09baa0e14f14d9bf463b83065cc5ba75ec252bb5c14d2429d5be402a60ce6b3ade59fe07751bda93384bd4de547e182a54643f9c4f0ae7eb324b2d7115806f5c4ea30f3dbefb9071df94433d9347210831941de422c93af7520d96710873e2ae8012c4675a0acae90aa94fa20e820151ff2aa61937873eabb32a58af8015a63c314e7841c7561468aa7ddcb77ec2e1b1fe813120b0f8a96d16d3d68f0670809723d0482f1dffbed8bc199d6434e8310f58c34d5bd39f153c396446e85f9f695382cb663cd9b3a0db367bd820442b6615b1ca3c31faacf598dc173a41a347f9c4e9a4cbd2d1d03a33608bfd6fef2b0484dcbf781de14fba9b75993fd3dedc3813acc59cba0fc3be53535755bce19383bcd5c1e4f2198e46b128d31d5b86be90fc338ff7598b3d9b241b16de0ca029211286a5d45ec07c528432ba4aca861fc60d10cd270025f8a3618018d237d77cd9dc15a640feba2d0d8107f3055362b91662a3b4c9ffc210c1e2edfb99a744427c0f7ef2c0e876f0ae427528f6870ce2f704a7c53e85e893c4ac66f2c8448bc2175d05897a06d70fb989dc3dae6c7969daddea12980e61cfa0be064362012739a9b58609bdd48926108e9b1852d0358378b2b8aa9a4b574d8b4883b854f5dd26b9c99a8c6374dfbfdf3a9c3c1e08d9cb01c99023e45679d7772b95ea5b6382140a14aaeac8d37cf23cd881f753373c293377768793f9db70b429f7e7aa72a429636bb9adaf675ce361ce2132ecb7c5133c3888b9db907e1d7e63873f005ca50530aec3cb20c70b603c5f1d0616d6d1181f180219520995f364f777ed7ced380283dfa99c1472f0669198519e97a3b34bbf2808aa17e1c4ef42b40a1453a1d674d08484bc4e3fbf0290d82d1416eebddab996ab687d1e975c14eac3b4fe19a35a42dd8ac71f7ee4eda5cd54f64fa35da0cae6f8188e22841530072e17a20fd5de0db272679052e8c63b54a69a2637b03fe0b00df83ecec262033832edd8d2e5ec914aa0305be01ec7a714ea6e3ac756f2621799b38532cf2928180ee9a47e65470ac4c4811092c6b5a42c9eaf2936fc4f9610b5a5bff07ad2db208507db765b93dc7451f885b3f7ff1bb7f8caff18a13b607cdf341d5a92b994d18f66bbad1c045282dd4dda08213a8866c829e96dc57804c6a1b2c3053cba240e0e19c6f5879a047c416f7614672df94bf0f52a421c28988650ad1efce6328f542323111ec810f4825b5402f0e96176da1fa300ff0c7a47c563daecca5c0eb076f45c2597e0c2df90fe14b2ede6d3618b360ee302d4ba0f88458cd6b95b2c251c2ba584357634e35bad32d52569df171ab20ea2e7cc55912c768fa0d1f0ef51f7892dcf98429ce899b367e5842e176bca27c640c707dffad71ba3e0d819b8e7bb8820a74dde2682f49195fd236f5a4c88e9dd8f3e9d9cb9a7ca35821517b8517dc5b0d6b150a0bd8c128bab12a29d9df5002724c9044e69e15349b13e97543b5dc3619fddb3aeb23584a87201328c9848065442a95aede7d6719b93db9423d53aac52643a91f3c06021a217a4451c2fa19d650985cf19eb09f5fb89d8b68277bcdc041cd7d67d33cbefa241833c629d7303cfd03bc53eae6d8d01c66a1c6c6565360c3fc72151d848b91e79371d8a9db79ec99b2b013c8ca34abc660bd3b389ff9afece3642bdc8c98f7e7c6e6375fb41859e332853b701802c5429d7256cd7bb9b44b8a8864b644938a041eec70126c89fbdda318f54d2301597bf8fdeea76dc0655eb84d412adb942f7aa400b64bbff82d48d00c5cca74b209eca81563da54b1f1710100890ba7896d35e7bfa3e42bc5d493cd040a1cdf44a42b04990f9e5d5b91dae9673c61e5cb096756478c526c3b2ea9944289bd7ed8e3a23e9c90a2e12cfa40106f4a39ef0bd9d5846336afb4c44303ba39f496b857944ebf9cfad86908cb0daa3670306d5fa2d720f81ff9cb600367f263b66b7658d32e85b1e5644ff011c042e7b6ef6d440cfb02b82dbf567dc9b76219762c419bf966fc6abd8c21127ae4ac1215bc968ce0d10922fe55d1faa240d85f123d8cc6311567d20bd60080e1bf5adeb8171c97e7061f1dfe63fa601b925cb5bf3d945a6214ab779620a90d72b92e307edb9add6a7e7e6c2966eaa7f875b3305ac95a086171b2313d257d6048e12e297dcff854f2445087390bb33d3a6fa1bdad4ba439c06211788b91352924d1a6aa44d3efb48c5fd3268b66b6d7a911b8eb7ca1a38a24b90483a1058631b27dadee3efb09665ace1cfb64a738269f991a274fedaa85d4d2c378d71acbdad5f26ea68e0e65e0d69617e7e5bec37350f9e3015a80babfe2c251678110c1b5d803a2324e32c51a78bdba5d7cabf101fa1acab3a9ee19cd871ad05ea1dd36d28d660104e337f7a4256dd578f341a69539406adfa1275352b21a250dc3b6141c3a818d001f634d3720b3b746c93fef1947bb4c97060958225b20fe08521364b81b2557276944fe2e068a938cf4f9afd3fe2118848e2ee625d633ad51e1cd1db10c07a5d26a2c7fb7c74e6cda767f52a4317a1b39324ccccc328326fa6615a5ce06de00641151d2485536b045bae274aba1e0ef7b41c27fa7fa5bf28364cc25ee7d6207f978bde09112f104da8801be165c748978f94cdcc6f4ce466ad06af9db16f5d2b618ef0a171b3ff4e45f5cce2817a36f8b8a567f47416f399feb12cdba94f3b2890c1954cac14d280948afd8ed53575c5ab17aa0ab849c00f7648695b2ee8ebb29b19468c6d76113a3132e712ef3e9974bf5e831ecda3abd31221111eb88364f6d28c58b21a5792bcbdbbc631314e3a33f8d6a9d954c71d3edb549ed3b5d86b8d4516f1b8de9e5aa3911f2665b359474e523918879dc59f7c09b28c7e9b73938e2f63ef88bc81058b89a6eca1ca07b5dee43bb2ff50e3c3760b49234828efc1bf2e5aa6317cf07566a8375b20af0cf36bad621c1eca9fc22e23cd59a0fc939d050093410b9c255bc540003efb9f28360b2c639f8e671acf4c60eeeb101328e8c7ca434a55d89affd2d0c80a4571a850c1f55b5dd5fb38361844be17a9373ff83f6cc5472a2bb67fa5119cedd9d2a13bb26f2e6f805924c66a3a538b101e6cdd7484f76a0e94c95bb1857632cca72e41c360d34995a7f72366e80c9c850deee3889779947a34fce77830549f4491c04a432a95595c514fb4bc5e01cb47705935e260760724680f0a95444bcc1fd11fae808538dfe7d6a7d9965bad4314a165c5b6cb6b59443db07b10087fb7d11949cb7b8953775f143133f1355f2bc5bae9acc7e25a0477d8bb09a471679b115547eb6de682f15f90566e95bf57dba72a921c84d189599601f0d6f41ba8f139bf58e9c435d9720530e3c83c961f27605137e8d05b49defb6f83c0d03828991fcc518be6eb739898a28f2955aecc13e48dcebbd774a9665739ac89f7ca0c77d119cf7451f9821b2c7f6a16aa58cc0fba8443e6247cdb8fbb358e90e46bfea13bc16e790cbaf290307a47c4ae8317f3b3ee4a1c7239259cd0eae0511c62aa8ed4fc2f1bbb7c997dfd8c7de6c06c4768cad0bfb2ad5d35ccfd06f5ba118eceb4f2b14f5a26d23a5f41876ecf8c6e007e583edf068b6f7c3238345d24d28f7a3ba1fcbcfab50a53107102aa0018bd94e62abbf9d311338080d8b4f5a52b11a155df5c910bc0a012cbc3889001d30d932d9828c30f94c70801a4e81bc3eb1f5265a560a67f7d6f0098eb62b02f7a41e2298ee60c7dbfd1a8af91f1aec50bc7fa8996d9a4556a7490532247fbefecd0cc3dd74a341428e01b01d9581fb58e990c9ae646afd6db1fff6fee93d1423549cfe9c2b4e72c9f58c64cda49a8213fd5263ad9cc13f639dfd739916722f3eea23b20726cff245461d9cea99e0213971fa851ee24a925c40f00f3370d42ec85e1f126fb0a0589e75e6a84bbcf9125b87bd5656f96d5046e7f8b9b11f21cb8678ad89e984a66b6d85fd823fabc1fffc12d377b08beac76874a0ffdfb5c05e4e488550a6093813851cc5c936707a68916a19ca76993ffc962ff2a679eb7d0ce4c3cc7d79a157212c427e980f7c01fc2fc99f32ac9d7a51f0adf8748cd5eff6d3805777181628643d8f9004a084782f845164b0791b074f303f74cf07caf4c1c0c634c7823df93f0d32a9f24c0bf83dac029cf03255ef4f0e90013fc2745667fa4c25307c60e15347358f70f33983114dff9672d9765d653e4cdc6b1cc3e905fdc2aba1877dcd4a7067e0671d0c836ad178bf04d4c46902f696fd05bb598a86cb3da770ba54da17ea8ead433cca024b6262ccb9e05a956ac1fafe0733cb394e5b0287750784475ac3150dc28bb538674cd1c7531346f5a2a28a5b3549391542867825dce95698adf7204e044a8493d351693c682e3e9065137c8b49e934328c461d6c1c85e129c3843e7f343f3f3f6b9d6514929538049b0a84d5411ff2609e62d0eb347c9915470c5bd4d6ca7fef3bb81c090dfc023fa038cadaf7ef0a1564c2f6af20a004821fc62be13acffa09e0d332727b1209acda2707faf4452d9cd91b392f7851711917227f79e3d106462abb676f4df65a2660053fd32beae00ff62ed25a7bdba38947b05a6213d5b5b2ce4d6689413093a96d00fa46429914918d655c4243841200351fe9442baef7d351fc09c54500e0aba70708ee2e5874edeaa5b1cf1b49ecb3cd4645c84dd26c34675ba7d3d4541f11c49664a3ddc2c3aef1377e3e4048ac9639fd0be9c85a223253e91fbcde12cd76bfa4ea26308df6c538d2d15f9aac383785b011e66d2ef6ff49a50539507ff860d2d72f9d01dd363660a0c0ddc634488a55244f088c318865bd3423f8ad3c827cf892fa89fb7819c65a54f899d310cf5d5a1c3210fc296e909d3be33b42688eed1b75eee6247895f879c38196ba407dce005410287488c604efae3194d3da00c83d55b47428cea0d36207de9c6a3fdee429a6d0b7d2b8f77db7e061bfbd77a5fe763cc9fe43d2bca14b4ddbd0cb0048f6c994691dbe076939603d472921cf4cbd53808d2675debf30f0a7528460d4ab529a2c8739e7c524e5fe4fc12c9b9960e7501233a40c61e85cf46c3b3f772dae60a4549ae7b8aa8b009d39ae73cd5652e6375fbd2962b6e92cea1054e641878323243be5b787ca145b2ed855fcb2e71be843036f2d36a5381c014b344ea1d14a3059754f1b0eaa0d4178b8ada2360b30d44ba34d9c89b94544fdb98c1b508302eba0c27df043eb2e1c587d28d35d6c7ae629b23b7ce5578cb48b0e70f5ade8e2f2fba5fb7299124e7988c4c6b917093f10dc03783232dada1e4f819222bc4558b89acb27bad0755bd88f6f2c11c59b406f2e41649c60e5d7360956cacfe866a5b918a43d197fd584d6f721d8438efd0377c59424bfaff9df25333a387d6a3191b7abed78bfb7b469f259985bdd0dfcfc7d619137aa420e66ef7b5beba64a31593e7a5b049dd6b75bdbf8143f92d789c0161860d625ff8e542eed6a551b54d546a9a842f2f0b5d0b189f2dc5a26ae2d42a8787e4b62db809c08b309868669d2783758a04e5385b5cbf8170da2dfcaeb4f236908a49877a490154a085bac9ab267fae432bcae19e5ae476b1d366661bc336cbef0ac03a44c9091ca456cb976ca94eb3241608148b90d17833e111cdcbdf86fa7b95af306073fe5d0a24f9c32bfc884f5e793b76b8bef0a434843109c3f84cb3febb9ec674d9fe05b8699273c1f0f7e6f34bd32d791286044fb93832ebb82d6f087c384e12f6bd1b18707df2cc3d518a84712a686f49318e07ddf2b1313b5fbeed1cde8d1e0d85a7cda7665fcca588a310348e41a8874272d4c8f92cb74089cc924c8c94db37d5957a264578fae92f1f15e44156d7878d9a8c63e6fbd5c532221cd6c712e0e2935c975559f095cda898ea014b18d36cf2660b2926399e31dc023425d4b750868fa7f44efcd74485267f20886484be434114a36d3065cc9ab52da4605c70130cf087205ce96b6ad747d3db9f51a09ff9a37b2176741fa0ff4dca531cdc9d0324a43043e1811091f4cf1fb65a7c1a953db26e81b54c6b0c40d09ca6cffd9972dbf44903da39ed4119eec899d7505c7b11aff1e28dfdd12f9d8a877aef75823aba0d3909b14a03da549f9113f65f811628e5ff4cbe5d245ff2ef4989ea93e24efcdfb4785050d0631067c1b2e082d03bcf161ff79150a075523d89e0c4546cecc92184906a609fc8fca173eb16a2c988e825fa01b61ab6133dbcc7198c4987872ae02f6805a4bdba75672d95f1f60ccb6bdbe049aef37015f158a68b47bb7afc65f8e9b9433a4ec755fb8f6864df1b41a878ffea258bb5bfbd4391e27970348f9959a85992a7038dd2082d4d3f724e6391d6549712747e53c5d494cbd0459f6aa62ef52355b3864474c3687ba9423ee375116958cb65f10c7bf69007325ddd013c8bddadfcae35fdeb142fdb271d960171eca77fde2268ed4869e2e5ba3aa7640e921d036240fa8ff8d4ce28e894e7e2dd646ad1820d8e3ab08ff41915585d53e47325490006ba398b92ae916598f3c5fbd24130d8f511160514dca395f252dead8f989f1afed224a63af12a50a256fce885846fdeeb7b278b212ec5543d1aeda6b571121306689b8dd499d07585691f41b4d0e5a104856fbd264079626ab168920c5d6c2e78e4d0862c0809de514e3d49cceec15506e7468f0c942e0c884f3318a55ba132d25d9baef3ef7e80d78871490f11f313ce194e1a3d0264b3689e4b518c19b07a4ad186857f2c3652d18a9444d55cf337ceb649c8241e09be49f58a2114a7c480dbbcdf78637d753d96a7ce7bd85d71e6d1fd6aa8bd409363dac0899460c95c1376c6124da0ff58055e1ff94c0b710772d884357b9937c5d9e47c62c9848eb9ef7025277d3ec77305b0b959bde794e3017cb58cf8feb5375f3987a0290a04f716dee482d5d68de26b5cde606075681288cef4509c388cfe55c9766d327e0314e387258ace343da83f6185ad200a81f7c313e3deca70b3b88e5e047bc3dc0b8ea8c26da9eae8002f7adf83e3d9ab3b2cc74b21fdce594ec4f9a9227fb93111f7d3d8cec5f7d9cecd2237f9f530bfdcf7d4d778e9ca34b35143f052251e3479b18d02b46cb01c99c643bfb10d4430c135aa863fc210781cc81a92c4fc3bfd89cc1028d6f13c81e3243d032bb79c4872ed8bc176ab4ee0aa5a0bd426721a0b238f316e47595efe44f257b3557ec6a5b4439354a843a8b077d017f4ccb4d21ec5d4210609d86e95ed4025f33b1372495729be442cf7ba0ebdd8c1b40c7aa41ad05d7c855a7134df9f06346ba913b3900f0253f7d1e8b61c84d671c89ab57790294e0df4d007a769257055c5fbdcc2b3c459cfa34422f5bee4dd33bd8b1002af8437f6e8f1859be9dc3abdf22ba29bfe3b347bc1975ec5756f7617f3290b641ac8a2f56883383b34856942fccbf785cdbb26d8b02cb83436429b1142cd063a025468d87bba61422c9752948566f0f2ef06bc846947a3f41028416b3c521f4e27a97995b445a936ab10984a3bf82e298d04fdfdc917c9bf203c7da4d82c4fe2b9f8cea3c867e766ac94d888871f901bf38a9f2872ddc16dbd3d38a3104981fb674b3039f2ad8e9b74ea1f11eb4f62a3fe9c52096b68e338887db911e34a8dac1870fe4c854239ab871c142340609bc7ef487af9215186269eb88048a23466e4efe6aeae408d95b8168e700782f616c93b5346817fe90fa36e26339dda5093089151c8457c989f3294e739124818ac09fc7d35c9f005b621b7ccda1bbb90599f19887c4c1071d0c3f0ceacc76647bda950486073551f67c0256fed09bd2c54011331fd1708de4fbf36ffe009b660ee6f1773ace43c665b8143e07bab80f1cee87a651bb4e97e0b86978c3e172b7e7745062947d49da065ed5cb219c6011bd822dca0cd082afc7eb949f2c64ae4282691d45cc94f65ac78a9ed111a0bdc2ee2d36fbcfdf0161d8f8697b1c4985db1e91108753a964b428ca27d3c163eef50f44f02b570a2372b8334cc9dbf276304a9f27c2b2de2f1eff3ae2ca5a03e54fa7fc2871c3a6726b240e28a5f40cc76cb7e6e07d7f6efd341f0c725fe524155d07828ad2a22dc468397dc041a996631a6aee3d8bd0ad53815bef87ad24d16b37f9435adf1ce512803f6cb5ba847afd46693d7f5ad11c1761018bacf01105a4227571a7bf28b40253bad304f1e2e640350f9d966ee52c6acca1b645fd4a0b76934145c39b2351a796ac8e0decc28f6aa72f80d0391262faf74807bbb832f0daaa42b3669cb4bf58e987b410064a16fb23f6f8a3d51f5c5a6a11fcf2ac383f8e999fa1915428031a2a455f3575b2ffab9900ae7e734f9769246e9a02b87534049b42749b22ae94763acf26a44bf1f66d2a6a1e1e56e874d55d79fcf6ad94042726e2de0474c9978eafe135580dbe924d73b0869a63a973f8d1c744fe8052bb3ea6f5c512fd6f0ee87b6c38e13b1c7d925f55691709da1b8b1b4079700d1c10826ac4601cf737a15c1531901f2ce0c954b6a32e83f80498e70053eac974e467b4b612bc061cbd30c4ed056600745e8d1cb78562dc6d6878bdeee02885efaac1c61282574026330da8ea1515534d140d322f2de54002db6289b80268abc6620449301747d22b467f8d835e9174f3c6d6fdca26ba59322b26dfe48aca349de532c72e9a145ef3ddc4c0230724911ef43606de53e32138c0567e823176ffa5061ab040c157b7a8fa2899b1d9d69cac49df827638a231e2c21962f4528498c0cd99d2f2be025a9bb1e26489ff1f89c9a30f76959aecdb25917499e3ccba99a4e6524243e6765e034f40fc3a890af515713c9115f01599898eff9d17f8278e32dc2e42be0596936a06db0d01e9b6190114c3e16634521b8edadc8cd1c24889f55d6437f8431935dbacfd579c9494ffead0a67b28955064460e414c6b4e8d9b030004b71a91b377c03cc3b74ac6198ffb55c8d1675914341cfe491d8ecdd1d9d0df9860ede5198271e5be6081231b07e0af1239c10e3df3a6ebcbbedc88ab0337952aadbd6ce5f67183a929cf93d568e5d2697e1b73f8a9327c03344ce95ab9edcfe43ce0815f455f54f5ed0cfac1035cfe318bef8319b1110e03dc60bd830441140adb4e9f693efc589d9daf64491c6b02d9134e0041b4f24ebab3be937e384af8696d99cf91d782de7f6e750e59f37f0b5c900366d6136ef4691d3d8eefcefa1081abfdf99c64276f73d3d03efab628f663c37719a8ccbef6a7587a2e79e46f287fd5d54bc4dc99b5f38dc6ffcbff671a5007e7789ee832f80494f6fc10003545335dc5dccf020a54a63a8457ed8dbcdea696cfe4c18d39c4618d9ccd8b6eccb088b808e5200ab677b0b2bc456f83fa2d807cd40c42457c2390c11a8765bfe00862bd41f417577c480de5d21dd25a6a563d4ce16f3de7f45a252ceb2cf6790c9e2c5b443c7c89a9353772408be859d3a2b7b00164dba6969bb30d50b52f5ae2afaeb2f1b659452e3d18c8f38bd1e68fb7066823e7ae15a314dae52bb17c4ecd18573725cdb599aa230a8eefefc27dc847ff90d2d53c3e6b61e01bf9a336e62cba89a915b87f5efcd4812d823d06cb0bc752622334a07a697030b7183fb07ca7347e6305ea7763447ffb6a08b15709aa86fed4d05139e0d88255ce8c86ae6aab8efe0925ee451ab39c1afbdc1ee9e7710dfea3563a36b5a7206f53018eb18883e8837c690cdbfedff98416e81b83448a9c3ce349fde76664e4bd5cf34bf924ad06e5d9492b457b86f8f5069c49380088b186d9be1455c9693f947d1ae055aa49bbebc927637c9978e7f5bd7b10bc48f28c3a7397ef888cc25530eb3a45497f5bc48849e51a1f47e020877cb282bc7e3735a198262d2ed443ab9c0643cd0c625c264f1532259d4463792c60fac96c1a0ded244e60c85e2eab2d1b620e28f05284513540bbd749fdee8aa74d4d0f43e7adf0428c42e7cb0c4b36c8b9cb87f60101b92a0b7e9d743be0e8bd0ff319c3b6e5e568cc936bfb08202146a6213a1d00a7fdc80e5c18694a4448f64ec564b915f0baaf88779a1e33525a4e59cccefe2c0d808f9b8d6acc474132d44545091493aad987fa0d83ce38eab65c011f12b07ef75800a65ddf2d0040d5f519f7cc718ef71fa07cec218260d87969a599518b10de83f528167e2afe193f3bf1935d57d3eb7a87bf6bdd4783eed389c39409a5cff6a374b23320fae46803adea854e3537cd3692c2583633129412e124d83415961f206c0a7aee30dea8c64fafc0986a518608d79fa245e5c7bc0122dc3c6a3c918b848f13e557abec53bf49eaad73ceec7cef948508cc00c637e704099c123f37bf451023f2334b70b334386906e30035c81af888e2a646f1d6839e87a298d06ff7b4c44a9b26523c1dcf7a561958da72815dbf254411475ae7b8fa0a35abe371296bcbb3e8d59ad011aa89bd5e483e5f3b99d39b855e8ae335d2e15573edc80fd6f50c7df62f24c4331009469c616710e79fc44d3289d3e4f8f0760662b8740432751382c6f2e0be52c90b7ebed9b62fe2baee49526719a61661f6d6017b1834c3cedc6dcda6add4c95636af35ed03e4c55073d139acc6c591561708d24e4f6e88b6151fa53002af5ee6c6ff4bcbfc7d5a5638c3f1fa03a854df555642e20a6115b679ae88895ab92e59ad3246d2aea9183be8a7a37bc31772b8eabe5b55db2f464aa5006f193d2b634d6bf51221ce0ae8be3153994e211bc134b07679a4298662240c740b682f939c086da3861c1b5520693e86c2a012d51d49a87a810836483dbbfbd67f9c7441559848657363505459da7b91e3a5da19d300c32072794fe8d6ea140f73ae8634403dd35061a550fae013fb69385cb6667e53b4c1c9530529f2253185c6817baa2abe3b327ddaa11cb90ccee65e0a0a9782a97469fd2d3c39a89724e25ec8056e023b998e6d1d1d5c9ed34d0ef942e9ad5b6177dafff75076855fba5449f02076a72f7b26722300341850e915cad1add284d1e32cc190196e4c2de574892dfdd7ca9d0f7f5e6328640c8db3c80dddaf54280ae5e8cda01a479b62e1c406cc69759d45b5a0799950cb20aac9f74bd699627c18fdbe0359cf09747198ce9034647a1a222ddc38162909c25f1f4a946dd840754a0afe433ae50a63097a177ceedad0463c5448bb44e10d0e8b8369c0626ff1958a409b7a948906ba604a421589fbae2111f8a4f954ff22f820199903f761183c4e56662c8143f57503ab0d79f41f0ff8a2d7fcb548e3690663858ca5599235eff7eab27d82d689a3b4a85ba1a2a07dfa705f27278b3f7577a31c0973d6da458b10134c18f833ce195e9089901a21104228182be47db434625e490812b774c4af6f99e969e3ca8c86d0505865da4856ad67cb19222d9037d58abef07eb4f916acfd47dc67e9faec311a7bbbe9c2ef9f3cab38bcaac1a46526aedfbbc498799a26454b12b7fe11a55548329f77c5621031c1c822464c62be449e49157eb2c78bec80944c107851526c7bcf57fc112020fb86b13e83196555eb2a07ecdcfaa75cee0f8399a972529a746e5d3e82ecacf21161c129caa8aa0947b2472c2eedbeed6d4793616773d36b3e49adba6ee2906bbb942fbf1dcb901e11791a6949cb8f2b12ef7e964a4755eb87d08f51cff2c78c5b5f097db52fdd2adaab84a405518fb3d2e09ab6eda6d0516afe26a85050790e1dd382e56f135defee835723baf3c2e9abdd3149f1245b8c7f7e7d79e6bcf4864b1fa5d270b3bd9fdec8df469c323fa0c799eed934dda7d5858eff20ec09d61d4a77ba49e857c86c92609004df94e70c435347b7624d06b66fa4d164f369dbb0589b10e3291be0fef4473cc1d0cb1b6e4e5da1fef3dc6480b71eab0b314df8d1a56d2a989161e66683dd73ec7cee7aacfa211f8f9dda2178f338d75e94c0f75743235a1c7766e90b717628726a0d97fb62d7e9354c54892059b1252d8eb3cb321801a46370a772982c852832609fb2f276c2406e0b5c548e5e54a460c0e052af55db7869fb087e0733f470c5040687c9316f936bf6cdecfc93389b33273428cd79ab3c7929318f5244d55b4e5c9f1a542021d29a5406aebfce0a692ab4815ca6bd15f7a5fce2d71042299d1c4cd50d35de83d05b9a2c689143272de733db2b1370a4ea1d8190d581a82650f490c74a5306f7e67e162ea2fcd943e06c5b6677fc6a21f3f3ab71d8ccbd4524d614954922a16fb5b3bc390f368110056b465e5f43eca6523639641403708f39453c3c847b3fca602c0647b11698594d1e9334ec8185388f1085e98f194732c467c928b1550fd45db04567106e6766e2dce1ed4f267f4ffa416213c54060063ea9efa6979f12885ba4758bc8aaa05318f1d7c82ab2e20f5f55a6bc0f46cd2a6bf5e299fffc89ce36e293f9edd024faf9245811f187a95650e46c39215c20bd36ec3435e98d63592664391d5bc89ea3e8f7d103374f20107370e850e6049c0e51ddec8f011224ba7a92c6fd86a3db5e0009832b86ab73c4dad40222966fad33951923fab6b668a63212eb16a210a2f3c3b77ed1bca4c54ca6a30031c4ac6010de8879c79d3fa5aac1e3e990fe594ea01b7ed928cac6b80072b93ef5828361a9241df0a88c204df7e732f10988b52d46f393069e4f11471835683fadffc20959e6d0f64db1bbd88540b95a072cf73b3c0787fddd423fdbeab0a52b194bf26b64a75f0401989d51c2d160a2f2727f7bdfa6431a96ba7c2b00f1ce7f967245f7f0c421eed2e1c0beb4607b855502613aa58e27305af022f2134c820f065384b9c2e0ae8acaea0f8f5745de25b1d361ea2ef065f1b9cf60697eac8a2ffbce30e23f58c050fa5b2f0ce2dc93515880ca762f922346962f78f5ada88e28f6cd90bfd222b59fc82dce65362d2e1078477db403d601aff754435ce07ec85dba429cced626b8223a017a97a2b2ea47bf25f0d24355107a1002b3055fc20cfeeda8bb7dcd0c0daad9f993575653744caaff5e6830e1261acc48f13e35b62a9232642d8694a2bfea0d16317eee4fbd968950e9c8fdbf711dc07662b96a53512fd7bb893d39155b35f2d089946299820389ce003ee83deacdd0d27afc5cf98f0119f5690a9cd8b73de03aba8241db47cda13caaca9d2497864c69b00aa98d199833ccafbb93a2c7deaa6a34f2b312dc8abbf153a0ed3ceb001f0c3776c0096c237227ca25cbd122b7d8fe4174e23f18876761a40d717485f20d52156b545ecad6b4b2ef4f01b18f292c19d3d14d277b4b86d13dce0c31449a1878bfc167c49baa4a884772c37ef090b08ab0f801aef0a5d584dc68d9d76ddee4997e9e86e4b7b1c17d095cc05bc5d2d892f067b5a50180eb227f20b35bcd2c1ed98c8c5399491e88c26f19538bd9dfedcb0419307b051c812fd3587fe05d8f274d2a02d7eb3f4dadac502933fa9d54ddd94dec5daa22d67454568f1f17b1e7459641977681cfeb00a1f53735cec2d0acd304382147be15234593ef7a56f2cc1b3b3748d504448104f69571e0e8ce6f05a76226f7db7903156f3ff7595a49c9d677273d5321a029afa54d7cd4c09291a7d8f97978711226dbdce4841f1db1c2994df883af24782247409efad04ede5db83b6f795a18d663d832728c7756eff98066b3951ce6b473b8ebbaa6ce7b4fc1a79a42bdd3122dc1b8be2584d95d5b6be1da7bf939dd94fc6592785d6a6f9d4d51866c7b2e3867fd0bc1c560277d53a353518b0513f11896feb372c31eb8d6c7660af2f7063b63e88398a3a879d1d9b6d621e52cbc519931951118ec8038fb902c31e55dcb2d8118ea72a3846f9a95d5f77a7c9e0f02b482cc94df2e0dbae51b2122af8827c9d6f3128abc5ba4ca50bfd15dabe8d964e2cf250a839279365db2c112267493a81283fde261d8fc80f0e46a15ac0f44396cea67c39a2c862d4a5fcd3e66ac8c594a55f6620273743b20233df0094750ead156f3147f5c70e96b967a1755bd3a0c988ba46d49654cf72d1fc4bafe6c62c4defb319ed46a77e3c2be81d673bd22677ba4fd5885e42e2a7a95d91da04293f4fb642b4c11a813ddce27c0c7ed28c0e0251aaf850f884720692a020e9b77a3931c95dcdeaf415e88b7e234b13f31034740003252a0c1b206e2d5ef55de0fa143846205372481cd4d3caf490c5d8fb4f61a76b345e329208e97fe2ceb8543581361fdb2dd6ccc061d70002127a4bae282cd8d4139713f99d0969afaaf8daefea6fa7f2edec8a5df5d9b48e9d22ee84e96838fd86b8fb890ac9d198da06cdbf7b99ea4b1155e8dd954e7641f1385e5589b58d9193167f746d3d4f8060890dc3bbb6664251ae077812f42ea1e1a57325c2f73fcd674e6e6c325298ab8a3d08f91e61952bea4d6f81a6c7b2221ea838fe091911118cf487626f052a4dc0a7b43c2acc4e0f23214f9b52a6085287d0303c803d86a111b0f661096abadb368e919eb6690043e0f794306b04ce8acb3f46fe1ee580a85d58b664aac9a9d41f25e6789e0e6c90c72a54ae05bfaa87a7c90765060d0887cecc6736b38a38f7b0bd819342cca1a36812b53e2ed5bae789120da41dbf7e561dc5a1b8a89d146404be5902b010a0be63a03c2408c9f05c7f6c09f4d8aa390096e6f438bcfc4c14fa7c86223f22699f174d83b0d7d40b0fc647c40c5f662ef2e548c912914c3985018032744ef3cb6ea85d33e3bbff1558fe2c7f20aa5278f1f96d35d65d7004d2e1dec7524e33a49f318b202478f3303971f78e618a6e499466a2108b5f393ca69dabee72b083107d5cdcf95003d13701899869f9ddf87d23bd88a69edb65141d4f17286ae5a21084bba19cb7936e32c2bafcdf087c9bcbb232b7d3cb1d55ddd35d1bfc5efba36a1869d2b2d578f3939cbae0b5f117a3ee96d45e99be1201a7bee5a30142abf9d2c5821e4a28c67223992dbad6a6eae1f4f01b91bcb264e6a548c3930b7a651c31e0ae949490ba1b0aa4287443bfb4166876422f386c314484645e9d154e79290c2db109dcb4ca06d6f7438a69226053d140fb7d81f62348810824480ada64042bbe93def4d00b52d5c593ca6b5bb029e5a4c0a1232a238e8ec96da0ec3d578df4bced00f6f4cb24d37d1c3368fc76a2e91fefaf3beb3dff931ead19fe8d9e6caab0bbb5f395c97fd63d074a63f8c27743d5ab29184005bda4162b98787d1e9e31fb1319963d12d2899a921f12ab178f17dd82f0e4e6fb2e3e87af90083e3ee3f3783a610722edf5bc47ca8af5d7ebf02e29eab1a9799b9cb4e7dfc55ae7131652ca00aa1c9ec0acec6373e22823f31f2a0a11b0e8078d0dd189feae0f5fd6206ed681203f206a2442a807113dc5150e676e2b324ff24f377de80004c51f60b79433147e019151fa15e40c7ed435a214a560058391b1f1ee332c69d6bf4a3673999a474578a5b5a4a0cc725089d8d5f366ea4ea9c2277c526afc2e8a464b8dba9bcd1362f77823e605dd1df30a48659a6c670d5dd31e869b8259662d45418a8871ad70122739ef5e4440e22255f484d4069a8fc1f2be813da9db3fadf7730026f22410a1ec085f4eab2e2da913f150ef4ff4d1bc2b6a9456b1d0a27430ee73d6ddb5429f0f750058ba2f309c236cc71e048fc608c00e42923ceb6a2ee28ce98c15301543609155b9435cc73928bc9441e1ac95f38b91961a927a38e4bce446a1308c7ddce890f3cb95712ea1f48f87d287a3ca6e5cf5bb02aa1b4f51005ac2ec86588ef96b1fe2c778b50fa5ceb8fb57c0b1bd5ee482b281bb1df048321c0a354e6fda2d2a374937f6a734c38a91e124aadbd6d20054443f1505061291bc42ae076eb7a9b98c1a50939d81821496979116ec38d3b462eee64eeb6cfbf87526a8a5cef42d3c33c9db0c404081607f9654650b1843e90429a623ed076849170eaf7d936e93a9a0fcfde99c192d0c6794b72f431987f69368a5c4072cb8c1e81c046415cdbade0a28d00de3a74b62b331c5993fec0055436da53430026fe9ef54750ba31b11a7544cc3203022864678d75116d5070254d178f27d950300f9e30829edc228915c77dbd77e034ab7f1fd39564a4c53c01113bb5b6300b66c400810eb6d8af3f4e475d390b20c4ae5d8f2dd58af51068607767782799120962f0934b82423498c6df28e3bbe2a1cc3f52abc974a85994f8989c71f99fec8f9b591a3ba3a5199f30d1f36ca9ac8150bb6cbf95e4ec445e520d176564b2ccb759d95974820b88f946b78d35fd970e68bf6357e6deaf7a89067228209174062cb9f3c4890db8120ee7ecedaa1a226778247149d9192bf6620f8aa3a850a165452456e7502688bac7e488efe591a7dc19aa70a872f278916bfaac2bca7675927fc2b5df9b32104f76dd758dda00d7c60eb8d5f3c8a07950ab923bdafca4d350e37382461cf7e2cefc52965012e990bc35df04b1226cc3c0da3b7644a95a30e0e9339616352af2d5947228ae8605071cf6adb59f5607edcad5dbc197f7d7fe7c82a373286ea2bdf4c96522c52650e6140e79b17caeec665a24aeff46b5e3910efd0d9c6ab4a18d8cf1778571237cff9f48e25a7c2b6f3164518303f7699cfe106d54b4655393faa923e682886752d434cd632495b767d16bf86cc854c343eea653816e861b99ae23a12a2171f499323728511d905a387c7d86ba9e7449d1d7e6f922b0b0fcb20b75bcad7a21886372d258862c009ab3934fd24ac7a3c4d214db74ab9ade67247f95fe96f4312e8c1fb339c493a8ff8d287a5c2be5f00bf52117535e40e6f8d14941831b9109845b481d266032f01b97d759dd4ec81635c23f5a230b441f29c8cbb7b2a6fed1efb3ae9c75bfac75d34e51d9b593bd4d599cc05f16d574ca171a12b4c6c6fbb2acd18d14980fca1a91a2f674584fb60827d66da9456899ab13c4c6a7f12bb3d451d8a14a8f1546e4ad9730755a89c0e88d7f96fc3a8c48c756efe70da501f78334c7af0423577a2edee7ad8b6ffa935c5487a5b6632e72b3cb73f567b4235ed929997b27b1f601649be98a4dc120da4fb6000f36d5a20725a33148e5096948c2520e418facada6dbb946ff7d2ccf94a99be97c85eafc42a16d004bfa09d2a573f417c5e2fa6f816c6dfce5fd9d2fb743ae863af19aff789232ddea65e263c9a711a251f294f91a149ef718c5c162aa39cbf7dbd0918105e21db66036aaf9908e56565245fd49fa025b465e765fc80a719eb29a411985b2369a4dde272af551ca83dc9f039e7d6ea6f52212e1e49b7515d49310b6c1450ecc1c8b9810a57e9631448bc0e633c20893ed2e8772d0e1c979acd21c295e12603f860669d1360e1b23015208da02d9c772da4cea4c0bc169c66889745303cc63f62b4f02d9eb9aa0a406a931b31700000f19d1cd84d6ecb34f88f48efe3f8811f452d3ae74407177ac9df0c37b04531bafb950f28ef776b7474ffe3ffcb477f1237fdab62a099bcd90b80afb7f341b06bfe024fa1d0776683777f0aa00d95b9069f407e4aa9168ed9d84e3f9ba548f9ccc193144bb837a49ae8a1fd0cac3e50d8f7dd4aa735630a56ef4fc59b9deb0c6aaaf52b02c0a646a29f947a5279e72235b7a468acd5a81273ade86b7d0305cc28549a4ad370d7456b0587ea4b4dc5c04a7683a5fa3fff5aede14d7e5093e9f1842c50b9db0a84916dd36848261ed64ecc7766975ea1989344e87764a348ac9b541cda2390220dbddef6da9f79ba89ffece5bd83c1bd90e03fa1a425f3005b6c559e7deea23866588d99e13761a55dee342c549b9957b8ca1c52e98d41b5ff7f8303c4b586020e9c4f57542657dd1bb31987aa6c4bc29116dfb88c0a4f0672a25786ce7de8cbf8e6e6024c545a26e9c541bd6c649a9ae79f0af48e9f376a47403e83236ee56daf06acb67aa911dc09310b03b252ec221293bb4ee19aa881a3e910638f2da75021f63ff1374597c2b72d8f34976805a0183a8f0419444c0dc520f6c30a6b253cddb740cb77c46262c6231d57f81ded1024aac5931be764973b12071715abe049e79358116686e38e8c692ac65cd3c551d1fa60ceabc151ab624e92a0ae867cd7d8a1a297d6e111f5f02d1d0fa220332fcba264b19104cb0b5fc94a6f0128b4f4327f3e8ac788d1c9391d0d81fac15727b0551b17b9e6776dd2903c79c7e3afcb552bea21d2626ebdd576c8e9b6c062b0791c28a0e32ca81a09aa5411d6f899831877c50286b8a95bb1c75e1ec3f8575dedb753e293a9d37c4edd374fffebc4325308242ea7fa38096bedc7631e4d7dcb72ceaf1f837011544ca5d629be57d9af4da2bb07b6b4812461b97df7f3bdd6069a0400c10856e88467ed5ff6195f7cf6fe92fcb262230f0d6b020a87e1feb17266b1234b50c77f28b415bb47faac0e1fe0f7100e6bb4d7c5c1a3709c497d35cd327ad7c13bc10240682aa4b0c409b63c81b9979b9af827d8d96244de59846e185de41bbd56f300d756ad997be78048191a3e4f87101e659f5adf4ac4f28b2879edac0e875de17b4157be5cc8ad864400f4529e1ba31d4a30a945b020ffbfceb84e69af65b2135c2225725bd3a0996b0a8bc50c352836bb29853763a5a26e28ee35e0bc5472693995695dc7667d70c86ea199cf56760dcb6957147b5f1c85c0a8b53682b1b8be1a5989034da1b14adf92477eb0764d75605a66592d8f6218823dd883ed96cdc0d77dbc0949c1580e748225cfcceb50a2c74c977e5f496927a09436a4753a7aa3e9b88ce288c570e25a5edbd09e2c60b05afd476d868c427597c54c926d4f0b5640fe4d6ae17a97f1115acf09cb6b9a5071110b0dfc24c4b87ac45ae14e0905ad7b518473533b0e2467ddd012735e510f9618b0dc91bc7a041a27150f55641c365f228f98329b416348f0ffdb3771d381a2ec14643b07433a50b9561c2f0b219c4d773453028b880f05d85f7bb81781523bb042a11099f20421f9ad6368f54d4da42beee3f4e10362afbfc53f1f4e14e67d2904af78b4ae43d70bfeef40a45660480859f76a97840ed210d537f8649292faac59ab89f0aa15c6c8686555800148075d14ed856c240ec9165394a50fe5c41046c4d675ae656eb0d181e78ca62206092a90467bb64a67804188a875e0bfbde4b46a853c9f89ad108fdf121886830387a75aa1dbac15ec91b53c494312836f353903f01c2c56e4ff0c4e691acdf12901cbae71c9de71a89a29d54522dbdfc72cccad520f64425fd9e623c45d9b17eaa29a5bd53cf52b4be821ff397f00a8c84cc40b34c8a4e8af881d49401c35655e9e8b25da222d63ce07f328f18846f1ead4b893681c872a6d305529ef725cfc7ee3bd4acef6475f246d82f142e447748318f6c9c27bd3f7bac8982ef95200a3001990dd34e6528c754aabadcec0953bd808a988a31cf96d526fdc998650d51dc04e0787140a4efc27a70ffb3a557d8c10daaefa34c5d6e5bea294d00fd24b864cd06b4a6ef906e9af64c3475b8fc9e3ab1ebd62ec1ff13990213312eaa21e1492f62167d889e25bb8678b3bade0402d783f521a252ecc8b962063d4cee9f4610705bc8a19149e046a296865e8530f46575106913d2e6d3a2ce014ed7b3f87ca8ae5fc60619256a7e6de2f1911a7ee99fa776ebfd218ba686e71aa835d0497aac95e96904728ddab01ab529ca94bc1e24c8239912046d30857475624b23fc8c526085390989346e35c36e0c12e110e573d4426546136217730b508a373c7c6f2a9ea883c9f3af54230b7783c96e0436391164396eaf1ad0039eb21fc68d164f9ea7080bdb500ab616bc82f0bb295a45d0ded218a4574e566f88f01239d56a5970e5aae89ecb7f0e00f7a9bd9dbfa654e009448d440657edf93705986855312c546864c6d7b8f540eb32c1951f634434d5be629826164d61975d94a1a6db8d6d82809c522a78128142d935da60a4f6927e0125dadb4a36cdafc27b4b7588702560c6a09893e5de6053ef0f877d0d0979dd5e8ea5f4a827edec39b60828f339f6333480d0d60985079f519fce2578bf1e6a58d010e28689b257a16c4667e63a09e67b36670005f3861a741b8f43cbac465a6b94a5145a5aefd303f80f38eee3605c31c6693b38f2570e46abb1cd743ee20d66029e6a1e0e7529196b668084b8066f075a20248bcf5bc3eac7880e51a55e2030bc66a99dc08c05ff3ab6d4bd63b5620379a08fb44addccca77c202bf529e29914d94c5e008aa0bb74d7e4b87b0794fac28de96ab63a621544bedb0df29bf851fe8781906518adff7dde62d9e09c9dac95a633f8134e5739b2b0a4921245dd7c9df90c922d2eea7e97e1482e0719a23d4c0ad9b61effa3781d8d553c3e0341cc2e810a33bce9000c0bbdadcd9dc493a8ab98fbf0005e808dce86c45dd4e80563262fb56b01b10ab88f7cc55d6b3df42b35130eff707902068d41b1c7908f16bad8f73fd45800b906cd10cb02f882ef05cf6f094691da10d050aaaa8fb52de5592370e05dcb388b92bd36e0a364fce8297a75577deb9bfe44d306608f8e4930998288f1522baf6329d07d083d72176c7720acb77c1b8f12ac0807055c51e3b314ce0a546f6ee927a3aa3c3a11658454d6386e2ee5053377d939833c611c6c99e21876da4ea8a196d3c08cd8661a5ab94070d0f2f79b908a7830a4fa967b5ffaaaec41fb9102b6122f18198811d2aa39d3de85fda710e6ae9bf997f80f0c6598dd17849b103068e784d1d3ab4981cf6dbf609d021d108b1c0541df5aa86e24623bcccc9f21748c264cbe6226af76205e6df16862f77feb0047cb14f4455e64acf0b64a53e706c51d71981b12ec3d469c5e94433f9cecd989fff5b66b158d9f40195b5f583043ac6f7e04097ce0830a4a7d54b6653299165f1525dfe9002ec4299781d66dc42954b0ae84920507a0082ea0ed9ad2a19a11a3100ac244cca218214511f1c8de40c99940c24b14e3c355652fb2b9f07cdf558f4b4617fe826806814ba70f129ae733ac4a42fda9d2c426355019cb2c829e181749832d0ee9400c447959045c5b6bd8a9e6f4cad29bc0980497e2bf50250fb69543a3d34a54296a680a1d50288a49f3ac4442f54af743ef56d756a700651d78030a9d1c060780caac0e55a95664a13922fc5facd578b81ad3c543e87f7fd0dc4020aa24692f844c7d6c325232020e633a5a50dca6bb2fdb17718ea1221a6badbfc8e8f02f8e1f6ff797b6c1fecfb7df6fd5a3bd20ed5c77f2ef680ac0892bb8650d086fd82f9566cd0a7101df6a3f02f888d70748152305db8f140cbb6ee5c738813902d7374f088912803a87ac437baf893a376263f0f95214511ce50546daf7c52095d9eb9a748ed3659507afeeb223e53595ab01421bb7d3f89dbbf4f101afd33eaa8d81297c27242634d0197d6b6d0bebf7d046f8d20b57ddc10df1b1f1cda7f34edb45e1283834d9672700a8aa6487711b60785e38a76b5e822c095a2491a55f768ec720439ad282402084a412d624db84e11b4df168b27ca40012c09332f6ba54139252d8a04c7961224afd0a4cc4831f5fe4078e063c31ea07df19881c9e01761e9dc056b9ac507625044be1934117c053633849be9882cf5ff441fc031e1736e9b472da99ef68231dff01c47e6daab06adc415177e31ba85f0b54adc87f9ac8bb9779c8a414ec1f2d9b621936082be44eb5c6ac11bdf1fb5cababc72d0589087d9dc3869511e15ebb00d550723d1cd48f627a940e90186ffffd4bd5c18491962008f1b41b44451716ad5b2e8c61889bf5e4499f35c44111893efe204eb0d73a55fe0ea42853f39cb9e6e147840bea02f2f1c20e5f529062541cf4402150d25afed141274d7a322373878dbfc14410a0d945bdf7984feafd773b5011efea62d3acfc9ac3c82849035d797856a1b06532f3aebbbe245b54685392e86bac73d3a709b4ff8876797f457f91e2a6a307a77b04e337ed61e8001e3d7d50860e6560be79a1f13ab548971001fd3b8cd9a214f103f45596c60603a51a8bc7e47276968b15455b77e6a81d055340204a356f774ab25dbd8a3824b60c8d614caeabc7e83a377482966027424b117a183a87b421091826d3002531a53d6abd0cdcb83fc058a99565020c71376c1baff8a8ca493dbb7e2d4239490641712a09654a56951f78a0b0c7101e9d3e9e001ff0210078bd27f7016233d8f199d13c3453f8442cd2e928733434817094060fd270d04aa028961d0c40625d02a9a8929a93442704b1595f8b6468e5b5b65224556601e1d660cc8714f25d2ec4f2e7ec62f060c996b3e8ca2d7295b9436f642493fc6f9b1e738b7320101e611a50a7f8a9c8e819e9b9031a38b14d38b55c5a92137336170e45ac8e773b83d41da2079bb9d780cd2cdb11135007d8e0d2c006cd2eeb25507e9030f128ce15832cf56127559ad0c27dc989a0a17a55cae705b2d28a5a02b6afca439d137e0d5099d3f219b5087bfc7813084fbdc7efc9076ca171b43622430f77da125ec531936bef8d99c3954e1842dcccbf52a136bc26f0ef628e696d84e59daef2af2b43f3997a27d69b1d2edd88384f7e2e655a71bc4492322c1ba7f6e240b24d4b9dcf89f864b3e30da7e1a0259f0889f4f6c976f29da80f82606a82d8780e38a6b0e54eca553bf80f4524e146282d72d0a16c6161d4c127306cb59cadf9bb277afc9c8e8ff0a0e398c58f2667245e78e722d387ba1fa11603bd687317a392e805ee4709e5ca179f5fa0a92ed8708d8df5aab505397874541d0a1a167e471b7d458319cd7e8f7190a9f855f183a4f70a8a9d477272de4117ddf6b479ed8ca8e954b5e1e6e0e8b4e3bf26c690146d7a053ecbbce13f10d3a7a1229b8199106402532a44ac63d9d7f42389f4bbf6bd12a58d08bbf3837a2200963a6e2034f11b664cace99d6121da1830d48564a144a49272f9cb3292c32a1b12a27913cb36d159eb3998608015ea28e33bcc1453d9ac996fb046d76f350028518f933ab40219838b499193eb8eb73321e3201894b2697659f6975e33003677a1a2a19d45f33e0b9e1e7d996a2f6a1e662f048c02d818d0ef0801182cfa8591175a9985f8466d352d18e3eb70b5bd687c0b5108f7c5828943e998a53b1e66591035954443ed0b173c507ea5afcaa7591357dbd01d08ca15b2cce4b965ee8f63fc10ce4046e7464249feeffc6828ace3f7271f19c92194ba9a373369c2c44ac8b0ab32f8ab5065d03b519860911f3e3daa8d42372fc4ffd37e7b9b4ad4c62250af802287c27573439dc6bda5c6f3c8e9de68118a280ba6a58d6cf55185b3d435453a022d7922bcfeee2ea95e20125c7d4f09851a340b26ff67728a818bb8372650ff17b6ab2b8df920856adefb48d18f8a4e86adf03802f140b90e5b06cab7016f2b8c4deabf59927e44fd564ee330abf02015f3664612f4ed73e467b71d996432bec79d2b7851cc79487fa8a7daef688e841bc92ab0fd208e10cc79f8f4189edb8fa0493083631ec46fd4f0c0ba765521cb4b7a7b6c2654b58bd411111260a003377b853bd84e8b5562f40a62578c102c630537e24c72a1fa4804c90a0c4ce009bedf6be841485201b9e770f9fd40c1129b83820fd446832751814cff441896550f9f53cb5f1da6f95c04acf76d3e61b61484d5b3e50a18869d8a67d156ebf6df97e03d4068bddb0986af70ad8aeac50d6b2c40479af20addd34a68dd9968bd3b10030a9bb5f21311a27ed148c3b8ada332467d509765a15a8033047fcf41af1e81ed6c06de193b0fe54a328ce4e9777344706a973c3dc2817d8a153886ddc1ebc6a04fa7e2bb25c3052a2da743229b453a8e72ed6ccbbbba67153ad103766581939630a478b2f5722a2bad65e8b13f21e2639721de46c3160c3000240020802d10a8a9ffe94e675101e0161ca197ae833dbcd9459d47d3a6ffff7bf9b082d35b2b7dc3b1b0b3d0b170b9347521e9abda140e9d54a4533221e5776da19142b6e6646afb2533ca1dc2eee38795e8e4ca22062f669446324d03cfa7cd22db9a3053f39eb22397bcb0f2e0e15088de99e7d0e91311d9e5e6478120591b349a43ab29495399162c1ed67ef424b6bcf2ab3afc7854165e440d6b06c55093a1c72b07986e1942a74d6b04e7b976558966dd8c675aaebc9ed5d56f5aa3ec7f58470e7e7273d4286852a21a0bc3a22579561a04d867312410b8cc40cdb8e0c11c3b74a1b44918112110b3b32c49d6ec72727299772479b86a5ec793c9dcc31f650c65668cf65cb9142b6c2b6cdb461aea484b234eda321795c48180af3ddfc7d9fa131278c61d91896ad792524779c47e69186993d0d4361b4aa25c1f3a7e788d4948c7854796169128dd8e4c21cb02c7364fe748c9759fb6ddb5c90b9df23abe14803ad95b3cfec67e8167a349f694abbb5b8b5d65a2bd69295675ad65e75d3c3e8eda64054ab3ccaa31264ac5fb247206326d125d11119eb773cfa4559984caf78ac9057e0d1ab17c5d3a857aa703ae9d5f31ca35798d147339df40a9b2bb9e2e945afb0cbef85953c8b482351afb07b7179f4aa7bf7e9a45f5d089d47c374dd4bee2e7b95bbd386d13c95020cc0b2db0d1f93fafc3ad9467a47e6e565b5baaa316d9bc41d53332ed4d0d0459215785c8d8b5dd53cd82abfda48bf7af5732776ef432aafbe2bf2a2579548eaa8dd67ba817672ad7dd42941c6d01daa84fa906b568772e5289151c6f688b2ec98fd14a9887a288f59f6434f77e80ec59efdbc7a458bf48a5a1da983fe19c3d991a33c6e3cd90f15bb229d3b664778f2c4f548d633bd17118ed52b53743bb6592d456fa5146732d34a8674f1b468cd9f1cc856a293d38b22777859a6cf805442a6f20999ce1d3229d32075d097bcb87207a51f0cb257f68596bd02eba5fc5ee8833070356c335deae252adcbaec6c51acf57b07f9369e815fd057a453fb369e87e86c6d02059f496562e4c297169a0d2d2beb348044d9848b203a32d6aad54cbec29a51dd74d2d86615ba9f4babb6ab52bc528a514f35eb1135efd6eaabb557d0cbbd492a06f955003091f183ba836c0811a4fb620b41ca9eb4995d75eca054796415b08655596415bfcf4503ae38eb3a8735331023276c4e6b183d84fede0be8ae40ba5472f27b89d75a6c8dd45a40122779d2976e73048ef5d8a32dbb4d8619062f0c7025c3510b9ffe8eee11c1f9b05b88044ee1dfe21a601247278bec4510ed5d018ee56a542c2663a911cc919118610021999beca1879d4822b8468020a2e74d003d1bbd3529a65599669783e91fb43d4a2a30ad64f8c3bda90ca1483f57307acb85f4d4eb8cfe32c2aa231f3557b10236797c6cc2124ab6f02dbafa26e8a49458cefa428c552a8ea3a8eeb481fedee715c67c31dc752964d77af678d8b7bf72d78b201b20cd22209b986a04d7720945583889cc5353a5056bd1475aeecd5cca1b78981f4aadad0ab7a7ce3c39dc73adba9cf2c06e7b30711712c3831e8a3318ce333b10df60ce360584559f5004766b023f647d54abb0c52d4b0762734fc528fc91ebc4429facc9b9eb8a00da643c38035bd02c19aec32c81f4e6438d7e34c16846e80501726776629522104610643a21417e00212a538ca21da02e28ed288be66d72150da8a96ba9ee7a55c5048420e8a851656e0700014211e2e986590164968a005132824618935929c2088244388e07a5906251952840b8e5ae00221683f5c952c835c2074840b62a0046c524db36ddbb66d8a4d2deb29b51c449b940befa6567891d156907979f16ee08219d04ddb7e30c5bf2c837e10c591367b4e6b552a8cce592bed0cb39ab4de10539b4d336a2ba665b772f532135e8a9d6295ce50d6156732ad356ba7b59d3dc3a91da49e22420a89cd6e76bb01a5946218866114a3de2d49185929a594520cc330ac669252cd32b169b95208f497799d462a6dc074abd79dacdd02a579df0b19185a76ad0442af94f374524a318c521b1881c540cb5935d586993545b2fa9af6971c615c2f87b519f6247bdd962c837e5084113f1892844b3a03c38111d6b8a92c83b2c042882c805e704d590665114576c6bd590665b10436a4cbc2079523232c96b072a4040b229494a0048b21d4910e1653a4962084c58fa78417163c57094558f8b0b2841d1f3c312de1c90a323c3acc3228090fee13ba7a89c17929738cb77671e53bf44a4477b4335c95ea2e6185c9f344d0ad56ab15c4cbcaec0e15e00aa12b8c48a5aae8c16788177a539e97aa9dca3772df5e2a869650a54cb14ac18a35c22577f472ac3aa7ac7865da45a64156887153293178b2e8e121088c205188264089e24809345ca052f51a35f86ecaf352ab1c47b8638e1c3d68927b8997da92a852bef4ca524beba9d5b25b2bf58156b3aad51c2b8c7a1d9703fb4c575a730df5349b925a1a46addab6cab2acfb34647b2cb3984ab6e083eb1941838ee332db71df320c061064ee59c81d6b3c6acfbec920dce717010e060bb476cc6e5804b463cfb46cb6c092c685984138c1a3b68558c0985f0c0185832f66b7242a125214848d0188076874100fd2c8cd0322f0a009aa087a3d5b6985e92bee4a96414d94008426626041dc5496414db4b0dd640660174d5ab00141a8c9112b40e069d202bdd8d981182a4030da0117a62e78ac7703144471823cbe6846ae2acba0287c9841143bf4b002286096412e40c2e69a6115ab58c52aa558b52ed6dea0dc66b3ee9252129651d6bd7bd3ebbadc719bd56ed0cc6db673fdb6d9cc6eb6729b9d9a0ce9a41a4e17178b55178a55eb42c3ce2df6a3c1aa56b14a2956ad8bbd41af0cba6ece791c1d2363b063e15c1922d4dd6dad4a3565b7c4a0744de98dd1cdd16ca964ccfbe5e6de50ac1add5023cc88ca222eaec84196cf9a8c99af526e8a23b7020c201fcad50a489d2fdb37ae1b0c57a39b9bd56a657463646494d59e947463742377c81f2b46776ddc2c495956fadd7ed251b93224074cf6ca906b3ac10e58d32d91bb7ddbc835e85871bb0d5d4464c40d6bd7b122876d66bf853a32a23d17ba7464c48df4e58a65524aa9d96d65e7ce77ddc2ec36d46e50653abf08689903a58c5d86376899e21a30ac65f780f69b2528b3f7074a5ca3e10caf284baacc916218766ba779d3766d6d67c8ab29fb8cf620866a6ddb1a5cc963b56bd6b696637891015ae1e1c63059d8acd4d11f6513cb63edd6dacf1235cb6a1747d46c09ac52aeab18ddb48e63e2ceb7b59fd35ece6f56b35a96e18a55ba045d42c3d425b265165e541e3c5e5fea0e1e5a5c17955629e61dfb7a741eb5fce2d94c66aad097e1d13096be893bad5c6d3487ac7dd3216b97ab8d3e6086c6b8d0329385054815fa52070f25aec468cf0aa5eb6acf10642dcb38cb598edaec5f0df4d8b1394eca6d78acf414d32ec5ba764b565fa9a3ff21b9debbcf8f397278d84bc17dc1b018e3d6397a31a770855086b2e851a1a4acd9833be787e49668963e4a27dda67412b6b97fa1ac25ee5161e9a7f09e1496fe85f75d7de9b075f2fc68fa38a693ded8e6fba5ffde65de0ad4a67413c6c192ce74a94b7f61fbb86127eee9c52128611f7b9fed5df66237dc78e45ec52f6b0348166dfc2275d06b9fcfad619b21c8dcb679cf998747d5b8b2e1266ff7f078b30d2a2eaca16fb9ccbb57c3f6be76d9e1d1062edcac943abae9aa57f429282e965f4040ce70e57ab3e2490e4096424f0c65a12780b24b96423d45d94a0cfb421c1f9befc338df4b38d8905ec23896b2fa24dc2412f60161e86ad0803d08033d778eca4c63690d35297a1fd6833b6e0fc767db75aa5e7578b4925ecaaaf699762edc320cbb40af3af5c55509b9d28bd4913b5f81ae69b8825cf58a8cfb71955792d59745ab22529655ecb0825cf178b9ce96d8142059f5528847afeab5da3a594a18b72595c13e24b73bf7fe28bfc8f516903ba4cc09eebbe3f860c7b1019c10b53c422fd21ee901e2276574470b44c95448a618ecfe93476e8c27799e1b833be2ccc8f595870725844b3f5a9e0eb3ae97b3d6b63df688e571c266b5ac0ad1187b02c99a7fc2b2e0ca20cf73429c1027c42375cc8e6b0253d2edc4cc15743c483a25dd928691414878b2c2d8fde49963ce298edd50e671f5e8fc14513204117936ccd82318db8a3c1b66ac50f2fc1cb1188c9a13bb445e42ee3832458e262be471f278e1648ca13c4e33f2b4e2dedf6f46db91e511caf34e1a4633d28c3423cd4833d28c3423fbe2993c3c580c5e66804a27f5e4eca7440ab116d6c25a2d1a23457b552dacc78ae9243b716b24655dfc3586a413518aa48fb2e8c73d098335a4977e31184404e28e3d647b94604a2486d9a131964775afb23cb743797e5ccdde99ad244fcb4359d3f2603d02b983d20d049283937c64b50cab44c81df61a68a0060275c01942eed8420dd8209d64eea8d5ca1c0667cbd5ab7927d986d2496e15d129a2d33a2f23e0dc41025342632ccfbca49687a7d6aee8eb0040e9640e8d827d99e7ad8655214664daf50fbaa9c51648f44f3ab781649d40bda455368fd38b72559748da4001d700b99b452459fdae8c064294dc44181b0994aaa80e805290798017b90fd464028991461ebdef05860a32bd1c4302492139241ba861465a240b35cc487568915ed230b407b979d0404dd4443446355e55cbb60162a8573a5fc8ee4ceea0ef21b3ea33491d9a0b9445858e6eab34d0065bed56ab630e14a4d8478bd96b63c293b9460c7acacbdb58328912459e9232a16361c1a593850577c3610a652dcba023ccc8a6ece1509f5d7e2d84aa5eb97c0b572964614aeaa0af618a5481aec81d32866fcf2885bc5e8596fe50f3103da393395236b8f3fdee2a5a3b2c46b6077a549641623c912fd1a5620c91e91f70b30c0a838a3c73d2b19a04aa453b4c5a4cfa336665c8059b25794a2fea8f9119ab124fd0114a9047091464e4248fb2c924ca58cbf979ad4b93bc936da6a71e6ebf77f2178114e8108a9838719459b264b282a1dc95b0772fdda67b6972b7077d90b0a4ac1f979e3c9ce383ddf4ee5b483a0dbd73e1bd0d4bef90fb97f39d1e0b6d3e5c7353985373c2ae8b737c72723a3c4359358d4bba1f25501aa59b3ecaa1528781d04059a47bef7f1f65d176ee96147a5435ef4d2f857dd27d179abeb0e3708e4f4ee916e77c9894c3fdfb0d737c6c382c9ff3a7c13d0d7b131d62b1a4f5434cf8e25356fdd7d8fe7d5ce37aef5e3ae9e38b0f29ba1a73a7d84eef5d8739dbfb5ce996b32f7174db2ec52e9dde667bbfb4611ccbd18bb6a543fb1ea02d0ed49ee9b4f89d14ba883040fcaed322e95a58f33d0b6590e2772cfc4145d2b730a7f4ed5e88e36373df611cef62103be952c4d199a277100b737c6c4a18c4b6e78018067ddc73b7297dfbc5383edd49c7f13852385ff561ebde20d7c81c08224ab173717875ca926217a43627c4cc46170c5379b98044eeee3ac4040aa026fd3041e282668204496bdd584d3dc97d951193be47679ae137ab5b7001c2ad2eb2084a85f07477376ddab46977531c4cd5926ae9901dba9840e8b405c08d8045ee4b23b82077ab82a8e08a1b0461051231508308e9f504114578c21a2fa801dd0192dcb91afba19b445c143169c18b94259316b4f2bc97804ee668f1c10d65cdab14254932a5910b6e688cea5a0cca20454b59731e088dd9b014ed0c9445695501220285528a55203ae42007729450289d81c6580c65b240334d92c2a3d34a427530e76cf0a74987b757a9221d2348f0dc1e88f27c23a9b49b34cc38a90ef27c77f70c33a0c2b8e3847254d424cfb7ab68be72c6f37934938c36c90a10eecce3ec493291fc7c1108297da5781a0901156528ab6bf56a42a181c658dcae4ec0bc5d31c21d270f141a781a661a3157f3d3883caf840aee385fd308b0c6de629c29d650d67c1071d214b25035c6bdb101480e3a344cc53d244e9f360cd8f80131b850ef101125b3e620cfee6e5410ee38a10cb5885c73d68050d495171157ed2d94a2a5f525ae305598c78a861c19fb074a6d248dddcc11c6862964f4f5902c502086260b145f356e68cc8402c5c8684231ea2694ef47523ac493c7d6b14c5c54e4b18db85ef9e6b18fe44662849d395f2990cb934ee6e0ba77fdd1f4e85ca70a97667e3dbcdcefcf8ca5d4513aba93878e91c75496a164614a15e4e7734c1602305958a5f0d202cddbb777b6a5cfcb8f28e479bd736147ea8e79b974c32ce38b283987120c29198b91bb1492c23a5590ffc26caa20ef85d6db4c60583b7f984479c19d3f5965a94a35a411a19b4010b1de8be28103913bb43caf83dc419a3b4c1ff23cb673883ce511101d68ccf6f9a94363b8cf9e395b79baea9ca257f353496a897798672271a4f57c72d43032a8c78c398fe4690c9dae2bc19aeca00c52cc0efe58800b48dcde92eae2ca534aa5932357c3bc98fc60348ff451182298dfcf1740799c3a3ebcf2388de4c9435b4e5a459eef56d22becb6c33ab34559130865bd260fdd918014e5e75bb42d94ae856499636c202fcaf54e9a369031329285fd5e916d0e32f60648192e32368b6c15565aa1dac2f64c718ae0bcf752f7ef36de4b189ce7bed2399cc3bdc4bdf41cd3bf4b719c4659dc7102b14891058335e0419b9609b6d4b8bc4b6da1b2f11b5f39a6f294e338ea1fbb955361746a89d6492dd1b5d74d1ed5838818cbb9dbb070a6ab300e7713061bc774160c7610d1aa429650529618f718906461c728862364f98d507597d0470629bac0b7dc4628c5ae7e343842f037c29677d5abe9a89722baa3aa6be27658e3725964080c6cb98d708a2ef2035b0534e48e2a201c6a66aa8bcb220558035ee696f70736ae61b90c5264b9ea5e943b4e20b943cb5ac63e8b30ee98e9403248d105bb5ca8a7ee52f90acbc1dbb01cc4e0bce9526479631bd55b300ef7ddf41fdf4d38c7c7e6bef41cd2bfff28e5dc972e45d5bbd93a3d057595d45758b0a42c1596510953c21bcac29e0a2565a142eca730b5c41d55de1a7754813e48ff3ec37d498a5c0df799be2138e79cf389c43704e54d46a0bce941c42350dedbfc621c1f896dee4d171749ca12ef04ba42b857ea98ef21330eaa7bf4a52f943794a04de9216843fa7712feb09440d64a4caa4e5994c32f94258fa904c1fa24a4930dd3812cd720e5250a32e6b2b11c5f24074988812d31e20ba124c0188246f142088c46a062d3880e621a61465cd5acbe16844b61e82386a0d83ca2c8b65e5d538c5e4a5a21f0bd40b38cd2d780558abd5e8940887969e7552e5680f3765ed5031e42255ee72952c40223382105490471c207625491c40e5ce40009710ea1063b68a571060aac5022081211ac8009299208020c27868026cf0d60204426c36326ca6b328182054046d8c9cf92091443642e4b2650f4c0d36bf0a09340563249629427ce81e6c9438708157d26be2d979096285d6092848b9688639bd8c1073b4f50508821484121972401c69198450f3a1012bbead1505ac1c41074c40ef36838897082094762873c7610bb0ccbb2ed074d9c14891d0a400b287e74e7dee1cb2321b4b66ddb1e245bbb594b7fd0813f70a6183f22f7ed39cc4c0170be0047224e018ec4eedb6796a10908f72f344b2651709027e6b02000e555964141282207a128cba0200ce9c832c80ba3fc6200d919a35adbf06adc202f8a72d79e36e99c43982ac82c6a58a5d6948bcdceb9590c936610192184128050317a861956d348e07344121a600bf8e289d64693bd9be30d36437a2cb44195e7e90b903022e26c0f410bf18a42f4a90f227633aca71846b18ad58a6158fd0ca9b5f93b42f6ae69c5a6aa8cab651c6aa6519bb5fce08eb3c73392b3974eaf328d3b02d2821e9c6444bd726286ba4059d9298fd4917d06caca9ca8a1acec33bdf95cd4126e8f99fab9dde5d763ba7a959971bb8fd3952a723b7c435934747673c9e32432e222435999132f1b0bd0c85917c17ca89cb8f4e18ab2dea44b6302ddc7690922625b66c3fac2f086b3d72b0bba5343df4950099090cbebc6eb670f8d5949517d9c40435ebc885e3742efd4e5e05bf595f7a77dbe768efc4cf1b364be7a922801ca34253f497e2a0e148a436f8c5c7e2304dfe114e9365faf8a03b8e11a17f099ca5577a57ce59d4b78e36068e32d213d4bd8f3a76a7287965b09d08ddb947ec3bb0d8cd3f74a0743ef5d96026ba8a60aef57c2ef2aa47721eaa9f07497e9f72ed2bfcb6fc8052099958ab254351544ebd21143b519402f59f5a731144f1dbaa22f4ee85ca49f453aa693f4aabe62a02b96eefd077de39c3ebd473d0c6aff66eded9ffea131f347b2aaedb228c9afa684c16d01ae1a88df676ef94c774a3e166c4e25a9d74f221aa3f2fa69446354b7f1948f7368e5e32c9a47509ed8084b7709bda784b765087de943fadec1d4b31d3309a9e38719339598acfa7a3a6524c6a9d33571333c919848d8f80e86536cc9ce6170d3913bb8d74f1f64cc64c1cf387574383c7fe64f8f1bb463e24783437670c33f2b4fb94be5a9cfa157fba944eeb0b9d68a43ad49e48eedf5fd021933939029a022d78964c98627125247cf96cfc0f2162c29cbe27112e5fa19becf21caeaea07d6b07c252fa7ef9d25ccf1b1cfa12fd1976e436d505785a7af84a6ab84a47729a114afe9a494f03e157e5f168235a592f794b8124a512594628acc290c854ff8c6845d243cc3875da0ac7a0fcb50568bb746cd90d6378a56ce212f2684b9d031a7574d056e1a6632e1a1fbe8095665faa889ccd742903c57b795fb2f2fdc56ae605d41eea8b885d6327c5b183e947b5b59b6f24cbf4650e794312e1e6614d1073b112b52978e8c484fc48aad127b25f6ec625c4464c4d275ac6862808e154b1fbf05e8acc4120f1d19b1f411959a619f2e9d30cd2877944f74903bb45c3f5b7d9e2daecbab8d57ef95e515fc8d5f49ae4b26d08df0bb8d94938b771f34c8208520bb20b2a0c52d74b63acc2247ea44926baeb7d87cbf8cd47ecdf984c65ca059f5d5497d72819a21eefc8d90de46d87709a778e22ebf1b380c727d2c4574a707a40e9d0f4c567d872e2217e544c0489a0918a7905c3bac83d4519f1a8283bdc1bec33de4fc04395c43699f034132560a6b5cae96dfbb58eebdd341ee207def9054cf22c5a5b974d36728dd84413bc3e9a0ed939e436fba09e7342a541d0c57de12aa9c254c8929a114b5500629ba549e4a919f0f29ba527e0fd67c97418aa47b9ad8124a912594e2ad71b986a8b0a4ac15fce272a56057ca75710862a510c47e907e4bff5efaf79c7b529def4a13a857f534738a5ed55f299648f8c33a5056e5c9128510a082d82695d1c91c9da431b5d6101b4959aac47cb2b28f599ede73969d868c3e9399cc64967d4fbd8774ff3ee4f4d487412d85410d6b1ab639d19f701071a6b150ae68ccd7fdc3352bcaca8e829be3a33da77bea39dfbdcf8fa74969d8a67bbd4d8741acdee63bfd87bfeff33e3f182e3067bee9558debfbe91d6d39b1d3b69d4efff17d3f7d5ef886b13dccdcd18fe67b87714eef70fdc09aef74f96dc7a91bb6e97ec238f45d4e2dd1b787dc6d5e6d18ae079d2c1b46236961f790bb2dd4decd0ff4417a770a90de61d0fe7b109102f7a0c5383ef638a577b7d8e6f4ef1fc631fdf420a2f6bdd03417c86abacb20c50ee7f870cfa9ff4e38877e7b7729dad0831b067da4defd47eadde939a89ceea74b71a667ba0b411c6098f9e602bdca0ed6a050077f74ef9ec2d94fa0f6944b1115821a067d744ffdc7e9293807f5d35338c7c706854f384752d62823c51bce505666359c7db7a9dfce611b7a0f9fb2b26ba196534bdc59dfdda6bec3a066430f6a38bb18d99f3d67f5f4589382906545b2ceec2ca70aa3373b3525a67939a3e12e9f1276d6de852067975287f62d9c5287866d0f131e76b233ee58abed7bcd39e15613d0aa4d0fb31936e768adcce4ad0d5ea658bd5139b14175496ba595626dad26e9e5a7a49552da69d175f266546589e5da32cb21cb704cd9a0caf2d8251e5523fd98bd9f7decac66d80b5ece3e865dad56031e866df0b2ecba8e358fa38665f3a3919a6dbb75386e59f6aac351b6a50186d5540f2a5ea6c2a326a1f23e9a7a16cfa35ad7a29365d7aefa60004186edac2b1f0cd9b1ab7c2fd06354e5a3d16aad7885971796962165dc1456ab16d095849be3200f29a954e752937011823a9dbcd4bd366e78d6746f7857fbfd60c85e5fa2da4b1f8d46d228bed8d6247078f6f3bea15aabeda12b0f9923ec3d0cd32ac5b48aebcb111bf7c5115c07f48e07cd452584b3a97bbfba654a82a9b5d6d38f867214c3f58892e5b6e8269d3d588f563a27e6d132ef3cafa99c5a17017aecdd479361394d363e1cc51004afd0abfe4be70d29ba29acbc073c608cfb8f87d2465d54426896518ea6ee2d594a27960d63699dc79ee10c0b5b0ee5cecb7bd36e46e86c76c883a2496a69d6ddf5c9b5593211724511f7cb92899025d90f97cb92891029ee14124557ada441096e294b264278aa15f766c944c8ab05213a9ab6654c7670920d51dddb449e38454f0e4a2d18a08ceccb0bddc10436dabbd65e297aa4f89142c9554569a182888aa2fb66d23a2aed344b663b039e66c93cdadb42cbc85ed578206f0d27d7942593d60ba050c110ae97259396125adc2e4b26ad1118210a14acc8b5590645314307518a9089204a5114a22a2d1824885264f6904daf61280d1fa5d64a870ce1caf22a233c60426c56ea47b9f36d1b4ba31b679eafb5d6d7394a262f78e51c3a775d965996b5bb29edb6424a2959065040386ba5b42956277eb76cda2da5942c26a893d3b1b21bab99b64537a7ddae89c5b2ae01c2cf162d527db6666bb6668bd65a338c5e9c3af33577b2d9923cb464c91d730431501cc3cb6a25b3f1c4209bb440ca313461913b66c51a8f2acb1bcf9d9f2da9a33f5b2d28524e29258d11291a772c65fa5666b201c24af193852d4bfa847b9b8955dfead9a16cb3fc84d2edcadd63f3743769effd56d2ef1d21467ab6cc0d72d32df22887bcdcaf000d5d44ecee0341416e52b791b9d35af767cf1226122d729386196a2f8ed0c9e37c62d328e2fda0c7154552b002232e2d8a108ba00329b810e21222e2047194b385011e22276bd040053f6388e3fc9901e2280a27425f24d1d3f308ab011246f8f020c6138ec4ee7a68c20a233d80c190255c93ec92250a32778efb55a349e6ae3222736b142173e73e1a6e358076c901058ddc75b71f4db7c24b0ece084d1246cd9247cd92398927abd68b8eccab599246899d6641f9c9dbb718fbeca3b157e341d68e7d349a7d2b6703486387069330ab56abb5c351ab25f612a2bc8215e38e2a2086727bf313b2b5247f8df002223fcce0c7096874410426c43842c50dd048c21362ab68162f209d88b8a3144203062c168b9db7ea942b45e3c8137890e9576e94338ad841e5a3a9933e4123d3a77c34d402f1f2010c1348716488a106c040c90f66244106621021b1a882481527f9b9a03ab160063d4941a6f4a98f86aa32dd89010da4e8c204317889972e61c289297c8c8441821d917299cb94d2531fac11034a29a5a88f86d6130c0064165728406a01c484a3dc66c860c70c2134a1054ee021f75f9c3045ee3388c87d4618b96ffa689ac91a3fb826ccad4cb841a62fdd204dcbf355b8e49629e40628a188ab042a725fe5cafd072d4149ee2026f090fb24991d70c123f7bf8fa62f93232a5c72dfb34dc43561ba7a8332d2a07795598f07a11d783e17688c2a535560061596eb2c0349a6a7d77e82ca2092bbed0e68bc303994041864faea832fae7842931d86a8b144136490069423f8c0831a24105ba8a70bf48a077477733f77ce2993e74c82914c692ad52d84d88fa186ce50011a6e6a9251846c85eee84d3290ecb81a64209165101945f2d87d91e753c832688ca25c3becdeabca488e92c8a66a640cf744b2e665b26a19a6045669c528a594ceaa44ad5a863551b50c5322c3b48a655a131996619a1235c394a8b58926aa12b56a19d644d5324c89ad8b4ee6d09a56aceb3a6fe3d9d9d9f13cefb3433f53a7355b728e61c72843c6706f3c7fe619f3278c8ba30389442a65d8b601c9dbe756f25eba96a85a6b358dbbf79aead0cf4d110ddcf53e9afa9b9d68cd0a238f2c879a10e02705166693a94267ff119a2a748d0b75a8c9d0fb5cf62384e1b1756ec563b77e844ea713aa3fa02f3c13a1cc0b0af5d16847a5a6f5ba77d643f367aad0e7c28d091b4e33e651af7a3ee9f9335998644815fab80ca9a35ff1d879fb5ac032c5738c25c6e0364a5f2c4d4e5eaeb55915df50567dd5e1e34e209d59f599ee11eaf95119222a5ae9992c3fa757d46bca2b58c76974d4ab0a72ef42928ae5f46cc7dc619c3153484b1ab5a4d1cf1442590079317b809a0c1169dd03b4a402e5da4363a69169a4671ae99946a40e23dd6a81535451951bb9c3be3e0332663e218d7a7aba7fd3305e0f31dceb28cda0b866054b8a25edb0c6e54abdbb0b35e4434e37bd7454e8bdeb348ff453d891de6527d4c9744ba44fe575dc86f51785d7b12876f970ef13b9a277faeb9dc815bbd394d4cee4a1deccdda784baec5d44ac78c59653d9722257046b6cb89c964e51a79f407388c6b09c52254e7a45778aba53d875d33ba5beeede5da6f8ddd0c2618d4cd1c8f4b3621e244b28a54299d6a694ce3967efd098e9b2d345ef923aa80b88d4413fd3dcbf215394df0dd5045207fd0c67cf3462b2e83b1464ba2375d0f9b5566bbacc09ef58e8848e15bd6b212a942218ea5cb17b4be822f22276d7b9a2f7ee0ba7d861d7aab0443a4b687a16ca0ccef6519392927a4b284599594229d6202dd24da59f8e7a4a6aa64fe14c584359f4372c855f28a917cacf8abb73449e73ce98496d9e97d939018f192a4043c71c9bf340c6c8b39b73ce39a9c853684e2646249167e5a6049a73ce231304e5eeb53bf7d1744dc36d67e4edf6a3d9b49d276c8dc9a3971790b1db128891b112f860f70034356b41a4050a3cf2c8235f234a32bd4a884c8b2842a65f4d91a96442822f4660d47d67906e723a17e85e5a99420551aef5b60a2a72add77ae624c248aef599bd410f9144aeaf4c86d841ae3725e88e36a5ca33e592238549248f2bf0c87549955978219d641b45ea3c02843c4e2445b9bede5ed5572f61e47a9919176a825842ae9f810614e4fa1b204872bd0e4564d01222063a48c895491049e011228b1e11f4fcf090ab64f2e241056a7df1ba402891bbafadb5bea677adadf85a1923c5fbc3137bbd9e4ee6e848a9edaa7e55cfb96741dd83ff41ba0bce51e5f8d8a84e7a0ecbef597eff4375d23dcb7f90ae3ad035c29ddfe1e9391d81472f203ab476787a8e8e8094be325b3c3f531c29c1613a18fad86080cb673b112bde9548ba8e4abc97d5a523235e7c8364b95c442e4a898051aa91ab8c92eb4958ca048cf209ad5ed5ccb3d11f4d76faa588ee2783145d8e23bcbf1192c053e91dfd7a90f28681802076dd935cb00bf595cf34d7752e075f3a994ed5bd1bedfb7653205dc7dd10e4aeed7072eb8646e0910b8841ef36ee72928ded2e18f4ee72d2c18b410f833ec0dfff70c120be9fa15c78838c12250a94cc6da1fd4c73789c79c377c33af8dc50e52d61ca594cef50a995f0ded3a9f495508aa8508a2b522505d7a4b00b3543592f3fdafaa6917d7b9f458acb65693d9b6d3ab8599d699fabdddaeeaafc75dd67af7d78bcda6d68832a77f6dcbbaefbbcefebbceeb33b27a58ed99dbb16da8e9352879d516cc779f696c6dce44e4a1d36ecc2d1b660b9f08619650b6d9682e2369649d17ddacf014f3150071a735b9c0d528b0d0cc7ebf71b3cd7993b3d4a9600d9f817b61c473845924b68fa8d308564e32dc7114af1073de93f9a7edbbbba6d5bb66558dd3a0c72d973589ec2f294e78027bdeb6cd8e040901cde50e35ab9ca499fa19ff2ae2504b7b73c8868230437fc6dfb77970711bb6eeb3a4e7554051324969c91c7e9aa2288882a961c71db843227e8e3dec66dee6d601c1fee2e1807c4e0768a6dbeb7601c160c6e18b4d8073de936fd94f753fe7da655a577a4508aa6d34bf73248f1fe470a2925853a994af897b23c974b8acd536a2289bc887d9d2bc6942e3f557962275c44ac384fe48ab4147acd72e9bc88f444aed895be5e3bdcebe7b5a30448a8e5c5037ea6bf16171baa15162f884ab7117a6709ef55616ac5e7bb4b0674189db084ed25a1bcb696db083fd05a0c725f3887e02162be8cc8f573db7000395cd3c27257ca55395a388b84000a915c6f318b14d7b61cfc0c2d38c76703b1123c7f28ab6236b459b2dce63bcb778b6d5257619c7eca4b5d7e341bcd2be1e92aa1e929dff7c9ac54aa97f753ba174a918774e991700ee9a57f3807839b143b6dfb3c1e1eace3d17832cbe345b9a84b71cb95def41f7d14cef1dedefb9dc984c1ce6442990e7ea66d5c8a5f086e77b9145ff6d971986ea85a501ed090172fa21f7d1bb7e10f7a976fa10f7a97775e98fa8df003431fd3717038c229de08417b1c97a2178216833ebcdff88fef38700ee9df6fe01c9f9c928d308794e363437a3fa734db5abbbdecb6c3f332f2a23c3cdd3864df30d8a14c527c6d1bee21c1eddee94921b8fd7b5f7e60876fa871b15c750e83f633d07b9fa1fff9f04e6ff3bddfdd94ee14a6fe85a4d449600dca74d537b11515ec424a4a85729db00c65ad4c58755527b928cb35796c5f25946ac88e7ae9f384c710e4d365384aa08fabf16594c9a6ceda4a2bae41cad0a7b00679543dea9d9426d3e9d4544376e923451ef5999647bd1476b2fa482961db2b0c85bd5eb166292b9550a8ac7459425dd32b1e9f5197524a29b3cb1e5425a45f09fba890e6d35161f6aa12fa48bdaaa48e5a7a0d4b37959e2add52a6a4a64e388ec239a9df382af51bcf411d87144da887ff913ac63937727c6c6e3cf51c1c479d06dcfe03c751ff7163c33e50c7f11fa9df9873f6d0fae125e7b66d5b0baed4d0056e88ae4c9571e585b872aabc267c11d532fd8dd5993bb688061a83c2556c9ce638fd29004e912c317b7a453b00842dcf11ae3c0c7d548e4228c511106519842c99108146eefac381eba80780508a39422972ef2f4574a50c52c40740887a8e307514c22986a114552aefb2d4902b3fcaa2eef2db5e135e86352176a19e7a8f1a8c5d2cb77159840ab787e153a9d4f61085e3a76450c092b23006bb631406bbf13be6dde46e4e14f62eb4419537ece3cc1a50650f8f37f9c336a8f2463f71086ec74f1d158647fd07c60f314a8a2954dfe50fc1e3085b7e235c79c7d2f29577d3b311a2588e026b542a95db7828451ca1146fd8a0b12e209e71b5a8b06b05bb50f894455b3c28ae7cccdce1c8079d4c4d739c46a46da1d33650d3bad3407f9343c314a1f249a6946add36deab9392e92dddb6ed3d3a6f08c8bd85e3f3d67dca1df7dd5bee30bdab72c7e9df472c7759e9a396bb9bbb5358a58eeda6b0a58eed379c52c7f6d276d2f66fbba7923a36edf5a9d052d651a1a4d9bc0d73c0328973e8d7d0e6db2b453a990373e2d65f6949bf7ccb1d5fe912875e932b3f56f95a7107b05cc37d3d864dc77ebac472857d7451619130b5572ab903f57a4b3b5498bd9b5f8fd43314587a7fe52a2158c2a00f7a95ffe8af9c5ee5fd5248732abc6146c9259a51c75e517864c9d247ca555825675845c7fb146eb327dd07071c72b8f97b0eaaac3d079bbd77127bbdaa3604c11b726799533e5fd85287bc174ea9c362f7369683964bf9eef57a951e6487be6fd3fd12c66179a6fba824ad1695392b9552331000000000b314003028100c874442914838a02bbb5e0f14800c7ea242725619c9c35190c328c820648c31040000008031223444b40d38993851e55b3774c2d9f2a488366931bdc05c2354a7918ad34c2c604095872271b94eb03fd639c683589c2392341edaa43eb9d10114685220015bd1efeee75dc9acbe9188419c4d509223d2ed0e3170b57f412ae39099896b4bed788c0a23de805b0eb3d1de41a6097ac18ff4d18d784799a23726a265bb0b22445321eb62cdbae007e53481afd1bc33d9b0ebd38aacb76e4088dc95298bc735f4dc91f401567a333efa08197192414ab8813e61323d0fa20f27f6e59b65900a612ecbfad9db60be05999306fa7da628b02ce457564369610aed20d658d159a3c8fb6f879d31ac6a41a638a78b2c258b8840e58835b0a9f7378d4e313a84cdd8d4e814af70cf069ae79747e88089c48477b88032c294973ac3bc7644552caa8d101cac6f6379ee9d558754003e8be8125082f57baf346ed193501a8a53da972f09254e46e8a3ae319af83a4085b7a60cb6cd38f8ff38b04823e6eb613ba5167284496d61eed298b3c5dcde5b97b8a7ebc8b1f50f476056d548d0247dbc2354ed8f61b61b477ceeb4e13bd71ea788695d0dc16646e9e833978b87b505aa0550da2bf7558acb8302f9e48bf1cfe2e61661f45f1b0898eb10ec3834baea723fed46e3b5251a7e74771d70d7cc79d831d5065f0a83849d2401d2a05b3c09769e1544d8f3a45165ffaa87c2770639fb8a47dda9d14f48cc60114365525a1e5b050da3a792aa940cee8fede634ff9830c9b270f4ac26b5b19aa1e13fc70a2d0a32e2232624f9ca810358877e035365d941f918ebfa12bd14e54abd10b03163901b7ba587e93503c097b5a4095e523126e93a937c1deed62d688770a3e3fc63da95bf8ba382e22cd1a6b00d78de3d55ae0d326f2c4380b5fb1c376da7fddb14848610fade28d5397f9d85bb12c54cad0099034951aa48244b42c2e44aa76b7902f49be4ac6ee56594a3bf95c0773e94bd9e59b2d25dd443772869e501fdc492e483e23a63bbb29230167a3f68550870d83bb1357cc8cc9b18f56d055875fdebd7a4154502f0a7512f179ffbab02c7616418caae67fb2ab83f0f7d2a532cecd1808bd4cfcc9098b0f904f050a3dfc69c34da998f3535377b231ef89574f3edd1169f43c2900d9526508e4a2042824676a070070da84f578032343748acbded565e0cd3e221c1967e83012f8c5d2b34231002371237c58bb21cd7771299ae82e140f2c84f94dd9e81f79ad09b3a41484f884a3d78a61b147899275881f959cb528600106fa086fe347b37f6c0488e874ba2e807f2d22722c2c4bbeabf2108434fc5bc4515c3633dff920e1f7865868e030fc1472ef3b0628d2382571afc619336c7f141d5440358a24636674b5e87399662d11be1fd6d6cdeac22dbf23c6e9f1c1c9eb87d5c2894edf4b88c1567c1550ace46d56f8c024982fd70b74ed0aeca2c1db79570417dd0f6b0e153485040b523182794ce7fed5d52eceadf545c6566dfa36a5825773e4367a1d0c1cc78f42dac33572013c2d2a24ba5b814dffa9b96cf066c200f92802f131e42839fe06103ca759def2f26da44f0adcd2332ea20da0b49eb8c53178208e67039308cd093d8fd350016f9ca73844e7861e0851d1cd8399cf39bf52a00cbff10f22f16369520c888b6beaf515c6271e6afd7afd7041f235861ec68cf3ee8b084edb96100f1f9be03702ec3bedb5a311ae6a52200272da60e2397243dee48db36a919dbd4d94c2fd198c06e1b91f61e5484ac800e992e9729f9a75376fa3a7facb91eaa3f67a81b0821e4475cdcc7693ead7d44514997f9138141390fe6d2daaf5640f6f78bc86cfe3976bef0597a3c78ed5761601a9c3400ef18da4cb3ccf983582222638f15ae92f71b6398d4eb9f5d8a267f8884a4d7b687921a439edc78aeaaeb963b3a9e049fb38fe3bb09c38aae9fa6261e361569713c25b92143e38999adec58f44b3d47f08dc6d253a827047be5e1101d1da254ccdab00c5b47ddc0354833971aea1473d0329126238a27b57a155438064ed8021b4fe85ea308b43535356624cb130d2cac6d8466c1ce94cf77b1871d7ec0ba4c90a29b9a423b0af7ade7f3685320752c7f65f020c2c90e80a6fa7de97b7d0636253d4fef3d4559a189ee73bc2fa818c0e954e1ac7838883512fe236752dee379250dcf536f0c49f5849a267e4cf9219c0c1391bbed5a1737916cd29d9478c3262675fd67e0b7494d07c0f856bd18bed2e51870634908e3cdbafb444c5caf511ebaea669a97868ebe53ba9ce9f6cbdd07896ec32142a3420c826e235f5675b3fe726195d56dceef9bfc56899eb8d66dc8a2823cc3619d350db44ac2f3dee6c979225cfde7ac51c3d0743bdf1074b736ad395b4e0cde6c4dfb676d4292873334975121505798d9f4b3360103ad8d11366c706b80b2a349a3ebf0d34973a8fd05e0d911095e6627cb433f34639d6835e9713afcd4ec2a297a9930f12e43a04f240e2265f4ca965164f71aa7afc4502ee7fece80cf906cef176c9c417938d0e21d3c1be3591fddd33427abb4184075ee108551386240d20fed4555f0b075ab1c61ad42d148280b4add92b184487c545c3ec2d499c22fd6fbac651d8deb4d380f920d5221477c8d424dc7a83fd54e314c3a17923c28a6693aa1d7ccb5cb0d14c20dfd0ef3537bd39d5f2793f1e191fbd617184fd953c347ea8bbad017b6fc892d241b310eda76fd77aaea9055010ef7e7cc103f1536ea2f0fd0410ebf39f8d37a4de7827a9b15010fef9f60fbe9b0f85498c971d0698624b9c1d14237929ee3bce75f08188bda5e8bedb2566b2754f8d25defcbe9f44b62de67c6b037222ba1c85110daf01e8124d4c930d7489d8eb5bd5364fbee21f72e907c2e9f5fc49f585a62f5fa0c78717dcd1a3ea33aff4bb1104cb67707e980e8dc5302643d7645707accc486397a798a0818c16335ac3c06dc318de92a791b749467f884e6c923fe38aea941aa732211debf771e2ebc046254dc7344e627bc775e039a6952e021c4015e5fd1f6af7a33c46ab212a73ca394fe25792b9a5e22a346b06719d35c2e3a0204a03faba454d0f7ddf1129d8c1e1517deef4edf6dae32e544de7f948478c3fd9832afd4fda60a072d5758ff94de990bca2fcb442869b6cab813fe8d4da67fa5e164f4eef3f2cdd43cbcdbafd8ae525947413df5099323ed389a14d4ee5a598a9703520cc7fe08acf2ac55fe5a29e72ad7bdba4b566b302569c6b3449ad675ab33598a178b1b27c9e1e81b94f5ed94dc606bd146ebfb60cb10c2d16e35183eac5afa05a541d66bd717b7f40ba4ca06bdf4640e4d7693e5a842bd76f343d7355b723f93151fbbde26be33bad4ddfc2500ac51c1b663cacb326942da1e933fef32c307da2d019de2071aa89b85104bf9824f630f7f0f6c71b09c319a9c25bea711628c1461241cdf9e63807fb8ffb27aa51357c0ecd284bdbd8cc0efc9741d00743538ad28fb7c240381a7dc84a0b5eb941daf57334c3d1901acaf3970b34987be473189ad65eddf96da468891884bfc7c4e2aac53fa61bd45105d3281459343d207efef5bec4311a6d9aefae4896af215298afa30d12156781c1005ba2d6a6e21f411b74c8c30f9bfdad58dc20851ac606f2aac2f797298f9f1509532d67293c2d6444f261b65256c8ec768a9780d5da11fee06184bf9897ee414ed056f332b7d2f8e0f26a2f88b07fa840b34d594ec72bfe550f5fa299bf3844818fdd443929160892ba7a1ea9965babc2ebcd2c24ab142a35400fa782c5dd35c1468853a1b6a33094589a890bbc05252c51612d06c9a78ddaacdcdf1858781f0ee1811002d7e2c9dccfc4c7f13e18fefa6c340ef7676baaba2c09df0c99b5af50110cee71f0c513e7ed4c71303954ba04c60e66fb4ba35006ce21389663600cda14716567c30902137a7838fccdf942efe29a645c704aca26f73b269faddc10994fd6f43ff031fa893767d77aa1b0d7adbcb61242cd0c1540cf2a1d3d76d780af9dab70465afd0798913e866c3ff1ad1da171d73cc3c29388c47eb4d24290d905ab4e7af08f04d630a13013c117c5671f2347b842ed9f7dace103cee0686327d23c999842d79cdcf16d1b9b9f5535fdc4a9c6742d90d57c2b1a13ea56eacf8a4c0e9ab33127c9ff680090edd8cd4548137e496199bd2cdaa57ea43d3be5ffefd98a8217b254c5cafa15c4bdabe8dc01b34802ac4fd55cc0dfb8db160150ea0050cc41fee3754b491fc30672a3784280edd3df3818b3b0d3f915059d51e8015387ca2bf8281583df6193f10ccca5af920d629fa2b47c6b1c8180ec702e6af94d538d5bbb3e24c4de180c18d01c8cea1f73fefa04f5393d2d290e22929493edaf76c26f0a06bd3a2b821b982b1cdb35b2cd4ecd35cf2cc8fbcad994c42cb9cbd404417cebe983d4d0bda9972639bcc673ad8a647f18b570d1dfc2348e70a41d1b4cd87bedc0bc7594d15089f31f90b6db45c654b036dc47fce26e644c001c568e3fb04475fb0c7e82dcb1e6c8a9b738bb301b0bb6dd4bb69eb046d864c9d5adef690106728985a578d508deb41cf202de2da691d32472b649e142f0775dc52939fa69b3f15bcc5a741cfcb1ab5b98cc3e4eeeee93447fe4639873f4cd868012d0ca9897252510254fe44a7aa0203b756aca598ae96409c8a412d3125ca018565d28d731a539f247697203f305f3ae603ad256a8c447328376e34a8bac790994f49132d9eccccc22a1302e5a492a3aa2b0843db997228e61395651fd00b8f443c0df211f6356e53ce82ac65ac39a215a21a1bb687815ea336604961a2254517082dcdda4ef87772fe57d076fb52efe2f46cd2d656c33ed7d43191a113c4893a550d1925aef427463576c70382dd2ab6e775b8f4614dd4ca6400c808d3ffcc02866ddd82d24b2bd64e32e25f05d1e56d5a938787e0b24d86722271b3bf4782be351f4ad5f1a16ab88730862e6856fd48eb282eb84d0ffcab382d6b868662f7c1fc380a47107cc8204822853b726ccd4aa4850044a2d2701e32c005cd6ffb76859d90e81645e5bee93ad78910eebb919477c9dd8bb5a883cc5ef41503d5de080c71ac956f1cc5a488ebcaeb1b1fb747584dee35d95430bcfd62c15a652bab0a42c02057a592359a1986c16c38cf2fe66c8408d5d63b423b9cdd0da16aaba2e8fb37926f31fd106c1fb61dad2a6cc7fa22489a52ae96d1ecc43fac183e8266c49b217090908ff587e13e6e267fdf7442cf1087a9c13c5076b0f1a45212610755e60a3f78f58abf877ed3c7d0297dca29404e05d01ec1ec02305385e561a332219f115a99d12680d889ab31663b2b00a60916f18d61ba1cdbdc3075ed995e2e445055b5c65f86a2649ca9d69b1a7833c3e694c62214de934b18c7c9f898cdf0b82f432bbb5ee02135b5dabf71d2c81a18654389d8286d4cca92e8c59afe327e80acbf2b710a186b4367158425009f2fb04838813cb3b0227dbcee02a5b200bba21b223b3b93f9880d1706b262c7f1e2c8eec12d303ac628790086112af9b7c00423668577e859f7a814b1b72dc1122047fd6720dfa396ca9ac4b461eb4da2047e7a0667b524bb83a6017b77a1589a43430fa0aec66d0b9787e179742c97703967003c1150f9833c5a4bfb4b4567892924783b81d7e51b23847c415e2790a22b40191d44d4280c0661b7b9b3ce20f085abc4c39026d28f8090d140be4c634a22cbebdc79bc0119cd23787c2a42060218ba473826da281cdf26ff7d8712c1e528a56d9a57b166235db33d85ac55ba0d76ff34141ca9fab383a5b1593af3656048e4657de3d7105cd67de466eba4fe0f471c7e476a1736b6619a058b4d9c3afebd31d0c63d839eebf3297c512d52d5f70f72fde748123ff172edc0d75bde8c27c9004b91dd271daec343d3e3f01a96d14f5392fc1e79bf2325fa197acff162574005dc94949e3db923f1b38193014325b082fc4da6720f0091af12833b049c6ccb8f028c9b846572eb96b978b6272d9830bc6b165e82466a42fe9092f3f0e84a6457fc9e6c70dd0d9cea98122a0868def6b57e58a44a51f8cbf1892158cdbba9a685582daa1059fd9ed63b54392915d87a2577e44aa8fe90efa118b2db05e0451f3f22c51a56a1d77a7340d4836aca9e10f118bbf937b3f0aa494369fb2e31fe58fd7a1e8b8e4630e21f0f2b7547d651fe40681a906a6ca8af3c3814e9f4ad315d5c5460f86ea149c9692915f014ccaaf68b23fa0e8d39f15814c6f8f638616080ea3ea1e45cee45d6b14a9d17b1d1bf9620cc0e16c964ead9918123384250860f18d3e5b71a03102593cd26644dbaa187a8a259b2c7a2f3ca212c73d6aeb474098bd5ecaac00759f8e11e98c3512279d6a12093d868e084428676fefffa632e4c0b927afb8ade01930f5fa312154ae93160d2106f764eb0b00906eeb0094e3226f51e005d5587aeca3a99b0881605ed01f4a397222d5000ef480240cc83f292a688a022c0ac60bb9bd9b623b09e102cb75d7eeedfde88b9bb075b899cd4e22d88fa93ad69022bec55ac78b77f408e88ec5383c00a1bc837d4cbe4c389c7e5f5cb56aa81dc5a92cf2cc8deeae16a4742f259e5c8e73d8d7c36a64474a1293a96dac7cc887c9ae2b9ffcda78105c228a91cb2404056039cc856e90f66887c209d8e250f6dfad5bad50c44d5acc32b51d7559855387bad0b6fdd90609bf45bae56ab727e01243f2e3e375f13f2d420f2137944260d21208c0b384567d3ba554a097f32fa6ce6ea0a1cfbe280a4764abdd1cd673273d079258b30886e7da5876f5ae077287d9ac036c0e4382581a32302ce5791f294baa979a17eef1ba6bf50e315eed14e94c952cfda25ad084a9ab2845062fce539140852eca30d2cf274525bfc8210b68d3b08ee496221b0fba110533e007191834a36546b96f3381aa4bf2008ef7d1cf4c35c6daec251f09f3fd16a2053ef1e7084e7e5cd0d27b4164c2d68175d72f70f9f7f40cd9cd34005b88411eb819f7e8ad7c812a24703d37db617ff0d7209968a2e266569dd059b7af89d8a143c2b6a696a1fbcca942db70de754e4a87d6fe4aaa0776fdb3dbd3e7943d16059074abcaf630f4e81b86d40353d2bcd39ac09cb5de5713dd9149c453d47133e906ddd4628bd8dcb80af2e21d401d9452523c232c9555a0fb136d40931841f574b1c2781cbc36a3808ef66141f9081b274b0c13ca293c5d41660bb4a10edcbb67988846b7d386a474a4ed8c91d142c409b030c009a56504c91f68de318cd952f0fb3e38fe7b2acf5bd5b816eef5fbc005de37b60891316ae70b710e2cde370291c4a2ab5a04067afff719daaba00a8d55d7cfa3048ac0d7236829bcc3cbb9e7cafa5f76432098b36b8d90817b047803e08f3f316b700856318d54f4658ed0d072842d02591a0cfce20f16a94de6124206ead0a55ac5697a3aea858c99c974a485bf1a03b3450923fb33ee03285e58de198f8c23554917c69089e3cf30620b3f1814f8f2feedb3a42f2bb522e78638497551570f04065e62a70180fcd7f80237785cb9955f1b683dd58ed04eea74e74716dd78ed4d5e41dd52d3fb86e1ec36902b7b4c8850221327d52b74a4486ed3862dd1a156b8f869135686ef082d207e28e88738851b00e05fa02c39581612d5645b76dd68af4efcf17198016970dc4552078987a65416002666441243d9e8e480313c88b919dced39d4e569160a1921f59f0837ea9e855632c2f7a676aa59cf9b8085b29d80ba6bb6f5f7842fb298be27d1c86f4fcb3b5bd7ae566fa2ab583edcb91e6e108185d34606c09b934676e8e3d4008df3ebf1877037f437a8c385182755370cb5c4bd18bb28fe3bcc5a01adf751c4c277d9a9ced04c21df6547e752c15b0cc4c7cc30dc4ba99f694103253af8df0c0734eba9023ec64055ba4399b6a94c4899d518cbdb7683ca06edf5810e6a1ac304412b476281e02c31eebf14c17c0df6e9af0c650c12de609b8e0cbd4d51e5fae3da3bd661115a7f7f84e39d21327976a2645455f20000b174da408d1e25d8a9bca033c98d0088d60a98281c8060357c3a0e2badc3a2265ee2c720700954295524e320b4ddc687cd81ad67552e684995656911ddcc9b1cb0cbd308388d79ea4cc74f8e5535be002544919a372a4706eddd4214391720313cd91da8c05ca1b69d8bfe8e2b01d190acdca3555c44e9ce739be067d9af2f9ab96841e2e2839c30ef9a65bd0b02316feb1cfcda0d817114d446afcc32b41f435d176d976ee572e3344d57fdcb9d5eab6cb1a18575d08e0bdb27eaff340d31b0cadf8882ad94475995df1554ee22e1c897545a694f9b33c2f2e3e71ab3977cc1dec2a1d8627cad656b87fa42d44e381227d1415c5e9dd42e180687f3a1c745caa6fa7bf284f4ec3315e98632733250dc7528ad3b8b9a2e1a9a03285a5905b580f9fee9441befd26091bfafa1fb22ba1e125178c5a0768a1fd482ec2e544167c93dbd0e0172512fbd3fabc56250827be79a4ee451927003ec80dbc0002d06146c368e3879723d0c46c68f0516af7b8458e22c11aebae47c42c43e4265f6b195785a3ba3c289ff0633d80bd3f9cb6bb51e163b79452059b744c55f349621caae02c466827c1e78bf3383d0c310df893415864f562120c04d03f46778617b6111f66deb54da3d601a337b597a5a9deb1d192e6712e353e3445e02365b1d3cf4565d60144a0bd4d9503d15316f0c4941a66b360a16039b0e820b18d0f8e082aac1bbe053236ec4329c2ec66b38c2ddb70c19110fc212e4b58fb6a5d71c4977e258e94ef5c289406d9748bfa5fed480e8fbe4856a50908d017f82b8ad7d01a33af3d6ebc9858ce48b052c1adfbb2ecd579de69eb0b2201d2b7f865dd0a555dbc79cd01a0ccd84d85e1befe38db58abf51212b36f263a986997d8a727f157def5740b481233f5bdbb2d15ed10f25c3733707b37b5a0812b8751503ff805032e20b8291bf1279c20aba342827bfcab37598306e9c6415919b4ccfa5421226f533799fcfcedf9dd7bfc5a471c0a1b3b587512b0a70bccc33fad49843fa38e3886267cc80c450cb86b6ddadbd339fbee8106041d0af9cce9ecbaa94e52f37a959c09850f418d2f50bf6d1634efad8df2059a3f895d91f616b7369d9f7db79c2983c7dc2fab7fb7b096540793287836bb0c44d325ad945017d1e22adbe60532e22a319a961583bf10d46c0aa7b44053696d81d902590cd0ddfd26298aae307599b27435478001d70e5192920c7714c882a429653d3cd361512b3ef5f14a67f77a172bb3922009094bf25908bab9f74606b716a09d5d3d0063fc9b2f615323749828c9602620f8e3a7678842e42291c08119de20045206141cfa904cdd2238f40deec797934bfce66b5e803a636faafde55155531ee80b9faa595131a5cb8234efaf05dc8f24cc0d2aae25af5224496f1d07b805f766568990d00c22eca89ea0f62e09ef9b25e2f7f1daf78638b61384b7232fd3a90e26395e783aaf09931645e2c17969234a4dfe65ee497909dec20627f2a91dffbed45c17765c93e45e518567c6d73b3a20591faaa1aa4378a821d65f345eb60084dc0fdbad64f4184fd0d1f0b7560a24ae77162df1585768e17f8d12ae7830ea4d732bc29de12d7cb75969a00ea9f9f186d0a1fe4b606cf60c6dccb0822a579b5c3523915b531d5c060b7e3fda93cfb3c69c18dd5ca86a073f39cf41f95bb5df9a3b9748b37fcc5d9da53415d7f2aed674a058650317c489ba102610ca25cb1b78f92f8b0958c8ac9e6ad5788819301762f35168a6fbb3d1954d72786b30069e0fc42a26211abc3df9c2d6f2fa3f65ef9fd1b6426677507e6fc0a27b760740afcbea18c24252632b2334c0c5e44d1b3a0b0e61c042666d94bfc5c7623b5353f2839c3f3b0cc43aa7c9f939ce4bdeb44a3d6e53287c44810cb0ef828f35eba5463e60e81918b6f6b73001630bd9d4c3d6400159039b568433097622141c93e914ee80569684f64eb1f5c944e03fc58fd5075a7e8bbea8efea3fc667d1db7f7553b0112309972b5121de2a908cdec85afcc007041847c282e7f3e46436ad6119b6f94f376706f7e7484ae7d297b67b9ec487c4174e6c7931b457261472c150570026f21fad3a4783dcb88157edcc37e2373a0928780a3367136a9998263e78784d7b8346b5ac6810764d5bf207b576895ce539361112e830bca0a631016d436218b721a9867fb0c97002f54e8e61e7f97fe6b5dc7e3368331c387fce2ea3dc7c83c5ed3fc68d340eeb9f64aede91a988bfff8a14ac3309f65e7445f30b81970ad988e9337645b9d0a69e5426820302e3c5550ea782d81b1460f9ef3c420fc4074c5d91a2660f919042b08873f9c6a63deacee8bbea49815e7ca9c443cecd473b34b42c31ab0ccc2d70921493b7e4c4847d27238dd01528c38dc84415580dd755aeb971e84ea1fb7c318343d7c1bfaf9d4ca1b01a644cb60ef5bfa60c80ed4bba8a25ecaa49087ae8bbdc9d941a6e995ca5586495a66a778b679386e80b12b174e3298eebbe220767215c9533fdd0fa92d4be5d920985cd100038fa304c8f4f22dacd7d3d5ef0d4bfaec8ae5f7d04042cffd866947f15c138267cd1bb9439b823ad3929f04a178a7de3e5260df2211e37d15c12eba6ba0eadfc85c543a97518e62b37d1fbf09cb2a93bd57bc09cdf829ba47d75f20c68224a9d79345be3476098ab65f632051ddb08afc02321938726e0f856514026055984a4a0cecdcbc862f16a99bc326d6a3a9db329613e173b238dc32f98d8ae660107c1be46cd8404656c74df57282bffe3bf01f0a680b34f5d966f7e3562e1cbb6967c7590dad0f57afda98f8ea73ec1021338ce3c28b2b9a2b6fba35c0956803c5fbccdd2022e5a245c70010a5ceb97239a808016edc269e0fb04b44697adce9a794d019adc57ad6213db1c946c1e24021a158df21460cd1a938b2ff865d9335d3e9ce88cdc309752a586f6bad286a1ec0209f752ce6822fb07339476f16d7bb931738c24e039e5bf37ac3b29498eea6464922b1ea256c47ce8b392760272d0818cfd44bf37171d98d4f6781379eb43430d0c342557155c16074f71639ee05fe2e8761b48f8d834d4aa486d5cb59691ab34a1a1f97183454c03ef0b3863041406f86ed0d9c95f8150aafec5ce252f919e6ef00f6836846f9ae152d1e45a40dea09f8a35a4369624642cfdcc618d00737152542fc8935a3fa575a2cf5632872b200fee311f298bf76a651e1adc1e1303e80738bfe8d4f2b37ad038d400547ba373c34bb1176346b7602d37e4d90d0e6bc4f3e59ccbd33c4c530a51abd551501fe68f84a7649f16c7cbeddf2c11bb7b178d3a488b59c6c77a7371c317907b69e2443a2c43ec1f1f6b48080745cc0a27bddf42fe6ba3813b1f0d54f32b7e5bcf68298f4aa2761063cb6f8eed52cdd769d3c92d5301cf25740931f0f8e510fb7f47d360520df976c7003a5f96cbd36e0bab2bb8a5dddf3fb86a889b83705602627398b152ef67444add09d314ab549c197ce3fc5575d3066b1f84e7dd9bab5335964dcd42273585187719de740ffb1129c1c2145e4aabc7ede365d39b7ebef6da257ca5deef6d6523c9ceb109c979ad013b68701bc3bfb6b064a6a26720e532589bc204b82231bd063a3f6a635b15c260bc2230a401e4e1099414a3df7323b99ad410f8a6507d8d4d328bb6a2befbda1b7b6873ca1e71c2611a9ea08008bad84b57a1ee33027df82d52691ec802ba89910d188781aadee570fc054c3923b7cfc218fa26da5a9a2812ca7004ca57c22a7376c232b4cda13addaf71cc03a1b2b7c5dc4adc741848c239a1439c76b80b7a126913c235ce9aa9bc1bd0d62f907861128d1ea9be8337c72bff8e7277c2bf8f25d29be28788d2ea4018bef650fab3633ca1a148e989bd4d1e8269f96b5fdb12bb565eadb117eaf0180e0bb17bc987ce672e48fd262831e1e2a4143ba08dc993f441f2c23a6843b23b897ddcfc6485b947a608c225ff20946d222828709230cb1211c5f3ab7a719d05d64f3f5badb1e6fe2e8f5a941863cb905c6f01dc7e7da5a8c58762927c2acaf65145355408433a6ffa00dc5e9ac19912b5b3993a3c40248e28934910a7f1b1594cf0d174ed27bb504f8f72a9b0c24d4a005940a1cad59fdbc6f45f695e97b925483ad9661032d9e7792cb1e89c8d2fc037c627d7948a60094049f88a7298ac24e292e5abcabb757a108af6a06f411b8044d248e83bf7e6a4c88321fb33221501142a5840a154510473c39983fecfce708ea759c2e33038bbe22bb33c57fe6c062a0406b19075438730069359dccbb3cd70e15aa0eeb70f4243330c890799a795369f41cb36bcd25e60d3a2ee7243945d444df666e25daf97c336da9e34033e99b96d4b046dd1e8304c38c7b67ebab035604a071e32ced2bfc5456d7309f01c48063051d4728dcc11578b6a60ffb869eaff5dc658adc4d6b69ac8249e933be0eff62bec1243774cc9b83ff8ebc2df0e0e5f5a5ae0579ca5cab2afcbc643f08a50b428e9d4038cea6296dea3711d5891e8cae8225c31a97a1e1233ec1bb29d5b2cd383717e0c5d6d4d247e5a7589b6a74d66a6b237c00872b4101236b23d820b2826d4eb5d15305ec2648862f262ebd03698a7ead99bb6dc28ab24dad8c4904c531037531338046d12bb05cd1db8ae98a099fd643635649dd1268e61b03f598d7382e3eac11172be87399a04b13ee69ec3833e1e16200ac483ee811ecf52df74f6c8e4ba35b93b4fb5c5668e395da20a996c460d2b86064db8894cf949040a2d5feff837821bd018fd83474afdd23723b41453dc7786a74222828f02c4466bc892d22d952ee9253050566af97b007328dc6a1928c38b8e1df896663c8f9fae91fe07d127ff0192d9ce6336c426abe203a8da973078236384eb45ea72dd9a74af66634038dc294b5075eb1348ec827f9564b3bb0054acaffc678e46595419b6b3947ea3739a248a23244d7c8809969f90179131b40eebad96709f5a80bac6ad4c0aae52a65da13b35fb63ce244e6a362cf65d07999fec6d2756acaa42a1bf8c5a6ee38fb0e4f17e86c9d8850095548fe739d1baec70ee0c33facc4b1ca715d3a1546b5c14049caf472e5c2737866c4c351734473b3460d7a090f54efb1e7f168f1bed13d6577264a41b2282b7e0a4d9e7d56463adee8212638fb0672fd1b537e511cff2099d29e26ff10d8a2036d4afd01d20ef93adfec8259ed89c361f1565e31efb684f0249ffec52b59241dcaab9e770e6f05a938663a450ccdecb5381e18a5d1a72204dcf1f4a5f57a9408ea32463c52e3ea61c96819104c39762992b8062fdcac6aaf084a190590f1e86c315104272d77fb1e95c500ba19b5f6aeede7be2b450b47a8fa2b681f1bbecf11d1f3274e0ef1181ce01a7523623c790f92430b5b779171c87a7faddde9e4b8dd9893faab4ecee589bab922257befe739a96823ad1e83505db8e4e8c3be49864ce4e0b3b3ffe38a9e9e6571bf5dc5e385a02b7f50f00a190373cb2ce8c2f75cb65f52d34f519e8e842f9d46da0729989bb13e4849981d07ba285b2763a93b133fe142eee92c2cf5ab53ade0d7ab90a8795f650c832610b2515d6fbac8636674648fe7a5b4cfbbbb87b15271714cdb0e15ec75168f1b452122ee121eb432d7fd4f3a76740ae61677509c4c774f3beb8a3d6f8162338cd4037ae143ed1b662b0f0ae57eed17ce58d2563bfa5dc8b07d30b060efb416154e47dba2264645adea87c4c49822e2637d1c660a7e152cea68cb81996ad00a28b311c197a7cf90b89419a652543ea5c37d70a05ce50ba4a9759f40604ed7e168f7829b809703bd344d6836e19a5840b9bbbd29b4b9e8558561cabd0d86022b26ac5dfa06529decc198ff632c1b55606d4c5dcfd8bf2ea51404bd8735b6a3117cb45bdd60af2cd4a0454183bf97a1ff19a04e39d3d3aa48dd3c0c6d7a66e6f4f9617e85aa972031d4f1b2b95b7e37bf356a157a82e7153871fc5a68f2d0b094eccc4739a212ecaacfac0f401fdc1de6002f68a1a345020fc438e2b879f8774111720409be54f56bd203e6d825a3d36945ed6fd42767c0d90596610a5bc13fdafc02493cfc24e9fa35ffe4fc07d1502891610cb705aea57d3da0081d25b06dbe79792d1cdcb9fcc5375ea429357174887630e309db7ba3f4e30751db2d58b56566898ca4ab92b00ccccb7fc3020dec2e8ded66c8792cf3c285d36cf2e81ae01b385afc00b9af43f69019a417e732265914ae967fc8822feaa40d9fc3403dd623a6c31b842561902cab9c704dfdee56f475e399329d98d2916cfb65048696bb5932b9d0d2638367a1d5923def266d6abf5e0aa2d21735d601608681ca81471962b85e586aff04698b7c706f9d18feff77c976174394222f413ea548c25ad8ae92e3ed585f4e1bbe7a042f2174e275ef1dc06796c7ecd4b7bc548c587dfd8d511ca69820d0237f0a5bc210999450b1691bd53ca51ef5ca0dcde0779eab68d79051e01b71bf56617a6757f704202dcc62d519666e2cdf5e9d33232c6727f6863c9872e067b91be8ff645d946577c93faa68efff7a4ad1927da5414649426d8c2e9d69e0e1aedd71921af5349f772f6484768eaf6f33207c60b6b990bc8442c212c34cef86b905bd42c8f53261effa7a97f72c26b697a7fc09710c4e473b8e24df79554e03857b31b0c0e3cee2e4dd1d68afabb84cd01567f52b013d89f8089cfce76ca9191456030639afd212a20f81d5f434e1a68de5e9d933e93c1e5ece1c83911e6b7e031928571ccc6bc06191cac7777cd1d062194fdfe453a967d5e9ce9f9e5978735e24b76ae4346bf7304dd6ca09d1f014d7c1514139349803430e46c9d3f38143f25a4ef90cf5ab0af57dc14b88329e8fcf99e4a3b333cd736d22e1597e78e1ff01d6515e0786adf139753610447aa7321d99352d24eeaf20f82ee9d2e4f8cc5b7771f6c89342175752c70165b8536437b87ed77f8544ca6208f42c71ef4883f77f08cc051cf355e139195e9a252b356a6bb043df5e48c784a3970e21875e1b98c0ac73cdfdc0d4ff0cde6c184d75b4c8cf4904863d7049b9274c78547589e2d9a69528e0d30a2c99a2eb84677e73644baf59f900fd473f08e083db556d7545ad762ee031c98cabb17f1524848014d6ab07565cac5df68e6b999ec7c2fbc844138bc32e933cf75042a4e9d4f4990c5b7133ee9500ab0c91174642336ffd1476c8ebc322f561c664d72f550239a853dae23412a3113e66e07e04c0e531a7fbb58b1698c60a640f5df93ac23f2dac7f88ddbecd39db954a834b31deb566411842ecb691090fdc8ef1ad097471870c548dda54660186c82cdf05a0f6187aaab10d98b19e006b5be133e0ceea258cce0618850b77600599ab5156a64b5e9ac3fcd1f5ba3f84de5168de05134bd8ab348a326fe5c864a45afea5d43c6e0ecdb2c914d4c3aca5c07726fac5f61c036a9186493baa73a5043f2e3fc38ef2da1e0c4d4f3e8b18fa4a1b82e4b0101716c918f184a48e9e7499f5fc86dcf7ae8a8ac3ca617cf495fab55118093ab5632a54771523aec5ca6a69f333074497fa76fb0f586334a1441339d1249fc64d81fc286d162fb8dfb4f60803cbd3fe6e0448de98b0bad56815f319f9f7bdc8bfe1c8e6b9bff618cb0ad701866f08784eb9b50c6d80cc131088d42aab2fa4a0371b7fe2ae3e64f236de2564dc9aed38a09fa5e13a325d23391e84eec6da180ce2f9063592015f101b4283d5ac1c7e76a2baf91d5732a22fcf3ee69f5b1bf51d0be5644b30d7809c317eff34ec852792f4bf1a8aaa8299f56dee4e125cb9a9978187d3b0c3db2c1291dc647524d78f58f9254450eafd9255bef8e4fe6bc2c18d20f12d9bcaaca4de4f9c7b3551da278c95bcd1844b5682d290c7a74dd937d0c5d9d167b98dcfb6bca07ec7b2a3f1a2eb85dc87b119f493ded921e5699cb6d0ef29ef77fbdb88ee037f160c9f243e4fd6dac15c0771c0524cbaff1c93f009dca02767a50af6c3f1edeb8c0d093df03932957477f7b046d194aec56dd03121794450780362a092080e0b4ae9ec6bc0ac2d1a5e5f580ed6872025818a00410d71bcb13ae1854020d19db0d282b4efec1f7f6ead0b23c2d1b475d3ecb88b2761a9dc7da0f1ec36a742a83ae2e5162610f4177a4b6ef1a14a5319b40e7daaec13506b90568c22245631e88e329e856b84580c0c6b3f63e3e16a671105c1e393e99a8f80283b22d220128178903e1872edfcf798849cae68b231781d267d1f620815af83cb867f00c3439f193d46ac221061f6c43176e7c79c43612585d3d542b38afe18c7ce114bcf3269384af5d6960cf09f05675026de8d233766c57fd5a7ea3bd5e17eefddeb358743ebc4516f829e9f5a6a89101925bb100090d5495f3ea3c7c23420c717e42993ec820e2e546447f3c7b812d26d7a60454f324a4b8e5dced34d0babd96e06cd7cd15e029fcfccc6b4e44beedc7c4adfb3b1073c803d28d2c06d0f13cd70d03d918f021140921e0bf100cba0b8b887626dd7b4d79124d8d3e3f12c6444ea2f8a67ab77ad04f4f2becbb829b1bc14087a4cdd18dc375843db845db0dfcc44b258448f039098177a1662471ebef4e3bfebbf320af8188109deeb83b2a7f703752e48341a95c9e4b530098e3f2c4c46ee7b7327ffc181e41f754d5b7f9fc9ed0e763ed0bc2e399bfbccda5cc178eeb52817d9298760c62a8c2953e8367fc5eee060378a7f077570db9c28a5f8c06c658b09b23cab9ff731283225b1934b6ea6b66a484969b65560a8947e797a1ffb4cb0633ad1cb179b4691c89db78a9f8b5467bbfe296e5a7d3a9aaa88aeaa6f44ed2a37b318a4b27514bea64453e20c4858ba5d43055d42efa544eecb7bc5bb5a5f648ea76344d251d8a91adb39d39f68a5fc32c6dbb4540d434732062a2e45d5f8602c4eed968b0aedae04796ae9f902a5b0b4b6a71620b5cb1fe62833a37a2cb9f2807fb22b86dfe461e320567b868e74797105a058f5f4b74aba8a6efc0c4a16ba2f8906a89fe97a8282599e0c62f0f6d6a420b4231ff564af06e807fc0f41257b6d9744b8c7c62be318472ce2c71883c42c83158c6453cec9d842ff9c6f363044d4dc44c44c52745a6f199ed993128846dfcae6e455153272e826b30cde3741353527b52ed9208e98a7241b47db8d64ad3fca6e966a1d8caefa0f047d76ba4a535355d3405fd78ae50954c136878ccd72dcdb080e9a015d5075af51ddce0a75808d85b5929209d673a7590fa7facbd563cf8073be09f5d2e26ac697835d7dd88044a99b247d83fd853fc0f949b7250671558c168e37713b7a053d8d3235a750b170337eadc1c36b4e856acdbf66e97c9abcbecf8d50a03408d89c85185a639fa73069461081881e6ee42c8acf4cf661eaa55f2fe03a0f6a441f9678e21d5f9a517ecc1aac02d2a883615220f90bf27003d21c3a9dfffbc21c4909b3e417713c3eb1ef7915f8bb82cbd9d081f3fb8a6ea7a884be7f8b68386756d86f663cf4f46fc1090aa13bb145357b1c022d01370753643b5375740bf57aee5c454ddb9ee91e8fe3ff9f8c254d7e2827d6072c27918256cbac8600ec2d8b135829a62a7c665510733dc4cd44bf0bb6fb5b1330001f083dcbd1285ae49c547f872e5c45c757e2383b3da2c33657b37d00d8375245fac114949f89a4d1de606581af9c433024f29174b522df908caf268ea9d09dd101b589846c5176c1ec95ac5cdbfb563b3b3d9a3739eb41efb6b98fb8b117079a515791c0ba3ceff3c1c27d6cbf855d4716356028ec134f5650b6babb61a3ad4c4c935f394e1b37cedc19790ecc887429c3d512a40f0fd1bb1812d578d3b9743639c4815bc6ced11b779abca13e4d111d3a28bb46197004397125098160c1a538b7a412682c96b7d5c049ed85604c182a397824d482cbca0c19a154353fa0431b038ac8303b90c4e543c676e6199b268c222389a55d284d364529922cedc81c2a195bfb986bd3256e51b2fc53857bd665a7646f8f133b25ca93653cf78eb8d0d3a2c0a726de709ab7c44f05530949bede2cefaf2ae657f0e586992274bcdcca19b55c83ae0f43f317dccc8efc85e44c6a013e57243f7d6d2ce1d5d76b69af0fd89e5461a52fd99e421977da10cff86c2661fec9d14c0c1c292c694cac7927298088de269010a23f1065cc63ae03dd94875478472e563b490328639b0b66455ff416da6b4df8aaa8f30718238870189066584041454c1cae7fdda270309a4d684097174f416f6252961b461cddbac47617c6fd023485295545364a4c89c7d95e5bd89adef1db7f05cabcaf35fdf7a748240c0cd231acdae1da19e626044992cedfb10e61583962b2567cd8eeaa69110f9801c6518192dbc02eb6c8e347c1a34ebb45babacb67efaeffd9be7b56f3f6221574f7bb069e5ef3dd57f8d2762dfab5a6c26659a0a22ba498b8f981eccf099d93dd9330814ecec74660854c144fc3a5b188c4f12464de52d1e01dfc5bb22577a65296295a71863661b75e47c6e67b60ca6cc88f785ff22518043f785e6f0083408fe7d2a76bd5e746abc86cf601e869cb57477700d675a447118cb487b3214da480c32a285c697e30b487940eba13297a6436ed71a78d07545b52f98e4bfaa7a086a504f4a0de28a936a83aa7430d6206bda4d42985c0b92969d8fdd44ca5daa7f1c4c5bcf7d3a93bae62394abaf6960d7e98c4a123eff9f8603ab9af307030bb310f8e0c14425cd708a883ccdab76f57532ba0fe193d1b7afa350779df4597ef14f77d34e1711c6b3dc4909eb62e1704e3323a4b19ad301bf6c2a7a089914928769b80a58eb209abfe640e0a7343af594ae48eda940f4f12653ab8053c229b05691318720088b3d5a8a61ff6b9e478a5f5139598880f71284d1d0e16a222c63bfa8fd745384e109df25e7481c63222625bbc5571976d4289a0ed469d908eb85a2e46c32cb6276aa998e676e0d9bfb83c0ac93756f8d121301b1dfe054a00c62491f35a5c4aaa856dd3df9d90f6dff23b05ff01d2aef93a35599a5df0e3ca7e80f52fea3993f34d727486827cb4d3e0257ec33eea43d81b246aa4ba598107e2b4b9db25f2eeccf8dad483a007cceb5a6cea539e12820c46e742a361ec4f66a3c89d5d74309f98bf3f45acd6a07da064bbdf707c7aa3ba451fc6c02420243a87a101e9072c3d046c421dce39a45df7faabfd4daa616c64b4a2b995db390227111b3ff40d14711ef437f75b16080c32341add0c0703a1f9642289d8498603cdb7585ae8670359e1bec51b84557cd578895b38a71081a142b1010263b9e415ee1f024f5a4d595a9e00ee24a9e6089d63429fc1e439dca5700e5717eacb60a2af52e9ed727be2f5eb2d68b0dae2cd9338d8181a8cbbf0a42410e609dd7086f209698e2f605dc7973d5a11afdb8a96626f9e81e81977e1b556775b09e115ac69e9656222158c1d95139e2d8e3c2a95c47f0ad8fc5f9d014f1f2806acfa4ea76845f80903afcff81384ff9f594e441168fb126b864e6b53c95fa94382bf1de4015ab9a462c805f190a982242e99dd03bbf3c8f558238afb24721feeaf5ca315e9722aeae1a1f77d2a00a079b4f4410f5f8b4b71ca8492a48e015bb58ff067eef75336450a301e6c2d40e35d20cbc42b2a8e456ad23ff7b64c23eb400c411751defb8eff290cffc6ffd05b634ca5e06c62806f6b24ac09893f1b8cba0023001817d80ec3b0132736e559e5781c6ad26643abd61ff37a2c6bebc52a08cc789358e9646f3db615c051dbb4f0224b1e1d35541e4706e58291bc3ebdf9b02d060fcc161458305776a038ae76b7e0b9b53cb40744209e83065f7bc4e4d721fdfe751eb5c56f3e15e79ce8c4121f249c4a1a521150aa34940d43d96190c13fca0c111c4c8cf0656c98429bc8617a140552fccd5464586712b31b0bc241b49700a665ac2f976b3cf0c2af10ce292cf05421b4b85c10ddbde70b666629803af4f6f6a2cbf85f6aee07fdad935d651bc587d91472930605a065f41120abc6db0852f33b8821682ad644d46ae14d6eb09f8fb192ad83bb779bec671bec7afb96b6b1d1fd23834ca0f59c5d8d906310d53ea8243793e418fcf64f74ce479c5f63e7f32d50223953a3636cc59cf5c23ced3bba4ae2547eb187d959493a69a524e5daa053ebcdff138b8606c24e48db73e6041e41de4d08fd6ee4621504bd0c3c59df81be863535b1ef8ec5c9613e50d640a9986cbb4963954fcd670cdad3b24997159d67d7fdb251c14cf16f1ef21ed6fabc4fc5006eacc4b038850fd9901930c3befb2ac3b8df3883aa68a62d2d3cab20f5007e0aa01a2b53abf6c4d9eb576659ea6dd44f030ce8b54c009a69907131418ac31bede24d5a34d710e7eec2bdefed06de9ed0ba4b923ed0d339c9816673c8e693a29d5e50b40092d4c7d209bfce05504e5ebceb59f7f6a0be9c35e479849025911ce74d6a9a358cee7a84dd2afec376699e1e1745f40e4349a1321549f0d30e3c4d4024b0c0ffddf54cab27e195715e122d83e75818f5db4af1809139a865e6c28d1bdab8426f369c416b24668eab2f210ebb66315335278bc32673d7aac0e9a9476f434ca15d1dbb4b90a0fe0affcc2acc46156af658027a47711587e37691b1dfbe91c09691bbbb1602126d8aa1a8c27a4673a860205e9422d59dc2d062571cf407bbc30a09103a03be53822ff2edc9624042dda5dcfeef14db6b3a1cf7be47ffd82c32c794076560563e8dea77fa5b2211752e47a746a2aeafcefa9c4c089341f42f4045ce40d4eefa8558276cc87d24f4436127bf5783ec6a5867df0aa15b12b0ba308d46e8e69ba21667bbd28f96b6e5b3074eab9841ebca020aa53396bcea8d1e13536a325d2a879b2c4cb760e23d600efa505ce09098d204c0057f2df00697ec2e0c9ed1ef2d391a1a5162e952793359ca9ed8a416b5128b7f8120d03d330542bb2889449fc97b06b227d05c66dafb58c46782b0493771a59753e3e8c93fae082f6cf64abb543c68f522609e38d3fdbb2deaf3c02e5cf6989b5cabd86600aded3481cea211eccb415d235b6a49d089bf11c2dca07bb0d62b63970af2f2d7c37605c3700bbe1a28ea25407c76d1deb7a033a88115a1e3f4713f72da85aad30f0521b40fae7f4de0006d5c0043f379e7bf3db98789e096d10388082e15fc954cc2ffbc8d139bb03568bac489b6e5487c00deeb2c869cead74cf8aaffe785302fd8f647d337f2c85770c017724e9b49d2508cbad0d54c79d258836fe721c8133e13bc944fc7cdb518009726d04171bc4efae51e3c9bc49ee196efa0bb0cf31df163bd3dc4105c447c0385f17b230b80bd94b5b31ce353fce5790a5369e3c9d2e123ba640481c1b1732d0e168a188f901c3a2b625f44ccd94a81b9147d80e1c554cbfa4ea654b64f1b79832ceb718bb95539d0ccbce4145d7ea4514dca6b817ae602aee79773041d542d9c5bec97a0589fb098ec9cc23ab01fb8b75aefccb6720d14e74a6db2e05289beb3b0131cc9507aef2600600990f7d5d7ffa1114bd5bbf50e0ef307991b957dec9290460759c6d232dfc2709872405af3f244dc2b61723fb81c4b0ae4e5e011162466295fda50bc8d077e671a86cf5635f5bff902ea0b616bb711ec9c3eecfcbe7bc7304d2dd257c5eca4c611f58ef0e218874fca665773613b67445731f5c053a5a36cd1c69b3d14a9e79cb7cf1ae3074c6513aa94ca9eb8fa966e537e2202c846b20bf9581705446ff7aceaab178bb8c57c5b69be60447ecf64c4c2adbc652492b62583a80fec7164b05683bb56cb0a9bebd17c08fd816a554075168764d45061153d070600a2270e98aae7dbde05b2b9b4b261f6dc2579a8f92b8081f1b65699c7ab23168a9d89359a5b85f5ec103941b6bddde1d68f16811ce7390707ba9db83f2770833c94fe603cab0b5dbd0a1c50550179ad8cab313a0d72440f34925b9216a1766822cb258c68ea2a0854e720a52238130649b2815d90d163c553ed858c48c00e928063f9062288a1560c106c08f9576903b26880e8158ad671d5b41b8e1372a4c6ba13ba50a6ea88822c405cae2ac6a80344177886a6fcdfd711c4b5bcc3c8e863d1577af69e70e05a315196ec56edd439e3f7c0a8f674501d0133a56a3b8da171678480022cc2270522b1bde6f4d6c05e8792850410031691527d25021559a2c01e10806ba9a40443c943ee1c5d263de059a93df203e71172cb908864ef8f958aa8b4afc496c639a1be7d6cd1a9d97c78571c1b7abd388e8517383b85e3578fed71db1983aa3ed4f2d83225dbe02995a0a374c050edefa1118a60e1b683a9183ace2b9ecce2baccbeca9f118629f22602073c7d2d58efa3640b70a83ccc5c75eb9aecdcb917440207bddd0dbac82dd4edf6937faf68196789764c078c5c37b16c6dba45f5c77a7671b105c64275282d6bac2fb23ff7fa05ad08b99d01d981d0ab71ed90dce700d006c264d771fba26b01e7576df2f1f6ef1571873ec7a1101f7278c83af4a36c1fb5107e06640c98939bfcb0c41e7b9098fec9119620573048f559568aedf4412cf39728ac863c3876868666f22adc67fa71ea3b11cd8ae870ff0eb0fccb8098c9338b1162d8cc45f33258966b74cb55ed083e8ac59fc278b8efd7479771ada1b9474616c898aeff4c303a1a81eff3ad5f1ce8642d475f986c25836fb837d81e0398016c75ebd2ba7d97a26d537389fc76b84beee8ca9f87063b7407d9d3665cf47c059fa3ed9589a41f1112b86ccc3d2a713358dfb1af06a8b95e7eeda0a7729d44c65f472e17b8d65aaef3f9d3fab500559f4471dbcb278bc573622220f2366b16f6ba9df9aab04d3a43a350ea8db08207cdbaf86e6bc7b45821ea49fa10b9165418abf0a84c4c0347ad4e8dfb384c1f264b9c523597e76ce50409007882693f4398c482eac504edf456c04a289c48f14e542d2d0a9a50d3e4a04f195892a6faca4b432e4f32c433855a278763047af43d72cd6bf539d3c0dde1410e3adb8ef5623540d5fcc750c5ebd8406a12dc22381d270ff3f0837e2c120a4285b206e0241f40ea19812081234e202e20a61513aa453b90d45776486d85b7059713ff234bf602313d60c300316a9ca8f89834e3c34d0112fe0812d7087c0ba8398d504bf93cd3a584d23aa6ab6000f19e0bef0a3a305239ca0a9a14096837709d20383106799a56e7d6ce3c1d183fb3317e29cab050e421808421749c339555fce6f7daff8e3d1c853599e7ba9c3d7ab72390d00e243d0e8c43d6931941d01d69542b79c764863455d31924e01a185d86858a3f1a2c3772a237f3b34713f3293aefe2eb8309ec663184fe1ffcfcc2be17f5158361dae79d359994e6e1dff88039f3fcc546c12aa68c2d996a4c10a4cc9ce1a2297919b8fc41e980ad5328a2cc4287880925dd2faf70a50c9a6a38eff9a48dd2d5a1ff155ff0104104eac27c4c4c04470e3c2f2415848fdeb4e9bacf442eea367184c46f0d24a7657c8e21e8d851110543779572ffb781384dae08107b41b2f140e89bfdac7e19d79ba8a9ac03f9d7743349b4a4c8e8835a50179af935bbf15dabf3c243b21504ebe3f8307786b287c4207efe30d914f5eae6d14df40e77999b842ca3056c170046f48875cce1b9847458b4bad6124825913501811eda4c9ea3a01b86915110e10235e34222ad00c4a98d8062cb20539f2643d8466e13dcf25ea163151885300844a1e1844d89be5a06a28ba68d3aae8d42c25a5a3b1b51b6db8fd3cb654b56af736abb529e4b5bf57a2ebd66263fd184e9617aa11e2787cd56f3901818b95c199c12e5f813aa9bacc418c5a597e02528f586c510be38b5a2800b4ac2593cb473d11b2e740dc332679dd2054818f223e2f850e43eab5936dec1f239c14425cb9c6fddb8d636b8e6d5fa85116ab20d4a9763e589c22e5619491f05333cfd78284975198c9a05630ae4436b8c0615f571caf2fa3ecbc22a3cee99650cba7aedf6ff3e6a5b55a4379eaaed784ec8102b871e20c74aa8166a3a71b9d8ee0484a1e4a8c1b76021a65c341481e46fc4e895cc580d960855c4ce0f01713d7538071593e4efe35981d5eec5ae221cfa641981a2a97d96886cd20792055437ae8a568f7ac8d5c9d8e718e57481b641f7533b60029daf051d2f3600ad3dce84e6048813f344a7ecc71fd5f5d7b5d34814bac65c94aba1a19601991ea2ab72105ebc93d065515ec86f0df748e6114e865c2b12d9915f05222270aa248e254f72813ffc1bb06036d32564f59bf7e6ef17a84304b36b32dcb945e41c149f4d8c1b060676d5714344e81b65337cdf5fee72c86625e479be5ffd921236ea345f004adf4f774194df0044583f96d3826340da24b6923c575226c1f940eb94b80d306c4b892edc25d47c9a2b654b2c9e55d894dcd92ef16cdee617a607f1010935625d7745b2c675337a8b94d88fe2d010937f9d6c4b09c7eee4a1896f45efc3f9a00c781b4b46ba832848cc436a43f8fe26da9fc83d89aed78de6e3dacdb4461bc26614b085e78feaf72b7a732245f02946476d0e16edffa3f706420b0124b42dcb7b53f6a4c7a72b3a42a86f088d50f143e8849afae2215976df0a880aefeeb9d2fe825fe820e91be4971a267ca3022b20492b2f5399a09e46b5337516acb42f62a7af0ad20321dc57262d761222ea9f6215a501d2ec29322a5d91645c2223217f861ef89afc75de885741eb3babaf50a6188a8c02aee2a170f136e9e74214ab45c86556c1a8099884ce76ce1588a2f0cbee7dfe8d472cc8f2383a7d487cae5855f7931c2217ed3ad1f22ce4731133d5325b1e79100a9f76cbf4941981a21ac46e3f15ee85e03ddcbb52561237fbc27ecefd1dae6f4661a2cd83aae0c3729836286e77848f99ca638672aedf05924133a4becb701efe94379a4cf1d662f5be5c42f306f4a0b04c0f0a0edf77d21c547c5094f5fe05a949948095528e1bcc0f89eb54a63c07839ed1777b5d0071f6284ec1dea01873c526b4de98794ef1e67c017fd46d836406c57f595e3a706a779cb8a7964295aa6ab1b635330c360d2b1ed178941453bdd35acc18d65d984d4abe6c6d34afbb719c796b7387d6ef20ee32d7a66dd43ee979f3c55f99c45d111f034e05bcaa4e69e60b09657806b31111ed4236d9e21ab6452abeeffed05a379ad32c3184e1b48bcf8d90325be15e098d10e2bce72da94b9f485b3a62242d5d2371c98cae2c9dc6a61215f52b744fdb35e5a5c954a2d8653b898a4825b30c5c3647bc80c2a215d1335153f163d47654f89ded382e6f12d2309f687e7baa2b6d4516bc2dfc173b6db4e791b5547f1ebe4949007dd009309350e7c03a4385a684038f81cb79a0e463eaa4f9cea5538873f5997e4b5c847326a795f01187d3168ce70eafc6c64645d918e9d4e23df3bf6be0d04c20451ac74f08c56618c7017c8aa24a64b0a4d383700031e34fb0e88ec7a24d366cb76fc4d17ffd752368c1a517c434ecad1044086f33723fdd431b67c660eda967ae688f46593926edbc82a007c67211f9b31e468e36ed9e3fd124298d665c6967f68660196487097261e5867c959aa04b70fc3a1cf52c966915b6388d6d861d66350df8edc4bd997f71debcb42ca4791b08306ffc60f6931b0b515d579aeb1ed39404bf54b92b30938cef724cdcb6064db03eaeade7017c4f2770b10fe1ad475eeb808112114dce8dc5c2c07d3900f698752df45b91cf00bc641225051f1fb3f9fcf71a538443dfc0472db247f927a6a88c817f2440965c37f38b48c8ea005d611f8f12ef26452887982507fb9ad4519576d0c80a416f52db04e467fe481df5f2ec7b7d3244aced6a150d2fb49ce50a757345c28d0f1942b038968feb912bf4055ae8921fac7030968835f460955598c9847e6725a422c50231d9b3d9ed228297381da302645f7fd8cb626df03af40c815f267acd369d070421f8cde8a1defddfc111fa0a79970aa311619bb4129da62e76ecab23b74426d3e9684b9bcbf47c49cfdbad26ede9fb75fed9182c817d6096d8e2379c9e006dbe3b6f5a9afd652d31a9433ff5baa32ede3231c30ba077c71b7a8eee7670d3f665f14a8b88f3420f717ceae5414e47299f99f640664de6206001d65460f8cea76bacf28aaabd9b5da53ad8dce7059160ce1688f5c185d3e9311a0d54aed79b8ae1b049506a6a401e06940d78c881f8c51484e6bb04b230c3403d9d170f169ef0a074f635aa4e06346518ee27f8951d8ad0d57f8b823d6a925941c94a6092e895f308d58766b033fc5d91d1fe230b2e1832b5b28d2076030c023b66f840faacd23d0d557c14784a9fb12473468a1150b9426352403539c6eb72f54fe8ae934f231897135846b21c257a4e4bba69056c50e2c679aff35ad3e6078da0514084cac832d0e0010df4b2168478944ca0bc4c68428bc8f6d1d075bc1e2d0b37165b5c993796a5f5ab507bd25a0bb1ebf15e345c4b5a003ef8cefb14b0528c2e716bdfaf23a3f2db955f1a642e5f7f403193365e642dbf52ff72f74c8f86a78937d9ee64491fc0ccd0745e80c545c2f8464ffa71e946e05a36b155ea18cc04301b656ffacd31401ada15d44b4645478ca395426edc17db282c804771c293094043d13c10cc8ad8b24011164222487d90668d96568a51e04f8232c424896ed3f7a5aad529bc3ab2259356fc3897adcc651f3e3c2a748de8c579468dd52c99ea40d0b7adde1c82a9047a9e43533c04b0eb0bb0976b0fc70b90f4b25b84e1deb8fb6b70ca423b52bc0a7dc47cb01597ffe888bfa03197b15d89f4d94579eec4c954229123d64617c4bb4b73912d1901d3098f5e802f1e688eee480232d1d814380c0953eae8ebd1877d46e8d1f2a755807bc2d02a2ede9b93c3a5c01b404aa357dcacf4ea41e5eb50d5be4c12b2869cc044f7afa821f44e156a7708e92cdf5b73269305ac8fdd2224efaaf935508ef18a25a63c1f1b51965038032a58f3288932e143e59dde32234ef5823d96dcfd7a8c6de6aaaa861a2361860133a12025e61cf846ab2127f09c21c8e9718250236d42fbbfb2a0693fd45ccfc82c2476617f12be84b262dcc57188c576486b0bc1aef1b70d014c640e075e67c41bb968e9fb95eaeeb72690ce33631e4065920ca0402004f2cc06e5f4259802d05d7f5983d7e180e41b68bfdca54fa535396c628a84d80f624a0bf06a9ce5990023ce0a9e34a611df67919d7942bd6b3151de4fc53c0d4fe6eb789b7d59fdb2c379ba9741ac0910a6e5b976afc1de6b9216dd94930f2dbf1e03fa79ac364d2d55dc57c8b1b759b8413297add12489d441142740125e787569505504a19112bd2f4b33164a1cdf329b27e30723a98de86c938af93aeae23c9e8454268608c7d0bad7157c322a76f75f51ee76a11109d9b84c4e8ae7112e0498036b6007581743b889c2b0497eaa2b2c9010d3026b005a52521822b40906d432b18940a84314721dcac313a6bb6cef21ca5acc4b4876de1c3cdf5628702c81d378df18564dad81ad66fab752d42f3178a93d3235c9bcff5880a2a547318708911d5f83264a08ea297cf7437465e0f5e590f36c6b23fc56ec7d1d02ca12522ae7026b31064a7e3360866ba0e06f99623b1a799c0dae04f9982c0e7f600a61bfdd853a895910483fb75ab97d3687e1e22ea54c3593a3f779d2fbba2f210e4a447b76e4d6f81d222d385ea078d435a77b5d1f291212f0c87cd3d4b51cd1ebab97776af453b8b0d23d52b2db83c80f54ee68b1436eb7ec1dc017d916e7b7601c5ac363a6573642ac70044a6e981325b1d7f9c650fac5e0a28997a0b947cb74eaa531f7eee1e7d6cc6700d28161a329a8ad2eb9894a62ac066689efe508994606a5f13fe2c26fccfff2874874218152f186a1f9799dfe8784b4d71d32141e2352f24f55d05779c94447b82b324ad01ff28f54d4049f9fc30cc4806c958967cc41212f35d735e23ee66e7d85c4a579a138ec9dcd1121789a67005587cf7ce55372c9d6dea7f293e028a97533bece5056872c0550ff590283ebac4f4a3e9556b17500e70ae0bc9da71ffef74afc4dffa54c8c67a494785b7f9f13b0a0aac0d4019341b64dab30deb6dd0cade5099710113faa55e5f8ce8281a3ffe1c1bd0d0fd6214b7011dfa724095098bd1f65b164c374f91bfd25cbfc00aab271c0cda59a44b466c78f736cd3145ae068148d4a7f06b1472de1f975e1991ec477faebae000fe1d5b1ed73ae8fcd4faf406f8f40e5275b36addbb835048fdb7293d4ebe46743d0bdb493d73f3cb30c6425e6e7f325656f23852691cbef8fc14d8d075fd3ac13e4ce8cb6f36d67a3e5082b843530237fedfeebd5d3cd05ffebaf7dc724f76a1cb03eeed998ed4ba55cbbaf27b1b3872687e33b821a62d36f8d3259454ba4e57b2c63ed0b6b02db530a727cc3d3369e259d208332e4212ee288375b06ec44f56cada7c3ddf60e158e1033909ae927ce948fc775b272ed2fe1e414126d4cd54217acf0e5734099cb179f9d8de11fe364cfbce0ee43b26497156c776a41029e76eadbe4801d360c4cd56277bad8608a7fd68cce120f2cf9ff612914dcb5502ac88a8d7686889a124a729d2a29534b7f661faf194bf83462712cac68c9aaaa5323de35a44fca3d6c8ed2ff8e3387c8db223707d8f912f46417deea435692c6040931003b292d690147b2f0f3185b1e96618080c524a9fd81a55b8989426234aef6c48455530cd25ccb05156c1acf0d8d4c6671c04ef13364518cab2dc13ab48f708a168731d5f1c09254b28fc3c41069094865b675b35baac238a095a6a8ef5805cf4f8b0e0155c0162997bd49e8ade8ae937eb56261dc3f36cefe40a1747217359167f5ac37eb1d4fc0a030161a23c1e35e8ec5cbcbe5874ac815a16a1e6094e82a46bcc1c14143869481e655ea955c22adbaa72c5907e158514b96a0d1a6445d3bb84599568138bc76ce822fc2bf5fde87de988e62f41de5f84409f3fee8a04fbf63a9fd8c2842e7317a40a46cc47366968035d2b9dacf14a1353ea7f5164bdf79e2cb8ce5990c52b0191c916299bc86c3f1161cbb91c1f0f9ab6697b771eef133827ad6611968de962057df43852eac3edc7f653c03a6f33594bf741ff78e6fe68296279ed2065c580685b05d8433fd838f0933c123d65fba905564eab99f924d1b6590e3636bc531e39ff0c884658c7955a29f237ed149f18de79875156fc5d261e38a3ae360950041d1395033b3fb03ecbc74b5ae61633439341ee927d08cb7ee4766c8dc906b2c49a58122007838526a9088a62180d9b97692431c7a8b4097d0aada9df40ba0414f2ae1f15b385fe88e9ec6bc11493218c66b47f993044e4c53bd241bd04f220814db834888f3bf832eb3b740f44f99eca6af788b2ed59fba654957a888d8c8c4fbdb03114002d5f383a775f51a8a4e1aaad9286fd2f94b40934709d87a41d150635ec7b46fdefe4c6e77da0d2763d7e900fd6bf9f4f4c5f7deadec9c76d223d2c1b0edd9d68207d2cb9062d7c30b10c323e3af50c3a7e54620c327c7cea0e727c7ce20c6af8c0640d46f8c8e119a4e540e247de7d4dbf4ee6871a811c93d5d3f6b07e1ff6620342ebb3fa3070b931cc03e7aa2c2ef7bc5a9fb1a6ae1671b2f7b0770923d298919b113565b8786bd6c0c794c29c0c9cdc9d44f4728b0b55b8968f5821bae4fd29448b0c3106dea0e0126478e41aa41e3b400fc5f71991ad2642ba91112fdf983a476a8fcca2c90e979ef4be1c0e868bcb6bf220631c6a9fc6c4b6267ed33142404fb7360c31245dad6581dc32163d0d2cdcc1917ee62903556b6497a4e46ff462c11bf814d92f24080168512c5245fe5f4b77d01c2098e278f2939fd0e1e205924c6b7ec14af37eaf2edd895100fcfbdb604d1e9fc85ad06574ba1cc27bbbebc720e9e66e63e0aa7568e339560940e36c8ed2f61e04d4c39597d159c9bb2d06e677d1fd399b6ad3d3ca49f1115d5ede886248600416aed2881cc79870502b75eab9fc26a628c810efa8666fd190fb08bd21ca07bd370f8a59d8487de0d53749015afd574084cbdbac623cfcfe6be9016affba141083088b8250da7b5f2b19a2e3dd01f7de427901d7affdbbd85e5c05594db9e015554943b875eb55f3b5dfc0a2698e0c087c7c3dfa5fe3a0cd7ba93e26db4e43160c195ac1444983d784e963f5baea955e20b6f9559f29b6959f2e102e2af5c9dba5584f51c3aff073525e19e049937e42a71eff48974f6dcfb590bf05d1af67f184711a44d24f41ab092f15ad09f745b8a0989fc113e2c1c42945336ba7bc41e701cb42bfa58c899c73f07c67813d4b0aa2fe0004b9e00bf1091d4a6e9affc599071c7923816e6a67984c9961ebd191e17c074cf66a83e0741f44fdd4ffc94115d4d050aabbdfd743572a207d227de771fe2d07bf2e5e7e0bf151c753a1242f47eec50cad18fedaf3f754e955eb4092aa64431fd050602e0c0f285898169284a7afe9cd8491b9a411bd8864b7168bb2143d8cbd141d722fa1b8b40c157589b5c239364248e75fe9ea04edb4ac2ea0f0c8d4d561d828b8e8f1f7211f6a2aa72594f740bc588b3dd00cdeec38afa4a5d65bbda9ec93c5ecbf1e9c8ad132fecfee4e88e46df5d935f7a3fde7cf3f0ce0b477076355bf89c4ed19cd22c84d1c16d4c6ae3f72d71706a6bb2839e00512622cfe84816902b333bed75b71f8a41cbad1dd3c59abe49f0de77d598ee6f7784b18a667cadc801b840fde3fe744a2eedbea063e3bf045e028a237fcf8529e5f9312340fdfe42c58eb7fa5754969130955e2392141f36d8eecf509575506f944cd7d5060bf14f7ebbf2c08091168b97035c89c38ea175e9af9b6bb22969790085247f03a9fabb527eca3dff4fd470293b146ab71616b26d4c3daa838e0045f145998db66f418945c46e086e218ecf8586a19b4f8c1c41a64f8e8d43be8f8a8c130c8f9604953d1d939a41d60f080e882ac8d50e655118be1456d16a4c59549847415ad45f40f646474996411b0828c4365917dc3886cd4887bf6f9bd1261b6466493ce2164577f7a346a2e04e2bb57504ffb0e137e602e1e550acf8c4e058332999010b484ae9bc2f2062c8d15874e4c10f61e11b6aa70fe11c23acf2db28139bf950b5673b1b15570bae8af3510fadd33da9fc45c3cddddf2bf95c2aea0860ce3c79feebbd037651644b1d54c3a97bedc379e3acf9ff8ad0e7fccd76d95d5f7b17cfc9aedc51d75a03fddaaad7254bcf97b41af74558a64f7b384f98e9de4cc09934bc223b591b87c99a7756b71c7dc8df15420cf26a3e264c032d1ccac17eb993862cca14aae787b491415110d34a5560cbd884c4a47891b54396df83071eac4ece7c8f36bbdf5d2a209000dd4b6720531df2114574d33584e784a7647e18cebf67b3019f9c2b9c26f819d250200061383f3ce5bee6ed7f3b245b4819114f7fe53f97ea63f0155a804e26308d0325f5f383fa5142c74d7044f62920c247ee422a03029fa8f4ca9d09281672420177f0036262873197d2ed3e37017a6e18353edf5fd72e45dcca5c53c56269dcbcc4c17b00347676e35c7d51cb4ca1dacfdf7a79ad08c452766bed45dbc621ff2b60b80f1a4c4c066519c46fa517643ead16245c414b6b68a3f89070a626118c6dccdca1a530dc9aa519dfb332452b742cd948faffdeb922ed82b2331d59e990611c0bc58e1189ed512a1d3647398c486d46761c2c8a3948f752f09509ff818af11c488afdd784630bb0d30e31fb9c6d2bd0b557acda81bb1c6d4a68589bd119301056359fae368b94dc21ad2a5d02ae72826404499d58c3c56d6fb34369f70c2baabca61a597d7e8585634df65eb2fb982e8448318d9ad4f5769be5859ed6f327ea9acec0dc1443a914c1d024190cdd8e750fbe87ea62abc8ba333b9fb8a83a51835d12a469913c5f07c27d463a4b370e9f88ea59a854a9170112af93e7fe2bf08d20de1d5a9e4a07b5394ef7e47c03ce380d255c8d13470e245703bcc1a4bf8ab0f183cbbd60363043bd41408cd31fdab5c5dd74b862b609bd6f6d76b4c1597607c5fc04b6bd3829a8ec3574a00514b492ccce8f57a871ba9582f5a2973280eb1ef76c3a1774304011176016ffcc4264c33fde930dda8f4992648f85c19f7bb62fa90f5eeb554fd839dda129b0b6f381a241d10144f7b8bb6df1405471b53424e16afb238273de564bc9793098cae62cfe097ea24a78b0f1278270e0f699f2552be644f2fea35fd3cf2f1c6088a9b4c0b7e82011bf458ddd52aea8ba7b5b4d27bf2fb1861b36034a03b8a5acbea23bb7018f96795c21b543e1fa6022f42eb6d6cf56f5d043ddd4b576d74f9253f0dc4acf84341029b2674f762078578f48e9a20c854f5387044adc3b7148edc2ce80ef9d6e4e09607d474adf7d69690b21fe7100d18fd6f472f23f0ab25d3dc4fcd258195adde43e16bbf2754af0d51bd4a2a2587faa57e0ac50a65851660f5d2d0a33ca287d53569eeb85070ae96b5cb54ada2fc9bc67778e527adfbc462bd92450efbdb616dd079211e145f4296f13708eb623c20de539528262e4ba99b4015d3bc2f5687a3e03c6e20328feb3eb5251b4ae0212357adda92aae4f094d3264fbce9a5c26bce23d641b7021f961d8d02f2841f3b616bae7a7c269c135c8d1f7503f818114f56903357ee262cc8e7b5f4b819c6a9b280cbd1a56738c21ea7ff09bdb77d31b1a167d20cd5102131484a2cb469209f23e553c9ad4dce01a8cefc79c676d875f903f28325daee4b3acabb65cc9e944e3c0652680fb09d4e2f83aa382d831f3191d946e5f78da0f2a7ff5021b1638214b01d0b954d954a2d3b4a08d9fb41216e0ef93ea212d806ac63e2c5f93b810b1173b7abc3dc01fcb3abc1127e771dc5faa107bdccc3c0443836a52140d72df72c35ec08a1de95e243006e662dffa57c7fd88708ac6567cfa289b0ca35346399b2b6410088be6168716a9609ffb33baf79018034465003f85175091e7f62a0f34fec54e4aa1676fb7b99b60496670851de3194db9b260a9f6afcf79f7445928cde57ad96608392c94bd1333462f1f3cf926e646156cf6caa3492a54a1051890233730f485ce234d3ef3d042cb1f76f01d00a68c15b7b6158e148c1d8c43e24e75502e70985f326da18089c35e722b399f7d5e6b29d6b5fa26a7d3d93a87b1e941c79c00b1c48137fb0fede02911c578de35237425ddb6bcb622dd7c0a6e020bf75e1091c7da8df3f50cf3ad2f498aeefc31852cef3d2ce29179aa513812ef87b1ef5852a1cfa915c7f6c5ede189e4df3df09f4d442231e7189ef29a32f3cd588ccb6c44e71d492ad089df77689a9027f41a11d1fe2b89fc6a0b5cd883fb9661d849f8a5f7223283cf51b2c9d753668a308edf0128779fbc58e6620cbb2238670cd4df95b8f56074f125a8e866b6b3c85e4ccd6b9929f41fcf883bcfc15aee829de7b3658344ce40a1a88415f79bd7c54d56d2d0f6d53c1a172e0d583f754e013841ec81a9f3997185717d60c367d05fbd44cfe74c66303f13bb6db22548150bd9f3dce849d29fb2528164b474e4a132f9dc7c87223c9932bcf21acdc3b71bbd8d2f0853b05b3260039850782a774c7a2594219add74e37a99ac951fa8731b0b80f0f2b5528718241e46ca079aa59233a50528b771f39ed05812c08e71a7a14cac6b6edc0300c0412b863fb9210a054017db62ff4c27caacc5a9d6550743da062a5497d7464abdf2476ef7900a85f9d7be2de75f0e09e590e2f3f237b31da691fdd9680541e5ad2c130741d589265d6e0bb308dc847fef982ed252b5259de4c76ccd9c1a92b09683eb7926341fe4cdf462ec84395108e863a1642b5f5f5897ceb416f2150d3c98a4a1ae951a4405551ecb8cbe678417f213c5b9e30134b4179cd52bade262c909115e2c3c5bc820c9c11c95ac1d72bb402e9d822af575c02a0596c953fdfc8a37d83bfc0810b3d6b577ecc2ca085f3a2f15bbba4633079cabd07cd3fccaad997510a756121679f1e9c1e85c7646ad25316bc51a7f249bbc6ce7dc5fe7ea41a59bee33847b6e40ee8b36602ebf02381644576852cb43b8b76c445e5db032aa911366719327e8cdf975a579d34b173b794751e41281e09c57efe076db3cbc1c5ddfd3601318bc4da8c7b469fa23562be777cae03dd3fe8051f6482ffe423b0aafaa03bdb9b4672d08f2abd9c4893739ace6ea5789e067cf889896595fbc73ec290eb6e29fd97ef74dccd2807ff0507b8ac0c89f1534c3bb6ff0c422960a68b52aec4199b07172d49bd8fa8877e75f325694a3b75e20512de9898c31c1287765c7fa711bab046f79658b8777bc590b933e143b5e0fae35f877adfec4adcea398c4dd8ba44d4ba40feac131dff7fcd80ed155a1d37f40bcaa02c5050381b43d19716a2b06e11dabb2867eff66e8c2cd7fea910ead63adb127185045fe9831d33bf9b92b7e0dbeea643e83af8494d825380b3495cf5ac2c4390df12e92380071ad25e9aae84d1d6d38105d5330ea036a3937d2e4418e48b91b35a7e432738d6f7639502a92251cc2804539e5b0ea5a25be712d00a77e4c20c5ccfff20921bbb2a125c9232b3eb4fe009ae9bb0df471829c69c9868b526723f9aef124044d5c293d7f75e33865e5a90016b49a43dfe2e972c7e18fae6fb2f571a113d98676072938df535a3c6c031f07955195c1bb1b871c601d6972af7930680fdcee60c3cea187fe56ad0dd3a8eda72c77735e411cb675d77385b5caa76747197c5ad04d4a075d216fdd215f7f0fc23dbf3b2e3e14cbbff533e22f02d6cf3b5cf99935cca84f197f79a0467d8779c976c5e01544103fa77be815b2090ba9a0ea611fe3ef8256b0133b07b5f3f25e26d65e2931a061ef2d68feeb48fc40078ca70443fbc2bdd9822f3461e50a8c8cc2895c0215b8b0f7d51f33748ac86d7a89a239651ed4336741fdf4d4848dbbbdb965b4a29934c01ce07ab08bd0751eaedacc2028f748522f955f50577cbda632f4797fc27a653ea75da1d502da8b50b6b6badd536d5c204940d405e4db7d1fed63f6edbfc1ab37bd22032d71628a5dc7dbdec5b6b375b5d130a0ead3fe264a73fcea7a1cdbfc75cbe4d4c86b17fa72de95109352cd42abba8b5db5a905e25a88b96e9773fab0cee2d539a836cf28bad564ae96f94525a379ac2cd3e46d36a3bc49ec71ac4ae39bb73a83f9913e329b394528a7d8896376aaa6fe4183932d09423e86022d06e4a3dc6d33b301e328f607a6e2a6fd0e799ddedda81f54dcf4973cc9f4d5d034995fc4e76cb0b34a5a4756d3362eccdf44dffa4b46ffa5b3560f9ed41760657d460f3ca9d0498318ed02ccbc85f96577e14b13cd62092419e7f9fe4f9980733f2fc97142eaf638027f14ee958e4c551e4fe1167c9d40515ae47a9b7236f9e647ff7bc0e32a546a4bc3644d4a35574fd30117287aabe91bd430429fb7505953b77d19c7afa42eabb6680536fc2d41952f40df1c73f43dd1afaf8e359f8e1f68d944b98323a84539fca5fe0ad9bbc04186009d4a73d6b19fdfb526a2d2ae0926538e219154b18c251ee9455c15276ea61d5470dab934fea55af0a7f5240228f3735a1dce6c004650a2ca03421440d92a838c015a92a39a202a58aa5020a0ff50abeb993a0388182b7242832b468adc9e2dcf7313413c70c0767968392272eeb3c5ebc83137662b44317cf01b5a31d906a38c089911d8ea074406c2e609593a5e1faa5cb0ca680c922061821a03c5539a9bdd6ce9c7b6bdc00dc1af70600c5dd1af7062096a5eb5e7f2bdd6ca595ced7c5ee95ba747777776f8f75aa06e993e3ae6fd36e5ba5dbb597ab1c8a3a47afe7fb319cdc1ef7ddf68f4b518e3a57d42ddd5d4ecfd3dda79c72521ea89c3e3d8e87b602f449eda494ce54d0fe48ad0551924529ed38cfde4b670aec2805a75b3b8257b6dfa9a8a5f58351fac1282a0629275d62b7bbd9da66eb93cb2de1504b50dd666b9bdd9e74779b558a943854daa4521da4c4414a1c2a6d52a90e66cce6b114274a2c66b769f3bf5d8f7a0d8fbdb8d888f3441730614618c1a374b5f529b70068af7b57984e23db5683c29b53507762a52565c032871bb2a46235430e4e743ad039850f6991a5c87e24f14bd9493bb490a53fe14e59be3fa55ebe8f711d9c499b4159fec5592ae1d41044931158b220e2411c7bcc0d5818c980640b1431d0008866051334345939629283243128e3048c2751881047e9d40313586ce181893252c4d16b169882040b56b090832ac01047277226952babbec8aa24b24af5f88995acfad4b743f542caa9ffbe1da94f0727f97befdbf1913184122fa238c102c693e87df7edf02eeda4e830072a08e0e244cb15472e5b314850b14413ed8a4bed8a0f6a3e28d1701ebd5ba3a109163c8b2c656a24aba477c67401a6c45dfe586badee2ebbc04db6b8d4cb0498a202132127bc14f9f2606441920116503cf520d217a594d2d764b29269115d268701d9bf06717104bb3ccf85753041e216c56c3079e241a694524a29a5b225666c4bdb142ac50e540cbe4b98b0a182c19c0c47961829b384666bf88eb14d98fb820cb636d87ac0f64b75a14b14f83e41a3c05b13360ccc8241c5a14a171e9c943441b26183826fee242548a80df0963b4989111e4a681bcd5b4a3d65f1c600a16292d221d55083c550120e45c42b845847386889606a49bcccc82f63a6ac2f9649965258284d59df244aac2856c0abdc4980810286895d028c0c53605519bb05f67070f4a5a98ac1a9dc497ce1526b5fae6cf94264ed751c331d9d244a762c9058a11ca594ab52657ddb366b2badb4d27a9f72db7b1ce5b6a7db36a7ea521557a70a65959ac97b148e1e6973efdbc82e679f76331b998e580106508001d4dfb66fc7ac5d9d15c78603565996ef4ad9710a300069e9e7d94167eb053b73f64329f37691e66ccae4db69277deb4d1bbf35322a7663b11b43c56e2c86b2a9cfc66e2c86ea1b15baced562cd956395a73eaf4371f3ce9f3384d06da573367dcaf697fb4c8a0064489fd4456bab5a56a5d36eabede23bc3a930e66650293aeb2b2d652654f7759ee77ddd9742553a532a4e856fa513afb615cb86d0a924586256abb65cb4d2e99a9933343e6b9dfbafea1f52a49f7d5b4f67a5a9913533afbe1bfe9d9919578b3593e2e91b791346d7dd72f603e50e65b54c3dee387cab3399e79c7e2bfd13d45f35a59572d33b31daebd3eea675d23a6523cda6acedd739a77b765e94d741bcd407eb4175975b19b922ea3930a8c84c44855dc835f728907b233311f51d5eb15ae03853e3b5ea771d789ef30140556ba594e200b0505cabe57553d4f43cc0dddd4deb2beca043d55a29a530014c005014c7d43365fd331207189be0482327a574d24927058047dfeb8f520a8ee0e55170a4f6270d4fb013f5c1667fb019f6dcadab95524a6bad02d840ee2fd822ea7e403fb8db9fe06edcbd5b18a31fe03c96eeca6dfa9432565ff64dd3c951f16d26392afe2b277d3927ddf33eb7a5e6ab28a6b3decd3ea9f36ef6a3b5f998aee8ac77b34feabc9bfd686dc592328a25ac6f477d56cbbefc0105cedf3a97fc24b0fdfd95cf6ab4d4add6b7c37ecb25ed56af547d11b8cf7deadbc1f19821f6d866e50fd93fe5727d3be6bbe80c9df56ef6499d77b31eadb9ecbb2e0d9dd56ef7c96637ebdd5a9d9ba5a1f976cca7a13574d6274feaec68ada6e6db31bf86bee8ac77b34feabc9bed68edc5cd19810ec0504a375ba1d0cd5626946eb642a19bad4ce63422492a9552d95fd48038332f332e308426aa7f0b74a11f9905090b2d10677e05fe800085e8faae594ff33e56df0a87b47ef534e190229f21ddf3636949b656cfb2cf627d2bfc69fdb07eb5a25949da5cf9bca0b444eea4255572e79e7d9a07b2218c04d6b7de87f5adb7df0a7f8a6cd8fad5ea7f6a9e15c2e8b7c87a20719b268028b0704fdbd353303bdf67f5aca72f338fb74098fd2134dffa1a106643d80c49583deb7dd07ceb697e08eb573fa488863e34a137fd9055e84c1efb9ee056e84a53e63f03129149d0a4984164bd0b2412834264fd8c825bd4d23760910a0ceca36bd1d23bcdfa2be56c8530fbaba1a9c30a617615863d65763e854fd6ded0eeb0282020cb6fd19ff2ce18cfa14da13b875cff7aa09af7a1a9097f8a66e853f3aff087f5e3021aa2f1a7a9039b4fe3c7c048a0f9d7fba8791a35fffa9a9a1f32f334216c7e0d288fa6cc9f06ec2933b22ccc8430942b84cd777d8b2cb442182a944a7289f53e5aef627deb7db0443390447f72ce4e99ebb01eb39ccc84610665ff15d8e29ca06c9a327f15289da6ccbfa6052c9fe49829f3c75fb0d39c06192c7f741a5d0171fec194aec608eeaf0c0cbbb01bfebc8283a3a58814b523493e30491f96b2f42e9faf62801f67eaf4b4ac7196b2d328033710527e99971b78d25205972e579838ada8152f2e103330f982d5352971040a112a74b5c9848b3cc670b8e282aa434212c4567ba1690885548595da66a4a549082d555c69d2e47e4f5e73410cdbf4829128b3c9c8054ab6a7294a9a48e95e305aa2896b856a08aa41072c1bca4b9217299a64b95932a2050728352d3780d1828390d2c63dd126b6ace8920f527c40a249136a4583d234658bcb9a699a4256ac046d20d0686d8854d3162a8eb0682c2de1684d4564be5a0f34ecb0bdbe20b9f0840ad7815098a42d4e9294404a72420c1028da902b2161e2538a210625243522aeca484a9091941cbc27294048818152eaf993375dd102d5155496f854b449033306121562a2e0689098e8931253a22811858c122e34c92cbfa3528786901722471a635e8c68249dee4a221b00c3e8e9c8bac63c1c81e87c4a6402b9cb2a5de70645a985f6df13a69456942459a192eb8b600506e9eda9259e3830fd5deea42a52642e775295a5a42a4849558e72275521ca6352951caa2869dcc315580fd736e3ac65fb5d0a4602f7dffb70dfd7ffdfffa4defbc1a9e770bc477d055a44853f40e288e98f38556cb1befd0dd6df3365b6c3147cb80fe18767ca6ceab907f2fe7b297a615108a2a03e8af72dc23aec09c2cff570e18f14bdbb359aaca56941a2498bb5d6fe953d24647faec04e3064b72a0cc2cf7d5211946c7fc2e0391e64fb2810265f8aaaef3e90c6f5707f3f05d2708f8f51bd145561a74020f10381c40bfa7821104a39c8cc5b88c322897aee51a10f29722f452ebc47f0ac6d3730d10469c9739a0926b43cdf2a794e33d144499ed23e91e76fb53ce9b3de6194f5fede7fdfdf39e8f4dd3f15fefc00a1d053c2134f532ff9e04f853f45f47f568f9f863e33343ff340e2d84f30fa2a1abe0f15a54d79fef72dae1e67ca2656a5be08ff4c88c39f57853fa9f0a7534fc7ffbe45d58fd89f863012f0a77e48910fcdcffc90d5e3f731338466c4c180ea53300aa333a0eb3108ab610f9028a5d18b4623fc913521a31aadc6d592af1a8d873d90d8c1b7d8fa511ac9a7299bab995ffd0cfe9af04736fd2afc29f2593d4df82397c299f007873f1269864662e920ac3ecb7b7f1f2ceebb07122fac890a2a62c4a8b5bec887f5de7bdee7d5bc6f853fee855e13f27e749a2754abf94963b15c4dad9af0a7e6bf67b16a427f624d9a2b2c22c5d613ac031ae00bec29b3abefa6d5ea477fa2f9166958ad1f278dc6fbff14f9784ff33f453eaff78c3440acf92fa411fed0f8221f9affc21f1aa1d378e18fbfc22252ac09add2ccb738f3a31bcd84b0fa40220e6135ec0902122d932f7d91cfcc7f3012bec7eff33dfe8c7cbea7097fa6d094cdffc26914d65ca055b24c0dbe1958e89bb5213884f9a83ef585301faaf761c7b4808b254b94683471224dd9fc1f232ee227f27d4a35ffcbc02dcea58974e508104e3801068743887c21cd7b2f84d5500418ac67c2603d1347c121a5793fce252ae22d6af0448d8b9155f25e8ade7c9a4daa10e6e3a944980f297e2fc5ef85284df4f91eb6853d5669cae6dba5299bdfe24885f2fc5515f8ad52cbe65ba51a8e78fef7a33dca73c268488f3ca6d481b436654653369fbb97d6f2fc1a49e01651628bdf5311142f8081108d26b6d8e2486b5bcd0554fdb564831642f4a0830f508e8001183508b120031b68538ab801192d5eb8e4c0e8480b9e52f084064158d16406305844fcfa20a77ee8ee89a2019eb3bbaf5c62ce5b4ff0ff1eb895b00465fa11405581659e134ca66394232862c8d094c40ba0231b9e20a2010d478008faa2bd4491418c17c66c4184032f007083322b50d1031615ac68d200244a66fc90c30e4a2e782146871c9c4882451825ba9041053e38b1c208175821c50c6381325884a6c8c10a4c7468e26e44f650fb41ca96a7314d70d162a9ab90411131d87206971ea07031c30c3d8921536585275b74e009951f6a2b280288324d8208c3640c962c473a202115294a22c4911130d8e0a98a31b2b020040b39c881138f9423658a606103a1236a332c8e40a2b2c50b673ca9a104185b1461543363065a8c5f642183171c70d144185900e9704599190485f1440cac30811155114510494e886a0092d2e50a227a08038c201ab080000b88b8c10a29b4fc70061829b23439024305075fae34b1454c74b0228bda106388fe54e48597254bca387d012ab2851761c2bc00498616e615d40a0b5d6eb842cc5312261d85972f72e0c2658b233b8828184ad244c9931eba18d500e80a192837080a73460c5c6653830113c61058c2102229a8e6ee538038838527237818a28ae8619c8e10730414666cc9c20a274eaa4c11a38ba11582c0ccac2031430f46b5a2225e6ce0050b359471a48ca51754418115b800430ada10458ce1b3cb4c070f90921c9e401285cc0f38d4f04113dfb9dc8bc6f727010f03980a3cceea34e792e7e0efa69d61fd1812dcd983f2388daa51123c56a76f30797e07347c9ffbb13a6577f29c2749347580b8cc3b4b031cb902519e49d49698469e83dfebaa9c11c04ff4ad158ddc5a82b8e4ce04254f3e202457805ff5a99ff3f55dbaae7c8e1899462df37785e36585237eadc22e349a1d6bb562ad562bd66ac55a7d7fddaf4c007580a919c8d337f2516006824210213f92368da6d14673b902b298cd88a4949d4deff86cead8d8ccfc86a1213ac4d1d1d6b49f5e696bb5b5b21014f441ebc8216cb24dfd78a472379bf3523ce7f6f46e3c3636bfbe38b2e99d54f6a74a98fb511ecd66531e2de11ed9f308f286bfd3fc595af028838e58352c8fa67b184111a83ff61352a6ff498086b0578d103c797474248fbc20cee331cf5dd76adf8ee90165b012835444f6ff3ef5a397bb29c1145239c8cd5e193cceb6eccfd33b335f29f36f9234a8e057bd4fc1e32c0f291af27dea87a81ebfcbf781c9b07de090278c4d09a610e4d6af47d3f09b3f0259c64d70f30c757c3baa60fbe38de1f47ca970be7f2ba773ee7b87e3cc6738de6479fddbc1a15e4a540af5bbef289d1ea5d4060e0eb0c7c763b31952e75c6d4bf6ff9e5286339438d9512df31cb047d02b837b7a6766ff107ac7cbfe3984d8d40941295663ad142bca3554ca7e00232c4f9e482d6169222761a192c70e3384953c3699a6524a49c3962a277008f762fc7abd520872c98a6e2bb2ffbf6653c7355dae169464e972ed70228f7596e1d0d774700600d96db24f57dff87710039e49170d26588eaeec724d499bba32d9af10a21abde359c8d4a9e1b23135e48f35e60f0e70e04797bb9a9190380f00cd715dc3f3bc3b0600f2bd47cb7ab4ce095ae68fe3db51a3775227689d1f2df3bf2a481738d03a5a7038851f97f94f5718dc8f3d26c77b2111d23b34d95fd2b8d741bd67a07550e14f38caa0ecfe770ce652f8e91bff2037a71004e7ee9b217d6313e2317f1715ccf5486517198cfa01db1f9bc9863cf3fe04bddc9f04ee975750b09031cdd44c631c141204f62be9d743e6aebbeb7df7cecde218234425a5ebdcb49b65e0515a91fdbbedaa3d26b5e868f982a9fbc411a2fc63eabc54f335752e308220677718361077ef9d5b8c8286b27f1379102fc8633f25054194c7266364ca1ecfa12aa0527a65f08fdec1d9bf04137aa4f26d39615438e2cc7bc3d1bd5a6b376bb7eda70d37cfed395b18aba0ec9bfcc373e4197936712d744eba24ab2ab8bf37ee528ae303b66e40b23521dbe7f1cdd62d84f001ce813c2ce8bc854042135e31a0828210b1671ea3afc4e5135b7fa623095ca90efb5795ef7bde8f323001adcf332be8b69142e82941870e8fe1705aeb67c320a37d9e69ab1778c43a2dd2188ee7b451ad6b1b2a79f56f84479ab73fc17fb502923f93e4822e79e657bf03fffc42f8ae6b3a1b29b3c29166d6772b70e655537090eb65a6dfb77e04e2caabef9741ae50feccd34f84d6cf84e36a478bf5235e813df07fa04a8a0ccadba7fe9349b8935c1026cbc7dfb5a491c9ae77265c7025ab1effd66d9e0cf29c9cebc9206944c2b0024bf880c7b6ef40133cb6fd0b09f6b917e326af04efedb7c3c3603779bf027d3c07833f3cc7fbed35e039f2a380fd4ef5fef5c079158e32b758df9ec3fa3188e7d64c3802c933cf02479959f2eb31025926b7fe7e14588dabef9f014f5885405c193f873b6f5f04e4e36f81abe7992bb0330679a8bec5ade7b66d5be727f8e3ffc0d1ff7bfc29b0a7e011e3edb74fb1a07109db2a543dfed56fef79cee7ed5e8c57b865dbaf56abdfbef33cea39acdfb6d5f3f864adc0d5ea87c0ab5578f1cf8f7e16017feb71c7fa1538ca71f5dfb340f9f1587d6be5b1d5b7409808ac573d2b1c81b8728a676250453b7f6083201802571e81642e04e2caaedc9b4aa662e856608b15fc995edce02412e97cf0a02d4622111d39e040c38fa489443a49ac61114c3e5096e17441064322911b65c8504206350d8944705e788a22ba16245cdce048fc912a48611289cc22a2bc5d287d791229d835213a2859d0c96f9b1143c155883cb903eea41faee41760f9fe14e8da46fe8bc6921642b48ec27d7f3cecf7f06c5537c0353682e76c35d0e0081572ad411e298b0a1e63b9a690d88436b4b1214c041b43ed3575b8f04e6f7e5bff08ae43001a8d465321a781788ee7fa4294a4511658e4b199726d305930d52aebdfb636865aaeddfd3d3c37fd246063a881db3bd8ef1f05ee4b1e321cdf82f69d67f278473d07bd1e36c46183353cf6f258fd586cea8cd0b2faf7da70c44db2d41713b8937ea8d96cad10ea4b079429b5dff2f3d9de8644603ea4685f8a3634e289db1ba16290fd2297fa50710b8ba84025da7771cea71f0f201ed486dd07e0717f0fafd7aabc7025892e60c86d4426cbf78cc2b07227193165f9b7250cb4513f6b45a1266aa2e6a44d9b76bf68ad544bdb6aeb37fd133af46acfee91e6209e670be49c3fa97c7a02ad53522a1da9addd36bb59dab5769802ed0e9b0ae51e230916349115c27c58df9a79560863853f2cfc294f86c96148f41e48a401f3178deb67a5fa2e84f974ff750f2476f0402290d80f032f199585a16c5de6e8adde496b726b59c18b249a44e9007cf0e5c20e0b8eaeeede7bafb5231057a63f937c5841501efda9937a2093a59391df0e1b3d646e812a29545d601adf1f0668bc4a0bfc2d677add804767b2a17f3dec5fcac3fe9d6f47201988ab8bc79c6667f21cafadc4c0ff6403989b342f23e78fd414fce3f2d4645c6b055cfc213cba5137031edd4bf6772fbdd3f5b372b3f6da09daf83169768a067c5370cf1a3540f0a073ee86e3460d77e7386ebb74a63854d7751d2ab4d13738387a6ad40042c91a66ce4725c943f2863724735079c3a94bcff3de4b795ecaf382f48dcb464993320c238763d8ef5381382ef34781366232c7077dc31f042aa594367db3051e5d4cf6974ec67584cc20d791349791d13950bdf3e948232e9339506109fa46189d33828ef9bb9816138efd1486c7cc5f884216fcd43d60070f99a36b25fcd431e8f2f480de91280723fbbd395090375090395edef0ef69b66dc1a31c92489e43e49c5cd2396ce48d1b641299a37b7fa9a47750efb4236f9265d718b7273d141e30f434f4a5be1f2bf6190f942e6fd0ebc53c660307c76c6868d228e15664ff8ee66ab1fa632957d8ba9785f1ea852f8d86735fc077caa40aedd285ec72868cc2074c00e239a86f7963eb6e4aefc7388ee701345a93e7a822902075349ed9058fed450e8108fc396eb5f2207b7b41e995a1077de34f53051e1bc986bb233512128fcb4a742fc6afd77f8c68faf47f1c9cd4145cbfdb7ee0e030314de7f1be930bc3f125c54e05a6f0071579f1c715e01f24a40fe066dc000107b1481555291ca230651e40e1a485f843c49b22fe70295244555874efc5f1d88c4d1d9c03749391fddd4df01f13908a029321092eaa4c20618aaab084292b032b7199ebc827a0006880c1f2037fe4982f39e822fe10c1485388a9ff21d25281488423b385f8bd0afc01c106f187c801c454d8ae00220410bfb0a83b03f7ff10c1b30ce728b790877c2e84cd2fa10361f382b019721a583981ff07d30c512814aa72f772d6da8fe32e8e1faa1d3c1d69adfd78744b3c4eb0e72fc00b008404d46d524aff5df0f4c5f49cca1da5f7ea80a08b2ce60367e0b1c7c82609c673c6fe0245031ee89d1e9d3f07f8bd878e06b4033aa7be8edea283d6aef275efebbe6e38ba73f75ed4bd28eede6b0307478f90a72fdd123b91c77138fcdbe1bdd73b5feb2cc0a3799e57bf1ea9ec798ed449d978ccad6402a7bc0ed5e004e5ac3309fd338f335613b8e58dfab3d92ce5c99637b6e6b88fe3beefe5f77dcf819ebfeb31efeb9b998e3a9b79ce3d919ae2aad7c6ab88bc88d9b31b67d2baf3e9381f092e7edfd9e01308e93aedce82ced17dc37b7f1f1292399c0699e3bebfafa077b697e1f88110b9fbd18bba70c442d506a6d4143c535330eda4ec78c8f98df24214d8b26fe48dbef13c86d4f925e3e25c372c3b87e4fe7638154c650976df180f30ef459a9eef9d602ae3b00c2073dcaf29e024e0c64c47cc6dd418698dbe41f97309e1013833b0e9c5b1d8e6e506c601d77836a7da78e0cd39bf1e2eabdd384ab94ba5a41b6803c763383cafca6e1f3617bd3238d63bde0ecdfeb3be37737fdf6f0b4872e54030266e13f42c63365663b1582c16332a2384444a9acbe52272b95caebe711cb2a3b1055399297d1a5b70cd2e950dc2d1c6ff74aa365c4b7037eb11078ed97893a5cf92ca7091e71278369b09a156b817e3d7abbda7ce2c16c3993fcef267097a9ed2673233c4f1955db640e5063591c857450a71fbf1ca707c276d5f433c5551e20af0ef6aad5e4fefb4bc40e7903710e1d0540c75c1a3b441da30a32106f6ec5dc13c8ec27c7a7a659fb34a59a7ec1b8e0aaf791339651439c481ae4a653914ca9afc5195678dafaf6d9be1b8a17550904eb257c9fe24689d115ce67fdb0cecde4c4c40e640bdff083287677f98101e712c60bef7aa775993efacec2f95c81c4c640e9494580e204bd67fa12aa34039246ff87b200a4e240f387cca52490cf088237fef7513ecbea15895ea21b76dfb6db56dabd55329572334bd1e7679ece5b11a6fd3371ff44d8f8f1c924335ec5fd1c43f7fcef08654da9773dbe6b649af2db091bb979966cbd07cff7f1b4140ee2423b2e4eaf484c1d6d9d132ff26b2ff28ab017f603f1d3c4d091ed3400df853f3afa7017f689ec65fc9ee60b27f67e4319792b392fd88cc98a7304e947df427543ce6d24a1d935d4c75f29877005e1ab009524958c378ccff05e219b0340a2d158ff95b228ff97b49f068896c64b7712f539018795e7199ffbd18bf5e3f91f2152b1e63bdc0348d98a68e257a659adc5a5488214bebe43aaff7bc4c031eabd30bb4b529d3b154b56af2983f9ed876f1983f0e2d53be410b6dc97671dbc48499b2bf75dcd9c9e439462ef30fc311e37fd534c2c9e334c219a7110e78ac577a07bf7fc5d23b44c8b12655272a14d54bf62cf2900272271981244fa39f55dc2dd1d4a9f7624b44946356821388be09627a1182c28813969654c74c22ee673d0b3cd62b573ca70b53b0ef5f913c675ae91b7f0c4e20fa86bf9c42649f9fdb8824862ce859f68efcf9fd753b26ac0b3dcba0ce20b6a0ccaf171085b99390bab83cbe5c9d9c091e25d134722426a4a5f7caf48ec43f919c72d781f52d388f3c66c5633e5733c0bf725a8d588b0ac6c8d3b2c8c09d5484980c83ecdf791af94cc9a36954833c8da64efda4239472271931267b903b898823b2952424569084040c4bb490c58828bae4711ab51150c0d04644f14496576a3cd3802dda6ae5b749893d9c71de9ec737eefde715cfb9dcdd38d52b0a29258d8c14827104b19fe79c56d298c208c97326139e63e5c873b228f50c8134d7cdf5f3f8bdd5a9775e4d78ac4c54a6bef1dfae38e1cff5ca9cb0dc49676cc9b6c2a07764586dd037fe5fae4e7de3ef4bb0ea0678ac4e9e539318f14485ec5cf258c364ff9da5a8d48c18453d0a95aa010400009315000020100a87c44281489aa6b1367b0714800d74903e6458341349234110c4300862188818650c21841044085146219a620126e08ccba430047fda02676addf78f23bfa9e4a99c10baaf4adafbe914defa0645f88a7c5db4a13b6d05964e35d5a9509941f9921c8d03c58a3904c8a1540b67008d79392c4f260f0e9c7f1f3c847634db1098a83ebc3bee3f3cf441953731ae8d2e045600e06886b421b160471ea8a9b4c89234484ed551c850296533bed66f051607e03e65a15062b921ef1151ad42afd3283ee7155c24d21bc4b88b9d768f7d28e11a69ce9139178f53224f30f0a6b9250c8a12edde2420ca4760a45ffcb4db854e05ef536afdc70374c1657dadc5f7c2463460f419997e02b21bb41c2d7cba5eb8dbc964841f01d26ee800f89d6d5ef85398d13613e301cd7455d55b68181edac34db46a638da79f08a5ccf33869e3ea8e414ac69130b7469ba6a71f739a99c19d27424fe97f7dd38bb5ad7e8ad50a0d6cc5d367babd918add43092a30cdbe14e0ddaf8d08c0854b77050dfd1c29294ada532a12fbf4943632d68202a6d2a5c06a3f4654e4a6cb9ca1faf011b9ee1f3133cfa2c16af26b8fe7f968e4e4f7242ea9d1ab8209d486c4096627574e4574ba30fd02a5c972950363de747e7730c189e7050a57bf1d17e9c17d5cd3464ec55d57d8840af6e20c813b4057bc3e6ca7f1070e615a0f6c8e896915c074bab837bafd59eb98ec77c92f658bbf94893d94374936e8a9fb2726855ee9fec4daa72ca3af33cdbc53d38e8ff902c9f110b6808a76f3d69aa16b01b658e4be9adc0064b9f1c4e5e6f452be90dc2ae249ab46ac450df837305f512a722cdb9544cc4576eeaf2607f179c5e574dfa1e394852a4b8b8533584578d9790a3762f379353ad9b684a598e2523796c5f67593cd5860ca719c42509aa2a3e701d0549a95eac95a1eed4bf058e8bd0dd04b05489aba932804efa34d27d78d264818e9a39a543e961352fd7a320945e2b10164754ca3003b621c14058d9aeedce66a983188e54eb52d626e93308d2ba98a7d1714bb17f16e8f14f8c1dbbca6cf72a8390bd65ccbd3f1e4fa3415d80d6af7b02bb691b07217dfed7de6dce0add8466132774d7a46d1212ca4c6e0a1a1d18d0f871586d8369e000a73384b94b1f220ac19642e9e89ecf7ca15d72648556fe5a8dea31103dd03ff53badd992540ff5bc3fcccbf24c9c18500ab23ca5b2ba446a6df241eed6b8597390547e6924445ba4bb63f6e465d86db7b1da8cabcabdc4413d80b0d79e68989189db572f321e0129e5786742fd9a34f1e853426f35906f38e696c491fbe25bac85bf131ce6607df329c91b7f61c50937a86379ebaed6685082e3c33bfacc04d5caf7a00f01253dada714d1b76bb779ab8b114447cf677e432fb8be05e1647b13f1b8b94263cdb2f5f9f065befaf0855d931369c20064b1d0f003cbb80ce416183f86b3f85123beafabf53f498d5b05510b3b54de25bec0e5a6253ff12d984bd17163f55b08c57d26eea73cd64b66f31652d0bd6ae439fa7dce1706b038306f688afa584d500a180ffe7c9919df7063d564b7382c6145bd21298d6d5ea56736609cb000039ecf963cfa77a97b2d5a251c2cbe89cd5e2a8f97c465faa70192df6b864e34274866434bf474b1e577cd167504d91a558e9493bee0948185871c8885d5b0c2f3b4608e496e8e36658caab15e8d34e91b5850b3f6ec40e498d9a8d2f83e5cdccacdfcf2d7ac9884141e20fdafc45eaa3edd60fa94bdc66f70204210eda5f10f1add37858e8a3f1974cd097a47dfa6becc3e7403755637d62736ddc968b4152e4440f27d0eb6a36baa4caa7373be9f49a400c1fe5157fa8d918cccdaa606b972c6c9706e996a84b947b1f7e6985d5fc9f8e4a9b7d486604a8f19eeeb580715d28d65dd87f5b690a1a2ad2e1c0ac1cdd99330926be49bb5125fd7ffd12210ca9fec1dec60c3965922cb3c5311560c4bad1df99d8e61cca02d44d105e16456e03dda802f3a22dbae670ae8c8465228a34aec927bbd8a03d275f435bc52b47471012e695a11e61b451b4ca79c9d69508f4faf514b6fe9447eceb94bac50f9a7af18278691dbcd48458afc2fc163d2d100a6b31be1480586d4a1efdb29cb4eb1eddc9a84328a1a7182ed5ed59a53c2c60dba49f877747cbfe89032d84ccd27da35b855eb260b41378df4f4369b692c5e8112ef27230606ad44d9ba362b83b5c5009aea8afac3df99c326aaec59386c5429918f56960dd35c445864d907be3a3461b07e82a18d221c090c242c2e6af1b30ffbc6a7545b7514c5d8caeb271804e5601a1f86f5d5952c84139cc24ecdcf9e8856c020d334783220e718a5f11eb8ac1914e56deb7155fc243a1134ac65ef89f0ac12502cedbb192751b7e91ac843bd32076e17d18daab7ce918c79628478e7bcea4017a4bc474df900e51d545fb450acc5fbeaeadde2022f527daba6f4c135351378f86a3c7afa0bf63958825570b5adf9c50f11beb4997bb04d3389fde6fe0ebac36b4d15e967edcbf8573ccf9dbe22e5b074c55e1399b30f2001fb66e7131c255b009c332941a4cb8e9d4ab452059427473db457f7c634ba9e3829d8559c40618e4605600f52664ce2ceb6c8ecc81e38710307dc39a834cdff04fe0d19835e81b19babb55691ce831002c1d00916293c135cbc0d42448981ef73b002cde52d73720c102739f5bc7915454d20ffd8eeee2b1c17d29e61d6baf5d3551a2e5e8086cace9fd9bc9c005e6f9cf58ecb6e4014e5021d6ef8b459a745ce05f41fd75bd79e2a50ee1b831793d820eae9450eb999ae6be12949615d71eecf22cefedc43b322edcad7922ae79848ae42e94a8b9d6a444ce90dee1b7a9f00bfb7f778e6a520144ae4ff510dc1b64f818787d5a9ea09be37c62adccf7a41a0d673321afa279949439fe86de7b82b606e0f45981a6e3cc6249925bd9f97ae743329d3b664db11e414cbc1276b26c302a4520e2045012be203cab21c965867797f88132158e9ea7840229cdb1d36873d06ed64176bd8328b5c37fa0260f7469472e80adca77737bd81733ec36fc7c05928beef3f89872bcecef4933b8538b318cce242fa851fb1e93c3110e1b7ed9b5ced7d3c568fef268493f5ab80d9cc5e42084144f3baa822be5ce2ec070b1665bf612641bd28df4167c294f0cda83faaceb2d2d121a8fe626aa1c305c8ba1f9ef6c073a405f83034de3519b2be3d45b4b8e2db958d0ee4eafb9286bcda19cbdee57490913c14d966258b7adce2eb73596bce966a0e8ed88d295026705cace41b3bc8feb3b30f061066dae55dfe62061f7e2d592e6c13ef86dfbd37e3fd2a0b6af737d68046cf58c761cbfd6001b8d34048719514841f91664eb45ce4d803153acb53fdeec44e5f89068499f4134b611b4d01fe872db02323448e4781a1f7bfdcafd6987815c9ca2bd1cb9318024065405a91838fe940263d5b3ee06ec132a125a97c13db77748823f6eebd07e054e59c6e8125bc7b8cca2bf288439f0da11a8dc540e24938e6014e3df87f345d40cefc7d5139c227ba15c3bf555dc5a6b6568b9019a009c4d7c1dde304e533c0e22925d4c2f91d18857f531cd7bedb9d0ee7ef5b5991f4a26dfba444a45d189bc523eada6fce87aa7d35d86c53af221f0c4637741aee568b17391dcf67386a82a86ac219908fe5af48f3c18293788897712382cad83a8b8c4e50eb2b45990350fd20cdcf006c38b832e09d745933eb050ae7feeb547ccc283b623e8fcea9785a297eac1e25ff7f596954727301f05c576e8d06b42cdf2c59e5db933afbe9f1243f44d45dea928f89ba984824fbf716407b9c5b03d139e9e951fed35a3555cca812e6f9e9132fb8a3ecd019cb82856a199e52cbbbd2a4d017fcd7672dde63348a561e6e562a3a661fc96d6265a1f6f37a6876f092d1c513cc929744fc49a444b2c91dab506aba67be24d2d6e3d57367f88f7b9424af515bdf10b2cec8ee3a3bc0d85c274713ec178dc4facb17e3ab1d3507fabd1d33cfd8f197ad4e418d04b0f06c05b170ebf4dbf2e9e19e054c3170542485160a74f8bc7d1953e85cdc30555d1822d33db0c9b14d47320cdc8d941f48bfe7e17adc2ec474a301f6faad5909c983dab593ab4f048383dadb05939bcb9ef9efbb795356a346c444af6975c8aeebc0bb2732450d1c150337d999a06e4efe9703e1f5ca3b82e1a4696f0496f56af29decbe633f93ef061e413cc6b78a2dff3be016ae5a00567a7d35b98b4ea0598d2582414cbe7a60199a42f451196c35000d56d7c27bd212cbf33ec7c275dd91886c00139e0dc0f068c886b683ee79f6b270458d622484d71cd17314225b434e1a20d264116d9f627bcbeeac1c0126b1f8f2569122ab6956e0d64370cbde1876006ce72d0cf298c5d7e367bc83aa045a55648966cbe966812737b16819c2e798cf97d254b351ea46f733f9362e9a9e44baad5bdb963140bd673162dc025c0a1f3320e88392ae927d2a4aa17c1e9f6113653754a97c2c6722bbfd4220acc124a314998e918c7c755336e06f1ecdc670c4abc8f6a6968ffe46630f40417ef717d2d17b1ae188d904363a0c8556124e06089019c55d0f328431f8f398af1166f2d7d9a33db5fd903f588c0400511bca7c114abd73dc415d5dc1248c369b6312b63508fab798ea6f42ae944b909f3827a4db9d551df5657fc4782f39e5e395034fa87a7b8c305834a1516cf5dcf8b3aa318b5b301edbed42ecac6e11903d21bcc8cdd048e225162a63f00f516099e97f9435fcfd4580ae4b318293f5264b9af9e520a93ee4f7fcf9a3630f2d075a48547d2b713253b7a2361be57291abb999faf20e676144778a5f5078e58884fd27a7f709f63c947ad4e0c2e8224b4d2dec17180eb43176d178abd60ecc781d7edd557bcbcee88c4260720637d05c6fb9b1696a1bca5ea3d1102f6f38b6cd80268cd3432cf3e9421c93c5ed46248fc7c8ee5d0c6b7cac0028cbaa4e2776fa2be238adbc7c637d7e9ded0b8862b5110469ffd892c9254631cd20fadd0bf62acb67aee30f0165cc06648b6982bcdf5ca2f2246500d1f23221851a091f698a504f81bb8a04c389ea23fbd2744bb17bec27bed2956c7806445fa1f8d76cb7493521301a5704e3df7fdd1762185b72b61a51232696fa8ffdcb822674ace7c77e0405be5fab10cf15753b23bcb0e455941546eb3bea30858424aeaca5d5a958649a048a70bfdeac59d004c8ce2cf42e11ddadd2f70f5bbaf4ee42fb3086d25816c70c566654cd99c719dc0957f8e2ec9aff14d7dd88a66ee8ed506ed1548d0ccee6f648ce37bc273ec4b59a0977b7c7e4d0d1f4fc9a9eb35cfd5be3d06f34260236cfc0bd75f0819fbf9929c9c6395c61fc7b85d2e4800b5b7344baf7aecf49e136122a7d1178b568a9e82b77506234a7ce2d8aae2ff73ffe4849e346d3ec2766ecd097ea5b2da7c4ed4ed021a70c9cf63d588dc80436c2710b68f1fbf19773518023ea171dac4ae9efc6101cfa730e9c8ee9b4fcd9a3ac623ca36604817101552c9a1ee0b48380f31c3c65d84db7fefd85dd37d9a301a5c15bf885de174ea242812b3f32b99282188c3f848d20c65287372acc99512dbcf5ae1040a423be760141e96627af6f52db00f87247b7899737cc198b97f95ac2191b11c7409fffa5845a7b5089d7cca34d517379e4d2f0a3fb4dead07081deb3743a1a2a0644621d7673708a934976d8674027e2358a8b9ec8961097fe43c4578cb4e22d8f0b43a14555844face3598ce581c0eb7aa8fb013624aed368091b7a66ce454abef4b470d56f2e3672e78216e78398709dbbd1d5411ff88d0730d5fb21a1792405abd4dad375a5c1946c4662f573ad2292290b834f208c4f847310acc5f71d23e712b115f5cc0bc6be683c9a25d1c2a1efa3608d5608c4affc881382433be8903b789945bfec770375de3f284ee36a2d3ef81b47d1f66761eae21226f474f05c7059273df22a3d3e50e5194c27f6e929999f0c6ab9575bea2f7333260a795cf4c1d36c23710a914cc65d238660c443627f0f7ae7633044b22b944a77e1284f7221ae43e737382a3c36d57bce8577419b0d72f809be8d9bb338262a9f7d8a060ab6c04a90aa81236f65ef57554e0e58bc83c631e0406729a227fcbeeef8a6d8936e071cf4f3d15913f9b1aced5cd139ead406bec05180799a57085884098759a024db48119432e51dfb6f1ef8a5652e99d462be18fcd6b9a0eaaa85e8938f8cea2dd394042a10a0c2a4b2abef951c103ec85f1200d5daec8fa64e2c2965a90cbb6ddc6d12c835e3c1cd7a38ad63dcd62ca09a84d781f7661353b4f9dc82a3d3978b1c9e00d68cee18d089d2d6e0f486d14b23c211f92f39171f9437e93a82a5b8e088460aa0762a1520110914aa4081d2e2818db963f73b24911e719ea8a6a26c438f27f10abe59743a6918f5ebd34606a2423c517e1b418d13fb2a29f37a5e34670e53b3f43f766369a36932ad5af765b7f4a961be650013992ff08e26d64ecbf2d131c7e7c87e2b0c4afd9e88291a31a22c6811a874f7f49df84ba3fcaf2de22963f46a89b4951790ef056a732d7e70b872222eef928a0a76b7b90fd0f402212721fe80d71ac73a98d7cbc8ee84c2657dc3a1531dfc6803c2f4b3a837244c69fdeb446a36937e45908147c13783974e4eac5daf3c70266330157974da0248df2cbdcea55241e4ccae12f282587218b2937e6bedee9e69467073e9f4aefa31baa86b96bbc6da8d4e1ff7fa4c1a3cf9cae83de394c6cc7be4233a0043bbad1f5ad8f8aefa38f439fa955d90d0b425e2f1fc92533b9a2b7641d1d873f85bd00e4cb67e12c34581cf664330b48924e11816464d0c0e0f34835e92e4d925ab899203ee98f893a620a63920917f5ba3efce0b1ab6fda9dfde752e243e5eae040e0bc4e2e8dd730808e29dc8843cfa80bc623e476e62968bb6dcadc74eadc285aea626f7c731bc8b6275ca974f3458a545ddb913ff62f1602405f46a4583484caf401207aad9fe911eb03118cf979e9dc6f1df60435bbc9ff0e19927b8665e95d2d043cdac9de5f9be70a89dd21a0daa962ee33310182b4191dda2c817db1b263e6423a6042291fab4c0a2adc610314ce16c832d8c4d78177c1cda7e75f9705674f62975f003e1d551055c4fead549719e85aad52c569df389201ac66bb3f2d2f22ada182368ab45b563d5c3817bfd97383ed2482aa057e6d1383dc335c0ef1bc5ccefc606ddf3de75bc125b2de836beb80af629869d466a906f1c88bd8c781e5b106a82f36c81f214aa11fdae271609f30de9f58cd5fd799033541ca947539e1e56a99bf970430e54fc623ab6ad342645289d02a5a355dbd1a6a57132fd5577e1439e2415e5f3bad119acdc2f57f7cf01251d04a3dd16dee6780376e8ee88698e6a598512592e8891e7d7ac0ea902d1f3eb7db179f873b3fc81e616c28127a354c1ca30d8028b65ba72666bf6ecab7507c9df8f1b0874494885cb22c300321ca16b354de6176f14967cdddd7c1d49328d0a394ff749c04fac525421439aa1a1197b708112be62716b3c79a5025880436688ac971ae0bb0b2cb8be1866d5cc87eb439509093ec224e0c8512c2ff69290fb0c06f8a2dc603107fc9551d9877f291d1fc95f77d99cf878bcbfe11bd79cdcc8f03130bb5d11b5b10391df320a379f50eb1093b3d39145d31afbfe5c6d2af03cf8eb7d4a38d73d3b7e7c2c0912d60914526685d33dd0ef16386edb26e337e43e516c84fef404667acf1e9eff48f76022db510e8b01ad439142c6855a8d4c3f8ad3a388448dfc770f68d8fa1018aa73c2267bb84062daa893540c8cb423352331314bb50c3dbfab076452004910b0e882b4d9c0bf289defa782d0a5a00c53840eccf131e3dae09a8c87ed0d033ccbbb4113bc02dd666dd772928457ae280865e4a792f3b1f3d486ba052921c8928a23e4586522862c72841a95f0037020f150124321bbb7821e6bec62a3a0c60b7234b919237cf11993f17fb1c43b282a4d9e8e3fe43fe2255874e60e2d71807cee23f346888f4b7800ade6a8afa8e19a84b388fcc0384dbda837e6c7dc8938224f1e9ca155d8151779e33aa45066a3ca09a2ecc18f0aa5d96203808810140877a659c899dc3361bcf0e70afbd005d23ef12e4eabdb55eabd23f2dc432ac4bcb0503ae7a036680d46c7801bc487f48e6fdf8920feec09f50833f6e431119774159770b9e52981fc1c1e7c8db19b5425a4eecbb1b7234bd7c607cdb7bf5d2f4dcab77d2afa377a26e818564a5700fc019b58f0c612ab2e506ec504594ba363b061f3d12a40780c5a8344ac08d035e8d66ca991b8576d1d7dd9ac6d44c4d5944c44ccf3d1f218d562a714997b53b31532b6d683346ccb6d74059dd386aad70d8effe29fbf117704cac03cad79617a66b62ec2b4bb2896f765058c56900f59d80c5b73727762797a643503c4d85d1f1655b8887976916ea9594d9a23f07899d812884e4dd559ba1a35a636f6d4ba0c2f40d30e557fdc74e828e7a7bae36e6a1ba495f7b1168431b45724d674225d12792ce79d6d6aa76ce0b8c87b300ac83b020e652dccfe63d4d0b2214a304be5e861e2bf147b2b936e5d54c1ba9edb0a950d7e096400f01f04a4cece9b2221153371b6d4fce1f658a752ccdd20133703b3eb8e5f7f444e0cbe432d8387bcc848b909751725b1fe29abe6b981b1a6790031a4007aec4110d238660c7ad5a16464d2f58eaf4f14df1a74867a26b2e20fe0604bf115d1158189f855d0fee258841815404d5bc2ea25b4c388533eadb5581b9575c53153f7238f5449983c4bb2a55701e66d7429b3bba2220b8bf9eac016983b3918e6aa8fa970d16505271d022071335ba6c944ab9c8f93b3ca2c258d7b21534c7154c132ff56c8a7a47115957f5058b268160967dc8a822b2c98438b48fa07ab282910d106188f3ee3ebf8fa0e5a45149d1ebf63738a399228b2c8895dea40f68ff84b1187db16b0c39b9ff9df8e19bb31b31811a464e69896dbda400cf3bc4a5b53bf6328889dd45ae474346328eb5a6865ec31113f849ffa4818d2680d76bf8f20b1ba6ab0bdb0a32937b60f30ef5360dca841d589b891817bbe7d096cb2a22effb86ad55040f2a70481417241538759a49d6aecd004f8f10097520ab8cbfde2264009b00f8cef14d3f813cd04c87495a082667ea79e3157c178a7a434e17ab662dd3ce0a4681da21d64fda0adf1be8c2933e416c10a6e795b41c9c287a46dc1ba306b447baa28d65d97918c61bf6c5af809f951f8a9425e2471870f330f13edc3058adaf4691e5d30e9cec28e43391a4c926416efde04780bcd569fe677296013b8aa24e464697640f5082a1af0d175814b78c16fe939f64609757e25289f38b272a78bfcca78c25f105c3a74f46eed6aea26b25f1784bd589d830f4f6add49ab94e22cb0c2664da6d488861a76aa6241cc91f23118b782b3f1b36b4ac87ad08450853f52c5cc9d370aaf147d3070cbad0325b9fdf91bcdc890d9ecf33b73ee7b4ae10390ba5f2cb762d89821154be5c21ac47d765076b488eb496aad9e7994ffd6b0df0926db633ce6f0e0db9ca3de92850572bb9077fe0805e0907b0f6abee7df568fee93b1cb7ad6326f2648e1ac629d311a178cb5898696e64072df492f7cad57590b967ee85684a26f660f2321d4bba22190409edac5a651054a45ac5409806dc4f34f2f363cc3d80c30a3ac18b1e00cabf8b12d35dfc23802f2287ba18ab3fc5b57d142a47d413719e1e3e36ad16691d676dc18415e75501d506570de9218d7a25e4f340631505c7f8d35906872cbd420c2bf7c8f9f7286f884aa32747454a3315029923d70360d6047c9133da7bcc430437f3dbedf0698fe5ece287205cdaa3dd5de5bd2387c40a1be6b0b29a044ec05cb87653b6b2016718612370effdb9dbda6e8f8a5df06c510a642279a2688d962ab87ec71cf88faab8d0f2702159a54ac3cd8826e6557588e1b0cba3713ab079f5b69207aadb50672aa51df92a420cee318f656fe18a0d4c85211e51194d32a8cbcee674f24ad367d1e34d595438a9b01708c0dbbbca5866f208436d42674fc1bb8de10a068d200a4fb301c1182106a070a9a72dc631350b9624d85bb0862a5f516a71d6429e2dd83b14ad90c3af7e263cd27500e857c0f404328d9c39b3784dd2dca2f095cea7d4b40aa24a8a6e84794dd5f70117fb5a67309e829fb1f4df17514cad45ccae85340bb1354f82b6212a1dee7a63cbe37503952623c8c82f493a8dda652cd351bfcdf450ccd9fcba2033f6bb513772e0bcf9b1f3898d03c73a2aa96ff1a0b95f03889326c3f05683f16c49465c4e8127c803cb5826b34d0683b30fd244a0bef7b2903784eab9603f36ac520a18206e68521e9ffa2e22ed22a8667b60ad66a7f3edb0e84be2f1d6b5491330163fc89abc33b3482ffc400cfebcf8cb6d5358267ef7b2b014c900855ad1e755897ccdde6723cacb712a3e6c03dd1e32a4559492395c704b75fb95d89bfd7f50fb99c5128a46a5cc48232cda1722d94acf24436ea606c8cc91acf83f94187869fceb6502bcc797680a2a347c7ebe0771248baf0a7feec65693749952f4fc897381a3d04d6cde1c1d90a2518100509067a52920cc41777606e528be33bac19088b0078b553e82be995b6842e9671aadde0dcae260d28cf13cab03dc6f66ae0b1553c3afc6d8e775ca646eca0f4c0d028bf59d2a6a6de94bacd70e762e2b47ef25135fb9c27f1333f51fa332cae695ec84090e907dc0e178f5534fbb7af4033dcbc7a9d0763f4e23d2e736fe64939541f9e1ed722fb43c8d3815b73f42895d55f9a17b56f932423cddc5d8850cb415391877dfba01e37e441eca482d792c80b06eb379f02edcc8d6428e43e0340622f624136c4881bd98c1fed5c8e91ef9a81d9f5e2240dc37d6b479a37d963abad8d81b236dce19e86c903571213276d15de52a94810b31cb393d72aab0bb3004d071dceb0215d53735c1bd2ca024c5dc74047766dbe7859689a02b9eb9a31c5cdb6c43bb4e1f531b11d7f667df52fee1ef78318fbb3f1c43c9a78ce89d4ce52e2048b500f8a070fcd83e67d6f37ffa6d4f9cde665e0e04b8ae7ccd77e3f6e2da17f90809ce9519a3f9cbd6384408d63b443e5449fa95ddf3ab74e08a483c5fe9d1e312e80939107ebb76bb0e2516432e9af76c6519cdd4dd4804ae480b12bd91c16933e40aed72890d20b66cee186c610c321c70375ee45235b2434cd768c78e9fb27fa3adde0a768d7d5e4da4b2079a5d59162d8e47ad141aec58b57b14b12440f4ef75881ac4868a3cac7974ecbd5b3d9f2cfa2bffbcc896fbb48b3b581b99f71fbadaa61a70d6be5b5eb19a6c0f7449f9c33d9bc6a5103ad20b5eb493de85be2fc60a910732abcb714dca4f08e1293585e5492c1ecb45b77425ce2d59a3edda2a302f23bd2c6b6cacd53e22f5a522220fb60d4ffc64ae148d447559d32844766409aaa6326d49293bd4e9fbb14b6bab1287a24541e634b24c8999b3abdcda40ab4b571da52f8531a97107c1f8f9fb8d835620b791e90b33eb320d157716c674be6bab2dd3de6cba1875df74f392b0903440bd8de96f57568a8f538063348483d0c2afd5345e3745c32200825292b2bd036c25b18055aef7d42b958f80b42f2ddc7d21b45641555457bb0484b2697ab349becf6fc5189a84488ba22fb9b234acc8b8063e2d3a3f41812a29289f0965c0796b4551dc0ce0fda3096c922c6243a0084554995d7eb5d0a5d30732e075c132963b08ffce2334bd53810447c6cb186e1c43ddd03afce355a1f77a36570ab1188e36aece863a58edf7141e9017a0ad7e47144c4cb67bbb207932b6e8a21cf7e7cf9e298c366916e08296f2ae01259336c442a9aacf823fa2afa941a6c765b4294da47c70c3223547823dcdd583b6e44585f527f94f1991b527acd37f76709ed3db80d60e36468cfbc4d0ed7f1f2e678504260ab901103c3003d4f8f157cb6adad122f017f5ac88dc1e67903ae1a3e5bcf8d6ff0c9689af75e7f950e40aa88ae2f13028d6ca969ef48fd0309766f85251315d741bda02eae6d1886f17732e096bc5342ff2396f1a845372a2863958cb5f72e85611b37cd4ff914e08dd2876fe03ec1530e9b88d8ee55a84843ed1f33d47242dc655e032a06fa962f858be3b00cd4f8bf362d760ae02adb0267fb4fcb3c70d1799501e1b4f0ae0998f911915ffe89f8257fb31ffe9e7b75b9501808c23f633ec3a8ea32cde41a251fc53e915e88c5120ee1aa1cd0ef5e2d5edab2559530bc2c3ff8a0bfc62efe3fb9152b758d6df1fac9f73113fe3dfd4f3614a46c89d63b9cac0f2a8a7be7dd688a6da67d5e41d7a8a183b729bdaf315bca800f7ffa2b82fa59da9c0dd47213e84c5b3e5932fcc8e60fc68d47864051fa7c5a3a5ee2512891a142b522444d7c378d61f0c25a5f3762281df7ecb7fbc24a9dcc8234e61d8457f557302eef422d2a2bfb0a79155c748a477fbb414bd12cd13fec7e3484bb1befefb9ee311cba726daf8f79ed1d57b0ce90bc1ae780464b987b8d05b252b40749f56d5e9a5ca1cf379a729b6c5b9dfd23f74ffa957672ddcb8ed5474b0b93514d91a15c55f40330a9da9c0d9f773ef1e47833267882c2c6ac956f9950e1ebadaa114f43c6c22b9d9958dfd70b998ac5cc427991549aef06ec9c57de4626ff898fdbe759f03a74cdd3eee00736a5d7098eb762e24d368b5086576c55664ccb6c5bb8815bf07c0906b590945e4eab2368daf76217a8dd34019ea38740c1dcaa96a022d13a3703c4af89f784d439751ffb08c398fd06c1bd01851a11d835102318182911ef40394135caf4451f7dcc621af30681fe816721a8bef9dca53c1449ddfa5a444081b701ff7c86025c9fcdaf87281ac3ce89d174d00dad19c6825d089fc861fc2a278c3c8370fb580b0c62f3d5dc268c9e2f5ca4ef9b8b42ae56f022bd79a775185aa34443ec1fd5306c411ccb2ae29ce5e54152e33503cf48b61f8e8c775917cf97f41c25621a1f12ab2dd79d882f18adbc3f734c637412b0f983065c84517fb62123ad7d068f312341c0c1a1976146953ac2ccf1e7986ed440d9a7651ebe32a3feb450bbbc1d31cfea794b3109a41a52bd52309bbc82f0c7565ccd0d1122a47893861e9e8ec8530902c5e12bd6ac3cb56fc2c1ffb32447ada61d1c765b979493d7240f8afe4eb7d31191221ed1542f471839cc7f4e04b2df5f8f4949e384c87dc5d73d493c8f6a4b0248f77b3146eff8378557ca36f1bf22acb7830be41bdec64767caffad5443c4b4bf829c6cca3064ae5e7be31bd2cc6c2f6434e88681f9f8d35400dc6a4d93a1ed9b07281282060a37c65866d75720c6bea90643d36c0d90e003aed086acbe3d5ff1f30ccb0bb6ab0c5d532a21162df363b801a7ec03944c7b297b3fcf842e8cd3107eed88a8fb6017e9a943cdab2987c2f9fea586e2332ab0c34044e02b4f802d0c9bfda09ee6fd01442350795e5cfedfe4a846a3a577e6bd04c88718ba9d6cb602868cbe63fcb16f2f8c18c8f757e780d0127a3f9926e382acb990454e3f74b22d8a53bf8ddc19fd1efc89d748293cc60229223c4919996c069d0281e390f0995de192f49b99c8db8767205a6d409dbe43efad4636dff91ffcf4a1d6d4019038ce8f0d13df1a30f93626e49b490f29e36bbf78174fda135d16204571edadae964e2ead73ff2c5d424a8d0e031fdf3760a2fdbe3ddede27fa37d8b511fcf680a519d2979f5320ec5ac0ceecbfd2ed07e034b7c031cf9939dc1f102b0a055f09609187a941568a0812833524abfb316d794fede5f4483061d5644a36b9d6798cd8b8665c32fd46e714f37f6480fd5f099ad74e873f20865007a8277a8e92528579720973a39e065612bc37f13ba79ebd2e311eec0f7430de64cfb1d5037bbe0e2c27d2cf9ba8b251d9d194350e07c06905449d5afea4895faf4567fdbd7d5d1e0a9bfd175e054b18a5d5a637937c48adeba6cc9aed73d4ab49d466558b250bfb9b9070f3d3999f778d21cba8ccf71dcfdc841635270e00c18456aac7baa578a5be82310082cdc14bc786e863187b385169699c806d70fbf39a28a1e7d845172634675c09f033f983952b192f99f23aa723c331d96fea485572c11ef8a36f1772c021d0cf48680b7c37050db67c78e70e8c4eb099a638acd632ec3216a8dd1136861e068ce1659eff65d1713e7ede39ac0070e0bbc57e9d1430c96cd0a4b4aaf1a4b11f1e3517a70b10c93e5f5bad2f58bf6d367366800d6c027727b6c8c965445265d1f50d86ff15fd75d671147014a682abafdeb3c6d9792fb1918e6ca4bddbc426d29293da1ee6ecd91f55d512ef14f134d02369e2e1f21ced3b8661e483d86ea6d437818e0504b791146276dbab29299656649c970c2e0d7f6fe51b08b424078253a755fb748b38181f39fce8d025225524e090a2589596f1f2e82b8c84ecfce199169395179927a2c0a20a86f421b9fafa5a466f6bd5dc97ee27612926e10bfc9805a0d88f4c4808400e00f2f4f1c38e1c0f2cf89a4189b0ae0718f37244fd6d1779fc057ba2c9097a68f0169535e00b881530f0c015fa4a37291c6ee63d6deb1f21ba3929a32a99092652b1736ae96ed1004ec4ecdd51d33575df66f3d849234fb7403270f2cdbd1943813172da1bc7c461ec4bb618ea56d2c06ac1ec8ab5982c455d60a6c030bcb15df12003fa31c5882cc8f1595c5b92eab7b28e6260c1f63b475aaab8207fc75f4c5ab65490178de3f5d64c726a08291b82ef06220e43d3966d46b10b39ef9a33ca3b21beb031d87e3842da9295c96077a50b2ab01a93d64fc891fe7fe262a55aacebef495b80fa6be72d631822ce880ba952c9ae71ba88af68c9a9d54e882d38f767eb9840d06d04923de3f745e258d004c9b3ad94049ff3b9f814ce8991edf8c998470d24368cd502feb1cd36af33e18607b92767b71e1c3c16d78a4fba5e04ae45f41a9d20343b4bf931e6bf5672b24e0a0cd8df074ea4b22e88831092a7c1cd7a5b250859e35af5f8612ef06d7468671bd2ac847a88cd294525c1e37f087c2002160371d22ad7e40e9d606290e49080b45fb1129e0c30bbd53947a5f370a79d406263dd374645afb751c80e5d6a42b399330ed57981f26161b0c72663267db80218578c7280fa2d8b60f8e8286aafe231d058ecd32311290c87d722dd6130025ebf08e94c97b424005004417b0f67a432ce73510fa2f04a6e98fd31ae70011f6a1b202f1cdc80c3897852cfa9af7b69defd40e30d586d3ec0f71814110d637a5c07770c3abf747b0808b4b1111f4ea73fac31d1e130b6aaa735981069b81cd0618698f69ec31e3ab45f8c30f0074105444da5a1629874e60e3deb6fe6a0e90deaede4d63ccddc91fb601200a78d7530eda55d5c19720e500522e23eb4b0ea9aa02e2a40b007a5f1dcc0ea92006c88f0c4b004021f01e3840cf269fe8d81704626d009ad54fab6f5474a03a751c7c7bc174e2cc6f031c6ac5e9eaf8e9b13b064102c0e19ddfd57788c4895a7167091726703b741185c0c4d5ac6d8714a92c75fb6c27b5cd2cd7f62748c2b79f93d3b5576efccc9459ba9eda7c77a96612f6f6732a8b82a45d7c10be78d5777bef9056effd54e4a6d837633b86400246a1177255f676be7999eb50d39bac3732647a075d1c79a1e2183d5fd06f860099875d90ce1f41831e9a97764fba2261dd870da93e7138e832d1d0cc7caf2653f2786f20f9c834bc9afcf18a27458c3eecf7bdede8919e2319cf877a34564aea7b86de9f8fd15bd16fdf5f2c99bf3cdbed1446497f01ff751c26d351728dd8bbdd0894b97a0d812a5fca435ce050105b384c4881f55c69e4ceabf64d8be4194ed7c746f36d79b9affb392da69e8486d8e867f9ecb37768164fb37aa037157a686bf8e8786b72dc0c15c6e40c94796e01aac0710a2ae0adc921d69d3388c0ab3b8a886052e8537d4d9c684d95ab9868c0ae7911aa001910eec5b6d03035881da4995ccfc19db88da858aa2ce4309dc70892288c3ea8302d3c46ae8f638ad9fdf884e25681bca9e6927cf62b29dd4796b9ef3296f49a673ee0d97147ddef1b78e60964b5e2eadd94824d7de021b9b5176677db920e26a35fceae5f133aec7e877e97051581755f33258d1f72135619c95b18da66ae2a9613d04d9c360a11e0c0e16f242e635c6b6ed25c60dfd9acf8dfd98ec3cc364110bc3e3f14b2a20537314730d080c9c5b618c9ca4c818483ab292c4e0a1d250a5a2b7ced472bc12885f5ad88a4b80d8d145f71d4d978a3667a28a4dec3d1e37663f6bd0e25181a02970c5496b4e8ecafc9b56cb175516e7dd0826d5964127c52444a7ef54cef1e8885375562d863fc9a4de32e3ac1c812608646fc52a57f08a116a9302ed2ca96930c6e410ee953286bb6e962f1b2b373da7ed55d5610a189cb71b73e9c09ca187b1d33373c2a07896d62349fc3c8080760945ecc848cf834119479ab303c3e18a3e403d6503da0cecf01cbc93c9c260290a47e9f488903570bd607f8214d148c5024b050ab6fa65133dd09adc145e7de599c4d8580881c724cdf0614c8b3e22346166432dcd3e70e45138367ac485d43cd9a7c3591badf4bc5b2c30dcac876b38c71f2f1b75575e7a19d64ef0e16476c288acad18af67561df017d6640343869669e31722114f80f18f7fa977fa3c3c9656c3ef68960defd8acae4c98b11de22c32dc84167c8f3325f0190c01f5ac00870dbc11f333e5837ac88c47d51d453590641de333f23dd5c5706acded25bbe6ff9c9012ad9910aef9d29715e36b8273049d8f9b17066399d3ef686141ca25087ffe9adb95de44e05aef46a38f454f3c9144f5f4d30377aa2d6844b12f1078dfcd856c94d9018aec54192700b1c72fa7eaae4bfc8a989e3ef5d66095509c598bd7a5da1eff09da7e715af079468373e2445d0467f399cd72f839c35ac17a55d93b143ceb9950169c2a1cccc8863db2c2074e8a87096caff87106add03b43331271655c63bd9f49e438188021476828d5c2be273b7af0a666241fca32313824193c64151274629dc73abf06104b28087162dec42112c4b80ee590fdd89a000cf372fab29e3fd0e74592f5ddfca9a895a71ca40e18fcf5e5a9825472e0385b832c164be104184d17ec81b440b7f63169377620fffb92178dddcdb2faaab2819fcff48eaedc849072283a23e46506bcaa965114f808b9b78ac5fa0381a328bf1a76caa7b28866d81be47af1df0d56e07e16ca93ec7c57489fe20951d8ea2ef7bc1ac5db42698ee82fbff6dfc0a5b73394a93b1774bce580943a6c8619ceb8db64bfa6030831c65f9682a406902b9c03854a81c192a97dc00b458d0f1f7fc632ce4e6aff9f90d0ac4cd73d005c454da8b88264f415db2fb5ec07139e7028ac53d0cad8f3c42c74e979c566cb9b9f50f055fb86a40f972b4359c2dfb8cfeb44c7b7c483f74ff6ea698c259cd4a53a12dbab20ba761085f99405ef3b53c32ba9f5e26721da17cac49f829af75a9532ca71e1cb4f5538f4c1dc29083358b19bcc1d7225e4173db9e21d95c976a53d85288c663a23bb75968cb39eb260183b868d1048589cca22fb1245fafcd4626c566fb1eef9b69088e91acd2e4616fa248048ebec55cb19877369d9e98ea6fd9eb6f5bfbde4c21010e17343b489ad2ac7595703c32a65a570e33fd766b8bc8a5e8e54c26156ffd12ab37ea6eec282cdc484f93ffc6406593e2d8c2b5ab2b4e780ac5577a50446dad80dbf79c9e4b159df246af5e709f7dd1af974596928aa6edd852082df2a5f728ad7613653e96e49a0cbd919962ffb593a1ee2cf2a5f4a3a057e5b389265274cd29f1ae5b1af5a4989b6a1db2f4fc31c98e2d4a4eeb7c69f4a3e67f11c627b4285def7cb21c05a135be34fa52c23f993fa03429bd7fb22c82cbd47cf8ee1015467f1b731f2cad16d2d948ab97223eecff9cf867e451a4a1a3bc4ab93a69ea291e97e23d86f56d2f5244fb1ed0a989d8e95bdda6fbc0f10e23b5ef7d1343b7a93e8d476d67713831a80a259dd06901756afa1fd7518c55f4cb67a49d173166ce92b97661e960553a5324964e2984c581c72cac23b8c4fe8210aa2ec745fe2bf0b6e056c83f9db71e5069650f6b34938779d9462220d9fb231a046974391ae338dfeb3fed1bb1e9de08b99c6367f29c49498c30ac1b6d15c377fc6681d6dae5a223931ddcbf1a8def63b22e4287dcee8f207d59b5e51470b0f41d6af4d40a92fefb0c60a305210b8c84a0363851ccd9169b72b517ab1cb593efda6bf621db489cffbefdc3baccd43998518e1f39be0a4e736571ed9829a69d33cf85ed6203bbe83ec89acd9ac7b2e2a0e79ee447b23f8af00a5c5c2076b16652685597eccbe3ceeadfb43218b371c2f93736c689ea06d1820cdf5004e4602a6a48b297055331a00d8ff1d72d3a801c4d3fa3917a7d3d04ae5ba8b8825a3a05301551520089f257458a9837270e2c6147bdd4fa420dffad96285b6ce74e37ba90d0c935dd124f235df38512809005058b29bd7dd3d8544063ae124f897497c9a38f630532e36cb7139c23fb1d77623a76a262834917422acf6d4729494b3a9633565ed4b70fee782992c91868218f1cf1c3d8e95b5a282ff2a8c0dcb9de46e3066a285dd74087c5418a517c9962e66c715dca0d264e542e3986992248c0a14688c218ba8efee7671f1f5b1b926efc42ae77dca4d8ccb07e1c2dcdac13d88ff748e8632a3ce89c36cc64fa23666b6b195fcfb8ea84c7e634391cd7f3c34c14b6494cd14866585a57bc33567539a6f395c9e9024324ae22403cf1fefa9a73e16f061db9c2074cf7c9d3416c1323f4e817c6b7d07c39019cc1c2225fffe36cdf2b3c6cb132eea06e52d390a98bd183df4d42545cefcea754d9e61143e1a9de4c607fd23f0b7de123b25abd4465487fa57868fabe293807f167dc0295d3320acfaa52100f703c3db08cd1054e4265428a44ef9c9c4d503ceaaa718aecef5dad26d88b52abb310eaf2426b44d44661e1cbbcfd3fd735e50d3cbd4d0ede5bd1976f9f8cd42581b9bf61bbf6d503b5576ccce9196bdb089a2ea35ab8ee4c2abaac19bf8a00ee676d7da723d4c92fd2a042927120a7f25f8e9a74ed824c79d8e88aec154c5bb5584fbf27bb48c4485f250788550f24bf1d63852dcb84c90ad494fb92b358e1d211a744e9916783c61c5f029f9e30b82a2dc2661cf03384c7dbf8c0d4b92889a36248596ec8d648d25d51a6db5779094063fd4611617b9ad543e3f58ae3fbd9c3ca2bdc02d540195e64c2e281dd0463062cacd4170047d4b20d747b00a894b4d12bfa0b9fb020002ba8690b053f5e8ede9f76ed3432d5623d2cbdfae8434b92b4650cd17a2830e390b7df25a0c93c163b92e5a8c0e180892a6e99d538481b6a16f5e78e2d5e1fedc5a0b24b430c8d1a94374e333d994c55017da02bbf13a08d576873c25ce1b3d6120aea1b8aea9fc64bc3bd9eb1cf6d4faad028f80d1906d92c3ee0be02c446639d8809777cbac734d227e0df31266306143258bc09a435ddfe081542cec753f46bfd97c22f52a04aacbd28390555e1dd43aa1bdbbc1cdccd0116b3f3c50971fcbdba3dd0b0e5f88b1c476e8788ca1caf8862b2e5ec1f4b0d61af7c8367effb338dabd3d2f6628297e4bc38ea848d3564fd9473f7a615a2cf845445ed71b18654cb268cdcd5e107ec2ce6951f5108b03d76ac8f0b4a2c73aee5777b73e5f432dfb14cc4df5d403045312df0c46ab07922f3fb6efcbdfc1612f28d206a76ef294bd620207758ea5343842a12ddd9eac2257e1057b971c1786babcd92844742dda83f19a9953dd3a620fef6868442081cda7c229d22411f71faeede3321771f6289080065fd170ec574a06ce8f9f412648f6070342306f41f8803880407c6bad19ff93e905114d0b86af962c92b6fb92834a7ef70a15bc00f4654e29dfa5ae68e392b9352b901ef15fbf1c001d3b1cb20a3a57cd824817d1d3e0b8817806761d6ea52d4e93d08109abac0837beb147d7454ab4e484252621a3dd52b6fce21200bdd4913464d560941cf5b62988f975caa4e67c737aec0ab1f713cc0b9e4f08c012a464ebf45a111f303c472d92f130e281a4358442d1b55c5181042bb57e7da7b65d459dd81f7878d7ee99f073dcd714648ef151c617ca8453b185bf830e81fab4967b727bf1ed6967d56491e837359cc86565cafa7febcb9d8f7a8d5d98e9eeb5d738f13baa295c44aa69d6d81a75cb6b9d050addd9bebad7d4a1129869bbace7670b56bbb9d7f146e4726d36b22616e0870c526d23801e4b5f93dc6a135b49519d50591e0167342605e6e0f96e2b27c332ce42ac11622d229fde1c0e191327df78c9356efbd0d1345bee922d1014ac4e2dbbf178a267dba661e6a34f41197c9e34a258c35722e1aaf4134e0064b1bfc5993b8bd0c83a4318eda034136487a1a1fb945e64380142217982811f0ca57cd27c6b55b0156fb72b4b00db1bbe8fb0ed84d137e8843eb6172a0876b3fa3c19132457a08bf2e83a60fb76870263b64de0e7febf7b24307755e96dc973061473972b771cb8bd59c0b96c7bb413bb1487b3954d154b7343c0684b2f0a817c5c6b7ab5e2e2aeecbdc1e3f4f15d228b85e8c9846515fbf5c49d9d1011234cec8f74f6618227424146fd2ae1ef50c56134c6372944d0576207b5cf3979070a3679797f18cee5661cdb626ebbf6f0a36640213f6d68d4dd155c83cc5928bed25b0ed4be74bebd1389f423ab54e4567f79308cf9a1b5abfc7c142e65f545a98d0d6674aafaae6f074b8a251701ccbd40ae45f2e5441727f51854433290fea0c495406fa1bcd8a7ce1172873fc1030cfb044b36f9066ece84a7509d220aead574470e41b215e8996cc918c0c0c51cd65d308841af1dc8799cd53dfef143052fecef5a907a566c0d9288665e14951f9309c05d6ee3514583f1f6605472d6f2bd84257f0129aee76b143d58361b11b38f24e8e45dd7873b6d2437ef28fc42f31243fae23b7fbe4324e46a13a96f7d808fc622fd5c3f0e010625e9e4bfccda9075b9636fe2ac31d0236b563ca4b6787ebc7df02c0145c4ad5e23f4f8a34a984e56f0a65e6afcaae81f73382af13d8814b7e8795e7ec79638e8d94bf9a12ee96b94f63d62954db0119a50b54bf0a5438c48158d09d48d0bae0521f38f97faa2df831636dfd31e498581bea8198d21050cc966706d8db431002f909ac31cbdeeab63ed69578c57235238c09345e6c8ffaac12438b92286fc0552f18d165bf3475db5a0f52097996eee3663eed01d7bdf40fe33ef20276bd8566a28618b99984ad5dfb0afd4501638d5a6eeecb79da00ccaca38853f39e3800940a6cec688a1557483384290b8da5917d4128285167d3d143526d76f9eb977bc4022d26d5722ff8c143a36f798b15545e4abc38877f13147f499c93fdab9cb474c5cdfa5c87d88e2a488e923f407664a9098d113ae34caae41b2d0c92c5a7d7bfb1d34d940d7061566ad329e4ca5579ef3a63981ae029941c1d60f9bacfa2b3d7809d2f04016a0f15f0fb3e3bf36d3caac8feaf837a7e0f6694869fad5b551e206385e90fefb2d06fbd4847f74808ecf549623a5476bbf24198ce1f4766a39ea9e79a85331d710e5f4b6045c89f031dd4f0c811988ca414f19a382cded75257176f07ad1a87444a4bd63a81e579334c8257c086885cd5226815be84f7f10d4832732ee335b287a5e50434d4be3730eba42d31124c792feca7d340cdb92af06d91bf94306706e96b368c845020db833ed7be4ee47f31fde058d4f655b998bdc94525d86a5f719b9f595da321ccf2eec369de7e91695f2e40cfbe3842d97c8eae05738291206ff7219766a62437e57b43b8d600ea91e68e9c0b927091f4ccaba95b1e7648e7ac9bb9c8d4b1666714aeb793c741d4482475a0e6c1c9432e22ea12328ca68a2325bd7eac4d7871d67ad822bc6c16179e30fec3428ebd8e7470dc5cb1cfb64036f331fd2415f3679589b547604fabc073a9510a857409c7aa77839d5cb079c25983f281c4b74e628dc56745bc5b54f22dc6ef1dc16a95756f1e8263e2e26e79d96fd452cae87b0b42c6d1702abb1e363b1092b7f0198d993d540f0935f40bae978bdebb0ac9ea363933977142fe8820fd21c6cb75043b46e1dcda2ce1ab1a67498e3667d009a39054cc78cbed07205967bcc5ade035137cff60d728c8e834e2f411160a13c56b45127c347685686db3f4af4803b2a8fd9678f44d174f128c06a46ebb1e109d3780916ef0e9b9418424374beacfc9388f47e5688be37ff948cceb3975ffe65c8d6337a51a4ba38457902623dbffd85298c4eb5295090696f6584c3ac9907289ba7916ffb2965de183e0fd872602316b41426e1c6143bb39055c3bca744114fcbb93e8224d2932cf56e913f15b7ede599241b5fbda96e18dcabb1c31517b16dce1475a57832c840b9bee4d66c180dd9bced3484cf57ba55885628e41c41f8196981ea88ca36a87b6072f29477f27e108a78dd0d682a9ce1752b504eb490614e954518a6c53fe906e72127c4caed407ab79a8e3f94b86009da85edb0e291a68cbb5d9aa1ccc6027da26d9f65a71909924f1b6a4b65b25d80cec44dbe47d455cdafb0c4ab719395e65d8445ce4671f71a9e2c9e4784179697c52136d936d6380982997b4042ca91651c041ab218e70a1560158aafdf53c1f9afe3d18d3a50f03f534cbb258f0a6f8e6823b8f7c242f3943fc6d8d8ccdb02267e02df9a038ed839d4a50a75808029f0473a2101ca22f2396f4a8f4d790f7b07e98a1d4a4f8c8ff60929c7dc1c229c8b1c99ffe6cb870aace5ba525899c1e7661ae826dd5d088e83d0a841e45a441240170f538e00b692acf27a038508170a585edd9b29455414d14b388c42ececa6063c3f63538d2d43557b9dddce2d51285c5f136c01eb77d63458c883352a98b68eb1c8e0f012043c9aabd008c83117b9fe423b599e12f6bad1bc60846238e7e5e367e2ba69b439684c43895c7bf3272164fa717db1bb4ad024b194e9016e3eab169bb4b61973dc426dc7f8bf37a9423918dc0eb158a7653a638edef525566b4be9346a27064f6335498d78456898815cbd582756dd50202047b050d32590a84c9e452a7ce088e3c0608169a89df410e7283645ecb36861a24372e57a777c41d40f7a2c48d6ec032496ef0f7ad91f5ba4652b28686e2fa86f4e3756aeab7245429e5751e88df588ad7fd787b23e27af067001e7daba1ff73e805967f171c46e1b454b2e7e3f8659a51e91aecdb1629cb9d41aba9a5f1ebbf3cfb1bcec2fae8eb8f35c93157c3a172a2f9e214eda0db76338bfbd5691270d47c0db92c0b0698518a944f83e70fef36dc34c24a9588692c606940078fe2fad837cbf016d50653a8ffcb2a4c1143e36687a4892333f9787a9a2120f59f365bb8ecaf1d80720cc78ede3c3b0d83a70fbf48b0bbcf0ef1f73f87b7137566912dd6345cc22560a2c42974eddbcbf449a8d2babf68ff75d30e9f638c781c4155dc27867ca5b3d23427e0b9d1ffd1fff47fd1fcddfed2d536907780eede3e01668818e560bcff4d134231540f06d08e02482d82ff7cda5fe0e9224dfc36b7694233979f6ac43da872bdfe4ffbaff773ebb7ccde6397e9b5d4366096ea43787e588d98fafa369380547f3883a06c1e9db926fafd6e77dabce534fbcda0d534f65762820898045220a3fa90cbac074f34d0f9fe6c40f7e09f935569b780bddaaef7844035d06e7a9b612ff7375398c3ae16557d135558ab2710d4476ed65526b3c71a8abd2ebf75685dc8537cd412f4f291645f2369b0f7f8d3c0d6f34f03bdcf7ece1a53bc03ed6dbe7b6a70ffdc9f13a5946e803cb3ef9e36a8ea1f5ec02f76e865489307b43c14499d1e251353503673694da380c6848106b6a0e15eb11b3fc649b35a039d9fffce83a07e03d6db7cf6c4e0f6bbbf6aa2945413a932b2f90fe25657307ca18880e206ec98430142070834468a6ee83808bb533270457a61ecf0e8d0eb5d494e5f1603275089362f7071da20248fb47adc2f64a4486a21fa21ff6bec9b3ee100fe0737f722ed10f4d5a620e21b374749325210d8c020c0a17703f330c67ea155dccd75eb1ac0f3d551933a8335480dcf1cb6ce9b906f9fbb1788352404f2f75cbc11a7971a0c1662a1872689c51ff521a1be89cdace8c643a06972af0bce89dd5c1547bc22dbda636f68cd77f5ae05bcdb8fd62c0d0244652481398d24e737da8d2e81c2b91cfda5a30d5ba77482c6e4418982d2c0b4a5e0263ed88af057d83c53267c973bdc719b6871b2ac00e9d73d717a747789383297d38dcf3c4e3e34812f6382ae5fbf1648e7424586b7cd418d5fe11c98492268763b185caf8d5c1332053075f73d794c1023654194a70f9ccc0f0ac4d6296275239c897ae7a3091b5788023ef502fd3de0776ffe59172128e10940417e185cc93dea51f0f2ef471d2f3d04921d871a8d28a3615209dfb190e903da711a3a22c6bad5c34dd6475de227dcecac18d086d72168fd2dd68c385ecdbca9b5158e813c59316042075a9a45a526d6bfeb49f3b434009e35a5e34f08ebf08d8ddc97e59b8ff50fa54522843396483d62ebc8199ed5d66323001a1d463ec790db39d8d78cf1714f0a879d1e643b2309cc4ef44dd046a9ade1d6a3f48d46f4b6fe33509b082331425ab83f8ef6b2d111f40a32f19831726c30b204c08f8fab6058848ed357aa796795525dd4ee18e7f39ec1845f37302052ad9faf25647486dc66b59bc29f6063314314fa4febee3cccbfa3b8ab189f1ef8c40788d0e143dcf419ebd4ae45d0d819f5304598ab57dfa92a3f3675ab707b92ef3b8c900a26f9225616e63e64de44a9addcc2cfb292397149bf209d8e34fb7587c3e3cbecff458d28e5377d3f780b243f1e1cf76a84fd3b0a87e46aa1b7abe515ae4f95d8634d4ed8ff506933483260f1a8ebbf895ee6bf6ea4321d363f140cfb19a997bc7a6f4674dadfd71463933faacfbc86023a0cfa981df01d2c34572015b851d7ac404ba4b6063652fe52d76c033cef526c1d0039d7c4796ac242a8ca9ffb6deb2bacc18011b5da43da283024c58558bae903b16a25e29678425c40ef975ee5c094bd0169ed818d41c29d4c059a1c8cc0953547c6e1271f473e8beec92487092e61f8a763c46561eb6417cf6d2527c18ab4970485179052c3eca6cefa53f8a4d1fc9d4d93c8b20675f393d5d159a936dfaa08c3405d19d20dbf61cc83ea02d0985ad09c08c08a5447782b67b3fca1d11e77c841e50260a83808601d6994c682c2a92d02cdeb8ae3a5d830805b7a90250c15da3c3956ffafade5c8bef41fbf29ed0c1e4dce8c2a164015131491ee4d0d905bcf86d5465d0893125213d0951f9bff3afcc2c7afc06d6bfdd88f33010f6679dfba11723e658a0e43116f18a6b74fef699dc1121c4299389e5555b4ab54aff3f193e1e6dcd8695e60b39a175b3483416944fac7955c54edd3c5fdfd08d429f4c44a670343759d5b214b999012f666e92c186e36bef23d40eaf388cc4ac9a7707f184b3c9c470b28e49de6ccb4eb6cdf2fa370f7e0736972db21bb5e9a886e2ee9adf470e96dc8586fc165041e3c5ea9cbc51173764df6b6e595ef01faefeb398d0f53fd34735d7902e22b49ad69cddae82c3a6f08cf160f113bf9ee438dedee66b487a7d1c4d28fbc7186afefde65b48f4eb189d2a619b29cfde15d4a7eb363598af1bdc9b285c488504b0859b4b0b1560705cffdcdd47039ce6206343c036ae71161593018daa603eeeaa6905eafacb4e1ea4285fbf50d591319130dbafd8328f5dee2bdc7d8c8826626f50b7f00085c7cb59041c9e3810218b2e8a3e0add99aed94cb6c9b677122ccc216b6cd8f7a75bc6c7befbdb7dc524a99520ae405f705ec05360cad74a895678c73c638e7e744139d3c335c6a52a8809b0020e8700f2e0a4973add8893ac52daad75d91e4af8f1f2922cd80ea4b0ecf04967ef6be69da16b51835ed9fbe0142dfcec48a59333a279df3892942d1d4539ac7e572170f0f3701ed6b2439370f4f9ded72620614369cb9ae2392fcab11279cb0a0e6e171b9785c3c3cdda473524ae7a4b4737ca8c2f59ef978f18a4e582c168bc562b5a29491c562b122059be5fdee5960fde092085659b84458e11149fedd66798c51ccf2588c09ca8a3931279a3cc624ff584e4ee6b19813f3eeee9e19a55937eda6590c8b155f4c983eb564c6938de8c649fed1c425ff1858c69fcbb239936c6010f53668838ffc61ce09a9962373d51a84e111c7300d6d0b637b356be59c2de7d43a2e795c82e170bd92b5baaeb34d58b731fce78ed62cabb5b3eeac369762665e375598f9676688b8c6b68c7747198827f1459121a482cc80c50b5690ea1e4843f1442a08080ba9eef9bf139d3c064dd344271fd9b8ed9a1858c6646d18b1209c1e00833417a6a11f3f1a400349499976fceac6691ab7699a16c3251b3ec2a94d38f79e8937a33fc42b3391949512e136c925ff1ed1c48152ca6ec9c2a30d383e724ae964138f2819d53f648c078e9aad1e0ec9281eb8e4a6506e5b66ea140f5c7ac10496fe1672ac7eaa58f77a885e1862b3b09907b8e439f828be26ea6fc9c2ceac0616965b4676358488b815f4a1470f4fb021c376e0c409f670024bbfbb7b524a2be78258ac47ebbf4734bdfbc73ee63cc462b106d8c3640c36de4696651e0ddffda7cfa836f1f0b787d6235ed932f4e5e3d89871034bbf878cd9b011eb77ed500cd6b018ac633109b05c4a298db11e2c0e8aac46915f8f99f373fd67b2ff91374a6299b9728d52cad1882ee1429ca1647d664f6bce6fed186d5ac6ffff6de62d2de0764f11a52fea24aa3829a58cf2ebf7733b4cd844594cf297565c3fa2023649da02a91383ebcf558ebfee1a3fa8dfa21034cffd409c80a7bee744de4714632ef6f379fb9ec86507cb7bcfe2d94f118e7651baa44bbaa44bbab60d062cd8f83547fd06bb326c6c225d8ca222d1f75f2772d9d17def89624ce4c5d8e73f91cb0efbdf5b305a8924ed3fa064e544926be00d9efafe03a507ca558e0d29651911635786cb629476841bca70fdc3e6d122e7e5e0dbafbdb3a2683e27bf79ae6462c32f4214ddb535f77aab75f3346dab75abaf8924132eb98b4b5e85cdfc65952ee9a22fcd69b87270dd894b5958d9cd71be69dab669daa66d5a9db1713a51a95bb09fb8d38d142164402115c47f808354f7400ea044ca089aeac025dc37c89139461d15d54b54a04dbd8226351451b8de2fb8ee44b8e4df156139b419573796dcad6eb5b22ccb3cc65863666c9cba271f244774747474747454359a3cd529ee6514564805895fa4387009fdf0bbdfc3d13fb74082a55fbfdf8fe0fc14ddf84827cecc8c463ad1eb7371eb9f3742eec205c225bf6e83d5448bfe96527e0ebff207d84a7cd4f291d71cada3d3d33dadd3d33a53cad65180157fe234bc73bd4ad4011774bc1d10b961c37410bb6113e1ba6cdf9ca67ba20781ed461087e506366c1d22b8b87855813118d7b140e57543e3051d459bcf9ac853382ffaa1886f3bfb370d59ad544ada224dc4a929196767d6c0a3d46a2d8f1ad6b05aadfd9f9971943f9789fe863cd53333a35128f489820d99070685ab9429cd84db3160d30f27f9d7282c8def2b9e607df40678588031c0349287c60d9987d29793be6ca1c1439172fdb729d7bffa6b302ef98f686a244cf2f7da83050996b8158c3186ae572dcbb49a655916c3a5191b3098d6de162e347c37be9b3e932702f144d307821ae4d93810a8b978816b7a0a0c8cea2470c9bf56295bb4b0f58620ea8cfa7818f571a10436b54e942b2131ec146e3b0127e4aee83ad15b75655924f97d03ae3bb8228beb4f230c3bdd091f798b16b6fb1034d26e0f397af8c8b9db48bc07a34c4e640a93fc9f3c9999219144a2961616161e0d74160d29d8b0755a67ea44bbb25578603c48d8a9b56861fb86206e19fa373eea1e75b5765dc775e771e96473c3c34385f36f8a2650991173ce1967be23ac84a17a7979e11d3ef27e1ff2762f8c0a009b7888c5de4d0dbe30ea8b81fc6eac08cbf1a1878faab0dc6f31ad8507e10cc806d6ef8c116cc831cf7b4ee4d2e3e3c36745ea03baf407ba34e87243f70185d88458125f08eebbe7d40ddc771fc11ddb7b3f18e5ef751e03fbd2c466377c11c2811b78e33daa73433aefeb3e21baf7beff7cfec3c1eb3e5fe7e9781d486b966971c6868e975684fbdc130c2718780a0c1d8d8361fb256df78a23fb181abc9c64fdc2a25d99e8ebd0a761d27313834185b94aabc0e827bdd35c508965b185587aeb336153ab98e45f35cb126a99c28423d85493b04542473e090d2eac8e1bd834137776da95021bb6aaf20ccfccee19bb225e4eb418840d1bdb885e201f74881e5bacb0da6ff3d4af8379fc3688d3e224e698739e322e38963883b51c2c2c5acc10d9aefa6732c4f173e367f1474cb3694c53e38d2f27a3583e3e6554f65c92190b4bc6c2a2634728c4d6eb1549ebcc247de724ad33939d94b26577574aab6c2a6375ee93b2825a6ee0c86e49475e57217457779f4249058020c0ca6472e59e9860e1fadbf8134ec4ee4d805327caa1dbb44a4d4aadbb6b77cd624e47545c0673adca288fb1f2d7d8546e0e3edae1231d556cc83b6d82f1f0efd78862fbdffd5f850256123ff4f581237ebf4b06b844e90e5c72c2f5d7c10736ec1bbadc707961d30c362e362e362ed72968c325bf3594606d3aa7a2033de2e5c4e552c528a5cbe51c738ccbc5a817a3ba9fdf89d8b33d549c467e9b6e22c9a77fc0b020265636ccd5e446307632e6324a3271b968f06660e34b474e1d684b49af56cfbd92d263ba09f8f24a8888c195a2877131c9bfba04a71f61e54ab0258aed0e87009ce0092247ca48ed30652052a9821674705171b9dae56ad7cb0e81861159ce8a264f75cf813333def29cf8cdee8ece62398be5ac9652fb1b975a5cc11222292041bc0553f020b5a4bf6b91489a904c5cffacbe62b2566b4321fa6a82021bca26b2899c9a469fe3bcaebd1cda4750c62e1831be71fbd63e67ab15b9ec6079fb2c1674a9f5157bc56a8c5c8b7a564ef36e91fc824b1e8bf5175f4c568c4bb158ccca0f76a25c7feff30144bd5dccb4c97577578eeb18b7d11d804bfe2496f1d7b8d6fa5aadcf1cc771557baeccd5ca05516f06c6c4707437cd135511b7cc8c1938f2de47236f145ffb2a0abb1bc1fab587ee725f6bed5a3beb6aedbaeeb35a59562e0ae71839c6ef72ef3fb0e93a14167eb570290736fc87f18151def50782ceeceb6b1dc81a184540cc0be3a3f7d11457acfcdeb1b2472c168bc57a4ca74c4072a4a7a7a7a76726b64675a6de5005a5ac3f120284c407d06afd4ab2efffce338404b059cda43a112fa0fb927c9e7b118e488748072ef96f2220be554d7d401e91e4ded7794028129650910a2287905a12bb0e87036f5e4e06a31a888f7e70cf0f2038e26f57b02bab81a19371fd23101f59246cf8ddf6df7122b8f38c4672dbb66deb8e4b1e974e4834ffb6d02ac5c4a8626262623edc73c5552e44034df2bfe13e34c54ae92640a932b052bc72087182265332b78fe91a5f1101870db54e0f47fd191303868d378cb9fe7187f71db82394e3f9f01e74a43ea7b80e5c329f53db0b041ae000d3541a8db7c03c62f0164d88d16afc0d30c95f0af50ad7d30097a668c20e1d3670a9bf7362c33250e8a53ab7454b4a29650cc302a0ca13c77161d8c8110066031961e39fc2532686ddc0a772e4a3384363d830147af996272ef9c3c4dc8ec1b62fb132cd4752fcd6b6ad6e35a3339e4e5d8bdb9afbba93711c0da6b3bad428a52c022b89d56ad502adbc258af51b82b22ceb07318a9a1a0926f9af4076b56294ec6ab7404c6cd8ab5ec55a57b3c7861ceb311aad66607930aa8740804d7d0226f97bde0b3764d8aa57a01644b1359a7bf9e82f67f162ddc8d24588730df3c69ff3860c6bee21ac317c524a7bd5ab6e0756c2b8fe5c6bca09c248102608d66f0833e78c715126b132b013e4487a00f8086ed8463c1d1ea3c2b6c73c161bc53ce6b14895e0b895134dd249fe2e73228ce4929c5386c2b09e8d977e1cb2a2f1850d7b95ad58a130ec7703051b492479e76cc1ea10ca828dc9c9098d613b279efa54c1c6df2eff200756aa87c3bd56d9c335c68e567c2678e2828d31469a652dbba514eeddadf2aee33afb02ebcff713865dad5cdd2fed0a1b76832e3580e109c9ed1fc2741336914f155b6b5df5672f65f69dc99e9f637eb68a9d7bd7cd7a71f4875d8d9b7910602f6ef6ff81065d7058822e0ee0abbdfcaa5df61e0cfb83e85b9f8a926c7fc34ddbc6a2a2be3738333e07bbd16921f2d1fc43926d55ad0d856e5efc8a37526cd8ab5ead56ab5e7dc0a0d2c566e3376ab8e42f03cbf8cb5a2b27cac14732b089023c271e1ea0226cc837704d10f5663afcb9d865221a3714a233cb3acf0654ba70eb2dd00b0ca2e9210126f94b80022010a5201da229fbfa0f60530573e02a43b8fe914706e248c2525839e7e441252bc2cbc9c7591db85c2e977b1e112e715fe7f4125de4fb6cbecf72dff7c56c1889540999271a7153e734131c8944256eead690aee1c05e826596609a56828b44589108d7ac211fd82cd60e1ce840d7741f72ccb2766094df2bdc0e9cab85b8ae740aa4e0aa69167fe172b1b8aff2e0399d6af4ad8aef515ed7748ce24ed72d7bed3a75cd0e2ecbaae2ae68f2dfe1e3fab8aa70dfe7f33a6ed37c74b2f191cb058314dec54849ef0c3f4245cf251731c9ffc8f52f874b810dfde52f7ff92b7a35cb6a56b3ac66199d32ba1856c288c562ad986c0f7d34596be1ba13d1a0580c0cc590f82816b3c228225d0536b530c9bf63a18e2101ca810d5b45a5fb97a4531d082448aa8bd830149232cbb228dcaa5028de965058fa9452eab544b140a0210bfad9c25af1118b4bfe2c860d318738a40a8566cbf8856c60c38ec59c66c6588cc5588cb544b1de8cc53a1676acc1d81a0b4ef25712f28e130c33e2df60c79058cacc999723462d468d4b75c658bd58e36720cb8ec5acccc0825b6f35016078ba0893fcbb08946cce130c6d28b0ac9560b1361818d8e6e5a8308cfa6ab45a536ac0262a9cd05012d687164ef2a730316cd8adb061b06efd60354bbad40ed66ac15ab0909d2010b61b8663dadccc3971a03cb9bd438316f975f7541501095d49193153b56180022d48900ad22da1c9678c2a2025d8126bd73f2686ebec83eb5f6705b32c9332ebd1e80b90d3b4bc84741ccb7b85ed0feb470b6f0984efb375defcbed7e7fb3e00781db77d8cf2fbbeeffb2ffbbeec93f2fbbe8f65ed2c28d47203a71ab11345f3ae13d9e0a41d0fe0927f0d2c43692712599bdd8e06146c78ba7eb2b9e9449c28d4dd1ba5dbc4b19d70a2e8213ee2d50a0936ddc024ffaa846522d4044b91014b91820753612bdca37df857abab077bf5cd5af5ea0ab6bb5b4ac9aa4d306735a63698d1af35cbbab39818c90595adb15a1b0add90c07224cd5a3530820dde4413a7b835ad3d2dda38bd6e2a0ebabd230fb158b4ddffff6b9a16bb9699b46b99f9d486adcc3db000431b3358767ec830196316b318e3fd5a667e566bed90f844aa9b397d10b92dc62dc62cf3fe8f5f6bac199db1080c357e5e9ae4ff1273bd7ec85f5c1cb56e35380f0c3850d8d0e605c66d067899f2890c9e7df5baceebb8647303c3d9e93aeb82aa552a95aaa5f2771088469096bd56339ad131acfc4c036f4c60bb73d08460c356d9f828887a67cf0f19709348d1bca094316e1d88513ee33461951ce3a39922d8f8e16834e323d50686548cea6e762b65af55202436642a5fbddcd71d36122d4ac2fd1425e9c0d5a73870144972d4b58c61276d1943b2ea743ad9a8545115c1da2a954aa5d2fcc30329638cad8eab68e2ca45b089826dc4494a6c4b14bb5d1f288f71ce8fc99128c14dc4d52acae07a8e23c97127562c224ed3c47612ab68f25aad55ad5ce52a57f9e8962943cd0493fc733a891c1f2edfdf9f707df80d239288040df24630aeb8c41166c3b88aabb88aabb85aadae34923ef2c2e21439468e91d26e1adbc391519a0df1559039fd87d2ae018605a2da2183b35903e99a366284af78f436728aa69e33704d1b691919505d23dfdf865174d5a29819cb59ab7ab48cbfb5f1a4e2bc19a3554a7ef13c13c0e934c30a3c33d37a717f9971cbc4e59ac2c333673fd14eb413def449d7f02b024dfb464a65c72e2267ec8ef37bc6eeb639bdbc44a065023e44f56f0b4de69c378ed8a94448e0d4c414ba5b51050373f26e267272667393408810187a61a42bc789ae6117951d9fe8ee8ede73e2b42ba7735c39ed724980521aa97448c8602d2e2b414fe881517d0210a0e0fa3f117a01cb0a8670090736642d6c601bedfd21106261d1860cc99470ad49b3fa7fa30e1f4959edfdb07c202b23d2518aa8a4630ba211e7b48dd336edb6b6d5bad55a757c54646d6b5490b7aa0b4518412ac80c57248106a9ca6224a91fba2c85a7d8780cfe9c941c9de432b08cd770c93fac9181a72b36140a9d4e45304bf9e1e752ad1107f6e3934707b394d27e283500d3645c842fe5a7941bd77de61f39639a8d8604c392f7c675def77d9f07c6ccd8d0b18307105508488edc297f4ece7bf4e0437b800394ce0944444542ba3077e0124702db5fe526fa8f48f2016cb79f76cd14795cf973cb9c7c64fa514352ca1fdff52f404800d76b74de753f9d18c91684224ec04a057127f480085e8c00d55e4403a159089782aaf819eb4711102ef187b8110cfbfe88a35128cecf449d9231d658638dd5876c02319581a77ea71f2d6c783a89fa664ea61fd13d9fedb13d3dd1646d8fedb1d1d45a702242be1ac0ec9993956085b95faec48538cb8dc4662b4f7a7ab4c0a67ebd7a5e3daf9e9733f16aa2b1a851ec11425d3c14c2508259b859ddb3d3f3aadc3dddc34921467757b5c360f6457226cf7192bf839cd8d05b5a7d76296c9a01b2682c16d481813afe854e0e0cb6c3a828855194c6fb2a822eddf310d7df8738cde6aa1e2b31587faba581124cc28da3ba69f5450cdaaac31cc6240735980e6b88671fbe64a2ec720e7398c3c2661161c17c34752b5c5a35125d823639109ae4bf6d336600e0860e0b7bb572285c72186ca5d33a30dcf0650836642eee053807466551aec0c4984236333313998a7a269a5a0a26f96b95c5c696995b860d1de650d8adc01895fd006030864587d5d02bb831a3be0d83ed780e3a82eb601e88be9c72691087efb906f8d7300d9d3b5964a7ae6b958f801cb1ec45cefb1e07ee3f5008ef3b0fc471fff03487d05c2bc232ca1f3ac63946ebc68d273738274052ac66fbe3f2762a9f5a07d44956739cc6c57bbedd739aa876a22ea767037bc0cea9f546109ee4bccb8e8fa08ecfbb0071c1e10980a4063055ea03812c097110400f90a446308390572a48346227f57d084037c9070af191e439d1889d94fdcf87960b1f70e6c3991b93f260e68952ca3844e75e0d62c4519fdce041f10d85421e0d33a334cb28cd32caa38c254cd9810e524082704f48c2095cf082a78a29413082056478818432a8c42e5a211d1daa71dd67def7dc92f843782efd1fd85da48c98a925db0f91e2324abd242ed973df81ad2aa3a760d4ecb88a242f126342adc2fae0e6ac8a542fe3c01f91e471a5135d4cb8a38b23148e52dad5ad93b5ecf959c883409f68f62ef19b8a5c224883ce1471556bad95d2da4c757422152b85121c24c18b9d2830184e0ba7250bab7d28b72c2cbda1d4b46dc3b1b9b5c1471e8ef89a28abc10130d8b67938a20d35e09820fc4edddc709afa3856b0fd1e583992ba6e07d6496c709287a8b00be0d2cd12966d364ddbfec6398ee332ae765cf2b804c3d9d99c23c2a5b75061d9a66b6ee4291480cb3f2823053796c1c56d30461aa920f385f58fa6938cef2fee3e67cce1d53d864b2c99702dae5bfb9fdbb6316f1b6f1bcf60b19f17c09b0802b76deb6deb6dfba4d88e9b2985bcf7f7b88659e6d3b6aec9debf6314fd04781f12c003c3970f0c596e876e67c1d6c0397b38b4af65acbcf19c63c9516efa657777d36edafd8316462629faee4d348d461f4a25e803975836e41727a4659c8a119ccd5a48d7b412211526c228719a686aed71704d2bb9b9a9ae71257e3946b39cb5955554d22b2b4a6e7c989e150993dde8d058428b93215950910ad23989820c2678b171ee5e2d0c5d58ce428cdf65d364d204d9cd99b05be15038a789707dc557ee47f811475c3942be4fc1cc1c768eb7ba59136cd6883522316afec85b2e032e794b829cb75c672485b79ad56a712897356a31c99fc52c6fb98e2bf1be0b2c9e3a3efa4ad05bfe2396043f3d363ee80a93b75aad56abd56ab5a24e112eb6e80171890aa494719364cf5e0540d592f841bc07c46f978e0c17fa435c1a6353da2ebba59db001d4a0b3a8d4ae587c14aa190100680113150000180c0886c2e18068443620e69a0714000c627e407a623c14c763812ccb811445210619680c210400030066686a88025ae9b687c44c001aa6fec397954267125ca260a443c4239a55a2927b6a5fa6160c9474db2d92a6db3b09092908101b0f33b251aba9c545ead1ac39253b3ec8c00aff93acbaa7fa417a801c1ae042977cca50e4299dc024c91eb22153dce17937e96c6566ee5d387ec3a4a796e3363d3bb1df1e20b7269e571a130a4080dc9920a1e80ec130b1676baf1ed299ccc8548789ef99404b268df9b76405b55d90dd227d7a9aa84e62717433620f5533067de4d38e7d79809ee1c49ea5bd6444a5a6b58d9a389584564e20e2b99da28a52fec56815ad4ac9078f8ca7567ef69077ef6ce1de3d09c037cf96848a2ccf0ebf5831f733aa94a086ace1e9cb1f0f0668ed94290ef2790b281e2ddb189c5b59c241ef4b5402ca534653a0a62cfcd1bd5a46614b388a41d7eb7f78a28afbdb141b11b82a4c0957dfee934556060dbabc513fd421c48f52ae02af0eb489cb231c61098afd34c04b057911a7da12bf8218f360a92752ada73358511601f6a630510450f787ded0133544cf46951ce32d206dff03d5b4e1a84e5ea12951e84e79fcb272a238227dfec6daa5e60b2b7afdb657eb08b408880a02546498179d350f8ada9a49890e1c4612bc3381835ddf6052fbe4cfcdab4d2b2ca0d3bf29512c084974d3f2814cd7ba89db2c345a000754682aa02047881947ff04c1811a2a6327b362447335cfe386e616ebe016711b43b38d068b1b6bf9090853d3f6964e5312745445786aba7c907bdb3c586053d2b7d8f3c180781531dcfcbfe71be739d1bff1c7bee032fd2d00c4955b0a9aa0d032e08e03e6faf71a037de489dc0b1106dc51e935f691200b844283dd9f5e36b4afccb987f80e90daad55cd83184896000ddb55e8c5f34f28d02dc03bcd2b3472f994d4fb9bb73593945fada46a87b7916286b5666e0d1e2645c799d4f78397aa686179acd3c2d5ac6257728df27c85c894a60b3285e80b8ef1a1e3a48d4ee5c69bede2df381451e6a8eab2eaaffc894bd9349c25481867e50ae8192f51b7108c29be54595d819bcfd008d39ba1059b06d1780139b94ec42f33422cd507ac2d3376d8fc029335b8c637cab2ea49682fa7185fdcec027b925d89a0b0662128a5618f26405f9e7398ac9890266cb6de656d4ad8d0b025228f3bdd0d112ab8a73cec025e971ee5665b9313ef3d13483e905333c00a2ae0e179b97e82d0d89e31738326a3348b1d60334bd7871bd994b895ebd8968bf5237b5f9b020ce6d5956ab5d166b4fd6610f99b8f7cd7ead635989dc6c5a324748d800a33b5f51e7707655e2943f083fc4b111534abdffaebb6e146ec0ea46b0ec5e5d4078facbfd5babaf33ad631d7089b864f7c0e509ffa34c1c368eaf2d62bf95638132bf2bda5d9a1575a3f264951ca6f1d8b1b3966fb03e1a95b9f03a6c8db323e811e96f1a5d1f099612f43244c0abec64f310e8c4b7c79952b19b2b092a9c00e452e189bc14fe98c4fa9174b6441b4880205fd8c75004bb42e2f0a5dc36801e50cff6545ac8430781637a48426cf320891e5f0014a5bdb95378c2fe963ab64fd31aefb296da6e3b29904bf49e85426f9521b78ccd735546aab7d477507e70ca138be9fb8cf9969c7dadc1c1b3bc5267d99337bba13886ccd8c5a4f58d0699510a681ee9839199cf7f61b08cea70a276157e9c635aa84264893b0993e396eae435a406ce59bcf0ad670b04ec4c36f9d9e00e88d5c445b37eae27ee816612af7d1147c3a4afd29c8feeecf596fe27a1124a1bbc756eb7a9a8c09afcee6a6477f483b2482496f7fa14f8189d814a6455063fb7177ea3ce6df82cd6a1c923b92151c6cbe094b90e36ca922d0407d7e38402c4521cf01fcc15b57bac73529d36cccd03579eb27db41ddea19f61602a2c834696a0877d4f0e8996223a4bf513041f294503561be6342f745cee4992c0146ef0262b093f78f8ddac44f8f157b36d90328e6c5036eff0472af948c7afc4fe3747a1d3e902ede88248099d38f762b98516547e36a3e808eb11f88046fe759cb19cc18c1725b0ab6ee11242eb235fbd18be7c55c09066af1add7b7473054f97ababee4e84270afd4ea70ce0a988b68ea2f612c9bc4190f8fb95d31dfbd6f49170832f4b97ec6645e3802e3718a670f01fd33087c9a6f3c8163c43935188890a0fa20593304fb551930261808a527e113e025417f9a2c112303bd7c46c672d79f3565c9e5eb126bc725a287b21708065f6574620e59954b7ac17f501025eb81b20066318230edd514d251d9ebfb71b2667d4a54964458041d97bbcef304b13d87a805d24be5294f487750354ce7000f82bfa8052ad54ad28fc78073f3ad2006f78da8ceecdc0e4d9a095310abb6f69fab3212fda9a4d5494fe3bd2e4d2bc32f8a0c3b085adb24af01213885a46923ca8a0b109c91fce48cdc0d9206f03b4b7942ffd9690e6208f1b397276e366bec17ec3ea1142dac9e085fc3da64c20773067a2d6409015aa64633e2773755b740eff739f1ac2f78076030a66036007dcd829d3dbcbd133c8ac22d0006b7d37023081a27ad50a44a64630c3447583555e0e66119b4a146c0288fd0ae909aaeeb2530a4b24357cac084ec68a7b41180deeb88d8c41ea9da8b75575682e446394b270969036f200647d61a2f536146fdd97dfe1c9007b2ea3a200dd70902fc5e40bad9d29131f201bbee550ae5db82c71686ae385ea2fadaf88395d8c5ae606eff42eb9d1a54bdac041ccdd7ee4b2bb736768837a38fb41ae850dcecf04cc838b91b1c03886891efe97b7e0c9bba0b61f55ade3595c8fbe80ff6df86bca2e54e229a6a2257ac45f4fb5ef4a39faec920d2e7c4138ed84f92892354600fa2c8383b2e323f0364ed5cbbda4bfadba38201c207a2e14f31fd501481db66924a97d6eb548e90edce14f28f5460b13db319f74d3df70f1ec89c2ea7576ba5eead8510aa27b2731696fe0d405dbfbf85c1a006fa145af459ebc3e983711b6a22e5264061f941a11051bba3930554e4f02f2a878770df58215890a5c829d9e684b7c18f73ea0fb8c69c930a271c4f64ad473679761e3f0c9860933ae5b84bf7e15177c8825d3d6b06136173173bd8629ba572053d7808ad53afb1b90f7d70284bc5133ac56120ac5faff9a656560c5a2c1efdc5c4650d9ff2bf9af0bf989e9083b1fd7079f01ff47ae562fbe4905f37628e86d5b7ebc6fd093fa8080d4fb6c324e3a9d5aa2ee52ef101123004aa21cc551221603e775731d3796086e7d2b39f254accdabdaae81e3962e9155d85588236177f4afd949bcb3204ca4ed1882a020c479511001133813b064e3f6c9e10f192d30f1c1184924cf8386073028806224f50884a88c08a463054d0fad2a130e0d0d329aa515defbd807ab9f583196d326bf96f6985aaa52e49c76f5608e7b1e290860ccb138307434cb9b17ce4f328ff81ac54b14873e451d3c80460cdf46a6501f9bb06d2596e27c800bda7e00f0ff030b15fcc22f0684afed1348894e184683ec2828f3a10408cadab23d2962051750f2b40378151a5e6fc5e11e04614b8811c9ffb0686dc65507616da6c6da112bcf57230ce387c01159a1170490ff75ee606308f8a9591a19963205dba6e8022f7aabc71e6edec23a67ca29b13b294bdb95e36f93851de4c63e5ce5287a4e435f35b747c382144dbfacc4a1b85e70c41d30a708601b3761bba15bb658f5a39ac146b2fabb25a20ea3d9d5d50c89ee0e9e04bd6c94f54cbee82e48a2904302427f5f7faf65b47ebd53f19d950984bd877a132518572650a608db4ce00a242f2cb96554e22ae541bd46aca39ea61a5a535e530087529236f21696df598186c051638f41298353831266d5ddb48f4a1ee34abeee30fe9dc40410a1568d963fafaaf25f4751c5654ffe0573837446d27e96ff272487316c0f5e3a3ca26b8e9eb990589d45fbd633eaa654d5912db502836287ee30c68c534723ffb6843b1e3944df966ee8d9c657bd43db4950cadf383b138d42fa1578fb8cd6bb7457995252811f75ea198f8d215f2b6774ebf1e1811759e71d121c7a712377c7d839575df4c7e853b7a23e0c721a0b6c4c1540094df9d0df3a21fb024a54c455badbf83b32ceae35161cf8835ead906ba72b7c9302811c1d6c03c9e7c10c3603c53ce0187ac49e578d3f97d05e53ebf1da7bc5d9f788c7a7ac6cd1b989eb6bf3746a66f65a9c841d7d3d0771867a0fb7fffd8b7f6c05e6dc26345ef600e4e1ed5d75f75ea231387be127b89b10d7bf8a5dc18d8af47f45688846b319a2952ddfe2d636c34fe54bc431f71d0b9fb2355498d7c6cf811827e731bd7e1cd58a6754ec4534b7f267195d73730a4ca27c1aa1a0356e04d99cddc73275556a0471257a73ce0c9c8f18572c525a2db843ee3c2d447895121a574da6b0b395cad177308af567eb199677bee3fa8c54a611e3d41a2852d3a0805828d8ea06e40c0e351e2d39292ec242559c7aa90e7a8a786b16e3c2fe40daa4b468e56358663a2310457027efae6e114e1448589a9b2349ee17ab268af9f4147226723431086d06f102151eb57147eabd01049ad243dfba8de130e94eea2f005526acd8fc1b312587d13dc48bf7c48a62c36eaf4e1aab6fddf92ca4078cbf1904387290edd8466453416a38094c6e9123f6e923ff5faa7785700a779e6e95d04fe8baa420d10909b1b8d8adc1565bfb1b42d081d28254d06825cc9bff911a50ab303a39ccf67ef1376293fa1a4af6651c040be0eeb2e9aafef3fad4f07820b2ba3f1acf58530a77136d5736b13b37fc3341597e85ad3f8f2f7491b0b5ad8aa699c310a363e642023f2a67ecf9d68b3891130f3715102d476177092c222cb92642565ae142526a93a51fe2e9df2d9b2fb9ad6096a571dbd298d1e9325de24e86d4f92b4bd902e0d640374fbb5f4e56e6229ef46265cef03c4423cef9b705dc605153dac80fd24dd76c1c54af5a4214e6002508ccb17b46b31b060876ed0dc182518a193b1f14895e41a54f7b8fec7178b0c5ddc328fd67e8728e8bab6a6788f975bcc29e9a637261babd7001253ea0d0f9e92d479e4e601194c0b86b30085845de86dfbcde154c0bcbf0d94e917a797bb8e08d7c4a99c1b105c6fac28e5ed8e5b0c91e6e9db0e28a19c6bbe07ab716fa3c7c90a6425dc418653e2deaf2bc8194a0463d887bd4a1842562a25d6348b87172c5c5d51a0d461022670628564de86a941b705d6df36fa0563a61ffadea5525517d931b8650b9464508f8c1aa9c006c4109c82c95b587705814b881b28de63fa2b4e28a80aa526f01be11529170942c35def63402528d2baf7091c20bbd0eb0324356e0bfca93e199f74d4cd92438961f9f104208556e17739131a6d6c492be0fc1173a6f2d5eceb8c2ed7a6b01e04ceda63ba818bd2ceb3d81bbef5fc5e01be133868cc32a4ec600f3b81eb0bc24e0a35603a43bba64c1ebc380abd7a23538f5b4cd71876cfb9d799861cbf588c474fa48b5cc587553ba1f3e2963af8cdfe92ad36352a6b1413d1091af5ed9e09aeeefa8feb0a847df6fd4f107fd805cfef1e0f30137b04d87c09923b0f5eb9da2c24638153a216a80a9f95faa64032968a2496f1681809221d892eaec1b44bd85a721ef1ca8b4c7b8abbbb763636f297ec181cf8ad7a20776e0a1c34ad27112962ec576e29fd93a299720ea290a623185b03e354ecbd82bad6d57cb872a9a243f72f7cf451fc2abf45dd4fb34e9e82a5e7987bce061992d6979a49ccf9457f1397bfd3b0f1c73a84b03d6f3312b8e4837f6eaa838a8bd4c106db939aace17567cb1e75f8cef98551b08afe49cce891571f0f58fe0c901dc876604915b1319dfec0127007e70b70e886619b32a84ef5f5279422e7fd880f3f545735d8a240a93a7e21c831574c65bc3770ca1cc52ffc36a880d42a4450f34355f0623dba23a0c20796386f597ef5d9d8cc81c2c41efd8f8508ef583760d3e35d12111ae7adb52538ef58ac32718b72b9cf596e4b1554831e36cabff42bf7fd42bf173813c55fc73e088b7117779f63c80b6d75e69443f5501db14af7c27b043e6fbf6d1c9b17331a49eb4a98a87ff7424c7237bd6d8aed1b120dc7c94c06654e1e1ba9e08cc56db3a6ae5b5fe588ae5813e10ecd57452b7b70fa4b816dd908cef4f120de99a53a155bc9fc0ca8e5e43173e0797a06d05de7d16561e2011955ef756bbd9d4beb03aecce017301b4a570039cb124cacf9c3a835113d93e43230342be2158d046d310b4013eefcd14271e4518042631b361d4208834dee61be31fae2aa0f4ba305b99d2eba8c326cec53380b483a372998a9ccb8da1a96c5fa9a5e8f5f7d2b2c9f254f9288bab0665d57779b0181bf6c0b48709dbd7ac98763c27f7bccaa560bc735e1e8cf229436e02a6c226d8f1f14003d2107dca78388c8c05a7b514ecf357d089bb1a455eda4d98d4560b0987d1feceb8ec1468769f61513b2897c819884ce63571459ae601313a5dfbb6f7a8be3dec1db85a7fba479c4018c619d3db9616a7ec8c88f9c9799518d379c1f26a8420569c970bd0126d1d64e4654d93a228d9511bf32dbbe7034964e5eaa6a4e5ad096fd87cd728dd7adfb4a4903c7d51bc023db711a6e7dabae3d85f33c9c0e9cc37ce679334dd831bc2eff6528d4d46e3495e34a75f039a8d68c3b9d68d4741abca7fbbde2fba7e3efcc7e5f0ece864ea85a98241613c9cfabe8ec82c18bb7f018afcf6f81c6262b33aada317ac487a5dc288484694a41cc8516c83b7fb9b76ef626f747091e4eb7f4470b4a44a29a48581da8b3545adffb4a1256ec00596e0f453fa5a3f9e883388f44165da739c4d854c036eeaef879249a20c00ade3944f7986abbb16fadcfa45904980393dd7da16fa00da2c6bbe9eead1730847f992fe0fbe573c39ee145eabdf90732926fb43d15f4b4839966a2712d9aa96f3ebcccaa16ceca915dcc2d6a5d60e1380b71b953f3546fd22090520382f6973503eb4b7502b57954badac13829c5664bec0920ecc1c6559196a0fb3b5c46d1e4934a32194e1ad222a7f2a896a15c57f0a43a121a2d1f9112ae57c09403635912ae199958cc397c5c028a2b2906251e8369fa71e10a707d91176c5911183bcac5e2da4906e019e45430987cbff1204c52afad7ab2d25440ffe4c7334069f06fc6199d6cba95b5e9da773846a69e6be780f4e200ab13475d0f4de57cb4839883e05303c6d42c7cc0be30b116ecdcb3b24d409d1003462f0c687b246e04053e65409e3afc382df527311e87b0b9afae06fd4806bba88cf9f4c3998012da3bd1a3fa009d724055e40a6d1f76704e5b471f83ab655e916a4e7e0ffcf8e03338baa397a136d9bc8502ee9878101c90fc3d00e4e207ec60dc0acb4a6a6a1dee8b9809ac142a5088c55e0d8436ab366b3ab8ffbd8fea1f343bb5cc840b1c012646c31650317b621770a36cc1b5f2a1d7f4abfc231af2e541dfc1d041f84624d549b768c5d7184624e6f79ebc04f24b2c3350dab29049afc851b1c0ad00d74cc5c9ab135ff727ac7e8e9d8e4d1cf6a2a9d3be268d134b573a9fd13c1f446f1a245c801812a9e6ad47c8302ce91c25afa49f718350bc95a90d1002e14b1f4e3711ef6036e22705d5014f6af6ba6689864931f387150ca3eceaa47a638cad05762f461705b1d7132c499628419e25f130bf55b38df2414287e412da465722672518cef73a75785dc01fc5e63a708b888b8f6477cd81660afc349ae42138f0992094725fabdb9bfd4d6086321e559627d7393f9412f4e828201286678d11a2e7fd73c5c8a0a93b3185666fc3dccaa1ca8929491ba2e2cfb9687b98223e52b26a489776139d67102c6d62fb50a029ce4e221c68e9db03342aab1347d290eeabf9430a5174633a5156cb68d804d1bda731653dfbec0d7803786be4af3b053da6ecd72913cd129773342f20f9dc09ac9a81e29f609a5fac5a7ba00ebd237dba2f9e65977109ceaca7c093e917261ce656a96ea3c87d198253f09f9ff0da09537675e4f371028047cbf0fe2acccdf745a2f23c920e85c0653447ba04c282ac8ea0b70f4ea818bf810c8a98a8d5cf7985db6c98c3708b3a4b564b27cd3adccca1ccacdff964d6c307ae2fe4b42359aa04dd018363afeed1a7af18b9208be537812656fc21fcea4fc0cac1029672fec044b5173672eabef6def8af1e6a5ced34978906b19edf1ab7ad38449d43b2d2274ca9103f520b4d94ecdf1a18cd0b2be01c22f499d38c658c7cb9c90d5215ea7fdf4057a14c874c37f325031043c15497570e862025887211b94981f482ad1355d40d66b10aeb4d0502ee3743d210886fa8fc6cf2d4186908f0081a86abae585e146139c72716c50f1cde75b5be71841c4c4bfd9cf32549ef6178476ad3e6d700800787b224d1a8d22c69c6711ad056fbfcce19d9d3f2a415a3cb438a41c3c4b438926d1dcc61d6b4c910cfb1a892bec2a83a4d77746561dfc52d37b6850c24631f28727bc6ddf135ae1b8670237c7e7218269b4b3db64878f3a139b2b6c940de0d37da6718e1f98f91dda561b19063fed2d587217c6096557ab47a5814aae1cd27cb4a44b91a098fdc88bc9820adf0091ff6c0a518b1ee81df8f50876159b9c2c4dd0a45a39a38bb4d368736356211ecdf0089b71f756bc10642dcfcdffc1421c26a43e337b5e898a01e05a1dcd78af270f8bbc40f4ec3ede61b5ab90a3f708a4876fc54ce4dffbd7dd7239df3f3e6b2d6b0bd64cdac77ad0f708c41185188a904aba7fcabc5cd6bb05cd6fda84e745828124390f9207c69c6cce61a2bfbda3921632f957088e1b8442c959c70484de343a719827b4a7f2328b25268205a2a293a393c02b9c9552ab195b1c493bd1f70ce30b2b4e577e924d483e59317d09f15f5211b9ae745bd25677ecff2332a4d23e4c257e5924525f52bcc359a2232a7146435e8a906bd89e3b0782dd8ca8eab495ec242c2babd1cb70febb73922cadb93508b84bd416e32fff2b50958f73dfa3dbaeb387f7da854b601b7925820a54fdb4965fce575685f860b406d1358482e011c7f963300923fe1dc854a082fa2687802d2cb06bc43a874b1f0006476b2922b900a99b5964e8115cf5da2a28b879c717fccefcfb05055664e8c3dab546157a1deaabeb8dd7735234ca013ec7f6f2556b08f3cf69b0610fe16f83cee08dcd3e7a97338ca7e69a081ee67acade319e0847e2ae68af02d6fbe51b2f1e5c491cae01395092d393050012c3386763bf14bcc0e2dc7a0b3dd67c89ddb699defba512229680c9ebf2ae7243a64aac79dfe072277827769a3cf7ae9ef632d4d8e062059f52d5b6f48a18dec29849996731334bc613de6a7c8e4412d70bc0039c99d8188c71fdef72bb8efe12f1c3c61c9dd97623a5f420a0b7f8d159fba77c9839fed2eb5e91e36f5a5ebc83319e26bc2f017583dbf28493b3db7a43424b750c4b364247e86bd4bcaa3e7efdad9ccf72a7bd51b28e7aa9edd5c1e3c668ae03928d4cda76a6c4e67496870cf90789f328881c79c493b6479423749742837776d31eeba8afee510601b7e94175fe38cc1f8134f7a4758b5c31256e8678fc18b06639c6936320b9be29b4faac94fac22e6f98ac7a8a147c1d573313641f1ef503e2925b8c93cac88644071a155876510a704267fdad6e9230630290a72d1288a1e6c20c450600b277bfcb0bb0aa3940ba297de683ae871273cf4e89ead5cf3b3b9c9c36de72697f020dc287045edee1410b1ac702f71f72576fca09915bb4646f178279870f5f82b2312bfc689e6b7b4ed250236af8e7a7e9029e6ca191f32526e07c8d77bbf1b23ae72cdc988d9a4882ff20979f622871ee34949390d0b259b6199265e050a25c779bb9d6caec50eab3ad778dd1b347e0ba5ce8682b6f1b40a430844d573ad8173ca60736da55eb260d9adf3d03805bb18490712060603a0f8af50790423bac29e6875f160572d7e29b203c9b8f1419d0350be7b38664fac03c438b62168c4482836a80f8d1705cceafdaafc1d795e24cd98957341a7851bc66b4a0a83776be0e65901018f6ceca1fcb4890882d893ef353c0365c3ac918382bd905ef2200205ad3f196a6c8e237ccb98de009aba5c64e8aac769f0b4b47198bec97fe3219e3aeb0142a901f137e277e06de5fadf3a31bd4947c8c36461cac4de3b0a49ce015f97be3ef3d1b23d2b0ff8ccab93df789ccd3b76c292452e1a4e8a2ee9fc0d5855fed7b9529fa80cda40919f1a31d07d14f70d2a9f8f8f59ac3744e0dccf2599278f84214f169274353cfbbf7ccdf400826eceb43f78094fa553704eb12fec781814636389e361e6106dcb27d10cf2bb0192d1f6a05f09107019a0bc040f66bbe6022a13c2c4d405881d82d00ff2a09a4b64ec413ebd2076335ce8d9e67d5134f5b0eea4aee66c2e0a35e0688ab3264cd46cee3e4254076d4635eb979846b29d02e31711e7374d6911380e0c86aeffa8b68fcc62762237196e8a737b4a5d4ad788ac5bddbae79282a3b94592a6e7833638e4521a0063e3a6f5f799a4094b04090ad661bce466f2b54bfe788ade743ae96bc1de3df161e8aa959efb2c3f6675de616d7a6c9a600809febc2cdf8860186292160939ac71c2b57137cdcd7010dbcc986ed070d3b1b132c9709f7e53e8e370ae5609cb76d87412fe584e72fdf271ba208aab276eeeecacf3af5060bd8d373b538375f1c08da705225217e03e545014f94322133e3e6fa4403bdfc3870e85e94439c2e0886f8ead0f07e238cd85e5ec7c8dfa90f8e91233395689fa4730b5ebf3c3ba953cc7084ac5f30aae45741d598c41f6e3e300c8603ab2fb4a19773299fcda3adbc4a18b4edd6454c5584fd1a56ab93813cc26bf9a647314d29c87504558eaef7ce59e4a3a1391db5624f089fa7cfeaa67a09d216a3896cf1a504e07d78b24f62abd8d241c2971b1dd373273ef2190c20a6d0960797d83048644f8657068ab01a4008f6423bb080e74b21e48531b6f56c19d5bf08bf45ccc095e7435a8b00535daacd1ba4434467aec5258c1ddfcac3ddb2bf2f61a0d24421784f248b8c53b43d071e9b076d866fbad1583124db4a0daa97e43182f7ea4534b6e0daa2d81d9edb0b68c8bca864ac14f78149acc4f857b3d2863d9fe2c4d00f4197b68b72cdaecea3d4d3b90997b3bdc2c9d676687d8abdc2a33076883f9a99bf518d56244b930586f40cf6efa907bce06ba18bdc1ed7905e513a482fe6eafcf08fe59aa4cd00bf7288a304922cf878d3c8bf9a7efc1036721616e48bdc1a143b4809e772dab8dc462c9deb5d9cbbe7756a1f02536c6598de2da70b80830ca9b063efa2892e3286c810da6bed38310e8bcf5bdd0970feea689b28c318ba87ba6fcfd735a21508080882083d40719848137e702947e8af9ed139cfbd7cf02280122d8e47546d5683ee0642eb61fce5afe656f9a7e75f292cc3d0fa770309c7820cc5492b3e9a7fa41059f606a58e4cedfa80f988ad1eb7bf171bb5902470040a86649900d35fe86636c9420541a5841490943a283373be11ab9ed92d700700ca7343335cc0379db7aca7dace90026ddc9c21af521cecc35435b1593824935843cc68f50da60ed7102d01b61ab1108e9bbd364484976f7734d18f03f249a35b0e8d0836d117bea7c6c7354f5e800fff6bc562dadef8ae92f95bd0fe77ac0b10e8e0bc4a3b05308489aacf0af2721dc108df8129220bef609464b3d915ccfeb996de28d7493d5c93ad3f8233a1d34dcc4053e25521914489137429ef3d5e3e7677e8ca64a1269c2154d372466329e7336370149595b764d2f7d382741ff8dfd4cf72590f779c68cd311dd2076a017e0a15f394a5706a00610fba01e81ce987ebaf547300dfa7947b0090aad869a5ab5a134ab86074af4bbc888d17b8219cd4b6ed8ba296b8c59fcebe984004e546212d8d1a3f4e6ac4fdea6b4c76c5a5db6770b42e8aeffe6f5d4d00f52f26b90843f5881bad6d02f2fcec5f5a2ab23329427cb943f1e3b43b9b0fb441c167ba68c9fa264ff8d9b77c86dedd7088913c3e42744fd82d56e19b62cbf4cb0b2c9000380f1be928b1cc4d89ccb4a37af39c09a9a6cbd1ede1183c27f11adb36cda1f1af5996f0cd468e9e357885fcdabc75d27ef30fe190226b5ec9a22e724cf878670dd73a830510c17f260536573660e730839941ad4cbd5028f46db0dc890bc52bb92a18644f143e011c4572445b8de83ff1654be1a5cab40b8152ad98356887a42273ed0c6dbea4a4f94d007ea4f63d29f48ec03120c185bfc97a89bf8f778090e88b16133530cf55a2144744e4ac158b609326010495d83c71eea5844688528ed1aec0a1b0f089cc86ecfabdc1ba80d71fb127d0f42ef2ea322ed08c5b5f72a0d4922d35518d44ea246c35a4e45462433b53e4435ecddca65bcde86df85884519444cb74ab8bcab88c874246978ef11328f77aa723bce674fa42411fca6a5eeefcfaabaed11c215ee11d6a4c65bec7e8ea9bded38b1a2c0c2230f0cb690274ba5d03d75e3ba063ad01085d490fc3152e5738aa1e09ffaa54c47de5ea2e624b021ef991f19b8756239c2833b620642104e81a4c0a02aa5628b27de1140a30b1a925e47879ed847af20d91196e7ebeea0d77df4b7f82d1e5fd41bfbaed9cfc32f62f7321973042e985e2c9f1e42f68f61572617b35bbb8e2638ea5d24d031489ff776edba2330e42d60015764be50c348e6d351602834de86628ddf48a15df4acc145a6d62dd4ea0a72ccf418843a5549d5a21d6d7072ac92e90ffa159da23b622340cf8e07cde2c97114ef41d49dff72933f0dc8ac7a2209e89333a86a36ec5466331068a7cf9fd5071020713c7c00e16f7cc300a6e63c828fe6da6f8b61ef95a558ba4f4d1012282cd42dcbe0a3edd5eb0792f447c4ac5fd52c11f9a33ddf64455076f93d45dbb6869ba91352915421e9d8434ba137eb2b87198a83d8e6e1f3fb8b6191d52a4e9e849b7c0a291bde157001f20c8f8ff00ff10abba61dfcbfc18e9d03e62f977db21bed555ad92f2f207f480104af64a427ace570e00650702777366156bcbab66629738468192afe911a132002b78544674e45d4e26c83f9a2fa609cd9b29d3221723be44d7331122bb863d173ffd2ce5f0188c6478cae7f8eca53ef47123b02020673e75d4bb0501528bcdb896c8613c5ff7daf067789daf50974855b83b5d7f9f713f64258f47493685bb3d7f119f4e9940dae46d822ebcc4a8cda690000ebd3159fdcca857dc726c01c811cbaae5fb3e566575f08a01a9b9f5740f8e4e220db3c7b7d0cbe70f839f5b712f7fde68721310a38578319900af85862c5a80e978ed1f7e7897035d695fd3dc988e702a1eb5142131f7749b3352bc2c2cfb64772b4fb0771e2f5c5613c66af06c69bb9c7b24f53d73dc60335b31e7a2f6ecaaa68e3d49603c58c883a3c22541c71026386acfdd6f1d34011eaa1cca948e9a07acea0910cb5fca4ff831399fe95914a40b03f12d5408f5eb9331605a491cdb22c3340ba483b18ae424f248ea1890f3e802899ba7f0ea0d3c102540fdefab1d69df6ebbd8474292106a490dc21ad60ae68e4bececce88f1c335bdaa9729bff97d9efa852557cab6d8973b208b82f819b812aa43bef02a7f3b7a8f6ea2e5f93cb238ced2d0b744769399a35b39b867e1c961f6cdf56efec4a18a91cf47fe2c7558cd41e4a5abac197921d3f2e525cec8d49376e72f74da0f29c4caddfdab09a17fe7492ee8903fe79423e43d1448461d07d50fd4f09adf1a8f23cd6cc11320ce51b80542d5a98fc2f0b3f473ec434c0b0fa850f669687a1beeb0abbc404d5bbe010eb5715243a6f759acda1280ca6e0fe18ec6ea8d0be2a2d3894896c05652731031f16a3433cc7f6b2a5c2c5c906bb184bf933201386f34a259040352633609e004fa6292f5032f5d5eba78f8db45939a2ecceeab83595fe020e7adf43fbe18807ce754084e7c50f77cf132640c43a07658959ff220a60c3693b2a18f02a6c5f8110208b9740d16e6a6c4056530dd16e6466786917dd15e3392311dd7ed47bafef1e7c64aa7212015d2af6c90ca05d87474989061f603cfdbacf0ebb8265e757cbeb5d22113cfda0ce383ad4914255bd11d07faec8655107cd1e1100af5c7adfdc578e1dcb6eee9e4ad7d71aa9e364b2c3474cff3b41717fe255ffa4124e2ff71d482baf8eeac0169fd3457199ba375e911996bf043bee1c8b135a2d91a58b41e3d332f58e514bdac9c2d411c1f20ad95c448a088684a19cbc4c0a1c7ec68fe73281b03c1db6409a6a60b485298b700e75a5e5e10324e3ce41588416e61ee6cb8adc7f9168a580bf9df7489dc60264379dcf60e6f3019974604c80246ae64a0dba5eacdaba34881cffdba7186c23767c0b531435e988f8b8c231628a6913a4aec1b83743cd02d357586fcd03b642dd99ae8c89c1d7b738c341a089154eff2f007162f99480c30ccf9fbe3d85fe7a72b3807d117bde9ed8942f0a2055829a5f2533dde10d543cf32b11c7317cd9d0cab53049205a35a174dd1d3941d563a2c675ff6c644177a310c8b4457b7348efb559fd78173c9a26a880a3999b014cee9de3ba6854ab6939c3db0753cbf8634f76b68ebef32c198c6df87ee8326a5449a400423b6939a59a84445c26e382e0b810166f3a2942512a333ebb7abbc62d01323aa578e1db0e2a87d95a06dd47450f4b1b17f05433c83db2692eee9e5a6194c2b71b82c65be1b4a670d1aaabe6fdb4fe09b6d8b05b71b23fffe79a5faf7fe805c8cbdd57e6c10db441eccc3207eeaf89f651ee2cac3e829b875608154ebd4ef66ce45c35094a397bc576e547852ae1801088b60c54d170b9a684a0138ab288080505687fcbcc3448c6a022bebac295d452b18cbb978ad2fe8c6a3c9cb07f7f31b4b5d5b9fdf01625cf4e7430ba2f984c9b11ef1c1d5dc21861a131720813c65b52929f765e2f964c668bd70bb44590bb5d1bf3a2ea9b3051bdeae80a10ce1072aed19854e6302f0a59c3e44e09439811e11a4b6d5fa67ace0da74f5a6804291b874cd52c3f59f31687e96550c17fbfc641bb9a0a4a3190830afeea155850da9c5cd8cf3e637cb406bbee11fd6b9629c85be26ec7f0673013ea151c75c3e9eb269c8b28e22e1c4ae8ad9cafaa3ce0885eace38d5e8a08e4fb73b76f5d2d08691b95f003eaffb52860b2691afd77fa1c90c7fbe237d60924f26fefe53c94a9c5444d842f89e8f0f53fd13dc68b4e25e80e6dfe1b9d609560f833736b731a469b6f74d24807a2cd04955ea8adbee6f3d8ffa1367b761beda6cd2052bea3740a9c6717e54bc667c3cc262e1a3e6825de51e2365b5ce14d4d0d7888e685632d6bccd357a7f5c8e27038b41372d83c3eb21fc32d2b74e1f1eb05670abe24671d14739c446f796f27126a7cf006780f50704f1f8f6d247222af0eaa18fed8ab7cf816dc397c02ca0e79147cda30e5e7c290ebd08070121327166d93284d1ea69d3c60b06de164e18d963f8d913662b8ba9ae74424312e189331be9100751613912ec7923d6e92e277527798c1bf28b7295ed9c1a4676c4267dced78bb0aa892f3ac19c080bdb2b5591478222f421a6747e82c9cea1f22aabb7ae8b655cacf597b9d73d6e45997b2abb4b26808f9f57952ce8b1de3c483ec4c9fbe56682a1a6fa8a9093614a97d3620125e1aa7c944bfbf898b69a6534cf5b6aaaf23a5f9a3342084db74260eb49b6ea73ecfd1541a568fd892578e1eae8b6c4352540a317ed17f415323bd1596f55390e963ee091555975384005cb3f8aeee1d6d6555fa0bd875e4f12428e6e46a19af68d1adfa207b2cf1e77eb5bc94f0b3ee468123eef03c1802311c8a6fa9c453a489940413ae636e8d84207e720acbbc05d03e92bccea3ccf6b07bde5ed952905dd540040ad274012b159090ae604706857680554ed4241a9735b9f04186d30f35c07ed612185af42561aa49064ea43dee99bb127998ea34f03de18dc0528f7a65dfcab21a4488b36ef6b9fd76ecde417129cd84ae6082d22295aaa5f1a41d2b2c50a53aaa88f1781083d0b4da09be1e232002638fc415d2622eb9aa7e930b06ee57a366a6b1ef8708f29ac35c561dbe626621f8b1b42c8772374f611085608e9a2be93623386ca5ce382b196f7210f2894c16937ed81a2d3b2183083fcf375dd19dff68152b6fcbee34b4d59b6e327d6572d32232a8c7f30cc2876e913924eb8d355642a405cb16df61f8df61949760e6a8af4bc1986d7f2d245c0d8c5e83311c0a92cf8d437c6268f4d9d2b01ea15005675523e76edc60d78fcc4010da50541df2866c1122bf2ca69b29505cf1d5b5631d7a2ac297de2fcc34d56c1c3f09d0304d42f7d2e21ec43b190854aacc0b41f1baae5604dd76b4e524a52dcdd71201a21926aab3bd0912328af665b6c2e0f0d8cf382e00912905d555ef438c51b22d851714246c459b4f6cd75bb725ce210a8aef23e886f5dd2cb82a85503c3ff7388b8a1734f1d978a6dcfc4ca4a22fbc92c70b308d9acd003af68495f19fe17cd7b3b1b8503f9aef2b883b0d228ff795dfaacffceaede37b103c317f451a7ccc7a072fb41427c32bc1fb453c3bbb50f815d20e0bbe678b29917f067a74567d8acec378665e559833aef0f64bb1cc2337c5946b252821fc4e65539910f55d511af86ee3b15eac9ee74f38fc45dd1ce157d6913c490223463c2aec66d24b3c82aa9e17511ec26730d3853b308fefdcef698f6ee4d99b2b340172808347c4dcd08d3e62db6b34b4ef99dcd43643ff9fce81fee9870860d9bf5f0a3c2f0a16ec173a0fbb27f121f652cc7a8f33af7b1aaf81d30f136abc648c995709c1b56ce663354b61b71df1b171bea1251d3fc70b737876b782b8c1e0b60b151df2630343b6fc6bc450819566a187c3a8ca69c261e9c8222166ab42ce01c2858f87c1de79c47c43c2f544effb2a888a4abb1a86d4db140b2a95b9294ce6ca618bcd2a4530a05d2a8147dafc5d3ef7a1fb7d324842dc824022894b8110cc0fcf67c233914f4025d5c9e1308a1a2260685c1b46d2d244632b322e17acf2d1e102b33cf01609377896bd7bad72ab125d164dab1ca9084ea4f8c5c720b13702ddec4b7a5861fbc719211caa1327b48cab52ffdd6adcf5b5714d71edccae19e9f7514863610861bd672f4aa15f4c3e3c36b5a580ff3824ca5c0956455b24f08b0d34ba07a23e62917b11244d32cd441e4f97487ff7a54ecceed384528f137c68cfe837ba930d636788f040449801fd6be28dae23088b03e800d208cfa1b618c3bc84cb4695f4cbd4b9ac77903a55f4e66191b701fece6edcd1ea8690d356737669923b61c31951888ba67b9848b203d4bce66cca70e69ae0e048273917d221671139a8fe414d90de332342bed70a4dad6a4bffb3ea8047c3cec0bc09afe84bd0fcbd3a3e94951d1d02803a4dd660fe720338dc6b8c8984766e099b29527074864bfedd826cf7b69cda1fff56986b12cbee70f8144d783497a2230299090faacc8aa9b675e1a6c104664b2054b4c61f29dfff529e4bb5502d7b0ab36bd82323f5dfa93f601709d8699c54ae1faec33cfe838777db62f4907d56ed5c8a04e325ee93f69716c32ec9171147088e0e37d981e133405b88e3367a29965b2e6f85580d6441b37cd34c42a7a29936c1a21c0fafce7fb3c1115f24b970d7a59c03da17fa0634bd9fd65b84db5ab96b6efa47cca9b1087952278d8fc48d1190a42aec2d6adfad6838447491e9dae809a2298de2c8fea09842eb88178b29259e5f758346dc948307c08ef01a4d38011a63296cc38c486c743f848fddd89436861471dd85866fb04cc4836b19b07017e6355d1ee2f214f16b0023b1634da6703edc5d1cc4f5228d2c02c060580e79f74284b2fbf19ad5527f0543a1ec82d5686e5ae825bbcc1ba25617a8abe72cca8baaeaf28f85488f6cee06be262e6715c3ac0a3dd16162cd0c729b7581b29d966fe69f206b353491bc81c46db5970a42b1bf8210e0657c24a09b7b4ee7f8ddc44b4ccd7009af9b04b83eae11282dce52fa6ec79f1e081185bf5f5809d628d03f4f35fae755f117225f51de12bbe7a0c8bca035d7f99bd6988017945a0d0cee25cbf31f80586129d9e1dd3ebc2d45522ab9c76d2ea3b8b6fc14132123c6808176533ca16a4dd506239ef776f59151dc002fbc3f80966a005dd8bf356e2c5723191d806be830d6264c669f0b1659ed3a84812ba822d44cb41badfc7421ea27a70f576ac8adab7f271275b4a312fa6da58375de60a70148f00b47dcd529efb3b0e94ffb8daa8edb47ce8703118d634cb40751cb2c83e2e4d8411d02a9cb523bb53a7f2336684fb9c58cb3999749dc3c1068723d372cae51dc0b4d2ffb2e38c8fa24791041c057de3524c86e1f6087918410d1005300b7353f5f56bf46031e8455ee57526bbbebb51b7eeaaed159a7399dd576076db01c054a3db256b3d12897d6cc2a2dae0b9e8c7568a120cd494c914a885741139f8e4c937414907a1b33b1be7f1c1a6d29cef5662d4a4605c6d69b4dbdd67d2c2431543eea2a11c1dc63da5c76ffaa06659f1cce998a99502c498b3bd539cb2e62c6b62dd00762d4b5f450c987f4fa145d1d9736af7f90aed806ef0285202341a46df477bd897699a456bf6e81c8bea16326f4021975eaf0715256799638fa7910862f27fe3f8e933359f38999fe7f75f9e65de993afcbfd20b17201c796640297efe8fffd4ff2d664cd8a13c3bf3ef1ff8d4e26cc8f89392b40a360c78a76e65114beff6791786d525dc0c88e1a6682968eb611d5d3f15d6d074b8bfd77c8993647111108789c504e2d8f301d5b7de0e3cae4f8a08451aae9c79dea88128cddcc52ae19a3a75965d57b28836b305aaef30f89276911d3a443f878f02cc577db0e306c7ac32ab361625c854239d2eb77c72cb64aeb29e91d099a02fac105bddd65c04c61b896b962719b528e730e37412dc164555ce1b49102d5a5cb3ec316575d3c7eb44a7547c99ccbf4f600b0d28a4c87af69b757f297d15597af55bef0b7295f21bdc1513eb121f28a878de808c7791859a272c3390df79ad532435bcaf7076c6acd7e1a5e86cb59e71ecbf86047c8cbd21c0e44133b95031f314b1de10dc31526fd96e7d421d5d25b91e9ae8beca56fb53ad22bd92f6448a5d09d1afbbea47f490bdeb7cb34b9587f8eabf511958fd4979f8d0d52d7fc0c4bfc530c3563f10f01f1f68c627a92fe302c396c2a12aebb736e6b976986ffbf2700c6ae10d54046ce442c4d9727c337752f6c3b19058058fc9f51964726cfa01d7eaddf18b9f88b819007c1541417566a71bce608a90856d97a0438c3366be5e42a1195d1708806c1a34e2ac3659c1b5d55f84af68fef52bdc6696f3ebf79558f9c97682bf1a28416d8bc6ecb788917a6c8709df3edb7ac79d88fd3dbb2aa135abc2f0eadf4a912f2f1fce8329b23bff693147ef914123cc7350ab498d474fdbf9f3e041d45edf2ef7b47c5bdf6b5624ca990d078fb81ca06ffe2d5f968e82bdf58d47221d956f8dcb3cbd90e4ac04b7d37ebddd11fc6cd7c56f680ed1a803c92f422a8235223477feecb165e9466435fbf2f95e63575804b302358e471dd5d61f794e450b71decc1e5db8e2dd7b9ad71b15c2ab057966e6906023295ad804f7d27469ee918e4367da1a6cb62a818d733200c8060c5bfd15823fe5dc40cf0aba0637bddd752d6a0872e6669901ad1359e2bcab0e718ec49ee0e9d5b8948caf726348af52244d75fe30fc3ed73ff3963b6f13810140ca2bf70306a2741299418bd37ffb9693d60bec1b1a924b3ae347350ef097aa7da5220cc262af8d1a4afe7cee39c0192e157adcf675d5e9e23f94a34fe8ec223f9e5f13938137cb3c68a2a60ee64a61d88ada19fc89cf24305d35c7e55a154401f744b9d77fcaaeedcf73ef0ee1cd1f1d37c06f3525ac67b921dd59f04a5a45a7183ed42d01955af6b1d00d6086c0e02c19f65a426160c8fda05e2464d0de60f569b8ce1154a7abbd0025416c55572dee747a83b978f321e261ca94882f091744f40d7a287b28a98b1fc8115633dd7fe401c71fa2ff35936c0a3d624dd042ca6896e6d7026581ec5554877d9452ad3b7389db88765dc4c7730a987ef0dc17bfb6038772743ee784568dc12478ad446d008bde0913a6ddfe605aa68882f9efc5d8e35f0764d1b45ac658d88c260640c42e80a1a772b8d169d79b74c74aae5c08214b6684a62480d0ccfb536c5382e22c5e3015f777b1449edb1735b9775b59e10d4a18160f1af07a0e9370e23681ca1617f8b94ee52552191cc73921bc621ecf749d45d7dfc7d47940ef8a32ce83c3f64fa9d9c789445287005050dab110f603dcd1a447002a81a50e29e13f8e5489ad2ddf4b1f38e810bebb875b953ab1d2b64fd655a3d8329c10d2900cbed42ad4aee6872eb5021eb335939ec48aa2e6d601ae7f475a1569ea37cb823f2b8579da48f339b89f593e3b7ead55214e280bc76960b36ca60f399c1044f84c2cfd88d7e7a8c67bc3a20ed8a7a427a33edf9c7aa6f206a154d1dda60947ccf755c26af3492ec7b59588cc3fa58e2666747ed4900e70dd252256b020e15d3fd91b584623558e9e215d7e6e5cbe4946eedd0882ddaf817cbeeae23895baa55fcd2aca79d577017626190d102d782d08c8626f937a5b81988c1309cf5748029c87664a54005d83ceb76e69b06bd6d10f9e1bee7719b9885c731a75a1f1b45efea66e66be91dc4fd057d1463c141bafec24e50a72c146d7e5530937f9ff12144f98524a08c1f4bd7a760fe24d32993efba1be551cd8b79ca59c09dbc4f4feffd707a0039b4ab93cff2449ad8432a23c8ff6a49a29c79eedef658d0fde3c11ffd81c4b406bf87821812cf622d63b54c059736e854fe9f6218b93cb800f82a66c7252551a2fcc8bce411b015026a951e6cc0a973f3eb991c4bb8196093afbcbbdc5ed063afeb1695079571d4bf5dc0f575c56a055ca840e7742aec433762f66de0c315334351bcc61598562cf7d45fdc29c00db4999e17a663c8acfeeadc87749ca9dbf3e4f0b3f11cae36a8a75e44cd92fa05ed0ccf33af1645481c2a5d02119a55781e1b2c1872fbeac6bd91eafa5afedb6fdc3627b41c8b3351b2e986a81978ce8591e2bb1720e8eb85a74395687a13294300a1c91b4203421e2d1f3bc98d6a678721b06b265c2f9820e15d2f97350f1c4b15cae5248981aa5d0fd853b52e23358763a5e8b85198604ba050e626cf2d85086713657962348e4cf23b98a5a50e8418f0a7b17bad231443688b25c6461425738cc4cff8b602e63a2d1ed9eda9849b2a9a1d1c1649e4eadb1853e355202a645f51fdc503aa42d4288b3474574b2ee62e06ea006f2eb1f4665698b0c41b48a76c7324884f03a43b44c99c21f679b988ebef73416e647e4dc0160abd1c5fa776e637253f3a256afd5e3edd911ecc381a5c5c880542e6a0915436cf21ca2b6faaaada8897cb558e3fb8c597c9574c7786dad5fec4e3f8a6c9a5a252a38cb124c91338bc2d24f5b6f7c575d7b0d46e69074c22544bf8059b6238b1a0f4d33a61ab2e5b524ba66e78863bea3b7ec6a3f8e7f7ad2aa24aebdc7e8d72a236b9711d1dfe3e47605a507cff02c8d13288d0d83b14044df0b95b4eb555ef143792f6676f46a4fb27d0bbf16a49aa76bd44417422d10c70dad5a5233332eaf8b33e82a99c1823995a7573e1630c1a442cb7599a2bf9caf8d6ae07d90c0717bd2fd8740899f403edfedc3e965c09a08506387e322591e9350bf186d2ec4a69e57b43a1b4a59048609b99362a9d988d81b3f623438adba4fc0ef5b65655457d946d98995a0c97ba01d895b44d60a54ca04ed885b17df51caf2b145a4f4d9db48e46d7b4f490dee50ed59634660e7a6d4c086d8eb460f25463f067a23255b83cbb957a6185d9710ea0f6825750523fb30d3cc0c3f3ca160ca3dc11d2637a0b0036b8b7aa061bd63723675570705c32b3405c0491ed0f286758ce09a3bb27b0ec5b37dcf7b64fd50c42b5758a0e99664a31b44b3712ca89add3c0e2d9b03b893eca42d871e344d2c6177f8a59235179679903c93cf81d162ec9c3d41551abe80721e155b488d8366dda796bc77907f3350afa3ebf468b41dbf0b1e781180112d8918539bffade40e6098def4d1a72c69c5674898cf868708f8b84f25d6ce68fc2a49a08b6657cfca714d6695da620d46b2497cf1705b7fd104ff05f061ae04b473b355e9e8329e36fc66e09f7a1dc9a05cf81cb172a2df1d664a01407e1ccc1162378ffa5ba20ed01f4ed9957f43f8f818b181ec9d0a60be68d3ea6fcb236ee2f5f2f9e840e591b28ad62dc1ddc97eafbbb28fa8f2bca56a26ee561b3deb5b29a7f5e57400e8f7ecd0a944d4cfb756e1aa18412ee61edafcb0e10a0f7b15033bde0a5b2e945c4e442c4b47ba3ba50af3a85090cb43a59a95df4e8f9872ca368f75d45ed7fe3c9cffd8f150bf5b96346348eef2654d5ca25590e5b5e68a617bde291f4fe4d4b7de642ee4f0734090417365d26e9e3892bdf9d414468ceb58ffe4b49b0a035052a26954b4b87ad53251302b0c3b2592e2c4b37176c3bacb9582ed3fd6bd4a237902b327554130a04723896e9aeac47c7ee697b16cda952d2e50bf7288774c3fe12674248337ccf17847c9d89e4fc12ad47d2bd0e53427594c0195d5dd4dc820c6c01f6d017fa091a67e4ba55dfafe804fb3ded8121b41d4ef06186d34a377752ad88928afd148008615f140748a4584f120f61ad22ba1cde9dab40abab5ea7547e86bea983466979ec37ab74435ef333d212470387b73c719de83adb15e13b7a28c71861e9f86c283198a684fbad5ae884ea69693e603112beb81b0d9560ce61164c5164ba40317d391df57ed9c99e0c856ad31cb6f5ab53da4235d7601ff75c1f9adb28dccd86c7ac29489c758d4dc582a27f055544b6dd24e25dc8fa10d90d9a4559385fd8a428c00f2582296851bfba398b7e521a321b6b75fc4b298f4a29910fc4d7caf9a61de2b3611c1037414dc54d22a53a0d370d6973b92a96f73e85833d688df4b553fe602428b007056c62ca24e254a12096f69ecfa03909175c658a67de9e869bea2d184c3ff57dc71418f0a9f7d803c1c5405fc9c2a0ca8f21a00b37865248e91531e1dac916db68ecff03d3fc0b923748b07c565ff659ed6189a349dab52352b5683b04bdd388ec3b88423f0735370f6945310ceca2e6f439abcce22afde8e20c32a1192c0cfa152b47feefbeaaf1fa69c7460f4e8e1f067672ca44d47b90b4baa96155ccf8048ed21f5fee956d3bb3158c98114644c06642f630a351c81e9a098e2e3fdc18d775a5c50bd650a656fee81ef6b4eb1007b4e2f65b33d7240e84ef37297339bc4681f6ad4b719a53695f2168812598835e4bbae249dbd3c112a87861ac66f1d12fc92096e5bf29534a2037ada7c4a204a0d115c853d6742a71ca1a1d93168d8e582c6c0301607d0a7149bf875ce03269c346b8e6926287a0f16a5f8d8548f3d9bad248f518e5bc2134bd0afe98661472c87a9ab6ccb1266d7443d60e3a4d352894cd6a2630fb6771ab6860e30a068cd194e15919855df75b2c366ab3ba6d2552ad197f424b55b5ec5b139fd84d24ab51656414f4d1651949be3d17b0aa2c63e1ae6fcf0b0ac44d7b798936e42b8ca0cdcbf574c2112465e669d7ea18673d04901f8a13001a3a61c5566b5d007a43d4054bc6fa0439a1d18ad3e5443d85702f36937e290b3a2bb719a11c61ed566387f5a3eb4bb14c9adb80fe91f4d71ab36585a6fbe06ffd2e6ea5bf6742fc4979342670e27bcf626585e5cc2d2e25669e6d5930444f66aa61c6e287452d2d38e147564a43b49534661fa00e88a051ea55b77a8d88310c0a23b4d69629e9abfcfd9fbce08744e19f5673efdcd3558108c3ed51bbe528d3bda0ac9959275488e5a18fa13ccd91fe3a30d46e252f9142fc9d6cc14d997e2020eadbca480277366d39142203aa3c1beebe1213ca0256592e853a4573a45acf4fa95a26cbfdf79017b928c6e72736ffcfaf3966f1bc779b257a3b2fa28a851bc509f5d8c4120403608508c4e07b44c091618ca9768a6800914b93f9843f43389a6ec7054a068c5711aa11e6ace08bb8710efbe4a3ea8475191c803e4245a076d4117a81b4cc9c739f364015f7e1f23cfd7a1bf6982866b43b56a2083e9e2ef61377cf9e3de5fdf88e24d91b3083444f35c53247566efd5483376a6e175c91d2286b6eb5a70160a10b4b0fa135a79e68f2e10594ff92123b14fdd15180c3f74d15968c3bfcf82af416855bf8d5c86b20cdba8d02a6e4e2fc8e87fd5a26149376cb07cf1561e96f99d9e0880ec94f10cf0cd6d5529cac3761e4b98d56629d67d240d0c5b3abaee252af9067c97c64bb628be36e5dca224e9541966df8941975500f9ead88ac2d1b8caf20fff0ba720bc87c548540661a2e3f7f2c5a149deb0f17a8749ecdaa605510556f658140a673382eb4e94c7fcf81bbf46be8cf151007d8b426a2cca9bfa5070d12c589c53d091d89142fb1f27b05dedfd7646f81d4b09b36de684e5898ed1fff6509c54a249cb49132994247cf565cd99328779da50ee7f7c4c71645758e707ce5d055417cb926bf7385809b861af69bbf9cec927d99a397d9b99d2a1da1f6290df9849af946873504d94ee58cd63fddbaf7c5dabf9ba60c28ca4e87b546f3ead994ae88e99da851cd5aaf65409733ad55ce2691057edb10fbd4b264237b9f4f96b0c4da9f24a9e2e5e3cfed0a8697cdc1e1b91840768ef50429fdb8624ab0bf880a59735150495a6a63c38bfced425d97ee0cf46fc8c0def1008126de9faa0332398a099f7811b272245e0603b5c881ba9e6e0fe59d93480382aaa9b0c1ce6c964295f02c8a0d9e7f80dc6b5e09abefbbced1ce64932409a1a9a3a40fcf2e46ad19c2d606da4073b239a3f8644ccd917bfc76617770dee45d66333d29c845b19d566ac691a14eb90a6e608a75a8e6ce84b755e79f8dcd05a57a9a399de5db115d8444399dc3ada00839bc45007dc3a743238cbbb88c9e468a81ffc740740551812753cc334bdec415d24a66a730eca396a3d547f2789e1aa9c36e3090224f0de00c29b37608e41c4c8f927f8d1726a0df5440c2acaf90ebe0b0e9fd73a86b1003194d6490c32684f66e4bb13d68cb3c176288b64c48ef5ffd917fb1e27e845d79209d36fdb6faa3eda5a61a125a19a61d04978b009b52ce4d19e12c8d5cef6162ee714e10a2c61fd6193abee1497077a670a39fcacf4fa800838e33ca8aad7c581690827303c5297c7e7548a4a65b4a7f080966ada75e279b9c6807059e3ee11f0973081a4b914ca220759ecbab5000494691a997ec03ef2b329f196a20bf7bfd308a12a6e661ac44638ba8fd14508c9b906ac735ff25d6abb263f514c4566378a8bc4063449c6515d546eeac6b526b34236f2c4165e5c613875fa76533bc8fad046d0452a151d0c21a0ba1c3cd06990df9c52289baa74b6a2ce0dc717b75ae7042ffb48c7caa7a3715a9186c1019aefe76e77c9f5d91675894043a075280b93161c1546c4e0449f71abe0c4962478cceb20f313ca273b7fa06022736b2be0fcc8d7631a646d9ce38614b293f9bf545dd531c5df85dcdd65f61b433463ffd2df848d20e1e4840110a511dbf17a0da2523a029b6f9888c580aa1e068222e8e9dddbf12c9711235bba565d38b0458acb1e2cc550f584d7cb20773f2bde0d48d31abfe784c6882f79bc52b9b7cded3270baf743e79b69a5f3ba98a626616956a6a197f8388a7b4c3dae85856572c1ea5091977201e8bcb5f854f634bc739da3a08a68bd4e3684ca7531b85a9535b53b0462614c976b2c26ba0ce0461e0e75eaeb25fbd208252434dcad22ec8850c9183bd3d60597b2711fd592c1025df1199281a43eb3c0ee1a3e7bf54ffa5a0a405751b5833a4ac6ee3b08d224efc4fdb982a9b5ffdf7ed03b464cc7f5a2721b34433c245efa2edd5e859de8dc85f8e65750513267557a0f572b89885cbb51db97e4e2d386e81d4b788f062bb6bb73fb8093033048ec4dcc22b8f2a7d588a8ea09806ddf102c0f56e05a0539aa09cb0c45fa2b9ab5a96b192cdc596c81644933ad33e5144b8571553242fa48c9176c96cbd48784b7e2940a5f04faee3f2cd344ca5e5945fb250b634d77eef8a8050285db5b3c1b7d1cf719207302fbf406326dbf3ecf483e04e5c032debf673c7b8791f4b32e2c6610d582ba289f59e1e1bf54e7e4364110e26cbd9eb1dc7841df601011da4ea2245d29f6a862665bc2e354ba4ce96c4cc2586cbd9f71151a1059193fc59767d5d2f85a340ea1dc40be8007600835576bef6c5ccac7379adf1a34a547784b5dd674d3aa225ac5a28496a145a9bd6f1ace277e93a04afb74875bc716fdb2ec7eb7a65ff90db1e62a2cc3ef770d48220cd614ddaf638164afd5735ae52a6ff8ac6b4aed88fef5af4fbc75db1acc961d4295e46cbb474bd29582dcc70c4d7b0ff09df164ec728d07f2ba18768f4a3e46592f20c00e0901ea15400683f6a50f03de67067fe8c6a2c61705d734ada86fdace75c6e1d3cc903c6a89748107aa0b4d884855e24cdcca59e4672bcc1b799c3dec714f6dfb61dd93152b83562b5372dddfb505fe7c510add590c37680962eea66d8d7f0718ba31dce61ff03adf9fd67cd1a5a19eb1c7795bdf4cc91c00a8c133fe6b49254939bbca7550234ef6da54a9fcc771389de472863601a211a222a672cf9904265ce451ba03c5c37e88b5f13aa1fa6629d0794262a281cd3cc84fa6398b5c599afa82bbca4a4bf4db14f38249a443e1e2388589d242c2c1d02d8bb553d9d318ca752153478873b73ec8cd7f33719acd145cae390833d8fb858b2bb3936baaf6a3c92ac6d57e8a26fb3092e41358ef20facd172955ae20419cf58205ac92ade0e9661b0952ef043805cdb57ce528b50af73185f5526a02e99a96be07e593ac8555029f0f4ee42b6d1ff475db716ff25f1049fa0bf83309df70d6c71cca620d6c881cb8703fdda67c45611b6ea5019074f2dbacd5feb29dbe9643f2309f224cae28ba5f411f49741bcd0b8f9dbac490479996050870f9448cfa6a7ec1ee45eeb1fd9b455df9429bddef26bf4663481414eaf0e9eeb797b4bc4281b5a4cb1ba8a25e87630bae732b818f2b0c67c4e8373baa07670ef3910c0815f566fb6c97f12025eccb2ab366f4d51c74b52759003b9de5e2b4ce7d5a8bab475dab437eea57b690700553ac22633231897b3e1dbd530406158410878d9aec9f50345abb1ae39f877bf1134c97d4ae65f47d81e3ce57498ceea76c9094a0f523f5bab49ee0c49d2edbed20d56e636a8616d36ae6f01ad597c70364d332f9597b512ad248d6027bf077fb2b2f1947cace7c8b8f2f606c1cb8e4845cc4ff04a70daffc2578c668b4444f196fa8151c3805dfec9a8130cc33cd554ea57a1c0a10638c352b1a0c5789316fc3f76127cb10cfef883e6d89a00ea28c9ff03de2e9de1a1911532abdde21f92f05bfb2869526197d4f87533812e49400fb572928b137a9bc9c469104dc0d4188e72e28c2ff6cd409e030389352d7c9f20ebd0154906691859fc5840431f5e5268cce72fa586d784b200368585785ea5da10e5f30782ef32c9e2a697c42219119a5913fc87a85119e79db25b1f82ae2fcdcb86881e5aacbcaff17de7c5969659162b832ef197581e6f5e29abe5c8e07d317deb341f4716802251729dc61b319ea0a7fe2b0b04eda9a31e0e541d4120059e73d77c0a2896cb98b8839e31672bb9b7c53c81284cd037eefd130afc424e98119115fdb7835e03d6d37a65110bd2b0e4e8567019db1f05598aa4233795aa217de71cad549b1255c2cd0c7fd5ea27a1b24bbf07b77552b841eb02aca88e15f66926972a879dbbfc64f8c3012d175984d4fce0f8b28d8381a4bd049b3a0a17b0f1a2a698d7388b13c9bc38b388bcd6ee177e4150843a84abf9f0cd28bad9179e344b947ab7368dab6a234fb7c9251c33803d886f126c294af85c3dd3eefb664e19d5f77102320788ec3bcf921a15a58c5f00b2349ff06b699300a01e54b1473f472e7dc7a1b447fa6c376946870404ac2e32c6342bd19d1ed75043553e826fa1c9378654e2d60b950504a1017c99828e8d2f55527690c47c43516eafd6dac0f659562731d258e0ca2c1e02d346187ff9cec7359879d1a7878e53fd90a8b5b1bbc58438d0b4ea2ea1f40434dce1eae9b4be4f56d6422ff7cb58beca6cfd8b9543516ca467a34cf1e52b024d053cbcba759804090e25c409b3d2586feed82344033291705d023d6ba4b761089fd757230985427e7b9b359fe7b2458742764cccc906b734b0c144d9d126e24a218d45d1405af2dee06267a57c965123fabb9e0645c1851d80aeeb8281c2854b6b0983285d14889490baf293662d8c1d28a786e7f046b18d6ff4a7f2c96e26c511bab78c8dfd2374f603aaa9e2865b3054324e079676a689326d39fddf6698e74937276783268778721a6b48e37c35b79a9923a61a9c65b7b58c1ea643e71bb8c62fdf3c147a9e69da0d4168417dd38e7fec9c6dfedf5ff6d5b17935464d4848db7bef2db79452a6940241083b083e08a752e9543a9d4ea7d3e9642a9d4ca6d3974a9fcaa42a954a5f2a9d4aa7d26b5fd23a4dd34aa6130a757a93e953a154a6d3a33e95c9f426d3c954f2f89e4a232ebe784dfcd3e9743a9db8d3e9a49d4a27d3e9f41bc79d4ea7d3e9bbcb3979a7274d2c1e3f7ffb9ecb7727ae642a6d9dc985741a8d4c25ad64fa920b45d1fad868e4f2495686327d3aa73f7de974327db5e44907edd7719b96558cceefd42e460001055d98cb404049003161b59ac786f5d20eca4e60634799c2d90e56c7996530af16d9f8b2cbd1e6176da49e8efc14f63adad38ff5e30f807132ec6a73669e0c7dbdd9e96c9ea32492e5dcc24cd0929c9c1863f1b139e59cf285a67cfa215701fad12b108ac9a79e27435ff9d148e5ff185615d953c58f0fdef954153f20e09d1f78e52de285320622acd91d9b233048ad832f0f5dbe445ed3358641d439fce397e34dd43a3a7a4d7499333f6699da039df4b3dcd910bcf49b6864c378e7641daea473c4d7c51e7bf95f58ebe8eb280ec67725da73ae243e07f24a661fdf560e872fc7edeb16cbc4af3d58fa937da475ab55e363540878e5774048577e4d149b631cd5cadb901507e30329b9f6518f7a8b42b2e3f2d6e5ad8db7bf55ae4e2d5c12a64a4ae0ac47976c1b77392e2f07e38737aefdb0746d16fbcd36330bc7c4b7f60b858017f573a8ab80fde695498485d5914a1c943bdfa82fd2d7564179528927771cfc2ad6e31cc950b27acccba0fda2094e58acc8c1f82e1f96c5c1205e836a81715c3efee6e2f5c580d64dc03e0af5a95c5c54a80c857a140a4552c2da47f565b60952ad094ed8f97aec8565c18a18c7c6c7df6c787db1341827867ed56e02f65d5c3e950d1b2a970f3fbe8d4fe5f20101afcbbb7c3e1c8c2ecfc35d3e151c8c7c2d2abef4cd72519f72f0458a457d884a01f5bd3818031bfe8dd67af40796f181659cd88ef32a593685faf03f04af656d1d274f5ee8f7f4138bdb488f217de49357c27367dd8657da4b96d7a03ebe4c625ac302b9509f3df58171fc462a778befe2ade060fc12bcee58d186579ccb1782a88f352fea0b827a970fa90fd4076943d2771bec55c227590e461b181616f5e9d847bd4b8fbecc322ebf592ee5607c1badfd42219de5d66f17a26bdfc83da2e4864776ae8de1c845bdf5c24805f52e5e0c7d51df5eca4154f4e1f65faeb5f6ed4bef72ec8cf5f8a246f65d505e7590f485dc25bd75d0dfe485a91bce2ca1bde1cc92c3a420cd6385d34ad854b26efce985a890fa70637c94bf780d57964bbb8c319fb7c973e2c09162aecc8cc3fffa53b1f94b9752477e0ca5fbc72f638c5274e9d3ff28b45cfa3014476c1f853ab8069e459a48bf8aaf4b266c283bc651fdf0afaf85dc734f5f7225c6e99ebebf7c31f4f5b757f34e185dffd1e8fed5bc0704e0fa07200077f3d696665dcdeb1cdccc53fd70c0f5778003eec63d220f672e36f6add660e866df3932fec2229d7d17e9dbdf64e757fed9a753bf3feb80bc131134c1be490dfed448948f793b3a56f2a9b723b392efde8e6a3501edb36f48f63ad9f3e56e02dad7c4bf23f37392bd131134d9d1b1f26f52c38e6ae5bf23b3f2cf3e9dfabd740efe18e2962d376c23f1ab2ce493841aa85ca9b28693957f1c91c423d4dd06180f0cbbfc189680dbfcfc9614a5983e96bc5ed5ea524652b749b9b5e94bbd2279a4b7616665bff42d042fa0871510760aaea3c0829f233aebb97d3bf26018126360e81fa956307de94ddf904fd56fbfaf475fb3bad4479ec8f325f909b8dd507468dc39ea8708b88d13badcfe00b04d90b761c28975bc605947f6fd26c699efe218be394f04710cdfb07602b873681f24da449e175a870addf76d3146273a87bfb591c57365c451bdfe3a87fff460b805c5e3dbac681359313af10d058606380ccbb8c7320fe5c464b47d464c526a60c6cac8118e869593f847261048a916ac6c98abeed38088507c616be0031f8e9b738e2c1a96e3ed2e07b563b907fdf20764b85c2e97cb6504015056468e2c6045ff080056f3c31eaab285092056468e704b6cb1a21f151c56f373d23f33d341f20b5f72ad28ebb244535e529ff21abe8ec5e56af6a20a0e621c7a536078a185cb8ae5f679d7bbde1572f38063aa08227561fb0b7b27f599eb0813304e8f103c703d70b1151f496177294d504273d3cd986591a399429252d61a3559e72629267dd346ff18f67493a35935cc5f85202bdcece0ba7fafd95efbec57e070f4d0f8ecf88972bb26d54b9670502ae6bd380c55710ea7bff1c03c45e99cd1a33b1cbc91923738ae3f2643a5914101314e4ae2810d6fe84dcb15c4b2dedcb4b8e8262282010622221888886ad71a030c432aa7c13330e907367e449c1396895e886068bac3969958abb5a9d4ffcdeb06d46635d23f3af871b23a6269906595bd111c52ac8e30609515154ddf89364d8b7cb239e5ef70d07530807384dd73e3850dbbc8c793f01aeda9a49acd3effeacd4d675dc432feed6a1f96f1f7f771c9215462f453c577962c7210f4182537a43b20f4611cfc921176e2008bc0229796fe79fba371d03f67e6a65d4545455d54e4e3e313633c519959ad339352ce39b2f98abdfbb6d5ee06f376702c2369ea8e8462ed09789490ae991919245b3c22dd91a6c518c4cc328d643dd5b6d9be4e70ad94a77be6ac5ba1f4a6cf88b782b5bf994e264fb502ea4d8ffa2291aadfb482cb9fdee5f4a9fa517dfa93c97918a7bf6489cc50f684b487ebaf55aee4f1cad6ba653df25394ee2d635767cd11611f046bad60adfe3f98abb0ae4bbdc8342debac3b9be9692a7e94f0f1f1f1f1f1f1f1713fc27db0393d891f1b4fc241ff81e22dcf8f609b7eb1cbe0badb00acc2d1f0df72c30ed757a07dd8adec0b6dcac77fa2fba4b2d8b05b2f28f76503a5c46a29322cc902509644a05fed3e3e4b668cd37d6008e382d1256821010a9bf173245f3f23f5b38fc1140f2a23d3e83432e6fd4c9f686cf14727b07f438b61758b58c422a613bb2ff63cfcf2471dfa7db9cba15fc4d841686c0c33643dac5ae67c9901dc1000a1cbf5477d5c73b08c951c73ba7b39cd2e2f7729d412169663f82b33e7b8f765824d030e760b0ef69bb458264cbc2664a1560f6d8d7ef4a5fcbb3db505a95f10205487a9dc664abfca4f9f7e21fd42d4e580783af45301e9b04ff5a3fbf958f7854276dced0be9d79fbf79d9531e51a32921d8908552ad01175e80c16bb02f05be944e15fd2ea74a3768a115fd13ba9d21e17a92e4869f031cdc7ebe8f822797a1b82c858757a7866cef7c36d6b0e1372191223f8fc8de7c9f31356431edb7a75de7e0a571c038dbf7d24bb04c0c6cd8ac6e18624cd784275ce77a1d1b7d281b178681e6f267fc750097bfe3beef84eafd70fb318f7a3797c87e7fe5eee62ffbd9f8ad0e2ffdeef47938fd38a666b0323e0fe7160f07fb9f47736a7e1e5f3924c4c6ed8515c6061bce6c34ed91bb712f6266666776e658598671207290674a4ab0fc42ed0c1b562942b46e11bfed7dc6c630dccc2898128b2f299573ce8949292526e99435dab8cbf8d7e78c524a19b98e71cac9453333af419a0ed3ef6183ef1e18fe6d9f317a1e39f9c52f62bec73d7f93f9867a16e535fdc9cfcafefa711d16a1d6433928259df476cba8c5aac618fe81fd2dfa672b59b11cd3ffddfef5b774e8819412d00073f9978c6096c1263905e9de5e5cb12f2f2f2f2fb2d697088614f15aeb77e360ad414db2ecb33332067ebdd7a4766e38dab99c83333333296b53a97f10143273634a9bc2a60004851b3f6cce0899b943242b48b41972f9f5a2e2041913263332264c66cc99c217357e2e658d0f24f585c90c960e358c1a4668e4eac49fa1bc61ccbc227eb1af3208406b3ca96140a1482ef6536eded8c5eacbaa7dd564f5b08f9e75504a1f6c0c1332cce368927dadd606c1b0f911935cabb59c771390777e10c79e7a3af153f9608c7e126c917965e84b5ff2f0c979f45716836dc2e0c21a36e42118e49c1f117985ccb4a4f41aac3dc6178f39c3c6f81b4a8c389483e4d6ef6060b7e7bec3205747be90995bc1992b5f4a213330f4450afb2f43ad7a2714161957947c70453823a360f143b2583238911cfd455257012cd3b1e717a91705f9a1c0e09d3e9bb2cb66398a21def9cdb04c08faceeb7f43cb1d6766e215354c2736eb9c18ad5ee3778ced4c1963c6a8fc58892d22c13e9334c5e100ae7cfe7f8afdc03e86de6b1b57802a00b6a9ef9f3c807c3da76e60b403d201ef312e523a3ffe6c7981d19634c668d3f25dc621226f32ce482733cca07cae6ceb87d518b1483bde8c08cbf16e33ca2980702073323b11b65900c7dca0999999a1711be9331c17cef80bcc14030847024bd959125abdd3fe2dbbbbbbf2c0cdb263c78e61fb7085c47e21f3b67b748fdededdddedefcd74777777b3d39e2d3bb677777ff3f030373737b7b412d4809770f3441b0f708c3f181b101ef8e1fabb134ec37b7b0248916eeeeeee9df65e88d70517a24df3788cfff30c81277ce923d23fd8aebf253e6cdc3a22cf14455c918473f1e4661ce39f555be3673de5e0c6836d1e58c6bf7ef374e5016f4b29bf79c8b2d60c367e868951c628d9f3ab010d700af1d2f0608934cdf500cbb07b806d328ee9e72c2b956e789e7b335fadfc0efe608954a0889078d9c11758a609f62e441bece36a2df7ffc743eccc1eff05fe7e1718275e8e43dda110e6863cc4cdf304d0bcfece2bb8d3cb587a9c9ffdfc4c4ecd93b781648f6554f3b02d5bb668e92434d9f9ce9e8570d84b0de3b49c263bbfdabe23dcca89ffec7ab8a79a3f55f3e795d10c0ee3382f7bcc93d5ab52304faab0e7cfb09f97fbcac9d05ec7bc1ab91b5bd890bbb39befbf615d0f135814fb2ee71cf61ca7a2afa9e80764662a969492809c528a3dfdc2fefe74b04f853d7d15f6019997febcf4ab3390b2440973fbbb3f92eb40c0ebefcd04941284d0652941b86e58a5f4a0e5d6254edcbf2c650993bb45d06be8ff96382367c26f51fdf0c7ea4b8971939b18f6725280aff7f0c77e7afef4534df932ead0492c4b09424b1044776baee74f8f1d2445b1ac9a98a79a0f5e6c763db6e9618ff5b78a3e3f53feecc33cd5244561e7f394e1032192dbdd8f0ad44f877e2afaf3b14f459f1f8c514a107ffb26c619d7ad97bb766931a184493169c4ce4d421525704190160b14a4867ff5bf0c14c4c5c52e03055191549c86206e777faa07272841100d7207053428428c1eae3c01c40a014fd2607d4184210cfd400638dc7eeee7feda9fea41c9097b19488a24a2cb201d54b0b3621df030031f7005ab02c860b535173d156fd1aa8168c5568850f25aa9e4b30f789c08ad38c8861bbc56eea9e457801c560590410f82e0829e957b0fc8b2da1ac6c1f6dc07268858abc8051865f060363039c10e6a0d482882956111d40214a0b0c455b4f2e8a1608232922061e55e690568ac368e8b5e02887062488c957ba5a023acb66e861b84465cf4ba25c61416898b9eab808b2d5a2bf70a90c36ab342503154e2a287c20f48bc3613173da6e207670caddc7b8096150e88d004cfca3d70052be9f5dd505cf4ba0b211fa0acdce32847ac361b251ba7e6810c6840b472af85105a21e923ee928626aa503f01e472dd27dc469358c26520178f14c01853fb82d22e30d31475f444266da0957c36294ba4280192d23529235eee6374ad0840fcca2125fcef13718d0ccb3d54c390d6dc33dfc0c6a7f335cf324863ec8dc14886816e9364b69628628922ae0fc1b0f6f3a4e7faef8880d7e0b8be0413294c78aeff0a9e55ccb1bed8a7d017235dece31139bb818df14a8967ba4f5cfad3e9743a9d4aa53f993453e974fa52e94fa53f99fe64fa93e94fa83f995c4e2753e963eac63d9d4ea7532975763ffefad0b00c9575d656cbd91b2cf6268ee3c7d13ae2f3a3522f9d17c4f3116360e0c23ed20cac0f779d92588a09c112116f94bfe3ba7ce444158238e8e3c4edf01ac94591a999f689518867b3432c168b876a6183ceceb0582c9eb8c50ca3aa05d0d551afc889aaf3add04b88885447e163bdd6941bc2fc0d7160114510152caedcf89f0598c5ebc6e72a63ccb8c59a56b149bef2393e501528d7bacf58994fdf3d9df9a97c70d857027c31ffc2f93234f5fce79780e7d6c99d4c816ff71c8f3e7ccfea334e66439fad38f5e2158fa95cb04cfd50003aa2169ca33e85e256eaba95da80632af79bbd410a1754e1c1e20c23d4a74960fee1561d6ec56ab85d30ad923a821d4308f60b6bb531a8156de857a65930abc4d6a7455e7304d621034563ced92161b1cf889315620cfd8c604f90c1046b857d35c6d4efef287c582b5ed110b76c5939f10f6bc671753958a9d72b174fb50235c22da215fd54f36dbceb5617d5fcb0b7f14d97cf48df00041a785490f91c21721c854b8a1cac8c1ce166583921fd11ac861e564eb46f31d7c77ab022bca61485d0b0722bad726b48a9c058d8925bb19da148f42abaf523178cfa307e716b14231ae1d63f8dd1c92cf268503a34ece9c3e8b231454d4f1ffb26b7c58e6e7dea04e3ccaf4fb3784de9ebd397d7d8af4f9f609b49b4838bc694206c092d8a15f3c17a6e7d8ce7d68ab1eed7e74889ee0c62993aabe098fa750ea171a716b79ae6cf9c443fb7fec6830d6910b7d6a74130ce12b699e198fa3da32fb43eb7d61a97c498fa61aa085f58eb0db6bbe1772d604f5b31a63e772cd0a750624c7d1b84b68dbb31c5fa666fb0dd5560244d8fc3c1faeec590025fd0c1fa3f46dfdb1c6cbffc826e9d52faaa0f5d0af68b3cde76b5cb1dbb2ecbc1fa3cbc1485ad7ff2c206a97644a4ef90fad58e3ebe9127dacc3a2b85c232f5234fb489421e53bf565beb28237d71c8c1faa32f8c4251c8c1fa5a162be435d9d7d1d751966946b03b576ef5a215076b146299fa144a14baf569add65228f34adf98623b8608533f9dca1300256d5976d783be7cd9d39b62fbd93ff3aa1776ac14e85b3fa735ec9ff3a91d62ca5aad95cf2de71c94d2dbca54aad2af2eed5dc2317c678f2a3dd4867bfc81bd0185e3ad18d8ebcadfe64feb989f07758e19304efcdc8a1bec34b12ebfddb0b0f1798765e4fc429645fe53833c28c6c8af75669fbf628c7c8c8c2ba3e78283f5d752e4a0a474ce183fa9c541f993d5e16063914f96d7b00cf2a068238b6451d095b2087b21b155c931c61823739cf264858d1ca3d7b0e210cfcbce19a6e86ca509be7e9415d6bfd40279bf94122b7da8c2e2f721786ebfe454d84626b08ce3f4fbdfb3cf304fb502f65933a9a4eac1403f422a162af6f579a5624123c18a819420f2cefdfdc7f577ff74e6a7fa313f19fceac467a01f217fb9d163202588ae7b435e542c7024d0aaa76281aeb86b61052c7b8c7e2d68dad34fb502a5dce73f39c498baa5620cafb055a90b4f31772b95f2a11983fa13ba0e527cfe570b338371fa731db08c3fe92b128c133f296e4b34ac248a9587652a0f55a2715d88ebdfd82bc6f8773a081161421811cbd0e7e1d80b2b6a1d48606ab08d4fc1313ead237eeeea1cfe9a36337380030840002ad5a91563aad8940d98d0f547b92c11f68af453927543107bd589bd30faf990bba4c0865589d775c1a1fe6056fa7180ee524a296514829a31edbc4868d89b9b68437a24abee277937b7f32c0eb6c3c16eda77eab5d82c0efacb94c34b16b94d7db1582c1e563915f34a377b2772b0a55cc7e2573e1f2ab21f59fdf626b26ec7ee945830dadc784cbf101e5e13f6e571bd6a387587832700c13f1eda67ae697d31e7117b341afcf890fab9ca6d22c86274e711a3f61971b0bf908bacc86205966f4d6982c98d5fd1cc15af1bc6a22b889298906019c88a27378c4558b2dc7ebeb1c86b18a88ad6ed8f5abc26c9c636890d2396db1fb1b80dc7138c608914b137aa9106e7e82fe286cca2c284b978b3a7b431ccbb142257bb4f82cd9e1dcc6c0acce08dd9d7cfbec7c1d62ff477ce480a58bcc6bf66c52c5ea37db6e3b13458eebb1d2cc76803a80708fc753712f0906eb425b021174111bafed45ff3cf5a1688abeef356d4bc30f52d21fe92cf7934431c642aaf5b74fbfb321015a2db6fa43f16557f110941dfec23a27d0fd2dd24906d1fb34c96653dfc69483f21feba929fbb7caa62432417c9e52e8767903ca3356ab53615d280340b6016bac6004dc338910004b8214d152a9806f740cbd82d3dc036cc6070199cc6cf40a46730a73e5d7a7420dc85c44bf4820b43432fb820bbbdbdbdab0b7a605d9ccb52501025cbbe386fe2f388b5ca186b8a0a1b72cb4728e4e6ca9ffe2a305fcce5d68f21ead62f8c426e2e7d8af25b23ea9fe5d71aa25808f1182333c77843e3e0cccd0c8dbb0e7dffada3176ef14321489e805e91387123122837227972430ddcf89456075b5e2cd91218d1c6305485cdb39a3d8661d867417c14616157bf94d203968b49e161e8ce5747cccbbebd5ae77c6cd6c762e80f3bcb62f6e9d0c79e874feda7f65be5a8c7d787d7681f447befe8635f421af65daf1a6eb84d6beafbd30e08f6b4c88ddf75f7a3fb543ffabbefbe901fc94572e5173e8f48c322570877b1fa6353fd883fa91701073d553f76354fd559e906f6fd5f9503c30ef1e7f97d3308e1d6cbd315810512300b2460fb24ca0ee959587ff6f67eefe7c9fe21f743b4bb632fdd3d9e92e38e65139b22f88638d84f4ac38a00f376799148920de823609b1f55944a2f1f2cd3606b31fddd11f63524dad8b71fa9d691b5f526c654d0c1ce2a92275707fb90a75cedb5f7ea69cf5ea6fd867961873ce566cf436a8d9ba6659e1432b1b886bc5caff67e69be55e159e2030f11f619c1be7e95b3af016cc31c13a66e64da37c4bf602eaee0295e1eb36408cbf8f3cf79834db0acf59888c051bda454aa2e67be8a065345eb63aae0f74affdcda3d1702df89c7cb69c42c335f7ed5016083fa52d6547705670f77d975fb5bce3178b831a4e0c87841895bf245c3c8f294318451aba067886628e1627798dc56127dbc46d6d8ef8f3fa50f2394fed8cae28318e58ad798be3f12bd6296230c11b5f02c61e235a81e970fa54f12b75ffe8c715b3e91aedb2f832415afb1f1fd52480ec92bb75f129d11038965b26effdcf11a255e93fafec9e3373e9c4b2693db5fb9c887789644570c62ed4009e5ebcaa22314dd1b373ed5e5dc487d095d4eaa842318714b781b5d4e0936dea5cbb1e192258bebf2a82ec7a5a2fed4e5a0e4024e3b38e1b8a79311aadc53161ceec90847dcd39bba9cd39bbed4e5984a6644b9a5b75d4ec93ea9cbb1a4e732b2341077f45d973392dced50b77bd9bd8670bb3270f0e221d55490c14405800e2ff0a187b5d26c66c50d5f6e0673b36c0c24dcac08578c81c557898dc1840158b2b8e9b95464706e0c430d31a46021220c282e287bee8db6d1836abfdfa696c8384e094a6f6ff1c1e0b89288c995f22b511657be95c1959f7a30aeb8f2c1307eae7cdbe5c89928dd44b0e2ca97d28509c90d214a25c2922b7f649128512205af2e8cd0a18923902c7103133596686dc122484ace01688b181c0ccb989a709518136ef872050b212471fded0c4340e2a59452ce80c3b586c5952fceb8fe9bad81e42c5038377c09c209ae7c298320842bdf7ee1c4951f03d681172b90f162ca959f591b6ea0c37b4eac44432bb8fe98e5620a10aeb8fe330731defe9aabe5ca2be55b20a4e04ac9812040010445875613583690430e4d3c5163881e94aca494524a89c30c2ed86060e485f11ad912e8074da8a4dcf0da21098a6f03ba580335a5255d7bae21601bed6b251f0d57aa71e56f7eda628db0aaabf2a8f21863bf5796915fc608c5b23bad44be8c2fb5afcf82a69a5f5f455968d57cedeb63bf427dec33e284be11ecebd32f7bed91acdaaba918e3656c33e4653624caa75212f1f9d27d8b2e8365a47ffd92b1159d0261c3422135fbc22b633861cb96352e9d7243244f2efd40a0539f3e773d6a942ba59438d80607c7361cc7c8aef136e378f5e8cbaf66cfc341960c4a79e77f526291eed1a9103637363c82847e5a3f2697163f465c97e1e3e63a8fa8455b71f5cc9f45308e7dff1f6c63638c0ff985376ecd96f0ecb0b828e827e8e7bdea0a923ea20d2f08ea2296a92206057d414139aebf2bfb3ac8e5c33583b21acc9018e03f13926e90b80a92f497b55dd0c3b2941eacdcc89179e39c898d0b1d14b43dcfb08950df292b994a377880818534bfde3a628c729971b0ca2b283f3e2afb7c49bf79d2c1fe0e0ad241a39352e2af7696ec60604b6ffac87926cf478c71bf7962353a25e5cbc922eeeb2ca4346c51bf3a8bd7705d0e47398ea7dc90fb84f094bb7d2112f95a4a4a9ad6d19c438635d77f02f2eba1196cd837461c8c22e428214fb9748b42780a950e7210cbeb25fb255f2f9748486e9a015500cbdc780c7d1438077d89016600d3bf611cac0c30bc80825641e3209d6119fa3cfc84041b7e3843baf42925a92c305f7e06e6cb0c484a4ff1e9db68136de6d3ef9f22368609bf6b6275e6c73fc22d70a6d62a23a59f4e5f40477efc186bac98ce7cf9feecf2e37c0bcc4639b1fc9d8f555dedb3e72f7eac4c61428d25a4b8b24ad25ad89748a03e5d3401050c50d005116274c1d3c58e952f6aad168bae6391ac48e18246569e6c435d9d3162f44310111b0f4b7af001c84a0eb58756d189c7f585cb0ead2a4c3d14b5762852a284029e1e12103b405cf0581f8a7a70b163b90ab4c5500a89c98329b25027d65e069ae28a3402d01456b058d465a0295c3db6102ae132900f7000da6207f609638dfceeb7fd0f3ee91cfe02b8575c927cb77a9cc7784d142fb22f20e4faef90698b13846c2803705d84f0b943512806b9aa130e4279d23ada069cc3bf0926aeff8d19eccb4ff454409860c3af9cc8e7ccf37825821b1c50aa93a2041b445c0f36ac2e3c3baca2ee06a81b041bd613161b68d8509aeecb3a29ddea2571c2f28bd4244eba497df6681832f957cc2884300b08ff728cccf2932cc3ae181485a2b06125ddeab948afa138e1513c664a53f1182b1ee357942401b53496eb36aad750621784b561afb497677a0947e0b041794cd36094d28020c7a7b9b9db6bda534c6a8f69da8de7a373d4fe4c7b3b31efc3146ad6ea9dc36ba80dc2d2e71ca435fbaa02922bbf2c72bfd65a0db62dde10c25229e927a5dc21a58c3753524a23299552a2a447893097dda9c7f8f10b0eca18638c314686227ab5a652eeed3796a6b447392956336d3365990b75e35260cc82855f036c63c363a8c7bd45e32d1cdeca6a4d936ef7b00cc705aba7521786304a79b45a93bb51fa17bc26b5c3d25c982d2500abf23ac5528900b5293a2526bb47f6f050f7744f4fcf89c4808bc2ed9ec88a2c99ffb24dad15fbc962c9aff5e29c6a2de1055bd89708022e7fdd52ca8f31fc8308bdfdf123a2f222f3b67cf7aaea8f52ca1ffdd1d24ba4c8bc1e6b54634ba5a494524a2ae987f4a794922636e831c688ddd0ecb8ecc302f19de39331fa88b56dec35ecaef2f76e4c8c52c6bfb1aabfd995f562775e7fb91da37fdce120c72d3686919362da864ad93021d22a5f602ebf5a60974e1b0205f36f2a9d522a6e9335bbb901c1199a1b2dbba92c0b629f25bd90ba54aae34626bc709bbc9991bab011b59084ed27b6851672b05a161625242b96753ffceabc702f5dce7c007072465a86065aa8009812a33f4f448f14abdad68d46244a29c5b46c52062ba5f36946dfc89d4f5fa31fabb0bd6c5d2aa57596db26b721816158f7e32f9665b5a2acc548256ee33624301ad01b26147308bff288ec7ef82d45295d26ee74ea7222f6f9680985952e367534e8cda3478a556de3461c89936f391c2f36cc99463331fa0c62db73bdd8f746bf312c53817be1ba546a1b7125eea34df73e5a47f41177b8cdcfd0dcccf8e0e90aa482a894ee95643d2ad58c20004052003314000028100a8784229148341a535579fb14800c7c8848805e9c89b32c887118860c328400430000006044606668c609677ac7176f81fc676626d1b276683773086dc1e34a4fb7b582be5414dbffd509478484ff0958acb33bed9f6c6409819daf9f590ea90d28a2599917fbfbb6eb88fde0526e01c10b10de25ab912243af98687c34b316430486e8ffb1dad0ec754a27b7a985f3eaf501a6315dae1a3e48f285e64842f90075751ca473ffe138857b375e16c2ceca38f8029a5f9e1035662ca1bf149c1106a899948e0e641c694b35f6962c42f1fe46af8c426461105b5973d9e83d6eb6437f5eff2a99c6407877f5135c26975d7f8421d10a662f2ebc57fcf1134510b148567434b329dd1721989050107816e31b5a54ba3ed3810c76d133440666cb43a0fd7421368ad0844c3bd81286468ae48894be7a43c2986d3a75d09671e29fd306cfc2b17e9736d27a0cc2e7d89604666a86f2828fbb0ec0053e6d06072664ef0f80cacd4a3c02684d6b3746e14c256e640a3700550796e603282812e60777c13031a0cc900cc876f1cc8665c5e651f7940d889a8ae7e1efcb3e77612199e6a181ba0e94b4b2073a6fefb287446ee28550199865af45a9f981b76eddd45a00fe75530fd4eb302adb5761f1336eddc1ab3ee51461ab570aebdbdb96507d7d63118154242afb0bc7e2d9f536732e1e7fafb4c5cdf8799cc5deb6b47cb6e50a003ef8d6fedb1ce4f3866ab05e099459285386d91a881ce87fd7e0950df78d7992595b6d3267d0374eb62b24a543948570181eee66ab09df682b29617f8b6cd7ef7bdcc7b04ed56e02448eb6489f64e0c88321990cbcbc367c2aa06cbf8b55a55e5528456e67b000670f3996755c9ab0aa37a6a61fd741b1a1cd08e78bbe684c05ed1f573512d2a2c5cb7011f76207adfe5d74bf1e1efc4cd16698f35cf39dc3aceb106b09eb0da3d54adc2b47618c79d1ce8b82747fdc4c17bf23373261577da2aa453aa8ee149d941931c558b5e23e31dc25be87932766d5434bd54ae65d23704ec51f8bbf29f22c65b3d902ce349edd0a4315c473e3f2632725a0024dbbe192d62779ad76fc1ded817249c8501ab7db40895f1fd2db0f22fcfac2e35e9785bcbd996a51dc71604448716fe11043320ac544d37b0498fc2f7deb4e644312738f2b4e945453f67d22ba7d6c7ff1c92b595537825a15e94bceef6161ec0da5b14c85d58a42a93d7f5118fe20cbaa1d70b501afcc30b34eba2f836e67b1394ac56ff60b7486311a4b844666621fcfa9d8585670a36f8655f17054edda5c61d2b38fc2d06d5d2983db5721d4c9d73b9db424b0551108241db90ccf29cc5533b75dba8318cee551dc695ea1be125f2bbbfcb5b60cb68babb86f825dc55016b47ed83fd47f76b5854d4d4f313a0dc5803197d697906d94e6ccecbe904032d75f78d4c24f35fd2641dc77f6fff312cfa0bb527296c8dfdca9ae890729062015cdf329a7d3493934f98a93be1cb4c2967d5965673876a0e04f4961c76b17676086f0232e9324af29aa6f0af8e351e0132365a8924f255958cf493cea73051d5dcce1d5b7a26075687bbc160a54d19a5d93c33f88b6b81de8a10e7b812cf298bcc83f5bb4c981fe1a2b33678d6c0a7a962949c73b062c5fd5fc53d9f5bddaaf1c3642e5a20032cb54c498302c754a889bc10b21b49ed890e32dc32a5eb5b3beb1449d4cc1de83574f0916c2809a778680f100b34c5d3f6235a2dd8dbe602c2d761c05bfb22cadcd5029c9a3eb8aa013014fbbae4e74b2ddeb2c3b5d763dd8863ccf3046a8bcc3603f211238d7aec53a0279a617325bbd10d2b3b5038eee9b60582473ff165ef1ab0b858859d4feb2abbd3a7d96495431e135175ed68b2283a78a97bf7cdc95a13003e8ff4803568e3afdd32ec47c8b6df8ba0ce3b8f2ca9fd6c2658474e1a6520c3fd61faad0642f30952c289eb4571c2e2f3d24a12867779becdc418b2408304ac85631178464246b5b1744635c3f00e67df77f4eda7fac59fb0069ce3e565c51e4268760528c35cbf8ac96f2aa83349435071a9b264ea58c7d3d3d9b3d4d6f03e9fd179c2d29ef029e7bb33d2d9b9c34d42195029f09d0e804ac6e624a1d60bb2b70ac4b79a5016f1be65283d783cc53ce51f400eac4db959408fa7b1449fcb113d6a0973e29ebb63b3349cfd02f3dc41659b254af46eba91ae4919ef6f0dfd5887a47885271e0b03189a67dc4b834c1d2de3f97e42b15ab6828715c93c0e99159e06f43754c4d5716281b8c63643eb3830171922b1305dd65eaecdd6da8cdaff78d466c02b11fc3437873e9190d9e3a83e221f95a740687458ca27e38365e2b53935bc761267140155522501c3008b33f0b0b27f37d4a7d759099288399d8aec165e89934406e9bccde0ad93413cdfcfe397ecd9d05f9749a9ab78499e97d6de3e5edec9ff7aee9c90952897fa5381be3dd49b3b2a0dfb130153e5799376f83da54d278ad5944d2cff0a545e99557b82245ca5caa0a2647e98474e5ff1cec2c230dd12151f72cd96110e5e244e793f2405f4c1b66634f98815ee4bcb7d5b3f0fba51b7557e9fe48530683a14fc5f357143a8cd2264a25eb328abacbb6edf755bb81daf4251ac15c5eac2cf95896207f76a9799ca7ef237152f5b9e809fb8c10f6aa553a68a53d6a0159a76b5858e8c915e973e835589a6edfbd3ff47048d47f033855711566ae826f1acb8cedb760a45f21f19750e79e3927a44360309af4feb9715321b2d4c2b35a30e639168adf14a30cde2313519e5b760853a36c1baa3750050aa24335f7d140592ce5afd2951055b782f59abde3066da9ea320159a2175c52507e8e87c6c4595cdb284da1f7799341353a62ccc3f2293e1a3691c9ab172b9542c7cd85c0e3d2bebce4983a9044c68154b7417a56b8026f79ad5d33f55a4377c8a76610dee50c99dcbcc29575bab106acc11f2bb2df1dec701ba8430477ee7d9042104f48e09a1ebf8a0397cb25249092d5f828c4e67fa8252a94a7cf363fdfdb2bac958f49cb35d25b697af0554569ed16545ab6a9b3977f3cf1e73e34c9f56edd1b32effd3adc20549f69d117a658f18823152f114df3e23ec1ea90620870c8c95917a61eff4413ffa3d06513417484fb2527ba0135e79d8684275f71f364ee41a1c32126c150ccbe4b67e503a7db2c0141b301a55c4c321b19704089f7dca0478245abd129eb428ec2b91f7719de3d916e7fb17a252b93a85b9aa787ee028ca442846a4ce65c4fa7897d8d463faf6fdb876a5d968cb33c16eb68aa5581147ed61bad02d7975d0e3a823d8da9d472967c4ba37618305f939ad12340640cef488fa42a242b98204eb6129e2d73c3427e882176fdf08e42ff095f1a6881044ebd57fac9604796859524c111e94ad7dabf34b91cc62d142e3a1642bc7bd7decb89bd4a7489e0d0333359f5d5797597aad183f49a0b355508f156a02d695a5b17727e5ec84865c57cc58b8229722e0a57c8496fd506d21274a3697d9459dc4dfc31cda2f0f2318120cfb44e975199ec4ef22449f41ebbad83b1d6699043230d4d495e5d2afcbe8d34d45450d873452dccd4219e6697beace1b0e5711f4e2ba03cb71b0dc5c18d7eed64056c1a416481e60462481e315139113ef519143510db0d60cc5bc61a314a21794b31bb063477a06d078caeb7242c947eb233220ad9bff6ca8ed25bd4c503cbd75435b310f1319f26031919cb8cdfb10252cf69c99eb286215b99651741039cb7665a9548b008a402ff4512cef939d2e6e8dc471e64f8e830f8000d6a82be51393dea5e341cdcfde64473779f73c7c458f7b2fc6d40fd2add24adf2d8789e9c420b520c0da46cd785b6071b95a37458869c64f8eded8f190c047a31c25362f74d057db3aed5e870780a0e781d81dbd585128f2024f53838f14284db005b0c4974fc25fc0701d149622713a6a883cdbfc011264162278512cf81f54113044450d9e17973fbc7b096ebb6356883b7424770106ee8885aad61873e9b723ed991bf2cb62db5018359457a3287c3e9f1f6747a3d44866c752d5e3f5ea2a7b58719d439f46b0bec04a317660681e4d85cf900468dfa04b840fdb03e060a6d1c9a32f9866dffb5a3458344ae762c0e29cb0b31ec0e2756f9e485720405b26983ea3c3003ce4b6f5f185911e65787bd88a74505ec19ee0f3a74a50e84f5c052fc56d83cedab0121d7b1424f2729092ff4c460f2da31d80c7d846b26376ac1abfb5fc01864a020cba7464df05c0dac4c6698c83b99a71d397ca83ec6d90673f641f48d1a2741868b81791e0874cb3a20ad01c901b8f5552860012f1465819078ff51df27b41de8f063ae260722f7400c9c6f90f65dc1e8c3747798eee270e95ac8bcd7442b4637ef1361cea795d0936f13ffdcd39b2fb4ace56c33ff4438ac1d7d209fcec728bda6d82a4fdccf6ad0ce81900cb9e5059c2777020dab654bd39ee38738c54534a16d7b4a437acf7da4ed7052e2a69956fb60f880946a7eca44ffa36dafb4a54ffadc6c3ba5279de77ea4ed702671a399567fb0e18385db6d0de94d1f2cdc0deb485bfa7c916bf63b30b69591e32bc79657496edacd14eac71733622afe70eddb33b5fa8b8865622d46f8ceb3aa31fb559dbe5190f808d33a818ae4bcfe4f59514e73cbcae02ac7d40010ca716d161ecad2904e5b4971c1509ac5fd49f958b4b02b371c271c4b7fc3c78ec77a3ead8620e6ba730d07fc1b412bae8f31c7cab2ead41c52e3a236e511d231da4f0c93540592bdb473b88697a6233a4a5e5e5cf6fe30fc4a4f21535ba66be802ee6090269190410c448063fb114984bb701603654b7bf7621225f3b2084e1b434f623c0d9e35ac91d50109d9e2f776bb59ca6c5ac647f5b8a10043789056904d660983275805f16463ba16abfd1ef00876e057cd334b500fd7f929fb7ed9f68b0a3f5217180b962293cd3f5e9498d954e7e19a4390f038269f900ef656daa9ec42410fdcb3d6ff27a003477e54920beb20133e7bad0829a4ce78c283b4ad44df027c9c1a0f9735d254452f593360140df17bc5736aa4166cf002fc16d94de2e041c8f456e4424b754d744ab4424cfcda7d0e64fc0f8d075a65cdd9e2f8fc9637e5201db2fb4b9516ce9e0a68c7a919bce440c781a222a291716cd77e9b57e17e377894e04329db77d503100b146608a72a100648d292276d139c353dc0d15127159541b473cd6ea76f160569508a0abb093fbed5a5c639daa6b20854a8fb58415c08a0d5e36e6a3e6c8a66335576e0b991c1740a08e83fea13ff4610634da7d82c965e1703ed167b2fcfc456706b1071a36061d3cec04d45827973cdc2d16915ae99b95956274217f8a55b24e2cb8d45cc9aa0a72e34878f22ff603083d9160941cd9d10cc9345d93845bbcdfccb1a3491528a999ebdc0a69b1d0a084cab95cf49d11c3d4d9504d82cf7d8dcdd822a70950fc81822c78522f99c37221b07f880e940ac5c99df4019cb8884a808055360851437dc8f96a62afd78f9a5e1223dfb6beed1b93211d9f9636ad2c1165ff9c0e94562f743a85ae7297d5c59d389319d844d8926240c89579b8530e462480f7ed16a87e9759de87e0f71fe57d295d9bc46afaecd137b242c1a52149f0a0c37bc6f8c5f6bf5b738c949f3bba25a4ca69901e0dc93421ded499d96c2babb7620cb2499f4976e8ba0f444137d798f223f76bdb86a48a274b5ee7d2329a425f6efc114b9ccef45f62c39333e75840acf414c63ea367457f080cbd374392911c88f5debe258a36627369b07b86303dc548073a334bd83030899a110bf2ae1e8af3af8356c47665dd9cc30cc7b3e6ad8312351162e964b28d712264d9420808855203a01917e73ca31a84c4d4c80ad170fec0f1b2bfa8ca2d18fb9e6608165595fd88fe59925d0fa2581a215a895b7c342300e1088cba84f733fb0f64c04d7d74234e602efd8d8b7b0b2b69a176060e4546894b9a4c32035d9d9919f6f20331eae0ba2d572b61fd044c5468a44c6eaf438dd975879dd05c42a0c808ccfe8e981c01a65f683977347c741e24874e42adc42fab3ad712598372f8ffcf3fa0a235f2bbaa0f6d67cfe52d2fae4f6beef28ca64947dfd428d8bceb81c35eac665c99ef75e8326b8cbd0eb45161b15694738ffeff247c161a3779e08138285cf411a5fd06550734ac55fd459329d1520d11167a971942176f9fb147f5121e114d61f3015e1f69541b036a3a50081ac081769c52f5668bb4b4a5a70380e5f0b80a493c06ad9facd280353dfb1016ba9a3ac3deef500ed6a44f1e89972b1de3533f6b3730465f395414506a46bed859215cb3286e90bd47b145506ba4cbe18a709e4ac35523bb8c57bb63d86834132724019e3fb165b9829728b478928696dc29befcb0a9aaaa2c185fa6a7e2e7e03e2fefc9f16c789631a2f6bb44321eff182f3ef13341459fd706b99a82d720a0d1ed755f31f5916a3ff29b5d5cf2a2b5de197a6a05ff2962daa0456298b1569e369b11d505a27a20129a9288c7cfb8f6358a6adea35f02716ddd43c22678825258ebc2cae776ed8ef5d3113ab48e10bd42431a6502cc47a90674db5539512e26b21a3b786e928605c3d667500b91ca50f8fc725c7ba7a00806c41b664e44cb9e7dbdbbf5799eb2393b25432d8a13cb214d93952455f5c70006b9dea772c98dd6190edcd3f22c1f134dd4cb92d7a0afdae66f86a00487b566971b81a1b2dd92001e1cce737794bdf92b1d22f069899233749a9fb6249f023cd6e06c92140e0f7d7a87026f8e5a4c47a3f8dcef5409c4f9a993074863936a7f0733736ff08588936e92958c17eac328a688279ed8fe26c8b1f5eecce26456b4d6bc786b347b1a2eb7fcdb33431e95e3c73d6041239b75bb3674a7383189b10358ee3de292220bd5f3c6c87696c5805b466e8a025fdd306b6d86f6b0d6c3a9b90fada505307a8f91a6dcec407c38039ab2e735354bc49d8f524698e33d16be200bf82d13db566415361b79e4db974adb33afc01d528c61e75f25d1d290d95db404874bc959e0471dac32fe80759ef4842e1ede519a2f232931f41d1f6a6f937224c988d21eea2f3612d386bc2d9739e3c921492dfa5305ee593bde20d11e41bda5de216b194a3d5890af23a11f9e4c967ef660302469889a609f5e339b05f4ced453188e9400a37d9cbb3067bbf61f9b795f6690a677a485890607cb696ff671a47db19c889dff0169bdcc5f6d5b7d737ce282b611953d9e4cca3e62931634d82da23ddf4fcd24e01821368caf192dedfc96be8eb4ea38e69035834cbecc0d965059f1055a119cde7b9f91400619c942189470b4a46f3cd9f12742427b514f4324f978860bb8f5a460f08e18be33568fc34c2b6052fc42025f8bf21a67b888c886690933de9f309f152c45064b27dacf70e63f582d17204f5d8cab597235181436f752bb1db9a80a0468b47592399ce7eba83ba49001fd1c254bce301850464b8857eeca338d129e3001205f25ce33c44f36a41ab9398c1a301385a3873d819d1594e736c3d344e605e54e53db8e385c3a9958ba0c9886e71441610f7d9fb658df60dbf3809799640cc17426379f707ee01a026a075d6b91a30596fc917d75bb047e906f7a439b7bf24032782c4fef584fb8e6df7a62ae34a8008297e1d5a86ca86bd043b9c36371c8a8480eb618be15d9125ec1e2552e033f9cb917ddda19e0c293e65c1d5acc07c8192163b23ec42dd3bae04da43682b7c46db1b7e4bd626a1bd85efe375bcd1fd519d0c21fdc963cfa061749ee8dd7ffdccfbc607c59d168784a6fa162bbc1437574ae30f2da78b184c31749bb4a8cc4efd4f99e16ebe597bc20a35d715fef25299160b03a66f633649731bd82456f774d6c615d8451da27672dfb24ad03d4e8508b66d9cd0adf096752af77a2a91319b3082116964f4f9ce8aa944d9176f2c91a4ff8ed1379a764d818e0118f09ca9e27ce2796ea39ae9f0e706759ea98204a12cf83b3175c6e83df692d44c8912837791811680e107dc2e536c8511745809c85e092380e99759eb33f732b2e9695600c1d35c845c2290efb79f0087a2fb7b0080a0e38603727231adcf83171d7052396b45c3fabad4da63afc7e3a48e370e0ed318eb932050ddc3af4aadcdf5c5c59596ec2b34fa638af622ac04d3913e75f6737a64e21b06afb4e1cdc2d630d1083573f07fa3b6dcc4bbae6b88196d49d0004c5c4c69cbad26b1fa183e4ab5f4d1773831b6148393c99d111f39789d3f8cfb3aa30a3bfcd49f9b78bb015b456499c339aa27f2290d1f1c58c423905f0e5f9f55e2e47364f83e130044792a1f5731431c4bbb8fc1c87e09eff9ee9845b685068497ea8e0993d8a58a8f6e560181823abf481e49710466bc10dc411be89b7c98dc33c4a1ba05fd5077360f047afc8d7094569e8aeb076ca3c0e36bef9899865f3d13bc6bc0d1715fe839fc55fd4b41c9648053bacd8f95a0ec840aa3fcc80570263d65dfc8d8d39f462393e477bcd5c40f2d6a433e7c78eefeb44dd4fe6ea6e0b26714a5f8808a79fd01a8cb4cae4c205b3dc9136606d6742492ec3536719b6db2b26aab62f4b48a2ed3ebec18dce6827ba92d4647f2933acd66da0947de1c13436b08e48795cc58d640a2ae1a70c78965edb46f5e4d7728f30c2dc979bc48435ca032c81e4adca65be85fee0965b7d3a55e84b2ce8a6f4e02ca991119ca3ff9fc24ec4f0d0a6b8dc2b433d63148dd9ceeba7e67bdc957692d9b20c838ecf6eecc77f5f20c13286814cde4ce7ce334a85ef61c64c0656b8f1ed8abccfaea6738b633c019fe5760824ba387983e9ea57443722b0f000539127cfd66ab30fd56b9898311b5152140a9642c894f7b65fc5f17273ef902dfa29d3d35713abde6bcb649ada09c545304693aa79fdff755056a603498333fd92d0fa3dc9e5fdba8cfc46272833a4cf80bb598c3788966fdb57cbb6fec4ab530af6f25dc531ef4a9af0763f1f737fe1afacdc0bd9a94078d1ca3a813058a521433c4c886b071188cdf9e528db36233a518ae99f73c640aa3437757a1b5f290c500ef83a8b18ae736ada2ce3c655a75ec75343a6c8e67d4a3b819318233bd457169d0e0f53a94e706c848fa663f1237f352b43e30a71a3b6947bbffe97eac0b678330b5ace1a27b1bd1199cb5dadb91be79a7385a09335e3b5906a0410b3af3c044ebe9ad32bf7b7dce041ebbfa64a4be763ebc138d5949ce92677cffb2aa05b62c90718fc34166e982cea4300603b7dbcd71d742ff7d012f3d230e2f5d8b36650f33873dec26d75237ec0588841004cf9974d03e0e6e7a8d04fa3cd35fce200f4d77221ec2e41255ba7b448995fe84860eb230bb85a66b9bb81e5d3cade9f460bf98b41c3f72634f3475755e7d827ca7f3dac50252b48c9d2739b21b6ebb6368b1ce0407d905831a240c6bd7d3cd70f1c502f5bd318c2b55f743278832deaa5d5ab2e8d16724b9664e0b693c7519734bb4fe13752759f911c8d7502404d88a0418e2ef6de7479da780d90e0e4ca75377352e3ae94e888e79dd1d35b3ba520f5d1c005485e4cbe454475c90d3ef98572e40f9c82918022b001fee83cf08a4b794499976b3a09a364cf02437f5cc47c4410bca856ccee04d203d9ffdb8a53f7e079dcb58dd1776509d7c0f8f236b894b50d6b75571ec8ce6356c308d07bcf98ab26cf43ac54b3cda08160d7234d79c408a0f28b28281276b58fe0e2109a9f35c011960ac6a326f6c720a68c9d95daa1929beb7f8bb8a44d7e142e64e3202723186a2e35a8066e62d20323dfb5009550ca74ca70d4b8798642089ed4c1ea9d6d1fe052f86350e0bff95024d8be587b1249e7d5b288522e52f71c60792350a90d93d3fd455dd2a8723b5866705b1066613f437fae2cbbad31c271a8f82422fb6220d0fe8c0a6982e8308027c5c95752c60c060ff247e7cf8e0ba47491e4001f80658bf5cc1d78f217183fa8f1934c8e808ac6c3610f0cd302d7bdc4321dcdd9eaef683d0d0bca1a2f09fa56d2baa28f9f76542ee92d682f64ec13ee67bd3f43d11ea01c7978ce6d2ccff3b5900cb58f278f960a6162fde4c13b1686ece7d8f1592ab275923d41858c07723c7acf6325cc0f209b40a29d3271b48341f849d025955d622fb45bb045467322c782da74f8cea2ca785ea2ff62056c909a5512b4034457f8204e1a60a592cfdd7876486b16b2a56fb8c6cc606ea0c4753c936f14e2d2a4efae3b96d39e11a7bf1dcdae7eb38b3abc1539fc951c1737e92c55686579d5a6cc638081e2177dccaf44eca91efde2cd76a7d63b2787980ed4eb13d1176cf465e26a30954d11e738758a765662f7975341320dab1c36260fb517210d4be5db4d99866b103009620079125c7dab727e6984f6eccdd57db4a42d94d4277248496d1fae7fd4cf497cdb742b9f0138f374e2fd1f81d25469b7a638202eecbff5950823249461d1fe1943600fa9b22058ce3f159d66f8912be37c17cc94f71a7e7df06c88c3a64ca7cff856f3be08ddacd00cca18425b0e08787dcc82650d49e6c5a5ec8ea87db72bbbb68784bfc2f14b1e3035e0edc4628ee173332dc4e437a43d13057608d2872952c1a43d8ca340000c7a2081c99c6b2632de8afe85eae53c9bc6c2ae26babf4764afb0f2bb5c1be5cb0e06f30924afedc0cf52e2c94abf18cc25d389c8fa79afc33836c21180c4b860d2aba8a26d1988aa2d75ba943ac6781568e22631b3442948449ae41df8c59aa25c3c911c86553460bf3182571fab4db14f6932eb239a94e4df22fb80e9e21192618cdd75c8667f913adf667a395c0dcb6f38639d7bc30cc7486c80a33b9b5bd9d385cd33f3d8ca405fbefd3e2a2e0d8b6388822c4beea0757f10e978bc6abb5db9a0d1a74a00ab384f964852e577ecb1147ead843c5f547dddb1908258356651091249dc82f75f5be3ec8b6918a04d64e0f7d3a2c2693949209f64ed5e27c1680daff448138d0b063c8b60f6013851b66dbdf182b8a3c63ebb802a82c03956ff448daf9eb5ac78b08040d19619007c808d7cc9288d3784e98b328dacbd3c5d987480cc9a9b058e7523a1f32615ff522d0e1f0daaaf5758089341a70874fcb86d8f768a114f783730610d5c778f024d8022206a121290f0a2c33cd42a70ecdbafc0348c38ec2070745141352cab1e96701479de8676a48ec1afba3e00918bf9463f03754958748bf237d3db54749369d43c615032fbbd724698d4b3b6d3a63b560b26f18d88c6c3a1107dd09c30039bbed26518b4d05748cd8d5a22b6fb6bbb68d9b1d17396e6f80417f926aba004d41b16a6d384902f2cb1e21566fd3a64cc9b23d503b03b7c5395316994da2520ac6ba302cf7cef28185f81a997a9111fa38533dea81b53f56b5526ba54ece650a544fe3761594453e3be53d080c8a5e9ef0f7f3a6865eff0d9a12c34c66831dcdbe045a0820b702cfa14e8c2fd727f955e1bad601e14c692f84a1f39bc3ff08b45c67234749404b2b025ce87e650ec94f9918101be790b788c89ae6d9eb07bf260af236634f0cdd4a41c85b70bd9f1a6240b5ead8222b08a8938d4b2cff39bb244665420cfb1805a17a320923b65330462875398aabfdf966cdb324ffae97ae6a9aef10a1cb0cf3d8da47643632e0f7f6e4b84d0cb89b14c6bb28fbc7b66ea64b061287d36014d06bbcea29978900092826d908ea0e961b3361aba6c75cc49d52f758a7ea5f9a42c64d32202f2bd2aa47188f45fac90ec8771fa65d6f4e7acc2c80c83bfed7575988ab25a40d4336fd3ed069e16180275a2642487d8d3309110205784a0e925b2bcf1efb13079db18813462adf33ab0e34f9e8b93a6072f502512c9ed8d9789eed2fbdd730f6897af1503b6eb826380d4ab8cca2daeae2f5313165ca2a66b2c8275f96a37995703b0a7615480cccf4c0c25f109c90b84109774c244fa1af175089a6410511b550960d8e65d2390affa27de014d403965c5d7bacb529beb1a32a468fd85dec31cd50dfa57835be277c709e6e5c0a3a77f951cdc707be5746e9a4df056084412ce0b2521c43031648f3db5fb5ded0f1b1e386c7748cfa011641c6d0f40d0001645638a4a0884aabda7090a7c6c88275ec98828dface21e6618c16810a5146ffc2c4d1470eec26977dba918ca7a9c6cc985b4004c91219adac4440d19cbf9796296793c57b5ac7eb850f1ad99c3da3e144d3aff1687759f6d4e9fafea13f169758f3757c48bdf7c690bd063faf4e112e9571730c165378eb4d6a350dfdcf0b55b79e4a70d95dca361702098bb77043189d0dd006abce7a8b4698d381da7b147fba34c0197c70e46f5d2b16f15ed0e64266efb3e5b3e1833cd88bd6076496659dd88f8d2b142e303a3703efc457f3d000704a2f072b75630e480cbb1218a85abd301db1655bc6b5183a881dc00879b1cf0c8e4f6c606eaf6cfec5bc64aad03e30c93587ecde608ccc4aa1bf855d750bea264bf44cb31a1350ae8835694a0ee06bef6446d9d1168161af40f77490861d591f99f14055b93e1284b6098327779e6c5e0e1b9983c4875c1ebd33a1a6b20539ea62c4880053f3ff6b570706e3a8fe1547a4ac435b2e2172e84d42968903880d1ab028b242db243a8995e5f7b136d9940f89f1cd397e26abb293c0c276f91a4c51e19b1840110ecb86b713543674ee81bb96b6f6e116c694b3047a1e89c54c7573cfb7183e005e2d9a8fa1be955907c120738158847434957a8e231bb81e0689a8335e564e5ff59a0f539f9b8bb3382240ded8fee65fc47888d95d255734ac065c9902efc78bd27ef1c2dfdb958223b5e53309491c91ed59192f1ace83944d69e68b34e58f0f34eae83ba00da826c70c38494e729b45975bc80446c36d7d46274ae625a9d82b43b0278a11def770cb264eef6b910057f82df295da308ae7953ae972a33dfd871c9a99e04ab3f7b6bddae47bc64484cf881d54518145e669798541e381c5e0dfbd32d59dd6b90f176c1caaf11225d8f5093796669ad7e04f583aa34c77e786bee3fa295cbc2505aff1a9a85e840aea1e70fdcc4f0626d2421593d1f5a173af8aaad73ea06da50b7c2da8dc402a9658aed5475cc0825d2b51449909deaf0bb322d9ca5562d860acb025fe79046e985ed92d368b8f11d870449c2fbc61c0b9913b5880906fab1a148924f8861c5dbc6f172be0725679d84fa05ab3936e12945520652dcf4c756b602527f0e398055dc12dbcb535b07c59f7efe860bed723816bfb88bce36e9c26b0ee5b64bb4b9115963947aa41308cac1f9284c313a29ec66f763999f67bf62aa36f92346c6d4dbea129c680c54f9e501cd6cb01bef467cfaea365b4f0724b68dabfd387bc9f1545e9a9065f07b2df6a6d9aa602e06aa7abe0bf28e35c726da1cdc8c7b3eebaa128532f45a44f0a99c245fe25d8af7e8f86128ab96a051a1b34c87d729c67db2c1f6b87209b9b2c7a8b0c4009a61d8f5398d00f4bc1346bff4e5503b94b601a590726c281453b45db4eba38ca663c323e010552d95293a5710b5074c71dfb4505b901e85fe6c966df05cd605b72cb0fe6b4b93a94e69dd9bbebf2755a7baf68ffc39cfaa583a6ccae6ab94574c5c09337516988e0e08a60794df6c46a468787d1ba1c35fdb5abb0a624ea64d9adf123183261c12dcfe524349b2aa253f106e0066be297a069d7c04da70a7e3169a1f0a59595ba6d2aef603fbf4f93c3d5a7201566468425c0dc25dfdd705c77387369fc48a4e6215f0d1775812fe540d327c62900ab0be9f25a54f0ab6bce3e233378fdc6d3219f17a5d04ae67031a4583c15f6ca92fd24eef208c5d06bc3c500a9915bc9dfb8689dc5a58db3482fcf6897a44bb7ad4760a24994780fa9a213290fc63b1cd44762d08122e2f218c8c5ec2bd6748aab94471abce6a39752caed92488f66d95d2d1ff180f3bb108e9d04f50450d0d5a088bdb17738e60aabda33ae954a4954277d57753dea34c8767c93d6be0de57e8182b1edfbc89ea486cefb232e3a114df4d32718036127eb3debda1dae0e4e0b26dcd525fe428f00084457cb0a3ca6b5a5127fcc821286d4a96a8e63dedae411660d2bfbe5ed770cc741e428f41bbaba879ea0c41dc360a87981d01cb3e22868eae70d3f1d8b2cf0c6414c07ddf4f258142721932e905c891ddf1b5c2a2ebf03226202a0e28304376cb3e4fe06f76fab510bb5e1c944149eef2a1861dc210fa5d3c67038f7491e2bf2a05c7bf7c40f80cd8ac1f5057340d49c913cf137d99558205d8405e91dfb7b9ab0cf76b4d3267b1fdcad64de0ab502badc7f7622db3be886589078270dd8522ad2824b2f6c6a3a163c40be6f0c5397592d7d0d17122e6897a5c67bff4cf0e1f8f5d0592e7d73438ad82793bf4d3b959fa338a1fe55825d04b92d75e52e7806e4cf30d8cde407a2e9ace23781d57c837c3342ef2587ca91a107b5e7c9249d9675c5732ff14b5974d1141f20e768daf86432e146bc315b253cb7267aa7cc4f5d5738a416c28447f50bef0e1aaf2208a061ef5ba4b1eb9a05997770a77bb9219ee3b18fd29f3cde19a53bcac8c867a131e4aa5cd168f1cde257d7613ae4519cc98cc87b0eb1e64f2ac81a3b7a4117f226cc33aeb0d0777912214a822c2862a09108e2fc661862a1bc0fa73607dcbcc9ed941ee199c5d63a7aaba59aa93f4c13a80e1d35f2bc67cbeeb62ef32c923a7ef0202436850ad361c007eb268dc2ae6b835ce62d5631fd8c64c1d1692baac388e62aa120c8b327444dde557d1c624e6bf4af517a7abdb2791100c5841cdb4d2b5188c9fba541c788d89c388ac9563770471a6832959bd63c5e159c6a6f8c3395d1bac0acf12240fc1b5a860602e451f6fe36e9ba97bda8d2a5849cc9be6c90c3865e95b40a5d70b16a8ffa24863d7282d89970474440ea7ab3cecccf43282c9fce8af144a7be2fa7cbdd04748fd4f8e7c68a7dfed69c06aca014fdff4cbc7de80f45cd8aa7b0796e053d38f674a84bb4f06b0e1c80aca4cdde00d70207491a35f0c827d3b13dec1054678b5cc0f7d6d1c4c405456bffb5fda7a91d47a938e7356be9e5a7ee5208151cfd8da0f8f675e473dba605787feee57a53dd1615a21f2d3551e23fc4056906516b7a8bcc16ed1bf2cfa2b3ab75ef4144631c83e62e0a57986c29f8d570d797a61ece362b986e5ee63c002f26e28ae834ab1974cb4d5bf4232a25fb13e5e06df07a5620ccc9b096e4b595c9c4a6ad6a8011cb674d13b5776ce4c6cbfe6342d016a91a2ce86060973afffbdeca8cc9f117ba89844fa2dde4de3f66ca44f72f7ab4a82edf3902eb305e5419f5eb7a43b5339862ac26c64b6ec1c508744a6abd0b50421b8c0f892400b731246a1a65d2ffb590e3b3ce1be30cef8b222cbbbdd5f7dbd252dd4cb71d9b1eee3ba9b6822ebf8893a57b4a65e29cac50124f24b25dfabada10454f15cee479f1c0b1d2eb3dd2028f7f35869cab4a988e36c21d95b4b86c0c7558f3cdf424bd6732cbbf13b1c922b3c451cf3023de5b045b02378d600da54103659dda8c6227d269f7ed7ce4173356d0105c80c3a8a8ec2050bb546971aca28492a5798d8a9fadfde4b669fa93e31fb9f82ee5fd7d040538fd199ad20a378efa0b6764224c49f065c0e0e1f14e0746f914df0a0508ec81197036a23f7b2eabf362127c9686ca62fc4179b585d558389d447b1f8dce09da486116d60ca63bca8e9cd9f806d5db245976fda1659b4080c5f6d5ac4d044e4f99e7e3aec0666a80614d0ead5b5b645b1327fb66cd768a4a8d3857d056ce7a441c2b0fdc7fb0e5ba957bf1ef28dc34dc98a010bb956a952135f3b2eaf0a1c389a42be3cc35a32465230966ca0e48b8bde7499ea0391707371cf05a81e0d6c8356bc97a643f6aa206a7ab7f06804a24ac90bc0c176d9e977939343007383322d21820da657d47ce8707e31389b60fcd7788f280735750bb0bc28804feb2151f1f721db42a8a53291a1fb2c7a4c648a0bdbeaf865e387509fbc32babe5732c215b3cc71becf11061ca3df12cc46ea678befd79557c4e3d9843cebd42bd2bafcb2026075ace14077c8f89772a7efcd8e04d88522dcb9a8ed24c2f3e5598838c9f8ae0ca01dec403632a44527107ad8c668204ee4610f4e151777e39385cb9bbcd14fa135b0aa5d04ce67d587f7599c4cdfc913fc67b631da485b5360ad1d00b6ae9397f6a3f5d5a80322ee5f5f46e3bb4862f7d9a2e32618057a3c25fbf3f6e1fb14b8e2b758fc0903a25c8a56ccee1a3b5e7405c9742696dd45f8cbc0c49d2a633b497c0e2e3e80b2258dac0d48d565bbc4d4459f931da9009cba02821e5ce74b50529004c017849bb487121768bd0bfac9039c39aa57354777991b71800f4e3496b12d7bd9ab0901f4b8cab8d37cbd310d501ef8ac2ec73a26a1eaa60e29eed78d381f7f9b615c6997b9ead703d36647b48a584b68222fc2a60f26b77c465f2082a411e1b233bd7869e0ae57d39f0612656a25fbc6f6a5c1af86849f96e7efa30b868f4179cb854a3b15e7e854286818785de6bd086619f420959187614c868ba9a89f1659d24b32d0ddea22b2e8640ea670c728a381a82c962ecf97958c55d3a0c778bd84adc8582bc273d5c4348ccc4fe1cb9296f65790620106f78e396e0b08ac1638bc3af611c75af9c3af4a3574f3131b47d1f6305e499c046c4e6eaaf6bb4a1fa50eac1ad3626ca21f234035b543111addeb2dab889a721ca85a9a066013fb143232fae233523dd15ccd3b0d2a2653741b0925d8bf1189a33d809a4c8a32ca7e4caec5f763291de904f4ca10aed04da8d39c1202afd8a4faa36f76cde515f2b782e6f3b522debbbf8fea4c6b177b8e4c1df7b68eb99436af749ce0fb6980a5737410aaa104ce64d0cef12c164f2758bdaf6639910805c0cf407d1e90b5423002f3753ad220be289b11afdcc31e3cbedc8432cec89a573d7275e6994276fb98a916332a001294e312f8e205ae51a88f8ada9f576c3941360fccefc588eaaf58c27929314e2839a449ed41d34bdea10fc00e5c95c0171c2d7524a7a1ca075a138da0b08235a200dbf6537aca74dda83699619e0deee6573c393a5eb4afc852029f961a283b4e63b7a15928d4cd92a2b53964c449bfa1c7598e16e681e09e63339acb9c8eab9824715cfd437e485e063f1830f34921535e515378f7080547c57b59cd42a6c642a3f9a6868278ceacd3aa232d194670a4d3eb6a13dde042fa1b1b502c3dddd5c1ff42b5a3d35a7122ac89fd1ba1835a45b10b0a95720a4bb1aaa834638217b921ac865d29f69ff5143c4e526057dcb43b05dba440027cbe4c64732c4db484813084b5929e766176c0f5e9c59a5679b16492e1b26408f30fd16dc358af116150213dbdceb2e5bb9dc843cbe2fd68b0129b8b5c1bbc79521687d74d122aadf96da3143ed7d0e3dca546ea093a2185fa512ce43ec309e9c80557dbbedbef85e5dbcd1c504f5981bbbfb0027db4de0a71dd841d92002ac80beec9c3a06c550d3927cd0bd047cd04ce7ef2f4707fe52d43dee76a8123cc74ae4d57c9ead38f56c09d6d5274fdd49708bf684c0cf6f806d9f8c68e6aea7ba9eb778745e6379719972d3800255194c298e1485ce0a3ac4f50e2436328a184086bba22be74f5c86b89c43576f3e529be3267e770607801999627998d8332c605113be7142bb2f8f717bf71199d29315f21e68385c0b0ef56c689b0020ac0166ee7d48cdab76dd4907b5223cd890d7268cb762cb981322c42b043bfbb321beae56a0cd27d61223bf814e0771c602cb19f79e571da5b6ef9e7014a5f96e873acc045a165000365347526b03935f3438ce6ca689f7d6e6a527c1fbe6baf98476f2f76d211007d41340b8c320df324e0b2784573f8d49cc7db80cb4e48fcf7068ce6665eb7dbb9e66cec9ff92d23ed8b5d109e2e3f3ba4c581b0911bb5633ca8cd2bd6d404869fb2f28ddf30f014af75959892578856b8ae3f2418284003ed4e3a70de1a42cb4657b411a28bceba2888f76bee6abb16e6801aa81f9d5a9922d073702fe81dc5145f1ea39149c1a8a73550d7f97cc65e96a9026f51d8e5eb6c3a2ed154b5e32f42ad604f8c86ac8bbac64504fdce0750f6e534ec38eab451d1a8b4ecfaabcaba0a848f87ad6e125bc50fe5b870695cd0f63e32da33f0b6d1ed5b4e8f64a6657fbc00037eaf7792d32fdbf97c1a4187ec4ce5342d20af1c2215e8738cdc01c1b07c4fc61aeb80ba780d67e73be3653ab2401327e5fc12f49f648922c7d35e76cc0d25ae22f4f5c758cf2431324c80d3706f821b0928e236c780dcef2251ae9f3abb826cb728785470cd2c48394b86839a5011802ca37118fe5b31c341563b23feac6e0e1546e011f6a4270c7571a6a38ad8db2917c897eadff2ea4b31670e9877b9a6a6238ff7bd001ccf7b631d881600761b5d6f1f32c9b642d9997cca790aa23450184426a196d6f30334b28bd755ca96a6138259159f885373974223784081f95852898d8820031d09e95de7bb9eb67401b359e8209729f016414f7030f26da87cd8fe1c71fac6abf4543972cc6bdcac084048db52d67079b8038a3ea0561df9c3aa9d94b08724d636fb649d84c055f7e0874a54cb982cff01845a31d863ae56282326c8bd0db9098399b98b183d47e3a4a926d789d160e8de2e726a935ca2f688596c01a057a89e205b984a2b23ea4bbd6f9242d27793d0c5d5193d5169ebcd32eff60411f38572d145caaed7aa6f8e2a92b03c05650be5f216c2a06ff1c79a19b19472f07b755bb3e30eb46cdee91d6a83083bf9b74052a5f2005c5b461834dfd61d7fd15a28629eb81ad18d0820883f0f54cea29ab5425937d38058e139d58153e5489f01c3dda9b3443138b207c0dfad24d278d1f6549ea97824f049971543078bb1a26a75088afd8ce2566fc20a776756febceb9acaded007b2bea066c00ef26b7f7b65a2d3061c2afd38417aea0e172d9af44cae614e8d7e68f20526df80e5d8127285d264822de571ea6df86f1ac6219861cf0c8a21ff921b39a8183b1048d516d680174fbf0f10c34c5354f6cc62e767557d41e84295472e3c3756ce99752fa81c7b13a0198899b20db52af519b902a2af97ae7f8bd53041b6d30bde3509a87dc62fd13a2a579af11d0f9dcc00aae5fb13f040c07b4d130514fd97ceaae30dbb511835485d1f8b85c4e24fe04fae47078bde1956ce8ce28abb794035d6e6323f5dfff00e97b374d0b455205603089f43802e0e0b24a68b7dce7e3b85e46c60a62dc40be11ca989e391834d8a92622cd34220423f3de2f1c8eaad322a2ffce69b7f1310f423ca2416d120c118972f00799c8d2f6fe509c95920b9c7f01a1c08d9d90dd67fb659c7739668f215b0506d38ef401306437d1d8f34a12981a2c0bcd87fa545b880d07999315be4c114b1b5a7f12e0d570b30cb044a31623d0c49e041c84045c520bad4344b1436b3bc56e1e6115bbe1b6b5c172216110247e41d0d2cf798c6f201d10c3104a7f26af1dc9b648f51198c6a2ddba635c937357fd627f69548ea5fbb7ec33bea1f5d24fa17c4fbfb1a0c2b0d38cf4c7a1cc86119d72045ebfc1b2a08b23fd0e9dfad344db81607e93c49252f0aa61c0b92a697ce6a03ca8455994f860ccd92f9eb226808c005de5b09794b29226791bfccbbb3b85e0b55ba02520643929e6c961d0f8967409691d418b2208b5c18b820d192e894f923d70ab7a9e0ce8194483409d5369c3bdc14056ecc681115774067324099b03519f44ac831671e4feafba2208c02393df2864a282c073e42fe1300d0f0063dc3cd6bc8ed43b1bcc8984a84ae57181a3e4a928bb886806becb156d46d0cff46f034075fa09002e6978d16ebe0a39a14b8b8116b1a102bd6e3130eb397c63db46d32e9694aba96f7b2a04ded61a5672766a1391928fb02cdb527bc5b286690d780055397fc5158876929ba0a887b15c012daf440055d3b377dd68e347baa0e8264187ed2847478113acf69bda5d51a8e9e7df87a52534136c10625010f12185582d12cf521e800372ea452a0248be8ce4db284e20f823e16f3662b45b6e6d21e15aeb641df28a5149bb0f42c2c229dbcb5a94e9f8a8a0c774731c442c4803f1f5c2f5fec508034a053126e85664e68aec15cf4d05c89c83c4a4bc32c8d57af35035c8d220416c1f619133e7f2fa9917d14c34759e8dfee4732c0ebf5b2f69b6aef8f356fda812ed1190f4d9cc7889262465beee711d81e7aef04c00cb5d36839c758f8aa9528cc699fdfb571b435e8c307fa3081ab16c5505315b11dc6ded121bc4b976b8207c6bf58037dd36dd0cf5133a21fb122057fee02b13429c05434fe263a627e2a5120552894aebd1d80132b3a37532d8fd9060af1e6f38064e512894a0a392d9f9b3d00893c9989965be252664d53379709d0c9884652ea3295aa4c666e898faf6327ea2f2f7e8aec7c4a5be237f40deb8c23089f1808fc0433b48bbe77bc14bfae61c90d0805f3253b98e992fa914181b4dcbc84d421ad4255121d14712f3fcdbc6b99d0d24998756eadc06098376cc6977bad12ca0e74cef2c4b1088dffb0168461af0371221b3dc7e6ba637421c155b5adfd1b287cb86f9549813eb481a2320d14d53d6d24a3465c18f1d9170c1592b073ae5464f9f6f34d59e11d4b01dcee3f208aed8e2cae72535790176bf56d5a31569a083bc131f41731268fc2fcec4fd7767d76292fa0ff6b3ffa4dc0aa90b88629e4e3fcf40dd3c90e71034b813e9061766cb09019de20aa1365612a79a0ca0b17247a06a2da43198170061ca13ab8e6b3a6781cb69563047103eff0cdbb7fba01b5dda96d8bde4d00613927d917b0b1b951f8d90023f5ba55b923280a2f85c9f2d728932e71c1b700179768c5cb9b033092ecd5755ca559f16d55af2a513a890418ff4c2423cd8ebad8ab2bb53ebe37a9e092cb25204bbde855261a7d3befbe36325689ba1e100612f2f1b05eeb42efe676ce40a46348cc77511b3dc4a74f94a732d8388ad2e0e2cbc631186e15a8e9865b385f36bfadb79a100e8b5e4df62dd11ec6de681dc0d1c0af18523d499c6657eac0d648d95743ae67a636128db02c1ad616705f964a9760e6214d4e6fbd5a23933a88c0b2c07551239d86ff1993908077d6317a8da9990192e4e1e3636314d465c02264480296da4768c67fdb3dbbcfa0d635875db726f5d7f9b3e57bab49a15587a19b603ae0e6ba2cd96df72fe23428cc19bb0d09267996e006853f90ea5cb28a9aa479771bdb7b1c31968f302b79c4b30fd1be45285b40b0c18d826b30bcda05b4010fc816828e408cc6c8aa7ca962b4e30990c169bb826b51c79ec8093fe379edd2f1783c64a17024501ec2ff9255a0428dd017b61072d52be29ea26c0173ebee54d7a5596f8bd2299c5ede6e2eab5eca00f3915921a89a797893b2f2e3a094a26b80d382dc981a051802c85c64b305648afe7df5aab7153d4c8f549b091a23c0aea4a12e3816192f80c146041444206da017944142f968a75d3ebefc251958ebfdfcadea7044f7f552019f0e500033681112c189c5dc1a26ee24daf415160c4190eb39448f111f230ed4c5b1942cd6145e4058ecd47bcf41f806c585547a1785cc7a81a0916521d2b3526ebdf28282701000307aac06a18bb89b7b396318b2a263bf2e966fd7b234eedf4fc73a86f50ec72f8a84567861c1212d6ad9f2fc96c9174a38985d91ca9a00f8d963ec0251fcf96246f6daaa1a864eb33455d0930d8a1223b4596437d423a47735cbd5abbc5dc3ba8683f7d978b0b5635d8e7acbdd4beefcc428ce6a63cb90b3021cab9960cf400c6c51ae7528ca9e97722f972068e97b23dba30d9ceacb2eedc5913ada228b368baa717fcec8d30ad079e9f0b0b966dc843eba2310907964c846b33099ebdf19acd718efa311450007702aa4ec139fe5ab0c46ddc49a96e9b69783483dd928850550158e285f67f9aee3a6cf3c5845b7a6a6cf2b729291d726bac63027db8811361bfaba3487c9c04bedf50f6caa94a0c24ee05ed3af54a0b0d2570a9a48db2562fa5d61707249f676a449cb7b3abf226372a8d546a78a9c8adcb07337be46554853697c6796baf77eb774f41d8e92d88358d86e9be89a853454754c2b6a1f6726fe95e46793b6a94b1d4bb7b314a06ea8f748e7232ea5f923b4a8f3d8afe0ec423a4fc51f2400a4d2aa4786c652719c0119372a5a809334ce06b862f64e06aef332a2d5292a2a32c3222fbe33dff049a17bdfa90fb470a14bd6b61292805d779426e59656f43d441dc5fe28df8785bd9b581453dc2608c7998659cc2aad27a79f2fc88bd80fedd89cc0d32e2262e0b33b0936742c70daad488ad7e94eb18ec2eacf5a990637c7e5ca47238629162372c23b69a0ab425ea81f88c651b82196a8989ea0d17ccbd7fd42da3935e57628f70ddc21b885d91a8cc4a189c93cdc1f0a504b3a5cb88cc6a1fb16844ce9e879f705868492576bcb91567c4626ae4d914dd319093461195c113867ec713ad11037e6ff6bdf97e97c6c135ab33f6a388f168c45c71b57a3c2bacb2c2705378552c5f22ed6242216f559d5ab2d4096659ab6fcbfda78c30035f1f5b370e4bea051430362535a3a50c1fec2a6593310887104de3b2e68e60c529df263cc386733a0188aadbb9d67d248666c569e6ef4b310529c236c5ae613d2b6c0e2673b8976fe5a217c02b3fb00017fc7d9ebf7baf18e6f1c5f255d21e500fec0d285980432b7b474d5a17eb392a2b8de60c4d81c8160b7982271a2be0e1e3e87e5c1162da78cfc8040b674fafec945432b797814700d5626592014fc3a92b0ade548bc9a3e5595a606b382afc236d26b6905eb0f2a9823f1a5730a6d1fec63d6abf3a7f25d83ff37769f93e7992355f775f8c19981b0de53fb6654f27677265be7030a5e70bdc7bfd816b0d7fc26891646068df2ba0c6c12325925bdeb92014e753efb669bc2a83ea19ad0036fae9a80b354429982a93d9835d84139d8645eb3e25d5241c9d0081abcb39e1531a3f9b5d655c7faba31deda3c93d3714668c8b5fe33dbc87981bb3a2ca5a566e20c010f7bd8586e912ff8f251ec084ffc2518fe43d218f4be95f54f015bfe404a2f570f095004d897a6b88229942900ccb7a0a6dbd7122c9372a552593afa2218e5f5bd2cbbaf5136325952a3432a767be5fb09aec16e1b8f1cf4b7677b1ef0a9d89b3ece8d16264badc0bd5d72869d70a87d08604f3adc18a898169b18abe32de71adb016e5d868a53cb7c76633341a8b4657838bd7b4f0bc6b940fe40fbe27742972613569d07334b5be50b7b06860a5260230b1e245dc851851c691d0d971caa959576c6d51789606ae6b70e2a56b7cb8277df3f5194957da02f9434976aff4a40e8f7f15b0d5447eb7e0c870cb4443a92f4370728bae3f40f7690d210462127258ccd5670fba068710b7fa18debe25c98576df4a28349aa4d4d9eb20cd742418cf5673c646479299580d35f10e105726e71f331a28143e232de7dd8abebdca700eae3587464983219dc8d65276afca16e54427205d7cc29566cf684ea1ed95b4543a5e564acb6c9776ef89ac4ff6e526a3ccacc901e357bdba006530fbc1002a9c35a4a1c2b900d7502eef8605a0a508072c4fcfda0ed94d757b76a6f5bc4d6a0db29eba9225217fc3c104209bb35454e1f74552c64d4a39fd45c595a5efd90c42135a3806a334d569c7242a322e871feed9b1e4814351995395c9d5869bc2d406e3ca24e7b91129ee064ee8233dcd27e16142311d2866d6b1d6e139d109d8bc97c813037a7bde9d0a412949dd47df12bb9707d7424c30e2db285dd74a8eaa04fc5f254f11182b16632ac91758774bb69a35ab301a1efcb8250a788e2eb4656ca9b52533c7a59bac42f5f5bbfec45dc4c77ce6f8590e6a0dd8a46c9f674405e3f91be0ab7b8cc6840027de1d7a1260aa001827678e64e7dc41e02f95dbfacaeb799edee98c3d5d30e820e029c4edd5af44279931f0d1f54e26cf20592fc5afc12ad4408346d85055b79d00c3a36c8b0bf430e4dca0f9dd11ba801c4c37caf62d0143832c074e2f57514e6a663daa6178de44ed076f379f05073b253fa5a9809f5d03fb57891f9b1ba8425649ec83dbce7b3adb83006385cc9ddf0f3811eaae8604619c4d418d042f9297e672e3010c349213700c45c52fe604a5f3f2e55ebb78f0f3f3c6e6a512c58f6b3643542dfb43477382dc08c8e1c929572bc91f53d4a75a9ef0acdb8d6fd7254d0fc01aa0f5919bf28f8d4265ab4fe7ecb5936820fafec12f10051e9f0d714850d85e544b453c9caaaf8d669ed516cd652f8622f4359c1ac12c53ab1666e2f790deb344fb9c242edd3c0b2b977bf5ad6ae1490c776a92eee867f5fa5f608c01969127fbb8123723e498783cbd53fa4dc6108dc73b8c4c5ec7af1b23ab0b1f6b4a046fe72003dfc6ac760f596a882cd31855fd697c32a1cd6724098051a62a25d80d057bd1999972a3da39347619886a8d8337adb67dd5c454c029443d0fdb3c6794c1880de3cfbef6f36253d4e0191a0dbea0a5e8368b8dc4d65f4c8230aeec9aea243aff22c41e16c21aa0031e8a90aea6897d4e085c386ad979f1a8a64b728a26046d1ee5e8469476dcee7c24d43bd20f7eaec6ed47cdc6ad6e031343c3252e75de047bf032ee9b420834d64d0627f8c5eed466d4fe01a567144a38a4df72d42dc3a5cf7af305d95b25e88439b2ce6a8406f21bfc43bbb8d3fdfabfbb8aeb55a41ca55aa5e0a462a302f9192d2e581bacfd78e8a29697031e252383529c1f828141a0d15f230bbf72c74e20366bacde1399dfa6059a58062067866291445787066cd64147d298afd160b8be34b8df294a15f12e98224abc28bed18c54289a8c8ee5955818e89977f48cc6a60eb4963a407311f0dbd834e315adf8a9baaadee7fc46d5d44933c0a55fd85211dadcfc965f26fed2fae03f35832b6a931dad066a6f2841ee39589fd245016a033f09ca7d66253d7b83c30d99bb6e5bc4f81c34f05bf52ae10878a10dd655ebe32e1e65c3198773cc23c43987d2418aca443fb9f36b36f02d7b72488b62ec0d71ba68ff251d1268dc0cf2ea115b94b68449c37a812c65cc6dc54a6085dd7607ee3d1bc74f47abbcc5aaafae897a2e28caaa7b5aabf2b283c3c4d0b65d8f19d93153c2c02abd3fdd9d13c28e4d61042df6e70c21ae4903ccb3d3492348919b7d90d7e4979461a844f4951283e43a5b2a9663dbba8557151b33fc7e9e442fb1cd5961cb62d1762e18612d2e2088225eb1a296dbe01613b62564a1c894573e957037286d82356df94aa52fb1c902a59c072c6e66830ad37d7f8e0c81ef9c6302b0123b4d17d2d408c8d34dc86dfdb225f13adb91acfae31f4e994bd4144aa69a97b942daa371814c2e7cf9c4fe2f027886c4745e6820ff5f0b88dbc527b295c0311196aac86e83a177468f5de6aa0c855ad72eaf8d59aa807d098753b3632cc62d4f4bada8c598455040cc87eb6cc091af6b087f399a7ad121a4427ce785c649d4041c09202810b9c6b16eefa0c43b3fc4ebc530f0e7e591726c337b63db44580b56b715047897cdcff2ceaeae2b07d69d7a024adbf2abc6a80988cf13d85412c10c229928a96fbf6f3f7a8f490522c6b950dc43f6a0d1aa5283847e41f07394523b122eef56d02a034a3cd3904f4b98f8c2b466dc10957d2ac484328995821c21d07842e318c77b17536a7975c1a29509ebcb6d09a2dbe836c9d0eff1262dbe3059e525112fbaf7088ff5503b8b5ef1c256d9b8bb5c33e9454e8809ff1e935e6ebec69c5b07809c7ee3782e24f237519190fc1b6a0c9c2a37ebff9deb08d3b2294dfffdd2ef40ee625925c010839e048e82e8549485a62d518de9979783444261f90f01b57069c91a16a9d4ccd557a489ad7ccf6109b32367012d2d00143b390d030bfc8f077bfa4ece319097d1d280234df1a7a592fc544e032d9a5883747494b4cff5a4a51519d58b52da24b429fe72283ead58fa1b8120f1e7e91aac734b8ec8c2bb974b9fb7f996f754bf550ed6eaea4cfe86fac5c62ad41c788316d87cacb8cba4b42ed8fa4a68223ffc2473894e426c79c4bfe2a26315001ba75a9a3bdf38799db59f07bca46759646939cf730b42c1a59fbc9deabe07977034a27c9cd2dea3eb048b368e163e900f3df6d723e0a05ad97723d6384ff2c9542e677570dcf8d6825b36bd345172919eb6ec31b171665327339e3b8f04843c47dffee10967509c99bee894908e1f3a65f182b9a4f3e14a84bfbf7c51f1599a966b2ec9b6ef2553ac0a5e9158ba1befa8add0700c95dc076ebe322cb9ef8d29cc14e0fa9105453c615badac5b084eb2ca99dca91bdaac9a1b0580b284eb30a85cd1031ab1734b4478073100885a152f6dfe95a66f696d5da0e7a841dc3e05ef7074d2cfc29b22c0c684785c6886031e3c6a3074b314cc97bb460d6b97f4a4b34966012607b69574b14a106856ee267e4c67c553047bd1d915c0f70b6aa7116db810436dcdc8c9831886abdb3deb23df773d922a07da29f5272d8e7190b77603986c0a357e3b04a5e975e264506f9f123e7987552798c7ac8ed02074333adf6347459ade2bb5c979a54af94d9bd77c572be5f275ccc13fa8d1f8a2ea1032a474f4079a36c5ebd823b4031e45d29de69b60137f3aa4f58fee2d2e51e4c0a5d18b94b4aac7f917822883c4699f869f1cd17678b0eea7846f3c3779f9eb7e2a5e32999d47c413a1ab310212d1b097314a4b90424db3c027cc3ac3d7f29c0afa87d274763fcd950eca7563b20669d5803bd30f59b20813ae7f314b0c69b4fc89b9e0de3e5927c09b844cd520615c9b3624ef30f702ce145b3a5e849a01bdaa08c02d1c9b4d9665e9d9006c5f588ab48f10d07760ce65e2c26afe06bb0fbd83a6528757d6be056ff7a5269cf1c4c55e7ff4f2908b20300410949b8ca253a6c9ce51b0875269a59e8d7983d1e02f87c0a613a82019b8bb0cdfad3eeb449a7a706638fe79035957ab2377907fe711290491c0e811aca3aed5ecd6a8c4e8648ce06fe592091895e054c68b3987f6548286db05084e72498d33aed042746444521907f8004830668a666bcf5c228c33debb6c6705982a87831679357a0f87991ecc860196c4eb521f7121769cd2d82cc66f5229a31fcb0c0dc9c19ddab39bf7b161936cc787dbfcfe30421644ba83ebf87d52b37d3f3a3b52ec1af79c0ca381351553e110ebf735579ff52f4614d4ebbe871829eb167f3055058bc4722c038743950cac9068972588d25dc91030ea68b8d77970986c83f550bddee28c17d7236a0f9914e3d66a1ecbb64e97acf6d733757170521f3b9201d8500a5c9bf44963d6b8631cbbc63b91ca0efba96ee4e56daabbfd00c459f206c210d08b645a98c20ee69e819c5850e75432bd74639e009fa3c027d60b5c1d24568b03824c888906d2bd2581c4b8fdb69c3555267a019e93009922b6e63c79ebfbda0208ba0007d5509a1e71761d87c43d026a5a906d10972eb86ad9f5095e8aa13611eeec0550a53e204fc2852657d06bbd48f476804a2f8873382396bda351ad647d83326717cbff258bfaef2b65537bbd104c343370f909028eb0027c80dd7cdea76a67e3408d615e636c584eec2521ee6606f9735010a0a38385048d074715ee0aab699aa2a406a84f1df9b660545e8df0d79417a561295769b696066224fb93f87c8af80cabc7120f9dcfb4404907406eeff13cd37145ed93fd050c9c06e5a405b2648560323b0a37f1a95cb3d29401af16a0865d44669db7794b8ae14be027b1d9c195c8702268e227669785a25d447064604e5d14eab9f4d39b09e97d75b9be55c1d3121d702d72f0f05ba787994671dbb3dd6f96635b2abe993d0b2eea55368ba3f6443ca6309c1fc3f154f6bbc59eab9130cfaf50712b8b1ce1ffba8c4eb2028f15d30c1210065324b8f31a0fd915472600ab7b01953e0d9d8f26c8f9a601c34aaa178a376abf625e96f00ea12b0f1e36145e8f52a5e92ed0ef055f9741687662728b582ed82f16a3db32a3063e5369b63bdc46d25b251bab2d7755334cd4c903047601c5229fa86cf67c4d9b82cd97fe70b33adc989b2c9504ef1cc736112f1a2215afd398b24b16fb50ca585854e0b52e0abbc308810859b21f8370598a0d3bc0cde6ae2bd3d0d46fb54deb9cc5f93710b9ee13d4212c6f4024848137abf32d1b1775d7be01d82852087f62bf8be3f90607a20171638f67cedf5e415a6b5062212b5d1b13032d247b2464cd5869eb773d91f1d5f21fe93b5d27454b0201b816e8015367caf6d6b1f5fbaca7565a1ab1f0c8532b16a343b58114808a0645fce79fa3f967d75954bcdaba22eb94fd579e01b5da6e12847d8bcced6c1133464d9cd8c595c9b03d459b93b413c9b490202c4567264aafe73e3b6498a239a77ab8d76fa2e3402a33d52eecc643f95c12dca5f253651f0553ed687aa2bbb15af7fb22943524996d0b61f6695b70d478aa03af4dd4b2d4fd3d46b0b734384bc710e37ffa78a470fc8e79b7a8b8f6588c81b594304e73078fa5ac124a28f743cd931701d23a2234cce2cb728b3f7f26b35daa4454dd4b867c4f78633b54a1739fbb489095c70a1f9c309eea5da66b254ea55cfa2c6bf574c279f166486d2202a1b76d50c1a9c8852419e9f2955f33c992f6eb6437347dab17a3893bcc5885f99502b1a4e14d1e90ff88d7f02b5dc61f35ad67e5bb486bffd0376fdf4a40b10101bc61430f85cdb762260f570375e7b358a47e91ad6d5b573d46caafdc9709c9626adfa01da0b58b747494a2ba13d302afa92d8dc73146e1592161add350e5cc1cc5f2de9f85606aaebcbfa1edcdb4b4f2bb5e93d4b8a4fd05c9cdcfa0e7948db327d7f7770f837849d9157c67436b3ac3c0450b8851ad22ad77e0e0486c420e2ae9ddae0043f4d20aae245763e6cc6e49b233955633628247659b6df0ffed668b22852bcf43b563615bf59df17dce1997600013d3682e8634cd62b8521339808bbd9e79def65101c4938df96d060e6f54eb11147fb07e13d5727e971f2807019d92820f96bcb5cb54ca553e1d4e88b01dc5bd59e2477d0d130525b0fab3883b9bf60b105ba735ca0ae134e30825e523eaf120b4b4c4737e7aadc4c825a3d9c3567681cc7feaf6106a1b6b5912cebd489099b5a16bdf9a112c9e6b54ca99b19eeb4fe0ec4f26ca64cc463711cddd131306dfd32c0b772dc6ff9cb3fc7e713285f34b4167a054f08c1e3cb154ab9567dce46125055454f84222a8952d422e312aa2821fc04ad3f8956d3fc44f5398352bf191916304abf73a01cfd0e230265f9e2f7589f09a55ea5e23957da2d244b249be6fa5b3424209841ba61382267642b821148bd2699285c114042d7e200550656bc2c88f975d51293fbd81bc88f6e7c592674ae130257bb6859a6a2d888f188d2645a1c6fe6488e163f2cf956cb920521cd848500d75d420550f213e247164cdd958db2185af65c2d98eb0e39a616878405a862f4786c6964521e7e53ef749eb6f4dac732497fa7b7c42f0c939e28c81e8652f89ac59697d1d1e4549073cb166fc3e687212c41e8aa12ff8eec568c49de26c7b5384bdd992d521f52ab180f79e420b4471492306af7ce1407119a62bb620c2190b8834aa11d7485e37539e02e36ddb741715d81d46b81c64aaa31cc7fdc631a2aaba4a617d75c65ba54469c103191d3f8bc3e45ce9c5f808ee0079aa0acfde112cdca080719ceb44f3ed90fab8b0fa4f9423e0aa60988cf9762ea9c2306ba55942a47e0f541d9c151629548f854f7110abc5381f12929d1e4851894dd4741fd346739f3825e7af39f9d6e740aa7084cb2595f43f326ad4595cb2434fcac37fa18a596bb896cda0fdd06a1b0668d0fba737d993e7c02a6cf19ac13c8bf456e6cd35fb878241c66fcceb6652de70a0f91b1db2f7de84223e9b37a293f4576e6e6ea3393d92ee31a30b5998804b2b994400d668c5e26307ace913dfb3ce222a1c56e20b8f01429598a3e0cb062f338f47c108c71ac11b9dc356afda20c44b7e0d4c9f3cd29744a7ff00610a2d947e8d57ec67822eb50256dcf0bebd8d344182d0bf7df5ef3982fcd9d58ae5b378fd992f5386b409783582d41dc73ce68988c049b62c0b9ec26365b97c740c4ce6c9357f36a97d1d02377eef6a4e4c0be1511411c4ec2ce263d7a27ee53187121e0f52aff9a029cee129df05350135c10619c5a65bb81e056a82c0a2f323c1a51b4fd9ec12a7d752cfad5cd5a71dff88f8e3340ce97e0fc91cc5465337bed2dd3180b79073c7ad3d186772dddaa122bd4bf4ff8e09b9c18a21135daac1de107524f17dd27c1f528ae761254f1570995e953664cc4a19ad76b10e4af9d9305b1617d9e67c956357508171ab1222c53e199ed653125839dd7c39ec297c0e1fb8da03d64af0629e540012c0bb49e98b31b07b0c15ee43abe7483d249df8913eef5d82251001fe9299be8c4805f0219cfdaa190b4703692a891c4b10d050067a89fc39fe59284d179172bd6fbd2c3d19bcbd6a4e4f9f8c38f1f592a00ffc8f5a9038015d1427f8cd9070b4e7fba6ac1581884fa986a69a69af14b2570dcb69bb1283491fa7d79069666575f53041ff90294710112a9a68861254248375007516d5219f321c7b7396ed8f58513af34ec7b6ad157f9c747b64ea5820f11bb986f6618a5da4b32d0a89e00f7b104eb2e9c64cf48ea466a7e4f98c830c47ceb13498159b03167055a2b8ff6318fbaa266e781da4f03a70b1babec9d5f40180151ccaf35f653c90114c8c8932a0a4a005ead59a9fc7838c158444be92d2a9a243405e8123b1075e0bf983443a13af570f91615ca51c8ff29a1bf020d1e108f7e1052c99e6242e06d29ef40e1168fb2df571abf73026424fd2e000168747a0a015a0c588dfe7fd1aaba62eec60b03b5b3d51b14fee4b4e5c297a2e290f3054d7df143c26a70b9db01f7eaa51d00edd878f1e5d91960d9ad59017d1d85f56a80858b6d3b586ee5a624af45b47180731369667b52bc21eeb2793747f26be71c266af3d2a51fdf9c120855833d49f705e79255a74e6b9d61a5631b53a7577127ebf007faead1dda0b9e6d42c81e7ac591255a08ff0b276b99cdac9487ae5b7297012ef3f39f1f5de7b34398eb2669fd2c74b485a4dee020f4a8f17891ea916e908a4ed830c15cc0103d22c2e22a2f84012f0780c5c0db4f58dc2ed17633c9aa14efa137c7137da78f48529bda779f05ab733bb0f7a5e4824bcd9afc7793b9105ba9efe6a06d1325dcedf4dbb8615f386153fd49be3b4b90ae9f402282fb3d5defea60551dc7dabc27f6c4ab8de5ba571ca4594c4dda5d11526533a39c7f9136e6030b7765849e17b25cb7701444d16b66a7005b458bd6c417b0c456ba89e57b9b6532927ab288bdaef4c89e2a23b75db95cd1cd304488603ccdad90c344d1ffd61d8292a3561836f95dcd14a0531193ce6399522b1472bb5dc752ed7f4c4ff50d56a7692f03146e7953dd69ab997107167cf9b678672ef378b90b2bd5d97187e2205c78ae3fc7cb5cd7800f0e1a04904b2d1076d27d458e6a8cc9d1d8bb19985181f9bfff9db78cf30808eb65ce2d1f07ae74ca1c6a82e8d3dadb40d33f9f1b21ef331e4a64d464c9c4cb6b6ee2f3b3032026387608fbd8bb573810c5d6edd516395a900a7cdc891257f6fbf73f750b8165a6b7bf83f0fd4fa7c9c065d94e7f564e089191d568780ca19540cacf43e842c7cb1e48883c3118601619240be743a8a33738876d2a23a9510f3c11282221351b1f7521d3bf3c13f0c875a0b943499b6123ded48ff062d4f255b3bcdb69266b2913afd9353f819051f73603aafbc3144bbf3ea7fcfd77a7b82c6410aa0e90c03344e6073fbda8b598fc8cbeae1d1b185c6ce006856e1eb67f6cb80bfb6c34da528bc548754b47d010610e48767f8467a0035eec60a1135905d12808290b2ad9d9ae358e95910e2ca489a3dcb1e5e3a03a36aa14cf5ed425bdef3290f554ef63bf3ed4dc3b7adf4cfa125fc45021656c468314744c0de2941de543664a55c2f6b602c11c91c87b87c6e64172f06d4ebc0591b1e71dd2e786741b99ee9d8a559842369c8246bf340e0e3c82ea27e35437d10105cccc06a39e36f39bae758b01664fd5b9598d57c4ac4e9db0f1be3efa9c95e28f2838c3a756dab8b828bd3b570cc550f0808b4344ba1c47275e42421389223e2980e20f55f4a797738387b311bde643f5a022d9bb6b627b63fe6058da3495ed72f456c6a2b719c5d969c5d5618da18945cf392e9e9996beffc62a9ec8a28713d21ca0c8cbc3438d397d8b65c065a6dd636ffe8ee444b8f760bcb3454e2299798ee0c22632666fbe85d62f3f42d2cc8fbef5322010367e3a49ef0d69bb698d737843638fe28bdfc489c444ffe0c4eb0df57b2c9169d9200c5e01b4f54fba38c839e3c92098359b584ad0cb6cd3570043f10491511222c3c6f177211fe9d70038150829326ea35f6ed05208ae17cc0339389c044aefd7c099a6f41249ccd9b16a7dd9c6200714b819965ab31db6972b7c63512d1884eca57c39231bd255122e7f51e46bbad0d733617cbae9272b45398aded33755c45973b9ed5d13757a2e0fbfaca1511e6a65c12fe6943738d01f697de4c483d25e4fa7217709691b9253e98fdfbafe60ace757bf55bedd99dd2e93cb34f15dfa526534c5c12405013fff6dc389de1e1f3773b54a0cdb0d4789dbe3d03352ce85e37378d701490953c7621d87cb407a3547957be36a6be6f662a75d9bc5b8292eefcf7cf8af991139b00c4aed9b80814798aac306dc79f721ee1a523bbca7ab0d71e04da923d30b98af370c2cd8f5772dba887b5d755db0b5a33ef1847375e0e255e5193d352222a6bedfba43ffb4e760c85f46082f6e43c688e454ee9700f540b3cf4d3bc6b57e5a906415d51102d5aec155b41f68e3a0536be7cdb1e74dcea42847cc6e913f66562052f57eaae4064e19d87dbdaa55200e7d33c05ce30a7e839aa8cffc533ad94974c2eab024c9051cb3a54eb7158550140812e2805c38d49844ab81cd911734e6da979fbd451ed6c2d3f34e7ed85bf031af3a7fd272f037a41513dfcb333f4f9fe89eded68882f62a6eeda40ec8bcffcc4454aadd90a49ca9ff7a4392a302b361a99956edf2cc09c05b79c1d0675397053c2c9cea2b94ae865ab60ed19488d9c0137219e2158b4ebae418c4e6d04623e9ac43998f9b9616ff368aac30cb58626fe9d1fa21ce1219bb92461e90688c7dc5fd06822ac8c7fa54c639d42769fdecaa5415c53cc424642b30f8a6c70ef982485f4f22d64c5f652c06500fc1d550667d35898859ab43694ff164b8a99c5977c0ce42a8de03d5c6b6d348fced73d61fe62ff41e2b56e3941e330cd239d32c33687597cc88cf090490524ab05a8cc0865384c0125219ddcfb24e0e02437bf9dbd75fe2ddaa8653aca79e3024e25f3bcbe1478c03b8e8aea1c499439b1e730da59251016c9703da6e6a7b5b30d03a4a07252eb398109a9d119cf7c35c499824b8c872d22abcedd7b8320d4cde39add325c857f921182580184cc73f737526fef87e7668851fa33c430507ac252b6882673bb061df9e27f2868ccd1249c896726fb9a5942949199f078f076a0734b41db467744b9cc2946adafd0cfb7b3fb3b64f0f35fb93eda96faa4683256434d8b77ca8592b3b46a21334cc99349eb030a73b46004e81f3b616019a7b6a755e4fe737a51f3513ae6e4a7d58a5c6834e4e353b1f3ee4b78081ef077b0eb05127c9cd8449e3c0e64e4878524ee53f9f7a77732af7df7eda9500733f5535adbd732161a9a2cda9e8cb6ffa33cfbfba5894af64f8cd556161ce4d15f8d49fad00c7b7573ecd6ea6eda07fb3cf32fbd95feefbc9b7b1b728ee275fa8ec67f63dded317528c564aa9f6edfde44a4f73569a87946652aa9af3a7765dd7753dcea6eb71be2ed3e4aca5dc6764523a2106ebc4b1d13bd74b2a1fa79ed29ef6e02a0bc2c21c087b87d2df70e8e7784fbb9bb2ece24c9c16afcbd68f17cda14c12cc922197324cca2893211732c2e4cf01640091eda90498fb3b49860f6177c9f5841f5047fce1cedd44813925c0ec9fa37754de4521387351866f94e1473264320d354fd85efb9cde76df1663c4e1dd6fed7d215bb6f69ab8ef275ff4257df9b47bbff7354d6af627db69fa36fd3599ba9e9e58959f5c354dd33a95e983684fdfa43d7dada37ffd4f6eeebb96fb8c64fb264eebeca1662d27e4e6ac6beeab44790ee579cd2e0a21893f59d3272729b91b176029b99f3c6f96314f2ae794596759c530ecbbf6da5a3fabdfe3d875c110864c182ac824c95eaa687253059eff3fd95e1e357d9db0717c15b60771a51aede4cfeefb6965fb423695b43f4cb27d0b867e0930d34ea57d10fa386bdd9bc12a13b0f63f5972dffd2eee8bf9e2eeffe4c909b9f976168bf801f692b3d8f778075b09de8044d94abe56abf6200b76b0064e7bbde38f670f5dbaa053af4ebbdb065c932117324620bf20e38522b02d43c760ec450db886b982f0cc62960185144cbf5c1fc056093147a8400741ec80312a338b1ecae8c0890e663075e141072f28593a735d18dda22051718da530300da3a59b2530a719451c6d4b535c36461cd1583aa5522066c6920a4e354608d92c09516984104a2df5804215d1aaa9ab25a10c5f5c2bbe927445a97560a6c14b326827235064a04c4404e12e505a11634e57dc6b54648aa2da1404694dd86c08a13b8611a81186e83246156d84141c8dd143368251d218398c50c4d0184b4620a28b1838a819124306a8118410e389d308412489b1e534c21531b0d4118e6861b84529000f4be09b21972f4e98f9828542c158865cbe083181f8d2838cc1971c260bbed840049e91211716949184331b5c40b876f1028c52d28235279cc059167a03bc0181027c93211716044919b000e88b973148609921172f5e5c2f78e16209be32e4e2258b2d0a123532d835518bf006e76e925dceecead52aa35f096b3de1bba54c12c2fb385e5b47da44bfb11f95db26731a0e4e0ebe5094e6c2ce691c9eebbf2b3dd658e58571cd1c9623ad3875abe16e51959b06dee4c04694392a1c192e9173b2bd6ee43ec3a36cb1eca6b2bd537a77c70badb073363eb54b08bbf7200cad12e1e8b56e9bad59bbfbf4dab7ad56c7607777777737e71785b3bbbb5bc66e1d0de155af58afcad5eeee6e94090044c4763929c61eebbe9594b3835fe0f872d248afd385aaa68bcebfba6f957364ae63bbec3c7823421d15d3b0ecfe484a4acaacc5dbfbca73789e17055fd4de6c8582cf93c321869bf7c3abb56a2853cd71643afd4842e9400f04efbd1fcee32525799e77c214a3260a45e3d1c44e6b018e299b6833037a1e6479ed4994c98bef6d4a78b13146eb3245af8a79470c95638c385ed7856536b3d75e0cb57b2317b92fbeaa662edb18ade99a4c2777595d27638c554cc5d4e010460e4d44d5dc80e3d75a2b7613279610d69344457177777aaf0f420821f611e374641884106235562b6bad3535ef3d4921e9490a394fd2dddddddd33221c5fbabbbb4449acca490a58938201cbae4afbba35a3a931abb623c21b4ad948672cbb9f2a6762a89b48ed8510c2d4359d208410a34c180521a4b918ea26d6dc54c5c9813bfc65ca6686cd0c1a33eea5012184789b34e6a7ea8cca73ce1b7f0961e71bd55549594383e1c72b5399678ebcd71838fe77b3a96a6aae3884270c6de4fc16168482435c4d087c8e8001976c66d018193266060d2a2390101660c04036294983060db9e5e058258f45f2022b44a01aa0ede694aab9a901e563510d158e0400952e46a9e80ced4e3ed80001200019093d01b8327bdd486386077f6350082b1b2dc7550647a01acd074dca3e77711ded04e03d770361f659178ba294e824de1065285252522a522a82412c1240ce0c9b9c01c8d8028a40526c78032000010840005900aae4b148628ca895a4bd8e4c3e003f20526a1282ce2602c10017a066864d039561421fba87cda75c670ca33bb373d7019b52c6303189c98b4a6cd65a2b26b123cd748aee3c60724a8c524a3fe2d99d7ec0240fee3ab8bbbb5fc8d393aa3ae4491e1d1d9934133ecb28a28822f6a083bb0e98ac179d12fb0193f5a2338a9a0018c57a7d170ca294c070351fc0f139f917d7b403d95d4e7a55ac6a3e3c53ec46cd0409a375538d99a559408e1c10e5e5c46e45038eb29bddbd5707ce9936c3c76ac4fc083bd24c27d3298bcfecbd361ba2e3a2b41df3513493369e508421d7755d573e11e1f83dad693c66f6ae87a6c6860779ee6792c332843c965ece021c84911b00f4a60e05b2d7d9d3f3d433a5c9daccb866d0a034e0e67dd977aacfc99f719c8df6bcd58ab6d24acb3e83eb2e9c0c5816d5344a0616e3d30a7fadb07b0642609a0c9182a6e88c885462cc31cbc6c54e020202fa00cb26c7e838399f8d24df02a18061f207bd002189c726f14976f7d203520c56b2ffcb0094fd3d1990c8feaba0ec9fa3074cf6ef1146762667b2bf0a2bf490fd5928223bd20c6564ff2355b2b768280a4a921da9862ab2230509113d4e2064a081596c116509236cc0922409c6e08a21946811c68a0e565837640f0116d963dfbb63062a98610b1c6e80a5090b9a910186211cb45811c3922258320566f9abd03c92e57eab74185898f3d1a05ce1d1e65daed60906f5284016aa0383fa29a86e8e99607ab80e1593eb7f7db4b94e7d1a398d53d1ff6179174e45bb1f49a091eb54ab82eb54edf6dff7a9b8f3e9e13af5b5d73a9f1ca7dbf9f878ae53dfd419799ad6a9b08e85f6ea10d7a9f55158f0d7af58dd68e64611c875ea3757eff7e7b14befa85080ac24519582f653b42e0eb94efdfaee258a10737d29e4467ee4384be0a8050a68f0830e40402cc8aa7fab1be5fab50b42836457f8028e31c6779e3a9fa3f587ebf8d7f7a11ce554eda3eaeefb6be763a53b20f5b1cee75dc7dfe7874577fcd8301658762878c367759d1bfecdb24b70b71f6195a892fbfb6688f4c2991cbf2f1f727c786588d4e2c11d07d784f29b69c9d0254c10f870052943e8c5093b337d2ee4fe1cbeaffdb1c18812c6c74d71ead248698eccfd050c42dec5261fc2eeab72bbdc9d93ed6db96bedda0b89a394fe55babbd7b7357617fbbeb00a1d3af47a5de9b7ef712ae96ef5e28a6b4bb91371965f9bca8a65b7ae4b66f9f7dbabb8d6eba594b25e385b7b3eaf2237ffe4164c08bdbaa23f259c3de194734e12bada43a33cb2d4dddd5d4ae9d2a5bbbbbbbb948ed39ef4f6641716c2cbcacf3ed6d4869375724be1a4a4acd21dcb7b10bd23857e8537a5db4dc56686693e2c90e5d7eec6e83735817e3fd57cc8974e051521b7379886a4972453b79d4a40c181b659d52acbf6dbcc1009062c5912155fc135432418aee40f4b1a609a21120c27c81f3c9a5f70ed21a1c70944b91b09062b7843658804c30d19cb10098618f2e749683768264bd93b339838f629a9f9a021b10efb17274773cfec2d7d76a6f3a255f38e86141cdfc2eb35ef66cc80e35fdc8437521bd4b1c11bf1bb8c4ca94f2967843a64efd888813f997bcacb3435096ff4d3e8412be1265f0f35221208e8866ce4fa987b3ad37cdce4abfb36906977232071531dbc6cc9010737f8e2851536d0a047104667b2d841114bf8e0411851068540492afbd7cc02130c924c2981972454e440d61006aa460d628044040f5e6e8001420826e994fd2ba4027f3616d0dd343be02b7e7ec0e1062564908204500c92062d26d845155d9e34316306891b3c56918084fcc2b02fe5750a56cc7247c10ebabc3043194f5c39c2c90c6750401dc083922522beb881a8892cd12750c4901164180941e588b542f7701ec9e449a8ce83a5888103282420828b2096bbbbc38bfbee7079845d97f698765dd763187d215bc6aeeb2f4a5ffa5f7b2feea318765d50c3304ec8cdb5b358c848247be89b28707ffc7e72ecd834c6fa42b61c77c45a336b6b8db13bc6ec9bab366ba53b31ee8b44f16b38c117c7c6351fa73ee7a2b30bb2ba6aa0dd104a0969f7c5b10167c7e6828928aa302154264b26a220caf29be8246b63dc4b39db0ae415232c475ba29798f4f2b724f07604967127aa6a1daad65adbca923e0e387e8f47eec399d2aea797ba4c7b404bbda5bb2ce12c9876dfcd15105202f4e91d075ae1022c0c31d23bb4eba5f664ed9a769ea43df94c62951c23998dcc5298bac239a47ca525d791df43cf6507441947865ccc84911720e55771ad15e36df3865c7a95d691bf65c3e25796281de2f15f2f29f5510fb58efca45517efe895b6db7d2b6cbbcfab47f2eba5dc29c0fe5f5c82222e75eb7aa9ba1ee66c088ada950033992a0dd4497a07fb2e0a614fe44730d18bde91572786c90e145b7ada8ba733d7ca0996ef197231232643223c7fde2bcff9fd9fc1b2c5400f661e666a003d983fbfe2d28cb19bd8a804c4ca2b7571d8f6bda102e3ccf6c94d698f37a7b960eb647bd19d8c9ddf056a3b6ea4c0b18614f89359a9c1e015e015e02f76692f7e0d2af86b289a28f58e15bd23dd9b823f991b42e7847ae7660a1c730d27d8cbd12304b8e3ef3dedf9d19462fd060aac3ded1d796d52feaddfa9edc3c95d2bf63f39cbacb55fc2fd2baf9fd39e7ef2f49a55d325a98459738d8319bb7752625262d8556b9d73ce4e753fc87c9cef7c9ce7bcce6146b2fccbc9ec7abf1ebbbec7eb456b38c1387976527aafc0f6c39c32633eb89902c31b2930cc5f5c8255ca1c95f49b2930cc2b1cd8f930e75bddb8a0d65a2faa654e4dbb304321282454af906f9bad55c96846a56e0aee1aa875e66bda8e05b437bb6dccb67bf6b453b31ccc51c87b2c8c2d244445fbf9d672316b5c13d96e67a8ab4cfb5a8783787b6fa699344debbeda4fda9b2d54b3b599b53c78a87760cb32edcd6e0995c9f3bb49b79ac9fc16823aec0294667345e64f6e8337e6c705e4f9d5099e468ef800cd8fadfe697f663f79e66f2de43af36bfdb611602ec73cfd4c0b79ad18db17022281f014fc16cfeff93d5da3e02f2ac53049e4f9d3af9f7326b1f267b00dd159f1a77431bde345efc82132657a4742f124d89575ab939ca78ddaa893daa893da08f5a78fdf2d803a628edf54fa4f458d7a20348ffa7e14fe53e7737afc3ea818df7ed6619d9452660e86437149ab1ca74e357d507ffa393b20a7afe97ce0fba07a1c953d119fdc2799fb8978eeee3ca83dd8792bf504e3f8345c51f755dce3f5f3720a0cbc9142027f31284b1e829a0855a9a90c91ce9cf900932311c893a078e14759500f49434a86a440218342f1f839f5c6f5709df834b81f59b095a81314491b9b8331472c1bef0c2eda48d4100aaa742b46e9dd72213a1639cf8c4e0504f5a73f0d6101b5820a365d0c82623a09722dc675dc250ae80464dc5d268989413becb043fee2961c1fd589f156d1119678a5c8bf4ef9cdb50ab981e4ceb26b8b711edca980e0f7c16fe5fa1fd50f14ab9358d1cbdadbcf92a03e0a394fcd109183917dfce84514c18afcd3ffb068e6acd78db7fbd949295132ca39e734fdc7a435e7df9f5084be737233cb8f70a7bdfbbea69df0936ff7f5ab7ea0de266bd9c4c9d8a6a6918fea3eedebf7b8c6c1cc240639cfa95301393dea519e077577bfe77c5f6772d5eebf9db764d7f03f2fa81bd55d8dfbefadf6e27f72477ac716a18bc46ca4a57c8d33623271ce446adfd31ed43b52ca3775cea43d0fd2386f7990d679abb5e8dd37bf3e0604ee36f2967fb69d10af5b95eb262dd44149e0f8b1e84a34dad23b9fa37c92e3472f5047f4a28e455d927c111359cd1d891fc49f4956928ab0b4a41bf5844b54ae4427f9bbaa123c7b538922748e7f248ad01d36e32da813bfc85b2de9ade6d13ca8779ef40ebc52c444febc499519e4cf87aa18e5cfab78d1e7586447edc7d43e464082a20cb944412513204324212f79850a18919fc260c264203fe0dbaf33d744582041e5025c8fc03176b1d59ee7d16481bfd86a45a10c9f281f2921cacec1a3254c32d4e2cf2de25539782486e53eb0892f5ac4c042724df102566d1cf1ab1252b898808584daa009d6f5b5f3814db4b0d88085e43263857575b071fcb06cd7faf5aa57bd1eeb2ad676504927769ddaf9402d53b2188385443ec1bafe87d538fa3332387e9c5146bb047b779d30ca9809a3dc7fdd67cf2fecb6c16d3b420307f3d8797a9a84f662d7a3bdd83bb30709feeeb50749d0b161630019ea64cd07d422fbb7e711b267ef815b62ec7874742d61351f0eb0cdb5d0b93f4a6fe952e311b3b7f415c6c2c2de51798c36e2eff0200000c051d5b8d968ccb049d5d0a0f0c9a45d9b61f5a2dded5d3716925249b9f864c65db604866991838419a5d97d8cbb50db81615fdfd27bfdb418a5dee394b39f7111e8a7d85b8cbb2ec0581021fdb6d3403f7d8a71463a63239df16b8f83110e49a78f949b52f3f67b1ac99267b98084e6535ff359f7c906a43a209aafe992c0c6417fc9b36a6a885c351c64a13adc7d3fd944b113773d0d67c5d409b14f5f7b8c6b2166ec292784fa7021f6554462c6deed63dcedb71a2012cfe420588781fecf9f5bdb71e95b9c2d856ffd8c34a5188611b9f2553fbb2cc67d5207c65e66fa18572b26b1ebe575d1163acbf71fadaf1038d7ff5ebfdedf9c96b59669dd45ae4cfb9eceb4bfba83d046dbec3a8ef6696fff665b30ccfeb1fb1e674be15b73bcf7deeede7b9d0ba27d8dd1dddfc896bdbbeed56a5fafa67dd4b84fd35efb62676f66b3a8c518dddfdd5db062ef0bb1ddbb47ad33d23976d87ed2e787857d72c55c64d9cced7d772337df1f92fd89382037bc91fdd745e21ba13e2c909d8807d93f72441c9023bc91c5137e6c649f61dce7463a4f6d08a41174c930437b3d4eefc8c76ec6eea604c77c53dd97bdcdb2fb51bb1d8fabbbef9783d963cca9e6c136c5fd196cdfdabfddf7385b0adf0a351370b229c8f5d6a7489116b69c7d0b35675fc448f646b69c75373ec619692257fe626ec127dbb75df65ddf82670cdc8f5987a7e0bfec95718163ce4ac87ee0efe9fb3d6ee7d576dcbfde62aef52cfcb01b80e4f4b071dcbfdde7936f663b239db30eb7272510cfd4fcc5ef3f7156b2fc7b5df8b32e94948ac010a94917a42649e49a2152932272446a320563e7e9be21d8d37ab594524a2925d6d56ec8d5b594524a29a5bbbbbbbbfc8e5425386748e4bbbb534a7f490e167d253ef337d7894a7e58b45342dfe5776771e0f87c204c000421cb2497bde420cb47cc99ca4ecec75f7677777777774b297f490e96ec94786725cb3eeb0e3792da578989baeda52ccc50263db151061c1fde54864735007165952d1b8294b2dfbd5341d40f59ed56da1133381a6fc36d6fadfb91fc610dc03139881038c6392bb9da7d704c964b59d678b60da63d2b5a09de985d20972bbce4a8f13065df22063ba05f65428c9ffb9656729dfe7ed98a229451729e95d2afbcaf877027f510a67e6a3b5210f51f76ed05bcbdaa3e64d1f893f34c9aeefbec95c3b27535d6ca3d5733c81f96e5e36f25a8e37a97dcfdc97d3873df0dca42e0986c7adc4a9f1b297d704cbe5757e18dfb3d7d1b4c7b1ad74a6dc513f85b29f587d0ea9d3160c8c0062a394412287dae245b5078ec80e363d9823a4cb95750b0bfb7920ff4b22408245848b42b47c4c0a2f11be743830716921419168dceca901c4359e5c37ef6591704eb540159fe94b0562c6cfcce3176ec1c3f46d8dd790af52c69883b458c6c797e91fa2a1ed1e10dea1f48c9f514ac315903f65f5de8f5e3cfd1e3841fbd53fbe53724df4ac427477943510ff40229a54a74aaf045145440a972180afe60d2c5bdeb784702109ed5cab3214d6031842c16c641d82c2f23e794d0ab99884f8e53ae0bde6068aae6546105214792305182636019a0d6ac2b29a594d96f904705d7f1577a3163b4ae47ebf8d75a6b910fae37b2e59eab5edf737920d75aeb7bed8a5c78e3fa9e0b49aeb6dedb4178e3baba1edb7d3f19f78384f6fc84f6fca1fff505eed242910ffa00d906901cdfa50ef46e4c20c7f7fa2d94913af046bf01be1472bc64ad9dd77d14c831077aed6515727c282b9093fb55f0ee5b21c7f7efd9e9299a36644350e4158aa99585214d3c02452651284ed9e3c709b08b9d8e799ef3f470f7dc736f428f7e1e989d843728e4d1c3796acdb80eeaf46306f8208080dccf82bb98158c6d8af169b3260702f4fa338e839e471370e42918e6b4ab10d67fb5ca41c28f0a54c9ee74ca58e58b49648f558ac4fcadb21ff017893c7639547aa7bb2938e37b64839c534a2925f4ad71263224c79622e8a202a50c2095a0080151a75f87161040803c11ae308c136361777331c31b163a0f08abd56ab5026115572b2eac85ddf054b1ed064e8fef6991458bd240dd07227898444889150a229a10418208b340c112dd072541dcd05f898668420ef1c54e61eb993a8417d81061ea1039984390317142689dc7a99b9544129841288b121912d8b005ebf37abe007a610c1ad010c610ac6f0525ca84f243eeed3728384089010bc4308b71157bacc7b3316c945246c9028874d4257fb5de9ca9800fcb41e037841042083f0c4e1a657754c99f2ad9f188b36be5e8957bf259f32f6f6dac79fde4a8b730ebcadeb5e0790a07e653ae5559f33b7acf2778e0010a141c4546898d013833ce72a793e92f64b9605ffb14b2c79d0ba7cf5eebb27701f5363e67faf8a6fb5af7c3f2e9fe94bdd6f99c3e7b1fd45b1b78a3be2afe0feb72aad81501721f7f91224470e7e3035dc77dac00417d534e9f820b483aa0d39f3a242ef4e047752bd7f1f7fbb5c38da37eab324c9dc6badc0fab85e8e3bacf10d7f15fc18fb88e7f1114208b05d7f127820264991e05c8d2ee7f11e88ed1be738c4331684868c8dbf4973bbdb592938f71443acb3f71f1482be2e3637a53178b5080ac24d1e8148f4cfe3d7ee21ab2b4d8a5e4c7b77285ab2b10f2a23136c54fa9cdf0e9afb663423dfc10228a83dd0e35147e9c147d000723e062258a2c58b0b1eebb282ee6fe7c323ec58cb98dc3d17874358c707cd33592abf47ae4caf813cecf82ccaf59193c1f8b139bb3939da457ede015ffc714af2796858d88bd01dfdafb72a88a527777777777f7767ff7eefe12626ed94db9bea7bd75fcbd86b13007e758b94e7f11b05eddb2bb65273510d6c20b6b50406050a590b1b2cf5859a70202c3b0b287615859a74a01fb0ceb5836e3b01bb1879ac580603ef57ae560e556cd853b76ecd8ab60e0ffe872444404251255bf7e5a7ab909ff2bf8b6e1ee625edbe3cb0e5f5ddeab956f77c4596f87135f6e2d2c85a4e20423e687a457a535aea00e0604fe64ca4229ade5aeccb0d8f5facb97fe4252797635dba8596c2a55e31ea137bc9f7f104208ff3d8072d21b28a5f30157f31144d34c4899eee4fc5ad3e94eae33ee1da77f61d729089df8ce3a3948ff9afe16c8f427f771267c0e42df7f72335b384df3a2ef5f9c258cc0a54d109becee725e4aa5943b2abd41715472335b971d2f384d3f9e53425271b6c339dd5f50e5cc964a6f29868608ac985e309621d29327aea1274925c03343a4274e5026706788f484890de21e127a9c70a3154fae3c412237def09327f97a094204d9bf5e421dc3094e80c6e03094e5045210cd2526f8210a263e482ae2d40187486a2144821464ff3acd5091fdeb65e4c3140a810f4a357c578021021524b103279088e8924b9951621036f492ec5f7db8a2cc2ea40da064fffa831343cc2479411160a2f802072e442b805f9c8439e28b23334d6aa0c507241830850c2c5f78c892c5165988eeb7ca21e4e4230f3615e4595d0fe9b609c9c93eab609921d29318b6a64b7c664c240d2a561e1de98992ecfe8de4e4cc0e44727226c7c73e481b744083384391385da5ec767c4106340831b4670b020cebe56e12efb02477efc064fb4d9521d2931a3cd962c8a296b819193021c46a0e013db06cf4a2c578e1443b5052032e58481240052ec930c8f8c28a292c550ad9962a3880b044a63904cc604cd012472c245205a9dc1c24430ccb391f084610152258aa144c4b2d90c2eab7cd21993bb0aca8e28cdcb741158f2cfde2221124591289594a0ce994d4fb8a100be30b1523567308d882f54391745f666cd482515558110192122f9841d242260c921628b620693142d2420549cb10929620242d4a90b290098394e50aa42c502065e98294c508298b1051690a30484a2421297184e383314248528c90a4b4dae1192925770f5eeca6d0ae4064086a2f03f915168a80519d0ac8c986c6dbbcaae66b3a9fd36946a70232e3b7df3a9fed67d4fccfcd0bb806f737dcf602feb6558af3a4c0359c0684bf1cf9487cd3510f402ec40ef7294d455192bc8f38cfa9fb400a2d6e25982842314a8f4ca20cb5179bc420267dc479529f423d2af53faca4cef13af2a34e526a313e44366a2c266f99feebd6bd9aa669970bd23fbb4d0faf690645e800069213173401060b9ae474265fb71c4bef4c250ad46428469409cae4a1e3a8a42dd864ad748666040000000315002020100a8643429148289609a3287d14800f7892407458994aa45110c3208a31c618630c20000042883180500d0d39b6a8f933abc665ab17851010601c42a343a62831b88b7bdc03235bf99d1433e1a4af799e91644637d621006fb189d0f13c8811ad5162c0e77d1f4bf9f8d01f4c07a9ed1824ba8f989339f23fabedeea009cd67bb88c1aa678e301dce5d9705a4e450f3a0237276b4338df9a729e1f54cd0bc22043eac38fcbe6a214becae5092a2643d47b869b135b450647ca3e93dccd59afb870f0a783cc2435edbc312bc99f8b99f8efbeb50afd5559d8bee05367982b64331b7e49ad64ebbc46c8951ed1ccafd69187c4bf5c7af12904ea7705fc729e33f19e16139ab5e1c1b6b413e6789227f969bf120e7cc1df96ac731e6444f77013cd1b7b2d1013dc022be365942111473cc8f89b2b0d77858ab68b0332c3db347a49319a8b8d973ec8f8206c92e2adb61fa2f864f86e16be00200ee5ec99241eecffd021c22f1a1c498ae39bb24fe8a4b69191f5fb603263ab7e91002807c8595905f8a01400ff81fc826e7557ec58b6e012e68bd1d3aea2e9a46cdf3dde58adde5b2e11f4fe6ae19126c56f0883399812d1376eb287a6243af6180cf4f515a0b55b2c6a28c75a6feb32a97b120af5fc5aa2fa39701099fa696e9c90d1dc63b7a0c1d506347bb533395ac7ea9392fa0ab7be6e788215bef61b58bd50b63e24abddc533f3ecc5bf4f09e733772cc28b47482bc2556a344da7228a5033494975d55831e2dbda13d71dc8c210c7efbd82c00e99d4ad87c51bbbe3a33ab2507624ac80a6cc372b4ab5ad8343635195404435facd90c5c23a17dae2c68d650ef03242834c4b2fb6f2691b3ce95192c9e2090406bb07a8ad60669e81fbd65bca94e5b283cd9af669de0f7b147af529a969b18e7b95e3e61b819da40c117fc3077df3620b872f4629f35bf1956dd0228f5785843e98a1b36b890212370ebe5484aedcaf985e71d5e3a401dacc86e467fcd8d397f5cae43dcc57f4c967e2f3180b528e9f4ba67c0d1cd844291a1265b2a4fb13638a570337070145830b146b5ed14498bdaaa7861c428e79d037c7844f440606140fafed3139c13aab947c49fa7e86b8fb23b62606e1443b1b6e95b9afc3b355402805cf3ab97407660fbe22b980c1c8a2f0c6eba2385d53a8fa15551d31565cc881de722a7121d947d8e41492f9e74eea46e769494ae404f225897206c5ab25b4cb3ef734571a856d212b18bbb013fe15a12ebc1394d6e609ee84350583703e126b806780a3e50dbf6267f38b6de8fd29809c1d78119196f1a745f75c51c137a7c508fe2ca24c70eb0522393c359ddc149d23ae16f544f1980a9aa749f165d3fe3590ebaa22a073c6f8cadf05d8cdf50d0ddd49ff5aefaa01b51e91b7db3097fabb919180106b6abe2c46b80ca3b3cecb48d73ebcd97978667edd541f99bf1789d836467bdd05069ce4e0a31a55b0f97e49a057bf700517ce55f80ec6e2da5a5d4bce5cca5de8dccb91fdf6c1ca4f37292337269e026a0066c1ebbd063fc1e2f5a6638d84650838f4ebf1b916109c2aa85edf063cadf8ef2a96aaef13ba87a3e24b24342a90a1f945b11b185a3459f6ef2b21c47ca51b0c3c5e552cee252b6581807ff9ecdcba10c155aab65519e060e07fb1ea20075ec385772618a67c28b43d1fb09b171d08107faa68fe5bdaca13da200cd03c84112ee00754154ecf9d485dedc7c677c0bae0105af1215b5bd706736a5473dcac608aa1943e835d6f4704b5d60255e7de73c499fd7699777e58597ea42f30a479d321830469bb834927f929f98dc7b1a421836160e6104f209551f2c34e3bc731f7f6a0a691489520b74268e427724924a818fd39f7dc8a170fce328d0b51cfb0a46de79075414b6ae34e5c6327ea4c639088106d282e8aabc8a824b063bc40121b735965f8f509e20b8647a800f6cef64c5ddef194c7df15a370c28c16290a9878126619a8e420b16d13371c9166eb895ee5a95063e0135e4169da7a7d2d62dbab70d981e07c0362cd6d7b05bce5ea852c7c1eeff437ad8c054a7b22756794b831b52f530247bbe8418d1216561fa95902abd488238d624b3cbeb55b18854e16e2408d9f9c2742d6098760b8e616a454a26f063135436f9a7c2283c88bcbcec742a99e6f52c695e537dd90186c84a267a532d53be5ff8b24b80413f1c5f04c6f6ed440a623386d5a3694bf9b6450d7eddd45c2a554fa53afcdab329369afea06a7098cf7f48098d9feb45a1ec8be0a68648f5e8f153a3adbb5483cf576106487fd7c752265db1a4d6703ba55ab8fdbfbfe8b9856f3099f9a718314d450a3e0457b278faf05fc3141eced5ed3c24fc680739b40b144de980c2b94d119890a3d0f1a5234a446bbe7b6de11a5bbac6c49cc9e518f5e2044322bef38c52502d5a01c05801e433f911d17cd36f6d0367eae457c2718889289f73712bc9b1bd60444bb7046fb03ee91c07f888f20f753259c46cbb289128975a95be515d70be8c0fa9d83adda038961d6a4d54c4117dac6a5c5e21a8135327ee6977e472602458794bba1d850d000498b8a07ae58ee8fff1e4006ce8cc198f56da5a646fa03343e3d1892719e321920ab762435bb41cefd02f48caee4e6304426931be9744e5d6db17a22af04d3a8f279ee7b5861512df986c2f785d52d73b9af48d69dd5548d4924b25f25dd7a375bc3df0bd18e158326cc13cfeea45034de2638404cf36aa3bab0018b9c8f54d8b9f82eced145fda7a20aedcdb0b6a6762bab803cb42cedeebd0954341b11e425ad4d16119271104429a29941d8a3f6eb20c7882d925ad5ad410a10f1bcf1e08a144d9b84f806d277b4b69a6199d71d5996c09340b76746b673839c02ed4bb362bde578ee464d43910a51ca2d87294212c491d75cd818854b00bfe0c31431e6377a9a87dea5f0200eec8917e234ecdda7d5767c4d33e30cd40a2d180b269d695a578a0751c36d191131314d4d313ac15035261b288b3dcb646c91b2bca87a169def08ebc7753e33ca68359e4da388a69a621ea8aa7400dec1ff037557619eeca031e03a89f403578ca2488e061a03fae3aa9503ddc2360cb2c51399fc7862e1a2813f80490ae1ec2cf554b407b2f29651770bddeac4fa9b0e7daa60e1cf029b782b5fe989e118536535097733a50711103b74e5ea34903fa05743eb2d39c581862d992f58b8538e77a5a0efdaf01a50a9e57b096d204fdd6fc62babcd6654a663f154f85a2226c96f34ba5527345a02ac8468896c8c6973b4400243912f11f10627b02b2d130a5b183268f2d4778d25fde90850bac2a33b5cf439edcbd271cfb667cd5600a65fce19821704501d6104a322b344818e39c528918025313563ad63997de570b36fa2e01dce3be0a90ca02f9054fd5d27c2dac55070a3d1dc4abb6d74b0c39adf983abf3a5d9aec28816509e470ecc9c8283623a38682c1a2d0c28d72e65155faf910ece820b57731f2008cee536653bf4823640e7ff037aa50c2331cb94417fa18f92ce4ea1bba8d23fd6c3d3f2182c61168260468d1dabb442c92b9dead299ca0c33c417b0effa4bdf554a21f0c7e86d3b7278ba60a16434004878188fda1fe44600c8ff4217a8c030747c657229f33528f3b5a86c5e6c28250440b03bb158756acf1ec3fd5492ab3286b434a948bccdf7cd52d5006521332138ca7357d15da1b69d4d329ad5358d35120e38c41f4bdd8dbd90a9a9ff2def1a1e3294fe4d41ea19b5c46163268011e8ac912dfa545b9abcf25d1c153a8563e81c267b179361ad045472e36d91c1aa2b995f8f1ef91a0ebba52f383e3e6e6c43b974f9ec105245c300430536c6f5f291ecbc08933eaf6cd9acd129612979ea7a73d0ae9cbb762cf902f8173159c97fe03851fb41aae796b5a9ee592b592c831893d3239d92412c4a334da8d9364c0d8c111ff4f71288c23fce487b8db30186535357172c8d359e94f803b3b995024a528622641e0a9ac5115a0636ff92ae3af823ea4194943c423c31e8adb88621d0e25d69741246e310e23c19d3d633ea0029a557ba3912de842b450edf889163f345a28426c3434897f95cfdb66f43f0179dd73bddd21abf560672d7346402016fb680a38535debae7b14cc36ebbcdc2cfe407b3b5383c535da903140fae5066c845ce814668066d064543ee39b4cf36cc00ede8f419fdb8a926a0c851e82072cb70f3ef9201c21ff0cdf9e2cb788af00a018ccb3074ac746c14c42522a2ada6c5da651fcd12a0c9ce893f9030b00a2f079d0b96c64f5e71b78ff51cae515fc47b9dd569ab33c105bd334e86c4ad5413826f9be45b70f33c8b3bd51acdf3814fbe9108352f9626dea677068421ae2bbaa0aacabe70a12c326128a701e49fb90ad60ca756a4e5c050ca21e488b0c34ccaebca1b3a57f4ba2405661dbcd7e555f20eaf9b59ba18d85e06bdaaffe654f2878b97f953aa401e7900a8872405b3c62a47461b3d0f60233a16c5a914b4deea257b0c214705d0ff07f531caeb3be63252b59b9fc26db00c78c8462d36375ed19e0bfab7fde3d582d65b9605a2b5c62526db875f0f418bac302611941ccad432f21cd55494980c601d5b6720626e2a41c9288a1f4ba381486e2d136dfce0e2245e8da412ca30f2e41fa01d980d83801a80d3e59edebf1a8fe598f1dc9b6dc8f702cbe534f4cd5dcfaf8016fdcf3c009bad8df6ecfcfe9001aee6d1ee0f5391ddbc7bc894f476004c559acbd0aa7b29810ef1055ca09fe645aa211193bf9739be766cc57e2f223a5f66b5019a863209855ac34530970d46a12a7a3d4e1a432b34cdd8496cc06b333ad70caecf8f98e8ddeac019422d3776d559cb4c7a7d621b015428691bc12f576c3672cc2cdff00417bbf64312ede419eb54c8f3746b03b334f8e9326af6396b369c2011973e1c8263ce173f594d5f1eebc674525703b7b9d7eba230ca9b1dd2f360cc4f39835abdec60bb12eb7b9ee95fb508088903b1ca0ba069b2c846e7446ee847e6f650b581b49b60c9935ee96de7b3ee40406b41f3998519117aa3414e0fbd516d6e191739f2cf6267acc51489c71c438639f4493178e5a2cec84b4e50543b02ab7c73acdde9dd4cad17a6e2cc71710b8a0af20cfd7d564676542f05950daf6044f4b3cec21fb7d695055600b87c99ff43fd5a32685f8308b00510e5884ed096b54db40c42013fc65ae43d9456ef97c8e7abcb4d3fdf57a7b9604163e1c9918808fb041c88895b325dcb541950d57d71ee25a429428f6fa3e3a9ee55639e573ffb99281949acb6d4b2fe513e78d3a1ce6c257b193ce9582d110f8b62921a22a50aaf07595aab2e6f48b981119dbfdfc28fe57dda49be265593dd71b11d49bbc09730765db74b6de5ce501844d49e3d05763e3ceb656ef4ce7c820dd998d4987273c6989c4143de22316caa6bb5d335649c1b0552080037d91bfbf13b043751c468a2434c968789076b6cb360d59ee0273f54168295894d6fd9c633705756cf9dea0438a75415d98744e88786273f31eec4db3d117001a2fc948ea274994a9175c36085057715e018e2b0ffd81c65c8ec10aaf4ab9859b9e18f280ccc5a130488d8b8a8e7a9e59783941688ebfb449f1ccbbfa05b0db365536a2c1685e801f2800af0f4281dc3b254cab33b3919690fc3f0fd7d4fd10e50463ad4b27be21e8cdbcd3656ea419adae72f2a699be4cde31569f1e43cfb8540b6eee2747518f3ebb691bed2d9a6c63487ae85aa2fc60099405a2e47a3eeb3334c5dd836bd6969ced93a4881d39b177b33842905d4a3c9682f7543d6742fa6d9cabae25aec831b0ea8dc4db257d28eb4075e6c02586ed85198e4c05cce8ebf581378d8c60f4b9224a46a417c728a450237e15c307185f71444d7f140c02a0f1e5d7b72db95927474fd1a7e834913421b6105c0d57175d05b16b0d80e24df338838eddae76b7d7ec3afc63535694f5702c6bbd6bd0069440e8eb60b156640f20453ea3660ffa3e3b7a7ec38e81943fcbe8a9d2f641fee136ff67fba8e9ad9a023e875aa0a973de2442126d5a6d9451c00a1a9a733883d6b8773f5dc3954479a15e3587a9dab9eeb9f655da144adcfd19065e54473d3e17b38edff6385f7caab3b847534684f9ddb71d4b34c6cfc4542b168c7a04be42ae4d8ed1dd1a47719b1e1cf2847521db8facc029db56ec7a1d719c464cdc5b97430a634174e36bd5e4e55e10ea955a423576df7a54541dd9a5e8f5355b8266a290af1f75b1a362d05689ad8cb8c6a62b36ef288fd0f95f667b13d5ec13574e1907a9750dd3dda50f32f0796376c4187953ad85f2ff32e1bcea9e09d3a59943bfcd1d08d43ea653ef55583df3f59a1fb9ba20dd2a32347bd4bbf050dd2dc032cc406ed6c53ea71aac267cb73221d60d51681780e4e35b7e0a887293178377fc4fd028937576bde006a4df530ff46dd36cd428901b365e1c268c65ee7aa8a1e1f74f202aafcebd8b252d7b9d1117a4dd054c6725521563cd15373a323f4b6a0aa8ecdf580a985aaa7d64d87efb94c15455810cbebfa607642c59e5ad56e60861d7df9d2d7b0e7c9a5af1d969bb43a3ad8349b608c879848ebd650ac8cc78c60f814d70dbe73083cb74c3791bd6b18661df281dd1898d2f0d9a728db5038da3c6a8b5c4c2eb8251aa89b13287a007773a311bd3812589738f17272df7b9162556231032b8382b32228e8a6505e676231624c26a5e862ef77e583e58d033eb948d2b5e3e5af63555bcedeb2601c01923ea24173201473c753aa5f02944954fff92c8224ca83b8472afde6c2dfb809cf443e709447ceb1b43503cb6cb3c431091938b5a96f6641008d115d1a41504553cc88ecd7c73eef1c2cd4d7e020eec4c8d7472788da4bd21ad7956a77c1f1a044e6d8ff3fef614b2adc4dcfa77b2436807701eeb09515009d4f41dc149be9a090845062f23dd07fb8f78695a706152abe7e1e0f3d09ea18057592c3e474eb3786a7546102b29963bad4a48cc39329c40ab8ac5c372e7a41c375b756b6420acb5aed574b6cce74cf4a22ebb22030bd88cc68156a85ba2ec81f49f89ee3220beaf3509e03ead28867c91d979ef972e9a9aaf823245e82f068f61220ffc29d938637c3b684d6357d57540cf15946c2660b6d749e641439b945c94d2ca9d0567af61d2dbbd5009687f7968065ea13dd0b0c54cf4fd0fbbe0b67a0c8dd290b9545f145114f71c75c78b522c229a5ada287206471f2f53a07c2a32fe6db3c6ae794c3ff57cc4b66e1d3796958c4715fa4906f1ae8eb29ebfe5971c5a7d9be2472fda2c53155e4aa8825d59336200f0760ffd44eca241de2f13d0d192acc1c6bef0a64793afbfa0afd5492919fae49e31faf37171bd5025179294532764092de67474b9c3e2f0b49cb0b63924e107973b2562ae786c6b22c59a0b0d96edcc3297d44a6c6dea2bd3d27d4095d0dbf44941894dbc145246adcd8d6a4fe30c3c061770fbf9013d4ab9586dd14f5d020c50786039eb023cae58bb30754dc37b3f284251c15086eaa780f6f2482d260539a0afbc234adba4916089839a4967268d3f245a70181b6525ec94c8a51a7ce0a328487f8d902cdb19fd060da579d1467df51084bd94dccfe1aa0bff424b1191013ff2f17025bd0537c2348e3c3233e33043918dbe88c25035ff6f6f30fac8eb8f907c7dcff053614e55648fe0b392111219180e841c2c730e50b69f094c540867427b53627b522486e2aaf193da4bf0e736aef1031b88b6aa11bc764b21eb594ce5252dd528384a1d0acb0ebdee0e76c228471a642c9ed789325ae0f97e4f5436b95b0793929660b3ccde5ea8b0f45a4bd80e6842091cd02e9e44e202878bcd9acabeb1f229f431331d45f4d490ab50a5d8a1678726ef881c3e77c9c66d359c66148fc5a0f74b187410ef633beb30dcac675c8e9a250e8ac41e814cd81182ae44fa4913519310e81563560d511385c784bfe429754d95172aed32e1a07680effe9d43222bdb466f939f24061bd02d6844236bad9ee22426891e05ae0a967a34020b0862e25c14af8b8130d594b404a2df0d41e0d6d3f40379a9706be0bf265e407caed77a00b5d6ea884e29da21867a5990a9b4a4ef9b659f42e3f9f346697cbd16b298d998dce8a4198e886f54e5420e6ca697b247a30651239be507d4af180c85be0078de1e302e97653e32500614aaf3dfefba42ca40aec4366a923350fada66686fcc48d0cbfc97e10d03ec75182a17d52607138c43bb4c192d60a9a4d03ff7d8672019a71b74345c955e834a6201135c98908091a02e03e39dcfa4589b8b290241566a48c7e0c334c899a410af28f3a6155286662689a9bae08a20b6f44edea9eb0224a6754927c7d6258aaec97d43dfe368e8a9dd0cd425248f1da494ffe927211bc571d6180994434e252a163496eed84684e0a3292a44728a48e1d246f25e1dfa363ac0568d013d153c749c2dca4b5d3325d8577ec7ebbd31abe4adfd0b7c91534b0af4a53263bc1232d6bbe11b37652aabc56e815968bdf0e06fb8fbf80b940123f1786457e1f496bb3b2fc657e8915a4ac4d0ceed9aad4b9a7e2fe0a1f2d628c68fa6f3e555a813eee9f62291618713e3e8136ae043a4dc98dc78577f2666de77c463d981726436d325a1804e4c3e69e65834f1a151771b1dad4a3c7680d208e44c4aa52a68d020154a80740cba0ff4fc11eebc887d97f0ac1fa06be7c2f95eb5c6f6d1bd0ac2b2bf637265d5e1627ba8a3f81ea7f055852f88792e26e649ac30e97bdc09a7d6e0662359634e4303c23fa1c85533fd17f6df8e52308a0a2d6a29109aa8ba032d76cff613537afd05e09aedcdd0f57c20368455103f941704dfd9e6a50b1fc392aabccbb62c71e159af935ca9304b3f58e7f69ec9e16171c9987ff8e936ea48080687c8d02c473e1b88ac4ab8cc6c75b376abf2c45768336d811c86beb4ed8a1ec6b7a3e1a1249e2934986dab4772fc7afaf990aabc08dc197575ecd85f5fa3849ee26f4c1a6725a060e0ea0394e68f817a885037f91d9392b604829c630506e6f491510d7886c5f261f98d2a92d95022bd49da66e0e0a0543de223974532aabf3138c3d8e0c69bb3adde17f5f821e4fb1273e891ad0182e9228c9f168b15ce247f32ad2a9c29d27896f6abf24e860f1cb9da3ccd517735d15ee80cff69a1cb340339cb7b267d831a22890167ecbb6d8d494de1eb72d668e03e302b1c35213be3c5d3fd4b8c3b86ea0f17d4d1560b51d6793e4571baa2044722ddefb23f6b38f0a87868ba100cf28dcb6ea2fde2d6882f16079e5a35a211c31908c2f5134ba07a196429b2402eb251c590533c214a9051c667cb5ddbd57fa799a0bfb91ad32508846a041c312d20bacd2dfa3be20ee41c0639eadd5203c9b547c98076fc8f3a92378ce8abd806d5b202a54a92418a6cfaf1d07893e0ffab4e91458b056b637d68aba1b682dfd15872d2a50b96cc54cce6ed8a22eb63842c61531e648f6d89e0da9802348705205d6dd8b5b74d37350985a9cd798e3b608889c3f4a0a3a91f8d4508452d5557ef9bcc481dc19cd4d47a0fce76de76e806d46b1f4a396f92671fd118269c384c2c4d9f1848045467a2637fe62d016697751415697d66ea907ca23ce805f3d2478c3e883a451cb10f2cfa3d410ed598b6ea710b17ebe876167a853771dadc05634dc06b9571fe7a7be83b05aa7e8a834d74462ee819dd81a71676a91bf91a9da96b63aa448e10f9d84936bf6d89e7fd0923339266a3fba1efefc2f856b554916da28bd415a19cbb442ba14921568faa046262c6dad4bd33d8260abf4aa8badabb2480e0d647ea185d1cddc740ed2849c66bb8b6c70d3107f4a39a90e2f4001ff047838c6c9b1313ac686418be376056bd79712bdea9539381b50ceb7ba35105da0b915c5b4df4e56064c52d509efabd2d3895f4c054216b25d6d99df60ef16f02b8e5521b6e68907d866eddd31b8a0461472ad26a8a4fb487553fcc1e91a695455ae22215bc028fbb8e14419d8c72bc5e02c45038f32e2785fdce9caef4b2d5c3248f2ca8cf5bebb0511186f28ce94a8906d14d093c6ba340894a007247ab5ece3528a12bf625365bdd613afb240b7f70b6047f950f801ad054099fdbaee96ab0dbfa853dbf8a7beec3f59a14c453643e8bb7f49b28836fdf19a4c7fcfc0fe11918db59a122b6f0fef69cdc2535ed43f8af809d3f14aaf69ba1c6d4e9114d65e99fecc0a71e171d1bb8fb5b82b2dc034f20c231944050def9b8083a66e90f06c4670561262075997c420369e3dbdfdc150882d87341b7340631b95a7f9b0e7c6d3996091db2c361901f6afba7d631f98c3cfd183b80965519615bbc6b181eb174c85539b33adcac4bc6b8a58f56398fbb68010ae4d00502324a2c11c18642bec79fa05c5de1c8559211c135310396d2cdbdee37a2650d09f749f2e54fe4356b414e5de140288f92557db8593ca754ae5a415165f182c221aaa1ceaa2ca45161c2706c745ebb949bfd8e591820ba6be798faa9e425e48d8f4697223031a8d33b0e33f5b668014da93365df96e2fcb168f397260b55e720faac2a828f3c715b4edcfacbcda23375653c159a2f9c2c68cdbb1077d5d9c913372dcb1eb788c8eab5d7afd07c82cce2004191d3d5ffae7c8ecc03cadeac5bf8b487d5beb3db6a80b8f9e39b24095566c4f362cb82ed03c67a840473fe2b029b925b1e371ed39311dd730e23e2785505665a0fa736ee223c9ee0f20b11cb8dc6b4c1ca0f4e78d500db76e2109c63e35e3f32ac46a8c80ea7cb4e2461e2b6e9598961536a799d8bcdda695b42ab4ed950293f827869bbfa3da9c1f0b11a12886198374e4ef239011ef48a678acf6453d7619c39a3b3cf1d4a228392ccaee18a8bc61068130b055f103e82ac7017b124c060b233149a9618de7e1a6ef06e0661534c0c10e3a609ecb8ce20746aa66dd8f6f1ae23558bf0f8c90278b763f75189057b581b69b92adb89bb3c3756d6b00eee389659a86120c97734c035027d90cbbe072bce2fd0dbbd837a11f2c1881df44ecaaa94fd9c9c4296f0b711fabc409263e856c0dbfbe2c2cbd3cb51883c02266a5f6fefba124c3bba48373e24a033c0b2fe28d5878e4edce7bc4e52e06af367ff648576f507679949da67bd2fad836d7c8f0126f7ee1659cc0155a19e61a428bb8154420c542e4212a28bcb6f0638c49e73068b24042b7da9b34be4a2fe5c5f7c2aecf371cedbb61396f2eaf57175270a560b5a56b1e4830b56669abd08d8786333833f87dff3800cc0d16372b3ac94de313dab1d7041d5e9d677daa66367c6a1d284c3037a826e57762e74b12054debcceccaae5a358c3789f90629a538f38d6d15bad2d653a2fd967f99133ab590ce2873ab9ece27e9c96ae50c1fba9964f6ea7733b14d5d92e9fff88176d00a39a6380c060a854e085cf7e4a8d47d9750be5e70f6c810e39ae198ece0dd808fc86d3b6630d09a35c381751678ba3e251cfdec90efe6de85451b804c485e26f50535fdb245dc6150ba05226971fe7478842a6a62bb8af41ca18be2f215787cc02b75d1db2de8d128c688582445ce45f451280d4132740137532f0553c097a374ae0bfbde3c11ae8eba6fd119157fbb9c419f55450f0a3982a45faa63cf33b9823b0bfa4a517597ebbcd7afacbfafa0ebfd96ee8097f86e0385c7e25b9f5efe4828b72c27c273784bcf027823fbc396d6617cc8021460daaa6c9dac08e52cc39954ee2ea36f4bd64416554a686fca58aa338737039dcdb43dc380db7a7e7b1fab8e21f9f107595ab0ab8dc88a182c3ab028116e6fa675d42b823baa93a0f5fff61b977d912f113330f4252466a6ee0c26b9ecc0ad4961955526ec604270d01a30ee1874a762f5aa1a7817dc936da4b34778b46757c8150a6d78aa5c1270907778379ae42698bed36610eb2991f12fec18d712fce37e7eb12737b33b7ef789dd0fe6598295d8e977775d58eb91baa9e0fe0344621aafa85bdc8d8e60f74fdeb6ae5611634fd267a000b859fb58e260760639b6394dc74448c083a47b361b4fac651aa757de13c9d4a87e8dd258aea77f28954d78a54f3689ba9b30393ddd4c6ad346c21fffa314a86c2bb7fcda0de42b57ca7a58cd31703f65aff66c7abcbb19688d8d817aa0899f2a5ec4861762d60f936db49c297109fb00110642df84c4cd14ecc1d0b9bf73a93f566c6f998d5bba10a69998b30595e42048b65c4d980a621a1016c9d9d5616a18baee2ff242f213144526c10a303b43f7ff8b6c3cc80142f2af0c2d846e945ac9eedd3a3ce5e396dfba2f4dfe4825b0e9ae95e31b829e7223ff4ce4028db588844e98dd0585a9912b5d795ca62636b49e9a350dca19a19a279be5907cf8eb6a66b96969eac1dd80121883d9e08be321f898a01c6447c4328be1c2bafa193e63581ee701b415bc21641353a1a8b542cc27513d4b5c1f1ba28d98946a25bde36adbdcb2148d5d95c76b2e98a63b8e6238fac0ce4bbf0197d6ad562a0796acc7568a6d2d08627255909bd9cf5668fbd39bc93b0e323f72d10ef5431cd20b40980117da1fae50dd7a2372a28619bec265114c4d034c7ff5643d23777d36de3402735d6f106d1573556a21c056d080953e3091d7b49416acc4def05a7996429c83889be003c418987cc2206e5e321b939708e895d6389be44b05ce572b65e6a665ce093d7a92c08058d88b456cb77569fafe694567dc67f8674ad9e3d43ec3d31109e2c09a466719671253e4f92c869920cae88fc891df9b74bd0367f6efebbfd869ffc40cb5d50e913098b10b93c35059adba88038ab531cffee7e41258b8cc50c3b9ab85aaea8d23e868c0d1a28c67af4465f37cecec07871d9d3209bf776547d7847b9a8d2a59d6f9daeaf7fc85fe60d40863c1cb1b01ce797424cbbe73dd256c462ebfa467ecabf113bafe029cf3f157f75e69ebb0943a00e0dc206d82768eac4c99ea879d43fd324e673f4440c4bf07fdf337a0976a9ac44a054efae842d7a512b7274c30498951cf4cb1e047dd1058b61a2195838d1b2fcaca6237baac7c7ff48303adaf49178b2b43fe5f8e3b35dbfe9edf212f0a074bb193c1f2105c310ff4aaf2979ff580bec511bac69ca1743dfe28ef1e715e06f5f05e5c46541fe03318a700604105a28613fada6ca68c71b54149d446b42b4ca9f780e573da891f3c1c7ea1e2d6d57f8c62013595583478bfc4d51e0dce54a882085e800730a81a08a00ef6060e27e02b3abf0c75a758d4798f3aabff673c690a99b171bd984f1aa981e592db68beff1d0455121e800c42b0a01d6cff42fef71136821ad24f03c95419af86c6dde5e09cbb3288d1f670165b52dc6b22d1da92ff1c8c11d180666c927ba6624068d826068e65cbb485821f18f9cb78582c1a89b3c1352f2b0f36de4d7157f388b3412bbbdf53ff40dfed0e8a8a962ef88af481e0c696150f3cee3e81de986088e523a7ad50899fbc0bcc0ffa0999b360bb00dbc7a3ea4a83811dfdfa7e7ab61e4a1d67d4850a13fe17a4aba89063bc34a6453d9d780531f4398ae2f1c115c249e324005692db4eef11f9ee9351f88f9da7772c270f51d4401c546f08f49aa55048cb9e1b6e29852ee6467d327177c9b9d099c5c94e7fe14b435c8551ec74fb170bfae81c405ac36e21049af7c57fdaf25a09d30d88e632444759a025e851ab290a34ac2ab018736c00701dfba9159ffe6c200b444a51495c91e1942be75a4739ad70a728bfa2835edf5cccdb0688f2354f847774315fa0bba0df5501040ac94aa754e1dee23075b2222a363287b4655d2cf0776516d50f4bd571b79b149d8c653094a53b9e8e6ac46d7c7a8467eaada6c4ea490c0a1ba213e120a0eabfb9b1463e6c652ee1f02c3e4823ff6d90114dc1192df1c92dd81577ebae42c146dbdc83299bdb8ac26e1e51498775e3c09a416b9caba6cb26cfb9069d9c36c6c374dc635dadad681698199113e58ba5359a7a121812aabbcf39ad2a64ccf711863ce8d56282ad0e23542a708993f5ed83f34cd3857ae303d20858508aa534cb6ab9904d4b51649e19f62bf46b8d1c7870f457c6f5f4eb9d73bae2cc26c4308036ebca21880db4ff292bb4a45093de456cc80382a29f887f446671a35bec6eb4db32a88169a6081388a00d88b4084fa4f1f4173529471688aeba65608c1b0714744017850489cea05d1a4844633315e8cee0478f6ab51adb1b674946b2094cb14c16b2339124e0f9f3cd68f84baff9c985a25864fbcd56ccca2c7315d14fae93e1df59fde0b118c67f922f23da8149a8a8475e46935cc24710fe1e2f77551669c498c730725d988fb599ef3b5c95f48946da16e8d4fc25fda1ead59b95b6f26c45dfc25bf0ed82fd2ad7f24dd5c3c05cb54191350792c44ba28796124e881198f1ba0f8f3acde07d9bc9937a037ac085d82bff9286d3ccd947f5af661f2f8b0a42450c7d20d042d3d8ce4b36043c087a98c11f376854db36301a2ba547778968c56927fdfaf570f6b11c71274384e1b980d6bf10b25975b9b0e467eda7782c40a38236b468af5c32b82e706604a685a7930f120a7a19e86f09b141233136a3298685c69953165a1b273db90fdee81a8871e932688969458e3769b34535349d850326dcbe2c2f106e491b2b306c1ad477e2c6c526a888d018b1b2073fcd874a0a42b42cd98fa9588fa5da15868a4301f9a580fe92354baec7990d5daf1f00dceb3e4c1c01fff309cfdd17cdf5b425d7c0deca7b40b0ebb42e23f4f88c84a6eda2d0d65253c93d88269d2a98bc02f195fb8fd8b7cd62028e8d77c79d51b8161029776ef216825c399c3a04ca7e7a8f1a3bd9ed39e584e4e5ac535d6b4047168cd9fb1fe8c117f5048671c18a29c0cac22c29f0ef938879df659ed122878b4cf30a960b2273f8c9d1397b6cbf83ce95882cf3efaaa8fcaaab7a1973ab62fd2b8726431bb011953e94ffcf995dfde431342d331ca9f742328426ea65a9b746cfb8cb7fbdb44eddeb89911ef244ff5d0ba249fc50aec206112262d43d1d7645ef9cfbd538c79f0fea6a093de23ce2732ebf2b3e5a35ae26d657bc8debdff2f4e9b7ae6c380227406ac752123be71ed4cceaaacd06f418a40f87ab75c1bdee7cc288a2f783a9706ebd6b532e31d09355ef669d41989456857c1f1ed0163d545a268763421c0358e1eaae621d4accdb45e7a658c4c4b620ae2256218bfad1d4fdf9869daf39c77d6eb2c86f9e9626cee4e9510d0b69d6ed926eedde25f180f5708ccb56d6383c78767b3c12ec46e37d0fde18a5d5bd683367a8d0dd6bdc821e892d84c64030ae2befd926afd2d8bec22157a581b04c9e45aa05b503e8ca18bbac294278ce8ffbce8f6a8160f32455f352e661624f4e8d55d13432753c0ee33827faa3d0763fb4b26e906c1db77094cff98b3f07f73746d234f96c7391e62a667cc9d76e5fede6319d26ea8fa1c633fcb81f0b9d2ab4ef0e9856e5ea5326c31e660b4f6ad2ffcde444072dfbd13fc6596a8bbd8fe603202f0190a63074ad17fa97236fa0c5eeff559cdd8821dace07b9ae9ea24e2c484e99085150f2e4b3c6b4bad925d59387c279a28da897fe8ce8a27d91135fd3caa0eab1263a97aa4879dfb9ea93a38a1af1b54f86e0b7603278acaa961c3ddf354ae4eb48c2006144de95f3f827ee57ffb6b88014400d5eefb30c0338b9044bdad6abf265bf8a5a62160214e4fd4b2ac738f7a38c091d294b8101dee83440078604de16c83369c3b77834d5f03300380d2ded3ef38a38ad311e86ff19787ed4405b18fa45596eade3a6c97aa1459c8698d93c2e394040912af00e878124c4c9e8c00f1e96874c6f429f91cc573c8e7fadbcde72edd08e5ee03a30c0a7903e09d10e66b4c824f73c00fb154704329ef5bee35ac10457264b0efdb0b0171048a3fff49c9acb86401432d4c4ec1188c8b98c2f3d88381c7370fbb4cc093f76b40098aaf1e4e7d25233e1a7e8de917dc567a7cc2f05e24550242a4ae3e9ccf73dd16d5e087953fa7d6ca705ce886bb6e170e070dacf14f3e6c6c135bc4d437a3231fec1565626469c8e09e3ecc9d4b473eade8376407b81414bebb3f3163ad711499a770c862a16eb30a0d2d769c936976f0c23d30c96e7b67b0e7707d56ece63014ea17eee9026a63d690adf8d864ea2565ad181866204a735416d3c16e8676b9330b12d9db4375f0f3494a69d126d1354b71e6828ae92003ed3f4382f80c2f4012610bcae7218989479dfa4d746257b7bcdb1232da9188cfe5d2823c99a01ac5b208cad98cce2bd64dd401b4964f2e0d8cb504d35ac8d9b671f554c615fed38cf2ad3ecd79e48822c3a480b138a0a5b7188594220e016acb6d85bcdb062b495a4c2e85262618165e4b8683a39642a2848de6b1b549484e5c0b65d3d9249768f7239f7c3f5ffd8ba18b0ea90e4b79329b1906d53896c568e951239a6a2402340587d8a42a8fc9741badab38ffbd80c80fd8b4ee9f9ee15e21b8a71605675531923163603611b3bce6d52c3735d40e4c75285552b9c39d472ac3d32decf71ae6a4a7a9d8bc4e5e055f6f386e82f8d316e2dcd2102cd3b46fd3b4985e36b74b6b33e88de2f5b949df8172bfe612fcdb4e495b4eacbd20535b0348f033877757d3e8674f48a68d5d635d908d8622d7abaa6de618b869520e33fcc57ed875cc2f32af98beef37a24280251632df45a3b391f538ee74a8d8a0f37bfc5106fd0f0f9886166533bfcf1ec44aa5527f853cd572c0aa4d2a2069d1853a274618d0dcd4dc993776e0dd7a27eae829f0f23eb27eaf55f95340574f268496a218043d9b4890cbbaa2851acde25815440cc446d4e5cc355f8bc6577402668d8a208280e33c6879fad340a7e2a39a89f17ffd40ac0048cd16a4160f2a558be5bdd6d25277a743f04de26c0d5854d407dbac8e5269fec0065fe451522745af735bce22ea91c313d7376c3e32a2bed5941d09400b34869cbe29e88e7fb580c2a8a1e45a0d9f425019604da2e68a3f52efdeab64eee6651ec335ded055ed6be82c28b85e643a2b402a7b0d9b95dc80915d2980ab0486ec26bf14405cfe3a43d4ac9362ffd4d6bb83268a3fbbad37034afeb28d1b60fb0751a1c987104c5f9ce8199d9768e10ca3055d1a71387fb7dc9e2984604120772540349421a30e00282fb9582b69c0ea513acd49a02aca29b2dc4905f28228086dcd6624b9653099b9c4e04e32aae3773825f6626a23346b0c25bc5c55aea87fa63094616be63cfb3dfeac0341d88827bee355751b3cc1270eb909812a361a78bc1617b1b7914bbf01d3ebb6a4b6bef602951c7ca7003586aec9949d1be5c9991861a50a89e19804adc4f6465869bccb4f331b0c01e07c3cae839ea60219b27941bf39981bc3faf97272707ba5b2f8cabc14b7ed55999618deba6e07023544f0e71928833219321261e6311f09128e07b86366405a7d36ace5b6854dee9e3f5c4ab629a7c0d792f07160d5786bdab50c21de1522e63f66200c2e117fc1dcd2f38229f56ccd4ba06aaa84de6094ef4b472aafd66cb6bdfb573ac49ebd7399065988165e56e8272bad446d4265ed570755aa7f25c46c00c02b4e9d1585f369bf6eea82d7aa7d33f321e0127151d5b2758fb20c13a0ad39b702b37f3357f56126c4867e7c526aa457c1c276fb5f523d0cd1c620c5a266ae38329ec37297b16598454f24fde3e5bc7750fb43909c98d2e027dacfde38f1dec0e739a51a016d9ee31670ba10d33f2805994dee00b21c5299376335c3d374183e610a23c5fa097c20af088aee44fce07ab845c294cf630592b9c3d8e7c887e0760e869b67b7b8e022202921625b86eb4944591d8c0c98a41fbac528f05d2a4d5c85940ab7cb77ea343296e74be816e804519ffa6fe4b20cd53c895b29b4c3cf2dcaf1a33afde130ea7bd6b13ca792d72f1fea60b2980d6765cbe1d7d79437373a822d88f09c18d14a40a991e13486c5543f1e87917a9f0ed04079a992005c1850a236fba44bdc1168649bf9a1b58292913796542566c1244a54b25adeba25e3d668cbf66efaa5fdc06a94c34a833233c3327421b3ca70a4e183411e73536dcafa99f15288e6a8763c1614169ffea7228f54767ab283f626c74be9ad657ef8eca666cbb3576437233467e890a044a020f987455e403e5a1271c25cdaab018c96cd65ad0d6aa96b27b4fb62b19d914a4e71bdcbbf3f6c87854622e52af7cc4999732363096c124ca647548256b7fd1b59a23e61867e4dd1e8506e8c910f99c4f601b12d6097bccf279e4dbb3fcc692012b7188cac1761e86677898a3f6155455ff9bcc637d6dcfc8bd1cae1ba1f89adab0213bcbd062366b9e60812a9a706fa92e80a1d2a4b6d648ee0a8d1b78cfc3a7dddd568c475d26ce9f5830b3c58479494eb3731ef8e575df92db88ebd707725a77997e8590f625972c81d40b3a523fd2f062f558ca0e6d90cf7b58f1a4c6b74d6b86814bc9eadf2492239ae563e0c511399e8d451af49571fa49ab7f233f1f2b46f710730d67f5a4b4a1af60f63d64e1e3cddab829828147c4085124a7f0199198c83ba783a54ed65935cc5a21857c04910a10ead7e0c0a0d8544da1a5a54e742402091dfd660a4da8b24c74d47ccbd8fde7bd2e8d6c0c7b8d58ba93e20650e18e5343e84f196fbbbeece3041d297826cfc6e1d1fa583e836d6283ee63405d638edb8841e832e5ae9f7474736d996076f7af8fb95dd5db20e2307ec5e8ec532951ebb545608c605cadce4fa9e95f7ac11fb35bb21c1ecf76d9c96737f6b8aa5e7db0eaf90087044e8ef3e7feaac50bacb09c410c021abb80c0647803f775f138f11c4a362109e5284141a267fdb53af0090c28d8b77bea548435491de2112e8a68a91356f9d877073205255e41150f646b30d2603fb841e59e66e4fcacb79429dc0d2b47d384fd9050efca82ca719aa3430968db165ab28f64a7ce731d2d735ea01a3daacb1975a2133793a038a395ab2a403e7a019f0cacdf7c2a40605eba20223e61bfd930bdd5aac427895bd1768dca767ab59d4e323af3ab6839fe9bfbb74aae52b4dcc1ce94aa32a0c6897797fe54e59b8cd573c64c225e4847e255332a5ead9233b5e4302e68634eaa391f7aa19a5521a9ca7edb06c074ab71da97e5ef023568e3d1715b89fba1a53cf48620596a38add4c9d4b239b598a9f15f0337ee6792063afb4cec655c3be17db2f0d09acd69ae27d64c262e8ec71765dde681c6c0f8ed1ace0268e4b10dca929faac3a2cab8cb45cef54d7da6851632dec82cf802bce6603c20247a39c20fcb377fdeebeccc8cb3759f734b968b2fd895a55a4685cc35b72b63fc149f5381b7ea3f82cbfd29b0f821850707dc20f4df51063fc2513848dac9d4e5baf1108a70504c5c063441c2786f1ec165c5754f751759689673186ece9d59dd80c13f0a244c001e08965e645ea51d0f8bc0121fa75484ffc308d6f857d23f6b2b8730897ce808ba2cf9cd11fcc75d490d1e1634d95b3f3bfe071f1c1949bd0c792e774fa0df6895ea8cc2268698080be15ed0c87f8765501317ed031a524a2b2b8868d06829a97ad8e0610ad74b67a465c72a9dd38cd56afe50c355510e463d6a54a6a1dad3120c0872c58921be97c6bbd4223428bec4565bbb2733489cd06006100c3665481af6598dddc4f98c436a28286e0dd4d23880a95ca80a31038c9b97973243ce8a8fd1f27574b32e2dabf31cbb5f489be36f2f37d05e80e3dc1184aac6e2de21f9a63adbccd96dd80d5818df4966029d47a96c6351c4bf99427d7d81ef4ea364cdbdad63e835a1c65a3d93f024acb15fc75d7992a6e5f1e9a791869d1912b7026c0a258e567e532de89127a8aae3ef0288b8f9eb14c9b791c6d88d6fd19024343cc421899844fc5835533c9ee4bb587c5b6fa5e69d4a4fe891bf4d9260ff955c3e211ec25e7c359cd8fa4609e3820e391145496fe975e30fae8a9dd3fd2da0f0f9e3a0f86318f8d761de5a7a7c8fd274cecd3fa9fca64736c4c25062a226bd68a0718a0721a2e04f5f33804fb28bf8c687627b4f4356843e911b105c4d7a2314c1759285fe8668400554cbe20ab405f8c84a285e99fa3f7f9e7e64529442ac1191afa1e0248b2d20ff7c316d7814644e69848e0ef9184b3c4a60fcefc1101e6d04cd3c93ca400a1399d9fcc4911b4c832e00983c15b56481634a63fe01338cd969a278f6a3e9319b74e13c5445c3c107570c88c7979439b63aead0e6e322f3dfd9d270525c173e51822e29cb3acc38e60cf23397553ac16cb5de8c15aae87aa87a390b30ba21441c3bb315660ddd2d4375a99f122840b8d21817847cb78f6e2a8ff719f2fe4e0b6d7324789975e3806e3882b29a9bfd75dfc96fdfb504ebd66eefc7e7868e470b6fb39f1ccd14a6b107cbf3b534319462bd0bb928e7c213a695f77d6db509d334b588f0513bc88beab7e6f2bb0b4bc4bd7e7d1a03a39b9b588ba560c4cde2e548f9bc54a75f51c4d1b0a15cc853baeb67f30613d614e9ed32bca70d7d80aece74550d32bd8a22971ea38bdaaf6b1bc955aef975d4f221116eacdc99244fe1683de3dcc5be1af8660a9c2729a6065f3bb8bca6a49dab4abc87484d889a6ab1bad464d552d637f0f686f74d199eabecd5349caf8357950314dd8cd5ac96f5dc6790882a23652450e3f16978367980da953f302ae6258730639668b9ff88092cc5d2d8dde3ea3f52536c7f768f42040bf0a49d928cab273f8bb5898107d86313519062b782f66cf784cbda220151d6a20bd078e1b3480088e54ae4ddf88cbf2088b6793beb7d4f919fab1ffd0174035e511da62b9b34bc9ffcac51c8a52659221bc4bfa57b3807bc07ccf56b6507c79328f187276fff49c9f1427cea6186bd5638b27285232540cbd181b532111191847f2f608e3215396d8eebc4a3cde3d5449a9b1cdba4d03dfad9fdfc1041bf6fb74474413d5a43748b56927a94470d225266274e9b76698fabd5d9a9897032813a544dbf3204c4012af1f7deaaa477f955b99a9eba20c857176738a84daed1d6756a01ca01cffcbff810a900d3e1be0c4f8e44e4583568ff41924dbe17f10336d838b84dd30117de726d7f7c7430369b00a79f06900c41af4b547db3c62529ad169effc0d045be0ed8e285ff63d0e3ec94e1428dbaf7471926421cef5065230ddc17f7030f3719f4ac3c529f972ce1fea8ac75c3ce9c96a062fe074adffc62d15027eafc0515064a25fc3deb8c1d4577c7a77fc04d40234970ac86f972ce79273a6b9a542c137fe9bc64208482dc11242746dc6ee10363635ac5b5b3366614d073a36ea4a05e3482d006fecb08867fbcd09d74809d7bfada09f4f2d3ab33c4e4952977e403aac8c968381106d324ab002ab74c84d8d69ba93df244084bd171da41d0e190e05f3007b9919d4029f2ecae7a606a25ec80b88d7d0102b4c771f2df4229dce9545cd1996b33213573e46db67aaad9634b91d4d6e400584364cd6291b61073d0b708ca3bf1401c30ab25aa4803b11dcb7dbca1889479a002773799a930f7ffe66f32003a579091739ac9535c3eccc7a48ce2bf76f1f2da5e177467e55845a84c9005792a4b38e8b0f78a819ce245cf4d2280519df3695e7ccf9506b110e9e1f417e0dd13caa42c34e16341096ff00f3c6de14249b55755d586dd3a6d8dfc647d079a5a201c1b1428527175a3c919040d39646b3e12e481d31b731bf3d0a558340dad45d9b99491bc49ce40acda8a0847af6a941cea840225c92e4871086cbd2154e8d0c618e6f988364a68053783692744df1d8105e10c78cdf0c5c722811267d2a774d1a5ea86b07d26d9ad1c36e67e145c7e41c835107282ea3d7a8f68979713720783e8cd09c7c6ecbdbad5bec720efac8c417569df5ac955c0997578749c6010c0329e79111034c75ae8a3af05634f004449e25c05169ead2ea807f01c793f8e67e6e53799b6e12cb4b2d40b92cc251667cd01b23b7e5800678b42271fe09a2bef3438ab6f884dce57506d76912e478e08b5e5eb8ef94ac18922b558cfaf700e5cad2825f5d75618488cdabb428e4e9c93a173e5bc98d054c59251ed3a401b1428102aef34dc452eeb3555137bc3a8f95d66120bea9cf3cd70ffd2fd1293867f1c45bc9d97dafb800eeff35fb8288cf1353ddd04b5b71d491d8d86da7f5ea28c11c07dbad3a2f7c085a1834c847f564e4025f4da296f8089da7c81cd09b43d38ef6d37dccea0d983b214136e6652650224ac6a0870670832d708b87425a2fa4c2ac41d9d6024099a27efb218a198571b976a8cd37de2c157e93370e81da53e3d35ec482d9870a07caa3bc776e7a1eb77956e99411ea00bf032a420baa07343334516bae42f11913eb467648656d88988a9cf2e18321e1a10a5f5a8e5d0662b2f61ede2c76355219552eec89027256f7a00f17a601ba685d2f176432678c7194474bab793e6cff35f71be1d4226f50205c94d6d9cf775774b491d38f098265264c2bc42abc2b56de06cfabd3fbc3bc4f50eac981b8cd7efc9292224280a77041d0e01241a0701279ff3a941310a749dd9c12f2df8801e4f7646d24a36cd56aca439bb09422d451c4acfb010f66dc6d2848dd5f3bd483b1cb89d690bf07f5b63d314e4a903ff9a336d6c7bea914649756cb40f34328af7fa36721d571704b0833ccdb87b4dc22c715d0cdd4e610cb278ec901b8fd2bad7542cde4294e305faa027a5300e4e2db32b1f0e1b16e1c5b567e7790981a4e3129a3be809133cf5d464e8d931a43a6377e169de4df923f1d6f731018e091e6623936edd38347090b86bbc1ab3bce2d4289db07cc64a11d9b532d1c38c965e1d85eeb775a43ade2c96ef2f81f2278d68e6776c61cc3a360e9320419744f4fc317d83a403d772f03d5fc7755a4c85ba4add6c812f725ad550a1313f5a0485ae63ae73c3e8c42c4241b08a87851393ca73fba4cf63b19109ead8dd50d7eea8cc382b225e5f5c74cf3c857e39730e9c574baf020f1df63c93986a58f3e984b17f2f76b47ad4adf7cca2f29900ae23dcc6e0933853fd0dba9ad9f9b01a3707cd927ad07f48a328194f9e769c6167528bb43d76c18f410483b7eb08cebcaa50c898d3ac1e81930a2ed482c121540a65f090a2f9d3cda52deee6dc708f9456e3ee771cd278b940752715d014c8204e0ca7a738ffc46a4c19cc4710b91b9abb00d2c51db39fe639cca2dbc29457978b3a5e52a957d68b8709e47a3cfecda524546cb849a0a22bc464515d7f8f0d5d5f0fc036242c9e4ac5fb5d2f76ea34ae2b2e16464df2966d2a4f96ac73b202c2ae81463f47563787f2c26cad6f080384b4f497dc52a21f3cf0f9f1f459f9fc504977f222e748163268d47173ff4a8d960366141ddedff652e9954ab4a0a3bfbbc5568379bc9653bd49a7190ca82b0d090eb6cc180b10a835a9b24bc8f5b66435ce12eb7416505a1c99fc50495b7058de7852a51a12d27b8d964c834a10d710465d97646e81b717fdb24b7376464938dc12e9efa1d419b00cf162497dd9aae9e39ed3c64a41858605719e2cf0cd004eff77263aeff4a923ddd94725b9db1f12af26e682dfff2046dd7463f25b875b53ff6b5ae95f69a7536e5c655df02f0bb9faa89a4985e317d0b0d4656fa604707cae10b6491c502a573bb5534f747032fe8d7aaff8599609f1c23700389b6a2bf7778a828db3d0b4747aa2ec1b212e4d58279ae2390a44c5a86d2fdb7a6c1b77047adfc598a6150999c0212e8e856321f9670644389695473f13b25547d25cb422019b26288c846a2e5d501201106386eea166435cdef63c526e499aeaceaa36495e907bb11fcae14f9f3c5230457760eb3245d475a811c768103fc49ad1d7b7a011206d7c0f0b8666ccf56a37d93adab1ad9ad48ed50754ea660007495bcfeb0daa44a8a21a0ea79676b82c44d5617f5a45fb2da8cc71c00b0451dfe9674dd3409f4271ae52743a3f16057f48a23ffe2dad1728cac4b51e15f1be681c2aa240eabd7d9e9fddc2a3b8196a4f43864abbd580b6d2b03dc738dbadd7e8e1de886f42ecd515e7dd4028437ccc8aa51c8f8f4a859490141b7c6114929b1e41d56426e504edabe747df851d998a41819beab2e495825b93b7d388228d8ea0abac694abb9a4527cdb59e711e05e55fd644dec46e096ba24b1cbde046593255081de22874adc8c5858b3bf8b930fc0300cb87b1fb543dba3c68e86ce49be908cc6fdb8c2949900f5ae606dfcd530714a67812b6490c2ef7900036229786140f720002268f2f99cc0698c321a4efd23f52be74a81850181390a571b35f3d736402f8ead05fa19e16f96051cf9f3039f82ddd80d11e28d895173e50f4a3a9dcb25ee95f87442f7c50be41bf009b605b7b3e2ddfa206f14f0e28b537f007259ae4be452dcdbc9abc9e1de2db29e0302c965b1d4b71cb6a0241a399b1388beeefa7dc904921017cf78201c763b5ee4495ecd69944304744f5da44edccefc2a5a95032886d890c8d9195e84ec8509c0c911fe754cd501862a0af3a929600c824b015b20444d68221214f90c93a92f5c783d8b4a2d2ae5715d9475493c4950df4f39f82596690f5b862b4db7bab4f69e86564498ccce84dc85394cc916d915228d9a1ad912f213257daeca1305a31b9350fb46a726b9668a5e4cabef1e684be408756494e7d465b9a0d4a703e4213a99a210a59295d9b0559975c9bc2c075d38f09202dcfd9943ac29e1bb828e3108d28bfdbbe30a5e9ee168fab966f3d708f9f9c1b3cfdbd45817cab43ef56ed145aaa69a336b90f0568793a204fcbabb3a5b2c536133b863e8769025143343d2f5cbbb6a69e5042866ce225f410dd303753e13f3ff9e75951ecd42eccec28c9cfc6cf585d12736a88c01606f9d5c08e3318f40c4da1900b666428ea9de135e624841e3353874fa1fb88ff7a65968141508331e18c0ce0a1373d33f2b5f548c4d2a8d302d098f7ab1069549d512a91ee363dd74a91d633ee86603c4e8dccb94b39f1ad16065644028815692309e0c5a5ada7c370b885e677d27fa98385b93b2814c2387aaac354103237dd4127e47485bd941fa9737bc4aacc93c6d0cddc779f63fdb23abb4fa595d342cea4c68e67f5d125f034612ddf0b6ae9fd1d6f7953bd6e0ee44a442d8ad168e8c5e8d704d0e1d5042d6901d1a86e7f4f84c30f5db10f914344f904d73c181069cfc6105c6216fe2f8f5fcb70fe601e4546b285987e74d8c271cb0cdde9b8c5cc0b1dd9a80a496c01dc59ef14ee608fb7012894d86fb5b369f995109406f7313f96fb46fab9f7fbc4b8b84637b3bb1fa7ca6643a871441baf32dfd3fcc52372fb462702f4e2cd853b5c7a1ff20ce5c5670199e26fd0cf6c1e80ba2863ab38d11610ad77699c2ca6aa43e026a8ab113cb247ba60836aaa9f3feab4266f718bab44a340d86ab0ffeb8bde9e4d922815d46d70012726ab2cb56cfb38fd3a56e76af7796c7bb97b792dc6bd9f5df58f8838323713e6dbe3f9dac7ff6082e1d0c3775d92580a7626f7a7a2dd862623bbe8cc2e0be14532eb70743994c2652ad06866dd795ceaf7c9dc24642c04a9b4ae60d0ee2175bb48763c20114e661c6f3fadd7971b8d3e8128811ff08cee8d4423b2b4a83120d35147c2cd610b2ff68f4390ef656041cc23c779407a3dd6b9540a6aca13465984399b17f76abf38d6c0d046723f868990279253463eb0a91fc6f15df852f2d9aa4548979035bdcb277014d9f7e33627db917934879f28945512f466cc89f305301a95a2a99c6e67612a7c05a37d021b98e83c776ae97f1916a3199d4e2bbba95eb8e803b2db7ed56d955b3848cb3ba5327670a93838797af12184180aff222f06b11f9df0540e6a8f0a502120ccad4e750dc8a846a1bef03697e2f57db5771f42e6c19b0291110275e086c551861aab4b6002f79e6fe1a518c4389c6ea66f2bc273d35960507aeb0d8b9b51069be016c87063bc8a38930c5b82ac4591acb1f3fb3614e17d59cb36e3521b5802a62228e181846b08403a3748d85d8406bd079af26029a67f038fa0fc3d71cd4282c0fbab0cb9b92a6b147ee0c2a5ce1181add8b0a8248ea1ca303aa3fa936841dce4cc7a51578c57d9ff688e8b0fc984034eaed020c3b3203f24b5c6f8dbb5148579589617418fbe6088273eae9ca94d94d53b7f2524ade44f278fd301c7ca6ab310193b57ade9917ea9f45f3a4d99b1452afa9a96526987cc44bc2ea9b00a6ea976f73d2c1a3701a88bc888aaa5640cd64446494a58496e26ca4170b5f2ae42b12b0cceea304eabd080ba8f42fd02b690e8c4c212ffd6d6dabdc6dba623bb51033051eb4928356ba15bf581458f4960e1767a05306b54d57f2d54426c3e968928ec839d38825c7f00e3201a428c716aca67ed7f7dc68ec6c3ecb2ffd27fa804323684885a9e0e90465dd02e566154090ee9707d395b37d8daa937888a79cd62c323a8492e248c8e71047a1ff04f5c2cc247165022dd45603fb09092b4dd922f3418c38dd20d691de6ae3a1897cf12986aa21d960e91413067a9a440b3a371535ea97556ed5148c3837fa5ed2c02c3b388b4ba8e50f36b527ff783a5085f563103400b79802bc3aa1681582c260cf73b2aba257eefb6152bd3077ba57751a65fee701a7fdc8eaa0f3beec8ae26cec861d5049ed6c33ecc4b2b43b9ddcaf3cce0b37859a91958006086ace6de399e838a38f07dda7409132130487598c17c738f9da7ad250d723c4fa642f1c0a2e46f3cbe37ab466d2e54d4fa3270b9a43ac0e140923c93d39791d4c9ccfa1e907d7f172121d929018f5a641969016094c33cbf5a26fc27babeef8b28b9bcadf444b5ee5bb9dee9c045c32bc1a90971de30e5fa300516c4548743ad6df19b2fc67f01c281b24a9c5b393c56951bfe682cca4316b39dc299de00a0ae8ff7c6dd7d795f11a3b90e194391394eb13cfd8de6b9b257de4124340d735c0b38c35e38a37e930b040af15ef75903042225bfcc4e814dc96433cfdf8ca988c592c067fb1f21ad2e4ae5154ba727b1c07a29716dc13b9357797db1e852210384b8d00bda9d9c6bfc5ebc04cb6f34676450baf8f58b934895fa9582a16b1b37aaa8f5481cc17566e1cfd4bf6c3dcbb462570314f442f32c2818f9f0a670f820c7c7632462c5c0706d7079eb05c9599790b7344cb056841284b9f8426b33cc4cd0349530d837600704ec213591abb06f259a1c814b5cf508e2edf042f12ce49804491505a60331837171b15d47cbab3372a87158d453660404b91a5325b01192fe34fdde21a8ca87ab51ce9a806948939020e26f3fc281efe4ff00fb55c6260c87b030e932a3df431e73f1c96015ff0654a44271b0bf7bb8fd2a26bb8446a4d8830936790713f56f32db64bf30d839e6958ab927800ed63750e657c04d647997b664033181598d0c709f9f3e546a43a2efe4d389b7e3183bdf3c85643d615c3d8bb13308537944fe009ec89758829d40148af6ac710fecc04aed9e5bd84c4131eb49b8212c0bb42c20a64480c7505c7d5ae0dbe3092dfe71567b0f302a1863d54a46eb65837d55bb22e27431f63198c68b1c1e13980158a02e7effcc7c4e6e88f7b64179f9c54a90cf82cf1174da9336c6086cfe3b6998fd7fd1786a2b6914b5b0b057eb8c9d15ce5cf8b6d27accb3accd8aa41c522be00166820c10202b89abe63f2c58033f2c8c4b6b9ff4481a3d5ee17536e626e134b3e3cf162352e43491f422c7d22aca563432640243e1587dcd42977b7f76ce1da0c4202f3b3aebf84ca9bc0aeebe9d064b75c98ca9ec05a6d30ca4ac5e80650dc409b35c69263d4becd14867af50242920d814a9b4786cf4313cf8bb1f0ab0b4cec07222f4075f0a7d2b3b9d1063da0bb66bdbb29bcd545c347a240d873ebcad0b2ae167505efe6507d41656a943c4c5685339a7507ff929ec9a38da6259bc6e7057cfbac11e79b25860835bcd4670fe1a5731dc3c363604a13905cf378d419722890de908eb5d6dca5cb04e0f6b92448fa036cb2c44781c1260085fe454a19f2aac8134dd21d16fb3116b586c3695187e91cf5b845d76d96a49bb6ce06d02b862603205995b3606e4f403e4c4e37504762539f456fe65cc41222945950575d4b6557e1bc5af5e2a350811c80660ea82e59dde3059d37c07ac3af647dc06e51d2afbe0302c313902bb00bfc021f555c4571c567c03338e40712abc45dff0e2063ccfbcca5460b1638343185e898131fcf620f43cc495e338ffcca363af3f74a7b787eea14d4cea04676b49278afb179042f33e2d5b4620c95335a12413291d6e20c55407cc1f79c60d4a4cfc50a8c35daa75ec804a369fd6e1cd9feabbce312eb93db4852350673c74685734cfe0eb873f4bdca806d1a15dc61d0020e0ed0e920a254812f3dbd1298df32488f046818c96c21c54cde7660be6eae1c082d09de5f4eda8ea99878f4974a54022fa8df2302d68edbcdb6a9d355a4885856d08d0a5939f376c692cdacd12e4449c95f5f8260fda179f68ae760467d3bae913fdea925c635318b7e154a14897e9141b7a93dc257f45f9a329e916e03e5323c88d64998cf52df4f121923fac7a3f82bd509e1c64f5b3bddc34ce44e8540bbc8aeed7e31ff9ab900dc5aac0d8e8aac9ad05c542f8b49fdad1f80b79ca3d235a468a96bf30d5ff29ff21840088f60288afd4ee12460713d3029b73389effb090964ce68957242b29e7d41bc1079e4221362bdc987d37ab086de774449c0c2e6fa2cbe89d18eb42ba7571343e24251ee86916c25115278671202c6f9d2e0cc41b6979e99f9528bc9c4190ecf8d6d3c0378846a60ebc8b0d832f7595b165a568b350e4712d74ed6a3e8d16875ec62fdf3914865150989837715308ba677a554eced9f2c8fa0f38cfc63872cb36f614e184cf96a8237f09bee6f62d488e6b78f1ce0b4d4e4b60db89a5beca8aed4b84ef6fcbb15d289e7480028c36f495aa9981c4a838f0c69ebddacba7509c01a9a949c5973ef2bbb0e0a6981428de856f11cb84358ff7fae3f577483c7d7cd80ec58bfcf9131f63d3ff8e1dc37d45a1b26e89479cc7301c66f34570970887f29156766095d6bae6cce1cfc707a7cee152842e75e5111bbe0f0e7e83d6a86d7935bf43a93c6bf8415c42a7fc51d828379f3a1f27c0eee839e2cff70258d38a925c38582a57eaf9e2949dc7b84099945b7530bfe74be6dacf4a6c22347131fac90c7d200c7386c2983ee7d7a7399a2b744d9a29cf35c961c8e54b2cae8998fe2a0b3bf7e44283fb3ff69d0ef37157d4716b264be3ebbd00b64e281ef3e80503009740daad846304d2b5d08309db8890ff84a2c8c205735cc00ab8b8a7b37eab418c2df03e585c6f9ab097dae9e3f0539b9d7ba7c6e001112e49108b9a01cfbd4f35952bd6a1871453773606b2f1991ecca51da9a0832e500995bfc94cee1a4a56c3ca2a55107eb9b5fd89d761e18e251b190f368035f3c1c60b38838c5e75eead137a75368aad908eea166a4c25bc0a0aeb7fe8452c023463d8442e12c8a77f826c258290922104f95ca570ff5a37a4979a30ed3ffbfa3ef893bb39a6cecd92699681921797a449b4bbb091f8ee572cae8a4b5dfc27d26b121ae0da882061b629cb429e60e796e6c417685a1ba8d98ab3dae63221b5a5a711b898448b8b24cd6c9addee6964d5434de960f4ed1ec8dc784fda44217e3e2a580c82f979a4726011ac7674491f63e40a3f61b2e330341668334d16cc886b7c28dcaf6420b36b5cb1b626e5db2462e966724064cbcda6f24706db8d8094e9c6a042cc502b4e37e533d2c43ff2a1ee09aa0385efdca5feb5a3e72283c8d9013bb621a4a5147a174ccacc4a552da16eefa00307009650d6f4086f91237d40e9ec99ba10e9dc8b7715bfcde18e43a8730ca9cf7ee912895a5e8aab78801c5ec0878a527ab3e9f83c5c26cc9e1e508e27387a98c0f7f50b7b161f3fd4402fb300399fc9ece1e901b845c1eab44893a93a4bc6e608873709cf80fed6a1575c7ef0d80fa87878f4f1d996bcdeaf2881779c0cb16ffd29bd9c4dbee6d3664aa2ccaf301b4c954d168ef4a8bcc739344647fc831a1670081caa093252ea6ba0515aea33c826d2e6505c504b52aa1a8f191df9bf4d33c724ba8667f37f2966b09c3fe63adda78d97fb83c0f4e7a0dcbf442c1b1dc4ac3aca1cad831dd5d98db10317aab3d4c4c8d8978e7fe8e34fe2878e1f945bdf7809868955f0ae568724ac6a65bd326c8b04591c836840a1fef0e59a4916006af01b7bef1c048aea0394db027ac94d5b593092b24a0755043685e5952238ecb64d81f72a0dab095c29af1389d86cb2fc4cc5a79914a75fa902307e995d8563fdd17dfc9f9af9b050f5d46f6277e9af0e507c6f5a1ab7f0bb7d18e161a847a0aa59b237d952ca94644a325a057d05e705b067e5e6c2d68fd126106f2b907a0cfb05c252d8cf3081f621e0fa4c5b204e61cf408f79e4476c7b0f01db5e5f03256ab05682bed562b138ee7fb5a2143e2b49968012b5bd8d717bbc034a2eb07e3b63b7987b3f3777f7e1f1e7ebe18f72e75cade6c7c7a68c73bedc29fd1fcf8fdb9cfe8bb97b8b39a731905973ce9d72bf7fd6f77c9b49fc05e67943921462082f6af7929486b8e2dd481b8658a22b1a539fd210568628c26b9853872b0b26a3e814840852485d700061a134a52903caa28869d255f7980c5a50547d4a4eaca81d2b0a2752049972b4fce6931f945ad0c57c0f5fcfac1f7b89170aeb7654ca8494907ff46b3e8fd2ddd131e78e027b3838ed4d697bc6de306972bd94b5c315d9dd02a516ec50e1377c8cca91170254f8a8e95ebd3233431a2a8f4089ca33959999f9074f3145cd5b3932aaf0480740f0c065194bcb9220c8801203146b089161460c486471f2a48999056ac856edb21f9c549ea2f2cf1fc4a8fc31831006a21a36a776d92c630595bfb30c4248b4a4c225ad43890532547e8e210628251fc0a81cf3020c42f89d569fea09ca55d07d56814177f4866d0d150a87c01e9d97031f2aa0c2874e54f863874a073a84ff6b6f2a2974bfc39eccc01e8d9b0a9c03dfb7c7395d0178ba112a54c9a081a7035390f942e19c94422ad4a10f103e3383c1ddbdb5b06bd47f3abc0cc5faec300cd163ecd8eeee3efd6777cf8e9d45784d4dba3f2e3a0a05c3109e681a70af87bc2e19999a1a21297f5adddd2b04ab64b1200f1814a3654efa3033f2229e6c29a38cdddd9d310f26a71c408cd72503cdd2516cc1deedeeee49598b0bdab54cb0ca010d126282d7e3452bcc3e841aff2db3f3f4e1f1125ed2f10e6cc44b5ec74a580917bd6629bb8476656666de657e3a0b840ad16566412683f681168e4ab2184107ecfed3eaeece3295eae6a6e2a88195406a285098c78721a4400983e3b03368b739e4d0a491b29aa61310b57b77772f4f0b2ff0fa3ca776efeeee4ecd40a57c36a8f118ddddbd5f528d0b2174e6b2cdbb0c2133f33e6efb4198ed266a18a4fc69754b67c9ed5597a1f4e5282b082acfd999d195284668f7fe69c1f7ae4c540df433a386b0bbfb896c98537b2f67325c082184b07f8856f8ddb0217c1b2522226aa52d52ca96db105708bb7bce245ef4183bb6ffb4dcdd3716736f08739047fbbf65ce8cb878b1835b712de6613d8ee9e7b06a0b482895443770ef18e332338450cad804074c4444c43342f9c279777797c378d163ecd8eeeeee5f505f66861066469106a3671e778f1e7f5af31faa9fa06d42d7c662d40250715010d2046081adc380b79681ba94593ca65cc8fbd18cd8317af4dec17577c39e1491acf5be59f53d8c36e4fd6bb56ad782fcb8dab5b8b5d40da9fb461ec3e20c62c7e8d1bbbbdbe63dd7851b10124a2683c5cb031346a81d60105417f2176066a4859177bbbbbb5341fd3b56ac414a3fd61d605fd84884fa71fb0e02087475f7cd055f7ea1dd37899499514c81d1ef8831c69f5677f766994a7583b3a3ee801f941d413b16fdcca88b25c871ac9fa013aa6cc1256159626aaac23c4d4c9154a5bb7b4550bbab769cd4389803610d17b4db2276bb99af075c6a28ee40c895cf6971823084ccccde44b08bf6eed8d17770eeeecf4a67e55959e6ac3527a5abd53fc7b1582fca6d4e58c5306ac92b52060d416185a1d6fb72a5a9cbd3f3225b6b829f567777cb31d87365f5c33910b2e096dadc24fc94c018cc16d080ca4dc2d3d9efd101a9fc7076b79ece9210a4f2c32008832a4fed3d8f15564d8f701b6c168feb6a65465662c76e6f8f31c6e8fdee1e3dc65f6fdf5c88cc81c02bacf1614ac86b7bc7a713e39396b2bbbbb9478910f265ea87fc2891b4949b0bcdbc20e8bcf226e90007302041ed669ee6edd0af4183a2ea4bfd88d15a4042445461b4a744441a95534156a61a619e57371504fef4eb7a9f99615a3367c4ff08d116f9af91bbbbfbdb1d6d88397f234fc7bf060d3ae481d773819783c2d3f1df0283bf0d2ae8ac4f09091b20e1fe425807d8873d3bd6679f6e704d11568306c5eafb25afdbdd441a025e4e7f7f77b3584fa7883e5e081d03147ed752ca781f7c7f19947db2dd790fbf36a1418310b8f420061e5801048445104a5994a0c28a2980f675b1850728c2585ae29206d03ec75477774b70b3fa1e19249c5c574c1d5e208d885a1a4a301b55ee62063d3100c8020584a9c30ba411310600f5291d3183dab1b4c0acdf039ce5a6ea42278b81f53e1860802a27f049d6ebf3e01525f808823273e6a84fe9081e6ac79a4d34bda42e4c5f44f1c311482859a3074d4248269a8a7861dc6003d40d55c83033f36496e2059714484c5e26371c116fa812b3dad57347d050af1cc4268e10810d4710951024c4082f93ae5e477d4a466461c452ed3827aaf7dedb7d52c6247c06dddd5d234347905c5bb670ce92419fd336394153bb8539a76d5ac11297d703be1062a0a56e041e16295544e1c3141c408102e8bd9c9e62c40d5aa6e0208626eabe20064df531b755ca91a8bea53a6574e2065068914f67ad5891e5395121f3b6134f0bc47afbc9c07449aad4075f84813720e2a85f43b652f7e93c29eae3ddce420514b5210aa64b4283cafb6ea0843d9c0ebac07568d6ebe9c0ef20a449a24f890bb844eb532222c99f0e7c1a29885082d494aaf0b148247b7737aab242bf4bb00c1d461877b7a67182f27312368c86c4bf22c0596012b4eb2c89d85e2194dbeb8eac34279d5967b4676f74ae66a79a34e3581db20b3ecb541985dded57145c4303ed3a9b59b72bd5f744fd01870d3640b8de40f870eb6c205c8541bb48ac44756b6749dcbbdddd1d7a81e34b9195911416b41bea0a87c01e8c31c618632cc12e74dff69f4cfbb6fd5c99e8ac67b6bbdf31574008bba1ac50d6076380eed0575524ab37524ad92280bbbb0b21847ec3ddbd66d1fb06ec020504d72cf4cdd77c4da13caf6e1a1f555f0a6a1e873018bcbd3b1042f88030e1736243333cd02eab45b21aa3fba6ca8e546e23d41fb7c91ce6be3642abaab11ea5b2b05187bc3fcb54199567b8f7095c40bbde86b548e644a950b990d521674a69017b8c5415435b5555340e2150af43b0c2c705aeffb2b01955652b958e2ebbd92e6b08e1fba6ba893abeca192833e8bea7d3032a8a8d900b3f156e435e5bd4793c1d9e13b64f09fbe6c69999b9cd7dc6cebd67fc197f66334aea3c3f9bf35f659971bbdba8bd15c9587e8931c6c863636696eafa787dfff5cfc2b5111587baacf6c4be9b73ce4d8bf15573dae030776d5be366231463929aa4c22d493502c2e5ba5cbbee5e58f7dfa2491de2daeba4a92a53c58eb1bd3b1fc17e33b74dda820973d4c58752ca18e396b966236423b430bbb3df95eb428d85f9a93a2bd4e2dc1ecc8150504c847010737032f3d75e862cc5f74f20de1dbe537767c9cc5bf66047df18fb164ba96511db32945feefb1fa5546552faf3e8bdb207af7931341642122afc2415835ae735dbdacb305d086a6f4fd62fb28cb2f036ba02001874326703fadc6b73b6ef0329a3dc68ecb86545d02e8b727e27a594b32be2f1b3ef628c30c2542a957ad952314f6aebbe660f272afbf95846b38f2fe7c59773da08c5cd46a87bb915f9a95ee4a736b6f10becf5a8fdfaa198089959775096753307ab6b25643ebe7ba96e91cfdb4ff327bfa1dc8803d909063f5b1ff9fb30eba3c27eafe783a408f59b0ac210a67ea01ea6628c4458d0b739ac91b64b982b9a6177f8a586a47b43c0b1037ddf2d1111c3de96e82d4192d7ac41edde13383bde1b81d7f4a18881e406738226406a9e3c81c33184e239e50cf47aa0fe1d813d4631304f00df054f98c81da0ac5694c2947cc28489dc41ce39c613264ce40ed2cb132672079b24b80cdba39c170acb5230312a1b2b744538075f274d9af420450acd8c8d1b533aec25f38b93f512c3ee90607766646ee09047e676f1c1ee3ced4e9327198a633523ec25485492b609dfa4a428ae5cc9b2b4d4c4c444635635f3920ebb0c8fefaf8993263decce94a3232a484831303539e6151b2e41a29274c458ae90e18d246a483a86dd29e2a108e68a133e4aa584be62396c604f27dd0436993cd8dccc0bf615d8736d7009e7f0c32565388c934e3581599389f1702302ec99c3922564d0e56fcc09443599170f225cf06606d8c3c1b67d5e598ada58d5e4b0d15458a12bc255a850692229298a2b57b22c2d6900d0f101c099473eb03ece24194a93263eb014295376e7080648483a6e6c44d8771ec94a98235ac21c73d10dbbc3bba3031bd9d4ac7208600071a803ebe3bb5a9696b66062f2a2a9898b939397a7a7d50d1b38064000877186f5f12e3e4859292e60ee688f6080849404152a5792926cd0cca808c06546bc7f9b6ce044c5fb063cfec29fa5419130f7bcd4284b82dd296a02738c66bc3c1d7e666262a231325c0e94270c794b1520c2b481974ac1c80a584e01b2155c1f8755aa74a1298e1b2126c562f58049b55a41a9948f026406c8d6a79be01e58254b836673ceec0e7f96a2bbc37fe9f02a30c095614422f040bb274f5e8a54bcd8345d2d3548ac8a666e3886c582c3c68cbadb589e172947b567073585454d55a9429f92ea084a3370e29504a524a6f0a12cc7a832cac0a84ea2da049522e6520ea94541e1289ae3f2e9b8bf1d9791bbbe5edec7726aee70d77001e7e938019e8ebf00de0ed10a099a6377fce6e9b88ea7e3cf3a027b388ec339f073a0cdd381352b1ab03a1e366e70c3dcaf562b5842901f3e7a24fd30e0e9c0ef51e1cf1bebc3ff832d95610e2d347baf5aad0ffffb1ceb83c5bfdc1f7b7722f05380bf8211f847e0118439b4d0ee6d51e1afb2d04e65e31012f9202143bedb9a03089a7df726f8a3b6eb51ec5b7627538151e01cf8eff950e0edc0ef52d502317e05418139260dbc9e07bc1cf8429e0e7ca2c25605b23efcf0210a4be4e940e8955d10f27420049e0efc07bc1df86f85046ded4e6b3d9e0efc1f26f49ab0060d1a6bd0a0b2760d04a6fa783afd2b1f509b573715017eff8ebe261e82fdc91863fcd6fa708ddfe3677de207c19ec5be99f33927c4361b38a0fef1b3f5f19640b088fa2b62589c8ffd4cfdc0628c31c618638c182a5e52461963fc18638c72fb18638c31468945fce191007f566b7d60f5eff1e323e8fac9e2369c27a80d29e85f5f060bf5ac968fa021444c4d4eef09a53d1e7163b148783d02c069b19e39ff2cf4aa4f894a10373ad607be3f853d30eb03fd095b2d557091f470babd8a64f57a4a33432ffa335a0b2f54be5a585a83069d3236323246b8e789f174040a125faa2b51c9c1b7884a0e5e652ef61dd5bfa354ffa176597d5d8430cf6a08f3a45c6861d7a8343f346b76552c879695e602ccc77cf4bd60cfc329282b5bc3c8eb4153fd8f7c000951d1a5cd3c413b16ccd91d7f1b4bf400bffa9ff5e996c5e3fdd8bc7f8b7956efff937dd7e3937d8cf62acdbf15a459caa1aede07b306c43e8d0684cd56f440bbf98039abad83797e98bf0103e31f54027341d7f3772cf0fb90992b1ed0ee3d5dd716e4d5cbe6fa57e9fbf5fe4856c9c523f328a4a00273feac0531e7afd2685b7368a136be04d5fb60ecc6bfd40f980282e3b1adcb2af6d809cc03b375fc97cc77d7dfd8865c7fbd10e6bc99c3fe04ae307fe331981bda10e67c47a6c27cf7b0706501e6853c1f7e99e7d40f19ce3185d6bc8d6ce6b347a13ea67ea04ca02ff341e846f3329fa45edacc0b95af1c3049cdb1616077b22694960273fe34dadb9d9aadeb8a6d2830e79fd26c54d5175f540c66a53d2522962a0ead2b92ddd0b6fae099d1762b11ee794091f791708e7f0e075a783bfeaf7b5bfc98f9ba4450609e6b33c29ccc36c49cd3ed08739ed26262a024064a2af6521060184de667b4eb29eaa51e707d6525189c8161198dc63506884c0b30071094e6e9d3ccfbe09436536140829fed4308f73321496285dbdc345c4555ccbdf71e8c10c287bd7ea8efde7baf2b866118f6de6ad4c38761a8e87e4db982d1df6d84fc6d457e9eac1479f1e2e4c4c4a4ed11b49bf571f8b987658c22206a56bbc93a826d165a08a1a50a2e72f8e0437d8f54df36f438a4a4ed0613522a80ad15574061c2a26989f724306286c713c0360b1539f09919411838d2f82eab4a484b290724a95f83128864a5499541316b42608d64e66680de0f793dbebe19a0eb7df0c4e2c6edd6b5b66cb5c2367e8e5f8f1bf53d1122d709683327c2eb81a3be27f27a302fc34860812e5a9f525210ecb91e15f4bea0dbcc17b423c71fb0951774bf8b7cd509fbaa337a65cdeb50ec645f75467e3f983121e8eb7af51c8558c316a38b284a4499120509293559ac7024ca2831b88a92e3388ee3562bceb2d51559966118b62b2bb097020a6f76413328ccd564714405ffe5cd617f2c0e41d01ceae2b09f020e2a8a0273296c11c7c431714c1c1311193049b9b660fcb07c9121271091f1b11d6a0cf52a8a42a1baa785c20b5542d0ea876cdd14b2d2829e700959a219963984b929e4e804e638f82b2c1d15baf14bc3e77076b038fe2ebeff1f1e75c7b69ca74ce897df38153604fc1bb2583650d0a532311a8d8f66905258606ea0a897f9ebb387a1a998dfd783feec18272ae713a498b75a9445a37a9546a371bf284e9910c35a345ed2782503ed780b2c95b5e832e475b7645abc1e41b8ae66e350b3f12dca48412937c1495817da71edfead8ac61c53a61128b1a88fe9416acae8da9ca958fd33a2da444c5e969eae3825351125f53749fa2bdc12532b4352af4fedaf98639bddb08d6241d5785a1b144a0a231cd64f126f930f4cb5cbfaafd48e47e556d2bb2657e13398a779e02acc63f393527edaada346608a2acdc361ca36d0b0d243ed5854559f52920d3204a1c3a034f5292de114648926a5258e88f9816640519a605080013d294a292d31028ae2e2254b03e612a3099b2c271931a46401c305e9091597a5206c8a9e94b08107476588e074c58b98a22b4a365c94688084430ca2203438e2d1fad91b63441ca80852e0104145a84f490544c81a284e7d4a2aa841c90c32688efa94a260119950ad3ea528549a849812a587dab1aa11518c54c083241cb607fb2e98a602abe0d4e5e99df1bc3c3522dc339c54d852dfeeb83b7c821ab6b0bb312f3cf27db74ae6773b437d5430a1c54cfd40c56b6ab1bb1d6bc04a8bf7b482f6a5ee635c79f5dc56f7bb56019246a8fbddbbd2a33e269687978b54854afd90bbbbb3c28176b342ecdd10618f797eb24fc3cd9aa721efee40cadcecd353323364e6c9dc8f77673233e4dd797f39b10cdba39c170acb523034c3503099a3fa9ab277ca4877be397b7285391393d9d7e3d1a7de85d08999cb6e8cd11beeaac15dd819ce1aeb6a361ddb087105a3be2fea7bea18a3bbcfe0fc5c24ab49ba57b3d9d48cf5795dedbd47a56a6e6f1dff7e918cb95bde1d6caffa56ebfa526a605db670399a0b9f1a475e24e42e4e31c2338ebcc458bb18638c4fef07ef0c8f11ee0c31c6183dc6257a5f8e5689530d0d103e266a8c31bef71e8d31aa206d972bbd1f760dd537c303dda715c9eafb16c0ddd62e1c4d5c7db9a16fb3d77694367b7778775092e1f619eefe657a71f72f3bc32a41654febf7de0fdccf90ff58e854ea476fd0bf7b1f3f568745b2dab17d5ea854c370ccced0a870ac6af8c645d091b5d671c62a30c7c549ebe07cad75f05b0d1b5900523ffa71644febaeea365242fb3af7a7ce4b7d3856abd56a8543453393c3c6c6c6c626c78c0c1541870e1d3a74884063605680394fe8bda6699af630a98c060007070707270019861a4026e55f1b1020b915b59805b97ea95d5db402928f11209bb38b2890fc01a480c8dadbd48a26907cd4953a61e70ae614e0727e3556e88a3869d2a4072952686664945f9e309991912ebb3c61f22443e592242da8206d134949515cb9926569a9898989c6c819e7180be5099329474754909062b49a1c2da7f7f4d2dd2e149d21a8744d9b27ad63330010000400f3150000200c08060402b1502cca5361ef1d14000e6f8e3e6c5634968843398ec32808a218c8204388018018030c4086219ab2024b755919f2c452da0af4a50898ec6e67bc1b8204541de9c0a72d5632d00655d558d67996446f7b48826ddd7987a4d12995b970caac040cfde789e2c3560f5f74730ff88bd6802351d9f26d9561b56d878596ab067db1054d4b9eea34785e240e52ab62c5d136ca5e4d4e7c86e560699388358663e110415729975a285eabc909aeec8626269f15206122e7b7c1e48c48a29bc47062412ef1f5c87238c3d87b44cbef3d8aa155a6fad9fd89412737835ca59ccbf8e6412f13be564f42d41eb9a4f3a88fdaf2baf35c97144ccea02788c1911b4676a81b84c2bd8360695b8a2d983b107b5f1c4ebc65a57a210720f741f566cd14a53f85daa6cd03c8030b22999c64573fae5b77e466fcc27d130954a21189748de58e7ff94844bf0f9d89cd142a5e4e78b4597fcc7dea0fd87e7a3914fff3173598e20f78e90c61eacd2dc6202f6a22f669e9979d058a1e8d2e55f9e108a67d8534466d17979bfd881b127ee48e19565d2bfc23549de8f1f63bf00f4d771286d741fa23a5ee3489c778d5fc52ffde4b43b6228071aa39dbc753883648e0d0c2eeba5f32dfab246573154f4d42d70608101343d3c483a0a8b0fd5071e65cc3dbcbc7a1086d7f6c83c84c455b27ff3a0de0a27ea3c853a7f4ec36d0606216bbac98274f3bcfb4eff7172b1f69b2150b4d58fc6ba85a582b89160b0dec06a8b05aabc5c2452f036eb1d0954f14f4344a17857a9c6332d5a3094a4a6238abf8d6e4b9613d0617b7875d30028b2ae55ba663243f09eb641c57d2688aa3637214c38e4651459a09008c7ebb935865509980507b3447670531736b5368a20cec360c7c607f94d569f1fcbeaf52eb80a07b3b78fc305246b384070bc68595044fbd52b02ab0de05ac034b19fc18d55065a29fd72a67b9df8f8c52aae9ed6378011d58f50b656d00adbbd94cdc8ebbc94e4d7a700d0e184b3ae672f822150608bfd703eb34179c6e1edf05443b27b0a76f2b5aedc71a063f39bc7cd2d0d4d7017dbb7e7b6026620430585696a9ba85078207261035a5ef8b65e6c609379cdc2fcbfc77e2c8b7def2f728259a3b3188f5b0083c160158df7f369ff5bb5e5baf0ed683b4b055c27260aa46ed4144275f9dd6d0e3314683d3412a67e7fb020a9c65bedf87f5552a3ae540ca9f425184d8c0c43b9966180b768d4e7e1c0bd2d7bc296f76180a01b87fe8c424da18d2a5c4310c65dc2e2bdf6828bb560e19297348736d564b2e3be2ecf68bb856a9a3eb2b7b0674abfb8090a9a8b2ebd643356f6d74417afd622bbc0738d7fe8f022682dec71e3fec869fea7c7862063fc45c10cf3845601652f9d34c4c812b0e75184a3796c3359595ba319d3b5b3855b3a8795164a357be8ea7f7e7c6eb2e1786fe86e65c89446c3add398d9ab4c3167ea4d95ab00a5a82080be9695cc4c1790aac2e8b32d271180bdbf72afb8fc086a398505e2d609cb38a12bad6033ab8592c1180f173783c11c8e9b4e379aa19e181c44a098e8bbb6c257d16e54283a5ee0b371878f62c18d494a7230ae4e873e23e4b1828d5b42d3064f719d6fb68aa10854856e857ae62dc9719ef90699e50d795a2c58e22d4c141f2edd8297c7e5e29f906468b21608265fc3981a5c1832b95eb6793069d233b8944a1f883d06d7d0bd27d7ef999461a043d02cd11fcfec25f1a8a053f70c406108d5edecc6226c32c3d2d3165d19b6aa895aaea6795ad4058004d6b4c95ea34997ad8c7ba0821e63a44a5f3dc9513f32c426bf5932c7055c4aa9e6be0bbbca58fd0b84d3f2dc62e8e9bc5b0910a00ee01bb2c3b56cb0b91da271d0a89082dd008fb317f8508cd8a439b908d79ebd31bc11f55995efc38aa354ccce83b6b8e3f0adc824f964cd43e15c41d51654ffd8c0553cd0292468f05b8540858d813f0925cc73b15311abd6107dcdcd84f4460381382d1392506b5a3b547828a8043417fc369bf7c39f1a9a0b64e4092caf6d8bc13294c7f77ac5afaa56542ec381d746e85654f027c512b4ad967005082e3f29e0b16a1f1eca78e0350929c16001e23804c01627854d7f7d39c5d22a28400da7cdadedf3c180d1b886ab1893a625b30731c97b760ca2e2b98bb0204eadff621c5dfa13a1528f4103f66af78f37b36354445ddbb4f1e49855f28e5c18a900a63d388cb9b641cd7c33617ea593bca2f2d573055e319af1d771f8520225d3015e401b13e101143bf8d4cf4688e13972db686484e52ece52a49312d2a5ebb57ba2296b17565cd378984b9da3148e720d987af455167059bef11705285fae20ac995c4a7f85ba844b577556823426d4486452d95a9b17860f42f2122a6140d3a68d9a0467582e28460b5a180522a16b9eaf06cd6fc1ab5d816680eb077416ae4b4caf92588754662c02f97b62cf0efa42490025de1f60f99428af18056a87bc76fba2424fda3298c2b88810e5f43dce2c44b30ca63a99d2ee491c8a48bf03b874cb6431ac06e6c6a38a728f58d0d1f2858e41f07e5480a71c39698c52dc070a8e02d73572aaecd09e1a6f095b178985df2336501a1509f830010f49448bcfa29f60174353b45bbfb890fb1b3525d5a7f9d2d840198b05212351da9f3e69a74b602313e64e8df8d728d66dc12a8cea941a20ffba1c7676baa38d3c4ca48eab43d3b6e52f51a819e9f04c8b9c9267f55c92bd7d392b673011048f9a4515d6400a09087ee72a2c5e2b6b49d4931f9cb969076c8e92c3bd1a9151f270b119e93670dfda4e921203436831d60f29925a191f218909ce6e8dcc97badf1135b6e74fb9b2e741d550430309b0a6e8a7e736fcdf33dcedd9d9a83102613aaf5e465429b8f85ec337ea3f5ece8664d5402a565a9c0533fa20588322a9cec63a1dcaf367d9f99c6bb85fef3aca633ae24e1ff58e6e56bb7bd8bf9784e481c3450564174e8bf31ff3f1648a0cc20804f21facf383b0448e63be8d1dbecd98193179d7b987399f0fa77aa0db042498ab93bf9bd34ae58ee796796fc21ca844d4d97717146f5191980384ec9f79bbf0db27bd1ba0ca373aca0b5f7a9468e42c05c37c207da59523e24941ac51897aae337baced74f8d3c9cdd2e936dd483ccdfb43be25d013780aec62b670e55fd5344cc70c00a40ab784ef750e90e290088f447a0d59ed5a5ee03ebe9735fff509261c4d1f999a849133a8920317d2391df99f7bfd1a4844c6ce01f511834474705ed033c03ea45cff1fc72c5c9d1d7ac62f23384241f575782c683b0a187aa430d83d11792f8f2880ffbc0f4eef9fd332afcd07b05ad9884e66be2d7d6c51df9428bb302eeed15c4375c276da1e9f4bc4c183530d139c0a2d3672adef48a89cf12da5cc9441a0642d2db58a3ee04b90e3424cc40c750cd3b48426be92480919471ec22314202b9bdccdcbc7bab8fb78d99849a904411b3126fda03df954dcd02f4e192dab083cad6b8226f359c1aee6b902f20e55f720e7aac0175a3416ef533cf44023e647ec71ba1f3a142ae9354ec96db3136682b2eefcb2ea463e06d1a612b6c880f2fa630d96b5b7d6c9361c02808d935a32a8298e86d33f00944d44ab66dea231c50136d3b8c5038444db4ed30f2e13011c1124a8c03fec4b69947300ef813dd661ea938e44f3ccc74441ceaf8c16bcd600bd49676530584b83f96bab17abaaab4ef050b099371200243424c290211bce76fa28040da0af4df6c2fc35fcc26e1eb7bd1c6b9ba2af5dafeb96c980fdd5e7c302a98e9e6bfd8e8bcf038d73f4490f933f2453fe4782a82d9a8049b7469256993a2631d0e7f208d7bc62ca77b5c9781053f5a26bd3b8a31ad3b2a5453b9a75b1e8a09b90819292611f83b5f11e4bc6403080e8c90de85ac734de89af355cf282963f5db5c35d7c17d46c68c9fd7ca269ddf993712315158f60f0c5a873bacebea2bf26f5ac1a98fe3aa7a1b3af94b2c9614420e7bb31b3eee00f32b010efafe02d16c38b381fe0170d7eca1b06a6a10d60daf7dae69ece10cfc3d358fa7e1109c97de45e38dffae63fbc6546b4135c2d8874ded2c86910d0abde70bad5bbb580068361ab3b16e5501da8b7f1cad50a1e879e87439f51f0cf5136d0397b068078a45c31eb8154c745a8130bf274fa22c07c0cd2060f1ac95096f1664f835928d3557b22840f61999b657c2b6bebe56a12e69464d23f67b74f6415194d4fe0630f31b865f439cf117778358d80615f89135ee5406bb23f970c7e050d48c47decda976fed864e340d8df97fa5cfd0e8a2b21d2bec35a5bf1f7230528e664053da69b11220771910b9d5015012315e30753c1d2026b9a7cb43b2fcfb04cc831c9050267372eb4f9f744e44b0d82d9f2e7284a698bd44a81ae1b90baa65a0bd299b29a830f27307786ea030217bbafcedb053b01b1009e4cdc05d558dee27060d9fe2909ed6c0659ca165736b3ba309747fa519a4dbe1fd8f73bb3a8174ce74ebbedabc43e9ff5a8923aaa2253ca62b262f680a5179df2162aa8d8abb68c0dfe593627b0453672001df98c1fe98d2bc995bea804beb1efd928636a12368856875f1bceede854d88a3b0ff868a4aeaedb4334d9b156d7e0cc7028c77bb3572390bf422c1493712d7968e13b58cd915127937cfed22c9ab09472a33d8b8bb28c14c4251b954f159fb556e70b9aa87498a688fd1b1e3469d31ce4219f6d9a08ba69a68655fc0ade6c2c96331c8aaa71cd9c46508de712b80dc7e634cf146a5c100c589ed8310ca5c636b7be487391234e86b3509ed73aed3c5bfda6fabd54cf7d87e9f100b9d4da182466fcfa17c3905bf255449adf0c4e235ae00414026a102078cc50c37262d5fe376624446cd6af9f25bf23417b64d3ca6b2fe1bf8d53d05a0276caa3595c28eb6e87dc3a9b0e7ce45be03c2663990fff5ac26660aca17325847d826a0ccade766d145a0605c7005a025c3d7be756f83a1d98ed901f989b6a9b2d73416bb5e3ae3768315840dc7147892a4f5c1e9632b803c8c3d26cdf4c7268a2042dbe4fd2f37862e5171099bc97cbed712f31f027c259e214eccb66bfed39aea097a3c1b2c04ec72e62152f1edbf3e4b0ab6d0b5d99d77879780f524973592c2e11b60f232646e944a2bb9fcb72448ecb8cdaed301e08c686bc6155345add0968600a90f680502ea5bc3f3ce040fc378903268395bf9e359fcd5ac5502c102d9d50e5ba51eb67aa20340d289534238fafab079ef296ff0f360ae181b20f8d4b942ac3cfc775ca548a9d105a405602713ab54c5e4868eef94012e44a25a31894687232e66380d917dba3572b4b709e4a272ccb0233aa04d3d7c52a91f52e6ed50572012230a7dfea0b26dac15666f001daf47d050f56e64114b8f8761e7de3a549d41a299616ba620878d051ffa53083b303bab4098de880998454bbf8266b2152221fb88fd5a276bb5194fba0a92aa29b735993fc8681273392f0317fd5865f2e558c2cee4a5f69f9d4b03c6460e57237019300853cc2522987de77cabf90dd6087acbbc0f2314a509b9210b09ca98a37021bc5248922a3fc2c7f5412f369993c86794bdaccf4f4c427ef3139710a20913d174fd0336a916081ca761153a056dfb55ef74af970a5daa2449230eb22e6d4a30bac61cb906b3ad1d1cb5750be8c013823ae8545f85e905ce77cb01cc82ee49af9fd3f1c5664cce99fd4e7a90aef541daf5280b86847109020b3a0727c4433320b50167c6e5512c1b0400c5d202e69fe4b980ba2881a8da94d3b4070a738d1330ed0fdedd8689e742978470deaed224d9712d83eb2376337b51c4b01b07caa821bb3e4ae52984cc26652cdbff5bf315d69963484ebc9dc01a51b07635a05b267d999a0abc1df5d77160db2452a4185b287c7cce3091e31010968b19a80f15d83e33fa2298d6548151239c0b3e7eba0c466cd01d45c31cc92660d00d38afa7b25fb5439b004e00400b4777ab2e14c2483c70a66caa6cf062b693b62641e76cef044676442b3b23e9a33b9128f476b03867f988e2082f21c5b3118b018891d58ee0de2030a70ab2882aa5cfe0d23e22c5f97cdecfce6c687707f24a8736104e7059951a547906e57818d6e7aa585bf51e738ed37b90f41418ebd3b9ca0de8ee055141f84a6248c9b32df0ff3ed2fce792012ae0d16600f43ab5510a565559c3cfedb4dcd7f8f3c0cc17e1a0c86221f5b2eb62fcf22d0274a3edd4f7c32d1ee107440165bbf5c52bf429a346b4caddceba4a637049a5dfec6f45296c6eeb16df25c39302c3ff6632db1e9ff2d823e25f49e0973dfde49702e739270272a80973b71a96325dd8d6698915c2db463ac224a3a655d4f98dd406c96e9599439d9c219b10e1955c42ea36d3a9633d67c54309bf90fcbb42cb1df5bbe57388be99df0db75d038961b16fc573c43c3819878991d72c3d8595b38fb68c765838fb7742c37acf8af784683137670901de680053f159e69f8261c355fc80cb77c0457b7f88f63a2c1fc491d46297a4397f1f575054ef105f9866eec6b3cb8cb6f39b9a1474ecc88935d9e3909d74702ce52283fac3efbde54e198b3874eabb9dc3b5cdcd3c2b91ded71335f09062deece8de42af7a34fad3eb8732c0da338a89c16b9ecde2b3e53668c98e48d2f05f42e9c60b740d0a076b4d0debe8c599ba78ea2bdd67a27bee12d5fd9a3b8b299934dc7d50df09264e8d8b302ef1a32406896fb82d76e3d0baf6559ce0fe83456cb380f054d74bffef8738515fc317677cfbcc01aee9e726651b4705584c224d496eb8df9de277548d38fcf18aa7a5a99430e1b9f0032dbd5dbd537357918210b25981b07c63f0617cbc7984dfda7a7daaf019471b66808dd3712994661b126b547a666e04cc08ec6b505c8209a533d8dbed302af51a97a5c7d80f534ac98f537daf7de16cac7392e6a4902eafc1d2167b29994f7b64f59b9fecbe5190ed435414cfabdd1fac980659ae9e8564ff05d7c627fe1c36421ef4ab27eb2091edcaad46f41e8ae53035c102dd0980654a9915c0567a7e24440cd50d5df9dd355a7e014170591f69698382da2e124d1b4ad2dae85733b38919bcc3cc12b36dcb50d806b3055ed7ad6e84937e4281bffd554756dfa1a331a6d98eb1ffb6f91bd26b19c30afc229d69b195236fe9fe1c6039ed98565fe3b8f2d33f77ecb3e147e8344a9deefda3c2c9e7e698719bc7019ef3d7f746a7c4c1a2d5cd69f2b6bd8e00f205ed765449ed9ba019dc0928063dd621b88ff0794168bf9081710f4358688193a294aa7c005cb2cd320b127c23da7feac699d3c4712e9faac9eb3bebcc757108a641d331e0e9a5e47a58e16659154ff7e967f3c6169c6f1f353c6e84c9cb2c7c15e0806b55672b5943735c48c8042a3883210e91a8ab039c7935b380bb9fc9b7abde5a1c10fbfff6c06880c8420d2acc2d292063076bb26caef55ac42705af6cdd4e960adedeb7db17a18ebfbf308bb688e97fbb61cee505fff2c35e22b68d30efff9f40de95855ef28b19b93b4ce8336aa83d682464a99e2f535a4eb8c9752462435d32efa7d75a00fdc1954dd81077bfdf7b755defb6859a29126f342a3436ccebef48cbac13c5db956711e8d4825b1fb5e50252fe75f590e3009bbbc460cc1b23e365a1380544e71dec5bab995c80053271fa8a2a5f734bafa4ca5e06e29decfce8d649d52d128243c16559416c8e5e7812a4ab7ad086add581e749ad239bb6b49d9a89528a7b4121c4474523a191818b861adc8a55068ed9e36a68e6ff21960098ef2f35eaa1cce3bad88326ad5d62a32e97f489b75e7da0686653ab48e8b9c15368675cc4bc2b05194d66f7099cbbf86b98d3835acbcb55721190cd7e2b8950b8a047baf40e2cb647baa64b9533124e84dcb42bc0a99cb1bafe01967fb2b2d92fd3d176cfd027995afe906836bf8f542a148f85583c28ccfa5c38f05145dceda620edbdcc322524fb5d066354707b094a850aa32161b762a6dc993ad3ff3a38b36b5e3596245e8b29d44c9ec606c80d54abb3c69e8a732788646ed4bf26c1bb5ecb50d142352df9853a4a9a19b00337709f164f524019cbdf573a043e195da48fe1be627f4bf06ccf5dc07a40241f6e8bc0e10208685e1c66fabcac1da58922c3a154db1d8b084ac6052f416ced1bcb9daa2f9f60269d6fb785ff223524f511f693ec571cd5122b6fb6a87d0ca1fce1f9ba35d56ffb4dc443af75e5bacb4a5c2708a7f22b33998e890166c4f785ea5c96570801f92995f50a9fa1d711bc0d3d46599a1d21db3acc41afbf04f170024094484eb3d97fb98a1825c1762fba7ef5f960d276964ff28236aa29a1c3f021e20f1d7b7db66ceea6f546a83484b1888019e095dd6e2c01cdf456758e4ac572aa2f8bf56eb9253b6272f92c444e0f8e50ca9d6eb1ef6f30c6b5ebd8bcdf493fce53ec33ad940050dbb474547b3b361570cbe19e888cf3cb0339caf8206bf5436e9d2443956d3f697cdc4258a13687ea555ed7d1bdcb17f810f51b33bd6028348f299d5240d591d8cc1990fdc21a459534c1f962c0a4f3472174d05f18f66771f20576e9a55f832b694ce36eba4b9a6e8b65938ca1ca016a6f3b013514ae2e1d726e0539fcc5e16cffc5914ddf362fd19df9bb10eea6c6bc2fd1552e56cf8937188ae533f841a5bd4c363dbaf345979073e865c19d9701c321acfb7188861588c0c43019afc5833c88dabe7400eee3811bf85cf6af1c2f952bc7d9996cf436f3e942bc49c3625ee3b67e88bfa756903c8aa708150448ee2dc0050cae92218b4a467965495a736eddff7757b3d27aa2afb81256a360364394d098ac487536a5baad5076ea22cef82be0e0b651dfc6dcfaa3f17140facc86fe1e7a68d3b624f76e1b1736731c66235a9a9feaa55f02591abf46fcf3456461f43e4505226359cc87422893e85983ada9a75223b7c47921cf788931ddae5e059c980a085bfeacec1cc4d2e8f448f35d2dfefb153a4b5ff5ccd6a9921860789ec8680dfb04b58267c791e70539706cbab8848f4b916f22e2801006ef3c41aac75529ddbfa7330c40841a949d2a98fb3486a92345257467dda2acb326722c6346ddbceaba7989acf7cff782468312b05ff67453a566a024f9f8d622f07118dc8e138cb59c1c8ec7bb666375a1b86c3993afbb586d20e233b68a6723fe4eb1209a9e4e245eec412fb2fef06bfa8a9993e543da85c62e414d1ca6b1881a7f56d77f3ce2be5891e3834bdd5754308bb19019ebf2e370b9e16018bdd212a3352648ba55bcaf1543a1e2d6421db67374b65419dec08aa9c92d10aa2b58c5e619abc27719f9320149ed7a1a7d16eb4757103482c5a1bd463f699f9036e3e1204017dbed58c183f60f5c574609841266517cfc9b403e0c7a4f54d7354aa04611d6ebd982614c3eb822699067b4c4f96fceef30ab9ae8dc121c17aea031135f6d31dbb572d49f11a35e5fc11e8e9aa9183ccb5e4bfae8f0204ace02feb695e26681edec080c599e06200dbba92e8b0b368e2a06239307a4848c50d01e6722329c0e97d565fcc2430799bd3a2f4e679f325253bc35cb4dbf97dad4ec6ea8748d77a4069d90f002a853e12825f6efa5dab38f102b84c4543cf5496d50c7e22972359ea6e668ec91b768c368005de7f47de6ce1f4052dd4b730df13a66f7dee0d0772ef8c4f08c0b1876fda4b09a1c90d1078c1f3329323c46092ee5894c370df31498ce2a937de61ad47dd3c986a28923a5b0d1a9f7c2ea3ca01e923ff40ee3dfe2176db4e1394ebd8c8e5ac897bfd4438522b6e21a5fb3c5b032a913f7db0419655e11747c40cc66bd4f59ef31bd4387e8f3210a34c07ea6d8167f367b7ec4838c1b6dabc91935fee698884297ba7b47af912ae59783e6b4857e8d02807323d4112f3129aab36c72b5265d69cd75821478cc1178ac4829109550e2e09b0d7ecc9c1d20bcfc887e90b2a1bdeffa84a2b6c4844cd74665c3ce6d6495ada28dc86058557057679ebea529028831e633b0e310e4a9852c36e665da65b92734d10ab32810eddeaa65509f74a4e5862582cf725cba6b697b5c83623c9856722b50164d2f3dbd0d518f9f22dcae9987ed35c865c4919f35e968c6903aab12ea5fa9231cdf99cd902d3248366da2049e26bb528da91f1fc2b808ae576c54076056fbb17472afa618918aac173d58ee042940770d6dfe318eca7c832d5f0250cf4bdf32e54516f9245ed5a206ef70b0d14d4827dd18979ae8aa8f775512f15ffa3e2746819d3000ba4c48e3c2c734a6108f78bc407040b4af50d3b5e32ab5efffd47a5c9bfb650067ba0ac745a120925ba092a033316cf7d2946c0e10286b5156c95d38178ed9cfbf1fb37bf1fc61c0e285b6327fd4a2741bfa86abd21ce1b7c81061301bd8873843730d3fec45800df70050be419616a57056b18e2ef681dafa4755ffd6ccbc29a4722720700bd1728b9af63a8605f09abfca0cad8947c89e259a6435bb304f5249bc898fd95319dea37ced39f23d6bc991228ffa0d21ff33939f2cca73c2297ca786d59c8aaf62bec51dfe5f419a4c363e92f46dc8cd1a2d7a6656ab79e90e87e3c653bdb2b7ed610947b321100b6c61670972a4c6b185a42a5599d23e1b23c624ffcafd166b405d31ecb189341348cf33d1674d8e369a30a7f5a1710e420737a729a7edeb64f6abf3430ddd95d1e95510c57fed6d9ecd57fccc1b699e7705a178d5d15dfd9898a62bbd58aba0e71fe25b472bfca6f9f548e43d5db84ba55708963093d100fa351f6a79175d2e072125e8e09cfaa5f32e1a80382cdf2ecf76507a03ab921408875f3f68e387942fcc5f48b929cbf1e22455bba5d8fa3125d9525d13812972a5eb8d255380b6a87acad45664ef0bccadcb829c30b2f405be252784eb731ac28f7cb3e10197bb9467a7a574fb958c4ed99789b01e8057d47a9362449407a022870d476beea92f48b3854b4f127355a5804b67b15de2457d6beebb5c7eefd0d92611e15b215246e900eed4544773fa0c5ca5acc456562568d2ac433f98e78ce83db43e792cebb23cc81f85d419d68995a9535f898581c933f46a578fe5e8f20a5d33bbfb9288748f5a1f917fae4ecac74dc68bb07df8116c945111e1f39b3273e2c7cb453dabfaa444abe5e0fbd9d5a18bafc9d0ef81247aead402fd68c4897d58c1de4ebd201a82b64f55ea638837ff20216b856d8cca91d5def3d10c45f902889bf1ae44ad8e935ae5a5eea1900121f18f07c26aadb464ee74f0787845e739a7882eb06b0eb1a5c354e901a400732bf5d47fc9a790c87140a9d428a1ebeea1d3737a14bade886fcfd071d54829dca5b4764fa35b17400fd008401915707c30301fd7d20485471408d8a35d8bfaeaa8e8f3250f5f95724f23e949be29eb2fa26daf5d46106932cf7de952c0f2758c671c99018b43798eee51103284683740f0eb69b3e099feada08fd7e6421812d6d9547b710e6c245363d28c9a97c21bacaa5d0abc4531245a5556894c67798e218e8a73a3bad42a2bddfa5088db0c2e45399f1a5b4b21e9330af19fd0c699547b3fda0b6b869197a5566047dc3b8590b56619da58e0f58c33e2bce63329c01f38f5f154c118e95b7e8c91047b4945c85e9db70b2a4fcb77654c05229995035673a9fa59126701bd3cac78b022295fcf20a500fdc44a66bc9ccb867a9cc0fc968cceb32d8c4d664bb41a0de8a5595f2d40189710c95cd271c8318d8b31c16041d09b42729326f252c5232c81389f59e99dbed1411ad3cfbbcf5997bfd0deb2b2ed2ac1c36a206efb25d7f06ff2bc30ede4787f4f60e01448ab9c83b1906652d2ab2f6fee9cd00b275f70406efce7c6afbfbf039467c184e62f7a3ba164464574c4a0c5c33774497d6f6c8598cce172cd9c7823cc0111ab123a4f1c4719d0f5b5066e46888f7fb98e30d66851ad1dd0cc6c089a627a1a1b421a56a4b5dc30436e2896f0438ab19a297df5435bc170b7902efa210f0628d80a03acabaafb109ab04d5d238b5a81a8fcc3d657311fdc1d993f60050f4d65ca2dea003757507b77caa4ebf82140252509c57b0245eb66a8695c5be460c4aa35fde830a70ef846eed06dfc7202f75d510290f48b72c2a4aed3b0d6d4f75d3a0ef0dbb823c139931343b6645b7d72e23d4b191cc7dadadc5ae8de1ee9626a88fdd367b13e022f419db9d95959ea5bfec123babf3aa16e08b4f0b15d0c27150e63d74f501161bc8d47a35c46c59781d8999ba9a21175d26e554328b7d68a696192cdadf604b899b6da7d1d011d3961216685efb1ad159e9789a8b6c609cf6269cb56b95cd21a485f6622c47e807a0ce559d1ea311713e07a113f5ae9d253fb14666e32c36fb9984e27983d70c573b8c2f8aaa5884efdd865dbea0270900b67261f0a605b4bf3438331461a0ee1ef321e093eb0d3c089e2d983f442661a2566f247b619b6b5e08deed908942fcc6416f137c6149a2a158b133360ef1006ce7876fde5fb888a3e3022c2358203a3bf4af89a72bc4c9af4fe5874edbbea108e78c6b76a01eb043dd604858fe24d0b53ea66bcf8b35d0f666a3506f4e68b2cd489a0f6b7b943775e98322b5f651350fab1ff8f60c74fbe9cf685c558940883f1b908fe7f56fed036b038aa28a386a91ba7c417e69ec73648c8329ea8bd2e47090b743fb1c39539e1a5c9664291585615accc8d0ecaa137381645c8b0f02ebf2dcf6cd33d29ab3106d282c36565e3a9974aa03c687bd0902df701f27c3161e11e33f1544b4a45649dc16e6459fb5f872e4e87b8a9699ad52877bbdbf1c927bb8edec1b495bb06f5543b0c78314391933a06a5228f6cae271b227b4348ed5aaffcb0cac5c5aeaa221c0402b3dd9dc2a321b4964fbd4439cc6d74e3cc8275232f7bea732a802ae1e1e4dc118657476d2f867ead2f0eaa7cb0a15ce49d9b00e5b0ee92f27dc2789f79b27e7709c00d2cefd99a7aa5447a9862478d032aafbe4081e940a4a3f044955b80de552f9b8f77bf9d8396a2469982acad3e9790895fac1e30a6339dab2126ec87a0c03237dd4c24051ebd88f7b9f5a65a59d8d8ab539503de06e45d746e74b38850aa7617a60ce735b0b8c750939b5c24785b72002a0605668503dfe58e7d250c86cd134a3d6358912de2ed2f2671e01eca00aa8e65db6b25c1d24823a908d6bae779c681c7f5142142c3d41deb3ef736249684911905be726a085b91dbee73a9309589e60633b75296b83d9d2d203556077d552ac413a1fc03c1ac37b0ad38bd8be4eeca2edace4fc969ca97dcd8cb1f7aac10cd634d260470b7970929e721ad5c05886d847f37c67c0d062679dc42c289fe36212a12c0be57bf855a8cc9119d441d80831f10a750cad75749c2b60aef4d80b0b39d77a76d0a0cdc4bc7bbc1276a337a789964916e42c11c443a75f7809e0b01b193bd414419355ebcf99228209a69fe92fcb4050531969b6f90266ffc76828b5f97ade3436e13e0f66dfc1c50fedb7dcc4e0c758db7660e2d24de4a82bb9f271c18ee503d9571b07e260102e1311251a2e9d11ade8458a058f1fa2c64035d2e4e414d1ec158bcf7481d17769691fb85b1fc7ebfaa986044648628bd3aebfc5ea9a61bd16248fafae55670dfe9b75b8bc7a21fc69bc693c7b36025d45a6620bc662f5aa58c6da5b222cd2c4ebf7150e45237fc1dc8f4d897cfac5910928b7e2d42b5912d85b7f94a8b62aa5688f8a0c731e8d1295d080e75b9c2a1720b87e5a84d6cd429482d486ad3a21d1e3e472290d8e13a292fea81f950467886a38cd3174fbe5237f3ec22ef77f26390e9e1e07cbf0bd76d35bb16560e24d0360fae1036fc68ba85d5c0ea9804dfc3bd583274f275e795f74473f6eac8ec4c643ba4653d053c66ac91f94537feb4299a0e1c0c3d4debc03a5e5f7b7a4a5b81f0a959864c89c798f61b6a548a648145872998261eae7a49222ccc32d94712020588145d0fc57e3208d950a58582fef8954ff18e9282df62b979ad8caee757837fdf0c64fc5fc6801f8998359e14e1cc7b42ac55286104c0228d6437e0d6b549660c18ee920979a483d2e56a5f846b7215f54f726e90aa76b32be96a6f93f050694a5dc690d80400468a9d108a5429a4b32fa206a9c6cb5f0e3a605bf4751f3303421d1c4fcd69d36c270e78946e8c2bbf7cec21f395d83aef8cab9017de80f4941a55e2f19a270c09596b14c9579eb67702ab1dba16962172d96e92d2228abc326f955886ad6d554f69edd1e896f8fdde80b7c6b939b723da48572a99d9e0a3210840490ebeb09782e31500dbf20752ab6bf28695f6454440dbe624585e886fbc2da17b5b7773dedac3436675ceba8589abf62b8c48309d20c1e206d45e07b185b54e4e91f42feb4712f886d9830da32aa86c473a22b0972b8065e4999248789333fbb2dc9a733ed52e4f517aafd2f7788dde788f6e8ab37b84d2326d085ab90fd6cfcfb49c1d37466daa38d807fccf5d51633fa7ce17b9c3a3f35402271a675598fdde887a06a66e14144e8283e4236facb4e282a6827e910e53824860675c28a1a3fa65343e2feb226ccd9e622bce150a204138a45ba05b5b5626d7e7ed269f0042aedc8a8cdff9237f5ea0970fa227b26cec931f5b2e2202aa8dd400ca99c44685f611f80d6b3087a4f572b9b0276a75e3ce06514302b2f2bb89f10bf07207aa14572ba118890883f43bc3364189a68dc8c1a40c40a66240e7ebd309b0ae951334dc7c4e41c6051cec9c326ebd59586bc8c91143893d1e325c9140f81162112bd2e4562ae0a8205f95bc63d3ab983f6abe5804eeecc1c1699446c002fad55e0891d96f7bd8419f7b80c8c2ff1d87505e7371310bb3975cd637c5ea0cd42025740cef9117150ddb9b9b683f502c5c9354c2657db501ca3f2fd001225060fc6367e26634dada8ce9ad36541ead23c7c7434e7342600aab6c104d10644509d2794bd890bebb354c54e8dad0e69a0af3401679a383e6acfe9e31a603ec0b6e8e63e52f4413086d5ebe2dd9db4cb857bc7e02161071b571dd2a9d5788e48c2a579dd571540f4786efafebd12100b7cf4063273969c34883d2a4842b5e568cfb0e7bf8f02af6ff5b6032eb585f486eaf3af464784e002b99d85b1c5ceb57d62c7be3dd683313dce557f49a069e25540f369bafb5710891faa3f2bc28d46c78b3bb0f26c1a72cadb0e4253affc3ff125f51632a491b70ac767492cae9d4af1a7ffb4f25ba0748f11bf84aad8809051b156a89069c748d9ab04a13c65c65b7e1ec54960e46869bb5f97e6d365ec94ba0a650875f8c81634b8bc405cf9adf87b5775542239ab59f767d15f287202883e486042e5ed4e9af173d7776897ca34c500af3d7492e039d6c4906328d2d6623fed088b9ede81e4064197ca85aa4adfc86d45b34403164ed593944030c0a2340759a197496329bb32523e44e81c3bbd8eb768fd7ca0492bb098074004588bb3740c4ec0ed09b1c31b312b184be9a9b58e52a5dbc5f92270a8ad71f37173fb16e301c75ae9a55b0890e9ea0032cd07b0b6efca467a3135ed24b150210036e59e788ae36a48b4593f0406a83a8824bae8a5b09272356adaa61a1b139e8871715e2f35159b615a5dbbcb7a764cdb3e9ecbedb57ee3c2b485f45ec154c1f01372e87ff7a7865ff97a053044f1843f1f7003188f9a2323f065fc8af0bf98d3b22d104af325ed18c16cc0801259535dd543069028ff4ddb9530c49ce9865188cedffd1c0966857481db20f7c9042ea896b0e598da5f5b593361d2076e2bcee7c7e0d134c4a2f091ca2308ce80cc67d4f72a6f93804212f5061f6dd5a51ba0a18d30c948eec2aa6ac10ba15ed23fc5710803e408701088f481a9094d60d5c9651c12eaa4db596b71488ddf5e969f61f753cc28e26af1a2191000099fe4eccde475827e736d441fb92b01b47c9a99f5d7b1f1b8f7b0d617e74a6d43264f7f1798b8e733e243490c741464702eed02999b6363e80fc0f10d5a662ddedfda545cb1e85bed400aa420c824e56c65a35b1baec404a0f9d569bf1b8b8e88e227d8ec6b761d59c2a0dc409ae44f8b6b95974c336bfc7f43eb478d9c2948436b1743ff4c70821bc983b1cb515439ce0d4b4782433f62d6a5d8bd32b22a59fc37bac2c42c6edba2831dd996eb7b28d0d60059e43baa3e1ce963bf7652cb555d5b0f203abb9dbdf3060b375e0f3a0fa5cca0679480d971a12c836e8d18afac5a5f895f5023ac90ff856e78869c32ff4763cbb48830a16505e7b6383a6e4209a638046299d22ff0c2cb400e3d35fd960e0d24e79d9b24f3af0275de2ed01ae3630e647c8c3e7e21f8ffdcca436c43843f865295fe61e82d775e10224d9c3bd6e279b0f8a3fb47e910f61093d10f4eedb7e4dc5caa034776cc478fc19ddd8292e016c22069e80e4058ddc146d44d737cb1d615b8cffb7feb53fc173771bf8d7dc3b09749e362a7bb4552df9d567d04d72d3fed79965040eb0193010d0a127ace70d945d2a3130c9715292b00f9121fcc8feb11c1f307570c80360f8f9d4bc1ff7f164c002c4184840ccea29cea30f20f98533fa560ff95d4c05b200dbf57265e7968bd0e6eb7b0c4a0dfb77c58e2d3632ce7b49a5b7a62a28ec4d7aa928df80c360fefe20791ad0a0cc8e8dc45011c9415b9e0cc8a8252a5834f386717859d6fcd8ff4a65d5f8cbca29687d861ede393948690b394f1f5a81968000a00c08a74f0fa571dec53180f70535aabd540e7fd6b1914533d954e5e9d020d1c06ac4bf6f53c9ca097d4a6d1e2f0053b6a5fe44f0ab8cd93d8a853dd5875816c87f79bf6576cf82987cf0443ce359dc9dd08f504a76148733dc19d9adca8abd80e3544a9ba104e6cead967f03b41a7a53524438f7f7e7dadd715d1cbb4481661525ba3a73b60cfa5e502a047540fbd8bf5361f6b06d109d9dfe34f8bdf6307753907afc87dd7d6c5ec8ce91f9e0c88018dab826087ea7639e434935cd8e55c097c72cb324f1fc190670646da20649597ab172928fbfccecbc29cc24df8e723b599fb02bfde60a130df60df2dcd9fa14fc98d564ae3ec9624691ccf32dde6165740a4b6e85fb5f2acf703133ad5ebe4599cc9396df641877778b874aedbcb5e5fb0a8db7bbed6cd56831716d2115c80419cde7f2a489e771c04a2badcddc7b6b5770986947cf0d7743f43970983bd2b9465a976ac57db6da959407f546f933f4e5675fd47940da09b855020c7bc119d58700aac47fa18e685912db4ec70dec0f09b3d090a8ddb1657ee02b90e69a7ddfa8083e8a92d885ad6553d49c5c69b86749afe9881014b2f341135f235247e1776cdf69737b8ef272104cc472af99da648ac1fee07f86d356ab44aa3c6f1ae9ea8e8a669fdfe083838ee462bdb7609264545c84f0cc6d951241b43f9841662db1d9ef12b68b616cfbbd1bc20bdce6cfa7a57ffc313b7c107cb1e1b4f3fd08142f6869fecf7f2d14b820f99afcfd6c31121396846a313a59d6f2689191c144406475caf724a0da54b19c851c16389b63a7155d8cd6de1a09f56cd3e822a0f076c8d85aeef71372ff9b636e2a410fa7a096b40d4a9ed5528e4dcb291a17cdff6f860da75a098157d7219f84ab5f4cda65e123f21090a7bed195af81af11ab0ac00dc05cbf555deba1b37dd5af8a520b6b4d423d55ac5ae37658a78b3abd8315f17c576c2a6b5169379cec7aab5118f96a59d68d9032c940ec8295e7046ce8f8b727913f61bfe976a546bb0b47fb515af0d6f1371df56a682127eb5d7c659f0dbabc06fe42caeaa32c3964e786d24864bc5383894b3388c8ca238a4239783fd0436c0c3c3a86f67219f131c2839cbe90be01c4366b2f80f053a1fb76b9a25f6337835405497bba126246060b39b780363ea454fa648ea5443355ec2d53f61fa6d602e1c4c6b825f888692bf856f7eeab2e8a1eefc396691a0f2698f92d7541d500761c9c2f301a13df0ba749f502ef0b67c6050b61b01996a615660af01616b495c1d6f26b09f093068d3416a21928d8074e3064d9d42c1565f3686a2d746658e6de258544c67fd893360c32a10400235fd217f6ed76fd0cf07b5ed53084a0cf5b4ba7405dc49315138d00510a7b0ea53435af069a136de251dc55146147c23cfb94de456806ac8edd6e0806ae3f97ccec7c87366e74d6780ccc7ce02d48dfb9a3f5c6b6423c2451a90721bfd6019eeff06cd25e0881e258f2ebc4b1aadae8131313641951def2f6d7c52e8ec8ac213f83d9373fa1d9fedaaa9ebbfc435af3f17989b1d3c0f56c16d039b0b568b39d4ffd6a10ea1f095b563150c31e0b2465acb94fda6970d79f77359c168ea7b3abdb52ced0339a2019b2923a47dec312296dcea54fa75ddde646323b345b75f34231897c9b23e641afec837f6ba2ea5b9ddcbd44ca60cf5967dba48b7c98cfb3bdf58b0af14fb2bcdcdeba8958c753c675938ed469a2a38ed3dfbb576702361da199cc8cc714ce3c4f56d868a8cc08c0cb24d8ff977e86d5d625f7bf2d345606c533af89c9c8e6a32cd51f6078f43473a30d23ba7c9027c9c4e600cd1427f7b9895384c49933f3e16d382e732575d8cece5d1b89905d24cbc6c0cc53eb47ebdca1f3b9dc0ea53feac1b4938cad679f5cf1aa53102bb0653765e8c3dcc792a01d817b6f6604f96dea8cc2f90b33b56e24ddaeb51d448e2dde4a30e0f345a0b4fc467ae0b097a6e09c140a438b06c978c71a8b114fad10d3057fabff674b8d83b2b4dbf5f93d12b4418b28a05b2adb0050bfe26230ec171398bb4e3f64d266dd58a08d031ba8644066de36afc3204a2e5baf6973e284fefe5730fc108aead9595e56eb2bb6dcfb9c58d2e4805cf8f24cfb68ddbee5a0541f5cf38dc2999eb2eacb91b143c2821f86c30c0ed41b4862a7d804d2140c7d0dc6bcc305cd64b76e69eddb3766ef8aaf5db77edd602780c040c01b528ab9871ad8cadb728b4921aee541cb10794fd0432d8a84cd2e2452c7d9bd9d2cb31f95e624c803007e3888005a7da215e95b08a56bb402864226fa468bdc171dfd26ae672db5c9518d48d62cd380d121cd640eea681797f4c0f316d0335877befc28cc435e93610830b6a2d22ee82bda7a6b7413b8839826f6519f531e514b75242b57dd534bf1cba961bf6a40203956ea3feb83b6d72b83bd26d10b324da661cb9f3d8b861a994da74f53b6f1b37964a86a9ea0807339ee0a6e63311238a6ad2ee4e3c17dc4dcf03c64f35094c8843eae3c675d1997ea0633f415c6d75229bc359dba203d9a35736b6188472879e8dbc00838ab45e759e23d66141b256cb2d0ce78771414644a5f151bf0fe2088d1caaa1ab145beb045d45bc68e4bb8373f6b8133bc5a7d4ed757bb02da2b482ed48eb8615578bee03b34267e8723774be8d68c62c67ebf2707014562b1a71fb33d4c33e246e01de870c7073da41d06a736ca3dd6b79ee9ef65e70a7b6c3fdd5ff9c9d263a33b2cd6efa39bed49abd262d611d897f493f679834ac96fd7b6c319099498864d48dc0f7fd46e2d7e83b8e04f922fc4a9136286c02684d1382f5b4c7879211fbc4da916f45a2d92d21b1b0f43b418d7773c8b792a1d4f2616a84d50acb76db7174f483a095ba4d6d0266c11b0b8f43d621458dfeb97ab3c7d5994e348852857f6db0f673f178f4c50eec2a70694cfe8b77d968c2b216df348446941335e28489e8d4133ce21c5db997dd479f6008aac07237bab3cfcaf5ec8b59e6d35e5602844607ff0824e95aed613131c10351f3e5594e85a14897dd0c5c97e059512746e84f4529941b30d0195403cf0eb8019772a9be0ee81b91955dadba188edaa5c849d3a9cefd1ebeb780da4cd6067ec21c4f1a066d30d82f5862876415a4110ec3af3cfa092da4d4930ed882dca279b5cb42bdacc7ffeba498679c2b8b5459bb4703c7825ff39f0ea0c466c57d87d142462fcc6432f1b2c0412d8ee2aa21821f5048c5cbf277e86e23fd762d0e43677d3dd6eb543f2ac5c809321def01f3d64320ce612f4c6476b30f2b0f3fabe72c2bb4de8565f0d58f1adadb15b21726562c577a7260cad6d89a18e81b8f53b00e51bc2c438db773977a2a0f5368b6e09eafea386211cc72d55c55afc4d1aa27a1ea93d46cb7f20eb78e8076dde47dc4c58a4483ec633e2ea7206957b22fc92510705844d01923d5efc8b6724ab1ad84ff41b57cd73379f81f9ef901ee5c45734cc51a32fdeb8b449a1b8d8f86dbc41ff8f602d094c19d61f27f0ba8c48d29982b9129e5e8e5f67e866a29541791c3b4d3f8eeb5e7ca90dcfbab2e36b6ca91fa4758c73090d3240276f165aa72dad9200744389e845abad90324a9457d5e55182fbc2ece916d2ec937244016661d25a4c6f1226cbf1587b1c667130f0c26a7c3857d48521a252f3fa7a1f9e334cd08532fcc8e3d1d34867001639414648ffae1ae9371363c1db3c488481fa9e8f4b9704f01992af08ba43ff353c07a40422aac19bd39e6c4a49e42a24e1e2b3bc1983c4a65826db6c41c50e4c331d51041708c7f884045b618e43a8863094bf071d36b82fd3c3aa96c9ae14f9a953dac445c8987b33bcbbbe7053f9c6e0defadfe6a9677cb4a794e26116467c795da254dcaecfc7555bf3fe1cfe6e5f653b3021d6a77fd49c8f3708e5859c18bc173aa9bf778275ab87f511d3f8f3a4cf12b00a723fdc161435f3df282dec573b16e50e0fcf130611d5ecb0f00d7e2879b981c4f0738421498927d7df50201a195f884b26e4004c802a9b23ae58bb274de5306236b3028ad39757a6f9f6573d1550e0c4f130a2dfb82cf5cbdad08db7a4f165910e0dc4092fb9056fc2f36e5b1616a26e6b8e8a2e43c81a44693053243611b07aee22b8cb1471531bfc0ebabacfa8ffb4866ade2cd0c2fd5c16f0d5a1a80340d65c1a8ac70404cef8528b4bb18d400fc4ae6f16b3854ae69cc7f50941fa87cf958469c6b34f90f9b4997f0c3df29b7ed13e3f8ee8bd8e00b3d553f212869f073855898dfda9826e8aa6cb3e0f8f6e68995c4c1a087c96a7da79eed647d3b671d037c68cc5c46d0c8632891ca9925375033f1474ff521366921247e48ba5d5707432268e8151bb46c1f2c800607f26c84ad0a07cff96a430516dc32be01518fabdf528886202e87d2f5794259ea6aeec27dd4b228684b00610950c2c31f3e37839dd803d7cbe0d506c08f34bb6f96a93dbfbcfebcc931815f5efaa71717102b76f935ebb772fcbcdc84b1230f6e820a3b3901f8c86ba624dc0e7bdbbb469f1c38a05e0726668d6c64bb9d7501bc719effc677f4a6871403c6b77f414962355fdda3157828a0b841498cf90b98eac9d5f3e63166183f547b0538c40e6d9ee4f1b187ad5e48d86cf31b8aa989bc1247f401a78d91f89efdf25b3d79787331bde45e2509658f83d48d30625a35130300e1e4ad7bf84250a813981aa1878b06ea598070acddd0f1ce40f1a5da55d72281d129a0b91b656ef92df99dd2b159a3f91b3be991c14e6000b658709494dcf5099084305e1783799448b67518b624c04739b4bf10e4d17ec4799cf305c3a339b547b47c0151a3dde8d0ad253d2356a941b1e8e9001332b80e82d8e1dee689ab35e6d36cccb3d546be8191d087d5100ea97aa4a863c77a98c3266359f1c190febaf4cf289fd37c032b209e455ffb1523f44769e88c0298244256efac042afff5df47cbbe3b132d7e2af33389f3c9d1dcac9751c601f9693ee3e6d9c68377bde2386cca2088056468ea2e5658c938a06d1d7690143603758932d8334f643da10396bddbd9cc1393dd15f0f8f5cc39f07d20b0320316d6357d9b306be394a3face6c3d84ce2b474aa77252c8443cc420d911df473b02002bb455718a660287a6d2f9c083ae5ecb1274be5b0f0e5e79205503ec51f298ed51a2078457397ea915fdf4e0b7d91abcb0ad5217cde8a4292a51e0c0f9335766f9b6a8eabf7948709847b59b35789a9691712ecb9385bdc9510ff862137acaedf897b197527691c4d594d508f4a86af32e13fd6b3e1cad98d1feec4f3807737e300d606a23e1fd4d30bdf316893efe16e3c8bef212b97f22fddd1b1b6f7915513dc76cbc7894f543b9af3978c8fa8b16b667d6edde1ef168734233cfc5cfa3c07ece6559d31521dae9e2595276ea368e0e4a3c2a55592e0d7528b02cbef850a9341e89faf008661122003c5419d839a2619c9604deb1347450055cdf5a6c138cbd62cdb4555767f904e5f4384598609624b366d1a478fe9a905c4e800698f512b0b5c87b450051288b8c2c97b182bb55652d9c87f42cda8667512a5173fa8260eb45b3f0874c4305ec14d60ffda1bfcd31f23ac52ad22fa29f2ff7a239d4332477a4537eba3e2eaa3b105c5090bbcc2dd931bcb437161b836dbb026680938b782bb3bb6e3458b5b6798d0aa5fc4b239bce4ed349cb73eb75e70033174e5a2c2e4a44318f6ff8f6bf35496ee1811c036a4857287707efe5c9dbc52eed9ee374f4eb45d8361f42befc365994feb8abdcfbd73cdfced04cbd7c418e791186e1033bd23ea6dcaf9ca00f1a94cdb4578826df42069e216582653fff23faaaaf5e98fc9e187d2cd96599b7d8dcdb468f7db4063f6fffe2eee82347942450f834df0ee42c5cecd2ce621eb6e5e19b4579a55e229b984a1f8c981089c6fa5174079c49ee9d76b8d90f7b37080c69c7f757d4e60ed0a335fa8b29dea5cbc1d95f4cd723124e3e620cc0c326370bea74ee81934df14d81219f58533b4a4c6090bb609b9d1fc905c01c66d078d93ff72826fb5af3ba567efb2d59b956b2f4cc63d51e4ed79cc5e0202ea45b9c863d7e20676a64e7982f70de42d31beb32fddbe42cfb6dcd80c9fa1c49db84ce15d37fd84037025dea094b2442211a136cb486c62690ae792ff95c06914382d0119d38c5983cd8fad1006a9c93f15ee0c66e30337652ddd20d58ae1e6505b8b78d0ed8d9e7642a82dd7e52b4e2e5d06aadd525cbf56430807c4a52b32cdb80554729efd157a681800d73687c5bdd906f220790ec6f4f9f3c5c28d19a0c782cc73c54dc4da749ba632e31177812378612d84ad0e25e9776481472fcda9144e112327db4a075c3519cba94cc0280d6727493c0cc191b2b20453860f1f4625300ac72e010e2639044b5f91c75ccfe20a9148f8698eb9ac2e3727d5a664ea4dd2f60381200276817163a885492240e6d40999a50037bcafbca04d8a420b539ea22fa3294e95d7a0026daab249c8379cf7663968d42eb95c565869f010731d14207b595778c4d67e1a4658081aad55b67ca924f9ed273da1055c243030254c6fd8eb102017021705f95a5b6afaac0653ddf75043033ce8e1309ae374a21cbb2eadeef79ad165b55bd66164650240db5c7abc2a446ae316c2ad6f2753998934c278f71e7c426e0cf521348d7ad6fc733023daf9a347a74407f0c7d457a9b11bf97e5321d44d30e729f39c7b96588e96f8613e17a836c551d8ae6d23696aef235223ec12492a322c01c42e6abbfa624fcb3cfae60584039892d76ed67482eccad33d8ff9771c7a7cd0cca37d646e31842e8fbf3047a646c8197959052b5f84f4c90cad6c4e50efe832d50070825a8671a220dcb0bb79e0ee587c0e4403c6693b5cbce0d977e0105c1d9c8af88d280100580683df6100a66a39e7177cbfae00280620755f544771f57d53569de4b3088df506f20ae4a5f90aa42cfa52f4465d94eb54c24144b854296222b0db90292af8d01a116efb44362ff40cf71f7deecb25bff87ae1ea85e64c70744b07153753962397a2402725ceeb48b97f9a82ec2c86fb2e6d0e9918c6beeac4d11bda429f9c14e7b58b876c288cdf1d19f88d2a6a9366ac6f742e1a12cbf57b1e3b46e913f0b18d81bcf2c8a42c34fbe5068130f14324fda19915f8abbb18c8e848e425c1a0593726080eeda15ac32a72f11c12158181b675daa4a9aa97864e26da861283b6bfc071a4e5bf7c3ef02c9e21c9a2431c14e7fc2a2f31e8a760cc86579139b488e89b0254f5082ad1832f8ef3e2f7c5ab30437b618d0d862b6a5822502b8312fad60d4140e57708979a1c20bfc174c8e7ee6665a4d01f6d132164b465e1c720a2bc0c6af9e3109e8125262cd6edfb8d0d13ce29dacaab125cb4dbf70acffe8a10ae07a10bdde3b9a03cba37a81b5c8bb6c4a00d916d1243d212df8cdc20d79d4e6527e94b57b54cd2b9effb29ad53ed87a897d76c43ff33004493851988661eb128418d24d0698824fd9130dff368fedffd286064ab1431e294ab4371dbd0bf689e0a75a93614b8f6c89fde8cec2a472a37eedad3e86d818a8c5fe32fa4feb6c1b35149c2ea44b1f94af104995cc0d18cdc352e1cdc784be94938770309aa9712c7a27d23b61989888dfb57ac34e56f21d9397f11112b431741179e70c95875663b01598f7162c9de04e75d4920164512c5b2f4f4cef123a3decf53ae211aa3c100792a9ed13ded39c839799884a7e6500004b3a5a957821e5fdda3ab089b781ba02d06a21d7cf8dd6bdbc9c3915fbe6d8d6bdacf2dc55f2665d80b2445508fff1a255413d51a65c750b613f92599b3aaeae152d698b511a84ea2c17678376d13e057c4ae325e1485ea7532339319b04eaac3db7e1ec044d35191f19fa28fe9034a34f027983f809f4392727b249190d3e6313d40725cc3425589fb0c303a616eed5eb76b43f2c0dec12f42954d3f3aa5e495ea626a53a1dcc3004eaea569258305a594d077676dda8b8b168118b6b431e1079535572c034934a9535b937e431c58676bab45449ebb2c85487d9205d41c50ffff405322f0741c70848bf6427280fffabd0cd3526973cf8157aea6859dbbda4edbda54c29a542092209ef08512ab734dea64930d4e8bd34de475e1acf89ba4be349293d4e6a1b4e9224389311bc7db799b82f468785659bd19be7ce29f94b6ffa782469db7e30c2cd069989584b91a11f888c764a2f0dffb217960a9365c5337525d294ca2d0d77c10b5780d204135dd8a5e11dc0d8c1b59550e263384d9e16ebce3c104435fdc9fb6e33b9d49d0101435d6f46731c47924ba371718919a52639c9d1081a03f7dd66920b23080b957b9695b0c7b7793a2b94099fe5dd8d25dc9ef42f3775ddbe8d3128a872e51ad4984cfe189786a510a5862c557b5a54431652103fcc5c0836089ed4e64c12e87ae5e17c160864d55fc651f5d4d3ddc4ee23ed2b18102b587b04810b06840b8684bf7f67e24d943152ce555233258143730d2fb7852035aca1764ba16e535d733771537b4aec8b1253d69d794036f3800f485fbd6eebdcb48363eeb75ed9ba2dc6315bedeeeeee6e7777cea3b15aa8dcd27051d44d9356a8d19b0bd1a3b14655a87169b8dfbead52aa37519b0a953d1adb85ba4bc37da7b1a6691ca76d1cb77d5d3b6e499221eaf61d89938480bb7be54ad881bac5e8ac7c8c0e0c5ba1555b4d932c2be18f1af2483fc2dc59cf921a7255abda1e1d1d4d51b7df9723cc3c20a572ed5afb17234ced35234c96c14335e4c21cdbc3d46d96a2d0d58e8545d3643400e72edc0048c40e40b308d0ab7ec105e0dfdf01f0c7a5e1179796793aa9588981a95e7f34bb9066929181ac6aff329bfc9a1173dba877710a3e55d35ecd6d339756421eee612a0725a294cc30fe8a3786163d86463bd257b79007692e3217d926b58d931f99e400a8aa80cbc110cd61da0e8e78138a7cb823b82338d29224506444a12e49e244d225450ca9bba4082123e83c74b992c41dc459236a26ce7a7e6acbd41885580a6dd4ad88b2224ae4485cd79d21d143f266e4201164c1ad25935677d683296afc0e7b5449491ca95788d09e77e09724e6ce9090d59d21115443ae963c1cdaf3d8f388442197235c8e70e9814b0f22931d24a9cb24c94ffc4d7d323298fd2fb3b9cdc40c3977d741f5191054aabfe7c039d06d4c00d5b086ea4be34f5a18fc1121bb2b155144c98892113324c99ded2589b94b9e285277c913446ac84d6f21a94c634946ef12974acbb212fe880f5323c58010663e81217ee4273ebb71880fcfa53af2d51a2786d9ab97100e188519566a06642a835aa1174eb7fe533e862e08126e14cbd52ffa4b3b388581e55aad585128e2c3aa419975fed58a6503284829729a3277551c177e6aa190a4f64753dcfe3427d04442891b03177e8a7b82e9d4713c92f946651eea4c95dea7b8995a3043ce6589c96d0de743656e75aa618d0c9327bccbfc1011294a8ac9ad8a9fa331572e448c1c1195192ba87d98adf147d15851790b3344b9f834c3d168ee738d30f5b43473b96fc6a9f2e411572044b464fb4d452e87c6eeeece61aaca9883830a9aa8d90ca3178319b2bef6bb5e467e6d741ace952ce8845cac95ccd76086abaa42099b76c293d38a93d9dd821388c49af05371f2aa630a661855cce66ecdaa09a713aa09475846771de12a2ed10c77d6283e6286ff62290131e3f3878fcac1aceb53d47d9685b1bfa0d76c75692f8d873e2a0f5da10b8244b292da2c03e2897f9a466818b5dd8defcc443613cc9087c83082193e13a06cdbe6a1a0878a0f952a3d4c3022640890197a4f1428454d267f28a9d4fe98b7e4f78772557f0f2c7e0be3cf630d9a5aa6262064b964a4d4fe075b3e630bcdd08720e2c149928eb94f4b4619836ab0df55ddcfc331846ee09021c2e44a45889db8433de8ec74c723466d136a4348233925562588101c4c10ccd063b1283e894452680a538b01599aa6e2aa7e69f4af86492157754cc674889acf11ba0833831972754a613695067b4279e4e3417a96b044c81087f5cc5545330e8133814b1852fb67582b6483e32403ce8d38ed4f53fb659ea6e552600b66c8790be7bbb54d1cc182233e91863c91e6cce6569c6eadd0ffa34c351a8c46945054fb533338bb85a00b8284a5d08bfe2d0cd3258319a22ab764026aff2a1a518291da2fc39e4c9f503b69385b1f8b5cf84012a418b109b5243ca86d42ed87889124c88e24d98466985721aab2fbb7c3875af7e5fb110f72c10ce7046286da8ff6e32d07b2aafe20804860a47a0ab49fda3f8d786c697ac855a627cc909b55e849910e6311231c84fa4c4bb98d9fea17fd1c0f6691193650185da6c80c9914ccf074420551a1d3de7dfb453f8c0ca6d3139dcc34e56f82f929d0147e6a666856fb572e28cc70a6c61afcc2f9563328a239f3311925f0904f8d0fc4c3b86f2999b76ddbb61c280ed23382194ecfe78719c375cca737c45c8f1f28a8d37e53a11673d30ba6c7a490b766eecb34ece93139259c278fb5cd3259a248edf720dd0989194e2934985b7b397355f7d05013112d0dbba8a8a374148f4921989e19ca295324956e7dcca4c5aa20c1689362b6512c161b418b60222108bbe860aea9b26906234c7e939bc0283429d1a4f6f36c157f201e167f53611b318f7ed12f8384c935d83e9ba14913220946c842ed370151fb6738c20cd72805335c23a346a263d8a6989953146c10c80cbff290f03ba8a68644f9214243a560863c4486cc9016144ecae42a44adeae725ddea2067a06e35eac97412d404259b41dc4eac30b9ffefa0a0dd0e32c30ed23e8e42b94f5d54eb63fc4524213a86cdd8acd241ba67993409aafd2c64850a66ac86a6cfc7c811aa449721739918214a0de32fe185a38dd4fe1b5258cae4671cbaf24ed421be94c16786dc0a446276911011a6f04151b845cdfdaa9810f10177f0a81c87befe4c56fb533348f8817898fc4d99603063f8c11a690c536e29c2bf37bfab800993590d636d9965c22448ede7588270cc5f0a4530ffa1b629b5ec84a0a8c16e478826deb1a987b4cd36416248ddbad3f3d336dba40755ea8e104ddac6e98e104d2a173aae857ad79dd49ae4ee7ed27191db580931bedcc8ac04bbefd2f8a1e3da6663f4dd5d0ff48891c5fddb55c50d54ed254cfba84919613fa20fddfc0489ec808c9e33906debc0f7ad9986c60c853761212a0109ab8008ac8276f6412749e106fcb7bb9b8dc4eee8cdfd01f61c7e97c67dba18998d34cb00eaa25870a41c7e2451a31005a2e83aa0c92f3ed309dddd3e9666ff6588c9dfddcd5768e97dc8adb0f0fcb6552bdfb62a725a87ae99de3926919ed3be9081f8877db8876354aa1845d9a21d5a279aab6a30b499c8adf61bd7667bae47e59cf4853f404d46e451b7ef1fa3d9108fba853e6c2dbbd4dc922e0b63059c6999c1fc1c2b45ca6c0b33470f16a2c37de3b828e6ac0eb63c3125954115cdf6e8bef9ca3de5aa5884325083f1a198a91aa30dc8447863a51a7cd41666c844881ce9362a4636ba0d0215e1204e12bd1bde52c0aae233a1c66f12454db50d7325056c2b022c581269468d96f8bf6db3555a2e57311319c38cf17eab3f8fb6297dfc1e9c6906dcb611b9b13471fb3aefbb6eef7dcb353e54377d31936be26f75e1e1da7d8b14f389107122409454672239d0503bca9d6ae95b57086eaac1f82d4f4c8dbe4caa082564f241176364d5d2c400b02a4650a3288f20084a7aa2132c01fbb8298a1ae30d2837b6df7c4515267fdce9af871bccde02e2e388cc2b57c5671c0dc6d7be1e1a8ccdaf31dfe01b3d387a689bc840d4f840c45f79ebc6aae2731c8a293843d3b2420a73b92644f5d0e08d06238e7e11fb634a304354bdd1aaf831c6186f341867832f4eccf6e19420a5dcb134327471a95b6a5d805592a741a9034a6f3abcb55194732e55fe8e6de1b02af9dc4a516511184811e4d690cf39994faadcb58163f0cb4f718caef2637c66fcf51552984c976bfc43948ed7d16234357a7aa1c2ec8f6268c98dd3dddddddddd5ab7a6b5ec8ebc226486b1fa8a90e9dd4571ca26358e9372dbb8174e8ef72be7c689d91fb2eaec87a2ed47a2e0df4882cc7a35bf77bba28c31461ca11c4dbe729ade305de1c821f3eefef81eff2524340b32841ae911ccb2bd9c71c59b97a6ad3cc6f8ae063de5d1a36fdbf7ba71c5f8dcbb5eee72cddcccbc70e2af6b55fe9c6b673f44e1d28a686dc6e539fdd590f2c65f06edc3eefec75935d8de8bda1a5fce572f871a6a3f4e4e8dd6fc6bb4a4af06fd7d976c94709ff07da2fa4fc07362e2acca9fe37c67416050230de7922a95a075cb255b0c6335b80416e862ddb858ac991b8ee3b81b178be5ba61ddac58ac1bd78bc572d60c08106b532d5fd05561de202001af85b1d507ef90845d377ee90b97e2bc7038aa0154ed77aa818dd1e9bea33f60f26f583937a2b418c94e16a6a8fc3cf4d0362a2a3f8e2c1455fe1c3cbe2ca36e1a33168bd51d3c5aa03089e87958f7447433ddea9ebf57abf85f2ec40f38b36a9baf926f6e38e620d4a6e1bca9a5e69234d7a86a51b9caf85ba7d6261ead6a41c00db1aaad34a88082552d155cb0e0823188a206b7c5a7aab38f05695babf8514655fc36c6ceb0364eac6aafc07161555b69380186556d0d61eab6905107c7d0684cf75c6370783f3aaa26aee9fe162976bf216d390e6457ed7b3bf52969a16b6601df61bb2ad2066a9362916ed653a59f90d360ec385a03f40410d7681b0a746ffa2e959c84a2008facdd7b5ffa28e06f7a13d7277d5bbb68aaf15ee72c337de93bd357a3842323b5c4f0926e01080d1115b58d0c942a4461a32e91bc9d0997be337db7deff1848ef5f7843867b34878f2cb3af10b1f23c361d674f0787ad501d6f7534fc120d5135dc21cabd53eec351d2aa7e9c1a9e6486aedadc5ab56a2e0348b2f92c5f82b1b0fc4281b1d0981d567cb07c2cc43257c9660c01602b4e43140160fd2808cced1fa65e0942b729ed17f60b561e0cebd8c43ea79f91a248951d24c511e90551f191521c912f5252f1a992bb99b58f61bd43de33eb911265d603a5011d37c109449cbb67e026ec490ebfcb6f0e347191df3bceaa1327442008323992814442b75faf4fb76dd34ca090d5feeeda39749b0a5bc42a7fdc066783dcbb0eba0a4514405a231d6d437a062c4c8711cbb37cd785383c7b0b88dfdd7acb4e104442942a69b06788efcf6d512b710dfbd191a9398f7e402cf423c2fd441a6b9068866bb4e409b3f4332ad4600c56eb11d2941ee9228b7f75546d89a52374ecd198b1251f4c1966305b3c9d1f588e8e8ea680cd7fb5e44ccff2853956f4489246c27fbcb7894634949e76674f86f7d11f4ac45340fcf035da2be8201f50db84b406df57a46d6292865181a82910050259dc732a734aa4410ad4207fe908d33fa43f957f28900e0e9b4f651e0b0d51ce477449b718c680089b5487ab5838a1c96083e955fb19aa1395d68035ad061ca3fff3a3a315d3c755fa43813c17ae59a9a68fabac041ff5a0c530279c30f3e41afe2626f5e9a80d66d71e278e6aaaf2f3e841fa0e42636d430a57313b7cd40ed47d366286df142a4434d490ab1f0c8c8032d4832f891155781267f067d4361c25fa66e1a9869fac9e5a7c49ba1074901f2254f88352b941260111469a59d4aa636170653aab4b94c81a94113d193a1f111133fca670cf0f11fe0f4a7f444d68ac8e07b628b0f9b4c75b93f66018edf19727ccff88be274528b0ce676eeae87095d0aa55dcafa36b2c8c8d47d4a6a821a60e9e4dfbeda7322a9bc54c407b68a8cb040a51e54a656dc3311e2d4566b84637f4c018ca4fd568d38e0a8dc9aed0b34acc341154b98a3f8d2d8ca631334845cc901ea94c8fd0a0a1ca3449e5ffa6b48da41f911619ccf093d54fe6ad153218ff27f4cdda86ad90a4865f936fa8f2d32050f095cc082acd0376df5f02d7708dc24f3685070fa2c82a3fcf1a194165ddb2fd1c78fcd4fd8ed81695b94ab630fa992e31342b42652a0484caffe26476544612f2965965ba44e5d65c312b1ca1322eb255b88787f00f03b1112a2b62f53d6990bf221ad4203de2d15bc0572aa4a4415e71341be49725cc0f683f220d320d98293f36fef167ac9df61135c8efedae1540a8a8f28f1476adbf9f276212daf351215e98fc5bdd06759938f153e3f7d33621eda9fcfc1f91b66915c8822a3f55d2364c976839c42a9f46ac920af9807adac6e94784ca2851db74b75846b1580c48130a058a29424b9a7052433ad484ac86f4092da251aa20a586544a748dd3647c3f45983409a541df4fe5470d811ed9afe7f3e1185a95f9b19e0f0ad7f0ac7e4f700dffab3fa2efc9c2d09eff93c2b6e80f75c182e14734832a591a7eea0253e5a73fdea23e58157f532a6b10c89caf8159fb351af311710dff053a567966fda0c035fc0da4fe30432a23aafc54e65488650836ff078c9fcea851e5c721b556c7b489aab28706691414f8349c5456f94b1e985b5db0aaadf18958d54e1a509860554b038a152cb8a67f4d51f909942782ea94b6691163e9037061fb8d89a26fe22bd3ef87da942abd390693690c553375df99b6f57a857bb03dce801e25835c2a4a6d06f466eceeeeee3273f3f6db772fcbed2ff1e565a3e18dca2357bc90bfc4fdd75d99399ababbbbbbdbd7dddd8b5a708fc642e1ee05366ea0886cc41863b441c4b30e62e99308ba92f6d1b78e5908fb784c4cee4becd3b937c3eb26861acafa755fd7eea836ddc147b55bc20c599589307d10cf66a2dddd398031fc5cd7f85bb52f8669ac2d4c4ceee5fbf7d8b8c8cb318ee3e6ecf18d9c5c8e8334e8b2eaa62432677274832395d484b3471e5ad5cfa3419e0697a6630d76cf977230633f4fabf8ee6719cf607e28e8e75b180c0f4bd3dfb13ccce7f23a6d13a929d21fd5b4e2fdcbc3fcfc1dbc7f79989fdf9af6bd8861c2bcf72bdf3261defb962f26feca551dc11eff03e6ad745f9b7b2e622a51bcd5f2bdfd8a6f557ca68f8976ec0c0f8f1e1fc7b887671fcbd86748a8e551069acd1aee93da322ee269b0417fe6d7c123c63c788c74f0f0901c59078fd611723c7a0ca13cd631efee47d72b4bd897dd6b92877cf72d7880333ade92e165b846beace1e5bf6c782be6e9cf1e1afefbbc67e156b289c8dc9ee37e69e413792b86c5dbf00b93dfe2178682a1313aa4bec5ef906af13efa5334e42aea7768f1a916a85f18eac482c6e8d0e201f03ba4de86d40320457dc46ff1f20b7b6141e537161f6e8f426d1b8b8fabb0083915301b8b477dc7e203515fea39d4b390815a8ef6b4cc0eb282be0aea72daa5a1f626cde50b676d991da4ca67f972acaa17f3c5c06464de7f8798e798f798f7d1d47f61dff7d1774adf47fcef17b69ef735fc7f0dfc35f0d7f03efaff1736c317a37dea1746830e347c8bdf61864f511ffe337c0bea03c98eff0cef233e0dbf30193e1d57c9f7be9915fae18899e17bb94a7e0ddfca55f23f191abe4fba0cc7f8b6c665acc5d248992abffec264be85c57c0b5bf9b66a32fcd248d2775deafb06b55db94f25c72df8a51a94f253a0e476fb4ac30fc14cb58d7c70467ba9494dd3341f6ffdbe949af47ec0b44b149c14647b920060de4d5c61b4bc3f738163ac945c6800108001704c48f5df5e2a41666c007ff52d6c00dfc2c06f6101f81666c3b730986f2b00be85b14783c512b3a5861ca47a10ee71f13546fef1fbf564acf8571735e80de5515fcac1e42e2c0c2df0cc5532bc3490b708f0febc858dc152b8c6dfdf53deaa792fc0fbb7cc5b2d9e88a8fa0d1f768f8b0ffb87be8ac54fa3a5f1371161231ab1b291116fc59cdee67fc0dcaba106baee7d0df405ed917a16fd01f36818b3832b0defaa603d79ff82f640e2d19d176f437bd4fc0bea465c3c8bfe80cd10faa85d04c59433ede5e943f99e7c3fbd7f529edefbeee41969deb7d5f36478ac511f6ad08942772213f3eee4a34f6ba04c8e84a81d0d5c7df957cff085fec97cee24c7aab2b8e1637deab37917df8baff95a05a09416e06b688fd417e07bdcf0f47fc05afc80a954efe27754efe2e3bb68f135b447cdb7f81e2e5ef53f605ddff0c1f8d4d77a179f01bee6737dfcb6b260f1add6ff80c160fd8bdf61fd8b8fffc2e65bb447ea6dbec70dcffa1f3097eb7fc00cf0e25bbff3e25b1fbfd57a17ed51f3adefe1e25ffc0f1801be06e22a32b428c0d7465a5ffbd87c1da32f589f7fcfa4700cdec2d6f8bbfb501796c63fec1ab294eaf45b5801be85c56fab0cdfd6978fab2cbead04f81616553c0ab5420549f399cf628ca98ffbb81478c30d9fea817295ff0df406f0068a24a266cde7e25bef06f0c5c4af79d5afbe9848637470f137fc0e35af7a177fc3c37c3139c4f73ed2181c62103d95a76b06509527c6f5a37a32bc8861baf89a4f3dfd90e9f7fa5c7ccd872b1413ff46ea4b3d7d062ccc86abfc29ed91a2bfb09a0fb728457fe0231812ed17e662e62d167255d190b7688baff95c7ce0d7e203f0d1efe2003efe61d98a81603e226cf8e6207f1ddfa580bc05001b5e7edb5d7c0d353a51017ca855d14c9a998f855a2e686c150b0258b48fb7b034fe2bfea58fa73095cffb9aa8e9d700f8da88abfc03f0b5cc55feaaaf5bfc547f1bfcc1cfff86cf5f87fbbbbb0d0bd3e1fb2dacfbb85afad8a84536b7277d83ce53e233b3113769d09fa938c7cdd9454c85a734e86c145933622a1e290fb151f50f79567d4adb78150e8a454546454c8ea2a8911ab1f85143df30837fa1d56f6bdd9d23f33feaa807d55fa827ae56ae21d6d0d0bb3821822c120a484500a157d1c55ac92863d43c6a5a94313a77cc0ad55743ee058ed33613d1ec0f73e059ed8f3dbabd9f876bee6ebaa7ade1d73e6e2377aa3b7c0879dc3d7ae4b611749b92affdc23498f62d6c070f7777777777775f981c7a821297ae45f7e8ed37fe317a7b778c31be5cae4577bddadd4574e39ccbe5f27ea2db54d7b5e7f6fbcddcf346eab16dee5ee377403a0e71f3a1c697dbcae0efe4f6a3c6e7be906bf337cb54edbbfec21cb5b796ade197ca5a68010d744b659f4ba3a3f64f23eeeeeefe2dd62d0c47a2ee2f4b1967661633bbe69cf38593f3cab931cdc993fba8a58c204b5b9c1c6eef7de5e474fbbf7072647ce5d09beec69143e61e825954c3ddddbbbdbbbd8b78828b4b37e0e65f096c1df7fba51015fdb7ed9d04b2400da741edbbfd72b85fee29b0aefded35d287dbb6bffdf6af06b57f35d5b44ddb36d297be237d390d6aa0b6fdabf49a56da489bc669bf9aa6d5b861a369daf621ab6a1cb7dba6699ba6699bb6461b12ba4d991a7c6922a78507939f85f36ad0bb5dcccccccccc1cd9995742af283798c562667e1902c8f6812270dbba25b38d0a6ddd36162bfebc925293d2c7b5e4953caad37d3b0dc61afce32d16221f21394a1f2e143a1adca4492ee9280b953e56a284b5c4552a6dbb6d39b48ad360fc1facb6e11ae3bbc986b7d80743e02633c4307348d92a44c82af951d26d1ca5616fbf1cc3e5431e5ef9ee5371faee83f9aef4f1d0c8c133a4f442280f6930be78fff22c2c2cee2e9ee77dd39b2f2fff7296175aa3c1c835a67f79cb17f2a86021215761be309e3e1bdeaa8017aa4051373a7bb8a7418ee17dc813648b31ca3d2edf756c62f93cfc51bfe31c5ebe7b1a2ff44775f9c2585d5a7ebd8de5fdfb51b78f876b0b2500d7b07ce90b5955a741961d7e74b47da10f757b76d36fdfcacb5750516627b4a4d4a46dbaa1b6d9d2c7988dd658273978840cf99e2e8794e59ad27ba52fdcdef4edcdd8befb977b4fb926bee98ba41f6fb19258521249b4cb692e87b59a618145a723b19b2c8eb5cbad965b8e822cffd578a80e5f293cab43e3382e8756b5ff51576da36dd403feaf063987f98593e3fdcab9c9c1596fedf34f666627221e458ecf31c618638c31728c3132b72c8a3bbbbbbbbbb3bb3b733b731450a64cd30b1866702136d405c109962c168b89e9cfda0da40c9a401139d68285c9cf5ab9582b66667667771b3cac628c31ae9a609e9f16e64d8d1c9d1ab346318a518c629d594e0d9d1c1d9c063b476767288abbbba39c46298a4be4cc8debc6e5eeee317a8cae178b896e70227dd19bede8dceddded9d4414a51e6c419e80619b01c5216ec11fa1abeebf76c571414cdc34715ccfe4396f4c13c799263785f8f80cb1892de3628c31725c11a709edb6ef9c28d4cf6249b42c2199143d412aa21d0c93df5d324be6c8919959b2941c99dddd7d062488ea2d75e0842048a10b33204882446f71329fb58a4ca6c082118e98428aa127cccc2cd9a5f4e8ceb309533061e5cd494c6666666e421376e018cc7af21fc5647777eff6eef6fe81bd250993715e9c13e79cf28593f3caf1e98419b25e42b3a7d0d192da14e807355c930b6271684867d3e9741606696938f9cce1ece834f892a5f41c1bdcff7fc735cb6ea949c9cc3a53d3d16cec0ce9e4d8f8ffb7b133a4b36343ead8a84165878a0d1ea8c49812928358e5bf5aa771d0c25877f78fb56b13c7713d82a22c28e1da59d6d0d17e23b5c7bd7b322ed07150b75808a16522a50a0b2de13e4cb0100567820521af5c54ddbb92c69aa6691a89865c941a3b0dfe0f341e98655ac7491af4208f41dd9ab21e64141c3974f0b84c4a292507adca9fe33cc83484351004b50e546debb42a0f07d0c274347bc09143051666c963c771a387af12171c9a5d579ebbc61863ecbed34cfdad0a21ccee967d7dc5d42cdffe37bcc552e432badf3c05909e694c5c89f4460f5bd4e548cfd44959a3eba4941d8e1e72f8ce0d4c916b21c2dc5e3bf57023ba478fee7ea3071cda0d1c2e739af9508c314610dca248b7a8c8d42d4466a422bc53ac06777757f557bb2ee68e2edeb1c103bbbbfb6ac533203b78c1f6f6eeeef7da7dd7eeeec68d717df7bf519d0409f7f696ddd2dddddda56c97d2dd9bfbbf9bebf13873e3ea76b956aff8ba71bddc5d2f5683fc2ea21b9ca117bd69d015c45ce666e6580c6af34c48bfb7b777b78cbedbcccdcccd423cb0fd81ac2fdcef6ee66fcabdccccb1bd6f9ac5ccbccffc5c7315ba4dc98de74716201803794b86939189dc4719527cd3d19c35e258557c8e063307317211e25b605b2b30d418ee518d0c821a23a3a0c67f7932e7af5668087a34fcd991bedb4101ed39ada435a99b6baebb9b861c496b12a9b96e57b84537348d85657ed3d361912b2e229ff99f69e4b83971b011063212370da85bd388abc1288b44f9514a29a5c4119fe3364a8c32b2604173ef5f57c9e95a901638ba0401f3a71553497b1716168fa2e152d90655d090856c8327ea42597c6bc4c2d18d02caea6af9c11077f10f3333bb4776676e974d8c33204ce815cdf9a08bd2dbe5f29e4cf991ffd514742d8dbf0be85a182bdbf6814098f2e383ae4e6e2ef9524a295feeba79b9eb255760f418dda31f2d51a367c12bf29f9f9f13112f3f2cfff231acbb5b5918f27d0508350bc3f3de5fcf3116ef5ba9429495fc7cd3c7321c96b1c98b9e89e6d0aa8ec9fbb8ca328ed13d2b75bef45e2f9b1175a6254edac64495087193b6196a1bd3bbc9443de6ad0ac47888eadf1d21936da6d757605b0cc4a5844ca4da70991866c83fa5f728c7bcdfdee54ddfe6b527c323bdcb720dd7f87b2d52fc781e77aa361cca8c95ead11ca66aa37befc25de27daf27660bbda1ae06551dcbaaf7aff6a4a9650873c5d42cd23349939426afa5e749930c5f688950ebf4fedd7349fdc5d34b8c95c85848894c1644887f8494c8644a84bc2413ea91b1ac6d5c4a74ff61599dcd620771df751ef6ded219d2e118d2e43a4be38f8a6272afb3305664a8a5a71bdd41811d5cb9da32049c1d9d2f94dfdd9f8d9d7e9d1c1bdbffbf8d9d95afb363c3756cd43072d3fb4b157567409e54b99ba9fb7ee81e15c564d387f2743a3a5de51367478779756cfcdbd819d2d9b1a163a3c6900e951d2a3678a0a2e31edd24c54fb0307a8813231dd44748463d84bf878c97c684b3be3cd5a8cb0fd80ee979f28bdfb17f8c2ef4f4e2e2b2e25bb9ca55ac4eeff292eeac7818da03e657bc832b688f9757c1abd3d7b5e97452f1272a57bc0bcccecbbbb8fc0b3d3d0cedf1f2a715df8a57819ae0cf5e1ae6a53195de743489164657fdfb89c7bc353d741fff2ed2a869e9a43444a1a853f9751d859445a46df590abfc91682f9feba4e9630ef14d6ca4687235fd0562116fbd681ceabb75797997dfe1e55d5c5e7670f171a21c2463c7bfb762e49f5cfee57758f127eae3f42bfe85ae781f2ebf345afc65f7642c8ac59f502816dccb9f3efec27c7cf9d3efbcfc89c29cde0546c5c73e31d4d779313a9cdee5774e2f55bc477760bef3765c5e055d57498efdbab77c2091ef03e65fdefbe92d1f2afe04f32fbf03f32f28157fa2d3dbc1472ed40712ef7db8fce94dffde5a11dfe4c5e8e0f2a7df71f913f5e8cecbafa0efaaa8e2d3812172f9970f7748c517a3bd0e982f46a317d8393dccdf385139fdc25e3e5ca353b84554b67b9863652a7933566a0f591a7f164bccf85de30753394f014b851de28f824514f65e63efdb9be1d16d90f9e5d2b475fe3d04d47d5ce518d0c2d8274e9a2c513264a49df410f7501f21020202026aa276d243acf550b7265107f550db849cc71e02e4ad1e0202021aea211faaa106cec53511992b77777797f54307f1e3f02e99f11037217ac006a112e9d67495f7bef2fefce3808df1b281c35b2eef2ac0252b257c2444c12cd18ac7591aff35ad7c2da3f48e33549bcc96c67f5b627a528607c3ccb1aa21067e546dfe7c399ae112751cd9e5c5e5517461919726beab828ffa85710bea7760717ad4fb8079167407d4b37816d4c7e951b47d96ab9a09876370dd1726cf6c44155f4ccbb37815bfe28b69a1313aa07ec5efc062c5b7b74b93a3c18e1f5bfe476561895fefcc17511f0664c4a7b1953d6ed5716faf843e5a011f05228dc9a1e5f9e34b1a8343cbf3cb6fa1dbe0d40057edbbd7be15168aa3c19536f9af7c3ddce0817b5c3e1cae7218f0e55b27d22a5e027a6f3571d5a5b4449307b631e319cf78c637886cf07023a7d3a8f4ad9724390a11cd08000000d314002020100c868382e1603c9e08926a1f14000f7c9a447a589a09b424c971a042ca1044880c000000008008b04d01c4f00724c8e5779e023ee9a5edd2da30ea243b681f02b1b97bb2dff0fd5f98c029c1a90ae6b66e0ecd8761f82c03a8e666d34e9fa53d69a14cdb8caa27131c64065db92890101a1d17eaba3b7f475b64a8595a720dcba15722f9f3b78b9ebbd8e26e300db2319aa6336edba603089196cc001730c0b783948b4160f91a9f39867b6d4d0d40a4dec8f2fe620ba02b2c6e3eaed635f0dff7810a086cafede642d7f671994d8abab7661731c0678795456c60e4556c14f6347830f9bf5ebd4d9ceb43a43c508ae55b30c9f2ee0b693094892eb0a141d675bd2d7a4be01cc275f9ac2517516d269154021b53a760e3dd4c4de30fae66bd798eede4b4df38a2e73c57cbe601bc4e28a28ff5f1d98452f966787de0ba942b559a2e7d2fa5cf90e9ff155e07d8c5099460d70ec69cd5fe871536f0ac44e669faadd440e61713b1d8ee7aa29c4890a59c30ed8b62995aafc62e0137726d5cea4f46a039ad7a2e742d4261fe282dca08d04d0ea9d56ed33218ac6decb1106c5dad9edaecb4c3b2fc9cd18aced03d8f624bea5282d2c4796ccc82e1e04373db079db22c679b3a1da7d29883a93d052bdafb84ceaa84c24ce8f1abe66de6c1f47d047786e3cf13d4c13bfd4c55fff79f8bdc414063831343a99c53d9f7d1e6aa67c41988294008a6d06c8e9035115d5259a18d994a3e0123f72f406526095970078c17ca5042faae5c2d38e642501b986221a1810afd28279056526f7e54810592a0a7706d7c47dfd5cb15b4ea0923e1949f0276d548dc0cae5828720e1bc1c750616dc6883431eeb726c0e6c975dc685a9f77ad64b922aa9ed5a53391f84b694291d8d2aaf5ab9a3864c6bcb2cf96fa4c14519f8409c6e6529f05f1af16f9db7b63c89ed5929fd53c8dfa5451ce561e3cc5df158ecfc435767ca656594cae69bc1141136f3a14373c136564d99354dfb1a696f5aaa991e0a0ea847d14305963af4a8b53c465391bae6b0e8c82ad121aae1a57007c4d591877a9d404ed004c119715d99cba5deaa64d6dca3d572beb9079a6981d3b74e658eb639767d17596afdbe7f8f99a301605d7aa1591fdc1d418e221c399a701cb83e586ccc424072adfbe1b12bf17e9430921e8160930b5267a5ec3c5abd0802aade11ddd65b48d3bd156054f03342f9372fc0f5c2478ade82a8abd59bfab9b7d9e4ac53b2f7d66b91032e68af22be40673e597291b567dd0d9ded01007788a8aca54c127dad44069356860f50d74e554dc55edc6a4a9f706d31d781d8ec7b400a2796d1416b5b300b96c1bb8ef97ba0c3801b614a73b94da9a481eaed0c799e611b475c9f0fa8a2da22719a542422f1d30dcbbf1e225f671884ff6252fc741930c58c241c5e4e2e652ca13561674598b5b0187fd261757d6d734826c6ba99a5b8f622b2b2bba1eb112fdac29edbc79eca3c87e094a296288c112b8a1d87329cd15b19ad1119f552c0c3e406c767a68dd6eafa2d4960af2f52218d1d706e14d051bf330a9d5c28a0be6296db95716e23102649207d0c81b967b4e09b564255218fc4750cadca54062bf47f0f53de0908abce4afbb957d7f820eb185ed7a2119e0451b9ab751558d6f4c2c768a7aed04370efd27cbf8602845d333d78b22e4f57674359b9b21ef78050dcd204f6fb900027a86d848acddae5f2483b5c48da94127c63e7383b2275672ec2d7e6d3476bc70e06812898085b7911c219f454854d934253bea098d7337f6f1b8c6ff25962a7632c7471d3e97636856a9f0b4def1edacc5155a6f401515fce1fc182bb67cfbca25811866950ceb74936aea34f399c04358eae4a0b37eba3e7ea70498c9126f3eafe7a46b3a89d7814d35fb40789fbf2a8081621b3fb6dc275454649751caf9c75d5241b207ccc292a8bfd823bfc2568eabeab637d8d76b49fb64bdad162b5c6bb2d578a495d920117a685bf94ae15453eb10a9152e79d5a82ad764324e460dc682c00cec86cfe9e0d323525110a1dfa2ebaacc5e93b52c0f0b7f69b66c98c0725ea429f34e53a368a5c36edac98cb7df66057b7326e27ad6a64976624dfabd21c296f37b9f2ed13409cc86fb96ab8e74b8b5bde207de13c18e138a4424da62396308df952d66a4d5593cdc1766f062efccfbab1f839583a64e55e856e98b5bb5d7376220bfc030919d99e4a66c9377d7937e74a0093de9fdc1e333aac554bd6c81599ccd6c5a2484269db0155028db13f7d48b7eebc8e07df47fb478dcb292766f0d34e96102090cd7220e5128fb40963fd9774a9eb77fb20de09325d49f6cfa26591821220e23add237cac5a7ffba9b890531feb8f9e14a09e47ed095af496ef1be222029b7fc2b4540330f3c2cf98b188222e25b302226ea5616f0ac93169ec44f5ee488c111757148d8182658143df672484ea3ddce571881a8c76aa1163f54112bd508fb32f7452bea8194e023d03f5a74835c57c49186831df48283e3947be4c24535c30e2519c409213adf421504fab455a15ea6f3ce036a30d6a0341cd0d1a31480d4e4f5b9391048168a6ae1b6780c5c960d11ada53dea281558cbb8ec920308978359268e9b466e3182f908de211c04e304bf08b3b73268e43f70853185a1a3b0b150f2b8aae0faaefddad282c3baadc3d0d00c563e616abfd92d9e3fe90e43b979326b76989fff891755bf348b77b530b7fb82713258f494187eed6cc521214f0b8914f9c0378840d46d918711fa90d0a7bb3b913cdda51fada17cb669fde4888b6eaa471db952ba3bf5321600f0084e6d28eb2fbaf69397040b32698d0b02e664803c39ff98088199cfa3dcb33eccf127331f452e1c5728a70978f38eeaea16d81fb23375f2f318cc62349148e5684119114b6999fe77d0ce5b0f1622ef65e3c20b11dc058bf567f7155f7ac302ff73077d1cfcc4dd090391a33c88555f14d49e580f37d683b3b2e84da07aaa19e142cfe28b3155360242e27e82872e484e2ac9657b16527e75e2c7e5e0956d43de741b2f744d142d5cea99fc8990756d837a0ef6dab112820020c849e8cf7dfd7ce7941f4ab0963eb694303b9588d81394d537a6e8ce2ab75a89c73ab196e3cd610d6509136104bb3ca8d28b3931355334435b53b4d4f03d9e54c9c987ffd02afc8437fd45e80ee21a1c101510e5da289e4676b01467055c861105215e6b6c606f74cad9a794fda56137ca42181ecdd910e759b8628d00cf36dabbc2aab8a23394faae74361eae5176b316d269c1c36953dd4fbfd9f8c0e4d0ba75bdc108aa61c94c95b41a62a824920579a73206b432398df5b6ecaccfb4ef46006826bacbdb95f12d6fb5c71d9016a18a4a6e2d955b3cd5567bc008d5a77c3283f1795be8b66ef5c74b2921206610c9fba16fdc74454f24da3b9f3ef8195dc940d4a1b2346d13526cffa30856dce2717b29ea56dd246b0841f70d406f71960c8a29670f600a1c77f114b37d53501553c5cfbe11855fc84e9c7324013df8ffe55ff0585a0633f08ccc098bb5cf7b5b26a1b08d9cb465448c19764491ab3e440117ab0c4db80536259488a534a1d4e752dd2c5ead444b088e0b42e3126520c13ad67058c0050e370a2b9e19c2690ea0514dd30c65bf2283a1a1f74164eae0b96e54980040de48d5f24b884c602bfe9502e1448e2403cb19aee79a5bd622115f4f2a67c0e0d294da574c467fde1eed0cd1df2902c2fc6a8dd75508604b1ad7e014886b712f712d48449df3394cf0502e1617bd56272ee3775522e6de0a05aa7c05b7d8938b7a70377741e5daa219f3e0728e439ba64faf76e1a9911dd62c5c35f3fbb345bbd0d0d2289a03360257f2243c08cad256a7221de8954bbe997477fa326f904b08d09c378b3ccd02dbcf22362633979bfb829042734582146acf8c444a4048420f29784dcd4dee6f4808ba22a08625a45cd566c7b66378245d151c4da0a89072beaea3da953d63a5c08222481f646c71350d25f49ab231ff6f13a0f3efa784f60d655d277df83f9a972b2f345a291f90cc5cd2b2b3882ec4a9702cf18fa034140ad00b0d1d4b6259610892c5c51b788d54ce2ca0ae7cf53d70832274b2a4b0f1387375dc0cc34741b732e6c81c1cd0d39b4f7cbab6e54a692ca1693818be0f79a26b760ac256c38964fb86df92585e81b0b5418bf68d3e0ec2aa515b8e8fdd2a59306aa50cf8c9c62e2e8fee63174babc4902b32523ee23e3513c6c337b1cd0ce8d4cf78b24e892f86a99af85599b1d8e105a57034d1ebecd9151eabb0f0e6202530cf680b62c0c8799b3380fa0170116cb5e2799d6cf0b16337601696366d4eb6011f29f40cd67f19a5d1e98a56445476c1af2fa258b67ea8db772693b22105c533e6a02ee4c0e4544d50c1348bfd4e478c91809838219e5dbc4098d8463c2fd175d26dd38b8c9cfe2c6657e39fb15c11128e6c24f64b8d266c743b3ecbffd6175d7368a6e7bf55c866d71cb813fb3d590e3ff160e14c784619c9c0897414ac13da4d0a91cf470c48c4081fbe5e1fa90b89f5a4c3c88f095d2c724de289a600352fd65eec7850372a8418aa561d7af8ff841df5321572d62784c218c3c3a429093efc147cc26109ea35952750a00c35298963b87929d84e7d879f925c926d6a21c4df4a792278b6e7a2e7eaccc91813a54f0be26a5d28b6122c0655209b82b49d48cb18609ef2f259eb0edc03c5f85c2a289af41df0d533a8e2910e7b11e19044463cbda4953d1455ad2f8e0d6c80bc2ec7dc9e19fc765562d1269a891793674b4efd8975c138e1ff14a83fdcd6fd50ff602dce733b5e5a404cc0ec2a9654ce885caa8482209250382c65c9e3026da1dba99833e13cd6ae61bbc439c679be50a69dad1bd40f8213000892eb4362793b5efb41a4ddfc613db979238813f93ec32b87da9ff68be4766879bc1f7651d91ff428c9d99e1304b8ca9bff0aecdfe8769ae0d3a136a3011f44296b4ea1d3eddb45006c2e606d8f3ab16b492198b3528c594deed497d8d83006968e89b2abbb6306e9a6daf9f939cdab5cdc9955f9e1cad1b87087c8f8d6c6872b3628a2c8d2373be5b0d14951b6a8e8aab54bf5c7d0fe7bd9e219978602abed583317060d3132551cca64fbdbc68967feb7b76e228c8471bfac4a4a4bea65362ccc7e1e7fe8912f705ec6ea1941e1ecfac42facf9bcda931277997f11171ccf228b359ec368c498e6f8901a90cd21f0e0e1fc2a7c973480eee4c9a011732236a1acea3059c5e24f672a54b8afe8b64b1bba1603bfb0d0e3089ded28f9085301111a1b0e831f7dec4ccfd6d91cd9b4ac60f46a3709cf9227d714db657e13696ca6a7b0e96500292988ec24fa8c08d1102830015966416ffff1b7bf352bc332b8467e057d60353a41a0b98067f57276a0f434dcd9bd8c004ce4ff39d570771ad924773f09f9335697ac43dc8918ad13721f44430f31b21446e0338fd6ae368ffcf1d470096eb790694baa4ff927d5525c4fe8d0c52b1dbe490aa419070ff060f0445c60e1dba220fcb39601deb0313ce5be4f950eab29165677028652d49fc4e21508a3fc7bc90cef3ab6648c207fa4a49946ce49cee143acd8e880afc5dbab993926f42038a966f7e916ef9d8cc605c97879c0ffbd3b73482688be3430e0528f5e4e2daf53f1ae41be0e325fca43609e8d2569754960cee27283b358657f63c6684a1d3f24f0c9e836819e09e70ac858e689ee36772bf650c79a9199d80c079bc1b0da1619a52937ec970a706f4d1ef713891a085dc02be7c72bc1122de7d839d398af2ab11e0db21849d8b2021002d61c380aea0b31488451c1785521c060c80e6f8f9b43c341091e6528bfb881aee4d652114070eae5af213ec5e11f2294a53f746245851f9a4fd34eb14b2e47281d945a2e21f26174618eaac44135c9b3a6d9b02799ca3bde1ab970baa77e0addc71db968904f15ed349b8382221fa639f56a1b6204802f09b30a813dd787e5387126294ef7e28c45f9fd7a128425a995f436449d6a75e040f77b4401ac57fb60f3bc4a466557c350afa673eb1c9176df5524010057c989a71e78aab88c4aad68e2733dfbbb19de5a810cea944781c657a2d29165bd100db714bf8d1e29353638a1d33691bb24078c90e0452e2bf0038eda7051b8286640c319314e7b109339507c1ae8c718fd3fb5ddeac9d733d8d661bc9f1bc65c3f7112b8e5d25bab16aae21d60032427adb4f611ac3d43083404c6e7ea6586a6af7933304396a13cec49ec941b37543706085457ad9989d1b8c6409ea2a3593c666aeb8243e2b2fd396d6009789ef1981e8d82844751446b2c0d218dab8657174cde7b60961418637853c9033d81282cf39fd8021585b83aa05b6768a46ce07cfc897bcee831bd8789d8a5ec3a7f837d6b74874787ff7a0e1c88c3ed24d53394d3a32def34f19f33afe2382be46e05a76d829f308834018d8de006a0fd85ae40b21573eac8beb40ba490c3a2a7200602461b349c3fffffe94436c351474c03fd48b45d5e59f6f7c1d98ec53aa02ccf92c0dfb728c0efcbfed5d216950e770e0e6f8030c803cd6f12dcfea0243f8665a2c63443bf818f2bba2238de1e0900fde25d05f62c97f8abbb25e7eedef3098f44ef8f7bf80dba6164de5eaf62bfdeaf4f140752f84c00f409235080eca101ae55ed03cca4a461c31428eeb98a8976e2e8a8981b02b696c609b32bc1bde26f89ff623e8fe280aa2a2f3a500006b1d552f754e1512c3b7f8742739e29bde72e9685f6b66fea5241df3c7a442f8190da4c3462aae85988681404fa96c52f9a025c9265ee7d4718425271f8844a8c921c464c95c62d0acbe94f0e342954ac42599aa0adbe9899741f8d0e9b6361a5fdf5d11a52ef550a60c5af40907a2cbaf27b249b1b9cfddf4fd7c90a41d62105496519f785c8e8170855db8fe116995ac41c3667744da5d0e9acb19552f84dbf68f2a4e280ce15c45f0da1a5338bb41a0af6ff9191c9dcec23f7fcaef89e978fd0aa43bfe03c0d8a19ffbe4c29eb5f6a90e0b63a706d55d09928b022da625ce165c24e5c5575d29b4766d25d1a2b98799c64a439c3815eeee6f5a154d0ce4acdae4fc68d500371154937c4c5b7405db1d0f25c78c6f1e2b284450f02c7ab73246d982375ebc2181851b2aa7899b87ad5cbb6b90bff4eed977252f3a887d9fb59857d022a094828d8da1757d8c9f3ea0b72437cfe6fd21be6ffcc1523287322f9952ceeb267c61c2eba2dfc12c250a68095fa1b9b27054f61e464cf075757091f02988a11b649c075fd4ccdd32972981e1f9aa199bfbfe2ad3717610a512f3d515682e4e35c9471eb7d017e1ac5a25cb8b9a063b647a97cac9536d8edc9394f8ccf88ceea90e88bfbd1ac96c8b59f14278beff8fe5e6bdf2edcc430b07a14018638a2ac10a4e596741165178b6b95780d9f7334dd6c3d367126fed143c22abe8b47677cd1b88e95e4f8296af885364d37d97049479a8240e4e75af57ec0710224186315c0613299a442eb3c1eeef879c33b713d0f28d0b7a1e664ab20a3bf239b4f99197723f16d46132269b7c4198cbc8431d23f225f7d995400d5194ea3b59bebf9228d3c9d815b2abe647aa0bbd44ad9cb907de57d47ca314074840bdfc47db79af0c6fcd242b62ae1e0644a7198284198150548734694542b2584f1a546503e928375ddc2476db95e822521eacc8847e17cb6c5c50ce1d1f5fff8ec51e6a99b9bf84aa2ec0a1fe947af4089c155da0592187881ea3ffc6b4050b2d67076ce4e97c786cc45b46d08ffbf88720f6e17bee16e341256028a43653b3f023f7637dcefdf6866bd8da6834a1e309b787db2f0d3a091d0c1bd9877f21cfe38d9c8cb6ee2b41b0a395b7f5ab354681141063c42c1d324980b29954e91e413854107ba00dd3a6615fa05d7df1843318508251419380b221854421b1fab2518e84690bd0a18eee1edcc9d7589c1e6d7b66b2640650320c22c395d0936cf6aad9286a21eb0cd6599182d09a25b42105cce5ee8af1e81709a1c3528572e5948486496ab7488832fa56f90a3b10a3a1ebffc223a4f6075684c20354e20737759a5db2dc041b6e5b526164c106245caffa9c0371f98a8dd4a2cc0aee0822f9f60db5759077e4420c165e43af5209355345d80d0aae28a26e9c37a3cbc96c52f60104990997ef08f40628f4b73746d5df38951ac59c297778958e24fc633ec91897fc986daffd7079328358038f85d63db7d819a991ea75dcf5ab0840b14b0f63fd57c12a4def1b1a8634af9caae3309146d9d21b6df3d48e026eab21c1fa8924f86c595329a970259d9b7a2158f2864a75eec82ec6f62a9125c9a2291b5ed3d65e71fa14f9ed0ce0d0f1f022974a34a7e87305ecd73a64d7c4df0f21ffbfdbddf5f1b681138259dbdf7080b22d754735408b0902648465b4cd570938fc3088505926d54b970ab40ed4c075021d97108105a160906abd806ae76949f96752e0035e674d57b4709ddd7affb3122e4867afec0ccfb7d2233ec1260514c9c45e8e1d6c39feb0035230ed69c12ac0f9317ed2e98b44696055f31deb76e36cbd0b81d2175dd94016d60b3804819f4c450d1bf1e001db062463bd6d33f5f6197c3a011d850f5dbe2ae218ef5f5fbab4454801900b54466f6bad61f504ba3cacb4485fa3e07b9fdc194e0cb37cf591bbfb2a1ee15ea4055fc54220625f686aa926e6858af33e801ecf2798cb20a258aea5156b8aee670b0e9a081e34c992b7a0ebca02071614a805d52539030e1c36aa71f4caeb54a634b21ed3d3bd58393f770defd4f6632e0878bdbef729a4e38620195b942f89391bec0120d337c7cf671a3da8122b0f517c18d1bddd6de21eaf0008a8ac90e8d39153759bcaf65240f9d8198345f55aa1fe47f6d3a820ab14c384ecff35c260c961db12032e24a77c893c08c81f721c74aa5ae12fa9b4ae1881e633c6fa77223a8ec498653a234a046b11a287ff42029a79b1919e845a98f87122ea94407c69e6f8f34f6b53fb0bfcfb1af2380e0345a4e46adfbd1394628178346dac106c12570014ff7c3cee06a5e322b11e899fc89f881d6d241117394641471fd39acd00dbc125b2d4850ef10cb815ed92abe460d160afb2323df61871c1beaf4d5a1ca78012c9eedefaa20f1e8934300f553ef973091399442f1baf5ef86f30acc3f92652a225b59875a01f7456e6dac087e367907971105faf8265bcad3d6967fc9b5f5fef41c708ebe02c990d993011550df9ac45a63ad033dd04a905317577697b081712819bd7c4e477ccf2caac7d4e95f1cbd61ab749e490139a7d7859f40d94f59ce2fe90f8284cc96aaa9d67194d56010629b87769c5be8109d826479fceed53af2c5ade27682dea0e8dad3ff1c269522ac018ab47784792321f8139b657d23de4415cad159d9f9932c717c3a76524adb24122545fb8c1a59230c798d00de195fe91508091441aeea35130785a6fba89c757894df862c730b6120f7719a4a27fdd37578fdbe7221d452b67b23fe6cc8f4c40236b0175c849f24512959e382118cbd3b66e8b1071293812cfff3b045854d76f3666c3a40cbe52f023649a6193df5f9f41cd443783d8e8e2a07912a5ea1927f0674ed41b232dd4c7e0d64fcd81361f112cb6304c187a77817c4207e0e45fb679f8bc01c115e2ea62f34ba2fa63bff3918ac158bec8cce209f278a5f02bec3062b5150116b5162a360e19b660638149708c4e8aa1eb506f4efd9baeb4e6369303a326c68861e695460c78532b8692455029c933764bb4e7a4ec6509d3448ee02d8e191564694ecf173f5b4454e1c2299689ce05113e2a1dbd6b237d49ee8cce90050435cd0b23ff667aa7d8fa6b86755a800b9c2784a7e4e321b184ed2c33adff10c8343c3aecd2d57ebef2bb19d6a40784fbb82faccb305a4cc11fcb534b8f5ed35063269612665c887aba8a4268117b1a1f088d24673939c306f5937ed6f9d80be250bb9259ac155f5df19e57bbefc47c4144fca975010c9a4963fa904a034b141492a7c9133d8b42b0261e8153a150d30cf3ee8a66cef38c074b25eaaae68361e26b15bdc1736d2d72b9ab897969adf3035715c35ee724568d60bdc4db9152835cfc4177966a194d6174c1452c0b9ad1e8bfb6898db27366b944c3d9ff702e8d9d168769e79d5058627edc0c846b3113d3f1f1701a269ff8312c60b72f9c0442b072e68301bff10ab14633e04ed3f4604ad4ef0206d8df6432d7f71d96807760ddf33a8ca24d14aa6930af1e38919c14346aa5aa9b7c15cf48056774f5b8628a95adab40be4d6d7c944ebdd9791cc0275d3fe1ac5998c7840b6d4a43f22b899163908e3969120f6c916b4fe4df80f8c158a7cc19b6f97dac5798a7300140ea7149a3abdc82addc8691e4ef72ea1270810336c4c0751430fac0c114c97e87f6e6ad6ec0e0ef924dc31219bed1764709c76d2fb8ae804739f1457b32722209177b37274ab37a5a4e36f664c81d03d89a1d4d18d0922ec7de939f58b29912a8b174fe6aed995ba52c8d97f6981951006242cfa7cc08f92aaa940b1455cf92fd05f2d49cf5c38a3aa47015506407b7bca9ff3df1a7c3b32a510463b6f3abd961c61193569ddb4887738cb4cb7ccabfa1b6e38719441f56616d89e6768112ee16bd5e8c5c52ad6cdb4c219b8f3318817b1d003c82180e9c529611830390c44353702b99aef56fb3c881cc5c798dc15d5c5ddbcb630302741a978ea58002a963e37cb2a781feb35501d83254c7eaf5244abdfc9c72f3671f71bfcc4b1e2413c8b03796e8b888f833a51ed32e67fd857c89a315b68adcd0c1d9c8beeb5784a849153741e4030cffa366bf12cef59a0d95240990b8c232d32ae1aa85ea8149507fbe57edc92b5d178e3765fa27ae7c6e8367cc297483b0d81fe52c918b7cbb493b4538ffe568e62345a3862c48ef5529a168e22c80b348b1178601fbca25b0286cbd10e828fe6593008d33b8a778116c5ffccc930e0154542c45bc0c21322eb42370f4b939ed828348ee1dae1813bd301ae251275f9085794fa53caebcb47691915afe5ff4c5af7846a8a7dfad4c5b8f5ed5e7f7a54806e0767b2eab5ab40cbe893e99fb9061fa62423e91030b79568b72fcb6b91b2707788b637a37b8fef136364c4aed364034c931e061a3c6fcb39204b7816745743329dc343e85ba92d7c305d4d0eaa276e76c5bea984e03c414f37ff378d7c7d1ad39e815a4b34fe950441486405a7b03b58e4bd90296f9a2f4d7c76e0e17b92b3cc7cc279ee85aae81206ee0a24ef49bc4e6284c2e7b1341f309305b2a0d54173febc7bc006426f80e5b7504f1f1d0c6304b9d3bb2a45b6cbb458ca4662003156b2809b78629f33cc53d8338bdfc68bd6cd907977b45834d87c7d1b316e0ecbfd6aa7dc7479fb6c37024484b8346fc12ae8890349449c042ec19da6fbd17b8fb694116beb720438f6d75ab4be0e08eb041c350f88433e04c0d74e4d41dd1ee9127a72870e6dc6541f21267f17e204fd395e7002f0b683c49597bc295b3a134944ffbba7ec9262f47422ace64de0bc645353d0748e4aa03fd904f4d13fcb81ce837bbf2dc639ef025763822bde04743915a06ce2e36410fd532d65b7a579e9b0574492dd11c65450494e2ab539e87b308700f6d0e6570391dabebff04a24867f49463cf54382b7b108478fe34745cd52e800bef9d4b2da318c698bfc1bdac1cd3b8fe626b1161027993cec0c7cb7964f2da1b49092566218f7b4496cae600605c31b90f917af59a147c65f9fa1b4bbf2980eac43bddbd28696241d32e753964378c6565f2d942e2c3a245f44c56586369f1634a47c13241b5cfaa636ac268c0a524ed6978491cc67d8f331a41369958e9697c600d279165eb0da6c78b80973cbed85e78b44402d71fa1440c02e74b892710a9fd6ce253fa2c71264fb4428c3727960f89e085ab3fe68d11e272d8e138e16d19339b9d1297d70b87eef328f1b1e552bf46817865084bb4ae6624799f7fbb84b10b13de48f48111cdadcf2b4c021f0d1b2dd060b08e70557154a334bc48fa0755885053b3fcbda403595b864e9d408d70f068ae21fb7586a2c9ecf5ebf88b2e61d033b57375ec4eea68ad065940249a0e52062d94b5f6596a5259557409fde188fc499e856d70dc0697d1cb92fa9c32814fa7aa29c9ae4c90ce47ad059d3c2425157b34912c97ec261b6b91db96e0e6ec3cd2dc5618fc25b5748f27f191a84ca10df6d54aae2ea7e3188a41a0861fede5b34aa8a8f2fc70b9fa67ea8c792030355bbde0bde954e654fea201e402e63bcfbd305ac61d41437bb9138f8e848b45246effe73b4355340e630cdd681b3d7e483c573c09038b528ade1e7eb167a2991ddcd7a01547ae39c8a6096d5053844bda91aafb5d67d676b8f0fa29376c9d674de8dde1b305acbbd7f0145140af7a8f0155c7100aca13b2435771f21325d02e8dfbbf254fbd28305a624f2124a0d4c91b7147cbf36370429ba6a67b6754198b9468da76a87a132bd8d416bec30b39db009db1c65dd4696e66494e4195b86718e9be14cfca8014703e728a55658c6a6a465b96ea9076ab3802efdbb89df713480580beabea2a8e691099adcaf570733b0d628d565352b4e3ab492915521f8edf772bcadea9f4060d1db955034f9e98e8073b1d3232281b0b4630ee99332216ca8f19c833f3c7913d43fc2905731158575b83d13e79f550db1a22f3bdb5b3af11623be39dfcae1aeaf000531ea45ffed8cf22ba2742dc3a5f63dcf3a5d892c04390088c84416b9a86ab20ec3a7497d8978e5bc6e24f9592876af3b4b2b6bdaef3a60a7d2de2936cf963964d797eda907edd1309783835c206e21e5b0470d26bf1d28a867e7861895dbf3813ae6abc1148c4c8f35e481927d5f0847c1ae7084e33f6413c470b4cf97410c2b2d50d2f7a877f7352ecef248991893a9e8b493179d403b5389d6f56315cfbfd8a704a99ca957fa1fa4f0f054da842a3a390f5ccb00190387d56e619d20755b10d2591b021daaa268e377ae3f65aaae969d0e9dc6f11ff6d79fc9ce1dee762e99c6feafc35e03fbff42aa57ecf5c7a95ab444b6f50ef374823cb1d5a9e4e382d290de1fc25c03c1bf8d6d2d93d575f901a0a554cd85ef8c9c3a8c465d8add4026e1a76190f8073b9836044ae86ec2335df5c26dcf2ab6c6c17fc07aa42600c502e3737e93ceae7f1591430ae4441a3990fbf45155848297960faa7876461b0a0c40e9c27e2a94902012a29f46125403d2f3d798660d4ab83bde2334876b5cfdbea2fb05eda09b1f3d06a2bd198fca2e2739c6bf04e7ba36564c7b98cd4120a0568c652359a20c182ced7df5b3feee17d257274f22181eab53d675257e49d2c9b2805f3befc802936473185b1383a2f5e0970e2bdfb496e7b442bbf4130294953e7da054d6eed62b0444d01df5df4c4226c49a5281a838605bf428a768f213cad7792a4122f8b3e28ba537f62c29d8085449504d6101200f77a365f3cb22c9ae0244961514a1950b0ff53444edfcb1d0024a856100dbd7e2cd0a22b6e5a7b171ea96ed6b16a993280229ab022fb49bed170a782761ac56425f30da1a1937002d1a59d1a064b9ba3a4c1fa83ee7399a8081c41fadf0d81b73270d212a3fcf584ce2f56b2031373bab9efb7308163ea199a248eca948c80f555a632837b129fee1c88cbd86d2893a12d97b2cd537378c8b1cb2f9b917c615c8d8d4722e81bc01f3ad511311c248728f18c5440b502e227aea5f354047ee1877dad8005bd045ac0dcecca21a0587fb6bb79c763c1f823d66c91faefd694d3c2408a58cc1c7da91c3acacd73d2bb01b3bc0e622e8ae21038a2a151f7a30da847c8d011b6831a0ab581bf1d683216b81fab22b9311add9d0bef94ce09175a51a5a93a80185a156a242962f17f9c2401fcb646a31138365d0c48e08f1b2ac483070a71a6ceca3b299c1cfbda4f976d6d837a5f934b1bced64709086524a1022d4cab8f5199e1eb97a1da101c31835722044419ceeda56b4d264d77c885acc8847f85289730a40f00863100248301f93857adaa1893001b9fa4735e226820a243a0ee4b165bd033de7386727cc622247da53794f659b2b74185a96cd490cd5b81727db25562adf71bbe64d2557cc7e0f0010d3281748949e7e8d1599fbdbdccc79424763df372ed845aae3ba098b81209986b057342a622f914839c9db7cbdb9c797bfd8f35834bb78fea3af97b58f3c1d0f24666eb9750f6a9ba39a24411b7404cd0fbb2d0583aff28c297dacd5868af69a1ccd39621a3511ad9a72e37b438fbe3d11eff0f5e01f30920e9742a7062346c01738009a815cabedaccd8077b27e7dab8f4d389bbfa73ec3c59bb7c28771e3db006740d55e0d1b24c826507d611405730e55eb493a5713231a013e4d91d560c5b417089f6f7f5ebe2693170411fe795e49decfa8207b51157c414b9a2b1288cccba79a9c0939e676e0dc7a84cf1ee0e60f39ba5d686111d8b92931b560dc0b5a9db3e950fa3c52627982b08a584f48d69c9e8084dc509ddf02a813bd9a1ad5c7f74c9ab009b78d0d476269af61fd8bbf91dc6c10c6b67cf87a77437f1cef33e66889a91f8b83f08d2493419589ddee42edb5bf05ee94cb964c8f89d872b25402f699a7a2363de77769b62c973ac93a2d28949fdde5e0cea45232dc71c847a86e78dafcd0a60eafa49b9d4599e65e7d88d63e2c72036ff262df4750f06687215040bfa92b5d809589bcc093d0883dea70e3d3cd81dfe0f1e7b02d6e5d8ffd03abdc2843fb9b4701f6f8e371716bee1b939795b700dbd460b2945a6fc4a2014d8f07d7caedbe0090aa32bba9268098f532db49ee4e2f9551bb035bb88d09dcb218375defaefc0fefaa5107d7206b3125fdec34b601aaede16c120f7608b19158748015400687c10c1dbf452b95257ecb3a2b3f53d041ca4139b8488298baf887d5f83a063b5148ed903794b5c0f240c19528a8a0cf411b7781a1901ea7b32585683bdd48fadb39ef2ef182367f549e29560d610e7c0497e58f40d465877576838b44d60e4501bd3e92d9ceb30518cc1046c7404003866c4ee6816e27d207174282ea64cb6aa53dfe1a9dc189e049e7fcbe07946799ddedeb964707a99cdd82664f65704cd64338db4f8110addddf7d004de2ce932632219a032740124e862e62ce33ae7c97af0dde443b450f9804d6b24a40a9aa399e0c48cc1f1dc63401620407c480b03d4bd36070949f5de8da4c7880d9b6720eb24ac58af22c6986eef8a2c48d0b8df0285cfd591132506b1cf93be7e52381c60033ff8f6c25e15da15a70151de35c630879950462669ce029e80275ea7aae037c00263624d9a0e5f15e138f504ce77840d4b3f37feb72ccbdf888518891688d8b54dd2878b404c8d99a3c5321e9e1ca15c4fd28707c258743162d7128a2b0a6d63864be1216483c096c2c164d1695b6b09149916fcd6a0eb786836b4d11519efd2470d1bc6841043984f8f36d3f5b330f0d2775e0daccf7525531b9d055f972aa738e2bd930fe0f1106d1214086360f90fb5d549b9149c2ab59ad9620b072607b7085c0a3749bb9ff98070ec27ce85cb9ad3da4a094458dc80e45464b8cda420411339049dc26684f5f0ff93c7390f3b5d18a50c1df698281d3edece7431c9ea424b32fb86e04fdfb4a9c7adecd957b6684fdf122b48472beec6a7367bb56d8af7a49bcca6cc1738e29512cb87f9e90baec085fc53c66005ca6c0494c8d82bd92fbac8c83ef25b01cb7c7c48afccfa9335c11e3bf5ccec25ee84d84f916559c336925dcc9425f64127c2dfd45d2423d242ce9288b016583c35f3835ad8bcf2edf9ec866f8b848ea379d36a9c86c50ed54bb36eda0716decd93fa6c14aef6d166e17cc0147d86e23993d3ab20eb2e2efef3cc3d91f9d99ee8c27034a6c374f613034a754da50e7cc12fcdbb849bb67ca62ce1495abd3b3ab5111a35febecf691f22d602c9633c029fb34c0e459f7c12894cb407dda1915af2f18665e4f8e61b3460a366793e19fed8a4edbdafae4b2b1868e9913addacdb1cbe78895bc15ecc30b2a72be443e481dcb2103d35d193925e48302b0a2bb5e693c814775e069d1cfade926060149d6970bfa12788fefc268255799308c27afba5a9988f2d7a58bdf2545121f97ef4ad169836e4b1d144e110a95a9dd84d296ef01cfab2724380db8cea07bdc4f66b8c63dd3cf480025bba0f0a8cc36d6fbb3635a483b8c3457ec3941af967fff6e81a67e92924fa8290a39baa4c50a712b09a2ed965ab989979c58ed58aeb4ad29bb0d9b43dac5cb6adedaef1a3999a9e1b284be70e8f28c11d4abafa615c5255d131b588fca82848c40cd29e21ee7c3445002166a95cae047631f31106c025965e14a1d24b535a5e2a116bb753d6f1d524290c4f8d6f01137eb1373c85a187d81ee2152588ba2d29945a7c4e9fba24de00832bc10ea1b65c791d608c94895f060512053a79b8a93b52df7f45a086b52d871a5b39a7e390d012ed301d3722388d5abc6a5bac031471e2ea4fcb51981d81b8d8620ae73ece7a511b41f185faa3be72002390826ac5330cdb45034889df263313307f5d4cb2195c3d73c311eccf9d424789921bfc845fa5b070950ecf32933d9a00cf8fd63e1045c0ac25d0c36d29ce3a6e4b22a7b80f475c15fbd4af0b95e82438e4964e8315c32971edb860a80f1fe2e2eda9cbba190c4b09d20bd2d47599de9c657b8ce7f37f66b7197695e8443458fc9682b1c1dd19572af4d778699c2d4224ce6ae796605cb30b69716a7dae2ddba731d98ebadb4d0197ce5528b819b459f413bd41cef22b8b2066417e3f5fdcbc200e046a121848154615e4849064f43db1c143108ea8f8fa7ecb3709ccf110b3432092e0f4065bea0edc0939b31a61f9a35448d325562d56ab4b1ab7b18cdc4b31fa799b6ef55ab53ccc81660acdc16a941c1174f161b8dececd22016364cfa1796d56cacab55f8f631758a1fc51e6035687f1b35d099c67441f014017c65f02dbe72a5192c56ce09329eda2c6b74cd6ee2d554e731da20b1c894476b9685cda25ccb012aa70de5617162a4bcf978ff3522a1fc52bffda7898c795fc41a6f3770bed91abca8d1aa93a0fa47d0a8b5866ae655729415e36065abab371cc074f652cba1ce3acb38cf1735386217caeac346361cf3514503aba73655c49cf3326cd0f28fa2308675b087fc5cc5d9867cb71ea14a56a40fc27c0a5ef188eeed6b676c0b1f4a9399d5ceb64c91dab6929f48df55dd0fe8d7ef6201158eb82903936dba362ac376dc69f51224b257a0df9249d166fc8f7e11b9ec826500853425ee9e33d38d6c022c872213dc1e03acb9082802c45a1dc7709b4fad9a94a76c58fe1fbe3dceee84771e4a6ad2281179e36f7768b7ced1d21edb938babb54310e3ce89574344d0afcae68ad4baeeb47c262d768c6c441f416dd8f9d82826fd267e06c3d564764a0d8d9141874f10363066ed33a08865d050ecf16665e65ba785db10151ab39678f2c122bf37b77d1a5fafd918db4a19851fa4b89f7584c7e9824d1b26bb2125600efe14659310e02e70696b640cdc70e5e541c985749a054c901c1736a88288ac1a2d880493a200c245db6b904be401a1854a7c79716f082a878c876818b41711ac037430797b3f2466c4f010e89b31e88df381f31dbac9e017e2c6af8e938b02b9e4cb8b37df3191dae7ace1426311b1b8d02e5218e10b19318ec3233cd605319f9983a85b7126996bc7a073bcae0db90ec0d9c8e6acf3f30918dc57a0fa9f1a7585fe31b904642b16cb6a93fe6e79925df3326d29f13dc5ef06dbb7fbcc46f6c2173066cb6f2e79182e9a51537c0e803cab4f8baf9b2f50256d82ddfa84c90f39f6f16f35c7a05957bd874494aa1c949b4dbc57edc4850f863274aeffb92c5be16a55e40ec514a33254e50b5d183ae8df95af0ba405f12096d7d8847efc5283af9a751cce700f58bb3fd0200b776e4a44802a077db630a0fb764c532cb0973c8ac983df74bc7006f89549456802ddd3717aa6c2aa8d3f990599e6f4463ecf4fc5f81bf6ce3eaa7cf43a8975cd9ade9eea1a66288c5706d99591ae8b13158d8495ef0d5a5c24c9ad5fe082ed0d9d346cfd5264145ad601e57cf2d34beda1c0ec201606f6dea114a2a34898b210876430da0f41631681294c4eff0156992a327ce57427971e8de22368076793f05b5cc2c5c6ebe560ad658f130482760ce5132da4bdfcd9fe6ca7d309c76f62757f4b11ad0d0d1eece140d964c66b2dab3b2a1f0ce4fbab90022e325b8cf3c766f1aa8eaede0159adc5b7230fc0be2361af5096daafdd5a8a30c23b5f7ee37677535d80c5834a90dc5aefb6f4f99ddd14e4dffac760cc8cf7448760a3c2240091e02b97bb2af4e5392ee183e024c1066ed25adc6e8ec70d117743f560034d13d5bfe8832b6343516d1063ac31d92fec2bfb97047221d83ce3b396e24f99049d26086a41020960518658fd92a4cc5e1156c3bf8dfb5ce2b0283ed893914be18718f72f30d601a778c0e88595a5cddc77720c5d11b4c9eeef5088fcb70dc6e2940277b1a6be2799275af23d0c27a0ccb9c686de3ec9463dc93585fcd198ba6364e0c57df24ee374eb5681eb25701257c4fe64f5341fed8ca5a651d99a260213adab9228d9a48e29901a7954125f3927b2674a62512a5595c004090e479d99c99980a88cf36b348a9f3100605a048db9d53ceafb4528d2121f4aab9a87939a04dde74781b58c1b2ee888fdbe0a00a153a9452afb23e113bdb18d6ac9840ae76b10a11b153358bb362fcddafa6bb8042c4376b6332ee4ad082066481359770eda38a458a810ab81b048dbbe132db440bbd4ad3676af3a5228e062cae9745c302ff0157e07c846674a6c71f52abd24a1650927ce29c525e77a29b4194971278a789a3f17740e04f7302e6bf0a40f706d0d62558286b06ec6cedd2b970667a7132c29c77b60f124d3d7315a5336b55a1ec643aabb50f7f1a2c1c6d58148e4cb07fa39a498d8048430c20868fb6a876429dcee09a6d9d3f2db4957487e5c52c9ec5637805e230d9816a89f679eb32143c45675fcbb6d89f5c283ee2c52d23824a25b80f2eb6851714224d75ca417889ce70d260e8c1472a879432bf60121621794aa0a7d16e9ba1db9ba52ea335ba1bed19203c114dea35f9f07f208188d82249d0315b75e840d9291b58059f0fa1f6f2b1d8aa09ff008e3fa7f1dac897d9f2810c6457d6a7df557ca4a919c8132f5260afa5a23de98e1294455ef73c07fcf23bb1889d298ef352bc4fc4b43a5bd8880b22a8fa0874eb9dcdf81b663ec132628cd7d5a672d79cc1d9f3767591217d4dffd300206b1b034e5df5f3394e268484dc955897fe12f3b64981ef8dc4df87166c8cf4113656f282eda99848d0aaaefc248789c60619d948aa544ce050114cb2dec0802828471fdd60f61a0a2565ed60ab6b142b7bec8a126d9921bb3bd3781252116b209dc15a06240bf7ae00bd164649c3dcaa7883bc881e81654e678f0ea86305de5682f107758bc4496de80a3415ab22cba57083ef1f734f31ed0e9951bf4e0e944d1e4ea4f0591290cc1b7e046d1b59aef10fd1ce23c50f2772c89bf68fa6aa0906911cec38e783091d8ee2ef4a90b4cd470a4144b43250c52d7d6fb26e8232478d4d32750eb60116b4ad019371cfdded3420ac8d8e60d75e3f9a7ff89e681a1ab52c3262131dc1b4ce7029703d0d5203a2f92e08c07b8a8a274667820c315f7b3e1ed928468c8c11ba6714906a9e6ea0da35d2ec740b9ddde416e4957cc76fc2ad6b7e7f2804f2fee96f1d9b714ecedc6639e39fbd9ac95c906d57c0b0d846a486ac19be25387d79cb23b347b6433cacdb38d44739504c500445b6e61bdc850625f0b441ae13be894e62b6f5f125b318973c20d2394ecf083b84c9c4b2b3e464a60d1bf10395047e3f1a718645309148072f19ff54b85fbdad30f65a3c8120e1ad66db8b0ab4387f44119c8e5581033a712a5027f7519be92e908dffc55d21c580ff8dbc2fabf3c044e9c0bd02c691247272f7e500ba57ab28ded25e8f02645534b8a26003ac57ee0d47c4d71d5a7c02fdca8fbd3e37c80319cf93d2983bf0cd52473ebab2f01d916e28153c8e26539b5e9dd52ba4c0fb669bdcd656ad161e78e30915743b5cf416d210170572da20fcfcce89e3bded3b4d06f7557325410087c042149a662fe2e708a8c8a3b5e81041ebb6b8b0a12bf4f8942514514b7ab06b8ddd1985e20015f3d40668373110187840dec251e2ee1ad5f7a9cdb7336ec2398a8d74536917a2e7c1a13406c81c816e5a0170d2cafc4ab1b98b576e0a37a0a8995b8f383779becf8becdeca06e35aef53ce81f0dc2b035d1e576667c407335ba6cab69627a909d5825860ce73046730c96661b47b84786ae685a40e20bb1532234c75be89995d2c32495b12558f6c5d54c0c2ae2091b6ff8e5683fa575c60133bef5daffe03c02bb408379cfb77deb6d680663b20b07e99d9922a9e4928799fe7ab14924bb88da07c63f778cc2a69c58c105a795fc11668b3232e278ed799af3be2f1c5561ec9417dc5c684d4f327fb8c82401cf30fae3b89b883351206053a032f8dca05c09fa6634646a5b2cac59307cf391da99883ce09c792251ad4dba3385e22e0849e80f125599708611f3d34cbe0c0226573563c26a648d9b31857395679423c590338bd43171865aa047d37066d3e5f79c3b68f344e2ce39343abff5d4293d2d7c2c01ee866587ad54487a2e2dcf3a4401831472ef28b00e05c8d08204dbb235463414d91cd0bb2c403e74bdb23be9d4856e03898320867aec7f191e0b4ba88ed4a57ad6c6aab499160fb953424c3c4ff819c7e681ae5bb36d4535e98283b56db7439550946a7c02b8012964565c2860efea7564d123ebb27f848080c3e28870914b62fc10f30ff60ea868e51c98ece14398b5a5aa70491189b7d31d9614ed980cdf5a20317c897ee543cef41526aea106027fa8a85e8c2a05177da5917567e078c94d4777b89c39e50b0e85b7a6fb7f7147b718a968ad40074b286864d35f47d8887684390ee3edc06ba8f79eb9a0b5008932b002ee1848d8ff98c0bc95ead79dad5c96e48d79d870c142c0d0d3042e78d1ae48d03d6f502d2e4231267e311f19f338a6e0d58f9b5c22ca4fc980bf0d202e6e20dd5f93df8f1c7dbf922a172cd1079d4b7e8172bf8592eebf1540f0df87dd5c49008cd66a6e3a10bdb2820e9155518087662b5e7f95bc5fb6f0ace44d7288a047b61f50bd062897e1e4cae19df4714975265bacd9291570231b0569422d8792f5f117155b2aaf5ba38dde22da6242988fad4b81097d81918b8e655dc3de4771380027dc2a22054d4811000a2caeb7ca352a3764f4e2a0afc90b842991cc4e5db527cae8d56064bae05bbd82e2ecfd770b88af9249bccf4bb0f7456c26b5dc39dab529d7551f9de4baf25d3787db23f9e9c65459baa19104d711584215fd744d952a411ea29b0056ec49e7ebd13eb60cb7051de03f0dca7b310d4ce0a6f353d74549c3ea31bbb979359904108c34949db713a3d6607d2440cf52c1545e12e911a08ca60e98b23d4ff19a89b9461910c000b96fb87d59b8f1d6945cdbb9dc2710433e204a0480d3e27f1874f17f14bd64fc4aef390a91c92256fd3e814112c4ba2c12fefa2b97a8cb392bb964c3589f02be4504e25474255a63324f180d98413743881da004ce826b5c335145e499fb8692e9e71827563e5ef68a1d65ab11e735b7c4a2e297b57b354ef546cfb4f506a8d95911026f2a4d6d8313db5c5fa9a71415f5cb6ffa7ddae4e9f92f7258ca0d257849b8123ed883f6f000933a97c48057c3e33618ccdc800e152ef3addf7364bce7ca8bc3d12c1f985bdf2dce03d72234bb5cd8e3215fca9b0e79c09499e2abe212c6f55e9eb6f12f64ceee6a86072f38894519ea574ee270c9685c9323b26f58145f15c9bfa30a00d645cf1dd4fa0a8e4408e0d34d84e80d40d45e907ddc70f5f375fe63b522131cd7d2c2449eb200c54c07a4336b5b0132a50ee39b19b85c767c3db5f2cfd29accb6c30ecd36afd4ab4f285680008913093341d49c6699dc838f7c1e39c064a671a6d261d48ab343b78a7a39097f4f7bdf866f93f0bee5bf00cbe81354643f87e5a246b333505d6ced456bf79e172f76013ecef0f8edf45024e006fdde23641870f6559803fe1d63eb3c92f824c07711e6d86355e349a50a9b24b726ffe9167c16732326ba6cd491b8788c79bb3b29c231964b86f9b08c93542b152a6f50896d24bebf62bc63faf80f60ff91503238e8093eae6e1bfc7671fc8eac9025c2706a075498493bade5e17dd206c7a2aab6545861de7359524b0647431b73ea1a4eefb3b659bfe3ba2064c2903fca8de5142dbec0e3ed204e70409f707847b969268c7d4cd3df19c7bb4d9a969e186cd656a8bc74f4a557a4cac9b6610901b210a5eab665bb13805f5924f8cfffeb99541e1697e0db1811221559d18f5d592ebddefdac927ac7ce47282f2ed7784f148a2ec8dce5a429a7259e2a9afa904c455010e2ffa80c130c1155421f561a08832203e05584a9ca046254c00f1e7d65a06b0c1018cf72b895d390d987254b5825cab127f0fb7c753657dbd2c00600d5b63da65c9936fc6bbb2492da5e37d1f885925b30841960020412d171d8c95120cb6fb7efe67463bb84cc4d7e5bbd86314fb5004941444cfa745409dd8cb4d8900f14c21fa784d4eb8b6b1b47fc1b38eb74106f8be656330426e84201b02569ae73c7fd2ad9881adc020845a712a7e0a45949fd3482757c38981abc91d0caaa4b38409152b75f4c0641dbd6308bdce5ec4ae63bc0e20df6264ed8698d88a6f5b658ac15db406e5dd903d2c30626a83d58486929d3a85500984088bb857abeab3648035c2129af63005a8d8c5aa4da8d7dc172aee47bdd9b4e399e1d5a243e23c63991d7f46e25b3602e734d02501f52b2c77578243965f8b3fad362194575d7712104affef41e017291f029a792d6b5ab9e7daf0181da896633c04e1f3565118c2ee87772c95de9851ad54ac16930218d376aed9be0d75f319e442a2ba6aee4d9ebe70b06e9c2147e6e5bf93fec30f4731c5d6167337cb46ae20638469bed782bec654667ea54df058d0288656006780f7e5ee431e4f450e37bca95a0ccfec3d7224f02dba2345663fe1fe12af82d51f1b9181948bc9968244de0c8466d7125f107e95774c4406ec98f230fd6a1ac234d88d5e0e48903875e442c20aef8782821c521d2217c4992f857f6701d0c8258760b38d9847242b872c447db4efae053ad1bb8f57724c05fbb69f029276846a02a68fe15477aba565902b051192df60abbeaf7a9d79fc2811f87ada80f01a646c2074ff596f695690a32c8089ecb8ec1b7718bf62c54790dcc39bcf19c6a00f5ca9480499d67ab5c926fd4187b4281f124c3a3eb2a16bcb6eb98e15480656b60c88816df37c1f79581c0eac04588ab196aedf22675a099f144740c9b5151f0e9c868285c2f028a1055b5b871c91f6a12c85d434788c0f7e54fe991647a4532e6cee7aaf608ee469a33a9636eb52f8b77a1d83fd1189b72978fb781b6dbdec80a29c2391a355743940f7474eabfde282937a194ecee8a66f616d62dde563f4bef596801a76db5ef75ef3939101fde143397bc2c4cea2b89787134d33678efda056527b3deb694d194986c2dcbaf692d2889306d1c3700c1840cd005157e95dea199e145b2265a2312dc3dc349e93640eacf6a2946fbd7551f93d76fec9a2a8256f45587eb830c6c522e2b8572826c763271b64113629db6fd809008483c54e0ad89912c4c64fef0c3b4d9fdccde9f0d6961881a060b45b20809d3544051ba230dfd9924e9d3752678c885f3c50d7ceef048176b1a59a204005856abc52f946833af71e669ef1a65d97824360ac896146d05bdb7082b620cb338c64b4d76257d87ef93e89d8e55a0184f4399bc6b9a322a5af63dbaed2f28a404ac299571c31edb99a6da14405a13d1591e11702de0ebe9250991c476e7d59671ed76217d4440994efa20455589a19358b1f186b49cdfc365b8a6ea21d0e8307a0a51a70df4a8650ed776eed2c99f8097f27f0c2ab4bf090c0e662c3c1f7a759a050fc3db5b05c8a343f4c4cecdae7e7a3c4cd3c76843c52ac6279c0c533cb1de0ebcf157c4d360ad2502ab74c5a5224e1753143cd912978eb8e9f4259fad43ca9aeaf5fe5b4a282a129aa8844039aa5c3f8b429fac302588058efeb2a67630e558490b35e3552ecd848d76a6ec7b423bf00e4faef70f49ec20c42a09db00cf388821c26a654311efef0700c106c1419f27ea0034ef5ff023cfa052b59c454cd970a92fa47db890abbfb161ba6aa305db4fa555847617bfd4469e756bc20fd01fbefb8120fc3735cfc331e93722c76f52937d6588445d62e7558e13bf0afb5946fda93e9e7357a287e98806f72b960884a331d17767a51c2b514e59a2d9d95d04b04bb0c49622744027abb9282e405bbd8fedc0cdba9ef8ecb98ce1ed48a5ecc3924381c80a8e6ff0cb5a9163c5db7e19b1be1c29361738f3cbc102c34830485b28cd55fa768d9f63df0754a588effb3ca8a4b2e5a7e76d613a2bd5eaf69cdcc4398945379cb65f6b7b62882b4828581688aade3ac6b3c361bd5f3b2bcd3c146b1719aa7c280c553bf378d52a8b101030cfc8b13cb22b1d20632de130ce73aa712ca201e480a2cef91e6373090d8cca74f8b2c7e843a529e6203ab61efba92fb59f549b138037a6bd6aeb1fd2a9d2731cd4b42cb8aaf7c8d1738ac52a0dbea14c18f5885ceacc949cc27e85315f7133f84f05cda6f4f67d45d50f4658e69f1b4c7f581a93700b1a940833e1c0666e31c28571fd8d7fca037508804c63ff496d8df22b282474ee9531a0d46a2838353239aa83fbc5a0bb89031a63824ba5403c0b5c8332ff43f46fdac8476f8f58c905cd2d7045cc7aa0caad9b2f86ef0124e58aeba34d441d8e5b9322be5147bd4371626bf5512aff3bf545240e6d0cdb46aec54e70f962571ad5713e84c2c088c7942aaf6ba5517757b0b6efed53f37f997bb8df780ce99a13f50abefa8691dda2604d5e7704b8834276d4cdc5ee2b8bfbe843457056015655df6d4b582170e896ff15b228351f747a8bc612759c1ea57223ff2bc1361eb1c3b960d99d0cd764b75a7d1bc6bc81fa0d2001b00b1c57d568f6dba5aac4ab7f57675c08c13f7dc2ec51b09acf7ab278d50270d2b2e073b1c05f53b2e87a41489995e26a9c66236b8badd21a365933682a7ea2c44bba34ea1759b04e05e7baf59928e1dfa4b022dd2034d7b852f1cb6387fd9a6500c8e87e0211303676b5f96e7165f0292f4d3f32477ee37336860b50e8a8a312acb1b8d435b827a9776282b8a1eb096ea35e1f6ad95adfb7dfbdf39077dd68644ed92f04ea3de4fe0b25656b92c6fb1ad2082b8a30418f8365fb420669928d833866ba3734ed4570295529ac07f44007374c4fdb7f71002f4f8b4f520d6b4477565310ebdce373298afb1b06c89ec2e5b34f72f1f472754788ae4633a473eba2043b1243ef958b7dbee9180f0d018b0617093f3a247d22ef8bfd7d28bd07076378d8978ab613627950b6ea24a5424e94af135953bf3f89274ca9e0cb8dc9d0268a6d920ddcf62b75a1d8c57b8b5a3780a9e3c35e47852eacc095dfc36e5ce3145fec2c5f545a0c8ad0dfc7336a9478533389d86fa3ac3b835043378c41a20055d0186723aecb3879dd4ef58fd3be35228cd773080e4ba126230d586a6fdd6a06fe6f26643f576cd8ff856b78359a0beef312425d85fd5927ad6c53785531e32a9fe009addc70da732314bb1c9e8d180290f5a3229d2c8045609b6e73fabf855e0fc36afe69a439752c54a79c7cef6b97a730d2148e6ba6b97891d5737c4d8bfaa3c4f12e23a09a87c26ac78c5d57339bd2b7f55eb0fb442f86074982493aa88bf99d98ee02c6f522540f0d078005e8ca9faf379fb5eadbbbf721fd22efcc24f251c96c17055d3e69b95e87d8379ef0a5e04dd72c3f218654b7f46f0accf217e9a67683a1adccf1ea973df6205eed84d564a8d411fa55dd39a65ed9640afa8baec3d61c71e5831414cd5e2e1fb1f462f702be65685c315165ababecb68d01d17ce4ae569c109a2b8b8c92fd42cd9581a1f362f3127c3f2562a8ddb76a528415883345773d6ec33ee375f1953e76f31036cd1834a8df02295b74927291bb0797083fb0baba43b5b73d5d31d40cb756a3735fb0d1f612a57f182eaa84aaae0b0a2221af3e503b2138048f562c1b11fbe176ef6138b4452ecc0160ddd42f3c11e9b60f99ad57d0bd495b1742533596b686ac65248fb6992d7199cdd7bc140841d69ad9eb63bf44f9099f178a289fdd7928a55aacbf754276802254640a33fa32a64e35f856d85c1ed4a94ff6a789715ab62f610c4877ec013560b5fa3361e4d7e225fdebeb575a8520323b1d5201631efe359cd82fce62abd00e646ffe6d09362de6877d42b1554f6330ee90cab6967b4b6319d087dd9cfa0e0f6bb1b8ad2c4f01445d51359cfd9756a5a5e24d059b05d68f5d79d49f803dfb40a6c7d8ddd3ed14af159bb34c69dfd524392e75988c8c768f2275df53a32d6d58e91e07fcde842f5c842173a96805bac9dd0215a02e27a9d3c98be80dcb0277b02bf6802bb533ee6c126d011bb084ca635fd5668deab8da31a758484a7a7e943760d135192c8bb99e99f80419f8d203f4467bb13b47462f26459b28cac4fe1c5e5c2f08aece1bda784ba4c4381b8d594bfb6d112214fe1a8185e8bbe54830b8b6300f718a714823878e5493c2eadfb5bfd56c03850f5c106cf5fb570370056341d5b38af4098aa9feba6250a6d7539a55b3c3720a31624c02dcd8ab3248b433149fd2f6876be3fa35c8d7d5ce3ffff06435b8b63c5220f3f4cb3d5b0cf9bf5a8e4a0517630b1b564d44db21b0221a4fa80a38eeea3981c0b2e3e0e22db9576ee4d840e3d9772024a5710a8c9eb8cc1793b71019da5d5b4f0ee25867b7ec8655ccde0560a513f82da29953192244c41d0d7c0c40cc4b959f9717369416fee2822c79cbdec4206d29140423d39cd4f929a9bbe99780d2377f2c3242921271e78deff43b9ad4fcf0fb9b75dab06dfa33abecb2ce54174d83838f335e7aa78338855778273baf05c728447abad1396b9c7d2c24046a86f272ef6d3c7c3c9bef8c3e956ddd67c0fd2774e10e424d1b259a782ea428ad218abb8d1f813f589cabc27fa268a579f99ddd05f30bc382f3531644e7aa0874d6c4662f59a03ffa95e132d0332fe99648c0a8761174ff1dd29284d30759049bdff9536a85d7e0c6e985622a21f6d2131ffa84b11becb35734544627d4c92ab1cca8c60e831111eef39042677e417915ced778c0eca5b621bf5a16bb2389af77a6c1056b33179e0903dd4c78df1167f396562958820800ee40d2270f60a748b805531a9225e2cedfe7bfd4d68b8fa523270f8bd137609bf0945113782238b18f07642a9e235cb8d10131fb36542bed5b2bb746afba892ef83238e1cd031097cce00af1aadf05b7677e4d19f797d9678648f8c38a41787a5cc2a6aeeb1cd221dfcd8d585616a847e627a5c9d182dee7065f326f9ad9ee085b60873ed8674c8d4c01eb7fab725a0c40272323143615e5bac3c78fe2089b62a0305e97c2a5008608822150761bd934ff8ff72cc0f90a1bf37d8795028daddf84ed67fd05d156364ef79f0c2c6f13cbf6b8ec2f287937643e1fcc0ae6f3465dd4b5f6e5ec8e330704fc64ba85c1a998cb00134add5077000bef4a6eb98799918c48d2251d082563b26a686c928a3d3ec175c4f1804141428ed0ae9ad2d878886753d20991a706f373766bc10a66ead626be677370ed84340fc1edec2f6236394f2190fb88545037fd779b3a67b482b8b4cea774ff0e1ee9134f98c2c0c3a24e0b2681050c6e83b354694a5d03e8bc579e8df10d9c1f1ad746e4d5193e0d01f41a34015a3ee58ccf43171e136d4cc313600dd2c204d1f658708ac9d74ace4a4a39834d76ee70e4737a7206bf54a1e781fb8913d8da68ef81274e9fc8b7325d23cc377e919cd0171259c6a48ddf45b1b710336a676242788239467250fd48ce35662dffec9729b2b65e5e80f4227282b0f63e028adb4d88e33bd6154f391d781d703c7ebb3ee4e50dfd49f8010840759518b7122d5ad35a4dc77bd94e22614f1fd6a964d66e75597ef5755c47de567ff0c21c94a2aaa9f7c8deb536c127b47e22be111a899f44eefa369cf73c234115ad1465f8c636748579129862eb478755d032974ac4eeaa9d815680485cc71a32bac37702f3085782a7bdfd9a935b6cd118d75cc1fbab0bad2233e0985739c6c210c9e751aa903b4980da24db02912053df036292ba079b4c514d64c5201e6a14d52a2c1bba62de54ee69775b118d59bcd108d85b4c0b758149230e3dcbeb8ea61498f62db7bb869479701e0c0e4b2c7a8e628bb02922028da0d5bb332ce385a4350527c828c016017e5be011408851c3af509b09e125a2b2aa485c0c8e4d5542456090ac8a24d08c2010f59fb40c1414654b7eeb01843c39c1828f8d245e55b7074a4562c76dd44ae658d47f0b0e91e50893b1316e099218c1263a19e4d71b010dccdf0a958f49d7662f52d49045268f995ba3cfc047f3d664fc47db610e3cfa97d76102af4e9a5d40ef76372aa0cff44394a56d578d8aee357ec3cbb51d4a32925fbbd44670df0e9b556c0405e0f2852a1ef6810ffdc7074c2769b9b4c09f340a2e23084c3efd133db13809383c5201bf212070608d70a52b28b3e5e0f9c224ac5a738edbd9a1520a168d89150e8c400dbd1f8a065770d43d9350aa4a266b66a856b5f6d3464383bffe6b5296dfa95548d9565068ac6e5c537f2cb266a7d9de57f73df70107bd6e846cf6bd1109454dbb305d616accb77651a7429c4dceec1f79f143aa47865d752143510916c9983daffd1fc66ac9119d5bcf0d931f5b47a41fcbda3c50943c201bb25d12df973d23fba42349599c31cbaf8cff890d20c8e997ad697b4341c0e80e532ddd28adf77d194ac681c0dd92d06ae9aceebd416761e07917fe10429668cc8724c0bf5604b33b0cfb919ac977dbff118d79e5044b8f3f0cf1b31b9d0ae49134b5945078e0d439661016144b0a8ce060d71bc3032bc07e7038debbc6bb7371cf9c7e9a3600a31ec0576d50fedc621ad2b8c0340baf8acad8157dfaa5b0366ad0cb14af92039f256d78ed409d102b716908f8fb3fe85a8afe4a0dd2c4fd48e460e70f2958f55bd2294b132a2e510d71fb8edc87d146b80a37c42f03184b4b86f6b9d56361f708c55c90dee39895951db182ab315ccda13373076b7773fa2e03ed321756d897d3cab4853064391e13dbf2b0bdeaf4dcad46da4240a5f2c36792135b7aac185551ce165f7a03f7175685ff478c8b15c3e30976087b2c2e1175bb7aa0a9ec10786038c19d314e7b56d5139298662d87455a17a6908adea72e19f64ecf685fb5717999f766a2139aa551cac896bd2bb98485c4f2c80b289244b870c170a40c0d36f99b80e9d034668fc106f1788b925e15edf506c247ed270648b2d9b789b169d8316bb100b79b7a5941040af5b2e602684e28e7a350b3c92245b29f93a22eef1cc697e304c3efe108960edacb4c15f57ef54d1b38172887bacdb5120618a3c991823548813b7894c3bbf988c8c502146f5845b90b90b47fe2cf6da63a2d5b5a2ac77996170d5445c24e02e994572be4f3751d86d6c43baf057751c7a36ef9156a73a015f15afe09ad7e6a186809e9fac5f15f240fab1cbbd61a179bbdb839a01ef5c7abe48635ad1ec3cc0c57adb7c7e39ead090e0413af38af6c5107b940b27f19f50ca694faa8b4437a4a2d1b2b1a48ff3114cab0be91130cd972f1ba3aef87b43197717230e6e49390bbb40f633c5da6504f04843d9d76114f89559da1c052bf23ad37291cebbbab07ce69943d554856e533bb99fe48ec197adb1052cdc6dc9df6c38991fa1f76b61c30531cf356b549403121d9269d345e2484d3493b26d26196ebf2b993659864e12ad90563caa1d670416927e1ffa89e94ab4856d80aa4a826c9aaeb1d8610501f8bb493bf707945223b32d048063d175f52479e049f667b73355d08240efdd6182fc0d3d9df34f828d3e8be00d86c7181f9a616acdb0b56db69d4fa3ef00f2763482e4cb053f0fe7cd8f6a7de53eeb15a68dd4e87e96e6a2bd436e9068c2d909e2249861cd4e2b47cab82e4d31efcf136f78383e48b3f5efeb2f5f41ffa101e402917e9905720f6b4ad04a954ae3d800a0afa9b6ccd6c5f499d8d6b6424324d6806ff7c323df056129626ec78ece007f080be28daad76e8b576fe71613be7a902cc96219493b7e80be5b509da8652a32e408a0dff9f3d8e1253aa245bb5613fe45e721d73f1294429424f61750b6c585a0af163085662a04f0882d6d7c6040e27a4f6da83e956f7c8475252083180a6cc207425eecd357e66bb1ace84fc970a9671972ec90b8ebe05f0b4238254d17777ac272358d73ea3c6a0bd208fee7825bd0f5cad17038e5703c8752a4842afb0524ecbf369ac7113c2021850e87ab39c870a16d61b852bfa9d6f85dd12f204d6973488b9f30b28106ae570e556051e13f43c231a934f216f54f043b7933ce588fb0dd865909c9f94be020a3834fec608e54e34f53c8709858f408599451a515da9064c9f8ee0086591b5ee6a0feda0b9abc09c9dc219d5ae89ace73e261850cf88fb4925fc123faec9252aee24e48d01854e0761047c25f0d7da6e6646b0d0e0e45538695bbcead115457d754e59b7905f84a134844ea9bec700f402098d7cb8507f76671ea2d1205e81b163a510c150def5d491417fc12547763755e546a8ce6e4a42846458a2bb0a9ca80d02e5d514d668eb6a8d4d424fca101ef6476e2b0caa8c74ea5e0f8a5231a5c424b7f5662ccc1ff1f53a9e39881e5b449b5ebdcdd01bc5f6785145a38752d0d61026a1b10b70a48048d3707c8f537da8ac5ded2983ceb38967111d2fa793f8b7b8bb1f13257c84300e2f581eba590f8811b988ed569eee4f0308a9c91da81322ced028c22950f35cdc8c855f999a95336072ea3609ca65f690d1580af48baed64536c273f5ee8233ce8b5addaee34ca78c48f6c53fab5e1a8dfd2f4ec95c5b2e34992bd11c60d15d645b8c9cb2f4b5300340417dc60568432c81bb6adf25aaca128875832c1d0d7c48c19bf5aa58bfe0c27ba38b8e6502ee9e64ea620d40890502b5ceb1a6c4327fef08f82d53dc8255c6cfa95aa27b0424658be611ea93a15cb38800fa3eefbf6be26d4cb56b22a29ebbf358b516c6eac30842ce0bc55cc1e267de25b94e89291f54576c6d2a9824b6e63c7949e5fe953051896c4a8e7e372dd8025a24971e44bcf925119c310965633734de623520352ad960c1bac012d109ed071038cec2cc65c3f764e1eb11ac39cbaf8869a1a636108f090fef19613d52d19e634fe88ce343c1202a5294d7effe9f2eded08b5f6d0885f602e344d2e069b85d846d6a48f89304475ab4391cbd3d63456bde706ba9f4caa2b4687959284f0ac42b47452eaabdaf494d5f9a467c674a02f211e222d24364439b9f2239bb069a174b04cd54eef0ae6d422c051f5fb8c220791bdd222f5b0d874d254428712b38fd577c0a1c9221c8966a31266297e188f9189a21bbbd0178d78a5cd2c21e3d11918e55e8eeb22b3cb9d2d9b5bdfccbe18315372b6e6ee8b96ec6abb5fb5f76a10db8f7b9b0c8bb7393e732da287d00054fcb1196050281aadd73ebc513814fdcea66cef7baf178acf93e98cb1be956e5facf2240047546c4220f657c4510b0e722dfbcb95adabcee6a0890b2aa5e315a5e0a4efb2f455af596b5a7daf746bc3d551ae95903c5b53aedd090a7a5479775181ce232a46af8b0c5e4700e651d1e84e68e1a4662b455dcf45f0a586b1ab770d434029d12b80a530c1ce2151a63c51a2e2b220faf3cadd94c97e81db2619a227eebe2107f5ccd85a0f6e9cc6fb05de43db8480c10e9659700bc9d245898dcc348d86aa46abffb1e0bf6cd0037fe962428671f255e35e41036459cd01fce770b9f34b166be342de00af84484483e06fd6a02be84fc793c7bba1b1672a205e9683ccb01060238902bc73824e6ab6d26cb694a668098ceac1b3d613e676aba158fcb18ff4ea6f8a379731f2608bc846eccbe62914f5f0c0b24521c13e28c87029199b62d0c8b0d1c128d38a8271e572a7897d88ba6df8dd1b8bea40640e87ba7341c8ab7c3f8bb3159569ed4729f29368c74e0b942ffbdbdfe8f59b886080c4942aae81d56fa72a04e51af6ffa7a72b83aea94f32df5dd288d0c217d0c38c8ad9b326e4879fc2ea777f9d64972f08cfb849e4dfd77056de7909eee049bba01c9cfdfa3f21176ce24ef761fe238f30c1b2a6ce88c9d26e23a023998bf628736bb3f3caa227978125bf83c7cd00a3e5913dca68fe62af41848857c0485c2419a31d6818cf1f4a8e8a201949b8a61a84127903a3d9d7c879910f41194e4a905e658bf21b49009483981bcfceffd9d9576a6c6bc9375293e36fda938313c9190a267bc6bbaea50611ff6c1d8e8cf8b2b4c8aefd926ee2e83fe78dba6cb8194bfb2c2bcf45be6436606b590e1f94d121215d11e1e97d6d13117bafbdfba21635f4bc80519f564361fae4b4876103a84ab42fe9b04ae32b3c3cdc248d28c48bdafa15f96705c80d278c7052e7b2729cf89b1ae6b4bddee5e86cc86a6c8ebce25d11ab4891adefb17f8fa66176bf983a0179385eb25474f7f17f89ec0c0945a3fba0e65338ec5c15b0f0d7e76fdd45827ef0e4cb13ec02eb7fd89143b16e08f3523d43a9dbc067c9ca2d80cbdd623813250f2844151854b2bf0df19c8357341d8162eb64df8590a52599a7d521e560d6a4d3c83d00bf99df4c948b4f8f118731b72df75cf904cff359277df6a9cb7a21a81eddf454885297485a0c5eba62055cfe6590ca93845f61b75ccea093c48ecaae1c8f320b975200c892e2e5db7eec150ce8228c55ef8811756b90b4d3f1e781a20dd33f006ecf5244c535a536db4b355b5c70c1cec1e058065e17d7c2fd1b71e647139675b61277cdcd0cfb5438e668b797de15178a11b8aa6299c298e3d7dde7f6f507892834cb4d35b4db949342ba56eab0e95005e50ac25ac0cf730212386c431382f97dc7c8ce7ee4472e279e7c85d150700eb3e6da461e6db165f279e92a5e9ca29381d79eac40022774b52189f6ae9a802cac871184bef7427b909a5cb95f678ea3af02b9826fc97cb581fa70286f10d4e5e63104c8248c25f0056373fdc1ea684b249b5c6e6d852b741f461004007a724823769a3102737d442a47da4839ff186bf79256fa13143d9f180f76a93433bea0284485a59d0374edce3624558ebb19e448011b4d71728520faa257d36e9d2237e5ea40e028ccd909059b35cc691a1a730bb83c56193cc268dc541dc94912bb90ce4146180ad4985adebfc88bf064895fc515fe74e121727b8df07ce49873bc7b1c4c938a29373bf9035628eb2f91f718317ff0380f1da8e588fc2c9573eb8f9fbb25525e3df7032349dc2fb9a0002f4984a00ae179750fbdccf259e3957685a8397b99acc90c82adc63662c6192708e266358a35fd1229370b02bb44345e6dece1762423e04ac33351708381815e9cf9e92ee5b35a7548a0a7ba8a5ee154c3d3e2659b2f7d6386718d6e515716ad9efb6b49ef1f52066ff6773fc71dd4e67e9dbe280a988df104f1fb4edb9ccd5a1b50bbaa180f2e35863d4560c5441e9aae2c9501719ae99238f7e75d2a24e7722b99655a68cdfbb00227cb79569e81e455d453d3654574e3c2bc0e7d4d6981dda89730514489cbaa4c73ba93e4f3d06c280f202711eecc825536af51a6ed834c933440c51e4d0ad9f99532f605b30cbc87a1ece3fddc6300c373fb68835334793fc06867f025ff8639c54a8a9f1af44b2953829d893209c7041e2101f12bbc1c981864080d1f8c4951f546dcaa0179f7d8a78d57617905d3cc2c14a0484a6e9220ebb8341ed0bbdcbd9a424aed2916c74712fb9c63bce34404b641c92c1968450201419a1bfefd3948b2a55daa0cfed58d103802e54860b857010185d9f1dd31733ef53e0329a414410abbcbf1c18c2c7d4eaa253001424870bb2d66dccd283fa02edca667a3fa501da6a654e1e8c3a9ec552820e71029801136a4e0509adfb1a9670ab9b60791a2f3d69916322f92b6825686f0363b06f51960084f5375434b6b20433a09017de9b7fb22e9ca45bad5a635e015b6a71aa60998258f729d93dd8cb38467dd2bf5cf6305f789f128bd6933d6611a32a800cac39d9628c3247349738f65d606e579d6e77dc459dd2b10afb22d29e708b968f6c243f67ba4baa3df875f31dda68698f0f4365d7347ee2876cf18be992d5b1e7d538e0d63b2b4f1f548c2a86c182d2b8d908c708872b478d3dda082d20d5ed056462b587693a267101da4aad014dc1d6d45b079cd89de2b48afed5fa33949614a3f9f49aad68443db5d674a628257145f9f6ef51a3bdba2ee9f92fa043fb7b230466b4d61fbdddd12a134723d9f31c7d4f7e924d2d3320603b0e1a23f718adbf5bef7af6eb3f774a833e0c7c2ad082d5bb1df9f4ffae992ef46414dbdc3014b55918e1168a6065a1bdcde0ab3ce95cfd96e2bb084b44229ebacc287f8cddcd3071f08bba379d9a2ef4358a1b1a3f95db28f8cfe7819a5941ca2c4ca991908ed59a5172cfbf3a62ed15a46b9ba9cce4f390b1b9fe3dd27445103ea05d7872c26c6a83ca6a35161777b4d9f6ef79dd221816ba27d13cf2a053887acd341edd985b4d15759a44f9a0160ada04828c28008f204f1a350f13a350f1ea692976b2e7205dd629b73185632d69823ccd63c0dca4a56a1c4df32fdadf96d8ca330d5dc1bc05d7c321662df56ca0914e9524cbad4f72e055472fe6d81e17a5524bab9027dc444362cbc299759df830035c1fcbbf77e52024c8e27ef4f705bc00034aeb91655a300cd29a0ed5d2c447776bb1daa7428b20c22b366134ffcf53b5a833e25e5a554433aea4f95abab545153f763cf4ce8fa6534d0de44b470b284c50f5164a8c6c914c35a12f0f62cfada9e4898a6964d28decbdb7dc5bca24530abb0524065a063dbf0bccc8f5477baab2da0b562c61c549abb120e933c7f68b3da17453d551cd69a307b72bb3dd041eb5d09537d6728695d8aef4c1eb30573e6e8c1b23aefcda64654125d8da65293731b8f171c75a07048ff5f1f9d8f7bcfdca493feff3cc4928dec787c7797c7e642d2721c8a4caa3a9a989868ef62d51553cb7bf97503d0e3e3e3e8f815f9f18959528663fb3eff1f9fe0f84c0937ebe7b3eecf9d9f355f6336b271f72617d3e5c01c5e682ef0b3b97067f470e6eecc3767d2e17d1153a4e5e3c7cae68f17081dff77d5fecf3f9f1bf8f4826d998572d9c925438d538c9066c89acdb8f2bc06da92c21b73fc6069f8f8f8f4f569c1bfbbfedd2e06fcc87d6427ab031da138ecffd7c0fede987262487dac7e7c5aff93c8fcfecaf9dfd65ae97874776791e039f59ec79663d6f671d8c36d62b8a62083ed42f8a21f8d7b29edd6c36f2d4f8513109dbc1361bb390ccdcb1909d7b0846fc4b964cfb172263335840778f23804da90e8a139bc26783bbe46ed9ddb2b55cc99e4518a962a123dbedc866abdde46439a594dc2dbb5b76953be185f16cc8d92dbb5b360eededeeeeb28db41f757347f1e3d8b265cb96670ba6e94c2da56c2965cb25b73096c5f025f8c9a0b703f05f1f86ef3319f4a2789e7d0081adadadeb02bf6706821ff828661d88fffa30ecf9f0351bffaaf814a3bda3ecbe7e98468029cfe3fc7dc677feede9643d3dff438bd17ade8736cac4ef9989dfcd785e1626ba68b7255c8b183c702c475def3def3dcf93799eec76136560fa551d079ec4dd54db69090f0c7846c52dcbd7af74732508fe943a2db98d43bead324b3f2963d479b4410c0e36e0aa18370e5cb233c7e08097aa2495aa19a3dbf4375d7091779c9f0fd23081fc5d4e039a40c8011f920fd22c1610fd66e27f6f81ff3e0c5d3f232786bf81f8e18b2086e0862f81fc3300e218b23a2b2bab5d70d1c85aa24c6ab974140217c9f99d254208b2e64d226885206b92d2194237696135d968ac10b46ad5aa95092d49677832cc0adb29ce93aa57f9a1d78483c1c11a2ab7b9cc6de6ea753cc5fe6fd604f6cdbbc1dadd37cef9926c21b8e6665cdf9670386fef6eaf321c525de2bc8e8e8c45bb398c56ebcba38dd6cac00f67e0df7c76f324ce454d39b13333333333333333337303fac1ef53c3c3c345cee33cdd279d935d9ec0cc3c2b11508ec684ccc21eddbed2bde636467aeb7ed4556f7a473b4a7d5277da513ad966a341343737bba43d5c5df18f1e83996b9f84f32b29e5d1d1d1511412548aabcccb8cab08666666666666666666f66e66ee6e32df987cfab4cdb39bbb3f1b7648ea4bf4e7ecd64b3d69a5e1859d323333b34b777797d2a5942eb77813b7849bf399cbe52d979999999971d3fda90b53666666f684386b597f7ea6cccccc77aedceb6e6f4a39e5cd8693534e29e5120e67b564856b71bbdd6e3727ee41a199999999999999999959889bb1f27dd602e72f7fc56f49e9d3e79c724a3b27ae05936c29714c3eedf4e94fa6eb8cd355737333f5e6119d74ceba743b3aba2d1d2dd9bcb04b8de56fe6666666e66eee66679621f0404a29a5ece6289a657add7bccf23d6666664e43eb4f4692bfc46c63663e22fa39e74fb9c5e9eeb1e13310806eb2d673d680fbe43dcf1a70a70564cea3715414e99a0212ab1223fa9f32b12a5672d4f5e6c9201ccbcc4c97b80b8d1c1ba699999999993907a7bedd18371fa2ba2ddd704bb71b0eb774bb2de16eb8b7112dd95a1011dd6ed34d5513111111113191ffdb889c8868baf3918de888e8c8886d22222222d7b19c977869899d8be4d2ade1965ae09696885ad45aeb52d39ebdd4a26d4b472d988e96969696963a242c7359eb6e29712d98704cb7f108863cbad56b1497969363c0f866b263479ea29e07b24b9728a594564aa71c9a3d7b4ee639bf9bbbbbbbbba5c88386dd7b1fb85c70fdb87a9ec71dd38ebafc8996984e9e3ce7a4934eda75734ecfe5c23b1c9db7db7c5c0b3a29a5744e3ae99c219199fb13990f84e8ece3a27e9e2dd65f76bbbb777b77106ebc2c378800aa429709469d20a1ec6b75685cefb2149d3a49c22fb65e7e179fcfe6808bd2d07fa2b42abd6561c8ace0321b39ed8bfd2e37db50f1c5ceba0166e1a27e8c56027a41133fd086b5402b4d1a10ecf9bedefb1812a97bef376825fadebf7b5f3d49bee7bdf7b0d74cb691e779d5ab9eeca379523784dceacdd032eb8e1e93d92ab362cfd9637777d3a41a1528d87e1e24567ecdba574d5f1ff6a4def79a1d5459abaf190c0c45577d3d590b738921f879b49a405fe6a47b6e4494f549d8329cb12ab6ad984599faae6f1a3bdfd200e931acd43e1e2803facc2c3c10fa824bd85afd47eba39564111f2f27e9b2aa95a4f7a394f2f50483d1442021f7a2511ed2c99328952ba1ae6472e583d4e9ca396542c99a13265c245f52b5d294a10917c99e1bb6a360ccc8f1d6751af70cd1693ca46b0a652de1843677b4794ae85cd1b1a223e5084f0c2e2152745200aaaa362d27b4d86889f9d1ba828287160d3657848a1610a029ad1b3c5873c610e5b668cdc9410059a6e630e9c971819aa32328a7858a9c2652e4b038c9b9fac965c121c74a562b930375c78f52814417b50285c1ba2e4b99a95183152f4b959123a70923d4b03103c49d97a5dc8479d255b9bb771c256577585ca9054cbb2ecacabe76005f4094fc6a64e079bfa83ee4724c4b9f2d16b1d62261bb5a69ad65167c9398d29d99999dce39a74f9a7757a2d87dd298b572d249bbae0bbbae978660d9a167d7755dd7759dfba42ff3f9d75f553d27c8a1e81d15e54937b07a9f28f21d3d38de9acbef014ef29893f80959941c922fab0cb7ebf7c645f2551091c9641df55e5c557f70e75eed62d6be98c9da1e6cb57c0b3849e6f3fdbbfa55fa688c5c7fc6d2f276bb499b4dd2db8d8d98f1c2f5ef2b332ea25d1975d9aca3602b48e91ea70a2c48361a58906ca9267ef0b1edd4fd6fae6766c6f17229a3b953aa8893e4bad72be90c37d86fda38276bedcd705683ba1f856e4c48224d703e48e794d164b12bfb36029acf1768d262526aaa67e9fca664c3294ed70542124948be906b20be00ff8bf1d162c89ac39e2cfd0850185f0694168136f2ff684c6de4631824935ea8e67a7f5b0b26aaa0a077d56aadd96e38a62aab2b2c70768036f2af7191d7be4fb602451bf97f41421fed5104ddef9b79d4fb7add8c0888fe05aa5def52ab5bfa5bda17b0bc3b5a4a9b510307941b3b4009a27584921973460820543843e524d73c78684ac2697657002f778c5d1994e2caaf6f9cb8f22d12386bd25cf9b27b002c4a1461648537362891b3354f22418d272186c4f0c444548e5efb3b5c4a29a5b4690f941d1fa9c53735a8b8f2eb9b2f57becfc8c1491023333855a5a9ca8db24b6df77b88d0a99a83e304244f7254874bbfb6e252aa24479fb26825b0c6752991806c6f82207125d842a8e2061b7633d80d3df1434a84ad6158839e6ff8ae59e88231e386e0f715439ab5b136f2562c613b1aed62adac4921a25a15b25124b30b5e37888b9a7ef8624665370b92b5beeca22bdad8584c8ee51fabad868eebf7e0ac83a60181ffd18032981ffef720bda1172056b704f265f405ed0567767e75d6faf3fb59bf045dfdfa05f001043ee82d6626aa75d6bdafb8b2ddbb063d771c61ceda8bed5ec50dd69f9b06dbbdbd1ded4914fdc5d993f914945307fe40246fbe601fbaae42310ce72b7cfbae0f5fb21278c377978bf0657d9ab041ef610d977044d8d78f3259d083e1652519f586ef3fd6f047ce32c315e14c852c68a9cef0a50b83f9c200773ef17c387bc2f1fe1f860ffb717e90ac7df853839036654d8ea517bcaf77f1fa3f8b045c700516f61229a48dde87e1ec8364def3f558e64916b6a28da8e64c2663d1460ee0227ff0fbbeee8a56823dd9394377653043bf6005ecc9c230d04a1978c168186823ff178d83ce0017b9083ff09b27893043070d7172dc8092414a0b399ef7c77952ed860e449c9163e5c6919cff06ad04f25d71c68eb53692eb68ca71fd456631fb3776bcdd79c331c57077162e0c3cdad877016de41fb491ad8dfc6fa8c6be4f13a20dc330145d18f88b9e3b8e70c3597bb1f36bd360e75757e81ed26e37d86e4511767ebdcdfaceee3757dc6fb6a28ded66d2d290bb03d8488e953fde6eb0e0e50fa77f90acc97e987cfe851ee875cfa2f762063eed15e2f705672dd636f3b7ecf74f0141b4b1625504972374c88db22ec25788e4e034665eb0e3c4159c2159e4965eb275c4070a2dc031026872d94ac146a921864b141c31b8810a9271910e3bca64cc62fa9b18419e043902a50a4a1ca02d5b359850820c901f3c24b9a258e638e102c5052b506768f0152d745098d1a4c60b260c69c3068b98965c7c80810a992e40ba00312557cc2c6b5408c2c71a27b4446981051a5f01aa1ad848e9f0c30891a0e661e675e7dbd9a3c48eb1987b9c4ec1e5072461761cc1612a37cae4c4d239c2e0c8cd87318385281cde28b1a48d14556e7e4d6ae140c7668e34399531824e6eb4ddc9e44975ce99e3ce2b4ff470e7b79048f5ceb7b3882a28e0f0c406aa35357273d6144ed85148a8f624ac12891946631ff22120f6fac330782e6a2927a594aef8b9ec339fdb3d9705f739028fdb65dd16e5943f7f72d8f640665d39a9ccf21b7832cdfab0a378ab677de8ad774031d88798cef97542f6391b3fc51ceb214fefbceb64d7dd8ffc9f2b692490262cb12c87f899a74ca0ba3c8503cce54fba3c75630a8b55ba2c75c7cec5499b44fa2021be7ff99798c5d40da83b1e5d7ecb3c45899dfd3f4aec4f12eb3d3858fff606415e108ce4974076270d48ca2a15597bd7daed72117541cfa5ff73a9a471e78c6ff7ac04f5aa70ead35f2f84c5fad3bcbb7da66453ec7c2ac70f694f9dd72b3bda8febb414416cdbc21fe194483e3d5815210bf575093effac62064660165dedd6b85cd942035cd5d836979bb8fc568b8c8a99b8a84d0852ae7dffd196214dc1a5df0e7e5f6f2087e40b66c3b70cb8683281b13e247dcaa766fe4c3299b51b987934e62c8fca497e95513c3a202ea9a6cb4b0c0170329a17448a908965cba45f9eb0405563479b2366599434e9a14929e54a3b358b0d91de7e26184e1d240472cda83bb256e7681e77c44c1aee0c71e70838577e75b297a5ee48ddd96148c842e3abeafa8793d6349eb237f7b6fa2689d543fdb5daeea6cd1c87957b5b39cd71587913bbc0262c4e5a390e4faa72a99c93e122ff11bc74881ed79f5ab5521542c9308b3a848bfc5dd461a4437c5a3ee40f62791258020f0d01c1a6f0061119d8c3fa5cac31dc71fd45359c04729b26ae8b77aebb6e5c77edb8eefa71dd65e4fa834c2a4869e37fb4b1461b6d136472fd5d4c3cc985e543383c09f63ecaec87b4b182b4f1e67a792e26d7c7178eeb7508b3e8f7af425ae905c5af1ccca25f355c7f8fc24540d8f115e5fabbb03ce9f5a272fd1575fd3535bab0aedff10575fd3f2d4faad55a99ecd3fab49caebf84c3499d8687b05aa9c7b0d11a46628291e8bbe91f7d7c082562556cffb79d18daea6a26732ce4b40e5e559f7cd1f85c146d4c7674b34581d96e2934b5b1afcb527790dc51146342312b8a622c48c886f04e10b09e0005dea9f1e3a1c0e3b3c30645874348b56315a328407976baccce8e141416a05065a785991027eca0b0e004adb67496b03e97a59c48e28eb61ad65e9672624c8acb52574e47fa0905be06d958f794b6cc87da081693489ed7cd4890524a855349cae636fa218b75903369e621a4f3033f707e0f7f80da0464eea3d97c48becf8ecfe5a286a17449a0fb5a3bd61959d146b236fa8084a32b8359f563faf46a4431cf3f4948b650d010f7dcdd73f7ae79a8fb6ef76e823bdf997e5845f7defff3cf3dafebaaad49e7b1ee62d6be904df38b28fd6cccebbcaeebc0ae8324d05bd741704f72da755dd779ecd25f1ff8f5efce7d33c943f44119209d62e7ea3eac20cc706bcb25a5929d84eb2ede88b4478e3449e2a8ae41f35b48166a48d15a25be255df9b5ce983a496eb53fba997d649b386dec74b78f5b2db17222a5f499607c8029e2ee3ed44b112f4b8e581914eb2f654a90d45a41261f9c30f930e5fbbef0842927580141507c51c29217253809c3d025c7879c22a228beded878a3c3e572c19e98f28495d7eb65eb2ca9e3040683f160a5c16263aded4903264d191e1e1e9f2b2d57543d3d3d296265a694b1e223ca8a58ff582c86828b0d2e3a7e44970bfe1fe6771bfa5d2e680a9f629de94a1c39c44c57ecc81adf1085283362fd658aa99085c01891edc8bdc3994cd6e8e7e8f30d92483f2d58188c597436f459f8a1eb854c02e0f76fc786cfd73dea7a01cec614dcfa5fe7a275dd288257bdff66a3ace17b5f50e772511d6c6fa2a5569aff89337f2f4cf7754e517217f981f5e321fa3c958b688e56a9849deec6548a1541a8c0acc0c0603d0171818a4897197254cac9116394504193492c87c6c692df1227533a2a1c3638cbb5eabec143fd55b5a98f9251b14e3b9a8c347944dcc6acd629772ad25a248eacb631b91cb8fa6a430890c96471ec28ad3acb87e4db6cd6ca645fbb6d4726b5955c7265034bc7aca0e5f1618601b1a3945931a9d29aeacfaa16f050ff970f62884b1970f9e74c3659d16023590299acce9243f239d7b39af542c28ed2aaffaa6265c99e458f32c0543845a5e996c02f6bd990e31a737777b794524ae9eeee3ee794bdf0248953addff77ddf078220088261188661288aa2288a2e97cbe572bd5eafd7eb0583c1603098b5d65acbc3c3c3c3c3d3d3d3d3d3d3e3e3e3231b128bfdfcfcfcfcfc4435e1408142e4a239c33bceeb62a3f93ca95859777700a884ec496e001672fc964704b982d413747224803bea34992770282247c2ac129363d9801a4eba34e5e4acef082ea59c2e39257d39af4b460f6ccef7f93edfa7f84284cbde7dd6cf4f41c3f63b333333bbb33b4fe6d9d13ec840012f664703a1feb5808ba4fbb7df79abd37661d0de4d1c09fabac04d9c779d9c724a29a5ecdc714c7ec581a80f84c083a8e9964a94ab48c842a18fcb3fbbbb07db6d2ff3e39c5dd25ed6fc5ff8f163b1a0204965252de8bdbb25cf36c0204610db3d8a1db6a389481289e91153f91abdadadad35b75310b13807c1bbe989b9c3952b34aa56ac8a75a772ca93b424527fadaab2b2bac2925d53c7aad82c597336b2e6585ce455d735986e43d69cd26a94774dd7df6d48241c3a6a56189e052db1d2853fc0b614cf847cab44625a7511f26519e592cce00aac3f33cf2b320b103aeb7ee05d193d30bf2e199d787565882f66014237dd0f2070fb6553d375bdb02fa43413b60ab69f9f5f00b8fc25cbd53729d7f08e1c95a58e8e507a92e3d4a15b2e8623254c276588ae633877bc8db56b7bbae1a387958fb7c6f3de540fc70443f632f1f2d40d1c5f9e4e18f78e6e369b289facceb8c1b212c2892f3989668a0e1d5a10e3c30b93083a4d5c59e85001c0d40d1ab3cb5336ae2e7879ca86105ce543834929edba6eceaea9cdc6554b5ecba9ee29ed94842c14b2475d6ca5eaf2f9bacb9719d4a68b82eb773e286732a4b3d1a4f2c5741e4fe0dd09be949dcbaf93f3c711ee4882f43c0c64b2e63d0fcffbeec7073b34d9883221a25acc76defb70b154bcde575b4779d3eb3cf73e9e0d724079efb4a3efdeca9ae77dcf1d3bceeb791d7b1e91f7b5ae636f324f212f4bcaaeebbaee2d4d5665c7bf9dadfb9a44e2974a4e9b554af9dbb7d65a5d782fe3245bbf032b2b719c1c6eada0d70d3125775dd775d625d187c5dacbdf4dfa73fa30e5d655d20f23c66851e12a0ad6035a80d364860723608c9c31b3e543f2e3842662c6685911e3c5092a4608a16409291936e8f96147d9d4925d92c879c1071936497cc9a1714a42b5040e52802833848d157ac890535543d30e19b0bc81fa41449620579048e184be21b7c82a28325641b841728688a73956ca0001f27292195302130f430b0c73580052c21c2aa6e30426470e6e9830a204a22518b749b31de15a3c7120249a22aa9c11a302aa26ac589006eaa90e11352a58f2d26a8a992ae10a06c40616921566a8c3c6050eac12a0e050fdb004500b495f4366f50f48762401e56409316f5c88300050a303ea0a0a891a92f4ac60476b5fdeaee429e94dcad470c384143465b45071983734c69b2c49206922b50606cf8dbdf54ae95919205f9b4b6a535353d3091c352b57b7c91edd2f4ced905bba385103462b063040bc80a162673c4939e3c2132958354031a940101ba850dda072b524081a52a80392a872c2c4eac98fa9186c1dd891c2d39029462081c2403ce9723c2441041268e6a461122416b1a32876ae03053dc2843961ca102c22412b78024b0a136002c9561231585143a799c5d8d801f574c30d9920aa827cb9313950d0d283cd12ad58cf113bda361c4449b9e14b112f729a7cfe3045030519556754c061ca0d17aa9ad0380f021c8e70636688973162d8879984151fd0bc49a1ca0c3dc8a7d973b23091668ba04b13609c706c09c143ed333d28094a7244133dd46002d514982841ccc2e917d983479635265cd1f0c68a1148a6a8b6b67c64c550430c9ca61c5850e8961c35e6e0a06c868e12498810d9b2058bbf6c31f181372ba830658b1c209c701148037b15b6a1a10223e74c0d3da4f0f472c437a3480f4e48a824a9610210436c9735c3042d1e6e60f2668d0d53fca9cb0f29201085c90d2f54699225051cec08f1218b0e292c91030b1408335eacb489d36309558e0d1c1596d050f2a3091b9f9a3da4b2a0893385c6842232aa2f3bfc10254a951d3a3959d33dc9560ea00cc855d3a0636b8a093f04880b3740b9a0c29b352c05a5bbf9a002254aa840c7931c49a268e77487e11f84e18b81d503bddc9c3d06109d8aa8548eb98312aa199300004100e3150000180c080504e27048289e87d2281f14001164843a6c563c158943519424318a8208228618638c018410029051a8c63800a62817219127354103b4d4cbea9bde624b218424d38fa5e4182485db43b34294f2196d370ec0e2b7c4e93628af91d05eedfe70c989798d035b09e5c3b5ac2ee94eb8f7e2b22e28990d2887f89f71b328f612ab216aa12827aae841d4c33403fdb780a05b2fc72f9224707dd200e9335b7a16345a1528b626e71d9ce6ddc0332828c7e3e458628ae9cdbd2323e13fb3fae6de22545a91e2f9c6c3884581f8930f0ef21ad2973facc3b5fa7d6ee85bf1ac9020abaf18191d2277d4ccd2474e315686620601139736a808cdb3bf689cb667640eb520ff478e5458ce4df2619ca93d9ebd9be6e7f3c0ee8db82fd81c92af6ad098b2d41ebb411be1d22890ee765d4d0bafb9978cda432d082a0ca85d2a5357a83ae64cf00dea176b81f109468bed2fbdd88330f6551e3be758e162366d5cf9fc7996f3d133b4faecef978c284c0a1b1f70e41c310aac1bc176d922f623cabe4b82d6019f29db72dfe9161422c9a7a5912c94f0f800aa13e6334f78931533f2bb3dab030934f9c727955b09169772bbdaea595a1b3bc05c875a816885e3cb5c62362c09b448cccdb7e28a5e14b1eeb41544cec944660298b51c5301eb1e58fe40bd689357ad4537bbbc348681ed4270623b45ad84c55e4837f1f6b842eb6f32c2fdfc120bd9baf19c9cb869322c4ef3dd3da76944d47f64cdfa21e4f9fd5dd78073793e5c079093a06894cfd053608e0b208ba1f4e78e8aa966e6da4a3daeda61c4ad9264b322920a508ba8bea32e81c52a1d75c02356c157cf557d4996f04a64bf3c511f16c5a94715515855965d77a8a3aa2d461c65920cd63e2840b5e86adc57126cd70528412ab0eab85512ecd7984f00aab0d576944bb0584f9e42d463d572154b32586b9d40d5e3ab735d49b05d859c84a941aae7564964bf463701a8c356df512ec962fd6a3a41b65a68b5ddea122cd676a603ee528d57b7bb7e12acdc4ac8fc1ed31d55c9a363aa98b9094cc3c8527df3318c663b9626b4ab3afa8df7d23ae0382c10655137e0cb03ca0a6d75db283bb0795f2db543c9f77ca8762bb07d224777ca3da87cc740a6dde5920c723f50c1c6438229d82aba216621b29364e4b52cae9cb0c4a6f1b71e9144cbbdea8555c49b2852246c82b44fa3b047ec81ade11062e4f5eaa003358fede846ed95e03b15256239621eee8fd2bf11eb29accd5f966175d0df5505cca1916a34374568d72bff78a7935d6024baac808585cf1e47e1f1868ab2a5dedeff67e77ffe6912d6eb28ffec87182eae0dc21cd274d35b9f85779365b96474aa115023ece606664906fa333615b3ee0658794040749e7817b72ee3fc56e42655c00a3e3301f9ba5a27fb053e14db7f38f30129be0eda2a73a41abac6b6cb0b839611e65086c05e05f3f318ce8cbe874376d4dc5652411712edb5d7d60328d271f31483768e7bb364f6e96d2d6092d7b70889820e15099ac76656c9065fd546cb57a326f6f601fd75777bc529105adb7747c1eb036a933ef2e1aaf1fb5925a337c420262a9f39f22f234abe17eb05c1e271ca711a463808b1689064ec6e9565ffd5ac52a1f4887487e1f8042dbb35a91b62eaeed85818fe6f9991e9783f95b141bd3ee0f65ff7758a49489ee88269bf5fccc8110302be3ba2674a7661f63b77fbd64409ca289d853da1072b21c180184a8314662f0753dfc2d076348b6716d59c79dacf1f08344b7d29e886fac5ecf9e9a17bc647037f6f7deca23df00fe853b89498d4ecc4d878da9e8679a7a0a813b03f6553595d0baf892179d1f32c541ad6e53ce91585a79a9e05f5094d65d61161fb9932d10fdd159269d60f450ee00349a75bfe16fa6cb4d78a091cbc54ce1c49f5063e8a1e9ed5d700bf70379023b8fc4b8c1ee91552cfb41014a6c016ce019379a577e05c7402c33e2ad59eee44c643ad6c8d694827b55e2138f27c00cacf1cccd92f3cda19db7eb2a4fc5bf75f88c188ff9d40d7598b86fad1779dded13b80096e0b4bc220f1efaba8fcc800c0ec1841d1ed8440fa96342412f7ca8d4a06b8a53750d76bc45606bdf231ba25863764673139741c62d439134f98ee60102bcf216608d9f47b6ae4dd88f2a02eae83383273e40b3eb46165a4de5e02fce4fc5dccc79e6bf5b27ec79967f250f2b631aed039b814f4bef95f88cfcc57e79ea33464fe4d33fb52512cca3d166b6d9b803dc291b046bfd0a901578759f11e86ce3f2bebe38722d76a2d52bf0b89aa064a212764b643286d44aa0ae1c1ddf77a355e1fc7505fd64802cb1d13537e6fe127ef98caf2e4159fe8b538ad3f3f6c792959cc6a24a2468867e5c5248cd73e60ea6de4b30c799ff39fb63328fe4c1743a1658f2f3b0450253d1f897f1b1a9112e8bf388bbda0b4172681a8690582ad2ad86c0f70c182f943ee674942469cb0a42abd655962ff49f4dc4d9a2491ca617ae8f1542d54ad477fe5fc5a0f24ce2f5d52b6c1d68fe8ee70dbe03f27e2c354aeca8b8cadafdddb4c0ba23bddcc59e9dde2d25bd4bd606a9a2b0e65ec631e5199fe4855d246140a6632cf0b404c0306e060f374d573b36f346888394adc40def25593284f8bce4030d3c6f56d6040f7c3933fb4b6b900a03408d77e744b5378cf3efab20d5972f47e16e6ae3c52507a9a2c1197080749535f03c2a9e3ae7f654f41cb7afad11cf06f8dad7632d03349514692ca5360c20a5b488018154e43dd1f7fa4b04b82e88bf1a5ee372b0847f13244042bfb12a6eba9cae428d69c8b2850a0964fb185bcbd69811f9dd5f22ba8955047e495bc010a0d4e5d6abb28e01756b804f0b3334187daa19a89c6a2458680dee4e7060dba7d3faff09d80435beb279cfed490df429befe965bc165a000416d44944f2e2e48762dc2c649c1cc9e7809b5a70d98f215902f98fb5c21e2e561ab39e9b11b9b7b7a9b0c8ea860300fd1240d0de6ba279cd44fb156be31f7af8bf2e4c7663b486040af7a275de7832d3c9e49fcc57ed44d9decdd79d2f322494a2be7be251a0005d719cc017e7e2dcb83d6e665e94d1d6d232dccbe51c9ef8798f3869d2d8a6123ae7e38cfc3d4f89fb6548da7affa1f2b70b141a6a2bf56a6424c79ab9b903bdb704a317177d008b25c79723262e0aba7d325b76f2f174f2f0d10d3d53285a4238bdcd73d124d045652644f5351318a4fa25ae1bbac8fc736d458d25b9e1a5e5dc67e741481fc9b8b54f7dc10d21f0029563b30c6e471aa783a9d4c07219119c6471f80cc9e32e8af7ce7a42885eeb20466bc161191a3b2eaee2ff7799e4d83d2174d758a4faca7891d69aad6c1e11ecff9b98c046af0814da3e5bbb152a4e80e49f6245b5e3d1427c1e105a5ba591e4d1cf77bb8814bdb298115024d3274799246beec42f19a1308784a22c23c1855580c8e02ec98647d8f7f2cab6e94ee6e5baeb3b702f1a53ac87151a745ad884622fa15f67bebdd50ef4230f4207528173f94eb47e7d3c0e8feef77e0b17d801e130fece718e1f049b834b3dba9add93e04b195d3078e992a224f373ced75898095db705271a29aa4412b2476f5fb056bd0366d1c47750e62f1e890333b972d41a2aecb5265874673570a5a3c828bf55fc8cd77e4ac54f3d7e4302b471052a5820acfb6de7eb253be5f17c9fb0b02cf053eac39cc7c6856950b17e7b18777ae559b1f4ea418ee2d3667f0d002db58008b0fa9e02c2e95eaedf6bc56f56e6c7178ec0a58db3e0002c21c0503f1acb29b2dbc5bf07c19dceb879edfa1cddad535acad15d4c932084b5d839fd8321f73ac046923c6efa40df9e6bdc28bd5fb6db1bdadd38e977201b2116b154456dfd5e3e2c2c0112cf230ad7f7ee57622809592687211a768cb03852d381e01e5f69df82ec3b917519b379e8a385cc0441f541410d7adebfe0722fa28123e202868e169d60accb73ebefb3e14e6c1c6828d3db1671389daf206b3362507b604e5153aa04407ccea3a9c3bb1829c85c2ade227c34dad7f94e8970c9c02050a72a9a07be0e428d9e730ac124f6eb8ef93d5ad991d801d866c0b634a0fb4ea318f5a47a90e31e24bc5b415b8b26e6c8e25494e071ee6aa93037a2f390189a3acec599a51c50ae9809774eb74abbc1052105c5d73851b239a13363d326ecb0b0f588447e10685a86bf0a4636d217c592f757a8891ba32b60139326c43453ee233c5e1aced0a35a63643560d792271932a10822310d13905ccb5ffac0d812008782c77bab8f69ef15c50ef99246776a84b5aa08f26a6a77fd9bc5e606194959b6ce35e21afa487b27d1a9d2213d835294b3a834a85894e495a0bf1c8d236025cc37524ba0a83d6a84a2a2ad6ab23ab2ee513822412b2061b988229cfa9d213263d3bb1c97899d9c7631934e4e135242ee0bb1166912968e72c147347f708c7cb7003b57eb866f401f5a09dc1eab685f16a9a4610b089a433f12d86c29bd9018e974e8ff95ce2a381029ad9a8dfd4884782167ae4f86eb406e9adc1f2995d6175d8faddd43c34647612274b977b58760c167f14a26d93d493bd84daea23c433346b93f1573d5ee1622f792e46265971804840945a207de674360e3bb250d3c4c12464ab5a6a02a2ed64de4190f113c0d7ca1349174a9012e42448c845cc89bfda79dd246e9fc194386e5f6174942fc43ed53cf32acc75be5aa37eefba4decef4c362bb9bcab1c788ca8547e6f81f407b8c426dcefccffac890aca2e35fde7ed6c2c432b2d29c524e3a7cb973cfb3052d606a6d4c3236d923a04b18944f691be1b1ea6568c55b45ec705e9d1720f7224a4d015ab2666749a12a3c37ce8829781d95c60ebcd6aedc9b6561b6f0f8a54593142e1967c67b04e26e498d66ba1df358b94aae5b6d2032a4c987b9fd604c3e1c60a1bb8d7df059ec39a078372646e222b5a2efef7d86dc25248ebbd51a10b8035482c73768d26e2cad06bb2cf55cf2826879dec3340c20f5cbf895c41075010b7c44410ffe4d08bd0ff4fe40b74b67caa87579cd4085a7b50b4fc2ac81ed6a802cf2b62f3b3519e223c8da37e5a0b1e42e6861ca69701a3743ce0af1b2cfd80812fc4796066a894375524ad68debfd6951e2fdd530b9c7ca6b1cc54837ea7488d7638aa34714e430356cb532c0f75d9c78f47964f42f56692ee08ba711d237c227a750602c7580ef7f2b345db2e814a31aa86e2f7e6f1c0bd26241d86b693089d85b2e8fb0d089eb845507fabfe2396bfe04daf92b24a4210b19afd255d4adad727740c662763564642c6a1f7b54cecc0db3cb72c38f6ea7c2457e68ecb517d82b2021e6f3bb013be865be99bfdb5b653289df659a75aac48e720a6d492006cdfafa7411343bd60d6a9618e4ff703d14286246df43a191b0ec57a36c92483fb8755387e1ed9b40e801259ed705b6d29fc41632f065dc0ca7eafd8c4090cbf1668672085226f9b88e427f54b34f5e410fec2dbdbfc3b24b6f619fd08a423f08a54eb86cd0f3a427a40b8a153abb856b4417aae98a9afac990f80f8f54d2cfd58eadcc301cd5866c70b41da1df802912fd82101c36fa5c8c1e3b96d50498bf2e36d6c7caf1fa0b8b29340d32c1c776eb0c436a6b6c9744c460d589598446cf78dd0b4ee91249de9b7fdf9d9fee24027da9f9e926948710ab3d15d297528aacc453f653f47bd4ebeb325e4b418eca8e11de42c371b67fa54de4e8d4dc96a5dc3b948ac4f0ad5cd10b6f2f872128bc7e62335fcf0b994fcae86e34db521829b7e3dac2ff00ba091f0dbfa30aa1a29a228fd6902d1700c19ddc68a18f059de148b982a999f097dacc34a2b153e87ecad1ae52db382c9232465217dc1ca814108b6e3c9e5fe6331ed56b697b2dff7758ea037ef15472ea8336129c49e7e505e4c8f2a3b0e8b20a944170b5696bc790bfec8a44a03fa98942595542e46b269bc83e36b9effdf5706606347434c122afbf9485cab1fc750edbe6bc058188c6020e066be0171f620ae3506dd8cc790f24063bd01d78ceb6e6ed681866f55716a175d1c81be45d314f4362bdc1729303024a4df8e0686404686093fc0ee557aefc214efec1f2d489991fc24686af9d94c94c8ca46dcbb4cdc1cdef07d115161de1435ca167a961a5403a39da90c2a8941ba9db3b9acc4a68d22c2f8fbbb5252676feb298e77ede07f19a594281ae4c4c8787dcc8e5d837f60309cbd1e7fa15d645b22dcc27c9648c3cfaecf62d36365036e6903f7097542d44b28b6e01a73cc2b25d9f07383541a60cc0e0d124e564a58c0431e67e036666392911a290593790b9568d9a62c2d082f8277bc9b0c738c8f919e484ed18efb3d20c42b8fe6cbe69b12b18a72d045868353aad8eb1f30e68e4ee0ac72a8f073b6f72f82cac2c5df82386137a19409354ec5f54ccb4377f8a4d9834dc138a9f9734bc2f730233842330301f2840c876abd3afab134bc2ec6af947c606825ac535f4dad42d5d45f66e5c02b361092d9ae07be50f6320aa2b0bd13d5c2947db5829daf6940e9366298b211edd4ace702ade7a4aca1891ff0f72af530f42c62ccb7d9cdbfba03396c74705346d611efdeb881aa1b150938ebdf06b93bdf409351952ab02c5236da81b6fd0b5170667c077b1ea9ee7a5c33c7c6bb8e23e30b52ebf4470dd8800dfab43442ff7202e09b7c2fcfe838f747855c008117895a2ca048e6e858258a9448d620cebc999a59c3552fda83fff818881c2e7aebea801677b61486a9096f74b9d3c4bc5183263491e5d94c430a011ddaa339ce8a5a00ad0d49edd0b718675c746e4170418296770c31c0ea8766009edf486588d46550296a5f8d02e29de7ab21a916853623a2c26171aca6fa33d9f7e5f3866cf0f51fd296747fb8a9c5745e571e0a1adc36c9e21e508a59c2efbc4f5ac0a5e01c93af09520093fe3d4646f45e3df36347ba394a716dd97284899149ef9b311701ef1fcae81a58c1bb8d8f842a8707a13aa5d1c2cbb232a1088b1aab3767d4e896c992292e0532cc5eb6151aa7e6f385863ddb4cf8fd94d101afbed65580e5d787ac0e4fe04afd6d86fac8c4dbded3517fc3ed6f3d4ab5599d28ca70d159fd5973aaacfd973b780b49bb18e0671c5f4c45739f1e3c3440219275fe2830830102129727673ffa8fe529c1fc079626820bb7b39a61968904ba0ac654315deec91581b77ca1530b0e15b46045499d18f0e8518a29d8345c0cd9e833d963315b5523280ae934338222cb24180ae21a68ca55ea05830f93365e39401457e0d93da5a768c3284f3451b0f1e5f3e0b287ab20f7ee6d940a5b7b52610f4b0a074fec60523d72644c0cd7ad73d544c175d89ab7006dc263074b508f68118d54b86579228c2e89462c9bcad0f64e5bd4fe4cadc7b880baffd5f0846691a0d55ebbf48ad2e037e603788cd715cfbacdcbb0aa1daf7889bdcfb0a1b9fcc28f1038259dbe31f3a84b8c2139d3efa9fa945826b1a8862484c465e99321f64aca24c6394bc3910a910130e83f9bdd626144763d22d2fbe84b14a3859200c557d11420946ba9c6b59c6c9d5d2045693816233f67e9717d16c58f7bda188822eb7a652d7821d1e40ef851079f397fcc766b0f5af23c86c30016b3a0ff0eda5fa7a1a677b075536c0050195c986047e18dc4de564831d8eaaf839e5234ee1e3b87c4afdd707b441e6b8902786c5650c9c7b6b1e3749dc265b6ee092cd05fb7777f8e880cc07e2922bf63a5a67ea3aea8aa1655a4c342384b395deafe4f5150186fcc7813e354fac6574987e0a80960b78b3d99e34566e8eff181a496f9f2eb0fcce7d56b7805597e94ec2debd60c42148415b34117f08aacc51506ab293d5148d7a9eec7cc63d9ae9024c9a55502eda5e9450e5bbbdd61cd3ea5f7e6fc009513ab9ceb426af2984d07a0fc408d045748895802118f882fbce32108d49e525e3fef1e7546673424fe70e93f6b48b343e3f46fa16b3dcd7e74117c3088ec901f667cf2f3be74909ce13fb2f64365086be9abb76ea004d0a8777ec51e118f36fca38b31d558741d4f1f558ac77c7f2a75b2deaea1d490269054711a60b123f26a63ef1653f0b0ef12ff165f30a0ea910eb687d1797e0b4e0d9397b8e2614f78dab75a801948b89c6e36151ea7131ba8e74167c75167da6930c2f7cbe2538b04029352e38da808ce75921b84e1f3277f87be3a7c34a82c4765f83d73d2d285e18056d08ceb4d75d891ad6827148b78b7c318c5f44e669b318c63990077ac530185d577e4427dc283df274aa69642cf7f24621d00130d8a65fb7801672a91ee37f4301caeb0e15976f201b6ad6bc92f8273d5aa64dc0fe734aa2061dc06611e0520930be567de7c87a7b6e7db21ad4898f5d3b55a60992330ad48b88738108f36f342a12b2117f5d5ad36e07d0c009e1c090532bdc7720e5e8ddb27bb9af35680e9d39ed825c20968d82a5a0e06a26b48e62daf050ccd6bf7f0c80798c4cb6da8a9839f802f2a8caffb8230c987b6ca639e53bc1aec43e4c7545a58a9291b3d1a282d9dd084b2c6884afac23164b85a4fca8b2471c7ea6bddedc6e2b94b81a02f017b223a79e8ffdc69f55ec11b3ab50c122cf9953c3fe71c16cdcf916b7c35b15c28cec3fce3e2f49eabd0879b4104e29ded49e6607625e5c6fb312003f608281df7b5b39a8b7aad8d5317f3127a089616a7bf76e6ca2b787607aad8c1260739f30c37b7088a02dc691af1c8f614a9371affdb63bc2648e68c123892fc05f29880755beb2ba07649e9315273ff0d6b265f20364a70aa3334edb692bf0d0d03d1b598049c438a0ac7c768542b271e09b58f5f87f8fc0a3e7a03a3814239e07042c7fca92ab7ae33e282613587e3b6c4d06cbe52eccb3b73294acec27da2481bb7b24d454ff2de196671669d975e44f73c6baf195b6e3cc068b0aa031db3b8f6d5501d379d39ea22ef698452cd00f56a8d66d410a27d67ed4d8127d17b7e9583c2cb02db632fd0b3597fd1e03d1b8bd2da423e19fc41b3bc388d40b27838d6e28f3e909d17ed85a639070b6f5febe84e9466fafdfc46a463aa7289e8b9df90be2db25eac214643467c1775fa5ad5da20825107b73131ba9081687ce4986cc7d4c69ad0247a424edfe1331b5713132151643f8c0636b718712d6f3f97b299044a03a01a0f4f601bc577d98553a7fc32a9efd41b5e44c4abf197b454e7187d462a93b5524600c9bace5957f53643849676b569d7cc48f3a87f086c938161082ea015081669c3c20513189bb87c55f10e2e3d289dbf40be44b04a3a91eee470d2c68c65f4006b66ce25b950bd51e3a9c32137149cae39876fd2d35976239c33281093b9a02a407613cfc45cfab0bfec9a9c820711750e2a22ca6392d0543528dc51e42d751f19c269f236edf0b67450a51e5f26ea5f989e374b451544019a77834303669763f29a44dc8b649ea77c0d63e905330447fe705caa2b19910e80a0520589b5e6a01c30ccc71bd61fd89283526423bf5c4cd9842a54a942c3a971c42763d4636afc9282238a23d5880e7b8bdc4157e059e6c318d0a0c9c1670aa3c175d2f14c50695da3ed258e10dad7aa5edbd8608ff2bcda9204fad5aff07ff89acc3eaa53821f0684734fbed6ceb2d6e08808747f68a5caa4ffca0395141a8a45637371c7ac59b9087ac672632a8107857574560920d5d45ed17ea6261165419a619266bd35e0031078e684351df4a2ffab32ce9d4ceb7e694273e0a7b9b9f8e51df45dcd77b66e2b090b9ea04ce0a37afbf86aeaaf2f3a977a05b9b331f80243d50078207ffc2c0702eeff5ab4b65279662115fd57a8d668b99cd90bc0541c86fab3a1ae9486cc493c4600ea68dbf1ccac841ac12e6e48f253380f546c86e7b70972364e72ebd0d90c15939972db545be4067d192b242ff91e13057a2233ae0e77a3a80541921f021b824707d7c8c8b209ff02ba26290da3cff4262bb98271ba72c227011c6766bb2f84880235ef8e4f7d311415623c0b0f434cf59f6f40db537b2e84d3fbcaa7fbe1b9608c65dc0c0da3709c761e172d9a9a660d4cce71efe70d6faf51535442677f1dbf1307d5f157b0a25f6d9b0cb04516ba0fd1fe837fca3c4e76a324a656615911a799a4d624245065c9abb9981f143bc461df14752f5f6939cd44c0c9c9a7f6e3e37fa1b83498ca5ef6ae3e12c1d502fe4442929af090acd532505ff52d201b8d3b8c5300dbccfdfcfafa8429d8e88ed47c147cbea473e686c2b0144811600563416a376bb57e925f09bd1827e339842ce42403f8c5efb5b63a0db4eca29914253909c264d3cb090736f08128712693c9968ce23984866930cadef2e8bf217ce39ea467d09652bbc4508f040a87e30391cf7f1f8f3190124f551693538e5eb6a46dc3dfa7c3d77f563151a5504461a171687ae0504d4a79b0fd801149d20def13580c7d751d528d35dd728121b1f4cf556a6995811a705d1c18f8cdf310452d508359fdc419ea1d19944519a38a7f56a6cb647f098398c81cc513915399bd849bd159d0be0b9f94eefa5e84c00cfcd76fade652702786ab6d3f7eaaa32e0262df6ee409cd2333dea0e025d07cfcab3b31598610afa7e99f402be8a9e90ba28b93d8c7ae67768f922a69a9aa074e873fc1974e6af8496d3c7a8673675ebf92f0c2a33d2a09ff366a833a70a5a5e0fa39e0928ade7fc30aacc4e1dac41f3bd19e453edaf3e501ad64b65a74a0b57d0b3a6a607fa2cf022da2df2eb31fe88526f87072806232699e08ae71f6a08ae7121961a8fd45326a3d2462489cf56201fc903cbb65e02ab924bc1b71236bec37f23e637832dfdbec19f67168b2df90711ca74ad5ca07091d66a5774c08b77c1a861feb5e92b270f5c95799dc38b9d519c7a102ca342d537b9c8ec1273658ee0bf2ad836f9568ff0600ccdaa7f0c0b31f2a6059bb5b5951f5147520d23a2d6fd0591000232684cb4465401931f2eb19d9fc87446213645351d91a6681280442bb902527bd3250a741a9c0a52e7b862598b26a0d6040a9cb4a084afd98c5d3e1d4903e7a00282d0564158555124e99052e5c4541fdc53cae5f8169f01452175f13f4307eba8b9518d71bfef94767a62063f6cdc28937669092a1da02b48b1e186769801f2b5fbeb9442a5a5fb762a99b7187cff0ac716da0fde1d9d26138fc582aef9eca2af587ac3725c0c45c383ee15faa3da8e6f9bff9a745bb5280a8fbce7698f5fa983efce51c8914b52cdf7847c128c58404dd45a6f6c976c48827bc13f4a445f64b69e8d17a220da2d3076ac1c5195fdd2da0b876448368caf2a3a1f231995a3a18dc3c67a3862d6eca9c5d8624302dc5185f2da52b2312d9a87fb75a4d05080b0e621c8a1a892b7b2bcb9534c16eaabcef077f499b1597eaed5b41d930b63b8a6fd635092ee6b00c512cba216f72c67a45115bd1d415fc7b2848130632bb3098b39a6c5a85e68844c429645e9ccac46da3cbe66f82b55467340be8fb677a0dd6d2791e572dc49a4537902c16310c64fa30f08f3c9441f9313d855a9e1437e5c02bc5fbee510bb32eb4d4dce2529b06ca301f6a92c968780f9c1a868164bae7e15bbd769dd6dfd4054f0ff2cbef82c4c0705bf2b753e2416aa11451365afaca77d64c6c7b50670afeaa82c6f42fa8525e965a3f47832c656b364b3ab79bd2c1a89aed74bc004a74fb9bdd262b6d1b9677243e5cb7f87d7977282dafeb31cb88d15d8483892c682149289a49ea12055146a8ecf3691235af9f2ef9b7e57520d849aaf20e422faafef760504afe78eb2361728c5f408b3849c17464273fe9efc827e76ddecbef4fe8834b1c07229e8233cbb5c7e73422691faa383fe0a5c89c469b8f16f62d6932b02961a417d2f002d30a611ad110a51b2440a0df249d5eb832bb80a5dbf88263fa8f58f0f0444a9f3534a11f49c3abbf4e210e2633e049c7f9e581fdda2ffd24d9280f55f47aa32e52f6215135a48d05822b4a09914850e44c8308d284b130ade7cd9c8bc500b64c59379daefaeb3855a10c377a4209c806b54713079d742553ff02df1b921f15a12693370fb33bca9242c7fd9d3833a3d2f7f3f42569b4b157cf668e73990d1c5bd995f9c4b73e37f2919591776c3f8f10e2ac5fd100240a40cc4ebd5712d04269ab6930c2b02b4b60369cd487e88eba36fa715a9b207654590db11d291b55938a10cd8737ee3f9ab0749d5d4f147d2800bf13ea52051096117abbcd32ed167eb1ef3350eb1b70d0a4710774adbe20f938a0d00bedc04d08348e7940895ccbf930b39195703a546fcc18190d95670542b21f0a3ee8dc808a9735771b6e7e9bd4410145ff73a0e859abb8df3ad0b2b5a9821d90e76f31a096c161b9b13a7cdc3fb2c4004b614d4b556f1de915a12cd0991a03945afb3b77171fb8395ccbd0626e23f3a5833ea1f91242a15eb267f238fcf59200eb113594bbf870768bd2ac0f35869f2341378d06d394f63a3107803527b973b115a694be19553ca0e126c5452a7e3ed7a01a42ee3e49f9816d83135418d49a4397578053d0bbbcd9a9dda98d67dc3c144c0950400d36e2c7cfcfb63efa20a58d4bd6bd36d5411ef3399b88e1a9c460d775e8b153e1e8854a75c9b6628ba9ecf94700495ebc59e92c558d866a80bde8d086dd506eebb6935c243e091c2d5e770529cb0c49900a4e65cf054eee028159e7f4e51cdae7219f7cea74b157156748325b1dec223a40c5b2fb99d521ab71e7497938a18e8b8226c9b07e67f1f32588135ff565a54407fbd669f07b10969fb35a883dff5b54346160235163a35328bb6ecc2d7cbfc17e7d09519209e32f0bbf5a2310e91e3bdb3170a792a8ea55bef49ae44814bdb72be88919518715dda2aff276f20067d4927d2d1af62495d8a69a7f0412de599893a93f41b99ec04e106c20a589b73de4c651748508fe95f45266a832635af4e96dec8626cca9d018274abb0b6aa5f685e204482460300c553ccd0e04d42865d6ee2cab1b7526da54199234e31e8b04ad298153440cad9ffb367136362d8f8b334449eb6e6821b92fa66c74a6d163571cc2c363c6dcc003732b5cd103478b0cc49c8fe29ade23e556fadd700b73028e35f9252661f3dcc4b9de9f1d0517f70139761af43965207c55b0463e7de48534cf932a33f6f356d28efb89980694837922b8f94df516d2181fc5555f3d0dadf2a8b624a147c129606b88b930414ef1a2703b328be5f22d832f3f2822478fd1f57e13823cae7fad968e8b37bc90759a3f98f15a24b172ed02cc28f9650ded23632fda2df4d2f5fbda83181768f90c8bdd34047aa5f35b233f5488d5a0f63b369d48dc3dc246dccb92add21d3c1a315641b51e0cfa1e8f5d38f718e6b559e620a753a1a6791af16b0568cde77fdb4897010215899e498bd086d498599e42b023110e70cc6d27e456db732f94ab6555fe2eb3c19d8436fed1cc104cc24cb3d544184dc582ee7e037081251be0fe759d00e7859db953d5019a29a4bb72b477ccedbd80cae763d53932931950d8a5302da579d34addf533e02ec177c4a54059f65a63e7158293a152f844b3847d28f4a42800d35fbe50773af4cb1f306b4228082309d58b01479dcbb48ae9362e81789a26c29483ea51ce56ae0a0d67c8422d9ca1b7d77dbdf7c2ebbb55e0f8da227d04ee4263c15ebd474dc5a734f2d679cd4821aa3993b43907cfa135c30c738187b3af30e822c785d248832bbe3a7cfb3416f913ee158a83fb8bc9598c074fce7f43a3136fb4e31249116eadc6cd6a858a17b6e9bcd381b2ce3454eacb4a502b97deae7df4319ea3c2cf3322df4c54320f1efaa5da8090d27d88e35bc2c299b7a8c3f741f5cddf538bbfaff9583840490a900393d73032b0080a3f549b4cd3327bfe469292d01e33e180083d08cd4a16436fa6e843789a7eef10530ed678189ec7b505d341ba75e4f58bf7275cd9aa5bf959e8f4920df13e235a79c6828b5ab7a4593c926fa8fec09b3986a07787404b900ddfe5355e09b30db88162b9fb0a7b91ebf045215148f85a010fb83e73514e620c1b8006a868dfe64208d2ff90151864525551e8e0c0bb2916d49d3d17e1c11353102911c70422c49fb95e94aadf0bedb4036b945a9b88de7d8058fb31d3b9ba760f9bc03ad68a7b5f4b91d40d34596b31d8d70c98dd05b07c604b22cb40b0c9204ec61e9c90c1ba97c89d10a711fd83bf2972dbc18a90bb49a70bd80aeb315106053f2bbaa68114cd3c9c0811a4594641e68dfcd0f5780b0f615e382fedab7b939c756dff9763cec064e4390ef2df727a65c684dddf63f2ee627f06f9a27c38e197f213684c2e139bed96269708eee4e1583a783ee4ef0a5b84be26fdf28337caa9697822bd8fe0e6d328400b22869b3e334e091eb2cad139ce650a2bddad2eb5d83ee6ff780f64ace57569b6364b08ff8f0b548b589a40d8ba2ad31533a6a47d771e41cbc0d8bab848202c199ead2162754bb6c80b0ec725f4147adcbc598b386f18ab58db8cdce4633654afdade9962bf2de2b1d8f2830431090c0f59a01e34c9166bb932fc9112efeec17f1b08ce75efdbecf23c72a6cde1bcd7df1d397c097726945a8c18323e50665a5431ce8b43d9a013c5f1c0b4877873d6f7b71b850d38a45e6428fb9d8bf29fafd9abe8883423171125cb1655ebed15aebce659084bfa92410d1857fb4e73962ca8e88ffbaa3fef9d4ce67cfae76fffdc36fc63491b4cd2bc204400fc1254d8dcf005fb367e68b56fa4e29bf0d25b8d4c47452bd0de84caf9cd19c4e227d46e756e1f3f82c4db2047e7b9a37deecd40b2e30d975e791de35498d7cade15b5b1cbe7bb404f9a1dd56c03a92edcaddb3c4f397b98c3ca7b96c56714351ca0f89f4aeb04712b92e6ab204ba7538602a074c46babe6289f87246dfd1d1502c54230b534e5225a8b06ce8551a640af3cce758a33605635ac0452509d3c7a3fdd73fb89d9ebf33be340bde98c9966031b05b963ae20677bfbdac58373f17a22a760af5cfdc9ec3c9a4d8701f7b8633775533e01ca6fc6a574aff3bbbb715ab97c1f7906c0c02abcfdf04372dcd92b0c28a7e0254555965ae8379cd96a5c5f612fae9a2afd201822a295dab1b7ef526fbff0444f7093027e1a179b749785d4642d22136ceff8d219ad81d00db10fa1fe47ad14ca693e71842abc2e13593bbdaa3a4f8277632263e1a70d5e0878f3031094061f0211ffe5fedfa935a7218c3c747267671f6e2352c6ce105a204fab954af1a7f431000479bb5796c8035549cc5a86f4cd48d2c1d5921c5fb11d1c4dd1d0f43577ea249baa9b3d47c26243357359e70ceeaaec68f27fdf1061400823fd53f94e3a35d84751739190df9d8f71156e0c4b5d2512971d8fe9cf56d7819ff9fa3d98a6778cf6b82ea8dd7f938e496d1d51515c3ccb92f21e3688b011343b401cbd07cc7ad59e9549c848313aec1af8ef195649e16574d1ac9604462e62d2e2287dff6b353631f16bb6d0077631b4bda6174192b45f6cc78ddfd466ad5a2f7408e4ea8903c02dfd9fb8f7017ed515eb1b4f2c329eaf1c858c2d1efb01fb4af3e6a030fd58644631ab48e99c58e537401bc11bec1a6c3354a5c70daddb1bf2dbdeef9b3e3179b514e98ae74d372be6aba7db412679a223614df167dcda60b605cca5bcceb47b911298e67d330741517f39cbec834e0e7a74021da2bf1ab6104672321921c949b1793a0ef983014ccd79c4256da1d25f4ec3fa4e426d2512ffaf89929a786a5420d664bda8013454c688ec2949bafa6aa95c365ae7500b272e0781feabc3ef8b46a3d105cb3b5da8494b9ad491c434fe529f3d50e13fb237c4950b45f898ae619059df8a052a444e2adf32f74010bc50027da5c890143031cbd844c56bbf6144dd8f2f171454455f4e89c7affadb9ee9d3932dd26231c09312a64715c04292bc9f8432f7c59ce90fc77d1c61b52d23d95e03851a1f3ad848e69fba8f2e75573771363dc8019e7a738ca19a6eefde4664ac2fcd02ef1c9eaf6688fc81a67c826eee11005ef2e0b102084e151d597b30058aad7576b4f15763b274793813c94c3fa91c92614d02ef352e78fd934cbbb98eb937efc7c654f26de5783827f756d8895934035f1a8a595ef6537b6f6085319426d25252106c2966397593603a78e035a883ab916a2235906ec5e5be7291c22d1388bab414210635dd3c28720581fc7daa295d869135b48ae61e1052877b68b0af37a8f10d20cdbbffd266c6e136d19df2da9c731b2ac586ac09b540465f9455c4d9d3267927af8706130328342f33a8c93a5d67bb059b0da2044386e3357c0514945faf386ef9537d19478193acc7c50e32223a0127e4a580e88a9a74b9afd4522b3821b19e368473e0a69a9681346a35f216e0d078945fa78df03459106e97a865bae23d58f33454199de4f116935727f86d4dad6ed4aadc1a2cd87c2b49aec1d5a860b47e6afd2fd0441b0642a02f40431f7353b8a30e72c9738fed9e6c9f453921a8807b68c3367ebdfefd4f04a1688f3ec089dcab31c6f6d736fa089f629ca89d6b0941a5e54a7e49ed09378c910f4fd5d45fae249da6471fa3bccc2ba3c7a51a8ed950d4267292b1089787191bb13962296e9a938f0a264d8a660395e1681e8f4addd59f2a02f0be4cd2a6d0349868caddfc58240bcb2621d2535c8dc8891442cf431bbe0d001a828df5ce4bc68e9bf3b0f00e09d06b0538b337e7832ab6e4465311fb7b5c17043fa074534c5f11a79cfadc77924732820bdc17f8be0aa85081f9e190bbcfdb0c5364cc0ea8f98b6a4c1411f8165f199fb71fda469e9a4980cd55dcf1bc978b4eebdf8752604d09853e2f6a3839dcf1594fca098e8704fbbf4942977958c171bba5ad1c121ee848853dd8bdc0f275c0ec7e575935de39422d46184ef8b922e7741848440e3d8052e6a1d75c09758aeb52c3301ede6996aa77ccec5858d218a194ba209e420cc2db73f9325af079abeede65c8e34f247dd4a2b0304974bcc4d85d7895aa57e5755fc1ce36b07199b7155a1e0eb4f8a3ae8b35d2a5f38c08d60d6e481a3706a41bde1931f82e38cca44df2f327eab0265dc79e29b76a2df9837ef9eb97646c3fc3b50c679bb9e63a5b78086b6e980f71d490a91d7cc830be879e2cf3f2974c85627dd6a80bbf2210dc60029b5bc497e4d113196dacbac5170f1e0437146026870af6b744396628ec3d60a13963039dc7e35f234a0dd13326a7fecb2c28d2910059207e088109b7441cd3de1412cbc8db2eeff6e25f6bfe11fe03419845c774d5c4ef5db388803785e883f0672b44c00be33092ecec16e6debfa63e6cc7db3553fa5736c140200fb61ad61fc44884bd09b028cd5f09cbf31a049b65db2392e5f4de6730df285aa61ea1f8833154c020ddf3eb13edb4c9884fb5e86a77b5ece0049b611666946623504077d8bb33a3a78a1a95db0a17ec5acc879f49ee247378e00eeaab4d87d505b418a746234743b530d48b43ab0d7b41a0f89da1a3c411500cb2ad408c7e66e2cf523f523c9da0300ba216ec6bcfc849dcfce84839feb4b9308b901658f6c0314ec52316c2f3a672367237640e55cfcd18745671edcca715f64aeeac57fa13979725dce8bee259199258817e757844abe5ed4430f35500e84eb91583244401d170ea67e469e1ef836678f1d5b48326d13fcec386d0a096cb83d96efc96b176c92fe12de186f6d2a8ff2bb2942cf9f23530396456bfdd393460e3c57d60fbe10cd9d74a6fb5595521f2f39f84e5cee530900c6d499d1da8f5b3887cc918290aa597a1b89633c4065155e3a47c6a47e0f22a1555ec59275fdf00e273586bf271c8c54cc02b4ae9c18c2be4426082d086defda727240f318d56627015fed57a5f718ca2182d250415757554f097efbeb2a0fe6057d0893109ddc1d49a80a359d942dd5b02cb4018e6398ee82628194dba6a4e0df8ef0fa54218502f4bc0b97e94a1f4bdd85084fc3559f77414fb8c46ba8bb403e5314700c46d5835d6962eb5fd31053f23a66edb584dc5f17cefca32d43073990b7ccf4466870a5d155bcdfe9c044953841fe2a5e32a48bfc4046ba3289b5aa7b6f0da397b862f9c3601a1b11613bb0156f1fce4e5d016b3a5e17823f699a2b49cb00c20edbccddeba64b28a8aba1d1de7c6a6f82ae1900acdfd4b8b8b24e485363023efb2ea9c4694e2470ad6ac0c0e46098194326b9f848340f57791d034c769004ce0b8c0470683359ea9912ed9c1e4f0d3581b57aacf93a830c3f0478c56b9516323039953772132c640c93941ff11d5301a59cd5cc7f7b3b15d0829871f8df64077dc5018160a3d7630d77080819852922391656f34077dfaded7ff11122c5405d3827830886fc7281318c37f7fbd9aadce30f4b9e0b21c97fa2e8c87f29c0152d4b30efcdebf8df18b58ffc358a196778ae4192fa154914776eda6326a7b51c57337823e34f84d86899be63cb28fea31504c26642628b4cfb8cb3d22c40d35d55c3068536a2cc1368069877b1b9c66256fd2c48ef4f8573d6b42f8565d3024230ca49614b9d40b54f2a16a27c8796611f8bd9ffe4678234968c2b24530c56859a3f8d6bf709f0670e4b0075e8e2bb6c18193be884b023475a8b64e9bd0b206c99ad12373e524e340bf626bc306f4f56ae94b103467d4e43ae72c9bbcad9e980b116de1efab76795aed9dea42cf2cc4fa315201721e0c9a6ce1dc2f67bf1fb4ede2a1738fbca89615103e3c98a317a99ac3a6d1f543e937562384802b7174b4ba280285a72468f21fdc00bb9ed23e6718d69255efdcebd95cebe3eb66df30d6651e8cb68b8629547eeef69d9c291e9e9ab3011900c2580930b3d09099fd2d6bee4003dca57e7c24fed0b89065a9a7f55d9af54bd5ce8602d68efff3b8868dd231cc40a6b89af74df5914d7366058cce448b57ccbb557e0293a78fe1b939bb3ef734dbb79df1678337a5bec16ec4181b1596634ee1ff6d2c82367c3c18f1ada78ae99b052b1439b07423d857775f668e3c9432e0e5ead025b48f77da6413e7653b0ec8b7c0d821efd8732e8b20684203d2d2c455087420f961e723db52e570539a254af93ca16768f1f695f86832522a182b985fb53f6369fed0ba00f49df6f912a3481e53329bc482df94067da172997080b8eb6e3f00490354528d6d8c748da0454442ed859df12d19ef6f624fe9b451138560088503d9e44707890cb523bc1cc8d369ef522e018eca8f03a443dac7fb7bf97bddd8abcc0af6dd7d3cedca9e5cbb5688037c6755da8a1fd65b998dea3339a17c8f32438c01e529b543d2dd2138b41135ce1a984ffc97110624942b0280dadc4702eb1b4e8287a9a6639d400a4eec139eadf300533f3e70ced256522f1c772bf0f6e861dde38efddfafe0956780e3853f0285de760df8023378548491b50998d441a742da6353ce25ccd0813fbc9a2422ac66dbba0f02ea1ce31645dd55e4874809e6f09903ccf403b8bfa2b88042b476099639e799965478ab48bbe804a82adbc9220a985fbfd95c53a99f3197866251ae100b420c3dad8f8f24075d4beb9f2cff950201d281751b3057c8b11f17bb215dd24efeb482b6a9d563d9edc2d9c23d64403188989087c502fa3bee5a90376de4dee3a4b6c66a36aa7264c1c84de874208886ff972a7c224dd5a7ebe1b648b3e85de3ac8029c11c87364ef9e78a14bfeaebf0e13700dd4217b359ef50b6bb04a08b75723d90c87c12f62a65fc16e42ea6069634596a2549ab1898481423d2b6416ec3c1d67e364bed3b36da6e43e1996e3101af740172bd014ffdd88e7672a71a5372eb32b56c4cf2e77f2ce5175a6bc90d1db6a4c42c6a8782e503c66a278eb7ef5b5b1ab1e5a39dad519cfdbff51e2141cc472730d1f0f414afda29ac1852d1deacd8934245994871c7bb96c57ac818be4342e6ad651e6cbdb84c8e61c6ece57d0ff8e1e12dd4aba31bdd330519110830957de308bb417135184c399c8460e3fe1872c2c79046a1c0fc7221907ea635d77e1268de9e5b93cb427c6f0037644c4fabe647f43a31a0ecb372fdffbcefb784896ef139596ef78b5f221ddbef1335e0ad59dfe7f1114ca6c051c0b851b82d5dd22323230e2c91b8298424c08584087d1961b43d7cdf10cb236f66ac2a3b8d7876bdff888ed2299e58c90b7f203639bacc8579a108e2ba46f9a09454c08a189c549a1ed2c4675f5b31943d46602fa399e53cd9b091604ecbef4f5c1c164026caa87f59b062cea5e232c896ee3e97fa5a0ef17bd0db1f30d00acf8489deb1fdc67a0390176f729d2884cb2d7d8f5bc9665b28b7d0d5ab5879edcfbd5d02f44aaf12dfc841bc6ceb42ba11d41c250bce4cb2d2a18e5d97957440b5048b2dceb83df6c394d02708ab9c5f78dddc1f95de5acd8c911bc6e3d94a7f9cb7e7d970052ff984ec7801a000d48765f2f570bc1de03b14a16002ed74946ca190205e126b156e618604dc33e985470bbdb876aa2d7244bef6c9520c8a57d21aabfa29b5c0d233c09a482c3aa1102e31205a71d68a6ba19b24d00e3275d88a9723c741637682aade8dfc26f88e8ab09a5e21cb825f4e569b267e21f40a810a96e637d8502ab1a023af6b183d15f6884669ac2688cff46e38332b209622f1b8973f7456a8e2d5aed7606f50a58789a3f011d3a7e070dd34f6d50f814089357791b1432b1f05eb4da4843b5844c7f06059576ca83ac62517dca152cf7a22cd9ca245019ef4402d3e21c24527e4b63d0d4a844a02ca0ba518b3a017e0ca617b5cbcbad438c46f59d4bff39b10d2693dde35ef553488db02197cac53096b7b34fad1ec38c376622bb725c585439ff69c2ee4c335a30d8a294f17d35f29caf80cbc79eb5b17b1d45f1bf12936becc843f0caf1468be6b379d9df754689fd48502b4f192ff8c0a283d5928a90c80fa8e375e4e480d16360f0845ee625fe3a1980e78e58748106c2d507c02b677361ceb70c96119e1e6a17749abca405050aa02671647e60a54d67cad9a367ee5957cf216dc53a445bc93948da35f19356d9c3fa3455b98c55d0d0e37415056f2f089ddc3934874fffb96778afead45f05e69d4279d5925a283507d378e9cba6ab68ac9796393e07988003d33995fc9dd30df86ec30522ee94bd0c91be15eaef43a53f244c946bb42f1ddaccee08524c8042acfe0d3c972e82ccad09fa365ff34a26bf486f91c697df937529f11d7df18dc7e69292b046729ef5dce4af185e4623eb69115d97039bfc8cbed67be7714e6d32439066afd758b48d56573ab8880eb09e67fba18a586c78923a04892c027656846a1660665b8bd19418fc3f5a29332b31d844741132d48c832b1a40da30f813f477e53a477d431ede9a209a0c3c4d175c4565c917094860b424e0c77377a796632c0c5af0c33703d737998537249d192427ca25fbd6d859c8f27255fec26d5383d0c4cc3352f2077f4d845b6170e793e8c71ce329f0e70f04b3775617c3b108776c375f3da0bed232cc8ab780f6bab4bc4f766e014948d9fa5f4ee3d52acd9d8671e3d91ad468f07cd1ab2ac397fdfe618d7b4c313dca96a7b9e22db08fd83c772232073d8e30e45049626873a397f1049ea7fb5a2803313347d90a3e3a4655fd53530160f66718ec7bd3c1393c29033605c1fb249b0c1748ef64ec6284d439be2a9f3ba8892400346c285598291307d3eafc8f1eba66ab7c3550b3dab99e59c6d5183dab292ff9f82d2f3a9ecdeb024b981f58e4bf88140bf213a436c804c0eee42cf260f0c4cc3f4e26670bcc3392d32c009a89d8b8baa4b1554405f183f930922912725ae31fbe19556caa343d57814b1baeea6c54d0a1da6a7378a61ad277960199a061f98333c15991be6da1ad6f0d2adcdf2d8d5a9ec900f706d2ba19db54c1d39ced6d07c6a173d3000dd445c669e0b2e1817815db92f4c37f9dcd580cc6649853565e3fa87173bc80c120a6b80d69976b6a2a0966324061051ca9cfc4afa7742dc05cdd4e9e4eac79558eff8b0707ad3ee9e357314297b43aeb69f03d0f2c63f864b5906f6d423fd9fbe80ec31f85d1a648aea3484d8dbf1a8522e3d9b5b0136b2c7b3358091035b14db8c1c3a34b3946a64999c074ea5891e4720a098c940a615493c02e9d952891cb6cdd99f862a5af9668e924d28d9c7f4175e200dbd35336c5a58b264dd9482c34638668aaee3b7489dbdf77c493d4f8d522a1e2db9c552b5be874e9a1a60ece9754c8fa61225f4b970844fd7d3c8a579d1240ec5eb2c1b704ef48abd1d78693a65d165677ad7bc6741d42db2a0531606e288b443b3772c2a0b7b337782fa55a445ff2573315595ca67f8ace0c4490746f222824d0f7ccc683a0a2f1e32e6c06dd8d2141c0614c6136e38b36036c6c67ba8ae6eabf383fc5fd63b49bfe41a898fa759b52972ca20076dd7472a18856e56791991505b4eb5dccd1a42e678123ce3a887dae83bf58653487b18dc2813d51dc01408deb9b1b3a1ec81e6e668a881dd8c30a41e4ce9659bda3bff2d1bb21ce53e1546841ab49695b4e70107a0c5cc8e48236651c251133b8435a46f943fcebb760484115cfaad7ff60b0f100a5c6dc6d8a9229c81cd6d8e6fe5c6d2580bb157dbd1c89e0e1a6279155821d613ee373d91cc29d25ec357b66d781f1fbdaa33a6b49eb9abc731251b8f5e17c3b90538a2343689db8e1bad336f8b5ead22ef79630fdf1c1eab902e3c784ba2797f1e8a476253467ea3084dae7eb20a847cf5f42a8ea1ec3f4bcb6ba6f63a5eac1cd58119d4d4778e3e02f32175dacb18bb8dbfcc73e5d52805c53900ae8d56b812f6ca1076904e20acae6b7b09a4f4f78f3f0aea2c59a8fa0e3d637f2e7eef43173b07fe6afffccbb86df3d9d79a02587fd7cf5ab8e1a88bd7cf823e9d9b415002c7dd32abddb15601e4e5d85f38e0e1b96c247c41ddeb2457cc5cbca24f553589d62036d9e9e2ee7c6c25473b2232837ed37098dbbc20946abab983fc942eab381ded06f4cf4410a71b6d7bf1df5abead3d9a7a8b744c50c4f9096d0ac1d96b6bc5c56e95a6f96e17a40dfd5795a05b74f7d9b5a0c09c5591cd364578a720fe619250bfe826b373fa83d2b99a0ccfa8176d21b2f9c0ab396b8b7d4431adc8aa7ce85d6b61cfb220444ff691d6154979e0fc371c7f7b9466a71305d6edae6cfd5dfb17a25d4e2a0d05fa10b905167205fd30b3a89dae20847a398c84e3c56cb766a2b845b1c27797b26ab21f8914a3745a90618a995964fe670e0ac4f080da7801230d9710e9d704a1432a2c7766b1b0cadf3236912747faac2fe7a9dbd97b9a5cca60db7e03bb33e5b3ba9d1b1532be89e48e4582b95c2083c00110f66935248298423e745c2d02466f1ab912ea8e97e3f1c0c2d26f27ff20813082e326bb224b10cae94af729e05c94802190162fa69fcccb3ea9bc8953f5549fc8ed57865622f8c81286c95aa0ffd46fac46980a21ae47f6f3281469d99a27da782135223fb1018988b5620bed971f90045e0739d6c3400a6d90d3a01a5b14b66c21586c083c54c5417e9896959099ad93ec5f9e390c80224e334abd45793cfdae4c13487458dd2d63b9d264ef51449a456e0edee3ca30335504392cac5078724221a86985f425f2262e7c851be1d2e9d54954be47167de8666bfc945510e789c45f517a6bcfe15d6e53f45cdd03bcb37c5a53323139d63ee65966d3d05b7ee5e1df4cf893a8ae3e741e786489b03534a62070eeee522701494f82a5973be15688e3d7eee59f49ebf759f9227f46d14a0685155433c96624b2dc5a241cd2383da513767f569b0bafa6496326b9f9ac4f59888a14c2f4c9dddd7012e167c5ec09010c6b5475930b2aaa921eb708ad830f92ea6bc7d81c1564907ea950e31716f8b4b99e375f6d83a93b1655c72046d0aa3720498ea6338f53ffb4063da6b1f746c113b7504ed7837dd18f408ebef7db42aceb929f58a756846901a26c4d30bccf01521f8484b4d47b5315caf9935bf89a894d38f71a715a0994797a2a30ae0cc9c8f89ad30f56a2108f5b3fd99f91720b660b76f774139460d4e4ca0d6f863fffb674c0a0374e91656d52471bbce6296506bc2358545d233f58082fece0be6703709f3810b942c591c458bc06cb43ca82f039557ae3fc28906161d801b141671ec156e94a123bc43c94af17c91da03e98761f2ab56e908b55d2de4694e7d59728b1e467202db1b3c56b0b94e00919548bbc3baa1ade042407c71be79dbb7090e5f3c44c65e8eae6becb4a8c78e9bae44eed5eb2b7fa58ea50c584008ea34c5fd8081152247708f927fae7bb37724d830a17559574a6a7470f0df8b03cee8e4a01698fe50648b491608bf15e9c281f9c6b44e192c8c331486c53833a78de37a286fbcb0ebfa1ecfd41140c4da4f1bac5d4e381bb8a87c2784e231673c9f7dec2f1e11669059e1f92d64bb46f2ec400ea9cafe75e1302bd003fb42599c82c340a5189d9148f119ee4861391f52d83efdff7ca4c1b5a110d7c0e46b4b690400ae827380312002b0f30671d7ace389006c56cc0f224f525ab21fb56182004dc1a737cbacdf50880688d7cf695694b9ba63e0ab4de502a103595169e13c629ca091da05326740dca2f1db685c210f009543714eb252fa5008953ae0d0b20d5012e247a775890f9995a036fa9182da0a43bb8b768d56f813b82a196ae965a138e9aca55e423727c52c22f1286adda40d75c17b20a383a69d5b54d2e634a243cc692b5ca0ace278cf01bc2746f01b2c7d9820ec7ea9680caf37e0cb37614558a1920992e818a1773b8812c43bd6cbaff16a6ead2d969e4987b75b3e61846aa9dc3b57e525cf3486921f39f8334e386dd2fc1cef7ed424f2e07bb70d4acc613bbfe2a2d768356ba833c08bf027902cfc5dce66e0881bd7c9c3cf36c583f6b2b35c2e543814fa0b4fde445fd1a77f78c0ce897217dcfe285887c5c14451379b4d8d04ac6b4b22de4b035fb0553451c80d0b059a236926b4d08c6f2684514fee351d321be4906bdb9cc240bf18e0f3b3a72e7984780f15921fd274c129e3d934eace595d5c4db96cbc4ec9632626e67b0a412ad74944e0af1511aa6051a738336850db80c407bc46c59b0b659b2231bff3bb777a0c689a73b3e00300a620642d395db58e39257fcf2b4337862cd715a2d92328098c801eafd83a993916af2036e0e36f0c1503d11f8f8791e3759b384d52ff924f5b8a92dbb52df18a741a7cf7cd9d419f766ba4bf54c945dd2ca53d1de38c6ac7042a9843f88911feb9dea0fb85e6df69f554d4db1ca9cd06c1d121e68e9780048b08881281c72412d10f836c34b8c269713efbbc236fa5a98afa23679065071a1de856b2277bf0123b6963c976ab8f06bda5c2021dc6c9cb0e04a8ffc417867ab56c7c5778190d6f314f182954921c7512b0acbdfb38cd8388ac0d958d47b572892b4d6b49803d361cc2027ab4d5575b30161aa703daa5fdc79cd21f970fd93aff8749dae2f5eaccb19bd6464d2cd404498899a86a67910c10cc63eb8103c6370d18f47938198de64b769873db7bdd7b95e8c3ce8f41b3eddccb9c6131c6ee9bb4b657b62da59432c9240333055b05880528e9dd8c50136551958e465d4755abf69d88e7d13bc76394af37aa6f8a3454021bd5a95d5970214c0ba8f8436cbf3dfc9e9e2c5fa73e7d29ab8c55d28b1ac94769282b29a591bea43d24bd80ce9092cd3b82fb4df6fcb6ad3b01f7dbb7013ef864e7958b78a6ef4474e2043a4878b20508982083b9b07db49c05207421be206b807a1b58e109ff2351a746c905d75bf74d3abb7f6b9d5b8291a6e79c5b37bb0e45677347e45747ff69157547f351daa4dcb45f1fc563bebda51853c042e64b211572dff446efdd911cfa0a8bc9f6368c58fea6f994eb316350c29af1448b26943cd1a2891e967f15223c33f0f90af9e6e431ca9ce77d38f97a9a10fbf4b798b29e8ed6b4caed08a777a8095d1ec953fbcffe17df3b9486b2a88aa2d0239123793a11cf134a1ddb51764f10bff6b873d90153fa956e9805931efa9cf56f63939f5ee476dd35e77cdcb7335aaddb36ed5ead43b594489ca6ddabdd7befbdd7391ddd52766bb756192980e14e092719ca9480225b41b96a5bacfd341277355b2ab5944a7734e25e60a93546aa462a53975cebd6fded607e74af4f28e5d54ef0c6d7377793f7de0ed5522271f7deeb3f6470024806a141681a39426d8ad2a7d633751ddbb00e9b68929102dc77a382e374989ec7f6f55bba6ed9b6cec6762e64930c160883dd4c3468c4c9416dda7ded76a8cddeba6d9af6d75a6b2f912379bbdb13f1bc6d9b565d2280f4d59065ccd0be33e47accc89af7d590ebfbb4fd686b573394f500cba90c65af9e7c656cdab6a1aeb6699a76b5add6dfbe7a6f1335189d7b916bf562beb7f3b1752e71dfc271dcb59c0e68843bda4657db6eb7bdc7dd402f36ed9dbb815678378cf5ab3dd7d9964e96bacdc3a6ceb3da0b3611779daf0a1cf65c72c0bdc2a802990127e3eed626d2b9e585d48ec3de0b1378f4a648e3bd9264a1a3c21636a830450524bc0440d35a3bddaadc0dcc62052e5688020060b421459ac0a3b7dc8d0df9eafc36e503f97a9f0d1d77633d540ffbdbdbdf5ed3bcef0399f3b1bd7d530dc0f655ef6b53fdfe5b69f51aabacb4237d3a28c8da5fa8596adbb6b5dd02207d3564cd03790ad91e66bb713e36af7aa698c29e0b0970ffc5319ad2bf2d1bee603cc134439912ae5cb91b2ca264fccde9a0b96331459f85bb89b9615d231153f45f5e80fb47ff35ac8545d6e480566ebcbcfdb5dd8d3473b3db662d8c6d7b6bf3668938a7bdf6a676ee3b3bd74346e6bcaf6fe337d2dc181bd66ced5e9cc0a3ff5497bb8156f2f6d7658bd2a13b8430a4af86bcddbab1f0d04ab665c3787bfccdbd80b5fb167537ad23e219722fb0dcdbf25b876a2991b88dc8918cea817fbb9e2f8ac77dedafa7bdbd3060e0c7f885ce2778e3d6ce250418ca60b093bf6e41a637d00b68847cbfd6edab4ddcba4ffb0da541fb95fe23fdc7fd777ffbee50a5fa28128abbb5356b5f7b0d66db69af79bd6dde5743bef6eba659cfb4002e2ebc814d59e65bba50f6bdf57d766de3dd11f1239fccdc7fdb7fb74371a80d75bd9b11aa7a3723cf363ea70fe9597b1efdf5bd7e7cffce91eb2123bbf7d5902194b1710f4e18830b986e65fba28329a65e885bf71dae9be25badca16ad503e91ef3564f9b1cab5d1fda1cfa71e679b8e8037e831e6db9b4faf42e6a49b75af48ef80d93d098dd8d80438c50e4b483e28b1c5b7281fa6180581859664af7ee9c0439111778595b5f5a70d1da308a6b5f44ff6ebd34c3aedcfeeab91a77df9cdb72fbf2d4ff93d6af0f0b421c618846d112ef415eb4f2915acf1e564f93045e15684ce0e4289889f356af4cc67b37612b423c4339484684924820bc5275a32944488276807cb17cc92089ea4884e1ed806fe402248f40343538112e56d3816d41ac4850126ec00f4a3fe800106925919c67155675fcf4c30a6ff05c6d668686df49c4ce4400644348df8ca56ffa0293f8076c41c3295d7ec88ee49f891397932a5ff00e22bfbf1eb99f51823a61a8ead55613aaded01feda955df2a96bba66aed92ca552ad70624c3fd1509110952020291b743b93f940257fed8a2fdb0128c71c93bc62ace0458515b68d6e38601a160c79cd10cda75c9822254ac47eaab7291d12851a5a43faa9a189bfc91f622dc6a7d390c32113744c3de8315f575002c2a3601b9bf03ea78d1b30301306087f3533b88f926827baa4245abb03cac4873ca6883535b6060ad89eec0f2a9df604f8ab19e231fd355e534382027f70486e35a959cd0fa4b0675aa628ba49244149358e548a04b271b8ca5940c24b45f0cc84865c4229a232c5caa24879f5080dc921e0afa65d3cb359d1d73ed26539a610dc87aa40ca900b3950efac78fabfaf86a484233e4e5c7ecd498553d26dffb40de04c7c1cf8f8509f1bf00cb1c66257515ad338dcebe04cfcef06c6140f814b03a8c1f874f21900bc21e7af604a4a947c6a284ff26421cbb44fcd88f4e9e41a01d0e142183824c30f22a044893900b6910ec099f85e080509b205fe3ad6b15893d892581c8d6c744c01ab5602066604f304fc75cc57415ea5752c6b50e853f1ece42e1263fafba7e02119c426dd6a75912131154f30346428ce0084866dca13de64cfd0241b049d2c0c08769c9c92ebf5721c89c594c964326833fda403fcb54ce6bd9cc48eed84aaa178116128eabbbb7b7dbd5eaf94af7a68e632ee072ceb3ff54baa6a5edd15251fdcdddda1c5a7af77ac75b5ab5dbeb2a976610b6380bf8e31fdb28fdb1413951c61518c355795f255bf9cfa74e9b58b2405fe6a6a5a7a746f52149504281831d10292751e9450268ca03f9a08720f5d50e7a1072b343294f560450f404e884ea0c2041ea0e0890c6e60f566a326870d3efd131995a16c0923f2979ac921b8504a21a41076d097b0ef6ee57b7ba4ee3ee5b455baa68d34cd8a6f948cf48886d2bc9b116aa26aa4544a2a5d3a95fed21d86147dc39a9318d1c55b4aa7d2ab57686b317e5ea9476b356b4b309b224da9ff3bcae80e674bef2c9d87fff53775eb683d81983061c2d382185798306122a3ed3884f8b3a18cd834bb7b18ef5cdc3b19ef849d619c52ca891a69b67653da14c583feddb68882fbb326c6b88d987a810d188b80b36c6ec030c3a78137b6b6cadd3ccafe1746aa466a6ec132850509d8747a396501830b18516889d26fe094b7da4bcf93d2b74f6534713ee8db911d691be9abc0bcf1f6f52be56f994e38e3b0683946c51963b7ad54ba4777229efda5bb741f3ea5e73e584287254af32f8eb0a1cff94994455514950da1774b1ffefd33cafee620d0b03d1ddb3e54dfed16b7dab9ece018bde97d2d6fe4bb7f7c53d6c1428e9e7fe464d4f197288fd55d4e18638d95932fbb9e9bbfa987c6f9883fb91eb193d287bfccd18b107a3dbb31ba20aa8243952e9ca8d2851745569cd301b3c8f4217d48e5cfd97df43721f42704e8d499dd4fdc78b90e04513cb1418e0290c5791fd81eb26ce2dd9ac5e23aad85931bc0b14b0bdfba35a7a33efdad3b32df8611abc78c017239dba556eaf6ad4971c382c4c99a37b76ec4d55abb6d626d5b6b3b0f1f59c3f637af5dfb1258fed5ac6cd80b0c3364c56f6eb3f66ded50d356d4488bd2d64afb72dbd631897f3b54fceb560a16788c7c50c9e95065cdd6fe9d1bc30a2e2a7231f9a2c84a518c2a587edbd943b3b375777c17a5811df2e93f00e6fbf435b0811532f584dc97b7e48204cfc7d1317afbb7fbb4a76194af0ea845134a9ec000b56842c914f98e7c8cb2367a6adfe988d2d188d2df22d63ada7d4d47579b0119ca9800a22243590b7632942dbbdbb5fb82e21ee6ed5b1e66968749622adb87305880f0b474ca5007380881a5939896bc0fab20923c94a40ff3ec509256910308ec96029ba10e7678b2ecd1a8f80d8b298f6f1f66ad4345af9728a17b7e4a1620c092f84f7726b2f4341be0af7b5a48808bc44c9f366d29a5ec96dd2d7bb6c718efee6669197f702c0de1240aa00cc42bbb2096a1cc053df9b3322688b2f555ec31c9578e5f24a6e09f220dd4591293614cbddca5f4604cf534503fa151042e02fe220f8c3c31f2d8ff224f0bdbf0c09808234fe4399d4652601d73421de9ca90e351b1a4de4060280b22966f8cabc81363e25b9dfe014359103d9005461e78e5ca952f5eb7672693c98486262415816dba874a0372bce14156080f11c97c35614c3f17236259f3004e6804fe9a4a1014a12852886432d994c952562693c123f0cecae6476c45f8e33daf26fd508af4e7c8f1f3f3f3b3c3bff3e7deac24a52e096a180c0683c11a5682e1af61f154b3c393249250e0a512cc1fd94c4ee9537a12b64ee931180c0693c5603018cc087c8488d60a3ba26e3608571720d4a0f5b2331f1f9f2e258926e889341f1c72d244be6a17ec6788545c0a4ec51e76eac1383a4ff424d197482b7280bf380b9ac17cd52e59ec07d6a4c7e7150b0a0ac2ada0a0d8436beda15943a1b7a82228a806cda083bcf5911a47f7c066b8b2007f71e62e1e9a8476d016e9ec62cfc89eb1b57e9c75018855605cf10c7f7106814871366741b3a059d02c681634cba4c621bfa7c455fb2489f1c0bac77a50ec99b6956a3fb810860694a1a79e21759c17b8f498bbf1327cc8c227da2c2ca467f150f1032cdfe2a122648d2a8cce7a0ca5abd3c8abde49e531f45974744e82f439ce223de47048a58e92bc94c750cedbbc201ae5153703456caecf019b89d42b5f406fb382638dafecdf95f6d6c214d4ba189a9583f69a77c406560c93653d552ca2fe954105cbbf12fb6ab20c1003672a94e9013ed910cb1328cbef0ea5ca89353aacc85dd7ec6868a04b6f95f063c7a5a04c7dae07187a8cf598ba4d81a90b4befbbc00d94ad375d88b0ec26f655c4b195f1f7aa148704fe2f85b3d31e4afe11e8f5e34b2fa781784cfd7e1d56ecb4d76101c5f78e30915e4eab3ca6460f7a8c0e4b87c5ea94c75428535951ea882ddb83ca5793552bcabfddbbf1e243ecaa1a8f992ceb9d3ca6ba2081e97712a61495465002c111a51cb2c8919dc8469aac74628ff1d853fa944e72429cd25b6399112b9d95ce27e2ff4081375c563a9b408b1d08046ac5afffa305d8c9cfb433a01faf6ed243fbb5f3fa0104041404d46a6dca4ebda6d43c2803fcf54bf67a01bd20d0cb6da800153dd1a0b0cc48b90a889e90f0a25fb16402af6901476a07f8834429248cc0202239a729860c292512fc41a27c4acd4fd5e4449132858a9c33d209a698ed8829a10f82014a14298d8428ab1d11ca93a0077a93f4fff8324954e0af5f36ff59e5aad70112e0c3ffd3007ffdeaf7b82561846642f7b46912d404e8c7eb261e63c255300d42167b13b2140278c3857ee6122a5ae2810554705e34c8e0cf0ffc81015558e4a9d0636a7eec9c359ac8cc3c915fe60b13f0d74d543fdd847effb43e450395a21d1e6d052e3a0a2e8856a28c0216208563fa05fee0ecb4e3f2c193038a8d9f68723f03727f0e8e205dfa9d94c22a6817f883b32331876b369bd9178c2a8656f455a99f9d70d7c1b40fe214663f2b4a9d098dbbc5a74fc9920eb1196d82238319e4188b69813ff813abb3d90c27168bc56638be6a9f58c77ac038168bd1582ce62b7c8399137953ad08232ea0b4c6e2a75bda41dac018d32604576a91521063949be905a67405b61607f6c766c602c40249c0c1e1c12ca885d25315f8eb5811948ee54a6d5c68f6b319ed767892c45e02a3a60ad212bac443a99119a829586a7d301191dbc47e29bc9b881a3132a5912929100236d16368a5ff46f9445dde263607e36dd737340ebda379dd8232f4616881bf02644a73228de969fc8e4873599e3e4ea4b94f3d1d263b29f782897237b6938132f44b275fa9e8e67d46f28633507ad83351523bea998f94b5b77123b9f4976e5a47fa52cd5acd258f4885010bd03858e819fa5d837a28db33f4611ef50cad6235cdf4329ec6dfc9bd40c3144d344c3fe359586ebb6674a7ae793a53d7b9bca0fec3f9a543753486d72d23e0ee1c4bcddd68369104c3b33d50305b4a69a9e47db887decdc21ba5872f21b5c02667c4007bb67f4b1e1028437f460c706712c93ae6384cfa2dd2949ef438d26052a9fbbe467124acb590bed47d31fe33fd07e33f0e1583f42813e95130488fe24818773097881cc92cdf19b3b078281eda736f1371e74e1269b44d33e5d25fae547ad26bdd97ca9aa6695aa98359ebee93b612ed2491867bfa5ca9e47d35909ac707e7f58bbe8d1a3145dfe509feba45bf5dcd43df76b64e4e87a394e048639ffe5fd1b4513f8d114f5d9ce2e9f43dd6ee802a01a7503204027c91e5cfd38ffb06933f53960fa590a57c7b849226b2bc018a2270c0e191002703f4c4a0e7083d18ff2907577c2042d56ab576dc6249d300937d42882a4114e518ad4fa4016f48973d13698532f14fb673c415b4a215df051964414cf96c40283cc0207f30c8257f504ab3644729c09e31d2e4e854fc2887c0fdee9980888da35ffe20d2acf0d62478c36fc4008f7a26fe87bde3a04cfc76b9e4c054e365fc104364710f23f4ecdf3ef40a7fa396fe68e40c989ce0f9380aacbd75ee7df3c1a71fcf9b7e3ab9aa59b2989a41058e2f74f3475d6795af70663d8b298737e843ff8feb61de9032f5fa0565fc3925f0f58e30c9e17e7be83cc04116412d16e7d111c05890c564fe6872a424481368ceeb6ed2f59884c04e05eed60d5e7c6945b8fdd705cac417185006a4b1371a87a967565746863132adf63fed32602787bec2da5e07cbba395c27d6fd54e3d0bc9a9e89d373a1673c08656e4099543762ddce86cb2865e37a9a978af9b391679e41056e2b55523f28fc020330a67580a92b27ad329debc4dafe76ae676dde0f8fd9d1407a267eec94165b6a9a0635cd473440192a70bb17af04719102c3fc9d5e624cf42e89fb90ebd13188c778bb7ba32d304c4bc2904905a6398ac8f219633cfd20c7af851caf6004b4cca16f60c8831cdf74043cbfbe090bdcd41b12534162aa05029caa490822fc145144139f263e3eb17efdccb61310f87b91fdc87e7ea068d8669ac562444388860c050182b6154508218480080109fa2183368aa9077f27201c209c19cd678a31c658a30822081e2adba904f87ba121d27ca72d6f262c962c699994e0ef64a258584adddd554e29a5eeee0e230002984ca620e04f2543aabbbbdb2d1e59d97ec01f261a423464280810b4ad282630816908fc9d62b0180cd6d32d8b7db280196144cfabe7f5724122686157046d49e00f03cd80663359378136e88a171144b85aae56eb88148ba5c08e38a2e7d5f37ab9862c866561724982bf5377b70b01e92024453f22cd67b216e3d3e9ff944f43150994dec839e79cf36fbffc60ed49e53ea94f55e3a08e009702fe5432a854aaa88aaa0c847eb44f21d18ddc6ae4fee9eeaa59a352c5b0b85c602eb07675ab5b46a07d1dc1c766938b0af077eaeeee5e12693e93c9e2cee293d95ae9ee7e9bda5a6bfda4b5d6fa8e1dbe3ad5ecf0d5097b4cce0e188aa64889e2ee235fe1c02158b3236f8712f8c3321cb1cd39488adc756cdde1b005630549863210ad7c4b348080e3eb5c2965e7b85ecee5b876228d6b87c6f51a4981e543282e57869c8e1c976b935c2fc1cb71edc414cc39488a224deecf41529483a428e7b8a68b27a660ce71e5b878627927ae222ce7b85a91a673ee1c2445390709112cc7d58a29987bba1c24aecde70a5986329f58107e50271342019b10a834ce987c96b2190104000013150000200c0a064663b158308c134d531f14800d6c7a3e725a361c09444194c33008c2206208010600030001c01830a684b60054c5d00115eafc35591840c9fb9644e03b52863b5f88efee8ade2e441230ec3254bc93abbdf32c1bdaa4447127a03561b304630416541275add357c14f6f602755a3967ebceb66f9ff04704ff80379e645e4dab9451e9a677e11162ec4af8abd15d3c2e44ed1bf0ca31336aee9d84058c5317a6cc191366593a1e925a5511fe2169a7ad51e1531d4838ea93ba15f41c797b9cfb2ed89387c43418f87cf6fbdc482aca949e74546bfdf8d5bdd42ca5a1ad2dad31afe838c3875d06c35cba573d50610f5d34b85e3352a535e42db7d28df520abb82d663fe7cb8b127ea3295081e0845347531714be464f1cdbbb6a4b128a95549d0a01f69af345972b588e992917a1679f23179bc11cf89594201685a2ad7df97a0884e68e235ba11930510bcd585178d68735d29680389cd6c35dcc88f663a45f4362a61bd223195eeb913ed9758d2f583c39d983d45a285b44c563ac0de29032304040531f2ee4baed34ba7ca1a4da2f5fc54112d7b7173258810ba9a60cdd8625d4e8e06196a1272e5628bc5f151d47e391ee8edf4848e647c3ee10a7602fea71f5134480edec2796acc6a6c484f81a2b8701346580068ab13cffa33c4ce3c64265ddb13b53ca1c141ee9f3b6e7568559be5a9a743092479afec13fbd7e0f234ca20fcaad7f2aaba2a1d5b6ccf48f2496548112a90500ae1b1f9056fd5234ee16a3ce89cecc4cb43b92eb0c3c7686343b4a46ee0104547b28fbb36cfcd8dc7481e7d65f7efd40832fbf39309e783c7026ee3409845dc9d0f73955111b9a1a6b6637b32d062e99871e4841e19c5f9c3e5245a71d4cb578136fc5fb83523c959848115120846e80dd1840afeaf5167610fff3a7663b0b08677333cbf10fac2b2ad404f88933855960d9a5a52b769a5c13a77c77ec188ab27597d6abeb1770b566d0d40481abaabe461f64a369fb70f1f2652b2b7b02af069af73cda667e3e707af98a713baf490f9d0dad5d23dc3c1a351199d8de444534c0a7323948efdc8711b74078c9aac799d1ba49feeb5bcc7952fc81cdfb33afce521fda9ef5a4ed46ffe1f344c0541d29c89aa1cc71c35fa594ed48e05c6a671ed50e2e491e43cdf25cf2f0fce9f03d4e6d8029af2f55f1203dff98fe2eb7b2d0a867cf75ed08d1ceeed030a09095b62ca1f9d06b11527f8b3c65fe9e87f1d29b80e200902c1f8f78d0aa460919b64cbf05f13e055ee482c94621ecd10a2a1814dd6b02b8e5e441c23699c4bb4d165e770fff639d7ef806ee1869b15f61f0cc422ea676e27d57b28325edb98528de5310e556e926727f55a6d44e9ed914b3ae4d743e9b5a29580f0b195506dae1f13675ea50feb6f6d8ba7fa3f6d90eac9d1a44580e25365b4b7cf19fbdc2e87743afcdc407f2397c82d24722723d51424ba5d9890800d9730dbfec4cde3400c1fec1c0939237a0ff6ec1be48194467ab8413d2c4516dbd42e6ed13a128e67cdc2e246de463d9ef5f846052c988de0778a3d1a2b5b5598b2c3972cb4e750b51a13c7571da4c6d4dbc99af67b53cc916eed41d2552ff0885f831cf223cc16b31c9c94471e401b8cec0e5e9743ea752a2f50e8a04851c755129c3b15f7254d60213f02e5821abf144c8ee704ec69c3ead04af716564a1a7eebe1785e62962748216f8e458506e6cd61b0ef9dbd8f3fdfb5f63a2311d82be45ddc80315dc1a3ab8526870633abf8d38ca090771a94228c8bbcb8b84eb55eee1cafc15cd583fc31edac5a0c64610aa55e8cf38e302d8d807eb5643414a32388d518192ea064aadb52bec10e816f1e498ec5a3186302e517f2420ca40f5836c82f1880ffc7b4fa918e0fcca467f4c214c1a189a1746770f33e64bc50e24840c06791ddcab6ce46274ece238ee4f34c9a06348ebe818e569a91ae09242b456f8a02c0f2a448129dab950aea0ad7b104f313861834432d3ee27928025a907ac7ad0c7cf5f9ff6f09a43db488d624700cf706efd14f3690ea73686ce301202f5f127e934e0d8dbb4ca5c9d3abb0be60d344cd14a77a7d9bd8b1070222ab705a0fc45ccf8ee9c4ead6277b3cb68741fa107a80d9e49a5b861ecfdb53198eaea02db7790646db97c574968c73ace95a665299b80a11d6d862c95acefd3409cc43cd96723db413ddef30fdca0e52c2b6e568fe4e3c1546e26cb81592de555d39a7d2f748175cdf7706b8f8775a2534e9957a7a054955b3c067de10b78ebb2505ae61e987dac4df7034afddcdffc2fb60235ccf3a95a3226d98d51ab32aa5299f9a84067b063a7fd5ce4fe2dd75f4f54ec0f094e108a2db890d304630f718cce88637c741e447640669cdf6774c1ad09b931701f06caad29ac6be274ce73c5d7a355cf3b93873a09024b22f72ec27f0bd70898de6e5d82b1e60ff4156ebd405610e5e5e0f2175110ffb7501322040a2da7cf99f643686542d68bdb5dbe1be69d25300ae31f24495ddf8b3f4189c591ed62f27250141bb481679aa29d7385f70691ae2607413ddd57748becc38713ab38272ee2fbd9d02b7d4e1706a459c507924a34e940abacaa75cce3fd32ba142de6326db21db6da07985854b4fa59e449a0ea5c0cd5dd46005cb1d418f9749cfe6516e965ee4a6c1d583c72d803ad03af8821027ccac99dce9dad41eb3e75f62d30edde0d45fa7b1c5ad4bbc2821986d8c2f74e28580475e57ad6f6fd124ed419d14d16d80d641d8d67e7e672a639965ffcd28fb6e81be45b485203924c4e473620bc87b201c938a8e1e3604a4e18a691cc9637db378fa8dbb1f77a3e6af59538ba1a88f1bda291ec916a93a2319ff9072e7f068e6c7f0465740bfdc1e8b09d179723523f57fff90b2916933061475fae5511025f5d80aeaaf33a4cffde7c52e70bc3e1a39933b7b3433c7fdfc86ece5b75dbfd01d49d9a963b4ec4382c8d48a72f8ca504808d2f8113e7338eefee164f01bf8a3601c33ebd46761eaa383279561e0df5cc6a82c857add67a61a976ea77a500584c538a14b8d07b638cd863498ebc010e834da2699310f423f2c85f9a7f6678cce9d11156eb7e61f9748085ccf8f6f8b2fe4a843edb2e094d250f24c244c8244e6786506579981e84cffa98398f90617377aa6ecfc2505fb865e261d521524874c62a1677579f02df7869cf3ab88f5a41959c3f1ea69fda323d829978df912b5c25ab2848fade667220ee487724e9f885565fc66172e5cf1344019fe2b9fefe407fc3df9657249b1e56c2241b044fd019575e5cae85ae92527c4def522ec5b31a8fa51848fcb3f95b17eaea6912bebb474e01a46add16f23a53a9995eac50af5e97b8a093cc36cd14dda1d3944af5e3f8da86d80658d53b54cf5d7a67e60890f7a0ee9ee7d0064d781c7c3d0627e643e5db194ca548f45c024f3e7ccf3622952d74f520f6729a8d912149fc75015a167e52c1f345077f568308666cd17bb59bb5f7acf380c64198127121c504110aa997a27861390e0add2c7c1d5dcdbf749f96bff9be7eec91c58a364f603485864c8fe6747c731ab480eb4b975b71fbe62536cbe0d959e76334445d0a74baadcb9eefdab1998b9b1cb43216a04bbb71d562464e9074b929a14b727709a9877a6bd42322ec8ab1546c21999c5d8400d48ab6bb5fbe4147c4d6cb3779594519b209062fc14cb9a3efcf5680ceecb872618a859660bdce4eea8e1f40a998ebe5291edb7925b51d048bfdfb4df1fd62ca556107c65d60c72e0fdff94ec92b0651a6ea7ca9a1086e12c7a31b76b17323d5d4dd2a3a17480ee3fca9d8604dc96819b3291652c9febf9e92a9d2ea1d2b4688c22b58cad51bdf55b749d75e902825995c94c1ea0efa7e99bc79bf149a58f053ca9174b31f48b613467a31672f3e50b67088b34d8bf8c7f6224e95feff8bc383b34592e0fad988d4915484a7c15785bb2127ec327b49e472a0751adbc1e3131878d44d5b32f65c05dc47d1767d4e5be037fcb92a802a95edbe205e8daa433af390547f594367413a2973439b031d6e45a529f9bc86f40c78c6fe016b69c2c50023a47246024a723ddb9213064c0307c2ca61805e56f76a5ed84720eff621a084a60c4124aa0efc2d487c18552459612eeb40ca84b060b801508e8280bcb9f0724b4e510366e05087ef10440efdbc050ba180ca30553dcc28d763a1d8b769d05e6949fa271ecd7f3bb52d16872e8d3c106f162b8bc2e77dd2197704534851e6ff04f943abfc229775c44961b3099c6bc4107e1001e7ba5b39e8e3b43be7d9b09f0aadd2f0f798a6f952e44d0fa2c568ddd0f860eb8033b6d73d8e68c07913dce97bd484c6d64ccc259f4626eb0ff1e76ffeaef3b7d408efc146503062242554674164d25a38ca8242055361e63b03166d61ad0bfef95c40f36c69955116caf16ae58ebb3865fa7786bfe17ba37f9b253e39162cb8b1a08098f5e20e8b5092a439e8a4210c4736d10bbe5fcb9970cbd35bfce939af296a580b40931853f286119e0d0605acecc474442f922b97965d11e2b455fa7766781c6fd7ebb4351e5282028ebd28cca0ef76283e676e7ce2c43a565f55ecdd1f1f3357c97f635661694873cb594bd14eaa57998200bc9d91d8ae351031239ed7418233db03878379e68aa59b4f5d52b5f12ccdd664061fb7d1db0b71ac5664280cca0ff4dc2a615a65c86aadfba25cbb5a8688f9d1d6953b1cc9f3acdcf32f2eab0ece3937c412f499ed8c0bd2c2deec53797c40b56c57805f07be7ce9c8150ae2e798398e17465503e3715f5e6a3ca268fa585b19e67e1d6e6f05ca180802dd84182e53c514b3bd4de636892a9f48395660490bd71ab40560b891e83a0f25207ac60450118241f9ce8c7f3c0b813a62b02a65258b7f682d4780b8135fa13595c51937e7a097d0428b73a343b320e998eb855482c61da0640e6ac6210d9f97e68ca3f3840a3ee0b862ff1b5bbba71b966a0d5fbe3350f3fd0f6746fde53bab1f77d09e82a48013c3d12c0fa955fb6c955d29cfda6dd72dfd2458ccb253f10c9d13363c1fa37e8fa37521a0c60323e60fc4e8a8ed3cbf1301e84702fc83d32122dc522f4518d4112ccfa5c57e7c872d6bd040398d41a350bf08a15a3166846a6abb4b90e61072239bbc12f0a13e3cd00617da1a62b200d6c68ce3f90465158556fead36eedf420b8d0230e4c487da926693dbf86f09480d3a9ca5319741d15f49b5a21d60ac8f266e76e74fb85271dd415413ecfd769013c1e16b38045d045f7d0fbddd8b0016000907191ced6b77eae10b598a38fbfd6943b203a5db83d39991fdcdce3fb4431dd094f469df55a0d5fe61ab794fa7ef139a307395f089dae700dc411e6bf3ff91fe15089ba237ea6c2b3ac01b425cfb0be1e3b0e225f153068d821df127573838c91691b5b39b5d002444c432c342607379de0611f1c5c1d5c8a7d937820786d5dd0122e4caeefa4573fd275423d0692a602be3c26248592a71ca4d5cf3b1fcc4e59f622516f79d4b65577ddffa5e87c9d34ca848325ee4c837296a7c3dbba781c99dd7e3343983bc96378dbb02c1e89a793bc3d382e63ef46a5545d6f22b3040209a7c25460a17c0d8afc3a5e7813dd6325859bd4e383e74296a8f7006409dca5472ae09cfc7db0fc22289da2022b0af8de060771574fa438968b8b593d7390b6c2de4f9e289366801c2e474205620dad21ec1b0e1c0709fae2e76c515d38d0c467aec997cee2410645dec275e342fc8c24b3a583c8f88a6482f3d821aec6d1d0fd913973c167b29188d5ac04f1cd77e6ccc5750a9c2b60fe6753f71c758d0ac36f96237820f1285aff6702e541b70314f1da6262ae0858889e14ec765fd5b6aa8d9b918a3c5598260334947e386a3fa36a78a52d8c89a615447cc7d6c79bc4e0bd9fc522e1757f8d0e7efcfdcc7e26fbca95453aea3971b0bd8629348150620eacd9b3ffe5dd25519a16efbb72ee1ffc28e55da629d69255b3805e53e39b9df102511befed3d8f37cd74a12a3d7863520f06144f8186b90d7da414d83cd2a5d07a4a9145b6f857a9cb532521eb510f1043731343179f341af8f35153860ef43c8fc21c54104254ffd767f6b764ee22689e8921524b424d1496b01ad06ba0bab676ee84bde357a8251eba66efce9a50682c0c9ce724ccd875f55f8bd8e1c235e73e5f32e82d95c61d4de29dbde5e7be75126f76c1c2ac3cbaf596631b25e22856c48f362f5fbe297b0c3e0b6ddd003223b73bd4106037aebf0b02c2ca6286eec46b4053970ec9c68b2f4b7e8eb0c3c9fd9fff2e94d2fdf2d5ca25de80ae2ec0e2c6929812ef5cd6f3cb0f00929e8f0d4990823af06f7e4869f522d42ba98698a4faca8c134725325f91acc4756871f22bda4e3c176bcd900c991d551a8e0d89cf56b04128b280abfce6c4f5e1786c186dc91c10531ff05727da91c178824b124b415e81a77bbe92aec5f09079e05b09c3b81649114ab742cc4c8b9cb250a952eeb225e478915175985b851257e8c1f607b36fca8311c58bce7ee4143d8c7a7835e763607764862216c064fc234338b139a2c828da2dc0fd3d0b2bc10f354371c1aa5bf9554ce9309d35a846575027a5733d754ab99da6893b9b222ed9397a95bab21090554145c5b352de5051db2b02adde0be9f9c45c5024b2b5cfc92965980ef2e83bc311b11e87bba92ce30b431714d373b93175aca21bfce9f6534f6a1e13c70bc54c50d2a304c58cc2569dbeaa62a3fb2634034138b4f25f130218df52c1082463885c34070ebf72e440795908cc8e7338635f990319a11d97d43613e1e5c9da99c8a1d71cf64424573ace51cae5a3842688f9a72c8c1169fbea412878d72135815962db032a0f6702283227dae63bf03e5c8adaf3d1c822e8cef25c1cb1c392f087390757f1281bfa320f4a721da24568e2df60ffb2c292092150e675edea28a124bf2e230c2d114a64973b43d5a8b4a88b475b39cd801db60a333374622470563a2739f4a142166ff9ba8afc23428de1084c2aa86df4c2c05b03d3c75ac28f4f8d5a586e9544be89c1d50b66dfb5667bb11e040fe3126ffa0f60ff1891b7b28f32b432cc5714448a334c68c6c1496022b90c174264dfb3ca04cb3b99d53c727e30c9e437ba79cae2f6844348c26ac35a85b4292ad704340008428a8bb24a4e8636ab4891754d14bf13c24a6acd500c060c39f395fa6240fc92506ff5164b916f267cf286e4def764e43f596911e521df24670b4b803d1fe803a0bbf807c04df9c20938f09b79ff12e5da77329ba864999cfb88560aca16b291b7ebd7e54f61ce5be1a93434105534114d78a29a245ce582e8600a995ddf7295088d2b4af36dd2f3d60a011454e19464212d6dc13386d2e46cb22641e461da5c4d66bdc3b8a99a9c46873518691085aa46a849ee839876467850738a28817d1e332e5b4ccd396bd23746989a5fe5781232dd05508885b42b0a7ea77b1d1171f98aedfcc94dea941196466d4897005d9d1a880a71ca4316a02c068220d8c62969d8b7cd885463867b4997a2232ab22be8ce2513c592f6d0b863170c0365c13538a72c17156fa5f73972984e88f372592c308c2b2eed4fb635883049c6ca21476dabc3f5333500640697ff84911f7649cacc80d5a0fec832e17c03e339058d0cfede78f67ab288d86f15db9cdd8161005bf556d582d524c13f02e7fbee5ea74d0bb50bb2324f194af51b5bea67d71630027f8c115e2fd9454d1cd35a857732d50edc932ac8d3ce23d8bbd0f15da74645a4c101bbd88cdc68ff8e06541545b00c31d8af36dd4a0bd84d03e7567aa73cc19e7aa26420c50f0281146b6caec3a0e652c9aebae8a7821ced55ce6ef76da3967b75f05d70a5e4afb5eeb49351010fd9875906e7a81bf18b2f5344aba6a0d70f4036cee09e4c6bdce6cc48b650c49986c473d9bca36aca70049a7258210598c1e8e10ea31e9a6248cd405deb0ec9eff6b955cd43f5881f389cb4b8ad0404e51ef36ed8e55c389cbdbf15a5ded82273d6e48a51576e2f13593df96c0a8a3e4bd805bbf9fbb2bb0cee2682328843445f3bf83189d60aa2a8d473034e46129e87a0555392f8523b17068bdbe5d954315242ed579a381e23f4fcdca408699601ec8e857f8e47266ca2ffc39d3a81d2ab0902cd5971ba8d0458ec73f3346da793c844658c920711f2f839fe8c38889ebb4453c425ca6516530be7e4fd4c3d0784973d0a9ca7d804f0b38a337c53e8d2f38fd87c6e9df4d472f0142cf7bc2773ad253a5e1dbce5db9d417eb7e9d4b7926009e51f9ae2301f6bb0ba1fdfdbe042ece98027bd4e84751096f08fedb007eddc0a6e97be132ce051702a03fcdae8b62f06e8cab50bbfaf54b77c7fa7dda9966ef9d4871afad8edd0ab238771b0e0b10a32170e6054d2956645daa956613074c06edc1d104731b3911ef72a047b5fe948a2c8fd90b0549de9636f0b21e5950ed696b83885d0b394d7cfc75e6301121fd0b50467279c99c5020dfe18174a801dfba807b27cc6baac52fce11505c0824c5afb7e5cb51182533e8f6dd187c9ade657c8ce1e3b262a988f7c7bce7b5472ca231bc887b671b34bcfe8dd143d9ae7b6a75e9ac52cb266eb20a9be114a90a977a2cd4ff50a8290e9cf3c2311f70f286ca4d1e3478582e43e913d03d77dbfeb4323683c9d854965da2e46c3d06bb84e1d23ce05b9c5a8bdf0cd8f8f274c7895324b73091e61877e5a3ec6def4f75cde0ae9259b289a92584384ea6d6ec5b2dc8d46a29ff554ba3a77f4dce7c04bc23fe1769f593ab0d8b51efe236ccd76a6f5a80967fe91f0260901f294088b13d1f8462da140249c7397803f0958296af62662d23bfa89330e26816fb2a34ca649eb7ded8963d7b5de2972d54a80e2506f64eb36090cbbc3ec29095ef2c44b38a5871d83393f5db6caab21edded20f411892a95b36089b83a503edf022cce1d26e9bb85b542308eec4a4849a3a3f08cacd0f9612e16ed7f218ff530316267b827dc38500254267d7bec90f71676cd142f72488423e9581ea771e8b05f0f7cec74c064004d93942fa970883c3c79e6bcbc43b39d3ab7079f51277f828287da63050d8e22121572477bb7648d1e677c3e5d4cf24d85f355319d626f484cf5754246161bc2f2e19fe3e9e7d6ec9cc06e43a03da606bbf5a64755ecee208199d753f98e34dd21045f29eab1eaf40479c842d047e4626cc36bef70ce3f7d990bc4931cc711e5208f1a1a5710e24033d853f486302eacee881ba13b4215115783610757b74057a53f1fd8eb915bfdec6e96923ddf8a6b076c782b100ef06f5071839f225eb63e6f9239aaf46a6061f25deff65783147c254a89f816e2b3bdebd63aeaff3ddc115ad195ab11288f2dbaecc996a209516657dd77f7dac712d657ae8ec0fae59df761dc1a9594b6dece96841af0560f49f21200da4ecc49440796de10572f8917ab23145bcf43b80fed7406e817d61f228a5b8b967afa14bd46bba88d1f86aac9120c6f365ae60ad32fe0eb6af87b1412d8c46098c41581875837f0def9f1d7d9d06d5ad90074bad76d3ec09b872e5240a7ce921546ca24b8b567554e424d71ae264f697c7f0cc51fb063c59a02503d864f5d7c20f2c5c9b24faf23cd97cd65fb0b3c591ecf7e28c37f1cac2f9d4eede319758688fe8149c0b45263a115a1e1e08a00e0669ca6c1e0a346099489e4ad5196a93cdc28d012d7718c747bd1fdb14b51180d0aa84e0f5405e4fee0be5b168a5554caa00d3a0828d875e513e446af4ecd540800f5cd3455c84f6e60938778a5a41ba355f26964531362a281e3c8977caa5c6bb25748e6bdbf4f9f5f93832acc244f27d0c208090a141b926321cd0b2cf625011db2f3cf1ec6cd175f4e5a344f1f8fd409262503b2ed334dbf6fb2aa249f54c553c0fdb8de7434876a8b60475b5cbe424fdcc8d196320155177e42046cd2aad15aceefc6fa196dedba8ffa2d6e620660e6b39d24cba9d84fe5ff02a9ca5c91f23afefdd0e52a4b9539757d25d85d27f6516e894687f34bacbf979d30855bda150760499f2232615af5552559547b091c5f27784d4ab240ec2161c55fd9368ac4f0a01886a5f6984f0c67664f6f479d821c2fcfc2695bc3378353ab7d0d7334e5d5451313c23be4db267d1360d64a05019319ec458b330ca69208b05c385a20cf110a7053e6ca58edf4581b40b4ada76b9eaf72fd091d17a543377bc378287d2832f6b86664b4baa15357a83571765a2ba9642fb2df9cd072bccea94d15101ecf0ec2ebef7066c5d823e6be7023a22718e30bae37eb0d7e540fad19f6ec4e29baa157181b4105bf3f37ab03dbb1c16c188fb29cf9119dd30e53f862184a485f3e0e93947ef5b6b708ec084984da302560ac9ba165f7520615f04209879ac8f7da7be4a4a07d6c892fc69c59e142befc3faa232b12fce8c986b374e5aebf281d8621335400e3bad1e9f560acb31ec8df0a31b210bbb6c945fd21e3c23f67cea29f855e903640a45a6d8754f812e477cf048da941f78971a4ce56b2e07cdef6b672c2c6ab08fdc26e6d1b199025c3fda3df19f5d56b1c5d5132bd03c1fd80668ab5198f0f73aa71e27ef814bc6011dff4524dd83c8731e0f2b2e9b1c3fa5d08c7ebbcbaf84641df7544f2888c6e79f995d15f52516c0a9106e59c1e3455085e199a5c7298cacb7341604e90c1060f2606c8b1633b2d4bf8dc49a0e8fa3cf90bafa15ed5cee05c948e65796f97b874e172de0c87a82cebdabf010ae4a3171de15fa0476748d202b3efa1e23225cf123bd46d11f0c5d3500fd4a862b8809cf55d2930d7942040c72fea94dd320cfa559bfc4f650633a67946c8b1db6ffaf106030c9d6b19c4346342317498f4bb6ef21dedbba5602c2da1b290f8a333cbfa280f7553c0b0937d51b20629d65a9911ae7ae5955208a8998fc9749a6bdfe79278adfed1690c4d7b0c22b09281ec01b7662aa7301e45d01ad97906507423775316da33a7250bc0258971d94c8680b69034cfac2b0547f80a9fb8591204ed94cdc0c94da7043a5221833d553d84168ad8bbbceb306d7806b6d7070d1a066f2750f4a256744d2f9980259e19f73b6007a118175342e885184953b875c4a73bb8a07c4acb849d4a91d4cb73340d2fe97fb4404633ed6f335a16c0b8839b5b2063667aea84e33a0b802bd4d95c24964cc361ee5b36b23f308f78e5959857a4847226f68e94b853611462449511a37670c062bc39a11ceeff2c89ebc9857921cc481f84599b5398889c7c7390fc48a6b7779476f90d288df4ee0af91b31b0d2daec5199b2f6dc03dde6af1f33fe9a446364df59104103acc8f78511936224e50439d842154c7eb8241ea18c04b4b1a33ef0ed79bc4b48ea33bb1528d0d0cb4aad972c749eda77bd08ca793637d4574b88738328f446d47a09fa441b6c58907e4240cdb2c68622fec01c5ade4f44433bf70b32549103792b9c0f101f8199101afa644bf953940bc084cdf1e21ffa98af4d26c422ac3b629cf6af552fd79b32518c8b25c33aa5a84c9bcb390fefca732238caa09172e978a780176f2c20682fd87dffc3fb63ecc4187b964ae10561e32653da6f54d0bfc1b45a8da4c190c83538d331c8686ac63a282599512c0c3d01c956065502c436e25e99d0b558d003ab21ee3bcc673f4a5f7dc305173071a8dcf710b7432e8ea05605a8e796ca2486b7226574ddb8d170f149b4cde24849a01b1c91c597d1525a5ab67937fbf073ac3a45fffdf0359fe9fae04fcd4ac4322d7568615f72155014ab0ec97aa6b1b1f3dfba7089813c22263997cdc5fef52748adb4f5a5de34aba52cc59273a6c27eee587c48208a394becad63bb7f29c48c7876de863bae5065ed0c612b717b2002283df7a86bd3768b9f2e7a9a2e10d2364eaa62743e54b5fd640f54dd9d41360faa663a56cdf5bdb4a3c211d55e36d5ef64ca3d602cd4bf1b2f8eba7c2c544e70d9a71bce9cef4a5bdc76fab981de76c0973780a0dd6bcae75e9ae7f22f146f793f01ce7950d69c11017add07e862e61107a45baa9e4b479fd52770e5d530741049b67f76884a674263ad842bb35c1351eaa144eab185105ab01b60974cccde007f562cf5003a4ce445690df0f30702be56ed1b9940eda95fdd79c0ee6e0995e0158c5df16e8b250eb227cbb5947b001e2bc46d9a34a10586d22760d9538052cebc789f6444c2e6cf0411cc2c98a9857e574ade73080aa5cf630dac857d3e5d9f82d216872948c0775822433c1a162e740a9ac6b3b0d8644296856b0aef4a08b4111900c13692cc04858d2088d51195997982dd46fb065563b36b19f60bf2ee54291e1159ede9ced4c33c7bb4a3b68be0d603e257e798d341cf3441b588d067e96b15f167bff9d3b294a0507874bb87c675db9bee880d528b4bcdb8a1c276218258c4c03d81473c1205aee8ca604d1cdfd560089f393200e40d233f4622022d937e3740a3751c778332ba7d254b576dc9b5fbe69548478d5a5efe6509a4eec8944a162e48992b85489ecb4a63d621f344a47857bb7a1eeb87d2d18b60f401e48b138761b38847df8621c12834e8ea7179fa1cc7c1623883109b1b64b236f4bfe65f8fa53250e4cb42459d879e4083b62503240a41e310da313954b6d7a14eacd3811f1c9793ccc9391215a89a4da257dd053dd905099d6141c67485c30388f777a0727660241cf7be8bdf81fb3416f5a4017d4d400f57105955177d7f76f7bbe9f19506260cfc44b6298ce8c2d885c17284fc557d13c18c89619d1de4952e9e1fbc9dec60a8c37758a77db813c739dadf9d20fa772b3f24c19d021960cf8546a8dd0f6711925560c9fd7d23462a3ac29f388f76b873bd7b7dfec6c51628f90aca06dcc8ae08ec7390ed2f5b1027628a1884dfb56ada57727f38fcdacd1fa06c98a4edf1408f6bb96121d37e6918faa0a75241da2865167ece3245b08485c986893b9e40b5034b7101561b6221096249922bb50e9c47794ee801f627d6cad75a59460699fc64142b4347300ffc9fda31fe956c2b0692c1c29ecd9f456b9394ff4d5518c681307f0f1688cd4292885cff64abe224e6c30d9d8b0cdb77c1061a304a2e495a640e4f1599c9c0da0e5f9caf2446dcd2dabda880fa27197826f49f2a633722e8fb0a5c44fa8923e5cb662609711700b80dc7c662ec77c7935676f54b57ae4b0205e79a2fb4af810349c19cf7f1d44b814565ea293630cda9011eebe3b31ce60eb9933eabafeddb15356eab3105648a180c8836e6dca74a0be54aa8e716652314f199467d7965a65f8f8d3b2dd09de2d1ca08a9d0423248255c80d35f733c6df9bf0208e5365e821a581b2501d46771abd9ae1289e180a8e37a16cabd45b073e932d53d4ad6e220e086a73b1c6ff3b7b6652c09b163f77e451b33705f426f65802780b76c405c168cf1692d65e593784da9f801258f5d4fe0c6504ddfc0d6dae2f9b33fdb802641f5966e0754e1b43d1d9a36c472028f9689c6b0c4cbd903435b62d944831231b8b33136aeb0c9c5d0ec33260da2b567fab7283194b3f3087440763cb8fa5983ca00e2faa4551ef02f34403d320704a0ae4b9a0de12646f72fd275ab4cec1371583c61a1e6063aab1cc004098a1598607a9429b4785a039773ad6dfbd82859018e5007dccc6e738e3966fc824f546e7f879480b348487ede12b350f7c2e953ac34da4fcbd8cf9af7214c90cfdba7e4e8062a2f8f4f321e7d2b2b1bd1069db8cd20fe2ed3ac3274f53401f0b9868ee9d1b0474a47b754631fc335bfe30c4272ac147cd0af3619135b6e85336666f365a8c837579fc7e3f32b436dc2503827605cfc8f4d8fc2a0d12f30924b9025456d82426ac3821af1487cae6971600b85cadd18941f66e171b8b3deb4f597d55e557b69c5aa9f5cb417f1f4edf97ef65fd71c456e772500710568fbfa57a95e04b8ec83b62b7b4bc837da72e68c3d3c24d463a6a977752ba56159b2f1d5511c372a02dc98172a4da88ff19abfc2220938f1cdfc30663c28dadd16caa478dcd2248358c5bf42b45e970c5793604fa29f3207af430e03e47e68040aeacfc72aff758c306fcfb933710791f1d931c8ab37b5b1785e9f132f4aede9b452bb6861dc245c331e64337dcac736c25c773ceecdce0b740b9e0a6cac5a9a36bfdc0ae0d5f7129852d09f2e2612ab8baee255e73b6167eb0f640ebdd96a6d0833857ed6f55c5f9244c5be5aac762967e614446e952950f03b755178fe81dba1d3c350c3039a6145c34e90b614d2e6fd7164953a4d0d38b2d4e741493155d4b5bde455f4bb30c032707bbd5fb57ef9b01f58f7b140f1797846e37be238aa310eff63329c4f4bfe31c78bd205bc8649684aeb355d9f2491099a010445949a67b8cad73c9606c2c1bd100dfee18b089de625096f5cfd7fca0e58f2728c464c20e6af2a5ce8956b5ada73d52abca5a9c19fadbe0a9d47390e3304211ec1e74393730c1cbd89136ea985e966d6a38de6000fc1e67b35a8ddc4e74728f30934349c031b95d2b6c5457100f177ce0e0537705f1028272aafe6c888f8a7c93f30d32ea909c6f06094bf282fa832d29119ce8a950bfe601c545c0508af447f82ef1d0768f16033ded550b8925290b74a850f836c2e89e7878d7f483a96444af8df9a7dab002d0f52a08554eb0d1a7dd9e5aa81cc274f90d00f120ea4f7a612b9002cbeaabadc711fb5d1527a0b9b904b33578a4cead8d164eadc31c1fb62e75175afc3f24222a2c1b84235044317cb0258f1e75725e653fec72b299ed8e63a294a6eae57b48cce5ca37a4210eda490548ac6982849e9dde5542922f359ab279b259b9ac0117e845dbd601aa0ac97c6216926fa430e4a6271a58c8123513e3b05c6666d84795604159e4e815de2b986b943fbc734afe2db5a80e20a24b8455e1ad4beb316629455e2079aef9b0a9f80835b50a2a25cb89fc07ade1fd3dcc8cd3fc414674ba26bc641969b20287cfc73ca6b5b05ead66a07cf377f0e7dab3a46535cd552898bb4ddf2243cbd6fae3ebe35c81ab8851ae19ca5b351887011505145bbd2a7140038f4785a7790707c41104d29b09116ce9ca0c029e381550bc34d5bfdb6c413fe697ea70ced2516fddd799aa2917f27392d76c8ce02cbb0abc7cf640a28799748f913c29136a639466050843e3df44f1f8523313142f33a667362d53a2ad00eda4669cf49acf0d678a205cb51c09ffc45105ec7c0e50ed270dfb79e12714d2c9f5c21cb753f5f8a947631ee963bbc4f0e015e2f158c44d30dce72aa2e0686a7c0652e2146cea9e3fd59747a230f6498ae1075f1337906bdef4d797e0efbcf9a8db4d41004e00cb8320cec42fd0c5fab8384a039b14de380f651b6d6c67741b4e5d963f023747178037a01ba40afd138c0b2d62754ec91c8207e71415687a383dff707a736190efb3ed79ec6ea2621780abb0fcfd79180f61707bc865906d6f89ff7f3e325d4c73d7fdf0ea741a098347d3f57f30d869ccf83500f1a06d32718dc2316637d52a89c2a2ed05caa1f4f2a9b4e8c6098867341d4fcd714b25276b292b8de3b0e8c4b49debfce1d1471123571488cd872d04e73f09563b81f19cd72e4ac25ca0e0a99f7944c6b2c03b2419eb9a765f66ba47c5ecd428d76ae83033634e73b552a74edbb4554578b530aa506cfd735ffb4ff2db850772b6945dfd902f0b84b8ffb147d73c4a892a0ad64878bf0a2139644a94a77d25a4edd10323c53b31ca4230ae943f21134c22925b2f25ba6020b01f66807b5c779b9e01884abcb7a4cc13a86a09f07332e13d09e86b05780d3e2017bb5900346ce7c14d42d7e25be9dd64c8921fd299fe3deca0ab485f39a0f8c6c87047181ab936d4abaea2e211a74aad55c4ac4f77c76d80dcc1153336e165c50a3112d7056831a01b00af5591ab6c5282ecb9e48516d3c05d8cfb83bbf749badb20fdc0f11fd3701582fd318754799ccdafd036c40b975409455d3eeb6e327163eff3413506fc2a5102c90586f7ae842cd8c46b456e372ba0f02e22ee2780d1f05e6681e4af5bc9e894287c0b8c7ca96c75892ce1b277870181fbcbd92fc8f0d9222c73cd554340b2d52ae58b18714482dffa3c88dce3d83c9d1ac876147a2de2a622ecc45a4876b98a68e65724a80e1c2d8a1ad3ead22cfac187430e4ce1174e70419b21c73369015cc298dfc1be062f4ecf080610f59713e33911383114cdbef7655af5c7cf3554ea920dfdadba646f597a2384cff2b3e882a101f336edc299892951e775628ac7f3347d8be1aec0e1cf9ac864a9c75eac76e3568b286516deff0dcc2900557cd07bef0c6facefab59cdef6c287c6ac1f83b25dcfdcd46092783d328024935ab4184b76729baa1120ec816fa190371d99f282c1c09fd3c2703cff9b793b4e707218ae92268ce93dbb74a9b5bbc4bfc5931f79ca32c5a76eac3fa8a697e43e00bd7fd6318968327bcac0fa96133a40f0606744df63407138c68e175197ede47fd0700a0c3cfb2e62bce6ecc8c1497c53f7f559de9159cf865eba3b7c70b60800cc5258c3e6e1254f074633da71c1457ac5b9b56c8ae396bdb9b0d75a6d9d444095a3f0e5eec2a086a59e5b8d6c90895f3cfc956d26d40b23a30bb116a573b1d2fbe05abc081746c031181285495b0b52d8fbb918021a7d1adea79e688936be14191a164797d153e02300727409506a15749c362a8912c5b07fa16f4062f71b4645339d5fc386a116cfbd5e9ee04a2accde0c2a0eb1665df6e87809c03baad6007adb9d8e3a545578bc2688a7c342a88b27d3ec5ca8124a15449a259bbb78585806b0dd6daee15570158bbb778843a290b62434a26783ec81553071ecbbfdeb28e87215debe677e7778d487fe31e5aba689fac99ce1d26678ab9c6bc5b2f08106201146a5b3493bc1fd37d9694f337e7fd08377a80ef2105ac25d544549be2f3b5d43c46c9d8f376807f511a8893dd6a28b8d46ce70ad03964b9a3aa3c0ccef92a4b190f240b417ae5d333f3474e8632b2fdea00319bc2cf6912c602a1bf21166652d28ba6c96f77e3e01d6abd79e247ec94e543a9e2a6d1eb5c434307bbfa79e90b108c9e26a18ae0b8ce6bfd48f1042c5972558fd8a001b77465e41ba5cd67ce80acafd4196ddba57ec35a1d4658bda3d8fd6677d3b70120a3905590884928c2110b268022cba6d0727c2750f5472ec6a08cf5153569f55037c1f441e1d206e1fd23a731ae16d4753f75441dce0c38f033c915ec70304ccde5dd182d575990b3763b811d2d7a2372db496b4555a1728f650af269a8330c3d874bfc98a73d0386b614b8e7f2c524208b1a90c0a62d7479437a1b4bdf51ef5a22f2bd164c5a2bcb77e417dc529c2a7804f7b0e50167e835345d352848b252e44cabeace10a8a996552f32cb1ed1561cdddffd09853f444cd66de3d95a491e817c1e678d898500618b5e4432b4c47f890bd52a4761fdbf8a51fdf9ec92acf9c2804ab27d045efc5c9b782fb1d521177f140163a9cedd995a0ee92b182fc74b8259c5f14343e322df03f79b99c96557803d92a2807af3fc836e4a255c6328205ca9d3f1cb1d8f61c5b8ac5f7564e6a6b5d39181adab99233ef5f64086a4f91b7f40bc3bcca3c087ab83c5258b0f4cd1e3c771d83165c239a81264359cdb0006179a1ad4b3dc82cf7180f4949496ce98e325520931105529ff2095df9a5f35b8950f9eab355f6ef8a2c26a7ba2e369c6ae797b8f38e7a4253f2be9921ece710f95683c0264b3115256f57b2ce7bae92200d946e00ba5bb4188bc8eedee689020fecc1504cc782fbc0107aa32e01167c08744580a960abfd711ca8534b0926f99dde777f9a8c8b4047714a6796db4584ab9c10da3de7717f50f72c8c7bbe889811f9247898176b5e3deed8589307481dc1858e880353e6e51859069a04cd58e4e61d86b7a5435c581c273a85c0c5c5943e58e638bc3f9024b1fdf104a985ca032316c32396778c19f366611e699060ef7b7110d5a38dca6c4d2fbb404ebcfda10f7183331b3dd0c8efec354d9021a3aa9bd5b4f36735e15a00771756bd8d19ff445188c08376abdf6c2e2c2ac9ab0846baec622b5a60b74bd57988b7a5c54738d14bb9dbada267fabf9042fd447457d330388cec1cdd98b2d49d4042f815159c256ddff4c7c07601f01810ee6ab119d2e4fc354a4ce03c023f1d0d790f93ae372ede2e7f586218b9065b74ebc7bacaf610023c96753dadb7563205a8ffe635e9ac5b6f786717f20e5e21e6003df50605096a92625eb433d15100715a6468b47bbc1e2dc39766b44d3312792c9bc599b456f49aa76ac09bcdb9f0542f652d8f24bd08c6e9ad8fbc9ddea8cb95aee5bd91e2b70bc9c7d54553681f3ee7751752e04b2a484c41c010e800887414f6f5f6dd22d813f96a7f4b2aca0ccbede88fe7c7ce78b8c8ed019bccb53352f980eac11f771db1eeb4edb3c400a601f6815ce4406abc5c2750c8a3209b77a0faff81237e15e5d8bcadd0c0b38660939337f90f3b80c02962125631db7b514ffb29634253324aaaf58634b57ac66f6555150dc95cf7f03087470b35f818aad8195420415e771cb3c541843db313eab955eec55dff9cf9a5ebf666ba04ee0707ee136c77b76ffc76b7f285f233f7243f4a9400a572b495b4d9e1cc184e7f0d9c1d7b7867347f481ba67710a751918672bebbf920aa2c9e6fa63d01080dd5d46857486ad2b1f694f00413f37218b779ee4f4315f0f054dc908e13f1d3bbb7312178dfa3a6f9de585c1904ddad0eb6b3032ec75f293c84f09b845ff10c11224c4873983ac6c077c578a2683b9ccf55e816923183ee526c265f3a1e33f3ec74069631ad3b1a43966e9fab1fb23b201017b58b7057b0ace2a3db49a5228d00271d1559a6371c7b182cdc4cfa9bf5ba9dc988a65731b33f75d55179b582d1e4ecc4feee1e1b186aed5285eb4e8430837195a9211e22d5efde5887e9a38e7ea0b9d91ade71337b4c8ca709c1660747f0a8cf9ab2b3a78f9334771ce24f5091d6fb7c0f2617f82debb2e4c7d10534a94ba2cba228f882f389c3f5b1c65b0a276e0c383be68baa38eafc1e103e4cd273b2d6336429423ca096d8168fde16560501a00f6ab5e4a30980c63359aeb46b8add9cc9477841f98fe14dd8c80a7cb25e8d02e3a935f9408ac6639f042e287405c7a8df3d6da39baa3b558358e297d0b004e874fbf35125dd2c7f05209676d9ceb864d192cf113f91762195738bd9f2454c64f2a3cc051e695e9319c8806286ce8a028a0b31ff07e65e222dbef7b4a56e89270ff455c1fb5248ad336853efad7b59a03b6a7330c2940c6af3f56a041a97960c9d37b9b025e0c9446e08158693d3b093c4e952f953e6d983ca6b3f3148a5ea620453f3985c69ff07c3f875dc451cda4909fa990e2fc34034746c3e43c96c1f6e5fee48fa776219a4cc2cd2c9be0f53bc8c489b80e5bdb30493cb44ef6c4b6285e6d6262a70655980313f876687325daf4863837d6e2437cd50a6e97a9c0773560f8e610d0ac3482a061acb7433ae6b443708dc63fc8451753de388fd4eea5123a9e9a7357d473b3143d216b9115b5ade3e7f9b3fb53ee83bb0611893087a6c103820281df3020b9d9135058d47f246fae2ccd39838757a4636a2d333e8ee9418bc2aa7a3b6d8094cce435243bb8fd462dedaf0d031a2fda9825e67d6818a14aba24062c96e90f291b53d168387feb49280271c6cdf3873f00088680d0ce9af8b05cc6f32c4aa248a91a94ff0621ca2dc635eac4b9ed7ab162938a186d0225ad4b9827d8cb8d5b1f9bb212449368da07066470ce682fa7ef8b995673e68dc308c1014408b089290e9ad0ba55a7da025d51852df51daff77d82ee4a7322cddef377d8e2254f88e03ae48837121f04f9559f4c41e52ad15899440c88d0e6f658097b2f967c4161c850ebd2849a68613e37829423b94a9804e69a8db4209395768ffc015388b7629a34793168c36343b038d3bd7a4072caa9dbce65811dc325105a4a6ffd208ce69fef7e8d379773f0a6ccd17713b5de2f015e4dac5effbefc88b4a3289015697da2a6832245ef62d2dab6ce57d6d501e2045cf46e5a1b7f4c4d23cdbfe15aafbe7cbd753e013dec95e133b1c5f041a7abfaacd4c330e818bf46c81f2adb53d73a1f71f178bddfe536923a1f9d1f4c8daaf16c22e782563635f4c5d8c8455c84b334f06ad9763379d626f45d0320c105685d84a92658aa827b695bae3b445a85eee63be8f7602ba3d6c6248a969d1605f9ba654e450e2ef8dccc53f98e0177522c47a419605969019cbacbf0a0a792662662c35b4e57d83cc99ac512fc83cc004669ae7ea858654c800ae350a4e4f151545214587b263ccdda0d07ce308edd9c529f2ba4d260f258c1177e58aae24d0b7170ab1971f8ef3d58ddba7d56b4485faed110115c3dc440fa67f494837eb1c8db13138fd993ef0251ac1a92c3f3b6ffd0b5c64c3d47afc27304cc021d9dd8841ecec0b181362721600ce58e9dc7450fd91aa1112e2ea13d9c2fa221f4df5bac1ccfd6ecd1dc1bd0adcebc899691a4d7623254c53e9366b3c925c8065824ee1710f4541433f9794642a9456f3c38dd684c60ce6c463ebd9d478c5ec6a4f5ced795a91e7f68b57b64db61644d48c02d957ce2254806dd0b807e3f5abdd4594a6b2b84234699fc097d48b9f72d6eb9a3a371511f5158822578b9ab5185327512581e7e3786e12a05fbb0b418e55f21350244cebbeb958617840180fdbf9ee42c0ebb4a7613f5152695d3cb5a3455b98368be7dae285989362c67561ce5701a1bbb743502868d72100f6d462098da0642c98b1fe76790076318cb2ee4b8021539ad3dcaa963c7d69c1c4161fe645a3a49ee4c803ad8fc3e1e743e5f6fd74a5b409f17199da43477e5d4fd73d9de79197f825c0bfed9248509f0fa4f9e8eb65111c8a8a2935d3427bea11ba5597c3311fc824aaa5b521adde099f8d431bbe1ce4b75c266515b2f9615084f8959819e55fd3fbca1cc684aa98629573ea63e6e89170c69676af6afe8d885315508b53f229332ecfb949398b2fc0aaa75cbd73809c1db38b2a17e1a8bd90c5fdf1fa6e0744704cd93e00055f29025c367f88760627b99f29dccd604f80060956a53a5c232d01257d3d538ba1703890e472647858ebfc4451026666366f6bfce30896b1646df6badcc75d7f99f524ef2fca33dbfed8916eee78be7306b3909e93333b77a28cc5a3f83ecf41b6ed07ca511109e04e2631892649eb3a7e7e13d886d8003d5adcb8c15d2d099447dd40851e88e4dde9ed757b61b4a81fed47fcfcb74039797f066be1f8773badf91e5a998842f7a45ffebdbc59fbbd3ecc9f70f0de08563dea757c9f833e4f20c56b26cd720b5e0b16dafe669e46048d5682df5c2c1033387ec38983f79fd9d69c86d6fd0b93acea4f8f276f18d004ce7b103e28c086ea8e710fdd5f46d9c6f482a5aa20599abfd405fe1cf35aed4ae6abcfd45499f798e54fb94db000208074175bdf585e36f33eae8db3e34d8a1c7c90bc18be08649c84becf80bc03cba402cc47a8ab9a0b177427cde4a277a48f08f622fe78f6c2a1b264ca8615291da4526c63b20d95caf7794c9bfc37beb0115efea1872eb018af27b10bd117393308fb9de8025243938efbca4574b34c43a33b2f6d2802033b16bec7e65281218331cf907d268f5f67e028f250057c38cd750aa5efdd0370b4a7f972142d801758b3de68c471d43518dd9ad5f447783172693d351998aad9d073dcb3839384509871a715048628299572bb796a0a836c11d54f31ac48b1d75edc319fc4ed0974c51b2dd88cec432f28a84460344bb1f8dc9e574804a00f54f150264fa3c26e123d5a4026694a410cfd558f1c9345c9b68ed82c0e70d2bc163b89da53506af8ee1eb7f60058a93564ff3ba6fabe7f535191a4e8add1d5b5173be48ecdcc048f9a921279f03660f3ad49599f3c90a9018e767b6f9340e52090cdc09cc988792fae7883fc5b9a0f5c9c3420ab077f92a9c5f56c89317c26a502d5fe465d99147270a15d0c0911eb44f9f0fed4d17b5d9b0387dadc1f22fd8723591a3167063bded3105c89475b82a063fd16d89798f83993b236f8fe2925aa4451bcaa4e8f6a509abb099b2c5d77dce0ea72a304bd3a6e4df0bd74a0ddf706fada1ca8f1afe4b90b26051f8b0a6e88931ea0c21e278f112d80044c7266df00653e4cb0cb3bcd27871d697cf7b3666916665da95f26eeebd9c3159e8963dd152ac0a0501307cf376191e50ec6c0a109d12375798ec6ceeb313067b86e7339d0d796296e5917012730b37b64a18f3e349fb839758f9fc905bfda8bc4b8295ae5b411a4f85980adffaccb808890fc98add5f5f0cb9351d37f31ec3e0ae00ff843dcf3d93c6c7a39532e55ee49d428a23b469bb01134e8cdeb1d1b88a01717031f7010b836fd52e2638171a02d8758518adfddfcf80673a2b2c2ede7e4dccb310b783557a86a45000608b202f3e2f6770b0823313430f5a6ecaaa13f3d2f1cff4470fbcc38271a733af126e5d34a72e1d11325c6d7963dea49d8e2da84b9884963c5b6e0baae05488e5240b3083c03537bd623c431aa695109cfdd67007534f473a5b0242bb674d35286c207d72656d339654142e9e86dc0fc2cce08a1c01eed72ac1c205d525e8651b5a63724968ae7e21a98608d473825f608c3b17131fad831a5ea4930075054c28358621941e704b9004985ba1148ea8662e369e3f23321e3c3fcdd4f1e39f29948843f4fd5f70ed0fbb05f1a5ca9e7ce01f2cef64c23399883975e586bd0d1cc77bfd64ac199bc44f03cc2801ea1cb3e9a4e081600fece918573e037569a4533d20ec9ec2728b875273ebf0199c7f05697975df538ef0c0c9347ad25ea866681dc181b960b168da6f9f90a8311a52e091fe477d33982f46777d3edf1a0f587fd9db7113b51f3eb266f9198f0d059f89be05df208efd70544ed0c3404d520b1cc1454abd4192225e1ba4f784c09eeec44716c2bb1eb31fd5e043982e0fd42b0286c635ceed92ca38abd1abdb2ef8e7bfef84e98cd0512e49fc130367ceeaa0930c3d2d103a26708b0822137446ea8d98fcb146f150f98fe56d4efb65d174db057d9cabcdcbb59757b27f18faddbaf4650cd3003a97048457e91fe141ccc3f3f09ccfc326150831d1e2085fa577d332b8980a2367bf23b54aa49590708d7406afcabd9e6025632976dae7f33cfa8bc371a9957d90a8310354c11e8d5b1c4a8e6000e6043e828641fbcfab33a0ca31d9ec7ba674fdd538f597a04144efbc138c3c9abceff8aa7866305c62a436d73ce6ea6e499a8cec66f4e8454887708384b0ef9c03feb540d6f80ef13e309c4665e5f265e264c00a70464c4d739dac4634694e4f5d40c4ee7e5c5b82220d00ec4983e9ed857bf507bf43732e54b8f0ced32ca39493eef7ea1e185a8d1a3620a2a5a3968ee6de4e7a8afe7a6aa3be357307a77a43dadf8a9115975bafb5670e20e27ae837e4436fb42d39de92fdfadbce874126bd6710004875db9672e4c36d1f87db441b7075c4c6df1ac9613d6b13104934f307051c5c9f9c86189fb9f3a47c89aa9739946c120999ebf965d7aae9fd4a1a70d88fd1faaa168eee785e8ddb34c2b49c48d9855071727c5dedf27749cc28b0674915d1d45adabfc15c02ad9548dece2c083df917925c00bf1eadc4a9c66ac593dc3c4b96e9d06d8513b8f76b04452307a90ca444bfbb19d463f6fd31139abdb679db8c739207465417a59b0079a104d47d75518651af49f7661858f49d344ecb34a3d2a9ad296d47aa2f7dfebffd5df61c170117586bc77914529536ebbbac95c40434a603aa6f0e7e593090ba4a07a5e81520f34c66d0e9c6cbdbb0d2672de0272b5eb16f1093e5fb95350b2e5d5fdeeab05195a4aba5fe22080499d66118e4c24442f47ba06c97aa479fa8fc31908cd85ed878238bc2f54b42f6de7b4b29a54c29c9c607bb07a8075996651dd4f2c976ae0bd9e95684bf8a58975d8d524a29adac74697342fa26a1430270e515cb1f3b16e04f67a155ea178a7db096eea967f84a7d0682ebbf88a8f521b7e0d6951296c7d4fadce4420dc562aab52cd67fab8a19d3adfaadd68cec82f20d6adb3cbee23df5dba9567b05fe34714371119700faa85f83803ff5a7f7350d6ead95af742c4412ddb2b981f5afb53e5781444e2011b378b0e1d6196ee5176e7d165a0836907e3358646c17623ea35b69adb4bea6f5d65c097c351b5f2c5ff83119d2377a31d65aadfdeaa5ddc53617f853fbd53df59b05d047fd48bb4bb76a3bc19ffa36be58bf5f3bddaa79ce10ecfdb16772eb15d853bf56ac56beb29ac13a130daab0f4c2d794215e30c58628565ef89a02c48d975aeb6657537ad80690c3972936603b4c99a13e4d51e206a003930f64b601f0c0e4831773003b2cdd7869c1e4c2d2b8f0450395fb01d12b3444c1c2aa2e7cd1f082b43283991b2f2c88ddecde5e8fa02137b4ac107cf0d9c338378490fa74e9ceee0e637dc1a3966dde7986718d7144882c20a5b273caff66e588c49f924a29553cd8c809916568911db26cb03f5fa0dee247a72f627bcb18637c1a597243a2b7c5e9cd30a6f8c61abab339b32ca3d9d3ccbdd8af753bfb81452bb08ffeb8838bb0eff78144f333af75b159698b05d82cd456cbb2702304566b06b769843f3c397b52c23280a5b83b17c6206c0033808b220770702118feab19d8facc0561b7e7deb96dc00b85de7bfcdd3fcc46143672bba7ac68df1c02daa57dd6b1946eed403b08c09fa5ed5d280242d7c900baee7dadcb80e90179c6d25cf8f20189b9645717be7ca8d2e4e5030e26f8c0f49282032c606ca858725a81d91244cd17a797140fe0803143e6c6145b9e74a68062c18d1463ace07c617a8d004a8e144e61d8a0a2898b14154f53d49882e9881c3038f080f382570f4cdc1728137a587af100c5c57617bea0741179606f488103282b88612c8e0b5f50a448306cce852f282f0861ed85af2765a41156e7c2d7932b2815cbbaf0f58405d30a8b73e1eb89152a02cb5df87a9283093c3cd95cf8aac188170f325869eed855c73237d5725a33baef180165999c5fb5ce0916e69a655bb4c11af356b19ad9d836d646a74fdd6171dcbce186b8e70d878475aafd5398ef546a9362491b95aa461581800cedb47c6aac1d02b2b23edae5ffb4ebb0673aedeaee256122de0d7fb80687d434de708bdf1c92d7e04e60721bab34abf121c2d8d1d9bd08728c31c258c6101010103b5f185dc2158c903b20f6d1978be003010149202020480461e0f61d1f10863e79f9b297338499b5a3c9b9b126083e433409df5a2bb67d9349b3bc4163b8c5287de60edd60f7554ec811ea1ad77d4d25ec0e6258b66d5ccd31e4a5361587a4dadc5fb39b7b77efb8b37a45a3866f5d63ab59d50c817075e4f0f16a369b4eb3d96077436f57f758ddddd1bfbf0f4288c3f1a041c9eeee5e9bfa4e3b0d0199353e60790ae1befc55522977dea39c32d2390444ba0f4b29fd4a77af1be462949a947c9fe52b2692ee58093677777f087f20337367933f7882524a2996599a94ad59d9c0b9f1018e1c3a369e8ca72586e5f7117d0338b821ee793d15c707377474747476b69d1d58e60296e5788163c4060458646e400081439a3ca2a43e2b1005a228e0c205362f6c6a56abd54a87968fac418386868646871d3f40f64915638a0c94b67e1de7d3c3a3a4ee0517b795b53d7ce8e063f3c1213990537f92f53976d0ac9243923e44d37400ca3ee8013277fb36697bd468c554964ba956346adcdce4e8e0782ff372380f6c2fc1e186f48d1b3b15c706ebe6c6a785030787547584000400284481203eab03c438000246ea18d6c6480d04560ea8d1751c52fda34ba3cb490120e84414100c4086381a3416c8da1c3cf2c89aa04aa574583a5a14a0d1e71f794fbf061405941ae2806c1b182c96b543fef2f450cd3bea9e7e3886659a6118667b76e4b0630787e43ca2cb6985e59f24c4182343eec89f889f0973dd8b9047a604995b93726255556373a3a373a3f372f4ecf0a93e2a902d84a0ecc7a70737a483849a8be29683c963074764033edc9006000086ea8e9e160f083c3f7e7048f4836c39a0908594060a15017212ba9090613a68999d1c27782474791c5d085b081c5225d20185b4775a33ac48cffd52a4c65286e1a8653eb8a193a3c20a3a45848a248e0dd60d2b88d1905011efa9f35d839eb5a9359c90be1c18cb2fbb156b65ffff69d0d428ea20d6de35efffcbd0b855a554226c02d8301e0420000e29fe081c230c2c7b4d7144eacbe7faced48761f947c8b02cc56d503740a0c11d15336b91fefc6f5b7d4f0f768fb78eeb5c96ac949af0c76db84e6e253643c59883183728f066b0d16917a270228731c34adcb4e5b5c30f178b2202e0d230d5cb18d3528719fc4c98fb733d07276a65823175213e8475d2a7cfad204824bd8f81c07eb611fbd8554c7a49229111b09c9b239d2c4559a01a5bd84f477e4c81fda053cb26a911653febc4f159fa744f3f7b5fab6560e1855937a4bb4c13071b2896bacd130b5f4568b91f8edb2fb4f9534aa77bfc8a45778ff525566d982cffcd0c2c5f9e2c6776e9ac31e760754a8f91b3987de6e50c994fabf73181f329c7e81ce974ff9ce9f28fba93af492ab79742833bd83f5479d0fe516bb6835783d9d7d8d0587ff3ab87bf92c266363f9f9d74d0d2ca09fb655c94bd1048c4fd7c1717a97e3e1224ea9f4f0224f29bc79058af411877044fbe8a3af9a5934fded3afddf001cb841da168044f89003c8a83f7b4900a465ff4459e12113c232fe7274708f33c24838c26173cc38827171397d01ff5ed573b018978be592cfb1a4fc743f35f75d643f77e41a2be3f1dbc3fdfdf60da0b24faf1d94b8386a44cb2c66b3f1d77c1513f3abe9469f5fdb2e69bbbabffb8fb51a6afd6fcd73fba313fb8803ffd3c1de54af0cb23f53c3a6e3a636914ca44b77450121dc4e3fb830f3ef8fbc17fffc15331425d0ecf1bf178481040f4455ff441a08b9bbad50d05fe34cfffbcd01fb54741a21fdf3d8cbedfe675f31016ddf0bcc6d3f57d4dd972779ec76bdd3c1d6c21eed2ec2437c92101798da7e3cb7aa38ef6e86894978db7f15ffff028d317b6a39a4c07fd7814071f1d8d32817894090496e7719ea7a35ebaf5ea164f475fdd829db26264e42959e2a24cded338ff51a69fffe93809f8d3bfc281bdf190430afaa36e2890e8078eff7004e03fd6bd61ef0da0ffeabd71e3717af8f8e6f916e1e77dfeeb8bf31016b110eca31fe7359acdeb3ebede6b3e1e72483d7e5620faa2871c0286dee821a742902ff294e4007925ad185c450f5d411e722a08bd91a72487e78d5e09acc28ccbc8cb09fae119bd1220216c30e3327a21201d5fa3ae7578727215755842788db710ba1f0fa483d7a8530279e044952aae259815ae220fcb8fd77e743d5ee39fffd189e0c4e91eb990027094b9f203e0e9e0ca07807c201f3d44e862f7c8ffe936f82339e843beeacaf7f1bebe1f0b4163dbe17d7c77f0fc51439e2e09bd3c3ec73397c2cef3f0382120ece892789eef917ba7e37b3a785b5dab637241e8be247efd75bc509723bfe8853e4897233d240220220a162e2542bfe4260b302e2cfe461fe4b118d88f32e978cad4415ffd4247e7e302fb01b9fd5f127a77727c0eef8dbc0eded5153bffd34100d11b7d730818faa26f4e85206fe42981668a7005f9e65410fa224f096ca20a2e4bb884fec83b261747f7e110ea8274373db83ee83e18e646f7f50cb75fa7fb5639ddc7ba1f771f67837648f87edeadbaef9334bacf7e5c838ba4efd7af4fdee036d77dabadfb56ddc78561c1edaff28544de8f32bdcf8eb9122265823dfd90324579d46dd56dcaa4c24d0f2e222f48900488a0c313946bc8ab421d746950ec576b5408cd43436b044a6c399ab848f162cc932b907861e1828b2d2218632606573f1c438925205f6dedad564158c8c0c2e5ba4b7728ae3b11e2babbbb734eecb7b3130606f0dbb9415cd1713b882884280116a5d6b692616042b0628cab18e79c1e6585de83559151074947a783980b1774218f9c953ae5169d88066e7499d1f2a49451976143e2060fc1d49e7690da1109269cf0b580ae5cb9e2f6152d5775e1eb4a158c045108dbff6ded11ae6cb7e2948f81f937a27d78535e91e971b77320397a7777ebcc29a7f7ad840db3c25f5d0e01fe70d73d9682d937fec812049625c6c6aa038d6cd746afbd1058626c8cdc574886260c5df8366740234397232b46a43974995f0b3986adb9f0758569c6e08a0bf2c94a18506c76e1cbca0d621656b460c2ca93952fac2db6a0484829569a88b2c274c3c49395a5da841209ccd826aeb0b6d096a8d8551730cce006bb5df8a2618a216caa8bfcc24e15cc33b65ef8a2c108d6165bb047c357bdd69c106038ee290e2972d1a19631f1458bc5b668227b7737e4e6daebde57010d06d58c32428c616bc70708484beef8f495449b8d195b2b528593290c9a26bbbbbb7d7c6ad46039681e754328bd6e8619196e8f7252496bac98e3346439278d0bb36b748f54f708fec8e07b72f1057b448f2443a218338de7d1d13c3ae26ec07f356f81707bd45be74d5d2697999dd03497b1db5b3e3bddea863006757767642afcf9b6eeeeeeeed6b4685ad7fa727c54f0cbd9b029274bc115cba09d296eeb68a4966999a6691ba5524a1a9d8898613b1d6c45fa90c6186594ee933122eac358b10cb6e2a790dc6ec256cc5aa89827e78d19b8fe2da901adc6895301949493a654f2866583c9757f6fda78160b8797a37b1c5e0ee99246c7bad4b9618395736383c30d89947631eee8007221d090f422584d5d91f082e5d70142db704434a02389be4b2965cd8a421d5b751a34d88df4fd5510049e59a3742d96536258dee956ebb387dca9e8755ac6099942e83bb6714322cfc4aa2dc3ed514e9a691b67678adbe25b1a59310dab9ab6653668d81f084864b9d381d8b046e5e81c956c35933118a9945d75e78e72484a60a7c8b460d4ad50cced7819d05dbcc085e104e5b702730150e503573671a5ac72c59555b2b8f29f0427b8f2bd15801b63a4928227de5b502c477184419522044644b4e27eabeb9fce0f3a5c77ffe18aeb5486b8fe26e029afeb54d49aa334a5068676831e46a49e971bbfc168418adf42c09fd85dda0912c91bbf5f1dd41fa34d0e6cbfb682b25f4b89ffc295199a6e6c1b6e8c66c01f1b2ef6632d586e8c523e9622a4636475175f62af9dba15cfb0af7f16abdd9de41347bbc9950e2c04633f7b392a3947f998a040bd8f6f52fce97d4c94ae27a1b7bded4a8b41e5d49a4e4929a59452da94f6d3fa547bea94524a29a59ad3a7df6ab158ddb469d3a62da86ed1ef0ebaaa4629a594524a69a53fe94b4ae937a574524adfa7052f8d4f9f05fa40a8a4924a2ae9a4934e3ae99c93524abbaf7bccb7d64a6bd3a644eaf75726b7524ae9534a2ba5b4d2277de16f67808030a6028b3da5de07b1b8fd47585b81b1ec01bd74e7ab3a0a7bea67f5535d7daeab4f3bef2827e463ad9452975fb8295a909c2b9aad5bd87fac9dd66916a6b362fe289739a455b778d5adc8a231d26cac19a7843bd185229cdc1a03124c006214dfc2f661d918e5772beb62b7a6163257eb0d9b5f77bad557ef4ef492e01710d810447883f59794565a29a594bea494525a2b9594462aa5e4a71ca97329c8f994520ca37462def4b5ad394a2bad94524a35de74c0820c0505b541a254518d7df81612614434ccb4377ad48c75ac05df50a9a1434643fe3b2f271010a0964f8bc67a99356cc2092feefb6a93ba5dc9e98461dc8661354bad98eda05aa837b5f1d5d84392c45ede420be8633bea1a1f6a8d73481b56b3a434d9473c53d164dcdbe79e7b2db56d58cd52bd6b34cdfb2c7053f6adb5d8b66ddb96655b96a9fea351d1d45a37ee398e7309a584b0f2988d6b15281a84940b6fadccb5728a86b976395ca661744ba552a9ba6ddbf6472d39a46da31cd2f6d0a6064d4342e986d1a4b80c73a6285998e21521aec82d4960e12d94f2cb0b9617539b8e370ceb20b07546c6d49b72bad52c94d62cabb9d52c35de350be452d83c4b397ad395a3d92cdc18db01879b2bb98eef4d67f3b58334ca950065a061dbaa8328e7379f756b371df69acd0ddd2087a4d970d4b379c1f26b199542450a7763f34954c3d922874473be80c1f2c5c6c6a646c7a90b162756191618373730ac490b166ec2c1b1a16333b128b46dfb8d43a21d8da7ddeab1ee08df1aafcd28600d8d46c15c099a983b9fa57c0c5582866d35f8860a0d9a8eb568eba546aa632d3aa601fb986f3b16037fe63bc750f0677e8d0f2b4eab79ba901312b74dd5f118d64669780c25a6ca0d10602e0d20bcb81bb7d4834b5f48094b62600b5e8d55a3f1138799afd9d86857c30b105b5c49f32a2e8c4b3f6a1736b134e6d2d7ac43db58ea5372798c0d283143406938341b8744b79a456bd6b40e76904cd1a4b8ccaab49c21db63bf6d75d3b66ddbeab66d37365bb91558e8d6ccfe834f1f6c9aa669f0d6e8fad274f4a6ba7869d0d038ee35ae524aa9a5799a1497a91e7b95a5a151a9542a158d2751eec75f64292ea3c1426ab0ddf0609b7493261446252c9ab4c6444d744939249feeed4f69fc0c21deadb7e58c5e3729dfa3e710d17e5adfe87f95799bf3a7ccf8f9661c919bcb9ef650cb360e29c21ffe1a820b3fba57f75abd52769fafb9db9d4e8d01d5342084b2d06928d361a667626a2dbda55b9cd3e6e47d610f7637714c4c4cfdd46138ea8b379806e34d4c4c4c4c510dc535e10f45814ed241aa14c64ea0d310143cf21e1f21067865c5c07ece24a5290a0e3b38950ebad241427490f6de2aa841082184cd44c369ec7b14a61dae7f51d554eabbbbbbbba348cec47aaa95c67aaacea3748e43b7dcfdb9a6ad898965bb3529a5946d647599e93b931476ab5e6b946ff124bad551de4d1ec514c5e45fbe4ccfb5dcc0ae9c68b9d63a933375148b656d949d4eb79c9db058b0bde8a48320bbe51a3468d2dddd7fa7e155a1955cdbdbf71b376962dd527502c3904bf3b05faaaecdcbfec8e9a55be70486eaca7e69c8a5a5b81bd9cb1efbacc38eb02efd6cd6d5672e057a2ba0ba13ab8f018cab0a0cb91cf68a60b57a49e4e5aff93a2b290d71d9f1059577ac5c9b561b5aad2d761092237c86d66eabafd1b0746a6cd606f789fd4d14fbb522cb075eec8ce54b53b1af188d1e238d3943eacbaf3272345b0d5b6c18867148984663ab9d7c4c0e7510e6758d18cb975990c8b93bb24409cac5d9a216e3c79fe142aef6ad5e6b08cb3f9578b40302b265cb4dd2d70af7b075c6c2cbbfea201cbbb24a5c30c10963094e17385ad8c051b7da3117b4ba73cfaf1fb85e02f611fb253b9c10eae510a12f9fbefc78d4ab0de4e052904f41b001fbe8574a69edbe6c4a8c564a69addeaf2a96c5cc659655aa558d35661d290dbc7f3249421d26b4243e86fd9274928c1cbd2499d4cf2824b9b7654b58fe00cb6e37516212ff958d2ffb08df6e86ee35a7c97e7fdd93f07fabd65ab5e8c01fc8dfee550712f96335f374baa7e78cb2e7a40c5bf24ac964a7dd077619c01716a08c5cd41b0224f21f1df7c66a5503858656edcccc2def93ff0a523ec927f914a74eef40d96f884916f6834f0e38c30412c1dbf5021d2b8920c8c144ca142e5294d8e209194891c44a0f3f98f9e10711348951028a4f91716207185871840eaf306778c1031a205106192f49644186195f58668cc9d1fd440458cd142110410a4c5025aac945010e2c71460ca6a0400a932b9a39634a8acb194d1c5b22c2b8fdf1c7852f229c6ebdf045c4160aa6092e3f28b98082b0773f6aaa441632af2c5d8451213340f65a11560ef6d0953d4d0adcb3099bc40008e8cb17b9030dee7c11d600c899812c0ffa833c7c8dba941e0afcf3ffffe7f43efe0a8cfd68738e9d9d1c7fd42b1dd8f9902b00df9e879cf747ada3c5ede0f1f279baa41d0faf3c6acdf378747dbbeee3dbbdc63dddc7b747bea27c402d0f27c1d3e13c73dd6bbe39516a33e08f7c492f9028ceac6635ab958be5d99e9d7892e0c1a3d3e1f1787438af357b7baacdd0b8be94ca0dec275f3ccfe37d3fcfcfe47e9449e9a779cbcffff07467ec47999a3ab1583ffeab176bead1a3c7df17400fafc8085ff422bc9097a382d01b7d4e0e02883ec81b794a8cbac98528d38f1fef53ddaf6f77f43c9d1cc3d42ad51775473f4257f4b7933c5d2a31cac82f20a34d396192d59cd03fba7bbc46b6eb67c6e866e7133415d20d190b3d55f3131925ef220a92911c92197405e38c76be77993265ca9429632d0d0d0d1a356a40b85ad5d4d8d88861bfad4c993265ca9429735306c25f59a39b668f351c52bff70d64d9ad27ef6071c58918b4b487a42f84e2cc975a25e2805d0845193b5c4601992e4e5451451357469f02cc652a9a78f46e6e7e772e368f73ca1a845f8631fa432f466f7adeee177e8cde1c8831c6c8cc35209a748bf2e1e7d7b994076b0a1e63640fbafcadebb22ec21ff95837fd0451468fbeaaf3b952e6e9334a1d9a07d162fd6159d49e391486c4c738a48c6611abf027beecbc6bf8133ddf017b1aa5539f287043fca9572f52d831528e880f99328907b7c242aef25360a6cc5e94ef13a6103b9f3007cafe45b32cd68ac584e512ac1b5945083bf9dcad3c96d2ebece0d97648b4e34cf476bf67eda0e9fd9784affbd39f71fd08cb5df8907df49c67ce4407817c4e7ade774b87eb5e0724e2cbf3f97586e946df9843613e0a0c230af3e3a7ba24ee533a7f46ca4b922f5325a43aeef9a69e7b087f78d36eed7809cbbdf61be725c99f5af74922f1d6ff30ef635d26323d1b194907fcb91cc7a8d9711fbbd409727248dc16c42b34ffcf85f532a05b2c74da85dc93026051fc2cae3f0bb2d3ae36e406c76e75b1f06e35c21bf9e7c72be2a9905ab20680452d10b500a9b8fe45b8ece2889b3691f409456ab7a9b0bdb67545b4b07c42b7fc99ebadddea268cfde0d30a5eabb52c56bc453a687be7bb75917513c67e3b413dae7fcb87139250247410f754fb98ace01e8167ce6471802b5f93f4dd93704552a9fcca52b20fc767feb84fbdb6c29fb1dc3333e7256daffda6751ff749fc32c51d6967d929af85ca0949a96887e4c808d77e92798fd0abe472afb2dc111c261c5dd592cba53cceab5fff081fe9ebf464e51ee133cd09815052c88fd2a5dc6bb03927f57d97f35aa8974a56ba145efa59e0d24f92cf9b46b9f7d433cba7dca75292593eed9030479f25a5cfd2477a2c31961f7b0c18c1d29f4871887cf63e253942e21fb98013179a285d2d46087de47fe550a02fbda4f8ec1d51723fbfd10acd1ff5c7f8341d0bdde30f99a6c3227f76b05bddf2975eaa6d7e68412691366841eeec8889d069a7d9e9181e273074936aecc7f98c0c69632c7d78bf586fac29b4c0973dea4d60e84e2f297e3369b41b7297407a0265da16a346b5986ddd1f85b8d350b738da00c2f223cd4a6384f408f492e695ee6323d04ea5a2410d6eb383df261948c3366cf392b09f9837bd9d24917be959e13cdb3dcf0aea201869a45e52fc2c9b46f6ceccf33c20cc3735584f816518775af662d9cf39e7a4df03af8578312f89424e087d1f2191ce8e2fbc12684a9820a0b470a2082f67bc3c400688275358b94107289424c05972bc340531050c9c54604632756972860cbe2ce1c31660187922012c7ea0a10766b854e1450632640d2933baf042ca1233cc200b2329c00289173455f942082a240d5aa2d040892ab678b9418a04bcf0283062b041982b72a022022966d8a208c2894b0c2f8c31e68b273378c0822748b4e00a28665089ca02450c6590f185040860830a4490c5154d10d10317634402de8511225aa63c51832a5c9e9c403e1192e185188c004a0c2f7822690a0ea674e0035f8071c1055da490327c4a3a1c818312111c38c38843498003348062af11172490f38d61fd4002316cf0eac10427880172b9e2044b31cc7083196ce035f8810667a87052060c145aa24069b28416548c68228a250c94f112232a8721c67032a293a483890a9078e28b198a1053840b1c00840c463cb103962a9e3ab0820b5dbcc8810a6030c386a45f399216747aa057193a71490a7f819f1505141d7c98c4017e58ffc6ab73f961e56779d1a0eb832f264e9ca8c1142838c16b0545b8ae84e1c22f321424061857acb8c1043a90c1051f1ad1784ce02a7385cc924be3ad3bb8845308ccb8b4deba5302c928019828d7121a270e630fa2700107d712e60768d085a2a5e96e7a70752b095777508aa81baeb8bce3d1e4eaeec0163ad8e2f26e47075cddc1abc52e456ce1c2f2c1e0c4d54dacb834b9754e3f8f26d74d0faed829c9e9672e703084172e2c5f4e7b31b0c0d54da270e528e13086d8c103ae253763b8fcdd831dc2340286262b1b2bcb104128b9967493285c58be211a060c32d8e05ac25a52c259b43c11e55ad22ec8b069300b400f5c20c5e51d742e5e4798f13aa28bd7115abc8e80e2758496d7111e781dd181d7114d5e467cf132428b971158bc8cf0f232228997114d2f23a8c850440c4516ba57c8d795a88c5d3821365c3aa9a2169d310cc3e46336502c6c7731f753ddc664e4020b6309932e3640a71613c32836e5735199542a04f3728860f2271875562e05f9984355ea6392c38d8f31cf9c89f19c99ac11c3e6c426cf299f298679d5fb289d5606286badb5da40b1fcd023733fd5e58758d72a2b9c330a815dd04a3fbe846552881bb81342282b8c9e8345ef5921fcf8f07ed3fb78351fba47bd6f7e7f31293ebc180e34bed1da768644d8aa86b12c6bc150f65a6b9db4d65a2b7529bfdca949d1c1a199fc217472fd69a731fdaeb60f9c704c846180ee6cb58d2dd44bde33a95c4d6e4a2d04a147f5d27cd835ca324d37e3ce5e758b913824f991c3c0005d87f29ed9d149943b3f7328177233dd33db83ba76e9fa4b8e7a147b39d8c79fd4c9746b7e2fcd12e4dd3c8fead6fcf9d50a1be551de337ffe0689e2cfb874e77f3aa2d29dffddb8d35be29ef92c96b54bf32b7d7fa0e9b497fa09ec1aa090eaa74a28f5dfcdfd7aa906a2d6a8a48dd99b1a3a332400008080006315000018100a874422913824ca136d167e14000d72844076623a154824498ec3204619638c318618020c310640c910892500a8cea82ebc17b19478c8521e327a94f5f1f978105a852b4cc34d92639b18f336e20ea3fde6238fbaf907261ce267dc5149ee4b3191da430b21e753a012d7432ad9f0aebeeccc7fae870aa71e04067a62acbd903bea8096f8ad9ff61d2e40e233c5ea78dc81bc9805b776c77263f5e416c8aa12463410d1fe9f33c668ba57a36f2e0b3ad0eafce7c7bf078a799f22a5e6961510133a5cc9cdf8bb3c2a8a92a956a8b405f21a76a841990bb3e0c16cf0cbd261a516ff03fbc21b3f888d3704136d046cc76e20cf8b9dbd3b14ccee25dd28a0b2474a90012624b97b38fdd8ac1e6450dae18068bac76eba42683b623bfe3284cc1a01568be9c5b860a98f8083d2978085d08b9fa32384bb84e736634675ce8b5704f50fed139dd761a80b6362834248b8d3af2b1a63708040e8231af31e16591c538c1c9063262f2fcae5881ae9aad1ab1762bfea77a7341371af82785c67089a33a5a81a698a7f0fc15f95308db49d65940144e3691a3fbbf2add972cdc5848ebebd803b40c08f0d9fab65d6f11ab8730077dd2b026cc96484edebf63896568b7a427d524fd86de69756fc901b2eb0c2e508e282e6fe86849e8bbe0e61f7ab36698a75e89afb2a20cf77d6d19c5bd0e8875a75248748508b80d4ac8522d2d49b47fe2839f5c878497c87a28686932d68fb7ec15e16300cb2ba56ea6c66124b3b24579f8412b1880d8ca8638705008a784c0cb7c027684ae213b33df632033c91871820d0e1acc1f7fb5acc848e787f2bf28d40d56682afaa3aa2a142022a7dcfe42c81cf84f08bef08784c34f8497672bbfefa2c01655b3801ef2bd9c73500f85683403a58e52ad72013e31740ecfe5623645300c75ba37293d771fea520f36e24bfec1aa22eb492a4efeeec9322e72040dea1f77fe66787f819c9c75ff6c98e7e977552bfee42095fc5f758192f96d98965103b74c545285566b5de6436d450e2db81ea189c05fddb839770bf185b7c7c250de6588de712e649a9a1c861a0cd11b0381c4c85affaa60de47813eb5a4d46278a680ce056c6b1d0f02ca3d598c68288660ba626462940d20648844e1d26c3f34a6c8dff23c5fcc5789668b223cdbf17bce1903db8134ce4ae55afb84ad88e581faa4384fa7b2380c58e1741e9424f5b1366d64024d732bad064536bd465b9c5efe5a3452f33a51d3147fb5f9e74871c11a47ceb8b3b6adadf920bd39a8c858ab257cfbd162737c44032938f16c509d99004593f9055dc24a7c4c09349061624cc474a1b39b3595d6dafbb91ef66487471659a638145b7ed779a9cc0222050c4a8a71bccb71da317660bbe9f2c7e5b71cd476448781741432c3bb873d0f1bf69a37328fbe1c2a82716634734548588d1614017e0275d953f41859d51b13abb1b9d8fab9e98541d4e67412992bfc5d9a9daf12df63ac1cd5b238089d42255e977ee45c1573657e5dc6048c0dc5a17eabdf95b5cacd4101653f7daeec1431e4493d81ca9c246769fb4e827ee44780b5ee2ba5474d57a62f0380154f4d5829897f461cee5b26c28a4751fd1577d82d38fcf8f28df8640bb507c0f19ad171a5af37021056ea719e912d6afa03764d14b1275810eafcac8889f572d72348146183c3fc03e6b784847e9d600b4f55132062d32193bb3060811bc76294eefbbff83a66fbdbe081ff616fb24003e0cbf7618c7a7a27d03c5aa79f7038272cbaa846788d9ab84fb1a12f228377048c83cb661e5d67acb8936e60fc94d79f07305244bfb48f2422315a201d847201e061bc98a8ec0b519400cf912b41220d010223a23177ab4900fb787e9a49057e69951f42b87e1da76f239575cdcdee5a6ac85a9ba1fd0b6113a9bed70a2a41fc8cba935e1b56401f7a2d494677cc52f29c7e1bf2f5c8b76c235a056ca39f3db108af2599fe7528c7d0c4764b28afdff11542b9f442aa6ec144bd41a17bbce9c798fa6fd2d5a0388ee2bc299c66a24a7cd2bf96c9ed4e4d3a588d190bc3268d57fbf89e6745e457919d6bb9fcf2ba0b0189779afed1516524e2a690fb14aadf3301540aa9c19aae48831ea7332d7d5990161fe238f291701f1b88ba65687d41edb50e1d0edda4f0a0886ba538d786803739590dffa8e2e983f934887717382708289b6f9db51b9766c57e9c2b71bb445e2de6b44f6f90dc1b525cfa16d612df0fcf0b77c366c9642e4213ba70eadc22a4f9c2a368df8da97a30975d4bdbffc9006e0ab560b8ad0bd6d388c9f6e76e775f20ff8a58ac02349d04d23052f39d3d1c3562a4c338d5788ee2df1608bb86256e6777ecf447ffc06ab229cc96a327b6650751716ea22f8a9914e4d57fd70f12ff3b3aab0dd4ef987f9e855b834ad31956f1c89fe474599ca82de9cd9d2f631165c624c6ccf42a3de3e64b678f8aa08f414fd6bff490e7f49e639e9754ba843ba2466864ac4bd754f19ac33478b72775fe9368305d32d194823ab83f744ce7714739712f8a019dc3a68ca6902ed0dd58c9c151aaf8d6060a50fd52667aa3b2fdadac20de71860707a403509c3ae066aa5090bb5eede536f931ef3a15d761173003a8a287530db6695b17a17dac302074f3d3daa25dcefdf5c93b889bcc4b4420f33a041b3435be5f011b48c640e23e39a80f22ce720454219b103c77c41ac603fe15fd7909c86e881784d1a63d5139ddd5d8847455a2999a81a1f5bdad60cc6fd6b127ed512984f514c60a39fed52690e82df4dccd4773c25e89b2dc9b7186cd1d3b880b48ccc01eff8571bc8eba0c4d5aac7974ca8f12c5c3458f53006200a94838fabe5b086b9463668f6905d18d37b70c16684adf1704ee9c8f8a342a9eee2e43afbe759143dec0fc0d8a79e28b6294e6ea98462c1e1da72cc58b79539d5051c6d5daf95551b495ff2f2b1da24eaa7b0e49f945c34ac940725cadaec40e8943e75ce0595131514332752cf74c90e89a31d758f2d7bf2142f8a72981a1bdf9491fb210e755aa0aa9f4e103eae3948985cae9721fb04806d96fb9395caaf56fa5344378185d432cf1317f960ba2d5cf606fd05c544a2e4b2415007dbe11d0e088aa8a37e41b31930edb9678c467ba22b96bb325acc25f1d6fb33c38c53b5d90dec87e011556bd008129dec7ad8a6b23aa87829a90c3827ea28181dbb40352ec9a17f323354f5370d86e4b7920f0321bf39da4eeae9d87b596f17725c205fa2ff7e83f9fb7e2e89a7757552c9d8728890c8d9f33c31ab271bffdb36552587b39202d488cd06ae46852026b1fa0002512ef152fafd5b98fb4c16327e9dd691811894ef0158e35e20cd2827bf07aedb5efe848f93a09ae243713a8f137e056a30b52c69d29e3e956aa06ed3df34617af8904efc8919ba8b6c963ee703474e38c5f2b6a8d6e4ccd6d8f7c9a6b1aeb26cd8d628696659b4f5c6139ac15e05bf4960e39af3a2ba64d5a9ea072d0113f496cc8620e8f6227786fb8809f49d87be73b1e0a393a0d642b04363abcee78d6e98420ec7d5a0266e739b5ab8f00406d6f732475267b32793ded3f0ade1d74e8e7ed16d348a9d87d7869ee86e9958a5a5307409c2235a14d5df5043b39e242067dee1a8eaa5851631f8f70a600faadcfa225c0d228f5cddca362d158b8e70da7722cc3758fcd5b9ee16910a9ab828b9c376bc8d4a609b4d0c459cb03afa2e5c4cf062a0a2ffbe351ceb2f10dd2438b2f245f7b257634004beabea2c3e1e6f421a99c603a3857f7fd417bbc87dc00ccf1638633c1b6fe7f153991b2565224071d7ce867c115dc5e65c04b707fcbb271ec11c0ef103d8b95b3316eee3e7ff642eac814006a422e70bb3f9f4da8a0c8d691daae283d27a95af4c18750c2835c659a830b3ceb1da037c8f8f7c52ef7419225024e21526ce8367c94163b49ab16d9b62d43e69ab2e01c8b9410f99a004b7de5d2c382ef898d96cb28066c125d0da7ee6964f28664327679df58cc5ffa45523b6d232521189dd7354d4b299a2370f649863f061cff2a0b97740d0f618c38a282d426c13558672c6aa20a4f2ba93d335a26b42d0a5585d225e8c2d5a3556826a676bf4417b2c020e219bd9e9cf7800174be8e8da79e4457efe829b24ca19079381cff87299a004ce5f650fafc5413f69e5050ab261f44b292986b3f6141b3218d83930c73ba7d410a4641797c0744f9820607e8e7fc3934792231302ea256d15ef09d2537a19131aa3b331626c2d8a4ee49fba3fd2273135374d5136dcd0a2d29b1632c9d13658c6454939b67ab91900b64d471cfa2b9a4a2b1ef7214c91b254c97b4aa217072a379163f0a80ffb94993578059a1519fb7315c27ad0284b8bc4672c905243834acb31659de4209620421111f0a1246b11519141fb1aba79cc84615a5705b6c57d13cf30842e12eb7ae8a45db3fb0196588a4804dc76c100cd2daadcdd8636d58cc4c061f35fb78ee8777632b44a1c663f3d45ae2b4863919e7348f14dbb6ae647c04f52c0160a816424f594114722183af55e9f7679aa35a082232dc3c61b95c33f7b290472eb74374cf81c02af97c81b269ad588bd085d603659a4d895bd574a33451b344ef25811aeb9a100c170ec15aed33ab6cd8695d029a7d1e3175b1c501c2d1505475fa9cd8e2521631a000b9baa81b893f2358b092a05759ca5a06406a0e87a1085ac0a4e446ca8b317690df34e1566932aefe819a000a0c7af7aa0b05eeeec792d03e09bed0472624ecb1f95f627885065ab43b25cf6b249ec0cf319a3c12bf017997fec80a0ea68f2a2cbb1cc1299fc1ccea818ddf613bb5a7c6fceaa94c47840e50ebfc9cd945e5e30b77419a9094bc8f90837a7b8247acc92f9f326422cba112815661eea712aea0daf6433dc5a4b51cd07e7d505961f155d1d48bcb06be4f9c50f2f0fb22a075ee1face187f4dc214cc89d5830c15b4ab19cd41867ed47cbbbebea6b9144c6241caac10dd8da90dc9d40e80ccfedf06a7c4752715ed6fc3e56c0357d234405a615b3c4b5f5dbc667a9c8209b0d480a1c2776764060c392d762e7741d0974fd1e42ed0ce3760ca6eb05862562f50c30fd866892438f2dd57694b174c51997d3dbeeac4738649c3c62ae55939e0f2c8ae627226f2408461aec6da03868ad8f58cef80211746a3fdcbe2076f735bce627b2035dd0193fef081b0993b6c79c4107c34de4d511d31382d266e1707d87e55f9a06b4485c5f43d0c0dd6dc9ad5f9171a92d1304c19c9dd94a5ea4e4cf5d36d33dc3f6a861e546acc8d879aa1d3670fd9c140c6416bdd4105287c9f2a09a8d41a159f6f44548ea6ef3f88a7f782d14a67e70ed2ded8898b56d20d4de66c91beed5dc34ee33c7879ee82b7d130f41aeed033a2bb01d12142c370177476ed4b745d783599780cc5e046dfedf12a497e60d673dd5e2ab471d16db485bdeeb505b1c1d670fdc2b32559e3bc394ec352f3526bc560ea3c5c351a0cd80f138a0d30264cfe7cc26aed4a38e12bd5127bea72a894033c14f33a0c4c341fba04fd18446dc19316b44fd1182f02a9004f4a1cf67f81536426ba0294483a1f8c8288107b1955a959e540656906f4b9356a85a5a908f557e9d021962d3d5de5f2f45b5ccc2dc3d5ff1d4d3489fd36b829e78b01fdb7ed6ece425d8c6dd542680ef26eda3fec0fac554482f89b5ccaaad692da227d1d6e780165dadba39a944a13bf8bcde63654c6f67143ec311052e9a0d3b593bc074e3220ffa1da6c17c13dda77695ee60c0da9bf32af945d789db7ede0976c0a4c204a3a465bc55b72448a6a0107289dd8578c23945e7ec261c54606df3c1840cda995f17e3fd120fe4c07d236409a8960479563e0f9ced0c67a5930b06dd01b35dc1a44856e0919626d566201bc3ea079e2b2b29383eafff6268ca8f428aee281b07fb491d266259a30b89336ff9b99e0712455c7ce1e24757322f5a820a6b87acbd0f9734933e98fb82ea6c4a8161c66b194612f2011d9cfe39785904e6728e02bb465b6f935add42c21aea015abea0638c6366ad80d0fbdc9af06be6a50d9c47c93c15d959f9e09651ae06dcdc43c65ce1917cd2df0b5cd4c26aabc875693509954972245c09ad2a5ea84273dd016bfeb62b3f7800dd830bc22869cc0a45c1cfb486190f6639021c7f327ab16efa8402e86a9e766e2a44f305620c9286e1a8780d8e8586863a281509f64f500d2962bfdf4a7bfe0b0887381951f420fe424fcde8e31be58c86e7888d3d3c4bb94032cf5cc6c979f8b533bd7516928d251e6bb4c7f404f3bb4f6c78cd02c076ae5089236e479f8763d0dffc2c3b707a95b4a62dda9ff29ac33442fcacdc8f21885f1ef508df631c0b69be346b92c17ee572d243f00b68d8fd6a27b2c765982e970ed50b2ae8387bc9b65752b6cc3ab519e0e6de2d37a7d4d92dfb03fd6beb4b73e9a877b5ef38e786c377699ff3ef4924249261e20cd789a906edbb7421f5c72daa667be30621e6b444b5e1c628a44461e9c0972ae2040410bd953703644d07d490e4fff2f84d8ae42b225f683bc87b4f884080baffe0e3e844820a5614b80ff93776bcc727a51066139aaa5baa24570a1762b0b896ca4fcc164434e46222bfc2bb4031a1b4cf368014f0c5b6babd818f0e7598f4cea2cf976de265dc72e8e8eef209a184778d4ce9b1ece6f7a3b3f4ea7de65eb58f525a6dc3c20d96fcce17513785937f082e4e3f22fefbf9af9ccfc845170ac1f1a8201aeb31eed66e40dba4f432518405ac45f356bb02e3f5ee29ef5c88a88ed893c38b359faf5198171ade35de8fc51c4eb8ce1ce13cd9b6cb97197fca208f588253d2780f361dc0b61a4f4bb90418ae9f419bbe1b9b07187d9e26f11384a9deb783db6920cd79aea9e2c00a6cc2b6849a4a904801e9945f2c1b09ba0750e7ab08ebd4218e3b47fc3329a54069d75d47562a040b8472152893be1c6c32ee9c1b8cd2cbc414f5666fca9e6aa3e112d23c7b518c416123c1ec2b29ca836cb43914869d106c904c86b278e2e57d3ea65fb9a85aaf891bce14449d34abaf96bbb7a45210144737856046bed46a00082137dd012cf1410c9b69f04c1102edeabfdc9851c882198fac6b3bad5844e96a07a5c6b3bb182091941ddcc74e02fa383a2f7674f420a5ff4d6596143d96385541ecf88a5cde68a26f50ff21e5a606206b4303123e76bc3dd6053b997c9113fba857fd2dd1dc0c11f72625475012149083b2aaf4613d8ad72a716e7b9fd6c7d7658861f723c9fa89c76395eb958f51d03931f185c3c7be9bd6ecb3acc703eafbbcbfe96c82b5628454b9de37163693ef11eaeb1d4f1048636463074cafaafda2375982e32fda109042a1e1518dfedc539ea58745cc9d3de2d79638b414f649927c30565184df891ec16ffc7e7ec939c8985d03a20dcb6e63cdc54d9dca471c40827435902eb36e912983d21761e011c51e1e67450128d646e9348accc7f15c3696fe049e07c93ab9735ea97781689549a822521a6e87c8d908808f4797e7eb1a49dda33e70c0bfa280dcf08a719048ccaa3dfea8d8720ea80d9c0f1f60ea9986e3aa0f721e30fcc023e6fc7e4787213f1363fc86f8419edade5e74fd4ce431a22f0dd25d393d4ed23b38b6b1dbf1ed5cc26d3a4086015132a0526e8189828b469ff8ed961e88cccfeac4ef30554a3f8eb39acda24dc5e342bc5447e690a02f3a202e7958a64cafe3dfd8d7926c597329b140c8f77bb4c0a325ed34986f6f68806572e6dbca9192c5095c3e91f8789b767dabaf0e879e007f34cbf319a15c8d7286de139cb0703df3252d62f24be07fd264e015c482450585306a78884595c8875d0ee09fb9188b2ede2c0794fef3ab35ea57715d86165234c40b9a000915c56cf786a4fda9defaba1c486cf2825f28a6375ff9eab55bb1111fd07681cb1604ff1e854165fdfc65e36be956b0719e60aea2dd62d2d4143dad59d43334e36eef83944085bba0a413bda63e5a70d155115f52f73d53bd77957e461511c1e79bc1ebc4deae6b7dcbc6c8b8ea127e02ad3fba2c2d55529d5e29ddbd20d8263363912670e45a8ee2aba6c2f3f617cb184a631805eec904ae15212a71e8fc081791e6194cc7b3faed775b47c5d1c5909de0c145cc1f417f9fa0c9742af4f5ac4843ecc7c1c617e0fd3d7f0571679a47b83cc7c9f51d8c22165f3384c30e3a3bec9ea435afe949984b2d2c67eeca485cf769910f6e88022e2e43364ea92746f8a6b28630b05013bc922a07383c30d221105f7139c3481b8446369f1349c5bab05a288402eac2b7f7e6d0a62b920e6eacefa8c741af325b9b4ef35c994d8218ddc91f56643ee75e8a852a935a92495f859018a608225cc4644c049f178a76327c720c1434d0eff4b5a1f15fbe280470675c6eb99169f2c98958e0c268c4a5738c550244cdc2cb0dc7bafff21003d8b11958d68bb81aba86caac963506eef0ad209a723137adf5f453d8b6b35f920760a5efa53a20c12b2a6a268dac0e4bc7ee0a1eac713715391c12366e6f38f2e9f37cdb8c6051d0908ef9189afc55d9feb07cbfba0194607defa4eaa0d98afe58c1461c7db8d5122fcf8d8702c4c73a3c0f91b359cc7c352f849c4e1a8b509a99fc7afa7ac622385a92191190c0e3edf207c469b9f86e33afa7c2c8c160421d2c3a46cb4aac8e197266b228ab6cd26c0e9090795a2f847615b78931a1fb1c27658c8ee4a0ee0d0be736029d865bcc1022ca3f210b370f912d5731d24e3d9dd95825d79305bb040587b6454c73afd710f915a48b86d25c8f6de794a5b34d48d983b91a115623e83d10bbada34a57066156aba937281b96970d502ca2079ed4aae926c469429762ca8f707661ac6e4501cd31582064f242c49d8a241cb26dc54ade012a12596a74c30579883c09e7630533618d54c5618852d4b6677631c1ff1b4d9e8cda579cf1d800e0d6fb8fd89ed7cf19c1fe67907f6d8241fda4693bee6278332f27c87d953da5495316da1f1d4ed1a10c23b09b655a865c5b0aeed80c8aa850e8d696672a74a0122847a984b84dabd78c9df1b1841a214105cf73a90009bebce51e50e182fe5a08d1a28dfa1e3ddcf1065eb0112411966c140e6c20c29c392d24a12905c996178e538705c7966ae04e253a639da08ce4311343885a2ce0650b9072825a77f60f7d0ba7b1b016a77b49392d2aeca26721649632ae7cb3e5d8b99f579b048a2758da4b9b5522de4f46580c69faf9b29c0346fc0145f8d0653f9e65c566411adb3a629a7c919c48d2b6b9b8eb82737d4d16cec89265c36afa19f29a2ba28f116302632b0fab59a4ab3c7e5420d539431d655c09a4a7d4232f546f014c30853aca9d40689511fc3313c2b0c3e9409cf5fbef4842e13663ffbf6fcf6f7a05bcd14cfefbb824a01ecdfd4f305aca8bf2c807077312d8734f0eb63bf910790fb5d00993fa3f429735f354a8d09833c10e6d75fea8a53aa7757e55edf9cd523033196ebd86656635c8fc530fcb87b73659ca163c2166828fd4e09dbcb35dfd411cc6eef7e71ef5d525e8d6873a0773fd7c9f653e9a19e88017f6de7bee32c662092a0dab07a673be27b4255f9bca00acba1eff78b7989b27603a69d662ee2563a1794d95cb2e499440c463ca121fdb0f95bf95c50befa48e7b777d0267be36c8560855ca64a3857a616f0c420464ece0418dbb35a4061ea03d4ec2b74fcedf8aa599f845a3bbbaa4bd00509fab85223b8f927bd7fd04ee9010b60579936a90009e9994aeb3f87ee67102ae2d0969d1af7d1b0624202bf7288b8a2c5bc58dbe9438f1a8b38d4d24fcc095aef62e3f3976100ad5e069d221d304f86cdfdf02ba2cb6f0f8d119af2cc7cc658489b4b4df900f7e716d2d2116cfcf5912aedff4659edd700c7e384858f8ca8c01072c34b59362fd21b298a121c43ab6b6988bf11445623ea1ff95ea74319a4c3a4fc7cf1d16bd03808d487a0368fccca7cd0889ac2a5aec28804d6fc65457f56e82cb5acfef727dcfeb2c9dd4f2af0ed19d10ab0e83eeb64c3af1475411daa130549a201f89f01b02efb4f008183cb88c6e3f5445c0f39239a0c35cfce272d255583b1f83115c3c8d1ac4947cb53c8e781e44864681cf6631bedf98e42338cb3231ee6074af5ca291f1aec44a5c0a055cca8fd3b5de1ea773a4263b6415d9d7e555caaa83d119fe41ad93d159064b6df2e7a23d1c93083b12797056f07c7316c53e9cf4218829964887571a4d8a4e31521551cfef8c254ef18c2c8f2ed316154287b2eb990830f8f54c7a56da2941697cdc5d53bb9bfd72573b9e6ec504ddd72997828f6a7bfef47d770ac454c2c7bfd403fff9c6549fea008527e563d68fea093787fc5e34a830a26581d1f3da512e5fabab50b861a13fea15798595191709c76b489066c7913219a64eca4e8f8484f26c7046c708b3b00434b743f689403e6dacab553ee25a9a8c68cba043bf34c7658fe2bf583ce209405b312e09ead07f483e605b54d38d21234cc265e39f66bab0745b5ded6e08e6e11637ba218c09c588a0ace2d16e19bbf888cd7e61dd41a0a0dd4a3d315fb1b4b217285faa6603f2c7c36c9fb347d336556d28811b0de412d74cf575a7eb7107ce7c0eddd2c3f8be7d5e0efc6b31b94c892db2d8c37287b3b4b0a862d9b70247eea4cc7cb256238ed9b28f50117fb238d989bae4fbd3d299e7a3dbb23bf94ef08cf425fb5aa02fca61fc38381f7fd6d2b4dd8285a2b6651e31c0917994b86547811a6b879dcca99c56a94a07e901a1f286e108da8951e9db77593543bbc99017b5b727399e328274373676f40dfcd1d03ee8b55009527b2cb69931903421f546e60be6d4802b30c48fc48998559b456e8c7d214dc4c1bfce120b70edf162bd534b90de8e638e2a4042453906da19eb4e1f59a32f538e9ee208736b48f99638633392c9d1ef04895b3b05257e49699ba3500a45e59509733748c487313c7bea8ac76e35e7dec7c2c1c036bf2576a3ee5932bba87091a28db98faff2b617a75b0c7f9f3687d8a1b6322550c9b8753b060de6d1b13b63955f09e553723aa470499e8c0fc081fa917a8c25cfcca3c5c1b01e0c0c424c8f2bb7564ff4b3afe1211dbc741e8360fd73e687b6253e9aa45bcc4c2e8e0b40c84ac1ce39ad5385e3973b783aed750125bde7bcc560e40b2d30cb85b1172b637167c78e208af037a711a7f257bf1e6099fb8915d4e6885d135c4899c5dd366f4fde5c7e34adfaf023472ace5f0c57d8a4a19037744e6f15ba299c2459b19ae1bb344ce18f81d6c897726797b9cd412d9b3b4345e35e6b245be9fce7a7a8653483d699fd1b5b60c8fc2217d46fb3022d7e0b23d4e590b37514829140daf409d9f36195324196a0882595e99341b00499db8629d8e6b18b8ebd0487bc74b348c9539e5d2e9ea0e6eeb4ee0eb4e62772f4a3a8ad690eee9296d8e1e2a412317950d33df7e57e3a97a5706e0524aeca9977ccc2282ec033cb7f29db0114b7bb749529eee69858d3f701075e98c2f75a984bc32435b540c017e26730e1fbcf1fa54624f177301e4f20d75c8e7fe4b0b4d86c45c4d058226d509e5d5f64641bcd24191df27dbe5a0cf08331fe8632c73953a6ee568c1cfa43fb9f7ea747ccae6e338198c39f99afd3855e64df2932d51b084c68cfb3112dbb3994c6122882d3f391ccda18178fd83e7b7a62d90111a3c086b2c1ad8c33e562175fc31b12a4405698a690501a1d84918145d19fbcb95c98740cb81558ebec90f85f8698b9d294127a7d0b1d1d2cf4167dd9993f9d9fc5934dad8a6c4c627cd6860f69d44d907ceb7fae9aa00eeab930f028c41e461ee52d36c27107602a3a44d5fc7097c6e44544baf3eaffb71af64fd3d8b515f13ebdb1435d38b248f069fc9306c168e3c867727b1c9800bc2fb3bf246eed0df2f9a64a5a873fc57597e6679dfe8fd3b787eb2b2b812f0a631e908ddb6a03d85caf459d554d0017e8d603cdba087425b72235bc342af4032ad6a399604b2bfe80ae935f51dc52a11521ddb73b0647fd09f47dcbf7a3b10c947ffb6efc0ebb828ab0bf99e2e83a34fdb79a0037a488c6b699f4a042808e9db167188d3eeafc71c5929008a93cafa09438986d533de9da17888b771656c4dd0c1678fc183d24b42e2f0399a6f1e73962990bedbbf92922d1b3a33c7ec9060301d965e76bafd646d9e741d14049352e2fa77a1939a49de0bbda31a4f8ea57d78deb1115f52492d7f20a50a4645494c58a30cd2cf13a6764e4ff5f3436319e99d59d6f01b88f1c94fc1e430e649cd4b71aeb0be29c99f87e7a0671f3af6e8fe5a5950c1bf0114a23b1334c57a5e2bf24612e513f81941388af7e28cc1de5e984d6477d4378209a2d658097f738733f8a7a208aed63ce78c7e747e5e5dae80cac4d6813309b2f7cc439b71eb0a168bc0f2c565878cdb9067f408fd32a422274da342260243f1c1c0ea1b56c8c39eb5c2f6b319643397253f7dd3f8b8708ca36f91c5f58baf81d951b0450ddaf35af13657d9f38951ba317c6daf26f13cd613d278ef4d699bd0f7afac92adc8502c06b6344554cb8dd260cc1c268ae804e85beddef5865cf0d9bad12e143f261aec548969f1ed925284898eb95dae7a5dd96f8e21f0b7aeae3818eb84cb929e3bf9a7953d8bd83eb607dae9792bf5d3ae476adcb1b3fc0ba54569bded364010904df3c40c1abe25ec3964e9d2748f902864f25f17cff1dceff24de3b865a5802a5b124629546d18e3541d41357f8df095117b0a755a1d51331855320d371194d0066da4a1b126f357f5ce9219c2688ef5f85481f17fc925f4ededd213532bed8cff587800e295f2064ee6be41065a56778b1e34b6670b862ebf14c4df007c74104dafe60abae782e992df85d8eb0eac0e284c99f4e41b8f91f9363fc97d0c7db603f3d729758a92edb0f3188fd8cd0eccef4c90e74a1d4fb4273629491b61dbb029fd1bbc206e2a013208f7d3e2a25dcf10bf648c805a617710f542482743c09abe8e4cf6c19e659cefa0665f145f9bcd1fe39416c0357b7b94571034a42eb3cf2e5b14a257b6282a0d40bbe23bbb9e58ab5ebc7f800926766ac338131d180bde4356138ad5ba9d0f7601a53c22340eca6a51d83d97291a6ee6428e404b935115171484c4e09b4161c9d50f0e6b798ca75fa74ac155a1f1a1e1fd8aea317779fcf1cbcc5ffe411032e8769603463de4b5ffcf8c4ab9fa243579b664e017b2ef83ca29ac073d0c4c855976a9b45466188f63fc1e153cd4ce2482431f105bb4610b76e0194003863a2e3358ac9471251974ceb036036a5d39178486ec13d38637d26a10ab69c3bb86da5878365d65a7b6704e226995c4b67238469438848aca49065e090da7ebb6a251b4f642854043a59a0c41f665d2386669dc92f5369674c2b3acdb0acb7f0c8766ef4d15d66e246df34fc47d796fe8e99f18b452acf52bc029b163cbd376622d495aba63d92fc1bc3962c3c614a890798fcceb580b2bead7a0cc57b3ffbf2ac9d74bf2798ca40cf82f3707667d81d12a7a857ff445fe85bb46500b243c2f45d83f3e729d24de5185bfb87ca57cf4aefd305a580211733958e1bc7de63f655ea88e65adc7246c252845e5d79ebf2a0596d97ef46f7cd24e52dbfd12cf1072aac20155714cb327dcb4259b9705a44b187d76d2d6fd9f39246dd5ac84fa83d12a67e9a537b064662ebd23c932008aef3fdddc961ce26882d32014225f924b3fe85d0bd9b51c31ba244dff28d307cb795762f4d4a0c8120308b3dacd19490f9dcd63593fa4a468624009f4f94c251c08facd3d959156d48f0853e2315735bebca10445db531d9ae79ac665ecfadda5955d215cecc67fe9581808a039b3e10b35041616e30bcab3e420e1417f437dd69a83f151e7232f477c6fc3176e9f29aa1acbc604460705026ff5f26fb3544520cfb254cd3d5a79bbb041854c8877a281c82479dc2d6d175087aaede5ac3f00d3ea6af939fc42a4e91bfee788fa9921c0ba4a8bca4d52365b8ae3d6218b2d5bf4840cea7ad559672ea061e60d50775d9f7cd4c582a9e999f915bd8cf2d118c734a5c57e4c52f9e24af2006a9e0072dd36e837539c6b9269d753afd10a8fec7aa7e9db14c24726934e0fcbe6467d7631177047e53a60ba570d016af024e19d227c5959081be598bbd6b04eb114a183d83dd53bb4c6c7382a071d2c90e035687db1c6a5d4046c84d487fa7bcd450dddf0cce9389c9ba33e148ca8be9bd06af9a2b6ebf56daef91dc484b66a723e94be438699a3d8f67bf9961951b9a70efd7b3813561dd0afa3d586bcf0daa6099572e4ecfae9242aee0344bfe61811b5ebbcbc57a31883a03b09ca45dc43c39f072cad2fd45231a7606ea6ec11b1e15badb60e079f7f467f15fe893fa2e4538eda19a9d92b3d5420e91a218efd97247d141d02b1a9d6015525aa6838fb3847ef1c021a5f65ee35bf2cb8dd76e6ea672a85305ffec8de39f98bafe48cf452e600fd0d3a0030b28a512fa168a6e93869644869689b9cde26b3cdea4f4f6328e768e6682a52ca0d9f9e7b610f51b605d339c0ca89bf54fd54e8f33422c2876149395c34e6fb9a874e1acfbe149c6d5261eb23816d637da39e51d0dec510a73165ad3f8972337951d58472054a0f734b226d66220d4680209dc848fd05d9dc7d0ba728239c3a44c9c04e123747c98a6f4739c930396adf6cae0fd0ec15d59898e4eb8517b4c10c9b0f1774b40619475e20d421539fb2d4967421bf8db2daecaca46b5c9db292b07b7ece3e03604d7e301fb1acc9d78c90e3aa3e9cd7157870a7aeabeb503229371db5f5a7cf3f8636ad53f6d53c777880ef7cacfa0a66b5d9373e1460c63a28d03c033c3818e1203f22ae356dc917325e0ebcf06d19b4c5620c7cc546e4c8246cc3b7123c2951f9fd2f2f7351f39f7bdcd3ee00e60494248480148b325b7bef6bc7bef3264e650536195317bcce66d2c417089b7d237687329c2b73747ae802e1455b8e84b97f4203ee64f9be3a78d30657d07976c0cc57f032363501020706007aa4ec745a34ddc0daa14e1a4cbe04b91fc387da491a8c57a4b7731f7b35bbd50fb51ef8992c787645e3e078a1f4f3d4f703479316afa97169deeedef7f75cc9aa9357d9e91a50f206990d74819537314f2424a7173cafed5450c2714fce91fce622ef02e78b0073aacdf5174588a6961760a509f3b7ecf016cb9a7983055423b4e3f1f874acb4645c83fbb0d81e2c4563bd646f73092d946631f5da95605718f68a18e6627ec9063ff95072d13a92c2ec9ac32c82e41bc5a5f53bd9482938120b4780bf85da43cfa84d75a312f1d317cad1b9a91b0a2493566cb3d0b9b8bf5bff16e48d579ac9803d1be9b6d00a7fe298874a91146775326d2722f67820bef48043ce44c450ed19909458ec50014df6730e9e9effd2a85fa5fc99f7ee4ed88444153f44955964aa3c0d49d35591328b26ce633fa24f11221cbae597e23cbe2d5d082b405d54f2c81618ab6ca4ebfdccdbf554ab2624844849b87cd09c9bf69783b6fd692e71daa11fa0ded06e2faeba9615d1cb4ab10e3f166917fa4473380a1b139e58f2b6ad89bd4cc9927f3bb2a2e2c8f9722d8f26429eadadf9ffe2c70fb43de091225e833d5351d8c21eb0e05276d973d9aa1677768f531420ff9c865ead9a647f1bf7e3104ec97cbeb8d8a46cb8279fa8c5b954519c156ce6feb9f5cd158724f504391396f910f36540fc92e6f48c7ee6e225a94b1ffc2cc03fb909863bdd65327d2523bf3398a44fd18f09a27339937cff023cab723149768dbf0f46b93a03a40b9ca7dc588e7f6eb15fbfe8feef9dce3fb6d0aab62ca24d7b3169096740fbb18ffeb684907bc16770681be880fb982875818197646242cb0d50cfb035ad37ca53f2d8abd9d361363e962918b8dbed86c7c4b46214a56ad3cae8919b5cc9c9c32cc27ff11fa664ce24ae1cb7937f9d4cb027549dc07e9d70623a39dac956381179d2efb14fd7ebbcb3c114245daa31cc23240bde4fe6314da141e109c86c8382950b9e149d23092c7809f2dd1e2a3932c8339056a62dbdb423f0d9a1b1397a9f7d7134cee9129e821cd6ddaf2c4d6fc5931bdc1e0542ab1d9f56f93de87a268adae11baa75e3ae8fc187770126e368d874b3693709ce786611aaa9c4eb145e251fddc9f90c6bab0b851853cb7c4fb68a3d1ebb15feb54757f4feaa68ddc2f33b34bdc80fd30ebf2b7367e8aaff29f06ee5dad01a456cf46fc47bf30f4f03d1993b6712f74282bd6013b224aedc5d3541471fcf311a7ecae7fd278732533bbc260d8caa7f15e06f4148d4e4e5a6e9dfaae7edaa8554b15cc701962f4f264fa06fda72cf60551a4c6b66d22d1ef5eb1fcb7e2095a1fbe91a442b92d4cdaafe5a3caca903e802cafb5db1400e1ec972678250b17ec0880a2d7ec2d826255d521469ef35c2f92412b7950d7a8312b8c0b554a91aaeed20be8c9eb59317040bfcf2ff2b1761ea26cd19b222e9d90480b8bd4cf8fe292280458518e24961efee1ece13e4318361e19f695f16288385791033632aaa0484037c02bdb0a2e9bec73156ab7032b10a149eb2b558334e0eb8e0b7d47d06e8c9deec64d8064e1651db91225bb2d351d85c2b12f1ec77b036efa508f22a1b2a00d8f238f9d9b18a004883002123da2b0b224e8a4366954f1e98e4c6e594249235b982a26876111c54e0bdaf72fdf18c4ee90920de58db4a35abec7b354a01139fdde251959800167199c81a064aac371023784d1c7bc709288d5ba4818a20ac70460515c288da275a19bd7e6a8e0add886ccc4a1daef2ef08e9214ab503127a849d7af273b726fc48121fd431a94597c284861e8135fcf998fea7be9419ff8204817497864a9cfb2edce8b6a3a8c6d3dbc566ab692631f6296657cc5c33503fa8ce0d328b9314640a1627d1abd7abf5a32becfdf02b748e56ca51e9e50fc194c3f98eecb028ecabb07a7c3e6f4069a46b580e220828ec0e65cff6f6a712bfa374be8c886e68c57a01c8939ae6b2ce216b777cc275e8b9e032e2e345de41cf80675cdc93f26ebf1046412754efe404f229c0d4c1d316826479d6737348811fec9a0b6910532424dc3f2d1bbd2093e8c44ffc17be33290ee4e656d791c5b2ebf3bb04d0935fec81723f0f87873c11bd69772130ff59a739c54c8853113475670af168c382638def33b59bed6da3e01ff70331df9c352f58bb32c8257c0d46b4f73bc42509c9609b710e3ce83d48fd4403064dbb2bd613bf356960e2ff81c5640dc8559f052de73df139882676537cc919c8e7c61539a5742bc33d95e60baa266284340a03b669b9dce6608aace9fc983158276e08369724558b1454c508a01b9a9e9d3e01971be429d92ecdb5330dc575471007e5720fbf34ccdab2962c8625980b879037e99e125531bae992405f136467673518db0448d32551e798b11550f1fc1084384910fe14057204f2f80bce1b7c55bc4354041a87b262365b821b2ec59a0b5eced0f09d3d902e02164ff4143c71408100a72ba6b9addab3d07106e36fa9441de1cef10c1838112854547d30c40f2ea47cf08c7f4e353d11fed7b2540a6fca0486a29e89dbb91a63fd52c04d91af676764073d6e2277a9eb10bf2bcf885aec2cbfbda53e4c115d3460ca10fccd2d1c2f1bc89f01ba296c37a702ce96fc05dc5fecfff295a983ba0f61bc5fb3df7427ed55b4a4b21c749a4aa7fb86f28da3a67341e03244f016b81870e3006dea1277058c4c9fff5bc9b51e28850538c8cc1df6f0d4763d3bd1698e9934536099cde74fc7db8d61795f00e5cd3fcb647950eff504618fc641ebba158fd1a0d18967fd0384a1ed72de8ba830335c0d578b60bca9eb5bd21e8948b5c0c3d2f721b30c5459fe32c1f2b95beb822619b07c9eee49997c06d69f17f367da5426a86905fb6325e0104886fb55418ccfdfadcdd44afc656b8cc9a60fb98e20bfaea72689a5dd96116314f6c3924dd3bad2bf3c63c753ade8070d8c3477c9c170a7c12dae15074f4d1d2fd6939b79b12b523b13fce7cc772603ca3c498f6f3e6ce66005d1db07f34a7d3a0474aeb67fa05ca637abd35132314b206db7f35e9fc5e7833023d46b1dc07f2094b4bfb1e112aa95a26c0d50fe6f7d63ae9f6ae407120c568fe71d05b423f4c21a805e45cf43f9eaee587a637af2093a60b936796f6d32e7a5da6278f9bd3426d25addd6a5a1c48d242bbad1bac93cb269b5c13292a592cbd70a3ddef23d55cba6b06c10b0f57f19b4e5954de7aaaad72a5f693804ce1cb03bfcc38d2f9cf764ee4d4b40d37ec1e6265acc8a5ea87884987ea158b8d69c3ddad023430674f6bd893ae6404e4449db97abc6925885c20feb4d24ef9b0010e33821577053674073827531042db4dd9df6acf33d86a05fa0d36bc5132c849d1bf21ba2873b8ad5adc4e8fbe9abb5d5710f12fcf8ef04c5e81686ab34b41ef644f1eca0855e713773fc584b2038d9a8d5b414e6d52da13cf70e9007905c3459223a3807586b8630a654d7e4e43e688a569e1abcb6a7c0e89bd64d42f0443dfa27b661231df6c83d919a9402a90adb19a10dd15a951161a7d596d11fc2f5e6cd6c65445b0910ed4e15c89d4a3d4af6c274457a9d9f5615176ad95f7a3f72770f51cfdbcddaeabf5998fe3d6110ce901d366ff6226686a3065594f312cd207cf3a5900c99ccdda8659d83e997d3c1d04d1fcced9609319df806829ef999b1983596df6a9289fbbad1045a53974ebfb6976dd355f110287dca8e6ae5dc8d1f4bf9ce7a60e04b355dc7520d913fba9604f7b56f6c22bbd6c84897d1a6eb5d4daf350b322565a912cc89ac97ba2e0b80ceca5850626e1758fa401d9baf2e982f863af3adadc17190cbb16e06a81bb025590fe2b620570553861e2880c21f66045f70ce42f1e4dfded9fa6881bdeeabacd4c191bac58ce94b090c374585d5cbc5992f03d501aec98275b8557872e25e5719ff4e72d33a19f774f5e3aeb5174ac6ee9f64b047662f667c3d8bffb2db8a064e736b1a796d6f94fc27b894f720b7aab67493108ce406e18cdf4e5f9a0bb4a140be050ba693b639689ce611db4ed2bd615f32e7ab9c411e81a49610197dfb1623a6cbc446a280b1fdedbc4890a4e3b4d676a486cfb3b18bd7672c40ccf5fe6831b5675b1a8af810de0da4a32b79620d4110b18659c550d47cc0d5ccefe2e07a3802071b27fae652730bc8c8ce3deaa2640841d5efb2bd05e468a0177a626bf6ec28c4f4818def3ba68c72c7723f91180dfd465a39f0faa7ad7448901880ed4579a66c9855b82e01802e06e5486fef0763c0d436f704ed9dbb30b641f911fd20b151f2e5a3a646d51aa4fe2f508c347d8dd6e93d851e6822771ff57903a3c9d7a9973e936e99b2ebe759b02aebd09ec5d55fd9df396572be7cc0596b645161ea4d3cfe6bbcdb44c0186af70c82c04a8f1c83eb2694654a0f57110c3268cac3c30c7e82e02a62615d6dc351b111014585ba863f183396d54aa7dc94e02ea49b73dcc5b47a52470214c5d68c524af0b6a10f7c97bcef5086e51b371204038939333f83a1860529a73fbb4fbac28ffbc3697745e15320845bd9a29cf14d2ead9d59543d0f8476234a8f3df7c4ee6f24435072cc48cdc66b2b0f9b0e7aaaee3874c055f3fa33d636d468df665bfbae7938115263b6cee7e471c4384a76c09121c586b4c068d9f83f7852c6b54da36295e8b1cf22b06f53c733f4bb65c5912456e94e2bdc103602be9e6a7527e31846562fddbf6d757776e20b4fc8e47783ef5c135bdb034ca001c9d678ee2ccda600f6c2b6585925cf3255b1425a82d447b1e101fdd973ac100905dace0a746d2a613ca23f2d272e1aa3de460cb8deed990ad0b69e917914c224ae8587f2a19f26cf3d1ffddec40e7d143c835cf470dfd3ca1750bd63c4b75deb75e1123c4921ebca54c52a9b5685140843f4186a2656497c006bd0a26e61cb3a4bde5d3cf06555e6b3557807119823804bf248d0f4defa9d78a7e5387dc4a4ebd23ff67d448e62e961d5b8f71fe324ec1ca09ce0b65d54a222a031f6443924cc405b5a81cbb274559b17a736d27b625d9ca5fedbc35b42110dbb277465c13ebc59cee79b3ed4f1bbcb3864e4c506ec3354549e39045e6ed533f848af6b10962dc99a9ba42cb9cdd4a3d55052cd5a2c8e99826352e5d1ec6a897dffb8ec1b6903882a685b4810227c2cbeb416d8987cdaadcceb491e40e45b272abef6468fa42d8bd1baf3a3a6b6e659a10732c84f7bf1a6d3ef316656a5d1b5aed213d76c9f9957717a1091c948475dbbf33183a4c44b4a093b67602a78d4485818077ca55793ec63d07155e9c6d4cd6d46d7e5f8e7af8df4b25ced92b9da0b3b8d93e856a4d43ac617ae7fb5a665b993252e410574df894c5198e5992afa3884f6d5d24d4dfec723984317f19323083382544b507b28f2d9813090db93bebbaa8b28097fd1bf6075a71325eb10fd120c0099cf80ed79acf6b692483b6654fd82a00781aa095de8f3d233920f0af4050609dd5cf2961c59e7888e6dcc0b37b9b54aa09177834ca85b4a6e646d466c0e4b3b3c948ab7d3634e82b46dcb2f06ef5b4c22aa75dc3a9f44ba92964e951abaa5aa205171367915fea431f3b26d6da8e85b8fd7610cad07c2ed179cdeab18aef5b0d1ad8980cbc4942a3dc1a017c9a362a9e4766b86de24b87270a67a313e46475d13db5635b463780cc012e7e968167084edb940c93278b48365d130faab4fb6edd09e1a9f8ef61612f7a76f5ae8f14387b1a17c821f9839342b797f4fb989d5881b8db8fda6d094f44da8354b1592eb60de94dec5b3dc6152d225e9a9e42140e3ebd99f074518c720a25b78f5ebe3427eb2928099bb629ee9823537f72bea042c52079d404726cb25bb1a75da9328250805634f908322ab74fcba9133ffc4f1d9a20b5f15a70edc2e1f3abe989d5d60c414a2724a38d0144cd59962db274f8d634bba5b50c2896b6fb11d8360edfb484fabbb854205de20eeb8493f41f04273cc9ebafe022692a5046a5162786fcd9116bdd7c9ca521ca6c69e86a767f2138ee4666decb64cc3585776a0a1fac44791fc3019ea032bb3238c58e7304d85526b057022fd9fe0c2f744b4418d1e37ad29c58c0b0b9648a2b8d9476594c3915eabbc58aa96c93eafc408a1c9c036edc7d351f70651934e8fc55ddf9b61dab86e6934aea054a2ac222b54892623eddc1d985893c2d61e73cc3dd12bcb025940d5c2600d97fbd7099414e990198d5d14708793eb9cd7062c5b2ca4d9de0200604c650064ced64fc80e9b3cf979b9add39a36f85dd1fa1fcc1c46fb80435a150101de53a715b5e34236e732df5beca41dc36489ee6c620ea83262628743a3358de68fab9729126d55a18bb758983fa8b58dde23dc7225b44e2b58e07162c4445335495c938a0c31363c566a9f4f86f43e36609cc4848adc23ea1367d120fc174a339d1a7a52eaf8abfd7fdc2f44d922fb226c72d88961adff7654911d4528aac266bb54e1f4417a181aeba2db9ba8d4867d58458abf63cabf42ffc8e0dfd1c55d1579809589907ae53a38521078389ce00b57d89cc6ba708244b663854489d957a38fa58e6c43218d922bdcf6f49f2db6f11d3c59ca36aa7d523de3a1ee6b4148284063c340cc4d2ca63e7cdcaa8021275fac1de2a2129723860c9f61031c3d35ee296dc451012acc784cd25b7ba377c3022dea30234354d681de2edab8d1c936d1e374ba681047e5931db6e403788e3e888f04fd9eca88881a388f2f35d964433e7fd0833c233aab0b765b7431ec82182d0b4d75a44893b83d9c87e1aef731305e159e98eec50e50967adcd7c692387ff64f213172a85301df1a169636df1f991e45277b95f231a64d42d0998b9bd5ee264c0b9ad9f76792e530be8c0a7a7e0020c98f47f73d6a1581fcb01f3b172839552456221e2314724a29b915e57a05dd07a6b0727245e356d13e3e65894e637b2d05ada044fb0e6b11f118dd0cefd3d317d31e96db9878880b9eeec831c83ed3bb0d3273ec6571bf6f8fada1fab711997d3b29126b8741961f8fb62ab25012c92498cee4bb986b3c2c4d66ca6608ee9f5ec7646ed43d36b0950f60381d1f08914c4728016c36b78a0e5abf8051c5428b0a741a64a2c11e3e65afe4adc681b04eac9cab98fdc96e6109238e3b919972b15ff09c58f030836d6cda2424963ad8bfbae420e469a49a24c76cc8c49560f9778c857a3f79a58df22148d376e910a884fb22556c6b42b7ec44c61783bded08df96dee4a6c4b395db4d8de5ed81272a61bad2ba242b9796402ba97493ee62da1282148d2da6ed2bbfaaa658be29823785d47021a3b8c84d2e57060510dc7fb1e901e465f49612aaba2b3a531a5028199d64df311122041ee9072f7ccf35f501c2e889c1226c5eb6a1b2c481b6a84180322eec52a07e3688064991fcf9d8fb8bde894e11d83de2f7c3eb0f0f9008ce0b691fc8f84630dd5819900c84bcd19701f61071c023a296c1e3bcd2892e446c8a1dc3687a56a18433ecd9a1273c670698307bfd42964daadc4d9df4ec14c5818b2265cc2b26236c3ca30b03e0ab5839ae2aeb07f322aa19d69832db699e66d70cffbf2ba1d50cb723fb4c88fa5ff0045300abc39b1b3b500212274f42c1fd2cfb92e9da96e78b0967e3e6146bdf93b192452836728996af0fc55ebfa7cd73df89adf6607c7fa4b0b4c279ac22260076214ef932f2b794bd556b08c2510a5670aa22f5882b72f46a8fd671eb2e96fde51453e47ea85be84da5ea5662e1fbfe03f3a12d44054a50cf6b96da37fefa89c2976ea31cedf0191ba45ef0074347aa4a75460d57f170690f37f2c3e2e350d06c9782c8212ebe92cc75203f5dc89286a9d344b83df026e5bd3b634fd6a2a22b5132b7aa1fb56d9a1f0d18d3fe862a3661a2e1ca782deebf1f81e8ffe8528bd42bf0a45401aaf81276253279bb6858bc3c9574c2a0b4288135e2dd082b08187249e5251e2ea9cce798dcc5952ae89ee8c39ee04fec0f324113c76bfc6489fb501bef1899b96986cd243ffdc4f1707b95e76d3542bcbdab59ac1a7babf0a2ed19d0410613b98696f2a8203206a17dfb8936713b051576a68919bae21e884b66b23996155b2cd501a3009d21ad0a14403842ed6347d7817f0fdb65ae9504e4503429b4cd312ce27fac3360307e0c15876e98193843ec1f4b98210004c8a9b20bb3423c8686d6cbda36b2e99a5e86ade92290168e9a4d200f53fde78f13111fc08e111809efc1a6f580f4eb98357596e291bd72b52c0c54051b57231ca4063215f0eb327eae188f79a10842032eea1bd9802edad0d0401286bbf9ce79fb730e0d18ddaf5479d4d8253adf3f11923daff4e08d6009e4c667d8dae932a88f4a038d0adfcc45d3a6449361e48175536384426b0ca751732b8975d24a4ba9179affc8642daee8a999f0c313ce5e630ead987cb3b2527edac1e79001cff41238a9232aafeeac8ad0fbaa3615dff1d8565e305223e06b82c776fa948ef02b95d2d50c7cb720c6556de0ea8a4441dc29b02c7d28f8cc1ded4512639a20383c019c70034bd7e854ba07a8d653a3c7ec707675e7a20dd510563c5177b1ea76ef9a17af9f7d7c529c22ace19a34e5e395912c246bab9be79007dfa5eb736aedf49bd75523fd2d6f79256b73d1b68b88eb70ed3488f0bf968446559bf686b9d0ebf738abaaad8aff561e935327804a966c9cdedb44492759ef24230091dd379256dd4260becb91021e04a353e995255226d829e6b4b97e00d4a362e4a1948a304fc3696e223da8f5fbfedb30c16376d2a345f3f81915dd5127bf7c46db2438ded97cd7f248ed728d5e1a4f79a519d99c1be2a7b796ed849b0dd2ef5373460089605cc5dd77298eef4c36511b4960affb8b9bf1bcf69c048d663143091a87a57aa598a7d7558fd757a4590ca408680cabe3d104970866ec4b3e6462498fdc21df5493a51432a6864a6fb737926f636c7b145d99ec21da902fc5c5c4719e5425619196de195bd2e0e202ab53463f3fce50de33f6a91558ab1a32447718b048e49414b21034f33b6c53fd64c818b11a85550a6f071b5449717fcf198f39dac597c43476654b0861b2bc032241cf0ef012b4e5897ff821c141243a5744b348c0b188f501bdacc06804120df2b4dc83f03bc70b2667c5eaba9afb4846cfda27f65ecc4a662da3ac0381abdd5ec8aaa9d5444b2c4486846169daab6a855902932117b4e765524c5c274bb8cbaf4c4f1938f903f48375e5e73730d855f464c2666d069ff231fc0d31e3e210ce7975f23771b249754fc3f9f4d63138d8be76cc0d590f195dc25e0493c938a6a9db965a99d1ffb32a2b15646f93455af4eec972eaad41df570ca239bc4c976de433a8dabb61ba8332fdfb1cb347b7f1e1174821cb8ca3cc88b93fc38067e2c40b554f80b5e1778096ee27e5912794766632ced6125c8859ffe61398d8c3c5b70c67b0c8355289f103ac2a6984ec2f612fb4cb4e00bd45a285d340f62ea1804734644940daff47693bff3ecb44cb58ade8d4e7f2c489b3a563d08c40e7a2a33c1368fae55551d4457f8bd5b898486624d492de4c3e813cf61bf9bf6919b77e89bcd112c59b8cd7a95527231dd306b2d1eefbeba95c331e278409c0c70ce1ea0a1691f902bdbdd799be610017afaef9441d1999cad15bdab116bc2f011032d412be00bec44c3984fbcf1c9f15ed8d8d61261a9ef04da58676683619445f737151dca7d62bce92196ee3da4ddccbcabc7d9b546b1e822a7c0ede1a00fa0f9eba0f32d09813efb8f4272a729ba83bd719233f4ca231332990380023456a0d8fb5986fa0257fd856c0b8b60eebd20894505b1a79b312029730a4d8013eb8cc3da94b2155544605a99cdf119299901e19d0c8074814a15804b7d451c2b3e1716fa25993f635d999a3af79735c0b8dae94d20a6d51c4a7e0c5c27e55dc33578a5b853586efc0135440a893277c9bf141e619f06a5ce0222ad5c0f4cafaf862bdfa4c1d0d7e6007ba7a82203e737f7de6930e10ec349a200a9649506a4b23c860f829c4ff3291caac13ae690443a62414f2e15c7104b48346cb89e9e4a2cb89d15c02b3fe8e55e61ba7a57b9c82cdf0f1bee16f7aa1949d99bf0b9fec24a000cb798ef2d756928b644dca755b84772933a9d56d0dfe25eb47c61112ad29b8b7c9782e64a2b6dee6e1ff6045cdbd4dc6fb2113b5f5360fff072b23bb910c2b4a5cdb5078949929596db3e04b5a51e2de86c0cbcc44c97a9b013fd38a12f73004decc1c43d7dc3b707ea2e60f56c65f71eeac0c0800d595ca3fa1f3628083b20696d2676765d3a59e8b85dba7b71ef467dc2fe86f55ae1d178b6df6f9de7a2c54ece79d935b52c69f89dd9b0775ea5f709fc66e1b663c35277717913cff415cf3759811d8b9e3793be3e78e4ac6bf77d374e8e9d3980c44a91b4aac8cf8c82a4fe7465d57656a3fc035b7f32447081eca6cb15042d566415cbcd74a01a4468ab708ede2d046de49035fa1cb837b5a2a5baea848adcfe56bd3dc2969daa66802f4b9b423d05be40f7f24305e0bc42258e578c5f2a2fb0a3a7b0db3aa5a887b4eaa9c64bbfc8dd1e804915bc2dae22ae6c32ef2b8db59815d5559c04ca6286041064c37a332c0f83c59c516b9db8bff4eb0f3ba2f3ee3eda223b0abd0682912996df8f432b28fa1079718f10792ed271c37e9589b1dd0882aa079f9b8acc47c94e46eb15558a72e7cdb094087188029d60bfcc478b422b17c9f58cd160504d0ae6de6058cd25dd700bbf12972fdfcf7cae2efb2987b87e1197aac43e0291f2f57ab7818c3f703443592d46af71e1b0274841328ffadaa68f25d4c7e35453039f6d4ed071704212188889366c309d7978ecc73e5dfe31c675f473aea5b422996f3d3b1d5a874667f7738f91e51c8263bc73ceeeb21dec8f153db69022a6ba4aecb0e7dd5daa6e694f01decfdd58aa3e4b7f8e55c0d8f6b8847c475dfc09a17cdbf59d8b4c0adb1a040f577532c09736058fbee20d1b17da027e3d506ee481d91ce5d970dcdf31a57548d5f013712d5f261d1d67594f568433d086442650104d79856d677624b9ab7ef560cceedb48f1ef93e213e124788a263f2cbeaceeb1716ee63d4661fa3e204334f948a249ae6b0f68e48c43843230c8002a794b209c085793cb103d31e2766ee92455b41b4159a1cf93cc05454af5898725c03c9813cce837e19ad3d9f94d22c6b8bbb7c84352d9d244a80892c1bae14a094e59a0b2e6bd4810f2d5cf7270bde95ed0a337a77c27ad772bc1ab7e9d8d0bbd4f7124d07470ac5a1f51705f144c14b1fccb443551e4f2cd025da71ca188924b2b85e49cbc8aae10c19a95e0b74efa5d09ee69dab5d2d91841916579425c1ec8e3e4fa099261011018520449276a0ccb2fa252848435b03a5aeb8a159e7034988314fa4ab7c0e4687965e0586464e79cd2a25615c7998b5d487d4a08ef011e39f6b50af2d75cac435a5daf8ad1edfb401a57d834e194c81d91c1b15a406f6a6c09abbf9309f5bbfd9e17dc8645b4c1cb7be5e32bc8e94b7a27ad20ae22fc49651db564f906fc15259237e4229119a15dbb74a270463524b1924ee1d46148c8f3784ea854531b9be4194b00b2667d226cacbcfb2f806bcd3c900614f5a1e4acb823710fbee902e4d22ede855fadd69d0c18774237f45291804a87668bfa66d7f49c7490ae73980771edfe3b227c3e6e417b8c072151c1a7d2f22fe6dee7ffc01b02176cb97d7cae1e5b8846299720261b1c53167568620fbf4ef0b8045e3b82aef55416ff63432f6fe11970c123da703605a87bc877d0114be165f5925bd77c66cc8ca68f0304909e46785ed8c662b1e50e6842adfabd60900985537088647410e56979ea699c098b63aa2942609f082c6d11ae413dde2c3fbb885915ab630b50385a264ed6628207abff3f110838842e87b70b5090f7b7f5db9db5e97c2e1e8ae8b01eb495310c12b188b30fe71022c94b0ca09a80e6373ef6ae772a526d8c7dfdefdb9b22a373a47c1e153bf9df4ab3910eb4a170ac0079dc3d1ca1eda639002d1b4f4366e1e3ef3291495575719db5f3d8f264c299394211f5f417b0cdf708b0151a68c757614f41c6206fea18e0c40d13bbc9b55aa4f73b2d197a5f9aab43bbc2793582a23ee0a39b3e28a7cb286f30a6619485c54191a9c3696b7f4645ace388905d9e74ee7aa09b99d2aa425381967ea4775563c452af1c2ecf98a677e75615ea43c60275860180d48f618469bcf32d2179ce2cc8d6454e8ce35d016df12c70eb303a3043196e0e7d2cfcfe0574b5b463f884dc7208c60eca7d1bf4d937ee45564b3599a491421281fa4c0214e8cb8fda6cb623184aaa1df64a9849fd00cda62328fa558c77be28fb0ef9473dd60fd6a6696eb196adc05b7aa883b399146e183e45505b34f634069e4914fa41b9ce5dcae2cd2f8bd0ee67da6c06484e9c5a27231c7b0a8dad730554ee7cdbad1a123fa0e49b6f83633c799a9017107099fd2397785e30bccd66a56b792ce06da9f3ef82533cc2e462a6f3bd4803cc2ccac05ddd66ce3e648947dc0f5841b8ce019437c7bc807afdce0a91ebc231e58083fbeb65bb737fbf531e9bf16a71518dc52016aaab0ececf3b65ba35a465365d894b1149dbb7189dd1260af6d12d238f0e40ec9c4fed2a1d9c0a1e1904ba44dc6e1e9859d96c0553e7eae08e6b489fe2fa55f5b5b870b9b485ae13fa5eb3ead915ae8aafc3cf744c0a2b52556312da8a0b67650c4e9521312c60087c1c1078a6548e0d529863d44b44546a8d06c1be28d1ee96234ce9e7b313d0a68ed10ca5a13badf70a6d0d4496ccda6b95f48dd8f945bb5e438e435abb72d6508c50715c638bcd3c80f37eb5b8c429d95cf150143c7760988c90036eaa7d885a03aada6b65aa0be1e042cf7437e688c8d143832ed73547ddd925f717024a5fb10bd5e7e4e805b4acd677dc16c3e9d83f61990ae292014167384c1a6bfa982eedaaf29477ce3aeab3cb045ca8f475834d80f5e579dc630638c345305891889374aa12e12a2c204798096cbd2264e9794ffea958ab6a16bdaf905a1285a45bb900fb36b7ce9ccaa3ec10a097210d2d2299ad78df5a9e750b3d8510cdead4fc3b870a23d18b6260bf54219c1dc42395d01ed440fa712d5488f65010d3d82439b8a6fa1642b748b22e1de5338d138bbf18eeb24628f47c9eeb4ce41b0ffbe5374d5041ac05eddd6506c9fe40e61861414d2dda2108fc1ba0d748c4790b8913796473663bea8b5b0e29120b69f5cea85b09afd1337627badd52c921867c449beb004889af1c3099a9e897ec770bb12100923c10015aca2329f337a4ea9f5fc8a754ae2670c37fce49b83afa01bce09e06470d6a7ecce355583a767152ac8443915adf17cd2e724e0d1d91948b425ac41853f4ef19ba33c9e3ab0b877b533c26422a56126d5063c7d57d36d26632cad4cae4d2513e0187c4bad8c4f227196252443761ca85c52d3e25883dc4ad3c59c255af7123e2ac460c7f448b0b9499cd64fcb87d570781477055bd16508404ec64c76b365e508e13e31c95cd4cfe47074555bea7451c551551526546990d4decb989eeba257c37f4fc188cef8ad0847f06c95f05ac883fd547fe5f8477ac33c50d520509435cc83e1336c14b8b3f8d43580e6b413a50a0cc1a010e14cf4f8cc1982e666eb0bb505a00ab3727a6c1c594b0ba0d663ad7521f0017103278e88512f89dd4b68d1bed30a9696f795c6685c1d512b8908cb02ec0b0e39d13e9b996e773116632f020c241271f44e6bb912411771ec4f10e6a38ae3a2ec64b5228c88c8073d99fd392d43a13f56fe61fdfe15ff6e37dd8841383f837c110878d6f840c3f5febbd352491c73c7b46a9aa3ce0a03bc899644b8996b4a9b7b7d28f2fd8d241e3ee9f74fed5983ee262c6d73e769e5c11a1a739406f4dc88712fca80858453024fa32afcb08d44cb97ee2d6c09af430c9cf3f28051c4814ba80865ec2a4d2cfecefa846869130aaf1ef3571222e063069332aea68ba089220b9e2e3704f7be1397af5284f7b46156fa689e02ee21279c0203263c76698afeb0bdc0e0342c2931692c66202fbccab4ae204abc78bd804ce139b5d2cd86ae9678ef86bf017535afcbe302a2d62342a3d39c282b71aab990e8ba4aded84477468fe35848ec854b25f1d8224994af4043f7c32c37cdfc6de126c78565fe32b3055addae90e59f0e0b24f6f9028d3782e31cbedde46998dee449064cbff060fd02659742bd06551240835e3915e30236f8c8d1f2dd3e84caa44f08ec734278ed2d2775678b8236731e381ef0fd1fbcd9c72ec1043a59108fc567dce6c8ebc0443c32d2abb5b69cd6cd7be52fa6c9762020839f5a83154c1b66a52ead4b9536e705abd9a35a8a3eebec33c208490b0462ccbc8934cf131b7939ee61e562cf516989add2a8f3bb6fa2bc5f6735d1b5a56c5180593a537515a5383b2d08c3f44c5205da78569596bbe838f54b31632f3fe2d07b413c7b5abbc0da791b233696ebe6f651bb4c16228363cce68ab416574d4ce102eb3d090ac197bd8cc0b6b9501e51c38ad836f14e0caa526c3c62c411a3c2402ce558bb4fc5e40f21f34901209adf271ef8f10f9702cc13f169a15902e673adbe6c20c314f128871e83e7ec2c445a4155c5e658c18f507fa2ab7dfc3637ea18d91dc8028379528c10f2e81e4e44794f47bd33b7c0b36c2dc058a9f381e1f6c545eb7684365cae326f1d79ab783323839a08553323e3910b18806dd50373a5c0cc126364df754d61c81cae9cf1140a0e466be7cfa05454df41a8e94cab8a73f4e77947d5baf28208e80fe52a84727e4583b466e09946876f0d6352025765ad69cad571f0e929cc18a6ab6bd7d41eda8bd5c2668852882526e5bdb8f3d947083342e4f9b02b268c13c9523d183d9193b54947f8bfa33e092fc37b00da7f8259168cf648689c874c9847a211bf9f11b10483a6f1e992452a844e2e942f3fda31ee66b2f69e423e9d87b7b741c28dbb123b867775f2285a740403c1fe1f70ca37fa444798f6bf4a3767d0c8f62ebfe52783a12ecbfa67aa2566597c906ee65715cf034d055ccee0243eea0d889e7f48977c803cc2cef19a8f998afcb7b71c00d240fb1689956709e1304aec9adfacd255c40035fd2cd2dd43cc2090f78151d3d7aa02c2ccceb88cecb025444466a28edff6330137862ac1b9bac8ea55d9d1a321abae1b6cbf2c21ebb85a00cea7611b7b24526a62f819e65391165e17a269a2c935ac8f3ce6d7629a7fddc8bdf4b3b4d2f72c18c309d049fd396c5efa5ce064c78a9b7dffd9367a8a75f4ef396acfbe773bd826dd61c9ba776745a4fe2cbf0ac165c86a1937656be31911fca0f926a5b5174989ac33e934b2b4d4d8c88f42b41b7cc9bd9db25c8953796140010d6fa3c2371883de2d5933fd0e6b48e676f20272ad2fc4c404610f7e09cb44c3653bcd78241a9c64a1e5bc25d5b5ff38487a5e40127a23ce25b11f6c35da4457cd0d62a1e35daee35f56a41a96cbff66555d223122321a8857edcd2a54a9da1d6372bbf92befd2d89552e545a332c17c02c650d72b5a1f00e7d26841c55c11e8c0ed262e9b4a62723724ea12888ecb5bb619b07634494fc6c1a0cb3ca2544cda03ca70367d5b3090ba4a074d99b82bb83a909e855b61cd57efe5a24572dc177f2be3ba74494e1b7cdf28641ee726ebe9880f3c36b2030c8410080a955c64e9dd7d12fcdd220d5c0127ea6a0075c3fbf0c87864655193846cb9f7965b4a99649201ac075107b6072c1cf9ea5c25d421c40fa4b986b94f64e1338736d8abbdb237be42a05d5ee1bce0a5c521aa9fdb7395f062b6811687887efa1096964ec4e7a70f411b30687a384014f0d215d01f7c7422fed01341a63e3a91fbd003e1218410ce331fbb8f852340b1dda7836010057c742250e9a107cfbc262f2e70a8cfdad9127cb53310400021eb717f08477df521fcf4d52fde118f68f6ab9eb9b6d1999a723a4066d826bd76223cdc824c1f227cf58688f095b3d832b542fc0dd0cb834ebd20936af1c416443c759cfeaa6367be9e79ccab712381d64ef55755bdf486a87ee8623ec2270342880a512e3d3dee300a1fb729ae10ee7388c8af5b5c1002b643af5df6dc58b99fb42dbd96201d66799af7899279063a6462f070894c1299a49d26318c09f38351172937ce38910229c00441c50c199048f162e68929358040030c3e6471822a81132d47649220934406092d4fb6e83079d27ec23080c20573d2c9725a1d8e68d7139001d7e5c149e346d92f18718072ca092f5361c934b90282816460192a308ca4874b649a200571650a9923323b907142a609992664705801ca0a505680b2029415a0644175a69d524e29a79453ca29e594724a0a83185dea4045d114b500e6090ae986243494200903e64a5315269d110c62c0404515a143172965b808b30296e2593299260f97a0a2c828792a8b2e173432442a316ccccc90c1902038d4c36197203cb3ce33541454187f75a44e3d4a2191cb85e603e9e0f2e0ac63b4a8a593d2e974ead0c9029b983c5cf2e264757871824cdfff41155c18b664697a0aa2490c3f1fbc42c6991448c9e264c987333f1f04f3c112265a18a2690c120e3f1f24a304e53f58861502262e524451c225cacf076d70030719a878b141105f7ef8f9f808cf9319aa6cc961290cd2cfc7313c8c41d27f5c03120ec18e1a8401a9f876c8398686fe839af4a2972c8c3c8e7489001d5e9cbc60f13e513669d1cbd2c3a5289ca248fa782333dde8ecf9191925174d0ec10d68487c8a7d2bb0f0b2fbe24565d0e56d809ffa47e353afc60d23d3812eb88ce4d3118a3a91e7d68839ae0cac9442a96d74ae2eb8dd91669963184604cb32ea18a5543ead14a77ff24796744aea73ca8ec8a454fa94527acf233107e4c253a327b55be666df2d1c395272520402a29f0f2ed51475793ef31f948267e8c759ad1e9ea19f1b831b9dc41cd25b71dc930b97bae8f070a98b1190383d1ce9d207fceca5170497ba182d7509c11f41e986dd1e3d7a4750d09839face674a37f68851faf032a52b678c31b64b231e4e8ffad03f298d3409a1941eafc6919957a0b5b25ce8f001d9945fb5188679dff433d5b9db80ea75619763589679e51e737273410840051054c88ca318431996754420df18628488e8b37a619399903c3e1e0778de79ee9e695cdf34970e5da63a7ebf97a7e8663badeb71f96caf5da429e222454a2516c3308b61514af62e4f7a4b19190b8e3172471eb255c99dcbe8372ea4bc9447d7b8dccdb10d28f5c9dfecb6c52da6bce8352b902038cd0f3efa4d0e47ee96f3d12d12165d569b4af9758d6603baf7a6b66bdbaee8b68bc67df4ad093b63b310ea90117d3b4215e6da7c741935887e85a8f1d8c94e75f1e76f9ef9966d5adb1a736c77f3e8176703ba5bceb66da9cd664bdc1cdb70b8f57e6af3d8673b139944a414c24e41a4165054bedb2eb15fbd7a59e6b3fbee676c6b8c18c7239b727e193d5299faac7ff763adfffa379fef5fffaee7b6ce9ef2db1111ba5ffda66ccaa6bccf4278a3aa386236aa32554d794d79756b53356befa3f2a353a0f6624715d31220b12464913023c49ee049144d152ed47f5628034b4a28253d5c52e2ca439f0f979488a24413eb00d91a24b2cc5d564d0f7deb996b5996c5e5b7b2c7c6fb7a5a35ded78a48d76baa4d2a4ed36a1c1aad566e63e330b25235d168a3f136bfdee62a8fa330af7a514646469fea3ef93112f5996519ab95117d8c469e763fb31e599a5b2ff37c6209cd1387803bd18df8c848d18873a3efde70de0cefc6a39e8531ca4e21cac9d122e0b0b146a1049731a2904161505eccc13470117f042e8f4b3a7dc47252d9fb5a4c03b411dd4a713f46621adab35634f65b47a0c11d975d56224232e59ffdeb5fea39e5345d4db781948a26d541be517b605e31bfba946bb78b97fc5447bd7699e6dcd920229c39734606651ee7e55cde1da2e15ea22feda8f2cbf0d65b8352a08e1304db3cf8d5632f76d7ec125c5079cb5bac164631efc7a98d12074116d3f832d7eb71f58dca557118d7aad514f6c522366374799f11d4a17d8c4836ce62b55a5f34ea2b1cd53b119b1e6cccfbaa8d8d6f542eec9dcb236aa4d51737f3da3c1f1042f30facdcc62fe72d022bcfc683bde345a0c6a37900fcf961e5661fd736aa4ccc2fb4d3244308656af63cfb73ad943a8d2ab5d18b5e97908f1f7f773dac0bba8e18f31f5c4a7a5a32220a2ead5aca043c3dc0d39da7dd534a6bef4ccc55290ff3cdfb58ffd5e762e6e3baaec66e602a327a1a0f998a8ea04e64b19c9efb7087991059cd8098c327b2ba84114cf0c123b2220db4d15e91dc09977e74fd8edcd5971b50ab4664c1c8ea89aca6016d34ac483e560f1108bec780d7e5410ae1755d9727236b3a08b375822239a67f9757aed7ac1042a71ee41b420d398ca6947af5ee5565d827847be81d61d034145e3aa494d60e7a10429f1e14c23dbcd1855a65b79adecc9e9197f639ce0ff5351a3bbbebb51a3b3bfa9acd4abbd16468dce538aeda641c0db7719ce522c751c9712a8ee3b09556c3a59ae3aec91c94c171333c9092de715ac9322ccb325b6b36e79c13091d30cc6bf56093d2d78f4068522aa4aca79828a57d2ae516e68039364fa5bc421d99a7bc4f088cd25a70f95588ae727ee2badec63d2c6f99d674c50a627e01c8734f8039528e698fb9853936c7fcc21cd631c7e00e219857a84373cc59e92f5f427847ac2ebdbb0c6a5e44b21d3f752e08d1de820a444444440ef0d809ab710c09325e24e88252a1ef22df4d294ba65dd05addf20ef95404ea94b65c75d104254af61325fce81e29a594524a29a5e48123b2e27765fd707e9410011c3ca494ab9f61c5bdcc5bbcf470fa650f97e621a594524a29a594924b4f4b29a594524a29a5d4b1e2ceb0425b5ab5d643aaaf30f4cd5ebbcfae3bc68fbd8ffd72e7723612fa3ff615865e3af582b61e90046c033283daebe5170512d45eed56af23462fa5b49e759fce676ea96cf54e74ccfbb2312dadd5922daa45cb98a418eb6dcdf9baaa461fb94be7a3c05fce2c10be3a9446e464c2421dd531ef13ea9fce602aa59b8fee2e66ee8bb9abdce1bb7c5cce3d5d76213d9f42cf0771075e832ba4e72feb9f909eb9f5c0bc3add802e9942cf7f3f3e68fb36efebf9cda56736dea6fcc3a1e3fab77a7bf3d683b701781b796efcabecd6fb36d7fca663b7e96a3aa84a39af9ebd6f73f9aaeef3017c746d96f9495debe4671d7c2c859e9f5e90e418b85d4bd9542ae57d180b2e4eca873e2537efe320a53870e0c0e1d399ffd511919db3db5a3f9b6faf95d2eb32a169a6775790870271a75d06356000c738c7e1882c8823b2ba69a4677188318dae58cdd9d46380e7f3d3bb802daa976f92f2c03c1e918515e9ae897951c848641145d6ea6df7c12fefa97025c618636cb57ab4c8a38236573840649077c5652f4274698d4f569fd795cb358cb55f8dee227f5d770b6b694b47048ea7d6c07124064e81fd222f8dbc949794ed90c554d2be56afd55615b25a2721abc85f2c4c1a914acd3e514c504f7c1fe6de8aee77bf65b5f7dea0f847f7834e5bd1658faaa269c55ead90d56361ac85767a9d6ee76cca3aaed9c55ceadd845f697907f5cbfb30309765842cbec1b469fdac665e5d568f908575e02f67cc6f60aef116a45e9eed1734e5e480e085c7dc31ba5fa1016d4410bc68328194d325f49c1bb5da6b35c395c2c5d5693afdc79793a3d1ab47a540998753bd2239cf9d8d2c162bc775ba76b2cee83ce7ea725c4c2e5aadee1c2c53f90bfe2384f5d4e691c09af5ba01d9cb7ef233ec7eed2e3a3dd93c2997ad54a7033dc9b591c5ad299ac71c18336339fc987f1ce73e918b6eabc40922fbb998437ec6996759d6b17492b82b48fdbbac6a047a52da2e2a1fd235efeeb346fef217fcc772642ebf1097db4e88e91776cd8b3d883db9af7d26b10c286b39966118369f4807484fca314fd6aae07edcc77d9c3d91652dfb4025e69e761f8f8fe36453ee72b155c039b9264456742a975f6004999c88f1d16ff4d565c509569e384a53986b98984f4ade6656b9327b099dd29c1b27c87c76f6a2d2529355ea984b6451aea361e509c330ecbaa833f57082c8a72e9f7a56745164456f0e8ba5d7f47cc0a75ec4080eede92c97082262123129c6a53f21ee449fdc44c447563ac1cacd60a8adddcfbf595f8daff5e1a0f1afc73f1d58ade934393debc6bceb55d52aa3c33a1d55e79fdaac6a881a352d734d738e7754d7bc03de215df31cde415d7ae617e6bd01611f638c31c61865f08de85797d3e9f08da81a82084bd264ade17eadcfe68816c9b52474419b5b4f620c09d52d90ead6fb827adbdc7640aa6fde573d83cf5c6b17c4ae5dbe7597db2edbdab74ed38c50e2929c188802cdcbe72421a8a76b57477d7641f40aa2ce41edbd012959a6651a422e3f46f089d7e4cbe7e5f5783ca48df2c3f1892c1ea11559b127b2a2f7fd795d570e1a470707c706e40759ee693abbbbaff60dc8a75e1074d82d086d1537905eaece4b66e631b2c79561b5753eeb3eee694cc962462cd6e9cdc8d333a54e4e521931df1e4e900ebc5cf69e2a6ea4408c59c42c9afc07b3a0008d2997fd0bd1ea42a099bdb356bdb4b8fc93b707c820b2685875a5d3a5f19c5a38aeb4d77ac5bf05f0ed9f00be95be3b2271048f2d71bf7b395ea9ebf258acd67f3dd5bba9e1b6b3288f8077a217e1b484537791cdd301de890e829ae432f9c83a7c8ca208df880ecd10654af4aabb1ca1e722cf462e6e8b8bc33ef4ec4520df504c81b15564c56b7e5c8f1f91a579cc11270be1e69cd5ab57c493f073cf79cc6bb774fe68dbdbfb52e03ea87de8e306d4de5ea7bc707abc8e844f2fafd3a75724b2a45b2e30ae58c4d7545246de9171713f7e0c743784fd1b3224086e409e103f06a4376408bb0f610f6287ef84d570361ffacdd3e06f14f6601c205fcab7944f4fa55ce36b083fb679990ff843f88ced3af2e5237e66adeddab32e7edc7a5c76eb3e1ff0838444df7cfae6a5107d0251cfbace7cdb7c40aff6db8e88907c27cfcfdf2505450fb39b05651e0e90e8733a5f1b10ed2d731b5feb6fe8abcbf8b6e3332f03519c8050619a02c6004ad01aa66ca1c195f190698a1074cccd1e324df1e1caa5f190694a92abe87af090c9072fa238d12beecd43261fb65c3fdc0f1e32f940855271ef43261f6c905faeea21930f2f5c4c2eeb2193142de60d973e6492e204444a13931424350f9962a0019394234cd13e741d568d7ab176d598f59c54ce6c66f3ca4afde305703cb00dcf333c8490a13312bed23c7c858b7ca2e98b53164f63a0601025033116802476e0ac564fad52a5c22ca57c99b2ad4b62a840299d4e331d056de947d654f31e5494190d5a19269892bfb0e9f8c8969ca31be40b36fcf4c5338f994898a2e44005ccd12f347de6d806944d16301dfd50c77c95570bfeba500b94233f737c2005f0ed70e9db63e52ac69d20cd8622e5c414349a165b9c60826a71b224c5644518190f99ac30e2b9874c5678f162aebb95ae15045fe090f560c4c3d247c76e06430d9e600853450ba4a1249678818b19229cccd0821f99c34b094572dc618a8f7e7990b2c30e1f91b89795236b842063db745ec2200a28e63f28060e2fbc945ebfbcf48b83182f9d63e2a53bab65c44befc9a18b97ee73e4a5ff58f2d24b78f2d24dc0f2d24f70e2a5a390c54b261dba78c9f4c4882ea91e1ba26e50ba218a973e8fa0f1c0061d583668b1618a972e4f30034ad184066f08a6264b2fbd9bd0e1d182974d2f434082972198e225c7c40b499e14c99fae3b72e820e0a3d71a9a60828409121f996ab0e1638a8cc6524aa731b267a10d293556d5388dfba8f186348d0f3d775f54a968365775431f198b5e36ebf46692f60a8177f05f8e837744bf2e4f02713fc9499e17fc47083aa4cf9c9176ce0e82f9e63e30dfbc4dbefd2e9fd4c76587fee2cfbc10f8c6ac3a2e7ce27ae25b24a06eed0677daaec4b8b0b35454a954eee37a43facc99a1576d9b1702dfc8dc761f8e0dc8076f238b85fa86e699d26194352e166f10903ebdb81ae27aef58e1b88844a475d2a54fcb2c8b54d324efc85c4a2965563720ea725a49a9f70935abc697ed1b7ae9655ec3e2c85c76d4b46d046b9d85b79aec34cd33979de694665d8b6f48293d73aca5cc5ccacc356fc8f599cc780372e910bbbc95aa562d57e6b6a47e75b6062bb2da755250482aa167bf6ee2a143efc301125fe20069e221d3fbc4ae01d006f4abf349331cdb886fef24a8831b07dfde37803a261f61484951292e45272b574ddc466a22a08e8b269aa141d415ed3c3727e0a8eb7fd583872b32f76b242d488dc448edb5decb71ee2c5623417160dc9c877ef5091e697a4d8494fb452824a84886990c8c5050078c6560b401ec23b063805d03ec1c6047e9179a9e52388513164f62a0ba880a83cd401c10b5f0ed3218550f02d0060d1a4a404a3ec685599ec6ba0feb17da6856f25f2341809de2eda47628ffe251962f425d556a9b5795daa6d7a3a3a323f6329aa7f1aece55deb7c34a79df015a09b01e13d7ff8b5050cd138fe04efb51848a50ff42d453efbb2b192ebb4f9cf1d0a573605c0e22355223359254c269c2817167771707c6950fbda14e77c7047c1f00ee74ecee8edd1d7b058216d7fdd3f2ba69d0a0ceec1d0e8c1b9f88fc6f7b7a405b87d3a58c25ac8edc59c2f48cf00f4e8dac58711e32f14292b622a7a014a318849f7daeccadf1337d356f48a016f244876ee78d3b13da98fec16debcc2ff791f9e543dfd755dd275fe5b4fb5878ea5dcae176bba157755bca0b816f6cdedd87e3b7eab6d3bcac1bd2988dbad2f9650ca87747e99412ce09bf296d0f8600bb5b563ba5ec8be7115a56255766ce79f9ac994f677160dcb891205de30d489338af4dcb817169da6987039fa6ca750b615bedd21e1c9135dde6e9b2479d2967602619941e3229d9e19d78c82443d3b7a62a5a7a18be7c7b42f135c0fd27c4a91ea61e5ebbfd06eeb7cb6e03dcb77337b4016d48efeb97d3fba4772d37370ed1282a894ba25134323afae4474a2f4aa9fbc4219edd15f10d6e676f2d46d91d5b4a6e863db0922953921425e12953b40871113315a0800915285204082efa4f0814437bd2b2809a16da93f6b465f5615cc67ee0612b97e33aac1a2d1c9147d482e33f211e2184160c618411829850524ef84139a178442c8caeeb0abaae1a737c975063984398f1180ccba606a15f1d3ff18d09e7f44bce39e575fd116f54fa802f619d49300ba156a224499109499460e1b690144e08215c795bdc8fe3725c8755a385a307fb814753ee1e8c8ee477acb1e3a4eb9a576b2e3b195d4a8e31b68cb5b3432eb36850077eb465c3ee86dd43334e969c9818238cfe3da79c52f64492f4a5892d26b01256c249b8c8044ea28495c04049966893f00e254f48092bd3c5a23d690e3b87115e3f61d74d78c60e3613be013d7a1bf10d8e4fcd846fb0472f12bd9bc02e4a28bfe8264f392b0ecbfd723e213a4c784737a95a5cd8026bebf5723ff7272e495fbe5891850973cc6c4fc22c7ecc98304f2684e131636618a334576178c7982a98e0b670dc15cdae697093b0fbf269d99dbc6cf4ea3e9152cce910ae5ee9b740a4a50631be000fb5c080f4b51bc8f5d850924f0fb9be3a0b3f3fa1d8b63bc91d095c04dfe86622f886e422f8869643769c34a56cdad939e4fa9803667c69c1492f592a71bf95e5d627c445f00e98f4d8172ecbe59a2906271f9d19de405dea1f637986351aea20e24244f40365fccdeab5696767f31ab5b3ab79edb2b3a3f9fb1a6667a77a2db3b34bbda6d9d96d6f5fdb527676d96b2a3b3b2cd5fb869e27e6b3e3ea18333b8631d67152bd9c46c734984607dd8dcf70ac93e1343a1ff067c00d6886907cce57be9abeba78e557adce7541406a77318c2c5fb94f0bc99f38501efd388247477509fe8c8e9b74eca4e31de6aa63a26e84ce01517cb4a1f220b4b17510dab0700a09c04f8419b817dc0f3047467e7aac18d395a82adb03be4730f420c4dc48f5a118349f1f98d75a6fefb0675df58990b1fa9444939107f3d89394540411b08824099388d0aa6846714954128d8ad09e82a8533020ea513d52a22449110ef2ada60584485a54f29f1028847b3bc6da5864612cb263ec188a45ab9107731877bcd9dddd0c357b466f86e96e9e1e3b138a3054479fdd55be09347bb7068c69d76175ec18636ce9c106838912f8845da94758105984c027ecca11060416041177477125c7a0411de6c144f8be0177c6b897241ad223f5d25301da68df64b8d1b92d8d312e547daba08ed6a541a3a6e6bfd48d4f7ddf8036fa06d7ff8337be9b38e945f50d34f942fc0d880ffd9d87798340d16e96460ff70625a49c1e646889a0e974621933330719c2926d40a09216194e9633d01e422ddf59b064810938c04e6caf7f48726bd120d4b14168b50c422c4619bf47f4873576778c31c68b4e771859f7638c0c2156c54d6d364b518c488f081f47056db04a45af9a4aa552f5c29ebd6ddba08e4cb32cad7d0b75404e41556a4ba5346823ba26758041694bcd910de021d308a23ec3e2c47ac844021caa305d3d3c7c2ee7371e320501441521fe6369e1281b73a4c07d1067504f4e4d4b4a4948578ed82816e15e85c88a27f40eff681ee9ed0292a11e965802e384458aa6277ea687045e91440a72e0430b6248e1e2477a3f7a87abfcc7a2f21f549af21f74f2e13f1825e53f2e8af21f1f1dfd84c23dfc500e4a4e30c98194264896b8010b14588c608a26627ebe1e1fc199a72354c80065889ff63ed8340130aa2001144c7048828a9fe87d108a8a94184ca194e44853153f1f132911031458ac7061049412fc7cece4875010841461a23489a1010f2e94408a1f50f00405647eae089324c5881374d1f2f3f1d3330f7f63a60520c2d4e00551133f3c46182f2e000388235954f02d110518635eb0e108a79f1806892849086145115d7ed87f344f0698e4a0065996a8d2058b1fde4206304c31b8a0490f3fec459a0707942e49ac20d51005f5c3314a942faa3c5d9145d20f3f154b74c1c592308650fae1214a0cb1022a5a80b1a48a1f5e618b2565a238e104c5183f1cf5d891164fb015c84adc604b0c506376f042871f760eb25776ae6904a62b924022660c2e8a600d9cb0e202a829aab0228a1d70ba73a830d384104994e9e169064d3c597d418264440f5dd840c30f7428c4eaacece57874a09ce1743f3bbdad174a7270022647b628fdb4d7e611400b68600325304bba5cf13375f86609e9692df958ad2a2268f720be1b28c7855b1f3255f1213ad489392053151f9e95e6151d63ec18bb2f4969c7183bc6ee29238451f2b4831039c6fbb2f6ce45a7ac2a1e38b6bce4a493ce0abd5eb5d65ab138bd8c33c8dd0b6b6b9aad7e29d13e7eaf0647dbddedff2d799ee1356adbb1a74f9f36570be493ef09f1675aea6381051e8ab193d0204f8741d063535b05f00100400defbbc352bf69ad699aa6659b4d7d0b60a3671a9e5d4b7543155441155441154c41ac5edbbcce1042db1dfca47f42ccdbdbece10604fbee3eef39cb43a587369657fe8556b37496a0fe644b2925ab6abd977316845ea5920870f60039ae56cb5083b08360f350ef6e4c5eddddddddddf6e68bcbd069c4b08591cc6e0c08086bc3686fc2b8ecddd65e950a32cd6e2939654e393b9bd252b4064b75699881b8ec0c7724f6ed1a4d0d949a8bdaac2e3a65f394cd5d6859420bd3482c35ed9a8d14c34316be304c7b28ac6ea0dcc890aa4b539392615bb501754a4a29b12733b8ab3b4a0c0f9ceae969b5582cf7a6a6a65b816fe739e7a41c8dad884c632bb889a7c03c1c8c8595cbee243a894eda738269b6a8a3931a452c96dd521947e5ca5aa4a654d539d5d52fe60b0b0a4f01a7040e1ec8139f4460c28b151f5be0a4a8cec08353bde2537c8af1899b7a0706947a7b8a36531a9bd2ccb96d40b3bbbbbbbbbbbbbbbbbbbbbbbb250a10aa264a8d8dd4a04427f109e4c18a7ce8a22229ae2c82ab1b1c38120079e213ccc2e4a4a8a8e8a8293eb15399eb04cb4f2030cb4fc9a9d9d4d3d36ab158ee51faa836205069b6c7434045453236011ca1655b8a46ca194c7cec204f54dad26c06293a8184f4c3654f6a4fc6cd0c1a1d68da7f9d1481129ab2db3c9867552efbc7663880d51c0fea0f1f0f2e255f5850780a3825f804423c74a6421770c205cdb4526423239e8179b89c273514ab844eea1d2f64cce0681ce0a6d5ba9131834bc0aaa7c7c8c8c8a886c6a6360fe690d53bde3b3db877d266752383460dc75d154d07bdc6d249b091803c9847cc6333bde5399a595d1e0c42164016440b409e8ed18331888cd43bd19de8a4de899d947495222b06d1888f4e7313866bcc344f1b0177a26721622a5281d1154ec01c91f9d865da86e8b27f9db4ba5042a4d4a602808ed5326cdb54291d309a5461e24495a2112c598286a162834974691e325181c2818a9374c14d3d64a2d28494e2660f99a828514962a26234918080830e72a498f980051fe03c69f2a0b69202d0c115a29c1c40a0c183139cda3222a2c1d95beb9582d441f3b45a356a060d302a194f8ab8276e6e7a3033838624eeeae849060d3900c0e607a29b331dd44c595a81f980c607271b2f35f78a52cd12342a1d90689600b14af5907497d870b35159528121006be54a4a0b1a2d87a8cd8b2a9b526493b0c176d080a8a951990ef7aa4284d140a12055a6195cd02615a24b0664b4284ea0c8f9a9a2b4fd1c1d31290962f513a4e7a8d4ceb6342d646848000000d31400002010088743229158341c8a9a28fc14000d7c8844725c341747a31c876114838c31041902083106180366c666c4020267a54243728ecebeb32285ec38945cdcf589a9d9dd716334f5b571d6327ef39d371082c1ca936719aebf8a2b9df749de4a0a5663203197f16f5bdc83ec3e91c552f70f8b56964329e8dc486a94c6917bd75f1f201721ebc114eeaf229ad548c3df4a8458379cf5cd8d4338e691d7242320d022da2ea919dd51f32950074ba34ff67f46f8fbcdf462edb5e87102252472fce98a0ed5e6a6df384cc3343ecd8498c8299363b0849839d12532f1c93f34db5247d11b41b491409d3844b71667615cd7373e85d121fd3f1694d5a328afeccfa9107eca0eb5c1e6226bdddd1a4683bb3fd475e657cb0b5b27be3ce6bab2bc117b97f9349ec64e7154ebe080485eea583342d5ac0a888e63a940073fc03bf6ecabbd8b4f14b5d7727170dc35bc640a0188090da206900d8c13356450fe0f08e2d31950f95fca1f51e8335b090e04d7adddab244e7016c640eff8231374031bcd6d168b68e08563146dda5ad815c013e628c848b533f40c22c12a718f3ea953ff3d9f0f62dcd75054d49df19433ba492f45f9cef35d5bf39685443f8ee8a45eb8a3c3055a15cc530dde2328efb757644c91451e8fc17781e6bad79a0dde2d07f3fa24ac3f1dec4afa062ba703bffd6cdc807f0d095dbf4f39f3cdb2c72a296c8ef3fef044ae09b576d0f8de5dd15d0b76eda5544549a972dd944e6b870d5dab1cd1552b2442b5729b12489fcac7be530bef0a34bc0f71f149b546e3f4c468d5562ea67bc707e45cf790caf475a258ae934b6a9f3cb186a25a39a3f3f45032993aec110325c15ef583b59610b01e94205636362970879ef2e3ccf3643152f92f7abc760ecf387a097e69ca508b5038b10ea5679d93a7cbd0a1d7736719fd049d10afded41f17ed91380a30e8b38259faa0b31c216afe167d272096922a35258879838159a8ff287799f976213e96d06fcb8429801203e34d8439c54dfc2ff6d393e8b932254b20a0f1c4c91ddb9abfbbe368c80a056dc530f452e338cddeb9d7575cb42f8e9b3e0c741208482b980b97ea5b60cdda659ecc26a2bdf33cb4e4cc549a711fbe84fe4e3d7c2ca38fbea79b2214a3be4cafcf1917ed85f869e8f45d9986a5013dc527884e7837a35d0bdfa1fb361349065fe411e09d0a904b82b521e565a9a6db5441988c15831e970d564ae8a0019ccb9206d59ff8c5102ebdbab9df9d777d0d1a07d9268334bb4ddda52a28dfa72b0aace5f2be9d59e27c2aaf5ab8c943c7b7b326330a0c028d89a1d88c22d856997dd45abc2d6d09e0a50afd1872acf6b2538e14c67adfa2ecd7e84721f65102999a177d1602f8aee10f770049f91add3d047591d41bfe6264d63e3b0d7c830c8a16ccf0152043d275b8aad8c44b7f6a2ff5218a159dfebbc04b9e57bd66a2c00c9fe15de4807b122739a337a71be5a509286e26242a9a6a3ce69b68f882513da4c05de4ece46d974b9eaec57d3cbc342959e769c25c2f1a952e0cd712b45211ae7288b13195963541e0da423de6ac2e600acd0e5d94d602d7ad1ceb52015697fc19115a44aa4405667b8ee6ccf0f73cf28fe128399fdf68128e53be2e344052ed07b78fcb7a8decab028cbdb315752380f2c49cdffec0a2a9d7a2e5b928a4aad0ffdee5f577a74d07a01be84c4675e2d870a6f03dfa413dcb608da80c4a715404dfd37da4f877cd7ec2d79dcc69ce01e80e6a7c9e62724fe5901182c28c5db644eb1a3411b467066aeb5001f9fa195ad821ea8f85f21eade6175111956f42dc848c30370a7161f7eac60e405a5a06b74ab949853d775693f3a3ae79ad2350f0faf9e5565156f99ef93fe834a8a3a16291470499ff24993f718c456d6ba0fe1f450179d26000af85ae78f0fb7f7f56d770c94ae35534f7af9c68fa1f6ede24cd625370ccee439933680edce5db2a656449db8a5f12e03fc4d310829c191317fefc4b511d03e3a49398f09f826a4332c1396a4e52beca88febc41f8d4fb61bb230d807c346ab6cb4bbabc14fd5c83f2fb68f33eb8532215c0ea4586ecb7f1e5a29a1c57b58c86385a2b525bae74a4251206af6a175b03009f7cf0ef77a9909e20b9a8d2fabe1a890502a93582a55e95dd9ae4695e19355b6e60f30dbba7f629ed25fa9754923107e507d1f099bfd594f541b19e845b9eebde4175c4ef3984a22a07988e8b044311ecd036fef5bd425105c731edb6fae7a249a50c60db0164a32c649d9bfe052e0a78ad9dcc8afe88e13ef4ed92588546a0461c2840006c73d816f0d658bbce45d35b88231ad95fa967ca427a87e0711472a4b046dead09793c9df5f8e832181cdd6f7773432bdae35baa4a6bd0a1b56e066212d581bccf4390f3b8046928cdaceaf65dc844fc6c9b7ff3cd538f311dea2501a0228bd2c2434c3cbe89ef46dcc0836eb64e2a49e72308974750d14b9499a3000e6d3e1d2910b35a3a1ccc03194e6e518ecb55a822082929e01fb68b9f6306492a8ee308c60ef29d6790b94cf71c7f66700d2c1fba323b030de57096ee29c02e673e40ffbee67a7a2fe81ebfd7e821fb6833c83ffc964776c4cd331cfdf87a923c94ac3c0bdfc60c6544289b4ec5e6bb8e8738c566bb399305515a87349be89435a156a3f74195d42f08330add5d0d20c5cc60a7cbbb234fa3b3fd6be4f1fb1a43343065a586414649c71c1a90fd1116b7588279a44acb047ceeda4b152f0bab032adecd1a06e0c723c38ec4bbb3b7a0b3ba63525246f09ea7a56a11e617379dd8ac2e29b9d48e653e8f6c78b6513dea86f8409216f91ff96f7b124435eed67b23434866ca3c5ea01a5b9ddc27d65b318b5f9757668ffb342ded777be4105b7b18869a5350c79ce505c04a85771e2b5986a223d33e53e7d545b7b5d3ade47074b9bd83f1b0cd6e9eef8b682437065a2dc33964fc1475966cfc629182165be8cf18dc9035861d6222ca2b7e1d14ac903aa050c15d9dccb2080efac292238265876807c5952b7643f23f2d9193661d896ddb8fe52c193a8c2305dfc05e9d552d29e5dae64b6ccf7027f3e1240b3f386be41f4522af8ec5ea9ff70b5feb3947a7bea7ca02750fda9ccedca7feb3ed461cc5dffc76bc98445bbbc2ccbcdd6c81ff6ff6e3d8bfdbfe77e24f8bfa6876374fff3941d7ffbe3f32fae2eecd2ff55f8ee01b49742fcd15beec071e0b9bfd9ef0d9ffa91efa9f872bf69f5ec9d8917c1024c12de161c026d8acf6a8c2b2833174bc4342160500863fba28a97d0c35e4224467a7a85fca36cc2963f6cec71907a83a420489611f804f437fc0e0011e1c287281b1538712645ef7390b7b107760909f3010a25082f2d18d398aa917295894a01c4d421a8cf4814425f1fce6e8d502dfb9521c45650fb0ddbd7456bebfe9876b093d2aeda70c43089c42860f8185b53e11505259fc35d19a885318af344184e141387a80d49154527e0e6277a54b1a8d442c3079d4d80091f577702c40db49f19664f10a69b36afca95e79fc1a920dfea88eb91e7ee3c2477aee19452e959389d5890876b34718ebb6efefacdce622416dd252dd9f1600966f9bae4e9621aa735f310257392fd8da652eb574879f240de4f2454c13e9035a575004bdc10d974b64dc6c0c469dd8703bc19feacf670b02b6a916f8f886e9ccffab2077d752317081cd74f4a5c4dddef7a995470afa7147807904ce631910f7b280a9f73620b1f4ca6c7a53cc6bcff241a0fd1b5402289aba51dc000675c4d33238b9253c5fa1216d12807754d8e97961d92b471f995f654762d1ebb76e0254fb8e2a256aebb19a2987c100a87975a542bfda43bba6a19ccaa6a3bbdff77395a17cc6db797ad6a110e38e7a2eeced1cb6475d9dfd996a88c6ab06d8556dcd76923c539ed4fff6ab4c656254071744dd2fd7a78a61bd7e1f0773483a2cb421f3f24052072750e51e95475170134bf009bd4aeb7f989112887946cd1750a8af6bcafa02a6022fed01d1362f0c14ce8a136314e0cf84fc88b434aab08bd00bcb7a8c46888d82ca677534910d145c0f4687b86e6d30c39e16e64bc916b75ca24806bff2d1de1eabd916f4d1fe2ca6f0747e56c0b29843a3bdfaaa4dd83e2609f75102d0df837d544676a431470943a30f60d81e86cbe1adeb647801652a58a58274655e1572b94846ac9a85394ec88997268ec2c77eec0c9cdc2a024dfbe5eec25cf2dc050069d72e7acb020d8587d127d9a5b1e12c52d88be4ad75d518a13faaf6331ab14fbab4cb9ed9f827d5deaa158c6a05557d44ab519bb18ad52f507f667c39888e2ee78fa9dc8d2701e6cdc92f02938d935843a054a92073edf52ea941e2c1c51a02095c50f5499e5aa1aacb4a756bd7e8918b9f86439151f99c390fd2b2ccd82f50cc06a96b05998e2ceb3a10b20f7e3353a7ad59b9d5b274a64c4798aee05d7797cb7987e78c23d6484f19958b2e78e2ca30bd79f4d5bfd22a35feb0399c7576a001d35f8f10433b7c62c4e5eaf907f8b032401fc238ccccba0a269c7a146ad19d01d379d7402b1030056afee339e46c4e1c3a72c1cce4929943e0b3180b41c4354c14e6874737f5048b1ffe6e8993af4cc8e4bd4f7268dd66741acada4b2baba6716ee848c3824de989d466bf1b0820413d4a31222d12577e3e12831b06387a1506b85e0a7f23f58b0836a420e6f65a67274ddd606e0331e3188b43aaf173470bef342f9e8b600ac182749e3c0ae34466dfe75d503d5835f11a0b598059981c4fc47aa7f8d3201f1c9932601154cf237fc67ea430d01820b5ea6b3d8a0682314cc87bc6ff64b17bc3dea2794e7e511c06306104304b2165517a7e8749d62a990c8a6a0a8d480e6857e7602ac9308d21d606709d22824ea38221b603c58f88816c75513436753bfcf937faf733aac6c026ad05686d39177b350a398d1862f8d3a14183942c7de82315830dda7cfee81b456b0bd02a16492fb9fba027162e0f9a92bf57fe6e0dbc7a40001fd1504a13d1091b3193a6320f6effc38b48b3cb29d078a1be8e9a9c19af6b576077954d50f6d9eeaf99ab4d197764d697684dcf7aeb59d7b5fff15f3bfc7c3f2506d89b72937f972ad029e0a3cbe7104a7a220297aff84392e7623977711b807d78ac1ce7a1ecb1741a8966d90ee641d03409a994ae1c473e249acd4984d1fde014433451bec40402a6a4d1be6e14e58d203e62df4e4abaa73b3805a27c19d8731d4ab986b9ba7ef72f2bc1d10994283753bd239cdc84ce1453a6493255884d9cd33118683149565180f17b53daf12bb294a714e0f4eb3da1f77a485ff33a4948bc750c6c55333bccad8a98a25ef00905106c1743d0e9a41d402bf1dadbb3e8680e166a6a9d1b1ef3d1d64fc366150b5c20b828880c710d8d2e78b255765ebe08a55a26f4097012ccad9ce34d9d77c5f7e6839b4969d5f55dbbba792bb25d75a9d523f4ce5ae15f0041b5a82223c08a607454af50dd21738c3bd77c8ef66ed5cf8b682baed7992bd98d646ebf3fb22d438b9ac928edc11c089c61dd0496b605e65d63b0c8d8109a61025b1685fc2ecdd2773001e2e0cfb8822d8ca5ba949b7b5fc6fd009f48a11ab9028ce9156a16d3b558f28fba62ca362bf9c960d8cbe5d5e57a1570185a0049e993a9c5ea8d8e7b97b028004ae8959b417c01584dd488eb0cfd75005da216fa0268a1c12d4915bbf682631ef593d31f82c51020b82a318169f05b202206e2c0bc654a964915861cde80d67a81b2b86acf8f9cd12dbd43640db4442c01e3cc18a9574a5b4eab4f722ed9500ec2eb80cc365f401c51222a02b5ea5202c545f66ab6624befd383f7aa93e41248abccb5b4e2b429ba6f778f76c30100389b63fc63cd8365a1319c43dd69f59a6358ce87d2c851ebef59051a4e65e6690d1468526bb29cc316af6befa689312f4b4a7e60c669802ed9ced59dceebeb05ea5a5068f7c3335b2de4ca36eaa6c1949459420322cca9f2db563ad837bc69931b6c66d3d09b483660bef9661b6e6293cd068f44249354c83d33b049a4c7188f7276bbfe71a20a68bed92f29a328633846841c9306582dedfb10f0e2f4c1502fd85f346629b6d5804b2b21a58d6236b9e225b5417132f33d06a705bd4922c995fd66ac21ed02af4cde2b1d9dc1ae31e18926b87f11ff3fbe59178964f0d5fff095896cb756678573faabd23f63eea7d87c74050ac225015f99859a799c2030e5b3c95cb2c95a24c9bbecdbe4fb43b82a528224cfb8db0b30a9b00e7a08ca60e9317c0a68f9eaf0d0d0d55a4e085cf58a28b55824b260286cb326fb27207c6d9045a9f2e5ab9ed8232b2f6238524118db2b7f6d5040a71e0419935c6475a5dfad0f82e16b1d1febc4a6bd6edc27ac720b4d62411efea962fdd31334ef58669d9b4e94f7e11f116852da552f0e57515e8d365dd508962d9bc4faad6c326ac9daef6d943cbf75c5194c5e16406155d89894eb824547603ffbad908fb5ee31e3e9280d0566653fa0155a55d9dd767d590e18f4fd39326a2d88238f92cf13df3ad08656c5e5aacada5f4d6b4aef5c36099a8de21a5e63edc2caf7e18110649672ec346a43710973436e7d8c386ff372b002a9c7b93c0c89e14f14d23cd61b645427302d204603ab327cbd41ede2d2c280a1d497e1c22c2874bcecfad9405bb1740a1bc96957d656873469d54d6e7389278dd370e43bdeeb35c2b22ecebb5d23d11449ca69a46b705d5b3c3597b05fec384d2de8dba8c7fc28a6bf4ae26766ddfa7c37db2f52409382920cb4470d5b8bf021422b5820e12142dc8416a15f0b30fd3948869125758c05411d66fc7f66a98f97e991d5453546a03b2d2e384947648067f821d287386e39de84b80ef9ff85a5542442954b5d37c297f32dc75bc8b42fa62418068177cbb433208b93dcc07bf6b21c9d15ee0475aaabe144a7b08db0d819e2e3a88783eee5814482000c40670bf93002d5a1a41d1ac0d599bf45bf1abe3aeba3a3cfbf7ed9ce3f4308115d3869e216780d66e5e26b89d0209db800fa9ba61521a7166dab4628ae53590956b334eb07f6f397489dfabc75fef2950845013eaa20550f93f35a23a8266a8ae9b5a3e77af5b20fe9366ed14487a5730827e528a14247dd8457f5872c29b9765553f3279447bc94da0dad3b447b229a9c969d3bb64bae2396863ce96ee80318f23b16e01881bbdb3ccb942b31f4790d8fa83a1b03c8aae3abc68900b79173af9f1c008bd67a2e13038400522a084a030d595f8ac09e2f53abbbc010881926144e65c6ad8a867a50a434f552e4f0795d826abcad4bb2d74be41cc3d76e87f09299e0d2a2d66d7dae520f4641bc8e4eac0ed998e6771175c84941f1e9fb505979e22a5d80192fbca5276717434d969c0b4c2969b2ec49f445e3b4dbf58c397fbeaee859db6fd0a05e122bc2ddff94b8d00d2840db3c420ed67d6d9e5289d9c9d06b51712e657ce1a744441d38f31b2ae4da6968301a87b799162d8a06ac06da6d86496ba2231c6234d62cd4c12d8c7baf9bdfbfc5246484fd72b3881c9e03315b081604520c32caf1e27b4fbb9cc381e3bdd873275a296fb53d77c248f08630b9c61bd36bf1e78c27d2abc29033ac29ef4b936bbc73de944e8e040bef55e5e64c58f3de1533d760e1bca9bd1cc3c1f6b63639870bc55bf1e78c96c4bbb62b1d468ef7302677a435e1ded7ee7c65da8847a8d2c35d6864bca1ed5c7966db8c1c595126c51b937db46da2d3fdd4e667e28fb6c93a0d7c2cf3e1304467819f251c04df0b487336ddddc512dd52624788fd87167384d18d4fe9df816c7146a933f636545bde1e18796ff06b1f5c8e0d7ab348f7014b583c452f5f7ae966e85c6fde9e43752973e53191fe1f35abc06c706cfb6711623f2c98a4cf439d76368d95080686926e061301bd4f3453245f2d27641020485874635400ce8c97a7f7298bc439b4a1baf0fdd06e187735070621a48134ed5f0ab29ec190ede2fbec41677e86b9de4385393a04ac89ba340dce91b55ecb19b3e5d6879d7b2823564b350c2238488503babc47d84e6e3a2a3f4ec20a2cc74f0c4ce1283c1f5200b2537ea84ec2e9e8bf17aacc0127121277f2e5d37846e9e422cd4231d9d93a410b751227ed14acd968279b0958d03595cc24eee0ca4c5773311bea0834a98045ea322f8fc0f77692068909da9c73d57529bfb21937477aac0c74a0e5db6814c686229cfde53d4fe5fae051cc3d8251e773a640b284ee55291fc04641cc51b0dc51104d122c1f05aabb3daa97d6b1b9f6b8bc5ddd01f40e18f3709e0a1bfdead79175b75318cfc4a4499b59174e816a4ae0f961fe1d8bf3b5eb414d5c1a616a36b753801914fc47f2fa2fb5a1c4163858131050361fd9728004c1c193d80985c07c7443b81c53259a47ac31c98a2fa72a95f9422452b7dce0fada4af7d2554f05af46054de273f13beebb5ced0b2734622dba6519f0aeaaf1f60156ba8527ff2f882e85a1aff87c30a0370d7cf1183c80600d785aa942764de08a16a139a43ef6f82607880769862c46dbfe1fd42d77972acc44696bb407cc6e6f85d145c9ea00d13ce089d8bf62117427b0bc204e80ac644a114793a23bf8c3cbcf9bef314446693b9033db0de1eddd9097eee745851c2024e4254af5b11763566941280b82fd4c168284944d696bd495a1193102e72f4e62033f4b339f8083c11ddeac52703b4629b1d62784b8227acfa28e2d8ef0e0e8b0945289bda393a536be05e7647156b53186511196ceed476662c85eec2c262f2c04610629ee5b439f8371e0ac5918875e289216966306347d184731050d5d9e669bef13611c54cfd2230925765830e4df98fd405f63ba5c0cb93c967fa621bfb9755848ec6b1c48c79a1fc7c5f2f9ec320e79b7e4605d48bc76d3e83877309095daab2246a76b1570a0b4c9409753559db98db730ba3d5119e97748d4b8ddc28a8d59fa4de8d886f708f0679510df0f46ee5832e2c6e94eded7c4258c1bc2bb5520e8efb80a3347a8c303686a163aa617b57683650a5b14b7de340b1ea3e0b5dfdf0bdd22a2568fc7a4fd07fa20224ed872665270caf529a1c0998ab7903b6a4b1ed152aba1e48585c9487550572b01791b039926d5c2cda4fa89ee5fb5d46aaed8f2666ccea8cfeb80b853b00eb26d64a486164eca41f3d006c0597786fa68cecad248de24031b2af4814a39b369611de0e91c46e47beeca52e26c5f923522787e1295724adc7a74baf58a066244fc56356c7ab41d442781a790c63fa0dfffc9eb27e7a3b66b5d95cb82ad37ec8ab5d4b57a1db7266e323feb76d171f5d122e6664085a7660d426102f22f14a79f299ae6f34947670326b9a9967e9bf35e78002106ee667f177d07aab8692196c3b0c6926fb9fccb5afdfa266b68464ebcd94a0e4bf901fcf9e07d0f097809ea808ed0e488398b1e2a040b34cd8e937202ce656bb64b0701c95b6576094e8ccd33eb114a3aa6351069bc449344edcd0334a24af055b7de112d82c73594a432028620a42e726280c12b658f69ad4c129d58985c7aa7c6654070e50006d182e7aafd0ad42ee9b3d7f0764cbd317f1f1e2a28816bba1d8d0a0d023289399e600dc1ccf22b16497854661db9351cd12e500c21a2f68f9a0b297ac88c1182e01450ac1ae044aa5deed07074dd8019bf673bd78db40fa8a08270c49653e61548cfe643931c2587c48bdaa681317ae001f27d24789c6982c0e921f55e4464099ebe08ef3e46b4cc0b3edfdd12cfedfc1bb8841f3f97470a86a702786d44f76d14ee3e5412da46b6e268c45c9d597599b13a742c74c324a6d413dc123b2b0113244d36fbe95999b6a1a965d6f5700c3b1915e04709abb7e607d3d534e01031955fdcc613782d0ac62d85fd5bd1ca771973b3c2050427f7b6c591d520ca7035b8f154d7136319debee69630856f60c90b7c68a87b500d6d069c7846672fc50552f23657c9eef13b3e87cfaecc98ecbf587ed7c871f197548199f20a71be9ee7f18bcf1cff7d1fbb855d2c648200f908554f3c86a8bf14ad3806fac620d18b710f327e30d2df85abd640185019caf55640a33af73a19d9d6f0d02a0639f7e2c87f2d452dc0cc43c1c189b829d0f34023b1da8e9c77b1877cfcd6a3ca0c9138dde923b3ef0598801474a8a8a03b35d82ec05d2399d8fff44cceb789620aa9f2641497fee71c31acdaaa5be4d6b0d55cbe98129d29142d339897a46631f5c6fc3a667135535efb041ff5ca442df618d87acc117bdf57b579b29e58ca6317c88416e49992f6d06c7102e16fa3e6e566135cfd76a97abffcaea7ec0d9d652cf4ddae243fc59616ca03fe65824391b6cb52666d96c4defce736560debca104eb6b09bd742519ec67c19242264efd88e377083eb824c0f5fe21ec28f5ebd0080160c5b2a4ec4c93d471850d24c8086e04460b28809b4ad81abbf89036af6c951df5b8676d7d17f81233ab36cbe2a6b5f278f506c294089225a9d64d4c951aba3285e2268b87c97dd718927b3b0ca64c0a917be0a70b3c3844c5ef8f62901b30c7994a69dfe8382e0b02a53c14c494eb0b3e45aeb1ea09c1d27be892cec74570d7116f8c172e06654666329095ed36d395847fea324c0fac9be2af9565402842bb2b98169fe20b823b992621aea7358bc4a3cbe0e5a3c82e09093732728c555ee11bf43cee6c3a8bb42a9f2c8a06ec594be1f6bdeb69641180b08fef5264802f2eb8e7a2ac9fd316e6e144d1adf401a0a365118218d23d0a434541d8821c8a8641f76969d0336c286cbb8ca2f736d81c8ba4cb0597a9325e312b3f6abe936ddc395fdd556e27bc3237c8d9937c95927c9072c1125e1ebc68584ca2b46f695919fbad8563512748336348ce061eaef267bab4bc062496b10b8dc4d491e7b3090d8708e1e07cef93aa7144bea4e12000dfd29bc6237862c1868bc0c06efd473298805c7918264a2972c0205c66003ec98c65567ac616589041bea8be8cd24efcc170ab10330b23a72720e917ee4c43b7111c686d34c4a13b5659656bf8217dd7f8b8ddbc9cc7b7c18de8994365cdcd36619103c9e073665336710bdcd21f5241a0533a3c2aca592b60beb866094672bea5ad5dee26e5e10904484316ac6b848c89b477a95f88fe2716da361a2d49f0880ebbea816c7e63dcbd13b1a99e502ecb6173b8ce98e3c84a3720f18b2efd4a9e6f4266a138ab4ab0ed0f6b3d7784266f71a549c5bdc33b02f526769581088e6fbac49305fee3ebb4dadccbdb7455e6990c3096a81044fd48977eeee5837dc2889cfbe36c07278ff74dfac67233e31116ba00b0ae2cc88a824eed9e811dad0fb002c77ecaad410281af7e6c8325f179a18af8e41545ce4f7208467b6805854c60e65d0d71a99ac40abcbb97c6f313d3d23b2ed32ea0b1ca06eff438061ed45b2d6cd317d3d9284070f56d66b923d965d8a6929b7d2c1f4452174f11d4bf309dd556bc0e635d53e55d96ed6f57aa07213dd6eb7dcf2d99b62b21fc98bb1031b66b30050efb089938b46f8412dfd301293af8d5349fd2b347d9f232976f51549fe9f8eb01cdda13fde594968d6707e33a0fd4d45e8866d5dd10a0a392a2e832e5fcfcaaf844a50e32121e2e470bf01109dcebb0e3af258872aaab46e79a24598ac729ca9189a9a35db05f19809929f364f9bc9ceb58f745032ae4e7e338d2a33460fbd72e59fd9291fc01f223b5c850791e41c663c587c9bc02d6885d5b40b66ea9989d6e1180cc49c9ea0553bb6292e9048fcd84495f6ad69946390290852e718c23dff62816659ba29668ec71bc767b2f8811b42b7b4d4774f7cc985478cd1b1552bb2389456b8aae09fb8f8fc4c8bb6cc85dbba78ce9c70e921b4a511fab14e131f92f3c69476915be4de9f9cd790ec02535a2f4a6af8be979f6ede0ed3965cbce24801c812ef5e7da394312dbee7c30571dff02fc9b67c094cd75bdb03977c7a71602d9f1c0c28994ed952c7e86cefaf2efad3ae6e091b195a1b1e7a68b50caedf41b645d6c06e4a272c107655171b5ccdbdbb8c9dd9c9ff76c2c56217ea4e76417c6ba94113db6a00d70fa1b31d057b590e6e96698a44869ad4d12016308d741e62febe64ec488b66f99e36ee9b829ab2c2eb17115a9f69446f07af24b665b8c6491c9b1a9a32fe1712c35e38faa40b4c480a8976b90a20ab4cc284fbc814f7b143c45abf99c73e7d136ac962f61bdd73189d343a9c9c3f08180534d3199bf1cab5616e6155301ebd4731a3b14673a349c95d4f0b75ee4ca48c8edd7ecfedcc7a21fdbdc71a74d903422619cc1357130c32eb959b20941c8f35d5abeeebd1fec9bc093d35a4a88440360c98aef1181b5e0be718a547fbb72ea1df574f2c456b0185693316777a9ecc47280a0c05f89064ec9b9739059b9664c2f7654e588fbdfe24da9593076292652f2ee393d48e6f963fb5de3ef45688bdc84adc6fb53372a60d06a3f5c8959caf40701899161cadb5028cb6dda1909542003a15257d1528ed75b8d1745d05bd0daf543fd77dc42513b8ac6e81d982ca32f2df1870279d819096acdc7fe686734114b53e6a61415e8edf4c1bc2d7913846882e99146e7408da3e2376df6e664a7dd2eb9aed55e0c44c3fc3beef14dd79dd9f6cedd3b3f5ebeb31b66ad86fccf6b501c6b377903f115c0f64d571dd7eb5da2c775570e8e6b22081c6fdf0100304dc39e387a359febedd61aa039e4e87b33846bed8ca1e0e7b819d51c4c2e16b5727f3a52de09db9e0837f0c88033a9d345e060bd512ab59293f553fbc036766154e07c549fa5da38b4648d9bb59896c79dae4cb232c0c8d276c5278ca6f9e5a8e2653ac848c74df30df37c579230e57f53d878cf9095ddbd0874703588881c0b12214abc0212b90040a361c814d41ff7f765d79ebbf7c2ec6c3f34b7fbbeab5821cbc64e5f8218392b690cc935340f49d03f3c5f43e9571872d7f086a7abfbb7a0797517392fe8bc64589c124af05afe270ebd8311b8c6aeb636173a2ec74032d6d3b9b2ccd46ccf00039e88496089d1231387936d90e8197558b54aae373dba716d5e94b7060f1b534586e9cb1734255ca9197b03077a418e8f4c4373147d2298e522a78ea71940d1a90979f116cf82826a2855548e865cc95c7b69828596d98aa54cbfa861f4aa49776caa444e4b5c5a915c90e4933d8f86fc128e71d3582f31abfe9729b1439c10858042a407d36fbebe2fb023e3c112a14cadda7147a8b2d2db3bfee84897629472e94b28ac38abd061907cb082e645281202dfba93d8c69832852bff436011fee1f53de8efe32fe5494abc90448ffb763bab35bb20f74598297d9bbd853d055000ac94502d9e8fdc610e542639f24f7d925f9f45c4730b58a5ee430a37477e0e8b9d8aa3d51f06d436b80477906df427b197215c8ad58455783113d4587b2801b4894cc8d4d3b41e24c907d0b4681e092288d79dc8c2a170df0746a822c297b72341faf6f0e68f687ad0cf83e912f07310b725f54aef404c021477eda9de87f0d2172af6a5ea427edb22627d4bf3cf60cfce7a40be72d4e9959dff24699268eccfcadbaed651a09d213670aae51abc3985126635aebff5dcf1319a11d46008aa10b29b3be46e8a8f9b7e660cef526e2ae45af026a599944900b6b40ad191a0a90fa259366c979d59c88c78cf866b2f53964d6ab4b116a587f9003a71736d933930f1a0852844544bc129452e524ef64ae21387b1f927093848c43e87a238f8ec48bf01f82931cd667fa48f69f0c6f28e7609428095d521267ee6fd1f2e59a7aa19bbba5dad94feea4a0795106356dcc48d3808f927ec500ca17dbc1d77746da21cbdfebf9b8a2e80920639e9a9ef0c5016c443a220941ea9f7c93d4eddf07beae178b06f6d6f8124281293f743511b6583835383cd23e0422a4aabd49974615253b028681d5350f087e198d8e5369747b7323388e3248bbd31348937b81b8f74ce70a928350e39a95be51c8850046d40c6d58201d523e6d1b99d076f21eca8500fcc74a752a60edb6c8510ce65d3cb08973aea4fc9a6ec09cfdd7972858e49e62b0932a894a1db24f2aae152bf62870bfa931eb657499ad7a5f04a6cd93e22266875374854c3b3796c4c834ec3ea8d02b0c1dcb8ffe785444ca08d88c7cb51b1f7295ccff69b8aa13898f1c5474b2adb845a0f1758d79d32863d80c9563da834d90604b3bae1821f734b305dd12aaecf821e4c9274fa7f454bec990c3d0bb5195fe9383212078b28a4af770234711beb6230ef0b57d8ea7a31a9dc500a59e8d98b10b85b33c77889d5146f4f120460b5c7b8934f3e9e45145045e8d557ec8afa7299171a62779023e5b811229b144f66875769280f4ad22b450644f5566c5ab56e507451878f301ae4d005bad1bae3a3c8e4dc8dafa39e85a8352408eaa7890891b43492b97506420e8c3d7d99cb2e8cc41ad6bd8511da7f804a715e79ab87c4228064a21873900a253016c33c9c7b240336d1db7e714dbb2a0b4c0a24c4818a324a3030641878ba11db678b58a40506dd1994661b0da691141b8219a0b1fdf8cdb1ff473dc12cd629bc40eca2604cb66669c96c261d1a6713a179d00892b1f871e64aaa2b790671e6d7329b213a2e8f295ba25a526cacbf442a1394f39223661eeb21faa6c1c7a10b83b930cc9ab35e9edb28333cca0b66a4ae81acfac8dbb10a6529e641e66cab2d017c9bbb65107efff3be6996f224109f2f4b5be588673465739658912392caef8d87a21b4001914ba4489521221f3a2f38f77d51dc1417abb1a1a83db32bf76e003440f48db4f15cea783102e25aa404b2bbc593583f6a5a856962d52c03e03b7a13b75766af74335f1da28733c6442702782b3af419dba4bff1fc681d0e64a566f4e4aec7aa48422a4f352c9c8c92406043c13ef90dd6f7b300680a69495fd837b32711c706db557a13c51a8d76ee4b6128ef63e6cc2cf3e303b28a4a6d8ba9120c65409588419bbf8971380c8be2a837e8eb47268ea09b00da39bfd1a4688d9fef09942d1e6dd8137a2c275473f7cda3c070305259c69deb0617ada8265d0cad2444e6f7ad0d2676f291e39f5e82682d47773a633b4d84a6d6bdebca69892be31eb38123bd079a8feeb4f7347f22a3f07774d94cf5c0645bae94462cecf38a88b528fa9b3dd708eb27387e64051568d27fcaa14b6ce6abcc5ef8fa968f1eede92d25d0db50d6ebe271af2ac1b543f6883348f59da8cfd8fbbe61fd802b647130cf0faa98268ad78e4557438f4488fc5e154f3575ffed93bba66f3f6b3c204680562c0bf24d905a83f682b4dc684a0ef80665c419402182c73269109a965d228a085d20d7409443edb89ba6e3b5d5c9b27be6162063b48495be1fe4c5f3e8d64e55f83578b579347c05b72da0853a00c68ee4b9bb1caac997a5135afda0675ea3601b600ba885521e8c6c48046fc19f04b03d59c1683b59760d57c4cfab45d281149dbc882054242327e4b9f678eced4c84e0fa974d9fe40bac41e0b2a770a057fa6d8b824f311bef38d57587730738272187f3368ea8ea0068a72d93b2ce70988d3f6d26d9d727cf49c3792c2bdcb91e82e2b22a1ba1031e14a289aa66615662f29d75c98bcea1a39c4b9db3576448fbf4d31535ba9e7597f3df3814383e12fb07bd0368cf21b89342a22390ed62644d1690083e237b8b898a6916bd038ce75ddd6821b9cf54c74595c7703dcb52d1a392427dff3c352257b030030e57532f83e41f11f5f9c827544ef296d33152cf3d6935bfea15c96e986e1f8cac1a740169752fe2ab9931c68042a981bb067a495e88dfc657ff150f1f695d1210af11eb30283c55ef03eadfe6b0d0d0abea4428e1c3df3de492259abf16dcf376ee16a9046f611967ced7fb9ecc662586905c5e16b9bc6cabb9e85d763ec87f8222d2850d61f52abc1a969f7b797377bdd569bc2b898b81ecb84a5f0cba22fc2a1b980a632a66ec0a46ffbbb59364bd88727b9637734b68362af5b9728a3ddb0a3e3aa2e54d0b23fd3648536627b54a317c5e35d7dbd0f85024c700052d6131054de192718049bc2a41c7c784e587c4f460514110a273c6b2a75559e8e92939ad15a7a5784da334160a6981a63248711f8e20813170bf236d6b212eb64e82ff881368a6afd5c672b46d355e6fb7859d10278c4745070a8fbe5e6ba592a16dcb75f67f9d7643166fb145bb92419eb92546ce5f0d4a4ad5ea40aff5d517783700477fa3389d8de87d29785e83a59d26136071344ce74885ad7186c1eaa6050c7c95387162351a7723c14800c39ef2344799534f12d0245a9f92569d648ba4f9ebe829460937d75b16408411f5ba2f9b0a4200c202a914453cd9fccd767844c977ea6e21115a92856f1279f50eb1860a542c2089799dad49962e705771475d55aebed46ad9bcd5a4f6e0c726664d205e10bcc7a167abe3db57d65e18697f2537a4a78a296e72adfe45dfd9ccdcc0105d0541694d14a60eade766aa1481da385de6dd3b46ba653d9908e5c81c2e5f4b3824c30070c6649a0cba271fb578181776a49eba9d5072abd9e2bff3e482e0175cd031849612adec96c88ac9aa0d8719097de11244cef168b9425c2c2ee50335025600e01c56ce8813d39a4f2cc5965c71f00a989e7fcd9b8c58aad2350bd2b92fc5bd423acf787a80b2060460d3e4ceb182b75b3469ff0da1124fcf895882f6ce3d218d51d383444a857f00497b735cdedbabe34da3f1545641651d66d1e05d1a6f2fa9b74410aca2b7d1f3163bbdaa7aeb8c442509de2f8d4e583d40af70585e01e02d290e199e3a27c46564481ca7d18a7cf51fd99d7e1a190b7d901ae6d43a01d6e2cde8e51f82f5b5edf6073b9b37c64e9daa0a5a30c3dc22da8dab58edae6b94045a8004103d608f441858da649d794d3d1a43ecebc3c44754213bc816ca0a2f648e0745461e33fe43a8924e53803e536dc89e54337a58c2482ef9e5c5981cb5b63732509ce68b759db9134017afe0caaaa3bf274adf0ddafd0152a912cc5ec03ccd25c32e8c5c3eb48ec0670ecf10160a7c24f4ef56367aa4e50e11f838a658ae9810837eae0a79b97a71f33c1617e97f75fa397dcf97c7389f6b5c94d748417d070bd44d6e97d296967644cdf129e61801efa9609778622ccbdb108f43e80d89e30f7ae37f26b77fe5d409f78818afe0a35f923ce7bc2fa7d14028698ece2fc86eb811f3c4281e2801c3a058143dea7e3e59cfaff30f29f65bd3a1bbcbf50264ec57295ab15490a095681e109d9259804a7a2b94edb223a62422489d45d9d85253fd2d02a1461ea3e3dcdd6a7f421279034acf69123adab16e010c7b92686f5815e993063eb3c7ca606974fba6496a871702e01debc4f89747cfe03b0215ef70d1f71b468b555024f3c4bb38fcb378877bdc4bde62be6a46e0a503dd77321fae8267fd382796bd224e5858f6c5a338089f6f19f6c507a48c82316b417d9fb29d35cc2777b74592057fc369066f7d72c0bbe6fc106ccc2058ba3d6015d89d1023447e0e01a96e22e4b99d95b8c136078c53fa3c28b2f26007b0ac1f8c36ee51dd9f2af43ac9010a9ee253342787832635311aad23f33493a93aeaea42add1f30f213b64aa97dc313957fded662c6f26f61471b6b18dcd126cf1b7c6fd6c868cca134d35be0c13b633461b4abd781860f88446c4b2dc7a3e253f522f37bc6f927c086f1dc5835ed6778493def76c0328bd2d1cf420fce39292ece2e068af53171229e2126a8031581c146bdb82bcefc18a545803075530be69cd63d469e5bd4dda0ed438e940945f58da20d98b95734a18d263ac3a2a4e4a5af9389e327cf24f2d4ae17123a1c042b35b776eb4a8e54b8d39402f371e562dad2ccf8142f9c09ebfb89627eeacdc21a997b06e18f8004aaa9131ec17a95bba640f6ac31b8b4bbe76938e974959bcf5be88eac265c5f562ce21aee06a8e4cbb519472cce09f4d24812234640d3618e2b412786c092a5bb256990b0cd91de5ecc21da20da8cc272350335164babb6365c49218755ca56fba0d79f1a8bd8a0dd314fa6aed5bc3892b6de08784abcc3b8a5648291f409430a6642cc53206a83212f9581b9f009b5586afa9eeed612e73eef7a338fbab465c934cb5971d43ee83c44d2de1942e83dea8e18cc1df11a692a56a7b6420ba216fd7f3d7aa34a3f8797fc0166c4cab70a4c07adc26c8dba53486732f80bda23fd121936a0ae30015599716c53d187bbacf244c71001883dc6a0c1e5b148372207f16a906720dea557056d706bd3dad78b6ad92b34dfdc928ef60d27a0ce94b9d73c9e244425233184be946a24dbbd5bb56afeea5339ffdb90f8e8dc27800effbd69e1a6970d5c602f321ef4bb9f8ef0c6b3717e392e9d20dc17d9df523b9ba7921fe12cdbc15a67f5298a111cbe080cec716ed2053268911ecada57cc209ac2b5969c6a6db9217374a2fbb4ba295e178befcf88dcb2afe8b2356772dc966a49383f9cde645fb0585e1adf3f5f3a08fcbe9be5f12024054850313638d2efbf6347ff47cf1487623d38ccb9f7ebe6c726cee3cc776c2263856f0a78a287628a994d82d65c5e439ee00ad1b54b6322aabae4ee3278649e89947edf95b85b82fb7f4e56b946866dfc962947a60407f6ecff2aa16abc401abebd66f915926ae62c574983d7aed21a19d2a330bb86766fd52e7523494a6c6cb323b9484007e469b80acfe1305f0a55fad2125dbce0272b9e842855c22d4fc419b69682ea60683620a8b56d0314d0549b658db0e90c489e831b7b9b3d5a06c7177b7e995449efd75fa0206900a7f864a472ae1fc8e492d50baf2bd11e2fa1ee862ec55ac2615795f9a2a819b86a8f63434e388f0e54f4cad831ec4970514166029555c9188ab439b528a87351b8a0fc10dc7eac818c6c6125ac7a42ba99dd1c3996e1c39deb09638c7d90f01d7c780d342da6963130598b73dc83ebc1952234f43665bacba8fc337e87e5b7879f745b25c02c16802209de54f11dcec63fff99a880f9531e741b9bc9b7713cd3f58484e5f715d21d2aa58ab7c12ad08b633893aed36f697f588f2eb183a0e2ab997abb6c60a0b0176dce330a08028589a96a902f804a9680fd588c1d1b200c1f974e282361375593e1a65187dea01b9e7de91a68e18986c5f7030eed28bb43f1ddf1ebb79d7d5a52c5dd893e342df5c12a53e5ee832927cf46ab86ce3aca56c7a6724406aed005ab30641d488f2f8c51ffd481b32cc250e4d599ceb632b302ff265dc5f26c2f6c6fe0a04e25a3e4552715ba70a4a7dfd6229d27aa25f92d2b2675e829ee096728ee016f01a2d2ccbd554d24f417cbbbd7948c3f5e312710bd2a3f8f5e5008b8fa59c3dbfaaefefc081062cf63883497a0553b41b7ea58ae6a224ee565b40f6c130269ebed2dca6400782af65799321aa74ca0af835ddef3821d68f974bc4c258833c9d1521851418b459aa357b12395f020aca2966f3e92449cf88372042bb5d7167471d2b87f9f9e2f18fd0bdd592f8254b849c7abde6a90ea3a4a8782542c2f7bf0464ae6787baddb7fe15f4b56f86a8396ba43c296c2e412d86896997a5f1957c262f36383d45418e92af6052b8dee175b98752cede810c414189ce31d1e1c2f47513f2c2c937bf6b041124d9d1430d0a0268e99874f049b11be507b996e2f7f8101a61ee869f5c194061faaf177f721adcc140a2ccf5a05a4f7a267b9fa1585501b5367c45d6f259276da1c354f607689aafd08f549862c9c890c991b990c113aa841830af9216cf3676025322a86ac6a13ecfcbf2e2a5f2c9e1027bdfaa5abeae248fc180dcb75961181b5a089897c2512189829d9af3e48b7364b7440122625cfc92920292ea7b0db80aa48f406d50acfc5b7b26752b8f7030db8dccd98c6d7dc4d03b90054710376f03aafd29313c62a3e7eeee726e37f4bb28d7dc927b0ee98fbfe0e50f38e3a9b9e3dcd0a40f6be643b2bdb18a2d96e855589dc8a709be83cf129fc12ebe852fc04768f353469872a302708290672567278fa77d2a639a71949b94eb7a560e42bada121e4b8e96e1b2f854abe0b6b3c69eedbfadd8585ab6683d80bc39ac0a79217a4247c8421e6342255e98a56ea5c913ab35f1e62fe2c96bc13cb5d45809c58db69009a0bf8ffe0347ef494c7a4e9b40ace5f423eac48b8f279b964de24745b050c6eb0ed4ec3dadb85be0c79ee74a37fecbaa143b1e293f70ec9acf849ce10ab1b30485d8ac36343090f2dc1af85d7c8c1791245e7f99d8a440aeacb1c5ce2ddeb31fce0176fbfaccf72360f22ece5c07e3b622e60331ea207452f5376748eb88d111b255691238b6e1582048b2ab1ad649119300d37da5c0059e2ba858ab41e4ac99e9228db2236a9ee1b2a123187591f12f689a6375e0cc59fd132cc773e69da856a9a573c6ffe635b3e25f00e4da2e8ede25917ed82f0725cd02505b4a2a9dab8c3af362932da41a8c67f5c7be699010240183e168a66b75a260f8e5db6538614cfd0df528b30415d7f3f41a8723b088a2043d1d73a3269ed901e205da098c305a3423bb223efeb6f253eb1874106408a48ae0d3e39f69dc1984a08ca93d0eaeb835227d29f5066bac140e3d26dc9b29d577ca7450fac1af80ac75a69d4123bbbcc6e9802c9313522eb8ad5e4cdfe15bb2fbfef6deb1220663a46125dbec395e0be4b5c207671865c880510aa353e5414ae1e5b5d63c0439b00f1b0df3e1fa5bad8272d5d3b5cc2d590fe85bf974a79054c28a49b909dc17125d3cfd77ee49aca0860b4b32b7a43210c69d047d5c106752a3dff1746d586a3c032500f3ea6cb45fdd80767674c813c6af9de022c41b23f04806e7bbccced2a1f082d04836f0856677243231c4069f2a22aca7881e0c0da010cc82ea6d717b95ee5fde66557638e087cd90d76a7d3602301da11513c39742ed1e8d3618a9fe8b4040cf6da20984989cb885e6c8015c9fd096f417f01e1867794b865d1c60cd80a1ba4e276752f69e9a568201762fa5b36bbe0cd2b9efd45b2d51449d2d21f4f71cd0ea5b9c2fcd9c73ec31b266a6a027090bf761dde739784360188bda23679f817e5f4201d21f8f1431bc23713fc60fc6270f43ad5961b0dd2b3466b2c478ae1047a90d256f01a0375b2a0108c9bb444d4cc17697c8052772379102d735bd7f2a8490b9a80f4570c014aab5a9a38a406d0ce37aa30426b81faf21a25877a82405cff94b913b8c19bcb7c98d7a0e1726e36b15c3908de2794d002e6e12568f67c306cc16fa4d836b118647da93e9e4f6546241469808bcffd2104931882a20efbf661cb82386f0384ee02683cba5c17578c126c5d3bcf92c26e924bdb7925760d7018129f7b9d0d005cea4f7f03ee0e427db16c4144427ea8dd6c31acd3505830bb4e719885caf455c32f796a0f045dc6794a877f2dca9098c2877e6b0c699ced45f098423cea3df32f31a6d64b2bdcc3a42cd9063d665520b3c929b836320d4c03895c9e59440d7657e24a0dcfe1970c5713982b53f2680fa64801f04e20fe07cd6223fd1098d06ef52e2991eebdc4d203f64840d611eb92eaeb82804d146697337c3a725b3cbb426741ea64ce83c79b66e0a5cc676f2044607e91512bc168201954793a8730e01069512c541d8f1b69c3baef6312a2b35b0441fe07098392418cf96b17e968714c365df3b0a4be7b45f5be53170bb31b6c94d537a111c0564fe7376b809dcc67a93bdf1747e4a4ed0eb686241172de2dfc191f60886fc100f69bccf238cb68c1377306ac3bed106cf59522704d81ac336236a8741ca564a68e762ee8f9b65d9d00e5eb002a6aa8e80a9932014c3c58a9a7c4a5a642ed0456152ccd1ffb9f08c14ca04cce4be00c7f4c0eda9b1042682883e23678d6978b5afcdd862b03db765756e270de70c40f007aa269c463896e644f266e0e0c0efde65799e76d4f86d85d7a7188d064ba29555bf54b8ef235a85694dcd10053599aa7c59b8df1d37b5f8b8faf5e0ca20041420a8c4846e0af712e08013c7f84d298910e139deefa7a85cb3441458acc7943d21a71d29da242483e505477162b11e236e7caa4229b9f39b48816244617d387c561037f1af6834e1deda4f399c0b7a0f698ad8f522f98923b54f8aaa4296252e1e9a6b259c465a2a4cdd345322d315a3c2e13497474dcff8cdbbe3e3d962fc7f65ee15f01182a9b6c6e101791fde7cc52406371309e2a1d3ea20918570a47872c6da2d4bcc1e578a628d26c10582b035feacee0309919b788bbf7daf87c640f731b63b2a9a3acede356970e1ef3f17e5c1031d6f7811442eb65c11db7ae667a650ffcd932b98d2174542815caab15fbb3db5f3008d5a2d607ad613ec0010b64adb00794b43bec27fc771bc8d2f2130d2ac97134ca5e8eae7c98ac3dd1fe668fb0d7f6c8a5f56e3f6104ca12acbb65c34a4a1505a1bf015f7797c4fa364bbf5b9c55a47eaf24ade017a5f82f1c723ed21c90c8bb3c61b5973ac5200b2733a9e5a634ca0ade77886f00504c6b4b86591e979f663ea256c32d882c289298d4fae0f5b1fa535f92a8c12ab57d02c7924505762b7bb5cca9168b88650135f0a81f6c5e75c4df71914857cf198303a3d97dabb399b7ba3d0c9b6c4720ba478efc93a3a286c9ffbc005621dcfc95ab5505fd832d15338960b5a0168c8604a289ce1dff59c13a94d70f7bc35ad0bd01fe70e289f4360254d4f571c313934c973aa4aa342836aebadaec5ca612562ae461b989026f3a16b813c6e6d00283feb8d61b5bf4917e978d49867c448379d04a19374122df87fa31e85a442165bfd3e2765925c3f1c9b57ee68e2eb67845c0ec4ad775ca52a1ec59a18580cdfbe96978ea60587bd531f7a0065469d38154eb407bdceac95dc7daec0b3d5d9e72d6098ff8c09246c65960abf2e5612de8e8b72d4e656fdbf3ae9835b967e6765aedd046422322ca742e90f89658f5505b38ba03227f8153d46dfd27e62c5795ae63d740f8a9131693dc2c1b397664ad0c612b95d60a0a7657ab63adf236739e8df75e369511406c67170a55585539244469d9cb9cf5209c9e80befda11eb707a190a6d5be6ace0e6f1f1cb098664486aa90be0d30c158e6633fea10c680c31b6cc061b9e006e231b61caaac09f47dfa9a1a7503f73801d9cf66af13cd9cce04d1b200d8a461e07a927f45dcc8fb1bef81920ee56231391801fa42efc3479c385c9cc694f05c653fc0fbbfd4e89034bad80120490cfc42efb6a86b76a5c890a05b0d2e456d437e705e83cffc86e91fb07f24d93e5736a16dee443b38d9d11d48545361d7ac09101e21357c7d66cbd133d9848108ad19510dd9d451303136a60185f97a0deb52731871fba7b75db8fbb90ac1e8df7fd94672a54f448428607d4676bd6e94da98ad011033d150734cc5bda0a2ca468e192800ebb652c7fbb6d590e3bac47d451edde48b573036437cb25f827a97fcccc75acc1a959e75b919fed19ae58106c78f9ebd09cba399e389e049ab5428dc7a0b3e7b41299b8b5ff255bbab41cd58ba0150ea41805aadefd3432efa2c5760c04fd8790e82e3421b01b5150574b581ef899dffcabed7463a1926dfb8245dc8599677d625c34db2cf0c2b6c368405b875dad370254c9af02e4c4bc18982de8471df657aec4999eec934534140af72a336941c4cfbcdb2773dcd698abb6ed08080d8bdf05319e63ace06c3550d59ea9df049aaac3cbf9e5ce52048750db5904c774047278f04137e0c73790be68993f65292f85ac74278d8511437d0ea2229618a8132ac5185c714826f3cae065aa1c644c689e3bcd8ae97e5e95a32d354f9c9ff84559c17e8609c7147ce6b7eb96a9df6c4dccf18828783a2a2ed094ff229eea20062a2c8143fadbaa7ab239db5db4030597b03de98122e91dc94ee024b6ae5c41ad8237235a35df524af2b30f87541200a58475dff08d3c70b519768891ab3f88917d31613fb030a1dac7cc789722bc58e47acc4cd1ad11060a8306fce364954e657ed51403112b262ab601986cbf3ff7f7219931433f7d6ac9107ea27b94047fee05dae8d140df5cc9ae70a3a2bdbdfef9ae4cbd5c186e0f12c300375f535308785cca848859c47de155ce8c47b4008ede30a82700dea0775d073546d40950c429a6259b834f526287da8d14fea798acedb5e92177a8ab6d413d7e22b4f63cab9a2df90b0939c282cd0a22af6aa28a93c0828ac89ed37c9d55574a919acf4ff6755de30393bdc8fe9be2a26f523d2191845137db1a12727b304cbd002ed939f26608d39feab7c96eaabd21a5bebf3f144c43e4fff0a6ec847f0034c7f0d53991a28c4a3c36a1ac8f9f2af656c896a326dea6c098f9ae62dd043b51d419ec85eed0eee66957204098d3565ee826dde9615034fa7eaea7072f087766205b4298a6e549d63fd1f2062d066a16ef5d9db9f4f0fcdc2393bb11e4918b1a84c8a386fe21183ef191317b06e4add8076761bd9ad86521b3ccd683960a65318685670aaee326829964912e76cc8f6697a54d3b971fbf8814b343c22e4ceeab4084927f74a9d841a4cd9b902a3541b6abc1815d1a81ec6fb52e9baaf626580a08fd0c3d49428074bc074941bfabe4b2631d7f97166245f529641bac352b30f5a3cdfc323cc4c45baf43b5eddf21588c9d40ccb29444bfa96a3b17f58d9a9ad72c7766c6e69b559b16efa687f1be3f18e49cf8d7bcb41f062b80581bb5577fa7c8feebdda0c4b687fde68cc004a720dc488129636be22b2c658cf42e4ca41784443afc3789992191a313f5714963f003b7b8068e0fc1fe2762e4ca783f8f9e631bc00e6830eef4850027ab6b56e31d4df683e8d0af639d9983479f66d16bc8f06b693ad1e4526073908aeddb9ebc2d40e3284c9f1686412c30f47c25db202ae9eb5e2887cf35ab69a25a901a0612204e53e4997426df09f5876f7f929eb97a65799cd41fb850f5493800644fdd10521a12e290750efacbbbc464b8944d5b3b4bd475cc0ad970735f839bfaa85769263bbdb29077ce60e935d7e06d9b571933af08c853dcd232954b8be574b14fd41f5657fb11a2dc31ccf4efbafe4cf6f44fb97fdcd78013dc867a6c2c41e93643470a510ca16c29c69b215356e4b7b891076cb77f270ba2ba961aac6c370aa42bf165da0d0397be767546327ef44814e381be424dd52ded5374b98b3f136401f9e4bb9df2173b09b3bfff978d2489122daf0404713e06614c917bb9132e26e40ad56487393ae57495e158d1a0970e311af707c9a84f1e96109f13b4b9ac609b44b36c1a9cca6b60a4806b2e388e7c516e653e8f4cd81938f4dd51ab49f439843e75bb0b02b5fd8ef116830af2b41d413abc55b820c23c87ef4b7445eeb9ff450fc24372453574e4cda3a1419129b40eccdb9d1e72bcd99354aa5c18bd2babd5902d630eb0e7e6d161c7ece87deda1ceabfab75b86635302a1dc15473c251b23298e00e1ee9ff0bdad80d677d9d51a0f4976053f61c1a0c0d3642c9f7416e6e3cf3494241a16efffabfda1a6ecb6c46813ae0ac6843537cb5817a722aa3f50d08848ebb4d2b7c468202055400dc7c74f2ce2bddc03af1c5a9cc02a1c3901927990c973ef04731390e8bc6de53f517a01f77a1b1efbeeaa4cd27a7d0e51590cdb0da0411113f4ef45ae7140f27496f9fd2b02cf377fed7dfd2453ed77e2bd65d2d5faa960a13dde3b113f01c5e505c763af22d0b99e234c3d176b11529d15acd642d3d46642ac507216d5c5e42c3d5aa8a6980e9d3d2635be79ae101b4f7fb5c3228c25c70016992ae3d4ba9d51b02bb2ea5c287161827b185a3aa2b13150f0d451c8da41de8a11bee61eabadeed9e7077ce21db9bea73677a013ecaacc5fbcbb0f4e0ce998eef2a921b10633ac73e95669ad38ae83e829258cf547195cb016b5e60312347a097a7b2ff3e2ed006b60c6823926eeaba69253d81226f159d951c2e4a3919bb3d086045f7be5d215e2e79148b394702dbf6915a5614ca61a35be4476aad8d64fbea0000f21180b437225097dfec26f35b9159c8e34c543728f582826aaac9f184a371bfd659844272bcddadde5d2424e24dd196803af553f87908a402063d7b0b84e8b9a2f38910049573dbe95b4d3563203f104112ffd245198e4ab924214f740224b76e17e2fff023e7b1f271187d5dc94e24b41aa9fdd26213da913e5ce5c0c643b2de066cbd287f243e88a37239dfa503e5205d7d72d514c95760cf091a0a5941ccea13db06fb521644dd8bc35c0e766580210bb8bd94909015c2f2c824a0b3797fce9a2dc33d439467b43f4c492f9463e2e53189c7d0818b8672aed55c2d3da66d015c96e06f1bb362f4a68e9f2b010144fd8974753fbe3930c124fb2665d324dbe6b333991d13caeaf3824dcff152be5c453dea2d8701c6d6783eddd693e02256e35506dd0a08c49e71d0061e1943ad02dbb7777059e4ad14196c0d6b83728353c369bd464e258f22d5fe634a007b707c70bf0ffccaddbc5427f578c5a4077be652c9e170c45cc1c493cd1c00decc1064d631c69b0d7dda02830c8921c4321399cecd936fbe26c8c5904e034daf3db5492683e24eee3984cfef4aa791b995912cd21804d442b1c67ac36ed8bcedaf478705e46da4b37a24e09ca4dbd68b450c04762a1fe789286b0450f44b988e578b6999d8a817b3523181524eacdaf886374ae0f65e17d94d6336c8cdc2b34e347004c31bd1e2065b684f2194236303ab2956a593b824a7d23595056376c05dd583e4c7e8e2b495c2dbbb70008d1d4fcdb98970b6ef880ba6fea95040deaf82d6ed0a1298d03e504449c198e36b34b305e8400241dc6a23460bfcfb885cd0942df5c94904115a5091b1deda09243f3c0aa0cd0d88fcfb3c44eaa186f90c27f439e967ee6cdcedaffbcbdf4f1037fafd8de89f76bce13f358c36c5c848e3ea696ef62bdcad00ba2416bbfa72e07d110ab414ae632d91566f9a7d4a5fc887fdf01320930d5a07bcdd83a60ee4ee7b45e8f8ac25c223ddc11a64b997200e5ecd8e0f2d0438cceda302de6dbae68c3f9bce602ca9b3d4581012df693958c037f9c0031d6ddc111ac164e411cbc7ce521f2d77e473540aae7eab156608b0d82ec830f781f9a1b247e70247a29f7e44b9cd60cb9cd7041da168023988c74e43160a98108aba188c569689e010538731db49a5eca5720788918eab8a78bcf32f168929616f55b85008ac81e784e86b0cd6258e58e994e8e11e284e9b797844c3ae0bf7410ba767c74ef9094d07669d498d53c5dde31a940f51ed80ab35b9682e7b4006b6c307d7c284e312e04034173975635db90bcf2b9058326fd612056dd944b06dc92832aaf47c02c0d52cafd603927e868b7bf3f4b270ed41325e95d6bddc32ab62c66c61fc36cc8e3e650bc0c39590df7bc0c0af176fb00b15121b3ee9b2e69c2cc3a38e339c2f1c016c044775a50461f18253972a048193dacdad8698dd3442f3ea2b27e470a89aa367df9c8916d838bfe666175ee4c96ac77860f6831c62fc1b3c6a356dbc83149c182392f64d96dad26f868bae6c6be7c71658aea1133372f8bc3dbba35a8bccc9b0685eba03752a2d31670a8ddb511742d8ea1e287ee39478fee9aaff3d946e6f4b87b78ce7af2a364cd6bd636266193fc8c98fb9fcf1459a26e46def6c6fd3b23fb39216adc6da47573624d6d992a69d749fde7536dd1ee6ff966d18d0aa413e9c930587f1655ff72a2e8e746b031196e768e0aad070aa1bcef26cdbdefa4ee6475291beadb056662192c36902ca940d187e85557e205be950309dfe17fe8ee427c229cd02c66f9c73ca499a82cf1e7ace7eae55002f2a18328590c8f7c0fe0a3435096ea62763d955da66d6f673058bd75baa9848851e53225395654896cc6f559e3c41879536c236f07c029cd5c8d2432417f42f9795d314f85a0e685407d5a9535ec3e313baa63e30393525b21e066af3df0f22db8301aec6fa39362812f38be2c36e6c279d896048329eec47854f068cede4ef017011108e7259da087c1792c8f37d89bfb841d6f87626750ad09b64c2567280de00ec89c4b3a3b131461b823e44bcd7573f3965d77ac29a9fa5a552bab8c1d741162a8bbc40978e26b6b6f62c48d32e46e7bae0ba73e879b5303dcaa5caefaaf2d087479dd1c86e39a12d750b31088f36c45a7ffa964551395f55dbdeaa34626c505b36776a5916e02671fc5563f0634d8a9446a60de0bf2a4a74a7a6768aa4084c5e958c09ac2b6897bc4da2bce5e1015d01204201b719b17e4ecd83c2177f8bd50fa9d4af6ddd512f96598e55d9bc831540ce6583e4d08531f52409447f9e7da501c2058ec48d4997f9238123915036cd5c6423652d80e793ae8dd17f495621956b5c0502b81c32d28d6988e1d217838e444379945425a1ab09b92f6754049bf2e8ac5a67eacdb6c0bd5ef3c76b2186c9de4165ee647be39806ee5ca8682ac52e983a12a5441e8ac0a3b4c31c372ce973cfd97564f33b203aa3f87efd9def0bf1ce191221356a70383deda16adf24c2a917a692f516b9cf9f8ebb2c21a232d3c209875cddde54b01102f6a2301d7821c1e1bfab82f8e1ef421c85f46697fc2966d6dda0f8541587dbea92f30318bb9b0159e83077a2bb0da0b9be6c8885629545afaca66ce4e35250096667e930c97875d0498b3563953aa38c0684cca5cc250de022068e2861251f3bceb70140ab52094af83c2be29010fd4d0a3556504537e3e717916eed98810409206930455010050e9e02445dd82e486c20fde40509669f4e1924700c38d68b6bb4d83b77ac5748457558b416e58b0ad9bc41ca594e9a57277423e1f2c238ce02d862a6f1e0e65a4c170b2750e7341011b654f05675c036d186492a8c95c9f1ed8a65e9488f703f8a6599b5e2d498fa60c3846e7404b8bc5aa0f6f5b81b131251448e380c0132a460367a2d6be14107492c0e999579a3229f54e42d689666e3120715aa744a04e205869d0bfef51944021f29bf096913ce65997d2475eabb121f85046409109c914cee7632c7553268f7b22e3b24e630c198ac68c149b5773443027d4d5bffa5414491384509baf830d311ae95e00ef61c9bc107c81587f2de669a63c25d2430249b390317940f8342c6596a95a1b5eb87455c26f0210660af24d0d577794574e017a8a4642b1e037c6411d20bac82a15758f292835be0c5d6b55b63617fa2b58e94aeed3879dcbc6d949823255e86fb3f8774dff6950564fd48a2578d83b2db9bb657224682288247f8a3a73a09229cf0095a5faa49c3d3101333907ea02b6d05aff3f5a049f366b4a1bf0de721f23510986a39c3a93d5a605dec774202d6bc17d02832e07f06abec79409974d2db9643fa3e090422c2834c75e6e539cea20ef2060c84237748829ab10862a67d378ff8a91f2451da5446acff457c571518746835c8c08a234c79bdef0fe9565c6604904aeac61160e81a91a92f9f9fbf6a70e8eaeec77454b51b2cfc07a906ce07b88303c74e674fbcc3fd13543b935307bc8aa4a1fb2f985cc5ce548435eefdbb1b0c7a62bf6efe1c42d2b94f117ff817b8d128606adbbb6f6314dfa017943446fd1b779d259cb262ecec81fd328f2dc265d942e04788f88fdddfc32326bf8c80d160fe7f90f7ce2f786bcf2150bb6a4d7fe2f4504512cc0baa9036e00849bd839515880cf48470b1ec26742462f63c8fcd3c53c17726365ed709e2da163d85064dc79ea3af6644e6039c83f038b0c4a332a041da68485f6d24093520b6c054ed62346f97ad49d3211cdaf91a1da16fb873f26eb8c01cf8c31cf70efea8e623a244c9d7c712f1417cf48d6bf777407ad16151586b8037d6af2bbb42217138808b632b4652555ca39c2dcf0f53614777a2ee1f2ecedcb45548bbb3d8bdfc26298dac120401ae6ca677fba97eea3c45a071994824e1d72a826d08ebb155c8e2bdf22505492dae1f9fd5ebb1f6993d689c5aa68c5f65ddb2e02d6fd0a34f68d5b2ac324cf3409087100c0a2b86ef559604e5fcacb28724be8b16bc328bfa0174fb2de5fef8a68446f4231f187a88cee43f7d47e45826590cde31232cb6d5e3ee84303c43f87f5aac38831604b2ca041bdc6d3ffa4503aa3acd43e54ba8c3838e22adec6bb39ae252fdd8c8ea090f2bc68c07bab57ff8b1a8041d500a72743810a11874826ac1011c05c5101d7cff57e881e4d32016d61225521045297ba475c3e8dbe5047a88f8d52bb6903865738c84800de59cf8005f55dce91e6743b902baae3f1dffe8be5ad448adce9d31ba2e52410a0c748bbda95598a498f87535bcb4230b00f9f501a99453591f00001a8a020ef3b6e1b99a55930036a3880727fdeaaabeafca4e4b251a94ff103a7bc3b022bcc274c32b78568bc3e9b745eaf76d44e8f0637a15e44a2e0e3d00d6b76a9786f62dc0214a7ee4b1b106133d7a5b0e3f57e5c6e25993c262536fb8ad51373685bd69310c6804b3c112e2106d1f44e428b964c9b8f28451066560597d883552f36b32292f941c7e4539bdd57aa73a55e9411c968c4576eca62d49a0c653855d5d45cd5ced348bb33ee6dcc14973bb10122a17aaf7de51a4fec3268f2a976133a18ced8765b135c51a95d9327ef6ea68b1c3a9b8236a0cd72dc7f7850575921f40532347c2304e3a19e44cef268bde3a42026b85a2de04ed07e77aff6cad7339dfb813597e8abe2e05758345d1d544d4d9ee421014f6b57104df897a33efb3c5639b8741d2f8410d0a57bd6dbcd383aee35a9b3efd60554ab5311eb28885dcd837a997027bb2c0bdd830832c7d54bd6e8449d8eb7865b34dc226ddd048be47b424813b0817acd26101e44065205abf3008b774bea33ae92103f5e8bf13c09a57b0dafb6a497922ed8e095223e808e5b54e1e1e6d36f6aa6549c6019c42fde9c073763604f79c04c73b7510964d902b2c770bc87a677a86c4d76572f15abd634395d3e1691c4a3ecda53164e6bf1922c1e06044241088bc569c58f84e4ec27a380bed8e034058941a907c177e01881b18a725f09ba8de37439e84d287626e5d0ec6fd0db2fe9f7b8b0103754d45717f05d54b1c35147eb3c1e397c2e5f8d1a06892e622d902633c3addc8e45105cee71d4b7e3819220c3a6acb7b6d9d531ce8b46525d8395070e0139f7097e2331f436f41460ac5707c12b90f5480861502a846de101b7f0a1ca84b86b7f81cbded57051a9845cebf01f42366179403dd9dd19f49bbd0300aa097c555bb47af280cadaedd109e725477fb18e215cd7a78d721b69a84da33f0d78f65788b20c859a213fa762332cd5d676d8835c01ae80c9b61d6cc25655a4f72ba68c2f477d918260e89f6dee46fb384d68016e921b6824581eda7a28e6f8f8302f09846e247fb161361b038eec920e749837912c8c0402006681051920c64c3207d4ad3ab269591f353eb4f0f93eea21b928b9ad9e08d7d44ea6ad385fe08933f04ae3807b0c24adebeff7994007a22539c6fe32ca2ee9f8bd3cde2b0efec468fc7461cf7f4dd8b5fa8d639ab8e11499fbea031a1d5427f950d24254738e33d66b616eddc67be39d14481428434a7f9f216b8712ed6bbad019c61fb746f53877074a4f8625967b8608a5e6d386251f6d497b41af0a9307b6156f696aceec63e8fd9fa92d4ce128659d76b7882bda6a8204ef7cf0921ee9e43b3f8c34ad4c5aa1d9b04ec09196097551f57899574a5f4cca8a52a14b72adad8b4e77c9bf7e2320dad849a516fc912976815a7d684d33a5408da193a53e599900283d21f88f64d4cf996a8eb18400a0bcbd5e62edadd352dac00fd2de66152294fcb2621bae09b5b7e590825ff275abd37c0972eda891ecb20fec5811d5659cb981cbac51cd600c0e80408ee8c1f654433eca7d9c40c6e701535675715e9a617d7c45c7e44d5bdc96810a090bb69ed8857f5987e5f57e4e863607ef04dc33e01dcee26bb3d02c3b3aaa9c85df16e75771a86c490aa110bf1656a5c7617480518bb404164d40572342d130e9e78fae634264bcad32b95d7caac599c86ad594c2d83493722a0b513f8b7a3c5d8aac7cb6944a2031d81b4543723564ccbb6b6e5d3112c735ac605ca8f5ce7274fe2091a8495ec8f7c5ada7f6c6c1655976d90299956b102f0ead27e156cc03929631a729c416e09c55ddd0458ea71e17fe1abb05a185ed2627af759d787fb84e0d772564bf18103309d0283fcf98789a7c11791ae558531c8cc5bafb9dbf6cc8601964def291bd637b599b66cd37c85830c287e4f7d440ba5ec2b48534a81badd108435965cebd655634d57d2a50e18504bb2448b95f06bcaad17aa80b1677b32a9f6ed0bd12ae178b3e26c0069bc1db315d13e51c1138dc9af1b2186c40b7c9e5f44787fb4d601049688e525f5dcf77fb3811183b5ce09d7514357cfc8a83c558bf3b32b664194d8109704da5de54e61a5fcb6c6d70aaf5aab9ffb8dc1015932d427d817e92c31b01f29944ffcacaed006e3f24110e1fb93b31247375f539d132fd67ecf55557e0b5322f18e5b437ed5c72985b54c1152c99c4dcde702e8a0aaec6fe616c5a292eca69db31175bbf874bb9733f607964281736b2edbac41beac554d457bd4def731f162ae9324484c5f557239e60ff9a82ad1576880c8c8daad91e7321c96175289a63c68761627792173825c543a5433b57c0ea5ea78269e08cc2f80105513da2fceeae5cebcc85c0e73cc0595c085ef6e21afe83f8916fdfc19557fb283e93340d2fe90f6acee810d0831fbb7dea7d06e852e2c5fa9200e121678cf0c1aaca080784c4609d49b8f47dda9224750992ae9fd465d8c0127c95d085dd7081878812207290c8425d2262a5fd66e495a5257623bd68dfb96a1eed92d81f9d53ccc2e2e20d724ee6ba54977f39976c042de713561519c0c31a012cef8b8fb42f6eeef67596e2a0c7ee07cab12dca83aba91f137014a41089c5de0e4afb3c78ed51c33a5fe6818ecf02436fde2109a66360718d38ddb81eb98229caa05c37e8336592360a473b9e0ec3c6aca058e1c5e191232bc279af0618c6a4d7966bc45a0ba4d0169f3a2939cd2dbb3b8822afb428b8f2307542fffdc11026debe215f1010860f10675017b4dd03a864578217c00831f01bceb038ab4068a5b3054b24a079e90940dce57582be4d1da6a025b0c125ed2782342b4b8e4d908d396763cd3da1b35bea1cdf9711b67e437c326fa1e0840d471eaa13aed0a2896cc595228a21fae639fbce6cb06d323424412b2b7dc5b6e29654a520691087b08e9084cd14a3ccaf04793e97f956675cbec15d2beeceb74346a1c5857ac1c98a76f615236d5c158adfd6ddbeebd17b7543fe47e7dd5fdfa17d7d7b6ee239251afea6ef7d59ca17e32aaebd9328737ab452d89f5ed512fb96ddb7ab69cfabb62dd6dfbedcfb8f6515cb4167f3d1baa83eda1620b65edf6288b9a766adbe470f65ba775f633cd6adab4f635cdbeecb4b53eacf3b1ea569852b6be0f777e09f23f229de76ccdde690be1fcf9f0fee0c20921ec929ba3b8d5d884993de882333154bfe21fae873f9adcafd5d7627d586378d7139bad8d9bfb6318b66ddbb6fd97db02b2fdfc0d734f6df7c58f48d5b4ae67cb198e49220eff8a4d29b796542c7d5893bae294a1970ca948a1825c65a6b88f7ada7ddcd3b7d70331cb487161be67cbaabf8d93fa9bfaa95aa51efbfb5cf776a6642af5ed718f7ad81e0af53dacdce2b0093373cf61a08c7a14e61e55bf3ff929fcf5a452bf6d77db3e95ba29fcfdc0bca130cb6dcf7d968803b583b257441c28cb591487eaecab3dd46f1bc771d86b1a0a653b1f35937e9941d3088a4680546540449494855a4182c284aad2e586a01b8a26d3910d566c502282134a6a78aac18a02bc68a209232e4c86549a1062074dfc309f9a484197264c20a3b8aa24306aa0ba28dd15270652aade3c516323e3080504cb8ed1854b2a81e685693be28c1a19194ff6081c7ce5d2a41d8104c6c220ca8e68b2a26318d59b7a0491cc2421c7cd4d8e32b6b8caf8ea35c3150653172b1717a019c8fca0898a1145c4b8c470a222658973fd0048460cace8de0ca9d090439e522e9621151a6ea021891942dc992195243f0021432a34f86065fb4db3bcbbfbdd71f7cf5ab1ea363770b607ad096c9e1eab4ae8b27b4a9fd2e5b3bebbee53fa9473520895b4eebf76d8addfac9fa87f25d91916d64af78e105eece943dc37277607e1ecc1bb65cb0c5f0433bba3b8cd768c3862d066b39c091c90b95ac6990082ac4e99d5d9b306d9f7de264a9760ca31471b2ed1141f785c22269280f95e22c15214282a4dc870e7910caa318ad3538e3880a2871fca20424b53136658d1c1162116eca0c5f5f5d19215997bd93802c896aa00cadb5b6e67b34b3ee430924c30d124426f1963ca181346a61871659525b2c86b031ee4aa8020251774dd576519691a49c8d04483fc1a82145e330e4a9401051261b820886e48858a0c6c90031062f0c00c573381e14544010044beb7bbbbbbbb6500949264af3fa410a0c40e0050c209256890fb1b8a1906247143ee2492d092db089803e46f85840cb9994002098d068ad5f8d5a01608bc411b00abc8144a41b46272c1738240f81a4fff87e78cf0f483780e4b84a72fc473687ee6834f315b6eccd378d5c33c8ff6e836e3b6aac1edd7bce21f9c132daec07f3e8fff9cef5f314fea25f6919f62655996e978cd7e7bee6bf7c15737bb9b1c12b750df9ab885c23c2fb1cf1314e691dfc23ef2c7a5e3b383aeda6dcf751df0c93a986bad38c8d69dd09e6beb6ab62ef8a33dfa1ae6d19eccf3dc97c13e4fb2f709e1ef679867f534d887e657f759cf739f25f3f731ccb3fa11b00feb57afd33bad08cc9f799ef933ad9f8f611ef922609f999799d505711bfa32dd4cd7ea68ba103afa353a242ccc3c083334ee6821103ae8aab1b35a7275dc86de8f799efb314e31bfe2593d0dfc5a619f271f0af18b21aa7c0cae6e4355cf335fd58a0f9d56cc231f06fbb4220e12c425bb232fdcc7ba0d182033b9b808cb63bae0912d5501e452fdfdaf96a1c2f7cd984fbbe7fbf3ccf71a310f8fc6f11c7f6ab44d61b9ede396ca413d7c728760af7df6f1f3bc718bbdec9f9725f652d39ce386602f71a6490dcbb09a1f6e8636ddcf39b9aabf2adcbaaae7b9afc23e4fe6b7e443d7c43c307f1fa6e18f6b07216e8f1f2c0cc330fc49d9d21ee626474b7b98ff71f9b434dc8a80eaeff3a8febef617fb3cd130cf7d18ec73a5eceabb0bf3c04fd63eb37888a736d54a88bb611fda670f519e63f1d723246b8fea5afef77f5ca9aee5aae749a9507fb10fea7d7a58d9db4927ce50b36a2ed48f1ead8619a5c5c29a1594afa3039ab7b2d7697f1ef98e7d9e60ef83611efb19f6d1de6217aa712b6ab81531e6f1ef8fb885020e2a9638c3d58f8286838a2940ae7e0d4347a15f7b0dfb04394a02c8d5f8dd66d2fc8537e6675d5dbde07e3432495766f91ebdfd070b6b64d2b5425c19abe7f4b03c56957bb31721b780d0c71ec39f0899364bcaa2acab3ec89797de1b29fd886965926e963f9974b51bb3e562ef8f02f65ebfc87dec51a845fa6b2bfaa390bd6b5f447ef6286845fcb5872e9ef6e6afa6b830bf8215c2fdf628a4dea67e4b7d91fb1c100b10f5f3a17dd5a3b07d0c2ed2bfbd0a172972b1cf139efbdd2f01d8fd8d5f28b27dcc5f6c1fba5af528dc5fe122fef755b8c893222e982e05b79931f8497c9857fd57cb5061cf6de6bf19d7be67f142892a08cc3c2aace336344edc7779162f944cf9fd3cfef7211724a8f1c5f3b9ce12a5f01292d52e4156709b982eee07b17c3c29784e3feaa79b2a21054a0d4443579492ae36850eb5f5330da3b76113122932c5dfbd99f45e42bba9302268c8c95090e62628c2cb9645192242290b0d4f3560b08506a3245a1600849724475ba62c4961afd39a0b197b40ccb0bd285ffb98a336e5128efaff64adcb56e8faf3b3ee27c78ec8cc15cb1c228ecee24f5ec094e1c318a52944dc005918e0c42ff1646986a419e06da8a35582677fef16b06f145086df50473c23c3bfdfaa79fb97257c7742d703de908f75446e2e21e2903f3b2235efc01b3e74b85caf3df98e3f668ccb721b00642e6c431c1c46259cb3d60cd687d9aaa3f91a19a4eb5bfc30147d5689d11f8ab0ae9f7ea0fb46bbcb28f18d3172a1d24429432732a472d425cfaf495c4e08d238359ec6c32ddb0c993e12f28d00849069dcffb00cffa339d56d7234ce8a0575c43cfc0975c03c9cc1df4f9e79ac7168bef536d2fc6cbded8da6fb685a8f95803d15e175bad65a6b083f45e83a10334d37047bdafac901c1e6ad9288dc7208b8455f085d864f2039c1d794713fb814fb535c6e03794e1b19b5511ba99c6e6472c28c287cf2740eeae3770ff7ebe1917d1cbb90251a753ded49f1e273a95e6efc5ec5743f32d168c4d44f187981ad5dd60195d2fdecc4194148a4e416822313130c5672e3ef3ab512d72124617febe210402488e2b21d082a70651f734bfb9facd52798d801c86521d0ba504b5e99103ffb0c0f890fafb3b28ee69bb25c49e9356760630da8287abd46c85fcd7089d753c70ee38a2b24c042021a598c480084831506d05c2faa995cee27818870e0723f27ea76a77f5d29ee8858be228e295047639905bc213759d41e7d1e8c327d22acb2eed681a824d3a740488d2389a444924812a90419246ff257e334b9166f92de34bd09f3a72b5e4f2f2eafd7ab860f777efc9ca89590b86c58be366aa326c31fcd86a1dbb85209f249e9ca570335500b3511ad4546cd43e31c499c2ccb2cb793ed605bce1aa7266bff10a76218867de576b09abca37d86a7517bf4bbc626148a70f4e5f4b4753ea82f72647b146ea1005d3edba3f0e5826c98eb9e502a81a00d7d22208a49a068148d8e90a228313db1e08252248a4b2490ce8f2029ac2064042e57be32fdcb7aef26c70a28bf7e5cf4b7eec7259f3c072a75a13fe94f21a823b6a0c8916b945996655996596b2d951a2ac86c1341544163059569044a2c23cc0696055409ad05314bff14c206d40e524bff4dfffb13aa87deacf5aebbfd37b5ffa3f6f1c6b2a6b51ade7075ba3157fcb130fcdde49e58e2effb658639b2b858abc4cd2cacf9649393f6e44341cad28db666ddadfd28cbcf79c8d228ee68ec4f11470ba00ec7de0378438ec0e57ed2e8a5913c9248328a54924caee44acee44d8ee5e50475c47ef5ab9d9eba38900b35d2cbefa5ce91416d231fc3fe546dd4d4d0c82720ab74fde9e989e8a94b03b55013f51225a22725a6262c2fa748142354428ab28210165c90dfcd4d0e9d1f41521881cb95523e94ef411d444b3ce7c725df8ddc8fdc913c47bae47b14d9a489615b984f2477c4357ab864dcecb122d8d3164ffdeceb67b842af18eb286e8add5c587797ff0ff8f651e88fb848e396d60f714b7be8820f5d15d3dcdda53b7c1e7741ecf34210f83aed4aec17d77e8c11af1071d0a70f037534b600bc413fc21d2d13b0cfbeb367f870c707dcdd6f72076480b812de7089372b36fab633728fc0a45f63873bdf2a71574d5c157078daa39fe120bf5ac1a52a782302d0753d67058a61af1d5a862e18c6a5b231265534e1508403144fd65a7f25251e426da66599ccb2cf3a4a299575c69ff2298df2a59238e96398c47cc04ce3f794724a8f7de453b3e1f647a32544cded48c712871bbf23174362b8dff5d8ed0dd423a3839594118ce9d9afb0f739277eecb70d7f95e2e776b4d7b0d6a2594db31aa474ca49690733065d09a474c63a6b95b16bb2c41813960575340beaa035d3a00eee3b9b0264f832d06edbb625c087e4300bde981bfe643290bb15f4587e573dd9b7c942f66dd22987bc3f79d63bb640446626402d14a26b7e744d2cb4b9e65fb781b9052495fd53994908267677f7e865c3e265044f2358e22084d12fcb59d92bce117383fb4127213d8d43427b7e63c346d340c6dcb9bd95d81c49c1b89f97e3d7c44c020f1d9af65a060617e696436fb2e2f5a58728a45801e483165cb1020d312c61c60a9e54c1c2d54db4c088917bc9fa8b46a7bfbeb6d5860586fcd56043d16103a08eece30d58bcc109295132313571447620966658ce2c4580f93b362589f803322de132830112b6762683226ab7edeebea9e26d8654a888a20b161520a098204909e94a095cad431441dc20891446347135910972c041e1444523432a54f090c57c9929eaf763b5d6997a143751290e9bf3e7525c628a56eacf3a2786d5c7a6b6d272543fdfaa50a8d75eebb28f98b5718ba9f701730ab7ee0f493df629ec3354c7fd4d6d0f39ee7f325735ab6959c5b08ad149b10c09c5a1a1d854c5fdaad69a098106841a32ac18181aabbba968cac2cfb07db537513842a069cdc8b040a8416315a3a2376525c6743f1c4ba8cc0a0e148ae3a4e4dc7af7c90c8571337ac4df8f509452ca186394996fdc44599463dc96653dac9c7a9d6ec71c2ada0ce3f0e47664a420b2e59903023f4319f3ccbeac45a1b4c7b0e73854e7523ac644848f226012da26f3e17eb56e77c5a2f91a8fa65753b4507b2e27a574ce28594dd4432dd43634d191954f030fb9cb700a0d407929075bf200325ce20207390a154a72a4418654689094addcb0dc6fabeeee9b081fb99d10fe4790333234ada8b1e2b710ed5cd918bc69696fc2c7b89d182cb3fcc4ef62942e8ad04527edf587d0c5a32e1a75b1a88b4a64ba48d45e3fab8b42419d4fd6b1d08381aedb3a1e1d1adc13f78b599cb6ef8f0dd3d17877c83d00c330cc637ed561feb313751af349e35bf3f1f793693c0d0cdbc3306c2f0a65ff15c6d25d4a77c984250a5196d94ac9eda47e723093c81fddf8f2ddb11dcc1dfb1e568e799d6e39e6f00acf4e62c8928f45a2bc3d8c2d945b26cced2d867ff8e0149d3ce7a69bbad60dd6e8febbd8dbc67ed7c1b669a1c6b181a8fee5a15323e6fb83744e8709e5ed633a068455ccd3e8608e3dac0c026e1b228e185527dbab51034b0f0606b724366166f9ad7edb5493db51adba0f7ac92b1a3e7e70dc73bf3dea2147e387ccf7a781ffcbad7fff27eb344c0c8dd7f1ed69743dac0c83b72c3a1278e8f468afb5ee834c51a689bf6c39dee86350e655860e38a13df82d136610786384a6c1e108aed05efc27f72d32fb5bf981055ef1ec373c9ae5c1f6be9a1cb3bf0bb325f1cc2eb417e34f2d585e59d6eceff7b0727dfaf7ef5bba45aee2164a668a4bef53fa36d5d59f49fdbdb57e95189832ac028352bec9b00a0c37e456eaa395f668ea76ad142e2132551c972a0b6e47d9ae0775c04c1fa6b31deba73ab965d53b5782aaa5faec25b7837aa8cafe7630a3eea7be67cba8f7dc43e156b551a93dfa314a7bf433cc7272297dfa7129d94992121e209c19e21eeaa2ecada49ba825ff8b4a94f4507bfe45252ba3241ba598c28a2a3000bd11175641f2843961c95f6dcab00a12a5fc6d55901c916d86559020e50bd838c46dc1df32965b104378a34a105086558286727c08001b87b84919be9699436a9fb29af69bf7bc9069720af53aada12eeb8a2b9383bf0f53e3d1fc2225d926c32a404e197f3cfecb9dab1af3366e771513c561540f1d6b4adc7823a594c60cc3321abf1e1eb93faa9058e157c5e0990c9f80e129d7eb78a6c9b89a1217fb2f12d5ae0523bb16cc7fe368cfa2f962119771599601d9debe8f0d6f6f7ff2e7cf7d0cf59f4c3b229d63b0e3107170afe33a6dd4deaae8b2381c8bda9b2d0051e19dd4457d2c229a3fe76c9c094614cfb9d066febc771e492283fbddd4e320d5f1d099c1fc1e3f4e08c293820a2b6040888f912e195ec9b08a111eb28dd004ffed6d37c4b5f7c72d20dc3b8613f3c856ebf71d2dee77bfc6b3815b187d5d316cc75905084b348aafd3ff9a0dcc8946d0c667f6c8046a35f5b5e239719d6fbfe2afb37dec773416b2d693b5c7b08f05983f1632d6d7679a8cfb7d76fbae69f17b15124790d8ceb89e8df7b77177ee8da2917ff5e94053f2b45cd87e583325a5dd907e6a7fc42f4776f8de1f8d9e1c99cea8aac127fb065e0588a90a9052cb8478427bee5f9110d140c995f2c1fd22d3908883b4e7df92a92ff7834e9e93c374e9929f889ca1e47e4694ecee4cff85882862942842220cff809509562656add5f31c0df8fb5721f04696fb42a08d7ff5e81ebd5337b89249c5b06d660b3dedf9fb8059487b455793c1e7d078f81025537f1fe2b47e7b999f7b98bf55ccaffe8606c6de73746cd0899902ca9b42e9c07ff4d091e2be4edd7ca8308d6191f972b3bfc98175b99fe5af8e95a1558cceae7ab671cb2e9231a2b8d7736e5ce67eece6268b35ee9046f257e70b893b3a86da0389bf7b24f73b19d77f859792127d4dce84ba02d3fdef76a51f6eb8914608eb0d6b4a092184994a264a970de1e6ee11420c5589703aa58e0ef65e751b23ee1a4d3931ea3a0f9b2016da58d5c9300ca54385f8eeee148c1637be6c1bc04fc21bb0d65a391a21cc6ec8d201e603279b941b1f3efdc2e79196abeb289834c6183b7843523a37470156b1a89306d18e61d48fa490c8548adbc128b69a2a9818234da1b8127e32f6b2fb709625603fe79c167b0d43ddc671ce04fa73ee608eb94f9aa5206695c59559cd21b61f593de7d1b861b9bb3b8c2c162b4a16abd609b1c0bc6ea47206a1c52a6977ab808b0accb841fe6e3205c30c266e6c300306f846334cd09215d6188cdc06c91733f2cd172e724d86ed6518f690010bac18a6d126f556a5aa6951c486bd322d7c5051a3aa850edbec01f4c2b2f812823cb28466a1c58cf7401265d61b2884686fb7d61b64d423e8a86d60feeacd228a550f234a5924c5f438e2949281fcc20543f9bb29a34919948bcbca904a132de8951b932195264d3f30b981348a13c6412012415f55b56fee23d2b071fcebd92211718786b3ed2de476baf36a6c3cab862bff05a65cffbbc93109e376ee06858828d1296fddad9b916ba36c1a115937fe7a888080cd8d231111c77c560db7feb765b5bbc993082268941b8a85853550e2666f92254984f24d865366c0923b29cb1998f2673845c84a4e6194a4d8d3af95c3f0172b07019b2b8e492ca52b5547f397d2d6690afdb6e75fdde66b16c61d30f7c7a1c6e99f49d9025d0d7f3fd98b1ccc12be7cec8b39b35dfdace54e928cdb99fd180a64583ae2f1e332a41142863762ce8452ca2ab75a9958cec393f5470e678ad748533da186fb9190234fdbf415a07b05c33aedf1306dd3a7fc98bf98e115ac7b2b4bb2587fe3c51cd263dd3cbd52488ed48085826fe5054b952f2dc8fecffa99618b299e10c2871a9c1c71c21955a4804a12605c0122c689244391eaa8bdb820fbcb11ea112464cab85203116e377c9a690101f2b7911145193e64ff102e9213b0e0bbbb1b8746f22083043f9092fd5b3746235bd0e8f28595ec3fc3ed78d5414909828881134c046164041e6418220c265018c1c23d4a01830c2810c880de858901c854f1eea243eeefee67713b0d43931a40f0c6e841f6afc1ed386b2828e2d0903b0c30461163c0c0c26108194c190a438c2fca68d80592246290430f826898e26a29e304e24892dcdfa3bb9b75858c173043773184c8eeeefe31ff84dc563461c0a080dc5f6f1853723f4b0c14e47e980fc2c10f5ef4e008185992b85c7e70244b131df430c40b82c418c18bc21d19ab703922f75f23442091058a20b0e881183f419c2125090920bed8e004c3e07c62a4861a5e03cc8aa6c606093e68cafd5c9ae4fecb7aef26c5ed740ea6297a00f9b30186130500638c1e48e1831e76faa6ca1f387146900d4d93db56343597f560dc90fbb7d5eac7c8125658f0840e4e3c18e304529e2879054999613a412265c913e6ee6eb91dd9ba012bcbfe2206b9fff2a087dccfe28152eea7a2dc4f63ece029f76bab55901427b8ab6d5beda049f6af377754416e2546628eec5bc0c8fe94dbf1eae306214ab0b4830fb478f163640ba1a229b6286183185c58ba7bfe90bb51b9bbbbbba140c179b10509d9bf9e20fbdf2d5a587342a020548f02113e9adc5d0c51d185164bbc7861c48b2ab247a98f4123bbbbb33a6b727b84b06870321845163845f657a71c72ff6539ad20f7bfd317b9dfd34195dc0f73a094fb3be72706a42f67281165e828494987285eb0b484124139b8724f17e0b45ef7f34a689817dc8f9559ee5b6cc95e45762e9cc89e83222a58686a6c68c1446e29b49440cb0e1e0852d9c28a1c5e64e1c48b92a2e8f3c28e18c040c9f5c4df7e4315d345c930940ae35adbd51a6e3842c90583c88e5951c40f945c379e03712b814db9439d0e49810fb228ca904a164338432a583865218dc30291e8de94fec06e29bb697f9cdddfc1ec4e5d7ab7d1970a40dc2c33b7bdedaf71c6fda0539518656a9bf8dc86e77f648a4e92859e366a20d7e8cceabd475860612162d194e3f7442e5b6edc7334972292e7a41ef5aee4f88b517ada267a11f2e47ef0ca5186383a692fc66e01c12d7fdcca1ee63a33e44a885f84f46d6ca5719ab0344e16a8e30bd4513f96d0392e09699bf8b5c6a3c6598a517214d22c1f585a86d119d8ac387293206051a5067f1e7b8d03e234a33ebb36c4e8749f520716d6c4f64d421a168bf6eade2d4a51d3d52eb6f4644d36a1f48610c6ec6605b601109b10fe64d8c91c220ecf1233e4a8f0486d2af5991665d46226abf5cfd97757c8be31f9b5fbc91193f2757cba941bf8fd5e7b34beb50f2c33c4f58f70bb2b7a23c6cc11d7ab7c081b36bc518b19242e16d9d7cfa63623e5ce19f81afe336e7dfada77f6306bda57b12d6e58ac9a9a1a583363c4fdb6edaeaabcd90283557565cbad7e81f9801d855da33e99212ef6113aac1808c59ee2e95744f8b2c6ad5ac9c152cd76a2940f87b8f51b7ac9f0fcec9b03827dad0f3f0cd3296fb06d4cb89f9287fbe5f01c3ea38c1ea3e7fe6d9d8db6f1e7ba9edcce7caef3dc46c35af487d4efa7b53fc3302ae5a67dd4ac16f424d324b671e3d2e5cfe9524a89d1bf992e5dfe9c54462a4bb2ccb66b5749a50b398526f7835884909644a45a27922fd99c32ad94d5dd2ed5cda72f89640e4bb22814f37c15daf3aca773eecf4dc8bc3847cebda92ec3f566faf9671c8acb9e6619de3caf9a8475e37cc8af5fb30c93b14983426503608e78cb9e492a29cb8cf1703f166c0a92637e37295319a148893b62d27b9e6db3b3d136f2b1ed539de736f23d1b5cd751d3340db7ea0fd1bebf6aff3f99d2da6934a2b6a71bd7053db1dc86b7b6d806ed6eb01b4ab17e48b3975977d3d9f0a847ffa67176344cbe8d2e53fa12723eea2b7bb2f3ebcc11f7abc9b2c66b1c8f30bf77c3e22647a5c5baff72e5536ad44de7ecae0d80596eb3e3b4d6dd1db7b01fe23f1fd332aceb185b4ac461bfed57d8deef58bcb517dd355cdbdb2695736a33b8d4bdc21bfe1feda4e4805420cfcf32ec3427bae477796229311bac634fdced8fc4404411359f6694fb6164bab04ad093f56c6b5a35d134d5d8a85caef4c20afa399485b67493e7645db22e4d4d4d4d99174d893674450bc29279d180685858aeb062537b51bea40c57665d34a0db5997499475f11cf96a9bfef8ff2cd6f597d422bd482e728b8fcfaea571e8b7745ab5d7c5954af97ba29913dcefb357a1fbc957ee9f458df3fd8ba8713ea924ce25afef216408e90ad4d1454aad45c849937359027524411d9d89382036794669afa63de975ce245a727373b0946a68740000dee8ff30af6d7a470771cc40b9dff5bf02bf7f46b1f1352c9a3b892651e79ace81abf7f718fb0790a115318ab2853a6edcf901b373f7abb8df2492de304e94661473045494a58c32164d25f9ab58cd12c7d7cc10f7db94bcb2dceb4f9e035dddf115a5d3b72959d239dc93db28d95edfa624f7734feedc536ed85148dae820b0523063d073b8132526a5f431b3e3f86aafbfd6e0c6e828204c0afbd6ca289fc93627f0e3da9808bd6bc3acb6b1acf6ecdb9a9a480209edd9b71d83b2fd56d95afaf6e3d0093c6d9f884f10d665550bbbd8b758674e424de37456a771ec7fe3f8b0efd91fd85b1ed966b135160f8944930533cc90a406edadf6a934ede15bc8bd945dbfbb54c5f03bd467114b7b5a47285047bff6314ae364386ab18ee4be4acafb50752fbe2fbb89bf4ae7fdbf1d6ced9da83d4debd19ef6daf699d0fd6eb26639a925c2a794ea803d1bc717bca17d3674b3efafdeb5102794166246696f8fdabb2ffbf50d597b4d7b161357fbf8f21ceda15fd62b6b7fd3389af63c4830e281286bda27a350e37c5705a863487b1d0d5a9135b845d6344d7bad4a9091a669da5faf75c3dfbdda13715acc30430d4960cd67af0a46088730790136b99e7cd1aa3a24aa8771c7aa8759fafcb854415458f5de45fc55110065a952a1bdfab1fed3d4fa3acd32c1d53e13bad56eeff8bb4a177b7b1feb5037f5b6b91486150b823ab0af1f851a27852394b771e87e8c93ca8ce188046fd4cf68b8dba7b0d9b510630c6a2166aedbbacf85f6ea6b5d56e57e1129fb88541fa8f369af3e2bcaad1f91eabd2cd6bf0f58eb4b161a877e7d1b2a340e5c725a92ebdffaf5534040ae0ac8b5890aebc78d8bad124482e815862158e34cda5e31229ea9c4ff7ddf14c2828e57ac6bf7226c6f16def08fd789fbd91acf068661dbb6bd8ff9db4fb65df77f138939c31490de3b904bdb6fb8ee70bffa73c3df36b74d6e72939bdc5e85edb76d7b3925ee8879934bb4b74de35ebead95c3dfbd2c9686bff7eac3a63f79eb6af7d97081a34fc47386e59488e306dbe87cb233146fcf24f53073c243318bc97529a5f4e87f349476fe54d2af3c34fd6a94b920ee884ee6d39c14cdcbf8b047dbc81f3a6e93bd9c9993ed278a7bec390ef5f57f32a533834db389fddad9b7b6d6a7c00a71477f954fee9c73ce49bb64598642e19609daa3de87f6a81fcb711d9198374c8188c3052deb52bb6074426137af6f33dc9240bff63f39b30d7ff2949df49c7ed840110547f79319a3537a63b9c1c296524228259429d4a55a6bcdb2cf66afbd9829ae69afb30df8b384614b750aa54a53e4525d6a2fce5aebd30de2cf05b90552482195be4552ef825277f22ea86fd942a77cda526a51d3624687fbb596fcf5cc221e453c8a78e8c063090f1d7814f1283a32e7ec57964b2846a7cc612a9144328739e512b964763d97583b6374675670bf0aa1cbc28e4850725292942811494a272505616d0a422b4c473c0401bdb2244559a284cb539315274742415a5e4a4945714917c8e54a53beb1016fc02d534984b8ee3459717224856490969752522ef2255db85c694272d2432de4a46549291a79e99221962b39e5414de9ca6e12a0a67427e7e3c7a54b47ddc01bf06da4d01b9ba816109ae3cb1cf1f742862829f66774b810cb222f5db05c8182e4443eb4c58969898736f292054b142891e8a9e7478d9dd1e1462c238c3e8f88627f2c16976c5db27369cf83b2cb57962df099f2d295ecf09102a429a8c40d57653908d1d008000001009314000020100c0744228140201c134d93f80114000c85984474509b89c3288b711442c618630c31c41000100098a199440992340bc8333edd4bc26e8538a7d1efe0b2f5cb75d9ea689f9c4b4339c075668a01d6af84e41c98d6b08aa621e23df9510b18158c9bce4f026c603b114f214df4371d1270da27bcaa3d0742d4153dbcf9fa8797ece183f499ca92cb018851c23dbad10477df785be30d2e14b0c88d6ffd22eb912b68f6a195234e9362792ba86a45c6a7924d846a201763964ad1f043fd03e4b20e6ed3bf3a5372ed35961512cbf217ddaec195292df9bdf404a789c6455a376e36a65db86a13d5537e2f0f002c200256fa738275ec58fe8f7dbea439d6b8c3749f7bd54f1676de77bd7b28881e25e437276ea593bd46425342c9063bcc3cd9758874ada95a33f8d71c48d2c73bfe6f8a21ac700b9067370fd82e7a09ccbadb7f3838b41d7ef889cf12a834f4ca354154016f198c99ed2167f47939fe66c74ce20663e3a77ca6c97a479c928177a811b23e1492f40976919b27e069290951b733542ac77fb8ff47c2f989c58402ac8897931d66c3903a25f5d5800b2c91fafa21612e1d468d0f95c4f7bd48e977a4e69aaba9f1cbeb6db9558bf6f853d641633e4fed2dadf5db79f7770d7cc0f31bc782bafca6468e5c446f69c8f8a76102cfcde577d0c30ef535c03580b26f97c054b944ddac70c5886e38f5e272fa8c13205a9ae6717090dac11f04b865e150cc93ef8ced6e92c57632c8cc64a1f03e83b9fb68d4222cefae0c8ea0571964e792a6f1d4b8f45836d6cfe88d97e6199ba7cdc93fb89b47e4afaab0698cf5099ee6abe36cbeeef9445c57a1ceb28f5e8532de27d9850ce5aceacc27e9ae054b422d242d5d19cbd10c6e8bc7dbab8e48e1cae6e59472febe2800699984971a5264487d3c5854446540d80ec372ee1a2ec3015594287b70c1860edc57320482e58cf69974f27174c0346d45858c59a21527dafad88ecfd990751e5050afd053a3811652e70ce26ea20e5abd29951e7bd402be2b4c8f6271bd88052714de45cce2684737999223ca7f3e74b5861ae39546cbf061b9521bcb9c62511833cf58c5df1d5105f7a981c007259c48a3da4c877c69be752143a38def26bd92e094bcab591879f7f6744d83a25aa9d16b0a8b14e1f12b257e72130a8e2fe7d16161e6846d89e86200ab99b6822a31680e3f01b0c39ca90384f287e83aa8133052f28d5f092bc775986bbeb7cc097beb3c56462b6bd88c91363ac763d6d81657c3497a1f3f49a95ef6a78e4f5511f25a09ffe104c102d2c67c198dca6e2b064c65188685042e8ab435cf7529421b357a8965872ded164e9cf33a4e83fde67ccce5a60d0b3ccf6203661ceae32373b163f59d687478b5b33360e6b92c6e7d56256d20c7fad7856d0b48fdefa109edbb89fac76be84926a359afc0a1cea6266a8d9f9c293bfa2567002775dfc24ab0d4bb2e8405c48788a79c1e283c0b7c3d39053881d25014887d0e07c1d32f32831de5a4405458b0d8a7af8442cc167431cc405fb3a82cbc45952f242ae67f01cdbf2eb0534b24b11aaa1f752e04ccc57fda4c6471651a2155b6d9166b0928fbeeabfd92f8ea2a17e7931dabc0c861146c9980041745eb2b698161a404611c9c22055445c21d03aeb297688f0012b1b410ccc123716de211d7debe1c544cc07b55c9902b85cb415003fab442569215bac5f5e0d119999e04a4cadda8650371f9e2d7f8bc8a408483440e0fa5c84b9c3b2851e0abe7f36fcfa1aad18ca1b4fb3e0088d37472102019965a110c507833d06dc2dc3908768d1b8b0758c04e76406d5c9fdbf80fd436ed20b11bf07f548e564323ea7a73123934a81569466634f247c6e91364e01c94c3a710818443a9b2010b8c1e90d905fee82053ceffe16357457c363cac7e0ccdbbc65bee0c36c77de43c1179f0248a3986eb140a33a3666e2f8cbc3e67a83ef04e5b84a45107a5adf7b41cef6d06d8ab67a3c8db322ef39800c6d313901a6f5166f50f2884ca759be0034812a97a8932c2b08a51c947708128642b80ca5934ba4c0443e8c0663d10d7812ed4f51405ca8fae9acd25814e277f6be65b01dc7eabab12e64c67d29500bb3501bac4009c7aa8658e33ea68168e01d0c706466044f8081e6c3b832db4432ecb290ed1d54ce0fa4770f660a384d066f2dee1ca4fb631ffcc011a979d4ee21866306c93520bbd9bc1de4523bccec84accab213187d0f8fa489f4a0ece7d34c843ceb058b0b0ae86fac9b51bfd975033dcf146b19b93037aa381de80bb940ea8be9bab971036f5953b99360401293b95a44180443794f2821cb6ba375910020f9e0f255162a60ec14393dd45c6a9bf72c528543ee6196fda76eb606492c5c92577b8d8f0297431f331912c4fc3a39c23f168e1e80af635c742fa587c3d4ea1072fa165940cb47045d298e9f59f3fa6b660a93631e9005117a3112894b61d54a25f9a120d93953a91de66cd8f3b228a4113d0d2be81286ae47c5f5e574bd45358a5f9603ed07a90c18bfc36c41aaa65f6950078a18ad23f8a3e47c7145ab06db45a2ccf57c9cc0b83f5b219fb94402bd6d9b8572e30b47fdef6350faa9b164721a42af2f3f99e44cd417191e52d3187d29f03965ead74e049be6a7cb2648cdc4c61928f85805ae45ff949f802caeeb628b1a9eb583c219e03ae08e226df5da9319660fbd9c000987cf54ca41a8cfda855eaf4c4d188961d333f343cc1f216fb4c58a18661cb2e6b995cb5c66b77c077f3d3de0a3c2f8faba2beaa35791856d10a5ae3c39efeab88d22ba2980738d82bbdd0cfee2ffb8fabf6e0580df4663945f52c1099b3edb6019b80de8c5c84117a0bfa039a5fea30a1ead192b64f8a20082c126f03b848291f31b694a6a811f763246896da629b884b30016bb7915f6a0915142eb7677b8890a7a0c548fd3e37d02b4a6e9bf2b75f0a2306001fca85461012ff5b87ea545dc443a630f234b393ceeba5bab24698ac755012783dd6dfffb1543b38a638899ebca25e01a0681f6193f28cf010b239651671da6e4732414792ab9ec4d6b2c2f7b6cb318a4f9d6a2d35c440cd292f632af38a11da9d0b920a4802f9c0ed0c62ec34f5ae4af2b1856382e046839d47d1691bc787540e5a4d50a2a0e645ad81738f4f5f1666ec3e4a95583e546b83a3b044a7e094c24074f8ee9a99312593e502c6673e02db2421030c4e40e52d1311482a48c1abef60564955f891f2fbe306d369bf5b2b3da2b74baf78649295272eb810c39f8569d9b35dcb932b91eb3eff679b847d5d5b2072cc739d09da38c4f8ba70db2046db09840b1db25d48e5d3c05657add17642e367d45b57e6b79bd68c1af1b39f27ff72b72865b5dc2f9cbbf1a53726a5facf8722d76670afc87d7d581959fd37916a5994b93876ae02a6f2d6385d28f32ac44db52ab3121b043a2316ad7dbf4ec01ed1355c0441c54e6e56bf9c85c3d2d38d134ad22917737b5d1efd3fad96c6948d094cc028d03ef8a5b82400ca708f37b1c8b47dbc64b0ec8410c84e391dfcde15b96237b808ef7f413df060715ee02bfacb3e4d82693131fabbceb7645932ff3e85c897765f6f5e943a41b171ad40ab40a3682400a4b31dcaed24c483976972986b3645fe58622a7f5de78f5faf139efc348d81fdf38b0526b6d7e925696df5ad7c3f6ad538e8a1ff59ed2454fece43e801e5c2ccfe388849f6b502b2b54fcc8f840b9bdcd735dc726c7d08df04533cf93636cba6c69213a6865682e0c46d3cd812b618d543175aca9e25b6304d2dcca29af2e78f604fc4750a71c8b035be4fc42a46f94db809a8953118c7af93a30e430fcdefff125b907c07513ee18593c12b81b344eb55c5230a3ef95d65b5f0a4f0475a2cc14fbfb5335bd5d7199bac2541850f66e13d88e41e587704f6a32be133c80101acf0e4934aa96588ccd8397550b6c34afc3ce8b3e762f62d1d7a56f52fadf4614d2547ff8699e34c332407f217cc2cb7386f01fec2278c09a6e4ca0d351699518ec5a7b3f59763d27de0a00af396e26cb74357f63cfa239472fa3269312a9eff969d31e7d835db01627776ee6cf56704df128464ae3f8f887addccf6f3914e289653c4c932b38027ce0dc0108d89590f8f70f0238ede37c7372050af13311fd0a6b0b54c03e52e4d29de64339cef406a687b3565f8e25c40907fa584ee98430f8a7e607a1c721d295dffc0895c94230be2db2d7e3cab22b9e10805ae199dc38ddf9a74592a5bbbc781c80385b4187ff72772abe863c545f3946ac90618f3603d0c622b3b83dd77d16b97efec7c43de366322ea8c78045ae356a4610f7c73dc6b87adc198ba6f430a5f8744969d61b2f22ac00a18a6b3767f06d873beb5cee2f3034f2d78cf622a2e3de0b1237dfde48f5a11862afd278a1528aa0665ef4f8f59fd981570f7e6a73fefae27c3a4500d366127c79ddcf6d682a6941a5fd682e30767582617434edcc91b165ba276f083e348c892b138b18de5390baeff21a4f3874d016ccd3616b5bd8355876d512e34008d0bf6f757b48ff57820abee533d2b1c3b30f6f393b9690c83e72ebd25dfef1aae507ccab4b47cdeab8fac7a403fd3e759649d950cbe5f348ffa91e89506eba751fca5aaee85de50b66dc3b9654370f7806dbf449adcb1afe7b2cad944871bb1db550d04b51651422c7403b5f9d44e044e0deac077b4073bb15ee7ef05ad7400105e2c5d3ee8e06ea83eabc37b8900e78d586b5506aad3936e3cbbe1b68a354ac9b610fd89618d19ece7a69eda6f2b7caade01d91d96d773088ad112095c0e1e57f874a5a4f6358a3c4c73866b0902ea0683c59ec16a6e87108988c5074f1d613305eaed7c016cfdcd067957992346c610efbf2226d939e3a26bd47ce3415e618046aa9eb8672422e59239a5d25695a1e4315b5aef4c1ae538c1df92c879e5264f8691f19448a32b6b41b7286b006bd593ae15b1e6f038e57524dbe022e75e95e220cf78fdb6e2068d8a9b8274b03b0571a9fa9b59b82b1be38463b2f2d129def657f1ed7cf0b2813caeb4fc1f7ff9719eb8dc0263e774e957e9046bf1d0dba26085a6b0d76d48f3cacaabfd91e832c4f4653c2da129d41c718ff6b2adb17a236dc6ec9ee31ac66a6b64fb4de3854892a9aaaf00ffcc741c4a3f5edd3e57e6a15357beece842e8522677da058d4fcee14d0a109cb6b4e14f5475939cb8a730fe78f788d22b816e100bba8d4dd7d9547d133c79d50e491b913e43fce9fe19f6a438719a6c87287647354820d66156401607d57f878d1b5a0da3da8c6d63471e3178ab054cb95df1b4daae4f9024da4895a4b9368d786c75025dbe154a5e9dbbecd0a648c52eb7486d8aff6e00b011bc6325fb69936bfbdf0e48fb985a3899a8c9a4a997ec618262ad1a47878fa271c7d8d8c3fb59080241dfd1c1f8a494cec1b61e98808bb63fb0795052da594d6b205bdf22780429beaea98e05c83d01f342869660c83c2c9750a33832791c1e40c8f9ddf064b421470ef514382029af899261c41f5f375ac504a6b9324194d3f276f406c8371f2fc2ae1225b0924c01d9b3f5bef10ffc86659f3f5500a3f7a7f31cdcd35de53ab03319a8780621a5d1fea4ceeab654d32741622cb002ea8db37ade9885afc85275ce60f3c8fb19c532ff683370304687d8a9540b501c66c7530ff13578330dedbd66af22e84bc4dfd3ef75dfe1cfb24a5a9becb76106c97123f4f76c09eca35a0de1c8d14a74ab512779beb68e26719e590f3ceb0705014d827e110aaa6f6a4ed84ca9e60b8f541ff2efe54159875c867d01817e2f8b16b382ef04d7e48093d5922a85891465f4d323d5769e28649e98bfbb1a80860db67a89432f1ef6eac7d83522cff4134e33d1670cbe942bcd7f8dbe59dd8cb3b64679d6ccda2e41eeb2e8f5fed146ae6bd194274ea4ce010342bdc27329f7693729c3f028d9cf945795b08774bacf7506d3301a24e5a02af649f49c0fd9a0bc64569d81fb33e593dd21db0632a25fb3a36e559ad9b5a522bee33fe4fe065618a9278cd1234211d9975ce809aa028f34048041953c9d0ee627b01975c280821403eadfb0aa2270af7a0f219ec5f1f3735f0d354fc2aabc34140f7f043ce310621932dd386bd8af8484ff869b5d299a9a6cf0d14a105ac44cddc256b55f53610fcd07373daf09e71a3ceb4987d50e184e4a837620d5fd1d8aefbf79f8963f65327482235b16fd2dbb15397c6554b18d573f70788f5db66eb8b8c2c910e3e6fa0fd0aef51c9e110839780633181e89b53ea968088abc240a118cec1fe10611b00adc629f09feca5bc71f8209070932924e80ff980e3a64ce1dbded406214debff25e7c5b3dd4460a85582a9297381522e02a8ca0647fbc8fdc3d42484037e53cb739f27920e0b643c0f4d7212dcb9b22088678cdd16729d1a9913672a9c40fee6db3a6b5027f5ac53a0e76d8f1e1a0910633244fca2992167c0fd7c74531075a17fe6edde5343650c5c192cc251f10aeab335da07a3ce7504be47b287bdc72cce3151045f6dcd517939947171f14404f1677c8db34c2e47a74edea39f3c7b412c7bc6f926aee7c5ac0689182dcf42aecd11e8366a7ecc3a73f5f0e1685b0695c2dee1771649888266323f5ef6f972d3613347f368dba6086a61d0d2fc2e911b12ea6dd3c84d3e24482007f25ed38927e4a6db274525e69ee1a817446f623d380c522bbcd58ced1a3ad72257797708071d21c4a6d343f017e3e44a5ddde80357a24bb51add1822662c923cf2fafa8c6ce99c88a1c22351d1f2bcf520e5b926d6358457787d1b0639fc0c6f8d9dab0a157bd65d5f12859748c4ea528394b56c4c51f0e0137c5b247f044271d55fc049c93ef0745ad1247e8eaa150e87aa8aaaebc601874850825725e593c5cd07d9cb37213e0d39d7894ea2d1069d55bf4bb8585c180b5e0cd6b6b834678affafdb6464d1b34514e38f3a4c6624d992429f45d38dd915d34cdf22150c6a3c33d4728fa0e34e379ced562deb847828c1d189a8a5bac1894de29abbfc93918cb47b460455a50deb2364b32c1001f4dca1614fa3c3570419e829231d9f8334590d404d564f6b84703014d81520729a8f6c54f72193008b0af7fa1eb83ca0f772ce89987266d63065eb12e6913122473d25e2b749d55804d4fced50a1e60cb5433bb37dfcc22db9e0c278da35de4a4954c4c733f4f45d543192d6443b76684781b35df6265b603703848b4668a8ddc5c08c9a58f7956d02c36808452b5e96d8897529c600ee380329a60c23927feb9840fe33e632a75db0081be00d7e141a69ef189ca77bf474c4a34b95cddc600176f6f27e5ae18eea49ea7cd359bcea9a777a67ef6a5a2fd7e8a803391e2f4b0aab57475819ac30dfdc19a0c4d1acbc62d6a3d157c701e93e1119b61f46ca8709385fa0356ae110e9df40d867462e38b3088e197f995429e70a01e22a0df30ad119bc7c1cdccd40a35ac76ee6f0b20746b5f3260c65eea51c6a269b426cda368d751aaa73f65a438d0b491a0bcf1ce0ffba00d1d75ae20d222e8355bda43af0634405c978ce22e3fc9ba781fabca4784ba801e7a2d272dfd2893013ba8f29215a4965d9f7721decfe1cd72391c24b9ba6b324a3cba23aaa555b81a0ed4f69eebe83cc45865060eb76a8515c3869b0548b091cb3606760b3646ef79cc06bf42ba057825a7a0005884da1aaa380fe8db87295cac137dbfc4959b4ad6eedf7efbb3bfb11f9c3c4e0f0a61b303f80a9878eaf9f8d734f52d40a761fdcebf560d453437c53488707ab9a36c8d10a115ead49219c0fa454fb171789f4da1d4c8756ea90673581436d3708a2a4e991960373482c1f034d8fdb542219e1234f9c1b077ab2442cb4bad3035a39e975cb5fd49c7c93d61cd9f730f7ad260657d15dbabe5505321a592c4c33571140a166602debef0e739176bcb9485ca6402f9f16e6b741b5f9f17505dad074eec597b701804550d52fd024a12d9db19cffc987dbe3e357df6d61019328b900e1724acaf7f802e3ea4db27325b50fd82e2187468f3a88a2608fac823c10f8716c9a9805a21bf75b757599c2aa45c48018b24914f0e218464fea34b59c73bfcf1340a403f796870d3287ea7a1b64f3576effb9de24306fcd769cee05212f0fb258edfbf2e13ea44ec7b29ff3d2cd2f0ab640bdc3a9e5ed3a855f693e38aa1b3b458f01af910b6fdb97a02adf93c51e964d45baed165d96705bb4494bd28e6e37a107b924cfaa63b8b37a4854bf4893ac2924630da954068f5046e1a44dde4df5fcb384e46650223a33ee2cc515cd1b442d8db18b466ea250e837005490a5f6f45ad63b142fd7f9021c08e082d37fe58adae359f9a406245290f47879e557cd9e561fe678172b25de41a2f4fb137c3f6f978e0fbea4b6eb01f9f1349b89d9b7fdfae7390cf7aa66e3dd2a7876c5ac1a0cd32d2c3ecea8c3f28fe8830916026086302814c26c03402984a3453843185482613692643133c45c99da0447ba2293eea80c713f0cb6f19084a0c0decaa66726a7c1dac95954ca328d660faf62bea672b2a81180f2299749eca27583c1e0119982c799fca35507c88301941269d4fe5082e9e8498100f1c9a7c1f754da0cc34693bfbf2ad2b6fe1d579e13f756f1cc1544f76c9086fd937aa51a61ad5bb78c8033b1311db98fbed0a23104db57bea52e050e4c52879940c4b51bbb6d141f1956260da758e2d537a30a77ac6802f8e70aea8e9d05ea4e3465a6fa4258c1875257d1769b8058867289609c10369bc93a2e7aadf675f09792280bbabc77e44aad2ee30898ece282ad59e52b3e9aa70cdfdf4848113977f2a3f3e6df2944a070d4e024440c9f426e9151374b2e00ea7a1134b94c8bc012ad96013f1f2370b32b312a7f3240da341821a2e2bef8523609ee9b767e63ad65fd69b82e5af4deb04389d8a872387f72b823333095b025fbbfa6851ef0e0d95ab6f5d71a9367f2c1dd89d1d00a3f05685d661bc6cf3a92fc0fc36efc396ee0145bb3e78658f9df9d1805e7bc4017b4ad6939c8598cb64440a048926e0e110d6f52cf6cce56285eec309bb60c9520165600d47e660e5d1c79ef467b73399fd60f770105dbcc3fcc2eb3a00eb40fbe4d2032b36a3c2b6e98312fa19fc8f4a245f1a82787d966d5a8b2c8736b10d2007d20e08d83648d2a691e3e67329f41389f615456d8d58e2587fdb1db2eff698691dd47e603fb6da646b0f99c9652bf2ab1f4f86671c32eaf3920b07bc92acb1f23c99251cdc022b0bf8e14ef0401ee511d049206ca1d9ae3b5aaa4ec4d1d7ba66983365589d14fac3b2d8ff509470c217b37edf4564eb358ecab47c9fc88ca92b7a49291e9564ac52d3468aef47d2527e432539699deefd53b9b46c97bf324f849ea6b4dc2fc662bcc080eda41c3175d526297696a16cd733946b721a8a8163cd47ac495c0a10035d15d49ac1340d788450d05f4044be3596eaee57c77671f94612107ef8ad168e40afbe846ac854d68400abe601b65d1e20f2d70c5bee97262d69b279e68d91f0e4783e71a96a831b930617d6f6a98e22c284a9ab708afd91619c55ca6c0c11a1bb5a47a308c84a68ca57aa93cdf1304e8062342e29aa337146c4a81d6ceaf1b7d0925ad029297487aaab67d137e2c89007b23f1c35d2127a8f156b696d8ab139b860f11538513c9463db5d91c314cf3b6d2833ef42dbd2a389a1013ec18fd8cc16a597b05c573714fa6a309c7f5d2da5342202359ee416127ca275d8718649a307924d248febbfffbbd5969632acfadb8880ea2dd0cc37fbb7a9f7d427d24ead71fffc6b21716f7c4afd1e38c72d16dda9a3cde0629601e75caa0c91df2ea1b16aa39c108bf209c4e946cf12944edd27cc1ff66a41f918fe0227e54bf88ba8f30f6f55f9906a95f6b82441685398e7473f338d26cbab3d2f6820910b4700930c101ac40c3035d44574421f17e4c4fb562a99d4363e2d59813b034585244b8a9e66d387104a644ab2c10b39a291a8e8bc115457e5c4ec4d8adcace73cf2928d2ee9867c269c556f4214b9e7d9852fcb43fb06e9b3eae31b800dc5c887ac511f3dfd7ec7740a104abfa0360a3d4cc5e9350360b92990fe3d138580b4cc7d138dbfada760be3b32a5e3c34f3c6d26176e86a70df90182243a1f6d67ec84f281959ec68932aef56ae6d439a95df0f3022bb270caff16160faa0de57ec4899f63c61b7909099f29895310bf5dac8c9f55fa0c4dd7e9a99561c39996966ea2b3c97bc273a067b8c25bfb128e2ce722c128bfee08fc66a6563601d6d9b2c2dc198efc2f1524581a6ba89b3b37c641bc9b09a8abccdd85db9bcdb2139a3ea574805be2f0ff6fbba4d6fa086db5f9daf0eade120f4909db9fecc61c17d6f4a8ac8154bf5d3cc7156a4f89c10bd95dbc1c13704c37d67d8fb4d37b0853e250133fe79a885288432e3b2c478699e9d607c746d16c6aee2dbae1be82954ea69967de29645fec2c2f886777e73d48388cc81ab7209a3bef365660d63dcddd4f4f7fb6e3f0ed8b4e1a8f29bb2fcb11f389f0746ba8d08a4d094865e7e83e0d88589d921aaa4451400ee09dddbcd83075adb641305f8f7aa35d699a9a0bb3d07ea2c0012bfd74d9da4c2c66ada1401f2f74c2ebd1c2ab571b5a53b5396715d0d5ad1b80211e1bed5d03911e599ecba6634f46847405de457cedec48e43f962f920a2325be2ef524f90534cde04d64c6dcfb2cc9895058c1aacfb2ae3e8cf8f0ce44d8c86617b6c19cec14b4fe61ae434f94a6ccda7f59c7e106482f3d16968fe9284dcb9c7838267741f49b34c440a0a1d6715d566c08a919644aa7c4c3cddc32566df74b7d2cf1244f4be15e9907d5a08397d9503fde383355da14ff9e0ecbad1386868d7fddd5266bc327dd24b6cbc3be3c8975c6852e834dbba3dbebdba3ab67ad8dff45cc6eb2e7331beda26c87e29f6ec56688b60e1c0f6acb0bb4d3a6ab9e35aa015d10ce588ccdbc10a321c04fc33dc6c1ab5d5e10940d3f7895bd471dbfd8ded9ed6ba52c4c54c500afea66532c9b4e54d088cc2425c210705992a18d6de038564d02d979fc4975316ae223675578c5e257583ecae63d88739393d3421ad78ffd59d0a32172489d8d06f970012cdd9488970ccdc1a90af89948de0130167cbb65bd535733a31f08424454810de848c188bd3dbd10c1f1f93a027b017ec300b4093ec9ffe758ba17962f6728b82a251ece23ac877bd750e259871f3f6d3df3fb0418d7562f439d4e9997df087fe1fee07ff060c470172a402bc3650873ba6c068f03a915ce1043a475a41dfbca5c12634176ec0ad87df35f05a62acc083b515dc9e74b6a4278db909e76295c3a02eed6ca134fd0afbb989bd3a679ec7163de11fd8ddfcbb7c857ec34abb7f20011aa8f9909db05335b05414351cc76e19027fa9fe5ab6378a118114bd7ab20c380c9bd16406c25ddf269312857106fe5e06856ac244f4c11c28a0a034e6b2a7f5811846e1360cdcc142f54039b5dc552df7ed0c4f22ddc4a7c22160d80b12f6bdaf0bc084a74138429bd38faeb45ecc81dd390e428aeede826f3a9ab7d3558b142bcefeeefb2311d1ba3294fa72e8f591c50041d4b10f839127c9117adf6bb49a133311c1eda4b5c08710c6ad0ab66c86de8c68a09bf6d3b437e48338ab8b628e8b6cd39148475fa1ab2770f8200fe5c19fe65df0fa7c0b941e656f10310bbb343caec59592cd608e28f73b079a89ad939d994132e588646f96f7c7380f02e1125d281e7519e89a7933a66f92ed4fb7c227cc6a260fa17e2f29b1fab494cf6f48302074cb6a579b08499fcaa88bc2c57a88dc54bf4f68aaf4133adf9be90fb22369386b6962cddb7a9dd22d817c13521a9cfe87053024c04ae8c4e6c890b7d1b3e7f8b0e43f4bad1a491c2823917a0910b7cc0deb009e0bddc85c5cb883987c9f1706675986c6a57df11429ef8aaac16d049386aa7f31f517cbbbdca3d81a8000713cb7a8e3be284da5c67111afdc2b58b29b5fb2d3a06073b9cae8aaf9521aecda06fbacdea8a4902b67f566cc1b3f96ba8721f7a60577b28b507db5e6342694034a83daf97716a6cdef4bb0d8f8ce0e1174f9b5b547e30c4d8a995815ef070609584a6420cb07770f04127b552d2f2538889f9bf27f89e8318c0cbdc878d4d162e6ac27ed31fcd9c8a653c2cbf19fb34e7dd21b19093b5a880b6e6ec62d950a8f5bc4bdb28916020ee951f1a947805347dc89aac922dafd82a7fe1d865b75f9752c987689cb86097b972bb916637c0232a3b4beae50c0fad8301cd1427317001305d444754063b722399ec226050d40cb02ef3d4e65c63ef81a98242b406c039ecf91ac1bbcb95c79e6518d7caa40ed296bf60f47a9a4f97356efb0fb93442e462a89877eb3b6392e7789b179f63c170c017f42837a3389e8dc62cfd2e8c681c2ca8d8034d004c6902c4c970cb87b19f102b0870eb45723ada6cf27d319c0057d71b9c6dd2b319894c48e216159f1c8e8094ee2d7592cb0ab33fbed4d6f1264e62091dcb2c5551bd985b86c40547ec02c460e1838fc4b50f34c354005cacc981a6c124d361803384a5d3c4a573e3be98bcd1aac04b1bfd52d0036287a7e41fccea90506277277a942618945c5159ea5e64af5c8edbc7e8cbc8b09fa2323ec8e7624e3e0f0698bdfffe3a9060b2ed913c761c8b42690a07aa685d74b93d80681bbf03ba155f4990688ed129ba54ae1b6a6709ff1b8e6a00adee685b4382d8446a46c834314acb873effe7bc6311dedc626749f5dc998fcd676c6c7f874153914361d7fb23191de9adcc1dd7ab13cad8366a1e9433e31b8bd89fa2e7dd80f4c379bdc220d44d4516a622c8b46cfab04bf773ee65744b9334910dab4e7d1a81f8e24914e7676301c41efc2c30d99bc5065a68a17935d56a3b49d8949007d0ec6e71cc012d952f6eb7af03f3e85f118f7d1dae2b837db2e06b3987a4ce6b750d73e683e21cd0e223a92db3f80ca0970fc3a510102ce0e2fce1de98c7daacf409312ee761c1381abee6f26ba0fb892b5e4ddec60e9a845819d4d3e6dd6e5a3aa7ea3fd7e5a07a23aa9eb5c3b7b43bf3beb497bd417f6fce5155138e076d6a9e608bb555e8d33852dd2f64c770100cba0d17b8e1810bd8094d7475810ad7b432fbb8d912682e4bb57d207e34f6f4b67112d10d482a79298de97bf8cbc9d22eca5ff9baca005c10cd89971eb2d9487d8977878890026dc1928f50d6acf6a3842045a199e0ab4c43c4af5b02ea908d2972b53e5140f52344d7a68d9a977f44371fdb218b45470a72bd7a439185acba7a23054b6a2c41bc7d890d3b6321e689fea594af3b02e2f310b7ee3d69514ef48a5ef7c5e50ab16ab6bc54d320b496a08d04c792d18828080b95a97f37b5175a3158b97ee2fc949addb4096b5eeb60bf1ee1f143b101fc69c44dd853ef96359421a75b6ae3c11baf5a8643fe7543daf7f267569c76277497f3b5bfd2ac3091257e7abc5a97d4262d281f1b80d76ea780fefe1a31b0557756105c37635367510c2a4a83610c9a682982d393673cd225c4c69ec2987a79db91b7ead3a131b2a66be33b9e2518cbfdd353ec7b4f9cf53fac1d6b700555d3fd29286a5523b1c0945e631bd426a17322df2f5053305a3a8a83cf35686b634b6f51ec737144a8e8d5ad1fa8e6b00200658babaf206abb706457f88d05d7a54388a1905a6b81a235b922ce95b80b4e7c60f2211e94da5160123568d0ee2fb77d5c46e0b3fe755ea2b36fdb4b119b8b42fb7144fa13dacf11da819a5b0b2d69760acbd3ebdf42ef8fd9ba20b7f18ff79c43db315bdc598b24dddd2aacb2013f2617bd228025cfe8119ee94b67c7362c08fa235f4f401a01e7c47954af0cca982f05f1819ce2e95daba87cb430e1d7fe696c6657a9857489b57e97e404c32f80041b124b232dd6659f10451126c98f6fef429933bb70c0cdaf7b6946d18d4b2b1a2f455c29ed58517b643c530cc3c13c7a9425aed98ac32254899ce93424dbc182ba0090fd385b3e623762feceb2953394739843b82f9e671b51d2809a0b3e9436d05ff08ec8e67615baed70b7e16c4d1141f141332003345acb9a3799205562c8cd646f4da5645b362446e46d462b53ab423ff38fa43a126176152c70656a8bca1a1f45ced1ec8f574615470a35a273a1bf1c55ab7bceab8509d102145d84b602bf3c7b55de2962456b23a53f7fe934cdbbf46181d4d76e655e038323d3f9c448c2c21f611764998e5fd22a4994fb9b6e84968f6f26b7b5f4bb6bfde8d564cfde35d0194133e4074bffc5985e3b08d4853b1b9c36b7756e5012bb8d0a559c0fe974451958c307f065e5ce67264a94a895a88f3c66b577b723c8bd78f46e5d6150083688ec1b11fe77bf59f8b18b9ebb256b4afaf5bbcdf270ad889d6b2c055c9b6e5ff6522999cb435864d5595d22607a11f812378194775dc1a157796c21931f76e888bb28f1b7585c85710a3b6d92e2386bff893c77a2f0b0360aefdbbbab2287382732e37b0f6ebbefffc5a305e62f4f827a0433c27b11d1433649fd8f267e5253061e7e14aea7dbe28f8830d818a60ebfdf1a5bfe41e4e9e8495d5bda04c12f49d777f69d4c808ef8183393246e771156ce8c4cb8a22937f1f08f363dc98b13432f4be3dce956985dcf88b158b2b500707070684a8b3f29df7d943eb78383530ada7e747524a9eff99d0771690ce104c6c09558b399928f3c0f8571007db716a09430ead0b21e45dfbd70b3e5f31cfc8bcfcb8ee2619ba169227e2cb61f4ea5246378dc4d9632ddc40623d37745ac487fae66e9a88c46ad61dfc2046381017ebcfc1e4ac8ad606689555e6aac186804155fafc0918791b8309c5e0cce096ff0219a4941ca4785904c98ccd1fcdce4a5c01650ac83a57a0bc22ace6a875879c11c79200d187b8e73a6e7e62ba5550636d793c49eb5711cef461c5d8bf6f1da830fb7d21c10002af06a99a7bd2d5cbb273cb3e9f2af4fbbad515c200987ccebb051264f840c55fd5242793340311b4390ac86a67400e076a9e7f9413d3f9f641b7b48d79eab8be83f09031906a6f6e0dadec1c32826aa8386462ffe594ab4a05258e6e2106cac79465419cd41962baa3f70ea1a65fdab9230a4b8010e4d7aefae9dfa670ebd969135c628428dc2a91e4acafc64ced63da05dbccce201203230fd194cce0265c049058ed30693a110b9f5bb3c02603053fc7c9fc8b5d182d00d0ccd0e3c5d62b30bd076aaaf6ea6dd4d5a785879e35b8dc600b7dce15dc93e6ba19c46a692d3df90a6f20bd07ceb079a098d48842c876d19c9bd70fbb4e871e3166f75070a72300c92e52cb145eed294ff17076a6b1098cee8d6e7871388985f1aedaa908ddd0393d0c42a83019764ad5106d72da4721ce4a1fdb805e4a409c2ce9c4b2824a2732fb5deaef1d50b484515e45c4ef88e18f08ba13e6bfae9a5ec6626d2d8ef061d3f3e33fa67107f7b86a4fdf2f1baef4e0e463980eb894c973149b088845f521dbcdc0404fc0de803071b8ce79d3c2e57e0d2584378851085b1afbb8bb3381068a9bf715bc68dd7a9b1e001c7387683a4d478bdd921b1ca929f3ec0127a6c7b32db0bfb51538b0e055f43fe46c6f68bdd1503ee8a8da9d46b4dd73b26d84ca3ed4938e42e321bd709ccfc05d28f146f9957280295ba4f55193f16743f17d202c9305f89b6844cdbd24a6b91b4fd2ffdd6dc8cc80d1b9dc246187318be230c295d043c81fc6870d6d8555dcf340ea067e248e9a83e60d34e0e71ac43806977bac354972d0ce47725a7baa0514c2d2416848a76002f2556390bd32e0e6127a042ee778201c98e0332bd7d72acf7b40b8b55ef7948e5afbad64da67888248e6285147fa544f3afa5d3ccabc9ea548334470589deeb73b699c909651f8196f0d79b7206d7247e0160fd662cbdcc2b1a5682c7617a79dc99f78d86a81dd8e6747c45b4bf68773509e22e4f9141764cad4591ce223070242ade06b2d556d89675eb6f49b8ec0bee39ea9ab898140b727712ceb231642cc1c6c75d3f4a15d75a7d12f77640467d0c43f1806e9afa0e03f35315408df2a058f2bd6f8d279c2676625d3b071dafc405800398deef894f0c267ec2fb73d39c0a549e94f8a9ba62fa2c01ccea4738dcd208b3d96864adb322b886547b1e2d0ac767322d0d9a1ec8f9c631e7a9a24fa300c069683736505390d310a5129c6ed50b3572ec5142feed225207e983500164ffef409c6e1960b555ebb75aa05957d16baf57150089abe3c5214f5ee90a224e2afd65f6d352a02a81783458b49603c04d64e27115ac4318589d007489e2918f17112e50d3a785ff96c038e9145a99601ab2e969eeba60927d0581e6e8d47a958f7112350e0c316ae5fe61a2acdfc01c34c443240eecee903563dc5a8bc2a0bdae42c33c7e9dd09297292d73638ea1eb3d57b4ed972912365cc609df277037749208319964522106e46a0001e240a1361142845673046b0f4f08a2557f93cc37723beb81fcf0837ab76a025d3fca996c220ef4b0e2247ee8b1549d29ae870e91bdbd1a9a9816ab5621bd85b67fc84a747b82ecf615bfe4cd4434347d4e3eab2b73a7c60817a01da00e54b953da3622ff24068841e359b4bb53461459df930bdeb90220f1dcd3419914f1bb05bf81b9caf4f1b90efbf120a890f30df63fd5819027f7b9fb37ea7d04cf475f42dc681c38e2ba59d08c00e4747324cc319891a02fb3fb46b58b8903a1b0aa5d94bb5a3e502a4014a27ebb4f4f0c3c63ebd4848cd6e7429fcda08fbdcc98990108f2370a79f0cc515d063a04816867d99aa9470026be0d3d260176f2900f47aaa4c3561804688ca2425d5f618f49a922d0cffd91554987be006312b9ba2c72b5974a3a4069935487c5a357958d4d0d05a27b67d2970611912c6755e9a81b46009290727c193036e81fe33be24b5509dc581aea10d229723f2442ad34a414014a4b273f8e4763a08fba1f69a0069184583a5b40ddc352cc03e3eb7b60423aee7e7358297fc0dc4c763a9c95e1b017de2b43241def8ddbcc7cb0683fc8c88773b92366c885611190e2e29da3923d5b84e47c758db20602aaf8996f92395dce3f6be4c462adee045822897dc031f9ccbe95661bd067eb0cf311b3c7fd3398272f39841f63bd353db62f26d6381c3e4b78112c8e81bf2a3347da6ad16f2f5cdc1063c2d73feaa80b1499d7d2c52353362bbf8655386ce97aa0b3e7b4bb9933a274983c6be7312a33cda35f0cacb409f0f10d60de39fd71a21ba32d5124939552e3d200062177699e1b150474cc7fbc0e865ad8a7258c3e44850c887f20433677c037f00636bf077902f732876545c02fa45e684a60100879188f669d259f831733162d51a8a027434877b0880abf479e8d41a12ea84d573b0e96d2844ab15688d98cfb62570071fd931eace3945b42437b53128b6c8030424aaa749d53a61ac30a8b3ce4428d0d99878dae0b3d9ea0ee1759a7d14ed39ea55fb7d9403575bcf92312a112c9dd3e165333cf0feb13744b4df13e00a4337a29f45eadd86d866c56f73474f1dd10c3b24c5101ca22e7e0059861a5f94f836450b771a30f31fcec0c6ab9912d226dc63000b576f8b27bdc5cfc30b1835e64b6d0ddd37eeadfe14ce96bf05269755ec066533ca007b17df0476319330297b5e5f83a4686c49067dc337b85bb2c9131c5d19e58b27b76127d293a7fa74cbf08eb82793d5068c4daeaa63f1c9737f1d31d46be7ba020c6eb6e2fe045c574e5761f36ae3c6e18da5d103038333a5e6031764805b7f674e53ee6ea56a52e44df91cf975987c1b8392a0846a930f8735189581a249bf4e717747c58ded021b78448279153e3b4dc3a923aae8571560692e88bf73c78084695b81c03d90cf64662cf77c123ac03c057861b79caf7d947baef5fbdf357ce4a70c65947d4f4190c0e14c41ce1d65c63ad208bd1b859e2737bee229bce44c1c64ee545678f16244ce0a5fffba9ff48b3341496fcb5944961c78b8e3cddde259878c4a6a0d7db386cab758dabd2b883be6fcac2e5c7ac4b6d347c439005f42137f4916c654382795e961045ff25ed86a8f1899c2b1caa5961d40867e45ad4aafd92f5e84f4cc2dbd02b61c8665c298ffab07d0c286b7da352a9a98d41db5d86335f787dfc31bfff143da36421c3e1fc5e95d70af57da3a4d35ab5402410222168261da346640602ffb9281ff0e127b8d93d4b8fe2f16bbd0f7d5147491b340e16cedda94077d87e010772c65741fc2dd35579b2c9b6e4774bf45112549c9268fbd176c06e1d67d9db868f6dd4c8b899a8f4540d33ece9a725f8e52536a0a6b84e7eb42eb1dd620e6bfefeec9c9d75e7f7df35f544083febfed176b943546ee504b32c3db862f48c0fdfd3ebaa3b5150258dead0252b61c9db447c2b01e6ffb904227b49c8ac3d6e1dc2079102be006868685c5a815238be5f19d89f8c54a260a7523673ca063718eece5c1bf39b2b348d90ad668a8022db168f900af39cacd17b71b329538982e77974f532f71ebd71e15d60c975e44dcc7926e130e60ff4cfbbb1b15c21e52fc13253e13805cb4846bcc73416d504922e8951ddfe9f2c06af23c98c52606cb29d7578f13c4ab5df4cec1ffee2454c42d208f9ff5da068b7b6887a01bbbe881c1441724cdf43349d50041576378c9be11546b5884f8af35f17291c8e21c8a6bcbba71e3dea40384c512a5a4906196d1e8b9c765b8cced2e233c121cb53daa4d9a9ba860730eddaef8f5c190d4a18cda65c747d680cbf02b10270f1f6fa73041dabecadef33aef7f6fcd54037075661fa32599161bfeaa1ae4a91859742cfc5e1235da0b1c1903b78f5d8a67479b61f2977f6cbfee1ed8df1469a2569cd327f0c1769ed326d2a537986ece85bdaa5bd004b33c59ffda71426c2a4bdb4d844fbb49e8327976a0a97c61e7de84377ce20bc9b6ae7235c194b8e1aea162e93196849a5da452067f3e40ae6478138a909380e893f59ca5360049b3df59750917a2a02944e99e3a71a2543ac5de929393a1dc7dc4ceb6066daca2545dc169f722064f550eb25fa96f8a7dbe6a17479fb48923413e24f28095290ccf1e9dfcc6c9aac3f21deecd9ebdfc4687225cba2665c546248dd95f9ebf907a102efff4c1ae795dfce8012d6dbd98bcd08a334ecfcc1fbced2274650d7d703183d64c19f78da224f24ded329259cf545b6120f56ca1fd57f6034787cb1e40e32e162c99dae24cddd0802d9920bde0e53ccb24a0c60bdec1eb6b0c6b4bdb6a2b9a46aeffd54abbf303f538fbb3c5036722a5bebd8348ce578673aa5a697921112ccd4e21923c7de8d60ada1401156ebf6bfab4ec5e8341fe7db58e3cd6d5fc3518a66166594952baf1ab8bdee76d819883a7bc2bd49f98e4e4a47324aa28944a6a8b809a18530cffb87a6f089b65f247b9f47c6d78b84a90a665d6a4d54c2850418f9668710a26256cad6c4225a4860636fd4872094527bc1f7a22e118860eb6fc6995e640e8261e41955355ed6838ea0f39940dca1727d581b7e8dbe3f1a4ae5f9b34a80b4214cfc975126eeed85df4528c81089aee2be981aee9a585978a0c1f62e660ce8c882bd0ee3f5990a4c9dfda9b8a72c20bdecc1dca86edcde99c5360a3f171a229a82d01057ba11923d4f2bbb4eab138359c3d28340dea4d5cca075ad469066486a469c6e56c2a405721d545db8566107e95cc7895fc145b09b8ee1cff6847512bf7ca8286e79e8ea3b7b74cf026cd31f21893a9b54d7251d853ea3f813c399a83a10b569f9d637884490f9fbc8d533c06970fb8e0e48f8357d374afb1d81dd190fe85e1d2109c974a32848bad19b790924b780592a81610e093708206f23110abf7cdbfaf40be4649450dc062a388fc065cb410d82b0466da75884e66034d294a2e3c39dc66a3d2600bfce658c93a9db9e4eaae2dde1d7f1d37231614aec62bac803ab4ea3e4956137aa113b3a10e78d71ec078dbe5eeef0e29336dd15d590dee4b80037f6f78a741b2aeac5709cde194ca8f378909a6100d7d24ccd78d2bef97418cc934c36c30a561bcc50cad2c360ebc1d11d157b14564a1946461ce72f2fc6a69afd051b3fe076d7b8756e073a9d9d472cfec314a425f3bd4952b5314503a6cdf424c1a60db8c0b99f9a47ed641ec604068c17e0f4e2a8119169bae7384e6e7d758e7518aa4a1adbab967791745057f0f6f4df7a6fd34c3981b9cd71096592034bcedc18e7599355e04057cabdde2c73995e25320b949aacc45fb94e3a9ffba4360bd121db602ba34834d7e63d39f4a0ae00e642ba7e8d7e816fad39720b37b61152e4daa63af1f011d6a20055946555b791334da35ae67fdf9a5702b73ad4fbceed7989d11cc77be8d7e96eeac433238781bf1415fc75851987e88a02ae3ddb6593f833b7280099961d3a36e09b2c577082304da689d156cb67ebb3372ce3829ffe12c67293e2bfc91a87a3c5267bddd7c21083b6c4896db82613e3aaecc097863efd377a5cf9f4ba45d879912eee5bbfa73fb1fa995193b1627240139d57ad29944762b6a263cef6e3a3b0df2b691ab2e211284888d77846e42fd0ec8fbf931f85d929ce584a637e4806c03ed7261ff9e6c3a0dda3d1f92b1cbd43e3d9c5ca98e537be898a6e3a983b22415da067cd71ee1ce87eceb8eb579cb1bcd070f383f83f5a6c2631565505ad825d2a5b32f653624dcb549da3298d5c62bfa25098c8a63af4a262c6984736e97553fa2ff056fb4b10051a89b64889232cfddd1a3edae273d6a85ccb5db3fc5a3eb654398c287575cf49bef56d3afb07d760d2ac724434eb06399bfc8b1e9a170a4130a6faa2fe986741fbd697253d5db165f2f8becb136aa3b9a29be053eed753a6792f8b00beac4acab95434e961c773d29785d33cb2bab45831572dce894e6286ac67a6af1d308df19dac7fad9d38421c6caa4051c25f77f78d0f5a5e133c1d1446f7866fe926e74ce6b9c1303b5eb947f40555bf957aa83734a1b5ab7dc4bfb71708f7ed30294fbb4b0ae56e1aa810aedc5b76965219c84fb8a8e965470b6a619f8a8bbea77c498b515ffb4649cb757ffff89bf00ca5a24334d743769530562c765730ce1773b4ac0da61c4a550a98576ace17b3a3db56bb99b973a41430e3f7398f5f164af538bc38b0e93f8c985edd4aa97b30391da2924e7d1d7fe59017333d25e73b23d6824f4b4533074df29d18316d31d541d184f96c4fa5a017736f4108ee17af63c145d854567074b1537ca536c1afec1a327397e7fb1a8d9894a039de0bc7b84be3e5f82db02ceb6a70797d0f731a3b12ecc72efcb830604564adf8fd26d666ecc5966e7928652abdd696a463b1e0431be3bc6d1cdd03d8f2ce692c39498760b0b920801c16b99bf7583736f81361c6a84f8add2fbb3658dc412192e144d966079bcdc839808077fd9dd79ed6523422e22c85e08325510b26879b1e28b69686b89e907c5f33ccb5cdc5b5d33f2eeb5873ba1c1176b1651dec02e06359e04ed40d692986233627d3ecc8aa6578d00c303fd68b72befec6e12b08e7fd5ed93ece0ff20474a1fc6a8e302d936c2b54d843209656fab58a22a1918bc5052891d208582a5fd3c2515d8965d817abf56ce9033f4bf6015cd60e1b6101a360b16ae671f1d0ab3d34f9abb3ab3504caeec47efeeaa077dc8119221eb2fcab699788b3086b6ea00c07ad602d19cf0bf316c73aaa4dc5c07aef1cf9c270aa4d5c26d212483420c3f2c940442632cd8bb9627213a8d76a1c273e20d85a1347f1d432ed1a74a01241fb7db01b99a781f16506964296d33d315a3286b2b20a945aa3824d21602f7b97cb85f97ac610a67f12e6b3fc853bc59d23aeff3cf1f7d848e6b358eb01c6af43906ab44f7250afdad9aad15be0933af1219ae12bf7328763d6eff6b85054bd153c57e77a23663cad6e71728aa66b3aee256a7143ca9a52802ce085003413f48292aaafebad5dfb0ce3b149514fceeb819e75ee0ca391fa07d9ad39e9973115662efc11e588558d649ac017cdb61302be05a0229c13949ce3568cd49ada04b9414e63cacaa95bb1b20b7b7fb2f9553731028a830de1f3ebacf7a96744e71cd1c9b0604faad3ccd27e5764671a7639cbf3b036976c2d44b11f21e80f8178a8463626c1d9a49d885d158c363bb3887a7967355f48b2f45888a00c9bb305fabc7de79f59dac9c0d3c5f3d8157f13eead0f9637b920a650d5ac4c0b81663766c23a8adc76c233ef63c563b1287763d5b85a29e01e9613029b85a0c1c7c8f8a77bd8a0c354d80699d5e42b0a90e097931317b4a06844407ee596838b5a1540afb384b8252ee41d404ec5559a23f85fa6aa17393a41e29a534c58e1cef5c1f13c8b088134f0ee64d833f6e5e4531ade66540980a729dd620d69e837b9006075983516bc63eafca3b7716fcd5c1abe239743a29d5ecdec34ec358c5b349b5d9dcc8fc829f6bf9a29aabb7c1ed2a3098b0d374d0f378d4f9d9e01207549783d5c043e76c5de46b6b35cde21e05da875310be226ddfdd72274645daddca4bed51d82ac9d55298e809999e52aad076c019cfaa8cdcdd8dee8381801d982a625231e3ace43c4586f99880cb0d9e2177e8c7511f5eb7e0ecb3eff5514a6209e070cb1002a31b0802dcb9ab5d8d35c9ab35f8b41934378950a67adfc92d19d62a8203f149c7570b86ec85c5352173bdfd73d29743ffc38042e6b25f12f49ac14d43c0f94df0423297f8ede5961609833dcff48525f79f1a749a9ff0cc04ffeb4322393c1afb4f1e138c5b07ea97cffbb42a7aa1e4dbe6b4de7556b998c4a838a0ce9f121c164846d55b5cadac896867253fd6f92efde38f0628282b8bf0cf5ae07490c55ace976256b711e27601df41c739df91c08a757ed6900f5ed69c683073a104a076c19b39a758cbccc7e81db12e1107dd081702abbf136e43e20828ac1c108d3fef0a651477e702a3fd04a83342de51861396e97fc338c480f84b9ee54965f635ed3ceada296e633467358eb05f62646532c64986860be1abcbff2f1d31399cee0502a6a6bfe848ee4987c8394dd4cd38b45a2b50758bdf4bf060075af256fc9a815fb3a9234c307e5540c499addd0c14c53b5f05d9c3b529d354b98eddd6567e5aeb36a67a64bbcff6c8e74375220b9d892345c74486b2223a6ef90e43bcb5849b3330de9850daacb4fc39725c141681526071d4a3dc7752e83c9d8237a53b6f0220b57113c0e80aaed33dc9a528ea248f7a2012b4e9c61a72f81e86f27aec73ec2a1ec663b6df0be747f403419ae19f78c774c6986d59d9534e560616769669680d8f7a4d91f80870bd89d15ba21ec058d557d33373ae07560530267f5feb726e61ca11d71edc3425307402608635de22d12ac70192c307908f21052018d0eae08cf38551745cab75a4825f58d16a4cf932cfb3950aded3fa832f922e15642b6d4f2037fbc89c1d5cebf59ab232df4fa6c8ebf2fce48804050cf724d40e32d20dbdb292ac3b7bebdda94bfb739bea5aecbc6d6f66c075c0bf5e0de1ebd35d78831d56f609aa4b12c17789bbf50cd4be26d027866f77f066f3d940d4e2925d22e57d24513f0c4745db874c52b00aaeae546a7f9a48b631edc7303484b3fb6300531afa91dc9eec5925f7a231dec41318b922e88b4c90f15c07f85398d010db4d18fa422f29fb3e32a2fb0f75c80de6ffca213419f7effa599a6b94806236e55069db9e9ba83b8c26f4ae657a55042cf23f1c5dea440b0569f3b65ee302b78988e813394d59e8be175666c3f90ed81c739683ee35e03f9ba361449060b8b1a104825cab383626917583f4dda0db1d9896bb0bb24f9432cea0323fb22f6f96e125863a79f7dda3de55ebf30c50e72541deb5b6d09ca88f004082b9ec405417d4d425dc186f09a3f24280ae233b939d4d6d1da5d382f48f6dfd3a23c0dced5fe140bf3c884ee0c02f0d4773d84d5c48defd60851b353a0cece5415f160d7df5006d8b89b0b1d6432b063f80408388692cac2e70edb7aad6d66bb920f866434a41d161e1d381e6ba55a965e0353890de5d7aa7d7c4c7a05af99c5310f2be4580a305d6a2708301ce9a396bf8ec68132c4e8e51068aad2036b1dcaa0a2d3e407956f49a6de5e60e9f32972765801d7204c6f65b15535f020f7e79bc5c29fb1d1dfea16a64a0c232195aba38aeb850306bce9ffab170e48515d27b37ed5a83e0e415326a720b57701518460e02a301d994b057a7028cf644ff607e920925c10852c60d43781a1737a4dec21aef73484b35b2b2df7aba62281e5f4db27dfc9e95176028c5292cf706ff6b186d886cb58d8a3ffbafaf8ad77a12c10cb73420d2a1c0bb80f469a834fe820438e2b48840e154b5f034104ddfc2339abf595ecd0d790570310b958f2c940e86ba3b7df61d2673336530f3e48602d7cea8fbc0a6d7a38fc0854e7ae993ac9b4283ee9e3a02a56c892be2be7cbf97ac98b92052002057c35f8a9f0222753fc68c2be23f3168c29446d37cdf69c426fc72269ced2a563fd9fcac6d27f8a6d13ce11f99612e63d9f1a9a4dd1ff4c5e2ed5a753a76fd376e37f203d01787b324cf8f2943f1d682fe2df18181b89dd20c94e1ba9e0bf1329152cf510c1d791324223ae12f394bb539e70b0228baf04c4b1ba8744d765fba8e6db273f03399b2d9d5a7f53b9b8a5187bd212a14b6d5b80a0ed215f7843837aab30c05363d9d8a279b5585a9beaf8838bf1cdf59a5ae205d8e37e99992e861be12af379691ef914d4803c19ba8dda1316855831563f1717d543873de8d8df1af28c0b3e9004ca0004493cf4b335e30029589611966aef2b7f3ddd90d8b40a32743be2575e381cd99d0ec86e0e71d136780851e82ff78b1993d5abf10da052faaa263159c080c22bdd696cab6184dea408300e4188c03a5a82545059a5a45c627fc4275fac54d9b80e27e88bf8f3853fec1e2ee9e1fb120c4ad2d841a7e6ae9b500e52955ce74f0d0646a15087295fbcba4deba8982809d28b5c9ba898fe350966b2f2037a39544f4999ad3405956d5b311f57d7bb3750e558806dad5a7872db312d5124547d58c431460e342c813f62184f9d2c406d162774c6226f2747218fc7100e9adc71ebabf8fc948126893e54d27bd0806a96001bad018340aac01df3f663b02bf22f6c2494dcee2b67c2ddeb725571a11f304a59c2cb3842f80f5602817db3bdd1bec81e1630f91ebd83f947290809902c0beaa12bb2e7db5269f6e169d7838433d4802472d86e76c228f64ac12e1916b19b4c4ed2169c9dac83eb69559c1805bf0862373752ae7a93df8af31d1b8655d2fc96ad8d496ab529cd23cbb8befbb5ec8ad06204cddbf82b69d103da68d3ee7a04343b4c574c77eba492786d5416753eb419f9d4a4f4b04cdc03d77e906c3f9c1f19a76dfac3c631a749822b69ff1272c909058cf5a74b1a500cb52a6fc101f66b62166a29ad3569d00981aef4f1d747a4a3d1c3026eae6aa560e4797d408b8dcaa329fe8afc21e5a46d45dbd7aaf4d95d43c6030256629de6e072e2cf217578be720418da66b002fe800339a7f56544990f0db7ebd4f807b209b36cdc51d92ec0b9123a6315de6ff39b4a254786f44e18cb49e412419ad100bae9cf8862fffb7ba00b3076780c623ddc2a24521aab4314951d857999609c3a866668183d7e5be846698be7f1f41102adb10fdf4d3d7e31ee7199f2984e189797e07596fce3665e4ac79c8c2763ba5963ff43d75829c23cc8cf5a6eb41df573904caa40893dc4965ad94e5073bb397edc074b33e0e40357e2bb78174decf761972af4787a28e5c169f03ee6852303504ff98d3c0aca665ead1b2f3c90e89da2a62b0601a98007af55f5a5cb444ebdef46aecd0dc5447262a7b767fa1ff5b580cb0770d0ed3bb4db6722d1574286729152ca2903e636a185259c5d0a627c7e57922e438568c31665b29c2c7dd704ff4795d131f65c0fffa10a29fbd6e971635dbb177593a0ff482da6685d9c909881aaa1693145b80d394cabe92d9150dbda06dcdfae8c200a6befcd63a0a1b6f4d2b149d2d286d75d2f1bf9e9124b978d9c35237bd36b8bf49887c9c2b77a51f7cbb52c0df206d83020a746578181f66ae4ea9739afa90c9ba3f68041d0a0ba4e8dc12e7e1b4455cd49fac76130fb52527847e2ddc3bd3b8ac5337662d83d80e16bab3e185209a739de757de1add253d7384f348c364d003cccaee5bf19886c69d4f4ed856f1d2760a653b8772efaf01aed97edaed56c458f8c6f7cebfaea17a003780a7e30042041c472a6e2fa47b404309dc3ab56f3d0301f4a3c3d5262e5251af4930f3e2542de87cefc003aae483a4726b57756a7a5a8b705b44a5997550f2aa5ac5afe09d8164320cc94b529d602c21d11a70aade12824100794849da2e4550d97b22a31496084a1f43f151273b60529eb01eb8e3814e2b9e926434422ecdd897558f7193379cde352691e3a64d465016852ea0cade4e7b920850ad8ec2cd49ccf082001db3f8859678345908ed7b94021b54870701328e63558a596a2e4721edadbc35f79d6a5f739d3e25c867ed3fd9117d69f0a377676bb6a8e6ee10ca7b07e786d01c1dd8f907174d57c72e1b28b475b8a18ad7558c46bdd29adad8317b13477da8567a1f00eba82cc3c6c11534fe2813eba7500a039e0a3db8faee958a9bf97df0c35b641f2a005fa8645b4631ce5d74a36c29e0fa79831fb9084395ffda6781eba01fe513140b6a7fe8299528ad56f8bcb59bb6b46b6fb3110132f3a222b4ad624142f44132f5e6590869009037d5141728dc50ce6e177dcc2a030b148369c98bd36340ed1b8ee44761bb83c45466f74d2fd123b2beff57df5c54c1875b4eef6e00f22cb0d932a581de4f00f932480f12d9f618cf8c03b48c0f0070129855652ce68568bf320fb2495e2cc2c70a97b16efee650379b70204b9a55d59632e3c1e79aa4596872bc364bb65f0080cc44797b1490ca1452a5c793cf70e537868107e7f351edb12056a89e0f737220b424af496fe6a2b93ce594e0176add3d8a2baf3b8cde96f0f13b45f436d66aee668b0ce4bed2682963194e1237fd424871e068431bd9166a719b87584d1415c7286eab32d0ba88c7e472f9223f0e063c7741fd3f2337bbe32e21f18a08452df29ff7a60e7a9e8121f4e7f1d2fb15f16d503d3211f36819a041bd36f7718bde7285541f2cd52e0e5e8c527e2e7398e4441e22462d7b6e46ee603071b7d495d30ee01ad96f444105b2d4062ec10690ec6f2b435da0c8f5cf0b0c8ef9b0c73c6396764a72849c7c043d96b29fa24fe261d3781e4ed6506d2c57d8b3940871ac555f7e60ec7e06d7001700b9ee8efbafb11c0a2edc73ce8fffbdfbc2be5e32d7ff33bb4097e52119d4ee67e51137ba187275bfc698517f50a25682a2bbbb0c72f035f62e25dd4cb9bb1af23132370da1f1a2f7788ceac84204a5cefbb44e254215bdcad4425d5ca9ec3dbad1145fbb212bfb0ff9408b076ddec730148dc4abcd2e9954b6f9824f5b926998aedc37689100a6ab805f9f7f18aa7db828d9f88a862fd87dbac4ed6aa256593b5ecc764536de8a17ca2c4eb121d2abe2870baaea38a15454c17ea50f14401d7453a5521c73eae178704de4e692c07ba8e668a78974ddd22d81956229f4e7db781b62f062331dbc03e0289f1ff943108b84b7b1bd6302a9b18249604591375e8a7f9aeafe1342a1a17388e89db5d2bf4f32d109af02a1ccdd109e81a49e516f0d9cf3ae735634f9d64df50168902279d2a1e2d0389409f47c8061aee3df730b9bc4cacfb3ca66479f716d62ebd2c44a1ce03924dad49d23270ba17586c6fff4cfa1f9adc1c9360e649e3a0a3ca4c0d4668c741c8e73caf0cbfa5c8bdb3ca89b26c4b5bff3b3d178161d558f22ab302351a441420cd685c47a0de57d3ddcf528162cc58b6872619641ff731766c187cbd82b364ef7bdaeb54996f05cd5a90d38ea07c30faa0de68827d3f7007ad03a25e4e30a18d37db2f0faa98fbae96b3591da929e45642adf5e61a443868598e3d5cb5674188465402d4eb366b43d3191a54c5732d1c68c02a74a8457dac7c9b1e681dd6d7d036eb72399758374801a6c1c7f28173d6a5326023ad2e709b8f736e1225b94add7d2cedb1ed0e3113bd937e0eed063e35ca9c81e05faad3ce2e91067dbd587afcd9799b84bfcb676235a6ace799f2345b99a1761efa060783ed26a4e9e18e92bc2c3b944059444732426c5eebbc57b5283d80c8d51f5f4224c9e4a8e6e87fb1c0856447af8aa98c7c0ad6f36b25a0c37af3310222ad5733cdc22f57360ea47b5c8396aadacb4c3ff1d8bbba521bebe5216da333be9f2854e753f9200b413931a37913205d86798f131996e8f3f781db543e5d27361a62046f851962a72d96563d48baa938fc4db904c20d40ffdfea20c58311343ea230184814b53a08325776d5be433db08a80449953d34532dc6e265b6cad76ba3cc9dabd20fe9957aaf7c26763c7d04302064f02b23018ba7479b508b988970156218a81ae354a41a3f47ce1c8c6412ff1efc3422ee86f85032342ac09eafc1648db3ad5b0bc9fbfacee696d100593b202fdb26aa13d64d9a0483f4dab85e32a13d7867ad0f9be2a8d74edc7e6c594786ae3386ef0d6fef3eca084fa95c78b40c3b978bff153644695708d56ed7762edd0d6ff3c6b989ef36a016eaae3a61572485d3dcdf5e4b18ab391eb99ae85da797d2629054a3b9282599d1d2d3f2ead87e73d6b8fb1aa3386ecafe54fe2a2ad5c891ad44c66d10e95b674c8c1df9922e6cf245f031b0bff12734541c7851f184ec1287a682074ffbf018e23e6629f7f2b027e6a05664d8f505cb6f8fd7ac12efa5f21fff1421fa0a1df98537b939a5b396d046db1d83af30cc6d4949eb1bfb2e5118a0ecb9e8f3b58ea7418afd4009339322cefa07ebdb32a256d1fdfa1bc57881001a97f12066990332309608c6241ddcdb6befe01dd8794a5bff79cf80450f68bef884d308acb71bdf892b440192b8a2ac8e572126584c1bc9d1cc8a7aea53301ab8aa661612ee3088515295ee3b7e5dbd62cbd8b2b9102d7d535640e8ec647ac1293fb1e655c1edc477f453cf5df950481205b5f4fd581d2ba95806c1950e2ee0f3f8762627f94e4a9359939c741116052228a82969ee9253a882ac1fc5e8df4eef83446f99d415ba77d4cd4549ed7c337ef60cab4aa18493dfde4afb6f9730a7448c4249dd0c0e61bf90d7832c44895ddd5e62a948096f1b0e3efaddb26c05a7012f22beeb9d06cb2c3bd5aa03a4926105960dddc7f168cb3c50d550da132ed30c5851a471dc8701ed0077d300e5d377b7ad14bcf0f88701e6e5c23c00ac14459ac6f3a4f82cdca9344b7560aa455d5bfc99bef207387ebb6da928bf06d9b15f5e0b30c63bf95825481e522621df0e7c1befbff4f6f3a81fee94002343f3814102dc15b2adf2531f1d4a31446b102eb0cb848ef6db1dcbe5db47482fde478a5f7d55f8156db0b450fbe9f8e23196a33243404f487367147c363451da073c1ed094201456b1687e01c70b18d54d97834ad87dd5183c81efb1f25e17d057715c9d70f2df8ba5560cfc24305f2220eb175a0de37f137456f1853c94356c6123b26e15b5bba23479a03677b39d9348799b197b7353d8e49904850002cc4d3738af51c73543a2e9272ccf6c8f3408c425523c655166128b2e9afd9261506ab0f00d61a3483486509aba9c1d1ff563e98d9a526bc047636a10ae0d11dbf60febb18815411b134102ae525663031954a2f806386624a923091bddb62a880c4b5eb227e9f98c33e6e97008981232e19327b831bbe1aea4bc837a8a962b61988bef624ed06a2394fa0c3bf1e4acdbe7a3e6e4df0e0f7fcac8c786aac33453835cd7f006648b8099d492d3fc0b90a242585ca870df09e99ff39134d9756bed4782042cc3058b24b80869f9c7451f50484482f4a5fe7042867bd2fcabed780350ea851846f2af5eb6d439df49d997e55d6d0b6e4d8597ee0b70989ad36a11d32d08ca878e2d83c86c70319c4d6c0f2c1a90c8938530d631c1db9015a1580fc61b6a1625e9e1505f41015979ad56f7531e862952f9b6a3ec9c3cafe7caa77ae5a8f162ce3a7a707441871030828a5d669a49db2c91b7736e0af37394d30bdb4568965a608a15b0f02e08bf26193b98f87ab1823a763cdaa0699d5f6d768b68a65a622d36b9205ceebb19f6739020699262d0f4ef3564926faeb5be0f83f4f1e50109d23ea8f67804a04add633c3b89e5f3f484d4fbc730ad2c1d6f6f901370f518d8587c7dd3974dc84d48ed80f44fe0915edb1dcd30d7134971e47d92fb67bb4c92c586f199058d12065467b8e040c68441b340cbf29c311bdead5312d809bb873559eac3a49deb9dc0ca295ffa40d2ad992124601b42521655e52b869a1715de86015d112b6a35adcf1b6f8f0bb065883d95134c3959bf6f4c8a199858d4423aa588e690d1bb192b104b9c99e0ae29290d20d6ff706b4ac47bc7fdc6a43a4044152994a8f4b7d75471e3d3dfb3470c651fc978a52349122e2185ec886a495296924a2798760c38c4bb0e622f4aa144355e1cd245d4a5cf5bebd86388a56c62fea28e8409b6ce8fe52cc4288cbe11f7c58aac003548ad5e1dfa1647aed280797369545e38244d8c41bfe1545b57c4ff976291ced1c90b567c83ec77ebdfa9deec780c5b31e8328cf02475d905b03da08a79f6866da4d0b37453d2984d58fd030bc62f90ed4b1c5701834d17e7d032c66cc2d1fb42a2cda81470b98fbeae4433c6787042b1641481948409627d766af0f8d62f953e6eedf004b25766a5b912cf4db0b06738c1ad6cf8307d9a0eac599a53d96d692741422c2128dd1600b22f46235389e3882a10740948ad468f721f201ac2f99e52d0e3a69d603320fb9115ee9dc6921c60a2b305766c5932b0a20d0a3c87e888365b554dbd1c249727445e6665951245fb4be66f30ad355e220dd38a5089562c4af107292c9f5838865d5c25fbdc8a8198cee6d0bd8da37605c57002b2c79aba6b22d8a600bd7fe59485167edc451f3aaed44b149ca89603346440c9ea058c30b4d380552165c8f91eb22bf9c22022b7d5839fd8156b7e77cdf163563469944a682673158aee487bb9840596837f5f1ca54be4e71145aec9db2be8ed27040cc5e260ae33d577d26b42ac9a25e83ff5cf8ff6acc55c23a7acc6b08f160c0a4b632942add91ec1107588361766af58e9a526981c002723890c476639f0dae530c689ef0f4bbd3e2830e4e9ad20b7e43ee55794a0b027632028b4e8bcb9128025626dc4485be722e0cab7398d7ef7c76265d48e8d8572d35599cecd1768a6fe00b9d174140f940b4d30c5013b3f7406526e0d19f8f16de5f91d411c6f106f99bd78ddd0591148c87fa0c693374b9d9efd25300f1b26e745e79c67958f977717618c10ef8f6ac3030d1ac06a57b900190da23e28ef723d7c1c4de348c4f60f4425c7e91e0a859777f5c21cc5ccbeff9e85e7127140bc580891038ef2d6d87eb44e7ad8c0025fdd0ec7223d3de622b0e4e244455ad57615e679286b0773ee83305e3641ef271d3fbc28f1c6890b9193b0b393864d57a86c59ceb20e08560acb570010fe2c0efb63e9340e89b3e0b8c572cf09263819e20f9889e40e9e0ec5196011d2226badaa989e76c26b772a93aa00e102b84e2f4b251ed741b02cd696f735c99eb2e264483b4aca24714571eeac3b87163fe5aaac0173542c02513f424bdfd1db7248aa4bbfc1d35db5c2e05a1d1c18073725fb7cc77bf952fe824734d40fe968923b70497c9c946555e3c45dc4fe6d7f64409740dde30004054d99457be15f65097606120248015db2a471c2fb8a0eaf8e30aa1b750e53c951a66a80df85751be0de1caeea82199e1fdf03043d30a436410f2df8f00d2d121210e9e9a19e20e4f5ff5665b023cddea7f7444ed705e04205aeab37893886dd71ddad4b4bf41ed024867bc653970e52653bf60d1c695813210cfd482c48ee223b6f430b1078513d6e02af9c6684186514012756727b41886cab5dbd7b5e9fd7eb96740f676b881e244b383ad41c0190cd2fef4ba6b5f434ef8ac8b906044c2b327bbb681217f820e2d23a2a5813939f82ffa82a1a8814a20c028ccdf6b40c10f7e5e8b5e4703d7da6d77618b6c130f93500a5fc1a257a41aded7c77c49be5ebde15d2ff250100bdd83fd9a301e78c047a548a7127bd7d63296aab3e2003e880f4052a13977b607c1f5d31ee76e11ee673da83f1d97af59c864590fc43d61235693a1439195988ab81686eee61828cf33cb9bfb6299633d2039a806271e30f02730f1ac07025113f1866acae6c45c7d5661d06b6e5d070d462ada3ef89584059c0dc8482031e0a98b411a5b0710b87302275025e48868dacbcc0882721f33c4f6b725463ca87f80bc030e37a8ca868fad3b0f9dea8dd53eac4714cca0a5f92b3a0280a83166ff48dde69a1241682879219a108284829e0110fceffad10d9d13725704b4aef0f471aacd87ea1771995ca8dbd3653ad55f6034f2421fe157afb89836a388dcab96a44fe682088afbf033139f5ff54e451f5a49cad62dad06f57a8adf0fbb206e04b131caa7c4f246127f3729c3a3fdf57f0749fdee84f9ac23df6b08410a294919b29f6d151a3c8551e6c0c7dee91b5a9459456e37e5463eade76b197f9c1da191e44d037c1404bad62e8f5a30561aa5037651778b30560c9940b8c78aa12983a74e0261b73bcfbe858a1fd2be48a93e694430d1a86bf5aa1bccde959957c3008221c63bb57a51c30cb9f9d6c385165572c8936780c40aea67ed9784ecbdf79652ca246592010f09f708d20847605047cecd4d94f20992bc893b74e2ed247ca00355dd50bedb6dee0928091dd41a6a122ef8ed5f2b091bbe4bd11958487d97fa20a997ee26d4100b891b9238c13c4382d15d441d9396a12aead0147daa01f5af35f48321a1ef6ea6542114a52665699160bd216ae35feb082e5efbd73ae20a8432545fce8d8e23828c80c11153361d3937371a8c4724413ab134552a1ef1c367ff5a4724f92e3514891024857282842da93382e4d4f83b314a9a6841909c29eaa3f1d9e9261e7e7aca064eaff3de9212ecfbcaa922f6af65c40ddfa56ea0c826514e0a2fb69e5479987f2d206c391221ca4df47247a0e6f614a04a855e427d07bdb15b4614f97694bf1382a4220d1a93d3c1ddb49e7cf1f45feb0997ef6e1a4aadd7e51886f935042a54baa3e4e9185e627e7557db250bd82f9141621e1ddb80b45f7e6d40ae8b45aff42706b8043a69c43f17b82cf0b058417f9b05e8162b98faa1227f3a1998e886bcc49c39cd31ae02d019f34ef2a41ebb4b629001ba7659d0a9f4c09c39e892ab67d2b1ead9ed24900682dd4e067a97c420c39312b48297c554fef1868127256815b3d11268016c053ddbb466af3e648f87d03dd2bb933f9009e854a69e8930e05fab88a1a73ccd937abed0eb65615e8a693c92bf5d72dd90ef56112cc01e7a6c16b018be3b137c4b7fdd6b1561c6fbf0db726d3b1008bcfe61b1c503e1bd04c212df3c40f876320c61e16de909c28294a087379b8f6623bef99fe6d945f652b04f70b2d721fba05ca99fdd8d85b59d30f927c5bf295c60f6fe75f6606b0825ad26623c1c0f4713209a2f3d28a3d5640b92560f889e3c01a2d5031f9eb48468c203a371f6e1c0340ca3f9725dd7d56a42a5d584c9755dec57ab0747fe82e14932fe204ed74f72188fb95dbf46f2f74ed06ab41cf43a72bbf31e8ecd49b73e1cf1b37b3dcad99f5c074319ef034dac5d91bd940f43fffe3d8cdd23b02d2f3b61214b9a2b6c677a04784a65938a5b64746e114208b70cc26dd384c4cfeee5934b5065c576da7b46d3851d017c2d424eab9c0a11802a1a2c6ca7b134e6614ba6944b1d9a2db6831a0fa2f460e5fba5f49e550b2b99c743a15cba2d954c72527a3bedf97696a7dfc92de5055d9e01ffa2bc40e833d2c9c7f3e85d9025754991f62240be6abf4586c0ac8a4c79874cbfdc885d5db708bd432ebf45e4dc56d4e52d6264465ede6ec4aea41bf1d5bc439aafac680bd097007991ea45e43532b3ea5b44ba11bb6abfae115fd13b4452ef5ba46b77bd456875798b4c3732630466456f91be43e674798b18b12b69645bd53b84de21f216b9dcc8cc8a7a11f6b232e22be97d8bcc3ba46f112330ab7679874cef5ba4ba916dd55e84c8758718f155bd435e18441801082a6820429431b61061856887305870050dab767a8bcc3be4757952842e5384a1c3962cabe946ec6ade22ef8b104538b2a4f54494305645e40de2dd6765983f10b6169a2c628c913d72732c42f6528fe38cd14da89d66b1582c1fee87f704043a3b74be3efcbd033d4e318200fc0b3ff5d92b374193850ffc1dee676f76a642bef7de7bbd096108b71f0f0bebe3f603070b9e465df7f28ea07633333333333374a6d162d921e4baf7449629ef0369b4d84e004b9e1d72e6ec1c450e68bccd1651e4d025da6c61b3c573220ca1f7894e10c1c5842dabecb29e0fec9e14a224ef039f3b012c6901f5ec345a6c77b33c0ba8204df493468b75e1b27e5e169ae8f90a71e84e1051e569a43c3b4104949f3c7d9700ddac309fb7879d46cabf0d088d94676c09f688d072f23ef1071fac0a5641bcd0ec5428f9be5d0c4c58cfaee3e1809dd34dd38565efce61c0159969b6b0cc0ce0713120e784ebba3ce78a020842ef03a3d0e1880c0eab205ee00b52a795c957e696fe669dd5a7dd78ea2dd57a1fe7e86ea00af6b0f73d5166d9170509d04bb7f1d1f9c45739cbe4fba5bc8f73d0ebe32dc1b2b981387c4f259a2f6c97d39e3339f6806ea10a6e3f38b68ff6d3e517d9ee33f98a678600dfd4e643c5d70508876c12a22071f2ed910727dfd1bbbb3bbe6e9c13841042168ba68be552490b1b23f3f8f885edf1891f5dcaee9a47fef3b7f9784b8ca07ebc44584193f7811d3b1158acf76119e80b5641bc106f90684311216ef0ec414a80842b6114f1ec3664bd13cf98f242625151248315c1883b108255e0108b7de01e86b8b0b43c2c4328a4ae09a8520c6bc4ca821e13faf9e599f5bce3ffb1638c2ec4eef8e27b8ffd1591bdcf48ec19d327fec7fca189285cfe3dd5bba07c1635b9f912ece6e4b3a909e1651ce299a31b055e1644f4f0850b5aa043972c56efd5bccd97f0a2ec20f4d915afeb6a9ed793301b75317c10a6a0507dc576aa879ea2345cd49f9c76afa8f84a0ed0bba61dece2b37733fe252446ef7c84c48ffec2cfb34f2eb6e3aff5f6b04feaddc3be13a188b243928ca60b9a2d48dd1e47ddefd44e7304db1202e8b9f7de7bef39fbb390a607cd9bd3348e855c8716b71e7493cc5b0f196f2516f32a5bba8a66a3e6916b027768ce42f00733ae031de2c8c438741584340e674e0e3d3b59cf3c7ae703c36bbe7996712dbc06819fcfee90d76e67f22534251ace63cdcc8cd7a851e346e637b2cc4bfea399227743f34d8b26ee7db431e3da4c0dce42d50c91204afeb6192ee36462b8862acd6138cb693eddf176598f628ca3183bd334cd63d4a20e88c3fc393d9b0571ec8ff711a840f4f7cd32c1d10ed9038aa20393e7eb133f010ca4ad2048075cb870e1d22d299d74ce6e185d56c02641f304a554529eb42af9aeb2e105c4755d2d25d7de4e7d5e4c3887ac49ae1c700e28e5050454c9d93ee99cb221d3236e548184963030d440062ea00108619002f46060103c0204571044f6e07bf205d158c954c2ac4407c862a0ceb064563ac3a2257b291315b6d3503610c77421bc44babb76f79c3dbb5bca9edd2d65cfeeeee91d3cf2f34e6f29a5d4b6685b342d1a164d8bb6054b237bde528890c264c567e0a088b5829caac98a679841064c56cd456ec8b3e2061928b19241e2a00512055504f10d457c61b282dc09596251132760b282dc93c208ab3745872665ac20a4a203901056326033c0e24949c24892558669903b21cb2a7243621a45a838b292a16b300617f1822e5056902b000ae0107858491f45994cb5c2abd65a63e9b2f6d234b8237a3f569d61c4ee75edc4dafc7074cbc6b43ae5945276f780f91372be49a12a269a7fad2aad2a43df95e20b9cd89e2ce314624c31839454fc10a39d7c603b5873fad7a222880a22dfb5852e88da10cccc115e25841022d510e7417e9163d462ec81022aac288ea0f055b85608a9549157d503fbaa0091020b53aee5490a2e9b146368b59bd8940d102ad144458797ff5a5482be33751173fa48631ed7bba633475dd2f8b2a8a8288d1e01bf7863ec18e3ab100728d08082e833d2e49a0879c78b35cc8372cf25e56961f20e0ce31ed7c8db550e728df4476fd7c2e31cf2763e3e0dd9bb9f879009965310535a503c693df1a5f58492d613393c41a435458c1c5a538e58cec1394e41b4a000a20505ab3565cb881b01bff5de76e05baf5e6f978d1eb477443987e51cfdd9adf627d7b5f0e57de20db8d5602ac99890691b367a4e026b989c56603b660244921d9c84c977704b13e6daa3729267b8e5d94f40d88e817876ecf986ef3a7a76ebcc237e3fbb0ef390cfbe02f398cfce01e611f3ec2d308fedd999c53c46cfce41cc83544275363a729e5198acf1b3b2e575796810297dc7474c6cc5ab795abc9af75e5ecdfb6beb9199a260506055d812111712d710487f39dd7a5c322f78358f063507afa63ab18319136ea03bd0cc091a5ecdc301e2440a9eea7d573532a412e4d68507102962bc1c0fb3226e194d79356f07102953bc9af7dd370f10484a2925ca4625a98447a40c116188284d229288430c9211494442c62907d90b623aa9c04ecf8e40a08843c4011e99328b641d9f0bf01f7caf6bc84e3dd81963ac7476bc2eecba3a3e35cb8c7d60a7caa7c9f2256c1a619619e4cf30c30cac194642c8deebfa1f7c0f8b930fa7189c66708ac1c987530cec0906271a047192c12906271864b06a3133a120a59452a6f5aab5d69aa96c4aa5c89d6a603b0e0a72aac1f035b3e696d81dd85e62bdd65ae79f7060bbeb121887818138330785aa93c250b7f377b7bdb95a4a292749c3a694524a29a59cfddb7c0977602da4b4fbba484ed262ac6f826639e0818b543966c1c381830f9cc42ee1e6d793128b733984b930c41a785d332df85c2008c285fec478c57a5d9a771877d2b0d8945ef184c4f2f333bd13a2091a3c25b1fc1683af371e9c4e1561885d79f093eb44071b5d48c2009d9f68d72d839f5c5c854e9ae1152a70e5a98fb8f75b3f0cc74d600df44b86b20a1180622fd7204ebd40065e9587d2e78c4f07f6c8620d49a316946d3c427007b39cd4d3d6c3f44ee8dbfd14406beef28c8b9757ce41a521812aa82d017280d6dc7bce87bf0348d0f08a56309ebd25160907ff25b1ef8696711c803064f8f1a1039d6ba79400d3535e390b028c4100300600712e0b55282d93c1009b8f784f718c9a8d47c66b8365a398518fe2488e4895c424269168c31144800d6fa2c0a9c8dd2d473346ee2467d31ab953865d2739bb69d34aa93445872688236364b750d539dd83eddab68632cd1ab2f84e3163558e0aac23058823a526a3eb401f32fe636776b6cfcfe6c7fc7855a717d80e05f98af7965c0c44ea3df8e07514e41d7c6426fcc3933df8e89c430e6cc74c9838a9d181106af262e51c28bd27261dca03b00140beba3c3a0760032eba83990445ea90e31c82801808d64438ea980854d980880b9dc20eac0bdd2305a83ae1c0bad04f8e744e4c6ca7622697c9c371ba417446419c8b2bc19ae8196b0d1fdbc076f59a72ca2187530e2603489183294c8f769450fc2442e32751110e1452a8608b1340c0810eac584d1604d1450f3dd0828833b6ac82e43ce95f8bc80b2c534ae7d3129e1ed987998b9cef723e48ce378d93284be5a2fd49af3a3bc40df82008293042900a92c8c14a6a41e28b2e6ed0a409317458c92780a84d463b98746234430c253c648192850d2be95500442ab03020ed50ebcf0d3a3c8182284c6499426825bdc61d3a458aa02c1145136404adeecbd6192f2511919752f6dd815974e65f8b88884889ef6e6610df5d99bd51b3e7ecdb33e9ec930becac5a1727cb9209d5ddccdc0890b36b68b59cb4a22c116be7fc733aa525c63ced20db4dcffcc0e016d481de82a205e5bb543c23b623f902fc6b41f9d2c4127fe35fab09269f454d3ae92651083eedcbe4fb52a7711ff87c69cbbaf9631e31de91b846f3c82a9af9639cc72a7ab3dbf5531fb6963a0fc11aebf1dacc2d0f15d97a83685f31b7f0fa5c3f7aa6675eb7edf24f87def9f0f31199dd1ee66d876fcf74f9f57ab7fbb9ace42975da9d4ff3ecee9e7d7b2875ccafeb6a6625978a122adf2f69d3cc3b3ef294523afdb10d5309c4b928752acf937d973cd3d8c98f0765b80a6ba85f9a06719cc878f425258f25aec21aacc4c938e5a63f19cec29ae818c74faecadd661ba47c0f266868084484fee65f6b08452f043196e082e4b5b7e150be42c1f20bf8d782c28489325ef5afc5c4948702f4d9b323f9fa12468baeb907608d7478e4068db7e3d1c6933d6fdb8f18a7de10684e8f48204ef4b9f5881c88b546e959f5c955c7b8189fe1a8479ef176956f676df81c799c8e6118cf4c0804199bb93dd0e3c871601e354c3ebaa61b913c3b8661b74617c484613d108b37e230ba7c4f23a75e37928d9b65b7db619f3ee9d4895e647de0cfe8957a8cb6fdb0e133b3215365acbd148bd7afed4ea7b542913fe2e68fb8f790eb4af0d304138b70080c31e82af92e3e748640318879b0d3e8c3773e42e277fcf0f6ccde78b0dbc18f71aed46b176f17917c751ff8d331a6f124d89ee9311ebd0b528a353c7ac31d341ee3f363b0fad34731773add7ec438e69563d7893538eb34dc8d18175a8673a163b80781a06a4678c1e8c0482b33ee54fd3db6397b678261de981dc661eea9fac8a73499ac8d3b3c461ca417f1c8a76b4ee345364810ad83475e73cbdde01ad690eee63da3de78b467f75167477cbb177e9efae69a4320245c5ff26b093ee2c03c3a7ecab70b62ea82685f31970075ee8268f0c84fcf184638ea4c705df7eb4ef6f4461c38c7bc2c9a256493f69331085394b8024f516057b2dbc55be24c50357d49b52f4a279e6043d85e108410a3280b134d7e2045ca0c265a20842b46925081f4eab25e0badc987ef258220f9aba714d812ac596289142cc1faceba95930d392714a4e00aafa52a6563a34a3db36afc6b29c1c4f7bf961241f8ce2425843bcd62f10e64bd0bdc9ec97ecd500825861829318392122a28b91758a4d49773a34326119c5d40078b82aad433aa0699452ad5ddd8a852a9924da96c50ec9d294b18b63a642fb227669d1842958d562fa59c167d4a1886b54b487e9136924622954828925f3e223569f3de48dcfbd1a665d85529840e470cd3783c6c53fad819f32b6583b3e199cb8cdbe706e41515b53f1cd2deeec79f6443fb9ef152df8ee445b65dc64d5b0f537c1b5e3720364c366acc7025ce241303c3917cb439491b71a3eb237ff3b90109c09b3897efa5db604994a55848f9a53ddebe3c33abf09cc2b30b91e1b32daf5121fc996315aab0db0549fde592b29062d71ef5026b7bb869140fb64b350ef566092486a2a222283f6a18b2b217c4f4b0bab4d77565e49809148b29f548b58c6687031fe3ed698f1ce456805c177ba277bc3a3705a8923a5025e5ce3b61f44ee0177aea2720ecb4e4a94625c9c608facb7be4592635e6308f71597bd491635c172fcf324cc6dfc38195764619671de34aceb3020dbc925b8f114f563578f9e7b3dbf568051a78d5fd7cf78cfcf21227c375239f1ec3751218711949a3d3233b8c5b8f5cb7799c75e3e1f9e169cf469e61ae6d3cb4c47379e99e8064238f7eed50efe28de1b8f150efb4d412a0f7123093712497e1ba98db5d3d23e7b75ccfe63f4f9ae1465c0e0fd550da3b819f5b630c7df4d6de092ff0d3cc6e10f8410246e3ed478ff63eed747ffcb7ed58f842b8a8661e33c75ac02ef799ef02e63e9387035975ecf2b741e0c7e6ea691574fe3d9bae638c1707b6bd87a31b3d6f3b7d7d402803b7292a8548be661ae61a89316e67eb2df41ea3ccd4b3fb32cf320c86ee0dab112bf5a6857954a73d9b6331de98c7dc0efee65c9e7ae9763eb06ede4ebb37c7bcbd258051677a4f23ef1deacc439d9d3176ecd66ec667bbcd369e669fddcc2d35addd5cba1d37f941bda7de8edeee058864e3de336fcc94528a89f1ddf41e519ecc837a771959a7de3197f639720cbb1bb65d1ff8a3eb039fb25b6ec2bd71cc3eb2d4e9f6c3b2cb709ac77024875c0d8f9c0d9d685908666318e60d46cbacde6110c6d9ad96cd5e2fb23eedd33638eb35b8176b2c89e3263f9d4e2dac456e3d342e35ee88d1a7598b0c101849be6c0123080957fc172a5f4029e3b5679749bec3180a03088c2a600881c1e5b31ff997ef973234733a3dc618b3f652f2f7dc5efa0bc4e1ad07df368d3ce34a3771c733b90d9a13cae1e6e3ba5de5db99e2edfc5530c221d9eb2e59a371e35dde5d2e006437607b611e376a4413fc9ad05f9e51b7535939ddcea9d0dcce4464e3c6a8e306d731bc74c0db737916b3db5e0070e13ddd70ea23e7a04ae316e51b6926469f94b3ece423eaa58c4bd199ce3800ae09a84b73e19d3e62e834d727c24018bf38469f216d36d2546f2f30234a6592ebc60deefd7565110e616e34be1bc5cb27f5eec23c628b31e2ab54f2d8f5971f511f79e61d74e6dbf5971ff9e53629aeec997374aed7077e767ba6979cbd83d707b256c5ca142a50883a146e74bcc9bb9be9232e95ae3bba6e705c1a759792673ee2a2eb441307e336b818afc1fd0c47e2a0a012f76efc46c36460fcc93c2caa97ce51cb6eb6c8f0e8f6607e31e6d76d2f9c43a65fe69eaa539fce81285da57237992c96cba7d378d1c83a8966641f54f18519798fbd46ce41364e52422826373fe5e8f2edb697f6c23cbe3c26e7d7123ce62527325f1d7f791744c7639e7917e47637590fe6d433cfb0abbdd03000bec8180a3f7991d36fdad217425e9e14e18ba1ea857ac9c1cb0e5e9c58c99ee3c06f1bc843f67c631fecf01dbe82ae02c45141cbe46195671fd8ee262787872d2f420f5d070a423a422e3f442e48643aab8235b909ff5a5e90e1c59628373ad8f46a7885f804604279ca4f564e54b4bcb822c6e885113ec688a2395678514574e80515cd0b2acf6e9bc81ec491f2491a2384ef9dd071562e4578417ad108bde1cbdabbead4db231623841d0b19d24d7ba2f79b2bc092034f58a4cb2a58b0a4b4d3163a344f695cc96a61abbfaf5a573a820fa894e655d3bcdeae27fae695dbd1b4aa554d9350b3a52e86be337181e5212aa5f11ce384c5290b16724ea9a01a619493de1cc13a72a87737d74ddc715d8d522e8aa033cb4c954ca31fa40d99c6f3c68666ea9315db69965e4b29e542c953fa9466b972b4122ae65f8b0b1cbe4bd540a9e042a47239a26d7106b60512ae2db2d82da2186dc184265384fda0e3649f511027c22c906cb9c19faeb04780e2d04a75a0eaa707466a8045872e4232b0c18a7629834b1633883c91c5145b0495b65022001d5b862983e2a48517991642578b23a9316c609949418537a46367941a2593b5d3490cf514a04a054a2dadd42bcde2872d0b26f169b136b0a62344a5acb0dd1bd25181cb10172dbe53916e98cf849a338b9dce3dbd4eb773cea9e5548338e1bfd696194491f1109634fad7dad28288c5132d2d29c59623747a958205d1d7fc6b618105164690a289f4027440d57386cc25edc609db695e9f4f09e2d4209a2dc5e69839464d8381c5e2684ba8c7b4ef3dedf4c9474a5efea8fdfc8fd3215a90cfa543799a0233c8d0a79fbf102127fbd7d2321421e7137acff4397b723ddb6f9cb3a7ec21634cf2a091ec32bf2c4e1e76361deaa1c31616a28792ca771ae4faee6b984e7b432838f2a40fa94db6b7b37d67efc84db69400177d5f14e78862216a5287930626200e3f7ecf34fcf88b8ca7a0c2872260a9e2c56ce9e38484d5feb5acf0e293b0d8bf9615587c57e3145bb456868e3041edc6d66abfc49a674b5608bd641d50c53937394670126bdef7e9086bffb5ac48f2d60a24d15357b25cb1f29dcf2ed977f9d6154d3e6611ced169e75df89615687c73093adbb5d957c8b14140ef50f8781ab2f15febca147f02c2152adf7510f623146ce54a141fbd4608897e76910e724ae9c641d0249452ea2614a594527a45e8ba6e0449a1822d622811c289159d620410762822071f2c216245a378ea26274fe995239ed22a689d97945262989452567155a10383a8e28bac628ced86074b90e20c2e3c38f1c14a7ad5ec9c9edd12ac69ef2ab8c82abc88aa6e2f951c488994123992a1d37732c252cab9c95591facda35e699f9ed8f7adbd54c319389d5584a830e20890b5f6aed6528c55b47c74d43d1561df974a0142f18695a763c8205523ca8814ca88219412a8242676b228d40f2e4a57404403209e7a8aa28e981daf258a01eb69fe11c940c95fff8864302506d9149dca9d004c2913ca8968e003d10c70800202ca532847c208a2dc64e2a2a64c9412c1000b9d2824260a32ea89edde908e0aaaed1f110ca278d23f22182cf1dd0dd07befbdf7de7bef898e61dc89b04b7bfc575dab555e135e55cad81e318f596b8c5597524ad95b0f8979f45aabc718ab478731da2aeb3cf18c9213125f46ee042fda9363c4b07af955afdb49593d3e9d58a340adb94f51724be618b98c6f87cc837974ec3efdddf48e8b9e63f5c8c159237c5805727b60cb864dfdaa537684befde861092901e80d290fd96316978ca58c51c61821941046a835841c3fac9573b0438e11c6e9ed3146ee241b3e08b9f76f3e8cd5218e8531c67eb19bf6935202892ea1c30bef85cd990c7034c9923bc58f51faebee7e2fce172f7c56628eae529b18ddba7360db19b5c4360a084ccb48407e9edc50f4ddcf1316eb5f88af6b16eb5d80c2fa761f6c0aab0cd6776f88f57d6b700e58e21cd05142bcad87267f807f443d007da6695be92111b62b95e29b79389a7b387c60dfb6f3f32488f52ffc2021c4fae884f52dc4fabe426219ac8f77c439a010f639c6108b1886f5ac18c5b00a8c3a0d70bb66fba7ebe6d7ddfd1ef7db9c40c2e4a577764d67be26373dc1eb03fb133d61d70776aad79cb2674b279fb58c97d7aca16455e36d87d4974fa7ddd7b5f545e975b1766dd5e5dc7a7013f6c28b6118d695084995cfbc1d25642fefae7fb097b7c39e7e40326f2be7a494e984b5b913acf2ea4cf3ec5979ccbbab39ccb1db75777913f100f4d8e5d57bea441ed95b16598cf19e76809899999919c2781b87c7333e667e10b25b41e1008503283d4606748d07780faa86f00fc79f0cf5c3034ad943d5e0b510441f5d8b9df69da36ae0587c7c442760f231528e32c39797fedd5d4f3bd13be3291f7dc6a3c32f3f0389b05ec66d787498e4a9f70c41aff9647d79cd2dd10cac762a9d0e3dd10c58fee61fd10c420fc3755c7a221ab07c74198f0e6567feec56f20ee6ab06f3350436427071326ec3491b4fb1eddde690b5d1f663dba26fda0664c637274de93d301e9d3beb2387db0feb5246e676974b8f366e07f3d8e43a988771cb7521f81eae83a18013d1830ea6c0c288212459bd5743a23eb9ee226d3ea293b8eefa4e3acc0c97719d708bc0f55d93e0357fdb0ee62478acddfa76bb27f64827c1675c27334c7b3d339cc99babe11bd753c3371c178c4f6e6e3edaad4b790242721b4e721b9ed5ad7b98bc7ba6f7907cabfe8371efe1b83ccb361edad3deaef9bc27d3f5f1f3233fedcc38c9679c347d86d36c70d3b51105de8ac66d7033de7ec325376f8fe652c649326bcd06a7d1fcd070c351f05e02ba954ebc5163a624c3f5689edd1ba862989bc39d80684e72cd4997bc3d9ad340e007091920f013811f24b61f433e06197e1ec332f799ef821007bce63ef3855092562f7f19764560fa7a3be9a38de804ac8709226225b1229369889106d0675093558b0f0f1d053bed69f98652ea6078ae2b7596876e2a22f2d051454ff81f4cc5cb4358989b21d260412e714a3b914a2612ba8423158d6b0b362543e3099626bc997c185d81068b24adb0bd044be54cd5ca2b4bc0fa606ccce8aac1a1b312801ed629677079e8ad1951c2b2f7abd1cef1675ee30eaea661337f370586953599c9b667ce4d843ef3b8f5c86203a2b76bb00128cdb5d304a293dc02d0477e5fac29027df435e33adb653e2facff12faa12d329875d89da5cd54ab9fc8b09d8d8d741d1087e424978e42e6242ef31197d558ee7116bd5e511b8255640f0b3bbdde7bef39a0a8288dd7fc713b39dffd04bd7659c8f94e858fb727f31eeab5cbe92e7b9a5bf6aea4e371a81d2ce6373a9e5f5ee30eb8c1fb6e9765f5e23a9befea5f8d3e0db61734461a6d6cc91424e7a153ca900ccaed5c35a9fc66ca9713ebac662388dfc1f018276b73f1391cd40ed175b8ca7f4a82ed72a086c44a32b21e2d4015d4b2d1e3f7eca38c33cd37ede28d0ea51cdb9c320cf2704087300536daa05c601dd2963ec2320ce3f8471c6a07bbb1500d3f135471d68e75f5faf4cfe6f88810661654410b55507420aa075b6b517b3ff4e915cb28c449bd1346fe7c00eff98d946e3d462921946d515936e2e87c4d259f34808f7e39cdb661d80684af8debdb2fe36bdc16471c97613bd5476df4b83e99613b55eae1882eb9cebe7d18874e1d86abb046ba9669de1b100c36acded5fb21f77e72764ae916c376f63486352531d2b03a8b80207b29f927312c7f40880b172e5ab0b0901608b978f9225136583184be7cf1d2ddc5cb979746d69e4da8492c6252537dad73ce79c37f4242f6f8cbcbd6fc0774ed6a3abe7a96490ce37ce05f43e86c8944f69e8d4a05558fd218eb95f20a21f41ae99429efe62747a987e35ddc66643c05153e0c09b5ce186a99a144477fe92eeda5bff4972488b0af65460e2d336c28c38c32bac80012d35313c461a7f40c6b4271807a00042df8c04053f4f6300b0932a6fc14d203f32a640342b8c8a5478e4aae1b892b3ede97dc0b3fdf0e442679cce3e6335c0fe6331ec37598c79021f4d22be5646e645e7fe04ffffcdb62e54a19cd2a473be32eaf5c8c53af2ba0204471349c1c05bcbab61fd554eb9b485eb91b72e369cc33aa655cf42c72f4478c5f5dc4bcde13908ceac447e327df347fd34f3faab789eb99f1f71ae782c96b64dc0d13c7e3dbed301eeb7d37d789363821fc3b98cb780deec77bcc4fdc0cd7b375325b4ef7d333daee7c4bd0acbbb59a699e65d5854cd3b2da2ff047cf6af54be3cd07bd5c3a951eb98beba14e6f3bc332b83c3b8dfe5c277643de878cdecdf51532e4d98734285a6500fd6b25218757c0bf16195a5e92a6bf0d45c4b2479f58a512ec0a15b800f3e0972d32b07c7b4c491d640f2e6109a7259c9640056f9c5683ed6e1eda303377371750a166582195da9c5dcbf98d5135dcdc984cf576eef456b9b9404e8c92267070a80aa592a814ae359539ebd0cc0c000000027314002028100c07042281482c2096abbadc0114800c93a04a70501808c31c86519431c818408c0104183230022030421807ab53716300ab89206eb3a597ad7d69814f0d6ab09b1fbb694712f9b889aed87a7fff8b82b70a13187a2df41436b9b1216afbe73062117c327da3c0c3d97b93b171caff0367e8c5ee9b9f38995eccadd987bcf0e4562330765a397425a587040a65b88a1b08ad5cd5896d93b10dde1215715c2b7722e29f1624503c1ab9fe1b70da8f6f1e3fcab50f253222de0199b7107dc2b825380046cdf45187b99a53269b1a3a3e2f6f5c6eae0f485e4e847398cca12dab07ca54f32d476a444651232aaadf1efe618312e0d37c9a42da502300bf269af408526960f61d87559f25de6e398088e757a8b116f0ab1adaa07feebcd0c8ffec9ece86c2f400b5653331a7a08a50cf0d20c05719410e50f34bed9f2381f5e9c52fad88fbcc4f5b7a2e46bb6906c9eeb60490a5b57247d4ca7d7dff3e26f67ab7abea28b9809962d1ee5a75b19d4a63940f62bd73f399b6de413229048a714bfcc547f41344d3f48504d51f03381cd0ae4438a390456e82594744255cb319477fd7a38a5fd07f5334ca7dfae84d2490abf88e1d3dbbb5420b020fa21a85967eb264277323722eba5e7a7e9ad69da97544a18fa7430b6d28d15ac1e6585af5b4543e18d5fde432c2d6eac00bbd2dea1f4eab0a2a4f9c0d7dd5296c812a74d3d8648345f081d99701f1ca9a56126f5ac3bec01c4fa3673b895b3381cecc1256faf32b736f89a4615ac65fb294bee719ebc7311800c1c657ade600bd1e1777fcb8e9c6db1d8b8401e4122b3fb5a473012e0024d63cb14cd91d494272b8143f0e5fb475f0ae53d4773fd9292cfa26bbcb64403e1599fd0c7d94f226e601f006a333e3141cdad6d0ad7221e6915841412116a359e1f7fe0ac09155232951e37f8920aba899678244395ce3ebd297f7ede44199e227e7716b6c71b7db9100d7048928ba6dd21a5a008a823d179174e8d38cadc30a0cb96e36797f736fe6cd3bbda122f149bd27f26730fde9abf85d2a26004e84d13abb4b67542c3c6f9b182fbce07695822005a0f20b3a78289d010ee15964ad9cc5fe2ef7335895e9cce5d735a5e636cb7bdac3bf498a61ab47953dc0156f284e0d515733f631f797e7178e9953150e17fc1ee45471981fff9528432a64b728f5b72bfa2eb594fe3e396a3283924be01989d0a92789b1436686273599488c43fcf897cde42b7c74fdf20567730414b3163c5753e0a2c02c8922191af0b88a93094baa89008f8f468df0250ac9711a878b0c17b3f5b56fe4681fbfeb5cda6f9d0475c4e01937891246960695f15a728b3617e5bc337d43866cd21d6b855c432f33d53e5f4dceda6cf1c0658440cb2e8c186617203eefcf32c01ab926396059d0bf54b0865f60b0ef4b330b69efd145cbbe12d0e71cb4e4baaa4b8e2cf95229dca29c8fd808a9ee7e57f6b5d10ac026344005a33748bd25ba4d1c831181a12083abf4a67b09ae8f844cc020400d17bf5c11e49073421e6362f52d39823842fcc564114fa1e31b6b04902eb02fae42014eb71d8e124c11838688ba72643ad00eff2b27f6693b48649c70f03b5f0c35606f41342b7aea82ec8aae41d9942175081ecc4de593548e1a87494e039b36d9c3f4de79e9d0e3582a432b794c29e8dfa057365c392a8ccd538129ec6afcbb3fea24d314bf7ccdd9e8f72a7e3a6ce9c1f1cf428d819183af480f66118a6c9794d4875ae73ad553bb79d4b4a891892fb1d7ac680525df0abef1f07dafaf6d3adc49ec2eac17786e0b3e8da6c5454b53b9e7e239ea6d6774792680fd7d6dd35bdcb685078daef4a57897a28f2eaf4f5d46ffbb9cfebb707d651791ee9dc1d1858bb86446962b087ec336993c05bda797e18e8a5b5d7414440a9e3e28975d840f7c2649b3e188905bd3530b09caccbf5ecdc8b4e58f72355ad9b2f45a68a971474e1c47cd0d5e6a0c92d64d827b73d27e22c9b82758a334b2240654df6dc2c04f1097a0eb9a2a512f89cf63784bf3e17501b9ae262bfebbfa80985e97348ae7d653d7fc10d1d41fa942eaf0878e0382fbe38dba2e4618195f4c60be07fd762e4d1b7c612ea1278869afba53021e01975b3fe182aa49d23158d99c3786e364f6a53e2e2489f9963d0d639fa095bca0681406491d20b9b1f4c8b7708205e1a1942123e9b042cc02d9945cf91f1d72009223b7e63402ac3631106f8016a9e9c7971b66ed8670d1b4f99f2feed41b92762309db886712cf4257dd20d6a7a625b3c604c71ea8e84d07baf85ef0f9160d060e4ffe8f674e2c18277b44b1ec3152bcd57b718b60631383811f4677ea8fe51942409890c4ae42e716e6e84c9f8b323e757648edbe9d2078c811b0ac4843c917b3d18cd2e92f544544614159cf95134bfa7af78cb82e80b70380b55842cb20f06c8f5710d2475597cc8923e059839cec12175903fe456675ac6b5896df9c27d06c0c25430100e964d0fea1391778677c4c0687ad74e0089b85124779070125e9163cdb8c9111ee7107e732e3745d2c5c2c7ec736c91b5f0fe6abd64a742bb9ed82b1571bb7354648abf553a1d59a6081ab486f56c15b4973a22282ec1f3017b8591a27fa1b0ffd14a171451e7ae6c8b04bf346e1756a232f7070ab430f8fb05600c5d445cd0491449418f6ac296e967c058ae65f6092cf5308a3b44e71cdc6c3dd6847b8e3a42f19740e387748d52344d204c651aa3472898197784cde80112318162308840397eea8f4fcd17f1d66ea4da8c1a515145aca5ece0230e4d72420c0b19483c4d0adc6c691f415b5614970896445ed546db220255b3ff5276046cb985f39957007f3c447e280b3498af17e48f49e43f3575e503f0a18c1fb48b5c04051fba785880d972daffe8a5103c199241c088505f153dc4dde739da01f6f7d50f5d7579882d169dfa73032273fdfc7c65cc14f39c2809f6b5bcf7bf17dfc6d0a3f8ab5f073473cb3424794eec601dc8b20660715da8a820721f447bc7a7d525040e6b6a479f5d6605b325384955a71dbc112c72f5f16e9f22d222d0a3f94899adffe4e3f5fc49fe87c4aefb017342a0af62648c9683bd751aeab3d9fd710d8955511c78e56ba213596f082829b5289d28caeaaecd48489226f5d41a67df66e0f349ab2fdba394698e4c09a0c60441f5fc8c0833dd7c8f96c28c2d77d22dcf86d7ba0e3dfe9555c711d30514dbc5291f281f1c00a6d2c92dc63fded0c71179178c74c7199cd62ada1ea6a07c8b1f7f131cfea9888bd9ad0a2ecc342b978dba4471c284fceaa8345896b54c27edd008726ac1c89eca10639845b57f8c792a22ab823c6bcaa13837c751aacf291f5bbca90eb223e740ca8edb17518612378e9d2446fdda4b01156b3715314c001b7456e367bffabd70a154d6167b20f8db21ec7889afe1c67ab614ca674018c51e06e3417b90b31a2df28185a43e3168e3c565be1be6ffc4c70912f0fd80afab14a446084a403243fed68724c9bca7352f0658965d1698b8fe1678d7efcb218d029b8b97b6db9d9a7363f3fe5267d5e1bdf170258900e14771a71cdd3ebc2142dc0e3c7d914e07700118426ddb0e01a500f49a8e4858ed5016b0283d74979c1419acd33caff377677b3e8e71a4fd65e7d5f556a826897c4a4ac038c13bdbc31b613a33182f99d1096bf3b1013069d1c930dd53187faef835298654cd7cfe914be1b724ef13b5ba9108d0ea153831a58b05ddfc831ac266812425d39a4faccdb5d17b035b50c25beb7e730808a3f0d6b780f7e754596caa4e78ef25fbbc7217454024741adb889e369f80cb70b333bb11e73035599c454ff5be18e1d572791d14eb1d69e711aaca3f60507f2c3985a852c5e07b46d64b273ff780e9f78471d6abaaf83830a86035c14edb932a36856bdc5244c422c3cade0dd5bf56d9b6700bbb1d6dd94562da19f6e482284da26162892ef6c2647f270ecd4fa7b0152217ae5abe5f1de691a5e90ac3ebea8c2eac23d22ebe01f1da1cb5979331e73e19c1929afd6517d286bf24a84a2c63056a2d6e40099b02cdf715bcadf7bd673cf3029468e5af489a63d41ad6f9779efa545bf9b3c864c7718cb2b3c9cb131e0fc429c2cea5f58e1f0e02adf8d0b6d00c3a85ecdda3b0491a2ce26cf0deef15e760858d2e174e96af0a612d2b3fc8f19c355d84722524e881ce9a264e0320661b7d5026151c9fdec07d54e58441fc1e7411f1d3899883ea56d8cde81eb49cee536771a1c69f0bff86c99904828bb1c9d011532cf00cb950b5a94963c30a3247cea9242b814895e8ce0d242f0a8a3b39c77c33f4a4c3215c5f533d50a008d4cf3f2c9d1542d6ad0115bc0542733d913299dc931edc6ee1f090fdf6312beaab8cc904c4f0edaf35d47958ea0a64c6ce239d33ddd7b7a216c92f5872eddc375efef3af7be4e7b5cfffdae6bffeea2bd5cf7deae0ff65d728d3704111f813af94a429b23cabb7049fefc4f5633b40d5d65c956c655fa6a06030613cde515d4b664d708ea27d0526272c5625609b22015858e64a0ba6f64d2530c15cccbc82e6b3c5f9b85f29514353626a8d3e5570f9de433d69fc6e0ebecc7e25cd0d4b7bb558b4f0e744e7ba30323eeaa59817d26c44b5e1df0a5ff5544cba6a0f7b9d256214014912560b90bb197084b5e46812e2a64884d97517d794506ebcd7c6bf17a3db399838ed65203af878bcc22b1ccc6880de433640e159a92d221714ae2b74070a006d3e50b1c02e88296e20264077e2214592ac08f9be64bf32d9ed7fe6a4fb140be21cf27b46905f1200549de05a5d0cab764fa99e390484d2125153f1483838ddc42380858eb020feea950a6f61509da090a8e88d0fcce9c33843e64d2dcf40dd20e451f7c6a199482e2f8c98a640557488f394bf018e1c86618a72d38a9c52f6e9370206b2dff33158092b365832b71f369bac35188e119ed03de0acc7440bb2080bd7ca2ae89309bb65ed02ab6d8c724c92d8954f259855277b6fd4ad2a72bd6cb3a9fa9a452ff52ed1b20eff958548c87e46c2007b12d160406c3a77fb35cb5cd0e6a80a018c494fdc03c9791f8495665321b279d03668db5a4f8a090d9c8aaf60c924aad89dbfdbb975c163a84de845202d635343f6ca7fe598a7d135f93e4913afde54435cfea69dfb07df656e34c68fbcb1c1836df84641e65a94fb49e1464fd6d67abcf584956f836cc4202716c077b1b0fe32a7ac78d8e1027ba1a47c079795d9ada180469ae413695808a206b55a4ed970b824416e880e51f582cb196ac019a4bf31dbe5614d0e50bc488884d1499e35384553298357acb678a0a846bd8deaa5288c9650c8ae7b2e865fba7390e361ed38cc1e538d839b81714f42dd53678844e0202214ee5ecd472a754769b1c626309a7dbb026f00a501e375b84a9eed110d18b65885f31d97578c796fa160d2cd963c7acd5689faf71b2915825ba3a4d5a842637a2e56f41cf83526954979a75731ec8590e9b63c96a61e6080bb8822f9aa55e90e49bac542e52506cb5ecf02cc7e23b89dfda98040549816d1083b71eb1deadc498a80eed347b4914b7f26e46f786c7ccf500539894c2f0a71e4baf54e9a1addde8088030e81035ca08a69dcca63b2284986be352a83e6f80dc285fd9b433620c6d2f4bf5f9b23627ac44fc72d15910214306087c373946ec358a8c4f0a927f1172ca7aaa89b9d6638145d16f76d1be5bb0d714f2298ce77661ad6e35e02bc9ec8eea51713e6340a3d141d0cdadaff9dfae78fcbabf183c4b3bad8c82550980d0b55cda92b7f6681ce82ae12ea7e3127f967cb7102c402747dfb1b9f9f59af485ab4701c243fa00a9e7f6aecbdd70ce67d5fb74ba398379a42c9dffd5cec3eb3ace44eb8eb12ca9f53bfc964b8ea4953eaa75e4e50307fd73c694e7047ed721d00e6c69f6462942be047ebd5d75670ba2099a9b2a117f5f8c887221ed9f5d30c498332152939d399191d1f58d658f9d8c9d2a48f762c653a95bc52b9435a22fb077bea374f150883ee1250c74866de35ac325be87c36b969928646d3823b70c94b89161fae7b88e22a572b330f42036ea381183516edbda66b04b50e805bc319a47436f18bd119fcece8b3788b4e62d09191447f32851455142f7138e686ee5904ad7a1ab5cbf4d27a0ac776805e7adfba0db3300fdb97ca3a46534c14092ba75b069962bbf89a5272840380aa0cc652b84a42e6f9e9e23b1c208a267365b516a3d49af3a3f755d70268d5cd128cd12c0eb5036511a44b4771d1468312a86fa87896ee5fa3aaa599b4084ce0ea2030ee78fc372f5b09327122a2b1c86793b394b306713535283dcbedc4ccdb2d35ebffe5d56a46d2de5cfd4f0b5349e1162f39b8b06a27dcc25046b788cd57ff2dd75216763bdb66427a03cd23a2cb643cf8c4a04d8035c826b693105c5601caa175aa180d4f01850b2e77fa2b0aa464d263d9379bd234c09041632f381cc12320b8e693601c5bf05b8806350efe3b2ae318134719967e36ca23b55b42ce1ed804528550acc5d869a660c51383787230de6768939f980f43737e99ff657d2da2cfcaf9c3faaa45deeebfbdd11b1c5ea269a7f9c02a9d2593e18c1a90bb58df6221e35f46abfd95799c4ca46810ada5124cc4ce659ae1552de7fbb08b869aaa2d9d277708b730793a24f050c769d3824ae1a43358ea6b4ac3b3ec993988865a938b1572f25b156303e706078917c946a6f0d83d09cb01228904742ab677e0c54ab118b6e4b6e97e0e6c2aa6e4a5c8ba579cc9aba7db02ce8e398283295615e7abd3ffc5a14091dfdf0fb98aa202f218ccc1b9dd9e833ae34a5806c81ef0f2ef0b8c8cce0fe5f88a9c48000ac8036e80d0f30812d1e1977429d8815838cbc37ea8838d04444756efe65eff068e6f9dd0cb731d9ad2440ffdf0466dce423429935194993b45e98d6068edda1313d45b3aafa3e51f371eaf84744f2f3550c0e5d5870585d5c5ae86072b9e15daac1e848e20e22018227e4fa8ea0f608c4bbc1304aacf91787759066c8d0643d1f2d0790f4dcccaee4e7577b615b86a98b97d45d2e5423dad29ac83579ebf0a28302e5081398f423ccb943089a9a8dbd1f70724d7a453bf8b047b6fd4a31a418a81336505955b32d98cacc83e28c0a6d074e58ee6130eb83bb4d2a289e9d63f9cd685c03b7242b2bb18d3e6e848026566900959032d7b702bc6e3aa59fc7e90715fa1fa9af9693098b187ecdbc45a1281e8431c7eba82c6189249af6f811719af9db6d87888d00e5d31d64a68f03546a3c55b76e6e48c6cdcd1e0a0de3129c7d8af03bd59dee2fae910f35f5144e276ee29fdf76816172941529c14ab0c53dc3aec5c2559513827ef8dc59920df54311b2408ab91ffe66abe1b28a595ffa074e91098b4b0395b21b4ba8441cbfc5a23e0274071595a677f86f4c28a62aa9b3c216074c7540bb4c15a8e1fff407009f6d7ac731805222a51f6df0f4e92c4c0c7494e2fcd3e7c89d8b72ac8ac801057093f7a7bcaf490c65b7770c9fe72c5be1b43784d92975d432cf6e056fcd62184a42b1907539582e3515621eccc038a1e1d5256bb55df60942168331b107f9cdc6ae740800c6f8d0e137d07c6060be8536b5f9d7070dc19619a6b7e238958772c41be73d032599c35752c5d7dd342bfbed2b838b03828403404e86ad0f361957aa04f589bcadee2fdf87aa82c60f68156b2d540d665d4fc1ee5634c45d7c0f87fc218e0740a6f140607c960394124d7a78fd516d08da5c1bb3d9d5adc2bcbd9885a9fcc69b5e017b082f77f0fa979cb9d561f349f82892339064375bee1d150c1f6c3b5cd03adcd1f237abd003353860d3d20a4cb8fc2564ea58f104a4696149bfa4b978493a4037f6c2a5575518d23fca2150d11448995064471c272b22c47a09366346e4f2a20def2a987de399a2b0c42c2a35594193e8fc712b36fb5485a8b20d2e52abf1f7a58d393709700d330654e50ba0487c36a8564a2f8347928b8726f13d05c85b138093371fa0d6900bc8032e910217cdd204e52931a86647a153aad2dd237d00b64813a0caaf4c674463e287af5296dc60f1362e30f3bc50deb83dd3d1123f0a5766cc434db104070c3974930330001ead1820b268e9b72c518f92749a0903ec003895e9d08ee69ec29dfb29d1520f78e7babc79a9b0df15746039c647df52fc1864fda3637b9e267a21e27df8c69c8fd9a1b3e75135a7a5377ee3e92ddb631a39018ed2bd0619deece743901c6ad5b4ef596a1ac0d1b3a856ed138b232d2d7241558234b263a9c06ec5c51e27b0f53cb68f06f9f65016df7c9b2e0efe4ab885ceef23ecf4e4e451b1d80b48fbc413928f1a7812788b6f08bb96486bb366106215734219cf343510e226e286abe7c9d07aaa058e9cce4dc485b25a31b2456718714db8c2c8f33c5981c033bacf7e0d8a00084f27aff38960b4597fc5fee1557fe44ce76bbf4d79e15c891fabfc6567337472c30ef9e0be877c3213ee5c4a4a10884f1cdb5579a92ff3709601700e970425f184f1a166a6f907d2d966469623c686b1c15f170bf2f7ca482647b08227c43682cc25f352508b757f4f50679f53509c1488b5aac21442168d4812d0f7f596210892bcbf90959a0f79eb4454ec8d19ae145e097f1c51cc624de8db518bc575c25ca9990f052dc33ad8c9f4cd652ea9525254880a5343fc27292708a64a52fecc18a83e7fb2a23e8b55fa5e8ba65b861b967c3ace9c0d02e6d80d40239883c0a2aac6f061ce0aa41062f26622d51fbc2111b422fd8dbf2d15085d645cd665b2a54a0c605e54f286098fdc14e00f07ea024e42c54bf01ba4832111360eb2d72b3ca38dc79c7b788d56f4254a4389d88124924ccf9d82283e4ed10d83f146693950892c7e802409f935d92fdb5f8ef37ce612dfc46bb325326c78921af4f5f6a4cdb43032bc8c4c52afdaece903642d03c898a023758d972273400ce52057545a70412817cb4f50ea0d218529a5489d058ce49a7f431a069d20046fa3752a79e97dde61cd9b9edd1e8a02fa3cbac48c03c1092a7f2c864831a73dfca96e23248681593e07bcefc4ad0971fd08792e9f3900ee8932755105b10f37af1f0ec2cdcd99e89a52cc8ca688fd2b13437940030da3375034e8b12379460cf5156c80751b54ce9e1b63426bbc309989186e183582df2b08a38234aeb4d32efcc78a19767c4118edeb7d0463d7119c961454b0a294e6bd0ead109c7b8335585d53d5709bf46485ac923928402e497d79a0ad4a9ca7a2808cf87a5e2708c63ab3800841b3b292da0007985db17543dc139544c12e506c1e33665c867d0500b33cf552bd8308057605ac6cf6dc1ecd64366c310c78037079205cb575e56088d3444a0e32a044751fa29e8c95b4b90dff1ea0dd035f5e4a9b95684b8283b45a1d7d91e43bf39292914a421c300a8f2b6f91d8f98013f30b0acccdfd46376b16febf5384d0701b702c96cdfd3f845f9c74de488d5d0060a4acc026124cf1253c064fed900a97770cd9f5f2db5db63581c7ca12ef97400f5e2dca2af8a683d2d8aff0f32001df5cc549e23bf3a04d44578dc5f632514e2b3d81cd540d8eccc695a5ec9efd5e3f7204c3100d356bd42590872ece1ba66145c0029fd98bdcc110a6e16359e1131ed508f556512ef9e1803c2c309e3de998467d64e915709ad2a0b0624cf53b42392d7516422898e8a39274db9bee359ea21d59989f9c1afc58c55322830eac08622cdb153b6610dcdf71ddf5ce151cd08b9289dbd736e763def2d6956ebd5c75581cc244c5485a80104d8f679934d0930398d7c9d52dfe7f2bc6d04d9d3ebbdf7e460f700acfb8390f7807584c86c3af685d3b4d0efbbdf0c2e933ad25710812ce225b823110dd07344f423f931ec6f7e2b1386996b6939a45af8c94d12e6e1bbf955055513a6f3cd851384908e1583b4bd73ed5cfbfb5f7ab0b723ca197ecbc5edf56a9cdf8fd49e72d3303da23dd04b6048fdf4a7a80eebd166d3b43126311f7ef747b399b1ab5989b9f47de2be7e0d0e4e86b094265d8274e77a506e592ba52dd9e0ec209a6bab18b7adf1c28290f38acb2d8ce8eb64730d7746bf99d219f666ee01e7e1fe953cb30620ae2bc368fb65ecc232573b7945c88a8d006a7968bf36edea17b21e32b7a50614d1549b84656ade005bbaac97bce730cc4786843fa2ca479579c495f2b4bdf756bcde58fe49903005acbd6263cc1041f024409e4f9313e45d351dc2596b810f9130e124b3446408db4c13fe9ce26ee68552327edd8b2c5b512b29835c70a5b1a47da5c0ad1810836c9364a362feeeba82ba20e20c756868e2a8f65048174ff7bee5f62f4522beabc47e195d49ce968b905d1c7697aaaaa7a772429edfbf0af907c64bc3749e21f63ecb21fc565f3a11065508b8ae6d1ba95193a8cc73b5e54feea74593a8f2667c89427d01a3a0bb95b421ed42e54957a06e61ce9e38a56666f41a56265a5b7797c86a8b2518362584c4425a1375275ca22c6f90ca690e8dd414e38d047e56f6e778c6098ed4b7ba12c9e294d60cc4488078e56d5f7a24e39e9434c0f5d6ca1bbde4c0a75843e266d9b854377da64e008ace1a93b82d1285d44b49b1439603b09928898481ceea2db75abc34e2b33ac57e1ba403645a37616dd37f23aad2f9e64c1c750e42573cfa8de9742b25a1f504bb29a8a8032db4f32f6a6d70d32df6291204ff272b8e67b2fd21a86393b960bbde127aa54297f086fc49488577296ea84a8473081a0ccc40011ad51c23ae0a461dbed1931ae19d3b20bb759af3f04015a2dbf2224e7d9f2c3f7710a934e17e4681f3dfdb5410e21cff32416c6019ddb9501eace47633e7c93a4c09e26352425952f35f8cb512013f1fc8451d01a00ca0fc1fea8799ba8ee97693061d4045e316c484b8b7b7dcc2fa7725dca80f43814edb49019bf930bf159e7d0ecca999d64b39a782bbe549a8dc90257e5d97ddc042fe90563aba951b65b03f65768abc73cf20d1f7b54f63c58958904f8b5d4b98677d3eb4e2633c01d280c7de1d341d63a7fe5303d7c9735002ca183758702146f07d6c025712bb69a12b989193a0692b6924ce6a2263bdacf9ccb4ddabd59d54dbe53699ac1bafb4d13208c2db7bdb44b088d8f58a0f903d1e2b454ac3c967ce768146cdc366c1e237842c0944996b91c47935ddc3ac1316e01e52e6ff8b5dcfd9f20060c0fc1da15b1a280f2ef8ec24a46bd8326a334b962e27b4255cdcd7d67c1f6c564017f9758d91a653676e3451a241bf4a91e43d1ec14909c7bd648696a0708863b5dc2a21fd8bf9bc4862a13cfdc3709230444b97e3032ad5c9bb673fef8856c96c39757cc9ee04e593c8e39bb61794e7a5087ad60809955b3f1beedad51e4c5ff1cd7299dde2c573d6290436b0a916f1e6eb7bc4a601992fb91e0b2d6c291bc37cab481d2f4374a055f5494c37e2c04eebd2d7fe5f095b5533bc6e82b28cef5315bb8562b338b6879d4f78572589e03b9fc803644a2cb786ca9c7dd8c17de9a507ed63de4e2fd3d94eb11f82ba8d2d41d0b3a3fd315a91d62613c09d88d10c040eff86f358a88a75386681a560e5cdea17d94d585afcc02eae76118e8c54ba354adc93b7c5bb1ca1ca3f6602eb49b5f0661fbee6d66cbf387938bb376dfaab044fe686c4d195c01d4e3797ba78caaf2ab057736444046b4f67fc7cd2d24656c513ca39de78da9683392b1e0d2dd102a413337bc6fd38ee82b9acb1610247f77dd1797bb4e107e5738f9cdfd2ffebce0cc69f5ca6a00387ee06c06c5c3a6616cb6b9887060db13c806ba3b6724793f678a76ce26365e9421a0e32e83a7cfa8e0d7675e53e0dde72a65fb103c613dfb749a9f4cbbfe874ff1ddad8f199c959d8f0953c8b496f6209183568b8b0024987af4c907b1d23fcf175411bea1a4661767e26e4511a529011671572b94de9b6bd423c777fec23a600ed8975a90426cb43625fa8c969b20030d7cf8212de2c4bccb99ecb34ea1465b3a97429c7e8f533a484d80c3d717e49a6d1b16abb18215f62b96368693b2b616f4843960b3f5c9c0603410120f962c1d505d4e785d3cb456a3f7d4d4c798803cbc18a348a615bffeda9314005a33f84cab9fbf54321eea219a76076912ac1149c0b940594832304dab39123b019b169fc8cc8bb19465d37ad73978ae9137d67141428f32703c3c83fcc4be707e6727a074408e8ec83452d946ba99de1e3c85c8337ea331b7e8e4d4094cc8277cc6c6a1c91bbcbdc31d539f5dc2a26193e165eba86018671ccc6f687172424289995058028eb085bb5b017e0fe7546c637105055f6a988f4da4cf3f8f6859a21f243a1ef9c496b348b4a042b134f362c5c1c639d1fa17796a035e9e8697e6854d026dae1b48a0daa3505c63f2540de71f3268d65437da8da2a4d60e6e25a8c425dc38a1a4564b316c7abf48189ec501f2708ccb6bd63a59dcd54409a840b9551c3d8e8e8f8b86967061a8fd90d5387bd431d93305fe4d53c10295e97116f169384a9f15c7d964d3d4053eba4c7b26ddb6ec6a24760ac567fafc72d67e9f4aa715811f40abe16c9a279a5a48c68eb3ccd9cd5f04841f559bc430adb0a28c759579678348c43e4ad6367d16c82784c2d410e95b7524e839eb7af63798894dcd8e2119d7d632a28a89b42a5ddc4045ed773bd4862a48647aab7299aa70feab8b5f57f09dd58c90ffc5ffbff370e4fd8bd3618cf73df3c3aeb20c65d2ff49b382fcd4754ce2078c55d688ca193a65da193256d93deb1336fb137945478a346154a7dcc98e36217a3b9915403dc159ff4b22f0156d1cf80ec625a9263918ecd5eae0ac4338a16f88325b90e5ba7c9d31d3fccb8aac870d1579ea173b1e86338aee648bc08862b4931dd69a429c768933762827fc879ef9d8ada0d11abad22314abb96a08f5dff7480a47921fb495ece95f61c14bbb068d0ec2530d3bafe68e552b3459190a662c6b8be2695413459fd68a699144bd8e729e9a173ff77840336aa952c3e70e0c2941e62a5da63c0f80ce0d19b91006e0a38cd561fe184cfa1b71302091a3812d2240d94b8f55da3e7d89a95662d680c08554629595d5b2cc3a2cf0f581e2ecec60d18dfb09fd28ee689f07a4d079c2c2265fe6e29d477e07b6ab2c7622c5faf97284fa75f1f90edea15d5c583b4dd35d8c005a7ae8c5b48fb8b0ae48c29bf3779c28bb871356ec53fdce32e7500115c397ef3c266af14e005ae30dbbc686963dcc4b0a97210507e851a257f0756bb5ba6a70f25802c26171799647c7dfb0a22a148b32aa65352eb63cbcefca6996572af1bad7aadc052ffda9d2d85f7b5d041c5310cefea6b5a72915830f0632d0c31a187fc21ac00486202dd6ace2ba887ccfd7359c0133cd7d4e37f7a0e01d1220acd13192091378825c9726a17eec5cb4794b427e9bc56e3271c28e0534c8078ad6810156779d855ecaed7a927daad738e0c68d442a4e1e51965eec258c88d18b68ad293984b0652a62a85a50eb320e987cd2142e28e80f60a11f8569286131c77d27de34514355494d5880964b7ed7d13db335a53508ce65c7a640f6894e63703fb25a06fe53bd41b9a66124225cb12e2fb82d950e0046a35cfa91ee24c550257e9899bce064027cc2df33b7a6f8f184b2a3d01dedfd3d92a871a9572b990cf0e98cf366b1a71024de63fdb09954c7528379845fea74bd003ab06553a662685562d23525c172aa2519f2b9677de108a1b3de4ffa7df860730a4e9c97236298423fcd21b78a941123d7d6d8ae9586a71afe21ad4b321f7f16829d6fae63098b1f2d40c5e476c18852ce657bc88d5c3af78b139fc3bed892f71b84c302b7c8e1044420c617bc322da4f5eee52dd1acb311b90af8586ac0040d8f5454f63086348b2c7b9976ad3e02388491655aef8a9664cff24b0376977ee6850d5954622853fa576168b58e71ac67792031bdb652753886734c4e7adb727d449d263078b694e8708c90ac508a728387705697fcec849e4a88f46798f318ed5fc815066262dc3cdce47c51e1b827a55b554003c2ce9938d988aa02abe99727093f3bf4b2c29ec27f819e5c4313f1393bfb8d2577445332d9e4605095c7900c7da78cae180df36383db2669804b44d8c96191873d022eb3cb6711b1ee77d92f002e645762d79ac300e823911804a6712b95587ae1741f6208b8b0b928d43435ca6e3c1a7d93ac0105d1106600f098328b928db261cd3637ef2e20f38190c883fcc1c18d3539d241d836fd1db58d23dc0a264eaa4ac6229f721891011ded5832d0a3a4631b42361261b0e797db2b64811e4a224c03185da82bb5dc16ab53eb7e1c144184bf0612616c81d51f994c842137cfc6ce3bafaa0d89bf17478d4c8441bd70e9e26935a4172ff1c24f5d6a5ed31ba5561f9c466fe15dee33f612afa8da462407a1290506a3182d701a3e5a6fb537ecaff1124e5d3c72fbfd93cca8bf0f36d5cdb148cb6c21a3bb37d64b2cd5ad50bc6171d94dd5f07ec45f1a10a88d3679561a254ccd521be4134a2101959cc9a222aedf5d4ac97218ab4c06e6309f3c27f61790a214d321c3aa359ca67565266e55d05672863ac979b8b6b29799dcc99944778eb5709c1e3ca4b03ba4a727a722e79f931e8c70975e5f98bd7147e509557ee5b1a4af46755e3b1c8438121466a117f33585091312d052799a8e7b017bd62477288e8839d504f80e13b1a1081a0967fdb110f48b20ddbfa34cfff5783f1be592d4e142773aacccc02f9ed6336dd63dc01c3ee17eb35fc0e9b36a2d312ec6206087dd3fb58a1a3cbfba1d47e3482f089a177e9de7e9318f8167079682cf5ce5ee90a572dff128c82c4da6c01ae1238b588d9d119bee9e01a588ebb73e50ff5b38aa8e90b1874839b379959d4abd361bfc5c460c7dab1326811a525c6da97405f64613ba8d5c5e696c3571e9c63b108af85aa92a9959312549e8e7baabed016828c4d5a89af0394a4af2842b2712aba4414db795fce14c3c7772ab417a310dae36d5284c5a85f64a0349fab56faf79ae9ac9d88a1468c0b9951c18147d647940a0ba2cf282dbacb133ae3a203c8f674c762f60d38aee1992a1497d50bd8aad36e9c923ed32b1360cf0ceca11c32e6d66ec2b898fc12bdbd4123ea0080f00f4afffe35edb8b108e0ff304e8cc56756e43849715a647c143a437c9eb328da6999ea44c6db4bc7818a0c957df457043b6a24a6f341edd925d840755925dbde1f61b982f558d8e385dbdceb9843251ba12b9f8dbf490e18f61cf470ad40ce3f30f906aafa94230e9f6fa62b715857c7ef0f68bb64862fc349149dd1cb024921067cbc1701cd65b4bc709b8c3e8dc9f223686d1cc9d8b4aeeb0bec51c53872afc0b9abf81723e0ebf841113e109da3bd8c59a5c854fca4c23bfc8f1fa5112bbe5327aedc047c296a9150b968886066c914999c451247328b0bf942c371950b8680f4b797700549ea397651cde0636c07d2e9f83f3ef4340eadc07a4c8172ed294900309aaadaef2252c16dcb59c28a69c0177db9ffec05b088cee8588047cbb0eb498ecc291be84e8a3db822d41b2fa0c7ddaf3464e3f654066b4b38fd35c6975216efb7a33147a693f03187e9a662e85d417dbe18d2f754c4cd9b3106aa56dfdbb4a3b6dd88a842b2c70e2065986040729f781d81e53a756c6e66682bb680cd9fcf339f0b97ce363529d348434059208031bf47f305221acfab8481bad6cd9a80fb5d41073a9f1d8d30a88efbbd163bda53843cef0bd77cbefee68adc88d5b3ab4c8dd40425cceb1aca6106511ff7e9296600d7833d9be624074cfe63748e8fc05e685aef2324298bade1d3688ef2e4c2c8eb0c745cbb83c293a4f72fd06be27eee302d5898fd60a06a563309290a84e09c492d2ad1442c919fda1c0d5b599f2cc281c5fbafed9687f505302424e72f34e31b510e359b9fa8b9e101f33268c37617ffbdaff3c531643350afb67031446f6f6034f4c7de38e1ce396672c64440520fa5bb04ae3a8864bb2e16da08c9b570939f0eab468f16cbf4f9682c7dc9f7166d8bcded12475b74e8d6fd17acb5c337c42f6b6f857102f77d9ecb61f90c11d1e4b3a45f7ff36cef92537fed0626852478be138b421f3b80af364454ab45a9ca3e339fcc62c1399a01d11ee017cbf68c35512495ad87b3ace6d773fea27f85fa18d44fa590ebd7215469166a505cd4f7c1dd7c3567949e77a72d25c4eb26920f28b9cd0520b903ae9ed2237beb750926e44d608e395792b086a74d972f84bab5108c1cbf0b5171f897064f188ed65983e11913f2d8803f5b45f7e28496b8c8b7cdce3227350d68fcc2adb8b2359d0f384aac3a7264a128ed98f311347d74cd1a8a72abe51cd352c6ef9afe31181eca58816e14dae898b43d7fb6dc22be0e9d83aef7d8fb0091f100e70eb35f505ceff2cdb1d9999acb88980b11c207b391b300f94743569aa2035e92ceef13aba105c594f70829e1aac46e63aa7f47f30bda544c30da4010ee2603b364c37c6e81503913eb974607636663b8c1c6aa8c1c970b3e5635191561c571e9ef2e02017157d3155d98f4897316bad2bb8f1496b6ab6949112ffa08bbe22cf3ff2cda87e6941592fa548c7a283fe8d0cc2c31f81ec203468f9dd0e996b8520a08d40be812d15799c199526e4d355ab30450278eabc3fd9350172ecad5fa9dc1606cef3433c1ecbd4658bc2c5a147ad8b8eb4694a7231cf8bf940489c2bacda73283382aac1b00647968963e9bb2f2c6a92e3ce4db1931c4fde76ce6e06542ab63ee7e9d04fa518c33cc7e81de37f2cd62fe645cf637915ec25b3815179ff9f769b8d45c9c580f506dfbb4fa55786846a61e4f4e26cc3bbeea22d91de14ff092143fa14c65836e8e9cb2d94fab65c6741879d5a0b734662e8e154496d56285163e27348b8836b46db4ba1bc3352fd05e7945087f98c17641fa2b056767675c23a1b3c3d6f0aaa5ab40f31b9521b8e625e6efb9f1c766dd88b7f684b4ef8294526c957e11c9472a0ba43cf2b0248aba2995085e59ebf27bc88fb75a63911bdc2dab38e59878dcbcb98cd5c7d8aa51d61e29ec8dfd6f62ab3a30ecdbd5a60437bf1e80fc51fe8a56d632fff82b2a27df1388dd3850005428c504a527c76044a1c0e1b8f258fc4777bcf181488f4ce68bb37d940a6e37687f699841d7a132c1e5884717f3bfcbe4ee9bde8a04458f98ed42c3902756fe3ebf53f29f5a8b93b5c8441e37bcaecfe74028718844b1adf29f762f5d0dea8854f6fd2b944ef4432dee59c2585cbd6b663822821d55783396b2257012f259d6db00edb4318a7aaae1f1c641a121d5668ac2b60936b9750492681af4c8db43051e4ef2ad8405a4a9fb59fbb36b3cf0ed54bcd65ceb4be154115c3d977959bcc12d78303c6b55da6c6c6c2a8566f52b1b1d864b74edf4652b27ce48821eec6ed84b89bd89d34d05ea3a6a22491856d094596fafc199ede0d78935ba62f6f29e21ae5a6deaf11e6ab0a016a6fbbbb3fa221639551ebb2ba2e4e544946df0ff2069250db4e5d0edbdbf295158fa00ff0908817b6ab28958c2439e86b40b52f51fe7f6cccae45f34f9faeb1fe8b0647751acee4c9c479b69ca493387a1c6c93243f20817c7eea906a0ad1a462348a2d26f00d0e224905e4c158026f5ac4a158067dd7ed7ce3e27263adcae9b9b1f05be51f28f1336f453d8ab2f2937fa8f8b6da97432c0468e766013a9ad25d31ef0e64282234380b90c3fe7a980d4be7fbaf7648d5a6c57754fa2a7066fb8258c817073b4447f5eb792189331b722c8d9dabce941036f6b1aee3a20262d233e6864a7c330e45e8052edb821c689408b8f6de01e4bc1b716daae72118f6d9f61442b8b798d01ec59035448e1e94459c2a8d1e1dc1ccd1cb5bb06b6f8e3ed56e08b0a0d0af4325c8a1a4964d644b87c63e6a8d7b9b32eeda769c40ff399cf7448af40c6a8769ee5a248887644ef659a3f92cfbb3ae3a5bd9a05d892e47a6e3cc867003cf0f439707410dd505cdc18e64446db89c4956f281bd67f2d977490a3be3ce95a9154caf8a4d8a3db3b25069cee18dd3faca8848fc3e91844f08fe95ac5630ceb269286c947aae02ba6bbd8eb8f4d7a94ce3e61c82a5b13328213e74cc3401200daabe5098ffc698eb4cf155d0129aa3397b259464d95f69e5fa35b470140a25be1e419f038741dd1c449f0cac249348f6f2820c3238c5814bee6fa62079ec1f874657deaaa88142b4770f5e2ed4721ef4b12dea6c2a07f9b46711d8778809155e2c079592343e608700f5e10f46d00908bd7270fea8491e8f39bc0507bdfaf80621fe1d31492446326613c4aa66c13ce0242264cd25bc8fe307225913c95c704d44491792f0039cf797714bd25cb662adf8b13217a9e3f1024270b794330f1c96b63e9b4879e5ee6f8a59ae6738e7cb853cf16c22da15c028a7e07af1ae3a3a6d89cc3ca3b3614b9eb88c178b8de964f10589a00cd359f923bfa9c07f355e352151b79924bc3236813482bbdca4ec9ba9519a4e5d4798fbee598e6067a40b06a8b0572038ec1547bfe9d86b95763a6ee51c020a0d3ab45d1f4ace91bb81b2e2373772adee2ed931a0795a20ca258f44355da5317fa34d6f3b93a47f5a4c4ba0d29d6b81ec36b88daeaa59a224cd049f6a114f0545263c5b10594ded382d7e9ba0c2b46aa020314a5b74843eff45410962242e44dffb3caa0cc513758de50e698b6eb17ddecc67323b3ac70b6f02cc53f9cc6972c818f8bcf02d518681503708899717769fc42bbe8e10c5b1b836e814ae50306360e1c80b7a291549dcc279d131038b2ef3f382348af319518df2872288f1beb4ca5c0f5ed273297f573881312c7bdd06960e34532d88c4c735892d5fa199ab67a3c91c7ba3c5108831845869f7a66f04aad124a73c07c160961c83a926f5941b68fc98beb8d2767c33fbeacb099042d34b8056d8dada4902b2c3ec6d9dee720a7ab71ffc50449dbfcbf04edc1a4ef55b64b23ddeaa8ad3ff9a4f01c429fa750b0bf9a0d0a20635fa43fccbd6a4dd9d3f0dfcd266de3a19d3565292aebe7fc421f85fe130ce587cb99d5266a02bd245ed3930c4b4ec1de5724f18130350c6835c7db8043f2cc4b9644db65932512556fb6b1429527a7b7c3644eccc4a661161ab0d3843d53008db64924f629093b720d351aafcfb88971296481e589ae4de44bb8502e2f90dfbc506ee1807c19885b5287eb89729ba9acd6a4b465e516742e4e2bf77cb064293defbd576f43f61cb725cfe451120b0f8c49898cb8019e736111e0299d814325026322dcf3df0f9dabedbf833bc0fc5f4246d514ed68140e9331c095006feec7fa79720fb59794410eaa453e201a0195ae01ef8d793917f50ddeb93c9967d569fd0a593ae6f6fea94c4eaf39137497eb0cc7a1f2b25c0df6ca210579f1a310f4a2e8d2d1a895bbcbffa2ed3191de7d567bde7d6ac05c48e3b0282785c3b6bb759d6e1c7afc8d171e6499cb6e6b12de26dcd6ba77aba7f8eb085e37fb6756ea713ec572d70c77ca54bf7c1e02827593357255ef9355cc2a28ef4009c9f30b055a5cfc7cf7241d5045564cad73a200538c55e99e42451682b3939b8edc73dddaa6a00445592657e2fa557771c3abfcdf0e608a6219c3904eeb56fd13eacfcdf3b9c3696a67ce9ffc12502ecaf4bde39b4ceeb73c99a16fc079a9b9df17029807f7e39a8037ca10f0a98259f1a8d6cae04072b1a6ee5674b029e843b97062bb69ef8bd9050643635f3661022b6ccdf1ffb055090be1005d2ba8b600db56a34182a9e2604b879bd2eb6522f54c21a8aa40b890a0a8d4f2a6af0f5af889d3ea9447215e01e7951ac78fe5785322ab8e281c8ec35af152de632348808f2d798cd16edef0ad513be116040a7e69089e44335d9c8f0015a9b470e8ebeb16a86c27bec34881856aabbb02a1e30b882abdeeccfabefa9c1e834488167b5c85a63ed474338c9f800b14f04cb93b9340f3dcb35de44666e4508d1584c330be29f4f0a33abf25ac6d0c66e1e6353c1b74a6f1ff6988d0d95d47536564500dce087cce3d174df5212c32ec702d1239a6ccdb13ae6accacacaa228777106a3cd16732bce5a2b7e4f6514675d40cc1d5d4c56b72c591bc1124e826b259e06a187f7520ed6b0b4c85a50b249debd2ab20a63fd7042afc3eb029f89be818c18d72ba7562c1f3688d613f1988e95df7e1aaeb422763edbef8157c9f1d724e892ee4e061ba16e245cbd35cc116fb41af851f167fb3aca1fabf65485369526a4141caf1cc01b9f7ed31f79d3fc8d2c6660fa0dab697e9fc69cb6937e13738dbbb9c6d0702cd91db7e76d278c65b70b4faadd6a1c6fd830832aeaeaa739417d3ae30c4d6e90225703eedc5abfb941b82e62a2156d8a89cf97e455aee406bab3485650f8af518964973ece5819eb7c824b75806ae3f87f58e3dd8b9f7aafba1ea39d938a05173053265772d0509fe76e9923a64d5d283572b964f402155bdd0ee287a517dfb1feb5858b281c7aef641b28cc03fa2e4c99772fafd4426b0a1695b662166afa1f309b3e73fb106c24e2b26e1a4e80710ae6367d3dc5e0c787d55245089e87b6bc9a05df9a42c7ecd8d8b481d6f31c9bd4d2f786036dd1b92d5a29bdd627a988250e98729b2b631d1567ee71bd789564292a874bf69c1add7397167b142706bc3fb73611393f4b1210b970b1cb9bf93d3a43fd51da73b7ccc20a46d575614e539ab82aa913ac02e1248fbb25eb5c58a7b99aabcc3dcd351bfc759d893f3210e8363822b45c1920cfa7b99e4529630eaa798915616b36aab227e97b4a8d6ceda348f7ea3072930d931b7ce9c47c47bc33d57c0daa069f524fc19a016f6cc04d258ee7ddaaef3487967059fef7dd1ca315ace09f6e63e16850718098066176a3f225b3c35b04b729fa6adc2e824310300606ccdac8ea3efc9b5f3b5d9f7062d2f48645318476a7ffd5793b9534950cb50a28d77941bda3155eabac75c96fffc1ee0d1ce69b0f0e85ed3a3d590a86c2e017814b8505b3eea59b56a3911e8fad2a301816f9a96356da8f9a6b41a1bb143636870d5eb0b3191811f623e2e675c123525ff7d92a4754cb6e921cec13a10f10ab9c8a301f0cde804fa74badc6ea6143705de2e07bdfcd26b73f10da3eaeab95734486187e673dc7c54f43f1d488826525544f0c826a52f3d44b07056daf77f4d138172a68e9624fe97a30eb256c21c2d0e42bbfa48586c838b6e2baeaf5eff106611cb5a49326653f4d11655fbb7e946ef39312fd19c3abcf55a7e8b302cb79020835ba33a007a87b3fa80864a0b4ff0c9182ccbc54199855c98aa7d1e6515598410838f3b51c06b58194c92d9cac12d2a77e9c698c284287fa80c3f2b7d16eeed5dcb4ad1b9fa85ebdc45986483e1de19d40ea61f11bb0dbfb01556348838e6db1c14b693c987e0adc0154e94bdb9a378614c66dd892fc4bdd2902d8f04c09f7079f35807eb4d75c1040df373375d742ca543a07055fa48407223609fa2c074f2f68d6aab73d4d9f02e1cf431265fe2b94e29d5b0e5824e01433213942fa352c0df93cfe1b9f70534d4417fd8a1a2f3695b49c24cbadb6d089648d5fe57e2d7984a66ed8469bc9733c5e20c419ae9972f23a1b57da19a5612e48d1d01a21f77c2248512870b70af8db5861e14acfe986b54f7c46b46fdbc1e22a7f682d0b312fedde5226fbb98d803307fc584d9d45a5d4495f4e87555fb73e5c546cc16ed156d2b091e8c6a14a435917b48930d97aa57ad28c4067d392984fdce143c28cc8895a43bcc79ea11712d71015a4f755233cd50ced845f6fcb43c8a6488ebd0104837006dca06a93101ab360a89b040f3d335f01a6a2c0ea1915b10551884dd0c5162803b460d599d417c97b521d045b252f252e3e6768c19c49674636f208292654237567d642b7d7632e1df60c978278e0b97368f73982a5ed0c9f8b3d723a3255aadde622e01ed70221f22296ee44ce6d7b991c01fc5242d6f4df0218ec319c22eb17393aadb7c0a3b343c073931fef76c848aea93ef87d2b60703cfa93a76d6434ac1a7028367d46e67107dc7080c27f08d1a4f0c39084abff2bbc6abd898ed82cb12ad496f891c1333b00ac963a2b4034e2bdb0aac59f0081e4726509ee6f60adec22d5a22d4a1dc2a19f224f4ad3c8a6504a8f34ede0848ea34de8a30b42e1f1dd0b933b221062208a43b849009052638fe756b770433a168e6f3896e097a1078ffd274dbc40f1d4681ee5bc896b0bc5240ca88521bcb853bd680425ba00501f5e60269f91a440db5a9a13f01f3de372a015eb11870d234bfdefe3e11e4543aaa5ea995a9e7206c16fcc215de9a9487e892a1d1ea32c0f4ff4703668f1142f7473785401f87acf00f46eec800e6c71655ae37195ef176a6d884621b4782339084736b01a8953b83f7597c587a5ad0963705c0e44e75c8983136f8b882ea3a803408f97468ef2c7132774786eee31e235f8d545890e13386c77603c3ac47cf8b03a51fdee6aa24574567031963eac137802998437d147b4d26d73b551f751630b835a8f6b7b78fe20a20c3594273f4f02dadfce02f22093e5e5c0e2c17830109817c0c5a0142926861d2fa354d8edb697140309fa1df5941908145b9fdd10f9bc998fff852f2c095d6c7de8dc390ca85cf0be50727f209d9469471299fa7b87854d3a2980d53c02c0d2e98d3a73143fdbf347b7345b8c5d33ec26abfee621151f546ad912d3874ea6ef5febd4bc28ba85add3e498a267c1f5614957925e57ac0253fff8f0211245283934165f9251c7315eb885c5cc947e76e7cab2e233cb0221488033693a9536f96f1c9f57aa5e24770bc6cab1705aaa78be208da66b812f760bcb254b3c4e2907ed072c3bdc019418e32c659d27a1389a84c09b090964a4738167b72b8266b2c7fdeb9eefcfa679596050575989184f8d31ba9d062a6cd9c3e64dd10dd4734571441364deb46995a9a8e9ea4442ebdf13c28e9ca6e30c5d30759f02a03cdaee15257ff99179061a809dd2cca2d2949ed6a6bdf9504a77be0d3759cc52ea82b1e3fee6131f84c3d1fd794a14d9f2652329c44192dd5121147fb80281cac4c3425dee5219a60af1f7cb49ac7bef27730f609185a2593076c487c7818e09e25ffa176fb58463a06ca1e8f49adad366e90c809012a48b1147d90ea316d285628142a446e7bd4686676b5ec3b84ea918f1afc593905d24d90eaa280c503c22d37283a455f30d0ec6720503a29c52c5f83258092cfa724213470f6eac2f7db96f471e2510c6658d6a50724e116a690f504da3f1f1c6e7a1bc5e0d1ab5d50851238d4991b2ceea0d4a750fe8339624e34114a63bf6854d853683fea84c321827e49e5b965bd494c20b64934817b6799d67c44e76897dd31ca686f711ea34164ee4150bf0f27871fa8609a784b4de562f75a5fbd064664485b2588042fbdd551766944b90080554841909c5068197cced7bf55f045367e4fbab28d5f1ed67d6b986b51b1705735f9cd63f3489346e14563a0ed640123c9235e0494c16ad0e14d8ff01e647fc0eeac041e353382a69e9efefdae170495905cb7b39d32be5883c54c07330b4df4e4293d9f1de7b98453c368d38e50243e91af048f38578207bbb64cc5039011bad14d800c9f52f1d4b5c90e826f9658038cfa09ce1f172ad83991994088d90e9261e067d02a2153470dccdba14ed6307ff229d7e849981ab4c8130cc79fa51e5678e6b89bcf0a1a6bb874734d66058e37c74c33b3f3321d65433132eef62bf99a40b075620a311b4c084bb22497435f177274f6b48c037a418a1c2787d631fde98e85bfa7e6be26fd351bcbe9d0a7446f3fa18c2cadcf4553f88ccb10cfe7b16cb3c80f1ffebe3a4d62699c434ff879fcd25208e1388c0bc0c952e871a195e10064ce450aca37dfb51b842047d9f938cc9d977efe2217957c9cf4a6e6045dafbfa242e02de1a623d532b4d9e5bb8ca063c64e42826c5b0b99817aeafbd7d9d4e8462db9d6b60536f440f87ccae20a53b66c048a69eb3794912c9877fd89141b824264a470a70012c60494168b05fc1c7595aba90b0aac002b69e6c6369644219165d0f0c4bbd062a6fff126318ef33cb397484ffeb83be11768a8c461c359dde6a64bf306c1da8f2483ad38a4e5ea59e4c695e0154939fd5925bb3443254bac9b0ed43cc6d197b779218f4a42148a7c6a88046ee7a59963d87754a8fc15b59690e6f021bd3ed69ff78a3cec3850665f019353453313195c2f8ee6b1c535ebf89c1ff6aab9e2725ac517c4ed290ad2800e8a72fb6db1b4ac0786d3ec0c7c2d3ebddd8510e008037ab1c1b33a7102a5620ad8b9f9845fae7a3eafcbabcb4bbe008a243c6f756b28ecd1559206c57124dbe108c318ac37f3b045cca0af90651593163fbb19ff0029a6e739d71d8b093e0be0a4e4c2b346552f07d06b1bc37e567b2a40683a36b4b25304adff75e82ea49fd3c5a54fed839b157f3722f62be2c228a73ab387076e80546c33686adabfd4ea9760a1d02cfedbe5475700a68c5b8d1b65893f18cd65bcfcba62cbddd25e9828cdab34dfb02b0b06b2a6ef526b0030bc4b8fe77bcd24e11549932c968c38516faca33d356077a0b7839fc172a433d9d685d78690e6c7f5ee08689d5394a0061b1058e825237bc210ded803c0377ed148c23b9a7b6334df157e175774ea1f85982ba91e6c488afdc433c76c820256af8e0340e5bf046038ddefe7ca3b83c3a4f7811a8f306b3eb332fa54ad0bd6da87f6cc34efc0381011be062abf83fc5c679d8a96c4f5b00d49df8ac3d5596da5cec5b22c1189fa5f7361876bf030f1759ceb4ebc944452694e6c112c10e35fe0cce6af6d10472c54a52237a9a4b45602014db77e3870140ff0a330248e9cffe5a16275b1cb387da73db60d4486c998da08c4dfbef6ccdbe3d7bff9ce7625ee98f77082fa2c02278f6a371508d2b5c064f35ae656584c5879482eb7a005d6a9a33986b018319c83f38aea8d7f66f68093bd450ea378fc0965cd80fab6fbb22dff606c3be81238a6dbd56b0cd6ab71663efee0a0700c3dc4cf94b55e1dcc68dab5ad961c72f2c5f3bfc35dfcd07e077f75c0d875c42400c7671e640ece9bf784899d01e4f6c1f0e96eafce0409368b430d669f4b9faf0a53933051aa49f7154dbb2b729017a6f2256b0ff454778abbbc1bf34fdc8f4a959219cdf1e2b640f363515d5e22de243a5984d25aeda73a251007e00267606c028df9f14b80febe4075f428190f00bffe50c452603e573f84cb1fcdb6057fff3d75e3c3c03cfa9bb3b7ad01c6bc5757151e8ebdad355d679eddebdb35318bcbbfeb791d530e10392a4b4c660326f8b63b7ece5183f56b431f758f2b4e1232049c0060ea1a3fd513f158d43f25d803196f4ec36d733c37a7662c66ac47b4636178ac5ca60c97bade2f7f837234eb15fdf5e2cbb53d589196155998ad112c37561de5a573b228dbb4a800e4233883dcfef78841dddfe37ea7ceec39352eb65d152c5ee5b678de8bd801b692789293f625a96123166d53b828dffd50760e5b153873d0ff457343e733a4f3f9bd41a35819017d7eebd67118e8039e20e015f29068bccd6458afcaa4e453fc8937926ce83e71041f6a0e2ed4f6084846c2f766b6f321fb8a7d120b2b117429d1ae0252f7e7bc70522c01ffb123eeca7c4c135dcb35bc8d4fdf58a372e9bb70a564623330d700de45263cd81e18b9cd7716043fcb3e29ebaed7b91ae382da0f8b0f4e325239c51c9b00290c830c59e757963126c13693813eab6b60fdb5684a7dbfbff12649cc746312a88cbbb41bafecf54c86cf3a433e3ff254c6ff998400c93fc10856c8585ad1f765ef6c359f89182b33233e11f63782e443dbb2a76951c9eb15b720cc54484e131ad1168b6b71c6de9b12e64914c50ae73b808181637f2d771f6841521737021c7499f71eab1969954e9294a1f7aa9011b7d9e2a75ec066bb7a2ad1cb0bde22669c64ed54604c992c4c0f5153ca93e6f3f75328eab5bcad9ae8671c53645545a8b662039ad3fb753b5fec63cf9aafe432ab15ece65a0ee8cadc71b3b49e7fa612f40b4268cf0c998438889c278187224d9f1884791996acd3c48652a04c2fb0a8310ff1112b1471d9585d113a738b0c9eba671e13a5a08262d9a215d068d816825eb5f3ff99336b7f06ed7f4f8e3c8245327dd397d5f02d79c5dd2e6b7eb8a9aacaa14bc3de559ce68ddd0e67ea1cf763d1b69b12710c1e2f0985d1d40cf8ccfef1fa4da0a45790933749f64e38a9fea7ef35292a4a641c08708034311d0f9fe0166dfd693a28a3f6e753ce2f1c99189bef1e5288d593cd72462924cad47ded01d483d9f0779c02e4fc8d7c2dd4065841d883a088c624081c58a19c27258cdcf79766316268a1a10e2b22a041b957ca4a2a67cc739c3c7c84b78b61830adc7d4167e040831b508cd6a459a666aa0f84a43fe1df54edacb4877bacd6269a6aa42941f412a86147d612192b6a806f27852d5605f455b7eb92a654f5434b222b7c50d2c5cee5f20cc8d2e89557d9ee53215c3fc1d7eb9346f05c98d1a128d530a4b63dbb4792bf074fae1bce65828cb5ea24953b6323ef5d19c759ed3fc5f55017b31d806219e47291bdb0ad3b61185e261e710cf8a57551f965332e6e292deea325ff0618dceef2d14d1b1c0bfa1e86e943111c963b47a36a7732d19d338d164cb0aef1e0160884e4f1b9f7d226a47acf065f2d2d9d655643fd0ca83c1663071bd8e76accec019feda3d446166b86c0293c429ec4b8ceb29b36bf54cc2d934b2b67499b1fae67f2f2ca509651828cd3162bce1fbe5cfbd012d6a1dfd906962f80bb816c61db12589753a335fd0f3f34419d4321ebe608f5a0338b6b081c1c510fee63cb485a26230ba50ee6b09eecd3afb7d80cb7a9428ab060f47edc1f8076119ff64189c1c8372f926ea6204e58eba8aea91560b3daa3af86f9d63a73baf7bc75f44e1045b9aab82713837c93adce850dad7a1d67dfe4a9c9bfa544bc19f017e8a09504579ccd30cc3a8bfbbb5d994a76fb52b06227cb236a6cc074af17a34296eee12e40f26cb719878fb854168cafd2bd8eba55ab2ad8bb5c3a15d8605be457526feb5332f0a98f09bddff8bd4a870ebf0da846070b196161df14329042f0b19203061ea34ab469bfee35c2a12d5a37e9be9fa44a49c755e96e3605cb7588aa3a94e4e56abf59a1f88d0773def79f00ee32ebc4e9b94c1702ac18786c0bbd1a76a23dfc5bbf1df83050276bcadacefb75b70bb3783cfd80bff3d9225470d7df07dde35581082daf2918885a7e2f65a83bf79cffa50700db87f1e9c1d1aed0a25f093e282b65ce87034560923dbcfc5f471417f1bb3a184aa8fd0e753320a0f8cc3a680de375f5c1dc7d4eba6ace730155d51e6b1d8bab488a4eb8860eb6d0c37be1762926f495ab9b3100ece7f7c15a1451d5bd7b1c102d6969d6cd5acd05feb49a0154ad11d248b7c9d951a011f495172ef6aa0f3b9a873c1d87608a0e615d6f0c98c506279ab2cbc4b032436fd795e232c32b2a68ab6e307caee8125c8c3d58dc4eddda0c461ed3fc1335b7cd21810a539ac060a9111bd8d5142c1cab96d6324788a9a944280756935786c34672ad0915c3de84b049823ed9e11c4f78eedf84290cb435028efa252805216b8e7b31ea88914cc4a43b96ba3635201c97301eae216200aee82df9644665064668ab56345bcda0651e7c46a113de13a8da0aa8b4f8263077f371f850622bfa133ede3b0790b0da683976b022c885fa388759b6fec1f17c894fe5fe49eb8540545dbe3a9cf99fcebb298494e040b2c848480d48332e205732acd983e4004d154bdc07100b144beec6099685a7d1834fd57172e6b36aaa165e69d0f458ecace67abaff72725360f5fef9d1c1ab1c58fffa87a209206f5c0353966a46e0aaa36041cb3397f32a6dc7a36420861b99029a7397148000864792c710ada9926c30936c66ce7688cdea964830c30757eb43768a4978ec8f55cf51368dc4873dc146d348a6845bdf64defeb69f00c203777bd215a6553061bfff0e05185ab40f7d43be44c0e8cac4881005444912a205d6177e7a9ae707691c690ca2014b089325a291ff87015723be79ff3265919d171bf7e785e532102eac5a71da26425f4995a1d561f581123a0454a551584c96c9012eb715fd6cfdd95c7ce37e3172a87d0f606d2fb7e3f67334abd5163d30049daf86b60b2e020b7f86f1257315dab7e37ef78bcfbd78204d009313964852ae1e12c9704469a19316c20960bc00093a14e46907840e3a10fbcc12f23e057b34231bef38a4bfa45f891054b670cf9e316aa9ab44003ea4545695a2d6723851f944028fff20ba7423940a1485d05e733e960d477b404ce7393208048ce82004b4df46995cb7d5ba733062e66b2a671ce749e186f2c90a46e116ad998f850f7e1fdc2edec9a8aed8e20dd79092956944261c0353f1c325b7950f66a19e62cfabec4a689543b389ca3d9669aff84e84e3742d5846387e6235384e1e414c752aa2412f4696ed58914d3b07c61d25079a8f70d2cbd874ce2ed9b49238ab54612243eaec591504bb25b0b1f1f9d8644236bc88f6ff02c2d2e711ad19d9c623aa59e8359f25974b64559f38f219c7e16cc86ce3d741686ee1257de2272e3b7fb99821efa2158c6fec40ddab5669f34f536cab393f724e30a75b07d45d2b5f8b2c9b480490fe46b4ed006e1eecc575cd7d16c5ceb599c65947f7f207ff9018cdccb6bc25e97e40a18b0d379e109836ccda5066754ef08ff817069d1527a1609a141a2f542ca389a1bf3aec6f94357d2647f1e5842ca379ace1d4f939b0065e128440fb535c3fcc4dcb75c77b1ce0a59a8fc253accdb2c4b2021508be4d1900ddbd74e9339b1ee66c4d145d6ca1b253e2b18691fdb55ef9d825fcb09e4f41da86dacc781d2f367667a7eebff5051308087dec0309486720c7b0a06c29956e56252e351c2719be109b376ef3565a415839c6caad0ce36fa4cb8c69dcfb44ce2c6dd57431b1d37473fa402ab6da03ffea49e2b8873b001855334ff23cda24fa114e6fccac46252c071db10104f354c8f1487b14094a0902964412a4e3fde43dc45fab6cdae4b42b1888adb7ab40c8ea91a285bf058a19fa6b8238ebf7868731dba8471c9dd5fe362f117158f839ff2f026874ff8edde71e1b68a21d1e156eeeddb868f6d3acaed590e5d2abda7e7607b42a852dfce5a55aafd38b85e9210dc05068ad01ef6cb6c20285074eaf5936bf2a73bbe2b522ee321417510652c72fb8b986cbd74b2a36dbdd659f4155c0a930a55a54f465344196596f54f2a37ad869921263973f17a23989df8bc6c8f0fadeba3d01961460778a68103bac2983e1539459f999ad83ec2cede2dae13cbbfdf53cba507a5d04511a8af2d7b987e293b2cf4178c56107bd1f3074bf543e235d8a7f4530f07393cdca196a26d748b5713f053bb63c7049ed5c9c1c12677be8d284012eb75fa15f4ec07e486e405dba7b16c160fb2cf54adff8c706e52ddd5c6d5fe8fb309f4f619b1c02d8c7d0240432f8e1624a5bb4b007777f12a06db70b19713f076c04d0af4e7224fb4649b6d65e837a534cd2a5b1cbc3086e2694fea9d48f1020c322d0cf3b866c267fb537d3a31c4f601b44d3042c6660be252299a703db5ab1ee68a122e876ab7c3f34b4565ce3d9fcbecbce8940a6b27d2cbc1d3dda4110495e72934332c67ef443d2aec4ab312b9839253272113bfd81cf1563fecf85f4426475274e45ff8b2f97c9b2ec46daf52bf1ee0731331868fcff3e2d25154d0f619971015195e8f0218c34d17504c40e0c1453b2d302514c7ccd832c52d6a0809b2b3c242e1ea40fd55ed6c475761513e01a04956e8d48126f44cdcca66903fc2c051f267abca0b58d5e1d73b80a198683b62e0d95024d9d20503eb3f9201394a95c5849f56d07e549d5d1c81e882617be30a394cace5884b00d42b8273f07829e2f711c726891f1246d82b37ab98530c614b813e9419a7f471f688d7e803ceb3cc2cfbeafc6757bd06ffd849a477ae8b0e1ceda75c409c55e93944cc18a3dc8c62ed01ea2ee1f752e764fa9a2f9b5a21d99b1ad6d6e4731d088b6d58e03d34d7f7fe08ef62a4ea836cf0ab2c5d6fa90f6b36bdf05e716d7050c21f5660a51b8e8fe40622f6abf21e894d282e5c630a8f949368c8f53c6ca9d2ef0155b120b175b1061246d04681de1034839668b0d1d8b715d26c74deee8ca37416b31c379e2b8ed8cd7629998a954f845c78749200f419daf53c1e4668a4867a873f744538987dd955362255a879744b0a5aca069a7858669c0778dd02b7644e14cd5d8c70781029833a07c7da059cf5721ccad75cff988ea4f3755729e64f88ff95d8c613e88b0900cf45ba7c833a1018ba2063e388621b45cd78deba0a87d27589f95315107400437786cde152dbcb17b2eac630744e8f5c18696ec02ed41a3a35b386298999b1ec790a08c5e53869926933130d8043346daec807cb71f5504c8de1a61ccdc3b8c2f5569cf35361c431d7fee16a6f04ff530309e80d5bb5c449898c95a9306a03244e8798ccba0d7aacef2bf7db88f95b94c2f3d718922655683bf194b263b3bbceca2800469f8e58eb80ddfa1bc6599bfaa106d830a46dcf377cccc6591028d49a6c791a2c98086f56f794be3f10b908a5b3f87f6ed44c2ba020212541f8c317572b13b385d4437e7e2905211826a759a936ddface8160f5ac657b2010a467c95a67537a1e1ba253d50ba926e585cdc28805aa288fb91ad6c654cb467b23d7e0c68721934576bd98700e65c7cb1e08e86b3dde421504ac0a683619304cfc49a150b0df1d4a70eff26c32f8c173f2a57515879495b35f84a9789d0ede692112ff18e9ddc1e35c5a4d38c38cf27a111529236e73e263419e02171fda16a42c2cac15d0de4a58bd1cb2cda9fa712a77e04b2833ae08eca1e4b364dfac2aece671a58a55569692146ee22070fd8693b0bae0f306cb4209f2c27d6ff6b8c674df4a3aa51cce8e482ba50fdd5cf0b6a6d89ac2e5b6e856558cb87e9c36cf15867b35db31c693efcfb6fd995461cad5d06b7de8594d04bd1e7b37bd0c427ab01da029e1f739782cf909973ca211442c527ca1a41bffc9eb129508b9ce3a450f20dd6893f1ded7fa3054c24f81cf3ac51203cee8dcdaf362112a78071050776a39d9533959765dc9b1e854d397179fb82b28fbc15194a4d65fad43139bd66676c057837cdb6c3191014228d04e19a6a10b98f9a59d5a88a9deda9fd49886db94435c3659b600e5932c12d258a2bf9a2eef5ed70e2c8fc7566fb77cd490f374339654d01d9a0a5f5e04498faad4bc080a12ea14b9e227ea1b28f50939a1b7ece5c06e8ca098aac94a65ab63b9a71aed11701cbb6fe5d6a96a9664bd563a6556099d85089e82a206fc534c76193a2eb19b2f0867570b52b7bb19c1ff9259e723d307a8e2adddb78ccc9a1ce79d70bfabd928563b201bed913f1a79cec551b8459da0bc64f42a8aba2e6b43103cce9cb26dea0b440fc1b3fc2205b6e8bce7ce226e024bd37ac28ad00e578ab86a2f6215f57c9cb812adad01ce592e7e2d87ef86c1677684fa785eed2bce38385aa9f93df8ac888742257070d39d91a73430b0bbe75b65e8723d614878dcba885ae2dd6f0e5ce66601822cc21db295afdb54fd055262a38a36aabf38e2ab2924d092ec3e85d3206eb1f308479889ae90de95a18ebd68c2e9668a692e46c08cec890de6f0674dd54028a6e2e88fa1f66f4842946f18f6120226f48eb32e880f98928fd5339347986b0db0ad4422676dbe369e1217402080db7b818f30a706cd724eaabda8383095aff149d128e61fc6cbcaeed7e958689362c4540952d882ec5a19412a206ee33e33876808f1d6ccd870551a023ef8012278535a634b5cc4b35a281a9a758af7c794eccb289226d25b48716dd591d3fc54a0039cab4219077976321b2ea3e3eaeb14a9da5173dce8268fc50237c3e2950d655cae356810143d6b6faac0ab3dee9209d93a29b13a25abf375fa655e103214292661df3d12ec9c1443d28df740dfdbe500ee395e1bbb880ac2671cd95ebd0a1abfb83c5c1b76f889e22eac9233db574ca37549ec7e90c456847d686e278738823c85dad7c386216ea6ec3c8098cca3b3c02d49a87322f826d9d3855ebe017e9918ef4ec2f343da25187381897d6cfad5393cb07cb0e0ba9fa31e56d62134d595546132ce772d6bc0617abc297b89613d12eec7902fbd4d3e7981fef3036246a32f735529290868c2d0a2aac02ea11194dbed0fddfaeae57443f277aec9ef470a53ee8a6aee3eec0fd13dd3fe0b595eebdb6ea817f317227252e224123236f893fcd87f5d18f89854fb2f274bf81f5a9d58172e540bc10cc0c188ee58c241b966e5cf0d715cf2d6b6999d6f01a4a7403e8524eb5509ad99a577cdeb415f0c02039cb2db10cf7fb1b5f2e1329fc891d5dbab5c743c40dd588187ea3ef08e32c0d9af3df7633b09cd45333f19a77ba3b52f5c88398c972fa01629f4e7c5f8c459573e30b177e3ddd6b2b0eb9047b4335e60de93a1359e2945180dc9125774f1954aaae89627e4c70142b4788a8e4df0cfd3c75d65f884f5104994f4d6fa42a8645ccf72a3823eae4bb927153bff87813cee4802d379c3a980e837328c83eb423febc3251c595205947ea5b3bd0fe479d4b72e4ea47567981b2589d6f5d5f0fb632f3b9236a3bfa75a1c025a7f13bb0aa266ea36efbf38eed48982bcde0b1cf63764458bd8c9bf632c324a4a4c77f1ea20ad83b5d6880573c8e7a36c3175e1227ebaff28f351538b1ea300760fc0f6df6140f6120ff4c1bb1733fba935092fc303fb620623f90729bb6310e501e97a1d4fc1e28bceaedde27981b16b8d4ce94b1b59b95e0a72a15ac827c25c23791fa37f096d0ce5802999e4a2754e8ebdc2bc49bd24bc4e45735b85befb9020648a8f19191c2c4749740212c584be113427dacda73c5873f34727fca452a1306de15dc69f2ea61ffce471b150b0c69996e7d61cd0009f7e32b28d06f2036aa8b421e0b3d8fc9dc4f017c253a42d8c6c4c681599a44b67ad045de13d750eb48c7fdf190b25ba50d3fabdf1d053847fd582649b3ce98e7d086e2cf594d57cb6cc9cfa8b2a22326ac32678633bfbf0863a3f50933332be86345de97f53bdadf3b46f8e8517c187d11c38e36b6f4370870809a30eae7790b8bff7b1c838adf817cb464de55cc6497ae23dec906894ba410ac71995ea9ca46e181aee1fb9918f5a66845ae115307ede51d7c187b2fbce246e09c8bd6bfeee24abbae2573890780fe4843cfe3a33a97a131079273df15d510776323b962810e53b862498485d0cf577920b15b49b436bc1534072ba4422b975ebc485a45f77176091f8dff40e51f7c8920d36fcbfaa5bf336d0076f3e55a985d43ca5929e7fa13f1af16cee4e1637fbb72329b1bc085714ce2c7309c8e1c8bb08d8a192a3ced06dd64b500fede4e4f9cbccbf74138398635e78a40befbe4c5c0f4bcadd2e395369f9ccf85708ac8e1ff6c25c07877bc864ba5e024291e5e09d0e8a408b20006305a90a8ee93c55faabb52e29e84c7a6e407ec84e254b31be8503df7be5ccb18925383508e1925de6c7220e0cbcdf07759d1bd5bf5d7153d1492080365164bb26874f4434abf784fd7a4e8d89af1240e8486fcfbf600193073b7358a35708cd36fcbf2811e7cc82ea6fd882f23a7e3b0a1d2e8bf27537bdfd72613a411b62913e8028ccfe6f85485c448f1871ce0a92c76259217100b31ba6fdc46ece8f32efac0ff9f8c984de521408139510cadd5a0669264e8649d25ccb04a14a03a7b0af1836f967b3e70f3c9c841021469d52461ac75fd5a109ae787e204e30f58242832f49277d9963f99b495b052170092385baea6021c9c33f7c9b0cf30371da4b1742118e1befc9227068dc3d8033edbd184781676e94e0d9709458eca0ca9ace1c1b09c80daee94eef2a46b4a95820a3c7980f335eacd3cce8af61086616178327e4e4f65674bf23ddbd31a4235d24c98fc72ff48c010a1d613c5c40cc61940e246338e0ad92b113063b4047fa69cc3fa15f83f4ad0d9dba3bca186342cc2030a1edc61644fbc23630726d0fb073a2d6057637a807a3a140cb1de5227af491657b4e31129bda6c3531b5acac94dfc8de9b6cb9a59432a5c10358039a03b5535c9a69ae5385fdcc79dbf4a675c71d50fd83f9dbcfdf421266b661ed1f5a2343bbb34f2d8c2c70814b55f0b1c1f0ad9e0b5d0fae681ed882aee019715e0b3ae4dd11857cc71af9de7b5d521df8d4c202e0c75ab9cbb1cca2d016867637a554d27a7803016e2a730f4265ee5d4a6432170019c7b1e1e1881b58d8c859e3828c9b31c39328a52836d8fc90712da9a9274de3931fdc14f798fb5a3c5c03f9d0531399fb70cbf5068b42421b107140df1c31457173040d320711606454ca4d0d708a6469e1868ce24f0a77163947724de1161a9b58209c942339e74866ce8d8b8dab0d112c8412640b44f614be6cd922450707134de63880cc1943d5c30d4a473592822883b0a103ea869ba3a5352a08c1656c6a018806d610b9d658d79a366186c8cc8f193368a2d25c57992abb424244b43059fca1359e2e1b9a0af7ea9077acdcfb2ba5d64fac853ff0c97c342679cb46f8e0e3cb521b1e48a11d4e47722822873159d69ce1683bf24eee920684a6f442938fefe1c3a32e323da468491c0b4a78acf952829b109ce1800b42a42c25a14364ea0c87739747da1c99434b3525ed8e8808b4b4d181090e1d211cc8224786952b46c8109306ea1ab992c59f2713b43b2f8bdf077eb875848a912d3f08e1ef5e34f9def2c80ef95e22d71947ea5c64b0d84d452c948c38c95eeed28852167f64f82aa55f0d5b5de6ac5e2bd4f7a3cb225325912a0bb22d8df0b0f63922d716472a91bb3492946beed20812e9c281c8a92452a49cc1495449648a078a1928737838210b057ad072c080a44a132f2e2d18e42e8968c95bee920816eebdc5cc6595d522c97ff59e6f61057a26b085f669b86c7b7f231bce4e7099fd2e4c92c100d9f6345c667ff514e6326f7adb59775c56612d6020c0285091ab06bc095120ee673523a7f5e9cf6a46abafdf85334c81b8a7359c35cdf9757bdb5354ea7ef5f0c7e87ee73d588c9a51b7f3319a02fd84755fdfa8fbd9fcee57a111eb6938f39f21c614e83ecfef78b39a1105279e823ff1f86735a3097ebefbf3bc913f0fcffbaf4223f077c2d9ce83610b0a743d9c51f027420ac2591105baefe1fd19ce9e02dd9f206cea9e7ae1acd63381fadd1bd5efbcafbf0a8de8b3ae875e381ba1ebc259cda8fb19ce1c29749f3f9b21cd6a46debbf7b3ef490895786a32f345476af554beff7370cb4c7ccbfc45cf515bc603abbf33abb53011ce5cc6f3f84bc06278df3d09588c9a9117fa100a74bffb18437e0e0e79425f4281eefdaf83c318b31a055a26ebc218f6fbd6ae651fac651eac65f35d0624197264af67cf1d9afda2f9157099fda2296be239a2f33ea1f3843f5d3d0d32c0af5a6badb1fa52c2ada982ba07e139279257e700b6ed2f0d53ec3a3c01600fdcbaa83010fd1e0f394c81ec833fe79c73cef9da817dd8fcdd86731cec85677ff79056bf6852a7319c54bb5f3fa936a9d77b6fbdf6efbdf56e75b2678fa7fb5f33b0f8e5d97ee7ed70d210039c54db9e52cf397a450fd5df7e959bd5827ed1b451dee53cc57d0beb3cc5fd570d2c7ef9de7befe52ec07705cf4e9fb835875a56e7576b05b30d7baaade18bb7efa26d6f6900b09de1070021ec7138ebaca10fa6ef01b7598e7b3c63dc6fdc5b8e032d85bdf0bc6d9bb51505bebf3da7c20b5b14acb5f6a584adb5d6da8d4e17b628781d78eee9b9ab6bb9ce3e06b9170bb8054ed80bb796e3bcd0029c54eb9ef54935fadef7dfb1b6efb057bb55d863b95be7a4f22aa0dfdb66db4547a453880e6678e0090a7e26e070b78cb8199ad0c02b81bb7a2470526d820b18c23e438c5d011e0feeea6d75ab22b8fd6bc474db6aad21add21bee60fb2678f49bb1971216bf0fb74017ebe778ae2afce10e3c7b1dee6afd9b311184bd58b0f64187bd704a43da3657e10a27d5b8ef3ea9e6bffa2724242424198759d44e361e87936aed5d9c54f3b0ce18576b15f6c3b8956d0ec1fee7291c46ab8ead56ac1986e709c5db2ceeefcdbb3702f46fdd581fd0bfd77beef4f0ba2f09231b627297b538d9f30b470c0c9a2ab619b9030bc0fe5d7393fd68ba4fa9d3438a936a56c6cbbe7900fab4be68785ee932edc4ef3a28d3ee0ce88b061683e807d5b79da79d216d6b9251643aaccb1a8d2d9cb8a989d78167c7f46b131c65d1b387479b65757034fdce2a5e1f4d9e3b619eef66591fc4c8f62b9d50f52dcd1edeede70718c8f5294c0c614e2777e98dc9e39e3b74e155f9ed07b383a35cb337bde70ead3f591fe423ebeec5a35f05f157a7bd8de7f754fa2075c9f932b53413e604cfdc652d2a486d87dc652d4b161950db31313863b3c23a7759a391e7d482bb33a00f76930c1fb99b6414e9b1a10bcff45f78a6fff30b65b960e991e5b6bfd66e6f1f7004ae33029e6272ae23becf7219d010532836778924c9c47428a9566d9dd543579d77d529a14422247749e6c8a24f9eaf41ee7224337b084c5f6cc14860d13a25405b34025e455b53c5fc40a60ea874aaa0f9cff0a90e22b0d8caefcd99e73f6022cd49ede609e87e0b8bc01e04abd1865fa0c20b4b6ea6da04f14629ca92a5274c5152a312256b94fc05701c9d46cbf9c1077289ec370a6022077014444749821b35889036c8361498aa80a103840e122e4b4b8628319619e23900a1210b09a543153994010623156fc2b98872634995963046b4916d170471810c1ba8303f24916d35271e1a9d127c21bf31cd106e5ca98b70254d021f811173483a64005c203918e1900788c1460a4621a40e928905b60b4962c4a3dfd0a5c7c142761c200f42c5a885244107719524993402b8983964d01895c24b9b3131b61a1ec83a1e41bbc15a6badb5f64ba26485fb7515b6ac45b244275b12321b36ade244f416197cc86c9b4f19926a3682ff56470d163910dba972801413f3f495058b419cc709270fac5d89f5ad7fd22bbe9fcf02040fd02112399a8b35894992a7f84479870567c36abb2179637d2d13b0123ef092eccfe34d2f2d58c499849b43a8cfb9e0a9aaaa7a3961114fa470e3fea5036641c09b58b060abb0e964b19db86cdf3555c0b8d986757247dfe476785050d931359a434693051d62713d70550442afa0432c0f74c5b6064180757336712e03edfdd774845e31eb0cfc7b0714ff7af1b31005f2efecfb7cbff7c1b6e7e1f97befbd970776b7175964d6174da29e43ae2f81857af67c4f1515fc66628213df74287c70e7ef0e48a705a1f8932b0861305853a0132d980bd614a88407e52d1479de03b3102bf43e98978119f37f980f0ca440fe1c0a5853a017aca90de0dd6e4b35548b0fdc230be645f2e274534a29a594eba668f017f58aeafd245271278bcc1171e1f50fa140a0401ef5c2826f9eca75e9e9c5057f94fe6b0b167b8a22e5e9db76e79c73ce7b433ad9fd5dea7503165d2afb8cdc2ff29c0ae3b9bbbbbb5f77777777f7eb21f7d1d2f3aab51d95adbb75bb6dee5b3fd9fa93849bfb65548be779e1d408b5bb5baa61dddd4eb59f726d01e366fa93d22564f2fc6e293165de404b79de5b98d852d98a4d9503ee7e7e5179f585d6762dfac36b1188b810ea534a29dd005173f363abef7ea7823f414294bb421fac7ade8340616217ae56e1cf8cdddf81dda019bb4f946fb86db019522f2458179ef711e5ae135a796f3d1238afe3c20bc377ae5e3578dccf58f75c583f183881baefee67f79673e5197e535e5ab037556f5cfd2f14a1a936bafdcb09fbf717263655fe2adc54f9feabc4a223b11ec604e2de139d158ec0e52e143dce2afcb88d2ad710c6cd34ac13697ef1bc4c4295bb44d2bf41ee120993dcac076cd9050170d1ec9f2ef28452e0541b9ccdd2345fede1a34560152e5f952b559a60107cf0862a4a5914aae3fa9f06b0a8026487550456c1e17d5550e8bc7b2f153af9de7befbd28aa302b774905c50ddce52ea9a0c922e8130315324f780bb71a3cfb2493c8f7deeb6384ca1247c548be547e7c3bac6b15c402fc184b14627561b3029512f2fda19323fa5aae296fee5d62d2e3e27b95d0269d537ce39ab67baf9a293f64142f88c93e3fa674c9226e0283c01676fdf8b8c118fc29497297bb9c72c314a62cc67cbedfc0e297672bc8b72879fe371fbb14cf7357bf81fdbb9412953b3f89dd3fd60ecfc7fa58dfce4452b4c1dcb6b4c12eae7e98d50f152c8331d3ea4a8ba80ca62165d202cb605c9fab5096f080c10451995732e7845c4dc86af529c364862bc2d403c704c63271b94c55ac8f56eb440f3580a3368b0f25727d1107240d190510f8e62e999464b195bde50a12e2c0dc25538f2c82596cc929ea9e5a5138614c878a285392096f008b6e2ac225141bbe160e8a458193c5d895a7e973eb72c94d599be3c3a6d25ae99a5517c6c40a878f733d386367f096bb8c9225532724662001c4058b63bb6594a4ba3591ca9fbb841205c54b16859ebe183c6ff61871bf7a2ee4428ec67a850b0fda83ce31578fd16ac6f5fffcdcfff971dd77656fffb27dd04c0836c4ab89c3eba9424a2946ec92294e9ea59421798630e6f43f727f517d482d9b8811854c159cbf0f0c4818d178a4fc433c45d9c4293f52ae48357c2133e60ef8b9c3078d4f94cf999f24fd2d424b81891344cd173345d0b0d120a4491c2d62aaba0441f27903e5334684afc190609088f011fdf88c6919e047a9468456180a4556309a8085fc1985c6aee303073864d50cefe166b60d468f6a365b925ccdce0804e92ab40e4eb58540c2856c81dcb162f43125465fe34eed4310b2afb49b372389620c0149861c8f205720437a0c4e7eac81a47de584228e74e95186062e425268422583070ea4171038f1c61290feb4435b61dd186cdcf081871b499a6a507e943092b42f56943c511282ee8221ae741a67a18d805c6122054b90347592a67a60e1d1044c0b469c2c395342a977b841964748d7d8336edbb67175dbaed25412d200e3993a52dc8626c241300234240f64389e181b07120c99a5895c49395305a54407901a3a6a100127861f3154d539a2091329a3f31813307a112dd53f740f0818bd90bea40ad91a3b07b7d261709044c8de000d4b584c30216a890701c60821e70b17a7149828194189233c02e82730dd38db8a13a7b1147205061b6de58d104d51b0d0b29cb084c90c3c12c1403610355ea3f7b08ddea6a7a21829c1a9ce9421a9481100602c80cbd132c31452cc02c6ee42a670428d942267924943834218d2bf30a08d37d640caf02748e404a3106d833771217b4d0eb2c818d24703283f3823d890018ddca8644cda2b52c810d948008004f3150000180c06068462c1488e64bab0a70714000971aa3852382a8e8602a138180a444114c4200c820000c04000c3000083401cc4704d0f6cbb788fe56a531ae64b1017aa0723c6730f0460197f92302f98db43fbd194ec82cab36d8015b9cae17bbb9d38a788b6d2aaf8d822092324dabf6fb57d8084a03fe50ee7ceebcb0a89a7352bfebe04967401431bcb2aedad343e866d453c44123a7d1439eb9f7802fd6c1aba1c3513fb68503640a0cc9f0687406961fd989c393436b1f113858fe2ae1d5e9abecbfde27d9987584e7fb632447c0a64be9b52b1b4ef5f344c6e88158927f7d46405b93df92d272ef80506920259c06c0ba8fb39d3dcb88488cfc80cf43b6cde8271ed362fd32464859b3789361072e3ac1c69e11a6fe05cfe08e040ac3849be4bdc498ddd8edd27cd0ba93c54ed5572d0668d47706ff412b6951e088612f6c78863ddd6e8f3136e3c757e300d18dc1bb0dd0e5ba4d2d97bcd38b57a90e13034a367e21ee133a0f80caab318de0e5b5de8706851b3668fec68d7b5a95e606a72fc7dd756c42c783f87b1a95e07140064d86333989f7fec6b27f849b5c0b6791b6df2d82c8c0c58da048a4c5c75c610f6ce76e8c7acee93b63e83c0df32fb4646154fde19ecfde6a8589db8d557031e0e7509d48d26bcce21e9fc7c73fd915643a411d72322bbb98080fa301eb7aaa856b8a8c05649096c865e8540ed7e12289a09bc6cd54c76bcc020314479c7f3a777744999bde925c3a61640724d25341b47bce900f765a84bb3af469fbae96639cf6d41b366fd08232ec9524c4868fa84bee2f8a07d76baa4e94e99f41d053386b46b3c07d8aaa1e1b3c6145956d74693b456cacc38ad1675d594a9889605d9cb6eff8be5186a22949a0c0130309f389f75431079c7030f5fcc1a513121729f3ed73e60737fc2ab04fb509da5e5ca4a40d1f607af17176cb830a124f78792a1eb6f0a6fc31cd67f7ab419ef66dd2c21aa2d630e09d46bbcee9f8e471c27c97129505b7cf7c6595270061947fbb111a913b4a05fcd3972627bb4734af88c61292e26e7538856da0fe473854b8e44d88860d3d4245b2c3538e815df31e8a1790c696fa9c64fcb739601a3855aa68d9ee0dc2def148635fbfb8f2108e6bae739ec5426f056a6b95ca65f207abfc8251271ba6316713c2f7c480e6af5e021ef86a4883cf09ff282dff96b2183c7bc855af5f63b23d857b7d3b5b9d45d2084d3e537bacf6facbe60faf79463c67376d7f064da2bd3f708763ef4e8faf0e28e1a9e9ab9925c2b0001e0fa97418ba73f7e0557136d27a1cabb78a531c7abe10d60e3957de55b7bf051986abccaad975e6ce817dd57e3b52120f617037c40d19268ec24d896f8e29ba5e7568f4e86ea3ba928ffb4dd1a360a18274fdab31d579e3518d70ac80b38487061e827747248f6eec1f056f359e0c4064fc877a520d4261bad4a6d0e14606194125266afdb31d6b0db2f0a71aa44aa2e3ed5af98bdbd2032b10f5c2544893f7c13f6054d59febe1b42e903b71262e20fdf847d01df6e5bb005d325e8777baaeb6e424b9b0bb4660a5ebe509778fe0a79739baf0c5ca84b4ce471fa240a4e465d747773a1f569e5b23df6ed8f40b2b5798785d3b4b789015bda97fbb47716a6143b47bc72b87eea1946305598de9297873858a064a6d4bb87fa3b9faaa1dcf60f9330f70c31fe8ce56557d69079a05bcf2a906a232e0bb39802d38b461feb1ca0515419a7412c373e37291b95eed61523d6f99285016cc1283529809712c71c38b65ed1866960caf343f93b12578decdaa5d54ed2c64712c1b405633ff30899c12cb46d3d7be2c7cca1874fd03b4669cbfd75a81128174dadfd0c6a48fbd8effdd6f8606a6b598d9209efac355bab77c37f22bd4e67d016b28ad006525bbf48c18da2c16861b209cf8ad5c0fc160255349d1942d1b1d2d0f998d9cc1bc716e48532d261b6b6952f971505462d6b2fc1ef1656b74111aa9f0c1eecb783f4c83b138991734ca2c0042be80f57a6a9e77b7c81befa26c7d48fe7b761083735b11aea6ab05e3b937e89f95300a807be8a1ac4d8aa0040036fe999bcd893ca370d158271f5260d5a34997cc2159e8f4a60a73fd3de5d31d068e2bbebd14417efd64a14bac3f7e2df780668d607618d67e5cd99e183b36e829845774cfe5c49bbb69633a2b1fdb9a5625541b2a5c042513521474158b12e6ac925abcb53484049f8d3093cb934d1714f5a8674f4a638ca0945fe2887f13aab7240a17352eb44ebc4962752879b0ccbe85c4a0a4fe0768bf280a27102b413595a75ccab17445dc6b4e78982227372fe290b83da34432111252c5bbae829c3441d4c95ff440b856e2711e8890dda3abd89f0935e27c0a2cc22aa83925c3b11a2b843098b2add1d92cba6eba290ec155e894029722275c32a8ee95067a55414194a45a3bc6c3ebb104ef8285f4eba2ba7bbb2328cd461d250352f5dd0eace94b0c9c4823a4cd5414dcd28cb9ddd147ab239c98adc164ceb02b4dacb449867524671a0b477e2e00439f9d027e51c8a3be7389bdac16750554826efa16cc9d51be63548553eca76163ade259700fbf431cc71242ccfbad058d58a2f02fb89a58ef449e79cfc4e8643a69314aa7b28de2de9809e5c403aba824131a3f039c17e12ca8916c5c5282f36baa8546130dd1d93cbae4bd7643859b794e6c94f46f3a0a36471a2d3948651106ed3e15301a07f5d5c19a055e83e513ed921694429a215e95894bccbd3b126c29d9589d209ee938c9ec8b2d3b14ebd00e96aa4c9a2184693ef0a66c62fc900a76b48043f7139215b9497afce0065a867ba2d4d788004ebee82494a4edf1c9c48ee9f0a0bee9d88679388131ec5ee4fb8e3e800c9cf6a743ba8e9db0eda65503e7d109d884fb124ffa0c8d2d1b148043b8b22d5899639dd7a72a713c35b5da504f7490ec58ee242997a128e222bca0bb92e2485bb09ba56cdf0a4b05be79ba89c70a2a42812425158a1b3510a9f68d9d6f14e5df0b36486bfc250a680c21d9b4eafb4e0596266d67f62517cf92bd74d511119ad12a5a428404579e9eb784d951317ca27275a8674912a851de85425d6093828b2b8e9384d2ecd3a12757442fbc937285b5e75d7252f288c92d7ad1439511e8356b74ae23b63d2a24ca13c27521483a318a6d0dd9e5cc274690a3be1272526035b02b2ccdc3aff9baed21c27b18875c6144e97210976e2a0fc1de5e54b674165d8aca33b854ebe41d19217de2529e94f590aeb6d204fe5a250c1bbc9682785b90695b3c7daf2b10c3f19193da654f8288a4fc8517894aca21c863ef3370f5dff64f32541f55172414994bcae94a027563971e9e87a1445279c5d203967d843e170abd49fb2f57ab959a0e8c55cc936592a1e0a2f50149ee90029b920ea184580e2a2b0f7c4e924ea137027ea4ece519e4379a9d6a551c572d7bd2420516400d50d24c172a363558d41b8ce38ed27177de2e2ea04381936e980ae5ec0744257b16474785578f29f5886525894eea0c9e5a6e3358505467724d17882f2841c9497093a95c471a2f124eb275a583ae0ab2d8aba5cf17372ebc92b20134f5b022199e11c6cf3782691fa38e105052c739d912597491dab084e5c286d9ec03d310c59b79cc861f7b263d5399c4ed8e432a0635551765bc0a91385443b0d62382762d4a96afdfd5908e712a08fdc1c698e613030318f0f80cb34d764035f6bef066605831b2e9937c44adfab695c05aca93075ae0647fdb2c1a417b2c85267efa82fef3618b5cbd1cd0e7ba3d5cffc5c5ae27d5082e3cc168891d45b0ca814600b1ebc2bcb885cdbb01b3c1d4100d804c1c956762f1994b417adf682d15e1240a014250c27a6bd7a810a7a9ffb2f363e2d22ff71eb90c0b4ed436f4a5c55b3f1e6712cfe8ce362362466c3195d7b060ec0414366bcbe8bbd7ec629594314326aa07cf48c14ff62f49a7a7ab8fc6d1d282e3d1a22e93fbccd99c09c95e3e07b674851aa4fa8898a0fcb5d9c3afa6446072f1fc0da009926539b5c809b2d41a7a9fe3cea26d00ee0de302f0f573d0ad3e033dc9689e81ea33318ebbea9b52293cde661cb9c7240e5556330cdf3023bf07fc52ee8aa8dc738a2eac61b7b69ac370547cfa3b63dad51bc5d6ca8084ccd4e6ab4e996452d51e35389120c0fde528b6c55e97279a99058c3c66b6086165c82c0885655a3ea47ca317a9905a405b099588e6a6b720933d7b6cf02a47f6d200b7f0ff1d6231ae8111ef54d17d1db9ed954e7ae3fe4495437292d08c613dac27493226ab8bcb7f7dfc5c4f2d9a631903f3d4d2c8ed85bb1eed184dc5e0662544a6a90a24ef2af909332e31cee35bfd1cb5a4e45740c715180473baaa6fd4f14ba15db41e7cb0a54fd7e5ab668c88bedddcf9ed266379ada3595a8654ff6127e94d472734d54aced291b0c7f051de05f146d68d6eb5990d7a49ed6bdecc9f6558bfea35f77c6e1323ae9aaa812f1fcacaefe134c38b3203b487290b9f5a60aee746095b8e809b5255e5f5b553da5ff5eae915bb0d40917674b394b8725a9c6de00a6415e5e7e805ef09f2a1f97c753ccfff8eecefe98cf11e844b26c02446894226cfdef58240e0fa64e42ffe0245d065175e91bd9706c9805f7aa93405fc3147459dd7a0403f19bb84807a98d58c6f29713ca7cdfa569a1e54fa8aadab99c9f30286200436bdcd088217852d93ddc99432db4ccff10f9297262772e39baf57dd1939573600d033afd06e2f085f8b679a538cbfdf051afb5185bc19294525ed11ec19e16ff9a60801e1eef329375dc0a575405d9b23f845f2ea0afd249c2e43bea7298af031460426a0331f44f5497fc0a09790ff2aff5b1be14b49011b066001e62a81ed5f9ce49cb0d530c3609c8d23d490dcfe96172f0772c0662dbd9a692e8644091865ca666ef235dfad9bc7a8a12093150dfd1d0250026c56be8002bfb1c6d14867fa4896bbf2f9c575f573868673ab82d0662ae933a323ba5ee50ad34c3e15baefdc4bc027b74dd7a5dfa823b90f2f7009aa55a6f0c523447852ebf45e2454c833d789aa7ee01347d40f947da9ce3604833ce8487f9de65f20f61abee60f6940d2e0871866a442c75fecfdbc46c3623f74b0d2efbabafcdf705a424f65f1dc6ffade5f0ef88bd0032625ac2ef85ad43a957b38665396fbce2e40f34883ab6197f78c0590e97c94612c4a161f9a0c8feccb0ee5ee2397a0afaf250a0500ece520fb6d5a6e6b148cf31b0d71b5cb389434a54380af7d07522cb56a98536899947a044351ba961b2f13b1c6c55d98da8e1023928faa53c071e423afeb9abcc29d88ae9874de28b83375424520fa8b873e8f8ab39b43dc68c30a632b32975866292c592b0acfae2f4301e7a82c19c5108772f865c8912ae788e3cdf08dc411b986376664385f3ec21ee845d1a595854ad6e884a85fca10dc927d55572b4bc941e5703e7900c39051072fcc8589588be2fb5469ae374ebcf47d91db4e77960c660b0773d2c7a6033172cde5a182fcb7fb1dbad960ac1681d26077cad58af96839e36e81c4c96d6e683b11504e7cf6f313b1caccc66d2cf95daa3b47b49c25601d60a894339d81a97e6a7aa866b91b29c5f61523d8f97715a06e4faaf6e33948b631070bc59307324ce664e5f14a7f71cd5c96fba583ec97d5fb169c837f94e2c5036e09de266e12e491c88aa1fc91b0681ad19199454f3bcb9ed37446f545ec4c27101e1a8121b87f676ff1136aa80db603309880dcb4939da7c602c4142ede381ee8c3283786fafa4b9c8766aa00c162bf45be9a00f34b4f7fcb3651cecbf018d37f00ce877ecfe1c3d5d81b8f99377fad24ccf637ad9dcec4de6f28c42a4b5c93eac4e5bb0669f41123857ab70c567e6a882a048bf3f33721ea761b69f7382dc16b31f71d628d52e9d90389c25f0384d1d29cdcff46fc3121847779fb552269be6c8c7408ba6ed9d4fa47b871b9645086bae0641018b079327314320782e19a4d1b88a4f5af490420ef59992acd39c23a838e86b6c656fd546a7e5c4ed1207b7d5795b12be5a10082f13c7263adae43d33ebb87e617ea6e6e8c49e8b344877eed187addfa4cb4b87e1d0a5045606b9e518782672ea3affc41b5623b2a8f3856f56681112142381cec92272d58ab7939ec90e4f8f8c1af0073a1ca221eea0a9d3fa04200b8c55bd1ea9ea6087c0274b6b0e131f2c1ed95583f593b4220348d88004bdd7895fe30a0089b8d8de1ac20d805eeb619940c878b6c30da56bcb5ebf7c7ef66e245d97f455f012f52ad7ff7a7deeebf4c09604afce3445b8abd0ae342aba39209c621baf8d9a1986b7fd7997be4061320758c86da962e33fb633140db2fa012ac5746b36b04bad510b5b45ebba0bdbc208ee155a4c9f3e902d106b912676083dc16a75c9d40cbabb13878ec0af2b68d06579949cec4aa64da28b51ab0d4b45ff0048141ed60d538904cdbc876fc9e210af19c58e48f9dd1e8f8b793b12ac572a0ede0be35d32c50e81a591482b028f4942c547fa8e951be386a18caae27ce7c7f3e1afcc1fa154f7932208fc96d12336d4ce4c38f5d6f8c901f496702a8872f3d424af3eff6be5a8f8a5a4f8b7c111bd98a9dc2d777975a4b8e31d95e2ccf05036c5139a17a88f65844a4572faedb25bc93cafedd743e0c8962bec082cf779d8ae18bb112460e7e727eb6370b57c0c2c1121d0827950fb3116cabd96ac0650dc54026ed392dc4d154ed450d3a6415335aae87b484fe780619af9e3213d44265dd54e955dddb4c7358ac343aa84fe07d07e507d65f3f8219ee631d41db800577f76d243d5e0a04575a96d5853e0fd6fb84c2c98bf04b45ff4b586e52d4fe89cc83d08c09402e806a42fce4f374f09825d878512258663693e0a1fc588d34306939de9ffbc6d80f5f8a83155da0a5a53de391a66a00ed2834d9c450f1900177782db46527a239eefcc0f1e7b7ebab9201372ce283f66d8f1c12e90400c1fe1247f9cc3b9642e26d3dac0c00216d2a9a8ef1bef6e04f41c564396761a8ecec09e1e6e02ea5358233c5ee232de09b0c3d4b713d67b066b9135ba068b6c5eac0f4896e03df3f7159f44120c99350dfcd19e289d32ab4bf848c91c3066205bcfa8909e463ddfc4453443886a5fe20c8c92dd4e5132187310be2a2a322fb8b1813b7c6125574934618f095a3d695f96b266a9b2b4d614195954501c5660893a4e7a3a104d83b452ea0f9f95e685818360e0800c7273bed582c0e31814ba65ffd6eb8ae79ae17919a2d5d144e2ba87321d20a05f3843419e228c8888361a384dc5c4a1353ab5a3e87f5766f963792a0f3ad83c8325a81a6815ca431532071d0d0598ab54e22b02a10e5b14131214f042395fa7dca6b72c5a7826188dfb2568f0ca59bbfe626f0284969a497eacaedfa82480513bb5a2e41450763b0b8b75b6b744229124612e70eab5b50acad8ecabaea637417c449f731a4b7a106d8a73f7d9b12554edfb70ab33f031139398f8a3c6c43af1002418fe5cf583b57a678db28f57799407ed3d14992ddfbaccaefb7c55061d3b605ea6ca1f5719d8acb49bd8753ed28f14e627e288afbb854aaec17838c65840c75ffa1e34d19264d139efe9c77b5057d2dee5088d4b5b8c841f572ccf1cefe0bcf983b899894c1cb7fff56c6094e92ef6623a6e26bd72cd585a35c4ac80956dcee2c51c1e4ed6192f4e6c1dd03fc0960c6e61252f4e945edda42c1046783f96a09e21e98503867919f2826dc22fcd8b1d72dad37678d7df9b845fca01621f4a280dbfe638fcde2228781cf7c5baff9a41a9fff0a0f91d7ba5b800d8e4a270ac3d000928812b99e0bf44c8664426993c9fa1ae4cb8cdd00de82905fb8ee5c5a02eab87806206af7e6854ed313fc506207f9e2e6306f156e21d34f6c82a38d9f5523597c209ded96905351e52154a53375452a654ac573b742044857a0ee661582604a9539632002853793e81531e6d4d1d526b4c5d40c0471d06545878ae85600a39f0bb6ca811c8386448fbb1fb373aacd56942ca8447ef07f0c3e125dec2fa4c816b0b4925ce202907679ea30c9daaf39f8db1ccc9cd4d3bcf2105c77e5e238641b318245164698a46879ad078adff321eb60bd6523ad2fe9ca30dd5b1a7b32b22800e635a606b8e2a828039792cc6c4ea38b9aea709a463c06b260639a944fb9421bfe7f350a86f4a43ad8cc6b9d8df27e273440f25e3b10235fcc604b648aac51343fc795f223f7fde9c63170bbc0c9b152388a0c6e6d7db167361bda9d099b6f57fa38719aa708b970c0abf0e305edcae1d0fad984dd4cd91506287c14d165fb22d3507afb7697b8618fca54e0dd04bc0491ff1a706046b825f1921e7d320229383193a75c5ebe4ee71a48041cbcaa0276491da10f0eccd4d96003f0aa4dbdc6acb0103e12db4adf6f28c61ae5b221d8aa31c6d24d929b0f5977264944409a341bc27d8e21a5e15b8de42f3096763bf11b3287202308c1c1108a7ef07cc93c45c325dc2fad7ea9674e999266b85faeb19aa9d8287e5dde7c96678703f19bf7fb3e4dc797acb96be197f4d3413652a0945b0accafaa006d1a8829fdf0a57b8b734cb133c8ec0995514ee127a72ed21b0fc91a4666eda5349b5a9d8e861a3f44693081881a7c3fca6aac425dcded537fa7d6b4656e7dd58ba02e85b605eb86aba3668e6cf888935729dcf96023e66f48d9dfb606fa46dcebd4c78334f95e1454ef9fd59c52d96719e583ecc183b824025639e50917427d79f49d092cd196eb82ee0e3257ba5b33c689786335d865f4c8d7b4c4d0b336ad70fe8519a2bd64bfd9cf882ff9cf0e2d7a148702a8f6eb0703a01e0fe5c0e81d0ed6d95d5e3960b8af239ae91e0916aa6cf48a6dcb5d398650f33f67867fadd9da2ae623db1c1c114b2a0f04a14e6dfe292c2a01392904ce8000a497710570a68f0c8e2efce3ccc302900ab4545766706e0a9848c5a65553624524c5816effac541c4401fb31227fdd49e1e4db72e815d3f523595064b2b711be00aa4ccc5252e35c36fdb4408d132f9b8f26cce1825b7146c87a42717e4c29f49d9075314e6b915818bec1b2c8f7e89fa91cb9502532b81b0e0f52f2044be90089edf750ade13b317b1c5b6c04c7d02782a75265b57b5172160f9a8e1a8fd1a45dcdd3f8c91825e0f59ff2cc80a83474bb08fa00b8709af3ac216226e185180cde80a820ba7249e423eb11194ae16eefe40a9a159fe9f96e4e43a24f4cb7e9f4f31d596b111ba6b5195da16b7fcb4c67acd50f5680c23729e7cf04bfae5c0011c3df6c4e3dca0745afd6615d1481014c609fa6ce4ebaf8d2b02e57fb7a9d9dfdc12c09e22355f3517b8fdde921eebfbbf35a5bb9c98c045dd3007ad879e848374589f4e1e7e88b90dcc59b9f6dd686bb622bb48adb3a75073e011d5d0b6c91f8c2f225ecdf8c181f4bfe8417e68c3c737cb3a924bc514436e1b5540be746cd61f330d18589860591906bda2e7983e1810a39120b7cf84c1f567addbba7ab4bcd48930f20a990837834199afe6a001b2e4bd0cb1b81e744badef86ccc3352e9f03c47023301c92b55a4d51c86536289f7087479a4a1742ae5713253282852c21df9562201fc909542b77ba361fdc998e1fe9f3c9f41430487454d8732761167c6bde3d6192c253b7eb9b45440bd3c652ecaf3222136547a90e31907d6680062c2970c3c5a91ff69eb2db6b5f489af2e490d5c32f644272878ab64009b76d354d4ee3baf3273d3444ee3052d399794a4e59684a1bf77e6cdffac40f8d99702fc8b25644483a0d9173d1405e4d81f6e245c695fa42023fc9b5f18594040d6ab6a12f242631c5ea65c7a1491d0f331c8901eddde740f92925c17e6ae7bcbcf77dacc3f2aa8ee896a297bf0e95787e81ad6cbec8d47f7d984d0e8fac1bef73c3ff08a07c8c69ff01257b8d91a9d8dc539e0120807b5583855aa2304787fcf63982c95e0c739a666173661afcc0bea08348266fadde0c0b61ac1171355c046b97a51dc0f6b4838da020b48fd128a6d0e8103363da784f4c7d5b837e3891f4eb28e293fc22537ce3d73563b3e8029cd8003d75adbac2b99e1d2185c1aba03aed5c094cfeaf6afd29af3e701713b042c442431cde01496cb6594928b238882f8d270cfeb1650f78a5ab38904d36345cad94ed86590b7c38b9a01038dfcec0e6092a6d34f91c09a9ea54465d432f4d412144c8ba44ffdea1331179affc426a9143bc2aa2362971696aa041bbb5a04ec4fbe837acfec16c510152838bcfcd84d18428a481a8f4f853c0f51e206693cd3f9fea87b2c9e0845acb876f498da98cacf957c3715c40893755e5a8c4b43a47309e72599056f045a9a2a4e8936aeab2aca1310007f213969446fad0ffab4281b16064f52b94f1f76592f2f003ee66a50c5e977b675087b346571e93face7a7fe2d73a9c55972a04012664d379276b308daffaee2f00ab81485a64d19256aca1915279805696789ee66166aa7ac0fee983a9bb19786ce5a4baad0753e29f933a3eb808cf725b222e8140ce7e3c056d7bd73b694a5af810ccaeabc79c2aa686f4c2e055cb97c40227dd271e86937df90a652a914bda828f08adabbf5dd9177179ca8ef78f9b12f77db65c7734a74376fd43e4d545e46a68301d0652ba1cee08e922906d2db35da70e2e173d61e96a6fcf98368051376dcefc05ff116120c9628831bf15bdaf9de32b09b2a7169c750a4c32903d21d7e5055f40923a0e39611b24051c02808d105488545cfa4bc95001036c5a15061e0099428499ff5a6f9e4392a97d8d4e270c6376a50335f38fcac04c1c7eee436a0f61ee8bc402a1c881c8f25b1aa4f32bf23436deb4a6f9e5c73fd74a73fc263960368b500c37fa73c138d8cb71d2f79eacc313be6a75295313a6a8e1ee7f5c4a755460c567f5b6e9ccc743deb4f41a76d447c27161a28dc783bfaa4c3469f50cfc20878167ced068fef0180d6e055d553a0a91601a89e71c0ea4ab703cc483398daf28db1f09e227a7d1b504f1b4dcbe4904ea15a52e873982f46c00683ec2a2d9da20d95c732dcf6e61dfdb602ac6276be8ee80914e861c2218a395a1e31a47cbc4cb114338f41f2dd0a47efdbb267e8d89292f001daa0eb4cd9f511a8106d9d5a1a479c294d44e2c6678fc63400a6062defb89cca2ce00223b61cf409b724c1898f88a321343ea4486164eebfab521dcab7830dd91044ab180e45ef127221de0d1a050d81a521441308456da82dc7ad9a600ca4460916d269bf78e63ec32c4ce93379a8a359b83af537d4576eb6627acafad065a354d6bba993d2937f19307d0629c3a7b56487546912ebc05697ab3d55d7064dc161cfefd8159f476f50e60230e8e7b4f7f20b4b4d1e931612513fa562bfec933c00cb648b34f5d0bd2acb8710f9f4b3dccecb92eeccbc0af75f5b91caf37c3f1f8b71a610b276b5f97062b82a0f2b4b5250d9f1ab29f09ac2e61dd4e3cc4141c07e4651cc028ace41d5169df86a1d5ce6f5e5997ab88f25e61648a7d4be62d79f1ab0e887820751dd822854fe257319796de578f42a758ccf2f36c0f6128181a3a2fd0b963970efe0974acdeac0333b4997870a3c597ad35d2e4f0efb09518258998cb076e7934c898c0bad68fc99f8f637b83629fbfbc50cea651c29a8b823091ec96f2bb0a38b53bc0a6f0331c012243cee024e961e1a5be68f642b078ffa2c81e12dfb38d53cc248053c1b83e1962484178a715996aa7827a2440ca9488d6395248008447ed52b586f612179febdcff6809552abf0328840c85b8bb61277ea239ef97f91ad6705b955cc1fa471c66ec91f4a6af8cba96fb106624621b022f62c414b49e2131ea39dd6921d456f366e0332ea8e9b9b387761da734d6e97603cd0adbc3541915191b394444da5145f46b7e27d428f61416daa7c6c881b69794f93fe164694f7176070418fe0c906a3af0a1d1cf302547fbc5790a5d0256760243cbc987b8bc367218fc22e55db3fa21124a9eed44479d91f5e2ee7f94427abe62f40d2c2dda6ab4c4c86ed534b446f0b55f84c188353df703ae547e05c4a9ff55235b71cecf505ea610eb17c0abacf182e5a9b040e2a6f140aff4dbdd563386c5694c12a12970b6108f76a78e647503d77e4ba128c170a3506c7fd6ed7c6af78db41d5d6505e83783f114c335a21e7ce45cb3bf1363d64244ffd4a6a78a91a2aae0651101f56e7b3506e2aca3ef94e91304aac407954163091756e6efd447ec82f0f5953a03d2c98ab122ebe19762a95b379cbcf043fe402c6d6e6664c4d31fe8698b460173b05621ee3dd8d89339cb65a7ce3968016cdcd10062955d7ad18698af45f5d64568ef6000ccd2483f21e0adada295496f9b2026d980e623b1f4957e18f59c8ee802e4f3054ec58730194b1010106b5a030b1227248d5a3c11f5c14628670c498e71222ecc004b7193e51b6a7b3bdaf6fd99bf495bd6a600ab332c36a47d1b16e57f58b8973317581462e07b6888cfe353237bef2d53f21c8e1773153c2716505ae0c95eb166943080ea3d35f10360199116a613c17f777c6e7cbb2fcae7a48a0c592ceec1c6c3e0829a8764c1721dc1cd2f207b10cfafab6aa451eddcd214e364952061a5bcaa8b43491b54efa9e80720b0d420f3bc1a58ac277b75a415a9b3666a535ed54dd3b1fe08a18449146bc58a658264ad58db40105b3ef4d0c16f5b5600961e4a9e5160c22173b80045b9c41a57666c01f7b0e100345630c28d233d5801cf08c389911a683821ceed09280785281a960c60cb9e146a200f5014bd8105fc218da423d004355bbe0c4003ad2e444002f27e40b2663c55d143091170823864330082030db11a62609519643bc0914705264a6a08da3ab43b645915aca90502ba4cd842e10e24b0d080801edf1c4c588101a3b5c316191d5f1d4066e0c08c1db4b65879e343e28d195e94c9c08d225cb0f3cdd0869b23ecbc40535a0ae3fb0006030490c7064565d6a0f341d1b15ccc0046066878a0e203c326903c8ce061746ba3898f491276a028d394e7092e8cf80ce0c30a194e1d60b821831f6a203ccc20c51334a89c90c00e950d35badce0440c6e706ed050af3000034664908017dc14d142fd610e943255cc71c18c0327d41546c06084153098a10a29d6d42b239adec0012b0da22b0e6a0678f8a0d9c0880ea844486b961caa748841863bae22d8d505cea876e810e015400e5d0d5a210c59cb3a128705198c07156692fc91e54c12199a2e23842b602820b075d17827e0a871a79c300788375bcea18e5c0e4cc2a0029005accce686310b28604406232e4fae12e38b293b6ce5512355bb4c0a1e34e162033932e0fd14392f70b10116af2245fcec8307a8a0f1a3059f350f0281668e2a7e788aedc183270c1e647bb8a0014b207b8af022092316b471c0ade9b12786139aa0e363926143878e3d1e3401074cb782100273bcb1272708018ec02384b31062670f930f47473190e80a6084b1c7f64606322a1868a08a8bce1e22313cd08615753648f3031583fcb1059c0426b84c9820d1c4206b9400d3e30714438a50193108154a6ce1b190c29b19baf861901efce801d7059bb4831676182485ac359cb8210e1c7152a06190748d3fae8e784a3c70a2854104e08218114e506109052638619007b068628fd3932894caac192401023ce1c41d071198c0c1203f471c01c41b1ff6a889930a72471e6df8c1821a532040819d2062e8b005654110ee0c3e74822c81c60fbba30e9e78589381206e58a0ba810b2612c0c285264144a8228d2d0b2000c6164b8011846acd9c30d6f8c28a07aa6c11840c1153a20061000a1128581104ca1d4f7e6030c2c00f703c11e4889b11bad8e205285ed0a326c864a422689100084b571c057280362ec8614ef102c3182481682185ac85286100a1400a91408600c14a01586690e0a28258202e04418749052c68ca54ed0903d9400e1a8cae006087095a0412c858c3991f5200220b8b23f408a40b1801c80089c9043284404720b502d4a101d1264d2056de0844e8090a54b8e3463546cc0e207cecb91a2290279ab033260c40ec6cf1063172850c5664f13f081d40a23800025d800e20c0658d2021f54bbd2154f0d5eae8eb991850fd4183a4d38d584a906e9589e250d2a604e9a987e274972a77a572b6b41c6b3d01516850a6890902a62d380898cae02cb885b10e5cb14a90cabbb341f59eae763cabd15e4956d974f7fe25cb7eca58c95eb1693956d974a519359eba255851371dcf145d92bbba26e90e6a4955af14cbf481b37307177a9475d85163e78a3e266802098ffbc71d46e84c80cac9ed691262250b1802485224ca11105640c151808833a518062863481711943c2a35c858514091250428c38c1bce27c020000630d838a87f62f2d01400b39ca439a0892de09c414568070646177bd00180f48d25438a4c11045c23061f9b01aed489c680791ef8438f33b45ea8a39c52870e8a295a3db423a9ea8681083fdcf1010046c0c38ce2afa0b430d01c525c9924fd6c8d9ac1202c2fc6feabce3fe71303e62f5ae6d3423a9a3b281c16a95b52d52b95ac0357ec98eeaeeeda2574444f9bceac5a925641ddd3ccdd2ab3cc2d4d314d6450dcae0775d3316d42a3c65d9794cc7292bd3357827bf6d2b18c22cb60edca31baf2f27837dd4dc7928c1ac994e94286a92447292de518ac732cc92ce66975cbf1ceb4bc565c723c097855e3ad229b76631599bb5ba26e5a329555bd9da925bdbd33e748c6a6b9de99a2badd25a1ce4b4291697975a44dcb913c472b1d139911d5319d663a46dddddd8256a1d78a4c79553df49e64d0a525f45a912959459e3c5c69565599b9a52514eb522d2d51e5ccddd2d21594b9b434a261aea037c5ca62e5af5cb43479e895e0468da79996d15d0dc8aa9b3255dd94bcb9d2147373a5594aa1a3971b3592914247295c5adeb434733aa61b3592d191b81b35f228284d123dafd5ad1acb2b652e0a86cce56135edaece0c737958296e777566958ea98c8ec48d55572a878ee9a84bcb6b75a7f4d2bbdb8dbc8b8e52bc2b4d9cf4a4d2a8f2ee703a32776534775823ef8a95d22453de183154397397e5bc4f55bd12479533774f5198f4744c3777f6cc32376a44d11b4647e246b40a775e1d69659ebc2b56729702f496f182868482eaa1171d9f70bb3147966639e6ae4ce959c95d0aee4e578e52b88b8e4fffec27e2775a167ea0db913d2526b6264926544926dddd984375b78c225174b4a9595aa97424230b61193c1a32afb4e59ff269edcf0cec971984447ea3ff5b16c2dee8e9b7601958c313b94b4ff369fc22cff4a15008fe0258f609f10f15f0b27fc82fe40f02fa7f7e9f1f3d6d4a36283626494ba09828294161323e3d3569a293c2042a4a9249dad09b8e67ce8675a6281975cf2566d439e66c4bd27bcb1e6fc9ad32a5967ce99f923b1e6a9dd2d1c9c8b26fcb4f64d9a7b403e7454b52f61119e4376059c5f3977767add8fb6475bb9e29855a251625912c9aab2b497badccaa7be278e315fa37f96afe072cab50a0a72d5762a14e4071c7efe4ab0bff035f0db0063d6d678ac26e6f375a59a7f3e4e264cbd196a6755282c41bcfabb2b7b494ee7ae895c0c9eaee6e37e67efb9fee275a562d7adad22aa8d75fdff5699ee7b5e56875b73c7be93dd3f256dd1daf8ab429399ea98d2ac9341dab4e13ca8e6eae39fc082c9bf7072dfb86bfc8b24bd0dd1d394259f4a6584fd64299b634c974b458a75975abd0d3f655f9912c1be9175af696ffcadc419dd7cab45829991b79630e3d6db96b85bb1acf25b9135d923377bb7109d6399e4fe4ee17c13ffc63ff97f64cac11cc699e27172204f00368396ad4dc068998a00768843a42b8864db523844679c0b67cd83d60a0140e38f0e0b3a0f5a0dad0720044d3cbfe580ed6b0b159c4269715ad073e1666e760040f7c8cd8d82c461eb82ccce865e481cb483402edd603572ded1f568082ea598062455f2cf6c5be5d4647babcac8bea65a485f55997911616681fb885f6e7fb62453ef60b22e363c3a2351d00d9ea13b358be346a808a4678200b687f8ad6b0a959403bc20359425b838a6a96ef1361b1a2b30415ad09b26c6c961f0b2b5a036447b0597e6c05325203ae09614805ed8f911a700d1b9b2566bf20011475e00168838cd480f6b3601348e6b358be223635cb8ff5296253b3f858a022200bf415c56c188b197500b40656e62c31a30e6c073ff62bfa2972d99aa5488deccc5a589fd5c20a6d0d22f3d91a649bc884d69506fc5c3000d55ac4e663b3864d6804c499074600e2cc03372ad07efbce2ca70220ab87cc0e044425da908b91d1601ab07e013a1477b035207cf0d92f0c43f008a06bad552ca2aaf67506bcf984611802bd7cc2973d042d0c662b3805c2aa0d4190831a7260f5a5a085591808e3e005334a412ff536f5b21cdc7c8ca8442c20ecb3d5657468b7b55a5815e100fd017da6a1d5675d61d119a21b95cb7eab4667383843747319a5a0977a8381371fa3a9d05698d1190e6e2f23a3eab2a0058b42a333377bd018d9ed9302c826c9528d44a8964dd1ae978515013d1318ccbe5e03dda6604f812f7b11cc682a34602b063e6240401a79fc4182912c2254fb505e467beedceccd653485c6680a76248b08d5be2c16f075734d2971508b6e2e31e4208d087be0c1452006c8c28e1b5944f08003120ac8221a11c5b2704042cd021a91f0caf219c13858408e25e04000116674514516240a6859aa07e2e7dab347cfcd5a500a07407cd6824ac8bc5ca2918fcf3018ecf59215b98856522d16d0de422250c9b02932991c22a241251ea4b161063590804108210c40802c24d0b2580f944032542199d092313af285638ab61e8469c02ffc02c815d6429775c1a6c2dbe7636160ad2259a0240ad2ed5be09686b77ad65b78c485f43a02b320d2ad567b422077022923903a81c86982ce206c6ed31184063a81e8a183ce2074aef85cae213730fc90b8c83e5b6fe067c12ca02297b575c85e4740d8ab06a3fac27c81b8f93ea4d07e46474270ea34b0fa9911c260b6c26cfd350784c160f6c5544558cce5b2d565ebeb6561b54e0d43165eabfd52c51f2359d177ab2f97cb8a2e2b06928040d280f6f543bde29506b4222027dc44eb122a4048c81e21190aea52e5dc4258d11a20a644fb51c982be54d7902026d1ba2cd14dbcf918bd2c16304674a464c54b93d30ecd9a3634bcb985168848ec225f502c0174c47c6006c4441ffbc1ecebf309fa52e90042430d6282d9174c0cfa0232b98cc2fa270aa97282fe48c09a3ff4f8838edb74feb0f3c7187fd4e9a38c37b7fd80e1761f786e5bd18f3ed2dcaa557804e4720434dad62297bde84bbdd51484058509e3324a6314ba6c18a66118d16ec15a988637d0f50a0a53c34ca549730b6b5f0882b5db5b58b59f1579a0c3071e3e4ea8df46e15df6d0e3b6879b9beb8bdb7cac1903f43744147db8fcd82920fbb2b5e8ef2b3a0274f3b16786dc7c7c8caceaadde44ebb2a211cce82c68bcaa75b95ef688ebfb5eae977d81ae222ad1da326453e14d7cc9c7fe589fa233437c6c2d9afa319aaa635ed6f572d997759da92eb1da900c3dd8dc400bfa71735911cfed9b680715b7d96d3a756431c80f83c0704beb0db42e974fd191fab2aefafa42a0989d7af9d897cbfe581fd1be5ce249b0221808045a85b7a030a275191da946a28baa5a973d2286414c15e965815c45af0fe983593a642ebb0dbf85414ca0adf608cc22dd5cb61a1d81197d41bab9accb0809e9167e515e3a5db67ed528267ec465ab4b74d53343605b409f2de3e6b279ccb97d3b8f38371f0b04161df1b1a08f511ade6ccc8241436e56e1ed65d3f01682e01110b43f2018864141e799aae7a498d1912f48f6c817a41bece7c8172424ab7aa4c27c604547aa7559b1d6075d41b50fe934b12a8681871fb7816ae191d0e80bd20db447aa3d343a528dbed43cb855fb7a550bfb8c8e7c41a29a428d8e7c3953abfd40fb19d5b854d004a05f82e08ae766749b0e1e54dcacc2db992137d0a756d1566b61d6473c53f5dcc033b51a806a7818715bba4d07017edcce6ad37c46614cb475c8aef5ab623542ba8569eda46dcdf307b310bc2c509a34b76a04c146ae1f5b8dc034b78daceacd65ab9115780466c4f4a27251814655109f5717571a14d405668f04f9d89fa0a233358c0fcc68aa82465f5cf61a681180e7066461a1bd4b5a6fd5da2d645361353a027eb02e477c8e5885b7ed9921b78d6c0c6664b551058dbad4233e16665ff6a7e8888fd117a41bcc0889c96554138d6069bd7d57dcb97d69f49ca97aa67c6e5f1d6248eca56fe92b0248ce2db4209c5b6841b1e8cc90db3726fca6c033b5c8aaa6116b850374b5a28d1e377ad4dc401bdee1b22f3d02b989a005a27a5926d90dfd2cd01edc5e4043a6449bd6d0e808684465440564bf22a6d002d94f3c33e4867ed214907d4cfd2c906855ad2acc420074c42abc557b66c8ad1afdd830688ccbbe8cac6a35b2aab78da6c08360a07d19517d36adb733f576a6de3e2358e8439ad0beeea409efa813c264e0912f48b51bec8e0c046b37d002857b7c7eb982c604315531b41544aa9f91550dab1195cbc2fe125a18cc824167aa55bdbd8ca84450c473879c337f9f9d433625da5abb7db67e118d42ab1a051675302107162efee4434ae2079c12865ed0f10318433aa203cfadc86d3a7564d5e1e63675248784f025ba3e3a6898e30d1b626895621f085a19511a7418710341d066714407157470719b3a0ac485c0142f18e8fae458936785a23962089a23eb13c1e7cc31c250941066d04a80207a9e68238b88021852d061e38d1b07809345ac0348b8e77547cc8dd81d100b51174277402b824230e69871e78e27d4e0e3872ce2155945c471441d586071471671909b28079c9b28871241485e7264c901c36d4ae94710a45a93114152abab0b1991a522016258b1830843c0210105395ee8420d390880c29b1968b0820bf0361d395a00e568e1564b801d7171c1450608b0c1852d2e3ee0e18d2dd2d83087086e1491c50c7bfc11c7c69962e32cc9ac3dc21a219b52b2a2f464ca1705348ac15e20e8a213b34754591e156e200882360f09794830c2364107cf1d3a78f4cca1738038d609cb84166fb8712308571637571c7cdc5c78d408f1b0440c72dab8a18734fac012028f177fd800c41681d825de807333e0369d38eec411c61a4021683ff0fb5ef681170c5624da26ac10b2438b846c2a56e425977dcf4db454ae1891035e7a59a0971d3c0af908c3a96ac3b0dad08af66b037b6125dfa686807183cd4a165d160899117297915b5dc2fed0c36779b03c7c1f197e8816e8a7da9ffaf353ebcfcf3ba2db36566d0cb29f23db9fedcbfa6cc55bb5b023ff84fb14d916441fbb8dd95dec063342f321fdfc001df131fa22de7cac0fecc7d69b18fb29a2a2890f09663f24d1da1364534a739ab8d53a358c2fca8f9d0ae7084eecc7c7c662b19890581b6f60413f561463528614bd8a8414c5861489b0a227565c2e116651904d29ddc41f1b54e463b74224f663817e7e808a949e4cf9a2f8b83e1f2358bd01397167ce6d3a6bd4b94d21d159234e1d100c5d35b4d74ffcac68819040d07af990c0185181760b1830c8ba2003b7800141d98784045a16645331a24525a26834e87273a78c8fce1a6fe8ace1e6369d35dad059a3849beb566d4c02a06a42854d678d35b74f8d406e9f8d11b941506f9fdd41f6b2dfa68e6a1f11ecf5020283b8c0eab784d5a2934620b7e9a441079d34e4dca1a3861c3874d47043478d136472d0b113061d3b74e8d8a1828e1d23fe80a28421f855a9f5acb72373641fa5fe835ffd06118dcab03384912d800c940253fa8ebe0a64a76030253fb0ea6361b0cf07f4f929f29282ac5ad79dd00b20d17e9f05bf979d166e9f7dd1b1b3c3cdc7067df9eccbe78bc96a95b3fa147d373a66d8b97dd52503a584560619d5cb7e53e1cbba2083d9a91f1f1fa3b4debe7a93bd947e37d817e5fc3e99d05160413eb6064170c4c788a9c2829896f37abd96737b59f0f5597d2f100c620ac1a031e148ae0ffc42232ed68510f6ba830e32de001a0274508ce85b2c1614eb12de7e2ce87aa92003edcb86162946444466dbd4d022d5b0804111eca50645f0ed08684198eb03126bf80979d121c3cd2d1c23ce2db4322b880c160641f0faea27e4c702bd7e8c603197f851e8ca02e82f0a08825369b8bc40d0674aa4128d76b11b68f30082fd0252a32eb97d51de7ee110d0c7fa88a275ddea41696eaea2d008480d343e14bea2a93440b00a54f453344574fb11021e24260c6d6885184dfdd86a45214647bc7c136221f826c4e80890a512625d16c8c80a223b22c408f621d934b71feb6363696e3f3ba21b2c0d50fdd6f83e3943803e0b64813ed18adf18a020088a88f6fbf6a1f0b5f9a20471115d3f2f4b5434c48a452ffb5354c41a2972593b64852c1018db07884801b6fefcfcfca4077c362828c87e3f41b6a250ab1c60bf2ac68c88be3642768ac8ed67e8e7e7c7e88020fb191d39c0baeccb8b9023d60051b4a24b14c5362f972d121404c167c558d018973d621422f0b240403fa110d1ba5e7244d7ed0051147facf87de28b86dbd4cba61f9b138c168ba6be166e53af4ffc8ad8fab5797d6d6e2f22d116b19f9dda117d1f51112b5651146d3da088d187c27742100445ec8f7d15d521d64851902d5254848888d114ac002321d1473628454926c44ec9623e45475ef6db0f2c0cccba6446475e36c88a5e848441a2050a8a7909b261900d329ada117d28c43e361f0ab5ca6d60afd714d60d8642ad221a51c160302358787bb98c3e14ea12f13b459ca803460bb730e48491c20d8c355ef8f1e616bb19b1412ddc423d74c48843470c3674c2b843470c18626fdcc2f04e0141361634157bc3358448c8176b23f6c617e5fb8cda807186585751ccfebcecf7c5eee81162f345b953abb8ec27644405b651abc86c05ed8f11fbc18c18c5deb8550b3332fa6c8d7db1971522e43514ce31c06563465e469f915838e77b19f01915090a0a6a018481e0f7c5ee7c313db7a918f87db13b313cb10f1422c4d6376eb1d86734157be316b39ffdb19f910b0621f623127b235a9910ebdad9970b840989c5ee08b13f3656548758a122213b252b523487c86daac23045045680ad43be3705546b5440adb5ca0a28c0e808cc0ab5f9ded0b989168c034aa930c8441b6ba356794dc98262427632a3a9ef843737d10e093f25428c624153f54d2cc8c6da080a8abd1103edd477c26d6a772027dc5c3ba25becfbde11c5c2a17a80144f5c3f4864448868733c794e1e7df0d1c7176ee021a3c8127096b883c71d3cec91e515c5ed25440bb79710300cf142cf6d0ae90d1122224444888884728c3ef046e43f3014c3d70713ad0883000c7dc4cf05f4637fed030a359540c78b336e6050973a52b575a4ed4f1068818042d71d4075c85c66295b3e25d58246534234ea90b1c0ca94eb90f9902a12a2db13a2db74bc90e206dea6e30514b729a21bed0b2488004103628702cc90e4ce0a41784102185ea8999dd10720767c01071b3b49e80063c64416604491044f1c9a0a42149175420d342b5a20401d13666bd40101883f94d083451cb4396acc48106376051d3a53d05058a28b216878e3c30db31d5ca031d1450192c0d1c51a170099e980c72c4f9232ee2461830c2e6655544103a1095a0e45cca8f061c6070e491000034d072e5230001723cce2083293410f17e6a065d1461866ccbea813e78a24763c61c211593f7ca003cd0c1968346ca10202b660335362cf187cd0e0d4a1c71bb33668d4f98276021637c8492389d91041c0c00309343cc102ed0d9d1252a0f341123dfcd8e38e350798e590c62c8b30da6821470ada0f4ad08880331b412b891836d00c60003b5a9c70841621ccec48801708485207cf0c6bd0c698c1b1c5ac072a92f0c1040d09226631f43083e38626c60bb43a59a0301b240b110409c4893c92ec2107ed09366832943143a28bd91d56bce0046dcb085a155b7472d88a61e606166db2b02000cd8b416650ec61051d58b8a1c519b433bc4063cecc0928662d20411b03882463ec9064cf0c6a56f8600e093ccc513323a38f990876d04a80a3063b7280418b228b24804491e48d38333584c0216b871ade68c1882b4c90e20a10685afc314b42cf2c01712431430dda0c62d00820f3a1a386cc670a339848824611656cd184d0e18f196646b0300bc10a136876ac08210940fcc8638439ba7083c6068d991e30f2684183610a13984862a788d9165b333974a05131030d0a166678546142923aaa08c10b4042c8e30073d0a670234918682c01c64c8e16b317a648320713471441c3618ba6468729669871c1821b2a4c4812081521040208ad893cfa9863760037662ca091240e309224400bda1653d05260621646116d6cd1c8d021491a33cc88606185294c48b2c61421cc6c006436471e49f2cc91e40f37662aa06103184906d1a28c2966623021421149fcd8d2d2a18819866061d6861426d05a90220416004992471e68cc317be3066d0d1a49fa0063d68416b33ca6388309da124524d1b395e40e1d6674cc40bb82059a9b284c28218a10a290c100c12383e5f1031d42c03113448dd91d3292e05127091958d449438adbd475684130719bb2332d3946dca660164647ce0f37d02201ed9da438760459582b2cac1506a06aa7ac28dd94a6844547a0fd94be0fcf0130da0a32d18d2460c8c2db749e588326c51363dc685cc8e8c89972e4369d27867842eb3645741301e8a30a7bd827826168ebf71111ed54ad619daa462f38444fb879f93cc14210ec891064af30bf95f54363fc160f3f24c66fedf04361fc960e3f04c66fe5f0435ffc160e3fe4c56fb9f9a13abf75c30f75f15b36fc1017bf55c30f6df15b34fc109ddf9ae187b4f82d197e288bdf8ae187b0f82d187e68ce6fbdf04357fc960b3f64c56f19e087aaf8ad167e888adf62e187a6f8ad157e488adf52e187a2f8ad363f24e7b752f821287e0b851f7ae2b70af0434efcd6093fd4c46f99f0434cfc56093fb4c46f91f0434afc169b1f8af35b04f8a1247e6b841f42e2b744f8a1237e6bcd0f19f15b21fc5011bf05c20f11f15b1ffcd010bfa5e687e0fc569a1f12e2b73cf8a1207eab831f02e2b738f8a11f7e6b831fdafa2d0d7ec887dfc2faa11e7e0bcd0fbdf9adab1fd2fa2dab1fcafaadde0ff1f05be90fedf05be80fe9f05be70fe5f05b677e0887dfe2fd909b4f4a7ad9169fb4c0cbaef8a4045e56c5271dbd8c8a4f02c0cba6f824a39749f149452f8be293eccbe47c12ed65507cd2ec654f7c52929739f149485ed6c4271d7919139f84c0cb96f8a4035ea6c42711bd2cce27197959129f64c0cb90f8a4222f3be29388bccc884f1a7a59119f54c0cb88f824a1970df149b297c1f9a4212f13e29384bc2c884f0a7a19109f147bd90f9f04f4b2ad4ffa79990f9fe4f3b21e3e09f6b2379ff47a99d627b95e96f549e2cb78f8a4f0653b7c12f8321d3ee97b590e9f545f86c3272d8ef022052f8af0e2042fae79b1e9c5105e2cf322082f4af0e2072f06e045352f927931cd8b635ef4e045312f76f0629817397811cc8b1bbcf8e5450d5e8ce045ac17995e44f3a29717af5e84e045ab17bbbcd87b91cb8be98b5b5e445fd4f2e2f9629617cfbc787b91f7229617cd171f78b17cf1ca8b552f3af0e2ee452b2f52bd58e5c5a917975e245fa4f2a2d48b535e8c7a51ca8b502f4679f1be08e545dd8b4f5eccbde8e4c5a7179bbc38bec8e4c5252fda5e4c7ab1f662032f32f0a29217915e5ce045055e4ce0c5a31701f0a2d18b452fda17692fce5e4cf22292178fbc88c08b07bc48f4a291170d78b1c88b445e1c7ab18017855e94bd38e445212f06bd187b11e8c59f177d5e84bdf87ad1f5a2f862f822f8e2f7620df77c38c887827c18c887807c98800ffff8d08f0ffbf8908f0ff7f8508f0ff3f8108f0f11f0a19e0feff8d08e0febf8908e0fe7f8508e0ff37c88e7c3383e3cc087707cf8c6876e7cd8c6876c7c78e7c3353e54e3c3343eb4f3211a1f9ef1a1191f96f121191f8ef1a1181f86f121181f7ef1a1171fd6f9908b0fb7f890ce875a7c98c587587c38e7c32b3eb4e2c32a3ea4e2c3293e94e2c3283eece243391f42f1e1131f3af161131f32f1e1121f2af1619c0f93f810890f8ff8d0880f8bf890880f87f810ce87427c18c487407cf8c3875b1ffaf0610f1fbef950ebc3ac0f79f870870f75f830870f71f8d0cd87377c68c387357c48c387337c28c387317c08c3872f7ce8c28706f8b0850f59f870850f55f8b0cd87297c88c28705f8f0840f4df8b0840f3ff850cd87693ef4e0c30e3ee4e0c30d3ed4e043ac0fd17c78f5a1d587bd0fd30fd10fcf0fcf7cc8fbd0fcb0fcb0eac3dd87541f4e7d487e28f561d487501fde0f751fe63e7cfa70fcd0e9c3311f2ef950cc87b60fc37c98f421980f6b1f7ef9b0810f23f890810f993e54f2a1970f913e84e0c3053eecf2a1021f72f930810fb77c78f4a1960f01f061960f8d3ebc7d58f421960fed870f7c48fbf0ca87b30f1df830c987563e44f261950f8f7cb8f421021f52f9f0800fa77c48f4a1940f8d7c18e543033e84f261910f9f7c48e443271f0e7dd8e4c3023e64f2a1d0874a1fca3ec47d38e4c3017c28e443331f067d98c187b10f31f810e843017cf8f3e1051ffa7c68c187b00f2bf8f0f521051fba3e9ce043f1c3a60fc30fcb84127cf87d18800feb87643a7870cf831c3c38c8831b3c28c883803c988007f178f08f07fd78b00f3d1ebce3413b1eace3413a1e9ce341391ecc03c6f1e0011e84e3c1371e74e3c1361e64e3c13b0faef1a01a0fa6f1a09d07d178f08c07cd78b08c07c978b08b07b57870ebc12c1ef4e1412c1eece1c1390fbe79f08a07b51eb4e2c1ac07ab78908707a978708707a778508707a378108707e53ce8e641281ebce1c1271eb4e141271eace1c1261ea4e141261e9ce1c1251e94e141251e8ce1c1380fc2f060120fbef020120fbaf0e0110f1ae041231e6ce1c1221e64e141221e5ce1c1211e54e1412e1e4ce1c12d1e44e1413a0f9ef0a0100f96f060100f92f020100fb279f087074778308f07d33c78f5a0d583e883e783671ee4fd37e63f31ff85f90fcc7f5ffe8be03fa6ffbcfc07c17f5dfe3be13f2eff91f0df96af6afed3f25f96ff6e5f83faefca5719fe73e03f2bb5fbdfd2d7e43f26ff29fdb7e43fdb7f49ffd5fe6be03f06fe53f21fd27f0bfca7c07f09fc77f41f00fe33fa6ac37ff63fda7fb3ff92fc87e4bf23ff21f0df01ff11fd67e43f03fe2bf21f91ff86fe2be03fa1ff64ff0df90bfa2ff61fd07f3ffff9fc07fbeff59feb3ff1bff03ff0abfffd75cfd741be0af23590af807c4dc0d73fbefaf1158aaf7d543ebeeef1550f3cbee6f11501d58eaf757ca5e3eb1c5fe5f89ae72b9eaf717c3dc05738bebef1d58daf6d7c65e3eb9daf6b543b5fd1f87ac65733be96f1958caf637c15e36b185fc1f8fac5572fbed6f9dac5572ebe6ea1c5573a5fb398f3158baf5754f1d58aaf547c75e26b135f95f81ae7bf15be26f11589af477c35e26b11ff99f09588ff4af83ac457385f85f88fcdd720be02f185f0b587af6fbe6afda7e66bd6571ebeeef055878ac3d7fb7ac37fe7d71afe33bfd2f03586af30fc27f5f585ffc82ff7b585ff9cbeb2f07585af2afc87c1d736ff5df035858ac2d713be9af05f055f4bf88f82af247c65f39500ff357d1de1ab085fd75410fe2bf3f583af1e7cede02b075f37f8aac157ac7fcf57345fafbe5a7ded7d4dbfa25fcfcaabe5d7aaafbbaf545fa7be925fa5be467d85fa7abfeabee6be3e7d1dbf3a7dc57d1dc057335f33f88ac157017cbde0ab055f2bf84ac1d709be367d2df35582af01f84ae6eb98af62be86f90aa646f0d5cb5708be76f9cae5eb96af5abe66f97afb8ae5eb035faf7c75e0ab95af55be2e7da5f255cad7285fa17c7df2d5c9d7266351fabae4abed6bd2d7dad706be32f055c957a4af0b7c55e06b025f8fbe02e0abd1d7a2aff62bedebec6b92af48be1ef98ac0d703be127d35f2d580af45be12f93af4b580af425f655f877c155263f5a7c2bebebebabe8a5fc3afe0d7ef6bfdfaabf10bf2a7f107f2dbf901f9d138e3ffe337e3f7e32fe3e7e31fe3dfe317e3d7e30fe3cfe307e3c7e3ffe247c0efc5afe7aff3dff177f1dbf173f1d7f16ff1d3f1d3f9e7f8b5f8e5f8b3f8f3fc58fc78e2f8aff80ff05bf1c3f157f1bff153f1bbf14ff1b7f14bf1b371e79773bdfe7d1fb81e354ebfaa5e872f37550783892158eb770d40f840bdfed43dbe3ac757abebab0110520da8b55607eaeb5b26936d47857d0c2cd15217f823f3d99f1afe91aead532d0078d114752c56c0f0520a99d0947ab58249d507c8e7ab4fb0d8ebab01a8b0b07aa9493e2a1f920fe87b7d6205eb87547d6aacd65aa5cebe1ff0ab3fb5d6ba5493d84ac400cc0ad88058c1ea5343a2eae30380b07e9feb7bdd2a2ba204e4e5d7bc0590a6eab9c08eed0538e0a97341d11b745430b611c4046cdcb9a9e88ccbe0e0c52d3376b104383451830445e69800e030a587ccf8040b181c66797819912851c18168099551c8961436828ea414fdd4286c5441a238edb1218a1d649b1320b324a7375fed4e9659b34a0c34e0a67607cdc9c668d64801bb1932b393a8c2360c010117022e04def2955d2e22f56718ad1e500ff8ae2fb056b18615497d55d817d65b7dd55a63f5fb2a047582b18c6527414ec0af5ebffaaa432a507a141e3991190117028bb1d7645c426a03835524126bad9f58a58620d49a5901b6631f18bae0f8c91f68856a288ae15743570dab4b046bfdf96a586ffaaaa01814babe107c5510acf555a17cb45a619feb53e0737d63918305fc1a78f9ecfa2838ac0d7c55ac558195f82850b36026d4329548adb586dff7850c542771f6bd8e6a9d30ac53545a3522d6b0fed42508b810b8294004024a50604480920245794e60bca364f4c11a2761638cac2438847192b1c482840d223747d888a939a0e8a58608877022bba7c888132013b9b3a534e4948565c8d6f691738404cc0dcd009845a2c67567c8cdcbdcbc1e354eb3ba38aceab578e8405d889b5a74451485eaeb215534a00aa9b026a194c116c2d9eb93f9801bf96c87af1afed50f8bd003f5d0e755457c884be85aab283ef980be6bade0e7a5d657fd6a055d1a7cf5abafcf00096a75d5d75f0db2819fcba7c2c2cf85f4636bf87d619b1ad6fafd559fc51a7ee0ad75eaabf5834df01df9eae70aedf8ea17d6ea6aaa466a053fd81422f84aa0821f95af080cac35d4afbabe5a3f1057bff0c7e7c917ab5760553c029bd49f1ad6effb4226e0cff7552543a2d40d4226405d4032dfe11f0f35049142f1abe03e9581ea5a34406da30e16a95abea4bae4557ba85f3592c52a285b88857a0deb57b1401f5127a41ea9f513bf0facd54905aa00a8b01afbbeef7365f98a54a1ef0bbfaa04da800e802950830a40e07ba18adf0135ac60857d2018051aa9628c847c644224b5fed4f0a9eeba0e9a7199a9a2088647f5bac43ad521b503f0cc77919320590daaf5a78a4cc4af7ef5e783058141201058ebd7a8063dd0e403abab86af1a5441095c58be0fb604d60a7eb54e01ebf785f68bf92055b156b156a590090d5617a8df8f0bf6bd6a5daadf8706e8aa3e5f085a55a3ef569d884955ac20d05761affa61f966dfec4b020e5e07508754d7f7d5a0500686df01dff755570da1aacf510512bf2a5621528e7c4caf5a7d7cbefae403f4faaa006a055fd54b4df251f9907c443eb1baea57976a920fe87b851514c15aa554b036a9b1ea409d7d40dfabc2c25abfba54abcb808f480dbf2a8695ca0754c16f5641f0fbc22fac54beaf22f011a9b030ac4b75480dfa7e5e600d6161ad55ca921298eb7bd51ad8001151fd6a08b40484c19159adb528ac3f1576abacc84f0540ad403f2ea05aabf5ab5fad358949156b172f406afd7c6af88572febe1ad65ac30a41ad150015a8baea023b28aa9e5d79a562230f40a870c05387aae88d39c8a2368288c2e1ce50e3195f36bc88ba6317eb7068a2861c0e42e87962c31cf3344ee9198b9e28991967795cc00612a50bc603aa7c1989967c2912b2c58443d09117367eaa97a2979a2d631544cb9d41967207909914375931294e3bf801e58e9b224f9c9444255be3c0c889e684913552c0e766c8cc7f70ce2b959a4fac158ba66414a933cbfa83cca88928f2694955af7c28a313fe0d7a19a0a7edf2c61c7a33783232a32de8691bd351870b1a021e019f501316404d08c6c580adaf3d3e9065a911c5d84b81333e087160121a89edb0e52a414d08c6c7801f244421a8f1b920140038034a5d315817d814d70f5885e847d4420d2c8e1a22197ce02305ac018fd81a6ac43d6ac4180263a889a5464fa8f12112f2bdaa884bc416d814013ae00510c213d40c291a520426092d811109ed01416c0036e565051c025a81eda0060cc36489ebc7f5831a10c8854058036202d63016d67eba880dbc2e7021e0fa714dc588c488f810f918f0ba001404041702201c10c4396a12980aab2c2e8124e1526c884b28ac6012a825241333e2fa5e15bc8ebcc488458454171028863110043ff005c2409f1f2421f89ae055c010323f422fd7ab82aff049b824acb003c0231ff8d0c42d35427ef840c8151e816d01215c0304239c7dcf20719851861775b098d38b2aa3421b2e591e70408a59de61c792056443602f0c043046cc1e2ec2f8829682120c2f6091610d32bab8028a2484d05a6253c0855e9a027aee81003d76c408a38a23d27830800c0460c118311074a1cd8c18d00413698408c2830e70499098254dc81a6a9ca952b367903ef8c8000323060891718515514091041243a4800209b8015c50c118314c5d7061c5164ec0e0058d33bab8a20a289ec8dac104114240801e32c480e289268858a3e6ea98b80805e981e38d35b0a88289258ce84185025c1d6e001960500113972a4b4a8482bae0028b1a665061cdd50d2002a62e5caa0cc71b5d709185154c2c61c4103dac80c21a33113039506549ca13264a0a100adf03c71b6a648185155530b1c4103daca0020a0558d306ce4c060f2cb1050208982f4384a481a4cd0926585081520e0530010b0d103e7bc0413e414440be04c0b6421fbe1e3eaddae463022a551b5012d800680da07d48ea911702e001952834520df0192aa00050160e8909910521103b0008c98f90cf0be67a7d2e97288275d79a9f04b450f3f279f9844260515e3e609258d307628c6048ae1fd8943036a48631172ebc028340a1b08c106450e312f2bd7cc25a50922941a8f9a120a60b6b423ef89e1c112708abcb8a146a1c00b34528842ffc09c128e943cd014060a0ce07555c12a261f9e00b11009378b5e88ad880186a5c2e1a9935458664110184e00302a839c0a782189118110dba14e1c1d01f3ed458497d20705a41f6f2018344aa9084133e8085425c49ea10271fc491830f0363ac81f9f182900f48c422f4a2127eb918c001614844fae9f2a3802b83908117151094c00102107c48c10099d29aa01c9812a85003d4839a2184a026432a0548c02aaf03a27cf0f3a2e2fa810901a530410026f9e9c2879a9f175350199897235cbafcf8788995d15951428d91b016e5c7b53414e4fa01e26234802c353f302fb32713d488a04cacae00b87ec42a2e06ae6401eaf92c00f3e2fa791d10b4c5e72814e363840812051030800158035f2450e0831f98ede524c889142632af58f842405c02a3f8c4c2052c9697cfeb275c227e09a760a9e211b0483440c9079603a970a94204fb31c047ca075ac4003d81218547e191cb07350c0809b7880d88339fa310c91026601210d4d89654100a4c0a417103a301b0f084590a11441d397084f0618712d2748006a582ba39a7016420000b2898a00c19301178599ae2044981040060432baad873071d713c70250123040e78b9d9828e565600b83cb094a4480cc84545134b00f1466b071d707053c304480b2cb1cd204353993d81e8f124803bec8002670aad90020975a5cacfeb8d0a6da4f89851460f6f96a844314204e807f6427224092432b8ba31622260eac265e9091325050809090a6d408104021470078a134204e1439a0a289012858848e8459d3c28b8e240149f976b88119620220717583061831b6cb021853162ae54592056010113f0f911eab1767c78c2383e36c43bf58c8f8c6f0c1f3162617c5e7c5d7c4d7c4380427c54e1543daa3458121149d0019f91af482522342416f009555928e403127f3e1f18ec7bbdc42fac60adaeff27ca092c43a2e6bb7b1ad3923c794baececc9165efea83a409c9114a5ad7b2237bc88ed4f12bb0ecc815b2234dec64a14cabc422597b75245a9216256d4ada2a58e7788e52393b9236c57a3a32c31113644708203b82e5e464a34af24a5d5925d6012b16c9012bb624a3ee93199bcd868154948b0ad26217d99170f4b495e74dd391b7e44cd143f0bb36b0ec80270ee8e12fc914bd3a8b5e53679520a11f50c201e9baf2a6a3450f68d295577680d101326ba14c7b73e40eb5a709758e296a6f54399e3eb6ffc83e50fe23dfde995e743742fdb417f1f0c940e90e2a4cec157b9ebd1c0354a84ca122854a142a50a83ca1e2844a132a4ca82851a13265ca142953a24c8132e5c91427539a4c613245690a152953a4489112450a14294fa43891d2440a13294a52a8449912454a942851a0447912c5499426519844518a4205ca142852a044810205ca13284ea03481c2048a12142a4fa63c91f224ca13284f9e3c71f2a4c913264f949e507132c5891427519c4071f2c48913274d9c3071a2e4844a93294da43489d2044a93274d9c3469d2844913a52654984c61228549142650983c61e2844913264c982831a1a23445498a521425284a4f949c28355162a2a4a48446e9c9ffc832236655af5c92564199f9a9fd202175603bf8a9fd6c606dcd6e60adb5f6a7f24ff9a5403152b34b46d6f3764966001706242133406bbbf4639752a8bbb3f6c729958a224f6b53a8bb73ba52b974ac72a0c801070ea118202533c0cb5b94b469efc95a94bc52a95d427565cf7cb250a64d7ba64573754f7e966c3a5adda5ca91e5c8332086c152913bef9ec6b457252b52c57649779f2c966ebce76e0c739ae7c9e5ca3c4f330bd4d5e59e462a53a44481f2c44913264a45dabccd56e44a5684e79381922fcde5dda119ab94a04a52cc28a681249b92ed899fa0e939064917609994ec25b89b8e3a72375ad9d28b922989e65a2e7f04a1975f2ad59157ba72cca2bbe804371d75bc09b4f0aa4e2f5fd15d1e8f3c5374a90a1dafac7c87d3e864a552f2ca9e97dc9de3b5ba6bcb7b9f2cbac031fc202c837253deaaa88be27457d7dbe54ab2ec252d41972c6102a54913dd94dc9228527417ca142a4f52a030a112050a2a9744a5439352533752ed4cde1234ed994b52322a2d2f7a4f1edaabb2bb5b96a354cef2aa4e29abbbe7b8cb5d5d4a56913b3cf2b8743ce92e79a63328a08055b20e14d9f4a25050e21531490105ac0357acaebc147c2845684488c26104493e640abd845564baf434d125329d05335d67ff91b3730e7f4672184cc117de18e6deb3294b999b8e6999a8924c4d29943796280e8735eeeeb9b4547553140bc595e428951bcf9187c3a1bd5dafaa97d31255922539565d096eeff60220954b471e4a6ec11a77570211dc8893c01011c0c450d426a889016a30c288243c885c20e2428c1eb678f04553090ea8e1fa91fcb4ece9e8bb7b7a22cb5ac60c2c1befbc5d928d44b0cad196a3549a96f7bc5050a4ce8ef65a8d52d64c2daabbb7b4523952eacad6ac9996a46e3477ba6be62cd6ae342d4ada460b654aa13d8bf56475d7de279b9aa52dc7dc0344aa74f78cad92a6a31dd3516751acf16a375add4549a9d4eacad14aa1a3941d9d6e6f3752b0b4a4bbe5d598ab8b2a49a9dc98b3f71cedade0bff23b3080654e3d2ad3646293d2c4a694f4a44bbae499163d0026fa91643829ac4b85db8d3933ebdf1a009e273626362649bbd23c49abf2fe4ae3960d004d3a46915663bd62ae6e29ced0c14fade6c01507ac12343a122985ba60962438c7a450178cb5d6fe6c60d1e82e8e2a379ea98b8a8f0b26fe91850357a0ee4ec4c2012b362d7b66ce3660cbbbc3e1743b134c23b413d2f04292a23aeb8003b9137d2272601906e17f756669edd2d599397b774fa3546ebc67d9b3ba7bdeb4bc76693796e74d4bd20d0d4c6c12d4eea2d601076c2a15455e29db8dd2dd147e0c9609c08bce2c2f6862d2722373d362ad58343a9277411cf4b4619d697997fc5dfe25c3055f7863d5927bcff469095a9a649abbbb9d995b72734d949e2ed4bd4f4e9e4039b953a030819273a29b2225e7c409155d93dc4865ca9331a793a2b42497a2bd73496992296f8c93d5dddd6ecc5df368b9e629bae6c972cd63af796ed73cb46b1e2cd73cb36b9e07ae79925cf35cb9e64172cde3c035cf916b1e2bd73c085cf354b9e639e09a67e99a87e89a87ca358f916b9e29d73c065cf348b9e62972cd13e59a87c8350f946b9ea16b9e27d73c055cf338b9e611bae66972cd23bbe66172cd33e49a47e99a47c835cf926b9ea06b1edb354fec9a27e99a07e89aa776cdf373cdd3c0358fcf350f03d73cb06b1e25d73caf6b1ea46b1ed735cf02d73ce2358f02d73ce1354f02d73ce035cfd135cf77cd03806b9e7acd6374cdf3b54c732d71d7d2836b39806bd9c1b534732d39b896195ccb0dae2506d752836b29806b89752d2fb89668aea505d7f2ea5a56702dadae2505d7b2772d27b896e9b56cba96e8b52c732dcf6b29c1b53c732d03702d79d792ccb534afe5986b595e4b31d7b2ea5a86b996bb6b09e65a525dcb2fd772ea5a46702dc96bc9742da5aea5976b19752d21b89650d7b2cbb5bcd792cbb5d45dcb2dd732772db55ccba76b99e55a8ed7f2762d9dae25962bd11a572228ae446a5c899eb812a5712572e24a64e74ad4c495088d2b111357a233ae444b5c89ccb8122971252ae34a14e74a44c69528892bd118572224ae44625c898eb81285712532e24a04c695a8882bd117572222ae445e5c8986b812d5b912c1b91275712512e24ac4c59528882bd116572220ae4474ae443f5c89b4b8126d5d89b2b812f97025c2e24ad4c39568ce95e8cd95e88a2b91d695c88a2b51d695a88a2b110f57222aae443b5c89a6b812e9702592e24a94c395288a2b110e572239572237d7181ed71811d71802aeb121ae313dd7189c6bec8e6b4c886bcc8e6b2c886bac8e6b0c886b8c8e6bec876b6c8e6b6ceb1a93e31af3e11acb738df5708de1b9c6de5c63715c635ad7d801aeb1ac6b0c8e6b8c876bec8d6b6c876bcc8d6b4c876bac8d6b2c876b8c8d6b0c876becce35e6e61a5be31abbe11a53e31ab3e11a4be31aabe11ab3738dd1708da1718dcd708d9d718dc9708d99718dc5708d95718dc1708d91718dbd708d8d718db9708d89718d19e01a0be31a6be11a03e31a63e11afbe21a5be11af3e21a53e11aab738db5b9c6bab8c652b8c6b8b8c650b8c6b6b8c60a708dd1b9c64eb8c6b4b8c64cb8c6b2b8c64ab8c6b0b8c648b8c6e65c636caeb12bae31025c63565c63235c63555c63225c63545c636baeb129aeb110ae3129ae3110aeb128aeb10fae3139d7989aabd8c45534c05564e22ab6701595b88a2b5cc538575185ab98c4556c731591b88a295cc523ae220a57d188ab5880ab58c4553ce12a0e71154bb88a70ae2209575188abc8e62a06711509701581b88a235cc51faea2085771eb2aaeb98a3e5cc510ae620f571184abf8e62a7e7015b5aea29aab987515d35c451eaea207577187abd8c155d4e12a72701571b88a1a5c45375711eb2ade7015d15c451baee2d555ace12a5a5d451aae62ef2ace7015d3ab28c35544af620c57f1bc8a305cc53357f185abc8bb86805c4330ae6102aee117d7f08f6be8c535f4e31ad6b9867d5cc32eae211fd7908b6bb8c735dce21aea710de95cc33caea116d7108f6b98c53544c035c4e21aeab98673aee11dd7f08a6b68c735b4e21ad6710dabb886745c432aaee11cd7708a6b28c73594e21ae6b986515c433cd750ce358ce31a42710d0f700d9fb886705c4327aee11bd7b0896be8c63564e21ab6710d97b8866c5c4325aee19d6b18e71aae710d93b8866a5c4324ae611ad7f0886b68e71a1a710dd1b886455cc333ae2111d7d08c6b38c4352ce31ac2b98663aee102d750cc3554e01a86b986095c4330d7f0e81a7eb98600b886115c43a36bc8740d8baea1976b68af2104d790760dbb5cc3d935e4720d935cc32dd710c935d4720d8f5cc32cd710816b78bb86075c432cd790e81a3e700d8d5cc32bd7d0806be8c0352c720dad5c4322d7b0ca351cba864bd7b0806b48e51a0a5dc329d750760da55cc321d730ca3514720da15cc3a06bf8e41ac6aea1936b08740d9b5cc39f6bc8e41afa5c43a56b08bb864baee1eb1adaaea1eb1a265d43f11ad6ae61780d1bb886e03564e01a7ed750c935acd710e91afe7b04f07b967ecf05bf87caefb1e0f74cf93d15fc1e29bf8782df13e5f74cf07ba0fc9ea6dff3e4f794f93d4e7e8f04bfa7c9ef09c0ef61f27bc8fc1ea5df33e6f72cf93d627e8fedf784f93d49bf07ccefa9fd9e2fbfa781df13c1ef61e0f730fd1e25bfc7cbef41fa3d10fc9e057e4f97dfa3c0efe1f27b12f83d5b7ecfd1efd1f27b00f07bb2fc1ea3df73fb3d45afc5c76bedf15a66bc5619af45c66b8df15a5ebc569dd7cae2b5b078ad39af75c52741e1b5acf80f84d7aae2b55a782d2a5e6b8ad792e2b5a2782d39af05c56b3df15a4ebc5613afc5c46b2df15a4abc569cd74ae2b59078ad235ecb88df2af35a45fc57c36b11f11f015e6b88ff6c782d38ff4dbd5610ffed5e0b88ffc6d7fae1bf0c5e6beb3fa8d7f2e1b57a78ad37afa5f55a59afc5c36bedf05a3abc560eaf85c36bb979ad1b5ecb86d7aae1b56878ad195e4b86d78ae1b56078ad175ecb85d762e1b556782d155eabcd7ff7b50af05a27bc9609af4580d71ae1b54478ad35af15c26b81f05a1fbc969ad74af35a1e7c12acd7eae0b53878ad0d5e4b83d7c27a2df3b5cad7aa7aaddd6b51bdd6d46b91af25f55a51af05f55af7b574af957bada7d71a5fcbe9b570af3580d732f35a19bc1606af2580d7bae0b52c78ad0a5e8b82d79ae0b59a5eabcc6b49f05a01782d32af35e6b5c4bc5698d702f35a5f5e2b82d7627a2d2faf05c16b75792d2eafb5e5b5b4bc5696d7babd1696d77ae0b5aebc9603af65e5b5aabcd6d26b5179ad29af25e5b5a2bc1694d77af25a4e5eabc96b2d792ddb6b25bd56edb51a782d065e4bc96b21bdd602afa5c06b25f05a47af0580d732faac193e4b86cf8ae1b360f8ac173ecb85cf32c067b5f0592c7cd60a9fa5c267b5f9ac143e0b85cf2ac0679df059267c56099f45c267b1f92c027cd6089f25c267adf9ac103e0b84cffae0b3d47c56d567ed3e8beab3a63e8bfc2ca9cf8afa2ca8cfba9fa5fbacdc673d7dd6f8594e9f85fbac017c9699cfcae0b330f82c017cd6059f65c16755f059147cd6049fd5f459653e4b82cf0ac06791f9ac319f25e6b3c27c1698cffaf259117c16d36779f92c083eabcb6771f9ac2d9fa5e5b3b27cd6edb3b07c2d8fafe1f1353bbe56c7d7e8f8da1c5f73e36b6d7c8d8dafddf9da1a5f53e36b697ccdced7d0f8da195f33e36b657c8d8caf8df13531be16c6d7c0f8da175ff3e26b75bed6c5d7b8f8da165fa3f3352dbe96c5d7b0f8da9caf5df1352bbe56c5d7a8f8da145f93e26b517c4dced7a0f8da135f73e26b4d7c8d89af2df13525be16e76b497c0d89af1df13523be56c4d788f8da105f83f33521be16c4d780f8da0f5fdbfa9a0f5febe16b6fbea6f5b5acaff1f0b51dbea6c3d772f81a0e5f73f3b51bbe66c3d76af81a0d5f9be16b327c2d86afc1f0b517bee6c2d70cf0b516bec6c2d756f89a0a5f6bf3b514be86c2d70af0b513be66c2d74af81a095f63f335027c6d84af89f0b5355f0be16b207ced83afa9f90fcbd7d2fcf7c0d73cf89ad5d77a5f43bf76fe27c1d778ff91f99af9df99af95ff05e06b555fdb7d8dea6b535f23bf26f5b5a8ff3af89aee9374f0b5dc7f545f7bfadaf835a7afe1beb6e46b03f89aed6b66be96f4b50cbe56fb1a065f6be06b02f81a035fbbe06b4abe66c1d790be56c1d716f81a055f53e06b137c2d81af357dede86b65be0680af49f035a3af05e06b455f23f335fbb5315fa37d4dccd7665f0bf3b5245f03f335245ffbf2b5235f8be06b087c8de96b077ccdcbd788be06c1d78c7cadcbd70cf81a97af15f9da96af11f99a96af0d7d2dcbd70af8daed6b425fc3f235d9d71ef8da90af5df99a90af39f0b5a0af59f95aec6b55be06f4b5a5affd7c8dcad77cbe36e56bb0af49f9daeb6b51bee6fa1a94af895f7bf2b5f06b4ebe067eadc9d7beaf31f95afd9ad2d7fea33c7fd4c51fe1f9232efe288e3fdae28f0ef04774fe088e3fd2e28fdef8a32cfec88d3fc2e28fdaf8a3397fc4c61f5df14777fec88a3f5ae38faaf82335fe888a3f4ae38fa6f8233b7f24c51fa1f14751fcd1197f24e78fccf82328fea88c3f7ae28fc8f82327fe688c3f6ae28fc4f82326fe288c3f5ae28fc0f82325fee88b3f8af3475efc51127f54e78f90f8a2355f14c217a5f922f38b3cf8a2f28b3af8a2aa2fe2e08b765fb4c117517d91065f34f545585f447e119a2f92faa2ab2f8afa22ab2f82faa2de17dd2f4abf48f745e817e5bee8fca2a72f3af345e317f1bec8e98bc47c51931f8e2f6ae0a7fa22061ec4e28b14785a1e4f0be4691d3c0d90a771f0b4043c0deb697f3c0dcdd3fc781a1c4fa3e3691b3c6d8ea769f034399ec6c6d3f23cedced3f03cedea69683ccdea69673ccd8ba799f1b43a4f2be369533c8dced37a4fd3e269e9d3b2781afa342c9e763e6dced38a785a134f3bf334269ec67bda124f1be2694a3c0dced3e23c4deb69423c2deb69413c8d87a701f1b41d9ef6c3d37478dad6d372789a0f4fc3e1693d3ccdcdd3de3ced85a7ddf034179e66c3d30cf0b41a9ed6c2d368781a0b4f9be1692b3c4d86a7a9f0b4189ed6e669303c8d004f4be169233c0d85a789f0b4023c6dcdd34e785a084f33e169203cad84a77df034129ea6e6696c9e16f534f369504f2b9f769f56f534ddd3764fcb3d8dea694f4f9b7adaf834f2694e4f937a5a054fc33d6d82a799795a99a761f0b4003ced82a771795a98a76d791a98a76979da97a765795a044fbb3d8de969589ee6e569529ef6c0d3a23cedcad3a03ccd81a73d799a95a739795a95a73579dad2d3983c8dcad3949e36e5690b3c6dc9d314789aed69093c2de969474fab3d0d004f6be069464f63e069454f53f234fb34a4a715795a92a711791a92a70d3dedc8d30a781a024f137ada014f933d8de869afa70d799aeb69429e263e2de869e1d3624f039f06f4b4ef693f4fab4ff379da4f83fd6ccfcf06f999203f0be46780fc2c013ffbe3677efcac8f9ff1f1b33d7ea6c7cff2f8191e3f43c0cff4fcec8e9fd9f1b33a7e46c7cfe6f8991c3fcbf3333c3f8be36707f8191c3f7be3676efcac8d9fb1f1b33b3f5be3676afc2c8d9fd9f9191a3f3be36766fcac8c9f91f1b3317e26c6cfc2f819183ffbe2675efcaccecfbaf819173fdbe267747ea6c5cfb2f819163f9bf3b32b7e66c5cfaaf819153f9be26752fc2c8a9fc9f919143f7be2674efcac899f31f1b3257ea6c4cfe2fc2c899f21f1b3237e66c4cf8af819113f1be267707e26c4cf82f819103ffbe1675b3ff3e1673dfceccdcfb47e96f5331e7eb6c3cf74f8590e3fc3e1676efe357e66c3cf0cf0b3167ec6c2cf56f8990a3f6bf3b3147e86c2cf0af0b3137e66c2cf4af819093f63f33302fc6c849f89f0b3353f0be16720fcec839fa9f9599a9f79f0b30e7ec6c1cf36f899063fc3fa199a9f5dfdccea67bd9fa53f437f76feeccccf783f337f56feacea67bb9f51fd6cea67e4cfa47e16f533a89fdd9fe97e96fbd9d3cfc69f39fd0cf7b301fccccccf32f819063f13c0cf2ef899053fabe06714fc6c829f35fdaccccf24f859007e46e667637e26e667617e06e6675f7e16c1cf987ee6e56710fcaccbcfb8fc6ccbcfb4fc2ccbcf6e3fc3f2b3077e76e5670efccccacfaafc6ce967547e36e567527e16e567507ef6e4674e7ed6e4674c7ea6f4b3253fb3fd2ce967b59f35f033067ea6e467483f5be0670afc2c819f1dfd0c003f33fa59d1cfeccf683f9bfd2cc9cf90fcecc8cf10f8d9013f23fa99919f19f0b3223f23f2b3a19f15f033a19fc97e36e467427e16f4b3d8cf807ef6f3339f9fc17ef6fa99eb67e2cfc29f813ffb7e56657b1e09142f1be4913cf132411e89132f4bc02359e2657f3c12255ee6c72389f3b23e1e49122fe3e39120f1b23d1ec9112fd3e39118f1b23c1e49112fc3e39110f132043c92215ea6e791c079d91d8f448897d9f1488278591d8f048897d1f1487e78d91c8f64eb65723c121f5e96e791f4f0323c8fe4cdcbe278245a2f3bc023c97a191c8f848797bdf1487678991b8f448797b5f1487278191b8f048797dd79246e5eb6c623b9e1656a3c121b5e96c623a9e165761e090d2f43e391ccf0b2331e890c2f33e391c4f0b2321e090c2f23e391bcf0b2311e890b2f13e39118e065613c92165e06c62361e1655f3c92155ee6c52351e165751e499b1f12e487f6f8a1407e488f1f02e487f2f8a104fc101e3ff4c70f21e087fcf8213dbf05c50fddf15b4ffc901dbfe5c40fd5f15b4dfc101dbfc5c40fcdf15b4bfc901cbfa5c40fe5f9ad383f84e7b792f8a1387e0b891f3ac06f1df14370fc96113ff4c66f15f1436efc16113fd4c66f0df1436cfc169c1fbaf35b42fcd01abf15c40fa9f15b40fc501abff5c30fd9f9adad1f42e3b77cf8a1337eab871f32e3b7defc5019bfa5f5436404e428954b82822a6351acfbc546f2c632b6013b9e28b98bb2710173d352c6de74cc95664e026b739a0295f69cee485af1d0dcd4a6bb17352d8a75a9ac8532cf5b5e08acee5e742e4d5cc070d9e2454bd38d4cd304649aca8c21d3c40582264e4af80327a114a12671849a04f1bb166af246071b9ac4d064059c182e60705bb858c0d4e5829b0412dc705c9a2ec8c2054c9609c66c69ba8d01d3e5499426314c4d9c3489611273e30266cc982c4d28882ad3dc3dc92d29b9e395d19da3ae1cd3323735adc674dc727958e92d4d31ba6b9a125c8d12340d299d709a4a2d8182326bb71c331c1df937c1950d4d7a7b69399e6394d59566cef24c735781cf8f0d3d2fb9cb599b8e5d7c7ed0f1693cc72aa95c799fec69429550763792b9a60bcc58955758e3eebc56e63d6bd3ae22f910f83c6aad6a71a5f103bd851ae8e16bef92dc9123d416a1da0c3d6d299a8be62e2de16e3a5ef24c851ad06d8b106a60cabf1b2f2a8450032e2106e8b04bf6cd45761d8418a892a2b949e3d91b8bec6ebca81d25e8dd6c390a29094428844348c99b5f490deb52210929497f9b8e16cd2da1fe7321243c8490e620c179bb64d3d14cb12e550942930b2db003d294cdf36a7077baf1eeac995a28520a2d2f6f8c29a664baa1a72d47c516c5e624297775662e29092b25cf9157c30a24861da1191e2105e8f86d3993444bbbf495a3ab8d990a5c4b481e1469d38bba16b04595e67975abcc32d6863ef5a472e57866716515307b7016e651047b8d41b1caf1eacc32820ae506a1a33925b92b490a9638e2d9aa17b70cfe85a472478e67da934a6d95dd489e6969daa7aade9993427b3c7b75668933d392c4e9ca9b43afee0ac212a8c5da9555e768af95f934daabbb4c57678ac9b2e5926793d595e3d2d25355efd45277f81d393aa5bd2aa76b5374dc5da86bb5c0bdc23252839eb6d34cc7f3a6a49051ecb042112a3242c8e21942885686100d8373423334f7bc5050bd277b77a6d495dded482828180b42490299cc8f114ab2c1ed2b849094f14e6c4f6c4a4968ae541f4e5657925a982a14a75c7da05ed9ea489b6df7ecedc8114a4a08013d0b2100467560a28510489b582b96b40e58b14a180821d0f4606e6198b470d922011708b83489611242e081289751248a4bc9272104860821f0539a244aeec65c05e8984129748013b39c22a3e16b932b13ff080b1179c99517452f6ecaefc14246e294972a373e55252d392a03254fc2420604b2546ecce12e79a61b08192082ae894d8a4d29292dc973b44a2a7b47fde3420608f5aac8a069daf5a046344c15d954a6cc695e2d52b9dbb4237365cfd4824e706e3175bd32bcaad1d6ca5839cd2ebbdda865376a595afad19126054b4b9787c3fd2c2de1d0abc39557a723a570246fc4f1d0a525a8dd45af3469c2e434cf134d8a831ad1aa2af2a217c59d66eeeca1e33dd3265798dc1c53ed5ae1d0b47762e5c63367565d9da9eba157ac2c2d2d2d5d21c3e3ddcca6a5a5238b8e763c7b372be3d91bab7216e82edac39da9d20981776cbafb648540373c9e10e864130291de86eacef14ae8d3938435ee9abe36e76875429fd44de85312fa8484aa1c5bd93bad99925728f964ee9eecc8ab9212aa3ca16adf7677a4d495157a4eefccd91435a5ec956a125a0a4d491b559216259f4829f3e459ac1d19a191dea6b3a6983f7e9b35c5c0f0385d79d13d4eafc3a5b9b1bc7b944e2fbaa7e2aececc5d79c2e92edabbe205379e23ef8a6ebc52371382097623ce8cc2e906810952c682d880c31a7982540962c4e6644a5d399123af762f9475e291a91394696b4ebd34373ad97ba1ecbd50b8dd48a6e7bd5077772fd4946ee491e995db85e942e14a9344d18c5581e0d28b06e2051708d10f089e07240e3ae200693389bb56e3dd01a2c3a5172dcd275247e200819509a822013c748c45b12ed5954a13408634a76c9900a23f49f4eaf45c5d317fcc59579a4f162bf7c7ed0f3536ddfd83cc1f763ff0942418397ec0b01fbc1f75a4ae1c737e602129f043b6ad0f38ce5bee7a5625932dc73e62f8f3ece5fa70fad13e76631f5bcb8717ff960f377c38f181b4071ede1e70505203b21cd3f25aeda1e6df5d9d5965967b58b0c79472823dec65f4e0a119abf478f33c3dd854dd94d483cc5fa5e8958a22a56ed4a8c7d17f93959fa5a526db74a5c9ca95262b4d2898e04a53992d78b4190f293c94fc40801c04b049cf8bf27a0870e22140490f1e8fabba2989c3daf178e38d1ac9a019c3d4a6f4aed4d09f262bb52b5703b2cc93b9cb82660c73abba29132ae60e366f43cf0b25758797ff0ea43bde76da01078a4cb283cd6f2393ece0d9ecf0f236546787fd56879eab01945932d551e7a43ade7c1dbcb40ea4b75deaf019259796aee4c8744ccb5874b44b4b4d56ae4860257729a0436adc3d717460394d281c1d45dbcc38a5e798a2e7e55da1c0d6be98257ab16473c030c794dfc6ebf5ec69a2a8b99b430e3972e8de769ae7796d4a5a28d23a518d71b2f7c9ee76e45595bb8b2a49d4ca1194878e45478bb5bb3cf49ea8595a5d79b190ac1da34ab2664b338f0f792c70725282f584a4440a1da590f210e129c3e269633b4da8fb646b58bb73bce87865af54131e342819068f05afbba75946917894de824716471c738a74978cc3cd6fc72a320e0bb6a1564e289a31cc68ef932dc7dcd52d6f1579f270ba9d89bbb2b474e50a939503946133e3748038bfcb1d0025750718c0799faacefb5475c35c29c713829aada5230ebd38f4ea76668adeab5ba623ee4a5ade2a33ccd252d39559c201c24551f49e3add8d0a1d9ba8d031bd0207ecbc56e67db2e7b5baa52dc7dc1b70b6e9ca1b7575cbb247858ea954d31b1650a1e8d51b532ef306d16b71c30fdd75038e8eb417ed8db9fb64af046e8cd60da76d3a12ca0da41f7924046de041c7d4ea4ad3963da88bf66e62a8d0b1894d1b16fc29d4886b43e9db80b171870d27c89377e5568d62ae5c21b3b4b4db8d5ad8b8ba62f690c159dd9377def3a6a695ec4e9d6db23b46dce18d6695bddd2163d3dda83b760d3d9be9b55a034e39ae81e6ea96e71a646c6b10a971470d38662e77513578dbca939452c3b4522335ad72b734eec0d03349ab8b8e526990f93464a81d3f7e3b739aecb8517379bc9e1d0bec9862d0f023d7d39566799a69131a51251a6f7e4b810c8d363f1a64de8692bab41c53b424d120dade1daf8a44533457cc1975b6e94e130a6a1c9bce70f36942a5260567a849c9f1caa267387d46917f826566c8d9c61befe9644fd33af59cac5454cf3ca5d29a0ebd52694a5a33b558bbb434c3cd5865060f2d2f6aa9c62a0bb5bbe82dcdf0623383e85a61a5659461ef4d4d2b1da9b365bcf96f8ebc4a6fd5886a2943cd5778e6c90b03754f9e7992d9ed462da96975e58a143a7a4147a928509a782183cd9361010e2b57dea8f3565d32ec8fe107ce4caf559db237c61b5c8a8e5063a8b199711ac38214257754b971f734c6946d669cc6808981c766c6e98a21679c18302c062fbd6290494d2b31ec890b43cf61c4c14ac9d39c1aab7061bc80628d65da33cbb397a2176bc41a775777539302acdd6e6cc2daedc65457dedd9892bc317705bda94981929b9a14d4aa7a3a0990ac98565aac4a3367052d4df20a55ce04739ae449e63449acb1bca949c14d4dab8b35a6374aa7c3e96e3ade13775e2b73b7334fdd395e8d5fd4d9a15574f7f6059a14cd2ded8e4ccb9e3daf9569d1ddce3c6d3a4a9155d051eaf2ca7ce1f4dbaeae982fa66cf3c28f4bd28b395eb8d9a6f38277f69ece9e69a14c2f6abab207656f3a8eb7022f7cfe002cab13c79696977765ee2c4a9a294aeacacbabd3c65647ea6d5726bac079eb60d946a6ce10345757a6a3c54a4d6b4d3157986c0dcdd5954cbb113579726c669c70d7caacea02863477a7bae07541a68b056c669c76e3f9a42bcd272ef094970b39e3dde56cc9050c5c7021bb6d71c7764f93cc163098656a96e416166c92a999da11edd9bb856843cb3145d39e69cdd2de5c49a2e598a353a7ecd17193a274d0d061fa2af29e3cdc4dcdb2ec5d5182145592512529858e5e76bb518b16706cbabbd382b716582e7b5157b7d442d6cbdd5b1665603da9f95b16166c3b4ddb248b2d4a62ed76a34d47292ce660c1665b182c2cb0614164922569e7e0d96695dcd3ac42b258b7dced462d73dcbc59dee690d986355e45912896ad5953cc9c279b2e50da2be6bc83bae778450736ddc53aafee3475e7bdb24d68c6aa2b5752dc7dc21aab76bb31875ef2347156d4b1c2cd5f2bd0d8cc38e17637578e392bb63c139c6e674aa1f7944a7164baeb55e1d0f14a5a9226ef56914de595baba72433386b13574379e661572be8a16bee8956aaa4256850f1565ac2bcd38954ce8d2921306f6a2bd1d2fce98d2d4622f0fab890a18ae06e4694aa5bd5b39011568dec2a4a59c800a324f852d7b26d46952f114713eaa24edd2146eb44cd1fb1b758e3b281307b51ba5ee13ae34a7402a4d9c4e374a9100148a47e274baf16a409619d3710b9a318c14bcde9559dadd8ebc9509238597ff16851f6fb351c8d956c1b2289cb695a6d55d747cb2226f2e0aa5ab2b470e9c74946a92e341d984ca9123cbf57450ccf9b4c7b3b66b236dad84a2cd434146ea0685ec893a54a77995ded262e5ca2e4d4fa8f974a47a828c549313816ccbe5cc9d13563881c6a633c9f3f2ecd528955e141d79161da5cc1a4a4aa566796d95d38412237342698b2e70a5d226cab0a119cdf4a24d34e185ca5896aaec496999c096a4454b530c136f666282f7dbccf36a504ec0c4941d395a8dbf99654bd4f96d76b4e8b51aefae5c02865172090bce8b92d69aa9bd2d01fb6d76893d479bdea89b1261d8466b4daa312d93dea8734c71baab049bd3ab8494cd8c93125374650fa7c4d09787d554e6f2b0525c5449528d296a45a6b95177a9c614c5e1ee8e774f5c8a8e3bddeda1288993ca993c2ee988bb1aa5d2734c519c54cee45db467a6f79e5055e609158768ac279b5ef496049eb424ab9298a3bb49b8297b5c962541e6bce9b82391acaebc3cb4872621b329b9271412736c4a4e93b41aa5ee134a56bdb1e92e55cedc21c1c6a6bb57a354bab40c092cbf9922591d04cb8ea0e38fd0417604191e56aa2b491b758ed6a62bcddc4553f424a18e50b2e98c2883d4dd3367c49b272378a3ee9e668aded388296fbb55266ac4ab8838bf0d45cd9d4d7ba62dc71a177b65eeee934d7b4fa82975555584d3d3d3d5d59c9c7a284adadd989a4d4560b15974bc8ab24d097a2f94b545d92e92cede2a93883affba9de945b733a588702315454a3d514084d3aea78bb222024977abc672b6adbce81072de8d57e3a943c93345efd93b43ee8640a3b3bb914ccbdbd399a9bd32774378799b5317346318278b5e0dee3da1c40c4194744f1ed639923912ea96370b1c3a763b92eacaa6e5adc21a794b9a745776a6f974ef0985bbbae5d252538a5e1d1c3436334e650f0e1938f6ef09a1271daf0e27849c6d669c74371d73f7e45d1d4e8836bf1b71bc7ba97042383de1d28b0a3165218cd8cc389d174a021d93046869a2e33da97226181d99963db36a2caf06e609359e291a2e68d4b883baf7840a62852d8a558e55d6349baea04b4b4d56d0985970e8b81b7341d877bb11170410655891e968459e5787434738239b07c2492a978e4fb89b3b4d281910b2b7ed9e4814357955a4451748496ba2b676adc81dd6fdf2831edb0f715012eb5259534c9b74cc913b5e4f27c10fb8b76d61b2a7998ea61814eb7e595a6afa41e907d858974ab6c564b79a7826262d656eb76a2cb7d89c84b5dbb2e0710bd396d257f572a60ecd1846cf9bd19116ad99525718589b0f704af26a40a23ea8b15c7cc0b20fd6f670a724abc61ee2dc439bff1ea47ac0921b79680f4466ca23cf1c7a7577d99b377f14f9844a60d172bc55b68666acb2661a46cb1ba9375eaa4e136a37565994b46f885e473269e9d19ab3560d57031225ab483068c630537abbab33ab463157ce4b06453386595a6ab2b52ca9bfb62c4be99f073f78908366acc2a51795f1a0e6bf5563c983053cd81df0d8cc3835b1c2ed10c7896c0735bf831728d3ee80f450a6ddc175495ad4be91e940062db1c65d0d037bb7e830c5f6457b1625edad1a7370f36fa14c8bea6e0e6afe1cb0d852d29aa92d6f65c2e44084839effd1a2a3940c873a29da1ba5d05c8b431bf4bc696e444b724c4b3327c3c182573225a94bd304481607a42b53579257162b2577e4989e66952d49bbdb91296a51b209878a75a9ac5491e34e8b1b375791e30e4d54394ae5dc7cf924d3a5a5a6ddd8744b725732e9aeaeec9959a4d0d14b79774d52e828659ee7454da892c9842a49dc0d6f78637993dd8066b7eb41a1e8cde57a77c7ab3273379091b236a9346d39467603d2df60cb9b0d789caececc2d39c96c60737557e66e27b34129eaecf16c5449dea79bbba735cfab415289924d35e8b1f7c99aa9ddedc6dcc9b3e74d772494ac8637db6e9599b3e9ae37425d5d526996572abd3a3247f6cad4b0a6062cb9cb432d949965190d07a0e100321ab66c143859a77b9a5a76bb314772b15da934379e299a6bcdb40bd6fdf2244aaf89931e8a75a99e7a28d58975bf605daa2b58f78bceccd1300547758e5534a0376ae4e178e395c2a517c5f30c716c669c505cda3367a03ac7aa7bcec03bbd689265337891cd706433e3848684ba270fb7db91545c9a78668ae64ab344cf5bd5434b3397963d530bd495004dcb4be6c674dc32a6a36e3cb95cc1e976a60c4e9bc9e0c420036bbbb971c7b354a6999aba1e6a6f32c0de8686dcf1783dd4a2a46e6762a5572a979257a84dd1de943593c1794d5d0fc520037ba59a6260c39aba5e197ba5d2f3eaca5be6ea96579aac408d01634a5d5dd9ed462d57a248a8d2d462d1d13659b182c6ccb2db8db918d06cea7a680c5e70ba5bf6906c669cd01167ea7a3188a717dd92a2378ad449a163dae3a5bd314b4b52e878c5cb7975e395d299516a62a68913345757c250ff3a2fb8d95ea95447ca5e50732b13e685ab23712f28fd6979adb83059e6421eba6b659e3cde68cf1b559a3b6b9657aa09eb52b9d0c53a261d8973a18daec9050bbeba9509937493b900fb1f6f8eb43a6f197b9319608ecc0068beca3ca1d0dd6eb4ba51cadaf22633404ada2bd5d4c29db729d1ddf34a5d59d486e622595dceb4666a7bb61cedad0536ffe5a8d3dd5af0f2a3b216600f679b85b2297a7b67eec98205a3a3bd52a98c0598998e56b6421d34255128f34a35adc0e6d1052ebabbf696e6ad3257208375bfec5690e9aeeede1c9a5b359656853b3a264bdaf2265341cd8f64ce44d1b134497b5e9d8eb4b7326154989293b5b9f393572a75335a33c5ba54e4d9d446aaea34a1cecb3b6f7935c6deca84c12ac7b4419242cd34053ffeaa5e158966acb2572a45754c231a4696421ca8dd45532548165de096829ac7ba5f6c7965965465cf96e54d9602965b993036a9344b190a783e1da5ae6e494691e71814dcfcf7eca53da892b4e708859256860216ac4b950465daa8d29e26140a30128a3caf95cd9152bcf18c32531ed6a9a50065dcf2cab4684a628d55b702b4f977bb1e9445edd52ded6875bad19ae94d568029a3e8dd5994b4672f5745774f7294b2f6a987da2bd5243bc18f5f67478b8e57d65ea926d909a88ec9deca84b1e5b522a3ec954ad11425d15ccb23a5d07b5a7ba59aa04cf3bca2631ad12aac4b85bbd264654cc72d58f78b4e77d3e94632ddf5c24099e6c9c39db7bc327158970a7775cbaab1bca999e2b02e9509306c33e36482547a775767c294b41ccf28137425946133e354029cff9e647acf12d06c33e37473e5589ed7ca8cc28da415ae042c633de14a906d33e384bb4f3833c55dd4e499278f843b235a8533539c4e3792f0669b1927b434491425abcecbc3a1b84b655add534602d436334ea549ea70522979851b71ba7b9ab89b8ef7cc2d2d396160ef2d73a5c9ca6976217968ae8e29775b5a6ac2ba54b81cb97beaf17057b764c286061190d6ec4240e3a8923cd332385e9a1b7955a696a5a5264e7a5770e7e5a119ab4e3463d5152b68c6aa8b66ac32cba62a10c09c978c0955325ddd7846f1269020454730644a964c1a90bbb124bbe448b424cf140d17ac1d8f77bbe828755e32e8d2523542a6a64d9abbe769e66c6a96a8b550a4d5dd34777968ae45497ba59a6c1527dc69e29c74570a254b12ca9e57b7237b59d0d386aa49038425537354258d11a7e82d71e60985cb5d1eba2477add2c050436852995421559479a0c57953125735de33451db0627564159a2b1d131913aa643acd74d4956398dd785ede98dd58759a62b04632a618f45ef0ebaed579d12bc1bd67971c4a562d2da1e5a532d3a52514eda5635ae6e6ca713766414fdb6ee4608e6d36db02e9ddd5d2f19e513635c5581b6a77e3b8ebe576632eaa2475656f6977adee0eb724e340c6c10f4ba1a314071bfce9694aa1d634d3a58b9ed7ea9eb664424f9b143a4aa1a76dc9122974942a7b4b4be969f2783d1477abc6136a69e9569169d93b3700b341041b44f99dec92934d476b7537e5f5ced3d462668aad32a587018a3592b9170a87628d3c141d775a5074dce52ab8d2a0008f15a2c1f357a0a9e08a897763c586779e5ca8c6fce6a512a4653d3bcb7a612ceb71b1ac37e77fb97ea72b49aad224531235793a3377b74495a44e3792892ac91d399e4d3bf3a90aab0c981fb64434058842a11e362573e48e87e68663844f504d854fdc1e740dbafef0e33be303e36f8c8f8baf85f0a166f893e12f854fcd07e57bd2c007d632b47cada281ab0da71f4d92a24a5267e6ca9b34a6a34e8acbcd91bb3255e6d905eb6cfaa3c29742472f57ace42e0550a6792e2d5df24c713c744c475d145a958eb8b4bca8179c98264e7a56260f8766ac3af32271633a6e912a99b6944c62bc40b15a5a1ad3718beea628899e97cc147cd131fd633a6ed18dd78b6ebc5254e75875de74bc6ae2a4575e993a9ceea2e8cd9927efcad5995a28b0529a24eeea96bcaad34bda1bb31bd3d2d4803c4da92b77022bb94b014e778e57bcded252ee5a2d2de95214c743c774d4e998d2f2923c3277cf12eb9e660e6742954cbb9da9a586353853e5669d99c35d9d592e79eaa14d65cec05345e45e51a2bb513af27cba2159c95d0a501c8ade33aa2471b7777b67703a2974f4b2b4a41baf142e77a60a77a64a773520d1f38aade998c673246325aa24cda8b467e27855a7148e5785e355f570bb3135d3264e7ab828b40a071955ec976019559abf082563cb7bafd2fb642f3ade335792166b979aa55965a76220806c0a097a8e111306cc97ff3136dd4d53b2aacaccd5086c54b9f1c92cc79c4d47a9d48e68399ea92d2fcfb4a618d702cb489b9ae669d14fea8d9267ab4c0ace9f2e50a2d7d459dd7803a3f4a8548e4d27aa1c059942ce888800200000400063130020382c180dc7031299a4882975ed1480057ac85482489608e52488510a41440c21440040004000406436144be28c330e118f3a245f5e6151ef36d774712cd83effcea26d6662e9229cb4d82d56f330e484e5313085b38b82a2d37e641320cb8f88d8b77cdfd36260344d77a2fa313a4496274c6efd0d32840e09e567b8d7a09f99729b353610337448296a637893da1c74d7274ba2aba61c04c2b34d8b7534825c43ea18d66cbe1cc290327514a99d476f7d1ebd3e4755962ff65c1fa7a15b994df949f136160ac9d3bf5d46e00a98907dc1faf919fe299a1227919cd7fe1726c07707eeb15f1cb586354191c337d3120d3d1c695eca1f0f32a2a24c988c1f2f9d69e5c4bcebe5449a4ed7018f680d0b422d0a970f28682755448e57349bdab7fc419c69c03da34b05135afe47531002ba4f55051cbc43284fcee0d57935e4575a2635f2c0f01559e32e201305ea4f203274cbfe93867d3ab49566a610e0bef5e0edd493cd01fbf53da924909d3bf0ec168b6d4db9126b618dd76109966e4e33c78ad56a326f91b48710de1d303fc72d35082f1bf182caf91c50f1c42450242a2f462602d637ec814b625d9bcba9a483299ea76bbb083cbcf37415d1018291336ef224dcddb99b8f3f74068bf07a44faa061d6dde1fdaaeb4274171e1d27f391954d4832df338f4a940312b5d32003e694732fa07022b6de6b0cf5d5dd64dad53476edde98e37298fc185a8810e87a2cba0bbefc93dd2f161b5fafc70933a20c7b00c88d5efcb4dfd71725cb441f6c99e69816d76296f0d031e7f8816e19c2b315c7bff6012c232fd818363f5e65e0b3409bb3ef6fcc080dad47485cd55aba52d1cfc59fb81bbd3da088b970ea673c4f79bab426e28aebd1a0f044a5898ad0b3ae7b3f78af43fe1264b580f2ff716627e171f6135a89a175a14acec80d6d3920cf853dec9d8c2435850c20e13132738f10b75beca7bd1a0aa7dbd961ba324d47c97c22733558084f9c16293d9dc837b27a3f3580df2e40e4070495a4eb6c425214d6432cab643111eeb9560651cfde10ed1f3bebf666398ba2ac41b5329ca09267a577d7c4ad423e1c19b2bc71094c4a930773d048fa17a5066507f2133f7d99420fc68dc3dd427a0e0dea7cdca835fab44b3778c972069b17ac5d5dc17ff9cf8a9094f4794beb9a3714fea4b3a7222ede645edd60e5580d8e3693237d167bb68196ad9dfa3a0ed98a9d702a5ce9bddd1c7a0de7f346c6f72cdfdf06649bfa784b2c4a3852f8289107ca97fabd9ecb15991f3f336f1a7a3eddc85a6b63c74b7dd5e6503c6bbc830cd5cf1e5c0135b3b3378df8f74cf34f124523f1b95ed4dc456e77c66575b95e08b1e717a4c01f3b2220d8ea6bcbea436d363d3bb056e0e71c0f1fd36ed38daed5f9e936beeaa4e1da05cb4309f49fba678260fd0f2dfbfd1cdd4154d36e84b815819340b772b2cf354cd601f0cce727948e3a1783749986983c455b13117fee70b3245a9d0b858fcce3bff5cd620602f417dcfbd0a3499f29ac7a3c1b1379ff778e8e5ed3d989d924f94aef934f7fc2d43d0110c3f9053b7e08c141cfd12d1a147b2433947006fa83a4093d1ff525ba54c3965f19788820fcbf74178d7392089ee68350db0b8034c9ad1db95aff1175e546d86ec9ed3fe7312c98b8ec79c9c51abcfe556893883dadffe00dc3a78c31562607040c48c1b5fd3b850900973e11e32599ce45d1d834e58cb321fddabbcea5d810b351873e6bb6e04dc832f93b4eb44dcd7ed45676921a041b68e6106dbbd30c9c60cb49a9c159fb16c25de5e192d76788aa19c92d5eab73dcf0134efd89e61a4aa1b71676b4d27b91e7caca679d95f1934b4fe8b776bdadfd0ca6e8d501b0d83ddbf7ea3c5b391677b63e3ff87e2a9b811347da1835c5793c11da1a6c25c9d1f4b1325df4080c772e59f5b8ec6cc97550d71e31ebb95f4a2d60a096cc1505651b59cd86eca0bf24c98c91a9bd4437f954ac3e4c1cafacaea14e6c93042f2194f6af748a14fe559de650b14dd6943389b24f37efed72522c9c2a2d1309e14a23b09881504e313de58e76c736d7f08e3c098bdff9179e9dc69a07a3cc7fa8a1f8dc9d5043eddc5e5043ae4f9a19be1e883fa6872093d54b7f620b9b130ca9cc894445e2e40dcab402eb3d693bc2b198f3fb92cdcb1f249e5a3737ef3ea564d271ecf3e0fbdd75c8f005d37c79b358f44cc4c2fc6e8fa817ae02421009591cf1ea4ef53759fdfb6cfed4cb0f0a4c130152f6b8cb267ee012143ee9626dc066cec3bd52a1375d86a4d7f30ea846d48fc5e3e97d29748a441bfccb322505ecff24492d31e6bd31a261e82ff198620d74c047c0745f096e3956bf11b394974bd915b0eb6344e28a57a665f94ae42efe1645cac8e608b83a4931c9a187c6da94010617107115aff716b0287259b1c57b52360d44c45b1aa2ed8af8448b741c01ef1fb5563b82bd1e8972a92f050818dddec0496fa0ab6613cf245c45a4b043c76c1eba709d4070bedb10a3f709627616a9fc849e9c4dc7e01fdc2245e5616dbf86631490a31eee01a4865dacd341588fbc3aeb6a0c70531179c0f936c8d1c06e214178c4c33364539f895b787f3811ea4ad009c1f35d32f193bb9a534291954c9e0f33485a2de1403504910ae45c16d94b501afd4949c8484cd8239022f4cabe48872448b3c34190a094cb9fb38672d30f850a563cbd246dd7d8e859a7acfedb5cd3f2647fab52a1b07d1a025868e53061f824cde3a62e2a9c6fdceb09fa9a1594055c5dfa10640033d6a869a080532cc3c2477ee7e7487b122161ec14e9c21f2db42f08364c8948c564b7a0f6522a4948de4441449a120a04b0bdf907c661e0f9e0d35408239f67cb675891cd1c808c6a972727aac7112b77cf052089ce83ec1ee134b31a4191356fb47b31fc8da6e605f9896506ee844c78dc8ec38cdc5623b18b5afb0e89a9537ec33d86349a13806e56484e4e3d3c121da64f9441dff7fa32b748b2f7c1b0c2b07d0e3c2595ca2b1976d8908161eeddb7184e7c93f076a84a73f006ff1df969dae5d3c8dc9de9d247568fd92b644f4b97b5c5cac258441dbf3a2434c70bf89e72742bf289a9dd2c8895c1de7a2918a383f89c2725c0d082c7a31fb0f9022f907e61b264e71c941e0244269e9c1d517970e9c0a050219c1fb6237bb51413146d74c7af21c16ceb01f07079ad331b3dbefe76968f168cd7b33f5b4933bc5233a5b307e5aa819ab69e09bdfc23a37305b92f82f16fedf0cf5e79e83e12bf4b59b16eb5fc475f5a6978d4467b6e5222f06ad33846c501f596310df9ee69f5d7f36b741d6986a846c792a03cdac21e09e506218524324a8ccd107a1669e0116dbc967a554e8db8f963208d4e64e9a73bf9809df834dbe3da991fdebe18f1974603992a1df108ecba85b0ee6d813ed9b479d92e518e18f43bbc4dcde98b0e95676396f9714be460671670c547cd18b168d087cdd3e53421664a666d4fa77317d537f914a7019509ec307a28de2e38d9e4beae7425f98c7eef8a9bacd7c499bc7e870b85ade72604e4b78ab514787c208e717e2bdd88595910b07182349ac99566ec2a187b8a8f35dcfb318db3aea4b2b19625956a2ed26512f4180f13cb0a2d21597e192b89c8248a5d1aae38050f5225d1894f70da8fe5476574012f8421b32a4826d7487f209e6406c0dbb60b38e619694074a9027acb67e2701ddc6fbd156bcf7d039a46598e431037c7b67710311c3f64ea680ee684f9836edf14aa54adb58fdfb2d2f05a0f0970fe9a768ebad4eec276a856f2a05b43e0d239e979ddb338ea0f3f385ba6aa8ff006827ae64ed0d919bdd0d6874af964b82a9b468cabca64f71fd5c41efb90cfa717bc149d041c3a97c5651586676f3d87e70da4952a6daf622254a5927aa2addcecacd75e84bdd958836c2644c8b057b2c53ba74425586a620c00919128348454c3fd473530d64b5d0b82b7015e3ab6541147e244f740db4e7dc0fdd8b7826c04e4df88e1f6f95649af0fe7558aa3a66a59167a81c5a4135f15522d0a7899b055b8b70fad621a814c6c6fef8bb30685c74ab9c96b67c61b9b69d4a3212e17372e633a061f926b2b822fce757e9adabaf1a556e70b1f103a232e145eb4dda520d577971d647dc7563648d703a9e13d2a49ea7ee6acea0ef03aa78bd4a9839304916b94ff6eb258b831a60d12e690db9d86c7691b3e32c7670ecf385fcef6f9a3b093541f33dfe68981f69c6c1087e32583c6b89b24cb64dd8ac26463dc7d7a05db93be6ea7408944e9a464f5c73f2313bfc752061be27c4c4560ff3661ecab8257049d6aa96076df1a62648c74cd2569b3999dd797ddd024e2dc08463591b2d5ccd5308574212eade284336f7e0dd5206f755351a2a05f04c181f13db35f47afee4b03e8040448dd0e2d518494902fccde3793e2db74b03ad5401199dab1d6b4a031193ab75801b988ee979df18bea0186dae64fd830e5e4c200b3b0178975ae5f3ab0625b9490fd52df638a06a5879fc00ee06ae79675968ca080cb646a8318f6096aa46020fcfccf69f99e80b0421477d449d750b381ab1593ec37e460adbdb5256c011249a49cddd26a754850734150cf16d7a63d229b986cf4212faeebbbf94851337d07ca3bfcfe2ec6ea57901f73060132a448654ccdf34bf7b8d3fe09db0434cfed701585fb1c92c70dd945746ee947c90bc53ae309d9ccec103d11ea94b4f2c987fd4832e9667131f48a6c38301d4aebd1b4d68d779a3760172d5de4db2fd5ab41da4873415dac81d4c16b7072efd64a2d991ad309c5f76532afc425f446bc0f5ebfb4468ee9cc1494e1ab9d85dc84c2363f6bdf881ad2476e0ff3d12ee374540f36004bb9798f3b5b93ed3a5547b5adb07639b6a8f49996267c728908820b69ebe186b1ba2c6a76083d54ae815744b38a292085297ba5ab43d8d8add39b1687428486aaacc146e7c15ba9a9ad17242353a550be590bf886181944bd5c25b4c3e0ab1680ab7ef0636f01711f0816245a1208e5efb62e0f45b73c3914542ed6b69330406be188becc17f371360413c30889378c64ed3f5ba0066a96c6b17a5a22de291638e2e811e736d4295699fa9e25fc8d733b10bf204d932e86566b2d2bc7566304304f46ff00a37a5ccb89724c47ebf0dce30ffe874089bfb59ce119c06df0e76c763785e788bcde5b9d4822494bacd10a4b38229be09755a8c6c72a059c9804c83acce2e144e8fd87450260f89fa1a2d434f25e9cadd38ddfd6d565861da6310da051f53bb49e1ad53b16c48da265f3cd8487f29cae77d4b18c0ae76e9da5d534e08a2646c300c7dc394fb9dd2ee725cf53d6e0f6cfb8e97d6c40b38b7060efc164ff72dfc516c122d4f06a7345dc0704ba650dc38966b4bd1a6864c20541cb36b6a3f8dd2158275b0b53c7fe5fa5d9f52c779b8422257952c694261cc7b25abf9a0d5a747b31ce79ed8ea201d6f6eddef134119fdd8c340a9580c73ee3e19367233d4b20c6ce16cd4c0a4310a6ec3792a6d0746238c287875471f3f60d913415ce21e572b37c7f528a95c03c0372d7df6e691a947d3f7215a384d320408baa4332de64ab518a3e0e4655913602dc09cdcfc6165093af32108d1e9f3cd333e70a6e2707b187e25fcf6a35781e55d696b224c4756f02355fc50561a3a7c6409d181ed7213c607219a8aa591f924944198b6e005616c8ec1d7e9fd885033ac99c8255742f6c58654264ba3e0e9e415eb9d22e5ad7ca57976442e83432342e5b059f76329a5b655e70c35b5bc3c5e944da377ca1beab2d2e90c3b07c5e2ac0b4de5a2e424c264bfde94482079913d5cb43b90e67b894c14467b69f9a4361e8328e6c3c9b8fb1b77d0331dbc8b31330c1a8809a81381123c7a36592699b9c9996a7eded0738e275b897f8cfa0fe1bad6d7193bca42aa00542950e6df04cd12b26e1f65d6101972b56e1461590b7eb7b57a7e4992c05bbf248443afd05ece7a15dfe23337b74f799b8d14fff34e94b5591de70d7e489c3b620fbcc53c873945ce53f8cc6b1595795c06a44a2c85cd312bf4f5366b493ba6bda65f620988c9a2b6442ce9fd71c941e89402fcb26f284f61ec06edbce13343bc85c5282d7f3f4d8e1fb8e1eb8a926aa349e707b2fefc6b96885c20b3213c6efd4c08be40c91c9355bb7b5054aed011562b3366631a88fed70bae4dc14090cf32c2dc48e2166d0ac139aaff95f71cef07e8886054318574adbb2670dccb230e3b3ccec5cbd99952629e1f32579af1b18d42ff7a535770ddcf8196cba94e5a6473811d94bff3272af62a26d43f20d5146eef8b08692b142bb636de3e940da32e2fe108cb2105332e88800c165f2156e681a6e531f0c2e55d6edbb0400da2cce3e633ffcff3007843518b77a7d396da65d73eca96599ed36e4ff6630ec98ddedb831780d392e64d4a2b865951d714852a9a54fea85ea8fcf34c44ad581364209fa80c0f902d59d5523565feeccee04f75c86aea94f0b766b6a356a37a8128541a1cbd400083ca899c2441e98c2c8645eca776ae5ab2622277259dec52333aca9f4080ae8d24c5bde3292e04a33afbc5e916d1d324ca774afe097349e8bbf73bc07b73d7a772a7bc24d8f0d99839151ca970bdb838e58fd62b6704973a4220920ef384027d6ec6722c8f7643e720fddf9393be0f73cb7f692c0da97f2667a2f1566c9dc2e9749d91949c714fc13b019a15bcbfa707aff0cd33a29c175501f2ecffb24ae32bf80d635d532d656f4f77605011a7c3b576509211b8c2b2bee85a01d164fac6e4b08a4b2751a8b3d5d02e5535e225ff84dcc3a69557ae852ca6720ac15d0f5617c4cf5916d147e83af7891ffb72f426d21d547178cb600cae4f26b2e8d1e04bcef65b0b806bed32e2817cc06a4d9849c5c1ebb66b6d1c18b0358ce034262b39eaf9ecbb9bf00527867930f2d5f77adde1bd39613800faf8712297d4645b520fe5d32abf8326f366139891a3dec35c8fe8658f0184289aec9777674d1182203751a2b61a4847728fe6ae3ec7b052eb9a558102f435b5f9ca9d2b1543bf9cd4c475d6af1ddc24f2c82191f88a14af599058403d97fa94881d929d45c3a8b4052c05ea1bd7232047eedb272fe368242102f1803785df415688d1b8da72b1fa6cffa698d3114b29fae07ee52503931bb6cf2b3e0b66d8a459f2baf76fa6bde41a24d48022da29cce812d15d9da6b8d6173bbcd4bc3e79b5deeb285c40b9da73c507b8d03eed549036414a161e588372bf6dc750923e28632b3d3b8ec9888dfc636d0bffba6b84c6b3d4293993ca041c8bce10976e348fb22bb701c1c9f6cd2a566c52a0800ded2a22214c2946bd429919f0d7715770499c5643cd798c322c52c6362b62722d7828dbe36fe74e211340ca6a354cbee146c60c0a30d68a635961741ed98a4f1cca6532c460e182def3ed9734f57417603469e23c66776e2beb0924152abb5abf5eb0d2da344749091b55bf0edaa47420c23ae904b344ebf69969938b24dfce9dfd352b36901a9860943faec53b62fc9f53294d6cd8e6903acfd9fdae9a0a2615e1161251c35399a7bfe7bd21c721f69a75da62c3d93a203abc19678d99862079658f92873cc0b81f9d41cd74d09192c8b12ccb10c066c30e1ac325d807643757a3e62fab967c3873cd018de9be107afae011a5d8b89252dddf9577e1461de9e8f45eae5b60d87b72c0bba9ea00a997db5af7d9e7e34acce4c0fa98111d5b2970c04a18183271beffad53cac4ccef2902fb22007d2e43be56a0d076499dc36c1955fa35e59a0697e3bc64c51691e82eca1852d671515b3098d9b3f7c2663a035666bd29cc068a6f82dc79083e0a16bb3591754bae32da570c4711bb3c1ae81bcf23bfbcab4430e31e6b5979babc3d0c34d887739ead63447954ef399d32eb1f3c619e47b3c8c35d3d9a52161bdf188f1339a8791b5aa00e0f4c1355b5471816ddb27238623ef9e408933ea27bb2bd0a23bec12f8666f9105421c01a2d16007071b5a4b0d80d050d5356d55cd6490df3756d66ba66edb63ab9ae22b2681b9a895e95b310fbbc251b83fe73bdd04ffd13093424218975ccc6d99a578318008d5fec8b2b6df8a0674880919cee89422edcb98907c2e18d9dd5f928ff1242d51b8386cb02a5f4678bad82306df710963c50a825fd1b4d3c969cbab60cad77e20c43e170fd2359f48c9c551ce461b8e04763359688e7e64ecc71695555f3b63b7b266ebc76780e16773f53b5190432233b63c867602bcab7a00e8c4c4b1b2758ebf0d81b70e96b0f1489de173a7958eb79a2f9a02584aeec931bae15e0f5fdb32f55751eb94a69e2eea385553658d2ef373aa4394bc65efac807eb7650ee6aa5e241b9a9a1e23dbe543f8ed4a603b4c8004774ee6c59115188938f8216dbb265f1a3277cd66be87eedb98679a26d72f635e82bc9f34908423c46c2321a46d83630c9f2392ecfc9fdf12844fdd264b36d7406abcdd6abc7c255230bd86f51d0295e6643e5c6933f24c687f7533222e0e99f8470a3aee20ba2956c0615387e1183133712aa97eeae9483a5631548938ad4ba5aaa6ece103fd35b023ed29ccda42bb9f2053212a148c2b18d55a613ee2f6340f89b368e27f80fd745bd6eb1267674f76fa979930b995dcd68625f54c3e2534118b6663a1248ea58438905b04ded50aef791263879fa13ec2d2426ba11c744c47597127e27e59040639e5324faa3066bd892bc3ba31128b2e0c784f97669d7e5de4e89de42075183038f2a008ad0421caa6f2bdcfbd9c1b30e5dc547a385daeb59efec3dd10b4e974e341faea8b1317f891be8501e7687e5707a69ffd80eb6e368f3397ac426512108ec1aea692c80126fa50d1a2305f585bcceb3000d4039c56dfe67688eb29f8d5194d1ec8e74b7b1c46dca6c3852e926dd89f6675aa6f3e42326f4cbe0bddf6a065d1cb08d3117a6bb23bd1e8d9051b04352206533a63d63fcb3085271a25f09410305a2244d67ee24c924a5d5652532f2b38a2c2202dabe0e00b50c47e3e1fad2bd85dcf871ef3d68bdb365690ad72fb2b139f1e223c3988257b5e04fb78c03ae503444396d3ab05c7f082789e3613265ac73e7e207fbbb933eb90d1decb41d1af0091057471445de95dd4a7c2e05fd48e656ea3ea29dba657c926df71ad8cc82a83d2e7516b5b79e729ef5bf892ff32bff6da6d3fdbcaf20192e3def669274d1cdbfe79183fdb3411fe5b911a34d78fa10071882ac8722d9ba338d2cbcfbd13324003930e66b2147c3ef28db08d4802ec40aae6b42189a010da4ca1d86908cfbe2677c1ac5cc413e47f9cdc796b4d48f309256708d1679bb5beaf7e3fa7a837e6d302164c2cae341ad6bb825412c0535e5f4f84b3000b85bcdf67fa5bd3e64374921adf6662481f20582a486e5863a7b94cec3617560b0103a33e69df0fa280ed2ae7056821431d431ea5d77ccf048136d0d1697c79beb469e42ddbb84baf99f16c4dbff1774660cc6fafea5a8294dc4e9f79be84178d811c9426da8e485182e7e3a631cfc616ab8609c421ece17d267f6bf949c48d50cbba98a35a23c891efb4cab6c9dce0ff824f3b0e6f1d9bb5a51a08bce9cf8a0100951c266a087d77d58471dfe921e1f237474355a379e57d336af019d724bd08177f9b663061433bee1bdc2704ec211961e04670f239b902cd557f1d284d41dba24d1d9d888726c398ea0d85ec76c72816ea6bfa188fbdbe75cab1843faa8d07013006fde322c7b26ba0980010e2ca4371921a0384de59e7abaaa71046f0ada38f957ed3e6537766e44d697a8e9ecac3dc2ae0c550a9a60690472c64a26e536a4f88ddbc058a12ba4f7c26628ed617b1657e1250b057794159f338e4fbeece1af99ebf7bca7ca967937fbe34e2e74e3ee19263982ad43819e415759e2404766cd541a0e2562cce00d05797fb5ad0d78ee5626a35e310040f1073a726e8e96d0735d012ed5553086a0d4c8c1050fe2f8ca45f61eaa22d0f9b72113d9841251a4e8ff48e8a51856eaac30f7f87249e4421accffdea13f72772b2da721c4729cbb22b6a06d64700abd6b6996bc9757dd85376d11273faaa20bc46905456f5e8a13c8fc68853dac1d9214069f046e96b7c8a2c5068b4a1e3fc421b92f781df38ddc62401ec148b97835a575b0c7d15a0d8f2728579a0ccf1783953165638ecf33d33b4c899e57dbd60b9a333b87dd82d694e868de9f88e45eae18342297659cf68886b7cd5b111f940cbed227fcb91c6befe5f998d9bb2507fee528e37e2b575c5234e6bce6edc99478dfbcfc370b29de6fc58ddbdb305934e15b1fedc00ec6ff075154d8b19e502869640bb62bcaca3776522a698b72b352d2c1ec5e9d0bf4440125fb31ef5aa0e1d0d0bcfa35b30254e67f8ecc040aff6f576dc850435035e1e1bc50243309748d9ba6969fcb6c0da1a272685bc41f22199dbc94d07730da2399f9ed75cc9b8e6930922f00b7639a463204572480a8f91116d6b1cab135bc67a0309e316ae56e890f862fbd5824e137e1f8641171d3bdde65b3b6b3105218e1a81768bc805ded8ec4752807d5ea90dd37850e29459396fa1cfbae47f00b9f65c6eb1b309f8524accd992666704f63e0733a324483b566637002a84776f10933bffb922d1b6145df527fab199f0c8a114f2b9058821e88a13931b9b5e06ee0472186e8096c94cc325ee518c92da9c833234ba6ac56cdcdf13be656ec182a13bd498e9b70269dfc4111318aed8629e5ed4304c8dbc5851c35e4be3547657d809db387a23b6036c0aeeb6bcefc7980e8a6583777d06f41f65eb1a6407637cdc055b0af632be1ab0f2dd7774c040c00d26d75dc7b772e1f0f09ba8e84ee2e55c9912013cf4a9be434ed4108ce19621351ebd2045bdbe464059b79061639d5404e22d9b5ce62921dbf7124e8b52e1b6e3a733bb8805e331592ce9ce7eaf03c5c327f62ffbb3b081097ad32f776bfc07b48100530f9f498f03e8d817c547c1b6b251e08c2f91190d7663d83505eb4e884dd094664e23254684a4825af17cf29b01a71a469633b011cc7fa890636d5b7527a1017d3dc8975948471dea73b81966fd224885282ad18d47cbf2408610352907cafa2c534386802a10bbc21f613bfba1d85d29cf34ac33b6dfccde4b69839e37a47f140177baac5eda1ef90c21c86de0eeb85014148c61979f7ebed858716241bca30d29cc15ac70f1ecc1d4620e47fa66e705ee9b09fac3f8968e059b0566c7077ca3ce3a9b9a20af50d9206fe2e2142cd366fa62573e46785606608e522284c4ba15c65c7c0b67370f71e40891c20b02e602e95918e9a3d74cce161603f0ef2037bd74783a744e8fbe476439d0cd80838dcd63445b03effffaaa518f5127f1e9531960119b183475a0649bc20d138e41dc117918567521bd7c7fd530e99ce32c11fe581e1908b892c2550ac0d17804b9039d8fe10d361e92a551c5b46bcd04ffa4cf01591bdb62aca68d29d13cf8b498ac06f0e71f9cc2ba700eab737704694ba52bdd4773c55d5953473ed71bc315fdab8edb3af9fd770e9460c931910c2948f317f2aaf930dc0d7a063e34c8bd15ba51dddc0ba4ce1726e2b2a793c084d436f96501124dcdcc8d3d75766dc9296b90ef3857d664dac4f28844af60d8b209584f9d64c1ff0d6c53950b85abee1de87d0cf9429c93144943f90c8366e50f7851ee82da96533765084c864ca4db5934c59a833a0deefbe68b1298416105b68418f51f5886da5be33fe3d5744798632fef996e4122350b0f25d6dfea91e68f3892cec136fa3fba8aaa8506c11580e4dfdb39024556ed82abdfa164fa5a23d5b736fff0c67a2a1ae779073d681bfe6c67ee44e5321e9e058dbe7695b934ead5f292b97291351b70a08d59ae7300ec4bb9a062c8339aab5e0e419de81ac1578327281bbf9c6e90645315f32fafc081b5b95940e9b4313363c0caaec3fd7fa70cf725190737b90b9b5a1f687ceb3f6befa6ab5c196efb3d75f14d260221ebcde0a4ee476470f90111a7399b74960ba84faa487e967d1d1d293500159b141fe7a76eb0bec1ec512fcb36f21889c3cf3de0685185fe214915ab598ecb54516031f0437f64dd4599bb6dc5c74d483b1908b7a8a42c924b999187389cd7ba705f2417d187af1463b8137c1d84800fb5d6bcd984c890868ec9a65dbd1325709ffdc7c61d34105f135d87ed1e7539c71f7308fcc15ebe446ce24950e3a5ef081a4395194960e8a9e9efe2e34976b2a055eb2d3f7987b76ea28f442f23cc66af221c8b2c4e75e35362acd0aaa2cd4ffc026cbfcfea397e04adddd2c71d6ead339ddb54b8d9f3640958d69dc13d80c19d40dcab814003badc3f24dcac220b6327a23368d4c7c5746dbf7a17640a5f8c90d2cee00ede553a62ffdc6736b765c7fdc879cd6db70873ded879b3303535e60bc188e84436cfb2ab2cb82dc3b179e635b928ab7bbf62823c24f4a551227691e821a3da2a0f4f8419fdf9729884044ac810da66268fcd02e8349f9140c6b849dd7249e23e471407df9cff09315177a43ff6259eb6875dc0c1e38d9e74acfae9e0a5d7e71fa68b150a3568cdace65c460bbe87c7a01e50e9e5ece18f8eb0bde2ddf3ff54e5a973701c762249b353be41483ba0de30d98cd464e4935ce6296d8591142e673c73cde60b294e1f209c24ada533738da82080deefb6d5e754c9e7ffa951be797a7592d5326d7e29353727d93766ee5c241990343acfae84e56ed43bbfdc3db35d3eba6efaf57524f64ed0ba8e83d1e721aea7f18bdbe2788b009d27b12ae33471777920904b0358ab2e1f64986ac09ab6e0fd94a58fe862f4f41f552c037052a86891e80802466a2bd6c7abcff876cca7241eb041f70d48bb44f3c4e6ea5c4f81d4d45ff66bf493b5ad2781d0f57564ed87844e37831d7b8cfa08b6c8c7b49d6391d31d8ee64efeae755b23cfe417f3ef7e67121bed00d952d3dedcb0edca6639ba4d3d9afa143795dfd0fb6f82a9c939ceec2aa3333854e72545da1e374e7570c5c1699e2507dc3ad600be9cf8b41ae4e0fa546bfc62ed53ab2bb6bf830e7513963836ef8c28279014ac1d3c1090b7182d8e43e5bc5ea8f1c06f9d3552297da96ead47f433de1439105ea204bdfa3c252e69a2a3e675a97b76994b9e7e1e652daf56dc0e252d6b3d289c92c0e26e64037a5e00e8772d8d2ac7925c0c3821c279a594181ca3b9af2bba5d15843b0586716796c11929da3d46c3c33da2a399ef5ab72190e785ce0b9014764801eef065a6c36599480437721dc3644083c7ad98d0d9ead0eb93c3ea300c41c011606e906d7c039f0cb531f185ada012e2a80017409da673c3116d519a4884e470ec6cb706da12b3cb0fc6de6b5f5058e4a53c80ca610c2ebdfda39f733cf54ab53197228f7cc20638b9d9b34bb655d4d326dc8b0d5e6a138ca59b7c9b13300f6c1ae1091c33d539ab8874095a9546378dcf07dfa14ade4d1338eac21f9f9265568ec0376e5ef706e03cf8566a89b75b760510e307da9542edfe54c963d68074a9fa8e6b429f69693562d48aecc92cde3b17d1a3ac6928722277b20ef4384bfa2c896c8b22664c229b816a7ac96af5b64bb82ad078960f6a67e6060e274a2b133547063fdcf95970d460f1d3030a0320aacc554b153dd4781d10eb010b76b44a3d80e5f961bd0183a7058d24e29cb5bcc31066bb51555704fefdc249bf659f946fc6c6ed28fcf8ef6fcc09ff977b5e25ad9c94cba08988477494a585382b5edbfda577d191228fc6608aad941765eee0997771d8a3c57eee3b65287b6b38623885e4a303ec9e3a7bde02afd0c387a34430aaa8fed213c0924196fecd36eccf6ed2ee8f18f868a80424fb3a7393b358ea6efa8701ac9664a539ff69e3ae7ed27999f76d984e63659aa860611ee521e39d1ae763f22371e6ab86405216e8c89cd656e3b018c26e5a03ffe83d19445579eff6561178bf5061def07ab97df6494fcb1c62efe165dd095c761247dbf578c2cccbef86cf85b930e4b06c4ac1e1ae8e4e50e11b86ad95a6f27e598d9b4c374f1d9dc1f78dae703a379b33a3e084b7a8483e2b4ee4939fdd9bf2e63ceedb88daf7497c3dbf0a99bad7fdce39eff6c9509d0c8be526d7c5d7d308d941708fb7b141b85a810ac17e855596df29806d5b4c6ebec424550ea86909d385fd039791676c8288ffd733705801c7f882c7326d3749b20efea1de8f4c7b0f93ec263e56f751de344a7879cee55f9566d063401a1de51c7e596e24aa47bbcaea6e65a07806136c5cdcfedcce56c41e06776788df7b21c0006c57cbc17acbb2b553d1bb99cb7d16f0d4c5cc8d0ccf2260ddb37642dd8f21c9cf54775659bb3a9366e1f988fddda93c37d6341d3624fc802c017e9a0bf171b2cdbdd4e6d70715b83cfab08fe2f8f7e53cae9fb9f3ec3ecffdf886f9981ecc4e4b0fe384eb5abe20f58624f37f2896e63ff9b1efc1affff39e67863a7af419aee52ccfdd3810376ab8bad118f8f63dec9adb3f7fe53ea807158cee7e1e7eb0553a9ccee8ec5862fab5f38260c1ce7cd547586326781b427eaa69e1341223ae2b932475df3c1838e41f99c3890a16e16232ccf1664022523112f37b68b980777101bc185d72839a71881589d6fa900d2c2f525e1085aa78868065a6c03be2b3728804b83f77e8a03a0d415fdcf790dbd4bb2e2da71b398711f17f1587ce6efe570c0fcc423165f943239085d3ec365ed30b97da3564717b727e3923f46fa809f09c7bf3496cfecbed6537bfc7e46433d4df2089b020597cf68c832c4de7c58c717c74ac333ffcaaac1d05e2a107bcab021c34df17d976cc16e9769fdf8daa56e34db7f2453f9d81b3f4c376bedd39c0483ed9a69cfb747e651ed7686a7c16640df4b1dde70a6c6b8d965fbafd009db175324309d5e177149d8f96f097668928f618c43413cd0bf740429a89176add914a407a73b77dffdfd6c7f8b941a0749f8dd807358dd407615441844a9a687912d1e1e6a87ff7afcdb86192764397dd3fb866f67bd60cb49bf6443aa8d6d444ff9fd5b55b6d7fe616cdbbf2c3f963cf47a16df4fd9a19c21f3452b43680cfbad51efac6cfd7f61bdfefed2f0e3205a5deeb3bc7db15ed455f5a43e43e1cc72e0db3023db723c9b863949abb8b9103d60ec56431b4bc2ab1f1abcd875849a9eb852eea83db8718d001dbd14247d803ff29caf3490dca66e518ceaeac6c8de0d53d3808442daaa1e60f74c04c6ea2b292de5c761f8f8be3b4ef666a45c0f7b22b1c9ca4cd0c19e0468428c4133b442d57ae19d9d709f9c97246800e6ef22f54b4c6b2daa6966f28b3f182a00712cdf56d5708fda25b3c997996ce86c76d415804b1a18816f4cf195eed46720b211f9f70d8188f989b5d3ec5bb93524ba9d04a10d0bf9fe1c83c8af9784e92dde6a47d3ba68f3b34fdcaf04d23967eb6f52cba2d1f80a4b8e317beadd130b6b6e544b83700c3b73cfc9b1efb49f7d5d80850ec8bc2688f081988f5a644fae2f3decddc73311b0cc622e4bf0b6cea0b5d38c1572b6a87056ee293098d8c40591dd9fe097a05f267d0ef7b077643d6c8c6404716e47000d6698c6fc46b74d782c9f9e6b733c46de684776f0d0e47fa6a66d1a5888337be394423eea1ced54cc9569bdf6357fe1bc87329bb9ae67e87ce586e40a365861c43d6714a03d4ff0b4f60d3b62c2f4345be6af7a8e62d8fdff1ded15aa05f9a6301be635b1bfebd71b97907d73a8fac66cd6dfdefe1a26befcfdc4641fdcbb245dc0c6dd99e320aff4f69f5f35e74925b1fc7a5c6d2373838aa3a8ab179b82eb230e04f6bf481e7b7ae1437b2eee170e3997cf491099f8a9f46c0063e6193328d8bd557c09d7b81bccdc9842ba3f70460b41b9e7324c7eae1e51b68fab3a65364874042caae8fbdaeba29037c807741d46342f659711a829baadf2911ecf68b25003ad0c16b95497480b085926521f11ccab87d09f3b5a2db287df5e539ec0b8722717dd771e37f29ea54fd0d64fecac320b7476524ea63d8c5fb029bb5ea377ba8fe18b442ebbe03be95b3fcfed9213f29ab9358b517bffe7beffd1bc5d0f7e3f4fbd955fb658c2bf9859bf1e0c340c750bcb7f33e77232efc890ac06dac299fe17893e330fb6106e9fc0b0f22763f16c752be15968f460f75e2a0500d479143e083eca6b9532f7d021d597d05b188e73d866acda73fae87cbb51d010d3dfd4793375c19f349ea594fee2f9fe4f19fa4ce28ff43cafa9192e5884a4adb59a9c54f2b27526da5df5b79dd3171e53138a9c9a45745ef2ce480a1b1225abc5f8dc302ffffeae046e12ce77e5ab409eafd1fffad7761fce66eec97bfb6eadd3b339fa25eb509eabfb84b7dffeee05f7e9bf80db877ff1839f70aecfbfe11c81806bf34e3ef5590bda8bad286bfbff2dddb405bbe89c6dd44219e0ec5cd7759989a529f7dfd97827896abb304f6deb5749a1b42749879ff73bce50bff710cf6efca93eb19341da4719b1bd723caf0b42ea45c9f49ecdec5a760e655af340c7b0aa7ee988d50d858957952b9cc3bb6a5c4e3d3278c4902f12a017b194e96d87a91bf1844eea03b9cb8428c2a254dd78038ec23e655e9024b6c37e62287052832c57fb7afc4f917de31bdb10325a718b44367f94c4e150d0fff4ffa8adabee34983077eb0e3921eed29dc3b1c8ef48fb8093c9d7c6c36ace5d77018b57b6cb127a8f9d300bba97f924cc3f65f1a0e8c7cf3ccf68d7dddac28639af799dacb8f122d73de6c6de6166d4b338ff4fbcd2e70693f76d9c31b8867fe88cf1305eced0c52b6167a503bc78eaef7a72acc19002f4ffba74a17e1aa46002d82da6ed069a5605483246bfbcbe4e3e8df1eef860aabdbe8ed4e392892006111b74af8be7f2f762e925b235d26621d241b83c9c43d3c5d0de9929fd58bf465906db9e70e304eda1b7b1986a1f19d57f64a1c4f1f76548c38c31b9acf666e6a2460133710b71327c2ae3ba6c028317c697ddd3fb6d7865ed224261898f3ebc3023eede953993dcb6f98fa43c71f2bd93cc776714a790749ac68c3e1d8fbfaca29c9bdbb6dbc68f5b5d9f115ad9db2325cf6cc2c398365cb304a89cbe2fa11c7682c5b864bcc40d9325c4286ca2a832565a0ac192839c3586a8a589fa4fc2f3832f453c6428acbbc6f99f8224c41c7307b059f3b317e98abe82b21c365cb7089192a6b064ac8505933b8a40c9435032567b02c192c214365cd70c9338cd2ee82183ec87534b6d463220607df06d87df8261388f2f3ad1fd1d04e9d84690a4709252d7595c0aab74296ec83977dad1471e4e1e9d03f2630005c2c80297c1a9dd39acea9fc26a40adf7d65da04d64c699175818be48f954cfe9f94feefc270d90dabf1fffd7ebce2e75bea9fad6c4ae6f4094916b1e1a83cf6d6f3862442e9cb2ff11b417f80cc1fdcbc8e6a3afcf7d1512eec6646cc691b8a811b8426a13289845d445abd7b4cd20d748752d23a68fdcb3f5961b330e4d3a14da052c5e450548cf53ca713c97fe3ae838418992e26d035c72e7186f52afc0e2f1070ab01e26dd0c038aec744f2bca352a706686262eaf07772854474abded91828588ace6585b05eb0b7f1b79a68fc9a96fcdc07b58c635ce17c2119a667ba06ebebafff21cdcaeff242b5ffd63802b98d727b6fdcf8b3ad108173849067880128fe73dec2bb79e47f4fdf3776e58f573037eabc003db18c4b111899d67ff2d3bc370eb69f12a7690750e192b17490e908a2ac66d2fd78270147cc560e92288723d9c9501d5f80506bbfdd78d631af89599aca3703dc308353dee1f7a889e51608fe53e6ac5b4c8c6bbeec2a1cb093b13415ff7e1b5b7f2c886d26671096cec91905ed4f49d0338d287b112f1c0af25e43ef0a3bf265fd211a5a30f9f3ab518925535c743eda2eb371c09146941c91ae730e2e40274e18fbd3d867998e54103b3603f5813a662eb3870fa6002e86ffd0f30e4446a8caa09790c985fd0340eb86b6360e4c3a87860d6a6e42d5874fd6949f1dd772d0230a82bc32a00ec8acc1b912bbb9ec314d496650e50e9a870e13f6d1a793921592b518f9f8a855f87aedfcda49321986695f8a649ba6bae0e13f3a45f1936086ad0c1dadd3a1ca00c362ca2d90a771789f20372376c1562fa0468e14f368b47d9f056fe4109370a2e6dbad8ca692ff0b71b8b857a644b3f8e42986dadd3127cfb4e1a946915f83933a994ecd6ec490c9b95efd8a5c704f307b72bd89a6c62f0621cb254abbd212f3bf2aed2dbe3daaf50b7a513c5ecdc25430f2947a97291ec3808b45f6266a1385974ed0b6735b66509129076f97cfec4b51ed6a09d4372a11ccdf14752e8636bfef1cce09ebfd01b0fdc79e1a2b4a794fa13f8c0910ea002dff4cb84f1c890b5022d9a3f393b004b0a3b96eebb6d5227793c1e643d603d9998d319c39b3a8b00d87e23f00050e85e5051008a5be4d7906c18e294431f3641ce1648c38101d6abd4cc918d44274da1b5a03eb0dbc40b1ceb168cbb74ad5ddb40483fcf2ebac038811eaa89b9d7630d14a3f4009a434a775b66c2ac4107d7aa7c92793e7c825c2afb94bc52e6d5cd90f6325ad43a510fe19dd6ae503251822500e655aa4e232428c0e13b2a16d9ca66aa9db0d9da4df223b08bcd0f89fc247ea64167c8d6b39853bf91b2d355a398c5c152d277ff5a016af418947bcbd931952433fbe780a5c31b70637fff3d5063b834025067c1ad909ea85a4cecb707d03aeb4e704f3dc3a34725095f7baf1f2dcc4718a8d00ac7e391325f2ff9d5975099da9f0ce1c02c438eb39739d7ffd0312edf5b987cd55e0fa9c595af120f566b02a37299292d0443c65be619116f3f8c7a39522cf07e08c286a98238f5eba5228b70a34153784506ca1f95825bb65669db726f19bb912059999d1d94cede50054a4320775f78cbe0323a78d92474c8b051a4027be8f473321123908d9d0dd954cbea9161b44b5ae11d552769913e8aabdf450b77d4ab0a17e26ad7b6c5d850553e41e44278bfe18b829ab38d8a30e12b0b5a10b97165dbdbf284539b8abc045bf7566a7d5036e8b49758df37a01cc54b02e7c0180eac9d107c5e29d20759a77adf499d29588113fa633888653d17b4325f4d1c6f330cf30f536cd18ad8ff131c9a1e940f8479fa3a70b3f8c3340c6100e5b198567eeb70155cc3b2dfdcf468e29c2a827b8568518a230bab4a908851530dcddbc5717073a8b1bd0390dfaf94b3f79f0c5af1afa227169b31ab9b6743f2af81e74d56f1dfae5c4ee660f9a45408f613e0e374255670729d61277e04323efabb5b9ac2767e76766b14f96e8151f84870ff6cd3005f054ae22c811af103981c26bd2bb0cc0d9cac51ca0e031002ebc916edc106910f730779b7adcace1ed90c010e155ae8956744c8d60b68edf720320a18c0de4267a69550ce4c483f3db033e07ca367028252e0a1658a6154960747424258aca6adc40ef5bbff7292312a2199b64ee7dab2cdb2cbfdfb098de83bacf76edad8b485dd34fdc4935fb8446507c5a99dccd15e61a83b9bc29675a5e3617501893b9842a17bdceb75c3c51526b5fa9864b4c2153fa7164cff94eac71fc6c46d1be1d7c4980a29006862e41f7300beccc7e2d727bba083d940182c57a4e7cb178222e6cc2808eed01a062e0196ea8191eeb1db566bd5317dd380b590fb267d5640674e1e35cc2b8ac02132e66ef6465b5a27fedcf741b12908e292b82cc0502db4f2e74b11b48f71ad4c5ee2303585de09b42f8ad68c534fd0c1efd6388cbc027287ee66e1e9eaeda2f7d431534ee8f4c777ce724043963de79c5822ab173cca446e3760c4b487e420aa4338a28997d5d50d74a530a5af47f345083f9a6b66b6dd793f3d2fd16c5f2d3b049de3a53c6af0ad00a3322a68e1aeceb817480c811ebbd90184b39bb18ffe829d1cd29c2f04ee73e560b809f7345abd2a64d9f61cd5f8e386a0091a61d0a910b804f485b1ed9eae94cd715a9d23d1f004583edd97d66cf745e45ea5631021a19f94853cc0326cb6266caea4854a043e9f8342013d10cc0e976b1126378667af7001d03e216fccd3b61a6bce7bc0d3d0ee8d2046603a6e61e9ceddd91236d5f05c59a92bd7a88c2819aea1d79826b7909a13fb6a268bc21e41b7ab7972a1798772cd4a957c1ff566afa4dc5c6e2e9c3be0c8e4afa622e3ca3fe40fb2212486ba065eb2f35942899ed69da0c9c7a6d8ae742c1b93543106a42c774bc617cb5d47735764752ef6b5809c0e373c932a94b172a9c3bc9094922abf8b10f64b54515621475e62f30ab662d0ba11851a5e6bb402e12cd44a528d34169470467d8dead4ce9d03c11d8a89c200d164f645c89724358200844415363f433d18db4f0619742f8b8e0b17bfc18b0911c3050cd32db4e52e32e162f696a4ad4b72814088c361de57330baff9a1f052a28b28890157602d24605fb38758ff49ccb32010d6b439b731a6218ce577797442e19e3e10b0933eb2e858310b6396f3a98eef3ff41e20da86309f1d7f7e16c33a9c5f8b41ab510df6f03ed382379db6e3505146197239781b6643c053fe4a6d16c677622c3c16becce6f8fdcfe565371ce7200fd094935b4840b3a3e5604f86a33ac316d0661e823483dab78b550387ce4e1ae053f949c05060fd30d2447c597424eb38467258b38a41aec54ed47561dedf456fc2b1899b13bbac7fc49be65e12d27ed4aa49a2ffb141ca639dc0c0e70175dfa9cec0600e9559e748c339bba61142faf902b96466a7dc0426a818b9923c3109a3811fafd40271cc6fd7220e52df19b5439f87fda989acdc51671af32f1e0664cc4d18e8a6e492393251ab2e0870a99d147a027fb3760254151a809d024d14dc709603667fccc18e8001e013ef15249363aed1f406d74efab18efe344aba17a6186ab114f26f41cab30abe14747e30a6d063c0e26d305c587543487029534245fe847345577baa8a7a36a5beecc8c5b02ae72c2736075e039cd9fe36fe9f07b2a05c4431fc34d1824e02f9ed6058881683ea8ddc11f3b3d2f92d4317ad353ffb11a314ce6b4d818cda6e29cacf48172dd89a4b5c9777c4ccbcbe4af8babb6a2290ac01752d346dfdeda47beee66da36054e33ac7dd91238473681d08f2e3aad88ffa48a14fbb0a7eb03750d1d9b2e8b3cd5ff744b3008ecb524385b678b931e92b1ff1f0096669d90c3aa8d9603342ebd78c43302dbaf99d5936ae5bddd2b469a74a30d7283323e993762b4734e07ab1353c58497f047241d8e32bcc408952bf6e011042d75f8bce603a0d77378bae8cfe1b2a0287caf0a3030044e3b3e917742f5657355d09b69fd0b19261de9a547d73b7059cb6558086e40bffa9ecca303356ed970127782059a282f03453e13abb4471c802b2fea6ce626b3e21c060091fafd9306ac4c8a39d7426d82a775208fece8012c2d2945036f0a3f67acbfe81db379fb33618214c85dfde4387b7cfe3453220d47eb49d15e7f9e2109c274c44cd7080406cfca7b75b1e8a601363367f7aee206f010011a8224463e611dd4ce528bddc7079cc0d1a5feb9200aaf75154d09e5ffa5632dbbd577d984f73235cc22a7e76be54f60db9a503f49498191831915c4bb667ac075d9b710a8af9655f0288a9fa89bb51c811ecdc355ee5d8d2adf3c23b69fb2148c98a210bd7f74a1b949bf9f0db262276c7889b09adc5553943ca695813aeadb6981f9d89c8fcc1858e795293ea099b5ad4a4d1c3def60233e39e2b656ee7e7a88067ee5901ef2b31832f0c19d3e2d8f77b396f1fcb22590616d8887ac3f5015e2b8332ac3a14e8f2dc3f792a4fd908736708d874b2a153582072c16088660c5adbf12b301bce46566aa927f9ef951a1a0199803465ef9ea1a6efd7ab51a27d7b1a5cf52489ebbcd7f4c8754f2ce9e3643e249b2ff2985f81b61f895b64c67ffa53f692c9f576cd376522205e9a64f149bf0f72d0cf5de0908df7a5092a6a60472ff77bda56881954c2d761e55e3e1828a1a9470ca498441935fe046912f4149012bf318d99fd785551eb2370f3eb265f172d3edc9070c72d0b6bd0569a5dfa4816fe5420989c0635492b6fb47d626a0882a351c933cac5a67d75b49f109dae2ba821ed2d3ecf575c6562415cc532c0823793de4d0f9445b82cbba9bf9be0d1eb62a71e30f782de980b5a0c9cb558b25e09ca4a8dc172be67b05123dd2aba7d0b482681129845d3efa0e23558575f0b3a87db2aba4cdb69b1571667b05a03360da847d264a130ddace8f75c67a1b233e946d146e9c534c2ae2bdf63cac1c0409e91b70f0e4330040021ae88bd33ae1d2639645a83f36d892e7315784b676c07984ff26907262b286b13e7eed8be0da15a40feb96449def79589f9fea60fd3ff2aba4f4ffd36da4b04c4f010189df8820b403d0ec19f918efddae08a825da014631607e8616b5aae9c45a02a32897716a3992481e36b9a712a4d387600d34a8eb7b11335ad7dde41decf43dfcc4202e63df740d00c6aabeb63034ac1c42ccd4e253a2b8269b41b8a2e71299b158cb3ce0b30d3528ff90cb46d670f11c4b123062a4e2b05ffe5c0b76c20b022181c698163771c565de69f39d0699317f885e5136162a8b824c0c0f39dc54da0621a651cb3bec928742c9ae6c0d13dc8d26bc4e9f10893d351ce3cd002833638d8adff34fbdd3cceff8a50a3b3f1ea9fd98be498922a1d615ed18ec7dccaffd0e235721495506876921acd5678a5aac66c83edb08d86cb108789b255376d472c9b3550f180d3fa718440e6716aba83f5f7b8e36c3b0db47c675c3d81fa232bcb14e5630e0e207d04348dd3fb69c90b18d24ce92ade7c78a50397a96b1b0d25c7092dbc21217a1e5c59e84e6241d163dad963409729d6ebf9316983de1fcc16b2fbce88854830618160cf156c81479b577885d2e66f6d4358a85c4ecadd812293076db6607c7672c957e8701af45fc121e9921c8c067c48c9715377b374fdf88b5509b94f227f8eaf8861a0ea0e5cfe910c4b61e6fb8947dabd6c85517facb2a3e1a93a9f86de05958322d0662e9fe3ee3719a992dca1554ef30092614dab10a5bb0d1ab1625d3c2e3b509ac8475f4143be0b3f46f1162b8bae91cb1244a992e90f4f23c0e3c8f4fa445c9fafa2f0bcdf7725cc1098af488f51828d64113e196c6abf9cfced5bc80d610e329a7ab7ad4a60229b6c4fa1b0dd30fe8d92eca6750242ee7529016d778d33ebf1461baaff1440e24166d2909d2608d64fffb5f1f82d6f812bb953600101701ccfeaae8ee208ae029ecb6b7be0b14d66f5b136e327a6af43dadadfdc05a745d4afa29951d150101e5d0548c8a35b6d97a82e30a1b27f4490c0871310400aea11f469bba45847d28c8f985eb41b19cfb2046f53492fd8e1ee6418fa44dc01b7174f9081e521bc021e4b76c6996816c2b4b0f69e023e599867a07fb1f66d2c24537a684e98bd1057f4d5b0263024b6be6ad945c499c2270a3df8c1f1ac20349fb567c449ad1dfd9a596df0d585ddfd17c79953ccc92625829b65b908f5d280266c1adfa1b7886d5b11021702d5647671e6e32b32b2cc82f70ba16772c3acb64b33a228b8cc7a3c2d242ded24499546978d87cf7629aa51f63c7774ea55c83d906fd37b66295fe8ed5f4b9ffc1a558fb62ff7dfe42705a673a6a2a60baa729017488a32c5a4d7205be31caf9ff895704865c24fccb0a1316ae8948494e486671223f8ca7495baed7da6a3b2f3690670aeb386377004290bf07a7c75a5d22ceb8843c3d4120c3513c7d4e7e99d3096c139fb7f4716c708d52cab0e60f2e5e9b337f8b2e71894d48088afaefd20cbe027d2c00a1fca375e2c22de128e5f8bedb64db2dff6f07391e4ec625ed40d28c89a0f6923b7f9c131af945304e2c537e43bfc45e0258b246295a44b6192b23f5c1f67870d42be91bc2d44b9e90d7a3cb3d92866af3992707e90666118b06599d5547020948287a066aae32200f7d7f9332711e0dfa26feaf25e09c0dd57f4c2ffe1602a2679effd971fae698aa357a36d313d7a925b9f629b1233efbf515a8f9e9e3415efea95bcbaf50356b8d09c34e63d5715e12990aed21b2102224c73b158cde07f94be8eb779d151dc6455bb6ef730aba6b3e3e50df2d5875c94fbcb695124b5f3cc1bcf53f962a9160964050d5a4962899589e2bd341e085a7d486b9332118ba1aca95826b1198d41da4c37f3f5ecc4677e48018ba133a3ccd557d88ab25b0b92f960ffaff41459a082d34a62ce6eb7b71aeff59dcc5c98708949b1835a3184698ed84411d8418e4c0e43a903b6f84b0697052faf2ed464951afd36445d7d34e86e157bf022e9713e0b0bd7d791b79da82da8fc75a0245995ecefe33542054758752f9a73a106a2470efbcd3905b0a2611edd13c38fe364c956c53a6f11a2e23ccd88fe9231c177672dc89f66cc8b398fc34cef9d84a8e1e4747e4c3d27c35236c08aa17d4ae5c3ec9f24e4c0b6ee693e07e81f941cc8ebe731b55d2bf6faaa44755ba9da0ebbf15bd21c55ad1d4c5ca9324b352b72b165dad8ad88c5e58bb0d8dde9e5345bd702034a7bf28eb87177cf815b2583b2532b17c53ebc490a7e89f3fe0dc01b27c8c8a05bd9e61ed1ea6cbef911b13204a1263fe7e0f2720d76e6475373e964b682d88de41610a199cc8edc79876babd11b39035fe857cdcc8f8f761ebae22fe63b590a11637ac490a89866c00e84bc3fa6b10fdb05547b8498a9b7a2376d321cd1f3a638a53ec144240d45877edf86b957849a075b1118f65b880a7536a7babd1a0d097b290a0f89e59c2edcb7675d3455be62407cad8693bfcf60410816924c46a7e3b58e0851dd42400de6604d20f104930497ca4a5ecc14d8423ce07a591bb71fff39856ad1b8850e58d005f0116be29fffc9b1a4fb42753fab753b9aa792b5069392d2754a9cec2e261bff9ec2104461c6a6c9ead192f8d7859fa28002d2f1b15260043d610cb25295c3829dd869990e91a4b287dbdbf5e83c28c85be6ee2c4e3fa0360442f5a88a80128646a0e335316762554505c41674f5149dd0c29825f328cf47a3aeea5b4f771bcb8bca4199f9f4311dc3dbf427c4e67d40d9ddbd6f4825c6d1a3c432d33332c7a50ed93804b0fb7e0a5d19189d93d8ec3d6c8334f1abbcfd21b1730167aea3d362317c9433135265bad4a4c064da624852b42c5eeb9937c93083da217cee0e7e970f8c1150db9594057994fd3297ec6ce048cefb4c85cf32d2d467998bcd07779faa43dcff650997fa417af361e03e3cbb9a91bd1dd8593121a2b4f9f2e4d2ec578d6b58771816695d05664dca3d70ee5508782004f85c2dd527160759798e3d7045bbc5821e7548f42d94fea5033583dcb2ee01c701422d2fac93aa74bcf5f178fbae41f11b4f0e2393ea335ddbe4b938a4b33cffaf070b1d4b09f2dd762576a49d4b547da6dc07aca8eb6fc291cddcfd0fc44d0258f68980eda0ae4396098f47c767b18d8ce68853f63f11871db72e3c2e94dd566bd892bfdc47680dbac2da9b1d459d104efcb1a6e62dbc13a3afb7298ce71e43365c2e3eea377077bc6cad1f17171d0b9865e828ed0cbb4ed9d533f8bcb99fbac325726db6739787f04029c04faf96c9014d0d153da59e86de6fa38ec691b42429f858095ec3e8ed0fe75bf9b5e31f0e32360f20e05e8380aab84766c95ef81527ee09321dc874765f9b31385b435c6247bb4337baf3df0f8590ec3a5667ad97d4b9608a2636c805d90053ace01aa93dbce955d55115d2283c23a80b2801ad706b2ae4ffe994dfee049567a842041c9b0fde6f9f0af84dd71328e5b7272d8f50d85691aab45be9de30ac69f264147f7497f6ec4a60e0ea8c28f5ada9121e7f9aa896aa8ab0d723f1358c69da92323ed27eaf64abfc3de31de1e6e5246c7490e773d8bb3a007a1178d107841420d3b3ac8647796ce8961a62fde69354e8f7590e69d61536ee13d4cc61d7fa1a0debd55a98f0c0a181c4c64c0e256eda0a5bbdee8600eed54c391e2c8fb0524b205e68f03c341d4c4fcadd1c52d77e1942563b67469a67d0a575d9a0406d396a6a4cc5140006f4df3e6c4ec67173569b350907b5998c08581b2c5819be03d69043004445cb961f2dea6f02c78c842295a9c2e31ebd32469e27f9596ef052f7f5a9d4cf9f2c23d8d9ab5b54c81553495820a1d8118c4ad7e4fa63c8496a917740d9ea1779834d3c9ae8ced9c7f91bc7541c8d91dd4fbce0be52b7e15252446c73c71930145823aa6bb1f8312fff0d1bd19c17beaa467e89ce005f7a144d95f02b0834b10c9831f430bb49e32479003a5ca8336653ab04593bcc189087baa70bc429db6c24e60372476001311fe6f7d8269f56b4bf61fbbfd4846d19adab023e70618c875420de18659a65a58178b53b7d0098742f57f2b8b12acfca26ebe6e0f467adc7e15fa4f2170d351bd01e0e8408dccc8e8059c43b673f092c6a0c32c68573045dbbf9585601102c6e812e13fc18e1b8e4466b68cb829326648745cf411fc3ef589141a4afac0315a640b960ee694ff06f51179ee02df9cccad9a10d8ed7ba6df1933c10bda0057681a997a205f81b9b90bdb17e2bbbfb4f8951247d06db1e226c06327fafd3702d383f913c46a56c11cb1d20f9a632200176dba9d80b213f223adff0aa56b01fd6748ed34d793e9da2b47c4844adde2fb723bf2d5446b0234ef96598a900a65005b17451ca057d05f122be73e6c19af7f409c66721d7b6b9e04a239f290d510074e1da233307a42db7ab006579d1d8e92ffbed7d384761f5aa854889b97a3cdfc2120124b19a2022f7f0865123ab988960db007f5a2a99f9ae048d320b7fa2526cb536ec0c020127f460a09fda7ad4045b59047704a2c1c0e99cf903ee0488fdacbe8bad56f092c343a37e9ac6bb3c934230e6ccff65f38cfe0c83538e58182584046248e49e8fb5b764b28c0a4f16d95da8d7e952c155fde5b219da3e5d6761473d3f47f0bb0e54000eb85c4c22180580eac5be462a7fa73f737ccdc0f80acc0eee4a5a0fcaee5a42aaccce391d6afcf7f769013f6243e7a765a0ecbc604ff0149601449234f52c2f6c9e42250b92345238378a53ca6e4ccc152895d576fb4366d1659fc129ddb084bf9fbe736c295c05f0e68f4d3ad02154efae0ba89018f9b85bfebbf505964150f4e99805d94888496a540fe138deb3a1d36155c12357b8827e72dcee1f62fb2b619b45f1cf99926d20468d0c11300355f33e69fa46a29a0fe3d3dd2f2bd0bc887ae70dd88af7539bb30c583cf09f7fa27ea859b46c792aa5efae43c9f1f2fac76667877972ee4626a8a78508598718a4ff18e7dcc32e897b0f1a5e88500a6d5ec92dced92d969380603fba3404a1c29bf05c5c46237ec4b7544efdbc1ba8b8b804c2537141ab957cb22a16956d505060d95a7330d138a05cc9ce99bec0881a2826db340ed21a16eddbd27eeac7149490e456332fe4cdb4ae7d11315310e4b6896a1cd133f3fb2a6bfa952c074dee7a16dd8ce6d0d5ad662efd05e287723e7b7e2cd9535d84044c9684075e624fb41caa8338e9d92e694c28f80c3413964e3b69c0a972c2ea6356c30cd31eb5526acbf9681b505b1b9559278a901a6f352369981db88777521c865f49de1fd841a166539e6dd10830f730acbf212cb0310abd1d0eae25b64fab6a2363e84d5a2c7ac5cb0f9139b76c22dd636a350c2830ca95f6c66c48113c3b514a3e9c1e637c142e42e064174c9938e932b341ae161e8321afbc2c2f78916d76ee32f1c5be93102d1f9959509f0ed8fdb03c00c4564cecfaa4406832b15514c002e288739d2f15f77db1bc1b0925db6a2edde8645d3e725a028d049a790a28f766f4c185021fb50d611ae8dcef806bfd729134590c4816217628ae7c4bf418a3236eb62cbbf426592855e00ef825e35536a00cc180fbf526d15976b33e9eb74adb60a279e3e2a88d946ae7305444d0b000d84d9cc1c3c21e8af89cbc521a357d839837ad8bb2f97976416c2021d865e1e1c21a21f04c5839ac755b05df1438606bb77babec0504b9a25d08621d753d89008192cdbf5146215387fe06bb6eacb6b3813aae1f5d1ac02f128cbfe46d11bb29276a586eda3a91632599d3bed0a7a5447738ec36f9be42a125c7cb81182f929d172a208a5bf64d8889defaaa840aba1ece6ce18787ba72649528de1e308befbd19624b1770af4513b08340325a5afa383b32892fc69ca208dc8c3a1e241ed96f74ce939b6c857ec3402d66f0d2cfa0cef2ae8d8021f9be977137f01b5d209e5e20fb5b0cbd48e15efd5a8208684b3b335ab9deb7e0a5dd0940afc4147113d84f86150a0146de0f924c3234a2c2147589396a2548f0e707d6faec0a0aac3842932e60f8ba0ab403788de524b0b8f71ad04b7f6e06f40d0ecb1662bdadc245e1c3ff7d479c25cd7cae0794d6876c8ad5dfc2eca22e88a632f11ec2a17c771616458fe91ef40fffd7eef88e0ff5882997d86930032fc95865bf728f445045132e834e57ffb072d123658a592eb8e0dada24f5e287c838097bc09b2616a4b37fcebb64eae33cc4f462b55c33850a74a523f7d164ea5db30caa7853ec3a8b42f91586cd25c66e1a64225a34f91936b6a951a1c54b2c55e3ca9161adf8585023221841839cde74747f12227d73440af3760bbb4557ec0047ec5a7ecae14ccdb574ff83da4a6c215a111d824a9617cbf583e0bcd018a42060391d222cde9c371808bcf6ad4f63402ec13f77d5aa40ca86cf97471b154017c823acb6560c29a68e0c2b90b6d03c7e85c8ef18e0fc4364319cb2f47af09919b64d1956a9a519dcc26e04d32c194c790586899a0121a17110b7b01609dedbb935806c66468c32da3064e4cdd3725e2a4196160ecf1a3ef2bbe9c495aebfdd176e5559de631c3d2dd301542b1990230c6b9848380efae57cdb2d50a590c0541932c07cede9639a5923c4b1a0b0168d9cc1f8bb5d3ecfe458c49c9aa9400002679d51514eaa230af99fb6b417ab6e93a40ee24c94823d19b23f32a6ca0e132e28ff663998a6998aba19077d8383046e656f11e744acef0d03c5cd55d72ad757afe3b0144f3b8f461fbe40a485f0c0ce077ff887497ef83e0145551680e424c4b2ac768ac3782e824eccbd26baed56a084525cd58ecf5aac1a509432cc7f5e5170a13aea669de2bf295ffa482cf22537bb45cfeb524cfd03d60cfca16f12144623cb79ebbd75218643983f61ec3d32bb57e857c8db88e55bba7a15418c15411d87a801aaa26723bee68563399d0edc39c49f87a841decc4fb74e004b6526f6e1d9cd78f1f2ffd6097420ff1b829c70061272ce0f9ab91f01f7d02a1b670ccfa2ff7b37589cb527e4f04955c6a55650a831ad44ff2995758c19329e8374380fa4517b2242e6df4845df83a780c8cf6fb44c561a1f2610d973c352f8a4f19e8718639fc48b4f7091a432ca748823d2059c039e68db41f2831293d38f11cfd8bd676d98dbc5be66192561c0d76466f8b2011b0397803112c977c361a6617f84daa7342c2f8b7b6b734b97b283ab69088245c52194733321c0685e137a9860034c87ea58d3f30bb2b184c290e26c7f5cc1c4d67c65c05aaf68c8d8c38c0d197ea85b29ce7b93afa6267182eb3f05517e4f1f74e7680a63027109890958aea3c71b8cee15803c8d5d47b24c35ae20cbdd0b4018a6b4753cc70185f15613c966211c94a3bc2dcbab488d04c35d5764028b98d0f0d387a9dcfbfc986fcc3c1b9f301470f2df6382c41250213a59bf6bf187bc2c1fac4fe0d46f9ac38841a2dab0224b56b0747a766674f66e66af531c9a73da0931d86cd74fd028050229f50a6c0d1d9286c7e4f8e7e811951869969c87d30bc3e999afee241ab98af4256eed4b465620215b6096c210faa15468cc84ea5211053dc686a7889c6be8df497bc7bba44c3fd22563f9c66dfd70b24c19f25081c3fc2fd5dfd461d447e090d16e4359a530b14c603ffd053bdd16803634c7a4aed24db3629aae660528ba066ae2b94c5af568b7447f21b48146ddd03aec8002097eb2e23fc8132475bbd02f804946707ca9cec93aad87ea6832edcff8d773652886ca647a3b19672ddf3177ce2ac79cfab8e0ea2ff879934c948f09e6d0d8dc6166ddac0a539a746f688143b57e725aa8fe64d70157eb25cf19065334f96561001a85ca2072237f727cfd17b055c4395e85ac5e88a7b8c0a012c6e76d850804202d3f9080cfffcdd63eb767d189fd4f6326ca6c5ad3c049695f5d2941f240f63f40db0a3577c7c69dff2c747b321ba0bf4f17d36dfc790b4af0106d2afac142f70255ccbcbec2a9cf44191c4b37657d66219777534ae5fd94ee17a1bf31889874753f4d88531b7d685f390502ed350094b8c67c8f87f1db00fe9bd685476ee69abafaf8b84e56cb25cb857af51fa9aa92f4fea1665e6bb98081aafcae1427cd79684fb9995bea52c105bafdaef2a86f6acaabba0d1bf5162a155577ccd8c6bd1a09ed3629a81c994a0f3cf74a9af1e9b809fe31fb2996644c8cc1ae3fc2693e30d3797542db5aa24a2c3f9cce2c76060f394b08e4c77efaf35a310c91a45e078abb837bd7335a1caf667e6b023c766228693f1c48df4110034691915d9a6808ddf766a427ede65813ea4e616a88060890fe15b56750bbe1947852edac21683b625b4ba4ebecdcd2d0e18024749f36a0e9148e0e00b9463a4c11cb340036ba54d43db143a68439062032b9b78da2f5da785e2e2cd567e8f3aa0f1e7130544990cbb0c62450578f4f30730069a610ffc78d9f48f2271a11f9a8343a1842551835337e8b63c60730b55fd3222679a99c3d69a724576c3e9a35bc4ed86d36237dcbab21d55aa55777b211aa998181e2e204874a15e49dca253e014182ecb561ae53bf2ac7590f6e451d4e2115de0cade5acb4b0cb4f876b99c1a23480dead878d3e6aa33d2ea87d062b7af3bde34914b9f1f87a35e1ad9480bf88de5a947cb9c40a6d7588f01ab63a3217f2cf8290de1c085950d9c0ea5468aa07c6b189e602de1e182d68707465b384930a775083e8a362170827be5e689b49fc820d4351e307c69294841c500f0654a45414e531f3c13400131c034cdc130449642e5a3bdc0221ff81a6054608ae864e0ec8313cd47073b2483568298f00a706201af934322a2cc95cb7b9d2e8af1328068e8d7228fd1d76400c86d172b2fa956cc0482bb5421f1b5100006de858e8a5a3f27208bdd54703c4a52c8c12fc48385a2054912a122ca7cf8eb00a3f9ebe51c60b9933a1c4f5b024cac1a190558ea038405b0050828fd3df8b8304b21ca426d4f30036f875d0c7675c6899014c162b2dbc1ca23b74e2f1543670620d4faf0e1a1b5100806520b004e560b71186afd387000b401a109d00b1b08742383106b7dc0f0d05a08c4c1d3678b876d9d0135e142e01ce8ad68b209d36397c5aa923102d206a200c5fbea02cc40d3843c045e970d2edf5ac2708854a00270d3c313a57b192c8efd3eec3c722d319004f5048a01d4061488ce0e1c5c58cb10e7a0b72600025e1330055813e13c607580d3803509e003560f004b660b7130b92588f150b5410e82d5c92e83558d2112840d04a0a8f7e167a1de828446a80c351eccbdc4d0802dd2c584afc32e836d2f193ac66d82f9c0fba1a321290503c4db0f3d05e56e6854827a8133a06f414621b2881217773dc028598d880228f5e1c202d8020494a26ac6f189c1a2f0469353029fc976071b948d6bb430c21c08ea8c638268646c06d119cd11eb3aab392141c127b0112b70febab42e85594d73c8c5166300380769a20ae8c0b3e66f5bd86bca0323c0e7a3a4e0f423ff0db9cab00b4da1006edb9fc3fbd33e5144aa523ee41852358108c8b6a37528a1ac80d86e191c4f1e8763f2db7cdc14dfc2d3e58772c62b42438b4cf260a595c409941aa9cdea6568f8c9994bf80eedb2827ca3ad788927c9c2553e9663470cd2bf494a53401b06e79787a61c3265b535eefd7ceb385cc4242f46501fb582d1db626899860d1f6dc3c69b73d18a5d113f0b3c60851c1a862ab26daafbb5e108ad4266f50448740ee5a8fbceb564b77332750c02f986dc433d513f409f13ab1f6240cac0ef08423cfdbbc16b5d09a8a46e2a7f060f1c28d177e227048ba5885b2e9c39386a5b4ec5a680b5eff58c38447e3fff9439716323843f23c77c01540ade7b2a0ff27f0fd2b6d25645f54ef8aedd8d6c872dd0938881c3e701cdd947a40619083df478dcb4fdc56666001e01ac5c05ee6ac560124b1048cea83190e994190080172392eb147559fc5d0400000000265245b61204476cf336436dbf86ece6ef2db1b2841b368e0c192157468fd02cc03d0f7ef1fe184cd1d4133385f913dd2405eb110a12ae10ac72cd8dd734b9e6b2c4dca63234ff9ff84e064132bcf05c95ab523899df54d92303eb91e958fded6280b57e63a130864bc1e0c607863b30d8f90fe6f5130b667971896579718975fdc8c2b2c4805c59623fac3f57b504c399473d2725570506015eada3acb09f3807f841f33ff805fc01835f61575c5e41aeae2e2e2f3f54fca4fd8fd776598c97423716c2ab4eae62713f8485c5818963e3d43823bdb81c7037c0890017c17b3d38166f83de7078e3f3b70edee0b840a64ea2be4db905f291872a975632c5983ac990a9d3dca1b07587c8e29b6a381363a54ed36a2a0fe6f1ba71aaaeb0ceafbbd44b28c8e29a745bb7a859b88f53ecbe3b175a17d89d0b661f66dfce8512cf2afbc5c7cf73552ec6399fe39f7df0cb8bda3342564f4dd85313f6d4844838dd52538df4f98aeb53af17b59686a95c6c5a6dd3bfa90528ff4f3b9d47471ce47979c3a18e0d91ac4c8bc235ddeaf4fcc21a30fa4f19270c162c98bdd54a3b3c3df4c063f6f5b812a1a0783dde53135b938653628cb3ef9b557459f6b702191d0def52cde99b2a753d145b8dcc4ce95a8e954af755b5eea47d4dc1b4d612e3c16eac5ce36c745756994cf5da50995c1299dc60e6bd29bb3c0a59f29185e41ed947d6da2854ca5559b9c6c258b34296946bac5464d3a2b02ae758b34e4e99298697ef7038cc3c62665a52aeb152869b98ec9bb26b7285739adbe5db14b76971c8a6c9176eddb575956b9c53388d89c3e110765d1cca357e57351c4336fd1ac62bbb4cfe72d28ddb140926e412265d9725becaa45b2cea64daeeb05303869d167676764ed439a2ec1726945ad28525141306854bb8bac4bec2acbe967481712d39720606f60306b1b282c1ac3030afaf2be018bc62fd5c30e6ca2ab556cca681635d29ec5534738d2d57ac83ea8a0597317592ab1876b7b056ac1f0ca655f70a59749559ecabc18aedd26ddb9f32f96e25dd185e5e69757d5fadf6a54c62c1b0ee8259f60783c52e9bc62956aaa6591dc615c3699756ddab350dd4c5760db65c4838ddea458dc56c1aa859e5fa8ab962400da748b02cf808ccd4495455c7e951bfc7e3cf35b65cb1cb06619f100516fcd070bef0e1d8aefa15b41b2186f551d5ccd48552c770bb6aa52ba6eaf78a4d83ea981abb403055c72e30ecd54ae59806ba40586d975ac7d605be3a76c9621758a65b17480644c2e99657307681aa667571cdedd24b2b2c9e2e0eb3d6f07125e6e34acc4cf6d56a4cf15299fcc146a3cbbaee5593bba65abce4b2298653a31a0f595cc2193eb66bbc662637ce6dbaa6ccad56d36dfaba5c3976c978ec9ac6adce70eb16d73833b1a9261edbd548c64b2bea2e9e9ab2e9526c74f39abb958b699be5b26faad5580d273532ce6e6edf3845b63aaf6c4eb326aa3a2ea6ed92521e0e8dee3125bee931a7f92af334bb1a835a605cf975b332b95433f02b8824a743788884d3ad6166d95cd44f884b984dd7a57855cab08b5c7bdde21056ba2fd83037e5d7cd4286705a2616c369d73037655fac93ee5a9c8d6e9ba6ab46325966bac66cd3ecc64ae65b545326d8e8aaaf5b5c2bcbbc57c7ae1aebc26cdafebc3aad98c6b166d36a96d64f175bb7c895e698473b1c66655e5a4a6c97b985f59acba6695a9a99924b3566d34cda98069bccbecac4320fb926d68e651ebca4a43ae9b494987d615f616159f98aebc857d7d59a06528054d7dc2ed715634bbd5c60ec02d576e96ac52eb0e57ab5fa7e19bfe2e517d0054ea0ff4f90f407d9522f5eaa95f6a2b2124ead78bda82153a70d9796948cae8f2c35ccf09ae6366535f2758daf9b5b57ff678b93c51c31143b08a4fea739e7004170249caebb07e81c0bca035a88eeee012cf74de7dc992386a7266166313dea2e31f87f93d08132a116ead855d350503ca8a6a25663d9340943091531e0b55b20869742e10abd7592c85226df2dddb629f2aae55226df2d35d55b45285e509258b1cb06d95487fd2792eecc376eb3d45487c5ae1ba6cd70e857c924ca3953c89973af23ff03f8e3efe4e8e09797c002bf5edfb84da6faf5e580d82560f61d5c5fc1f328b99e527174cf4cedea029be0b43d67f7b87ba3feb0109848664b936fb8de0cd9bdc9fd4b4a39c36a794929f3b276e3b57363c30d8ae7d9b5b1a30781416d9afc3091214b3b04c6b0b16bbc6c2abeb04f28047e7105c3b2c88459477e615f6241a1d0a74c35d20727117071c00d9929ff825ec8629c16b3724839146d9e04f7136ffe9fc41b97156056081a72049c2729368d1d4fe0093c471ce698427246a48ef61d9baeff5450bca7a6d875dff32c914b9443a459e1ebbeaf7663a17229a432c6637faef9f6b8b2e99fdb3aca0a871ddbf5cf1901e788b040cd0277cb7c51b3de6583e7f19f3cecd2a07027f8e541f19e9a9ad2983020d079aace5ae916e11c17b59a302dd56b69a92e0b16b55a519381f15a175e97aeba6626adcc3bf2746e992c0b2fe156b71a7691c5fc2eddb3cc839771faa64a65aacc3d7ac0eb9ab6ca3c585964c5cabcb8ea3fbaf6dd99157e793a76d5b8d4b0b87d975661bfd805b269d5cc99ff675c335886b515ac93e91bafe91a0f8b2b1f57fd6a3517665279bc4b2b9e7ed33755c2c7346e75f1d5603c586d4de6d735a646d72babad6bc54b2beaa3aa63a5ce3c22cc237db5324fd5bac82cba319c66ada64918985d6372cd9a8d630de79847db945b2eb15647715f2d55ab5aabed5a847518971a16b4f20a96a93a4ed7374e953a6c4c8d750cbb5d31bcc452f59aabb659616af8538d756c5762aab65ac996151646890b66d365bbf2982d5beac54bae31acb3eaded0ad9b6338d56c8ed31caf4b572d35e6d4c5ca3eddae6c4eba71ec5a65de9adf65ac8fcc34092f5d66d0c5ca69562e73ab95ae2f0d5edfdcaeb9f95dbacc1ca7d985b3abbe5a4dafb95b99a76aa17e97450db7eb306b63d6c856e7362d32e51e6f8fbc7499d9c8956f7c85652dc9c0df96580ecb12fb65851dc95956bc562bddd488d0cea5f31b79ca94acea5c45244f99929794dc574711c22b4febd708cc3cb5654a83adcb6c7f9907a7eb7098d321f34ddfb8758bea0a1f5b974df37098610d33c146a3abd5f48d75d28a371c2eddb33c1c0e33959c3393eaf365a621c9151954a65efa98560573ce527cbeecb6c3e1302be730ba299bce3c385edb65de52dc6d81f19fc78347f6a9ab900936ea37efb424c0d3c614ce9a989744b7cdbab854dd376e57e4775a68fce7e55fe6b599594c91bfec3bb66bfba66539cb0db13e966511e1ed9b2a6317b8cb82e67f157c15efb2b059b6aa98aa74bcbe6b99a92a476537ceb29485c57f03768d2d9622b068f0dfe7638929d17d9558ca60697b95902957c12f2f2aea0a10573cf0d16377e5aca87c9dc254cdb26b92350d0cb6f5f09f97a5ead6055eb52e302eba62ae18ac6a0dd4c91458d4cae0ae2dc9b5ea5a29f3ff622c9b5e81514d0583bc765daeb96d5aaa9530337e358e384dbeae16d5140ce3c85453c16056752cc62362f160249c6ec5f0bb2e5f6556ca4aadd39239f378b0daa63e7880cc4322874a263236b66d36ae7949296b984db5326fd88b5a0e87cb572c0f352f865db6cdb00bb7f15a360e979894861ad6af8e8d463709af6d8a2cea643eb66b5edf38c3fad8ea63fa6a35cd36c5c8e3ca66b8b8c6f05a5c95bf214657abe57449bf4a39a74a65ea957943226243e09c5453fd1adda6a31bb3b95699d7d4ae392573c1b2b15db386d7b5628eb932eff565897d0133cf85d93433659e722bf386c360e62dc13c60659a54ca70e629532fa678a964d3a5ccc3e23aea4009c19fcb7348d550b210249c2235bc545da0a1ddb20617f62c45d82d2bd82de72ce12c0b587ad92dbbfc4a372fed50cabeec949776e4ccb423fb946e66da919572f6652638a331d92dc99643fe67df9252aa74dfb8d5c2f48ddbd517038979310a2f7af62db169ec2a65df70286cdd616e630dc34a9e3eb66e7be44adff45da63b58081ce3c576f9c699c97d751478555bd59caaedce3dfbef5326d31866d9d4d8aeb186e197474cdf659abecbd45d012850f3b94288764943ff99ec93328de1e41ac72672603e1fbb228bbeeb72767eb10b8c5d37ac1d6bdd35ebcfd5f9732714d7582791f1fafefe9c09b00ba4e3a5a656b91248f87fa4c12e6d87abee958ddd9232e7e9d68dd31f8c2cc6a915efe8c64963cb9516e46a5dabab350d84d734500d83d7343076815cbfd805c62e50b3c4f5b8b2596b5acb75c5ce2c664f6951ab6555a7b95d631e6d5a54a6492193d571baaa3a995c87c30cbfae665bb5320f8d2df5f2f9864c729b6aa25657a38b957970da95795a8d4d2fe365326be210e61a0eaf8699b7a46a2666bcb6cb64d22d2aa99a09ca2eb8b53326fa7f43d5c594d5c594558a191fd819d918bd3cfbb2963a066b55fda93a8b2df55a73bb6057cc7df59276f5e20ddb75482413a9ca2a97324d0eb30fe6a541b224ca3429f4f9e0d655f595aa62a95ad5b14ba6eae4fa82c14cf64db35c574cd5b14b766cddb7ecd8ae30bc7ac52e908ba7b6690a1353382de676cded9a7c75acd50c2b598d641295e0f54d8dd985339c7999c7830909a7c85f2622210a4034c15b525a52e2b9594c1fdbd53db65fae114ea9a4627f8e1ca739bf2e31b94b8dfcdfa530be1b1a71550febec86ba571f55dda5b25f58ae320b66d9f48ad9a65eae2b26542214f252e212662a59d54d3a91c0099aff3e26b6a79d1323ffb59a9b04cbbc76f9aaec971314cf55aaf642bb6187e6eed0d2fec3449ae0b4a2db95757215cb5ad0c01904bfbc9e9a534fcde7db35b9c3e3f18eeddab6cb30b638e9f3c1b911ae5b170bfeb9ea32a85e3175127555974126739e5cb63a0f5d7519dc3189ffc3a9ab2ee1dd1245bc572b737ac5b2e9158fa9d39ad8e226cd2e553719bfae57512b836c6247cab25a376e7532ec17f452d3614c9d444cc3635abf5a4dc25321837227a64eb284a28fef2f899a53934eaeb113ecaa4d3b3120fee7d7351ed72d6dfe04ed04edc02faf08af49a722bc2677c1147e38e916f5f1b8bef1bbd46a2bdc6aa30f4ed78aa9b1e92817838bab4592891b4b69ac32ed9fda4d1d41dd085302751a91388d74258c54d6dd525797ecd52c9b5ea965ed940cf9305e2a87633b301cae5b3756db6566d2da81bd015bc6a931b76ecb9495fad549d735b65caeba0cfed277f98bd9b2d277f94b61af3f67410410fcb9079efb73c0156dff81476dffbd0cb5c90162c3093142c8bd0096884d2e0766f53fe7c2d9e2db443e3afee73438db2a9428032576fe9f57e84c51e28586e60d1708f8e0248204b1ff2771ad7209e570c687ffb907de62b8a0031b7b8aff7573e43c009614c21d20ff7345cc30f92243801b11fee7befc6063e93d1a12c1ffb32bab48a02f3cbe14f1dfa8c5183e42a85923429fff4807186044cecdb7c8c8ff13d0a1325312a9c901c87f1d0243126c902c3cb1e17f4e0780e795e36784b8ff3937620f852661a0d0f0c77193d79ddf0b8d17f21f72af9d93d3ae6bcddfbad90b1e0ee3d48d33da30389679ebd0c89579bc6cd4af7bc50b66e6abd586fa75af78af5653ad79593c647c7463a1506b63d646a18e97caa45be4696d54925bcdc66ccb359885427d8493abf2c773638d14e30d874637eb234ca23055dbf4c8e4c82466585d99c435338930132eb05f0a27e1a45018eb631eb6c31cb369d7283ca67032a76a7a7d63ed0a85c3624eaff2aafc05c78caeaae3f45dc6297c74d9b4a2caaecb76cdaf56661866d26a9a4416d71409e3c091df5523d9e551bf4d3017d8ef4dd965718ddf54995baecc63c62e0baf6557995d2eb05feb2a9742619b167959bf6e32c36b9ae1340ff5f28d8799f9ea2594b5cc348cd35c559587cc5899cc5923cb320f5657572d6d35bcccc5f5e8b271dbbac5d86561a6985d97c4ac894d701ac36e7209c36966d2319b4e8f9ad5c8b214f65a4a61271e4f09ed17f462f20b7a318942550b637d5c8addd6b8e627a534afc8d8252e291dc9c8dcba6b9a8d6bd61aceeeab89af36be3a3e1e53315e9b26330c6b56a9892c0b8463b57595f070a8e1764d8f696e9770d66969325ebac434c3ec9ac65acded9b6ad6759559ab2e32d6c9ccd3992d5e8d5acd5c606c3246aeca545874552777e51197c8783df290451d3bf960651c23b34feb606ecacbb46955a64ef093dcaed985d95f6eca30b34db32666b1e098576ecaf0aafc6536557ff975c9321ceb239bba7166c2a9ceed0f2ec65a2bafca5ffa2e7fbcf45dbe2e0ceba26e3317d82ff384b1cbc23c55c3cbac89f00aeb561f95cc98e92af3d277f9cbaf6b8c5d16e6a515d97599c2ab32cdc361d6483138ada8915730cf8d33f34dd560234f8b978d6b86b54ebac578e9b6e9aafc957df156659a5f9df6ba6b425eff51cdbf0db979bd29ead327e92733e5df75fe648dbf7964e32793e3df07e4e0b4fe21faefe19f2687bfa9c2ffb6fddc3a7e23129e8bbbcac531c1e2f6c34f2611fcdce99fa6833f8d073f95c4f8b9af7e2cba9f1bcc9bf12f4af9f7026f603f19d2df04e2d6e6dcb27eea1c3ff794dfc90b7ff3c41f46428d0c7f7385ff4990a4fc8800fdcc1f7eeeb2dfcb9e7fefe01657c2efa5869f5b05b7b638a437e58f44ede7de7f979e9fcd00726e30b02dc9bd75f9a9e0f8f7935f6dfd778aff596b4efcdc8bdcc2fc5802fd3b3eb70bec911f01f46fb680c16f34f4efdcbf44fa9b728ca2fc4a36ff46f423197f242216fd4efafc4d2c3917923f52961f919adbf9b351fa9b4c53d81fe9ea477ae03f94da0eff8efae1a8f8d994f123c1e0e74ef487a9f037d5dee0e4dc8e7027fc5448f877d9df56e5df59bf158f9f5b450221f7d6c05f66f77303cac1157120f776440eaeea77d2c0dfccd918018e8b9c9b107079fe2966febd736f4fff8ec4bff3c0cbdfbaf06fddffa580bf49e7d752f63785ff9a3f3f9be7cfc5cbcfedc1efe2f89b07c0ed1cdcfbafd9f8b9b5726e1cfc6b84fccd27bf1af637c7fc6a2b7e6edfcf29737eee177e24147e4437e866fcc22ffff6f3e6220e450e8e2baef71ba9f05c1c977f4bf3df83726e3ac4f98dee3c17e7f59378e4e7867fa3109ed3c9f0c726fe9de7376ae0b93806feb00c7e6e337f2ae66f1270c0941fe9821f11023f15267fb3829cdb08bf6ef85c1f1c6ec11f49fd910cfd49223ff7ff23f0df38e846f8e188f99b30c45965f04f79f9af10f8dfa99ffb065c08ff0bf673e3f8cdf8f9b97bc8bdb139b741393763dcfad38ad3cfed271717e72f00827fbbbfbbe8df5a7e221efcdc4d5839381422e4dc0afd485c3fa223fedbf05c5c04702b7e13cae7762ae4dc76f8afe472fcb937885bf3b6736e28fc5f5ffebd41eecdc4bf83ffa744b9ffcab6e1cf4d25aec9ffb3e7e0c4de06fd6106fddc33fcc243ff56e02f00eedf3fb89317c7231797fb7728fedd083937b0eb68fc6144f8b965305a200727e35706f9b9937e36cfbf913a17e08c8a3a3db93736393829bf91207fd30dc9ede791a99f7b80dc9b0b7f13ee67133eb9b74539382688a8fc6e0a3f379a7b93e137a3f63751f88f28feb606aec3917b4bf207ebfc3bed3fc2f8aff0f85ba79fbb442e2e0ad19cbf0bf36f6e90b342c191d2ff50fea319ffc79e7bd3e047cae047b4e68ff2f57333f991acfc88f47f24064cf06f2eb9b7a8373439373c88943f16373f7799ff6a604ef8f7d6ff56f037e1fcca1a7f13819cdb0c3dfe98807fa3c9b94abf9315fe2d27175725f7d6e447d2f2238a7fabf3e71efe43347fb3eacf7dcd6871f46474ec9120c638559c9130d321697184e587ffbfae8373694b2a4dcafd70e1eb005e90a8fc0887314520d13012f24b3323578311528ca32e321c08011a1849d17df0164830d6ccf88e726b8ed48c90c4a0a1d0919d6f9a7ce494208211c6c4d104ffcffb62f88f8494764e71f3ff280d0fa7161467917301eae80d54d99d264c6094e84810dcc573bab6dc0ba33e2448e438b82e2e77444267a4bec891a0714af03ff79e094c8c0219d541127204e8ff6fa4746e39737700a8b1c3a8870ea31227be801a2cac94482231c0939c085125e8ecf4e4521cd930912bda01736ae55a5d1589f38600e8713ae596c8490320bb0f6795f306a9ffff7f374c7466d2e50341a1111297dc8f722c18d9f0ffbce02ed8487340ed279133ce9a53851c5c4ee94ceaa9a34190d3e3c408ed50677b1a21916094e371f689596412ccfda40b93f321462e0aed24f1aaf349e154f19f548cbc08aa97b92aa1ec4402a653e6be55b5c268ce90e06928f83f47a344aecc738fa35ba342ea4c4e451968dd821c171265ff121b6818208a61a680b9f3ffa949d56f8a848546a492013760b6d498e9fba63f98ed1a7bc1201b837e5903bbca64af49ab6e716d9752fe264484f09676e07093afcbb269bb26d5b4003e497b5624a1025436a2acd9408b990e22dc8657d48e5e598f5e393b7a0578f4cad6d12b438e5e793a7a45c7d12b308e5e291100120a142c50281d1c85d2c05128071c8542e528942294afa350861c756b70f71c754538eace39eab639ea8239ea2e8fbaea7f172a56ecda3d475b128eb6161c6ddbb4568eb6c4f6c8d1f629458a193466bc70913ce168f283a3493947935d8e26a11c4d0e8fb2898eb23d1c65e18eb2291c654938ca4a709485739435e0e851890593b4025561022db1c638ba92388a1c84bce128327814897514597514c93b8ab47114f9e22812e9e831d1d1a3a0a3c71a8e1e5b387a34e1e8f183a3470a8e1edd1c3d92397ae472f428e5e8f1c9d163d9d1a3d6d12390a347a5a3c74c02805d89004e24a94842811ac51c35b21d35228f1a9b1c351af98fa2040aedc1515dc151edc0517dc0512de6a8f672545d74541574549de1a8aae7a85ae7a81ac2513583a36a9ca3ea97a32af3a88a3caa961d55b78eaa54ff033851025581162d385a44e06871cbd12294a35a7b8a4c8e167d478b3a5accb8813a8172d409da5127478e3a713aeaa4c551b4238ea2d970146d84a3680f1c45237314adca51b42747d194a061c17081234612da0047d1641c453b7114ed479bf470b4c90c479be039daa483a34de41c6d82e67f8a130124a5407ac184cb51266d4799c047993439ca04ece8123a4797487074899aa34ba81c5d323cba04ebe892a6a34b928e9e1971f4cc86a3672e1c3d23e1e8990247cf08387a36e5bf0b1a326224c940cf721c3d2b6156e8a8190d66271c35bbe0a8d996a366c6a3666247cda88e9add386a8662868b194ce80b14975136e46859d3d1321947c9141d25cbe12899dbd12d2947b7d08e6e511ddd8a7174eb478f0c3a7a0487a347f21c3d22c2d1236c8e1eb172f4487af4c8d7d123448e1ee971f4488ba35a828e6ad570546bcf512d118e6a417054eb80a35a638e6a6939aa151fd55a8f6a791dd53272548b69c763b4c85163f7b7d8a1275608c002cd6296438485cf7f3c2ba0637afef3ce7faa70a6f09f28fca79dffacf39f27fca709ff49e73f4b40f16a66dae502ff9304dd39c2ff5c08a7086708accaba5bb186e1dfd89acb6a2b26db7e1d9794d2dc3c6549989960a501a6642625a64e1332894221af81aaaafc2e8b5dba26da56e2ff6acc6eab3b01b5c2e7e7835ad9f23f6e7530ac08af583f2d325ed63a988bf997b156233276afcc5ce37ad47a2d452ed778996557fd6a1e8fd56dd22db62bfca6c50caf6a299cd556d56a0aa76b709a74b30bb369cc3bf274667a332fd6f08acc318f16595c5f9dd448a55e93396d57b4e190894ebac1610a675e6eddf5d56599a757b4a1d1d544362ec2b058118675112d0bebeb4a286459bde6f3296126684cb25ecb4c4dee31c35a6d3dfe328f4985e3764dd7741b2bf558e66530afb02d58a9759acaea156d98e6ba5b574326f0aa12d5d4d75dcbb92b03631718bbc0344eb19856aa0683c732c86939413831c846a0ca31bff1ae3904258ca3aea13fdf80732ad096863f490398ff458e26775e2a9e3ccaaa50d3bc97796c572613264c9800a04dad98f1bbaabfa4276c3c784d5fac371784c08102eb01875fde6a0280d675e10ca7596dd3d64dd95fce09597c73c604fee766d8b93ef18f50048108f77fac7d35580cbbc5bcb6cbb32b25615a19595c26c1d652a418af758b709b16739a8fed1ac34b35d56c315ed9b5981af53185974c6b2e32bfd9f5f994d08630ccbeaed105baf19adbe5b2a55e705abb445e1ddb952df50a7b553198eb27e6be7a49ee069a45644a131830cba66fc364ccfff306ba044eced9d37f07d0b212fe0b555dfccf0ffed383ffece03f39f8cf0dfe5383ffcc0003155f8f929dbd755b153f1e1dd371a32a683051bb02898a825a61264c011a2ce070912c490a7bc15e6106fc0f33a6705209d2ff77d9baebab95700a7bbd1a0c664bbd7e41afa2d1e8c66daaa65ca6b92e8b361c3219661c38d08643264c9d366cd2ac72299623478edcae59692ae7dc94a798a43291a62cc51495893435e5a528a65e26d2947b4c50b9a92ab79948535666a6a6bc14a59479aa4e6b57363359f54dd7d662ebb6f9d8ae4bbdb2b95d739ab5ba6499d25e770d4e63e65fd02b49461b522dd198bc4b4a6843a65fd02bf3e038fd05bd786b1cc32918335e8babaa5fb0350d8c5d609435ec755f4da6fe8cac0e1a591d5c936b17532781631718bbc01509c35e4c9de482282b9c856695c0a273b4060e476bc070b4069fff294c0c806205d9835ed171d2c595fd5950244e15969c07681123554f555884e42a2c415600799bd4106d55587ac327309e11a627017ae4b6bfad485b5b1b91b6366193125a85e5553c90ac32b906e13dad39d57c87128d1757c1a22d69e74297228015e78936004cb41000e9a884118a1c0c1b2468d4982123461b1ae40710e49454541a055ed79650b1cb0645594ca63dd15447e3abb644660e196dff6b44f5a09e9c784d4c3e7a2c29f11860878e1c386e641b3568083043465b0c182f5cb4609184560d11e22bd2d6d646c4c94710aa284cb635b5650cbf50946e9b64d39eacc8e39233b332b231b1609812b02fa0575712245c5b47b4b2b0aeac7e41a86ebc6d065a4350db63e40ef5e4be7a09d3aa755778555bb1d2fccf290df893eeab7524a8840eb4068c134d0ecf99d34905336668ace9a134b4a034aa60718d8d1d0172858905737a8000465c003eb0460518a20260fd6ffb4bb4fdbab61f801d10120cb12b5341a67742ceff9b20e078224a94738b96629a05cb79a54d833ca80c16011ccbd11858e097f7ea2d61b1fd616005c5afc25985ca594061504d91f277fdc4805f4bb8c2beb6f2d06b0c28cc3af20b06b3bc845861bf32b031a1d9cf6bf8a5c07f16475f8cfd87f26af190c554e7d6cdbc774d954332172ca77a2d8ed777edd56a6b461683688b283f2c15056d91e287ca41a6501653d42f30358984ff703205bac0184ec15aae581fdf540c6cd834ccf94d330f386e3556f6016b969832db544aedc754afa9a7d352d66a65b2526a9948538e52cbbcd6cd4c5c5905aa5be05735307681aa8e5de06ae5ba623c1de50a5de11e4eb760e31756309902db142906c3ba0b4d11084d21a6a8c972daae5ec1a5214a68c32525b4e190896b6c6358c7e9cb2e8d1a1ecbaf6bcc6ca957cca6aa3ea66d9acc193d11444f50fdbfc184021067793166500052fc319b16a6ef32454d20fd77d2c737455ee9c65cc7062d61e4544f50bc271e5453ebc24f845a7d352c96c27f51126d6a544f4dd8438f569c97d431d7d96b7b2e86911f4c9c5f0beccfa17496982e75d20d9e314c44754ac3ff308e1a2902e23fecb64cc3216a74e7ff9ca3466abc0c87f9d8a24669a851939f29fb008842cf23986c4efff33d95778d2d97d65ab02ba6b6bfd675c5dadfebaa5cae189ab3e0cad19c169a0be070ef75b5aed238c5327ec163ae984ea64066ca8aa95cbfa097aae1b42b86d72e578ca993c04c9d2466d340e3972b66fcfa19bf8c5faeb1e57a5d2d58c98cdb6536bacc364dea640a7c55f84a5dafb49229063f653786d718fe195d6552c7f99713795006ff825eb086631d0c1abf62387681b076b16055c35c573a665a6569566d114dbd99430caf5d6c69bb7af99af252bb7ae5cc947550096ba8720db32f37e5e130fb7a699969a8e1d4ca0795967d305327c94d9965d3abb1ff6cf7fc9ff25d11ca9d115a67ea34659af4f97cbe2280b85eb2ae56a649a7d725c20e115a52ad1281f51f6afb976ad7a126ff0f11a1faef503eb4e2bf61a80755b386bcb8316b08ec37e4646847a144c9556d5763211e98aa4bcc545a6263d90516bad3baf013272553ace94a4a2a48105f0cbb48279f328e9154d098641f0e184766c2a1a67a4bd551d6581f8538b20f078ecc84e389d7c3917d388acab775e1273832d31354f6e150571c520aa1f86fa84300310410bf31440a434870e3d8aeb975956b1a3c845a1e42486ed763bb363535c570ca121282100f30213c8414f8637865d3aaf6f97c3e9f8fd053f61df320b7411e1c7e7983c0e4a663bbc683deff6bba3d93696c1af2c98a3c1ab57a16959968c47fa64e4b93ff990e8568f35d0b69dfb5a0bf6b6178841404a0ec93e0d91744fc675f10439e7d41fcc2581f81b0f3e71d106d7ff601d1f5ecfb0190fe6181ec637f90f201081f2c78f6f9100fc93e1f74d9d7439e3ffb7a68f3eceb01f9675f0f4fd9c783a13ffbe8641f0f5a7800cb3e1e6064df0e12fcdf812dfb763ba0d0c12dfb763a2875a0fa9f7d3ae8feec5bf25da03880c800da02280664e4d997839f5f7726073039e8e031636512765bdf52d9ae594dadfe98f9b3f64789c3203d2bce27a793d7c4e4e3ecf1a358aa0d219cc52ed0e8beab922d0b4eb7d8340eba5afa9882a95cbb1ab8e8286bb08c9906587f1642ff36a3fac308faf7cfd858fc6c5f3fb7f4f9b96ff89577fe0de74fee9f3b451ca334567e38577fd30f10a304fe2e297eee0f7efc70949f5b8900a33a6f884749bf54083f371e0c4c18fd636cfe66947f77f4ef2aa871a4e65752c3df6cb1ff24dbcfadfbb15cf0739ff995487eee17477c80c507e24f06cdcffde77755fc1b78e7171be1df6faa1209b1f57fb5fd4df89fd2e7e7368af9c710ff1de69f22e56f52f0f36ccacfdde4673af99b3100f8c162f87708bf1835bf1804fe2b3cfc9b88261335f28fe9f1efb82931ca74cb9f89d2dfbcf257397f6ef7cf12fcb9e39030c45f46837f77f0078bfcfb07452eb8499178f29bcdf99bbe5f57e7399d082940f0b388939f7bc58d1f5efedb813f3ef273f3ce0df67379e0e7eee0ff2232efdfacf32b59ffcdf61bd1fab993fc5832f8b9d1c8f8d5f0fccd17bf919a9ad5bf4dc8f2bf74feddcce127190a3ff7d8cfe3063fb7972b3f11097eee1e045cfdc417fee6f99b45f09b1dd16707dc08c6370730dd4ce8f02d4406097ee392dfb8feec32f37303c9e9ec80f0e6ca38f7531f20ff920a7e26ff8508f9b1729307f57bb1f16f1e8a744428fd5bd49f5b82bf19f7b3ca0b3cfc5cd0bf997f13bee7762ce431ff12e2df6cfbbf4af8b7fe751cfc3a16aea8dd840fff0ee9df75f0a725fea6172913bf16077f0135fe1dfaef4e78f26b36ff2621809f6043fcdc563f970e3ff71061127869f83726fdfb863fcc8c9f1bce88061780ff6cebdf28a67e18837f4ff0b732fccd35102cd262d3ed0bd2f4bf56e3e7ce6a5af0a7d8fd295ec0f8b9fcf9b941f8553bff7e32fbb9c5e2e7e661c5061d294852bfb1ccdfbcfab524faf709ff19ddbf8b381511f2b348e4e75e6b9af99513fcdc328cda3c6784e5392317747dfea335ff11053f012bfea6220bb8fe251bfcdc5cfe31547ff3843f0d977fcff05351e1e76edfe6f05f73e06fbaf90fd545e9e716e17f13fddbc7d1ef4fb2f0ef435a2cc2741a28fd66a6fcdc3e0c7f2929fcdcc4dfa8c1df44fae32d3f37141112fcbedfaf9a38f443d1f36f3a419a84245c127f18167eee187050fba7c0fd4da33fcb0c3fb7025b903f96117e6e036e24c3cfe6849fcd18926ef89f64f9e7df8166f8d78cfc4d08481039a22308028a9b7faccbbf4f10e9fd318ebf89c40d100ec59f6a0c3fb7143e5f7e2e407e2ebfae1f89f8230dc1944364449ab836bf46e1df597e98819fdbc7afebe0d7e5398321510f65cc7eb418ff7e33e1bf9d5fd7c70dd102bf10dfef040c00206a8454f01799f17347fd48633f92f0cf82e7e74ec00dfd97fadf6a6439287f33543ff70e3f015cfe660747bc55f55c2b9f5b11adcb723af273ee13607435fe78cdbf05e9f07b39e1df71c2fc637ffea6144545e01f2bede7166394c14f18cfcf1dc19f46817f13522225ffb03eff0e4383e87f89ffd6fae1b8f8d99cf1bb39fe6de6f79b19f99b41da7e2eebcfcd811bf1f762c4bfd132ab5f17c449fc6f312604f8d92cfd6ceafeacb49f1b835f889bbfd987042d7f963c3fb71caa00a0fea5f2dfc4e56f85c8dfbc408704ff10877f7ff0abc9f0371df87f4e3fb7d91fe5cadf1c139ef8af10f9b9b7c005fa5b16fe269b213f93c8dfecfab384fdcd0cda18f0eb3f7fd34af87329f2ef1536be7ffc560ef87705715a20f4a7c87f8a017e3026fcdc6f6474f99742e76f4e80c4e72711177eee008e3c6774e639a317fe3348fe8d00d3ef04887f63314a0146a6e507dbe16f42a5d0ad786b734bbc79f9f8db28fad94431f65602ceffa726c47f27814bfe36a8fc360c2d2139e0d72d7aaecfb9f6a7c8bf49e4ec06f088c77f6682ff0c05bf59067f93ca6fb4f6eba8ce0d27876888ff8b82bff9046622033dba1b8ce072ba1d4e3fd1a4f9b9150d79f8a710f977037f72cbcf7d54e5cfb2c3cffda64f8f8db6a340f9c35dfe2d035c073ffea7403aff56f475e482851e381a787e25597f330e0003048473dede76bf90a9bf8d080bfe36e5cf6de52f33e3e7d6c106097f1401fe4df6279ffcbbc79f02ff66977f77f6ef36905f8b849fbb850bfec3a181f0ef08c0f0b82eea4d30b0167ef7877fe3f85f037eee1dc2ffccfeb97fd8f18369f28329fe612bfccda8b8f60706f9b793eba07e920df07387fd5e863f779d12bf9219fe2df68379e16faa7f9ae5bfcfde9ca144073b3f96323ff798df090c7f338b910181bedc68863d34fe07d9f0fcfbc8b959fc60b6c07cfcdb4d98e247bef8770c358ef8e932fddc13c0a121e03f16faf70a7f19367fd3ce9f86eddf2fbc51745b691bb84df9ad6cf9b78aae1f4cc70f36e42743e8e7ce8109d75f409c9f7b8f0f837e33713f370fd7251df80303097e3537fcdccd736f9d3b8a007d901a704bfacdfcfc1b099b37567f98efdf475c0705aec4af24f96f176230224e8134c8a622e1eafc4c76f83704647f96097e6e048cfc6374fe6600ff51cabfef88e5ff5df1efde4f80fa6f1d48100dfabbe0f073d3b9ae489637fd67f9f8b91d60e1821fcc9d7f1bc98053c70e55911f4beee7feb2e4bfe2e7df03fc4cfd376588a026e86703fd3b07e01df8e11afefde21ffaf99b5cdecccab9613bfe22897e6e22702ffed6cbef9efd4c3cff36e08d8b155c8aac33fb89bc7ff7f9e11e7fd3c56f14a789fa3785fc400afebd0607c30b37fc69fefcdb875fb9f673c778e0ff991ab2bf79e70772f937087f9a297f3305b82664fee38b7f2f1d09f0ef963f50e985ffeaede7bef22b67fcdc2dfea40fff8673f21bf0e5e716e28fa1fccd047a7db4fc6d5ffe1dbc8233e64f877fb30024e9d6ffc4f63ff9a9a1c5d6afc4eb6ff6badcbefc6a36fe2603487fdbe6df2cfc073cf977979f8ca2bf39c098a6bf4bdacf3d025cf1af92f5732bffb6fdb94d1c152ac295f90986f57357bdddf87746ff8e82ed81db5b1e97cd8fbcf2ef28afe0a7e2f4efafff38e36f9e79dbe1f6fb592fff7e7fa40a7e4468acfc6d89fe2bbf1fe9851f91058682fc4adafee6325ef49ba5bf59dacfa31d3ff70c087e2befdf5cf2b72afcdc28fe24513f9b46c7f6df75fdbb416f3a70f8c304fac334918e7f70f96f018efc5190fcdc4b0eb135fc44e0e967d34410207e32547ff3f827d1f3b3592201a69f39e6e726fba98cfd54d4d85c177f0141fc4d12bec92020e717eafe7df57f09f2378b82e2d4df480e3fb792273affd8d8df64fe4214f8d71efe2f66ff4ef4ab07fcbbcc4f86fc9b54aeefcfb5f87333c6e4fafc608386a8d0df7cfb19c6f50bd7bfa9e5d76cff5eb57e25959f1b065c98df099e7f2bc1f9b94e09e34fb1fe0d8312d2865b7f360efc6c1efd4a3af837ef6786f99b614775fe360c7e6e2c3f93ece70eaaff989bbfc9f62345f911a531c4a03813ff5376f8b79417705a18e0e158c21ff6e2df6d7288fb917e3f9203767eb7fdb955fc1f2eff665af03f3ae03f5ae01f0bfe6342187f1aafbf69e247a2f3239df01b3df01c5c738d2e75fbb1e8f073a781cbf1bf33fe5de36703f3737f1915f167c5fddc25d0c9b945fea29dbf19e60f5bfa370d35dcc0ed8163fa49f31bc5792ecec77f5cf1b7e1f9a1b47fb3cdbfbaf99ff030c3f4bfb1fadf5cfd6e9afff631b7bc1dadf953a4f853a828f31fca17c36f24a2e994e248dc024f88dedf4bf3e75ee1cf32c2cfed06ee2d081d9a4344048e233ad73dd5e98312fa9bec4f2b21c46e54e86717decf1de82ff3e4df31fe9d917ff7c38ab8f70887bf00de5f0015047e20a07fcf7191f47f71f9dd0af89b14f9f7087f72fdb98d9efcc82d7f13ab82379d8eff4aeae7860217230b0e6b8604f8bdc87e365dfc5fb8fc5fc6180187c21f06e86f4a217fb07023f22b41fecdf727e0f73739f89962fe66d08b8db8233270677e6001c0963fb9f673e7fe18e9df80fe2846fea6185c9b1f4ad6cf2d00965fc90aff66be31f0a7e1fd3b0515e248143a4bc2f581927385fc464afcdc455e78f9aba27e6e00ac4c8913f3b359f4b349a2ec0f53e26f9ae0b6429dad8cd35d5d27c03f85879f1b1977e30762f9f78c2abf171cfecdc3cfdcfa9bc09f28f537c13cb9e97e27377e27bddf6cc9df9cf2051783073cfe0216fdcd1138f84954fab9df1c9810a4a537157e668f7f6ff9d310f16f0c9cfc48287e24f68fd77f53f03387fc4d18bf26fb9b64fe3056fe305c8cf8a5acf07317d75c1f157f7e6000ff3e2ebd4190054e85361a9cfdc445ff866f82ca893f4d11ffe67a53cddb0d6713801b6d129ee278c9f123e0fe3b88222239a83f19c3bfbd7e2bcd9f9bf9734b103f370e3a1f1f164d7ea4b61f11da5f80117f1304ddd81b2abf7082bfb9e567a2fd4d25cb068e76bc49f999607ff32bce0160160f8ce2b7117e250cff76f19308c3cfbd1cf47f69fbf712382e3f1321fe2d029c6f82ff6bf9839d3fa231e347c3e0e736f49fc79116847f0361c40d6acecfa5c9cfad41f035e0082af1ffe91472f9b9d388fc54fe733f81eb212273a32a6f3e7425e2aee41019fa0948f3373df8d772ff4ee6101d7ac391c1d37f26f637adfc578c7eee2c3f16187f3309cff8a35cf03725f8b14efcdc5ada3f0b8d9f9b4d9e1f0b7d5cc0b97045fc8381fe8df43329f837073938167ee103ff36fe2f7b92f4ef2e3fbf16ae7fb7bad3ccff9e94fc6f23feabb39f3bfe53f4fe1459ff6ef7ef4c882b6385e49627109c8a231a7f31cebf971ab432fe3530feadc112b80de0dc9fc9f537bdfe2842fcdcc29fadccdf4cf21bbd792ececd6f15e7e73efe3b15ffae0437343fdd0b7e6e0be082f87727fe9d087f1801ff56e14f87f89b5fdc86fc55697e6e17d7fd743e44f06b29f4733ff0af71f26f3e7008fc5412f57363fd59e9cf5d41937fa9e3e79682f2a781f037d3fc647ffcdc0bd8f06f69e1df397eea393f77953a6b373200cf75219c7b0d9c983fac867f3b3df00795fccda9ff55fab9f303bf990dffb6fab508f16f3617fc6b5f7e6e2481e2ccfc6fd4fcdbcb6f44e7b9b8311422f891c2fc88b0fcc919ff6e61458024ffb7aeab00f937d8cfae1f3ff7d4df05847feffe36ad7f5bf057f9fdcdb31bb9f9f9a5f97307f18bd1f87710c69f6407fcdc623fad8a3f378d7f0dc9df7c601114e61b20f7caad055c12153f962f3f3799b7129ca27ea6957f0ff9956cf037a1b80500b7fcb3147fee030650f10f05f8b704703ade3688e04703fbf78d34ffd5ddf9ef2230f27f83e7e05af8d3d6fe0dc684dfe884e7e05ef0a1db23e3cdfdc934fe5ce1b938e09f45d0dfd4e037d2e0b9b809cafc350e40cef9f79f5c1f1fa1b17387701d93a09cdb073bbcbda1e1a752fcb9d91f0ad7bfcf48f99936e4e756134766220823108880dbe18d8adb1106fc6ab6fe9dc17514d071ab61853f05d29fe2861b12981f91969f2dcfdf8ce06f3bfa9b4c1cf8df3ee756c4afa5c2cfade7467cfe2924fc4d1abf011dfcdc837ef8cbcfbde4e6e4b762c0cfcdf686a509003b7ee20affdef13399f67333f0d38c8c9fbb883f85ee4fd1e26df9f32b819f5bc86f74e63938403f16f7df53de926f7cfe2a26fea6d9bf24f273fff8cffc7515c4b1f95322fe1dc0cf250efcdc4efe27e7bf4b88cb3f9931ff4e5af3d60115381b70557e2fb99fdb84283f7efdf5377f6e3afe340afecd00efb712e5e756e342a60637207f017dfe4de55f9efdbb85ffa8e26fe383d665cfff06cebf0bfd5d41fc6ca688d3724445fcba13cfe95a40e266c37f40485d7e4457d20a08e15733f4731bf98fd8fc4773fee4efe73eff306b3f77dc9f85f67353d0260ac1cdcf86d0bf65c085fd6c88feade6fa04e076e6a762e8df69feabdccf9d74c37a9385df18ff4db4c78fa6c5cf0d845beeedea391d97e774717270546f7270fc6cd2f6736b2c23356f4c904c58fa91d6dfc4f12fb3e7df558cc441f0abc9f1731ffaa7e4f073af644869b9b83339b8b61f0a9f7f0bf11fdbff78c49f92f9f71877ea3723f5ef0be0d07e31ab7fb7fd64f4fc9b290154f72341f91129e90acba2268357e50f5e95e9b1552657252cb6e65e4929209624b51b12eba0eab6708e83a428b3a49e9d2344927a4f50253c84a42718fe95e47403d7d661a323465a4659494eca249efa1b619530ba32b2fa4fb56c5aa0ed57a44c6102e2690c6f49626285493e12b125f9b0c04df26124c9c77f36fda66a9b262d6990b4942386f5317d75fa664d4d4d4d4d4d4d4949494949494949494945454545454545454545f57abd5eafd7ebf57a505050505050505050504fbda7de53efa9f7d47bea3df59e7a4fbda75e9020418204091224489020545454545454545454544080000102040810204080fcf8f1e3c78f1f3f7efcf8313535353535353535352525252525252525252515151515151515151515d5ebf57abd5eafd7eb41414141414141413d3d3d3d3d3d3d3d3d3d410509122448902041820409424545454545454545450504081020408000010204c88f1f3f7efcf8f1e3c78f1f535353535353535353535252525252525252525251515151515151515151bd5eafd7ebf57abd1e1414141414141414d41354102a203fa6a4a27a505e49aeb3241b57d2573bb1a90eea178c4dc352582d6605b3fed86d9368a0f98d8cfc46457e232255bfd190df48c86fe4330af24b9ae1c09366189f346387d66d0cf02248d28c144f9271e74932c23c4946fb2419584f9251e349318e78520c1e9e14c38427c5f0f2a418c89f8c4d8b6ed7980b7c756aa5a6563a0c46c6ef6a955ae977192fb55836bd1266f6eab8c23c550be16538d5c4948ddf9598d3dca6c4a5359785b53632d396ab82241879d8142d6b095750889585f57505cc12867d85856509b3bac6b0bebc84663f2f9f2f4e8fa9d27d955d6a448ea91858abd35c312a22491d73b9accaa5dbf5d866bd40e102882f29e57e1651e83f89380fe5e6b430824914c270aa3454e869bb26d7b708afeaf724b5c84310fa996c5c849370ba96dd2d58a884c99260c142368d53639a9b9986a471aa26fdf0d525d34b28a9f22b85d5a2f6f9f47b34a91faa469bfa2195d435831b2b996fb117a57261c52e1b94fab18463978563970da22b844a65eaf305819a9aeabdb0cf575c59e2126c8745d5835a26ad00c1c44fe5492b8ce09717af44aa1e94107eb592d5487625be1a8c65d7e4abc160e1ab95543da8b112719254fcf7f9925444f90fbf3ca1aad956e3582a541a359023720ef0f6dc9e1c0bb91412483ae101fcf2d454bf5670c85368cb0f77e25891408a8d2112c45156d4ee04c29383cc92152b9f92160b0c205809a0c70c40ba3164aac489e520009f37862a7220f8426284c99f2a491a9240f033465580001ae2e5cb36558c045014844d111650d183e64e9325305d54d6ac215970a30a002a4533697464a81142c5094c02231942464cd9019079001b52618a1d002248a14e0faa29644a1090b647ac39e5cc012b2d185d8898a2638b9e375190845206a59db8001155971410b06cc8e2238c96942d463a9c0454f59102b6e787299f1a19a4c8d021eb4611674ea204daa29bc174c44a940b80fc989283d551a47c29604835811b45cb8490b6a6323051767112190b9040c99c414a0500d6a278311b20034788993b55cc37802ea73971a09843fe245989a3b03049ccb0cad384881c5b9f29534a244e8e6c6ece78c900822706d88e0ff896c40a79c0d60be2ce8d1527ecb5455c46a47678d364ed8e8f4d1d20aa58b07686c8a2cd08bd01d68446624d88b228d794f6a87d716ab344ad100c3ee480a1d242ad04136c7812250d418d80632021ee009dd4c48235cce21001a396adaa4cd0b5086ee98391a23f2cf0105a6ab0671170ad049d655b03fa8499e471894401371bc02a38b16cf1458315b88421310e282ee89d7044318ee0c8151f5c58f3265ef6d13316478111ff96506820e20e8bf8842001d29435c0058633cb210266980e4ee0060e70a810f381d90346d0bd6257e01f7f9ef830516b013e8161e029c2136f0b48a4fcd0848ae055d3ae40001a4304bcc4124824704584dbdbb4e845000ea1209422169de022469819a0d4e949d510252e0728623800415199b3342866669ca07e2cc8a0e498b3c384d3b0530a825d04a4d0f4a0fc60698016752010536ac93f60b5f172a5049331c6874a903dca18754468bbd3c48a0ba84d9a16922ef2b81650c982a203ad72a3104b6c8094058d9b35c3d723ad8d9abbe20f1a2144a0c2d4caa0bb41a599dad032d066073588ae5869a12009b321d1914d2b04821a514def9816e9c605271470028aa40b1a889912a247996c23e622043339e890343e10c10a565f3f247b37c87c08c0395845670e32467800845541aa072329ec145833644038804a051758340dd0ea88418185e551a7ca8f13555369854e169cb86a8f34129ed4a0c80a1204695ec6ac40f5d242480baead31a444f694666387095c1a18d4f584871f72545bc200f0240341524d401628f1c44aa0bc7586043fe1d212e3852869639eb05829b0ba438662bd41ec0b320e16dc0a41b62180167c84d67807187171c425ab110f6e90400260052b00261ca34c80e402e4db710ba211de962013b0f186b8086b0b99a6f10051e40b0039f54309263c68e290392f2f9495584b3ae649518390033a7e38a68182c112206810704c0d89a9200712b723130854021d6171311281488d0f4fdc50194f20da204408166c6398274700125e19632cf39287030cf4a030e27801ce883127aab41036485852852dd51ec4d02da0360f3acb112d2b0ca9008406fa79012806b3d0302658fab91a73a5e630421137fc40f143ad20cd9951841bc85466168bb0a70cd8542c205771a113525057304d15b184845384e10632332b238b8a0b64c0a685c0b157548e399356c116138a3e2b615981e4ec291ef5e600f1810706887c0e058582b2162202386a1c11e86e44ad4120365afe00110a4d4b143eef9222baf342111948a14853f05d318d69029796b9333542112a6c691398001e0b880ca5039ce0b6c34d546738c4949a963335e770041c653e25426e865d8012f0baf0b86018c600d9173861868634decab258e82008e10e34d8906642484898c18b40827c19f0105601a3000cb41f5ee196120b1390084c844961a67860692a7062c3d6988b1dcaac3879000902b60fd03c4ee2a3b1a6a10c704e8ce8b074784d89c089893849a43f298ae6d65646b5818c255a1ca3044d6814d8417b5275c39601809268528bbc906a002b433b0bca3e496066133c36c8f0010d63d2c4002b5b21fc6498d224edc531400fd753131f5aa470e430c78b0911464d78e020573131a10d92a01d1dd43001d374f5811000c030212ba00d1a27210a30c15182ca9559222c4b80888178c4a4e9cd920e5acc00324547952558d6b6f6138dde12af2f0e1c8a71e76bc90b3940d86111a7c8d91f1e4658218891e78c829f930ab531139cb149ed60c08897d0d955131f7e685232e12c05a21ddbd66fcacccf9d18528823d5c34c8117fe50b52d8560e67eb01aba150a6641d21b643e9566a6f3d2008e421354c687c8d2a1132e0053c646910a416e78b8a14cc5030ff02288b6b2a7040e7990a4c348d66c23c29907be2a3214903c1d4901cd22b232250680d367050b644c8c54e5c90244c976e4595435e527c51821250baa8fa4226321ec10c10b6c35f08c71091334c310869c31253214729181160f63029ca95180075060311d6680d16e434dc430e09a60079a3a54c4a8585120a70b1c9ed811e4970d8274ed1043413081a682b24690062296443f1914830e1881c6c3044dbe8270d38b20caa8a00812a1000c0543a413044b7c51a00425a08eb017e4f4a03ff043230c4e9a0a134b672a84ad38de2408140409939a2186041e2115c2eee2040b6626b04a5610c186084c988aa2048d9a1864523dee2819b2e1b0ab339654d283498e83a3312960875a1c60840e8b0846a78616677eb89901564022414a062112828da9d921030f272b6037b23af8b3a504365f3fc82981cfdb114cbe389891c7811d1b175f572a800322058bdd5757d79724ae0f36f872a1809ca51b9a32c03f025c2982862b078012345730060441015ce3810047830a5540ab2f772200044705062041ace55b03c72b6e842517ee4489e1254751082982203ae2d512ede430c688d78beacba88722fb9097d1bb7631a665baf6d05832a06c33a36b0d2027340a59d0a2abd80320402714c2ea729a218156e74132c9a6e245c8cdb02c891d95c812405e4949c88041fd01ab7a20c992183d3c8991e89744070e5dbcb058410f92411ab02c0d2d1124208070848501549e906c49fba8d1a0880e12253352a050453d00c90c27554ae0f18de10a14082a4e027760ae0bb4f0c84083384db8a62031008458540a5c5a691d0cba6af2866b272885b33d54bab666c0008e081877985b0d1c62b373439c74eb456b0291116387adaae212a13a4d18d82281a58ba13648681ce9a3e7851e2e12b8e0c89b171e5c95ad338e20d1bd87997338126595be2a7861d15ac407011ffc4c31d2bad3400e38b45668a375c6830d36386a5f6809c308f252c2021d5a4b44ce82c401e3439621a81b9a3ac4ddc8a2c36307271be8952c02608002689196334b6c02431df48ca6b2f2971e4c4a67192c1fd8ae9830b8d1006b83a653051c901081d536680f92d79b19ac243200c1fd110486d5a2021a6c1b803172858319a06199aa5f456042f208bcf32b35a9b22d7ee2fcea578709e486b65fa1483b3480d46f0527829d1a647e2b394f6d0219f9ad9232d0c801b2a5c6c37fab338e30b7d0825613a7a588f2f9f1b4b419f1a48e973146ce6e44c78b0c222237440f7f723524e59a24e58824e59e4ee34939133fcb2edbec6b5736c7e998a3f8883e4bad12f34ddf145964f5899422e9996a79849d3f331da1c18f4033ccaf9b872f11083dc2455410adbe1a1ef42ff2f3b3ca65bc888e04719bae2fba284e72d96a74119a2bd324ba480bba88fd17992dc2fa514513a08b989ed1452b3ecc45458386d9658d6eff878ae8a08a3af83f1ce6639bb6a9665d9798d3786d97b022b0562fa1e8447bce1962f89fe32593e85d82225a0019a74a27662c430c7018324e9599657f3e1f1f3e7cf8e8844470e3a883a61174f37132424b11858af0faff63aab78516c1a20816ff856c4f7ff2a6f3a137080f131faaf2d40a41ca102fb4a81ab20047431404aa763864840e9a3781868891e005808712dca00041093b82ac78a188411009858884c16466a87ad78029a298e9302957c8923575c5436f4f32f64168eb0c8b040a309d23284c1758702806101a55393d07a0d0409bb2226d01588ee81a723085380499a3e21c2a1192d830d0244e004f7c446c080fc8f2639be066232e0554e642f3cc0ea6144a162b9eb8049a618f91957ca88e1a560d81aabe8e10e3678905a71d4366a04920ca6f803c34841945c01be1e90494160e8119bac1100af1eb127f60536a3edf5bcd0a99af10192bb52a248284d3ad2145284718ccaad832e19fcf776cd7631ac36a3edfab954b184e1285c59609afb92aebba45215b9ad4f1ab95c2e4b26d976e912d4dea28ab902d4df6a2964300895aaa5c5a75af7c3e424d8a5a75af261874e7dc31a8c9a02c74908effb96a48cebee130c770aa54534920c1bfa48eb9923ae68291f15a76a5e3964b8822c48458f34385d80ac2889ce6b51f1a049dff3c78494483c0f267b517b54483c8428118741ecbea3526ac81a8d2236b7f50647a7e407db0c007e27931ac8fc7259c63e4714dc66eab559d22d7343088fae0e37f0f6e7860b103113fdcb66ed135b63aa9f57b4c9b983aad89a76c617635baafb27599ac52bf319c16d5d47d89ba7563989874639eb285551d6e204224a8f5250ccbb2f21a030acd7e5e437a51633193baaa5caceb12e11449242856d46a81c60ec80dcd41c7d13f6784ff71687ffd6ae532f8ea768dedc79454548f0daa4bb72ed017a7b917b5cc5a36c48961d755326ba080aa07b52cc2ab97d65a280d8758e4507406aaff676665a91b2797ed4e061456652aec1d5d56b344b5b4f5859b983aed3ff5fc670bff99878525680c80feb5f4e545adb92f1109a7c818e86cfd316880c2300485216700a4cd0519aa58e0f193b873f4803b7f6ecc51316078fe34757eee42532f7e2a2bfebde7c7bafa8f03fc462fff46c180ff47d51f2483bfcb889fcdddb9f9fc6187fe6d8507250f4e8850c095ff4cc9bf4dfcaa007f534c8e1a0930f0ffea2c22e6e7de9df0b3017f6ee01fe3f9b97b51e0208bf8c51cf18fe1a1e427eef93793df98c2bfbffc4f5ef837140e3d3fd58e3f370a3f97013fb7a015ff31e9bf9233e107f6fe7dd4409a3428274414455d74557f52eae726f1b3aac6cf8df4ef4cfc3b107a30ea723400fa9f61fdcd2a7f7efc6e8e3f9b31bcc606e6e755043fb70d272a3ac8b9c0e21f33c0bfd7008bfc5a08fddc7308cd99fadfd4f8df26a0f28f11f23749fc5aaafe0de35773c4df5c7bf8b980fddc19fc2444c3093fd9b79fbb815f4cc52fe86ff6f8cd9cfc9bfd832ffe5dfc9742fea60201ac2404c9a3c0dfe6fe5b0d13dd0169e7e65ab2f85300f0a738f123b93f5202737e7e79f0730fd119a13064c6939e9fc996bfa91ba2041dce4d35815814a825f7472afe48859ebcf9e6cfb2c2bf89d0f98fd28c79f37387c9e57289de9cf386f5c339fad98cb140973f6ef2733bdd4884b031bf11187ff3851f38c0df540ef053d9e7e7be20c64fb0423ff7efa756899f3b47d9ef4683bfd9f493ed7f3f808850f20f6bfecdb59f2deddf7ae268e4745e4548e9ff4f48da9fdb081e3fd100f073c3c5b63fcb8f7f2fd2b548b740f98f39fe2b0e0cc118c0ba79c02cec0f05ff9520fe6693bf8d919fcd137f9aeedf342ab061e399a1db8169881a727e2e48ff9e52c3f4bf59f4b30903461b36eb12e3bf26d1dff431f645c1a12925b8467e2a71fe5d957504a3acc7ce680834dd0e017e24153f5210331f80f0a00835427e286d7eee1a88e2d2df4bdccf9d821223291ca84de92fc6ede7aee15fb3f4b3f9433fcb64fddc44fc5ac2fc5b8ad4f80b60e16f86f07fc9fd4de299322bfe2c397eee360a1021f3ff2c4d927f2bf9bb70f9b94980737f35bd7f53bdfdf0f3e8c0cfdde56fa2ff6d43993f6bffdc27ac8003220dff024af89b1ffcad8cbfa9f52bc9f3efb13bbf15e6bf75f88f647f13cdaf46e36f2ee096a6817f97e2df91f06f71f1734300c1d6dfa6ecdf43fc5c9afe6de3271b053f370b667eada99ffbce1fa6c0bfddec80e3dc67bf9122bfb1f8a738ff1446bf91343f77d70216e410ed37246a9690ff8d9e7f13f0538cc6cfedf58389e0e7768bffdd8a7f47e7a7011cfc6ce6ce6d439f13ff94e1bf03a5eea814702cd68198c410750600c00620002001831100304024168b062332a960baf31a0014000252ae84358d3095664192520821638c01c40000100100018119da06ed70bd86e014148569029989e91459f5b88f45f989da4c9b9130a5f3cc583764dc1d570791b2e5c31c6d264cacdfb9498cd9a1a7e0e1a8e042a8e924a41828dec78f22ba6057cf7feba71aa78a1a8c3e2683fdb144d89c964c77c626f697440f8293cd423ef68c61c88cf52f2afdcf04368ebf2ecd5f6f9258bc1748266a4795d2e74fed56f1b1b3d54857573744dcfb09c8390e1c25329c01c603a1a3d797a4d9de19d3dbf8aadebbd7bffc71812b59abd948073edb5ca110915683568164dd5251a74d15acc5ff66aac96366cdec0432fa640cb1f94d07704ca6b15c2f4d86c8448da111ce58f90c4156b5faa6bf75603fb1ef90683539779edb2ecef80e64e241a71a4a559fdd85e81d967aca6aacae9d9b0a4a616eade807b3b74a7e7674a15278574817687da2e0747b7fdf82b676a766e5005bc647a114c52f0dfe41e1775a9b2bc7702d771f91abe2c4ff2c7b0fb3d60b3ba1ce96ac4ac75cfceb8f5bd51e64fba2cd2f34aeb49266d7195a2584b6e623de2a2feb531bc4ebb885eda995f77144a38b36f767e2d3507fc5fa7e3431db866d4acaf0476e13e57410aa19249bd06d2641ce82370cde7d24e06c2c369056a7224d04b585e3652a7e120cabb08e2361ce023282a6d5789007c06d04dfec49d8e3012c80f70c023a25cc2016ef79e8a3515a229b99c19d15d516a2e7549049206de3180c453b0ac826a6d7082853d1968078e7c59c0a6b1193cb18c4d1586c00cd4e851a886913c6ca48f4290846717d67429d4564038d753294195843813ad85d7a6b39056eeeb7cdd1e64ab629b179796d96358fd526839acf10806704f410144394b6a138e3d0f6c10d27c1878058a2350e821d85658363390d6602682dd4d42c74248c3140f73080a1a856818c63a1c6e0d842bb0c410e453505ea1d053107d418c56410ec242a43a0b72612093ad12cd4fec18ab3d11ccaa8ba103c8015748e049804d21ea008d3404d1579387423e7e60331679e616c4b84d3502d1983552cc115ee6e603f88606bc35b8a6b8e8a93ca6aac175b9be958bbc493a12ab425e1f830c9d60e9c76d9637717cb765b6b5019d36b2cbbe7916a2a569072255fc6d83803c7526b0583ac87c1049c159c001cd48f68dcdaac15712d669e51ff49b0a17021078bd271e15b70b008f9ef0eee7ce9aa63e6631fc8e00e71db154c3579b11bcce8fdf585f55b10e91972f585636a786c257f718e8e03b0ecfa0d8c9a8cb46d966513840bf45c3b0be8a7169ed48e132116eff48ed70ae34f242b05e41cd47915fc7c93811de593c77d9d89bcd641d4d98b9bc284ca3ef3b5ed5529788c36f84650af650f508ff80e48e434c4ad9de48e104628388a522db22683b1e98be3e05a20a234f3b0e999b2babfec912110498f265a14a9955cf31755273edb1d7aa16124e660d19f66e7fdf75f6c440258ab27e5ad8aa2c35f51dd3c291c81a969804b053de72c02e289c0dfe14c4a11ce001ad06d2289a04d64066a4dfd52e9991420ddaf675542da0bfd45df620b0909071c495e101a2c832c188f63ded541861061d2ac00c6de10fefe2e806ed52d86bef07ea9988187d059a34129d7fd7a4ad995beff05eefe16097a94cff9b5c2383dbf63aee5b9f7fc08c72d72021e3e81eec4ceace2bfc278981b9fb7ecdc068acdf5c15af4e4029cc31638078131c161038be519ed4948c16ba78a4c2de2699db8c94bcab24742ac8e2451ef964777d493fbec17281f06409d5b964b7381ef84129880186cbf36dba53d6332eaedd4230f8059b590810ece8e07cc74aa205cf35f47fc839fc56eabcc7670832310786dc42ddd5f6ac36eb6f26ed5eee8c8ef9df31c463947dac5e527eb08a313bc7ced867066761ca9ace6586c121467b8c8a4da1893ed502ffda1a3e0930328e8ba37414cf424e4c3e3019afe66e61352011c3f35b7c1806055459e5271681d3b5457e92bbd5cd1553cf58b16ee891704f830b4c74393f50c7aad22eda2fbbe8afb44095d56e73cecc548c185110267f8ace3548790608dc85970334788af3b3f8477205c166d286f92a66781ca7d39548356a12c406040a424b2bfb066cc758b704e9f2a599e131a419540a102e854410f4c27358bac052f984d02fb620afe68a8df8afcd90c63d07fcd6f13f0e71419782983adacbbc09fd90fc5732cb7968f01e8f3cd66948b65ca33fb79cd1e71733b3ef1de9cc3ac9e7fe33ddc4c3b70ce7f36bf7c96cfb3c3d4f67946bf568d5fa2408bcb85ed4df0601afca355b7e359ae2f711d5cc0ed7716e5f736d3fc35fc6ced0a05b0390af8d15d8101b5133f992c47826cbdab9d01ca385e2e6dfa4c2c803dc3dc8506c8cc337ee4870bf46ba79a2713370fd43bbfd8071debf9e3864d695025d8bbef08e3913ff10e977d2f235754abf1d52a74d44edbc619a014d018185936cae6e4191bc9f97897d67c1a8117a8c79b60f0c55edb218a690ff847c6dc61e8b1bc7d88febf2d3986187101b57d8bbfd7493c9b48df1db4763df09f129bf8619a37077441944339808b6c05f56537eaddbbaf1911ce61a236bf647a7fc3fc3d5cd1d4bd8e806b618b8df5660c1f46b5e793089e1f9ddb97093d014b7fc6abfa8c8099aeac41cec1b7487c632ffaa375506c3e66c4b2a50fd7b5b91b57b946cf3fd0df0d6310faf2743dd8d92471c1e94a1141df548e721cdd5f3180945ad7aa4c463ed5030485476f395e357b071813181254bcacdd0f6b3b1d3833cdf6567ccb461d336b3122afe63c239c380f75adccc6f167ce4ceea98e57dcb4d235eee613c93a53e6627be9cc47aa218edde79e02ed42caa4430a6426ae8fedde127da0e5cd637a502bf02a73aff5c9999c7989ad4d1ff494b1ee905cf82095b40b7a2d669d64e4f61b6a97da08993dd60dbab142dddc22a20d7db917dce82b94a3efcfad6ff38e8b1c434e2f323af6eee6da75321fe5c34651b992f1726e60bd9c1dcfadc43073e20f9c25ea543bd7616c8999f47f80ef62aa3188fd25c4aa5b16673ef6cbad52d302519b846d99d226a84079e3f4822fe71dea3a3902c52c374f06f30022b05e638ca525d0074affb78fedc9dc929623af7710a01dbc62d53008178ed689303eee3575d44ee55a6eafe23db2f081f624d0181321b73c959fe831b90c279fca8e5e9d43dbb7be7a7bebcefa4e1279bb80bfb90332a41eda9a5c7462fe8c21ca1282a25f495840de4cfdcb9b0f06751fc770ed0e70c1a3ae7dacc08369b92d45a1ce6399c085939986d57c26033fdd7cfb18d4e19e24779f35498fee59117cd87644fc27f43c9616fe0da6117dd11be259f97c4d2a90c26d78b2e8ff7ee4a05c3c09963ec79fa5e342d52c4de06a6ca01bd5f457a47053da9cab80e2e1d629b46e45a3ef75b68a7ce89e7da261c6d303fca2b0771994f850f4cbf23c737fb0527699842831a1f261fd34a6dc21cd5175c0400caff7efb7ac72d3f7781f401cc9a54d42117bb94cfa8e173f6d6c767dbf389ab04af7a707ee1bd8c0f9a6d9e68001c1349ef0709434d04e454c73be2627d8d5c2f4d5fd764941b8765d9293c2b8360972cb9e1810c482aa51c35b7836f7eacb98c78407eb2cf934701b6d03d4f594d10df22e451e016722d96294b59e363e2d40e42ee281d5830617fe8692471a02cefcfbc82e44c36f53850dca6fab22c4eb279cde9956f0503cc316d2f9e12fd8786f2be6cf75ca01ae8ed2c0c21615e592d320bf99aefc876f3255b5453dcc8315cb3ba136141775721ce7a11a1725203d2e81ff1b18a13ec637f05fc798a761e602f0df9598a69109cc938bb349cdb6dd5db6bfad608ab238117f5bf8b440c6940c246376c8f91959e40c51d344df0c14982850afed7bb9c0911d2e9950dd03ca1e0e858d2f65c96738263eab07439cece5a396765b34eff5d836652f64cbf2b24b78f723da9401387a02711fb719a58652c580c58644dfcb93202dd685bcbe3743f5d8bf0cf1fac3a4e63aaee57fa1fbebe692649f111ac71efba88dde1e0fd5dac94b9634d5982144d7131cb04d61df6c7a3dc5f0350e57bdf463be2918764654fede62514a21f477bd88066778f8fad989273a850e8557f97e3208df4c8fa57c7d2c2f82f6482836225bcdd4fd375d155db4dc88f36ae26b49c63068393e5f7a48cf1896646aa6a9606564d1c740d377e198ee9f08c4da84ed7ff041c4230a67780422260f4e3d871d1dd3073794e4e42819c4364e1c8ec06e0c4e21b891de7f8df031afcdae8ebe2ad8796d3a98035e72fb8d67eb1dba668bd84b8df5978763f64f5fdbe58a05797cca2f547265471167c512045e525c1badaf06550f8af7453e2a4eb72b91706e4a602f7a15632f4d3edab71c084ea0a15ba63e7d633ca250ddfe9d97423dce7f719a3608ba4d7a2036f0be44f2c94996214dc158c29786e8f1e02e92a4dea269b03cb7eee2f308804b397e6f1aa491c94d0ccc5a11b48327dad4e1af500d3d7ae61fceffc604ec1795a3a0de0d0a92a64eea2e3a5c4a03e22d88c90efad631606b90490efa7635206bd439d1e8aeedb24ce715ffe6f8232a3c27afa4be0cff2289dd0c52f7d96362a38162c8a20796b1f035b382b3138f479d38c4dd96b79b4a7e0f74322eb53603a2e8eed213366ad74e4da1b82dd0de5be7e22b7284af61d05d5eee8c8a6277cc4bf76411b55d1a3e11ced9e8d95dda893d751192c381e7d60eb91747f331a9c5d5bc671ca2b9d2291bc3dbf2f88ec76f786fb5135346cc6f664e266d7c3f2c356e0cc2aee0b65b55b7c16f9115cacd23be590bfb72ec1ceeeae5659c7ffb1099f099b1e45f93336eb1a50d980a63c6ba163e4c7dfa7191b49339cc0a737feb063213ee563794752d01315e2a7273bb6d33b0153f1deb3da643e6345507bb869bd015038e84e5fd45d204b28e55bbf97b877ad0eb1d08010611d904646b2bc3dad63febb7be91fb77dfe4b3d85dc6d0713d98f87ec5ae8e4f3fdfba032bd1b2509c24875bb5344a05fcdb2752712d55f6df7d0b9c317ed42fe5fda6e1bfcb52bc0df9dda89d0f2d763ac5e3f4d7b622e77fabb695d386ed6d3f5bad2ad6907227c6e9eea86d627159949ea7e13b2f599d1c2ee7d078937d5d02abe03fd55216a3e73698ef93946c5c68556bc3a7d3607e8cfe8b383a14a83d19d05aa5ccbfd832704df6bda1546e1ccae3c83b8ee3914d49b7d11c53d0cd9ee52ab8afb87c1b9e321f0acbe66ab644df94546db7cbad7a5d7c681031b232754b954bf714f7f26a6285c1d92d5f5a04410f3a6c624966e4eff40ea7af3325e6c603f731758cdeef681b6a98e319c77fbdd70452dd0a48aebd81ad777534ba97fed6c54d3a2ff3d6bf077c6c93095327ef49d7cd8cceae246bdc12bf01b0fa9bf0ac695908437ec7aec61b67fd0e568af4cc394c54366e98db59c27674ccf3b0c476cee09b8d36470436b2cd2d988d8753b705c7c9d32a58422f13ed592a295d2a426c09aa46d7754985ed01df65b6bfbc13ba7ed603d9a0b03fd8f748c495d98ec06f4ae29350ad2e6a6602ef88489eeab05387d99bf2cf1590da2540ce56d950d855b4daf6e3f6b8789dac1b43d03b838c7f95c8c50e16177fff2d69f20fabf22f28f70f89bcec38bf1c1f39a6b43e0e822e3c9605123ccbb20f4d5b54434eb250f0eb7a73558a2f5ad431abec4d5068cdac6f40c6f01516c0c33e48c16d19e16819b6057666526edd96325cc2b97445a95b56290d93e74d964de5b987b033dc943d496274eb8c81ab26b2a1eca6a3a7aeca3c1ea94312e14cf1a21d9639c50a1b56dc80f91d40594de2aed90dc48f9d99d5c28c3f517a9333542e7de47cc12dc88003acb500a1d37c8e8fb1d05872bebc56b22d47d6f895ca2b7569774a16d83fb28e118ba318e2ccd9f911fa3f9414db49c6cdf5e76eeeebb83e17ce86eaefe7fa23b69c404babb130ee6c938ced6a6f6233116c0ec8bd0f769efde3ddaeed30b0e36c12247f73bbfd040da08c1966bd5948d13f28a6b6baed4c4e9dbf00ff475fce8fec0e71e640e834b40e36da39ba83dec132e787b9ce5c93fd2a1c5fe7d0b7ab8f4d3ad715b96fd0b6342341f47c2fab40b64ba3c547241a617793506dc0f00d7c74112aab63f76b0d69bf2d2cd39a57f023e7656c786cb1c24483c359d8d752ac9b02df958b1768e2e6d25f88ace3b06d88f12e937cb3e6b1df1ff12b988966aaf231669c31e2ab8344e84de328d50ee88e8ae51d9b34b0efd2f682a471a4f1ff8df4665cacb7935b83a73157aff76e76f4c9788bec53a86a264998d91cc112931b63f257df7c7287370a54bc63709f8aa3ad09c2cc14c3f258af8ab1572c3181cf595d96190459e3a60eeea608af0ff7c21377caf9a3777f24d61bab5f4b20ccf0dfcd94f9fb66fbed52a08da93ef2ff988b09bab465d1572899a97bbd6fef33b2aee89c71357eeedad27b81b898298311cf3cfc0c8b901976bf0739c9afe380dd34bac83e3fac1adf133843d7fe58ca1e53f0b7c027069c2bb60708b983c26fbf18854e91ed0c7957ceb6214a4e9225cece96cd095b4b9a41f11f129b9526ac513ba7464f6ef1a5b4c3049f562b1888b4dba6a1cfd0e4582cc4a9e33a1682d91873f7a4afbb5ce2e1e40ec8a9746c6f6c73f03775de31bcb9eb3c07ce5a8b9f6eb8cbd1a1084d86c9ebf13432f75ae4d3b68be8a6ac8bc01d04a4be25a0f52067bd81545dc453d53ed4965b2cd6fe06795ad8615bd76a027ce6a0ffb7eda79d56cc7cfdee81b995b6b3596f7b1f7c3551bb40e18f19db9571de33d771b1c14ddb4ec05abbcc5c3bfa767f95bd9ad932a3578a35afdf9dd57d8b3056d0f5afb59c501d76b1991ff26f21658af5855fdd33542327c477823b4b414f9d614c97d5b2eeec27f4a9a087dedc75cf9c44a88d73555f8b035b3a75fa952600b9010fc4f789ddc1e8edbe952cc3c135cd37066f69dcdd1947b195e5f8323aa8ff08ed3dbc023b6a8c0f3e978d09bd7b1f57ba87c60635fb73264c347aefcb8c9af360e733b926687f728c92b0ef23613addded5747c8fb946b4a3745bb4ffd0c3dc1c9fd91cfb42a27020489d11661c18b7fdf827f635eb7cdb66af0ff4fbd64f97b90c6eb8ee8c68e231ec8a8cee6788ce4a90d86de19b0376ccc7ae14adf74a436f418a8fc1164e179dced98f9b2bb1248586967066818c2d4fc28f20ddee15d8a1f1c62ee337f9b5a1587c51d8489fb4672efe38d756d1f1bb33b10ab34fbd4f9cf6d1918155742bdc653061dc6abc734dde533076e8e2b52d9b79c10f5cb41bcbbe281eb73b6df5cc151263e7c51d00d23a8afa43cc6a09b501fe09ba3c902307967c869f83f8b15e4cf6eccd585f676e0fdf7950765c2b3599472b887a65f89fd7d6d99389de5c13fb30f7bd479cb368d909493fe58437e51319c185298c9c23499c119841e629fcef1ddafd1c68b8d8b8c966285a149f96aadb3a3498c2ff2c1a4e467acebb1a29146eb3553ecfb0a30c7e88c4d610f76c3d96a21cddd9fa354f035f7aa8fc5f3b175a30297be09acd5e1b2840bc6ca335b89b72102efca86046e171da21bc22666facd0c5fab629d39ad3bfc5e866cdbb3cff3847bd77086911720e4737aaf3cc386ddc6a074263af6b3b5af68b26d974d964334dc7a2ea4e38cd693e05a78d6d5c6857069dff1e962cd59e0fab6191370154d8b10acd84c41639acd43753b2cd8576d3e4a45bd9728389403730fce20e37ab1a33fc5ac3f8ae11b23fa77d5067f75bdc65405810147e06d1cb6cef3d4b64164deffbc198e7ee368870bae8464370d7610725e530680c81c90cd0ade560c9366eaf511d19c17e54843be00c6f5e1c811bf33a3e31505d117b270d6ea71d75f079db0fedc152ec95ed97aa8e73d5b4a3988e619405efdd3ef75a57ce7ade3012f30f591481365c28b4281d0f4b960d4e7a4c7a330205ed7794fb51bf876eee854ec894bc6107964054b25fd2eceac26207e6a1ca28b9eafbd0ed96a47e56e807c91da4a677ca9a6126303baf83c4dc1693c635f567dd2df3bb8d24da6f332ec989cece64a2cfb6634c91fb43adbfc9e29d739e572bf65f928b9f93f3fc7b92b4506a830cc25e035a386e87cadd188cbcb69a82d54c774fdf0e33b0caca76948f0ea301f2192da3ab1e46c6c5db97e66e38e14bcfda44ab33de29dcef2bf65cc6abcdb20bd14a3739672333586ec326dd311f8b5abe8f207b48b971411cee31125d16cc3cbbc9ee931976f572e36d03393770cf2fe13773f41ef2db9c1efe1561b1ed4c7b14649320d917f96d709b169b010a13acd75d2d430a1a5cdf29143d98ab6d3cd3b94c654f592e4da315d0e81cf81904513d78a32e6f2a7327657dbbd7137ff89647e737cc607523ca7df8fefc4ce6d36bce632396581f0d0f0633e11f44d1fa0fea6a2eaf25942e69c4553c3693caf0235d9e1d2b0e28de2dc0cf57e8303c6015864fe7733279c75a35c2fb5d0c96ed622273701afd41a1565e877eaf88371b9ade948e88e1cd0cc37715ca4ff0ce8e98d073aa7faff0b531ea449e19dfa0136142b666737cb6fcf79676cd4238c75ad90e93da892eef495bc7dcc1a877d89e2c6fe0ebda242e6d1b17fdb0216418cea597b62c207e2179bbde3130c0abcddf534d7d7f4970231839656d4f1bb919a9baded79be5d8f48370365ac5a6772d42ebb838cc87edf028f48c2876c33b1ab961e1a8fbaccd5dbd6981df86aaea574637b414574f4d94cd1afc73d9efcac6b16e183dd50017de569f788347e6667f3c3ec8a39993d39cc5aff468f6c3dc6e616e4e413df41cda4656db9c74910fdb9d7a0fc3c337d496b7e27a6e6695fb37972ff1a1beb4e6fe6d9eea41c37593723e69c88e334bcde4d2e3d17537f57f434fdb421798bce8df3336747300fee320e39d4775919334fee1d78ae7bc0a320eed18bfcd9f3c971cbdad87e7481eec5b06a6c6cd4c1f62f562e31a985b0f7cd85cd07d987ae7d8b52bc7b8b6ae6890a275abbfe616e55957cea1b98d67d83f0e99fb2d9e72f71a1ed28e6e2671188bbf90a1ee134ef74199cfd7fabc628a89f9a8447255647a3d749350d506278ac8109982f5b98a8f49b3feb9b87a6ee6b02c0ca15df69f9c5ebc855d3ac06d34c15ff7f169ad2a9f61c857e3c91dbb1b43ef79dc7e746805b90f18f3fd09e44d0c3678f2fba727ba96a9e08d1704472bf1f55283f6968829c7449072b604b5698df1a3ff7bfd4ccf5f29ae04de2f05caa73a5b7f0f6754fadaf53dfeef1bb47944dfcb3711cf6d82c531be0de43010e8d6d73b82929fb641605db0ed0606fe0281bd14640960f292eb0f4d8c94605ec7bf3ad8906b6f5b4fb2a1a3fcd0ad9a6cc1f2103b8c22f819a0ec49d8c43c7766f9c053197d036cba11bc27b97cae3553ac275f8e7816cc32a7b4770cc9a60051a2c19984309b50370ebdaadaa8f7704670b9d13d321ec080a4ef7e0600d34350cc4759aba3bdd3e734aad1402e27dbdc36951a1e93f5877653ba8587064ce3731f82f9ccdcd7e9e61add1c07369a3d2d866840e4553bb99532d75ab7e07047c814fbce00cee38d194d60cd2a84fbf900d3a367ff67ba37436813abf0b8d048ab18b331488db1b36c6fe90c1c83208d03751d863bee56186dc5675133d92f5fd13f7e683c9e369c83b7f9f2403fe23e334236f492a7b15452223453f05eac5ce643e1f6a289837a3c2256b0dd059f3af7c58368dcb24d2d931afe72ca3553153b1d01e75c75268c35918c47819d956e927f5ccd0fc7b146894138c502b30bce75fb94c9c4d8c277f68bd36c2aa84d71fdc370be9f3b43199f317cf48ed2fe2ec922eb639ac844a51626f23396651c19cd922c3bff32adf6548ab411ecca3dede9c78ae5538eb1b25c866300bb765bfc0f5d231ef613c600e1b72bbe2a5a8eb705d6da20f8b440ef0d864ced7fb195f5e8e382c4e2cd884dd0ab2c9c5166c11ace9ae6846e6c0a160fc7a537d7ac4d6053f6d4e7b735672fd7800d34f9004de26c310f601a662b63eccdcb3db23bdae18720c009f01f41ee49919ccafc3406c098816f08d66eda14cfd8f0d68fe7447d1ce997e112848d3ca257e82724c4bdc2b237efae36f47710eb2f1bf89dc6751d6435f5bf9415907feb69b0c17405e028fcc6a0dc8e87981eda7228ef71b072d836b09eead038a5962f483fb8787ce8c967947078c9f20393eb02634fd175e7819363c0bd1be99fdb9d47fccbd126508e5ee1f2d89446788ab7eb89c4328cec0095cd90ef07bc66bf67cd23426e2cc6a0e921bfbcb72333baf2d9aa13084167e62587d4b88c299470df20dff31a5b3aea3ab5fa9e0105c43789059daab92a7770a3f79167fa46c0398f46590bc7dcd8ea8fe25e2e8028ebc0837e5ef719379f55e88e241e3a6065188f27970fdcbd6fb21f8f1cf20b027aa0d5d04294c04b8f1a5657a9c67094882e77f273c81d1aee211396a953f1adc07e7df38c0da237f20253b676e0337d6bc40bb0056d630c8a7e93ff6ff4e5ca90a6a72d4fdff6193bc87d4fb897fc8ede1b3e84e9363b672f99e3c3dec932408aad1babe0c91a2f4729adcff6447167641730e3b263cc7203a2cc016243ed0782abeb79465d2dff1836f16b9df8bc9667a509f5754ce8cbec4581f5460e7c47c3325f004bef36ecb66cb79dbfef16a50e33d0364262e5f33524efd88d29df18e80b17c731dc6534fff03f5d976ffc37dc9f0c7a1570ede7481ff2f551eb0bcc17de4d7c1566b368668786f3b59b50a0737e9e86cc9bfbfac75d9423c79d9bf85b1b788e11e86d2549506c05e871ed4ea96be242a0ce6eea2d1d67a9a2ff27eb75f67d7f0ec33ef85dedd01ee583f722233d5bdec0bf0fdfe06531362702dd458574f307711c95b89f5295abe13227d737e77d9ea894dc5edb72f7805e4b3bd54eaa740d53836a5468b231a7a63eee5f88ebafa30daea591cc99652f825474dbe2ce9559b9760ea8dcbaa267df3646d51c9c31b3d28df5b6852aec5288b771be8ca072d95edeebed29d84f92cfd5134f98bdfa2e3a9aca4739e38338aeba8fd3969ee37baf2864b4bca0a8fb89db238ec77f7474ff8c6a49a1ca7ab9cd275cbe7fb445abe2512e8e4b05afecf2eb8996d37e386c5a934e1bf3b732062b40d69aebf18334dfb5de74ced270cbd44b8e6cc9a60db531ea2e316473bbf4659e2a40e2ba97ef0ad67571876c09882a276b879166781ea8584f64acfb954508627a4b099cd876ff5a88b067fc827beb9002e0f5fa550eb7f6964a3cc98c2491127a076af0fd15e3a85fbfa9faa96fc68c8c26e30db126a4c504fa81beedf30b556e07107a445e0985d04d396a8ade8faddad4cd78105105c123743eba34e4d66993ddb1cacac5236d1f794d5ee7347079dd845ffd5d74329ba4d3227f0d3c9a4e80009cdf9c61f17eead354fc76692b67d60d0a5a6fc571bb0f183c9d3583248bf946bbc21cb057a736a4273fe0d99e79923ad7d4ab75b753931db8c5013897e8c73eb1b4ecb3620f39548c8a9a5b35d026b53e893af16491a3bf8bb64f25a1252389b6919d619f41f5eb147442310492260d2dedcfc99161d508d9fb544711128054e4a963245b76900e0453a1c7820634058864a772aa47ed295c611295eccec571326cc64f90b4da05b836f9e654968351438d7aa89d6db304500c2e5e8d2207ca6a4dde5a4254a6c21da57088b1a4ba64154214ace131c1b3c2405b8863a42476308cd0da8005482fedb5ea05e674743ebb6ed83421218e30e228910bab21681432dd949bbe71bb927015532898c475313d8678f4c3e54681983a3ead0561144e49c61c820338cce41e2fab6c875329d007aec225c485133136e7d4e0f5de657e76887acad103fa03bbe821a53045998e2a0fadff6591b90ac357b968a1e475b0d57b84988fe488a7543867559ae0d490dfe3c5bf992125913cb5d7a7968bf7e1f0e6f700f9842da45bf867f6ea4e86baa505ab32067db95688088ee09d476c9c494b6ad5e294daa4114a2af8b617bd78e474e776e73a6577236bb20a165a33f070509a2408b52586807a65ceaa0716e406a8c35594bd0899ebbad52c67409113907c5e0c95e3e3145836a10e899fb726555028a829733fdf18fe7172a0fa2da045b7ab663eb74847e3c58235732ac68df978291423df648c26fd0ad80a69ecf01913ca35db524c38efbd4ef0255a47ef73d03624f563f8e79ada5c82bfc28908f4bfad2f9d0ffa603aec633e2e211d537bb24d43e5043da1a9860aa47d016cecac9950bf3ed83762c9600cb60da72d85a58e3dae4c4080dc623594e7dbd2f3ccd4838ca036d56d6aa0bcab3036ceb04cae20b738389c1f0e76a6261fc800bf1dadfca9205984f43361311977d160bbd156036852ab9aa8b7173f76851c9246250ccc3db6f1767d10d9320ade60c3cbfdd601915d8e930ab618527e9c79f8ad112c10ab6e78469b788c1674170a5b30a3127c0573764a0c771d937f979b1e070678f7b77ab56ff46b1a6a9e97365cce57a8f5493b616a24df26eafade986ccc6e2455c38d8fbed86aa950cd0313311be5968269c66776847768c3317b912230c07a427a3c16e3fc7d875538cee9a168ba039cce389421fbc92be3e671468faff6cf7a3372e7212008859716cb973f4a179062bd517e0d9751c420e973b031de0f111c798bd68b1f2d7d80251feb20fbbcb348c56f0163cea60d0e8521671a931c7f5b6fed03ee1fef29a1119873e11de82405784cf4b2b03278c50a0b81cceb290ca70fb17356f1d4738c837dcf78666b0b94b5c13a9ce7bda0d3dbf2fc211aee5b90974c40b70fd5b2df300a4403d29df598a7f3603e31b12338b9bac3eca77bccede0a3355dc3dbcd839dc863a679a6532d3649061f9f9d808a072a860821ef8081b6af93a3f231b15aee233c0b04487e4230bb91109b46dbb72fa88a809edde08d32abd776f6486d85fa02390f266e745e886b4387c918093fd7fc20ad45f28afd132cdee9e0d712d34d8103fc0bc6193fd6aa99c34b4badc56cdd0fafac61dc2ae88084f114fc5e011943be2add293609447f07a1cb2944a99aafe9ace1574a69eaecb208d47031b1561d34990031a00841dfcbef6934024a9a6ea5ab6b38e4bbfc841f8bb4025830951416da93f15a1252ed1100e7a6506fa939f0b69df83a10083f4366d04c44726b343ec19e5572ce3237e4220d9d8f5569b55619b0d0b05547cd2baac9bf8a7313e87c45657ae5daaed49d3ce84d14786e64709aae3cf2fcbaebcdf09b6ed6e259ec745210e5bcc7a7067aa36b51e906ba6ab38ec4b26f35a9c773d4d57983c6510ebdae94d9a7d863c603145119bb6a2c8f601170530facf4d7b361f2ac45514d0ea605b46ffd31c60adae2c191769822ea04960316988c3dffe394c054d031b18bdd0f174403569a4c4d6b741a71f3e24185a0a4c92bfe1ecc7ea9069d9d352f005e8f3d40b851f1a1509889cd5dc7a17770804e97a1ae6ce915504297da778c2a673115029e7ecdabc1adc9e12696f4479b6d660ba647c919dc416e987f73f390847aa8d691510299fd8b4b91baf301b9515e15c13176b09ace988f149aea6d0acab4324114d31ae3770ae421e6878225870604b2f755c561ee21afce775e2b928ceb27b93a6c230ca65fdc71d979fb9f6b11f349071c59671a3eaa6a1c44e89c0de8edcc0f6fb57e3bcf615c262fda435c3c5a7b36cc23851cf5fea8c840633dcafcde08acdea48ab4f35ac5ba5cf4cb6898518f546d4771cf30175b597e7eda903d2a7c6254b23e8de0d05fa82180aeb003e2ad5decd0e7a5d393eafd508331e1d1968e15a500fc93a4e441d9327690254863be5efedbe0fcc899a8f8ec5de3e9a2cddb1e87059ab63f9c6f58c7b85648f04d0af87bef759fd757d63362b351f9d5a3e786c7767ae4d3b1112e302dd8af18c9b57718f3f0cb3080044cb97876d3f942e27eedf987b992ea1b88286bab52ead108f5a6a04eb5e75ec2f41494a6dbc401b94d6e119053325be42191abafe32bc7fbec187a68bd3d28264394221451a669f50c83cab2280190d1a1abfeebb8045cd3993ad0aff2c864e60e7566ddfddd03834748d459dab60e0d47e5664bfc793992183d539886a09d0d9bab770bbd66095da8f1413dd0abb03f272291ff27046a3a5a4ebfd108adb212ab324bb7e8025539d00a4e9e7e8034d4634bbffc830daaf1b1e34c2788d63a22c36bc37aa223ecb90d8ea6ee7eaea73ebd6f04de77633c612e20bdcd324bd0308773b2965e554e54b2d8a4d5c8e6d134674582d98216c786b5060909859929e7b86ae5fd82eed981e0ba1945d8142bc297045e01deac9a0741495314a684810b2590315ef892938e8ef50a195e87b664e1bb32637d877ddc2f3f919ab58efb2e657cff516339bdfd9815b4d850007d7b42b9122f9aa94af2841f05ef4fb04fa50f3c61a41c2f52f0f279ba55ba4d925fc749b07ebfe2f9a4f3160b4a1d250fbfc9f00ab1cb048756c10cb8d644f42f4052cc5391abcbf544b04f03373860450d8620a6036808d2a2b0cf86178022094a604ed58dca6ef13207a65d15258d2c8756d0d7b427867a6af4e92cec641bb53a56d0b90167f3c65c89c2da3ab0decfcce9de5d4a07f2d51457329cfd3d4c3ea53304b649de6a9534a4f3900920bb7343194759263e40ff109e644e98d805f0df06af45731c03ad80097318307f1167ba685c657ecd53ad9bc70ac8b0850d02601a142b20fc5b6191aae0cea4233b535f3a3370834cb1cac33b51fc5bee16554ab80ef2958b3488838119ab8f9f00a467146b8cc7a206243619ad7ec1f9b26feb386d5c883dab180180f8cd064b0b2bb1f352f4b60d134d6ebc25ce17ae0c256af8c8f812c546f64277e1711d3ad31db675bb57851e4dce16fbf9c1ac1be728e929702492c08890b85cd3f542ef4c8bef6802f132e95236cc9a668431301b8ec303c76984fd66aff6c26e284cdd6e45f02932eec2c37cef0653436558be89e705b3c3d66a707092bd1e7f40889f847215432a342908951b78b1da2457d85ca43e9788d2225cda65c88ca75928ef5b648b16d8798163316ffbd24194b77cb4c95db17341b17c61b8cd71f8c9fa9d721731e360aae40b734dc848861e7a157ed7fcdc869c54891d88bb0f7e49e5ecbce02e1eb0696120739b53796a1f23bf16e164573d920483a0eebc7f0b8a3d130b9010106557c06d939516e991310ff595906d067b024081b7bc2bee322493cdefcbdb611826114a09d1e89f719cb18ec5dd6e388f8a62e8504f75a88b3d42374fe15adaf29872d2278b300fd9b104b4a34e7d62dbb8f38ab5412c2ffb3e06500f63424785ebfe52d97fd1960546f90bc4086a0e839142626b1d43ace4186f2d9c7a23b875de4e64558425e162685d6d76773632eac24eee18622c816405eea44fe93f9c271a38725afe70cd8f474dbfb9e18c7a6fa4b51d071801f447be1dc6b6766106fa616381fb4bd24617c33b921081383a25b1d6f92443ddec59ceb876b2dc71921a4781281435633c4ee52c8f8537232b7333133bda0f829381ac4ef07a4d1a86406369341d44b61999249efd6f749366ebf4d7071af91fdcc8650b453221282e3412844c41219340482358e6447193bdfa0de4a26f24f47661a301ba129e839ceb7fe885405600aa9ff70a322dacffc29383026982f53a2f2022896dfe51a315381dd053d8b554e7af06cd7ae3a6f7e9070b9aace6a4cde07b5e98c0cae6989ee7640f73605a2c2300f29bdeac967f1c3efc4aed0ddbf13f672fba8e889f2e60994f5218c6b9df08d1c8c9ed1a7032a227deb620d7ef8ed1093be9f0cc802b5b631dde38a4714eb5d0806a1e2974efda8466bf3b5256f0493f1a9a292808f5c6137db4b50f30de040f6773831d1c6bc4f92118542c4214db119e831ecfb67af424c495db482e1003d8492f19c48012deea1f78a3f38f8b00ff70f1fecb5e65f6f94507710c3e460625194c45d0f591a0f2dd30f5c250407308c4765c61709ec28c72b9abd5ea996beb58c14ae0c1f62747938f2f7a40c8dd0a4e5a7f4f87fba1ba3db18fdd7e1eba6384dfb037c9f74b7c7c1349099c26bf2e88c006975a1ddcc2d00dabd51bb64c2499da4f648346f304f829106727cf0db3fbb7b9feb5746bf6ea43e46cc1036e0f7e3d0e27d2d3cb4d131da759449763c9beefbf5319b496bc521659e294f34ac864e533a19be5428d2f7eb2fcda2e331bf79d32451c7791fa2ac60e2cfe61fc7c980afa0ed24ea65f0884e43421f194facb1f94dcbe44b0993bcdfc0c36d698ae95b75deb2d32aebc30b04a16bbce48ae9778e524c19b3bf7e35f6237c6100c39808a34cb8191df4ab2a6f74eef24ba8a5589aaa900aa27e9e7057ec0bf367a7a723f9b67fb1958a17d2aafdea0c42240a6b704ff33ea3d1cb1d7ad8962a7dcf212887db26aae6bec0cc08418f8bddb62c5e8939b26c335d4f5edb2c2176a016787ec19185334436c7a94d71a5d81adff4d93aada1dfa29164ca3c0d45c991e6f807baf3a2862614d6a6fde7e23e98a4ab6128870b668d4a38d09b07e37a3b0c8773de77fe2ec8081bd88029883c388f0329c3ff37e14176a42559932fb11f329a8cdc613b21ead452990d99fb80b18af4e4f2a20e261744010017626166891d67c7001bbd63f29730ef8a3869771494253114522add117b640095bdae5bb063e229778721cc22baddd54fcc2dfdb3507125288303b280d24fcd5d55d5f4dce2b9b464761bc11fc034e7f27e16bc618f735fda46ed084e6e1a6e721e0bf18f53bc5c83d90ad54ac872f687185781b981ed0be8e4dc56e961e2b1c554c77c45a33ff90165a80517eed048dfbaee8c771a0db37223bde61ecdca79ec5c8ed664a6b7e53a7731decc28db7ca5d18f8d0fcc8258eb24bf46d124151faa83880b7d66ef17ef9e0f45dc0f12aa1223829d27f7152bed40558628ae9242e81a3c0c15be6253333a3bd231c09a6c12e368c124881532e6c92f2761d5705bbb2eed5ead176bff641baf6663447a49d9d3a822d42e1db8ed350fe09533ae98f22c744e279e19f1d4812941dfd46f93b850ea7eb46eed45920884e3c78e3d87590f35c89656a9a067e33e76bc56b17935078ef3b89948c8e3443698117b5e50dec828604c2c696905b682165db6e18c64549743d8674e5ab0e95346f7d79d791303cce7dd46c491178f7b5a252c66ae5b027d23942b937f0d5f8701a6593f7d247fa7456e99aa41524c293f00def1db4e1063ee0191d24229df6b19b86691dd593696af48b3367487d053142d29f98f96d6c7d009004ecf3b128d659860b3310fd1e0b7cb1dbaca1fd49a6198b54c527a27111c6ed193bfdd0f76651c7806dcd901a14f996e0c930ec47ececccc15576b5d9cce35d9e0bc7db21d6c1e89e21363b98e36c8b1c3f6b7ea117db338816689a3977cfb3d53b13f1db492d963099a3ec657e435256347ff28a1f39793ec6de54220c5adc24210d049799d88250da940aa14a5c92c5c761321fe7f6c5046f44b90fdf799283cc93a57a662a874539511f97598c907775b3e5ece4772a49a572967e8819c0eac3e003c641439d4bb4f94cd5ca12d5dc2cc73a47072bd84844d123e2ca11a55ebe12c41b30b2da317fca819063423cbacb26c8efb9412f56069415b697a8cda9cc13cd0dd992f3ead22cb13f2b225d247317b5f7a637a91600fe4b6e17e604a2de3a011875b0e88e94ce748c6328d06120d85ceeb6c3578ac63c7524b8c57756792d562cb978800ecacdc826f12e49eca13b6565ae89ffa38795fbf8da77407682f855a05fe36afcdf0eb5ee778c9bcfe2346e3127510a4e628e2700b89291c170aad4463a132d1dc887445c2b3786e000dfa76ec334766f29dcea8c3a7a804375d8aed5adb56d8dc385b1653640982953efb9b437019ed1c01c20402cb33068def49de382849285832ebc81d111b928796acd8f4a01980b85d9f7742014a4d4b8d1995fac0ecfa23a395eaf62a3378f92d7120c69c3c1d0584d1d08eb614df82f0045d9f473d3f201fd4fed2430de80df5982158d93a585fb6bc8932f561193017e393956fea0f42c4a0b9bbc3dc41d45e02df709c28652578c49c16ecaa90bbc99dd960df7d5365b9fc76441f30cc95107f5eac751eaa3eeef310b0a830f5e3f461bbac6bf4f91c36f9d87e7cf39a26216e64a9032e89ddb91cfa0e9a795c181febe861016e6ef2cec6ed73722e0ac152a3dc5ddd08d71de23b3272a07b17b97cb13886f2ee6015a9c6507cf6e54f62ec42d64dfdd10fd423ab55dff9ad56bc53a46990b2c0d4457ab6a6684d39073575fa27ca2b5c649c8d9cbd22b0d784d59cd9d4b343386e11147d55cb6e412f54a8bbd2f746c5711fbc9a992067f73e463e731e359059d1f3a9073f951aa3300f06063ce39b7ddd97b78f5038ddc8bfca5fc885c9519b5526377de97e92095b3e46508a6a4b9843ecf08e6cd00a7558bd13ece58fcb3c3b7063ecc323e7af817d018c1363e59ada92896066663cbf70c882d109d33e17117753e91e4205531a0c3709eb8787251070d01620df3b7f5e58a7ed690a261404b1005cfd97d33cf9c137cdc609f7631c78c1448f967732963c71b3ce10d59478794df4c6dfe1894aad0ee0e24f9c914248a0019c7f6ca9dea40423bf41cfd69db8ac38fd8f66535149ea0f7e5bedef185992152becc625ff79018ad01b560edaaf68e37782b2874e8cb29361d490e557a32879c6964621a5cc6560734a87538af35d4e61877c2cf27d3d8e8fef91eab066c790482bed21998248ae4644393590668d04667c9526b8fad2bcb9ece36df140251c7c0178daa015874824544cbae4963e269b905f651619bbe51298b1db3cfe20180667c070160187cd95a2eb0a32823d8bcfd4c282323da1f4f06e0d045e24a2049757774e75f088f912807f3ac9e2ae4d4150724318cf256e1aa03f355a0143f0c52cf8f90c57a7a150aed152d9209e62846e6ffd82cbf63b23c1a03ca45a9da5162beb8d31addc656a29ca672fa057842d334029612357df2e885bf5f29a658ee2c63148d21c086f5acc5f7ecafef83b85aee0bdbc4c344542f4405c1decdfd0c865a0e390f986db889f357863bf92aef3b2d01a14f4fb2ab52d359442acde235c579750e7e389fcb0fef29ef6ecf1bab1ab3fc9b889b08cf929d32ae5337ed1cc9b68e25f1516386d70179beb8bb092c7f2881f5090607b62393fea568dfc6eccc86d711fb2261999e42da078b366dd9e66b02dabc7a1d5d0cf37a7026122408bbd20456b4382659bc8d6b806d3841de98182557f3b8a4171813be46d0a2be9684d47d9a0ce77494a5ad3bdf8fb3a629c40195305b9fd6812b00cade38d751eddb0e23bad08e2553c952f156731d126acc7ee41ad4eb197738b5fea672ed8f6214d30fafee5b7bedbc37c70362603491b2ff98fad9971ebd21c5c6faff07600a28c3a886217c693e0ba4bcb23d928bba6c6ac6ca05cd0dc773abdda6302d75cbb48d88e49e6e2a43227be319b7929c239823e0262599ac939d9b2d395d2cd9ce108c957141d3cb29aac50cbd869e3e8ac02f12f224386112e3decbad4e78d7f2dd36329eb4fc6fc0ff0feea1f55fbf3414c4ddb9c5faf011a974d887e1832c65fc825080fe5ee8ea9337e269114f3c28136443fe57a61e7003a990ca255e06289432d6ded8d2947be2190722fcbca7d22c03e5e6776b70b428320519f2acd7bbe58dc7b26a06389fddeac81ce5bb6de47201c88e8a43296bf18bd33a6f48eb2d0fb435021aa8738357f896e6f220b150f16cd2f0d77212c020ebebdded2f29212a6180bbb69afb51d263203bab3f154ebd7ac713fb4df3e9ac1b8b160ec09c1cd6f6d4ff8aafc323961854499fd1b53d439e0cddfb51dcdf468a7d3377f6401e8056d68e36b7d8ecc26bbcc2cb3cc1c37b3baedaa67388edfe3f64d2f37474a17056fbf40721204132af0938443844f9e314cfbc04e777098b6770728cc529d6e5269e06e21656e22323156542de5ba1c801ce7c2f7b50494fc73a2875aeee1cf57198ffa9560f328fca28cf3af99a31f790d2ebfa47817a50347b9e88a7070cfd3f77c1717d68e88f0d480a72fd7ef7a53c00f4849736f57a0c1e0037403391f19599c78ed099975ec23e0fe21c93c4bb00e81f0e1b054602cc2b915ab5b742c143da43916ca3b5ce5bc9023a9c243326ceb32052489aa0bd3e3c50ed82af82668100ca3b314ee8d438a05bf42387633494001515f15942c64380b26f047aea0c769db7be063ca0f96cdedb7c4996fd5ad7f1fc3fe54f4e29b8034880384d065b209c30e25d1e15aa8609f47be8f3ee73149480053dd319662adeffcf33080cc336c4eb8ab1e9e2b9a8582d64cbb81d3ea164fed8782d9c4b1e883d12a66658c63670afe224a288de4459e769b8b188296228fa568df7cfffc74a31718a1deb0118199b0d9b3d6859efbe9e7e32dc188e5ac535d68328015f3335d7fe3a6e1405fbe29b3f166ddc88e838f7ef2d4eb9f95ad419bc06c5f082ad6ea1d311c1eea3086654b53b6cef401a4a6c69fb1fd42bb923375fe6b31e0fbdac38d2abb638b839f86feab6860de67918d1ec4159cd2d73fa9b326f1b51e4a95f0ec31d3c5a9f7d99f28d1eedbc93a3896a43c2f45c8f78586f4c970143db73d6bb7b78a47b10f5de9f06d524a0168870c80a9d4c66e0f2331e6d86679e5524a0e2cc3b7ac56246e91a5c1b82d157d6e244a13f32f388c751e04c8e504faa918b00c81c3316ddd2b6b56e8b647470def95a406875668e27164682f8d5113c2c63b9cf9a113aa6261c92244ed7f4808e1362ec66c636f3f38d839a5bc0aac168fbda95835d31299ad4b9ebeb41d9f052d80b4782a94f46a29c840cd1d4460766e5b9d15b42c07a64a5705d9e18379c78251d0c22d89d5ebcd3db10460cbc74ab15d5d9ce0725547edc0aced4b702880923ba0f5b746d57841db0368beaf03807817d28d740cba11031e483072d068ae2ec81d98fb2a6f10890fa1ed3c4e014cff8f5f25993ad76330a60300692451839581dd42cf42b025010cfe8734ce8838dcf149c6598fc74ad06e97c5264fe94eaff340e08cf844fe01cb2bced77bd54712a1f33820ea4f61d41706fd7c75813f7cc6287ebea04decbe2ef7d12f9c91d7d5f8839d27b475cbe5d73c3413a3e1708be9a2dc541f8c626ed34156d2495ee72ffcbb42c8c4e9102c8518ef75b67c2e3a3f6c864c21e6f7ab9c3b4aa2f7724e9147130bd92f899dbb0e3d3246741faa153af9db4e0af6937a00cdf20a623647cb30e12f063190b6ee6c0e25d849aa538817b3a36607f7f62fcb753bc4c05f342e5ac6b78c185da898fc8693927474e1e4c12923df677c8b1ceba42a93f303d7f4f99fc77054aef68dbda234b2ff4fa855bd138dc9755694c7d38ab9382924481a66fe551c0f522a19f46754805eec44568a7260430aee7f7e5c7b00aaa241551a40fa8fdcdb366886ca91104a1fa1c683fa0d750090d5635fb378b8f54f683f86db3193b056b19fd696e038193d039ee7979d3fd605901b9f817815c8d46fbf556a06ec04fe97b0b96d129d6f55bd96c745483ce540badfcdda4c8e4e422c8371cdf91b0b997f993b4ea975863f185892837d487dfae5c6995268940633f009ce86161f5a8ea2fab7d324a281a0ac234dc64a96d448651f4de6b73cc1ca5b228abf9dfaec9054aa21a0e9a8005a48d2bcd54b704c986c63e84893cf5f456b5212a7178b15386b952e7f35919c3a931efdd9f522356db6d50af711b78767570ef66c46b853843df545f5c2dd93850330254f32a43c6fbe22cab1f98b37dc7b9e70aae3c0acb9c3c7d4146a0adf4666c0e46af1b018391b1c95e4a301a25a37a1613d9b5cdd72cc7566ed3a8e6c326efa3541155186a809b3450f48a494f57981788edb6c46007412f39f85eaaa6a683fbc9d723552ed26beea356bfd50c3e464d8f09969649ae1115962f50f210f289663201efdd3b6e212ac161d13fb03e68fd4b3d256580e250a813761ba149bac80baa7e68ddba0fb3fc1dc6cfb6298c9d86130ac94648013e7633f2a2bc46de24bbe6334fe2453fb612f1892c7985125b58e00523bbe431559a35ed4e5c308c971f73a9ea3035dbeb6a81b421869e0273325f7ab2b24b05491cabbd7372c8c4ec889e2e7f7508cf7fc7d94db012bc2a1f03b0e39fa7586eb1038dc2e6d7bef24fb62c60aa372b8e4e29f949223acee05cfb3e6f9fe87e888bb01c83a491896e3516092b9db376d630762f31598f725dade058e30b0266ab12a096efe92ae898c26aa71bc9da1d7066563e3b08c7c2eaa0968e1a5f8123e0d42b49f9c62ee4db780757f02f082ad441cdd8a6ceea6c4674bf87d1e847cf511d8e9cbce19f4e10e98ee61f9ae277f4559948fbb0bf0aa9a758df76502487e35f15205754fc581dd065e01f5b6deaf78e1c77b7dedefe18403e62be363cad60813a760d69bf99faf7604f90f6e8af129143424a68182218528fbac46e44824b9f70fcabc30b65260ee0b4a00f027c19b34de1c7d0c907a19e743a08110a0265eba696c7c05930de081a4b9625264eb41c6b6b6b50fa0294c0dba00fa30d567fb01bee4d722e340920080ef458abe2259653c879cab25f8237078618bbcf9fe55fe8d707a6ae3f94c04a1f5f690c88629dea0126324ce1a6f0b5cd0469ab7268cd6857475a19ed81ff08704a3856b6635336d6635436f71ea32dbf8d82ebfe042a745ef2d9d1a1ba2fb925d9c8296c61e49f8aad9af634f5a26a9a70d0dbf6450523e4b690d2b4bcc531f43fcec825fab8c3309f6abe1481547cfa51884a411db6687c31f04a40dec57ef4f95ac24a5db88d5636fb1e7863272b4a963be33f1c3588349c7011ea94429575b8cee57e2ba8f8561a64ccfb1b81e15c728016b9d78c1a6e3bd2768a88db94afa926b109f33cf14b7d2bf4c401c35f5fe719eb9041c29bbcadd2ddd331032a413bb7f02e1ebb38b0bc9be432ed741e7a1bd7f77bfa04e4a5880a3b63c483178e72bedf3ccf6ac8b7a37c631f8f502b15b93e363396433b05f56695664166fe24f59718ed0153ff62b268b9ba96615e2cd380d54be3cc9cace8f19345c0ff4c03c1217d5b90f0bbd40546f3bdbf78ad2376d9e0ec533896cc4c28c40c1982064f40539270b29e614bbe664c9ff6ed0e531484b461d33c02841eb49930f9305f59666df18dac22a5480c2c042021392192ec83819d7d1a898ff28e836bcc3b7dfdcd27f46d027cf8ae850d6e29e1e67fc73cc4a6c30d3f41221c3ce4a0ab787215b2453b5cbc087a83cbcc8d6022ac4d0b3ad37a81e9c6d303a87f7aff41f6c229deec6e373f1b63702e73c6199a370b7c490b1c9cf2086f2b312ba22ae163f0b7d4f1dc46aa71163f5e21bbfd8a65978e129ca7c0535a6c01751154170eb123786e85d724013f6e091bf30d1ee11bfb704e3e4ff3a9c066c1d5d963e8d5a5e41d4bc5b7d565cd1cc65dd71022bc7e01090c2a2cc50e54dad9ef92422b4d8bb6ae175ff3af9e7eca62d83ed4212af0147e02f30ef64e46357f13f7af2039bf3410e0f0f74655210a9b3d66a4d6e1fe6a4eaf8e6713b350c65305ebc2c6343e59b9b29e125730b651d4707981ca63b024d6992c514567e427713d7d605ec0b822c5ee31e3d4ec7f61a0105173fa51c635244fca8137528401f9ee6a8b1972aca1201d10997aafa4fb0e29d244db8ca0957b01c967a52390127bbe368260565744f547bc00a373f70060138df198dcdb2e57ce010d8def5a056b6ac52cd817c8bc83a136c750e678035942473e859d2f8602b2fb59f61b26f958c1ba72631a2f466329e172b0babd2a1139bcd42fcbc44b739f19f7269c52ba6cc3ddfe1444b671bbd0ab5df8e1bd961253ec4592e65f1b5060ef82f5e0f2932b8f23444df0781c8046730d3f852ee05ed94c18654c80ad7f4946b1c512934cdf9786651626eda09abaeaedeab9e4a942c795a8c3609d211be0ff74d2aefe7d13a0f389cfe7c09dc9f942ad685f0231b733f1e82b749813300e44a6e60a73d84aab67a751d282766923ccf6c3a07f51c4d95f55607b0b335215daebb79022845282dcd9067c13de448bfdc4c81f74a903ad651a688f77441558db4a3cd4733efe4cd34db7b54f63f40657b6360ecfa57eb8062971a8193bb59353481ee05593b377738b024d3bff741c03adb1b4577ed92f35249f279be94670072d4ca5c79de322dce41274ea7e1ccb24ebe0722512c184f6dd8b8239174277aab6e3c501006a9f10cdbfe28917535cd7cd23e7d34fbe37c54aa2f58acc82516f710886a8360aa47e8c3f75c216117282802d53ac02e21921f6ac5a071a7a84fd0f5f3066d9526a116967e4469ff67b0cec3983ed09e8dfd4148090e5ace9a44b6aea7d3bfe3c80296490f9adc845b253f1a7cbe022924e94a624ba44ef87c18950e6bec4b9923f9ad77376365c41152c6fef8324530cf4cf9cbdbfed0bd03a97d53e9c4bb9c1e58fd5a82a9dbaa0cbb8fd4d0783c200968cf93b97c80a83cba237b41e23aa771edc7c29083de618355170b75a82d8e8b30f3b3a5469f6df0163b0d4db68a49978ef78d4c0fcc722ec5a7a6122391b8ab4d7e1f800e5b0fc7932c85b801b8600bf2c74519c841b45b54ad9f490d298df68d0acddcf31c975b0608cb9177bbef829467b320f1a22d23874a39d1dc16e509ee9cb1ff86bdf9d669a6092e4dd3a550b3442a89342f01c72f42bd65812edba3ad254409fcb3d01f65b68f8a62292dab70ea04910f2c51aeb6bac06350cb4ea4f43e45b25797eb904aa37aeab20a6416f7b78c0d17613c8e54d6fdbdf17b5c4fd4893ce07c7a0a8c2411863a22d2ac9e7c6cdbd83b958ffd4155073284801a926a6396bf6e223da741f4eecc7617d494337dc1b1389332c1dd74f269cdb95fd9065b2fbdc9f718302b3e7f07d95735509813cd4a0788a2eabf6d915e8e24c8718b71da953acb9582abc4304267b1b11200e81c30c08503f12f7576afa942111a5e1647d68784c056b7e560563fdd99a480105944d8465f1c19af743126e9f0be80d32744b7431541ba7fda026d47cf5bf11ab5074443b1fb3fa338bd896c980712361c066801e9af80c3d264275b9aec4d0528372fd7785a85fb0040fefac4d9b05af42ebfd58ae44e1d1fa8ecd25d7da451032a7e7978d3b483813c37561bb6a23f33e1e8dd9ea405d116a9d4df02aaa046c1107664f3868bcf4c30094fc985dcf02a1fed74546e0aad3cbe0db0ac3a3081ced1b531fe83cba26318a2cf497374737a045639a65f6a8c14e83e62289bc47ef22704d05795cd8040d2a722a1b8a0ffd57fc5e7eee8f33a92063c438742ef993b3911b346d26211eafd09a47fabff8df36b1b543b4db4cf428104dc12d7f64016baef10352b5b6da8386b4dfe8cce75599e114ee7b8f2190c35bf13e50890995d4f5c7406ef7420c48b1727bb800e63705505b8a2f30701092f0de56b72631bf12fe0b3a0a652cf4a3ed98c3c7278529ea7e9362153a14c5027a314025d71a6589fc8ceb001501d4e1ceee6acbf1da089d484a4556c39398afe81eb2149b0766ef91eadaab5be53e8afb1a1d5acad9f73b15404e9f6fc5ab14617cdfd57d6f7c094705895b917efdd7e6f0f48c5610f897f8fdaf0ee60eadbd8048055792cdc40d78b16fbb3fac8640998a8516499bce6ca7ca92a4e42ad4b1307123167082d0fedf6ad37d688f8d999b09c5fd465412b013000f9e3866f028681f76fdd7471ccce7e52f31871a6e8623138e3617b0a1946652f42ddd387d0dfd14fa0410ead304b5086655c809f115c9f4d8633cef61506b9e736268df5b831829903f0688d488799d8d85d7218cf84b00c75a0fd8598e4f57771e6fa215df272afef8f2379fae5026e0841ce19a148969de4879dedd76e5ccb136c7d2e4ddd968f4cee4acfa77e8aedb2ab13e80a7bf3d1dc14c135343b07e226cb21f03e5e9b4e4ea96d78709c100f3417b75aa605dd7d7f1e588ad50596c08d869b9467707acc6b9ccf46e0e2fb29fc54b6836358e23e7cb55c3b259066723a40e8cf0e2d425c76c02398c0ed240fb21a8418c65fdc617266d9d5ce0b6428c1809872fdf557652f299bc7bab799749595598c4b221478078466bf61eda19aaf8625de84900cd8205915bcf0ffeab305f411610b18aaecb8695b31c0fef0122b76ec2535ad125dee3c1e6ffd528ae1c3a83c18e31b5dcf93e8100285984977947eaee75d7da6fe8b5f24e75a3f2ab7fe241c26033f20b53b643d4be932a156dba4bdd418ab5a4073e1015112bd23f94e472c077cea4466f5865924619c7b2aca176f1d8b67bfba536bb72a145ee926782e22f00512d8fd0b5d9d2b8abe913936eab2505144e100ebfbdac3105f356d6dcef6136334167d31ef2e6d1a376f1a0c0ce924ceebfd235a31cb0ca5dcbfe946a2d9238fa70cfc14177f173b678edab753664ab1f9dbd5aac743ae9532d8d799f8dbd6af5e4b3aff6c94b6532dda0cf8bbbb6967baaefe3c299a7b6d3a993c69b2eb15b4e0968dafbb7108f28c95cb7cdffb25fd9222759ff61ac07b65ed7d436233e68589f99c1a9c5a1d31322c55dff7d42e23af27bdc36800a0c7de413a118413a4a22d13eddcda7f94e64dd12fab750bcdb6f8bcc171e222c9f23513a4383fb37cc78f4703510dc3b8d784cc5da6263635317cf7a0de261d215ea39d261e9763889dc6149627bf341a3a20f5ff98115a9dfad301f404c2a563dcf9a8e96e5d577287984d099f66778837fe8eb81f532e276c3a23af6a98766bcac4558b520dd9cbf61e1dc77d8cf323ae82fd5cae0d050b7db37fd6109b221becaaa2b01593f7b4e4b20dc0330bac4a52cfde5a9baea9b97b0a814946e4a0c5270c301a43d5a34ad9e4d022076f885e930842d79e9f0bc5be4d8658ac74db5b7235edc76365aa259637c4d292c7a671a208ac2224a13a2447f20d3edf98bf3651a202a00e1fe65d002215feee84a8eb32b1eeae2e32d1aed6f23354aa87d1596ce845141e5f8c18829e1f4be25fbfdb02c144ab42226477c2ea00ee0d6ac8b01494d38866015674fc27a32166a53d1ebfaf4f21657cdb0bf1046a9271fb9810ba68a96b0a33581bdee4f70891cbfc7c7905b297112e7f7a2c754deae80b63fbb61ff4f32efc9ea343fa97750a7d49bed8bec088492c23a3e27665a016f2a7e4cf4f22b19ee17b0e054c212bfdb3be47e04dc4f9ec481fe21851e7b98a46675309b1c640d18455fbdacd057c3b86f146958c2ad71695a5105fc9f8b9c239a4c4d5b4b2c0472851f1fc004972016cb6f376e585ecc1e24bc4ac858d1454a2aac2ddf5b59b8ce2aaeb7b0f96419f040a961977f8e4720154488d10d067fa1842484aa30d859299132e73274a9baeed9adf5b4c39f417b7005d00b863d3c98abc0faf6ec505cf66bb440fa071094bd55b1c415a7cd5a71b3a249eda07ece8b8bd24a70be5c51bb3186b73110a23b49a8f13b3215cf91549d955f80648dac4135751e289cb1680891e878dc2fa1122bbbed8e5dcc2df72f43d2db9ad532bf141364ed4651ae826b541b1987cb7734ce43b9232cecec9a4dc82419f08791d96d56e64547ad4c34061e1594cc8259115a10e21780aa43acb88f741cdca8a3a81db6ae93d4d69e871614d981bb5a6b4032ce9d6881228e4e1da480e1bbcaa95e8169183d414ed93ea66483760c089b1df997f30b11aa1035ef19b2a23118fb5758f203e30db8c8cea06c6ac83338f304d4b625339e07daf57c2dc86cf603f465ddda81cb3ca58c9daecd39507b0ada0781293aa1d090ee1cc9fcf981ccc1a07aabea045cf4f8b4812b427b83ace2bef50fb714a54948f4b9a9b662061f85d64c9673c171438dbfa18e462d426cc24c6f659db9eb136c6e7d616e7e08ec047a0c72f67a32dfcf661d50797e1539921eec07dc4034f6937feaca1be8b682e85491c1391e8230022a3283b5542071026be6b1d9dbc97b84f91d054b66183e51f32a7f0a59818c64e22c471ced191b782c32f71cac0b522fc5c29ee9d345a14b6015f3095407980288e90cbef01d33c5c49d0f92a1ad5a4b4d4a6a96391b34de69d8bf0e10ede62e26ad0e7ddc98447e86627fd5378d475c763241643594cc66896bc77de114012476bf9634af23e449a0d5b10440dfd3362bf6ae1c5b6366001c8f52508400cdfc9701160103b11b7affcd2fc6aa94cef007672c0b6a15843c197cbc9bda43a33ba7610960ab94c39ac5465164676b72e609ac4ddddc8f5a5d6c0383521f34977071f2e8dd9ca0d567201bdc2e3bc877e6edba15c41222bb713223edf81c4f8fd18cb79d769041cacd31ff604b483f17273f45c44940c4ce08795f1eaea648c92f07a0e518785ba1e00944e4e1b0d167dbcfd3f89aec3ff759690edc3caeca4c3e0a6c1ffdcfe5c2c95cb56a8a39507e80d05abf72be719e87d6fb35d35e59a7186674398a62063d21a6a8fac891d2fd4c1d0cd93c8741cbdef01085c04b8c54bc3c460a218f8969364766d75ec07c53fe9040ca6778d6eaacd0fc969f6301ffd9c229e98736e06046e12bd03a0d0e23eb9b841098f3f8162a192765b659eaf3669916d25a6a6347fba01bc1bb97387a48b20d933e96c7e129e590fa866a5b0aaaab4cf67b404251e420157dc18a32296d92261167b364bb5f6a1142189c11042b04d1d44b2e0e86d2b6df902dd7ebba386194a98f698eaf7047650a6d3aecc416e37fc34ee3564b51b2681117ae4d6ae4c763d8115c0c3bf64e6e00210b9c43a6c957cb304d2f8f9d43b0abde245c467049f2f863ae37dfab3ae73ba6516f0debb66e10984479ce81fcc4ba1ea5dfed292fdd4cacecf458eb93ef50e432e8ebcc5c1a08621c5ddf2bc0c1eaf91622201bc01106f631c49612c0a9cf4a84b04efbd8fc760b0d4ae1105c019e96ca415025c776299d60eae9e29912ded14c8b36d93483b331baf52b69d34398db4f701b8886ca306e17486c5daa49ce93f81aecc4364714279daaaca5facbf78d9d57f2af2df6de49abf009153155a6cbc5aa649a9976040d45032384b374d650cb265bba480d10cbcf414a0aa14fb4d635a7c394d25e2a947970d8be0322f021f3534430047f016144570c967bf176809501515c546a615017bfdad1a7f25e56e5e68530aaf14fbeb6e07fa17aa02010607d7a75eea32e96a918aee0a28b1540b6832aa44e43c1521433fd3f6daed493bcdc1f64035b9b1273ed49fdf6c21eb9b467dcf48ad9ba2ec05c81b5e50984851a33de44f0fc3b487f7a88559a6382023f10b470e81ad282a3f61869d9f8e625591a58763d98b25bb09309781f11d4107ffacf069e6e7b8537c33efb7104cc143783981e18e2de259e28a8098d301e104dd98316ca40d6db9b00d3df6b4ccd1da0a1b78e588b8dcb5b6ff40900b3eb9faf69c93f8ab413935c1c7b4e84d0faadcfef1254ccf4611b112b4779a1493300a17cc6dd8b1e1bc21f703ed3ca1f58df7df362965d139ea67bba0f4aeb000ae1d513a50d841cfa4c8b22d8213061c745b8fa3b044f65b9c2b77b4316adac707c8382cc610e42b4b4260ba1c3eb9bca19e174d1da8c3cd6e34dc80090eb949ea859c6e6644877894e6044f04cc268e2a80cd16a3b57216f181140495db35737ea56a211269e26264749d2e6d458c4367f07268d89aa854efd6ba6e88a5dddede6a8546ed53714b0ab89bee68312a8d8e6644486752584b73f20da3d1785e15cef9f851cb9e267febfc4f0df00fcae8eb08f3b9a2af5e3575380e39abe2a101d4a8ca6c72e6632fd1ec09f07c003e2fb5f3e0701fee9a09593cdcf6ea8a16208b19ef8a8f8dd9044195685f3553b21bb483f689d627bb763bd0bc674fee7470a074f4da4d1ab73f3fc5506b00dd9fa718bdebb290ee3ea8d3aacfaa8ffc7d3ee0f632d8cf6b5b3c44bc1b5416e60b2f21d91853ca6f0da325e66e5ff26b5d4a56c5a33fb02465ae6993d60e4315d8298f04b825f1fe86083cca2227bb26f6cae37dafa2fdffd7a0f739e9d75bf85a9edd897e0c47eb1137aa36712eaaec08e38a75d50c5742bf1a158a68873ff5c136607b5c5850d19dba0574395f4a44f76b05c4f02c365a6795ead778a8a1fc2f52ece0b150974a065ad23915d211de7abf1e079e40b0662462b41ec77ba8fc212c407256f0d12dc57d93f70706a2a54b15f947f54525df0aa3bc343ee39dd01ef28b1bda51c36d0fe71c5957302b4c274b4774eca1405139fb534c067b5ddcce43bd14f81e169bc838dede73c021f95fcd58d9a676d10c6bebf9c53c0cae6e5ca32ed19e826e146d9590acf6a71e42e619947c363991a9c46985db9be96917d5cee74265f6924b8d23a1c4b8a9a10b9c083aef5aa2a2919826c29e6447faf24b364ff51780d401138bf54da4348e7f5bcb50b477dfcd2a8e2544b4e183ea39b6a03dfc361d1fead8587bff17f8479583a5276b12b7e8ed767dd1bc617bada94f97fe6f0083cc402919cc8ef4d63dfd486e592fdd9dfc02c353ea7a7784c57e6c08a7050d1d94adfa289849eb1d89e24ba03502b663b0558e6c5e648fb823d1e90ff815720d8e44809fb68d2c0de81993b209aa5450033809e1f20fd31a2201aa148dbae6537e17e6cb9da1c84cccb5ebacc7e2841e4ff258ad893700c1c1cef891d277889e61776aeabd1cb1d33c2a3b26296c1147039351f04eee79d896d6625537431d8fbc6096e2b1fa63abdcb00c834d6770ef63405b27c3efe15470775a29a41cc707c62596f5728e915a52830b0b9320c23e307cc1c66d9c0ff7c8da7fa003587d9d9a8e5b07117e09a27c5ce0fe2b522f5f9bd30592ab2560391de11639ea58f3c768139e5cff2fd915231d57a31b003576604ababe9e7aa3bec90d826c48bc4148f017b42f506137c002f640ad0d03906b9cf5a0cf35ebd76ef5cdf8defcfabe2903ee93666344f6c170bf3a80a2aa6e17dda57b2b2b86d0086972e687a6a62b901f6f2c11e5d9b00e0df0d661097186b3e869279286ed3b3386ab78a66f8b9fca341290830390669f528a128129f091c54abad0b792f7065623a836b385868f8b1d732470a313409138709244d8a158d4f4bc2c8754e312347c0477577f9df8f5e403e72b9304b619775f2d7f78c3afcccb73948a1a2f929ab3879e4536ed7a32127f1e915d69458c6416b4e032be104625c69957e14cbf3c958f186da9051a5d53d1c940cea5dc8f6f4bcafa49cc97b44ee5713eadcede98fc647a019ec8631506ac1a53bf7cc34596ce5541849653101ed47b9c8068c95a9172736e475249e58b45237c32425c338cb0f7ca728764cfd3576824a3bcfcae4427e4132a9ec7c9dfb686fd1bd6f7668d4fd1fb01dcc0f1cf6cbc1db664c25e0bc8361c94e8c3db7cde1299a27b3e7235a19dad420c005ededd5e7df1b233f785228ea3beeec200ba0e65aca435c47f1b203589d1795db714c21d7910d26871b86625ead70fd5c25257a387070c8279117d0af3a4f700c6fe615aa3eb874c279cf16419c35da88926f6120872a0b2e4bd88e40affed140276a7034313863c7aeb0a93610c37215d9bbd52e6a4bf795984117fb84872ba1ce92b520ed1fc005374a419a26867609a37f507aa9693004757a743b8ac1fe034d9b30562cd6a4a377a331039b34e95acabcb8fd8179d6a149aedea20266666d743666081debaa8bc1b385eaddc4d08d0e5b06b438ed19d4104de28c3ac4fac5af01ec12daf6961fadef35a24e10afe4ae2cafbb35e16cfb2952a47988208d76e5be69ce7ca8752261331ad4eae37b23cff6b99aa75e0257bc924b3c50314095165919c70e23577eafc777670d5bf996c4719e135a0e3d66e70d0672f86864c9ac29aa44e7da6320d8dd68a7a699cef86cb566ec417fb0cf6c9e436599a8ad4a28f8273050643b27a8957428b212144a8460b4d3d3fa198c0d3fa81e99e4fd77e73d5621ffaadd0a1b800d8fea3045a9e51521612842dea5a0f2fa0da8fe91c107479981d78dd0df5142e9e407799fba197afe38411eba1efacae471b09adbf4e7a1ee00b955962322812871272469aa8b26818d067839742c3eae341a76ce12dc1ce598b0aef214050e6914b7c0e810f1942e1ebadc3bf36a1e8fb478f97eb13be5a20e7506c9b3c33c109e1ecfe28595d2f4880dd901d0af5e06a53410203720d87c302e5b7dba1170bc09ff85fd341b855c836412ad21a07f0c7f7494393340def30944b6847d91215b0517b0052c73258f2c281cb1b06e6d137e6bfe1296eb6d859648350d23a62e11eab75abfc7626deadf2414a6e24655ebacbb0b4eefe4700f5d39467d7f15d6e37e212b72e6d63213cce435960f610bb3c3a56b29d8c1a804ec0d5350370ed26a54ff32059b09d1d8ed6c87acad3242abfa48beda85e7740d8ab8336fa29c9a1fbcbdf7ac3cac160e43f5c4d200f1d1cf2bbeb7203d88d4968c72535981a732aa7b1577b40abe4844152a7207c5e367fc8072bc9717b72330106b78c01da6f1106a113b9e30046ccdf075982d93c50b6256e17f45f88f5b78d7c37488104e2ff3a573fffdd3298ed26cf893ea374e263602301c69f3dfd7117d5e98d386f4cb8dc1013c1da9aa42a31076f0f1593b7d330b008e478eccdc4601a647da5f1c52e63abedb5bf0da0d039767feed4f22a0c113386c1f7c46ffb64255ef071b111f3a02dc63314c81f884e63db07aac3c1637885d2b66bacca41bc1cc4262a69f43f0b9040b57cefa00c969aebf403b8d9cbb29d41d5ec64b5a3f9659a50163820273caaf73ac345835d63401d80ea39334e60cd8053ab89384d2e980972b009c03e139c05b32fcb77f787cfb7b781f60b5a11ecd5f12f979f0df2145cffd4860408a032f650290eb44b7fc0f04f761bd7970c7ba7ae6d1ffb9a9d9fbed4391fae451ed84dc5f3569ee7c10679b067c74cc294c045a846b4bfc7d8d1f471117a6caa01be333d60ec673dc334615a520393eea0d124cc75762e0fd3b0c26d4e4ae58afa15cb1553c1e899b685b050e531973dc275ec20d7d8f3d080b686e66e2221a1d35921b082c98516fdba36ffd88975bb9141cdb5840faecc45564be05b6013eb5aad6593e4324137f8a412320214eec6f03090836b2204ca3449516e949523d91393801270b01d8a07d57332ae09efec53f1abe3372c571c58060210425cca591149b6372e95df9ab025c5237807792c90332d950735aedb029d4afe7735f1f11f04c73c11c9a62337f792bf49da5c32a06d03b05d6b056e2d50f99260c93d5331b166a7cec2ffc8f6b608990b33e5a05f88a5a71b111d9bd9f10ca38af42cf44e688d42d2c14bad796b6f8bb8551fcfee3a0c381a832958e55e8617b93eec1cde268cd020ff158954d68b19b3712a32e60c0a5d322864a42e576ce3c43801708ceb21e1bc91ca560f43443bd4cbb9af6dcc44d1bb1987f201de2f29c8df7225a0725dab43d15b82ecd476c0c2c242224942798367001956a56a035254ea4328fc918154b59fa025e962c1bb7ddffd5923fd1162a2dd9a60b9a81cc24005b2985f31b2ee488e3e545b49f35b2ca3f877611d632610d15521839f0ed0231c26a276f3c85bdd554011623f7f10e82688fa504fc4cc588cb3bcb7dddf238070951b0da440df06fb7bd317cc66d8363913004b457e5c5b5e730e88f0a4972d104c0f222ae56ef9364a47a5ada57aab6ad0dbf5fc40aea1e43a85e33c958525a70bec2d66868f4be97fd0ee50e98150ee230c0da9ee253d8a813a8dab13e322bd9d02a84cea090b01f4fd077acc489899289d7da57448dbf65bf01db118c7a0915be2644ba7a80bb50b415c987a346340ae21beebabcd294aa3fe470d1c889bc88f0f47abcdb2b16cf8180e9f1bda85c39d7ea75a537daa10a0742ba137ac1e515cf1d0ba3e026e9a7393bbe56666300e4ff2ef87f130cd70810d563ed848820a1f9f9af5d955c8927566c8929fb5c481081e3791513b473606161fe4c2217738025d0dc3db9454c4238099aa368c391e352c400c5d13785b27cf4116b07af7a967ac0a2b6168f4b350bcc9cd5dfd41400e63769a3f011386000aa6621a4e9aa01ac2296ffa13bb0c363d84be04e46e73d293fa3291ccf3c6018b647eff60d3a191854b200a3021081d86db3b8d561896ceb9f88dd7772acd7009eca25e2e299daf2efdbfa05cd678572136f77af37236e92a930e5902123d80e3cb20ea488b7d35309577f00cfba4f739950d8f87741da9dde0f405e86fcfdc5a91fd356153d76103313563fe93d237bec9ba271e5c0bb3dea5b811b769ea59e350848901fb7336c675c99e8afa5fe91e538662c33578dc08f2dba89e302fac5198810c2add27b1e4e29506082c03836c0449f0c53866c7328abf5246790d9bc0511060dd1d2997f51215976d71eeb7cf03f93881d52fdc0c53161456981ae3e59e2c2c5f1d5d75a49abd73406a5f01a3425adb3a40114e90d3cf20626555dd9941200c82cd4cf9c0bfef7d02ca3297fa8efc1e6919096e185f1e7e7a228558bd457a6e741cc29ce15d43e7c4f0f7d9c982e1488c960eff3599fbcfe46f3a1339ff8429780e2bc582e40957034189e4fe4a474e69f629a63d6f516828bc981a24bc8788f079b9652cd109b2dbc3bba231841d232a6a9e1aad56da2b73b922120623c586c23c6197a4efd050443f49d929db2c73d8ccc23f5045ba1c86cc7015d0236d6b3bc1e6f4e85af64df57763d53cb25a75fd640d3390a721bf694888fea9d4e40be79ec43e356351d730251cbfa1467057318925e17bc9ddd4645c652de94fe461b7a1b6fe8d1526b51969d417eec369df6af11cc9f5dfafbff088483952ae0093c710170ea6c11b68e6044bd8513639933193c229ae9dce44db593015ff05c42b215490806c0c8505e37996f18f6604aac89cf5b5335736635705bd07dd75f91757d9b708cfc910a9155e3d69f36ebc123a36db90845bbbeaabc4f7567815c00b0f70f67e047752ec97645166e957715114bb8e5a2c8eef43d53784e34ed13cae6839eb75db186657316752cc29a1ed71585fe11af9eb9e4e0f9411995192de7971412b54b9b792d9a2e7333ad6b70ef5d969fb6971a7103832c14749a50a9794c3086208c8c818e59179f12f2d2deeacf86210d2b3537a5326416627d0d1860d9b7b62b927377605207885053d2d2c0e8b2b4dd3188ff73365b468c84886e558b90b6a4aa43260ba304dc18084ec54fdb2d431078680cc3012fd92a57c0cb27bf1fcf258bc3d46131a66471581c962493cb41b23eecd055fae0a8a3752e9c47e2a541b6eb7edcf50470f6157ee9c28c6ccd92bd650acc2d462d8e2a728ed745b0b475316b51bea86ba9c7524ef1362dae0e4e77c365d8cbd17ce5528a791a06cb5ad61b0db9bc04e4244336872f20cf9a186ff4b3946eaa33a0bc354b31284b9a9e2faae25933e28d6e4bb9e4e71157f7d4dd03cb302477d7c5324c86e56c7ca15c9fdc52ac8dab93f27bd62ce5d04f149637396f44c6e56db18ce23bc0f2adf2ba90d7d1ddd932cccee5a1b044611916c1f591326bc12f0a636943e08d9c5c1e9265d8209727c2526ccbd5f9cc1a1c6f3434cd86c71ba5f0bc1979231cae0fafbc2a242d882fbae1f2849661795c1f6277789661532c77b70b44c5f3b6c31b7971734b5eccca1277c01b61b39cac3a207e0f1a37174871813487a6bce3b269da686fa4e4f228903385f284cbb03aee4e8f655815cf1d927b078bab23a0b719a4aeec0619b8b9262f16c1ddc9598665707d8caa3b23e7f2eb592ea7bc25cbb0b2a5ece1697e5c5e194b311d9607499af08b1e78dee478a33b9eb404be68ccb23d3437f42e2cc3c0dc9dd332ecb6bcbdf146762c6951bea8cc7249bb49bd119dab3ba13b28cbb0e0ddb1598645b9392f9a0ba3b9065e0ccde565316d0ebc5195bbc36019366529f7fcce8c9bd39273e97d452c1fe26b74777c2cc3ae58de7278a32e96b514bee88fa5347b9e1697d780c495f901bcae0cca5b0b6f44c55277e7c79a5c1d962c1e8993e2875adc1cd7dbca93415a30edd6e68d9478d6eebc11d0cde92069497c911097c7551e0f4bb1334b1b146fe4e6ea6eb3b6c31bc9a584e0690e5c1d09bfa789eb73407164fec800978780a42df045676eceeac54678dab6bc11037747c6322c87a5c4f3ba0a6e4ec88b352de5f175125cde9be62478310d96e7217581dcdf0e3757467d8896712cc394b83aa8faf82cc5deb8bb2acb30a1a5eeec06addc1d13cbb0102e6f0d597be18b04594a2be509b00c13bb3c36b242e59db0148360592bfa22339eb6e31ba1b0945faf6bba3e4852b7c68f157075294c9b106f846649eb7d11979b83236f7ebc11d81227c40f8fb8bb30cb30a7cb7ba0bb0396613e1707c88b0597b3e97d47dcdc15b9ab5d21164bda902f8ae0ee9458867d707d929662805c9e02b2493497477356cabb43de6278232b963619de48cccd5d207145fc7089cbb3326b53bc11ef597bf3457cdc9c127206bd0f1ccf9a1e6f74e4e6ba7837af936e4cbb2d29ef4a7d70c5e579b1dff366f44637dcdc179236836cd6cb9fe5b4f24514b83b29cbb0a0aba3d25c99174be1e60a90b82c7e38c612f7c50fd758e259e22ef8a1033727c28b05717333bc98134b1cf18d4c4db3f1f1462adc1c162ff6c6b273bc24727351e5e9694eac3900aa734016cbd7cef53160b987b7c4b5f921979b43f2625296dfd01c1db9d95782cbcb92b399b432be08899bfb41b68a94574f73737372a44e8e1f9372731fc846298f8df252e88e8d65989cbb135b868d71797d2cc5b258aee5cfb3b4b394273c8d8e6541903710dec8899bcb41d246f82214eeeeb80c8b62792be38ddeb83b069661452e2f6a2906b4bcdd79a3afa5ce891f23e0491b7e51d5f529d21c1c2f56b69c52bec8cf9296e48b2cb83c0296616337f7427162b49b9037aa61799239c5bee8cae5cd65d81acbcef005bb3c16a64d81377ab29cb4e791f1ac91f9223ccf5af0e5ba3927f5a9b2dc237479412cc5d43c69bb2fdab2b46d316d54de28eaee2658862959dec278a3aebb73601976747960a4ede78d887737c332aceafa044dda175f64c4b2c3af9bcbe3632976c5b25d52eaf91d054b9dd8053259d2aa7c119aa55ce26d4796b60eea332469197c910877f7b50c5be2eeca5886e9b094587c4e809b1ba1bcaaa5d8d2cd1999362f6f6465298de5012dc3ecb839175e2c89e5aca1bc11ca9b336d7d230296057b89e4eecc5886edb0c449bd913cae4e84e6805e6ce9ea789236c1176170732d481b0d6f34668943e287512c7171fcd0ecf286cd3149da0f5f64c3dd01b20cf36259f3e28d7ecbd1f83659de83d4c5f163519e6d43bb3df046453c6b41bc11edf222588a0970795264b548da105f84c3f23dbaeb611986e6e61ee80e6b1996c07202dfc76b6973e28dda2c69317cd10b4b89c0cf33ee2ecd324c81ab3ba0bc2ed26bd92924ceea8dec71731bbc580e4bdc193f6ce34983faa2304f9b066f04e66913f246c6cbf361298675755d7e0f1c2966c1dd9db10ce3e1ea70284ecf8b01af147627c4326ccdcd3d915f95776419f6c7d376f4464d77a7c032ecb79464cf5be0f23a98cd60da6c7823323777a43b2296616d96b43dbe688ae55c42de0479a33f9e3501bee8ce7256f045b6a70deb8d1e584ab0df5959f687afd8c5e9f162ba272dec8bb0b83928f908d5dd20a55079b665d8d6dd15976172b901e52d2071516f0484ab8b92b63a6f94c1b23b7c0359e274f821073777d61c0fe5c9b1ac6219a6c2e5155986e9b1bc7df1466ddc1d04cbb02437c7c2dc01ef1d0b6e4e8ddc8befd21227df48ece6cce46d8537aa737756966143cbb97b1f06ae6e48da8c78a30b96b802dec805cfda166fe45bce27a4d6f5695aeeb12d71be4722e0e6f25417c2ef49e2fa04d09c1cd266801c02f99eee989661b5e5147adf959bc36aee84e68878312f9625e3a5cfdd41b10c2361395bf8a2224b1c0d3fc460592f5eea96371fde088ce57abe5d96d3812f0265d91abe7d5c9e12e5c9912fc969e47d639e35b3371ae0ea72cd0d7931a7a72dce1b615d9e194bb11d2ecf85ea2a271bb2087c3bb83e4fd3267ca3e21207c50fb1584a34521af9d9c2ddb5598645dddd13cbb011ae8eceacf9f04673594be28d70cb19a7b9afe68a4889e569bccb2353decbb03496b51cdea8cbdad1179db194313c2d8fbbe3611976e6e6ca26edeb8b9eb83cde32cc6ba9bbe2c7949e35275fd4c6d3e6f3464a5717e5f75c70734fbcd81a9747652946e4f2e8a82e8d94515427a4bb3996614d3c6bc52fca5ada907823359727c5ac39f04570dc9c03cdd5e4ce77ef80b93a1aba1b5b8695f1a485f9a20d2eef6c296667b9067226f145035c9d5473755e8c8d25aecb1b49e2f2a09662b9e51ce07d192c71777ee8b594627ceecbdd395986012f6f03a953e2c78ceeae6c1976c6f52160293676793974b7c732cc8ae5bdf2e0a84f02cb3dbebb0b631966c3d5edf07bc6b83a22647f664d8e37225aca3d7ec7c0e50dd15c4e4e089a13e4f7082d6793ff05707508fc9e314b1c0b3fbce0b91be0dec9e2ea24a0dd0078a31ceecece32cc878bf3e3c57c4fc9f47389cb4b5a8601b2d4f5f163572e8e8f4933e08bc45cde204bb13096bde1ebc7dda9b00c9360295f9835d3ddd432ac78774b2cc34058e2ecfcb0eb39a39038a0474a62f9cf4fc6dd5159861179ee96dc3b5a2c77a0b9397e4f97ba2c7e6cf8ac11f146b5bbe35a861571771d2cc3ae5cde58735c94c780a469f9223597a782b455f1466f96d281f2988adb3517c48b6db1ac182f797757c732ec89ab73d35c1cd5053527bb232ec3babc8dbd91204b5c963772c45282f1b90896380c7ee8e5f2da2cc5a29693c9fb64b8b9e18b35707946cbb03eeeae8965189cabc3226f63bc911b97f7652936c0e549d5e74816826fd612b7e48d50b9bc3da47ce26d003c6b4f5fb4757d983417807c86e686686e8259c3e28d7acf8ef976dd5c11f5e955a7c0a4157dd104cf1a1b6f24b4c469fd1090eb3380bc45f1467796e542d2e27c910ed36c65bc119cab6b40e248f8a1d5b25fe5ed96616e5cded0326c8fab03fe1e03963f696e0039d37c51eff2c2ea0345b389bd510b1737c7f7207157dec8094f5a9d2f2ae2b913ba77a8968735d746793ac879b243b49b006fa4c312c7c40fa958eadef831284f9af18bac9638147e3866b911f909dd9559861570730a7437651926e4e2f07831dcc5d1f162f2ea16f83d6d2e0fb80c93e3b923ba77aa2e8f0b292778da96e5317477c132ccc972eef045484b1a205f64c5cdd920c7e2cbe4f2be588ad1b094473c4d6ca973e3c79cdc5d1fcbb02c960b226b415f24c6e5dd29cf8aa5d80a77a7c132acca73d6f922a5bb3b6219c6c15206f1343d4b1c016f64cacde9a62d8537b25ace15e43c7e51949b5b42d234f8a21196b8e023e9b0941c3ccd8de5ecfa2204966522e70fdde9b00c2bb3a479f92236cb99f545052cfbf4d5e0ea7ca86ecbef01e1ead0c879c2170d79de1478232096b513be48cf7238a46e8b1f233eb7aeae85fa08290fcf128459189a2393b721de488ca5ace3755f2e2fb80ca3e35940babb611926669acd8d372ae1b94bba77aeb83cb90c5363593f9a137a31a8bbbbb30c036229bd3e17c7b3e6f3455f5cdd10bfe7cedd45598609af6e76076619a6b4acd5f045624f5b046f74e5eee85886397177682cc37ab8b92c39c792e6c0175db0945b9f3363a9d3e3c71858b6d71c0ad326f4464b4b092c0f86a598d4f246c31b6d71754b24ad842f4ae1f2c0588ad5f0ec55753fb49bd51b1971791e2cc5b05cdd97df63c2722a795f08d36eb7378a61699be08d1cb839aae6a290b417bec8859b4b2a4f8da5581097d75b86c1f1acddbea88b9bc3bd1892e5f4424a354f53e3ea74d571d01c1572e2f9a2a8cb3b5a86f971733d481c9237e2642917785aaf4e88df93c6b2baf2bc6406cb4947de79d6947c911a9737b5142b2e7126fc30cc5267c78f2df0b41d7923a769b63c6fb4c2cdcd1733727160cd7d69ee4d774d9661ba9b13535e9da5180ad76781e59e21974744797a48dc163f4ce3ee9a9661b6cb6ba33aa3e2f228af681906b61c8ea4adf0452cdc1c0652a7f563062c3fe27be4eee22cc3dcdc5d1ecb302a2e2f681976bc390de6b4faa2dcd5f5240ef74664cbc1ca2bd39d20cb303096b4a42faae0ee3658863170735b1257c50fbfb83a23ea53407755cbb0a5a514e477645c5e1db24f66cdcd17edb1bc4a4a363ee775732574e7c1320ccbe521b114ebe0f2d2d06ebe379ae139cd282fb70c6be3e6ecf83db4cb73609982a431f922aa67ad8c370a2e2bb77537c6320c8727edf845515c1e6e19c6c69226e58bccdc1c95f202588609b29cf279625c5e926558d8dd792dc38eb83e42cd81316b6bbe488f8b93e3c55e3648d2e47cd10f4b1c953732c2d5513547c0a4c92f72e0e2c8e4f4e38ba85cde00cbb03d5737427360bfc767292ba82e86e6d0e8eecc32ec809bcbe2c5e0b8bc3cd3f6c21b8559d276f8221a9e35dd1779b15c4979679662075c1d92eed25886fdf0b49979232f4b31cb9a219fa23c2f268d8e2f82e2eec45886dd707516fc1e1696362c6f446579957f8fe74deb8de6b839301217c60fb396b83a3fe4e2e6d6982deb0e8c65580d37479b3b21f7ced4f2637756cb30a6cb2b96d7a43b1f966158cb5b9c371ae3ee5658864db094453f5358def0bc511e4b5c083fb4e0e68092c6e68b42b83ec5f2005886057277062cc3783767c28bc5b9ba24e561b1146be1ee9e9661b86557f8eaf19c327c11d1c50952dd95eedc588619b16c63892be3875c4f1bd41b25b0c425f046dadcdd9365d8cfdd01b10cbb603903785f9bbbd3b20c33b2c431bd113457a746ce1bbec868d924523ef9b9c69246e68b38b8392c2f766629a55477c4ef696339b7bec8809b13404e2c5fc4c9cd3521251a9fa3e0eaa6aa9b61da0678a326578701ed76c11b2571756fa68d8e373ae1e2787fd4bb4b6019e67bda5878a3ab254ee98d587079599662484b1c056f648e8b1b04e7c20fd72ca7025f44b75c8c735b5e4ccde525b114f3e0e6b2bc589a9bdba2bb289661255c1e96c4d1de68cfb258c86bf80e79cee0fbbcf1a43921755dfc587179567d7ef56140da3e7823a9e539c839417955a4ac92b8357ef8c6ddc9b00ca3baba35bfe7878b3ba3ddce4cdb086f44b52c97af1a4b9a9a2f02e1f26a288f4e7378ba7b631986c493c6c517d1b9bc9f65d81cd747494a2be414e38b9aae8f4ed656f82240ae2e80e6eef83db625ede78bbcdcdcad3924e64d8b37e2ba3b279661225cde195236f1b6a4270df7455a2e4f8ba5d80b3747c7ef91cfda075fd4c7f366c21b49b1dc8ffa0ca71cd7e7a7393d5202fd24e1eeba9661749e343cbe488a65e17829e4e63a68ceebc5c6ee0e8e6558124b4994b808dec8d7326b49e3e08b4878defa462f5c9e13f501ea6e8b65180cd727ca728f7089e3e1871d2c4740daae78230d96b8228f646769cbe28d3658be829443ec01ba3e4ecd5551f9933806de0809cbe9f545092c7583dc9f11d78769d67ee5392dc7a49ce1697adcdc0ae52d55f7abce86e62078ae1f0ef2a4593169517c519ccb5b41ce2024053727457d82d53d501e07dd65b10c73e1599be08be6b839dfec202f09b8b92ba46cf2b38ce70d88370a63592b5eda6eee861793e2ea88bf6782bbab6019c6e4eae45427f47ba296928ccf49707548345bd91bb9b03c886fd173be205b47777e2cc3b4b8bba565186db917d93424ae8d1f862dff52dd95d47df163c6e5cce08b7e6ece47d6802f07cb2e214ff39dcf9ad217adb19c5cca2babec35c7a4b928b336c81b21594a3a4f0b5bcee2fb8258e264f8a19be560c8b9f80e97528bcf11afcf94e51e217727c532cc84cbd3a03a2df2b6c71bedb1c43df04694584a5e775c966149574746aab12c4fde5e78a32a9eb5335f84c7d2c6c4a4657dd1123717f67b869635b2371260494bf3451fdc9d17cbb019eeeecd328ccab236c317853d694d5f747577312cc3a62ecf0039bfcaeb2aaf84e63290930ded56e48d6c98660be48d58b839a41753e0e6ac68ce83eeee5886497177532cc34eb83940aa83529f2bcb3d444b9b9a378ae0eaa6d06ebb3792e1ea8cfc9e2b4be9c7ef26b83c1096620e2c2515d3c6e68d24b8bb139661102c65d6e7cab8ba5a771c2cc3ac2c65d8efca58de5278a329ee4e8e65181377b766190665592a666dca17b9f1acf58bb658ce21ba1b6119c6e5e692e80ece324ccbdd0db10c63737513c85a0c5f34c8cdf55e6cc992e6c11795f0bcfdf1467aae2e4e730bbc5898cb3ba03e352953785a1d57e7abcf52776b2cc384b8bb2bcb30a2bb93601946c0cdb92169207c91094bdc073fac608973e287562c6b5b6f44e4f27ccbb0386e4e494a027e1af12c5671764c5ad7173571734bdd69b10c7b6149f3e38ba8b8b83d723ebdafcee54169ce4c7da02cf704ef2e8565d897cbfba13c326407f8aeb939624de88bc8b8bb3f96615d5c9d93944f3fc9b83aa6df63c1529af1b9099eb7b2371ae4f288d595f93d375c5e93e4e3eeae5886b170736ccab361291666da6d4a7519fc1e229672856983f2465096b8306f848fe584e38b14b8bcdb328cebee5a588655b0ac5d7dd1f1e682e57d491dd78f2170717bbcd8eea99be2c7962cdb545d02bf87cc73c2f9a2a0a7edea8db85c1e13e5112dc3f8b83c34b306e68be89866b3f346223c6b4dbc91eef2a2688e8fdfc35bee7217a88aa53cfab9c2d3767ba3259707c852cc8bcb33b314336039b54c41bec8cad3f64377142cc3965c1e06b236f445652c6f6bbc911c3767417d84727af922f984e3e6dea84e00491bfa220996381f7e38c3dda1598621b09c64cab360daa4bc5194e57348dc9a1f6a79d6bc7cd1d7b306e78bfcb83928e55db0f3b9772a78dea678233596d3cd17012fafcbb03bcbdb066fc4c4725af045b7bb835a86e59632cacfac8bab434e2c9a0ba1b9392f26c6dd652dc386b83a2bd93c266d892f1ae2def4c81bd81bf17179c65923e18bf2dc5c1fefc1d3bc9613cd17f95ce9fbe964a9fbe3fe72588e9bb6256f54c052c7c78f59b93a0a7e4f0a5727ec4e8465d896cb33a2ba22cae322a5d24f249eb52b5ff4c6e599206d4abcd19aabbb39069af3521f05967b7e4b29e769812c57539d0e9266e68b3ab83b37cb302957b7427315481d123f467477362cc3c22c69357c510ccb5b176fc4c6d56529efb70cfb5ace3dbe68ca12d7c50fef2c7fa1bb369661739655e325f0fa34a9ae88a441f0456d96e3f962b9ba0bba236119d665a93be3c79e96381b7ef8e6ea2a90742cfbd47ad638f822b0a59c766be08d88b8393d7e8feee66a90ba317e8c694913faa22f4fda1b5fe4c47235e6ed8037fa61793be28dccb839273993bccfcd1267f446725757a5bc38662dcf1b0130ed467c231e96dd2aef0ff9d777ca728c25cef646637717c1324c80cba341d6ea78a3a3a52d80377a7ad2c6be288be56ebeb6a72d84379aba3e02543740797bba8b5a86012d6b4bbc51eeea6cbf87b8d455f1634cee0e8b65580b5727cb5b622906c2cded3127095f24e4e6fea8ee8759037ba3a4a514f2b384a7cdf846075c9e04b2bf6fd5f246c21b45f1bc55f1466b2c6968bec883a5d4227747f74e1577c7c5322c86a5ee8e1fa37271637237afd08ae53c7adf044bdc153f0c6349a3f345405cde93c439bd11ac9be3a0b935f5712269297cd10ad7878a9c8cafd35287c78f55b93a26bf278269b760770d2cc38c9638218f74c6e5592dc59896273169665fa4c5ddbdb00cb3603917f822055c1e9165181e4bc9a5bc2d5306f0f385a504e1696f2ca599a771b1a405f0456096b284a7cd717344dd795986057073449a53e1c5e82c6956be086b39b9907b6eae4a79b46558d67229cddd91538b691bf3465dee6ecc320ceaeadafc9e209613902f62e0f2c2a82e694edbf3ca987663e08d8658160dda6dcb1bc5b93a22f3c6c61bd17177c665d85c968ea40df04552d70701b916ddd1b00cb3babb1a9661577757671986c25217c68f2d5d5c1f2fd6bb3932c585c999c36c10e515217144fc3089cb535a869ddd1c0c12b7c10fbf2c75767e0c6a3973ef53e559abe28d7c9638ac1f62b93c31268deb8b98b8baa2df43e5f28e58ceeeb62cc38edc1dd8320c8beb43449ec6b4e5f046659638aa37a2c7e53d519e5979212cc5b22c0be77b5c4e66d72bace2eeba2cc30058cea2f73db02c1b92f6e48bc82ca7992fe22ddb44822d77bb4be46929bd3c0deae682aa4341e2a0bc91379747426dcf1b2559e28c6fe4cc720edfc7c352eef0b43ea6d9d628cf8b9480fc6e86e5edcd1b2db1bc825f6c8913e187535727835ca83a30e5dd501d50791f34c7c68b0d727950546782b449f146182c0b86dc83afeeeec2966162dc9d05cbb0e1ddd1598669707520d4e7487347e56d2dc5e2dc9d9865d8d3b386e78d8c5cdd91ee58588651b0a429f9a2a9e7ad82379a73736acc1a1a6f245c4e2b9a9b7ab1109652809f746e2e49736d5e6c86e53f7c892e4fcc52ec6939d554074379332cc5aa96b4a02f8260795be28dd0b83aa5dff3653935901d41dece7823382e4fc832ec8eab2b41e28ebc91a465e59407c1522cc9e50121716f7e08c1d5599138377e28b69479fc6e81bbbb5a86352d37a33e5d8add59ce285fa4b79c3f2f8ce52dc81af962dddc0ed5e5501d1729c93c6d8bbbfb6019d6c0f579b2dcf3b3ac15d9275eca9babe3f7cc65ed86ee105886f5aecf90a5189ee534e08bd8aeae89668be38d4c58da7e6f34bc3b3dcb302e9634375f04e7ea58983528de687771baeeac5886ad7073c7fac8a5981ad36e4c6fd4c3b37b5e2ab9bb109661599e3431bee888651df8a6b1c435f0465058e260f8219ba7ed8b370261397defd3b5ac19f92234ae8f91eee62cc3de5c9e20723ef922bcbb436219d6c1f28ba52ecf8f61b9b904e61ecf523517474a0d9ed6b5c4bdf1c33dcf39f545b89b4b535e0bf221ff194ba9c6e7c05c9e93ee7658869979dec2de0890e5edf846785cded552ace9ead834f7236f58bcd1d6b236f54575dc9c1ff5913800de48004bc9e6696b5cddb03a0fe4ad8e37c27379542cc552584a2e3eb7b49472d6b67c511ccf1b9c377ae2e67068ce87f2909661792ecf8d69c3e08d2878d6dc78a3229707267138fc5083cbd32a0f073915cdc92071677e68653987dea7658903f346e858ce417541fc1e3b97e7a6b923e404fba20596b5a42fb2b3bc35f146769672ea6914dc1d966558d172e6f145522e8fc932cc6c496be18b5a580ec8d7cbf216c71b1d6f6e4c797196626e2e4fcd52ecc9d599a1dda064199797816cf18bc1d5d5206f6ebc511dd767376f1dbc5113cf9a9c37b2dddc557314d4072869277c910acbbbaa1b529d0a9206a73b3b9661505c1f2bcb3d437787c732acceb24dc81a186f04bcb83f5eece73936ed36e68d8eb8393c7e0feee68cb2017c2fb8391abacbb30cdbe2f2ec284fb70ceb5ace9b046f2467a91bbb40a5e59ce38b9edcddd6322ccee585598a39dd9c19e561a9ee85e65278b139cb2a505c6fdac4e82e87651899bb235b8699717308bc1805cbe99427711dfc7082bba3621996c2cd3d495d193fd6747353bacb6019b6c052767dee8dababeaae8065d86eb90252c2515c597962dd81b00c73e0594bf345792c670fd539f93d66ae8e81e6769376e78b94b8392dca1bb20cc373797664adea8bec58def278233d96362b6fb4c072caf92224cb27a86eccefa9e1e2cc5e8ce8ee605886495dde94a59890256ecb1b416229bf4819e76980dcdc19cddd5d12cb300f6e4e49776a2cc382b8b9aef26acb30ad250dec8beadc9d09cbb0072e0ecf8bdd6e4eaaba27e591491cd41b49b36c527d00682e8d4a225307c58f2959bec4178065ad852f0a64797be28dd258ca1f9e96e74993faa2375c2ce50d4fe3e3e698282f0d49ebe18b6ab8b8317f4480656dc8178d717905d467c9ac55f922afabe3e1f790f1ac21f0456cdc9c13d5157f0f05371743776a96614f96b38e2f82b2ace0ea68d346f4464c4f1a1addfdb00c4bf39c76be08eae68acad3b21433b2945e7c0e8265874859a5ba307327bc77a4ae0f4df6285b3425ad392d2f76c1d535a98f6d29b6757759966148973787a4ddf045324cb371bd110937d7173b5afec45780655390b423be2888258ee88dd09613812f82bbbaa5f2e02cc5b4dc9c0192c6e58bd65c1e1e1267c40f9fb83a17ba1b641916c6f366c31b71717963d06e50de2888a56ce169c79b3362d602f8a2349ef3033993deb7e6f27c96616fdcdcafba08ca8b41eae8f8b129cb09c617312dc15c1f24cdedf93d455767fc3d155c5d50caa49f2e5c9e926518d9dd512dc38c4b5b056f94e549cbe28be6dc5c97f2a6e86e8165d890ab3b9237f14d727766cb3034ae6e8369e3e18dcc3c69555fa4c1d296a4ba027ecfd5b25264f5c87a20e5084f8be379a3bd110c57a7a4b9307233dfde1d99655893254d902fbae2e6a4c8a9467363147794c79936dd1b3159e2e6fcb089bbc3611936662973781a983c2769351bad66ebb77fcbdaa4dd9aacd974b75ae7afe643b3e572d36ab85c8d76abd5e4b4f5de4dda6c95365b5b9a8da66b0f679bf6cbe9707dd22a85f49a9338db9c462bce77ae34dbc40d55cefeb72e77cb733d5d6e0af1641f671b48b3dd78b6200e97c3e16af34a21be9f3ebb7dba658b642b938c7445b7213b399fb77d8f64daf3a6f9744a9f813cde349fe5342313f76fda88826841bd7f7a4123dda3690befa55d7b97fbddae15790e000ef76edb4fcedebc690fef4382949cbb39dc049a3770c8bb3f220780689cd2b5d6a48cc05d0e8155e71e82659f2f038dfc84dc008af4cfc26b07213101c88a1f80fb41773277e83990088d9f013fe57ff9e30eb3edefffef5328beb5e574fe471a8f69eb8e9a84e5bf46afec5315bee09f1f6d93ad956d2f413849f1bc4c80f6e5ff1e2f89e251e5b68dcb71210d8efbe01ccf9d911b5776ec9d0ebc3ebae3b850145edf96bcfa25c0b1c10b8ed792a8a373801d3fdac36b9c1dc7e711afe3f470dcc7e4f52d81e3446478f52be8f8dce2359d298efdb21dbff171ec9d138e4fa2d7c32570d407e7f82d8ad772ec384ea789e34459c7fa1cf06a99a6e372f0388e1b72bc889edcb73f8ed77a385ec3e1d8afa4e3b72ac727d5f1b122a197881d171ae2b5d0145e13b171bcb74099874cbe1e72ba958c1f7dee8ecbb9e3b86deb38511ec76b45782de7ebd82fddf11980d793ccf19a17c77f2c786de33ade134383e715af878ebd36e7385119c7de49c1eb9b1eaf2753afcd707c4ee1d189c17122408ecbe9e3d83b2078550887dc38398ee3ba8e0b7de0b5edcbf1394edcb6c571fc064cba47a54cbf908e5503ca71b3a4e347c7f60be8788f0c0d2e62c66ba1328e0b01ca5d244aeea9e4354ec971223b5e9d6f8e9b31396e131e5f82e7786d8b2105f6384e07af8bfc91db4687d71378fce6e4f5901d6d1d7ce0d9d6751c27e4786f0c0dbe2de0f51c733c97e5f8b43a3ec40137911dc76b4a1cc7ddf1ea1d128e13a541c674b638ee13e1786d08afce0c8ee3908ecfdfb14152dcc619393e87787d74e7582207e41ec2d37e09394e14c8f1d9c4eb593b6ed362649e01b76f51c77d4e5e0fd5d16d588aae11e1b5ee8c5cbf861cab4694638734b9f5cb85e342681c8fc3c1f1f9d489ee1cc7bd71ecef835ca706c796613a3eb1788dcb3af62b786ccfcceb213ebc269ae3b8d9d1f1610eb889343936782537ce8ce345ce1c9f58c771625ecbc1731c9783d7446b1c373372dc26c1f1c9c4eb5b99d73d06caf4278fdcb73d8ecf2f5e137571ac8f01afa71132f62123b710145ec573c7ab778e383ee4c6f139011ef591e0d5a10472e3e8f02a9016b789bc8eb5a2875ebbe1f854e0786d8a9fca613c8e1b3a4e1be1389118c7026591eb57edf80d01af89e8383e2538964c9e3eb978558d27c7ced1c7b175ec81e7233ebc9ebae3be215e2db3741cd7c6f1394bbcb6e1395e24cd713a4e1c1fdaf2ba26e7f8a41dfbf53b3e23f06a1d7d1c1b34e036911ec7735772f7cad0a05fbde34b02398e333b3e94d587d8f0ea8f8adb34128edf9e783da31c27da3a3ec51cfb75e4d82fdaf189e6d81fa6dc3fa7db425d788d0b3b3ea5f258e88b63ef5cb1b16dcbb13aa85ecb42c84b04396e0b3a4e478ae31308cf73c8ab73ec71ec1792e3351b8edffc387eebe3f8ec1d8b47cbab40799c28cff11a12704cf475dc56c7b17790382ec796bb2605709cd7719c1f45c6711d1f1250c7d3e7f851571f0ed0b51c3e8ecf01bcaa4b20779c0c8e0bd5f15ae80aaf6d13787d24c7715b17af89cec8635bf038ae87e333cb715c1dc7898ec785ce386e1372fc96e7b890378edfa81c8f93e7d89fa6db738ad7b825c78ff4e83381e34466c7ca513cde9bc2cd4b06393e548267a12d8e0b65e1f5b4208f85cc384e47905cefa461a37848392e878ee3f3c86b222f8ee3dc383e17f03a8e0fc7de41e138d117c7715fbc2e72c1711c0fc77b4f6126e23a760e3e8ee36e388edbe3b8cd81a37164c78fec68bf78c7713e1cabb3e3788d8ed74461752cd4c4f12258c783151cabf31dc79571fcc88f637d568edbe6384e04c6712137c727ef781c36c727ee384eeb788d86e3b51f8ecf24649cdb725c880cafde09c1eb9a133e1f6d1d5f12763c8e9be3b51ce0b86605d0435dc7977c909bd785cb36378ecfd992eb17d1b15fb8e3b822c7fa241d3743e2b519015ecf24af89fa38f62b771ca7c7f11a10c7a7d1eb381b1c9fa345ee19e6f892b2e3b81d8eefaee426bae3b88f88578740e5aaf3f12a1e548e0b5990eb9d30ed9d0fbc263af37a068ff589e035aee8f8501b5e0d16701b17c0f15bf1d83b1c78ad33e0d696798d0b3a8e4bc3ebda1541138d717c77466e3a4f789d333bd60780e3f3eab82dcd9167015e4f068e0b2d712c1940faac208f87ee1c1fbaa30b81716cf0ea380e0faf89c4bc266ae3d832c5e3b83b8e0b71703c0e06c77182783db51c7b070d1b0b49e135111a5bfdf2393e8bbcbe3539d6e849ee257a8edfc08ecf8f4f3078ec33e158df08c7e3bc39be248fe345966edbd838d657e538911ac7de31e1f892e3f1a33ebcf641b1512208e4be29707cc91cc78b18917bfa8ebd83c5c64bce8e9d6e8e9b1d393ea9783d01f0ba57a54cbf8c8edbf438b667c4b1c130c785841c9f4f8edb808e1371e1f53ce058e0c77167c7e3601db70d297a76f12a1128b76d5fc7de29e1583ca21c9f3d3e3447b7091d8dc3c1eb9b14af6f508e0f69798d233a56f774fcd6741c1781d7b729c77306dcc6e9217a0ae035ee8c63cb188f2f313b8e83e3d82fe1711b18af6fc3e333776cef88e39300af6d0f1c5f22c7711c19c797f471bc16c3f1b9c46bde19b9fa2039de830ab31006c783141c0b34e65e62c7b14133c787cca9e3293c36a8e6f812408e4f22af89fc38f66b1e3f52a3cf226c3c973a0ec9b15f3d5ed3c1eba3ace33e10e03c9b5aa016b902d7dc9e4380d74bf4382e24c6f1da11c706d91cbf19e0553c595ee300393ecf1c1f82c36bdf06705e42c7b15f3fc7795e2498888f63e5603af6abe8f8111ec7deb16263a2378edff4388edbe3354e80e3f3e7f88de87591e36ddc1a5effa0724f23af7d1dc0793a70fcc8eb589f008e154ab915b8945b2883637d53bcae7de1756d095dbf3e5e44cd719c045ec5a386d7424f1c17a2c2ab444f6ed776386efb395e0be3a764f4741c98d74bf6385ea322b81c3f8ed7e2783d91c8d876c771a2308ef3acb86da6747c5290c7b7038e1556707c09d8b1c227b96dbfe33e0de01c04731ca786d7436f783d1487d747605ee30638162b8f6da2b1637547af6b3c1cdf19702b9e35bc16aae2b810616e1c1f5efdf21df72920f754e2b59c3c8ef55139aea48f63efa86163394a72f535e0d5af24c76b35788debc3eb9a105e0fd1d10625906b50ccb15f458e0f95be8ee3c7f1398f1572912b1e51c77d0cc82d448ddcb62b442fe1e33811d8f1e9c56b1b1f5eed9d795d844e6e395ee44a1425770d06af89b6384e2be158221b722f213b4e34481d13e139f60b78bc16c5af782c70fca88d3ea11cfb15c0711c1bc78ba0398efb3a8edb3a3e2476dc56c1f159e678af8e9b0a4dc96df33a4e64c6b13e295ec7e9e038d11fc771478ecf51e2d55f9adc435e5e2ff93a7e83f27ac91fc70a2120d73b2a785dab139c4e16c785bcf07acae3383b5e2fb9e3b84d8ee336088edbac0c8d8be358399a8efbc0f0ea973c2e14c6f11a14bece91c471db1ec7de31e2b89c3d8e130982e7e9e45839968ee38e5e172973ec4f4aaebe058e1369717c2221635f09c7ded9c06b212e8efbd4c06970cc71b301bc3e5aa3df9ebc9e42785e3276dc0ce978ad09deb8b1e372ea383648e6b88f0338ebacb8ad24cff1226b8ed78c386e8be0389102bc5e92e7f88cf2e39c16af89ea386ef3e2f524e2f51c7a6dcb82f4bc1d1f52e3788d89ddd3cc719a08c7a710af67d571df08b987c28e9b09e0f5cd782c961fb612f9ca3d1f384e040a8e6b3e1c2bc7f0d83ac0bc7a87cef1381a1c17b2e2d85f9ddc42631cf7b9921b17c8715b03461f711d7b078ed733c86b22398e1bc147ee233c5e13c571ecd7d0719cd1b1424bb9def1c0abbd32af6f4cc796211e3f72e3382e8fe3435fc7cd9478154f1a5ec5b3e5f59472ec1d31dd7741084f048e1fe5d185b4f0ea0f1eb706d71c9f4e7d891fc7a79563ef8c69ef9c99e3da13bd89dc382e6429378e806383658e13751d27c2e378ce8a5bc9fcd196191ec711397ea4757c1ae0b51cb0e343691c1b4c735c8889e334138e4f08f07c2bc0eb5f935ce5201eab6be2f51097d74afc381648c6ad464e722fa9e3f8b41dc7e1398e3b3a4e078be336e0711c00c7faae784d6789e3476c74b3245efdda1d9733c771dc20c7717f1c1772e2f8123c8ee7b81cef35c94db4c7b14151e4b6b571dcc640917e0d70bc47456ea136c7e231e5b81900c789cabc9693e7d8afa3e3b83c43db28382ef4e6586117b76d448c96733cee6333c2421b1cc7a1719c48eb78ad0ae172e4384e04c771223dc7cd9678f5ce056c7c73729c7725f72c7a2d478f637d58bc8ed3e6b82d0faf6b5c102951546eb3008ed782f07a089063e597d735198e1fa5715c77253711191e4f28af89f674bd64cff159e528a7fc96a3d19ea58da32d6952d6e6ecade16853ce5a7dee9d269f36dd37dc36daac5d3b276b38dbb36dae3c9b94b64ac9bbd3b6ed9f0db7cd469bcbddfdf673b521db7ebe1bb8bcd6733bb13dbf1df4bc063cf7ecadee213ed39e36db725d0fc713ca3b77b473efd675dff2df3edd9019bc366ddbc279072f62e44e93b95b2db73c4793d3aed59826d0bd567b031c279fcb65bbbcbe27eddb37da42063e6568daf323cb9b1c341f904def71d43f03f9dca5acfb041aad36c8a43b030bc1043868837505e60d9b0cc6ac61d2c484b844cc1a29314b32c0c200812326f83225f8f2c34539c08ac1f8e8ea15b5e200df8c6042301f38c20036d34b9728264cf1e083130a58f3ad82c9658bceabc90ab601824de4fcc1262b50a971126c32e47de8e11d4c58808405d8a819f395275268d08c392aa07804c0111a2b3368accc30059f40384010404662258838bce082971d4820e8c4c506d684a7e8064c9326c126139ade049bc40870d4e448c95193246fc5668c1a0caaa4acd4acb9c2c2bab252c354e7611b2c7336fc987cea1af8313d9726f5442fd36e62bc31cbfd51ba5a23dc1f943fd3e1d694f822d5edc5f1665c96406e6e1ef9d449f9b13eee373c1102b726c71741b893f9a9672b893b8b78252c57d8407f3828f0829b25c50d2a5e3d4cee54e093e858e60078a3d70d6eb95b74ee8fd0d5c2ba83f03ede052ae0826df0dc313d199825cf8f2f2b5ee01c576b786b665fe4e102a5dcac11aeafc99bed7069569ee8e4fef544515ce0929b55e6fab6bc19143788c2ddfabac2dde59a5afa706fb6c1054e307da27c59d5fdd15d2d304bdd0f4f0674a706af84f4ac71f9a2f1f60279b332f727c9d5eae0f6ae7833e30d1691bbe1935170852a5cae3aee620a64bc60173c75177452f14a524b1ff96505dc1e1c6fa6e506195d3d4596401adc3cb4fb174fa4c3b41b1a6fdc72838c5c3d451758c704dae2e639f2f479fa320bee44e195867712f049683c7338fcd8bc414b57cff0fe60d099e69584dcda1d5f2ce1fee4e5133768aa36da1785b81384574272270daf64c0f326f646aae54ecd9365706b487c51ea4ee789b2dccf782221ee8f857b13e1068ddc2d0c6ef082bb25c6f3f6c51b1db8b93df529f066412c753d3c99f0b99bf26456d7f7c19bc9717d5dfc59917b194f04c4a50df1c41d9639207ecc763bc11fb1708358770b8ca7a4f349322c793e4fd6c5fd61f0675b17c8c0cd42e1e9c3f565365c9b972fdeb9c03a574b3e7136bc5188e50ece9381708152fc7c70b5b22e2de895ae7876d2a63cd1802b1ce07285706900bc92191788e88261b94130d9401e49cc15d69adbe2c72058ea4678b2dbcd0dd25e1f6f5675851c5c2eada52de88b4edc1f1dae961fcb20decdf3c2158e5d3021b71d2ed083e6ead487e7cf1458e22a78630a1768800b16e602d190bc27be4cf8dc59f1643a2c7dba37e3605a8f832f0be4d26a78a20a4f1fa22f7be0fe545dad3af727ced51a5b0e26bbe48f9a2e90920b36e6fec2e42ecf9341717fecb85b4d9ebe1dde2cec39adfc006c6eae848fb3c39247f5647cdcdc1b3fc6e61687474a72835f346875b7ac58eae078b2a50b0ce06655dddffc33092e7086fe68ddad01eecf587fb05c2d216e2f8b3763ba3e2b6f96c49d067c521c57e8bb5c5777ae2742e2faec74279ee80b929afbcbf26773ae0df7c522aeafe9cd6e58f2949e2c2ba985a70feecb1c78e6b6bcb18f2bf4e172852d71636f24e3d9a37d599c2b8ce37e8979e6aebc918f1b14e06e79707f7eae56980b04e1668df104b2e1e601ba40005c300aee0ff767162c79404f16c60da670b7e4b8402aaed6bcbe2ffe8ce8fea8feac8aebcbe3cf9edca0e1d5a3e40abfeed7981b8ca03f4eae560df7a7c09fddf094639f94c4a59df0c40e6e0dcf174d58d676f82204b7443c12d433e7e48d785c202c170c869b83a342e3e54ae1d64ef862d4f5bdf0667aee739ec8812b04e272ed59fa8878b3b1eb7be3cf986e5078b7c6dc9fd29f9970a7904fa262f997020972f34cb93e306fb6c5dd89b415bfb8c5a5e15e49893ba17cd2f102e1b85a4a2ed0cbcd9ae1fe0c71b5c4963733dea8e5ce235e69cb1228839b678e89b93f386e56112328b813e893a6b847f144142c75413c59d0f5894d9cd01bd1fcd373e1cbf6dce0bc5b105c1f056f96c59d735ec9811b1cbb5c5ac636b84154774c905b3be28b164cc34179e3073758c2dd7ae3d28478a20ef7c7c6cd02babf396e96d113a88a9b076959a33f12b2042ae1e6d15dda0d4f64e106dfdcad346e70ea6ed559ea7c7e6c88ebd3f2664fdca01af505f267579e3e517c590a57c8c705cb5dda044fcc72756d70ccddd2621ace8f3782b1d401f26409dcf9e595faec05bfcc882bfc5dae3057c8d4e9c42b7d59cadb23adb9c0b1abd5c0058621773d3c590b17d8c5d5f23d7de8f8321d2e50940b56c2fdc9b9371f2e90d4053362c97be1cbe4d3a7802f93baf38f57cae10ac9b85f5bae5084cbe5f504f2e2e6497aca253e8986eb7bf3666e2c81ca6e1e2b4b1d9e2783bab38f57aa210e0f57b874b954b8c1372ed7d2054671b3ceaed0eb7e594da31dbf18bcd3f0444d9e35e317935c5aee959658ee8a9e8ccb05a6b959515c6194cba5c30d6e5dae25cf9a9a2f1e7069699e68757d77fc590217c8e88265b9ba25a57df044365708c7fd0af3d441f063815c203117ac893bc95e4988ebf3e0cdbeee5cf34a421788ea8221717f402850d5054be2daba7c318d270ef8c63257eb96ca1f69507ce0fec8b859b7a74fd697d5f0ec31f9b227a6cd057e00deada1f04529b707c69b1970e5f093aa9e3e475f06c192577bb22cee4f0d574b8fe7aece93e5f0f5e4fe28f833289e39256f8ce329b33e0988fb0e4ff4e479c50d82b95b515c6113f7ab80dbb34742334daaf924102e108a9b653616c0051272c10ab834229ec8c3a58d796205f72b9ea86ae9f39735b9422497cb833b993e898dfb3be366e9eef4e195a42c774c9e6c82a7ad8937ee9e4067dc3c489e328b4fcae1feb46ed6cffdc973b7a45c1b065fd4b3dc253dd903cb9a155fc4bac106eed610b742fe88f694431e6983676e8237eab93e2ffe6ce8fe8afcd99a0b8caa108cfbd5c0057272c144b8410cee161af787a7c21a2e571fcfda035f5cba414357cf90fb13fa3335f70787fe4cf8333d96fb5121d5e5a2e202072970844e395ee9843bc5bc92effa5a78333faeb08bfb6565d9dbf3666aae8d832f0e728567dc2f2f5788e5721171fbc3232d5d20db054bba4021378bcbfd21e16a75dd9f02244e8337d6707fc25c2d2bee7cfa2437ee64f249772e0deb8955f707c19f2d314d6af0497096b8ad375271816b2aa45d2e0996bedf0c83eb2be3cf8e1c4db93421af84c515b671bfa62ed0980be6c49d5bbc92982bd4e17201728137dc2c39ee0f4ff27af8b2dc055a72c1c8dc1f32ee96d1f561f0666ddc20945ee7892cb8b4109ee8e6fe8071b78adcae7924797f7caed6d453e2f14972eef4e3956cb840145cb0381798c3cda2e34e205e69811b7ca13e0ede0c8e0bc49a3e5f5f96c30deae93cf24960387175671a54c194669fa4c4b59df9229efb83f367765cda0e4f9ce106a5eed61437a787e469f064835c9f993743e302c1b85a3fcf5ad117912e1090ab15e5da2af8621b5748c7fd32736943afd4c5fd7140eec83c199b3b5d78a5a6250e8437e2707f51dc1b12177866caaf4f22e2592bf2c5a3310aae30cbe59273831cdcad35ae8fca9b19b1bca83f69485dd79315af8e497b4fbc9990fb3bf36764dc1f0df7b6c2052671b306b9be3dfe2cca3387e68d611768c7d532de89e493c858da96bec8c5345a1e5f142e7164bcf189ab13d2d978a2249692ca27ad79da7c78a3edfac6fe6ccb7237c493c170817224d01b370f933be7782514c6ae6e8d7824049e410d5c3d51cb85a42dc917adb835b02fb2b0ac91f145379726c1131db8bf327f06c6159a70b9be2e2d85277e707376c8dd204f36c57deb898e58f2764fc6c5fde9e26e0d59eeec3cd91037d8c5e512ba73cf2b017169be578ae2da6dea8d4d17a8a7c01d6e961dcbddefc9ae5c600b378beb5ec4135db96673e18df2ce215e89811bc4e4ea19e00a8bb85fc31b94e3723d2d77333c190ad77052bc3189fb13c4cc5579e31e3747467d74fe4c5ea9f449545718c4e51a7bdeb878630357a8c0e5b2e102b3b85ab94b13f3440a9e12894f9ae1e913c0977db9d7f14454f48cf7278ebbb5f4f4c1e0cbdadc99c52b5ddd09c82be97064c0f55df0666bdcdf16f756e706e1b85c4c57123fc96a1a0dec8b40cf9a055f74ba4037ae9600cb5d92278be04e3aaf94e5feaab83727aecf8e3f3be0d6823f8ae1d6ec91cedc1f12f736c41208849be73686c717d40d32ddad14ae3078b9c82c75643cd9004b1e155f26e4fe80b95a4fdce00477cb89658ee98d742cd7d35afd910d57a8bb5c52cb9c113f26e40a43b85c5df72790bb5565f91e12e8ece6b972695d9e586589b3e08d2a5c9b045fdcbac0125a03e48b32dc201d97abc97d8d279a6324e1d280af34c51348859b0778696e9e58669a0d8a37f296bb3e9eec8967cfc8972d7137e17f64b7487f94746944afe4c505761508ec8fcebd01717f4c7fc6c2d5152ba4529a0c4f3c61c9637a32ae2bdce172057283421502d01f20ae962017488e9ba7787b68bc59942b3cd25f9e9bc5e4fe88fcd905f72d9e48ccb2a6c61735b83f69aed61757e8c5fdba727f0cb85a30dc1f284aa3f244049e3817def8c3fdf9fc99d515b6b95c685c6116f76b8127eec81b2fb8c2a2cbd5e60a17b85c3e3c7d7a5fa6e5fed471b7a02eb08cab35e44e305ee9ccfd39bb5b5c2ed08cab45e4ce299f94c7d52d15c881edd6c61bbd64a5b9c2aefb45757f4fdc9b115787a63f393447266fabc42349b9c1e0dd12b3dca579320c6e50d3d5535cf6eabcd9f006b5b85c42ee0fd2d5727381516e169cfbf3c7dd5ae0060f28900017ac6a593c1e89ea0295dc2c324b1fda97193056c4053e31cbc6234db0f4d9de4c83276fcd9301727d30bcd91f4b1e9827d3e306fba8b08f0bb6bb33eb9536b83f650a64e1666ddd1f2fee1691bb184fd4c3ed118f94c0a59979a2d4d3a7ebcb6eb8404f2ed808d717e6cdc6b8bf10feac8efb63c6dcc7f5c0053a6910d2d5437481626e56124846ee4f803f0be1fea8b95a61dca0577fc2a830e8729db9be3a7f065cea9278b2a125cff7645e2c7127bc918767ceea8d813c755d7e0c901b44e3720170835d9d58af14747f4edc1b9d250e8c373671691d3c51cd157a70b9b82e904877e3899818fbe1fe80dd2d283748aab60cbef8c772b7c29391b094097c129a5b33e18b51eea47a25dd05e2e9ef867b73e1dec213199be7e973e4cb22b8538c57c2ba3d40de8ccc15a270b9e6b8b3804f82e3fe747f3675e9dc9f2e578bce059a5dad2df7e78abbf5f30c52e0ea51e0feb4fc199de70dcc1b992ef08bab05bcc232ee1797e70dcd1ba19e4058dc3c469eb39fb4c40d8a5d2e076ec1fc110cf7a778b54cb8d3c8277d717d70fc59d373577cb20aee8f09a519bd12181778c4bc91bdb16ab9fb79322c57d8cb05c1f5a1f16701dc9f26fa43a33e02de8c8567b578242eb786c7174fb84108ee9612f7678fbbe564894be18d3ddce09abb45c6f5ad7933adfbf3ba5944a01853e1d2c83c11ccfd91e36e355d2093fea4feacce7217c3939d706b297c71ca2d993fdae1fedafc59d6a501f1441cee8fd7dd22de9e176fd6e469dbe18db5fb8be1de50b842022e179c670de98b46ae047aa437372878f5fc96b841de28c65396f1493d2c6d4cbe98c5059e217179bcb18b2bdce382e12e10950bb6c2fd59fdd9155778c2e59263c9dbfa32009eb820de58c4a5117ff87481f6b8790eb8c111ee961b4b1e1a5f86746d565ffcba3f55dcaddf054e71b5dadb0b37b8c5e51ab2c47dbd318be7650da6b95b617cabf5be48747d4ede4c880bcce066697185205cae36aeadcd17fd58da92be48c5f541793322ae108f0b565bfa826f16c29d5cbcd2984b3bf3c4a94b73e189235ce000b5f5be88c4fd9d15e8810b96c33227c58f3570854adcafa75b05fe08cc2d078f74bbbfac02c174219e88ca0d0e71b7c6aeb087cb35c8f366e58dc4fba3408156378bce57941b3c73b7bcb8bf1aee8d85fb9bfa332a6e10cbdd1262e92be2cdc896b9da1bed5c5bee8b728c60ee0f1c77cb787f5c1327df78756717af44e602ff006a694eacbf25eead882bbc72b986b83f155c2d27ee0ce49576b83f15ee2d8425af84272bbb3f51154671bf12b840276e16d9b35a8f24c10d8ed16012fdce1315b1d41d9fece90291b9604fdc62f9a30fee0f990271b960364cd6e50617b85b3cdc89c12b15dd200d776b8febd3e0cdbc9eb2ce27dd70834bee169c2bccba5f145ca19bcb65e7faa4bc999c25cfeac9c096b6a72f7a717f8ce869f1664d374864ea2af8b141963ab02733e0068be82a3cd170a99be2c99096b700de880429e8e933c19799b9f3ec95e25c1f187f56b4d499f164045c2104974b896590ede62173696d9e48e60ad95cae326e2f893703de6016972be80914c6cd03406f305ca19cfb45bc3f31c81b206f94babe3efe6cca0d1270b74058ee4078b20faeaf8e3f33600c80672f8a3723b2dcddf1644b5c20e205c3ba4032e6edc81b03b895e08f5678fa00bf6ccb0d1e2fd70157c8e47291707f8857ab842b8b3c120757f8c6fdbaba4077dc3c4f3788bb5b143c7d1cf832315798246b5c7c51cd051aa70cfb242496bcaf2f1be0f6be78b3029636a12f42b1bc71bdb1cb6d108fd47469203cb1cd980637d8c6e51a4eabc92f0add0afdd1ed06e1dcad36ae4d7e1188658e861feb3388cad503e5f6b67833a7db06fe08849b9343d6a8f8229ae7eee9c92cb8be35fe8c80eb0bfb33072e1089d4f90a7ce36a11b0dc099fac8127509c9b47e8ce3a5e4905234a2eedc9139d9eb5a42f1eb9a5e08f5ab836315fa4e30629b85b4f8c9d7081be5cb0209e3e55beecead23878e2054b1d154f66e402015d30a72b7472b96e5836ec91c85ca19dfb05c1fd59e06af130d67585682ed717b707c59b0db9c0036ed6065f509e3e4abe6c82ebebe0cde2b8bfdd9f51dd9f0df7d6c2b327c1977561d4e0fe64b8b714ee4f3c91044f1f31be2c86fb339c39316f14e4fea470b5e2b8bd32deccc9f589f066765c9b055f74e3da3ef8e29e4bc3e1892d3cdf43ebaf823f8be2d9e3234ddd29c02799b1ed96c01b995c1dae41055c3d4ed747f5665f5ca0ad5385572a5e6008378b8c3bddbc12d1150e6bb5ad2f72707f8aaed69aa5ceecc9a22c79615fd6b4c455bd91852bcc73c17ceecf8b9bd531a43bc75e2988250fe9c9ce78f60ef8b23a4b5e125f062cb259f2a03c191c5728c3e5dae3d27a78620df707fcb3314b5e0e5f767bf656f832b169b43d5f1cb2b40d7d318a2b4c73b9c2b84116ee561dd37044bc51ce9277e4c9d0b8bfaf9b457457a04223eed7d29d4fbc92041708a541242e176da92bd28378a2059ebd305f16c6cd791558c3cd8ae3ce365e0984256fcf97393de7ed939ab8c030fdc15d2d0aae2feacd8ab8d38d5782b3cc41bdd18efb13ac8d822fb2717d74fc5901f7e313597167d82bf9707fbafa63eb0f1377cbf6cc5df046b13b0579251e963b0f9ecc83e54e8f276be20ad7b85f13dc5f7822a65b1d1e69c905aae08215b1d479f16448eed4e1959edcc9c62b7db0dc9df164422c7544b2be9f11ae561b77a9fe10f8b31aae8f8437bb63992be2c780eecf16772be80685903606be68c69d55afb4bb3f357f66e70687eed605f7f7e4cf72b83e33fe2ce90235b8595cdc9f1dae569ede1b4fdb932f8e7183535c2edfa591f0440deeeff767626e50eb7229b94100ee9606f777f46719dc5f1f374bc9151271b9cceeb4e39556b83f5757ab8a25af8127a3e3fe4491bbde9359493ae10a11b85c342ccff2f28d1b7ce272ed963836de58c5a5fd4a458c7d9966abf3469feb63f2662f3c83ba5c3d538e00b83f53346880ab27802bece0726d5d2006372b8b1b24e16e79dd92f048bf674f812fa3e20699dc2d118c445c203f6e1e2717f8a5bf247f06c20d7ab95b48dc5f0bf73682d18d5218cb35f89e134b9e074f2676b4c0d81c4f5c9b37ce708104dcac319379b93e256fd64271cb0dd2b95c5deeee3c191117a8e6664d7185442e579a2b871ea9830b34e582a1f00ceacd83e5f6cb1fa9b0e415793232ae6f83377b63b943f3646eee8cf24977dce53c5103cfdbd91bad96353a5f04737f322850f082314db3e5f1c621d716e68b733c7360def8c7b265fe48cea5d95e0989eb5be0cde85c5f1a7f96e44ea74fea5a1686473a7ae6a6bc518ffbf3c6dd2a1abfdcdf027ff6c313e8879b67c80502e4e6899a46dbfaa2effe98b95a5bdc9ff1cf5478f6c87c991f97b6e68962925478da6678e3bc422fb5497dd1eb061d70f5405d1aef959cb841272e97eeb943e0c9a69612c91b51ba3f0ffe6c8e0be4c95d0e4fb6c21257c21b7778f686be2c89fbb375b708b8c2142e171df7384f6465c95be1cbbeb526be78757fd8f4270fe93bf2662820492d715ebc918925ef8127bb63a9dbe3c90ab8c11deed61f4b1d1a4fa6e40ac5b85f596ed0cee50ae0facabcd919cbdd084f16c20d86d0600d32e7f4c63a6e708ecb05d52fee6d3c9112cb9ed99bb9b9c129ed61f1664b3788c3ddf2e36ec3131d7083bd5b5e6c18dca0090d82ba7a98ee2f8dd2b83c91ca581dcba9bc6ce379d3e18d51cf1cd01bb76e2d8a2f9279fa7c7833b1a74f992fbbe002172890ee8211707f10e80f0af595fd59972b3cba5c18dc5f0a7f0676e7f093d6b8404a17eccca55df0c4abfb13e1cf8e770ef049675c9bcf178fb8b4304f9ce002fbb85a08dccbfc04e4068fee569b1b8ce16ee1718164ed8df166093c694c7c712e79464f66c6a555f0c42db717c69b1d7081905c30a93bc978a50b9e4f40eb9df0656137586bedec8b3d2c1fd2637822a727500b37cfcfb346c1179b9eb9dd1bd5b8bde191922e30ec6a5959e2bcde78c5dd8e27aae2fa98decc864bb3e0895dae70c8e5c21a33737fdcb85b4323c6dc9f3b9dc14f8ae2fe70b95a736eaffee8869b1b9b3d02becc89a764e093d85ca0ef6659b9b9357e8cccedcdf1660fdc9ffcb32f37182479437c19effe7850a0a50ba6e6fa62783340ee347ed2d605b2ba604a5c5b992f1e973c2dbe4ce8ce415ea9876b7be08b6a5c5a0e4f8ce1fea870b5be6e2dec8b362c797db22b9e3e42beaccb153e71bf0eb83f2e14a8e882357081551a34a0bf386ed6d0edf1f16653cb5d164fb6c3f5c9f16750cbddd9935951dce03689478a5af2c4f8b2a2a58e8b270be0fe56b8373817984683617482bd120dcf1b95370e6f50cddd1ae3028ddc2c0bae6fe9cd6a58eab078b2a40bc4c7cd83c00d0a69a7fc5106f73105cefed4b859be671094abc7c9f5edf9332dcf82f1485e9e3da72f93e2fac0fe4ccad5c91fc3e1fe0ef8331aee2cf34a3ff777c19fa1717f88e42ee8c91c58ee2078b23257b8c5fdaa72836797cbcb1247e68d2fdc5f1b372be8299df8a41aee2ff767523718c5e5f279daae7cf18c254f8227c3e302690d22ba7a88dcdf903f4bf3945c7c920e97d6579233cda6c21b7b8558dcaf293738437f944c5e9a27fbe3fe003b2778a5f9ac65f0c504b6d9c0de48046ce8f6f078b30a6e2f8d375be0d25878229c0ba4e166c1b1e4917dd9d3150a307512fc98204b1fedcddedc9f27ee56ee0acf2e589165ce871fab5d1f157ff673813c54f8d460d5ddaae2893b7a639aa78f0b5fd6c10d9669adce17cf2c7b6bbc599567cd832f3ab93f445cad3d57c8bb5c541788bb5951b744fec87683570aa4c7cd63c015aab95c63189bdca35408bc5c6296bb0a9e0ccdcde12179003c999d0ba4d3bb9e68894b8bf244a8250feccb88175875b3e65c9ad513bf5c9a91571ae3e6c4a82fcb9b39f1d485f9b13d17285420a60bc6e60934e7e6297225d1237930ed26c21b11b8d7f04406dc206d768c477ae05933e08b045c5a064f3c736719afa4e6d9ebf2655bdccf4c1a185fd4dd59c52b4d2d75473c599125af8027eb5aeee878b224eeafcb9f2171832ad466e68b773c73456f6ce3fe8c29904c85305cae3cee46dabbe3cd26b83f5857cb8b5bdbf3451ceeefca9f11717f24fc191e178882dc25f164355ce11f17cc778112f497c5bd49717f04b85a1edc1e126ff6bb3f3d374be9024590b904de88e7e9c3e1cd0679fa14bfac82fbf3e56a2971834dee960b37900bdceacf8f9bb5e4060b983d9f2f9b737d5f7ff6747f2eb85a60dc6098ceab57f2b9b53c5f7cc1d8c17317c593e1707d576f26c69d5d5e49074f2c6e8d8e2fc2b9bf3d151a208374378f99fb9be2de94b839b3fe84b8b71c9e3e75be4c8525cfeccba0aed089fb65c0cd85f527ac41aecbc5e4e9a3e7cb7e28327167d027d5b93f217f867569063c91f8dc397932aa258f8d2f0be0fa9cf8b3ddd805f727c19f397181a22e980945302e2df84a54dcbbbc9c638953e38d53dcd9c32b452d7b82bc599ae50ef76454963ca927dbe3dabe7c51ebfe5071b77c3728e9ea39bab6f9c520eecf1d77cb800baca073e893b2280290fbe3e2dea8b813cc2bd9963ce29369dd9af0483fb750fe88cdfda13518a7402a9277c293995da012372bec76ea8f66b873c82755b1dc8df16440dcf9c62b8db0acfdf0c52f4b9f7cb30c6e5089f6aa7833e2ade9f9220cf7278bd9abfa32309e3506be38bcf387579ab2d4b5f064bc27ce8837d2b934089e78e50aaf2ed71557d864ee9678321beecf0d158671bf1cb8bdf2471e5c6012b9f3f26464ae6dcd17c16e8f8e3783e0ce2b5ea96aa9abe3c99ceecfac308dfb15c1f346e48d47a6490f3e4984fb03e0cf3ab8bfa13f637385552e17103768c5e50a2e77ba27ab7267d72b85707f9e5c2d1bee3c3c1194fb33a336325fb4e3ce0e5e29e90269b960345ca1cfe5aa32c259f2bcf8b2a12b2b75433c9990656ec81bb996bc1abeac768354778b8aa59cf2496a2e7028753b3c59f0da36f8a220d767c29be17183b2c23897ebec596bfaa200cf1a922f265d211bf74bea8ec6130d7185145cae27ee4ff867666e7978a4e10d6a70b7eedc9f350ac4e48299b940076e560bd707c19b517157e389e4dca01d97cb800bfca165e29116b8e5f247245c60175a6f842f1ba42887fbe3f267475ca119f7abcb32a7f4c6affbe3437378a4ede88b535c9f9b3763e3023170c15a58f24078b23dd3a4ef9130b8bf35a6ee801fdbe3d27478a20c1718a734dd2b317185c2fa94f8b3dbd347872f0be10aa15cae1ca6dd9adea864290ff8a43337984675446ab7366f2ce036f1f441f3656a6eefebcdba5ce1cf2e8c27fbe1fefee8cf0b57cb8e5a71379ecdd6cef94d4a792bcdb65cdae6b41a6db91c48bbb571f2565b4edcf3b74ddc6d9d8f56bbcdd27cadfdad56da9cb3b7b8ca5a8eb66cadb49c9cbd1a2eb894b5a7cdd61b8f66a34ddbbb205a7fbbddb485739ae4d95af94ef73fa9d3fdefa6f301da96530e95c793bc5637ed3687fedd96b239a9d33d69beddf7e76bb65b5bc7bb95768539dbdd15b8c3d546cbed84d07cba23e0ada7dbb5b2b85cde68b2405b85b479af9774916ddb7e359fe59d66e45f6d725a2eb8c3f96cf322b7e04d976b6d73025d139e9bb87de56d13e284d37ef25cf01ed5682ffc0d41023e8d86d30d2132ef776f23e3bef72db7adc8bb3b649f6f378bbb2d69b8a6cbfb00e40c6a0035de47b79ad23726d7de4df4ed244bdb40dbd08d324012234aa62dc053033d7b00f47e32f26d44645e94205c6e5ba54d689b3f9ffbab1da4645bd78e9b0f7d13ee7e07f0e3742ec77bf901d3ca5bea8a044004e079c0472eda77f491e9b04ddeee2b00844abed5f01f8013f24d0a4ed20ffb4c5be9e2c1e5531c7c1b5764dd5e46da370b3468701a590478f70b3422d7be0d19872b6714b672d10bbe6b37257370efda5f14ee46a35c1b2746b1b8db6e6bb1c29d09deb605b62d642b2dce6522db7c9e3436bfd0dd03c5f8b9157f2dcddcdfa06d83a4f571af66ee6c0aba01c16b649cdf8702de87a07da8dd83d85ff1f23d54b10c02866510bd2510b51fd0781ec2bc153ede0a1aefa080d461f80ca0310e5c3c0e453c0e023c03c6bf618e6f10e06fd8cd50c30cbab7e1ebabb8f92a6860889a8226a6725cb280c154685061cfcf00740c1c1c03d7c7f0f430141906e0bf9087043e76e10907c7b3e0c72c94213f507a163078852d3890f32b74791552f8e1a584f1e66a9941129fb0e713e0f813b83e81ea28b14d9063134a7813ca6cc29b4de85dc29c4b08e3401a358e92c252f224544d42d08ff0c751049c29b334d3b408662cc21611ee7811ae78118e2c02d58b4054c680e15c311c2686c3c37060f82865864333eeb034ca10a688ff02c5517683d08411cc839066102ca8eada4385c0541b535386b2b407f23b08e3a1144c091cd0f11ce0f9273f4c00c23f41f20660fc447e2922020ed6a08a13a5dfb8e025072f019c8119196059811a5e01292b008581d118146521e2c01f0ae01c88d20010efe6b744f2c14a0c569a4ea0c86c486033c1084cf11a225ea3c202c2d5d02005b71a28463ca1aa01701a0c4e53e53445d24025d0c2586810b8339a324683e6334b9f21e13363ce60f099a03713e6cd9cf166b2581a60c59bc1b26cb26749b45b3661e1cb54e1c39751f30660f9325c964f457c19a43760c8937163d924c49391f363f2f83142fc982763842fc6e8c5b4b05c3a2346cb8721e1c3ecf902a82c8d5d7c982d1fa6820f8304a58d070189bfda210b0d9f25866f52c717802b80c85f51f9abb0b7a26339d4bd95992666be0a83afe2e1ab3cf8aa31df84c953cd79aa2fbecac892803c4f55c75389f054627e8aeca90e5812c07b2a077e2aeba798f8290a7eaac84ffd5e4a10385e4a89971ae2a59ad0e0a5ac485979a905de8230960164410d3d5493b720840723f660b81ecc190f26877fa2e3c1947930534ba9ae65718a7f0a038c9187537984f815982d8588a18228be0227be8225fe8983259208ff34f5158cf90a0ef80a923c0565ffa4f414ccf114c8f11470f01494790ad02c898e4f019425511d3f010b3f811616bc53083f819107b3e527b0bd0467cb22435e823f2460e325e86249440c045e02dc37917d13d87fb9fa08d8f82f48fe4b918f608f65501ecb20391fc1d44760e42310fa086c0fc1200f819ea5b08e87e0888780f81014ff01151e029f7f00907f008d8700cc0b9bf792e51f10f240d077e1e2bb38f15d8cf82e388cf05da8becb96eff27b2e823c97209e8b98e7b2c073797a2e3d3c17db6fc9f35bf458eea87e4b1cbf858c4f9366a953f2c16fe9e0b7acf92d5fb650d962fb2db5d7b28709e8b560f05ad4bc1629afa5805f8ae3b5cccf12c8128638b21cf158ccf82c437c161b9635063e0b0b9f25cc2fd5c982c167a9fa2c5c3ecb95a5adc92ff5f00ed871008777408377407e035534600116278fe5e9b11c70ef6061a14153878a3af78e9a0bd260a181e0deb1ba771eb844869708539d0ba4c4059ae20aaf584248c515d6b9c1078208dce094e20522b94022113adc1f15f787c3d7b2c8228b3a5fd3ca030f3c771ceba0438e2f38bcdce86a838d2dadac35d4b8f3352ba6f85a1a69586105175b7c0d8f9a9e5a1b3e40597ab086d442458121d2a8b54c126599a48a0e3f37ecde86331bbcd4c0010c38b8f0a4420aaf02540a662994914216289460c21b11b420d081041b68918119185471e3861ba33605b0b9408d12181491a6a88c334ecabcf9305e3e4c912b36555aa8bc90d223d5821416304854d086044922e00281135de6e8d245cb9e2c203400421628e00cb1a08d0d675f031d2e44f12ce0548042a186111e80f306849a074ede83dc065a68a0c01b16de7879b3c01b04d818793504fc0568d0088921c16a0e293d52622640f3135441a08017db962c5ac670e08e6fe00538704872431fff42590a611f5c6183973756ffa6023764648103822f591440418513ac5c3d210109536b7c0571b434c1a2451a1c38884183323e043c616cd8e10112f65c90c67321da92000c66fc0972fc0976fe8337df660e337684c13281951601be8612c40801a3c2993c1c20608ac96739d3c1af4d04cf2677c649980d6a60e2030b23905d8086150e12806129a18629de2471c3901a0401410a9b31bfa689b76048823bb0d4f16bda9449024c2029d049a34588d722e485232e04d001206c50c03a3275056cca60a04587ef018d1cc8bc19c0ea8b08d6680924053538b823cb189f654c1b2b3876fc94990b4b7c192a46a0024105bfa58befc0881933c0ccc960ac8d0477a460f664a40a207c0d6d3ac8e2a5450d0f9cb07c648210b0b102176aa638b00082387af8e065a075f043062be8c0421f25d81e84be9b3bc8aca1058e06ce90a9808c10d840a1ea49e8a1484d912d6d70c8f330905903c799222fb86002155f42026ec644b0000c773e822c3eecf05bec4073a705325658a04c4f1e3ffa88e3061b5a3fcc418d1fe660470c30bcd8228b2baaa82305144e30a1041246f02065830cdafc3007353fcc014bcc559514180a2488e0812e5bb23470e58738fc908101def861ee8738289e70a2891860e8800323e6c809c284124480b3810618b859a3c6ca4815021b70c588d4072c1005c500008eec7046a61a5969cc10c3cfa7477ae168fe91fc9f9833678e0f3e8c1115b505f3299ca5d9705b6c31cd66646664666486030e38e0809b75ead431cac2280ba32c6cb0c1061a6890428ae544759aed49996062ce9c39638c31860d36d82085145244098551514c8c31c6175f6491c5cfc49c3973c618638c9f4fbaf0c9932fbef8e28b2fbef0c1071f7cf0c1872cb2c8220b1c70c001873a75ead4b1c1061b9e3c91420a29a490420a1a68a081061a6880020a28a0800106189e3c691706e7cce57ef3478e7469d3a64b9b2e4766ae489122580d603580d500560363a88ca162156515156535672e77e488cd66b3d96c369b937964ce5ceea593dcef44ca493ff8a9d31189c42347a4bce16ef3f63c72e476c3e1dadd7871e365d2e65c324cfabbb0e1c2860b1b2e6cb8acd9b266f6c8ed4624d268478edc6ea7f9d93680d500d66c9710d1604183e5cc953357ce2c594224d26866ac9461a00c039761603864c204873b72e476a3d1aea44c24c3a155d4a44dda92257f94aa285551aaa254454142fc9fcc23ff93a92700fc4e9e248080014d803ebbdced8b307d91daff98fc0f80178c8803c40e315ce0c4fb40785f13ef63a3e67d17bc0f8af7292081972c56de27c5fb9ebc4f1c76c8789f36dee78129ef83c0fb48799e16175b603c4feb79593ccfcbf3a4fc8e2b8cdf61f13b307ec7f5bb188cfcce80df21fdee0104765e7e3785802121414faf33e075452582f89c159f03e2735c587c2e0c25028c200d090902320e3f67c0e792a8b1855615240bbc8d8b6dcbdb903040c01424506847a01c8172e4ca123cf02050f434e48936c4494853501b6cfcb4d186bfe1af29a80d8d0d94a7265e8c4c4cd3669bcf4edcecc401a9a1c6185f64f1459d2fea4801051344e050670e113ee060030d9d2de0659d199cbf89e076bbdd66033824486e3c5e0001043003f8b7b4e9d2a68b1a2d6ab4603580d5c0182a63a858455945017dbf9330368e604cdd61a64c46c65029923480d5401906c24c398221e5c449972e5d268ec7e3f178bc22458a14e1dd6e7d1627e594334992dd4ea7b3d9bab4e9c2860b1b2e6bb6acd9b266cb9a2d3f793c24483afbdced6c361a8dc74382a4e5f19020e9b30c0364aa501943650c953154e6534e24486e379b4d4e3979bc24496e379b5554d5e4f16e3729db24496c361aad38d9715376ce274ef689937d22d1e1a6eccf4e9cec4fdc947d4e9cec4f9cec489e3adc943d374571774c9b096f54b5c4011f2987678df6455c5c5e1edd19b10cdb608923f248685c5e20cd19bd1802cb79c41709b09c43de07e54943fa220a2eef0a7909dfde52d6f0b43d2ecf8fa5981657b72bef89bc25f14667dc5c04ef2507a1389f470a6029d33cedce7231ffd91227c01b89b2c429f1c32996d282a74d70751dfc1e3a77f7c5328c8665b568ee4c7d7c4b219a83a2b9aa39399836aa296fcd155f2ccbf228dd95b00cf3b2a461f9a234cb7a4999819c5fbe88767544f266e78de2d8086f29d3f85c0597f7869c55bec80177b7671946c6b356c01771dd1c102fa6c512e7e48d64b0ac89f9a23b9e35a62fd2ba3a2fe54591b6396f94e6fadc64edd8dc01d3d6f44608dc5d20cbb02f965bf15d72775f9661033c69157c5106cb2966da866f64c072fabc8f9525edcb17b959be43775acb3022963d6aaee9c5ba5c9fa2eea49661c465f79017670d90370ae039cfbea881e5d852c7c48f0d707d96f5326b117c911c3727c48b71717954cd7179b1355727e6f7d0b03c83efede6c478b13bae0e82ea34f83d452ca5023fd1b8bc314b31a8e5d4f34555966c963809de881c37c72b0f0d290d903289b71959eadaf831056e8e0429e13c0d8e27adf645592e6f07d923be66cb9ef0c56389fb8dc2eeae88651806cb462167135fa4e4e6ec3437c8ef2972753879a3f346655cdd1c5a0ed57d306d16bc9196eb93a43b33cb30036e8e8c17c3638953e187692e6f82a59892ab0340ee8cdc3b565c1f25dd05b10c53f39c645f8465899bf2464258d27e5fd4e5f27a684e585e051237c60fb79638207ed8c3e5195986e95906fdd173b7a6dc9578222fcb9dedc916b8b9638fe389a0b8c11cee569e3bcd5e8988e5ae85272be1d2447862063758c7e52ae016884762ba3fda9f4d7069313cd1843b5f7825a725ef882ffb2d7162bcd18925eeea8d2d4cabb9f1c50e9e0f0234a03d37deac811b64e37229ddd2f148163c83b45c3d526eb0ec7271b9403437eb89fb53c6dd3a5a4a289f94e6fababc9914b7269eb8a637beb942a7cbd5c2ad1dbf48c2fd9172b574b8c22fee1796a7cf0d5f06c26dd01fcd3b9d7c521ddb7056bc51896bdb7d91ceb579f045b12b9ce172f171838c578fd205b2e3e669bac0186e961b3718c0dddae0e953c697c97081aa5c30166ecfebcd1cb8bf326e16ee693be28db9fbf375b798eecf06572b8d27d00c378f709a2ce19348b834284f7cbaaff044c4dbb3e2cd8a1758bb594f8c1cdc1f2bee16f002152f589afbe3c7dd8a7ae26678631037a8c7e57a72854b2ed708770a3f498a1b5472b74258aee41bc6f529bd190c17685e30a3fb23c3d5c2b3e461f1654496bb379ecc881b7472b76a78ca223e29862b14e482fddc5f10f786c31237e78d73ae2f813703e2fa06f9b3062e50809b15e6021128edcb131bb83e35fe6c80eb43e0cd7eb840c79bc7e91964e5ea89727fa85cad1e2e90d30573737f8cae169b6ba3fa221cf727e5cf7ab833814f9ae3024170c174b840afab35c0f53df167bc65eec81bddb83f317fd6c5b3d7e4cba658e20a78e3064b5d1e4fd6e4068169d0d1d53374837c5cae28d777c59f015d2198cb15c5fd3172b530d8fae1ce37af747481c29b95e5d2e23cb187db121e09b8d49df064b92b997cd2d4fd21fdd99bebcbe0cdbaee8fe8cfda2c77033cd997a50ece93d96e41dc69c52b518dcd707f1eb85a47dc600b77cb8e65ed852f6ab94114dc313fc65878e64478e3d9154a70b99a58ea4a7832dcad49f1c5324f39c427c17027f193b29ebb2d4f36e60904c5cd6374a704af24af8ef763425c1bef8b46dc09c52b4d70814cdcac3d778ef14a69ee4f14776bf7049ae2e639aa7385185cae342ed0cacd4ae102055d30a8fb43e46aa159f2824f06c6b3f7fb323a17f8c2cd6ae3e9b3c4979d70838857cf926b8be08b59cb9b096f4ce00ac32e98f00aa75cae1eee0f0c57ebb8ac05f145099e4039dc3c413787c48f1ddd5f943fdbe14e1b5e098169343d5f0c7acae32715f1bcb5f04627cf5ebf8c88e54e8327e3e0fe34f833379ebddb971531cdb6e78d45ee6f887bd3e1cec5138db93d3d6f26e63ec7134d71c7e1891258f2327832416eed8f2fc6707d46fcd95cfa0078b3142e2d822762b99383573ab2e4a5f1654696bb369e6cce05f666217087e3899eb842abcb65c50de271b914b8be397fd6a78ff0cbb85c1a01afa4c6b41b166fc47283905c3d47963a2d9e0c800b94c0050be1e6f4fc180a1768909b6781fbd3c6dd6272692d3c518467100457cf0217d8c1cd0263c96be2cb8237c74681fab87914b8338657827aca403ee988fba3c7dd52e0fec0b85973b9c693b7c0937ddde0ef6e594d93297c520917288f9ba780252ec91bd7dc1f3457ab8b3bbd5e4984a7cdec8d43b72f3c12d19d615ea9f7ec057dd911f76785ab25c7fde1e26e09995603fee8810bd474c1dadcf9f54a26dc29e7951ab8bee29bcd706d217c91ec49d3e28bb80be4c00593e1e6d0f831ab9be3e3c74658fe3ef8333a2e8dea89102c77373c990a97b67ba5266ed083bba5f56cee8df8484a61a94be3c9965c9fd59b85717b4abcd9cf328876f334a064c59d453e098b5b0c4b2036374f2f90849b85c615ea71c16ecfdccf1bb5ee8f18778be8fec6b859b63bbf782533d7a7e6cdb22eed8727de70cd66c31b69f7878fbbf5e4cea54fe2ba5de191885c20a10b46e5a963f364bd3f53aed60e777af92558cf5d9527bb7aee9c78b21b96bb389eec881bc4e27201dda2f048404f9f3dbeac87fbabfa332b2e908babd5bbd3e893b8584aa84f2a737f40dcdb0d77e6f14a305cdb045fe47afa38f165284cb38df146e0052a73c1a0b8bfab3fc3e2026db960353c6b4fbeb8e416894752e0fe9c70b5deb840bb0ba664d93d1ec9eaeec2132d5de01d578be90681b85b614b5e0a4f767683772e57920b6ce2668d5d1f0b6fd6c733a7c11bc92e90cdcdaae2f6c91f5d70817c2e18939b1ba33f145cad266e5b78a422cb5d194f16c4f571f167424f9f0bbe6ccdfd11e26a855de197cbc5c4d2a6e48b58dc69e795dc2c79143c591ed7d7c09b31718116b8602a3c7b44be0c89fb43f367655ca009372b8de7d47d92131788e566ad7069659e68811183dba13fca2d9be48f8ccb5dd99355717f06b95b56aeafeacdc0b8411bee16d80dca70b7f2b8d3f14475ae1089fbd574690d3c31ca13888c9b27806db708deb8747d28bc991ef7478dbb85e4fe3c5d2d169eb5f348112c7978be8cc9fd39f9331c2eb0cccd62e299f3f2463faeb0c8e55273816a17ccc8d247e4cd46b8392c7eaccb157e70b9d8b813ea93bc6e0779a4311768c5d5aa2d77b4279b727d7efcd90293455da19e0bd67bda9478a3ee0aa5b85f0a4ca3a9f1c5deed088fe4bbbe02de8c8725d008374fee59271ec981ebc3e2cf829e3e3d7c199c27cd882ff602c7b85a419796e495ec5c9a0f4fb4e1e6ac9038b0377e716903bcd29d0b04e58291702712afc4e5fab4f8b3213768bc5b275ca00537cb8725ef802773e3ce255ee9815ba0d2d03c91ea4e225ec9ca73fe3e098a7b124fd4e59aad84e923c297bdb9b53cbe88c2fd39f06772ee8fd4d58ae2d288bc9216f707c3bd9db0d4a5f064baa54e902753e00661b85b78963ea2372be1fed2fcd919cbd5bccdcd12d7e58d26dc5ff1cf5258ea667832dfb45b97371a6f4d902fd27081c26e1e2a4f1c136f3ce2d2b23c51ca054a72c1a6c62458f22278323c3738e46e9db940a49b05666cceb45b9c372e708566174ce8e9c3f46560ae7088cb55f6dc15f064523788e9ea21de9fa4abf5e6cae2275ddddfcf9f9159f28e5fb6e4020d2f189a3b3d782500ee433c51956bfb7d5189b1a43b4d782526cb5a0d5feca294c153a7e5c7feb8413f578fbcb4da2b1db1dc7d793233cbddd493a5b940682ed814771ef0495f77167dd2165728a5bfe19f9d70852e5c2e3cb7731ec980676eea8d805c5a9157e2e2e973fcb21daeb0cce5e28258bc412e77cb8865efce9b51b9c03dae5601b7d7c69b5db9c0a49b357583acfabbe366253d251a9fe4c3d307cc979db9edf24725dcb9c72bc9707b79bc19983b2178267f2c796a7cd991fb2bbb594d963b379e8cce2d923f52ba338c5742b3e42179b23496380fde7803f1802b04bb60bafbe3e0cfbe96bc119e8ccc880aee5cf24969dc7b78a2284f9fb12f13e2fa9af833dd0536b95919dc9f24eed65cee027832086e6d892f56dd9f39ee96d3edd979b3295738c7fd2a73819a5c300d96b611be78f6043ae2e619bac22e97eb88a7cf942fb37afabcf1653824b1f0bc8579a3d3cddd515f147fd6bb40692e18157726f9a4326ea5fc11064f1f3cbe8c87a5ae89272bba63f14456375847f2f2f832a5eb837a331dee0f9dab75762713af04c1ad0b8f34b4cc1df0c63b961fcd26fd5100771e7d52175778c5fd927283965c3d025c5f95373be2fe5eb837132e30cfd57232cd26e78db84b4be0894b376876b9ba2c75749e4c68a9abe1c97ef7d775b384dca01497ab77833e776bea06a1b85cbc6937dc1b8daecff86634dc9f09ae16139786c2133db8c12f778b89ebfbf26656dcb59ec888b5ba5c1bd617f3b8c023374beae90be2cdf68c61b00cc2dd3c656e90f0ea01dea35e4af1c43df14624ae50e8725df0f471f26554d7d62ffe7081e6b8798cf787e4cf3eb83f376ed6903b0b4f547cf620f8322e96e31a7475c7c4ee0f93ab25c2a579f0c435f7e7f4672edc2ef0476f9636ae370aefaf803f93e1595bf2c500ee0fd7dd52727f27fcd91e3728c2ddea7af68cbe4c893b6778a5026e900157cfd313a8899ba7e876c81fd59eb5ab2f42dda021578ff0feb070b5e63052b9c0ddcd5ae0591eada6fbe2d07227f4645a2ef077b3ae5c1b9a2fe27181a45cb0136e10cdddfa62e9037a333877def04a092c757b9eecc91d88279a7285b6cb45c1ad973f32e10687b366e68b053c75553f26766902bc521a4b9fd19b99b0e459f16543963a3f9eec80fba3e3661d5d9f1e7f06e50a2fb85c622c7d486f76c2151e70b96678f600f832269e32e98d2cb9401d6e561d377745836e5caee292c7c093c9f1bc0df046019e3b079e4ccc9dcb4b39ee14e1950658dee6782304f7b7e6cfd4b8c2a9cb55678933e38d50dca00f774b901bcce06ed9b9bffe59041708e98271b93f59774b80fb33f2671a14bd5ce19e0b16741fe3897cb842a3cbe5e6fa8e7f86c03479f5491d2c754f3c99d19207c69711ddb9c32b41b9c0256e96d805ea71b5a09637a91077b9c0dc9fedcf2a308670854cdcaf26774abd12eefef2b859482e4d85278270c7e389b2b8bd37de2ccb053addac36f70776b308b8c120ee969892064b5c1d6fdce2029f0a9c72b348b813804f12e329bf7cd29b252e8037aab9f38457521a4be10a2db85c523c0fe17d182c73f38d68dc20d0dd2233cdf6c51b7f1798bb595296bc254fb6c692e7f4646cdc59f64a433c69637c71f7f4e1e2cb5a2082e0f6f478330bee0f12774b2e6f49de98e4e9a3c197b9b9c2172e171e4b59c0279979d6da7c1181256f862fa35d5f1b7f46bc40075c300f6e5055e7f19558b8bf23ee4d8869bd0cbe0c9065aef7c635ee769e8888a415aeee9ec2133159eec69e8c8a2b94972b82a7e4faa420c6f0dc19c22b25b941312e97d1050671b3f4b8b540be38c3b296c617df2c75614fe6e4796be28d0c2c77f2c9a45ca191cbf5e6d9388f54c00516b95911dc1f20378b7883737e4f7ff6c2fd05fd199aabbb95a6e689616ef08fcb55e5027f6e56034b5fefcd3c58e2bade68c5b3b6c0179596bc2c4f56c7fd9157eb810bbcba5946dc2092bbc5c1b307e5cbaab83f67ae16174f1f2bbe6c850b1c72b3bcdc9f2657cb85252f8127f3babfe3cd3a727f63fecc8b0bdc73b5b05ca00b2e5815f7f7c6cd12babe296f36e7028b6ed604cbdd0b4f66c2b49b066f34e002e171f334b9393324adc90fcf96ba259e8ce8029fdc2c109e4042dc3c44aeb0ec8211b9bf297fe6c313677c63065728e472a1b9be07deacce7237f4645baeadea8b712c79595f96b4acc5f1450f96ba289eece806bbdcad236e8778a4a7e54cbe62dce093bb65c3a58df0c4375718559b085f34bb41015c3d46ee0ce295a834ebcca5157f08b5bcedf1460aee8fd3d55ae10ab5b85f546ecd8f2fba707f3cdcdb0c7722f04972dc9f19ae161e3778c4e59ad7e7c09b3531f6c01287c61ba3b8be3b1572dd2f0b3ac6057eb30eb8be2b6fa6c46d963f82f3aced8de2b8c0b3abc565c9ebf264c725cfcd9305b2cc2179e31b4f1d951ff3e30265b8595e5787f56366f727c8cd32dedf037fa6c4dd829f77aed08dfb55b5d4e979320496bb2d9e8c87a78f972f2333cdb6c51b7d37c8c5e52272737dfc580917a8c5d5d2dd9f22ae16d91268ece661e029c5f8241e2e5077b3a63c6bc32f2279fa7cf1652edc16f923dcfde9e06aa9b1e4b5f065bd41dedd929a863bbe918b1b74e06e1131ed46c51baf5ca0a90b76c4057aba60183c7351de98c7fd1972b5cedc6013972b777f6637ab80fb6bfab316eecf803f9be1e913f665415c20d7d502e002a16e1606d7a7e7cfaa2c2bc72381b9c22d978bcefd39e26ef5fe2cb95a70ee4ce295badc2095bbd5c3a5cd57a273cbc01f7170815a57ebc8f54dbd991757e61e89cdfdddfe0cccd3e7ce97d1708543976bcd05deb95a46f717f5673cdc2015970b787f9cb85bb8a78f982f4b73832bdc2d3aaecfebcf969ebb2b4f16e6d256786208172876b5ae3c7b0d7c591697e6c013a3aeed822fee718552976b8afb094fa4e40974c2cdf3bb412b770b883be1bc9200cbdd0e4fc6c2150e72c182f7b7c7cd1260c95be2cb7e9e92824fd2e059c3faa201f707cad5ba61d9a53f42e002a56e56104b5eeec9b678faacf0651c2c7dbc37ebe0feecb95b0d4c932d7c92091778e566a9f0f429e2cb4878fa6a783341ee6f867b53e1f6f2bcd9d53409e7934678e2846f3473e719afc4665993f3c50ab6d9eebc3178851a5cae35eecce0958c2e50970b76c37257c293c1595ef533eb4e2d5e29cc059ae08211717f75dc2ca467af78a42dcb5d174fd6c3055671b568f72784abb575855af7ab827b174f44e6e9c3e6cbd85c200b2ed89c256de9873adc79e69584776ef04a469e342abe68bb34f94a73aeb080cb15c305c671b5965c210d970bec39699fc4c49247f464652cbff2d28d0b0cde2c072e0dcb13a15c5b075f0cbbc0acab6564a9b3e2c98e5ca01c574be9fac8bc99194b5e0c5f36efaff66714dc75782227379875b9087802f170f30879de6078e3934b53e0894c77149e68c9b5b1f9621fd7c7c79f45dd5ed79b619926dd7c5208f7478abbc5bb3d3bdeeccbb55b93372e59f2804ff6c505b671b5905cddeec78258da06f8e215f7349e28ce92d6f4c31d6ead8f2fb6708102b979a42c7974becc777f8e77ab80b135eee4e195a22c75373c19f002b571f310b0cd16c71b83ee8f813f13e2d284af54c59d443ec98a67edcb17996eef8f371b736dbe2f26717f64feec8beb03e1cde6b8413677ab8ceb03e4cfac184178fad0f0651f2ca5ee91da3cabc6237db93424af84c65227c08fbd71691b3c31cdfdf15dadaa3b94591be18b50c6dcb8be3ffe8c810b24ba59122c77554f76c1a5cdf04414ee8ff06a8db9b93c3a5b7825a63be378a51296bcf964585c219ccbe5c60d0e72b9b05c210f974b901b64e272e16eb083bb95757b75bc590417888e9b67e9062db85b522c79517c19d09376c5176fb710fc110af767c5bd3d71671aaf84c1fd2dfdd90ad7d7e6cdb86ef08acb25bcadfaa31a9e3e74beac84e58e8f2773e2fe8c71b78a963c214f26c6fdf9e26e095da0999bd5c4adcdf1c510eec4e3955eb83f57ae56104fdc036f3ce1028db859805c2feeafca9f05f1f429e1cb3498d603e1cb04199bba5bf144545798c4fd727aca2c9fe466c9fbe1cb74f727cbd58a73695e9ec8c0fd99f9b3302e10d8cd93c0dd8b27cae006c32e57031728800b0666e943f2662adcb2f04842d76e6abc91cb151e71bf98aeefc99b0d71f7f2928ebb144f54c10dc671b99ac69458f6c2deec820b04e066515d2197cb65c4ad0f8f64bc3f105c2d24ae0f8f3f737237e289b42c75594fa6747d29bcd91ecf4778df9b5b07fe2884fb0be366d1ee1ce19508b83f5c202317ec8167ae833796dd1c15153a70b98a78de96bc7180a74f045f56a665d8da4ccb09bd918d69bd395f467681865cb0273708c6d439fd581e579766d6cd23d59e3e425fe6e5ce125e69c9fdb1f9b335ee4f8a7b4be2298d1e0985258f802753e3d296bc52d6b4db0c6f8452ace2dade7c11906d3640de28f4f411e0cb24b840bc0bb6e4021970c138b8b6db17e35ce0f16a2ddd5f007fe6c11327e48d672eedcd13d1dc2004ae9e26f767ea6a49716b837cb1862b0ce07275707f60fe4c8aab53f26371dc29f449578c7979ca3b9ff4c39d755ec982bb164f146699437a63d705bab959582c794e9eec8d1bf4ddadaafb6be0cf8a1833e20a71b85c7aee543c91d453a7c193cd25901ad90e1e29b7e4d5f1654aae90e872b179e27c78639c7b022f99b83f824c9a9d2ffa5c21f1729d7083795c2e27d73747a710af54e54e185ee9e9fe14a96e487feadcaddef54df167bf658e881f13dee091bb95c1b5a5f9a21e174878c19aee4f8f9b95e402bfae169325afebcb905ca0de0553ba3f4bdcadda9d4d3ee98da7cfd497a159f2ca3c599efb7374b5dadca022578f90258f8c2f337a026ddd3c03dc56f9a30deecf01572b86fbfbf2674d5c9af1874dc692dc9f332a7c72b97078d606f82200f7b7c19f795d5df0c7e43c6b1b7c518192718130dcacae0b8475c1eadc1f3b772be90203b95a522eb0ec6a69b9b6315face388caa5d9f0c415ee553cd1d405fadcac2ab75bfe68841bcc73b916b8c29eccc9f0633f7180bc318cfbd3abe565b9fbe2c97cb84075dc3c4c37d8e66e9971817e2ed8d20d5eddad2b9e3d2a5f76c505beb9595bdcdf20376be9894be28d465cf92361dda9c72bc5b0d47d3d19d3f316c71b1fb8353bbe38c2cd9df16355db6c6dbc11e8fe02b959c5fb2376b7b0dc9fa0ab5506e982eb3be0cd7cb893f1443f3c81d2b879922c79707c99004fdb025f2ce302f9b85a065ce10f974b6cb9abe1c95258e2f678a3175798bb5c165cdaef95a478f6ac7c191617c8cb05c3e1b6ec91cc2c773f3c990b4b9bf08b4d2c6d4d5fece206a3ee560e57676b8dec8b3a5c9f0b6f96e7fe827f56e6fe6cb95a72ee4f8e89c37a630cd36c67bcf1e7fa5478333e8c155c1a9c2762708168170ce929057823c31b5ce3720df0a425f145f9a475f1c5dc53eef149739e3907de08767f8c05eaba79942c77473c190d4f20256e1ea29b8ba3c11bed467b63d15d86277aba3f1feead866bfb8b3edce00d77ab8fa54f80375be1594be08b4aee2fcc9f7171693eaff4c4b397e4cb9ab840f282155d2109970b8ea70f025f36a5b4c605f670b3ee58f2c63c991f774af9243c2eede795ea5ca0dc051be002e9e86f843fc36324ba3f68dcad235778bc60bdb9287e4c802b9c73bf8a4fdc006f6473815e5caddf954a3ec9820be472b362b8bf39f7f6c31257f6c632ee0f1d77ebe9d2a29ed8e499dbe1c768f767c7cd327269554f8ce0e9b3fbb22c4b1e9c271bbb4232976b8b1b3ce16ec5f1aca9f04507ee6f803f8373a7d62b71b0d4bdf0643e37e8c8d563747f7a578bea0a33b85c776eef8c3783727d62de8c8c1bdce37241b93d26de4c788364eed616cf5a085f7c727369fc5898eb4be2cf6c3778c7e542e0d286bc5216374876b9b63c6f476f04e00611b97a80ee0fd9ddcaf2d475f064b4a56e8527dbdd9f057f36c5d236fca216d368737cf1e7fac2f833a33bc9bc12f0d2347822d615025d2e331728cb059be1e993e1cd02b9fbf04451cb5a0f5f8ce0faa4f833dffd8173b5b86e50cedd3abb3f005c2d0d6e9778a4293768e66e7571dff2f26bb9e37a3239cf5bd01b8d3c71bb378e79f64ccf89370bba73ea9572d737e6cdcab8bf26ee6dce0d4a70b79ab834a51f7e850c5cae20ae8febcf942e109e9b07ea065db85bc7a54e8c27136029831e498325efca93cd717f457fe6e60213b8591ddc1fabab45c53327c01be158f26e4fa6c532477ca31ccb9b6607f8a3a5670e84379addf9c12b05707d16bc1917cf9b206f9cbac12c774bcefd4df0674f5ca11d42b20b36e40679b85b805cdaf0874df707f46767ae9085cb75bc0d0aefdcaf2fcf2afd91d30d6a72f534dd5f097f96c79d4f3ec98e0be4bb60c3fbb3bb5a16dc82f048bbe7ed863746b9400a5c3038d76ebc371e3d65d72709f1c4f5de4866a903e1c96af78786ab95c79d6c5ea9c8b3608f7475836774d6f04a075cda96272ef0ac0c8f84747d667fe6e5fe1cb95a19dc8ef9231d963c40be6ce902dd2e18927b0e4fa4c015a271bf1e58d6b4f8e205f72781ab35c30d56b95b3edc5c1b3f96e602816e96962b977c92d4059e70b3ee5ca01a57eb688c84fbc3c0d5fae1cee22769dd69c12bddaeb084cb15c7365b106fbcdd1fd69f9971836eeed619570875b95eb83f1a5c2d3b4b5bd117a558eee47832246e5002574f01cf46f148592e90829ba5c3fd21e06a815084d815cecbf565c9dbf26476dc9f16ae161d778e79a5dfa5c1f0c412aed086cbe5c795c64f0ab3dc297932099e38336f84e1d9d37d999c2b1473b9b2b84110ee16d715225dae0cc6dab8ade08f5eb8e379222caeefe9cd72b836db1789b84122ee16d9d898a5cd812fa2718138481c076fb4e1497be28bb4db6be2cd8096bb214f96a57f2c7173bc518b4b9b7ae203cfda982f3679fa987dd910776ebd52075708c805fb5de118f74bcbfdc5b9371e9e92ea9338b841402e1703d706e78b65d7e7e5cda658f2c23c591fd76e1ebcf180a5ceebc98cb75afe488465d93cd2bc42accb05c60de60a9c73b3f42c7d45de8c842b5ce172d951c41f1708c4cdcae3021fb859342c77629e6ccdfdc1e26e059fbd335f96e7fab2fe4cc9a5dd5e29893bb9bc120eee44e395da5c5bed8b433c7db67cd998e5ce8e2753621aeecb1b51b83526be6875856b2e1719f787c29ff1d1f37adaa2be48c615c670b9f458fa7e6ff6c19d2bbc92f1feeadcdb12171874b3b6dc89e695806ead8e2f8a704be7910e98768b7aa3d25387c193c9252eeb8d75eeaf877ba3e1d69ef8a298fbfbe1de6cb823f1445caed0caec69f9322d6e857824a767d33c52ef0f9e59331e09821b4ce06ecd30e6b50412bb79aadce5782229a6b5ce2369b9c10feed6d65347e6c7c6aeefcc9bd9b93ee29bc9708303dcad0fae2f8237abe202f58211dd49c72ba5707d48fc59ed59381ea9824b437a2531aeef8437cbe3d27aaf04c552cef049284cb35df1c6dead25f1c5a9eb73e3cf8c7736f14a113c6b59be58bc36355fe4e34e3e5e6986e7f4f9a427ee8f803f13e1568f47aa5af28c4fb6751bc223f1948cb84228ee1702d706fce2124bde0d5f665bf2e6f8320296b8a937ae706d60bed8b57cca4b36ae0d842f8e5de11d174cdedef1cd2458eed83cd91b2a9eb28f4fa2737f56fe6c88fb1bbb594fcf1ad5179fae2c7aa40f2e708dab857469453cd187a74f1f5fe6c305c2b959652c776e9e4c83fb83c7dd42e0fed870b5f6b839257ecc885184db33e3cd9e2c6b437c7182fbc3c3d5d2737fbc5c2d23ae4f8c3f3b5aee2678b2336359cb02ab033658c1dd82e206c5dcad2c6e0fcf9b51707330bc1160ee0f8f9b15c0cd5551bb41f1462bdb6ec337123076e606b5dcad39d727c89f6179e2706f1473855bf70bcced098f14bcbae18fd171695a9e38658c8debc3f2664b3c77519eaceafe5870b5a0b83fb29b05757f7257ab825b83e28b63ae0fcd9ba571815315de2e5705f7075ed6b10cea5d3d3f6d5abe6867a9c19d70bc1209cbdd1a4f1667898be18d40dc6092bbd5c1f555f0665a2c837e574f6f777824a53ba33e09cf3dcccfad272e87370e71a79e57c2e106cbb85c46ee8f9cab55b6c465f0461aeeafc99fc5708176aed6d05207c693259956b37db1c8b266c61731b8c11eee5620b7b7c79b493d754d7e4c8fe5ee8f278b42894b63f3c4311708cc05937337e3898298d63c8f14e60a85b85c6437b8247305bcf178833fdcad416e0feccda8963605be28c6f2a16f02d797c59f09b9c02c37cb856db723de5865a9cbe1c97e963c3d5f66bc34049e681ce3ba3f125cad252e1001174cccf5b1f167c3a7fce29376b8bfad9b15dc766be08dc53b957c929deb1be3cf908a6beeefcd9f752ddf5548e77e19ef8f96ab55c4d347e9cb28b8402cae16ee0287b8597cdc1f25ee16edd2845e698b1b44ba5b6e96b8b3379af1bcf5f046297746f14a145c20dc0513e006bdb85c459e03125474f5085d202b17cc855b2bfbe20e774af14a15dc1f11ae161b37b8447fff19044bdad30f7db834069ea8c09207f5646d5c201e57cbe94993e28bb5eb4bf3666adc1f40ee16950bdca0bf0efe4c8e1b2cba5b6b2eb0a9dff144572c71626f1ce3d6c6be98c3f549bd591763112c65d4275d7083945c3d492eb0819bc5c218104b20376e9e256368925eb89385575a5aeee43c990cf707c5bd1d718352ee960ed776f54539aef0cde552e30aab2e57154b9ed79725b9b6a92fbe71e703cfc487a78ce2936cb83f551ae474f518ef34f34ac1a574f2495817a8c0cdf260abcb7366f901dcdc99c22b11c7902c75729e8cc8a515bdd2175788e782cdebd3fab3252b3559027170f3d42e308ffab6f833224f9a1c9e205fc674850f5cae242e4dca130bb841a20215b9600cdc89782206eecfcb9f2571817e178c7869609ec8e5e983c2976d7069559e98c00532ddac3537e8e9ea595aeae678b2a63b022f97b8bf2bee0d8a2b3473b9ba987623f3c6a70b74e48245f0ac61f922f1d9378f64bbc3f0444d376874b7d8dc1f953f03e2fa4678b3e3d891fbb373b378d7c7c09b2161c4e202fdb85a0a3c75507e0ccc96c1f591fd19970b74e68249b1e4c9f9b2defd1172b5cc5c1a0f4fa4e102e5b9799e3c79679e4ccf058eb9594a5c1a9357d2ba3fbfab65759752e106972b6b6c85693d365ff6c7155a71bfa2ee8f98ab75c5f5b179b3ad7bd613d179b68b47eaf20482e1e609dea0ed6e49b0b40df9e2134bc9f4496396b9bef18c6bd3e08b81dca02097ebcaf559f167c2fbebfdd9d5ed89f166085cb9f44962963c019eecce9d24bc929225109c9b077783c4bb55c2fd25f067362c6b687c3183a70f1a5f36c353a7c08ff1b1e4edf165c35b73e28b612e10f08215ef2f833fe3ba3f035cad0f8c115ce0969b05c3fdb9f933ad1b54e06ed1707d5cde2c8a2d19aeef8cfe8cfe0c833bb95ec983ab036a1078b7aeae0d822fae7181bd9bc5c0f549f06657dc1e196fa6c07236f003b4b90df347385c20d8d53ae096e88f74f767e86a5d708136dcacaffbbbd3c279249f27d01a378f001708c1cdaa61b9bb7a3235d76e40bc71ca9d17bcd290fb63f267255c6192cbf5c1341a1c5f04dee0d3dd62e10603b95c5690ca4c93643ec9831b34e3721db940572ed80bf72c9ee8eafaa2bc599c3ba7782530f757c4bdf57007e38976307a707fcaee969627aef6c630d76c76bc51c8050a73c198b8be23fe8cb6d4a9f1644cae7084cbf5c6fdf9fe2cccfd7d2179667cd9d1b226c617db5c5a104fcc61b9cbe0c9367876e913f266224ceba5f9323dcf1ef1cba0b8c03637eb8afb5bf267241827b8c2162ed71d4fa9e7938cb8353dbe98c20db260fa0cf165233c75567e2ccf3387c11bc72e508cab252472e2064d70f564b9c21b2e579e3b989f693c71446fc47afac4f0651e5ca010376b8fdbe3e2cd9eaeaf8a3f0b5e1a054fd4726d6ebe98e7026f372bca7277c2938970854a97ab84258e8b372e7181885cb0299766c21339b83f73ae96d9b216e78b145ce01557eb76ed86c21b15b87de08f4eb8c00f2aace0724171834d774b85eb23e3cf8cdc9778a207ee4f9bab45c69d14bc12eda993fab1b0db261e89ca53bef149435ca1d80503ba3f015cad0d9e3433bec8bb40176e161bcbdcef8d594f49c727c579f6a47c991537a8431bf5476eae7082cbe5c472343348cad5f3e4feb4b8b7299e12cb27b5b94036a6e4f24918dc1fa0ab45e6ce3caf74c3ddeb899ab8c0156e96d6058ae3e6192e8382ae9ee0158eb95c5adc1f36eed692fb83fa33186e908ccb85348dd6f5c5df7d862782bac23aeed799fbd3c0d51ae2fa98f8b3dcd3e7ca9785b9c0146ed61acb1d9d279be1061170f520b9b5f2471ddca9c42b79b9c970736154a8e572cdb9f38e576a61ac86db0f1e4937a67581541207e78d395c1fd69bddb93ea737c3e106abb85c3f9776f544096e30e96ebd59ead87832e25247f664506e4dec8b37dc9f587f11fc1913f71f9e48cafd1df9b30d6e1000570fd205aa70b3b22e70e966a9b936dd17e73c6b505f1ce0ea666704afb4b1cdd327902f03e2025d5db02596bb209eec8565eef6c6346ef04bdef4bcd1823b933e298ce58ef7640c3c6b515f6432368111135ca11f178c7781cc5cb0286e9000570f001708810b06c2d307842fcbe0024570c180b841a5bb3542318c256f872fc33d7365de38c8d8d67227f6647596d2e993c8dca178a2096e6d8f2faa707f4cdc9b9c0b44e266097275c64e2f5ea9ccf56dfd19932b6cba5c2c2c7b5a6fc6c0ed2df166c1e54eebc98a58ee2c7832ac654e881f0bde5f174142574fd00deeee9605176874b328b8c10d2acce382d9ae0fce9bd57175b5f6e478332f7762f14a564b200f6e1edb5217c393f5c64c58ee3878b20e2ecdc9139beecfd2d542e1fe94b8b7389776e495c8b813875752e0da0df846a41b24c1d5e3c0349a205f14b2e471f16545eecce1959cdc9f121aa474f51070679b571a7af62af8322fae6fc99bb9b0dcc579b2188a5996bc29be2ce8cea64f6ae30aa7b85f4e96bb409e4c8a69b7a13726dd9f923f1b21c985e2177706f04963dc89e7955cb8407a6e1e28778abdd20f5778e67279717f6e576b82e52e85271be156f84be2de88b8b42b4f7cb2cccdf9b1a03b2b78a5dab61ad0178bee54f34a44ae2f8437a3e3028f6e5605d3249a4ffae03687475272856adc2f09ee54fa2435963b334fd6669933be718e9b73a315f34739dc9f0bf746c2f5adf066604f69c1276d707f7c94f6c21349b8d3ea9578f7478bbb05742bf54732dca011974bde60f16e99707fde5c2d346e4578a4def2060a7474c1b43ca5159f84c3349ad91789dc52fd110dcfded2974531ae07c4978ddda0537fd65c2d316e6d8a2f9a59d6b0f8629aa58fedcb0eb8407fdc3c516e8bfe087885095cae1a6ef0e76e8559f23878b2b01bf4e3724d79ca073e29830b9474c12478e6d8bc71cf52b7f564c3fb144f04e6fef470b5feb83f4d574b85a78fd59761194bb8bd2ede0ceafa0c78b31eae6f893fc35da0af9b8778737b4cdc0a6ff4e10a03b960c0258fc8938d717fac5c2d209ebca8278be306015d3d3f77aaf14a6fee0f8b7b8be21ec613f17085612e171645845d5f096f86e7fa2678332c6ea3fc519beb8be3cf9cae2fcf9f51b93f316e56ed0625b97a92ae508efb4566891be18d3adc1fefcfaa6e7b7824e2b247f6666c9e3e597c190bb74efe28cda561f04433f7b7e5cf8cb8beae3f2b5e5ad22b953156e602b76810aad38857d27227d22779717ffab85b51ae0f8a3ff3b93f5057ab850bf4e166e1b94225974b84fbe3a6c2082ed712f7074927d12769611ce1d993fab22fee8cf34a57965d5958f7278202415db037d777f6670fdc1f963f8bf394bc4772737f497fc6c10592e0820951849e2b2c5e2e148c125ce0d0cdfa727fa8aed61457c8c5fd62e0fe98ddad2dcb1ed79b59b9bee19bc57083510a14e46a5559f2e27c99cf15e670b9feb8be9f3703e136823f4a61c90be2cb7645a4b9400d5cb0189e38356f94e10675770bccbd89278ae0028bb8597e5c5a00af74c605ca9b95c0a5d1f0c4149e3e487c9909cfbaf148145c6001d3a7832fc3e006f75cae2c4b197ca40c9e3e407c9908f787e96aa5b0cce5de78e77ec4136db9404317ecca0de2b95c093c17a0b4079e68e5d24a7862444419894e4f55c426a2d512d4d55591a9498c1391890d551b356cb610894f6cce5c1987886262aa72aa5a9aa22a4a15ab98a6a6aec65488a8292bab26a9aaa62b26ab29e3d49254d18a4d1aa92a2755520e3061b2468d55980611657caaa2aa2a16afaea89c86c3a6a72a346d8c4420a2988c544422d3b06a69494aaa08c534e58409cb173010f48728e3d3d5d59214d5131495d390c8d43455ac0f51524b4c5650544d5057574c4522b1890845ec218a284555b5e4542416a79cac8c57c3a92a34633040d3060b0d0f514b504c4cc3a7a72171c9482c325d5931a53933c638d51da28a50574d4d4dc462b1aaea89aa8938a41a8346ca01264c8c4e58be80b9aa0e4e565454564f4b57c3a7a9aba9629594142d494b4b58be80a16a0e5153554e56554d4b43ab272baa2729a6262aab34195819894dc5e2104545457c827aba1a3a595911aba6a488629cc0ac1953245a99999282ba214a8aea8aaac9e8b4446c2a1a8d4e5754629c884d5568acd8646005c6ea8c959834526ac230118b44a72ab521caaa496a6a080565241689525252544e629c886c32b00203a6a9b8a60a4b0c1bab334e6aa4c4502d6d690d514b5456c32aa826a72722d3151313d592992929366dce0c8d4e4a439415941595d590e9c95864626272727a1a7686a8272826e2141471384535c544ac022305a6583463c68a6a4986a82aa827ab25aaa7aba7aba6225371eaea4a13962f6026680c514d56c52aa3d3d452f1c9b8b464746262c2c48c192baa61130c5150c3e2d5939551ca8ae96a6a6a785525c68958f5068d13264cdea091e262c4f2054c545f88223e3d41158752c462f1eae9eaca48cca08a4a1834525a9830b10a83464a0d13266bd260119db07c01535517a2aa8a5752504c55442826a729a92193941827a2159b316a30600aa02d4041355d412d5511ada88ac329282a2b0dc6ace982a5c6ea0b1a2c2c4c9860a9b1d2000d161a264cceb441c34159301a894623139311caa9586c7a1a16894522d18a586574a2a29232364135199d8ac6364c67daa031b23973e5a62b4451415119ada49898a09e969aaaae8a524e98300933c68c1413266ad8a4796ac2f2058c5455882a5a5555351197ae96a496864d54574b54565560b0d88071223685a8e215d169e9ca48b4a25a2a2e415d4989712256a16983a506cc1b335363d6acc14ab3144151886aaa72621a4e0d9f8643e210cac9a9aae984282928a62b2aa92926aa2ba9629591ca8aa9264441493119ab9a884c554d46314e443669b0c04011dbac19a3260c939596105545a47a7a1a5e4d11895452564b6ca8a432b0925212a28850575056c3a215931313516a6ae94a8c1391494947887a92323a312d5141410d9da8a8ae864e629c88c527a88a1075753535557565742a16895652452826314e44366bacd8a8c112b38689583851c4aba253d1c94825b5b4345cba325a8971228231d3e6cc90385ccaa0680c33e6c95393010d21ea4aaac9c94845243a414d11a1a4a08a629c8860d63c11c3a019035510a2a0a6a09ea6ae8a56574f564626272928314e44345666aad05881592a3259518d31b386e983282ba293d5b008f5c454b524e5649c9a12e3441c1231c04a03c64c9b335068b0c248a9a96a7a723ad306cd130fa2aca486574f534c53504e56524e4b57c3291d444919875350c42b27e31215157138849212c35454c3264d011c4455594119a58a4c50554b524fc32a2927314e442b2a345860cc9891a282b2a242d3001a294d574f6bd26035d9200a0a4aaa48b54445645a9a1a12af9ca622d020aa385c2a3a2d0da9a0a896a4aeae8a526fa28c4f5744a8a72ba72a22139313d395950c9e9a9a96a0988a504c462293d1e8e4546c7a1a4a0da7864c5553c52195149314d4130651565454574e574f54c42a26e2d41315939ba8229394531554b1c9e9c9e8c444755524a14d141595d550caeaaa89d8341c3e595111d1608d6193a601264c864f24b089ba220e87c5215371a9ca482565b526ea4aaac938c52425652c5631393919abd4445d41314d119d9caa88524f462bab211408174419a99ca8a6aaaaa6a8884f55574f574d495ca630614265e5c6698d993467c68090264a6a0a6ae8645c225215a1968a4b5743221558514e5357565345aba2d5d3121493959414131668a2aaaea0a4a68c4d4d56534e54504c50544c98108960884dc42ace444915a5aa9a9698969aaeaaac864d462928a820cc44514d2d1597a8864d554c4b5045aa2aa9354f58be806953268a69c96825355584821a2e55353d354d1575201365bca2729aa27aaa62726a6a927a225e11731813253505e554c5e4b434f53484b282725ada414cd45453d514d5d0b8642565b4323255513161f204862875c64a0cd59aa61ac2442d15ad9c8a4d5057442627a313151413265469d4189fc010a9d2a871e12aca692865240ea19e989e98885255442618aca29698988a4f442271385565557535b462c2446acd99273044a935678c31544531198b4c4e5543a862f10a4a8ab83464c284090a0cf1e907aa2829a8e2d292b109ca09eaca68a47aa26a1a128d988a821a4e5d41353d5d3d3d515d2d5d3d59897122a679c3860913264cd2bce1c28489110a0c718d5379908aba829a921a36415d31355111a998a6de5895291abb5810357482927a92aa2a3649119f8ac4a733526cacc230159fb08089325211894d524d43e25515d55555d128c68928c546aa0a4c1a2935183411d79819c3a60d93d3930aa29a8c4f4e5355462a62d5539314d3d413055152c5a19591ca5825e5645c9a725a2a4e10556c7a1a4a3151514d35312d15a99c86629c885292b858495ac3068dd41835525e9c885566c6b4996202332462f902268a0451c4a7a9a5a6abaaaa2baba9e192516ae9ca4acb1a2b366f9e5c250d8b6d9c9ac2b499b2aa4af3258aeaa9ea69c96958a42a5635555d15a1c43811d9a8c19a923a1281d59554d5d3941453b189e8e4445c72225681807805f5f404d54445457c2a3a5d358971225a79c0e9caf8d4349432360d9f9a8a4e56c42291012f51545254544e4d56c4a6e1d593b1cad854558505457cea12d57425d534bca27a721a0e97a8a48653629c8855584db8443911874f504bc5a926282928a9ab62555515d696a82baaa9a725a291585caa927272622a0e8b505aa2a49ea4a6864d4626262aa626a826a729314e443369ce8c015365a5464acc9a27a72c51524d50555750575054c3a5a62629a2b1582cc08128e313f18aeaa949ea49eae98ae90a6a6a8d53530351534f545345a8aa2a2aa62722d493d3151a2b375660b0ce60a949432c36c13264ba9a5ababa5a822a3a3541495119c53811d360a9a92256b91245b4729a6a828282926a323a159f884e629c8854566ec060b13116ad0c8dc5a5e2d210aa481c2e159d8a44e3d048345a4115895555574c504dc3a1d3d4508c13d10a0d96192a305463d848b159532432305525aaca48b4321aad9c988c4c56c6a9aba191e9012a514e5055c5e2d570e909aa6978d5f444bcbac202c3668c99346ba0ac2c107555242e11874626a92922d3d2149453139529514427a9a929aba6aa21d552d5d2906825c68908c64824129b8854566e8c0d4889a2a2aaaab2321aafa0aa9c884e4b5257629c88566dcc48b90143a546aa68a442f366cd5294282662f149ea8a589422323d159b86629c886aa4c4500d891944719a922a5e3d551187544b50575653629c886ad8ac7962c2f2058c1b2851544c4e554bc6a7a761d550ca68253514e3440453847a1235356ca21a4a395d41313d31550d8b57629c886fd6acc13273064bcd1513d1002751c4aa2aaaa2d39371e9098a0a6aaa28b5d4d43454208aaa094aea4aeaca4894a22a364d5d418971225aad91a252638501961930586c8a6cd6984973660cb1a886cd1a2909443d5d199dac8c4fc4a72728a371ea894a8c13114c91d8c4e6cc95b1098133585860cc54a90103267740949494914855556cbab2826a221a8d4f629c8862d6b44903460dd65513d18a01514c46a9e2b0aaeaa90aaa8aaa58656514e344747a2a206a69496aaa58bca292aa7aa29a9a323a8971223e119d9a2c2d19ab9aa098a8ac8c565553c52727314e440cb0d48401436400eac969aa0aca5835ac9292622a323d3d89712282c1aa2216addca8b15a63a5c62989cb942427495092b82471b1924465e50503292d504427262c5fc0a879627ab2829a225a514911a1a6aa884f4b4c98403561f9026603a7aaa2d3d5506a6a096a48ac7a323a118d61da4c5945592395342cb6016364c2f2054c99a6292a26292295d10a8ae989a9e83425b585091326c5252ba62b282aa2141513b1585555741a325d89712226719992a4064b8d9a28264cd89cb962c2c44a0d165512172b4956545266d2804133064c1a2c35554e46356cd258b0641c420d87442291b8c43484626a726a2a323139e3c68c192651524628e252b1f8245565f554240e9bc43811d99cb982b2623346cd034c6cce5c19add460512d61f902868a518d18306bdaa8010346a8082603a933464422182c3360c2a01913260c961922c32325e2183668da8049636565668d11266b922c49a2a40a8d14182b355269ce602d1130c00063a4301040002649aab0a6c058b119a3060326480408c0aaaa4a0a4c1a366cc430018088a68d1a2349576cda101dc9c04a0c1830546bc69c31620463664c99211292a32446498a941021191aa0c850080c1b336da4aeacaa04207234c48890a526a2a00cb030605304d4c4543c123e158961d08c11b3464acc51508d149b35487ed610010afdca50494d993183a566009f94951aa19e5599221fa25518223ce21a366bc6646035b41b73e60c56125d318d919c1a292b3354457044345669d2480ddd88678a6c566aaec0a8c16223458565c68cd450ad482382016016abacc0a8b172834565a5068cd49a2a2a2b30c4324d4cc53454566b9c24f1cdd51835566ec05881c16293e68d1a2a306c32b03ad222183658586ac05459a9b1aa528305a689a908660a8cd518356cc0b0c9c06a80914220a263865a9d91424323a2838cdd592a88e1e401044882240000928e18413a322a221a2a2244648890202061f007f8f3f57c783b5d0e67abd1a6ec995919d9d862613f6e40f08f1b3fd3d89d654298931f1776f1a8f238243800868878210e5e0e08f77ae776dd7267dcab0d17ebcbfb3af85a9d4ba4c0bdcaf06603fc4d8f3fdaba5813fc2f85db95c015cad5e83c11a61f1ae48dc0e3e799ef2ddd39c03ed7c50d92a24609fcef829703c0ebb2dc324c7ffbe37659f9383ddc2b0b4f74c7cfa737c3bd90315e488c7b9de289c8b87375b162b842599e4ef15e19b844067c91035ece15b76bea97f8f171d8fc8d8f7b85f2425b3c4e870b64727f54605d30cb5c2108ae500bf76ae45e9b18b2e1e580eda6c3c1e3eab83f4a4f5476af4f9e68cbacf77496b8424db74be92705efcba058303c91263fd1fc1c38df83fa9b9cdbd5c013e1b943711e87e7e54cf1b69f4b54c3bdeaf1ba0b96cc71afc6db25efd58c2b647c5f13bf353f8d7ee88e1b7c529fa4e231458889ff79f9d9e47621f142d4b85d597e22dd2e225e08cdbdd6f0f3cbff9eae9d7ecd86373bba58113caee8774f7e499e6b050f8f93e3859071bffa3f17ee950206de06bc42307c8fb84f87f7c9b958601e37e4e3b8795cd00fbdf1b636fec7c29b11f045f0fc1c286e97d1f7c4781f158f2bbbd779bb9a9e07e55e0ff8da9c5fa2e7768d70af58b78bcec50af34213bc1c2dae1d02de27811772e295f4f145fc789f3470643fb13c2fcabd8a795f12176b84f771f2bc04bac67ccd873b44e97d4e17cb83b7e5f1426dde6cbe10d613e5f1445a3fa7cae32478b3244f0476af679e88d3ed2ae27d1edc2fe0e3f2f8227d5c3b416f76fbdcd4d3d94368e95eafee558e1b94f70be95ee3b83f05ee10f17142ae500cf77ae55e7befa070b1a8ae1ddaedaaf24bc87e891c3f44c75dd2f2d3817b05e35e81b84394bc8f885edb781c0eb7cbf7477e5ca2a6db15f53f126e57d5bd5a31a4e47695f92265ee0f9efbabf3bf02c68dbd4df83526be089a3b34c31fe1f91f99f781727f98ee55cdfbe04c2df71ae78bfcf1363ade5744ed89abf3b939fd4fe90a3df03833bec89c1f32e797d0f1448cbcadeb5e8317a8e4795cb46b8217a2fade187f5be097e0b93f4b7ec8eb6f0afc0473ef8cb943315c3c6a00a9783a4c7ec9d7b513c54c5eac0eee95c83562ba404ebcaf868b35f53e0fdc3b24bc90358a55c1cf99b24f84177a73af13dc2bd2d786783947fec6f44303fc501a8f43fa1c02f70a748920f03d063e77e56f6571f2dc32c497c3c5cbb1e35e5df8a33b9f13e3751d2a3d1101dea78d2b8480373b72af433c51207f747c1d037f2be26d6e5cac101e57c61562f1bd3a178bcb4fa0e719f073cbdfa22ed696c7e971bf82ae1de111d7e712f838587708ea857c7197aa5c3b4c3738ff97c3e3f8b85733bf53e0224f2ed0137f64c7fbc82b04e97605ddebd7c56ae089c2de27cafd12deae23ee1296fb13c7efb678a10bdee78d9f5dbe08d6d762f8dbd30f2d79dd93c745300444113df7eae576997921593c9124d7ced02562c0259275872c5da016ff1b737b663798e67b4ffc6f84db05e687b4de67c31321e00ac97081488ae5e5715db7ebe87f4dae5c2103de883a5ed7c5fb9eb84b0b3c1de3ff44b844e2b8460adcab168f13239a632240eeb5ccfb96b84b56eed5898e9251d3e376f89f984be4e4de392138e50a21ba768edea7c1ed02e05eebb85870feb6c70f31f939488ee22072e45e53b87210bf67c5ed22e00231f1458cf825785c1f007c2c7c0ecafddafd3c7285681802e05ea53ccf8bbba4c0df86d359ba44d4b8571d6e97ed0e2570bbb6dcaf001ec7c6dfa0dc21c52b94e2e5f071878ef89c025718a5d713eed5f73c047e36dde003f75afb9ed3edd2f246d871e530be90173f278497d3c50b91513bbebf35f9257ae8a0ae1097bf2571855b3c111eefb3c00daaf91b029fab728764b8d7aedbf5f33b2e7e4a70c9e4b9422cdcab962fb2e60781aaf1e485a471af46dc39fab842503faa27d2f43f359748867b3d72af0bdca1275ec2c7ed1abad7e30f97fc2e81e73d79213f570d28d70e947b4de285146fd7d50b59f13d2cf72ac5d371e2855871bf92e0881612c6ed1971b1c67caecbfdfa3deeceb543e45e8dfec8eb5e9b7c91a75f72c75d6ae0aa11e55ed93c8f811752e70ae13e27c20b59ddae1d7e0270bf7a6fa6bb7324718361aed0fc31f143017c8eca0f6d5d61939f52ee55ea6d5e7e88f78ae462e5b95864ee958c308a277ae327997b45e1cd684fe4c5b583748eeb89b2fe477c212c7e3a5d3b4d7ff4f5b4132e51939ff3c425b2c6fb90f822c727025566e9979cdd6b06b76bc94f244fe48690195fa362de1f5fa488f7cd79db1d9fdba25d0a7c4ecafb3cb97680eed5cab593fb9b9e6b6778bb8857d7e4e948f1b928f79aae9d9fff1d70bb825767c715fa72b15cf8227afc3ce00e2d71ef587d9c0e8428785f093f99fed6c7e3d4f8de948b1051e03f84843b04ea6f509728caebbe78215cdc6b142fa4c52532de6b945eed7c113eeef56939737c0f8aa7d3c4f3e6cfb182f3fa257f144f1a1748c6bde3c1cf2120d81f12f03f147efa5c3bf3d6b147878cf8dd19ef33ef97007f6b6a970f7f44c70b31e397d8f1b902fe67e67d08dcaf01ee15cb0bd5b9d7362fc4883372af42ff8cef9be20e09f173a4b84212dc2eabd7a5f99a105f3e3738f54769144b8392f1e367f15ec9b8422bdca1e1fd72e1715b2ff4818f4df1887a9fac27fae277576ed702f75ae7762170edfc8457dc60016f967bded4cf293f7bf71af5b83e6e17ed6b337c8d885f02f63ab37bfd5d217983083c91d9d7aeb8457ffccd8f1b44bc57217e0920f7fac11dc2e48794de8c89103472662f94c1df12f82581fcb4e01251e0e54871b1fcb85d0e3c1d416ed7f0734fbe56c5edfaf235193e1775af1edc2e239e088e8bf5c11d32de1f088f03bb410adcebcffb60b83e2c7408783a603fc55c2207fc6ce05e55f86005f79ac3bdf670856cb842036e57af1002efc3a13f777c91dea0029e47c6ebce7ed7e55e2b7822ae7bc5e05eefb887c6178972b1cc3c6e8f3b84c490ddf3a67c91a6e211e55e995cac12fea7e47ef1da15c00556f13ea8c7b971bb7ab876a4fc911a95a3e9e528f959e5859ab842b58ff3e67d1bdc2b0e6fab60486c5f9bff9579a1302f34c52bf1e30aadb84436d0b9f2b7393fa78ab7cdf13f02ee95ea75f36299f047591728c5055ae285babc99ed8574f1be1ceed7d14f1c4eeb79b42b04803bd4e46b3fdc2bb04059fc6f85d76571edd43e37ef958a3b34e7da915f24cebd13c2ed12ba5d4adcae214f278b2f42e7e90c7f888f7bedfd923e2e9016ffd3e10a41722d87cf65f14253f79a74af21bcd019f7abc8fd4afa394a1e6787ce926b8778af53fe688f9fb3e55e47b843c59f549ea88e0be475af604f07cae38a5c3b459e88f17deedceb157f3ba0439afee88d17a2c50bc1a2414bdcae22f76ac7cf11e05edd7821333778d5ae275f4488af01f138021eb7e78fe638ce06cfd1e25e4db85d5e1e37c892b22baca258622e11adf785f04466dc21c4f7a9b94237dc6b98175a73af05bc4d8f7bdd72afb80b94f2b7a5f7e9c5a3758d9abc2d8217b2e07d6f9ec8004b5c9e48f17ef9ee75eb76f17e4e9d9763bb42283fe78a2f22fb74af02bc9caf1f6ae312a5f0425e7e88ef7dfeb843073c2e807b255e2cab3819dc3b1cdc39f8b85d52ff8be02e65b9425bee3580d729f042844fc4c6e3d2b85fb6db85e5735c5c2117dee7c2ff4cf8a1e39b19795b1cb7abf743733c6ee88dd8e30e05f1bd2a2f274fef18717f70ee57ed735608993e48c1cf02eed010d7ce0077c889cfc1b95d732e19402e11ae0b54c5bd96f0b3823b54c34378ae1ddd1dfae17daedc6b958b75e65eb52e1604bf44ec71783c91a39f08dceb1113b5f14376bc2d4beddc7ec878898817088b717f7c11dac5cae08de0e36b3cdc2bd7cba9e3da51d263e2e2799cd10b4971afc23bc4c3ed320097c34fabdb2bbb58755c3b05bc8f08447abe56c40bd9e27d51fc1c063e87e5750bfccd809753e70a9778a22eae90242fe4ce17c9e37d26dcaeda13a971af553cee8d3953fc511df72ae485a47e491e6fdbbad7226f63e38920799d084434bc9c285e17826ecabd63420d861fea7a9d95e755218ae37f676ed7946b346f1d7ddca52b2fc4ce0d52e20a9fee15cd4f022e913a7e0eb957db1d52e26923dcabcfc5eaf23e0ebe881c1ed5bd8ef1437c6e553e8e9a7b55e089ec78a23fec3cdd1f9b67987bb5ba4407bc5005bfebed4aba77e8dcae0a2e91371ee7c3bd5ef042427e888dda31de6bf176c9791bd0dbf81062e4e55471bbe6bd9e7185b43c8d842b24e95eb9f8257bee500ed7ceee2e4db9d73d6e9791a7b381506f99e12502e5124db9586ceeef83b77dfd1241ee7537d11a8f5b7283512e108aa1261ee7c7cfa1f236a1df8971b1dc14088a1f5aba581bdc6b07aff3e26fc46b27e97e11fd64f24777dc2b0f7f84c7bdbab9baa77b0de37921bc8f1af71ac3d319e097d4b124ec713d5cac2c383db78bcc25d275af435e48f0a7003f54c70bd1f23927f72b778350eef58ddf95f1360a1e77f442c4f82124f7bae65ebf5ca1dbdbc0dceb0cafd3e2cd949ece135748778956b8bd233e6746bb88bc9cb35b14c80d42e21241f989f5459c6ed7f78ac4f3c2789d18f7caf4c3012e30ea76157f28c9357a7289105f8817cf3be3e7887089667821282ef15ef9b844dcf8dc02ff6b7a9e08f767f8476edca1a51fd4fd1aba3f79dc2b9d5b24c80b91b95d3c7c11a81f32791d164f7446c7caefb2b8425e1e97e7e904f2b66097ee5eb3d695717f51bf9bfa38183c2eeb85aa7e16b942053c11007e12b957decf2bffdbe17d746e99e21709e16b3a7c1c3f5e48cc4f069ec8eb7d20dc2b01f7e74b4e1ff7ce112ff4c0bd3ef03a03fe488f2f92c0f3cab8570e2e110bf75ac4d7a2f8a33eee1580af1d71af505c214517cf56af3fbc9c10be08d8cf71e07f275ca3a7c701f23c057e27e7d1f14586f821381eb7c6bd6671af697c8eea8ff8f89b11b70eb07bed72e528be0e818b75f572e87821605c201a4fdf9583e97e155da217ee7470bb72f7bac6fb84f0b51e5e288b6b07f744605c22773ef7c01522c0ed0ae2da79f23801a69597e3c5cf9fbf817defcae378b85816dcaf23f7ca041d25b70bca0b597ade02dbbcee15ccfb2870af6984543ceeec7d3fbc6f88ef45718798de8c77af20fca4ea95ca42125ca01d047e28eb122dfd947aa122e7a67caf8a17f2c4174973bb925c3b02dcae012e9608b70be87565f71ac4ffc2fcaf847b6dba3f4a5ea8cc0b51718960f839035ca227d776b85dc09f83e57f532f94e606c7fc0d7883065c327aae1d212f078a0b4cd2211c7ec91eb72b82afe1f0bd326e9011f73ae6e5f8f1b5383fc75ca03a5788a90b82bf3d799fa9171af24461dc2ee10b093dcf8a3b04c5e302b9d7392ef089e7f527d11b71c7056a62215b7e08ef77506e9792fb85e47e0df95cef7587b7fd2e993f1ef7f542d63c8eeb836088c4ee75855f3276839c1ed7c6b5d3e45ea77e288e4bc4e98fc0beb7c00b89e27103fcad803bd4f4b8339e68ecda49e08fe4b8baa3101af72b78af43bf33e0e2b9f3363c3f04c8ed12e085aae815eada49f272b2781f0d1741e2755cfc58d1ed3af23e05dc3b1fdcab123f95dc9f259e939793c7f551b9414d3aa474854d3ca1ae90ed5ed9783a7d5c2ca90e2571af167cad89a78970af09bc6f849f533fc7897b27cd45f2d839e0da717a9e95d7d1f1b83bde8571af1b5c202aeed00db74b8897b3c5ebce789f0ff70be80a9db81383de29e10ae1f0b7e2ff54b8772ee810a79fd3c0159a01eb85f789e38b98792234de083c4f44f642a49886828fe97358bc99004f64e7e7517b67170bebcd769fe3728718ef95887bc5e27f4e258aba586d5ed7e6dab13dd11637888917c2e00a19a0580fdcab13b7abcbcbb1e2e9305d3b473e8e063f67813feaba581c3c9d2d6ed7ee7f4bfe87c0137d5d93738310f8a3367e488d9f50de56c7bd1655c891173a73bb843c11e2d311e075567c2ecb0dfe667d5bd00fb9f14b8eb74bca1d32bc5f3f57a8867bc5e3e52079df9abf29f145d45ca102b7cb82bf19afd094dbe5a4439adcab01bd4670b1de5c9f94760df1426efec7f43e6bdcebef4be0da51e079706ed0012fb4c4e304b9f6c50d96b942075ce0002fe78e1b04c50f0dbf67c6ed1273ef6cf0447adca1225e37c6b563f442aeb87754b84396dc3b487c91205ee8895e9fb8d72cd70ef0761d708515dcaba495f0729eb8c02bfe088e1f4afa2247dcebf06d133c11176f83e0774e5e08d0e3c8785c1c5fa3e17321cc01de07c61781f3434a785e16f74bfe1c2cee95f63528ee15cebd7ef16648ee1dacff8179db1ef70ac71fe56127f83e6edc2b979f012f34c61309f266be37e2f8664aae1c4bf79a7b9b90c71def9001cfebf2b5259e48004463bc8f0139066e57014fa4809743c5bdb670af24fc1c107e8e1d3fe474af345c22a65b04c817597a212e1e07c70b41708551efb3758912f899c00d5a791f38f7ce9985a2b87850b9442dfc14fa1d16174b826bb4748da0967c709718f839595e07e77f4bd727c2050af0bc2deef5cded02a2eb81cf79f145eef85ff16700b76be9890cdfc6f54af25c3b469ece144f74e7e9e871bbc2dc3b20dc2b02f74bc80d6ae2fea088e3c3bd13e61231fe901c9ff372bb28f89c96b77d79223e5e47f646e4f19c252f27e9e704f066496f93e35ee7dcab185728856bc7e76b5efcbcfa22f3e7042f478e3bd4c3edfa5d61015f53e2a7993b84e9715fbe47c50f11f04462fc14f244655c21a737f3795e174f8778f1ac717feaf8db941f0abb58696e17d51d8ae28906f99a132f44cd426a2e91af061d71af0314e8c41d7a7aa12eee55ce1701e2ca317c223a5eb7c50ba1e25e7df81c1d170b839f4b4fb4a773ec71bbdafcd09dbf49e915cfed2aba768abec7f43e54efd3d5ae2b6f041df7fac21526f0be21f70ac3fdc2bd90376e17031f27cdfda2bd50043f83de26c1f3b07822392e91ad7b5d72971ce855843743ba7752f83956bc501837e8894ba4c2b503c0edf2f9a1e2ebf6fc6d896b67e91279f293cb0b11f95a183f27c94fa56be79f73e576317d913d8059bc9c3d2e56d5e7acfcd0d7e79a5ce1133e7a7efeeecce07621b9782c707f4b3c91169748f11281e3de1173877cb85fba8b45c2b583e4da31e07573dca52e2fe48c27caf33724ee7589e799f1749aee90a7bb44e506d77cae81dfcd6b67c9e7e6b8575dbb98dc2e2ad70ed1c543cafdc91be4c44f05fe96e71a39fdce8cef3ddda0e2c55a738dfab7283f270a3a1d5c2147ef6be10ee97083a2b8570d9ea8eb0aa970898aeffbe07d33bcaf87274ae35e25782153fc1cba4202b844bcfa65f43822b78bcb0d4ae28fb41e842f72c10f357d9c0bee100ded4ae25eb7b84308fc4e8b7bbddd2ee3bd563dcd84171ab3d017bfa3fa1f9c6ba778af79fcce0a511f57a8cb5ddaf2425f5e97c00f31fdacfa212e21462fa48a7b25bad73efe07c1fb885c23272f27807b85e07174dc32463978dc2e093eb7c508813bb4c313417a3a58bc2e8c7b55724efe8dced3e1e3faaebcce8c7b0dba7602b842b43f62e3d6c1c73af93d2b2f74c5ff860f09f0bfaa1b34f33e2b5ece174fe4c7f7c87839bbf761e35e6fb843742e161a2c1080ac78a233669627da43e8e95e8f5e088c273a5ea108deacf638b36bc7c9bd03e7625170edf4be081eb70be98fd6b8572f6e54def6c02dd3f46600fc34ddab93db85bb5735ec40dd2b1ad70eef892cdd4173f164bdd0d505ae799c922bf4c21576f13e216c44e41c9f37c7173973af0efcef8117daa027c5e3d0b85d3adca0a562a97939f25ee978a1325e4819f79ae479f2da19f2d3c8ff78b8d72e7e0edf6cc9e7b4b85d444f24e977516e5794bf39f95f05bc2b3f54f2bd295e88cdb5a28797a3c7cfc9e2970c72870ab8d706ee55e9da89fa386d2e56996b47e88534785f15af1bfb1d9cc7ddf0b738af73f266017c2d88db15670e15ef63e2caafdbb29783c52f31fb1f9b1702c5f7a8dcaff973b4bceecac7e1e07147882c5d6008f7eaf53e252ed0157788897b5dba4227df6b7281deb8d73264c73dedb626657372d264793a9ad4d16a9246e3c9e5ad960396366bd33679b272779b39da9435dc8e266bb6be13dae4bc56fbe96af37436de8d27d7ad5bdebed6e9eb15cdf3d1f9a4ee1a0d08494eb7925d6de6e436da8ff4351724726b8f80b8daed6993768e070caa4d0e91bedc9d464b69fb8debdd88e43ebe69f7f639e8e0ee652eb80ed879401bbdfb99365f6d2605cc5b0892dc916f03910831220437ed26bf6e23de1f1591e50d913addd1f2a7de41a4e533e8b7ed498477134ac007483249324d6e811a68e04fd7780b798a906b1b0dfcc85c4e330bcfa18bee6d9b8908dce0e0f2e0932af3683e4b715aaedb37c2b58f004dfb376d007a388a5dd21b57def395917039e0d7d46efaf6c37fc33d3101aec8c139d8b60c7f6d22d3eeea993f8c0fe495180aa560fce58db8d950b8e6f3644b1f0fc606ab07b4bce1866b6a4b9a3a12a080658521d0501846090c57be4b146d8c1f06870684e7827b0d34f83721fcd416aa1b96252f54792c39aa2e3f45c363099f0bd443e0c7af30a78327af85e8ad9600b3c26bb9f25638fc05487f75f4588640818e8f40e8b1acb0c58c97e0819f62c089e1067f152d51a06cd9b24014270f6819020d857f4902c1035eba70d9a2258b030d60b96285812a54169822252a0a9427504f4e4d4c4bc62271385402820aa6284d51a660bd0d08344f4302969e38312e5940098d898f93e569463c0dccd3bac050c509cdced394781a1e342f7150781a160668539e2625ca93a7394980664093a73dd19a9ec6f4b4a5a719894f9b5a8031851129c6175d6c91c5f38a59c54f2aa688e20923b72927ce4f22a61040f8f0e4e1a9c3cf1c7ee260030d3f6788413a7d89501a787235c5c993388a6e1cba2f17df2dfe869741bc04e2a50bafe4829727bc2ce28d08b394f31284971ebcece0c6817ba981c4e0a59bc6617bd9c28da3f612cd17d1c28d83b634e2259d9723bc0cf37207a9c3d4cbaa97735e56f012822782e1e50372889744bc11572f859038c83b2fd37800ca78007e78241990600040fed19c9f883f8e107f10c31cfe1892dd41c70fe710f14321f40c2b40092f0009ff06165420410206305112c011a42855a82c30454a5414284f9c34817a726a625a3216894325264b94103080004990d890dea645cb7f6453e0a38f3e6280010592fe090c98808f20359909050f7d3fecfdd0e787bce1ee87ba1f027ff8fb21d00f8560fe28f847c29fc950c80f839086f287fd959831e5232553a27c44858a71ca024cb6a82448a2207912a58a1428274a9e4455a952850a152a5154a4443189aaa2244a94274eaa4451a9e2e444256a4994122a514a06881a8081b721719a422412894b4b4b4b4d4d4c4c4c982851b264c9d292d1d8a409149493934d019b023605de36252acad292d148405414972969a630513265ca9428264b9454a922458a142952a44451898a42454a54912825aa48941255244a2912b338d000962bb62c6fb3f21f5121be2dcddb86559854a93265ca942952a4489122450a952a54a2982c5152854a5494b7418102050a94274f9e3c795b152a514c9c3869d2040aeac9a9e96d514c6f8b62627c5bd4122551514baa508922e06d55a8443159a2c456258ac9db922449f2b62a54a2962831834a1a628011c6025a48a8a431c617658801461848a8818556155430e184127360b8e184165660c18412441821ce106f3ed000040f36b05df035af09c0f3b537dc58a336c7d7ce94f91a9b1a1b366cbe1a23597823b418e1f44520f96ef90620a508aca759795a953046a827a72626a827a726a625a3951d504f4e4d4c4bc6e244234067bc3cb0652d0ea47100cbcc99cf98c142339b2b0c8c59e04d155618234055544fce48cdf9cb5c29f39969059a3457bc78f1e265cdb4024d51cd942b658a46808c46e39962f10cd567ce983133ade0324583320b849122c58c99273f79e2c48993d33420f4607c66aaf8ab5e0448ae9654b0e6ef622c7a5133b51329314b46a827a726a625639a3a69eaa4a993a64e9a3a69eaa4a993a64e9a3afff08f2f323df4c0410f39e4c8e38f38eef8430f3b700cc1071c647fb82106191b5eb051c6156c288147115d0881031e4e8811c41e387861070d32c4c0418a3a6248410685125038a1471d26c89418428f3ef49003093cf820d303093b7e8844194818f1070e7918d18511437cd1f9838c0c0725e4ccd962883f86200be28f21103fd40a826c6887cb0a8fa58e3c7dfc908f1feef1433d7e98c70ff1f8219e1f1e7f58c70fe7f8a11c3ffcfa611c3f84e3876efc908d1f6ad9f9211a3f3ce38766fcb08c1f92f14331bcc8e28757d48182891f2af14324e8fc50ce0fe3fc70881f06f147f1a2264c185c181cd49353185c185c185c185c18dc10eac9a989696908f5e4d414c1d00a61b8a143021b7e4b01bfe58fa7e05886eab3e07043edcde0f92d693ecb00ffc298364eff868dd7f2c40a4070f10993b3b203863b6696c2e0b0508065629901cd0e38468a5c4d322d198bc421d4935313d392b1b8810b1570f05d1af823843c1a00be39b385cb0a61345037744870c585032c746879e20d052b00a1e60d179f370884c98919c0ca8e078c60b813268999a53465c2e0b638c142419632586696335866f0e2466e052cff18c1dbf17e803f5f8fb7cbdd6cb52907fe0081c01fd007ec0179c01d3007bc016dc0da491e187e04023c963e16226d8a8f65f758963c16dd7b71e3b1e41ecb0a40201ed8c3036778600c0f84e181273c9084078e00c1031f78a09e07e699d2f4c0e203951ec8e4814b1ea8e481043c5080072279e091071a79e0d1038b1e48f4c0381ef8c603871ed8c603b91eb8c603d178a0190f14e381613c10e881c2075a00640354f3c00b1e98e681580f44f3c0330f34f3c0320f24f3c0310f14f3c0300fbc7aa0d503ab1e48f5c0a9074a017d3e0fe4e9901e887be04de881503cf089073af1c0261ec8c40397a021f1c023e83cb00fc548e18727fc3087210e5ba27e4b94e18f0f3fbc0f3bf8a0e57da872f43e04df87def750d6c39defe18cefa18b7b20a28736bf831dafc397d7c180d7a1f83a28bd0e007c0e717c0e6c7c0e721e87231e071c1e871afe8638fe0637fe06397f43df863fde063ede8632de86316fc3d4db50c1db90e56bc0f335d4f91aa2f81a869e06109e060c1e863b3080f13050f917607817a07041876f818c6fc18867c1896721cdb350f52bf0f02b64f02b74f915a4fc0a4e9fc28f821a8f820a8f82077f02d59f60e54f50e04b28f3255c7938193c1c350f07cdc3317a38451e0eef4320fb10fef810f2f810e878105078103e78108c0fc2cf83c07b10fa1f5cf11fa4f01f64f90f9a9e83b0e760cd6b20f61a94f11ab0f93758fc9b29fe4d93c7e08fc7608ec7c08d7703f66eb2783749bc9b0ede8d9b6f13c3b751e1db0cbf4d926f63f46d863c9be3b3f1fa3528fc9a115ecd11af46825713c1ab99f26a12783505bc9aa65733c0a729f36696de8cf0cdf8be8c1b5f26ebcb94f1659c2833f5658e3e4c920f83fb2b3fdeca8eb7fa7aab3a6f35c45bd9f05626bcd5d25b29fd14033fd5f453b807d3c58359f360a41e8c030f26f860765700c857f0c157a0c157a0e629307b0af23c05763c056efc04173c4de07b09c25e02105e02072240f211007d04ba8f403e047afc0346ef85ebb7d0f15bc4f82d51fc1638bf65cc6f99e0b738f92d4fbf45e8b700bd16b1d7a24396403ecbd76731e2b3d4f059e07c96329fc5eab324f058a8782c3f3c96151e0b098f25022c4d8f25890f3e7c99337e891499261a9cc16ed65c309618aba92f1078d912c589066f32c0c04d1b366bd45c90060bcd193365c88c1113e6caaa8a6a2a09d4935313d392b1c88409d49353131313264c8a442291482c423d3935312d190548421c423d39ddc4c4c40801c32a331964e0668c9b3151ac5081800a152f4427a627621371c9482c1e452142398d3102fcf9c34f197e3ae1648c1a695c8982f2e58a152e6fd18285c54a91fc62c2bcf0b7c1a25a426aa5356cd27c464680253511cd016fe4e72760e92801a459fb8f46623a2afe474fe3d14f88133ee94f82ff91c4620a185ebe2057201a7a99c24b14a4083283976d5eb279b946a6f1e1894878798668839764a41829f512cc7fb51f2fbb482d4f3b608bdb84f1138ce9041100bf1b22a2d9100979a2a0975c7eaccf847939c14b09ac88e4cb2c2f1df8a5ba387003571858a02d7c94c1f8795db0fb1e10387ccf88ef35f1bd33be57fcde9530dec6864d0dce14e227145c5001c6149d514b1a5e23a93efae8e8e8e8680ce4062fdf4c464c143458c890b15275942f6ba41566beca4b47517ee2c4a3a3e2d1d1cf0f572b90fb23fe190a1718c1cdb2e14e335e69cdd511f063702c6b337c91cb7287c79331717f6a57ebcb1297c61ba5b8c1dedda25ae2c4bcd1850b24e26681dddc1cd266e48b756e8d8f2faef0cc45f0c63c4b5d9c271b727b7ebc99d5019f07a8b4499589242c9202180827602086e1192591646e4900e3136060301c120c07c4a1500a24e6f514800a80a4bc962a1397864003082140040000000000000000080800c23b4018f99633af63a46f39aaf5b34e8b448a3bf198b570af9fe2be8169646ed7dcb8c91940291a0a8c1adb0675693e434d85117a8fc8feb764dc290629ae7ee8594f881b9dd2d74b95e656f6cc9b68eab60a05afa5eb25709fb3e662d3b3b8e2970dcaafa534307ebc54344143977392ded7c1818201f9bf09e991cb795ec2445a3334bc7168f10f698ae02c7d89d2ce7a236a02ae983544051dc1a9e54a08139c0d26f1463f34f321bd05a8bfcae27bcf43cdfb2af4e00ed8233a2eb143fd8ffe8eb6b9433c47d4ea2bdd4859483aeb95667451106562b4fd8d7a04b26ad46faed71cca34998d894c058989a2e969cbf7b10385a16705137a949b0b55f8f1cc45a31e95c510a2ad5921440420134d476f07ee4404770bf460684a92149ae9423c05efb10e821e018a8c6cb40ebc636d96c52f7197a828a45e2e825869febbe3aeffaf293c6cc9a57d4de8d7c60ce70e9379ce747843f472c1bcba5646c83e2b747bc70a3dcd9fb50ed3c601587ab650dc894bf1d84709d9ad1c385246cb2d094c97c0fef06332182288015b0962bfb58774870d6473104a9e984cefc00ecc85288a25826a20ce467ed6fd205d8120a443ebe43517645ec9a7f8771e1b448aba4e395546dc280179052d0173ae29e8c8faf847b5677d91369511cd3fc0e2a58109ea28ca12186ff1e27f17cc5355c8df4f85007ce9fc338e1f32d1af87f5fe0dc151dc53b4880fb40f647e323ffdbc88fa396e4041f058cf79d7c9472cbb34636aefd51b1a4cfac441fa91a1e6664d575467fd31141c37e0bbfcd6701bce22c4d6ff48fec43f8ca97e416fb0a5779ea2ff2e8d1a01e3400e2dc611f5a8e0de60afc6d9cb00a65097aed94471917c7a657ab44ae53d45bd3fe4fc5b6ea4d2bdefb68383caf4e4a72b2b147d3ba470bd2fb5cc6769b789268c720b36ff7d2f50e80b1aff65e8502977af12d127baff7642beaad938c25ea1d79f13ffa1c848a347b018d793cd58cf0f35d3bba2f5dc669112907f7d22fb773113fdf710a257caee8f017d04bfa2ee0283a77aa5446fa6dbbf122bea8b5a73ebc7f40c81b26a79f41abbfda79ea2d67f488abdc24645de611b10350e3f4d7e1edd0e99303bf73f11eb6f089b3eec24ad0399cd575080ba894b2dfb48772ea514320989229932bbd3bf3e24bd960a8763aeb618bdc78fe896e9e7cbcb55ff0d492c80bdf1244f16357cb7f706b283f0d56179d42829f6d898fb1ffe3a730818d17f9fe22990364938290a7a4c0e589181264f272babe873eac67dbb79a3d2148e2850694ea6fda251a336643a3f77cca36e8b93cdf2e11d08bdd8cbbb7c8f692b5e3b462e033c0ede95dadda1d6d7b91022bea5bd2845ca22f99e1d1007566407c926b6cfbd496219f49b632b4f20012798a446d99f0d14a8dee16fadbfafcb214d322b116ef0661f67dc5906bfa0a085738c063737253736a21eefd87f01b323984994c64516b8a905bbdeec4c4e507ef5381677d7bf9d6ace914771d2c32dedc6fbee72f6b5c3109776abd2f91e07dd9f598c63b79e02db891e17759eda2203db39cb19ab7a2270c19e925f87eab5d591a4bf847030c81249be31f4487af00d01841c3abe5e8225c0ed1db496b8ca6cd71d12105f0b5b0bc7b8db0d8eec3bc921a8ab59ef14d6435d8b2e5aa4dd2f80429a48538d13fd1959fa05a32e55cf9c395cd7b41c936d0377cbffbf36d499e440a07b928342d710f67e42b89d2ec5568a9371b0ad308e2e2c3a7e2972a8d47c15427f20d175154e57a55f6b106d28eeae864bab11791a6e242a2f9425993535d8f659f98079b740488aa79a376ebe2780954f3650979c14108f03c78ec85ca3df79f9c4a2a8eb7ae5bd9a0de47d02c5ec4ed1c802ebe94791a0ecdc017f6617e8100fc17a9b0ae8cc90c755e80711e234f462474ce16c6c70d86f515feea8c595bde1aac90e8a5fdb3e3095de75cc2947ad545313db424c6e44fccc73a3d2ba897d42738c08a5bd8f794e1cedcaf51b9a838a58993b8391046d4525f375eabfa7f57b74b66455f9bb4bd2d41d02f9b950407e1cd455f7d9296814cb68a5cc95c03bdf18a9dccc936c027535391118a7ae08801835eeacc891727fb88efb1cfdcc795415248da84e15aa8aad0ca04c5ce268b92e340b0c66438d4acfe3447df8474033bc6a9e7088ef6c69658132ad249636509d72c30b24551a1722995fa1658d08fc1d76c451cb57bb96cd890af483969bf880d4545fe860dd88d0b4eefcbcbf70a11462efedb24fdfb6bde73fbccf6d2ff6e95a97335cdfedbdff7d59b6e3d8ee7bc0522d4ae0dc5377f8da862d361ced0912d076747a374bd38d3f4d194803d63dc78d31e7f698c8ef589f86e8c336a27e4bf74959ffe4749c84073eb846f1ffda5be2b61582f8600c029f6f7cb45b57a3ecfbb7f95b6d33fefc732ae2e2df7c10e60288834ff6e3f4a9a11cfe1ed59bfb2eb8667e92e152fc3b2bbf4d687f4c06991abfcd163dee6922d58410e7e223e9073ec004fb2773e3fa98c9823e66c3feed34637570c94cf3e6a26fc9833530ff3da8f5fc911137694c9195be2b01dd5115176f1da40fa2d11f00eed49f833f3e466158ca03ac4656a03498f49d8f13ff951ab4686e534c942924438cfb9f93357aadcf7b0d98bb482d3a0eed92b710c5ae27c18feeb791775bd3b0b92d25ea066801a5b9b8367f392af720a0787cde08efbf254d9fa303f0743837d9f472f8da6df90b0e961c29b2680d564633a01cfca7704bbf5a58fb9f26bef80f176becb8e5aeebc5c0d75b50af95a7d6c75ec6a5ee4e89f77307f5d58d7bf4b315ce37bf8c2ef6e1cb29e108f9fba6101f1e0b536a93ba80472276bd39ee8b30d98c98f903b7af2b21bbfe0eca211b4b425a3ab121f44f3c17c78b3ff1459a9b744666198d554c5bd71710127d62884601504b39dd947a774b84cc071fbadf1010cb21c68ff476f68184d8fcc5dd0b87accb718e56e5fc8896231fce95939f88fabc967fff92f27d93402f6e7d8ed819f13175ff490ffb153f766fc1ce598ef2b94d8e927ad4514f3ad72a32931c72f7c70acd9f87fe2d9d9931d4f2ed5ea1bb119ee1e6a2bbd620c7c37911a6ed830da5be170a7135164950caf922971d4efafaf82055b42d10b7d1238586358f07d74dc3be755d22798928efe3c6ae7d0cf73c3bc147ffc01bf5ffdb0a04fc2298d68d357872ce18c952e7eeca3ae625f4ee14504cebbbc5a76e28fd85aa646f0291b343710e3e85dd0f8a900f2ccea099028d77b9fc9d3a03f7605335fe4db1dd6f6950b3373577fc842877fe1b38627626dc1ca10112db8e63f0fcac1ffd57059bfd72054d11660d9d3b820b355ba2d1b53e70a0b5812e1efb7d92ef3c3753ab32b9e9d13a9171dc7f96fdab9f25a3e6673665be4753d4c1a803a0bd50ea7cb986b1e8f65f9aaba3d24ed0170fabfc3b97ae18d7ae1ef73b56b55c8db3f47db85458e77af3cc0db65e35b16cbe1faab76669f6f6af25f07d45c0f73f1c129af6f8bbe269b4fb115bd3f58798988e69ebf7701e9f0b81ab77cbb4478f02617d5ae79fe4317ee6027f9cf8197b68a37eb034acf853ddbebd32f682792f819c5b71d9c75486bc64c11ba81f296868dbcb3b4ac2c0426f971f0907e3cbd386d18940fa9539c24dd1219bd0f112da6eb69a4e60c06dba92904020515231b27dbebcf9e224b51b255d87cd4d8fdcdae6a2da4d5f857b83ad892cd2c2177b69e75efd4ec60c566759e74ec63dfcc3deb1f25ed8db78f1fc8517b743e128339ed1aa15ae0bcccb403c23146a8a0ac516fd95a962b740e25e7b0f63c15cf41ddcc5c3916944833cf8a4f014e8543baad27c1955d9c0eabc6d85e25bce9787d1d1abe2589c8c6026d03ce3706effc805a5048769dbe8c978273043e7a3bf64205f6fc214a0c9b293e93eb5ad4ab7607ce49923e9da3f98661732602e64dda95deb350bebedd8edf9ac51462f83892232f377ce259334bf2916d4c56abbef31601b13da8ae181ebd28c47de64086eafe87f8037631359a963cda39abfdcc4e23bfcb1b4f76b91a75ae3ec97f3e091462da793309b32c0c018f3b2326c540df27507b7c63e2aed0f21463f6fc8c34cc2ad097d4e5f5fe16340ed58ea67ca5127f238b4d094a2de5e35e1e3b8ede4f3ecc3e0c4a7d15d2431173073176e27a0b95a7993d90763cac760dcfd5c096557ef89a6e89d4ecf738c27ed251ff84e0fabf08b065fa7918c1c81399d06c2bb79acb563a6a8d239f1c6faf2323fa33ed54ea67dc9a389dd01b3df34772b571416bf1e7fffca22e5d805a1f9081289c5f1bb70bdaed57335ca125846326661d9bc5e918e8c14f367d8995d1c5dd149b855ff8f830c98eeb8735ecc9e9fd2ea0b60979af2e4296feca16482e308f611e5da77e5572d72485c2678e7851ba892ee8c475b90b6f378c7bd88bb79e62ef161aa860259930ef6a810a1be2de27d6686e674b9aba8e3718aefe4c8bc1b5f232e8b787dffa545baac85879b0006f408f34e57c4b5a72dffa03b7752d7390332b162e16fd96ed1385a2219d487cf99c642a82e111f39269f38869bf43581cc81aef939735b80e7a7965b04cea865f74fadf0f9e50df79e0be1e374f0c55449de9ede9eb450d477ad0ded65b27330f8d83cce28cf5d0b9f6c445e18991a0e9ce14d8ad6d3dc4ac996b98b4fd7b639a63b4bde4a8f99235ab52f17a4933bb43a9eb641cedde25eda49e141cb5cd00a5eedda21dd98a082bceffe0666c18002974d6364bb9678beade52caabb6cc9a4375cec13d581fb1b3a5e958e4655cf51d91786be911926b1ab3bd1f0c780323385f18ef68afd2fe48ed17ded3c9a922a392f3cf4f1c5b1f74df8ff7d7ca60487cfeded9283f0b79c36d73936ebb399608e3b61a9fddd5a9bde200cd740fc1025541db7d6fd57df9f98b246d216e1a3f7e16a34af998b81f4800a8143bf6b7153cd8198b0c1fc141a790c1b846e54cab654c59be77598962b25383e7767796c68334f57c26a387003a55430ca7c98bdad52170f7691023af5dddf2d1011797dce62c365e8695c9b8747e3fbef6207ba3ca95eefab35cdc5d693196b75fe379c07cd3d565854367653c93e03843626eea82567fb589ca5fc2fcc016c9c433fb78951e36e49c91c43954709d13759bf390c7c95911a268bf4ed16138e455f4687548d53a03671eb73cdb7d3ae1889572d7b3039efa0e534c391155b7bd3fccbcb41bdee55ad620626b4d2a6b6791c56158e1071c6b3ddcd505b86d79c2765371e0dbbc1b257969c0d6a2adcb754dd3fd36fd073a642aaebc734d43b0ee6728199165951ba2d17478873f896bcdeecbb68cc354c857c7113b31874fca95ffc5a3dc9fbb31f7fed3e53dc73071b78636bd4401f0b49b7e305db05eddd052557759844fd506fc2d197f10e04916d60778bbb11d49923a97fc39cb37aff55aff5058b33b39cb44dbd26e28fc86f9812ac4bb241f1140fb22b5fa876ebc29ec3beadf9ac7d6f5c3f03dc315c47f6b34d8294845fbc662cafd1185a7f8234d5661ae763947e67d6904d4b3b073bb19fb76e4e738af9cf22b9a8196e844b2e8c42df2067c098ba54b2278c555ab1fe18be79ebb56491ba22a427f64fbbdc20f67028ae8d3f1df73d384648e7d20dcfb07bfbe9244dae96ce02af88a1adf6a8d1ee8bacf6e5cb2eb57c04c63490d4710a30caa3c078c79321b75f4de29d13fb077fbba804bfbdb5d7b3079b9d802a36a9c70cf9b2e5e11fa78e15a0367972eb93766ef71cd9c8f66d44669d0f473a14fb77f8026caf05739b4a31df56176c935609b693a809d84aab05da25d4046da442bb57065f63a77b505b2df0ff7bb51786c3c7a24e099e933a5ba0ea9eb57e12d7cc7857beb3032c212fce07313d9c5ddab23f8bb6f631c8ebf1ffd06b2275b5c1a29975c84bead7ad7665af45c3ae0ad8c38bd2e3f3d5edbc5d5617f12174c730b9bd93513673f57cf338c5ceff885e9d0e7d1d959eb7e94d3b3764738e3f5bb56731f0b1491fb4379340c696279e32d3885e2e6d9fe3ab115ddc5923ba9a6b44d39f893377b11181776be2ec9ad946f4b83cebd0f75e90f0be11cd153fafef0f32759f3c0bfefd1bff91fb4ab5778a749fdfa37862745fe94d6da3eaf1a2bfe6d9be486e95e735fd4bdf501ad08122babd1c62b9756cda7070824ffc767dc4db65aa47dfef468d647dcdbf1f0b980e73a838952678a7e77966e8401ad61fe3ebbbebb161dc10fd4b767ab676b7c753487fd45232ec51c5e1e7ff3ad6be0bc922a377097a0de476ff6ab06f0ff9d694557f0633b7005ef37b37bfb0ee65e009a2a78fb79fcfde55094c07f44586ed8dbe77e0f1b3609eafd0fb2aefd78fddeafc3610204f1d70971436c23ffcab7d6a00fccc95a0ac71a0ddbbabc8e2ef0751b12f886ed56a21568f6390ade67b508d39fba4b34df2066ae8d98319430b16f0357134780fa0df47b9615f8b7b0ecc8177fd66ff11d2b51e17e8c0182f2cb0059a979a4ea9f20af9c888f340d9968a573ea7b2f6840e4b30b03acd7d5fa17e9c98fe0772dfc7a01bff9df9f664e5ec1c77248bc6e393a3f0c494f1a4273d101c500577a8bfb798b3f8d07f6d356791a1fedc72ee6aaeffe48b0cf5d79661806dfd136db7f65cd7f7c5d7c3e62bfe5dabc03ff1f3511cf1c3a2a1c4ce975bfd4a107f9cad9992c29634e79388e148dd1f3fe3c873bf48e505c52f73ac3874e5d70a878f202867cc765e396fbfd03682ece6fdee23fb8d769e859e37ce3fabdd3b0b05edcbe6ee66c8441d81a0e8351061d3edb475a04f16f4f97a03f50344149c8425f08fc53837d9bcb25c0663931fcc43cf5df3f24c3e0c3ad62ce82fbc1e61fbc0d95af7c77f059922bce75ff3d282789e923b0cef74cb4fa0f0c8f5fa59f711b6535f50933167edad5382897f42281e3eecba47d765b1c42ef5d3ef6abb6a334204fbaa7cb2baae35c869131a9fd3bca5353e4c6deddbf56f95d9de91c0dec6e04cb70c26ee18fd0cdc9c14755e96ab16cf00872b1f17da77fcd4e4e12416e33b8fb7ef63ad8f16a53db99e142af91d8b051e71c712766dcdca0f83dddb5bfd54298344534f709191b76e744709461cd7074692b45fab279f4f1851db15c02e41587e266d05ad007af8e7e7feb25270f5345d2b8857667c960dc342cb9ac7af48ee79f822d9829faad7aa0e3d52bfeac84de596d8883da583f3c4b6ed37bd95ff5bc0decb916cee08995ef99478c106f40efbefabde7aa3ee6f40f1018d120abb511a5b83d287cccfa86d0eb8feeb01cc5e63b16ee77c0e7337e70499ae60cafddd48ee76a1dd57ac4e23b23ef038507aef70fd8ec5b79b5cf02ff7f1af6bb99ed7ba1cc3f4f1e0adc9fc76b35c91778dd6af30934c80476dd1cfd166709c306f6080fbb301e1e5195fdf9364057a43e17b07e8e51f5efe47268d90637d8991ff2903df2fadacac57b8a6b3d733d39e6bb2b28c6987ba2cf72cfcfe016ad33e3e66b62dc38fea30267b3aff43599e92148b610439357dc3ffe236cc3f3cbf69614ce59574c51eda12b3e8e85d6b04c55011d9de5db0daef71e156e970571b7f1ac5547d30519c1b00ffcb56746dc4575ac6dfe813895b2f06c819c4663b7deae698efefcda947a26241a6bbddfaa77a48dbf53d7b5d1eb57a0bf7cb9c71b069fab21f86a7a29bc67ca766b41ce7b1486d46f4ebd060727b5d8eb98854c0703100e070db09a8da1e525ae1c4d3fb8e8496f4e34bf7037623bf8b9851bf3942e97ff27a3e009be03629d5997489ea0efc4f831cb9ee9b77e2e84ff2adb7f542afebfdd7fbc95bb4fc63ba9ef68b5c9b37b506919b7d835ea0e916d7f1802e06574b11a1fc566a4ff884bf42f7aba55c4584e6570bb98a094d3cb3e64e14c68be613237d654cb1de801ef72dbfcb850e8d13b09d73a1a3e30004592937c0893aa3ca173a58a6269b43383d33a179ff17eab3bbe45164ae89ef9db7b2088d4cdcb1ee289684c83a5fa2b2e0aba775a1d993119efb9dffebc461fde1ff8ff577c83e6a4f3959c004585fdb1a57e95183cb0c87eb399dcd9a32c03663bbbe0876385c5adf58fb4a5ceaef6879de94ab065d2da9c5b5779a937ebec147224f52973766bf76d704aecf3b2e3161db6b9c3346449fe1ae417d95f7a59c606c5cdca3db5cf3e25abb160fb3a983c5861c7622ed495c28343f9671074f3aa59fe285827c2c99fd04f63f323e7c178bbffa1b48d6b640fdc608764ae0047ac3383a28d2c844b6f26c6d761d390899cbaa2a9c8d9ef9f7f07c3ffe9cce6ea1b77da3cbd5c7bb7a4af47e96dfd78df88b2b1f04cdd49fc38103b014827694a6cee31ce7aeb0c13bedd429feea6ca1e74c218ae71177a3d44dbaf7f2e7f54e13c618d38cb03f7e4c3e511996a59a99f15c1e4efe461dd2d39ada32fc95c952bf1ec6cba4df7f1b03e12a27347efeef78f9a9fa561d67297e3ff4800b1bf47ed6813d3cdaf48daf9986352fb651b511d0c9554be8a80f9f6df30170663ce0f5b791eead9f9bd70715a50d46eccb95b8f9c6d4ea66ac0ffb65dce74f133e623f3835883a02c6e496c613ce21775db4dedd977f2327bc39d0e1fcd980c19f865e8d48e6e8d2a572f321f344b6ae3de344973fa8166a1a3f133bbe0eee7de7ad4f494e12d9cfe28acb15bf32ee6a014fc52f517d08308ffabd365ea57e883c7524e0015d171da039e8fa40b8f474d8c335f9d9f2dff09aad5f13fae8cfcd76e4daf538df7e87966b175798462ae55f39f67086e3ee7dd0ebd40c0e5ddaccf3e427c34337338919f2337f669873545c196acf7e1878b2be3d3bdddf3e637d6372d147f704f11b4accfcb2f0e0148e9c3f717fc2af3bc06be7f5df0d7e01e7e84fb0c0d851cea9a3be141c34980a9eb8652b68b963c1f41664be0b4e9693b0721f83b7be97521cfc5884e39872b112d9dbb32dc67ca2e57a087fb22c2d3d85ef89732ddbe8f39ae9a7f6affed67042e8b730e70b76c493cb488f1ee98ba1df38d73fa56bfcd9147800c5da0f6d5f607cf3c97971981e957c3c9978892aee639473df6842b17f2f5f0d3e228afd38a90ffd1dd70ec93add94fa13ded1f74f2f573d7f2d7276beb70b77a5ff423ffcf6f8f065f7cf65b5830d3d2c619319cf36f940c5f741a4d6bb42b33bfe4396ce3bfe9aa73ae1fc647c9a7eb1fb22763a5d2395e5bd30897a5c25bd055e318dba5c2fc122de3195fa5d90c432de32bd1a2e91c652de37412deecabc4935fc844bc617f51f306d6ad7aafc924e7f699d7391a1ffde32d7a243ff392df3f8a5769d30622a26aba0bafc8b2759d3cb275c766dfeb31fdfd6ed65dac8d0f5a229a207c5aed961899f6550d2ffe70bde21d7d1b83aee18c2d557669162491673747dd038576d72e7b7fdf7acea7e244364371b0294473bbee338649de721769022ac11ed9e69d199cb4f4c7e3f4c27e8a736101b9ca56b8c9e6ac0b7565f79dd7bca3d5175e91555c5cac88ceb0adcd569f7d4ba005af6b39791bef401e9b28193e292c951ca75de14f53f24c80585d48db496a74d7d630e33f24ecf853ea1eaf3b1d5957623559ed1b46cf97cf8a2e4ded6f3d8a34fac06dc4fd607eea756836e93eb83b7d39541f7413ce9b3447bf8cfa2bbf504ee6d262b036e933a3289879482dd2780a1986310db9ddff3e43ede0b3bb5941a75281ffc6cbac505b9275df4405ac68b580d4d603f7430b6db29e0523dad22602f551329da8adda0d5ff8fe3af1c7c43db08f45b2cfdf6855e3959cdebbecf73979f143bbede9f7e9cb0473035e16bc765d2bcbed3d748c95576a94eccee8597d4c60761c4a7c8974036748f05d40985c4c3b799bb83ab682462ef7de23f3f2bd3b78fae8a55e8a4ccf716dd00f94ee773a1e36d7ce0785e4ce1c684cf920a837177b72170feaa327fd7086bafae5c6bef71663f38a35fffe88154f4b7ed862b47d5e9bd06be830d88f1bec5d0a6559eac391d349c228e630296627f64f68d063d8ebcfd25622f3cce2b9c6cc84eef19bfe7649feaa1e54f2fc4167c6ef334fd3590b3f5855e4f4798aee33d9700a5b103a59b166aa6097294519d02c2bdd4ce9d2246f07cd407a8bb9bb9483ca9ff2e75a4dcccb6db6bf4d97e17ad107ad4c5fad610baf54f7279e62e0bfd7d1ca213642d8e917fb9f5748c90236293d0853f58f0066891e390f20affae8036615f7fc6c4a6df3f74e81d8e93b15b41fee84df41f22fa581641faff8d149b3d5fee24d6cbb47c5adb6bd9f07507848ec37c9748c6e70d29598d55ece67ea56fe68ad40da0592e8047687ec5aebfbaf56c50c57c8943b71ffad01c2a63eec6022f87d2ec90f79235c9411f5adfead9922855f1fa76aed5271667c1255fb8c76b911a5d157f73cc4bdcea5c0db28f5c693eb3b3372568e1337dd37449aef25b17fbfa37d158d2ec7a313fe99371304e3465473a0e77890dbaa2d99cbff56d790919f8cc3ef0547228c976b7b5eca007ae7282572d03cf32cdedea381c279b145715311bf646153d4f50e3bea28ce098bc0c99eaab4ebdd9e69cabb7d9812dfa475875aabd3523f7756d6acd674b50c1dcb66f54ef31883f13957e9fbeb01d5d234392f65369eef0dcb468ffc79669bec92797f9fb9b6006f197f5d72feec8a3d34e28587d3b514c9d3cb2c6c2863ef68c57cdb2bae1dbfef0d1a20ade394e9cf68a142d158b48ab37f4a6ebcec2fac9cc243a07dc07bdf4923b09650e34f17399c8a0de182fbbe39610d2f3d42576ffac2a805abb6db132af25b7b2600d71ef34abfb25c9006a73e63e6d75fdc2fdb4ad5f8fd695f609cbae99bbdf7c054f0a2a61bac57adc366bbdb5776cb2e7e9b4dd7cd6dc93e33b08442a8946844a2f6f2bf5ca5762e5f0b66f464f3265e07dbf35763ffbee0ecd160df7ec4014fa11d99aad8bad976779ede43a94e9193e6f1d63b2065db194255d5845a65cd77ef23a28dfbc3f5c0a58b7fa8f986605e7d724e8d1f750d2f96a5d4acb6c2a3fbcac8581af19447cb30c7a53bfadd3c23aa8a767634d1a7daf64760fa996e11c8514577e99c4c47d439cca7f18a9fa6bb08cf4f7ae4373a521b20ad2a758bcc9bdc7da60d6f5b11fe3d45d1872352f82b8e3d374fd709b6b58e65eec7687f2e00b46b1bd6718b212fd2d4313b52ceaefd4933dec6a5f6cc82cdd9d745a5666159ad072e966978c8d499afbb37845eb0e8e6c7c840994ac29665aeeead0bfbb4889e05a99336961a8e9dddba612af0390c6d5c84ce0c30663a6c72511d67b877fe7426b14f76514473dadf27660fcf3fca6138db501edd16c4a82eee6897b0e0f8510e338759c76387137eb3a4de6c0fc586bc44e5f17f729f99a86e99a5c864e1fced75d468f1adb325b5daf7dc22a859d64f58dd1c910377299e9073c5d9a2bcdd57d1bb0a5e15ad7ca6db06536fb6130947ccf79055e4b8dc67d7d810b335e9836fe89f8400d82cbf81d70c382d9434f565aac874af0fdb932d88b9884e81287360393a4da7a0d43c38617c2ab6001687134f07a7c6db0ba3749e4f1372c7f90cc22b32d2279886f7a62234fb6d2b7b53e6d867d2f9099f119607d2caf3dbd878b827da6c7e223997485fdfa08c72e160a779210ce09c1db32d617d90dfd887ce8a6720bdc8c7c4cf2f12d8d02b73d14817ee2cedfadb9cc73cb082147ef39108495034dec0c97115b6d3f967e9850ebffbe9926337de86c40e7cfdd1923c3d3cb715f1837fbfcd26633cbd688efbf9e9671f0ddb802f3fa22d87c69ee8cbf6a9d6ddd91e1dd33fd0fc35590de4284d8b01a75715b576b6331aaf867104d73d8b7eea3767eadc9357f98fdb26d56feb42f26c43931e41d7fb4d0ca52cc762e36f89aff51c784bf56d3dd8d8cb97aa611dbf43a9914380cc5e19b61cc93fa6179b07c4da76987792c546ad38f6894db8fc93b1b3af6c67d1cd55f29b3a2ad87f57428a94556b7a2a3840b8e7361381ef69e1efd1c9e3fdb3e092b1b7302e9b49c07f8feddf1ad8515c26458cb7879bdf6f4686fcb4a881816eaa0bb75b6ab6ea92bd15cb890f48210b5db62f0db66ad2e77ab53aecf6c9d956655b7fc9e31b26919f2cbe5b6fc05ff16d2519e3133df9ff6f06bf48dd7e5e60adfc69f91776c3d8a838d310ae81097693b0b8bbbfb63f45c5f83b8b9859a07f82e59742bcf23797dd9f92d09edf35370e7e2d0796fef2c65d478330545606c4dc2ee11425ed63628f60659e8961b5cdbe0d2c12f86197559182a326415fe03cb441419910b5f41b33ae8bcb5e7d3b056e4c536c2e4f7db49393533a8aecda699fdad1f93a6c505a6d108f4a22f3b71626344d1d348503c46799e1e005fd9cce5f3179b41a37fa790009fcb41e0ebaee9a0236164da181ac09120c06df4e848cfe784597f4024870d5bc6eb3c061c742b348155be192a13ca6b3c3896d870b309b05b3691d6e637c2217371bfb3fa5816a81c3ebab936933af4fb0bbfbf0f64a439c3907ddbf98af1a80fe46eadec35ce62e37e5b6f631edb81e20fdbe0761adf937065501fb40b8cf74b5d70ed7393b4343ba015af74aab3953723cfd538e7eb410671fb35616904d255772034d10f8a858dcfa870820a865bc5c1f2f6812e79db3355368ebabbaea0095f104262039c08bef9cd8c3f63c590b995f1abf936d366cdde0f8493ae2f139a09de829203bd8678ebd354ccb305c9717354397bbd63d398dd983945c81f6384f21b32d25f18d144b1718f5e77072c4ec3dc0fa851b08bde3a3386b37a00390d858826b870ef960a90f352557db7c55abdd144820b5e25b54543aa6c84798e42f5755e75d2f4ce8e61687590e77c527b70c5a3be7bceacf80aa7828fc238cb2cd41868fdabcd793d49c6235b984b6460fbbed299d74be2ff75183ed9bd1a697797600c97a163daadbafeb6ab53c4b3a0d43f0825d7f91bc839018678b32d1db89972e9b62bd6b2079684b33361a87145099fdee8c33a9aea91911e9bcdd25887ee0a6966033b00b7991fb0cf52d4011d6829bcc753e4e68d46b18583f8035d62d8ba1160657beac42f27a7183b22dccb3cc2612405416345971a29a8589b59623ab705ab6dad002fd0dce2a334b577d92dc53145d910733c55e86d1d83ed9184dac99b7ceb250018a6b0cebfb7e5913bb3e4e64054b56e24e96a8b5e38d8765200fd299c93eb69fd5df7431bc59fcc2ac8b27a53e9db8311fe28091ecc5ae1a65cecc28d09b98c6d44f97deca860db528ad828098c992edcb3707278999fc0cd6fd1dd4853f890e6ad99cbbe4a1c3d18cd94daeb537455e3d52ecf14dffabce9d9842914d0c4bb296c6e9b29285dd3f7835af6e9adca23019bdfa573bdf57a846224fe979c0c5e0449be08f860b3146c3b9fd611dca7a6d5ac615e27414fcb8372803fc60348eccfaf88f3f1c79ce2e3bc80b9c75bf6583d5da6753c1c5ec9246f68d33c349f7f6692d66c23ffc4dd59ce7eeb86b92868b8b56d95a5b420686713ef77e47a5b16d3cdd61ffa3dbe1cae90623b7dad72772ac4b3864edc9fe0782d1a5a63bb63f76857398d702d457b1f5e0ec5707c67a0bb91982403d5589dcbfc11f91d77d927d6002de39577384a029b84ea1fcf2fac3e10a935d0cc1e1230ef425cb44dacbc441f5d828d86d741b65d882206e09a82ca5ed89b2db6ac43b42467da7849a4144e16575c6cb8b24857e7fa42e6627aefe7ea197df15be291f5886febcbc38e5a8a2a517e93eaabf83e7b808887a1577c7724eda9c4de978e62f2bb3bf05f7e671f9462ebf4b5b0cdf99c51ea6ddd618c98ccedb6f696c1ec08b795b6297769a196a184dfd5dd8e48576aa2862e0ddb14cc85c1adfedc26e31db630fc71b0e51722be52c405d89d931e7898d3e7d3e774bc621c7f3ec57162fee5ff487e32bcb370789cfa35b1f95a1f8c2171ad53a5944e9357e4e4f54503dafe72b20f87633b74b9816c57f874a944482e239be6814647055751c7e121ff2db9306e9a1c4889d3d465583ca782782afbeec21771827bf571c94cf2424bc2637a7be70115b54916c2b989d6128383892a75e083d775e0ab1e09ecae7578cf5fd2b3daea37d09775e5af5cab467794e8fc6298819bfe17c7d9ccf3cbcc2c84e18f262c28eb60372ef515b4205d3fec599eb0977507a7943b3d16339888d202e5e0764f83d20e795a8cffecc5511e04b31548d4b3da474aaeb00fb5d8e505e7c32ab9d2c04e261e3c6eb90b12478830ac53e47aa1ec798ce0d1d7c039d253ac90196c117bcc540908e5d597c90ad0dd8565bb2bd7967cf740e44b007fb8574507318bb6cb12e499c75faa0e18918a72f60e9393dc0224262ec5854cb9318f18f64757a72f8ca2f2203df46f46a97024a9b5e9b3e3f650f1ef03226d36fe330f9dac7e1706102f6027067ff3c82e82fd32484a0c899dc1ae27d36e1527f4c2d0b99694384ba4888dabfb0ffafc27cef0d6ae870bd3f529ba69e18ead71dde21a3b08f42a761e801a436265108fa0fc4e824eb6ec6585a5c674b4ce0202fa32e1c3d3b1f715a01b4c9803fe9deaea33bce45aa22ebabf7b9977ae218b2d7c17c7dc16aaeee2ad48c88e7e75c4fd625a34e92b2304fe025414717c5270d7646143ab3a11564f72f67aa953c42b69f99ddc8724eb0b8e74e22b8739841eec54e94157e4a0fbdbb81208ec90942846092adc135c488449817a4553b962def1d8fad89cbc8fe6e2c320b551f480813c2cc801b2cef2a8207025dda59af36ddb604d31e1f3425669e10c4fdb2e4293b403706169ef7fc3b0b6c2b0d525cf5bf522b5b77e2fe87064441aaf884b43895e99c87a514c4cfdcc5ccae3be7c0f589c389c6886bea9a792f96a3affe189e169df778889afee4a171d5a4f0d608c3ef606d9bfee7a2620da05613831d7c0fa43f31b8451026f1260e3b9496fa0049f094831ef63e0db7af304a86f5dcc4aedc510e3d13c7fb72bbfaaf47eb01b1630df83fdd395c761ec31bda853d89b807d8f726c9c92dd2d8233317b17a7bd5cbb057cb8c6f73414f7445b9fa9b3e8bc8d00ba6c82242db911a165c87fac9bd2149733174d17fbe9adee61f357af056c3304c70b9c07351c8bd7accfa34238eaa3e668a68f0d1d4b5cc55b5cca1900ad9970385a82630dbf93e11384c9fa696374a50ccc3d84d077d7b494fcdd949e40f58a7e820cee19df3bde7a92edda49896fd8814d350c3f401fade07b7e3221cb7ad130d010f3e61bc4ab87b8aaa1d7052e0e82a480e743b61711e6777e147ca723481e34ff1249e97cfa9be47354ee793089a691859bdafed990bdb3b417863a52ed51290ff63f5b6a40954612f886063e26c29f01b39d007e8577e641ec9c01ba1e80f0a36eaaca5b7105e27e780059810838bfb28614b007e3709549336ea3c7b72b2e08c713fe730b307efd4c6cd5254f98a7ca9c15e37bf2fa46587e9c79a05d0cfb7200181c31ae2ade030488dff6314e2798f89befc58a0271b39a41006f26cf00f1f9e2c7ef5340162c36e19c4c3b0768a3be394f9688a35dcbe3b1d07bcbe853d8e5085e1a09d3b8e2dd51755beb6fee893ef31a9d7179eb00554efd68dfa1194ffc8fc242cf39cc649eff7a159db0ef09e1bfc2668cb6dee7609fc80655c803984f89e354bc43d97ded7702cfd1380e406adf1d03d9bfcf98e75463b0fad0df1847297d4f80da527e0af0b0b30d0732b6338f2adf360f7db302119b7e167efad9b61220bf20e0744088b11e5e5617a151798f49f6f77d966be034dcf7b5d31ef93b265783c13ccfcf5734f6f6fe44cd825d42fc1428ae23d1dc879eb74fbe59d8b7430476e698fc302755faebd061fc17c2fc297ba7aedab5e92e0cb85a05aca271c46b260af60e61fec30012c4847bdef13caf95d2c2be0b95ecded0f45ef1ef17e1e197eb3a139c6929885ce179b527814ba3ff379d2e1e302ed590a0d93e1c20173ec7a03a84de29b5f8c4a73c7f4c1a38c9a4fd2ae1855edac149efe0ab3d318c0b77c7939be181e0a936beb4c660939e0e6055a9a7219ac12e25f69437ce5605c47b8033ebbab4dcfd3ef1177ac6e0a95f61a61514b5c19e14e09ef7d9eee983ba609d65e675bd95220d63089ec9e01f477215f52512cfc9da763d71a8f6964504dfc850270505aedefcb8f5a38611cd7e8c3896fe35a0a0c8d53f5c00528d2cd3b8c9becedd4a6f684d4060062be70e0865a4dd8f62dcbd70d822b5fb94977ec9d38655aee132b5007bc04fffa6b53a3e6512e77d3069f287b465898d05e073ac7fe9b62b521fa711e0324f9336f61bf71aea74fe177b6d33c13dee458aa997bbf44138f1efdfcfeca62725b67ae95321cddc682b0c73b0c08772dbe1ce607e305b5e4e6ed04b79853423cd731eecf90a7774e40fdd7d3b2cb03c0c20cffdd9e86a6cc6e93d837a61c568e508ec477f9698af8ffda1a0ac97db4e27fe95bf70136675e5a95d26246d3eba9dc7847e25b85eb24cc974ddb0f86795ab9f309ca50adfe37dfc854f98e6d3b0436d04cdaf5e1bb1c8f465f759a23f1f54493f5866cf27e91fa62890688fc08077f849fa015e3951bcebb4c36b846ab626a0fc2e03555d9332675484777d01f36fce6dec4fa7de599a8ab51b299e0d807c4483a65b90b347371ab1c853096b27eaae1990dc2e60ee29e1f2d59e8a61ddf2760ac17a7c2c44f76f86625863f4f902249e297cdb11707c68c3d9224dc56c95e87c8f40f80c01e34ae7ce7d45f1cd0d766361ffd7a5888f6ac462ac02ec5f00886f0317cd49145ea268ee7953db8d74f0fb7991f24802f9a901f6a3cef5fc8369b94750d0d10e513b6bc0ba618132c672dac63d0a9dba14feb7d1e6128cfe64285ccea472d082e815e5d9d30fefaf625c323e5351bf2ce81e47c13464036da9e568b332f5a6798a2c9ba8d8b44135c900d29cc8e55321353cd642ec23985db97472f122e60c04f6bb16dc170e4777bd8c730e2ef82700ee5700c7fb985b9e5aba1ffff48f3bceff2d98f14ed0f2bf50ed4b82e49f1d7c2735d0cf724e386ca9f0bea0c97989a26b07f00721300e59ceb2b58c8f1d2eef0a58ff21607bf938f1c3a4c7cd4ee4f85ff623c1a5461ee42f718831e6c5a02726ecdaef11df341e1576a0466cdce72fb3b638f363c11dfd0f08dbcfeb92839ff5522f04d2bb47d0dd979cc61806ab5daec8fcb3df4e64c85068fa63153ed5f57d21db4ed59266d0324eabf0749e64ece234861866ac323156efd66ceddf55742e13d9c9f47fa09d94fa0774a1f7d4afd34e6fb6210bdf99e7cdf81a47502245290a84198841333a421393a5c9c37aaab64c75358d34a425ab677e92b9c74f99e69f34ca662a80596ac0ba71d96e10816b17a6df751cd224f847702cad059fcaa0f598df8e9c2f8ea432e671984594baabc7bf9cce0ba43b3bf2f65e82bbc53d0e1b5e59000834f2f2eb03c3adec4f2cd53c926fcdc0ba8e7c34f0ad5c0b20f287ee012e7d54d9afd068af00fb1c0586958c332ebb3419298834866f7dd43fb114d0c3015bf65d226d3da0bed4f1635f2ff1802393a645c0cefff33988dd7bf6c8560d2afc5606f8eb3c6fe1dd6f41ddd70bf2ce3950fc81e0f20972d2e348d7ba1ce9f5f2a2cddf045ccf05e86f528ef87e69e5cf99da0b02daee5ec03d8a016f86e38ac6297aff55a47ad1d7d5fb7ec6b045fbd1011d474fa0b4f780f991c7dd47139dfda7d4ff8d5072c002ce3b065a7777f93f2b1af86a006f7c05ca8c5ea5750bbdb703e0351d82e96dc18d4f944e8e126aea1d41ddfa07d88c4ba039bb71da6649778b0319d9b8d75d33b8f26fe1a71300db7707ddf5f4a0754b044316f2f13e279a5c3c88741f82f6f93cde8b4a877300b5bcba749f91f6dfffbfbf04c4fddf939f179b2e4bba7e4ba9afef090a2f1ac0ea0a9fc6ee42fd8e8a863b31b0c3073018f56b71a0a07e2482e2953d958f8846bf249a1f55a0b84601f8e977d2fd9cf01511db5b303edb6ff19f4de86418459e1d1454b325e03b3071d57b888a7c8074cbc684bc471428f8e981ee9fe28edf1b55ee011a47f5fe5dc1f0328a6fdb62d0d7cb9cbdc2070617ba9eeb7bb98930f4a57ffd4d82c00d07c6af04587e370e74cb50fd52a5c3ef84c68e5b305aafc73221d298b490dfd0c7b90308e5f61c7a9c0b900e52a0864a00de09dcf53920f6f3cfb61f24c7ca82c9ff4362def45c1ddd81f733237578de6184c3cb16898fda31b0ef8ea1f50b8978fd0d20aa7df5448ee1c221966714e471775df7cd966402a246dff04fbfe110d8be85c598df9febbdd7653f9cfd1eb514edc50403800acec03127ba21b09a0d2a420735cf4fdb6b9d4cacd1b8a5791938899ac699bdd87676a5d60c4b596d517595e4828e866b5d326dcf97555fa5718a0a39b3fbda83c779e25bdf912ff65f98355d963c177b3e2f03973151de4e68ce8e6beddefc73d3e3f2d254cbf5f8bf912da2ecf5e6bd198ac926e2620922159607f3e1df79f37592bb00dc13803f60d8f31d110fcec15adc4bb08067bc763e8559abe506f7d4bc3ca8ea6e4d877ae6b5373e1360eebfdb0ab03987ec4f75dfaeb547ff84ae79e51a648badeb5ca9c60e01b6eb9c51a691ac18face9569e0106c8bce59651acb88ade39c92c60e41b6e99d53a6918c987ace2b69ec28689b9e73651aca0aac9df79bb25980ac7747f734f34b441c61639437a4db9e6aeafa8ffb5aa93b8f304678aa6179d587a626a4a82e888b0e08e2dc49cde093ccfb3bad5dc5122131a9d7a54a62045b9d8052dfd351be0770b6be012de547ac6b4b0b313d3495418692c687d02f4df1039ad9d08bb01cf9b2c02fc7f3b7c1e2381cd8fe5fd7ff82c9e0e4f33fec07eb3dbfd7fcfa38ec36c7b8779b5a733a7e83de629093497027e79b58dc786b077c3dea4479afd9c579f63eb818609b71fab28bf4002ed696270f7d5a84d3b644bf883f7c3bf78c6b26a43116cc9800d6dd74f61e38df1cbe0093a03fbdfc01d94e27fadf0dadf924e6f0799075fbd77b325f56eac59e47105d007c63fb78721f3dee6dd7d32b036cd366a7f5fdb52e8f2c5d0de1017861d7d2211952d78be7cbaaf5343ba5fe5abc6c0eb2e8696bd45a60c31084f274fa7337787f9c820f7fc43a12f016682f5557c0f63476d862c25b9a75adb10336f6d265bf26ce37a8751ddcbd76d7d15c17d4a79a69af2acc0573ecb47ecebfbd89b76e78de5d832fb152a88d26fe4f6eb0d686a2f5bf3ef2867602946adf5fab20766f95951ace88b679800d4f54e96717d8782bc0cdaf2132c85d720ba0becb037e289f6c6960e8989ce54fc5f6ddd10d84abbfa38bfc29248df2fd2c6111ac71e7631e08f6408e7cdf24ce4f2925fdad19771da7967ee9cb6ba367b241d8b51fd1a2a5032ef0009cd481af1ce2fa489b725dfe74c1a9c0bd56c935bfde4e06f3dc3798b70e13e602b3eeecc5ea1b1ef96c4deff0071a22edefbc21e3edef93d73fc392e52a7ee7e42c8f24e6add5d0ce1a01b17c2fe541f439436ed77fab4bd48411cb37e41f1ac87bdf7eeca281d381e0beb3e73fe575b0fd0eb692999ed649bd72ec7e25586d54d742991bd73508008ff4bc22bbfdeb2a59494ed73318f3371bf4b31eeb79fedb5e7ffb3172a90f3dbd5e1237e091fe6ccb28a38ea34ba1f9089693cc4c5a3e4ae11b9c38617e1e2cfdd7230d2478a9c716690c3a768867151411afef62bfe1cd5048e0de5d7a0bc8900ff3a23242ce82656d8ef9abe81c9ccf1b2d83794558a7d5a284cff17da609fe83ac861d426d8c1b6c5b499ae3bf949fae5dfdfe7641eae4a0dff0d6f68398f50cc27e2b9c3fc7eea37d387954dbc4f2cc88f35a36938b76c5753653b31739db3dfdefa7b05d4f547ac9133ccaaddc96536da84e0fc4d3e242929bdc0c4e126e966e5b3d28e06a61fb8bedc55cba9977dfbe570f89d65e99f1499aed3860b9e92a1fba4de4f7040a59f783a00875e085f8034ae13f193ca435e8081c7a780c49b80d779a1be4da6c68ef8da4636ad07e36cb37eedf7971e576bff00ffbc116aa5268e5f4e141bd8fcaf0fba8ea38c8fa9a0b7b5aa633d762b3038494db3dbf3e40e35264c275b0ca167c7581fde78ae9e11982bf5042b11d866f04e23a2f66ed1ef64fd694c702e5eb32af30b0355f9b99f9a6d5320337502bd54da3be5bb60874f226a232788e1d641e32a8b8553bf9f91fee39f37937a87849bbef2975ff1445bc76efcec13b7658b59ba8867dd5eb166d10f3a18763e14ad6b42b697b34a6acc225c5fa713493a5bd316f1f370b25e7e11d61f655c54ef2ff65899792d10b80b595d096de72a30b1db3041b16dc5f9f09e8aff3b7a9439a1ac00fdf8b454e5f4531673fab369c50a10e659178401fe37dae191b71b6f78d68fc5a99730d26381b10f9ab5fb76ff8eeb3fab45cd846fafa0eeb93a70c3426ce2c335f6887c87eeaef6ba43d6fd4d6af85dfa5735f7973f029e354f27f166f5e77d7ac67bdcc76c79c7ffa2feeb3affedc7abfef3f3696dd505b57b70f0e97d3dc1e16ee4427eb6c203976d7ae123e5d8fdbd546bcdecc383d6d7243f77162cb6f4f0cff2f6f7f7519c0b1cdedc9e9115c265b7fad26c7184e0c50bdf915d0765d66db74c2981787fe56032287b3d4d7028eb5d56a8edf803972b73929ba85012c43ec93fb00f6c4f195bfd9769a64bda10e1e8c102eeb84568e4b4389b1b87f94957837e57ef2c369284b03fd2e934b6823d145be18f277a5bdb7dbf34c4a610786f5570694fb01e8ed6faffc835ac1bdff85583d8636ff17d6074211e40f010564d180e3cfb499719040fc8901f1bd7160469dc23d032ece2cefa30d1e093c049f9f4f437ac6d6161a0ffcf67d1c730ff75fdf1e78710ce48238902f91a5acf04bb0dbce80668f647e09986055fcc9db3491b7e69dba5dc5e4adb3e177e480668777448e194b73f23acc8b7928de9a86622b46a8e167909704a18533d10180432f3fc39b259379483d9b878f90ce26c76137dc9d41ccc642c13b550f8fc9a1ddeb879f4d0bfa0fb18a18d617cb3bed01d8bf6acf17edb05bca503374e9d5657936984dccf7daf9a35c02fb6f60ff07e227e99d368c16aca5b7e0221376bb11786e287dc6c41599cf2c51fe9f1573d8b44ebc39ed8061eb54eb4220bece0667936230dfb3079c1d460de60c1186d7b185da67bb814fa506745374a813fb9217f689ff86ec61eb560f0dbba1dc463ac83da73493f5323de08c1ac81369abd8c14ca2fd889f950db4c386f0fe2f79dc1cdfd98d928f3ee7c52bc4d8e506f9cf90a54cdc048d7b7c6bc8483a74cf47a0cdc09b9a357ed206d909d7d7847078a40ab567d4e0bfd9104b7940b81a56e8105ee2b877c447c640f3be1066ce1873669878d7d8330f78617b6d1ba8f7e61837538df9210881978c812b43c1829875d4b5d3d33700f15ee64b4c41e79c768fe0f3d3103b6d4c786456c897c2a556d0a3553944b98e1af3f4d66cef4c18fa0c29d0e9a8f223d61286bd93dde01cfc30720cb9c003da51063bc4cbf3e0b3acd160fc0a9db4fdea58cf2621c8ded8e07628679af78a4187c81c581e0bd6db6cb1a34d386f584187caf2bbda4ab837a803379bc6b0b66f841aed659257bd468a2d3c15d47b44397004183c1887367c0dd60c1df89f0dbbf11430435d808b39d0fb3bf00d75f8a695b3fcabca4273c78807d1641c378e4eb6e107dd215ef01013ec106e648556ba25c67a113c96256e293aa8df5b8f5aef02ff216110bff668db5eb01d5f201ab3621a93785f4e8f5d5137b71d1e980393cc9812dbcd763d76f0eb73bf3be4383b4e72b6dc80f29cd743d92e18e33fe588386bc7a2ac480732b7f4285b9a61f8c38b03ddc3d2a98b5f92bd0a07cbbbc20d39c175665647c84d23f07c9f99e605f498559427b0e5dfbbaa03344b5885b519e0305ede40fb9a0b776517ccee15c3ef6d404e9231328b356033f7065d4016b3470c6bfb520e38891438fd153b0c06e6e63454af5b05be7c238ffb3ad49d56ca29a4855ebf6e60636390d52b6c6bb2300f3f6507b625dc0a878c7809ce0927ecc020dfe1c37783642093def0cd11856ff0b2be230e64094838989bed460d78529b91235723ea37ab8007c5f3ac8c371c978c528e3e209f29629393467a6f2563ba5135e4daaffa4bc0c47339cc77e4ca94fd24cf3b56da73c30c5c444db616637caddbd407c2e9b566e6be6e413930e445782fdebc9fab0fcd868ecc6362faf91aec1fa5b8d9dadebc92cf9808ff3183545086788978b68cce56a6d96b5b115fb6d5de629989652bfd3f9ea47a111b863216d26c6e1e33c6c9fc4c4d1f2ed0c0b263ac604f57b16e9add9e743b27e09854adc7f24a3d03baf5155eb047e33cf34bbab3c5c0a350cba2aebffdd4947ec7a9e71ee39962acc6bd5b6ccf53acdcd11e3f3fca814b3bb26e5063c78dac5c1c2766469dc2199be26ec33ae43a2ad50e4df61b39b23cc60c9c9e378d7a793e2d4c53bf7cc98911de9110c99705f5d096bf1204e85a67a09e8d21677b5112bfae4c706b3d0f56eee8255be85ab0c0b22c326024dbb870b059aae54df60cbd3303b0f6d3d1dd481dd93212cd0b41d793404fc38237a48469e66f61be4bca73a057e9b4cfa13c9ec5f04bc6855c684ad1cba801ef1bcd9ee326603c75fed727e8e59fc50743f8352808b791c2d4dbca2235502de98674d8974b0f834f4c1c3208ff8d5c5197cf9b202b468d7ff20cb6e2021c3696184225e2877a8e177b64b8e202de6f82bc960ae4467b50bf880cc5b678027fc01da9ff3b435dbf1a753bde186b28e273ba29433ae81558a0dfc74174a3b040365d82bf532a6d905bac43c2a9e348d0a56f80e747b0bbc21096a6926d496bb85955cae9246983347a1fc63d68808a6f8e69baa67989f2b3ee63d6f34fb0fc0c5e6b12d8bf277f179d1d19fc018a4a19cfd1147f4f587c29348ceb59c87ba03460656880a79009fac83961da45c8fe520a3b641387b055e22ff6c27b7f33316769dc41585539323ae6803083778c10342b943f998958e8419b92016d70a339619567d45a3960eaddb732e63273ec78d2afdced112f9fa2b471a99bef829afb104cda44f278ec34c3ab2232c8cc3597c1dd752911b6dba30a3db4bce7cbd93ff2fbe8d4533746db228a7798d0b920da50e337bbdc219b76cbd212d354e99d59716f00157e3f44c406756e4005c6e3d4206cfd85911fff29c276a245ce65a747664043b150c638d0bc090afcffba8c201b312a60e137d54d8206595fce3f3f82783133ae63a3c9ebbdc86330c1a1ea106e5de6a96526a4d3c5b0afb202cf04cb73a76db8ec14dbcd2ac4ee90c2ede030b026d3c09db6e4bbaa406e3f29b8e7911556057e763a3a4cc5fcb34383ee18e11f6116558a6d5cf76765c798e0eb5216ece847f41d203769cd34d6ffca936cb40a35234d79d5554d05bb6e04836649acecf3b6475d4c0f2733c40e7e262fbc487630757a11d5c8b3408e2cb3067ef7e521df9561ea00a6485bcc757cfc92223ef5196cb465c299a3f9967b42bc96ab38bf5b19ee40123a2c02d86b86ec8911b807de404eb59662139c52c781913749e4db5699c3f749f075ad93016aa9d0f22bf1def83cb9fb1ac9a395524bcb915791406ec0126a8606e98c25ec8252fe055b9da16342cf1c49f9a0dddda641181de57c2945619b937be76834a02cf535adf3b51e7f5dfba4df6dea665a9e51b930cc399c12bd64d2b50fb26e075f84ac814a9d7d525de3fd4f19296cf6625e6f19c74621967ea2f8c194d6e132815ef7c24e69aba726d6807bb4e3e4d73eae91a63d74eb990077762a8e23e3373eb2047d55d2dd319e27bd53236c5749e1b68fc2c630d7473d237a3aa31a98b173e2066193291f8769b4ceab121fd098b2a95463eddb96f2af344fe6780c8d68284fa1e8db8232e5aa917ca097ec6e50fdad52f58631fd3a890edf91847c96141cf4edf3314eed16891f0fa18e4eb818e26c3107bce98c689b06fe074b8a71ced2e3499c543d936d6508e3662393cc61cd7b1f853ccc95a1f15b1e4a6e8fc4f50757282bc814661ff88d643239ef107261d7e42225f5ff995c5be9711a6071c9c50f0438c619e838d084365a0ada2c9233b019787007cff948a68e858cd07d66e087f9c8c7c8414b1488df558277379959251968b10635e5a89c1fbab9e08e00b6584753d0d1275b51bc3a974d5daa3d69fffa90bc5c9cfd42cc0258b308755a4edb41045fd785beff1a7af364ef819b1d0e0cff88efd23c237318e354c066ded70d407cb0fb06bb1b0350c783bae42b7a6fc679f7d18cd3389c40e08eb7fcf6d1e26b02d0ab3fa1565a9a0e39dfd325ab73df97d00db6fe71c0b7926c54dfdfbbb524d7ab7589d944af59f5310634639000e049cc7b58d2bcaa20b04fbda8e2a56460c0ecafcea75aaaff988661cbae7768058c6572df31d11fbfe4f6cf9a0b673f8f627f21ba7df9b0b4a4d27b3fd0b7518a91dfdaeaa7d537595dfcdd6436a733a55b07ef79e0aedd759e993df757d57f77ad893df38598e56da70a1c5a015f509f20a57ef80389e6ade841a757696e77b65c778b5e824f2fe3c3d7a12dd6ddc3ccb0eeb9a076ddee8ad6ec5ce354540053b30e20cffd9e89c7d65d4074e29627941b755658d0ccdd77e5ea497d0e8c07ae60c7f90e4e9d0ce5a98f677d370e9e7167f1b87fd7dbbbef4a162186dde8f6c66c9fbbc63ab27dbdbdfe9c05784df737268a1b86e776eca21ad62239406538f7eae3ebf3ea6a9e1b6ce8449b1ad369dfdac354cc6526cb3f3632fb85a1279e9edfd592d1f66e94065eb0b325ff71d25fce72d0fd66bb4f6705c26f4ad1aa4c45b298c4b95824bccf279354ed3445655c895dd55e3bff64a612d76fa4d37bc230a4881acebcb8355b0dfe6339fa063c57e9b8cb5262ab7de70382cf2acaf0517f69758b91de9373647225d638fa2a88af122d59b949e4cd6e2489eeb3a9a51a97f26b570bce40564e614ece67ec05b98f90fb4d8dfb8c7b84059b95f7cc8d2dc57f66bd46b15f2456be196ea7459c767e80de4b8239a46cea385597e3457d4eefea622b761a049948d62b8070b9c4db3a0a7d5b8275d9de8aa6e6dbcca6d846e59cb0a265d526ed7b964eea34ae59717bcce22173ab0d3fe5e1c1c3d4a3b49d577fb9570dddbfde52216a1929af86baaea64dccc5e0ee3d8e2226eb2bb21ea360441b75a7f23e8ae2df183d58e2f25c1da66d286aa028372bba7653d2683d2e61624152c3db3aab3823ba9eadf28a3b04d9b39ec802662485e81aac5d86fea465461ab7214fa63331794eeabd3a6cd4a28b2342fd392ec12c646a3ead8bee65b5319dc3289f1c371418190c718198b87f3995ad31c2959b1bf149a4737da541ab05cde822881675c74b0518e75cc4d7b3d0b370ed41f795c4f4f1ecf3759cf5c346f3290b96936f03a2bc6f269dc90336260dc3d2c7cbc11bba28242eae19a192b49824ebf78423b77727baa17a6f05ed6789c3c5015796141cd2d3d4774960486859533b80e2fa7836703f8afb8cf43b8d22a37143767dacb396a8789ffff74cbdadbfc9699398101c0b29392c1d11685f64ddb67128902b90ff5682da8d0bc7835b8b86f6e72bb6351c8c308428dd9faff4e103c1f14c49f51916825a80ffcb0939180c3457831ceb390217835c6470abfbe6ea73c6b816019a1bd4d1fc73d8ef9a305f9e72b7b56e14b0493e7ae30f9e9b821ae727d85af863ab5470bbaed08c2fd1ef2b1541bc77dfd46815910d1d85c65aee323e7d0678370530b0fcc1e832fdfa393ebcf32cac5ab2eeff63b4345d629dc0ed032c08438efef3b8eb0200cdb327fa9b94be041e18baafabbfa2a692077678d2b318cc22d175f158ee196be78e442d78b64dbe128d8bdffc77079fdf94fead4663cb83d5b598766b248451b54fec42a4d600d318af43339492bdfcac7fb71b90bc65f5fb88bb2ddd4b7b5847e8e1e02e35bfde9431cbc5a3de29ebc6da74b5a7758e289c1f4e4a287bb4ca16b37a1e134f31925006554073e83d71fd412abae3ce670da7aa74aed10bd72d25a7298c242b944c507167daf95221c7b2fc334b8b5c8b2c71adf09d0774111ec70f1dbc2aa620a2979c3a033a171e5f6303ace6891721251980e7aa5e8635b2130391a6cd0c7fba17ae577f9230025279727957db8c19f754443d8c4dd26668c5075ead8b4a30c7b6cac515f6713925772f6507b011f471a32a7de109ce0573a3bde6b227c0b3861fb091eebd8d5815f951f1018f534bf98186b5e16a82c2e33b247ad74aa3ac4a494aa6131985f8e631968881a5e2dd8a289c0dbbad82f7417175d7cc94057d6c6e4ff5bbae725135c1e50015cdbfefe1e2837ceb29912e72ab743dac7740aa399a6d5d65e312186a9d26164e677f352d13bd8f8745a5b7e96b9d0fa8057293be86d0ee8b7bb98f72815f8a5877e8b710b0ee21d31f5daf9f011be864e290e1d098edc3d8394b53d31ffa3e929156373729510bbb31f539f6840837eff66885edf6c2b8f245ff6637cbc1787bcabdbdf17c463aeea3e00eae2112ead429dc496309b935a09603c355f2e60148e0c0d73e7ed3ccdc09e4e8f1783f79b6ea663f39e9ab3bad4b1e80924fc54c67b82853bc2bc9f5c435524e271bd255cf4f8631f445b3f8ddaf3fb923c91f56d65764119a40561b7c86943d0ec02d6e4837ca35df329e89b48e3d90e663e774af59b6ee818edc170f3d5d2b8e601ab32c5d47b72813e4d79fdacbe7db91ce7daae2d2f3016723877832b9b7bc89bea8c5b6adf0b976a00bdd77e6cfea3872ba755d55c6e7a256c2f9b56f2eb6287c3f57797fadaa61282cb149fb7de6f6a46bfddd31aa7762d1262f88772cac04b4d7a2027567966d2a1f5c70c5f151f3ac4fee86ea0094cbf8ebc8c4671ad400a1765808d9f1b4f4bc2193e348ab33eddbb1b2c899207722d65fe385ad8f9c5c7a69863a880d07f401da0f43bb21fdb66410e5d6bd81d2f48ff561f255eb3e8fe4491fb9750c3458fb469350ffac15d458aaf0a51beab0b1bd1e0deb9f9f5038c4dcff4721f7ed925844b4429c2f23d0617b77144ae7110065565bf98163e48f2ad8fba5bdafe5f830cee27b64647e9bee9d0139c99db5667a0924d4c2cce4524ea558c4ff1b25bff1697c2603ce2a46ed0f3c60b0a6d00130333333333333333333d3d0a18ca0d5a48f61c9df294949e96ae7ef435e479e529249a6940467263efc226df88bb4e18fd5ac2bdefa978010720f7d0fa9b7704ae2c55027ec5bd88fb570d022c3488d3d1b79cac229c74edb75c9d4ae0d168ea32a9d984afdfff77885a3955c8dacc9a6feb3c2c1ce5fff2fabce64578583c869a76836ad3e51e1d4f6a346498bafbb94778e62624ce1a464cb0fb57125263d91c249f489ca646941a6a41485634a719af2c8e5741114cea754e616d53f8d5f3fe124ca5feb55f42ed79d7038e1bb9b79c147af6dc2b92bedc76592696e374c382925a857152b79aa5fc251a498d0754abf3b2b4a38957f495230499025aa8e461f4938892e71ffbc2441a93941c2c942899f4bd25d0cf2231cd3e7548e0b93fed46b846352614a1262e52b2831354611ce97726da764b953d9897034a954e6f86ac6dc5c8e211cf3bdc53c61e39a0813211c3477432d7af808d106e1203e2f96e72a4996528070b29f71bf98ffe06473a1d428e1a45cd607c7dccf9852c91e21eac1319b999f30ebf1e07031a5682143b447dfe1c5475917386cf448fbc5d8c131ce09721a629b2633668b0e7c8020860e0e277dcb4919939870d7c3e38b1611e9c4408c1c1c7389254d73631ea204513b91911c04888183f3b69d08fda99927c9edb80fc4b8c1e9cd73dde4af5c91691b1cd3f2c516d3a4bfb418a306a70c66c2baf4c9a0f94717386ce8d881661a108306072555daa8d3bd19fa8e3103db55343366175719ad6872572a0999b47cbc39882183a3bcd86dbc7a41d442463e18c789118363d909a197232feff45888018393d0265a869d2075d7240b315e7050a3ec2b4533ed92d42e38291dcbe06a29958d5a70d05ca5642f5dea94b020060b4e720821642b356986bb8a83b6a8f68db351c5192c6368766b676c8b694ee457921945e83f15c7ebd13093a4703fa9d522030c541cd54454a5ffcaefbb7ba417e0e161051a609ce2a8712e558a693e4e39bc1001f9305353dca2031f1f80618af378d9c51372d75bed15038c529cfa72a398342acbc8bf06175ad420c5d1aa7444c4856c31718bd3028c519c5f43deed4633512912c5c96d636e29b7dbba24233b26e0e151ac002314078f932e69370d1f5b02c54975b49e50b299249ee513aa28a17ad12c6e57f4042a09176d2d1fda4eb099e235c8694ab14ab998f69e41772bc68a1523c0e0c4c1942083d07ad276470f631367af1c4acebfcf4d35f1f0d80f7b9190f4a1036f8b0e7c583104189a385f99ac26662a19cda21c80918993341744e84b375593848189b3c7be9e9a6a526ae525d8984245ab325a5bb6b6c8d8ce1335277f2ec3b0c4b984fb91619964ff4da6f7902cde43b6e03202c0a8849ab2b58b5ac52c2feb1633e82c611a74a9a4c9d5d3000c4a9cbe4dbb423cc62b68267132b1e4bfdee8e19124f0f030fbb024c1b1244ea6ad29946e491efa241287d1cfdeb69cbd3a4205d4c8a246026a50408b1ac5ec800189a3e8ccaa182a6ea66c318f38fd7a699b55a6932fed081b301a611e386030e2a092986f1263cafa1c927c7c2132b216a891458d07e0d8017281067878e8689303188b3878bfdeea6e564badb9d0a246161e2503188a38858b2969cf9b3f95f2101c68ef215b9485918863f2d3d6f69bb2414c4246d2ca12000311c70a29aa843ffd252a738853092763dce5103d7331c4696cfd6456533aa247188538dea53caae4b62a29f60d1d2c9200638438092a261dd5f5dfd33b881a032c5063cf00300671d2eef57f232c2ea606a25604719877d1ceb364a2a205448d21dc51a3d0a2002310275dfb26f3a762f93340ac29654b715d51c4629ac6b0b8ab1d19f7bf3bc0c3a306175a988a8ce4f8c3f1362b6a6b57a9a08440d4d4a39c1f4e164e5a26cd94a149c43e9cc428a94fce534b520cf3e1b4b94eeeecea8ecc923d9caa4295f65cfa09a2d4c34930dd1526c99736dd674304988753e892e4dbcab92626742780818793d01574c926635c95a7e30e675142af596af6f7eeed7012e34d9264946e45bdea704c49ba78de2629897d01830e478ba74654909644dd0a440d5100630ea74d95bc2d9726e94c07a2566802187238a5e897ca52a6a41bbb101871385d8add287a62664c1a040ec7e015768495b0debd81a8e5e980f186a3b768888f09a7e42824c40d0779c98258915b1d4d02a2b63760b4e114c574cba4979d3951103566c379ac347d49b2eb3377b1869324bf6571c5828939d7614200430d4753ea64a8a04493942c0251f37e111d21206a6938fea67461de4f6714138e101b8723c4c648172b2230d0704a1bdb841fdd9c361e889aa9c145036a2cc0c3c3c3c30167389d7c5fdc650cb3b541d4bc0811498a031c908484887878ac2521212239d00a4dc030c3c12a9f343d3f9544cb096c98bd87e030d32d3af0c130cae0578bfbfd20a9b3f0c780874716203ada015948e00b91102fde0b355880418653920b7247abbaa9e49607c018c3491a7d31655d27291b89e13c9f39e54ccd5a691c864e052fd1a2d7d5e441d4160c6a86a668eecaa8c95ab5632dcceb26ad5439de038c2f9cf2e75a0655b1eff677810e00d1d10e00d1d12059d4c8a286036a6451e30235b8d0a2c65140312fc0f0c2a9cec366f63429cf8d1a1f6074e1eca14c3a795f2a89c6ed031030b8708caea65f35ce3795ec8fb4e7c080023c3cca7000630ba7bccdbe951b4b0966b20e430b271ffb199df516219420681f6b0846164e2317d64c2579bd4306511bf92e560b2d3e120b07e1a5351ab48ec5106d80e8f8c8837185b357ccbebbcde0a61610fd281b1109d1516058e198314c490d3339ac24a9c2f94c0895730ddf25732a9c6c4bf594a825154d7284882cc0c3234788886fd1810f2b5a00630a57aa145b63d4e22bce2cab98d4747fd9b52441d476e8f848688923e446161e1e3c05185238bfc9a9dc7ec1bba247010b50408b1a2123ede1615138e6ae92effbab27ebcc801a59240f18492d3262824304185038a9303a57ed7c4c1e719912603ce1247fffacd48e65df5ec7171f01271c53cabd3842fac91ab439da8b1bc068c251e36474475ca98aea027b8980c18493f66f137e672c4c763d3c3c3c8a7d9825602ce1a8a6a2afc92274de8b22863180a184e3ecda48732fb152be40d4de5ba48b1c3bd6053092708c1a465bfa4ce9311b88da07aa000612ce21e39898cb92d49b0f3e2b5e00e30827bde94c9a0ed77099af0381618493895e49b6d1af4998a4229c368429696164fdf55956674884e3ddc6ca934c89662a08442d0b18433806b9a26225a5a7335a2f6008e124488d418eaa58259d2d02184138bd8691ea19afc2664c023080701293d624cb62896fc840d4fc719420e4c33be48687c7c877e1e151838b067c2860016f43840b0f8f1a59d4c80b2901172f82bea100cb8087878787897104183f38285137ad5a9ffc15272fb24347c88df4b177a371883c48ea9463c7870842426ee8d5e0a201352a50238b1a5ad4e0428b1a5a3072dda2031f2480e183d36dbe3de197f4f7577a706a13ecc4d27d9f2e0b44ad86eb8e1a5ed800d1e141821a4877d4a8d201183c38984a16fd334cc9d18d1b9d0a0e069cc1d8c1a9b392895a177ac1540f28fbc0020c1d9c4a10af2966daab578791835389f15da3b5f7ea271c1cf547c870bacce48a41206a2123381e20f2230ff022448401e9735cc0c343310b306e70bc38ff2743ef306c70ead17bcd54efa24e0651c3f1373e40466c94e0832dd37b48faf862c48648e75806c0a8c141a596249c870a5f3d0d8ea75b56fe39b3bb263338ba09f33ca541ab993238d66b583c33cba8e1c7e028f72749235b393bc2e094ef6df4980cb1e9f3171c9416af20d4e6bd93bae024880d51bf278ffd865b700e4dea698256941f060bcead7dc29ce0be22ebaee2d8632367e7548dcfaa8a53126f6d6226e1a9312615a7d4a5b72a72d45e34517110deda213cb5244d728a93bcfbc9ffc665d6a638a6d552d69534468e588a83ecc518baa9b67f27c541de6450d6636a2dbd511c83856e984b279e54228ad3e8f32bb9b7d69433103590111b25285f7c04d4be7811305a28ce769762b0be7c7e72048a63c819695d271b2c06adf8c4594497702568321384de1327a15ba9ac335e4a31a613a7df0c75ebbc117f9113c7d420cf3cf445c9ea6de2342763ceb0240351c361e3c34c13a6aa6cc9c232468b4fcb70797536d5bdeac98a4c1c2ecddda5549331248108d61cc20a4c9cff357fc955fa64a938881a0944f091f4dff828968108e4993c58718963cce2265e8befad8b371a87c804fc71946002ab66ac1085159638dc5b29ed167d4a8f1e44ed23c4d7035654e2a8feb91d2ac25eb70351fb2efcbbc061e3bb10792ff242aca0c4e9ff475466df46d327206a6612a7b3abb8ddcc635a4dfec6c78dfe111d1f22b8b10371a1458d1113fc088e902cbac0618325718e19dd382df2438a1c89e386124225f1244bb194206a3bd28b7cd877e1a75f8b2c6a64a04616352250238b1a233b24e0e121f22210692f92b7c07bc8161e1eef21383c3cfe4546908747d9bd87e028690603095640e21464491be36f3871f4d7d1291f710c256c5a1a3da547777f03b548088e2e6c7cbc8e4ec511a7cc7133ba29092a63a911274d67a96cdebe44937730e2bc2668d1fa263755ee8b38b5a9c84f0d164c5ba988a39bd21632efdba810592252926dbafdab77ee206ac5680e2f6c20224e62ca54ab31ae970cef214e4a463913325f4ecc7231c459f39c5966df2489b61087dd13756336b22d2b843826514b3e172bd3dd95411c33492a98b59d888aa7204e232ac9ad619b446b158893606732c9de5249dc3c204ea92b54cca3ca7ce5ca9103037f38be6c8ae9dd378cd7c58609de01225f82102d3e60851f4e55151bb2a252ea10179380c08a3e9ce2ea8995438c8c1d253e1c4e2e43da7b5a775b838b06d430b6e3025e848830600f4793e4d61c99d3bdfd4f3d9cce042d41a553ff917d701e0e67a12bea2599138bc1516a70d1801a0ff0f0100919691d23365a64c4c343e4476c8800c70e902c3619c180878787c78ba815783889414d5316d730722e206a25781c28f22049a4ff0222231730c321f223239d43454674e01d4e31630a15eab38290d5c70d9106497876387f09a73a9abcd4750351631d23224f021c2169454674205a518793b4babed6a6ed6695171f38fe86dac7173942529ae78e1a5cd440b9a3c6bd1574386c7a1f995593e1e77408b0620ea7cc3b9f1a5465ac249905582187834cb9a41b71af4a4a0a44cdffa3980848f2e2bd3071387c88d34af3bf964a0887833679154bf01eb541db206f3809551b37578f6abfcb0dc718b127bf234cfc158d898ce8c0361cdfd24d76cf68b2cf111d6c38878b8c1ac349498aaf8684a0359c844bc2a652a3348dca6ddc2853c361aefbcdc2640a26334cc331adc95ef153b994bf8786c3e65defb293476cdd77869368b24d7e1b1123ff1b39768c98a9156638beb69f90b958264f8e65389c5cf25e10cb27efea91e164c299cc2d196271f18f0f736338be599d92c470b13586c470badab8bc396e73dba6581186a3c556f60c55394f1ad981e198d29e8e17a5b54bbc73a087155f38a6cf8eb312d652ab0944edce0ba7185ee4a524b5a4c61f215e2c454674182bba709025fce2e45cff3d2e1cb7e64bc4770535230351bbd1225dfc080e1bb705fd7eac6ddc84f11388da9eedf818f122592bb470d811172b9b185e25277b861f56642137513b67362a9c1a44ad981d1faf43a47314dbc20a2c9c5285507b2bbfd6a643075871856336f57af2e42a41891d44edc37fe4c33b079bc88ff08817c901acb0c2794c143b79eec44e513f6eb41736f8463ae446925538894187d4b11cd5eacc880e1b5a30150e2a0525c93e5e994a9e41d472e477ad98c2317bc489a9a444453b81a819299c929c72415dcca75bfc6fe4d8c145990e9177d7e7e6a93866bdb9525b72c631a1e2f89733a64cca4cb69ce264f29d3c95ffeb3f648a93f46279490975b2ec521c2da6a0c14e945c9749719272dc744e9fc9bba3386b92a45768d534534571fe9dd334c2da6c37a1385fdc3aa1c524553f280e7e3d1a23266aec9f38f9ffab6edc9b934e4f1c93ea9c3669e5947c274ec2afc91332c7c9bd70e2248eddf59cdcd61c6ee2a0b4b748af1af75d132749dcc93e25ee573413c7201a2a98bc30c93b4c1cae65b38951d34b9ce44b2af645534b1c440996154757de93d24a1cc5c72e25cdb0389752e2acbe6f1afffe674dcc240e7e61c5526d9d24263192388f1aa1523649244e82cecc8c5b8212bb041287939e9753774bd0fa234ee3b6a736543c4b77c44147fc25392d49b5a4469c2d8c9d9a2c498a6162c4319cb6ffd2ffe93f5ac449fcb0bdacb49876a488633c11aac76533b62811a7249518bb359824e78c8893a484aa3a1b5d25e2439cf24a507a7ae562c5863856e8138d132d365b538873eba8ac7c88deae8610074d3a7fa753545051338893c9ce6c2c79478b8c11c4a962bb8fb6a46a4e690271de8d6e79549ceb0e0d200e9e4912cea465e67ee60f279317f7d9d72045337e3805d30e13ab52b999e9c3e96fee75bde23656860fa7feb130d7265cae327b384593f574bf2f883dd1c3498a31b1db58fb2ac9c3499dc9969924e1e1a49955f3891fbdf7dfe1789212f35b5b50d27b3b1c63c765494a9d1262afc331055da9a6fbffdf44876349254654ce917da6399c33ce9910ca2ab64572389d5c6f69fe5972451987e3ce5d0cdb8b271f4a381c5ec6e4823093b277bee1a0bc4f8ac62436429d6e388961938570bb0d27b952fe29b951f2a5d970922c4b892d6b3522afe12437f33e472629cc55c331e8ae723f15d3974dc3b1a4740b8beff591a2e19c5ab9baa327746bce704c61e62faeb3d54c339c94b978e8374992fc5286a3480b6e620651a917321c4be685922de532a98ce160a14f963cba82068b184e5246fb9273d5e2c60cc3514fd0dcd326c8cd6182e1a482f7d69c7c721ee6178e3a1b23a6d6a24a2ebd70b62b5349fc8f09f5b20b074b827c66acdd89b9e4c241c96c9229a56d775d6ee16429253549aed0a6b7d4c2b96264acb4c9a34e95593826f11fb6265749320916ce5ed2a92b41c9a3947e85d3ac9d868d7327a6b8150e271a35965c53f287aa50aa6938b75053e1944d65b3123749d57a0ac7112d4a0c5275a4d55238a9ad7d5f883c3b7114ce95b7b749d2fe2a31144e9b729d94a9a5cae5279c2c99b85a9df1cdb013ce1a3699923642f6da261c2ca9b8c8702747a94c38dac613e4c99ab284e35ea824f7c852faa414259c66f62dee64cccd9792847349162fcedfe44c579070ec6c53ad72523565e50887bd3c6f92febe98ac628463a574cdaa5429c261379398a427e98d9c08671993e6c24dac543e84d39932ed97f27ea65c08a70fb78eb194d74c290807b9d6f470b72f7503e1a474c91b8dda5dc1fec17945a8a65ffddfcc3e3829b933eb7dd8baca3d388c90f3154a3441bbe5c1c1c2a9f096c90499373b38e92a496efddfb4dae8e024c595a0b55f677ae6e020ecc4924475134f5810072761ad046bdf93ac3dbcc1416bd09b2d939c5e1edae0ac664aa624d7b467863538896a62aec9856c50210dce192e57a5c572d115cee05cc2e85292a05692702283536995da7a1fb5e5032006a735a17d74766cf21d003038f89958b84ddaab4f0078c1d9a4acea5c690d3102800b4e4289567d9d1b4c0a01a005c798339a94a86cfd0c00169c4c636396ecbe59e5559c4d924a3db652ca17abe220e34c104a3e7153c9a6e25cab49ea4bd199828a8a63b8567351e5df9639c5b1440b93a4a0c4ed539e290e7229290f5dc2c998bc529c4b16f11d39f13d548e14c734a1339a049354b6dc284e4a96d81ce69559534e14e77891dfecb927c5ec4271d0bdd3f5ebb4709280e2701b3faa4b4bc6947ce22c3732a994257ea7f7c4c14df41315cfd24cdf89a3df5eaa0e25d3c69d13e7134db4e6f34d9c426b5bb3b285b1244d9cc29ce88a2273ef77260efa4c2d09e22475328c895398943164bc93deee258ee153d3497a529acd5ae2244dce4b7e325689531025e37966efac8c51e27032662f751645e46993389f693229f59f98bb34499c2461445e0ce24e988b45e2a4e2ea2aaa9c1c331a244e32a6929497307392688f388d09a1efaf1932e8cc11272d2a294d7fca4b67d6889398bc24d1a6524ccf8c1167537d6a35327c89962de2a0bbf53c4c14715075828aa14f304f1371f81026c45ad8a827224e495eaeca1f32bff58738982426d1244985f6db10274128f92f6fa2661415e23c32645488fa96a909714c57614c09f16dea419c5df64413a45baa2788b345b1af78117db1401cebcd4c9a92a4cb6a0171ecefed12d48fe85eff70aa30265efaa927ee8763d2704126b11e972d7d389d3adb7c1b912605f9704a967249f17bc2a27b38ac95523657675e393d9c92c6cec97a274b491e0e76b28c0699242b1f0fe7f11dcd20279b246d77386aca85e7b7db49a9b2c32964b2f7ae5452fc7771ecf8b8d119b805c415753849ff3f6562ca6bfc980ee791496eaf0977624a730e67dd9264172dba2f08cd1ce20a399caabd94fc77250555a2389c4bb455c957f2962429e1703075bac2690b5ef1866314934ebb9e523b27ef86a3096be1ef9224694c92da708a2eba5b33c90a13d46c38a60865e29edc1ebb98359cf228318a12435c674c351c4bfc5042a54d82c9cc5d9186c3ea86f5a5941773326838e51053d1e4553396f00cc7bc18adee4298a9be3c7085198e976a9a51c4a5307f97e124758d5bd57e690a52321c5e648a167e296f9a2be48a311cbb7d47b4a89aae528be11845a649429892b46e4a18cef635ba6a253e448f26b9020c47cb7db28d8cf19498a02f9c6d749358e934480fd90b07b124baf24c6c5119ff8a2e9c5c440893e3e22879752e9cc64f1425ca4585b2d2160e27b9a79ad47016e2d6c279c4ec8598d655ddb37092a4bf0c0fada27468b170ccb3d36ad520bd4d573898ac9bc45adc6fb76a8573969ae7ef98d09ac454e170d935afa96913c4a850e198e4d618f54afb8f760ac71499e2d6a48c4c3252389b74e23796e493eab2281c63d8f74ab16b2628d5155038bc56e52861b692a4ad2b9e70d4adcbbed11257d39d7010d2b32c6c7e5734e1a0bf71fddea2564e8f092731b3c93159313b54c6812b96709031764f3c698496e64a3855aea5d1ba2765a7aac51549583de4bbcd3476e64c29cd336fd414f495749bba020927d5997bca2ba60bfb118e2b6a6aaac46f669845fe095718e1f0657a4653a9d1a0a48b703af911779b2be6f644386efac5df98273e640ec2154338a54eb17c277f4238c928a276af6a9349b70dae08c2614f7f75094a92329e69100ae8877d710510ce27566eea8a72514cba3bb8e20787d36f39f3bc090957f8e06895479c6a0a2ae4fd3eb8a207470b62ee9bdf1d42a630e10a1e9c3266a385689dbe3b41aed8c1d94fd7ade90b7f58a1832b747090564990716df2ead5200ae01c9cb4e49bfcf1233bb382a8ad8e33e3c58fe8f842c75d8183522ead6461cee343938526eb3725224d779110119193012f6cdcf0f028c1153738055575cb2e2b65ae5e618363c9a552521b34a7a5a41a9c2441a5d0d9d91746651a9c4a6b2a49ff55ad4cbd6206474b351e3a4ed44d476ce0b0f1f161b448800226a045034cfa30c6802b6470b4f550cd0ebb7253526a70d1802b6260cc32b9f2d0144493e54c2677ed5ee2edd2850d64233b72e078c09999c815303899a4bc3af42f86065101ae78c1d1c4e96f918b6d527c171c33d9e697709d2649f22b5a70fcd3f94af1c2a653af7ed80aae60c1715488dd0daa414929b64188b18a531469d2a69c7c134d5908315471bad861f12461954ccc7cd114f0f0f8b04dc5490ca5424fee5fabcb6d812b88818a83c834626eabd468f13c3c3c3e2ce9b0e14531e614c794294da9117a3597a08bf48e0688fc17ad85294e31fc7dc961e5bd9504511309f918f92e8ae1d8b13b74a0958215d7949ab9d282a8bb9e10b24675454bd64f108314a7ac1335c6116e3f423e8a8378b5d13daa41359344710a93d3445ca5dc68d1509c3c3c7c2f9999301904c5419a98c4bcacb34ade7fe2141a638c99541a53798ae109e3a2664b315a9b9aab88ece529613685ed9898189d38e51e5331879aa864b14b2bc4e0c449e8c9d855296ac9db676ee268822e0baf63e1524e1367f9d4a4a4df50aea16766264ebb39a38c9b30499252c3c4512bf7a8249cee563f3fac5ce2245a83b450537eb527584d886189d35b70136412532a35e9acc44937a993eae4b2829612e7ab3c31c3d69f2c3d664ee25452fc4a68905d104312a7b8ec275b9035bd495b2c039b458c489c4625412e56db9f7cf5880e1c215950c0c3a398a285189038091a2fdcfc9538ad4bc0468e04647221c6234e4a689c5c3aee3393ec0b91111ca718098a91001d71102a5926299686b3dacc161df8f0188d385a9cdb24c56ffeceaa2c50238b1a55811a14d0a2869a188c38051be935bb7d5290e3b001f2f127b0a103083116714a4208995bfbe476ba206ae6003114713819d635548adb38cbe7f8820bfe5824c448c4294cb493963cbce249f2f028fb90420c441c4f4ed07632a62ee99ddf781b0cf0f0d061be183927c438c431296de1179b24dbbcdf8b16690a7c31f2615f8cdc116218e21884929b3c3396db560a7192e4fa3fcba3e470556310e25ce31a9f97d743d31f631027259936b59a5e227e2288e3a6b8a0fe4f90b94f02718cb15e4c832c7929348038e89651cda1297f38a933493a31990c2326551890a32550e687b3cfa597e42555d8e8f6e12053895143ee9a6a5c4662f0e12489f9e4ec132e45863fc61e8e21b64db86c9b7299146e410c3d9ce436a98ba7a4e83d7f8c3c9c64495a319eca184b50db0f62e0e11c1aa7aa622a59dd478ef6426dd70131ee707613454be76dbe7aa662d8e12409f28485cd247e4214a30e27e976215f529bbaacf853c0c3c33ede8b16494a1562d0e124a868a9d925176d2d5c700c62cce1248d4c4b4a36616f46480ea799d37f7155be31a6389c82bcd8e3a515381c84e8be242e8ddaaf50c0432424878707a7c8480ef4408c371c432be42415a69a238fe18642e432537aa514365b99255d82e8de11a7b64e31da70b44d274ca5f1f40ba2101c1f31d870ca21e6425b29bfebca1a4e1a576272259304ed31861a4e2566bf23cbf67204c448c349d396d62be117ba94a0e1987e3f5dbc94e496f7198e1daee11bef45de04cd7050324af651fd2f91568c321c4c0a724dba293b691519ceb71983b610a559f2c9180e3a8305ddd1a5493269319c7b540edf11fffd3485e198e6b2777c2f7bc9260388018693244c32a57a55d48406a2e6c5173ab00b1c3616637ce1a8a633a9127dab2b49e2855389d82c9b444b89fa77e1e42236ac2629a52f93e6c2d9f7fb6347eb65018fdcbc6a4269905904a21b90d187630cb599eeb4c614652e6641061f8eb6ea1764a98c1f262b630f27d3663f1fe67bbff91d373a03653d90a18763ecdfd0e26f268bb85499c8480e1ec8c8c3e9366ef3668fa82096818793245d3051c9b7aec47e879320747d536fe6fc8676385f922b114de174acc3d13569da24df224d5d0fc151a6c50e09ac711732e8700a42a9dc996f2d5b9ae670f60fd514b36cb194a00c391ceedaf74a9276ab33cb88c361d447b55d88d0cda70c381c936ca289d104e125cc35b868400d06ecf0a206032c50c3c3c3c343c70d64bce1b4e1c4f63475cae26293e1869329b192a97f4f7377db702af1ed9794a7ad76860dc7a89735ea7755e9e61a0e7299a4b86a37aac47564a8e128b341de04f1a15936206a3abe0b1c0d92c5043c3c3c3cd08020230d671372266c5b3461ddea908186f37ee68c8aab377944bc11c838c359d42e262dff2bcad2202ac30c4713fafe6d2c36b7582c5521a30c677d933c357b0844cd8b1d38fe63c4860e1b2428abc14503466ce8b091818f0f0f0ff7f0d8e246db10791dbf000f8f770f8f7791d7e1e1f1e1e1916c88bc173b7078788cfc8e1188740e0f0f52c820c331a51864955dc9a1ac96318693e4de962f7bf4fcacbd830c311ce524d95cd398caa7cabc309c925f2c95743329b11fc1d15cc800c35983693639cdf4c64d7f8cbc8e17b9ab808c2f1c4e49fa4e47a81243577624aa850c2f1cb3cc6dc915a633a60b67afafb85252f2731dcb548f0c2e9ccf4f44494166092797260232b6700c667ea25c89ce70293ac8d0c249cb7565cc71b25ee5eb0221230b87dbe0269a78fa62da0b034206164e2334e7fbcea85842fd10097990d459fc41c6154e1562947cacd5efb566906185e3658990933b62158e65d2bfc4df450432a87034a9f23595595be509a218c0318133c7b1e30347081a8740c6148e164c0e21f49c52385892bce284faaf949440d4bc78ad828c281cd4a860ba54796e892a881a140e6bd1749d107a43eb04a2f684f38c5691973509dba33e894e4057ce89afc9842915889ae3e80f91779190f42278439061c974527f9af4db10e1c204210af0f0f03741082a1606194c38888a5deacd45549f6c652ce13833268c57924b1711fceb284a38eb9f124fbaf87327a6b975808c249c2fc95b41e8f8ea7f7ca7051948386fe9507a634af9a4141ee118cd42e5b4922b6955d68a156418a15449566dd283a895a045d68a19c828c241e685dbae4b329ee48bc0504106110e3f324ec79aa4c5f25d969843c610ce6972a29b95b5340541d4300a328470ac31cf32afedec01328270b0af1cf2df9beed36c903328c800c23163966fa68a2394600251f32244e40b112e26e000bf6103240b0f8f911d5ed4c9f8019a33b66606adf28c3166e66f4c2b79f3626e453ac78be4d012b405cad519dba2031f2890e183d36c8eb451d1aabe662eb4a881c3468364e1e1617a708c27c927959292d6b5fcbbe11364f0e0546b52125fad244d92fdf8027dd489848c5ce078e8f0f0d0f136466ce4d0e180e3e13162822f4490b183b39cd6d0142e833295d7c149b6d206ddda156a7a0e0e2335b7671233a598acae06170d48fab5481c918183c3a992a529defba425dde0a4242154ad3d54ae8b6c70d8bb112afa894d4a946b709cf3da1c194d45c697060775726c10b5be59becee0746e9a4bde732b6d323875c9a22b5e9276d5ca181c7cdfa4117662da51df0d19303859cc254449f5d1e4a78c179c925e34315a0caa810c171c448b97a463366bde56460bceea63bf419469748b0e7c88c860c1d946f75ccdf9093eeed98e559cfc2c930ab22f962d461567d16f2783faf593cceb0016a938ff5c49f184b8afffff700716a838689364a9d166523bdf406ed1818f0f2c4e71388b495e4c173749659be2385ac747cb5685720d16a538a79510fac6455890e2746965a92cc6993c3a2c4671f88da784dcbc0893ad2f5026000b511c36c67062bb7a841c53280e27a567be998a963f28ce99f6cdc76ec792fc13c7bc0cfe2554d470e2f4c4e192a0644ed7cd24bfa513e7df6429659113c495249c3866952af96a439b3879fc26bf6073a7764d9c2cfbdbdb9f1c9553260e4a6f9d6e1316d3441f1327c1842ca53ded458d2e710e53511e422c474eb7c4b9f47d772db309f32b7130ab3c492a0b637a52e254a5d2c647e5c81ad3244e258f87f8df481207215476d7134691385c7e0b6a378dba5cd290389820a36691e97ec4e9369e925f8330b9ae1d71122f66fad235fa243937e2a0ee2fb9a6b6f14b32234eb55b5fe12abc88538a49320f6dcd27e455c451b3d76489123d5db38938be57ce916a416a5f1611a73496164c099a4c09ee210e3323e3658a1133e21ae2244eb5a61be12334490b712a99a2e3f67aaf2125c4319ab455e97ef7aed6411ceb4ad23131d3a2a92a88932e21836a1274559d98409c4b504a9252f6429a8c01c441493d7232eacd493af38783f44d276a65b6c1337e38292f551142caef5ab20f274d7dd97bcfb43f4b3e1cadc486d36a4ac5bd720f273169651c8b29b492143d1cc39a586e2a9b9482bee4e198d4d96b9d7a9379173c1c8330192ba51ecd5d973b1c46555399e691676bb1c3b924a929a694aca496601d8e79dfaea722fe6f83743825adb92f949676c6e01c4e529ffc72324511cda01c0e42e3f926552a93055d1c8eb7e2db75f1fb5b3e381c336ebce4b9ee0d4751e5193426316ef6dd700edddd2aa72cd4d5369c925ead512ac99de5b1e178269b297773bf50d91a4e254a298bcd1c3289abe168c27f6e085d826e380da7184bda1051e6a751349c54fb482dd53f132cc5002cce7078dff0cb246f92f1c40cc7607a17c4c6ee512665385550996bff65fc4ac870d6bd51523449ddb8690c273db9845e9b4d1d53228673ef78f5d90835224ac270b0309b4d33efdddb09188eadd935f4a890d93af9c2f14e94a4ae252f5c9d78e15c41a930a6d5e7ec4dba70fa53ea355d6c986c132e1c5b4b63afb886516bb28553def99292c69c266c122d1cfb82eeb21a1bfd99240ba7a027e5a933b17092e2cf045d62de897985a3fa5d5bb4aad0205ae1641bcd4d0e7b13134baa70dc909136a334535f09154e82cb969ad292362899c229a8afca2132c568265238c588a619ed122d8ec231c3d54fc6a4b152281c458545dd24ab28f39f709294b07acb98d9dc3be194476c5812aecf5f6fc2c94e58062166ea249d0947fb8e5db360375b5ac2e944bd9882f2b41c424a3866115da26e280927fdfefcba53b9043512ce677b270525fc581ce124b37cc635fdad227e2c8c70307da635c929a51f3f16453889dc9ba4d952de8a1f0b229cfac479c967f8f6f7b118c2794e9648cbbb39fb3e16423865a5e950bab2dbba8f45108e7a7e9769a2c54aed63018483892b1b329eb45ae763f1836334b1cfcf43092a9a8f850fce97275389154a4aa7f258f4e03c27db6ec91bcba3f258f0e0d85b7a8488a6b2123e163b38bb6ac9891a75b3748f850e8ebba1259578d2f2e61e8b1c1c3f4cc691a332366f8f050e4e2a6e55a4edc63b491c8b1b1cd4923c6216d4a93e712c6c70562db5a6644c253d712c6a708a36737592b8ee9638163438856929f5f7f7a6f48ec50c8e79534ca799f89a7ec7420695ed5c5033c7e02426215c644a5964f63038e9ba7ee9cc3b7afa0b4e2ae6ca994b8ab720171cf4b275f68ab824935a7098d1bc6459e4ccc5820507252eece6efb0248657718c932377befd2ea40a47254168dd573d15e7d1ba9331aba838c9254f830571354b4f71f81f65bf6316f394a6388a6f52dd6849265196e2bcb12a9f0a932b9c14529cb45bb99a5b66b8cb284e4a9c9d92b527b389a23897cae51e5667266aa13855924c4e5e96e9690e8a835957126483a97ee59f388d6714116254d824ef8953ba146fe362b62abf134731418ea8658e5a3971ac503df72e162aea9b38ed5c2af9428c5fe69a38c57f9db814cac4983271bc6c4986c511260e67712706212fa9b92f7114954f50494c5be2bcbeab771bcddfec4a9c43e75ebcec8ca74c89636534177da2933808d17e9d1937e61395c441c78e121a34362f1a89d38599182d73ca8b0c244ea641fb74a8d32e328f3887a9b1773b352d8d230e1a9af26fb2d5f4d988c3a6998b7b277b879211e7f492d955a55cbeb288638e7c39d94f92f1c5a4882e53f40c0f3111e73031ad335c26f11d224e76524c9d86908ddd210ea777d59412aae3c492214e41c9fa9384bdd4264b8538c5a445cf8b8eda8d25429c848a5095379fe8a1a5419cc4fc2531657c4de90be224854ca65d7e208e72425e12af677579401c37c90fdb38f2dcf27f38a59f99f2186976e27e3888cda3ed5eefc3394eaec60dfa5e5ce7c371a366ed1dcd3a75dac3a9b2f7c9ade0d637d2c3b9822a71f486e911771e8ef2a7facedbdd5fc6c3e9634f29cf14cf947c8793349594344ae7c674ed704c3128c9a47f9b5f4c1dced626a9243b4387d367ec136cf77f343987d389502677f54fda8a1c0eca44cafc86280ec7d4ba9b4608e170969f93b182d8e0a5379ce4967ce227db1f1a72c35136f389298916bb4bda706a79bb13d57b42880d87cdaef43531b2425fc3a9f4877d6999ad490d274952d98c416593c2693886a5f8a12ae5931e1a4e4a684e5382d219ce6232c7c78ecc7092f535c8a4e2e73997e1bc23d4e346fba82426c341b74486f3ea7477c7709a116fa2a8d118de8a61b524878df5da6138ae668e30d957eac434188e75a264f9757999a6bf70d80b27835b49d3cfb4178ee97268b451f9542ddd8563a6fc1acf2bcd8593264198ec0ca7b4e87a0b273927c98d38514bb65a0be7d994647e28e15f539d856385c5ce712f93e5040b27717f572688db0bf915ce226249f8af8cba262b9c37e593ab387e621855e19454ecb4ec5f252a44859320bae46ed5dd60d25338c9d6b553e1b54ba9a5703ef1132bbd7d5aaea37030259c58ea62d3a51a0ac77e6d4bd50a1f99f909c793b7d7524ce7a25f76c279733d9366bc7bb9dc8483d01daa71aab4ca8699700c17a2ac4dca2da3e1259c526a1cb915d3c78eac84c3669eadd399c16fe4249c4f4f10659f6142e51809e7fe515bc24eb0b68c8f70ead1cc1a2c9d0a7db1118ed14bcc149adbad9414e1a86b929cafded22d21c249c5929a4cef4338c9d1f67851ad0c72211cd44b9a5fd4f0be7a10ce5961edbb45b6461d08a771d36f194f9a78fe8393c998b8b6f83fa7e483530971bb5925774ba907a76069e3bdbe92d96979700c732a2cb95b92e2b43b38bdd85fca5052851cad0e4ea6923619750e8e3666a59a744835591c9cf48276a78c9690f306c7a4244b6af2259d263638b6c9a7463f0d95d6e05cefd6a7d57ef2526870940b224dc9a6cae4710627c9624d6b102e622283638ba92a752654c38bc1295a4ca5dae4971482c1e956e404953d4d5eb52f3866e5ca78b1df2177c1f1645ea7ff95146fd282a3dddb883799d14d0160c161762c88136405e1aee224789a14119b8499af8a63b064a207ca3210800e4eb20925f76c5e1053311d59082007278d1bb75c6b891801e0e0245e8a49575f738bf90ff8f8067878f0161df83881006e701aad78c1aea2e838f9ad81006c70d0db2a93a97f262a0ba2f621f23870d8c84608a006a720c64710351d1e1e3a4af037508f5c60e41b7003d9e8c2c68db38f10000d4e15fa4bc3d6e913de82a82d0626e0e1a143042121205c64a1e325802780199c46b9a88a52d394ec8f91ef426de41b300301c8e02036db665016a3343a3ef60e2180181cf34c0aaa64a6cc7373e81738bab071810cdc161df880110701c0e0b0269fba52ca62659e05f08253da1467625e6297aac8480e1c0270412afc4c2f6ef0f21310b51001b4a0b8c9fed32d64b704a2e6e171c346f2e1de1e1e365a840b3e91911c302821001678e289da8f5c999307510f8f338ba0b18a7d4d58f8d09666f7ab22cb9bf6152d0553e6a6c258a2b6be524668a022c90435f1b66b627ee346a71dd921011c0c480bd038c5b9f49a0cdbfa22545c0f0f1d228fbcf8d7d10aa0618a3acb5205f5a1d7d4520a3eb36870eb9235eb0c66ad7156279d4ae92b29ce99bcb2f43bcbd435a338a978a515278a8931e41c020d519ca4be343166554271cad5313e4a2c31a3f8a038cf8cd49376b21ebafac4417a5a970ad327b59d78e294d48d9570574ab824de896397f98eb5c84a4abd870627ce35275e4a51312559dfc4b16da308bbde7c71e68d1b5d7e404313e739df7b13f7e4dacb89fc8d1b9d8587871a106864e220ef64da52b9a46eab5ea45802fe066a2e4ad016b02b418b60e22444a69025d789726226200b101ded80bd1ced05f2254e2576985c9631426b8925147d76313694a44a9c3566d11d4a5f3825662971daa4fb59496b90dfe9244e29257d2784064dd2c948e2a419cdf2a5245ac3a644e2707b22e25fca248b41489caee6425a36dd23cea5a453f92ae48863a97473933665cbdc8893969894eb9a8708f11871102af5cf86aad36bdb22ceb179dbe4b9bf49ba2210263a9388e30615b4a9cfaa1374858883b694744f589618a3e41027c92fb3843f5dc26c89210e26eeb888c6e8e1962fc4e94c49fbb6db097112cd2b5a0c4a33fe9e0671122dfcd6e5f98fcf4910073ddab2be6353eb9502718a9a94d6acb8f1ca4a8038c81264da2ca519b3a23f9cf7cd84ef134cf0f2901f8e1f0d5aeb731f4e82124495afadd5e6f9703425a679d17b7bc9a27b3828f9fbeef9265cf8f57032352136a6f41e7b1e4e7b52e6fe6a96d0148387935836a725544c154aee0e27a9c4342d933ecbd476385c92caaab347d55407c324415e772e4687c325b7d17ea29b2c5d34e670dc92358cd21b844c63d190c339d35b5dff55b8a42a1a713888c5fcb13a1bee79a10187838c1032e6264bb8b6d07883a75f766c5db3989a4480861bce7b5562c4e98993ada40d870ded1127bb4c383168001a6c388ee61aa5455b5cc6e41a4e7e2947eec9a8337a2c88861a4e15c462ca5b19446caaecee0b91111c9f39da0bfc008d34ac0668a0e1184a4bfea993c2858834ce70d2264c10e24f52af3ba16186a3adbcee6fb6cd9af265389d9d36a533787a68a04186d3c997fbcfdcd838168d319c45a5b49a6d1aeef4654fd010c3e1b4dfcb5b9204372d1434c2702c6dd514276e10d995d7d10a781d8d6a1334c070949d8b756a5cbee3fdc23186f9c96eeab735a85e389b55daae5f59d764a1d185b35e6edf8d6f3ff50b0d2e9ce41d25a66eae7faaa1b185f3569fc8c52836274e1a5a38d66aeacd9dee512aa5918573c6af6c2afd0935268e8593d86f568d65a9891344cb172339bc388ec34604be10f91d15a891458d1a59d4f8e22350238b1a38761234ae7016734bc1926c95c47aad70341f99ff84d267c9e435d0a8c2c94bca77a394c9c240830ae71f65c2c51ef30a34a670fe31ed99a54d7b856b8ac1030d299c52d82bbd965e4990495de0b03112920144e3061a51385bcb499bb2e85aa514536ab8de854dfb09a778b94f2ce9b7cc5d271cd495dacb2fb157b46fc2295f4962bcb557b0408309e7394956db0abae4478db684530af2252e66fbe64bf250020d259cde63830cda2ac70579313ad048c2a97c2f6e09a3445d1509c728e2367746e566dc6a6491451736741c9e81c6110e1734de79e5937e356d2324c77b61830b0f8f0f6b020d231c648f664cc9beda44dd042d811a5c6851e3c6043c3cfc468887c791c0c303edc3fc46081e09ae0b1b5ef01c6814e1b897254b34a5b780186810e12035f9b86ae85faa8919c2c14db89f78d629b199108e75272d5e572a996cb3051a4138880bd565972da67b0f0847b1d6f0fd8db635aa2c1e803f3885bd5ba9a0552d7c70cef499d3ea53933c490f8fd4913d385e526f3529bb7a69ce2ed0e0c12958585d9a0bd66abf1668ece014aaf2be2959fd4448b9404307679b11f30a9382f051f9056481460e4e5ed1a4ec2b9a39428889f1cb562d4ae86e700af27d3f57640c2644c30667cd98a79449aac129fce5112b31994ca668d0e093bf5c56c67c64a6318353ca22de94249348bb0b44ed476c98fd0dd4223ff28085020d199cb7aaed74c54d394e4c2306c7da74bfe8d636608b1ced058ec23460705ad17b974950ab16d3518c0368bcc0e0b15a96dd44ce34b3fc4a5b95a071c79448c3054733f95554f811956bbb041f5f888cec888edf3182b700058ae51819012910a0d182838590a12ce6732b3b1909c980c78f8490c0c3e3474248500c0d161cef3ac33f7d83fe4999b18a534a21a3a424abe2f0f55e32c2ecc4280a66a4e224282586b78729e95303a2f6396c94a07c310315c7aa13a5440b934d561f44ad048fe30d4f71bcb313378dcd25a97d4d714a9214269d282ac38319a5c02a49bbf43d39290ede6dfae41f19db8ce2a8ba6fb1ef2ee6657a07334471ce3931c80ff585e260616df333a5d98d41a038afa54f53e2d3f684fa3a3e7192c41cdee2e6abf135753698e18993484deda5d289baafb906333a714afdeed1aea2166bbe71c3860838714a176f5e622521a7d7264ecad4b2369d12ff4ba689c3f509dae2f5659938465df7d74bd3d2234c9c9238294cbb7b5dbee0258e31e665625ccc25c489254ea2bf72fb06994eaaa0528963c557eb126dd1d7d4418983ea5c66da1a59b741206aa96fe498c4f9ceffd4092eeacecd1fb101228963da6026a50c21349f2a12879ffb90d9a284261312e74a7142b68ecad9937bc441c96b505addf2088b9d0b6638e2305ee20811f1b2a1045923ce61ea4ca6ba18df323f8311e709356d529d98459c7d73fc8ad01b4aa55f11e7cbb1b5274a0a1da926e264faa494edaa0c968410719224c14d2cf9cbf4e61fe2a8276b10a744682d1919e2248d30d90ba52bc449549793dbd8b6116a429c0425295973979442fa368883ee10b116964afc5b411c4ef2cd3f1e72f6942a10a718ce632ea83dcb3e204eaa6d9494fab26749fbc331853241973e71599df1c3692f53aa659bc9e75d1fce6356bb5ff2c6f5977c388dbcdb0c429d86c8f670ee13abcd24b992ec0ceae1bc995e59845c8fc6541e0e2ac6c8e426063fb13b3c9c5de4d9987efd5ccc66dce120232787a81df197ad197638cc9e6caa47ae7ea811080666d4e1a0549359bcdfdd286a10b5111b5ed8b891676cc4048f1d984187e39f182bf764f84bb205516309cc98c329cface851aa4aa975861cce5519e3c8a026651be370b691af7375933b7e1d76d066c081cbdd99622b7a06ab18db84122976bad1b5632e66bce124767d9579c5cdb8a8910505b4a8b1a60533dc70526b9a84b213f3d5681f626e0a33da703e194f57d72eb3459d0de710423d7567b48653dfa56a9329ad86b35b4ac2c4522a4249d3703edd26de367a86ba301a4ea376dcbdce4cf8706f340942bc780be098408d2cec0c27a14b89575839e9767a1b225ccc30c3a946888a5349ca70bcae0cdfd19b3437890c078f2f61f27f2aab89e9911d5e182d668ce168a1fdd4a63675f22611c3d94259cc7652eca69c86e12c33e75a7552d83c4ade02f980196038c79e8c450b7de1f89aab5e929d10afbd70d067429dabbf5db27417ce27939ca9bc5ff1d571e17c96ce36495ea282c5666c618616ce25f32849d2eed6bde7171f01cec279b4b69dd8144a2b63320733b07092647a4db9d41593181a3e61c6158e3ea704195bfe2f7a668573a9a826ee56590a1a56e17c6e9270c14ceba5182e38984185b3ac5aa598557a6405c160c6148ea5365ff00c63555212291c74455eeb45d1226347e1a452e906b790b9df170ae7f213cff4476f1259ce60c6130eaaf7c22449989127ae87134e3d9b3db3b2a409a76c1f2e262893ad4e67c2314f8fc6a9f511a14c4b38999cd8fa35279889ab84937c4d2deb3739f7fd249c54c92373767328e915241cf32565eaf4e408e7908fcb96eb2b153e239c84cd6e82e513bba359110e3a64c5bc5eb2865335118e3d7352f9e9758b297c31983184b3dd7a8ebcec3f51a910cea66d83d277d1e8e2199b1184938e52a54413af49c10c209ce692c9dea4f55ded0451d331d22f92d44c703c3c74d8d82d3af0a182193f38ce6dac9865c64b5302a2564c99e183d346b39464d7e4dbfc1f35b8d0a28604d6407434888d911b3bbce02d3af0b180193d3825d9d052bd961b08d9c0f1c13498c1835398e82559e38cc926a9bc60c60e0ea223c652521fcdd0c1f9b32df9e68be67c3907275f913a32ca7a4dc7c149698576dd560eddf50d4ef24bf8e8099baba4bd0d112ecac80c1b9c434922ecd4af9ae4a71a9c92d43eff7d9da37dee161df8c0318306c78d6365fa6453174d3383739550a237ffc6843238873ce966732efc29e5cf88c12969a9065597ee45a3206a2330389cde7808cb0db695bee01c3aead2463b74ff0451fb22446444c7bbde0c179c6d759364a26ec5f3ce0436126ec08c169c9454df2256d546d5348305e713393ea35f977cd45c85a6234bb5c997be2e892a4ee2b8d9a6579e8a63db953c331e1b4e0c83a8857cbc885240062aeebdfb3b51f5c49b5bc6294ea28bd678234345d723e973e8c061e36302324c713879bdaa52e29fae24a538ed7968d0232a98499ba4ff06ab4006290e9b646fca97df4f6e14a7a441ef9d185fce6513c5a932ca9f18650ac5c94ca388f9095aabb4e34693c020200314e7aebc418b90cd8c7ffac4b144930f9d76e265ca40d474ac076478e29872565249b896129b0551ebc4b984b1b3ce7d535a3327ce1b32ffde2c64db563671aadbf4f23b93ffcd334886264eaaa752691162260e2aa6f8b333d252fc0d13c750afbb49bd9c9eca5de2a492f9dcc93cb35efb2c711294f4bd3c2a4cd75267a501322a711e2d2fc1cbfda41c3e258e65f12d5f8cde61d2491c3357b252626abe5882ea24718cad141effa541c925885a46e218e3c5984d593a397242e2e81b2abbed66327df923ce25d5a5b424ff9a498e3867d78838214f8d3889cc2565533174598c8c3826cd1c1a4e06b98c459c44db187237c6b0a13e91908fa288a3057b51315facfea26798888350ba4b097f7df2dd86b7908188939225c82571be4a4fd02e20e310a74cea9230ffa7259918198638798606cd19df4b8e8d8c429c662b2bbf84caf38aca20c4e9b484c9957609d37310e7b353594a4f6e91138ebe914386200e7a6209622abd45de08a236821fc1b9d136467278a1452052200310bb8cd893e40d5d55ff7030b992924c9a74532be13a41861f3c8dd2a804ada5a3b1481c0e8602a140180c062fac67b5005314002000141c1286a30181a6c9c1f6148003424a3848342216201e12120e140804a27030100883828030280c0a0483c1303814aa8c4b8b0f85541320d176c0908be75dd8b8a091895e413ef29fd775c854b83b48fa4cda710ce3a04569bcd44c5e28e860938833e60344678f83cc144eda9c203896fab48cd179df87660eaa37390c9416fea9c70b9e547a239ec44bb9d04bbaeac61f472cce283bb599583a9e8bc65405b272df6697ca072e0a4cb1ad4cec7e6b18cb9e53d75be5dd3750401a32603b89b7c51aad616d764f4f90c5946c102daa3a00c91585a4f9ac6534ebcc1c44b47198060a369dd9ec6c09faf50b635260de624cf94cf38973f4193fe20c7145d59d8f014191593af05d8522612311f4f7fb0e9763b061479e924f965441301cc9e9f78e13238a735da2fc36cba6f699274cb8f4400c9ebe229e962c7b191995f2fc47fda9498bb3f85c711d95ddd1e867b750d89461232b386fcaae60c9f7f5235187253a17062e639339fe59a86f400277ad6baea72690d3ef0ed7e649e19e037f7bcb3b617c706e48c2b68296105712bf2bb76c3d8d8b816f718c23c38af4dcaaee49a1b1c90398af12a83745f35d0681d3b8d13c9523a724631780bb45ea568ddc7655e5ffead5befea4e76363f7ae85f642a4991fa5522e903e269c605c22e81b804950e453a06b800277b34d8809e98e74d4417ec741a15f0a582f55298ffc2832bb05c3bc61a0e6020f978b803c8c51e313b4ec964fce3cbc891b094794f80747b3d96cf28cc2afe8f411379460cc37ed4e1623df2abf9c4789276abb9a3a31e76080c9fea8d4c58898f881ab62299c9a66107cd11eb7043790f0014e8cb1bae73b6b8beb5c37169882daac7247c85e657d5864b8c7708eb59acb26ce23823c27a6570daaf67e8d9f53bcfc7d6210a8d63c6a3140e9b1156d6e52009d70a915f2d444799b21c41c250a64a4166642caa486c3bb67287111ed1db9b11acabc509739b24c8eb0341793afd5b1689416b1058cd98db7c271c091907496bac7dda08e622703eeb3309423c8127ccf68d0e81fedd82a14c159e6d9307e8c8d5b6cf1ef73220e3f2e721acc71ba9932578b4570e280675370682e79929e20ec485493325d9cae81c8a954cc86657e93103f414c15dbecaaa1e41e98755b48d27927f97c3acdd90209860bd5bf4757fa8e22cb56b4d7a781b8b58b90de59820065b9f44bcf8482940a92a3eead893e2316e69f6a39678c1504e4c8dd4c23d88d112e95ef8dbfd0254866dd56be217dbbe9da61b61ab679d6f2817d181cd47e9d08f7b4ffd004edf5d84faf8d296603f0f99166d2bfd939ba949f9f77358571fb56899d63dc86263a603de0605d2bf68eba617d176d75e51ebb46ba486499a83073cc385a5e9be615c9c8088f8a1f9464193279b1ac35edc5c5f6d7d5e161f553a8fd8df1fc54a61ad297d5f59d184fa13194a3d9c20ce379e1211ca4af967b7d9f0df027c7558c18d4e350d2d1e973c87d1fcf1042e9cf98d6f97f44faf8b9a0ad2475f13f445c7d0ca4501ef92510f84727def9c94e56a83be74b88c544a1d628c3af061c136f44242b3c8c69f4a9331698373a8461ec34e18054b8e89b7a378a60e928928bc56705f8f080d33893f501f6272eabec05f2fad3727db9717afad9f5ab171b1629ad300e090dbb8563fb0104168a3ba1ab50873920bb560245e8c25ad0663470e7847cd77dad732c8703ee6c33c3b39415c42c4c72b2e9b175883a217a70ab51d7c83f369a046f8e23f463a5020049ac7bfff14413fae4e50ccbbad583314251d04b04284efd98d08e43527453d2e062e5bf6b1df24f94cef5cea27c903d82541a76d671f7beeffdff904170d4d56addaf5af78257260dd1a0f068f35ed5b65bcedf5e21d4a2a8ddbac6b7dce0851b348ffa7afb01dc74c4c384b90793d37b44271fbd6fbb729acd1152b43e867fa22dbd45362a614560ade90c96e772d9f0745326aa2b7751b4f626e295ab1ba6c3ef00bb9364f3454dbc2538a4ae27221c6d3d1bf90c78e030dd983fc726c44a97967ccf65734c5b5b62e381ceeae252835d2e842048987c09570e7bd15e5941931813d2f884894ca2af3bdd7ad068f8a81b8750863b99148184856312f443cc4d8e1977d08fc250eba004483517867e84412d3ed692266b3fa5dd9e833a70d8e481d068f919cd391e17c7ee42c5950d4ac36f5343d350b68a16e21a8c36ed8198c2b93531e0521eb162a8189c494f647c1e7316772c705275ec2d66b0051772e1429ca33fed09504ff71a3dfdf7636c817d83a0a00adce099992d95933ca90d6a69084cf7744f88c2556fece78a36209710b1b62626182b910a9590dfb872d19c3c38030afec6f3457ac83befb5d88be208b99dc98c5ec72836f87a03e24cd58042b3809e6d6d58d337c0bea53d9a4e1945be271393866a8d44bf89bdf80fee77fbfb3dbc3b8bc7d591c039c8334218198aa3d3e2e879f374d22a79e5e64b40920932426ab4346f310c1fd58b4383188235ecaeb06f70060605ee94f3b3c728100d220aa279212e98b122071345e285c1f1163fa2ff29f7767188329888297a72a866cc667ed325fe56dbbd555fb89433e36a691840e0a0ddee92c7bf05a6d68301c6e6ad09a02c59beebe4a74768ad3e5aac2cc5088b1f6a4fb9f97f1255ba454392e7743d62e2d04a7f25d6f072baef8ced332121e0106945722a3b0e515977b74c59d2bd7ff82bea5cff118fefe5d7fd9723c27858be95b7043e84760f3de5adeac21a59e208fc8de8894a1dd9251a38c0eb0871278e6b355c77a1613e7bdb8885f478d76a7ab1e1bb9b59b56444cce985423b8213d37d84c2d6a0457f2bcf913da1b813da26f6cd10e843cbdef6151254e26c824d7327d36e44428f1e7b2953fee066c449ce89586c9e4341f4543553a593d080ded23c16788781da12bfc21c98862828687db88fb06085a3e67ac0a029e49ebde841a4e06a0f00b7f6e4c78c426bd02f9a2f97c81b994eb195d670da2ea25c64bd1d60c6e7e8a006252abe8cdda170a134bba5a42cab88f014355bc7448e66d34c9c3b2d09e6ad1c5bd191cdec0f123e569288a9416282372c5edadc072948fb86347ef19d41117d895b142b26f73ef0f3395a9e36541f7bc7c7d482105ea6e3a7000d804d3bdd43c2d13c8a4f16959ca696a68a99edfe6fb13b7601b41d23399428ed411d630a8411fc866f101c301dd98d16f61105a3ef56f2cb7341eb44513909e8064ea611dc9f553446d7099c3886d16cb708cecd571e600e26505a412e089cf8f93225a3d4db6a88c8b7bd029d9c318c21cc2d3b6ec4d338b8b66f9325f0372ae048f7a59e25a90dca6885872857e59f33fdf113da822e51c76bc50361c26539796985fce119a139fd02e20ad245f012081c7767806dc77fbea06c520a124826ea5d1cba880286d40e5e93481d0e8956a2608b3ee25c1641a158ff424b3a1fb3872d4abd43dc46b4bd96cfee50d435601e92d895fdbe180f89a45b2479bd035a020157ffbbbbd385ea2ae4f9c46d5c2924a9a62ee549eed29e5b4b8edfd9c1662b3b34c366c52a8b7544e2312eb5d08088018e9675641ecc05a110fbafc403340b83de11f80ad93c59e0638969e26a7bd04899ea78dd20ac4e4405cf0d1294232fffde1fa248d523aca1a58a3f80a1e2a30ab8ba8e265a60c327548b9d0969aeb4be6c99179f4d9e3ba512074d1214173cb5521b114a294c0c476be65cc04070ce8ebfad111aa49c9be3c15f27a6418a5555b8eacf9432cf736aa4ba58c4154a1360428986535d73f5c082e8a078c1ebe0590899a96cf90c762c0fd7eec158072dc515f2103d4ab8a81773732992154cb5b92028fedc649e18384f87fa1e34e35587b4614aae107ac3be193ee9258ea99c89e0e30587051ac2f4a53d1997ae53e55e3e037753040b841a0999dac03617292b7fd5bf88f5f1acf1e06c5e908f15ea0a9a1411e505201cae83106ab61a9b72546afe396262e183a81c56cd00cd66c847b2384fa7986a53dad0e79024504c59069c04415f38cbd034e85dcba7092881041e6b1c6d2312b72088107c22cec4aeb20aa2c60c0d33e858091b4da0443be8bd60ac98769b267fbd01442c00f69d2d1857ab57c4eb681f15eccd0c483c0029303b20a37b61b138087b86faeb5ab6c96a3bd506cfbfe7558bb0eb8b0636b5a30f6472950bd1e0749bfcde4e071bd0b5173e9fc6d5cd692e1ef34e562a6f1c270594a5f7af4ede2491001c450a978103bbbe26496e00c83294825ed9ae3e3630d96f264cd44ac1b4c5250b194c254c28cae065772b5e612b2c433925ea3625b13bffd6fe2f1f681c86e11416836eb0aecc4c02f1c013a44327779862044ba60c9f76923d074b51f05510076f51b0af7a59ef7ce0e19fd8e0b5977b6a0fc04b2e23709d754c36b551cbd11910a27d3b753558dc72b5ef7f81dc4ddb65d71a10d9d80ba9a515700f5e3dded97b9004db7638c0cb1b15390c7c9a83f58a9ebc20e55eeec0e24b3190ceeef9501ed6b6b85794eedd293e4e0226012d2d5596c170a85a418681f4b20ae66396f1723416c19242b2c6f9239d9959a2bddab236623bd4689c5fd1a6cd150c6c10c876b900e5fa027fcbf811e8294c1481e0b9dcd0914e763ad6061de4618ec54f007b83f93fae6a7ad7d8f6a8fc5cd7509ca11825a4c30d47a82c9d2ac5b181f7908f465d2029e94974f5b22809749883882fcc16f5a0e95df799fff8111252f9507ffccb14379a9fec48908bacd6af4d729327931c9541641648915f0e231d791adabcfa31b320fd6372f4c64fc8fcf1b7120ff36ec7081af58218927d4654ab8d2bf29251939606cc53b3bd0d9a5d6a78653a0be03406c871a9ef67631013153340916fdab9b105fd84dc8a1192196d77b4e0938cb34fe26619bf50f4f34380a537cc367b728a61cd3424f67f5991024101db822c165733a21bc67a06dcb0ab7f2a2fb9e7ad29da7b725babbf7f16ac7f060635e83e4ee1466c815b8c49589bb44d41721400c695b0cffee77001d9532fed8c5cb5cf4a45e79e4c4151c1d73cc6086022a7909af48aa255362520b453fd2076f9622a87db3cc9cab0a6e95f82c44c280565406da2f3e6516334b42bb480dfcad281156336cbe72189019970391fb316f8a0695d2211b14b9421b5a7cd3059d01fd5eb3c40928ab8592a4bb84757f7f022253bc5660ad7fac6eec7506454c7256d35383d0c677136c9388ac4e8c3823323380da89e35c2de346882c718a030a5d74eeda0916df730ef423257321532d4cd2e0328abe058c45f5ef5f86fc354eefdf81b56b7c23e3d85aa685a6e78382a370f82d412f55ff83ac2921d1bdc1102705f8ec0e2cf28b8f9010dc16ebbe17b44fc4196d2e3c6b6ba1be4b1e05f8e6fc04e030221cf24a296f8f18cbc788502f28c3c1daf7ae440a730b0460d8bcb305803c94cc171b106c1dc45d0c759c330f19a9f4e5306e41b464006c7b02c5908c61d761e16c378f6e6ce01ac80672074003e48e282a74aaec38a064702426afe08f3dd64c8012ddb48fa0c225c01c74410074f181c8ec203af11ee8be360f68178c82c7ddf581ff2610a990a9f4b8179b36e0d6079c269cdc8aca20ec06d4b768f24d69b60616e45d6365a00a9428b76770312885f3cd31f943763268faf1277d6232a91ca8dc6505788025220f0b1313b8136e6d39d9a82f4eb0f0421995e6bdecf9b861fb877ea73c1e9cfefd35a6d89608f31df6e67385a0c1478fd24804b80bca18fc0c8a2acf7424ec1ff9fb6b1818c6243d0f3f3676ccc1adf3867aa2a28682a9761616266d11ca0e3cd058b3c9abe1f24e268af8d52ad2111829260901e3f0f9f7e5fb8be6e8dfe4f887352119ce52541b9b963aac0b8594535301416e40a72ac0b7c2c0ffaa50d93fd34a837c42c81c81f7866eacca57365b4bfde1ad4b6c4e72c310efc40d89e09c293ff5995cc09a7138c7c551601e1517e04066e500b9d684a2d1c53949b2c5735a7d505f68159c0d9c067c31284f71963900c4102f09a7b5c446f6b10afd40435b439e87ab091b3e7d64b59e3cf08a33cb06793f3fe043d1ee8fec9f4e910d366107acc631d34679049fdaaed4871392e07f6c01e13061ac0ec90f3b19d38290fcfafdbe0f20e18b9c9d1ac60b9b1e8b5d32adc5ae0e0cb432a9501355bd9849deb5aeeb714c5dc234107712a8b8391162bd5cb657c5a152c022ffd522b8f9482d42ee0c9b1d95a4c6915cbef05a880c89805b6a3538b95c553ff5851e8e489da50b60ced888f040cff1f36aa710a6e218bd1c8c10f7331800934473f4e901f791c601ff3b1837e14c701e1918f0fe6631c13e83971c98d464212a9b184b751f6bc6fdc6da04c8e8429685cc4d589eedded13b8a501c9a60dea529b02482469da205c2e16c05562201ffad40c44b7ca7d05d6841a697553077ad61bbe44b90891de4c413c8436a5948fb05c673f9c8919fd786667e0a1ccc9f413333da38fc87c063f9ef94c78221323eebcb6c023eb176b878c6c1d2b37f7a94c4a574658bbe6c0d20407fbe339f1ed5ce9eb5cf6b34c9ec68af700369c1197fb6adc22e562f7c9c79ac3421cd16870f937d6966c5e9c71ccdece215cd8136ef3155cf765cc43ed3822f405682ee18ad6a536699057fde37d348c8b40bdc31feadd00264832cf72caed3ec6453ac67d5dd645afa43f6ce51cf0bcabb9f1758aa5096b272041dc8e9686b371a2ad58ed207b2d038bd109a532e09ce180cdec080677bf90f7bf3d87ffcc6ac43a419072294f51aa78256f0de3d61a69894d3085f5daa7f5e4b7f408ce7b13d769090a928374e8435c82d14c1194559de7be4b76b8ec5b002ffafa5efdf29ec1396d834812c22aaf984de8d587763ad68e39193f25669e3f068f5eda66506b5fd6f43fd71b30d844dce66b5cee0b9c2233c0af84326fae5eb0b5627efa355366a59cf4d0c94cad13952531e18893d81ec9cbd8d6667bea0773e44772e16773f2f7f508c77b076b520ed5244922f413202134a74ceaac9c73dc8378aaafc67c9daf72b9afe4dc4f6777821398eea1e45d74fe79d7a7743377f828077d978b7e3d573f2d676e2f619042130aa51e85494052b5f3f8c773974f908858376770df477af9277a8fcb7b85abe4ae55d1476c8528a01d5d28430d53d691bc57995a5aee71526fe37c6fe3808f70a7af7191ae636a12a39730c843cf0a7d11459006b9b4411022dee9eb5cf4eb999ec4f4261c72e8a7822ff4e24febd9b0d6edb04555c6f1a7f606eef8d4d0412cf1913f3de9c9446f9a271fad499c3ec226f9afc772b741128883cb2963a7d372c38d8278fc92f5cb63e5e97a1a769b10068c8f4ca82927744396674697e1dd7132c2db350a42b2305b96048cdcfa2da8bf8c9ec42a4aa6bbcbd1b346da5e50c2de2989950eb150a4788c3e04124feb3d78a842b0930a36eed896ba570695b2a2ca682b5f19e5beb8259b08fedaa4b063d0284076a8786955a7ebaf03e6d36925275279c4b6f4f230e7f9f85ce6e5cc4a3276ec98b5099f255af0b6057a79213d3078c30bf6c6b0de2c7083053d5d586f32741b43ebd5c2487aa940372b3840a43c295c0ce9d50c4bf37eeed3df6b8dc828234952fc9eae1ba7921991361f3b3051b5c3a03092bb07d0b96f02a772439307dc27c069079c6d3340c24e302745ec38a2a862d1a2aae34edfedc6032df917560243648c955d3e7a748c05b862c1631d93ff1310f816bde3b672f515bd1e88174f6880ce7ee62402493b5d6086a338a10cb1c7a8acfcb61dd42e126dd5a2618e818ef4ecd8838e3968fbf8f7ee959b9fbe17f428034a9927f34169bd6bc6826ee80a3e4e1d8343a9089b04de6a242be23c0340153df6014568a75121b73e278f177efef8432b999d218afb74ea69fb32938547a4c65413c7a1815a262c311fcbfa24b8c3b4524c4c62a497e4dfce692531840df618f8fd97a0d698ef3b7c649b018c602a692ce1ea6ea6424b2109d00873a28a9ae1883b0eed3fdeb051ccdb5d0706b1febb817e251110975373a27ad5ee5452de242083f2ed304a9400ff489901a76268a9eb31e1c07815e6f301e55ee0743a732a19ac0899522b71c45784e58b25813324438731a34dbfd416c868a98226b014891c73bb0da0476d96930dce96caf2edd8dd4ce74a00516e1fc6ca1534881255a2e27ca3f254f089cae163335d95c9086cc052149db9288825f4cb127cc1fb1f706e2e34aef87d552224fc257cd4a562c3713cebb75e4ac2455c69f58f2f1ac5f6f6ad32a07ba6c616052a254910256d173c53cce3f540945b0f94c13c044a6e8a734582010aa575224ce7c0eff51a883845c02f4db68319a17b261d40505c69fedb5f963731c137e0b36afb005d01e2b60ed828725bc15fc540c7da1912f74589a3d83b4ed22d67869be3364e38ad3998b35e1bbea07b1ab76bf18850597fc05889ca02cf4f450494fcc2af6e5ab102a9d7001d48834e3192cb7c724b7af380b6c2f67d42405f742f9b5a1b8a186c0b6f101714d84e59df3690d49dc642882a8e642dd8cea115d77521d8a121411c95d27fc0f227e5da37daa2e3e4ccae91e598a121643dc963dcda71df4428c5b6e434ec1c2a9ddea840f0b2cd39f53b4434d159d3d2dae7e704d53893935d4cc667d98df25822b8e0b0dfa515ad926146dc15b059d960f845064e50542aca7e282cf4bc1e02747c6b562d5e33a7b306460e3a1dbc71b707954092613729c447b9064d481aa08a505e140f5e4012caceeda169023b9b93f8e4040e4663b407dbd45663b05f2822a824fc9674cd3ad7a4935013bcc8577d61e5044d67842370f8165afbe4c822e4a0eca0821c2b22305938f5ed80145162017f7fc4be1a50f594324ed2490a9c8d2c0c8be9c0f1d51eaa913cd5ca917828a7c7aee38b333f2be6c5765fc4dc3f4787742d255b35a24619e5b2580d289471212cece6ad08c316df603f34ec82d51eb00065cd23f44fb48cbd985ab1fe8dc5d7b1feb42a383be1e0d0aba87e27b1a79a0463b8ab695306f8d8f4da1d2662007f45fdd7ed37fd28aada3848c4388071a42056292558e90c9aa8589d6e0a25c10d6fb80d617cd9d052184239102139d643ded33af186effa3d9145d16edb90868e48f04885a44b3976e83a4533cb3ab7f5c98e7930071fe2ba2580074d78e59d0a426fc97e2ead82adfff24b682d406c2c063733b1a90ddbfd262388dd3c4bdb66b5e82cebccb9a4f830fd60a9841117b8d76a1a320de8823f51cf42763d433669c357705ebb6e494b55c3f914635d7a6c2c9946a112d75d6ba3b5681359b1f682fd6026ddcfd7ac44c3c4347e9bcbd13548ebaf1ad400e9ffd374a5720235516eda0686de8af42c288f5cf40659fdbb21095bd42c3bd711f8b4ff7e35d9a9bec2a57bc878938b7c5d529d39a4626f4e56e88bc59183cb7e7b1357a0ffe2d7233f8102ed1264e0f0e29c34d08e170df21069169fc52afcc5741d532b2c053673d7d8a54497a707bcf0a7946957821fac49c38a49b804ab19b729098e8a0609a909bfe6d657269a2f6c2ca021603bf551195db6a044bd699a1469ac61293060257aba8ed8753c19767cc5634c18f348edb7db4deddb9531df6c6a6374a623f105c7a48ba5ef2a072990c0f92c4a83f33b2f7ed601c16302bf3cb218481e3734bee8c8fea32003f9c0fe0c60fad36844a76e5a3f3f9cf721b49483f15149e6bd10e54b05e0811a0916c85eed9144a0714222e6c88014da0b482235559bcf56bf6ff5fba7d9b478b8202efe29d1c42337ba60fb482b01d82559915417fba69ce74ae0a32e82617e50485d23ab8f75d21705bd10c8f3ba97285812c5d1fe8247c839adf9ec64f99620ed885069833c1740b7eef09b5d519713b6b72e858d3290e6f1a18dc269cb4cb9c0304ecf041ec5b80629fa18ff3f6d3801f5e71d70a547bbfda44abb4c731c1ee9d99f532e3fb658df8c1ded8637ae162627615a2256781c85051519bbbc17d229eec58d1b387937e7a3df518d3f0e90c774742316bac9ae50ec8fc9e6476cc408ec61e70e27c4610c3ccb49e1f118c89116e9a5391e8665b71829014578111b693817ec85cede367d9ca5aa11db0fcb91e0abc311c0602122642a005b8b9628d649a2413be03f961197bbb702e1c4be9326b0894ec1356f1b4cecfdef606fbbfc31514387db3c3bd8f024efc578af3b5325f23e0000dcfcf338b73848b52a3fe9029be78643fa9da0ce2172a2c70d661fd20421b07f8ba400918cf0ee1eabff70fb4f6b983d161ef8f7867892d1f12dda17dab3e50c3995572405e900268c2328d5d9bbd5120fdf75b0daacfea5bf4323e32816e9b88b7530966c71b27eb75d02a9bb112f6f62d608ba8986030864d5da5bd9b40f30de686e7d7c47c4a3a04f4b40e609caf0efdf6650dca6891a0b162a76d9ff4c23891f946baa2b1495ab5e88b55e78670b23ed0a4fae12e57a90302a8e26e7480ce1f9ad14935b002a6791b8d43d34956656ce4b07fee288f1acccd8bc38d3796b10af1b005f4db61f64d107209bb1de131064be6662233f7f3a6c3a08ff1c417493241834f7d3291df23b8dabddb770726dfcc66b867437981e5e336c4b541f13024abd013d6deeb1ae6f1f540f2d26b8a986df34543c219c17b8c0b94b61424ba02964f292c6928bbf2ec3781b674ad4cb5fe825b1970a9d7dccad1331dcba18f74615ebc3d2e31a505bbfa3428cde1a36086b994de6bee671b87142cfd4dc4c60b76a067b08f812aba06936abc4330cf34de303e6ce62236deb608695e47851587223f10c3940c86d6cf15c8208abc39fcde1d7ee958ca136c98b44dc44c6a5285f04adc69f6f5d2b13daabef5d77d23310fce956534c70456abf7e21798a0e91560b9d9bde03a1482b625fa6365421e722eb2e00781f29cc299c626e00120ae14a581d4ebad2f52c7f162c7440ed8129c761d8ba355505b4b7c8fed2ed21129c18ab54227a8a8a9e2f2f71c2a67b02b1ee242c17c5673bb9a4fb25d97a041e3547e8a09a6ed4eabeb96892ea4ea705e87030b559a01ba654dbae29bfbec8f931e8c5eae2701ad8e10b2bdeaa5d0df52367013bfa76bd3feb0f57e29f1f915e8a75b41c8b6e9613bf4ed72b6a4159b1c2a581de04842b5f5871791e8c1cca107ec5134083812bda7d726a58e52d96cf957f94011a88ec89e70ad019d15178692256487c9cbe6521b06e9a385c9a0a916f179be6ab8af5b4d870a3b890f268aa921096039e5017196f329669430dbc34159f9cb6177147fdfc18508bbd9cd68675a186f7dd04b8d200e138749ffa2d69c8b25e21b0d17275ae1e530212f799dd1a2fdfba1cbb682d0a96f010116e7ce21b3da45531ed03ae1f74d75a42c18380606249837f85f49192d781e31d0211999674516537533ce4e3916cb07cb394cf64f9826d7ee331b2b713c85c2e9b82fefea13c2eeca54986cea04313eb2bea48ed74d8f24a14d1545548789e30d590ec1072ba3037729116521e230a9748841051f5c695618eb2044a8995380aa4897829b43e2983eb5780dbd00ef5903cf2a60ac029e9fa1a419cc5bb150e5ced61c02d3f3522cc82669deda0cef9175ebda7101078d6660430b2845508dc0b393fadbf7d1234f44404a141c960fc72fc15f0acfb184e298a4b15e53cd1de02ba43de9fb64ebccfe6cfe5c50fbabcab3fb33eb3f06f8cd079ea39172e3da42008c845a944caf275bfec67c1f3b2c2d2646f1b299235df67773c5b44d678dec0d0cbd38bece42dd24fdeda10ed5be1a1b4e59549ee516bf13247014fb64eb8bbae75ca39c841cd1f0488ddd5398e5feee3b73d3e96a72c200dcfc1ae6d0aa3ab41b865fa9891698a5369e2e300b55dfc6cd941f7d9bf0ee446089841e3673b2aea59b7e05204f9a404fee5148a1d70ebb344bdb3844ab855f882a340538a0c5fe386abe3fa5be3856706531bafb1501ef63cb522d5d0246c8f3edd1a89e7439fa5e8964970629d1cda78937dd26637924d98aa6ad2a4f96143774eb1bc28e5f1ec6c683d4ac2ea4315bbb4b46d9d06ca5c47915790c575f18073a5dd07f56615e4638daa68dae12bfd2e6c52eed4a7be6c495f6989ff64ec19bcc02577e8c66bba47ff1c7c0b12ef18a53cecdcbcb191f75f46679f43c306de29e2dc77c18693fe4d6646d2ed4002d77613e635b2cddb340e9610e58f40061310db2db04c2cebadb6018f6ddbf36fa98f1706dce395970a01359bef88e1e8b8454715e888d6e88491c7887ea54ffcf71a4ec815570201dc4257eee5c39183358417cc4b19d6bd75d8d344899347871a08e20272e52019f41d18f6adad545ad868beab0381b4653f452a70a6e06d357a35528607829f8321d7e0c3c819ee2c206477b30e8404b6ee2e8cf81503dcfa93bd9a493d60178bf320e768ccdbb4d559927b44de3b6a8f08b6a39d65cb2c4a32d6c13f28aa18f5c1f9f89168a274d45c2eb69e191b99b75b08e9620693fac9dd7a8f4a01ac0e086a7f22df9fa0a13c2b99a6775abba0db0bc89aa845c2319986fba5ce2d9f232efaa83829c92b43e12869fa71572b769cb5fb8f91eeea4ad30347105ed1300ec264b933702c5a790dfae8b7e400b411be63493790be964fb222674f880d5da515c99b6d128dc59ba644dee31c4c73282132ed7e23c61c91942ac7599ad6f6b8bb52a71b3a21620c14545369be42081914ea1dd1d66acc291a4e083145b609242c35b8b60887642f22477eb74c3f10feb5e3afee2e1783f2b8f86fa0b1f8082f1503c1dcb13d19b6d7146c4c79dd90207ca76d6c81b95a667e5be1710079556beffe16524171cdc8305493378a8a8e0b12514b1e47a8698f85c0bad83d1eab507c0cf6b14f067c358daffb14b2e85e4d61311c93976a0e8718e7d038759cc963fc474c08a035f462cfb21859bf60d8b4b895a0206947f9af0e3024a66be742e7bb8306f537c914a23cbb135c324e10aace481868442ac772d00bbfbb18540b771b2ad37a494b35b906626d6b42ddd42a8a61c0342ac51b2979dd618b34a9d95e5a8d5c447a1aa7ad8797684d417bb094e4bb9b3e9691e3133d25c6821998d94fe9dc97a1ca9905a491cbfd3ab5c65b3de68754d9d3aa57452bd98b2da7608a4167c370a3226fa2712f10d8110a980da34b9ada231d8e4cc7ee9b8b50b5f8c83466bac19c4205e913201438e54d53c4fbd1f4b6318202891415dc979d5b136e96182198ceea5d03524c6623318633f64bc07e7cbefe3b80b724327b7a86ec7cb5cf14b4bd63a08803004f70c0b2b960bb02f4cd027ea6040d0c3660b4960e330f0f0f0f0f0f0f0f0f0eb89b546f1ab56b4a3229b5879f2e604192494a99521230131fbb8377f00ec7b637350169e3971b440cfb0b0d0ce9f9aa582dbb2e37fd6abc9ca7620b41788a1339c46465a36291381bc4735c4fb107ab3c7137d56a846a8a65a3763e8d20b2629f522c1efb6b43a9fcd2a324c59e42c90cad33116332a3583c65da5ff332a163238afdf395da0d394d4b6842b177f218e5417eaa391550ac966c3ecea77c62d313f634ffc89411124f6cb166dea76329dedf89cd94f49055494cca204eac9d539015e42fa892d826d68c7b33717f82d8f035b1fa27d13ef58d6623cfc4265bb79b828c1eb23126d6d497c22425f46d88aeb449239f7cb563894de2a8887015848176141819625462efd3299f9a2483f41463506215bfa04ebd444855f124168fa061922e7958b9c490c4d665a2b6c225083122b17ce6dc51e674a6f935471af1a403055c6cc15dfc00420c486c7349232691431fc478c4966a416fa6af6810c3116ba785f8785a9b42d8d788f564769c7e774a0c46ac631ef37cc9abe0299a82188b58741c9d43d4049d4c6f620488a18825fe8ae8590a7bfa8e1d9cb7858e0874a1630b1d3b70e4e8820b4fc64ce00338541023118b2a95623644da8a7ac740c4e6e39fd395d2f931568e34c4c1c58f2b418c43d80d33410c43d80d2e6214621f654aff8a242de0029880188458c7be82cdd859fc3b73a4f9e8820b3dc418c41639992ef34f132272102088fd43ac9439430fc412e7f28d4a3e0620d69caf52ad44adcef270616623030c3012f840c00f6ec09d59f9f01c3f1827f0011c00e8448c3f6cc28427334961fe736536c4f0c3da59524473af5fa9a30b1d3c1c7013f8000e00dc21461fd6bcd621322729351d25c4e0c35afad773feface5232475a9d1062ec618b23a48fca9923a62ee96199183445fecf5d1e36d1c1f379ce5ea69af7851878d83edd9910e972f753a377d8a2c8db8c1983b2af93da61cd9315b7e1f3849ed2d921461dd6bc2a2562a7d221898e69884187b562fc4c8a9cb66494a01962cc61357d417c58894e4931392c3b9b74995096733b270efb59580fcb9f4245150e8b92cfdc95eb2ac62dcb10e30d4b4e156939eb47c589bb61ffefb00b95279669c7d186fdb24ce9f033ff1be2670431d8e0069541e8488b4ce003384210630dfb8696a96d5ade34c135c450c356a9ec4c86a69424d669d8ee3389e021294b49cf6858628f08427dce8cfe3134c438c36aea22d68ad8529329336cfe7f7ae72ba37ed2639461bb0f1bf523c8efb06132ac262c84d5c50ee9947a0c5bbcb421c70ed24e7c90a8183655a7611a455efcb86b18f6f21ab9fcb142533a150c6b304b1571e34278b0637c61b9fd9a24ea5235a325d50b6bc8ac95a810374ade5dd8431a9dc2261d2ba5cce1c22a7b7afebf2cc60cb92d6c5293de928f1d77aad4c226ea763665b3f2ff928525e952b9f4e567ca8a8a85edf37d90e174109a51ce91b6850ed62b6c92634aaad3c88d9ce31c69387aa48c610563c8f1ca63ec6a32e5481c3cbcf0c1c5392ac4a8c2263bab1a720491493efc7b24fb220615f6d81f8409cf1ceaee84011b5adcb871e3c60f1e3d701817bc058e34cd438c29ec418c50499d483de97229ac922be43a4f1242774e14f652f9bc1d9e84c23e6aa16ba63c3de9c913368ff65be1d1bfffbc03c470c23eaadd59514482d7a8095b85949eb6b1bd162a13f6bfae8aa44cfdc27696b0e70ba942a3c9c89e1c30c450c2a2228eacbae031204612b6ca23d3e4493a48b05352f12736598eb0e774a363e7143187cce609318cb07c0e5611d6cf097f1a93279d1083085b0e897922ca28213782841843d87e37888cf2f11ead85b0759d5d0c3a3f4a8d34088b882baaa11a4fed6ada851840d822ff5e90a53aa38d45b510e3077bf09c946ea7a073a8101fecf1429ebf48122b56500fd6bacc63228724214fc885183cd84448a32428cb1b66f50ed633518d242bed65eee8601d1d4a8e92d59f3121270b3172b044edcf41ca05d5fde88fe31838d84afb4ae6cbfeb49f7483353b628dd2a983dc6c6a1d8861834d838610ec74642aa5a9c156aafba469ded25a6b47e3e8918e173168b08d47cd95d1ef2b6368067be65aee4e6549c814ce91387aa4ec22860cf69836e9202fe950a5c231d8476ca84a49e6a9390970241e5cee063160b0899f5429723cfb18735eb17a877694983657a8b14b6508a9d48a4589a082fed09cd8e5611c3d92c600062bd6202e770a93159fc2b98afdd3887eaeb013f1901c6947157b4ec1925d991249a8702a36e92763ea9873d73b1847311b1960807114a0624b9a17479a081693723812c629d6649b7a9554ea260fa98b000c53ecf1ccf62e7488e9038c522c2ace9209fddb0a0fd1030c526cbf12ac32654685197db1630767a0093046b157dab82453a48895ec87175d70171840230718a258f3488931dc295d9e6e1b5a8462ab1ca3922ca51a63520d28f6af11fdb89ee7520e7e623bb1b4a0a79ed2e6244f24f7447b47d63c5240818a028c4e2c1b632ce5579bb34f81f330cb000998074bc00002062796341a3ee6889366930763135ba8313de9f495e7f56821030c4dacab32796384498c1663438b52c00023136b4a6aaf925e10155353b6051898d884e94d95543354a90ae312fb67c5d47823ada259c412cbff9f07359322eaa995d827aa668cf12e27ce4429b129bd1983282dbdd5ff99c416773e4a97a6345763219258d2ceacc4f439496a2a128b69b2ca9ba2ab27ee90d8a2e6496a43a8a5fd4e0a301eb1f775c5f4b174928dda116bcaab2c9334b9fcca46ec9d947c8dd24d1d32479e008311eb4fcc14f98839ec9f16b1c618f631b7613c82e39804d0b203301451288091884d8a874f4ed95b17320603116b6f4cea2a23a8a453fe8b4e3b2860430b09681a601c620f19d7ff1f745d8061884da88fc6cd7a07175c70f96207175c20807d74a182b5a185165a80518845fa98e5c8c83c28e05de8f8d1830b2e2860430b07dcb871e3060f2ffe2021f6d29c3639c2fc6a5ce0e0628bc62db4f862070f0a38097c870e14e8f051811decc509960a3006b19e6688db107b8e34be2bc010c4a63784949acc720e4fdac13c747ce110b871e30b37c19916366a6d542002369c0023107baad95c1634e7942b0910fb5dc68ee93bfd58aa340930feb0c9da2c8f1d646edcf861999191a4f6fa24a87dd894bec841c8f8c9fa2c01061fb612ea7312b14977eabe87e56a4588b834e13396f400230f6bceb997693b6e9fec9000030f9be5df989b9208f3173b0aeeb088a7c8916b722bf932765837a94d41ed5d0a91d783a30e684ce9ee543dc4cf0530e8b0c6de9e9d8d648e9cc33a3209a1d2d6cf9166c50c861cd6d3eb31e1b931d7eadb408f0c681560c4814d7a82f9d944ad473216c080c349785f4531479afbe002478f54acee6000e30dfba6ce4e49f87cc66472c32aeb39fd5857ea4ff2d2864dc9cc3d11f219fafce307186c58536d18bdfd2af9081b186b5864c7259153884138c050c39a42928c4f427de3e7cf7e581b60a4a14f2aedc5e6eb8adf381d758c808186cd4b455319efca104767582ee5b09cb444d307b119f61225b3428e38db49a50c7b66f8202b6855483f21c3e2417fd9ae7592bb1f19c322e6b12774e457bca012c396d4998c973bad4a801186ed328ca554bd3e2584c0b06890dce157173f4dea0bdbc50b4245d294834aba71c37778917a6ce13bdc871716c9f9467dc3068faae9c236b17be4c2f627e247c4445149e52d6c9b7fce62f0cfa37cd7c29644f46ee6a8562977165651691b3b666a248d30d085ffc0010c2c58e2a953d432a85acc609dd2a71c51a6bbc212d488d815be6febe71c69aa80b5a1c5056edcb871c37d58612f751f2d97c829c85739d2ec7e7ce126203c8051853dade2472d11c1420873a4fdb01c3f34e0ee6301fcc35b023f74fc701e4e822e6edcb871e3878d0a44c086046edc580ddcb871e845626fc08d1b376eb40eb3811dede9c60d1f8e838b1f5562f8000615d638cb99c4e6ad28dac91fc098c2b69e2b8e9e51b29353340830a4b08820e2ce8711a52e84a3b08c090d324e74fad41f01061496a01a161f541e1dd3613c610f4975e12ac5fd1c1c5d78c1050ebc5304184ed82b534e49834e32eac49bb0a7e60e093af987a42447073098b0862e2dfd8f9ecc1ac058c272a52a8d8831ff28f52821f1f09ce92921e475e0304b0fc048c2b61d62e98a193f8c7efc602ebe4038ee92f3d000136020614dcd99f63e8978a54a8eb49101069c097c008717308eb07688f221686e9e0ff933c2aa29a8a4759e5aebd0c251a043d107308ab0e89e582a92f840020611eeea09ea39b3038c21eca525f427d1073084b0675f0e8993438a282309747c9d276004614f4a836cde3ced2856d9010c2070aa72065d414dc907e307cb9885b228d252a79c72a495f1085b892423d25e58685e8a6552ff68b290e379936251617394ee688f1e8d62bb1eddf1308b622ddd41ceb22f53d750acf16f528a9da4fd47415190f1fcc412f2aa5afea4525a7a62afd2cb312fef928c9c4e6c6bf246e3f59cd83a4f0acfa56f629d9ca9d4f948139bbc106595e79489356a95385d95712b2731b16e655aadbf34e7675e628ff55893731f931cd312db49de0dff2f2bb1e6539732652aa5e29694d8fa2e63fea4de15b69cc4a6e7fbffaa2c87d21b49ece731040d4a78adf526127b58e84c395b4da56320b15fff5de67c7b9282e6115b52763277083a62bbf39c62425239e55823367da362fcfe93ba29c38865d4a751bffdd1afcc22f6d32393c9fc94127645ec21a6ce1847c9d49f9488656f739ca03ac66346c49233c4f5127e692e520eb1c4b40a29cae58da62b8658ef42ca7712e62cea85582c57105b9dfe922c1162517b41726cc7bc680f62dbd2b94c9c4875b916c49a699d4c8d2c0d6a1488ad6209e9219597e91910db797dbc8a2661f5fcc3fe13520e4939eae2f4c3369f643da52e9913d3874da74b9b3b688611413eac3d397a7abe30cbf7b085cba9920e4a9e9e14d1c39ee9ac2ef845f2b00975975fbf76b3793c6c16d7530a21246ee97758f763620e422f36e376d8ca4caebeee343e5d877d6299c95b3dfd4c231d96d5ffafec705b99c6396c3a230415d6446cac2887f564f03b3d6b9e9b837158e3fc6ae4be9cfe3a0887fd4c76efdc6d7f26f10ddbff45aff3aa10a306ddb0a9d3b3d9be1d9121e7c8c7a20d4b1ab9591327a9ecb061ebf88d28224a4e9f59c33a97bfa97447edd2500d8b8efbd1b49d3794d2b0a7dc914cda869c85d1b0dae5481dcf3c3d2b6758c5f4d2c354546fe4ccb0e5898d5dafa69e5e86254e88dfbbb719274d864dc5d248393a55c8e1316c3f273f8a888a611357d2920c396158be9347483a984eb980614979520a164942bebfb087dd944208c2ba2e5e5882521744c6a42a22a40b7b263399c744e38271008b2d6cd79f62a7056931885a584baee512f59da259d8bf4bcf68c8e1cb2bc3c296aa49a83365ea467f8565430cbdb82a32fc56d8537c8cfc1ff13352852557ea14c53f78754d854524a19e974bc686680a8b271d21a84d0e316329ac21a4688eb329595ea3b08684147cc27ccd24a1b09d4a69f4a89893b094272c3247c7519d7a6672c296c7fc23254f1356d5d8719f1ffaf6e223c082099b7530cb7c3add06ab72a419dbc148012c96b0856ff40816648f5976062c94b0d78ffa4c19355a4a9e844d7fcc8cd631ec8891b0874e3125b54123032c8eb0995caadba4ba621e95c3c2088ba689842042ca18d5043e80630058146149b1afa35c8e9cfe3ec58208db58ec49427c4d2cfd048b212c1fe27e30eb491f538383470f828017602184c55333e8146af4ae873ef6c60df6e13fb00882b93b87b3f1a02a734a99c00770f0c002089b8e23256e90fa0fd6a493884dd131a4b5201fec61cb34e985b81c2feec1967fa2126b6bf7cee3c1ea9776793da5b0d8c196a12bb739c35373100581850ed6f88a267367eeb4f3d0b1003f6091833d8d06c94965646d23e811b871a37fe8d8a24ce003383080050ed69c34ab2757c94c334953089ed5e94953089e999e3485e009001eb0b8c19649c964b2c2fa4408f340036061833d7d86547131979092cf91f605c251767c78173a081635d83ec84dfbafa4bb843447b68e1dc88b0adcb871e3c68d1b3fbcf8c1c37ff0306d011634c0620678ceb31653253ebae0a2b190c1fe316e8eac182c001631d86425c8bd1352f3c985050cec868c57ac9d172c05911446772dc3156b480aba1d3f87e69d325af128f5619d64920e1c3c7ae48ee4004c3ec860c5669eff93a4d821c18439d2bee842878f1e3a7c70618837810fe0483256b1a74d0fb95b2244296fdcb8a145076c6861430236b4c00002dc1790bc422143158bf2dd52d13194bee81b39c848c516f2766de65061829f2090818a4dc7afe0e1312776fd1c695ff8e8a20c6f04324eb1099544890c396337e94db1c99cd31f3b9562d324825eef4b193b9c48b1fd5d123a9a734c311ac56aa1a29e3855f15415c51ac4595db824423deb50ac7f615572928a27d408145b7e8554f22bfec4a6373e635a2e3db156a564369bcc4eecb94f3ddfa77062f35cb9b7a3376ce6c826561b11c274be92d2a70df070800a3cf170c0163d7c2c20f1d0b100e5840c4dec711f3353ad25139b58911931844f17b3c3c4666339eea7d5c9e8f94b6c97d2f689c69225d6941c3aa7995c6b4154896dbeb64c46b3c8a9674a2c32868c1ba3f3a60e3193d8630aea1d548592b21149ac310659e1335494ac4824f648bb26566648ac264beea40d27424c1eb1483a31bb167ad342476c327f45269113f3dd88fdf6cf7c53be2022653218b16509d91d82502616d345ac17527518cbebedd41d27c850c46a2aeb739851fb1994c0202311fba58c51d48c8f883da6e69c8f8f7451f3432c26a3d63c5d6aae20c3104bd227464ce53a85d49542ac61af620ef99449319528c820c4ba13c6aa34eaa5902b19835872ce8a233648ed9f91e23048902188fd34a55127a28498e9128855d46c658aa33ef54f302003109bdaa4f99539e730ea23f6874584a60b11fb73c8f9998d0c308007057e48c08616367cf8f0420b04dcb86164f86149918408264ca70f7b141972f9b7728c163e6ce9fbf25965883b7aef61db4e8bfd29e63d9d1b3dac215f3edbf988a574998745c7e40cbaf48f77b8e061b9889f375208afd1f40e7be9c668fa6b279896ecb0c6b9184f21666656b00e4b5ed130bdb4e1314b3a6c4a87515399d11126cec1ba8efde4b0dfa8eb4d91734dc83a0e7b8ab7a3e2fc679e8f705854920de1375c87fcc91b56cb91bbc295c613df71c3a2a2e529e993794e721bb610d18d70a6d1b204196cd874be3d15435fe9a6680d9bbe14c95446496925870832d4b07afc9fa89bd3788999051969d8635c76509e3744c96905196858ad7e63c8fa46de3c9d612feb5c79d2291d677266b0927e69480c1b1664946139cd24a3a9e36eb626c32633e7937995e3461dc35ef9bda967a2e73ea80a32c4b0585a528dd3fd2904717ce1a38bc397118625891b39329506cd18f422e120010f1d8c638b7360d847439ff4d093d6c48843c617165d22e95acadf06647841193b9125722ec90fb2858c2eec3377f539ee8488b8bbf01fd505fb0adc7dbc7161dbee08d16c3bada29d23cd0b55828c2d6c5eb2232565e2c3c62e471a12646861b94feb4e5b73fce01d3fc805081464646149e2b344f08e16e42a820c2c14177bad4656e8c804dd63c79940c615f6e0299e61a3788d48e5c808b009bac78e4b820c2b6c1bb6669e4927471a0978e83006001ec8a802e13e85a4a139e49c1b37d4bee866820c2aac9da2768816c642bc3422923185453d88d59cdd2dd341b3910106dcb851876307175be8402b0020820c29ec1546060d9354c389d89180f1c13bbc2081fbc8a3011951d8b22a6f1afbbc9fff1c3fb80136b4b0918108d8b8004e410614f6a8763a6388396892d813f6ce0de1b7938da54b35418613164f3248bb0bfdd05d6ac27eaab6b6c7944cd8664bfd0961f5c173a704194b58e385e45936e29b4ea68425afa4545de5e183dd4190918445d9f927113b20c840c2f615eac63787ccfecbd1818c23aca34a7cec64a7208466843da6b061ac32dda7f33c414611d6d173f9cb94fcfa91950c22aca3e4e6989db6beb90fdec27d1805c818c2aa21c1b7762d73f054076408614bd122e5abe4a782c685023282b0877e3e0d754106ad40c721810c202c499e4c51444dd58f3447da0fa202193ff0c11253854efc93a783ca73a4e9d8c105178cc3bbe8c1e30e05327ab02459492f57e8511f3f47da0f1e2c9ba67327278f784671f0e0be1d32766078103a318d9e652590a1031939d87e5329a96137f37918f0e1dc18b8714371b0e5b2a8a92b32b9aa93107003c74141c60df6103166a905116410491c26604f411264d86009a299a1a683baa8979141460d96ab6031b2592ab44719345892e67c19258fcc6ec53ebc6019335873924955044fb796f70a810c19ac4187a68894f3e418f3043262b046dcf390a5d38cc60a37d023038ebc85e7682ac88041162631a2a4d01c35434c4f2109b97417a48952173c1c058ec3ce460618505eb1a4289be367d055db87173f7878d1400c57ac7ecab62a049d8289498eb41f3db8c00ab4624b397434694a8c7f261d21062b56bf5c9bda93b4001cabd8644efd410915be29d3b13c085121c5fe9142a8dc182e94457c0c80c62856ef1399943245b178bacb8c663ae8e4141fe9430566021fc051688462fb8da24ac2f5a7cf1b14343e81daea471d4f5115d0f0c49ae44decca0bd5122172e3468e1f9c83d0e8040d4e208d4da049f7428a9211b4ce913c7a28d1c49263dc2437bc4e57888903686462515b7244f3d42ed88d8955539408416c2d545c695c62939392c7d1bffb492a342cb148499d7ba2fade55be12eb7ab2103a935091fed1a0c46622a69ae66a9a7af8d881c624564b7243cf437c34bd35d090c4f2318989a57653583fd979814624d64d9f74c4a433e9e713125b693cb5eba88a80c623b81bcf212d7d069576ffe2887d47645d8874b626e339d2ca06341ab14e2a4bb9a3e4d10bb21b374a14683062c9393adfaac8dc7feb229499902f283f0f4043118beaf29ce739978a174dc4de418f524a6648f29c828875266a3891ff3b62cc21f69429471a131f323d34c412cc94ca49d4a4b4c9a351882df7a4878a71cdce335ad8a80ad8d0c24651c08616366a0236b4b05112b0a1858d8a800d2d6c14046c6861a31e60430b1be5001b1588808d3bd020c41e4975ee0c157a2e3f0a061a83d8eab62b59492cbb4043104b38eb4f4266abd406530b3402b1c49399141b46ce544a0262916a6992905a316308cd1f96d81b3fc5de90e792ce0feb8590d26dee47cb956a028d3e6c19a4675d501283c8748e342d786ce1058f1e3a786ce1c58e1e4d2e1f41830f9b50b9b53e613aadfc3dac3d7a454397069598ea61d18fadcc98217abc4c1e3633495e418ec88f56c1c312444a32fde8acf02772872d5a9291f13bca2e09edb055f891abf395a3885c1d96bfcc78497c9687a0418765ebfb848e15537fa939d270d098c39621271e2a2a2fb6c0414e40430e5b5fe5d4a42b7ae1734d230ecbe79c79e29472a4f1d0c13e921d1cf692297e6738254d049d37aca11592e7598b0a44c0c6d57582861b96142aa24ad257dd1634dab088b5efd0f967c31e5396b7863dc3835e986cc678416ad83793e44e337213d048439e4c6a94061ad61bad0cb1e288b5ceb08f8a12e1fe6c3ec8b00434ccb05ffd598ad08bf9c39223cd87776174d028c3e2671e26afa3c68ff91c693ebc0b1e4e86b5e2abfcd4876d25c9d318c39e378713b93277c3ec34c4b085f813f4bef6726961584fe9539f543e57c93818963b35317a0531a163d09240e30b8b06dda1d73eec534f1a5ed86fc53b2cc61847e68e10687461afcad591636267949a0b8b75fa2f4b957bf3c9902bd0d8c23ab964d069f23a05592234b4b05de994166fcec2329f52a84e50cd24232cec5d7f7dba34b3028d2b2c3f162ecc57d40a841461477f8e4c1536d115d35289b3985436051a5458773572f44ed198c272aa67731012f5d426694861d39f962c9ed65ff8e8220a7b86454f7927a9cc5f1f28ec39e87904b992113c25475a49018d276c173d8cc6bbf06311e384c5c25cce5bfe3f41d239d2b8c091a37978c13bd00b1a4dd873e5cf659223097c87a72e6830614b3762a306351265fb4163097b1271ba2b85203f778c1296d328fa6bc26eec4be91168246193da9173a99442aa6646a081842df78cde7a871ea5807de0701e3d76a4802fd0a30b1e0ef02e74f8e040a2718435a792bda797238a0a1f20d030c212c2e813b51947e4ee45d8763d469a48a373441189b0cc9acef0b9c26df27e088b5e6752b99372487916c272211f339a883947ce20ac97ae84ec0dd6bb1107c2267f6a37f7c72621927ee0ffca57521dbe12051a3e58729986a9f21493ac0e0868f4603df99fb98da04e4bcc91a63c68f060b3201e97677fc36868ec60534a04a19642949cb1f3e15cf4c81d3474b09ebe8aa9a61b7926849c0b68e46049299ef8525d4741010d1cd0b8c1e2d14473758ffa0a417559a0618335c548497379c612f962021f3d5250834d444b29c90b35d6f98277a41d3d9a043c7498a0470ff4c30d964dd0a001bba946577798c6a41c6926e8d123078e1d49c75d1d68cc6051f92542c8417c54a021832d55921dd4627ade9852051a3158d328f9a36b933725a9458e2e747060c70e04d8d0c2860d2d6c6861430b1b1840810e525668c0604b12bf3f82dc4e2a4e011fde851714b0918108d888800f47810e053c057c788e2e742c79c59a331fa6ba7992955cb147d0dc2a4d0b1da2ad58744a226653c95153b262f95c49044f4a282dcf57b127bd2532419f54b1cf84abb93e213da33c23158b7ec9db9231258d35a362f1de24f7433da7d87e74fe6c3346cfc9145b10d154fcc939ebb42cc51eec84ba09e93f4d6948b1c57c31d739f1fb93ca28967c316c5ed75f8cff896249ca33d8ee8c4e3c4d28f688a7aa3fac4c4a94106106289670a3e77feef37e4e8430e313cb65261d4aaf089994d0136b0a1ae13a92b013eb7c898ecfe9f3c9a0c38967772b84b51c5d6d62f97839d52751696a249a58749059522c8d5e7091894dc88e216c9744d3939a81893595980d51bdb029f54b2ca3549ea4442647f0b8253693f3b3a527a5124b4e51427edce029e748892d6386587cc926b18ede7422d6323cff2e893d874a31a44b1f538d29125be988164ea98c23c20a895564c57c31e9cf596179c4a23ab24aad7c42eaa023f69ff41f53d2a13f7aae119b061d629aa44ed1a12a4998c188d5ebf3a6cc1c392c052d62f9f3bc2394ca54d9ab223619a67310c29489d8638e4f2adf8947ae9806cc40c4a274c910372e99c5acd030e3106bd21b31c36df97924196299b4b9312aa52052920bb1650521399c890f495cca3083105bf42ed1b4b490847a10eb260d49a6db50229a48107ba80425331f883d7be594ec5d01b1965a4d1946a27f58730c4988d47bbed9493f6cc2c3492f4d39d8eda50f9b7fc9bc4d79c287753bae799e91ec613125e6916235e7a9873da81ae5253c88781de661496b21cdc91c73c56639b207da1e0666e06119757182c8195b71d43b2cb2917eae62478c5d29c00c3b6c3279c328cf192486a80e8bdc0ecf5bf32b22c69c470fbb07cca0036a4953b03033eb67da0666cc21496137e9c9941c69660bf6e1030108d81d3b780b0cdcb831430e8b0a92b77352a4b9eab4b0a1c5f962461c56add0d3f01b319fc8c3619ff0dd1144cfe3423f740b33deb049d0257308492e4f4b6e5892c8d8e13f5afd196ac3a6fcec7beb3b366c6a9d9582866d7f98cc58c3769f7c57820efe3fd60c35ec213973ec4ca5ec5833d2504e988186528e28c152cac9b22b6a9a30e30c9b04931552c823da79106698614dbe274cacc9942c3e17cc28c33a773d1764dcc8a74d86c54f2879116b3eec49c7b0df694e356b717e2a27475a4a8173f145067c38175cb00f0ecc10c32ab2749c50f12f85ca0ed01961d8a266f88e3149d29a090cfb79920f251ed3f5e65806667c61cf41764348ff4862ed0207076678614d9a4448c2e4a5fa4eab162668ee02033e4230a30b5baf2835973f8edb195cd8328d841c35c49c54e4c50f1c5eccd8c29e7feb525ec67439f939d270f0d0410247aec347066ee4043e80e30433b4b0079fa4d28551e9924872a4ddb8617c74c1459a9185bbc1c50c2cac49b33b37f2ee8a4e7630e30a9bce6afeab0af96c762bec494d4cd9b3296848b20a7bf83f1515cc8288cde840010eab2ccca0c27a22693d478ef4bba7b07eac78e4adbc14969f14c742cc4be7c18fc2a27408d13387a084650f852a98daf00c727fc292828a2c61c962526a77c21a7c644eccdfa8ba7913d61c43d9c548ea1936135651892b6a649a98474bd84c899594e38d6d0629611f99274c0ce9a37328097bff755eeb5c21578c84f52227ed9df5086baeecd53469732731c25e253caae9209447b0089b99a97e9ffecc204b445884883661839686b08e08662313acf22e84454de5637fde41d863caef52cd006149329ad89844fc2691fec1662a627fe51474c8fb602b8b21954a63a9afd4834dc5cf513c68c8cacc8335629d5f68678a7f075b079946ad9a8c9f12e9605322364a9c08f5399e832d8a0c2217344f12691c6c6a79a6924978c60d16a552c94e17cf44ba78860d96bcff9b54a894394a336ab0049594e9f9d5d7c93368b0e835a153e70bdf09eb8c196cb21f73e75c1353a43a43069b4e19c33c04139a3c3a23065bd4683b7e9b43a95267c060ad1b11cda3c9a81af5159b5f0afad2045db14953a1599d4c7f74add8463be8cd8dfbe1192bd6642134c69c33e5cc56b1555ec93925554999a92a56134199aa301a62549a8a25dcf5899e1484e64a51b1c59ca04654c920937f8a2daefde6260d3aab9b2233d8ba63bcb837a62133ca600dead48920b763bf3401c4608fddc8a5413e835cd18d1b993d10000c36919f902f5529692343418d57ecff991fe3246b87efd82d7c87730d576c227fa4ddf1af70a0462bb6a094c7987fb473655d83156ba73f53998268156bae9a3c3a09b1fc28ab628f7692d24e7c3b872515f8886a3550d1811aa75894d8898c9fe227d92071400d53ec3fa6a72b4709c242be147b0e17c4adfaa4582fd753c476b4184ca3d8e2e90c45b1460f15cd2bac4453532852b71953681228b6dc3e99c46c3aa1ccfec49aab73e68abd53edb0271659a7f4d8a8c68d18edc41aa4e728cdde38b188be9b0d7a43540b6f62df11ef91f9e0e174a5892da6a5cc792189cef94cac9e72fa203b5c1ca92726d6f0a382eeed58d917bcc4361a46051951ab6189c53cc9b49a2f35c26f1e3a7c300a4ad5a8c47a633662f1a27c7f6549871667494763d2d138810fe0d01a94d8c4682ebb114a6d4e4a79a831893dead7281d84e5344b4b620fde6134cf6ef77c91d8e66af238ec5003128b85188486576dde94faa1a30b2e28400c87114ad478c49a74c80e2251576c63870e351cb1a614d2fddf9dc8309d466c15b3d6b9420d46ec1fb6bb729569a38a69851a8b583b2be4f815b98da1296251b9c465d06372f3fc65a891882d47155193d2f3e5fe86885572494a319a79883daf7a66cc7248a322436c6a4e28df15093ac624438d42ac9d62ae7312322196139e6c6743968ad319c47a7d7ab516bf991d62186a0862911fbf1356f3fca950d708c4721a57521c75e12d3c47ffe0410d40ec1fabefa49925479add0e6afc611155eb4b6be39df2c39e42b89441a7ffc750621f24e01f5bd4e9a0461fd61483f6951e299337ca873d72fe1872e9203729191bd4d8c376d9d9a5fa749f1aaf861ef62464524a04bf5237b13c6c7a91e227a6cd8a62e648d38187cd835abc183e854f56e6482ba60635eeb0dfc9f8a31b96d7a593802bc01520e7811a76d8c32a438ef7ecd528ebb02521c5521a8b27167391430d3aec3b7bf95352a99d4ee7b08810226d377ff5c308e150430e6b4c92f2cd07791cd64f9542129f9252992c7058f2e938fa64d505135e23e0d850e30d7b68f299f9132194929f35d470c37632726a55f8ad4fdd0a74a4a1461b16253be8c5d38eb97095186ab0614b4f57193f67aa90931200861a6b58257e9e96859c1a6ad843aa1454263f0d19822c0635d2b09e986e8c4c3f0deab5a2061ad618f5e2a460a982b0e82a6a9c610f6aa38990bf7029277968c0b7d091811deca307175b7817a7a86186cde62a8885bcbe742ac3fa29e9ee7c9b62bcce93614deaa35f9d5e89a4f263d8e37c92138f1836912608331de463653c0ccba7d839f601c3ba1b3ffc764afac25699839279417fd494e4853d6fd8ba7c7e17b6b495fe21346432bdb9b0e51cde252be95359f61616fb3af364a5fe84a6b5b0a93e8dd9733af6239d854d6aca3031f9a53e85b0b0a524a324f3b3703289afb02725bc729d87adb0e7f0594f72b579f455d8c2c86876b6b9319d4a8575ec56e6ff5476ac4c61af9caa44fa9329e7ec48618d7b797ba62f7552721b1988800dbc1a5158ac22e89c26884f119350d83bc60cdf143d611339a8fc31770c575a3a61895b6621f543a72699262cd6d7dba9c1c486da30619125d39fd29f59c29aa794c83175124b6a51c21e94aec9b0b5a2aa2b49d84ecd56fca0ebe24404094b1e21d61f17a752458eb08d7dd26019a311d6a82b2721c964e2a35884d57b435fea9fcd978244d823a98fa9aa0afa2738844d99b48a984e42583c97e8de88e94f6a82b07f3a75e2ef3bc9946240d892e70e9949881ce4ff8325d9f9a7aa4d5d91fbe018d47fc573dc836564a64bb2533eb9641da0060f168b5e415f8ab27697ef60ab8e55cb34eb1774ac834de76c84931e238dfad4c8c1964ea7dc07f1cf5f1f06d4c0c116bba35e9e526adc604f96274da718734d551b6c4157ee1adf10d724590128d4a8c1a99bd3788e8a1e6ad060c9fda9937650951c626edc2853a8318325a62d331f19b5538d6ac8604be91d83d797889b758d18ac1df486a042f8919b84a45003068bc64d399c8588d19a5fb1869d1c33235498ea9a852bb6acd8b8acfa8ea4190b64d10a834893549ed81d9723acd893ce98a573d2f728a44716ab58e47a6290a2a4a98654b1f926ed8c32f27ad74fc5aa5e5b651f3327f57954ac49246a074ff9536c3a5e5cdd5c2dadf04db1a974a22136968af92ec53642996ef905d1213a29b68e31071929378a4542f0943a42cd05998b82e49f534bfff2506c299e886d885bb79d048ac5ae3f24d597f489753f7f7dcb2ea6157962bda0a92e63c8314d7627d6b8396f860d9b13db46dedb59dfd58d37b12925cb53f81069628df1e937834c26b6cadd15fd218f9815137b101a7e2561cfcb73893d338d94bfc925f3c996d82ef96ac48c9cf64eaec41e561a468c061552c39458f4464f87cd1c7d623c89adc27364e45e128bb00ca6f3413eac8ec4162b546556249b4b21b1f72599e4a5b864563e625ff9dc1349a78e5843ec6f69f81bb187fd89f9533a484f62c476a5b1328369116ba99ce6ccf939c6a0a3883da694f5a4e3396e3d8958b4f369e8d420625f9133ca2e82cc953b8758e662c514635213fe36c49a7cac4ee387247921160dd1ba6a639210a6104d96f464c9412c218fa6c58a96f4091941ac2254529a15d3c7283281d8d4cd475fb90c20162127f96edc9d8c95f9c31ebe236f2de9ff8f163f6c41d524f570756a31a50fdb66f030b247848929850fcbac4f8c31a5184cb4b287753de2e9a6ea10ea133d2ca7e4c6b194c2c7be491e364f32f427da040f9b58a8987746c6103ae40e6b55b44a9f672985186287d53be914fbe398be8bd46153a373c9ccf42dd1910eeb5dbafcffa92a2609e7b0ee76b449f54175332887bdbb63acd51de3b05c8863419a574a5b82c3625ef97a56ef32c66fd8538fe6db94e36fd40dfb0469c23a4e05a552d786c524c5290f29412e880d5b5986b50d7769e1356c392178bc9157253353c3f627f387244b23cd290d9b7c5e4a232c09e11534ac79e9720af669e2597506f72ac83fb598d637cec20c452cd3b2f28aa6c9a20cdb4e12d22ffa75c84921c32654389910631003598c618b314ca9797d52d12ee741021d7605c8420c5bea7e8841358844b979904518b69436cac60ade12b200c35a794a668cc7897a500b1b9bc517169bb4714ea8f153cacac20beb464d22e8853c29bdd48545643ecf85bde38375a4d4a4e7d45bd8928eb093d692e4dc1b2d42165a584d4d921e6c6b1438d9c13ab6e8c1e38b1d3d2ae0be80733f1690451616d9ce52d24b2cd3c7102b0964818545af65fa2493f23705930ff682010565718545e28eec0ba33cda2709908515d64827c42ae5279d757a208b2aec7dfd219fa69f54c711e81e7526e81e3b34900515d6096a6b5e969d19b298c2f2f7791f1e352f72c964218545455031e7d131a6a5d90e59446151d64976048d0d2fa1b0ae06a53f29a5ef49fa09dbc9e4579542a9960c2238872c9cb0cc46b5ad53cb41249d0a3cf1384b43164d58744af14bdf2d1d9398b007ed186c4563bccef912b670a2aa6ad793049112b6ab155de59362e5938425593495d48e999c1c12165949e1a4a8e710b47484ed440ef6312ae798146484e5eb2a790e22963fe2222c5e41c548d269e2a44a84d5e7529d97c4f8dc9f21ace6397912233f65a708610d6a4a77a658ac7c1984cda32535a2360508cba7f8f575c93f5863e4d991216f9c657cb085cad15344d59f24921eac1f3c4728530f1a51e4c1ea25725cd8901426b2832d7ccc6b25d49ae8d8e9608b6131089136dca93f078b85f6a8e4f33da3321c2c33a99308a666449955832c6eb0a5dc94f174230793be492e6461837d7249cdd4aa330bd1b2451635d843fc24be7926049d3e12b2a0c166f3e19d4ce8189163b29881ddc8420676c3b2880108b28081dd281aafb01be4b8620d3a87875f55f40f338d562ce6c1ec6ef53a5de98d1526e81e3b10163456b1a7af8d2563824ad26ea5a18a7553251d9983aaa0c2948aadb2e3cee9dd584aeca858d3c5509d845af4b22802bef09181097c00c70a689c62d3e439844a0addd4a072e3862916f911414da7eaf4a337eea34717814629969c421f8ed6a8c43066e2582412860281502810c340d9e51a00b31308201838240c85821181ac0bc30714800347343c52383018222012140e4562a128180a84c2c13020140a84c2806028149105c29c027b00c052c83103261a52f898e174d53787cd44a769a97c6bced24558fccfc7dbe4c285a3adb8410058e0fd9a4158e9a9ed5d783c96aa4a778c51d5351c55ca2db989c5f1ec2d87146df5af768563a800fd0d55844c752edeabd4b13bc665b8857d38d755164b6c9ad13bfea2d41a637b6eaa25eb58fa470560da4710f573c1fb2bd61bf0ca5ebc033ab9366ae3cb97c5c9f540af5b106935eb4a13e48bb748f4297d4a6f6af4e225c60f7759e1e286f9ded4914fe545e41b99e393866f345cf66aea18e7d5c2c52417fff9f94406260817731f2ec6b18c00e6ddeafa2d0f76b735bb6c5b73af328c2a5057122d01628a5f3eb51bbd62c8a46832048af711a4dc31e4321e6000d79ec828ba5e95b3e2693c830f0027a7e732551dbec6a2b686a5a9f71c66afe54e6eafcec2c6dc47363c0e8c76463eabe44d0d97440d013f6f103061d7eb0f508a5e1d4b814799d3c4af45af0ca8a2d0ca93ed7ecf9d4eb79dee9980a7c1fa505cda488330e005800a1ca998e288b3af50c249433909431db023c5970472e5ab1273ed7086fd1d285f503a40908b3919edde52d874364f417894be6dfc8832760f90eb02e168f17be41962c9b39aadc73a31097c3886cc968f30d1fa85c0101c38103fc974f32f55a3e27df908672362f0257dee4188d22bbda6c08c110c5a67b51c67b80f38cf48b1e19e088f845fd62d22320a4a1489e8dd51b395a6e0f894cfbf2700d1b01cf83cf3cbe573229a23e06bec4a3a9d9c4c4302053ae617dd52c7b38b9053a5a05f158c02c4fd17f81dad8c8e06a914405f263d9f2cb1c75dd2194d79460dbd26eae91b6dd32fb9718c7eda6bec763fe9c64592be8bdbb9d425c6604dc79d7bc23fdab4830abcaa73ab3d812cc186949c1dd02f671183af682aa556e2b71ae652afcead3bfa08af0f33025da873efb046814684adc17dad0125f6ac94de88146b00b267f24a609901a1b73ed9ab9a780d1590137cc1c3b35a0c49958989971bceed2ee2403a6f3083c87860d20e9257d87986fe41fc3edb128c77f1ebe7fc6abac0601fa0d5caa7f8851bb4540b4ecda838b6e053e1e932049670804705fe60d783471cf24e7b9becb09f4b520bfadf47021a1f5f744ec5a04703608016d6ee97abe429717b5e8509d003f40a4e2efd8f0187e1ec7910cf4e84e07ef830aaed0c8c4b0ad960877f1609d45c335408080e2d59e81e70e56d28bfcacb7bd1e71f0f5d7a8a53c80996e28d48233cb02da444d8d8864d708cac0d4b2cf8a51074eab8487a438105b32e6da4a1ddc0112f746f36ab5add844dd4c740cac66067f6ef63d08219dcdab4e8ae71ebcbf29a4e20b9e42548bc424eb013be680b9a7782d863257bfdba7ecaa9e9cbdad3c35d5f91748c31c5ae2d04e5e4106db1b061a27318075314d746024c6a9a8ec2c64d4fa22dcbd179c9c83dbd60c74b739b0a3c4e17a33291de45e543230d5d85b4c31d4372246ba7a3918e70ccae78c99e2eca354a8170339df6d91e345ddec50a058d2ac7ea01a57f7e7e612ac9be18dace92cea8a5d17a2fa9ddca46086cdc35159385eb6a04ef0dbe90e19c9097a125235e4bd9a27198162bb0816dc71d6bddfdbe43abfab427049d226f59049300f309f685c607964a24f97c29c1a380f614589a1ccbd73826d531302784647423febcc06510acde3f501dcc183cd6e979efeaaa61e377ca8b6f1f1f26dd7794e86f043e82da13de6ae880e1717d607f99249a506f65b83117718af3b5df9fe236c5106e2e6483148e89052256adaab08c8875d1bece97f56a65555bac7d5e84a0351d95bfce533f171a98197a114a4abf0bee8bd567fda6f6e69ffb8dee144d8fd0f6461374ecb034e2111121ea831d4d6a21a39e953dff50902a28d07bf3ad4040a98816137a4243e80b6da14b52b7aa7df5533812d7625a43eb6b6dad4b47b77ae3ca3dd9220d919a16a2c9681eba107da3cfa451418b01d32befd4cf054cc429813d5b127b5bfa62ff710b6b50643032cbdff054762c896cd5f0f80cea410ab1797e509b14191c6e0046f749e8d93383980c044320047bb8238a6a27af1d558aebf28c2a9e78b475534c47a26d8ce51c4a29998772de9baa01b01b49cecd53f8d610d0b9eee836a84b045aa64069eb9ca7494d6d85a07671189d4fb760ddc7839dd39794e1d8da6610948dc0c922a3c226775590a754835e1bb4475702cde04b2b580216c2b0112f49d0fa829554405505e76b8ff238335d616a86595e50a9ba80d8a1c1b324abbd31ff4c98ed4d85123dca0794e9b03344fd7e367e821b559d14fc8e8d0a0e940d22b765204e5f5b606600e18dc65aa700506c238c68c433260f414ca72460130e4dd92e79ae71446f28e70864124a0ad0932524e5dc700c298d89137049d2e404db2da7b1663049a66cf65ba2baa615cc9f80d9e83a25042c35a137e4b687274ef4bf731a439f2a6f7e308cc7c041fbae7c062a15e691a35ca9bd2ae5c815b32bde2abe50bc517c51f9a1f895e2a582df28c33e246ec9ea46973013f4ae26fd40c500c5ff140f150f53f9a8f04119e917be570d55117171d33ca3b2d4101df28653a7c4cefac780755be238764be5a55027271e8986d856328a34d7c6e8bb562b7d57985ae68582bfa8ccf700f6ad6ddf98761e29071e90b8114e909a1fe84c01925c479fcbbf9a5cbbda2fd737ec26868e7ad8f58b076ea6d14e986decc537b670d49b314e4aa959fc7ca79c491bc95ad0e55398384f12ae6f3c5e7e0d8231ac9abd32c8856b9aeb96506d0eaec797934f544ac00e6406666b8306659c4a6d8339a753c7154a0e5ec48241800678e60ed801e71d514dd71b96bf3439efb51c846ba23d7161bbeb6f4ec4d447d64cf7001dc32d35b97b3c376639f96bca5c1ad8884551efc30c3a6c2e2ed23b2bbff4c43ebb6044a55215c999715ee506e055745e6c8aad3de7f4dc5102e6b163a6da9540e1e221e224af1bac3a57afd0efc08158e9c6405fe5f461039b549345344df9c05370c277d1ab39491ca5090e3645b65a8aa9269d66ca0fd4bcc99d4a395b8f2e2187d6d70535896f64c6c6e40ff8c2058bf5c0dd36927ea526507c6fa7f40fbe6af354e2540e9a640699cd3b08589e0617a0b90326d559b2ae0fb34450490031fa7aa74bc33aea73cc238baf7da274bcce2b54ef466fafb39629954c6f751d13aaf4d6a6e10679c19acf904448cbb83d879a0acfb18b9a536d26750539ceff5863843d3d8c0b3dd6efc2bc28220f804fd0b0eed563a16aac640c47d061fc51e6f6c3713ae1f0a131270aa4585b2ef76d320a6f76ba30c7881d41774963622e5b766b6860247c8241cb616bfa03ba1a6fa2a50274584cf1368959581f4672242c45854b1b55160a342a64a8c8131a9923a9630baa0bb504316469b359b9f5331b75c8008ba4f304553093f410edf4d31cb31892d9aab681f37675a79f18530fc16fe68a4ebae7fc835360d80b5af76b9b67057641c9d50808d47f9672e7675f71ae34d546cb2ae8a9c8a994529a05f330ea613b501406f00c3bf9910a0b3ddc110c924ba17aee42f2e9b1e3c156e0c0ebd416d6f5a52e6a9a0f78edd9d00d26bac1370c65cd6907892207f2c918e005c09a01eef60d811ceb0d0ac281e5496bc7a8c4882d46ae19f93282c6481c236808a3b7966856f17be228905b474a634727cbe9a172546e7314684119f553acc4b2221b0dd0945226debe9a17321726b7a1d3d884725e4434f2635ad37d1b74ae62159ad0b6e8e8c3328a05fa23c24d9a84f4752ef828bc925d55203259140e89a7be97cbd9e1ffe344860dfef1d82db270fdd58ba77f685617a96cfd7a63279a4714eca5d9f366f80ea7d9fc5b0bc6c523c1da688bcd4f6c109d00aa7daf39da3a2c91c0ddba4ea1839f7c515041c636b9b347c949673e81444e72028b23d34a354540dd7cd698812f7853b1793ac3f13c151ff5e64e13b08637251f464e468f43a22d0c67b7ee0678beae6beeb2f6dcceb5aee0e53c4173921f6f45f4bc53dabc3b6cce07ab79c3f2c68258cdff168fd458874c37e60131d47ab6156c4fed2c84f2b21b3427c0e44c810a8441b03444df4714673205429c27c2d9c87db877368ff817503369a0d15b57ef715a963bebfb0d309621fd47db3ec105400b0a974faae4be1282a9b2c967619dfb55d8b52d3bb2b3af6e893ce4142b29a61ac03e93c8e44a2b09c441cc37f61bf2ca987654613ad972896a29caee832712d5fb26e3a46885da8284f53cba76dfedb9c99ae02c998b82172d30df8c14d4fd8cccf80ca23ab351bb6104b99715d1ed498867a4968e0b13da193b3ccdc5bc72756240fc717af90e78f8fbabf592e3b0f8d2aa93f67a92d4fbc50f88faf1e0b09ff5fe6e1fcc751f998e40c8429d0629fc13e4d9157e27a002b64d9442fc14a4091666604925e28cf8c85c7e40b10b798e075b6733044abe371024db4e3a2a152380290e2be4ce7ecaeafa4098a296740319c19a451e112e7358427ffd38587d70a01929cbb6fdc2b16c4a0d173accdc855c38cfd8bd64438c52544c69174aab5290523a8fb9af67e4393b66da91040a6c934548c57d60b6590874303793d5db6b00bdabdc8151c17a472e07326b1014d3d90595f7147082bcd1405988a63bc54f8c1187c6acac0e40f231b69566dc7130f4124c573e06f194994e8a5fc78a5b598347ebcf45da76a7641db6d3c091fcd51c7d87f1cb24c393ce6eca1a34b9db01bbce2227b6f94f9555b4500f6934e6794ea02d67775dcc9f74ac660f8fdfc2a6c4a3821427599481cf451cdfe1af51c33d5458540079ac99848c02c8ddd0082e740a8c09a504c29fb7545164ff0a4320d672bea0c438e0b24e046117d3f29ac40e4a94020c209b78cfbb269a30f5caf8fd195eb510317c107d0bd6b27c43b5cc82a010819712814848ba6313c8540e450d4d3e1b045d37cd2ba0360259cd8c63abd5322478da626a28501556c02b1bed77e6ec380adeea48d822c613f1a7b1a603ca6ce97581f72a8e1783225cb2264099e78840d682ab07ee47ee515e297a6cb9c60e5de19200fd0977217cd30d36e3fbb357e10d04f8b321ac6c7788c1be1c38ed3307c122249fc18206b837a745cff4878b1fd15a65b0b9c991184a5fbc076c003c355736b11d1739618d3300c68b0128b4592c6e4ba66bc7c1e8029d411e2a1900035e21b87abd0cd2770f48d036cd00921b404bcb8e74326b80e35100e67d02eddc652125e9233a35168454107441d000813308b18500ed79259d05e0f49807571dd7dd96e608abf44a42685e6cc73d83c3c11fbc420beb620b020273ebadabceac9bda99cdfc9f516107191ac4e99e1929180d2cf2a9ad62c48de083a9c1065d41cdd27bfb85908003895709334118b7d0085cd3687055449c13d9723600a64f20993a20d9a3ab581470267c491ec242716b467678ac6998444641cc22c95201519b49b3455613579c1b4be3c44fceb1920608ab05a8b1156c3ce4a01702a73235edf0622381c547f30ab9916f48a288bfc4ca6d8a143b25b586af1cb31b67cd8fad0012c07eb35cc25e2ffa33626b84c738acd957a3338805f082e6032f5f15129756207d94f49c1f533bd08ae95d206ac16e750ae4d97a8882fd8453992d9d21499a5d95659f297773fc7a1f76631b0fe09502cd95acc3ed62547f3df69af098ac66ec1a167915f052687fd65fd2cee239178e84c9addd814e24883c4324815a18f81c351119dc3e86b318210193997eb1fa0f23ff19fa97e052cb9fcb4a5d0558e9b4d550675d456cd32ac55c38e9c0a03ddae250ba405867b1852b90f7eb31dfcfc4b313816d94ed8ccfab7ed05814c616e1a96d85ee24053d906a19d3e92126d9e7167f352453f62a62c276b9b90c3c385efda8dd38a6eb4beef77446cf2e322bacb7fcc11600c045bb50a0b13b6de58a6ec2d31cb552bc95be7d638cb34693addb234788b148fa11884bc07530c0ad94ee77f322d91e744df76af21cfff7646f9fe74ca9804c28029d17822c01c1e2d8452b7e1af99b48734c6cbac42e1a72650e936e30b05bb2bb35fd0193ce0a6901ec577ccd78922d9dcd50340f180e8925413cce781ddec997fccef989f1f31186dea957d6496844460738e943e5ed32bc79b799d8bc6938dd4bb80e8cce797699f6e88cecf77498fc2cf4437d7f5f59f5590ae16e2de767d82315434fc7ff27d9c1cb931d5c17ba8d38e24ae87cc14ae78938490fda593942862d474d64d6ed024d9aceebaebb5e50a78b97297d8aa0a5a746a4e9b491d7d893f32c6feb7ba639b16fe73c7f2adb1f8f3e59e293c210b2ad98a83b50187735a14935f1a6abf1c7e78ff7c74bcc70aba7d5649d4a6f680d02b6104c476aa32b45254e292a310a2aa4bd224934adffce99db528e2f6b9a039a1573a4ac589dd8ec34a737fb9b239bdde698664173646b973976dc5a4f7ffd668a8e7514fbe6783aea0d3e4357612b540aae4254b014902a68604d3dc31614bf73ea06dab6110affbfe7f7eb18fda43d669e7ac7bd43bf07cbae98a2a6a44ad99d94490dd49badffbc4adfecbf9aaed0dce93066ae87645db8e08edb799a76bb3ec6115ab0b754107aa629db07506141ca307321f7306a9036cc1ae41a460d520666bf7af8831ed8a6faf1fbb39f6c523c50e7393eafa28da54f7b69245d72cbeb413671bc317146f280f2f36459fec26149494aa5c119c5917db2b279431bfb8b0f0a67620e84a95222fd74762a7a64add7913b9e7460939df6c3d3e8998415fff600ec1fc4ac39d508700d67b703826a6307cd6d2a60e13d25a3922ede6e19481931302779efc5d4d939ad027da72cca30d6b3274e17e092cd165befc9be4edcb8b207591abae0107adb1852f134e84e6b8cd818c00f484b6ab45103ef7a41fa9df2b626ccaabb436258bf600b4625befbadf7cbe2464b1d2a6a6c6aca342c4a978b7b4d23ced4aad80ee18abf92614a1c462ac07e5521c5e9269112d3a2512810f73d6cafd56e4700e80f53864a4a49079a8fc8b25703bce525aa7e1157ce46268a9e40bc5a98de41ee61366d0375ff579374b33045648400962e1692281360c488e45e5fb40b5c2db8f4a801f98bdc98092b31b01b58df69243cd33cfc97969f3e5436f71fb2ea82c19833d5e2960edd115cb25816d1976db70f325da3755f9ce2f7ff47a6e917a24b45171bddd3a266eda20b4cf5ffd8d8b94c5e0ab035fe7df0b5621dcb035a46891b7708e52a2ebc4697cfa0091a78e475221c3c50daf8a9990db0eb7f0a24c26b66eb3aff0bc946ec57afbe7c30c090047de370074b6c32d81cfafeaabde69189f0382e4e1e87613e8bfcf94244a864ae120f596e6feb2ff9f8d571f2f0e8d1c8e39285e76e14fb82d1ad0e96d952c07248487fb12ca19bde13ea76726e954cb6159a23679c4cf133340eac793fb68c46a0b4760bb4a7ef2c02ecbd7d30361a87c93bf1cad4148480b9ead95520fda1ab4ce432b53b486de83d414e76f597a20a3832352625186e03532ad8e40ef61d46536487630e90b2eae83b497f914666949136da857a789e71ef6877427a3d7fe2a35dd5e804728e763f6b943a86483b87c648636f3a4560f303a32ea84f1bb3d164c8e4313c5d5261b2c43526ecc11ce05782d37661b4c35b00d320d484e4c2715cdb8d0492677995afba59385893d82518c671e2ce450a45e9b9c934568599d0593170fbdbe856bbef46c9d532952c254b71d6ba92d4713c3ceac47682e1c9f08619892967b646494ad60445a6c9ab86f320aa496c5cead46b51134b19f01c475a66c1082b4360e1565a5c61a575c6c02dad1898bbefe4f65f4386c3fc1548f4fc1cc238906d679af18234aa638641c8304dd354ce2f641c764fe3199d22abc45149c51f921a7b9644678b40d12a222a80d4ef03ba31e578590dc8b9600e48fd1bb8c73968795980b6a70ad6456e8db3de7969bc7f060d54a623445ad254b348f13c0211182cc899d3930bbe000a4b4c8905d47e28c5310669e4a92fe17dbe59ab780046a8e3c036372d9d13a7037fc34b8b1ade03212cbab4a8f4dbe4070e9f4cec91555249e6100983ce4a659f4ad9c5bc37d8221bee3795d45746dc30b31b7c6be4ccd3d8d813460e1fb33162eae4c01b91f22186ece6508aa32d6474eb82918f986f50020cfe05b30d165b5dfc9b46021a6056858549304fa8020825610d8550b40885f5aecba4ba8ce36c7ad19413b8e65b201bf032e856d00b94c4301aee22249724de646b0cab88613027ba9f22d18eb6c1ad25b20941aa4922bf19c28e91f4eebe338e47b3629759422c129df57a3dfdb1fc9020d6bd519237f53e3a100314a00168dbd3845da82cd9b4045cace66bd2b6e8011ad686ef2680c875c80ae0851cd6163bfff23aa9f47ee10b84d10cdb871c3a2649f92615d6f870c0642a4ec61922b3a253b4e13b71d390468d76190a9ad5ffe4b08c52a890387a906452aac52af1802f627f7379b86ab5432079a539ae0f07ebc784619533268afcdaa09f759c6f72e80413e7769926f14b2209ec92b5012ac018730ba9358b17d268768b8ec6655845042717b063908c928d9f94c9756443b7b4e2a2e17197ded4f51f6c1a131656fa939075e1c43ad62afaec405bb98755f2a77f9b8aeeeee34c58777f0a8de2343f6e90d4319f917a9eb674af3c046c01c70c7546ea530e463e6af6e2a9ca258ee46d2adb341409a9f635f9e9d8a8803ef723f04e0c6c92c7410fb360409574e048c61afa81e2476b90a0f2dc54f4890c170deab32e7b5d502fb1096cc74e40f8ee9b2cd958c6141ae09d17970b1c3f0755a0c1369adea99fc3c42f495d42a026898c7d55252938a445d03a9455b64805caee7eabd43f103bb6b944ea142eebdc1352d486d5034c2a5d9948941e89bbea27f48cc7fe7d73106e4f927f61995846bf013c8b810c5f62f57d4dca9d1f0930af1560436b5ecb28864d186ba67d76186c2c1383b4e2b6a4b39b1c79ed2636900865962532fd2442769a414239333623a24b46ad503f7ac3baa50d04a69428d7d80b79722b609417991fad12b2c0ec92a7093d09046ceb3990a85d5e2717d003b2f2354aba0f93409ef31a0fba91d1f7255a1e02df25f3ff20302d1fcc103dd289c008f316ea11ff5498e7089e91916869cc50b0cdd813c2685a3e348697ecb358f025a8a39d57b5e37843827b607d4cac556f30dfaf5ebdde20f06ee492ac5c773e10976ce263dd8eb49c0f9cabb2e603a7fe67b885001ee5732c753f4ac312c91e9c3ce25234baa152c4ca2d6a1d86d0f1138f405882608ad7126a42bfdd9b3ee85c2705969ac2bcb0e4ef2b4edc26daaa073343d2342632fe94f6274e2634285bc60d21f5bf90a86e27ddcd085d763e8a0ba089bb8f91edb64e4f530c2a42f181746242659e22d023f6844e3aafbdec23d49be80ae31c52dbb8ba411f4191724e7fbb7ba8d99c67df9a8d03474752f9f818d21cde11db9d8d8dc1ba0b04d17b45cfbb008093ade9dd2a8a0fbbcb5634dd7afc8dada9eea2837dd0eb2748431557e2488d1430a9aa28104246e08c7f56cdb3fd2e924c6109b6a310e18d31d9eba47a8b453b545b7e5dfa9acb2b0fff11976f833a42d42634e00ebf0e7d579e9f37ec4880601022cfdb86210caa67fa818db6d0273e805cad09177e3cf0e9d05082713c8d495a93b1edfe5562b1ca1a2ac93a304aba7625cc82cf4183e7e213aa90cedd0cf6733ba7ea13b0a1e40e48108524a42f4e0486786e4fc2e58a57265d9958d8cec7f7c4c7e6fe4781a93ca18abe663e1e3efe3ede3ebe7c7c7de8c97fca5df0fd4cf393e22fc5005803b8381d779c588e3730c90b863297891e896dd6d88dd0586dcb581a396be24bbdb63113b30cfe50a382a4df8f67e3c5cd9136ce122f051d4b5fbd191ed5870eb4b1f9a5ccb178114acd277654c1adc846904afc487f2d2982a4f3dbc89bb4fcecb51e40102babae5ced0d378c40d5f7ba608fb49a67791f997a6082feb556f55df2b2cc397f94f46afcaaa4fa0c9d9204e4552f313132bac4b2ecc2561dae8e81839a4b05d223875dda4225b2cde2198d35d8cb5c5e03215ed1437736a92fb84e0d963a366345dd62467f208c6f656f6197344623e77e93043b55f6efe130488d7cb5644efac512b2c54eaf814022750e2e45fada8dcc64d886118543900ebf168fe910e419d49993acc7ba455664f2eb403074b4a5b5846a745ff2010f93052803618fe9fe0bf201ca3143cfe023092a246272b20fe0df19a84191fca288d51054d529b9f4b4c72e1aa8baffc30a07272f5252eee91b2263b3842591437ab6a829fca5784458463202a0fa6b64fc21eed73904bf7bca01920cf17f001dc0332ac7be090c4a6d00761882b7134328e30c38904edc252fb611506e4d292c9ea90a8aa62d3a4954e22e6e5bc1f3c1e3df3b118b94db62a1ce68d0459d78021565e5c27ebdde987463c73891262585c0b4c21d2bffe5e655d60fd08a474d796a13e5a6348646d024dc9c7839b45bb4834d37c832110a6279d64009df14cf041b29f661b6e8d87c6ebf84536e43621a5804e447197df635f0b3f8cd744b2864b2c6d0ec80ef50df30f423204d8b97c54400203ec5cec8aa4ffddfbd3a83868d9a62749b65fe57da44ad878bdc6de9b3fbe69b71113e156cc51f270c42819b7e05ce7f10136638d675b04898b70dbae1595e592524d75325c5c6653ff3e062757e7b36a0e3b2456c97fb4a7a667539f704f0db63b89104b26a9f094b6bb69da11b7830013a34fbd21fc0afec37415aacfba8c02e2e860a0144e39260e6d41b604f09cbfb6b9da320ac43d2534d9ebafc65cfe36f860a2d61882fd2ecbd53a80624ad86126f2e13fd3c257bc0f5532154cbb8e720898d98f52c203a4213340c27f3bc3e5b381a1bbf71187dfdd55828e1a61de4203a900aeb078c33ede28dd776f68762db0a5874161c197f51c6f66fab013cdf64b4b88c251e12c672663a218dd3efbbb676295a05f79c661942a889762ed0cc2127300ae40d8609e4e7e04f30648ac8b8c52b63bf88a6d8aabb8fe4d5b6811778a50de671cfdc0c62ca744360239b345bc2640cd955b30e8418008cb434d0007fa098ff3bfd9ba7fee7073daf5f545acffcdd27d83b211f7c011d791da8c246e569c1503ae6953d0e86cbaf8e5c6101c962acd3e0f7bfb1d65bc0200dac39f02092cd2c47d8473967e027b171820013c1e40a06961fc3ba156b834a0f43579974e08a9e1310812f1801c6042c22253b4a3ba180a17b9daa1d6ac9d60b1945b25a5226e0afb38a28af934f88673818a4b9f74b8f696e0050a23f7cb9e1a7b9220513c028b69f74c4738216c16601981545c826ab1d4ef25f9e18f6be378e2c3e3b3d12d1959905203d5ae6d0d692cfa37442b85ee05ea29b231fdb0773aa48f1eb0e575a3390ae6c1715c5c8df0555f62bfc69c39e1aa06d16eb354b27b6f4bfd00633d0bcd9aef34321bd11dc030dc773280e137d1d8c82812b296ba563a63e91f462499bfd7bb99b195a5a77069303f13c10418ed29a6186df7d2fc94ada928eda9720f562b020f37fc63ac12e583275272ecb0f5a85b5a8f14157c00e23e1d0a635e1444068cd1616fa18c207dbfc454a506f8319b62a82d6f8e58de333e8e00d544f7808afcdac0bc53559845ac7a81227ccc3c0c06616a581c9e0d5923e64062d0f6114ec42d22abd1826649dc0c7ef73315fa28635c9328f05bccf646725de416f081abb71189b3d6e8af723749765d5141d280ce89c7560751cd321e3d616e4714ff4ac170b2272a68b330ab3dc56acb0f26ac4eaa837c9f20011f684a0c6501ca59cbba3f93b98a0bf282d4dcd1c8ec1210470096e74115803bb2dba7bd24972714e932c1e0d80f397edf1d69f04c13d55707c539196006bf3c2e600bdf5d266d829ba22c1629ab789cf4606bcf1f5214f176f40fc5707e80514137011b58743859470e7ba1679d0dc0e9fef7246c870f38cbbad04d7e162238dda24c0943780dfa86939b9cd91131be1eda292cf1ab42c8f4105602447eb56c495aaf492f9a2a7054ae094554d3187e18b7bf610e0a518914ee8679a4db82d56d50f42255603225c4c9fea2d3140d49061191082326b6cf978323c2bc9e72d26d17ebd0da6ea9ad9cab78fca5ba60b9ccdbf1812d189942cc0b67b9dcc020689a5c2814ce857d0a11d2ce216e49ed945fcf825fc401247414e9548b10665ccdccaaddac15bc510978dd125d8c4d4ac445fab03c6dde9c25a491e32d3e46fca85826aeff181ea763e04ec31a94344c7b07b3a98cc64bfd053453a84cff0e7c3a8bf3a26fa4a26574b8b2600face18b31aaeddfa42430b4c986392d88c27f805914463b94451301d0583113f1e15576b5e4ab5012dedc1beec1c2f42049c791cdb2685db3c942ee5283816ddc56fb2449e16b37254efcf07502ea256f9dd39b2ee682c4a1336f1aef6b3c4794a89e7a34d4205cd1349bdf88d0d6dbd6e689019c50113384ccd475e50cd3b617fe2f791b346217b7d44676b5ea08b4a3c9a27bb16e61572ad1e991670976ac2e8faeb79bc20deaae93c1e174e3105ddb45e224c529f41902d845510554c5d99bdd6ea3c292292ab2910e2b53636f01d45ec63304fa9a1db9c03e4a16859f1e041ee8d9321df266b37680fe4ad647a7cf7b3a1de1193a282bf5d2ce51239fd6999e1b813704c8434a012f5debb1f0a3dd58d9ebe27049db5214098a4ae124390746bf2349261ae89632a20a752007fdef8082c39519cee0ea1c3b7492c74c827535181a540047e35be5e1429a63bbe1c6e0348aec35538648e40f838b2a944aee9aa424be20bdd6872a7292a864fb10e46378f491d15dad6c686143d9f4c8981a741bf98b2c2d434ab09fec59417c3b6773984bbc267b5329a9a809648c53f8e30b6d7d2e9338c517dab5df8d13020f7f10d90a3c2ccc00a6d5a10200dfc392b1022036d4712f668d80882da8f920b914f420a189758b80a74d2c50e9fb83ddcf583c6bc6cbc1d65d6dc7165e310b9c8305cc5d9213f792e1caf196eae430758ae2e0dc3665b3c57714a6e45159206703bbff0a144cb910be252bb35a2a315fb53f36f748abb0a043c037d76aa88cbacfb58702485a7a100bec393a6c4ea2a1f55687608a6ef459c274a3e5c09a0d4ed107e55ba035ad09fb64d74d6418ff75b34278aa55f61ca73ad491c97f1553932a8835fae34e0309a262ff5de9df4c3b5a0345a0545d33fd3947302766f1d4de7baa633c0c3214337b81045613a941142d0747768cc7b08b26d90ef16b4ad940d184607ce338f563b26d93a37d1043bc5d907d617e81421849f7f6b4628443db792f5d59a0dbb6c47c08e2a0350d7024e2f28c7659eac82311d21842a55a951464f1c55225d2c18f5d163c3e8cd7aeb580c8fafae50a55004346c1ca9574a47a6447c8cb30c83c719ccad5088a41d5995b7d01f308a04f62d593a8be23a5045540f68c240064f8d62e503bd5f02443c820796c1c8bf0628c8342e41a8370c5f412d8d08f31c1e0ffe257c2730844db25423c98398270f4b3438155dc2234d2c6a3ac761c3a6e97595f9191b16680ee21b796f5f2d5455df937d99f5af7e3456d9fe1964d86d8eda27a80409d02b008f8eb307047e3345793a83559ab82223d2ee3f4c044348856e9070b75fd642b70d3f43fc46280b9390605a5768750ee1a125106e7bfb2e046326ad407c6f1469bc43086715a3cc97c550598cdc699a9e21aa40ba4e90ae4e5f448c142af07ba5072330a8dc33a36e355eadec7e7d3f004442e7bde225ad43be2a2d01d200d82a9758c528c8c11d8260bd98c13c45e5112ee4b5476dece52f505d8e2d7c6e0516cdf3c696b4e98b4df7a0e384708fdb32451fc0871b1e7411a66776cc16b40cc94a82eed8aac1e257d68767f66d40a01185fb82e21f84daea0b0fd96e5761062d15263edfde791d01df235391170eacb91cb8648f66e326519c8e47c220e6c03d810ced574992607e39a5910a98e00e43714c5dbf6c43b6fc74ce1ed44cbf189baeeecf09283135d8b4910deefeca732521f25502b0af10f87f9cfdea7edd870ae92e44e29ebbe1d35ec46bf0b6e794d483243c1a1253f3a6f662416b0de6c84471cafa55e25d90499edbe4cc73834ee6e9e1057874daeada136301a173b32041028b102bc34f1cefbdc6fc6482c31f9e5923031c56f4e5ae9b25dcd599c526e5bc5a1892ec40623d1312ccfde203d2f996baa30d0adba1bf7be83e058af312fbf633d3b50aed35ac0eb2ed22020cdb20d9c8d9ea26e41069cace2bd0b4745d0155076797022a68f96f7f7c21d839e1810efc632fbe683a0ce081074591aff1dc4576e1bcfb6ac5ea162d02c56c12cd48b738b26df44ad4fa87c090a52d53f5abbd5d5e1a6c61a409389c54a18aa3bbdcd2f0ce4906d523910fa9c19c8049983a5727b03c85d1030c156e1f5aaf3069194877d07a121ad61550dac6457816f80434995837d653974ce1e7a7892791be485413c5912e9166c071dfc1d8721045afdf8fed8113ee41083d8c3bad3cdb2f9b2082ee95c7888157a2be071672215afd0b5da198d8a3713f2c34952c42fead8f97b77fc093a0f5195cbcc43cfdbee59a47368414d73d9cd936243ad83643320263e8240edae6c366cb8ca60f7052a87378c9e71fdc45025ca927d95acf30c46b081f7781b34ba308eaeee0d5ebc07aa79752be14071a63174e3cb295e52605f049f141f0d900719deb4ca8c92158b96eb6d0549beaf0cff36ff04019b2b66b58f779879672291a1143569154ad6b8a098ccb1aa1399a091aa7fccbe9b44c78023e1484930a3950b2a4d001c33f3f3f3f3f3f3fbf9c020ab6b5a1b506425b9029a5a5dbbdc089ad025c99644a49a6b41ac09123d548238440eb02460100c0059f0a700a5c0a87091f3d407d7cefa8c53f93326c840f1e203ce789cf154becfcca163e7680704bb93162c2de637958f8d0012ac9714a2b798af97dd2c2470ed01e4bf6ce0eef5e97fcc0013a4557ab4c9bbfa773710b7436f1a46793f529e371610b846bb0ee932a29055cd402a1a64d8925e9dc52e5a005322b8668fecf492bcb1ac6dcc608eb00c3ae045ccc029d04b7b4d4f1739f090117b2406bb4984d4aa2767a2c90f6414dca913f255ea786b1111cae06022e6081f8b28e7b276b3c93bd57283be7617bf7744d57a04bc3d2c535f134cc9b5e70d10a94faf70aa6d14a69d36b185b1dac40567f468d968269ea690d5cac022573af55bacf15b850c5293cda75e5f6ac4b2a0eadd431c5052a90177de3bfa913454fa74067a939313eca9c26bd295061e9d4fe4b7c8afea5405592be4663bbfb253529d031279649f2f7784ac2a34057f9c796f9799373458116bd9882c6513ff56a28d0a5dcc498b3b96a6404057ae66cbb4d143f813c93d2827a2a299394e209945271fb972a9d40c997f25c65ab473b1d2790495692cd5a4c3c25bb4da032a524868d9bec944913e87452eb73be2d1328cb1dcc3a4357e562984049639f93c62f813c1d4e5bcce4f1ceb7046a3f378fe7a62a811277f7a61affe2b2530261b13456c793377fb22781ba249f8ca9712581fecd7d3188c596a8994820fc54256193f4e7652b24d05dc2674d9fe44720636c44bd9418b5333902ad9efbee27aea885df08b4f8a55cd5e3579bf28c40dd6697e6d77a55892f02d9a56437c17445a065f359eccac7dc712702154f12a3c1bdb374932002717da7944c99e41008d35fc162099351ac6308a4ba9ba031eb5ed2395b08745ca53bd73c2b3f97102861d6c4f9ec0927ce1d04e2f4aaafc9a5dab5ac20502a6e9fc6dae4994d2610c87b97f53fbdd994640081cca464da9afcf8e8317f40e512c652d6e2e5658c1f50c1f792caa72efe4ded03fa64d5fb209ef12475f201edb19b6733ce3da053ae9c548a9e2bb5897a40784a39c6a92449725a980764dc78a7bbf7f498070f688dd79dfc2a2c835bee80582fd15229a5a4f856b103e2e4a49f799ea41c4eae0ea8ad3229f5c79a8edde8c0c51cd0795a35ac2bf5676c7240472bcb13b594dde7c40155e249736972cc9e638a095cc001e92b97745ebec806d31bd0493ba99a1427f3b9c60de8bcd9a37d1ad3d6f6da802c5557614f6b5e8b9a12b860034af877db7ba5b0e41b1d6b40875ff7a9249a9c94351d6a4058ce279dfc63c2629dd2804aa64ab8247e12d52c090d28d94bc92116fb433f7f06a4eddfa7b2d7d327c9cd801ab1d4e16ef532a0c4147e5ffdf9bca49c0c28d753c9f35c0e7e6a8f015d7fd5b19536e9d21331204ff8653fed49b88e256140aa6dbaeec6e057f20c0694707b56ad1f7f01e9a92aa68e05f5943a5e4055b99bb4c9d3929c77011dbaedd1e4649e7ab35c40e69a24f5a6d16c01254d1e51fd2bb58092525413531a330bc833cdbdb8aa7599b18052611dcd3f89987905741ab7e4b974bc66c70a083bed90d7e429aa5601d5329736f5d7c40a910a28c9a3c5782679a5fc4c01f19d5b764d4aa2df29058455792e49c99f4d095e14d01ab6d6e9e769c35040b7d75f8bde75bfc91390c94c0ef2bd65da1527a0d4c48e1db3729fe6ac09888f9ef9e52598051326a0e74ab83a295849e06209a8e4622d7fb94e5bfa4a40277d52eadb98574ee324a06b2de6f377120b5c20017555827dfccd575ea52320d4c6c3647bde0828a9357b5fe1194e4c119049aecc7552d2fc462602529396c955ea0c0155f1b925c5ec0a0179273e6a8c7faac3ae414057c6924f8c7301024ab49474c9d94f5657eba6c0c50f5049a9a7aa94fa00e1229764ef32d1464b7a809225bfab6dbc58499e07a83ba54c4c35f30e10574ad5d86dcb850ed0dd7fdbd67b3985985ce40025269973f3a94c326319052e70804c4a688e29773a69b27b0b94b8d355c1d4c51668f5f91b4d15a38de56a81daf2dbd225c768814ec2eac928a226b7254cf09805ba94209e3a93ffa7571eb24095d4769fb4fa58a07f3cbe06150b2fd56151ec9cd9ced2ba95ccc0e315c8b4e9757a92af26d9e30aa46f3a99526ed4aadb5c0ef680e560304a2bcaa6f1938bacf083ec6cda897bff2a509b4f7effb72b395732c6bf208f1c3c54d107af8bf197d7a6933c528192db4bada72f5d52d21f3778a0029924c1d49e099a53a0fef573c6a43b5320d3f3e66e7f3eb972970259ead24a92d118134f05830729d01b3e9b8cae39457f7d14e8b360f9d72eeea9e474c14314c82dbfdf58b2641793148a44cb6df1fca41383026541cca48ccb95d9c57c0275fac38ee72b13bb4c9e408579bfcb19cfb62fd309f4ebc53aed6225dca7c7812e2ad08595c18313d89a88e6ce64d2fa9bd0645ab7d3696dc64b347168560ba72d7f26fa98b467c9e231eeec8109648e9d149ee2bc5fe95f3092833d60012ddbe1710994a45b92143ce69630bf8077a06d0e06a320c1c312283fe1a47f4ef2da99f8efe02fd472b0077e6d041e9540877eac3271d327b35ac3581d073c2881b8d62c5792c9e9c48bfd47d8e03109d4a6d27fc131781b61ecf81078480225a6a6a54aee698f5f878e6f1c61e428f7018f48a0a4c59e9dafb273ff78400299d2a5ece031fa88f370046a53a74e9935686d8b39188ce2d10854798c1bb3c949739d5dc3180d1a3976eca84183865181072350a37af1996dbf9e3be6b108c49b7c953aa5db83387cd55887872250967be23256ba9374522210dbf93607cf22a357820874f2cb6bcadfb2cc3bb1f038042a6745f7132c5cee9c3404b24fbdf2eee6587bab05376ce8d061038c42a09294535995565def7bc40981382963ff696aa6ac9f1ac6503d06818a3967fb4e5df793740d63662f8211808163c70daee1850c3c0481d44e4a36a5b3a6e9c9d530a663150a1e81d8bef25807d72465ae86b13233e2010864144f32fbd9e89d4caa133cfeb0af5afcee6417d6319e033bc2e01c23e8c28b0e7471050f3fa0725871dbaffb8032f99db48f87f980fa30db986ce7911b32c071e30537c448e3b1075469d9d114fea307941c4b6e3287d78e399307cb93695b59aad454baf3efaa89e997c6d871b6e38615f37e87061e7840d77b955d7dd89d5cdfb0512cdf2f3f908291f4b80332dae5064d4ac5ad595ec7c8998eef9e001862dc40e94300861837100d1a3b6eece0113b24c0a30e745880c71c5807185d78c88186471c20e001070778bc817578a0001e6e183980471b92910778b041011e6b5880871a6ce49840f148038e6463073bc0030dff6964e4789ca1c68e16dcf82fccf09f4670ec18f12803033cc8306223c70410e03186ef1b386ee498c0f70d037888e1001e614880071812e0f105077878a10b08f0e002013cb63052000f2de898e191850278606144001e57f8f0b0c2003caa10000f2a8c30c0630a1e1e5218b19163021c861813f8f08802c293b55789d19299384301254c9b897279dd29e63c0175264932a632f1e4f6d60908997b2f25a9f7b6be09e81cf5735b9c9c2469320195a4ec9dbf394b4049a61b1bab0435394595802cb1e424850b5f1290bda72fda7d1409e852f25ae924bef6a618038f23202f5876bf20ffb94a6f045489f97a664c82c5ec45409cca3e5f52fc1ddf3411d0f39da464e79fdfd61e022a4b87932d9b9a26b610909d732c2993494958340902ead74dd824750910d073a746f36dfcb6757e802e4934d31ac54c9893f101aaab4edc35bcc5ddb307088feaa733b785858c3c4098f87c9e3ce6d9fd38022de0911c62dc001905b2444b725369c9208288029d64926399cca5a9f3021dbca3c20009054a5266b2556e1c6e2c8cff420ccf314040818a379e6766ad29893dc827507eb2a6f9bbb7943a05c413a8bd7d7db597fb4d274827d0ae6dd1e4fd140827907d82a7a9d5b7806c02f926653125273f65d5044a347994937e52f431b900920954ca794cab639694fec7044ab69c3cdbfadc92a65c027dffaabbaa317ec60fc412e80e133179f3ae56d3358c81015209c4c99949a7be3300a104faaf6df6931a8bf949904920836acebe9c954e680b2209d4781cd3f97501890432a7aca9a6e07531b7209040a70ef168da920eb700f20854a9f9f3eda4c6663d87051047a0047d4dc1c367ebe5ad11a83b9d643769ecdfaf8c40c965aa54a7ef732c1dc822d031c9d5e795b69aeaa408a45dcad7f6184112813c71abf12ff9a47c0b0822d025d549ba3bc9244fae6b181bf11b7c2c0039043a7ebeabafba7ccd272086407ee5987ec1fde37846005208f4053531de68257f00420894384f7d0fd626d5d51ac64006814c396634e8c6cab21a4188011208a489b7c994450ba7dcab610c041028372dbefafd6155fe913192111ce9868d911174600e207f00f103fa674d9afee5cb7280f401193a5fb25cbc7b3fbd287c40e92479de5da6c5700487dbd500640f68313566b3193b9b247a408d5ea95282774e2af97948fec5cbe301192ea598c4ff3b66d8ef500ab794c5c66f3ba0d48f69674ef24dcae93aa04f57a614834b0754652c4d9d174c4962e6802ca5f489f1628ec5550ea8b29824d313b6f3a43a0e08af24bc29cb9b74c5040e88eb4d19b6925c9497df804a2997c4dfa483d97edc80b6dbd2aaffa4f379b60dc8a476e173dde3aca36c4085777b5ddd2485f8b9067487ce5ca6859ffed580d259d2c9c9b2544e299806547ef89c4dc9d92e221ad0e29aa994ae1bf9ae9c017d4a92c44eeb12939bce0c6859fbbc783b1753deca80ec8c6dd257b66a18bb6163e4861861a0819001f96763a26f9db5a70619033a36e9facdc995fb31881890d963efbb93ea5fb08a2240c280ca49ba9863e958ca64ff0801020694546dc2947867d2f11204c8179095546392534962062f5101c40be88acd29774909d2852abbbf72ef577f865a7200c2059498af7a63ca276597d3b200b205b4c6b9525275fd74ea680125a349c9cf5449256b0808902ca0cda48babf13d5840bec53893928999fcbb02b2929cfcd2a724eb07102ba0a35be6b551cfb513ab0232a7bb933ce7d249e5947b00a102d2933ad1638e317bde640ac8947276d4b6f29c32450a084b794daa5da9f6f6514076da3c5a9ee6ae9320ea01040a28c9dc92869355bcf77a02cac3a45bcb61d733d54e408ebbffc95d9374f813cb034813d039c3a90cff34a7d174071026a035339a9419e39609a61d4096805c53924ce9c474dcb091a419409480f824f6050b1bc3ba44df009204e4a692abfee79dc35224202ca9b1a4537e2dc77ee30d023902ea32794c13b5cbb78246f073ccdfb059be81c305090e17801401259e5c2ac796cc18b3112149b898aa3d97ec6508489fcdf2b9d85be29a1500118225ee993c75a598b53398e73e7121a6537c77c66c8004016d269e9ca2bda54d0a089c24c44f4c32972b01c80f5072b29859b3ac3e406c7ad1be92f1dcc3d30374fc98f9b1a3788c5bf203203c406ee79cf604add4fa187a006407c8d792c6f62fd7d4a7e8009da49373788e9af393a97400240728ebcb3f25bb9b8c272db881e38b0501080e50268996ec15d31a2ddc82df71c3c62d50c252ac74dd315ba064a694b26b6a6b81923526d918753cda7bb440fd5f9d575adc98459e05ea4b5e8f6ea6b3a5ec7724f890053aeef6e7a90f9329357f03478e197c2cd06237e7bfd92558dea8093df0010bc46611d9b274375e62358c797905325cdcc59cea4e4e79c17f8e323b0d7cb8023967565fa984abf67443f0d10a545c4a0fea4926938257c358d9fb95b102a55b498c4735612bc9ad02ed97f2c5f58a49d62fa9029904f79c5f64bfc298a402a1ab6de2328e9560c24af84085d94f6b56931ead5320b3a594dd327cacf0610ae465bafbd874b95de952204bc969dc4aa9f03f2d29105b7d4a0aad93754ce16314c8aa187e49c8e73a9dab614e1d3e4481cabb144f69c5ca7ced4728901edbe37927c6d4e6a04099a89aea521777be7d7c02b1e936fa39d42c3d29061f021a3462f061e0e0c31368533aea23fef14af093061f9d405f8a2989a92de9643158c3180c5e07275c93a439180c94c1c72650d2698c4da7dbb7b3621dde19840f4dd4e02313a8d991cfe3e9bff2c43e3061fbe9fc953d6d06f7129618f9a8047e500219ef52fce494a934c57c4cc2041f92a894294969d66ebb068b8f48204d3ad132d8dbf50109544c629b6449ccfa9fe5c72350bddda9c4af991dcb7651812e2810880f4720eeb2b3a5b9934c35c9f4a31148933d9e2a0b9a21eebee18311085bedf49ca75a829c7c2c029d6d4ef65462b2e6128e11c68e75c18722d0c9df7b3e88be095f4a04624b9e5e5bbeb378fa6cc10722d02795f0ced5387d1c022beb3a59e673ed58c37c183b5aa0670884c92fb952dcf4780dd730369223ed5fef5821d0bf316e796abe797542207c83f689494507810cb1ccd649f633d32808a4eba9f68e1d53c25e6763fc7d0402a55629ee041d102893939686e91ce4ed3fa04c8dbac7b688658e1f504a8f8d09e6795275a90fe8aa9872cb7249e2763e20e6bb4ffc9c399e700f688babe6a5eae22afc7a405c670e1ffbb2975cca03f283c99484edb837130fc8b6fc8c3ba3df015d5925caabe676408b6db9f955da9cd975409647fb784f2aabe6990e88973d93a449c27340a793c35e09dfd9dd440e8891974b9ad53e343e713029a54c65f4cfc2e19cc48768fa0d682d715e62f7c2b47603aae6a3a7cfce612b65da800c8ffa356e5aee7136a0f5b3aa7f465d032ab305cd16335503ea4b07df74d298c7320d884f295f9c24ffc94b49349831858a67407c92b7c3e669069494846fb137538209b10ca83c73c2bd986827750a19d0a6cdb662c34a6dd2181097adced3a978303962408596aacdca2549a55d1890f13b4d3a31dff60106b4c8ccbcc67cbe8094f7184b26cdbbb2175076aac42e7d79dddd95c0471710fad1bc93ea9864af0a063eb8d09a701ebcb41ae6630b283de3e1a412fbcc106b18d31b3874b860443f908211167c680139b751db726992c1c46401bdbb67d7d91f1650e9368c69e7b08a22a78dd8c715d03156fe4eb7958e2e2af060f00768d018b130f6f06105d77d45b67a4b39c478010e1c1df0c3471510a7537d7e66add3387f50019d632c7529a94b976b1f534097e5e74bfa4e3a95bb0f29203493b02dd9a944c24714d049d23b49854993f974f980024aaa97e7a74a1f645f2e7c3c01216b31fc59789bfbc609483f4da326a37b4a9a26a0d4977a4e726b4e52cc0f26a02fc3a4f620a7ce924a083e9680b8cf9c4ea9edc5abf8753005f07570721f4a405ffbce6917c78e911c0c469ade471250f93dac7caa4ae2b5f98104845955a5f2fd0af30c193e8e80b828e2653aeb34ccfe610474e7f47426c3d817c6471190e5276795fd24fb98bc863122204f5ccca573fc6dd69d0d061f4340cb4931f9b4deeaa64240ed9814ffe39c8280d26953306d8dd6e10308c89ca4ec9d8229614d5e7e8052414ed3927a5b93d60f1f549f448b37f103e592c408945ebf94936c297b8efd22d0263d34dd5faf08c467a59c4cc9f7d8291188570d3979aa69a67644a03e73ce5a39b8eba67e08849698c5c9973604fa94a8cf96499bc62c044a986d092150f992c7945e9f41a04b7c0b67f9b9e979230874d40fb30b270d045a4b2629ac694a49d21310c81a53974e76f20fa824a6cc26cf1eb44fd00f48cbd92d654961ee32f601e5bb6f92c62463ba16f98092933977ed7b94bde01e50a9f93909fd4aabbee8019de418d367c4dd92a7e4015d7b326689fb24ab5bf08034b1632a498e31b7ede60e0839ad2ef3feb21e8b1d106e593a930a963aa0ab9478964e30e1d43e3a206c2b6793d782793ecd01756396f1a3c91c973639a06c532e65f6eb4e8a034afcd5587a9da7763820535f9e94f269fc26ab86b1b33d90f106a42931ecc978395b52f26e4099ca9ca9aebc5e7c53c3d8f9818c36a0eac22d98bedc939266e48c21830da8caa6737a8d09976455c61a903149a22593e247861a9096f4d5979cf69dfd6948a99464ae893741035a6367a87fdc34513e2337d208183a580623bf8371ec28850232ce8052a27f6ec6f9eb5c6a33a053a7ec2563b8ee39e90bdac61717d82c03aa6ede3bfb7bd6d43a19d0e19ef49e09963999c91850f15cdfc7b3bead8918109b93f6c56c53f79509033aaef53e5965c080d2194e5c3db1a52ae21790a55edb83a5c50be850cb6b971539b1e9024aecee98e59472abeef6860c2e203c3e8f9698e895feb205945d894b62bef0ef776b01fda7f2ac44f1fc249b64015d7f496ed2dd19bb3732c0d1012d060c195840c7d44ed2f76b251dcd1590174b77c7b64bb2c9dd3b28b0f93a9802f9021956407b8c1eb44bd038a9253b5c20a30a4893dad35ac724deb3a5c2c12c5ffbc5dc5f41c614906d5da5e349a712e35ef63a980257438614d04957d0d22fd95e768a829fe42cf37633430179f37931a924df83ae4f60a355559c80eacd493a9552563b2555e603291871194d4058da58dee9ef777626202bc689ffdd76e9322d01fdd9f24dcdaa0454de8fd5949e270119af3adf68a691805e97bb24739a242d7b474067fe46dfda4e32e64640b5fec949556ed81aad0828397c96a0498cd954aa4c228308e8242731fdf9568ad1ea21a0c39914eb5b61b1722c045465f58eb9ee130464faf8df64f9c4926d020125a8662c31efe85b6c327e90943b26cf394d4ee12465f80071e171310931e901e2838789a522ff7a1a0f50b2cfd2ebdc92b10374140d6b61c9ea6297e80025c7efa5598db6c97339405ae6b7ddd3a0299f6ed8e01d1f464940060e907f551fa6e6f3e7197c8dcdc00cbe8618bb82905ba04d4ef99883cfc9964a6c81fe2db7947935e545b716e82478a7cd704a7a12262d90a64ec4a466ef6025370ba486b93749f3eb6c293141882c9063ab666de3314b8f054a99e07a6a653e6e56436091af40099b55d3bf9e34b94e0df345882bb415384258f1b9fabe7a4c1534b80a846955f157eb7c612f425491897a67e6ece2a1e156edb7277f3831a877811074510e0e21a94089659b61c377d37e1c820ab49a2455e7cc319d78d19053a0aee324e99f2a9cfc2453a04afe349530baa26b2a052ad52759f322930275da4d125d4b5a785c4781f49c4c9fd07b314da328d01973f33ab617120a94944337bfcad253349dcd220414a85496f27af6c66dfa13a8bbd8317cc513881373123f9f6ef97462423a816ecf5d3553c2a3c92b8413a8f04b6db226a54da02e656c4c49b8e8b9754da0f4eb444db8bffdb899408dd67676584cb2724ca083f9569dac4ee19318104c21e412284fdfb1fc62a99cb9fb4b6034c412489533ef187f4a18d36a1873e7e21a480a8454021574eb648ba52b96ea7861e38b4309946c4a33aca6d8393a3246183bce83c11fa80a844c027d6155bb692d7bca8f243ced539a32dd8c04fad6e7befd725ea3a694210412e84cf26ddc66b1958b3f02617ac38b7bb448b083bfb8000d1a377ec70efe222521c41128dfdcfcefe9a5b39f1a81caf1a89b3cecc9e5264620ff2d9c54b2da4925e917812cb19e42932427d1fe15814c959ab5924a495efa1381cab9be4f93f01181ccc98496782ee1ad3f042a47b5cbaf5db1a73604fa379830535252671f2f04c24a5e3c070dbe1a7342a0f4f375aca039d5c48340896896cc7f5b102861a5a7c6bb73fe640702194f35aac64b030271b55b95744ca66d4dfe80904db69edfe3698cfb01253bb54b653a25cb09f7015939c3f73cbb94ca311f90769aa4134eb7473c670f9da61cd7baecea01194fc65297f3d22d6ef280bc182e936ef180dcf7aa143df553c27740ac9ff2cd66faaf9fb103d2afa4cee6d9534e9bd601b5b1937827c760993bd2019539ca574e9f4b987d0ee8f877ebdf739103da3a9efc53d98b034a2e51e326390b0794cafb94e9c4e0e9ca37a0a26a79dc607ab19db901b16ba6c6a295da8050f3cff518c4424cce06e4e86f588679ac262b640db80613ff1d23440de86c4945adb08a73922469405d2e133fdd69caa484d180d6acee7252fa53a2c69c011d53acf3b7f41b365ecc80b224fea43471b2fe79216540985c3a4d5227ee87d942c880ca763af56e2ae1f164a862848c0159f2297d12dfaf7218c580ee17fb123ce54ad7a79030a0c43bfda954f84b92348780c168181c847c0171bdb941c3b6ad97bc80b037ad9a24294e97a6bb80f494a9f92526cdefe2c091281042b8800eaf3ded2cba7f4ad20e1b37c428215bf8cfe42d3b49dea4a6102da082bca61f55133b5d3812068e111970181a9205b4cdd5bfef8e6e92971abde393599a5a20040b28292529c9aaa5e47b9b5c0161269c7c9636dc842b59019539951ccf67e3f77f42aa80bc68c1a48ba7674a34dfc0e0452083102aa0ca73a613acda4db31ae35f90833da023640ae8fab7fd14da4b01f1bbfe9fd46f42a28010d377d93f6c49af53081450f5fd779653b8c969df1819b13b43214f308ae994561e84c15ba0bf04762f060cde47fa63706c843801dd974c9c129bd5d21d0d63478e90268430214396705e55132b89ebf8220718362a4394b0214940a5d52457ce3072f93484200155aabb94f8f16a31ce2147409b4cbdf4e763e9a7fe448811d07b4965580f5b2127428a80acec62973f9a7dd65a228408c8ec9f647e58ba99cf9f24428680fe9216346fed2549520a11023a99cbd6d96df649eb0a1112045495f0362987a75c599f40840001199fc9742e292ca98f87fc0095ffbbe3e262b9f367063fc261a420c407288f26690c0d1b74d31388901e20e3a5afdf659f183b8507e88cc95376a5b42bb269f143c80e509ef33a869b14b62519023a84e800e99b92bcfb3b7d95a33940053593345f5eebd933040748cbebfade9ad63f651200b945b6c1c305d309406c810aa727f68956395bd50468d0c804482d50a692285fa63f9e24896100841688ff9354ff6826b9ac0199052aeb252ddf24732a73416481182bdfd6d21d905838082c90b99d4d8af7be5c519500f20a64cc49a59257ccec121057a04c0e4b95f495e6ad28482bd02aab5592792a65d2056105ca3489b30e6b692dc5415681ccf55cd264694f525b1055a0934e391ac3ab4e3307241588abd4bfac27e63827082a50a5a9d4b6c59f8f990439054a4e5a6af358e720baaf00c414e89227e9414a81924973cddd353fe7ad61ac4770f85152a0cb742c397d757ee30333da808c3159daa5429392e44c60061b9071ff548c6d9ea8f836d680ccf15e5e5dcda277d48092efd7943a6db39cd53420442fe8e9a8aa259968409fb8dfb154574e264b3b9d7106942a69e744b1e4297e630664a7eb4f319a32bf24ad616c84777cf19e35a30c4663061950b2ff2616b77631020c70dfc061e38b12cc1803cae49284e9bc9de4c68801b116e7267b3a3565531850d963789b548301f5efed9bf496e9f5dc8c2fa03c5c66cee027096678015dfd6916efee2ea07c4e3693935c974479c7e030c2e004630617666c618616f8cf4ae93e9c4c3915f06fce2182319e0389288b195940789f927d39ada5adc4022a9ebeb2cfe8fd22f61590a7def54a2fa5f0a79d61053acca8022a774fc5f41ab3a7c61ac6ce0c2ae82966dfd25eb1a1650a3e98210594ccc9663db3ab74614614d02797d23c46cf33f3ce8002ea4abc8f492e8b81608871a3a860c613d0e2313f9a8977529c93131027e7943ad3b394bebe0948cf4adf29bf841dd36182f3b993d47a7699b104c47abe93aca42486d1ba86b10cc30c25a0cb9468b67a79cd46466ed8285f98910484aae6babfae49f59e1d89479080beb998329ba6944bba5c8c2f7ae49331188cb385194740886b1637f3a830c308a8d5527d9e174e6bbb29cc280272e5373d5792affc635198410464a73cb14918f15249ecf461c61050b1fae7520c7e276d470f338480ee56afcba3a5f3af4140e6a4c4d2e9c3fddfd97c9801049489e1ab49f2bd7e31f901723c6df8f0da3c31ae0f50a231f666ad2ffdf1e561460f509a15733f5e578dc8038485d3759ff3b165260a87193b406b74ad2db12db69d32df30430708cb6b73a1371b61460e6e1d510d315d0b1866e00015acdde40c9a9ef14fb740464bc588d8c24e6625e75416adfc8e42a41608937eaf93975fc72c57234468814c626a4fb9dfdadf69d92c90397f36b7934488c8027196973cb7adbee7dcf641241622b040bdda06afddcb4a6e6220445e814cea4bd0b7523ffb951371056a2b856cc9f9ea597ac983482bd06ad7f26e350d1ac686082bd06f1fdfccf3f696ab40cacffbdac9a7e464f5e24044156879f73fa9e2c6ce0822a940a74fc184cfbeedf2492188a002a56cb3578925a97a8bf181c829d05f67664a8b66b594a44605bce8401768a6409dd871c54c67af0722a540c78fb66d5a5259def5900299929cbc6e91454681fc981d311dd3fed929220a94da7e4fbd8e72622b054442814a93ec722a3928d072c2dfcb76d662bc453e81f64da69917b3e7f68e8827903627e73725c65896ef1f443a81cc974c8933726126f39c406d58efbed3bb5a92566413488b9a35dbc234e56f3581fc2cf2f94fe64f62d84440241368cfa151aef4ee4c2723218209c4a7cf5bbedc6ad99a30de0b1d7808914ba0fe3f88d5c7de932f89953a885802659207cb35a0954049b266879364aff32947e005114a2053ec92a4949cbec824b0bbf6b0394ff41833081149a04ea74c4a7b6ab230a548543a75bfcae3a2c76a1813410abee012ec7811d0a0f1057b11023b85082410be61ea69b3c7e6d51ac68ce50e9147a0b2856c4af2963ecd6899882350515d4e4bfbc986e300431b81f61cce2dbea5b6b092119c3a49cc94ec1294bb81c822fe249b535215c59436878822d07639a7543326668ef53564606665670e228940bb978d891deb279e8508849e4a79934a5e2a762c874089999b4d675137b7864007359383a8b7debd5608a4a7255d9edb7ae37508814c6966f6b267aeffca205031cc622b6e12e325291141a0b73cff7a8c31ec2e2d120884cd56529292544fe5440410c82cabb4235bf29b3e651744fe80fafdcf7d39a9b54ba5a205113f20d34dba79cbda97ad15e9033ae54b27cd4f768b9fe503da4fc754be87496529227b40b7f68e56a6070bb311d1034aacf6700bdfc4d0a1c3c648297940c7cfe512e34cd0cb080eafa381081e90255ed4cb6a37a6c1ba032a9a18ff797ead61ec0537c4a8d123628cb8b3c640c40e082dc9f23edd772a5b0cff3032eb8094b9ff9344b513a103ca44ff64e60c1357fc1ac6c2c0916ae8b071e3bfc8f121a04143640e883d49edb8cf7986fb34db202207e4be7aeaa6ce4b0d390ea84ea27e279973ea360a07746a0926bee4f0cedb790332a71cc6bd5337a0dfc3a67e4ef2cfed97810b70e0601b50c2e55299e5a3dec9415c83081bd0f976623f96f8880e2ed331813388ac01e999b166fd7ce3060d1944d4804ca573953897318e7d6c0c226940e5dbaf4ca1336b29870b2268409a9873baf3837706e46a8c8f9fb544d55312061133a0b2c46cf94ab50c28d9f626593a511b3a707841064f9c9cb642adf431f8000d1a3ac680baf2d97f53924a2b273120b4246982bc9db87f49c280ca7c695ff6928001d5379a493c31c74a3afa05b488c7939452b275daa817d029274dae0cb30b2851cfb164d1fc7432c805949c64a570722ec5934e640ba80b9fa56be3e64f5a4096747256d78f2933d508225940959ce232c793ca4b9d8605d46653165a6dfafa64011a3476e8f816d870c582c815506379192cfc9705112ba072b20aa7369c4cc2fdafb601912a20632e7fd61247bdf254409d14cc4d683a4d01552ade9af48c29266e80202205b47ac7ecb6f952fa9a1044a2803211f324daeb3f108102ea93b0db75c972353bdf6607912720dd379549ffb9643686470811272053d07059abc47babc4ce11224d40d8a75c4163660aa3990d7451812e3480010b5440840928fbbeccd9f749eb4b968052e253ceb693944c8a8812505dbae2a49ecf53262886481250f1ccde4dce34e1194702b23d552ae99458155d153902ba753fb996e7cf924d1123a0354ca64b0a2245406598da9b2cbda5d3bc4f102102324cb3b3ea8926b68543408a27a56a49ea12b15a08c8d49bc9c4d87fd2a56a08224140c57afb3cd66b144480808ed69da4e5e0dd7f927e800cf3bccd32694337ec03b46d8c31ca6b092689294e10e90132099a245975e5c366c30394a5a8a611aff3385a16416407a8f9d2b3f9cb23114474805a0b66e149fc2b2b4976a47c209203844992a88996d9e63da704223840988ee35de749eaadd30d1b38bc58838c5ba07276099b32781e90610b647aafafaa29956b0b4e0a64d402999496526e6ac92c810c5aa0fb84cd2db1ddc35c921ac6d674ecd861038c30de0b3d14c898053a4e937092e89a5e3e5bc3588e11ff2b3690210b94d8328fd722d730762e1608d3d96a6dc35f894954062c505fead28bc61ffdd1c578054aa9969394144df374054a5ee4beebb4358ce917325a819035a529f67356205dcca3494a34f14fb45c0532463f65c9742a9bf61ac612c70d0e030300e0840c55744a1e4b2ac73011430c230419a940e67b8a68ce7531020ce0b881c3062a1017ee55ac4bfa0519a74086bc073f712eefef6e0a549b52f757e66bea7529d025a56a6baade7fe99002a52449e5db1f771408dfcf0b0b59142879b1544f5ee52ca60f45a7a3769b9558b6780105e2c49727e9737b1df627d0b1dd93c9555a4f203d897f72b3f409bae7106474023df2b69692c9b4181f2774cfeee169e9ed593b4dfbb6936653c2adbe92b10994f8a7edb4e9dd12b16468026199a48f61d5cc044accf99e3f654e29e53426109bc4a8274972d59c3e494a2d81ce4a918bcf3f8f95ae04325d1a1f4b92f0fd735202e9a5fa6b64f4e494cb4920ce74a5d21b2c49a0c492fe441393634e92522490e9efb394aa48041990405ca9ce25d6b62707321e81de54dd9564ce995bb323d295ebe297497203643422ddefd65c8cd0a8f43065325924128883a150188330383e5d00d31308002838228b4402917040d7e5f1031400045128264c42301a26201e160a46627130140804c2c13010100a03c28060201c10c7734009e70321434a366b6baa3acc206692ca247db611086c9c4900247e387205bcc16d12d2cc840ed432a181d784f10a5ee488afd0e997995257f4c98e255417302abda9c3aa23193e63bdeca66f899e87a1467c81f57adc7494e2c1a8e22155d2d64437176fa42dddb964790ce12b7146040259a510475933d8ec80d78161a7fdf676c23cae0b46d850723b97966b0971c56a9518c435872adde73f3a5c789b9399b93eb81fb399fdfd75476bab4a67ea9a140c4e8b8df9bb84479d2dbcba88149f3f11e93665f318b2cf96f02a02df8ebfe6b0fcd5b5868395ed74ff8bd907e60555815452c7d9047537dc7bd190d79682548d41ac810864f584f052fdab6654502244e2ef8caedea84a6955123f0a57b99f45d4f10e5a5bb887837a7d89ac8d269930ad5cd491d902b03a144d605bb0c4da8d8329d6af58c3d269fdfdbfb360804e56a5f43a8000e15559009aa3d269e6f26656692eb13e8efda7c4496fe90af3de6cc5510a752553650dc6e2ab1aa98db40d7eddb2897971ac244b77db6a8735f15c80d782fbe419e954945d0bb000f8d20fcaa96aa8132412a38bf35faae648952cacbdfc5bcb5f700b0c3593e81bf9fd9f87b8ab3190b60a38183d5175512f09522a4d7fc31ca1968e092a9073ef8e55f3a4d727a24e7336b189c05e8bbb933c3b59dedfc586ca5ebee4cbaf7b44de7dc60b29b307da92c58088906f67618b16973e18bbc190c8b02af31ea22ea856ce0d6bbb10ae198c4b9d24cefba941049556becef719fa08aecf88ff3bf53f1e56b988839bec3f37dfcd3e067c81d8e81831037e014b5e4293d2dff24a1ed5ef760aca7a2ba85e45e05ac15648266aae424490f65e3b67b7557e885291e6de4f29c9073032ce118cbd35556e527d4109d2ab7886a30bd6e2dd3596b842a1dd313a84e41bc9209220060a8811f7dc6077ff774a03fa42c4b85cd930aeaf6fa670fb791bc1277c5c7ca6a59a77832358fc07415cb55e05ab78066e4ef9ba50204042ed731ad9e45cd00099d475a2186d4c675b97f565ed66998528c5e58217f8d28667a7df14f7f238c20afd238588d52208e5ad7ed48625e60915d6fafc1b9e84f3e804b34937789fdfe190694a4f4b56764159d33f5d7485b033bca11d86094ed1a97e74140ffba5b88146ea9715b94dea71f8729cc5ed85919f9d481b8854ca155f598193e2bd5577e10804c408a87a18e403ac3df34595862b1e8df867efdc7872fa52522c1ca18fa79054881b74af11b78de2e184c30d35942a740f24a457d5b6390530f482e3f7f3e429dc1ec6756d22a721c62f88c34b114a71e547d4b8120c427e6318af06cdd397b3bd1b19cc3c68f0b7714babe6e06a800749db022b22a1bc2c976561de8d1001e987c2bd6cb14140d4731f87ef4a90a3be4473a633c8216a0234b1c105812f19506da6485209334f58240c09204c2697e30722b67eb8511d0a8840d48f4c5a3a3d3d1bbfd66601f23611b68d68b29c7d0ab8c479f8d647e143e7f5aed155667f235e2ebe749abdf0b1a5c312a0eaddb89c43d6b12c16824c4e16715aae04046efe72c30389888ba470501e09f0018749729e957058093cd2597593d0b8247803253cd62f893823e3faa97472eaf0c055bcbf0f1e2ffed597259464d2c35d980d357c3404766ba0871b1bb2c90e1323a995f770ad8818391f6b42cebd11cbabb37f023f89699ba6f07bcd2a639876d1c66c4f8120c13a086c7413c0ef211fca18967e866ec0b914477584eb0405b688a11cb2f9a0bc8c44f76513736dafa98075200b490bd2a4c4876455a8f0f1fbb2ee22d7ad512954e747354c46a3fde8dc7e6f2709c526b654d51e74cbef53252ab4016d7295a9a7b829deccc071a7519bb6e03e95def40009e43ccd319565ae44992e91ef04e9f84e40e03f71fd17b13d9d654d28d847782b9ee8e0cf235b6adf510176fbde73c9964007102fac1e0252828b41cc8e57ebc146d4d3b99e81d94ab92e24d11a15dc1e5b317ae7585ae0f0ac94007d6faee35c8a244c859fb9657b557cc3c49429e21394be9bcf0d63d7552a2a3eda099b77a3d7516d8a89560aadc4c4334a64bc103ba3c51e527d0201895b2aee424fa7a6c0ef22d2fabe7b674e327e7924161691b6063dd18117f70bb7a4142f072013500dc06aafbdcc80297537580e32e818ce029e517f10a1580d8f953c6d951332803cb48fcc62f2eb8361447df3a86624db9ad21b849820a0c51ca0118452f0be2755122812ba39cff7749853ed299520655ac6f0b9a229f4c89b3f941b3542b138529975702d7b6b7a575338d6bf880e98addfdf523eeafa49c5cff3bd04b6585ac4c19a748567f5e8aef94661c4c19fe8f9ee7d8c70884763bdb78db3f55e7c0bb06360925187671cf6c1cab508e351c98b465ca091bd082d96c3ea617f5cc1e8882dcd3977cb8dcf5f8c4561dba928137d3704c6e88cbde2da094381e24c6c10fb3f80b43cbc839ae3c8f27cea3815c6fcdc196524f2c5cac1c9bab5f6808a61340b5bdd57c0360189a182080b517299b57778b89615cf26dd85805e9a2104364bdea8cb6720612cfa32cba164e6cec0c82ec865b845a4cf5f04d631c728a917daa5a5d85404a78a03b59d4af1f8ab6480e0e7d58bde973db0801d89e0921ccd0518f9c8da563ea934a8f6735b26eb77f4845db50e8fa04d13eccba38ef9934aad825675763a18f612deabea33bce072f691ea1992716544665a20e6fe474fed0c97bc8bc6132944c19c361883ca9f866f46865fddaeb9b00aa87ed131da6f89531f344d00badb8663409addcfb5e0ac8ffe59c3da89ba63e921b09b0b90c17a749129815882a54d10d31b9f6231047e126800c700754b4839313f61bfdb6e472b974b2f4264f0253d7941e29d6ad048c6ca2a24e89b4336445dc6f16164eac3cb352e02780d390d5c0c6410324acecd000d9a4d73396ce28b3e09ab1251b33c472e2d19a28f53a4a866a6e9b992454c102aaf64f3d8397b22a2c1b97956e031262962202888ee0dd9b9da0108d13d74d3f1148c58b2a1ef0fb50308f1f7ce48d268ed3e28f4f03af20c9a95384d8fecf8e1dd933554ef3edcea884f166f52a448e228095c0e2da363fca764602728721b8a6074057dc4ad8db8b19d2551e41ade070b9649091b11fd4fd95ce4dc90711071fa9f27125272f9601ad439bfda5f619c250664aa69648abfd8fab82491f960a9dee510145bf168fc802b59c9aa0b1b44671d8c192f3469be6d3c114342b531c6de2488d3dd6190f6009b396f50832c6cfcaca2500fae963014824f61ff3ec4c3adcea8439a899bfecea81dbb18e3ed7dc7055bffe69b1a1bd90a7ae25acc1042cb3969a355734a3b0baa7bcfb9ef465e85b8a53b5c20501e9585497d30957e3a9054bde5462011e020288078e906a67326c2f074721bd68ca33d83f7a40297a626d8d27573da4b701bc07e997e3781bc82b7153af3a52b3074e2f3e8a48be0330ed854320e6b9888f0b829a5cc9288c1cbe964d72ba9fcb68729fac34d4ca1fa033c61c603eb067adc4482a1d320f5a65f32a16c312fd8bc960cbe9095ee1ab1695e78005190c6fbed58eda8a217d0635b42eefc32b25e3f377dba899957b37eba8fa4cc9a4c3a4c6a59800ae817395f53103c6bdee9f4123290b69a17ea10257e7bfc4625d98c2b30a5d864b81de48dea23c148ff5b832b2ec120e8a3f2d5dc8e0ae75bf5fb491f2e32d400a857d3970b55304c6ff55c1d6928d412da687e675d45f20cb37fbc814f98e20ce1e488d1f722210864c51fbd8f2cca22c2eb6cf594f084057f948d2f66dec293f7c963f810010cd13527ba833ad3bdd5971ab9ba10762cd91960f687b2e099697953359a7eb1bdb7b8ddb91a1b6fd6ea54939e2c40ba76b4dc7f1ec5d4db6bea99ac15b5a156f5e36221841106494c482edc0d365e534a0f6883dcec4bb098ee9fe829fa088de367558f8d0bdcdefbf6117e384892467e3d98cfb70d6849a55c56b4bf90571fb52f676560d96b63682b461f635024ca13ddf701ea212453a69df9189ee0c0cf046a7e539934c82a20d1e1e025721e04d7dfa18998974408496347f6fa6bba0059523e3804369c6d95843d11b4c42ab695acc0e8c1b4cbd78aa4bd994ff021269a9e06f596ffb7ea442f7c8968e056b2ff291f987b14f7708c4a56825b620089a837099ae99240e1d01d14e20f3a2e2bd94c3b382c80cad5655d2f21f206e7a6985fc408e2e49d2357b7d1ed94141b3c896d80ff8d2cd88f72e9016e881be461f9a9ebfc6d4f197e1f08d995b9924dda8e3736ac0d027e69aeae5775ebe08ca2b27494ddfe2f83f9c32b7e8958bc4fd6b4cbe05530a00b66e98915775bdb7eaa8f4a09fdc16985863e61785c1a399551af8b947223e63836add0f1bdd19c4075025a31a2a56e57a24110b4ab87ed5af9438da1fca0b7d007a802f407d42a1a3bda94a0391d198e19006aa8147b75c6d067b096d9321a13c6087ebd826a12c1679081ab4893fae54911c36f1dcdd44858a6db70222ae76bc807827ce17bb14610b40e6eb81d0f7bc24a2fbdc68a2955a6a211a2a45d18773846e95435c6024a770ec71007a21fa527005f81f01c5c12ea0710a987424ce1731d389a437d50a9293da5cfbc694468cdca3c1c0af626ca8473c1d6ad03072c66325b2102bb82f955da57ce65ef427a281486be70f94538a170430ee09a7e5751eb4a2f3513973b8bd05f2a4c236888337fdbb5624d50f913178fd12c99b91f38c2cc532d956b365836a1e16f260cc40e08b1df59fd833db84e3f59958ebf2bcaa5cd987984a5050a6eace05df7c48eb87e4320d35e75854b450767ad778a5d99be318e4327447706a83916ff26442a636d8c444733594cf010a12bea0621f224379a32ce881af1d0e53f52a0f485e9056828978228f80934f17dcf013184cbf40e60c856e0d80ac4121f13a0148f2ecb38569a00af63b2381a8a8b67a078930bc7774cbe7fa5c2c6883ce2c31263766e9fdb65808b04193e1e653bac959e2c1207d19c3f79358b58eaac4907d734ff481b39d8cc2a4bd0b278d7b87b53730d0f5e3118b5be46150d5d82e15bb6047afb3ec8c11aaa5909efb489227d38dcf8d32ee9a562811c87e50941b636297ad32a68873ba77f1228ec24365e0a2a3e8fcaaf2f7d9aed99eeb88f422fa806db44f92a5f0ca6da7a050e6d0b01af0aac3143bae757b1eabecc7b8f5d128ca0555c5cd73670d34041060d04689dd6701d155d4f4f7452c120593dfe6f8a00fd42fd7cc4de52e751afdb8894d6bc525e78db0e5225a2977c02628640758962487a8d0c6959bce246e8144a26af4d6dbfec401ba592c26970c5e6acd5d12d180df9d8efb31c5827b85a86e526d23cf3689c211285795cfa46c415c7bfd7625cfd373e40a10cdc59d99d954b46321d755ac5c1a65846f1e68a2d5b88604f4cdbe20743e83fb68d1f65b591dfde4f31d1dc470233553f9ac404114609f225368936e4c73a72a6c2a813a62eeb8e48b7a516cbd62bcc42887ad084e7071717908edfa3845946d114318fcd96e4218d427ce6b65457208edb44f04748555ea801c086d4d37b6b789540e36b4dbcf6ee0f88e5d06004239a85398786b7e9320eb6cc4d5567cc469a06d21a0675137ebcc1d68e50578f626a5bfa528275fca2bc01988774651b6a32652b4ffc272eedaa4641be34c29c1a625590640a533fbcae84b398fc7aeabc613c5d5ea5e36d3c9950e538e4c7c4903c888147211f1b0d171a8da085eedecef86dec2f6cd614bdb1fe6605c6f4987995f116d8bc00204e4fa1f2db88602342f2283b309ec7cc2bd757e6020faf8dcfd3b1dfe16b8103d316bf05f58f0b6b55187ee0a1d4feccf8658b1091c07a841146e602e564dfeff3a285f12d1a94aa4f217b194e8c8d1b5e34f61c1a7f4d76ccc968586c11fc35f984e1b720d90961b6c85ebf31c580711f8749de340807c23ec35fab962abc4df91db3a7d07c7a99c833c0e1fe5bfba287386dd391b4f275e6c9276bb5dcc2c7f3853498464c6538db1214760a970e29f9e5a0314971d9c9c9802315a92aaeadc41a370706dea1a3b48c3caece74f004110dd6553057ce60ec06ed99fa7ac4dad9afb4706c52bfb4d07672b4287b860e63fea7381ec1a068def6cf66b0dcf2a22cc89f78e8f2ea790bb85d5884246326b5d3851c61ab2200875f239829b91782b8bdb18b5c45942b11111b592bfcaa4d73816c832ac825ebd8f806d0ce8ce92f98200b8d4069d65546ff1df3fe0f75ec5b02bcbe115c24f9ae54cd53c54b4054c78bfd119f5226cb435c44c550a297d10c47978dc5592a7ac483202bb48ec00335910b81d7d8c5b772056373ff7c192595ce1f4a117109fe7de26e580b3898fd1a9c5ba2ca08299a3e6c4e639982a9bed948d78e341ee8674ad73c5c10cdfe1854831d0e433ba6c4a3e5c63e60211310657b79510b18bab9d23e84b3d84da338c37ab50bf34e5ad07d806b0d61d09d56998fdf8a2179f87b3899ebeb9db230fd3b5c1d3e3227a353b23c2eb0c3650f24d766538395c52116f6db130b02825ec09920c562541b57c0a016c942c11c272c7e6361e2bf69a6ec8d960abf3d4122a8c6bb378f588359b13b0ac70f523680bf8ad2a16e223d071967be71b41c65c5e3c331019b198edcb9083db368081d5318546bdabf8b3105fa9032114cce3e6c3c2da9c8c3c32033f812550140c786ba0339a42f5e49d507f9b67853e680d9900d7161a31fb551ab00568eb7ed33e2c62d7543038ea4401e65a54a455ecfcee85b69e029846032bf4b7a0d7e59a322ca509deb7f310dd26e1b041bad94981b88a923aa253e8b39968c5c9a50eec8b27fe74a36a0fca8cabe3180e2d6d9f06cc26808f60b9c6f6400a5b0b937d685c0ee3da46331a6151e143df339d4a5f84d6ed1e40b02d0336ef9f2d10c8eda45190dd6b8cbd868c3e616a61a0e73cf66cd255796efcc821b3ebfac7219c614367d7e51e17a8c1b6ef8dc8494e331ecd9acb964c9729dadbb51f367a9929da3b759d36772af0d05ea258f048866880c9929d0907cf1581ee609db061c14a821b7ab092e153f98a3575d9a5dd93ad122952c40b61bb05fca448f3ba121cdcb79a2abf981c1f7f120833d5611cda3040681989f8a2c083f62c2ae24c8ee3fe7a5b75ac573a081397900adcd13278cc243847078d19e0162de77e00a96e715675a701dca67df3e96b9b3970a55095f9fbbe19d60926bad5cafe494086d2257a27b83f3216f68b220cbfc413686dc98ed284459094b3ef4b86e44acd3d1056119088a7d98da4836322373b1cfd0fae316af1c536b5028b471b853a6c1912a44a362f5aec6c5487a83b8ca84c695390f2730ff71d418064db68c687387bfac7706adc9426570a9e4172b6e1db3823e84838eca12b7acd3d0dd08c39af67e4aac68804ce7355fa8b52745fdd60c88de72e3b504996078a8604321d52229fad1530a2884f92fbf830e538cf9edeefb4dc91f6eee344c4b7008d27afacb63f9eb384ed777ce198e203280dba44aa0cec3f1239fadd27c86251f2e46af06e431f38bd12784faa1cd61ea940327bceeb0b5a446deea3b3e10fb3cd99aba58aaf76f9c4b8f181eaa958a1560e2d91c8e7650a7962f81bdc3c99a4a56c89bee903b0f90ffe9d670bceae1b00e8e9ba4059cc7455d3a883fc74e4be644571717ab05d4960f305d47b82c8e2e68943b3c526ad058db644d2016a87e4cb96221517915365cfbfe0450d14ee9d4817cd15ecafbf484ff40f377a074950e9875dae2f405d79bfaa4f5fc787e657132e9ccb9d236f5da05bc18964467127fff312458c4ccb33cf4340bd0f4d3d413e52032574c338e0a33c2e970d1ea90bccb3b738f0237c0a5811d66a93c20f9a5a5b888b01407e18fe6f74b5da9a0316293d483d6990bf27f43aecb639cce104c6b8daa09d8bac70c392906907b0c5e8d22204b132c22305626cd4c435b8fdb1f8ed742d0c47d0b19624fc101f63f2326b12db7fc9c05e75ab6500845f3c26ffe36ae3bf666b8bb25bbaa45e16bf2612922183d605cd67afa4232b767769831e45a5f07d14c69004e884d8fe85c0ee1b2db4b4eabaac24d116d6f4a3d77ce056339fd199a217429f1184e095a7c07d89514140f37dd8757543bcc65caa22c81107f5a929a5d31b8f8f90456f27348915d7cc982c889646f48e1d8fef0c292e6288e7223cc30f4995a30b10714cd2027c947e5a168215f158bc3710399c07c399b9025ef9121c9495eeb3498e6132c3145b34e865764a559b8270ca39e19c61a0f036a1726dd6380d042ad1fb0ceea433cd4ee19083649932a206f2cb5ff1e3f9bfe09b63f52278b2300cefc73c73a60edb2f86b92beb32af20065f9bb929d95f16f88b2d096fda34992195ca002fb15702008db9b36cf478396aef76cc5a28aa54044cd485a1967b4156c50746d8afab4fb84e42b6bd181aeb29d82b910b839a6c5b5d53290095b81c3d68361a848e92f97a249943d462a58e21b3871682b39e5adcf4b4d7625ba099882bc7b09b920f938a1941ed378a005504a51fc4ffba15152b8ecea719b2f18ed2125c6ebe3318f4d96af3c40be9994e21048a236999308a9327bd5315204bd9748e92200a8eb743219e163a8040350610a2333ddbb0c187b9f5690e05946c9afb596c671d57603c98a1d49346a5b2bae419008dbfc18fa9492190ff86247ae8229ba65f92536f8859f3c2224a68fc7904189f24100150219de1a7e3a4c92bc8a3e84f0b9cefd8a138230f717e55c96009f520fea85ae2ad6022c997341d459daca3aa7717acad8c1b722dde6742d821e85099042c49b1802dd5feb45e5d8ccacf9194c83846b8cd78290eb5c75eaa7b3d7c011469d57056d0aafbf7b4f4b043aab9a07890bb40a556bec07985fa008190b4aba2374b7c4c1442aea981fc01bebcb08146058a47c90f7c21999d602b426a1a21e934c2b63a0e34d1ac16445c87412c1b0f8c58e88125196d468574801ddf8efa35498fc208ed90ac1d83f9fcd3831f2b5aae7c0cfa4cb9eb277102b787053c8b4bd81f36f9bdaa4d613f5bf032243bf60251f80bd80d82f879465afbe459a5b70800803d98a798e2c8cfc1449edd555fac92dff7ac421d893436f2c9c3d56fba2b11d8e723916faf78c64db0fa8b10cfc16f7160ae3ce45ca994f6c8ea1628c1fd72c0854fdb0c205246572af50779c64ccb5cc0d1c7e463daffe354938fb3c0f5c2372686c5e41d79ac1ed0fcd28369552ddd749cdaeb48566f81804259c2c0b0ea4ccf778243001aa091ba8adf01d7454281405c15f155c689b327829eb754a326b1fe5003b8b9b838501c7342dd0769485c17f4638d092a8e2914874f9556d6fae9f4957658d71855ae5f4b761bd4af49c1826f8658a91749da144fff4691e47ccb8dc05ac5f1b095c902f4fbc8f936bb82b8caee3f4d4562cc2229bc79eaa687c8fae9452ef9f40c86c02a3fea2e957c4126abf6d2390f1dc9c3c90e6440b02522971822af34ce4abb8e0914bb657f31885011f5faad2aadccc53705b7b21dd8b81b7a7dd90e24de5dbd0dde8f596b1bdf57f07d9577ee8660bcfa910405d1ddd054237dba6e9119eebae2e5e32bbf5a3fdfe4ebd7597870bf5c04b060be135f56eadd35b6701f25f5875b31570ca0cdcb67b89779bba75d84a93dff9221bf3bbee6b9f15ee65f35aa0db865d8aedadc55ba7ecd60f441e75ab9ba3a3f2a4e043eec601ff6d408976ed5213d902b6874bd4516703124af3bc67d3568954e308ca4dab26d1ddee7953822ee317475b5a41420a1904ba7045523719fe5ce8740d12241a6c49d12e081c99b35d47e31e5f964b3ce5e65e6bb70d660e801d41ef593a1338d44bfe598ae61560dd7b34c5c554295a33ae0fe17f65e30b40fb37b3a0ccc343cd97398d1d9c1e9f5c5dbb749a7eda6ecbb35da2ad13f668ae432f6d76481c43f31771a112a2a4f12aafea5066a2b116ec0c1f063943146588c3b1ca52506b1246fade33360fd79ae5d42073d01e095e97e9e2aadc8e641ed1f750bbc6895368d028f35c959ebaa7912f1ad8c82d896fe48c08d2ccc8cbf5dba166292be889376657255ad0d3b26c05c24daa1f3de84801d0b887ea08ead726cb54f817ae23f5995698fa228405ba674ac4d9951b59872983abc190a0ad722219247fd75db8e2330b36f645772cd26ea921d41741f9a1fb27b16d085b45fd62017c175fa6f71745b656fec47cf1874b056cab8ee3948bb357a881052a8683ddb5d2fad152e00de49e22b36f77142682ee5cbeb656a51fa9f9f0feba33df88eebfe0e0853025801d5f0605a6c81e19967b500f5bf6534b639a59767af4ad96f79b1525ba4b5a4df48b9be43c80199f03f9719fd2570872d40ec6a265409b2918974725af45c310b9a6c30a656311f706b60e3e79230c95089830d2e4dc16eb3be7c8351cc19f7a949fe198fbcd8d4d7f840cb0ddfd43a96c07465e3d9795eefef10a8106d9fc273ed8d1e65752f2f13bd4f56c58dc9d2e1f549a52013bdd94bd2fbc23688c49a028437af94033609aa9d3600398789b0df44f9a8dbe899ac74dfa40d4ff7db1c693cc028ce2aacbfd9d09d169e2a1c4c51715c451b8b2c5ade0d1f83e032647f4c642fa8a1a0eafae59776f0c6eab14288b8ee4324b8cfeaeeb7873a2273b1c0b466868cd6fe8dbb3356a210a9a15370362bdd414284190003967596cda7cc2277fc6d3f788a72f67c9d78d81cd661e7d2c79cdc1d8cf7e0cf6baf7b67efcf434fba0ec9bb9cd3918d952366b5ec54f2fa1e5f91798c98dd1a0772dcf8b13af00249d55b440164528674c4d7f24dc4d865f6a8b14ba455a4160d705c6f4c84cdd445515da4c8353a30bf610394c222833806370cb60c3c087c10a033fa0c14cba0f77410611ed608ceb19648419038906d838f8bf08338a163acacd40d4713083dc962bcf8517370b59bdfc5d577642a17f61b40706e1b5c132fbbc11c2377067e065e3fc4cef4378049dd0e198875e6d00cd209b417d3d58662c632a0006d20d7c350723e39b155b74835506f40cf218641904372861d0c2a0aa41dd06bd06055b83c9926e9e0a34a869d0f901180454066c663013c5e0590e48efff3f8959da8bed837969f70350206c6edc60cabb5004b40b34502033a9567ac01545950eec4f1707880a5035407905082c189b6fa6024802b00ef0012002a06a035cf9e2900bc2027c2b6094c0280fc0e45c14b183d6000cc664731101520045e1edfe5b009702e12d40a9018e046a1a80bf81cc028103286341fb062a16a85d403d12c01cc2cae50d7eee75097b38298f932b7967893c0746023bc015e0bd7d23a4082afc2d18b10a110470a0f76a45901660b3145344a014a21270121c7f0a113a8f47ff8790d536d6566f307f1c252420c26a4c80f8a0780e642040d0fa7bfadf83ff836898697885a28b9d96e3204ed03a1027030448896dc48e87c0914b73a97e02424710f19f200fef662177ef2a1237513ba19742a8aecc4147afd83dad4ba3046b58edde11d3fc06f0dacf58058d25fe1952b80d1e1776ccdade06652f99dc1646a6521717d6dcd740ac0a6d6259d3b7591854f609d6cd540b8eb88084c39ee050d4a12bbfb2baea7be915f1eed86a74a74cb8ae6e7a1c5a7579f5da0b2a4816f0a3b04ed6b5022ce01ad97434cb68379e309eddc1619d093b078e6871689f502ad3fb5a81aeb666401dc71694f37d16ff316cc84a6d4b03a94bf08df840b4c189064d05cd24100a225198bb306ed1c1f6dae2542496f0b86f46e8cf98a03424aad7ae46eb6dbe158537f3fe55c8bfcfd61303732d407d8b79190e26463179062798c08d573e0bd919a0eab7cd2e948a69fc147f757688a2fd7b3f2a6f3aa7069904d0f0bf8662bafbde49f8f3f720b5f1ffa76647901c9c73adcc8fabd894cb59f4ae87fd3ed6f12a6885ec95e34a2080dac1434e06b50a17388619d9330ee5e699c4b5676c6c59898745b959500d290b281f609dc873b0cc446f53c1dcae5850e8c338982417a649b0f872b8b05762de8842c6abe33646a2e5dfc0a5e6b06c8a87ebe3e13980114f20bec6596de9636ed27883d022dd1d9988d6b435793afc652d08e2c9c2af9933addbca93c962c0851249f349adb62e73aebe9681c4dde1c3950e9cd01babd7da6a3074d5fe82a3f2db2ab003f1e0ebbe40f3920df22c887a0764b818b30901b7045d0cfb9b82afa9f7203e4005172fd62cf7fdab180d35e1f701089b45fb2b50aa6405582981fe88fc95098840684ba8c5cbe6888ad9a1b9e3d417340b1b29be87d62b6126566bc37605036fac3de897242092d56a94a2f08eeba3c8e4bfa65ee0e5460d00022aa4904169116be4b12fe75b03f2a4bc3f3c11e3004f9195b2539e7d8e14bbe0ce7a685762688f2e9cd4eeb6164537fd0473c2294d3c9e14283d7aef9fbb797315b69446688d48a21909bffc4c50e44381ad7dcc6dd2d0f1302d0188ba51a47f81d947e03fdee9ce596ca7578bedea17b61c7fc09b920fbfde1529f12adaedecd507afea5f0e5be32020e6f16468c304ea5a5601e0c20e8d18bc7aeed18a40dec489b78fe251ba65ff4fcc3a9ee42a92be6bfba29c395c3abc9d7ea162f76a7173a16de8abe9f65240f39e0ae842f34b80b20c92421ef2ea34af4fa3837ab08e35cf52c5faf86ee57f91e5acbc57fe89d076409e2a2f448806eb90a31dd0c11440f8de0321a87ee0f8bf2c21b91afd855fa0c46b8c3935fc209c54acad47a1f5a31794244ea328caa62360e20c6b3b5d48112bf76f580ad2349c6a5dd593dc792af4b886d4528782407ea5d60e6087df3dc6415bde7e36a033045cc083abc23e87f094ad2c0ad0d6f37e971c8bf4b76538ccb8cc0f3494c7e72d1922ae8f189c4584cbaf434bd0219ce8e29e754b97cf934ad9f6ce283e841ace0400bd6d6ee78eadf043fc70398ee2326dfedf790ad4bfd5102c2e94ccfe8cf5dfa5f81de075e42982b4e497962967a91b25fbe5548467c2c38e7bcbcb21e1730679f619c26ff2c0e76f4709fc0b3404a602c585f048e8a9584fda53842c85780223815c030d7b0201bb02151d02fad91f9f3440b2a4d001ffffffffffffffff9f26d8d666238df9ad5999929c9a132828b22e48322599524afa4b3f3b666723ac0b6c5c613e84e109050a5a09a570c1bb342d53748cfcdb24f98b639b8cd90475db17c79b3de14409935533edc549d5878f6a69bc38662aa1d2b56c7671ecefd8ded2dd5379bbb11fba38bb98694caba6192a29179c24095913ee7f5c9c3736264912d72a64e93e6e7132c97db55ab4b6482ee63635d7b05163ccf3bd349b25ad16c738425ac678f249d9826871f0afb467528d5e97ec2c8ebba327a96732d9128be04316665c67acf86e6f4fb9b2d7cfd4912528dd948dc5d9faa420d67382c5e1338941058f3df9af5e714abb0f252c7488dabf36ac7cb8e274fab2dbc8247fc3499703418d1a232ff868052e2b9bc32b7bbce59fde30fd950f569c84db9b3bb97333e86ad4a851430c1d38c4e81e2339306af85845824893977fb5aae2a4499fe499964d89095371fcb2925393924d92828f8a73dc67d2fb0f153342a7388a8abd70d3cd9a994d7192c452fdce044b71ca231bba6d4a34a973521c6433bbe4ab3a0a2eb3253371afe8d9aa394b9839b794284ede26561c215e33b51a8a93fc8d97dae783e29c77a15767faf8c43159126ec3fd5f49997bc387278ea3b241a9b75b51b9ecbfa101910f54163e3a71fab114f5b2296312bb055df8e0c47164f75975e986ddbcf0b189d309aa67527fb664ab4a0ece3e34710c33f57db935da322613e78fedbf94bf436b3698386913f73635aee2d2450e1f9738e78f064d696d53c51202910f4b9cf5043df1927c2ac67ce180f9c34725ce1b44442c33472c4992870f4a9cbbc4a084d11dcf70ec6833899324cf5b38999d248e9be4ef52269c20fe660f7c44e21845efe89199848451543c653c5545346c6cd114f7b5caaf64bc8f388d49aebee1ecd6e2f4e1886392efcf52ada44bfb8d386b888cabf15b4549ed07230e2b420995beea6c4c6cec8df020830353f858c41acf4ccad1273f541e1f8a4866538a55c965abbb33e54c4595891ecbd1137135ae061f88387abca5d8e8f8102753caf28e9d6ce1c310a7d5bc572926adfb082de1a31046f7aaef09713451bde4bea829fa9d0ce298c4d22469393182388fad9897052d31340dc431bea65a59b5ac950042d34ae2d55e31864d1a1653c997d15dfaf8c329986c632d6e17f2927e38bb684a3a7a630911d6471f4ee95767275aec423e2d7cf0e124951267438c922595f670b064826cc9cc9edbbb1e36f9c2c93362ee173ef270ae7cba4f0e157a824ce1e1e49b4a8ef6cc2c416b77386929d16ddd567173e5c30e478d27ed65985b87e365dd141937d1e170313f837aef17f3bb3ee67090e6df6faa72e525e9430e474d262798ae541393cc471c8e7d32c892ba458fd21d0ea7d2669f21c32429c9a38f379cb3e49853291fc2b6fb70c3d9a2bff6c885f8818f361867319865aed2f2b2cf92b938256e0a173ed8700a25e4f372fcffd21f6b389afc304974f8a186a3e7e671ddfc3d15d5091f69385c6a6f5bcc93af4f5bc8f840c34933cfdb6b52b2e5ebc7194e657656929827f830c3b1f484a5982f972489cc818f329cb4e56f0ccd7be292d2b9e0830cc74b255730bd5c168430051f63386c12268e2a51d375e63ec470347da64f460b9b2dcb8f309cc53ecde4b3385ba7ff00c349dcf0a5a7ef96adc98f2f9cda7e932468aed94a927c7821cbd40aedccb26c9abef52b64f8e8c241658fa6c9a5e44ddf1f5c38ce957cf963b3ebe6781719c3866de0630bc7b224d4f3643acfd42de2430b27f1a6fee4ae3ead1dc5e0230b27a942ec89f576bdb260e198aeb42e4fd4b246bc82ae31b965b24c3185bc6c2e55496b08d10ac7783165562d495e3bb98f2a9c4fd5a78c1cf107154e32fe529c06b777fd320a1f5338566565ade9167941e8af034732860892c25147b58f289c4e7e0d5f25b27eaafa80c2c12da9e91056e2bafec7134e52c4a6e8dd14a37364a5840f271c54dc1b7dba2bec2535e1983963959c7d6b3ad507130e26a51484e8978a8ffdb184539f98efb321bd2c6f94709691515eff7449d85d2d2ecabba6ce60665292bcf28184f35892a149ba8752b27ce3e308c70d7f62a5269942c287118e499a878fde2d15bb7d14e194652cc699a98c850f229cd26c335a7a7669a9c0f03184c399946edb6655afe687100e2a554929688612ceef609ca4175ddb93d46d38255798018cf3667e2829e2ebd4afbf38ce7cd5c9e89852d9f6c5f1943e25272befc7a57a718c134c54f5d0cde0c5b1faa4d1f99b2addbc650a3376711a752954d0b50e9191d6c54969922ff5c44b4dcdc5f9ac336afc2bf1abd91b6b1a01167c4003222c18830c13d4a8d1223dc62043871a192690818d14ccc0c529e80c67522edd8dc5b1a36da0096460a3c68c5bd4b6e2a633ed96748e54d00c5ba033236f17a213432407f68c5a24add2aad5ede6df3a7e23c0820f44400c1112fc0c5a54d1dada642b69f2eebace949224c8fd62882142821d2226a851430c911cc8a3c78e19b338cec997c494e43f3fa999218b73aaa75aa93867c4e2b4f6f327894b329df4c09163c78831589c04d325dd24ddea3c1be1d021a2a3118f3f1e8f3c30e31527b12f34a8bcac5716efe8bf6143a4c75d193a70b0400d7d0ecad081a3c7bae2e45e49bd9d14b51d3d06a61b3bd00432b05166b4e25cb56dd2fcdfcefdac38ec8ab27cb282ab386fbc67cada75fa82178319aa385add973c26c853714c92b8aaa9e142afbb19a8d02cbab5450b2a1a2b59a85b929c718a83bc652b3125c61487d1e6a57dc4b2ba877d039531a31487f5fe52937927366e8c90b183717400ef4744768c61478a73c9943776b309b27bf323366cf827111b233d46708ce81041993498318ae3e9925492ea824a62c423388ce5804772e0e84146076688e218455d9f982443713c4977c84f3db1dcfb19a0a83363b52a936a5b3877119b37eee631dfe07de220167c4bc885333c715029bb5f8916f5d5a5c8880e1164a62782199d385eeb7fa7589228cce0c4396343563e49be8de16fe294b4e9169979f44cc69a387d66b4b6b86282e8331356796617a1419838861a554ac8be973885492e66faba255589250e5739649e96f0b3fd56e22026f8850a72338772297110d7a921e244a9d099499c94602666da6b538a511227992726861f1366a747e2ec25e4aeeee6529f2b99300312c714636c125774c64afd234e41c8a043337fb457d411e71d31494cdbbdfc2635c6f7080137e29ca231c820d74e46597b308311e74ab2e8ed0b7fe142ca8b38c9d66ec94adabc269b8a38879638d5f436bdbb9a198938e8ad2469959a88386b9e097f7de2e8e8cb210ef72eba4e9a3ef92b89214e61b9269734a2532ea51027694cdd669127a4859d106759115d42c93b4958bf831983b84f8eaa9dfd9918156608e2383aa35d5e130d84693aa485d41822b4810e98198038efdb26954aa8180ffd0fc758355f512eddbf7c3f9cdfeb4c4cbe66b265131dcce8c371d4e5ecc96af66ef70c3e9c6b739d9b605bdf9991197b387cefcc9b209794ba7520c2811a357420c283874862f470b81f2b294c6d558ca23c9c3489a1d9dc040fe7d88c39f4a4928eb68a085e93fca6f6924ce310a78f8d93dd72eb45cbd130c4d1bde298e02b16b467340a71d84f51319d083b611e010d429c6234a1947492e0208efe27cf852d596c27010d411c94a09644735e25cb027152aa412869e384b88a8d00e2a0474e1a15ffd2b265ff70b4b3534a92a458f25fd3f0c379932815eec341df7e590a73273c4d1df0e11877bff484fb93f73d9c24d32496ce55f8c9961b6b7a3896a6241a62547bc33cbac788b13c1cab94eb8995fd1b6b7833a08187d36ac8d056dfdf582b7738edc60eeff7eb977be8b0c3b1e7f4821245c99eb90e67dbf2f0da8c79d9563a9c726f28417cde24d5f1c81c4ef23623a42951bb64891c0e2a37fa4e3ed937bb8bc361b35f3e5315031a70382825b7d13bb564cafa0d47517993123a93dc70d225a9927156d4e7a4018d369c4689929aef7b3465c5ce0534d870ac5063416fdea98c298d359c52b2ddcd3426baec3542430d2759314a95bc717308258d349c62fc731551826838a8ac7eb14906254613937686739d206e255d331c45a65eb8205ec6346538264d4df5929623c3419f58bcb41a2f96392b2b018d311c344e92b25b899394ecb38086184e9ac34fc5f072d98268240cc76cfe2163c9b31d79c170dad7a44295f58583ae4d9a522df7000d2f1ce3c6ad34a694a279df8583f7e8cb9c4145df5e0f0d2e1c63af8ebad0908b796fe124e6a8f7918d934908b58086164ee6fdba7f59c3a99527a09185e3c9ed08392747b449950fd0c0c249b6b497e42549bdc2497a13222608d53c49360b34ac704cab79a2de4cb27e0cadc249b8c99e474a06010d2a9cbdc2865327e63d72909123078e11d4a8218283c6145c070e1de820830134a4a068c97bab4691cffab59e374992ca4b37760334a27036250879d2b792107581c2f9c67ef45498bda49a0a683ce154277db9b79537d6129d86138ea1b9b2fbd228c9b49186021a4d389529316851a54e4b64c2314fc93e39635551e3259c342559a3b5a49570121ba3c524485115d36824e11ccaa40a5f79c32861de58c31bb1d16344e4860d1d3cee71f0e89122386cec18a181041a473811d030422982499a54161f320d22183ca345f94cadc15483dcc63eebb7e026f905d118c24938259e90374ae9778686104ea16594aed178eabdcdb1638c1094b181919146010b6ad42823b13132d23b2c18c7d07e49659359601cb48fc55e6ca818adffc5a924597d7d72e5527a105ff800a417853593b3d8a82e16bc3d2d5464bf82d0b37b02e1c5d9fe2d549e0b26a79d223d7484601707f3d2132785776bb170a464c342e0010f8c31d23aa851831f75e2716600d1c52979b9597a53e26dcfc531960ef9dedb328d352e0e7f269e9ebc81dce26c65332685902901c41627bd9c2716645425b95e2d8ea3b145b8491e2d3a15a329946c1518406671129675bba5f32fd4258bd3068bbf289f6162b66271b85a9364e6d793b49cc002dd25e8f4cc222703e41586baa656a5572320ae388b4c1df2afc4b4e2b8176f265f9c123597ac40e46fd6ca7c51b7d72a4e4f39cd216af1669ea543e9115a3f882a8e26690c269fe8f493f4fe3d708c8123878ddf218246d05271f8ca179e27e8bf3425541cb764ba876a93539c75db64b14d767d23531c6e54925dda3f5dfe2b85d699193c46462c5b4c29ab2bb3f377fcd49da4387fcca524846b46d196984f92f5244571b2246eaaa4cb2b4d69a13826e1a410bf97ea548420a0389dde5f6bba0d87880b740c904f9c84caee65bc72fb313d71dc581199abe3526eaf13278d4b675292ae4c772b04104e9c640c9372d22aee28b56e10403671faf0ed3415c6e449ae264ef22f8449cdd0eb76268ea227fe923669aea9828983121dd3b7ee1d3249815ce2145fba949837da434f2c717ccbf61333d9b1bdefe04150a3c60efe0648250eeae41b735171e12d098412a774b12143ec6cbca5804ce21c1b633d479b78a96b193f8295c469ccddef2d59c5377111402271504a2641895a215fe40381c4d93688b9d37f629c00f2084ec83b1567d11c2ba851636dd8480f911c23c608208e38497a7e93ae8cb018938d389b24f9288b9d66c27907c28853ef8bed96f87372ac8ba85a356c765696c789854d72490c1a4e451cd4694d39fada84a524b35d8b0348224e97ac4e55aba8f4a6b90e324478b48d32121b65e4d891280310441c83f858d073dfb559de58cb010ec70eb039e33cc4d1dc2d2eee8912439c379914a29e2a2a95588e1a35ea0a208538c885fa12a37849c277421c37f6bfabc9679be60ee258b228a155948a208ea5374e38ad2090401cf382b624428dcc1c221040183d2d6cf2d454cbb21616ecc44d554c8b5e14e40fc73ec9521025aef342ee8763cecf3ca784ca9da0eec349958c08b57abd01840fc7f853177a966432c1b22d80ece1a474c3ef28bb24899754a306eae15892283319ffa426b1ae019287b35e980d2ae5fcb492c8dbe021627838b529a543e3a92456336280dce194f9297f620e3573527638bab8c5c9347a529a243c7a24903a9c2e337d9d5c956d7d77f0377880d0e198b2e83d417d9ce529e121a2430c1c657338977dc95a318a9b782a881c4e16b27d2dd98c03240ea72d31396d1d671945341d2070389ff41d27f6fa786f22c0820ff4abe0118e1c2ba87103e40d870f51927c72450d6da2493dc80071c3315d38d1369c54121b21479d80b0a1e495e1335c0cb3b61c1a54aca442fab69b7609640da718b3668c5ea968d04778340aced4702af9bba3bfd962ace80d5f90341cc7734e095ba2a657111a0e7e62f3bb4de5abecea190e23da64be68ca6450317f831ea30a88198a6f9113b194c5b48ade131a4fcb3a0029c341c960217b6ac3a6f34ef03a4ec00210329c57c3345f73c9532766d30432b0410290311cc6fffcc4f08d22d7168088e1b056a244cb1bc7c1af40470840c2700c3ea37b426a9e143f188e25574e88897dea6502f285d35b9da61d3f79e1244f6caacf92e2a9d8dae0216243078f0f81310148174eeb17feab94b904102e9ce40dd59c66d1a4d6ef08205b387596fc7327ecec9b0802102d1ce48e9065729430fafcf41dc8014816cebe734137e8f2d3230816ce26762ab6c64c672b205738d9c8fd3f49c812aa72bc03c40ac7f88cd1c4248b4a9b57e1e0292f42b699389d27154e99c4159d0b51f1f74de154993bf4c973a521932c6f002285a359ba3f7dd94db955b40148148e69a5cc54c3fb6412e71011494ac901028553a8d1ad12b4c4e58d9e7098d1f19ba3a4409c70b84da377b16d178034a12c1a1a2d643be5b4c268e6cb5a41f5bb650c1e221e188387486210261c2c4cee0cb3c1259cd764dd3ad57727c91788120edae4bfbaa43283861a2409661525a6ad6c49b69307204838a64b51a6f29e5c97b41b6b3674f03ad4360072846338498911f925aac6f88d351c367a8c90810110231ccedce7777d7eee7a1d78a347a3206ff4e81d59468f4b9022981556345c0caf1563292522c78449f76814d4a871a347efa851a38c1e074284533615ad2499ccfae3328473493145cd924e10211c9467d097b24546fb8271cadad9ed9b64bd8d070c0e28e992b45c69a13d9c4f8a2196731754ac87f387d9a568974fa8641e4e926a680fd5cd95927838ad66ad2a490e99e4f00e0737cf35d77c99723b1c83bcf58e33b70e47b1bb38f9d456accfe970ce9cf12cac7338ebfc8f49ff2e1d9a1c0e9647a80e17eb532a8fc3c9ffdad4ace86adbe1709245b5493aa3a25fd01b8efe5d3fb2c1dca4b8e19867545df29f13bda40d07759b42edc4109b62d8708a3f72366e554cf26b38c824b6da33456a38ed596a1599a6e1f8fea54faf44575dd0703e29e8b21fa11ad53cc341695c6b13638bc698e1a02bab66c9e24617cb703a1d26aaeebc526a643886876712f309a2bd426338c51521d5d52a253989e1d4963c67f70fc331a5ad0c9507c341264b924c6b926712ff42fa44e8c9b0ba178e2537897359adbdef2e9ca4d75f688fe9b63a09830b278b77275bc95b385ae82561ccea35af85c328495f856df0db68168eb741f4eac6d18c25160e724474a9885e925ee1a06486d5ca5565865638a53ad12ca6317a5285e38e76252dfd5ee651e160392bff9a3aa9f6299cf55bb425a1f94b35291c4785a676af92289c7d6fc6c5e25038ed9d103972965e829e70983d5954ca187f64c809a7bd9461928a258b9834e1246ad2fed022640835134e923427dcfd259c4ca994268bbe10372be13832e7ebcdc63b2527e164f97e9a4946c24949fb674a8d491e9b239c3a3d7488935e7e56239cc4a06252972e4538fd663f6582c8d7970867f9bbd0354a099fde100e32fb3349a5b2a4676108e158f992be3423346fd5c138e84b7933067d7a609c4c653cb4e853a3927e7134396f469fdefbd717c7a0225eec4d052d7b713e498feafba6462de1c53975b32e4596a0c4bb38a55241c9f461f1e47471cca516f397e5ebd6b9e02f33692c39e3e218ff4d0613e75b1ce44979922549aa24655b1c53ff66a6306172beb538c92583aa9c934b122f2d8e5bb2ee9438252ea4b3386f78d72f25799e466571d099c4b56ce28d2595589cfbbfc4247192f86a81c551cde49093b3f9b57c45dadeedf37574c5f13499bece183e166bc5492c94aa9ac68a93b258933253a916ade2a095d1c42a2956c5f94246c96916a7e220739a08652a2cb38f8a6309ca4dcc68d4d025a738ee6bbaa4726a59129be260326689fba53789a614c798a984bdd6142a52529c848c1c6559da65a3a33895d2fe15ae048d27511c3664c68e0c27be5d4271cca0eea2d7792217501c7cae54f435cd274ed12c9e1253297d691a4f1cdb2b062d7eb14e9c52c624da98e865e2653871f48b17954c5fc5f24d9c4e5f59104ad5ec25d1c4294b3706a127b3d6cec4b182ee49490cea2dd898387e95921945e612c77c9a3457dd7c7ec612071383f5c618cb14b495386718bf9c1a539438a6a092a0192d0625ae3b8953e66d398be1c2b46525713af98d5d62384db2b291388bb64d0d4f8f4bc985c4d93449a724c1dc471c4e4c925e232bfcc675c4292ccd2b9bbce174b58d38099f3d717429db3c31e2209b42599ab79c9c167136315d3c4964f9feae88939494cb2549b25c269e8883a6981131f21743081107956ce47fb7640ba1439c36c43567ae0d711a55f2fee9cb14e6429cb24ed5ac8a944f99106552715e799b411cfd4b2d88834cb5a22743a8d86e20cede971a7e84fec80a88f38f5d2cbdbea2affee1949fa15d7ae3875390496bdd5e3a61ca3e1cb6d2cac91d35a54c3e1c94aca6bccb24282ff77092d1c347962a6193500fa7589697a9849a87832adf2ff93b4f2fa77838dd55fcdb6f09da3abdc349b95ffcd0935c4ed352e9dba5753855b0d84b256d1273a57438b98cc69346649795e670d82466f81273f9b52f87e36bca9a63f1eee21e87835041ea874c9e29e870386f08b33121df76476f38fc7fc6b826891bce6ae9e4ed51315fea369ca40c613ad6e2c651b3e1e45fd999cbd6b6ea359c629292baf6ac86d35f0ab325ed6d9b6849c3c164aeb5172dad540b1a8e196b9294ed4f0ca152ce7010b229c67429c50c079542c92d490923d359ca70143d7916d32e954a16329cdaa4af08dd629afe184e2946852eb947e80a8be1d89eb9f5545a7a6fc270ce743994ea60386deabf8c3f4949b6f9c249f65a938492dfb3ad170ee3eabd26b8e538e9c2314c9b184da65c389e9c197fa5dbc249dc9f8f5d3d1fa08573e82d6d92a8896f133e200ba78bfef7e22e32cdc70760a1ae8b415738aabc9dded4b8fd2756389b94c49e9204d90d75154ec2886f9d6b88b79b0ae7ba2405db2b25085d4fe1204fc6ef068bd1f42c85f30871d6612a4c751b8553907965369d99bab55c97375b0ff50987abdf0aca545226a64e3896097b41a951156b69c2f982fad9b4cde57922134e1a64dfa9cc1aca84b8845392374e3429939512510907b5a5359f984bc229ac65b7093bf52743c279bfc4ac4bc29b7c0b8f700c0f19942cd7924e8c7012e3976463d6f5612ac2318e6ad356a3a5434e84f3eee93161ee070ce1181b4bb9cc7efed60f10c2514d363d4244d66a3818c7bff0a7cc52ccda1b609c4626952cc4bfa9cbfee294f69a4254cc4e92fae29873fe43cf7a49b917274f4d9fe935d5ab851767b38d27326738bd945d1cfb2a6e4d3a695d9c6e4c86fc0ed11adee5e2e861722b4574b8384593d6e43ff30a2a76b738c5a9491a747a5f65678bd3e9da97ca3e1751aac529c7c6646a7f76b24f8b93b45a1b4baf9952f2599c3adf4bb26c6ab644b238a968a12a55ff2da66371f6d2f70cba24f17663b038a8d425acbbfb8aa35e691257259e3ad55c71b4bce134d89c10fd592bcefb6aca7536897c8915a70d42cfd5feab388e52a15d455cd2ed5571ac0b9125264ac5e9d5adbd624f2a29848ad36893d35eb162924d4e71baf11069622c1566628a93fb9d74e1ed529ccfb45bfb98d65169521c3798a035894771103bafb2daa6eeb328ce352629e1c6376acfa13888bbbcffd06072cea038e968320b0d221fe24f9cf42949502589b15cb49e3889276eacd4abd624da89a34927d464b3922b5e38710ceabb5bda6b79974d9c84b1ec9159d1c439c4cd6b49ea2a7a26ce7bf9a4a082c66c8b98380535c25f4c4f972e71ba7861b266cbd95be2a8269ca4697775825789839e13335bbf7871a34422bc72f5c9244ea3d48cc9092a6c5c342471acae944b627e9a20e3522271b6557ffbf4ad12de2ca540e26871551a545c320b41e311878b62a29d2953d1257a79a0e188b39655bfa5b4652a7273415a0e6ad408018d461c652e95ca6bf9c68af4c061c3c68e91428311a73e93255e9468376d692ce2240993e9a494f2651b7463edc5e021920eed581147d7ac95d9cf3e4fec6924e218a2e6c392aa6c023d76f016d021068e110450602447272239c4b0c02f80020218791e64f4e84f367a2ca0020098409605ae2c905717228190aaa15bc368a01e2364f0284000ca482ce0af0000f4182143050408c08bd16488a1a373204000233c1e91e1223c7624a004233876b40202700a000400000000c0070000000004a0030bc800004646921a041040f768af518000748f76111e350e0080013820013cdec60d50f718b1616301000840030e80387ae4b831d2366c240002422863473010478f1ce07060ec1803fda2c78f8cf1631820c41768c30602427a81387ab8c81864d8b09180105e9c941c4a679e32dd587346c6d918cfc3460e70b80d7f1ee060eba103470a427681387af0b83192c3868d0484e8e20021b938a6184b748f3a654189b83859e8d49427281371fa2dce1ac3d6c6d3a5317e8cb5c549ccdd6b9a52c60e34c68fa163fc1838a203478f1c38c8486cf0f81c387694905a24659ce09ac6cbada74515b52bca66595c587735617f1bd3a8741d27a937461a043b8081e1418648b251468f1de01829bb31d237d80432b0d18290591cedc4a0b71763b94e56c9010fa82002851221b2c841482cd030b3d22387c0e2e497ef54e9526b32585ea157bc6c5c97587c46f5cc73f9cd47a4495910e28a53b89427fb49f94cd24343482b4e29a65bff76de2f7e4346049242062b8e3d16744ed4bf31799ab186ace2f4954b125ea4ec9e8e3774740e14bc8b98c060882a527126cbb0dc55aaa25ea934541c5d9397291195fbe53e459ae2e0bd9e75db6f8620a414e7cb24699f2615f3a98614a7a0ed972d897741eb3b8ab3cbc658fe7a72632de1b831c2233b446c5488284242d168fcc971931e3a7e8ce78174e0b0e1bf37e87fc182e234da4e129339f234ed1908f9447aab55dde49435791d3a10b9418827768b41dc3226d394b5184c776d838d92b65a4827cea34a3e25c4963ce1826a08e1c429e67fb3ab843c619b1b6b08478e111b39fa701307ad5f4ac971c21b6ba92344130711df53bfa4ff43884332718a9bd5f5e27e6acb36d239cc0621983805ed167a5270d1b96f07865ce2a87d9f5e5a2d5468187d0ed8122771329a456aa864d289d0799ca01227af649e262825c63bcbb920006c08a1c431e3c832257b84ac6737766412a7ad9d4b42acbc5eb419228983de58d9476dda0c2a130989c4e9fb947666c91be49514489c4b6f7de990a32a260b1f717c17515ee28ac57a8438e2a4fe54caa562bd7ea8222b30418d1a669f234970e80869c4b12b29dfdc92c454e633e26482dd8fa86c0959c46993a44dbeaef065ad8728e224dd25d34aba67eebd90449ce497104a05f926410841041f1a1734966bd2a0a129f6a693f133fb329e420e716a3fc9358d586dd317439432a966f1ca5dd9ede1ba5aa35e633a3132268538cdcc598955e70e421c94d8261d7f25538490419c35769f1eb1b9baca13c441ae596b5435494e8642027192adbb1f2d5a7b2c03c4d9fcef7db7467f3886b7cb61b1e2a5931a3f1c2fd8d8dbfc6dfc4efb705611270917524cf20cf1e1a4a45ad8d6f4277e9cece1eeca71da9535d663ab554cfd95b0e9e19434b694cd057121240fe7349739ddf4ea62128287c3ae99b0249e74c81d0e422c8daa2ba136fef286103b9cbb828c31175a4ad921753825c9bb84b98a52d773081d0e964bd00a151377cb2511111e3bd01e078f1e550899c3b9c4248be8da8fc69c37d6527f0edb1122076f2e8392554be68490389c2e9b9ad84c3aa428e98e3a2e38544246a551b9c2652c7984bca1f07697d3aa6072a33134671be28663e68e5a92ac2475d16a4372ae7be8d06c193f1bd8cc9a2c650b9731e6b9a52dadd414f4359cc465af742594bcf63d440dc7b10d25adc8d117e386a4e15cb3257e8e8a6848db925ab80c2ea615b388ec52f73bb52cba0b39c3e94b527e88194e2a87d55c6e5162fc17a37bece09103216508214332dfe261c14dde4c92ed1ab7f94e43c670ca8b21ebf4092f102206ac414818ce5f595a46864c93e3040cc73ddb24a598c2a4edf13e10f28593884c256d6eb3e22409f1c2715318751b36538cd7250ae9c241535f2ce124f9102e1c47ffc4c97efc867243b6a083102da45da9d3c53d2ec5869c3ed972c64d99d21e9285b355285953ac517df2898ecf61c30ebd8ba00282102c1c6c3777b3ae4949146dc8158e497f5d5a8b1644fa186285532ccd90359d7988d830866682902a1cc376e8e92a25e692124347f3b021860e1c3a74f48e111b232f86bf8dd45fc88a102a9c47bd09a115d35caa931d3bc898c2419924492f15c452cc9d0d1eaf03911ce78610291cc4be3694dbadcef65138c6f62db113ee52d2f412215038d6c9a958262573fdd1138e5984dac88b27c32e4988138e272dc74fa87656bab110d284c3ae8b85a6147c364bc8c0c14780051f884031e1a8499aae1c99f5ae65c8124e7d5571a5726a4ea594700a272cae45ee56ed65242409e73a2fb9727e2999f7beb1a62a18e37b8480439070ccee622adb2e23ead4f1371061010f428e700a9afedb74478961fe0f428c70ccee4cd1de9252392e11428a5095a46fca1e8410e194432be3c6584babf6109ed797d3b98110228453d0cbcb3e774a5ad006a3f0792ad46e538980b18693f3983719d1f24e6f0b4a7493fdca690e1e3d769411c62f0e9a5a5210b16e1794bcf718b1b163240c5f9c2ba868d16c34b5de12462f8e1bf3c6a0cedf45767761f0e2e41b4ff86b34952fbcb68b93c9b529e1f7473cc81059011cc2d0c531978ca5c9e3a4d6d0f21dc2c8c551c6c44a4235ae95987071bcb778a54be489ac3d0e61dce2a4427344a570fa25b7d78123d1306c7152a3e99409d7f8218c5a9c7ab3c824ddad61d0e258aa5da7cc364feb248c591c4e86c98f134e61c8e26cde2565f79df0a7ad3062714c1ba7567386c280c5b9ff370969bd417fce2eb2011e4218af3895785f262ec82408932bce35972f96b6e96534b5e2f42942c60c9b794318ac38ea8941e76e1859e2495ac5a9de36c815e9abe2bc49c89d4ca285918a93262174a88b0cb2949230507134e52789bdfd290e274a4c62ba2585618aa36bf58ade3df94ec96194e298e25b6ff82d415616631006298e5e29bdc458aed8171ac549ee3049464d720959256188e23c3b42efe7aac9175d18a1502dc6b7664cf216f2aad1fceae414d922c4dc6180e2182bac2471f9e77f923e713ea17ef9e4f24cfa4e9e388e26591d993b715e935ef7df94145ae6c4a9ace3475faed613b389935f929bd4d46d34a389f3286d92f8193344cb9489b3c6e9ac785fb6294b9838893b314dbf9269a6d2258ea666fa24596c2bf3963897956dcad6b8895f8953be49295df59438b6e635697428afd927716c91cd27a86db36c4b02a5626e9eb71d899358497621d399b0319038c89cd093bba44cbe3ee220dabc2e9758d26ed41167b53e534a8e932ba38d38ff7eed87cf88933e21be3bcee48b7211a775ffd8aa12ace254c45137494950b5984106137110153435051f1127f169eb55622571bc3fc46163c50cafd41be21cb759771bfef49d0a71ae117d6b69774c9a08713493648916d3208ea2e29b99ec2558ec05715eb9b7d7d5982ff1409c04a5f2e9cdbdd8cc0171eed1f3a5424daf29f9c3c14c8dc6650e15bef6c3499a880a1de326fcdc8773ac97d2505a3e9cbf8988a8d4ed6422b26830120a45017128180a2adde600931308001844200b8642b160385575f1031400035f3020423e2622221c10148c84429130140e83c18040180c048481e16018101087e772e5dd3a48371009a870d2f883da7d246a5288fd56fb94e92904d8f6a5b9bff5980a5135293d51357300940d3934ca42ffb3eb553175f4a33254eefc7d6b54ae3bcbe4153de1471b006957ada39e27e2c064e97bb1112b549865e8623c3d4fe2117380d5bdf5ab0b669f8c45ee372bdcc7e648c79ab33f17f30109040a7e167bb6644977612ed00e795be3214f2f25a1f782f9088da5a7a7c2a00ea2daf883817dd80e508999f79a98765f6402e7188e393f5902015efb313c90fe7cb812f1153a97c76910e4c867e56280425be46435e22f11e8758829d01a97d90cfa5c2932c1e14203d1cb39629d77f3d9b82dff81bdc49408dbb9a0d55ac137215de5ee79d38d543cca3b95f25bd81158bc2d9e0297a2491fd798987cdd3ebd32595856d424e371fdf60edbf02c7052359e72d386e1759be91fa4bc68d1d9551e1ebd239d68b9d4085064e4ebce195748921a96f42ca209ad65a5c22a80a759e263da44fe0b4f06c7320650328e66bb61da13f00feb66fa81c7fd47ee809e39149f44d22d683a43ab622c2b10d1b5387ad1209ddbb26b7220bed13d916bf93188510cfdf7f6e08beec35feb8a15ead0104e05ab568de38377345521b5be738a0534fcf5835105b44c266a4498d67cea59a8098f4c3710fb8cad3dce6a7c57aacd04311f0b6820f4073854a63180b39b82f49f6bc4e04d37fd6ab86a74d29b8f83255c7cfc97082f40e1b9f0d6a2d11371090ce3a9e848cefd8162712817109d212b9975a654176a8f3c67038f7ee398663876850671bf3eb7e0bfcbaa29c92cfc626933f2d500c777d1f88d7884e3bdbd6dde75885744989fc52fc77e7c2a23de03dec507a08c7f0069979725153adf808427cba01397068a6be007e9e940631686245e8e7714c2b22a95bb7f9fdade3ccc57f0a09044266988ab25bd4e54307003b5c22f0414f3a3d8f629191f04ae27512509e3f9620a952470d8e5827f8b2a1873a1bd8488fd7849fa99510339933ce4dc19022cb842d8abe8c0a8a956bbddf7d0ffdba43325493b636fff7de3f0ebc60b720b9fc366c5f97631cda72f59551a934c56fcc0ebf3dbfd4348ec650420fc96a385077d330e32c4fbb1a18b1fddb0e0a2e38ad09a1f0b542a1b963c15e8b4564d76ebd99f6771efb25e0087766b013148c7059276dfe1be31e02211a0913404f0448cc9e5b2dd8e4c6ea8c5703b5831f8eb593e111e3a7b177ae4fe90cb37602da95675dc30db1ef952b874221b71132b953ef21f8abec21281831d8e9fecaa9452b96eab68319870752a081175f9f4fb873e5c31b2a1a9a59b76f8bb50def86d8b897124d72cede817b0fc182859077296891c5589870be55a94abac90ced0ff0ec7363b5c041bc4189a9ff14925cf67150b9539b6e214732dfdf9fb4cdb37b288b3408312f276dc3e830b9f860611a5cdf9409822c2b54e769fc58db3400d0551b689664312a1ed9fda99464dd24dfaa87f35499f0c0067f219f971a8645ee78b690b69b0826a0fe109981823a4712f9478f7385910829e2f07676a171af5b3687d39ae3fec5730a8e05a2658938746eaad5e04af1c31f257d96784a58d998926d8b98cfc80b596417856846d3b2477ab092846023378cb6b38fcf1ab244ff7d0e1b3f9da35b29a8771bf13722a21c0586fd28dc23c38846aaff527e273b1a7c9a55bcda38753035248ee343a63bda68b4955d06cd9c32e0387d9d850023452fccdb2e493f9f0f32618b01c3402d02f4cbbf4da4909c2a527df61092a241dafe0020a4624e125663a8ee3e21e9e51f285ea4ac9739871e8264c34a79becad2f2967a251d8ae7915d2f6f47397d7aa633173c22272ed2bd71d6e77e918e7d2b6372e2913c7c23b44e814121723b016f76144623173cf3d14f378130238d14470868bd919f8dd46c50a082945340b23e8850a0a6cd5ab881dc5086a01b6b9713018316051a01ba8ef060a49bd270aae72f5eb36f657025185bd63463636cbd0e19df4d1f7ce4c800718b34fc4d107f2a095f382b2b5d1a7d4209e0ebab4a1a14cd0455bfcaa5f11449710da6d588ca78aaa1b5e031e8abdce33608117403632f457947288fe66961e23bd0e2e14847a41f3cb1a1ef5cf4c78806a559daf28219dd556d0d893a8684d992bd84949b69be029829b5a06263ad8fa2ef5be64c0854aba081046a3d6644ca54864aea6070d4eb7601abaedfb4306fb2f8c58fb014650c881c025b89f3a624dacf6cbf7f5756a5324d31d2edd3cf805ce841104fe97771a6eafa943162111b3c7829bbee46f98dfc7aa3e30155d08277c8d2d71bedd646f7e56c1f7e1300b07c2d959cd7990008109921c31ae275ecbfb88885ab02d3eea1f72d4eb69ceb310fc71631cce48fb78dd490b8fcb554e90b41fdb465f2b1d593583e4fc57867f192fe8487dff47ca71f1e14dfda015ba2c06a2bf59ea52380d24e4bab666189ee797c952f4c225b3fcb4111c192f19ff45e3f3ca9b6951e46c0ace35194ccc2cb32cd4e538888bd402b10c112a88f11544f5bbdb0a293076c6ce689771406037d9dc23ed687405150c2134ff213f32d72b5a8cb96d8717f5e3ea60096813914bbcd70e03d8957d93e3482bf97e4e180f5c8e57928cceba1187e675a36e9cae0cdfe08221bf83dc1c1b40ce78870b3a138ce95efa4b9cd07c1daddc4a5fe1f7aac14305a1c5d82abaac3cfe1e2792587ce43ed85506fd44c412c42a41d1234c94727b2eec2d9b3929a36431bf6a1c161e8394a8f43aaf5633fb0d9219bddcfcd139bba737fb98234f9a554975deae212d72bd713edba470286cddeeeb4016bcab4e467f7c042ec26b7076e7eb021edad5d8d1b74902f6665b41b3a9ec34d7d8a86746c2074722bda104a5604355c539ca426aeb6c9b47763e745694a960ef7cd44eb423e876fd219fe00b6849d9d8a5d84ac9c29496d514d3418bfc528161642e6e11512fbc49ff226311c1c59e00dea81a81147ceacc28155959d258cf2939a7984618c2182433989aa75277a35fe8369dc018d650b2a548429dd80c6be42f163dbe97a3ddf6d12b26e6a432aeac763f250452de25861aeba79359439fa9d0146a28f55b1898a0bb8191b15dd4e93b9bf37dfd0fe94a3b29174187117df14f342c526323a6061b6051a9437181d39b922596d725b3d6bb9edb7deacfe89a19cc2c3a71bf08c29efd2c095351eb1d8fd40d3a514c67ed649e580eeb4fc0f62b5dcde93b331be00f1847919449c5481e9220776c0da7a0d02458c98fc4553bb3b338393bacc3ac11b8b76b498729e8b5d8a700f761da2201059c4ceddd5ce66b3967c6bd7137dee93e9567746afd3e80339a564b85e446c2a20f4481e65e5e7b27896be55d5567f0dc4e68db47648402c87bbab24e38ef63997d2a1c23a102f5f66a353196f002890a1996c5f33a15731fa08395c196982e9835c2545ce33745739bc27f95f566f8290ba4b19fe66dcc88c215ddfc322c67b8fea775bd0edd3539d567a70e3baa382ed129cc81ea11b953ab612091471fa5f526e059e924d42936d1426a9a8e4ccfd9c93c91e54e802bb01701c549a78eb2b404eddbb7b7422fc44675bcb153760697d848541fd6eee7c9d510295b346691505a72139726ef83fbc700733997937b82b1886d69a0ab7f916a82bc1dcde5e81d9ce38b77a1abe982ddc889f8d147f2e97cb6e94adf9ba257d21a5c7553464a088572940a6870366b22b2330bf3085f1fd24f29da76122b930f1a6724d943e9f9fcd591d875eb86023ce4a0e5f83cc7bc9e0b7b2d1a42e97c72bec03bdc8e501ea33c910dd518584b148515c113220f9abc9247167fdcc1b07518281f1dc3433e2d05555c3438c25b285fd4183fee0b0b74be46e1203c555785065f4913d66574a3883c3ac6f7800a9f74f26c6af3b149c1c0dc5360230f61c92ad436f798b5b7e666d63536192d7d0d69d5480c6bf82632fb1ef477d19622edd232f2ca03951ab340e7126d90ec737fe133e34e1f90964f2f4cae20a03e07808756d3e9bfc7435669b715ff812739d58358ce21dc1f62313368b15988716795477ce3a4c37507236068fdac208f337cb994dedeed25868f620cda5b72c8dccf7ad9217dd767a790d4f1723d23e6e050c884a587c6f1e0c340ea59e028f2ec498e3f7ac0720a2b813bfd32083876046e0b084311976620f31562a4855338c53fe6d43accd3d69c8217b2b31012e4d9a875c1658ad2d5b76603212bd68a27f03f4233638b98f275aba54d75f88c47cb5907a05b13bccc835608df7952121d55f30e7d21d8520e482120e96d84d499282f70083046b497618a2b91a44014057f6ac84f42aeea278061af622b4d85b531991b59e3e855fa96cf45a36839d146a130a0406051c8d16e835ef9a92612166a0b36fb2a5bdd8c7fa688960558a370883d4feeac494d547dea552726b26ab74bc9628cbc54956d3a440f2968b9e7b85d5a13e1e29a7671909acaf6a60f75749a520567fe501f20a877a15c3c0f9454135a6a35a92c5e6d1af58a532a90e4e98046d84e8622213c0fa4b4cd5dc1408b659a1d9ba5f7da14ced4c9da2f8bd8747f1066a3f9196ad38cd9f4f489a5d537b95e088187386b3cad199089608cb7513f5cc7e5998646b35777d3969f423c9310fbe32942b4cc638d5d83d7a32873440c39cae2b8aae442bdc68eefcbe6eec011c06f59877b2a71edf38b9bb9050cd215e01aaa1c792d251f7170ca29162f49c25fe543d3dc3416043815ebf48ad30c6dc60251b2523536d16c3341fc96e673ef085e8a5bc98b6cc5383f963e4a1e6fa0d2b7b822300e6c725388c5771edd347104cb0fe003a21ad176013b6466a7b501bdab82d6d26a2a64758ca97f1035a4595996f9f13cda69103ef2d8ba1fa5e6c9f8f70fe152fc7e76c8a5b72484936f88e3beca4d4ea4281f9b04d93c682a5ebf2c668c2781b7866674cb3e85a3d1ae50c21da537854771b85e37f209e9363c6db3b061c315430b2b44710e00ac250b9254a15a6f0a404b7aae2a28c978becea892231647b894ca285cc324c9ec0082ec4a352a7314b7298b405469217c9c56d6886c65e84a7f088f38dbe065af2e68f3062f7cfcb4ed3ac65b292a80a4763a7b72296f9aee25a72c427d4d34f5f8eafc5a91c122ceb6633b5803778d0d66104981d98281835333a3fc32cccd5a512e009bab3ee46af20f6e9087ff174eef5b389d317a0bbd98b089a9622138de87d3685fbc10abe8919f1b1ff6348ea7aad5a1afc19afd29eb8d689cdd37d23caf734655f39f38b66e9be73d816b21c78102304fd4b3c6527cabe11eaa742261cd058fb05dabe47619d2fd26245e1a854dc0a032c8117b298cb80d5ee7f10a7f24e74c4032ef14a76c2fe0e05dc038e1068e110cbd1d5627a9a534bd471969c1cf510ff448b6b031467162967190b9e726781a413f244b18b6153b5126e5904fff657905ccbdcd3a5de2acfa01d1a303f1d7441be7ea5b5c2c0ad816767dc39c2cc6de6609698a0a23f8e3027c629654966cc0cf6e1c85b16c991843f881a74049b8ce930a91decf9a22515c1df65f27123ae3e7513d585326d4409696307b8eeea23050e2f3cbc675bffd23aa6227d90da4f88daf9af8d9b48a4d3702c873e7b30395226f0e1c8d4c3e39a413cd6776b4895bb5b0e8b1f259fa7ce7497a3f420d4c106b057e94ce6338a7c3f3654b1ed0173a62e6db90205e6f01f46089b0a62a37d2c788e7a2f1569d2868547afcddd2e3e9e84701299adc0f45cf1af1750d4d367450c31101662ad2f53e7b8fb8e363fb4d1c49de6c7f0820d66bcdd50de01e07ffcd131efe9a1f7e6a268b36c82fca4ed22674e5785abfb397de97a255a110571c34eab0374c94a6b2e367e5d6f3e7fe7046bf39340c0808c50283c580293ff03b9c974163ce81656c8e65b415984409600835a8dc6c379e1bea844db48a6c1b0fc8d0494c26a2db61e546637d88230d05b4e418cf058dfb3a77951af8a73edb1b374e7de7c4e7acb29c6998a3159375674c3662edfeb4ee47219ca150cd578627d8ce2e106fb3a22ef461a08c590f551b8510e42e3dbc4b141dee10ca3f8add717a6d0bbaca1eed53f5b1589e46114ec93ad31987ce1e783acdbe379b4105dd02718fb9a4f77d2e59966ab50d363ede7057e2185d3b39917e78690e1932f61fd0d235386534e8135aabd677c70cb4c61b80fcadf2b3d290a50a267fe0f74fe31668c9667c8f8e56079e0e78bbd9680fe63a18979666c358dfc88e7ae4d17858c912a2c8d51326e20a48aa8fbc42bff3c087ea77a2e18eadd408b4e6500d3c93dfd511224d5aa7e235a9d7d2065b40860906ab5d99cbb8138106b2f1189255a593d50cdc1fec57ca9466d4eba87a9b2ce0871b6b7cdd0b674df4da8785f191c7408aab2bd5ef199a7437ecf853682cb6a6859af1afd4230430fa0d8d608307eec5a448e68654af28ab8f55306395ab7d7863d7481089e2d7fad4bb8aaebced4dd5b01d5ee4f2fa7093efe405f787d952978a93dbf218489a367dfb854863ba7fcf080eabaae667cff847a3bc369fc677daaf9f9aa240c4e8b012e96716af2ac5d879a70b0832c6623440de6471696f139d2edc26b8b1c2a743952d4380c492b5773863d848629002fa002029fbf23144401d47f1cebc60062048340d15f22705c3f385519b4b851400b88777b9fcf548f81524f7a89e9616550815d7536b235d0ab3ff125c5c075f47362b03f0dc31f59dfaacafd2c8148a03afe363970c370007eabb49e5ea431f0ffa78e592ac9587d3163c89c3ea09e6f995113c6638d283e59fbd8761b3b148e05653f68b2a084ed65987c4ddfb78d3a3b67a2c09a82f2646535c9503fa98420fac20fe556161c913972a8343b4328c32f0ee0e5e01a0cabde06fc022c800c5fef3b9e41a05c4a278ecb5d9d9bcbb994d44e3022bd06676fda9410de04b838157401c78c5abb843d906e7584c568024cd2a40e7069e370b23a6172d94b06e91c9f8a4d38eb6bfd56f4659097672f4207fd6cf2bf7bf65ab7a8636c4f8e27fbbf1bf761a548fd20b41d5591830c81fa976b0ffba89185878049c2d3af589fc10d4e4bef188ac0a4d47125d9545dc6fdedda235d23ffe94981e5dc3133c4f9ab5c597148e38d854a7c64101a50f2de2b1dfc37fd4c68034d1115b696f2a72123d1b7a1988fcbd76b56ca124d73114282ebce548e3d4e5f715e2b2982d706a600c59d2e06aca9ca1d2ba95e435b8272f88642b1430f645a8403dbaa849258ede6be8e2d02ed80097a072b2a2828cc06015f5e933d9d302d1340911e4789d9d4691d6c23f1273d1dfa32aa503efa40db8ecc9a5a8613494010292c2e2af4a0de2d520a500d7ead0d0176d8337b8be496d45ca31e7b2163cc9328c56642405f064a1d028b8e91e39514952daf4d3e5fbcf936ae328982001e9587201b11aba0d8f7c3b14367d01019f9935b132681ebb9898bb0984307fe2586b091971ac3ddab3590623df0d496c0321f476dc6f2771a496dd613e583f44b10360c41309223b3520fc4588a5c92124f30f4c58ea338039b5872a4574d41150a650811e1db9174ac641cc6614cfcc138963e4b19282a8d18ae9830b67629af54fdbe3cfa2e303050d16dab3f76d2839c87071d5b81cd685ac4be1bb6f49d5e717b039252fc42946045f83fadfdfe35a220afcd3fb70d78d941f66f7fbf14b227a1510d330535ebe64fe27de5e066aa0f9b3105289c2706409e25727aed52084c536323a4bb291027895f8805ba82c737f69b084a8c3d199c24b7c7aba51dbd984677f56e21177cbd3ae219d22cf17eda2a3e895620f13985db137416f36c72e96e63da6f081bc399d5b8672dc8a6593499116b8ea342df09a844211beebf93f39f5521237952b14c0a2aa614f7ea268009b11fbe5de4ad9a97d7db5a632e904c21a90049699a04326645b5ff2a0dc565de5b20ea88e8181ce84c2fa095d2ad26649bcdaf3d57d4e549ecfc1b91b5fd956e355c1046eb61e1ce58c34509c6d48b6dc43b8e69259f57103a1047c5b07dad7e2c1bc66f790f4306c070418746fd3b54685c156cba872defe1c5589f6a8794fd6ffb2e3117eecce03e87ed0bb9faf5805c1c2248207df0fb46e9e308a6b594211303122e852e6a4609c1898442f149f889dbea0fe80cd09ba63ee3361dc3813d9bf50fbc35e925bcf2b157a622ab493befa24cb7713feeb5c7dd2493d2f515e54f25c98c0632bbca58694aa0ecb5aacc15dc53c52e00049506c388120a0132ff02ac4db9af82b69420ba8a4e99b98830de99fad8732294486236e49a1059934da3ee31dee989593566892cd9c7820e53aa229a202627ffdcf24d13234b27ed61a0a2047587101b9c58422bb8a412af4f219635efab318990aa926b9e4d9e7a8ab5d5071f0cb8f964d6e43343a834732c875317c2c79e6fa9a32235df606c8af05bf52bc8bbbef40a19d40d070d3fe16575550b06f67f32a6e626e2c2e3aff42e38c3dd370478c48ad5ff29b5a76631574e86afdf2745e7254148c91bbb207bcf846ec5dcdfb7529e69b36497c88b636f520bf97e71faa503236a356fcfdd596dc008f5a347bc554446d978a4e612b10595e9487433d9c3fa5d1aa487ce3a444ba11e1ec5d3f7220d241dc3d0e9676d66ac718a24c5de20530ab5ed307ea17bf2756df74ce006f3f9bc709d14fc3ec9b221188bd2c0a61dcedb809d54f4f89fc360974d4bf415efdb6cefa494a341f74077bd84381ca78c90e07077aee1a053725a09b141b96e82acef462c7e266f63dcf8827742f987049dfbe66b150df7e076b759a91a43af352567d7095d8e13d64eac33138765231139c549340e170550c552493a59a1363b88333387ed1731b716b1817b2011ce615d1880a8e9e454c0eb9fa5f990fe457265efb178425721d9610c8bb34b09f4abf3bb5890a99437c2e0821102fd61c8eace8cd2a10559af8f16c11747aed04c18cfe0ee4b5f8603f6199fb6409aedb83f1f4c51315994a8820f31a5a39e7f6b7258cbec9969c30d50dff3d7928cfe60261b0fda165ca53c4f1e269d1610bc30b1bdf2299ea133bcb80c76d632fa76e265965709340f6a48b69931c4b9216836f06246450676f921a3cc33b94159c131263bfff88814890011978030e0600a6477cfc5086efaa1cdd97340f3e86202e562373696d2f9a850849416eca63400126e00b0b543f96759d32d730944371f188a338bf04a9e35616ac10cc778b1c7b7ea562305cb3e25f4a739cf5487c27e494bad84d23278a946e6beefb201e7d6f8e88a43f52d071ddbe5f7409d5fdd80f576cbbd07a471334df9f80bd489be0e2539e63c40e77d2e587b0d26fa6e2292694def6c948e329a2825486a79c349b14b8d37b60f087d67f9b961278065c83fdcb103303e56d978bde8716312aace620b62c4c71b29f4ceb64dc581eb049a82b56cb3eaf6d9c128c98a660e96605ee5e045cc6dc32fa46f2cc989c0854cc8ce0a8837cac80dbfd7e73205070830dab0285331f0ab72172542508c413971349f27d1e9cfd4c3adbb464b50cc5ad1ce97fcb48ad4153e2292a1fbc7b26d866b74d402985faff6dbce513ee7f7da46287fb5c3b12c1c31200af482825923128554c4031b116c684a21fc577607dcc5a41b05ae9d95ea2de2e67c0f001a9d751c73bfc0f7e262dcfb6760842391500906e0a3fd4b0cfa0aa5235eab2312cc052d4870806126556a36269d13bf02ac5674a05ac26db99da898035d0c1534eadbd934d452981f44c6cfa4b70ebe4a80e97bd1f739667df96e819119390300018b6b196cf7ac41ea42556ec1a50ee15a3bca1e7ca94aae6b0182458b861a9ae1586d760c0100a2de83282f86e0688d4cf0c23a4129a13e582587a7b5bee3e59367c120465544e4bce5c4005ad38103306bc0b", + "0x3a65787472696e7369635f696e646578": "0x00000000", + "0x3c311d57d4daf52904616cf69648081e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x3c311d57d4daf52904616cf69648081e5e0621c4869aa60c02be9adcc98a0d1d": "0x08202be6542ed50679271280b8c37140681bbd5acfd0e508668297029f871b9f0c5c0f55ba602f76d69b5cc075d81f6d27db9157c90dc4be492f4edbe7d7c96d18", + "0x3db7a24cfdc9de785974746c14a99df94e7b9012096b41c4eb3aaf947f6ea429": "0x0400", + "0x3f1467a096bcd71a5b6a0c8155e208104e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x429d27ff6a51a78ee6b7d176f02115c74e7b9012096b41c4eb3aaf947f6ea429": "0x0300", + "0x45323df7cc47150b3930e2666b0aa3134e7b9012096b41c4eb3aaf947f6ea429": "0x0200", + "0x57f8dc2f5ab09467896f47300f0424384e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x57f8dc2f5ab09467896f47300f0424385e0621c4869aa60c02be9adcc98a0d1d": "0x08202be6542ed50679271280b8c37140681bbd5acfd0e508668297029f871b9f0c5c0f55ba602f76d69b5cc075d81f6d27db9157c90dc4be492f4edbe7d7c96d18", + "0x5c0d1176a568c1f92944340dbfed9e9c4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x5c0d1176a568c1f92944340dbfed9e9c530ebca703c85910e7164cb7d1c9e47b": "0xccca4a5b784105460c5466cbb8d11b34f29ffcf6c725d07b65940e697763763c", + "0x7474449cca95dc5d0c00e71735a6d17d4e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0x89d139e01a5eb2256f222e5fc5dbe6b34e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x9ea3e2d10fdb9a071f2f534d51b0961f4e7b9012096b41c4eb3aaf947f6ea429": "0x0200", + "0x9f76716a68a582c703dd9e44700429b94e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0xa2ecd93b1d48ffa0fc653137097ff0444e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xaebd463ed9925c488c112434d61debc04e7b9012096b41c4eb3aaf947f6ea429": "0x0400", + "0xaebd463ed9925c488c112434d61debc0ba7fb8745735dc3be2a2c61a72c39e78": "0x24140c17ced6e4fba8b62a6935052cfb7c5a8ad8ecc43dee1f4fc7c30c1ca3cb1414a6bff08e9637457a165779765417feca01a2119dec98ec134f8ae47011131852d76db441043a5d47d9bf83e6fd2d5acb86b8547062571ee7b68255b6bada10809d0a4e6683ebff9d74c7f6ba9fe504a64a7227d74eb45ee85556cc01013a638e47c13fd0f028f56378e202523fa44508fd64df89fddb482fc0b128989e9f0ba608f3e0030c157b6e2a540c5f0c7dbd6004793813cad2c9fbda0c84c093c301e87a126794cb727b5a7760922f81fbf0f80fd64b7e86e6ae4fee0be4289c7512f23d555b95ca8c752b531e48848bfb4d3aa2b4eea407484ccee947501e77d04ffc61655783e14b361d2b9601c657c3c5361a2cf32aa1a448fc83b1a356808a1a", + "0xc2261276cc9d1f8598ea4b6a74b15c2f4e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0xc2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80": "0x00000000000000e00000000000000000", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb340cec13a3141456f5c0f55ba602f76d69b5cc075d81f6d27db9157c90dc4be492f4edbe7d7c96d18": "0x5c0f55ba602f76d69b5cc075d81f6d27db9157c90dc4be492f4edbe7d7c96d18", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3d8c0a86a7dc0675d202be6542ed50679271280b8c37140681bbd5acfd0e508668297029f871b9f0c": "0x202be6542ed50679271280b8c37140681bbd5acfd0e508668297029f871b9f0c", + "0xcec5070d609dd3497f72bde07fc96ba04e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195014e46bef1613848061757261805c0f55ba602f76d69b5cc075d81f6d27db9157c90dc4be492f4edbe7d7c96d18": "0x5c0f55ba602f76d69b5cc075d81f6d27db9157c90dc4be492f4edbe7d7c96d18", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950b3c9926485bef2906175726180202be6542ed50679271280b8c37140681bbd5acfd0e508668297029f871b9f0c": "0x202be6542ed50679271280b8c37140681bbd5acfd0e508668297029f871b9f0c", + "0xcec5070d609dd3497f72bde07fc96ba088dcde934c658227ee1dfafcd6e16903": "0x08202be6542ed50679271280b8c37140681bbd5acfd0e508668297029f871b9f0c5c0f55ba602f76d69b5cc075d81f6d27db9157c90dc4be492f4edbe7d7c96d18", + "0xcec5070d609dd3497f72bde07fc96ba0e0cdd062e6eaf24295ad4ccfc41d4609": "0x08202be6542ed50679271280b8c37140681bbd5acfd0e508668297029f871b9f0c202be6542ed50679271280b8c37140681bbd5acfd0e508668297029f871b9f0c5c0f55ba602f76d69b5cc075d81f6d27db9157c90dc4be492f4edbe7d7c96d185c0f55ba602f76d69b5cc075d81f6d27db9157c90dc4be492f4edbe7d7c96d18", + "0xd57bce545fb382c34570e5dfbf338f5e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xd5e1a2fa16732ce6906189438c0a82c64e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xd8f314b7f4e6b095f0f8ee4656a448254e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0xe32f699df250efda9ef1a80111b2cf444e7b9012096b41c4eb3aaf947f6ea429": "0x0200", + "0xeb80f196c1c268ffa7a5954830181a2b4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xed25f63942de25ac5253ba64b5eb64d14e7b9012096b41c4eb3aaf947f6ea429": "0x0400", + "0xed25f63942de25ac5253ba64b5eb64d1ba7fb8745735dc3be2a2c61a72c39e78": "0x0c52b580c22c5ff6f586a0966fbd2373de279d1aa1b2d05dff47616b5a338fce276a13f08b279cb33b249954190bcee832747b9aa9dc14cc290f82d73d496cfc0a847c1ac02474b90cf1e9d8e722318b75fd56d370e6f35e9c983fe671e788d23a", + "0xeec6f3c13d26ae2507c99b6751e19e764e7b9012096b41c4eb3aaf947f6ea429": "0x0300", + "0xeec6f3c13d26ae2507c99b6751e19e76d5d9c370c6c8aee1116ee09d6811b0d5": "0x00040000", + "0xf0c365c3cf59d671eb72da0e7a4113c44e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xf2794c22e353e9a839f12faab03a911b4e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0xf2794c22e353e9a839f12faab03a911b7f17cdfbfa73331856cca0acddd7842e": "0x00000000", + "0xf2794c22e353e9a839f12faab03a911bbdcb0c5143a8617ed38ae3810dd45bc6": "0x00000000", + "0xf2794c22e353e9a839f12faab03a911be2f6cb0456905c189bcb0458f9440f13": "0x00000000" + }, + "childrenDefault": {} + } + } +} \ No newline at end of file diff --git a/resources/frequency.json b/resources/frequency.json new file mode 100644 index 0000000000..4b71ecddd3 --- /dev/null +++ b/resources/frequency.json @@ -0,0 +1,220 @@ +{ + "name": "Frequency", + "id": "frequency", + "chainType": "Live", + "bootNodes": [ + "/dns4/0.boot.frequency.xyz/tcp/30333/ws/p2p/12D3KooWBd4aEArNvXECtt2JHQACBdFmeafpyfre3q81iM1xCcpP", + "/dns4/1.boot.frequency.xyz/tcp/30333/ws/p2p/12D3KooWCW8d7Yz2d3Jcb49rWcNppRNEs1K2NZitCpPtrHSQb6dw" + ], + "telemetryEndpoints": [ + [ + "/dns/telemetry.polkadot.io/tcp/443/x-parity-wss/%2Fsubmit%2F", + 0 + ], + [ + "/dns/telemetry.frequency.xyz/tcp/443/x-parity-wss/%2Fsubmit%2F", + 0 + ] + ], + "protocolId": "frequency", + "properties": { + "ss58Format": 90, + "tokenDecimals": 8, + "tokenSymbol": "FRQCY" + }, + "relay_chain": "polkadot", + "para_id": 2091, + "codeSubstitutes": {}, + "genesis": { + "runtime": { + "system": { + "code": "0x52bc537646db8e0528b52ffd00582c3005beaec6911450106868947468da41a369078da61d341a08562859830b09151177b0a109662f4c79468f3311f448c18c44e28478c8a12a20230f753ac6313173997b8261822c19edc819a33ef82d219b904df6de5b6e1930159b133114cec81935e56b6bd083b2de7d39cee84181eebebb3d2fef734f2283195d277331e934457069bb19bded190d0f2fe15bd2ddc9e2b745a3e58390a56d1ae1d29625c125f921b8045bde08365ade02cc034d8bc692d192a6b720b6a8d2f238524af9052235a0f5c26cd0ddb23d92c24b6f738fb630eac77ffcb8097da7afc6fc50a7dea957b719abe479fe559f97ef4d59516afed528aee73ce5961fcc7b7fdbb3d2e467ddaa57757bb1aaaa6a1051bf07e1bc53fa2ee653339fbe6b7255699337c8a4ea0e23e2fafaabafd2f87a757b319feb51b276028d9ce8ad7a10f586135f3acac40e1f2b90f578fab42ddbb66dab60d09cf284132d1445b67c14aaa19c5a6aefeebd0a5f71c31c1e460b726fb485d5216eeb570d7a6d69373f10f38987f5bde7cdbacd5b8f350a773c65ae6eddaa95b60511753c7c0fbfba517795b69dba728bf954a79468d6c76e83bccff7bc20a2a64eddf5aafb44f27a83726af757d5a0d7d4dfb655b7610d7a1dcfd80feca80151e73376043675c67e280dc8fd694144bdbdacf9b506debcbbbf73bda1afba538719e9e9dd201b7547f97218113ef5f7c3a77ca807b92f3d8586ae257a7eb11f253d3fb5dd2044e25f11aa6ef340efd4e9ac9a50d07a3132eaa199b6feded0d5d6e71743b2c4ac424106685e9df721d993fbbdaa42f343b2ad2f76244957ef61ab06fde8eab30619a0ddeabc07b92f5dbd4adb0df28e118952db4e2dffea9cd5c9bab9dec7baf1ddc38a3822aea1365fcd98b43f5d0ea6055d6c80f4822a96c9ca5c7ff134be5387f14db4bf43ae9daef6aa5f9d9ddefd9177a7aecacbd7c3ae6e3b6c12a9625cd3c57cd6c9644cb25e7dde613e4eeb793d5c5568552a6b14d79bebeaae46715dbdbaacdb903e76efc1382de8f50d91d7ee4efbeaec5dcb5a6940f3f4100b9a44ccd38bc658d51d7604754b5b26559aebc5269d759baf4ee96296b69ddabaab9b6bf7aa6e093811a17783b857ef79aef2ab6b314b0b7afd5ed5a5eee22048559d96b56e6ed62dde9daa374e0b722d35328c8cba87a65ce40185b066200382dfa1b75e2d55d8b23b64db6979923f564b2ae337a86d450dbf5544ec165a6a58a2fcd678592320440a627c31ed61dd881a6ed49d9cb6e8f9ada8e57785d815b2edd10adae821d7537bb26a74d0fbf2a5290d0bd1bee8e5c08b296a461b514b6d83dfaa7e3b347557acfbc528b04ba862da1dfa15b9133f3ee3efefbda78218f463d37bef39a117952e4c0085354c11042da6bde832ddb5d090d530c951edda72c35243b6bdddddd5ee2e8876771f824bb2ddcfa5d5d2842dda1d08f33893fbf643bbbb2994ee757a368b4971822952a4408a18140081dc3f3859caa006903b0a870d2978a009fe3bc4c5538e0259bc3bcc5e8ebbdb7e35ac697814c5191a1e526182a7e1126ca86d4e80347c568a1a05b26d07b58c8647ef51146ee8aa770c20e8a0b7ecf15961f58a5185368420e353bae384b8a068d2e381a6fd0ec1ec98e3a1939d7eb339d6a1d73f396a00051bb43bac4e7660bb43e8dc195aaa90d1abe50a2e1d805e2d57b0a01d177706dd6cbe87f94ac70a2b421d6aaf6e8e1d163208ebfcabdb54dd865e579fdb8b55355caaded432586b98142febeb92c1d3bd5e755bb804b5cd35a4be1175f5e5d27ca56deff2f45d102b22359aecf1b8a397131f3777b4652dab3b62527ca492c16feea823194c8a879f153229c63b2e3d0f56d7af5eedb874bc3be2927cbc238379322323a329a678c8a5770fc37a31299eba2b7b3cd0145fb358b4b264dbecb85c7a7bc76feba5e3954424b8041f9f8413c275bc3b41c6bd5aaed8a2e1dfb7375fe9c5e1141d44832e902ddb1cf3f0b72047db10bda66dc918b20d493f30cf34ed4a205b2d6840a3657ab5b4c1855eecf198d260c114aeacc00b365460922d2fcb78c3085a1e8779f6c8c8c8e80a933c10e65993d436273b1da106816cdb7d1fcf3439f757b942ce717f40a6a3d7082688a269af186974d1ee0bc4c12277728fa3703a38025d217433f8c57c0af08329dc400b12a85c210cd3166b9d1d8f500d149fc5bd0d7f8bda6c40264ff5cac3bf3b192bd5b032cf7a31323292020b4bdade5ebfef967aa0486349dbefabb98cea1eee61ae549fa2e32be8328f33323232a2625a1ed65c365b085d9e5c72d9bb6075bdd87b11544b1867f47e2b17ea8e1c96002b0748c2c5c1f730d4a6f690a0075826c550d7d96209383584dac93904d0ddc9f8afa6dfdf6bb8840399c799de332ead962a6ce9779a22747732f8ada6e377b8b4cd20b8b4651d1f773a3efe072ec18eafe1d21eada08a8ec7611e36c5de86e8189f71891f4fc3a5f7f8f88b4beef10b246a407b54c4e5e8c52c10bad97eb3e573b6674c01a7def840ab0515f5de650e06747db23d9ac2a5f768ca17bdcd86efa1574b1adee81592d11848e566eeb156e82eba99fb661153c0a92156c4b53cb53b570a463c85984fd45cf6fe30059c1a93efe1c9a51ba911712d2fb5c924f76df7585d2f10a801656dd003b8ef1d10bb4a75e05c0f2f11ba44b23d82c28c8ebd4753d8e895591f321ab3198ccf610a38359fb577186511fe7b0f2f976e88f0df9fbc3be4d2160ff40e2fbf5c7a979f5ce2965fcc476a2ebbba0bba9dd19877f89dd2450127a74d26c1c3d3989eec9d1f54d4f0f02ec83574199842c58b942d52be5892b9bb5e0662bfd8136d9c4b242e6db0864b7c205ce2e64f2eedd11347cdbf98e79982706f38cd5f2eed7947899d7ea7aebadea60e32c9414602dfc3942e56446adb5b7e32b64e063249db865e5bafe112fd3b0e97284a5595b655b75e511793322e51d5df29555dd365d2758715717d69db75eb54ddbeead0ebead4f1ba0743d56d5ab7adaa2e93b69a769f8f678a9b967336d8eebb3a1b4e3b6d938f7fa7cf3959b70de03eeb506ca72d9328e56b31a96d4cb4fcd66d3e6c9d8c3b85d8aeccc524204c7aa77e1f4aeb797c5837d741eecb972f5f7a3bf55ed6a1d77b573326f11de6b3d1446d32893358b7cfa5fdfb7c3cd0e89db4435e3f20fdbe409e06b4d38bc3c972710beabe40b637dfd521d9915197de60f3a7fb9cfb789673b6acddb7ac21978ea0db0b64cb9a4f9dfb76353bd7c3d4d5d7d70e11725d3aca0543dde52aeccb4b07511d6506bb606216fb814646ed76874c2e6daedf7fc88a4026ed2f57b9afa38e22b11d22e48c3ac800edce771892cca8dd2f2e6db351d78cb5f01ebff7de7beeef39e6cf66ede6081f9edd8f3b6b1b1fc863e7b6d0edc9a58dffbe7cf7ed9dbe3a99b4e7c9f80f091fe86993491b5c05d0e5928bd92f97dcf97bcad565ee3466b9e47a4f2197dcf7f45d9bbddb503032f877fec37c587399fbabcba477c67ca00699f44ef99abda7f072d864d2fb624616f3e1f7700ff7700f9f9c733fa00b647bf3e90ac9e8fa902de6b3771811268c8c8c9ce8d59649db6c3ee56bb9e4bec1de2f972093f8fbc59649fc1e0622dbb2e6c3bbf3690d97b6f9d45d199796497b3e0d97def9355c72cd5fcce7bd877b18d6283f1acaa99d767364b6fb6ca7dd1c71877787da90eba72d9336d8fbc57c9cb6b976efe11e5e20ac01bd1787d373ae0cbabb4336055e313232323279b15ac2f0424f592f46464646262f564b185d7a7b81d0ed21db483700d946ba17c8b6d9fcc9a5d552852dcdbfb8b4472af0d2fc8c4b7b3e0d97dcf9353bc4357f81b006f45e1c4ece1580ee4eb6474e60d1dbecfde4d26aa1e2a5f717f338d3be864baba50a5b7abf5cdade707abf4056037a2f0e27e70c40dd974bdbde69cba4fdfee45c0eba4746577a29ba02c836d20d926da4ef74b3bd0d0523bbf9e1bbf3ddf7ef8bf93ccd65fc1e3e3947a29bed57522b32f0a50dcb6a83c506eb8bf506eb0dab0deb0c9619ac32585e2c325863b0c460b16185c10283f5056b0dcb0b56172c35ac2d585ab0b26075b1ac60a5615101c90288b0b6585aac322c235845b0c4b08060d9c0aa814503aec257f008d80aae221e216e895a6214b08d28056d014d01bd622dc182c29a6299c02a41f5a57a8335034b0695132a2e551995112a32aa225462544715112c2e2c2cd6106215d1089109f00cd00cb00cd419d00b1c0314831585ca05d595aa05150baa15545b542aa8505059a9b4a8b0a84a505d518da09252395119cd30cc374c374c35cc344c33cc324c2f930c730c938d0986e985a9c6d4c2c4c2b4c24c63566152c19d61c1c07a4135850a8d4a0ad1c86a81c5026b05d616960aac1458287847806cc036c037e01b201ba01ba213f1098b08f08b2505f706c703b783a80400e830f10107859be2a4b8279c13a727497e8c14713050c0910420c06400e782010451c2008d0185017d8252b1d6d08435050b0deb0ccb099612dc0bdc14b109138d59c62c824b8243823b82dbe2b4b8329c111c19ae086e0c27863b7244704370427061b8203820b81fb82cce07ae070e0c2a0d94146815740a85828a804a712da09ce0b2a090406d7168a0ae5031a06040bd807201c5026a0b4a05940a2a058d824e6135c18282f5042a0516176a05540b28195028a0664061a1b8a0ac5027a06840d580b201950585055585ba82a2829a82a222df20dbe0ce20db9067906690657069a04c20c720c920d5905b906ca04a20b5e0a620d39055a048e0d85081095023a0aca0aaa0444049e1002a0a0a0a6a0a25857a82728232925fa41be41b720dd20da90699068906e9458a41b221c320c120bf20d7905e905d905c9059905d2416e80b2415a813320af20cf904e904d904c94532412e412a419a2191208f20b7482db20c690449862c821c438a218f2411e410a410641832081208f207328bf481ec810443f240ee40ea40e6407e2171206f20bd905d481bc81a481a482e24163903290319030903f902e9027945b640b240ae406e21552053205120ad482de4096416120b69025902490259c50879851c81b44256214520a990537016928a94424621a19053dc1b528a7c423a218de297f886e886f84664435c437423aa21a621a221b611cf10cd10cb10bd4432c4314431443662182218e217e21ad10bb10b8e0b910bce8ca846dc42d4826b83fbc252188a88058e225e215a21a611a710a510a360f92072297226702c70579c1547057403a60182011ee145f1a0b098c027602a2c053bc153f80936726e706eb8353835b8361c19dc18621bdc169c169c1a2e0bae8bbb027581bc82b3824bc355c151c145c141c1ea817b8273826b82e34269e198e096e09410c503ae048e041cb0d2100127404358005a415dafa3dea8f83181b22403499658c224892449a87b483c61922489b58e89930c2c197ad2010d24193a82895013249e34499284c7c401ccbcc122d124c912281c4082c9d09325421b4832c464033d4c2f76034c9c304122099425492c814204ceec629168e2006dd660916892e40319c061d20089274b922ce10093248e8092e4031948c281264b7403a030d9c012285098102180c9c5114994d0c0931f274e9438c0d0114c9c3851e2003d4c2c0bc5499325434c9048c2848906769832582534f0a449920f0831e9405092264bf4d013261cf8c092223e63b04c8e78a2c493244b923459a2991cf14489050c3de98012471cd13d260c9050e2082648fc982f58281f600294040a940f3039f244892650a03071409d2e580f3459a2859800092921012475b260990c2d41a2899325519230e900930e30e0014830d9c006963ca087b9828502740493248e48c142197ac2448849124f9a7ca2e049130ddc4c2df68826509e34111a628249920f385962892549849820e1a449074c404728e1c484334fb01c48b2646809124b8698102133b1004113274b9a0c3579d22407b586053a4209271948c264a80347306182c90ce5c60a2971808b52c34261d264a8899012490c7560090eaa8d7da24493a125421d4022c990124ea02469b2442f11ea40e7b89158a0b668c1a5f744f7c8c8a8dde9f190700470046e0947c11db243800062c81007239492e1942e4ac7d239b9d071846e4638b148cd6955f18af0aa9894eeaa72c22a9d830e42b9cf39c7cbf30347282143866e238471235c19e7420861c4e69432ca29ab08a1c4628c980525c33925a491514ae81c942ca383534259c58d101a00a3d1c938574608a1ace6ac663527e46ab2845132e4c8713af7de838e256391211621cb386594942ac0740e56134e2c5a1be58c52c638316cc61863947308020c011d643861845142291db363c70c6184902194114a8631333333333330726606cec019f81e84333333ee9a812c8464f9e08312ca0ac30e67c8005842e82c278504a1411813692043c97c4128213bc8cccc902174ce4166e82084ef41072184cef14c1e279d74d039b70ebae5e768584229a194169472173eb88f576e001842295f7207a24a4b56f8e60f8fdffce12d4b1925945000cf3184922164291f94124629258d8430420721642821a471f0bd7dcf41e8a0834f2e840cdd0b800f7207422804426686d239c8f0317c3b78900f4a280130219c10b2843a124a2825259d84d593134629a394524218444a39a59432c61e2084873c4028e193cc0c59420821942c1f4329259c0ca1733ce7e51c0d0d845242c84e3ae718c6192b6b468c9ad7754939217432621b239c7032e5229411bae87248eba483d349e7dc0e73be6739a7c3ae73eb1c90750e4a9983946e9d73ce6172a59412080e9a8c61760c9925c3c912d618e594315e5884d0c1754e6e84d775c1ebbdeb5aa656d02b1e8ff581034d869e7440e8ebc3069470c263c765986082c49326499e345992c4111ad080129a009c3401daf9b1830f520f524d909a1d7078b8d9d981849326491c9164c849079668800912393bec80c223c606e888251970e24409211e6c963011b2610294648809264f7cf0581f986c80470665084a132698e03c51a2c9d0114ba03c5922349464a8090738a004a96603d044034c8496d0648496307172c4cd8ef5e109932596589284c90696082931040587c60993284c9c2461620907926ce049930d6c4009273f740c2d1162f284c90672c831a484124249906022c4040921259834111ae2812609284d9e34d100e95a1f923862684906920c092d1982b2830f4830c1f1010d3411621225c9007c0002880008e130b30140820914284c8496e08012472411621245892398082559020589239824f101a80444009638820994244a0c2df101a12378ce04932470643430d48124434f9a082d91e408284d38d0238800f8e0e38752122694f0c0508fac04440092048009d012271948b281274d9280b224893f0ef888f284c9e3f521c913259a4011621225091326421a4822a4c4d092239470e2644992212698e0e058fe8090121c60c20119e50993c70336069fa8923d9daca2d3a9a8e8449da8d3834ab6e8743a9d8a8a8a389e4e4545a748747a4427a8e4e48a8a4eaee829d9a2d3e929592e824a4e45aee85454f49414b9a22256b2454527662527b74a4eee54747a4a8ab6c82939b922a7a4c89d9c9222577462a96457c99e2a252777a294ec292ad9d354b27b3a9d4e50c93a257b72ace4e44ea7d353d2f3a6e076d77100ca920d9f53dbf89299c6d57918121d97da76a239956e1926c87d9973cecbc9cb5c6ad51197646464649c8c94b34a9953ca73c619679cd1b40cc4bcb053be2476c9c8c8c8dca6f788076fb48d0f9cd3d5808eb308de68fe8fdb545145ebb88e5398ebb7b1b1b1a136d7856117cd69309a2ff6f368301b9b1daee33f9c0d063379f0e0711f3835ffd98153b363f2a8db3e6c6c6c78d8d8541f5765e3e332f7b1b10f98988a53717cf8f0e1c347c5b1d600729c0339cee90e5508f60ec789c92ee734920fcd07ce493838ef619ce3549bbeae2a38a73024398da3dd1cc9e136cfe136a736d5c777a8b3331c97acdba439c8807e9cbfd3db8f6ff347851dd171fec47e7e9c4f672ec67ee4b133f6735dd25ce270699bd47aec6063739c5f97d00fcdb1ffd49ce6cb254cdb847eb0eff80f8f63a7b95e43739a1d34c778e070597b9ca6bab6a9db383ebe830f1fef619bba4de3e3e30f43c27d7d87ba4de975ec452e0dc3b06b6a374774b8cd75b8cd29c46ef3dbfc47fd7b5e0fbf6edb541d6a0e1548c56a50f61a3b3c0ed8558332aec2a5ebf0da55a5e1af5a1dd5a0cc596b546b8d86a7300e63a0994ba099df7c312333bfa1b1c2251f3e7cc8fbb88f638954aa8fd3d580fc7111b0d1a5de232aced074c7c57556c124f89b3aab3821f094ce6bb14bdb88b68cca4df19a05881a517c91655a06e2ba4ee7256b8f4719f4dac76975f9f0f11e9618929cf6716a5d3775737df3c58eb8e69b1ffef52297766a59afba49f91bf9ed532f26238624a7a5767344e63f2ef31fc7b270e9c7e1e98fbab9fef1e3113bb243ffc0b01ff9eb0ebb94ef71d658dba436c44d739c5387f99c46dbb8695e73aedb9c423fd8afffec38f6e5d2a56d423fd779fcc7e6d7b11dda32093ba66db079685b906bec97b6d968f23d8fa66e73ed7159718ed5ed9a1a54d43ffe1ae4fac78fba4df3e3c7312439fd43bb39e2e3f23eb4698549f0f11556694d14c553a734a3f82995e6c532a932c90bbbe93d0263074df9aa9c17fcab0e71cbd378c9ba4d6148a870d143ac0199d352c3b230099e3122aac6b4cd038d9d2e174052e9301f9acb1a6b143711c51711c1000b368c4c55012acdc814b529cb405c8fe2a6f84bdba0cdf90d2d4f53835c9b64ddaee37c3129eb90ccb1aae3367523ea5185a0cc172382d432efe12c5c92393c4e9d17822d53ab231b25e495b8f9f6cd7b18da04651dc8b02f75974d5086fda64a0d0b959b8898075794e0022353115c438c148c616ae2034427537529764c51ec98bcc05e1d3d274c5b7475d4f036340799b3d2dbdb8c41c34f2bdcaeb150b9a9fa36ad34fcdc820b501dde610fa84e04f3ead461529b5498044f8d2c53dc4ec1169d43ef110adab072d43a3e94e59027a21e05bd1797952b5448a1e9af989ad5ed32d431bc86a79a185cc3e37071ddb02c0d8f8571c4256e788c0c27c4625b1a62599c10cc4de73594c5e738f599ef388febd8269586a73c8a2c53c442859ed28a2c13f54d4a8c886b4aaf49854b5b04151c8fce84a37a116480de4e5d73ae403277d2b26e56be681ebd475a1ccdcbfac4e24a738911e1dbfcaa404ee4e7af4fed89fcf58dbfcd86db36753b350fede647c7f93ace1ad0cc77bc468aa5119d4c391e4f610a98f90ea0799aeba85b8e96798e1a05bd3351024c39825af0c2a8af532d9b3a69c595de255491565ce98bf245538f547d5dd69b1fabaf5bed9a5aa3570d6a8dbe568dbedec337f234f5466a3f2f8d306061d4d7ab9ecdd88f10298c61d4d71df6438029477d7db14bc342856a5e0419a05903dad068797e4f47a2494415c5d3e33811959b28ad286a5262a8131559a7342a3751a772130eadc8d2a2a06200131427537c3cd5a4c450dabe9c6d8faae0e2846c7b5405155a6a43b039902da1b788e58b76b25c1a88b148610036c5c3a26c123923a328325364628fb41bf9ea51dc549dbf2dd1acdd48ed0119f64d49633f5de9997af3c34646fd5e6464d432f5610c585375891d593710a1a5e644fec6c8628f3dd4db29ab377c2c540c608a7731f5c6016b8abfe1ef110ad8e83d4241187a319f4bbbf9792dff5a62759bbfb9ee0133da034968987a73dd99d854d59b4b63c0ac1e853355bfbb60aa33c90ac53516eb58dd3ca0849e701f84d94e7d5304f59bebb05fdf3080fee6d28aa09a94fde2463c6c6ed73dfcdaaa529ca9d26ea61614f3a5b150f9c1142f25e60da6289c297eca343232a23429d417535ce2ee84e00ed3a51787130e2e7a2757e41c060417687c5bab53ae5b11916d768dd697b0dad29e580db5c8752b6a589d7788d04e6f7c272e0d1db52756f3b7aafa36835c5757b6e8d8d529bcb8fa624864571b6c191ff663757c555d8c1a6f731dcf79aeec84c8d3e7e4f757d8a0f1f1e91e5de9c2003e47f6a859db7aaef83dea3dbad245af18cd525275737275bc8ccb249e2e864163845c9af4071689878e29bc16f3a97c6214d7358a6b77e896214cd4825e5b4e037287da36d4f0f2b16e57c753359ad2cb9b9f5d4295a68f0d7bb11f6a8da6da3a211bc7d375bc0f669d90e8e46a282f3520f9edaaeef42de95490b95b95baabf2559d7758d0ec49d5ddae9d5915d4ed10c78fb5edb439b1fa3d32c47ee49fb6ddfc58f052c3b28d85ca4d512bb24c5ebc4bec48d550db8ae85d9daa6ece87b5edd44cc4359ff2b27b301b04daed90e5abe0e56cf0e21210dc0714cf7787f014567e1342ac089c716eb0e193dac60de7914c243d3d5fbdc28eccba1b445eb06edcf0132be28c3ac81df5aececd0f3f7ec5f8c2135dc1bf0861dd7eb007f487de0fd1cb03f37dc625ec7b1a2ed1ef6b700e642788594f7da228abdec8470dacd1f0d8e90acd533270a3e1e70ca8343c054fe9c9593146ca6aea12e8e6c8f50a5e31d7912be692a7917e3b528d887c7cccd2f0f45c347c04aa1ee15555ebb2ba8e0f234229a51a50f50d1ecaa9a19cda3ad03c44027f69dbbca5c5182fa2863d0f53a74c993205e651ecfae0388a5d1fb6d7f3ced4f32c781aaf59df61ea9a20bcac47a206841d1edb4186fd691b764abb99bf5e1d1ed36ea676845e9efe02a2f43a422ffaa86df3d4295537eb37f17b133522d5f60cac50be2690a4ef92d5fab4182342fd50d4dfa316e4be44f94939d7b27af405ebc37e31187cf1dc5d7d0d935c12d97ebbe8ee6230b0b10b26ca4cefee6ec6243799c45f50e66f746e65bd89774d7d877ea7ce35deb164c9923acbb9ec36368d954f9db322e3bbf8ae08afe82a3ff21f9f468cc8a62129120cefb4dba19f76a2dc6b027d7f30055c9a7fd5e044e881cc7ddfc3afba5e820654fa7a3c5728aef98c19d9ae34a058b72ae456277e6876d07e697acba24eb3b8aa41efcb170dc05f6ef4f5ea9446ba5811eb15d7edd45cfdfd5445a8d3bb4a5fd5eb0f3b323fefb45d1df71ebeeac69a5b1df7eab46ebc8f323be8bdc168c835dffd241d83c12d19ced0f0f2db4e28db232e8e5a9e2ac28819787926f86ee40f84a4248937a2a99a3006e1d2264f490af6cb7ee2ce3f2397114ab814778b02b8c47b84858b8eff8179a06967cfa08930ce259a3aef8764f35d03e1521462871d49d2d427755e4adb0db21aad30059c88202d2965dd1c75ae93aab26ea796409bfca134ea94b6352199eb63e677c4fd1d71e7781c4ad53d9a41a471a2a9ba5aaab025a334102b32bf35f1a5dd19fb714ef43c5d366aeab24eaa6ef2fb9e279d68c7cfcbf4025d774506bf19755532c641ef51175234b7a0f788066b34a9f78806567e86a478e9ed1486ecad032428a3f731ae4af6c6e83dfac209edc8e83dc2c1083a48efd10d7ae0b0229612ba749092de17b1bcb0a0838a607a1bd2c2156a5ad0db10172da05ae86d48045a88bd419902183d00814b6f50b270e99d4646fba5f7bde72c68906be641185dbb36d7c8318c2e3a4aa1dd69bc1c46c43bd4b6a31e9cd17c78f7b6d3cd912885e6bf0af47cb62839dce1e9ab41fbe5cb97daf151db4eb046c9710691374729b4ab437ce4cd9bebf82a1017715f3ac87d89dacd8ffb7b11f7a70dd13d02834b0f71476de34771fd7eea1eaefd6a6daedbae0ed1de9fa27b50586977ea4e6bbe8b77dfe29722028cd5b911647be4022a3d4fddbd88b43eeb661da8fa3c753e8df53a85a93730dfde4e0d73aa6e316a41311de58aa93730779d9dc2eb861ef66bfa58b9e97bf86145601e53b35315e6b1be2ba6c2a6f0a2eaa2a163ea6b1a2faa6e1b3aa67253c86e2305254c90fbd2d9af5375ddd0311b1d4318ecafb1eb69f455e3b31af39e1753e302519fe7f9c58ab8cfb944dca91feaf3373fafafbfbeb4ed14869151c758e9a9c39c15193d4ca577a2295f30959ebe31348566d8369ac60ba642a13a0af706845cd343ccc75591d1538811d9349a9e6e7cce419e38c0d02f19464f344cdd696a510dfbae8e45b15ff1afab5fd587645f1b0b5d18167fd16a5551db0d52ed9d9631e95dc31c55059ac49537da9dc62491c5de231718ede2403d90d1138d39c34b088bfac92d34d482de972fb38295f6646adbbc9397032f2db5f9ed690e7eb123bb842b7a6a58222d6a5937399f1060ca514b26fa3dd9255469f90d040da5c6858b210891c218b00568344eef510bc268ca97ac315fbe7cd9c2446131d271851c48f98211bcc362d4c30a1960714528872b38d86234b4c4aad1588c8448610ca328049872c404085a1ecb13ab8689d28c560dd36a44fba2272c70c1149c78c3c8c81435a32946464bf43bd7656cb108c864e10a337883942f5f4c6b84a6c89d5c913b7194457810d678e7a819e3df673c15a364ccf51ead404bd754d70e5e46e81a324fe1b9b943e2f7343ef7e65ff527ffe4df2bf929df9ffca3fede7b94a71c7d8ad0c34e862fefe46fe05d73df4023c8474ac20a5dc3d559f6c2116ea0a78cb116ac7125d49d7608c6d7cb2e2e6d1a7687c8efe30e91f50726c51504a1779814bfd83a99b7cdd3fce3b11e4f7a3cf4f138f3f141ec90afce7c3cad19e7cc5b7572cedc311f4f0de7cc578fdf2d7afba1e377ec10d7f172fef51ead208bfbb24e067efebdf7880b178dc3a4397f43fd35f70d457d8f5620845e2d594ce91a26cdcbea665c9dd5d9f7b0acae233f1b50792a1de663fd3a3c55b1ef0ea195c8a9b78b087520eafbab6e54efd10a78d0ab13792b1fab147fce6375b2cfd4b6eb73b5cdf59e9ef27555eb167d7bfa1e76c196a6445022b0afb6cd5e17b479a00d6ef8d250960b175850d1d7a19cfada5b5bb7b1ba31d1f4d45d8c1dc1b48d8996d7ac4c1fe7c518914bdb4b8c88d5bb3a3deff259ede6877e4fbf1a90f5aff6339b6a40f3db3cc29fdbd436a40e8641cb419d83cec126747732777ec6a5ad06874bcc8e685e39505ae419d97787c455dfe6fc56f5e65e2fbf77712fa600ba97c490c03f6d9bfde42516c4c494279c30ea6592d4b647a92b6209a0d4352b77555d474c01f2ee148684e9c490f4b4f5aaba4ec0890896c3147022f2a4838a9a7a0fcf9feb4753135bc0e94a5ba77c555891d3950e52d2d6e9bc2c2c01a72bda3aa55785fdecac17acc214706aeb14e6aa88e02da6a9e5dd7511662baad2b2bad3ebaa2a6d73f3391898ade84acb5b7537c866ddfdc290f02d6d738b49ec872f351876fb60b6a2ded5d9f608065b5abe67754de7c5d80ffc6ba0f77887113975a4b40ed4f4504d4b6d57275620f720a2dedecd11fe079abf7d9a4e7a01b305da7b940234ba068732cf7bdfde9ed3366784c16f8d7224a6f7af42a805c5f4ee97defa9ee32d990732f7ab07ba5c8aa75485bd913a1e081a28e041a320065d7b8fb478a3295f387f980f10ff7dcbbe4922dc598318117ce83420f9ed2d836b745c0a2f5881f8f0114302cfa7ea6b14808166c3e9a801bdf3e755e3b4f7754270c753951b62465c4bed398c889dded571ec5e0a9c13027ebd34bf8b152ecddf21d6ab338684ffce98023a90f550d6f150eb40d61b3432eaa1ace1e973ef56dde9dd213eb4557d78970dcd41b6d31b86e47d730d64fdb95fa78b111940efea5cdaf64eb5edd4f456dd5c5b771811eb8f56f7edddfd08ff694dcccb8751200a679a6f220a6792f24dc85346cc37318d98a70eddcba20b9453d3981d927fda067bdb1f48fdd58d48288a7bd486e4e337d86f2b6ab811f5b67735e847bb53dae69ae1061b7ea3380dc87d3b6acba459a516f4a3dd7989f4e83d02e3044d57096344485776d842072b396001a40a0e556854ea943ba31f6ff870a3471b385e6ed8b05983871a355d76a4a1038d1c67d070c161c6cc161932b23d8a19022608ec876b8706b1481590790a47d6441a98bd8b08f7d36e8eb8e6bbe6af120ac91eb53b84d8cfdbfdd42fd68da8e31943426a4adb30f99e27eb911dfac58d619423d597aeb8a057ac2b0dbfc1decaddbaf3a177b5a2aee73d5a2346291fa3fcaa3aa5157dcf73a715bb94a7b4464dd25fd82b88118139fdabd5b17abde755d7369f0f53b7216d83bdf194eee52accad7a73e4ddfad3b6ebef9612eaf0ab6df1d77b184bf657e3e96298b6113546b34ae5a6eccb05c834a2a2982f03414fb40cc47b766407beabd7b13a9fd535c5542fb0d3c57cb0bb0aa3617599e4fa3aad112322e9af5abde7d1eaf03dcfda9e75883b5275733ef112439213690e3277a5d75de9c5a1884f174b2c62f637bd475384c14630bd47534ce935a2d6d82388c66d96c8b8f7880a97de0c2a2135a50f562a37c10b428d08be488814c630324107319fa0d9ee7437d8db10f7fb9eb1233bf43b964969dba929ae9406b23de2011b4deaa86d441dcf75562a37cd6b52b9495e6a1b2cc0d488e68be09781e0f39a620da2be7cf9f246cb53be665d537c0f5335e8b5d436d7510b7a5c615d0662db232a463dc4af2e8624a71f6b4154173928c1b048647bb40235da19f51708e5e1a919c880f6cea8b73d9f7bb55871857e1812e744dd4ebd0ef3917f95ca34bdcbfa003632bd6fdd8ab628b0e56f7edc95965a90fbd271b10764a61db2c9dffc582db5a0988e1a96f79542eff4766ab8bb05a79b59da06add21ce29ea7aa9113183169dbc809a83069db48166d70e9d4db0e3392451b2c63240b2f4c3292851b4cdaa6be7c3192451b4cda962cc9a045b6dd1d902704755c94dc9ccf65ae468eaff21fe6ee30a8c12d43c85021030643b8a31dc2bc43479d2d87dead474779bdcf114faf1df284c06a76d559e1b9ba15026956077e3e9e1c9b03ffc30e3a3934ecd1f0f3f1ecbc9cf839b3697dfbd1fb9dc763c44e533bafe687a56d3f7adbe968c4e371462f277e665bb6d5441a98bb6a9d6b94d9d69dd18b9f33cbaecc99f596a3e5959ff706d4130646a3c16ab624f9ab5e4b92a7752e49beaa70499244935d4460575a1051cf9e5a171d5fe5a6b8e8788e81bbc2a4f8cd5d69cb4d2986988d8c8c8c86180a34ee90772cd629bc78acecbdcda43331646d3bd7c541f61ee9e9922a4791c08e9f12f3e18819d97eda10377dc48eb82f5f602f46b59b9ff9f7f9a745e1767c57b7a2ea82f1b22ae41ce84e61553748448426c4afe5dd0a918fd8cf6b1785abbac50e41bf531811efcb17b724790afb81ed4e61471e3ff760e62bd67675e47bf8e443412cd93b3fbef8054a3773eb45c6a7cc8f217cbdda46d4bb3abb41f7de83d9d5598702ba0e8b6ccb08e38caefef592590b9d85f948c614c0178f7632ed9c8bedbee34e17ca5c4ca2be0511c40ee19eb70097b6e793e0d2fbfc00962713a3e6083ddf849edba5e7aad173d9e8204c9a7775874993c4a4193fadcfb5e65ad3fa56d30f2bf2aa0223ab6edd9dc2aa5a582790a901ad179803fad068a9644bc76f967e4870d1fccaca1ba834bf3a8d99a7f31456a4b27e13e4da3d0aec7d504caf462f3124f29416c575a56d2f7eb528ae9db6bd67551ab3c50bfd640d855f9daa6a5577755c53b4ba5edde2871cd46e7edeab3f0d08febdd280aaa276752bfcd32093aaf36905271614d3507675b6ea8be455b1aa515cf3e1d46e7ea8bf531a10fc906ba94120d6880439cb411948794bdea2b88859206670e97567f45ed3babcab9b456db1324bd6703376e44d2aba232ecd3b329aa264531a048a5bc48eb887fd44c824aa0837e496527e52a162e59dca22447d9eae06de631bb8e87829332323435393e1b89c195c7abd34181177d494b65d4d6db0273c9515685ebeaa54269319f6332fad3349d6b94cb2b40da7a7b651e7ee79570d909d218c3c40891326dc1457c56de1b8703cc811b1cbca554d1dd772699be72ff58da6573e5ece0c2ec1ded30a3be2dab0a5df29eaae6e4fec679efa62547d3ff43174fb228ca31ce60635c395e6a0f7e50d3672e7ea3421ea43b38586b276df15e2b40d5efef4d476491b444204e34f13113b129f16335479589153c34f2ebd3fe6a64ee7f5b01ff8d83d98d7530b7a4d490dc63f22e29462f6bb1c43eac30f33e2fa622a2f78d78e83d861cdc9207bfb86708c04ba40b6caa89779d68b2c9ebacd18f35976ef41989fd841ee8bc37c7a9c6e36f31e753bfa9051e977a9e58b15993bcc67e619e0ae39fc115b7a4baa39bc1227c4ae909ac3ef8f6a4715d3d57779a8cda979754a2de959c7c37945ea35ae29ead45d59ddb2f738ed7118891539c4a207ac720d0bcbc78fe9e3f4f5a8ae2b18982f46046e712506b0ca10a6f4bba4c8a0c8a08e988c86df380b67e1d279b4c333172e311a5c725db884f1199c069b4184fba7f0aaa9904935a49af7a89beb1e37824b301646846b6e825c538f025b3e28c66951602e5fa48706b44ceaf121d7b10d67832c9211b73c9e1fa7d1cbe3612e78bc87b64dad422a2fa747f591ff51390cce818ff5469ec3e02c5d64106ed1b00672c1a52fb8e4b27009e3ef067970a5218cc19d0db26db9347c8515891a10cc875cbf03c50fb9a6a8a3c7c35c50f4baae1ed575cdb709abf4f85643bd1cf98dc403ab58b0cae35152a36d73d664ef0d56d96a489d854b423c380c2ee9383c1f7189e6f04c0697701c1e4ee11205a37c1c617a68373fb07b1c760f6d6ba27f1ff5b9c124f81ff5bdc139908bbe4e55368349f03595b730890c2e1e0f67793990b9a0fa1a9c52838c7a0dac02b1e0925090fbd2371f9a5d0f0fad6cc1a51c878757a2171803e699e2058ecd2165ec08751b6d3b4edd71a5a9dfd8681b64128c751b62363b0e0fb123315eb1f2b8acf0c76d7ebcd628b36f8e7a8b5e1a9e2e5624eb51dfa354e46df3b8c11e3db4cd46bbb1f9b5abc771342a8b8d366794a09896f7f18d3a6a481d9981861a5ea837a86071a58b2c647049630d2eb5c125ee295e44792a0b97e46119661c75fc8ed3ea92daa6f50e6a5d3c88a078a06d344c828f1ac5c327a341b6515f34fc96491f9bf3a8dc3eeaae906dc76bbe1892a278784aed780f9761c6173d2f1e4450dfa16d515cdf9c56170f22626e5e738721a17e736a23af9859970dcc0a7e74d428bc1e96430b726e86ba64759da3bacc8ac58ac47484c18a641de4bcf43bc875e978ea6c70e490b1e14bda54d734558eea669ebc6cb61e97a737454eb43cddb8df1b5a9e698e8b0711d46fb4edc55c39627d5fbef44de5277ab1226cb43db45d1d1b6d8bc7790fe3c09050e7515db3103a6eae6b4ee575535ddb103140472dc8001d1d431828dc5164c7efa83a9ea3d23c561c97ab53f32caea92fb85473788a07541699eba83b4e53731c478d9fa9100b26c15315c6d4cd75cce9bcdce0e14586678d86dfaa8eda4dcc61c78e771bbfd38bc968b00a17d9b65d36580543f22effb023ef52cb172efa11f12eb347719dbde7d585c92eceb25dbdc12a35bdc12a0d5f5521aab7edd245c32b793c4a36c73d7e9b5b46bd880770e91dde889dc7a38473dce1e171b8b44742a8a297d2b675638bd4b6f5d2eedb466ddb35da7d7b6f350d2ba35e1c6e20101850792cc2869548bc9b73ce39b13b29a2dd46efa408fa206b6a517834cd37787a6a511a082184b9ccadbb63ae6ec3d4ad88c6e435b904f44ee5384ddd8a689ae738adf99c595653f3aef97652d77c2361ee4beb38a5dab3eaeb39596adb5dddd5d921f4d8a10ed4367a9a22be34bd35c4d2a2f0a0151ee65885873039be3b046a5178b4751d5f0cc9eca0782840f4390e440f616075980ae6f0931e56f430540bb2342c53f0388f8a478563c767765c66c767765ca6a66e45f406732745748eefa839be1df3ddd5d1a16d39347898c31c479d2fc77da6cad49a97e39e55f798ba15d130a7365407993cccb7d930cbb39b037379cdea7a1f0fd1947dc31753752954286d6adb3c0c3d633e54fb9187973f54c3ef9cdb3018cff57dc4e4af3ac50ba0770bded2a2b8c98b775a690e32eb8ede65f4fc87fdcc536db3b46d62a9fe302c453b262fe029ac373fb0e167c32e230a6d9411052a5136b09dfa09d5a75eac087c90830db59b23f3f05323228a6b4abbf9991def84ea288fb0c89d62113c3d77a2e64c14747bdd8ab8a50105ed3786dfa6a4bc139d4cefb082e06d937bf8bd77284ea6a741115f69bb391b6b417b9edb8b6809a4f75cb1bc472a3c4c4f9be21d0a08df3bdcb7f0b9432d7b397b28769f56e3b37f45efe422d4a2e60ef3c14237b3b1285f1ba9e58370c9b5acbee1e4e0d997e3e31bd6f27179dc9597038f7379b8436e2eb5ad88de9cecb44c10129780e6a1cc83e2372686f4d082f64b6381f9262f732a6b8f1e3d7af4e821a30161d20c32f81d5f8cc42418e47a576793dacb91b9ccd4b47999cbcfd95a8fc7cbbc87dd951c39ee43db668ef3d0b66cb7b44bda76748e57dab60372c97ae5ce259bcb93b8645d9ece1a243b9380b45c80eb19a4a50c8adfe6a3bcc612f3edea311504d9c6e3f30ff329220a67ba7e49212afa42042c90410d6d70c3175376284ea64c8302fba56941b1e7f5d0b0c49c0796ec37154b55b7225ae6582d722629fbc504a351e1618ad1a688f915f36bbe1c18a311592d70011828c8820849b862da97030fc575ec50c41ce650605af672e0b34301a3d5bc1c78eceee8f1649a337a39f0d83cbab47d394731dabe9cada67de66d1e311f1b1b1e950d8f295ed45cca12157d984f5555ba83ccfa0e932046c4fad48260123c0523b35e73e9da193d1e252f079ec7b7597dcb7a73465b4d6fce485e893c0f6d9bbd6d974adb2e52e3cc8b9a4f6dabe96dbbf804415d0e939acbac474c022713fd623e16d520e7c877e99d1f3603c252b463f2223eab52b2c72cd16fa81f5094d75840907d5b5245645af657e7bbac5b13462de7176bc09a322927a3a32b55a84c79c20923131427d3be9cd95103c224204c825f8cd2823009dea7d27e854bee7cf4bee56dcce53d46a3e1f9cae422fb82b3347c978677ed64906deee8883f67963d9edd9cade60ef3797f8e1f0c0d8e0d6a9b93aba7a32eebbb514ef6301f79cbaaaaba9dda0aa2baa2dad236c7b24891fcfcab5435b752b116692943155e7638dec33462354eaeb65e55a7e694724e398b5a3e5705f5aafa621a751c753b358e571589a3c20999937254fabdc27ca6b68e0a27e49ddaaaaadb29967f557e33c67c1e13ae8ae7b01faaa9a96da72a98f482a8966ea1db0743731c3beaf686d751b7211a3e47158abdb9a386a7a943ae7dde71d49bf7c73345762862b2188a1d8a0bbbae6753c01c0a0c06c39e1dbee6f14c3173286066b2c3c43cd3a6a8314111a34d314d50142d1a5cb8018a33d480c21bbc3041e145f5ec31cf0e73f803e1d29621052a5b8614a834e9f1ac097e874bd4f643c321e62719db9ab1395b4d4f8db32999185f78023eabfb72e663ea7c39f33041f43cb6d3f357dd97b3917a9ed6bf9cf9aaeeabfb642e26551a9db5fa66f37433c8a429b34c824caa6ee4046b70e9a6fa7cb50db9b44761b8d1f3cba5a9b96c1e1919f9549acb602f36352327588349db3d4cb9ccb57c7c15b9932b92272a7e4a1849d8a971277129053c683e4e102e31cd561a2e25b1b4596b6782d8ab450a1840e064e237f10ec5d3a4308089cfdabe9c7d11bb1f4e006e0519d318b745c6ef61cf35c835913b3936400c5b5dfa9d679559854b307f9f587029e6efd3cadca26e07b2adca82c35703692cf6b34acc1041182ca4071174c14178e73a382e52ddb885f8ee909ddee174063b12d34208f19dde3221dec3313bc4877ea738e8777ae3a68e033b22c4376e1df8bce9409dab0eda768ae9c7a7e62ac477a848645a88531c18126efa8c9e4fb5a0ccf5f605c4ebbc8767b005c4d37fe7428408113223040000102244c885f4d0430f3d3ceb210001e8a1871e60302439ddc3cecece0ecc0ed541076ae7d45d3b3b3b67c68cc4eb9c5a3ce4413e2448902041ac20431080872178087202040912244810ede68890ef5c88c65eaa2c43f05cc76dd111e2540fdf790f3b0ff24d088a11916921dc8ecd8d0f3ce8f8a0b3731e767676762a0f3b973bdacd9121e7e143cec3c63cdce0084047003c5c87071e78e0a1eac4a3a8dd1c09e23a0fe23aa741aa10ec20c7e9f1c30f3b54ae0107f09d0fe03ba73b55e741eaecf7f001440e0f409c6bce75a8ae77e041476787baad83ce83d4edcf2a4254d27b1ea96e0f19400da2f254598e904adf7969479b55809855a81a94b15ce33fc835a0951a94b978c4a51dfe2e001fe291172e05091224c883f4701000002088172e6d902039e490430edfdc961c680e0108400e39e49083e6b630e9fd94071e98873b1e28a53cb0ce2976e15037d7389c52792d465197a5c375b04c14957348310fa7d4c5030fef618821c9691ebe9891784aa917a17e6aae1bd106adf43bad371c802a04db076825a759bb39a2f31daef31d346885493a7fa73a3a3a671d1d1cf643cf3a9cf90038d5a8b6f10eef41c80edac6bdc3774eeb369b0afde870ea3fd775f87289d236a11feada7f7238751d2e1dae036b3a9cd2b61c7600c0b9f6701deaf68ece85e8e8e850b777d0d101401582ada3dd1c09721e1e44632f4c7ae7e155162ef1f0f71e722e049b877a263d7a25945022630d873f1c72aa106c6a13747d7b8356d8cb6d8232d6ae6fef77e140b3ebd00ab4c25efa9ddbe002607f672f6ecb0b72c38fe704c205983782a87a9111269908582fa231c99c3a8c024df0387c13d679dc610fe071a811d92c6684751eef616a55c6224044649ab9cc197b009b644e1f4681266e0edf84cc6ffeb007dc1c6a8b1921f31b2dd26899269dba8b2ba50ea380bc8f57b509f9ea3495489ee63295485ee63adec33e2a51751c8795481e9e7a87e770d7329508528088e6d689aaf3f86a4432b770d4268888accb1cc8d9c4a3364144046fbde66baa2a518f13fd44f53f4e539bf89ba86fe2c7898a9ac0398eeb38118f13ed38518ecb6844529ee60e3342e6361ad1c954fda6123953a571a580e4d3684dc87ce68b2191694ae37b3506ea8289a1d57595c509f15e3f2daa6871458a2e52b8a09b645b95a5dfb759a5df37b946bf5759b4d0e15c9f58cdd7a1fe58cd5ab0d1322dd394c25c8b51c0e633874dd85c1e06a300cd8c4624afe3bb43602e4a0122781f2792c7f1c51e40734b23b23934e1a84dc0d3dc476d82e636d7519b2082b73955b7535fd8036caee31766043c8dd68475791e95c8bad48a9aa8b98f5ba7950236d7a135015f9d2e6604d4a4d01cbed28aac22cb2473d27787b0260fb522cb04bf91bec5c834e933b5ba4cb5acea4ca4c58ad06b1190d188e02d2d0a792f280dc8095f87dd213b68db4eeba03de153cf41dbe8b7182a85e6331a913335014423ba399175a2191ce8b5c32a85e63e5e538978bce694eb0d5394469d29ea86b57ac31445511a162af23e34226722baf6cac789aa46e5a66b4555751d27faa151b9c987568473f81e5a114e55bdba0e4a3f53a9dc3473ab52b9c9ba4c2d92b98edf54adc8ba0ecb9ad18a64342a37595a1433b70e4f53894e261b2d0a49cfdf76261e55461ed2bca612edd08aa4bc8e1315e1b80e8dca4d32cfa151b989462bc2a151b9496a51cc68520c60929f8732dabe1c2e4d7fbad2731e4600ca351e8f14eb50a322352fe84fa657b1091e1665d30489e0a3c84c90893dd26ef8d9a3b8293bfdb64453ed86b35fdf94f435ad3821aebfcf2a8f673e603ed388b04f06ac69ee8b81774dab6b1848d1f81b8ad51b3aeb0d9d13abce14ab5f5494bfa1d66fa85684055f5753bba12094300ac1593c664edc3108a375c82f900da64b0ab28d39fc850597b2c35f56b8c487d7160d4f1d93207c07b20dcb7273be54c0cc2957d1c516ade3521e3bc490e8381f620a98f90de59d9e3bc4071a1f9ac69d8e181296e7197c78d6e2a27a6c05b39d9a00538e4c0fc78c4c1603835d3adce290dacd0f8ea18e9a01c2f0858be9d5ed05c2af28f6f882d2cdb2b93acb450d27e6f3b0220cdd56301b51cf74906bd636273d065d201bbcd2ef369b61356e799c95978304337a8fb6b4b15d7a8f8e0086e6357608bd3b8d7f567abb7baccfc8cae3e12f6c8eabaef01a0e0b9628a4e3420f988fb910cc85b00bbd0b3da03a5f08c785662e042ff400ea374558273a99645e64cade8035edb81144d4e325ad42f045f0f86245d4bc8765acc02a3745c8bcc884a30a054540fe7a03d664dd08a20af26d6ea335419dbf261e6ed4685eda7d862f6404a5bd3558bb296207346af70c5289a93734e7179960aad0cc711cab4130c7aea30ac1d3d35785de8bc8be581131efe11c5dda5da6a2d1ee34b5882b44271317ed8ea31a41341f2f3f5383222035f6f272dcf90d5813f55783642ea3355165473159da1da636604d467cd1d69676bfb8d01a2414819b08c85bb7d654bd884aa3d2ee0d5893515003d6242f64c4d4d88d1b11355ea308aa4abbf3b3d2ee27930d052373597a735fb4fbc66b64793cf1ee7c146313fcc5cb718fda4d04b8c42d595e8e337a3c544cec065b59135761a397e3b63c1ebebbe3f278a43b7a39ee52bb89803c9fb526e2a5e6babc1cf735adc9a70887c6cb618033b92d2fc7117911013706309060647a429ea8684718b260643232a23149ed89bb2c8f276a370c70a69b083c6aee6ce5f1c094e1042454f9e2f1cc70d1420da32c476ecbe35934ba3c1eab0d37a8c10c2393bb5bc379716e183d9ead72e531178fe735e10c2790616472e72f1e8f104ad0c191c99db33c9e35a101b58db93c6de32dedf8a84d10325fb40556c0088208b630c3ca941604408b0fba70c50ebd5a7c408496bd5ab21c49d1031f5c61052cb0b2052ebef0410c3124019641852a3990e92d630a5fca98421b2470ee391787608de37e877508f67b87fdd83931e8728923a4765655cf0ba29ada4e8f1946c86e213b5e07cff53d7e5c4f4e0d2671d48228a8c1e7f6c1bcb7c3389e61041fff3ee56fe6a4de7befbdf7de7bef93923b0feee6b0d3806081f0fde1bc223eb9f7aed005b2b92a1d4f21752a0129748145bf574b1a68f415a6f44eaf162b3ca1d3d8d2c5a8afc6d182852e4dead582852c8d052f4d7b6217ac409e46652e1827840f2724fefb0bdb21d88e5358729cc2d4cd35cc3563048e659e98cbc16047ac86d731ac88cd05f7dabeeed4e012bcac37f0db17e603b53329521ac4e3314265b22ccb642a10b63759262333b31b0de7543821b24f2099633d90e0681b37f61edac62da3464f389fcd6758764a636f509ba139111531d1726e4d48e765a602652f6a58b7f7f31ac729cd67e46736b7466f438cf96cae71684032cf36eeecf243dc33dfa0b639359ae6f0db8c0624b3cdf00401351a9967977526889ae32002d3a4066b36b51bccc8e39187daf6230f91c8cf7cde517142c0cf2cab148c6c9ee69b53a3676e5333ac08cea106049f3d066766f3b1f580c18ac8034d9c63724e1f3d248ec5583495c16464646464b04c93a1f94d9db90e9bba0d83783c3a8c3c1e1d5a76083119886532c7a870426caee1065b6e17b5a13ac83627d7cce7d0eb4c0392879f7976ea1623027e2633e2e1f8eebcc388c8e06534790c6a37329f39cd9d118e531a3ccde6e4eaec35df60cf0cbd9edf865e67a7beb92a7ae61656641e28d3b0571892abe78dc89e699b930b36cd713ca6eee66c43afab689aa96dd8cccc27e63343656c99badd321f68f910b4fc4f6c095be687363c90edeaeb8e0a2784ebeb30d5b5ab82af43e621bd9cf8eb7ac47c2ecd654e8d5e8c66874bf053c7297c909d1cb39298149d89a66e1f49610b9dde2328b4e17a7db22de30a5df41e452106adf596718530da881d021f3f8185315dd74247c54d31419604135c82793c85a9db4670c9080b2871b204972e20a77956b7536797984f76fa34ba836cce9fdac1d35ce633a719199aeb590512afeb7a0fe7a86b32e2f1ec64b172032d2a00c3096d98e2affac78d7d6246c45cc717dba13d20e6440e0c5f98725c47bd018017131100bc98b29713cf25c89e414b83d9941d2394600c6d19f178166a30a3c7a16d3347ddcd5926cd7c3122a89e790f67558dde86b8699e5da6c6603e32746a3746b6e78b6ccf3a53b7ab674e5337d7349f95ee203b82021b4df9a2a938be183c35ac43af71688e0a2724bbac9baba2b3cfd48d0999ea9e557e8cbbd20fa6211198866e196683d250735656e7bd016c7aef793075b1ba7d4d7155ca48c30d6dd5aa6e4d54612f0de761b00efad193e8610d60d3be9c4d010ddff3a8cd6dd1efb23a612f0d0fcfa575557a7138cd227e45ee24a94a05d70b83a2b8bb2abef44f4c3b0d47d64edb8672485c627e1789494cdabbaf53c1dbb2078449bc397cde2d6b7eda56d31cbf2da1ac3407d9cd911ffd1e35a0f7f7f6f6f6b49b9fb7fbdb693bcddf9e46d23e1bf681c82d90e00a62e8c7437042ac13a243ef35575a4772daa6b5bb7c8d4d36d3fbddacdeb3e35997f3e0e3d7b9eb62d221ccd210ba7665a4c1a5dd396bca175391392ff8600523f0410e8460062f267ecbbb8949cdad0e69e36c08108a216416a9a3376cc0061498810b2f3b53aa335000238c71bbbc710433ac21096754f1829034f8e032438c9626304919a11936785bc48aa2cc5841531445c1aaa2283348d0144551d5335ad59a8a5aca0c294dc134455534941419af5e31be78e9d83b861197deb253700d0000000060ae480119a040032f286802008840852350f105256421c21274a6a00517442e51946199000b350d6b7082c438abdaae86f0080d1b5a15c461128410424869975a4d8d16212861cad6d4f47bef3435b2570b9535e41aeda6a0e4186a68c11442358293089840042fae68a1832aac089284176049c0c1088e9280054c144980820793f2c11b9594636481a2a5a42635860fd2209d4043185cd63b860fb86412aab16383238421c61abe5803083d18210d5cbc232478c982a6f708096934ed1d038b2c1e4fc049187c808537be58d18223f0b0850d29b0dea32d58e8d95b842594218a2c2e45852825c648452a0a504a4cefd1162d4f05d9d218210953d23072c20a43c8d94284b9e58a29ab842dae68c1862948798316485b8010b798c00a9e1bb0a00837d8f2e50c24d8a1e5b3365aca9652ca08175ebd63d4c0081996bb1c4cc114a56a4da5a1be2e7b3c3b838e46f134fc1de2e4a4808c316eb9d2310a538c5146cc04508a96183ca1650652329a317c70b4e58aa32d52b4148194da7ba4a50b2d7bc550031baa58610a2374410552fce81d030c2e4d7bc978c38d22db6e77b79f0e46b0020d2f4ec8194578811854b44c610a0ebd475a7ad058ef91161a640f7e4e18812bbbe429cabce0db3c9e4cda2963e40458cccd989d17f4b9df3cad73e87d1008609ed985a60b976da7f7c8086bf49a365297a332ace86d889ac7aee78432464e5085ba6586592efcc58be171bbfc34ec484c14d8500b72fb56679d40e161dd2dad2d5c1d1b27459603c31d12cf8f3b648c27baac1b8233923293494198b4a45e1a26dd50df32da8045c7df501a116eeaf2410c51a5f7490c31cf3bda23804b3b460fa8f47ef7db9e91f5164429ebdd168dc733051a5d990253c58b1da30747cd0693b665359245ac46b26063874b408c6861069376490f6a4098b4c7c2ffe3612dc36192943172822b4cdac6d15bd6cb251cce88df3301e52863e4043c681cbd476490a12f2e6947dc1bda694e0c9991753a704298020d2d5484412184104208bf77f11d522b4a6a87507287c8b84322dc21f0ed90c73b8457477eefdef380e4633c9453c74b37eb64521832cb626b1e081e568e3a6d038240f06fce0a241d06bf18bc98247340170818b22dcb681e4e063f1fd45e36c50bc77fbf009ddf3a296d9b4dedddf9d6deed81dccabaa777da466109be6521dcae73ee52dba54eed6aa7eaf6deec9ad46de44f1d889a4c5114e5aa9b52dbe0c657e5e609e86ee9c143d6f8ef95207c2c04f337e6ca9369cba7e71e15943ac7fc1e8471abac1b101f5723833069475a806808a79d00911993e416042908cec2d5b6f7e8240829b5e9b38f35c6203a6e3f0d903d8c57d2ef5b379ade3a147be946985d9d6cf751fed04e3a2fbc587d8b3146f8de36e41cdc5d9d6755cfeaccc3ba2d193d8708826a1b908ea1fe2cf9f8304064574dc634ca8f8672bafe7efd69433fef97f64eb5f728a5f4bd4721b428f8207c94c24729848f5208a11613f32a4a29a53131300642184329a594c65431ef3131f32420d44d2e2d0e93e6634eddaaf0baaeeba2af0e298510520821a510424aa966dd0aa22d4ae97b402c58410861f51e0d932c08218410d230c99a32c2c71223f2be759bbef7de7befbdeabdf7deabde7befbdaa7aefbdf7aaaacae276b565fd3fac8ef52a4a29a5d47a31568d552fb7b0d2264c05abdaf3b2ba395932fa7de24c4a614e55981f82347598ba05d1d429bbf7de7bef8210520a21a510420869051f0cc4e2252965cdaa9a1645e5153108f362387332d7c260570c4c8fd5a11e251048bda9d322d863fe6a0cd4ae8bbef7b00f1d629694ba4bd26f104248f7a89ff668fabd8aa91b907e30da57e71d42082d0b42cb8270abaaaab220c4eae604880f3cd4cea4f79e5b23db2f93ce24eabdf7f8c12829b713665767c369ea50dbb286b47aaffaf6de7b5555bd577d7befbdaaaaaa8a6adbb56e31f85e555555555555555555555555555555555555555555555555555505610dac54a32b7737c2127cfcbe7c61211848c8f57bafe759efd5e5bc90eda9cd4910fdfe2898de9ec3f87a145ab1dade06e13bfc3b10d49c17b2a7c5a56036267ae16a737bff9c29c67120095d9842a6f7880c28fc40072ff8620a6e9ce10c5de0e063660ca32aa011b860022c669cb06668c3132dc841185570e30d0d870dbe9842c51b45b8e282ca001ab904392c2849fcb18a589d7787398dc8fe6ddd20117e6cfad402228b858edaa19c1afed50dba861a0298c48e19663b750f93f8d60f32feb647cdef7924c0a2ddf79c8053c320f1af6ef07da1b611dd1059d83d0c97b45003dabf755f2e2f8b9c5060c00518fcc08920e0c0e84570e235f59a294d51949473cecb29b3a331d4a04400e1101ad6d4f41a410d338c11863705ea483f70e95d561a26fd50850f9ed00428c27002147e4093acc96a7cf40fde7bef59967ea7a9793c9a124650822d48c105389881e95d0b09a6f496b523b5bb7b102ec17655dae06120ed9e9331634f73d90e16b2d92bc615be983b6f084f50a1853450a1cb0bd430851e271984a1822e27b8420766c8c224715ab6c183965ada3883045ada18425fbd5adae08204730ba237520ef37947522e2c3ca498a2a57c8d9472468abafb8cd43c4951850b5ea638eaa2075d30519f5cba69ead9164d3545e5a8298a92914a9086101ae10a52343c4d0ddcd16b042b78911253431b34e0411856e082126cc840010e32baa0810ea498a10468c8e2ca0fd8e0510431c814410539788317aea0851bb40105366a8aa045a6086864a1230b152e4e18cd800b48d851842c3146b082172d72e83d2a82093a476f192f40c30ee8fac0143be79ca3de9573ce695b75ea3f6656e3b40d486fe97dab4e9d56b53a5787d9d378abc964a56d53a378b2f7365feda2b665fdb4ad86076e8efb5b2e3d1e6862d80c5940e366ccbbcb1a671b1f7eff08e1a506f91ba4b04ed8f0af81e021935e6ff00b7bb724c4471e4fe67a9d69570821d743dc95db6147f6cb976638242e9c0f66af0831bd5a7cf085185abae6680c252c93b609756728a775c164333497ab45d6082f78a36b98b4bbce4591e9e80d521c4c2e6db3d939c74f0710208430ca1d5c288aa266a5c30bf4b22ccba297d57b24861b602e0cc3309818d97b3486143257966599cccc4caf162b8c4073e1c08103074d8e31acd871e9d0a143c78e9ad5e20334d85c3c78f0e0617323a3821e170ee653060e16041b07f309725f9ac7eaf0715c0f77ea6331a8d1b85ab33afcad2e8a2c47d3f0d821dbfcacea3d1aa38bae79d535fd71b9abf7680c30ba66a9554d4a46f8d8ed95e34a462d8c6e48021270f0842eace1044d0ea6153fa8028bc5826a045262b4c2a8234c472999962ada90b2a3570b1566348e5e2d556481d292a58107527cf46aa1b2a5b9570b952ee0c061740615476ca8128528664e2388c110bab0851658c1451b5658500c311fcf090c3568e18a1bccd0e28a314c32dd00ea9ae74646464f988a9e3006319c90861a528882c9b92a94d0c20b48b0021182a0c50f62b464e1824a4caf162bba34ecd532822c19b5508c2b3145ac610b21bc518233a664013386ec0d2f38cde00a2f54e0c618dc10c51726ace3b324348f23353ac6484d299dfb642208465764e1031480e10ba6abe5d11111faeae20a0980e83d3aa2a275f41e11a18d2cea802ed3e5dd32af4c4b0d93a073518d07996b20bbc75706638c700c14454d8aaaaa8aaaa8f7f0a4bef40c8ae275fc85a228aaaa26c5d4e1a4e629334fa6b6b00ec24318635debe8e218771d740e4208a19471a1bb322cec2245d15497312902a9cc886fb094ce313ba7d5640ebec80b6754038410c2f82d83198450c618218410c62865841042762e3ac8c63ab91b652cc0a4f9edd5331a2ec5cbd77029c6c3f8f81e96ef40b8f4d66570b779dd1799bd1cf99614b58bcd49edddb27beb647594fb0ee58239e77492bf39ed8663a5e138e7e6acaa39e79c9655cd396755553b8fa92b1c479fcbb9efa59ca4769a1064e7a4748eb9e6e544524708d9c18711619e5726dd9d2ce38de6814b1b4743c0a223c6ef3d2fbcce39361cefae3b3936da39e798dd7bccceb173bcbbfb3477bee375ceed193535f12be592113521082174ef8d5933ca48166f3c6629930493e6dfabeffb7bef31333b68248b372684efbdc70c21337c14331f4a265032c62825e53397e2d212fe4579966e4a29638c91a8aaaa5755a56d2749119131ba8179bbb0a3ef9acb987b22c8b20cc2cb2f437896980f8c996466286bf020333492451b6d6c30c61da2dffb7b10b683efc1f72033f39352db588720bff7385681bee55294176c38adb4ab42ae638c7b3425060ddf701193a7ae58a96f164f5579eafc9552cbb4ebc1070f21e513a38fe408618430bef71e455143f141085f74d40ae41b4af995324630691ebeface88f950b0c6662f9fd1d008633c471f297d28a919c9e20d2359b471e5cb172359b401b386b16eb0a394da3e4a12d9289dd4723484290da4f748085d7a4bf33b706377b0468cacbe980f166a43c1c86e7ee0b778eaef571c56691793e48d64d1c68473ce6f94a1ce173a35f5884d26513792c51b46b27803f3a1887a93984f4519c9e28da654dd983aa5b591134c798379e6cb91df3692851b55d0c89aae4fb6638061d47b14c61abdd5b47c4d6f1939e8d2464e308549db44b0a9a580a8a409970974811ee49c524a99211a6d0212331540304020148b85e3115114551f14000fa3b450541ccba32487619052c818640c21860018009911991935014643e6a0578b5fe1eaa22c29ca6a1e4c05244547a6896571ea39173d76efbb84e69937ba717f32efd435b9fc7fbac5f957ce3205cb0c047c055531ac0616b834501a676fb974bcc4cb2419426673146eec6e12121afdf994416911bb088971c5626f82f1281ef52988b9dc1c74427c9ae78e7d5880ba3cf1f98a58fab97a497a0eb7f67e0a851a2671068290030b14667721671d57f173074ceb0b5d8c809650deb6413746d68c5a3063eba1ac375e6fa65d4281b690923f15c982dea4f280c6ce8bb7a26bd32a7934b98e52d96b15db6ed23427748b0185f342b0f6f0bcbfb3e9670990c8c2932e19e8e9ceee4df55ab91ce0d6cf8c106468cbec72b5be9fb41609cff1c8b4bbc8ab73b5037d684e519ef9769736f2712482897cb4e806190a43c347b9e2ef00bf8a2076ef98d028423ec4cb405f9fd10f05427f9dbd0cb93924a69d3eb429d45a80052f7065cf7f16b89e9fdde40ac6e28a925b53aaa78002b3e3f01c9d8be8fd3d18c7e07eb0624594ba5b33f733b7991dbadc9e2ac8b444349c16c1439f7f7a1023b7a3595b368a8314ba16e418a154ea654011d6777d63d9b155e82da288ba0f8e7fbbd49b5aa7a80806d32b3309b04ee7c85845a071c78820842dbd6e55d7152f2f1270174d23a964631eeecc13be7b0d2cc7086f22481d129c1cd649c938585a9661a48db22e186fbc5fa85c0121f56b0fb05a7b6208cb761f71f65a1e4769ac2a00d19134ee8d8925c5b181be0bb48cb7259071cd8a8b9e4a90a408ac8efa5294b2efb5102812fdb512073f90771d4ece550f3887515eee6da43e75f7827ecf7de287e154d2284471eb45fbac60ef4ac87defa836e1c90080fb8dc32b473dd7822d78c9df6eb70e30cd548bbbb8456a3e767aae3f06cc29b3d4446851cf555002396411e2dbbeebc360ceec0c9a61c25f2fa2149c110cec3dc371260a64149bc2582330de12ab627af2bed1bf45870dd57f2e28559239f16107f0614f79697a50f55b5afd3f297b601b66376e0ebada4ef0244808a11c538e986f0be5f8cfa0e88c2a4722643229e34c514494a6df6b134afbe97f52cee88807034b6a0c07ed6657c19bc6987372037291f23f010619064e610f3aebd4d0f0a913576b82a71f4f6ca782c8753ec4e97b91cc50f49f986587937c2495e41b5102b44c93c1c8b74ebfa336866648e378a3a0370680bb1335cde9ed6d61ed981251cd256961873e6a99b3b5092d80595d57f31d380e09bf184fcdb2224e7068037d0bc3696df87d9cab19638234e31f3e117a208044209d1957c0f1e6d915ea07ea81599d3124a7aca4969c639c13f1064e57fabe937098009346de0c8cea899506ea7b04a06d11d53707b2bd4e4b7902154c8b430c638d6fc181944a9adb38ceefe2f8d12d9744c6ee7f9399d311b7c9dfe58ea08280be91eba5b79f148f524af971c0b7d9e244ae537329021919caae043901716fe223ccd22e99ed9d84c63d3794f5de0053249c6c434692a89b971cadbb5f036241c3dedf0644d38d02f6e38dfb9b5767d00128a6811e08be9875114fdb6e599895da673dd442b977beb8675309bed06d7c463dfa2669aaa38e4225afa497b27853a9aad920a292aaa86d0a7046420929bb71dfda037587b5862d063e624d301f4df4d22b5c9c1c304069a84a1b967316c33b271f59195f6e44935919286e1a947f2827104e721209f0ec0ad7ef12fac3012b77cda31ccf131d8a5626d0fecc5ef45d3ce6cfc7d22699a6331efb7fc3fb904d956d410059c2e74c4523f6779a1a09710309e5d80bbafc8a8aca6c455b4a91efc2a781bb0b4121b1e7ac1d086f3771b5e3b870de739294f684beea7a62099316b803223e57b97dd2c34910a90f71df8ab9bccc91e7375dc389de1e49b2834244c70f89fbc15b65d49d29a208fe13a595d3eef5ea161153cd2b37ea4e5845a1ae1c5abf3b5b7b2eb755e04aa4380c22e10ea1a1188d08d50bd116e0c7573880079399516d7a6468f8cc495dda8ea9d0844f77c168e5f04a18f4efd1c8d9bd7f41346d56107676cc5d433b4888278f384fdb9368e47310885e41df2108057a90c570f631fd4021bf5e48c255640901a733a99ecb4a51460ed42f2503fab47717490337981796f40fe5113bba7992a27ebda09a60b38c738a37009ea60b5086340013997f53e3831621787456c26ba219942d068d23b2b7e5746333df3b7af1a51becdaa97853dfe73bbee7c478bb59af077503c594409ca393bdbb12962876a1b97e794297a4cdaf7da99ee2c5f4ac6a70a9204606bd766c2e89be147df5508e839726112c88ff496f965311284d512808a4956629f957d145d112c2fe9f6548cca79cd70109bf63850eeae4d5d52662c35b735e6b2c026ae735aaf99301b56a4fc97f52b0801d6d99ea0f35b85058bde183ebceae93e2ba9c9034651ef4284e3d2145a51ca7e8ddc13c6ffb8548ec568a345d07f00e187568ee02cd0509e982dc594ec764ccad4fe4ac1a371bcda79a5e8b50d0a5cdee94d396d87a6c920e8f260876fcbf3bf200218bd16f9dd2299f0b8fd1f27ef3f19448c1a883a0ecb6e8c16e9e3874d90ac92377a9e0be3c658cfc5ded1e00f4b4e89b7a316fb7167c36521a112a59344443c4c10356833824ca9085186766d775c093854a42a1b0874c322f71dde4d54eb956bae4695e8bc5a9fa3fd18a4bbb7839a980db1b500fb6d0f623958ddbf425ee7d0d69310665e91e5e1c8ba532977fef586334afcfbda06ab814fde57f58f6430a211c32d8db0cca47c173800fbcb2cb87b1ffd366cf08084e202c8fc0629ff3978497786a7b97c008af026ae4dc1154b5da2ebde3e4598ccc85201ac1fabceea294bd007f3d506446ab0fa867f1bb58f00cd2326c8100ea790fe8a89f533cb6af4bcecae70a47fc8400432b87c8355ab35b358271beda1032d1aad4778f4cb71481eb0876335b3830be7175f755ff48b696558b1c671cfeb522f1139d3a40092361b0c5cee5267dbe59c7bb988dd0b73f14e21647dc35812d170d850f403aacb38ba35cf9c65b4a65eab8c42d2e54c5390fc967fff2d48983f41a3f22bc54c7cfdc7eb99f3d74002e838c67bcf621330c451a47ca73a1b09b8e1f4c3fabe2b937f3106b41903a54a309f1e045a7f2ae48962c297adcc1a4e09844d30be597655203d47badae5f2d1dfd697706a2d7f380ae8ebad95734a427e206529ded535374ced5500db6461e807664bf236463ab5f5e3e24d9ff1f4ab52412a654671834285577e7000e9c4f4f056a413fbdeddc123a796810a6e3f4d92ddece72a364a8b1a09e9505bbd3ba3271e96cdd756a631a814aa2129f35c0e22e812281d6dcda81807ea4221655ac400f5be08985fd9278c66a261cb05f72d22418de155f13b4fd7c1e43bee221faa8425609ff565337a86de489f0ecee746fd2ae835f0a632accebf5ea32485c13f8024751898bd8adf3b804ddf79391fb4d2ef5c9c8afe65136a95ef3964af82021868a24c54c8d5f517a7e4a218477c51c2541ad0b746b7c08f68d6a494981758a073fb39798d4362f851a8967ac050c3203377b4d7c69d36455112762f4c7dadf757d60ec6858d0ac8c2e0a865a02c9ac5037352b2bd3c8e440bb727057f18bb29d3e7d5f91b544e1b0f07396187bb8ae031eac95e61e70d0c7cafe5a70a6725988f3ec057bd753ccaa2440c815d6d466b3e40de342a0b849a020796862acac5c5339f563f30942a3e3803a94ee585ae12f0ce2ee3cb6121f60b1ffd39dee373df1f1920a1b13b4c7e550232238a43dbb90147875281007a8dd892d5e88b1f981a451ce6a89007d44e90f0dc4fc1710d5c55f7714e11e561e1b2944cdbeeed4457c346ba59153d2587a98a361750112cf4191bfba0010acd96f9ef54529ab94e46ee16943919b6df27fa19c587fd58396e92ee611c360492971a1ce452c35c14e642801c6b746cc6a7c1a404a8a4d8c98c5b464466bc98ecf496bc1bb525c8d88f6d3ad40aa962897720e15f4a41d584a4cf13e6bc87d794159720501dfe1b85e1bb61161bf5e0bb0059c954e0fc41a81cdd59795f35ed99ee8bafee8fca0402a132b8f7eb9477fd0f96801201dc908fe44a57d92301efdc109ba2e7aa1c35e508e7ed562d61f1e0d2df35b571225143c30094d840d91331429951f23f537d229a38ffc78b1ba28465b5f104f7b93a473d6a02ddb0cd98956ca21c912c37629740db8d93a0098fa4e2e94a79412b2c1eefc8142e38d16ddcc076dd7956b58638d658d13210339ed01405f9ef5553773fa0a33b3c862561bbc37dcaaeb3439f95953c74d24bd067e3f79f9807dd793e7d0d40217a199fa6f665c1603965983970caf73ff318b19bb322a67e1989ef93703b6b664194d6769771ee16778b68358bd21cbe8e41277d083d84a691170854a1264d9193f99bc7027626062d9c6c0a8beac918817f38bd3fcd79488c48e124fb3409d570a59eaf0657d4e43a261242464063d73fc4b8b269aba45a81a050d40028bc5b27234e62b4ea73b36042f846e62168858f492045521ef98c716b2013b59be4371805acfe0224c24e5cb26cbec15bfb680d2654170aac698275fadd448dbe27ad72fd2e3f25eed80eabe8d80f8602c4f96a19428d45d4c45eb3c1ebe56a91e3e549ee12ddbb73a18d679be70fd169a650284463c2f70c263f3c5ebe958df64c740ac45145fcc49f4ee4d5eff4e75ebdf6ca04978423f797f1fcbb91b231f63b6c1c73c679b116c0f81f09c91e2b93f1d40ef155424c864e53052dc99ce527bde96ffce9aaeb8e777b4f36314b30a5da411b60cd41ad38f398faa8737b8c152760825601545bc6596c0dd6dac2b9e92d33db0293dfca132b1c31d991403b5287dcd59860d9404e09719e59c208df346d386dcf497b84ce1df9272fb91d4914bb4ad39c21000761b2f7d4dcf585c9628ce6beef37be66a5fd277a06b72e05a85ab3102adbc28b0a5d625a0f090e93d66b97dcf7e7f5e5d7b66695f8db6d63715bc4fccff9888d235db51a610a97851b73325d46a95dd43cd00c5b5ab58316908648bf6cff18c087bb894ef4d16d65ec54a1db88dc9e38ce108686036564f545921ced191a436fa520f1adce252facf9c43860c8f4fb397c318478064afc1aeb468ce23d4f65739b682ed4ef1fedf548280030c903ec6c62b719cbbb550adb12d8c49c99e196ed30aa6fa4d114ae7855b0ced6c18d77beda9a62ed82151f54746aad565ec4d87b7304e51f8b366a38df02017d4397dc859c8df01105f09576bcec6c38a521361c589d03bd11fdbe605b0996584ef30fcdeb7444b79ff7b3d8fdb1ce8e4a04e29b95803d4926d29df0ad3abe115855219a0741d68a47279df48ed0b478dd782f2a2b11eb09d44e8f48400471325c1748733255e0a2431f4b2b7f62ab41bc3e0a8ac3c4dff9c39170ff55daa56d912108aeef2470a66104935240c57e6bb5577eb14085cd7e98382e267e7d5813024aa5de9b348833af3200c6159b078e2c6600590aa85c87b5e17c35a023066f8bf0f1594b62953451f469ca6a5623c0662425890163756bf25c790c3f42a283d189fd36c74eec9224089fb5ae1629971e955540940b6f696eae552aa85e3cd0142b4b0821b934fd915e323366ea6436b088e0461f02205fa2d816aad30cb6de139ab57e5a685793896932dabe072f3647973b347c1110fbceed9fafb6486cf256909a0bbee715b70d58a5356bda1288ecd7b832003270817e6edd4b45f7575a9bb811bab2c61ef90fa1c9e40f278431428df18ed94d4f5aaf0bb54eefbb6f0357affc6154e764ae6cb209cde6a87c4505e867e658e283ac829f9d17eb10237872d9c9207729dab1d037c7053c8dd83fa9b292b7b3b306a244599e2d431028dfe4fcac918a075c1c5483040a2532331bce37d1d2aebc59ebbb9986e5474ed0cf78608ac6c83bb7dfae647153a852f32e182f7f2c36a63ab431a591c3769c69b44d34aa400eb874bcb9a08974c130701f6bd5324227879dbfd7055f90b8c877832758251c899937d02d5e39072c4bd67030cfeeac7b4eb8b45ebe61165652587a7c6d10e17672e03f003ab18002480192e5d370ec6b19415e43631fe4d8e0c0491f8c3e1361884ed7ea430bd18f7958fcfd2be8c5aa9f6fabf85a30716afc2143083650989e43514ae9b5497e2940f58e47f227c37ac18742c576a842af4ac3b9d02d0d84a4a1bb28648dab467c9cfe34c1f9da107f1a55100f7b5094e688cb89a539925c8081cf874040e57fcc5886b3acd03170712f63412f036575623911885b02c00ba8af46ea34dac4644ff1844fb140e5c44e645a9749568ca73d4a907bbfb9c565eb88d416d84ba391ea1827e4dcfe126592962c90afbf749b1100c1eaa43fbe76b378f0311a0b82de46adb82906589b540881bb4b5251582ab22f927370b634b602aaa1a81b4463fd5ecfd8d4adc1a9dfe87fcfd7415c022ac15a024b8d33bf8d288759ac6a30b0708f6336a2d0faa530510addba3a519029f2c10e9b5db58c6d669eefd4601b1a2b34f142af9555b412faf9fed80c3deeaea216f7cfa84fb94575c7503178d70ed67bd39d1d710f8a985f900f089aae25ba8c04ec0ed757ad8071b7119c253701f98b2d362f91d3e2c615589b853cf5a5193cd443bd31c509ee5ac6a72a20898f6db9dfe28804aef0a12a3f22a10474c5e808c79c9d1fc26a25848c4c88e4af37322988b42faca93681fcf471911356d77a36ea0285bda6574166b33510d92cc07ce3ea6ec2851027ba76b35d0ae67518846f7892000811b33faca99b8a37e0cfc0f0e81b2b5b24cb0ae476dd12f4ea4eb81027cc739e00068c87345cd346f8bf281c175c2e966594162d9cafa7326640cd3144f571a8e93379b612d59e1e48e7d96a18270999dfa70229686e080edb8503675892966e4f071c65d3f8a6e0a2e5108cefb8de97e67468cad3b0f0aaa9994c9ee594c0cd2c025df3dc0687a7faf344bbb5976f0572a1a1090f5b8711220dd2a593a5db7d541c661f5099376cab5337dba835221d8b5982783fdfc2d146d87ae6298a4c4cae6ce9f5101bb7790d300a8c9c0359a71ddaf23e73354fbaf6083c42e64c8135ae7ee8c1baaf81fa9eba374fd98ee1dd3dde3757794ee0ed4fd63ba7744770fd6dd71ba3b54d70f8c6ee6879883b5f6ee832ba8f6509f00d9a30d002bec52e76ff5dd641996277505e7e977f1202706446d0e0c762337332ac3e2ec4c6b5c47afb43445cf39b87d07c23cf1838fe4a91de76bddb7d2132bcb3d8a29696f2aff546626742d15409e4d61166b018203a12f2b7a734d29ca4f8f41efda1b4b0dec6489da2d1a5fc0742b225378a1a0a56ee0304b973dc61a7963fd0416e73c67e7ec817fc38047bdca87326f7b1840c5b7b0b2e8087fc087678d2cddf775a35b476754a0fe6b647094d781ea963b54ad706839652ceca1b8c500f264c0a95e9381aa53ccc514d6f242b1820bbd43a555c5c44f51047c545bbcc719cf19a6cb6345095ec1b0cb3bc9e74c3fa80c4c9979c69a6a7909fef68c50fb373bcd84eb60589b6608d171cb07875b0088bc0332c0ce4a5be0cf167e1b9bb87652d426040205f477e477ce6d3eba3dc98ecdfd2512fb75001edf378fa548564eb30cffeba1d3332b5cdefc1e14a057facb88ea225cc220b1d1d668739ae0073a5249c5195226fafe814819d353771e3ba52c728cc2131cf783374fe50081d7aa3af945871c0e8af2bece46a67cc113506739a80b9bbc72005884f411a5ab539d99a5a9e48c94f64288e557300193c740f32d76184030fdc72f85babafa92f4f5ce6958618bd2dd37ac00b9deb53a0ff0d9aee2d41988d7d11b0858d886d642260e8e59048ecb795a036e29cfe1cf95a1a2e1feb2f4a6145b6f9462f5544956cf9462432f4d2a4d3a1e7cb4a5b5dd83dc61ba475a04333e4609cb534013e5e60eca7c8d181d7860db2ea2167a674456c2deea5dd33a5a64a3eb23d7d01f00955a858b046445b597fddaeac1d256a0c1bb608ec30cb454129ca8ceed64f00c600b9bd5a3f4a249be9f3bde2c3521fb9fdbd52307b1b904b0148585cd4e990947ff8ea1244a0bd9354eaa4da1ad60e84107154826eeeff379a896276156fb4d3f106be3bdc7d9d74f2eb17213191c45a9e52f5058aa434ff7e8759fedaa2253ede21762049025b3cf51711aa71f01afd5da12f24ef8d23aebb5949a2b912aba2ef162303ebabbe8b6082b0798ddaf3472d947769e8ce9b8a77705e19ae601edb8cf32ccc5a0c9fc8587039e62ba2db4be4f8c5ed8beee058158905890076ea728ea1dc5c1450532b1efedf27c7e0812f3008ff6a96879898f8214890476c99b8270faade149cf106dd8fae850fa664ea4a9fb86ac1b0c08ddf7d82cac07c1134924e4971cbcadae073814233d43c4301d642b15471ed3f7c53715e50e415ccad90e888e6f482caeacd31f800fcd6ca884cf3d1bb9e0f9d14a7ee1834f7814efeb8903196514a519cac9fdb292b06ae73f158ce29ce5743b28ab003459395dbbbb0d42eb3b0bc6c1bf154cbc58401a3e4ba0e2558efbe26b507c9642a4d9844bbbcc29717d5f60fe0942f476317808fbc8cfc2339fdd146882be626eae22231035f3418468f602888e90eb77771d94013c3080f4e416b5ceee251e34bf2ae376ce3bfe673d5cd4dec57aae8876300e8ef4ca40a5b2b0e328ff891686162bfaa58094637aec2c7980c6f75fb93a2fe396770ced38b0e130a2177b191f378cd6619f72006c7e94b11e763e0a71e89a0c81c366fc3febe4d5045ff636e039ef2bc2062d5c9a70bbac68cdb59df563d5330b1a87327b9808347238b94e24a97b10763414f972db46c811589c681b867ede49d525b294148505e55bbd1ef7c29fcc8dc9501bbef4694e527482a8fae5435768d8c72d37a68b8cac68ec591d69adcf3095902b311923301657d3c91a044bb824cedc04e8cc83bbec7c2268876801020091aaf6a841303f806d0fb2aacf867fb68396b5c281358a1b698d39c3af08fcf706fee3342118225d1c3b1fbc54038f4db28de63c301a5da5be40297c7b62c86c45f3162d7d7d7b0aa35cfdfa207bc861bacc05023109c1bcfb81913d5a0678be0fd83086ef3e254fdd9f04455bc4ec04338317f420bfa61f1d6f3b0db8254b8cc90560913ec4424a1837482679e9872b79b5be0d642bfe6a35f7cfb188e0f02e6e9b1f92fcd1132f9140409b08eaf2623997c93885cc9817ec71e6ae18ff12f634c9f34fe3853205f9c532a6ffa5cc5795de470eb42c1cf3f0315ab9c08d7adb00f8395126da449dc8276ee29ba889b626ca0e6f12724d9837dd93de3619b0f87e08ad6d591a27dca460e1106a703bd45496389ce08d6b38960ca5c5290d698e3196ecb81ff173a7f7654e847fd6281c3eb8e64faed51c894503a2c6f98d277bb2aee7a82e7bbe70254f615f315de77cc49d3b8d6d2575a9fb0b57e2a4d715be2bbf0f9ef9136a25041c70f6401336a3f9922b867456d1ba7581f7077fc6c95edcdcfcd1a9fbd3613d7e7093b3c3dc80538cbe1b87bf369d731736fe9112d517855438175471b931007c0a91924d23eb8e1dc5eac01706e453856e8afa95c2120a632bc66c15db0fe8a3e012a513326f4a90466fba738a051b3a52f5b70410517d80835e0c474db2c373eec20a5007a2d2acda17d02bd45c088e2f207504542c994e049aaaab20203f4f8dc81aa57175b08d5e308e2a52d0872087af27a281cedeaa93d0144d6fa7ed685baacb9588a333d09b6825bf3c57c91a8315de910f45695cfc1c72c9f96c251df401729cf7891613493fda96738de569395ab965a3b464123ca04f7d998c8fed682551a4d41c87bf19867b562b1f4d2dc7d10ad2873a0ab611cb6332b39ba542108ae775408984073a5c4f4522bcf1e7c7fea797845d9272dc14d1aab9506d0cfce4f86a07d8c206f40419421de2c2853891af1bb8ecb122ce59f9ff92dcac15225585f68986784c71d976afd4c916f7b241950ee640b8e2357f98ab5349551744b26657b77beadf2da723f6213bcfa41a200fcc1cc8e512fe55217b53098fe52628d7005228534a8357bfae3d2dbc907790f5ef2e7099213535c6206ac56aa0c7b4bcdafe5ff8f83da9a218069502b1d3e46237547d5c6d8d48ba801421843bda39c94a525070e82d4a295cb7189335ce87e96d244e98a22382e03c7371b5106f6c78de347b325e550ba7b771c0a654658dbe1d5f82b1ea35f2c2d8764c038dfa85a254b00f2bdd5b50c1ad4dd26f75e0cca3b94194258c028e47713afc4820b3bfceae4e27c3f2bc792c2d2aeaa300b02ade5cb8efb626d32c0b537833345892d39050932d381a15c4dd1bff4ad1daf6410f7e1a17d1c88d07666fbfb0320b732db8b8b3768582854aeb4b10c36fb330c26f3d755ff1d39c511c36dc0ee72a5ff0b37a07a63bc07cffe2c482596d8e75803f93a2784fda39583ef7c27320d0cee5d4279c3f78853d260ba1547772386084f3de1da6ac84b446ea16b2bce8dd7acb83d73e9e8a83eb664c85540fb4b431c7026303d6e52e0cb71099f9e3b071617896382468b8f7a5b25288857ff8417574e9746016f7f9ab42c26018996b51d0597924fa9271cdf508c672a611bc0f2be2e0cd0236789609b61e568eeba14d83968f1c2094d7f62687f8a7c3e0b3a766e291defc85560ce3077b9e9f7410213edd60d0020c61e3f21f17639781ccf5029a36e187998ac1d9eea9d9c07d8d7694ef2480d591fca6411342e032e4a3453613c81dc92ff9060f32b08ad4c56acbeb07ec8ea4f9bb88dd7933b5db10abe55290929afb207cd6370891fb5134d95f0768e3034bfc6b2dabfe93edb2a3e1d72d893f66f1ea85ec85a6eedefe05b907596fcfc6b9569ec2036deb914eade57d3c1e174d9d9257ab07534d1ef87bf481d529afb178e13435cc535a207019010adc12de18c56f20b28cf60c76c28fa4c0be0314b889a8f4560a4ab1e8e2a3c884115e734b636985dd1cd8adf2bfdc7eb36a5fc2122c17116e6be01add8c73a0703de4a600b2544a4485e309c7e4454c529db8e5120ac0c44a21df87e00bb7d93ad5136f16b52235191a022f3484c0320583bffb1ba9fba7ee0d65583dcef81422e2925991e03009822a710e09c302b7b0a5e4345042171cddab9b03d393e9c73a822d90105bc47d1e222c3b62e3db351a2b0937ee71790669d1d5b2bc8e6cc5a75d9c837b1701d7ee290f5bde0a05e3bdfcd6e752e6c285750497171fd8626863beccaaf2c0d8cd4e47fb3d7514f57dc9560302ba69bcd5713dd9d65ef4c7db9a78b1ba7a9951f3707ca3dbf6fa0bfa70ab6aa343e36e00e88ed03be0b6ddb923f8b0ffb295dd4ee7bf095ccbad3b586603a619518ae274196cea9cebc1e99068a7257da2795e508f43a3470c5730ef5c90b284853d04f430f56286c99916f63156399342178377c951bc05632ee82db1addd4524138c701356022e2f0486d2228d1c73dcafda812e4d19310453ffe3b09c34dfc1232733c3ecf1e0ba215be886ca47e950a679e1c01ca5e49afb7cd39c53fa5dcc1218dbeb15d3920fcb53762f4c836028d8e7763b96aaf02aeae919ab899514534db2f1b6062622b29b6a6707d59625faf19610a1dcd87bae35c046fad13e4d42903d5dec99ed57f946fb62da95aad530cc12c2f35872eec871a0968147ce46a7180e606e0a247fd5f091459ced8cdc7faf4c1bc8c95a1010ed8e101bd278a19a7d4eaab62e14c3f38a0b41e6c59c45b63f060d4e7e50a09cb3a12f28697c7b158030308c78b5760946b3e070410ca6e0783467efc72a80d8cb1aeeb302069a534d3d933e469dfc700ee0305e890c7615482c83f28b607631a425acff57ea166b8868c61737c9a6ffa5aef11e288940c6166399ca3defcb6ccd00504ef7272b28d36526259e399107941992b4cf391a7820485a7730479c90c08e88a8dc7f24624aaee90936f2c5585cfe60db02a2cdbb0905ab29696db332ec33daf2217ecf21cf1d574a264c5e9498dcd83b4c5147878d4bb263de9245018abbce4dbb8af8891b686b0ebe7feccf4be1a1a6dd8fc72d524f024429bd153d576156f3e153ba3b06486fdc9daf75dabf16024272bee208f3dfc4f81bcb47c5adc3abadb99064ba75562a9aea7dab4930dccbe5443c921b91a31fed03fbc1f9ef19ae58debb05b543e4eb5e708da5ef41f1fa38d30454c0c06ad2bfb1d4cf0ceb06315fde3cb35b8cc85ebc0372a29e72ebd8780370c4b01011b087aee1b6532a5a5fc75e6a976b7325231c8b560435b65877ebab380c38c1e5f199bd63a42704b7df21d5e3ed326b09f633691c369430b502a94884ed39933a8a449b41350157fd90f451cacaefea8ecd5281475812fb38da9dbf9580d87260efbf958f98b4b289955f407261667528072b41b144b4ee2c4316c8d0607d1a31a7d799847611e86a44426226399909b20d62bbdbbbbc9b7314de02c9a744dd0b25cb05731052e4e29b0882fb7c93fa50ab889ef182baf4cf94d5473e4764263effd1edec962df95383daa4b3bbb41cfb2445ac583b9e5d625f9b8867a8dbdba2744e22557040792e1ca5ef2d113c06b5800fb67f923646e2ca903801b9c88ae9bbb1f2d9d3b29568b4fe363f41a45fd0dcd0a36b9c3704b8878b8cfba3847c2306a1b1c013f070560ab795d99ae954044ef70198a97e7357a7d4048527df626201da88e1ac0e81c423004dd3adf3ec61fdb0f4e2a73c64f264cd89564031d4b20dad8fb0e727299c624933376f24ad61ca56eeb0f9cc9c31b0217d215a961e8a75b946ec578a20bd39c83a502f52d4a0320207e0e531abc9e92875cd000fa59861bb7a5fb413950bd25fc84d7972ef5db0ac3aa2de06c695ff821fd248278028a01e67287bb12aaab92fb4618578c0ad82798fb5112314befacce39e8238dcf175585d397fb1695328b040f1370651d2745837d6f508055472f2113bb9a10e2b89c3dd304bc8b640d52e39d6479728d30d9cacf7b93702b98a204701931804f5a98a881eeb62a10a34f0d1095a882de615c5de8641d5b28260506b0f194da43ff7b87c8a0a0a553ca11838d0f1bc402235313a1e9a16da318d838668d755b7c5f4330ae7b317d97d363ec13634a20bafc83c1e2d3283dbbce900ad123198ab0fd3053d29a945b29997dfb3c3b6af6e00889f52d7348f9b728947c7356dcef672c132a0c14f9256a5402857758aefb69b92f4962ceb6d1e9e52a0ec3cc7af99be53ff653643409b6878a81dc26418e6f42cfc25f50e4cab67bfd4d021991d96723ce9f2ffd90050b3916e67eb1c9b72e76c193f995ce646a25a991152e5519cf1af416ca6a555e4850ae6bda53749c4f1938072ad1002a7d787f740d4eb2697ab6522d8475a64410d01a6a131c54654aa600ad7d45f1c97cb666f0e4f1db17d98629a98d086f56a3bb37141321f9f33e7680b05192a66456801ceeec6f6006f2e53446b3048cc238e4d6c544ebcaa85e06aa19c53b88c48741ce123b1b70ddc1f7b094613f970eaf8760ee7cd646ab66e986eb0809c426ca4b7ad9417be80d50d5bc7ed92ee05282b394bca419d824970746495e5396356e45f2572f657e6e6d9605b6e1cd900f42e361b9382ed91d6f8bddcc2de09c6845cbfc3ce1538baa9bb8058a57e037a90c3bda21d3a30cbc0eb29205c79e457645b06027bf0de5444c6f3c25f89f675d3d21b4b084a9b42621014a3bca3330fedf1294852485fbb2b71c002a460ddbaf3eff5913b822334ceb5a802a418db651722a9c3fbc0a1ba60b378b06562d213e4fcd7da3cde84f9f8a2dfb2045d1e369b711346de889b835c2aef78c8bbc3366bba5bb171c7c3e3d981e1142596f620a81d838cb0c5a434b2524b8ca84252d8b836150e716a73844d221c5b743fd8200ec366c82f60c9cdc254e6fdadab10f0db5c383b6b930a5dc782984b0213859bc8b6464fdfda1da8ddb40cace6da56bcc831d692e9324288c2099e4765f64ab1e91d4d50b3d918f4ab8bfa86aa2d480f5252e8591fb228ee04cfb3590fa7edebb383f3c95ea1cb7fea3fe3b9530ab62ead8d006fd73635aac0e84304aaeb90f0fb98c5730e6dab384e7176d8ad63f3576b5b144b635bbdb38eaf1338d49d0ad662bccf60b121baf1a92d7fa99193493655ecfd460aadf1c79eb91f9ed90573b7b5c81243ae3ef632d546b94d0f7e1d3046764e4ef5541cc9c6f0af03ab609405da324c0f71ecbadc33fa900fad856d6b0acb1f390421874256d6c605fb09b6cfcc7eeca4cbe6fdabc1a6ff28c757de4065198a8bc0ba46beab56034b89b0f46a39cfded9e0d8b240b708bbf0fc088a1f455e90b39e48a003b644efd364e44fbebddec90ca9d32170c0495d4163f7e92376d03ef2f99c84744fbcfb4ba97339b84734c0979dd8f149515fa285cb08a05eab211d14e031039376153df51dafbd4d992a8f8ef59373b85b1591009cae13dfdf0a9b1972ff65c523281ba363f7c7f6ed750b26ad60337dfa1507781186764a81f2f490485e6aa4c10387db145eb86944aabc59d077d5ead882ccbd1842953c7c49244cdafcfd67ccb0eadfd54c5a1d74d98ce545bb8a979762f2aca46f113112cb35c461d868e33b8be86458650b05c8c8223c5004d14e5c5f4290d5c4263d368101db40e2789e05858edb8bf7f9e508f58a965ce59892c0a040ebe0c050ea30bf08e2e78a0014b36441fed7fd647723079a45d15b1d5b53fa1b893a163c820ad5dc5baed8bb969d95b83a3f8c5f9eac0733e674e1480f952c8dfe6d078533dcffc65d16b353cd36f61bd3ce981595716d32c967770ca0201fd720636c45b519334b94809a37d859e5c12a74c28f1ebdc793d1c386c3ff29eca6039511863bae0aa23ef8dfcc89ca08b451312277185d0714e46d0a37a65ecafe6337a7b3ec2dc43dd911dc6cf30cda88d7455c6504bd95b4b4ad3dbeb18c40c8ba608ed86ed4c22d26813952182d84e286d2b15bfb1ba8d1234c449e0272f6a28eaab95d68cd43964955436b3b53cb9569cb3cec39a5ccfdc98b5d27ee16d12e4b9b3a061c3385161459a8d926719175bd1f5cac18f3e2e508c1e9c7e8260ac6d4038df595ec0c82e8e17ce80f8c69797224179784d0a2ee882f5e24e27a425f8a57711ef04aba3ca7464077841ffa5f59f9dbac034dd555375c817df2a0733de6990f82a8b7fbbb26666c2a3977f9164166161c39b3587f802dd3aef5749f310f72f9d9ec654567f1449a0d3c800a5935934d53476b174eb85072baf7765026068fa7ddf6dbf4360ceac005f383412843a4b44c9396c845b9f89ca0cc4753021f0039f10a4b46fe9d98793e0980e9ac00a54e8525dce0d65ca8844778bd6a55c51f0fb79ee3f30b72a47cc5bcb34720e595ffef89c2da325cc941e0cf08923850897b8c25de321dceb4b002e5e2b9e3c192a1e054cbd2b2fbefcef7691d14aabc20a0f0f5159e7314e89d65e8a5816e25b0b08b44bfef5472999aa6a2e72c65f4276084a5dba2830cbd2d40d81db1627bd44a6836dc95d270030e9a0e8ab4fce0cec617c429156346eeb9b8a82551dd21d89b427c017b9c8f66dfe2d4f5f58fe34ed56d701cbbdd80e18b88d1ce15a3df8fea46a24d46e0a97e3490ea2577fe591c49613c9f223c162a973dce06d14e0947427d986595f0f2f21c07520d5f6f87bdf199b7a1ca85215e4cc343a15f4886e9647a6fb655af52152e35d2f1ae9411a00e5f23561b1662592b1fd829576bf9851ece0004543783df65983b07b39e4fa52a8d601f76041e4cbc8f6ab2354a587038a2da372e934d07ead8751478ccd52625034a305ed3efe01658d265d944a37f40bd42f16a413ebeb66c56a20961c42ce6eae2028201d9f584b25b762a805b0f59fe24a4b6dc9ad14a24de3b71447160c8d312ea0106b9e067553d642c3c37f5f3a232adc97f58571803d98e64a7c7398f891fd008259c6e8d758f98110b0c21f5473593e1d93b217585475b157d78a4dacbb3c0473d97b352e706007be131fa10a265fd710afa9cb6852239e28da841c2a796e98d4122044ae7cb3386a8d621cfdf25fcbbd595dbba155c62c8e42470a39effcfe0ccb80f92306e0b73811382c1ae0cc9e4b8f0837a68743c745224b905a2a8d314bc35893d111a8a93b899667e4832cb6ec22b003450eda9250a5d8fd5cb11c790d665fcf435d11f5d5373c74c4b51fc444a830b50480bd31c247d3e6ddc92b4619af8d90c490d39b724699294c4b699fbb4aaea0ba372d3cf088fda44c4b3522cc22fb4472605df5454a646de6f0ad638f40553dc43800d4b062f917286f797e072b45c0932f2d728f5b47125304b0a61ac55bbaba7a82f377031be0020ec25efa000ef5a560efb5b65578cc5e6aed3ee70cf26f9c66efda0ea39973c8f8812b471593e553bfbdd049acd768afef782432f0b7d97a4772243fcd6166fd9dec1436ca9461782322fb25675af7f0cea50e48444a86718442970ffdeabdf0ce6fe006c10caeef185e49d07419a407a9fcd652f1fb0e3120058dab7eada9e36919054619a04e6116a6c1ccc9c8447aebf2d087723ec09cc5c4228a5841136bc96f1edbc916f411b00d0f45d54f79020a1a009fe35c7c3102a4bfe88e9c4f60d9b048c925bfa132d9152af2d109a4ec5c95783320dd1e1b8692b5636bf16cd9987eb85df2fe474cf35c08d3eb0791774d669df96a1451d50c932acd6775f84b9d16de3c6e9ff425e950fd1838318373d0ab61c4690f8bc7ad944da6aa507f03e9ebc576873f0d5f8f03096f130ff43a7a92b4156e061839a91fdbe658630ec117e06e3eaf5d4cc4d259f91739f7195ae25c0902e35e9c5342d8248bedfa3e12c29ff8956658a8a814766d37eb5a2aa0088bd34cd2a447e1b542889308342516463f1967794d2984068c6711c7cbc79433a6e9762fba32afa5843a7b7baacfd4d0e07eff367575cfa0c8f8b562d0eab5cc9a005755803fd05bb281a02a1efce4b4ed0c497acabc2855c8a16c94629a00611f9cc590fbcd7daae1a2683402dab86e8e0d1fae36dcbf83894cebf48a5c6a18bf5352bddc8c76a1e765e1676a4fc660f1efc7d23a83bcde49493f7ab9fb567c74c8c2a772ae99a34285567e2c45766d1cbbd5027b8cee4e3c172d8bd9aa9b18fa448f4364d860bffdfd32f94714818346047438d9eb8fcc8d273825a7e4512af353a5af6fcdb598233fc0181e2c74d6613f2d5390043fe0f1fdf25b970fda5a2fbf81643fd9a22334c250b8015ef6fde37e38646ce143c86783c7394c81d1d5ff0fdf235e45e9ef07a1237746dbfa921722c258e6cba7b3778600c0a706c65cff76348821315d00d3b23a7be7ca7d0b6dfa572b6c91d4b1573e16a8b1ea65ab36daedad37b436fa4cab00226443b0f27df2ba113509befe05b9508200aa70856d3e43638609ed86c6ef4516080e579b1400a5b6a1a81be99741a2bd4106178ecf243239ee203e63c832c2049c65031c8c95825a209249028c993690951f10565c96b41e05881310d7ebae8b1b18919fd8734bd5d1d57834af1dbc7d98129cf7ed181944b640b8b53ee7acc866997d25a7c32ce1e82cf24de0e09c484a3875bf51991ee35ffe5132a174b9cf2d8213cff78a3ff6a8b9053f625e5e2b52c3c4cb99e5b846a2169aa93358bc6cf1b17373fad6b7a792bb64f9164ff6b1efb5c87e5b468e25d556b03c063cee66dc4e778106328a9ce60ff688ef51d120e5e1bf34843be463316311149c88ec3e6736935320665ee9cce1212c10c95a051a19b4d41dea3ade20a6d6fca9d893bb914342213ff77589fb196733d1d9145c2358e570df1e0457e156df36690d165c81dfce909db01dc1824a59eb758ef6248eb0f520e24a55a73c6707d576b2edc171b2b441c6fbb490ad6c4e175886945c4658dc85f301d73a141ee50fb13488e2a1c7054b7ce32762194a86c0240e6d3cf925f5e08e9cd245a2e68a410eb8b0d98841fc77fa9942cd0437458e4c31b9f66967e8de858412b215acba15b5a0494d45c94c461086faff92178b7263448cb8b6ae8a75109060cf6af94804add2e5ee2c709c40cce0eff8cb4c77c83ac6461622154b8f60587c42f235d1bad81702f6afd976f6c1a1583f3a08e40a094f3a3564eae1d4b600e324bef11c87bf517de189c033354049402512db625583a7ffbe30e44feb479a2425762ab540915e4250d3f4dac95d8092fae1a6eee48b95db07d72464ba5140fee6297788818671c2bd2c3700309ceca63f32f009899624549161ad6a207dc5eb92383b4976f207102f314c63dad2547a6632243c2709b243d1c9592f49d821380a81cb1aac57e91512f62762884d5262d68eb2e450ae242301ab47320b03742418b95258389f17b3607fa52a95ad49c121bfcbab8fb241aebe501c03aa423c96ccf6a7ac641921d0672d11c85bd890f430cfffdcedf661b5a102b3b9c0f852adf6769762830e27134af3afc2af680eb37b62d7d3b7525e9c2afbf4e966b41927a3f12f25e26ac9b41d4f9d5ea225ca008721f330d31d6cfde3cf148768dd801ff16b7ff7ecde2d85aa89c5beccde46e128d62052f6daffc0e236b578052cd3ff42b4dae11b33ea046b180db6dd8d51dadcbfd48cd0b0f16aeec13897681737f8492284c7b96aad41a6f7ca4405d51b6e8f3e320e06b9780065ed34df9e9b6d124d6afcd1cc69ba490d350f5c452682bd435c85e770662519862e95fb113f75903dedf38559b3529a12137bd54e6629d37a8b395d9f772f48191379bfdf9ab93bbd12b322db0d5ac96c3e63767d53c158c0027e376ec0f520fbefe74b56582a069fb7554493f54759921b478218d6bca515f1db09d4698ce4fbad9418e323ce60dcb2bc7639d9b384eff853b2d5e4d2a588c64d5081716b2652ffc66545d697bda03fa066f89cb4bc6b6364580c3ec87ac2913c7a89944efcb4accabc0fc99b237d4d8df1326046ba315f14db66e56ef32ff351ba047a3144bbe30a527dff1d7519c20d643f756a0ac0efdb20d9483e01110cb8751c404ecc58d84b960f5a3af08702d1098a7b20dfd9b10eb4706d54edfe3373fe50e4ac35458045a8252daa10a2378465529043454acd603844e9ef56e4682aeec30575c2cab7e24711b7255b6e9b9400e5b0728299cbc48d8e32a7fa9cb933547c44a89a069c45366bed67ecdf19ddf5292a65214f5321c8c2556e7d2fc56b5a9a2c083d25ffc2ccbf4b90b2b8b958fdf403b25d30bf2232a301f24a6a426688412ab6eca8607aae380b170c0864ddbb678cf8b729f78e0ab2571a5bc0bc8c776f42245cd7516a85ddd514d2dfe68d50493fe19536ee685f64a4b257e563fe35cc78598d9b644f852223065f3144e56e08a2f7947c4fe50577e74f8e25ab7398e76e36f51d304cb45ca12f1dcfc2d6376b8e2e5ef2757e8e27d939e78f097fc0a324bf771f78ee2f5f75dc4984cb3a701370ce6cb62a0dd629e21a40d898f37d12c0a530b48ad028bf70223ee3fe5d9793df03d185a928dbbacbb023bbadc755719e95c5bfdb1e1899703dc76d485b9f03cb4ec38bfbcb723e62252b6a89aa5ce0ca4d9aafdad2a2156ff615aae4100ce766df9ecd7b13a356a3d57298cb07f78d99a185b352ef6c3f9ef63a13ec373324d71246afe6568d14dbe586c32964399bb4530c6396670fb332e33215e62ca238b47ea1f83ad1ebffcccec20aee1345e99f4f7ea9fdb3250518d1985ebcf607d175c7c9ee559cff8b43c173ce371bc572bbda7821755245b1266b2dc12809f8bea56ea63eedcc44918d55910d7b32d47c36a3ea7235ab7043ded74b3fa6039484654b32c9f009be3876c6cd1c6ae56665ddb48b3795845807ed0ad067d789cb56ffb24517b935adb0592d9366643b24bc5467e1f01b5fcbf5aa078c33ce4207feecfd59934582c5e647d7040f9eaef64aeebef85aaf5fe67c1525f522dad93c4cd46db1e8f9fc62d46ae7a25e60ad82f9528d7d2b21058a1881f56653686a8d7cd7e1ed0cea429f834c363ae7f680f4ffeef0489aae5fedd4f467b12ee025261268a4475d59a9732862ec142a3a70bf1cfdf960787bb789a4e927078c8baae66170aeddd0079894c00fd7d753b81895a28dd9af6eb0e3f38dfcc1d495e3f7bb5a524b45eba374e270709afaea88debb8fd0ba0aebde4152aa6ae9915374fe6fc8a8c4225b3c5ce4adf8f5216d8e73713b797a9eeb63d874a0c1b497a507014e41ac1727cd4a38d7ace8e4a9860b8217556e5c130ca434fa3fe5fe3987cdf8fadd33809f7bc34a20285fba7f982918ef8c2b7f5a1fad3906c2948fb34e3d49d8728bdcfc27a480dcb7c8c5c96f4b43df218477ba2255c018f361d5828674983f331ded3023cd8b08820b238793960c3f2a5948fceb08622149c12ff16bf40aeeb16b335e67ed455a65405fe227ba3dd5a9068c16af59eeaba977839ef9bcd3351230b37726aa21d3cf1345083962916db042a47d2f731ad878d5420faf1b42d2a3ed9c353a658e8eaf493d9669e3445c3de15346e6e1942706045f0c8cf7ee1211a5a571eb21146adf57d79d1fbc99ebf3ec815918a0c47c22c7152b3f2ad3696acf598f9242b489b7315195cbd2c577b547fa00f3478cf20e681c95b160c363289b0208ab5fd1080a5c3ab84416b0c7ae7b7f2d915a7377040f68e8b9aadb6102319e85802a59ba428fce84306adf4e746b6e3e35d344a60c3b55a72349ec63efa7803a96ab01b3bf1b60a4b5c516f946c7a67ab05e706416e83eccd24b13347dfb39dc81380cd1245a8f1566e9bc9176da51a41abfb68bd51a59a57431070dfe5acd10346dc371ad4e43af29f2abdf2469404571721c9400ca3edaa8c110e027ae049d9cf7e2f9e31632be637b804e6dc0902d93a6cc3c055dc0481f8a6065798a2cc99948de2dbc2819e80be7de19f1a0d8fbbbed0c73c889af4529733ee45d5700ed6dd5204ae0014ee24ad4c1c06101495f5779747f3ed6f80f094a37769d8a553c2beae67358d02bbba7cadac154b0f067ef96e115de8b6f820d0a44a44dc9448c98799e6f4b1bbe3c680f9f9ef5ba50e3f1495afcc221c68d068487b5c414acaaa031256243beaf4e95f0f0e0c60d5b315b84a1a297554e2c780452a02574bb267122baea1767e8c2dd64765d6cc4a728a4b2c2c1434c5fe84099da2b77c23346642285ed801352ca03c90e277540949faf08cfd6ad6424477f2ad80ff1c2aec5308a6de09b98e81f791c7f33e0f91c2ab0e8c72328f52595e95224f72d2af7f3a90af45965e6ecb88abc1ef84986b0ed9486088e8f395ee940f53e5a11e3a5641c8140845a956a6e4076907f8558fb862c1b8ddecee1d8a7835788d9d8244283b205a6d393c9087e1b748d1dc2dc8377a2b93523a86421b3ac8cb491b6e6f26cd6ddd97d953b23f19deb6370827a7feebf9a7432d4a8ec79ba43158591dbbee22788ab949c4ed903aef3746935bcaa7e75c6be36b1494d605b3316a3ca67b9734fc07890c98cf18c588bc03bc80d7bdc0d1aa6f5797ad0e370b100b74ef5b6af33c99d0e6fc0b74e23b103e23abcded3256127ebd72db6d3925ea80db666a82a634551297b99dbcd46e081b932e93f13da0b99b42446572fbbecac518b2e446b4fc0c8e5c2b0afc799d1a581e901afad49471809ce2efa2d7eddc8d04a06bb0f79108d878ac17e2dbc40a3c6ae82a0c800aab4df0208e74950e063f93562dc14ec69b1c10c41c886d0fdac94155dc1eb4ea1a0b55ea19e40df68e995aa9436768825775692a13eec3097c0a8094f87559bdf5ac4a89a6b746e49c44853be8aea727edd50990098506beda88b9c07657e21373062084565b7e8bbc4d14f35b04b6806e0b5ab9e5ac910033a53c0c24c4c3cf2fc18cde8940196db73f30c4f6d24550dabbef542df272261a1681d37c4d1f32a5d3f33f9c361049d1a5f5830bdaeab08a684e0fad34c9f7809b2a185f312e0d3ce5d564bfe32c49c38cadbd33d2eb2cde19e1ab1dfeef49852f317fc201347847cf6f08402100abcc3fa584988513aa20354d2e84669785e684eb23d494abd1a327b3366642e38950a4cd3bddd876f3b6d79a6996fdaa9c05f60aff15a550b918984696ac48406245899948190489d246947ef6e9e404f50245598c320dbbf1076c9db26d037b19245e4f69573247699bf413e0d018c0a7110522136ee8c09835d7cd32127311d3b4f882dbc4cac98b181c4b50acac38c66eb276c0b7e89b2763307fb0c15cea2877d1acc97c0bff7da8ace8ced01e8f41c61d70668f6fdbccea0c496c2369a9986e15da8208bd65fa05f24762871624562f8f2ee2704f0c00d2830c5b4741ab25c95524b9d853ace967fd0594a7a6fab3104eb3d5411e5f792cd05200f63421fb541914fa6d62a0b31965ba7086e69236298a6b7e5c79b5d28c62ca3dcea116b4fc09f7198dae19121708a063594c52890eb41c218b0fd718cac571f3a1ba7167bd3f534515de64942d8066dccd22ee80b4e51681dd43a7124942fb0de4acb25c5ba6cc39200baae5c2ce2a373b2d99ae303c9f07d27160161e61cce9595af00e18a335a7bb77cefa108a3d27a4a33583d9cae022c2e7486f64bc8916cda2e34d3d8c8db1dd42baea8d52f7cd9e246c6a380ef2e01c53f3a8512a2a27f11bd4061110d9f720c57b1a07db7020a315667c71a8100109514e1cc10271343bfac80eb0c3fa48d145c3cdc33793d26a3bda4eb145e151f50ec4b83ee2f24051b8a1af3b1cb011db72011b457ae8294fe5624da388d38d969755a005eb0610c8d8aafaf79e8c2a62fd1859a5191108ea3db8f93b32c43aa9c14aaa65260f99f05348f80d8f1c411e729b00c863f69f1538c08d54bd7c766aef34be2aea29d72cfbb4cfdee30343dfd5bbc72e696895efd08b0f4addafbf20f9724e687a64702695b70bbee957aadd047db1e5dd3a183010205b7e802716d3aafa70ae81cb5fc8c115e31d88e1378d2e371ad93ef53342ca11b1b3216fe204eb7a6c86196cf3a3cd59bdd2ae95867c1dfa13b8870c11dc6671edd2751edb470172a349b2ac9392af11cae388cf2c29a6546042ff4b2e9099dcd8b2defbbdae19cacf4edfac2be5319ff2edf2be3ac1f61fb00fac0c4f2be2cc9d1cb624444d647e983ebf36593b0236dcac5f5696e78d8e8d96cc800a28911def63eb70a966cf6970a23782e88db5c9d876df192115866e0f68f6da2bc076ce74e3d1510d37c747be56ee8c38d5a3fe87c765047ece93a461c15c4653eee05be89dc1e0996778d80c0a3a9bfe39da18ac7e928adc405181536e5b07337d63fba1878595e43b671684184c31c102f28bd29b3a6d4d135cd05303072122ff80be11b0005fee92d358871d6f84812a58b75fa09ff372319f9f66e80c60e21622afb35157569f62a0649f191583f37cafc5c976488b77fdc09fe14135514357e87938eb3957dba6e883710c2fbdd8845ef48fd2e2fcaa375140a4f590467da42ce85a3305e42651df3ee456228d03398d7c22bb15f61363be5957d0a989bc8de48a361ef0783274c53c03bf360d548da2d09506e56cda22b8257559764a9fe260c1bfda0deb6079a83c2136b7d0958557060c4b5d98c2edb59f55e68a694a5801b8efde04edd82a3d63a18cad382f003f2213691b80a78aea4fa71e6e02890688557d068532ebc13aca70cab9a5fead7f88366f74058b0c4bcc39d5605eaaefa70b2d80b2a12c63b66d2c2856a47246c3b6f1238db9bb2323e12c09d5f5fc2d0b1c8c4908dd07fe4dd05ed72e868e20f679281289149ee3827698356a5d7b8a4adb099fa8faf52c6d7110aa9274c54946f26bd6f50839a45c37b4376341e654f5b272f2dc94495149f42257698c1b52326964170163aa3af8a389729cd1109b12dca1434393c15baa9523d4e2abf5def1311e3a8cf82fbfb4123968605ea660e0c0c475e7fe2182f9c46ecc3275014ac509e1c83fc456f04ee201f751c4a8af01ac444466c6a8040bcadbe869eba9c7c86f500a2bd83e0141a887f8643071529dd0aeeb90aa9d207e4409127f3a345a5d1c252cac0db9691d511a1199ac6ef49cfaeeec678fc190482b66b3d126321b6f72041955707ce5862e953b75846210a54631152852c17529d106855ad3bc3a74997a3b57b38067b488a86f6a76d0bba6516d4630c13aa377ec35ea882dee5f90e452a9d50b5153f8e421cf24b6ec98c717e52c388dbc0946f35771bc2dc3252cd8576da35313ab4be64e66c4aa4dececf1ebc676f031f803299eb441a613596b313efbac2038d8378d8252866acfaa147a05bdce990764041207ae5011b42efb75b3ec673f6f0beb2b2740b0a703adb99f81748091a6a28f1dfdec2ccdd1beb3e483ecd054ec38fc1adaaf164c159860e5bcc7593fe9b7ab713255dfa2800879c2d8e5056619cc6e09eda7ac876ff3aca12f51964eeb85ddd54b9f8b0008a61462c040d7bb475e89ea0ee5bb3279cd296db65aeb1807bb800d01626745a0025b8f5d3dd680a16c78a532df66fdc03edd81d5a0213935e72541422120f8e483de33b16069ec3ecaa3ce45f39e01f29ea76ae2f3315a47efbcced01c56792b0b2fd85b9411bb2a07d8fcabd12112ddf0c3acc1595333474062d477640deab99e1b5d8ce325a1a22851c8569b78cae168767a796fe326b65cbb774dc160c1d127cd387d293fab5c439fab83f6960ea1d203fa04021ccf424f378c6cca6d50297f28ae939c0a67785f0efe73e0334e16bb061a1ef6d4004859f14353996c0d146d7434603a693981a458d58178d442f064f4643f76f69604b37fba20b91fa2142e8591f9d74752bd8d05e74b0f574ce7a0055f085d43728eabb857522f351c7dcca023aa1f06497a58a1ef01b6529fadeec7b623ab398f1ea48e4e98527d7170bc8b1b46066353354d211f7ccdc116c2bdf38db64a83d76c46a42374353ddc7870d4da4a91007cc2182e5b384e7c38746bc02dbbd87f197c97af600c60edeab6e4acacd020edcfb561ef1030c046b1db461f6eb3444521b74a71b34a3fcd47e6385d70f1304eb6dbd30b5407ef664a9d893a585e5d18fdf1b6d525540918bd9f9c5860801fcfb4054c756f6a56963131445fa02284fd2146677f170f8468785e9fa878a01af67af979744ea656ed4244884a8fa849c289c48e79ae416630df84648c011c020bf32896f11298a5e3d0d4b37513d62d8db7aa1cb8aea9ea0e9c024ec1de7fd439c9a48a94613bc53fdf839be1560f3287c9f07cdbbf5aa26006f15fdbe2c4e49046e7e950da005859729bc5b7a996122071d28c3cb2f3719f900e64c642f6ea3ceb7fd924364b324655c8955dd1149e257b50840ac03c9568ffa9f930c9af38533f97d3ecb005fe30831b23b3f88b6344dead84c20643b79ac7583e1ad2fb60a18023b206e6af2b2207d319b7889c76126cd99d86bfd44a7678d117b2a5c491682902a56df1919d469ee0cc218ce51af123acd1626850ab80257f14096114e33218166eb81d0101f8a772f78def1f8f7275f9a5f6b0b0750f83b37b517b863040f34f8c7fd84f117c10d6961c92f92db7726621d3b93e4a4187e73dbc912464364eaec26147c6eb3233abd875fa4c081c2c0a6f7794b592e14c37b02851463880124276d27bef5924949dc11112f70853b8a808ac5cf22cf41082a1778801a88b1bf13377b1769556d98f737599d0d0b46a15ae0da285385bfa3879b502abd6280769884764a8a5261364af5f138755221136f0e43752a13ed98b292344e2de6e47c2d8d023c510364d821aa37c7309d0c331a72028ee9aa87a1b83486f815a7115356a4b2a8467e2b1785e9923f2d4cb9776b72d37100a1de7b5e4f90aa666fd2f2859a9edb90e74ecc183de06725f2317dc1f8270301b1b5433c2f87b13c2e919c3ddca67e9d8da589aad0e2c54fd7418bb861e942309c120a6d5b3edc6d9a7991836a6700e33f5717852641416c505ca530630931c0a3fe2ea818b8221544ec6cd8415c7b3a12014b1910cdfc5eb0ba7ad2868c58f44940363cacdf77d09c87b21e8a2a896a12a2ba231109cd0e3752393b2f0392a5a07d67cf8a0ee7a1315179a0afacea1eba7172a226ec56ae16acfa2a174d354eb31daa94ec2262f7886e90cf050a4ef3047757f9e97698559de82e931da19b50e845ce6b2875838af022b9539d932847f2b01d6bf471abb3d34fad29313959386786c7178907547e11a01d9cdb1e4d0316a8e013ec15d755f9ee1e9765548bddd1f58574c43b7379f0364160d34c769211afa2ed791a8d38bfbeab09c2dab27b53173ba47031b1ef4c1eadc107892aeb1a9ae70854c92ca0344769691e76d6b950d201cc133b301243a520bc5f64f6655b6259087e20a1227a1e5f4d5a4201e5d21af1b470b5ee028332e0cbf600780bb0c2a1c13fe45227676248d11c9c5a1f734473588e1499015da43592eafd885bdc03fabbfc6a9f54cbaf830cf39fb93f3004b215aca662d302dd27b08a3fe1a47ba7dc888dfbc86578226a497c0a0e408193c48e9cba590451396dfb616731713e819c89736ce8c46db314ab0bc71ab3ae67b70b1f7aaa5fa7fa654eff37559a58f7f8a04644c695f1883b8816a7bee00dd924657cb06fbfd67310d9ea00c1b07d7718019351ae6260288ae0f43970aba75b50a382117033abfe858e73b6bf2c6485f64adf481562b4c821eeed38c9926215ff313ae188bd2961410b30d51df1a7db8d3885c36f9bf6e61d1fb820e2d89891b8b264564d0c3e9ae99a4345648fa3c394683f7dd2cfd15cdccb16c6468650c359447c54cc62b3bdf33d1a2cc2a9885029dce6c85c068aba802c7d6d0a170ac2159b4fb5f4c4c18e44e53536245f730a68860b07b9fd8ff2580dfd8a4a2f38c12a2cee2490ee25364ec5d547d9ddb317237e010eccc6e2e92e5076339e72500167997f5f887a6dd2723116ec22a6fd460a840d208eb1ca2244d1b9bda150767747047e5125316db48f9da7e22e9be60de4cdad320200ba3392aefe941c4b8e03b03e3bd13db259f6401c81515e8d647aa806459f829d207559d5bc195540d1226c3f524df8d04fa096cd197b6c0641105767003a2edba08a8977a12d89255cb419764f2feaa6f33cf5f4159611203cfc02174bf5c76cc84d8d08056ca14961f177ae7eb12410da00d1d3d3ff51e3c20aff63dc928d00066cc898860b370851a8e12dd2380f73fad3c48cfa128d022dff28e6491287f65e15d6c2ef51a9ab0551e9c45c8a784dd07ba272a1cc73bff447f6c20e1df394e3e7d9f681b5190043799a40f5de1d89702e79a0a0a7321294f757a00c815f824bf2bddf921c9b7c994b7ac6026bd0c543cd1b29495cb8af765ccfc44435961fb44d001fc1258d0e0c84ea82341483dcdb0d579d860557f9595aa3f66b7f3e969cc7bd0d673c007f88a8ff26526d5481173c6f977ff3222604d8a14bd09fcb890c096171755e8fd15be2734753f94f9db86f85626fa2a291e7c93b216aa0d97f56f2b71b2e79e8e6ae21060edecc738916783a27f8b34ca8529a2394368be068e8bee150d064b1e4346e056f9af7e13cc87684f42dfce54de69218fbe966fad7f4c2cf2652bbc1f354a6eff05a5f7cb3b212420b7eb77c9fd47d819c477489a8cb8545d96b4a6a9c2022831eb33dea9b448bef42ed634281c65744c56942f7d23e2eb30ef406fe7422393f7b98343ce773e4e0a5a967b03b6cc7e43e26ec7ae11eca5a08ebaf0c606fc3c0fe8d78efa0f3147090afed5676ceed3f6daa24c13b40baba2149579a930b0417056ac33083b9d6968a434a8bf98dd5868af27fbda16f4bf80b58e3d1c95a1d0309eb9a8b7340a68ee85edc2f1c1842c0482531aaefeeac1607a877ff5c37f4f4d496d8108db5508a8a95423d9908756c370399614cc7bbce0bc0f7ee2562a61354817dac32738bc62da6b5bd627a26b1e83c90162ac9a54fd3d22c4f856e0cfc5d4a5250c3430c9b772244d79f422e70ecb3fdd82be359924cce8e5c25c757e78fee4046a5c3a4b89a0f6e218016b5fd806162ca348087da42733579fc47afbb8d713510ee69b7ee95d19ece715a92196d85358129aef8360eaa8c513bac5a4705d591ffa2cf76ae34cda0d796eb176ac1fc4788aa9e412263d38b35ef1e74b574b8967273137160b086c69b9f10cb872d3010738152e641a7b272f5574d3a47dc28d33eab712310c9adc3ac3044bd83dc158ff640ebe9b6576466217bf8faca404e58f1641e9285eb5a6428ac6dd42f6a51abc2bdf19bc5a6b136554292db79b7e17fb270f88649be4dd5fbae3f87bc4be65f05671de7f9c70d151f650872665f19e8058cc327d2bd7a3281af8697849232fafb5dc206efc37f3f56fff5d7dfbf83ef2da43f4c779aa01901e478e03a15eb4b623a926b4936c81660c012d9605cd35ad6d9c22722330277b9b26d996b31019e8ddcc1f0e1f0ee53188c305c01cfa19af708821eea644fe53d6a0e3b9f339bb12a649cf63d2814c03141c11db802a632a6457a2020977ef2636f116f3e4190d4c99e00872cf6f902943d91ad01dc6b7b646399178825396a2345b254a1d73eb0dcc109389a83dc7cd64b4624f27fb1c604ed1d683643c5225213a2e4fbfa87dbc1b9c1e179c697c29e079e6d4b7de52c40ce693973a509716f103d5b08614e43f9f039a52f472580f09fc0782ec1720ae473c9693b8e2b31cdc587a30e8acb15284aefe64c29144abbaca116e88f0fdf9ef3f593fd8832c935b3b54c58a1a5e9f3cbeca48f250a8b7cdcfba59e1f9d741d8aca20fe8317ebd7b461ef3cab741cfefbba59cf4889a05e352282fdd1dab62f710499da70f0d47fb2a17a7c0dea33872eb83600046c62d817de8102e01d2e2f7749d4a5765182e9bb8cb5d140c94d8355f2dd9411f5f74911231e65c93da65ebb056e30f48195b0e53e5bfb4f796c13f06847ca28fa769f270df41fd68150f811783154a474e70dcf494d92971b5a767514be1636f092b8e699d4ba1d545dd26f649630a20ec1ff03ecb5dc61f3f553aaf76bda3ba2ab7389850ad6b8221173119b09e5d05136e8478a79288fd4ccdf0333bd1d2643a45a72e0140b55363dfbd05dd3a7c461c0e552db3838e6308cd9689336ba0dfd1a72c9369ee9968c876664638cb4920bb249f27712b61cf5f25920ffb3d13bf1a08b42035bb6a25eb5fa4a0209440a761905979468bc12e2c0026b7feeecef44f93e699a8a96288cd8f3782976ebb44f8b805978346606af49dab74dd8c71839865eef345e670315c6fb12d9eb36dd722bc2008e0f451dec4876ca6f12696f422a9252e8f2b5979386ede231f9fd7e58cc9831961602131d9d9f418df1a43c10334ea1e487864f2c8fa738146d80610c44aea850b6e548467ef5e92044c0b2bd511737a7fbc22e9729e58ddd6e63aec37f1b80559ad3dbbf70e7a7c72f7f66d0f4f5b1c4c78469e01e00cd0a522596a3c132f8bc6e49d4fdb1a9fc9fc8e536cbe1942606994b3b8127c2a471d05456581bddf54d2ee0ef6d21ba4ece7083f1a70a13f6c38fec8425e6b71726b0a6fa0c2b9c0aa6811d67f5af3bd6abee8056d7d8c210fb0d5b9b4af67ecf66319bc90e2d018cfd062667151918d24aef05490ddfa080c6c70dbba4d2896142aa221d117abb28c12b0dc468bac17f11d21ab25f98a68a490b525391491d1108b2551189135a94d5b98166de3d3135564267c284e0dcc4ed9a69d0879cd26a660a9a77e2ab00c68de0e223d4ba8c260241ae26ab41701a6cd96427829d1a8d2780eaaa4185181b60325f9e54ee39a2c86418b71c7216d627bac6790325b46bbb14fb123296e66329373961a483c9b64bbc277a9a872139a4181b76becb082ea139598e5ea960ea9cc4d38f2ff1ee8840189c521bbd31347122fc5fa5a5e04180dc79d86e8b91e07232718cae04607212a596c4fbb4eee2f076838977b07d133ff473b441327d708678ea7c2abb8f4dd4d334f27a34b65ba6edac1425be1c5bbe30bc31864040de24ba6a8cfc26cb6b1ae2cd6c10781a8394d2ff28be555cc1559519ce9d92b030c3c042afe9bcc5720181aa7036d77b3e8527fad679fc52175dbb6fc43a14c070519d2443a48e54a9ce4f4b957159721c688f689e84babed60dbfdbdaf16c96118b407844c12e2286a5ed95548859b19224c8fd8fd4deeddbdc9de32a52403060ded0c810cb03240b9597e2a5455c090a4b6714000e1e3e3e323841042f00d991042fcfcfcfcb080052ce016b870cea24fc6406475244762202ef3b86d0c95df9ae6c48703c2fadf9a30ae8800ced0c67835debf13fa669e272121257992ca934c4ee67b71f23899eff11033e683f410430c81040404348468e72cc2444232ed94fc8b0cdb5543e53297dd70d98d361901c40c34f98df822389f8d983c42a53751b7f3b777c1c785ce7120a852fdaf5639395a7ab504a961965b1b6fb1fc47dc1449c36c7f47dfac574200c1af21c4ad89b9388bbfcb0f27018596ffc7f2030d7590e5bf93c8faf31966d8cb3013ed2de0e52e96ff0c136dfb25b58b2b0d91edbd8ff6226998f57ebeffe70324df9948dfd1b7a55d644420ee85713e31be3118082afee0fec6df87f9abaa34fcf1d57934fc5c070104eb6754a37e322080317f3f99f59f48ee85814822c6f1bf319160eae5bc587f136deb01e1140281711c04824b22992d4812790f5cb6059d42df7199038181780f4ca7f0143a105ce63d30b9cc65de03eb1134bdd74bf412a069c6d832351248681a12293a7da693e9436cf9bb8c81cc1f182789249298fc5c67f80310e6633eda3b4313c7453373f18d61a3f5e7b48840be19e3f88f0e0b06828a3fb823eb33eb1f4fdc9589e4d500df8f84887ca78bd2aeeffd3b2722102e641c07828a3f3899c72c3ff38471210399ddc1c20ef253c8383effcedbf64e2449e43bb14fe1b4dacf7aa7bd922872bd6def29d4e486a2cd38fddc897ef4eb55c3d01aa08935775cb04a910f40ad888a1e8042a5a7a20a32c05985155a40a1d2778c15311e80dac7ae1803bcd2aea971324e0b17bb020b31c0f9586431cbc2ca0ec098b659d142075a6c9103700b2eb2805cc87000cabab801989ada06db8a62bab0411836f0c208d4de8b2b605cf9020b2854faf95f60f9020b1857c030f202340ac306601837e802d4649c9676cd23df29c5da4abb38d70db82b9c95ed0917c3412703b7d71e071f2aee74b0c872fedb0959ff14dda06c4f9a95e5db82b800535f7a697a7fee8a08a4d338295532965fdbc07993a2aa17bce06b4112c596ff0c1988a4d25b80770b62243e2aa7a4a82c6a969566f9472db61850919a43da6ab1c56013da64b0cd60a3c166c53685f599581377c4c84064fd66b4add729ca3969967f89723ecde27c78c285b1e5ffcd1808f703e3780c943c03090328ac740c749b05987ad55f2ee655013bd816c45d11b777c9c5b82e6cc7404da8a443bf4adf0dc596bf8a7646cef24f75b3ee0999854177859d40f32707efc602ec228c213154cc5c50a9125d262b6216d1d5c91d4830601134c5a9c4d74f3090941116322a2c63d617e0af92a635ac837991f5f7a27675efdf0db52b5aa6436ee43ba94e06aaba999599433a2b6b07bb0254d51e2946549ffae8ac54ed8937f0c20848e14b55df93b0f704185fdb10b0577c49e9fefe1239f4abf41ecfe0eb18d8f67e33eb563c178bf15c8077152027e362bd6a2a382bbd92f5ca5f562e56c471aaee4d0c6326be089a9e9920d261e8830d8a3f928826130a2523d3b5ab98b84ea3a20a2a485d977699fcbb1c703ba52deddae28fceb3fcb7db81ad421275439dcc0a49d40d492249d4c1a680770b8a6d431bb7418971312e66456c5359999759a952477e411b55959355b07231671181b78375958b2de6be5b53458c6dfcc1261b70f60acccc5ff890c5b62b7ee1c315ebdf41e988baa21d4adf23439757ea79e290aa2a6781bdf20ee64d50cdc8281b907862b2f10b236c604d3662d97285d9537430675921fbb71a6c4b704cf66f41bd3d611cff62fd354dd3ba801e5306b96f1aadd75f89c6d716e4dce9c4b483423b276a50851446ce6d1d2cb6a488d92c544f3c71c3bb30ba4236657bb2c1b62018f89677fee5ff80b70c051065e317402de0621a16f1870543cb227211bd882ed33be8831d58f79d68e26a30b7f758e8e3a1c9b37ddc50fc6fb720a63620e1a457d1360c343df7770bba5b10b76d4f36094c9e064073bdd29aa000deb0f18b219cb0303662d9d2043b8bc45eddaea88349016f07eb60586813a9e57f3cf866297022b58b0b67edf2a45e7d3c882eb742e488e07c18679e613d0866b98cafa626db5140691ab24e645d04b6af54222d5f5314139428403605597f999943bf52551239cb5f5219466c19c5963f53298b2dff12953167f973a1efc81b30cb0a31f64aa22ee2ca57f64a2222e4180d05e80539692f8cb2ae77cbe2a5de95bd5b5077e43b3374967759ba59a7a55da6ef601dac83fdfd1b8f6e9ca1fe46a30e6622f29ded084aef6c59da14e43b9bac59fe770be2508b97cdc8fadfc885ebc2c538a4769dd12e2e1c1aed323dff8d47dddf389b7fa3d1df28e3c07a41b046bd2a554c9da17f755654bd6057af4ac5f5bed5fe54ef67b1da73d404c6c43c496e21abb8c2933820b890036202e149ed9244a127f5d7fdb15ddd4fc458ff6e28fed05465803fb02e0617ebc2b07ebb2eae0ccade0eb60539cbff9a86b620dfe1ae882c7fd3e55032760be262b1e5df4257cc90c3c26d81c50c65154924abcc700be26233641a3b183f01e48fb683b19090d0d0cd8e57c57c429388db8d07d7280f2e34040514504cfee971145f8e650ee24d2f129535fdb699368662f2985e7a1cc527276d5b9a548a94cf8b20d7d6e32d3e95c7537c4d3b2662ab6b823b2a46de4121b36eb976b0ae017825d1f6feb2a85ddcfbcb58bb4cf676b02c3e932dfa6ed0185b37fe9bdde0b941a38d0fd2a7d8c34433016e4ff5d3c2547c271aad8dd38d05349101910f692081450a194478c5c8b2f1276a835eaee23bd1d3b710c44fd1b640917c5688f369963f53993cf33d2f4e1b95fbd929fd8dbf71faf9de89723fd409f0f4970b87c4dcb811135937ea3713c2591e7a6ccc73954984b331950bdb35df9ff36957ccfb733fa7094c9e59199cef9a15c96763de358b4432a020030a1b33632a0d111b3fdf46fd7ae53f2b083efb69e9954f0e4a0dcac5d5e9bfd9e92ab1f3fd5154c6d5e9411ae3ea54bf190c674fcf54a610694f95871e3b9fa94c22d2cefa69f1a9327924e7d32bff8f723fbdf29f993c5de5421a80f79b85d6ff9b7d5ada25c3f6a87fa162f270f5a42640d36f7f3d098b8f69dba8c5c7c57773d8183719d818c484eca07443bdf2e7dac17ae5dfd968831424d986819cbd5cccfa7331df2975507a877bf94f80b333d3632e666227c54e5783c8f28f1f8144c6e9bf39fa15897a755556c66e32882b7f54746d41bd2a7d90de64c06561fdbd83c52da85d5c2c5e695b1259676a8aedea18c5f2cb8b311a2111644bb45f3c6fe8aea33cf50769967dd1774aa02afee08ff1c5d42499995f4cdb7217304aafa2ad993c3d03f07630ebdf35a1bd7f67d42ef9fe1d2cfee8f7ef98883fbacf2153610152b1fe1d14d63f7e281b9088311a60f79b4acf51a152dd6c9c402b4fa52692c9a9090c136e22372d0d1f7871c76da02540ee0657abcb71510970b35d9f808cd4cf7120a852bd6d46ba2b7b19e928a65772958463abbf813c0b2ff600f9c8f2f6d13b09905f6eac445a492ff70d023eb258dad4c3453370227c31612510bd580944af4d8c2b4144af9702053288e602fac5cddea9d10a862c5712d0d81b240c43ab84c66aefb9fc1e2e22082ce1ab447b606e6044f862e24e7429511c2de0227c49ca5b0ce1277c79dd1c5bba508618b25789da980191ec25e5b7d1482f655c21e9c53f1421469797a77d92720a7a20257cf19430447aed04218aece5719fa43d345ce922f662225d008b612f6aa79d2d94487a719f490a3f18fafca002f69285f7c48a98a45c83319080f4da7e88862616ac109dbc61e49426c05edb33613604f6b01590b882cb8bc90064af980600bfa434f4f010421f24bd98c0f09303f3c9da63a30a3124f94d5e9fa43d13095970d2e5d5c3a474443483e56722d388c968d01ae51cb7d883a12c80be1f2e9683e9ac080388ad50e5082cb5e08a2e1fca8b5150fb6084546300476822c6a3b5f74c2f68f98a606325d27a2f2997822d47af1ef94cf80b12885e4d5e9406f11b6534e7a337790571a6dd4beef879889e57c15e750cc08b848f6cec1573dae936b19271f883f4e967888be5ef1162c8f273b15c515c3481e8e5d5f824f514542105980dd059fd312bb042f4f26e0c310328b197d7c20eb46802ece5a598055494c0e5c5a47423f36d348291032f6433df469906074250805e4c60663569a8e0e8e5e1e8210411b8207a7939745690852f432f4f871053d8f2f3ae28a031f4f2680a9cc47e5e5ea532058ca197e702142a1cbdbc1d9f4e124be0f2f25ef866b227805e1e8f4f52fe010b218c60f87c90a509b197b78a59d0c841d28b8937441756aa851b312c99d36dc2b32c3c8181a5efe17e0e3105908d1048f62a51af3f8e4adac3a13165e8c50466065a66f7a2d045f692d4861422865e251a8930854ff8f26c7c1b05298d11d9236b93d74dcc27e946c124c016381271abbdb428b05c6cf1c757ccb751a19f20fc0544e925859f43992c1a05316495b8e5a164b98e405a195bfcde0d26252e9232c941a205b397141afe2676934212b86c4c70be0c25bd6203e0c6c87c0d0390e6933432018d2d825e1b65ebd548ee7b98842f3fe42a9352059d15a5efd4fd3ddb9e4552f6abdc772a59ff4f08967bcfeb3e19e38ed32d81e5346d6be186edc3980587028c5878306485c42058ed83e8605df2efe366ed9245bdd212dbd2b374e33371566457a44d22ed1360c926912d94eced624470b12ba6c8642db3fe5c717c92a85ddd90b3ac50c193787cfea5b9fa1851b9f4dcb2673d1b02af24f25701a05d01f8f1b10008f00d29d9c0443eff01d46c12c9806fa31dacff4a1ba3c74bcce07321507eb3f08c704b13daec24be1365eb310d9ce01ae8d8826a00f67f5b507dc1f2162b9f61f0561f0f183eaf01d82f7c4cdd09b05dda6ffcc2e4e14186a10bac927eb62fcc2229dbf596e0f2cb7f81de2e8a04bb58fcc1a1ed561f0c73885b28ae8d894c1eaeef51867c08878d5f1061862dd9f88510beb0b7831131d9edb720ed69175ba6d6d7371f77e43b291a5f9c1137bb89bdabba72bd2a1d493931ccc862fdb931980b8343e280f02354e262bed32f7ef5c4236c19227af530993d084b5c5e9dac01e07f39236ee64d80ddab9e5f29a979327c5ccc68b3979b75301a80340e64fd0855f591c2a57028a51ce8278f904a453d08f61d7db3a019ea9042c820ba960c324c1e4d4e9157c82e6418a124f20010412965ce94dfa5e40c9a8f2bcde298c7844a3fadc86ca9f45c3b8f864ff22b45fb65a242a954ac57def5c42054b94197570f930e0ca35777857df8338199cd1cfad50d39ab09d0948aa99163f208957c3cf41f239c09f04a221c7386bd723a8b882dff49040c3401e0335121996f2a947a8f0acdfc47bb2c9dac571d15fae15ea9d7a8d00ff84a3d53a12e3653bb2b2d3303b0670c18f33c796a00f960b97630aa3dea6f07eb603678b512993ca83a11d0c44ae69e2d4a12a94e34d6ec601ca9faa1cf9778e29b89f1f9fda4fd0082f4000800e47319804e00024c9eee650753027c13d3397f929821178bd348e955d548ea69b8e230f3321f5f2a2ee6ddef9162a4f4a9da93fa52ed297d0efe97a4b79befd5d0597f7f0272b1f941ba06010860f2f8e0b0e07638ee87c301739bc663000318e063ca594f62205d808fa927c596bfcb00dc783e1e6d22691e03f04ea458d13723ea15ff14e961254f23f5191309c9ded33c038de6720afd4fa76ff61d25f1cd6c10a8c3cafc8c972b7e20c511cca0e20c27bcfc71a45e2523937aaea5da5d3e483b0cc0a114cdec60487457da8532ca326bd7f745e0362e44e286106243b481fda4cd300c55423eed993687d42b8fa9200acde48932e41971f8b921bc085c4c3751356481a2bf31884c21f2009fbf80c32423a0c0de4aff09c37a11d2933a58115442ae930bd20c27d2f421ee703e702117726158e4e3bc8871fc3d057c11e427c2714426c7a5a867f12bd4bb882d771b24c07317805a02be086e9f80f933433f02ecfece30a2d15dac775e863a2f378096ab09983c5bedbaf4ea8abddd5002660ef1d5c19cd5d565a71f78a7543b28cd2aeaa2587f17806e93c81c3e9e616c014d611c9872616fdbe7f0b629f713f62ab4c2fd84bd8ac5f8b9cef0a3d724313fc3b93852af8c002f172259d7f524bbb1200c259461df7e332be1951f9905880868fbe3dc2a0ea50d8d5e754102c8c9b6cac526520da99d594664b90a8532a52ad24452fde52eb8c3b224920a50c0a7d10e4aaf98e886887ea43031c9e0e8553a851d940680b3b700e46118946e2895c3d7397c470bf866bee3493d7de68fb3fc2790377d883b1d1391e5dfc14c44fc77866b28fd05adbda901fc70af92007e56af52ed61f2ada0cb4bf5f7868def450c84df3f1903e1ea488ce3ffc9f79d5417e01525159d3e0d80cd8140edb7677e9644d68b3307c4c1f2b36f950b7f8a002f177690b3bc815e0d64e594c8f257a950a6057c4d8554bfd12e4b672545bb21ffe15eaada7d33dfe93a2c1827fe8896dba0685e15f02d60b76e8808303513c0df517ae59f9a3c3d3464fd9d3ca15d14274f13f5aa89da4ac762d3c7fa4301ec6cfca205616c410cf8989abe6dbf932e0d70c0e74280f10b257cb1ad042f0e9844da3a60f268df021620f041e08b60774517ebb060568cdd94b8f2ef8cb6b0810f0176f67631cb7f7320cdb817eeee45749d80882b6fd729f433ac7321c77f4f2720a26b9a51aa92e89bf5ca8c93bd337c5391ea2527ebe537bd2a4563ecbe671a6d0e5d55a2d9cf026f999b2ad1ecc748f89e5f713a615157f0b8def72fbdf297a127f5ca9d801c3bee63dc61ed3b7a53179cdf6b10983cda7b1188c0e4d93e52a192f681de053e0c7c71761fa4a5b300946ffa097c1b8df9edbd087643bd72243196394dd3a43747798ae9da45996164f9df6a3906cb33d4b1fcc3f2d3f823a298a3f71e474f3ff414721098377896e3be47d52a8b644c12f54a4ee0f31fc0cd269116f5772259b1fdcc2def9b22899944fa51b5b331c1bf5cc8a1cf9f3fffe35edfc739435f0138b920f5ca5500de26485d69b48fc0f4e9d51038a7ff80778676feccb0573e610d2814983cb18bdd9e8bbd5c8ca9ecd566fa8f82f4823409db3bc30ab81060948d91c5f23d0559e78cda2513c38a4b46d92c8addf197cf606f17c587bd31f676b02f92d86287b0fe5e05be8d9a62e84562fad34fbbb85af9bdd38f0f783a9dbe290d7f2cd2d9533dfdf4ca8100ef296c27fdd33f9b8d5d9c11b39b8d58b6a46181cf7f00ddde79816f86f1475b7f0f039fff00360f3e80b7837d367ec102346c974691ce4ee158b05d9909e016c4d5ad9a3a29b2ce70861e67a58bd235c18129a4d3eced603db6ebedb1fd7c630a91dc6b342ae16221188661184af14dc15d810517fbcbc5b6204924eddd82e4f38e7cf92f405a0258f6c25dbad010d1b8f29724940d480c69f64aa2a422eba48beece02281f0b44f4dbf269f9c4f8c6a0e25eb8ec9b793fa143125d01e462fd19c959fefd054cd5529d401366fd672c0e279fdb0df1ab54db0a60d7d3cf29ecd53ca3577ef9b57feeaff6a7909e7ef8b5d74e3fedd2aaa69d7ee8293c2d007c1b8958c0b24fbbfa1b20c3293cbde53ab9f4ca7f22250194a7b05dd264865761ca9c3aba284d0550f5aeea64a92fbd774560205d7bf8db9961fd6f87049b143d290deb49ce5a0267d41d59ff18cdf310474902df0e515902922f462473484f01646be3d318f9f6e2451066e14b5569b8e220f3340b882f99da23c588ccab9e46877f01368551f852d51e2957288c79a95e871c3680bd7e10808fecc5c48398bd549567cef297a9ec41cc5e2c63a2a128607c7dea2fcf3ef081c9b3fd0724083e49147fb0758f23bb9f54330cc330d4c2300c93640aac3f1823c514529882280a4453bc4ca19206952a50a852f4842988ba8044539c00ce2f4da1d2047048fcbefbbb0551a9c2848d7bd3572942635644c51240a1d28752d3e28f8fdb4c524e9f76cd9fed63ddd060e22347268fe98fcc2154b20025952d48126d4e6cb00f7cbc05850004200081083ea65b125b0c92f0c8bcaa0a61d2103f22f822d8bd0892c424eca7cd4ba95ef5a5ba448a9154fd25345c697028a55e003eb257a92ee991a283007c64af545da2fad29796c87cea8d943ef5fca9da23a5f6e0f8d4f7e4f8d23779c5577cc97c7c793c93f05084edcc27e1918fc30c4ae54550eb601d1ab4eb429343e955af43e95575c9121afe9a97f9d2eb907a9aba44556972a87999a7e1aa43cdcbd0e830f3aa9f79d5a7be91006eb02d2885634655ca5123939aa1f12543e34bd54800679834c3a4118c807b3041ace29b157d42304134c137f3a2f9cd6e5baf04a7388794e0f445147c4c9d0ab1e52f897cc7abc02b58e249aa97794fea01b4ccb507ceced3d771116b9879ff6e8ab8937affdb59f1f9fcde5b1297b09fb61874a68d688bc2f2167e3234be9a7c4ba6e99bcc216d351f3ea642a99754a8f432f4e75f32af92a9b159773ab1fe3fff4ad5e9d32c9f20c057e97da400c159983fbee3f393f32a7d10e02bf5fe13a85da07d1af9351f5ffedc8fefd0c84a9383ea675e0799afa94b685ee667ea122946685e46e697ec78d54bf5f14519a857fe329455d4bf95c040d3c62f582084e56cc4228458d38e898ea86b827d82f857641fb7930200b7b34c268f960470c9d75cc02b89984c1e1e68fa1f8799e7c983f6343b5e0701f870f1a2f938b92e20be66aa8f8f0bef43df47c7e3789ffa3eff3e39bec6c7a7f4aaf749bdcc6b95a62b0e3b6a93174da5e14a9343e967de48e9676a8f14fe1ed5979eab91548fcca7bec98bf349511afe998faf12a5e1a7f9f892a134fca98f2f15a5e12f7d7c7935b41b72967f0eda7da5dd91b3fc7110597f1d343a8bba80e4028daf4ae38bd2f87a1a5f3a687ce5a0f18583c6570d0d0e3d528cccbcea7b4a4f53a33522001fd94b557b523f531b0920f7131e01bc924852e94c46938b17d6df6bf27108446420d84f9b9561abea1934101f9b2c33337b11ec4ccf7348dbed3b888fe996446cf916830d8a09c43f534867bb6e414600d9fa04f12f293e52e6e9e30f29d020baba2e8ab83391dc0b13545d15eb917fd84fdb076949e43b5b1291e5cf04f7c436656e2dc4cfc5621ad7abb2ccd53b2dbfc01309c6322ab6c098d8ab8f06fe9999e54f958c2cbfcc91e557214da17206952a9d195a95a22214511128cf06e589b185b23179509f8d936da83c09a150c1842940212a41095d284103187871441080e2910f5fec0e4b4059e28910f84eda7503bebf6623962847b09e53f920f52ccd72a35ebd9c0cf0399440352ad7db4161bd617fb46df70eb2211625643662f9e189d56123162560b67fe01d376256ff90b6bf7d883fe4b7cf5660fb3d96cd7ef2ca836b4f78f067cb7448b44ee3d189ed6f1faf1df6aa5f836941bd722de0d5826cbf6769d7ed504bbbb6b4cb8d7cd6aedbb0a32baf7c62fb655275d027ca60aa942b836450bb3cee381938f0010f422966e4e0d5df3f71a7c911b32118195145152cc6883b4d64b00415b0a025881f9e58e2d5df417187012bd841142743080216557825f5aaa14001af1bf9bb91b7916d2c5ab4f8f44e7cb58c8b33645c6ce10118b148f1636f87528463dcc85c0c508a4f1f5125c9f4f90cdcfefbd2e429fd0ebe3343b3fa8fb8f43bf51d803bb44bfe6bcfbfcd04d0a86c4daf924020b0fa385010560bddab0461f8a657b399dca657059cc1f6cb7a6bac7c6d0eb951795540fe3984ebd1d10bb6c0dc75d98f66b3990d2f40eaa3dee9d059ad05cb9419962949f6c6a3176c790112b3a6f10bb6bce00c2db399bb96139d1449aff83f6a81c8857fd6ab687de7a659fc33ac6ece67895a2cff8d463458d7eacdf9ac057ad512303a6a2058dbd0f2b74f1fd12e594dd0e14f077db122b8a075bf528964fe8e02641bb1281176d8ae88e54992ed6f9f6ea03ec2f6730379875e2518b6eaaa9e3bd464b49bcc8db1781804c6be62f93b08dc50fddf3a90e5006ce6a4f6d2495d3ba94bafb8bb58b1fcb15e7197a476c54622c206b6673deb9e01d99eb5ab9f67dd9758c61d04b2a5e1665df5615814b6c4b28ef572401cc44758e6241bffaa6c6fbda557fc7dd4cfb276315fe1e72efc859fb37077b1fc97b75866236624cb5c2c7bb1dcdda55d9787da4bbb7658b66d3dff38aee4f32422ed6dc232faa9545b4baff885fc7be63b5e9988adf050bbf8394abb7ed54040d89ba3e24e02ff82b3ee33629665dd1e6e5e1a1e02babb6504511cab7377b7d45e885bc92bc9bd83996dcf02ca8fafd927c01de28f1bb6df028e836766ee23c8bf03f3c69ccc8914cbd51bbb944aa5ad6e57fbd26f3f734bbf550ee4e8a77de98f942ac85997f6ddfd60a954aa3782a552a98154606f044bbf43e9bb542518671109f4aa5fab6ee3e4d9211e75a0672df8c1ded865875942c06b6d4da5a73199b8dfa15f02fdfcd3ae23fa3370a317d0029d64bbdfc495706857bf9176edb0cdc3b1a57d8932c7d8b272ab06d0a8907f10dff19ae3de35f4aadfe6d8b7fd2a0f5980037b55f672dcdb0ef8301292bdaaf6eac35d8e78e64141f24532a020230a245fbb24736c35972ac7958602dbcf5e92db2be12c8ef651bb3d3d89f8f4973df4e733016eb752a9f2e076934d6c7f73d13b3e5a94223f969ea780f2a3d4687cc9fa4101f92fe7ce61785d10c0950d2feeb811c972120972b75f3026fe8d331c7c2788b3f839cae20d401c3c23edfae28cdb48bb92b0fd1dda05c62d9663cd01a3075ad808c6fff81cab047d22921476758d4892098fc7631b87c418638c4c57cdfcc59357556323e7ac28b58d7b6ef24837994ca6666279866d2b71debf4d9ead549a436494edcebd716fdcdd14498c6dd96f3295beae63cffb2638a3d77ddefcbea677069ef8a79c186160401085d2380e0c070394f1615458c0bb83b3c13030302008a2503568d398afe98d1b2d6c2d682d486f6ea185e89dae12cbc51608823ca839a4adea0bd08bdecdb5c65703c6af80379add468c92ef86d701af4124aa981652aac903134199199ee16262e28de61a271ba0928d6becc0c78b8db22858b1110736cabc74b160bbfcfb6591d53eae208bd5aa92b62450d96b82300cdff65f1b33e2f45fd467e36b2fe5f77b257ab77ab5dfdeb57a447edb684bdbfb02c01bdc1ed15ef6aa35d92e69fba3a6b16cf796ac7db59d9345f0e28e7bda224a4993a5babdd7f3876984956d924816c5bce7908d536286f147d793677eb71220ff9d6c51cf3cee0518b104818b65a152e9bbfe1e26d62ed04a276b578d98f8e3c6fb776444205e1471ae441fd8661bb277e27caccff004a23aa0e251d598999c67e38bdb13eb93cb828b654103abe4dbbe2992cf9a4c31b28a246a81db0ca428292dc54d223ad6f413e31be32bc204faa19143d8f69bf1c9a47632c3c695bf463f3162cb1f87159272c8a72e6856b6d88281f810d8d138a359650c8181781118878715458e145bfe6e03b06d1971878b69cf7fbd8b27818381b14b803c8e147f743296adc75cf12e402f29a957be05f8fde562dfcfe7d32ed31723b2fe0dd90fd6fdfd82ecfcfb0159ff8f2661abbd899bf57260572fa8e2ea556df5ae565ccc54e38a07c32a069b54a92543aac45df4c9727a389217321f9f2afed05a7eb201c8bc17c5a3e1fbbcf8bc682bf35dc492ca6b52f34666bee6f96b6a9ea6f62cc9f1324ba42ca97955931c1a7270cc3ccdeb50f338ea121c5ff33438ea1299cff1353435af7a2946643ec7cfccd8d02b7f1a8ac38c9151cdabde488e97a979d5eb90e365707c93993742f333cf3f33f3386acf121c9f5a2265c9cc979a58a003484896865fc7c717cde3781d665e475da2e3671e475d22c5888eba24f5387ea6f6f42c99f9d24b31927a1c4f53693ebe6226d04139a48949312946c36f64e64b6f04c7a73e4e1aae39cc7ce975c0f1a997b9f04ff37f9f3eff0e176a07ab95a3353a0bd451a3b372e4f81a1def3de59724227ae1a8f9191cefd1c42eae98529afc7e0478392bc3edb8e0fced886efe76b1d6df4e16c3dfcec86686f5b743b2a59781a6be45557f43657ea63ecb858fe1df867e9c411a87c6970c34be5a34be6e687cd9d0f88a81c617abe3e22cffae4bfd8ebed90f6e07124593407c330170505c7173e1003e37e393b5ab5d2e7333a2cbbd9041f817c6f9ae58c70273930b62259f42cf00df4c0bb121880b707bee997256881ca0bb3ad274c29a3f98f837ba21b1f29936b7f4794d60f991c4702d8978a0cfd0ca16e0e5621cf9f50511213d390b4010c42ef6c8f65e91bcf243cb9894b54b4e9f194a2b9ee45f8cc89988744694942653da29368403662cd75512355719c42c20f8898f32d37e87077c10f864a79f53780a7d47f5dfec9b894036ed634a6e7522318e2bbc49f21dd5abea0c9d7b8e02bc7de4fa79f1c95a6a5e1808d7b4639e3c5e064e270db897a22206f2491fffe255f040d7a5f3d225755fbcb03d1fefa75d9f2b268c194655193f1043261e99480c2445a5155924a77820b042529501b83127f94cddc79f894034177ffcdfd13b321fffa65d9f37822fc61f2a1b65acf677c60ae0deb0a58f9fda64ca478af741fc4bca29c6a342a93fa55ea33d80b6bfa33d70b6df939e09b8b9f0042ee31310a7d0657ea567b165145b326779cde4e3c1376b922a9d42a4892464fec040b43bc3ad09c6e9be0d66fd092c0c8463d4225211a558df38d7a2432b20fff524d36f51a4c41fb3f973d8f8450b60d035212d3f0f7ed9b300f9fdb72440214c1d0bedfbd83d794e9af6ddfdbdc636ac83df6b93e7f49fd6cd81dff3e4393d53ed3fcd8a8f2289f1924e589c2278e249a4bd7ad97a1fdb757a7ed92ed4db78fe2ffe8879fe1981c03c3f4cfc71e3f9c1f8a3c6f3a3e20f2431d6fb16def3a86c817ad215a0f75f9c879fbf27aa3f16411ea8477d3be152ab0283f260260fbf373f1b94273f8a0a95deadb87ca2fc3d854be1b65eb3d434ad07cec6b0f5780ea9499480960322b6fc391f224e185b545893925b8b9ae6f189723e27af028c32348e6cfc62085d6cb44d874421705befe6e1b8fe4adf8af213ef8301b71a2e3d4a19a3cee996c082540c9189b3884c8c2d9e9ced39a46463174488528616db5db5e7ff285b90fbd397260f6785392406017c6ffbb64fce21fc1a973eee3b36b7e3e420e5be6907ebb88f9388568b9a70053f4e9e20fd7543e05ffe2eca77455fe581edea8f709d4527273aeb272a608a4023b47b697868786574a86d0a894698519850f86a7c27ea55c0cb85564844c3daaf5f4343839942bad214d1be3f0addd069dea07d77f550dfe57afa6e882b79a94bb2c4d1d36de2c4c69538e698e3985f6062bf7ad9fb88f6ab1bb4da4119ea95a9bf1818cadda09c0f950e45391fcafdf098128960a438491bbf40620adb3044d2035144353eaffb6008a7a831849b5e95d314b24541850d9a60635c9dde8bf16c7c61582fc6bbf19da84be1d17c27ca03866f189ea7903885c898c9c3e3bdf9d5a09c36b9500ad8c23c558f3287946afc37b7b0a7df3c1bbf40a28a3dbd37659ccefdb43085b4e542ce270af0850fbba21458adf69e8cc6cd70da1412af60b5f7bc1a8de378d06863a8b43568c9c240db963e1e445037ac77b1f843abb789ed62b105f39d8eacf0bd2751ffa239f76c9dfb6a0496f5b4431c1f2bcdc9f122fca81fc28f62d1fb96f53636366ea3a4ed57751827e77372fe73288f8f9387c707e9a39bd6b78dcdb7e86d625befb9d323fe36eff9d76aa150958608eaf987a024bdd202d6514390d8ebcf6a629d22b12caa44b3395587716c6c349b9b8fd3a6de187bf33e68129e1e5f44e76f568fa3522a937ad0684f3825d3af7ad0a83d9149be23b97ce99df8da521fc75f79c4ce2c59ba1bb5ebca986dcf8b005ec9c5fe4b34daa5f3fdb24bbb7c7cbfc739f5f6d89c672a6b10ff9af0e750e7c16d8e0e9d1f67ceb3ce4b3f42e7198542a16c7418888e676daa8ecedb50f9363652dabc7cd4e49141dc86cad7a1dfc7c993f3415aca87993c92e9fc1c5a532fdb1a9dcf99f3fd8876e9fc7cd0af589d1c7ad9e63c4f229ed5611cfe20ee835eb63e6ab07206f98c0a715a37afc3402ee7e8304ea9db2a9776d57c7f19572c0c368251c6135b1464656cc452e58bf5fcd386241487f513b6b2e630906865f52372fefa11f6728f7a292d7df937e7a56b33d400614a8f73b76fcd50dda8468dcefafee6a3ef80d586f531461e1fe3e963ec5179d45b8395ffd5cb9dea8d57acfcae47bd318b953d5e3eb7cd55a2599bef9e554fd4e6f971a8470558aa4a347bd3d53b83453dceb72a37e408bfb437f508eb06e7af12cdb21ea7de19acd3aaa42d7feb6f4e55d296f5ad7aa566fd7518884d3dc2fa9b477dcf223755877150b52a69dbc3e659f508bf667ddea059ae3a8c6353af1f6165d5611c59f392eabccc0769d4b3285b9994d4e3593d3ca71ac9ca7a14d5929ad58fd3ad9bf7f8c369ddf47867bdce3b3d3d8bb6ada1d1faa0d1e2d00bf6d0791d0612adce9f268f4e65d08f407935d6635a7a1c074ac0e683b80dac473d0f972e5dbac469ddd4bb036647af5027168dd686c79f1e456f13cbe33dfe78dc40755e864aeb93a7e4e371a88f6ff9e8be6dfea63dea793cf3cf22ad47bd465b95e6e6e5b3686edee6511a6bacb1c69a4dbd12b0a867557ed673efad97372fdfb51b6c9ef5da0769a77787e54a735389d854167f8bca89809cb741557ffadec6dffa3815806ad51b729eeb919cb7a947e6b3dc61737efe89c7f3ec749eebfd361d1d934e37794adfd2f1a1d3ea52eb755ad467ad16ea4bef25ce1bbad2dfd02b019ed27b397f6b7ae8bcec9d0e71dedadc58ffcbb9bf571b7af32ceae323ccf7bf4ad5ae532fd723a7de1d305436cbeb8e5ef90945a474432f921d7116e1c1e351a8e79b7a9bd89bb7a17787b561c9c7a16fbdc67a8f1e15e77368ecd58dd1d1a939df83c65ee550c9fa93cd9f3e88db50243bae042ccedfd01ed86a56ab47f851cfb3088f47a1a4a4b709fb7889baa81f4113cfa9042c3f8b12d1aa7c1b7a71bee66de86562514d62f69e1ea722d96151bfc3faf8930f142df1f81a7a9b1c614fcfd12b017b8ab6c6e4a1ef514ac313cc30b23c4c3b6c0f6c79bc6916a1e109668061797c4f22372c8f97a1ded368793cd31d5693aa9bbfa0b5b93dd6ebd5fef4dea90c9051ad1b1b967c1ba4513ce8ca3e65cbe383f409ec0f7562fdadb1a73fbd3cfd69f29c2a830c64fd5ac0ca675514f7f928a2235a89d4ae8bd4ab96f5f6547906652baf44426a57bf3ca35db5ca64b32c32d62e2bed7a3914f2a06590145f6cd46223162986ace7c5cf4da61d2d28c6ca9a1d56d6ebbfb2f91b7a91d89bc761b150a823366fba79a62d140a8725593675f541bc45a3b5a137f4faaf22f8f948d27a1d2f118ac5f91eef79fcc9c9a35384ed7c1c3adf86b2f559bbe6f7158155e2f6488fc7f952ce9ffe4adb75dff3069cef7104e5371e7f282adf699c446c9ef58ee247dd1896f459f4c65816f547d11b6325eb512c947c1b7a5108c879d647ed65f5a800df8b1b3055718495bf55e16371de8bdcbcf6287af32caabda45ee943d19b0fd22894cd6b94f54e6d62af6c1e45b516ab6553597f51cf43be9c36b0cd7916bddadf548f0a50ce1b725ed62339cf4251243156ab48626c4e95bd2a3dd76dab3e5ed67baab2575d7d1f1fe70d38dfe383740f7a99581c29a924e21607e73d0356739c045cfe1ef52ef1b8cf9b3c3a6f73835b1c59af8f57e21667561f44dae2d8501c9cda3a37eff52a716bf33ede07752347026dfeba51960fd29e0df599c79348676f1e45751e875e2416e7e3e4d1f920ede5d8bcbf14c2f53691d4a5f6ac0fd2ac9b0fd292e23cd31e1fdbc50a59f5725672bdc1e699ab0d8dbd8ab152e75737f588ceb788e8d4d607711c7a57df0930d99bd7a1a88f1375e46603a66f61a1e20cdb7ad4b3ea6d6259382e1087c65e49f931e773ead57ef5380f4363b370eae5568fc43245126351cfa23db0bd799f44daded423a86f3dcf22a66f7d0b098a6a9608ea713e4ed64bcaef34a75e24d61fc5a243f8e56b3d8970bda1add7b9a9dab7506d9d5e2431b6f514f5b157ac8f73088ab57a99d8d6af583d7ef53794ad4e8f7a9bd856d5d1a1a6f741a5a5f41ac0ae9e07bd48ec4abea23d4d9eefbd8ff2f71da14a123ab026ad8759241ea14a1239207223c71040994404f0d274cc5e965de9553f4d43e9284457260d915f34980bc169b4d78d561cae561f7bf59e8f24b21cc1ca8ef191441623b8f577ebf5d2381aeec5f627d97e1a19f620ed911fdbef24078d7645a5f52180d78dfa470820eb4fdfb14e1d9776d97cbfa3214313c779f28bb3881f7147a19e7f8886a4068baad7bf07e66f6263788dc6006e016f87313cab3b75a7cea6d2741fadf7fd3ae84daf4cf26d135686afc9a4eade2ad03a09dbdd02dbafd55abb09d62b9f0711d82b027b84dfe68ac0dabce7f567c3acd7388e7d00fecdb3288ad6cb9c44da1bea41006da812e9ee4045d4409a5e0bea20df892f98ed1f22b2fd9e84d2281a5415d216f51a37515b6927fdc4f64f37cc767791ed4769ac05b5eb4a99ed1d9667111d5656f9840ac1bc0cf21d982a675b8caeb4ebdd8bbd8e24af20a91081bc15e20f1df1470eed086d084e4b81e4ff19c94c5323a34ab1510b7ffd398bac37fefacbf79cfacc8d7cd62eaf317fbd1a35d011371fa4591fa45bafbd0301bcdaf36b30fad79d6a30770dd62e97f5af7c5490b411749d6f9cbfaa9cbfa04ed560550b8adfa35e2ea75e10a75e95f5fbd6a4b937d215ec5559376ad1bea11dd447f4aadf863650affa59dd5fe9f3cbf0fe033086b7f1b0f803c7371756402a6c0f49b1ed43ed0490ffdb4ce8f8db34c8f1b7a1d8fe8e027ca2c1b4200dd6b0a0e847e0edb0c376f9bbbedfdeab12b63cdbb7d16c1f91006aacefd79eb840932451c259af9b3c2c46f2b128db2329b94b19f6aaac1b358c16b6ab5f7a167feb838ffc62b158558230ef439ccdfb10eb6fcaeea01ea55736aa9cc9407da807ceba57c97136f582ac6afa7ca857fd020c31b413b58bb915830cccd4897c68c8a3700c317cab25a5fc560c9265a841da067de1258ff728ede2e1449d3b3b8f671e3e14278f0fd2338001c0462c4b70b11b1020e28fee8be00bdf4d1e18dea967bd086ae955bf0b1fa46588a00bdf4d9e1ddfc9c9c3aab7c7b25e1ef9f84b03cedf1e97756987323dfe72397f3feba0cd5f95ce5fcd6a7f37eb1f65fc817aaf17490d56feea6dd02bad8df7249547bdea5f51399b02cabf7236446ae9f0e65bf572ad97a1caf03838efa35e1d567ed1a11e466cf56bd46fc038fd3da867a13e732dcdead782f871ead52143bdaa967663537d8b1b1181ef7fe351fcd11245b5b007600c5526d9a02e3cd3eb42b0fd2caaa55dbefa397956efad28832bff6943b4b222a9a108eae74a139ac9ca2fdfe794b34f4a9f9cc9a376458781879c3c2f304b29bdf0e2e4075258c2cc074f78241610e124cb102ba0e2d52f7750f9a55761af5ca832490a506a302da8573327d2e2435654708422328c10c64009f1cb142b63845110318bc5272011a58a2286ce6882124651c408bf44b18330054e4bd6931f8a93a0deab94cab8725425222de5a1c7a2b4ae345a2a7d883d8a94eb433e140414a6904417197ce9220a2e3002073e20219cc1888c141105349668820834a8c2008af0411a434904218d2e3c8a0cf21d9914d45526b9118e6875d0686592efc497bd5a11b6ff69b43fb6b5d0368e24dfd1829252f6ca24226f8350f572f5a62c8ea71c71fc75508f2dff1c54c6966b91e5df3530b831ad3f73adedd3ab0e7be5443ed4af3dd1a06851665a9006d38634222db35913a0261421c51357aa34c18c8f09594cc1094950014a1a4a1441095d3811d2020b39d0c0123420030ca028c4e0c2bd5ee2688922eda92aaeb4a7a13571a5fd0cfdb8d25e86c6c495f62a0ac695f629fac595f62d502eaeb4bf41655c691f43635cbd6556c5801fea7b0a91165579e8b15ca56b1d0a816fa34c0b98f59e7a965ef5fbcc8dd85e377269e45960268fb3666d04a293a8246d31a7b9a2858ca119112400000314002030140e08460342a15055551f14800b87a2506a4e9c47b324866114848c41c6184208008000400c109921b3020021b9ce50122eb64aeb6c6ada30e78c38f47436873a73efdf764176e6a9a1d9147a889eba6879cb157b1e37dab80d75741043b305077b4f192106a9515f8ef6e408098b00635e15ec1898bfe2b399a7149e13eaf9c5a1411b74f60a6ab41aa6c1843c04d8b609fe061cc4a1083613b849deda08e84caa3e8bd6859b3ba63252682dbf7202bd3fe60ac03cbb471ccb10f261dce13800e4f806c1132bc18608cb42050b7e31f8a62358a261d42851b128803f98c4abac9302cd94e48cae05a760d03ca8054537d4540a2b05be22697c283ab513498718c08d91662cb8de4925d96a2f172eb6dfa8d7d12d616364c7f3b4b0374175e4a672ed9c83660645042c852726a07f692eedc16b3749ae9ef61480991cba69174d5a7114ac47a72e4eda9435947d4bcfd5dae136bac5ec934f89d65431e4404bd01daf2b46270d442da29f9498f36494ca756580a35ec0851ab5f391b6a667b20c18e30913ce18256f4a91354506782af799b2ee53fd2cc7b1adcfc215d8bce7d4f81701cf7eb41c962917670f88f3eb5b820d1e4ab2c1f90888d41a4d0b4222c6d79eb5de00ed61ac04515ddc9d015dee239bcce65f4040e0ec961268692211e311c522411548ef395c2238ac0236e6464e2f6e3dba64e4bf50ac71e9e0d0b97f53dafd05c3a2480b3763facb2be5d93ead9325fb4c0ce2e0e987aa50c63207ebef706644597ab9bd96e1d06cf6caf3bbeb037af7740fb335942aef57daf3e4b8bb98bf7a9dc2a96032ec64cd8bae3231585f1dd855b2fd83fefe3bf45ea4c27f9f3c370a1bf27e658fa52d6677e7e2e249961b21650affaaf0d9b883fd9dd1ce4443b52438cf16d589200f1594c47a65d87274442d28d66ddc962792ee6709fb77bb05b6fba82d0b087635bc668bf17711cd5951ea77e9d54ba0cfd76520fa166cf9f245eb9d13718576178556802d2330e7162cddb52763611ba5ed00348d727b00b89ff5b9e0dcc63acb6b9f6fbeeb7c8754d24fa044799b4407846d554198120c3f9f03c33573d7e4f2b379c2d008a1ff7b925a019ec8c9b56eb0dc92f067c0ff997b41b3aed0fa77568246ca12ebf082a815b6fad342fe25386dca332f0b992ab9ca05de1244961259a4a430d8183840b47e12a2e73b50557b23dc77ec9261dcd3d5b1aa473da85a448e1a60e15ea0504f41b30cec9f8808e411f91063613eb297697f83f24c8f5e3b6335ac8359f4d2c60e2df61c6dc18f8f027b31561a0e9e391f90f9de42564e24ea39beab2a10152a244b1c660096d5108c487add2454180296c1925fd9c856a99a5615f29b9e11fe10e0dd75192b3dc471ccd042dadf9471d84c3eb619dfdab3f592af02ebdb721594e3e475a1a6eaac08c77b85b89eaf00cc2cd2ac2ae1bafb8e4f1d7914df86a59f6d67e5623d64bece875b935a07e3c7c590597e1beb163387cc51e89e226f798e7d25e14a375f35bdef555e55914fe9514d6cb0158b514a241cf723074350f63c1725e40bf684af0b2658e086935a1dc81415c08e1698d0d8db607afab281681652ec3d3f0a7f25fc9833fc0d3f3edf8fbbc0da1d507c7fd7079f507dff37bb2984e68d3edf09ae5478d79a628e0e3462633f9ab331a3060c40ad4500140c03a0bfbf655db27a1b30a9b3b47d92de64470104360f365416d6e2ab5ba12a14c8e3ddcb2dbb07973b2a887f85fc5168d855d620240cf4bb015ef0098eed93fe2a78ba775e7502900ad6cc339dda28c9018b84b1ec0632621719fdb6a66d0c145f42ef0cfddcb5034b9ed4484ac9c25109329d3b5db5b2ff77e20544b0ad2931cf887e639fe264bf284c8c9cb16508c9438580078188967020745bbd438cb3b0185cd2cd19d02b4fde5598cf5a163393bb8df7fdfae82005dba4f96752d83de3c009c97bce29aa0ab636873c87281875b0b0bf38a9782358b30d5b795474f91337efa02646e9625822256cd59c525d77f633f149d688793d232c237838adbc6f66abed1538f10f27045cac2b76cb5ef40572b690e27db40e9584872f8638d1eac91f80f4030cbe4a317b02d706cc773f85f058b682123938557f1a4eabbbcd978057e1391d10c4d4ef212e7b18dc177d72b95dbcd69779bc055680c5e4a59b464a802c08b37c7efd98e28a24e0852b3694405b71f40a0addbcca6fde6004c34667fba20cba42a99ea073b7ffe22ac6ea8d1e8e8e69246c4d4f521ad77a4271d158a8e9d469ef6ee08b86020b0c65514c133ee16c7074575e3c0f60e2f6edb6319be58035a5a64ba5d6c9ed4f931395989615d86311c730acb4e44abd53a9ecacfcf4f3e5768906f6f7a0000f6f5277d341c377932c058e32dc2c7a370901bcd0360c0d57b996a8c33452e3221e96f67134bbe56c7b87dc803877cde59263eedc50d3d9fdaf611e6533348dea41a25872ae9b6aaaadf88b8ccf68506dedfce99024ac94f9b3320380d7731c101a5bc24903023e50f0930305123eb27baa2b394e5bd899348fcf92f09c3621f23f0e02ecec340e40d1084b7d3bb2d7e1f1ce9c9061cdff625e8bf70c3482daacffab7dc84f76ab9f71faacd19e4ea386d5e9135b9f4c4a16bd9c16f3444a768dcd1ff91b9df8af31525b197634a8ba4b55046c8f5600e57388bf5586b02fcfc0d3f56b33c0b497ba60d6366349a67342a7300b8410c7c92f735ee514b74532db30f98f164989fcab79a5b447b17a5e8d91677480ff18133dfb0c97edd1762e8052ea0c423b06a7003ff9245c8f4b162687b76bbeb32db98e8bc725fdc33ffebd98397ea04b37386ce9d2034f1336911c06dc61b435076e4193193742224b9aa2fa1f99f1cc3d3458cdfcca5b6f14bf91b3dc0497e4dac11970ff2683878160cbb44eb272d2cad826154e378606cc728fa00f5c5db0c8b5916a7b2a16a2586153c0fd6f840dd77bc2ff9a2c657fa318026d8816996ca4d8b7f494fa418f7f6bd5fb09ff6601ff01933c25c89de8ba0bc10cb29c6edbc861379703c9eaa2c20171aae4e0ff54a2070008db3b666bd782526d856c8101cb58a32e37a25f9f90184e21f037ca639eec90f6a62b2348fb4a00ce41b5646ed673db1d2e52524b92441b06b9128e1e003ac91a6dbc1e47e0b4e6bb9ec5d23354927d2c1a87c02c77790653256041ece1a7b7d2946fc5c5e105e6ba8148b1b6a5ce7da4e9de0d59612d19cb05a4dcff319e604a338f2318e91887f9bcf620eea4ff21c368d3d9c712056e6697ff333ab3fa69f2683702a3989f5a73df3f9c541c0774668994ec24ad4e390380c90ad82d6851f598b52a65f6f471837c1e419675f9d06607e0062163788a9e7cb53a1e8261432aed2415c9088bf22745321120bc24270a1e874d877b934986bd9208425b03f78595a0d21137c7c129b2c8ac343f7bc9b2dcafdd1dcbb949cf35f1c8c7f3de9148cd7a164ab339fa749d36f0530d373bd14330da7c382dba7162305179f18465bcefa0d3faa3fc1b69e816a455b6bddb07096dd09ba68d67673c9708669de7d72b1a55ef05628d340114c8742875293a5cd73cbc0b0bf47e48486c727478d0f5523c05e10d0bd3533c13840fbf06912a861c432d33edfcfe05ec510550d9ebb4c4441af6f57b94502183941c77b089c72d67e6e61c14c7b3a2a5814218f29b3c9b0efc0ee926c8624d8fbf44dbedfcb4239b9d006fcc17e11daa85b23f962af2fc60c5aa90581cc3d972dbba3592c78265834159bbfd2b21126e0eb9f86531560a26cc438b53fad0c4830426e1d7d83ca03cf8d800d2f37a807be055ac00fe3d70918e60bffb451b4221964048b108f17e0fad37701d4249018a02c1a1a31f7a51681e1b5c6bfe71ee4d263e0d524abe45deb3f4023c30e473b7f0849ed557d8f6d368f5d97d2b537f3879f4be36aa04d2c6b659a6deb204601ea65d33d3430de85bd1f61361b0818b27791b20ebafcaccd63929d40f29ae7b22157d9f3be48feb7405f4ded836426e548abbfaf6b8a379184c741b57fd29089fb498d56b04b034ceb464a5a7f3f2883181fea52c96c2aa25c68d6e5756d10219f64f956d923f8bf9cbd9b3f55fac39ac31336b91b1fa7033926293ebed6e683dd961265c13ec9a1e263701d78c8c4e056a359c590b5d1b41b80c1d1b753251df85e799ce6a5045268792e82006d0151609ecff36eda840da8ad205f18ba58d412738fc20ba02937518c7030e6532a6f98636439becfd400b9e00c0dec61140c48a0d44eeb5a7a73272c857fa2c9bda81e6705a4c771e294a440ed41f2fdcf42d41775bad30498a129cbd4e3f1472bfd52b2c1bbf30f5d58a580a30d56532e31016b63f9eea9b2193e8ef1a5ebab11d4b350ba5a19b0a4f0ab95111705d68d63631edd0c94963cacb6ccf0fdec74f80ad067050f972e26284b1c86963de31b40cddfafde443bc4fe829940adc7e9d05a46fc81f65ca648dc34f10acfd1d954bf7d02c2357ee0cfcc8fe2bef0d6a847649486fa47c481399a254b4f6f76424ef3ef1f230ae68b9228228b59944af821c8415eeca3932e837cd7d930c7be8368721025ebeb730de150dc6347260df40cbdbf50c09cc26880d6faf475797d7c4e956ad840514c55c7552d3b67d538b9bcf9837ed278e8192352929a4c997a059bc4812080923302c034eefc9f0923368a1a08eb42361c3fbdaf4f2715a452dac500392079cb940c47ad4a949b6009e907d060aaeccc40d3f5857245a4932fe796150801a1f4501f3206a0dba33d540f8e30f5c1c1f78b4f78f0084faeed3dbf600e5798a8264cb9fb04b6ae01b2e141451adeefe678b1cdce312377b17bfdfa47773e2800b2d0bad3dccba4bb16e8336a06fb6ae7a83cdc6bf7894fbdfd37243bc7da30bcd0a9e5df42643a7aa092650800d9868c9a1296ce2a94cce78094c3557d2614b2fe6bde5b714987f94f46c2893bf204a01b4bbb5efd0cb30b2340092efad1e2dfbf7be3b5af0e884ae76e2b5972e75ffae05f5d5788558e1083c2e886bfde1cc43dea2d5b48f6a0b305f34780d9d9e08ed150fbd24e3b50b5935cb0627f62f145d8558d53f86208cab83a579b118b44dfa3fc1742b8504608751f3f683d26a0d55e1c75485269fa9562746ed7c3cc5e07bc366c43f6296c330f151ad1ee2b7e148f7d24021c213f3eb4fa471947ea9be5cc8dc4f77f209c13e06ab21aa6aac5f21c515fbb6a026ed0dd653f92746d07b87da2e6fe9679cfcb746dff516519a53e8c4d855733ca604c6f9657d04abd7fe70796529ffdc74b6c5d900c2c51a826aa517b094f433e414d26dfeb71a4a90e0c9b295cc4c50f67d62f9941cb14a52fac207616c8a5f19bced298c8fad3bd43233b3f061f4b857db0170382fca0041205565da785a3630b2a0f2bf42b64bac78455b882ebed29626a14881e0827e65c87922b95d96bff5f997abb8b9cc1f1a8ec1324c0f5f302716403dc407d5e65530afbcceb98bcc96ce5cb2839cd0a41e37f0a0963b5a8a96d319e9008e50be38ab9c0428cf6d93b7881ac8fe49777e6a1161093e5b599239513547901c0ef5d300f34c4f997bb71691b389ffdc1417797de0489bcc3ecef080559e2c0b2524ea92ac2977d240f9fbd9c97f524b7ab0916cc258c0edafbb9d0db347818f231adb80c183337d8e24ccf92f6d0db9facaaaff1df76db054aa01b140a8b20da4fff29610e21ded73aef881afbcd337d8d57581d22254323f5c16362e73e2ac50655fddeecb95bf7b334b83f75bcb127fdd80da8ac2dc13cc9bf51e235c796d434be731f16251e86e492af4bc3e8b056c3c8b2d315cd5bfc390f90364bf6b1920ca59e0d3b5b7dd04112202d80f93b756353e305b115ebf73dc7e6557e90ef98eb11c4f2269688b7ae720645810547417ef3c0c9929aa7117147b5003e208396c7bc0cc1ef2f17e06b1a8495e49af48fa45c2b7e15756b19dc1c51360147920090b70661657b1a0f5043c2a6bad8eb9def3fe67142942fb2462f09510aa148703a31fd37950b6198bd9cda02be30640d4efc470e418716fb791ecf39a4c51ac4a940b696cbbfdcccdc50aa279e840a674f56874a23c07a1aebcf1f8ea8892b15c4d1e57629cf3a4053cce171a6da9028af0dc6cd98292c53253c1a667798c1df6335478da37d55a7ee455cc76a30e9c3af82ec562d4f6d606b13528f63a1a3ba6d5a97174a622e3a7ee6565914304f9cd7eaa733c25b78f96c0ec7620475c0dff168baf8b4a4fdb23af6f99a24357399487596e4128bd43935545ad4837f528d0376c0814929aa13eccb0d2d308b7eb43d59301f1757f76fd26ef2281af2ce472c7c03d900bfacb78b23f038859a19b0c26b9262ac646aa8c7ff712d05fc658353222e3cbb57a59deb209d4fa7afa030696b43361bf2db7f5944289e5568f2e81baa7971f5e23cfdfed26b6d02a38c5eb8c757542b6f0f3390b7d054a5358761660d989ca3b8576eca27d0660537aff2b9e4c0e90925ef666972cde88817baf0b7317b86cb91e84cea5d521f773befaadf30470738a71564d4af1c0cf50d32114f79b207af534a36980e806f633bdd4c05996d020bcff036b2774ceeb451293bf08e7eea6ae5df6c651ec2bce20ea63c38b655e4db54203aaa6c9a4bb86982e67253060ed7391368b56e0c0ea29c86ed8bc1e7b9cee18237d261723d534567191f4e935d5554f4529e1a293ee59bed4539512f866003265e09072467133dea0f1af01d208541366e4f4cf3bc6bcdc1467b9f84c33a2d289ee881eb67bdc3ace520d07a3cc3497d7a84bbf06d0b932dd458b70c442ac7f529786da0826f83c8ed940d562cb55460078175abdb00dd82420c7e81fadaa7171b39cf24dc97fb1641a713d669802532f6d3079fbb9a2eb494323c2142bb4b9f3f79dba72e1ad83685b0b7c3d82070b3e7fea88dba0e6f207da421f2cd348baabd9fbca12986675c36bcc91b8bdc5b8f491c8f47943bbd918d3cc26c08cbbba9d6887ccfbb09d8d63de11682f034c052eb02db55b6917f63c851485fb43785344cedbcc768a770763bf973a393c6f28b6f5af05bf0461ea44a5783ac001c70343da841f0dcb77e8815dfd1c3bab9a159c7ffd4385dc9fb509c3ea452f4583ccc8c6a6a4fa9a2bd5f52dc70c3dfd956dbe362a5a0fc07ef4c5612f561e02023bf23d475e57b95e00250bf2ef403ef26850af580d72d55ab1be37d19fa456f5d59d47ebbe1d7f0bc9ca1eb385d07f7b8360c98f9fc6d1d301f913dffc994ab42835b5851f8b8fd8b1bc2c29e38801d10b0a76751300d43702025c6f8a3588c88ab066da9ff86dbb090812bd81f51ae0deb696ef1585f3c79e88553df648a40fddcd017a6475809a335caa6a72e2ed39edc0d70f7dc14aea300defe2ec880091d7623c13c0b4cfb41fe3335a87e80a35a000ad12438249d512e72fa20a7db76ae196e15854997799055c4ede601658ca287347c0bebacaf9f7486457caed04b3cb4a0f63e35f39443d7143fc224fa3deb0fdef0a9896a15c04b6eddf105eab4bcf2ffb921fe42d5a6bd0d88f86515fc20865f2c092c3c619786864816632b1cdfa8c3886957a5b668f1beb3dd426920fc17b898af8ed4f5813a33b4a12f33faf7d016d6442588f397bcfd138e4f37c713e57e565795788871adb50819b28e7190bcda707f80f360a96c0101fc4a7e941aa815679a4df4baba9b764a2bb5e82cc3a69d7a2100c9a24c53b6b006432b4aec385a3c98681090c75de64e92e50c3e53ae3610377f9b2c12a79aae76eaa57a77fe8919efcabf8928f4454413aaf9c6f22733e067f25daa0dc605c4704d8f6bc08f788a8ba3ddc963dc4ed2aab92dfc377a78854b67240dca407d120b20b1f9bcf4e15c5272e97ba6ed713b658cc2aeea04f2b48548f9e4d0a2dc8d1e198cfbc4d8c241b618bbd37a70e1b53b7f35f9fe97eb04ac7341d30ea3f095b352d18945839c6e06da5bd9c433096561ca77a8b4b2dccabcca5cbe78156749a288924343598c0ace6c4d9b25f96f33310ab6c17418f7a8e53db879741354ca457356351d0e533e588382383dac3a8fcd109c4d622badd8d31fc692b175a24c11b5fed559fb6bca6e650213ad45eeb7366f055da07e7ae117e9f0a874b087babcb2c187c3bbbd0e80accf7deab5335889944f6b59170ae18a14c93e10458c7c6acb3f746ca3d04d1d12f9fab068269ccd8ce395f1a8249a082df42ef134a695df9eb05645549ee660f4fb24d363b30bae3642b71ef55eaca452de79ef08d08cd56e491c02aa8cab95abf7ede2ac3b9e4f00497d8d86f57e45c7072c76c77b13266bb018fcb091d1d261d5c40d34e57b5a2e28946197b7f2b9c620f4d0a325abccae43722c737c38a22831ddaaafe1b98a8a9f22584fb5b9411232336d58c320f9fe81fab6ff068b6d7e108e555723737b0e1ae58c09c5aa13255a027b9c75108592f92f68f326b569f9d79a76f379806aab405b82b5f8ca5f158244a871eba458796e79341cc90ae910aadcbe8b3dbae6804b6482530da90a2ed0d082cd3bded5fde62e86e9c2e40363546ca858b415d17cecdfb135c76f26f157c7f8665f7546dc0a78d39e59c60fa6f258b0830229d2780207d577a3cbca3bb9d6e6f6dabc21ac7c05a95bfc0fb5152c07cc1b3d9003c6a56501e105c5577e37ec903010a3595edadfa5968142750bd0ccdc54aa751437d20117b91d3bb932a04d1e15af222513415f34d0ddeaa769d85b69a30b69d54fec0252df50dc7e234381f820df53b3e74f809d3b49c293830d9c7bc925a2a9954744eb070360ccb3c987d7ccf5f46ce2af1e425a004d12ba56431ae4f3a6097306d3b1d063c9c5ad630065ad37052bfaceb7ee1e883b404620bb4e20b4a200437b56e0a980f13b929a1b4666ee448496568b9bf43509c7f927c76ab4fa502affbf4cbc11cf752a40f3520b0ad247e9cc7fa69209f1323a0d1ec3401612f74e5b184626642968e4b8f5abcf7c27267d2b56b9a38bce7759d815333e1e7e77a1f40eefe64a53103c3f3dcb4c50a1ade1bd0a643e24dc1b899ba7b2a10b1f61a76d7ff4830f67dd64d44ee5e3512317a4f3c1710e4e4ec3c221b59ed29337ba5f0f0947755113a75e189ba86579f391f0bc31d1f432d2e8df17334a90b1df4d76bf5104bab54a6f3817d9c9b2452785d5615912c0e0d11adb445ac1a274be7a238b011f273b28ba170baee079709fc575367cb98a0cba31f376c54fd86bf822729dbd534038f48405f764ea7869bdf173b608356ea4df3e3cd7fe0dc23f88076d8fc5cef1618309cf431b5903dfdb829b53d362a60334d8458c35eff4a26dc7d66a9b51b4e2fd1ced644a4231e5b13654abdcf4b4106a8636d60825df5dc8fe18e3b216f98944445d9d2b1c7d626ec011520a5c5a8a40118f481a8d860f055c6f4b8382535784348b58e80d50094b48222034da612662ffe5b2f9db0cea9fe948c7698a61391fa9ac5171f08355e3deac83916a0ea38f6bf54f3a0d131d5fe9ac7f758391d18e2e4f48b638ef9bd3f7a96ea3e56e3c32a8ec3a32b1cf07284e6647f8359a49b4e444971a07a3247123f48d9d56d1dd98fda8c226360ac737d235fd99a1c58036ef64cca6ecbe437a57bd3e40c516540c096b86a56802e6a8958df94d6bf550517dc43d18f26b1f02e4b62c79da18fca3c5a7bb10a1790ab06be7c889e8fd11951aabbc0c87496ae38b842d6a3ca1b37ff1d2156eba02425607d25fbb7583fccbbb75c7bc35048571b097738ea622b5fa9b0c2db1eb1adc1027de39184ae8c68d35d9e086e81aa35d4d1247eecbffc81aac31bb55f4636a7cdae898d36c460e69e8a29683dd6e264a605508671fec7b06d518cddcf2af1e5d284d0e657470b47e548b682f8fa6cc20c2201980ab6433f28bf8c81482fe2a4a1d6bb44e94170c398f264bf9a96d8700f8bcde61cebe4d8835bb18961fa54ab3a50f0d9f32ea003239e0b1882cebce7160e83e0ee7944285996f28036d96a4360b30a97d72c35cdd348f797ac59181b5000a6c6765eb18ec35968c178cf995642f0b9e3b80bf41540ca32d720d11d50607037c7949691fcf05f20237b4b98c06bd31507a0567ba3d6b36856410dca6ce283cbe86098fc9d2e3d051051e3fe7abdfbca953fd57da6a86f7751a16889faee8491201392d844993284029efc7459f8179589a61d454b6c9aa060698689e6e98f0f2a5c3387019900d8e496c3a640166fb94932fccb23383c0f046007daf02db9037c9182d56a18ef1341a4458c6bb60bcd1a76e655c59b6d8d5e56f7abc1b7c8ccdd6e614ef1003431b35cb39d2e276383aaa86d6192a8df61a5714448dbb0193282c5a1675927f61cb99582b2c01f590758bec35b45541544587f5785aecc41f046b4b26a2afe4d4414d7e0f363b002c3a8a7691e43f6a601ddfd2bfa72176c00161a625d0647feed0b4ae1655e4cccd60c2500afb5cc5c64a4c8a4fd46211cecfce6b003cf71286c9a5d07194fbe36c33500a24dfd0e6af809ce1baea08ba07af24c587117bb690930e5a6a556f9cbca19d5539690e560d2fbf06ccf4dcb23756642c7581ab076ce471ddfac2208d71f691d30977be11adc41f9160a9316b770c028b16d01cabc94a8a5d3122366865678064fbae00243f4b1950f22a8ba61a59a8391157f99b01ed5fd03e1e55c54bd70600718cf6a76687fee34e15d30cb373683c4fcb3119fc6af2c2bb19e0d2888296dc58b2c8c5a4e9e971dd64efa8b73703daa03e1bfab26fdc55140a990622efa2dcd495c048d700f543fb06f9f76f3f827ae889010ac6de40e35a0e4953d0887d6150a6e58d556156aecd10c1e52e160ac7003b8c9f216d5615742d364940e0db83e90aa11efa60bda8f9f332595b0c8b16657a74e1b4e127a556db45af883062df788f5efb4e22b38c3d89a4d5e46801142a1e881d2d1af978110a557411f4de22cb122e4c7bf5c198f1efdec4070e4066920da402f5c362f3a3cdbe058c852d34c83fe7d1d10cb9b8b562b1bf569d84dfbd6af5758f894f32f190d5682b031e85fc2a2ebe00a5bb58f92e46204d663b02a257dbec8d392309e7245dcd3ac751b664eaf65ebba301826bdaafc1bf6bfdf7736b38bd16a6d4744752e91ee96be65999f0266de6a2f0c726f70b601d155fed964a54c1433c9867de10334259506604d0693da386dd1ad411046489c9996f90b285945259e1ef205435843b83823de8e8031bf1f30adf9ccad9257e221207cb260bf113b50085a4776de22fb5b42c776ba420bf3537de59a94fbc32070507c09c1e1f46577be5fcecba919fdb6890bf1bc100ddf1227fda20f83f1a6eeb7c95643c10ff1687292e06a7e34e8d89f45f943a0313ee3f9c783dc84894348f0db10e25a22c4e73d74b16b1412b4cec359ecc802e9ae5fec69e7e8d71fbb671ceea31e5e4ab1682b27fac9da898d653a64532686fe4263d657b0f3c4f2fdd9b9d55d920f5566c43165534fcc32b8d41688929b37721337d676785df5d90d6c95b70aa3b54c9c4145f5283bfcb29a447f2e895afb4ccc9dd59dedfad5a316e8cb3383a60670450f37d772af3b71de788071b50f864f0693af4ecec14e2cfb543370d8874fdd2de186b51076580b317599db116a5d6ecc757519e3fe851a2a7a0dace057ab751b3ba501266ec36c7e009f1e8be56fe42d3bfeb1232b8604e33e0999a3e499443de915bb0afa61881fe2586c4e94a29f87614a2fcf192b7f89dc811a241370f4ec2b0a4b892660e477e5824ea5a9e5212ac0171ed92e6757235279c376d587fe22cfe539004559c7108fe25bdc7ee77c37ddf14dc55f15902bbac49fc344b50ef57094bb5bbdb0115ebebc6e70f10c2263dbe4b4a2b03d30cbd6ec89b21370232c3b620cfe980df835a1986974b7b675e119892126a3f0eee9351bbb3a7dde2dde9fcf684b353c94f27f82860d4f4c4ae5182ac39adc885530d708e198547f0d40623405b179c12e189307f3862800f6114e92a1ea9224f7e066add81685eaf82ef39f7f3d5d486dd0f879da1eca8a01258a0e1b1dded50e951e37828f4109aa067e1d83715b46a51ca6bd961ba568452c8e4717da52372a97f32d45714fb1b740f1911c4511c4297bc384342c7a1cff19434a9f39c73a51dafb33fbf32738a115150f1b1a18bbe3a3d1057c9a9ff3b321adb3cb5f1359e273360c450de19cec320dfdfa85eb4a0c9320814c86f8415afde78dd8a1ed57bfadab287058c7795c475cb2d07e9016ea167579ef498610b4de6c9d506bc138d696f35293762dd4f9d1c58fc7651ce4ea0da97f6dc261ab3c82e326008fe166cdb04bc53ee1ed173be0312269ec9042cc474968569263238c6ebdc0e333a242d61c323abab2e39acfe13935604e4234c90336958e6aaa2827fa2cd409d8f0b735b01e3b99161f97e676e3a28576ca78f0a4023c8996df11edb1b901dd1ef540f6ff2002ce09acb823ccecc871f75d27fc94ad04ec9b02c531a6e28f86c4da148d3684ded38e95a65935af1196f0aef2b486bb8f60a5ac601fd05ad3e4ab542737b59d1bbf67435c2f8fa71b3a5d9389ff8f6b87b5072ada1c36020188ec87396489d1cf3407e2c1090e10e68a9ee5574d726579815053dea7ebb76ce4a8aa27d8f8534ac006323bb18cd09a4361b4ca35a2166b727cada4529c6ef11bd9d378f94727e4bcb48831637109ab92695e776310f463df87e1f712cbde870bc063f17b6e3180edceb4cb3089c0606b02e224214628eba15b36a2ebb2e50418613ad3eb401dde0d3f5e0d7670e38c6e9192f5c3ddbf25124bce8fff8d7daedbd0dd53eb877b24d16b4558ed9e669990155658065a2f4714ce6e3fec53d8bab8f5e2d991e2c720a30fea37c55c78e1563b66c856262113b50a676c305ec35fd8e02ca55be72e466318eea47cac3c8cc5af41ebaffd0f15481f8d11250b02e519a87ec398396c20128ed913a9265eadd27a285a14a61833c6f7036e7c0372604f2a7602297e32a244992a9ee72f611669377e18791d661eb5abd4a7b71b954c456cf4bc42fe6e17915782d81dfa9d6cf41108bf1c82aea2afd361f261db4e46e5f5a012750a48563dbfae8585b999a8648bc3c89083cb9e1ed3d12cd38c465493479523b856bfa75d4c5ce766423446c1b28a72e88ca3240ab684fc84966dc600adf18ab6337ca522a57717225ca041818b4dcc2e92b22b990b344fa86ea86461c641a2170265a4be2516630dd452357761b200343a478bbf13ebacecd1723cebd6845143ef1dca84119990f5113e644f5f170af0a9be7c10895ee1d77ffa1f3328c733884f2eaf677c4a99532209c5aa77e6cb91845aab1aa84e1756a88b48c3137821bda656d806b3be7eaa5f2f5a9a5b797be5b6385718b72e528d614764856a459f8f96a27e33d3f40e6ba899ba3e24779d05050ddfb3c2f1b6b3b94c1a7d668009c4211b8bdf272b0360c57688040bc33ccdb06287d942b924818e8e8ad1d707b17c9b4948003d9b3e0f4232fec3a002ab41d3c8e3c8fb8a7409bd06698c18a5b61ea6b1871514b91f0916f6d3f5d831d07db55ebc3f722b08c4552572946b9b89dc511140507d3bbf908954c75248d33b5a99d6b7c0ee69d1886e68a3054a3dce117a8d73e064d470a501d1d7bc4b3104721969fb418ea5f19a80e27fb05db625bf25dfea61640ef10176d20282b55de498b48538d334e9b8068bb0ec0f2dbaaa20587df75494b1c162b4b6959c9b4f2447c27df1859be58ba2fa1b2f822c9910ed67ec75a2221905ad19dcc03caf5052d0262a1f74d2d8e596d8a4302b88fc0edce741934b1d454f08af903e84698d25a96e89c188b94df41a22f957025164881c49fa72bd9be38559b72e8061e7125b6a82f979738af5ed56e5d15658ebab0e3e09441b004a1382b6907802834e2e534138905651886be06e843e5d4988e774c723404af9ed0f5d23d6fc9f249f338c3a3cf82ddc5758fda11e313fdca6e7100c75a026b3a9be6b30eddb0e8f1ecec1eb6057bb2aa85b92ce896ab93f8d6cee8bd9ad61b643ed74878a1fe500c1560b2f5623f35a423b08f1a7c9678c21c5c6b4e2bd93df0c3dc27187ccede789e79fab27501e0a14c8f0197ab4dd35878d75fb556059e0375ecbc952a0144b5634fdd9e0be651e4cd5c3b2dc36e8b0d9976fa57695f8213128f2fe401fd8158cb22c074ed94d782d5ff37ea33ed73985321c84be7b63de30a6d6a7ac4cceabe4b490eb0ce414670e40396321fb2d42ac1bb1b1d67524b5eda040a55600df0778ba6891438c304e0bb9af803522f7b481a4d2029505aab9d7e0424cda426d827f547d840e2db453055a26019ebd32986e9dc5daa3d4e58ddeeca234ab1e56b989d152ccc8864e61317da767e6e6037427d1e5b0d96a361c284318c9dcaae13fd4896397ea70922a2c688b13c1c65dad6773ebcd234482b67e894752b75c2684ce1205e718630e964745a05389c3181af4959715a76d767f328b9ba3113b3ab27fe30461dc5126cfd12a76c16934d99d7436bb410af6201d83a7b12a33e5ab25ed5b118e5d49a5a560344a2963302dc899d6e44c982463385a9103b7da2b932789655a8e90c162d5bb88daab7981357b0e3ade11ee034d621631ae16cfad9c5bd99625b72f7d535226420155e5af5b2db9874defc44877be7e85cadf74576da40e805f2f9e0ad9d0b98c3e93ea909f744cb30f92360496e15fa7449a28328f92ffe65d82faa5ee59de99aaed67e2e4eead6b8ec5eacd986c4c4e6078aca90e0e9172991f84a615131677d8086f58f999edebcd891d1bc4cb62d70fb2b7718378f908b28d9587c7f7403096cd24b25f8bce20fd88c05b10be7c13c42e7fb3b330fca225e2bdc44a4d7f7af770205d1319241c6017a4f935592b4cf0c2d13bf2b8dea105ba96cc7caae2c9e425af4f4cf97dc537d6ab7f6ccc2943291c8010880250423521753f03bae2a50fd1baba8741f11742911cedc6ab6105d141c0958062e96eabfaebced7ffb9ce9423e25920767b292853d04cc630c8835ade1309087d9dac5978d53804230873f4f0b030a777c20c698259f5fa2643b8bc3569bce160691014c30635b1d396c25c4a17b25861bef523f38bba841e76414b51e349bdc204a545a789bfa5d6e847b5bdbc18b83ee4718b1cf0ab493358cf796ce819c80f886af309cc2922698cddd6349f0626e669a417d8a2ed2496d20aa3a81cbde97a7098f661ad7d51486d5273f6a87b6f61315fff3e133681443b849185277996861157d5fb3c914453f4123913cc3406aaf37acac7623260da0aa7b95d04acf4093eae7aa66ee5af6298bf986d5617cd2a4ae433a85cca9d4e0126365fc84a17700cdc5578baaa0f4a3473093ca6883620cf0286e820a48366ee94d871e5b9de4831379199691f611dbb46a735fbb2a21c6814fae6f872306fe0fcdf6aead79c857ad132ab96ea385e2298e81fdf033d80aa8dfa13e5fab3707c3a8c22b3d102ac21627ca0a51a56115502a24b571ad320f7c09cd1593d05d98558d0d2d84dd061ac155e73c4c511a48b710919b4f7542dd5580f88b1371b9014910af2b222c5d3ff13f757c7a6469e23e9a198490ab6c08a10e8e6a3bc0032a0dd2da43f740f67361297558a1b399e2b8ea165e8fb67042cdcd13da3899d55887d3814c3302b25e86125f84add48de96e25402d26a098eb893001e7509b6f43829be77e70fd002d22f7307b21fca92a3d8b3c0ff8306247087718f428cb4510c5a5cd8ecab369ab973ecf37b1119eef9f254fafad09f482a1fced47d98ce047a11bd96b3e89a9786877158d57701f5ae2e41b3f6d7c7e6fba2bc00d1b5f1bef073e01d1b6a94706f3126f4804fef982e442b58656839246a2ae3fd704a5c24c7bc46e509a53f81a7a00a6c4146c644ec4011f8493db0c03c982df1c1a1c40701b96856bf8777f58cf60a91481d5dd91513325864bd5a50bedda05b38e67227d76ab2ef0a7649e8e16b40bd63c906e134bdccb81e257e59cc110036f16a168c26fe153c1600bde05e4393daba7dd6ec06bcc0b70f60fe9591c7e60ad630d158382681106308c5f6c07cb693bed883510c7eaf4c1832814301cd88660591f46d7e78fd43ed470dbb7fc152b470a6c5912a8961f9302bedec9c3268e6814cfe5aac6811c4d9cd82438535affd27f5b707869d61cd4fd208fcfbea89866c5ef0863bfc626512ce78e54682e259fb4d2f034c78e5903c5640db8e16da3932bc1357f0026ff42d51819f89ee2c12de458ccd5f27852d6a369f39a85ffa221d48050ec50b236b826ac581057e976afaa4c2b95c960a28b25221a794c5c2bc1698a44e8803808d00e2fd08bee1a066a7dd208d8fe1d11eca808112fbcfc86ff1257b230cacb2dac8b52804ecd50725e9de6d31f918e88938cd2d2ac9493699ad97ac93031451064ded6a18c409cee6aae60a4d0530eb82f44cde3a088a247689ba0cb9ba5b00e0e0a5382c873b62c25010c1bd87503083f560275b64c58162db16ba905aa73f6366191c39e893a9810806f701414a5d18831f3c69cf7590a8443d6510ba002655b6ace4c34bde9672889808aeaf271db283223d273f354bb28e08d6d81fea091ef9c484386907a8366fc5fc53ae4419c125e016dce9c58a14aba4604b85195f51a309e71ccf0599a59390801828821b5a24d729baf204ca2175a9d746f658ea62001cd0d04289cef6cd3a32d854d133f5611f7b929ea162f42b55083d7113330372db5dd6bbad28c74e744bb0c7ae303239f296312d636c4dceac676f3f70fc926150aee053394636cbd4f52b2747daa22522589c6a0dde8ab9417f894a49d5d3940233e27bfb01b21e44613bae86354819fdc0f376aa8e459c41d2d34e5b4828a8982e31f8846e2973a28e82bfab6d1ad052a400651bfbdd22bec34c230c1f172b5994f7cd89ad5ab5dbfb6df0cfee6e9c88be979276126bcd2f9d030f16661dd12b69f359dfd89536e9c9515a887158e1dd26531c7bcc73b274a50cd8d0a5bcda527b36c9573867d38ad28043f0ba9555f91d0a709db8c755c5578cdfb9c1cf89c70347e4ad18a4a403cc3f4395368bbd9f169ec1b4d063d8d2bbc4ee34c1da68e9fd44564ea0b0ea0aa2255327aa22900781f5e014c49e6d37133a08ec6e49f67797328a468cbd440ca3e8a9a67f3ec39065b21b7502f4242fa165fd9888e28faf9485604b2dec0452ba0af0e0836449483aa97946432bc643362ca164923610a53577cbe6465abc486a393b8dfec50c22322197429d063fd2ffdddbcaa57e268d4266e38ba4e0c6383d79fca03613b03b1ad124730b757495a55e8a1eaa9ee9c15c8206e5e4048b660b839899b982f846136776daf1822c398d121a1eb2a6389c66723111124ed6a486a8fe7a09eaf111e562378db619cff9f0753b7c0e75aab6e99ae674683cdbd7b54f7e304d7d597a4f3d9c7f7ad6152731289bff336c6b49047f35363466ccdeaa56dbf598a9525536dd9a198341016002e1af0d3589fbb76c40a7c0d313b50cc9a321716865901cfedb9f77ed885d49896a240eaad56937b813bdaac978d7eae948e8b1969ecdae2bbc7a7db9bb381830757e8bae973736afb1541d8246108b3163b08b7b2d2e669d537f87459f1df9c6b3114d56868094b204d4842f7ff116697be0ac87094800d1eea171ec7d26ecba22654b94e14834ec7c3b236dc444c9a182736badc1a91be52d82153acf4e34801c32ec3829b1355f04c4a2910f9fc243835d335254185a96e849b548cdb9eca7d6caf214870d769ac53f779d1bfda83ea48d019515408765d1ed65205a8bd7559316d7135f1f7d25c1e667fbd953584014b55c1b42c87ea9e6ae647020aa94bddcc57176820cb473a912226a75b514c417954bb96deb66976c88b236ad0f91a6bcb9c3321097f5b61dd667384ca59dc275a3b3f4b1bf59c23540c1e1090522d8f12e947bcb84b7750d9c7a39c6c6a5954fe8d2bdc75e7313ef86f6cf2f3a5b091c315985019a20890c9f83ca6dc78b57067cebb13dd6f7cc6b8db19b83baf150309db29db9cc2e1eea9a1d56766b64b005c1e21df5e0925a5574f597acc561bf14b356c9c02a7982be71a83f06b09ab2bc61abc3605975d36506ce247fd14deac69befb885cfd08fa594c9c42276f655c150e799c052964715788455081f5456109774b86d95eda85ffe98e14f1ecae35339013772045522da8796e8165e1eab0adea4a55e2e98c42b910e1d0d4f1f005f2994bd7649d9b6b553b132d24de2b0b99cdd125d0534adf60e78b0e1d545598c9fbdbaecd8a4241006937549db351c6bfbb52fc07df05919d4913d057006dbeb9cdb1fb5128d973802c9f6c7287ccbca90379f488dac40e394c4c1748ae859ac517e3a9df258de08c6c3b984944988696a5f27736f6366b3949b9678718845e9974b55b1c993cfb6b96a962e4d3e2c61fda877f06287092c3c6eb5bd36d825dcda265fc3659481b8aa20b8cc5d22b290683b2b2f014f438332430792a6df05cc84bfc88626d6f0a34d2f5346e4a2ce8458a80acd030d4fb74ff8eab574e96aed562a7cc20f50964daa07b6fa157df9f6363085ec51728f9ca8d06806f4ab92d628fc764810daf9c85a8e7ba8312e2cf63964d4ee223b0e737cf0b4fef78d1d88434b6499249ca2bb437c104c7585c83b11f0bbe15d7c32aac91d3adddde01c45a3c03c5aa170c897ac0318f32dd0bc16e6e33740cbf068d3c82f61a4a451c2000fe0eb5487a860cb3b7e54cb5cafeaaf25f66cddf65b6be723cd3dc0decdbe9248a918c940e9034dd39024ffa492aa499af04c4e133eed388ee0d0cf1a224de44707ccb6f497243d8464826984ed4e2bd09aefdae7d251c619930ea8efdeebea3998175a1206a5ea5144349a60336f62f2522d2b3b06ac8847a06112b9b552fd466b87520d28fc855eadce12e634a0f4e8acacf74e0d554a8c8069fd8ad6ecba649f8a76a041172ac2b8d30bf4d1b887ff181f14ff32d8a36575305974c29979c27965ca31bb5fe5c093d40dcd85a268d34f520141998cd5953dd0c762dd0af37d830686c4f9aa470f19ad8eba2d0f8727db33365b6f09290ee20d0d4a4829b10ec70ba4bb78da9090d5f029633296f5a70c2b585d2c462b48c678e4e50171134dd6eb93469ab23060841c369badec666169fd7b9192f0caee96f198ff348e9691af383c6825fc30edaac8d7a27d47718e44f1b48284530c244b670c72db29efff7cb2672a8f2d4d1f31222c9ccdae28a784fc1f264045999b742e75ea96dc597e4abbcbef93f005a24ed74e841a035dc2c2991185662d2d95b3c3b628cb18cab85f7839704dcb5c9b06530268df3504e365d9d245e3139e26258c3ea100526359fa8438d3ded00cc18a933ed16c7c10cee840417f052b723f6dc9fb4bd0d4e7996432176f38cb91ac0c762599adff2f1d60bb6e0774bdd9de9ad21cb2634652c0a662a47a181f39a1887988ba6799b031ba911ceaafd3d4fb905c7328fc836a3793d04dd789320118a6d84e985823786f8d14e8a475b934e31513544759944f8c5e1f297428bd54c32f2a86be866f99f6ae2c7a42b69f05f4a063e5f50b17a403b781b46cb9ddf316579c786f1ae465448c7c80f31d10c79cb6a33132f573fe78cd832a1a34476bdb74197e1cc317a227de5ffd2de9dfc32f3a53feda2618d929cceb174663edb98ef77a18c5452a600c8ff71cff1940ff20d5e69c1477216d299dd743cd7c04382c15016e0ee9069fa3578dde8653bf0d4536f4bccb5ad3e84aa94ef64f2d812b471e3f260782279c2360b87f199859433cf28db53fd0957a88e341a6f321ece33dfe088b1fd39ba20a2d21492d9b1b21a7888fc69d84ba6c90d0e42d67ae779297f15e211290ea02ed592e4561cea46e7f97a35069b618d7546a5ee1dad4bb1ab4593529ba482d878210160f2a38375282673d1553ceab0a1af684e28dea59507eddd4ce3ad35ae82a4e11dc374195ffc2b89f4cbc43ec4b763c7f819244462a28ce61c846324475995d6020849b5a5c13d3e11a5780c8eb51334b133eb10c4efcb0f8a4242711d83ae0319472e277ac9643f6599c5fb32f090be91516795c19bde95c8d515a0ee9cbe53ef1719bd3d4267f9038c7597d0bae9964d325fa413011e4a004f2a3c4bbc6a866d4ab5502d72b02a211e09460ca68da3a25fc5e996221f8a2b784a9e2f7217192420ff79b54110d8753db00e897de1a4f7eb6a6755e993a582c3c89cb9326e96f86bffec7a9e73264774f398a1da7932763381ab0e3dfc422373a3bfad7f258b8c35428910099d11282391f8eb35c57471a6df592528e28b3a3557e6cf3f17a5b0833bfceea21f6a106b34815436657485541cc706eee9dcf3cfbe11b021b2c8e6ac68bb92dbecadbfa00afc1465308b1d5e5131a1b078424df070d20b9b0751da151e8647a5bf8ac46ec586b4bef88052b10328d10b0906d3324a1d5f3f19ce8e41ef1102de8d21bf47515bd14590b6e6316991ae1340fadcee6d0eb96daa20d0baedd2fbe81d72ec69c328feade4f32ff90dab0affbf31dc8671d637cfd543bb055bb82b488b80909edfb3709a53e0046012028b495d8670985b3311e6bf0aea487698ac4bf3e5762be5240218397e698502574ce2aa77c6a7a989f7373fb0721a25d29a32d38811c206705bb01ad0d62bb4bdabf65a7b0c02cf488bd33da88d4d03723dc997dfccdcfc044615258ceda06523e7bd9cc656957c25ef8fe0f853b9fd5e3490694c42985aab97db0c611cb39cab39cda1d20cefd21df4ffc3778d97025fc91f671092effccd29a6725883cc955df79159010431dbb724444de72b0302855de78ec7bb2473035a8baf2d0485fba857385cb80835f53faefe61878a94a4169cc1aad795bc91bbf6cf4189201c54276db91a4786fe6c0f3a87cc296741f14cbfff73514ed5a1da964e7b3e64d17972e2e575e6ad92754e57d1930c21a5008fc848086e852896b224f22b67b4d81fe3eb77d07ad798d5c8c28bd967e5c31cf8dff162086da2429d75f131255ce758909bb908b5ad7cd4228e2cd3b15eb2f156b97b5b05ea045d394fb6b039b8fb952e28b7c8b9354f19346a3641dd850b5b5d3d95e053d2e2de4ac483dbc8c1918e488b9930142710ef57f309b989c764079f0ccd6759f8f8064d433e4db1e00018b27143113c0f7b2aa1b1f7524ab5731fbe6cff51b3c4fd47d8acf5c1e347e6ac7165cbb78990041aba5803fdbc6b4d99d77fec16f23ea11ce4ce59d918b09f0366de834a8beb7bd1e87fccf53e60f20dfc8ed5c1025650863fffa09aa5e4b72fc49fca82a077ceb489783625eb3b4c010b87d606080167c4c35ab07be0bf67b16feb7c23e5855632ea155de6c74e82663fb6507a23623aec78041784b2b7eb4346dc0ce5646bab565efff843012c70247f6910b144d5ad991d002bc99e343baf6463871b10262dbf964701b82ad403a29b7a1a01f62d7c655c96ce2603df590be0d4d0816c5a38e982c50f8e4eee86974cb9bc575a4c21e278b2de5d0a829244c4b3bc8073cebce133b9b64e5e0bb1dc7952bf96a7beca84e3402f30951b2969b0cd49631a1cfd18246a2a2e86a33af21ba0b09d61b0873ee5e9563faf9e0f0dfbe14739a08104b51cc4ad783b7758a91181c977868b0955b2aca38d0288c8f741853d8e58265d764d3c5d9813b6d912632b2b0aceed14eec258971712cecaae41060ca18f5ea349f3c6230ebd32d00f8c0de32b76f3707ddca6296d33788aeccadba9b836eb2d8abf40ca223737fe9d6a05b99d8f0fae6797884530d584f721cf7de6f0df216329dc674ddd1fc6790774999948b102c60c1a43e80d30e989b28d2c380f6a857a137f7f1bcbbb3690b50ec0af3d514917dbab2598cc400e859204494db0ea233d3233b8627ae83c4a943b6f9b295f53d0cb8b748174099e8c35d6b35a9a3a58abeafdcf78b2da08df7447c75a8b14e547f57dee1eabb476ca322ff8d618493b3d2c489b9feb6847c3175ace43aa2b16e0ef2aa399af1eca8bc7f2290eac0e15ef5f80da166aa8ce1e1ee8f1bcaff604ad30f4b350b7f631199f689d72f06eb3b1d25a460304d0634e3070ddf9c360577141550f23d7bf1211ab32eb99386099ce24e3acfbb28664a179f5ee0cfba68915b7a698bd64a42d7b394bf30cd405b6c6a3a087854d6833a63374a79ecfa08d106dd23f41ba0fc309c55b9439345a1259a31969df98ba88560777a1d2cdcc349082b99c8b836cfebfc201bb456604176719eb6d21331c135c2de03377ffce2ecdf5657fdd6032d98ad321e805055e863db44cdcce5a17e6a09c2a91104cd4c8b672d51657c389a5169ba5c963bd38b77d736261e6376ca538fca219a252a33e230dc169b0ec0a3bd20c3367d3050cae7f5831f6127d32dbd9b2865e074dc7f7f7581be214c65b428af6dfa85a3e8798ff69b53efa59f8ff23e565c1092aecce3d588c37b8223d61aa8a9e58f737c31d85cc9ccf9c6791778fe16e77acb43c8eeb6ed8166716edf8adc7b830ef33ec8e2e5e2ea887975c127110953fe89ce923416cc68e13af0cf0d8edae02b3c2ad814bc7345273e3f2fc449bba5c303fb35abe3b67e8f4d843f87069fbc2146884027e98f86b5e2b6789513b447852d9062fe37664fe01f4ccc1f8d4af7326ccb17102e638b8b9f801cba0673b2238133f6ef051decdff51cd2293c2c6694fa0f253e495460dd9a3ef148a0011090987cc491117d1d8cb6ca40e09b03e2f233670ca309956844cbb1669586dc40ec3b62001d0d86ac5d079b166c18b8ba7bb8a8a8cdeedca40ca9c7fed39e2e27ef0edc7a08ccabcef5e088f27d514d4823801835e85b51f97e3f2a6df5ded539af8ecd9e028737a2ecba43b079be9af5b6956e0e076b71748b848be7f73b037bf154195186a1ee8cada39a24884ea4407eed00c0ea4008dfe704553e528e9427dfbc0a24724960a8f8680576898a65deaa9247e9f8421b1346261045fdc76591326ce2af000153810f8b673d3d4edf478a64f914c46cf13b5a88b2cd6f89de1539dbf4879027d77776974b4076154f058219a01a158137a5003cd93355733d379fbe207fb833362600b4cff9c4aa23517dbb83a371856a1d3b244d7d1063bff78962b7a864765d75027b106b55e68b4b93ed62fc028765cecba05f081a3cc87c97accfd68da5162f558fb03c4be7c9b228e0d0874f6f89df4e48635434826b67e9a55e48d3b060fd19de5e1ff561121d58b25588569ef79656a26c429b6cc29dd89e7e246731acfe1935b8ac8de4563aa401f778d59dc28a7f4323c6e2fb9a36147b8ea383fd29247788aae1680f007a3c744379f97d43b9cb1cfc76555147967e8997fbde2618c0ced129bdec3b46dd9801f8744653eddb9f38fba68cddf0a8cc2b7400a08c0837b755dc7f87cd3fbef4a3c2b44c0a17ccb46791b6cfb0302be75a74ac1549e8ea9b6637b4d26fa7239c3e8714dd70a93712f42dd44c82e6050e3df893e9bee1c75dbc5b7d638d104bd0b4541309fa0b9ceec26fb0f3211f5aa3cef53a653e90d95fcb201441dea1e93ec992e7997b4fdafdc6883d6b01e5677eb41cc594891df755d3b2cab9de098ef2b9db0bff0060cecb765d86aaf05c017a7c595b219daa7c0bebeedfb53b6d241707032dc12134f9312267cea02e80e744f6bdae70c3ae9ed509532366eb6ab727d488b3a6a2e72dc405890b98714eec1085ad31329344ed3278342816a5f025c8475c740714e01a492afb4e68f16a99b0d5740426a47ad092690154b5a183bda2c785269e04ea8e2714c6a4561a9831212bc4e382350aa1340a609f62bc39daac52a3b48bc6a1d488e277a85d5c92458ff50749507c217a1ca54fad5184cedef84f26cc610822964c83e5524281a408c5fa4361fd9f580b91102a970f42f06b23dc464d0e34d36f57b69e1f20733b514165ef901b5853fb41384dabe68a6f147fa449e29f183e554036d2761b9f86d858bb04cd74113c0438d23b94a1c247cc321c218572e5a4a262c764c8323e354800d9fa31ce54962669ac8bff0c037c50c1c6660881ebf3dab0d1ef3101406a5c4ac037c71a513308a4e3597f4f93829e05941f0dae49ff9327d145e5f39be9c419605859c0c342681ebffe3f38e018698457702ad0f94d834ecf01d8a481da6edcc6f179c0bfda32f5b11b710a0143f154f505ec773a35909020b2c830e10e01e7f4b2260425852d32f51eb9283e27cb0883e540abfe0eb608672eb94819fb28b5b5d31fccb6d706cafe84d5d7e29a8e2bdf2632d462ec77c3b81e78cc0f02f9e3690bfa45989f213b6c3aa074c6648cabb86948b28179591c62f7fb7e31817990f21c84dacabc0f9e4bf6cd47247de34230a70a97ce7cc4fc262f96302bc118707b9aad55bada04d97b39422da5ff6661610aae574376bbf415a226fcd2371eb279a14a8ca4d0e8c284ac851281112d02ed546d08138b683a7141c683736f3d25c75771c41de1ba01294e882b3d9c108b11e34cc5a2d2792304d7b98280c520e740c349f71e51d5115cea8618daf411674d401a230bfb206e4b3f4c152aea3d7e203838e26775c3389a26a571d605fa2d5ca0b7d65af3694236711981fd228bdc878d6e65a39f8a20d6f7fbc0006c3e0448eeb52258c3c26c730844b3858ec5c9d77de4d8e31d031a808efd3e5f938b71d12c3a17e63e498c5157d06cbe9a77dc2a164d0b154680f042a4247151ff27721797c64249f6996d02310c201c81fb2ca03751e050787ba54f138867423f381ecac608da10ecf98e687cf235b6aae3eb57ed3caa8248d898909669e114f35b326ce2ab5966c3414aa823cb0d415b1c2599c2efc4e481960ebdfb7168e910bb73910b7b8c48294faca003566ea5497c33ee67fd10eeea6ac660aaa741d3c5052d944db65a43241cf4ead8d41178da52a4c41015c8b3cd0e7b633c22e88e5b8ea1e84ce16a47657f52012c61223d57c291eeffae75784fc621572a34976c36c222d4e004d5bb61a79e23e6c70c66e57fc363df636fee0106ad70b66a13750c99b2b65eb8f2c145ddbae85e49d53287a31e33eb6af1981adc009ad44b3fe5ded62a567d8ed3a9f5592649471bdd2e6f024271b82b55821e306c81e4a5f8e1a019f55886d970986ab8313d364d94c003066bb97daaabe24cf3428ebc8347c385a0172f2d15d91f32ce0c112da5f841997ab590169682ca7b1762d78a9381775962513a379b07413f890ed824e180a1c22bfec47029b3e7a4640e1c19f41ab778981439c60471781a8e0b92dc1025b8ab76268d5538dd676567701332cdc216cf62229b648a32026d8cf597fc897f3d8fbe3fb66d0a68d07a9471a0c35ea502a023f8740d84893fdb646ca4b57c2083f552a8059200d0b8139542af62a5143fc6fb5f4a531123312a77aa6bed5643cc810238aaea55ac441d2b778a9810478cb92a5a4aeb87a8c17ab80674d1958a56a4e61a2e7aeddcc126aa6d8db849e597918c573c74073caad51487102795ab1e18b8780416aa9bf89ceaafa77f30c447c91688c5b9319ca79a8afbdfda783fd84ed15c91aa993b57a10e4ac17783b135ce973a8ddff3c6534f1c449d3f0c9bf9c03693d59b486a7e881b90b77b2dbaed80ced2ffd3d729b5e7214341b89bcd9a162b2ae8b1154a096eddecb553352f589542cf64d31fca5ec561a4accfb85d7c4005c5ae31560238a5f217f97e07e23a4f818c4df5cb51ec526136639c2e301401adc0fcea038c046c13c1ecba91d792a35f0a4b0733444262ea8e85aef28dd6a55509c5698d56291fc4b393b1083cf4197093cca4b85493f945326d7c264e3b637eab1fdfc0314424b31d27895d62dc44d3e8891e2d1e088366765a890966715805ee2c1a3d47415cf61f6299240615ee4c150f3d6e3b68a788d3b8c8d57422f8c6ea64411b63f7abe6ca6a3a8a3197a68441cc872985a3b1def4a00005b3e7ebcb408897180e78aa6fc2ba411efefd746d65727cf35c950bc35e28b4d639a8d8732f9b1c1c678224dd695443fd3f5194830b55f26403b7d32695e8ccf424f098d0785f78a4944fbef17065fe8608e4caf5b782b320989f06e7e2cf29c7cbd4d5a701d5471c78221149d9e7aeb2fc7a722b173ab818b14a2f402e25d07f267ce8425444fa68c710115e53beecbdbd418922d95168b3ad0e7f4344cc9b91415d3a595cf21c3e98f6a3d7007ac0c880abdc0715faa2b1d313358c314f557f2497de1c593fbdd071c68017570bec769d81661c4a638b6ce9e3400e80ea9291ca04f15bffb55ec0d7e307fb1df2c60f23d9f42abd1be6ccc80c75d28d48cd38e137d5f11bdfcf4cdac28d581833e1f02b17439c24b21fcd8e909da90a644d537708e7379156f128c2eebc1606a2af66c934660bdcb5d592238ebda5488a827c5a8c20a1740c82a7324b60346da8e7053ab214879799054a7a041860d0f61028d3719a2ab47993b4f01648b2b138714a3e87ca0b533f25f6331c5477c714a5013ba10acf992c7faa68eee0702d13c31364de55bade36db69d4f75ae1b6ad8a87938fdad61a782f31e6a4ef131d9b006c35805a9d95fc34a118f598afbb963908e556f81490055d40dfdca98a2ae833f6143064975be4e2daa8d2a965b4f6f0be5d96cc2c23fdabc5d454b7ec11803725ab06b675887c0c1d0f94fb69391b3071adeff1a71171988a922dc54e5ebe757450cfa3f71887e777a0c5f021a748d315270270485ab062902693872a588b2742b74db15e76bd336e52b9bcde8d71e3015a51c7628978436ded8c74c2335f0de4cf1c9da382ff5fbb592bb9e208b5353ca0cf4d77d57932a5d2f101be98450c621b706bf3ca406b32dd7554fe2604148f4ce382d4d06231ec46055ac23a8e663e26d812e7a19417baf180a7176c8fce0f06fee0869d3f06e5fcf615c673f8c5263090351cf7376387091415fc25f632a1b13daf3c2ffdcf13394eff095fab9510979a59d55aa1ddcb1ec0f3248c6257ccea9c1e80a2fb4230fcadcf39bd9fa73d8085dedddf6db12aea42be99bc899c8d7c8ce8512089d40571c6e98a63b9c56a948b088099deac8e661ffd755850e41a301fc93982b02e1c408eb1957e9690193a67f0fb7157897af82539fd5cde4f0fdc1e7b551e0fe2501a6229521645af7c325a0a3fc5138e19f8bdc208f214f88337593ea57b8696cb61f7937ccc16adc29dff9f6e44337f3af89be4e8c18bd06666c6d4747bbb037f3e648a722d2f1cc94c2516b03cc68429cb15429742da638d388822ecba119a4c25aac7a0b98dfbbee700294257c1b18fe46088c949ddbea9a0849d0c868106157c348413b10f362764c7babe80fc9e5c1858212d683fc7398aafa1a5996e1d6086e6b174929d8a2a1c76bd479e039b3c1f6a36640d7de09998fe7a9125fd379d41ee8baa63b814ec08647ea2854705b4bc5bd7138e2b558df0206fce30104fb9d14adc2e52a1c8ab71b75115932baa5475384cec1cb50f3e39121c1656a4e818b7a6542a432a987490f37cd54ef9489c34420843f28d5c8e3208b3f804c5cbb48dd73c3f118326ccea88e51c439a6d5530da8b2c4053e2d448701faa6b69f2f64f4cecbb986bfc24ad885ec2801dc94ab57129f4c2d62b1b3ed39d48a87350fe221cc206fb5845380d2ad898072d495a5586338439f05d2662b5e5f72f59b72f1cd742f4e7bd89011b92cd3fa1097a29c92396a4eae67c312b13ba8d4059c83a933599792692d39f7adb5df9a96e5959913801a4efbcc6c6ff8df7c2ab61e5acbf82aad1cda419f60b76ac84a35217ac3442c3b15e411968022b776372aef00a0d5357236cceaa06203bc8608a93f88360cf9f6fadca712492c82489eea2091b2405c95f6950ad6c8aca6a55b56e74e037960f15891ec01926faa6cf2f595c93ed8b1c97d32b56762efe6db5dc29b4e9b1aa60f418ff26af78a088c707c134a1747a93ca9450e2d8740411ef125c1746c2930318451543c2aed9794417805a103ce699ce1313300f1812b4da68fee62646a260182d89184da2b953fc42f0a3186ea9c5e52901f0524d4f4dc428d21fa648a7c3afbc00940ca447e0deb44b8ff0b940536ad2a932211bd967283b594a41a0d4da0dd000c23f0599012456d874b088c82fd134a3f47a472aef969dea5ef81f1796afd5ab26c802d8eda8544c95ff1393edc5ce61d71bc335987c8685481aa33301f73c2afeb8348b12f40ab3dfb34b93e131ded0be942f86f80eec1587cf0489fbd883e23c2ffed4a2d08a5bf6464ab6f22a9fb3a41dded5b3bc8665f8c7949501104ff5a3d66b220b7c276ff9ca13815b8e522ebac6a8f91626816cdfeeaf65c0556ab304a722c929ad2df09eba2612b92ebe9a077d20a140e7724ad4e11e9e2939edbf1acb6e8741245abe4552790d4578e082b7da12aa693144f8a8a0e66e9355c9354fedcc5d8ea2956d7041197849b39efcf678d528042369a09e83f0528b50649bc52d17976948e71de5f2bd706033bbe2ef194ae15858daab99fbf765cde4252d69717848c851dcd1fa383a115d9a7a91d8175370134c353e02d38d95824f78208582ef5730f7ae8bf3af438fb0001375a541ba768846ae94353420054455750b7320221714b063c6655566882de39e7e54e834066e4fa4665f6fc95742d835d70db8c8ea43d0a75a8575f408406c9b6166771c30e62bdf0a562383389912ac4d278aaa2593a90ee4956c654133d2c3d1aa9ae3cac3ebd2a60a4fbb6ff15e99385bef59288a359d5aae6951256deb42bbab52896cfc48aa7bcc2aafaa3836796e0d62cb0d8a9e4284d5aa1b3b14db9a473f451133385939423b594a11c49d28695f520bfaea5b6140b97bb2faef55ec7dbc4fed589b65874fce71ad23ab86297a6209cec093501fb9597032e099c20aee5348a22db78e3d166b6ae31dbc76b584bf3b1c889d2194c60589c0865cf6a00f80f1d4afc34e0a4828f170a0ccf82e40bfbcd893c5e7ad27ff14ca0a2c3ceeeaa9bc5c59a9698a11c38b6f94c1d61965d909f2a4a67ec04be3f86b76f17764d6d306efd6e8e8ca5c4805e7025994861afd367e32a9655ec987c578cb6cee3d82158c17e61c692a1c3f1030d5cb82700ae49c554083fbf475b27ab0afd9ac64b97efeae8f4a55f006370081c66272a57c3db29e4ae6622540d11d9b96abcd2bb618aefae1f92db25b9b47936ed6fa79cbe59094c7bcb1834b1a20ecd1fb7ec287072cb97a065a0a00707a02152a44042b475b9d5064ba40d2d4fc63bdbc5cec7dc0ce32c050654f171d92337ee41a927cd209918aa88c5ba5d97a8556ac5226d3657d06778f030db37c6feb05fe041266599db6117f3316c0798cae917bff1a3249ee97d109e3f16b41265a615676493296f06ddcbef944debd1c0514bdcad04892de65c52f19bf3dc26b2540b39f6becfc08e867a2c29c8d1fa727333bdaff46e869ec15315deadc497f5747ed1e0508cfba5328dba03cdcdf45bfd464cf910a3700bc21fd3fef899b30aadb2725a49f192f3711b100c83cd59b028cea1397d8009bd58b1031c2eda8aadb8400bdb4c8e861d8190650354d058806a8418063a4775d357b55389f53bf18296bb4d15a7f19d8caa10fa5e543ad5eca5db734d56e23e2c58e4e8fb9cd7cbe99cb7728b0c96792894252241c9493f05a776c3cffeefbf2e12fb4cc0c9fba6dc384dd9c1c1608b8d9f9a48c0a65225cbc1d239a4528b9d0e81c44ae12ea89ab82a55fa18a9312a45ff859f25e40e57efa577fec8141d31dc7f82a0ddd1897f750d91c5aaa261ae5a35ae11569f5140368e09e4fa57105fc85d1ed21d557c0357284f84f59460ec9ce70c500cbb74c30292a78b12fcc24abc4bd682f9475f6ceac10733651f5c6d319254f3afb94133332b522d99c3bac4779329ed9c5295b30f75083314974ba9e37fe599c9ac286cb8e0881ce7033e91393697ab3b817b15f50d6ce9c30c716c4f5b66208c371584f460ae8f00637ece0bdd2e7fdb777bcf948ef06ad99eda5dbbee41389f1fb6ccfdf41b14c81b6ffa1a214fd2c244faea3e4f6e0bd31fc0e52b13af59aef55b50062191f7ba4642d988d8e2b7f67b310f8cd2a5816b01e67b34a65bd6315c260fb7a5829e10411cc1b28f4321b14c0760d282ed07d01e549949ce24f0082426c068cfb9ba04f8c53f88f76703103c8f1b90e4d999b99431eaa93963c150f73dfe8c5b244215f527fa505dd85287629f0ece11f919147aac17503aa1a6114d5f5eebe372c4c4b46d987b15973a70dc49743d5d016509b98f8213e2a381b2ef8004707b502d1613e686146a670fbf83dc322020394d5046e70c4910d56209a554d3a452a11cd3b1afe0d8d4cc35ec65b1645c76fa5db93918b22890bbb634556c9ab063a7a9c22190570602fea04141fae23f0f15e4f44aaaf1df9139e30435ff7623acdade8bc36b28d10b5b6c9de7b4bb9034e0d930d4b0dc7719866a2e5f26f1ce30cbec3f37bc90edfef05137d54517ced8fb5d595931ee4d7ac11edb73537fe37121f5ca158a8699f04215dbbd643f6b1d8a2bac6d129a22f6714ae48e7e6812b388507a7f05ede8d414db890c98de7a117dbeaca51ea8fb566045f14104d23dd48259d6bd73a57a56b9c1bcf33ea668dcc7811988aa761d58a629b019919ff9578acdb192230153fc33e98a261cdb0dd139a5185d4a037bacc1829d37462c0356c383a0805052509e9ccccd3aa5eb10e4cc5eb3c9df7a2651bfc71b2c177f0e7c66358b6d5d351aa251de52693f6941bd96e7a9094a35823da5348288fd72a6ff5d25040b4931e443b8974230fa682908e628d6c96492b2b335e6fe45f79907a6b8dcc78bd484301d9bef220db578e7223a76f0f82f26a8dac1ce59ff18e75b6c71ab14e5f9951a9e663d6dfd08a10baf1380e8568c44be35d44e235b9380e2bea62b32ec1872af32a1675445fe546f455ec6baee37380effc8dd35c98c6f15971b4931bb59bd838ac2a68b819e0db41361ebb49abe88defa0f7f260ce8dc751dfc5b969c19a27370e5d7a6f547a6d5828f458a21ab61ab68150b67f601ab68e7b7e6e3c8dda41149095cb7810190f82621bc38ad14d669c2a1c82a9f895fa602a4645f1639c8625a3a2a6bd7e5dc665aecb385f86e831eccce8221a567fb1b55073f12ab6839a8be79e949b1edf3a70457ad41e9f52e193d882a9f8323cd57b42ad8a5a3c1e8ae7b9d939e90cddf8928d3d8f259e54a1104cc56b150e6d7d99557e2cf058edc7023faa270a533075550e6a15bcfa0b2f150f064dc3d670087a2c110ac51b0a856e8442f188a4e123b18f441a38d2b1865804a670287d2cf1180d275bdf8e4acd0711cdc5c78bdeca03f4bd8c6e7c5bb171151e78ab17792f282e2b6829c18d1c1437d28be7f5f7e85b8d0eed4c73517eda19ae6995b471ce292fcf5f6cf14f149969958c449ad092a0b9d26640e542fb84bcfc2352ba1da6e831ae3f1aa689e81888868d314bc48fe68a60b18dec8329918df913157d3c11ef65e63edecac84bc56b5a8c1835a865029e616bc212692e0a21013fd35c9cf272b389357270c3c55a43e23e2e7e1e11eff55efac64d9e4a29e5e91131cefb58e2e3850098817980c7127f1f8f78f1a4a7308f25d2a0e49d36fa783d976b11ae29c3765f2a9e0b3a85180ff358e23bc95604ae5e738c31c638e59084a51460cf87ede130cee8728f451e834eb61ab7e32ef75e7ace4935e61ea2fb9c6c7c3bee72ef852f9f7a2b9e42b45d19f75e465732ce7b79579eabc8812b780957dc926c86ade3164e2b8ad1dbf84d7427cea257309381d0ac84919cacb07571e59ffc049a939768c33e7a76fa56f197cde12ab6cba5bb045f64735a25ba3c9db6edbdcb76a2334e73f298a88a2eb29cd31c27b9f545df3057d1ab134b1e9bd9dbb04fcd87934d6259c61a8fea102265d866ab55ddeb19227a330e165b3c3cd65c76147d37a3f3927602cd4932c0cbb6ca86641bd22af909d4684efed49c7cdf5c79f9aed4e19d15dc0b87e747a2aae3c9a62379e80cf7b21def5c29f9860677da8e6aa898f87765e04a022f250f064d031cae7ccf90c722df493679c6619c2b19e7babc2c9b619bd1b405ac27db481cbe817cc338adba812b6635d76aaee636abadd8464cb94784c1c9f61fa3c08d66b131127c79b6190f214bd15c330e37116e18220142082114d2dc0f9ceabf24e139a15f3fd11098eabf2170e5c34bf50720a4c51017f0b6803104aede05e16369a1ad7b4143ae695f1077bb1774f3841d2fc04bb9c19eed895ef5e1853431fa3ce4565b21b132ab54b7c7bdcf7abd07d9248107211f3ef8e083df4acd419421605c5e3a9462133204ae663c48e30dc5b88c5395778c53fb332aff54e7576a54213d4645451915152fa33e568cfa582af5b1e88f9f1f30c5b6942cc7fd802bd4bbfc63a19e4501e9e64b6b64741e9de78d88de16f51e0b12e19b60bff4575f9595089bac10d825d31920e4bd7b402db43d1f4ea0507e0df08da5c7d2a3a96f739d5fb228141b23b2a8d245238b2a892ed317d99925a5cfccf74b5666e63a5754e97c1a565754c9be747a1a164ae9dd034241315dc803822efc909614bd92b1338156bd264ca18ae7c3061bb8b3858dd633052fdc8ea34031957e441410d1fb32a2b79d59b25999d1d9cec88f464696c8c88b6e64b3a8d2fbf3f35735222d0a487f1e55b232fd2951327c91c8a2a225c9d38ffe58d8488469956f68064f7a2c0981c8dbd05f1fc5889e84a80aa943600ac24f98ea2fb6981fcdbd3e9f7fe088a667490d376fe0d8f01ddff46c4ff46a3e5e085cd1c737d12ad3e3f6ebdd0be3c61faea61582d1ca2c53dd1ec7bfaaa80a812b15955bb14920a26e8ce7165c891ee34bc38d7f60cc249a8b2929967f9a8b8f71d3a1141b0bf5d8b14e0be7d478f78466446e91e26bd47954159d46a59f51af93b2a3685fa9287982e91af5b15028f5b148f5b1b01618756e7ce772a3cb8d316ccc8ff8563621e03ab096f0474059b000362d1716fc0828abdf894eac1ea2c5b1fa5dc934dfb5b5b1fab0da8ca085d536beb5b1e6a356c4e8da24d3b6c0543cd6c23dba7563b5e9cf632895975ce00aa5625140e8450f72bd648d6cbf2eb24696c86cbf4637523ab52895c78a44aecbf8db522e24e531c5c68dd216d5f880885cd6867f64a8a83caad8b8516bc33531a2ac446a0338153feb037a63b851f3c180c7124d56c86389dc421bdf8713a8943f8674d69c305d3e03a6cbabcc539345a5d8989245995eda2cca6465e64bf4f3262b237ae9253b735d741a164c73b1e5b1c4c32f36d3bb961b5140e64b0f223aca4d311b5ba1392128a5fe626320fe896f0d05a4747a99d2a99d5962fa0c7ce9262bb3fdb233fdad967ed54de40305e4fa7c90ebd31a5922d3a737027f5d0f422fb246fad4c2bb5594fc63d1972a4a5a251e8b646d6cb4db60b711fdba4d769bd16da868565a9b80a9f851cd2adfc054fc2584b570aef658587dac517d2c517d2cfa5853084c4517dbf2c6b0f1bb96181bf87ed0a489184dcfd2174ac8a249933024113242629a8363d8baf7f3ea0f98206cddfb8979efe7bd9fe602f2e57f2451846d64208c814217be302ebc884a78f81d3072f0f573a9719f8e66c9ca8feb335cfde0b07ef6a5fab387dbff0157f3dd0892719b7444cbc5e2e326f16379ac86fcfa3435a2a57005556e5a4a30dcbcc187ed2e90a3353535353dac2edef74e27f87aeedbe2e9c50df28e175eb8af0606f00541a22b7aa9fe6349d242e9b69d5a5ac4b0f19f8e66ee398846a2da2cd833d8d8c634c72d3e76b4483412f58ca238f9734edadc8cbd05145e27817bb0dc25bce6e2f5708faeb97dbd6b2d742e97dff515e6148dd8e4735dd7755d2e8f65c763e1cbdad25c1031b333320c5d78a674db5e04e2c00cc2ebbaae8b8bc015a5db06217c02a4590fa660a75c3ed665d753c5f3f5cb767c9f4a9e3f7fbdadd88cbc554c91f722e3c2cfbc17be97c17d3f2ee818058f6a2d9eb60814d9cb76f436d920bc324eec073170e58127424586c018d8022fa2a696229cd3aaeb946edbe9548452cb66d8b8e6220fcdceb618ba0d57f3ef3d1ed7ef6a1081a956b934d7704531386bb388c0d57369d5d63d9e2ae57142f333d8e0a3f5b1303983edd91dcdf17b8f83f0f47a882e1198ea5fb50998ead35a04a6fa5cb9e6b1742be5a9de63281ed7ef1bd864e3bb39f156f37d22ef45c6ed33d1c47be18e6b1e1c6ebf7be06a5a224fa814f358fa44e00ac84bf50b7ac3edc764e8b60b4cf5ed2ab6ae7b6ebf85a484ddc33ddeed437817b8aac04bf5453d4fc8e50911792c7d971f49b081165c5c985f0f175a703b7a82ab01bc545f444d2797db2797245be772fb449e503fa127f4849ed08ee6f809dd26d2d0b2197ae8be1c47204d6c8c8aeeeb76f1bec32e367abb08571c4c711d07b9ee4ef4bda41ecb5bf5c09d5e2efcfd815eeeb77bdc909bee1403e3fb79435008d8d3d1d7e9df3795568dfe5a4552657f4960a4ec2812496366666666663e49cb6264b84f8f8bd76a8df7a7f2b8f851dd1e172faad9e3e269a5ef71918baf7152d9325a44bc6d9d98b992239f7908ae551d3d356dca3998eca2e7328cefbdf7608b8b0dc267eb289fbab31aad82ddefe9106018f6b4d7f8feeabbcd4406d38f99bb5956aefce883df7be4635891dbf31c45737dc9b71fbf3360cf878d064d7eb88f0934d81100ceeda08fecb97dacb9d55c479172d34b3504a56fa5bfad74294ba5c3caa5184ba697aac99aa4b5f191628b3427802de54ff391e3307dc2dec6fd693e6e1ca69950e144100c1bca87e3f80fe71f2bdcae716a608dcc2c319a209426be5c15c08735de64e2960b4db62b724d8734500a93e9c5d4793421054e7854e8f3786c3bce5bfc6fea0dc43b1a00b65dea3c8ea52afce151a14f2a75d84510970f84ed28b7d81d75f454ea5d3c8f9f984af1883195ba6eea30cdc3f650df953d28e007e6211f00fb98472a55bb96cb01904552523447e3c4756347736f006a0f6cbaacf03b2a0bf461e1788e3a2e4b8c40744dcb59aa68ae073c37751f137a10c5dd61bb21ee8e3f6d47bd3b5277870f77c7e9ee38f469d18068d1806061390f1e3c46231616d259ea75f5d043ed686e0fc760d6430f2c2c3deca829d76ab7912e2686b83d3ce5700b1bcc41c1182e10d6b658ed3baa76068a6f1e3cce59d8767cc749ffa1a280f80f9ff7a1a280b80f87158661ebba06bb8dd46dede3733bd8037fe02afbca1320b88a3cb1a627a8e35a589107520a5b99159b16f1bda084e0eab17298c41b2eeed08da239253bcde9c41eb8dae1b293353c3cfe00e05d048a4136de45a17b1e6a8eef50ed01504bd75167dc46adaf517f54c5f1acdef8d3609a07968e880357b226e65c36deb45a37461eb88aa1318f259262de0b7717cdc5fe59c07be92700793d9a8baddf4f17a1e316fc62bb6e0745d916ff5b7a90ec25d2b597ac9125283642a3beb9c873453413693e22168f25fef174dc12da469948f3e1040afe1ae0cbf26c95782c1d9f395eba8d85368606c9e67876991ccf4aa41b39bdf41c672b639f3db33333ac9195936e4fc3126928205976b228bee8a567975646bb0c3bb3625140442f1dc5a3938e92199df4d14b75c649f5f41c75e5b6ca78ada8bfd2388e6ae3376a8d3f2d4687b5b1b1711bd46d667ce536356e43e336a7cb384c976215324e346aaccc40d978ac981371b885136313e32a2947317dfbd394782c9bec9a8cfa58b127fe04a9d438146faaf1293586a93ed6a6451e988afdd33ecd3da1d7bab4182cbe1f24b05f9f55bbacf940613fd87e61126aee692ecdbd2ccae50ed15c76fbc9567aeca8f66ebbb164db07a6e249b63b5d3e701583602a5e6828fa7451a315a2179187270235c74ea209361ee258822d7617d1c9469a598ca6693edd45ab6216b107a69ef05e62119a8bd72362f178c4cb9845e4792cf19187335989e858486e3652094e9670319941271be976edd3b249acf35832c0f1eca455a823e6959f57da249a8bcdc5195f0bf6e8dc2e1281abe6e2a5e2a74099dcf885f6893c419127f2449ec823776a48c982821c345cf88eab434a434a2e7307b22feb8cf7de7bb2a39104b20639b4f406d03e2517971b297086c09576283afdf5135c6976002fb34f0b8ad9918570045bf78286b4b653ced5920aece9c0de7bb4b65c28dfadf990e7b67f2c378ac045255de08a01402e2e2e42809aafab9b7b03f674742d58bffed6f1dc34d8fa8f7b2d49e0cd6d18591461e08a6f92e01e5cc50d471601132976ccc0841c0803531d6d12cc4f70eeaa0998ea7722d1edcb37d4bae2768d15b719c9100ecf00c2a8bd4358b949734255700ffe42d00d8781c3a8e127f1900d54bc54d12bcaea3712c803a778fd0eea21b892ef1fa0d3cff6160adafed32ac81f7db473d9a2284dd07b19ddc61ee3adf24601a19f974705b92e83d0cfd3cfe3e8300ec7106cf4d7b593fa18a905a6fa342c4d3be94a3c1667676e5bfb635ddaa8fbedad390e5db87278aad2fb5c87a7da54a6f71b06ef057b9f9f700ff68279f4fb4d82b722bddfb50a6e5758036d62d40e82a92198eaab54acf2ce156f47a7d487828d6eaa8d64ab9dd355b4561f4c350f7bc13d7a8ac7a30f74fb99edb8adedb8e7c2d4c836158fa5d98bdb326ec741b7cf3f3eb79be7f61be7b1f445967538a7d3b0350157f44de7d010b57cc54bf52f2ce8d4423217bcf358fafdc6699c56450edec0234d138f441a3851c8803d1d9dccb9f318f72efa7b222270c5394f700f9e8275de1053f1dc40051d6e0e5cf1d014af0787c1fc440775df67bc1ea3cf340976aa68b1668ec8cf1c913fc268f069b1a45d1275e6c83e31df3d566c5cbc15ffac984e815e71e9177e989cb4b873078b3bcf259b511d5d0ee34ede5ebaf4fae7e54dab00f0792945ab509f8fad04870c1a3c7c03baf9b9f12ef690e2931ddec9d67c0301b661e31d9dd9613437454fe351eadc211b7690833bdf8b9256893e777c06e0f31108ae7af8bcac812bd882a969c5eb0191300f1eb85a61f97c0c822b1e9f8f4370d5729c9bf9d823803f3ea90138db7aec6d36e6288a918dade6e655b7115b374e66a96ee3d6bc97d1676c451fb8d28ea5f034379fa3088f9bd7f10757d9ed630baee093214e8097f770f9006a7c85f28e5e950b613bfae65908a6e6b1635a450991559410420811a51005b028203fdc87cbfc701feccc92027c6686ede815e205b0323fdc87fb606756fe837d3025c46958425894137c85b8913bb2b2a6083a3e0f7972dca7c21eb87a100ac1277045003b84eddec3bed8ee3400eb6257b686ed288aed688aca7cb4d95416eed8b050c70ddb6b6e342fc488de91edfaa27775d40ede1cb69350dc795ba14eaba556265a6e00b2af548d4745b5c9f41997317dc6fb3378f0f8cc8c9b4ec36aa9a88e51516d514062bce53231def27e8b9d59d256a6e53fd899f896cf48ac675420be5283e0003c881f4ec30222bb76fec1ceac5cfbcc8c67a761b15414df87d3b0045005f01f2e2380ff70fe0f2cf7c1cec4b37c465e00a7613d8d630076d4b8d34a5a6a1ce2c152a30f8f490035832db892351089bc8138f00622b99325cf52e377d4770350df15557ab9bedb03a72cace16c3f79f219d9353bb3d9acfb9d19fc63c9271f3f4935c6655453036108ae9a87c3e01e7dc5e3317bee9c3f782cf31dd3e1ce63a39168341a8d46227a893eaa7d31ac72158cf35826364f3bd4c702407d9787fa585233627447b6771ecb844eb695dbf5ce9dc7aeec6d28c744d90e75e53c541490ec2bd9575041b4cfb8f6190780e87c0229ee138d6ab94134374f734593460cc1965dbbe931b01815d5170253f3342c5345b5cd808ce931aec463c5d8991f769afe58da3475cf27467581a979d3ccaebd73b9b3b9783bbcf05eda07e5f3b0094f95f279f884a752f96c36c024d4f83c94c25b991ea3e7f60f26ca584b390fb581da07a6e677e8a0feb9f300a849486f4d45c75e477d8eb792771bef20b892f1d94270d53730a5c362396cb771b3817bb412e6316fa34eb5afbc85c7cde3a8ec85979abf513bfef1792f8c86c7c2c57b81366c0dcb863b31dbd1d73e771e43a9514973f32935ee3437af5223105ade34378faa528ae6e64d35f2c0d4bc8c1a83606a9e468d4330353fa3ca1a989a8fd173e7494277fe549fdcf915d9ba33fab412ee11ad783ce681eefccf9d73078f65b6923b8f7136aaef926e4a7db76f6eee3c4aa537e7ce9bea638d6cd4792cf39bed56c9760d4cc336e5b3cbc86759246135c6dda2b91975606a5eab7107a6e6b3fac5067d2cec696e7ea7e39d2d50a16dc75c85a7a29fe72c3cd5f5f9d36561b8b3084ccd53ba6ddd695ec7488fc490243adf227005b578a9792ee814ee9cf3589d719f067b1ecbec60cf9d8f3af391d26d3b9da2ce9d51a75513b36c866d24a2d7b44bc89c2394a68ff03cd234f0c8a481b3c40315a7d349c93b410847f739d95a4ad68c185d228f05bebd703a45106cdd0312023fa455dd34d84e30a7d3e9743aa1a1667421cdfabe9656c5434829c32abaa6d56a6dadadb5d16dc389514ab6e2755182f75e465a6071c5a906db14f0110ad411f2b00441575ad48ca2573f3a968266385232b72094b135b22db8c4753e123fb64b336274b7c7028f41271bbddd4629854e36d115fd3a8fe48d78575aec07db4734f73a5f49e87f24d12b6a5b70c571dcfa11332d47f180e6eab00d8174d8fa42e029dd36d6792cf0700e5bf7805a44180a811c5c31e0a5e0bfc0d16cab694e0818ad9d56aba694066cdbb66ddbb6f7d2576e36e0e5932ea5684e2611637f7c3e9f1f31b376561bc70d1be943efc5a755a8cca22e9a2be51f14824110686e19f75c9f1f24fa17493cc4869be198288944cafe36128934cf3a245266b32cb37133f57c7fd6ebce0abc15cae589bc17d133d33b11ce6341b1260b4da4cc76cf0b57b2659ec722e7b01591d312919106ac4304f3902e3c57ee9c23f1256118df34277fd5279aa8c063911fd58e79c88b2a138fa50824827b58e0f1909718782cf26d71e5a55604bc992502858474e0ea074cc98de51949abaecb330dde8b767996c1ebc1cf2ecf53bc17ecf21c03ee317a2fa2cbff205dbe6fb807dbf778f025e99bedb692d56ca9a4699a76da9cf6a7959ed5beaf5525edda9c53d3ae5dd7998097fe655966bbec6699cd851a49b36c862dabdccc832fa2570a18d8d3d1dd324262baf72324e67dc23036f8c7bd17b4e4bd17690b3c4c4bcd7b694a638cb105c2a02787ad7b41435a41412f68c8ecc1ce85354a6a684d9452fa10d21cd4c1bd39781887ed31f0bd3c28e43aeac51bc6a9e19a98e6a04c73f056dec09e395c5903a3ec18638cb1484ccd29ddaed3943587c3d6714d3ca4a7d35f5323e50e2685926c45d29864a911f018852b0602028ad1c906a1171cc4406e00baf3c2b317adea33500da5ef0145c835459e6c40701514242474816ec740bdf358608c31724e91c7020f853621b87ac74fd80ba2c333175e0ffe611e415ebc97ebf0bc0526af075b01e83fa3c3cc6e232bb25d5f914824129d3627fad346232a1289ac203a14b1155813615153c0137ce59980775e2412891e3cd08540ad822216feacb4b9ac7f469dd5210edd88492b1ecf159d41d810be617b0ce486ada3164fc54265785c7ccf7b29f11014824370753d1e3e892d9e930e1ccae9e24de3b44e856dd8643cc6e1ea8561c78b2e8420872038a1090b6585e66293e66c1cb351a7f05ef8c66375742374d25c84435746a158e3a843366c1d140aaa71d47988749af30c8dbc761a69514048d72e43ba666796c8cf90646668b26c67f4f8a8c9682791aed91cfa916d9ceb285594898e52491abd8c766a6734db381a75694dbbac8ecc756a677ed8861a0ac87531096af4a3772ecf67fb7599edd7b7b39541b9c8ce88348e44ba76251eeb76e6d4b5903a8e64b13fd6f5ee44eb83d72366c5166fde8b7c7c6cc153715073318a15bc97ecf19105ef057b3c04e3adb8470457236e1261c0110a12147a2fa61b7f6e1a6e8c3b4e703c3ab9f15de942214c74ad46efdedce8c23f1c87ef5a08b0e138e308ac1a384ed7658fe3463dcd90b162aa55f41b75f41995c64f1575aca22e53455d32b2af54d4a5c17435591cddb067db6eaa3f55794a1094a33cc51a5922436f04e52a16f5c77a34864575a83f7a6b638dce39ffeccffefcbbd33c0ff6ac3981e319c0d17514779e81685c741bd447c761513cd818142fa845c959c32eb19f313edf73f4797e523fdf51f4aa8150925e46444733343a1612cdceb94152306b53a929b581e66d8d317d01e8bda0ee7c2a3fc1a1d370678341b54d5a25cdcd9de6e6ad6d9d0602c0a7ce9d3d3067c29a3b610bdba1d203a0aa5c478df11cf5c6b1d3532a6aab21e336eaca9f06d339b01eb882393035bb67e2b0f217b54dd4367a10fa9135528d2c91a91759d46604e5d4a2b6c7daeae9b0c9b0696fd655656da1da5a609b1ec39d9f3e9ac963c1611be8b1cc0692598dda2c1c3509fd456f121d13d90753ad8d456debb4cef4e104cac6d838d49c90dfde9a8f0cc86f7f8d717a9b1b57b9b4286bb19494e6696efee97cb1e198c7502c4a562bad8c8a44c5a0d4e3a8f2b6e604127c53de9a0f1c6f2d26e5b5a2e46b9c86855251d2cad06397d2caa8bc869db97195cfc4383d4d0a8e0a913437ff0a759a9b127eb1f5c551fbd2630fa21283721cd00a28b581600d04c261e1cfcf9d31d895782ccca28e5d4674ccce2cf967685cf45b99d1b163760685a3c6db1a0a488d8b2e5303c767e26b1c8795117d6467e0452857a9d845b5c64728a70f82726a8d2c9181c76e241e25e541b0ab5823f09845398e0aef8d8adafe582a8f51519b55e2b16c581b9b19b759b94d8ca7dce6741b19b751398aa8a2ae1a1575a12aeaa25151bd45735389c7321d435191714a89b132c3c6a674d1bfd87ab3cde71ed51e82a479d17c325f2ad5c71a01c1d4e4cb7203f53b8eb189878741f10889868f509a16d514984c269309878465242c7b9ac9c42caca26430cc1ee130bed8c1fa9a4c2613bd891e9bd36432b51d5514cab1d3b0b0582a9528ddb6ec37a15499d1313b836118663261c78ec1cc74987e2ca3fa582d8d846551eb8bddeeb8d56a350d1f699a4b665dc09e8ef7c2f56df0efbdf7f8ade44bb5bc6dc506e4fd782f34aebcfd98f7225fd0f5ee31b9fdce812b6a7fccce69792c3ef464e1f6004e3035ba393e73ce29a53cd47cc81cb83ac154ff3f9db60dc2860d1bfef0f1f1f1813f7e9afae067d4b043f03818bb66549be5337a7664493c0d2bfa74e103571b4cd5b4ea2178aa1c8fbb2e9a414d7e54999591aed5998bd558f3589ea0b4cca294782c0a53b0a1f009623d9676f81c36503c6e7bc6988f566798a5459f2e5a0533929d217da472d2552c042251219a3db3506868e6f808f9cc9c1cb88a381167e6449c991371664ec4a133a76b6cc7a5a4a4a4a4a0a41c25272545a4f94041b11dc79ee670bac644dfa57c504cabcc1a559f1fa0a00daea2508e26173e7e61e8e483f9f8f85c1f1f9ffe91242e1eccb97dac6543016916e97045d24a9dea2ae374aaff8e914af5b1de162184106a753ba932ab544370a48645051497066fc5ad24b74b753b6bcdda4a2f914ec3c24855084ca1644a27bd6485f0293701534dc586e382d723c227ad1285d16fb042b7e1f590611edd6ae01e6c782ff3f1f63b080314b46e4fb1c56318869d3687518c5a8d9999520cc330c6c93ea21246867bf4d0c86e167b56b83d7af3cdda8f85492fc5dc03deb82c63b359422d91e6ba7bd0777cec18d74ae44c34d1aaeccd7db65d669bb0448830d1abaea9a9a96101ab7b5eeadd8eb2bcc0f3522897d6c35505188adbd718e769e1f65b07ae7aa8cf4884300f9cd15bf4a6679e216ead7b08ae184708f780611ecd433dd4d387e11e6fbb59863dabdc03008f075c6d3c5c7e376fdbb8fc2ec66d6c24a235d28ceb1cac55e6cd8594d2516d160e365a12a9e834c698c5d61a6a5c1e6a0e5e7b86fd3db678680d4f95f2b84bd2b1a7510b03bbced3ca0403c58f6adfac3e9611a2979ed5992321c0f96165ef0a513223eda3d3b0304a351f5233929d3ebe67b075f4cd0403dd0b30d02d1da65b332819d247275911d0b0b48fae3d4ad1ab94c3c7d67ba171e1631430deb4ca447a1791a0c0cb20b8824090d26d4b399d2c04029241188a64a10f0a3bbddb456156b31028a8aba062eb6410d0859741175e536c3378e8bd6059b81d63f688ceedc3c0ac6e600e4578c21add8d87ba233a97be6b175bf1a646acc69cc7027522920b0f6bf038781863b04dd6a86582816efcbc820e6e7cd360eb416cc5566ccd9bfb72c06b6a52604f47bcfe2389189956d1c324f3d2ae8b197b36bad8db7e340793b82ee6ebc7f31161b349ab9a19a8e3db9d443b4cffe8545bd411d9293de6e3a380c94aa253f0b4a27e5c227b6a6ef4f8b8fea8bec7bd37c421f30ed89a11f1da2092ccb7c0d5948fd23e9f1f3d308a9cd03378ef05524a29fdbb84234a3fc47b8121e2a29fd34eb18d3a97c7ca75bf14a3f46f15bd8e56a950faec17a5f4aa2ecdd16715a639fad6c2061f59b0c1974941dff49dd32aecf48d449e4e3ae9a4935eef5cb0206ca38b9e1debd1286247826f5bda5c4cc2c6b1088ed7a5035224b2c38a82a7b9303b3cb41d7c769a9b51da9d7e64d4856614cbea63d38f1754615d70b6917d3aa864aa0229e30b3618613ce4f99e3603f14a4602d6c7ba93f74108b52232235eec07499a11313e96e7e345cd08666e2360df15888282680e3eb662e4d3168d826e41a58840482ebc8154e742ba7321e58e40adea362f2034d2ddb16397ceb5b46d327bad8a44b4e6e347ab187bd755a8803c0e5e32cafb3464fc5457aa64a0566d6fd33bc64bef94b7cadb623ed8188889ceb9302ed89888e6a010b86a2019b6a324cdbe06ea600dd6452020b8a2946edbe9440f1f431e9b11e86ac7a4285516751d50a9b2f40199423ad6a552047a2fda29bd84604aabef5e421602b7744d9bda11bfa421780857f46e5e71e12fa1d1e8121a5d42a34be86a96b65ac0af492e7d247b563a3c4ae9a69a441e2bd5219a8ba2539ba52d17da25db1de1eb7193b452edeb3244ab48165eb32e9a8fcc0ed11cece01dd156bdb46680afdad5db45a00b89f8112d139d73bb0929a8e2f6a7cd2ed0397708177969af8e4d4514642a81b1a3b93efc7529b1c15f6f4561eafa3c7655da4a6cf1f2319bb634d727c306f3a35544b4aa559dcb6d170bfb41b48a7f822f880b5d50a8735b3378f1fa95e3b15cefe08a83a9ebeffc7ad4c7e3fa8812d1aa215cdecb8c7b1de61a02f3419bbb32245b47555d03e9a097975aa07b015d5eb834775d6f2d6c1d59b0752e57e77a5fefeb5d45ab721a49abf8f739f55c7ff0fa7ce7722f1a278c78971e09bef0459864ebf83d9659755c8749d8e0ed7ee99be61e41dff434d7d59d7ed0cb85fea24fc76597e820e906ec1d4208a115c243e06ac27e43f8bd7768bbb785207829177e46ce183b8c220f3ef8624b461b136fb625e293680ef20dc4600621b72e536abbb7050d2c085bc7045f469a2c6efcbb245ff9f8b678313f9a83cfe7c518636ce2c70a369fd369caee747a2cb048ce93274f9e1489232f6072ce3927c77829f917e34a1d5782f1e0b05d796a28ae14c9cbf88e8584decbbc32be27a86668934fba46a87b0e423892735af266bb4ecf75ce396c0f76181bf6ecf22cf4de137d26d12e8aa239792795872a3f812979acca63f32ca7e51b3b6aa1a181f9608b51cdae2a7a1677ce2d98fea2c9e232f1b6b8a2b7702ad83aee4a1c3c34b4cd39e79c3bcdb51e8b3c0bb114baa66c0c08efe7761fe77045694cc1f6fe2b46caff1fbf803d1d3de54529a534468caf178b70792c11059b11ef9e8296184281a7928f6f0d37ca63f14586a4eb045703888f31060d69c518638cf49a324a27ac15b145146c0fc2bf1384103e1f2e71c84d74417733f3d056437b29f8c75b44b12d71e4ce8e19460ba31c72798927e4ed2bd135f127e4e5eb3a56db76436effc9222a6b40de4bf1bbf417f734071f4fb075c7d92e22628be6a00f7703a139c8d33bf2900d1ba497a28ae263cfb067987d309559d1514146177d6459c7168129f882b69e1f1d75892caab5634705d18e5db3a8490475591490d14997199d34b2d3ca681f7d646734db0466fbeacbf2dceecb7631978fc1bc9fee8896dab5a0e6b38b3eaa2820d945474d1b24b3a8f8eca8294205c13e3a6651d1d2a3a69d9f795006a3618dcebf40cb6ddbc5dccb32d122d31cb4f0a3ca3510dbdaa2f81debf0e7affff4d6e79ec6ae1b1ffd0c704ccc7b7932ada2b7c5354f86da72cf6381d4fe9016260d9b7d2f0178b71de7783c3c553c04e24219b598c702dff3d373f5f4f4f4f4f474cf6c1421c89d1b7162220f1c640e5c8d7e5ac156020985c48249e9a6018c18b9e02c620f4f733d9b8442b6e2e317de8a084cc59fe0b0a5e1c647304e4cdebcac9309a5b0d2a117bde21ede413670efa013d8e46aad9acf71682fcbd96ee3de83cf8ddabb05572c94b2dd89b3ddc9769bedb6ab5b948785ac5089889050a93e1626a3662b29a15c450e0e8d1ed469865d29e54055ed34aa8ccfa8a69feaf6959a725b519ea3c678a9aafc69a809d339ea6395600ff4813dd007dab813757ab60e66d047d348cfac91eca4eca4d28d90ae69b454378dd298f6812bd337d8aa30a7b9f894da4f725428a3a2d468b21049a7e26316a70d083a50c98d7f4241ad92d609d3b5db6c9771b6a8696348d9e3dba79bb4105c954ec3d29e5d467b767e26e3253bb35dc6674c1d77bbd705aff325b9eda51ee50b08d8d3d1f1a89e3b5c886815d31a5ba7de3b1d2d439c9aeb9e32be1fbe0246248b29607c820dc7db029648a00430bc2d180b25294f04c74e1a091bbab6b9cc43dcadcb7d73b9abb8fc6b723aae14d2dc03b8b52332fb804ef187585e1181297ed7c30fb7fff8e5f6bb9bea7bd1de4761d161bdeaebc1489807bfdf1021cdf1a10d90110f601df66124dc839b300ffea93b952c29f3794d90f870133e9d7ca8cfe52694ea08e908f14b02cd11eef5d369db1e63c7a4ad8fa59fd9ce62b683c0bd4eebed08dceb88f3e3fa31dd07ee75e6d7a4917d8f25a655221b633b1a99e65848abe4f90f1872693ea4e51fef4ecbc4d490289140095fb81def8bef471b2ff0b6b832cd313c9f6a6e479b73d6409b468b591a96100327514411858eca9430ca79491bec3133bfda979999999999398856e9b0efb1708d775a035f80c13faaf58968ee74527ad16b9e93c07392d6595048730f28c28f56f1936855b4d07241305f47abbe75777a0da3126aca200721f3d783f09f35f2cebfded9a262a4b2651e8aea35632e5484a1b2a5dfd564d81aa6a56de9076d47f92fc67805ec22a1793d489ff6afbe9195c3f75c8fe720069a9b10c9320f8fd0b4cc629e1839c6785bb169c1cc310edd18bfaa8fad0ade2ce31ce5508aed46470ee2a11b2f1b35e535aae9d967d4d24f9584d5b00eefa858be41b1dc9aa8a955d42455d4cc6ad6421bfb602c1e4bfc56f9caa846e4fb2bb56f8462988cc363323016dd28bd5040faf241e02f78096133d77ff314c157c69fe6434a29e3f246307afaeb2832e8a53c064516b55d06f63e4a067b1fc31e447419d6c89299cf5c3308c692430f0bb333a3cb5f4a7ad1af4b8a36591f4b24b14b6b441ebb08b3a8894d96cfb6bd6d3bf36c1bca67758171f1a1312cf3ccb85d28f6a879ca3bd745ad114a8d887e3dd6a80a619e1887696e3054502857e2b144a7301d23e536a39bbe6defaa588bda2cca67e4e98dc08b2efa655113c5ca8c4c165e74d46665e0451685ead3538b9a238b9a5689c7121d63c9d3b022f7f04f100f61a26b47877974626c6c46171dc32e9907a6b8877f809a20d25c8cf2c888a645a393172291888ae8038aa9e75e8fcb8fb76ae1deea15f1622e9fbb631ab03edfac6577bfe7e37537d490807f82a594f2bd6b7c2cafdbb6b43c7efcf8f16328604f07edc7232ae1e84de9b6898ea3e74522dbd59620b63b1a9d6d102ead1ab5cba9657b6f643b917579b6e5ddae8559ef5c1d64dd2a0cfc611879e6b9afeefa1ec7534a8844093e3f2768728227246e18650f116e5c005cc8832b3212264bdbc67305116edce00216283c570ce1061784c024085804e1c63d5de18a2bae08029329aeb8e20a20fcc00757dcb8a736ecf80085090a131426284caeb80285890f9870e18a1bf707077d0513123061d2394c7698f085b0739840c8489c400620d69151137c584bb8461e6c1dbd105e9f7f52cb3a1bd7c67d29da36625c78d69a524a69c721604f473773ee4ca13ccbf0b8f918dfadc43f510f5cb5c0345786a73ac0e3b099e666cd132c2c023d161f989a87ef89b477653dd88e5dd48b1304ed506187b541273854cb48982c6d5b493249cb30916438bdb8f312cd701272c0061f1ef40e1096c13b4b27694bb0258b5992ede21534db45281cc0ce67574a6516ad49468fb54559238b928987a919052670c061cd1c1139c187c5b510f3334762087e584be88ff0d0622dd94a8f5df4aa7f602a2ee1a9da8be6489f8f4ad83e1fb5783dba09f398ef4f2f3c4e086b21530ba1b4d0688462c2e6fba7bdf05471088f6b2f5a1581d0dd847bc42c58dafed99a4c9c16629e46c976a71bb7782cf371089a8d4b785ccc827b442da215ee3c66a312621677f644253d31660188388527440c3ac0f579985645268f9b11c916ef0c47410b3df009622d893bd88ec025dcb0969ce0e7e312deeac716ef65c677366c3c989276bbc29d505000f6cb76ef362ab34e6437a26f6675d076890efe8a566c5dec3982e73cfdb4ede9d87304761412f4d933bb043c55006699c068b5eda453f3b550a4e287c69e499f5c78224d3cd1abd845a79878aab845059e2a6af188bc97d8f3586a50dbd5e854a24f73f34e9a9b433e3fa64f76b5d063998fd5d3423d73ce9cfb72c468630a72c708c5643302cac23e51e0087b3d363880c7f2c229f9e7842b5db807bfebe1be3f5e99ded915f340e6d16d4946330f0b37f8820feb4864e2c3c28e5d750092bbe09f2d6ef7634efb306b47f20d4cc953c9c385d7357360233ccee2bdf0e3365c335c69e34a1b1b14aefc12ae3c36e79cf399482482b6a36124f3d032928864e3772e9c93e164af82f47a6c7ced5896bd8d39d39833ac3e165f3509cabb72139ec26391e7ca3f8f45de54b9a7455928967d604a5281258381b5207f22920d5e8c9ede2be5b2ddf594fa5eea091ac6d110a09d2d4cb39256417b7a6cbbd231f9526524f01d2381d955dff511cf555eeccaa006f892ce9a8fed43ee55da9e90172a29554642aaef6230d3ea75f1253d21359b338d80e79b7819a755a2f3169d92e2a9388bc7ade0a9188bc7c9f752a386ca55e9694ebe7d3aea6cf24dc8170357279892a7f4e7f4a35d9ff59ad4ce33867a2c96a253f2910a1f4979a468052f253f05adc166c59597378f45f2dcf070509f7878787824a491479a46461939bdd2388357929d45a2772b0510fd25a1d72eaa2dcad230adce301c6ac610c49a3932a2430e6b097fe648d3418825fa9102f4b096603f92e8545f23a285e8db681f013dc0f3a17f1f104dc488a55998e7431fa681829af04894d14cabcdc2a608755dbbcd1216d99993210642ac992330083d2c11cc2e4bbad6a3d694802c5256398b4ef5b7ca59b4103ccdf5b50ac54d97e03647b803570c54ba3d8f458b9f2f2e171c44b2ac1393c09daba4551c94838d318c5bb31f66910042b26530efa5f43e110710725f8f09309c00f7602b1e8ffe0e1e4b8fa1add890cce171e15d1bb76ddc930b36143cda2210c3edcfb0921d9d98b375acc3ac9a22cd35eb5c1d4a752e28d4e7217ed22a149d22e7763d45ce652054bff459afc357a5b9ed54e3c9a6f9808b7014b8a6085c310b2b59d6792cf42a696274edd8192312a7ab3dd624da99e895f679259d22550ee2a1271c4615d98c6063bde743c76800a26333dc3e83f1841822d2840cae7b69cc4a9ae31d1cc01d20202fe00edc79700728a885e81d20a0200d093e66190808a855ef52ba41aa1dd117daf7340ce30b1e068eeca1c8b6cea216c59675588910d065055f81854e9f81ba811888819aeb20386f94e17ad0018f6b6e09a1a3961007cc60541927876f60aa9b218410f6e8769cc3adc73920e56e32c98592a12820cd1a3d3b113b93f244084f5833471a0a21169da7612541c18f9ed92130d557bc5507c154f760c128782b17988ae2bdc8ec9d0d1bb79fb50fcbc005b75b41dc7a2ced04d7c0e0e65a20cd1a5921546c5d73ab152384500cafc97be1db7368c3ed9be1f6997590d4e071cc3b11c9c6f7b970ab85e88fe02cbe6921e20df8a6550f89d7b2c1d671aba51dfbc17638446451f0fc84bc49a8855608eb019dea472abae74f70c58016c2adee863c4b29906fb8f21d57898c0ed32a1595788a31aa3ce5984a8549a92e2aef5c865089f1a4910e351f494aafcd1a7de6c805b4c35a42b7635c43856c8329e9835368c4f8a981ecc71a6c4fa846b68d1b3c362370fcc7de56ff341fbfbf7ddde1acf900400eb6af8f3931ad7a6cd32b9b251c9077891daee9b8fc4cab76b83c11b8e29ee33cf47079ae6915002e77d821ab3beca06387f7503920ef1239ae1dc3b2639aa669efa1ea8f515dc2146334c5a3ac3cd69573f79bfda037fbc95a19d627bb8a4d750dd69956537f9a022e9a1cef1c8fd50903ac6435c753fd1c2fa2d51ce72a119892e761873ad39c3c00e47554b6e994b44d342769b0590bd39c7cb52ecdc5196c447ef9e07b8dc3c0571bc76163f41b35c9c8860c6ac095a3c4883a1c410c4294a3b0518c9b564c15a254de50ea11afa9a9b92b670d091c75a8431deeca83434d2fa1062a40005f3a4473f2336a12952fd6d949c631193586fdb152634eac25e05dd3fb4598fe64d418679433aa0894f3f92bb6e3bb924128efca631c5ba931cdc9c7a83fd0b0ad24d19cfcca619a88dc36cdc74a7d57065f6e231e4aed9e90268aa27f2817b8525581c58e11b60f3b37a889b0b3245ad5f7b14db2d9d659258b62f9ac3989e253a1829aab0d51e166f68a31c608c3b8f24db42a65d57223ff44abde12729a5c6973e58d1663782287baa08584f2b0837049228856d173864d0d096e1a6c44f866832b7e297811356d52c2d34a331d921e619a51d3484cc715e43bc5442e22dadddddddddd7d11bd8260316bcad8f0872b68b76ed83fbf06429e1d38ba8f7b30cf7b51792ff13633b9cd53b8cd5cb016b7cf3d3c508a8de9fb445ad5d1306102d1b18bced363d88561a310d480200a6c743d995114b545f4a5bfb268d5d3028c2a6e49880dbde211e4f016ad7a4980a28bdb40578b3a0c655c70c2edd809f7e9c5b249574f800813cdb5fc49d6d3175bb43b733209badcccfcc797627beff827b292b66213f25e542e7fc87b819799bbf7858b7aa7b94fb24e734a9a631ad815dbf3b9ef5eee1ec3c67d864b5ed7bca60c82bbcbf3793df76d7f296e71812b9897e21f9d448ccc4b71f6b8171ff738ee69b9b44e34e1c4cc6d29ad1333cd35910ecf071df335e45ae05b2e08617a1bda8217b73bdd07b908ead5e8f2d821148f5b07ae209c02ae0096e032736c20d8b3b5fc200257a2cfbb7012dd046cb27991638539bb963b590d04297d22d9587777f0a65f9392886c70dc66041b0bbb3eaa36ad1616f6116c2cd39f168459223b4313a92fa8540cb5c5b11e660ecd8c00000000f313002030140c88c4a2e1704c32afca0714000d9bae5270489b66499062c620638c31c40010000000008048832600840208ea49a9588461f2bfc23b15dd63ee562d9d379c02b0d3c2b49ee64b58b848f06693478759169dc03e094a2d14233c87d140ad0ce2e107ee0527a148be8223fad8fccd62e8dc0bfe16a59ea85f9e90a58a4b2e0a72dc2f1472831c2670260b854cf78200c89830ef367ef60caea9bae456a98808f3ff1f0f0923161bd1cb9efe111f5c07f2b80a8773fe3556bca3b7486fc3d0c34c6adbb90ad627c803fc871ea62a48e93a3ea94928bbec1e7faff811486f81b8c7dcff633c9b0ecd7351d163a5be26ff9043a9f3f7b13b2eb0db52c8c03201309d550de1c44db9fe89b515028e61645057febbee88478823da3aa04ad6871f22c75a136de5153b9b22317687d57e39d75a7af84198a2a6267eb6269dff36ace86857f3d9c4511e114fe97e7230c99df4f84bc3d50b8fa7b8222b19914ac25c1ccd7ab39a22949a0271f0a478cfd2d150f5ab06ab0c9e91fcc4bb3a7fa07361be8671d617cb454a7dc038b101d4a1037c43e4598f49ddf29503f26840a68d2ffce317dd3738983121b1cb2a039fcf08ca024534e8cc8dd993f604ba141bf0167d5f21c7f2d064be90149de27ada6a7c090c95d0ddbf728bb436b22f6487a7efd38462734e516a913ed92466d1673049e450653b2f2f022ef97acbafc1e922622cbd140ef8a76244252d2ce77c881c8a37cfb9a422928eca457ce62f134e08eb3533b6004cc5fc4e29638e3f038ce9472f94d4fb91b9ad5044f21038fbb67f39c3ecce00e95deb5753e95f18cea559af5877f32d75d424ca1d101385eb3d0660ee73e8dc4700c87ae8f4e2cd5bc6e1085d768989aa39eb68646b8a15ea0fc506802c5a3977fc5e50419ae64174202b04be264b73fed7056ed03417826c2ec5923d6932a9bc9de51e398e34e5c6efc9b866df4ef4716b17f6d05e1169a56f7acffe9602ff2d96fa6fffd2ff8660839dd95917425c8e1f453c089c8be3da954455e003a3477b74ab42b74020fc3a980356c968b16f44aef715c60f9b3d3afa8a644cba007ce81af0ce4136cf2d8d422cab04d9f30871d53997625a06f695f7905cf9050814b27e0b10227a349f9915d021ad7088853ffafa63c38c0112b7e425d5de41162aa6d77ecfdf818f2ce2e102f6dba7288442b1315ce737f568b63d29a541f81273136d5e4e33eeb588153896ce135feb7f9c9258d2e489d1669eaa8017ce804a6ce0d0c6d06f4656d40d44e0b38f6dc2c80001b8ca9f76904b0df835c3a15c00c6aee79e4317808af1569e8904d7b39fe29b56353c1644e3c79c64639aa19881e9e7e994f8db9974391640f8e304ab1e6a7ef9032c5ef9e0ea50445a3f2f80f5350e79b14fa5ff67aed7168a2d0d5ee066ee21af291a98808b9b6c1428f540aa3cfc1a6cb55d33541280c3413e00a8af242cc1d072bf28034f65c760059ce96199d79daf45d91abec88a39239c1ef3257b354ad9a070a23211edc6a39a28d2e191e5fabc4b965ac7b7fb1689e627d1d1af0dca87a25498b79229ffbd63b5660be6f24d4b0f4281bced5e20c3055eb75e20e38a26b645687245a83869a1472e0b7e313dbe0a351193b8dbe0da808a403406f9986d5b98fff50760f29e581d22c51f8d2f317a0162d6a2eb790c56ba4d7824bb49f26de480b15c53f3809b1a1f97246a9d3121293147f24573d259ca749e57b07893e10e309a8abdb0ab6e2ca055d1b4594022921598503082c8049e73bd633d97073edc8a391c148d1f0fda1f32ba91ddf79928d41fb4c9d158cee34d03e12018abd1b32888bd329777e22423b15c666f0f19e47ff674311944d4f4f413c9c66c1ced5dc874f3679b79201e04a08f3202887d9bed934d7ce5cd2cb47c8350e87161c4863d6bb5b54adad62c644b49e3b4b5ac6c8118fa322c3b765bd771892d7918ef563ef1b86d409185d18acf452808e99b467ff12db44e0d88209053e72d9fda3c27dc92ab3b9e540198204e7f042a9854614a75c79b7c34dc01c0d51d547157278a1b6f6cb8b3b01e38dd1ea0b0b5d6fb3982cac171f76f030d3c72312b81b3619352a5ba8411f8b312ad350d16830d9c14a45b39743aba4859e3c205f7b3ce52f4cef2435a6b5cabaa86f2d697df40d30331e218ca9da03fa05badd59f2ea5644c5fec687154ae2e8ca2b3173edf9234a551c019b4888cd4a18fe97e58948359152f1c09d024cc2a50b2d5c3a416f39456cb5020585825795659e560225affff63fcdd1e921d94eddcfbe4e8454f578ba53ad8a1acae2c77a14243e893892190ee6f296560db2f7ba8635ebeb7280f6fae0617699e32fdcb8971287692febbd8a28eb566b5dcc348e6e6b22f1b9ffb6e7309fea4be7b2bfb7bbf93f9e30f6a99697f581e0235cbf999e05dbece3bf06a5fc629f99940b786551d0a5115f106f1264f40ddaea35875d018f3e8d583489aa15ad9d51556a39f56858cf30cb2307d0c3a29e9a320ec486a3bb2595c1db5b74a2c85ceb8c935c47755ec80ad96821220640e0d5cf573abc180a116079b590819fc8660d2ec88aab8fe17041843fdf83054cf4ef1375b983569b4891e3f0ee44dd5d53ee0ad6f0087a9a92ca4f8f03b3a427498aec97bf6b098fa5dd58153e6264e89d65cdf1a14cccec2fc86d60b6a0aff4e320faa0ad0190eb28ef995a51477c561e0078b3d8d226e3d1366b33ce352574888534731d99edee7cc09cc0302c711804d40b0ead257730763e478bda1f0a7f82dbca319e74de926e854059bb312a1291f00dc5c874e38d07e3e34e4e58838586ad0d45368574f81a7e752e6f53f361647a325b91bc23001c43570af7686237e81b775961008b0fd1c4a282c65d5f31896724596c2eced003dde5c015ee6a7abe86861624b1b81376c78e4eae51372214e094aa378678230bf7a0b3502c914228f859b8afcc69872ce683f99d1676333da07e9eff6710971056b71620f145e6b2e4cbc76d6eaa74a330a990890dfda298e0269efc75684b9d9cf0888e2d4d22427e4afedd86ec81310b58fedfd1449c4178fc85dd8b7c5677ea0f74c2c2207f08f71a1b5c91211daab2594397012179d68de4df95ce4031889213a8fd7f546af59e844d17b6be16db829195cc0b4c62d0b10d72bea390d6a86fd8561e34bf40ffd79e4a4f73d118c6766014a497ef626d9284fb7ff8fcd3fee920793dc2928593ef15e955238c0c921dfc567f1c2d19dd5906f6e6868c99970c1e86041fd72c853ef26574458bae6a186a48ed6e3aa3d742a5262059720497a43ecf557ffb2ff48920235ee1d4c9284b4d4258a3de6e835a46216aee29aa08253150134de1db1f1a9e03dbd4cba19d9ae3e99c72b9047545fbf3daa18fd1216d43ebda5a9f1115d27910c187ac5a617445f48afcb0d5661959eb447306e8c6d15df28b296e59065ec6589ded16f8915534c4282a320efe5e80c57ad494f0d16feccaf92542fa47b79e3e491d20a6b8d8444b2c5197c5801d28ab080af63377cb4e726a829df8ef4ee749dededdcab497bafbd550b0aaed8f4713d452b06a3d30c785649d29b3d372ff419d2dbf3ae80d158dcbd152c66e54d16c6a47ca3a37a49bcac1616b782b55b332985ab94097b6d170134d19f20f2f9bc7ccf9fec45f57b8dfb153f94057976c5d7cb82bf65812d97bd6cb8212df55231677b3cf7422a7a0955cf7846f4926bc68c82ab5c52668e2ffb7a0f30938c8a85c5b827e042d61612981b5d3d818575905f01c6b6d57be3a6a0c2624a8139dbb61c66574962e4c6576e9635e737709087c6f3661d06bf6269a2a230d4e54e2f56c4bf606e0b997c11f8b496f4cb6488fb97b61fadd8df76a0ca65f94c764b7b6b980ea37a42bf98c0e261e055706012d68bd96772cdfe3429a96866df5cadf3f131e821fd70bc1b8b1987f9efef0415779ad0339da840203b353ba69639827b868ab53efacb4d60caf93fe5a2e986450fb0d060c69f31a4f591398b8780d138e0c5727a9d4af5bf1e2998c04d93a1297947894742909178052f873751ee87391e5d92237ba8def514c68872282860f4007c94ad188ee693e153bca2ba7f474fe305ecc1b2de900db6d985729bc9f14a12cc3a7985177c150faa95689ff0911489d99b5aa499a7ebf1fd35b876ce730e6ba4dcdf77353bde75f53a95b0c65345de5ec7b26e99d78ad88919c14270277722fbf089540154abc326bb4345c504c1c6d46f8da449430eb621da6a3b668d2a111a1dd18f14708640ab15fe55a1d429e96ecce2916a282d0610515735aa700eb26a019e87cd69116691edc870d6d155f58efe017c0be50ca0f5dca43571d0c34c44c51c7a62623b6478a167f228205306f217a338ea6dae418d31b1eddbd6be779640a3c8278810af88bc1ccf4605db2a8b38694e123b51893a5314225d9aa3a7330124f0d7d9208960bdc2e3699fcee45370d25b4ade6dc79523188da587b993d934b081103b19fb4365ce84ce6aab9b0b90ee9d077d6b9bbe80721de7a6113d0dbe87821af69b9a1f7d092f84bdd0cdd3adc71da6f2a7220a900fbfed3dff64c82d21b0554ee41790dedb033fb34efe1f4c5aec5b01aa14186e78964ebf3c36a1764584cc5882fe6655884fb60ed9972d2600bd8bd6ce1b127dd26c224940dcd9f64ad0f60cd4540aa0ca49705ea9771b4ec8541eb5932a55dbfe305d604ba0de658369e72780495dce72d46a5a9da60d4268c5aceef9710287268a82c6e66d79f1367667e5f61b8477d8fdc4ac36001210cb2c8ef12a136a9efae586c793c53007cbc5c9277d8789f4ef7a75685a5d482027ac6f5e6ccc8910c14482dcf38ab5a1a76d6792d9a1382dc739d339e3b539a3e6c1681b1a30b880254967c547fb48d154f03a7c08731bfd4ca49bf58b1553dba9cbe1b983a37448da7053fd3acbf3fdd9576c90b1787fc90ece20dbc4c3c09bacb2f33bae6e164781a64ba5b3b37a4fa0638613d78b547a5f8e81a029232839ec583fa4543ad967a1906de12d7d442723642a987bf756bd0385a2eb2b8b619f6454c313142de268885ceb354773021bc4dbccb05bafcd5f9e170caa1a5c2124dedc5f6d27f133b1c854f652d42cb9be5505fe92055dbbd7ca717e8c000388bee68c9cba7b291e0c6d2aa9f3cfcb18991d4ea406efcb67d6cfe602bfed1eae99dc0ce4363d4b84cc35d0e637cad6176b36c2fd044298ea75a2a28d1054da528921281d90a12d760b48e19f076fe1a9a8c4a8524e5fb6cdea1472995cc2343ec6c9345226f26f16e2361b7dda3e1820528061540460df4ced7e3801809bc94305cab6e11f5b0922a9d114732f7e6f602b6f5c937c0254b9c8fea76755b3538d161f19d37a1b5fd3ca94752e688608edc53d4acdfd9714febdaf8131d98e7849244565033b71c5cf01a5bc3f1bf1aa0741292c7ff12b20ecc018292d46edb544dfa82a0539a1dbc9e8237d76ce51d9b20d540acf8964830875a31665c72f078ac1cb59448087179388418a1c7d8818a9503b1117a6420202c36f36b86fda1e74eb458fe8709dbf6bd0c59acd8be8919a4ce72e2c181f40347dd95673723080c26071c2e5b88d9e1ca22ddf2cfbfb4f7e3aeecf4de5159074a565eb9c4f325fe10ffdbb3c5cd383e5196a8288e56c3db87298d5966cb87782c53ef1635d308a3db6b07ee83d944a232b34595988d868a13b39316b4a89d7e937c410c208d239c1315c0ed045d4e1e0c6b4d9ee48d90d37b3d2c8054787c888538da123498b4453861c76289134e35f301834c010440371738ead9fa8f8498e8421c6d59ac78e25b91aa12397891e9a909af3c75b9a374683e8501c19d7a791739fee425b8d90cb7c0e07442371aebe38461904e72c2d1f9e9dfd7bab2c063e1e5fa84765e8272dafe204f55a84e206428c53748eb1d43daa239ee2dc880fd4e75e05e3f1c5622ede5f180cd1b694bcf51f6d96e38836a37828e6aca03088f23328976ce2de0b3b4bfd561603e47c29d8c6759d97a4e1e7ea179eb04b940545e3734de07a1a429ae6e8860a119798a6c9b73434e99cebfe5baacf8fd111ffdd7e37477da9fd7cebacea3b1120e2aeff7a0c887a7742b1f49dda4e6ee593460225a7b4781488ba1a15ef8266e28df707caff193291ca597c154491d23253e7b44f60fb48f9cc1993c10ae5d613d50a288a31e40c0a51c7ef1f87f3e18213e79603937db9a61d2c44f7f950e2a6d017fb48be92bbfc3918965d9662d6d400c620b4c678385143b33051e222d07a61e5117d8e42f38757335c8eb6cc247270337fe668d3b32b629a345d715245d19af63a3cac2ca41a4eb1872a028d6cceff61349f7abc6bf461a4bb6382e11f9959fb4309366c9d63a112026617a9121050bf1e8ca1ea3eb44c34012c321fe1432261d9d879b3390fa1cfa71e701aa909c8a47ef9f192cb091cbd3370e14fa82014fecb5aa0ad25936a471d25203962522c10c979c8400e44368cf63bd6cea53b2a749311f7282c2dee1fa149171321b553aa79f95c75a2e303300012d82d016458da6a412154a1d4e997ea8b69db4e703c65d81d84b35e8ac6f2f426d55c7c57a553911dda4240c2825d448e3e82fc7dfafbbc64fd0527097d887710116ba23263deb28a986ca0b23dac4e278171450720a7cbfb2e1694aaf44d8251bb97dafe27c5009607ddfb193b1f461ed9ddb89443c0ae8ed8363df276435e509721eded94524f363254239cd693dd4f03013e7c59497afc919570e97ed649d5f9320a20fd0fdb5e11fc8f8e7bb0e53b607500275ededc1ce0d02767206bdd80d3f10b1e1aa0c650d6614b0c24308a85a020efce1995f6e42bae7d667309bf84262a0fd6551261742fa6577813a050f3d6485430294bcf0b68a9b292021161e7a7f345ae31717fd2b3433a3bafbb0b666217d37fcf1f96e74377bd05e578d85e905b7edf89f350123ea8ca11adffb2e55cc1dfcce8e3c675c31e340fed32d6e51b8f5dcb253aa50d8d74bb9a99c7d26fcce7f14c3f327c9a8980fb8b0bd4b8397da10591ee0524a58b6baca6e4ceac27f8d6c09233f0333f483707657bad05ca773635552fc01b33d8aebd66aaae6bbf2108593be3310cb054cd7d1f29e916ea6eaca1d2d68299c524751062c8905ddbc3050ccf0eaa9dc370c91ec1c1e65705cff7932ca4b645e1e98025d5291a7d6ec739d62bd75dfcd01ba245ae0c1d02cf81244d5a03eb277df8057798807c637d7886e2a986e002e71f11a2fed6021b530e64289481bf6acd64da295c0114ee8717757876a02108a20dcac75e2b099aeb242982e7dd769dcd63e365c457909a792fff980ab5842f1aeab19f9e8e760785af08fd9a7e2099f03254540f24d0f343846f4597b239b1fd90ce5b25050a2875ba3f3d76221c17168f54108a2b0062cdf4b55503a9e15942ddcc92031ea6c71533f943a8cdbb3bc16caa30d384d2d5aef0a7a2122b8101e60b0660d83e8907470f2cbd336252e848789e94845adaf94027a12aa4fbd1736699dc53c52ede5b8a6d90a6719314037d05c6cd7f6fbaafca7b6adcff6a039b46d61e67bb4d659d57a27fafb3d3bdc8c02972dd6b745dbb38de0af7951ab830aebc5c3741c310c6fab156b17e46d7cfdab1131f613216ccbff85156b835fa482ab5007013a5d6d0268db2a441f2b6552edccb41c333afb0cf0b79c65b0d2f794f358ab5340f09c1f0df39f226a3a58101b13262bdb0b327cefb8d5bdad3bc0bacb74a3f4db9f1b3eb2eca284dc58b512456cb5a100bf2f850d561c4558c6b165104251b224f9f49b0a1ff7bea099d40c6b38500f6f0ca88d426937787c6e64b25efc256e7cb8c854c3044c869bc178c86289f147242cdc4a66ff824a4e91b80e9de194928ca7bb26ee5b5d04c4657671735514502dcbde7b9457804e3d9ba3dfce5c1ab374959c7c289431e2d810a411dcd9ba4dff12bfd5f35c98091aea216d415e3156ad4d2701bda4951c9a4c8bb854036631237cfb6f94652d626ef4a0b73d34cf127b26ba3e668f232ae6b8e067629b2c7eed8c51ea688964f911d826a9695521dffdf8cc58ea4c8ea1b7b87ed2229be339859a53502aa3c2bfe23d2162245baf30be98490ce1765db0c1eba4072d4fdf7931ae5e91494654cf1d8801fffe5071bd1d89fea287e98945b32c63aaf7c04e7fdf6d74116bef11768a2def8f1c2498ccf8b819a458c95522799cccbda1feae445879f6e57cfd5cdfe8d07e23ead281dee03c84abe7909284195097d9d550c80e618401b7f776e66ffeacc317e9f86fee60ee10dbde47813845e7f6fb6bdbe5aa960fdbf652ec10f20e248d8fa9a87fd17e7558c5df6ed5ed26059a30c4a89343215cdc183011d673fb6eac1e0768e748cd71d49c941e5d8755337d209cb3c9b678c4df2b8895a06796914146f69df1bc238129fe3e9696f8d89948b3daae11312e979702f7e8c9c665d7cf0ee38f1711f82dfbd50961bde40d2c8b997d2c168eb7e791cb328aa1791bb9ee6ca93a5ced28480ecb1c08b80383af99842a1bdb42eb686acc709364d1bb4e43579967ca4633e1eb1244a9736cc84d28f4d2e2dd4f3e95f14ae97b964b0125b007115558c3caa7f3f76e59cb8c6aa9e97a84d45eb097a83c4635e003c15ce3b6b16e6682694b0f8cfe51473be9f872ac6b716475ec68ab720d2b3374c7e1213af5a01f80539cf127f8a33f4d7a6b7850a9fe6bc167647cef504acfe0451575424069f13a05abaed66c9067b915d458383fe98d3e566f6225d5ed11cfdb44c91763d16400be78d8ec743016ad61463b8337dc2790d61ca336d0c0e7c58eaa6a3843f1c8ec808407145e827f52e1f46640bcc63dd86e71514ac6fc8a7dad07c3bf654690d41bd41aa7176ef65dcc771c8927166f46d39d0407ddb48a67e378ff1ff87f48acd816008f436993621809c027e342d96cf80ae82fad770f57bb8bb54dd1f201a1f8b1e383fd80c643fb54143d31e4085b37458413bd756ffafecfea3d23265044a18cd6f84f03c3359d55323d2b820936b443cf09104a2b14199996189697d486db05cade9cad39e904a5e0116f682ffb692839ac76b91c3a5c325425f3cc9e5de7480eb018cc1777bf97a2bbee784cf7330edadb030b2cafeb8ceb83d01c5fb836122af3df18acd74ab8da0f0277510fd38f08fdad74479e440ce410dffda8f5955df7d86b4701b064d058ecf5f71dcd7e325416b9827ac62389643e5227bbf83fbe316aaa466c9afe8c33c260416dbc26fcc60b3b4e10583c16c0ba5ff06b77f69201e2833338eb5ce4f51e8e2a98072b989cc79929b14d3ff6cd9f3119d1b87ab5f918e75fa17ea26b4d4a788e7b16be2911fed1a476c0615384200a0032e15795920a88bc26a119ec696a86207607d6e73d33343e05acb14acd9f8f932643365f7705a87f72cc2a8c5b5edb313663b9fd8c313993a9f200c6abdd91742b41a06cacaf8da68032aa365047012d1d4c23528d90816f50f4d25280d4ed9af86dd73130988cf83f679957ea7cb484d1df05288f1e6c62558f4851832e2907600f57453e31becb089d855ad236ca05a6165816953c17300e4a12e68fce0a21df3d67796cd1af564a26d6f6da98baed6e94a4c5ffec012c1d5cee04a73dfd82e8dc5df8738ec072f94fca4cd0b76e1e396f53c082fff6ac7531149e6257c2ca45d0fd91247f0dbf59abb48433a678ab0116d386bf65573de4943208a4bde7a6664b8040b99d86f803fe385b02df17d8485348ba86f836e980ad7b7c58f89747acea2c0a5fa541088e314e83f14cd0fd0e20a84d49316f33dc41306a1a2807903ae81d3148fd0712879e55dfa800ab96acc8efcfea56b30a7085760dd7b8d5e67cb2f5650181a3259b8a459202f0a53c09b2f70698ecb4ccf9a13e2fc5b4db923acc190883db5e29bb509b75dd334e8a8c96ed397e729fd57a8625f4933da1f67c1b564f6a7ea282547a08cd9b0ec6e2b8999e7556bde217b5b112ceab85fb4cc4834d3ba84587f0318cb450b71964c4c70fbc397db7844746e4a50d9fb6a3df1741c81c40e068a3d1eeeda6d7df9d4c3b7bbc2f054000a46fdd570494c29643de04d4f4760ccbceaa7b84ca5d06212098a58153d3104432af733428df71a5b92fc7af467eed1b6dcccc960cd8790993bf87f1448d9cc9259dc454ddd2e1be8df2e0c91699fd608549c2ab8907f91059a7ce2744b4b0df4028596986103fbeb081aa2cd970afcb64a7f585ca831a94cd883d01173a010878c5d041430407b0f78681c828f49d4dca161de43301bb44f86e4dde316632b15aa16ced24e83d2cf3a916b929dbdf7ab347a2231dea813adf4971c4810a9c5fef026e409d35d9d20046fc17c4e6811f2e074baafc7b9f280b000fb8f6448e023c3a24ca41c3974ee191bfb588ea3559772d656e85648ca044066ee40136378139ab18e69947ffcaab620a0f4012947466e4757d3ce6238c9a5c4ca96fa6460cb99dacf255d57583f8b86ff8cd6fc22910eed6bd84c8c47a579ebcc3621c0e0e88c71df6486d450de31e9a695828af6e1c12769042795a52d40714a8dec12e4ab0136037800d2f0c51c9d0b26cd32e1fb0a944cb32b938ee7229bbfafd747bb26e03287bbf006b7bb9ed7703e4593d72c40549ba2419bd75e77bdbbce8fdc1547592d5aa4592191c1e5b0364a1e0c626d341d1c04994991a6224aec155c0f1ae56336192e4f4b3c5735de2e950fa97a0e758917a041777d61fa5cebc638695d19d1549f7c2211dcd150ddbc55986080477b1e03962a6a597486ab77da5254060d36841d4804a495cd91c59e1a52d0408c301835873e3e65fc8049fd1589b0fa6c5e938d3f79e60c357b0689602e32456f583dca78a2e6cf6e4813dcf5b891960a036645360076ca49658ebd03f0f78e251640944894f89df81f8f6a8398914d99654833f082bd445b272688185082bda8ce33356cc1c3c95b123674b81f0197225d9bdc730458656a69d93d209bc523a9d37021612a1f18b9d4276bd3f2eac8cd7776c1a6aea10ad70f5b64899e91cd4dcdb2e9fb0f0c58986ef4361edd4ea38fb93d276699545d7cdd53a1e2e9864943f5e15a495ca1d6188641c81c143df5bff76cb9a8e3bd2a67e13a76eab4d99c7514937fdcc82ed3d1c39930e7c583ab38a73925a7fed30e1f21ad311a7b1146f2640121fc51a554cabd1d86be66240db1a50bfa0e71efd9b1dfa1a462b09482730ae6683e2cb69ca19d36cd4d4ca22f0c3e2bbc5729aa0c6358cc762c7ce60b19ad15fd6b905d367b017fbebed7dd6bf73692f28e76e5d6fb7dedb4a857dcef477fd42e06bd9aa55714a77f5ee801ff925ec2ea92fbefca190e03295ef42aed32f884053cd20e7f2c643e4e528a93f2f584d1dc83ea4dba8b44b803afdac99d2bb92c516f08d91c9d5b0ee34420396fce9007032d4a981d026ad42c05473cf6cb443499cf64487ca009c5894cc2a5d3b15dbc78e557476f1ccb88341e70389cfdf5334d25343e401364134f6ef0557ae7670fed3fbf62e0b7a77f62633016ee53573d15a2e4d9de69d6101aa2a74092e4f161febb32858795e1c3baf409a01672436d2a383698e91d7c1d6d6ada424ce5f9b68511e6e557bef548568502b399d785e0b0a5f62b3071599a8f36f30e921f43864fd1b5dba9a308b82b8bde539bf0d73b7423daa19e547810baf7c6518b32f9339f1ed4fdba2bb46a425db6e8a357e72449f67b1390d5efdfcb906d71dfb38b47b0a5ec0fb8ce3fc0703e6a8b4184eef03824c86a1325808d48b7d5ed17bd2175be87f4bea731b34734f52d2152f06442e38683876bff4f07dd50d293a0adfcc950d1b4fc18d10d834434af19cc6d9fb2c38f7224bffc316e6d43c52c3af94f1f7582e2002f311896e9ebe729931dd4fcbfe0b727f8984cde729dace55e7829e72c6d13c7f8f09691d009d231ef146609a9d813f4214b5e5a8168a2b6806839b3e6186b9b82543a9e369cecfd8d85478a527e26ed0b97585e79c6b5ccd15691f2623a8f701a61f5fc098f54a6cbc4d350197a79f127f1d822d99e5a5a8162b7d4ff2373a5936ceedef597a2fd6656fcc8653fdbdb31786fabbc407936b8026f907958a0b2307a31fe92a992954b4817080d00ad02c4e76fd5dddf646dd65e2f9f595c168420232b35eb6b03c6f053d63ace1a5c9143d397d584fba4001f83f4f757621aaadf9aa00722ce6faf37a0f915374da5a73e16b176fcb737e881dd4f01bc827eb8ef5e828220550b29b417f8da011cd0dc8c4b436c6e17b55dbc0cb8ba312e750dc05a98def7ff899bddbe785d57e7fcc0b8c0110d5b60d4e5817e2b8fade045c813b815b829187041683f670b7c5420dcfd2606cdbcbac9c87a5e00b40b9451891cab205a0e3e4019354f8ed87f629836483f940b37c71197b66420afa42594970c6228194862158954d518be8bfb3b87435e2c880803bcde08c3c72dbc8ffe1d636fb9ace7162933b1612efaea28ffe28c59b5ca19982502c498a27b7b1ae385e845a345943a6130fd1e38a3ecca84f4f061a651a2664b12d8123747838f24f144ce77e94202500a902f66151858081a8f210dce89b34461cd4e3f4479f9af788f0e907ed9d1660c96107c6a78f786833d66ee7ae2338a2ab1b3be55b19edc9b171de8aec35052312ea2cf55a5de5bb29fe95aaa4190fc7d8a8c92885b5a90e508574a740b79fb84289f8df70b0614752593f859293bff5004a3ca3e8004fc27f04a138b8694171ee06df28c48a75c66e81103c0df7ad64397de859742bd1f45e24d40624b1d02931d3d2f8833dd0af12c39c864cf5df01240c2437f79687ade669d1256e0aa98a0a3c119663b47741f201db2e265ea226929d1c9118187675332b51f46ac3415f6aa47a5e090883053718397083cd7a145f8f4bc34d7731a16c0933f32e0435c99946f6a4955ee090d5a407b3f3c24ab18d8a8485eda6e981f7c4397f51fc8642c60dc5a801cf99cadffaef376d613236f2bc403766989e48782e2857f7f53c3b31eeecf6458c230d6323b733954489841513d633e0dcea4183002986c479c12c52bd5ac89c8529728b944f7c917a55d565fd42f9a6aa8891e6888a9a2eee53aa1b88f4a2d6517f5e6e8e8dc1a18c0964547223bb321d237e5c763bae52c6a54d90930eebd294624f6b504bdc1ff6df235952f95d189ff166a60b5d8c624feebbb8093ee65ccb2fb41ac2d47d6fdfa086b3a0fa3cfd222074f57a8cec27c42bfa22015883b0bfd6d0f97c61c6a483c96a6ff7bcf5f7d8b8f645b01da55ec9f02a4b9729a40bf9c607a427075addb8b050ee4154f7abf8c9dfe2cbc971eae71804bb0ea764e29fbd9c129f86c173b4a2070224bf7f223d093c77d0be2673a53bb39c3a4ca597a88f8457a6637f08089d89965ffa607b07c8566f63651367420447a00946d96f3333e6f043bd2b95e5e5179bb5cc31ccc7f3ad0e7acc50426466abd01f4b826383c53b6f8e857056a2978947c89ff48be295f36d6218a35213d0df71665320960da2035a47595f094deec5e3cf755df335724a3ad21d220b465a12597daac219230f93b82aef6e38427331bea3b24681a8e3d2e39547d3decd54e3d386e45a070e3380bcf91600e43f5a3641bdf284ef1d9f41d5a8c5b5d958774e828e947791031716776c5701076880a6bad5e2ce382dad2237edefcbef1ca9995b2c4f24e91152c64b30f2c06a1f544742c9a0c94482ebfb9c5eb4854432f2ae6d036719d56ee99943e63db63aa231045a37f4c97aa752f7c46dbd7341b8f0f7311b5ceb4763d5ff42798c7e47ae71c5b8e5795cfbe516da6de87a01c6f72b0bb483b4ea7bd3e1dd223d7354a070ff153851900d97aa2451997234cd846baf7ef17c0485cce288e595c87b214357d808b582cb8395c362ee59c57400aa1baf2fbfd0b9fa9a37be63228a8c4252ae3286ab2cc7cd659edb085c62c57080adccd9737e599bc383c75c38ba73f4fd2e962277447d0c47366f4bce30348d020b6f4ff54b9065c91c7f6b162f3634933f62532094a76c8b1648643903448a58eedd342e2a1dcc0445dd168fd95182748d47ace772e764c9197f4f7a1bab58ec698c617279976ac8496c6ca4972e17ae612773e977a9aaa11341d04066412a0c4dc12f01201d4c014e231bb15974a808a452f85b3ff7547f5aee3f7135e91d6a73c24b72f168a6f966cb59c8c894b5f2b646674727287d5ed85073888fde75847aade88994c2a2055e10bded420703a4780a888a2e139b5d19cb1f80cd15fd3f5d6e87a5b26cf5c1928c0dae108b07cf179d17821116ff820d40db82ddffc973ac25655f49592a6e5369ac0d1c7af5445bbdf689d0f783cc11f3ca1bcf17e41cca97a7bc5e3dd717ba46dcb7205404ecdff343f0ac1ce55a76da0d9f05638bad32eb845b50ea27753ce357e248a1dd5f10b4f958dcf9e95929b41637bf1007c20aec3fb25e993a0beaf045dad5973e7ad555045e2a369871adb4780de5b141543e9fb050174b6eb0f26b7ff5001baf96b51fcacb4c01cb95d968a3e00c96f1914f5c2e43632971ae3ce791f0bd1a412a6c4cf7b8e08d8d8a1ded0c0511ee212d4766ad84e4988c67d726034ac897391c2b29cab863405273d6f2014a96013ddf252f126772eea1061c8c743cad314de212a9373329dad31f7286a4b0c53865553265b2c83751026fc84b370038db0eb13d75683e7a24abf25f00566c4f7ebebe02e0b5f9601860a3f94e21a2c5dab033e7cd4fd4a74183abf62e07cfe7d1537b74a45fdd34566ea63c8fea3ef9a828d6eb730c2dd8f87f85637aa4630a859aa730ac6fabfd4d70754f2f7fb267da5a858da0873db53d4e507537e4f80d2a65c9f16c67381de67e30aefb2d7cd542d7443ee628fc08fcbebfec7dc8a06eaac971ea5a4272a0f80693ad73f095e619366ca6b5d703cf83fbfd7e373e5baa1a11388b9f8f41ab552bbc0404a0cd8cd7134755452915006709887d4514279326aef5f98ac0355be7910b9e20f2076eef43908478d1ccb3ece91bd73e1996e989cb7c22127e808365a8317c1689c54c05f883892ce9a2b495cacaa821fa3cd59e25efb810d8802741b59fc4a954ef22f8b2f1c1a4ab6fcb8c82c1ed4e379f77850b8d3e2d1d4c72ee1913ff5f2e644ce9d6d128024108403aebf21af7aaed95f61a401da86d843681a3dc0655574c9128ca46de72bab9b7eb9b1b7c179719c674aeafe128967fe0cb5698ace8b30d3c4fb5488ae0501b2abf579ffa3030d22495a91419d984ed8e49e762a5d40f78432c274a9d115230bb8243c0eed0dc63c0da1036c58a55b23fc8ab422c905b64b146391563fdcdfb7e03eb063e70b492e9d80216be0bd0d5f1586a485b3e2e8c49e2ae89d4a387c7583e2c709b2c8828534d412d4d26f4da5df5aeb39c30ffa2cf9ac67e2c17aaa476f2fdb47a6204f79aaab8bc532e53cd59794e8d7e8e214bc840a9824b0ee8920b5cae199f1a3b1a397f9f3fb0d2eed51cc83d6a11a4edf8435b7d43c5f5500358991bdcc19aa4f5cbb901fe01b9dd1f2bc37d53aacbb117072828610562a0b24a073bc47529167968b467276b6dae48035c69b8923fef483fc0aa9f0207dc17ca11a9da3558425817e217c123637897c52ea8267b01fc03df3dbf57a6f0ae6675d22d55ef53c85dc5689ebf550aefe82aa5e31d29daa633abe815715268ed70640aee01c7231e786c00a7e0c480711446ac72062f38b98db412d01feacf88af4c415605cfdf88eae33a9bba0983173a21b36409fb1f38f58a62dc7342493fd394085e8b84152f4064c94a980139617e4a571615de9c60b00d0d438731c787301845493b48b0f4198651c8042586259cc10d85901a53f8565060fa911dc002a8ac68291020d091319c5383469c928bec1b91d193334cc83b7bc541c06edda0779f2d1f4dd80a4de20ad19ef6f088532d64bf6725064baccfa30c2557f50fbde7ab7a02c58d47dbb0005c2427fa0ce7b088a6ac10546088a32f6630d0463e23359ce3944b11f84a36930b252f684c27b7c36bf26c89012a6818d8887ffe7f40b4c66f78a3215a99bb86aef96dd174a03b50998c6c4785aa208d119af2e8e14cc52829acb0aa46c3aed953c5070c073aac14767d4ef45448c75fcd4e93438329f95fc0ef67c691b8412407a8a3a89d6011544fd7838661ea7b644ec554d7f9a85b50c817bc50121ddb994e1a48cef83338e780055c617998d265001c6c83418a844fe5ff5d72fe48627610b1cf64645e5fe5b9aa01f049747a01a465b39bdf7da2c5061970a4fea385cbf58357409c54021c6482f508130b2871e3986670f2e2764006cb7ab2518e47466732560effc9005cf65382bdee2c5ce8116233c21c6047bd7f2383c7b39a580b58a3497f38572d3e8a0b3bb971aeae798bc84c50e47c725697011499063df4425e1cd955efb82bee654f41b4b2360b7a386b07f6606e828d90babd157c9be4bff3ac9ec65421dfb52f0d8094469ea2769906330924c7a671a2a9721200c4ecc7be8d5a7667918d096e4ec34527aa080bac0e75760024667e340c16d9db993061723b2c0a955ddc92c5ab67507b9b1ebac188b75e830dd7144094f868f8b54de1b2a87a783424f6b9762aba14d88ce6b81d46db98484004c97515180b4e5b573ced79db00dd08961a648d9e96bee433a5b085d2873ac3b757620cd1b3eb5c801d62e2727c6d6b538a40e6f5c53da64c9a16654df9d4f56bcf16aec01c185d00851ff70d0488548f419640c03be5fc801e291e1c731aadb75d056a362061c096f56f96e3a1044baffa34adc400835a364eb3fc04ca6ba095de2e732af626a767c0a2ca06b1006ef6c5cbaeea6769679bde556f1688b870bc489d80c673fe2de5de579524443b42773372b3094d0cc296b0ace26c0f772a77eda0df427d542e76a6c95db329a8d3970d08b2a2ba4a49cf740e5eb41f5aa1092290a20a8e1ad41243814ae731053c3c0fbf9d3c2ddbd876a49fe268872dd05323c160ad1528f2863e1dc8d609b1ddb33716e99c816f7b358c62836e510fa2192fddd6362a150ec246022eea28ef3ae368b8bb2be822dfb77c2b9bb31d6414b9698df0ed1de400c3a9e881de0b004d0d7e63bf4bfa7cefb18fdef27e8205e4479d5bca411f8f8df9fc56a4274e93d6efc189ac27a49085e8fe38f9a911b4d64591a929364dddff73946af7b727ddd1a0cdf40427970ec338db7902afb5d9e89f858a283b3f028c75a7ab2ff847046784c962ff9cfa9bed9aa224a90cc9626feba5f80fbf4ec4018e78f7cac56c71332839b9403ecde42822fb51ca96f77543fdb29374c974480c4567d05c4cf2ba1707a1738e939581f04b06d9d8ca942a7878810b2cca137881cb09d912ca4edbfa8a894379871db15388d1ce80eff94ec02cd8bb5988948ec10707571131ce360ce128c3373ea42b930573510ea8ff540cb25cb4bd9d64970384f01c588a122151fca115f4500b4fffa05de27506061e54d1b734e1b112ceffeece20e27fcf4559e6918b84136791e4333247806de5d050c893e309664fdcd22714b2d085aa374b25efa65748571edaecb63377247d0981d78c00b01c3ffd21d85af978ad5a22b265276c30cec304268312663a620845673be70fca27e0e832babd3efd01babdc49b84c3dba55e66c1bc2c5b9938102836773cef7af2505b8038e478d58b145a2e1170a9626895d729b8be606e33bfffa0933cb9f9b5e53b25431c8b9a2fe0186f3d02f37c569e2efea1384588d51b974a1d2ea4c426f2d9c97387359f7ff7ea3cd14af50cff30c0060a38e6a65b083362ee19409f64c877694e9c3f41095a1fe23063d7fce4340bee361b5edad66a57a66137cf9cd58715b89aaee4ad075bc9052c09bd4c48faabb7dd0750794824dac61a2d04937677245323c76e43a9921c42e849c27a5b344c70c74e0ad5b4d4538c8aa26b84d472449c26e8dd1ac553b0bb79a17831d751694b1026913b95dd00e94acbbdcf15eba1476c6d3b22f6c26b1c070e1055348fcbc8b66e2719906d8d9cbab991b8722bb2dce25637ab5ae04a9085d08071d56d5c12247e62a3e6a43a124eab9b44b00df61279c247b0fae1959eb8bc8a5e213f043ce3e597f31d68437204718f6cb874beeaeebb320bc6acb3f3a24fd37c38995a984cdf0e40ea3cdc2d12722296fc9c4fc531be89c513f50acb04cd553a67574af451c4f9de569b91bc45d8bbb8ccdc4bca571d52db3dc60b0b17db3049102c4d80da7a0f179e5c05b84a85f238d5952ff15a9692c821bfc452612621a8af5234d1a871144e90cb7a7f1b9a42c466f3195b2ce2df9ecdfe2bd06fabb9d1f084753f57ba07f5afdc10282ba4f2d49ce5a00437c9853c43536d6930e2f320606a32c9f03eb63487ca1f3b1a222ad39613b3d0ce5e6ba6aa7474c94e1a5152a439e86aa611198c7bd6f2a630a02c1ce17178a570d08f1855e43cbfeff22e2298ffd7f5883623e9e5d9e4a84eff579623cbfc0264367d771f4cda765760ae8bec6bc738618b02b9ca7708525b2a841f2bdea9f6f7bcaa6148e94c66610f86a14d3a70266258a0ad2c2f8aa7f68c6c83a2fb851e6b7be4330d2d960d3237973a5395369eda6c682644b4480745c5c43b5cee5ce808f12fef501431d96a5f4ca72e8e8297a172ce10f61b64d7baa86e8a6daffc48261c3dfc5567b79ded15ba6c19dc400477b36bb58e844fe32f944b5f305c39589ad08cacd057b161f13a888fc43fd1f3d78beddaf0a749f3687e84efa0f0ffcb893ea6ecba5277da0ff0565c3f0611badd246979ee352dcbe0466260043150ce00cf355d8858ebb47555c648c8c89ff3047346600dfcd2d9263e5a18949080d4f466a029b8c3d7072024a52fb669456113a31d9f1ea6569f9c47a1b41e38a838cca83564468bd4c522aa13dcb3ff91a663e7addba04de1017dd68dea35c6c85c31ef7c492fde745332eee93b33768d315ff9fd9fd5f3436fe12d9f22c7d4b44a46f9bbb6945822faadd17d4b9d5b2d4e6ccba9456c5278742942b4ecd2249aeb3e39d82aed0b9c3971bd63f91acbe7292ebd24081732b2e0bccef57182c1ba91da5bc4cfca08cab48a39b6e0272edadb7d96c2439f8dc2f1681d1c828377dd784d8f7b684b15896222f86708f1d4c13c6c678a39304c5d24f82780cebb4afdafaf697f63004f0c25c5f50df203d80101c8a280911acfc955aafca4b759059fd64967fbc30d1fa72f5f197ab3ef5efa40c86e2808160f2fa71b7e5600d4301f2a29b6a21147e1005b54fd6a196135b07283874c5cec84ac1dda729887eac132ad3e9ba36251c160550f7f65903c6b58f6a8b12034f049f74f6ce99a0b5a04d52456fed809bb875e313267651d0ab2215f723b0cd08a8963770b27ee020aeb9f211d8f1121f68dda5a232f63d9e800d48adc2e0e05b9083b9b5031e1b3808a01f85240063084384af5597b13e1e880ebb5824fa7049bc012cb50db377fe52f644101966546e3df9af56f8ac38a14ae5f23a8d39b040ccfefd5816b136c5a75c2b65f53bf3ff28234f7cc265307d18f80004c3ae6ec843f1577747e4c9d2378ed03a6ead33613b1910804c70e9e45028280631390bbed1a973cd126c20ffccdb272ceda1a7bb1c1155396375248224cb79060a9a9bebcac07517aa050061360c862768346784e212f7cb3ceddcc7db6ec7491317615ee54162898fa27e81520884cc094e26484f248ea2748ca5bbaa095e7eafb13a84740805f41b7e86e45bc7a64344a75006516a77741ef947ccc119864187714a3da534a0341a307da3b07a8546800779bdad5c5dc87d92881915a5256c3fade7ece72fa925a7e96b33380c8e42cc7860219274fa87d4b0b03acb272f9b33d228a89064184f6b2aae88e9c2bad8812239c934979096ef8728e43f8602ee34396a24d4ce137a59e57c1ccd4693173d257da83141b771d0dfba666f82a407afc10b7dae70064d8f91b9f8406460340444b1779aa8b60388829db4b008f6e637ed33b86118101115552d68ffb79c16d517032576416ad5d801e8ab790794551cb5396bae12efd450a6e3ace42df26e9dfb7398ad38af1bfbe509758d5fc2f370a327077b2d9f371cf9a2b6d8871b3495b5a78370393ab151e2f04fa7fb5138823896f76bd24b4734e3914fb9128a2e13f298f2f1d7cbcefca9d677a710b4f2599d4d1662653d8861a1d5faf2b3b953102097d5a33843e0ea79fc4ab9fe89e5c299da4b4b456bc2a28318d54b85c9bdc0588d30ebf2469ef50e40df50bb09213d109ba8527a0cef6c23071e294d8a1b2fa4c09a6fbc1da18188d7ae52443c673866c0161e91862ffbaa638ddf0987a1ff5e00e0bbf191300418d3db5ac765c7039db7f28cab693b3209f33681751686378d98bd4a951831f9c2270b36242cbb36ef001e73898c23fdd9f2e9c360d87ffa01c45ad85af9932f87368656b7ac02dcad5882cd178a9589512808ea21041ddb29b8c81afe34e19725e0f941207ccfd0d694d3a67f200cbce9d5333429e908e876b18c2198ef8d81e5720aff1232e97d8255c0621ab468fb0104742f97d1cbfd78d7673170df11eeaa9201f1732f06cdff4f66b525542821fbea3b51b98459bd7d0fb523101730b80aa13393f6711055dc0bf6ed1e969b5e4efcb530a5457404bb56dab69641cc2d0f52334bc0e6121c2b0cd20ecdef8fe94cf467802bb665f2eeb7e0c4189fa0b963242d98c96fdea4dc0da1820f6efee1cb5b53a3b81cd59ae7b1c7a4d060b11666a0cc06a40dea570d50f80bbc330a25a0f6523e44d693e42252045b1d3fabb11f9ff3fb41b9386358439dfaca3584c39486c368599212d1a2561b4609c64f80d0e4ef65df02a3a322854a38b0eb4cd8aff6142ecad55b9fa077ba43b80eaaa36e38be6d41a1c23cb0ce2f10188861d8c7d750cd1716e620ac7f3fcad184cba9d416521718875376426e205ead76ab6509d1a44f1c59e0cbbf356aee6bb33e03890bfaeb702a8d46262edf33d48bca6dadfc92277504537892521bf43859b9b1ba9a26d420142161e9c5ef57c1be195b718671ef88b89455dfaf6777b382c63236c9638439eef6ac1a0d91b484764f03598659f8dd57096d34e1c1e158d98f507e4689821545e813d41db2f4e88b0014dafb5108001b1571221cf868b3c61a5a7e33d33a6e9f6cfc795d447e0234a552a6000d6bfa8e22b0717c68b5f14ae757417063b4ee3041299a6655f640f8f1e98394607a75c9a3e0c63d9c72661fe714c0cb91b9b13f5801ef8291fb949cc57eb67ab1a08963e9cf62aa7fac8652b66811ebba272743ac93a97aca7c035f137f4c538ed60418b6f07223ec81a076ea3b607c5e4d81580814754f22408274a8f3fa9ea81354bd2a5acb19a49055463544fa9e112919146f29a8b66b5a4cf429d753034606603aa580a796806f83dd00656194145044015795861194ce17bcde2fb2362cbd95a2d97851a3ba519362876386f2b55829e7eb5948220efa8724b6268ab743da70bc05e1de68f7ad0fcd424caee8af1f582fb138bdd6ec5a9b543e37f98f2354f4a4bdea32fabcd97c75bb75b624f8b92b715630fd3d00e23165251a09bd3bf7708892a69d48c4ad24f5de9cebb17c150861c209d7464155926439a8a62a0140870660ed6e29bf56d0c68a35b3c6e7beb9c80656f59814fa6068f83bec56f2ef56e8cf6e857616dd3405d3a2a17544be11ce5779730d7aea077cb8948e3b040c30e61f36a36d690113af86305529bf679bd162fa639fa0ce9e14685ff75e3b395501061aeaaf2b7078ee73dad71b900983c161c8c98353e85f80612e7f4219712c2ae9e18dbb36a875fc2a367e2bd4f84a2207cbfbc8124e0583680155345b5b2cec3b7729905cf796ffe13d104f3bab7106e92e74cc3905f403a6df44529fdb32b4ee5cb9053d12164f2c936769665d6029e96c54bf743297e00852938366b81895e18ce1f1415ba0fbbb5188168a2898c7dea24a1c6db42a414d26b353cbc5258eae8a7b9b7d069951710658c8402931adc1243ca8d28e09350d42c6bd9edb12c35e72f2676e816607c79c9a9e6704966a322f9e252c65bec100bcb2d6c850941223b2e028125848ae24f5ec0ec5a6c3160abf9597b6ba93411bd22d0dedb49ab402de4a728b23b87b5a1484a5f156d474697f49ff75a10dfcff1b9b5399e11ca3d076aa4a92afc25fac7964b507384e7e8d439582f689475a5dbaa7dfd6f2735b42252393534e6f73482b2b87ba614a6d3d3e39964796ea149f921ccaac731c434f466ddf9be63965f2e7891d05de8d1fd4344a98ad9f5a4a1ed265aaa2c0d55599ad4e877c411170d88e1f70ddecc9c76281da4f2671e193cc494a1e50937c1d0665a0de9df2663c71434a04adf50061443d3658473a2ac10ae8f07eeb058979bd336e05a6bc48308d1eb19c20392f8668b423b19936fa49044ebec6e40fd3b95fc456965cf4461f6695c6a5150c85a4b31c32283645ac0afbe749ac6daf719bd5f51884c511e47f0196b4cec062a0062e50708ab0d97da908c6a5764be7309e79ce5f4ca971cdcc51f60683c30d4f2a428d845c08c3b42cfd603190dd321bc6fcd4f7447ae0aa285b6542dece9cb9e3d40bcb8aa0164a0902f5b81c08f67d7cfed39623e9b60108ca4f8df8207da71152deae1c546bcfbfd40740da5fc0dc747e6d6de3c9e3ec4794d7ddd77a86f3c8ef35c6305f21f4ced6838c7a9f6a243428d18165b423d95521fa1b1f2e48296dcedee8c910f0d30948c9df6b60acd30b5b488815c3290763d92a49c0e597dc7e94fe535ab816a3d15e1e27934f421b70dc9afca22811a5764551290e6b19f4055283e92239d088d41238b501351064c97a5039b40ba26a5f0b8d0cb18803cd63fc6e12fe5a5e58544a06c56f092e1c2f206be55bee4020d9df2022fd19287ba490a8db5617c62ca3b2dfc995d02eb4505bbcdb91f32ce78e458c1594a9606bf45b23d8eab2ad2307162d49608882c2a318c2f471ef627710b18bb7bb044a1e16372fe5b6ef21e50d9651481a31ff249b51a281f2c9a488882137d57906546eff4b519cec55cc9a2153f1a5daf06a4255d7c3aee1cf298ad6089d7b18e1f86e8102031c5a79c17f4a0d1867d1a83e6dd40ad9fabe4b94759e4a108e4e20f4fc3d4df1047a41dde4e3b4c3336d8343ff9e95536e8493d89a69c97962810039a375daf9c16532ea01a97b16e401a423d135e812076322a38e2715c0620d021f4cd62618f2d94ac248e85dd24ef52a305cd8a0a040510629a47279537a7462f6164fd2f6b54b827e24c06dfcb7297361c92f51399c98244cb4088636b40254401cd06958db988c9a403fbd50d24632d7735b595b84c05af0336dd9823f31c1f213153496e45caf20c7306080094adb5aa22987e7a11dce8128676762e3476ceed5bb55508aa3fc90eec995a1f0b50ea0927c581b4753ce6f49bc16f4d6dceaa0b54adf2cb0d6f6d4a2205f2f42737c41729ea47be7868cde406337f6308dc42835ad59c0c6adf30bbd6302449831c351bc2282237a9e0ba5f5e7110c81e81a3f0f638e600d92d448ce1b96c4336543d2c91a848be039c4cc1b6a65be9c31dbe633e28324c490649d53d14dcd13a5d4b33fbaa00c8c3e666c08d2153dff615e29ab67f7d344b4a150422f5a5d0f938d006b1a04e7f2c89eceab5c78881c5dba9bb0d405d229ecac232ad073764199e23a780f239b0596e3bf07ff5f5133018235adc46f9ce842da0a70db7cdd74c1a5197c6d05722096193cfb5963f5e5942b7699143850a1af835be2da4250aa89a752043938ace3d75a61a1d711a0ceffe1dd5cf3e73b91591bbbabbaccf3ff101b0afc98107840683d81e8fc149d0a5d77020ece11bba6c04605a9cb7f9d39941570457b1bb293c247ce91f8015170088e8c2c87cf59d0a15100ca530be12b8c0e3947e06e7489b056b391d98c65e1ece584e3e0d81b853b58179c8a05ace48a5b36ee4b8aea332632cf4a3c349e16146f2d890098afb42ea65c409aab47b89589db67ee0dd931e3693e3b79208ded4bfef761163bc3c5fa49b2d7c32abc3197f1bbb257f733f4243b8f7d6a48a43c21620dea81574c93a8e881e5cb0c4e4e5654d69c5599654341de670363e56500222101e8711e2aafccb5cad4598fc8449ddcb4bdfaa66fb3523573d62aeecba9b759ccb727f30ad2e79f1db5cc9251247b4fcbb7e87f095d5d5ec7b5a9867cabee3fb6da973bbf5154db5fbfa953ec94b4414a30201d9bf2448c2e1654481ecedec777f15e5ab341c05e2e98432ab000e60534df995a0113173964ceb34e2dce7ffb95b1a819d681d58877ccd70e44af4ad2270cb9dc147a89b18f2f904b1c477055603ac412c84c13c03b055b4eede576b988ead2fd643b0ead2da797b2a6465d9a255c705397b8852d0dfc98d87d4a4abc7466b18bf4d889093c2d5d2a2698e206163d16c8111122d63305142d1556288155dd5620bef35df7fe6a648949b315f3b7fa5d682cbfb25a2a33823107d742c2774042128b12d81f8923bca6ecb02d972126ca0a378c0fc38f3a7ab6a040153f7e28e4bb5fc145030290f373663da5470c73fb3071d6aeec6893f71bd33efa286b771e48c8db601f1c557a5cfaa44f67fb5999c37a46d215a73e171c744326eae9e0c96b4ae7ec2b31c685b10f9236c52920968816c98a4e44a76f051d43fa22297a3d8aeaf71be89143f34308e1b32a65ce962859d6f508f3a743a10bb32bf101910854a449fa2a23a86e7038b53aab3b9c1071e5c2050d48dba50b244382b2a5ff5cb5193666a3fe1c4820eb8fbebccda8639af1c6f1c7fe2263695d948de48b9b73fde1c20da1dbac99983692ae6d1722184be8bb6eea2ba777962d96ae5dcf8bee83d346ae51d6186aa8f084febfc968b12f05aeeade7c45f23e7939086f3bb22bc53879520ea049c481a9da3aeb03a7ba56106ab6c9851bf33ed833fa48d45c9fef6a6605661b8088cf242a1855b4c00c48a64fd5e4e8a42bc0b2d93c0766b26da61efd4243244d6060f79fc94fefc58fcd20e1e77c63e03430a14355f30b35b081d9b9fd96c22e00e92fde53f77647e3c205144cdafd932b79c9f089d9a54d27cc8cf1db6971966933a6b34a079333df4ca79874ed8f8114a98e3daeee12cda44ef784eb908b6c0c1de0ce24f03276e53adac132cea385b3d0d4f76138ca85cd36363c6c7b545b3bee128a10d8b763f8d9c7e8193127041e72040826f412185d366c0df22a06bf450d2698356a3b0ab18becf5e91e683ddbdf9f67ecc5f01c344869dca27fab8a62520639cd56bbbc24bca96259459776b9b497a6c48e9eff53ece8b0be8fc84acbdaedd6ea43bf6e7c4a6fbb06ac2c900da863292b44d1ad2454f343d5ab85351f95c0331e1f69037a6a8e7f870e33718798a295e574b4aa3292630413b9d166a1dd584600c460898e609f015de344f13bd1d4f3fbb381ec399b070239f81fde857f2f206d20e86b02c3fa3ea780b93a60dd6b7753d7cf24f6f76f2cd057d22b52b8c3fc34da0021f5a08341aff6b01a1a1fb0c88107480f8d1751ae7879319d51ab140e8d31ca3c14b79551d4c4894bb5e851b3afb5b36fea6720299ac4a6b866722d6d974ca2a756e086835ab322af46d677c1c6883d97f86269ae5712a4578ed2fe89c3d7329b6ffd7137be14ccdb130801786385dc00b3cc0db4e501c23c2d9e53e6170bedd345929c5a4cf6d75871804d0e21bdf434f881cfe869fb90cae2d7f1efd4ce8a7bc249b1f8e119727301ef4639689d29275a813093684e4e7d06405bd0d57005cb01c6ae74eaf1a35f4e4fef6c553899a0f11c20668e550b59e359ec0905840ba2bb4eee4254f9273ea2df209b8881c5fd1c7f8f2788f41c2575b32ec977db62e859f5d6f948b00145f73638bf488ee4ec754593f341bd50f8bc8af2b34d919a5cfea15df8ac17c3693ebd8dd1c07a240ab7734a9d88974158e7738bcdd04fe37b645004d4248a4bf720036247e4d35a931d124d9a1444756600bd20e60c3352fb7fff7f641112fe371cd9d4dc1dd60b9e6ad16f41370e3eb961994b82f7d1833647baf93ffd77a6ea44d4e1ddf54cd1cbd00e84fb1ef440d0364a3406e7f9160e2d0ba9b515e2b3b2d9552d8b96e118ea5e76e98db4a530a8b09f1f87860570384f1131be2534e10e83aa72cf54f944a0db07a615d388b38fc1061d833772351d1b0e025a9dbd6d9a6d7953b3ffe0b0991017a74080963c5144d0cf3aec65d6561b1516d8c2a0fa14bbc23c46a0bf7234f372021c334b0dbf4924054229402367de84bde0efd73e05866784b5f561a12333d009aa98f6dd8825b27037d34e2b295e8eb6a8781dc8428676e6fa8e4dc51f035f66cbab3021f1e8d01541513695422289013a578ea76983bb490d8358f21fc96bed271406588d1c1d061a44576b028979bd4c1cd74ddc61c200294e4db22bd021b6068744503a64c632ceee6e758da70aac06dac0d582a9c70656c9a20cf23d6b38df371c146f211bd1579164865ae83d9341801af43c32f0e65cbdb2b0149d84bab61353ab8ae019b923ec52caf7d584106097aec4443785d5d25924ba51e41173c44dc3978aade663e81225f43e36d232a902413802c65b83d4b3eb0ef22002296af76ad8a2040a3935470983d49805da01ccb5f20f289c6f3ee3feea509d3753fb0d39a8df4b93ecd29bec70dbea6301c9a1c7422c5dc6c2bf17f5221b431b5bd444735b11c20650074da36d9f46812c509831b792e93ec5d429b3b06c68606a54b0cceb93cd8cda61f5828aeded97e81ac044203a78744f67dd7a9c2a3c71a433b07c9007011f1931b0cd4f261a07ea90aa64ce7c1feafb42bf9fa69c8238ee68ff8633d2048a31a98be33369d1a202db5f3d74e8ccb7e0fe23cb48af83b3260cfd3829c3d163ace212b4df0771f649c340d78952cff6896d60cac06f181a03af4284f4297a5630ee81881e3f1a8181928e29b071dd93f6f9094e1ce42e89da7970ebae639710efa8f1974ab1261d228cb11d030c9aad89d492a6a6d13b8544bbd2e64926f8ac886189c35f7e7e8f81002421b54e52e1fff02148ae3093a17f9988d008f2caa24c72610a0d1ffb6567f1c80c94e456ef251759284ed0f145f1c6c8702147e9245f6dffe0d31c2b40bc67adc3f8d0ca131f5fcbfe0d89cd7ea65953ebf13abf152d669f69d0d45df05f12a0d47a4a64923d3311a0b1a6e25ba005289564c2dba894138b71555f945891c4230dbdcc6ebf5aea73950fae373ab947616cc34b568bd0ed925f66598f0e4041040cb3b00c17dc31a392b11f5a7a88ede5507ca48dec8b9b08c48a1f8706001377ffdb53aa80d390942ddeb89054823e52637fd7450700eeff686af7ea5d834c6a0170051f65a91ba6834bd6ab100dcc860892457cf00b753e2cdee5241dea6bc80263f5dc5164479c448688ac9a665b1ff56a254f25dac82835d3b8f4b43799a2a98d87284882253ef5734c0a01fab6252f9af6005a326cba8592145a28f3d7f9282078700b9e2b3aea7a160a1844b2335fbd78c8e0c68fd53d9fdf3d0d253892d47d458e31f36b5fea4452422238567db7ffbae93f9f6a0b435b2d257e6ce117b1e7e78ff9c86a30d97191f1fae1fc4f427791034fca31d548807aa0a1c1ec201cbc097f9b967dd90c65fdb770f82c1d8773129d469927160bfc82e074d8bdad1509f7fb1409c3eb8fe7570035305e03295d5e8084f6d8dbce1428200d130489a5e20f81f8b18c21a8a9b277063ad6a3ac0f56c168cd720ff4890a6cf6cb9cf88e40df025ce68e14442dcf486983cc219f662487e0e1e9a89a5f0427197598351e75c3fcdc5466ee31f5818348a4451a0ea3033a7c816950177d76f26af80964f480fc6e8b66ae9974c08977e616969eb4f24171209fa57d22802a9e4bce4231d54a2cd4e72764fd91f1b4d9337fd41884d62614510c7006f57e3fa534909cd6ee525f6615d1172aed04a21a25f95bb6d5b69f35add66a39d23e4e4ce1a6bfe252198926490af95b697fc17261a744e3d560d2c217c3b920a5661032ca1e939743663c1080daac5292e55436d300b6894702ca0cb887db673f81c8557e1d9e807b78b329b8119d22dee85657b3008675f7e10ea0cf69b7658c79dd2a50946de8a5d1bad1747f6b35281aeba84eae03a6f7845d567fcd1209ef2d93f8270383f3ecf171c99927092d0107a95d4180343bd5b93c852c720564efbc90afd1bef6598c1a76b44e30178b138281ea731bbde8cffb4ab45f7bed623aee85ba2d7ffcd99565b06c6c2669752950662ac2f3ef9772d41b396ff5a7bffcebef3bc728ef8eb6ab5cc639ae9cff99df8dcc47449636fcc5b1baef87aafbc95dd5f5d43ae51e3e6a12b82329c4d0af1abb2174b35d402bb1ba591550f66a32bd3a7d458a7ca8995ef9c922b3080bce9388f71d1cae4a9475ff96c35e663c99f6de4cd41a2d551be2c6045fe166931506b21e0474085f33eaf22a74ad7794a445e63f8b23f7c693dcac91c9fe41211ad9ab2ce8a183ac6d84c3c178f465ae68fbb46f6e3c0f602986bd7cc9e17d35a5328f215fb6c631966fcacf047f47cfa59ec0b8fc7a003e67d5053217a02d16481244411a42b0f97a807d292a35ba7ef8a6eba07356b764a1b86ec72d4b3ac77a431d7b26d0ad9b5f981283c52b1130f60ba2feb087c63f64e6df644688e01ad5d12d7489adb7206a29e5aef820cce9e14c95939602d6bebea19e3ba3422695881a0056205f994dd998421138e4c8bd1b00c4c8a8a8c1761ff2d0e00d34d18c53feb71fc52b0e9c8fc20093eab749f87c317659e9080e586ead3599db582878b8b7c980b420758a3ca65f885eb962c6058d2542bd0e3027b7e1609c137c81ba53c9ded675fd7030f9f99331abfffeb9305e7fd8d82da4f9406aebba428f75fa7088dc9b8f1ab573c9baed3f913ee7a9eacded52a9a48f710103fa95d37fa1f9994913e4eea7e9a8f9acaf8de97a79b095c8651e7073e5a591bbebce2ed95671dc3f6b0ac05903bc7cff915e80bd3f8146464a605ab59ff9d4f73174582c2997ff160b262793f750a49342ca44c35cb88d8b908b28706da3c1e44198cd95e43a7e6cfba50d2f6917980536574c6919c2a119c011347474ad47c64734b7da8bc631ce17deb1f5db4f6b2b3cd6c5387bbee561c2a085ecf4fd592967d1840bc1915116372505bc630118762077ea29d57e4f1e15f947ab9db4d6f9b315e999469a275c9cb8c276bcc8c71068d56275f20c96f7fa2c928e714c6f101f97b9725a40f3dd83e400ab38c8d702688889d1545e0536bfd57a1e47e4f614877f68baced4efa5bee2374057d2ddcdc6c9535813ad1ac4c187b1f1eaa75519ba276f594ece17cfd0f18281cf765578b5ba20935b3cc005dfcde09df5e2adb1ed099f98ef886105833c412a610e43fc34ddfc12b6d7fc60f9c534e776979e393646b6b946030e3c09e4c820a3f123a2047e7ade0a3b5dbc1e6ff03899e84bfe149fd69363e7c9a7aa46b2bb3b22b41b53f2399859f5766e2ec52875b34c5e9696bac6b9ffdec0e802864f2f6ac56bd7296b782ff2b72488060f11dd75e4f9e8dabbb74334c59362005cb69521d6627b712c22b3881f59dfd125a4da409ddcda686882b224796e4a5fa5abc84ac0608040e553b2f74945637f6c3a8d9c9e14dc9ac11c97475aefcf5b8c6973808c4d815f81bbce3f3e19018df5ca5822af653c53c9de269d3ac95c5d32cfbff9a5721fa3c39b1dc94fe0c0ae7f0b51d1640219851b48a39d2176e66a029259d932674b429ba7521c6d5eeb1bc39b4ff900c7708a106b8c03b172d2e6164f49c4ecaaa49f8e0be32c1931ce931a00518de1ebb8b1dcd3284a47891ef15950ac3f77e09c9baa92be9cd164a1fab201806bfe49372d83bffc904b16d082f9b2a297e6bf283ca565f218d6b2112b57639ffa34975501879468f806098ae21e136c1194818da6282b4de2362304aaffd633aee0d136753f97e335138fe61028eca45462acc0eb1438a89afb5fa4bf4311fcff1eb16fc7a8ef87a65fb52ebb9c34a74db21a92f86f509ff7afd0815cfdc16cc1197daa6396918648dfe17cbf9132abc8d3d725331eb76f000baa6570cf6d5e3fac50e4b67ecc414aa7c7da31112dbd333d20e53308161186e0469c96698694e66781be8b087ca82deedb9f36b27ba788e284a8c1ef4563e7f593d81a4aa03894634ac4e6fd6ec2c9955d1d62cf4d9992934b6f66875649c9a63144c1d645393e2bffd2299836a68ad84dff2aa02e63a6832213062224c686344a3fe30497f2db1f5df8f8cc789da37c05f0c054c32d3d9a321a0c913054c306e0aacde58e2cce901d1333883ece3001ed0439a10a801a6726b02bd2e19eaf8a210101c31e2490d5ad0632bca501e719a451c86bab7c45d2118729e96f6589486ee45b8882353ecf2b4c326c16920dd5078043e8108299929afd057ef54ae7d7b3cda93fb3186468b309e40611e1dc56616189eecb82fef73b674578275179f09061ffa27f87480b1174c96dc4b0e002d0d211b08615875954ba757bef0a9e73ae5e8f8720f0b31c9ac92ddb142cc0b746f32582dfba5c226f045382efae0d55d5e41c2d3a6814b2603228221cbb365dd879d1b2b68f2e58b2af0cd8622d18d61010eadc200724bd15edff46a990c0d5bca68444c1d963d149dd8b47ca9d9d89b87e05010511442378d81ab1ef470a91bf35e4b0f0d5152ef8cee01d51b9f79c581f43307f0004e3517b0c3b941b94c490ac14c5e59fa88ed7a7812258b070bbd35a09a3c6774e157a7094eb4599f226548e10b1db224f8be0627b9189ecac43b7eddb4a0ecd02349cdbae3899b047e301651c25c98a261281065201c16fc2d4c6b98e2aaad9dc797c2dafaf412ec713446b5bd978515c2eaf5deb14ea1cab3606a802740e64be9c7326aa2274a53090ec5b1e1fcdadb18b24d406919c71ae948c2b2556088ce13c5e66952c046ac25a5566108d505d34d83a920d2d5ba180ecbe9459b0f8da44c966fffd6ac1ae540a47199a933a7987dd4cf7eef71a7ea0ccf07a98743940caf8808b1f3aa00fc9b989da050824fe0d7b20577b528a24138e9225e6258849c5c63a097519c2301a080de0d5880e40aeecfd68cb273d2f6186ae07d5a645aca3b98ba379059a28cdd43d684afe50f2b92f930d92adcf70eb20b7a7179711260b084eea98abb402c56972950148d9a202313faa5f37e83d38624133d5dc0441331621d4d15f77d7887fc44d87a8b410b1fff58cf266781a6376666fdd83297e0697991481960f00249338caece5d7d4a032f143035274dc9998ea2b7ca744c51f95b8894a232b96eba2cabc2937a7528c2452f571fc4dce7821d739e69e725a43f58fe037942be888c5cacee8fbd3cc1d66d210841a500c2cb0d7e9e0280330b11780834a2f51ea4a1d827008cd5fe642653a7ff225b302f01d4fb9d87e081250019f8f5c757e78de5c1d45a04c764d66d07f86428dea31ffe17a24ae960fa5fe4eb60161a91839fd82ce25250ceef841f5287df016d8d23c45748fecf00098bdf92e3fb7a555257bb233862b3b2460e76dc4b8262b9dbdb72673199f7cdc023fb54a343559b4e8c56cbf228bbd230c5920d9b5bcf31aeb4271cdfd92b285df353b65e15eafffa0c6c2e69caf5506865c8f61aeb2e03f01344445a3a75e339e84e1eeb3f3f2987b86f81cd468d93e12d8c7fc28e6710b4f99cd0fb2552cf54bfc228adfc2e00cf0f1aa80078cd86fedb700bb8de09785231f8415e176341087c74022a492b42044bef9665ad1ae9b64cfd78e0be449df21c9eb6e6517185e310b34525851ddf7db2e4bd97ed2d8dbd616686315bc7a4b50f4dd4d6aaaaca010c57c9b29b8da3305f1f82566783e10a50d3c503bbdf1bf26ee4af7d2967c328e019256a0af2268529244cfecf7ff03a072bf10ac4cef2b65f1d5996f2d6cc2318425d5a6f08d869e90fb6d52eb5d8d433f93c747ecb8f1432781a1c9fdd645262fa1d7d7cdfcd71638803b628b8a99c4f24395be32c194a21b004be5cdc4d2a6c9e313448f67b24cfd72041dd9b3fd645ba3318df18fb3526ad8b7c6c8288889a2ba4ce4ba5fcc42c14e47fb6d03377587036905df7e664c88882be3a269d49c28c2c54ecb554322fe466abb7c75c41fc54d82d581dd0d6e513c09f2fe994015e7506d5e6d2c235ea32989e7a7fc9477c19eabd93d0be5171a9215dd4b43ee1dc2638d1ef1067d1a55ed4841042fe84a486970b49f06d9d35a5aeb96259d70ca2be9a3a5833ac885799c4cba1aeaad268b5e044a9f4bb10993307379cdbd88e3e0971b776ef0d9d30ead02bd42b0450d5a0b731b87cef0c1f1845b47e0152f335f399ad9442d5e13271a024b960c69d21434ea2c1782a626133e1337f43c8cece29f9f670befa7768f91a50a2474a6d631212d3eba1d4b3debb765e6dcefd8d1bd4e051e621c6d6e92b57b62d4a26169121e87b650dcb6dc2f40278b5b37d95e271fc1bdcd8c0c484082b4772b7eb243572211e3cb5d09f079591e059ae41bfb8ae541848abc303563c86d88ba0d582e8b82e329bb43ddcc0cfa565d0339e375643ff918f818356b95cf31035232c3fa3c9711d1914d353d0a3ebac0cca44efd7a46702e513fa20b205dabf6d3e948aab6965f1b53739b37629ea903eb73322304deb9a7acef77909292f13ea4a602271d1b4e40e9a7a401cb6203322aec0dad4c88f03032040b9171c8bee07dd487cac5b14f043a88dbb1e46d2d6b460f3b6287e16ccb53df4aedc763b8ed282e6117c70538739bc71a3711b49d9a8321d55ddec566d4b3af384f743af275d575d2dd5ea9183efaa753cf03a476b72c4bd60fe1b1c0594f664b1480201ec640442c32e2071c82d9371702568887a113c78266cf66b9d9f0679c00f39293829323b39c74a565eafed3759968e9b7c79499f44043f8d94cc69c85507d35dd97856ab8cc55f69f0914bacca42e5bc9d829751533cde2310a5b1238e761b36cc33a32d4220cf59ce34543d58e0f131b64500265aff6105af2a06a208f782f7970418bb44d9b0a23235fe344fab392086672eb83b316931bc961cd13b12211f510f7194765e5d7f2675eb9c582fe4b710dd17b81b2463d91e099ddb2b082a8e1cea4ff6956faa87f02dc6ed59ef77ec6a9297bc8a32b9733f47f6616718e2913227d6bc9f6144adc2d3390c8ba5744ab504726171b24f9fa48bf5c58a4840f8d64dd16f4094b0a97c3d56468932b8b5c92352307157c65aea5d4759d301dda9027a7f3b604328fc40595e6eba4fac85a72f712bc9bdc8ddc3f29e6d01736fdef7c5e527f3433ff60f5fddb4d27640685cacdde0f7c7f3a0a452b8c2896111f5f31e61332f927143046f757ff3f5fb74578763221c33f27f8968bb0dfa24fc74568185f9eef5b1938698f10579b0a32c317acd0f9f70129f297934304901212666d3e3f13f326e489c51c30359e462363fc352dc11855e962e26b21117a6a10d3e4fdea6e348eb07c8aaf969df5599c8b669010ab81109dd8a49c810471ec6511560d7c7f788fce64765ea9bb715e12dcc7ab6f1f9e4c89808d59ee1a01a6f3452ab1a417167b7715fee5f498a3006b24a3e3aba806e346cf0f2c5e928ad35331c16eba0ae18119029a7be2db584160734aaa9692d9128b45d65b52932a7da98e96bd0ba7aa5ce3fef6cc0f31f47d8de8415382e21dc10f8368fa2aca2b1bad454b63da6076cfa130183ab3ad4fd37562f3586c64236cfa0d46d570f568416ee9309fea08e728a6a1cc5a59802e009a5f092e9ae6704eec90f1a10af302e55cbe61626470ff02b358ac53b859a4eee5026cfca7fd40b7e87d31062eb07dd0b0f6fbee5d2d161066ade5affdf59e73981b995d5996ff704e9d783353065051c49d19f5ec7e97fa7eee9ae1e37518280d1cadc29d049d26d329c15eba62290389a00cb080d981dd588b9f873982a1f0341dd53628998260439e338a07625e0229381b4d9aaf170cf114311699e969635ee163e642118096971a39f464d47c77f5bc0f8b7def7b8fab8f8739ff6f473900664df0cded23e906e4078f5e53508b1517a018fd855f3172ab7e43e23ba3e2950c0eb22089e1dadfd53a9cee2c5571d7dd78c4ce3a3b0ca5cc0e74f37000f8ba93678ed46e8f53bdfd4302efaba19511752039de6842df45b49c7a79ce0c0fc0ce4a1a0dab920b617ed9fab35d4d23bd59ab6eb587ba88331b35ac045db91cc34a309502bf5385a29ce6a899fb73af8aa3bfd8c9ea69c598a46f5f58ff925d3467c206c001df20754e31494509be88beddf64135a5623ac01d60f7b324022b2341703c63cb4d44309a88a2704eaad5b1185b662d765c549e4b45af7b680f372afbf3a714673b24600598deaaed532db96d3cb6858a06ba6fbe5d205338da188fb259da8652c1a23a7f1305be95675bdd30f0ad80b595de845f4f5115359173ff0425bb3726da375e344e75ed21a47555cd0a52eb8c6820cd370dbf23b26c07ffe7889eac215e7a4e374c5bef06c8cd6cc74e865f850ad9506b7f1fae4e7f8bdfb89c15db53341775f6352af629ad3425dc9f7395d9a0ebd4f2b705d6eba4ccb6ebe416a667a71d3a3a98663262b092035fae2893df3c8f0f09b2e386bdb055481f6640cb19d280230e277a31c999a742c26960a04aa62656c4639f42169c36b04cd228098cb4a98e13669bba2f6e61e4dfb6b2473e1ebdced5682e390039a7199a3ceffb4bf1010411fa44fea5066fb8628d69494c8c605961275982f958807d4680b5702de60905253b03aa4016de76d9b1466707d2fd211f88ae951cc4fe550dad03c7e9750110575a1051c051db91ca1c43bfd378b5311a6f1ec506f8c45f74817bff97cb940d4fa915b3a1a5f665a0d6acd5ce18dadef741e10b934e4e96aec4b3065244ecc4a47b399be978832c53e40a376340f0418afb5be3cd14e5e13281d9cd1bfcfef76a26252e275ddcdfbfa970e68f77998fa3d464fd9c536d517f068df7b6ce74deb5a5ab0243dbe52382c6855151d9c336e6f67eb9b4fdac5dc61987ea31ffa5fd46073c2999d495003ba01103a960b590032251e2f60dc6b28f7cd3d2de5e2a683b334ee2e78af1473f350cc7d38cc037ba78919f0e885a430b195d70b2406b68f0af4588a5554752e6690ded5a90def7fca8ffdb29a33134dc1e93364fdd159979a4e8868887a0069e47bffeda240cc60854e4587496cee0497f53f114a137481db8113e94d5fbec8377ae9b54fcbf36675573a248bb6f17fe408b1442c037fd3404c4891edff25c5c0aa1c01dbc1fbbbe90e9c1815ea906735d5fa1d6371c080e9291211d241c84669cd743f3c36883e2e06b00f1206f1da1640b4c4c3e34ee943c77279ae567c1256a8528c2db40605bff21e5683cd5b7cfc141a071f784a6e358ba696b696a61134707b0337c3e9f958fbd36448c1f2b5660ad980a2b749f919d74f450ee34aaf80743146e5258a92fecc48b2055b409c6154db0554265cd0740616dc066eecd9a44f94f02f0908c6612e5a91a55a99366aa140e564582dac0ad06d426abc40124c357acab7e20f6dc63acd9c9152a1ab461549bc417b63cdf3fec2b906c57334d7a601a5b9dece0c15a07cce379c2bf0be3c9f3d365e9ca83bd42d72e10af5a79964d2d37145a3170d07fa8aaf0cfb7c8a6e1ed2e429d59c81755e24c50c40109aa7501e98458603b72987fffd8bb29856c99bc80b2350f944b830acd74ff273ca1a9a528866b6cf35426ec89e1165c3ca882b5cc8340a3e462c74fd0e5bc577e5795d17680038da60de4428102f4ea401947c3df37a68f3ea0c353d09e4cb14fa31c3ca28e1ee8c6e44c2cc11b5c00d950824b59df2ddc9e61115960e69b8948365e5f51211c4ef369781d6d4ffc863eaeab84a521f691dec6c483eed75f0b17f755ab63bdadb663f690af92c3fc7b03c50e6b3fc6c67c8d5aa2ecc4ec0d787371c91b35775c87d0a2e697064d4bfeeb94c4513b18d47de06be862e76e5f7197fe3751559d18e7a9af9fcf3478c2199b3ced812a1c5d03c53b77de2fc09e567024d257e8639669fe62f8c5f58f8a605c7a04fa77e7a854209e19a5032f17c29fb45454bcd793e1a5bbece536aafde5c6d4c1f66d5ffdede46c268597b685102d225c00c179380d085eec436bd658e27ea9d56bd7d4ccd1a05cf86190a0aef69b2464efbdb79452a694920caf0a4b0a100a329c8a6ffd370ef6d6a376870b457223495a495bc0f4df6489ba7fa63d4184dbe198d2a2fa5fd55b96158174186154f85e3437e91805fb92024751e54d152c24a723c95697d8ee20b925ff64d11e5cadafde35ae4108814493218ec8752184ad4ace996b2f9a733df3c07e741854a8167d5408a6611a04a3d8690e475ae53da438508df328fb8c53d90f880837b852822d4a000601a0645ed78e9047cceaef232b7f0462c90d643dbf9752087d7ccba9702c8e8557b136444ec429253eb2b2844adef79367c50607aea6ff8a57f7741af8141728980a95ddd12d681648619aa6c230756ba0e7404e070b1c8e1b1dc9400bec339ca94cd1380a57c357d8a7ec0ed6c1dad0602157f3ae184dc19c05a3646cdce02a4ce539c265ca50f447adb1609a2ca0d81d7d84b5e92b9c436142ed6f820aa39c4069c289e4efbfa0ab9b8b3eea256a1a27b2b4ec9d08ae7b57381a1915b2e84671511f126214fccd8576e8510ff229438efba8518d853ea2c9b23b9c3a5100b0764103e1d819c74e24c4c3bb69247416d2ee969e844de1d43b62145f11b2dcb21e3f7e282dfd05a32c0160eb0caf1fdc77ae2837f32db6bb58c21b7a593825e3a3e06aa4b0365bb077c134fd970ccdd517f4dec57dd4ada5c1503be859117a53706ac6c7f818fff22eef4a989c723515938af1fd1dc429197fb54f85490330fc6d9a20ccd98134891c9ce002517c25dc155e04351073fbc4dc280a4646d406d6475d7cb103d64e4cab2af100d460edc4cc7cc07660edc42cf170222a1c0e33818b88b888c8898260ceed587fcf42ccfcac70e340a0a51be969cf0957f36ef07ee0eeff3c86280d59c4c4800cdf10ffd0ff53b75afd35367f37727fff234e396d295f90a3e93fda8251ed7e2423e3f1186ee447bb0521f3abb3e20a5234e97ec9606ecebf6c602e2bbd0ebb093372357bd1c05ce683c6d7f84b2646cab418e6b0c09ea46d4c2ac9aff7f771d1ecfd99d4cdab756a2675359fad27eac3da608f91b4198f69313ed36ad01aafd335b4f934b46dbe493bb1137e92f1c47853c6f3fc2d9f6fbdf73a0c3343eb2932824e30ef6a5361547f8cd6521805f34279c885b25089a100b9cfd2a3170e8f625ad6c3aa96c6551e31ebd2678551146b27a6cb4c14dcc873c0dcc8e948c2dc58c861b220efb3676de3b559eb336d352037d4eb63aacb78f608c38e388535500361314b94d44898f2ab9f0563670e00d041871db0d8210012c2975ab668a1d91d2cb42c14801d76c8de2f0f1ec8a26edd1a88071bbec251e19a8f30b7d7647b416bb447464040ff5b1376a36792f2a2d0ed3d91f272a3f772603e74962c7d4567b1c1d66fb221e0cb77c9529485855edc686b48d9ec4e7b8a10a40dd4342eb4f4eaea4ffac89fac0bb1942693ff8dada9d47e1fdad7deaf306aa90f090135cd0f591f695cfbc8771b48480e4d221390c3021709b1d0858309ed8e8edabbc234fdcf897783b519404e0e5f3c302a46a0858b7e204a0316e64180d759a69c12f4845ed04ed982afe45111006321a783b31e469855511606c0da8949aa59e82871f931b29875f273b458e2027916275a282e990fab3a9113391117f1604fe3da409c5ada529aca01dca8719e132f8adafd86b4507b5eff8e5a4b1f05bd3c7fe9ecb1df5a4b153db852b70e61c1a99967e54d517b17d2f7acd02085d12af033da5d30aa1f52169a8251fdd65bd48962ebf01646440d093f72a32d070002888cc7ebf53acc458dc385d1e6466170a3b52cba5e9809c0dcdd7f604ec4a967855158846aff50ed7762caa89b132de52b97021490f1bc0f4201d8cb0ab99a7e12d34acf424ec746e1709e13ee05b190d01bea17fb088c2bb650d15a8c30b717c4573855ca190089765167c989bf75161d87e24e88b8280a2972aa5d5d11aa5045ca39fbe85961543fa117548409491911f26116468eb05111a31a087b41564cec3737bab02257d37f3927e6c302cbec2246f5107363219672cec648ef48daf53aec5038c5fccd4fa20e85514ffcf93777e2d4676bf63d17f5278c6a77f28238957d6f4c1d8a13595d03350e3341888bb8c85f575137ad6e259b865b19762d800144bc4744f6de5fd43aa8f6bb9644899fcaef80ac8755694b61145725de4eccaddb0bfaa62192f5b06ab71353d6ad819e767d03b113f319354e140e878b5e90d38143ed7f424e87d372c5917b3ea051e929c96e7571354498166d2d5dc594bff5d1ee989cf2100b998c244d62774ea89d9ba641c1fca16d212754ffa0ae52dfbb91911b55d4a3e068fa2517720bd3c350bbc88d5ed02be2395fd00baafd827a2fd2c604be28e14cbaf7045468f76ec1e4976c82526a4eee4beadefe52e918f57c5edd9dac8327b3e7bd1235123dea66fb871784b4c7e72d113df0b96e9552f6abe866a4be77afe1bfe7ffde3b47f3e0732a9b1f0456a494c04a09b0a0ae40e44517753375b18553313713911744955f86dd4948bfab43f867e7d12621c8d9e9772277b067ea44eec0b7fe829a7455307ae9f4e5dad3362374c8dfde5bd4310abeca876ba44774852f80ea32204e0b15d22aa7f74938a21d0df46bc053eecd4fa4c3080342a864ebbf27e2c20863a75f877f831056692ac4df291103ec3475eb8f0aff74614b15a64c7f32e33ff8eeeef12b279ad6bf9747bcda53fdbbdee9f6313e0d97723f4d4e87fc18bfabeb2fc19f527ecf7fef26dd68943427333a9bc64daec6a356bd6bd55fdae6f3e8a9c79e926c75be04d49c8363b8dc4cc992c0947ec1ec993f85f4fbbeb4978c417b7c5e9ddf8f8335541daaab020750a8c2ca932a535d1538f841bd1a9b9c11e17656db9deba69cf0f797f658606350482b1ab59efeec5dd623fb39b3262eff02f34c769ef6bef4435e8926f104a4434a0f439378a1374dc35ffa245cfe3d931d25435ede8526f1429f3801893d16807f02e23d74e779bab552f627ec1dd6bf24adcac35e4229a38c10c30450335a65a5300d2f10388f5e6fbd119cb22e232c9851ca5261d43661d42f90942c9cca82719a880a5fa93c85872a6351f92b19170aa736b7a5466120214c2048ab3c4e354d0289c679d4c891113e9cfa2aa4db19e934d1762cc1e072339aab92db05d3b9606edddc77073be1513204fea349382766f6a37f9bb40a7cce9478f409ff273a8651fbdfcc1e20727e85513be4fbb0c41723dc52dddd284feaee47f87c63b25436a869b060a9ae3a47e46d854b726aff3d7793f3cb5caaa464a69b3bcef485af8588bff9bfc699ef377ed7f89d0382513a8cda07822a9220a504514a30e5880cdf66de96f41a8ef6e142b80fe1f77baf63bf8ebd45428ae0d416046c86bf3c20a43a394238d5ec153eebe42451fd7338f51e3e963f75fba3265ff9856ca172146618d550a616f3339cf2671d9a1384b9b92c4098d2c4297ebfddc408b1b5e17731338c4261bb43739054f9237d57c3df2598b00aa951db6e6aeca76d422a921b13a3b827914bc159487d94e537ddb69b7728294da647416da61fd2996d56874272f3281c951fc7a3bab32c94f00812202a3e46dbc4887d19b9481117673cb00846f96f46aa57bf2f4448f53782aaf1ab353bc6978dd31f6f34235c24eb234ecbfc31eb66e4c7577f9d16e28f44487d50c6b8c1136e50f9e54d75cac4156c10aae4937599a268891ab0a10a2f82b07c11a392d11f8cb2aa64b4b880a2fdd3a46ea98209acb8b46e774712d31b12b7650b30c296d574cfe970d58bb65002dd626a7ce8eeddba5fdae38e30b739af184e2d9bb8a973354e6a4862aadbbcc67f7f45a323e71e0a71346e369495ffa3d2dddd49ba4d78b35a98335edbb1b8e49b8273f9bcb4bbbb544e61f2bb7fbb54be65d4c2201f1ae2c1151e0cedd090dbdd67c21be47293c9eecce5a683c1742e8e9999bb85d061661faffc2e0b0ee696a39ff05c52ccfe937b3ff14bd65c65c21b0416314c59028b258c9090bc8ec9cc23424a19ab977f551256926184dfc4dc62067533b96d2bfee4fee4fc992ee1777a72fe4d4f6e51d37ad35ad49de6b8305111d2cd64da7e94d9309d989ac3918ec6fdbec9e938d5dd0f621b80ebc1d1d465cdf1eb304dbf4683ffd7adff69383d4d51b35d6f1a1c968d5627f937adba4d42c991996ed2a23462474d3e5874adfc2ceb57037e774f3fbabdc55c8dfb281e0e7ff94efa4bf91ba3a4f092d11f4619a1bf54cea752bb63dff4d23b70edbbbf9c8d10a718a173ce39e79c73ce7d84ef87b8ea140846b9d7b971ce6d37d539d3f6d1f6d5c97db76e0b15ac9024b8f657e32162b410c3cc86de3dc205f352f7e1bedfba199019f5354cd6c351a13a4e714307c5c56caa8de5dc989ad47e9954dd78d4fe19d3812eaa73fcf74e1647cb7ae6f791f9043946cb23471ffeaef7a28cf1bd97446566c2ecd611a6fbdd1d42da2050d58d91637c66de2a398812316aaec57c2f9f9f7692f0c5adfa6db39eff69a7ca1dfc93059fd49224f19654ee07a204b52eeb593259aba21b3f7c493766af96192e08dd9b9917d0cfcf598fe757cc78b8b949db02aa20fd9554f2556e96c45992ba8afd1f0f56547ec7b4a5e0146cef0c48f58264406490cadf3e6e2aef5b8277777b03c1b54cdec2d432f99d4b29e99a44899ffa94f84f55f2fa41a1049aaa25a1f0715d1766cd2f18ade48a0babe2c2aa86e0a3f12f6b2d97f5b0e06f2623a0a049b5dc3289868c09dbea5cb5301f74509e7a441ad4608b32f86cf5f1529d154d5871714ba42d89caf524a4ff34c4ee5c252d0e9bdd3af7e8f65e3e574bebfaa4f6e2e663b9945265616eb3ba9ae7d20ad5ba0c8aee19cfd64bbed48c67fff97bdec57bcf8bf7bc78af0bb7b858c3f37a5d5f187afebca1703b94f0bea9ab12fea94a7ca68fa95e7f35149b25599e24eb03ca78c9ab0ab2deabce8a156c91524a595d9c2559cbb22ccbb22c6bbd885f442e2216e218a27435110c35ba9a085d4d7cae26baab8958885e4431c42db17ab1aad6c3acc78b3c65a8b17ab1ca7822862d86b90ad9afad17dc6dd695cf0a5fc097a5fbedfbc8ba32110a253ea6ea336b920d434bb250389e244bb7dfba5a0b5da42f94f8fd664ab22e4d8820bba498557556aca00d524a29a594b2baaccc876559d6464c4b95b18b0adf19aa5ba13619ae2bf3e1ae509dab81ee0bb5b550790b7531c7589419d6590f38861734610cd5653ebc5ad5a2986743ec4ebf9509697a95b097f5c878b2e7cd59b659e64a3c59beb78ad0032d7533d5237cf3f1fad8b99acd8586abe1ad17b6a176df350f8ea4d4d5641865c2c2a41710933624b20946408151565de1bd7785f7b0e8235648b38882eaff62755634b104a90929f5d5f75ee9bdd27b6f7a018cf72aebb9ddee8ca703f5daf7fe980b2e6238b5f441e94793abb362054715befb0c6a708327d4886d764931617556ace0095b1215d2ad5cc8954caa426425174f32a9fa8293e8edfeb831b7eccf9bf04551752b4cfecdd4cdeefd9e43f86284524627754355598f975a653c9e64c3a82eae8699a950a5ab5085498529653f0f893b4d2b2b4c5137537d629fdf14e9ba9af52da623f28251dd50f57947c7ce55cd51f7291079e1a72e3b665e8bb4f9b08c6a7235fc5298528714a0d6c3dc0c5ecd190298f40bc1e4e5629ea572d68306a45b06eae32df420e87afd83b9df37988ee80ba15e76ddfd4573c155d6c37911f961ec51d11390afbe6bec20fed5cb76ddbd25d2c6a40555fe6e554523edf1773cb8f6ddcc76e35098db7c2e020fbaa8ccfc2c81cbe9a8418cca5248f98e0dd5dd9f145d4587d5b6f5921aacfc6a6b5ebd9f436d6b84986cea5198fbf19bb695b91f8de68661723a4cae66adca6aa8b09ffb6bc8f271ca39d53598fc9747d266ce68663e68c4dfaac3560684468d74cb4085b49dbf3060d760ee3b5e2baecbbaaacab2aacab22ccb925992a63edc166cd3d2b167c12c6257cc2dfb1ee838b55d8ffdbb1e7b127f4ff63df0bd4e1798eaadecafbf4a58264513389d8eeb2f8d2b515797eb95ec513d027bb97e6280c910847eea45f2e1b0fcfcfc603205949f8a8116faa917ddfce7a72ac9f253adf7b18a7eeaf5a3c1f871443fd5a22f6bb336472843adb8d25c5c4d0ca3a6abc162669a8584f9935331b5ad7db72cabfacaba5eb0cbe5ba3ecbb22cfbebcab22cbbaeadd6755d570624a354663e7ae8a75a423fd5a2491a8c9f7a515e9b7e1d5e9b3ec2dcefbf305761c152e5432c8b2cae1759bd582f2f2f17f6f2f292bd905ee610d20681edba2274a54aa128350a51a935b00cfbbeac53f615a9aab2acaa3ecb2a52867d950589bf81997df615563dac64ac48570dcc5f05b31ff1e7844fb2aa98d9c3cfbe0752c7a81290f8f23bfb2153952cabaaaaaa92afc3d5771624beacb21eb492b6a8a4bf4e9857f799e65a4cebb3df66f5da99b6c1cfaccbaab48df41bf696769224ecfad35e56b56006af4b733ee2675b46e55b72cb1ebeabd99c11a2685249d4b99a2d7bccd58bba9ef8d449d2de00c2e57ef9d5d6647cfcb33b9e303bb6ab9a57318c53fdabfd95e64cd38d83b961d5bdb3b298dc301ba2779c30b7baae8155fbaf0c735aff60baf726cce9745cb5ff22653d9c17db1b03f605c6c555b2b21ece0b52194862c89cd65260efe1bf2fba663d223d0179d1872b43945cca82bc8fefbdec313edc87913608d4481f52472b131095018be76d8228d54ff0539d476ff6feda7dfd36f8cf694ffb7bef8ff6b4bb778da5c1a69ee1325e0c181361e44be562cdab8491b28c8495ae69b9542f1226c6c0184f86cf6813d3d81a58d7a071b23c70f9bbc82f3f56d5655dd7d5d7f55efc4a562f2febba2e2b565246d38431a6c92866c1dcdfe66c1ca64d5d37f1f13db13bec0e6ea28aba8e66d3b13ed4183b0b73937577a6681bc42854e3f0cefe0d10244e0e9658c8c8c408d1bcfb75381ba2779aa29a66e70fa6fb7d7d45153f98e2045f9c600d05586e87c1e5decd6cd3b558dee0ef09ae4ebb2b09dfacdfaadfe46ff16475c592f6b0ea29d2cdab6f7555a7e1c377f03df5592d3f71f1e47962b2d3728453301509a336e3b19e98a71eaffa6fed2a9d0ef8fb95d3117fdfda1deff73beb01abf360940ea356c8104468df3845fc7320d4e997234748e31ca9475ccdbe95799323673f88bdd1dc89ebbae04b4e7d0cd33c8c699eab79bf75ad9ccdcbb1847963e2948bd894794e55ffaec6aeeb316d7b4e7a0262fd7c1fd6cf67525bdbb82ab1792d3d499b9a5b9bcebea45d4fd29854a8f96ccda80f6b737d6b5b8e7a5d5af5d68354ba9af74c98fe8bad53815545a586e4a6fa6f742d9d8befda7653dd39929b4a7a81d5bf11ed08a320cc78e40efc8ec1ecbaa12af461511777238eaafe1cbf9200c7976fa6fe266b34c2a823bbdbae0418058938c2a948b7f8f2af08e3c7d78e70aa7af835aedfaa97d448a56938f32848fc9e8a1e9140a4d0faf93a6d6d37d565b530e123e1d4cbc33722a4880469a89bc9f70a53d417f8fcf0518dd30fff2607e7f0d81dfef02deb67e3b4f5014fbef726f3e90631eafd0dba536eb061836e2f5fbd743dd16d4750dfd7d03667b44d93b6cd3a43437253adadd3c5c565cee9f26e27463bbdc068a7177a1a0206262626e697f8c3fc8be6aaf5589665d83eb68ffd1226692757d24a1fe389905e065dd24ffa18a45fe22e73ef2d8d474e0e46bd8fd1264913a2d334ef6134d734a5f799e604c7eee8c1d9bcd7210057f370d4f73235b7532d476f5a0cf37518a6fbc74c62c0aeb29f4bba9464145679f873927255558f4ecde43e86513e4d95732f1d55222ba43eaf0dd37d7bc01b8707d3f4bb9c2992a8fced475062d0ccccccccccccccfb8fbeabf17f2eb4381348bafa23793ed88d31466ef8e0cbf8d8b9d9b11a9ed7e4932774fddc638cb17bb320fe3e5b5f8c6fe50d3c28a2024a0c24a79c737757b325e9ced1cdddfd7ddd7797dd4b76fd7230caed2ed3221ee1ebee96d5e7cb5977679473a6aed9bd59f2c0a445dd5e3a71e8f2a1bfbfacbfae8b12cdf8fe5ba325e15ff1fdbab4edebf5d7f5345ceabafefacbe57b574c3bf5988f3d57ccfafe21fab33f5994487f7622c24f7a7ed27c2bc986414489cea6919f6912bea56dad5c5b627afc6977ba469d231f11a67bcdd5ece6dcfd37ba876a9a7d4929ce9ca56ee7558c74eb767e7d7ce970ac59638c54360d7d554cf7ee623b07b962e2e6bd7704c952f1e9eeeeeefeb73c043ae78eb8548533df994aef8a381c7fe78e1c18a802d4fee6b1364dc455a1c62c3069c1910a381dd8cb77af13221c6ade000a95771c0d3f8c760487a209957d70d1c144084060c5680fae86df0705482dc6a164dc8dabe19fda3b1ad74390ba7d011d971c758530a271b2ef47a27166d6098fdd910067d3df7fa4714adfef92507bdb9f77a87dcba7908c6708a35a3ee40c48a98899923633931bf9498a0f84113acb1408467515a7438a6c0e0b11b82a4f54657e59391dd833dd90dcd4f7f2afa715d11630df102d46c946e51c1e40d25e4fddef18957fd60aba2362c5646c5bd54eb156efd98f59aff70c08ac154de2c2a8187dae861f6ea07257c3cc81badf3ff033d3fd068227cacb331eb92dabcb983f02c1a8965420104c524cabf8531c289309c542528965b25eca420b37b36d91fe62962abb6f4091adaa3e705b6851956c65c4d52cdda12673b310318abfcd40b45b069fb73ffe3161a22245359052d578f814fec4358f99e7c8bcee14eb9669ef666fb9cc06227c81c8fb31a105055bc0e7cfdff3e3181f84cf5b664fed0f4659591796914ad3e5052626868c19261a354e3232271b5615a6a0babdbc09634a36cd391f8a166ab70e502f07b72387f7ea02e0635497d51c1e3b33b763cf61a8fd7e6260e6c7ccdcfe5e776fc979ef3e57c3cfc4d79fa0210b2686982832c282cf9b5789f8faa3b73fe7e9286d176ec386d49d9558264f896d97e272fca658dd733b64d686dfe9d81df2ddbbd3119dcb2a1457aee102547e4e6677f0f84d72ad79df3c5efdbacba3f2ef37afeb1e47f4012ac050b431a6a5020c477593a96efb3a93437501d86898f9c14737f8265c6cd75ddddf14f8bf3fca527fa8ce0847502af6506e7c6bc1c0027bc7186374f3793eec8e48b7c53220d695f9a83e3a86ed621f3587d1d35a8f5e57f511c3301f8e5acfa4816131cabc6334660d1f7607f634e2cf3d7d0d7aa21bd7688407167f4cdbb64e2c3e8cf6fce5d7b52db5fe3593249478db92baef3da56efd5a0ff64ad4d5b6ee3aadbfd91a28c9dcb862ff68f8c8dfaadf9df159b4276e15b5fe5a93cc51b71fd3a695cd90357e652836bff42e31fbbbef14dbedf4fd5b4721653e1cfb2c0b82f9b036560c98976f1bdb89ca60998ff73d4e4f7f6541b0fade0867d73b1b52e6ed9f78ac5827ac537335c618bfcee8e37df55d43233d0dcdfa37cd90413d06dd4c317433c1d06dd2120f2ceeb2980bed793f1f7b171f7687912d47ddcde76d4bb71cb57fd29ef7fe16668431ba59936e5e8d5cef3a2b2560521fd6c65f524c73a127f9d6f7eb348e11ba994c7de4c3eef0ef57b1f9a5df7254cb872b363ffbcd07f63d13abd81be112dd721c65d865f15895e64fbef7de93fe5b0e7f8f477d9fc3f9b03bf6b9361925b3321ea0e15f8dd939666d63f2a2b8f7ef28afa33ce79ec95bd74116bd3f3f3f3f3efd846eeeeeeedeef5e5e285c6e86c7cb619473ef3dfe4767bcdff3fecd32ddefebf4f608ac972ebac71847328dbca9effafd1cd9f2649b8f57c7a8a7e570caf1a81b35cfa9398c5a2a2b2a7d9faf36a2ca8f3e1e9f3a7a3d2a391519153ffac381920d83e038c5ef4fdb6ee0f76375dddf1b727fee71286e3fa4acf5956e1e4008871e07d7aea3fb2c0647371ed5fd5342cc8c2f62d291f0f025e44b6de3e1f25b0f9506e637ed371a24cc9f7ed3f4bbd06b6a5bbfe74fbac98fa44cc3a657dac6a4877cf82f371a4878547e6ffa73e677442476157c51dabc6e48b0fa9edbb9777b37848fbab5f9d678b8df08265883e3d456d7eebdcefd8c1be36494cbd7ef3d99ea66b6591d87fbf3ea0be3e5b48970b9191c9dc5dcdc03a1831232a4c87ee7f00d0a07a3fa97fef6e80d8a518dba91fdb3dfe4700cd0831914e5200d5150c1831d02fc8cc109569e68c190163b474398f9eeeeeeeeeeeecec9611acc0d559b5671a632314e85e5a493bb96b6591f9d94326e186052e13feb92524a29a594ff8bd11ef931bec4fec264f66e2b09a6e82cfb617dc6d98f2ccbb24cb37e7b481afc4c7b2f33f99c79c6e34fd27e314b7375d714c4faa59bd56369f0577b59102bfbd1d303ffed6f067f5b5adf197c4bebe10c66d8f5abf5bbaca29a332ac6c4a8cdd69272b96dba15b752dddd7d0259a698a2084f3ca99b7445d0c11a6abff4af80945d0429beb0995822e638755d54dbb04a7a0b09b624b0825cd522599675799434d3a6055d1efa7075f9ea49ef24cc85fabf25c1da903efe05e1673cf05aac6318d5a6df26e9e15f57c603ad4a42a25a92516e691bf631e35912ac8daf93ddb124d8279cda9fa2c62e9afb2473ba739f5497ed3774015c081f7cdb4575190fa1272190ae28045e8328abaf2ae77804deeb749072cef7e8df709917c0695677bfddd5e4da400230c796d0bddf7b0ea13335cd0b99b323cbad78347b0be6be16f7cc90d735ca319782ce39ea9e93d1bc5615f362c018a17c955b381893a428655555966559d775615896914899c481ea57653c0d2bcb7ad605fdba300c732f632182e07135a4b724213a87d27b1e311cd9a67f2f1d4e37944d33df7b8f6e1042081f55ddbbacea925824b92be0f399a55d965f1626a692115ad6853dccdb79953d57e3badb09a429d33dfc75da4299ea9a495b92302f95ab98fbfc3bb71c798f8aeafea5f4d24b9a89c96262603182e8859a8c0b88d6665895569d7c4e983564ac014f3630be81b91bb0eb31973d93c9d1cd3907ff46ed81efa0cfabee6f643cee570b93f29b1ee329935f4ef7fe302f3124482295b8549aecb2af346175bf2eeb966ef2c55d8d7b9fd3453e9797970aa6d957c6ba643c3e85e677f85fde8b6f55751ce33901dbd784b93f656ee59ff142da901091822280c0490abe88f264236c7f30ca6703f8fe5149dd1f735803943eaca4cd28e9804309e23083e190c99fc97c702d6932bafaa19a52ba99921623076914135375c87abc0ae3a2150180ac8811002aaca4bda04a9a0b4d499b3b94aaa54929530250d248f52a61250dab51c3b42814a51153e321e391cfc305abd7c4944352a6b0c0d94817b81a4985af58a9c97abc9a6125edaa3c90b09266d521369990a29256d11b180cd3dc0e90dca13a111ddc0ffe3de8e000178d3a94f79025a0eb7b092483a63cda43498b3ec4c04a1a14800caca4bd4a1f34d29223fbf1756a47c81f4a9ad76b0656d2ba6272a8e51546f15b9a049a22543905b40221525910594a1ae7e4e0643a8ea87484acefa1d16c1a7e4c734d939355f9e77636fe4f7bae729943b98ba3f1d7aa37cd19c00c1931624ef0b34a82365ec3f6812a073d87e3507c1d0a3f87f21c4a7b1332060ea57124907481a4017c50ab127f331f8cc3a5f6dd4ccd4a3a3afabb87468d93d1285491a0f26f57755fb91d9593b561a1cac9ee8050a210ac9c5406ea29511845852194dde14cb895ca2f690a28941eaf368d753517621414f628ec52841ac7a7c4a11eaf3a1415cc6558dd43c2653f64f55761c6f3e88b32f7af4871c09ca9abcc14ccc5610673ef53d8954026d39c1402b53f060ea789cacf2f811ac7a1389a14389c28e4e2900b2a0bf514eae6502410344a4165cf78a2100adecb6b067328d3e13479c23f045f2db1cee45230553971281d5a95830e989bef7590d5b9fc4559d4c9298c622919cfa3110019cfa38f0908a3300d3f2ae3815020106f31151a350d7765aa1008428132fd3708c58751e348a00b1a55ee0f40c603dd9198aa43288c62b959bc128718c551280a557e9d865038150502390dff1aa6da5f2303b2c3136ef0043ffd8018b580a93a2a93541e8defd0d611516347e31f00aeae5589df1a8e8ce75109c43400aabcb5260bd25b74214a07ea7bb86da0f63b947f0d0f15e93dbb1a7f1c72c05ccc8b0bcc842991321818181818ecb2602a1961e07398e63500896e8d5b3f0f2e1351706eb78bfd662121a22056f0640573632116bab2ef74d8693c8583a430ddd36b0793bb208563479f7fdb0b737b9dde194ef523992657a5a87252554e9eecd06289a2854a90d01475bf824790c01c387064b618ac3a395261a9728a1ae7aca40cbba8e32145cc54f92bab1fc2a94ae8091350629029b14cb8651a7c4b6d6b66bc860e83c371a2a6e958fbf90b4e6d713af6190d1a171175e5a1a66927722d9cf26f08a1778f00ab2d5f062c50e2759b4cf450ed67206c39b588a7e015a08ad9a69cc14162de423fe1143b1da4dadd81da1d065804836169bc86fee1d84facdc504149a990b69347ddb7785726b8dcccd644d5d997b09955af30ca87680b31ca9ff4190bb1142ba8feeef35d522fefcf5b980c1c85dbc151d68628e6fdd9a54479b275139c2d6b80d102e474581b93fa82e4a66e18605265fee5b79b6ae36dccf99df1b8b04006d5839650dd7f8676e28f3fe34dda09c8bee9f74d2f433b3125127fc68948f532be7a19efb20eb2f4f4c3da8aaa0f33a9a7224530ca5d638763937531c09364eb5e0cb43b647d4718ea11d078f76f272dd434347eeb27df3f2630e6961a3fe57f631cb4d37ef56ee7b5fff84470f88a2e89791c621e875f12e3ff5d7c57faf84b60be8a4b4a1f5df66e64a721aa2afe126db5ad85609c6a37e812faf23773ac831a27d225371e3e11f9942ea95e7ed3f7af6edcf8f84bfc89c4a774c90d1a046da1a6f17fd96988aaa23ff34bb4af9ec8cce34097d09ff99755d58cf6f4b71c7faafd1389ff74c91343feab5f72e3e313a91e07bae4bffa8b6af4358d26616a1a7f4a9dbedbf9df50d5e98ddf4c54d36efcff266fd076e5dff8b983d3fbf794c691efdf579c8eeb3dd6d36f3d452f93b6253549acd84bddf8bdcceb1b646ea0a71ffc37bc0ffe1ba863940d19999797d15e7e35574f9a92573777b450b6f5c1cbcbebb067fb268db7683c85c6439a0c8d8f62342e2a694cc4304c06e628bb83a37036eeab25ca93eadf4d780dd5dffd373669aec65417594bfe24ba195d2346f97718e60eb91aff4b9380abf11fd4731e32c3eca8c463d22c635e1037c6a78622346011dfba6ab76c94f91c935afd6f6e8334248ce28a1ac1a8fe1a8f6ea88f569eccdb7823553e6a6718d55d227d45b7f771964828f9a89957a118b58553fc3634196d855430ddefcc12443c18e7e549df9f13040a8bcb0bfdf741a5f9a447f328213d5b4a61543f1918d560ec96df2d35be6f4c442e8bd1492bfdf5260d93a1bd641a299e34b7736d50774577ca02017d937e3e91d2bbd025d6977ed2254f0cb1bef4f24b5c9e34dfedf4cdabdecdf7df2439fb6f4a15dd726a7f93227dda474beecb7d99a484fdd253a4425ce869df65e96988d2bbfc90d2bb5cf4244bf424970e9918f6939ee4bb9d18edb4bbefad1239b3a4c5d0532495fe144beff224d2bb3c8961b453f5f361fe453b0d311fe64f1525321fe644c4e525c986415d4a9adb796d48b2f5d192e67648d4ed909e08b7d3a489cb5fdf645abf565039f3d2888e78847cd374fff658b8b8334ca9020c2c6eb7f4002b226a82968daf3a55d5cfc45a048ee6c145124a5718aa37b5e3dbc22923d426c30faefcf5b50e93ab79327eebf0d3f6a5c6eff3eace205c7dd4873fb68c18a6f8f3cf912357ca96bd99d8cd22456061a8b2104e392ad270458595a9b84250e52f82b31f02a86b84534d69b8941087da5d23458866334b6a4a3105aa7cfe4b938e8f54f94854f9b24aea9c508b1461a4bbe9e907f5235e058251fcac73d3388f56d36494f69698c24c3c7e2147be1c4e6d92073639f5a4cccf70aaf4ee61d10d4e1055b0bf3427bf73fdcef54e7e07fb205cfcc1a1ac1fc0e6a342d2479ac3d5583f00a9f0c6a1acbfe1540b81597f5942ac04946afc1c3716bda920cd21f9661d6aff6d1c70ae666f72dcd0998691095350c3d18e00671e115a19d4b71d400376aa524a7ca4db713ba4a06cca03c22a2d483c2d472ae06cfa5deb71358d04a3faa60747d3ef1ed275c2a8ee9ce96e5c4d118c6a0bbb713aacac08465d75bb696612039c16b5df082dc2282773735a18e074b83a67a453ce23a98593524ab9dacaf607e3765d6cc6982436634824d293482429a5d4314b6bc33ab61931d8c2fc06335f76ccb5d9b0ed8a591b1da4dfa2696df857d28dc6c615ebe79ffefc31eff94df0f965fa61e8cb8ca94ca21b4b19d2ebb08b0b0eae86bfa4cd300d3f49734cc3668cab316dd59655971a838696b58582cbcdc006581a700dd8298de39f6d3b82dadb81ca6a2e90303767e4c3a9d33b52a471fc3ba39b096842a991e6348e49ce8abe23b00874452475eabfc92260f411cccd646aa74f1475153146186193274adf2404a89d0f6c183b4fbc777f03bf8913d38e7f08503ba6ec1d8a28a72fa8752d69bc2951f71f5d57c35a95ea499a0e046855b02a2affd50427a81deb5d6b1202d38ee543e57782daa9e80e8e863fa74da6a783db1e759f896c0e00c215d21c7e6833df382e031f84c2f5f2957b1b53ec10bca902e0e1c6e9c8e1c129ebdf1be91edc0e1c6bf37030d2fcf748344e8cdb52dfbe68d6bb17baddd4979ff1979b379e8df736deffdff83ec3dcf8879dfc34ceeefc0d1bfffea671643c8d778d438518f5fe248543bd97a9f1fcf30280d2e101f039fc26abe98637d47bd434ef4d7fc9d04e377ccdbb9d18dae9067a1a22c6e3782232be46c6e390f14bfc63bcdb791cef766e78d738271ee869889ac7f1446a1e078e5fc25f4337596f782238bee66be8927d1cd435cd0def766ea0271b74a590f9f72b74faf7326afc0e35cefb3da2f1ef77cb0e747b1aba99aa0300d521073a43693c0e4735a946a8e4ccf6b4512d15cd000000008314000020140c874442b1603c206af33e14000e95a04a745018874910c3208590418818400c1900801181996962003b5be5b551f087cd2973019a23e81d1dadeb044f34ff6c943b46d3fe8ec36812e6c4b1821accb01f3f247efb449ef27dbe1c0f1586b31a7411a3d72cad2775288c9b32021f9583960ad5bbf05497438d0293b6ea41f827a7d7fa63a639f5b536a132a857b1143450a1817bb3436e37d03c87a6edbe1550d9c0a49be21a1cf6ea61ba6c638f278bff1e5fcf025c3485ae0a6e8c839920a3be4cb021319c8f53ee5c0ebb45f594fe65c0daf517a03264fdacf35f5efad34609f5d832d0c5303abca91ae205a35ae532fa7b72a2c04996c33a65a571f6d24b5fe07501865cb0885659421eaa332bcc06421ca573eab860b20d1be0c90be77e528585ce0decca7090fb11ca1db206f3c8749a16800960f18b7bb196d1e99ebf166d0fcfaca284d4b6fd2b17be0ecbc1114acc375bd6252000a37b7163c0b30d5fc3901e932f65818cd82c1b4162e1e6dd6840896f93703a6ecd8b577650eb15680df58b2eb87ef5228eea31b6234ea25469fd974a52eced3ffc2a40bf7d65332622378479a57608bf91d41df5f17bbce4e25e9a5984574f57bf7e815d93c17b4fe70b6db1028eebb89284a698f1e867d233cef932cce57c6c6a4bcee57943502724823dc10441e17073d7b4d7337b5651bc97bc88c0dbd425172e582b6f4eab3b968da0c23c0a557960681a385464a06af370ac9467c30759944f01e539cf3727a937e1b5874e47363b4520d8c365df868aff70bb4f0f747d84b4106a734cbed61ff6fe0cc0334ae35abf2682226a0d2606210da2b85f78fb72d83c1923d1911fd80e31b07c3d148db4f9fe44d8167b0492116cb352507e717a7aab57071343d99886b0357cf7fba7c320d2e3a9013652d9c140329d65c62db67485881b9407fd9664d3fe89f16388c7157e2940d2431194e4191d816625dbc369fb82fb6fd5b0b412c032840a4657bd9362f9471a7e8cf427670723cb69a0b35aad6762d90590bd1083f94c4fe4e0e857d805f91e1d792d2a409588d729c92638beab8b478b8cb551f85ebb0849945233caf146c21d067f6e27007b78b7e0dd44fc22fae22c96a66fbc855f9a5868042d2dfcbdac3c8113e66fa03de2b0f5d14e5d3a352bea551586634f6f1e3c8aba4440c0d32c6aee6a765e88a12d5fb1368e3bfd9be1fa07344f3dba5f053a1e19ccd518c4443284016c577fe756a74da20b0ed1df5be36374bd9bfae2707a0bf94250994f0b7a1c613915809e6c94f1aa1a45b4a50833dc4a3733f2fb666bccdfc6d897666ab33a5c85b82903fc826716bba1e9bafb319fad92ed88f743a580d8bd0f074b8f5b4fbaea0eaeef156c370b4164b6605bd2d0af637f904c5a1d25a49b16d4650cb1b17789b1b3ede6289d5a969decb5e70adcee67deafd21d57575fc19d7a55387c5714b1abae84bc8e1877078fec516ab09070a784fb48d082701e2eafa7ebbfd37d9ef22cd463deb9115dd344dda99c11292d869bf0d5b320c312a985f6e491237ab491c923a451fd4feaa41a2615c85921fbdbe43ffca86c16e7c2f56715aa5e93b46ecb26142ff1afbf2a20677983ae73daca0b49e8bce2202098e8b3b4733caa7f9cdbd3f72be81d3cd533a400fa18d40e14f31a4ed15906a5d4c339b300e9a90442f6ee168bd5bf3fe2cc3ff753f3c528c673bad40a7415539130a5e1a7f4d6ae530e7094e5ff2125b1006d4834dc09a16d20c6657690750657db0bbff21b000ddb950063a593113dd06c265e0ce255e46ea81cf8e0d3a3a7678eb87575f9d34b71a067740c1b4abd261e5a7c20479bbcc942b214d1d4d8505140d1afd18940257a7c1b405e8bc8b00347e8c9cc4c5a4a34801c38c60af094f9e561837ba1ee3e6d993a6d06b26751daea50ad7963bd72ee2a85f8ea7910d00c090f13f2ab73e95f5b623c0becc33fc4a307fee8ff441f843e0251253fa7f1f91cacbce78d8a92a8bcd7b0fdbb9743334cfbf3bf1824b40dd177801e63b7b676ffaa4394cb1fa24163d2787479cdb0b8d26ec7791477a24f90f6e28018add8ebb0fe912b99064b1d6eb694a44eb4e8f6710e45ec05c4c99ce7dacee2101337c80bae3797cbd60979168dfc2fc35d50315a25e77a87a2a0210fd344bdf1e6803771dee61c4477826ea39d8366ac28b5acfbbbd4828f1ee20576596dfe7b75eca928de9b8b80f77485a0a351f7fc3800e742e337f99b1f5a0b1a1a229ae0c5b20d8bee1f3187273a270bb15b6d7e111c1a130dc0797d666c701d42fa79312370e4283fc7193ab5df13b65c223d06304bb756143392386702d64cafe59b00441e57eb53a8aee620631bf8519b8713695c198f4d6c9cf0e3031a33068509b6cf61ac385a8d0cbaf23b6c87d18f71388f5f2acb9666e1f38b46b602cbe59c1d815d8065f631762f287eb0e31be38c2e67c59366fe9732cace2e55c1f81d8068d9b9d332b75c4acf3b01692f172aafb12655fde4e66f645e6575537997c2d9ae1cecaf7e23f3a8477a915104ad63361946494ac6678ceed7ad42e9b4feb157ea179a87ad3c4058d145a180bb10c75f608b2d4fc878b0377a46fa93a7d4417a2ad1280ecb2f9ba0a2eea20fbc07f0717ceaa1f1ddcbbdabc42e13e044805d512392d9292987245346aa38324b8f42b0cd9032715e556348138e20b9543d934f784ebe3c75faf90dbe96999f5db0280a04193459bac515f0d285a20dc3d0601e9a6eda0c3c5d7e181b7c480fc938c43f40b23b1a616ba380c8f0aabaf53433a084a93698392ea64b8b2646a598246e37ba045662eb33f7db3539f34fffbb7685c37b01452854e29e76131908997a248a06d5cc09080064ca8fb842d9547d3282774dd79286fa1d6f0e87627f3c666247654df020cd17b2e54c6e25f9f03ec2fb795e5fa32e1ae1e9eb717e40fabefa7b7ea5491056150f9020c611413c5e1117da979730b5e9a8b3fb2ab9fb5d6421fa7a7d15fe4e4a2c4e13d37e3509f01fa662af0b8bb0bd9d57264cd72e91629b9aaafe98ede0210811d08a0b0f4efced58500665375105c0df89b833c971cfe7adeed805ff154e80846d32826ee38e228ed64c14c675242465546b91183128d285ebe0a353df6c2d471d636cef917aaab444c48cadc761211a237ff8b0f6599c0fcd3bfad71ef8ea77bd3e5db6bd279eb5354eb9025b5c061595fb023e36efabb63582427061b0c95561e5d62d68189a3dfe9a2d48f38d6c2337c7bd102eabaa85c51f3db0a852bc7b322c094260ed4609670ab8e3d4ad56fa8d027dd5448162cc60ff18ed8c48babaed8d88e6715b86d7eb7f61594ffd1ae8e01c20feb76bfbbbc6ace04608e2b3afcd730a82bebfeba3ce1f1b29be1959b26603fd1217f6cbb7ad5af9277f53452923e273cef2cc0a65248cdd8c49c654518663d871f33ee1c9fe05362ed0d2e3428e752bea0c2995886a6003d2720a583480b0071e25f3867e85feb0043baedc6de292b743f64bfa822ffb34bf3fb9cf7fbd8b088b1dd76ed251c3cf23598dedee3a2dea4617df10c43e582714d03e821ddb69827bccea5073d8a05d30950d17ade8f0d2bed852a7df9df6f6bacdc4b68e08990bdd6937cca965b6ac3e51bdb039ec3fb20bb5abc15a57bba8d3326e0cb314720b03b449495bb51b13e2f20baebba9079d2e412b85f5270f284b48f659eda2ce0f51bde15193bcb2682b0698a787d9b901449ea0457edd0b11c76f0b0f7c4f4be5b5606d3423b4fa40d30cf19da6bbf1f2cc5e7295c60fc8bffe15b79a877cd544e87b2dd058876c36f0dfdc4969de7ad35031462a88f5ca52111231d2de4db2eac564943bed60c67912d05f1ab21b105ca9169a2318bb29d27dd2f4878f4880500416cb034314c62226cf9369881bc95e31db8c61716096ffb88c289e1911921c05a64535e2d3da1260f6572219a3cb40acbcc57fb6a48a240b2346adedc8b0a49fa0db19c7679a75e657097aaf9be475b4add9246371182941ea03754c88a76c5b40ab8bea53de8e3afabd88a225cf77737a638da43288880877b4f98e4628429e6e7d92338872c924f91d15113388ef7c923e7678364760049c445f002ce52ae9df87ad67a06cf33a30ecc2f46638c13d62a9bbc91518fe9751765235466f68fe5f47962ee743bd6388ee0a3e4fc475c0e35f4632dc8509a2ff47b9acc66ceb8dab93e136d09fe46716cfe0073514b1a6d28588df1445bc062a84721c454c7908de273cd68e16e7d2a3d2779b6ccf558ff77e2344e6e3baee3dc1841c2dfecb4c89c1431be72287a796817e1ab7f2d0e81322ad73fb154f033ba45e8e038318600761917cab2b629320e2ceaac8f821d58288198252b2d247fb2f941fb6c5ed32c5cc2d6235338b18309da31eb72b905dce4ae06a261b27ffe7455cc1398dd7efc25d3973302b2511ae3fd0e847c40b9e706849931bd617fcb9ef858cc981c6444e04e58a1f3789f841249eb6295e3fee62c75497ccfee06681b961805d6dbe1c5cb170d2dbf24bef83fb6808036ab287457cb48a57662ce2fc507bddc6e508fc10809634a3ca21923af17f458c784a50118bc3e1a24327364c367f893e1d4f95c023eb92830a537a9d1cde74b1c4beb31561c23df043b9c37e96650fc9ee9006da8563d669b472da411de04d5b7f4b16d0b33fd0fda66f3eac086952f5f9cb46039c93f46ac2c95bb1eb4360e6e04e5fd8291c81063c8be838a108c6b129c5049f0cd3106144af6cd912fe14e7cca36805ff01e21a919e087a9e343b83135692c1b2bbfcb479f4f419c5d480123ab2aa539a00d150003c7478647f60fc842e680e07200a500dced38367bf8268768438440c5dcab6ea8f9e9ad16b629a75b779f14f995f5c10535a552bae9547a33e98327e5ac3f9659a4c6cd2c2b19135c98082c212353eb0c971ca7950383a9596f9ebd5baa6a6a48b9d7d26dfe80a429db55267f1330fa34cbdc799835bb33cdf8b141807ed51d956f9907c18fa6aa4c7f7c70d0bc8dc7f59d7748aa90887cc158fb947abe908e005615a8c91fd68edf21f77ffd55a506510e93f2f17da2126696620e9a58a1cc20e63ee8d02b819336f5a536c1bee2f8840870d2474a2544e72de7cbeaa603cc70fbf276f900f34be96e9fb26fe543db6ff6cf022442f354d8d0842630bd911947e97dd79d0cd1c034954a3fdeb6a3d8a6138ea6e8f8e39337dc6fc665bf60caddd4dcbd0844225230eaa72fe0cdaf241ceb10c448934579f66e39aceae029244c3093c231310305a98d26112db3259227e1ca2a0b0ae9001c14fa6b26ecb6ccc8cbbcac3d119ac72de6c1cdf4f8c9fe8adbd86af6220c96f9af00ccd00ddeb17f00bc90e90187c06052ac148b01a41b492448ccf473790ea0a60372e3b75ba5f7b97da6ac690ee77bdcfcd22d5cb1d92727230f827abb3573b442cf6b41b4b9f94700d3538cc975e1950d71e1387744a522d6262b7d392bab4931e1da61864158ce424464e05101572257fe1475d7c4d7170be7bcbbad95621d56b64cfd559cc6b3e74abb666017963c13cf6e73797e918eab5ac7366a26a8834d1aaf54f1d86b1b1bb3d9d74c061f5080841673aff93315b4f2f7d870f90ed7735a72ac62de5a54f10a8b0aa18cf7cb3416fb638e3e63475c7bd61cf336a999d70e6a4311e99528349e55e575e38bb58eeb30d5b627e58aa0c2c691437a803e18a31f77d1d2f3aa401018ceb336226d35ba6a0e3fdfa0936ba44bbabae9db63d4e5386156ff3db79a631e5eb87021e6fe0ff72d6984b8476fa24ebd0b6d6142880b0112585ad218550b77270fd64b14675c511cf344faf3c8e3db77cf6dd98f20c3daf7233fc14c5f13b27abb870f1510f128458b040128ae4243c049b0c984d689121b27c8e4b7f69744494acee8fdb3a389dffcb74ca34e49bcd3f3aeb9f35a203d4e123f73ac80d5f0924d799ed98e4eb9950a261c3354a257d847cfaaedb2f8c4f1408b4ce582583d93071eddf8da46c375f29918c9143112fcf5c96f8a18016bae499f71331e3e7da9270678460cfef5d53b3e267dc8c135bd103f12a89ceb44aee2b2a26db6671567297f6ac41c3b80022af6899a04934d5544effa0310a3b8e204687989771d4a5e672539d34afd43e5ee6c270fcafee8d834aca4e76c9a3a7ed2c87f430f3434f310e1af05e0509b8ea4e3482d93846ab291a11012153bf138b5ec70b4ab80100ea159bca024d448074fb767f910fb4654c81fde19e08d37b1f4bb9607e4e0f9adcb24d0d4a04900a72c2132908854cabdaf880289ac2e87628f7ac5244337c1e9bdecfea5bef59c19e56fef5cc73311ad0cb5ab3bf0c896178aa32bda2f9510af0142b52ebc04a52c8aa4b20b2d49391a7d742522e169598bae1c3f39e0251464911c9e04c3c2f3d9d41beca0102ebd1cd13278aaa9b9cb340801834dc026cfde59b268103a1c88bb280d09310395e3e62889b91b279cd89f0539de799897795780b1fa30fa9530e1c2c2a0006e272b7625b737d4f52cfc4e59dea708fc3b3c18777a55548c58319f5b9122461c46559873eabf17282c041f0dc8224502cebacdffc0799b06b912fb075429a41b4201cec3f4922330d4641e86f245da804ed46c016424dc0b4e92dfc8998eef404c4a034bf941e6c5ed4d1d6154842c12ed77eda061f3ee429f83aaf015319c86ae1babb767cb4d0fc3474aaaf7ed5cb423b29760fd6e62b7e7e92a5d06035d402515ef6c94111fc1e68f8ddd7e8e1fc73a6d6194eb7cddd4d7ff94c540f7b181d7d8fca5f429113a3c2318ff63d575f65502b5a8e24a16562602d5f9038d09eb0076e00f31ee1b767dee8bb160a70bbce747f47d1b73da8edfa1351a5bdea1081105c641a18c2f71bab4ebbde42b0bf5f5e898b1ab448ff8edecabd7e6f8350ed9a46f0cdb5e3ce9ad15b586be62e016aa058e85916805dce0c7b369d5888223a01828304f2682ac795753b8877913383559daaa955fd62a728ddb53f3e4c76136c8b7284067202762f97589299e785aa1edf6d0906b08813bca86609c4d2cbeca4146e22f2d88ac549d1c6005bc077f2566cef95d6ad47d1252fab10f3d597070a0a9e99670edc12aeadf3d244ccbf802d2b4be12d874a968d2e0247401d380098474e85d7e93fab48c9a47719e3a8f6f9231023c442846c83b58674741d74659a8f5f48c05628e499900e35eb015e541a7008b1ec3d5d221100f6dd3fa13893b934fb0061a544675c60f47030fabfad6b36b3b3cb64d193459559c6634e6286f72fe1faf04083c071971795990102b006a2e523c2def511b655e9e25072f82a552c7ce0d13763d53fc0ea206908fa840eec3c094895ddf6479e8b19f926034ca44cfb153835fbc99c0b83d40efc429fe6f7cc6a87eda8078880855f1544cdbfb1f1be4e4eb5c93379df1649d171aee03d612800085028e44b4e2aeb19c628ceb9530861d36b63a0b8dfe343b945b9259e714c35bbfcfbcaf7d1ed6c829430692c1820da10721e765fbd3659f9851b68603ba19914846eeb91136edba5d2e32cdedde8194143fbca72e5e62b75e8513a8e0a22a2414aea4685086eb4edb79a5e6bac02b9bf73e63652124cbbbf7c1239eded05439b0fc290e877a12a32e9b86b67eda09554680fc53fe377b072e3fdb71579d0c9bab4875d6ab9efa41175e0fe73be8474b68536a93716182914420dbd904b8511bb3ba27a05576730e54fdf2e966ddac4d46ec748ac59f7e544ef12e45f4451a6c32752ef2b2d0ae3887023bb0a15a6793de22bc61bcea538ef4a005cd41d56ce3a50965af3a10b63fb8d2f96db415ceeaed9b4237ee6772a4e69c7362705eedd00562ce03b18296fc59d6e85352fb894722034738a4b10ad6b520b77a97d1f2f616d1f817f7fcea93167ada848c9d694a5cd810ccbaf78f41ec8d62c9fb49676ba64f175aba29b3e6c275c30aed41051845f178b058d01d94754525d55227422ed3a71b1674acda913a005903c70e63da413133c30fe8ffcd27742c33d3920261f9a7b1434d28c0a3372ab96c0a462cde806ff9ed54f5e1b2858846f2644bb38493ad94d02f8ee4d2c69fd12f55279eb2839e23219f13c56828313f6c0750233024a5493ef0c3fb858ba81722fad6f6c6e7eac4dc2d3a51da447c84ce3e8878cd879f9a0fcfb574860016dab137e3a1f1bf5c53878263995006ebfc74cae83137b0448a21b6f390a687fdb124a8b034cfc04a0935b86216b9d62432f8e9abe410cf49abd0112ea95322585b902ccdcbe4291a38a3b408cad3b97ab4e51fd4b1773eff5b9691e88cc598c5f5d48ca6127206e46203a3d308ccf830c7a80960467756c2b255dce52e07011e6286b35c29a92457678e3d46f3ae39a94f986cbcc45464a35861b0a70c3ceb529b51958453042c70ee28670f9a154fb45c95e593b314ac967578463edd95ceab0b23a62d04894b29ac7704b8ef24d027b5d72fec6bb2ad1ebbedd81e063c7a129e89c38289ae45f71fb95336ba2e0557f8bf5d00e56f51cb1db9e51e7d7cb2c36c9c95f54575289ef3a2dc8420b153ba407f4e76c22ffca265540c0e306ee9842bf9618bc9a1f4e4b15d0ccf9fd7d4b4613dba992d94cffd43d97d60731a5fea9df6192faeb1baa6e6b115277aa5283a1b2c5da89fdf6c4cb2e0edeaee7c60d44abdfe76c723182b1f102e83ddbbfe14e823c08e157640e806b4e756db425bcefc90ececb5195b42ac2759cbecc5461927222f56f68dff81e809270504ca5f228056adcbf3f98e886f148a791ef299e0649644f8028092164ff45b6988e758d98058b830175c03e59c720974898bd7d9003510dc27177ba3a65100f6865450d607070256409c5e3014542b6511b68805cfb7fd3c9963e32b59849385735e91947d6cc0fd4220531216bdbdc0f9afc9bc37dfd6bc45be7caa32e894c181e093963cde79e06b7630cc2fd3fa3e7d7e826cbd7a132a091053761be91f0697f5794793cd942039b8cd8915483dfef94f61a7867332ce0c03e25c7a417aff63228730d485ce73463f7424ec96e54312fa162fa4eaac536c2311ac3124c586a1e5a39faf896ed16b7589a7cca3c06341c777f10764b2e67c2f85890e876b555e2effb1d2effad12061a42f41add1d791cc6f5de76f5a246ccb86e01421ec17e0543ae9ecc2f4ba38f4c371eaddd6b972762cf70817e9935211acaaa0e2969ccdf37086ce43a981f6e98e6e11274c04da39bf5dd45d2557e3ddd8eaa111ac1bf1e722c56acd35489b20f29a35de87a98c6364451914c2d92ecc291360e48d33c10fb399eaf0a56bce06b44f956cc6bd33d76b294081342b5cbbbb4ba3503057802a3a0d5b5903c421ae4690445c42c2ebbeb3754ba5691332585485eaccb68a788d4ce4286d02149efa05fb9bedba554d3d4d804ab461e62788ffa823b1a3661acce19ec6017d986da257c74224b82d100801ed7cf50cfca61b2091e3e347dbed9e2513ef44e9869864e0f8ffffcc72053a656a0019fec6e08da73800724ced6b2486d66cf08e8d4d7afe13462fb2cdb3306ec4a0a62602a6bcccd5ab0023c09bf6e51148442f083e3141e35f7e92163c205bcf0046a2d93ef9c13b74464982c989cebf1553b50a6e210627362cab6ca061da54db554bb910b582830399899ccf42dc4c07d297014dd3cfa78a9c853961625e0c13782812fa1e44d273eb63800193b1ae2401c4d0f5c38864e7da5c6a2e2bc6881db5087fb608c5b4df635cefc5000dd76834c417d6a9c12853ddd1c7feb4c412bc5838b85fcc83781cb014758bc0b873382e469eee986c390e571fe408361040abdb04b52873dd7a5431adb6fc2122922b9bb6b3daa031adcf937afd8cf1408d5c62aa173b2d6baa1c5f06bb181aab73eeb57c1ca293b67785854b40ca7378db17f90a3a96f5747c2cfd43176f790f0b03cfe57d3526184019ec1ae541658c1467d6e85b1f7caa16170eb89fdf5ec1405ea77010328fcd6ba2d621eda0b3d8b3cc1dc304617b1d01552168c393b1cac56b3f175b87508ea7b27a660d25c3da1bdfdca4c0f3bae76e6fb630be9df0a25324c72c643df736c3c2744af434c81258097dd6bde94df9f2c7239c5fb654f262d939e0b378d13d0aba90726d071d00451c47b84076250fecfdab56a2feb11f08e30013306b2b8f5efb9c69f4201a64aa67472856b716b8dc90ae8dd1b90d27642c7dc1ae791008d4f5e1d722cbd385ff79587e16f532680165a0c26132149301df562576e268cc8807d19091757858d68e414e5abf93e275cd7c3a0571268102a547a8b5e9fcf263567b38e07fbff2dd755824304ab305c02ac9c0e2ceba27158106b9ca20bc1e149c59ca6b6d42f5c5642075de26915ac029881cfed05594f827a3a57a1a40239e58946a2d05f8ad0a0f7d922f1d195105fa022f89591e4d20115c4661f744f9b961348852a3d8ed72e38aa85bcbf23ec8c721ef9603dc1510d6d09ee1c4a815c6a70d27555866002ca97875b7d980f148393704bc5fd666f78f1dbde23717896a08d2ca74b06ae82d287a439f0253cefc99d67f6d607f926a874eef5fd96c101122684914875e509c03e2d65662697eb76787c33d06ef603647db0efa834aabf449799ae5f61f659686438132477893b83e3282917805ed2dfdc5a765ab28aa6a3a8d74992a270a1fe52182e95747a0dcb9b25ed50196bf28a8b0ceb7c9d3cb134953dab58ba31fa7de6be154e8a35206a74dabc323461582e08afe9a33661fb112935013a60209c0fa4324caf3e7aee531a7bfee1ff6803983e9d3a7564560452f8f3db7fae84f54fbf5985466e422d3d6def304bf315db4b559c855b694ec54bfa06c75f9465aff267425b63a771a65b1b55ddd7e24c3981ea1e96b42c41b90036c4018a1e41f17e358b7b9a2856cb34f799a1962e7cc86ce942477e90d924e41880f44ddc65e94ce8018a8e1974764847b07af543c3cf598999f036b6aff53f618c01f25808c4242a83a94af59a2936d28e60cdd523a14496759c53573e227e62899bf8c44b2ce2208e78884d0cc4272eb1899fb8c4230e628883f8c4436ce24b70ae4e2272e25fccd54dba5c2e649218598bfb0f7dc597b79dbce74ce63a601b925a5a83caf36307b834f1b36063035a138efce376266e139d8f83883ad58fe79f630c8f3fc51a6cd35b6a6f469c57976ee600cb90d904e7cfd0513171af265781e88e8ae20601998420efbcfd93a9ede909f2824855e2bd022313b321ecbdbc15e00a929d8459317dcdc1e4a408124dba3f07f1599e39480dfeb7cbf8923487e23d04b7ed858b73708eba62f7a398e76e4f2371a132f95a638f37c31a87cec635292ce283c40b07dbe864f997b0d528ad22728a4a90391dc65fc2a1b9a81c2b2237398b1a886a93f8bd4947452cb400e1abdcfcd85c74b19ab15eefe83c78551ca606f570571e2e64a0baa80449c40812a56a5e5fdca2dcc621f46f88204647534e93a75beac7ebd17b197aee7be63999217ba5fbe523009cf36b8f690431d885a0da0421d68d5d10ba216283300174ce5fd2532ddde00b180146d87c2c215d827dea00e586379c325a8700e72af4e8b9fcbf96f6ad378d684ca337a6119bf05f4c292dba57ba00dbbd854d6825da3d7ce3c5d48196974dcdacc4caf5886d91a320419b41477ee08df5ff00e1b74596a67bf925cca5594b61930efc9988d4ce149802072ccf868a48b66d27ba2fb04119b2761db537014e3657564ebe66a31439b7e27cb0504eeb1d1db83134817ca9ec5d816ab77ba114a03e174156bc8175089c69da29f4034d0b29defc48c1f6a18daa347ead613c065d6c95141fdd20410a9336da8dd9575191e63e8cb03e3d76be398c2db9a577d541aeffa830c3a64d7a27861303fa4d8e3c5b00d294ad1701a00ed9c034b49ce455239b7f51ed84fb0b5bbeea1062c190c9cc54c1427c0fe174fdb0a27548b1998af11300dc85a9832f4f4992ab6d3a3c691fe00efccf6ed8b2258ffc3e7f8f2e455e0d6f7134837323462f2e4c3a230664407a5f270c63bd9288e3f8412fcf95a842d9130039a2322242f7b87e75b5b6cac8e14667155285b2e84192e35c30800fbee734874c65f260c05eaac7f71cfd25afb9a0ee0904b4b1b7be3bd46f3d1447ce015837cf47b0372b81218f400a2223c5ffcdd93b9ab58fed44b6cc13cce2886333fdffa6f14f819f79d6412cfb20ef9a5afb65edff7dc250b0596fb18e8a00285e8db718cf26f830d4a4bdcd80e8e5581e3ab57901dbd272633f3c533b6ba2bb2bad15f93aa11d671a8adc122600d973686b0092fdb5579e4e872249b26a6799c2ab5282888fd9e0b0ad60a352e23d65bf5711013646b5ec090a57537a45bd450d38e7bd5765967da5f2190dff4fd7b528a32bd3168e85ec41e2a1167f503681b1ce88ad44ed9a535b1143d1c79cd9808c2b2102275a4c0343f54bd1d7cb13c2092c21b69729f5aed5d544f8be9c4a827e3aa6b82f6169cd13cd72ec0da4b41e9dabe5c5eec3326c24aa492c41dd56771d992ab4aa251aa6dbff95cec5ab51e034a5feb5cae36187033d56efc2719eb3f381e8e0f8bc060578280ca3f0542eaf9f45f0164b42c0debb5a2ed725994ebc22e8109fae38af0c91ed4c7ec41d59b1c91fe1b7cf4ee3a8d163e3d05ef9ebc0f44f6336a75d6212877b77dd8e602802b7bf4eb95ba907efbaee5913f140b35da1dd3ac4fb40e6b3a6be856441d83e85efcc52a175b8e5a7c450bd921d4a14f9c9551aa0c16f62f6bdd74a7aaccd68d10a374a008dcf2f25ce4f0f0c260b1dc15dace9a7e19ae7978eee53eee7a79c7a4689e0fe4fc0ac70da9cde1650b39750f4e1f166930ee52812005959dae6ab9f9a12c2681542db37d43440ef74600ade58dd869579842b28675cfef7cc8070115d1c844ceee08998168877a9d3586d4b7abc3d62c883a0f3b2a7b8cd3389a7641c4fcd6c8cd7df0d7f02fe218d2eb764709d45a8d7f1632acabdebd2caee30325643b66b6eb8bb99cd7443d0f0c3ca0a60a6855097095ad3190e6729e008116894024e535c6a0d4a36e787af7f68d25655b09e368faa12b15a8091c1194799c77169da4468520f0f392ace02f43ef36029b0b517f4a25062353fc4940e7755fe01e85a4ad67d7cbab90d7283bb367c65788155f6b39635d5710ba8970867970d3e88d287668dbf577ad00dd8c6cc1adf975a2d009f2578cb52cc0cda8eb9890f6bd1addd152f2eb248b29c5a4a5c08916896938154ffdbf88524f5b41a6cc4eaecc0bb473dd37f540d4f5d87367763add7a2779e353f2ccb9e5c4ed96f12e929dd7a925fcf3bcb4f00112af1c6d1037648d37d981995db78cb3a48783131a3f602ebb741eb42d82493cab61caea0d72690a7558f4a4b930aad147f52ed239201152ae477f69035fdd219dae89cc398a02a0ecae9461e57a94c60e78024ae8ce9e608f31cfc37732c3218558ec0b0fc22536074b1a4675ffd867096aed8ee2f5310b3ef4fd66da88440ad253e52075890c063f9a057455663c6db34c63603c8a31bcb85d6b6782970b5b41f304a9032f6223147d53fd7d53a912a4d09e5b382c41a3041a280521b703348a3428faa276f2a122dfaf52731b4b761366434dbb5ccda0dff8404f6d97ef4b4db6f7de108194f714c6f79734687bf54495b174ec9ed6c9790a4e73c62f47e18a8a30a90ce02f365e323e15372c5ed23b4dbd610735e3fcd094c3e42a5218456e4f714cd10eb099bdd9a9eb0f91a03ee663d1574fd49895c4fb3800b28ee845ee3a6176ad90df69de4f27b464b28d19e89269a7ab9ffead374774196b11e0e982d1f4642ad0e635eb62db90a4bcf2a64f229c9bfc86d8132454db247696dae58500eaa3392c05bcb4dc62faa13dec5409e3e1f6afc7764127e341caa6d54c8cb15ecf8db0bea59bd432358e99716ab581cad59ac8887d6d6fda9626f059ec4bb17b7c3465b9ff7fcb8ad4e817ff5967d43e498a6e0ddd0e3d2454c8214211861fec023764de5a296b9661c345424dcd557e4b3a8aed1709297e190c80ee4f382e6f4b88ab11c8f68ee9896d67f4398f57bcf622f71a7d7ec14ba85376619097d3b50a244209d84480380a3d50169954bfcb6cf7005dd747b4f01db7a80e00cd9b80a9c8153a1b8ec612a2c3dc2d1ee5f8e154edb83feea0ed53d30ffbe4d6642a43c53bb89a2104f45ccb07815fd782444ceb1a8805690ae94e639a10ff4476e3978f1bdf3993e3d73d08ae7170dafbafd46cc4e5a013c2cdd19b45ed0047afaed80cc218978a76da4b8649e119f7c56e892a7b55fd5ad8f655513b9c5590563d34bebc8af6a6a0751129382459b6ab4ea7abe993226788c2b66d60c45027f99ebe964b42902a2912fd33345a16ed83b2840cd84da842bc87e39d5b91a5b36064c2b9dff4b33607d7790bb46754afc539fefd0d4d0efe31f8f64864a1ae2d209418e097bbab535d36ce5b3b2f29876453258420c4e1779e6c864c6c8b4f71d1b1d312513ac1219944868f669097fdab87362358869c48d958e5a42dc8fea2abe0d5699bc787db587521d0941de152c63292442e48671fb26321c436dd449650dcff3a75175e950812a739c318e7521fe4945fbf5ebafa4211002345a94b64b1d6db7512763d1f5a64307f8c3b07395ad1f278c5bb00a9fd287e311080d8c5793c73a35f09c3610d2f1d88106af35709da8a0237eb0f204373509d4b868c5e2f87f82090d25bab8f64b485f851900f60a02be4c426ffa2d63230938797798824ee265dfb9745c03cb72ef95f5dc5a07067f61b702d9babeaf6b08d6d1918dec8eb73461eb10beb0d940d12381accbfd1509906b58b1f304cdd95691ae1ccf1371923ec917e51b73ed152ff80579696866c857c17e692f6409f4a924c55f7d21cbd11b905bc7cbd136153597513de867392cb25cc67ff61d50bb7aa660b0aa7d8caf1dc592e9922bcea8d767d2489902746d7f9093e276abc5005b26684dab8637bd39494d2c77f73872ea99731c968ddca0b2035ab6b2a2b25bc202fa6a19d8426d522cf314b221b884dc2f2f21a6682d15870ff5c0f9f63dd4d0e5b96a86cf6e527f9e96aeb3e16e63653767b29d5921a145bc550221dacd5e165246193d47ba0018e22edfa296a973a1a9b9a1b31ca005bd862623d4b938c3282342f03c81261edd18d99bb0eb1410913bcb8185f671475ea7807139542af6534db89a6485274ff7fa057c7c3d1d22f7d6c93a6bb7e162f67e41fa437558b75510addb854f93ddb81e47ff0b8d3f48635b7affe1113cdab3c40ebb95554d27b994e9301c1adb68e9ddc345672faeacac3254ba70db936e508c96258c07414369f3ac1cf976d677efec2a368e67f7ed1b2d349a3092e67b5e177763d06b8b71a3b0e90807750ee1e0ec54baa04dfe9d1626180795ffd6aff481101272a34a742f1c0822a4c8d0812972f181925833d76b883ae3d3f1608cdf0ae370441e2e2fe489234e0f944f7b681d69caa1a8f3dae35202e740d18e53483cf68a22ff2807fd572252645f00dcd166048c32ca1018b8a494de28ff0c1179b8b50daff2bc24fcabc0a3ad6ae440cdde3d49bdce4bc89d5fc258dd724f511a09fee470b9ebdab93096ea8655eda19299ea4437bb2355d31c07fb07b04149c613f8aca56f90a7f464f9da209c1d0dc08a57970a01d04b2acf826bfec79a7ee3f9831d54017a878cc1676667382c579aec508300c745f8fc8cb775f3b731655dc0796dbe5aa62380e092ab6ad477be0261f6b8254dc45256c075b0ca5fd990d89c5013b559757e0e10d664c71a892c3672f0f7238d879739698abaf974b5ba606eff9f6874bf4ea75bdaaf4fc7d4468c9eed827c3a6cea01bf7ba57fd70ea38d4bba8581c18f6a06d68236da45d764c13ee586886501c0b61d60d97717a13eb32a7e2f9d7966476e7f14b56b97cd118c280f4096d147dd1ff6af88d6f04d060bd2c8837a63e1629e4635d4f2b421b31784710670f24daa9e65bf712aa3fb0e264e425531a92e8ecb95317255717a20f1ed679ac23afeb4fa6e187a89b2a37a7a0af41feba53f3ba300dc664b5007df4debf26a97a39e3a0138316f21890a2d2a2c1a8ef9b96b00f18a623d6cb7506ce56f27f0f11d91d5b0b7a7a081aeeb212b01d437092e4f5271b48d2409a06242ba3f8e20a819a6aa7e0a4af5970d2c51a47fb7bc7ad9c011a0118e7a0da6cee54d711b10a0f22f210446452c22683317a2da6730d00186cf94d15df317c5f9542a2e80f67398451f7a100a8357217b0a0e7b3818c1bd6fe675cb0ff39450d3a2d7b5f01dc5cdbe63b5e22d98db6c6f696114ba26c05184676b2e503f9c785ac0e310b2ffd2ee5bbc41b94657b274e5099bbe30b2f0ed3d16a5339ad12fb0768d6141bd73dc488bae5800743d665c8736dea161552c5676e804b4fc410d7e1ceae4fa1be9c92304e22769868eeb35e402c4ef8173a02472047632326e6b38ced3edd76c793e0f5000b715c13b1a1c469aa586edb15763498416d3a1379f6080b9d13d1f3df8cb0d23a8b95fe3037c84cc201057d5e4ce7edd2cdd178f81f870834d744661217a7bf797826fb6b1fffc57d272e74cc52be7ffae9287788b3d2c295a1e90e1ca88007199b6e50c3c7cbd78a54f81c5aa66ad9e6066a710e1b8a72eab214b4e9569e22b48817bb20926c0061de3f457c56a64968691b183844a84278b7330b0def953333cca6488a9b25e64f3bb1cd9232e090f01d075e3f739adffc3c7e922cce8a86ad970bdd833bbf35fb31a7dc3cc30cb442f3e804e328c1270ab1c6ec7bb84b66f93db76dfc164e16db9b3cdb99ddf0c1f8a28912dd4eae70b6a1850bc3c262641e97ee6630ec1441582fe1837717e50eac1a957a223b2da7cdd933cc487fdd1974742458d5c583976d386810211336b6e1fad336776ed2532f267a164c83899a36f45cdc3eb66e7c8227c7c9a0673bd3f1a328d9ab9a13dd3d2feff74f1068a04a6b2a27fe41cdd320fe4e46e5dd1139d232023957b524d2feb0b00f895db0d4a2d41d0f11365446f5f11221519d957344f81c28caae900b84f983478e4daaf9f5af7f6d06f6999f2b11f766ed8977df61bd9f7bef6cde7c95b7a67d295625ff1fc60f54e6f8a1bcb7b2ab2c1ea3b1ad5250f5c04bc8840ff0093cb93a5da917af759cb7f85022d5947d4f6a94e9e638ff9a78500b1ed6ccb8bf69bc0432eef7854ab1dc77790bd5e28b8722e331f491b74eae9c5c446a8b36845132f1ea38ec3dc4f29943964204e26ec49665e11b98d25a24a08be7f8c447e284386faf1ed443f508ca8ee1fa1974e081113d2afde3359bfcd0f6188e79224a3982a2b0db831593ad9b1b0247fdb162a226bf4943c4d822fa7285eab9bbdf07566af4126f7b06cb2843f5b50f5b80d90a94c5c6799ad420d81c9d216c172221facdd0d3d50ba8a7933143c0a51c7b5f7ba2bd2cc65eab60f03b9e561e67160d0fde22c312973489cea4b72628e96eee8199312a9759584deef2bf5022e741a8b8802399ddf77b977e31dd3e88c9682a1dc1be371e2e594c73a7c4e801d5bce1c494295c3908f57c9873073173a1e4b02fe65c4308b180f41776f27d8c1fd08f681a17b13189e3b22236c7a31c8859655310abbd60f6eab8a9189a80e178271337b5dac06daf17cdfe814fcfa7069be37c9815121955be2c1a2d8c37bbf565353811bb6aa725382933ce590f9e4e5c23782d95ecf347a0782e4426aa7be3c155ab986963149b1a3b2b9260c849963896aef4d566bc288564c450159e510c6b33baa635102f45d93b4e725b78d0a91f5ce4d2ea105ff720852afe40f9464213333a97741f362719259ff64697e702122b023445c59cee9ae6934ed8bab73369d05b2d0b11780d50a83c80c5f0131fb3390d02d75c95a4a1dd65f2089b53f534c9efdea5ae0aa94b9d32330cd04eb7a485869b893a179f8367a200b2405ac0416056863e191fb9af4b9abdbb7847a4fdf265f8d8dc85553ea3bd3c547553b5c08cea3b1cc0309ba0f2291d3b360ea450767fb6eb65a3aeb7a139735ec13b4d14aa2648a46a8439f3a39845b23213c59d9ade0166f8ce9231f0476051303a31da845810995ebf39b19e624064a792500b72fda06a208994f3f73a63a13e80802cba87d8d506c34f1c13ffc6ca358f3153bb900d22045fe548365441e08193d208a0e7226e952fbb72325ddb9f3a070ee7dbec3930ea3572c8846f34f5b6d5dcf163f2bda10d5975158adc307619f4fd991b73b4f75cfa4d28ac58c2d88a43cf23670005c1c658c162025b901106219e408bf7d81c526537c181d46bd1176cfb350e14fc3fa91cb846b0058923f9e87bd4c8327f7f2ab9888965b66b9dda28b7e8e8f7038a19c032b9a706421c598500e1ba4e9557b5b9464095c955d3eb3795ff49c7d96a5f52fba97ad7a71d37436cdc9c2ffc92ff2fe54d7a5d38c545a15c67171bd9ec10196ce327841cbe3b1d650b39da83eb8a223c8f539c066742bc6ab4e20e410acaf8a62e8b89ddc07855c44c94136e80da0f6b423c449e015d4f356df3ebc9a30a1534857c98f96154e6ebef48e46840ff2a1833772a31a4363735c6d6392610556494dd8a78ef0fb7d4b6d47cf4d6d450c31d2e261110384ab85a9b7ad6d3fc270e426eaf04cbbb5aa855715c6d829b2bd073d7009ba0a77387632f0d18c7824f9dac48c1cd74576b4fce899df454256a940dc583d8bc1392f8382691d5eaf786293aa2ad25c91a044748a84a9f722ee3533e743b6fd4923a313f111258755c3cdf97d8037c815737cbbcd63d261b05c5bc2bd64764ed5e1d970296a0fe6bd20d3e3b2b436f19005cfb4ff1b3403002954dbf23e025b77a59808105056f5a3114fa50e14143bf57d9fbd24bbe0864ffcefa35819dc84d8c41da08731fde6c370d76b4fecfbe06101f58dbc520711e852332f862e2c01a864ad42e724895f69feea17cbc3c19a033db1c789e8dbb7d0e397e3828450134bec9fd1f55173529978593a1ecf7081b81cb70baf026f8bed6a549c1c271d827dd321cbd06abee7f5e77dd7f70933ad09d04899af31d0ede1303a9ca486523c10b1b3c66a6bf034d4365891384b091d6289da61dc761e234fc75634e1d29a665011541197ef614ccb93d5447544d4f82bfd3caf96faad178d6b14faf15a258c3172e4a73df8067fd42058672d04aa03f6bfe7d2616aa42bc4226be1cf25bad29fb6e07c1d3d047b1c573a38be8b9a50d5f1af7798c4a49f7e95ba175c0f7dbb6e581e4b39d822d3cac036aeead3b55a9ece479cb847eb2089dfdf4ff2cb2a93f506e19e1d4481d112fcca3029f3d8eef24400a1628e64fe005c57760c4fe58d76e5912e3c9f4d1a6ca0ff841dc1a2051a207ef4859e772e678cb5a24500047e1a5c09e41f499b8e603056335695c0d36e6e1490c72f67da06a71b8a50d9eb980cf9e6d1e5e15ae94d9b3f1e84f1d40694040c334df1306c46711e4d3922ef3b3589bd13a31475d6a59796aeb8869d3df52a47a5674ff9f6ef70e410054fe312ba36882e1e5fd7fdd65fbb3387ca324c6fd37ae64f378150ec05423a7e56bf7a03aba5794778671439277a394ab6044db3fe538c6a9cc21c0dd988f0d455831cfb31857c1f315f39af7a1681db5ba124a770ffab884f770a7939c09f0d81d0211a0424d7d06c249bd5d3cfa8b801941a04b506895aae8431e2258311607aa7c3ad68516c6fbebdbacadf9bbf5eefa1215d268bd102769ec220a3b77d1928c2cb015c5e051be437cc7fa5aa340bc136250e39e488da89269db0717b2411762627fc39e5927f4ef5fdb7372b2d7dd93494d4a9fecbe6f3c1191b1edace88eb1091372bdf820394d7293c791b9167e50616656b3cad56ac4b1048178c7886ed6a22dd51506919294795dbc42a85640fc6de2382b722932eccc7d1b51675db5545a655d3c72b5dcc441d031fba78da007dca07bca35c23e5d7701bb46f25106a2c4ddd2db7e5546169f1ffb9386fb014ee7c546967f407280690310c2ae2f1904ff4e7dbc8eca2a62e8013e6aaec4c7e1907aae152aa003b7306840e250bc42556dd00df9feadf09b9f31a1e97970fb9bee0ca7d25f0c60df82580604d234de009b8258204d415e9eb460548ba6a0f30489ccd4c04d8b44279170fca7d2ff176d73d06480c4ca05daa0d262a6d61227c7c9eac0da4f05c454fd9eedec5193793519388ef289a8c720cb50702ab5a0f7172eb6457daf58aed52d997912af6b3cd828f96f6120ceccab320c8d1691ef718492974315a23774facfc1ec44006e7e62af05c6aa06e593315151976427c630c903b552ada2e65e5b7121405a4a453b36ab43b6e65e6af033fb8463abe9c95b5547f82b33f8a073d6546c73e0deb3e40066c56f00e0f38a06c8338aa02e9d6a9b1a65587b43973a871e0660184ed0f92ecd7fed7d340037355dee7248c1bfa9ad5c2c2b5c86bc0409dcb9769f83ede5e265c7e6d55f3b51969523efa98af6af0ed19e8d96be591e74fb7ded68031a0fc6b5adee445354a353ded292222362e329adf18ae72dcc1554efca3c4c900d5be55eaaa99fdbe1cdc20dddc9660f1a5b9c9ccb356cf44eb85a4527faf40ab2d5b76aafffa178dfb5e5d8989c96a58e0497d53ce0084000b22314dc3f3a0899e17be2c33bb986d75f300c4f5fab9189659ebced0dc8ae5b4015dffa9e544ae75387c7cdbc7127becc358bf833b9b05f34bfd17f87490486e5bfb54ffea83d178ed6121da8b67ed5b748047fb0145459e69947e60048c8c404b9ba383d78237439c8b40b98c68c4a35da18e89f9b2bdd0b9302ea85f55c77de4e20b13cab05845b70b15071ab3e4a90561459763d49c77cdf3637da871bcb03844b151621ca3e2c14a12d1ec052f70bb0885d0dd612e3253b004c06075cb6c57396cb995c058dd5dfcdd0f0e89d927842861ec19338bdf59ff6f13cc80d58c5ac90f7b9eca81e5563bc5b0a61d0108aa590d9a11601cdba2af14444d0f70c4393d3e48a31fcd0a58fac7e8f42f25aa4b61727fac95e01c64809f5bf23a24f71209cb200a0d6de18645f371ef9dc93ade1baf0440863ea0341953939345edd0dd46947f34bde7043badf20f3fe4f805e89b292842a67dd598727bcc85e83ef96bcb67f9f3567150eae26c0dd3797a02720eaa72e463a9e6aa5915cef035299d44689a97b512872ffa17a0b3de933ab4cf4fe7c5f9f396b4f2dc30388012e027641440574b8c55b1993a43092c67e94beed0debfc827f6e79805e009ead939ca2cd3e7fb4b90af808471c9857b5f960d9d7127de4679db969a8e4de5daa5c37acb77d4dd49f9d53310876cd56813106dda7b62ebef782cdf47fc51123795d11765914a03e605d157608d366107f7a02e4017534a0b0ff974cb7a753176354c290d03be259bf20ae5de6a80732cc474351a6b53c47efabffbb4e9ff18c9bc6ba4ccc761122a1a135545dc5d776684daf0a226d2ce9f6b695761424781b29fb269c491acb8e511fc3074705b0bcd7c0270209ac63ffac3077cbcddbc01fb1aecfd34b8b482805c29457315f6c4e0189ffecc084b717a7ae669698052bb731723d1422d86c5570eead21a6fcf499ee455e7814ce0450c06f59a2dd001d424af978ed0c20f834778e3701a2a68fe3d7faf0874a99beb1380c1726f109388104d942fa4762f342312b5490a2a10dec0e7af07db8985f4d9376e24fe59daaac0f04120b65be9f083f233e98f0899148c3dc3f4ca896be3a61d8c285ae720321ac212b9a53d98b52721bc1219742fc71a5c8c1f12153b86ba4cc68094af4ee7e259bab13f97715f49100cdf17e586b07ce75195d4d9c3cfc60bf4c775e98d3abf69f506980d43b06e7a745f3a7a17f705ca493950041332ce148088a153f0651e3d158871b72bf79f7939d454775143608044ee90d684e25d51cf578209ddb42b9c1cb174530db307335738f1083d70a410eb0cc4f77a98c1a54ea0ce077930839cbdafb3c3305378a53a90a78e071a8a8534560bd9b5a7e0f9bd5be4e15dc1ffd0302994ec9425988486b7b617b5a8c4fba83736e89d6d6daab458bdbe0e1c888b7467c25ea7124cef4203f7b99a8fe4e85bcd3672f142ea0daca41ac4f6043612fb23865c95797f227fda0b0ec4433ee89f7cf978c7d2dca6da1cde34a157346aa13c7073cbc5a2ed5603cd49605711a44fbaabf8087634d8371d2e5632c77c8152443dab8dff1371c136e44a8ab6d8a316a820b1dec60c769373b0e1e310981bf0c7e2a22da52b231e8b0490d03e1c0e891463e1a8af9d2ff46dda3e374079de6c0c81724c821c351b251423b00a5658752744233548c0c146729e96f2c2e666505842c641085bcdf1c8b2d88f75c6fd52cf27cf975a21d406570eed0747666a0f9b101ae6a42520e3b2fdb6e6cf76647d627d2e5b2deb42f5aec2276d547e0ec76e21dbd06a73bc8f8e03680a14f2ba1180899ea5a47b4d7b02356f052ea5374d29654f09f65aec61dab949773607c458a8cd2cfeeea0996fa4ecc3fed4f8b50917c5e6d36752e1c2fa7b4b0f281f78492303b01acc7f2ebc618a3120c41ec40e018eba44e6f4fb98b34e1245015173c60473c7f332951f8dddc79c5a7653acb360817ae422b11ad17d33822974c8ed75bc805a5349b8c052c6e2313007035f75b565727108f01428642bb72193057e52f8408c9eae942900491e85cd1316155637533c389600cfc2f0975beb2b46b10bad969bc4ef7c3ddad967a31cbe72f08b221981419e894c60804b7ceea4bbd269812a7a5d720ce32c1a6925105d9656e212a55565546d86c359c4f910479f919f18ca70a15f882f0d6b38862835f4ec71f0d9c61dd1dd92c04fcefb883e45013ee1e1b2b804887a23365017e9affa19cf11c58a487e6be0ceb03887779ebbbf4242ad43a8e0677df41b077c0d712fb90e8ba617e3ab30924a0033b4b108936c46fc26edb429820e34b361b0bae89a47d26adb46f3f31892f234fae3268dc389bb5efe9b061795f64f50d7d17928721e504dbcd255e803925114300f15b5b1e8ad446f556b437d32555aa9172d52f9d31a8a71165be704844f4ffb4f4cd884862b800a269e32d9b8ce578cb31b401010f5567d8f8efe35467855e74721ead13b4bc8884acdb8a425c5713ecdd64970564018275d65d29ebeb51a3c117885f462f4fa6a286899e92c12d2ac6443552ed7481384fbba258d04aca8ce6f87c4ef832a1974553e6cc432a6f0819a7e2316ac0c2e43658a2b11130321ff17db0bc85da5bae802986a88a5c0b646be73c6b1bdf6aef6e0f483fac87ec652cda8eb034e107690b6cae89d8c0707dbbf81362a1e35a18e5a56f8e2ecd3bb8a258e8c977611e9522a339839b0c2444616c207bb752304430327fc041eac803d9ddca32077a4ac83d3be7d90cb66244e1ccf8a7eae9f5bc17cf1e7f2613b02485fa4462d219243e4d740d57e768551c3ce93671e8c051a28fd62e83abb12b0a1f9524f00fdc2ede35de0e7e8f35b8fe4b64fcb585150491da95802050ab0f5d479a41cc789707f44bdbb5dbaf75077af0b8fe34406ec6f5c4885fec73850bfe1a0abc8f3af51028141e243dcec8ced93d80daaa215370cee4ac69b3783959c348e338540b98840422c6ec0fc3355809e6e07675ad533bd49ebde72cf17594c75983ac0da85366ecb97439a9988062c5a6fe9b6a74b79196c3e3ccfa02288c1b04e6e6b0e5757945fecc70fdc4ac874347511d1ba356af1d0ff3a1728451730f16bf12780087d66c2882edc11549bac6e253c703237509a906abeaaeff3c60a84754037ffed5a41aad86f2ee673a99a76d1f7229ecedab2cff812afb1b102a98b2d5d9b2acae1ea39d4111732659e9b63caca888798dd8297e7006c42644283d2e48403fa3590a041fd60ffdc1034f7b75b750c0c1c4440894ebabeca7e5b2e7c5f492c2f8672f5de481e1d77de58854e4235feb7799b02851e25ebf3f7e2d1e83cadc696c32fa555f606e7aed0da1db38c6e58fd693beb11dfcd44d51b7d2ce250e250da6c09041a4a556c63714cfd891e8e8519e4651500a6fa8ff2df4afa86407e4a02243972c2bd6f092104e3a2b53d714ae225817850de4e8b8927c7da45b20239ede2d3106a09971f8987f6c048913a55148484ff87dcf5bf5463921c7a8f7ba2fa4a0c120c149888b3607ab873c52de5f27b80b8a00b706228aacbdeddc31180d65ca93210911e9b6a031d89b16755f70f4f148e4097fd791a997ba1661e0d3136d59d49ce2353aa738c18f80d04e9612c63a042f18c40caea6b14c8bd5dd51c93dacd14d286599c7481971513020e7b1d037cec061c34961a89dae8f372527973fbdecc5c740f910e1d575e64fc152a7274831556e062b896e318c8be6b22732953a4557448af42da9fe26cad87a935546d5c87399915f11c75d6975a08f7110342cb5e48b6b84dbb537a09cf9b1d13ce4700863ce777696fbda8b2e4fedd49fe2496f64c1d51caf11042b9913b2883ecfdd5602298b717e3c0a68bbb71b2cd033184f92ec6787236ff36824b76b222c84fbc09d20cdfc579a9e1a7cd885db29675c189e69154a343ea0a370bfca153289ac1596a6f8db49b83d1ceede8af46b33d6dda9e8fe2257341d92b219aeaa5b1525f1f69d04db34306ac7ff1796efbb2f531cdeb8386e6a92077d92e369b4383c6d6b8eeaeb568484baad5137ffcec8b507ff8b0f7adaa3e5a380b212458cfdaae41fe80d5dacf025faf01a4759d11a02bf627c9a9374aac5a1815661882cd39d150cd1aa59fc769ce8aadf5cf2b5c36972eb7e5c53680e34324056d5ff44ebcb4cdf94894b18bf5b242df51c287c803dc7d9dc4c175ce125d5afc6c366deb0d38aa448a03f0fa8a54d169c6b1f158cd5f12dcf64653b28fc12eef5ff12354041aa189ad9e53741432164f4d83cc847e9e2b082463d290304875ec6ea5faea4b0f68f3fe2967457a482ebe3f01c2e418d2aa9b9b60426d2a42f08787956d26d7376ce977d6d6a5057c763d1f43e0d2189044c2dc328bc926880161beeeb4b978b9cf0f3923c641e846848b1e8b82f18c2b82fb7056f30a1d6a5148b91306e367b44799aded81b4167273e9cf76be1b848c3115e9aa3e9fcc3d0ce770f9fcd1d7230a7ca58c9aecd0a3452827ee9da301ae3a6095b578f66e616459b6b09132e62756ba81e96638b2d83f7c8488758ba2bf5493b44d528421939c3bf3a74d4e93ba22858875b64ec0039fc25195b3bd80bb0182fc0ac0ce840f94c2116d02a178b0e0ee9318cb24a1cf15fc8d24a430247ee9c5398c11a79ffe8a564409a225d194c6a463e09313be812b399f49230f5a88bbd43856a27aa0f03f4fb7351496490b9b86ba9ed9c18c86145789b153eb1394a6bb38f049d488c4af67719608f0acb8b709dd416320c021898f88ff53323e024e97cbf07eabbbda56f361e30ab3d7668469f01f318f728b46826c1e708362c85f1399fae56d80e5000b02747b1bbaac00155167399ef9f02d2025d9c8d52a9f843b5f5267cd7c988b0056e3449a3cec7b251f2e9a10137cab62583510291feed27859b5bb85a00f24e4ff57f031c4c27006067319cecf502e06b018c0cc106e06f919ce65280643380ccf60789681d90cca62088e01d80cc367289f81b90cc6610083a139c830c0a9f66e7e4e0f2cae466d4a3859aad054d765e7f3dcffe89dd22e51480a18cebd4cf2c2b4685d9747d659cdcf67a2da9ec892160d8b0a722242beff74261a09c739c33a8d39d207d5ad73a627e03b6e0d8b5d10e172f1293c13ce735b5689e0b8e7e9438989d692681818c0681d29b1b0839c113bfd631cdedc2f4974e3a3520712c7f4cf92e2ca3392388825fcb698e45761dbe5f3c1cfbebc2e3eeee271017fd0a1370bbc35cf67aae4ee12ff830f4e0a759a78318a8848efa8ec0b4f45d084c19a3adda89d7f4351b889b9cb44e930ef456933a0136418b9482b14660e77abd3b20af07dd9d9daf639269c98241f7dbad3ee648ab66bccd9351ff61ef4001ff8ccee911dcfb67cae98305652d17b7844ba61624ff46deda5c0fa4b1c780e800c22bdbb5a23520b06ba3af157265a75e19b83ade6074f1bf0e7f393905b4f54ab76bb18ea55c881e73e01458ed48c5ff3c7336eb81a3d7af9c18d7ca38c067c858040b5494204c22003d4ce0969fc4d229f595fa9579980100ef56ccdc124e463240d473099f5495835a0426779f0724df514a191460194ecec2a246e51126fa1bf411a6a36934ee99c4202048275af2d5cdcea47a732d9c68406dcf7d2d1fc4967645821ee8f75a50c79c649266c981e5b3a7986cd2b915ad2b3d40b3284d4743b54df0085f19e416c9410d6822504ca0b1487d342ca617a22102ed16dfb798d4acc109e8632404513b63cb1d5a29c9125c03d14c174facdf8328b95cc3e0422368191c9ff2f2c9f5fce0beddd110170b0271acab9cbdd56fa9a8a0f8df4c39d17142ba366336a44587e71b12e504437a9b777622f42db8e59ed71ae642c9866c4877d5dc75bdffb3e34f37df57f2303e5d7de9c1a28c0b5c0b874c2de2d6cca696c391717e7db638419e5e628c91fe844c64bd78b952d44f2d95b084584f7c0b8b7442b9832ee9de0951fe493265b5e429e267b47cb89f5696d993a378672a336dfa284e3c9102b67e4e096bc5b343be621181bcfc6d3653a0da6b0f1486f20e1a755810bea31896d30c6f2271dde9344f5a785360596d205e827718c0de792745e903229d49f6f6e47f89bdfaafd451fd16b03633b2a9f919c9375239480e138af59f84795955e9c93f6e285111ecd68255a68f936ca5fd4285c64152c9b28b110571542efaf305b360a4c0081aac496249bf2dc8772c20d859efcb90a8261fd4bdc9900b2aaaa0d0a02f47f5be47a410039ac3e2e8178a54271d8e1a6154d781047d8c3536fe59f99c0cd1f20a3a4c77735e30f8cdab3af0c60acccda47f20f98eaa0f1a4fdd8ad3883d42ae8fa31e4df949e72c627a52ed3466d80f9b94e1921a6692f47f1ae07978cd58b9580942948366f5bbf013a603faf26a2aa164c6c50d44caa74501e3ab408403587eac1073c1a283aa117e224b91250eb1bfd3e63451b13d00564eb490c4439050e6b5ee44b870fac717427f0ea450f9ffe0fcb11faf49f508d2f4250a009208a343557c30ad4b04715b8f6d7b40fd8179b7ec6d04a29c5b7a4623ead05a73a0637b22af3e0ceb498f48f425c6f7aa45b7a0d66d204a98a66a3c411c5a57eef409452405b7a7ed90fb62cf4e06836998cb0124781ccbe031ad69b8761b5db20dd0413b18b7328a1b2a5e2d9ef5abb0fd04c9a511b23cb2d54e3939ada48a5e0a1b0abe9a7bd0bacbe9bfe75e1ddda2e12820b2a9f91634f4de0d577c115da91b852d475acbc92f17968c76ba3a3595e0953d0aa5b095301fb5cbf593aaecfa15d4f9b263264be19731c9c16bfd0085ad3b1b4f5d6d945db0d2711cf7a02d27a855ed67a8e9a7cdcd623467675d645fe2ee52e89293b07f6f6d6834d381b527f9cef564e362a953efa96ed8d9d0a6d6bc86786402d1a9bd6aef90cbdae3cd6c2e83fbd7fa1c8e0a9c70a6bbf041322c1294f31d16b78bd1fc3d2265ae0da3b989e463c0718aa62775420eb6a3a91eebc74ed313e3475538dbfae8b34e7325cd4c670bc72161ce831cd6fadc70a41c725a43dc78de2e6110c816f451e8fba51de2e01533ae7d13ab72b34323adab7c5d47de86a7ba17129c0685c8d91b9cec2a7cbb54b51903eaadeb0674132972ec91a1018325e900a7a10da3922d876414792666eb9a7492e1c2b209f8a07a8ad9824509dd121740a12905bf228f53793915be2481ff0edcda7a099f55d0c0040908dcf39b8ae50016a74ee721f36f7bacd1be6ce805cd121008c0980eeedf14e4bd11721d7bbb9fc4acf4b3061f8ba2af5c5afe3a7c172c7591941b90835e765b89e168ad46ac56130d1bd2abce25e09a102fb934b268c9a20290834fb1913056affeb103105b4988024fe9b192419f28222ab04f41a70fe073186959469180092d4a9564c009a6338f52b84e43ced4d85a837ef65b7539cc508c2ea31f187eeefd9e31bf5782ea37803c9c7242e93253d2d18d3fa769a96db0ca49c45ef90341346b8d94ffe2ee38ed3001781dead803ccd3a6e1c9d9765e22c76cca72485c4cd9fac46662e2d6799df6702b3daf35795978433ea663b2a755417e577fb07acdc830ae05e76d59b7da560828d121cfcee66caa13804a6d82520572d0d833443410025ba6d24f5eb87dfc0b5850708b72f6e5ba8b2049aa67ba1296effc0b00764b2c002f69da201cf22feedfd66683d00010cfa266d859a892f491cfee3b88115f8ca132bd5be1937e595539b6865a8ffbfb8918f4af51661c05d667da2c134d63c79332aa311bc2fa09d19023f2de08237d9c3605b455c18760c957dd9143edf99799cbf65385b1aad22db2c381fb05273d9a8f274699ff63c15327525b1c7f6ac47c14c1e3184967d393722e5d82eb6a2b90415a2e70eef73e43b48107dc82ba3fcf2b0f977cba6cc315bc33b2ce3f8e98a3b72f65b6a6e431433e04cd704e1ebf1593317e427c022534ea9854aaf15e8c2cdb287b646a1771e7cb4d6c25ca5e3a9989108bcef50ff42c8b46b6b584b097fe216dd7970a4f8cce0f9bb78b8b08cc1788e121dc67721bac1b03da0936610d9baacd067d08c87864eeed3d6208e453e45c8597e06ebc6f1f9a37a74b5afc80921ce1b0d51a32190712481ab31279c85ca2167c3b97e0d3320f7567be22ac2e4565da621222b770b3cd97124263466fab895b7a62ad8a96a36cc209df0be416f4ddc5affe95489f2cc9445162e1414a431bb58ff1410fd03e693913e1e4ec4b5a73eb92b94a670b2d3667854654d32782f822fee3864bb1f1d36e0365c42a64e9018a5cd610e8eea63941692575398b81517ef090ffb5e2a73421270705d944562006ed10e047629f9392069e47f01a856875994a48407c3b114c3c57a0f7985e3414268b435aa019effbe516ad6d213cf72eab247943d72234ad9362f92e8c6af7de8602f10cf93d8e18a2e746b53948e026c0979a22d9d476be6f8052c7a753bb619b9b3d30be848e9963007b7156464c8470e881e85ba1fefb7b4a3f21c342a43298cfe81e12aa675b5fbb7992245ffcc1dbf066e69f5bd7fe36ccaf6efc44c7e5c36fd4d887119bb5633c3808c6d25ec2fe942abded5115bfe410e03804cff66ac42d13bfe6ff7369aa4a1f81eff1b3cb59d0008777ae11f86f3d277dabde1568ae5f9d11b15f985c8d2042cc2f95d780cc6da468eb62592082bcc0203c0ef5f912e8019df476854752ded06ebfaced298c546ee9531f7ad1ce95ff33226fc36a31b722da2d8f53f401be22e1131634aa18c21257322d5a48867be0d9f278d8bb1744671cedd43d3af7cc506828459d882b75f28447ab7cf82cd49870cf78ae21b812e051ef4c1a3a9d3b0eb8bd81cde7c3a0505377546ef90f65fe704e2393ae0235853a21b7b42eb45ab416b36e4f26617749a97d10b10515ad91aa61542379d061a9c96fce8dbcff9b7e037c19cf223226cd9c7d0200991fca48e4597029d9500766a913ea1a7de9189caa045e4f84027313c328ee8b081d6859934b2bff1f1d1694f6afc1f0a05d6db910acfc4efde9279e6e29408be8af5b3ca9a1a31fa327ad7df5dd739581aebbbeec10a3afa624535e5cd93b79eec6b2bc12427548cf3dceb39ec63f7c6864e5cf4b188da73c03a303a722896cae090a0c9af810d72516edecc679fe3640138cabf3905e6d49184561afcea60f4727b8e16a728904142f58f3909c3845d5d891c1f3080d908cacf57e1b310d45bbcf7a5184a83260488f2d93262aa9a1a0d0955b00ec194906f192f56185aa3085df2b842e874b78ce3bd460b91493b7785593c2d345c22fee0134dcae90fada905484e659b9ec173e96b4cedeaccbe2fceef4c5d20debb736abae1bc8877e7f82f2f47029ec2cde29dd403a990e042430627d8a45e673e54bf31a6e7bb3f88e8c8f679f332ddfdcdac9090516cf0a3850d5136bd2dd74f72f0bce6fa8fb62c594fcf0a9f2b9bd8dd953bb2b195a9bc27d9dbcc6413527bb4e697985699a47a00a73e4c10c24b7b5dab9fe42a493b26f7f31e5691cf3f8374c0200d941cf20bce54eb1b2bcaeaec38ebbbbc5913e99b4c5a9e00326b14eeeb4bc00581cb16a548989a169e7e139a52b00a9c07f085fca4e4466bb3adf23fa9a9ec355aa2d525462187ff3b250cb8606cdbb324fc2a96dfcc555af09807418aef9461bde2f096cf1caa6ae1197d2d14f8dd8b1d2f193e3e3870c48ecc29b833caef20a635ded76e877a186f2a5b807655b3e383e1d02048e5ac39684864292d906f2818ec323a783de4fb2a553e7121120c52376051670395129d864619523fd3db98bc706995cb821cd345288858590421d50b4071d016f080e00d52fbb0766a0323e71f13bda65a3188c3cb8b099c00cd4909fe0d8581a57e37f680c4a2b4662844b13fa98c0c51ff6d75df8fc37d1d83ad584f45f6eec831a8d7c01a655f24d2ec0655f67d50a90aacb32c17246ea4a38cf9813fbd8eb536a6de91b606fae800d997a2e2f7a4e2795900f1f580ecc3122bb6a0c3e65028ba053af0def9459fa3de413df140141794adb086b77fd0ba3d795739d72f5c0abf485dcefb18a722aaa2fa46c70c2fe0d4b8e75689018776e48462c900e3c33c7164a2cb3125746a8917292f947655a9f9f793221e086b09f99fdbe72d27ec193ad9b3d8908c6aa9fbf3db8179848c912519a6c5fe818821be0e1d94731952b93f5dcea0ce9587ea19521522f8df49ad3a74b656968b30588336679e14dbc3e1985704fe3c4202e8769a12753e62a215efb10ce75348cb4e2bc9ffa2eb988802f5ab8218b2c92211bd58d8fe0d2424a6dcf4e2cd72b36c96a7e75ade7e55c869175db8aae85e4059a7589dd487cc8916c29927cc1acb28ff71086108c03345aa916be4b22317f2df1e2e94a91c95adfc2836a39b2636fb13981ebe38b5f85f73109c09cc3fdf4a0e1f7ed01e7b0772076d9b6bacef6010b3b906831ce85650df2b044dc23f384460bfb338c428e3a0a002210d1ee48dab1028bd393160d1fd0904a80f5917fe66e5f6f803f4c5cb340f7cd500b32d431e683836e5359c215c5550cb2a364a6cff5e501fae4137d265c63ac3a49d133cffd238acc2d33997cfb1491cc57006205bd5711d6c6962ca7efbfd50250ab5208e7668625ae592e482f90b331a23ee8690aeb4a0e84b652b820bcc3290cde2a3a42abad0b5737001485e263c22f84bb1d891e178a880d30b91926167b304a0f0347624e731f46b4f3a40fda79d6d29887f703f69d923d03a193ece1d89330d43cf55f91c9955338d38eaa12b7c31233bc1d56d222e41321ffe84ead4e2e92c1774bf42c74072df7ce494846639d416050a353984289a2bca39407f71b822e332bc182b420ba0746b280351e1d87aa68d2cf727d464cd9463421488463044ef41d6b69b6e9283c8ca1545a23c28dbacae4c1a4dcdec4ba4fb05b044b8d38236f706c98b3157f2fe0d6388b28b0369276014862161ae844994bb4b226c587c136acf0de518964d0ce23f69ba927d42d47ce3bd0d2ce118a2e5c64d587cdbf8f4cd1f969c07baef2ccc1ab815bdcdcae2e25a711742fe504201b4e25598816d0bea9fd9697e7380c83c46db44cdd3d60a64aa8a63025109753e771c25cd95695bf0093708732d6ce261757a89c73b93e732c9514ad3de5794ec9833c267d821803963422bd77fe112f6d48cd5eb80424c8422cd34c088ee20d0068b8ca933e5165ad7e248c74276c399eb2fa45508287834c344c15c5ab03fd86a17118349f4406cd7f2e0c27773a84364f8eaf12bf6a0a0c87f86681a283559426eeaf7f0bf8d88a10a5576ebbdce01e092eb9e20ce659c083111726ad937c640b6cf541b8d7bde7e27e3f6317f1cb7415bb1ed201f23abe936ca839c2a793e4cfb2af645ca8763bf85420018bb461849a7d20dff2fcbd0b0cf1e3b667a0893c2ba479c036b3b63c696e228a652a3dfdd837c78ccba605d5ab1a4af842b1dcf6b7fa028bf4d2d0ef12e29739093a97342c1ac0752b3f13d3aca5ddb2103d9f888700e6dd7f82d923bf0877d10cf07e1770358a11d844cfd00d65309bb34c7f9f6e05a198217b4e3d01232b75b7e30fec5b706afcbb29ca94eea57e5a0614f4aba658d7eb37916b90ef3482acbb834e29be525e8ab600cc69e86c197fdffcd6f466d9517feb1270d9e3d9c55a4f263b9ca276494a4c5e8169a2be67187ae65a8b81cda62a32f25cffabf7350e6be728c610794e7c571964470e45bf11ccf6873294c964b1a06ca55769b9e9ae72d077411f4f61a0f8cc8241152fb8b38187128492336062a4431dce1c5453d1c3a346395e30c8c541c6039de5e7f1522c98f35aaa9eed875560e628c97caf166fa1f36e0919a1975f8bc17e2ca2cf6f6eaf23cec65d90a729ffb9e6c565cdce39886a0553818c59262a8a98f93bc291964b75ef5a150480323c8e6cd5f670345807ed5670b873e8649754273ac33f5845b3c5b9b5a304d5f616bc50510afbe4fd78092c406cbb931a14069e98869f62e38461386e70eca19c0b791e369e1712105c0e2976f5631bf942d1bd89be2c7842a37454f15584e73d0cab16ab9288833bf07bef98a39bc9f22c27eaa883052c7cfa6e12be36287c3b2bce33f591641ec159043345f5f560721408eb83ad45c96579ba83989c9c4bed45c0e3e10d6502615b1aee0ee6462512fb091a570007f06db2140d2e5aa905400e1438a5aff99854bd75e3933129fcf034131667b67da776ba58e7aca0df06392a55ab66f8c8c28579fc98c739e6bc9d02b93e96da7393e6e71805694a71f08bd22caa0c77548d698ac144bb3da668d342329e3111d9a84f9421a76c7e1d1ba42991b9f1ea61e965fd2937d4ea46a97ca2b0fc8edfb3d835b9e7904747fd8302c6dc310c5b353f09f9554e474a9bce6e059c254303ec5e8d41343cce5dab3cf010499109698c334564809d90de7200d9f4a44b35dd98b2348602fdca44d05e9b8948dea19e23baf0971b242090cb08190f611c85dca5c4b30655a263ffef259136a3cf707064d0d0225b8f9f08cc14c3278de1a23c4c9611a048a781cd8ecc654ce62b122c957c92f38c27c085b2c096b3071e9d3e7f7c68cf1f245eb09303d19e2c6564a169a99e9c9757bb2ae8090849f4cf073f4f17c843bc65ed2acc902a572b4025a8e92eaea83ff9a241f3efe677907385b8825745aeb1cc3a2e51315597a0c50395cf5f6e656e713456fed47eee2fe71a877b326299421264abc263f160162c31625ba00118546c21af1d606b73424441c61ab1ee7d2b0ac8e0547eb5e13aa8a85a18e396d6cdc368c7914a4f896c2541d76037e39ca0d1eabf496e5f85cff008f8bafa26685bac4e214b425536f8c5b4b3107a12c0a7ccc06017d0e4c914822a8153435f53b3439e3420add1b0a110e13a27d16545469190275dde8a920b78582dd5d439a34f9409d8752724f9a4a65d2aef53228d2d3221e65ae0f0c5e750030ecaea99ee1c2c131b848dae1013753bd317183b747f2d0e685cb17371bb7ab9c4d52b04a08a6140771d2dfb82ce348e2837bfce2bee2e3cba3374b892157c0e0394c6a0363ab10103557415eff88738cd0a64b8f9226d0420d450df05be4bc5b01b3a7d67d3dd3f0505b7c94a825510f1ebc48c51b3016e5b8ea77f172a887c09f1a32764653751e830b729a3e0d6ed3512a024cfcdb07a25f49653ea7056edbd421443e46d7b9dad8b0d3f5eb3c39752533802874cba1556e643efe6034528de9a0720c79dcd1a9760524dcd364e5b7b5f5d49eb1cb548015d4ce7d7f7747db9f43ce86ae8ead8244a7dba1f0f70142d01b8d6dcf67f7ffc91dc9bed1d143621dc0c29514aab1091d40eb2d191298654928c3dc3c7e45f2d2298a56e4ff5189a6996e7b2ac29182e8a1dcbd50980d6c5103d744dd7b0945917a53e8a00ef32f0c933b833d8bf15c20927dac930eca1cc33249ce32aea247efe025838523e7e6869035bd85ec60f5405c997d72647474d571486418097d45aeedb56c5f5086d939ed1fe63f69cc25b0a64a85c51a15aa7ff3d8d7c1b85231dfe6fe4a342e729f8afcc8e01a4e8e16c664fb3101ce7ce7791ab6a110afc24f2694cee743f28582dac8ce2e7161c8fcb48a00106d860d010068382282086f7fc31626bc39fcaff26052a5eb8cd525c87677d9823d403b10c9b771cb0bad6753971521bd4938963ad16902120861b453d79abad2105587fad5b177f8d6367561338050b15736988f6dabc39b9f153cbfb181627937122138b1bc8986758fba6d1518c8a34662d424f7d3d7d7be7198f419098f4a110af1e68a1edbe7c4b95f14b035e7ee5313da7ac1fe0202e71eb56e96e648f78e6af2436e2897c0cd3d8c8b588dcac2321143078d8bf2943500892e2aeedc8b45ac9e980771293e42d338ec2d82ff6c714d4ae6c8c8a7baf5def2676c480b0237c0585ea2908bb8bf8246721f5e07a84158ee742f6a1904b3fb72210859a7389648e01e29707eb9525ebf6e274a62b8f7e897e758dbe8826282451a0899739e73cca8d14547f0f4aae942f0ff8cb3353b0df195f2c2fe3bfbf83b11a048c7d933ba5a73ea6fecc558feafd84b9e42e9efdfedc5fd9cf189b15faab7da3878708894de06ef5f69c60265da3c23c504f91fefd22402cf886fd3bc515727d42f75c1f66c4a99a239ff6c2eff3266096bbfb20803fedb408e9b01ba52a4289a11b7cce97364cf9a12e6f5b7e1cea08884752bc57dd492681c5903581aef716c09a3d8202bdcc13913587f80bbf20dd1b29c6157f71406fe7ecf8f68179fbd20fe9aed93403a0d30d44cf5c5c52f12c5baae6956dd40e28fc73b243308978f12e3e74f2f2b37026ef935a7fbe0b0b5a86aabd72a2091d703d78b38032839eff46b360c6cf11b4f679316ed33efe38f17a68e3eae971759e0c3755e77c39c6edb36193c2a9feadc96a926bf2dd5d2ae5ece91f4f9ab3c0c667af98e2d420d00ff9f4556e779750765d1b9131c33318838c40a23ab10707a54d745993d046a850af006a358c5ed0b722afb360c0dd2c4a99674f655847c3a5e5abe6a6d3abeeac99ba98dde30233de2a616e4e435172fa739f5d92f4586a391aed9877cfd297087e6e18a9a3bfb049e640e35013363e954611d529038c3bb39c618c6d641dc5c4a32d90b439e6aa1d82a1383c7867414bc3b787103b44bc17acc3dd61f6a625344fce065cabf227670f52b4ea829f1d53adaf117e43271d74c88efb348ef0cae7f75051cb7f175cb64188a871567a9874f14151748d95a2f0c8b9030c54b96bed4bd65efa4a3a6a7efabbae73c013f78f5ed9d7c8fd71ded2d45a37871644cd383ce18e03dd557db85b12994166c0bc01b1e863e1fbf60018f6713fc02e0a1a297dc31e7b6f9b2bede91ab76f3ab4b5030097b7c7730c9d2d4922b556d98793eeb72e40e02d23324679ea7c29074a14c58db605a2819cdb548d12ceec1e3d973a78a9b5a390dbcaa1843b5002345e73b4cc1ac46798aa0b849e7a0bdf760d5337125bc75dd136d987599a641cb0c37e50ca1ee0efa4851495b51723b40b9ca5a003ca308ea119ccd11fe8fe0841124fcaf374cd6c167678884894f30bd751896d695cbc4957684463d63a1a9c13d47b88ddc68903286df073ba8ac208a999f5f633063c5f40397bd4b6e7fe9ad11d0e880e9830f6af446376ee36ce4a6956b7eb4f403124fd059f66d4a6cb3a8b77bc3d923c894db9696582d6e094049a604d75a91be61c5499cd2cab33be5b1c9bd99a5eb7e346bba1a2b7326991987f0bdc8baac318fafbe85e2bae40821ab3b9d60ed0c4a5c1f257312b5ba1fef9e82cd2220fbc55db03c9dbefff84c2ddc60273418f911adb14bcc7e39c28362e13c3ee4e7bd172eb13ac0685074d9ba4ce4e53fb3acbd0d10d858943b3edc44cb498a4e9494e48b911cd6afb8db496bf127b223abb4d7a80f89808c4061e3e8bb0b61b18daec168ead001ec98faa1808c5168042729ea91eea36e2cac9173bc5c07b19c003c60a58a2ecd3195218153d46a21b7b0db7970422c5192b8a749ea8169b1dd0eb4ed112ec60a2a663ea72260d03051e8c210cfdc44c6c00610e04a5a519557a98a38274e3f49de4b9371b51686617cab338848ba9b12c0192c56a8dd6a34ff934889398508b5322e7391a89e601590e787c36a8d236728b0bce163e4681aac58c3851e297190599c7dc76e7ed458040cbb049a9703b15620dc19a5038578d8c21c77ae909ea1d2d260b7da49e4f8d7bc7bda355d9fbd84af2803777d842e9a7920178025464a4101045dbf2e827fa06f0bf7fbd39757da87920a368ccdd82c21841049c8de726fb9a59432c914c10ad50a260b25e816544f6dd75fce75d6ddfeae0bb0639cf30caaf7aaeb932648746183293f5560f09335f77bd0626666b6e64c229b709b3ca77cd7657174b466305e299e2df18a2c59a34e710a9356aa24522d8d4c222d2342754e5b3027c6e5e2d232676ec498b2542a170903f3326346842f62e1c4a862386b7156f98af1bac8485359bce269365257ac6636e310ea9c5108d5f9b462ce8e565c99cdcc1459d4ae0c3e2366a6c84642f31991cd67c414254c138d2aa964ca6215d7746240b9aab81ee9948433c52054e7910a6d04eb746288711291b29fe7539d7311b6f296572dc7f2763e9166ad9345cb9137c61863b4ac9dc8a7892acd182347cbbaeedc64895354e7f3d1a09f1113680a96b93a6518eaaa502c1707857362462850f532d864ecb8b7ac2bd187ea7cb3cf3530aec1f25761be259b4d63a572e876d7ed76e4e0fec5eb4e869d3106b064b4254b4dc6315fe406f098568c31c618637c31c6f898638c313ebefcb2a2c5bded5816cce11b63b4e2b5a4b45cba931d235b1ead18639c71da18ad68c56839316413f8846a71296e52215bd677bc0f3e98bd6839dcd072277db39c99a74ba9b41c8e3070c69cdfecc4d852578c31d6d2c9d58fdb9c995d8130507e0e2184104238bb5f8c2c9b8672e6b41c793723ee208492dff3f8a285bd62667efc98fbd94dc2eba77468a5bccf4d937d7ceebdf76e7cd11f3f8430fdde740d193e99b18d5884afff0452248ad76814b15a236d12c351bcd12b4a825909cacad2926a970c86d4b2468d9756590b73ef0c00d0b021036005c04e0003c8e2cc6a76572eb54911086db291d2feb9bb40a8ce3129aa6af4cf9d6429911aa3d945332dc3e0cba0f69cef96f5c9c4962563eddd4dc9122ff46c1127f4d1515a4e74e8104668df4bbbcd52353d51034bca7442b1b4a45c4e59f44175ee461457cb09dea0baa89871bc85a2a258665a6213d5f94b8bc6e3ca61d3ab7e45a89dd57acaea29aba78cefdbd8ca4f9e42b58a101b2933cc8f1f3357769e93e774f6927f91e9b445cb617f4ef5c3413b5b4a2f3b5105638a9b66002f001b1900de25a3aa8c35bedb90f762139fa8ceb799e7ec07d5f94bd62a0c9b716f708071f08d3e607b6f06806dc73d3b519d5bc6c17e6d64015065f16143786d7cbf5309b19cfe838ed2681a0e06aa7ea8e4c37fd17aee32e6a6f12dfa8becd64b7e4f6964a9e7e8db73a9fa017b7ae2c367ed87ebe9f918df163f3afcf89a7be576d8676839fc9a46d7c06ce6b1093e9d6ab8bd441bcfb39b1746334d3422b5a4eabfbbedfc63a00750a14a7f8e31be76d8ab9691e1c3fb1a07344217dd451761a09477f3e8ac45802d0ba594525e9952caebbdf7de7befbd27af1c9d79bc2b69c56bdef4aa62eeb41cea37b01ae28df6e7379a26de69c51f2264a10c6ca58b9f3835a7695777776b976ba8fd78a9a16372668e199e1b2de5e3c5b4fbb4b3af6e1f4eca9de955d770735dde573be796bc397ad53333f0daf8c1bea09334a29b4813ddcd5ff4de1bf26f1b6283c8b34b64a7a892ea4844af3b2d7f76597722b9e9a59c6453feac7b93934aeec2827216929b32bf3c13f9b39a7391c851a4ea978bec364402d1fc5d958f7cfae55424a2bea55ea41add2cf3217f7976f3441af537fdb9e6acfd38e2afc3cb8b80e7a74824ba996b22671fee4b2e72cd6912709904dc9732af974651b31ba4e4a2ab53727a7550be13b3bb13bf8472762e429d5cc4e22e17f68ae5fac9590b42f2774d244d2391441949e49ae96e28a0327b24ed8ab2bb9d7ce73d29752239c935edf4bcc7e0cb45d672fa2a6bd9654dd39c66a967b6c53b63d64a9574abe6a3d6bcc56a1a5f73b24fd12572d644cee774116b23cf34ed6e355ef3e7f5ddad060d1a3366c0c0a8542f2f2e2ea9544b0b0b0b0a753a994ca5128954eb682412695a96518a61d76bd7bfd2ad4eb2cc38eadde66b9bf59ab3c47f6e62b99b7ccd4f8eb2cc384e779326120e528d34d535e7ccd99fd7bb51e79df822cfec36e4a98fac0eee2fbfae8e0888fb21724de317892ce6739b2e029ed7fca2227f56e4341e9ab55157f2d3b79bdfd8e9dd893f7de38de7a79bd6f29b67599e26439e71dae70f06ea3932e47720100794514619ef50ef50cfa58a76d8ddddddddddddddddedf03a79fe6ade9defc4f00a2ca420050b290865d706bfdf7b37cde31ccd73ce39e7fd9c73aedb75cb868f88da5ee183336f09ae2e0b3565a3693687a957f36adf0dde59b3786b36bd69babad72da05108f055d9c2bb1781aa737ede4c1807f4ed3984d2c9a1789d908361442add64be2840d0a09b74430b5a16aca15876d15897e9e557430d36f22a3ab417af22c7449f2f1f7dd36ae0558cabe80de3354713aba597676f4e59333a764f04af631cfd117684d08944ccf3664f2c50b6b1614c5ff3ccc8a606215cc33559c979a84e1df19d484154139168381db352f803f491f3c21ce3b89cb59c2979e4855dd82bed4527d66d1d331ec2f8e51dd88ee9247367a1109885463899f60777901aec693a82cc3e8e816e693f26bb1631ce43414bcbeaccbed7fea4199c4cbba5bd2b38b8124fd3a53f8703ae89434faa441185ac8857b478d9738467b9826ffea9c2b3b3115292cab4f469670ffb7741264a604e5f36edfcccbe2a6fc87af823e547a15773f9c8c8ac56eea954149a570bf87ae2dac1f795c43583ef0b8b1f2904f462dae71427d353985c41abd7eeae20213309cb029a22658a25b369e367f6094dcdc90bbaae0bd37224c7344b2870cd85baa89756782c60117f053d2a6ec705e4645ecd6472fd50e9bf7c986839b3c90db0d0783c1b44bef80a7a352e40d725f40d44334a45d1dd475476c30ff0c134979b6c543a4ea66b698f61da730a7f5a01f06708f2084c8978a996f33cd37af4ff3ca0ec4179503abb6684bca2ce34c9c715854ce4114b34c9b476fca028fac5d292692593b3d7586e2a699904a363a4d0cfbb3f98e85b5c68a4651b7be82510fc7387396d2cca17a7dff46377a6c0e855bbfb22e537f883d548303aa61d139243121b92424d84c0b87cb39c98474424849a060363e8d272300cd3805c4128c105063dde07055b79d8abe784132e35dac9d933e7d39da6399d8036f2a0b5b7c412f03d27efe7fdbc77f6fdf07c7c9eb36fc9eb793d3f3c704289ef23be655b71d255ba8af502c332458a14a1a0a0308686b200026a28da8976a2ab68280da579d04bf412d894513583ba981b33396cb8c6d241820ff5d3459093694ab2f2e5108c3ff8f830d19cf48f12dda449846f39e16478740dea12a9750f7c9613d372e2fdb46e8c5e59711d8570645c7157486e0bbdaad23edd93eaa85e288c2309468257ab768a615a10f82327ccc4c9f404c2b7939af8766a04e368671ac80b5611a5293b6939cf4f5a8fae56fe74cc4e5ecdd55ccd0b9bf3c24e27ed39ca94551b9f6762402894f69c053aa12017c4c2f572949683394aebd159b5ef814c23924f283f83cbce239480d20a68cfec5c0225a313bebda554faccba1fcdc789f32959b7846be29aa4604a7beea2f568c9aa758fd12b93d74916e47644a12024cfca1b79312ea8ce8fe89590db31e70ca2d0b7bbc0978ea719354c3ba4b34bde11a1a3d2c607ff412d07de7844751ea1844964a04bed475b5a0e8c3398b169942e1d987c70d238979f4aa552aaf8307ec1c0c0c09733dec36839ee82d1722e98092113181a3ffd52d6d07ec02c1a519db37b38998996332fd478f4cb0b7f8a702b45d1657ca9913179e7f2e7c5b4b3df601a92b3cf708d653372f68b755cce8ef10e9ac31157c6578c66b2cb9f77b74a47d6a588d58854493d71ee6c07341efda43b243219f2ee89ab258f7955409e4f47c14b25b30b6f6d3ce7dd48b0b56b2750b6b1d5a12c3efa83f22d35fa44cd9eb51082887f6e59213f0a218513ff28cca4469f10e2c93f8d99a5f5883be0008a28cfbc7ab28548e29fd3eccab22cb35e062326da50f0f14e8d47bf948f0af49db45089d8c2f3164d6ca1e6398a0c849eb51c1d758b26a8fc3653737605826a393694ddc22e6a477f0b80fe5e01d893381ef778286d763c5841c585c39a0518875e145cce38373da9bd70acc05a18e0d55c1307398ce5b00a2a3fe3b43bc7a1349b59b680f90a803d512f6f7733737ed924d0956038974f209102acdde032e50a4f1431e50a4f1481736941b0c72ebc9b90bf79f1b29b9017b3cb3e699f56d5ced3d3d3d3c3383c580b1e0678e9d082f2b9f37721943ba0ec2baec9a2716efcb31850759a7f519e8ce170dc15187356617c3e9f16f567ebd3a790a5b431259fec559c7f8a714a8c3363009a37d8e02308428824c912502c191282aff430690287344d0798e68befdb011e42c4f2cd00df4e004793835bb9f6d9ee299895db41890c911dc82c121c705082b9e8cf097939932a32e3b40bb4fbe99510bd72feaeeb7931910563f8211d2022635fc0e1e0e3d5bc6be3bcbeabeebdea0ae4e414c3b20101b5db1d02d8411ba4a091bc435e86eece0bdfc95c70ce8b794e25cf6e593ea796f3aeb4fcd03ea714890dd306e68de7595a0f4e41fba9d3d2c8350d9ba7dfe6f7b45d72d3b5a15aeee6300d08f6a34beb51fde4f064cd39bdc9a034239148a492675647c42c245296bd9058523e22792973918ba7eed62ff26ce3295ff297bb9544259288e494d6ac6ffd91d65e1a69a5fba38d85485687e44abeedf67ee423edc77b51e98eece64c3ee3768cdc7439a824ba3a23128b8f4a26df44de9a57d3dde93779dfaddef64d745d4c572773929b36f89a93dce4e22d2af928f3ce9c548ac0c8fb6e3f46de4146dece336e477be9925ae59ac9aba6f528795f9d76926725bbb91f5d04381993eabea8542f14e518cad2724c34cbb22ccb3ad3dcc5b678cac4aff94d97bcabe5af23df46a37a75485ef25175aa6528d760fbd60ee53dba9b6b27398bdb9145a0e4a23bb25bbd5b8e37b9e608703bdab551c9ab6ff04d3bee472567f12dc79b581c65b957d5d27a8c5ca774eb68d45e4d6ef2a8e5984851bec8f29348242791e08bac7b9467f3670eb723734dd3348812b1ecf4a34e17f62a13b9664ba5ab0262f292f730dd6c64b7fe51c9b2931939ed8c44b23cdf76c7bdc84776cbf1a249e33197a1d0b16bdd6d429f2e0e95856ce76c6aa0ed339c9d9d72928bcdb02a670d9b713b48dea48b1484fe75d9bedc0692dd78da59956376cef01995ca6d689a19aef2d67254d7552643656760986bd7309687c82f6feb52c32e79725d7632945e196b35d810a9f127a7b367741c82603ca1a6e2dedd996b43af1ac653aeb9db60dcdda8f1708f899ce4ec76a07c7b7117e7178bbb1df72d7e390d47d91c344896465145774ba154ee626914f5e5eeb827e578cd5ddc693d742e874fba3aa2bbb96f7112bd2adf60aecab71df7227769b93a2227b9e6ad01215d0438198de5eef4d36871d1d5b9ae8b0027d39ab75c043899e9cece18b9d816d77ab478bbc83a814e7b09bb04742ba045f31aee32c35d2c75cdf669c68ceb2a4f794a59d35c6437242ffa3191542773b9b322d77c5e7e5d0eed13ecb13b9dcc4545967f3acfcf205d6dc846163eb5b2936d191787915a0e6a86bbd8194eb2ee8534cd0c7f0ee32e2ffea2f2140d178771de169bee68b87893fc726749ac01c1bcaf4ae4ed4e2572cd2fd1fda1dddba279a92d46f26ef1b6980b22f26d3ea66ab93f44979d8c9371cc39c96e9a53958b54ee2ee6d5498ea4ba9c746914f5ba4154eeae8eca45578786bb9df7eeeebc575dd8ab17c76800992ff7e42e05e327efbbc1d84dc9bb3877165a59e6e28db95ceebc61ee868277f193968372924b04dc85984bcf70717171214de3725ff7dd761ec90a79439584390ae52d7643f22dfeba66490d57395559176727a3f1d05c74dd15b9787532ce45b6c535cbe2352c6c053887f6898babec3683b8dce964dcdd28ca31d4dd78feb53490e976b4885cd3dcc93c1747b9cece7b946f3bef3191853b29a7ed010cf376b95bb75891dd8cbcc83567b703c6676877db7133ee66e43527a3badbdca1721a3368dc0dc96bee5c65d9c92479ed6e22a7ae7218cbbd52dd16a77ef35a6ceac51eb150de1a0ff7a8ebb2f3befdb5638e39e637fd8387c53117014f10e79a5f7643f2973bcb4ee6726d7398b7a036919bbcc56e4a1e33f21b75d1dd798f393b996de73d8b53160cb328bf79283bfd64e19bec466443f214be55adabddf70892df993f503f9d8eac0d9973cd0a691ae7226a7deaf55e7763ce327de5681a87f5f558f699755f9f53ea6cf3eaf299cb046f5d0e253fd3abb7923e13a38c2f100043a02c53b1cbe5754d0aa37374f8e8a30fa3778b4e9d468ad1481d5ff7e6be20213ea6901b2e10a13f085310f650e188099f40d9464707fc7300ebd878a2b3eec538a6bc363358d41703efca6b3b4f74cd03e567683d0b7bca15626fddc9387a0af1d12b9632a362381f876be8721fd7b5630587f73e2c1f3608b940d34cb7fcd51c3672a6576f4a8d77d52b8f4b3c00881ae915e42a469a863a74b7b19ae9156b1748c2cd43d2343e4d93392442a48891244dd37373c338608eb6e91a7a057550b3df18e886753cff0003ddb00e1c2ed0439a2612d141d59c9d4ce6cf6e4ade72fa4ecfda9bc1523635a55ed008153a8b8a18a1654108a184f13d08dfb4e2f39bcf078178428fc3d3416df994cb6fa9ac5729d681bdea2e1223356c73ba3432a7738ec4216177b9b34676a03f37c20f6bf674505346e61562591b1fbd7a6ea44a15e888447871707748af7ca81b0be130c465a16e6cc5c8db699a244db3f1947ffe70804d73c43d08388c6f7fabf796fc36938241daa16f1cc6a957cf573005ddd4224a10849ea30441ca1be0394a10983c1d3dc7e6ac9587fbabcee9afe68663a0335090f7cf91344d3fe370df390fce79bb2e813f0cf47cc35c3cbc372f063a8c57925c32c730b35b17e8befd8d47e41eba658de4e0eeaae43de29e9d819628719d44875e84882dd2358c037da769a03b24f3e77ccdaedf8f839307fa74c0ee86fd68309de79cd36337c717638cefaedc675ccfaba93df4c36f294e03d0157c7e9bbcc50fb6f0edb3af14a13253bd5773ae4e4d235df698b63527ccabf7264472dd8e5202a9111f4c2a75f5a3027da91b9b8d0de66df06af26ac3819df8380ec49c6d48a745a0c65b491cec98e64ee2070a3a38d1543f9baa274fcd6bdd38a4a194efa97e407fae437c22bc67f965f9f5c3521f544b5a2f5ac6d9e97f472019dde48b2880b01c73cda5ab2cd7a8b868a64d7a4d0b9b3dafcbb2ac39e7b42ccb92349ebdf8d86e0b3ef0810f7c0004105404e0dd0fbef8a29b7cf1c50f3f50685f50aea75e718a6fd0cd7d57371d0975731dcc2fb79c477f4c9932757a759a1fa6439d9f624f6feb5cee9cd8e818e734a8aee3dd520cef12b6d2055ca2b2b78b5b54f667c13438514da7aae93da89bcd47769195b6be180d704dff6c8c8521ace382efd5d8f4dda6cdc7cb3ae3b01c133dce44f9187d636dde09340ebdf3c5fcf40feb7042b00e264d73049439e7755dd79cd3b2362f26da30806b9861c33a66f0113eb2160ff40c0019af50b6b1bda187a71a5cee35c6daa95750fa0dcf2da7c095bfe92ea26eceb28e76e898f039f4e7d0dfd695c15d778571bca03ea117d42ba7016908f9a1c72d861e0b287b0faa0eaae6a28b8177c6bb0d05db05c17b30a44f58c731ecd77433a06ce3f9506b73073cdfee7e0362fa18e4fd7ba2435befbd1945d6d5a13fca23efe385f2c123acb00d5d937a31bdd550b37a310f681a91b3fb80ae89bc73d69a4ab913eeeea0ee68399adf340f6a138c43d6ebdcd3f988074e8c48dedef45d9c5e0ee9655d90e9ce39e7bdc2ac0bf57a5da93972b1fcd4475e9d3a17c6c82d2d87e42f0ec3a2f217ab726addbb2a4da3f27ea9e1355a9cc60cf7192fd23197d29dbdaa4be9fee2cec53197d6c5a7a512c8e5eeaaa23b97aae8d4319faa787f1879cce5dd8c4c375d29772e99b397cb20d4a7cbaa72b93fe8bca4a7462d2d2efdf292bb48695d5c2e8da2627707965a5c5e9d16770937eceec06fb9b05735fc721f796b40aacbcbbdaa713794cbbbd198817a71f7e254ba9717f722ddbd380ad372589cbe48877a71aa1747bdd89717e72eca51d60d51572507161f8359585e7ccb3ee53095729abaeec6f397a41efdb22dceda8f946f93c84bd75e49161f61578785e56e3cef5803525930969ac3cbe5f2e5a69c48ea9a5cda6d07460c9bd5e76c71cc61467e60573a97949fdce5871cf2dbc8537707fe74f82d3e6269b92c5e1d65e19fec26e4476eb29b911f411cab1e31f2d2651965fc40b9a01dd4ea542213b5d69776be1b0a6a9a1195bbcd5943e4c574cee8baca40524abb031f8aaee1224cd4cd014d699acd35f1ed593829ae09d601b957966bb695b0aa5c0e7d664edb331d54298bcc896555b2cb9fea07e6d2b19be900e13fa01dd4cdc525a6633edd49bd30ebc2b86c74295d95247fcda11cd4cbc3b88ad4c780b82967deb2453aa6b368292f11aeb548af8c3cc764b5724f7525e2da854617e2b3f1d5e9b06b2c9f772b92350e2cef17fd4519331064d3bd208aa408e005134c2892ea1f5ecdb9ba81430772b44f16335282c0f8e753fa34cd0f4d63e37370ab9eeee925fd63c5174f2c67ce9e7074f606d773a3c710c4988b04ffdcd11be0751d2b209e00be655513c89c3a0ed9c5815f0c133a3b559e078707e72eb9bc2ea11ee30eea11bef23b38cc07e0c1f398b51a4a0d48025e3e895a92e71eba75d9273ab48cef3da889e6d5a1a3c3a8c57bec03f88d6f915e7d11234e2ee7e12f78f479e15dd2030e1ce83e269cf6224d73faf617ea83ba15f922bd3abd4fdd780b492e4fbd18311c01042480e0c4504f0f4eea1927da1eb8032092d8e10656e02ce901074e741f13cee54b7a681ccc7d1a80131d5a9f06e024797243f424380825797203e6f026f171933cb9017abc495652a26f2cc4635801174eb8e00426a6d0c58a67882956d4a0065708fd200c3836ded383138b34cd00befd8a1ba83ad25dcf6fd26513989ba09ace4b7c264ef4cba1f599384a6ee81e9ce897edc10607ea00df72d50fd7e4adfbeea64435af10e8fc37549c385d35fa9a9f895a0efbcd93aec7ba9e8f7ea4369c4708824217b369ae7857e8b0773f8efdfab9d19c90379b871c9d03fab5472714c70675aa248369c7c9ecc531979342f0d69c8ce3e26bc65c73be7561afa893b7bad8410f7b260216a09c9e817ae021628e39aba042ecde8026411d93d0310c62f2ea481781bc23a8f1d02115ef724adb9277c6ee3250b6f17ad84526e85b80aadd88cc33e7a8691b28c30a6b1ae0b1726fa07996d92434cf9cf91560e328455cf99df7b3a14882670a53c2c08316a4347940e696434d03ccfc80cca3f87975a68b60de11d478cb2da7e239f5a112810fe89643804580640435deba3a53c62555ba90e76d39f5229806c47aea4eeb7185278a98120413825d31fabcd8b5d8ad18afd93493e565b94fd23c56c722e09222fa39ca18cc703d4709c207d5831e8850aa0203f120861ebc78eddab9d7b1613f8789361e2bbe5dbf2a8658e2e134c3df32e64787f8397d37e0dbe9103ea7a671ef769e1064c8c089173d479101124fdd6b7ea277bd4069777777ebb467cfb754eabe9b1d82601cfc5befb0eecd0e3f2cc3eebd03d2af539d4b87952390bd76376cb00689a8cf370fa2ce534b34d013825b88415c914b2c21260f2e208c8ab33aea96fa2acc966631b8e212f01da3fdc000110f6af81eeda852744411228cef54afb6b98076fa02c8409049d906c3518280c1a7605e60176ab70d5bf8008a0fd1a1c68b80a7a3507eb6b1557fdb7bef5dea1ef4428341f929d003b61411c647cba34a05dd72fe485f6814559573bd7a3d8fd0ba1ffae7b20756feb9d5f3cfe3cf5b8ef9730744e5284d34f9527b11548a50e2e7ec3927841a17513792971ca94925eca5b7c5fcba32979853272cfe58a43fece649ea322d27c7ba3a985b3d341f37d8730cd37e606e39a5da8fe7d14b36f6734bb38167081d23e95e1a051c0833e80113aa60c5164d702eedc77c1dcb9fc3cb7958fe2ce96e3a7c7e59eaac5daed9c03384e91088f427b76b7b51e7f9843f309ff764a3108fb90a4874cce3ddaa4fc78a58f222273109e3454cc678cca30e8a715c57297ab6451ed1497e693c625401a91ebd7abcaa163fb9c8696b96c68367d299595a4e8b472b72cdea40661cd2ad68a5dd787e9b3ad1b520228f57d57279f0fcc8553f4e5efde455880a1c8e0ff301b2bb4da7cee22c1665b21bcf9748560544542ff76a64b1ab23ba1dfdf269553f609247c1b3f6a3f62879c8f350e3c159448cfa8efc1c8e38e033ebf251868223351e0ee12906afe6e3e6996f6cd12d8d87cc816ed919ed4532a8d77394274d80506f148613d442659b672275c7b316438cf15b654ff1f7f4f4ccdc60a01750ca959d911d685d57a9f04118e5bd793042eb5956a344cc38da06d4b18e1ee39fc3827324c6e1ea48a46514bbc6f869c92c7c84afdde8094a5dea5dbb1ea57fb069a470196a2c036c1a691111f4d22111457868652e8b87ee8810c24376da7c38f1ce1703c6cf7741f9fa72d7c58e36f3bb196c9af95278cf8241d04f4b46c88ea75cc1842e90c045377c47787c458ca417c5c1672d982c6122aebc9b004f69e2451194604209477081c31c03998822082a0f351e900925ec90c533afdc7b8fa50302ede641bf7e700536383dd8e03c71deee3abe016b78f1ddd03d3851fa13bc76cfbbdb4ec66101a58ad9ae631311be76edae380211bebb598a369e2a9edbdb882cb8f0c20b8ef21172f1afdd12bedd8d01ce340d5cd9d4008120f4d0e667e6439975d0c72e195d1060132007027a06b602da25c0391fc0994aa47a3ab1889ec7b997040a2f8464e87966419d4c25521d89b44cca532cca5fd392110a7d73b105d6f37c4dab8b97f051e12f9cdb317b9ebd237c5e3467f10c33763bbaa707021ec21c0f394607455b04fe318e1e4ce5693d1809b287ca43e7626428da78a86024bcbce2a3160fa7fceb243cd47a3016cf11c61723b73389b6134824300f0d51c5a8e5598b216ef08e8cf8ec0f63324410effab9e09db3cfbb1cfac4102a802de5736c126d27f8f61b48a1f28a760efd9e88920a6acde8ccf2cf29751ac9969ccc84a28d7cae1e8aeb9c735e2c0fabd4ade6ccca3a9e37cdbc0f0824deb1321120b23ce53a63ac2fda1df870d0a75eb54baa257bf63d71a19ecd1eb34b30efc171b0fbe4f9741821b4d39fd51eb34f4e9dba35093d3d666f104271b8aa85418883103104dde0764cefeba66cdc8e799965b2cc86e5e1d54a226b8eac6f6839a5246bce4b080e19ea317ba363daa1d37ecc30ef10e264dad26634bb5add1079bb10b7e3f276f67a83707831ed10703bae2beaeb45801756a9d09e7ac5f2d509d5c11b9a66bee796b733ef8800cbb4674e2d9bfd0bd4722606ddb2da936aafe83c95ea747a82a8f991d296ccb2343b3fe320911604fac4699f79292d27c53a2674c9309bb23aecbc7782b9fbf8f0ac4de0e160b7baeb59b6024f1894c06c01266a3d780a302faf075ba186186a585a0f06430d55f66ce9afc9a3f5e02d4c253ce0550171cb2fbf92a0e09f47bf5a10e8d60d4006d95fad5126919684f2c92827b530cb59967301106d24f8eb043feff63caa52f004139581b8e0f301ac83ff391a5fd8604193266cc10232f830c4163e742102c51e2c87c10eff3c874728bd7240d1b708a58a08343464450b576cd1030e5e4a61c9162b18630b1f29442840f5d5449f6d06f5f4f4f080b33513263e0fa1bb3088d0008a1e2b50814a4f1838d05d21c28bdfbae7e1d64b8684a083e276b10332627004238488c2117e7352baf09b0bb27e7354a0bc18e89b5b02f90b228a300417391812821970a063328416ef94884b5ca132440cbfb115d16f3c86cf8b7129f7665e8d01c460820f15aec8220a1038d0e661953330e10b3f3083114348e0c0224881267be81409bf9da6fc0603f39b8d21c44000192021032e1031c56a073ba13f0e0d0d7184c7ec63d814aa382b1dc32f9f7065a8a78a8f959f8e611e6030e918fe0df6dc2154f0d775c934018b9eebbae612ce8568f296659586a4cfab7941d2470b1f09f0313ea1a669a09e18e1b3d2d3f3114626af46326112831de408721e87aa6c22994826f2885eb927d4649357367192c90b62229b1051bbc9479f5713875e8c73187d9eada0c410687041114f20430c5cfca820062c98525c009492a5dfb27f4134f9d7847f4190a1ba2272608634c8800b4310821538528c80720e06475882641e1f70f104227850c60d90a8014e114acec99f2bffbc704d7a7a7a7cb0deabd9ffe80113c6e0051f8c40031970de1650a0825a3106e0b7ec44e53718252ca0862548e93f6cf1928b17b8000a1f20be088286b17881155eba8fa6612c7ea070901641ec00934d7e60f2ef01eff1a820081eaad8208b253b9081f3b4f8f75e7cd9cbdf4e2f615e1ae1b71bef80df72bcd4c2eaa5cf1a83f7c109bf02028b167cf1d24628678a1e623005186a00040f59446182151242d9440df5052bc0581003982bc28022695e2a010bcbc1c882665d274684f2ce2394a671fea8f4fbec90849872309070452730ced0bb1857008600e083415dc10fff82e08d163c108a41193d5780812389f08221500861acd22b264e3a6b5fd04b7f549e50d3e06cf23ea1fb825ed013cac2adf28220bf2059814042f4aa3cdfe2d087d12be742d579150f0df01056910f10c23adc4bb7793552ba943e5f16668062c41734e8820a38128b976108e10c547881c41264cc348df5f26e4558e8e38d5586bca8fc5b1cfa4d3279e74141efb0e86187d7f1efc5a15733719cc72aa4262f4526258e0753e278aceb09618963c738dee5bae11c7dcb2712b18e0875c0987d3f49bf75b48561d975594fc218a1c6abf8989999999999310c083a9bc6b977390721cf9a392d9ea7c475a3a15db70290409dbb1e0e02c1e4db6d006d5180f881da11c82a80712bef3e73c0ef20b9db92f10a4ab9ceb447ab82e8d3b2a2f3cb243c385148bcd12d0bef36a58411dad73c4808a30d08258c30aee6f25747d8355d8c704a0863caaa6ec2c7cf7bc5d56a89454df5aa57dd4486f42a4ea91b0f1119c23e3588f949793350eec00e12238f0cd5391223cf0e21d22bc743efdc07daed39f4780f9d8cf31ea667e71c12d439225d40086b208410be2a5841ca942961b87cda997b2f5e192d570665e7264b19a53f2865845246e8a4f37b39ec58df839f1907cbe6013aeceb81d78f9939be7ecf3ddf82c6f8e0937d034a9f169fd9669321ccba9debe7e7dcab8985c10c93601ee22233333b2c680dd7ccbd8254aad676ddce19e1f4fc984fcfa6d761c8cfbd077d7bef393f668e314a09a3cb179f9341c85230943588c538b1cb1b9297578410c269c9abc3fbe8a68fd7490968207cfd3b3ae6e0628c31c286704aec0e5c244747cc8cc3bbbb1b03949be6bd1dca36b61995900bf3ea2e9f76490f3638d785ee3371b0fb9cf4965fd6c706673a6697f43071a6fbd8e05c4e914c8796712e7b24f53188f52218bd74cbb2bc3a30373f9ef7a850ca28d7d1be67db32b29b41cc5230af26ca30c29859ead53c1d76e81ead54cdcb03c7c706e759ef3383f39c76b4d2d96785637d1ce7796b3ca24f0ae779c579cf3e13e7eaf0b68baf9312c0574619cd5a051c80f3dc0ba2dc341b18bfd3cf4e3b020e787e1ee77e268561fe9e56e494aa5354e95b3dd1cbbed7ec92552ba05d054634a7d6067c8f4a2925e612b355cbd8b96e2db339e8907acc8f28e9792a613b8610be4bc4f0617c4fde222720092862ca154eb4e5139c108c42951cbcb32cd4e904450a285240912205458ad3e9e4378d72d64ebed3e2b4a5853e4a79a814f4e6d154ea2405c52cca4f287feea040a19ea3aeabaecabfd3490af8dbccd31c4f6d9e4a71c29c909c5ef65f4d693eeb74721aa740292f8b06a255507750d0eba0649bf4cba96f199413b6895a5cf38ad13863f3f46e453293c9594cd494722c8e52779bf9cba36b9646515baec4ae8639fcd1d5118da2c7bbcdbc8377a73fd3a49042e42320a30b6572d1d5c1b0eba430ddcd4179eaa47032f464a753fba83b4b29a5f077e0d398b9c88e28575b72911d9544948a9cda1de884e45acec8649d54d76cc95ef6e65198956c7d314db23e8e532f770cb5b0579767f68a223bf2cc6aeeece52a06a19302cadfb43f1ed11ba560f4de0eb46cedd59c3514525be9754538adde89cfd2e27b68337735d4417777dbb82c179bc0231e9316c23d637784edf48f2ee66a44aedd4df3eacc24c7bc644d5ef28a5dec626e691455bb45b2d77c2b926df033afd0e16b57472be25bbd1b8cef7446ae79e6ad01d132cd475707c2bbb91f1eb324841082207b1de8cf1d658dde2dc92d619853fb8ebca796c931eb6e98e96e6f59d639e76e9e659d9b6c69e3611f304b726a2fb7dcf9b81dfc969348ee7eb8aeba2adea276733fe8c3777574b72299f3c1d11cec3aa723cf5c737e575f8de8c2a69d59fe6a9d887c24badc99dfbccc1db4d41f73d9cbe8979c921c364d7512c9e9a6b976b7ec3512e96e3b3fda791b48244bf34bb325929b483ef23a12b98e66bada8974b7ec47772b9271918ca27a0cae9e4d16af96c52d96ccabbbb8b7b4786b41aa673a2327f9c847a391bf54928fece526bbedbcc9f2e7231235f9e057955c87bae525ea96534be423df7992c96e2211c947221f79f69ac974553ef8455765b98ec9456e9944dc2bd7464eed2672c6dc84f98834b2d768642f92dd487e8d46570773d3d579f19117c97ee4cf6ea45b247b17d75e462f2e281fb578aa257354cdb23a1abdaa91aae6237f5975d474ab8e34d2dd5095e5a25ef5d934b5ef86b22cef499d64a757bbed7c1d396c9acc473e723ab2cf74379e6747ceb2a8dff4b3d54d16736e1a2bb33a9a8bdc7445aeddd2cbfe5dbe6685949403c95473f29197aec84d76e4cf4f963be6f9cd8bfe48ceae591d74487e5d24bf784824ccafed7211f03cc92955999cbac945b644b29a3fd7fc79e98a9c5a1d6dc48334b7cca557bb29f9eb559aeb3c1fb976e913237f447e63cf6e91ec2776e776811dc884174c30e19db30eee1d135e30e1c53b2fbd520fdc8ee75c87ce41c668756820b48c327e4bd2d3f30d93bcf860bb32a4b424841e618412de1df7804487cf918132ce8d67981bfe49e76879f671e79f47f81c0e8f83ee8bd37386af57b7576f2299d539814adf9e3b06da16f07c8067e95bccb38c43787ecf13ddb3c2ca15841245602b3f10328cd9d71733240468867b7a5c4fec41753ec4e2a1ed06083abcd0df1bf282a88afbc63d337caf6d3f4f748e090ef278395f3dbf9a188e717e919e0b747d5742b817f47d5262a7138a4f2cdfecb7f7951854e739b8762704a3500507d309fd4b22fe5cae0974e8a552438e1f94a1078571387f50de4108e3cf0f3a723c01e41147114f00b95bd42e09555916dc4161bbb348ceb2f0c1107c8f74b05e3a4fa843e5d1f9c9eb9e6b114a079e1ec67e8f6bdc63ca85d966e01f47095fbb28823cd0e7c43b7642efdc3b27c4385c0c849e13afe689bc012a00c21b5ccf751c7391c0c10861cf0821c4c1e7c9119bd7d9796ff9ea7970a6d323ae8cb74ba6f7f0e488cdefbc033c8650eb11abb8a8a48d96b4450bd5d08c0000007314000020140e888482c168349c4acbf60114000d93a046784e1aa84990c328c59041861043400000444460643600f0a6d8d5466c419a160da91be251806daf9d3afca5ea340bfe473f131003950052cc49be0a80f0194014d40e1ae84b6328cb46b83b5a4e55722dd0789fd8d2dedfb6624c9db6299e027028659eaf5464395407a04216af700dcb72d380e03dc2466866692735f12e0c0c9943a35fd8e09e2991891725210413af1ba47addaa3664b7022b1af018e70b93426037359494c30860c3958cb929dbe9b4065852f3f71a996039ea853b7ebf0b012378ddb71c6eacf47fc9d0ebe73d1c5d52aa41ce217b175e0b3d1d21538eab4802be42092e25d460f93ac3c1307b31a42944866aadcb7565dc3eaf711b2cb8f61e6e27c0b165c206993d5d38a82d53b021588ee8bdd2b1b31d7101858c7127483da0c571aa84afd9afc5a0d7b6fc5e14a1ee84d9200ae86b333ab4bfe3e112d8118834ebb0f3ca490aec9f2fdb18c2320e480b2a541436e59a62420971337f415cf3dc2aebce0dc022effb91de9d6c14dcb5c1fd0860669513798841f9ae8519ccb0bfb80b1ce90de897e869922d71b98a0b0b6c862d52df80652455c410eac18146d139d70cfeba51ca4dc3534d78d5e399066e043d2348648d1e53a485a6d1831e5800fbc60cbb05c34a293d97138332f795ad0551685110bfa3bc4130008a16550156b46b5d7c81905111a260199248d1596db22849451087d91ccbd3c3c9359912dd481ba3e68339ec1d54af8e0ecae2264e492a0c73fe5ebbb674d01e380f27f4b18118baf33b1f0426d8228673c5efb5a87d720e2e09d7c8d03b501cf84a2da4ee1d044961f6e12ff43434e232fe04140163e0601888b1a35aa16a8434f6cedb81633bf397aaaf1bd8c4ab8200a484f2f9bfadff925131780d003b68999b9ff95e49c3e7853b7c2b41f7f1eb529a2c30eac2c9ee97a009ba818b0546341d20d6c4ce9a529ac70d5afcbdcc12a344a57dd3e2d07ce8756e7bb14ccf8914f04c37e7651299b166681a3ac97eb515d4b60a9e8b81f63a80ba95454c85e26ba2d36bb3fe99ae5fa06234c9b52d3224f57028dee60d4e880502df2c84c3e63902b12772914501828e59de991cd56d607201346c2708a6c782092a1a45e59217201fd0235fa22345a8fc6bd34be265a2e02208dc518fd6dfa0292458dc5fae2c48d31583d81e2e744d20764e8a2304d37ad59fa0d2fcd7bfc1fbd3faa0c7e289223bd5d1a523040232f55eb094f3788e92cc6645d3e7af0ee0e8ac089fbc405af9f99bef3d016de98c8a7c6a1bebd6831b3094bf8cd1cf1f04f8a659fc460fcfb12de85c02eeacce110f3f070a347e0c2967e1f8e71706183e415a6f4d0273b269653fe7bc3ed0561cbcc01f1ba71f09df5780ddd8cb2484629fcc84f7edfb63117a79435905cac5b403331c8327ace3bbf77a71d4a2039e039d5e3610b54e03835080469677b70b25f53a6a4748b56636db8e8d16abdf7cc80788ca56d4a02dfaa58d1bfb42c45aecccc3573cca799195f8bd49353e1a136f7610df3c5d2d6eac6c9ea25bcd2bce2bc28c956689788e65a62626b983265dea15bfcf99a34d7b59fa26a8f4f7f9ec7300e99d304540830bf922e2c0400156b899376704850080dd9a9ff5d0d4870cfc4385b14297a7a412eba480bfd257ffb993fa6f00f8c5856435779e33da251db97ef75dac04146a0154f9fdd80b9117e324db138d4f72d4adc2eee92f980bb81ee58940d8336d4ec9e287039ede98f00a93dfd6d83ff3d0f289d2a43925c9a1e69585e3bb7eef1eaf569d31a32f96547c8d810ac99871d6e2c3e4ba206e2864cc67407c23dc418f754413daae01dfcf83e53bb4e5c70d1460f77d8844a7dd020e32854ebaea80debf3dab00e555eb49bf4530936272b6fe8157cf739353947664fd8f8ad920336f7098a92a9314627bddecf8d60b43e9936619528fa565857f9585da4e4a9b2b5276e6a445c7fcdbc9ea52578f65ad1a49280f3381d7d672ee054034d6b9eb7cfd44e39b5cd5789c26366f29d2bfa44ba3073253f2c6d77096954d7dc3ca7fc8cd1665873a2c91b7173bf58d11df75dc6a1a25314d2f741fa63713b577136daef18e2d2a09cbc6accc5560d94c56743c9385ee8e27f8dd9670a9a29b1ca5e4bfc6bcfe24f76443887b00f0c70e4079905cbb2f2ad31747ca05fe33555878d216b224dae505d89af5cd0771bd1ed8267d9294309c90368d2199a6b60de519f3496b8692de761408ed674b80e85a01cedff0e79e8aa9dffbf863ff011d3e69de5d22e403590c8922c23e9af3cdcea78180dc7eb1bb03e9bfec08278531e1a54c20483e00b4a52e1d86de0227b60e547e0145713d2cde4735aea176b65bfb60da069150ffb13d38c210eb1efc18fb10279b17a4c0744e38503232e7c99ea604b28fc346f0e7ea9ac58cbfc2c077efbd7ee3d6472ae3c58e5a6cf22030e6636898afc5bb08df5ffd4c601fafd04c6ff94a46d3fd8e5f9e18696bcb67f081b5f0c545186ab9346c0e8cc8763e773aace3d0ba653bd19cb3399a50b94fb90a5264f61e4c4c352d33a07ba2b94346c82aba85c14013cd957de2f47df51519c9b9dbe2ca29783be3c0d1cdd355545edf8c2aeb15d42caa9bee8ff63deb5b5c1afbeab11abe35b46e3895b6004d7059ce735651d53c89221a4ecd9f66e2c4925bd92ca4f4c27c3e1afe934122ca944cbcacd35686dc145e9339d289b6264b5e3d0214e23b8c6ed44c9e0721d821ff4c144124db768ea244236999573745fde1dcda8265bf92e396dbab7397fb52c3bd8dc36857185b8cd22fe855fdfbd4d8f9f2113db933b5c2e22c792fa1ad653102b21c344b60cb8c537d417e7822b819a4fd5f720d52212d18573bbd0037c3fdb2d039a29652aaa1ff1fc61f430bb145a92b3c01b6b1788305c5eb983064cec53e84d2828173aa218ffa16e667df0090061b4f78c7e88f076f2f62f66a5ca9d415971ac86e1ec8e312cd4828b869541f4d4eb96a370ea904db787f94a5cc015b54ea64d6e1e882d6d92fa23a464e7286695a19116c62ba8b88d1936f08bd24459cee6b427af2f13d7ef8163d8aa1163c2412b30d05f75d33be4d45daf0d701ff5e67cb677cfbd28ae26f77b778c234a2d74d59d1599e3964866368fffc965880597a879b38e6b343ac517a565356c2311a62ab5b05db93c1b2e3d63693e549858672bd401765071d312893807de77eef01d99b80fe7eda439e1d155d2e2c29f012f230598b73c76e80540010487630e213366de3cad52303bbee55283e074b71821d50bd1fbd16c4b908e71709dc862b27921f06f2e4b8d0780ed6e90a468fe9b85eaf8f34ec65630c95ff691fd6884a20884a53a518e4ad46e1110b98c30bf47b2f44703a7b71789e23f15ac7f238373ad698335addba6d56633c45524dce6952272646a22f882d897f3f57ad8eb2a269323a4910c02cbab96397358c9343d7f51715fc8aa392359ab61094c758946dca7a9aa4dcc172717c2b4875d8227655a92be4721753b2119b9a134d48d99a3836b10d2fb6c1763ff8653b5244095dbb820f60b3e05ab7f0d0f00bacd316f972f5bb80ed3008f7c0ccfcdd26fc7777109a1ce2cf238d8cc3d0ad96805b992ef0e0617e88644f94ff07347e0d386eac3aa0b44260395f1df59651173813da12634cb4038696b0c6ee964aee5c774af1b55e5db8b3cb15e006b3d2803f3bb33ff7aff57cbfaf6f4d1be610268be3158faf04d841b80b8f883b781cf412ac6c8d88092a38b908958198a918c54e9c165f9ca29470e04f274d9f719abd586396c9375cae4bd4ab30844f54141b796b0fd1b1a0bd1c6f10dde54d610fa54d0d71d76e94b0672c20ab35d0a157504de712c01c45ba9f28e303e805a81d8d9690951d915987634ff5c7e9ef73e129ed84bff2649dd06c9ed4a2e40250b7627abb11443d447271b3a02afd5bca70d4a62bd856b8a880603199c9c5bf2515dc2c03f182c978b33f138f9e8d6bbfd7743e8140d1c6ef570584610966967e63f23e94ea9702cde842f315a78080b900356296dd2a60949e909dfdccaf1af0c15e32b6fd55a38f4825db77ed128442b0c5f1db50e6201dad4eaeabf816ab2481f619fe37f951b2071991b7bfd438857a08fd8466f02fd1a1e077dc15f734af920d037806c213bb6d60a6f214cad035d80379709b21db2f9744350c76bd9b54bb70ac38a39cc568432e6a4203b0721ac40a53ddf022c09311b550aec33b29c666b0d4e3e138ab76be311aa846d8285e8e756eb08e72fa61342ce7db4ce54fc2d90784ed14f7ac4e6994cc6f918c6937bd3cdcaa1a88b699d7a63246480d236d6d056d4473d41b9d010bbc33e65fa89f1a988a71305139e0d6bf8f93b78c3b0bd6999354d429a5386babd07aaa8bd6fa771232ff3c9decbcbd064a63dce87896a89547e5d3076e3463b04630085de61131900a8a4b27e8f5ce5bd3a5e8ee87856e3a52215331819fd637ab0763d52100e418eb1aea330172103462d52b683bb1536262109fc8dc82d420f55d4974a2d7dca1e088d0bb3e06b106c387146bdb20b626f31cb823909de80466fe28321a7cb89a40a0ce5b01b30831b7bb83ae846fd03d20d0cc49b417f9d89819bfafe53089a873ed5e297096b38d456cc4802a9cd5fb31aac7509d04d610bd9c8a380fcdb8ee4217bf096cd203374815b7d6e010af8945941d02c323ede198680fc4e3e9c85a2d0ad0ad48ac930129e22d5560b4b9a26e0471233e8348c33f5c97bb0bc5f7e7c45518c7614e895780ae3a535afdd0fd568381430b84f4eb85c287cbb2f3eb06f08d58fec07974cd0a903489b197798f6185afe49c88b038cb05c88d21015c251003e3cc132301c39a820c1ff332d2fc12657196bed761838b16f01802115ca9d26b61ccfbdec46be12ab98b8ec84a504836609dc5cc8c87a37aed57e89bad68a98539a56018ca08c52181988f4bffe313251e19e86bbf5ff3dc852fded0bd8fc1adab1df24d30a173e9285270f2a56c06c8787f400bcd72a72f30e05ec0ba083a86cb307e254f3e01559646485a253b76f8f27d7f56be22dab5023a9ed81b90ba4d244132f22ac34f6f01bf00c60d9ba9ed07f20aae59072a9cfa0c77a7c38b384f9548298f50cfffbee30e4cbe5a1fc9513e4c7b3792da74b59e31249d56e0a677c48e1b8da4ed1a88f721f4988a5f9111d70006eb7c0db4948506e968c7e27bc4707c2db4eedba49d3c2593271ac337313df1eabf8705b5847dd3c45598e6b5b2f65d4c7e7c45d2eeabf262fe7223079f23b9881a8879a0ce4383ed0ad826c142eae35a5b72bbbceb537d59d4988ebab596818326165385243740bbcc29c085705b408f1c7efa91e30456cd055706048b35504b1ac12e0929e01ad84ba4019b13252c4014fee0c9dce9395faf06082e5392132556e1803bb7e059e8e33eb70a31dbb4cc0fd3cf09a7e551acaa09ebb249576ae7ae62cb67359dc21047578938d6cb1a8a010bf4b93541d1509427ab93dc1b98b37a0ab636e0021736ab461745af9eec8023066fa35f352cc6be324a85614752a5a1c513be2bb92f231a5a8007bcc2fe99a042f5fc2c51493a57a853eedc8a0e90f305d9ca28b448792568308d0096accb92810cb0f070b0234126fcc4679dc0f7b5a78fd2729b6900f72dfb156aa712ed2f0b01430e0b7140aad385b8ec13ea927c79952fe1479d42a40f5d61b1b3d769e9b70e4198885047d26e575dca9a690f5fa1aa8ba78c9d11c9841bf5b5aaed19088956daaa64d08f889c287e12a26a0182612b04ce883d55ed1a3559c233a9172e6e4d5685550821cf4f4690e31086b3d3e441d609018ab4125ce1cba9865d19e6abe08150065bc448b334dc7a0c044861036d322629efd42b1e22ebba3c48a335efcda45cb636609910dfb3dad5f2a3b72e9d6f01b81ae066c1106605855a231e2ca2e0763a62b0450357be978a7b45abcb75599900ded0959224579d2b707cf1bd157e94bb0219dd8585ac261338476c4e7dce51b3294cae546cd14b5c52a17bb3a876e5465f019d3662d69ca8d0363574ff4ea247d0ee36bb51546c18a2e81d49034fc2ba3b60b88e42c8dc538ec4ffaf30afecb55e4f6ac13c384a04309ad91aef72374f99301a008fba38d9c4e4d18782413ed379d77bf64722ab6aa6912667e23aedab2a375747c3019f8311271ea4708bc3c5bd0e97eb1120699fa597a8f5001f23043f8b09d7f9f8e9e6cc3efc8b3b2d5510170b62137ac361d3a591e0fcec8c43fa1246c55ddad7fc2c84e5049cf0a14c1b0f703722171fa9effb9fc4bbcbfa463c8c6e570683de3b58e3225066acab8ab486f0c6dcbd8cb83e1280ce5068d26eb36a0fb0788ce8335be0425065769d6ef19ad7bce27781bc9af618afeee228338e55f9e150b4740eaf8c2d9fa3d7b8118bdfbd86b25641664746527ef4d1600f9dcfab18980b930aadebf9669351a10f949f400bb9473a163fbcaa4f40e6948045dea9112b79bb7c8272002075be72787c1b33c950adbee5f64939b2de2c33a72eed7971c8f8b9e50ff62cd7e7acda5d505b975f5681eeb1f35ceb8e7da261b3768685b157235a35bb9ea37e03fa3f465c250ed2387e0784b145422b3ee93bdfcd9eb346339127446c8803e039cc087c279b95a370f9a637eba418fe1c31496aede2ad0435e98b1cac2779ba6e675ede9161b4534b9f95b3488a66af99609f6bc0298689c97e298dd52d4bbab74f24b0b040a5355fb222bd07fa1910ca8348a870cf2e0854b0ce8940e277d8f24ff3b8b8448a17a6835f3814ceff4f21a8b4151278f2024f1100f4c6f1c64953e06e21d66fd0a1b24dca2f417c266424c1e5bf686a7c25e64d6c937343bc16c920c3b2cbd649b61fa82556404fe8d2efed6d04e24056525baf416d6993203fa79d3971189dc0449e0b848ec778ea5a00e0aa59f4902a243ca6696919e997ae36dde0cee7d36ed3c0c58311cd65ae7d51c4f18a806a5a97834e86904be71d69eb8779e6c000597c6b3b56c214f4d37f5342da876f648d46033b2eb8b058c262f181d202b73f1049559814398f157a435b36878c12a0b1a9f2d96efb9c45ccbbe88490b28d3b125d281c819639454575dabaa2ab2d9e13ae9360545a599eb00b02ea4fa3878c5925bcbedb51bf7d440abc9333d4055a5bf02bf5425648ca99dc605a8e8fe4c06a913a6a42d12f1fbbb3074e046b5122fa3c2e1bb350234eaa07531318e839c6060155a3945d981110aecd095d35722301876f2d0333d863b4862324a2986f99610a45e0d9f53b8ba2de7e33e14f278dba284abdea18234c14ea32e12915867ac25440d702f0e9129202eeb8421e35976154664f94a2be58ffa670633a8b03a84a125344b9fc651064cfe7ffb39f2cf1351900189a173a18be302a0cec89d541582804d02a1af6071a5913c521c432d17b45e1647f59cdc96779fc88db927020e0ecad65f69a289a0c77b8cd2aa3acba2a962e4c94d449f79ff3feb1a032ca95e35bfa016e9328625defa44471806b86ced35b5a033e3dac7d6cec1434725a771f5144287b06482bdc5b77602acacdd577a4d5d05168375e0d4bbca29c5d644cb188d7c3d13bdf10e9cd9c70f81475d3185914759723df806a6550d00fa66bad89089c1a33104fe1c61c650a3d5e7caddbb18170524021f7a8b2b313729ccd4cea9ff7c991ae5d2d3f775d84cd4453340a4054057a30e6361ef855724f9cb3a0a60ed88149889493dd6c44063c01519f8033d16353e4bfd1d63319c4a2be78cd8a6d99748c5491d24cd0c1150266d08a89668e207d664e760d6824c2297b3adbdd226a0967e3e5d613b2a2b043db9bdb24a2afccca553cf437caedcc5043173abd65befe81d0daeba64e8a780e03c899084876276f119e6f717ac7542a68b63fc5a35b4b7f40f59b5dced534fbe47add9352eda7a7fa40090f68fbfacdef1c321c7ef5c14945f14542c85d28c9f8f93dfe15279d8a3d5998c6a5ea53889f0437cc379f0c702e4cf2d7056435d3e320bfe1ab31309d18d4d9b462ffba261ca3f8450507704855e4155358a5408a5622223b7eb01429ec4838f2026ae0748135c40beeb603ae9e0208e7a4329bc7653feb474017206bcdc33949aa3fa2551ce4d908de8b484a4e273db6f1abf194ddd00af42a3df1ce382bacae4c80c6759f344fc2031116005583c703f78e9cce18cc114ebb1598b34571b0885e79afe196ca437227e2b96f43751e7dba5ad1db52d81929cf25733ac44ed8d573d1127de9bb99d363011355fbf0aece1e24123a72044a463150cab76d8c57ecc63f1e915b8de5dabf062704ce4919c93c1b4a3853eacfd60acb5b9d6accb3ae9c9a39ca94aec0dc81ae44891024522eb3d0f221f76bc782848b842e746a7ab9080a1cb720ae04f4a9fc3057ed8bd50ca055907409b4930057b023681a665a982d6e29346e054d3a9af0caad13f2e037dee069e869dc557ce05b9f1495e7ab9cc223f2eafb93dc0ee5dcfd50898bbd6322322c59e401bcaea35e8bbe7820f34c135b6d5298b0c9536cc8d188c8a9d11948d685c23d2cbc6aa33f6fba9075f6b01d121596b1e907ca9636e364a98cdbb644d7c0728f05a548b04faceafdb0a2363ae67ad8609bc653bcf83a66e90b08cf03e18659436b144a3e140a5a98075abc422ade3376054e5766d349e42c0808bd20308d3a6269b889b28074853f7ce451282bc6355832ef7b236ad3c5b6555e52d90d36cb50f6933717b87ac94a86f23c418fe72771d9bfb468a6ae3b57e58aa5ae44ec8d9475596599408f34d8da7ea74202f4e16329e31674cf50e8adac48b62a4d9b97ed50938b382b50b7f5fa012a68331693adfc2f4554e4d7c06b0d4f21cfc835308d67d0fd64262c24d100162582618aa52b196a02853c04338afacc0601d3a30662e4f49a236e2771e2436f8d8c5982e8c969272413fcfb1016c733393a39db7bb4173a83e6bd7bff1f3d6711007cee98c6599afe5e711a1cf2c547ec7d649eec0326a0f5bbe0eba4abc4e6f86133cd4f22364d6d50e370f1165c7610db354ce8874a5d1883e15c29230bbcb2d17079cb690dff6299dcf6ec67f66b2faf44dd137f5f1c95b3241c8f3f60b05aee8ae477b3e675e543fb137223a09995ca2aef6dd62d9029137d9d7e5dc68134e6624f88929eb23d54a602dda09e902e886c3c9a9690a5ca084f09789cd3066242011abd31596e563454f688d794b0bffbdd000484ab08a452cb269bdd316f8802aa45f930f218426d730180d7d10d91a2398ffc942c98a033a4b2ae654a2f6964dcb8f6867f12b39670833248162e339b0211ea4f043259c7cb45d3f37650382a435b2f070b04b8c3d3c32507b8da62c917151a444dd1a66511b9d6510b3a07c26524aa1e54c2660e32aa788639e251ca3a04c06fec7582626e699ffc0d2da572d2d60b89758794a06c11483d62d30f946ee195a4ffe821f12ce60518602708236781c9042e46b9d6a36e3fb4ebe7dca1c3aa067b5fce92e776ba50c634482686b98823a379ac42cc17b9404dbc82b6e65f82747755521e7c9db769f88a5ddc393e8c4a76557224c2242d7ea3c87f60aee5037a150f1e27d35334858a7e150b8932353349dc9f7432d235ac86de6c21e3956a496416441261728a3a63cf341d469511e639ac40851e19c30fb6d5f5fe740146a6384cae6b9f7d40bafa0a645477790ce7339b8ae82fb9efe128b6dd1529d64755150c6aa4b32571056538397a3d28693d49603f045eb11e0390569e82e309e37d90f2f62750bb2af395f6e3145c922485a3709d3c7f4883a49a2f2238d3f9cd9c45afdeede0fed30a8dd4c2db07e25f826efdf692b3afee2f2c67a4af6e4a07778bccd7297497e868a4c70be69e978e49c4540cd4983c3f49dfa258834ef42008642a5c364ad3c57fc60194a2b245eb673b3d532580ff2c13f8c6327d87d06b29f6b7510707d327b9877303c16d4f820c4ad6063fb013ecac87741d29bed87acb61a7f6517d1ba343d020c67b7f6bae609c40438691975501b5b87880e58feaedaeeee8557a1df7a2e553c17614579ab1bdd05472fc7af305731346a28e68488e59c7485507ac5cb243ed6f2362b8712701f1a26d23eaf791d31ff5fc40464d2d572991c72a49b061876e748ccdef0f0d8b526790ef94e7e8984864ba1496e77316912998d4e1c2c4e3bc2058fe784a5676d00e7475b4a409c7a478f36dbf3921ab6aef004763af230824a1343736f53381fc02b2132bcb8441b8935cde7361bfc3f8055164c0c84fb646e501f482b89139d0e78b80d65f228a887c7793fa266aded0e82485921e6fd4b84719249246a2a5995d1823b71fe9e33016ecf4feb1f138a1a2490649b25e3241885ab9cfe46a1f88b683b9112812af847d2e820b0894f197b873a64504de958df621ca0ee63a6b61c0dc5fd28d3dad906cf7d09ead2e0262759fbb808046b18ebb4e2179e0f8fb778e62a2f52516e0a51ed11d1712e26f165f6e51bf75db02626d482ba67b1bf185ea99d2c7f62da20cfb7e3e46edc62d186f132c26a556c1956d1818edb180986bfb020ac4a5a68553db9b4291460fb9785544cbc452f6f802815f66b6fd40e0839b4c43ecfa127956439acf6d468fd341779933ea3ebc8fac226a75fb29fa24837e6f07f7827b1edde4865489714448da849c8b959ebb8782367daa7a439af49a0cf3a62737ba0322230668ee4f146dc5b45f209ef9612853404065ae94852c8d22685b9fff3b2481125bc047c341d6078407fc3250b51acdb1a7f6d68881b34227f7d0d1091a4be4ea925bce4a3886101ed0163343b85460f071f2301a0dcda149af8bf75566f692bab9a154e04900d972423c1a0976ce892ff509aad953dba4a14121ae5644df28bf54befe79726d2649a189a3dc53efddf7e1946830586fcff041fd0814022ceee57976680267446dd0cf0fdab10d62ca547acf9de4a41e86504d307d5a66780a85a83415284b79a501bc8a5e28a70d61b7c388658ddeac78db08bb6e630f02ca180388ef433d25d45e484e79986199d491fbd01ccecad031819d64b5f7d5a365d7bd43c949d4f9992dd0c8d73f4220b125b8fcee6fa732c63ea72ff48b5d90f0f6b1b40d399d06f479a9909f724dd5c7a78d3a540da0713c0bd03173eec3c841b27b973a8f5de4ed259ea4f4e13abfbfb35427c73e9068750d786da07338de17f6735a468bca2032e7996ebb188127871291a0a327b88e45b4036c76cfc822e8b1a35e32c652825824d8a644e3a111a22191ce39141196ef683aadfb5a42f03a30dc3cc9e9970606fb736b2e44b67188504006e38e362d112aaf60f7f13974aba921d0d3e8adc52760b10981ce8444b086b777b4dc93b5445211915941a39179b9d05484b33edbe4720c543bf7a8cc836a6811e7f8938bdda39541c5595fbb6f815236f20bdd023d2bac3e9316d9dc704b68643a997f4066cba063a755e1688b060b4b2faf82033eaa8a4163b859cc19ca02357750e1fbdfa6b0606712e70e867cf9b1b88a3c214b775c1d4f7052688aa1ade2027eaf099420127af1f908a61a204442d8cec635d3c45bc727367331bc2452814fd2e153243cef083cb4d64f33abf4abb2ca48b29ccf0b63bce9dca9f31dae851124750daeb9b9f48dface34342413d4df4a7fcf7dac61bc6566de0e49af03567fa39a65638cda197c6a51aa8fac0613e3b62b2b100a6bf147c668bad7c5e4b8e4aa7b1b491f4068c1214731b535a8504557f76418c61e71c20d3cdb4a7693a141c09d6018f8debedfe9860be28942a3a546b31b290b118e433a887026b0704653d28e4a301f70310936d1be0d89863e4d23c0fb5d0918800047f5419a201c38cca3fd57b5dc9db2e04b534aaedb7762159b68d87a6650aaa9b5d44c1a60a4628226c2ac73f12bca10b161c0443c3eef8c73d1cad8c5243118e9e06d7f1d2bc7a72a0305c578c4e950c9710379955f613c0ec47520e6a157fa80ac84e6215c2b7439fd6204ae09fc2778af589e0816e1bc8ce91ca2d353dce8346fb3b530c724c989b1688a3afdf4870e3c6362d3213e687d0a6413d41b853c500778b5d469c434a614db9b32f0620c11c23a2bcaa219f1b828b586d043d89d393b4bb8ee3c9895389088766c6da4f5d1b5fc331849e1627fbf993b67422a8bbcdf6bdc48e134fc8d635404375d705fa891a45316003f4de2a0d0ce7f344846cd23638ee555a34ce2cd2e618f63f522c7f6526fcdee7b988d1b6761d6f5b3de5a2b916b968c8b73b0ff71602c11ecfbee0e21f7a09c52c9dc3915d6fe805f88e08b5f7d5639af15b0c17d2c6efc4055b125c247cf02262a36c371ceb2c78eeeee716311b84d2610c045878b4f20703f50665be475572aa3870bb399bd87ce06d04a8524d2640770be258be4b421efe2e98497a11057a7e7c45a2d384bbba1ccf64476a88c086411328471f8380ee89342f26d84f1350fa2f69aa42c1f57e396f389e2db8aadb8507dd70f892b4f8519e9e21c3282b2b750a69c79137670542262aceb27dde78f41e4e0427cbb238e6a68c053fa98ef62763f976cac3e46381eac2431c03e62ad38b6bc46a606728cab27c2f9c6ba8eda232793d458f5b8727f0846439483fc2b9cacee1d8488453685d871587697b06cf2f5b24e5c0b332c66d5c3ff4c6f055b909b255194ef40c36229369012d217eae2b8301c28da7bffce3395ed466590b699e538a5e13562a2eb2b0524d0d3366fb7051fd27c4769b71748f258df02ee8aa629145a6ee6de70b0d15d77795c2709a2fb2f4a95966be6890a3d3ea94234db6d64f576b952b90a478d6780be54abdb733ff38a36d042171b2f8b961ee690d1d8084f1099184f720a59c3049e5dc6ade23bcd8e1afb89e45248ef80cf826a52ebc005cd490a7b09ae23aaed31fde44d40686d63201f81c05f4845e1987d2c585fd328705a3364c181b66ad8c2766a8d3f5792a255882d5b43dfc6db0f6f2306e88b802ce07a8b4e5cc363d89781529fb72facb62bd126272cb8d5e3c2a4a20d89822ba055b571d5d3055faf34c96d4038b130bea7dfb762a47a66fb486fd7c1f47acaa153cbec9df836ff69d01f29491c77cb87da08c96131fe48a7699f4f6cb0a5e0263c30c8bd23ff3660d6a32605e14b6a103ea948ff6e33b6331f71d27cf419cb94f19e528980e1187ec671f3ec2b647b15403d558fa804f4f249892770a2b5e9a1d5e4618eab40a823bf75df81a318b4cae83c041e6f782ab8c55bde15bffdd4e91c9aeb702b80329eeac48664b8e01ea98b4b019e8ea3a1b0d1a33167e0c8ebc7bd9348b639c6ffaa922a8f42f4d446ce1e78c4d079eaf060cd8f0ae3ebffeedd55bb9249143b4f641282b66954f24540b1be6e288ce1e66841a9eddd449520d2d2a0aa514deb1f3b30307001918c090e3b08ec036f5a770f76fb098a69fbb327901f7d8177c71a381e3ee5b9c9dc80c313b1383ab6b8dcbac137e6d847f31c4e3d3a1ba12eaa4aa371df1e700385c44ae4ece15c22b9aee16445d7e2eed5190312264e64dc522e284cbd469c63919c4ead24ccd593e554a7b88d103dd4d0a1a704b51feff09b2a2abcbf55ab2fd43c1fe0dbbe4eec124847a58036bd2793d429e7498c2040eee84ed00c1cc3cabd9420f33b9b6fcfe29db3bc3036f8acc176b90a7638941e8e34718b2c494e77065b0954b1ca957029b3db829a362a18a42924db43097ba577f6808025bdcf951453f9090182c22ca39532e5b04bb24b1fde7ff6da91387a991acfa66566ba315cc92a38b2c0fbb4412099831cd65889b433d89c65f8b6a61a10f30444f7c5144959ca90039d6d013232c4b2e82a7e7b62a4a1dca1d0a155ecc039ed1504bb4b0671a434745bc0bd333a2892348471e21cf23e24bac2ce2a663235c6595a004f4f1b8b507220dacf6db5520ade6c8ec51b89620fb95e5fba3dffd4ea7598467f8041d930451697f9942709ee530eb138cd48e7a029c0839b80023ba5e6bcff6998f979e02e96d2566db9585bc9df193a597ba9de0bfa1f6725beefe8634d4a7ed7d065c54bcbf71b47afb736ed8827be74073a927b8e574a72484eb623d08589cfdf92163e8c09ff7189ae759960cfbff2130ba48985971ea5c1fe23847da0a5dfa358d51501beb80846f857cae4326b46d40b6ee888ee7d221311c945d467cef6c49e2dd6bb24c0774cdeb9ef07e218d961ae18c2ef25b9793fef0c01b2a627338d8a9bf9b76d9e8810c31e73c9a54ca0245e926e4c9bc73a676a1c9a590557d830d7970af6c888b4b4dfaa8eb157b8ddd8ff6ce6c3bda58e6e91f3d8d1c038383cc1a0c723a5663e2af73f85f0b64fdc3b7209c597a3a47a6a3948e3315cdbcfac944eeb68bd3885af0acdcb716b7d3868c5bf2e72de66498f87fe5ce3546178661d5e9bb745393bc66323680aa99bffdabbf5979face196b48afbe471ec1f0bd6d6cc3ff887c9c2445f61e599dd8e4196f721b607fb9c370e8fc30cdc669290f564b9ab9686d8f86847d07d0401a838a4f52e10b219645dcefb4c994ca423d9c7f83e99d60b31ca9d2e2cd941c9bc9ddf2368c535d5b70a5a890d6254e2271ba1b22c2ed0b538425163c07cb24f6baa58944d746639b068b253205d2e5d30c4044fff59e5e0b6ffb6cc1f239a13d48edd32c0e8c50cbe6bc40aeb326279a6093e1a8379c1f178dd04d4b52bc2cda331ceac9104aa7efefbb9b8ae1d040ec08560bd63ad4820adad271e7f67525a90db4d138815d6de332a695121507d9dc7e80706868ce0d492f23914a7f17a6f0198a872ad951af6f5e65571f9832bd1f3fe295095690031843f12df79cb778b22ed8bf49fb8d30a0c416df38ad7c655e48c63c471347f7c5c6020d2ae8c5cb4078e4ea2a2cc56fd846a68c667d58dc9495863d0f1b7d7087c0237299aaa6cd89ab85579a68cc8051e082881f036ee995c05218172e3be8383a5838684f3cdc415d8a7dcdbea848206662368d79afb28f4814468864e615fcf0c0643594307cdb687e0d2347730bda831535a1faa2520ebe3ef1b16f32fad161984c6120855a11f791c7b49ef0c0e7c330db5e02cf1b251b5dbbfc8e929f4037d159bd99c5abcda8c2cd24892cb6938f7a38c951f8eadf1ec25caead58ba98893a1c3888e7dfd2ce7aaaaa939062843cc7c178a8998598a18cdd680fc6b8fa9c93cdfc81c538d1cb6c70080d5644bc368f7a82cf8de213d8310069e700e33873e111f439d7e3b17c6cb7fc800e9f1d8d8520ce58c632b500f825321aa4ca8633dfe006544b7ab407096e7fa02e630ab98f3e56b57101106fea8d49c6848043d06cfb4a897f0a8b67a89fc5fd37898d29967da0f1da24dbd715d89b019f1479931079e101d6fa9bdf11bc621f3c76ea9b6d137e17ffe5ff27ffc5262dde21768e15c6aea9e668f421c8ec9572f23660384bbda87d4b956aa06794248570284b221ca05c9e419a066068e8002a0838818139d993cf7f6b47c415d413ef705f56a7465e0b4a7020cc2057e1f70cf915526c6008cd1cf8cfd6c6c4adf0928c2904165232d5c2f5700bf39392180509ee7b1d97008766772eecadbc2e492ef155b5825858b40f1e41b3d6f074260dbfb198f12fb9d7a2bab2a693b22f830ad0345860eb491aad1678de93b13ca1bf3ec0a2853b1ea2b03cd3fb579247a45ed19a2e82fe0a3c2524a14e18174f720765aed72d6567da32122708cc99910c3279ffcacfb16d8bd6e0d7b21a1b582a62b3c740467737a69d1b802fa034e86ea084b32fe8ed0b873514b4437954200f11c5843c04a5eaba53d38fe66d3776f58062823a8ec310f96f564945c1645f73e0b4e85255bee349b996b529f0d096b248ea98ce6f6f84e7ef2e8eac36b1218e2da6d8e997d2eaccd1f19cf0f8564ded4daa365f42ae1e1d1da882985af58e4b7bbcd80fa0412e6e78724699929c4319c15b687230c46bd57d83d5d1143b3fd2179477ba8f70b8b3618c12dea5473bad38915093dac2125fcf1e8ff46ef48338bab3570d23f5a5eaa1e3e087f2b21555134600eba49500e67959695b1606a0844d9a54c8e5acd831766fd31a8ee05d3f250ba3dd86502af90907f91da2e9e65f10df73d26e39826bf24823a70cd7f4353c2714814d928184f00b15b8ea6fd2e117406933f7c2a437912736fecd9a28d694295204ec9fe27a045cffc03d7c9ccdf4d1d8e977336251846002a7d24bde45ec1fc81c234b587ecb64afb15e735c289b22c8e3022f4a155c88909522b8f7a1c8527500678f1387d1fdc7057479c67388be7c7e5a0e62de5535a5a903010f5a76f990f50d0e0c4cbec4b846c6e1d25f49781ff196c6c5bdb57221b2ea2e1a435e4987e494c73d68c2a596007194f4a82b326d1499f526b2ec4b3f107b49413973500ceb18ee7724ed1d1a59cf7e42c7fbd1c8c29abfe481219e2dd203b814ce77ded2d6328f0900434f0c76892743e3971fe5d131b02b32c8ef3d99e6089ae8f5c9f104e9869ba525b55a267b609cd7408e34f7bcaad7ac5b1b3872777ac9ea225b000b61afa27cfde16f1dc1b7d807a081644177728e5bb3364e44191f2ed6cd95dada621f56a361ad836b3c5358a53cd4064b5058adf8f1ce3607ae453c388b0f4d17697dd3f913e0e1680a21c5f4d7edaad53692af1789656f765c813629dc075d3a6d430b20fed7e3e43eaec36ab6adb7d4834cb9637abe65ed3b0e429aca34e3d5dfe90ab3890dc62b1f4b48c7cb98fdb6c463c105bb905ef449db53a08a6edd212309b036e80097d50d401ef73b075240ef503be5bf8b083d55f3db4f4ed654f12c52b4b76ada8db34c9b51511e40852d0cf0c39dac35b44b475416bf311e045720b5b50fde8ea7c63b833c54f7f86812224c775fea20c112eb41f93ba5d726eac1d1d781e31e9804bb6db511d7b0fbc62d23ebdd21a2d39e059dc3460b5ef9839871cdef30c47fc4e1797b7488fe74a8c629715c777e45910cbfe16a5a9d0c003bad2e9497c279fa5d8f072c0af4f1bc44e11793a3918c0ec35120b64d3c810cd5e43a26c9624d8b854ce4c87f8be0bfd452579a1252b3dbe0f411faf40131fb5b6a3628c00b68b6182248d1ab3d129adbdd6be2fbc192f56d831d924c360ed4effb171033929b736fcc90a6943cf0b73ce2a33188eacac3f60659143cba877b13daaf071e2ce2c7d2fa7ca9e4d874934da980e41a09582edd917291f03c9baebc3dcec334aa9a3d34640e08d237b8b110186a33d848407348cc9c1e879a621c83dadf1d4802b120ca99cf95a14155f5cfe60a8de1974148988dc7b7122c3b9a3ff860f577ce25be59836f4a3ef8a3535ea29b997035d1d4047fa31bf2ee8900107715478faa3a2b0e1e3005a0d6de1e00b951009aa41d432d4a7558a067e8f1ce13135d1b306a6425550fcadc7cc56781fd07740a09b8cf6f195c97bac3fc0bd8e9ac75681e43ad8acdb60147a009b9ba797f4f1b240383997b796b2a6f7e323fced610b7afc1c1758a89a36d0eb1fc16ee3bac89ca2594279fb159caa247661dfdb2dc4b71e45e460d1542ad524aa69a66920bf4ddd2cf9b0140b7d6593284b841de1758ffb0a75819072e557d117e75c7f650733dfeb354b7d3181c070d5e01cf6e1a5d9d15470127b2f9547dd6c7804c633d2897d248fb6d99982acb95257b9766e02959bd2859204dde8cf51ac50f5cb7ba95ee4b294d6753f9e096249922a4d46b860d0022ae0e138c384534ae4ffd9f7d832b6b4cdc0033165c06f049af4fb934d3aae4fb8c55863bb8db974ddc0861e4462b59f35fc6b8fe1cc3f15d50753cd03f299e8f2777a626e10301bab2277ed428e1489036fa46305a27a0e00b162762f9fcb59a4a843eb8c030549d232b24f5e0709449f08d8d92ae536bdcae3c5a11ae15538c82c9b7ecaa8c934860dbb9846b8937f50224378b663e6b3f4790031ff3442fbaef256ef3542131986642b7f050a07d8825786a400ee8b3803afe382a0c1989a8cf02179fb1fb4c9bd3b5340305f3329bc44afc075fb714f0cc92613b64aca198ab5d31f15d5fa95b82769d714a16b1a192c22bc6bc010529a41065fca42e61a24f62fcae9a26c7bf6522b24a73dcb7a0c03097eee1d97fd660bf53bf0200719430810efc43ca090f3c096cfb9a625062efb3fa1175a8082486308f31fe752110ffe51a38230ab6e26ceb08fd1e7a83740ea835aeae7edf54739a991303a5e40b860a28fedda62b0c0f32a2260683389623d4fd66fa589ebbb459802c979a6d7823d54440ec9362ec9b656560b9ff41fa0819dadecc43dd13eef3787a0d98cdc0943209fb2212009d4b97e53f5f4d09e0940aca3a17d08794301d481d0ef235def1495ea40fd53bb460e69191a1ecee3fee71a007178ee3ebb5379719419b69532a78b0b0710cd9f903fdee30ef25089b6cfc37193c13cca9ce8958bd93f18f3c15c4618b1955dc630e56192f29ff7bb98a027a8b57c9a612c3e25cbd8c11049fdf2a11e4f47fb08452e5181442c7c852205ceb001536a70b0d6b8eeeec84f5f91dd03d94fef434c6ce99e35f6bd723518bea4d98c7c80ab96edfd71daf7adf2c00a4ccd9d236a06068aa299eda4ed990543d1d8a73f9f4315c19840a6f1ec62e0030eb5a2a6d5452f02d6468ab4038e83a3303fc1c5907d8ae7fdd0bd3dd9167ebb2a81684489ba9917f46d8eb6573ec8319317a8b1c2d22f62d3c5db9f08b6b2363c65a95c1eb7545d84e80a21bce8b11a52b67ee9a2c0d57daa1d86d19b05dc0085555476c3c2c407de265db7d903b2692d1335f8a6c029bc2b0728b8adce289b7d1db3efada89eaf4e497d79b7f31ebb49ae18c135ddffa629c7b2e1927e1a59c79887eebace15b45f92fdc4d46c0a7a4041c5581af7cd306087f30023bae598778e0e7a5c0e74cd5eaea606124b6b3244fbe6ed0d847611160e9883eb6263d6655d470246165f143a46479ce5ca9434c1f26c49d2faab23d4014222e87abc8a51fbfa24a142ed090d5769f4e455331ea1c49ba99d6718c2062f7a15289feda53179a21d9f205c011dec5ad175ece051cbb72375d2773580c677d267a185a058ee4e10ee7128b0daf108e52226d33cf27a6e9364ba67d2b15b940412ee40fb57b118529375ee5f4f9f6e8ef6271c5f5bcc90a87d59ba4b53b80e8eaeb85e6f5c1d574b4b44cb7a70a853a330c8d0f349c13b16c2c9a24d214708124e903e8ccff55c9249874acf3f2804d161ccdb12b54ab56b6421a7ab93b709c1c24dc04dc814f1cc7029e62edc671ab8e98037a6dc464de4d3bacf902042fc0621d68b0349cf103388c3201ba1bd7280d6b18e46239c92e9fee7b53c006266eaa0cdd137446ce86442c899c69da799c142b586b800cb7420010e76d5c4e09686bad89ccf1e262b3440d6bf90341e448108fb2572b47486423d031669a69c47ec80c05354f2fb60b8c2bb980f0522b0982355939e49261e1a6c26f28159896afd13588f3f5dc39945ce2bb435cde1c423fa6c1a955a19e4a403fa09d28a329c71f320a9b39a283adc3aede997e3e89ecfa40b37094fc749caae2c1d5444d2847d18c5e0396c30f544b6f5da6625884769141ba10f81bbe677431e1b8343a54d2b77fb2bf985fba76441642d80e5defb29c7ed9eb7782b7b520d7a605ae31736454ed702a4995f2a52a5da8230679d1f8eb50de67f4dc89ca1c5384c47978a2903c952c998c38fb13af60087346f4304f66e53a390f62ffbb760990f008c0520b9b55039742e6051115b0814568b17af2b0b102d45ad2c16cb515b3cc962d9a1c49a42d0059b29fcf1af298cb3b1986f4c888b0b00c6bb240ff3d85096e4ae7a3816a71727664f581d04597cde0c344bca259e6a1ddfa6cc4e8169c4d9769bb73d043a5d453f04adaf97012bea6d21cd232f8dd4f22a5ac53d0e3cf8ff94f3cfc4b42a511f79b381e00ea1aaf373367f0e64414a6e3776a80185fe1a26b435c857bc20986d71460d804732256d598c7c0161ad07451690d34c76efcf4f79d3ba56445e790f1241e7c5eebabc31e8c5d6e6da36811f2dfdddb943c51d3627b49cad2e4a7148df2759095d16b37d7fd0ec7d2bc31f0139cd37122ba17bc382ece5c7131d5972742b9f4723e2b2725454362706fb7774adf4c1fcb0de4053e93408bfd053f2bc2e660c169b10c6f0d822eff050babca89f96191147168b69e64ea1624884dd51a0cd7762ab7ff5abc67f6056067b95fc70e8473a4cd4cd3203969de8f06ff258e0a535649835a35ddd8c671a2b59f4cb0d3075bd59540b1086b32155108dbbef7b833d4e019273ea04cd775807b4914a80cf7cc46931d03079d0c0e7856a09926b41420b9e5a95c1de346a7926bfb16a9ca255d395308371f401c598cfb0bc408f93fe64042e5dacd19660a238ec620d1fc41218849dcb3d50a2562335a220ad7bd42c5df016268a15a15d36e7fde53e3c34b9ac50a8d5881c439a8ef9927c32b5390090b9ac53e4a4eec627707f4a990c3c9d801a08d449d988146d806a8b208b858f5a02db8d573616835cd6cb2e2297956c45b38059e1a4b7a207679edb447b73deb181ab19954bf644be43540b5cfb47f7347984ac57ebaaedff5e586bb55d86879b8ff953d7054ac4f1de4e93fc212718dbd6ed1eb8c88b6a0b17bb3037f8ea0ca2ec549cc471260aaab5ff96bc5e45ec23954c105bb12ac0296a1983a01b3c9d336ef9d4a990e26e48964f0cd796dc6af52b46a4a8d5a736836bd788368bbe883a8ff3d18e56a138773a2ba2734018e340fa502084eca5bc528ab283ad0607f2e427ca0fecd0c4ad32c40d28a8991b498589cc83fc73c2407b6bc50be67684984c1b2b6effe02c57d551a6d3b0fccf9b354558f294993eac38983cb0a19c426412d84eaf89b03bc4131f15317e2a35302294f632aad309f867577fdda14ab3ab3171419eb72d57c47978682d85b94426540784ad6316b064f984aae24ab2334e313508315013d16d335c7519f7c2423e5ddc2bcfa21343678024c538ce75862831a991ded7f8216abf2d43386d427f52a70fe7cf98195afc871661e806c7cd674313a527569f8bba423d0fb73f19ef256f637e45c5cb4a5f6b544126b2460a74f32313b6e99437ec0783fd5ad9d01de2cc262f6f1fb2277c9d8a6d18e45f4dbb1303e76cc90dc8046db4391eeab14b97f0501c392dc53ccf2717ca0ee3338cbff66f8202176f30271671d24ec8250090a5f0e6492559c2365166cb1102bf9585cce4e13d2c11257f72d8ad6d6d022af9a36c3a273ca3c34ef5e5c935d432f374097f3210fa040d9cd535654b129407563db416bdd0994ae666d1e6d3cd01ffe4a8f650cc58a9c85942351c01deced37d10fb53a54592b501d89f8b8b47df5cb16750f59e318e39150f6eacaf505a6157d099a908fd0e3a0666cc2223a49b97a33d9ffa030eb2186d91507f5a150d23d2d5057fc0a7fc30a08c95e3b4c99f338029a87898a06a1ea1d458ffea74353cc8a416f794efee8386ad1c2f96437ac826c8957bea8cc251a744f7a761a3916f703408893331c1111c46eb8aa53f3b7d52ffdc0cf84df774957edcfd8d7a505773a2a19dde58a88f2cd54cb9f4873772e677f3b50846a33813cf3f3fead2fd43c5bb36baa680d41693c9fc51e852b13fbdec986c14f47a369ec9dc3c962c4f1e3a71541605d9d1be69b6f328378bd2c9fb7b23845189a7ffc4cfd447953d11bb70f0359ad37fd6491aba33081a04fcab8f5fabecf73fcd7a8430ad26bff07c751c8754de8b5091deba9909fb96afec48ea9f831c515976537ac97139251190782bb9a9cb762931e68fc4f615abc4f5d53ebda187ba657a758484a9cb055d5485261df86483f9b4c9dd85a1a42ba062b50a8980c8d05e72d04a156a59a348cc770996b7fdd76803b692fe2ded9aeaeb4f5435a71f6a6d52a31ce0b8e4b074b4268012169980ca736423c2c35504507ede49f14c132626a8597f2af30b2e803aee5ba256e9f3cfff822fbdf6dc477575b2f2b89f8078ca60b57250fe9b72989bbbba0a4263c0c44604165178bd6c6cc64014e055d08b3b835a90baa16438ee0b0e36cb2ba26e28f79683ceee7543f932ccb6d58e97deffdb7e908558c61ae01ca8ea92b6447834f893c418e28642e2f0bd645db88efb2152483673bd3f508c53ec0cea2795096b1f2b8a3d0d453c72dde6769f0cb5952181c5be50303ab13422f1e088eef0b6fd0b0572ced5f5f6c54b7b4af08a8552cff889fcf188af3b9cf8501e856bdb57a8d637ef36195fa1dce826bf19210435666580eb45f03f9e3f25a6027d48f867fd40e5e0dd35ab009327cac385e780f135887cda25acef11b21a246456440afaa060bc031329c06bece5a08b4815dbe72640b28ab40819f7a6107d86ba4d7eed294f24078889ad02f7a53c4f6577fa16e73ccb74d80ca2c0284bcda2923c2c717505d6cdfbe219e8d0641e36bbeeaca3490b271c658cd01cc0e4cea259800f146ac0c7fd750f302c1e3574f76d23b2742ef18b4ee2eb953208e87548ccab0d1a58a86c6e71f82baf143b7266a78346c9da4cb01812cc9cd03b8daa57f5840db64b410699db1b46d67cfe089a7a0f9187a20d4db8748e125ff6018250602622d34515af8431e0a38d6e832578755ff6d43aaa188bbccf6b449c4cd73e7145797b5715f5efabc001fa2319e3c986c48fef55b57a0490d8b94c67af7a52ee63098306ff25ca4c7e3c0dbe08027b678053c72e6b28acb78c19677bcc3562b768e566f8f59e9c65168e01e730d12a0895708b9312099fdbf93319ef90d0f09571a5e3305e83142731c828e4b3d9ee64994b9bdd1df42eaa832629544d3e8bcda28c403e7866eecfa90f35eea2dcbd8ffb9c53a984f0b79ffd1cde59e082265bafc2ae5d49d34588384de481060b15ce81cb0dbc18abd295431d721d1658c63c64536a2e977fe05fde4a437097fbbe88824d527c79d80157ce2b4b4f0af2d95a492ffb4f86d1fd8e693933e51a9a0af47c6a0a5f4ec0824c13c120249f6539a367a444a716153a90cec57e02e7122bea6c52081323f250ddaf12f2ccdd5d6bcbfe0c6606789f15ebbcb2a2513d4be56d40e1491bc96dfaabef048eea7667e4a8d3782386b54791cfd9e73814c1a40e4ba073d00d433c1c23cd3b74a14f117d5a2452616e43eb058ad8a4e4fa7b008c0440a5782c9ae905faf4f18e815601c72e120d974a6368bc45559c5c4197702791791e68b9b0df3fa321b439ca8d1037494f744a491ec4128ccc200162c8716f2fb9986c1a729e403caac120eeb947b21c1a36bdf655c3e5e1b0242ab2ebcf4bac1adfe8a8cbc1e26d9f45ca200062eb3e81148e4281efd0a01098418dfcdc3d35da1b2893441a9e3454394563fe97e0e21be66953d05c2a402741dd41125b16a245a40867ebf275e44243e9ab95a70c4e87e666912c070989f17d23f0a89d2e9b432021eafda1f19af3a054274ccf8841b8aafa42f301b2f4fa61ac9dfe107a36089e9c0e84c1a14065377a5c3e65df4023a321cd220b1a7da80b71d0dd08ace0b39a8598a3547f120bf5870500c28038f204b4fa5e0c2015d9ed73ceaae9ea07a93508fe9052ac25c07916d682178e3a8a5af134a69ac4b78c147769c3979475c84459111a6e36dba84dd29f0db03189a039e7c474ad69ed656bb3a232785d21b26c0a50c4645e61e4a2e05d461ff0ae480995bfc821558b8014497357e2d74206ad5bb9ccccfab2789ad94be41fe3fde75e7534328e91f16f46941229de975d68c02fe2fbab73504040b882dfd39c626ae4355ea97dcbe4ca818c7e204668f1a3de33d88020185a4225ec185e411a2c04efe82af98483fcb04867f23faf2dc700b1775efb2464ab0a3bb963152c2884ad7195bd58c590b70fb9d9d23ae6e0cf4bfbd87ff2fc4d6d4ec49c6d302721244fefbd8b53f9003fe56427b92b80058111aa395e9973a8aef679c0e152acba984957942e1cbbe53c26f43fd02c46c9ca37ca0c6e0074bf58507fad50bcd1e2b64e72bf009887380cb1e66ab34dd17f417de2f4e7b8b7d7bf160d55817798847f42550da47ba42da6fd95e0b71b05a0fc889397da4660091c05ff7e9bda3131d8fd210209883f76898c3dc1d3244b8cfc8b8ff954043d1980a678758ca4375293b5a569292e605515258a8eb9204ab10b0aea991808cd1b70274880d6bc5f90775083ad6ee8f8273c51bf0cfefe5aab0a4f6585dd1a9e3dd29fe638b85a1981de9c1023dc758deb469c6014b2a1bd84fa083e2e5c529ae648801a8e8b99749e94467eaf23fdf87945d3530b7171b0c3748df54b45d8732d1cea418e2721567a6af4830b015e3112d424d2df7f77330a481ab6cb8a9dfc9596bbb2a853dcca604dea997c27342064eaa726a49b765a926c308b79a4915bd2803c7cd03b2193aab578377b61e942beac3d3b0b715e7df2b8c361d559bfc86f883d05e86e6d850550b8926caa701dc281fd01a11d18cecc011eb9c3fec2aec90ad2e2442245f3e268d62bcda5df67e0195b61a76a5ae2850e1f961304b879c9239ed8ff3623285ec203e2c410998265b5b6b115bdda1905f4d5a6ac3986b0b64684eabbca1e07eed3d3da0bfeea44dd6cfb9cd091d6acf602e5b2a2e2721d3ed2000366e57d10fb37efc90b2e88d1a647db178232f0578d43fc3e1b5824221f632a1b6fc96405d1d8348743a5baa0a7c7dd0b53b810f4a84c358dbb72d602dc0a02e0d20289480691ea14d961ecbb341b8e28802d5a32370eef28aec458456539d27484b99cee6fe3bae04504bb35ed4c34ef322f0f46e2685a04c3c8abb78f434b94effebf287aaefbfba20167e977ed2eb09ead25bdcd0294659c1e2c42c9b741ff8edb229c6ac2daa01ec7e72d482be437762486df7f3cd52a11809331f50491e0b09b62a6207adf74bc618de8b6a86c434f114daf7fd071dc41f66c1599612e3201cd83a0873819ccea6b649761e81ec4866b1084021c7b8c1a9571d322ce16dbba92f2c70fec7bf82b28ee75c059482124adde2d4d460596361b48358f71046a1e64f197deee2b160d4fcf0fd4c7de4fc4345e1eaf8881cc135b57556835cbe3d33269d8b765ac073a3403d5be7e53b308f7efbd46136b021ab2dfeb1b2a9b87ca20a128f71c80db6c37aa523b810cb8997c324dd35d8d36637dffb40beb4a908a5c34131096a0398bbf5a28a1fccda4ba28c4db8ab51c5f80a61061ad528c029aee48738cb9d09570a374ec30d237eceadfcccbb46d0ab0ac9835dcc711f22224c43db2863518abf80a36982fc06fc4bdebc13a7c5c4fa5e6a6292097918a43fbb4d0a5999c28db1eafb7447f9a6d0e35eb2d40258d496b6f3ba6a43bc72d6273111cf81804c5642b19b38ceae88388d6d40dd1b6a00ceadae576b9db05dba25055655e166ff3383c29a7a2500136d764f5c89a31e70350677d6caf6bbb1a9cadfb3363c87ca38948bee016a023249dece26d4cc7289ba8822f38958e8a2352b8e33dd7aa9f8cbeabedbd2540895d473b69440876b47d65c61d5438658c0dd59bdb1bbb1a1ed3a003ee7471834ecf60e5428140db803799d0aee1b78d71b6d9a15045b1c77e5df6af46ed1df0aa9c120ecb07d9db064d108849ce9442c11f219e7ec2c65f6621fbe03efe88421d9b9afcbcee8a343eb6b40405d68080b864f9c63f47f65594393c5032d71739b05d8dd73254bf2f010578506a8504076e224651d6644bcd864db1ae4de58767307e82c74ef28652d1241662a29baf245688cd37c9bb9edac5ed9da40e05ef91046e5ece5cbc43af597386c2059898a45d0e18c04437799fca40831f111b74a7002ee3f080196c4e3688e4c72995e772944457ce4b5c7281552d715847c18fc3efdb80fa5fc9d59ab8841503bce57bbbe62ac6853852ba64477930dad057f98e18f3881ea47b84e7165e6aedef5b115974003d168e35fccfa516847bd5a83c1e6734161b0edcc32183214aa257c4fffaa491ed878dcf8796170979a9a25b0f6c6eb0b15951678830d902a8989a1d7f4f12b9ed5d2652d82069f8ce238ed9d488b95fda0079b8db484efcee201b07c7fdbdde5aacdb4624ba3b03af316a4433de51d4a261bd915548c1dca05ed95ced8b19b67f9df3d1b8e377affbca5b7de75a0dec7bc80c68d0f95f61ea0d58b884fae36684f2a6e5f616aaaa4584ec01cdb877383f70f2f4c2b54a8780605f9680875472af36e1ed9c04cb21af9244a9be0358ac481c015a1a36d0aa8dfe6bab73a0398afe532bec29af80b3f2e08dbc716530ddddb5912f6d7664466429844464be0db8f0634d5d5a595c1f60142c739b6b41eeba91119e47b1799c2b332a0619eb68835ba54560145cbb33b28c5321eaa77b83e70e2307b23e677f75d2102d622270b2243c26195c5ac7d81f914271afbdf41f19d82ff1d6a0f4249c27e79eded9b63c2105fa333de135741233c4d387657194d3e5255dd2feb8133c9f70ad099fa536b70a5dbe3226ce6d307ffe88b53f9d57b30a37b1028bde10e3050ca2704e133d3ac3fe16f30a1f85579f0ce917410607725cd22e07dbf6feed00787c303ae84603fa5bf54c9414e3c361a28bc453efa41a6c94f2961d433737a47a5cee4a51c1e11ae2032cec78eaa2274f5eee7abaad12c410faae7026b8259e251315a26324c2fa4efdf91280054186b001985c9b6df8434734b89987bf6996981500b00b0d9ff625b407170ba80a8753d02cbadd7c8610ea3b567c3705f2c43abf4458531c5843e54dd2938749bd4b94bccbfb87c8b9eff945e7bf0ea8f5a7cfca72268e74e48efcd8f9243a163ef93949823dfa2994bb4ff6d27074a9456fa5d9906e059511fffbc9414878bbf9b726c1c51e82589f46eb4126d4da9a2d2de89a12e8eef1100ac0864239097b0973d7236a86313c9107b116d7f355eef725eb7a3c8016605ccd15d1b6e87ed5e9bc778f3670daa67728c4b7af5943ed4dd88477f7a90ce307e21f5f01fcacf55fa6e9a4bf7f4f0e2eb6c3093a27d313b94bc8e21bae00a2184d69a5708ae985a881a433d8377528d1645efa41e83f950ea29c0ac845847c3f2ca24e4c7f87ef46813e498ff07d57e37446bec1d82756ca9073f6136b2a6962aa32a3182eb68f7339c27eff9aacb9596deeae08e8303bd57f2d6884631f114db3fba625e27e67af29e52dd9bfceca6b624cb6ca6b83934936f64525c5d28eb03d8d00119b93e9d863904950197b557245b42e0ebdf6a15965d521255edb49034f0c218419120c41084f92f49ea3037d8e083de225f77a8d37ce508acb7c478613dbab97109a64ea726e0d3106175c57361474899a22fd2aeca154acbc404b6613da1e52ecee8623ea240697e8ac6f63fdcab973b3d80d587e386d11c816d1b97e686c3134cae2234837a2b1b887a33b4368d7fccff66880a467f9a4cf420b3a6a376ea7363e73a75ab82cf3c1a2cd1c860bc90bbc3230479f85164cf83e62ebe9c1f30cea003e3211ea0187731dc37f6485beb1219b79d2d96f6e323d0a18d93c6c9ff1a0862172918567bd0e2c753bdd90482b700ac973208288bd41f343a41580dd0f0aacd4e8f68bf2074d9256c2adadb937ff77ce60d4856e2db0dfa0bfc02b76fdd3285eb2760428e3645d041b44bc4a81b45ed51989ced596e5e8581105fb7bb24b1e077c58a6bafe97e8c2887377b3981e69c6087ed555709f551a9c51d05d1038970416c39648353ab36195c34ff3ac5abc71b50a4ac91ef1186dcaf3b3e7276e38ff8ec70384bb071ba9cc23c337c1787fa330d42fa3ecbb8831bb16de84605e99d83302d497f1ad4e561ed0c92d614f5bf46022e16309bb4415cbf06c2061e320071358b1188f803333a5d348e7ba941d01b7be8c9678caccc4f77fa16daf015a379f2522160a1b15ed7d907e19f1ec6ef5af6e72da6abf1017e9423a9895bebed2981cdf2c770d6b11af65b7fbdf65578df751f6dc46b51b2f40bd9c972484c9d8c82e0cac3b4b18dc2930eaf4e0b2389fa522cdf8ab6b5f7b621cc629900b1792f1cd30d6a81ce3015e7edc6f5c0deb750eb61284e6efcc35ef10f401e652a09afa9825048e610220bb0d45d230ba9362f69cc196b10b419ce2216210e9417c5b8e34ae2b682f4e5cb02c3e40c5252c34a08c712953c4184aa9f404ae73184fd330f4d5672c6a8024676ff2ec46e5f1e6f6ac1a9d94d04c8251af9b263d22df9ab02963cf640ed56c520afa26802cce9058d0c7e8ad9fa0ffdc1837ba94969eac833a2b3dda4254a95b8f2072b61e08ed12bca2896ac78ce1c03cbb0125c17b637325827137470f5eb810513c751d9ec9f10a1fb32f95d6ac2285dd8630e998d022930ace6839e7067a3b990eeb96192406854bd1009eb6c5ede2283f81a63e39691233dc0761dff89b144e74c1301838a2df9b176533f5e95497b281377d0b1a3ba78b9877d2ae5968ad7e57c352240910e1a1704845c11c53c750e9b8e381d81c3004191d1269bf6b4e23465c807020e71d633849495f6300daa3b1f54d25102cb77552e170c7de2512d4d5652ea40924e6b68ca65ea409397d904231548f4dd3522a382953713c9a26879c3262a150b4ddd6911702fdb438a615c76fbf304386407b1f2c28d5baa4316b24d18b523da5a1f5194262d776a90022d2e269369bf76e51dbc668037dc24a6aea7b329b5bf1f3d71b28ab7132208ce7c0255400fc8bb183c23ea04679114ce79a6fe21a07f63b09eabed835295f4a8bd398f7eeddcffca6a27d67c61a64ed77587ee8bddbb2a8195f80f4e713706fea9ec2973fe327c48359fa9b2b22597a188863fa382a8c53c540cbc04fc2973ab5b33fc6618d4a418e7132e8554db59d5e5a10a9e1e91851d2d7da0d6234e123dd508cac8ebccc20a23084adf0cf9919b5f742da39fbb59bb0524055f275d5216f959287ccf3c003180d594c67c51af7cd26ffc01e41e87dbcecab798caa0135d97c562a69d7bce3c31b1f61bf23383fea465fb493c2a53f07c3086f8e6806b29c41e6f6fc93aa46ae94a62f5302200bb1a0fbcb6303a68bcd7aa4f1c1aa5ac8b1b222954527d3ccbfdc6165b4fcb94e700ddc77a2619c68516ec8c6ffcade55944e1364c649b87e45419468c8c987145ab17703202f75e02c640d41c8d0926ea9b227599329a67ff5a9c25ac0ac56b8859a3d9d7edfb146086c7568d23181a25125db80b70e2f4c23614406d3a38a59215ed2e4eeb1ebe74a39ff72c7488eaa6d3756613a11a5613494f1e5cbd81102c1e99f14bd9632d7cf71fe79dc6ca4af73938741c3c3746f1dc3489ba610379f3d9960d575136a31448348c8043413e6e4e59f54cbce22d9a2b27ceae7bbe05ba5c45e120ef031fcc01906c3dce18fe7b7c0c3b00c837b54359991b247650c917d7e76f5a116a2b34fbfa53011a6ad1665152b11fa4f5a5c859dc776a09c918afa6a8cf9f51dd0e7f6cac737377c71a997e39080a6f11e0cf02f83e13bed6561ffd417fb6e787609486afd0b41d5d19d8e0fd3110c34b18a9946fd91c29abcef7b379f75bfc2806a477d713360ea937f9ff80898bd91ef5886b9db23e3ad323a83609edfbad9c5d0d04e6424c5333a343384e9cc2fa49f8c6c9adbfe546c90cf449ba615832e9e7ef29cde97a5a2a718f017819cfad334e36c5c04be969c8470b6f2b859e4416b241996cbb2448a76b007e97f7eda15e9c720c52be620aaf954f099f01f23a99747b4d6cceb807e7f81bce563c540e83620a561615f572f28573ef3d716c8ebc1212ac1086e3db9c1b1c738cdfa951519343b9142b622a874c250d77c565537d5328aa989fd2c4ec0e5ac53e4223724b285fe0c031c1abba0e4ba8909e618f47c2a2c375940225517e7211c3c444da04b14109f2da1d76f0ee1d8d90015536b108863208e316ce2212005e6ed0c733d608092203ad24452a18aad23a389a900ee89128316282dec279246f7d8517a834fb06ada142f633c9019497e55457b8d63a729c3402660c74f603edc9cf9a0b4474fc0bf4dc5f7f7db3f2c9536144a6756fc6206c1dd0e3c106e0b5ad1e08337aba559c7e7e3ab721dd38c9d9fa22580011096b030615dc1ec5409ab2ba049af16ba69a656778f6424108b2144a84aad274263af1270b5a7cbfc11b64a53944dd2d22e4f5499a12d323bc69341ce81142f65a149af6410998dd0cb2fe2399723014063b333b387f02d65687c7e884b4304e30a8dd27a970f25b9297012ac454926d1633e773339015685e4c5b6b3de5055a7cb830f939d61443f1bd995251d19241dcc6e28edfbdc1856c923086dbb7492b34d9f0619edece6ef2e19c97a21e79647f9a596400ff043d12ea658b32de9c66c80e953c8a775a9fba7b8c981ee415a95848e2c64af9cb73041b746d59706350cb7fc903e60814e199937f1259bdea31a52065cb58f2f822a1a8015d7639a7a5daa3695120dde477f6dd81e35b02488d04bc307e5038d8707deb252186f0400e7e4b4c2df58ddf99115d2f0c5efd046e530760016b558bd3f7ba5addb8bef2110ff98ca839506bc4f8c367140bccdab44f6389233163c1211843310e425390e942c9f884096790de3a9186c3a8aa8a2f151885b1bb77b4825eeec6caa9aa50c0ea580012046caf0110ee5461d8c6f96b86973bc4a30b6f2d3da06200507ec50aee091f101109435937b96e8b667bd54d44a2d09c03351aa8047a522984baf91ee1f6032b221414f8c7936d6d07bf559005c28258e9eb64839b68d88ac5829e4a098880158d2599d19aee299ea122d513551571d16857fb07906b05abe2d0dfd3d4a5c6baa0b44ba4f9b386b12a92a553085531d6ceceadcac00411021b9c60580d5a0df90f4f73f58eaf2867ec9568c0008c89ef4c27279097753a007645b2fcaefb5b3fee35d4f0c26277ef600c73be1489d9995fb210d144d74ff98c5925d0af2d3efaf69c3ada3d8321b6f4a935d66f2ce40ff95fe56d0d4a14b3c2431ed8ad0a95a812570c65c036464f23b0cf3d5cf5fb861aa9291ee801d5217b7c5613c604a64a151a2f29ee5d387503691e0993d7927f0f33a01a379bb9040f2da6e19195d065d6b666fa6b9029bc675797f987be54d4b220b8f7fde8401e0c6cf3f11065e6b1ea69f1567cf1a517867b42f4011e8935e6561851d9b47a9b885d88eaea12f37993739da8101540d780f91ae86dad35192ad18e87e2100a97b6264d1c839b67c302ca2c506eb69b65e6d1d3341e0b2d659f5023d9209693d90dd043f293baec9f348cfcd52661a75fa5d402a259e2a0fb7eeab01ad2a95dc02981cadcb66a3a1341ef52b55b22452c0d9f7cdf37840f4866dbb106a1fb3e77950cfd57e13cc0b9d716f447817f13c3442b91f4490b7ca37aef681c96c98a0f24a3086d9dae34d62c21a788c33287824a81b86670bc19ec89e8fb201a3e0dfe45db8a3b36651c2c2b80eacacf015524ac433d51bf105380cf605230c7effb03ae0eda4b0ac64d50968b362f938c7842ce02d1c43107fca743e382e1ab0fa6ca5123853af6774cd046617a9ebb5b9e238dd8b15c644a9524163ce886907d490f08dc84acdb338cee036f9a1b43e46864bc91689954df8f315e04c1445f71b8c3802cd034dc3c4ca90e33361ba3da616fed369bc03f054e3f303813aa537c03a0e0365094c6bb175fa124c1e0577fd6257acb0893f76b57aa2ed1763a0ca50170532cdd3bb8da4c408b639d9417ae287e68f40b50aa13299f3baaeb75c75fbe6fd35a605b3c11af06ccc04f338821f924d360fb353f43bfbc840959511a6028bec991401a3fca7ef2152d4fcfe44649a1d0ecab231783740245d20d1a11f5c2014cf454467fea0a9bb4bb0e864829a5e90119589a863287cf7d3ba839589d713d6560920e1f562fabfeae808ffe079fc482be251b9a2084659e3f21c0ac2c9f10ad2d94089951f45b210faab4299e8972f2eeb63c0e95cb3e6e542f436f167a2be6d60ba8d588ebf1763b438535b0697ee3a377dcecfa2a5b71a3b73ed935591a29e80be2655e184959da183e7a82739f7e761d47d2c076c740526655f8c70a26c2a3b1c7a224923d240095677947133875f44a6f9cdd574e4099b80aaae2bb54a7365ac99597eac654a0a70d77fca48392ecfaaa7e8590a05c64a15d56d7e68262097876064b475b536aa9a8e643d16d3b62619300df14788ef57641725b371869fe1efa3bcb5aebc9ae4bb929874daeb755dde53285a02fd701d2a99762afaa9b17a6a1bb7566ffba2d656acc4464214d08de0ec5368b791bb7fbdbf877e8bdd7c1e22ed33b512e9340b6259f1aee01ddbbd38d4cad4e80ef7f2b0d0dbaac46efbbbf70f3183f43a94106d22242016120357e1897684b96dec2706103e02ad5b290e11f17c00aeeed9fe5f1ebdff04a8c0b7430a5ca3842fb07c0b5c24bb422efcc4875eb61f4892d986b78359eea62b3b7236dce418989feb8031d800f71b3579eed2708735385535dc01e96bacb1416cb568f28d87da39dd164a7b131a1bf02858ce295affb07b1ce652d9a11fe20bf8db6b4d0f6035ee438dff12428338e567d045aab8817c90f3efd3970ebd7c2970ccf2ab0e39b7daf06bfa8d73b4be0d9ed5a1d1dc4517df0f554d8ff9ca28653c8781fed6329ea7fd30f481c38c8d4852610cafec5c918e487ff8083bd01ca848833b5d4d5d0c911e101bac52305cd0148fde031242b857b665ad0ba202030dc4f4964fed34de6b6a5cad8ace7301ec3aa444067ae65f645fd552866a54327b9727eb60623fdcd615089024eba512aaa966cbe176c1734caca0fcb27921d4cd9b3ba6f3b39cc48c47d9cd27196739a6d6bf82197985377394a7b82928c665ce950c0a20a487e465678d095d24fe971f6a68784b787c543744813a0548211e1af7f64221d37bd3e7b80696175ce57d7aa7c00e110f7c324c7af33b00a0c05f2d7da10ced610f38aa64a93d00619f19ddaa9a5c04b0950841f42a1ad5cfea8717f454a53708616d02998739a60edc96c3b3960e4134d3b94c95a3734eda5e3c3c5dd238a4e76517e3226803eb49e5c025f4f2543d9b42e508c746f0b9acd353f7ff217a3153fe9f30ed30d559db615403d46aead6dbac1454a8a5f96db458bf06315fe15d55c42c54f3b7669566d978b2621006ee695fdf9a39b20911f6ef3e95b549ec02e60ea255ce3879723c64c1567d7d86ed9ad6dbf6e19c20b9134a1ec840b2426eae596c8cf93e6a1a5ba705b86621dee38a9d493b33ea884d497c8382f78321c10d46b9b0ad362b56a6a420239931115a302c128fabf8b5f84c142cdf6057465d05b55126ad77566eb417653da98584ce07ab3a25a9059e3957d8abd8d0208f7ced4b0f1991681d8d37ab8071f6b8e62e920751f3bb30aec820298076b1cf08b631c7c96735d5b56c7fcda01c18a93d1e508cb3407733609879287aa4026795608e80863d89a4c4a9010dee4618140934f8e25d1964721266062fd0580e002c039ee44c0809a2718f8a1f7cba1768d07ce2bfafb3eeb1761ad56902b258f04b395f45309c7e67611bfd8d51ff45f59d851124107ea076ebd049e53b0b16d4e651f295e6fd3cca4f29c026819958918317a65bfe76ff8ca9401a439b45f162615d8c7de4a05de99bc1d3aeca922d4832f9c28212a36cad140616032b540c147f503a8622a1b6f165f83f3e34204a07bcee29381d79851a888a38f3f2804f3e36904b999b66f20e0e7a22fee967acba80eb2dab255a68b1da909cbb696253c8d5e33560bc871494b4d0a2f9129af19fe22cc69e32d1eb884a8dfa0872f02e1b13675374b507ae9381cda3d51aa86e0636895e6be0ba19dc345aed81eb6270f368b506aa9b81cda2d71ca86e06368bee1a4c5f02c547081d488c7c620588f5bc2b2b5c9009e4c67802d0be6b19eb0de6a9347fb12bf7c40a5a964c0dfe9a57a681733b7652fb4b706618a38f1815c0de8fb7e9aece665f2d5b9daa4a0608135e037c5f6c22e670c32e82ed24d761c0dff3e5b5691c878a4cebb85ef6dc6c5659b26473dc6505b5ddf33dbb5209e5ef0cca5ebec033be57f422b0f97783996621a6c2fbb0b20b69ed482e55efe5aa30c8230a38cb3169afdba6b77bcc26d011a836b0fd00956579fd4dde941e98253cd770eb02eeef341944f8595ddd88f48ba43aea61e33eed13c2ff773df5fea67ca52014582aafa2d0710e7a8063c9a7e59a7f7b43277c3c49742f2ee83929934f24d5c56152aa5221423dbaddd0b8322a368bbb40271a3fe066c092a3c70b5cbb84892ebaf58b77a6f1e0bfc84643ab445efd3e90af3369555bc9d93c928a99f107cf30917d10e3dc863750c4cd976ad5b9bc21accfdaef4c523e01c1db4644a525a629163f56cb5fb1a5fa4c56ae3f0f9bdfd11b7e37976196cfb3390bb494decd0bbb2fb6762c7638277fa16bc4f4d8139563648eea7bc1da3fae863cb3e5e0a5b6505d8518a5b623c182a551fe9db2ebddbee2d89c7e4e2143c3ad766f318b35e046ba0340428131b8edc3d04f231028016d449dc1951a705ef5cbf577198001371c2b970ad7b0c718eafa71d7742c9441b963983508972143a8ca9c9e01cc2cded07d98a85f79ab5c42a8695dd258f100868f15585c00b5e967cc2d7f9c8d12f72cc94b51d091cec6b9cc5000dd0338911194a13ae82280c62bf6c30ae4b5fa14392b6f679fcb4fb6cb2ad1f1f51226469b65d67ee4c02a6cbbad30b3a3ea1921ea0dc4ea28c482e1781520cf1626d5cc72ab7007ef840b44141aeff8fd4fe2650816e66ac1daf9bc1cf92547e69acc09b6c99a102196fa5b0ea1f14d51f830743a85a14c90e8fd1c446a312b026c40d7c9b97089dbe614e9bfeeecdfaacec19fd584928b90c8a9d84055fc238460f7030ac5a3bde013406015da84553cbd3458f80ea0a85bc8dcf97981f8dbef15b1a0d4e146c2f96c4700013205e5eabf7bae9eeefec14d65882ac99edd57695d9d1e40fe6baa0f58006f3da4dd264827c0c053ef5080f4a6be80d167102d1408abdd1c29c0f247ccdca768adac41dca3c65dbf2b4f0a21984837bfc7cfbf0eda81cf04eb54d41af1143988a37a4d4e8acb9feb750573142449d22cdc346bcbb5e0f0cff2d5ca915dbdefc41d11cdee5c698daddb38224811e11ea6dd03df799933978a5018d05f6fef640ac70d62f9ea504766ef67461f689a35566e501235b4133a962bc76fab941e6b67c3ee19fc9d8ec3bb39a1ba96ba132dd479fc851708fa6e2baeffa1a62dc9ac29a1842b605cfed2eea669d30ea0223047155352049545d147f92caf9f7782fff820aa246f0dd963c394ae5c4352e244fbbf237b4a0c3753aec9896ad3089c1026d5966812143d789d2b6e4e21e1587155b6a929b33607079a7f1410c85c133b15c5fd29afdc04faa035ff66660e2f22a579d3880b22cd94d8d8cd5291af489094e853d7c40ba115dbdf0ab6284f4ae3f27aaa4a699fd7cc943a8463392e4bc9193951d73c27cd35a386cae07cd04fb2ae6939e08892af0ce826504365a752efca47cdc2cb20058224c73ec2234e511559177bf734a58701597215073749c9c84aa22bf792f148f36b8aaec99e656f3fee2088dc4466c9513454adc9813c34b0696719e85581e860873a9ff460bd07ac82b8e42fbbf48f284cacfe87ae12c6e301ba0708dbef1461aec0bbd908954172873d60f051299d2d153aa48ae1d14d5786b18213be73c0f91b882a20832d8168e282067b0488e0923487b708586b4eb7e716dea69edcf9c08ee2461641d015de046ebaa3379a2dd6e38376b9784e96d82f6eb81025832adc646b668c2ef3abe92ffd524b5d079de21f07a78df22a9a93d771e6069ae65a0fabe6c7fe8ac716758c12258f7b98b468b73942e7585b10b49eb96b8cd9ea6a4ddbf2ef85d8141f7e7af9716ae7b7e62a765f2ec7e526664da9086ebc251922ba5d898edcb00ad4a232d6b19a9dda40df08bc2f85527d5e0f7367b240ad60683e5c4291c168f9df125c695321184ce1f6fdb5a2b527fae92ec2924d461b9d709e9ea3e0f8a1930fed3b0cdf88bd60ab0add6757db43178879911b967acc52eba4f589a2c91c4e80326fdd8aa414741ec4732a85f2a939bde45e75a66e317f61c25709d9cdf736f737070a21f0f560d82f31eebc4961bf19c30a75184d161e283e622f877fd4329d24d32e97a130a5254ca8b2f88bf61f9961b00f92361648ab41c12a58cc0168444f53c59f4414f3827c40a3755994018028663d3d82568242de0aa213eb10d43ad8df3ef188bf9574b0e7a1bb66193c4c3400ade174f026ac5a9ca09cd7d741219b7ea8fe55ec23d81c166091175c1e2143034eee70e0a68e66641db0e5f39393a97bc7961481d39c912a523bb5fc485098f91e07b48feb59610e85dec891b0d594d0e992204f18f35864920b0c18ea8fa0674fdc067c8995968d370f1469b1dca0ebf14295eb65cf8d4f01d21cac8766a9d6ebb648c1da872a1dae2cd6dfc128fdb0df933fc9bc8b81d46293ac44785bd80c907ffa9ebe562946798bc4728459ccc269fcf87decbd59c8f0bb8717800ab46b475cb93ffcbae5864373c3ae64fef45e4ca6cf6be24dfe50451577c41f1c807562ee62868f8c2ae4c2becf93f58cb008006743bc4abede3000a35e1ed37862f0b7e2f876c76089d1e21be8c62ce15f32b23e53e838fa5f6bf47c094279cc7e6ecf2a4b8ab801f6e32f79d9a3749a19474fd875bc70053dbda0544d9c7e3dbab8f27b0119cef2ea55691a5c07eaf03a86c70782dab4761d40e26c09c2835d735a6a844264b91f6c1742c9127903211cbadeb8469e9a1042fd739622dcb6376840f00d51068035723208516888cf24338be7ec4313cdab149158dfcccce03e249e2a7963190112cf944cc483708d4383cde21ca4b5e3b2f98bba43421857f33f4872c6ae2879a326e3383068eaf55ca73a6f0e991ff5802928f2786cff0ed7890f09ee4a6f38796a4064a49e06f04fc1ee8834214de6b10ba2e08fcc0ce65ed545b45d250907d02ed95d82b24f644a258ac722424b211c68328b988e377658ab56712a4466d4ac7666ca0856d279a1cbd1220506b48b2a49d1f51e13b3e275b3e39f58b064c8d17012b8a63aa2e3ac547e1aa17c5f5216deb5aadbc3590e96bdd37bed88f441d39ca7fbf8cfba18ee8296cec346d9b63a7ecf348aa95fe6491834b06b71e79721924159eb3476c556b5c95fd2ae9edd068dc4caec71d426e0de3c1416a24440cd418981cdbe26fe57333b6b9ff63c81b2176ae8820500127cb52fcee5413f3a5c5efb286ffeecbebee602b923b61d345b7c06de8f977944e717cf5a96ca26e253d007c9a1b33591dfed8c73518346903b32e66742fc6023e0b5adda94390688a8d54d7930a07b92d53f117cc2e39d701f8faae16b833a9a4555b3823ab4bec8895157fac8ae95826ffc277519abb937d17b8cb2ce328c9a771b2b59a6a26e96a19eb5ed54286ef1301f958a034f79c911d9d7a0ed3e85d657282e6848ea16802486649780d9cfde39da139f9b8c3fc725e97003b29a95c75e1ea73f3686c88f1544c1682213a52048170779893232faa678c28e804d24b912ac9da2e8860f65901b98c4c04dbed7f775397bd911ae4744cfc9a35e90902d2988b1ed43f0379c3c8c3671c3967b55acb2aa3de696a65c46748420f8aa02667b752f6f22dfad0cabd8c474d9496f6c640eb6c200e2e4c1bd938c9abaf08a8c0539b74bbda49c2b60f74c84ef9f7b0b7a54c6139740ca75c161bdd41c6ae07ebbd4957004b88c875085853eef1f5cb2b06831d11a8e4f8fc0bbaaa6168d08981f756b9e817cd44ecc1a50e8f0131f85b7c6864bd4e920d30141b5a69c806cc96785f176ed90700f949d985b4eedf00461a6e5fb637694e827895f31729f5902b1d171c7d6c6ad5330deb2c285b1c088036266673eb7cf74e4bc59aed3d26db4f85246fc0a8ac455633fa2c5cc9389db3c8e4be55fdfa2b08a80bcbc3ca7b8e6aa174b7142ae7d2c570363ddda23ecbd7706540b81aae25c25986c6426e5ffb8b3964ad7e1a8ebc4c8c4d5af8419d32a66f222fc457cc548dce689c5dd7f087e4f538823a0af025708c925caf1876bb88532b98eb3f948dc3bc1fbef522a0cc92a169d072888fbc23dd1278621b0d2c43b8766a38c28882c5a7347fda234bdaa7053357763aff51192e4b7bdbca47c46304667b8509af28569dabb98ca515d4b8787aca8abd44fcf57c996560019ff2b8641df53a9e83802200013a46714978117ed3cc1327d16591de1e3f70b685286bdb283fa26a7987ac26235ac98e6e36e7ad1b33a8aafa282938fbb65819ec11538e9a729401abdb9a60d5e78c083b7ad4a64c1b25ba3d97fb9cc1ed60c03ee28902bac0da6c9f4dc983ae292f003f9125efa1f9e475fb204585aeb95a1fb0ef41fd0b37eed450ad408d339c3a4eed0dc474aef9ade5ab2d1fdae9797212f8c25ff2fc7df9c8a2de3b64b0829af7ff41f5c015694996ccbae512191ce1b32ef5d0dfdc92ca18bc29e3d0df53572e90c29a0a58b618024f5c04e2f9aaa01d41703aaac3e955b2010a5a40e0e4bd2d519e710ed8486205c0ce3ee427146c4f1711135d5ae8af337cd8755864a315442160806c332dd632e04282590cbb044a93e876516a2613b6397509518f6c78c9d30c9bfd437cc59d748dade524a29b7dc7b0727097b092d09577268f1f2b87728293f9ec4b1ac1217bf72f30419928b8a0d1f2a8a7cb80b16ce6639c73118e37056671f701ce79cef6ba3820c20d20eac294b4d3ecee5f9cfd073ceae2b8ee3243809e6808d301ef7c7d838f5d8aae8b115570f739d125649228f1f203d7c788c88baaea987242b9224096371423c6aeb7a9e289c3349bb0bcbd71e2134ce39874222e2d775e538bc628c31f612a1c4b12b863ae2258015e9a3acad2b668dc91c2324b3561cc618fb18e1d6ceae3b9c5c578cc3b8cd59e9f13c00cfaf56938863a5c8c0e1181cce4ad18eaf423c388884a82224036bcb88212acb62dc4502ceb432aa7201c5678911302d2f1e77135616b776153d30a2b7be85fced76ebbddb6dbd21600046371e4b196949a53871abeaf9a2852181b3ab897f7ef07eeb2bbf718e598c5174fdcae1d795af39bcaf8d4d0ee1d9508d2666567c58ecf1ef315e6f3d970145d673fd9c5f223a8cfa7b87b91b73ef2d1a475cda455ee4c5dd4bc34b09181630388a467c572976f71ddee165ef490c4312e3a6f7deeebdc76fcfa37bd7fb81e96aaac8d7928e54942fcb3d8274315ce115de2e733bcdf560c4e9cd280c1c81934564036c09d6d0175604f9b7e772bcbc84ecb154122722b28884c6c7f4f4643736c9988cc262b008a245e91b0eb71ed7531c0ee3a4e2911ecfb2ac11abbfdd6e38f8fbfd46f8380aa60dee7191af5f7bbaae18630c044651158b18b158c7881aff124f087439433ab19242e600f379e2b722111e05b0307e6899d1c2a76904d317c743b03cbf71aca376bb6671c8d3ccd1d18ddf380a047e100b7cbb2ecc9e63dee14b945f0da89c5f18dff50afae9db8de7486ef7de7b7b74fcbdebbdb9308ac1dcfc40024b0f508454d61324588a58c872161130cbcddb6e622484080f18122a7c576e37615d2f7befedd674007c73e243e7cc28636c98ecd9e27cbd096594b6bed11a0fded659226fd3bdcd663c6d3cdbba2401dfcafc0dc1bc19f1c0e4fad6fc2ae15b73cc34c3399e2ea4ba3c6982c3cb8fbfbdffbcd49208590a302932331f1c525fa28052654c3f52665c52674d4917db46d8120626441723cb292b368c6debdad724251e545b24b68aba844ee09ad246931f4082bfdff1dc5c6badafd65a17715ce8556bdd7b57eb277a6b9deea6ee5b7756c5eb9e436b625ef72ce4d96eb49e6fceb94d882af7de7b43289df018df04e0106b2e689cc4f135a12441e2620c85598a10be5be5af8ddf13f7b0004200751adfd6249acb2abf241c2c96bc647045d9da1863bc8220bed6f8de3b8330afa21b515aec08e2bb5b7fa528f98bfff655afeb90218ff1cfcb63fcfbfd7e42dc02c6d8d631c6b8f76bf301e9c94804230b4f13151fa6f21863cec3489cbcc615e3db8dd772bebb579cf79577af386f5d792dc7accda6ca84f057e7a6f79a57587ffb973916c2b7a61900be3d71fede93e89e35da73c9787b99cf6675bd6736e26ff7b082032a70a6e26fe7800890fced2768c1f16fa7415995df16b0c4df0e7576e24daa285547bf2430574a38fe9a5061c8889ae3f376f6f6ecfcbd9765ef97aec7b51a1412e86bb55aefd56a595c7fefbd4c66fcad9d43999eaaaa5c94a83955ede63dbe2a54bb4eede607af7616ccab6a37519b6b548d6a8fe2d2f318dfb460b10170aca2c6985c0cdd0637f8fd541f069e897c3ce4ab59c36aa1aa7ce55ceb2d518f7b8af1c9b1be5d6776110bbef889028329ca77b5a41859d5ab45ec31c6681227e77cafee11994ce65c755d5c25608a1b35bcc28c8e2d3ff7fbbb40aedcdb4bf41955b668145a653ceafc7c8b223fa35c9f736e5122f428e728679c6b39f7535985e324db32300333ceddcc1418e36105c20b880cca979163d946cc6bcefd0c86209171f92a296535e70ce45b533976e6a33b7376995eee34d9c30fc4b766543007c330e518e08bc715370e87c3c813b494d6f1f23a84d77a07e9f5cef1fb304ae7c4b32c9b7f8e7278fcada7b79bce3855de96c2db6c5ae3bcd658885bdaf3dcf36e8678de537ee3e4390e0e9dc6406088185feb69ed64b74683ba6fd3c6f4697d8944b3edf0b8ffa81e63fcf37a0c22aa2b2945fd7e7e5dd7a36b738df7a80a019807f91807afcd3506ff347245f856e64c070a5f7f8b60867f8b617cfede7ba17e7f838f26af0d46ea0f3e40bee498224ca1c494f573e43c1300c415019cf9e8f0a9abb09e6a9c776fce5a9b413dc618731e5c7e5645288ace80a648b1a231e628942d5d9901f92d42848711a7232e43303e29677fbb099cc90c07534d8c8a5fc48a65272e908d0ce789c2a92ebb9a903561cc59b41021848493193a7c6061edb1f61a81e96fa97462a2f06d872e609c7861f2b7b3ba658daea6282e437091f128164591e284c51a636c42750912a14b130f4ed5303289b10d97a0bf3dbd7d7339b2f80c1abb715e9b8fc68a462ec7000f27b0265756a46240895286b55633028a5b741c8b6322929c9df123c235a2c88593b127491c6b9df351ce9cd74431d3691ed7e70392f0641991741d9172f419b162ccb50cbdeea9d623c26e9ca7c59a24e0d4ea87a6a11658b69439dde038c1ca5a394e6264d6aad647fe0ee0efcd39e79c495842b9019483098c8baf8917aef270529fb91844460bda6d42b5807235cf447b5e3b0e5c9b2c3c6d525f8c8fce6a72ed154e93f6b49fd1d37a0eada93dadcba035b9d37aefd2ba0ea5f1684e7a5b3e4781994a111566ec733747505e8e85a07618792f3fa71e8bf0185f2c1476b9e6ed3f312fefa8b3163278987310563651f0f88b228c2e6724c67c8d532876b6f941108c7c224713f6a7eb33079ff30853266a9cb86197ec54f896262cf1644aa8fc7991a14491bf4676fe40a4e3888e302066386531e959da4a1c8190b580c011ea7a92ca89e2cb572378e44e2bd9cb8ccf558d44929e2ed842a75044e5af01fe92203a31d2cb0a1e11454c566498f0ddce5ea0257fef3522b33029290bb3d1bd426d4c5f515009d0959b153e62415462f8ae92e098edb8f653b7575e5779ede63e5aaec31095047cee9b255af1b9eb8896fd490bd7d3938d253398ac7a8870434222e615d6d78f132558b84ef8aef14cc31993eb200382908d27433a9f3babeb3d1a0fa6ce47eb76e640f83684205209c1aba911388442d0985b48425204e99090caf1ddcef614f97bef79de7bec002b8aee5b137e70a44cfd6801314d015d4d05294d057b807438e89a340815116b1f1bb9299f1c0f34bfdfef269b1b84909af6b537c97a6cfced5962225a7385787037b9f3761c3045d8f168d01eb2ef56b82f805d8b7e7b8d2d6dd7ea02b06b71478fd28cbec36e05bd4f0187de41c74d380a35d2e2ab3f3fe4fc8ca6b09e8a6050f19d27d4eef23ad8b5bdefa09f1df4156e073b0e3defdadee3f6fc944337d98c791cecee1507bc179c9a8a740c511dc979226e99cab02281a844b16104690851860e85122b70628039edec0891b2be50a5ebc4951d5464674e9f3b9b875d54a28e97e016166044ad20346412c30a234c2dccb0cc606a7a1ad28a6642c90104054bd889185a40b47eb69b760e7d4d77bbd4bc361bac5e0415854bbc847cf9c73f3d6bb2b9dfa3da7b9503ef1a8bb0e6c9f49cd76e1728bf9c38411464f2e2d34364894fbf6449418485d712a00b5fde6f3e12670267f428ce07177c14277c14f77b14077cb4b3c46bf321878ac9ca4689174b3a3e1fdfb21038c125858ca4d8d3135fcbf6f8969d822479144ad1e4c591af65797ccb269563ec92351bb24c6cd3a33558a547d9e1a3ecd1a36cd2a3fd86bc361d8438790db1b4eca0e25bfaf696ac810142098816625c827ced6dc7b7b72435b09256f80081ae7c2dabe35b1618246285ac51d2edc90dabbd19b9191fbd1d1fbd111fbd553dda6fbf6bf3428f295a8e7ece4c18c9f1ed2d8519663e9048b98243e86b6f4adfde96523c54660839fbe26b6f38bebd25292ddd868fde9a30900c036d668fdabe6cca476d4b22f2519bede8da64e0d850110492224c6e7c6b338f47285d435e385c947cadcdc6b7b60cf04011b92a9b2a0af3b5b61adfdaaa8cb62bdbd186c56333c16333b2f9d8881e6d6dc2476dbf476dc0aa6352591b33f16d6d5933bb216a4c3744ada95663e9d1b6367cb476f4682d29b9ac018344538abead096b4665b42765342c9a11dad5a32ded788334e2a3b4aa473bed776d68451529a88498580df9687c4bcb02aad14423cb8f1538be9636e35b9a10056650c85e50d91932f3b53419dfd292949668439ad6aab5ae5feb58866fd76512f9e89a7cb4af47d7c6025b8c568c95e1f840f1257dbb26c52052c191fa61b58389af5d95627cbb0eabc8708a43254cecf0b52b8c6fd72ae3d5d9b7ebf1d1be620d594d0c598d1e5dd7e0a3abd0b8feda15f8685789d7e643931728a82b4a599646be17dfaa558f9a57ae00758061020363e86b5517dfaa49e5d8966fd5e5a3aa590e952947d3a36a0d55e95175a82621af8d492599c2e7ebcad31626a46f79d2005ac0273d48288958f85adee25b6e43e4d16aaa4a12e6f85a95c5b72a3048a40a552313fc89098ec58df0ab47f9113de244febb361f92a67e5dcaa0be9a283990052564437418b7302df95a1ee4c20f2b4014b7bc6824a9a0f2b5fc8827292df1216f423719bacdf6d71e7b742f5120f251e0d1b5d9000a273825c024258b8ebedd4594cb27ad628ab0a2afdd2bbedd67441a5b578ac808a6f0b55bc5b7bbca78f5e8f1d18d75659bb862d46e9f1d7cf444815529c85076210251968588afd5c614dfeaa34e2ac788dfea65ccb7dacc4a335935b5bad5c3a33ed2498ff68cbc366617d956d3d8138fb130a36fb35210133047902c4ba2afcd28becd1f60493d9982b1024886afd527bed5c02091166a2322f909913f7b9bb11eedd948363e8ace9cbdcd4d8f6ae86d8e7ab4e7dfb5f9a05336432a0c911b244913df66e087231c3ab2708425b15af8da1c147e9b8525b27055f941c329cb8aafcd25becd4939becd4a36dad7e6a51c6439cc1ec55f8f62e5a3783944e2a36bf341c7160c2424564a9650f9487c8b93983041218db89a51c4d762a52ffa160fbdc06e943d9e046928f95a4c7ca26f7195115f257d8b8f18cb04366102c53e4a2d0e3eda5b2c3cc2bf0f398820844f3d6e888abea16f53311ea31650c88e9252f8dad4f842dfa647a7104f623029d15254c5d7a6c811dfa649e558ba4ccd1e0591329d20d2a6b4c6a3bd4d87c0f4087d410da81e2050bf134682dfde2405ba10415a121a76c1f0b55719f4ed5d7288a103ab4912a121115f9b027d9b0283448fa6c247532314dc27572ed63572af1ebdc7165c22daefefda04c04a982834b8843850f87ebebd4012e0b8da92e20711a4325f7b833edf5ee18fc0cc49b9f32b5a2ae16befd1f77c7b939496da3bbc4d162033ad5033f40b4d1aa255c62b293a281602501308f813f57934f8282a7cf4f7282ac325e8088ce78771c727e2dbb3ea98548e9d7d7b9afdee64da353ddadbb3066a721745e25510d3d1908fe75b33f921e88988d60b9d292358f85a5309fcd65c7aa9a2a5458fa3232e497c3bdf9ec060188ab6fc4fb477c0ace1267b2550818b760e842d7de0107254b461e643fb46a740318282c718f2e8e843731ead11e5934487882c28ca7c28cea39dc6040f68cda33829438e739e81c770112011b2836be05c86732724e7718e879c3b193def39b466c3f3cecbc0831212e273b95b96fc5c0eca69c7c7c4c4c484c1fa98982059368fe1193a379194c00a4a4e4e8c1342366ea448e99818ae81f30cddc4750882e28320504b62327024bc9b10d3737d8dc9c570f4cf9e2105f4035d530e109ab01e0715e4e671b80c3d8673ce39d0d673003ccf90e3f118ce17907b5c37593c0e070524eb714d2a1e87c3c3b5f7ee0ab672b0e2d675edba75bd61e3d775bd417c1c2ef82bde080102af393ee76b2ec3ca39ef9bc3e038224b690a92aa113e7e86784e64c7962a4dbf1b4b787c1cc4732a4dcff7f3185e4c861cafdd389c006c1851d9d8d2695843a015050504162613477cfcfc3d17f1e539e7750d1b8e1c7c9b2bd2685263c6af3642e830508712e17c729d49257ee2f9816f18899198632250096bc01867c0b89f419d318c01639cc318e338610c18e3988e31f67a330a638c3b4be231dea061ea7138201616873e0e8744aedddcf9b5a7ebd34e945fd735653224051cab1c14394a1d268eb3f3197a8ad6d87c860cec8d8ccff53497e39dece601781e42f9319c43cd05bc129974962752ac187b3a1206631c0eed15e9f0d3220282c6f3ce8258f2bceb42a8e8a7ae7b80e5a3c1e6214c11144f3f1950182b078bc301000c975e9814616ee8623ef85862c5845359160a216048000347078a22a922893329c00de7062567589e83f1218241ca9931267c914201843824c887190b3b582085b81284c3a48c8a51c7e172660a6a0e2aa3c28fe7228867374ece39e7bc83e73138be729e428d0cf18bf28417c43224d18cc425b27db39dfdf12cdb65d01adcd9de635916eac6ef31c6986571ecea940375644a940f93902f8fa3783dc638169f391b31765036aa9438e79c73be624d51216a005254ae486d49497121dd23fc05424c2929a74843890ca86adde6007a3a8df5035ab8948c01cb6c24974120ebfa14a6ece00671abc97e9548a29a12572348f8d22ad8cac9a5825393125b6092448140b9ca9860017a3165cb74f24405a266f45aeb8ccd33c39b524262980846c516a51cac2a31a608f9cead3f83fbc3d0900a32a9a0ab1d202a433e62a4868644edbca5887e5eeb9ed5ec80c4c8f1d39ed3490dd9c8a912f1a94ac84779e2c64aebca92b01a462f316e9078d813f326950fb24f75405489085204fbd17366958093dd9805a52c92ece2e13ba7fcc97ef811c21182591244850929bb225b8666c913234e9c582e7c097bfc6c71e1037946c156f489ad68d812ebb2427219e93aa180a04907aa27a82c8b922f7d727b966ea87cf0bc7e93ca478b54c7e4c252654977a0a8ca785440e11dddb72e526d79ad79cc940af9fbcd22d591cdf985797b9880d29dbd78a44e40c5b0232916377ab4701189e2a7afb837a558043d7e538a05930d9af45431df3a2b20ed2a8f457bba5c4ec6f4c1e5e60be79d80a531126031ae0ab91c5b6e247be90d2d505f5a438e865893af335c862425b2cb1635f7228b5816af6d43ca8203f624a6960bfbf1a284961e81b1186ed5e86b092c87e6a909afaaaf9d2381054ad80a9e773a74e52b6ce360320c589a9ae94f92c49533ae6bd9cfa5ba6fada7ac24bd0ef3699db199b5bebd3e4d53f7adf554d7d2eb319fd6196badb5e6993cadf5549521afbd7c5a67dc65d2379f44e07cdb6936018808693982b15872b2a2e8985ac94921a87e2b787e39a68f9ccfbd039a6934b0397893aa87f1f99b543dcc9ae84c951975d81c11d5121d153a8694969c98555c7e90ec4861ba12f3a54d80ae5cb0263e4b38347e80f834130284a1fa02c24464d4f2a5574f5a47def6e693961016a349769b588b5089d69d9df30ed63ba7505e74529db16eaacc87191e73012ac8526aac8716d092bf802d478573ea2ceb7396f1409aee37a7c29cb129bae3752a39fb0ebb224401e668658567abbaf36ee63cee69dfb9bea6bb9f3ddd18638c31ce39638c31d1cd470b38b523e705081fb62a7ef1a853662470ce792b79dc7318e39c33d6faca6badb5ce3987c9ac0b284a34f1b018a20284310813ad90e93d9d28c625644b42387824f1dab17a391161adb136b73029a7688962e115f46924af3b7b7cadbda4bcd63a63288ed45365c8cf6f16b190d54ee00d5663efbd7477ce18e32eb3abb6765185138ece602f680c9b466cd9f1d5e208988f1a342ea7d4834934a3d6e2171958095da4d1e7cabb89a5e8734f77aeaf5aab3d6536785410053951761a5191b1b818d23e7a90517aa70785a569f3f4bacceeba6fbdb753d34ec65880740f8d59c5be397596e46d6f16b1fcd42cfbecfbecec799e4026d6881652329251967a8a642d269dad353cd3948a8bd7a7fdcd272de1ab6f3e69e12e1a7caa9926e4f7efbdb7ba93417b67df3758b39b6fbd7737977eafbff7de2adfc9e4508a0a314405a8cab789fcee6cb1a9eab7916f6fcdeb655e6ffb9fbdf75224140d219d223f4dbbaecb149b5e7cedcd6293f0db4ec3f117d3024557419ea084c182143604031f489c39013d254d00937cb94aa764d3400dd1f5681fa40e7c9c7ab40f089eee912273d333b5a12747861e141a7a78624498d538bc4925624b4da6a9afcb11162d59923d4a49dfa5fad9392ae8ec0158ed4b080d0583fea28414c2450b4bcc87a792a44b768a3e682c126ee966637ce231fe49d3b3779dbbfc7cfef1e58c53f54d2a2e5fdef62615972f9e85cd6c8229028daaf5554d939b9c6734848cb1999a1dd0dec933cdd4d41430a5b038b7b99b6fa2590a7b76749bfccc4bebdefac43466b739f5d9d3d46cefbdfbce983dbdc189622029d450065039ca81b2254897a5ef94ba4053528923198fa7ae2d5f8e6a526c42d5c19b5441a2340922b49a66cdd9aea879f2365a93027a9ee77976b39f6056339be7b9f4c1071f7c80f6343dd3db2f7e130c4dfcfa26d510482753f1497b66ac2c80bfe0e79f09a0de799db3d11a93ca5318b36f7b217c9aa6595c3efdb4ebd6379fc25461f58de36af54378ccc43f0ff0662fc14c210b4f124e9bb3abc78a0898cfecad096fb26a0740b7c9740881e614668cd79e3f3f615b9a6f5f30e144d33445d37ea63755769e869d24ec6e4f539c7e7dee681a7692903beeb7a7ca5489f6aefe5cd3cd9a0b1b3ac63b0ef00f18e31b6fb9eebaf39e77fa248103b77e06792ed08fdb0f8fb9ee2ba05f02cb77ad87e73d07b5d65a6bcd6b398ddd65e0911d9eb506641fb4773260fffdca4e540f9f857bb3598891c0ec93837be7782dcbea70bcb6f3dadeb7d748e3b534b46ed2585a8c8b2143afcf173cbcee672d02312e8608bde67590bee675a0fb87d73fb4c7eecca73560fffd324570c262255aa3b992780cad59fed09a0e2e0f5fad3c7cc4463c4477353b1c85f6cebe6187abd0ded94fc0492a876ed65ce0608772e071cf576726acda5b3cd4ca3b6353009b0f7aaac3d05be4b5f980474367722f406ea3336d87bc39f4bbd3d06b3b130b3d3b74bc7ba1f71dfa59734143870670e81de872125ac3a19f3df33053c0429384b39f2a28d1d5644b138e183a7c67f1cf9e6b6425b4a6433f7b5e325148ffec1a76e99bf8848f3fbb6d8775cf3ddd49a0022d8d0d727e81e6f8d983dee50ddf919f82b477b40760c3f78e77bddb761b7edd09a0b766f1d7fe660ad7689270f65d1f40d75043422fa1d3f4b5ebd01a03f4b577406b40e86bef68cd86bef6b5f7d09a13fada43406b6afada69d01a0ffadad7ee01adc97ded2aa035b7af7d0513055e5fef0704e827017a861dade76ca6e90b34bf029aaf55e073282dd769bbf67c5aade75daaebd069a80d869e73df59786d30f0ce7b93f72aef98195aa3765b3f732cdb31ecd4ddd537a62683e941af557d4c4f6b2ed46099f7a0e35a046ac0640693e0e7782fd0bc077d3d69351eacbaddf92760e8f5fa0aa86e673e08bbf3375c630166fa4c087d35d911fa6a801dadb7553158e1d3163ecd696f716f47e82f98c7cf7d05e6f155133a4ded7797a6e9e61eba867e7b07b46683ee845ed36f0f01adb1e9b7d39860a260eb9989872cdc1efad9b3301be53cec72ad9699f07ef67b446b34d46c7626daabd99968ef849d89f674bbdc37ecb286dc0eedd97646f447e82bdc15505a090648fa03f411ba09bbf6007d848e6b2e94e02102361822e442e90fc07bc13c3e4d5f4f9a0176e69740c37300dacb24ec54407bb98fb05b01ede52ec2ae05b497791ed05eee2ba01a76e68330b3c3b063ef4ceebd9d0eede5fec1aef706b08bd94900ede52eb3ab00dacbdd835d06d05e7cd7437b67d77a6f0ca5a5e70655fafd7e43c423176c422987bf85cf25a06247cf0ca5a3a219be5d2666c450624c8437239a4d4bd5b588c6316def2adcd78db5d61a68739ea942f4a878a73a36a7cb49ba33a6c6607e2eceb14b88b25dc7e67438407d7cbdb5d65a1bf766a94054b1586b0d6cc04d5077fde08cb3ce78ab623e3e2d49543f202a6d6b2a5b5ee75e735555779764176597a5979f17e0aaaaaaaab5d6407b6bc7c6d39c6e59c59746be3cf225922f55b5a7aaaa9ab4f95602528b68f92ae92d1636155dfe92b4d61a08d5790b47d6a71724e7405a6ff1d05a6bdd05686e51d990d1f4e5b4b5e3d35f5ea76442220fbac4c25e6b3e236bcbc90b19525fc67c9a4c6c872d6aa94cda7cf72734ba465b77b0dcdc69bacd82abfec034053442aa0a94af15cb265d38ca6cd983826b5e26e339e79c73ce3937d39a73ce39e7da83194524440cc1c0f1c4c7bd3cf782f39c6b013ee75c6fbd6b6737e9d90e0a9e59ecbdf73633de191328aa4cc8cd946e38d73b8aac06500b65415c0b25a19bbf2cf7862a41867c02fc02d4a215fca2f4d577c691575a56d24dd5bde67c8819111c223e44888818117141a4066d5579b4ea836f301a77981b1650099e35d19635481d837638125c869c0ec73188f37c957ebf1f8a2cade6cca862d23128eb2c2c194391a62251458c14b92a825584abc85726d29a2b7fbf5f509632c72cdf8c9291b4b4d2f19c75c6c3b140aed0c05261f1ac55240f0e59df72ba19c91d9e6bdad623e977cff9894542c257cbe9acb8acbeacc6accc94e06cf6da742497084df3804c4f47edf0f9ddc3f67af466148ae4d115adf9e65c6bad4540edd0418988c82e6a4e876404e90a090b890be90b690cc98c8df20507e9ccd51bdce62e90e88ce962bb605de85ef417bd17349b07e94c54db22c63647832c54adb5d6514f941a08034501d6aa8068e874cee9869ab48a1c344e37d091e658ac4eaf70b2e6ea17bbef067244674ce44eb24a1d9065fff580e8cc6ea129e8e17757599daa684e1735a26aefbd4dec1df4cbea99eea82323bf3be7377eef1b2e4342942b9b2713a9e8e828a6a3df3228f372fa5221c449cab7cf2ebf31d7dc01377ca545b16ac6a07550ab3c5ad5569ab61a73251985f542dd396badb3de5162373eda8a8fd73dd55a6badbf883448c6215e4ca0902ae1d35c885a66699422135a6b1da49c82add458b366d37d65c8b915153b9773ce397b29298f396b9d73ce3967ad75ce3967adf7d63b6b5bbac380359e35bfe5bdf7de5b690c12a2d1d29d24ee1d2b393575cde9c07e3e5afbecbdf78e0e93b3aad35a8725c15401d1c28676eed8cab11cb956b58f17dfe9ce52b5b7cff5d9dada8a32c79881a0642c412b8e733ab0611057f72ef27bebbdd9bd7772a9d5a0ac7794be5980bbefcdcdbe7e38d79a6b1d8647415106f11e403a6c7867ccbe35d7515d4aead9bd9477c6f4da52a394602332d75a6bad35e77cf3cdb3f5db2d287f7b6b281d5d7cb8e6bcd875b4454511e361a18631a843ce3c4bf9ed1d9615ec00a90ccb12c44195651887a31fa0aeaa68c48616b28e6088d0801ce616904456e92783d632c8885c10c9080c5d49593e315b462f206e8a52962d3dac9652163037293f236c5c431541b5a10d200d0bc903b8563106e951b79255233817f0c9cf9e82ec12a1b5824a654fd6aa5296e17457118af90cb5c085145b31428a524c29a805aca39890a016a808c590b420c52876d5b70748f28a18aed6b476fa4267cc31169ccc6879ddc99ce760d1bd894b74c6fc0159780a6acd757eba15875aab7c8718c5588342a2336652c902d4b2178b444cb33e49d1b51f4dcdeb0ea74a4a778a53c7bd379531dd37c6709e12eecd934655fd80572a08fc4173bae2b2c88785296310164016a488442550dffb0957b34e594377cef7cae3c98bd1efbef2e30b7f9ceb173aa36c4ec725f9bb6bcd376086cc21a52bcc8696b11df78648e76086d3d48dd5f8ddf9f632b6f7d65a0bb956faa4e6931625e3966589a7250a21cd4a23b3d16a412a6a53b5aad5b5671a90ca73d4f3bf0859003cd295b402a60894161a2a0fa227b21fde7bafbc27236a20c571b802084b4b0ab1a3952aa70910de3ad8ad39e79c73ceb75eee5f1acd14c39b442c2856a355fade442ea44b5bcfdf9b523966e7eff92e3714b6056b494cc68ca4d2ec4ae984e1d1e9cccde6885a70d8ae5e2d34b4557dfaf2a2bbb4bed2683435a75907e1509697a3edbdf70ed747bad3a4edd54b4f2189d83a0f31f0d4a9162e7e839084ab8709620f226096944b91aa86e0793dd39a73ae53ae34a1de7be70fa2ac5ebee854d1a5e99ea154fcb17cad35dfe6158ead11e459d57aaac5d76badf94e6242a1b5d65a27557df45af77d761949752793e3b59eaa31f55a6bbe9380c27ed250eabd068020da82843a27fdf676312257f1f0c130804f29d29cee8570ca896ba61b097967ccbdd44173ba184474c664408caacd4ee5802162800be29d31f7948ed090d69a01308e77c6dc5f157c2a3bf6bd0aa97aa581e178deaaaa55cdcbe98c8477c6fcacae7947e5991b01b36a7d943c521e2d59fc386fb1e43a67ae33cf5719ca8daa796819057233a93202d4b968c52c9677c65c12b2e185bc91f50b6ba1855b74fd047fbf1fcfd18634a7834aa1acdaaadedbc7562f6b429d40fed652d29dac0ab1a12d883bcc0d3f92cf74abc042674caefdc58ee95e5561d6557e24ef108f2c515918898ec31e2347ac2891c05a6cc13e64ecbc88e3862c1a5da3ad561bffaef158b497d3349e0ce1babb522c3b62d987e55135356577ba93945b67fe43552fbb733a25755b69e218d7d6b9ef241cbf55b4efbdeb7940a637ecead18d9f338077c67cdeb58faaaaaaca8222609611f14692b3afa3ad89d28f0e2a29c8eebd6524ef8cc94d28235393123a8496bc7cdbeb776787bfa16648f9e89c04ec32bf1edf769a956dd1b38737a34e95af80a37b5773ce2e867b0783d29c0e697967ccbd62e8c2a8ba33e6d691026573ba18c618c7184896bd36669213a78b1735cc6bc36aa89c2baf75d7bd9b28982f96307e68ce363ea4a33b63fe466bcc9c941e8fdfa4da41fa96edbc686b202458144d01214328cc89e5070ffbc3449006ba00c9f2516235a48413a6246602334ac0189821579438c66e9c577e24a9503f74f0403161d132bc09c544f5f94d28a6a79c3e4112802e61d5108c0a24e5999c80598c262ae310c4ce69259df1a3ca151761baec746589a2a4872a9f49a8b4ea9ccb62aa8cd4cc0c000043180000060071284ac338cf52e9ec14000f49b04c5e50349d47c47118444120043110c340106308304419a31072cc958d00305b098a0122e004eae9ca68267350d4523e4f16046c67d1df425db2083ecd361abda160cfd75dc59971653b8b71b07a597b5acbb237c069d93ddb82229a91e39207697004bdd105ba28be53579e674f46ad103fcb2b826c81983621f7131a955016a73e593555d8e9ef5039889c9ed2c5b8781f295397f047e5bcfebf89c25554b17e11851c1d262902f7997e7f68914d09ebf2fbfd46645928898af6d0a8616311378fd218c7c928138476913ab126df4e4fe1bc4d9ab13f9688ffdaa01663e02616ca3b0957bac32efdae1cc9c31fb2cbb0176dda133041704f47f13e24bf4f0b9eabb3b9e8c3a02148ee465846cf8ae1b4b53a725b0c649e200746523fb8257c1a28d03d3bcf5ad4da24a046351cb0f80dc4fe031208e81d265b83cca521e9756ce270ba2096d0c128568932cd24e7cc0a71db99b306b148dffd349af281669ea02c84a68962391240f37aa7cfcaaaae05df471feee4f30cdb4deb2e061a326ecd7c947949dc20a71ae2de19338588789eeae92c42e6c39a6c5edc400e9dc17bf7964f9c9c54661dec60a0c88887ebf7170e535eb831c64c342866763e8ede2c1463c7f58f9575a1b08aa747f13e0c9c84807e3fc8ee43c650c2cf4b080426ceab04323990ebbbc944ee98ea4e834f927e3b8a05396a31fd8af12a07f708002c2aeac4a6003916809cab7cd84cb7ecde0c73dbd1819d3b71a9f1bb8464ae9c49a92e204cfccffca92a7892c161107d561668f341125c7e45aafb059fbf5080da2d53e455109c19bb1cdfa5d99fc35c63b2c42e1ba7b8b7c155998efb4d54d7cb9e0eab0c8e15a86377ca320ad8a9e4c0d022119ac2c2473f4e30a4e7beb38a078b0de4044492e81e00e23fad800ddb1ee25e92d32088b4d577a54c4b5eb5aa23f5fd670f73c5ae910c5ddc3473ff8f7ecbb18b1a9a183be2cbea2dcb86cc9ac49add30ef61b152635f27efb579d7dabd9327e4d59109fc60959b14e918d95b75648ef0b45d8d1452e480a1599eefd99d73a040808693e68b6ccb570dab821fb94f0e34a165a8bcba31a1925ab52a294060d5a106c7f846cab8b9fe31fec818b7e45fbed1c2673ba45c185e4ec4ffa5730b8114cb11e3a560bbcc46b5d5380aafb4121d8e38724491232143174924af03063b00c16058df23f80464265b5ba52ca169bed2300576b6642db6246f690e20a6bae3167a8163b7d28d5f142098086467179d21bf3a35c32ee2cb8c0c765f6b400c59c6481246f1dbc02014257c38973351de46261f5aa7b228dc3537583ff2440bf4d4dad6e820d534669999f85c1fafa09379485353a69a32d525453509dc900087a5dce937b791c776a767303118f2d81f612dee6411aed55d6ae1fe99e0358eb2ed80517729e8ba0b216dbb2a980388cb11d8523ed6211107c795a10a596d9f5a875faf63290c78b88404cb5f8f8364632c149a2e0f4b7e70a5fe800cbcc696f552a2c1f76884965c1587c41a3788fb319c6fe6d487977fe83bf9f09dd979fcae5d4d5ba25cf7ed187a747da0534defe891ddbab97fde5330a44baf6263ce48efe864ef39e69400a4c367c8b57e889120a6c65986b21c4a861c4488d3cc14f9a832efb72a528a1e7aba32aa38195de19cb8552546b1c9ac647c0e9098cef822fe641866803d1bec916df4044d37c577c4b2b72d95ce8860e5c25f1dafcf2970f17cf1404cec196853329f23537cbf2509c123e3a657566a3e380795b5e80e116245b2e5a7729da1b5a45f47a8d72a67daa2ef5e6b6b5b2b30fbe7dda835172002b9ec68a4bbef43faf00149576e821ce9dbe89b90e70d491b5a98c07c4e7ec2a18d2cd65d012e0436a32c4e3f167b70570c029e3a969644fc167f9a4ac7e225adffbbd23f0b0f0815f263303a746d21f6e4910e4c688e7c1197822bfc685919536a96034f77751e748aee6ace48b836207c3f8330668fc7d0c4338ab32d0cde14cddb7984dbd51c5396cad42244a808240b5a753c19b37568446e6c4b2f4f268de2bf58f4d899c1c51ea07ca160a1cd782ef672745121ab31eafbe41195ad26131574d11aeb337c7a02e355804396ee117343c69bd417ac62ed367869558686a3eaee200b7196d5a1b8c42bb85a8420d4321a1b4958c15d72adca6e8c11abead488e72cb75c3199aeb1a1b5c21089d8cbc088bdd8d00a4298186b7cb63b3a81228fb1d67ec3b334f8bdcad07c44998e4f313a2e0787866ad1aec2651af4a243275d3e2e390d084a65a59ccf8e29bdd92bd11144c37af2bb5acd620b70a0626c509c3272ab1a50b38bef1b3b7f248daa20f55706f3961923e507637e14292222e8b8c2cf246647e7a93e9be7d585ce5b0dcb23b83a5e91c547d3e7c777d1ff252b89cdcb757323b5006b1fc9f0a0c22356dc91dbe88d3cdb75eef00362dae2d3edc5abad8c63f10e1f5e97d10e2863fb4cb91216a23c89df0ca780b505c2656b73bd8154f6f1d2ebd6d1c85218f1e232759ff30cd9de066608f98fe9789b9087ab5b24d331ecbad0bcc7fe5e52a4885ab37e21bea1a39b7d45297e67a551baae7a8b3d522cfece068f415240e6794771f76ad9b4d44569eb80cadb3f96ea63145c6417d425dcada73a75d4383db44e8173a89764fdcf3e3c8fb3907b519b988e5ec3e18627fa395adc879c15a686a398ad37df35c1e147fafe678f2200336ce5b0228b784e8e3484d963f8cb481583aea8cfd74a56e589934822f322cfc52f74674922cf6a25e1e45f1d845508dd74f76b13e25212250af1ccfe61057d9ddb6971fdb457bf255fb895bab14c864dee51abd7ef2ae9fcb24e58c984e802d1f83da4141223e3ee9bbcfa4825d32d1823cb00c084cd9985eb9040509761838fc14525efa665a0a5d4ed356010b5f1b1d8b1e7405691c186953dc473e3077ea6f944e1e22105739245ab034c9a21d60f477a600431569f5d347e5e15c5f2851a818f4c8eb80ca5e34b2808a1f0b59723374acdcf35a14f428cfcda65e3e2048045f701f58109873a99a791488d1b0047932f247fc04548a5de8d42cf53e56da4dd027e6a4c3338b122dba0eca9832dd2a8543418ff774af9bb88f38ad6ca5a6bad1dfa0fe80641d27c2d263e950ee4841c4aa1d5cec32873159ff2642c59c299e72f314248c4ab3848e49a72464e3eb146e99fcb315fd77251f2d5234d2864e8807bd6078298152ef3633aa28d909cdd68a11dcd9e6a71d2b017bcfc93ecbd8777e5824d4e158c92d495dab2fc293feefe4b7cf2faf64131721d060aab2b3ee9bf047fb4445a940435ebfcea19ca3cfc332a999fe9d37dc732652a0acfef40dbbabaeee7755dadfbf0b2acc2fddeb6a892f99bfd06d9b1b67555eec7ebb2fa7dbc2c57eb7e2e8bea9a8f965575cc47fbb23aeee3755925f7d1beac8e7dcdb2508df930b7b73071f2b9f3f762d25357dfd7b66c454df25a18d29baaa805b561f8baa01c16e40c6fdfda62d7a24cdcfc3a303f31cec3b314933be4314721a24eca3a7eb5c5ea81de7dec4b32f568699b184ded209a25cdba54d2691357e947228bd82c93a912e351ea7611accc5cb488238f296200453ea7ea3ebd515b7e0bcf1af19235c350213772917731bf5374dda205de83065c631064ce02239c657ca1c83706604258582b711a22ba461a8b9b61cf84bfe52c44114148f5ce43109d6424bce91f3362de28c91ee7e303e7e2ffec516f72c950a582e75537a8929559ff8a41633578db07b32e691223dc443fa47b511ff9dfb2ad0ac78f667831234367ecc6843a1fb0cfd3e5af8a442a793e102f80f981f725abe4963e5370ccac168cfbdc2b6aa5ea69c5b0c37371db0271570875d407fddc29080cb27dee208733077d84dfe5c252ca9d6796f60c8f5ef32482f98618644687aa397662c661358096cd8b1c1ced070b5af67b13693ee55300f3fd2a44a12a2fef1aa2645cb8fadbf2df6e51043e50832e84252c59694bc06ffd2c91471f01c960ff647a2b9d816783ca0904050e25025303054e15b5ce4195d460d302769cfd0752bc26be38ac2b49bbf8040c4b70495ea3e427a6c2a6682d2c395dd9d6a3789b26cd34f9025912a0df0ca34727cbbb4f57fd90b7c163c648146927d1aad7e40e4bda9a1b938bef6a11876e11d9ac230e39a4d4bd1a7eec800f412c89e5ef7202fa858dd116f691006a9a50b76041e21678c5097a68065ef81f183525faefc23cde3d6a1c10673341a4196d4cd0e91fa325962da7d564d189c9fb2233e09d98a0be396b14492f5398ded91d6d59eb6d9b5ce6308e2fb70a2cc6ea3e757e3cf10febd7b51c4401cf4cc358adc47165821052a64331a89d2ab32dcfb555c0e523ab89f11927f4d3a3b137fce89ec12216ef61c5968887050f0fadf88e2804c28fc33d76ef8159cfc8c1fc77f992bbb4a40bb64a08dff85dfcb58b0087a442f2e4fa59263578ac00eca1d02f08568c7c6018e982ca113d108a18a400c82ec8e3d19e211f1903a7910c6a0f9d202f2fc3fc67b005efff487cc0d763d00958cb0ace2111456bf7b2f688bb76cbc7cc885956f8b8823e5407a711da58ae67a923165998df0c3acba3f804c65fee672562048049c6f72890d1951154bb1391ee48ffd2da1cb5c0c96ad967ae86d648c0e067f7cde2ac10d1deab09366cf4897ca13dcee915a950546ef998d9575e4c11ac81f8d6ab6c1f6fb7eaebaf1675a95b637efbe582610a300447092742581bdc1e9a8849cd6f1ebab914dd5105a2cf5bb12a0bbb97f29663d97c7c462fb5188f65d41b20e6d6cc891105c561ed9ea3027f588a584838060ca5d8f361781418dc900c41c24da558d281774148080aa80be0065829a6d18488d8b23b4228ca844c2e13e557db566457d66ca11a930895f46b75623d8f22cb2ebb0cf1d868f2772deb8cf366c7cba27d488ca59d2b0e80e74c19364709607d4bf7bebcafaa759f83ee44988cb5a5199144238467d80aa1b3a964e92f1cf9302e5e2939c7f0748d0cc948470c8a789a80e7bb41c1b8bed3770522886ce6524206456b4284e8ca94209120038336719bd003ee0c2a8ae34a9c9f28cc2d52f220703fd8cd3cd04e4181bea105f966cc665c55c15e6d8ef643eae43963b099e565df688ab6cbd80d776571fa38e1c0037bd54dac25bc3e2103bf90f9fa6c56ab196a76e0c690c02fe1449eee8edc9bf8544a16709cdc0381806d41c85c40a600b1c29eac13db02e34e1ce97ece54ed7b6d0c7944c891a30e436ce1d89342d06c6740c6e76548a5155fb59b7a275d6cc9b72f977cc94a23da75b8a87b716a0d459c0b82c37241729c3e464d3d16043d609d0723d63bf4bb910789393abd01902d524c1ecaf8b97d679b9181adab90b011188fba4ae5a1654104a7856cc4741ef6f6c35f7134e8d430d5bc09e80be1f4f806d3b4cdeb087b29ae5808d0db5e5987e4b9de5739a4fd839f590caf493019a2f0cfc4bf4db6d3e5e33815fa049ce3d82e173a600c0214c65ff2fefc0fa3cd664d70e3fbbd71f2baf9fc090825749c60864e00938a01047e68b30c633a21427cb642733f59cd88b5e2fbcb6c405033737f4e745c9644c792ed1150200872cfa533fe84586d2adac19f4ed67a20ea769b3c97d5bfddf14590c1ad53e3b2aaf6708b3dfbeb711b63aa6ed7523d9747e2cb5206d903adebfbda2ab1ebbfaa53cd0c922b9f92932356777d65eb1b47c9b01fa178237ae8e2fb7fdfaded84e43b669bc38955c78b06faec80833926715726a8f8cb84cb0586ba27d082206d146aa5ac37fb3977e94ec201c5cb3e700c1f8e256795d1870745200a0a1eb6efe48430af4774562fe991f9628b6b019993b31165beb57586fb5fb88fd285a223c4b431a3fc4c88e3e6beec6982c14b501b9485789d2eede08b8aba62193de1757af3be9083ba184c58c49a9340a248a1c566b967b781b9900af60a4a762e48c0206140931e4dbd12612e660b6542588c84d1e71f539e5a0d8e9778c5b5401597aac3ce889aa5dc923087cbf65fb409d3642d85b1812932b99f52b0490b1f55fcc83b5359e5eecd1f8471347300404a6f34160d93babc424d30f063a9c6715048d90213e056ae6a012b2ebfb700a1f3d9d437da891f37e5da90a1c7beb9b4a96c16b9bddf10844b576aa3cfbc9b6db45cfd974ead6b41ba627e27896acd9e44b0473c83ab09154a74ebf23446848bc2200e16ff2ec40958e5abbc0e6a7a35a855ccba905d3e0150596ace42683dd5d1bef5ccdb3ea9d7ae0e4807e25e8433d013f5b59f6fad6e1173098cf4c57030fa1a2d55338f01d8f3c391d52fd4f4c79d5cdab115ca1270b14469d475c7c79bdf7da101215189e69c4d071c80595ba49831fe0a8b54e426b38bcc73716e9a8a0f9b95778a6056528448e6d59b255439e3691504d68acc833f743abbea5369112971e363596c340daa6092fd089c08d8d946288d990687f36880743f285d4c2db25370a6e69c085564e793eb246740bed363aa1cad25271809b4895e058cb289726a4a7c2107d184c1f16e6ca42a030848cc2e11e497642aa3246b4fe9e13cf081a0c261ee6d85c13f803283e0ee8a636c4274a4b99a6f0a2edafacb14c49ea20de18c6781100e220e58d9461590fd9c15d5f508de8089956556417fa8927164a455f4d70982e9a656f998d9011afdac5636a158cb8e04b5b0d8bd7eb24e788cf10e53585d9f58f8169ae84bf460aed557ed6be576ee0d4864a6bc881ab41e7e680cc922365322ffc980f78ec2fe440d7c2bd450994ef10e05f0526a1f411aa08be4b213574b345e8e7357abc6277190c0ad4817fcee3b4f2bf113f4fb545c8d91adbf10c76de1db8fff04d702b6a6e673ad3ecb0c53a82b01d66171bc43f577646113c155dc575c888e3dd96a2e2ebeeb942bf2711e5beba6247c53f6ffbaaf53c372df273a2b287428a6399ff2cdb266d49a86e19e5fb27968b7faf5e9c232768fdb22f99ded433854ed712e4e39f7721a18d74796be592181bccd6aca6d801ffb5e161382f6f7b4f1bf2b535623c191791ce9cd71e6d1dc5bd4c6ffae4b598d0447d671c44ec70650a1fa61d7f00f7502fd161861f56231c4863940b38074ee795d0c61a31d407fe481b3b82806b1d2c23efb73c0b23a51bc10655fd126c0df94cfdc8ca02c4eac61163f91c0fe187dcfb32d5e28933b6b134296060886b3f2ba5020d4bfa20d00dea7d2dc1b0efbc725babaf8905afd206b0274e59186248164f1b25020e0ef68ea5deb08c0d61fe968f2289633225bcd014fae0e45da66737a8071df1e9c8cd576baebe83f4cc1e4c7462490b61b431970cedf0bfefb7b8a1c99d03b7f76276fc6294ccee1e80dc44765d177f839aea9dfa55df4cecc689ce8ed6d8a296d62b02b917ac6fd5a2acccbeb5d063244877b62d245ffe400222bf40c3b694d2ced489c6ab3789cf0990b8cc09350fba669476617f6c178e1de139373d6da463d07c78c068cc57436130caf9966a06c93dd823a026c653b765e1f42c2570f3ab88ec866faccc403ba8c54d0898f5c540dbd74b89f65a11ceb3eff9970ae2c021f7a1e5aaa9ba8dddf638f27b2a8aca7be596f5a492ea67e9415ce542c1d49d01eb97ddeff4b17959bb1096350fa4434c30dd10d4ced97c01814baae807623949b6806b8f615ce494cb7dbecb18cbe647504a695274f210a2195fb590f062ff2f98a9645456786bcb055f890fd74e24cf61851025680c3818a198f2aa29b32dec41926d093a34b5a4bccb9eb2bdfb7217b8c24d8df8fb5f235b9ef57834a5952485d593c31b89a589be3a8f421f231de6a7b2694d111ec56ef45e5c5cb03846bcdb2522a992e0a357b502b4e8cbbc8869e5024e79c71e3f3ebc228bede828c34e3c123f7da821eeef525a7bb0478d81d8acb35e10dfa55196ba0ec427c19d02e8a10c29b0642110cc85cca3280c20f819591297feefa9f983f557b4aeafe2aca89aea096c6866856a816a23cb0b0312e0c2392c18f4ba3f60d226690dc500087f8d4f5386183240fde2463a41ca89eb53a1c3d73849ad576009124544f199b0244a3b5a6ff755033ca02fdc5152ef886455a608c09f35bc467525fe8660edf4d413e993ae142f667bb9d6d88060ccdd9777f201b7b4ca0d748cae4ea0843203cb540bee1bad59f2b6d4da156d239f92d3a4b26ec11bee69fa43cefa5b8a3623962cc31c4dcdc1432792cfa5172cdedb6555c06ab7dc4870755f90f3e711558586d3ddd6457c89aabe80bffa7bd6e661f59719aff9a1317f9046e9349dbbdcee2b85f5584ce903d3fa3202f45bedb273474fc6ee970e320c85f9bb6f838e7e1b96b86b9cb4b00ef6600ea930f44bcabd43a465e0aba5254b265bc67f89739ee9a1556802880ae96ae6e96dd98952dcaafc876098f5ab180780e9bcd6ef905fc33c59000ba940f8db42f7a66a2cc082e42ba89a4060264f1df11b09807c97113d20b196a8a765fed260bec82e5d3be229a39f00526899c799fc5ab156b2c0b48be368a0e1b9b20ac181e46af864c89c624b7346d0494fcf8b9a5d44cda9f512097ec95c1f08204122a62743e85c030fd26073860189f10a26f4046948c9a23268c459aefbac996166e99871decbcee239a8619aefd7fe913cfe6e0bce5ad7848e1f7972fd3127505e965947c6da8256d127531f3eaf885330d6accb78334f8de8af8adc0b36446873c4ceed05797926bfe6ae0224322c9993ed060b73a36305799e3d3bbf0b38b0f8c66ff7a4398f70b7498b521848287b7830f91d7414aef85deb44084d8374160537a921b0561addb1174d739c1417aa417bfc86163a81f1c857f36cf01f5800a54bd97bb354d2331018fbd3bea6b5642a941d5e54afba1d8ffca191dbf30cff6c707660fea25ee82e67ae94fafc8ecf23d57390e8976616a113ab4fd203223a121d877ce335897dd6533ff74f5e59ae216b6e2e5225cf21f3e20860200a0506dfa9c2ce035dbefb3bd2bcfa712546d32422b7cb9252941a20510e4cc746554825eced26be44323e1e11e0616ac34bf69c0ef3a85d5a9f7b365ec8a2a5eeebce31aa220a0e2c52a883c0d574ef1d25b4b2c739f618a97d8039d2c8526880d9ee5402cfda9c31527274d109c285fe3b4d1ca741f2c2a8e9749e6c57fc2fb25f28fbcbc415dc34da11af3d320982b890ae157d0d82b493a54085d0b5c75cd0c0ad15ff36b7b5d5de57a41bf8a48e937850a896e49314ba4ff85ef15ff88c018c88a8e32a59c124da61a08c17af4195485efa5c96bb9eb54d51727b2a04affa01a8b5c7689c1461f4775cfe404636e2ae1fdb7529175c20a21a5b02a3a07898231d59cf49fc504c8a47df0adf6352f93a8c6477d5344038a38f9671f3a7685034f3459d1878a12abaa4cc370b9b16c7bab1e08288881788b47404048eb6cd91cb6a117fd1c84962eeba787081273d827f1265126b62ca20744ee0484f0f631aed0336f98fbdae094f4c5ba41772c156534b5563a23cbd2d649119b1be34e22f5d92587728390f57ea55b27ca2dd4516e25f3339ce04eaeaee2d1f55f0936d2f9d82f1d8583e33acb06a4dd2436d90e05a3829cded4cd1618e9fd1d9eda09075f876b38c4c12ff789b2f4cd69e6b485c93f525b4d6b0e842554f9d13dbb3bb6a06c09d8191fa0e41694ae91cf27502ea159acfdc681d70c89f948d2839725ad72a8c3ce18d0f081d210788224182b3a97f2c2125af035efdbc839e14d819b4fece003b6bc54c23b415315edd147337f375b36121033a487d956e2b2a35259c965e1ad1e7e5625411d8303f9864ee209c0d6c491ee4f15d7635aeb9910d8cb0db70b41db69748af2a6dc99716717463d6aa995079e565fa2ff6b988b973fc102705b903158e3097073b9d992b1dfd5a26fae2100533698164f9c2f6c6d4abd995e0612c8fade10f96da584708185cddab5e8c628465a1b5260622be089d2e62602c859bfe6d1ed7917bf1a37488d64d1a914c96889841cf6f66a509e6d10c31e8233a3e9d69154844d120192ac0d82d5686059dd6aa104e4b7a47380c25fcadae583b0c88df2e0daa1c9b917b1655c9cf064193004627a6c72fd572fe64c6271cb896a7f0245207e93262586e2e9f3abea5198355b38611b0c730286fad68fd8f53e0bdb885dc252b9c1f26452d812083a44cfd62820e8753d413f7d18e46480e0a52b607bc5760bb8a4c9e491502333b229b04d4fa8e9daa19a4e15aff4a9da74b5bfede08f2e8324c9e0428f2e686ed6de5d549dd6c63a781eb5ef3843a1e35afa37c8b3275972443ddaa202923c428b2c114dfb04db706edbcb5e03410a7ce55ab703229147485d844e3c34211752ddb900a45e4726e2599d57220be686619591142153a977ab7efbfe5ce95f8c84dea1501776c9a9f47d6478e7c348b867c7553cb675f0e04d04d91e21f7ba79d1de50feaa57755e3984fc48c21de8289c500607a5d2c71a9181048ace2b5d67e3451dd7b3ea5441e8c942bd89d404b701975748b80b911a651cc499d9dfe45f8a5ff7610a310b4c590fb61a95abf0bc2cb0058258ec6665022c7ab9c2b3ae6b4fd0ce89b015eba97f6b54d41b4692cdb6c88981e8fbb275007286c6880e14a7ae1a276ece82dba4f6cf6dfb4fc47cf253f5b00ab2f2f7effbf0bf6c71213058a17c11e5a675c6b0d28dbfd4d4330562dc11dd30e22efb333e6ee273b662858bf9233c853689389d5652926212acfb01e93687ca854074a309516eb30a43b8d5c560ff2bd3fdd01241ddcf15fd7d39edc938fbd966b00605d5ff7bd34343c88b676d9f072c407c446840ea18948d42ad292fd6825810b69aa6507bd14eda22f0f316386ca98e633cfe4444f320d6873981f8d07632ace24915ce94a7889dc9d0892456ce742436c2bfbc4dbfc899cbb84f28d638854386226cadbed91abec8372ea1abf2ca568cdabdf143638843629f57192c194855c2caedf23f9f1273c3eaf266f408e8af984b90f15118ca198cbfcb877b23549737d7826147bd2304f5a860ab3090d6bae55854dace376a5cc2ad96e453410a2adc96899f6c41591b257bbb7c40fd7dde36255c28fbd883b9ae09576a5f4a54d73eff4c8b43b91487b5903d31661551f0571e35e4e98597345a1e92a11fa03f9845c5a883c369978a5b3ce496cf7b885dbcb173d831e78259c5586d63e27cdca79ec41ce4960927120dc198ca9647aea13554ca26b669b9eaad7fc08234620261c3e7105b82481d6cd95c5a711e2044dbd8f71f094a8ff2dda9c22b9b3af1ae7f8b515f9f0b42912f8a9e6d80ec443813b81e76682fe549405fe65901c5cbd116e4825ec7976ec9c257aa17af6800d6322a4bf96c34ab04bf7929b09f43c96f21402a143ccac0a6f128e5a180c20a0954800fee4a2833950b870e0d519723f281c071b4efe901e82c21256b54c070f6414ca040012736d82e572319bad76cb67d5585ce3833f965ec99d1c7f661af4909f9d78b3234da2aba397688f200669739ff254784e0dfaa890e21d49bd8516c7eef250310bd8ef7c3b92a34cca0cdbe71d863d0a365b11bccb9e6110bc86ecad99abea4855b1749e0978a67c02f1c0f6925c6ddcbeed644bb20478278608258dc148f71ea791ade24c061927d08ffa7e4363c31599c37b420bc74181fad2b6e0807828526eccbd467070692778e971a2075350c3c8d645f6680fc129d9eaa12dc20a901f89daed2b8eb2f1ca63c022e8254dabdb1e29b09298c01de223b8fee6d430b7e6acc7f159cfa0f38b4ad33da7ef7bf2e4e76099ad159043e2f85f4ad7a206f38b3606011a4c08549e4f2cc2944aaf069890bfbc02455c4d703526af22c74ba06ccb3a4e97ecd739dcbb5b41e31f3f985a5a28158060b616306b4f4e6a044865e033784a331d088f78c686caf998ef79276c38f33c002db9a42e7c1e6ec02602a369f68b5bbbde8deab4773c9e1b8fa8533343a08b72e26e682887313a101d7ae1b52ad30d78c7139cd027b88d53a99c309546b37345a110818c39c305b13b9b5eed057265a5301e8a99750dada90c047c180705ff696099655ecf0f11799211c9776cfe964c12aaaf08473aa65ae1d794302ef44c16dfdff1f9e5cd3bd5aa8cbd4643698df3ab87b8d8c7b6f7dd0996d6f50382b5f7574ab6f4abf3371dca738978583efc75ae42b0c0b2668285b832c9f25863d9da9e02875f74cef672c9e738620046abc8412ed4500b101c5cdde1363ae54cb4e8f4304aac580edc8ff49ff3debfc930ab7b367fe3a76641a92fea9db802bb694a5bb0c88bb8905f67d44329c3749d9e6cc8250ad67d23d50633b7c610d17e43ac82f448fe54e609568c4c336714a27e1c5d709515a423a03c96d54fa3edc1563e937b193c81e2e498b80b60e914e4da214351489598acb7f0c7320588ca53ad29c9f3b0100b7d2e50d0d8db391863d38ae3ffdfa5aa01de8cea52cfbb2d1c48e4de86d05e6bb7e625cf11e2ed400a014b742c47cbdfcf8dfe3feebc9e9d296326840d8145f86e8aa83e9786a8eb7246de68eac60f04a3d496980a48c75e52b4b74df9d0ba7fb0a81eaee5941436e2ac73929e2c499fd3eb7e7ceb202172e9dd129c7e5a71df0136ac1b0032add0c9d96086699237bc2f45138f3178ce646751543241d23caad7eabbf523c3a50471632aab563b7e234f4c18f6855bf2dcb8108d1559ec35cf55182ee212ba994976402a4710f1d06766bb05d3b742a144010f98595f2c662f86f683ef84566115143fa87d66503e0c7801c73e0d249dcbd924e690b84fc54ee422271e79863eae5cdb6a61dbc4d1c7fd4df63f4b1658a75c670c187dc8b52938ff57234e116bb251583df4948fd3c31c9a862e9a2f2ecef7a24341c664e8a20439d6958c933f7597e07e39fff3fc64bf27d5df7947f04039151e24c40efe22eb7df876d8d10ddf38a4a71f91895f06c3fcac3afac1fb429304648d5f64dd19c3b020ce13b5244ed0adbe205e9c0d1a2391d6424e2fa9c8d170c03f3038298948c93d6c81fd08b2e47d2d6b3f09ec9189d24fb76071861b78b1218f37ad96f230d9d1fe2b5865ee2f40c067ce75be4b7d281dbe03e7f77bddaba9b84e1df5f196222cf7b8d1d602709dad735e8b8ebd63deb58b318c87f2a8f0ef277eee970fe8e99f4be11d7d0612f788faf041cd9ef5f299bfd0b3296610c2321b05a814d93b47e1eca8967bd319d35af50667fa44be6fb4bd3dcdc3f90e151bb2fffae76e649e2ae9e68e36ff3932ec55ddbf8d1fb72804f0bb76aa7ef194cbaf114416331be7345448345f131548c971e6954008173dbf79722a352e73707eeeb912e3aef7352cd9d7eda4866244c1de455040f83a06e3fd66fcabb3b3da68242500023c3bf5bcf8a25b2effacfef767be2f79063d703a71ef0fbcefc87f5905e3fb9361535e2faa0273e0a9bf1ee1d64cbd7d7affa50af0702e5ca8ff2f5eb7e1e5fd3f04a039fc91013837dd0e6e1a787b8dc3523c75cbf3b7b585b0360fdffab08249c44d8118f869cdf4deaa65e8f997e1ebfc0a5d9d5b5c020c3eba3676c36ceacd26591dfeb0f1e5cb52cd402a6b71c215a3be8420d3e5ab5e3e196df1f259bc976b220ee1304d7c03112529da9ce4fe9c675147310ad4f2eb37b7677abf64d44bcaf60e9b4e2b4cbb6d513e0ef0f2c8e609451035f49f0ef8679f166a6b6a65fef46a7afc7e11a7db6a54bebdacd522a6c2cfe783967ba4fe39d6ebeda6c2c4626b553e5b4133d97cddb591cde2b0df002557fbb6fa61a53daedb9f920adef740436ffbdc0f1097a7967ab2e2ac7d1fc77b7900e994619173bc8242fc404f0d79f0e6143491b0bfef016a8a2ea7cf681837e202965f5ab635f2ef100644d6f88e2d9be61c0a2c9d9af865e832adb3e8cf6a7d14104dfd357387996910b37bc4ccbae447fa4c02218e878fa5470fa201bad3c94d6c511a161cdfb34a46e0f8df41fc6ee7747cc7e9d9e2d253b55f6bcf451e716984ca9a8a5ea660f5c67c7bd708593e60c3228476e0a062b30e3d8ea1f9f6d3ba62ac0d36471cffea07450c963fcd27f608eeb4587526ce1fdafa3e36d66d07db97ff22cc78ca13575554f867b2aaa95d3f3747f8b9957477f42874d5696e848e1cf0ca49a704ab996dff72ea9f6bdc67f8c66e68e8603fc323a7edb84638906203f6625e284661557bdb29cc47637325f4a00e95b568747a6c63a377f7acd18ba751d48ec475b1e3261b6ae87e6d3a0b4957a848f6bf4e1c43306ce90bafd849bbe0ebd54f80b96392d1635608f101de78cdaa6ee8ac8893f8497c14c6e25622ff38f3e81ab2dd26e5498901ede64067fc28abca49acb89e2fbd12408ca6b2bafc62e8b8e130e81630296bc7fc5efc36f202f153eeefdb6d3a9565cf0291f5078cd468c9ac48345378c88384ba75d7c3769b5a9896d6ac1fa3097409c66539ad713acaf14d067192585a81d390681c3a3ee805bdde29500184862149e006c1ff555919f6c38c40e72ad67ac07e09a366b4fe5b55a6a4e6ac485ed7d6b7a71304806d34bbccb60ecbad7f81dc14bb1adc0cb44a396f45b7165c3d4b11a0abc5ff54d110efe31430c6f52038799be49e10cd64b0b88536a5ac84e13175775d98af43931879629305315a30d2a69a1604fd05173849949c0dc76e0401ba483d86d71b7cfa045917a4791893090b008f7040b58d05e9df17204067b26c18836952c5db01601ef65a0089ed232f92a1e7a185711271ae8ad97489863dd4d2f7bc1b9b8692c06d583debde52044584ac267ca8851c0a8ebf8e9de0b6158b3a2d4b110e7f18f4532a01285ddf411b83eb857713567d3ae27be26902c5443f8068a7290ead1f01b287c6d4efcb0921d4526728c566304155804fa4e96a409f2a32fc872991836cd90f49fbf5a3ac785258aae7fa9eb744260793ce73e12f428b4fd9af87007aa1b8ad1c77ddb678a3a04c66c3547ca65d2900cd418f6ed92f272a852ddf556ada218561efa7401ae35832667eb298f5013b828e7f4cb5f37bed66345a91f573bb2ab42d937728e6ed4618aae4a7a5e6d784cb01966be99cfb39bc9879ad100bd2e5796c529e1fcd9327b2509a511771a612d56defe62834b4848d7fdb2160982cc52fc46fdc97fb42f579355672eaba7d4946a1b4ac7607f29bc1d5797877b4447b554f06f4beeba012ca393682dce36facaf4604ab993ce0ef59f3ffa5a787b156bc609bbe05a68f792ad4538e58d9727463f55450113d97e416c57dc0c7a26d0acc5c289c4577d1cce396ac648d1b8fc2c8bb10603bd5a65b6bb7466f41ee2112b0dab36ffc8ecc6f5232049b4d375a22fed291e9fac8a842547bda3c5f1a6525349d2245848fb78f52e9e82864665e73756726e444542a9d1390baecb329457ac6785859f607fabc70d20b2b1821629b282be9cb31779e6c6d066345c71c6f11a1894a731f0fe5ad7c40b9a15db198e585107199a1a0899ef26dc05a47527a34a8462f978122f80eb079b81f206cbbc9a9ddb1f60c1ab02c167017cdb4c43cb4c03f6a35baece2dbecab5baaf523d0d0db605ecf4b4dd18c4918123e9d7da2db3ac483c96d89796bbb791479cb5e0152be136a552842b6be73b78171a57610d1030837ad8e99e161a5aa8773c5fbd7a66e420178bd11de57475cea8f588c6d5b18f786d5d454ed1cce35074c8b8ecd10703d5bfc7dc6d35772bde19fb7d93b8b9942f66e69cb623f49da10e6c95171894d00d80b07651df369052eb74323d394e413776f7d0426c6179e61843464d7e0e4d31d167835aa00b29f01e6c2f70d8576e0ad5d72bfe87bbb77c4d17696610b8c599b4adb8a1b009b27e1348be9d47d0c868a186222a481ce157e95942ca81b963d47afb3ef27471497c493513586e8cbfd66444fabc2c5a81edab5babc2b7349cfb9e2b31efa2091a423ca05c70ed572804ad201eb951895738c4fff7b0f1144cfe2988ae412ad54bca218f85b6c8a86245a7a032dcda162eb4b38e9a06f7c6f27868662725454a8a0ec8bd60a57854f7f0382ce75758ca51cfe1bd54f4214261f5ddde0cd464180f1ba9e019eb56795bb28f560550bb78ac1ef2e3ad0c77f2abf91cd13f55f6d944d59f58bcab8dd9c8fb580a77be27cd67c67248a7fba21fd22cbaa30f56db47525de038d5649df89a8ea6ef3d2d8c1ef010223ca0883d1485564306694b23828de16681397cf06e1eb1f16b302cc73227cc60d8db05194cd48953f0bfc08600482238e29e51e738ed58caec324a20ac5adb4f61a3146c80e12fcc4bddee52e4453641bc100aa86840e81e5e3d78fb0d3a8873e2c3eda51220d6587b6b8a1dfd1b836ec0101d74a44879846eb36cf45b7a359b1ff32a7608ce651815654e3cbe38fe6ee0f2d146ee9f5407be9ba20d687d7b71986b795a0f2d7341304db112f7bd70d5fbbb736fe5bdb29d72d2b1231a68ec946e6bee85cdac80cc901833953346fffb68cb78d56bab7e7815a577e5565945c3dcc1f27190b3dbde0d74f520f88abc180964ab63d84bf3a4a256416371d743522b2dcaa313e70e9ea896e083abbecb67e98535a58a410ac5ee6610f0e2f8b715c18b1afd9611e07ff80df44f634caea66b2252853c97221247e8ae05ac6ab4f36d7cc8fb0b8917a4a9f6085f39980c42698c201ec2504704b80a500fd2ef8b918e57271847ce8706fe781ec7b335a070b30745fe0a41b9585a30d2e0b77b0f960a0ba2d5d42765a074d405113161fbd54f8bf4a0d57755c631cc0a4c5d4bffca09d86ebad15173c38b82e5ee4dbed04783b19eb84b818a0721da702ddfc04e638c46f7132a24da4b1e2dad91726a021984d993ac4f8885d07254b01cbd0894d5b071c096f0ad7c3bb04400b21f81bba79b9e2ef9a1cf2bfa77ad32aa442b12b59402b2433438e99b9ee6690103c9c5c87295b713f33459976583ed08a4cd6d60ab05bba3b96625aad71d4d979df7b5283c36c99ccb187fa8ae22b843675ae03daf0ecb56eeabda35f1ab1aa4f447794f0d0ca4655b0b5d5609be8ea6bc882d42bb960d26d9ae77b27396b8e64b1230cacb19d8d171980b86f8b4e676a8dc284c0eba2b71e48add37255892506e4fd5b6a8efa37699e553789959af8814ea056289e47330bc2541bc508b825a29cb0353511bf2c5b239b8e209e17810a2c4bba969e1608bb73bd698d64050956c8fa80189ef68d73ea4a0fb17a0b07c7a3001529d44eb6372ca5bc509898c14d8323367c84631bd48bab23dc0dda89305600eeac039bb49949afa33a0785ebaa64f387aa6afe29fa94bd07f97b4f6016fe43b8b28c2d53b174fd57d970e80e1dc0ef7a00116a32f9d15696f6c4d65b3b4b331ba18a42116d9848015827c5abc8c621255e8c82bb578c7262d8b4c2d8914c2715794b1cded4f07cf5b58b818bf3c22fd3c0e820b4eacae7eb666f9617589bcc015a131c41dda3fbf0c03229ad6b0bcd2fba9aafe74b8c1cc0cc175b4f44b5b7e80e4fea7258ada49a7677d2f3240a00fcafca25c51e8750124af7f5102a876605dedfeb86f196c1672e86dae60aa9c9e4f2b1d5880fa74d8b55a1f5811eb644a2cd118ef71ed85f9acdf62070c77b365fac66e063f081396967606ca11f6d31259a3c1c29ce9b9c6a1cc5cbb3602bdc07702b58caf46eea052759a708f9d58a685c79f0a76e524596113a74b8c1941824910b0116264ebbbddcace5b63bee407420300675ab10b27250f16892e53616fc3ba6c859a0274e164cdf451536df91190820cac4a1a21aa6a9c073af9d9461745d8c4e2f99ca0e7b6b16610ba61fac7231e84a90c289f6f589f4d3d245d699465f097e7cb304ac0e8537e695160354c2919f02d52f6d2060e76e86efd90be4752b278beb2a0c2626e57ecf3d5e8dd1f8cbebc220b1b450eeaa18925b549bd61bc0469d715797b57fc85355fdee64808c8a04eaaca39603bee988f6d03752db84e73e1b16146449268099daf814d869b24465ca9948d655e673b673d78f2e40e645c47d831425cf507ffeb070f68731c084cadf5146fc31dcef2b6f32ddd07005a3c8d74deadbd8c76751ab57cb71cc0de34fbf14e5ccf20bb313b20722f073ae928a6fa7db1bc09dbc7c414356bc4dfa3a94d118c6b0f7ac759b5461a062bb11dfa0b84bca3902be9e5fe5ba08d09f5afef8d54d3195402a3ba9ad96eb858ff7d23946e514bbf48a14cc6df6276113e8f0c29744d6146a48b027cd4a7c5146c478de49cbfcea411b53725740fc97bd9978a6f2801fdcfa705774a107034c463d997db1eacd84b4a7840228e857060d4b52e747914a253692c77153dd2f09930048b8b5622aa527d59bc6f982d6c8af354e9578e1eaa9e17ab99ae65e1e740aa20b8d7cb515e7de5911bb693ccc8eb95760d05d123cb20ef698d1145903a714b6f18ff21fc98cc81e539e2acf3ad6a026573acc570ac649dbb202c8415d720a4ca28a76c15b95516569bfb9652b2a3f13c3341b738dd2617e5c8a60703a3e25ccc576e406e154a9c8443d298aa12013915aaa9d1bd3f3c1493f541b5c0b191fe05a7187555fbb4b4ee0c5e88b0974ec54720e54fb1c3f488115c5f7f9e7f3f3ce61d2ff150562288da9126c164326a7f2d2d97b090e397ba57a3a0c0244c82da376cf60bd7da92882e064d6ee180dc1112fa6d20207708ec7f5fb361a9a0e0020f0fddb33c7420ed4627b548285f39b232d5fad10015615d89b40ee1a7e417e2d705d07c1ffc56d3e7629b47d32bd9afa6fe4eb9f1f0f4373dfd958cfd91f7032697bcf7dd944c1f7b129e229b801c622a4975b774500c79a919eaab9488f70dde53f63565192cd4c80fdbd0a73f4f98d9038184dc635239503a9f820385c6c2978ab7ba88227e207feabd2d4953d8eb1cb1882136839ee5a718c8840eab75bc54e6fb08ade1338f0dcd36cc7ffb2426fc49c67c305c3c8c9be00a3069a37ea0b3ee287e97419899c49040d39e8bed5c2e5b482c2cf229e8e017e202f9b4371dbff1459c41a4a278c6fe5140ab1ece4ae7f55b296469600f612070267fae56558fa86197dfc157b40fe586ff9516a82194b00267be7a30023f61e5fabd670da11dae444d4706a1db64484a4f15c2e75da44ed80e4e6ee2b0028925c8445156823da2320da378a36b91daa45eff87f619ceff04c04654e0a103961d6a7c4a9f416c46b05fbbb201b2deae8169b7c3ab4e2b38c822e935c09743609024f082ca97e259b0e89650e5044765782c85735b386ca9f24336ab267a29fad07d344ae60ec8e4f945e5379afca17fe8bfcdff6b314191b9d8484f1317042e9dbfd848c5b247d1d22294848f62ed59a702c30b21538a1334eceac649b3e6b6945fff987822c72267aa1cbeaa588bbf8ed961314dce102af7101756af5f4a73a0a2488ba7ef0a3362d7b6ffb15de96ceaca1c2db1e4bc1a05c3c1142dec11d9afadcf02aa25ae6631c25f7540b6ff1517aa638d339e0997d4ed95fa3f5d286ae10cba5ed9d6cc9d8368fa56e30d00913907240936441d21e76a79b6a8b3daec3a186a2dec6f29904df2004124d216f36800891ffc3b8c18ee253f7f222685a694f303dc51805e64d5ab9620e27aa16e1396fdb0a4361417b6df64682ca9a67480aa39c4856cd093ee816dcda8fe52e322c742ea44fca36444ec2bf5b9d89b7f2e8eff8df71b8cc7cf7c8ab64df307aefb7d1a29df71323217e41779ab300a349b7ebfe8ce3e77c481a766f44212fd4768d087443aa1e8aee90541207d6baae98afe922acc1d50369661ed6ede5aa0fab17a1e53480aaeddc93287ad1916f26d9db9d4659ff01b5a210c36fe2123270149b9d9482a7f1869abecb3187ef29c3befcf25384891d36af8f9f2724d0892c9fa3b9cdf45a4e7c65e3cb97936e9d1797488f6a35ac8f5527073c24413773288cb431c5bae02a3a249f55407c01d635fa14be78aad3c792e783a70a6a170e228b2caa09de33ce97efe5080ad7ba36900bdaf8e4fc3d13b42c8265c22fad147a522d5a7fbaba21501c5f03b465bb022f9d3521844a799b9aa43e42f3126e449fa701f695ddee0483adb4dee8273417b22098beba17835c18e08aa302f586c158fc97ea6b36aa4d8f37c8af158c5e78ef4854803c75c25eb43585594bd933844ded07dcf91d8cbb46e5cedd58f062d0b5e7d8c9ebbd5a9c45bd08d843119a54f3ee07c0585d4449ceb698db629856ed585efaa1dfb3a8329a51e5b40420af0118d301aee226bed5b5999260f2a8e8f7fa728d4acb3379879ad0e139fafa810fe588063d3a1e1df945c27206d9901f08709513e8d4b703e2f20fb22c05f3f169004931b73231fdfb784113e1d890127d215c870e2230d2ebc72db228056749389ed623d9be5b7a05ce5ce87d0b62f843e6d00c3565b6eef8914b0a2e3264705e10b35c1b9a5ec7e76b811cb6865e1b232095ab96f5cf7d0e561946acc8573e04649d94b5e6370406e5b96805414f902d2882b28e8c559e16de32daba5c25d98fd6c3407e158b59b2e1a04f97e1c0d5e1f9a397edb2bb918f020d7591c61e98ab1deb235a334da10c8ffc950f4b6c971a492d5a04aceaf2b0152687076b1c1f7e952be33d299d800253337a4be1a908ef461003d3d2585e63caa8d3004991f9955386d31cb82708364f65eba14c80101d27a760e821c16b975dd85bfbf28ae8010008f3ccbd08233548d21b66888ad29f8b21db6bc5e28e8767517a5b6e22a32b9ec1ad2b716bfdaf5ee5b030378db9040f6aa917ad45043d5c8d9097ced7c3d90538e55430a4750bb6e7b1ecc8bb3d805f849b92389c02fa4120a196c71deb4d09395e0a5d39195c4b3f601e083739a9d865be5917f02892555c06eb1c0d040426d919e2646b8921c36b4cc47bc7e5072fc471a621387eaff9887011cf59352633376fe0b2d4ae32e6cf605c8e258f32b501842b93d26840995a51632a1c391cc7cf84e75abf944c45083bfc2668d9bf0371cbdb2ca963685f247c313185d9a9648f9a2e2876a84beb9c06fc275deb2e4a71394477c306e807412dcf2ac4339bc76395f534470615328e61df530158a0bc6abc95d27845e4954181b1a5ae6be70a068dd5106ca96a7bbe49ae430933068527ff202904e47e064684f5fe2def672ee91b7289acf8dd1b651ae68ebf700eeae975f669868f43db84d9ac3c791753766ffc028a359c85184c4ef9756cb0ef47b487d01bcb0450d5b998ffe3d16ab378d48d6d753d20f63063b49624047760923a12891d798dd539812811ccc3d2e385c5f65c50322939ac4d3f8f7dea073ba6157e9b087cdea994b9423ea471a9039da0beed1b8e2fe5907ac0822ca9166ea27920eb63b09b8e0ca7393c4264baf996755789de16d803e755d73a6cb7d934cdd08b2e0863ba2a2a9e332dc1372b229b9d90a376a3ef722621663a370f88e8d88ad53312728f1b7415aa6bfce09c17d051d025fab20d7599cf2ddc84abab9200027d97d11df75e9dcf039aa40ebd9f9b8eaf74581b599df08668438caf4ae41531b1a0817d4e387205383472a80c77f03a27aba5c14472f65d8ba0896b7b521fa1cc830ed18785c1fd037a41a50b594415fc3900aa5c2d394ae0d74ac0524c6917da58be5a0eb38715489fec78f68321e7140f315d5a3e4d6489fa71cb3fdf132fc0a68c108d034006608b008e8777e9a1e8fe4dc73463ec5c5565ebf669a3ab849a0c2246498df29205e82c9e4e5de4b9160c22697e673fc6415a588b3c34fde8c8aaa3d196755806c4b55ed0d258ef2a8f2a061edefa3f1774bef91412f7d9f52aa7f9b8518ae1edec37db17fb2c0050dc5854af3aa9f22d28cc7f428efb0b146f1320bed72ec8656edce92fae8ea61e7e05fb8c852e4d84e1e9b2b08620da4679010f6e28dcb6432be968982c02fa2971d86d8e05974a31484b694e245743b751add3a97aa1b094c3edd54461a9ae48a12a92237cdb11f540d5f9c680b655d7e522ebb857819bac9734d8de369bd879824bb8f48176c079d699dbc2c067e1247e83bd4fa4e63f960b1d5f9bfbfbc23615fac67c1ea3bbc4bc8bfd5aef1a75fdb6130156288f597c2296e1a4f68f762e380ac29aaa81cc72d47b64bcfb50fbabe2c47cba1601597ef09fe4ad127a65ca44430b8756d6f6e1737fc2cf7c9e3dc0b99747e16286c21247778ac810205dc92fcabbf1d265a45414c0802ea7c11515d408cc9d31caf107757a2a4930e01eb194fd13610f1510d34b99ed2a3c5feef0eebe632bf0b4b20814eeb7e759ec0be51174756980fb07f81d6ebdc11ed8ebc5acfd742a22c9796aa4848a5c5d04df63feea6f06fecde524a9949444448e5040305930453b0ae82723b3530c9c26288b223045debbec5ebd3e9b67cd59a6993153d0f97a419edeec8f7de7befbdb32eb74fa7c349f174c97d0a6aee67f28051d212e44c2af0be647d3a1d17cf172feeb6d65ab56ea8b5d6aa0507e2afeb237ec1acb6fbe674eddaa3745066adadd56dadb556271bb2fd58b5617e66ec5afb66970cd97ecc5a5b6d972d5b6bedbfbda8b5b58b2bdb8f596bedcdf295ed87286aed9b5d4eb2fd98b5b67aa3a40b2bb7189dc5ab5627255232aa67b1755b5972e45c4956a874bb6361eab6f225084b4e6b4511579596d14f169c0f179356095996b4801861f192356129e20367a5aad6ca23c25617f6055425070f17575bca88e07545c86108c7c65f300b140d32b6eea45a5d20e1926e78e508c212e2190186221ea5a41a4a60f0dc9092e1b8d8f86ab7d8bed884191f431bb3e31394a45c1f5f21eb5e2b8857b9abaa2bacab2dd995d75f7dcdb06a342c9b095c5b1762da2f267b9ac2e584dafa8cf5c27a9f68a861805584dbe2bcc85a9fac9472c548d65a2b12ddf8982738ee415e77dfc2b8abca1a42d73b26d34a12735431ac383093c8abdc10c398cc8a97165e22ba3240ad1c985aefbd45f97e78efbdf766ddfcde7befbd7eef967cefbdb7ab57a16b6df544952fbf3708994b4435ab486886838214d651d8dd4add935497762a5c54bc982f8a6c909a1164c3d711136c50a99dc0aad2f2f130de5d6c74b0a33b148ec9491fb7b6cb8fdc1f767777773331e5ae7577bbbb9252d592b01c2baa9eecb417965b2877b7bb77770b5532e1852a5224bb3349e22e44a1eae3d5adfbfda08804b9fbc75ab8bbdf0072db65050f6a855b1554ee6bac4c7cdcb04a5d8664ffd0ddddbf5aeea0967c65ff6a4c5c5867d204a9423129c1c883139a2547cca46bb5bbbbbbddbdddbaeda7d2c31a05ab439e274ab5d65addfd86c1aed6fa551dca0953adb5561eaa9bed5a6bf571d18362835294e5d302023954942d17eeee3e41f5422113c585e90ee4dded2e546d0d9183d591edaf5a49d07254978a3cac3c4e966c3816308a908468d822e18787c91611cf94114f931b54093c5ef0d020456bd2fa2297fc886b05b3c1ddb378c2b8bc8041323366c64c195458982b3363a61993c5645d4573d784c5caed1977b4786bc65bbcf75ea41c9f4ed7e304d20ab8d6bef75ea4ee0a33864f30a66c596a84156e0c2eac775baba54507afd602255520a50ab45481982ad0ad02e1aaadb5d6fad3b6c31aa3b45f4cd653b33d36db53647b926c8f92ed59b2346badb5b5d66aadfd18129446729bcab4e4c0ddfd22e9d3e99496986e38a9132f727d355a26b5bdbd1b446a078b6ab5da0c2d3f6af76483cb93fab1eef42309c9830c344b8ed88b576badf5c25cb5c66426d8acb82f2dd5ee129ad4f409444e28722970c20f1c3b5e60f2c30ad8d2578d8e9f9eeeeeee76f7eeeeee76f70edb8fdc16c38a02936daa218e1ba8d35517ee056b584fd80275ba1bf527fc01abfb8fecee262c813a5d75fff9b28282b008831c85eae560ba2772dc4c205eed5941b604253f81c216968ea231eac7abf7cc278bc89b845cad62ba00754d4c980c51c92b8417a112d30830c01292988ebe988c842450a7eb72786aaff31b4adda6530e5543ee7ee246ee07adc98ad7579ca3fde2aa23780cbbbbc71bbc727ddc37a96d574d61079da8e43a28525a392849b8fc90c962c1848055abd586ae6ce7a4d5a3f34af2b65eae56ab09556d915ee7c4e525d7b75b35e40764f923fe11951561d283f1318a02fffd3b96a90cbd29c9f1867c1463f995244b93e431b1adb1d6da1a47f15770cebccd49f3b1d37c0ec00e1dce2e03d88e781c47efc7d3c00afff85805984b14c5e8a3f7e36180ffa2e399aa003fdcaf79c7efb606c52c982ac03c96ef6ffe8c0a30e3f7a739bb6f66d1b4b3f2607cf28371c46f9a5f923c2629e68bcfcef7ec3249927f92df9111103399affdb1fb1e3f0732e0fdfc48f260f2fdbb1b97e8070c843ff316087f060521e373fc46d203fc973c41c8e3d955657c76f9a21c807d56b4133f1dcf0fd79f430007063f1deff3dc199932c508d7454ab6c91dae8b110f92e91040ee9aaef0c0aa4188109b931018f98269a105129510315438c046d87114648fca51b5d07121975be2e7c2008af298bb262c2604c85d531856ed829f6c36cd709268ad30eb30c85d539916724dee9ab064989f57a444dde97204a666f0e0f9e8245594eb63bf525e2decd415d2a98855767777a217b55627a92f16707dc13a54ecb667ddba4d921beb754272236bad3b498a96d8acdbac205f91e4680709d3550d9cd30b39d0d891a136044968e7080e77658b66c92bd628643ad8f1c90517d91f5bd731c67ddcdd6d50c0a480b30204880d2e6eb571870832dca510b9bbfb0a528ec12da8c5bb00e6132588c80c435638c29e76ead722d75a6d97ea476cab7d41c9da17bcac05999e86dcb2b5e595993173c89619ab4f2e78c9d6becc3e88ff9c4f6612298a522446b7105bad5190c42d22dcd38eae1a4c2f629cb861dd20e184102c1eb818275e48d2e202cd6b3fe5ee7b51dbb43495bb77e0d8594c66830c91dba62018b27a6b0eae06210546baaab090519ae1c94eb30813e1a2d0b5562e3344b67e09e13199d2cd8825c2b2e9a6265cdb116241b50221b1f15a6bad408272ad4a1fd082512584e4632464a7aef83263c48550d45087eaee5e96912ab55677af33c4aafbb0a0bbbb9ba092727faddd5c88804430c126194994badada043434f375b2ee86e196fb6bedaa6e9fd69a5d2f266bba91f10e2cd181509523256137aa175fcd0890181815a05abbbbab7f75a70af35a6b779311a320af4d3f58b1eef6a6211bb9fb6734d4c84c4902c1256aa328914bb7a9b066a62c8950a4f0c55433663a8cc9acbd354851d968c0aadbb5521aad7ae0dc0df3c24d52c65cab24fc65d6be3747f1b276cc53fae250de7bab1426fbdff7dea62758f9deaff8efbd178aed5eabaa7cef886b1dd16cf585f147a25ea7fb203e1233f9fee75ceb68ae21e97342ff7085fb62658287ce79d5bae2060e939cd20cd9912521453747bc8e1055904baa0ac1666a094c96a2d80c383060383a20a929d1a891cabd30028d93ad2a186612a9303818cd2cc185198354161185402ac971c2d8644b06238c444a0ad1a5e1f685c3917562fb02835167202af2b03e51bad179496d079018562535168af2932a28a04c832d6723cb80e312ca53553831629072125b0c37c5a29e21d8eb23aea15a6bad6d6bbb9568c9bac34a250524342958cd006d551236e375d75aaded4ee14b6e1c3bddd5714b84beff62212c37df167855c8f20a2409d4e96a0db2d5ad3ba9907377f71d206e337fd8f0ee767777f7eef6207cd5a34655942d2763e70796538f1b66ec3015d562a820e52386d18e0a4b537cd8ae1537052657f7ae75272a2f3827b5da5925e5da04e525fac8cc9869c6643130610d361f99acabe6d72ee1f1f5b0a9ec8eef540765acaa5926cb48992dd965b2ae56eba4c78bb077ae986a65a1876988500d5f327602694e16632072f8b130cce18c895930fd631f3e78e2d2439ff1fe19b73963e785c104bfe60ccf309bcf014873962f8e24cfcce39999f23b327c3227974f92130071db522597e14c798aa70c06b3fb66dea2994312fc4f277c7fd0033f04c3da18044fcf6c10876298af47cb22faa1285a516cb16bedf01d05cff0c5330db932d8a07b18828fc132c8ec0f77fcca8f0b13b7a9dc93d32e274428a79d550e43213de1d3c2870058020417b876585901eae909c39ae5cee93625d7e4cee996c4acc2e07739e987cb1fb6634331d3da41cd5d6780ae807c5939cbf8eb0d4f1378b53b9b8cbf0353b343d3589695f8828cd114bf7f6aa2c3a53f2649921441924fa2237e4b7a107b0b5e66c187f8902bec0abd3e12211eff47f2e0ea677f9277bbf9b49a5fd2edbb498e8e28f9e1db7577b75d75bf17e747af35ecf2347099ad795c83a6df987650aa890ee3bbf51b2c764826a76d137af92157e825a7ed1f944fbe8a8f02f76dd22fdb78e516810505a7dd110f4a34b46dd21423527cdfe6f163efc6e639f8bc4fc9336b3ad05834ecc24147f483fdf2fbb39dffc1fcf020509c2ee47210df9f865eb924490ff08f288af16d7ec465f572de9f687ad301a541713e8cdfa4ff0710a80aec68fa97cc793568454d34f7014d69b93037393e4dbba894f115b33dbb9cef1dcf7b2d8a620fa7889bf33f76d379002ce1e5bc1a58e2b3919fde8cc02b9345bc97fbbe56f353bac93690b4686a5e3435499ac79fa61841cbe4f8fd98a68be6bd9321e3f7f06977a4cb025114e3d33c7eec8d388fbfb1361a76a138cc24fa81e64b0fdce4b4ded44abe8fc8fd698a11d9fbf3535a2e713e0d73f9224e5967807e149e886ff28311a7d349025311f9c38feb884cfe89a6b4ec5e52d8e569d0e48b28c7b3cb2449921577398bf1e7eec6e6d30d32fef0692795f18761172d025d061e1ebf043c0d3ae061f03dfe2ff4f2f73c6f02e097ef01f8250a4226cf341c9131f9fe341de6f10421e31423320d1a767918f8e39c6998dd025416e2b13776c0d3a03d0cbe106807816ff67decfcbec3f9e689f38dd834f3179ae58b240fce637bf68b208fa4fff7212e7b3c5584d97c57f16533ccd6343fa66ff695f8c80e1cc764797cb37eb3f1bb91a47d4e411b739cec607cfce4f8184d417cf9f604414e46513e7e3c9e694ec6204873f25762c601e1dbefba0d6cbf1376a0f9ce232bf9b12763a7894dac63d11444f7e9349ac678fccbb3fcf12c1fc49922279b5ed5379bf27244be1e1f8934052d9b5f7e89d3fdfd807a38ed8873a6b16c7af7ac8f49fc61f91867ff94b2125862e923519265fd6624899adf8c7c7cd6fc3dbb5cc9f73ec48f5115252853a6cc5626d114b22c86f98a28ed9b7d339bb3fb68d29aaa0067f8ac434cfc5dbfd9488e8f3b8ce0399ae39b5f3f121da6e9c01233d8abe4046e269df4a0c3d7ef3220923c18637ccbb22cef89a2a6b36539febd373f0230a3b0dd973fa2b05f63f338fd72cddba0e997c7bf41d3f16bc69a724cb1994907c104f847d2f18f28f91c8064ea5f9e28ee9f2063f249d1bf24bff49046114541921fa445254653af28fb9b258a3f1551155f262bb86967d58d275901056a9e44534f05f8a1e6cb778ca611782f5c5a5c6181e5ada0f26a4bca408511010b4266c718127248121345f415d513060c8c972f58bcd8d0050a97dc9628af18b4b0d0d5230b0e2e1a588c18e160c476a5cc16981bb26865599162b39a544162c31395215841ae784cc151430dab2329504051a05a401953d5850acb932a4ea44c3569828486272643724166e0b10487921a498e90140192a1488b2363a4ba44613152054a4a91264f489c9e9a9e86d40e17e4013c1c80a301353638d2e0092883a7160c1863a24b092c24aa2c40ca88260a40928027040ca105c180c7017018a0c605470570022280530b9d31b32e03c022802a019092d3040048d0a773c80711c1c3021c216a8038fad004e4a1a905ce1859971b2c1554b191126bd20149cd13cd1033c80c8f120759633cc238a07a712e2c5805e35a7a4ba4124601cd269ff9323366e2fb13bf2f0549f2f7fdf78df866dff77d26682668dff745a5a048febe8fa1698a9c1988d23e14d4f22f33f19148652066176ce05931bc4140af9ae3185eaedab49a0a9fac3a6d36a3c9d299077e0569b51d3b3ab790f60ac5842c862f767b7b7bd3a881c5e52a3743ae0694231821975b3bb3861b78c18997194eb25c414283862c8a62f8848cd8ee1a58e154031753d58d851954523fbda2e8bdbb8d80c4b76114fe2c27357d64f143f363620b204bcb97183a7260f2d91193b2f8e449164531f4202f50f7074b98544482ccfe188450f0e193b98b7ac294d3a7d5d28b28b6778377b7e89641a453a6898d13be28897264078becee2d7ae1271d51b2e7ee4947932a56d20d6832cf7b73a8abeee54950f7903b91ece60ee7e5f6c4ecc41580445114c1c06888c0b8c0a888e1520ef1aba239230c5753108fa41a329414892d82f705a4c2446de122a6c7468c2130aa62b8131f47377cc094b9517d214455e980f139515541b9cce9d3aab350a1a4474bd08f9e9f1876fc43ca9ef562c8f3aa54c933b96baa324503ab7adff049a1058f1940260f1dd889474f9ec99dd38e3024742188d064a88792093b6e47427c6e4c36302691140bbcb064eea0bac284c6cc101386c3948e1e551f0c2834884954432ea0929e662a90532701c965eea09272f8e80180dfe83d11bd3bac5d8d08e004a60b0d0dcc16903765d64e7412483979e1038c899192cf08888f61f2a9edd509e0e20b2364c8290c0a376057eaae788e102c0ac1912d362f370c75e58a681ebe5344f7eeeeae028a2d766b813e383ca93ee2e7cc5ae812b5c48413642451daf18f287b68648c95b7f8393820f9ea9a867c2081cd403242468c11325c5f086685ee56e25498c4069aa213b145c1a0c40588dc1921a3946f4ecd17fd061f209acddd130e5e616a9622f7f1719cbb27ae2eab1f362469514df9b244c23764d64ef4102d2c0902b5a4042a48765a684c576da81ba8bb5ba89bcc72e1d5412033774f59b0b453015f8cb3a79d107610058c8519524a39a87c4134f15aac1eeba1288a9667cb506dc7574e8b08501316513b9805bb70e6b664cb01fc4c3426d65a45f1e60082844a96511619867c3f5782bcbf17deedca48fb9ca62ba92b22397d1adec22298d97de72dd6d0ca11528d951fcba2c6a6f575c81d54d655057059968c72b4508be1850584a87c723610d6e42e4a08ea7d2cc85d944d2ad7dc45d9701f095cc2fffbb00bfb3fb1fbbaaeeba484dd5792a73d121f58bf59a70109bcec75197c3924793ed00b8358400218261a40b719827c361dd5bb06d5d3b8157e247b0d49f65a0e05a3083164a456086211146627f4a931c99c6a2cd0c0b8336717e0effbbeeffbbe50fc3efc4e85983fd43b5310b99399e3373341103dd0c884896f04d1655073f7381cf1db2e03ffee437419d47cf77f010da4e9d333c30643b0f34610ad338cfdf4ce33a7986b70c4b3043f0467ca0b9e5d0ec19fc17514cf523c039640a8148c5d499d532204010005a318000003201c4882244ab2a464f714000a44b468b0a058448e86226118100c07822006624812421884613086c130884aa9ea017126ae2df62b17c9d73d4aaee8e1f51a762dfeb88ef7af509ad75bf2ca7297b5eb4e6b97edca75bf76dbaeddb76bd7fdcac57675dfae5cb76bf7edda6d77e5deaf5df66bd76dd6ae3baddcf6abfb7ee57abb76df5a5dbd01dbd741e3fcfa967c6db55fb9b66bb7fdda757fedba5fb96d57f7edca7db3b5eb566bb7edcabdbb76d9aeddf76bf7fdca657f75dfae5cf76bd7edda6dbb72dbae5df66bf7fdda7dbb72b76375dd62e5beb976dfafddb62bd776edb65fbbdeaedd676bcd77d5cffdf1b63e68b4a874df422debbd8a9cd069e6d52b97f2755f724d0b5ec58d2bf4acac6f8758bb49aefae9351d702d6a5ca3b3af6e0d5777e9aa3fb9a605af45185768d6f5cd70ed2e5df7a7aee84058454d5ba1b3afefc76b17e9aa975cd300afc58d6b74d6d5dd78752d5ff5a6d7f4e0b588798562bdbe1baf5de55af7a6b0a201afe2e6152afbf5ed78ed265df5936b3ae05aac718dcabeba1bafeed255fff49a16b816335ad0954584b04ef701ad7b922b3a702dceb846655fdf8f576ed2b5bf4b58f1e9570fc3234fea76f4f0b4fa2c03f8de5582b9dca1081b064772a421bbb968453e3cbba368dd9046565584a58e8480d05c8239bd7a8f250b373716a9548c2b5fb378a4798baea7be3d96ed3eeb655289965c8767e5172a746e187f13a888f3ed00fdec88e6f42d8778be9be1535b84f4e0a6dbd24ae6ca40b12ce68c3cba20326411bf70c63976a910d1a4f1fcd444e23299d39c389c854df0744759183b304afe3e821dced2c01bd177e633db35bb3a2de7d4fbc31c30c83c308d8d07c49c4dcbd0e0c7426c9765dba23d34e65bd251290c2e0c594ee4694111ddc740ad6117c82d6206cd94c4ad07a4b9aae95f0f56d001d690e16c5d5058994abcdb47dbdf23756ad3ff2019138839a2e020fbd230250597631c06e99e1e55dd2b8aac95808249f36e1e9c4420afd67e26075fd269b7f907b295e6a61b884adc2fdc6ae447bb577978f045c9639f90ae9272b5668a61ca7275e329168fd46f51b6e1a988c87f3627558fa680ed632085f2c9d81c806196f221d8fb63f97eac50b5f1c2b2a389f25f0c0eb0557866b7ea82e7acb5739fdd5fe6d31e117b11215f3f633e3df1a1eb923f6c9c4d955ae93b66708c818839ec5dba7cf9aded444bd921daa8f0bc373f77fe4b96cbdaa265ddd60737ed8517e80bdb741af8fcc735523b11555752f2f0c903300c713c4627823d8b188650fa9783a3a37a34d250574b92a248843c5c182963fccb6a7ea49155619713e0646bb4b3144e4ff104341735e2aab65acf20a04ed52b4e592e2be5379cf0c65e862daaeb23d295ac8d8d43da4972572994f420ed7425d627ecae7c207a50528d07a7fcb08b6ec072d457e4f7b4e20396364958724ce337c95a12c2c3443a4d9fbe1eca71f0df09e9ba80203cfd2ada0140e143921e01d904720353d4c0234d7aaf31da35777fdb50958a5a4c4d3ed849bedc1469bdad725aa171bd351a9cb236e23d3cf7c82087f9f0696c81a86b5b6e07b3dc5ec3c8d106bf36b8abebc42fd5566053003bd77f0c4620ca3e1f5506d162bedde293530bc94e83500fd0a1d83a725570ae946e88565b6368ef84b43c2a6b018414e7374ae349b028d2cf6b086c6130483efc91c8fa01a423edf2d93c06adf523f1d1e8da1d679a2f677327321f38dca83a81e93f61af1d2d94e1250a59091e5f7e8f4f04ef8c10644be9e216a2ad57b11cf15dd3bffd8c4d3f13fd724494a9d75a8b5b084cb834a4e844bd43e712caf33b5fdc694f0ec646781241fd2bd90bbffde89ebb32c1df4658d924471d6abdc4a08000fe4e2715984306ec0e627bb75ced2fed1b2af399f7d1330cce44ddbcea3af92d447b323fed381bead25ad47fbf4539da140cb15bbe271f75903b60de3becc0570b45448675d32781625b02fa05aab88958bca1629ab0533d9c6eabfcd09ec6e72e1063fbec945188a2fc918c7a0c5beb6bf22bdd372b0ba1611fe6f1a85e263197b4915d299ae8398c9168f3e66a341bc31edf25d5f6ecc69f14ffc144e676a2e731b849c0004108d5fdc70872b31c64f058472912522fb385b2eb116eabaebc1457a597e7186b60be4c7cc4f344a37068331389b7db51a8dde1d88f6267861d206c38c71402146a266443c12f5d517e010c1148a3d4c31333bfec2b217dc3a3aa8d795bf4a6015e0215893ae02be420b454b031e6722288fb2c4bff3bac0837a60d5b42d4e31183c6a5cd365ac591eac873451645c9a5ec57b495262402f2917b6bd9f85a931fcf41ec1f69ade20754e879f023029855cd3087fa5d951f7ebfeca91a63264b45084754a48e45bfb4bbeb131431be39f68c80057135a77f8fa4a2a7513ee49e1dc5ddccc0b14f12c64d8e48e7b0f4da6f7153cc2ee2835c177f0bd71f3994ac7c35159c230a2751670ae6ea45d49410ed9c8ec1410054f4f6ffeec518c7aefc9faa586fd46b67508d5f1c48275aa17ec548f85b36a4cf6140134590324eded02bc9f30efb580cf704e4a22fb1eeea9cd3a92b274d112af521d066c74f82fab1fdb8c878c2f8d9698786a1bae6010fe5692a4576bf4f8df8ad34232f80011d18634d6874bd626a330cd802fca9f3ec81fe96fa8a8d7c64abdf1196bfb3f91260623e2510d4c243e1d2978a1442a03da1b8d62e27866fb332e8f06d22a708804e2176d682ee7eb637d1d254ac1ddfdf7ea7c260c5917e873733ef1ca3ea75646ce15942b1d6b8000faf409f4b7a82bc041d9f746ae4f239177588292680b4e0bdc917f96457c8b7e618da14e1d58cad1bde6c1aa7256c3e24b6604bf737c43b465cf8ea8a8ae37306ca24993ad9d60db36196e21365011668726fba07aebd11edbde20c26f47fd9084f6340352c5979d5dfb4d49d3b1d8cada58c8f6e9b477e143260fb96f0a0e273697630b483f70e9a9336026df28dc235e298008f9ac9a940d1cf8b8499c345cb1c4220ecaed12feddc96c4f6a90d810761951dd38ce0ced3f2cb18c2c80cb0c3707f8dbcfaf75c3a987d869cdb828f1f7d83dbc424eeb36f19f72fd034f011f4af5028d5b09d8b531702cb1d5e3d91e09d00cdd3615a33adee90699608ec4e3d3b59c4a22653f3519a57aa0b4bad7f8e197a4f0a815372341c0e4353d25040f29b9630f7490e74773623d3ed489485c981fe9d8dd0c0d8e440bfbee50fff199cb4f13efd8cd00684ec0dc9f0962a06b33ba78f86691c4d7feaba0f32ffb972c5df51715b5bde6dd9c958b001fd3059385c41b12aef1f4412fcda1115d2afcc7f78db79b84dec469444f9c766b396021d28ad10a6bb257a60f1e13dc78512a12ae4f1b71fb0331e229b5306d6868f28ec5bf1f0226c94d7cd2724f8db589bb1447669950b9abf3db3e087faca290e16343329c97f0727e359eff698632e75e59bb8218dbc415efa8a3c1d0e57f3771487135482cda48e9f45cd366e14cbb283c1c4fbc087f86966a868d76840e4adc82b64f729b4bebaea91b9fde8e99e7e165f2ffd40be8f050a9027af1d7c25e6742c7977716ccf587eb32dbe06dce946d3e81bd6b11d33271ac385bbb00b06e2040a86836afc38276dda159624eba292c1491265b08830264ebb308a8d9d98b664b234aa2757e353870280071a79deb5820ef350a99fae2ebcb1355cbd5160c1ff7b5674330e8a92e003514d8ac1206001fd7690f04b100e84fb1205fb18a038d0fae4f37f028d28b031036bd344d7e84b1897a597458c28e937ee890cf3bee752b880dd574208d464567301e3cdb5e0ae0893342f872b2e610747da13583802ae494bd14bfe28004ba66c2225dd72ba34a9e42bca1092262ffdfc19dd199fcb0ceeaf90a53ac4134c112b61fb6d82abcdb3026a252b17732eabab2a0a86b594a44eed5e42c8571544eac51f106b6b077ff161e8390f56caf2c4970cc5da7c77c8b17c86053a8626fc61c731cd3b7a036e01d03c3e1e49f2de921b28a1502b0b0050bf51a52a28049cbbe36492de298c7c11d8d74e35415d6c404d889ff9066ca9e27e60f796630a339d8b80ee5e2d71191e20f7e50a738e577c9db07f9d1aca20d99806b0d00d52ffff08b54d9ae6eed601803f743ebd34dc644e24d2c0e03a2583e616618a86c1185903d0e475aee82ae6b6587bdf98f4ba9c12f5123009f5cfddeda1de092a290906bde4a76ef76ba888a29c6c8218253ca98791973a66751e01ce42342e6989d93e81e13b5db0b22d50d1fa151a6c7503c1be5d87a5afa414e5a03ccd740b2ce9ce6d3bd0c2580671b4c6d513293894c06a9340efbbf5c8db3bb1f2d9dad6b0b3b9d3b016f0a614fda446734455e49187f76d564fb3b56812ddf9048d778f0695530a7756326c6d016f6b8ef742590fefe03a5e3f8301e37c295c06bac8e4ff3e00a26294e59aaf5f730575cafd8a2327b3322db1ccaf5c0ffb24dd66b7039488e0a23504285be761d6c93a32100f260f46b9092501612879e6f29314a640b3d1d39acb6ecf429059fb7d34dafd27bceee5b2f18d594637d1abacf18877e9c38f666042bcfd8c96198fe83869e6ba647d2082040371f39361277e5eab4165c0fb6b1bc3608d666275a1b41417e704528b69d7fb38bc8ade474beb2436a6c1f2be704962fae155549a9cddf3b1eb55ef912936b0b5885d96e37066019cdb2e40821387fe440127e3267bee164442b25c977e9dd56c1ae419a32cd90b4d5456905ab42cfc3d1a424b1c18efa80e02ad36f4fec07dde3484386a058ac26641f922a3165fef36d896051948fca7c0351d33ba460bad2fcd929931ddeec1e8d81acaa3934af864ee6c9c37bfa73c1aa290e5d6e2d6409edf022d2983c0e95e809d235770305018c21752a4be897a728bb50a904b0ec0764af2ca9e8f09e9a80fb8f1b121a6cf1c00b5a2058efa4010b791c81744afa7a956ccf9a017809e9dfece6ffb809e56a148b4092f75ce0a16850a076c33ac58ddc1ea1418d86b783715f7ce7e022a45d620d7314d54472096c258da5e9242d88c9a33b3cb19098604a08b7b48a06cb48edb2679f1a259e90ebb63f75f3447f37116b236427804049c44d8abdf0ed5d77829ab8be89d3d946b2ef801da07165ff8a2e3330c2e73f0adab48b4bf59540f22ba6d2ac6dcc49535649e711ea7c2bb814c2b621e84075e0354748a45237b34855801b86de3c30758f7d85d01ea934c7e32b5a014b1354bf0e1d9acf78bc210e10536988af0a5c18576294c1e35e55f89b58a4f81967ff6f3afe51b57e364857216e050af71ad105af57526b90841bf488d9bda0d7cd9d64a74fd15308ebb4c0d40373f5f6278389ce1b5f25faea966102190ae04bc1b151e6c40c019a46e494b4549b892291f42366bf890cc04ad770a821204666a4fda54de1a3d4db6cb00cf279234fe5374be307ce170014639064c71a0d5c8174cfb81b63c522775da7d6366060a74cfb66a09b5e88478b2514ace1796dbb6bfc790bf48540934299cde40003b907e41fb27c2904a58b82ff89a546f9f9e6eff68e7eaac90cc99f37135ac5c2b673729a3f09fa7f5e0865f935bdb30e1864ee26bb913c29bd5656dfc3697001fddb4b2a68800b436463751c4a3cd63a6eb9af7d92749fed0abd46c1c79dedca6c4e22d9fb313b6a1ce251db65632162cda9b9505ba4d6dfa99618d7028d54336c5acb97cd6ef8652c59b498d2adb5251e08d14ade6b4d75ce88fbf7dc5b1fa6be554953e9e172acefb7df6db800636da6f3c920471481a0cf3fd0ca5abd0f9994dd86c3d63fc2031b419d023277e7f93980bcba11940e1b33cb510c9a34cff25ef4abf5bbd2fece57c2514caffe74a5738c13e4b434ee72a7123451ae96a864f3e5870d76d7450c4be56a73819e72ad3be36658fa50b4bf64f90c1903184fbd615096676c01467b9682b8cc88226cee1a6eb2e9aa96a924389b6200e84427122bdbf9002353d9fca640a04447881d4bc5b2214c6b05a1bfae17a185b335c70e7ea5bff2be8662d3ef29a2b1edd7ac42d8d1d4038e4c61aacd1dadd70747fdf57e83ec641f3303a3e9565c7c3977aa00a134ab96fbbda8c5ac3864e92192b35c2467b1d0cc615458625da80c3340109ac6be391ad7a96acd074b38cea22f0e8fd34196593806c72a36567250aadb688bdc33ad8aee7489b9d1f3fdd2a27c2c72eefbfe8d89534f3aa00de0b54709910f0699cd9408d3716b52db13f973155d2f9264a0334d63673d953ae997128665562cb94ab943151795e8a7e4e7c40b26a8e2e00747dae6cec014cfa91ebc3ba04b83b0929a8ef6955310797e29a9cf238ff0838593182694fa8eb068c34bd7c6b65311f3bb682c99a24c61d594f6af8c0d8b96aa95ea5a55a84554fda8577df4325b18819a7b83b52e893c1e64d1f70cc5bba54498284c0190abcb5e8087d7b388efcb24b1e26989016e7da32c0012f6ac8d3c8c35bd749d77d59bd464cd7fba2f194a0efe2898fb44ffb6684c2e6025e3884f8bb457f3d037fb206da04fa2140d7ae8ede07a47f0a5c1c79aa95b34b7d9541868a0c04fdd4f8d0d46ca073dfc5a3bdcc98e2b8ff5a0b0eab7448e9925128f846d82c0b066b60a09dd00842abcd1ef5dda181b9dec14aab28101fad512ca06d41aed607d1e8f0017db6d577d5767d2301520b46956129417def2abb3f55c19ccbae37c7e0ed7615d5550cc34d4dd8c0d845f11e9d84cacf7b5f03d4df16655f54e282444d4ee15aa17b09fcb5596ad31f55008df4c44a6c0c38a0e08f2ebdfde2bcb604c0e96d6e9ceaf56056ac523ffcceef3e900b699e82ce17b07cd29fe12db47843e8f85abbcb02bfb4274a5700c511b0b16e6403b844f4de8600b0f1fa2351041dd54f1fa5157470e7a286b7d180e6888db564274ba09ae563324a73ed0dfb9ca9679c9518f9dae25896739afb19c4779c24582ab97a96879db1256cf796c41377c3cfb3a9a070a2a41fcd43e375d8878a29fcf993dbbaa0dfa817abb0191718a918889aff14bee366d85f030b8f442538d953cdb6615562c20e78c096cb70a41569042ca55e1774ed9bdee3aea53085894087da89e14922b1077969bca4c5e7f3184a5f1204ee0cedf46dcf438b495e95a8b22c532f9632bde2823d604240129c99c84c5520ce5f29e9fc92302088e2b76594d58d35e0c34dcd5221d6b92cafbcc1d2358d7a4eb40861702805541d7e4aa60611719940a5616e4e47b90e1909cf641fbcc9e3f4cc80f0fbb3e0f52a52a6acb431b907e87c260411cce7a6123686f95a736463d446da3602d4b20811589ad888ad6c78108181f9fdb335c73b3b8e84f709310903e020506f51070fb505df5eac50b3c0f5614047a439af39b98db12887b6a904e70dccd7cd8aa6749be8460a2ba935688714c30034db37859c152c5d5a4fe36a7e7fffa651e48826484af8bed08dcbb819e703542b9648c5f8c7c52acb0e5ba412415e4012a2e5075d5472303740fbce2d790b5cdcfdc235651d35ea54a31d7a7f94cc966880fbda247a20577d345319959944d4dafbebe9b784203fc225a54433242a06e6cdf21b2227429f8f04dea54b9b2c1ba48505fe6629da4542e1a2deaeb2201630e9760f3fb7d0a3c28771a16f7abfef92204da4bc6f5ee6da81667e1fe459550f627ad0c298416ea61948d61a9372881f08b82a0d10458b09287c1162587655f84c08ddd2346e1d5865bd214a6f96ed8b0b1d9e0cdfa31d8c73c55d0e56e8c57c48670ac0dc2f0ebf492f499c5fd101bdab629b3fe07bcaa8d369588f0f261b4ed3b8770a66aab49b0ca3bf553e7c868113f79a9b2aabb9d24bb68ded61e4e1c16ec5480427554175ea641ea55b784beb64ae0f580513f39528b376f8ba5922de39406ae1baa42df1581a4517b09a22da2f2300f46c568dd5554cf74f9d686a628c439b4678ece48ab80ab5f74218b8f306e826c861402424655cdbf66c59b2474a9bb6c1781f0a858abf5ca9228ecba141e9c6bec73214fd684ca22730c15b2f38be9e7ff60e8a4f59cf5f7c001f34af2602b60bf3c79e019a9e899fabdc28a6b3742292e8da8e011aa6f4a94d0c8c47feb31363822c3d622746237554c2d3208e0a1206dc4efaa684bb0df2cba43ae2fff49ae2a0afc1d88f52f600e08eaedebf5ac42104be2ad84435ecfc68c96ca8f6ff7620fd6998307860588b4051f16e5bdf953ac95200849cdb445c892f39d9735024e0e48fbb8e272a0430548945ef35905bacb8762ba53761636016062ef6ced60183362928e5e1696b77a06f131aef218a0fad248b9315f001e9f520e9d56e0840c23c4b2d0e974c6eb5aaacaa9e88041d3ad438d748cb3635a0c567aae2fb6f067b5530d6e8eda5b064c0ef0d206160ce7f012773443102401b0f43c7a32fb275f41b018eef9a036c76fe519fea7ad446d4f7d3404743b8c80911a754f5b3dc4767b9a9b21aa87d2014ab85dc8b329f370f6f87ad52fd629362a04efc6b4c0087d67a698acb8a1aa40a698c3f47c920032fc037220758ba3132d9fac38622cd55aef6c45146dbfc059da8c048573d9fb5228166a39d95b947b0ab6ea07578e3c7555dfafa267d52f0c6d7644ad694ab9eed1620f409548b11076f5de6461df3be23a2bf0445b177c068baffdb754b36af87062625041a19cf0fc00d6ac5a62d777b7fd021034a5500c1b98467091301f97335a72ab4b386c14f0c39a4191fd4d4ad6891a171fb0dac953080d4c0833d38122d9bf692f5f6ecae0e16a9d2e1c29923780dc041ae0d3164b17348f119413cc8105eafa03a9b7e712147ea7c088de9de3fe7b37966f10dc366b8888879a665808f70f4bc0cbf94a2b0f249a6271eba7e3c056861c8bc1fe590225d022067bc6311348acc71ca68286bc5507505a82a0b383718cf73f5002d46622701cddbc1c08af411415f610c4587c4a2edc62c195949ac5024de283496be5992beba25c142e93f37c04fdab02512a0a44c241ad0d4482feddaf8adfd0e15ae9a2e98f5f5ef0868582d03bbd4b7d292155e1ce2ffd49cf81f0dbe7efc60953dbcdcf5cef3143f88613798c0f68b27c9ae70a08d88180bdfea1f8dbe91bfa1316735da17015e886ce79c2f2b228261d7070d7c885a94c52f8a49914a9ed30f0f319534b5ea53f6403eb3b27ba899ee5ba1af7fba70cff07b0a29eef0a2714df0a68912480707b61b4e81f295f4daeb1078807ebcf1202ae8e76c16cc74bcbcba49fe7fef0d75a80712bf0d6d7315dbeb7c4f6084058f89ab045c09737605df474606547188f0f5e99b9b03d3f4b31072573af948cba6158c98d49974836991bc212f6e92088b0e6c581a048a33e95772bf6d40ce6b1968223f9b067131d4ee3119595ac5a305191968767a7a78c6707f5a315a2b0b8878c68029fefc329a52203f7accbc5804460f4b34d0c416c32ada04de85b734280d073d879a2ea57079dd318bfffb3240883463f3c9c80c54570078758df28fece11bec019d5d6bf145eff262d7d5edf5d37cf3a6add8615c3d55332075fa2d4f3f46f944398b008b7ed5081dcd0a714c04d9dfcd9645fd8afea2279d4ae84db7a3ad3f5e86b92d72ab4593523a4064f40af370f1ba444eb8db9e7255d5f2aacc2c650c6636d702e6c59318063e365a355ccedabce55e5665dfab68d79aba965bf51231d5b3aeb2ef5c160332353886f3f8f7d821041faaec0b12c381c27c0281dc1f15e1886512f41866b1cecd0aa4fbec91b87b9964c9d444cb2f35f87e90a79fe8ce6c6c497958881606d25ac4f0a537f0162ee8134acdb7d07862c4d0e75926b32a466feb62c510f8e45dc357b7f30baaa88d784cfc654406074cc84c2bf438fe2b22300177be7b89907ae00007a77cb446ac267b65dab42384b5eb6599be121da9e044b72dbcecf823d997951641f91b37f12a9195744e9f208c937a49c2d6857cd02558542656acdf5f3131ba124ceb3cf6296a181d57dd167902a679c5de9b40d4be1a960c8e128a3a41301aca2d98e5921dd9bb71c622bab6bab31876571584ffcafd75efe3a31df71acda23b649467e2cb947f577407696138e839f626af0081a37cf6ea9441849a29ea0c9fb73144b3d3ea3b86e4190d03630c969367f8ad4328eecb0d3c557d9d01dada71543d969c739f397a4dc2b17e3100eb8955300c6367aec5432bd67c44ef08457debfeee783f31cdaf51ff53301e2cecb72f591f1200959b9f95fd2ac1fb355a2a1f6f28d724f9d3481202d75b5b5b2cf7903ba213b76a8c99c5548a3bd6a3a3820d7a2f77d9057264a572c08ec6bec0ae830eb8520fb6d27ac8d73f278201e790bf7fbc9531ab45ad755e140dd4772fe075d2f623710119516cfcf8b1f58af2e0882a86d01571390d3fcea9ed5021019ed75409b4e2361c21718606aff903abf07314426be1f6213f90cacfb7aed8d2b141448ac4f2c0e6fc6ebcc0007495105954f87bbe89c86d224e5ed15026f6cef3bd25a79f3a015066ced2884e2c85805d386f9b5433d0285241bcb3040c41b13413d3e570eb8cc58dca57a3c40740ad1e7c8cf06ea60b3463f13a161db07aa87b536e105b850b46412f91879ea52be122c8d64e1e186823751e1d1a79c8c0af17506f51239929cf910a3da04b595c443129ff2a5bbc7206f2cef57ab115fd1368cc39cc00d69cf8c5dbb255d86f8725df4430f8fed302ae7cda3989907a8355dd7b96392121bd06e77220fd364ce9e44e0cd33ba6a06040e6aee45974d65b935076bb9bbbe5905f99d8ed4b41c9d247d1bec36655385397e4905b457941357634016e0429deb136b46a5003fffdb5dc630b309f332eb5cb0bff5d3858655d1eb27f104a2ea3ab5a68a24ed68a7fa09dea73eadb5ff5d9e30921978eadeac58c1005fed14a37afbc5e376943ee33dad43208db976085a7c3a332f452d9c7222c2f53b02bf118fcdde53ffc4deb5071ae63a3eddcd6c0c19f44048e3bf4867ee39d5cb86af698a7a6560ecea622e099e3bd61afef70e9acd9788da6d606e25c140477e90bbdef5d4cedacdbc7dca9a531b813f10bda12f2baf72dbf3b54173d8e97c49c2a835bd4c27889fb26bc983795769a8219933ae13697aa985abb36cb228979a970a72e79951563393f504cc1619770cd5bd93836fa476cb885f62f29383f2799fc023cf0595c8559bd580caf55dec3e8456d2ae9c016bc588cc9854c3aecc5bf64f4d928c51fc623a0bc8c9799c7b3f674aa16337d5ec1918901a904bbe4497892efd85145202e57a31e5a919e6555443cf83c2df972b8ccc3b1d318da6797939df2a44cc975c8e3ddfd7e887e07fe7363bcfc40a3eaceb7a86e4b013ec365a0a80e98bbcec27227c26a17c5bffcf05c8bfafcc737c00007df58df471e994209a270ebd161d5220c48f9462c56825f956d90258b91f0e4475fc01f18531f2e66a96763ed1ce5b6a8e160940b2298e6112f43af452f7dd3038616225e5dbac69f0f0409171358ee903ef63132e152094ffcfad9200b377cff638a7160b7f6909600704d497ee2e7a90e858312f8cf0bf683985d25134fd2360a97923063d2dc1a61d6a43aa6d6dec596f24adb357b3b664496be07614da805a953ca688d51e8ac51a962824a03d71b5cb43fe99a2644874bddc8a3ff62d948f6462ea4c0cc9c903083990840af66a86c7ff26043e34861490b91b5399d275a69d553fc5884acb16f78ed75344fff3d176dd0003b92b1d8c2f6c207cde33b534f3412c3d4fe6ed58ad2d52674fb2592cb62a1f8aa1a3174bc6052d6688166fc6e78aeb0f8a0e0291c952b9b2d45649479ad9153170feb8b459a67dbdb0bbc209392a48290d7836c41d0a98bc49cde4382f191bc2030ef54ce9de6c03304ddf24b0cbeeae8b4a8aabf768e1920f7c35b5002d218b74a662a8c9126a18f1f7ab12a3f52d1e3f6ddb739015cb1ccf88c2b64b823514abde5ace23efdbd90a193db9bb78a49836820de90254815ce7a162b3a90852924ac9f6d6869d7b550a235ccda010d23ed5ba1af05de9e9ed80178bdc9edba1910c694804a92d23f53c6f4f5d258d5d988d0a66d395215177ef4fa3f01dd9c90c902347423974d5239b4e53d05db83335357d6d8004d596b270b6d66baf3b44e526031cbdfce2c1e00a290039d30db8a2e0ed2a9498e4d87c03a3f9b1b57fc9e29c9510b956c5ced3ae0cc4093eb513a540f7ece54430bb887efe8b8726a305a12c5910e4183627e3b6d90db9c608c238211392a2426ae5061fca0e28717ffa16318a2ca70350d5537ea59be37d32866fcfe07e86459243e576ad369a8ebd32bbed9937e9bef07c7eae3a02c0b8dcafd806f8897f69284099a04fe0045c471e5e746e55d4b4a404bacf8b748878e0ab8407e66c73dd03216980275014394bc2247c0d08c66010375297beeebdb0a2b314c2609a6b5603580f1d306179f1f0efa15f7d63c8061eda75083f60c2d15eee1a5e7a7bc2e1f99875376df2339b5f90d45570eb0a1d79da87b504b953796858a5e85f4ff35566f925d3655ca39c1786ee2f7df38678f291ad3362225d7c9dc2e452c9180046d2893956d9b937128ccd0fb7636566819778443c5ad267bd0a2446985b798a5ba834bf4036284a2e9add051dcd4a1e3e35620708ec07542c170de542c2e7757b418eb084853aba962cee2f2139ddd37441f5097ab052e3ac722ab7f970c202dd4155694a4d03cd85e126690167024396a86f86d3579953f109c0bf914c66ada28c5f263cf6c719ce13dce670fa26e465b2c9507fa165d5ba38532e0c2d04e92980795f4849905c3b4939b2db4c750add9ac9105bbb4330cb48db9bc04377f65f80d1c0313cd59e1a0c13aad00bda944e332ec759a8048ea5c6204813adedf04e2a28b3ed514380e1b9934bd78c2e29966802357479707c67d24096281e599321ca30f2fff9933a2208ee7510ab3d13ee36fa2d49675cccf58a0885d24c75e2582779ec9280bbe9b8fe470870c8a4c448cfb28414f54adc4c4ac62aafad9974d8e23ae9f43058c0fa2bfc3580c3fa2868e0834d52c6240c0bb8d324b2aff3ebc8f5d038f31b3ddcde5045e24d110b5b47b4a2bb15d179d275db53e962b5acc8442756be6d16b06286d30a44be985394440b7f89b47b9321a7436897046d531386e35c5a91383f7400c503cd40390b3fe35a29f590398010a1b8fda14a16d2a9ce5f2b007fa03d84c6a352ca0ba5cee56290ed22b2f89b76c6d375b5af6bf400892ec0fe8c42a79fa7afe2c90f9ce545bd080cc287d95b4cc907a34b4f808d1af8d785c7fee3df04e8f64050ae4ec4685ab82bfca4dcbfbb036cbfad683aa0596469439ea82cb571f4c0b3d0b74a6529173f2abd4f628c0567642b609e08ad376865c1fbeb61331b0a3bbb5af2ddab61515b92a865c0b04cc22f8582db4885078a3a2b47ee003610a0e8f44fa929d6750cc3b3b481ff9a3f3d1846d4a05de80de137dfa2bbd0585f5af0cbb9ba9bdae44305678760cc7c676591c8ca844b6146a934105ff68362d49b189df3f9c9890c25d6bfbeea065701e634f52e8f660623a9ad2701188028b30b06f2311cdc1355187be9bad36314e55581a8f11833e9599f0c7260a24eda07791cd0933b52fdd5ea97601ced314bf0d8f03995b3bb4d03ab36aca44f8e67301eca7491dfdcfd3f8437b0b5c52576320a4cb94aadbdc29971b001432c0d312c5ea2185c15cc539edc11f32ccbe56d8592d20d5d02424b3c7a580689da49f3efd3d63759bb1cdcc47fc14af40fe38454ad7b72f5944a8e0c72116a66b8c9c6f997020b8cb379b79516b5902e2ac21a413cf0a76d478767394a26b22a42f35ad2b2df38ed46c110db12cae7ec4e637b9016143c941917789536241ce1969f2f7c16c8051d7c221bd2f019a7516dafeac0f5bbb29399249c25fdff7d8f34a585bf49053a09d989b0765544a12d8444bc06e4f3ebe73468fa8b089998c8b5822d2f844dbb410e44d836dd8868e1be4b66ea7ff19bf88740d8629bdda2d5c0b090a7b710ab159fce1cf2cb858148f6d98100eb5eeecec1667ea648781e70894a7c2b59cd4e56224fbe80f1b335ee5b98b8111f9771f2b6120e5a866bd665d216ce4e0c487f23866f88c31ec15823f29036f45d8d6f03ff3ea87b592a4f5da1c7728c1554dbc72db1d6edfbb1c42a854d8cbba2d5632722d36c45b45b84206c4ff042abba00d17b69fd46d9547071f0844646e27b716f9f001f5ef3bea5841aa8c3e7c3fc29f4d270a02af1295923a5091940103065ae8e824f8191317c1731b5ad5c0ce24ecb86940cead60a0a4fc23762d15c3041836a3f67985c39aeeb1af27d00df0bdb75f51de1331a9e109443919ba8dc5e4690d4ffc5148117228d87fa3fbcb755ccac08b1c73c76decac214a08d69ea06bfb5580f979d5aec11ab60b3972a868080236b898ffd1e7b1a9479d242003dd108fdda0a8105de4aed8c9c7def8ed8bf606b0d890cf960cc855ae7b72b9a6ed981632037df24a0dfed08af8c2b2f695f408fb573449b16c8803fe8fd629a033867013527c2a80def0ff4aca481273aa1bebaf18f3253147951849314693b4b043359b6e61a6df32f50edeeff40ecb179a8d97e4a23569800c8538aecbc658707f1b3e3ffd5c26459eae20a312f21863f6484e888a131c4cdb904110e1d4e3a1dd16f781c53d16b006084d12c8828b7a18b8312be63bbe9cb257fb80943cf1c66ec0f4b11e271cbfe531d06890bfef26fc1f8f7e3e54a9dd9de8de7015aa1a846cd614d554263b4db82054e39f6acb3efb7f70e28df366d8711bdfc85ad1d4dd6e638d304e4b5bd91fda25094f1b4a7bd64ab302dbb5ca848c44554bbdbbc5010288c86831db0d2d78a9e4f72e1d9a55e3f4402505814910ffed73c8692a6b655ed620c9e1a894d4e46c824edbbd7468c514a40323207b98163ea2c768a428db3e723274ad12407bee10faae1438fd30ea9b0ae81c0eab2863d72bf76694955d57fca18f993f4e9bf029ea42541db4193e83c46b0c4b04a9913a994ed12ca9c2b054cf9b374f935764ac29da8cda89ec7ed3807beeb227c0530d741cd85811a968a62b41cd693b600a2a3f96612ac74c63e69e8b26d2ccb22fab38e70391e59cb2552932d5834a7db2c4cf91fc14093f2def73d2ff51a383ce3aff5e5432cdba28c5a5514bd8ebd22adc7e03bc759ff4f30d90a512c5795374f888d530c3975c80b29f4a609affd7051955b824e45dcab7b0a54e8c757ccffedcc8343745b843053425ff5a08940803f5156baa7cc29928efbc59dc31a55e4993be520929b6aeff699c8ecae31f82f650e65caf368118bb0dae544fd1880e83d828e48b36854e75cc3b46c40eb68da7d6e75fa0699125b9de7a39d5a122766e257db894c718ce6e910ae09ea69aebca2419e1520a5222808cbbb5960ee1cbadeb9344e7251b3ff3292d9b75be80e0d4c59665f4f104b3f6e85599b13ea117d56bb244927243580aa48a5fe125830e1adf4d5c4675f76b1ff39976f1e8503a682e8c32bf0faa20c296882fbbba49d0d8ffaab775d6a3e85cbc92c8393516584e2ae738f54a9f4369422f69d0d4a41f5fb0337c8c689078d8443be663e53c76900e0bbac14de2f78bb24a4623b6bd99efc16d23ffcbab218107050b83434af651af0099449346016e4767c22d9ef50b48484d38d63023795a7e09b9fa71e7f316580241d47d831aaee471432ed6753dafd925fda9619c32c1abf2f098fabe5f96ec12c606f24f95be6f6e6a05ef94981a0d62c07526f8efec0ee2149f4760985daafb1f6985655abf2634164f77f90b79cba4db62bb4096217bbb340a5bc62c0c36f1a597fbc829e1335f716b39e4ae138588573782c0e2b95841ce42dff2b397bfb0804aa031db2a3b2c89facb58d28fcf13047b72303f302f42b15fd3315f812f029dab0b9d11c0a12339ac3fb55e41b4ee77bb498b7c5397d891bf4188045ed39038d31cbbdb69970985a99495ada3da8915d054a209436caf5ac91917bd7efc5c662d08396c6430a9a88f7020c932f4a1161be7dae8167f2e1ca6d848b8ac236db5d3035c1e043a9593b75c30542a4e3ac3f95919fa88520862cf6bd95ebcfdc69d7bd206f927f376962def9e7d6b0212b5c5f4268e828a851d78ae60434063dee7f99d052e5eccdaf0f8f1960bab16750eb71eb436330e92a3f8476bb6662d218410697b6fb9772c0c3b0b3a0b72359a405f91a1896cb74618ca956e595ca5fcd09ac62d3467b7e6856c05aa40b363f22205a1ae9e3b4f2da0c089bcf6f465ad90d0367235756da7afed53e27a3175cdc6167bd45581805c138336f8a64f718e682b5005cad356d0a665e904b2303a58044794efe788de281c6d6864c3a00b2fd9fe25db175e8c70b7db4721065db0df6e6f64340ac71c2d7cc9a3504ee1f345ee508a36d4c00b5804e350498a0188b26ce8eb2bbee9196e4c7728cb873b52579e2db3a69c92129a33eb0966783266feaed0ab897b584c23e5b5a7e916d89779fe168fab2c2fafa558defb7a25bbd5f064cce8c1e40fab823b8e40ca436b404a294d0f1a2aec0fed2c24abff4345e622f7b71fcaea67cd893b6f7fba3531b81171ed8ff4c132f4b24556267dd85b1f581de4ee4e90fba39dd20189618372ffd830725fce1637c341ee8f5765b3c8dd4baefa962479cc77e12779cc7325b93a816c71b15e352acf3c72318f83420453b27d75af6e8ddc8ca75b23b793bbd57d28448044d7a45b5d6e17e4b173f26c7f542fd43c77ba356e3ff95d383a17d673b3713b4288cc48a4e43182f337ab320d738d10b4a9e75ecf81131369717bac5bdb1173d5ef6d0651b2113f7493491fdb13f247f78344a1dba290351d1092d55fad4c30010453a93c6e3f425a04d21e446beab717e1ae619c7bee1bc6e901a7e9b55e8a5cf5ac959696a0702fd22277203dfa6815977ee462312aa335dcb91965bda48fd2fb7407f9e37bdff7e90964cde927c887035249038c5488dc140801da470a8447cf98e59947faead6e839a1b06e8d1d50d6a25bdd8226b94f9b749f3ae95693606891bbd6c41db73c3b20a017a5b10c1649a53aa1b10bca4d4ba3b003caa8102c528f3a0ae3a05e2fc5498a0185391f3a49304c918b51560705751446c04f51e7f3daae0dc117322d923e3a6e6787dbe176ba1b53c5606871c3dd0b088e68ce39e7b4d67ec4d960d6744033ae0ae9c37e488c0cd445ee2e0807b93fea8068cd3644597d12cbcb5bb86d88d6b81c661b52e1a1fc8281688dcbfb5c8cd6b8606ed68247150b1eef491828c5612ec6c5b858defe8550763671bb16eea8446d256adf5189dbbd8f24a44b53a3e25a3cbb26fa9ae2824374b46f3fe599c1c9dde69e43fd9e3b876f4e373d471cb959b6437474ee5158c7f413a633ca6a5378c39f1c51064e0c12b937dde6def47913bee999d8c6f413c6f4c627f72fce1173446f7e37c8105193e28e2e4476f545fa6cc801e9cd4aaf7ac4bdb89dbf867a45d42baee88bdcab150d4d8f1e2421a3734c7ad55c11ada13c5572ff6eaa7bd5ea341d051abba2ae28772f58cce747f6e2767ad53ee076b21192473b81440d7cb224c130a49eca196cd258a6af29dab0b30dfb7363b0ef5ef387c5f4d5f1207d4c4c79903cfab36137bb97e4d16ddbbddd8baeba9e3b8e98e4fed8918490f26847f2d08ab8f4c5436b72c43e85511aebd33efd913e66ee7760cb34686b2cc195e7c4da944b3fc29b0fde62740789429fd297e4d19514c4fbd795be1285d127bd8ad2abbe17521f8a44affa47f288e28edccc0a51567fe4cafdcd1271335a330365f5b78d9ba9b859c53628f6c32887ac146ac595d91f282e38c4a68beecd928a1f00e519c630815ef567a035dd6b67d5bd680d7d51567fdbeec42f2254ac7ded893bda9fdca3fd91a1577d4d16e4c1b2344189cdb14a680e8702d07c8cb56d6d5bdbd65a1b8e6e3527aecc5a1397a607ad994318b4216918b4d1bc6bcf11bfe788249c2352acd5e08e738886b2683429975e63e212099931a41199b1048d13220a020d365710b0d83e20981622d0b468f2a45bb4051fa890643d322c788069968868094f0c05f183a6edbcba00a287ca4336c5129a906db1c3f9bca6908888c850c2e924a3af349c10a591c410ba3c5f02a01d544163e302c582034d47853d81061925d713564a2043a9889e2083e867e35e54b898909d6184e602b332460d62397c84a08590183908c1712e22221d80bce0810f1b09c8e70b28bed7175b9ca03691101a439484d0a0010f96904c2eea4a434748074828a1f3e78f69ad6d202892f0c9a3cb6bada5f9d96eb7553198e50e8f17e371bb158faa6c7b897b723da1c60fad444fa81144027aa28c1d2ad14fd1eb357fccfc337fd8cf27799c49d096b892e480064283dd34cfaf6025bba86439a8d2a30c925568c3a6954961dd9a232bd3f6486f47b85fbd9a3c141bb1b8799ac0787091d4d9af29cef979a55b5c9ed6861b983908d89fa28b27b22409e1f2d6a357b3a39cced3ac70c400fd4365f6904032a84a99a46e9f49ba1443d15a16f7135aa3e17e51d6ec17cc49af66b7c639d44cbaf5226b7b6cd71c9a34549282a872f2b4d6faf06009209446bbfd81504c43a9f5563d47574253e2da8f34d6d2968d2a90249270a508b3dbad5984d944bb0d3b1c715eb9af6871850a115e44d8a9b03c27cb8d2379ebb6ddb6db76f78fb0e4edcda457a3ebdb477d7b75a6d093bce191a6f14893c74b84592682ce7c35f971d1e02249723355e3081285f971d36670258d2a950914579ae491164928ae30c93bdd622265cfd94d5b08a63468b939802327c191bb258fed233b9b5adb6474757ae6975cac3c4d005a943b099576d799edf55cdd7ad5e996f6c9d06b4e8e6adb120d9abddebdee9bb3ef795fad1e49c8d7df1aaf48423aa4b9237932b8db3b9210d92bfc0929c9d9b496faa3f6eeadbd5ed369591647e41ab24c9d731c9ed792f8ae86c4e5aec9e07af256af5570c7ba7325db2eca3613657b1a942d1eb7b7968126ca23ce2b1bd96e3fe2bcb21d9b286ff7322d923ce6b523aee67d928850d1c392b2f0b8bd1e0805d29228db4b94a457f2de4532fa0666e63012ee2c9472778f0b5998d9e60e4bc9830b6526d2e250de72264fae98ce4b6b6608246bde06d50e79fe30e76aba5c9816f56aced68cb8f25dbf8c7218e2e585e7c97be3b3bbfbca9aaab27ca6554451feaa6e7c257dcc8a84d22f4fd25684ec9e358a26ea2a28584113690898c1183f2ad80ec02283317e10821aa0fa88b1460a602b961e31c670a2b9bc400c2c7a50c2a9058a182d20028dad545720c61221b820091106154ee040fb840863c70919ca6309a2072ff8d93a209c10c2088d63e1117a410fdc567b10ba01c6b1f000c619301f366b0230ac10a2562660f800619a72abdc0e182188c124410fc87042b3c550d92e131c08155137adda2ca3000211a33a4484d92c48c387910b72d84632283dd182d1a8ea8c46a3110f5a1a2e1378cd822942700189eb15549afa1684649d220414080187d1e6a4ea580d8a248260a5195b08c46dd3465b8d49428a3c9e86b345b36a5952a1440e4a34a119b960a747f831311fc1acdcb898d166c3a6e18043adf531657c3437dbdb48761aa721b1cda98d58384d75efa6691a143f3e59bb1c1450fcbcf278bf5929a850a249a572ab95db6c1847c0000b170ab89802083d04192498624728166d1be5b88e30830735449085173e55a4907d23156860c104880555a2c0a6a84202d918628c72c0440c787842e033042d8498628ca120be2ca7184307793ccdb629e18a114ca146153a236bed14d95a6b47560d9f1d58d9411845a31a2c19c3c4e4e382090a55d218fd2ca90245d6ae68155419b1c0d3e40548c801952b64884f5409a28a0f77debc408d1fbc64462c59a383806106345ad0032b3a7862840de2c8898a5299348106025b9d428d2fe61a2c9f3f5fb73a50b391bca3811a649861480cbd6a20bd92321930ae74b1c60e7458c20722c53419487738d22cc1841c7b8c72d6c47422cb51163d3195c8f377fef334f340e687cccb30af81f9e9b230f028b771e10a3454007591691e69b236c2c2ae41bfe1af6268c5541b516a81a458c25d4951820c92f00235864002cf11804c5004b4c4084a28c21522a071458c217091069010a8206a2208490021ca0f5860250568dc6087336eb063c61a434528e3073ea8428617557030461562c8c2a081501160b4a0074e7870822fb0b8c10b2c42d04511174108f2c10e78a0032db6b0420b2872a0040e7cb28002a4821bf480c5154caeb8620454906085106c30540518331d5071c51453a46062ca1151100105ec091f64547470820a099a48420d8620e50c26c2582248891bfc4c41831acc0089246080c40a64f0c31156bc8cb0a2043e4b8801118ab0d23346942e6090c50b664438119b01941e173c6901104f7860810d6c58810d5c431801060421c850c11741e4c0890d807822053f3fc480c7053e048182263d548143932a44708223f040b44319af1e98600b1da8e4100593257030e286980d42eca0a004b31c96cc7448a086ce030308539c0e3cceace3b3546dd4dabde2f148c7b28e8f605f5c1d1f47301d364a2e2d2ca7efb599fe429390fb63679ddc78ec32d0b03ce2086523f546b88faac3bc492c78f73e72dda13aee40e8cc36c2f1e3f96079de251cbfd8e7f3fd7ca81049cd63c37484338f384219367af2bdee1d7b87e58ecd93efbddc6f85e5ef45f4f1b8e0f183b5e0f18bed647b163c7e3e283c7e3f79f28c9f2ccf97d08491d4d4634219450f5ab8c45a6bb5d5d69a81866523f5debd1a36ac439290cedcd0e570956cf1580f5391d4bc2394f90df8984b5290d3619e0aa1d07be1d8e1230dcb277a98eac184f634fc9a346bf6f79209e963425727522c02faf6e236aedd05ad8775735e7da1bb560cce9f29050662ce6ed993f7e51e29dc84d07c7117ce59eeba8f5d6c865ec1bcf6d6594b6579166eb26dd6abaf89f43164afce0876823c492c747904933c66f7e026e093d22deea73cfff1481f2f79aa54f74a69e39b6cfe902f11dc71e49a1fed8c9e7cb05e3de9d5cc9f8f64e1ca297ca428822c7bb5ea70b9cb50a8b3a07e427d545152906d93f56a93e56db6c9a8f7f97c48bc3e9f6ef5e7d32bd005f92a9f93eb0dd7e2516c04ebd5bc0d17f526e27eafaf49b72a290848e484f3282280a34082418aa420437464300dee178d09777c2694398f30e6280c21611d57bb68bb623e3392219de62d23832565d9d0e086e1f6a1ac4967dae73307439ad3506644aaf7bc98193c4f08632e8010bc4c38739a909e47287314429a4b52c5437466b0a42c1965459101813b6e3373d22909ac98c88ed3dbecc04236243c630e9ec751f84c38894844a4a81383630ee2997bb12b739a9f70017c9c44f47e888ecc6948a4c7ccc4ccc4ec20edd8419a89d97120344626034000ee010000e0019809a5e8799204daf74e8bf460a8b3040122fd4e8be06d3884bec31a16a122f899102785cf5c26bce9b151e134f8466749024499ef4c91e62a60b01ebc146f76a62873b086383d362960b03e854b71e63860c52011151e739b143e7315f04d8f0df814f00dcdc1dfc8c41c089569a025e40de46428200c528cf98d94891e98b907622ec5298e0d94e769644229d2c4e0194c85286b52018494472829eb8430002209370042b0e2161277e0ef7562fdb43a4be5913eeea7ac92bbbb5cca1605e4aa7baae52395bddc14b2c255e8128e34a77e0ac73b65903c5ece85931424c755a1ad326f87ba9503cf5214dc29205b25d917311fa516321f25959a991ba06b769cbb0cd2873df71de14c2813c6843794bd0ab915f2784236e1634ce6388e25733732379473fce5de8be6c5cd91e340ba0b4bb26e9566a52864ab64057e88c71f8faa5f071eaf8ebb94f0b8a1f0782f1e5526c0e40853a986f95e34abee178fcf283caa4a78bca5bb60961696169616969696cb6eb17739996cc90a1c9f2fcd7a1e06e3101f8fb775e012ea761cd745b1e770171be9f46a76a58f5d67df75f7b9c4b4bb94a85f9f2ed645e9d53c0cf759da7731993dee1c17a3355394169f71bb58b7466d2ca93edf21d12d1b5a11fd7c494ab7523fb5eb4465e05d702aec0e84e60867c671030c5768194fa1ac2425cfd3702c4969e962f5873c8f0a6d84e3f7439e87094739945fbec863cd2f5785f5ddcbe7172d2f924a7e99925f6e80aed95e32481ff72f2fefd12df917d4cbcb8d98fc72c20af945534356c92fa7806c6945af5d337a39250579c1f35258d68aba3572f54a0dd91a8d406e2f5a437746303aafba37b5bdb6abfa573d82e52e4693393cdee57b356b9e665ca13e7e54b57cdcb6ed5e95ea1f571d4ebe325ab3c99a35bf6df7aa54ff4a366eb21b7e4323307d7ee42a7dde25fc643bfdab54dd3bf5a6f0a87a5eadbe3be98cd2225cee3497f0f89991e7eb26fba6e47327bac2450c08af2e26794c6ae59ef2d8c5f2bc94491e1a17b38b2eaebc6c7e2fc9838b2b5fab0e3d5dd7dd482bace8a048bc5142af643ad1419048718fd500b541e8058fc318eca224144da22b5d485d54a7e85a0bd42ffb12e2e3a1ac6e696f3c7eb1ef1525cf57cf9d26f8620231d10266e96b05b9ff9a1facbbbbda70844b267e2f58ad36643b493434175d342113ebf7ca1356abc5e317fb5efdbd4a40599a90d3a2c4445232494d8359f57162bb0d1fae7a55e5a59386be9efbbb8da557d5c6f691d654acea55bd91fa7a6d7081780be8d6ec16b606746b01d5e251fb11964c8170dc58f311964c5fadec2df9ed757b875b00d2ab0aa4856e491abad5d7514ced6200d6dbcb3cb7d1b6699b3692344889c2ac142f604e58dda16e5fd3da95f6ac9614a4a76cd1cbdb1c3a69174179fe56160678f77a78f5a01324674da2e4249d9b03aa9ce4e6f99c9e4aa01882165f7c71019d2a59cab828caa33694e74fc8120a9d9fac11e509db54aba22a7b6c41576816d1c81a3b3444d650a2060c4d0ddba1167a353fc4c74aaf2c910b9d1b832fd81103b0af8636e44857669d9ecd8a1d12427ac544fd0ddba15e59222b8deb77ebc5f56e87ac74ab3d92f70e6be89b5eb1d2ac798dda21bac5dd302dc294a857f35010d5ef4dfa3c8aa977e4ab60bdcc8db74dcbc11d355811adb16648d6bc10f2bc3dc2280445243b74c3507551224a744a746f775b6b67c543f51a4c7b12eb9649fba26b260b84b4282300baf189e3f3a8c15679d4602b9044589eb7b55b8832c4270624645062866e8d73090d746b9c4c8c534a9e1f27183b48d01df0746bb451f2fc1ced0df20d1ad0ad6e7e31b322afac904739d361d22406258ff389e6d276ec90b55146eb637df23cdd4105aa4194885224baf543c1903eb42c2e386416b17244fa599485284b284f1913d24777ad1854dd9055b2aa681cb986e612d287a6d11faec8dd187c8c2d5242fab0cf801c23d340d748423e22abe40cb40c52f0c286c1d509b24ad6425925af8e44b7409a15868a4658a75d3be46a87e8fbd3a75b600f03804016608b6cc5e3c895a71d9a8d871c40b346a42999396d630b9a2ba998819519682154254761462c0a3360560b28adcd6ddb363c8ecee15a8346a3d720fb0a046e9f797bfde9966dfaa097a669445a740cee485d2f1f26f2c8b56d321cace4b004b6af018774834582684d7fdb3a0579845da391c5f4397d9bd4fbf68d6f7a28be51dda872408b5dea5bde826f5a5e9f933a7d917ec538f57dbc519cd4a5a801ddd4fba0052d2e425f314e8f4dcbeb715c4e5fa43e7c88715ac64d02aabfac286bde25047fe32d77f9b8ea31f60087a40ec220c5d4c12246641103125889b95c22cb2709fa3a4e82c6383d20915a6d7e177cd30265cddf8b5d2982425e44b95204188e3f0c73b8847f873d16b7bc318e37d611def4d8f473505a6d5c7e7cf39b1e9bb0d62159747c33430d94351f5e47ca0632a4c8220c98cb15c4c9a102f8b044103ce8b003d8104429b68e508a6128451a4ad1e5a1147bfa2db7e9b774ac8f03dfcc9dc6334679f04eefc4a4785a52450c2008b9c41b618321d0b57198dbc0a07d8e380f83418b87e854ed06578a6011b15feff21e9b969b1e90087dbd0d7dc5373dd6621b7a177c337f5ab01429c6e9b1a9339c8a419bbf9c62b088ea2f57e19b1e70083d0c52a42f322a42011a41043173b9c496dfecb458afc4f5170cdaf45dde77c1b5259c4351ae148b288b4ac121092cb0a852b1081a6f94050e9194656345799e25ec54a861712de5018a97122ea934d2a28c5b7f2a50b7a66d59127973fdf46acefaca41de30b5f6231410022eca02574ae105958cbaaca71650f0e22e516177ee1b8decc70d1ff9e43d8e1444de93b266d48d6847592bb778c11630c89db51df70e0ad542bbe26ae75e944f7f01f5ef49bcdbb0fbf2e81e36223f492fd877548647be8cfa26bfcbbbb01d832f7446b216ca0c65e72215ab16cd9a07ed6bb6b80251b92375596b817268413e596beb9491175290c8f3944ad0f3a84b470a6552e424cf9d3969ac04c50c64f31ea7914299bba85b6307751248a4269928755971c72672c5c8d5e8e32a8fc618b27d2e91caea6dae98e5f4a418c053504681e894a9c50b5a6edc458102826048e53acc4e137af272b4c3fdf17caf5ecd40a1515d926cdc389096b7d443dcf1eb41d65099fc5a9352e18446216bbe578bc78a3c3f9eeff5f17cafafc9c793c4ce3238fcf1bca4e725b199f3b899032ca37e0aef090841a41bb3f90410c8c8e3f7d30510b64739c0f2a4242139c032f707701fc7fad32f0bcd9d6a45755124a5de2bd7d22c6ddfc5fa634ee65a30cb331776eeb0e6ef454da6a3b0e9a7a26c7a375d35d77befa5acb964994ce7f0b8996eb1375133c3fcf4d2ad52a904f3da2d2f080c9e77cb61d6f15951dc95d9d5263b90e6e8940e9fec4fa8cf8a91d46c71925146659770e61b35ec4163c1719b39f5a8f592556f3f13ca846048c326b1c0fdbabc0b51e72c29c8e9de299cb7ba705d2e574651d4bd468532a7c27923fcbfb9ba854235d7b661bad42dcdd28dbacb3d9750d3c2b8a88f5a5146c1e0f1ab150d4d8f1367655b188e60a5966d935d21a9d7b6559c70ef6070dcf8170506070e181c3760ec5892e5d9c538ee84b72650e8b7976b1cb94ab26e4de99650af463018c83283a56455ba830a67eec2d7bbbd4a49429edba5e6bab8f4c82e2eef48415cf0bced9a01690a3fe1f12a9cf091ca78e01e27d0a8805729e02ef619bcc9e06d0331bde15a2677dbe8d8f852994c498361049521b187e50f53f73c9953d0decb84e03da1ce85a9d79aba24d516642af5507e3cbdfa5e3adc67eedbacbb3bd7b53fc30594a51466c4809282d8b78453ec730d91ccee876e07594941ba982674c72ed6fd7452ba35d29ddabdd69754dddddd2ca32726b85dd7d130012e3388be9f27d0e87a9627a592cfbd73bd0edcdd1cee0e4b527a35bf261d1263e793e73bdb755cc7d911ac5b92642b133b147751280ef25a471a546bf790862b43e6e8ccda7e3753c9e8ac57739661fb423a5f98d38991d4cce1243677c36e207ab58d50e6c641454044b32199904bb6337b014d9e20d9672ba07a697a0d5534d0cce9a8a4202a3c6f129bb99a6494391a0c5e1306ef67beb711ce6cfacbc74dfad8be219366dd53264dba65e3f32390dc9dbe6a6a952b4d8f5c471dbee80e18d752263d4a78ece122fb5e2b169cc227cc711cd7a4fb2843b7bd8c2419d11dca84beba71925136adb1c61ab9822e78aff7f0091d18e50e6f4d56ab170c859a4630986a666f669a508a35cad8c5b24eb7fe532bcc06b98bd110dc242c9524c81b0851b942655f946f0a417105938ea3323aa524a55b20cd0a4e648b1b6ba0b493e5b526ee8b87d68c601704f14deb54f1829948b114eb0806a246b111ac0677fc5ede51610f03f46abe47f5f0c54dc69579678af43a4b12207329ee4c11bc4c117a99cbd0f0e3f95e444764a1830b60c0850db010e7bb18be9449af66f8c40f807201b27ce20742b9fbb5d66a6bb5b5da7a84259c7953555a2fce77a420558a1c96c85d9653f06008db169b0f80b273915e0c053c90ee10ac9fb902710351d674a8602802f0934e69961683345e4cf4a007c9da320e559c1146aecdbde98beef48aee6419adf97690acf91f6443007d4400d54a65b5caa6f42161b20a5c2905cf50e6de52fc40254b297e9012459652f01465affb993671444ea1540757ad2f78d96223cdddebf05e4ab60fa8dd3b94f9729d4fafe808aea5b11dca9a385419419028732f9633737a9b194a0f52fa199a1d331aa881868868c7ccd5e1664bb237773c07bc0d3df87a10dff4546c33f31df8e6262706198282b619ada1dff1223307310ef899efc0383d36e06752380ecd2906ab14675208778492b2a40c36836d97c0fa243383f63633cf603dce8e83a709c18a418b89d0cfdc867ee6f5383d15db80df711cfa99e3f434b6d9813b9fe3cce09836c5ed4cb1a42c10cb8437f4e03d1e255c294a5192b697e4a1649a60c914374a4c08238b1209ae101229eee1eed5fac55e5b96b7a34edceeb5cbf18c24e96c4f4ad246eab9dac57ad59fe5b41ee02ed6dcf7ead638f271ddb18b8d62b4468a32e72642c704ffc53288c1fa994b711e8395be88ccc117a19fc137a21a32911ea43218ac7888cce9ac32e1f7fa78ba8cdbf9dc70e9dc013300fb1a76df287972a4633662d948bd8d7b365eb1676a627af1bcc68e6d24166cbc82cf11bd568175d2abcbc2d27299597e4f291964c6669458ea36a7f044c227f5d34bb353eade7094bff772ec936e3de916b6d63e81c99da7d4f1f90ff63de91a9acf7f51a48fd4e9a32913e0e39609408073a10d3d886f402832079fc229ad34a1cecc975c9cc13d1ce79948d3c22ccff6c271694a219c792adc82248fd667eba329b78e2b0ff72395c58420e7c9d3a9fe70c1d43f7eaf4db6cd2c4faf523c4e643cb26e8ddb6b0a0cb6bdde9f4c38f314c20da8cb9304438b3278936d3320eeb8bd7e369ecd49b752db0ed287023ebff1307f08913e58648f5b1ea172ac209b28ccaf60820926dc04134cb877e42ac9e68fd2ec2e374ab2db12769ef9946269169654b8809fc220670959f8269b017929cd14208485200b5000cea18050e696223b0edac87ce633f8865e0683363197b90cbe011ff31c3147943608bcf971c51132919ebea1fc74eb247ebcb9cb1fb7dc15b1bcc54778297f94a44c14e6c37f2fe9c384cf7f3b481f3f3efff1307f2420f579ad48c4e3cdcf3847cef939e7d3e974d226a3ac397201c11dc639f0d8df489e09268433ff5829a926e59a8fa44e5124522da101ce121ee0a91001df64f3c7f69a28cceee37df99180d01e31519847406891903ce60f105a0384f64738f3f7aae9f159f3aea6c7c7b646fc0865362194d9fa481ef360f8790840420e86c4c94409961489de944438e410244e2b30d0191255c8e20721711621d4834b94240e3cbd8db0f223ca25ccc0073fe2247197a47b203d823de9d50c1ac1526190b933993cb9e3c8959b740bb4f984e7b4791cb96ecee3c8f5fa787a653a8f4dcc29be01ef494114e112112084932031e6de246d32c9635ee3c195c99ab8a732e983fbbc15a235239764cddfc0e3e6825d23d7b8e1c0e3b6a1548d43ca1b372ee58d7b37c271e49a05f0e1c3c7513ebe1be189c35608c7f6a23523180ac771845e1237752e7513290239223da5f069a3d2abf9d46fd4138e1cc7ffa2746b1e47c8d22b300766a1730e1cf3fa7c3f533e580e8cc30a756b2ccd6c95a91565ada85b37309424742b85378a5f3627a99f5e9a95a8742b85473b7d6a29771cc14630173c82b5f429949906b9f47193bd5092cabe26bdfa78be17cfb5b05b9e27dde23ed264bb7ab656b5535d704de1f1273cae2e1e69e650d6c1e169a55755158e4379a4322433cc23f51122990508c7b04738da24f27c4d38b6ab158e300408c7af27cf872112bb4288c49a72f2c371c248920d4f5e2a9b3249a6b304319d4297d3d964f9e9e3966ffca534a6ae7ac5a38d079cced2c7a1e3dd2f5517505edf3ee0bebb3de761172eeeb8ee289853520352f74e3be48ea3a2def75e7fdfbdc18b5dc009c209ba7f0b33a7c63e0a1fa9c771497a40ea1d3692ba878d941ae3d20b3ade9f24174af8064e42737dcb1b8f12571b3809cd2c6fa91848b384a3927cfabb925e18ed2b470a623a55163ce268dfe9d4f5963bd59790ca7a15c4f497b0e592f48059b74ef5f5f4967ba7b025a432164e47626fba272d60fa357530e862a87b9e7754bd87c70e77289677e13d17a658420f73ef62dce73b18701c8ae3b0e9308d8d986e4d78ccc9f45e92aa8e5bfb7a31178e5d778efbf8bd46ef3f178e47607ec30e18a9d7717bfbd4fbdb404eeece85234e5017d230d7c87d93f7f0371c95640b9447987bf848c7b27dea30299349c75f4010cb303fcca98cd2d9f446382ce98511116e5045d671cfbebad5429feca3d23533b0cf49b7641443419fcff7f34db1957b178e3841b245a37892eb7b08d982491ff6d505db384144d9d351f1d83dc40366b93187c71c200d847630d7714a72a1b38e231dcb1d9859c725c98596ace32a641d870903378f12e8a4ef3b09df90fe6150de982e45ed39620dfa6e6775d3b6a06f56bdc64d04119d491f37f21ddb554b9fcd21255c507a37ddc6c3a0bc76d34db7018968371d94d846bb09b4d94efa467a8ee899422992422982927e7e66799cd1493785a0c420c544bc7fb7f1707a24b6217d741cefdf717a26b6199d749cefde3d2abbe3acd23530afa6a35ead80353078ce68a6880a4f59f5a97085fa28526414cf1fee72f63303a2357ff1bc5ee1c71994e3e3141a22c2d1aede0961fe50751d61ea3942d471842dbf11b2dc46f8f213488174787ad19aae2f3c7d7a552ff18c8d42297ab48ca03b4aa04a9a55ccd9f30cdd9a387598eba0aeba044daf1f428f6880d69830286fe339627d0cb4e6f42a31480406e6a64b896d54b7816f5057fd267598e75413d02c0b3903923eb45c47579911c6cd72ce402226d377d327b6395d856f46189c1f7da1f7ef45481f91fe918e53ba3744e7e52ea69f7e0a51e19c44a6b0257c094f31f4aad6b70feef85c492091d2bdc7704f3a901647b7d42ecaaa2ffde6fbc292e9fb5ebacdf7d2e74ba59bf08d50ae2fd5ef9b33caaa97e26e92c7bc1099917092c7fc4e2768f3ddfbe7e18db2ba87dcb47084696cd859c6546ca45f725a09cde98a92c2d376f0797436adb68ebed2f434baa55173b710ba2079d0d728ee84e1c9331b91baf6844d9e29ee68480c1268e386b0c60dcdf600d283b3dd10c89854b4abdeaaae75350a69ea8a36eebe92eb9374dba8a6833b3f7962d387fed01a99f43103820aa90237a0b11f99bb79a693283e358c65ca23796471e9e538798240d9e8a52cfae6e1ced058063ac49d554ada726aa51104594a1e6df10b28166eae3849ee93119e8c19db9575ea75965c51fb926ddefed5429d253422c5b2593b576cdc8066f5a5ac49d768b7af61beeeb95b0dd760c551786517d6406b584e2ef2748d34aa2c3360195eb71a5cb446f5db78f93879260ce6e38c7160a85d159efe1276b711a2cea54c213882093f16102694a289935196bd9d656bad7d0bae6dedd7db4f2f42df277a3a0efdb66d77db6ea8733af7ecf23b84d6802e1824d275db2fc6b9dfee37ef38db3b0cba48f1ab33ae2c7219d96be107e6295c7251ce018c738907240f9b2bae41f230e306a10164f987982e4934d41e42523f72e9ae5d07832c78c886c10a569619821aa40f30dbdf7eda90eda74bfad8b2fd215b3b7dca6880f4516fef00594301c9b2b7666c91adb5af5806c9c39e96713b8f930412d17e1fc3e9dbbd1b82f5f730df600e565ce41e062cb2ddc6b7db80f916da70b9ea52bc21e86223045dbe5d8a3021e8f2fb16d5cbe612de2ee3cea25ed9b7e0496487dcf4d8a07e7fb3bdfbcd058770f8a68705db9c9efa4da71d1c9d4022dbb517d9ee71e8fd09e38c300c5234e1ee9b771dae01e17485f34559f65e3861d387b2ecb72ef6a3d540597648afec47ed833b3f4487be6f49395d514b3c193352a1ac91becb67f970a32ceda4505296a5b1ac692acad2b48e6def10b4d8f4bd6f73c4fb0ddfac284bfbfd8df60f8b9728c59e792fb6e1f7d8a04eba4d9f44eaf04df76da7070a7ff7c27b5358e2fedd86fbb79dbbc536de2fbef9ee9db6cde2c943593f9ddeb7399db0c531e0f94359da876fb46fdfbaf14de91b9e81b2b4df983ed463667fa041107c70c1cbe5da4189529462d0d0861263328d22ae2cf12488229e2843fcd9b87fbfe9b1d9cefda6c7c6fb76ed8d49f8660ed10fdff4d87c6f7c3383288bc3371bbe9933cad2eee1a0594459b3208dc3bd4359daa5b8693bcd136a5bdca65ece6c0e081e92cf95ed65cc487d6eadd3862c16d778f32cbdc2b3ce39a7c5d346be8e970686298e20867651163d68d39d7412bef9f014c2a0cd76e3e1394459f41b9e4494458b6897a421db290bb4e9aee5889a4df70e4bca1aa750a6304c2253dcb08ab2465a08dadc489a237a351cbb686c59a653884e225a336777ce32bd2ff4e0047401531bcea2dea945b516519f2c4d505269e59af04c72fe6071cd50470e1c37401b30aa1797169614ea744d25d2e775dca6491e2d79481e7d28544a8aa564cda6387c7106ddf164ccb8591574d3a155fff24559b27f95aa6848a52a7a15bd824c9e5e79b743dd577b9d72c72e72650d6fb019cea6bd1b0f4cbb4af5e1f1de1b6d2cf728dc9cf4aa3758b79ec05a955a580aeec6d3ad3967cf9bf2a4f553ac78e71329aeaedcf33098934a4459cd82bbf16c4eba66137b56220ba321983fb4f7690aa48f1d5aa3c9682dda6c90fb76367fcccb7864766e9191d08c84e691f2d833248fbe16daa189426b41d40aa911c9ee4f904fce41e87a21379b03cd8911393c71c9ecca3b3968b635277383590c05b431adb1c61a6b88f4861e47041cc5d94e710f250de1eab66ddbd482688d5644597d952a684a11add97e90acfe101b11b95f446ba4b85dad68e3913c7a9b511baecce32623d264afbbd36f24481f7404b2e693aca2f9634a14d490add1fbbd866cd9c3b0e0905b941248c7e4d93c79b6b80175ceb42e57b439ce39a97c8ff474e6af5b136fbd6a9e145cfa59c66ddafd43bb3d12d00553b637658bc79c0ce503f5496a86e2028b4c71f4298ef0ce27562c29b5efdaab9ec1de70fb634ca6b74adc3ec5209116f3a69329ad78064994bb89dad61c7874527c4a2b5dd149024fc6c83fcb988a6ff76336caeac6abd37955b2697f41ef952c569f8652b23ccd6ada481b599b7959d8b2c534d490eb170085562e5290a199d91173d229be995596e0c34bbc195dc98f2b8e90893dda63c61250d7938df2436b74261111538898625201280a22a4749cb5424d449ef7746a22eed7a46b7454b8ce121ab187c6cc01d86862c3c3e3aa7fd89e1f4f45cd2628dcbde6d7a457b5c3dfebe3a9d576a9faee1f6bab7eafb31c487f3cddeabaaf496d55da748d35fa47e7eee3f732e203f5f17417c262bd59c63d326db0a454783cbdfb3c3d65ede954bd779fde593e76ef7cace7551bddf7b2b6561bc4d67ac2db6c3482c97a257b8d5ca6d20bac87bdc06cb2149e5d5c6c60ee1d6e564e14bad73085f0e6e646490bb18447a4b8a7e54a5e7c78c49eafca0c8484f9f1ccaf4927860a614fbe4b38de2d85ed75571021d5cb512fa88b97a4200938909629781dcb6bc8e2728ebe5e3c1e59e51ee3f61b6fbde24223d54385d5d61c1f6beeb9fa81c7239f9c3f70f4477aa1cbed9184b4fce52899519f4f2e2948a5323a828d5cd015e1dd7bafbd171a4949987b3dcfc2c0bcadf7541d3ba72e9f649bbaa953bd6ddbe1387dba9ea7c7f278b29e0efb53d74ff2e9f5e3910e1bf17e5fdfcdd3ef3bece464ddf85ccd1f300e48d937aee1782d06530e70e1f3f6d6f1d4bd25349184c8576ca4febe447a809cad1f5d0c9ff475311c5eb668913d2fe5799e97ba275cbdd361421cd7d1e28259b34d31a798355d11935573d7d4efbb53f7a9709c59d5f2d3267278ac9e0def088f7b4b85f11c60eb2f1e67aae2d3bb22668d9c2c136493353f6b725cce1f78dc728e2fb7bd8ece1ee61b4948ea1ae9015fee8f60745aac038f359fde827184f5305d9f42918274dcade128df9aeff752336aba5033a3ae0a679e4ce60fefa8df27d99ba4d3e9492a9512d2611aa87d4eee70ec24b97261cb3b84393ddcf20d8f7cb905cf1b260aa703a1a9f0e5a710f5a235b77430f4c2d5f7499290be32732ef7482cb0dc06c51b4b38d2e42aaa463ac5162620a437c2b1730ed9454c5df0119afcc91b43ee55874756b972783cf2653a9b22c6ed1d2698be5e3034242ad186c49e8ee3e6e912a03c73c5b93bfb99b57636c576cfaeb8f3d964332add1a474ff2fc94c1fa8bbd9a05f98a331e7364aa8ce8078f4651c6ac92be5ecd97f1937d3ed8f7e4a309251551b020a24ea834ccd4b6a11a754ad1cc000000006314003028140e080583b178408d9220ec0714000b8eaa4c724e9847932007410c830c320600200100000000644680060d9a1eb2c51edb2acb5ebe73c84889fd09c47755721db36af11cc638d0b0d51c7d0fb6c9290b4025109197f751b046e81e14038532509c7ade881ac28411c909426a705a1adab6cd8c8c7a4e07a88b61e0cc143ab9fe2ca5740ea4a056844c1ec9b32d6348fc0a74af1ae66cb20bf2de87d8a36685f84aeed39f8278140e644c33d04cb0f3572b02cbf3572ea9f8ebfbe28234b6d6f511a51a0e0a82ad0bf10363910e9bf4283fc0c6b596fd8200aec539539c0aa7f7018d0a2ad0f40167c63ead4998c97c552a0796390f340a883a6a6f4424c0322312905b0716352b78fc15d5c5330a35a6b9c8ff5a511452d4afdabed4d1f502da8d2844f7a40c1a0f572e04571c50d588f7651585fcbec2f0d5146be4659c8e47fa37fdfc70beb28444bc342227bb69070de6c4baedd2cb3fc77dd766162025c38c2f567396d6d786a465be23f0b2153cc2f874eceb72abd16c025309864cb2c453ce54db7c65287d89680c235aa402ed3c6c9cc00a630d5899a6e6a188ba4ec88094af45487bdf7d8df8533da723bf994f6bebb31245084d57ac90c4883590a8ce9a35d086b3c4a867862e88dc816886da079e29144ebb87cdb5599a2921b82cb11ac4337b2becb2e1dccec22713d86e5986fe5974b44197092853ea461c52a45fe292218e52625946bf9ee4672012c42df2ea4d47103b500eebfc51d0401cdea0b8c6146f58dc94997a3074e37701843a2bbfe526fa39e8be078de601e0e7672a8240d2784519344b4d8837db5c4aa65f1546cfcb2251867bd59f6141a7ccc5206adde1c9b0eeddeae99a530ed9c1f85101e5c37a5de42a496fc12acf08acaa4005590721c4dad86f9202bdc7f0dde6ec486a8fe50ce6daf7b388e39c8183a3dc1e0ffbde713cad9c75eb584b1293b474575dacabad92ad92c0fc83615efb58173e90eec0da3950c2e90c5d6b96b312c3aec4ab1fd24683a0c256019acb58cf9d190e6b9debf2e02a6e660f5b05c911993cfd8b010ed7c65f7ac50424a0eda7609f4af4c81c78e4cc911760aba6e93d96a260bb5150abf5c18d7e9b825d19be194ef47d96ac05ac4d80c5292e380b36acf08dce0433361705834fb0a6a2c80401e543e8f1e8de4be5185f8cf00d8f1bfafc89e3ad522433a8be6e339b04d38cd8ccec6df9262a26d55648260482e7c3f5d55880b4d5673d6066c2c8923722ec492fd74a5ba42d57ff814a8a196eb6d0afc9299c1221425fa95e8b9324211b7059156074c18a4b8dddd1d77b34fd6552a59b07e280608d79f2c190c73e2d917fad02086149c2a96bacd323e2c48f344e9b2763b8fc61f9b78baab1537cadda00ced745d787a1d8101a7e1f6c83baf49500f9894a8ed8d4d82dc6c4b8d5a2c10674b06ba621be3e60a7c01c08e4a53476947a12e20a50ded8f31db113f000b1507d43897991073b6766cb7a08246c7587d6ac69538a2620f326f46adffdab4b28fd4531d80130b9351cabfbc02c9b7118df1f2168106c335cd88ee5a05dc0ede6fade0b749c25501615d42ddc9e4259b9d347e368ddce124daba53cc0424d971c21187b98d1fa24929de4735f3e149a4d645c0f06021ba6fc82dc19eeeae9d0a277c30ed3f1b7469663e3575fc8deafc4f1266385441b502b310502e7f27306396a120cb965c31850867c23854c2351a5b4cb9ff01d3d1bffb6563eea1c8a81376325dbd44a2bbe2d11ae445a45b1fd90eb9b0d48dfeb4b1f09345ff8e53ed1516f945dcf81c9ca3bcad3907f49708535b93a39f35197d046eb895f105b4081bbaac6e2a6ca6b545f6d537c822a602e318de70fe332f050bdad12033284318ac34f1904d617723b5cd99c7193f540fcd7d117f2705b8858017502a4c240b96c4e6eb5014505f94b349e44035cb190b11154718d30f749a3c6a268cf6ef512016557d5734c6c4751ee877fbceeb97c9118d1b6b2ec418f3873578754c0bf0ba60fd6eb2d5d597e957ac03ea01ba4fb19269854677e989c1f387c50bdc0b3f0e7debb717a7e23e955fb7389da849f2d80e02a17e0542e2e544a2c1cf9c5c140fc592d473d52f9066d0a1624bcd070ea4842213b5525131536f3fa092cab7992b588f7419bb63101b1970201974c25b379ebbd20b7de5a6f18028db99ee8c5d0fb125cd3486f02b10133826643e823649406d7bc12ed718cc52a0a1c535b108664afd9b0eb4464d351f42e90f4f1036a5adf39ab7e43fd25b775784f3449f051d07613d08d3aea738ef77492f413505fec80668fbc3264c9d3bc2c1da989a089bd80fc6bd07645fad818b622b0661ab3fa05e2a76cfad307572e07c36636b4fe5bc152121ed915991bba0e45d3f83222d0f7e04ea0b867fbbf2e191be6aa194c21100834e9ac833f08c0ccba9fedb3c3d8392b6ceb0e436369e7987681d09ba441b05c8a44358237cddd2a92e21cae5b8fbe111c20b9dfa52ca5a0f4d7daba5e25f969e5cee7bf722797c2eacf31b439abbeadfd4c7e7413d81d16f201b69c0dc6171ad061c8bab78e22eb3e57dcc5d67154bd5d1cc48807bbd5dab4278e62897bc8e5faaa83414c1e5f2d08dd9d2afb10ab969d1ad55c3979886d7db1027c76543b10a4aebacacee5a87291522dbd98592091a931d4a1d20c823d54815edf023ab57a0f1e2832131a41d150c53a0faac2def983cb191bb146cb207e405029a419880201d61d6eaf3a779fd49208b140c93ff8a7ca72e6e906f472ccc2405a8d8fe74b5e6b00318448911fa0c673752acfbff281c06a9329e17af0e507bbeec507ea4b517270cea8afc9f82ffe4465a4b372bed44f5be9e743be0afb0fc1aac2dc27596d621501fa1828214e83229dbb656296c6a6eabab108c1614bfa0b6ab3945c7d10eccab0d4d75a65163be7cbde59d5301a88307b0d7520da139359904e7b8b8aa87b7c6c16286b34dd5ebb6dd371a2b617af5b8d416f5e095b9070686bac728fbbe428e6c0f9a5b6dcd537052e16666958f512df0c061388525906196be999e74f1604ee50a11e39ded1ad57b339bda0cbaf4df528e753328e72bb72e3c538d3bd0863c810e64e54b34457cf663064117ce3180d69fb9a373a6a7c621e0922a9cd865203282ca77de8c10a86b7207ccd98d779ba627ac85dc1b1c8c6533347ca4abd1c19516951dde034607a46f552545e2ee2fb23f27ccdea41aa74693bc0a1138b996b104356ce55cc7de2b40c31bff2e914012c21ec81cce2f5f02f9c89cfffccfe4f7220b6a18dfbd6b631423821cbed1fc1a76789398b20d0fdc022f65dc44563c5e31339aaf51d5c5f868b363a49159073b70e5d2bf432499b9356a8ce4f1ada191f7c505e9aae4059db64138848e88d3336714d89cde698a5dc26997215b988642252a60b3c53db0b65c338bb755fe0047d5863cda08418bc3a1c3ea313a06a3b4fcc58a407f83e0bd60936d6a515ed036566c41dcf9f8b8f7c0be89ce3398c2e91b0e37f0dfd3f9c60cc3cd826d3d4093716474342bf9b14f44d422ff9b824ccc08af605bf24eca10f2be1b93f4ea65615d12b43f11e2b0eb0a3d8d46f4f6082aa20c020918a820157452904b8a4ac2e89280cec46bafe4fdae218edf4ffec059d6c9d3bde85438be0585de115d7eebf6a81a38e908abfc68e8616e4de143c0ef3d49b6f589f073a9117cffebcb5017b90a156e04c18298dc0de7c38505d4190877212d4bec3cce5db2b0a4470cb1d0a94bea4fe9fec11991358e36ebd1a18e4474d4148f04eec43e19b2f8d090df37c67b9389fb7e7c43c67c30ef46708704307778b45136f17630641a58fcd4620bf5e9d7aca6de00b958ecbe87735384c106dabc937d29d3fc19b99de3f4b154e4745cf1e1875884320bbe4ca048a010fa3f00cdf224a35bec475d4517206080b3c83358788dc504fad9500f41236eb07ecb595fa396482da5ae7ffc8e2b71bb3628789d0365d2c54341563f33630aea3aba5dd93b2e9fa1708eaf392b6e5f48dfd65f3b7ebbb34691dfa4f9eaeda0f6f1bb718414495030d37a9462716ff15ba59841b72b5c4f045aa2b48a70bb3365031d896a95756c4c5c75c376ac33d7ffe55258f5f9b8c55c16bd482a48bec745bad72bee9ba5fb85ce2d9ddb9c1f3c2bb2c03a3edd0cb06c175961e144003165878c340f795b4e36ed5ae20656a284f1ca5aa02cec36a2366d3f21c45222e1c84003c335018400d85c0ecce99daffe8df3c788d39ff29c280a66e22223d26d54e2a796c6c0181490ba65051fbf909ce73dbf9ef6e4cdb21a606e3558882da9215294b1f015fdcf8d74473bb1bd7dad94331f9842c8c246b34c63123555e1119826bd7b397235a262137a8b17a160fde349bc85419265bd09cca65dd6b58558bc91a837891843fb64e1163c28378cc61774ab979ec93115e3507529cb02093a45632bb387c433d8b82228aaa31a341993264c4757105b4fa0dace0bb69efdf8fa5a7e621334f346caf30d704d3c0f0c39213d6903e00e507ee36d36dc7eb72e532791c9a2412f08e05dc07d670efd58d03a3ca262d8ba8355b44ce764c900d80206660ed5c238d54160b7f2e9bd34550a4b4e0cf19452d380ea32fdfec49ee37bcfed5a7817534d49caec4d75bcf4d1e253790bae9accafe5388f57ea5e80b6b194720a096fe67c71c41aa95fd27c8273fe997ec7a1c0c83c274de133e9b5a1f1af2a73f667f64cba95389d709683d8eaad26bd4638ae0a699c294d96db2ebae122c78387993fdf4b7297b2ab76a62c95c7b726007d9b33a36ed0870a0c24572ad78f3cf24349e33d0f88d0f95d879845602df8a890abe763f97cf1f8559a006cb85c383e6e43d6fe222e1a203b961f9661fea1054158f5636f77c0b70d27f8e8f123026a0201931dd6d67e1ada9508c397a4f66a2564cfb2c4ed9e48590c21e10e02afc464cb76fa5ed7bd03ce9a76288810bdb7b00396aace850a55f95645b601730fd8181ac4200ca7be70fddc446772e435c9d64a55f335c98ff4ddc0281cbc32048b316dac177b0f78d342e09830dc3110eb59d687c6245e70a445ba0e163a62059cd4f80a18cb360f1668bc47866d9155136985784d2d119099bbb24c763fa8de3b382f4de201ac712c75da9825ac33907a34c49dcf198525c3fc55ad5f115ed1263f0f900ddbee622562b24c822c4c317dfff24b5018b184bb324c5ce7b1a1957f63324e7d4402c5319c716773fc27c9b192703f441b04dbb9009e6a935df015e39e6240b681a16924e3b337dfbb444e871ec0fc0d1892be62f4d630411a111af0bb858bd375833b77b467bb88a3c19ea40e914555f93984d8325848532420c5ca8de4685c2d2221b8be2a24e03ea26336d8bcd386ab1d06f99307bfc32f630c52051262a0d16b9c89b5ef900a6551d03365badcc32e5d3cd97d0db7e72d9313ec7bbcec4a7e63785759806b7d486a441de363a15f53b9eae91c8093c7081e5557a9523305ae0242a8ecadc8837f3e29125ca8ca502f1e4b665152c97c6279be448e4d602cfef54816e1c635d47f73108cc435f5d99ed4322aac08335ca5dbdf3334273d914d84cf21dfb4b812eee494a48e4309d2726825ca5b801875b02599460c24fbca621906a649c757aa6500b74aba08ecf7daf9d4c25438557cd0e7b4be7b94f7610b6858e1956850fd08a6af354a0f3f9493765805f8207857124029dc8c44fd52b78dad88a4f8fae2e8e3e1b6962e6106bb06de0291ad252eaffdd0d6de04f04c946cb1b0041f2d1226ed4df7959a464a1dec7ade4dbce88c30a7ff57d1e92bca5496638d1d701a26c6dea7438fdc19289af453da1382cb42ddafec3750ecd166670cb0df45c6271e0f71177fb0045a5f479b2380c272369a085845c1b83c521cbb403f96e2b328839df5cd839ee2302ae6d08be60214605785930d67fb573b9045065d1ac78889b13da9935ccb4bc0f670d0b5ac86175acf870e9c7a3e99377b528b3fa1dad89cdfea55dbb24943e1a05699252a76be404f3cb957b58abeb9393135951f37a07c481bfbdf0f94562d48e06983582a0b4cdaa94de4c2f6abb245d1403813c2b4c25d8558ef83966b65d1faa2f4d7a1dbe623fcbec20ae573d98c2982d3354c1fcfcd354c6f807b9889db4d865010c476c652e3fa13f34d2a63e37391702492060aa1cf10d2366ad84667f08167dcffc88b9c6fd7c329d38159c82bf4b2ef68e0e8f054c2a91fb02d15a911a4b42fa573a1f70f8c329054a39f25b2fa326fe2504ab071d868d8a2ab2c85a7b3bb8f81c9dc345f6f5b4cd4a68fed8108111c689b0f3c61899b6e03f41db075ff4019b7ebdc49517f3abdf286c20db0b50bc1fe7f61bbb0b2e926c1833cd3cbb70e41264239be8ac44818734c1092bfdc6ce41a5b602d91740af681113afdd135e70683d7dc3247b82dc029f6e0830a403dc593b101005229d429bdfaffb63601005f144fd83c3bbfde6fd1cb460c3319947307a323f3b518bc8d57c03fcb588dc49e9fba337a13d052adb2869e6f541fde8eebf2a35838d9d040f13f43e24f1663cf9c6537fe641a75624899287e348cf76dcc12c630bd92a8e96b3754a52180fb94c162375f0ce3df9a7507b19f623cf5d26f7c5be406d5915fb4af824925e58f56dc218291e72b360e6fda4547c92ae4488a97d9c8a1ec97f69301078c80d517641f58fd98c79813a2b96c9000af090cb35baca90cfb2c4592fccec2c4139bdf0d4d1e71ca258464692adb3c2781b9ac3e5417e1e97cdf510975bc9e5ab6a64ee3d7e9cf031eac453380d14a156bd9487ad1da8f4fa77d769336a066b02271a3ff7aa7c708bdb44e702ed9833287f9b0a2adbcc2083f1971efcd5dc70ac244b95e1fe3e371838f7fc300b431514465da2ab562f84887bbb1b825bb849f17bf5a03078bd1b9481f6c617b60352295f47f9439726356c135bd6422958ecf788ab0c32780a7ef8fa8fefc1670adedc92f981273bed137498a1d3447d2a1e589a1ffb47051dd4c5b3f6b8151fb318ba0931fb5c6860379689e2391fb586835c1fc96b4cbd4548be39805824a0fde9ab159db7ea18587b0ef523cda62bf573e2aeb2f11b0b5f3af6545022e4355614994c2ab1305ee58f9523ab18c1962019712b4605a4e1f3cdbbe61a5283e476dfb9fa91d3b74331478e4bb2553199c08cb3bd582deecceacad606578e4f20b53a9a7cee0f1e71ac5fa2b74dfc54711375b906f09441bd551f244bc0d00587547ca123f73e07513fb55da1033bfb06862a11695621c6dce7c97f826bea0721347f439ec80bd087b64438e853d58560e28f48f6ba87a11cbb596426288bbdae5a988580474c752b0fb733205d127998c75ebf21a9dc92cf2b98192279333ff3807ac14af799d667edce47de68614d11a6a9c80752471e8747f49ed02c5471d823941cecbf7205ce1f9e5c952dffda3d6212eb8aae9bc1b525448707b363b153eae647cd5ecda2c9937d2c3c2c79e1c94f79ecbe7934544c9637b37ad56086404ff77f296764751ab3eb8824421493cc5dd00c15cc7ed04600e83453aff618b054edfea7d5fd05534e196043644412f9ae48ddc5162f57f93bd0bd6be124c40a0cec6ab931f16c33e46df1cbf1abddac96d4892bc9e2a6b561c7f83cb29b8606ebb2d6cbac0be6a65973bff3a22bddab795afbbf1e0aaeed2095b7281c82f515d2f4badb211af90aa3953896e9698ce87916d5ec118c48007622e697d14cd7aa5ec0c27742e3c3a882bda6e568942dd518151c6812a44392c4d811a046004f7de8074a4bf0235fbae246fba2967a66e73ad05f3f844b652350acaead297600ee2064687c61e72af40b1171fa3a88c3d24fe5cb49fe42347e1601bac5c7c4f4296c91379dcf5864a6675563f63c0b1c6439f0c173d6691438b396e713a944d5504b48b951cde5d4b5a26b84b58ea5d2cbf86b4c53dbd2ce65438b9fbeaf6cd8acd1b688229bbd618cf5c0313f1fe4676f3fbc66cf4bd29efcc8c94b4f3670f0c9db7194d4fd761aaaa0554f52f3c867c8747d13bf4a2ed5bfa514f2d1742d32e6cb37e6a8d3dd47d8814a9cfcdeccb728c744da2fc46f0bc5d2b190f66f88965edfc13e3ef99edb4add2496e149c190368f3f9bedc4b3d009cce706447c1a0c7f890ece84ca8de1ea3136dedab90754ad2c0cb1104d19391dac9806ae789011e888af5b7c3165631c58cae90f64d53fd6f193d1d242269fba2b5544645bd88a6c74ea7a4dfa0a68255906adfb29663b62bf5f435ff2ba00e700ddd1970632ba15256134983c5e9d66400a79697457caaa845af41604bb3d8df38ce897a3401d9e9d98c514e5c6676e21e30dc8dda3817cc331d744d90ef6af02902a1f68f3988a34c9a30f3986d2ec006ad23006ea344a6c18b3aa9d50334413446438e595b6cdaf958036131a817d80ec76aaa8fe3955bd5152aa188369d7c821e83d954000b11f538660ee8b7a0a4db20db9dc8764c56c7dace45733c913be2737ad84593ab2382a53c06ab511e3754b2148ff39793360000008ce16a22e69e24b2ab58a968690da82e550e1015d70a0d01e1d76e2ddaaf562cb80cf7582b0a715ab2d9dcb3b0dabdd5a7b75d78632e7e6529b32a9e5e4c0ea1c21d9f5e8bbbb091421795870b590b3aa9f560ef58fedc40a651d136c5a42778eac866ea7442e898ede166a80864a7a16b0f3d3f6d6843eae706b67b6a28dedc95d7c4f7f78f45ffe36af065675040fd5ef6aefff6d3ccff0420c9caa02639078bd28fdcec3ff3083a5f3a4089261197224fe9543f4a65dc1f940000fbfe0649f38af93e870ce7aefddfb71e7e8d05453812c9edbe6e19bcdbd2f150414c29a025ac31400a76fe6eee5920be729a11e4118f77112354ecc8fc52cfeec11e28ae3e481a4cb896a745dbdb77fc215e93871b5a9ada8e5c4a8ec6464c82f5f620500b84eb35ba17ccd31564e085837231181a33016f741842710039d6586aae6c00e21e8b6ceee84a53a954b705f7c8b2fb29d8508e4788c47284e6f0d15f4ffefe69799a78a38044865904519cf6ce078ea7cb3a7ffe3b2df61d420279c6f90a1b46b48ba761262da7991f2a4fc0fab749e7f86ed1451d7578637eedb4a33238df146b1518cb8c3259535d9781012f42edd950fc4c15bcc80673b1d9c69305958af54c6a7f6de3349dee4b2b2c7195239c651684eda319423046114743a0924417eb66dfd1735b40032fad7eccfe102a6cd0cc122ca62a8a03626dd1167f2276b40218913ac65d70e183e1074f17c8621bcbfaa2d1162e2d093b777b44f43cb9a81fcd5422380c66c83da59f5c3c0e57ef6efd4352eedf9991566f979e8a209d37f122e4446a9df655f26352a7bc090d7a4303630f6eb81baf169576b53ea31be784f63a440e6a369fa6b90eb72c2282ffc9161e0556682b553217be415390395e52036b803091e833d54af5cbda9affe9a6bcfdc9bda1f41e2e0dca7e31c7cb3050d31244b00be9792b57c945d5016c17732b3562d4900279f61725d2a0cafcee5b9db033e2e3403a97205fcf17979f1dfd848acba6d7c579edf8c913f5e5a869918a8675d8b4839e2641cd4e183af3d9e91a1962d3da155c0026d8845f1ba7e28d0618cd433338d9be39b8f3151e0b31b4462fa7e4f2fb66db5f357d648d38247dde753736adeb0564571b7cee3778091a373a161031e1475be404bdf2d35a6f047cbe975eaf422482098c516ee45255933042afdfa40f7b3b2d1044b2cbb38764f1fdb9cc5a07650b3acfae1758454cab63f21c69f2063db5485639b3a6b3c9d3788894ce835361eb177cd7cad3acadbe6fc9aeb80e49ba1cead4d94b14fbb7b98a1579eee265e0a9370411639fd3802688dbde7b11bcaf1cf27cc00dd07b4757e12d93c00988584e794523e5726e3a381435d63497006e78cac88df081a1ad1dd140adaa7272be98b2af077662901da695ff203c452243e6f867913b433f326b9cb448bac315cfa5ce740ffce42ded60e6d655974af701189c01895b8bc52ae8a5a3a578e48d0a0806c19467471aa568f5e30dae962ed4c12a6f04126b0a54559d612840c7b4765e9dee4d13c06936a31d6c6599ec33720e099b96c510be129e7a2d59117fad1224dcb0a9896ccde10a95e32992a566c0016cb95200242e5a09c8f01767ba888e200d4bac6f238bfb55c41b1855a2563f037fa899b5f5da1e23e463ba449f7ea4a3864995897f96f20711e3280699bf8b0acd29d6db49065de1cb75643697d851b2c00645b5b866a5a47cd99a7d7826e0a5c47aa18f9da7022431cda71b5b4f13a907311165ecfa18a04f9022be8777f4feea990e3f9f0e71bc27715cb96134abbf70c0f7542f7aca748ba3f47da6a3cd6180509205f6b8e76acbc9dcd8b32a34264bf6afcf69c41202a727708dfa123ac56c0312444044cea7619b97ae80c2f511a63495e2729275d4e6b075a8ac469a3c1ef249014364abf4bb368cd80129edd62845d6ee5dce3e5c7b7e7b51c917fe3827699aeef4c7899ef8698e0f63c8400c851d758dc892402c2cf02d0df70fbc429a56bf15815d9f248e3a4870cee1f0b859afc3f60c757e8bc1a02c61eb0e6cd4b8a8526616b53ac0abd591cb2261bfd634438041b22fd2ff1ab183e4dab7aa8f845f178b5d364b028f054d463b479d164314ffe9199ffdb3e80392ebd524b114dd3a46daf506cca4709dcf5640873eec153b207b1177ea9adc49b5746101a9ea9ca86b8f4be6996216ebe2b24569e9966140280e8af8dede6b60690088d25cb113e7095a51beb4c6d79c4307b47c42cb911ba4ab0389b3c2da5ce140474ba288980eb5eb8fd96523560d6f16db76d26a874e3898753c2e82228038578b95e5d3417f942ce7bb515f0b1a9629249b584ed55631f7264d9dc1c6b31c50c970e9e6837664d49d60c23392e89dd80f5802a9ec92a5b3761d3cd9f58d685974f544e095e2dc36fb1866f6e0858cc497c410f4195e05a6a637a9cea4d3d17211a36eaf1a98796fda94b5aa5d3ce1fa96c6c9005f628c2260a29b629080ee8ac6fc808d28fe8e54240eb1605874c35fded90a74c1305959273e0cd61cea21c02ff13d7b177ef3bd85e4efeee1883fb631d3e04c7c3c4cbf18c624ccf90eed4a775fa97d07caaee11d20fe3b60c690d6dbd771fb673043af05d089d470a46cba26247a46e770c4124ae3000ba788fe840b5cd97f881fcbc4a98f2ecae31fac489f03a26e5c58b43454eb1d287c974b339131f5d7413a0a8e28344c7d6282af18c658ad53ee9ed03b48c4998b8839e393f452b0018221897a64022904c6c7a0c01824614a60793c3f14e96f8f8a011c32284879357b034f19ea909f0636af861b12c46f9cc475bb06c73f7dcb011ffc5c68b63e3f2f73e9e8b9e82044f6a77723d0a57c78dfe38684b239a799d9fcabba77a6e909912f1e862b6c69bf193eda566be672adcb88145e6a361b2e1a760cd322d7de6a3946e21616d19012426b0d67e00620a169a2c4a94955b8c3abbc6e3677e92444563c7ff82f32985bfbee47d25c0fe21b178871199358dec8e9e3ad42eeb1910c4687b669689141358309723a554bef4bb5b20ad3981418095dcd7a1500f5d1e42385c879265d73ae4b9f4277a2371746c141eb359b4594594f2e833df061479cd24247b1713f3f3548bc7ae94896801c78b1a55daad5c46277384ce12e942a060de542b27155fadab8183722453660b646067c1ee5f5839bb3358ea0d3f53619a61eabb4d2b67525392d0408569559194801eb6f2f627c0117d1dd002247e3edc464e3e23183fe10b079d7eb81ee7b333fccce28735764266124e98cf454946c3a8287e056c534e01c059e0053ded21ed3da7a347958fc1488186a6fb2f04be6b6bb4b0ff5ded472526141d39a3c57187dfc716964aea5b2487e8c08e8cfac45af30a918b1604cca023ed3f57b87a4b02e355df07fc4dfb50e872e86a892fc32f4290804c4a05bd8ba44e323d22a35184edd74bca64e55684aa70bf6d26cc1706696a6288291cfa11026c54c8b068d7094585bb0277c61fc94686572a31b9c7f3269df551023b7b1e139be034e521884b2972c458e92cbca58c4c0326689a75ca903fa13b3ce094af4c4a4d8bf7db25158b99a76aeb2caf067eba372806631d3dc0ecee37865dab240138fd5df89d9bf7d8483677ec4cc9731540b425731e7367c02f28628d284add553dbcca4aee31e91dd757714c225f40bd4ae2c770f66b1e8591544cd9769b285940bdf3b6268fb0b50a18bdc1d58205d1844903df2613f873afafca281aefcb1f68927aa10b9d178c5d711340885263932af82af6c058075f92a7a3a1582cebecb0d6b2279dcc0c1104457997bf44bb859c5dac13c283621df26d0931dbc652c813934aa926e2651fcfd4c3bc05a8f2664ba9c655085e203fd340f9c8a7fb1e6a210db73a4ed5472c73771e90501a4456802941ab616e6f50ab6cee122492c4f29eb7d320dc6647db9b2382c11f4e8e0173673cf407b4ca292b0544797e7a82f8ffbea30ff5ba52e4540d129830f293d2762a582092a89ee2592537b32809ef9ff0b9660024d3ff95df52226cbf6bcb6cc7e83aed77b50e263dc13cc4858a072e7d23c1af824a29de2d78013a81d47bf787ef193b73837729d4541a9b5e2e4b7556c6b50bfffcb4bea41ddf3e60bb74da193148442e9603b239aad9201f44bb2a8de02a68c9ada1d4fe7a075bc8a3f8dba352bc5992de5ffc71b2418d1a98ba79d0acf64b20250eeeb22e879ebe8dc576042dbd818f28aeeafd9cb1fa79b67d1b41110e7774c70900e36338cead229d8e8ed9b03e41f99f0994a11807f9a79825aa4b10391f1077c14fe3e2c8adf7394bd4057b73af6008cf9b7e7ea2205f9ed05f26f81469b9be614a5aceeffdf576b7e33554962f23c26d1852a6cdedbcf4af41451de5543fdab214a7586b9f3175ae9fc2e2f954cc75a4626091b9775a395725f8269b4dde85242289653ee5f8f9beccd59f8bedbd3be56cc888865897578853e4cb1a5aea642598ef8854a99b3a9bc3a0544a12ed4f7f2196643a4751a8b8c3e39f56052723c4a260867fed30d904253b944d1253f5932fcd2f52739462f0fabe9d4972a08c3e41d713a1083960ae862abb72bcf26c330e1adaf35e06dd687bb0ab20e1dbf27005d654506e49b3fc081b10fd7be2b969416b1b053dac3c29808ba102d303064671275165d8e3c6506b747d217dca4cbdb007fc3955a2c6404342ad5b640dec9447be63cc698deeee6f4080a753a250c74c821626e7a146528d2ae34d5fef667579b77d1d2c6f1c749da054cfa48d3f835956671405a6b060e642f53fcff862dce238149af6a79efd4ebb6981a4a7990926571f69d82a1f643a8ac1dcdf205b2b86bb97aba60bdca44631b021e2e0ed36c9655dbbb66f56e885d936bb387d593636854bc12822eb36d3f53bb04579d9847201212c0c43a5bf15417d7f0ba86f06c6c331f8a2e27fa5ab0152241d9b69b4b6ba3e243c255e4163bc6e4c6980c6ef81fcb4de11a561e9f847d970698fd6f48eb8fd1ceb9d7a0f934cf101d01d2283256d154e3349286380000cad78b9c2a57e2e2dc88e0afa3f0e1cb1c5cdd2a2a443649c07c4eb209d5126e7b339ef921e820fa261a763e767b566c4129529f64b525f415c3d5074652dcd3d731d599db40be6a0cbf5628733ec0b0c2bb52d03d3afa0c5324ee0f613fc8a1f5ccf151e60109c02f17e058168770a2eb4996accf3be006edd60ddf72981fd109222fd818e62b80ea0a514d54be703c6abecfad51016d4c7887e69ea8dc21072f2ae6f83781ea325d086d4451019f51d7945133035c61f583c5e107356d4bc46eb46d08d78ca06f2248259bd791b99ea7c656684c48ce64f028337931a8b2cf664dfa172b0cdc5b16c84548686c4bebc2015792d795dd1ce504294d1fddf0ad89bbd8746f0168a6b3e4357a06980a74c1211697b812582ceb87b50115aec936aa6b93b338751f150022924861a498793d4c709df06c449270db1d1245a694ff0c93a90ad2dce212bd84c249b44ee9f5bdf396aabca4ad8722eacf57fe47e56a58becfcb97ace10aca6f73cbec1fa3f59af99533b48ab4beb2e07d42dabf46820861dd238f054aa7be4993af9a7c71c9f722e80b961c0727d5c37c11f71bbd45121c987e13399f0b1eeda2f3238c5c8ccaacdb03a93d2b2db9e502acc9d513fc867253e93b188106da7063189a04043a2081f9864add379695d7d71821748515b185b5e5052eff84fe1272a5325dfe90b37029449e13e44ff277c2947282c2061ee7f92b8dfc3ce731718b5895ac31667621cb47b61df842924936c056bcdf581c88ebb5c45f630a6f7404da6f411163a3317cd2b499cb288c7825ca5db05a402d7b9fcec963062d398be87853b803bd317993a52cae87954cedcfd8a63c2d8092b859fac7f8c2d54855cbf627cb32fbbcf1ba73227e3dab54bd6b031ae2d69d984140f3e869797d9f306292c22687f20ef529112e7757a6d3ae3c0e9a0363311bab8949b2c429f6decc229e73dbba4168a1b97725dd18e732ebe72c4a8d08fa633d9c39e665e2957f4f222192be9331a1d3a10281b6ca93a327b104c0ca3345e68f2ce2ecc51225e78694b51adfe06256ff5b34ae11a68497bbc7e11570b20591c850a5118b1ae3ec1f5f5d844c87f7266837b48b37a6d43c4903783c1504b6a84bfb1646f5c46afae1bc88ede3dc26897f91ade0f962fd41b5cf0402077927051bd42ce1fa9790b732ca2e8e695d57a6551c7f5bd538f5108b3347dcc12914da9f9e669d59d9fae83da0c7215c29e4e479e41ab26e1ed5bbf7c748073748f9ca483ec3deb5b415d80368c70d50551499e6274a218d3fa762a7497d9a248502e8929fd0e1646990c8683db75da740979f9b629efce1ae5718969ecbbba515d3be56aca6ee98fd9f4bcd31f333406ccb45d29a8bf12e46622cc4f8e69031f98e5d4f8756fea492fd67fbb63e9a374d321b2cfef05187b5c47b7b0bd0bf03367460ae352dd865b25269208e47621cc14e48686731140648be631f18957ad8f8d1b184412620fa5392285fde0863672b96cfa43b44f7c680a6518ac948ca94d36a96acec072fe12016f2511aaa11bd2446bfefe363936ca862b817f0880db39608c3a96a252466a247816eb78b7b12b5b5a96b6923a49dfd6fb3730ff97711dc18c6762c03179c98d09ffcb212cf0fd6acba6466a458e0daa854fbb4c1662d6b70a4befada4874b3b824a609927c6d1159fec62b70a97d1952eaa1d73abc46359abd49e4248a94a4cff8fa20a29a09f159ac9dccc981a638c0fc0833996894fa4782a9c00430693fb3b64bf04aa5f6e396eacb9332426aa8afe1f6c87ea48b5515f0a133ad36a93c3eb314227474c350848e0b16078586a28710ff881890c04938939740b0013453b05a264283284541d92717f745e263e24b4c2c86d3e8c59f89ab57ef5d1fa80b88726af6837f2b2c4ce8a2360cacecdd9b16837558d3bc1b8519cf0588ccacd8f5752186241a8488e03572310a16b29c22c98a23433a7256d18ee56e6103f57e1733f2fa52b66161db383cc917764011412cb194974a265e0f5a067ee211e0f92820919440d91724f0989480c6f63fa1d35ee347351f06f1187e394edbd4c260a690825d7a1c8228ed44806441ad18eeecf8cdde5d1567bede6361d32f75522170faf622a2c3da173dd86bd6dea78735cac600b86fc29e60872249b3ff88295fd4532be0e71bab9892c8efcf78323858f3a17d2f5cd7a3bca1b12ee8d65e29bc9058839bf56d925665c61ad8eb127233fa1dfa2075da38059f66f3ff051831cb8e2c8b8affae021d136e9ae452a2ace186e1bf993f96717aa25554ec0807c5106353c75eb789c094dbd66c6f53f69af6b153854a5d0bdb220d72038a38e76d0fc9a6362ef6e9f578e75e2cae61c436ea4b12230a21ea81b085a4a719be8620251246977475acaba9b44187343cc70cc5ae693ec6ef5ea87e1a9fa4925f04e89a785f803d2a0f309ebf8aa823cde71df063b8f69bf4c1e5638204e0e093e7462622e8c5fecf97ea0ed7ae8ef1a6de0a407ce340c9f064b57b56ffaecfc3449111b88932b8a2a68a252e2764e3fc900b5db814c4b433b7065a0a0094391603df4d5dd703324339d3eb642d0b93f5a4cf533ffc89eac41bc265cdae46537b581d3be60b7cbcd67e673e2875da44358564f7e149a0f40aa365520fdb1339d830e7a45f807f94d1ae837001daff9a214d00f1c0783e6ba670208bf2580d705f8cae4965577e9cc2d93657a54848191ceb36d56ac9e137681e1342e65982e997fbe17360f2560d0a30e4ba1da615083fd263b2c7e1560aae9a4e5efba4a51e67ecbcad97d39d3e0312053289c8becf19d494bd09d6ed81249ebb258260b028d426cde2436b08196a941fa653f57438601ecc0e78d5c3b758b97d4f1db12430d9c00a23fdcba02bae4fd476fab657fc0b04b19d75962b45e66822a7aa1de05081a39d2515dc8001f80a03ff2d6c053a6eac6b930c94dc363d3aca3ae36ed8a96fb1dc6379d845ce76148a49aaf85c4f3a098621e5624535ff67ff8d574c79a7d3b99cbaedbb71b3444d88fc5c35b87005af2e97dba2398afcbb425b8f5560646a886c8910bb0adf7a2767d21aa1c228299a06a53449d0c81ce75e6131d36728e3c1dedf302c515576ee584444a66ab90fb8447164c1593c5979caf4cd04f9c670f5a400738f69e53533cc1211380dc1f891ca916c658c1b1a20f4f3e968e04301309d4303c4a58c7d3fa0e1e4a334614c539d44186793f69e9bf5decacc929bdb97b444579262aafed3d34d1f19dd75c280feec13f1f9b1e1d387f07695734eb85316302dbc566a73c2ac8ded8a3d15910de50f46111aa4da4e780630b62210a878cc3ee57001da47c98dcb2d1b02d0b488fa7e83d335f6f38a2df47cdff3556695c91b7513994e56fda892e4c61b086cabf0ed57a0c2b9c7867270fa0447e627eee87449dc7dcd4b9d48d360905eac54d56ff34b3d09a9afc32943e2027cc741d25c923fb31c71977ce5803ca7ba0fee46b7f812eb9363e0f6c0ce07979fe59991123b35eacdad1e29b43c21ecf21c77b758ec203b49e46bc3e1f3edab2f23a3a15f93747134350df84a0f1354957adfaecd31d2820a70fa5a7d2aedece89f5b1974f628382bb2c6f5ac36d1b56e7d93e8ae54d0231a4b6f44930edcb525d461a1e500d748e1c6ef42a22f1e7a7293ba07eaeb23fbc7222c1e35e9decbf47fec24edea3ac58f7dc7b138c83d3fbb5da9a6564a44c411f149d48d501fb27209baabc42868f7fe5e00e98f9a3043b63e2bada27e89032d66a1c8167d3bc29080b1fea8ba997737ac1b70059e4cfddd5813758946fb873e7e153b9968d25c410e0f0cb7258f64089daf73cc6111bd68e082fcb8c3710c72a6824e1da6bc22a70e4f646603c9e413a293bd64b466d7121003115bec57686a60f8d2b0d90d2ea873bbcd977b7e2981f561c392f87cd25eb2075317180fcf85c0982ea3685e96078b81d91bdc10f561aa1c985d6b77259f940eee8635bf5faac90f8290b1b38c9dd9395648c6658f85391526fd7d731f6817bfac54efc88af56d193a361b77a5cdc9e1015e0fbb6d01f452b0f243f79bddbc62a9308610244293eacdeb0651e65bf98782dfc8d7836e8e6c8fb1269057648e84e5ddb5df8ef1b5a085f9d9d871816d70741f90ea1c511bf135fa7cbdfcf0908a1227ceaad9b296446c994a4344a71ac0d0d0eeff0254238567ca96a03c10b409b4f6e9301479695a5c2fa509efa0c3206c6e9c2ef7a4f3ae62fa620d210fc8fba08701fb25758a59863a30bd020a7336418b096458236eb23019955171d6357f770f94a5991dd3d08734eee879326870e62d90dcb47e9cb2331c5eb8b03d4e0d6150049c2960b73ebe1acfd61a1560f674bafaaf0f615666e29d2f255de5f0dcfe3c6702140e4305551be8a2c2498a8daac94e9c6ad0ba4a891346aa264399626876edd9601fd34765099bb06a3abd284aa9b1884da413d6a8d22ebab2bd59e4dfea19ed8534d21b9e84aa348b472af8c385bd7e621d5811491068ad1a760ec74878fb08d26d2c5854b466afb58bfca993648d66d0250b773d1e628e13e5e5d5b95591742d7942a58477031cb4323b65109b5ffd60c740993344e7554fe635c34c3635e2b9bb9260d43f586d2a1345ccde1e456cf8a83ffd3080af3876ff78187738948229c6dfbdc8c053cdf8a3bee30af05e55667144ec8f0e6b21d04022112a6d8498a79786783693cb1001fa732c295dd5870d8d1d1244fc7f0b12dc240b525d78490ca479d4f63f8f4ce0722fbc60e28e736268a66942fc007a3582112d3fc5f645c75f23c1fc66a779db66021a2a4d850e1dbe88ff8a5697a58240688b729760f00bc8f1a8640e9609be1dbd0e551a72d4bb96a3a6230ce0b8322f325403aa8febe2cbdb82a40ad460755889b05ff6a746caae11263074f6fa58127dd2463da6b6b3818c7571d2e2bd8ccfd2033b630a580f92c319bb11823048921c9c633d263a5b34aa303821ca3b17b924763e4bde58223ab543537901e6e64c734307a50df14b0f859482732a7287ca8ae56862800c32028b9d47a792d7dc7230ee0882441686a604fc176ec2df163f0511f7d35495e1d8eeea8ecebd25880c788543330e71e5e273178b0934c465483e5ed851c1247d27f499ed0ee784b60388338fc78909216d7080d87eb5c8f8489dc3d172ffba07485209c6114c50b4b2a88ec71786a190b6b7ab7008f395bf10c0285aef184ec38d283b301dbc846154ed50809c2c4f170e4e3da5338643ebd25fb80e68391b2ef3b5b65264c617ebfa34e4453f3e6dc5d2a0595df81a15b88c5436748de99614a409d92ea3d1b9869b4b02c14a7448dc34511bf21e90d9b08552e0bb5c17e6c22673a847a67af9c946470a963ec55f6af91fbddd099980ed13221e5a6056a5e4f3fa055aafa33f42a47e7cc10c543980476b7e165e184b602ee29adbc91cd0109d7741d0ff2409d9c9bef10354a0e181e682b4c86ec9d65e8ac80edae87ebece8962eae78e4d6016aab3da67a105bfe6ca64fcaa156145cc99cb36e839c6917349ff24992a3a0387352e159d1126a206f8d55baa4a2b70672447ddf3f54e3aea2daad6319a3a4a02c5d0bccadcf4177939581a98f98a202074b8dfa29da50911843042b02804487bf351505e6f2fcd9d8ec8cc5f530ec76d783923800abd3cedcc382e1d991656ae907aa8208fc28d68cf21a9c2a6899d2b3acbbc4b7e6fcc20c8e2bea6e737f82e4977597f8392347923cc1948e77827379c67952447520b2aceadc0ca8785e2a09b485eafc00f83c5eab613e03cef287cdea1fdc110ca789246f9c9c243e00440124f1234f98ece21b7338493a2469fbbfa421290bfe91d4c6958665603469d66cc101bb0fa89d7705231cdffe8a42ca3f16b9c83d49b1c00f40dbe518cc6b75b35d7602800fca33b8b2bcc1ef6156cd5bd72b3fe53e80c0f4cc0107f2add57be54f3d3d8877239542cda052c9bf667e1d32326b684d6380df032309eec1838b8c85e1901b2e8ecf0fd9184ff78bb04582ccdc7253b4a9cf8a6452bf44f48395b6e826122c5d9a0056fbb48f5685c8bfafdc095de30a782cb9dbf65bb5f7c3e3bbf48bdfe17f839ba5d0f09ef0fca6bf802c97199a92657a6fb2d513828968576e3dd3a244b152315125d176ca14d8fddddd71618f04100c66cb3625fd130ca109aed5127ae4d8a0a144f8e1b6e667ada568841a13fc8254361058d1e306e7c84953760b0af17baa50357217aabd6217b8fd9e2d86c935bc6605df3aacb9ba24b24da7cf875f5da4b3f5d12247b6e10011ba71596c760a90affc8c5746a6bf1f402e143327d67f2b1401cd6c1932476404a6bd7c985016a420324e11bfdac14bad5ce8286e34f5493203fa35a790bc60459ae562eb8fbaa828853134ec119875b71690fd4dd287dcb4ae140dda75c1aefd2f6c4ed3ade11886c8312f9fa351752e06fa2c75fdf201691309e2da55a69fa8b93bba908aba3519162d4adfc864c543cae0baed85f1f1e78b4602ea121c37fe3d3219b700685fa04f28f67a2c28420c741ca81258a1b3b5bb70cd6249d9858bf1c76f935d428d3a7fc9b1e2e408c4b3a0e02a52a108d969b03aa9f53827182b373028a93379b4c35e2c17e7ffb82750eb3d0ae7370c7f600bb8ad12e08a6572647e9c52ca390a7a17e62f3545aa40616903e990ab1c75cb5483b80a9619905b2719bc9d38545b00bff2c1b1962fae14a4ed26cfd07805d93eba381faee311584ea0a648d41327de704e12ee282540aef60c154ebdd4c7424a22fa1e7f51178fde2c8e693c637dc324a89df84146cfc6816f12c53ed1837981716159784cc38dea01932e7ec28e1718eecdd571c7cb1dfebb2d9a5f4d41593a7e077840935b264347ad19ebc269ce8682e8b42c5039b887319f482876e0e7d4cae21dc2ce8a6250c147c89ed60dab1baf0d8fcfd3e38113d9a33f9697c39d997f0a816f36d2a66d3f479b576a40cb994bcd18b87461e776eb1e4669a5c3222acaa690def4c671626eed521688c14a176662093631eb68a14473bf58b939092aa818c3e84c16606530275221d3e36da560adc6149b71969395c55f11bbcb7204e1f13604f2f584976b0e8457b18f9f2a1a4f8d1ea4ba2bacb26a68937885a6912193bdd503e144808ceb48a30c053b638ba9872eb897b6dc8b709d39a5a422ea02b31e7a5b5c54a0436ccbf340a3d5ac2136f79d3d7845c3e6a393ac699ec64b7f1102dfb43bc8b71ebb812be12ea21b5d2ea223761ebfca4567173142916e5d62569e01f07afc4e34e48a51d28db01e000924173a705493fcc51e326d539d759c368d5db0a2d26bb9f888fb14a5f05ea8fcd2775c0c5d54a757a72b56fdd67dc56dcad4127ccee2de9cd3514dc00a47698af56028638187827c6305435471e4c439aab02df0e00fdcff3ec5be04f424299c2c94f4ee14088145029540d6532879ddd24ad593eb72f424fc4e61534bf751227ddb00d372ae400b6d6c0001b987bd22152b2a760bea4c0b23f46e5d61e7bef0a053436812bfb94e1ed7756cdb34ab3f00bfaf28ff264ddf02484fc7991647691e1dc20bd94722bbbaa66e1d6362cb4c40e2c74f682c46f8b45c71c98b780717f5b15ff3c29f5c62a46710fa4be37795864ad4e1101cc6e8ba517bb50346349fc08ba82221fa28d0c818e82fc8c0d60763b567b90c83fbc8c2158f18bead28a2614fffb227533068716a6995e031a17d75ec4d6d021fd6cf2c6759b4812f53a55f658ad3c25a0f48faa326bc64ff72e75c09bc7c18d09865c8d016274cf452382a594bb885059272553df284e2693d9fac8e1e8eb01cb0beff457cd74613fa900384ac62ec09ad4b378fcc8f10d6b08aa9dabba78736fb71a6ffce842cdfce53d45bf4348cf4f79f0acb34b6424bc2f1d8e1ff88ced1108c499c702f87623730b2951fbc8f53ef3bb45dd7232cdc2161828f5eb8fedc04a061d9ebcf2e9f91d47858826ac09018475cac7cdd33f1eb067cc67af60002c13926ef4150c0b38edfd4157a343900ff381d1a2d79215454f31afa9461acd299a030e0f5f806438c3539b779d6f089cbc4ea532752efd76982a0d7db210e5f9bbba1dcca1230a08ddf5f2b69cdc69aba43a0d51a465f4ef4e235252ce45eeee53d927dd029687f08a3f2d2dadbcd61c0dba39422eae15c94011975d0f82408d395175e9eb1b76b98970658db4c344c2cf44d5f53be74a275d71101e0a6043e41c7dff7a4e87c0563a79488c11ba151d782c4a4e4ad6bbf0c667c8253264b668f19e1d20824ab6712a4576ab5c27173443cbfe7d05f45dd85f148292b33cfc03d4ea150e60875f192550b90e119cf801124e635ca00ef2c33daa9342872d0bceab7cd8128b0c6f192548f78b4e83e182367ef0b52b6deeca07963f2eec7687a1d8352381afa0ab6e2b03d523fcd5d64f8841e542e1a3a310f06c59aac5cf3ab9626170b830366a319c07a24554327fc02ff7cad0c98ef72ca68eb8ffa8cb2534f655ec0381f2ee19c3661264a1c404f903bd448fa0d5402c656a611b2533335b2d883770a951da3f9b71cc5e50840be3ec8c347c06631a0e380deb751590d7c222246dbe2cc4378af5f47b9710ade02d74481e783e03359d479a7d7016d2bc1d7dd35ab5cd327cace9da42c8713bd34b7328b3f955da7291b7b16f8cd4c1f5f83f947a71a0255d484609e317703cd03a2fbdff9e260842eb85c9a6ea36de918048ab3498fc844e630ec3c7028816eef54de7c090abc81812f08e729f49ada33a890e41a5d1880944efe319086bc97c3b07509236413bfd318af22cbecabc3e2770d69b951281cd9dec9049e1396fed9cd514e6031ed8cd57832405b8575cb73c86452844c04ac5dfeabcb506b26a0ac6c8d88b005a511e10a5006e688a97208278de17911b47d3fd0ee07727bf665fd14f126dcaa674709ca04142900c0c513c65ec8b056c48084033febb1fce9b34663ecdd20a2cd2230622278ee28f1309221ff3643ee055dd9647a6152ae6b99cae2a6aca3003431648aadda68f42f30c570d506930f07ca43a1f18135395c73ba025f9ce15a44975718b3dbbd734154c47c81992e60750f90d68458ef7b9462a9b0ce09d6d65dd73433a6f83274e416cb8fa477c29ad42768ee5fcd9543f833678e60331bf7ea69b84097413dd015674c4786a3555a9ad667cee70feb619685ebeb9934d6f25a12ec7dd7200e939eb5e4fe718ef3bc2f03df519d10c69cb354538c56fa1fb724f801254cc87edb1bfb7dc8828145cc4dde2c60af36c233260755680e7cc30311b15125522d4a8607492e31cce7e0bf68077d670961a722ff9b0a3d65ebb9c0b92265399f6c945053256b62d47fde4ac1a3fde72e98fd297a4b2bedb5b184752c7050ac400561b22daa3f9bc307c2b34d4c42330a4db14c8946aaed35068d859baac62310882075be6537056c716e8acd43b11eaf5409d2e7188f6640229973a5d88b425c9d66fe9d06b5f755a358d6a9459522d8aec72614ad9ea577464fe95e7cb0b1de3fe0b67e4dd4425866043c5a0cd98e3bb6504ade568f6ff22c81360461faf135cb122a2aceec5edb0716573153e90fb2a0b523830cf93ba2ecb7f5585783e50082a263a873f45fd31609432d727d9b05857817346b359af5a77158ad5aa2b8c18783141a5dbb5b48444b8ab4ade55147cf904008c565e88c96348fff934929d7d0173a90b3c47be618bbb62cb997290fde4e98b2dd05a10a5023b42b5ed8e4a0b066ee57bbb47bef483ec817e34d0d1053a683d67a51a3b27af2593f6865c3c297fe65b3868b8bf5302b84431096eb49740d0f9ba3cf64344b189d96606bef5bf3fd4a5b506a72fa46c11a25379062c4852781d597dbdb2844ec48da297386ba43f616b44276b68d8130634b7be62d8197cabdff71403d6ad0e1b09c98e7555da8392ffb1d256446bd5841dc8e87efb939e1abe3543f889921d790acd88eb27181328f2ee0101b59c00c99135d345ad546afed98856f2d5625aaaaebf141658da677cd9adc0134f0a7dea7aa036a9f16a1d0b2de6852b4d9bbc0fef5ba213a08ce000f41479f2353ebe39a813ad8b25798733d089133bb9cc7803b340cf2d9e8268acb8d7a746aa6279447c4447f69461439e503059ddafbe285f0e2e5b1715e008fbc29fbd287fe68e65d85811d84e06f4874121f808760b8e0a223549ea8e51c897255601d9c58af011aa597f8bc7a88bd81aae4ff4e88e80bb88859189fb5ffe09a8ca312ec1454eefd053a78e9cb8394e8f29846f897a5cc1c319fa64e440e686623a7f01de9da48c303110f93844225ce60513783e4e6fc3936afb6d4d18911e12d2b829bbc6bbdf70169ff23201e2213bbd8dd1a45e807d297800cd684e4ac56cb32209acfdb0b7436292e76d12069e50d374cdaa4c2ca51be4f8b18b1a8e7df02d9a032f3e2882514b6df7089f81a98c5017d46b1040e9395271536b2fcf1e131533f0804e6d433a65bd47bd0e8c3f32784302d79fd8b76a0bc88df292b8584d22ee86654a3a452927464b1466bbe404f8ede4285237a846334480cb0f9b567b416f2a1488c552af3f067141112179ae7a654c52e15579e5cdfd92172f25f546e71433a0c5012870246bdd77083ec36bfc70d802ef3447685cbe423c0ac955e5864482dd46643e6643aa9f18292745602a3e707360dc5ec3940d70a468ccdc569dcbc72aaf19215c5db4b181569b477ff1209bfe7776f0ba9c15efa6358399801bda2fe10bbb9359cc6cd52de1b9369164859370a5789b54ffcf299326c009d9b680d3b126953194beb859ceb5ab4f28ddc5c4185d48393e687c689cf2413a2d7406357334acd9ebdd0939242a684a89a9356451a44488d418f536655930bb41a0b14a3396643d5d43d4517510d9ad7dbe5e7cb9388a5e258fd0918b00ae528e6c8f5b3758a03bd750a9f5393ae1dc210e773bff3820c4675e36b65be112a79257a494b507598305b52c73219fd7e1cb85d870210c283ebddd2e184148a6b5e26ac93342f8a02a4a2a3e4c3db012a41975d86cbf6b9257227457e5dd398a4d92f80b98b5435d9fcfc76c71f21cf32e9c28f7d712540c082cf98351a47899cecbe22d4a960c4e30ee7de4575ffb41458940aea16151c0d1573c4da6541ff4730cc3ace2bdd48d216ae7fbb8162e1dd589fb2eabd14f0276c0dddd80605b9430d3a471f76d2025a00d87c7a17d36b156a048ab3e15cfad0a2bf53ecd6da485dd50b74467f57b7dd0367ca26011ca32b594b659e306d9e4f888c6704cce919217d76e53fb6c4eceacee08380d3041c3b0fa13b3e7b045debed2c68bd871f082e56960af4699a7e051a2b130d174b840de6a665da13113174cca5a77366d55bc642af1ca5970ec305baf2e847ac51c3457cc3fd484b2760370d28851b8851bf8012d73a4b8b879aae30719c65c5a90975d909da7f63040c615f5c7ef4dfac25ab39c15c8d7f4ebcc2c611c8129ec94b564fef1822551eafb929596d38b8d5461077b7cadc3175ca29e7cfc5b9e2ba00c7be79a00a31ecefba13ed178e1496b40cbafe256734faeba5439e120aa76071a59391d18c8d8c2c528af1451e5f342326afad5a7a25f3795563eee1a4b9c27273884db7583a4d6e2c79ad7e7d2b5702ca1ab85c2304e9c1775e480759ddd60395528edfc9fc84a14aee86cbe52f8c55eefb8b30e4d3b10e00b54149ceb46ebfd377512e1cda7962346d7cbcd2847e84db62a5007ec6e76965063d2248d2901355e2b871f2ab88876bb082083704ddd123584611f6153baa61a9ffea70b36f5efc981a593eb4737119aeb092f5a3e5db82c6676c780a5be8030e394841933e64a8539affa0d91b682c0b40c436f3152bbf4fb8f9618c71e09fdfe38f3cc1210f7c8df1e3835a628273bf121d71a16920e7f3dcdce42c16a3f4c4bd5a93452a022fbc7c8c4623b257f69dc094df726fbf1e05c32f74505a5406808ae14e70d77d9da4e4af1a41f5005c367c839bb9394ef5efaac00f00b23cdc66727da07a96a2ac03d338567bb90b073d7e0a398859caeb9d29065425079da73c54f67b20bf2955337b1f6036749a0c250e3600ba3d540e1fdc4123997ba38a69f65c3ae4e46e4d5008e992a782a10777995298e0e2b0b3cff543de73971e875169f880aa0d7571eb5b29ca87828fc3ccbd1fa0fac93a0f79deeecc05a64e880e5324ff3b73c1528380c50c8015439ddc620316fcf825aacc950000ba3ec01d9ca9ca1c2eadf777447d7d2893d7787bd614ec90c2148a0432073d170c5007f4cd4572f7e29e7a653c470b7a0bdbd1ba12676acec4b4f5f1d2c59a402e3f573614472aa3487d58289d1fc457f95e509d8f77072c75cabd31ff951302d7f3e5fdbb3acc143a223a06f5d262009cf23dc9f1975d797e554da841cc149da5e7e066f207042f8992b44f93fb3d9e21ec1c27b2d88b192f023058edd704e6115c10a2a3fdd69cd88ef0a0e81cd8572a149032481008726b4b78087bb06b0083908c5171d7adf2e4b7c65a30c8d785523cb0867e03027145824bf230d12dd3d030303cada9472d0813b24bd86b0a48965fb46f067e4478967bdb46739bac985da58e82eccf1d28b15ef068525239f114ec3cbbe35babae52887a1a67304a6969b9d65a8b9aaf669041495b2e2bd4270083ca500a716c5c557320621dfd8eab57558b587ce1ee6df2fdb6163ea9c2541b6f402db11c903b38577d4d8d4516e3a2f988399d6f962e89926eb75e888aa6442aaf9cf292cc843f48686602857511336cbba0615bccec97fc0c5e5f7a89d602de0c80396c8bbc0edbf0723138ba7238e8464b771dcb0f63afc027195069f548a0b1cafe2bbb6406f1d1e922d528257c6d259008428d8f0c6ee63e6e53805817a192b9de71db515aaeb4215e17e6be4c2e32ed4493722182e617db1911c2d043191c64a159c9a904d38495a7552d9ac62fe38358a76f30d6ec465a06d1b5f826c863d8a10f131630dba5907b6c52e044a545f820525c019a420e0a853636d9530e6aa34fa6f2bc26aa527916fd22ad9a69906ddfe120f45cdc9d80f5589d7b8a8ded1eb6519f00d008d8afea03bce32435943bb10321b8d6433d21d02850343ef92722a3f789c080432832fac0f0429d9e5ebf482eeb10c8fd39e0ae0a3e9880501f50153ca01381bccb59210af876888c9c8e8f6e60838c0085514d28003d4d56477cce95560877c597da1fe0202ed6954e50127ba22cec5ae4004918c27e3b24280c8b1787b0bdb5c372a9e8118030760f9cc4b1b0aa331f451c863922d0754ffdcc01fa1b26b70b11163c2c1c3f24bbdf78e7766b4d9f1047f4b6a8f1432fe34e8ad5d6f8b6e7588747c320a2e1bc740890214feed76f00201305c0c68ef7f2cdc61fce4817cf77b77d01366a3e7686c247c3764b9e2d286d1b0792474629c6b7f599ae41b7fe0a95fa2382c01880fe3127350a83465242db4073352a8d61281a62e62075ba1a76a03381820199e15ecd63e56915f5db80bb8e3100b72228ed619c9ca7735e411a081588afae3a202901dbf1826fc2e270a650cbcbe45b32966c2633d9296014abf2f7ddd2e3e1946e5c189cff8e89474872d5230ad7b9210043e8ce9162520ae3cdd28c77a118ab37f407689ed46223e0cd51992d84a5fbed5bc91ba2a3090422eba2be83a43f4826bb321d9ad1fd5d403f821c99cb42405fc2f9c2a2a40f36c612bb9023a605eda84e016ab88600fd36662244392ed7580027509a29336b30ce9ab8f503fce10731d0b3c341b01a6caaf951180d7c5f22fb462890d11fa30be2bc0efc12dcfce8ad1f24f4895c5cf515efc93010babdc18c40584725de350dddb4f819246d0a1f568110785354583f3bbdb8a688d199e30cb23fcf31d1d70bd954cb76bb5306bfe109a8018c0f73bd2aac399206a818df6e894ce836c171f0220e78ec0e0f9b3a3d043cf5048dfe0a23ebca7e7a3cdfa74c422ee5ae299b32a7917e33641707b49f9ed6d6615d77bfd07ed91d3724de5a51a88ac2532e0957a919a8aa1ebb955ba0a045c2f77935b3aebdef9922c30f7b8a53177793cbf8f6793f6057f248abb38e3e1080b6ff7e14a296ba52505216d386ed3dfdac61808fc365e34cf3d4cf7e8b3dcd8574b718711420f7092b223a266d561ea889ba867d229f5aa0accd43813a577f124ba818ba19f7ae82719c7964bf3280d4cbcfb5563a222b0bc17d11567e8a57c2f761e11ade18cabb91cad54bb292d67cb9ad092dd3f8167c9659a8e91b6bf80b3869075f86d60497a52c8c3f99f09250289476fb83e797b10f718020f253c4cfb27e96166d38fb3dbde4f412b7ce7d2e398ec14a7308a9b1761ade4faf1bcca6fe1471ac0767d7f090ff688f2ea1db3dfbd43398849f9ee86fa9f0df143e0e69a43b97924efcacb16aab8f044ab22fa4b3bc3965a96eb65c15039fe51e83ca2d89ebe85e0a646e3e2390bbe05c54ba2527336d3bfdeaefec5245a8d578974cf9d3c6fda80140741699a10ce05da292a9d277dd00f8ceba0f1cd0407cdc505ee6ff966f7f5227fef1a71b90574a910483d00a3794afa47987d92f98137ff9d10dc02f4549054b56dcff5776d87b5b390140ffe606545ee00d387859c1867251ba8ef29c2b04481cf599917e59b025c94c2804ea2e613b78af220896e55e399cfcc76f93408ea94a3258af14fd653f3009c876f67d705c5de0e5994c95042e5c621f38bf25982d8b9f1e4efef75d24a04fcab4cbe556822d67330424607de9ede5b8bec0b3bcfed23b09803f3e02372f771b3864566343d9228d39acbfcd3534abbde75f04c0bf3702b717b8c9e092ff5a890de593a4cfd5fab6ecd007b615e3612f2914a07ebc11b8b9a42df0fd96204b12196c041c0222816038ac6243b95eda1d72ee3302c64bf42c8f7c99cad505df1f82682f211acd03bf066f86df32a5404c1b3615b82ca672f256df9202880b62609d32e10521b12b293ac330e304d71c9c03b12955d15d1bf4bb4397638228d53e160e86ad4a2f6f951b3433a94be740def77992adc6123253f4852e6b91cfe32d8eeb39c374ad7cc83754202f7329d36e03b7350dc8d702b4f471f2e52dfe068c78ec1f986cde60362db94e829d835db31934ceee5520a6d5d874f5664959dd26d543c053aa7d2299d1c3e47e58dff3191c9a075f43ca3c3b3ea0a85743c4ebe791e46c5cc44fd31dd52b123cf2c095a52e70a09c4bc095a5a50ccceef8b18dc9779913ddc0eaf34b46a2d08bdbcf01523557abc5cf47fb7f3968c453c6fd442ca9cffa372541554fb5a81a209835ff0a404fae8d4f0c6075daac5329e676a8bb9776a349b047829dddc1047382514ac99c229e42037472351893acb281909d25c55fbb6103be4e2208c17b09fbca3d89ca6ab82807e24b912a7c95237f78d6a64d3317d30f41466c424a2b58f628f72e48b12c5e514ab9e9affe60250423c8b2171cd2a59df46ef1e84e2d1f638afdcd6e4eb500a34eaa963a2a9ebd80001dc765a01bca27b9d2bcda8b68aed338c8a1bb78d02681f091708637fa658fa497dfa12eeda0be235d1a9f8b2e315844428b56f1a69c86a339365b10c55d2d28a1c1456f34bad6b8302adb05dc5236016f26dad4e1b5f96ed8f0dc6b29581dc289bae3450ae5f336b6d2608d6bb235e072b20f25a80f2366a75d223a95421cf92fac24e883b906e886493934bba859d3c70f04d6e524788305732507d35e0c6664786c12a6c60082efa22477ff2379f3f87a2c464bbcc26ef7b2373210695a9c02028356fa818484c3ceff4599fa699ef7dad068d994f306ed40173d3be36ed38ff5e90c57b133dc7ea6c6f0fb9480a786081f93b92ecffb4f50db7457dc2e556af926e969486482f58c832781a4dc81410cd836729eb9aea5a09f5d7e1ea24aeb3f45c6fca0c765c8395763019e50446295e92cc3082b68b1217f1cff3bfa403e3b26174cd7ec66b047675a7aedc83d53e1b279ff926cf102a7ff468916e507a1b4bbeb49a424537d9a7e775fed7ab21469c09062a5152f3a9757090ce688f5658c745bd3cefe65a53eb6a3f5d77e5330ca2576e15dfa10f96fb17808c0bacbb3241c572cd59030e0db4dcabd2498a5f3904b44b18d8c801b4325b740137765755caedeecd7c118acdda6f1c74667b0564e4f2de5384c3cbe8e7b7801b021a31ed99ca27f4923ea20db291d2552e8932f51f8667173d46e14f987a6d3acd1deb5c0dba109588c40cca5662506884c829376cf44dddcfde1abe2698d0d769eb49bd3b3715f6181ab7f97b8a951a6667b6d608576c0bd1ec4893266d99713f016d1839e7492f580bf3bbfbd21e4c52ea7e6583d2c3e895b57b141ee04b2aca8b425f78734998215f48616d991d229fdb18e8306c13a77450ece84137ab9248742b6155a0b4296b6341c8618e33ca2a527b4749e919571f09ce3f74e0e31c1d1b23a28fffac1ac0c47bf1c21648eb485f683216c05d18c82c87cb442de722bf85b13dc5bc7e1dc12cc3ecd3be9af28e54548b15208e954de2971bf452df8def2059d1116f527ebaae7639672ce53bc8fcd5fc9acccbbabc8cb9909e5ca135405943f9247f22e5478c54bc3828d1b55fccfc194d68f8e610c7d6238b8103f8d0b55d5557e2941415663545d0c22e28d61a8e26a42627346fa14e0a07c475f06a9ed444f96d86a13da077b7f01b7705127a95be60bc426fe20478c7c6b6564d3dde8ec85784dc3ee755abb5768d85fa1bbd30aedfbadd1b3bf42cbee9a86ddebf476afd0b1bf427f7f85eefd6b34f6afd0b2bfa6637f9dbe9d2b7476aed0df6185e65dd668ec5fa1657f4dc3ce755abb5768ec5da1bdbb42fbfe351abb5768ec5dd3b2bb4edbfe151abb5768f7aed0bec31a0dbbadd0d8b9a665779db69d2b74f6aed0ee5fa17b7f8d8efd2b74f6ae69ec5fa76b7f858efd2bf47b5768ef6f8dc60e5668ec5ed3d8b94edbfe0a2d7b57e8f7afd0dfbb46cfee0a3dbbd774f6aed3dbbf42c3fe0acdfd2bb4f75aa361bf153af6aee9ec5fa7b777859edd15fabb57e8ef5da3b37f8586fd350dfbd769ed5da1b37f85e6fe0acdfbadd1b2cf0a1dfb6b5af6aed3dbbf4267ef0afddd15fa77afd1d9bb4267ff9a86fd759af6afd0d8bb42bf7f85e6fd351af65ba1659f351dfbebb4ed5da1b37f857eef0afdbb6bf4ec5ea1b3774d67ff3a4dfb2b34ec5fa1ddbb427fff1a0d7bacd0b3cf9a9efd75faf657e8d9bf42bb7f85e6fd357af657e8d9bfa6b17f9da6fd157af657e8ef5fa1bd7f8d86bd5668ec634d63ff3a5d7b0d3d269801942505aaf367c156302055a503192ec2b48ae383858b9478d0fb850b832d81f7fc155825c37d3c3497896a712137b5de1e63a777e6cf259e3a9f416a5ff4d66b246edd41cf9dbdd265bb94bca36c58fb1cfa4412b2f7de5b4a29a54c3205c70b0e0ce20bfed440b3bbbf7777daaf5fbfee7eefbdf7faf5ebd7ddefdf7befbdd7fd5ef7bf36e519ef9637e7d08f47fefbc9306231c2d71a7c5e70e87ec3fd6f8fa78cc067045a3dfde2705f16dae5fd1a5265c8efbf40b9e0478879348232764a7e7de3cf9d80bda75cb0337ef3de0e42b84cbf772bd6f6ae9e31364583852f843d72637316730886427fbdbda1b7d2422843d7faec76c6fcea1e4b3eeb3d71e4c8e6324de3290bffc58b91c96e71e9846ecbf27b5ad1b27c98d1e1e387233fadea24349a60293e276f29e22270c89f15d66f1a583111fa4d23e10c0d18614c67b06dca4fc232985e742594901e633f259e124728a50d6f855fb2ae7f41a08581f06cc1ffe131ee57e600a96682198664b72ed8c363bc07d98780323328b0f4bbeea981fe4e2728d9b07694aec7790217cc81877093ff0f58abb516424b39cec27f3f03675c66b5c77a3306d34e982a5d6ffd7c0ce278ccdbc13ffe0dcd09864b0da01f1f07c5de663bc11dc6414b9ee21b9a7e6cbb4d53027be8c7f79347f9ec9d0a12d0cfd3a250951ecb4ebeb30781a5d1be833999fe8c536c734393f2338e61ce848947e126f7949bfc4db0fbb8c9ffe431fff9b99007eee0ef1c287be7abec0e511cd4b9f4ef8dff57fb1d6ef62c57f42b46cf5dfbadcd38be4d83f90e94813bbee3fe035dfc047b8f1b711a0cbb42e8977c89ecf4b59b451f92fd5196866257c25dfc21196c3cb99e85eb40fe9a43cdb3d02f8e61ffe91787d81512ffe40ad1e867f45196267ed46a8828a998fcd38838f9224e1e0bf2981226427b7a824b2af80609e5fd1f157e823228f886c653301193f758f2245c3ac17fc2619bece3db68ab2fb9f2dddf5510056564bb97a183288f839e9c601cf149d84666e0e5d28d2a1fc3a3a78f631f27f43819e62ae812bad05e98a389fc47fe8030fc54fe535f7611cee50822f38fa84f8fd04a176e407dfa11901f1f47c53824ee01f12abb143e07eb2aff71937f15f67de73ff4c69180eed9c8892cb264cf704a182d845554d1fd5b91375f697933aeefcfae10fbd03ebd44d89c4eb53e26b59a17df5b08eb759a99653083dc7331eb129509fb9cf0a0287e87d3b139ad03f2bc22166819d6f75fa075c01e3e3c26f4fd3f9ac099084afcbf2de3faf723fa77445e9552941b55ac571ff6f172fcaad980f139acf2e75d21fb2c29791db0566b57f04097576489f703a3e09c087a4c780c82f0fc3d5d4de13afe768cbc46f98e05fae57df73c9b6609aed02574b390a659190accf33151085e59e8668f7285d48f2f878afcfefdbc236f86eb3c170df4f38e64c7ac56f36cf4f1728d78ca44d98bb2682fd6e11e9cdf07a016c0caa84e80a18216f2fbdb2fef4576ead0b9ae670c7b2da3d422f7672f62f8e044fb60da15d2ba1fd3b48f96a6d1fae2b555d28fd507cc943ead19bb268c1695196af752c9aec72eec8adaa5b58b97e3897331aa78672bbd1ddd645372e52c4ec544b03945d5c6ec45d7de6b5eec1f96c52b627f6119a6e1ea268fd9322ef7f70d97793fad527952e60575266adfc3d89bfcfb7939504687ca4f0aee6ce6b09fe08eb370676510a618629d5ee5ece3ddf2f3f7f329116cf7fefaa71aa6fd45b5bf62ae50e646bb64ff93b35f81b35fc9be0493bd0ace3e057359bb64ef2716ce489f3d76b727dd2e7b4bab3179ccc42466db57cd869502259a903793161f3567df655b742bf20c579bbd49c9cc5c5cb8b6a4f5e43b9716302f6240cea2df5db92dd657078f1e311cc6fb97b3997a6eb283c9935e9a6de1921f1d83cd3c6b978ec1d224b65bc6a67d07935f90fd3bd18b1cc387dc29d8d175b4696b49b72a14bad3a444cafcaed52f9b49266d310b5d984bee10d0e579e0554143244463db89ee79f47aec44abb948f4a23e682fde5b031000a65fde9f907c3ca39c5c1783c9719d374387b5fe11ba0a8712619cd9c6ade8d05abc1c9adfcd3723fb2be9192cacf9cd99b39a593358f95c64b969c3fe777d3f76ddf9324798b36b29909ddad33258cff46a9702d98ecb99d60dcafc66c4be08eb7d580d07f534f6bb8f01df47cdf4bb2cd7ef3878c91865f91de54de1320acde43d81592965f292e4ddf2bcd9abcc8f2bb26cca6b924b56ac64a3ccb242b3790796ecc69757943dc47e8708e30643191b65d7b5fa0506ba401991bd4d537fe5cdc942ab892d334e2eb35c7e2edd8ac3e85a442e44dd04e85ac0882d43106719d33279b15026ef95e935a25a9994d57c92c94b513279a7c4b64cde98a1cdd5846925f95dcf9914227a095d9b1135437c8da84658227e9cacfd6ab1297b8c156d69190b653229a070c6192fc76611e69782ec3fe36bc91df53c7f8b11be3cb3766f33b4b0d90c1dcf05965dcec65bfb65c575bc1956bbf0967ef1efda0cd91fb6c8ef29192ccdf066eee29f718f0cb6cbeacdb877e9186c9765aca1c7585b46a86bcb88a4cd5b1b754af615f96d285a0d3c79f0592a06dbd51a4ba26dfa188782a5709a1037993e0c66172bbd5779b03520e287e8c79449398e462e5f31472dc62d47dc5d3f5fbbf1b57f175bc9b2ece3632b5fd284882f67b7fd7a8bfea532e94ba19fa2d90880157460854c634945ca95d28c5748c5189dcfb24213e246050b82cd56366fa5d3c2f16622f16ea67c42786011c82086fcbe81ac24427ed0403344ddf266c0ec6f130ae11caf3d8443d0a3b93184ffe3d15e6b1ace073eedede4b0be73e85dfea0afbd756be60fe5f28763ed47cb78d6fc9ccf91e5bb112cfd8abdbc3e640e6121f667fc023627e882c25ec35c6278066bfdd4349c03d3b48768b0f065ab725c4087c774d6340d6bff509a16fab6daff8816fbc171ed44ee2ecca39dd0b4ffa1bdf6a120eda7863ba82dc0faf84ce4ec4357decdba49fe0d5c2a3560f4f6bbcfdabba6d98a3d201e236fcc1918ea5e77c344e6016f4099fa7ee1ae5a15ffa00d048985dfced9ec5493e2d56819127b271e8cc94dfe70b010e6f5dce7f3068bfd4ecb38fdf098528d0745a0caef6fb2bf8d3b8d5f75157129f49db50fdd8e4116f31cbcf721b04803ca34767d853215fbd42cb10e3ad8ce9463445376939b240541a9e5e3802fdfb18dc4a5f6b781b8d4f26f683ec2f4eddadd11c33c886118e8d258cf8743c8afff00aff80822a57984bfc4a5f96fa63efdb6d8c3c0f70d719c977b98994a71d73e3092732a8560efbde3acddfd78a0e586220b3778ef3d8744a0b8021b628c72f6902b508161d9bb1c86026d9404965dd77561d80ea0c002110b082fcb0d0516981069352291c8ba0ea0404209b25f6568d8fddcd47203ebdfadf89cf3e963f15658bf9b4fb179af8c9d18563ae9ec6072e4b88771d34b430e16dfdfd0ccf9f171cc8f2f1fb629c9374117b729495c048ef716ba5438b10d914ec8e92346220674f19ffff0901813f7701834a08b7fc7656f9f1cd0c5e3939d7b780c8c194ed9dfc79be1a721248e39a08bf78fe7bc18604dd3514ec05dde0fddf34f9378081e44ffc14311c46964647f1d4dc88118802fa49f70c214b99f68c2ea8927e0e42720c9a3ecff3428e47d373ec5ef07bc2a681e3e45dc814642f3fed44868de3792dc2d8e06ac5bb252866fe07ce0bdf51f78f888f738308eabfe7c19faf74470681faa8fe37dad13dbcc871f0a85ac86e5bddeba14dbf8e388eff0e3671807f617b6f1c7dec3558671c0776cd303bac8874f9fd27f4f24a318e661281f3ec4360fdbcc401bf9967d1828699c428f90feeb812ed823c43614cb1474d9f16f9aeef564f93e25e7cd8b340a3d99f6fb7efb7d6d88e0b82c0be3c81e629bec87c0efaca3fc89c9a3fcdb10c1417afff73ec67fbf611c1c876f601b22384efe611b18e842ffe451f009b6997926300f5de893b0f525377becda10c1f170d47f1b93afbf611c2539fffe61136cd3c3b2ac1374a16fe1f756ef1ddb9c1eb6b9de710eec1bba8c5e0463bf6954ae7dd33cfa33b07695bea52fbaa16b430447a5a9f8ed4017fab3d2c78658f8081b220e681af9f808f9f4b3cbdf9aff814743f37afce62161ddbc39d58041d1fb01f6b09cdf49d9b41dffbcfdcfbd23e691657f0807890217d54d5eab8504c8d0e566f8290d21849f798cf6f0edc6591fd83ad355eebaaeab836123cf7ff6b1d8cf4323bcf50b2459dced105ddba68d47e86676421fd98dd78f3c1b5e56e7f6982eda442893fd338f812fa10f364628276a1031e043abec9b6628220731fe90706a3512fa3b9152f693397e493264ffaa6a9730743d9d21d3975794f18493908abe1f2686f6fdd6d533b2efcf52ac8b52eda63c200f852202ffe1b8a9aa403e2e4f94acb1a01addaeaf33d3eec98582f21fc5fd2c1a54b54bb26856555bbe34206436b936da8f20cccab45b5233b53bd2b46b43a22cd26aa67643191365dacd72bddd5016e1c38eb212ade6fa122d08cf134b81758a2fa3a95d2c97dc2ba7f830d17aacb46bddcd240bdda6b935bbe408812c59348cf8241612c8f2b62992b405c0fc48daa527a44cbb13e524d3aeccd7086ecba28c9fa2d588797bedc68ca164da85d6a952011464817014f0d0a15db7ee0486f829693952fe42411a2b9a9099ccba205ed91e5b415fcbed311bf5d2a451c2fade7bf1492925a5d3aa795956afc4248412d22b83581a90f2e1aad588568e7d0f21865b5a386a4078a658e69cc042ebe254b29e31833e98ab09ec8372c223729c5a0dcff4678425a83465458a348a5dd46251433cf490bd4da45df47aeb7aecbaaeeb7a16845afc985df9de8cf1650c5aad5612da4bd5c34f113e6cce1efb09c3bd80585cebe4305641d93fcea985ec3f59f0c0c32b12e2813ccf87454f4f4f108d5f85d4b72e167a425e0e74e1c0fc02154134280cd592516505b332126665d9101e1e23458ab8133d3d99123b3b59909c9c2474743220285406a1cc30fa62b5e84946e9755977e60b75e95c3951e6eb491c0828c857f1f42e112fbfa741cf852a685620b61d89e6aaae6d8a4f6fd6a66883ae0a74d1203fe2a6542ac3eb52fcfcc8eb51b84f2541f6a2b7b4b76088deb54efd728626439bc2103535b4eab9a822fb6738080e60e817ff3a0220d5fc9b285756b0e0a107130c997ae0810506af8cc235e8e313a1911e21b04811388487c7f3bb5009b833244889559649c89c1c8842d108e7af20c19539dcbc80b80bbd500fc2a0ebcab950f0bb0b7501814117ea02e22687aed9a87fa12e20570e9dee31c2230d53a9f9126a35110380564a5bc66c3d164372625945202f9950c7e51e3ee6fa1e7055f18043f802e22efe55056524bcf085ba5052e6449903b17c181fc296ac5b06f6b4203c63a64ca593a9495fb40f3dd33f348d8ec1b26f4973a0b5a88b0a57ea425d3a57ce4585ec2f2b125a815c94a2fd9c137714c84daa1e6b7d10154910949a10b85a5d58ad3f526e6cd3a54d1b1136b7dbc553f6b7323ab51a9a693676c87e7e862390a945549e54ab894f85b078ad861ef5342cfe42bd1913ce1f1617aa7e84c01ff8933deb7c60b762159bd9f7cfbfb239710325719737a37ea15df8533145a555d4d0fc2ccac882878b86ea9c734e4aa9cce16407e409c3ae8be52b43182bcab2b2b46a0eddc80385c49db8735d9a65ce9c79a6523335533335533335abd032d71cda90dd3a831586ec5ba039178a0251a09f0be8e7525df1baac9c4b15020be985a2403f74f5635d57e6d08d3ab18220c7b22c8bd21c2873a1dac5df5ad4558296b1481937297717ea5a81cc8132570abaf89b4181543227cb93ca56a00fd876934a15a43a59f8f143b7b64bfc7a6dbbc4bf5250866b0a74fd7805b256239b8f458fb164943cf45061a442a48c4a782e7a9ce6322274dda723f142df8d4bb8c9a9282283b849c74d45d0a2111c233d985ce88391c628b4e8e3268f3ed9e163106a353cbfeb5df8c5508b52dc517a8e67f7faf18abd1d42816cc9e87de5762faf94becbb2a6d2b4c7b48b61a26fcf52b0bbe2453534ad94b261bb723b6f77c5edb0b73f32791616ada6e46912967f2eeff02c7787dfeecbd68fc7ecf0feff2c007800a83cbe2d7f59fe459f69a3cfb26f6179ec6dacbce8536ed723a73c366dac784c744b2b7e7bd1a79456e01aeda6ed37dcf5c8a2cf70d723e576294fd24a8fe14ef41903b64ff9ec675cbb2bb415b8b4826b6c29387b2cbbd9976e97f256e53795cf44afbd497657b2ecaea8887e056341b0596b0c50f90cef50f90def68f9ec7d4411f611b30a8e6e02c06b2d6f3ffba7d568c1ed26006094cf7087ef3f0acb63ff2c5986b1b03c2662799647e17e63c9b0d744b84361c176607914966779eb67c3b0ed511e05aaecb6bd95f29ce8b1cbfd8adbf5c82b58becb72e96369e581d8b20c6f2bd96f77c56b574554c2d95755c662dd94716f457807f7291c4ef919b8a245dcc5be352c25e5b1152b3416edb36f165cfaaa2a65a4cf6e677f85488477609ff24fb331fa944fe9acddae24ba295dca8b567c7645afddae47d67ec5ad21c21910d8af68b72bfdc9afa464f64b292a6f5fe65430f7dc1dd927ddae47b66fa5ac1cc24c4458f6a2d1e83ae2a67bedc08ebebb52d7c8e6ecd66ca57e52f6fd2fabfada3d1953c9681297d12a1237796022f1988e92a1734606150c5bd13821a1bf429c75c45dfc5fab891fdd64fdb895bd157aebbad64f0e76d06a32cb7ad10e99d52c9a8d1aad1f2b5ef1faeb2ad568c146c41cddd4af3dfdc97c0716933cb6abaaaa4252816a128fe9b02bcbd65b3f1e13df4626f417eeac6ba5ae3f122f1b73b652d611eca3cb841e7b0b26876e9d52c4f837b630d1202853555af6f1e9ed3669f2b1a7d98039ab2aaab27055d18f510800b41ad882c2a5c80800ad460640c258852953021040d642ab814014770b15152f32a89ea44c7d8a3b1e593d05f90d82a8c0b097ac8556037fba8b7c1a44453dc990563345f0455bf6a2d94907a0d54c9a13a98ec740182f548c91ce4be17734277b10375d28285355aa0b959dfe00b49aeb5bab2a4ac5ad2f5a0dc534a805cda141a88e48ab99d64e6e005a751161a07cf8da453e011ea3b0005acdc455d56e521960caf8d024df005a8d17f3b10b26806cd258ad2bc618a3c88e6289c91649272891f3a780d07cd92f1237763a41e2ddc8d784115aced82f31c6382d0db8c4191b469c53ca18658c53ca18e39c527e15689c94524a29a571524a29a594c6f918fc199f0f3611279cb40e5c4ab5e29422b0f19b08845f713fc5d107164ead464af835207e5dc0baa593aa091f7baea307fc817de81dd522fb7319d8928d1867dc512dc37a7f9485a1aa5f6a07b4d002aa1c05c41de7b9f0bf523840d75bb8934e64ff225eeea4119c2cb1a75121cd01ecaeb8498b80e8338c44e9018f26fb4793615446237a54a4c1c91e049526f4f53e9aa7e18834220c020f8868b2779af6182b745f1340cb2cad096059adaa276b7d0755920937f5b8c933c4b20a2b8d0871433fd28770e26ed1418585b85f951b001089773367b5c2a4b05f208554ce08219c46788eda02608e31bff91c0aac5ba4c7fbde8befc5f7e27bb2cadb43d22a639f03b2aa14d7d6de68991b306eaf0faad5c8f8c36362a4df41199a282463e98f1ef1bb5ef970937fc47928fba1fb70446d597e5d2fdbfb70bc0823b84c9f08244e59f4985613c2ef54070bbf3ebcbe4df531ad46ccd96359ccfc759665d00a610fe1cba5d9a8dfc3c78f2863b41ebe85236cff1b1cf7a9190a030303bdc2ef2ac735ee0871c8313760ddd2cd14a516a516a516a516a5345a2b4e4b26fbecf270178fd6d54307761ebec2e8ede126a7432ce5f1338e4115cd5a0b82e2ce57ef3ddcd1b79e87af204d86a30fa543d7abaf3a7864ebdd351b8e840534a8a51af5e9571c31e0ab1c9b0adb2ba8728748dce47380aa999a4bc01e4db7d0225dcd8ea312df511ed3bd533e05e5e8381ee4015183edde29baa9dffff51419e2eb2737b9e35039d8aefea9f4e00927c61bc361f8c33be330fce517acbffb4c8c18aaecef83a7dc4f1d976364ef6ae5565a6c44684b8d3fe3eff0e18a9b2af76ef2c745c43cb10f9965c425882bed81ed38d383c9cebd166021d0a1d1822832f6aecc19e698bd1adb501801951b8a229cf28bdc5010c109199bd9eb29b20ed499c60a929c72671a2c48e231251a2c48d22d7d8527deb044766e48f63700c9fed1659c66cb5e2463a2f7ddc20515cdfbe706db82e7b6e9e3452ac418e78c6fbe18e71039627519e823e6c881751eeef274cc7ac3636eb8e9d9648adf4f804e9f3fa71131e370d3e3dcabd31fcc98d9c9351cefa5fceea13a9563cd91c7bf5443963adf64aec6d723879e18e22ad33411cf788f2372327c3a9dafda9faf82badfc32084d0df0d7cee04db234758f3c76a551c218c0a0802139a5508d8cff921ab7b796279c6f746b75aa177bb1842a84298fe16ee5eb6bad0dbd1bf0b8aa24c09ee78644f08d7b798da4dd8cba769b05384844fc66e763b98c74417a37b4672fda9d53c21d4ba44fd2784fa9691fa55aba940140df619b18ce4d61ecc0e6e72e43869bd77be8f0f428804bc8101d9aab1fe71eccac325f92f1721b38f98ad6ccecf26c616d720b6ab6dbb9b8332dd91a6e208c4139c220a819c1b827eb0eec6dec2300cfb73322d34feaf05ca9fef1cc71551f3dec2387f1bb23844b07efa99f598ae98cdb2eaa6beb6b10cc33a86d635d65fb7a671c9fa97eb43e08626be90197f7092a00966f88256238544bc32398f37b9d6190419a194f2d832bcf1c8b47bf6ec497fbcfb807c25029bc489347e406e7a2b87e1df710fc81d7ea4f44750775047f8feb207ffd524444774e0e1d203de113436fe105be8e298e866c691f0e700ac5b3a6b51f9da6bd826e2d0fe275c71993759ec06d1d9d42ffe6e8bb5d2d2d2f2d6ca4a5b9cc77417fdceba893bd9ebeb4fbca3becee6f6b72f422630e10d43b69dec170f0ef6f3b22e11f8f382e069a628894c247eb7e8fb529f8738fab82946f18d63142937e1441f87e1291ddb459fd4c357f6b41aeb95c05d968a3e10c7867d452fafe85baba93e9ef279a9e7e331ef1f8d67ccbee0f9d3d1d1d181c25edfd3d3d3d3d353ba314befb3873d8e89619f619bd2fb872e6fe337340f035d3efb6f37349d8591344db3bd7fff0de8e24538a06968d8ccc0127c2c0776e253f6f3354c0403a51afda5f74d5382b81401edb1c741fa93ef3fc1361826fd0d4d864b38e6633f714ce1d2031e0df68f067b6f81b55f6abb933dca3fe0e4273e621e4104c7fc13943fe2a4696e8ee873638af4da8ff2cbdb738f33ffe471b247f9526f77dbbe7fe3b00d0a96a7b739893e37345876e7dd62d09c1bb6c9704cd164ef2d0afac59f84432f73baa14b0fc52faea1634c96d0d1e74555421d4b47b50413dcc529b27b091e618b43d88a98aada330a06aa7a2edcea648f4e883ecf057c446c175a224fcb867eb1abe762a463d9b07a33fa8d003a07b27f5c858af4581ddb44c78c5c607deccaea581dab6375eccaea581feb6357d6c7fa64ff37d2e917b7abd56ab55a99f4c82723ec87427d5cc334c931313131c931c931c951a9542a954a05fb89e01345f84411becf118806b5cde917947c331a479fe742092de3e1e8847e712d08cfbd062b2d0abab80cecf59407769e46e0f3669438e1619bd32f2555a55295a828105d79cc14afa2e8ca7637f9b2195dd9f79da6b25ab3f1dec489d28de893e364b0263e263d6e3209f19414a9d4468e2b29b22a2952247be901f3b1c7f011d88ec5309112ec4c56909aac70fc61e353722a39959c4a4e25a79253c929954aa552a9d46867b433da19ed8c76463b7506dd68e726aa22505cb58c97ed6a05a135cdc07654b55a65ff8a6a19aa2a828e896b68530f949938fa4c4ef55ab4c81d5569b566d6621c874d7ab2bfc7d5126ca7a94c82b6d386da72e0163a411717d80b77a1221665b20a9da0cc7cce46dc994c262b2843551077b571672b3659e18ecbd46485eb09baf8479f2862aabb52d408b6732cbdd3c3893ef127469fa7f54099ce6a3d98112833bf47833ccd73a5341594b144c8feada9de77572afa5c3f1ed35155fef198ee4a5da99d1c6314518a4b8aec8f49558c22a6a2cfac794c148132465a06115a0676b409da043a052dfae4d7137d664755aaec035da80af6e087fb7d0da248281055551fe8e2fff961935577a5a80a33025dfc291d6c67b24a65efee9918c953347e4c6c3bb90180848c356fe8e0ce4e0ec2c9fe4f8921d9453844ac962e16794f091356b3fad877bab3f5987eefb770edc6f1bd7bd8de6eebbdd721f1adbd6b043de10f9a2392f7fabdbefa5ffa8e9bdc95a8d879dcf43e6222fde21862dbb8d62136be28e59c8f02fbc34dde397c1c206e823c50899d221ef37aa795f0987e8d1fce9fd460bbfaa7ec43a8c8dddb793b70470d36ee5418c41d2a72d7f8e564f78eb14868db20e44c27df7f7262031fe2ff199f4f04ccf4b9abf2ad71cffd7c19c2dde4a6c4dccbfb90cc4079e173f7717703e1bc2a4fefc6fd43712350f987c463b85751c1cf7a1095cb51da4538ef4fd76a26862637e549b773ed36ab66767b874153ac92b4c7a0f043e226480afdec48a49fb87b4832a4282bfebf5bc6fa6ee54b18c664aa3c0ccc3214dc5514946e7e858f82f2256fd2f98019e5afff8b05c1aec03cb26c92f225b88b39f4ffa58b05c19aa4fc150a6287fc984df08e146c22ff49ffb88b1996485fc2dd033282370305ef20bdc987de351b2621159427e11d524214bcfdbcdccf78b67dcacf8b812def809ff218ccf0bdf55a2910e59250a0e600fcf7a15643c2d54d105feb6615baa4c8ea2693bf17de6ecb2626ff342052de84f4f7e287d704fe8c736f72af2da770dcf7439231ac35120ab7f110623e0d3d46922892bb7ec629f6d787304c5431999d44ad66fb181e63f26ef2272b6f72574edee4bb9a77f812f891e521ee567c89c99fd097137b294d1ed297370597b8872f4bdc939ea2a0a0e012876934e9e5873a1e213bb98d34e94bdcf1d848a110096340b0553e77bbd05f2489e78b52a4bc2994621e9b48e21d2a4fc23bfee546318f2dabe0ff0b7bb943e925ee58705c817dc07cf225787262322734a1303e6d0147d0cca44bef0366135c2a296d0f1f961e33b9312e8c49c9b706c40bd26f3f456fcfdd8e47e61eb6a34cf8baba51ee43f7e443338451e6d7db73fb8be21ddb93364cea786c79c6e96f127b12e951707793519ebbdd96b9948736c33a1f4295d05f9ff23585e32e8fade391438f4229de219f843d493e494a794f9ef4dbed1df4499307cc1d7dd9857690de7303c1d6dc0d91bbeb4398c79649dff1d8f2c95fa497b7db997437ec4d6e8f6ef743bedede8e47be1e268608dbb2112f636300820ba090b11a249817576e797ee723d3ce26538abbf93049582c88171f0ad110fdac6931cb87792153fffa9ab98cf5d74bade6b2ea00296effd8838284dfccd8428526ceb044ee277237618624191365df2d3844e867d557fdda6717044f4364cec7b07f384f318c9b62e0873a61dacf5bffdd186e721c1887e10f82a789e1301a8b8155ccc357b961609264ff172f880f9d459fbd089784d81fc08ac666002b1ad1674fc77aed31eb5eeb3b6ec54df6569b02fb390ed33d9dd36b089872f76061c891776a191c687fefb1429250e86188e4a793dfbff73af0859fd3f2fb40bbf863f7e1f48be377eadecff37f93de88d1e88c7d109db1bfc93ff2bb9a3003926cdde43781e4f955febc9183df31dce4ff42051626e778cc8efb4946898302921d06b683c90ef3c2d4e28a1a15275407e554f6b7c1913e274629a5f34d797fb8e984b23fa0cc8906c12e614b1ddf29106c6bef5f0e8470c0fcbbe7fe2e2b633183153ef4c65d6c8c66b3663466ccca2accd895595876611a10fe57f518c737f04912cc5749a0aa633b5905fbf2037a12a85be531ef6380242e350602cb11fbaa5f7cc6e90f6cf58132f051be4279905c798c11a99248e4144e850cec146e72f715fc19870f77bdf25596aaec9006e2e9035de820550e060c87c8ec96ae5352bef7efe44f6cdde4729301edd69265b73ea71fb19d1d01f6bebb3b76c7eed8dd1dbdb33964f79ecab550bb1794fd0938e464ff97a4ba17f1c7448fc6bbe38b2fbeefcb63eb6abe990fecaaaec0bad32146395f9c71f990c01000218430c2286184503ecd72ca18657c3440086badd59dfe941e1d0b50b6097e4b191f7a13f1b19611c61863fcd732ac8fef6f46f6314aecd9b30cc62833eccfd21e1448149872b669bed46ac86fd3b428840f65667c78332620457ef3657e9d73026f866c1713b6cffcaebb90df7c6849ada63e26fd8542f4677cd6d910e2eb062f65f6a69413bfa00e5809a584504228055682b05f9c066210c2da011bd55d50811675c3f91e0f30b945ceeaabb1f72165846ab0f2df56f8104759133195136746c8eb41395029a7acffb41af12b8e73ca28873957bacdc6ea2363185f16e406604009a18c1142286384105a10ca28659c538918bf4d32bef7fac3e575414a18fb254e19639cfe016c9335463a5db35836e7e6e25f07291f9338ba4946bb71fe2084904e06443360ddd261a7ec8f0579107219522a9eefc046eb0846e78c345e2be526954ee6c4e0689998822e2e1355d0c569b41031d7bf689133fa24c645344434740aca4019794ac1518573b44c02792e5c027933a815da85bf15b2cb535cfd9c388e46a9d55871882543bff895cd6b3709e4cab924102ab14cab81265b1603bac0c0c8b84158e3632821162f5960cbca792efceb953ad02508cd7933a4a42a49237e5716913b3c01572ab348ede023dbe14757c88abf6e4441198a12e58ea2e28ec7481e378d56cf857fcc5ddcc916be5b8e8343cfa03832ba1a072d07ede29a0fb21be9aa4a53c24d3cd93bc9a301d172ae16e46a3a5a12daceeacdd044d02efc3512647f3b5a69381aaa5f321574a1387f82bbe7386b29c6c90eb3a70121f2f11820790dedc27f94d386921ebeb51a17dbc36350ab110d719303a13d096374d5329e8601c13ead9acb632f3b59ada163462a6ff25d5df9ce662cf26841413c5a108f16b4899890d99ca29eca92440b12f5709dd55892d8949862514e50a28df644d42312f588aec888c8888809518fb662c11a901602e22c27b256f4441156b9435c9765166761696d7bcb43c85a1bad8d211b001e4221ad46241a05b989524affa568359485e3fe55aaf598876c3c89027893b5a9167c62b7bfbebb521bcbed3220e6875afc75e5b3dcd0d3984546443d1e235bdc50466f175339744f1e5e5767d782987ff2ad5d6f04ca9460c808e9556a257d8af41dd783004c0188285c55597ba55cae688826443761bb2b656bb52ddf5914e96b8f25d9af3d3eb99ff041cae61ea09cf26fbf425107a05cbf26c1f6705f1efda5d560981515f1181616aeb3cd5d2996efe131962b2a72453c2cdf8978b2b3fc8c8f46cfe1aea2e014dc7128d97e6b355072fd4cbfedf6f4b1947f9a7dac51be6f50503694ef38cadcc47d77a5ae54cb9822c863465460270ca7b59a35aba13c776f32ca6b5abb09059750be73d79251f0bb9dc206b9c9734adebebb1be5cdf49d95b77f2d335ad955e6a694ab7eca8dbd424179d368c5c36885f212af322d88cf299f92f2283f7a2ce5350d0237342b8fbd6c849242736ab0c814e5a6d1d3d08faef52997dbb6afdbdb9691fdf69c56b36935282f4a81b886dbfb32965d227a6c9f690b18fd76afa735ea5b6cbffed31850df3eb65d9a4383584c516ef28b8897538c783905d32cdbc972b220ee8204db8d561ed3d95190c7ecb05fdf7fb46a1928ef3f5a43cbd8de1fdb2e11a2ed53de5e94fbb2a62d60fb1a94ebb67dfd1947b99d6d6ae55edb35e2658baf1f7fb163a8bbc9a588b324dca403db6ea2405ac6a8875cf25d0fd7755dd7d36b2db1c13cc215c9112c29347aee7e9e8118d6442c7df4bdfd41184b356486f9c29d0dcbeddc4311321721734751145f47dc94ea97ca841a98904929dff990493032e925935864d28a4c22b54c556d2d833ee9a393483fd26a485505652e31b48bbf0f56086058a7971ac42277576a05af940a5f17927e3182ed248fe4f1982e5359d4122e87784c3f41049dec2f7da04cd36cb9933c924754c4631a0a2c3cc6daa04d71871383e5427616df89ac9085641f410db23f8b9f710bc4655456bedb82a8605b57b0bdb42d229193afa7b47b5264edafcbe3ad4641798593477f9d7c72f76421289be47ee2b4443e4d714a92551ed3506c0149f6914f0782e4ed09239cf2f56d2f26dce43d4546f73a62a55650e64a824272baa4c0b097d12fb9dd4d2ed1a870937b4c4abe4656befef5f56d9a1a032e7c39b1e1cb482d82dde1e3e58ac44d45b03bb6af406eaa44b0dd68e550864a35f285bb23f2f5d7909145d92832bd7ec62d0a49a64f37fa3195caf427d327fd75a340d180987ff2b188bf552eb9b148e431624bbe8b3c251f870cc176a3554949c9d720d8d0096b415948ab71fde83151361a31e01a8dde889747b8240921d8ebb5a0556e19a3f7c7aecbf2a3fb720d824d79ecd21660b51a19f6e9801279fbd13f8d01db1d51518345def068b55d515c235ede7049126ef2cba7af29f48b5fa9256c575548e4e48ec75be592d71e8bd9c99d29a33c1afd6b99a6e9b87cf2974f14f49e3cca8b9ca8aa94f795f7bf8cf8784c8faea73c4c796493af1d538a3e2502e6d15fdd4dde2e26ae9e141ea6bc5ddbed7c31e13291c6e73def96a1528dee889cb2d51fe8e23c7c277928eae4a28c469f47a63cba469f0243514db3614a730aae477460e95f4f51a9767884a2a04c1e610849150896e21df4477fa1dc2ecb278fd12bc240bcebb137c227273bdc22baadabaa2262cc2996ee2161f13a2d89ec3f01f03b3c26ca3400acf8191fad46539424e1315d44a5e54099873b2e53e14ca593fdb524bc2ae1da1027a22d31c2022a77d714a61fd8ab22a17fa520bd52f4c2555581ae54553d1a875464771d7cefbd8edceb07a2aed495c4f31c49bd4cb5e25e47dcc5adf5a3929211a594523c1a5deb4bee0ef84ac5d415b2f274c56a35d663d60d8fb92a7d1d50c6e4e9f780322b4fff079451797af2f4df09ca947e05b52b16997ed792e9af64ba65ca0333fdd733b4a0e7c26348bf3da5b8e3e12becba37685cdfb58f109714b9bb5255f533d2d182de0c914f0ab68f27e54bb4209781fd920dba231e913c2da344a4d594608a52811cad72c888c8e7cdb02c2829229fec2123fe16250a19c92eb2a8ec5fba2b6e89b6bdc9969968db6f5a109e4742b812702f6060565e45e51f8dca8a4ae94d5654de69bc43a2745f13e0e49f5653d22ab89b00277f52f25ef21d45652520219f7c13cf51f00477dd4412f2c9c78801036332fd731c0aa63c16b914ca4d3e797fee76bfa09ce078847421900b4b4618a2ba9842953ccda8e463aae476bf8c704cf970441341540783647f8da2b23f96b228a66935d6bbde0f47dce43fd3c5d495ddeb478aebc80c6c1753f188c794ac4a46f23d218928ba8c7f77cc0ef781f5ef1ca3fbc3ebffdc91c80f5651c58cf01ae179e2d7a6f836a0c398035491dc5084802797e4862204467224d2e299e658add765c999f87c70933bfee1e11f288deea6f143f654fb8cc616ac865b501a31fe0c0d893dbdb5621afd6f86c6eb4763a67b7eb8f046c3639ef53334ba87c60f788646f581edba27b6cba37103872700f534b3feca14de49baeec9af3506b4642153fee02e3e53c476f5517901f52ade0e36fc6efc022686bf7e2f623c4c42ece3e5d99debcc0d9826c134d08c1ca68079e1440eecc8f4aea90df67df72dfd2287cb7cb7698da5603b18cf302f62cc784cfc8186c774a9bf7334c58079318a179f606bbbf4f78fadbd9a68c09a005c8f490e51702b2d44ef9f0dac7c52bb080205882bbf1fa4603baec71463a585c7f8f73bee7e71a90541dafaa56dd77671699b89b0c9ef473fb8c412f41f8cf7d8832278a377feb33fc2f797fef123ae6ecaaaf4ef22ae2f7b2efa6bbfdc1087faa5fd4d876390431230a17ef11d587fb863615e0fb0f9dd22c2e6c5f9e1304e0e0387c84cbefaf56b91458f75848fc6882f4e0fe687297ed3c7f164ad9c9e85dfb37193c79808fd873fcb87887f9c3aa8dfe6d5bc0fcaf11df3857dccfc5e08f6339e63f67de325e255116a0c654a37b49fffd7534aaf6bdd8655470e39e064ff0bfcb00172e16e887c7dfbf0be722ba616301e435ffd97a32f60f3238767ffaee8dfaba28a2ab290afe863e6d047cd46aca28a2a7ef285799872481472936fa5f835c7c7e6fbc77013f6ac767777777777ab5ffc96ec19c7bd6185cc1fc2747998724c16f29b1887bbf86343e4d0220d837d5a0e08abf54e22b05ddfc0314435e5feaad94889620c4028d5b8fefd85330c98b2106ef2771f1ad8f4b2176ef2ce843937bd0f9d653db596e5fd57fceeab9bebcd4d6e6decc05d3d35216ef2c330396cc98df766c4f77f66b031bceb23315eea86c7c847fd78dd2eba3b0262ef97fefeee8995a5059ed3f9c94f52647fc7f996170e848a3e7e4848f676d46d4b4c36152a1289bc34bfb3ccd1791fb1efe2377eef7977bfacf1cb793a2f072375773f9dbe4f27daeffb744ade963ce9e944fa5d7c9da7e326935393276d6fb26df04bf4238d31b6b8c9fb4baeebb829889b72dc14e4e5b8c9ff045156c74fcfa5701cf79315ece7ace2bc9cd8396cb09d6fcf234fee87571dc7adec5848bc1b381ac1ecd11107268698402799911226869d5f5b06fec4291f3745218251d8e793f25414299f58840976fa3461f6ccc422aad9d33f3e3e3fd3482c7203079c6cd00165204df70b0cca500794a10fdf57f03195abf9035d561425a7904172357f22c452252da9aa98c320391ed3c9a06ea2320a88dd5a6690ecdff2e77b10054f10870898212a7ef73044c1d309a23ca61fc48128d80049678f4ff697a57e5a24fbcf1b1a23f2e7e3903fbf7fcea778eecc9cc9a393fdc644411788e78903fde2df32a89b335e1974e7a95ffce12eea58788227b972131074c181ad993b65818e1d558e3800c9fe17a8d94a92ee29dd98dfdf3966aced5382e7ed48f9761e8f03decee3f11888bd56cb358f9b76fcc1e6e977b26fa7b339c7a9c5895c8ef7ba9aa3bb3f179970c0e0c5e11cc63b0cc721321f7e0f7b7dc48c45dc7d9feb8f5fb995df11f1af5c1903ae15a8c4ecb5c5514c199a110000001000f313000020100c888462c18044228b52d30314800d92aa4e74581b88418e53ca20648c010200000000020020001a00aea479b44def00c4f69b254f7f07edefe4d0e6df81562a6b9d4b33982e2ab555d6cbcc582600b5037c599b4ae14bb5fec30c4284983bd87633526644fd3e7f3934b5640dde458822fff963ebdd9b2423ee588af07dc95568e7fcbcfa66757f4ddbdf60b394ef4417c4cf67526dec96288369dc21c0fd0cc3a65db381ab449cd635a21d5aa58a9fa76eb5911a086d6248d500144e2e7f67e1143def56d1c62db94c266a6fe8b568249dd40dbaf32e9aa0121f87441cb6c2cc76fe8c674cb770cab4ec48269ebbd8a60213e188c7e2901b2fb4555de642fec5844b19460117a9deaf076568f85cea80331fecb508fe67a6e6e80b4b044fffe6615a86cb219cec3dcdea180b22dffc8b821dc8e0c3e9d2387aabc7dfcf87c12979c1b947af74c4c576db60ac58a2902910acd6d7b6da41fe73500c1865c95b3b0f834ad4d73f5849a0f3acde968ef9ce43a72efc283dab7d5aad8cd41e1c3389fdfd831e1889c905a1776d0e5d51eae8272cfcf7ae4756cd97e478e1807222b188141cc8ff3e84abb00dc7fcd6096f6e6a7ae9ef0302de0e889bd24a90fe50cda9834ad5ea46ad5df55ffc867ddabe4fbbbd915fa68aeaab9903263766278c7516a07983b7ae2d15a6a3ee87ed13473f7ff629b6060af1674e43763e6ee2224d03a7459f63e6bc19810e0e94ea4e3dcaa8358c4367ff435b8b5ec0f479b446f3430ca929c57b47d066240880637596c6a68b45d4f0d89f1b90c4fad6e684cd522da5ebbfafe5b4bd7b8a6b1970923e6f13de07e5e4007383e8d8f8a2deb93abdd8c76b6cec0f31e009d65fed9c44ef9c161954c1730c21a11335923ac27738b99bdadf0614143a06d6e1853542df1dc0148f9426ba0d61fedc207709cce0200f69eda4c8e0f31ef03113b28c61c7c4b0a973ad6cceaaf48b6e81a5470f1f2f720663b95c36305b3b401e9a53e6b17f59c2258cd0f005522ea613573869e9b74b1bd2746d3dd21ceadefcca40154d1daf36f4c824979ceeae92edb8b42630e793959697d318d84aabca76d9780af359e04c017c4384674fbb5f20777cd18c64d55cdbacc528d5d1cc7ba6b49a3a11e6d7d933c7444f503854cd33453b4776844537b71eeeae1c5f1080014b82d1ae78a4a14098c4dd1b13c4cd52f3d5e7c8b9d35830ee86f1f1c23be1ca11f77d6fa69b9d8a78a59cbf3fc924b810023d3456f7411d1f54fa41c37f5085552a9f8fae0e0eff4e0ca092e7743f104be97e4094cc4b018fd56c637f8f2a58799a570d2b8cf7ac6df87b2f86c56781d6ef41359ea08def841bff2bc1ba90b28fd810fad56852f08a1abc29c2fa467381a2c1692eae9ce24d72ab70c3ad261c7f93aaa03ca73e14cde97c32aa85293723d01d476c9858339326bac3f5bd708fedd644a7837db39881ee4800c4df9eb728f97061af6a63326f9f9a5b1b47e681594ae3803a98f0144f2a1234d530edc244acdadb19cb9dc57f3ffef5788d141c35c4f92f9d4abfc172348b140a883039d6d6f89aa0b06d28b1bfc79e3598393fb83b90edb4bb751a436afce4e59aac24b4d0437c808338d8bd8f77a1d4182b1f44e9df1f7aaa0e713060cb5327cc082c4a4a3ba38cfe2a5c69961fb1fcee88aff4a79fe719cabbd59e1448a8e1a77ccf16f2e63466d3c096b30e468f1e1c9050ec5bfe4e2e56b4bfd53afe24e9e25f406afba066ca9ccae5deb6d0489328c6d48ba95b56eee3ad1cf3795c2b829362fb92e119b2af6f8aac28b301b4510d0c7476341d8c4e6c7bef4381a8bf0ce97182ec8a281a1d3fab64253740097349f5f59beb4029d74aebf37768f79703755e8d0c47efa401080e992000582b72e4960b41eb1a8770c42270a1cbf30fb1546aa1302b465ff049f281f56d0a891018f3ed6d5d7bfd5c80dfb2b2d45fad9b34c31ca5d07cb696002555b54f94e3dffd786bb67e73fad1a19cc5557db029d55827f2b97d277a3d730b16c0198d4e74784852b1f09b62285f96afe000364672a7be1dd72c1a6af360ead1fccbf6a6c0eb5a4247158cf1f234a5e375dc0cb213d474049ef84ac9455795883f98af6bbc9af190c9d9cf3de8038aa0aab2ac7638ca8ae1e7d5f8034e6c38cec1e840b5069ba7edefc0334e96ae3db18cc94b037e460666774790653481dd46196be111a04d1d108011b64ef13a9a107a2e0460db61c8207c413c70bd44153b7a8e9eabec480c41e7b2370069f92ced2ed04670138388d9834ee34b7c2608bf4e13b66033c70fc96009666ca0882ee0f26cdf29601f2e8046a2b2aefe7f3219de62d59e29b260f7da4f00b02456ad506b213b141b7e52b21d047a0775a2f41c1b0545e2ce9b64e6d6408b3b8d15357b75c9b864515b78d3572566656bda5593013d94bf9e74bce95e9a6655ddb4bc92c167d15dd697d7f0ec1d99a59e2ba12b124cccbdc5a1e84adce43ab7c514c1fc3d89e73676e69d64375c0e142798800ceaad47da39d15cb2b8383fa5d3b41a5923f991f7762997ec1abef1d035ba50b7d9d4cea5c0d24298e4ef3e25906f44647d827cc9636d61574ca0205b993388c2397bbffcbef31446c4e42b31a1f4dbf7aae8f7e0ce79d61492c82c30ad211037cb68a2f960570003b3c7a08a3b2188bb3ae979eb7f577a38ce9f640713b128ac8602a5d28e546925685f971d68f69697e71a6760a286aa1905ca81a998da40195a1d88494fcc6ec199eb11490a8335b178ddf37cf8d560f8d4e450ab08f8d73fa5a0ce3053f439acc8927d456809cad635e784e7e1e7fce9540f293c8fd55339584273d8db3c4f8d160b8c625598bcf34978bb7dfc450c0ff35f66000022717710dba5f0d140146b2da4edefadee201551e374a18be416596d835b0b8fa77e0db25ebb6d87367ea18a498265ed727bbdc792f6d9ac165b178358a74bf91b33c3aa8d3a031c884d533e806d8319cf994ddd1d5599fe9533f03a2ed24cab0d24d94663ca1e0d4d62c76fbe66b7662f2a6b7ba19408369151d1e1a4b90a861133c6d26ad5a34d78288e57cfb3c13a0a0076dc8f182bdb90691568f6e0e1fd29a3612c11c2ad67484039f4a5865001709458a7a2915ddb042406822e855cc0a93e2eb7afb484cca4204fa911afc8da54cc02468dab707ce03867f7d4705c80d2c5eb2e1589eeb605cfe3bc1388e3db7696708177d2cc3d8c587f94ab489ae9a66f71fcea96441630549b551e947c406d73e859957a000d7438a8c7ac355b3cf2d10589e761d0efbcdf382f695cf0f35a6b8bf206541788386f43f8dbe97441ac5fba81d706e0ebc7960d6e1c92f75a51d0656db29a60e20051715f4d7f772df77131b716944d8ba342c2f064719507995b35ded3ef6b7d4b909ec070275d2426a7da3e24184a92b7ca4dbedb88602544f8c4ddfdfd3f09f8e30b291eb8dacc6edefad9d3f91b8e784266f3dd68aaf2c848d65c2229460e5cbbd473b96dfc3dbd6364c40235d140ea73c969eaa2e45a7e65a06aaea307981c1514b37d338f2db43910ae88db96665c85ea95351bb4e7edb2c3a79ac3f3818db34fe850e53474f38644a094b10c01b634439f7272695194c48f4e81847d4a7c1161de37b425ea69027f6fb605d315f9282482ef9c3640f3cf97fda0f9864e9ca4cfadb1f860a75088595c3a71b205590286140e2d1c228ded288369f357dca1333b49fa4dd57a04aa5233166b32f80b5300f780fec91e30be01f42bfb7f2d6fece4590236ad9fcd4b415d8ca6d145aae853a30619c9e68f415ff256b9a06a5b58df298ca1ae08312b0d4cad2dc47334b81cab66273893c44c827b41f17aec53cbfc457c12d914a171ca1053f4c2080a7438ce6c0b40c1c4d3044b378cb62c1c1b4d2a51f41515ba437012965c26d359b1613b0e3766f3e011de1a5513d209808b403e46a5d2b9e434f6d2dae510a8b3c4da8b248da2ffe2bb19e17ca4e79f9e02bfe37949893f1c313bee54e0fd79115d90cadf5c5775c15b29a1d8575f9915547e07b869f8f5407a2d3cd4bd025c7f70e455fd423a1629b85e07985fe8b7d46d68e0c4ae67060500bba098a66f4ec79d72261b7607fdf1f205c61dd5877b9dc2c67ab7392fd7468cba3cad7363fe7609f56777c2573efa87407fb2c7f1f9c4d1109185153c77d26c626d912f805db00d54f421a69913980616c7f9ed3c10e7c6a7ffc437bb4b817f569dcee4e6b48b4870ff8da116a4a6f40acf1b65f8acc0c486b1e490ed6de7f66b6b5b2eb903644fa31fe8a700abf395d3081205b6fc1e72150a8499c6f5d670d807e29dc3e0e0bb166b01de6fc0113aea25ffa221c1ba011bd59488cdea046d052ce498c06135ff0a12e7aa51bb4d908e15496336552276c8a117920513937765693844a064ff7860fd85032bb9d87fe20a3a5ffef01df328153fb6ae5a316b45ff9132143a831e0cd6e785d18f370e7aa5132aa7d1d0b853b2526547abfb8b6162cb2f8cecfe41f5c14fcef2e51624d10bdbbe476828bfea4b08aa81c9391a1ee3e1309dc4ada97f2bb463d6ebbe31326876e63a6fae3e627c41ba2e6debf511b2369af2da550fc758ab07bffc3f8394e1fc042975deb369b5963a065bcbd4c885f1465a1ae1cfdd1ae9b32b10e16151d63aa01bf46d44d2fa08a4010433d82d0aa17be052eacce0c95aed848c5348a87024c2938cb32b552b60226c34462e1e0c28a781a6077f1d195ae3ef1291e9a53d4c7753a8abedcd39a40a98d0257b9ade50daa122b1862a2c3baaa904ae2498ac9afa1e0b188762ff56c9f55f7cc7f6a33c4a173b3f15c019793797c9ae819aff2e07aa60f3baf9fd9b5bbfc56ff50f03ddf0f42d7dce507e8e4787fa7f00e8f2c5409f24d137dc26e46392023939a827a476552175563dfdb6b5bc6348c65f8d7712a017a32ad764bfd18657a07af2157c0ba91a235fc7a5142be79ae6f1a1ce601c27bd361c4a073b91cf282cbcf7aef9222d9b86c85c10a49dd30766015900192e52cfd9ec54ed3c2058895bdea330897e6d02d11ab660279de8f7efadf1c2acb220cb8e1b4b2881475fc64a144b46c5ad604ff322e85e7eefadc6b3221b47ed4aa2dea780c40004097383f27ed8e42060af1249ac06633c8408d7cdbc478664280367d89275e6b1f9a4afcf9097840002e2e259d784bc6896a32083bf7a3e78f905a04a607950a3000e215742e5e8fdb7738d94eaf42d5e27870b850e8fffdb3accebd2a4631c6ac5db458d55de0b699126ad2014aa93a6d102f78870ff32a642eb5701fac1766c1a6a5bbe48dbee3ef3da396d90c79a0c22d317d9171a353d4d7ded8b18f4060394b2f6554eba382de6b216ac3043e1504a3d8496b9a8abbab276e20d7b66d9aa0efa61429b8647e0b9be88086ac65f5d44298e11c0250b1a9c604c359a75853ac9ce7c23b46f8bfecd9d40d04174734900e84817542d21e1d6f8079d8d70a84d697cf40c2f06426cb6c57d6010bd0ea624b096e398bbc9f5053396904c68ce3af2517395eb803bf33ad277acd3fbb61945b183df303119556a400709338f46f79758fda4feab8226d8619d326005fcd162893a99c955431fc20a509e9490407fe9dc2b646a4406d36bac5d0f2b67eda9eecf4ba3c3131f104509287fe9ae2752c7dc13369e59460ce884d0818e19ea778d1a4c8d5a4b7331c7d9b9336221dcb85c1876eb49a52544ca1cdb7d7f2983ea755ee8a546443d32ec36f3da34eb4170226dceeb6c6b29e04ac6267d75d823d09bb56739d362a4771dfff4b626ea7d6dc5af101c4e99dc63ce9a7911d345bdc9fa0d8b90cfb87500226a983b85a5169f619ef4dcbcaea67c2caf27050a7488a2df5a14b0c770fcc10f770841820ae882e1f7d3b6994ab60250a6d863471e2e97154c5a67c1f7088de0f54cef3b35ef1074a0fc7a879c9393791f83c339b151bc8264bd57570e1d48cfb56592545d8b3f8735b7a55bcf8073d17b2f55c3b011d369c8accbce8cb3bcdff0a99dec027828f08ff9badd7835b7702d74de3f989b1fc8c27f944e835f685ecbe42a0453915d7c76cdd373f65bf2955b54464333f25710fa3b227f2bfd2b39000833ec99806068a3dfcf07c69d4967da8ffd8f17de53bde6c8338158ca1e9da8da565d64378d3d797b438e1c9f73bb61cbfb3dff66f29f803d0824fc6d10c4d8ae750e1f6fc409eca55a8c6d2d09fb5569c89d6ce3370dda943565049b4cb0d8e23c2545cd53d70a35b03b7b6918c63630acf7b7f4cefd0a760b639912c445686e021ccaa471513f4109d35f36b3887eb2f9b74f2d61a54aa82ebfcc6fd380aa0d05fc4d943f0ca8aafa49e88b7d837e07e9b3960f846b2628fba4b521dfac3cf99f1ed8446e49cceb8256c46c6970b174dca8910d33102c1fcae979b4cad5daa701e4bb4b162f57133c4051b4a521ce389e93caceb591fb308c619ecb3b654c114d6e11f300edf655bbf944e1961f2b9a6c924bafe80803c6875c84a7febdb66a64295414ee00090e2707a9246f4cb4b4d4f82dc4a97ddbc6c586eb35ad19dada6bc92fff2bf88443d1cf03a0fc13443fad5fa9180c645f1af2204a39536b6fe61059fb68edffcb81163e2132c16f3c627e7dd27b2fc984774706c72814de79f5eba520ee939316d7e49dae5904736d4914c1fa2fc4ab5b741fe37bf9df0d9ce0fd889c87dac38c0999fa668fb5050373239279fe899c70e62ced8e89c8cf2ed1a7c15b8a259d6eea003be9176ed37889bada688b3579f40666e0f3d0f493ce15d1a4604c1e0d5290ee64cd0bce2c1be22e49d8d28a05a975b554f4bbad840e3b83598a7e50618e64ddb829e0b50e9eb992440fcf219cd0b2da7f22aa648f6682d6f61f4463465e1bf488414904b56f10c243d0cd02d3063a5e3a22112fc2b013a24788240cb8a2fa0dc5ade38f93fe078d3906b40686ff4158cd388910934820b60225b1591a0961ed2bc22f73c4106ae8aff9d619c9ed257ce3581bfe772449f0c4162352e4c78aaa79fa5100992e8ace3cf61800575be8a87a8148bba303d6619e1fa7a8a5cb30ff9cefee3cbb25b868afcfc85a025ab437bd47d4e9a657115a03e10b8c6d295654987be84916fe5f36f48a5042d25e7d71555ac3870316402ecc0c960a190f2695708429a27323ad84e89587cd38d2a076a039766ece47427ef456c46ed047954803e591c0ba19ed719041c92de4b703125ded9bb6d7e73524a22a9937633d588c8cc604afcc3d6146a0a34393113eaef121b96fa3455441ada15b22330139b6fef06d516256652f64b8182e1a601628cce9754dba6b862283d2baa669b3b14a3350705193c399f26f80271d5268decfd6688424b3043eba2d33d02708099c9198562da35529d78fc2fa66566f616364cc3a233cc24a6445357cc0361cc6865aa8ea6b6d6935a0ad00b51ef12445214baf03e541a1d92fdf6fd276479c331bd5ccd5ec44c385d9f5ae8b8679c4d9423d82219201341ed18d420f2554a4856bd063421d876e879247e24a88a1094e85f41114c18cd0b72d86d2703b91fd0ab475cfd5b539d09034c49fb0f9bdc2c99daaa96db0c348720fd59791f2aafe96da295f42ef6405095843c770933be79709bcc945f333a6a0c2e7dc1e2a7478cd6d6032418e8b6b04ab0f6a88e6fc764bd620fb4a30e1bd46875df30259fc71c6a5eb8b92b560d75c4f806990988d148da5872a296614ab16c71013341a30062188351032b3b78d2752c855037e496b3953020abfd343f084af8202b296f41d41c68a807b0d9eaa6e3a0dd0c5768f81e62dc54a5039fec01257224a560e2824f202ebb887bfadbaa6895b95892df7832ed993f5816b5930e5f9c25ba27134ffcd0c4a815eb9ec415ead00300630ef31a4210d07833933aca581e84b7b000db3b0288882486f9f0c1a05d327f0436a58b25fbc11a461486c5b0ab7ae7f54ffed4f5fd17fd4078b70ac54fc5e7e545aeeaf8779662bf21b35bd0abf53bf787a6fd77e3b8b4ca66c5018baa6446987f6e22fc6d636a6739d726d5fde618a248f56bcb81a913ed0681ed0535b3cbf4cdb0fcfd8ae681f182326ee0070557d95d2022a15bc9a4261097e5e935ebe7c8a6d6830d161bde679a0701e50ff8a15eb29419af79227ba40e4bb59d6fb95ed1b532c354606ae08a4418f9ae43d4ee4b052b4911bed6e47b1bb82989af28ca97621bb4b5457daa741e69d30cdf052bc78d0459ed3241a87f6a84a246e690e36b2efca307376cee6cd52ff5a842a9df6e243c6344fec54f4fcb75ae7eb52b60bde74f8005861c4ddeceb1226c473c4a6fa26a72fb8e4a695910966c815cc994df54795ad58a4a611112005ff0d9abc930d644fc36eff929942e6bdebcab41f0fb83e48c3a90f5c71df01391f0bcc269de8639b9c2f31e43205af1345071bbfc1acefb8040688aaae146730fea057e1b17d10cd69743f8df2979288b2ab8190992e7bd2e973e01e1a6f6261820ad0a5896798fc3594f10aa01cbe4c998d34fa672a98f3cb7330b6d1bc1f88dc0553b1b3959cce0b469b81aa42c368f385f42d3d019a99daa87fd340f6dede2f98c83eaa2b081e32dcf5196bb3560fb699b3b3470fe29a97b8aa092d2a9ca91ef9dee18599d372770edb483b164a0570fa8835d20ddd50f1cc3c18b837cfe498eeeb7f7be3bc7fdde6b42e3f0441ab64e94bc5785dee6115c521f76ae6da9f090a60606cee4852adb90783bfaefb5d13adf6e6764719e57ed9c4acd15b3edfa8d506c0e49b5a9cd7e3cb63765d95de945ac3227e484b609ad79bd36499553246585a7aa73df58534f2467db8c3efa48940a50ee548b258bf40930392a61b3d71213535b43d56f9ad6977ad3db6f27d0e0431dba2c992874688c8ab2a7019bfa71fcf8ad7a53afe12fd3da943e205728fb5c19ff9ce2e60015b945f62e0ae0dc14700e3636ec49a2304e0c2690b896419b825b68b02374a627474aac86f283d8f4db01c5121da881ec788b39b15c1f38e09e790d48fa514d6665e361e15f770aadf80a13474a421fe437cad863604d585a30b08ddcbd16c44510de65f2c26a0bf51c8db009a9c54207d268ffbf858003e64ade88fd290bac09a039eb8f772bc3c3ac41e70a50181ecec6f1d9c90f6ff0e52c0fa04a3342ed880e38b94755114c0a73671f1fec0fd95a4a43819eadacfc75dadf555a37953c48eab1dc0033dff6997c9d971753e860e7f3794ee91e2771477269fb40ea3982e273f785bd9d063bd772077fdcbb9c1cd60c232254161033011d532710583b3003a04317c96a909fa57292717b5a92289ed863c33cff0fc806725a1c5bef24ba96e1ae32edf43fbea97ef7b8902142980b74bc4d8ed58c3c6083c56725780c3450d8cb5e08a1f3dfc592c9c00d5cf5d23d599a6dcf02bfec05df031cceacac3a41e20f26920b1df8423a4122687cace7019693166c3a6a5f3866ae3e2d35c37784684e8d54799375d42818bdda56b8f49b08d1a7c1b1d61add016c146c315594b78c465709f994d250a20684934a1a03fde06649f710832870a3ed0c1484f623b7b0573d5834282ef67f4320738fdc2abb1bc0aa558cbcc516ba059aeaeee4360a1b9f9f370c2b51cee430ceb0a57b2f06db0a9658da10c0695afbc2223cca0a6613d8650af106070a044aa0a9b8757c2ff741ab4d7ebf3637beb6f381a3dd0f01370d01cdee045e4a294d59473de54803e16bf989fec24b7ce0bb7bcb3b8cc85ddfc73269353a447c9fd343440680808b8ed8321c1a5ee16f946398be414c10732a93b7aa2bde47ce96e6752533e3d0b2e71ee8a6bd5b741d971ccf4cd92ad4f681a3b18b4819e045859dd0ea5c29d06dba0182865682ac775ce4847c034141a638fd4602297d44f34065ad0be9a0a12c657dfff9faabe5c9e6d0a262e335c674fd481fe7becff2a2d6eda7bdcea5b9ef2bd08141abac6c101e1e4de23a1034aaa2a2265caf0ef2227772212b37b155505474be842637e11a87c075310250670b914183605eaf77f9a02d133cbca27b2a5c0d5de36c808d5f0214bffc0dc35d9c5d97ec76e1519e6a5a6b0e9efa5b6e0f7984a78e926d5c57d80245966a74ff323a2486ca61e69a9d9124cf441c1aaa187a55dec7474b4269b937f0bbc3dd55b3063cb177167e9090f0735eb53e909491af3aa5da024c744e56d47117b11772f81465c43c9c3f0c4c223261e8000255c8da8e0c374c3a3b2c36803f2e22948f7f9962998d5221ee4cb61656b5a459bb2410a4e7f6bb5cc682e00602b3ca3cd1dec7006db28b556d85ad31cb2055428c1efb06af165e74028b59cb5f86f2a5dfa4d22929f4621db931597d74883e69a6bbc1bd07310e6b4ce9f10caa4e942ed42936f88074337208ecda06075538401ca5eb28c4638e3b9ff1d090ed21a474594135c24a5f7afe0f7687251d9528717a68440f7ba28007ef936696adcdfca8ed0cf4704dd24117bd0626fc3dbba1dde9bac4098de4f17fabde2da8d327b76b2fdf4dbf6f9cb8e15ec6ac0745a1f6f4909642ad24840d016c28626230e1975c98769fe803cda0ed302d4692dd6f0fe61f7a5b422f69e454c9f8bcffb819b4e5462b5f6defac9740d2cc697c6cd5379e26451b559a08f2a15aa513231a072e3d14f218862b0184c580ba9c8f264741cc601ad6b3b169069fdef063688000e40e5b27f8802a6b56d85d202144f4d3b713afc22ce53d80ed1eb8bf1efa93aa95d5431cf3eee65a900a83d03200f41fa959630252fb3427b71d4ac1b003be170a08cdeca6e77095b287c8a00d68be08370b89b4f0cbcae071540eb37783e41023be6b24b4aa9f977f04e3bb3f82b581c57beea93018898f7471762eb5544c801dbce19ac12f84331f8b0c8ad42f0beff858d608e41651a5caaaa0160d21b3248ec92d3922e82f10ed3897eb642483ad5c995fe28803c41c564c1753d8f282eb68506928b0598f01f5ca7ff0ff6ebffc3edd408fe3f2374133a0d1f3298280c327d7485e8895e9053d8f964e5f533c49bb2f7c2e934caeac50f4f689d5a4b5245ef388a792908e4dce4392777532761ace28e2fc66f3a36ced2ba8ea20bc6d5754e89250ee136b99a7fcda42942c3aa5e0da0e83d5a5f9236d9cdcffa9c9d64264036180313a1b7bc3b1c61684f32126f3a7538a353882ae52d4bc460bbff22789934d6eca3df1ce897f172f264488c8f018d0ac30a19d0c9c8f73f97437b750f052ff76480bf6b5e9959c907461367cca080eb670768e9f70634a42619ac4a2ceaa446e0f62a7e1e0a2ae8188460102687161a0c5bda939c744a894df85ba8c5a0805441307e9920372390e039c1dd2916e17f15582a10b1dae032805844b117ffa85bcbb6a9e7002382444b8e882ad493be4cd65750f383b07b1442fbc6e20333e9c5e4458629b33d2e0e76b710d41949676efce0e3800c9b955835c422e687118aba14ff2a0fd0f47d7314baceb73ff94bccc8b9a3c1aef01b9b18a9a181ac692d971a8d1501add66a3854a8910aa0adc22026736a802ed23bcd62b818809d46d4ea167c696454f1f2e5e097ecc37c4e128ee7abbd2986093c5c914056515d218e2a78aa1d278839fe9cf9ca61d767b1e6261887b818ffcc39dcab88a817bafc16eba3bb27f1d8abc93c57e09bce75fc49b2b0466d7720ebcfe7010ba1767680bb97a8f97fe13066fd90b65b30a199f4baadffc68d9ff50113e325ac3af4775715c8470842350aa7ec80520ef487a30228d4b9723c9d2ee249afa49efda42a588a8ea73f216fdf3dcdc52ef80b152018feb5dbf014bc581b9cc850e99cf75edf8daa36482e8320bd010ab25813edcc0061c2b43bb4ec9b597dd6bc684c845ebedbd4cbc0f0d7795dace72f6720ec54009e1b0412dafc0536e1461671bbe0c3557a32928c8b38fa544e073849844f55cbbb72c44819482605fce42e273915f0bdc5a37bae0866d8600a993fa35dd545195dcecf055b2296d60c1c081cb801fe05d1cd0854148c695c062414994979b3eb3cd5fc8c4ecad3fb13701e6f55f13cc91c88424a8a837d487871985e19650b992e17eb90909ebb35f537997a3e61ad280d189a29d6a81a446ff4e76ee9c9747443f74a4b26a31be37df23e1051b4f66b8b586d3b568cf5e391a9755336a56e5a851dc2048d16e816733356151c43205eebf16fb0324d83e0a60ea841f0eda65f76ff8227b9b26d1b212577cb79770da0bc640613d1803a252b8e66cc714b8fd785d0890cfc1259cf8e530459bd2bcdbdf4199c3320cb8a08f389b3643c64cb82900a44be41c7c9863e8910568b35948274d5b5b60e402fed037baa4aadd8cac8bddb0945d36c62430083b655ec6ce56155357433861211f399176ea7d4e924ede32f1f3f62679377aa5f161ca265a63431cc53b99034ef99266026a9cff0822162d420c9809c6c347a2cdba0a6e99e6478acf4e90fd1cb5384a25354eaff187f8c6ff366232f12501e96f3a8377b84b8e48b8063677fd814de804b414c8b65532e347b8374676bb449fd81863bcee996b5cc322e96196ea7b3e98f3a5773458aee345411e87055a73071616b782018af7752852240f19a63569796908fdddae55ddab4675c41cd9523bd8f9f0573141a95552a076b2b83bbef3e13719ba9bb8f68624166d7565cbb509184943c6b33f6201cc6cad90669a5c85bed499cb51021c3aba8d4bcb45fb5dcd6cdc2775ad4a85d91a8c200d8af225370524fa9ca845b3ed12d471617753d72edc904a858e0b0706cb359229bfad465e983abd46c4b5254922aaad9b17530da8546e4e9bc5ad48e15e7db3f792c58f5bdca8097f8c0a9cf8a8b8ca59fb28de08ec4d529489b5c199ef9e5a03237567867faeb98f6a19cce7d7577189ce3d8930e6ba2c359a095dcf8d0f16696026b5966205f80c8888202003c216ca159021730a5a4185b5252ffd022eda4efeaa15d116162df563a3261f01f9f4e461af80f4e8f03ad9dc8bf5b57848f4d8b5f4f64ccb62463bb7e6e8205c6a7fc4d0c2922642b5949f0a3eebf8634b985cf3b0da569299738590ccb1bf0d139a1f511616e69e22740ab6e437b127527fa980fde5c14ab0a55a8a33924aeaa5f124c80a4ef727221d123a5b3fdd932fea1660111266b5919fa2cb0f412e306c63078b93d69f1ef44203a243263720589f63b9433a26ff74e68e5a5a66eddf89e915659db991af8e2c256d8c8766e673d24b98bb1109e05be1a30ff6d6de7c9117ade89867b3b2e6611af1c632297b07f5d88fdd37e773803614c319ddce60b98afcf6b7072c57d45868ae016772d85a2bc02e5d5291c0a58bac247106bbd9ee09c939d91cbde5c0542d60876be9e10d3b00975f2797de68287370bbecabb188e311ebac2996264473607e0d8b2d779ffc7c1d043394195c9ea32e77d0894bda9dc62145533a45dbdb6a2037989b57aefc6cd037e71f0802567ab9ec7c22a3742b31a3a88d5e963f9fb108a245511d139ea5c99e3c23cabc8073a7593824f82d6d6c464c1e14c1cada0de5fd38959b27c5d27e99cf25b663e3077954b3451838167d19389ec475afe1d7afa1c6fc8b963d1de892652859eaaf551fd2997ff5d698f68abd5e23359e6f802a7db9938a91f7ef6e79f1c2514412cfa7a8d3aff5fef5027e5d20b0b700333c140a17cbcae1d8f8f433a7004078de8f61fca6d4becb7e4d453e0263866f8dd7566a13c4bc5db9723777c083203ce36da1c372100961335f5f662600f1b709f925913154cfd59969513e0dce27ca582b7c43e5df34bbafdb6767acdf6382e52020e1622f0f5769baf3d65c021a8b9f81a3a6edfc119e6328342eb274cda7c80e40c8a093bc3a548b6fd3510160f4d082cc072548758366685bf1eabe067ac43c53accc846c4aa9d217fe96e6d11ab248b9db067b58e5ced81c3d3098aa400ba140acd112f10ac2fab1e7de47998665f8dff9250764e3f3e5147636060d637d51ddafd85b95877019f321b0a78086a9540d4fe8c4828b80219140d2c39a80ca34249ea7edca5f160ba22acbdfa60afbfc4bc9b4a0f792851b959c736a6346f623300b40e5d08b17f8f4ed84e1286d28ccf29daf1c7e8c050a02987fdc1f7742a0e9c57b79cf92bc848dd6880f1de9fcfc92439fe922adc6d2b866c9195dd2969c63c73e01d1990be1a12e70fa4440da310c36ff305be9a602be6e48399de4088733795355baa19985c2376c17efec7ada860c42a9dff5294af02a4637894867c72b1f1473756f6e7b147647d5feb078d85004943e3b9a6b6ace3aa692a840d58204493b3dbe0b4aef2f3090781abd6218abe9d116ffe87e4997aab5835a2b02f42d53455b3b1b23f21eead641d4f8502fb8d966167acf2631f2a93acb814b2f4c2f108c681af8abe2186a7bdc014b25b520112914b3e9b36aae6a833078b6ae6feb669805cce46d02efb905578791db12e806f5ac5735fa8f23933889683721e29ea4916660bcf66f7f4425724045d67a20e5a19ad887a3d5f6d4848b6d08b5cb7a55f11c46677b31bddd07c2a0036db99e3473718fc0af76420f90c6027063cb37cda102ae432ea70d9006d9ca21cdba1695f19e82a14172d237dac7ce0828c24699394c3708117f7ea44fef56bea9f2758c4af6087f4c87b5aa55852919aeb1ad66d0f0e2135a608138dc1d27351915a1df6996324c734ecea0eaa6ff874733f4160f59bac84af49e61c6b669f4a61da79882c61ae37400b03c1f6077b4e891e26860fb151b31a991948b559aba3906a5790aaf2b7156fe02fc20051fcbcb00e953d33f49092bd3f3e9ceedee8a6b5e25e8a3391ca0a1cbd5c2c1c97786883c51e1f4e4f14187adc4862d4b118b07020cf1cad2b13eb278a1a16948db4e44b2473ec9d55d4be0640ee30c76773b3f1d5ec98347408ae6dd6e47b5580b17a8fb9156169e4fda634ee573284210502a038cfadf462e05deee9c639d8ce63c6d7c372f289a7f499822eea3f1cb40c2bf07d95665b860048afe16cbb213069ff438079a65a71628fd0090780b5d7f387403be5d0b2090d28f52c544094f74effe2d983216b78818e7b7035eaeeb2dcf81ca274b374d7144478a17eed9ceaf2fa41ceebd1222d51aaf7dd11dab5a10264e6d28368755ec153ccc9552946e9d9300e1574e47fcc883eee146a1489ab452092ffecb6133729de17ae85ba06f97f945aef98c062ab1b208c5ccbce52bcafae3390b8ec80ccde456e5e52a13700f5225c0afc176437cd3a2444b2c90768bef54eef6a481bdca2bcdd05a80a01fe41b830ff7b400b6860a748ad133b33da7db3c8d77e59f7f205a8a1993e40db8d0d1a2e80a04e34451cee221610e95d8735d9901acd0481f87f69a1b884f51a55066ac46ec6f9ff5436098f11ecfa07d881788a1cf2a560e8cf698cd0ad11348cabefc68d60ced6e4f49ed082a335544a99456eade211b57ef0e481508ef551399c408204105827c325e3366143cd0c3ce6f592817e01911015ae5f84ee3cf51434a84f739484e4e04567d7b034768643f8225ed33d9c3daa3c9af1fff75f71e1b47427e83a3069720648db037ea602966705d26ce7537a0753f4c4e0d09c4b282d315b7546344a919ba0a6302109c6f2bb1f5892f8961fde7d7a85717092aad25ab19c2f36e9e9365d6bd334d118a077e7ce26f51c09788b9ceb2f6890dc9a675511508ad04945fb2cbd63c8851ee1b62511baca8d4982fdeef725a3d454d760b0dcb287528800d76a3c1e210040a88bf0c62aa863654daba3f6bf1ca301f9661cb60b55ee7adf37b0f7ebb0dafde1350c537656aa3b653c6330dd98a25633789b5a7b71a64d48ef426567b4a0484c097e360861df6dab670fad203b54885afb5aabd6c89781c1c277caa8c826f03a8b9fecdf86fd0b8320ad1204f0ea1241aae757048a0bde8213188fe26f97ea64f83e6edbc52c53770e3932bb59d43e0bb348bfe8b237642f6ff18c1706f51de45e1e6f7e1cad942de45400176b90c1cd3055c411fd4281a4049ce1e9cfd029ca4ae799fbb529361943b967a5edc4b91f32d7a70763c57535527d70da0860133ca54b432d9b4cadfb471a19ddefc6b82b9c2b2068ed20447231f5c574805e474bc6002397de1fd4ad3526740ff8ee6c9b29fb90c84604fadf60c0bb241a7dee16b716d08fd7a7ac3b0fa12532924ba3f79491a2cd5e167dbac019c7ec14f6bac89211f02737b4ecbcf1620408fdf9f16cc822158111be079562574cbc5c764751c94f7ab1430c0904571b44a07231170236f176032822c1f9e50121a56d9dc924d2191e214eb0994f54fc824fa62582ed8ce460f1c059461a1da785f4a67feb499e8908ed424a6b83d1d37e32eb2f530fe5a0dfcdaf7d51cae0efaeaffe0e5afb99242cdeebe108be85d7a61eda69e3efd0640e3908091a91f3e4128f8d5e14a7db2571e581a646d2b7e4e5a70641df91c73f8912508a42fc783decad37375db9977bd674de1606be99e80e291dd38184e1dca45dfee9105891e12ef779a0cdd9909a19c1ea5ff8123df591d8e4f0c86ef371ab5d7fe6f52c5d7974e5554d0b7c4ac1bc401e67caa72793ff7f8d509ee6cb62e6cacfad9cd048023af18724caf92d19160a21886dda7280cb0edd2a01b05f242b3ca328d73e276bc8d7700766e41be7c96e1f24ea073b009da7c7784f3ca9b430ad1f66472e76e9efb040f224f2799213ed51804e82f7b3eabf58a2db6572eff198990a925be8a8122befa477d0f6e2b8128f5f9c061505721d440a6305942301f172f93a102d104f66baf59d084ab01710f2eab0fcc54ca415564de20632e9cdd178ff2811d7f8f19be71d104068484a1a399034e6ab2a871c873918a8177999bb344592227d13d6f03db9b0c7a1408fe46576ed192ff505b7ef09fdc6ae40bc603800e33ce529f8ef7958bcbfd057e765a1ff28dab772238696d7890f1084f409f8ea427d07424c9ef653d6bd0516e100c758c8c48271cf2e93b2a573cdf6f4c9d79b3fc843a2fc1716ad6323d7c3151abe1c6a81e419c63f4e525c7c22088a70db40a14f27733ab9735079e23791a14d8c6beebbb12032fa54b93c1480b99226c35e0a0cd896a961a11bbc37baa752162d3753674bfd66dbfdf75cbdd902fca82604273cfc24e3cda98b4b3bcab67e1b4a45999c63b0d371c2da2958525e956e17f53cb692b2486fc6e69e622ee421c0d00a6613df1d22a2d874649819403a2426863d7e212503f5b7b9f4ee954470b2d8944ab19e08e73cb8f227336f9f37a9940a7d94e4e5fe1bf560b2694da5e7d3cb5e1625008fc209b541fcf9281e253cc63344fd401cf173d5a0eaa2846810ade413d60109a2012955a8a34c886b37586e1be243a11127177d7ee0773281dd73b052bf4a493275a8fd9d721089eceb0b229b9bea7a3df37db8b709780f31d71793d48ab8fb192781c223f03edb5912a3c1824ec731953e50742f2f47c9674bcd2f8889ae203cbe75570c2d12ff3d04df990e20b425484594fbc0283c59002778a470ce17833a5066dd8003913a20890209893ac01caa53bc0633e0cbbdd2d999b536e746d7ec92bf2567be1f20fdf8a0e2acb944dd8f021c5ce33b4f3a36c9d6d9ef48eb530849c61e80c9506ccee07e68725059ac405ad8c3bb1bdeac49f97531b8957ce3d57ed6ec04018141b61d429949fe42c975171578319aa2f208c9d8ebb37e602cce46bb1f75de07a484cb73f644e9ee9082237e1c2900f836809890775c02bc4c1a7c02b0374df9120c120a04080516c602d42eb0d779ac4461c3352e6710844904c1be9c89bc99074f08d557ed1a4fb8187c7ebdf0945408d307d4743940609fdda325bb13a0a043dd5b16c1e1f84cea2e708651c447cebd63b8d39d4e3b447daeeea296c26ed87463b8479cfcf6c7b1a0592430f5967b5a6e58ce5a5a449fde7d93ba34295dcb271d1f3f84bee2928a5fb8bb211218e07a1786f92b0e4717ee6ac55740fcb270d71f38a27de32c6dbf88e8286c8bc7df38b4dbec307c663189bc3abe8e689fa9ed689814b469af0bcea5848e8fb83ada865170fa7af9622abedf81964719049a3fa15d89f70d4018b52bef63ce987a2c09545b87b2b71a2416fe052071f33f6837d148dfee1800c35a46af84ec8d5a2d5fed15299434bca30d20de105f53d0a0cfd2db52e6915c3a0d4719001a07c516ed4ca5734f83201a9951e3ec1785f604c8a0401fdcb956e617958ccd0b4f09d84e5556e139ddd5e6c764d73dcf4ab8520d8f1d9408a53780fa0d271ff56bec1965c4aeac9441a2bc2c4d316442e6294ded3393a9536aed0869d5302bc30a1b7f8c3c9b0b24b224092bbe14a593efe7c5c97b94a3833343ff28b1857716002b198f646c04c707bba16ba5954e5a6ee59f42054fe59034f4533821a27a88bd40ab6f7076674dcf3af393313bff8acb21b02d3e721a632cd41689c6213316b8c0b13cc4eba504176abab588037effcd49a4f12923fb851d5c15e05011bee6b2d11d19b26d158855f6e890f0a6b5a2844605b44a8cae0b776d544067d732fa72c9b6a429d77e13ec94186bc365e8df0646fe8a87024860944764ab6badc813b36c2f2ef2255746a46283fc0e675608ee50426a9d1d242074a3ad8d61c5bb20fe65a85902634265aa882e9a5677fed1c7c2d944295d917336584a5a5de4c5915eab6c180a92f1fdf85ef4d212197a2a836fa7fb7d316056a7354681e09259e3ab8395d5fb534fafbb9e7e4737eccbf05db24600f45a8bfa373ce1185b371b1602bda7d4202ae15ef12fa5dfabc97bd8af16cfa67c8938290eee6d2b998393853437ec059ed43f4886d3b1053e7887ee78b55b4db71ff51da43bb3219051ed432709deee25a7209c8e194aa9dacc21333138f45c639cbe67f2093259c01dd0aa7765dce8e10d8f4ad2eb69de95b57e51c917a9b0fd66f602118b0e56cce976be79924e1f03db8a0e760179f577732929e635a58a348fca75e5279a1a20eca205ff81558a115a361512830a1dd765e0d22af1ee580a13772c50e4a8c43e7e5b4c4300c5ae00f07de2829738ab35e22731f4082fb67e251c40af9830b6c3e924f2df73c3b285a9f6dbca9d31e05c26625bc0880c4b7184e9a682921ab455689700cea9eb2b61be38c53df28419e03c0609d6998ac607d0f800a3c1bf000926de9a0688351e9fc0e126e203ffe66ceeb9581d19c9b90817de08bdae853a45cac396434050f5d695604d60ef3fc0f9b80508684b58acc313695e77041f56ac4b8f62d7f41d129fa849c57a6b5e74ab9cfcc5e7fbed60e14b3050ac1775c27ffb5b4fb17e37e4c96ebaa6a4c98954d9cd5f3aa0589ffc10ef91297b07ccc28e9a85e4c8567c309df1fcd7a134c7a03bf32b68318a5e53b1ce5ed703d4376767ee3c64b2dc34b5703df4698a6910c2f58e26a75e03c51797b3459039c5777101f261d0a1cf1f8ae5ba77c034c0ece738e0ed2cfa2a3951c94f62f962b86b36bd3466f927c9e887b70dee97e2b64590f5a6f640c1d6ca3970ea5c96ed97e8c792a18167a8e4f1fc476d5ea6f773e0ab66fb94aa8474788b744d899fcbf650b481c308e68f61b8344f254dc2f73d1b80ed4074edea59bb5ca2cbaf289f227b9b11ae475d721b7cd301f6d8627bef1841ea744eb464d97a90da3f03a63270cf873c174198c0ab2e06c1b633e8dfb27e0936e8c83a0a037f8e1f77ce8fcfa880813fcb55120afb1206a6b3ce1c8c2520f772dc28ee57758678eb35267846813366e0140f37c791121b620c62a5b855b1e82dcb718ebad06a9eb7281aa036a79ab3dc57565769ec1ac27cd808aa82e5564183573219b6284bb32e586b0ebacb970cdc243793537ab982a1338b34f48dc7eb40efb5aacc302ca59b5836e53658c1b2f1f5f5a02fb719e036fcc8aed22a447413cbeee6a24fe5b77286bdd686dd69c24a3a0521d9535dde639ad71edde3eccfc14c6a6783fde400d1de3454622f34b4f6597a2145c9101de2f49a677f3c874a018fae2b6189c51d2f9b7a05a2618a1a581f61d7af71a2e8314efcfa082ec433a9c65da8a20d418d018af4497a3e8ce295772d1a98389f19690302b7f4a264a9aee954825ca67bc1700d5471cd1b3b64809bf9e62f368378435509ebc0e88c466f0851dbdbb3ee978ce10ccd3ab49c5d9e09cf230321bdcc89722d59b66058c6d0b03faecfe2d54e28c6335f3ad95826f84c0367204476fe2103a9ee1286bfdd9841a6b00fcce0ed89da63eb9b8f7e37a1b8575a34f2b80ec35a628bce1f72b8894bd5a8bd8f265244e1505a74420602eb4d387680664bd58a244fb56fd45d32efb0e04264d5c62d7a6916c586478c30e61b5d1e415f1b81d3b9620e0f65ff2763e6101d09e42ea106cbe8d739a0487eed7bdb05bdb5202dd194fc7db59e354199954ca8efa3c4c385ef595c3617f3c667d054b2e1f69bfd964e893209ff0585da222b2e943ca0e111f365ad57414abd6288a8de9be9968bf7ac5e1c06159a4a08e7228bfa04af6e7b6daabc98038a60b95a0f34ca4a21519df3f3c04ea4f6115e0e30a444857925353f43ec70086f23e4db9240343a7e63b8fd2de6661ddad01cf5053206628652b868407ab9ecc0db88c215fa945979bb26d4680e2b281ad0608fe51e15d8a9699d0722c606271f48a5c1c1b458459f782df97e8ef8f4efba86c411ab35727b2c986f51e69a566a96b031fa9ed9e95b4fe2886376b1e47466cf11fb9ed126c9ad7439f40f85ef2d46a032a7f5751a8dd6663d3e53a1aa437162da087f0144da3656dd9947e00b20cc5559e995ceac7b6f835999cd7b6898371bfa9f1535188436347ef46e11c7db6067f440ea094b897eee34cd08e407d6c258ff435d745f1e92fd0c0acf4c78ce64a97d3ee73e61eda605419dbc61e1a67d9c49b6ffffffeeef679ba7f77f3aedc543de495c91d8205ea6e3407401b0874aab9fb200a91d61e1d1580eac60c1dd31794d0605300c22809f4927f981450513a98d70221c112200530ac4fbaf6315782f4315a2df55da3c4f9feeda125ef759d9e7c3bc8a1d46071ac7d02ca9d1a043e4c45b91cfee0357584eff4053b3d917b702012421de71a1b872a3ca911d174607e41e324317e848eadcb865ab4c9f110b26d7646efaad980113f3dd3a6d6696dbcee27c46f95bcfd5f5b8979ef9b9d79fce4f65d0f3c11e6e852132fffce77276d82bf57f3a9603fdd8ffa3d44258dec384dd567629a0b670aa57d1193384961f0a32a79600567cc9b5c8af4209d09c0357cdb32607b4622a512327df550ff1aa79a64c4b050402fd357545bddd60cfab71a251a1027a79b9638d9d636063ea001b4ad4f04c5069bb3fd6d096159b0b39728d4a4759e9715515d128093789a5312f21734b8ca1d133bcd98862ffce341cdbb0196ac7faa93ceea8ff241eedec4f1ba81ff7b4c3bc90cdf725fdfa0a91ba547ef0388bf00bbf2e33ad06774e4f4cd477a5be68f785bf221cfd97a4c732a7ae1048e3033c0060a098a2d142b6449a138aa2128f5baea0815fb5030afc0e57374bba0f202cd30da8bc510cb0b1b32fa497e930d8febd7cb3c361574744d9541645c0c6cacd1879f3f554e8cb2bb49273e718708345b13447e24b6197917be28fe9b71a835987326597fab44d11ae2c3ab871be1c4bcc928a426fd54ad02979d060af61f875efb8c8aa5bb6f770a31b4db376cc8a0db408cddaf2656f32b68409b9976ab24769523e4699c4476d90cc65821df092289364f0d1155ee0da23038d766ff49f67a05db22a724250330e4b05029cfa5bb31db7337a5a19045f76ed3aaf5948261bc840e9b17ee766ba4cbb5afb6f63b345975300f0775ef23b0d9feea37f1c02250de58f7699d37d0054259cd49cae3535d253811ee072fbec98ee6e8781a3aa457576268136ae36bd14eb054c6c85e87b0fe96b299e8d39a679252c6fd1d5a63a0618f2fc99be84a378c72d004742d7f25ea6f1e9312f1399bd7897d5dce758de64fda308b583b06e1ead8349c9847de692e82ef89c4c5dca771f866e1878edf366ddffc2d61f8677a1773f2e090c33e6cda89a4c9e67c4305cbd29104c2dccb1972b6d04ffc2b9f5c1d53dba078420c856bceba004c47d3450fa9d22a69bb8a305b549e2bf3cc04b0ddfa66931562b58e7c56a621a6b36da98dba7c4880a9fa7a853709575b19f33e2b0158bb4fff6115bbd929636b5d5b2e6318379f44f46fe31ca4a68f8fc5ffc10e150b0c71c9da60f4221626e08cc337c22939048afb78f963fac953b3bbb879f057996676aa00d31e4a9cf100e92019733a1e2949e3f69327a19bdd22f376bfebf1b47378faa09480e1d32080c3c39f873e3eeebd1220b9b231e6594551b65853075943a757648db29f1d5ccee6fb74b9ec6a7a6e4db8bcd4ddb10c29a6f2bd6a0df443df41c82eb87bdfd18fad448cc5a555d2d0595afef48bc1fa8b62d43d76980736728cfa42d7a2dbf4bbdb1d6a3bc65b947b99b9834e6396e548cae00d523f3e74112a1b200f971ec754644573cf21c4dfd617fec2125c984932b4b54e4dc26218d2fdb8e0d89f09b6b780c8c66b7f32716a4e1a18daa3b3829788d1f1eeef7f6e770c58051ed9ea81193ebf052ec1474e56701710e422a8a517a22a547e964e917ab16dbec1b6b1c757a5d0651315748085f21513352b451bc1835a6af3a891d9f11627d6e17b62e8cf345b5fbb95d6b00212004cf0125b5282999e8bd898a582c7660016c0c5eb8be8277f95d2660b56ad2e97a5bdd267e70ae95403e8596320f66e5639a05dc29e97d17e00c22e9fcd52f7da5771f3391c26781ec1fa9d9eaa70433d95034d8037313cb25997543dc8c63aca7f2cfbc1866a01447df0ffae1cd16de18ceba09dda84a36d0c790556c8edc29f5b03abd4488ba26d11e2e3616638bb38620f59e329ba5a51d5cc0786361ec249809ada2f090c9af525a2e72fbf2f4afe4bc43b2c17944932cfc8ebc8391d1802e28217ce2e4651e8789bdb9e01151af2588d8cc9e1a67c1eab391a4a45162f678126c44c4fad5a411a3c14fe3ebeb1eee6999d351486e4212cb8df0e5d4a0f8477c7c380ef132e202e2ad05512d4fa01f5c39f3fb6cd1dd88163f235a68ee290b56e9880f92c9968e93570cb4ce0facc92ef50e9f23a17e053582253e5a0c608b02d4227404813e656021efcd2c08ccc2f7a7ba46120e0eed162a738868f1430df70489118a901c2ced46a2b0583ac1c17239e50f955c6bc761d57bb01ef363987604abae01006d8f1d1039138fceb324f7a301ea4afa83855a318d965348ccaba555945b0a80fa32a616aeff30cfb30c1b6029327b55d68378494008b658b6dd034bbf42bfa7494f17ff3184a8e65a6564b1134266ca2ee584a0063abc75dec4cb391690fab25980758d397e8683e01a7c32dfdf5aceefb990141a3784b010d4083d199a30cba0e5d9b1c0be67ef94e0de524c1a913e303343bc3226969bca8abc4693c6c5fa413c746aa78257b077df7642132ffac0cf9e3a8098b1da0f5c39b9c93fc845a67361e803bb433a1e2c4e78523008f52cd65f841c5e70c283f5c6ba763839b25505d6f2d89e54b7c4cbb80758c38207e7ad2cd296326756b0b23c63c0958b501b9cd752bda132ffc3a55da25b7708b5f201d6ef1ad470217013c8edf0f6e0b8761378b5dc9e24e05060587c35fe9bea7b29b46782470e0e4c422463666292a07aea95a6a3def30731dc99f9135c447587137ef301e2ab22fc6c3b8b9482fa131515835d5770d1880c1dd8b856f40474e3cac9106f7b8ebcd2a1d69db8d9cc3885a8dd53dd80ae468b47b77084206a5d91ddff05acf780a3dd9e98566076c0bcf7c1acdfb61b579c8f289bdd8b7af962d7884a4b438236f8df5a1adcd285ab7663d47045b7d02d193348a8311a594e40f7d7e201db36df4df34e3fa191a1a8eeb6a0cf8c5a866f395506da8ed626b9a37151e0befe6da9817df0593447cb9ba449994aa0711980f597e9dbfa2783717d06cda1b3451ea138ed812f91939d05a36833bef80bc0812dc7f608501271255b4ecde185c5f571a201e2143711234817de3f0077552b2dd856436fe33c6a9a44fb116a808a3e59ea07f380a43ec11bb33f2fc647178c233f741eff186bb71a520b7ce7fd3f756e1d73902feae01b8d378d6b0cf31350de8b2ab3d5ccab995733aba54dd88e2e300049ba98b638e388315c49a7bad6a59c5a8435ca77842d89f20b442fe861c475483e02c43e1ad19e087f5f9e62ae90da5f3728f66e4717131cef81ec2f00c5786c1cba9dd52a3fa5d2edea5224b2a30b38dbe64da92f15e1a3c16fd7d76ba247f3b1f1bc8f6f391ea735ba3859fe2767b8c1b227dd17e20588304d4de3e8d5fa4725f81a85149c96fc49b59b9b4828722d961e8c2932c173d53452d06507811e6c116bf26d4bb91345da9ef36d4c1d24647e25ebe332a4221b0b2d7e1d25f66f2e5bfd10b272433f43bba9d2e9c23cf8a20bc4d33c78ad2817ae941109594bb4dd812734353307cf9b5f409980bf3b01df033dbe0d96e2c6eb7c99ea94c3db5df0163d43278446970d507838c481758de275baad7c45fb9fb4d561b65b4dae7c8538a84c8fb25d2fac56bbd9215650b0f580e0e38b27b97ab615736459f90f83130a898fa5ea901ab6ee4819b1611dfb7f4c6be70f9191420b52ceb6b9273a03e5358d577f3961575984aa1d0bbf40590a9b355f2a691363e2ab73b3960be8405dbede94d728c416550e252bd460a74b9bc3781fc0c85111cb5ad487c174eb1004dd426dcdd96afdbaf30556ce101159358a4f85a4d7754a2d10960cddda01e42955cd1941560c1f0890d3c6bd56c8c319c08c4a4b4ba01d819e56aa2e9abb53a50fea224893e151069759a455eec3460c31c4c355a9eeda65f597051ff851ab092f38560f97c11c7f4c277ed0b0479ed240630324792d0d1a7b6c46b82b760d1bb49fa99ba81bd774ebd4559d44ecea203163492dcf705be689c2b2c26662fda7dd3b360e2b8b5415c35f7b635a952853ab832eca20e490e839325f521444f21a707089413a1a3721d9bd55117d738e40466138bb13c15686d528f7a414da2e330d7f049f50cdf301f5c68aa6781d8be82bedb311372b97b8b17e78fa30adc2038c039ccf7e95d2f568c428f512c0189fdc773eefda754e25f68c886833bfd9ea9125f6ec655b344cb0b9ea7583765662d170cffa22a1e7296d53cec497f987e5f3a549ea1cb273116e9444f2ba7afd2130278fc591bc8e93073af2e93f586b5239136a310f66b4e7f4ced7e7cfff7ff2031c92d750e6c8f011a409c2cb70dde89fb781509fcc4a234ca099e0829ee71639eb0d842107c02d61ed0e92d77dc30545056666ee50b112c6b718f3a9665e545dc9f8971138322b01f133169d8cf90f76b195408ebc8ee0331dbd8b4f713b870e361704732099c1217f81e7867d5afe340462e3ed4178b73b0a366eca6e83f93e90d5a5339574f617660721eefb57809e3d49155d4f6c8bf8bd4e4f25a588c150ed069fb0011529041a8ad52d506bb9539dcd8999603f287bf91cb51ff4561ff2d3997085a7e9a4070e13b154c7ada309a97e041a03deeff0768cbee7b0580999b6ae27a43ef32367e59f0e00cd2f5744ca13793d933dc115aef004b7f8585958630042c3838ec6d56f7b4a91c5add3675dc48dbf621232971ebf7562445e1b3c16dd3cc8482f58caf418766eb30bbd8c36a7d1d204843997d5943311038cc2340e92533d8a14c349ba01f88b90afeca7b04e9a8ff8dfd96d22e20b61d1e04b5fc46849db169ada07c9942207fd64518b325143a07659aac6f6b7377a0911f423dd4039ebe6b6abb70d502fef831e49ea1c8c4d3611b184784e25fd8817eda12227868ecee438687973a1e73352df35cf367ecb9b156d60c59ab83fe4c7bd10d659942f96d3b05c7ccda37811657e6cb76e7fe828a8a02c758bfa7ee40048093a509ad128b773a599dc4c409f283c604b50523bffa793a50d86ec64c25bbbbd60ab02698a9c980e94bc308a5b88367468bc2edf91fce6a356aafd1089862c3aa2a6b7ebb62da7e6bffa8caa83706205431e228dd708b4526cddbe577df500abaea3884d8214f1c05f5c432155ea72304151baf82800ea3e7ea02dcddca616b937e3b609aa74ad0bc3666f48f05506d7528fb17f7ea90b2b6744b9cfc78590798d5b4a651cbb2403e46ed63baf07bed0280a36b7039c3319d58d03807e21ef63491b0625ffec129ab3a0b6f065df198427bd0e6a941ab8ded5211305ad3db8fa8d50ce390120c660d488760404f2df2175bc1d0ea7bf5e3c04042fce1701fd5c630b63d3b7ab5eeb3b5dcaab67e35f594ae0cbddd9c87d89e6e58e6608c5281d7f9dbc0111ca9c86909bb49a73cb55f80d1b3c7983c66c929c75206b7d873ed8b816d190236f148e4e9c86b27ce1269f4f524c4886a0243918202fbe705130e1903e6bb45dbcf51613f7ef7fe1c1a2b5b7667b9d76047d32758bf1459232385945c9ef523dc9175ac13ba0c8de001b7bef4f2916d818caa4fe49862c86f33bf55d136fc8bab7c5bb514da0e4fa7d70b950f8333ed629dedfcea19f650912cf5c4e90ffefb1b59a1b40368ae9f03280837776d5dc285b1487563b5059afefcaafa44bf9f3aea468dac63686c92243ff8c733411fe732c54968a7f5c97ec4f3a5348371ad36d4e728333b883e8c515eaf729bce846371018b16af3d9c45df313b38062cf25444a536380c82ec3589bd095651a1f991a52aa29fe44e4187b896ea85a9a84149f710e48f0bb0068f35cebbd3cf0fb53db43c98160881d25fe5a8d878f9e490c3c636ae0cf89036f36894a3463189777fdf7c85aa4547b7ebc47c13f1cd7912dd1f362012f6e8aac2e5e71edff60e31af9b2785202fd6f44bed5b8961ef5c6f50482323c3e819429863e198ac6b55d962582883bfa7661491534341fc535aec60d2c52217783552a16067624e7e948c6f57a1ed1f49d992c33fb69343c741af6438c6b626bf9cc99dd18c4dd356ffaf8cbe5666eb5b24d8f7c7df71a370fbf79a7654651c2d80d9d47f8d3ff6bc43e7c96591a117c1ec2f2e1723241de96614f06f8ec3f3e6e5c807f5d938495ee23f87c3e0a80f2f28ea282fb83c3634f5773984d083e1b714d6a927e608d0db3268e3b5e2bf8b64001e9572a6de1e17147689f1f1576ae3c1ffb166f530954b023da03523bcf6fffb2a0ecd0edf03c4dd1c4f6379677cd7e2cc2eea8c6eab0257ffd683f16d1a8a411a4f0d30914cca67d48ecf2edce78a839f97064cd1fcc620c8a15b41aa9ac8c732e24dda0fa8fb4e013be318b50373f25b90057d195f715a42e1b6e2712accdd036109755a035bc0f275ec6a1aa718103733735250a42a9b1546943f71e7d94b79e366aec02b1ae5ee4a32d4ab5e2d1216e49a7eb3c86c0521185410e7bb36d8dab649e1e95b22af1fc20c4267ff0e3efbf77b16c6b66c9d61378ba9c19fb4c67abada77a7983c7311dcfa4ac6b9be2a96b4b0ee0d8df6bbd3651f62618814f66e8c2a786eacf7efcfb74eb3ccc9ceabc95a560209a38ad5e2c42df64bfc3de472189e6aad6374d882b9a43fe63f1680d6d0c238e9a930eb250298ae77436497845eb602c13bbdffb7f2e2f05038630c7ae46d3f3fb96278ecfa937911ab3863c071c510ed66388a3268116dafe0a10d91a34ec50b2693a83499f4ff3084b6078f9a993d4cfdde918b7e851fa47baac5f5c804f3f53825e0821980eb533e6e6af41085312fe50b5766da56de2d8b6319b21c312eaee174639a421fa3f952e38c25eb1a34133ed2d6a4b1a77e41d881093918b341a5988c91dd5282e43dd00de09132129e4ec6b205cf982acdba324d8db5318bfe49d669926602f1ec37d79cff4736838749400a9d9fc31eedfaedd5cc41023b91198320b4d9e3df33824966fd70cf7a9ed5d585281d513c80857b1aa4be6a184e7cbd3d7efd5dde0e61cb067d8f0c2353d4ca17fe8603e9ff3c77ba04cbe2498904b722305efb201fef4afbaf335c09e899346f3138ae9903783ad84086ed2e53c5abb858f649c4a6d9dd1ba953131b3c4ffca795aa267b7144fd723d8ea4ecdd3891862b302e23c16ce941fa2d3619ed57d4ff1827c130c4e06b6630c228626ff33aa1203cb67cd932152e3c9c0e65aa5b2f532cee52eb1494a062eecd2ce391abc436bd810af149964d160b92b07365684bf17ae62af250f743a5c88754e6cff65c1af215e6ad17d91d5b665d3f0e90766a8f9857b82a656ecfa1f6c3512cbeb3047c04f039a1b542cc1ec40228bcc6eb59eaab23070284f63af3a7008c8386ccc4ab84a0d0cb83b68576d8f06ba6c16c0f31dc76c0350a2d49402536a92d5129ac83dbdff9ae8e048025be911d0a0b0f58c36c68b3087b8e9df1c3d65c7d90bcd4fdb394dc41c7106f9c287519e9e9367c8d101dcce1cad9147e72b626ec7b984683c99962f3eebc3d63ac01b90fc13bfaa8ebf804590d0fb5d30e5a36a7b72b983bd891b8438253016a753727f50dc1b33ba738519de8f528fe46dd57cace0e28f65c1d4c8e12345c7fc2ae84412a6fae47e47655b6639d255c345573184d7b8c8b9c289329242bbed1ce430521ad5057da32ba22da7aa126506a9adf15ff2d094b1c265aa68a2a133bab8cc32f8240ccf8a94885728663b4dabc81ba16d41273fe5861c45df1f01a289733c46795bfb684bd45825aa53beb2cefb68acad9b83edbaf2408c20e7a368124bb870fe923992caf5c2bef7b446b6eee2414ad3473efea528c75301ea2bae683930b0dd6d41af93ed64a1224902ed3fd4733c05560a908edcd6c02118ff48341b097e9de01a05326590618ce66b785859bb87c60582e1070d2563510b40b89703ab130777e19b16f678ccbec0fc5909fa7d6a43c6010ec9071baa45c4117466a9a192f44e1e09202785177d7d116dd8a240df55d45303d462af2efcc9d60c5ba43a8aaed99e74c818fc270639576bfa65e23100641b5e48a9f5d1739b9f27fc491a7e2b86568d59e171a155ea22039f6865e0c515190cad25ac028931b4aaf61bdf32b4bee2836288bd9e966eaeb06efb70ec070cf6c45a1f9b066b4a867233d51ed750cf1489236e01849310c60395bc2225b114aa82f645bf3831de5a08a1683fe2ed337eae8a394c8c53e1c6b51fce62a7409f5f5d128459aceb096840cdbb5552fae34add114d765462e30cceb8495c24697c4fec0b8b86218d366aa9317cdaa268793feedbcb7ab9c8aed8721f239f7ba09153c4f8180b3a2680b2b09069ac7d7daa79e1cc3a9eaad0ceba96c318c48fa2559ad3843ba2e702a8936ec69db9a38f81f5b959a9121cfe85f18ac8ff7f24c090fbbbd8cb3e74a4fba38744267cd495a777936d9206baefe88c33b9ad71c10764cdc852f8c460517726348f2aea839b8cf9cc215cfd3ea0d0d129643d8b38a8b42812a3151278d122b4afc09762a8ff7283a02320f50fb377b00433716864f46c1cdc78e407fd67c03c3704f479d459fb44b7d9595c378ec986b181671a639d81b8bac600459d7036b01d2fec151b4b9e150dbe42cc32e16ee151d4ab80ee4a5998c39e502d52cd4ed6697745b0a03866b53be48b6a9011238e0136efe4aafa29cff896c9096407415b05f5e0dd32278feea111d951a96981a57cc994675e11e5db704bf10a1f4533779b6cc18e818d44e11dcdc2a237b4490c4b4ba7e3a9ac60a5eff6bc98583647fb353044b564ff906d416d457dd5374e4cb5facf82b1c652cca5e8e791cc73d5e2a2bfa0506b7915aa23ffc9f6f4301b34481654090d964b60dc1220b2a0ea1548785148f9a5ba38097269329b2bbb332f94b50207295b1c99268c4a89889a3d371596b1dcb1078cd6e91684c8c9464ddd43970290826d07b5bc4e795c586f9f6a5c446e88fa0d618df15e801619a6d385c9a285cb981e1d1a332b2661869f03ea9b9f135cad179e760c90b01563374ac39168d7111351ff934fc01d6e689204c63e9e69f098ac6d5154151e274505c9e598dd1f4e4bc1fbd77c43adcbe89d5c5b2ed92187141e7ef019cf98525f18be2a1e573f8f2a789c1c59735c3756ec6b7c6cfc4202be1318aa673ca58c496566e9da8a89d2ca5d71097d2faa5e92735656aa5f5366f8fd7be637052131e249c99ac81b1f8b7bb2596cebab5ae3f6cf00ef251e2dd47575ffd90e355568df426258dee3420b5070cc3543cfbc6104a3c3662beef40a64eaa61dd431d54abeb2e0351ab2f02d68bfae5cba5110cdc10b17515fb948b49b4b9772da231facb23128178cf0106a31f11f7069fe33907ab9a32ba4a051ecb1128839592c461cc6f0a32e75fa8013dfd5422d1a2cedf12ff6fb90ab5cba866b5d313b5cbd840179a13c2ec16213215b703df87982b84f527ea3283b34efee930ce91bd80550932ab3f4ec4aba37e061abc5c58bd51f7e60449c2b84f793fd8be94078355518afbdd1ba997271d518bbbc55de135121d2c5c8cce1282f07d197c609e6a5173eb861ae2f3acae62de0965e909fdf1f0dfee8baea79d74d44954b671d2d354e04f2b48ed438cc3e7701d9e2e6178e59f5401534b130cef6d5f507a88ec0dd2bcf10d4450689d22a332cd9043b3473fd9dc66401e0577189b34d87f07797500eb81f7336367d613564eb6c7720c0c27228cb1454a8d93bc357466d0e3c3fe3dbd7850359e1cc5cc325e81224b974a56142a0273d86e556413de4fc5fff3acb4a0ba4fa6c73d21821b66dc342d5763d9592cb8dae0e6173eee4f270f1cfeeac51ad68eee4aa566ea17031b2eaf8d1133da0268610b53b356dd1ea4fa133c5f8fc547ef4c4f5755c19ef5f4228e27bf5030026185e01b32d5286f42659ed665bf9f61f6dfe74f4c66aae05750e65739f8fceb4e45725149171f14f86a5254b00a96b45e6575b2456c7ffb923998d72cd5ed08ef4fc2b86dfaa6549707984bfaa73b782327390a1cbf1f23ab6970fa26574a5fa52e31a8610d39250287f404cf1dbc4de00dbdd58cda07614ee3cc75a4122d7c4151b31338034be98b9772e88db0e35c3494ebea52de52d22bf1953735bd6317d454a606b10e779c60b67175fedc60508dcfc879f62d0fd7bf9fdb878a9d9b1e81c3969754e0737fc8850724dd2e5a05a8459d26eab437f7fc528008bf542ed34af87404b2fc9a91e4cbf0ed83b93c4152369dfff4bb713e93bdbf5a09d568ce54c68fceb25dd35b454dc89adbf0b8f0706946e96d32182746921ea5d2884eeb501e23112003c9091362eb7395668b54400a4260714eacf1fbdc9891ec517aec628ed0d13a1fc5d4e56bc13d79e3b9b425d0b4712107c6b10ee584431c9c9ec9ea65d439be38e627ad63d412abb2fde768585ee6bf95080807406f825e7194821cac0cf3d6be33f27b787db4cc2f01539d5d68161984d482929179c2bb7ef3b43cf25bd64f61961001db75cbe67302a195563a73a5f66d7c4aeb8d8c019095aa554a4375eced1ae01bb5956d045d66ca0de857d1d02aed5b33aef1ea2ed811f6dda1ca05ec5a776d079b71df65650dc1084774c4378f99e87c62c5235d5b11b4ca963a3d3b1586ac07f7a52debd12addab72d0d814d49262f1716784975d69c3e5af70314983c4b7715eb7ca3180d782b2022d4278218b9dceb488f5e8c54464fa1b64f8329bbc6938f1baf36a3b83b4e852bc6267ea71df760a558df9792e74159994a6c7f29116bd853d1fa89f6269859d919e82adf2f44a0f98a36fde7bf96c70bc45ce8763a3d8fea4733a172d0432876143ec78bfe891675d388ae4c4ae5fd1a256dd36b1854b83e0e81597a903a753578d1d1609d40bf1962a82b3fa1251c62e0cf94f06cbfb8fe8db1df3a1cc372557cd1bbf53787945cd33e727ffed93f053d593bd337b7305532c9376965ec4747bafba670f18dca8d817370b95efcf92907470928d8420c4f0ecedc43eb4336000c7ea90e1ea4ba4a833214c23654a8f61973db9532478cb3c235a35e3f289a1c23735cad40a235235da14c3f98f9d80fc96a23d311edc4b45b2f3685c907919878937e6b5cf032b6dc9a961d13f2b70c4585599608e19e1e2b6349afcd11b7906597f38ae43d46f0827040080e25769225a3be9e2c338b1b73716e6a7467abd6038fb548bdb3499b483b8b0da8d82b46cc61f81bd5081e8e735c428c0b3ce493eb356a735a78db17460b4e61f8a93d8eafb8e68bfab52ff81010b40c164e84fd2ad69304aec413627a2051a8ca700c7d4c328d8a1523c08240e5d881ee13e2058a9d1a47c0f1031c32c22dcf1f167c9892703b9837fac89df69208c002d57c332465e10d77ab4617f05c6d146d7e57ef1e38dff7e5ca77cef6c4a29625e015699117a4762a7df97b00f2ac880e8f7fab87454adf4361e1812cbf6b5c38f019dc1e04bafbc60fee51bbb671b1f1ecf6373f3065f65be5a6aa6ff31d1f2f2148a377925a4f9fc591256ca804ea7d9ed83c2685642278cb43f130f5f002b9343ab785beb94bf4fc37d7cad2507544e4cc687f8cff207dba58006d99a1b54664d3cb7a07e9d1e08c9d556cb3a6a19d9ab9e018e64dbf7514b7f67373aea0e4b6a27ac06d86230c1b5729d5227e6a1792548bf0cf29bb8cf35b1173e47e8277694431c32e838b069ab864ea39bbefb8ba68da3badd6886593140c588fed2310ab550a42ee78f408e26c0d69964ffcbfcb8c22c44fc925ad495326f7352b656f460d6f3020642523ba94abc96e4294096577adc9d45f8d6a7d59ad78a56d569ef5fb1167549b92c1863c3eae159127cbe14e9899ece80d9ee0364caf99e46788554940050f6ce29179c32dd2d0e068854c8450885739b746ef1761ab9fcb7652b844efaa4c2ad514809ab6ff4fcae7c484b4b7f9b25e25a3a128664846e82764a054e457225ed1e0ea1b704dcd8a06c3780c0446e414ed445472a11ae1453f39017b242391ab0dd51a427cbbb1aed5400d7662c1aceaf11a197f330cb846d264099cc176dc0c5a7ae89ddaa26576619581a722c8e7c87aa7f6df0a9801d431f1d5079ebd7f3d733abb2a025af78ea52ca929d5da2007603ca4fdf415c9e58f9978112af618b305899cc26948d32fe1599fc0c6f06769f0426754f0e87f3f266cb4b19fc88bad1a97b9a93c4c738bd4e4cecd95544cb9df14fb3577456617a69881d5f9bdef77a82df5bd78408bd4528a6b3b219e0fdaae46bcbbb53af5f1298d1da6203eda106237f8ebe8e58c4c3819b880385380c6005ed32368ae5c8d18ea4078ac562a7a1e14da2adb19cc2cb8ed678aa82046fe3847649067b0df2607edf26c33fc866e9bf0811e99b3555a30550a97e147e602b355d836e148437395380198eb9fca550b929772b7f3d7f9ca978c60ff5857b72aa910a49ab2a68dcea98e6b669049696e1376b10823d4353b81353e5e986819b1b1551319d8c6365382524b5c8b3e222840ae96b7abdaa6b25d5d922b94891fc646d82ac7694cf04b98d918c12b458ee8ee0b1a544ea79c899bbf61028707c15b251abbcb2ffdf41c1d4fc460934f25db6b424a6164f9b22790dabde92357f977e0c032f0e5b4e0f5f3058c00e63422c8c17792c6fdb157fba641625024550a7e21d1e7f291ac26e55408fe33f0658080abd5ecc99ca6bd6e1246575b713d6d277afb1949f935353eb1b5b48c1e5659be05fa58fd2b46cbf7add896b83a1953db7cd99d11434c4d275cf9ddb8b89158b6dec7cc3c92f9fa1aa3889e53f5c5a153dc8c2b586dd9382004103b4aa3e15e08eb8d5ff6181a0fc1fd7f93ff12d9986664d5591985ce4c1a8a0a4cbeaab3bb02b36322c95a969f51a24b1620b178585ab1ad042c9c310b68780f08d1bce2506df5a6d81b032fcc9f4a36800e2bf6099a19219bb87a56455f2aca7d875aea45bec27bbcb22df9b3aa3fdeefc3bf091436bf2691c635a0697337342acbdb0eebb3713c0d1eac07bd0d8f458cd366de89dd9a79a2f3761fc3d0a0c454924e9971bfacda26ca5b2d1d5fdd20244c0d6ad0c6afe9399dfc36e70272aee4b74bfa0ca1c23f85bad0c66fe501c63839fa401f28fd654f16d13528fdd5d39858cb0bf72609068443e0eb012695a893e6cf2e9c4cc206728599f3302adbc2fe773465e5ce35acf8eba02d534dd33a2f8036bdac6939ef19ea5c9518a19f327b8e6ee6df4c4b1a859434766dacad7f7f498c0e4b3ef752b484a63fa82c017b17bc9a06332cb2d1344e37ac879d3b51a649792c674cecfac8343b8439879e55bfd42a7ebae33b47f443dccad711c3f5e45b36c086d36c7c890afc6d7e7c72199824a646596c4ed60b207f35e867a4d1bb194911ca89e006e352de3b244aecdfe444b2ea84f70b8aa50617e02699e88bb2a33a133eda3ce1fce02ee7465f4018a0b641ddc892464bc7bdcada28b92eb8787e4920ca18c4321b9e89305ab1cb9884d610e3adea8e480ebe55257fd021e97d2cd6e6fee4af05b9cee2f313d8495d44ab6c703660b69fd66dfc8750086cf163b8bba1842011ae0ba8bc54908482966aab5b98648582b8a1284c5673bc1b03342553ff37a5ff2d96a123db5165fc843aae1422b4df038098cbfc649f238a7c93975d98af8421eae95426a03c23474023ffca319abc3ccc6f35606ba0b84daa2a8684bc9e8cebe28798fb523f24a28d003e70bebea13d584227a35cab25a215b3c3241dae0d7bbaa2ad33c90311e397875f6c420acab23aeb9c0c1e5570a3e2b241a62f15d3c45b8160224d5faf611230450a6d93a50e6fedb8762ce67529b557dbb86c67b255f8be016736d7763847af10dc2945eb39f49f0310eb77dc89cb2cc70124212a55cc2e36b457fcdd9fd916c264cb04271864841953243c34b7d696f0f36a151a4b2d482569a50b6c51ac135ded5e729c19744351c18230b2118f0ac93e75f5656fd4ffacb146de2b88d7a3d58ac8ac6154f9a9bd5969804db3add90b802f2e52dd5e802cba51faabee403e23d8893ab05ee726039dbed0bae14d817f186164d756e13095f28b99cd4f0d09fa04c039c188a26a555188283d74c8897f6ea46ac6fbdcedc8875572a664abe707337de32a75b9e44fa06bf054bc3bd02f66aac33cf5682330b718b0113adecc5069d3236a641d5f9471059865a78b204ed64d051a65c0e488d8c18201a746543216d24f07016b5572c33011983091b3957bd59dad0e59f1f1302d7ad876d03e48cb15046da5e98469dd9bd51cbc9869a8defc6e59249eade43f5fb37fcada8679d3bfe8de04268010519a0a7bda9801e8e6ecbd4137a93045d064711b3d0da0d3326eb380690bb787d2ad15a79d71f8b838c41e30329f5222f378b756f626aeb2391da44f89bafcabe65f72ff368aa8f5fc909e6a59f16320793d43b9d50d7256cb5ac37db108e821c69e7dc768169a75c6ac8921c026abd49d61a103987b0d6a4dab65b042b11b033ed71988b41991a70dad40186db5f12c5d91728920b06b05cc29cad0780cee4517dc1bb6fd3e016a8d1ae22fa2044787da64d53f7ab842f9597753388098a3e4b74bdd6b2a66be461ed2907ee677f113173c5701a7db54800ef345a3ff4a7632dd34fd0fa9f1f318cd6a09ebcc695e92e7a1eaab938068756d9b48921d944f4c860d77c1b50bbcd8ed181a70c4eaece779d946708f345c9dde30099d8698a66dbb0031581a13cfa451bd0446e9718813561d4df1f45002957b47f5a8cbfca18ebb798607804966ddd6813a792102a997d2627cafbbdaca8ca884f32912c53da493af04c5332fadf6ab20b22d21dcee283fe7ecb5cc1093765866d4a94269f166ffcc5ee10d9d15087f4943315e561d6b93bd5323fa25efc0c3e5155da754a51a3ec296548640ca986600f7ea94e20ebde0228015b9ef7c4c89a71573d9da6849efa4106e05018b7b3f5b96bf598ca08bffe5ea3d32e64574f384ad070a8fd1d604b95c7f1076dd38d386dfc58d3bee211251043a8a98656b305dc1a0dd6efa9bcb673dca8016052ab978da0eddba0187ac851be4660cd610cb626cd14fb7c06e6b9bbdc81d829b5da0325d1609c2651fb38932035d332dd1f4cccff6e4cafe588d317a6c44b241ba4cc4d05e645b7af8d6f303ebe7a4c33ecbb1e252f70098b0a45ca7c943cfcb4b181f11123687cec3e3699a2f453b712f516a68d73d1b92d85a6c897b6a26ff941d8e39f2747c96c83a2eacd34ff28b8ee4a63050ee6f44fbb47a9fecb891090a6c62e0664cf5a0a062aa2f849d5adbd8c0e42c0de723018a723c22a64aa17af27debe0171312ce52d7c89c79e4c48208ccbfb0894bebab48710ce0c6b298275ea548edd9985d686f544c4008cd617d142af29f86bc9e54da383427e3935c11926675e7606e13b09d9ea1a78c977d472bb7d2ba2ac1b78954b43aa6502cc7f824feeb94d48a802fa7ec71915751af1d54691eaf034f7c0d040ca6639f0563906c42303c2960a21b790242ee8cea406269124967ed58896c411994044e2a70c76a6729ffeff83997258aaa9de9368c562d3974ec0c8b307ef3626d8a98755b5eaabbfb3ce76c0a3fa8f9ac1c745d51174a053efe4bbcddb555047fc060563df601f59bea6beacd1787bbe4c3d64667ed11cfa21127fe87c7c54f67458b30cd6f4d80fd2fb1ef9d639ba7e166b3093bf7e7f13ae7675608ebd4760de42ba5bc84b401ccf894165e01d1da8e84d9981784ee83504712612ba2c3dc89e9f575d130dc73b2d65b90767b846834773a3cd06bbdba59f3c07be99d823852873f07569a4efe4a448858206ec65d6c11ab6bfb27434f2131387bcb2c43b369936e168f7e5dd5313d3dd993472f8a92cfaea63b4960cd3f12cc7626af5cd2930dd262bc13af2c61be2faafcedf96eaf9cec5d8c89f3ad104a1f1eba833b86a2346bd4c06fadc1a3affaa72f419384ba2f73e53b71c185efa97914f5b695d1ef7f2b18c2c2966c4f6ef675724b5e171b0dd2268a2ed03b91a52b327b205e088c8425c87c45999cfcd75421eea17e128735417ee644c540cfbfc41baed229f21b5ad6aacbe07cb1f49d2ba96195c0f317e4d7321a6c3c86b393749d375a46c760595e7a2ac2b1fcdc850b714ad6055f2f4023d0d101fd04d47e1ff84d143fa5e78b6f847dd0106f77787e5a539aedc9148d3dafd231ff3cae54f3817958a2f0946b877c548480a4d3d13f4ae66471f8a51a78b849d3966d883db401ed4c62983e0ccefe56e5d3b5f7d2d680f6e60218c27a0acfe36fe3a1a0f423c54e9769a2c63dea3c08bb127dc9fdccd374e5a8c792542163fd6a13337188de50b1d793aaebaa33a3f5a6970b1707350fad5c55b5a0786f3109ee3c6e33cbb1fa965cc0eaf75445c6ac3d4298ae5fa087478f8bd32b49726e3d21fbaf5625a3dfc0540fce5b6db2395d847fc31ad64ad389711015daba7c0e3598783ba0ae16eea1be9309a9997228f01f1e58f119a1249c03199e1c68ea9fb27b75d40a176de47450b7c1b402010e4b7c972408ae4a231cd00989449d85f3493403b43bac390081e760ff33de1f95086bdc98d1420386665f552e5459f688ca627b7a5917ac43a75553f12458197f38470ee1d58811d24192c9e8b42dab031ab503a6aefded0db53574e02e02eea602affb4f46186f49ef494c248ab92f25832a59286f1dc92a8d5e53cb3a0726efa1e65272e18bda2a81e6542b82e83e2ece92a4aca4d44b19b2c948c25aa862f6c9340f8bfd5482c6631df3b02aea60d5b0f70882d237e1535fa58c758a7bd0042e3951ee014767d91cfbcccc3fe8d98ca91d5f0816beda1af2f4b83333b6708f3505a54593e2a1c03bc47d1af9f48c95cf76bb94cf7a25b498f651ca03a95b810ee4086abeaf67f5463b25b24b1ed38ce50798069dbe9b260887479dd322eb3156dcb6b0256143b83a51f8295e4be8ce18763ac98bf28d19e7de4484c40e05284f34a157f1d16b3e902867a9b20f788298714f14e660d601676f7baab2d96011d6018b657308385991bb0bccc65253ec468b034dd410ee8cfa8b1327bf6b7f21bd9175a6eee070751b650992cdf109e5115a8a7b722d8a6fcb63ab64f08fb45bb386d83044b19902585220ca62d3a22db041a0e33cc1098d3f1185b2e1da9fcf84a868a39a5039acca7d5dd56afa6e82aed52ecbf40246ec38b684a43d3f4b40d1e48b91bbf57949dcc272163a94fe2aad447906d4ab9698e76da47f01e234f80cf360c67e08010bfe7e056268f118483bbb45b7ac676ee8c88642cfbbc76edd069fcc1bb83201d2f93cc11a6c95d143d3a9a520536a3f21f33f2f41c780968c8cdc2fc251058627a259954ae8d5abbdd69a3561a8a9d4c8483940f5806206f017b99c59b4e345b9cf002ba75c8b34951db4ac89cbae8e941d9a900d18d2abf8bea9e966640d0f79d329d21803a3553b0e86dac3299cbb80abe13a302d80716e65174452613e710c48597dc09a9443155b37268a2f5a53c9f943d4c91e3aae8e01f4ce527111b3844519eb02be0427417529c923d582cd0f8303cd584047509a6f72e15d600ede990ba54ababfea3bc7ab0188e587c2218793e007c688e3a9aef2da68603ddd0d3315b5849dd1f6886e3607450d793c4fda1f9dae8de26ea3448a2b1350c22e98255a2ddbe37a712bc74e141b6ec13bd717816a83aad18de262c6c9fc3a7614bff10970bc07e526d1754bdf137119791f81202884f75ee1d4b5c623a882ef7e711aa3da6120753a9a9b03498a9ce8952b763cb1bd0896115a4789714aa234009dbe280f8da0bad5821affc2099f411abc13c43f924ff847e85bf23aa20c61616165ee13d9f239e532252a6d315523e6b8cd0822540b6e540ff9084357e08555de0e5a774d372cf07d0e6ae50a00fc9161ebb14ed0648ec6f5e4b12a9779fa7f85142a56314621a1d556a16fd1292940e76671d37bc6705ff61c84f9d0d8741de7368f22e01cdc22cf6d01408aaaa81da8403c04f46c6a9d6e1e937b6808be1974644a2a9deafc3fea4e5bf6d0364db758fc5c54ffa0be171c546660b38bd405ec15ec87997f4fcbec3307e2f311341f2f547020f3bd744cc3676ed474202c1fddb748aca8c0dbd4eda713e8ce7261dd1f82891cfdc5e30123b4bef0410f545833db37d7ff55334a3e5098fb3ff225869c40f2833b205125325e24efaf22643e6f114062b4f21356d0066d9ec756dfc65904c52eb9f2247f3327e5af2a9f358fca9c94b175a9fb73d76908698a973f3eead11ef8ab15e14756006e856ae4b1172ded2d2bb1b319fe707c2fd1394179f4822957b335e2c7b558a59a9f82dfa4eb7c97d8a2c0a5cc4e3f08002f79f475d654f97dab91fe9c5329552cda8c381d096e8ad1ae87cacda93548a7f4252e9b041e843ae52ca1371e152b025bcec176e0341643ce30f0f0468c04af21706d84ab75fd2fd8cdbea75895ff702e1cc5985cc261d6458d22624fe10041b06822560f4d6b0e70530f28383a477cb8cbb970f4e84257649dde20f6003fecc0e2f89854c567cde65151137caa4984be87cf0898947dac5383a04ba4b46812527fe971d1148c3364b314873d7a834f9f2277d65241dc65b3348ebc00d5832938017262488ed678ef83ed63e2f5f2a1c57fc467dc15a54698c3b285e425852693ea4bf3fd97f2585c1b15bc259f919cac386fbe6fbe047f9d7c48271247f2d1cc65f1d670fe508b46a0f128cbabab03de396a74a2076c3f12238d5f0137d45fe73fb0dcd0c20488c546384e75cf0f6b7d9a42abfb853a0ecc50bed60f5b7a4b944594167c1c80f30c1bbae38673860e6e262b95882d8bae09ae9ec21e03e55dc48aa406a7eb765d8cd0715d6819410149ea850c2d3b2940e374886ad9d032916137ec32ae5a51248dcaf5a63df19b9b97d5d9854710c721a5ba8b1e85be96294b1a8c68a493d289c31ea837088e73783394d50012e9b62d11b5261681562ee4f73d27ba34c8f4d1d19af316b37714c6293b6adc0b686fd45cbd2e294b3b646102344ec87090f3087a2363f609cd3eba0a2197661a59c503e2c93c487e9f01bb0f0980dda88189ccb40f53f61440b7adce37f8083603310513a0eb6483e20dab62cb61db736c2a87cea0c2df502eb5cdf7c9a65c58a2ac568a1ab11a4a0a1068d70cb6d62b874be6aa101eb3695440ef311cb99f3165fa5ad107c7c6ca4d6436f4c905015fa53794971d5a0ddf0851e1752907c197fab8ed20b859945cfb056d0807a40d29d167427cb35210215ce6744a1e44c6ce70582c2dc0c6000633950d747ab41faa0a91fdac0be513cbcc26f71559a96140e81e79f58ab2524c7e7f56480eb4047bf16379df7dbdc02539581c72edf0a8108714df8b6d5e112ea2bc59a9eef1848e5c1997789f174c965b7890dfe8300273efe46b900f2ca5217e3106feeaa7d2eff8c5eb20a1dde63997bae206a99a6c4441a47bdf37778d695108311d0c1d79bd17b2687e4ed12349c0fc21543507c9c0b7f8d5287d98fd3c233ec881c3f0a198facf4887f40e46b5a4490a8151767c757e1e60d83c36a625e14f62fe9510f5f7215626041286a514297dd4a81a6bb6cbb010a75561cb27bb4858d98ded540362642e1d96da92b386de2da453d8cebf98962d16d7df22000a89022a73d459c2283662de80acf2dfb107f82beedc8e5f8d09847eb9dd9f69b899bd47b018603582fe5d8691d3d8c0916d0013ebdd34457b5f0a9043cc99031383ee9b33dcea88ee84f7c50f118de72a265b251db2b9391c1a3dcd035e264c43e60abe03706e65ad040188a9c564653ea23182dd35b6daeaf206b4ba19b5042db72d61d8e745e5dd16d085fd80c7b1fa686f5f04624b0aa050e071394de27be8fa4a1626017991a4156a6adf2177f715786a1fbac0513cf077602c7692575d97f14ead2108f5210ccf2aa51bd92b1ad470db0e0874b951993f0086bb4c6abd2503996e4359eb197e653c11841a391e350d1906b1d76c430c7811980a29eab99802dda8ecf93afdf500037da5a9bee539a90efc0a908d54a4bd322d39a3f73211b98834a6354679951d43728d8e00182dc41cdabc5c79f8b857f2de6524e7ea85a294fe85cacf85568ed5a01d1f04998de868a66d964d237d706b8bfa30d324d982a9699a31962a1515a5e9ad09366454f4cca8722653a4b4e4329524f729a88f29ed7dd042b26d161faf5fef51a11a60b539e8ebb99ce6742999959546ad063039e49a4ae047a2fe672c833e01278928ba5ba04213c91dc45e7c7e89fe3e14ad54a48ce59e184b03ab6ce440a49f6685b1290e6eee37baa673d4c6b516171875f20101234fbcf30aaeabc067b2e70e7881e9230c22c4ce3f2dbb45f657b5b3a4a3a99460de6b6a12f8c281ca4f80707c3c9ca67a8a3eb01264c07ceb9e08b65745900ffc49003d60ef4df1a775fd56fc6991a5045fe290fb30b1951785a0e591ffe6a2f4aa51df0eeef37bda309f16d444a7bd0170055b4be189189ab31a1f61e4a885d8c827e247d404d1b78d03935dc1b1e45db14621e2af5490c46c9389f613e6c4973830c2c48c49161733175a2234cbfd3fc715a568396b674615d2cbe0ad714c9e5577bdb08fbddd2f730845df7122e99626ed0fbe8730eb0cf0f35d3fc00e0f2358b3a00ae3f172aae61a39b10dc8cd9efcccba4c3821760efda6830be6e4de1964347f8abf2004d015eadc39d197999cd676f0a68680fe859d516d5be79cb6741087f860541645b588be78326d9270323d1d8bdd93d2d195835dd0a96f6766345176002150f11d9c55181b4f0c8057c6bcccd0ef09f38a66360932e66b69010abb19ead4b41b27032470f2bf1d69181f82a66f5e0deaf107b44381b6b14b6977fd0330f62496afcdc8d9f907c83d38e239d80ef97d7fa2428dc797d4930bad7ac2a3d12c189f015c0b05de2ac4b80c58305a19a53975dea9997e41dd0df956ac6be1a4f456e4ba997e216f57c4c62c7f0d373dd6cb1a75aeea7c9c567a5f8c1260033100de67c815fcbe9d9b59c35910220eab0edfc4230d762b84ac35bbcd6edbd6b6973609d9013e0d750c390caaf95196834f6e1b217266a5641088f45a50415b4b26dbe7c1f40d35c952e92ba5afb0f88ae9084e52548ac889f1a6f5b8c9f1a51c9a03c6f2151696e7c0e2b4f5607196d366817917c51b8c64f7942348911b1472838227280be0aa542f58000063d4735859798987befee04a251715c74a4bab4af12c0880b936e3b663798ae52c5aa4ce72162cbed25a4ce37b5db468c162637c28c6182f8b956a831200eb9b07834261527e455eca9e2ca53ccb338863851ac47bec914d7ae5d366b42c8faa3fbc47d48f7019853397b31c8eba54d2abac2497f48aa6f47879c9d32b95fa839b8f7735c77c4ca9384a8f2cb7499d07e37c4696a4234796f4d24bd5466716592a7516a967f12d4e13214e9be1e2f2f0046dc6cae5e9caca5b3cbab82e976a8e95b3b0acacac9ce531ed2246ccc2c3e5153f02e6d4798c722aaf3c755b8391a5dea73b6031a613ec28873e8b60338833a3603368f372832330c9efa9a7f0112eafb8ab367c389ac8125be02c07164c93c3592e6f593eaa387260c12bb76596bbf2ae3856cee22d78b8ccf2957b84cb2c6f9b1cbee279e5b1dea061b90f97593c07ec6e6059700a672c3f7ac502d3b09cc5e5472c2eaa3858581400736d860d9a15f7e16e70551bae8a0c059bb9a02c0f7364caafcbc320bda24911d51fe6dd6bc591825bab1ca6b49f6b348aae6ce5b0f422cf1cf24c713e354f9cad60d8aad963af1b13c7340b591beab6bc028b54647917d4ab28bd7a976f9b5eb52ca5ce739197d4e493253652ba31a8c180973a0f2652d15ce04f806222c35b083f82228c63040669170889b40ac2cf27d80ce264f8be811874b03dd852d9b99010f9e59212e20ccb4efeb89aeb9d09d8cebd767b6a33da115ea06eb396dc302dad6a98769d181f7f6aa0dc1e8c8b02259045a4a575a2e4ccb6e40bb713b7e7136c067720cf83b1e18628edd2b28d37f06478a425ce6c7e3639a67b6208969822bbf7124f72cb35998ede7db348475407d75a875ef54ade359abe9391129e268b8777aeb58b98073ec2e58769dcfb8d75b0dc130315483229b728a828b264892619e7b664899d4c47346b3c58d898cec0ba7889332cb6e4feab79b73196ff6e165bb20ead6a3f704030062760c20135ec56049476281b7c934d4a28df2c8295ef37d7dee5e1cdf1b0f7ac389d609d4fab9a6bdd318a5a3f18d0d6237e04949fad3b718d467b363afdc9d763bf38d864792232bcbc3de4adf7f5e1725f7416d9278cb51e8475514cac41dcfc6c7cbdc350a8394fe79c38a6e3cb3c5e9eb8edcd66bd3353ebd7f5006bfd0ac23a8d0b836dd0b527129dbecdf763bae1eb54ded6aa0b9ec18ef0683499606183404b6e500c4127e3e4965b96f19685cd26d898ce6ed5cfaf878809c86ac34995994cecbbe8c24f26d8ee3c99605da65f5df5986ca1166535a1dbb7ee73ab323d69a6a85e1a7979d05f358794526293ba26d95d4e26387f4c6e605c8df7538c167af23b03de83c1dae5d1c8abdeaf439b71fd1d469b61fd9d5a97c73cbc72588ff196753997259e503a961c71c6810c71fb11b99192c9a435c90e01ad4d18ff60dadb8c30f693ef8fd407f6d1bbf70e9f12ba4976f41005a1d3681c17033b27ad720f39280fa70f1b28377c2e8adcefbdf778da9479496830b05dfacd84889b122c8f925e2dc158abdcc9a731558ece87a272b49d6912393e7131de29ce32902312cf49219564eb10def1ccbfbb27239ca14438b35d314f7e987bd2435e03a7b9bcabcac44e417bcd82fc2876501a0c25d8ac711aa7616b5156937bb87c5d77dd75a8323c76efbe0b5d7b4f94299159f2c31907b263d22af74b87be1dea5ab71ea1432898f0e47ec8a230952767a96cd19b614fbe633b8959e443f8d42a2c4362eb8e6197c7eb1703041115d891c44d101d279028e96928bdea7a7fe020f41c38c3d3ae397a68550acb40a1b08b5d8cf756ef62bcc7f45c623b67b03990e165f42af4ce30e21e2c2b88c664f40a1e3ad998e8e4be42b1e6e8433ca9bc4dc63b1561186c339c8c5eb97e306627ccd61f7a68d5a8ba1ad8ec259aea0f4798ea0f2379f7520da24fab755d6dc10d1719621e2e325cc15854990bf37019be2c455515858517d51b36f37040f99987fbc9508a4472ca8055a5daa86fc66cde7a192ab144b64e2deb2da1ab224f9c41ac06019b0819ba5319218477cfbddbc652c104fc07228c7f2e53658f7a304c58ff80b464640255e303f01133316b7c603e1787833e243d12d6aa8761abdc8c1028bd62e9bb7783a2073ed9b5bb192150948035af214e91dc78ac90caed892a96c8a55229d4a150a9447ae892a823dd5507740dd369e3c12ee1c4124562136c86fde4d0a809cda53f5ad22a268e4608439dd11774b290339a42bf44c900c8ed086fa822479122dfdc8e102506a16bf5e4e4e7c6f3840e447112a5091c96e48c04d4abcc32c96da7e85523e91aad84125076a255bd130a954e4ba552c93961243a695564d2aac88484639356c5254394ecf0965954991d3e3364098cb7bc5265607c66c88ecb5b46551997cf0c412280b7bca2ca08e033438a00e02dab5419007c668811176f39a5cab8f8cc101e1ddef2a9cae8f099213a2fdeb2a9cabcf8cc90240378cba52a3380cf0c39d232a9ca10e033439c68335a56bd655b65549f1112a5cd68b9e52d8faa4ccb678604e001f8cc10226d46cbf2f233436e8a64accac4cf08016a335a7e7f9f111204df72a8cac0cf0c09b293af2a33fa8c9029f2ac32f43343eaeb6786fc68335ac68e7d66484e9bd1728e5546f496afb7fc94d80cf6341145f44374d3d3e3e36335f1a42ffe7de82cd67f922849bbf4513097584a6f354ccf522cf32dabbc9d746d109065cd3b552e36ad34d8946b4f251b1289442299ae9da2742d50a9142201a56e955eb229954238741250a72c2c13e3316dedd88c0464814646a08890d41b3e620e1df51fd0a62747e8ee25d214d6da1226019182ac0889abc1a457214c03d3fb344875e0e6355243a4b005b22c128e197a5526d39169749cf2bc755346735a8b42fd2ad5cb8bbdc92d68e653dea592a563ced3e9743a9d4ea723c4c1266724a05eb523c021a86453fab1c242d7a716b756b028094de8292d1e4a69f1aa4c8bebf268c99cd6a250bf4a95bdcc917dab374ea50bdb9d6e96816c9570e82a8f79d9cc2a5894a4552d52444a72df7a0c374ad22324bdb2ec14edd22ec66d164807b6646359a59bdc24208b343242fa2101b5a00c0464e1ec22e2e3d3c413d4754d3869e2c91336d4c44f0db279a6091f9f56b5dcd3d3d3c40f29c8a76148404d9a70d2c493263d3d4c48404d7a82e6b4d6baa941d64d0d7aa94132ac9b5028140a552847f8c2cf23915e4357a154292a509d02fbc19e603f374ae6b41685fa55aa17194a6cc5a941729f5481e47eb5c9b459cbc2169224b9537e223d753d90ba29f5964324520aa76edd124eddd0cd38609343a5a742f7f4d42ddd6ce6137622f7ad23d932e20122399b3f412650afa6b0360a2445e9d50f0ba803491690fb970dce15a4617e58a02a5a90fb17918629ed4801f460bac66849af320b9499f46a427116c80645e9954de9ed522ae109653e49812501d9580ffde8d54daf707ac562615112114fab5c86a20349729742dd2b1bfad3abce229e27bd0a7d8a5e85b00849ab5a9444a4a4034eb8c80d8a25a264ebc60a4f7283a203440a901b143e4079fe4c2eb41916460a8255c6c2a4297e26d065d32b972794a05e9dc0a69c74ebcdb2ee80b465f50e403594d801a846ead69c56aa84a5983f3c39b36e8ce46cfefc2842020acd277de4e661afc7861e7fb40a48a8ddf7043bd344949926a2dcf4ca9a116253ba1309b684f52ab31e8092ad27b96f9df24c13517a55a36359f32708951b143bf8c94ffc3c79e2c7c9ca4a12b974ebc21c2a85422ba83ad3c4144d9a6902e867c50d905e65d1084e1047e347e569335a6e501e0c90cdcdc398f40a36ac0753822da153fc64fa2453292c8a93fbadc7029259a126b90784620929328cdca0582249a6f474fa6a08877abe603398318b8d9a4b6fa112cec9a107907e4a39e9bea05635b411f2d3ab8e22b7bcc39d11f2a344a5ce0c51f2a4570d456e19c69d11f264494a9d19b28449affa89dcb2cb9d11c264e7546786ec34e9552bc92d0be0ce086982c454678620e1e9552721b70c803b2384a748a9ce0c29a2a4578d84dcb28b3b23448911529d1962c449affa08b9651dee8c10273cb6ce0ce149d2abe6c92dbfb8334292e88ceacc101d9f5eb51172cb03b833427c9288eacc90243dbdea22e49609706784f41ca97566c89125bd6a22e496557746c892214e607566881339bdea24b9e5963b23244748145a67844471a2573d84dc7200ee8c102770427566080e925eb51072cbf2ce084142e4aa33438814e9550721b71cef8c9022436e669d197203a4578d24b7fcee8c102040569d110214a4570d84dc32bc334282080992754648d04eaffa07b9e5d19d11b2332448ac334382e0f4aa7d905ba67746088e9029609d113205915ef591dc72bd334288d8bc3a33c446a757dd83dc32766784e8fce83a33e4c7915e350f72cba23b23e4488eab3343721a8c96678418e955ef20b77cdd19214686006933eacc10200d46cb46e44e964872cb1b34341878f35ca4e8153cf50d1519168142a3614123cf25fa44272d56bc57624f9b31df2098d35a1434327fde53c1f3c71e410c1dc8293843f5bcf88b93023919324185a3d2e1a5cd6819c6359795c37611211559e95594d8090270d8fda9020b830c03f04cd640959fc92459490f7c99d0ed6d69d5ca532ba4bb2b49d886b38f01b899b351932d6e6995d59cf544adc158c1523247e2c820ad82bf9660b1d315dc1a09ebdb32e9bdf17559dafcd8e1030924a395a8574ec01d78a457f541b881024990c471ce7e478f36431e1e036d855b6c4e714f39beafa9dc31d27517807b0bc5302055d69c7b97fac0569917aa40d4d838bd59854544d008d4312277241249443a218f14c16e4736302c82411da883a111414825d38b9617a576d63917c4b36fd586ca25119d223817b60a1f1fbb46f4ca3693569dbaa7972cb99460eb43183e3c2c0291f48a6749af5a1c1e3ad1ab7e920c95e49d0c21369da00ed481451e6eadc238d381e51f01b33d8f51b618c7e2235c7638b377343e5c963fa48da5a4572f0e6f2d79302d5f41ca9136d8057061ce7381a7a4900d7b77036b318da5c198f49207d34866096b3208ec1780c31c009c7120e3c39b56c1b75c08a45d20ea99c371d22a1fd84b0080c486953186416c60e51de9f0ad59cee23484f592072f715a65933a4c1db3c9f0b30756defd777133975d9cd6872e71da8c233fbc4cd22b9983cde1ade5702f2cd22a23adca2b24161787396677d76024ce0b551989f36076601c1c898fa14eaba0e8a367504705ed8278777ff587771c1944e6b419edddc5bcece2b66c339bc3ede15212273bb1b8d969e5f68019759764a87271327ccaed61ed98269c59f8227ad587af80112a1d7a253afc4b0fbdc20e8f00a8a29f0f9270362dceec6928c61ae76d211669dd5516899d05742800293c71f3a4bdf7de8379792ef0967d79dde0cbc3dd43ab2f5cb02afceb877d3d6ae081a770caf85a5a05ff8420a257f1f113e821e277c427394606f44afe17aa39c00a39465413a2c1888762fbf21686ae1b561907dd75790821a218a87cefbdf772ebd02ac94396f299954d0959ba3417a96a30e4e361a6cad2081d5d815eb52798b8c9f2ce464e213f84ca9a573d180a341779314c3464494596b7b0c4453418f29d27142b1d0e1352ca39e7c4a6bd08b32c13b73cb1eb40c9607715abb38e46efeef7dec32ca1d3bcc78760ada127ba564dc6acd1e7cd60760a8dae6b5e2291e8375a166196d169447f1f65eca13b12dd6ce6895d079629bea8e062589fb7255b2e675a8e88942778024e8c31c61863a40768b163c7ee18e3638c31c6d8130c97b13bc62f58f8f76ef7aa405f7e58abe075c9f06ab3c1081591f182801e84684a9a4fdbc0093b7374057b19edc938406bb029c11da0b9c01fc12a21c3cb6830e0a7176454550b74ef09189d732e66187c13033c7cea899b2932fc4b4be381031433f8e41605167c9c78f7c124213a866dab9cab315f13cd1c12b1c8d075a072e82e4b22cff9988ed6cd6ab245310cfb8d9631cc524f83fdbd5f93e50dddcc470ed9e459311aaac9a1ab03cb17c644e062c4ec94630c0ea490931b144dd8c92fb941d1049b4c61bbc0c905fbfe5ec35cabe08f33031541728be20b39396b236da49de855cb51b821878aa01c79f28b58c9ba0d83f6a65b8f9ff5079365d9d2650dc2aaa28a2ae040037969603d965ccd615551451551b2c534487d5625503570207f3acda59bcd937c4d8e5546627aba2ed3962f5df753cca7e8e012237216af0395ad28c29024b728b945f10523d9d588e9b4685cf22c494d6033e82367a7c3259049afecdf610f6c02dfa1935e850e4fd0caec243186a4b1536bddc9924c80dca238831a569c30cc966ee54974aa278c04f264d35b62c2a1fa43289fe4af7a83aee4a996a024234d2516f926231f9207e36c6c90209118bbf32ea771a6edc679304f07d391c96432953eba345823994ca351c944c234a3c7742d81a3617a69742c85944759c5c9a5d24d3773d9f4d24d984966369f664d12f2542ae1d363de299bb797c67425b23c1d622778bac52dab4172364b18a619dd64fa69963e4f9738ab3879de47e7d1a5bcbd7c262da6193989b379d3afc519c4e67c2e2f0756fa098f6ec22c4f0785b3c922c7e91267384e97419c2e4baf401c0df992e9312f9b2ef5819dcf2a4eb6a737bbb1e2a6d315b68d9cc5ce645909d51ba7d39456fc3a954a2596f936523a0bdc464a38d38182791e85dbc869c534f1643ac2b0dbf268341a8db089255655ae6d581ba90f09dcb1a7d3e834327d5402472373592431e6c3caa7d2e53389ca274c53bae832e2cc39193a3d621da85c3a6116d3edb1ec21c92fe7b9bc4f79cccaf1990f2b6b20d9663a50f974d23378239ee684478f35082cc7cf7c7a3f9d70e6c3ca1248c6ee725ece89f4cc46f9917d2355191bb349964aa59772c9247a05d22c6949d9401a06d612381a1527d32a333fe94555266461185672a7d3d3e3cd50b974e5a5a77ba3e5d3bbce84423f9d307daba7d36fb47cc22cf634a75bb798f6c0b2e038ddfa095b6fa28f6c8984634d1e5d1da82cc2b5042e0656f115854ef35a9167a55da2a02d86a56f51f50a5acecdb7461d36b560b33f02d9d8d884a0c6fb5fdfc19fa66a19beb5d58d3278a1a95ace5eb68abc98805e9436fbfe825e18100cc330201890b7aa4911d95dc547ccef6e09a5d4fd5de7a4bcbbf10ecabb391d8473c2391b273b590217e3bd43d940b27bbf042e86bbfc6b9cf9a6d58c50daec5bebbf86f5bcd11e123e72eb1843c5a925a8406a092a4ec5b97c2e2a5c4d2e2a5c3e974fa3146b3e6e60fb587e6f7793331f96155a3381a6cd88c7814f8e6faf62496e671dbaebaab8b064c1d1ee7ea3c9d6da79b8fc7e04ccee3c46351906d177a1892d4c237d3888691e9e21d7362fb127471f07a5c1000535d54da42d2d90349f3d20a036c361ad9a7f6808f2a8804be40899c851f5806a5a5af53a7f22f61ff9a771942a096d801c6e9c5d62967978d5c37df360de14ed121fa3e4784c841f50ab668e7fbf5a6c9d5b71d639115388d99b87028a58c32e9bfc6e727cb602f38020755566d6faf0bb7c79ef01391aeff12f0d6d867cfc6b4383a18f7f6a682becf101859ead7091ad672ee2b1fb9aca3abd5673b1fe6e6b31ac6c45b6240b59659e2a3fdb601a9c7f55e6c1ae36fe70df886962cfc34aa09367e4b6c4e6890e3af4708f38abc999946f199b8f2863ecc777881b7cb825ebd060e480bebe9009b6e53e84ae5d00ffe0ec150dd66644d9307b6f7dd73ba08d871be59397c728d706e3b2fcd0ee01d665d753d2ccd74bbce9683837d886b5b7b7235c8e9805c77b6cb88a607724f19807f364545d75d8b06b035c6e38891cf14584c7bce79a8b7f6955bb6103850baec0e76cbc9b8c73575b69799ef6bd26ba7b875671401b9b59458671b8e16eb9cbbb5673b0fc10ef1e718698c728bb1acb392250d75a6b5783332449a09341607b09579b47e04209dc1b9a70d28493267ea2b4aad918816aa828b9fda8824d92dbab60bbe59d49059b35909cf9b032fcb3ad21963105278a10d19f52b00f67eea63dc9106219b349732ea749c1668d27c71bfa5e8361c9085f6317c21fb8192136bd12f223b773773e3af75dbe3e1a36ccf243fb7b7be3d61c16284bbfe5ecb9f575851e0a5df0bdc306ff81f65c9a12ae062af16a1c843794366b5bd5ce39a8e305ee50dafab43bbbe65aabee0d0fd12ad7a24c89dc06da78b04d72bf9578e048768f1e280225b7c82d0a2a96e4ec71c6559d93f55279e9ad789b455b72bdd9fc9b6f337af018e52360c69ec5d71aa3d5606030aed73b5bb2bcedf545b6b26ac3bd1ff3aed666f438023a1c6b0ed760cd11b3f8c6240d0e775971b8470cab4c8c98cec0f6db8dac46c687cb3ae4f6369d60798cb26b305ceb5b83390b0ada5a32382f129f66e4c274e89721745c7b085e9d07d3362825f41ce047a1ace5a1c1c09ef932ec814ff1c9e1073e83507263d717ecbc94107ec218e37befc139277c4d16555badad5624b176d879d61f4419e218657862c1d139e3403eb52ab2e078395322bfec327d2fbf9b4d98e978c15ee4d168f4d9306dd32efdd168347aa3c751e8735e179ca5cf630d63fa9499a3c7b4189664d782dc78a0dc64faea0d982174dd20c49906f2e8f33007ce11e9a3fad1e8f6b41511641ed6cfd963c4038628d9667b6a229d52482391088e7418dd99a7136ccbd669154128ca01e1db68843f6f9dc72a8ed17cdd36fde38674fa68347a69f4d3e824d24723d263fa54ba99a5b11f9dd61fea470f551c1653144645a6a3db406eff689b1e1cfbac6de05d0ed4e8ca5387ad583dbd1a3581fd793a9a37d5aa39e20111d02a37bae83d8238f4aa3fb89aa37e1ee218417b75f27ccad47930adc6b4588331ef046b6f1d556d744659f8d19d39d61f46d99e92aecc3c6108ca8d0cb9f1840148a62cd81482cd5c4e613308d63acdc187cb34568b28b23275fd5a94712093b0bd2dad786a153c6dd1aeb58022d8013ee0d5639e8c16d339aefc9e7aaba9185fad9eca76d0387e6b9819c7f8a7715bbb1c673353fa19b7b50b7dcc2bc069ea3bdc7a0fd3a4bebaab3fc4f8eaab77fc5793532f957a4ca72ecc57f7e1b64cf3be4a1d3ff5df17a7d74a5deb7ff1e34b6361fa7e0097e5cd64dc003fc0a559d14b9ced7019d807ccabb7565198efe0c36df9c1e0ac26afb00ff7e1c6780f176603dc4c88bcc30b70b31d7987c79d88848797d39797185d318f1dd9c7cb315eeb0f2dc661c5919263e06864871b754060b3a893e3e3ce11243cbdfae3a392b8a4573dbd7af1f87c727c8c4c7c9ce478f8137f34ce8b192a9b6c3665339b4c0338bd659d4f71e77a6c8212d90a80b81377522e7a7e6468ab013cfe4171341e1117630c0170390c9ca154d7016756002700ce6656b1792ef12ad9e3c9cf0985b76ecb9f92c73380db9a2af56743c4d170792a2c8000602239fed787cbf82fee4fa97bb1f2d40b0c6f1a8c883d7557dcbaa8967b225a75efde3addd34d5a4707003a73b2b0bc9de5d009ebf8cac88baa8c757dc0664d7f7a4971ead4850b172e6e59d2458b531797b648a552a7d77aea6657934cad469fa2f45e3eada2d6733995c373b82d75b179596ed64e7abc95b6e9e156c09b1e567ccacd7ac819bcc9201772bce966ed2767f0a68795b3a79359f66630488e6f95110f06d688df016f50b107067464d2b86d0867cd09ce0e9dc871e24c95270f6cb364640c255c4d8cae0351ece4371b17b21343a322bb17d1663837ddcdb4f0d501fb8e5da5c38b8c5e496be5e20d109c9c26d23a6dc47a74168c6995f5d0b53ead2bd8ac712117d160c0de097aef04b61f4f63d7e4f8fabdf6e0e14bb7cf153a3d74bd3d747568d575bd5df32bee7253959f6e56fae95474a71b321f5816fdbd42fd7a8baa57a15fa8bb941b2d9f5a65ba4984b156994847899e9262b99b52ca75a0645252545254442ab40716fe58f41537abc92b54544a2a2a2a8fe952282545e5a23bba8a68845bca453714fa68a4321a3d74b31a1e560e65353994624f9aad329990085da1eb128d2e12bd9028845d8757e9d74fa85e91525e3a4d1189526a644c575151f98d965530cb8ad3a85c74152cfa8adbd7e45068c55539d5e451e9a5c73c1286dd5eea032b7ae8a3117656f4168d44217a85ae0bbbb050e83414baacc370402f5243b56a9e74b3d02f7cea36ad8fee2036df60ebb1939e3d74b39487dc60331f58267df64ae5f39855219552ee8d96534e4b778856d1932e11ada2240c44aba8bdcaa53eb0d7492f955ee92997e44aa41289f49248947291e84ab94cb765114974496ff532954a27921391482f5d749148f4eb225da297ae89944331ada2b7376b4d32a5d4e57a5b535d3519c32a7d365ba6d7f5d0758d72d31ed8f7de3231cdcb074221cc86de427f37d5aad06948c7b62798b8b9b309856e44af52521c28147a0b852e44affaa113117a11bd9a0f8542a72fa18742a1d0cb8329a2b9f443a17ed3f7846830429f506ce82914667b251ffaa92584691c0e8483131e2c2a15a98f6e53075666ad93f09125ce5a3b6c136b379bedb576f0b2ae877e3d74d51f42d3b9182f2f0d26560265b5765d9806f3d7746f3fc46cdd6cb6945546bee5add6fab4af73ce5d072a7792be2dcfd9fdbf772d513f72a2f79e75d1a5c1de138dde883aeb96e54418bd5724babb7134de459903f2427f08655a6f843edf9a03f25247a7ce39ea68e295c8f47034c299c3797f14fbf3d12e3a200e1b3d3ed381653a30cc122fbaf59707f38b527af7e66e5ebd514335081189743d9cb9e92e5c63924c47313a1c3463d87d042de75c0dddd5b71a44c8e186ff5c467736f7e967af30cd74601975f4b28c2efacbcbadebf5f3c299b35eaeeb905546844599470ee611a48ebaebe88b363b2058a417c35ce8559cc19a4caf0e2c87ac4bbe899e690a1adf5a6809d263d8257f3de87228ce1e930c31c5300ceb8d79fa7c6ec30ed5aad63d8f4776cfbbf52dc82d993043d5a0a723713621ceecc3198a52ea9cbb3456133947a97422f898beb45ed6d2594e3acb3e9cc19a2460bd9ee4acde47d3b82b91df1dd55ff017be9ce4ac4a3aaa415c87d547df47e7a077f9f2c9d511c991f2bd27310d7597f5f1f4e321e2b9740e0b5f54c0efba6a3a350ef817c4d5c4d17897eed567974fbe3e6fe90fd3942e78eab1a6f79a12aa37e0694abfa0ec9132a5fe84b3999f8eac0f61f85e8a3799d2dbf27befb9fa1eeb85a38bee759961b07b88f099d546e7d1e3c1793073a2eccc52869c75271bc534f0f5f4b46217151c8d88e1af6717a681f5d45dd75bcd216ba3f216a637d381b158b31d149ea7a33dc9f4f5a2ebc0723d3d4dc5219a39283a0fa675cb8bdc928a35c5190626b42084d092af6217151c0d975f7cad2f9f0c2feae49e448821da8ca624f7336c08211c12adeafb40818d799d5b8d786a556745eb33e6568390d9ba2c0c6f86e52432fc849758eecb863210e20b87be77b9b8822741517ce1c69a2fd68c3243bff5a69b32df60e9af633f95b03bdd60b367cb741d58c6fe1615564d375a3eb58a74eca25a45c230d62a92ca4717bbc9344da64f7b1da88c5d56197b69b1933d61789e70adf6b4561e563e3da6b1a7dc96ebc44ca7cf5b7fc2b05b55a662227031e64d2d63d8e79c17038255ac26632e9ba46b4fb442f415d787cb32f32a5774592626a92615d63a12d39a56f67a0cc3cece894d11664db78eead5e8d6eb6d246ac2eeaae822535719d269ca69b09f30f6948b4c37e564aa35b9964497fac062b431d7745ad3b242cf1ec22d45b41973e21f92c3560094e3294ccadb9108d1abd2488441233ca68f6e2be925ad8ac76e3309dde6e9b74edb64253a0f8b3aa1106e9e7a6a325519d34d55e6745df4d78599b0b7cb9dcad363e93aaa4ce9b4142a859a25843d84dd9d44d7f411fd4bb52a1ee995b3cdf35ce26d0f46dd75ed1aec733dad43d2e9152535c5ade38e8430ca3e43b9d6a2d063da01b52ade05b52a24e38e84a408c591e831cf5e52ce939cbd8ce8eb2b34435262552684db7ccc9a14399ed61b2e1bd12afa52ad0b310435612938b83eb2e445314c0513a257a75f5d65ae593a9dc26ac37a25e2748588981043f42a54baa18f42a1502814c2f457e971ce3b773a752e740a854af43ac5cdc5a053a5ca5cf3ba876ec945192744c5ad55eee5e547ca41f01a291807d7b12a332f77d149279d73ce3931c5f386cb40b42a3e25e5589571cfd120855e072a4427a594a66007a45de2dbe83f1c909d86922310bd6a1756b9672a475dbcbba518a58855c68856f1b89c17df3cbd2ad1b7574ba1db03026184cb41593a45e93d207d4c8742a1df683984594ea7097d3e84e74fb75e93ddbdae976ed69ee4d2e936677aabd765b2773783992a5b97632f47a455f1229c73b91c3558d83c3cf1f1c5f2e448e4722a682ef13bc8a81b39d302b2eda20948a03862a4c18e303b58938164353cac2c33257237c480c4a6b8b918f230c36e32847f77f046c5c08d9623bed1324442637dfb6c3744d8d1db5ac6306cde566bedd79bdfaab301e79be2f92b6495c0ce5b474d4902dba85fc1f1d877eaaa0c035a25dd0f1cb403d2ef41ec7e846060df336773bd07a18b11fe6895b349627b069ec1f667e22d1f5833ae1f60e39b8c6140afda61cf10909f0ff9c1c82f87fc521a4ccc73917f303b9eebf79e835084b9fa621e8c6ba2b91fed222f319cb530f8d07e60e4ccd9349f2c9d8d946f2e488321efaeb31982cd6c96a9b6279494eecacf276ea670565f1e70361dba4eaf84b5b1b15982fe5519f7ebb268409f60d3d7d5d12ae8c38856c1bbcff84b5465daba5895b1e8c32e190cc37a5699ebbd771a77ebcf599fef5bc4ad40abe06b95997802adc25c23a255f07a30735a0b7fd083e03528c681fb5565a80facbb9c755d072abbbf2a735d1886606b556644ceaceb40e5eb967561192f3d34764041f37dafbbeab05d83cd50730a156e2806b4ca6a4c625a05af06fb24b6b15e68084fd081eeadc5593044e860cbe99191dfef0d6c1b8cf7e905db77f746f30084ddddf146980316b45d3f0cd01358ff4dbc9954d87824a2b81bebf50cb29f2becf1f1281ded49dfd5d0cf7013d4c76a64ea4924d26fb44cc22ca5d390de27f54b0fbd265b37c3b2656fe9922c7b456f7554934722ecd6cd600ddd59652ccbbade5e2cfc767835ab26cbfac3cb2dadbabc6930dadd0f7cf209da5aca60db8b31c6084fd06615b0a508884719e216c5199ce456718c3216686bc9c8609b830085a7d43ae9da3de7ea8e2513f5544b316153b797a9548ab6462f0cf6cabe9d521749b65558dbc3d38b894dddd690ee0d77095db551631ff3e4091a8cc371f6a9db4c701e0c5c12ce624932e99aaab3c1ae08e7a67120bec1482412c947639766d4524824d331cc9482c244e068906e4ab1d8477605851d03924da691e9a411c9e69a249440225bd3318be5e44c741f9dad3d1c597be368d89f309c9c8946a45bd345278b01c9220c1e1e624c44839df4d3a943ad3c7340b08b4cf78433f8728c4cb7185ecc8459463f5d0459d8439ce1b0878787371d339148a26718907c7aa9745a6fb0203d746a510ea98bc5670ea2774e8a05b3109592648a8d300cc3b0110963f01976b372558eba2b4a25989303557472f23bcc8139f91d5a0b4756740badb534a49b6e9f8d7028c619a4217d746871e61c84a392cd61c2181ee14cf4d3b1f9de71e0b194d3e9b1deb0a7318dec4d2baeca85ad32e114cc842dfc083bdd5699934844128d2e9564d9ee6e20060f31ecf4b94adb499462181091c86432fd46cb26cc723a4d33bdfd443a5dd3e8addac7740967306327dd9a6caf0e2c8f302602d16d14ba76fdb5d69a0ad6e4b8939d30d2aa279fcbb2e109a10e4bcfa0c1073cd8c10e78b00320fcc002b641310526ef8d9d8e6868a044eb119d5e0fd05bef616cce7725ce26f6683c95ade9f0864dc14906406e50f0e026bb1a84fcc35a7b0fd88ffc5a1b699d563934bcb706337ad8b3ee25049bbd9ffc80a6c8561409a8393cc493480263187e6d925a5a853de2c6ddf3701e8e9b188856bd63570a1b82392e48ab20127824bb373cd22af71e3e6ac557bcfeebd3141f2e6bc9a43fc31e63c41e630de266ec9187273a9182fd3c9794a370a7dc4e79d629f1b90645f106fe889eb91089448f78dedd88a1cd986d0676172e50286beb6bc954ba4f8a07642addeb11fb535a83f1322974559e1e2e635f717716a5672b563cc0625ff1ac7b8e9d66056e9fee89f32b7ae47dde51b87b5ad53edd04376e1f27381a500b2e86fb8f944540c1b03f289600518ab55ecd2723c618db4bab641cb1f33dc8a8807cf2b9f7ab0796c546cc41bcc9e3fd014d6723dbc55de2215af5300c4d265848b1c9041b79da8a74f7b8243269339ad06654ea9ac6741f97e65da6bc662990475612e49137c11ed804fa283161b8a455eeee5d1a49ba1989741e23eca43bdfe78cb007e2401ea8446288f3dec3204e439c1fa8f3f304e2c0387a9329c52f48bbb863f36453a81e9e9cd863f5aa45a105207d05218b114a54d22ec809d0a9a130c9e20e8e17f93d6995cbe292ec1e95b4eac90d1c9fb4ca459e06c335c162eef1e6c1c01ff8f3200e0c0289b4192d68334477f5a2ac62119e35c73bf69663f61e772a8e77ecf188c41109129bc1eceedc33f8931df67e5a2545767f0f28bbec8921bbf7242a6918f7f81654ca9eb22cf264f7f733a7b528d4df6f847593ee79af7f1e8ce381a2fab90feac7257140dac55d0755cb53a8930e935eb529da8cce6ec98f22795e4e27d8e7243ec2b98c619a770c3b20d887cb738a26d2ab965df94d77035d8351e46e64b058e3d9641dee47c6fe9203bbc4ef3ce63397654cdbb1221a1e3408684bb0f754bdeaf7961d5857c58b3ab40ee9add345da88a3d103c5ae3d89e64917885661af1713c053e64dbd7b38d9b428959b153805c3d9434f50b92f9a0bf694db848cfd749fc8d86d0232f68763c20f66f412c621e1d17dabb05bd703d6291119cb84c818b6def24ba2a68665595526bee2960603c359cd4ece74b41efa969f07e893a8a9411f23c5f4d895389bef661bb0c94f5aefc2876ea6ca3ce811733665cb5b15811e8521427373ae0071f68059dec1564955b7b44a3a49c4100d86bc10ad92bf9258ee87041a93221ecccb27d02b78f908341a40b818f2f244b419f3f212be002165734296904590a01fb945d10623396b3e5976b5b0b316e49144ce688e5615555431457e718ad95a7b69793ed4bb89810b463c177822da0c979d11123e0b37133232bcebe13af8e870c34348d72267e365875f1a0cd82ad060c0228660b397efd041d3e2028d46ca08d8f065e87e72b342760f42610112d160b8c3d7b20db4b5c4f8402289ec1c7642623264b4aa7fe9c0b2b8d7648733978dc8646404c4cb61399d94d2490c638b793095671ecc9cd6a2e6fcc4e67c17e69afcd2aa868135e0bb0e54867f55e6750e6c66adb51990739874ef418c44ab9cc381cdef568df72a663efa17a5031b9fa1fa736297c7285bb7599fc1367604cc166e6f8773482692e7d2b78cd8826599afc9d3fabc855970c45bd1c24ea755cee5f074121b3a90b4aa05e5bea78cc4839928d4af52a93295113a76f4ca61ebfdac7e0650011330b0e078cf5ca69978082c0404d23649b4cafd720289eb06b6029d65c4cc0001d335dc27d017e5724eca1d05f3c4ec6bdaf065038b44af3a77afda7498132e83e8d3c8afc8f2af09b3497369391bdd38c313cda5e5d8e08adc2e901f5cd128a0ad25833619c279d5a3ae07505fe946c5f40aeab5a230ea7d29465d29290a75835c500f4144affaf4225115366b3dd2b58d0be2b98275412e0e69bce8d6753f9c4d123eec8371813b67654e9c61bff40ada8c31e4173416b4d5e8100a10ac0e32a4418650821c939d29ef82de8e0b72b3edf41b9a0a52123c2023e8c7f3de8ea3e1825c0c78d473c3e34186b751f4eeeb55feba18ad147bf2a0b40a9ee2c7d360c0cbfb9484c0d2cbd7a6ddf6a277847445b72cecb5d277b6230351e923c97aebf7514d43b16a23e9f62212e929e9795d14c3da7c5fc1e2efb278e83a16872bfe72784bb1b438cbfb8a775fdae2bdebe5dd91312a5944bf5e31d13c4dbce8335ef478dd6c475f379d46da17ad146361115d741dbbbae9751b3a564b9615aab7b08f92c434a16398a6c57ddcac8672386dd102a75ce22c8561ab5870ca8a674ae0b8b2dfbb861ebd7caf78a187b394fb782c52de0b1df661e829a7a1fb52eee3f9b121f894b40a3e645d45e5efa94c8aeaeb7da58bb1ebbbe8ae687a6cb6add6f5ae7a59d6afee15d4b3b98275cc33bd6bc534d72dd2adeb56edeb5a71eb2a34f5d675d1af63f7b55eb72376d1a5a15d3f1ff37ea2a7e9cb377dd8075435b6594dbd2eaba83ce6a95cd243309f4ca5eb6c97ba318f1d39841f92b7d32af87876942ce9794d9e4fe809142960af60866fa03623483f1d2719f64f866f4632cc3a68da40f8ce79f06ac890898b01210a656dcee3b91ecf7bf2789874930c7f55d160dcce73794373418e8663e2dcd066c01e62820c3b0419def5d043dad735e995db81b6e16b7c48743aba06682a781a9b48ab5a05ad59d03dacec98381a2f2e069c518006033e734e68ed9ea856248e4235863f3204d2ed8264d84526ce9e24c3faf8aa4ca5984ebe2e3292afcb9a22f9ba82100fa6e7b41f80b573e6849d9361c5440cd12a28c4166aadbf213a8d7cad9717755f57eb50cc9b5d4483f1c34a8cdba1cd09e210026d2d59044abd55191d46a032a558eaf2ea406523da8a3e060d46bb58911b4e8e56838137d65fb6bc90dde14d18b22ba2c570efc218ce905d1b6215d945b9e36244d44eeb3c987786e612774280a48a9dd7062339461eb49156d24b5aa78bb4ce11243b5d04862875ad3d77b51117236bdb48aa8db44eeb749197fa7ba9d47b2ff5deea7b2e5e2a8569de7b2ff5de2b408a26954abd54aa002efb705b5e5d1fcec36db9002e5aa78db47313c94e0d6cd63a718995c254874946420f90e40cfae4989363ebc408c59023c6190a95c299b5f8ed50dc4a5a2749864a72dc7911cdc5bd419912670dc8baf88af42a6b413a4838ab051d85724eb8232e8953e298a4acdf7797ba2d4eaf8b1d1289ccc91bfa878db83b228ea5cf1a141d3b5a152d008cd80cdeb0b87ed8ac055169fd5dd2d39900b0f5e9a4ee8b810cda6a00162ee196d55829a594324be2d9b80ce0cac79da8e362c4c71d28f491a1a922092e123c2023685765621cde3c3eea381a0f8a8b110fe3221d5edf0870008ce112817df198a6f8f43d75ea52b7e4534f3d7563931b7d5a156f2cd62afad461b670dc69308e84208567aba8cc0ec72f6e2c12e3e2af6eb623af4e53a9d46966fd854da570b623673b3210a9d4adbfc08fb14aa5a475693db5c3eab6fc22c67738be594d8e715771748ef172da6c0f477a5e57a351641c2656191f1070191701e7e13a043cc25cc602be001eae8004c43c01320e93ba3ca5d78a1123e374f5d47fb31df9a7f207eb14b3e0d34b16fcf7d45bff0566c10738cd8be31fe0c5f15fe0f7fe77b31d39f59bbd17e034d25671bc387d96c4190f9b8f60c918a8b12cfffbdfffa825ffe266ef3b1c562078f80feb8ccb3c5c62eb2fabd55b6d80cb3c64a9aff00b0f979886871fd3c45c3e99e26101b762be438ccb9805f47099802b200130ef41060c8c0c2965c8b05232ac4b1819ef01ab323e9c0719d24ae1ac07190890f11e64f07065c8c099cb3c3cf670cac38d485a15dfc38d3b3f9687677127471e1ed3abfbf09eba3e5cc6cd7664197f55c68703cca0186735193f757aa57bf142c6f185a1f834d67f8c7f8bfe00ad553e7c071fbe0aabaaa8f46cb4f5a11c75aa6634000000a313002030100c08c462c168482818561d7e14000da1b450784e1947390c21638c21000000080000000000640000006922d942c49eaf513e1ebdce006c141e8e169d9a63149901299d6443d9212cc1e061ded9d7d690b99834d1dbc3039aad615fb410dc601d06efcfa1eca53d6668615f1321075216b9c32239faa99b73eba5b0ca6ed96f4d7429a9a9095bac28cbae6e45fa12c811d26a4b1f6e5b554588bed4a13b623964a27f97e2a737e86371394252a5c8b72888b40e20c18910f31578ce3c63e9cb4e0b871d513b4098bec8abf1145b1008fb5cca6bb18c0d03d2c48e74e62b74f477fb7cfd079466f8974a930f76e6bb87b2b023f03ea25f2a35c35d49c9f4bad7b4d95491452060a9b16ee10209e06c84808cb845434aa6a8fdf47d7bb900d551aa53d022ef0c90cd7d87f462474c0b64a07b99876fce6b27a5e9401b0a20b9f0e5ed88f912218f67ef980555eecc00f6c89a4a213c9a4c994fdda580730df1e9d5bd90da7a816cf311e70de93327f3ad868a013819789c698faac1e721079e3f1d2c46c9a1c9123d95fc4614ba5f68c817e45376d96d6c850d7a281ab0d503bd75ec389af027aa0beaba50c764f1b818db361d26d01616660a58d7c5e3b27b6ca365b1f0aabd74dbf4b9e0f10bee180940b285498b7e2a31349df4f22c93d2d174705826251d0e615545d1c6f3d8879d843c4b7f46b4119d4174729b06dc1d74f1f0431abc838b6e450dea9a472ab13e59acc6ed720737462ff5e328f829a01a0b18f80504212f00d3d60e6d94300437dcb39e4528bc338e86feb67e179403ff67b1d3338b0b98cc5c1f0fd0f65289f14a83db505f44a8d548e0408793ada6fc556853b28ceaa96f21e830d68ef3e7acf3d512762c9f67fbe88a6de36221db18e7a4241fe1814a441cdb8155d700d49e6a1895e74cc14c7cf3a4dde41609d8c8170d5cb9c22a541a2341d741be65114e0222b50b52aab08a5628f9a0a4f864927e4ab38aeac223437cf6193063e17d516757cddfd847306603bdba380d6dfe23f72cedcf221f517fb4445f3db9bceea63b8885af8af656a575e3444437fd9342d33f9316791a9d579c2c5df577d0c10536c58b3616b5258af969ca405ab9f161848e95944cb4954ab90d4e467d6de831b07d958e7541b108bdf36fc2ccf3075f1af5c373a48905e550230aca71ca6343a5fbdf72054bad16b059f0634f8fe51a9e42bc347f231e3ad259925ba235b24834f0163c04643c1c7c47a2155509badb1660026778c37ee6bec3051b608aa36d198d18b9e3745fb36b63488834b9792c54374d027a4f70fef376fe27a1e7527a8405fac580109bf7e2f44690e785cf9060a04f96f7483e0aeacce834f3ca653dfbbd2854cecbea9a75692cd1ac75c0c8282afe93ecc0f5b7d18b5dac6bce5023921a107977c9c15cb971acd85b6176649e23a49dc52db2302c024a46df4207814abef72e6e7c3d4df503dbb6ad6b8726ffced5471179468bc3c6e87c5818da1039560ce1f6c91bc1d4aee8210d0f0823211c17b87a16d4efacc52cb59bbeaddbab273d4c73dfeeb877f3b2b78868a0aad72dbebaab8fbe25218068859fe0db43dd9176f22aed3b9cd207e2deb4fcd4fd92fe8846b192f94397531b878bf4dca089f45c126cb54fbd4df2cb52093c2bf9466a774d10eb1264889125a4427b9774387f078eeb7af47756c000273fab63d8151f619ba5e1bfe42be31dc2723a1757111c56eb7a4b58f7071b1d9f44fe8133dbf03299ad1bbc6bb2ab35062db3f2b1c04b66dea464bffa6dac21b50328c15a5c0a24cc9975917fbe3656f8f28b21c9d732b8bb9c207ef9112c89c220e4262ebfab0398ec56f888b1f200e09f270ac15700beae26c4a90c223fad0b8202fd3324f81c4274cc5105883d451392a41f682841db58979d100889491fcc05f55a4121089915703e5e3ef3a011e3fbde5bf49e18513797ca2f040d338a16315505d60eafd0fe8412bad9d07cdf04ff42d864c897fcbb3eaea3d4783669b84cec8d5357c81dcc1cbf8ec32c85396e2e44acc79925cb31075c14b87ca858997dae28dca0d1d58f181e348e97c39e05c24904c103316dcb97b4831b39c09b9ae0f56cf9c03db78341e2a26fc842371d63dfd03ed4fc6daddfeb0a1126fc98250181376861fce639b89b2e187243ca087cca419fc12cf03509666ff7d9d9a958a06fa274c726f83bd3917e265450b0debd20002fd18b33f42607043210a627b9ab6915b9e949e3c7bf80e10cc2014dd12f8f4b4b3445e020bb41a04a07b54e859804614c863c101bb5eff253940186f7eb9e5ca0f5e7ac3e9e882aa031710d0354c30cb1709b87a1e8e321a01a74b023d796f0935d91accbe79b16e31ced766357d76fa36e2bb50e43a2162b298721f9df636a86f4583419fe3ea5de4a0977365a332fae1e273cbe6f7f1b7aa8e7245ce35ccaf814761f6732e8424d8cd7e7cfa3043bccdfd23d768b046724a92e8550e16dc8a8c291ae684336097fe10663922a4a570d24e0fadc7d393026662e017018624ff540691dc17c526bdb78e57ccb918e1d2e45ab698ddab474a8948099a996fe9d7b1b87fb188639bbcd827f75f2995981dcd24e73e146e9352b450d2ac44d91788b762ddc61796c20f54db890ef927ee44c6b93f512e4c7f9576e1c5c5759553be5423c7a8955e355a736f5001d5770ee5eb4c3f8e292ef2e14b1aeaea003e19565597b3c95db90b6f5651405fc0eb62a5b85b42a14ab029a1be412113d34bf93e855ddc1e81933edd0032d67eac26caa2cb7719bc95ab9d85fe2f6c3af556733dfce2cb82bb4682bc6f9ebc171dca5be73794509db7cda134b398838dfa344805c5f666df77689318925d8f0076630f2c89f72bc837c7635ab5fbc12da316c03f915fbff6a224a73bc14ea731901453e34dcb996930317ef8b0d4e2ad80cdd87fccb25fe23d9968dbc32be46e1d5619ffc91b352ebd04e13575328fbcbd677f505d52b3021011542b554695b2ec2c7a96861d4cfff690992e3c5a9d606a5c8e266c481e8bfd684e509985278316a5f795020adec37b4893bb44cc50f811a437372542bc1fdc9d50d235dbc2ade17799fa08cec442370367242fe0e3dc39c610a8c2e1193a1cab674a87ae0085141a2387c5cb6ddf6171d206ff48c04379d6bcdabd92aedd6e1afc3c8576baef0737fee9848fecd4b017cf5fa1b6df362065b519a1e8a57e34244dc9e617b0c177fa4fa1a5270c2d6d8c39a2b546d73ad8abfba7c52f747e996690a9ba080d27194990b31be094d39eb9839858594ab8b05d1e7908b3bc99c29b2886bb3a9826a18107ae1ddf291a9165b4d1c707e4796aaaad963a9a81b321657c5a1fd666280c0fa5c9e900249b0346108656ab21ad0d51eb1a703be2d691912495d99afe3f319eb6f5bb83e46237e081c69513d92d337a038b2077a4e101faa8e6d64eb4cfcf7c68ef9f20e005140fff66442fa0194b5235bc12a7787ea8d732903ec5f1e5034b44caa004937711e00c574248d933fc4f014c2a3d1d5b32345b7ec8c5eb0396cc7fb3f8bc9ad8e601fd78b3081edd1a6ae3d149f897e6e0c049d8e83e4dadfa4411ff4d34b6ca9a1aea9faac0e838e5ee839e6cefc00c9a709aaa02b2053ae63a5566d0ebd745b8c4a85c47279afdffb8628cea634358aeea4de7f1b0583ec9080cbb8c45061e8377ad1931edd4c83f304ad3ea3874270fcd6bb0f1f9d0ac446011d4d1ae47727e289d84bd5a146474efb420eab9f67c03e124012698b022181a4498a6473d1c3a2563721f59ae1dc121760fa8bd56147f1111e0a601050ab0a32621b3e5270b4b5cb9889657f8119105da9acb4292fd51ddefa2100aa47b59333849da76f026b8147c4e5f9dcc436c47b44b7707f6266640bcebd6c64edcfbfbd340be84df430c22e5650004d5bf0268c8126a841abe47d97a2e4707f27b972ff702ea4b5b6532075c4e7b9365037b5cc807558a5e73f9a828539e0e3cf0eef434bd07de47a559a052da053830152e5882c6565c85090a553cbc7946f21c99e5cb18b1344a7f9f0e4cb8fde6712795fa84604ed54da4336d9bdcd1ff96cefa1d02961fe7023132fe35e40fbf43d8c8d9405c141b6afbb1ad83495f449bc73f8a81d8008997695b17836e3417810d91f1577facfb1790f3c30adbfcbac60fc351c7bf8ccb36970c4c5f51385a2b8493d987783f581382926dcf2a6b2974ba9f4bb507a7a67ac7449277e19f60a5754e40f180a518bcb3087bdc30045912f3048b29fbecf2ff4b73f31a72188fd2bc138ce43255ad5ff831542fe809d6dc2298f4abfb416118497a60e5ba4978783ed1e953a8520fc403cfb6a6504e202078e9d85151b303d51cce46500fa04c50e68098cf17ede130191ef215bae2ebc392225e2d14d838ddff3ca9b05dd0b010a5db038f2305db7224bd0f8c93d73f2323fbf98757610d784d14e9165dfac72a4c49e1f61d4669e0ab03571a9498b6c2a7be52fdf159ea7d9915f8aa43c9e7d7c7a801bda01145e3b96f69ebb25db5c610c5e1bd43418db0dbd114ce79ba1fb46b039b8cd9eb4b86e16ec544bbcacbd376d4ae72497170fb33638981d4990f3c126d6a74992ca721669383e2d4825358e30920a04b1d70e400683020833adf56f0853adecaa71cfdda483c46e67c7917892a5d80c77e731cd96ff763a1f865f66c6bac99ccb61c8e6d291dbae1f212dea5c735fa7fa5342c79793a440bc6bd21e2153e3dd50d8d90c1f2ca6bea1a3b7d4845afeb2c999d4ab8fd331c46a4604825ce2b7e6ecd57c9b433e797bf17ca592f9b7e957f889ede18ceb583a485c9887aa6d915b99601f4a3582ae2f351580407789ac6f8c9f252695b9aa6c8f00dfcd0d4eee38003c961404185915459f9e94814f3373df8a833c8b17f5a533748cb804d4d387571db3e0eeac7c0ccb2d1ec4594f039e9f072e2c941c49d8abe2f0cc1b42b0b9061d9b1cc6f16ab1d3fe521c0c858f124ce085e5343b0377a73d10b83119a92dd4ebb5876ac95951f861fa5906f0da7ac7597f00bf4aee4d4dde43df5bcac0d5ca55d6e5358161143184c9160925b57d549ef7848cbc1c79d8589ba822a9223e5848508e23ec2c87fdc8081b07ccc7496876e4b6f5ca3c9581f8226281e1848bed752d94bd20e4cdb5941fc93e2e3a80fa2b904415889d5e6bbb3984d06a6c6a8b79dbe659856d15e8057049700f9764c7620e61a68970a7f11579db2c82f42212320ffbed24bf7acaa971bfa6a31206dd2c8ca63451453e57e79eb3bb7570ce2953cff096f4cade8204b046a60c1bbae03149da3ea953681f9b562029b9166d3438639a727faf03aaa9abe84452f105e45965a4124f8640c79b8ae50641388ba095ae218403071c28b51cd8746ca05644c1b49b13faeb3c117d9697d95c6acc6590fc65f154ff8aa230ddf7faeede036de5684c3ac5ad967db8b568f3335c8e01703bde83f60f497805aa99309e5ed3d80ba3adbd716b177b217720413c2145cb682b6a8ea5fa1364ff7092de3f6cb8188b8ca5d619f0dc2d03cef9b76201b70fb9ed2ea8eec971c4eed338d97375870f2a8cdd3479f3fc5d4d704fb77c924807c5d00ebb43127ae5e2285ca8d708760c6e4d8fc6019c77859a527a34d0d4915c1e72a1571777005ce4380559775b0ec9e21c774b59a59dfb5ddb641f0acddb830186122236a7b0565142681be5c523ddac4fb8a621eeed4b1f3a4c3a068758b80d91b5cc059be87e88aa2400b60c655218d8985c27ff02cf4f064129c49209c0724a799d3f1a3557c0f80d7c68d4f00904fb64f0294a4350752d5633b88056817e1de14c066f9a0df5030d9b2f9fb1128a2464354174844fc5014f3ff0debb6b05fd508436c6c33f1f894c88806bbff209d07be89660127a9296e08fa261513ac428c3957226d0367decf68d6c5f69baaedb3b302a19fb51d90208c05c1f1dc872c60b45a27a458d0408d2930cf59d85e1a75efc6a1d88a877b0ede91998a29848002da9dd854571ecb53122a6a23656a8fb58c2cf2993ca48818adb629d3c24620ba7d0376f6a634f8f154aeaa22914df9dd19460cd28d02348936154b10ebafa084f6a46653d8de7656ec97d1ad2d37854b803db9e23a465564f238087753d8d0189eb035a6b3fa39eaeda24943363b91e30d6f8a35e123c9d67abeb64243baa154258fd77b1aa1933aab4e2132e22fbcb06ad02aa006b1e1b8f5c873778c4eee31678147a5a9d6e3b64e29a993461f20c11f5b6b1788da1257dd0f7ba8b2dcf90b9ad0deeb9c8a6d556fb69d49f907e98a4bb05a2d5bbfc8041bb0f7ee373512446f34cf6f542f0a514e7c0170a396e77b2191382a68674788ae5c3f9cec64822d9e89b014c018733e6b656306a630da4f2875e4a7a2f6165430c3c424007fbd81bd2b99afd4a374cfc970d7bc2583076d3a52a6bc1cd22a98bc48802989bf14da7c1f4a3a55669d94efa3bc9c889d3e6c28c762e405365ce13a94ae6c6db6bdad00ceefa2dbef1dcea0c61191b1b64f5a81b8bf8226e87ae0b1a5c133f802f5872488a2ebc6a106ecdb1a13047caee9eed56fb184ea3b55537322a1998a1dd771c5db1933f19a7f3b307e35546fe328e09d8c90e775085f96015c83dea07ffa6910469606af851a7f30113d9bac23532d4764b15f53f2ff9eb98146f493ed3a054c07cc07a0136eb08904d8dce41330f504ed7a611ec494b9c0fd8c1d3867de13d1f4c1447482860e0d88660915623086b51aada62e038d5ab5229bad5fb6ed421b439cc07300853663bc54c2f1d4833b1bd82aeea99e0e0a132c89a043aaf39dbbcc7d0f9a8917d6eccff96f940f3f7fba476ec726eec0c335b36faa4dfe3fd1066e4275b7ae8e1db7cd65963044924286d6b493fb022d596682c21996e36584f19f8a1378e86b4f93d25c03f2f20d4ad950a1c787d36c07370b341c5cf81b46632077750c374af4e0fdef29aca307ede5c0a9f0991c16cd0355d95712553df9d02fe1a8de2a45aa7263e2ce1567fd99b44ed0b4c8e04b01e584dd167733658c0f804c4e2413a32dad03c850719cf44c36a1bb46a144509fba51102558fcfe7f1bb2a1707abf172e9a26e4fed1e89b341695367f5d2d283c4838e7cddda6afbcdcebf4398b7540aad849f339be377aaa4c29caa10cfb078072efc4c02c0331ce5d587d81760690bb2226b799c70be9d42eb5baf070267458b10102ea69b84ce5067034a4ddfbb68c63d683ec584336ff8f2b341b606df39be8aec653e4dd963cf45034e0a2d99693671617fa625bb4a5a51f4d980889e57a30b4041541715c5e22b94321bc0b21a45e33b4410a9adc4add26ca6157736e8a8ff9b92bce3415eef810cf811a8045f2b9d0401c4420c83e897f0a85d36f904e8f7231b59128a8b7960a205adc48d49fa5c9e0d128cac2ee34d928741eb52c836e1ad35d86703c669335a690c06747b85d4e292660374e22d448842324e5a5d9222b5b1707330357217166b7c041a468cfa870ca03b2e9a0de4fae4945277fad02b8ba8149a35dc5decb9179fcc391b647720f03042960e647a360041164f79bd9199d310b3c1bdcd06070eed6cb01f4adc8a8380f79d153a8167f74768124590b7c8709c8dd071b588df9f71027467319d7b43a83ec3ae9fb5f11484608bef2cfb20bd9ad58f671016ecced29edf4a5f6d30da183fe52c5a210f7b1b232e11b0f02717e7d840b192375fff6c844cc4e9bab940bdaf36e391cba6f88772140cd598014914351b69e968237a5da47b1df670f1826429e8f9ccd6e03e00d36dc57f4c798e53f086bbba57c106d4a94d954318ba8193df0e57cbe8194ed2927be83ab5aeb5078eba316d73f31d6e8084d56b73585e6e3a66ca45e716bacd0e9f81623a57353c8eec21778b8e6a92f55806ae3c318417a970109ba0bff9703f760fc3450abb8bca5a53da0de72321a486e18c2af1c4a513331c31ef02407d0f79b968fa7d12289bbd26bea9f7d8db9ab4a0b60c78a8715389401c99090a425557ea1ebb02b3205a06402643f3e1c4d20d0130971f750a8906ae077d9671981e4fd41e89b4817c0ec3264fa800064d880c477164ed42cf528dcb4bd44cec1373564c44d655045fb0379ee90e30578522683fd31351b2f31ff98211ce04671e3af8bcff283bcdcac366fe8a2676e978a0fbc3ac6a3e22852e1cec5e07c66c1045a6a52907566fe04a8ef62971e9d3a41b84843141ac76c7fdc7091ffa93c5a46c28f236cb461ab953a0752fd2e053932ffa909ee70275343674276cb92065ff28c2e39d59dc498a6153392cd69ee17f9b5f40992879e7210fda4984dd3125014803e505ffd00ef23ec185c9cd79768e5044c883a850c45f6cfc195912263c0cea60530f7a2e4cefaa2d45aa136720604d2657a023d79e9f63486f3911fcdcb044dfa6648209c8bba974184c64e189db571c526076ad8b094d04d413849bf48fc9f85c61921c12c761ca520e13053480129b78cd6fc3b9c9222b08d9223f3b8bdc91b97d9920a4fadad53de3b42be7d580c15d4bd15f3e5890d8a34096c330f71abcf42e532fa8d6b0d931a1bcc6941877571c69ee36724022d8aa8916eeb7c75eacc2b55a9bca999f03c0715f67f8c465ad47c0083b02e63d23ad14462f193568378a963200a22b7fdfd3d3ff5f9edba38d69d1e6f6b34d8e5d603abff49dc1d92fd5ab066c35b26b81f2de0db0bf67bb82600d56dd5eb3068a5491bc5687916757b3280465ae140b5af73a83492f3cd5a1254d3f96482a01d83b17e8b21143b82987af6b04b6852249d865ceb03badb06cf44aff799f139ebfb96d967fcdd2338951eacf5cc526c2f43f49fffa5bef89b0dfd89bd5514d010eb3a214bd95eca9adab61c8e80a7408fa5599320ab791dd6ef4c603a9e2051828137863f7baad7625977664e9a6fdc5e48a90fdd997782fed38a8097b9db22b2521ceb38d5d803ab79d3a53655750cac86806cf1bd6f481195af8c917f0fe3ebb4e73ac106ae7ab5029ad5590c55915ec50ea59ffff3a3bad53770cfae76d77212038fade7de08aa3b5d0ef0503cbff681849850680479779a331e1550cb6061078b4f01255431f2b012a66adfd141d6a1045424c1d5bdb6808543a50d508c98913749d957767c36c26ad3eed73770276e22e2b6b1fa5a5bacd3f17662323eaebd9af821946dc723061de661355f2cb9ba2988538d9eb0db3474616237173b97cd4e84ed515614f2f4fe877fe3650e4c76ada8a948e6bac446858f5ea8191c5b2155562f48d326335876e459358f769f257aef0fdb3a970562c457f6ddb6b0c1486f14696ba3fe707bbb5ae32ae2861c5c8ada5732ff9312f2dcefed211d6ea4049bd566a24665bb12629dba2797458abecd2ac11b7b47d11b9322091cb823970f5626732b00eb6c694edf6e4df12c1af2a7a3a9306055d3d2fcdcd0be737d57baaf9f3483854a0dd9895ca998eeef5319acc940ca20a97e16d1dbce3de23b1522a09b3d35ab2b3849c666318bd9abd11612016d6a34e743103dbcae84d52fb29b9931578d55a1362f9d78a6b69b07705efa5f2957f9682c1a759128062ccc0eff3caf8a2e410f42b26e4df4c8b75449d08054e7099f446d5f90a1a99e858c0f3596582660e3328b7ebedc7cb352fa6af81343615a91ccb70442cd7b5e0d17608df0e362108c706f1d820a9576e60c75be7babe9023c86ab74a2448c76d43cddf4d714a076ef72ab502860528c2dbd5d551816b6329069985f3ab7452b449ac380e6e0dd217095768c6a2753a306dd1c53d896ef5a1f3e2553dfd4ab4365347edead93b8d27547d53e61f914bb376a21bd077e9b24f664862025a6ed414007d3d1af04a7d4446c23093953ec1c811957834244f312b81b0df7e18b5f6e43d36fed10a12770e3d8cf2625862bd92bc4fcb5a6f065d4b2f41a1908f9acab2bc799e90c405648de3e70b2de0e17a16725e30c69275f08589640720939373d834cf45ab381c2c5d047b352fea3e819b581167e696851efa7fbf0fc27c7240ee67d0d8757c6066262cfc36bd783dee3e8fb2857870079ddc77a88e96935c6b5474031441e3a0dc2a65847ef1c0223aaca624b2bcb282fd83aba157cd1230ad1f0e6ffdbfa6da3876732e542caad6689114d77c02dd116355a172042697c47a887eddc5524278a392c29e1bf8e08159360bdea8774c2492d4f0e465ff2f2c457b3b4fde6b68acc360212648fb42c759d7d8ee7376b0384999bf703b717c7e65cb509c4bce35709640b564cf44cf9c5b79722c1d71e27da8539e1c4acb0164137a0d8a56b4d70f7a9e32a66d9e1c8bfae31270be52783244f14024512483673df7e75da26055aaf32679c982a01c01054870293e5352bee9c125df2c54db4aca570f95dfe7a214f08c94d79474661c6e5dca5f137a5b8bbe86902b814281e2e13f0d7adb21e929c1b83719e5abf5f5040b422eaea4f3d857a9ca03993ee1d66603771087a68e67fc2aa62a9f003b7a451dae109e91e6d7dde6b5ceba036a29afd053950706c558f45df69f9c6f6638b9d9fb2e53875530a885fde380a71c961c2e8b614f531014c2d60df68658bfc65b5b1e032ed18cba0cf9a852aab227debe0e331fcaef1ec9c5b387f22002bbaa66eed067d1851c5193e9e512c03598a386ea8e34fed31a86e30e7f8a62a14b81629abfd6ef2b9932cd0c72e47d70b86d39bed75b7ade4624368a6ef285d730b5bb8122355130a249a118ac3835ac8307353438d8c5f17ba54066c6a7dcb3e13ce7abf422653e73cbb57a8387d92f08a46cd055706d301f42b600d76317b6da949177b335d488e2b8b82959bf4ed75cde1449a2bab42c3862471f4233144ecf7451e1a83b01a876da053236b2c124074892ee925943be11e67bef35cf8ad202122ab13c8c2b7aa6b40ba2e646c72f403671e8d4431685d778a20b5f0a03e84bcb056a2c179667a3676b6930879c62586f2ea248020b45e094e561b892264f58b200052aa3de75406ef2c13c0376947d54b86644da49673f03eaa195cdc28e0e8a43f0f7214befb38146736cd5d5e5b3eaebec491e7edbd33d882df30e1796bdd198d9ba6a86998fd170fde82bab8c2439ea29283d43770965c77ad18cbc98709a9d3433845de62d3a01a57ede72343e5923a2bd21bf17874fac3a6814b21f3c2436b254a4aa0082c603e198c30ec096292c9c36609699d8674065a67b9218805e9bcf5f9b284aed4dd2d98f27d61f5016ef7ebb853a364c1b8c7ada604096750270f2210d11bec8f331cdf7e462ba9f8feb5fd41a0f3882921c26c54c9c74d99817cfb1a8b8398bec7deee09640d5b24dd314c74a6083fbc7dc3877be6dfe534fa5b591a2c9fa90b60a3ca63646243392ade580a2daa59d0151c751af4e2e7b0d92b5041f9bef53146bd8d513ae03d31549c5d42f6ec3e2353211f32390a281648c7f8cd0b004ec68711b8a29cd0834af52a8b047f3f558e7310c938f4c713ae4d8282e7c5d4bc5df0f06d616b86f56ee736bdb47619f47002ead72c4bc5e9f4c17c4def269cd12d383f85eda1d8d7e87946bbea63c692172a00770d3adc3935765330411f46230d6c7e628608aee86f41d6a46483b54696a3d08a0fd23e1782b57331d1851e3775d1e514dec5b8c8fa83bd6a651499019786dfccfe46bf728f9afeafa85e70939ef72e85bca17a69d81c2fc688c36f208415b35bd0e40262b2833e7c6dfc4d90ef68e31949c8f3cc304fb44daf8ad196c517ac77afbe2406d0c0edbbbcc4f9a12a428b37a652e7ed202d01de8b9dc586e81bdb2024356670ac3815286e2ea1a9d7b519932ba36e0b831f23d8388d8e7b276c35b8434dec96eb94b7c0b7bd66521bf86c78272a35e5bf3fdce08118063193f5ee7b3af02ec849aac22fb6648ce982ec916d94d988b22bc49c92676e9f8e00ae7647b5d2d3e26236926119306c57cbc55e649584b4505704c0e9c44c1a63a1755f920956398d993f53bd9eaa846e339ae0972403eab1ba52daa999e451c46250081759538ab93fa400c79e1937bf19c6d686c1e98b6b11c79f6f880e48e807b6643b2e9bcc3cdff43496e02939d8b3c9262b2d94f179cf23600adeff8573904eb10ec9ce5fd5a3e1cd6fe73cfd48b6d29447256623178139a9e29dbda18a486a8be154c88e2905e518a5a0b09b9dcb223dc1fa4e31beb72aa1cb19db3e57924f9341257568aa337885f8a2de73e45c86b9f8db56e2e37392721023ad8873b7ac0877d6c5da5e990738c86a9875a001bda35e5875711be5837981b5d440aa60899c502830f6d826f2e3d298008d8f8e6e3a8bb054603904f7c8b86638151e760724cd20112df37dd314e65cab92c03dda685f187c0d613f8ed0290b4b04e489da33f74df41c860c2c1e7ff5547f42d4af76cde60cbdedd11624131d05ac0732b00043c404939a73d7aabd9dbbed5fd29483a6921e6d5a70cb038a5d5040bcf8925e3fcd8a903e412def3c44d135dfbbae1ea34d2ab46192520c3a50c52f46aebe0c861be67613d14293a392db014d043fd8297cae36e0d92b1abda84cfb16079fb7b9fa1dc06abfb09d76b891d506b64aa8fd7ffe5c4b42d167a29a32dadf684934c7be247c208bd88a29ceb8f8bbc11d037d5d0cb0a26f78e85bcc07816d8b05cbcc8906e2221372e882fe46f6e5e1e3b615702e8eb8f2f0561f029c3b2b132f259a2a00609a0c8c9466feb0ba1145d49cc9db7998d04562487d4a0c64df0f9a9c2b6bec1b825d420af2069a816a5a4ea0ddfb8905e987ab4b53d0f5715a7673b41a41a8ccb45c82e27e9b0fa4149ec49633c9e830834676238cd637f5ede68325376b6469f06011a7b58e358991c7cb051af782b4671425126c2a057e746364b939128aae2a7971f45211a310f4d06c7c42d46b89e6d7f771f7e9a29b7431e52e733cedce4d8c221c8d11dd1d516bb60330d73ca929b9170a41d020703f6dec6b91c1cf899a24b03b78243cdf959be2c61bf24bfb3ef1964158ea7b6c2893499202360c9bd2219f25dd0282f2257abb2865e5607c4c4a0249c8e3321444419eae7fc28fe1ba2ac1fed2b04c81f990f57437507d6dd9d40a4a0b8e6b7381e2b178e651c97d0023c0e0b6967bda7482ffc79edbbfd9b228b8de8604abb17b4f8ca97d429b50da76bee29c42dc679d4e7eb74f7f1f9849c0955db150a798a960c48d3d042ee612508e9a76c99ad95cf147a62bf419ad57737621eb4f44cef2b71a9177db93e039991c6d219181ff0faf6c6f23ab96efbb270d6e5226cc12b019c877d35c2297dc5e01d40c22d665c64b15b3d6ba7ef2b58e6c9b0b91df721d437a575541d7c875c3c778b93983f682996ebec46f920110e8331cf2d162e61c8c362ef89e87c457db1f389dcb7c7320b895b2cae1582b3f9e9a8b97e0de166ad3cf46ce87daddc6223d83a35763ee608639db49c9f661f3d616aafad165b5f30d6c430f5e2ec7c5c8c88e54b2ec697989b0f460573711237eb196f9f604adbab49af68267b9341d1df157eddfef24daf650d67c498fe78842bbd1f6a9e0f12cbe27ff2b51ba49a8c9f097233406082fce8996072bacf13013da834f3ef46a7621655cc4c8e6520c55dae872d95a3e61a24f4e752d4ff7c798c99c951049ce948c4b35f48cf99f81f6ff12f06270f7a32dcc5a0b7a9a4f6be3b5df4eb12e1f841df1e6b31fbd32112e29ad4ca53ebe741bf6e94628cef7fae54765e0437b09712f599d298a9bce5f63b90925d39716cdd1d2e6ca93a6c0ca458c268ca3824e3bb931ad2335728f168b1c7f986dd683d8771f1e22ff18e2247b733d64f10053bdb9b2383d4f5a15b630a54b64942d2297c75c2e29989debcda900fed6b36af6aba97d7b75a2ce9e754cd568bcbcfe71b5f7e3b840fea01c20a1af4e26cc6467634d36ae66a40cde4c581ac8896292cf598e7cb0436a69a6348d2bf195130d55d316cc4a391b288448429d9e5133164cfb1a17e13b69cb6caf823b4fcb880158c543987487dc503ec5746b00e288e2c36c4decbfe2670753c1104e4cab29aea1487cfae6930909d170ad635251c3e769e543c6b44c2568408de29f7e98c89e5941873706bea2576de513522f566373b67c049826649634420636b41691238b54039c15a00b05a37a054d4b59b36a3bd7b662d9923e06c9557b26ed4fd7b8ccb9d7f72cbd6a28762380ffedaf116c3fc4bb40d9a59f987e926d2137596c0890f511ff45586eab705ff4933c8bab16bbad50b9449ff46f6df0f5f3dbee6a420fe48390322efcb06a3c5a420ca464a5a0d2fbc910b75fce1a37e14d653f7c179ef67800afa00d3cdc2bf665f4fa211d6f4709d61a324c247b5866d6ce1b786de63828987acd29853236481c56b04fd55c4a7d0bc5c63c2aeba30dc594532302d9008702350951d76de61f72f00b95762254d5ccf0c79676d75905ca06928e7a10f3407d76f134ff27ae1aec5a2888d1a45fde25274eb09bd55efa27d57a2011eaca99d4da1f333b535f4f841a012c4b572933d557319af28a1ae61a919871d61c914c506312edc552aef74276380332d4af24aeda1a4efcf29047ce732c8aa3e8f10969a44439f08d2a3fc5390f697fe80e19d157ea02aa329ce6e9177742212e3194015b4aa42ce4bbe5d32edf660a925d67041cc63d50e4a39618b4bf1af9a1732e42e4a22b8ef5f356c18565c12db31df60d0caa16ddb300d0c9303a0116a0bc34794b2ce198ed94842b44315f80fd03602b2a7043a739ba63bf1f0d2f700a851d1bd0760b418c83cb2dd3c5ea9aa7cffd3b9972631795f152810d84f84f45420532e6ad5f9fbe61df7fa0979baa10a080e9fda2cebc25741824fb16d53c612cc4c81cf12717ed05b914a86ec35197bafed8437fab3b3d8dc32dc47ce48da7ab97bc43c3b187da56e61a66dc326e640aa4771c267c43653ef98a2ad19a116ff152031af3bb12fecebe9d8d246af6765db9a757016b1565502075a10bd9ea44a0ebb808c5b244db45a6412a0a8f99762c49708d3b5000fc47301123e25a0d32c5f345476d0e9b2a37e53b2423c9d8c4bc288672a22ab4246aab995fbbaea5c7f3d78e787f06f93ee949757bcc06b1617680725d5055839699c534171e76f3c5e80320002f6a636967c0e4144b907143b93e88678f69fff7bb8f19bffb9288f59ac2b10d5d454439451e8ffc38e5293d9524ebc85a04170d73b4bd1de5c2d5b66d518bc6504ae47a0c6595315863b0996a98957d90f3e9a6d60dbdd61e04b7f9173b5e578119d423a37e8b471d02e5d447d7e1947ddc8e8f206e4e8bbfea0b5cc1b2e78aa4fbd9bc8dca51ebae12fd5f669a1867a2e3fb86429cfc91f522c79646183dc889cfdee29fcacd70ef6d2fd79c197b19ac4d1a2b54d449fc839f85f1408ce52e7a945a0ab873f4566ec018839e7c4da79a9f215c689533e2a32d12e5e056e9482588f90f9a0332bcab555caaeaff92dd35adf86398b132447ac5488886fdcabb4559e7cebd32299415612e2c1070cb9933ab32a678f23c0b14193b5d87c8d7210e79574a107d73d2d3c67b029d2153c592139e8ac5ffa80eafa5866e8b4c3c782c347dd309c2fbdaee820d32cfc58fb4293746a98bc983bc9dfe471330bed7c3ca463c1be4d1f03b01bd9a820f74ade30078d10281a3ce7d9112635e0b1111b33057f48ae9455b76317acd89193efd4a61c8c7a32720e984a963329378c92e5faca4cc1053e41c998bf41a445a79c7ebb23ad9ddc722dcff91e5c6349c5aef7dade59584fa261f1666347342e7aa41dbe521ccc910e0140bc1b8257e231009969f9ed7ead9659f43d21d53faff2718783216180a4d19cdc871e95e7cc734021d04107905f60c2c3cac13e4fa3aa47b68855ab6f0ad1baeca4031e234af12b371e2fd6b40175d06fce4e7b9874b74124dece0789639fec87de62b276602d9b740f657362c901f017107fc860617cdc05748b3687f2e4ec5ffcd35dcb4aee2fa03beb423aee2ee190f7ad125483c86c1f017d095a8b05103b6cc4a2eb8cb8ca54ed78fb845b1be0fd6012290c8cbea696e4db2424d53888128b62d744e4ee6979118098ef180bafc98778966e2f08cfe5e34a751f0e0beee2573c1a65e51b0a3dae8862d0f237df53a6f98e560c136dfdd9431ca84a5d7dd00f003009be969fd145a0a65b0ce50602c8983f371bb4b1e4ef89841c9721ca2466f7f723d8a243b182c6ae92f72cc7bcdd9dc0a874c7d0459f43276ac62d36cdbfb3d5e4f599c34c7731454244bebba236ce8be4193296a6e7486622038e1af78b1d9b669189f31970df2fc680308d9b6c105d0d44da68d76cf996cd26eb35e4e2c0fc471df4c86467a12158d1686a455c6e204621b09c60c14c747dc0a5bd595c34e32018bfb0a1379ab920b380d62ea0220cc846c8c41ee15a2575ab37f2ff75a8dc5c8d06d63fb90c3ccb4f7b4999be90f2c19d7b370b7ea06970bd8c39610bff19562138af53f3ceb2fa3b4ed64768778ea1b9d4c4f72391caeae2501b2ac20ddadf0dbe3176acabaccffe2f81af77b2f11d8140429c206425a5e249ccce9bd742709811105fc5d4c44532a83d5c1f00e511a45cd3d2d0ae7423d4cd337fed82c87fec9af2b92944d8786fdeb124239f0ccbe8cc5dd06c4c5d54419c3b2d1114ba3e452036b2449bf595b0a92d984e2b2799123141530e9c0d6d82951529152bae2ae3666bc7f96718b8a140ed960da4d8eb38379786793f410ea3b0c76654b36cc6315f1a2aead86b872a17fa0112e7c8fb079c5e536ddb8599dfd089b907bc152f027b5b132cec48911e54fb4856641e26ce97a2cff3dac513b5a1a3b334d51064d884dac03003a56b4ecdd78dcd77c97136e110f8717489069c86512f0c189e75fbaa8578a2f7d5c4ae7bca487ac2688e7d4b8453a83babe64bde4cad0bf20daec7b958eb91e8acbecfcaa8fdd95d58effc480364fc29055ba5ec61dd049a07123d2e37e859f1944fffd24f60d9eee706fdcc9d0c3a0bc8f7cd69717bf80dec8fad10a8f69f6dd84138bb6b7a339f47f024bd4968745237d517531fab0c9bcca3a58d7e95e0ba70ed6d3178e1db7e0b781601906f5754d066e601b8ec0d8410a00b7ef9017640f14607f070f653be2db551639c05de34bdf78a56b8ecb91b3dd11cd5e79acd1907ecc7683104e087f8e815067024dcaea2650f845025775d3a719f6b9582ed700d1f572d608bf767582ae0ce86ae21022426b3a87276bd5a544d3c34d9a83d71707f77f3aff2d240e8729c6eb787f5652f35b19c666ccd5f66f53683a251e52d47bb86434c5215df4ab9a3bbe1d54ec5f71ac9af884ef252c9b847cc31815daa2c364371ff950bfafc8c7560748b83bc4c6edcba39458135cf1f4822b7d717892a94d8ae203903b612234f7942fef6bb32787e18c16fe71ac02b14e43c57a98b27361ce889dc44147ee96188742ce4b6a7197edbefda0dc9ea333e21a8157d415f4ba24971cda556d5710218098f82e5cdf46b619c0ad4205aad94de1b612ff4061d471411a64727c6e23d0aa504efa7e32290614a1424bfcbbf43a3f9340a7265107ad0b91f998e4cdcef22367cea788a5a628df1b3e877ef6d365477c0f7c1fdc33cc22a91ebb7626df47f08ae14fe45e691c3bd30090986720b1d3bff1724195f5bbb798793acc6f40405076e1a168383c51754db3d362e5700b736ba420614428e0e1aaee7cf5aec30c018679fdc4a0cbdc010a09bbe1297d1b32e21e5b80a85787bd57944391ac38015941c6687e96371cb79089e3345bc78353959843afed069d8e5b7b4fde44815e8bb3c3b4003215b5aeb7ef3445863a916960cb523202d0db9d1d87eb56465d98644463a5a8e30dd28b0d37ccce27e3a55ab9736b8dd601b00d5308b57d9b850cfeeb2f10f9f1dabbf1403db99d6f321d0ac3f665929ff111095411c327539bb1608bbe86456dcac6e3933222241ce884017a557cf833e23711e441e873b40bed1d73100e2856f7a00c9abc6f35b78a8170c558684f657dbe87447544b48c4e454ff17097763ca1d02894d7f919020dbc25f69fbdc21d2e6b6630b990496377082f43a4fe4fa5d9902a02365373c183957466ab065d0c29ded81f5034661615be484e45f1029e2c151c7c6ed6ee7ef37b06b8bc4cb0da8c2ae26e0c16299bbcd38e47d2cd0f3586be9c5bb896c7e1dc4c9ab67b102b3f794fcbde18d138914fb595dbc8dd8dbc888304c23a917411452071aa7af11bbbb73babe11208511e47c14f0388f8323b781470cbf1d9aa53c1838ad2220d8d8dc3a938ac936b58eedc190cf2790f5d2581f6a2ca64b0e41ea9ca347f6fe0460b1b2db5fb5c7aab21c8d2de1c0c33b33619feba388378a6e35f90dc72f1270996217354f18cbf8cafa4194efa3efb2fdc5b2f2b946d9652719b1c9c8bb5d2edb31d6b5932f722660316af52b292799787ede0c72d07d866378849998928dce72a31c8d512ee6397a6a9bf389b180e7a445cd61557ff2147c10835de5a85259437dd082a34462a73f7dd869adbe044ba6541e9e54228b171d0e4e191987551bf989e71a5f31b7d69c995a38d99953abc121a13b0f3c1b182f121214d322542f565bd3ebc508ea39c737e82590b826dc19cd2808deaf090ca179b7bacb66a109a8a6a5c519603343aed60721959f277c7a04d2f2b1a2da787f2ee4b54a40c0a48dcf59e8d8dd4b10cb33f0e9c4dd2a7791c8386425b6737fe38d93712cdfec2c16b1868c1e75a2c8720d61c68920332fcf6a2490057ad68945f8f3bb212a95c6dea1e986910bbeb93737318174c7f0a62d865ca106eb40eb7d453a4974627ceba39dfa455d0d8cffafee91d656a77ebe56ee5ff39dc72e928cf535e4c6bef8c7c13b8ab244eb2b35890dbaf5834e8c719b4562ad4f6dc84f2c513855044c19a7882b429b0ae9ea00dfd804f53c74547fe4df0436d9c09c4845208e808c1066c7e401a8e66fd3e4b416227635e3d2514252fa0982b07e9ff786f502159e8cbb162ccce90da617f2daab0b2222d25ab4f654dae5d1e64887844faca0ae7da2be27022766df27dc961f200950d02932bd121ebe8ece69783af87044e8f014492d393ba7cb1909b4f0ca020c58583798a88a1366643a2b6f224c1d59a7ee62fab9c872e346de10e042245ba4cb2480367aafac7839e9773972d38e0b339a0c0ab9d75fc9a62f3752f704a0f720424ec77f09b10e450d93d405703a20d73e1e42a8dce1a6041b897c51ed72e0fdaebcf0c5b7342f833296a386324170c4921893408ed6780c8423b196fe9ac8889d6391ca74d9a08dff19341cb3c01fd86b04d9ea2a7fe0ab1b202c009dfe2063ab000f8bcb1fc0ff4ed2df88d4d20ddb3731647d1f4ffe00c6c735087f0991f67d60231df4bfa5d62495a3a983b820e629591f8410db97b99492d45f3ad7086e9c8dbe4cbab39ecf0238ac25ff84a9eaa83c71d88a79128c98879dd62439d665d41019a41edaf871fa026b09780c0287b675d16116bd8f7c8de5fd7a79da4d45697677c87e8a9b5b1ec7e493ed760ac4f5f7b581d36c77cedb855e532400f4e9bceda104ed9227e7c1ff24b1e120b81011e24ca881f4d6b9ed1c8b94fe2f8edf183fba600465ccffa8cc1c2e8dd02c61399e064ae7cdd881d0968a9017b495c25b5058fca865c20c6b75620400404a4fce83ed70098e978a04547fd8dcd88b09c1c48710821a4e72191c22a2e4f1f04418cab0deff635c9e8ac981ed03dbb5aa862a15381b42cd4cec5c5b3168c3326052ea125a53a7a9b9b46fae9250443b97a915151521b8cd9b9fdf80f52c6190b017bcf272a875de6e1e4fa433d3a31afcfcdcffbd8095a50e35340be14582b5b9f189cde038afee2d5ca2b911ffc6388bc19287b77ba3629274159d583446b9fea7ca80352f3a6f68f0029564eb7688e2e4bfcd3bab651d77d64609abcd2a1a36642602ae433abd4e758d33416034d73f9648486c46f8295175c7a01434c1049a029f5e889da071483a55c79cd221af0c1b18d1840b9d35fd0522729010763e4711f50467f7959acca39a7c9317b08580a519d0efe81c7cd06e66a78bbe289d38de5e04095a374ec10a51f34fdfe8a73aecc030ccd7ccd9401cac2c02401cd38807cc641270ec97db36f49bed359581dc08d590ca00819a15656d3d6e10cfa5222401a9ab035de63fc1d67ca00d09017c2797c07c3f882535e9943fb2bfdd2a72150d9566af4befc685b90f2e2c464db1d4bea352705ff14e05b4552b1890b5498c1f18a0660b2d934300453db99c0963b2775fd0878e56db0ed27a2255815c7faefb72bd2c8feb4e778afea28e673a9ccbfe801a3d6e9dfa2b4c7d71f5b77eaa118b1801e8cfb5ded6a9c18f1cdae66ea426c9c494ec06b2100e76775d468fa36bd348340200045e565ee93eee78cdd64d19681c0410745ab3e48922c42b019fd114f13d31b9a63b51a09666cc8634430840e4bc15c8c5bd175f257f4345905259952ee1241c98672a1493ea3c7d50fa682cf97e80364f647eb4e16a28538bba8596b8b66fad2a466da944d40710f831434977065b00c0191258fdcf067f435cb0838de084094361c81b0441f5401fdf29a90ab0a3c69edf30b6e778095e5db221d951c4717a6eacaff2c028e7142cf20a5671c1f6b488f4de712aa43de21065e6063b621987d0d5357f403f5506892473f941c1678c6d715605d98571dfa9d45a5c497aad987ef8aaa50536a462cc1e08ec2123c7e1db064d99a603ab259cb054f624d8041abb6216ff289cfc98623dc16f454dede4e5b709d840dfe244c55d47c92cb28b834855a1cdac48feb7fafdca8f6be08618fc51bf98c909f75ba43839f7302300d7cefe08e703c1a878a51b337fb6d7fee50205d0a3d3809632a5302ea055d7be1bc591027cf38e9f55b47f8f34282c6533e4f29c3879025106bc0e78759bf7aef3665d991eeffb1fef619fafd4ebefe8eee417d24ec47d7e6e168acfdd5c02cbac60bb312e91360876f6b2ad19a979753571a5a96e96ad9c34f767d87e87f7f2591bbe7825ebb9fbed67dd5090760ae3da3b7f111758d51bf7006dabbe37198609f83f3e9bdb1b7db92d6e56e0e156a109c3383820c36112d17b066b3f93c1ba0f4cc0227f86a47ca5e4887eed5504917ce52912a90e03be31715b08d4784db35782f1cd74360562b17997bafa289b9a94a450b37e9f102880426c064aefd53f57eba1b1d01aefddd0fff740f90343677c7f6bdf19485bd54a21a0cfa89777c8c4bf527ce05a5121e88984a6fdf2b7e03f37e0242d677464770634bbb746022d6bf7fa9b7c061f0861d97ef9f8ca61d2c6a00ae0d5c27204606f4a1f9c4a0e69ea236e4270e97703d45b025b1902fa0a9dddd1057f9d651465d9fed0b92a179d869b628c736b09e00b0fce8724746ee52932571f690510addd20d679bad5f3e00f26c5231892e9066aa22da9f8e7baf73c7f23bdb3ee9f3f3c42db1effd3aadf3697ec5de62e02e644815f50831ea56f0405391125d99961d2c38e92013465feea03bc91f922e931edb5014c86b9088be1745b9ddba4d1ed0e294c271f3e8973c83b25f0c2a2bb17830d94fc16b2780020985f85e6e82943cfdd77fd63848fcfbe7e0b9a25eb6a1d574a731bb6d8bf5500f98dc4cba2c9324f6632e45695aa9d0b4fabcdc964df066b11835fc2b12396acaf32fc0dcd6b67053d3b758f18192863419ec9ec9e95901c4b2932ccf00fe8609cb5451a56842047b3411acc7b418d8d8da559da4b225742deac5c0bb087fbc1169a4616e8a19b1a8293e0e87ab46c3baf3bf9c0ffca0fa947ed724a0915bab8b790a1022debdd2eff10d1f11b25c8e61527621f244fdd50ad47968c3d03035990a2976f81a935af7ea8b748a1115f2ffb372a6cfea79ac07b5972565ef70c87269416388ea46587f8c7dd72bd8868741b3d7caeb45f98281102904c369a81df20f6d051753e7cdd1fbed3108c9d5214afa5ae7d583a7669c32ca40323d5ba36c986a586dda1086f7d14bc81eda8e83065a0aeb9a53fc8451a3bdc331a510c6546880f840fc27078af539198ac7bff27fd4c056a2d2f05cbdbab051bd16f2aa218a8670731173b6db8c2cc49af6c0e670f4cce8633b596e0e908008d3f01868e3cb38a898fdd4f54e4bc8d2e457507d822623075a86d23e0bfb736eddd3ab8f00e13fb60f33f126f2130eadc362ea22698502ae29ba641ba2ce38dc42359aad4d3837411a583fe2a7868d48a356ea77001984c8da217d3279ceb94bbed29072f21d6d8cdca4bc432827e1911e3328649a78917aadffd17c5325ecad95edc346578d2c31ba601125b3fd26bfd01f5056dd41903ca5267dc3928434c690863bcff1464f2cfd8493f0de38bd92395ce242c7ac93ad37e3de353e8f733820c14399ad24ccca38b38e2ebbf7724ab394e347771af47b6f3f2088c809a081eaf83d9fb2b2c70f1586a68d19c10c503766dde1443c28d87ad5e12412c0175e6d22731ab33bd4ca8501211a602b723350c6c22d8a6b6c6b5e3b66178215ec37a46f475a50c08b6802e6154bd713a5f32821bd9f7c947a5e82f5063ade889ea95c2a2179a91583d603b26720893cac4bbdc675dc5ed59451d5272b953a67dbfd0d3fb1acef6bc242aca1260f15c8e37c4087943582103c35601f030cda278ce6026e25f03a5b6c99dfed22c057b14c06d142aa8d48731f106d21d5dd1c4d56b20c309bebd27dad67d3622ea360377f8f66bc6007045c3683aa33916bb18f389db65c67d0b1d19ae463cf82331be9032d6e0506d41036dca0b04d0ed8215986df0db35cafb6ce5eba56f5efa106132bc37793e0451b1d38f7b0edcf3607a3662626b72761e1461f3666e55da8b983ac6f2570062f523f36f35686202e8214168098d45c67ae448856f25f81ea4d0108dab82ac400c449e92b2282dd6e51994333f710aaef75fb2cc0ecb4007a1e01228e3ec4b2c8bd54a01755f368f85085d55ea6aac5a71cd7df2ce5910dfdca9aab60af38f90fdc7afb63ec729d031b9627a2bfd078f0313db5648d603c1b66b2894e59c5411ce56a22c747959437557052fa0abdf149718624b1448a6c070fc764a868821e238fb6874554f8857d9d10285df48ef7af1d0a504a3d322c1c25231bf2fcc3d9d64bef4f5cd3ad0f634f8f9e9afc3d221855912fdfdeb6cd8da186a7feb3bff93450b53d7e013a832f2ad6cf1c5581f9f5cdf61c8c475a382a58b5d0fe582559fe3d45b3fec37a710609dad76fa86f4dc3588994a9b57b4d2d1540a9bf8d2a31d28944bb9e76271ae02972246bfda57e9507205a79f347b540c49931af4308293bcaf2ea4cb14bc3e804ee358b916419ca70b4bc1918aac40e122cffcfc91dd1b2b2757428b3d8a0a873b2c14d31b0edbfaf0ec68068d603d7ee0b91930dd2c87037e8e072024405a4e5b78e75c389ed74c120eff32cf727d41eba2b74865e6bf64bd145642a076d6cce66038c05d7e3a9f1833299955c68c87511186c2b1786b30319de0c48002a09f889a0f0532916b87317cceb25a5adc9c07251b07ae54facfe2b4e63f68d81a2ed4ff1f7be0eccdbb9bf98587b9cf1c965efac190e566dca14a51e5864ed2ed1d1f9292d1e19bd65a1ea4fb0f0adc02531220184f3fc7aa64ec5cb1082988f3157a3ade370e500cc687431104dac6b59a2317714d89c1e7233de94234048c6a2dfa85612921fbe0322693df7436b97a7bb5825ae9dcdedd9598d0fd0c21622abe3848d1770dc1acd8b58ab0792b612b58d3ad0dc1179331404f8e38ea0aa1138d5a5246b404919f01ea3cb104ffd8ea1873bca87ce35e323e3d40a0f46308cabd34cc4d656e07dc7439a8b496b31fd6c6c55660e2a0efd5a8d8a21f0e96c98e43dc8b401e71f633d1598cdac4caa075f1972a2a5e5dcb8b3e54b58120b05fe6d212336361cd997ac2ee12d242da3868100ee9bc93ba1b4b3b9e8d7cb2674374c4812df663613b5ccb0029429aaf8d0f6b2e9aac2e0f6eb5fefbc0415af7f4ea687fb714583435d03b72ce80f8612cc6b33c3a1c83b81b25d41cd21c73a253393eb1ce48f455ed4c7d0e06ccb132ee9c478949ff566d6252b43154462bbfa9261822632128258881229ad2c6186684012291017c4cbc94cfacf28d233c01e41d5ede85a04a4a03f1ca16f6544ab6a87de2a25baedd95a2390cf9d9483df42283a6a71ba21e57429727fbdf40730981b467c0cde3f1313e8d3a482dd728ba3e0b9b46ba60cda6cb9ea8d6b3d3240c4f479e509464cb355030895e8c0926d30d8f279ce8541d5de446d4f6b550266e9c86c920e2a560988558de25cd0b7c825f504a39f90aa7d381abe09fcd1829ddc2a59f0f945a3311b85a514bf61316bd9f84019f29398189744a4b53f61f077cb345592f66a318d77facc94cfa3bc0cbe87c9aa63b195858d202d3b11e97f4877906d72a334b53b0988d05a4df33a4729372483d055f1884f6930ac2791c67c21c6181124f2a6bbbad595562ecffd252a5f42a955dcfe1940ccb868f577b98ac9be85ab519893f421c4a7abb4127377614cf0dc1d92f71615e34ce0b99140f9b1760b18500d554e03a020cef53e49c7cbd0ef20ba8d8f0caa42714ffcda56cdfe35524758d3e38b913d6e37188348a504fb4a36602df91e31e964bec75312ab4924cc34a8600c088e99c614ed902e990f594d71d57c3030c8ddf005cb90045137b194f342d49b78db03cd43222160d2f197dac2ccf25fb0b45650055d7aec85914198c14ffac19d93c88a27c79008b2a0300fb2c3db0d64f9fd6afed59f5f773be28579d1084acb4fd25e289264d59caeb86a588f2b8c35ad60d5f136e76647f41c335ebfb5ed3a0b2aca5b1625ccd32aafe5880226eeaba24bf424a7547a25fba36a1aee04c3c133db2cf4b6c8ef4b65a2a8ce1d71d9e19767dd48249896a83de91bc26ed7faefc0d923eabc50ab48b9e3e51a84b647f541cff5eedb0e8630a24353991e0d61339e3f5397db782b094db03eb2eb969b7cda5f081412771fb587a82a1976a1febc59606aad54de66dab2e801f1ea8b342d5fde45c2a568a0fc93402710e62179830d18ebc21349f319c60383ae5c3d33bee1a4ad8e7f9005987b8ad3e12d145d94d781ff936f021943e71aab00ea9d7ffb32b822f4b796a6958ff79c24de5d7526cdadd0cedbf21de71e2d7cea7aecdd598a63fac6775566bab1ba283427faf79bc71bb7c080459cd89383946bedfea32533ea61eb2418c24e72421f47d1cd3da009fc6e6e1eec5298053b6462b5ce416e8c0592f7104000ed600a5405c85f3274245bed727b00044fd9e0254c7b93510df084cb799e9933b99fafcb4e31bd0c5297bd8cd2d2dac8c1df119f3025a9f8c4aab39625ce831070dd41ef35b08316b8d2965138c5a998daf878312ae92e482cee869a0ac35b6662aec2a0e0c573d235c49b07ffbe728928440eb639e67c26241b12f14c6543d3e260ec8cd3c123d4636685496e09295ad3ba212e4e1a2892d668e489159980f416e28c71ee28223975b2993c8977f2531776bc253c48618b05361a62184d04006483a235cb059c663094481eab433b0357d5af935056f34c442b1f7d7538113881df401b03ad2cfd53c38d22649e3eb7d3bc2db4a825893086c6f4d56524461de85c32e0bac72b8fa44a2d65f689e04d8adc140b8389329793711b3a54219b410fa07259f125dc13369645fa29d74d5f46600854c245934102d2368b00c171c548880b934324a5d774820309f0374a2c4ff6ef68cb5b3116f7c5269f03866ab2252476266f9242f9589431cc6889d00b67f7476890ce960daacf362e29031718fda7f5ca7703804345e91d274acf805223b4e40f93b2cf7d4b1cb61da1ebbd08c8d96db67a10ebeea6d9e073194134caef8b0954ba0c68977c1db03441ad0c20a763462df33f69b32070ac283a71873ce81cc242d7f8da338e69ec73fdb6aa389a619ea1ac1dc0bd36c6de4f5c70bc3c833d97cdb08e34b12ed0521806de6ee98dfe6e4d693f4d03bcfba7a20d0c01b41a4dc626ad66a8293cfd9a5f5625b2f663d92d59b0cae51a1371de10dfb3e63da76e2a9aed8ed2e46c1b5adb58f18349694c212142c236943ee0fce59006b500f6bd8362b69b2af116e85b9fdcc36496c35ed744e5ae163e99ca907c3c7a011b4f2f16cdb49c9b7ad0eabe77738871e0268f4daa40d801e3bd5de8d48f6c1f0ad4d21bbc3b06b5ea0c8d92e1065efda6c0164c68bd8f7d4a62cdea07556b251c06b1ccf2ec2ffe7c7569fca69b34ace4d2b6589caf3d11689bac5b6666618dc1aa8c60562f47f0a8f6f7118f0c19befc0f017e66b679700926740cb8a6a9b79016faf2c1a62d09b445cf4fc0690bc4859b670b191a661715100b414f79e5f18fcc73a9918f85c61b94d10d58f545dc5bbb9ec2a6c1e0cc4eefdd497ec01b89f6a6bc7b2851b37fec86cb033235fdb6704e0781ea0df0f03697d4e8e68bed69eac9646f77af17549f6c8f7f5a4c318eda42c62bcf64416edb1b7705006ea471486179f2b1d3cb07a4a19869bc9952121f22385b8ca45ed986dc7d3852d97d9ad82fd2f536a9de3155fc1696395f9a0ee4ac4fc327660b1e853ecdce34d81d8ec87609b71a9dae1a737f6754cd397377544d9e6fd5e4a5b64a520f1370945f7e547aa3cbe85d1b7dad61fe0966b927b6d64aa5be07eeb63f6098846bd4fefd1237ad1f6016f9d8c88dd20a0de3fbd60fb335f2bb45d207b8e67d4e87a20dfd50e977d0027f95dd9d2a1d73962f1cbce1f093fd489de83c476c5c070266dc3ede684c552d4ba2fd7492f010adc281ab744ff1d6da756d515313cd53a29a7e86f06b141b1d0ff059ceebdd071bd5ebc5a739da07b0670a51aeb5973614543350d253dfaa6610881b410049af01d3b5592ebc677e68c536a3d2c1d5191ae0d35cf02bbcd66be821c87b9ae41ada04996faf0a7e17496e6a0534e89ff912e3ecb1a618182e90a88dabba5ec277618c3ee2d4d96c4bb54ffd505eae2551db2530cb883f190dde57ffa8568faea07abbcc1de24d9fda7fd43e75e5b02ebcc412900e68344b168a40175ddce1e1b0a6ff92679a90498aa87f881e07a4687257b536bb84b9da6d6ce22180e70cffaa2f900a2a4d79f5ea5bfd3ff6a5f90d0c9786c0652f5f5e901f7cfd9643f748ffa69f904c2a4375fef49ffd2ef6a9f60d2d948ec0d8deaf3e939f6e7cc040fae972177238b54f81684fb14bafb1abe770935e97ee5ac127888dd936d32df19757b05e93451e97f8111db0a3315fbc6751c10aac25d4def7e2ca213dcbeadb40edcca47b3500444daa213c4a82b494838e605471a9685f63db8acfe810974975a041e0fca015266e599a28ab70b4669caa1c0c1fc8b408b0ea449aea6f122e1da93e81d18db1aa065f3928b80e220f5a13f71334e5200987a259c121061b09e03ad329921d9dd83348b84c61234394808efdcbf18e456d3d469ae3fcc1f62a2148031f792ee68a4403a34af100b22d996e668bb8f367c6eb80323765173b6ed95fd79d6256947816181a37651aa9a55333bdda48691e52feaa597ecf2ac8a1a564716b133d085ee09112558bb1fc53bcf3c2e7bb10c9010fc0c1e156fe14c006db2eb9f40fa7badba873f74ae2a57c3a7603c2d7af735b13775e4a46736d591402cdf0022b6551fac6db49b68b2a1396563cf449acbd007753a2de31b768c997d12fe780c1fb537dbb39c3398438ca2e1ba1b6c3124cdb9223c55f7c0306bfd3e755156f203e6636345bc94187c16da008f5c8a60bc09caa5419df1b82eb59a87aae46b93f464262d372803ad4c308f46e29388778fc5551dd6f5a6189433c62dd896d82627d39e5c35a016ff4d1e60d81a55fc3c53ed05f805a59f9b267beb9be0bcffc72845651256ec7e434d29739aa13f4d7f4e92d45ef7d922e18953c830e920906e37cf94638e9841a88a012468ca4baa18ec76d54cc311027b1582b2709fa76ca775a43abe2362d7008d8df8fed3d58665b1a3300ae4ff700f9962bb091106ef45bdd241662ae1d277ef3bbc90a9b6bbd06498a4af0da1426d00adcc9395adf688f0c2811881d492dfe13d2f3765904ea0df0ebbeac3895bc2fd4e9fbbbc19fb92c23608384ccb7d5aa5c117cce308259ac1e8fe7621e57c839042eed723dd3bbaa0b735cd719a0d901e0edf3613ab54a7d5c67df3ced69e6ade6604756d432dc003361e4675690e244024e7d6f8977b19f3a6856e62dd8bf4f2e2b998aee1f98e79f30264ce3379f586190a9a49dc67689707383751c7ca25e49fb1c5ed70a85d18c2b76183dde59b0932ce7a1ce50446424169e8857dadf2858ac7beb02bbf8afb2ef69df31cf9dab8f793f6a5301e3215ec6fc925fe3f90aea7381532ff7a0323f73dd0eb785fdd565edf24277c06d25a6c157564bd40e3a87683feb16b4c43067d2abe7075b33bc29d3b36901e9612d911863f05a0735add6ef426f2d829bec7f66c9ce4da23d0eb02c901366666481772b4f9634fe0b545568edf39b4bfe3a986acba1bd5a204b7f6342f6c2fb03342822599d1845d865fc39b1c00e1afc89ae16fa9f5758ba6180fe508632eda5831ae8a9a4ff228fb40b8cc345b352d1eff6528a94c1364dc66a92b730ff5f3f9395dcfc7dc0d920a13e0a610c141c69900a39195b4513da44c2d429cc4f4d271118081335927894cd2e61d53c380dd276ca4bebf296cb954dd69c5f3705581ebccc839a12d59f2677921d6de19fffff56040ed8f506d7068ff759cf66b8e483d2a71f160175d39b5c709638de4dd7dab89332aed5cc6497aed38c524e3cf770b994c32da0123cc6e30342107d85b2d69ae4072f4b2915d18c98d402d886dd2544da58b99bebe95342cde7918136d6f655f21428bd3c4ddd6901fdc25a19d70320ad9c18bfd5c2a6d33a12084cf8b636a2847bbb2210a83eb88570cb9f02050eb6db070616530039d1cfc70d0a3b2d3283086d20f1f3ca45d48efe363505d0828b4bd7f97c10ccbbf84c8fa49aef58114d802ba001c03db21bdfba1dd346724a382c3624df6adcdff3726f1e1c406339512057cbd1326aebdbf310ad7b3d4ab151318176d1e3035b2bd3a4dfd77f8ca94fc1461b9b123a724bf3c5c3c94f112d935784444219c4997e1c788d35eaafce82f2dc3f1242dc372ff9213e9f44788f9fedd8a01ce60f8d903390fdf2df784b521d931756f29839efc86ee8a502509a8989aa2a842b1adcbac3f3199ba560ccd75211c2c8e9c11e630ac9acfc93cd389e6a8db3451c601a0c56446bfbd0d51a2aae7335a8c687e7297a997c7474e2ea8b779b427cab3e808207c3e913a465e0057aef8dad4e86d6f049cc137df70b75804b0e688bf4da1d6009cd797a44fb351d5fcb0a4840f6df7e9405e268409755581548510083cdcb9e9481bf896fd019bc49151a8922579c5dfa9d03d72576dadb280c11e0b3273d63b4237dba93d2e25c7f78bb55e790ee7cb4cdb7ddf8e9d26f28ba73b43e10e9b737cdc0ac6d1738024a7f443e80e6035adc20221b1e15aa014eb584fe27c00b28b9744da711b2517d16831132880a5f8181a036a053b0fafac987ff37ffee7dfc46fe987fbfe2468c0e6180e99675bce0ddf1302f1cf31e8f343d4f77d5d2e7f4e1fc80f36fce78c73aefd23fffd1376b49d9c039ea6a27a7d5d014fe73d8c2f2256d64b02e6a2a11e80b4f44958d20e8e42375d4a3b7910e5e09a9ba4eb379b21e99235141b83102bd620003193db6d24f8affed39d5d72af1ab7bd3e7520b2b2e75480335eaf7c6955d88d232211440370f1fb1a4aa5082128e2f7aa71a7f3778aee455c631188ae02bbe62d0ebeb20f8080c2c652dd99f299880b2730fc8247343c40bacb0744191d519ae65000725134ba8c8074a4753c06a6eba624043e44c74203ccea8817c18d031b25194eb9024384fcf8c525f2c537a376db4959538aebe0e371015a1ee74b68328e02b596b3e8b63834c1cd9a8003f52d4623bc8ac861448017ae45bc456cd07836edf5f2ba66a7eb32e3067b7d479034a7c4574bb4c4a31364c917155c98cce47a3cd7683c42d31574a9e193000850b9e666848eedc03c621544a87ce0102b11f2e75c28f58da0b1163b45bdd615af6899216fd35743aac7d7f57a820644e03d76e94cd71751a80a88ae35f1c12e58b730fd54b895ac1201efe13b64f06564ecadc0ed78fc1d230e52cd4a25147ea3ad48364e53effc7409f78729a4ee89f1124655a2c19ae307307ca478e3521f3fa2e4ae53dfc713506ff0e026c55cc75d5fdfc0c32bb586ba6b9dd20cadc2bc7b32245a1e31d1765956fa3124b5e9ca952b7ec07e4814452359ca0aa47a6de6e2f79877067e50331719f26572e24fe4aae606501d03673b8c57be7ebee51c1c340e1b9b4c504082709b79c78f7398030c95927150ad331d3279f9ac2130fd09fc7b0cb2b3d68162f7370583704e2416d236de8d29c7b6e8da8c4cf7b8137b6a810fdedf80300aa58a251caea0d203f4640a6a93a93d9a1bb8f01399366739f5432cf600f9f2e01cc2e59e9353788880f991db9c96c5a4db5707daed235f3cda4984a5fc126d45b784e4ad4a3fca71aff75dfaeeed62c374dcf4748b23daa02d9a7e29379d001f3ae88497ac949e7e91f98909d309490a569dd4ca5b61afa4c9a1f5743b9754266e0ac951bb3f4f844b300768971ff50d48bb9de4794b6431ac934110cf7ce57bbd7930bcaa960d6220f3178dc8f54fd906df44f14a5a9928ae609293f88730d352e8ca2da48d4f4513b548bed9c9e026a530d7678674565858ceaab05a6bca7c3807e5d2e38f62c0c7592a0c8ad7926bc22a726afd890064abac4006059b3ab7953ccea6d41c74e045ccaffae0267302f07174bdd7e74390eafb84f8151831a50fa2668c8a914523dbc88d5fb9a5011943e655f61dba37e92c8df9d18f01db13ddc46d915203aeb6b69bc349ac3050bac8034502186fe778d85b927dbe4630be129d9e09f73e9077440bc0ef60e5400e92c32e2bc132c3a8b11430813f5413cc7bb9909b3f3d60344f85a419099a346aa13e58a322646c4328ae044c36d1b6b1d882bba40c6a79998428e31aaf127faa2d092e635d49c9154b6f1a5388e2f8f9ad4dd07b8db4d4038b1d97e131b004cc8a6bb3ee28cd7fe4a89b135be16973ca4638064b8958462019f54c34e4632be78b3b5428388655b519706068d1e88ea60df9f108a281ad75e9f4efcb2a5f781bb909843d2cac35d25b1102dc049abb8e888d7142ab1e4e2691aa370122b6c747804ced724e67e268ddce5ba9c8dd8f3a9f1adc73ac62c19890b0387889db15c6100bace68cb045d466d2a7c15bf22b2dfe302431dce8bc87b04168e41fa29225d451aec9f66c369b699356ad3ea27543acc85510ee21772a71036dbb523089e06fbf8d0af2f0451784193c8a4fae55edb826e395f2aa68cd01c49a7dae149cf69e377d339a862faaeed0f95924ea4f36c43018119ed95b9e82221f5cbc347cd84fe0b2e082bfcc2657062e5c3244c833ffa5eb3e52f6b0a2562836f6efa93d6190a2f2707f97aa1b447aeb26f5c689aecc018419440be1069302fbf1d9f33e0a2d1371d70eeedd603b41adcaa169ba51a5bca07616ced4545923393436bd9e8f427541a4e39b14e33278171db5565e979cfef1beb2f217e2e59932f0983c9dc5fbcdc9090a763a522a92850ee1533d3af95385128d4048c4316983d8cf70ec7db4a70d693986b6ef319ba346317bb9233ffafa59b8876813bc9d74c14c36dd0c4819361a7c81b70bf2e270151af0e23a11418c4ef11e1cc3483f2daf7c5f1913d5be64b7503f10dd33d5f891f62862c0bdc645a08d8e9d08e75c967e950119310799977f236760ea9b17e3a81fa4c20bf09c5c7d7e635babe095c9731a2b8991cdf11e2a0759fdaf0bb7b4a2c011e287632edce1d0a551f85fd5f4e30128ff396a2c201204139a9570d8012556b4b19162f4676522afc0aa11e485d8582e72546d5758acfe21ebd75a51827fcb6a1535469ef19767d2ce04623b827a2455347b60d1afe5dfe4f051146c3d63d71dcaadb0daef836b1deef5743fb57e1777c8edc91947d80e0d84eb9ead8dcc440a9c740a1b6799d5a1d3d251eba3a0b19804d66289f95db6c3df77d15f08ea2f3a6eb0568bc6357b0b4b0fd7c6a4e8572c8c15b02eaca79dfa903854f6e78d008aeeff6491044a0e7b5a41c1e4ff24120f11820b86042901e2517d6df3625e20ba81bd5e9a492004a09d8730b5cbec1b104118c264ac70d7814279b856627ab52d9e90f7c28c5c7cf168d68de61692ea0760488af478b2d0de15860887e0530b87f986398a59e25728afa23d9c500fbe1de6c5c1ed8c3110a1d009d5af875123676aa670090f79e95609d6b0db43fe184ba1407f85def90e6d52234f51186044f321027489ff4aceb636b0eae039c9b4087a26e20513eee57c35c434f40f0ac5826399716866c9e45248337019b583d18dcb79ed1d26748ecc8f4eb597ffbdfbf720c9f6d429cf08e729197ea1078235e3156c8fd9521ce4b9860bd4c6fd22c924b7d441d8d80df47b2e2f65511ed186a27f28f785e0a3d7ab48a3ef4d934affd2f57c8cf34acdfd197df708b5420a00b2e37d2fb9320350eb4ec7dab017db3c04fc2f75e7357cb2c55f299f1a75463a19f3662f4222f16b1eca077a390f60429aaad42b9bb84deec9d73de50254950d4d5e913254ab01a0f874b4834b245d2697eb98caec5a279413cc93ca79519533f26b110071475cebea354dcaf3ca1dd452457fcb9fc991a6c3c5462a8b4977c29b997fa645737c1fa4c40eb23bdb780a9b3aeefc847605df452d3ab8370553f792f383acf5d8a3932ae8c1d00a2f59c96f9c5620490659e49dcefdc29f340a7004828af4cac434409c03801374bb2d81dd00226f7b2cb3320d7f80c0261e5b22b9bd5d6efd456b2dc64eedba89035637c5d6ed135a39fc3e7de6a884460c142e7efcc77c7ea6dcca1467871e6797475b827e74ae2ab4b7510a330f15fe7ce17e4c2e9c2788d91e97dcd2f24eb90e19643c6d65039cb322a9f1a1df312b9ed38d6e4bed657ce39a2ddf57c5b5c95e348bc1030866c8d4e7df3f0e095f6fe7b649cbbe408f0803e2790adc7124fdbf39174bc1b13dde0e2403b32b8639b629ab9adb47e296c676def300f2909c7bd641e6d7dadbd81702fa91f84f72a44a7db2139d72e1664a3473f35650b3d2fc42c7c5c0bd08888a112664c08a336b8e085a914a7312dde8ab870fc205852a8181549e02e4b4290330720ed83c5034430a6c2000406c6e012b0510d18b3fe46afc731c3eaaa0966dcfaf8d831908dbe841dfcfa902708963a2bd12a866f46c6cf4038ea68a3197cca9498551665b641d0bedd00d5100e91ed36d985d9392c9b687f9481d2788841cb12c71b055c63f95ad4fe8a68ec58be9a3d26ca14f7826afcf44347528ac72bcadd224f8259870844a74151327d7a0953bd49dfcea2595cf14edb3669637ef50a0a4b23c5cc22ca56f0939c08733e038c315c09b219ea9f0495a0c1f9aa0d45ae0cf9cbdad6e3647c83fe88d7cdc859452c94fa9878f25bec3888d4df23bd92209af5f0822d885a61ad37d64808307239009280a0ffc916f09fbae7556f846bc71fa049c93bfdf284370175a98bace289c8de90ef704c21486f9c9d975813b3b60d8264ea895489b1d06c3e7e014650731d05673203a08513b67f84dac486bd7129ab5ef160e986c892a0e019d8c0023eddf588445b7a8ff9d28cad2a9e7cccb152682c3779d82175834950640fa6026c4c15de1b314ee65a59e012bb46a6ad7a47c7310ca96beed1a8b9336a0aa56690e9dbaeb0b36688acdc56d273c0be0686c02cc579d761e24bcff86da798b87cbadebc59f8da7dbe7b33f085b36feddf26d7acb254a29d67e855e63f901755e5e580ded8d318feae8ebf22061721304c6cd309d12d4b05f409cb68fba95da42b0bf4b33f34e8fd4b0049ebd06cbdbf55f0d9724e301429c498e163c8bc5f2bd40c486e57456783e585e360aebdc0b3bcfe61795a9cf79229d599aa6168619af580cc5d1b3049a1d3f898d68a1d20286fba13452692310e47c71eb7b25ea66f4a347223b155dc3207fd22956a7a85b6ef990b92d28401d20ec3bc25e24a501dfaa3930248173721342c95b23a70de39ead8456af937ba560d187533eb6f2963658c0f65aaa6fa23bf6e3fab90dcc499ada5d27b92440b06b8ae197631d4bfdeeceea34aff6defbae563795028b1b11feb04a122ac709f47e360e379bdd72c5fb2385ad5d00587c1fbd8caf99c9478e27980688279b3434d15c8c3c85ff2a2991a975f91fb16fba269634b70404203329f4f4331f00337d2d4bd2e53bf763cc10629cd398461d823d5ecb172afdca0e71956ab54c1f2aa6c9b00f1048a04ea34a274dd0f4318bb17835b7fd1e3ed64e61df860ba756c7f69b1bb2dd11acd0e2908a82d9ce4d34d7cc62ef7a727324c16b646947547b7b6d0ab11579536d5718ee18f0d216f6925a41b0a0a1c5af88ca39224b8f6da8e7f4235b0a59f027213941046d820e83f63eec1015bef86b348c540a75ff4c4b0ab537b0ad175c40c705919e66fa8eb19ae4efd5c3428f3d9780858a0b2c1e87d9e9e43c12faff875424f098fd0b80d0fd47840010150c4e50f53f800f4e3cfe4540e6d13b1e3468a8383469909560dfaaf43b67066798874942f1dbd294e3b3642e32e322f85dc4b01d661eb19f1db69c546551039385de7be16451f83c68590ae45f03ed020fdf2535741b6ea395bdc320e139e4b2ff829ddd20482ebbf75230c6185a8170fccb2b181f94b2a13b4cd46b362893dbeaf1860ac808ebbfd2ced2e2bdc93449f53e559a06bed83c6c0c94c620c4332a76294b077babe47b7fbbcda469844f6320c06c0d436625ddcd4ac0f1d62ab5a690a4bb21fb91289875cfd375c52af58e2548c7f69d30c89e35ce060110083ab24bf30b218567c410b98cf9ff585b4a53bd8ef7e260f828848345625a2521e98b2673fec71758cd40cf32481ba48d1cd13f30eb370bb4816e1d530f1a7ca889d43a3176da0afae6a2416aa4a57f88498cbdf7822a373ac708920ab74797827038d9030ce7cb3b0a7862c39d720a347e39516ad213b701eeba77f3f9576d971746c509085ae2ad67923240cde16fd95955a1bf4de7605675cfc5420266559027813453fc16adcf2d61c7f81c88ddc486867aa28e26d96f7316488db5a0dfa4f89857f868e3bd162a2a87a3f16cd42edbbd375a97275fad18e842db76f51de062003deccba5e572d04f36f64a713b6eb9dcadbc8fafbe0c3e382f58c0b4c216afc4204a4303929976d273e2801ce210fb8d22ce86dc221ee3142f1883d6be7746b5ab34398ef2434aad0cca85ae3b74ccb5e7537357c3a9cdd98ac2307295ceb4ae77db10d8afe11b68c5a64d5d51add1046ee389e076826868d79dcc5628b52261a9300fe9024141be3bab4a00f4a002d92b676922d7f526a85f371d434ff67acb1830eed306502f796d7d3534d9ff099ea8a63ce243e283944a13a96ac2a4e26bcabb816f45a13164a198d60a3bf23fc25fd2796a6133461577a84c41073335f73ca6923918a55f24f6db57f60aeb65683318649c09675202a07ad2530ad20cdacd37727f065ae2562571896143d5039257628601b796912de0da412a64e82652635ad324449c673c85670a24c2b72fdb85aa0fefacd0b8f3d2fcd3b83a4dcbbeafc896e0e8cda9c08eed9a4635df7728ba499805401024a57fcc190eb9d35e82b22873aac6467871de2b95d95481c368233711f54da9c3250d5af75999849c5d28fa7406b961e3ead8d249a4466ff3077efee70a891bcc8cb34c0bad6c61f802ba5c205e0eb87a6d69e536a5d2a38ec9d1c7b097369770fc8f17a402ea00f1c94a6bb0ed6d67a657de6bd2034c35e888f91e55c932b7ece24b4817d324b56c6fbcc02a19fba61b75c6818cc0f2bebb13ab3b976ee1d5952caa46884c0d300ef0d4d10a5df63698e4c06c82a9448510454e04cf51502cd20a8d86e9538918f0e22c72a57a85a58cd61c67d3acf83bb1e8d753e11c69c545e67b5a291951f131047f3bf3e79ba3dfbbb92794c0f82f6809c62544107e0bbea5da30a4c652e026c339312535cfeb24d2cef9e199d528b3a5a3c505e26af10adcd58a57c712c2e2f1a8cae48c61e0bf0a1fe5a0849a0ee2c317371f7245d0bb3b69e038276d1d4e101e46bf8f367d23fc3ab0740240403c236c0e98c03e8554634ad34a35018381454383ddc856a89e964c8358d0abdbb91137c30fbc2b069f26309b07cd53705e1396d4d0b9ee6d4b78c367c2e64305ea38915b8216a2a84fc41c5f4db34cb4f654f1fc4403ad26fdd39f6a8db55a811943a98b911a1b20af22eddfdf5924fdeaa40b4570e5d44b6b04f3d5a1e3b4b09f97ee9d8f00d7006d67ed1df795cb62e23bdb5ea8797125e2f49cb0d82a7c8521f4275aa7762b5b09f45ea349358c9f30fcea1f6232d492c7d1ad622d58bfcb0cf49964d720c56b0bfac57630df3559552c0f6b024938b30bc40b7f5a5a6f05e8fcda90b2a6aa69e369ea9edbdc8e9b997c675f19e1245252dd824c1ab03ba448073d2f25b3592a9b405e65412e5d1890b82ca48eb4c74a082ee42ce6a5863cb5bcf090b7869721f294f0a24496125ea2c85bc10b16391578f92287022f66e4a12df3b270f1fa7fe848db6f8fe4187c6d8d20b5aa42940d4522f15943cdf622f996337fbe2ea99bcb00268665c793c6aa0bdeefa1cd221e53e0f6f3fdc15f66a947da79cae9d27f5971a3144c03b7bdd6c89ad0173241cc7c9e280348451f4e4c66e73938c313b42c70749a944489ab7fa8de3d49666594b353c66f79ae91e1518efaa9c10db1ee6a9f9e63754a3de6cba57115d15f6047b4154aef82bd35d2371f38e9a937c96f8091d8e9f271d52be752c52964478248274d12aab8737230133e4e0733bf4c94da4fe2cf89057decefa09f3a0f837713534151c44dbcf157a8cb782bcdbb6b04bf63d73db29c301f79518018541d465761be82332df4630035bd572abaf8a5773ff933fd3093b30c943b5f5c80bbab83204e89d1277ca0b2fcf5dd7854e4c52744bcb872a40d209af23c9bc2644a1b016b1b0e1dceebf4e239dbe3e587185d50c46ed320e1497ba3586323071e5a1b84d63feee9fbc45ff93495a22c75607d9eacb626f86c164b89a43c85313813bf0a54ea159d331dd18e7a867ef7a775d54f5e603410d8616aa5c70345e75f7976614bec6e78903fa1fbcbd4fac8e6153298b48c06c1de3edcd413253ce0909501b38e7878f7de6c8869e61c1c0a776d2c9cbe0649a87209d57e41357156da281759841b034227e5c30fb26776cb74b5b44aafb4a551ea2e18bc3e86964ac7a8e9f2ef4900b64443cbcb6f7ee20595a0ea992d384d7c895f676f9f73ca4fe8bd7e055aa6124c334e181de020b2d568cc14376c3c51dc07ce95bb5ded0aed4398f5f467ea1e67b9451273ff0677e860c2a6586eca1e2118eabc5112ceec9230f419b60e93e51b041fe17d04ff51589ee2e3e7144a18de88a01510e37f706fbb8a89245bb775e5b165f81414f937a5fa130bd200bf159ca2846d25e5ede7eee02f8c2b0692b41bc899f5535db7331fa5a9c1e23740a17f86865854f721efbf40d794eb291072f67fb50d70ca8a32ee09fdd243e512293300b881ccd1823bbcb5c06d91499d98f879c0580df29a1377aacfee296afc50f8d691fcf95dd6195a1a9bb5e08946ddd9a8e0c59cdce6fb583e3d6c581359543ba2f74f9eb23eb4e547864027370882804b942e88cc47a3a0987e8afbd0224897f5cb1b6c2f2a37f20f0a3de433d80cca45d0ef6685de609bc0443f93445777c05df83e3aec83cb1abfcbcbda7a980714e2ec2c44a4695243c8f29f40dd9e1e20fd8fbc2bbcf1ed871e9758a4f11914046b7b16787ba6443a4af9f32c4510ac64e26772953864445c63eee976897388a89b7db09ef8a23970974b9a86a8f7f596f47882e1d967151e3d912d848585c4701ed5ba55cb5b0577cf69ec3ce2b329668f1916143fd68739077907aeb75261d9728e61aee4d71fda9ab00ab40edc58a809146215f0b34f0f900ff27563cc873d4b82f85878a8d6aacc9a8bea6557efcffd79b6adc86fcc9f295e0ef4df65fcddfe5485393d15a2bf3c2eb34a1e488b671317b6294656250f8a1c3018ee27d4030df26d84c0fe027f435abba68a0716259cdf05d1b7181f78b9431b295cc6adeb61aad4ac115467abb7be3182147e6f489cc0b1e4aa4d92aff020e9b65dfb4d13602107bb1160cb6f784cba2b9f0dd2c324c46f8d684c9cfb670d04c809e092e85fd95ca08d53b7a88e4b7758fa8ee8108a9c99657c28258778f8245b78db10c81b1bbe7f92a43ded1e39906d56f8f09c79ffb702efb96c95840ca192e4577b1ce1332b363b858669d46aeb928236b46eb6785544b6de02f4d039a7574bb14e4976923a8748fce6d1e085d0f03fceeadc701c8147acdde1557f8cb61d4c17603480ad9ea86fffba694202db58f7d5b08744c9a470699c913f93a9ce03599870c627689df6ff6410f9293478f8c529c2bcd34ea0fee084ff9b2b7d12b6a5f4b71c7ab181073eed56b7dadcfb051ae579206f8989526a51024fb14238f57c62dfcfa24dcdd432700077d037283d93932f995d015add5c12e075284e752c85ec25767ac91ed4c267412104e98549cac810515563a671a6612071beec08a6211cfc806a8f9f48eab15030b27df4ae6bdf6e8d07c06152f56551b3048c0fd61d0004f72286d5d6c7e17b8718e790317956ecab3c3726925c03eb12cdc5610d149f0e2a6d86bd9e8603103e41b9743825dff9876381ac85af6f7fe03e439d4cff083c9c146189c5890dba1946c2c343b775e0859763191c9e6c061d8669d4a9212bbc09b4612b28b9e9700fe27ae038b05aefc4feb3378e0971ef2d1dd3fc10c1ed5340ac82b01078b9f9a9f0f4bffa401a057f36db44c520a508de591e9c19f4abbd4c073dfdd5211a52b803d174ca203bb70371a7376b8ed70269be0c6f53281808cdec5e1f4b4a1115688638e3069d880f910e11bcd1d3924e498f1929192f1b893c8cc5d0d6ac0a28c7021949769d0e08bdea2219c927c6d0ba92e70e880bee1d102d8780583b23f59df9f220287dadecbba56482b620afa5895a19644310d43933511d7ef293fb19f66ec1f115b225207b4bcca11d63c680e5f6730416192cd9a52fc3df41926c537376e3b44c71e89d1af09102da3803300e8d9012ebfa1ce793a074fa985727e24a9668d566f7a8a9d412047ba5832a818b0f79b5911677f4744e75431f9143313693dd26a1eaaf1c2f150d8e035e05ae8083e19bdfd06c883a8a4da2c4b223ca08fb4409c996a8626c13059e2da288b24b546836449d6ac035ac1da48694f78e52c2ad51a901b40679b78e6235a0345205008dab0e5043da3b4799706f942cc12ed090fbd6b1b0dfdd845eb88727a9650ce737f153bd58880e0708550be5bf6f490fa970c7f5d1cb8fe1effde67be3a70cca8f0967fecb142af223a102373674ba5837dfd350d1f2f6bff074f2c23b86885abc02234102940e3bfba26eb472854e4c348c57bf486c3ff832c944da986f7975c1b819cadf9094de3ad18d7be9232cafe2dc0660ac0f0ef2be7f6b15617c0c00e273c19ee5274c36854c8a7dcc772ba6ca0239ab9a0d9ced66876e9dbe016ca2047ab41bb755301c594d079494838e9dfa75dcd4afb573fe02ed34eb1ee4b0027d24122821e1fabce33cf32f180e40e766559197cae7558b54bbd3e22096485a9b2f2417ef3d8f472a1e91701dd68e24c9de2bdb967b4b99929401310b180b590b8df2a79b8d6ca8db476afb4937381ad6c506fdee3beedf9ba9bfd90cf3f6da73366f3fea5c6c702ffaedca1789ae96d56c2ac12b45b3a05746b830c410d3d701ed6712a0208c89fee9f09fdfdc0dedc6f0fbe20c88e7c7740a3eca659c379bf0fb7b0bbdd32b9d9e686b744aca4c9b587c910c19ad245af44b34aa7334aa7d340a018dcab489cd776ec6128d9af4fac831e7c5348cc39973be1c2f98dafc9ad45aebe92b4a041f6e524a685d6cc00fc109eb90ff3f30acf2c268141667a724bc2ef01b76ca713fdc1c26638c3212f1f75bb1480a29ffd55185abd5134670db7f46e1fc82def6b43ef774b33e3ac82de061eed234aadf653425d4fc82b84d863ec9ba6814ad49604a6fd5346a02ed99f82184f6af6b9a73e0bc8306eb78da533b6f9e104eede746846a63de050d8c4675263125a713aadf45d7c057351e54940b9a184386ab34a8351723078174e0d788e346d30f5d0afd236d4dff0e0c93c090db28267f68686888d4241a868f46187cd2a8869885df0f9f930d5288c5f85cd2bac022bbcdeefc13b6e66fad9a33ce1821aa51fdf342272ec355395ca63f0b35c357cd0121c481f109eee7447e6332d12f74d2a82dd4396bed9774d11c6262600fb22cd33491a6692fa345da9c5996411da8826c47833b1a7c3f342857e01a425ff53ec1e8f002b1b6588f640527f30a3af0274eee69d751da75b4a31cb73d6767f7dbf6d376bfcdc9e17473cec9cdf99452918578cb449a10cdba4c38a451adc5a0be2954108447f84d9182277073382e6a50337ce2359463a04268c8a34248088e397414dfef48c2c7124cc01c232090a732c265e2cf9d1a243ed7a3a9f19a9a87aa098a18f6140211a92e2becdf152a7623040297f809fbcb552d34b14a97c47be9536a61857eea010b3fc082eb34ca23f49f57a8f0de0c5d49cd2de4af46f5a07a9d3eeb1c7d7c8d0735fbcb9d742a0748d489ab4eb988a28e6bbe62022b69208d8a9d03451d12bf732037a37be54faf463794150fa2f1b515ea9a2d3db5ee44b35473aa690fbf592a37572de536c9691436d9d2cb94137fce5a5fe700812fd9e4933996f937e6df7e5d6eb8f8ffc0eea451b81dc26f9f6f167c6235b3d0ac18e9dd30ed1bd3ac90bf3ae54dfca17fafe2095e7712bd49a32616803a852de914f4c7fca38bffd376507580eca06a9f23101cfd49a3a237699413ebaf46c5264efcd6e9f0479c6b3aa84ffb075f32e06b3edea4554f087f82a311f88232cc09aaa9c935b586860685fa3f9d6af5216d98b3d6d3a985320abb1935050a90e01bfca640810ea6520a35fb0be52f5745f940402e978f4f0d8dc71ba369379e21a70df1f39303c4b98572b00b758a0ef5ab534e3a459f742afbf89e3321109d8d7efc209d12e2422fcea0116fc6650c0caaf0c22f4915829a05f825a1820b06d50a42f825b102d014f825b1c20a5b21a7a506167e54a861c863027e540c2dc1f4fd039e0dc46fc6efd6c4493bc15d3be5eecf9f7bdb1e020679363008ee983a92f54bd604a537b997fe994a5f6ba9f46e516e9e0fa524bf84f2f27ec6507fcd6e557b4dd3348ddb9040f1bb04c9d2c4b0321090840f261a95a363e10e84a1d5a0c61bbd1db6505a940318638cf107fe0448379055edcff009a6d1f207847008738522a34f2d2b2cdf42c485c5e531972b96c5da2814e38a10cb8d2df2634b8c2d4f5b62cbc7ea2d1f6d6e81d1a8a66954d368711ff35b6c7677f22817eff252e7857011ea7939ad385d6ed5a897ef5610c95108491f6919238dea67e969b1cd9361abdec956b8bfe55fabecb3b8ec74b12ea14dc87412da3e632b6e876301a683452197904b0910c78296146ec5b180450bccaff037c5a0e62622c4236462492162fa377d8a85b1393b66f191c34979fa30e2d3b3d89515eadb2f8085c5c4c2227ff42a9645fec027cbede0d19b525e1ec63ecc62c54b73f2a994a7161716169796969b7fe096974f59ac7f8bf40c83b4dc485b5073146af91d1b66f928f47128be62934ea13ce949a7eae9f6c069791c96a72d2c2cf7b540bf79e547a311f4969695953fb9cd274be3e1966fae46addf725bbe7ecbcdf2472d2d2dd7e5f43a5a3efea9e5e3b7bc1495d3cb1d279c321a95224ab5a3cefd35d45385b8d790d653fb737409b50fead5384da79f2bf883259ea0a0f2fb971cf901030fb6f851010620f88742c8e110193ded9ae2ab1a5f6624b024a2f2f2fa681caf94eef2f25d6c047219195fca1865044ab9f2238753923f228723658c0a8024998522349d329954be818aacbcdf761ab5f2dc631cce694ecd76ab8db84cb4cdc244eed80bb7ca7d9c642350c432cb17ee2d4aab23e5c72b8764efe01c81dcc77f7e30714df545f0034b79e36f2a802f5cf270cce23a50fef432da83d4dc427838d5758a5485f06c1e24b17c84258fa49692cd9bcee93bbbf2288e4ff7356aa5397fea8f884aa9b68ce96ea67fa592257d345992bfc966263069cea1e6e80367f93b803ab57d7f5cd2aad1f743ce747be0c8c7894f9f0f8c06211862013f2a845a98d2b7559b7fe0fa2ea5fc94dffe07769b37ec380793dc63ecdee84eb82da12fa87902e1deb0c80299fa27cd3f2ade48a5db13f672e3149083c607bc992d7b450e2b91e10887a3c5a03ebc350afed04f4dbf5a3b15e3c3189787a110a806da2d530ef549e734904ee9f44ea7460fbf9d60d8ee835b5eea433d696882d3c0043f2a8458b8063f2ad0c0832587a3c9a0429c2114f8897e15391cd168fbc7712fa3354dd37c4039ca7ee04cba9046412d0615d2c0213047a330a819eae0eca5bba4a4d913ae83e55f77bd76a12ba979fa6029fdc9abc5a0c2c8ca84a806830a21d4946018e6d2bd6314347647283bca8f127bb0e3eda16a1f3f8bd8c34ccbe46337e4c3cfa2c491c3918de12be1811ff861ce867c78337c29df3ffeedaba362ee69a0cf873a3b053bd559261fcbec296a56626c8bb46d111ab1281f93d867d9b344de56c4b5b80911459665dc8d0c8d601c4ef60367f81ef3d747b05fc8c2fe2ea879caf0d9a9adbe40ff87ff3df6b4399cf7a295f601618fffac54f27e24a69943baa083eb9bb0d7b6d786e058290b1b595bddbef4742bd5dfbeb664eda9105c1fbb3a4c5f9fb3517ae768688f7d53cc4a0c57d0055474c108155de0892687c2f439f2408e86e94bff3889238f0f5ec491a7234f2962b8ea548f9674056f7a408cdd78555491ad4a5b49b44556c9f4b96423abdac80359250babaa0ae138d5a12869a6d7ae8b0d481b53c8b528f23c1b37d9782d4c9f9aac8b8d98932371c490b301737270a9446fa944fa234b923c2107479e4e1d49e1e8d3968d8575285ac633e9eb7bfdd2d35ab23e84f4f57190ae8efaa6c7d3a9ea99f42593e54c5eb24a946e8fd2fb98d831e9e17b417a1267c3317d4ada4a5689c6a5d2850f45fa5289bb013b42ef4c6fba3c1c97ae0f69940f29b5102fdd7a4d1c4e9c5114638c511463dc389cf81b87f39ec617df9b6ee969c93e4b297dca4232bd46faf72da68fe16e6830ef8dde8ffe59228f969e44a9e91281f91898f8cdcd887f237ee929a954b212936c9e25253cf003db5249e2cae2df470ea774a3a591625bc9ceb0948505c2e24ff042b0b851bc6f790ea7c2bc3785201cbf39d247fb5cde43fc9e85757937f634ca3ff2342a0cd9972e12275c7fe370485fe397a8f6a43949a587dbc34c0f37ecead0de0edce2f63e1a6bab95b65a699a06234fad908a381a28aff2af53dd73dcce89c38991c7557095a2410821d4ac0e6c457ba8416de5ead01e832b5829c62761da6337b00bb1c833823025c5743a69b334bab0051ec154c3344dd330d2852f5650628c28a47f18b27867717d08bcf5e61d5bbd707433acb6f4a6df220f0fc42696713878300cba7038a652a934ead8bdf862d73d24598857389cb8c1a86d2a9be5bebbd9c78663a52df5a968a3a6d29b625da92a95c4834937de0c35ee8608d73b391a284ffad7a9d26fa5f870fc6d87e370e20d2fd2f4141856071ab5eec8b97422513b7703fb8d868bcb4177c30c1f10670f8150bb7394e0ec4546707ced469ce1c2bd12d125621ef0457940058870c4ed66e813473445d96bd345bc1bf431d0a070a3943e91f635762cf136e8534ae9bf49297d50094df01bc22f8912743085dc933083f0330d9e972636c41e363fe279731338bbf1456992234d70aec1f4e5d7742ad71834d54fbfc6e7899fcf6f376fd384a1ab5e680a2a7cf0cd2713b3dba9ece9d37f31f4ea80391811ece9934ffa127daf31cafb0f68b3af59e61e06ec4f67806d8072c0d83fecb1e85b12ae52798caaa4587f937577f95048b979304c82f1b0078760ccc5c2d88b48d645222a2041295c612870f6f5699689a4cf4f5412974426231f24adaedb11936559b6ea5486abc7a0117d442b08868ff2744ebaa15878a451d8d3b80ab65c06fb3f9d30238dc25e8b427d5f75b0ec0a691d57991efb0e121ffb86a253f5b112f7300862d8774a9337362a87cb605fed0b1add5caf108c3d7d41fe04fb0311dac18e05c15eb9217e6014eb047b6c823dbe46cdd1684c83f38e184c424141f9d235a251187c949bb3af2e1ae5af23bb48340abb47340a7b4e9b42500b087e4996f004d36e73c8c43b0e07fa8baf46f9c3ec21c6c15b44a3b0cccd4661ef769ba4ee5f9256119ca19120234b8ebc5a1049a7b00c8360ecb124302c48a746ff303c3d19ffed3dd1cd2723b02f42cb6e77cd6207498e28c1a27f2c82548a0aa97f6716ed3349fbacd5b88cf6b0c6b97aca35355fc4231184f69509a72760ed55016bff82349175816a94867d9e35fd9af693fe76f31469541389289c8dd2ae8ef79a017d3ed48abd09b37408753eac0267c8d578f3e6c963099c61ec1291ff38223a2f84bc4d44e11f45bfc7186374ff1ff87134fc79c02aaaa8a28a7767018d55070f1d3f7026d24414d847c1fdf65dc41c4e9c211f3e9d9da63d0faa04cb6baf516d341a8d4e2394ea440e4c5febbad34bca9be87b79aee4d3cae7c771e5338a066f9ba6514ae9cfeee3d3acbd29efc8a1d91cf871336015f8d9503a5fdb36aa69dbe8b7d1a67d1c69bf699707bd445270fad1e9f4a3d1a9fea884f24ed49313ef39417a99f20f6fdbb66ddbb68d469ba665736e9d8dcd616febc9654c9a4f75b9313ffebc19d260ff27275683f812ae4a22669bc777a71f010a353f8effde8b0f93b157f4556d4a5123ea757777438133ff5988e93435cae1738717937766dffd0f4f38b31b57d0d07a730978786bd46442f5e7ee31bc8fd04488e9456b42ed8ab526d43c5fbbefde1c8e36ef95313105ef5f89be7effb07c1ed8e725b00b1df0515709163ce79c735e1ed963f71bd5a25151e33f140f682f37c47391dfe5817d86af8463222370ece1cb7f56863f3bb1dff76432bc3cb24bc41f93f7df37ca34a504429fabe04b8c8b6a1a3d7fef3d99ec83299ff0cb2c39f07679689fb3165dfaf4b1a7d9e5a17df65344443e26613f7f276e7519f84e9c5c067e6c22460985d6058d0b45b436685c00a2c9417372840ce6df53fb34825ca635162ec2e416e79c326e0c84413117e6dce732f73e97e986f909f3d3c7854ff825f13182ed47abfd66ef4b4b641359acb3dc8f6cf7d58e9e64eba35892c996546ccaafb0d8d3b7589677b12dff625d7e857d79b72b606660d8be8c8639ae82439a050c844c5a26c3f6e110875008e6e653ab358485b50fb1e6859aa1f63db8b52575fe7fee1c0b310c0e981b303f617eb28061c1e22193f619c2ed6a22a32d0d1fd8721512f3a13204826121318cc599cfc242267045ff4b13e884c5c2276d1b884eeff4aaf4c49086a2795898910d090c4241f571d1cff96d455624d2a84844455a0a62d63e387b987515f07b77e66a189441219c65d049e63f529a803f643405c16977777777777777777777777777f71f41e3d01f06beb70aeaacf06b484ec662c58b4b0bcbc395574931951ee5e1c79081804e8dbe7b6ea3da8b1efe1130ef1c0e78bd61fe813bd360e8ae7dc4da08213a74fbe1368e0686b39fd3fab3b003f815d6877fb134ef625f7c8b15c0b3d8993f5917bf6203f02ab6874fb1326fb2a82f591e1ec502e049b6c5571bf323bbc377f63e67ed6ff69f5a98221f8988beb919199edf2c5789be8d740a3bf1d8eeee383df248a2f3e7dca3fb68d32ccc53fbbf59fb9cbddfd91d7e6463beda164fb2007814cbc3972cea4d56e6536c0faf6203f02bd6c59fecccb358017c8b7df12e96e65fac0fbfc20ee05958ff2831d47115e47119f9f254ab17ea13ed73d701cbd796d4f8543ecd7824419fdbb48f37b42cfb2ed2aad947b07cd93f3e001f685e0860c645007a9041f1008016313b5cfb30b18b746ab6401616ba1a257f85854a1a25ffc542200b97344a7e8b7c160b99344afec9aea8a458d8a424e5936c03b1add328f923db3bbdea2042fa0929a54f0c5ad84743dcd08705d5bfe5bb904eb907e911716e3c8f681412392dbb25e46954cf096a863ef033e4713d1b88e5fc0cab80a7e470cc6f9f9f1bf3c69eac7ecd08a9e5b363c2ec65605a7675c4c0f0676cd49bf121a89312a83f7d8f46d71af83d751a086bf0e3fed910d4601dd0e69a1a0c459f9feb7df63e5a55ea9728ff1eac23ed4b96a665e08b28eebb398acd30587b52b5a3db037ec7d9edd64649ed49cdcfc544a786d0c850e1bf870fd293146a11b4427e4ec9c1c11afc6ed5e820faa60fed7bfaba21c474dab63de4374a7677dbeca1cdfed94c8343d34f70f6de0467efbe419be30f8e4870d6920e9f6c89752e36b0dc047e37be1a95c59fb3d6d3a9bfe36337be992827c994048990979f434a299f4be7449893d3355702082466414f5610c8d62ef083b5051e794d0492b03b1831c67bf9a36f4d85d1a8f73576cf9988de45efa2f7eca90b6a869ab3a250f8a9a66b3648a8d8c317ad6a46e1eca7cb649fcdcce17c14a5a19f7dc0540112bba84ed1cfb2a789948ab214dd27125d1743f87defcdf86b71a8d8cb1793c92534c12f8913861ed398fbcdc07e9a14ea4be28421f8257182104cdb617b974518a2b460f80f421a57694f46beb4cf67be19f91a11aacc341846a7f2c4313534cfa6b1940dbf055228c101c02f89143dc07414b30fecfdfbeaf001713fd8d247631bed37f7f743d82e7f7e4af9d0c2931e2dbcb0e8881c0c5fb6f0c88815aeb8e3ac74d1fe07d6ae8b0d95d75ebb2aff0353ac070ef6a5a7af03f0bb21b87b94fa1b8aed46da6bce6d2711c75dee9d7b8e1371947bede66854fc1a434451f30e1346f9f7353c47a7de0d6803e5379ac2a53ce5b86c66d9fba7bc9beef3f6a3cbfdc67d677b74eff230f7dca38acd34de77a3ef2c8d873b6ef45d471a75544565c444a3ba1944348a7b2a1a8db623f4e037eabebb2edd13bc5d268878feb896a2ee47ffbaef46a697967bcd92fe91449a361a7d37c3f1e8471692485c0d227840fc236709f8f1b4dfd50e93bec3a487c1292958ca631c4ecaac18119b75a9ffb08eedb94f71a99744fa1e32f046fa0260d2ffc01811ddddb6c9dd7cb2617156ba34444fb79ba58d11ee220fc8d59b77e0fa9c3561aa63bb3b4c58723720ca633b4c2e287786e8e974d513623e8aa65f7b92d5d1a2a7402cbcbdd167ae0135c3a7d23eaecb2edb3f9c9580787bf974db486fbb19d6ebb8b338351a55a1e81b5045bfbdeb88a9e88d7d341655d137ada307c4a2cfdb7377fa682c12418961597d693b8dc3a14febed5e46cfb0fe66b8f711f17b334de08d86d7681477392ade30a4ebae8b0dbc713e38db4b0e87bb351a151d8fece86115f8752a375102cc7d978339ce85fb874716e5abad16bb2268ec03e2ee9fec1abb70ff7037c331fd8e471378fb1a5cb7511698fb1ecf026fcf026f6f00ec42ff611ddd738f625de8bd5100cc7d8fd7c2dd75b15100bc7d01f0f6af0a5c39bb6d5747fff68fb3d1bf5d927d2cb28fdf8b8fabdb4f8f6f6e24d1735744dafe0505f8dc7220c0672f418ccfae23f46c46533c55f3dc7c6e29e4c642109fdb0b359f9b09ee6f249d83a76a97ea73fb20f5b98700c4e73e028cef21cf866b273f7c6e277a053e7cee18d07cee279ecd16de8bcf300c02f80ccf30e3e233748229ea335422f3194a01379ce265a804dc0fa578aa98cf90d5a2610e78e8872e78fe6c56cf46dbe133dcb99fa113f6f3ab437e70c0fd2078aa97cf4f6845bf2dc07c7e5550c5d68e1acf267b977f2f13003710b8674cadf299845bc3fd2d9e2ac63c9b57e3d30137cf065c06d4e4b819066b2d1c37cf05dc5c157087b819066b426edc3c137073b5a1a309c1fe356e86f1f9a271f39c7173c561bdb03f026e86c1d3e700374f216eae1802f9607f1937c3f81c62809b67016eae04c89943b07f0c1e5765d3e6e61a048f13ec5f93b95437cfd4cd150817f68771338c7f3b7155c6f3c3cd730037571fda090ff6a7692759ce8b9ba7006eae3343b21cecefe266188c0139c67219ff00dc3c7bb8b9cadc7c02c2fe289fc9c3cdb302e0e6da8285fd636e86714cee7033cce9de7caaf6e68ae960ff1732616e9e2b62cbff25b6b07f34225d6e8639b5dc7caaa738f3ac2e5759ae60300a0f7faaf189f8c49b812d3000b97c9c6014db98564d8811583cda10254ade0c7c692dd074b41c272cd69b69dcf9982108c8e53bbef366e01cb204232c1e21a137031b77b631dd9ccc19cc552369249c8b0d4241403da487bc99c654c44345cb08ebc9933703b39c0c0799906c95e90001d9c613280e2fa1a02245348c855101f3c15a9811b87a338d2986e96044b0d5d08e2ca80a272fa11a46b4e0f269c5bc19a809bd197fb972957606918e104425e09103f66f03f6cf5208f6d7d0203bc7984894d46c31341d8b54f8f17238e2853c6e7fa1f6432b5483dd25caf17182fd85fd070c3f6b4da099403efd694d50cd4d137a8911adb0df682df8c23f0381dfc3783650f550f0a3bd792803682d4fc14e0586516b614fc00f2cef192afcac09617f2a731358c40068040fe88b69c19147cbb73d8a088944229148f79f19ea7bdbe3b1d9bbddbb6d53864b6cbb3cb46f284dcd35e009d135e00961faee69f74c9bcdb53e09e551707260d704d833f14308ec69c6cdd89ec67b33a3e7def4a5e79e964c5be9fe7679f46712e639b08bbd133f84c0ae13f351eee5d1bf7dd4bee28c2e0f58456e819dbbff66a8c84a8108f6d9d5611102bb29c0de09225cc6b19bc3659c5586fa4e84aba611efdd659ed684ff88928b027ec65e460ec3b297580c9ef6bdb4da63385a6859ee87d8673443c75e3ec4de7bccfacb178371dc7f64d083405f4c8e2b9c3dadf154a7acbe3fa208182eb04f4c7ec14a5403a46cb62855342e93fda3047837fdef09ce7c440ceb2278fbd1b63d759f4feb365ff3975b8cb11dfb3682fbb5feb9bd2644a7b5277d1d80f00e2dbad5addcad9720ef893ad979785cc845cc8b29c851f566d47337ff89de7caa75bb58b73ab571370600a8d1e7cf27ae2e095279078a387bff4de5dedc431995725ba666dc15ddd732dad53e4f3a7a1e235ac3053d504da368b66ddb28f73b703836ba6d1bd7d1df3e53ee9fb3d16d7f391cdb8fb2e716624a2de461fdb40c19aa7ffc1e315acf222cd2a86e050949f9990bbd676dce39e7e43e7bcad97661da83ccc65987424708b45d07ebd17a4e3f79334e1ae563abc0d94f9321252dc7593f1bc7ee3cd365b29f1fe1bb719e7f4a444c7a1e235cd3a91878b67c5e0e02534abfd2f95ccf67febcc1f38378f3e79c3de7e8e7cf492d8763d23967ed16ca67b53612949bbbef96f3c0ea8db5afdddddddddddddd8dd324fbde4c9220b807fc924c2184690f9bdbc6d33e1aa0dfb6ede386fb391cbd6963a8fd190ec9dd9ad962a7b6198be39be6f3d486f76c3ede4e604223e95437ea20772a802d76aadb36924665dfad2ec0d71ef4a436c1990fe1ecdd0bdc9267337a1564719f1d0c386b20253883ae9f13927aa408e631a7f6337b169c0dedead0be7ed36caf6a0f0af588386b9d0682b3771b48a3b2f72e0ca2a1f6611aa799d21d73dfdcdddd5d4a29dddddde9bb3bf6eedbbbcbe770b874f71890b56d740567636301d11f36b78e67ad27d4c3c0b08c64b088b3e070c46f5611232bb81b313a0f0c8241eeea146475cb799e8dffb80fbc07b280d84c2f30f06b9ae9736e73ced9dbfc6d4eaa3dbd4ac019f3de6dd693e6c3f6b2f781b3d102c3228dca3426d5878d0a812b9bc49bc93eda4c046f267b1eef45363ab98a896e752bbfd7eb5ee16cb4d3eaddea56fb744b52afdedd41dde2b2972a770a1f0c63a3be59c7aea944c4daf31861ed3d8818b863cf39278ae651ced335cf66fbfe209ecdc34518d129ec6b370b87a3670c0eb33b78b0f9fd797e769ee7ae0a6763de4cfaf9fd270e47bf7695807048a3b2e7ec0edbad6e6963a8f5f30baa3f6fdf6dcbfe71eff06a9af654dbb66d43d1046dff3a689bd96fdbb6699fc2e1d8b46ddb62d8981a3b564580e09321485a6887a5c49d447f941a5b18b3a6fa237fed7b444c0262a37195f3a0fe4fa75a79c4d02d1f55b314f264dd67e8038cc2e1d0be87340f89bba1e5fafeddf2396b3d9d1e8562e118de4cf6240bc3f05e642fb2ed3c3ccec3c3437aed33e9bb8eb341ba4a403c7aed29b55a186a12add329eeb6b69b850132a1d816a32792f7be460be2e2b6c5eb3d6f267bb7ce73a4c584a7824f66fbecbbf56ce867cfc242226d9f359cbb35a36d2e7d2522de9ec7086f77e2e0ee7695a85f1b95d5aa63f43e20d6bede233aa57df64674aafbec91e8d4a86daee9b4add36a5aa6bfe5e3020a82d1a8de924081391bf3fb2a016768ed03e239a9769318591836031183bed7f6e480331f8dca9258d18ce3c199f7742a7ef6187783a3a1a3362abb3ae8fb801008154201b3873c9da217b21a95651876cbf00838db2e2c92443691d49f931256ff36ebcb29e67fd862f69b8d4f814411ff042f040c6a2020bef14a4c1e10379296c93e1b026282339a253e4a7096fd606d49d5d12d9cbd88b3d15709987de662c362999dc76316571e433087eeeef706d2de43dd4dfa493710264d9230e9d4ce853a1a186aa679245cc89fc7f8da933b9288dddd5fa82fa600eac09e0869007380e3ff68ce2f1292f4d228f9fdd8c72128249d1a0544f64a23c263ad093d22f6f7d049409f0f75eb1171840d4740a514eafb97d1f71ee603aaa5a052e804bf7fcff5d3c3137522102641ad23fe840b71d244898bd5d33bad23c404490b0e79e20990120c83a67df07be87edfc3f771487ce2891320254558bef29d21211f2450f490ce79b204c848111804ae5e3bde4f0d2cbc9837f3342c5418346f8606067e34327af40ebec38b3def4cbe1fbd817be16e87a8e982d3e5d3e512c26f7e978f3c7b32fefea0ff7b09216cd22a37e2322d9fc06ec4551c923c5d407c76709e2e776119c481700fe11e114fec976b453b5d57a82d50c90f3cc899b40a06b9076dd984f374e1ec413d952cc1ed77ba1a55840a6f74e18671832f29d63146ee9503fa62b2880686e33aa594527a1298689b8d1638fa346a8b3e748b2de962e2b304bbd6528291f85cac1971d59c270d7a75ef6426a13b843eabc79714359e82d49d2c81e0f7f149ab34219769125b38cf396b3d9dde47139ab3d6e8138322109dd1c79fc4e140cec57f3482504acd48f632669a914e1dd1986459b7514d24392ecf6ea3a2efd86d541463bcd127fe60b3dba828ebe122870f21476010109e9f7e0531f26c96e43c9bfe99d138c660f9221d97f11b1114f0457f7eb57b0d0bb5ebbebbf273f4d184a08037221ef8a2ab0e8602f753cefa4b4dc8559a1117f1c01b510f7cd19f4ffdb2ee72139887e3cced66443b893423b8453db85f53f234e81387564524907c3204438209edb032259993279e4d4f26cfa6699e8dff7b18113f385d3d7bfe80dfd7f8f09ea6a48a460fe52f26ec1be6687c104d0877dd48288d82d2b17e8dc3113fbb4a407cb119ee03be9f67d3a4530fc757a71abf17b13a688d54f98240e8ef3f934c7c62c1d0b17f9956859abfff711d032b9f63706ea006a252454a955b391c2aef52e8d9bc1b2a37364a45e5ce2edcf8cc44dda487b07cd2bfd887575888575656a8639af5ec2e3781572e64f266e4470b839250e1c7ef2d3cd512240d033d9b95972c180ec9f757bcfdd7a97b63ee12282f51fe511e46a23c8b9b4fd874339cc10acaafd895f71707cbcacd2b3ee59db381f22b9e363763c55dd141379e8d1236de8dab5eef48a2c6b3a12f7f881c2a52453e34821429dff22ff6e1182bfa1dacf6264b1fc542162c028dc0231008c350d8a97173334c1702a1caefa05ed2a99593ed2161ab51121e61e5c222b00581e01268041e812c680428052c025d2804acbc54c9b381566e0f8973cba728b68130db4bde4c1013cf7120dc8c958740a82b5747cab7bc0e94f701f14afdb7a387b1ddb3b0dce3213ab5f2f26b74ca6447bf625ba851127b93cd1d062c7b49a3a4907ccfe954f7f21d48a7b897df419daa2fbf99746af4f21ba8c1e085d3cbef25cf86f472457e9bdae133c9aef42b6ce397875bac0f8859ae636ffa93cd9aca0de2bdf02f91ec7c33fed58e6c754103a3e6cdf88b6c8c46f96b4564d6881becdfc26f871f171e80054dd889f998170178ca057cf1d0e3bfbfeca1a80bf8fd5d72d1edfe346eee31c2e8405861c2135c9f8dbf9f6f66e8b9685ce53746b8dfdb67d6d70346c117d11f2a7b32d8470cc3d863a8d9290ae19d5bdb875de0f8b8dde17517fef0055ff1854fa8fae6ecee96523e859818688ceef1c21a6313991e5f43f4f950bbc6054dcc0b85305788651fedc9be34aae7431b83e5ad6f6696086f01b93689d4fc5a38fce1cb8ff60577c48de3fea667f3b4255346bf3c2076d1289841e90588c99a49dc423ef619063f6b2163625ac4609e68a2a49a240b4d70ff8bd5c4bdc9f491aa7cdef15c5cca0fd60f1697c28dde89e9323dbacfb532d4fe957fae2a3dca93beffe4aafacda9d8bce3b9b8949bb937ebe9c559e326b71c4a9faba480dfc71cfd7d87783ebc7f4f262f8173f6fdef872c67ff800022338173f61876a3620ccbda09fff84e903066e77dcf87ec1b7237e08d89b16762febc5160b905765ffa3b515be67d6c27fc078c71de4013d284683f0881d00ec4cf8470f6d8eb40a4a20e4ef07c2c6eeeee2ee5ed11e1854179507940dc4f037f32e10916bbbb3f8dbebd9782ef987c190e3a372aa06c8bc5699e8cb7f0b83fbc54bfbfeab5cde0d581fd7cdc8df8f3256703e37173bf94f0090d9f44e50963b631ddddf1b3e6851a3fc7fb39d56864a8b151fe5ade29d07e3a82188716e1c5c4a0aa18e1d022d47e0efbfd6808ad405fa778c4efcf31def9c3610dfa62f208b64789655313d18deb4695845232a5a8ac9c585a5c5e5a5b10c2d93fa62cb823365a60ae48a324cc6f1df72f35fa13904f3d3d2ad3a87cc87c2f9f4641aaa47dfe09969f5da80996ad25586a6ca899b2589d2ad22a0ebcfc1e31ba8800883cc4998fb1270620f6f0317e2022113d10653efec40e44fb311e1137103510df81866206e20e1fa3111103f102f1bd88dc8916882b3ec62262052205e2cbc79e388108f331121125102310597cfc8910882c1fe303a2036203e2b7cf1003a2cbc71c9f9bd54616d050603b510131e5631c22de880988a68f3dd1465cf9186b441a714654f9f81371e2f63122201e200a111f1a198a38963e4619d100b10011e563b6130910e1c71823de449b48fad8138388bf23d644554c4520e24f8c30e20f7100f187e854fdf835503ec4a12880f822d2c408dfcd8c1ff36cba8f1fb98ff23f80840758feeac011ae0db85c19300203f1457b2c50440556ab09102101166b08020f7080cbf5c3801c38e44bd4a380216eac56a21d1b3568b0584338083880cbf5836518a0005a0f0162dcac56da4e1035aad410103f307e18c08f0f43342f0430337b620fea3e0f007817370680d4c34be685baf95bdc7ce2e1e613006eaeb7dab7f429a5a31db84ba9fdd8ad78bd885e4422cac1501622d10ad18bc8b5b1884eac9f53a42e5acb8ae51445292f53cacbf48a2f6d2553710da598a26b6e58b37e6267a5178ab6c5c65e35be5eaf1789ee10b34199392558b66b28ba862ac4ee0f8bc5ea9b615df79146c99ead56c97545b82318678403d685b88c6443a52e577984a25571157b629198eee3904e05e0bb8f367837fe04f539e200773c7cf731a755911575e2ea88cf51c8934e01400eef26f66ce0b3d3017730df4597063e3b930c7cf621233e7b13a04eb1c0c2bb893f18f8ec5ac09d35d2aaf8bac0676f59e0b3fb14f1d95db8fb21bc9b385481cf5e04dcb97cf71ea455724581cffec4043e3b144474efab4eb57cf7be8277237724f0d95b80bb15af564956043eb713087cf69c077c769da14ebd9ce1ddc81e077cee34e06ee5a755d2d54a7a498e4e658a77237f707c6e2a903c1b169e56c957b3dac810dde9bbef1cbc1b3974e373ef0077405a85ad7aa783d4e850eaf06eb01d1a9f6115b84b096a15c68242f08580cfd0c9924e99b6f06eb09e037c865dc01de948ab301744027f64742229de0df66380cfd008b8abdf3d14d22aec0587409e189d7ff7d005ef061bbaf90c6180bbecbbf7d1aa6cf59e40203549740afbee41f06eb21df842beeaf36303ee7ec7b381df7d8e5665ac07f48260fcf0f94501776fe3dd643d2e5a95b95c06460c4cd3755fe3d9c4ef1ed5a9d18bcf3ce0ee5bbc9bec07be90efe2f39f66abb2ae87cf8ebb21f8427ef75df7efd96cdf5d6d0d35eed082d5e28f60f5c01bfab3811e97ab284b03197019e1fa8137b407033f587e7cb98aae2e105f1688af226e3ec99d0ac4212c452f0aac26b02262b5036f444312b82257045810603d80d5036f443f0ee871b94ac46a808b01ae1cae1f7823eac1f183e5cb97ab44ab05c89702e46b889b4ff2e510bc11eddc90432b5769af04ac6cac6aac76e08d36446387e52acd358385c34200ab07de683f07e871b94a6309e1c22e19ae1f78a3f518e007cbc75eaed25605c05e04c05e31b02178a3eddc604358ce97cd2a8855cd6a07decc21d50ecb55d3956201c182c1ea8137f3e7871e97ab266b002e1f5c343ff066f6c0173f587ef672f902c85e33d9cb45f6c2f20360a99221783377e08b953fe96108cb98fb37ae5ee6a26e6eccc30800d087b6b877877b7da885e95850ca62d11e2cff2df7744577e80a86ae58d01d2c1fc6656b790dbd5c5e2daf212c9fc50afae2fa71b9b85a5c3f58fe8a15918a8825ea11b156442c15114bfe0b8b7612ad443ba2d58a68a5225a8976b07c97d244790dbd4a2f94d71096df9292995c3f9daba4b9aeeb07cb67216122560f7d61c962b17ab0fc5395aeadb41d6da5adb41d2c7f258bd87ccda1f99aafd71cc2f255d4501de798335d3f2e97935389929bac9ecfa7cbc2b227a5b923abb9036f44afd32aded50acb1dcc1da14a80442f7843abf05ed0d7891ac1f20a6f46fe0bcb3771331a6fd7551c2b73ac15ee9c4e658e15753a25231078040996ef3c986371455a355f3e77846b750a49a7da5919355991521755428158aea24b5a46fe1096cfa24cb0a42cd79b918db5a15ae92ad355a78274aa5f3e15d2a94cfa889e6375aabbf2bd455d2e23ff445db39e5e7e375ff650ed63e21e3e2a7ed14f5daea24f867aa184338ec6e36c6b944c83b6a41299af3dbc3d628b4dc6768ee5325276f4ba444c8b60918fcfb4f0a765e4639d712d8ee52ae8e3f3f419e5d783fc80ba94b46be358d485e57bcbc783742ac3922bd232f22577c48565bc5c1132c7c271b4c26f87229a803f5c362107fa1e7d3ed4f850e4c2de0426f82569c2124c7b3b2d692969b55c06498cd19a6eb8d184e62b08fc1e46cdb3895a6bbe604b6b0999af2924a5d6603679c51f6c32dd1c79700482513c08fb982108c87504d77ab30bc14d38171b848280baeee676611e2a5a46583d786b1d0c1487975010132ccab085e113380baac2c94b684e235a70f9b4b0a704d3601a173135c0fe999a7215a2e1f76fba4a13d284c0d3a9d6185f521c5f13f2185fe010311c23663db6a20d9eaac6019f230f1af03946c180cf518a1c9fe311dc28dfef72782a23707c8e2558c0e79802057c8e2e18e27314e2e4d994b0f05450e7c667f742023e3b196c7c7635d4f8ec4d9e4dfd7e1fc25341168dcf7e84199f9d09389ffd0908f8eccef2153c15043ac0678f81109fdd06f8b3f340c667efc1fdbef36cba333c55e718e073b721aad4a8d4cc56754d0f999a810000405000d314000030100c878422e1682c8eb55d7a0314800c8fa24e6e5a19e84110e338838c310621430000000000001840020000ad90778a2a7447bc9ac724c15a0c08ea733fadd63ad82458c40299a066fc0f2c0e80a37960c8e39e4173df1e53d11b18f9c18d74672d32b0f85a925933b577834967143295ac2502e0a945ff249535c714f890fed3fbe5419aec8f5ac22b058bea541d5bf4fb3b3ce8c4380f57637266da31dea865930108f0917e5907ff5faf9ac910b88a1ee5ed207e0b197e10d40807182815471586dcb5e19399c44c4304626b06f1fb9c915f2bab37ffb27c917f0086fb7fe75341b682c6f7685365ba4f7de69b30087071eb37e9e31cbd09adf7db5c0998c5c94260dff03d199069e4224488d72751e464e47e47969a699e9e92768616a0422a2e411cea2813e224a63a6a6267cc476a9332e041d555f4b5dd1e6753128c9a67bbc10c3dfddc92d44c8739970cf37cb0d1a8a286c719ac0dc712021ce3a0ad78dd393b2e9935f44c1934444e2e933e06da0bb86e192885d22527ccfe79bed715a8cad9296eb4b4a54862f44cd3879e27d08761addf1a15490560d7bb1a026a95ab3d2c59290542b1ea15b031f579e1b27541304b1cfc4993e6321daf9acd7ab93efdeffaca040e6d19406e9ce140f252a5ecd5cd65aa1e7663715c2496fe97515749f4b69f472f38bd498dd5bd51e5a48bf2235a20a9a3619c2622fbce37fe4da8b44b4b8b557ce207f94982e5fe1ef618eaf120ff6eea3e32bbee3a81ce173aaa6df1e501ae01c0445bc07e3ab5fb9de297ffea688434c9b1a03e0a86202a80d3c8b85ca4c4833ea05a45ed1df01fe2878fc403d16ff1fb70d9167d820db1098324f671a5c493be352912a78e833b4ba4bb8b86b3232c3fb4fc999d88541d986ee6d0480504090dafe10389a4a42e9d7362cd3cbbb6932c4aa1d5c32b70442ac6b97abdb13072d8474611a53b360ebdc662511547185d37108ba60628836bbb64a3683c0ccce06f3d14849e38a9fc7d3493ac1c5bb2aa149fa5311eb6c2463da9136440b3f1696cf38803c8da2b7cf5ac9135e66b58810bfde0ebb3c0c5976eaf0217dceba3011afc0bc3ddbd235dded5dd7761519f7ceceba5436845e3f6e82f24ca00ce32c1862b7842a7ab64672b7551a4e2849fc54224846deaddfdf86f0fdb3a667f3ba8af14fc1dd29d36e052734161826c498b0c1a61836a55ccdc39b6a39ff9a46075ed5d1342c8f4068611af172331d14c6d8ec0e3db5c80daca6785b393b045ca6a778ee3cc273847df2bd1fffabe0d4f16fc2b15749d0d3db0bf92db88a7196a8365e0c7318b940713feca875c243843d3644395f0fbdb2c2604b1abd137e3fa82e19d9bf929b55a132d61883c60b9e3207488e0699c476b5d07410556fd9ed2348b2e987c779669d1c7a067c4242ba21d3726979c3a0362ab47dc19a00be9d2376c6aa093aebaf35769c6b5aa5415a806fbd0bf2e444af842724925424148fe68cf7a53a378431b0e67328aa4532676a95813ee12d815be34618b28f40b68536e03aaa13bf266d0d445d4eb4d3407ca801c96844a3ca23a13e70cdc033ec1d5b9858fb9cb3653640ba85ae78010256c3162274f04bf24d5b911bb64a6005761ae0d4d617c2efda4a64004e5fa90885ab9e3abca615d3ca6045eb3b6fb0bfd9e5e0c595ce30c1b6cd025d318d1b82a031a527c6c0cf185054a4569fc466e9ddee3e350efc403b7c85b7fb28e33035cc8eeab9ac248bb0d1fb799a72870b003c19f45f807be1e6683a32d649129554b4ebcce59981e007ccd32b4ab6dd7cebbc5954cef088dd6175724f046806bd06aded402a2b1b8141fb2e16e4df1ba3997aae388dea58cc7e38fa33665298046e9b5debcaffc81fe4f0bcccdbe9fd17fd4040e6d239a3cef855bbf5329b3fd35a7f9fa3acab4ee945bfb5da1e6c948e47afc47c01a514b71d32565d2043951348d2f5e155764b6defeb75fe70bb4af7bf8b7135e3361fa25c97451556a09f6036a8f1703f6b696e56d00486cbed0ca8a134b89006f1cba6105d95e52479b3bcd4d0f44414f7429316d16c6ac0702ed38f7c7af64873b222e0e40a35ae4e608f38b6a74b099156e9841d7aefdeeb0ae0601a497f59635705f4d81b38e4510f633e807faba08b1c475ede35609511d4a03cccafea80e86be56f62a9b0e520254a57c897224ee5351703b3037e0801ff682e309034cc6af02a8e93d108cf700a45e7144b749c1ec1e083c03d943ce2ea6e5a4da0813bcd13e9e88befa95fb4a6154705f33de951642ef9287cf81e13c330e41b70d30b8ce2164beeb2a37b21ebee9f3591dc2a1c2ca8374280320ace813232751fa16f7c4e5a864450ffac347a357ce16f4017e83c4e2d1bff459c01448ebdc4ee5d4d2898917f8b491650536dcd6ca5636e1e4579da6b0bc3a5b61479989908dfdc5f6ea27514fb3e89b510475ec5d3df1dd42767b35589e0630050457b2facdb96f7d0886d6410de3182d9a4d2f6cd8ce753c57f325461b902a356f80b68031f59b1e1fa41edd388856829dfc3e1d1dc4c16f9dfa5b7506a383a890282e93bb268805c0ec93121782aa1758f87da1bf7ad04d9f7bb5361ccdaa0ec5fbe2bdf911241842ef0a2adc88a05cf0841f8adf2b163f45ca8e354738accbb62608ec07de9abc66b3264bc064391dac3ad449318e8b405652055297064ac7d1cda2c83b1531ba45e0c606fa67c4a5eef2339acf0e6a2d7a6492fd68aebabb3b18e1b4d0a46b3f48c8571e383357cb46e15d99826052e3e2fc0b2e63f343557b8bd58b5840a045f6443541a33768de8830ebe4ff551b04d2eec5a141d0547692e264a7a23dd8960897685ef4373949f4c121e895081bb0b37ee702a50145b54ce158a9a3d185603ff66ce541e8608143448a25fd1f6d8cbd9f3147b71d69bc755a8ef9886b3c8f5f7ce7b0abb795e1f9d85fa84457e245fc8c09ceb6b6b2cb1e1884910b2c0de4c0f7974a5df11b4acc743e0d7efc115813fb8ad2e074c03c12de1e66c3bb15c5798891cf80d91bd9b035bca0c9c1bec73707ae22b3bd0836226392b47cc26fa9a257f733d0052edf11d19ce757d6cc92c970319e9361d8e73d59134c5e674c38ded63fe5f656b735c1304cab585a033e4d1673923ad370632b30961f97e12ae3275693fb939e203080a1ab93b0eb691c79fc426e0028f3cf55ea157b11eef541294d28b18c99028561511f5a216f840931867a23a084b10dd7a3fc69bb66fa1754c97e1ea251cdd66055835545131f051a8e31efc4806388fd0aa325dc41c084dd908fcb4c2f6dc40ea359f70858900a14c6126f581d7c99da5a6d8947226f48bb7173c2eb25cd8d4a09df3e6e6fd1c278779be67c545fcd21bcc4d0d87ae67cd2a13282f40d00ddce2f4dd78976a81c49530bd187a9f3bdec4c73e3a7d6733db30f739d990fb99289cfb8cfac0fb9cbfc87b964e6275cc8e4d35c65ea07e0ce6a66f57f8858f56fe15945860ad84b5bdd3d42ac603240fc1b9d0c049ad6fabeb57b7851ae66cb061bfaa0004cc7a56598164a1fbd4ad7152aec25cbd30bcd711ef7e2e13ca56ff2e9defdda93bae6b097cf2c55b67f322d5be075b3be017d6e9afb783d753f189dfedd9c4fd3e465b2cf4e7397d7fb2c5e07e1c052ebd4c02b9ac33eb9314118aaf7e3b7e27e6e14bb1a5583d4f6af48aa97bbaee17279ecf81519fe8ebd6e8deada5046a4f1b1482671fca969d46706543011403b6d2147e65722ccbf75f971b444fc3be9b893e657725edfdb6a2368e9a0bfc9996b1a55a1b2dee3b1abedab126693503f90a5fdb6d89d89fcda8d48dff0eb8f6dca43f895ac75940ca39a7a02122af19bb4368d45b5f523db74612a0460fedc1d3465a159791e91a9b5f1f5043ac8d036b4c2e15bdb6a11bfeeef543cfe0ff6bac6b818dc9e8d8ec4d9f0d1f372c05559abfe5268e7fcbaff230962bb0c693e3a32b375be13eef2cac3c0afa7231c243a60e3697b7151f8932a1730f95547b1bce3326b597ecf33a53c736cf36b7011bbb6015b8b334f144c70608fd853d67dc0eb491c585d13e1771ac0c7b32ee1801fd465dadadf96819d27f3acf2b94d857b402119df7f602fe8439ff5e6ce73502bf138fa0faca5fef859ad8a16cb1652620cfb0f2c55bde959cbd4c6112fd4c3c8fea40eec7cec6795c8c764240f56c9a0fe0756ab8dfcac5bad90387ce827c1eb3fb0961ae567bd689a20975009a3ee37b095f4e0cf6aebb7a29a4007a3fb556af1811d4641492d669eb1fe035b417b7ed60bad21f0b6f04302fd531a5b3cb8e785cb471228fa532ab665717708f1cb0a54faa124ca3291b07019d8bd03f24b09c698628aaf8de78029c92d63708595c3201f0d7bdcbbe5e482aee0aab081f0d2f6df7198e360fff95aaa2c04953107b36299f15ff578b2c8b403008a4c18dc7aa45324449458d827da97fc43a8e5a22f4f926c92ff2cfad73dabe9f1f06e41865a3a52e19235f11dd6844ed4f28f8cbced8a2478bcf2b19f1cc3acd18e152c409528e24fb5b665495cf914e3824284b434faec6d9046c99fa0fffa0e3515f7760b7598285b41dec29f857c20361332c797fed551eed0cc3c3ddf6368889a51b18e193459e63a73f6d815ed915fb09b99b71158e4390cb17fd5f9111decb55e2c972e25a77ee9d1a448da15b7bd95cfba3a919f325a00b673a18e3da468997ab0ba0724aaeea4e57bafb6f35ca3e2d212811c0131d33d8cf3918a08bf72337cf6f58cbc78fa0fde29f094182cc025b4c6d750f7985ed50603ef145e7ec226aadcfdb5fd89b33aa747c302cf69284ff72eae08b9a0347a5e6e99d57d1515efbe719931bc51b2da02134e53a87e87b7cc4e39bc1d36815699b4df14de751e15006b461ea1bddfcf93b9536e6824bc209924cdf9c11690f0fc89dbf0d022a00b62814af98e6d8b97afcbbbcdb6286d7f9d18209389e68b2e7d7975e2e5e610b508b04b36025a59bc5fb11f0bdc69b70a87b24a8a0993d60758df8dc37ae467aa5b6a75c52145acbb0cd08c69a066e403ba0359aece27a847a47e4ffba8c6fb11ff603961d76a450fdd08e85cc7f723178c1b8aa4e7ac6b03fcb972dc300ac1d594300a966a2eaea5ead0c841e236cf8763e1e1c49effc0e4369567d1a6167814f7b7fb7be0183bfdc8c16d8bc45305685622757d8c48fde4d05ddd1a6cb4f6f801ea110fd9c6e8b625879ad7ae43457449c39246368ad0da099ddfad4fa522e9537b8de58cb6488011924cc97e2c7c90dbac6ccca9d48839b5a15802674b4777529137581263b42df54f53b108d3d45e5f6d1f878e28f66b7829426f9866033d7a9822eb2963b2453f49e1fe9686309822c68ab5302dd3cfacd4fa0ae9c375ff1a341b4e6c34e0582e4deb61f8f4a49a31cc29471fa3928b98c28e8f1030cdefdf034f8d86dfed2841a16ca124332bdf5f830ad106e8f6f84ec1f5614566992b2d3e4de4ba542884047522f8f2809843fa36c1f7dde05e3290b89648397d9ee8dd9803230d8c606fa02d5b113f10e50b04fb81066fed98f0804842a0f52811c93e4139a3fd09898f740d4d62e4060204ef437005a1afc040d27b5ab00f326fb414ba515c0b02069a60fbdc8b61b1c944e88b1a90942ad045c8c00a0aea202a8e3f88314cb1c69ba83fdde1e01d484b921fea758c88dc064aff788a9d6fdc1c7c42f041988450ef613bc881f5a673a123863a2254f0bec49c8013fab7f978368d2d863f423412ab0614e86fc4742416233e5816b691579121522c0fbc91e742b00243ca6476c8e81d8fc579468a15a23b60b9505ee8488004071a5eb3b66c8a90b61aec8e8c372a9b6483e8c2ffcb34d119658cd67ce7e3ec7d3c32adf45671391caf4493f81d7a15313962313750a9a0dd70c03d6012f3c1a24fbaea7cdc86cea0b2f0957bc88e577872a1b9946f67c6762e6cf165948aadd422ef0f8e18c3ba6d80a92cac112385cc7ef00a3db857385ffd482d843d986335ecb03c48a300db08794fe53a84204f7bb5ba1576615496287b54970a47c5f1634c8b498f3e057e2100c77d6e9282c8bcde49e73184249f3db728c098f5676c40fa88269a15789feb324afa6880528e8236c7df87580b2201751af491c89c7f0b19c321fd1400179ddecf26e422d6dd615cc00e4df0091b74183d30225432d259147967c1fc9432e484a6705758ae25028b9bf09b578166efaa1a96921be48182537f777801a009114da00aac0c8c2de36d2b833927983688806c91a0cf8a06328827c1848de4d616b8b9da14ec06883fcb313d293a0c0ee31cf9cb9fdfa631be1bf35c192f4aa1c227d14509b0e4d93d9538bed5ca565381273309bc067829d8a6899fe60be389e1469ec26474cc7d33253517fe9dfc2e5fec0ebecf685acf1b18fef014255cdcd4a3fdbe8fa079777338490c3946041521707dc9cf99d0781dbc1b22e6393ba05f4ecbaee5da5211312f827e9ceccfd959f0249f191776115f47c3e285f827c35565f650c5f7626a03cb4944a7a7c7929cda2e16c7b4d9fdbf28c32c6bf464405d4b67fee77597e179f00b65ffad3db56eefa68b0f168d547bf26f409e4bae89ffa25acd2b4c1c0f194eeee2c1420799321581c32a3656fc7430ca8de7200ffff090d80eef48582cc00492ce4590addd698641edcc160fe1da82ca4754f5bfd670c9a827a669f7b2445dddc4a98534cc35bf2a0dcc246f14600b2b100cefd4967d79b205a9784460616b1e8063f344964cebe39085a584fef1b6de26e8fd69f5ad87899950cf2dd087c80eb9c166374cdd8c46d9aa482f78e772177416246ce07e90b6ad9276624b001d3b85660214cac9119c4f62eddb78404b676a2c9f75d389a30ed26dec54627bf4f81af4704bd4fba23e73d73f2ffacf6a2d6ef64c44eaeb57832591cd6743496190f4101b66d0410ee443039105fd104c9f42693c49b71f089aebceb274303156d1b656ca7510d739f6642783b396147edce4e1c0996e9a15b3fe42ea76479bfc5f0a0068ac05f95b4608bd13519abaa528ea0c7067da9c8478405f7c444047a33d4e4298c8773ac880aac49ef1e1f3cca26e59a34c42a0049b58f846b68aff6b6b68d10521291e1019b4fbe0770a9fa4ff4b630e04cc48d0ba8bbfe53047f7c63b659375eaf2394dc769b9e0d765658178435052450a3729d2e574929e8d8a7014b37e2da5b5fde2fa0a0ef544ee92bd7ac2daa5a76c1fcd70d7162dc31dd67fb6ca6c8c5a97ce5b5556abffa4226bd1516b81300521dfae75ad8ae3352dc74ab50ff968bdedf9ffff56b4d2ea230d00e223b4b05eedffd816b452eb3b505d3740a5e59f55e1f04c1d8e19d0f1ffffeb59e9f5b10600f1d15958affeb72314df58a7c924c11980a2cd6216c977d6d2a489f9c57fab596bf21c229baa654b338bdaa1ccbb1b4bd0fc8bff16b356c47b189cf8de64d5b8acd6abff1c4e2912ed6f2cd3e388c04173f6619b933585e94c3a8f7fe047e7d4daac42fa0458c85a255107fcb0c60273a8b914ca1eb140ffa83e3fac75d8ab47419dddcf8b8332a59511c37dd832ec1bb9f4a8b31f10652a93d1b4670d3ad75daec47ab9a49ca141c43f36a8862554461bb1bed90645ab76a1c9191896a928a0f17b26243d5aa655196251c702013e2314fccf5035e5cc0f33ea885e3af0e65133ff8a17328b0d1bd667a9f165a3789964305bf5434a5ab3b6ba69167a24f1ea1ed6bb9d541c5662f03edf472052b93f1d4086ecfc7f76f675e6a8f31a1fd721fdc57b150c28f9f786c1d7016a11da5057feae8779131af916ee9340fdc3814f67402f704080187432137b6324c7e57aa8bf81666fa9b2ccf5b00bf98ac6d4ecd1e0823a4faf8d4fcb3dd065a11a8e960db33a17cd03a37b0a29e83c2e5486e2d272b6dec6094a7e5cc2ea622b5fc9a180d1ce33e46fb086be06bc7bb1f2c7c722e94a41e74721f20a23825f4cb52a75b770de275729a770c3660f832e8cf31617f917c3ecd642e1445921dc67bf64c93d3c18b880389d70225207035ff5e53d8e93f32e43b4212a0d2663235084e38984eeed1f8087154e502b9b0a53bc3b7f96e653cf8d931fc2a0356a16fe834c3873f3177d7d786ef2fd9b701d875c6dbb04cf9232c58c5dd9a19afad9b3c0fbe344aa7adca985eac844f8714a955d83e3bd7cff3cbfd2f73ef62a810bcf885098e6b61eb86b6f6c99e529f09cdf50abf01f242203ae5691cdbe6e86abbb715a5d81a696d1320e35ecc16fc7a974614d2e63e0ddbce4030306f0fd7de88d766b49d632d2df5a59ed69591a5c0109f83cc3f5eef306a9ef8d27c063a9569947e2dbaccaf41de2fb6940c5ffdaf13a50575716c754ee572908310fe8c55e4f0bf60a0279aa873e7891f2575f75c721f466f5b748ecde30449e1b918f53168daae08ecf2d82b92d2f52cc8594f50916fcfc1958fac1dcdccfbb3a4b77a140af8d8d7f6fc7b6745f3bf6dc0f8fd736dbb65038e4d4a178fc8e9337808f1766eaa18c149da86dc829d460ede59a240c7d11ea85996327a96f843a0ab5ce4fda9183e7977b27eeb70076eb4e1705fac23a4d8341182e24e4ead3a84023f6af4fd9a4116f52d6e7fcedf7cb9635698e73b69acf10a0fd4c7c9d27ef710ea076324232ca07700ba4b9e41316e9b106690d1425e6602f1bac43eb7cac8084e184768994b4cf9e7ce382f9c17ada1eee650311360eb336967558879fd8486f5848e857506221309eb84e588abbc919e887c11efe7c8275f40d6b7a2d83c45f5b102126c58917d50b608f17647d0299f2c4afe38e489bd364a78312ea1e3213aa389c5e9a57fdf3e967de6164c182630922372ccece134e7fafe9efd9d25af0e5d0402b22c7b3f3578678c5483fedc9dd75e1af95bc795c1af653828d86e93467f28a61de74f1373d891cf8743f5d7d5f75ea1954e6693ee6b7164cc2521aee195ae15085655a370737aa160eb1404495ef7728073f51c34eb1af740147ade29e5a07d1961b728f0b9e8ef100853c00a55a1ec07582ec19d6d4a199b72c2f3cd67fc045c8b3dc65f548b317cbe2c8d259615ca79faf5379afc0fd32a8db188280c664e869013158d7c5fcc4d68c7840b8165a246d7526346d400bef543400dc26a21040f77402dd95afc00981bde333aa66131b00065e94e2d47ce2e8d01521b0c49b67771e7af61b1557882b592b8357dbe4aa873de0199284d706986d62f70b60db21ed5f41be2b14824a41b9c181bd321588a6081727da0cfa19e5a04b1516dc319dee0e2231e93164b0e56872a6a59389e5723a38c4deb806bcc8b325de06832c6e3f5db988b0ffead43cbd75ab77d80d06c72feb9fd50c98509aa775abaf5228fb04a9a7bbaf24c44445424f17ddde8db5fa05104595aa069f58bdad75e23557a11e23eec1130904f69d836fc284d1cb41b7092d55878cfc687ac9ea70d8d22fa27149019a76b7652f43218454242e02cd481e2dcc5b9eca10b963637c3e01208be52534be4ec8ecc765af761d67242c3705ab3192021c26dc9db800f7b3a2077ea72ba9963e61f02152bae5a6c3ff5e84db329303ae86fc6254ac6d64871da41ae1855cc36741e1b9d8df0eca82c10379a3fb83ef151dd659a7475a2906117abb768e19e3bac9f45561eda04bb6ab535d04a72182edb808209728bb0bb3ecf843087f99b8aa8661899759c14914bb02360b8d0b9d5a8e31019883aefa5cec97c436acea6fe543d2953e499adef8d87c34e48bc3d74321904b9421b415bbdc803bfb985bb13b4dab2aba7d91885f3a1a4913c63dad7a91b51da9affc7c3fde509d68101c73c815f05408602728f7a01e4f97cdddf12d8fddf23a427d001299f6f587149faac30a0ec638842ce76f2924282e5cc30e098b21fafeb98c694b9d8b8a821617f34f7c232b8302b82de2fb0752c789565c6efbe0d49eb944d6e78bc10c5a4a7ce1885a0e1d0140b4e52dab77f6e1aff22ed1f1678592c0e646a52d1f3f1ea65d00d2d6c7cc7bde1fa524e33d1066b4525e5d43c8be8f226585fb2172bc0d588cdf73883907ce0f745ce242ceb5b8f852e5e717c3524a35127e0d264f1226357f7282962e451535295a12c95afdecc603edfad7a93845223dfc6bbf3950b6ae90490d6778bc615232f3980aa85d1df2fdf3e63f494ee28c8c2de36751b0307796c5bc16f13acb65821df95f98a1f3ecc6da604aaaacec1ba7dfa284ebd5b222bf644571a5774f6ed5a0ecc8b8c610bcee52623c51b01f1347c0912711836ca46a02347c973b94ae713dd98fe0a24e2b60e43acc930e35861916f57d4e005fc543c1d5c2744417223ede4f5285c451a3e2d884b7bfb00c4f67fb9cc5ae67a04da883b9292676896bf553ec82ccdde7513ad5970245ba32d691da3eee2ad4aba6729761d10f0162227ad1c12146906cacd9d44bf079c2d9b681a3ee984a70d515423f16bfebf04e7b7c449d64a6ce6cb978f1173caddebe110edc17ec36d7e67437b18e164dd849f1d5a91fd75c34c8e499d9576e9a7c216cf039946c38d8a1af5b0f18c1e9f50c2926fa1a2bc5c099f9194bcbc0042a1597bdc6452fb383c4faed4476a4a1d0cb9013f6fd840c0d4a527422b17689d5d354d1cc14bc2bba5a03230254775fe503d0461f0fcd6e48a5cadc3585f0d5080b68cafefa5afdb8285d33f8855b66f129337b03b6e863b41bd8ecbf1fcd1d3d31aa97a8bafd860c117e076030f40a20865ee4728351c09599102335e4493054ec2b1279da3c654bbb2571e5f909938140c6bac3e1127e33cf7f36c365192258f0e4799b056f6f29888a6c347834e017037707b9efd40a7b8c9028aabfec2f928924a662d9bb10d808bda90638c2acec7d0eac7b5162b2e1476c39cedaba2cf50acd607e91a2a5317f717603cf10057ac66a98dad91daeb0b74a50ea277dc3e52b743a9c408d36f423639f0170b6bb7d180b4e3c967af6ee2b2c85161f1ff245b5fb30bb717fa0a8d934759459b1d3baadd5b98eb76a347df2169cf455542a81e6444181cffbc225def2ff5db4aad024a8240aa754821d2583cb506fb137f515621d86d59f85a7098ca5b068316c62e5a4f6bd86094fd885574163f197656c8eaad0a3e81cb26bca20ef0691c20296468444d67404acb6268afd76266b394b626fa5af6b41d24f70995d95bd00a61b22a7503651c4b54a994f255e2560c5bb17b818700d8f647e4eb9d7f855bff74136776d5506b4126bd16402fec624d01b9588045f1f5eedb1b5e579b67fd266a1f75342c4563d83de390abf37bed57ea984447ca6882aa6f1180817af157913e29d2f860e2c74c855e11d535915da3fab8febbb561a1e134ba0b9898d02ad773cd98ec484d5dd6371566375e374d7e27dd3f200431c30821496734f50c82b86da41ed54dc84c7706f6c136af923cc0214ec8f89762a7ef7bebbe72e5e7c66f2d92d8698ba75fd8e5594fea52e1c8755d0eb094f0a3130289b7b274b29e4e6b4276cdd7f1e5a32827ce0be17099ee21f47fad0363773a74ff50c9a439dd4837f1f6f2821ad501b8f2cb1de4f313c4bda0d85bfa298354a17beb92b2906281e3996e018bff9072232507bb0822700e2e0d097b9400ef502de8ca4010ba1ace01a136cc5a1b6f2a6b28fb4f93001c6db33102a2e79f2a41d64ca88eac68f204806a48b93d677e71f025b52dffd0714601a28be141a4a95989aeede04c8db273b3b3f93c861dd4b86624baa245a4e36459ca89833989b3f973f49f2278851a028eb111867d6a6d24e270aa5d76956fd5a5e0251e0c0106d92c35d6407da22b6c61932eae4f647a41569fedc70195b71f58145ad75f2855f1c1266b7a09b68efe2e0dc05f26d4315f952972b481c382e6d798a24c63101e220d0cb5428f2be07b8fe6447bb1b3b35819467a42b9ebc033f593d96182bcca1a8275613ac81eff47f0b719340530a6c0506d2d200c81e38ff8a50d882aedb53749e46ce00ce7ed61e1e1bbfaf4cc44661e071f26059b6f0b3184268beef09977e6083042af0d8f7833aefb78fbde240e306dfa15281597c4eac5cffdb947064040839ad0ad62e8b04e2e09edc07fc273d1ce5af86e39077899a23a92b6e8bb5154300564f05c89ae32c60dc8f91ecd0f80b13d8fb7ebd0a73f631a9be87df7ff500740a8ea92df324f79b35746c93758ebbc720d8d7ad9468cccc06ff6619b629e4608bd01f4336dcc0af5d7b89eef07dc143e5ba9857b98f95fd614d4d87db01c0726a5a0f2cfd9190ff7b6880664e36db45aaff3a3e803788005ad5a1ac1d54045b64cd7760525666c336266dc7b2a301d01c202ad2f6ff41709189673ac7b56f4b0a3b2a36e9541401df157a98587cae2fa9b75c08176c51d3b316118b79b98ea8281247a853cc846466336072ee7420b6283a869180f0da5c0eca3f2fee8f88f10e12d495f64d08ec5d048f7e0e2e53004476ba4fdc3509072223153e4cf2372468fba8b3b981094f1ba2d8ea2272de2ddadcbecdbc0c61a13436de582c4e7c32e9bf3519dcedb034a84b1f7110c12236e87683c87ba2ea338adc7cd3fb6fb6a8c9ce4fd0cd973e961550a82fc6d3a063d847a4bc75dd518b5f74b74f3cdd323785947fb20a62052c7f01e6ef3c653d779e895fb0076bc27414470103d68b7c3de8605a4351c5446a257de0372c11a7a6b20b8c621b68b960cc1b2e860efda83501457843625d761ff95fc9736d6da267c195e4c1adfe78f6829969acdc3a3328f634b0b7bc88189422430622d51e2f18ab6a5caed83e75bf43109791f0b7d5c0ce37cd35ceff63444c72e89cc8f666b1ea51221ef0042df28c79cfbf5dfa05ce1e428cb7a3152324dd774a3b3a58ca8a82e5447147260df1b3dc6752586337412e2831343ab9bbddafd1662cd6ce61c61714c78cd33ce7fcc3cd1d8123e7a57fcf94f086bc1e113952852b1c568715e28b434d0e99f1ad33f74b1fd372d97311e73202b5c9909742f60aa1b2d19ecbc08381d41b40c8bdc8650c068a35032ce325687fca22b464a90bd928e9583fc6aa09b17b81151c1d796da7c8bcdb73a7a67e146929ab2c97ee7825f3111bf00d0654a9292dc26ff224cf22b9b1bdbb89afe16108bb47a08e64c66ecb3655a0dda5a5247227c72c9351c7f05075935feef63343f058738519809cd7719954e5b9bd8a4ddc3059d286745586c86bd7a6518b6f16b6a1718918e9472b4076936b9052505c074867205a19ab2e711b2efc54a149550186225afd82d72a5dddb14b1cca7fa92e317e17069817a8b309526e62c93aec6b7c43ef911fb5cbd55ac088d037b40c4b1b04ed46a336e775ebc1e969254c36228e760735358decda448fcb2043e4752beed530202a0f499cb6c09034723f43ff5a5c7f4d247f2f6bdf14132f9af09d48cdecc7bd934ad177de86e709b6ea7c0eb7a1230820095ba7d82a9a9330b0c726065b687356d834d82c90fdd5f33eb7f854517f77f82d7d51b022694661317f2957f5ce38779636024c5c3070d876cf777e38d673961b01c29203f81a600467c3e5f90173bf808bb7e0ffd5484294fcc4972ddeed81f390f0bdb55c25270492a8377db21baf4f2d645bc9ec10cd0107fdc01858b7d2ea53c228b45716510e0dfbabaa11f1d6abf3275932142391de565acf67de0d8a9fc801e5b573399a39dfb2d04d9810b682b2ba204f61784b4dfc2b0cb52344c42556e240b9a2e8f1a08eb1f4cda91d0c04bf710eb6167c114ef19ce14e74f420a2bb18a649a29a843117d096638182f362083613c4d25d425a9d7be626c8c560d8f9d4fe9360f6240a791bfba2413126e24641ecd62b21a1937df9fd6c4b8b38d4a32b86037ad3ba3dd58d20ea35ff62166e5c8dab07d9d5054ab09bd218f8f41fa915eca46d088a9d1516108e03b08cd761f95be9f67616e1ffad64093b765fd0160f18a2bb8b70edd614c218427db4c79f5a282d3069aee6f6768bdc8326b0025b29c54b1f48c0d5be95e51f3dc9e179d3c82938c826b6ba50ebda234af75ad46287e3a7df7fbc143e452790215b9e16d088bb14f49a4db9347b90d0b8aaf76510462a8dde70a07c534c1702a820632410e1051cdfdb80db4c66269454788bb86775cc00e8ba139c83996300b1e27eaf1123669c3169118768ca77ec88d66bb81d275f5db11c8c8fcf5869f6dd0c2fc7ff517a0310bdaf3814061a540c035d842d9b6925cf04c69c7716f9142c6e873a4e9a41020a50f947ab3055a3be167ec6e01ccbf930bb1e0144955063d15bd4c772b1468b20beb98816670b6684c688f8716d1701c353ae8dcade35804969681057c6905476610c830eb6b2e8d9c325a61830d033fd633db131e9f8578556c2a91b7dee4462209b7d01e6883fb723d1cb44161c3f04db91c2f308bb3ccd78fb95cf7a1db69a9d18d686affa7b81aa04a03cb7b4013148c94cb2afe225e6e772ce9c931418b99229862919c5f4b3e0df5de2fcb44fc56d422c79f3f6a79800aa0fe7cedf5a9d56bdb7627306eb0318d94db3781792e9824d06a185542104a247d3e68585959206272fc29710fa9167f3d34dfef55d9f87149a52a2477e0decc2b56509e238a3c117e71149cc9ed915c67f3552beaf9aca5504b1a2ff1bfc9f585606f4771d5f34f50c56228476f43151cd2a8b4e75790e87cc07a945c768630d3b43355a32331e9c89822b6d7742a5cf88834cc1b13c20af5846aca07c63478c45199cf8d096058deb56136244b6a58e3d2b682896bedcb4a87a2be32e35f64e0848b640ecf3aa4364c900379bf45c51ab0d184e4e3fd6416c4a39f6fb00dd88e558974a2cfc70dc108b5897b258965a6cfdc1dd12cb58288558f7b18b9608812767a5ddf69f6bb6a3aacf0dce03f5378dbc7542ef6073118c06dc9666d03c5ccffea929b828b7859fbff04d6ea487e21cef1ae536abbb9555dd60b5c536f45638112b98d88a86ee4a6b15b75bb11bce5a761283ccd0ae708266b5d4a0a113495536172030c1a1b0498d7a91d20b6e85d8a914d399a63254d0322b04572f93e5a6e503d7d7a659eb7fbc47c8af32d654b5d15212724a29e65d049be1e6bed9b529e1d139b0567747cf42da359da1dfcca1ee7f8f919abf19904012cb4e1c3d6862523482c8fa81c1eafd2195a5ca4a4295e60d87361e2103b78054a5ca6c880420f88d571740deb47507a4fd4d409d1127f1e436a639b0aedbe7874f1028070d81cc68b2de3454dcc462342b23aa8a9a58188d07eb4602cb3503969bd1a4847454fcbd82309e6830bd0010270c8942174f3f2921ebf1c322bf5465911a71f3c7d5f7e4068498accbb9c8f56e970d34370ea9c04a20fd4178d9f82b9d79acab65e1261f200b23cc47707421740ea0dc1149f597811120584a90415ff5a68385aab7bb25341db9ea3cc427dc13a2a7345b0023998d13e9af93c462cc5773d2d8098fa98088ff822c4f1f44326d119d33e7e914374b3ca2b8f5f238f17514d129793b929ef51ae08f8914e3a61dc2d8cc8e872642a52471404040cab430b1b3d8c8cbefd87dd3a8aa601c1a12dafe93277ed99150678f5971e887a5491a00d770ea63c3a8d8514db8fc9a57dfc44fce0817b7c05212e40107c5f9b6f5e08ea4a3c7002df7210e5d902348694f5e193e7384a54645316794a6751260e38670508ae76ee152ce3d1cb265b2b2126fd7e127ad93f2a2cea387a7aaae898a549a5c3b9099d28269f1497f0fff60e1c76e3d3e4a26ba58ee007e68764b75b93bd086d3c83916fcf378588f63f15d5ed36312f27aa5f4992e4111edbc8fe9f19bd3c67493805b9a45f0feef767f3162f79bad8449a4d96c1d7705efbef36f0bf4ea35194aa408691707d66bf7d463bd9dbe8845b19e0f71076ea98ca971478e3f153b77cc3777ebf024d9a1c5c01f00dd8dc5d80bd3c84dfaefe61b4e40bbe33a6661738dd881e6e552a1815e2c99ceb6f25489ae5a7c292a67e64e607c5dc55674a0509973150863c23e898bd1eedaa47d779845f279e20b0b152c7b8c4f596d04240c51582e59cb71714a80cbf2e5a21eac37735b7724c7851d04fd23efd8ad56d941b865c6295e6d909258a791a47573b99e4b329dc968bbc46b0104c1f4589f038233cb351bf976b3ed0b45c2260149aed84b01c26fd59b6f90722793232b79c77c373d720d47e4d0d1b92f0857a7b53dadf4e7c05c741645432992b1b74ae901d04e6e38816e087652c5fbc9d26b49e8eb6d0c75b51f8cf04f79348783ad043c12201c0811dea8c80eb83b9bc5f3fa6464949e9e54f50f230f587f4a609b727a3fa72b7f39be496bdf1959323f3c47d7d1a4916fb1640a22d16e797e83fcdef892b245eaa90e215565c1401a3908a7f26e269fcb721b1bbfe98ccc83e37170cb4ffb708344d2be73488dc20c96ed3ae3003080604f286a4614d12f7431fd7c0930781cede1b9d707b17819ef42372dc9f150dcf9d0aac2f1cec066bc101844d34baa276e95730b12674803dffe9dd693fa55d69dd5f4f31ea7791be42c221aa654e47b87b9df3ea9c1450259a59f52c96dedae8e4883e8b36843f573caa763df641622ac2d715c111ee0e149e8c82c8bdce4128ef5e5d01955c1215dba340cd658c192ece1f204ced205a030269de9b75ee37938623c3dc153974c0a02e2ffa9900b9d483f5fd79c531f5139bcb448b68f7cb5dac22a2939870e0a3ce81df7c30abc0abd35ea4f801b7afbd0a0f0c64188dea04c06675544a49c1ede50af0b3211b4e20e3fbb9668675085c6b1eb67ce3a6806afe9d7e20f2588a4301e191bea86a97bd5d5459cc3442b7a88173f0475d17b875de24a6ba73171187dc0e31ebee8fd63ffb980a95a32f1537de3be5b03eeb9399b17f58a3810992a06a41918fcb34603530e90ba47d7a54db449bcfcf5a942ef39920711a70613503c8a8e4bdd7c16bba8546f02ecb1f7acdda02f919a610313b1804f3aed93283569390a3f244177e99016604a7f64d649a6f08e5fd79a51a3160213baf5df3c935efc8ca12568abfdade899f2418357bb3b622e73a65eababf52d0da54f2fe71b4bf4860361218344f42662727251bd7138d13b1c4265d6532ae6c89638bf07e780f41ef0d1731edac753a17446a1c48114db4ae8d224540ed4274d532ff595168abce6f355ddd04cef536cecad3417d2ecc0897380f99919d6b05b7350479871fe9d8c750dabf012f31596b0cf7d3f587f98296cba6efce0ad20e84c8bd435992ace6fbfe58b71809910f61e074fdf3f567dce31ea1f1ba3a3730aef24d162ac81f61ef0713eabe82819a3bfe96a616d4726d484cef9162cefef917261453e645ee56a7b209c44637bf55c8ef3e4c47df108034d293571d75e4f67c4458dfcfaa093d737166bcdf1f6ef181133af179cae1a7310aa3b7f3a606fa49298b9a7235ebc3c2464a26d6df0ae52af2e5ddd4ad31119da54f24fcf2de79208fac2eecf9ecba861bad51ad74ef430ba09167618e2cae9189b615c068b180c99d218c24561a4248f37591383a2d4c11843e3108b285572164753978837899999bb46ce4d16b6f22b0bd6bf0e861a8b6f7ae1d2f6e1bca641767988682c40cfeace291b63e3b5b6a17a96f1df826cc1be859882c64f4901e4ccaf4c6243e49d7c614b4a4264eccb8542a7e68d5ec53ef673981af63c2de73a7029384b81b14d79f18e79b5afa73b61654a5adeca743831a1391157433cd1843571abfc8b321a2cc4899fe96843623a6726cb6c715701bc6326815597cca2004575108240cbe7d80dd85f7eb121f82f6bf2df4cd38fae25a7363ea8f2a329e527e862c27b6060d8e8271c035d3adce6dc05900e35928849a6f47f7f92b83b2a9da4300d601f7fe2b6fe48563df73e006cf0dcb74929e097ae1b34e155074f38b0dfafe1bdac745e170033dcbef00478769598e55ddd09b07f378af825ce224681bef0f7f217ada7f4ff16aae6e44e450a4f143ef85b2095192170d06cb6424915c9b30a51db90328e957357b592bb1250f13eb1dc0096601814c39d78615bd41b2928d676ecf8702cb2b9e8a187cd59b37740b4a3e2c3c5860c8370add05e5b56104c5ae2fc25044bd0975a227c274d551713af41a382610488a77c46669e1497d9b073e4ea7ce42a9862e32b5f86627be2fec421ea773ab6cae593cc8f64e8952bb1b1b5ff64bbb7afad6a5340e3c42a90f397d0e9ffa3f63b83bfe6feebde6fec4b5233b5e2f40b4ef471da1292c69a4d4e073ae3902ceaf9f66620dcdc1d90e5f2fae5bff00a39bdb9ff0be56806deb6a56980cfd4220a1007557cff379a519b2ec00664eaeca2a1452240dc5e7c6f76c92fa95abb89f1a95eeeae018bb88162d3925a96fe22d87a2bf1f7b6a8538a92fe4f7744343a2cf4d617fe51e1ff59a56f6710012efa0c23894e599fe14aefcabf7aedbf16ca0e99cd7e10ecb7a3e7dbce81d4b1ca25056d7e892ed1294d436c6e0bb18372af01ac9ab8e588e005e623fedc7272d1605c9a6155b43aa3da71596f0e617d8227ca9a861119e09333f9714c2b4831ebfe9e1e1619f3bc858733420391938c4b0a932f4264582028fc2988970f5ecb6d56cc3c8a69dbebdabb3d8e090c902ff33643efdfabde5f34326b42bff03a41448d4fc023bde3fe830c88b41f50be7560b93c803f8649490ca8d573912d279abf21659fe02cf9574768071d7d41d74dc78ff08441d9bebb4a674b74ece8355f89b69e955ff1f53b376d69404ac349fee713d4e2452fdad4808427ecb6509fd69e6ece7a6f105c5c7d51e026316c2cf35e29ee0492f08d936139934833c22f08b19c7d1e575641431d2706f7596df0230fcfd85a557c5fc73aa67b4a0b8332440c568c075cc4057cdf3d5a28936bd41bb8f7966b4b9d6b4f97a58c04b60c7dc7248b8fa4b77739a75d6d492184329c216b5ca77b47c409425568a6f54c3f961aff4ba4518d1b4c60bfdcf6ebd4a9e30f85a36baa66af900dcf509508bf1ecc06c6ca6c9382c2407ef3467ef615c0fdf29979448968dd0840cb8f13b754af52f912cb9c82824ef538737b8000053865db0859e4200ee6c4ca5aa026db9c0736391c1a177f23b84c299258c69d4021228f2b6b74cc7260322ff5674b62a5110d19614e1d36cd7e56a5bd94c62db541b821521b604142f8c2426440543be60d54710c0c7aa227f5f34471383bf4d4594073f343477b8cc0fae8f89cc2d2e0ea6c7181bc5181e11391abe4c6be2748f604f531d66e4dd6bfefc5e462df2a5193a0088e8ab73740a781dbb88f8657fbf982740ce5cac70ac371697b972695d826a37af441005fc2d0047fad6e8c0afe77a89bf9a05075d171a16fc800e2ebfb1fb37a5b9dd2128aeaebe575b5e807d3feb20f87149cd8e539f4b21846b0961ecaeb22beb40be24bb82a20da47df4cf7cc85c0b91d9b13a282588abbbeb186cc2758623c1afe9276d27fe01b24a9d50c94f86aa0dda3a458fe16bc29c3c0f50082349cbb10220e5b041c5e62491f43cab82bce7e84c0c5faf4e809b50022ad934e5a489e1959951b25933653a9f3566e6f9dd8dfaa49632d30ce2f0d6c6f610d2c5c939f36b0925f2b7cb05afb4a553ea0d0eedda610c8d9c5c7c1034de57bb7520dcb25f1cb2d74c77d52bfd27f4a9e7ecfe6ea763a24fb29c2e88034ca27b60a9ac77add584307a4e73737f9d43ddc57b297d315fca219a8c65af6bda07b8ebdec01e9447d8b8d172795547448b62ada2832b847f38ee16a4e86dba9797d0d72c4872f19494d514dfb1f353f5930bffcb29054e612c324d603d23e1e0eb399db6709404bd87e4e2ea5d9bd612d44bfb459174fc0f861d6e287dab23777e304891e9084bcd8252fdcffdd0829e393ac07e42c3c2accb8c216da671422f0ecf9756d6f376a42ec40e30f66da78a62f971df42396605fb30439d01e9002dca60d26dd580621f580ba307aa311992bb1ab8d8d90ec9ee5d600b030ec017525f4433347357651237904710c48fe045d599c3bb3f9d5d788880faa9d27abc9b2d187a8d62e56af446ba6d1595746070242b1eff5ea98d2d864e1251202e9f334eddb044a6316c31c7d4594250c1d8b0dcac83b00e18098598c4583593f30b14929e7384a8aef0ab4070e8f4e2933572a255a97aead5296f94de94e5b05f132044ce1530fedfd3b6a969cd070014c99aae4d9f920d9d72d9fb1a3bf94f2db48e7603955efe7c11c56d3e800e137ddc18e69dc32ea8095e2b2d115d98e36c8721a102939a0449c9c9310c3c85ed2e5e41d696231a1b4ec74f6a86413f9c0420315db13c83c1d3ab8af6afb8216f3a4e0158bb6e47828ce06155dd6e94783bbcc93bb9eee25cc0a09d1e65fe3e0b10f6b970010262ef065f85f1f54b040bdf5844ae7c66891deb4b0940c185a0893650b78d501ebb526409e463ccc138c6d36173dc80830b449d54c0c765c6c10c5ae746bdd7e29dc2af4c4fe2a69755981cb3b797439924858eaaf986b60a08a34003f5245c0e30db6ea565a9caa38b6ab7ba9a09216e7c4028e14c2f77b1797454c0ce693fcb327301740d42386ba58b2f8239e97bb96ee9494015349f0000f74163c7c7dac523a535c3cc5026d086b34032ecf03119c82fe61193e74b8ab05d2d3412b28562decdf5d6f2e2c70733fd8a4aed78345e86739aacd321ce3d5dea28d3c1d430c61db2a192c14bc8247da1084a82478ddede28dde18e12fd0c678876d6dcbfc554b701167e9d97f5f062d575ad7d9a9414dfc69dccb19af151e13573a51d88799525ea80efac80644fbc6867901180adb07ea3e9229965b1b96bcc9b2926e3dacb62bd62be591489194cb2317a1478f9253f202a7cf8d9a690290f7b9dfc8dbd79d6b6ed7d81aba15bf97518761f4e21a1f7076fc8aa8a45c569144044c60a562b1e695e58e138603f7c141f9b96a727abc48209d039a217cffc665b2499bcb164ff4d41223faa78a1b427413bad1d1ba17d5f1a7963a0ee85cae027811719770c7a34420a804b49291263cd5eee7cf70263b4d2d9e8e781d320dbc2e5533eb990d8d62eedcd963604b6e8f36971917a29b7e7dc09a1ac2d9ab54bb748e4a927bf11f9510e9a483437583ae18dda0293856e48dff282e436f04989bbe3864199727dd13f8edfa63d47d44018f27465310de93b28a85c13f5a802e4a07b40c9c208b92facc1c4397af5d1613ede2fdaabe2f20871df18c90dea77f5ff2fdb7597b674701f83b3d4301ff3de09e56404aa153600f52ac04727243f4058d4198abf57378c3b987b046b68a01bf72bc893c54aa36fdca73bddd87abaf8d31aa85d4d6dafdd1882152d16709bbea666e31eaca33e74711a2fbe064abe7e9c030317519a28d894b4fda388b6c33a2a8556006434d129a34c45083990490d1206361b4fe25a301103800a07f06ceff1a54629e8b4cf2fa6fc9332bf447025619f5dc70884d77aff4ecd25ec7586a5a846db99842c83c075bb1449e5943b53e219cd46e42f6601ab8fe71ffe6247b9d70aa824e34eb96d702b2312c843c97e547439613a1354b46d0924e035b077c4f3ec52b24477811803b3d5a11724f6f621a3ecedba0ff5af93c0826b7a1d3dc0b8cf1d46bbb3a57e578f085a254a6c782f7959e978d8c3f9b3533df4b11dce2371bbfa1fd725c90ec84137809d428bbb8e00de0f8c6e3a512ccd932a0b5413c29c2998fecf08d615148fa5f5ecd437d4cfce5352c3adb1bb2e8541f2f211d8ea8327be8608aec9a027cf6ce44cc42ef5f239e345d7aad266d57e88ba3a0cb533e022ca6c7a11e2f191f475e7d4220c1e9837ba94406d367515600e71d2c24cab5f1196fc3947c9796373634ef7d7f6a141a5f1f5c7a0729b53762a8b2f3f18064e1966a25a14bf6d4536ee9da10016e07501158a0e789bcdfaf8e1bed5d5ef5785311b2fd707b4cc39bc14c800f7f9deeffe0b5ae8a77b9618c64856890224935b19a31dc4d692bfc08491444a4ebfac8d468fda9801b7529ccb9301d2282dc53930b415d52119dbac701208344f90d5de81b3ea11ada01090e7d684287898eea4610a00aefdcced6cad431194db7c6fe2ac8cac76210657ec4d20bcfa94b4288978fead14d503bed7a7899a2ea2357f5e89906c48aa36da23346e14ef7327ae74f93a4c60bb0d7764392cef89aef15a4e2f3530c41afdd3681c95d9840b8c04f90043bf800edac045e22e4876422fb323c9e6d41bc85a66bdc031fd6bb1fe7a1eb83e19622368178c44064eff59a9f5eac89417263efcff642016b1d617547082037910c6fa479a889e82995c25aa7454ab2ad6adfe39e3d29d4aea41037f5902be2d22ab26d58bad8b0f9740f15cf6f21971fb565659fe1318c5d03d7ca56064188424515d018e71cd59e3a084127083ce854db5f9edafdb4a03b57d6ba3f1a996b583c937af4581aef58ea8fbef8576d1980b9e7d6bded02825546cb804462eea7ac7e278a9a601c79517e6192e18fae947c284d3f3f198597e47df5f90b0539aa8ff583a35516314eb6024ebe77a7eab979fa17441a6098912ef73526b6ce2e3e8500855a8574182264c29abc46eec1fe089000224a26280810cf7a18b8893c8afc4f02a99333142274a368b35a55d04852613076faa988519f3863e06aa30dae4e7e013bed39c459de23d4c260d60409f0d198bdd1b380861f670cd19074ac78aa0736ae87bb5685dea1ff44c51d5aaf2598b77ea0855ecf64cb57c9fe119626462534cbf03a0735cd02339af7b5190cbad22685271d7ddd4adf2596033337051711ca2c721baf4880c9994bb8c5456e8ce8e88dae614a4a04760a95db2a8db01565173c73ed42e5ae33732d3e5dd896034af98faa50a684314871d54cc574e7ace7e96b268a53e9a7f699d5e2f8f97613e000cfd264729fe2e3fa63973e32a71e1210e32f322b309f8e69aff77d2459eaca64234929d99115f3c4a42914436dba866e96b6722a967a6d4035ba18746e1878b657e4f6566e1714a147bb672576bf5d338288eace3b85aff0d556e0d180625381a9023ed41d09016d17296fe476f7195cea4d9fcdfa2def7bb6bb4e88be6c5a76aed747ee5215e484f5749af9d9c50a324d3b7d3097acb9a04468a3d2e540ab047bfe3ad44fcd793cfc4fc6dec46d74ac8ef055c5fe253b0a043303c4b2dae23e2dcc9b394a300ec1a48f85ddac78c603d6e4226ca1914c42b3d87b6d3f950e14322790501b9b3034f657080f3e7cb8bda661226b5f12135ac12f711eb97c490fb185d53ecd5b2029458619273564401ec3ec62b37057c7e712634dfc8e21b50adf634eae43015ef77057eb48728143cc98c52d17766a66333d89552ac014bb8023e44f6765f3cb32189d5758a46ee8d5baf88f7225aea97f8e712183413c5d4f9def22eec18a5b5b9881daa335a42c1c046674c3573a6833fd03c8c00493941934f035029bea8c4113659e72326e400334ec8d6d8a2cd5ca7ae6910dac9d099822ceff03626ff48a1c5d0dd62502b51a3d49ab4a8f7b71eb7c209d1f308b099638a362b9466ff733bfcf781d361591fa0ebbb96056f984de7b8781201a4c18f5918113e6e785c40c7df24c3e2e4cb6eda53feee86452d326714d4d032d6ef021b3b1fdfacf75bd287a2865e11c91174eb4700b8dd4fc2213835907e5c95364f53b071f20cdeb9dcc40f4715c989ba62a2bc7b97052a80bb367a33732971963ae2225446e20c2908b5edda34304771046a200d8aa65c706bdb34ca2506a8115ed28dc1e4514a1927bfd49bf329c685b2d2e031ad55510c8525fbd35e524dcef82d9cc7b30e51ef9046a2732caebaa1e227df4d0c43a3f7f3e0788290b230ffb0f5527857eb1d207574573650d78c749487cb75f822afcd034be4efc5daab0300a205a8ed47dbeeb33dd177de166bcc8a963a70da6c35cafc20c3702a338c3401221bffb84496efbf89a12f83902138a0188f17eeffb1c285cd17d275a5ef850a64e3f44c5c85448d87a7f32ddd6473d25e81bf301199d0c8b291d98a0cedfcb216f536a57087f320b10d15a5f7985d1a05a67e46882d2d3aa9826da0e505b75132a1ed33414d5fd211ad803eb1a0a6c57d5eb4a69420e6c092f83c32d1ed7095c5e7d0a00531a1a27081a9f2beee343661dfbec3f89851bc4f6ab06d35105a48e44764f9b81714fba8eee3b9adf1db4f05c3abdeacc4729322fcf478956fe6075c489ba03285dfc06698d6d9e7d46922eae765355c063851ed56b825cc2913bb5375023cd5ea958bfd2d3fbe9af4423557692b2ddb4182658c0cdc530c260db129a3c4ea2b18539ab06c0466bb5638fc31eab07c006f349f9701cbb32d77f66006608e3099da06df41fca83ccec7725657d8ed385d9d53dd0b13431e9730103ac50a265fd1640b70d0aab35f4e83792cc3de8510e9c0fa9ffaf1c695503c37f1050dc1415fe2046505523f4533c51c6b08402344c54df2c3c27249ffbae627665ca55ad017d2c9c28ce2d662cd03b2463d6f62004df6ae8cd0d3a9e567ba5cb37832e309cef6dbd74551904fec9a45f05ad6dd454fc00a8d0e83df9fef074a54f1e060173b76b465f0fed34fb964cbd9b8b622a7a019b02930ab0c4d43f1ceeb60b1a87f454b2413047055c572017fe65cd13f81a907841876f355b3185b810d4907d8bbe11740b983bd26bc4ad5cdf9da0b862095ad68ab15e6e0a037d5d9fe90c67883dc67e50d946b81306afe0fcc2b7fc48d008c3423ae7aef0f58c231dd99ad567fd0eb0383ac938026bbe45e1b62952d6d95e4c8f478d5ea591fb8c8ff82fd8b3c57b7907ee615b86b667e7ce36db0c2a695a5d94a8a6201a1b1814ac2b24e592a5a82e0549d6b7edace2d899fda9d1179a43d9c45a145adc6980fd6e88129be8ba1a1b61c64b724265436ccb8fdcf06387ba23f6bb7bcba44f45e5ca5ea2f41699b034742289d1abf1c174ff90e7e04b702cd6b30ce2504775203c4fb122e85c8de47817a1287dea2458495358b2f303307ce2a0990076f338fe7dda1f02b568d970792e16c6013ed43fadfdae24997c008297dad6cefa622a4184f2647de45bde5c19036220b13f17f57a55318a33a42105944fb428d7e2b5a1d2b086617fae1d0b57cc4513193556f0b1305497814b71a8a4d1cb0096010b4042c0ee19174e2bc9b6edf07ed047fa3c794ca6470653682f32e0c3a4c404650e6d15f9b0b302c524353a9ad272a3230ba4ce11b023f56715ae42e7908773a048dc4202ebbd83a17bec461e89917668244300790b176558b995160024686f77d084d831f8a12c75f6c311a1a30da61c4815347f3d5524e0cb41fc84943dee2cd63b098bb0633b4a5653ec7e1b43ba111a0481d8b8186231f0a21c23bc48ceab03fbb364c259b2c0053c28574af12d3849589c4f98f8e84431dec112ace86c0787fb30a74b211e9a4bdd414f222e29e76cbb0270d7d894402798b2118cc97f964ebb179adde51fb553e04ea6e2bc0ae34d2225d0965047532ce729de1396276c4a10ea205420aa060e7f3f4e6393e73ebb8b04f3818fdc39edf53274042f05a2e61011dbcd14971f2e334bca8fbc8a3c8fa65197c329ea517116429cc6874816f83746d221eafeaee8aec9bd82d4655a67a005d451b9349afdb0efaabe29f1f6801de660bf0e58e155830e82303714188554408f82256d187ac4017f02eb47aa1e2999dd7c87bb88891781ba10b7670488ce7a28097e9d1310559958bfd2d79c35c1be0e1619ab2783105fa3a9fc6509957ab4d9379c49a1b4bbfd383df836c3dae78b87e72f50378bbf33861dcfa0759939b1a61647f6520a21edaab3e08704f476a2abae938230409992a7db25e134cedf707fcce0868615f294300458fdf1bebcf6d6242ec1ae87d608559ae9e819c57affa11d61d22e74d497b325a1b9560de40f30449f4a8a6e0bf132928989f0d42d8554e8122fb264c28a6a99d6c604509232c5bafd2759e3f08b3d0fd51762d2269921336ff3d6ee67c0ac4f7294e118047851bfa9261ddb3bd27aca937e983bef798adb1ca94c65b8815a6f377ed1240ad5af9b7620359cc31119971b42e8e094bc9df17da42ee4ab765785ea5085739e030030897e02a8cb805e442baf48169645c6258297d43a37bae0fbb1b514a0ebd8eec67221c780446324e1ec31de5f348c34897ccbc849c31a83bdce7abf943c671adb50c68d7e14a56ffea5593bf46e61d300bfa1860212647a45a00f48de5a3f49b7730c152e165a53409f20b1ddbb3baed99b5873c26e574f69f06764d0bae2711b4ceea04ba0a7e94f9a2dfc9635d079bd5fbf053865c41239318597ed46fb2f3ef0ae8d41a7bb958a2eb78eaca7526efa061638b410a5c501d59a8e619e244ed662de23b2299329e617086ed5819f92cf02f07766746d5627c8ab75a1d3412b17c76cc5224cea5d1b15c1a721f745fa94011b5941fd9016f37b9ba369d9986f4e4d135b7a7df132dbff2f7af81de071e5cacefdf8fb7e1a13eb8df58e21db9819d28eedeb1eb700449d025fff4cef1dfca283a1fd42c44898b61fc4d3a746c5ee24adc20f902ffdcc7c020b1f3b84d487fe5a1c6a3b0dd69ff411bf0a42caa8d285065f8ff9dd2b7f7c76fa721341271019ecd8ff9b0021d85f1681d82e48d28c43bee5aa849d40e6dae6e70028e5f4efa6a25bf43c1d0eb1e51f3234058c3036792318763caa9776696918648f285434022328eab239877817d8e03d7ff8a174800515078d8df521a0273710003a0a55f1e8cbddff82ac2e6702edcbbf6e3299d0183ca368a408ce1f4e32993bc8c5e7f50226f063ad4cb9671ad556c0405509701bb4fe662ce697600cc16370da921b7eabaa1603f886950764f8d90d28676bdbcd237d2a7edfd3a6919b0f19dc03c56342992831efcc53ac891d876a3b22ec52ae4f4077229ebfb738694c4003c2de4d5d2414a3c949f9939a3dd308565132a41c6c5602eab5bd9d833066cbc57c6e5426b57996c6e0a448199a9b6462036e09372b8852b6f80682b28c99564ba17b97bb69e5d6d79db63937858a61f054cb3a38543473af131d542040cf8ec8ccfa8cd1bad2aeef0ac8f70bbaa579e4c5019050b1bf9ac43af1633c93d4b23c085057f7c54b696a5fe981a861a5143b13f631af80aae701bb05dede60bc684dab693ca1d29b8c0e8e909b18f078165c8ab56be208360803b1a477839840a170cbe877c2955846abdd8f4d681fd80fdbe179db1298211600cc1068911893a0d01cbad5b67a46c77a0020898b26245afabe1644af74cc45abddbdd4f3a35d66de40311d51ca7f5ecf703dfa62aa8d5d4ca7da1d637307cb2028711d847215792ef6e9c4bc0538e399e1e4dd6a47e8eb5219d663828d3c67e297b787bd18c23574ef485fb32bbb50034ff537679025729214bb8a76d23c5a15594aff5ac2eb99d5176f572bbdda8597a1f35ceaa68fbc022d88d6288179a443997cb06d072b2213c21c1f84a4fba0dc391635f0419fd2582c0a28468f322a5da90859fceb34b2ea25dd88eca64edba05b76a822f567382910fd8bbe849319c4ef18c59ea7498a9826e6949f32c54cd136d99de60470e3f8387d8b2d183b5a21878fa3c39ac9595fa6641418d60d023a4316d7cde35296d2278234600bb7d47c324ea6b9a52ae441b5555f8af970076a8e9ca4694b22dcc052031fbec9f364174587cfaff2c40b8bbd0d6be0c8ec1d2a9b1c5fee4d80421f3c898b0d3f780b4456fe7024e6d6c8715084cd1cc4f150bc1f6b0a5828b7580e9349219f0a92a251f8484db783eaaf8538215fcabe3b829349ec74a706930b1777c7115e28f4d185d13c636b69d5b7c2a820b6c2fa54b9954449dbb7ae4cc1ddbff0d33a62aa85baa95ecd77e6e6771c0d12d2733bb544bb70f176f1860b9412763a4811013818e3e10ec51591561039e32dd1111ee411c1018275ccdb13e51675e9e0c1f1ec190d9b1a145a38e87a4d96aa783802eae81dea39da088b6719fb8d62ab3a8d8a06aba9f53a4a05100d2411025a08980713d8a6efc9792cef5a255e7c90635956499cb57cd45ca44047b4ac3be5dae833ac6f5a219498454d523d0d0fac6a6fa2d6d02462b292cfd5e1bbc1cc6872a6627e0445f7380b1d811188d935d301a78c4c8aacf25c57297a83282add41ea3822caca729c68a0d117d3b84798b56a66935c65487689dcfda431ed253ad293416155613194cdad529708b6f74f52432672e3b5a2dd97cafea9fa7b6597ea14a364cd5dd6415e3432b53f7c8f58870e997d444b54a70deba8f843ddbcb1901a4c4b7802e3153cbdfb41a2cc373441bf7bc3de6686a795deef0fa6b5c0076e7eb1934ac1a1f22aea2b3a178d60be82456ae45fec0052334a7975a1fc4db03af3dc7a2cbb8aae76387b03be5ee3bf7d38facad9dd9f0df6192bc51e25999e3554d94740c3b8db208d245fc3a4cfc6b8d1b5a484cf10536cd59bcddd32f876d4d7ae3a2120b25f2fa04522f5f9400d717eeb0d993540b6976cafb53ce42de5dcc4e7e4df7d900698bca91157117d31de8d10eaff48faadc7b8464c4700ff30a1117ad2482e46e35da3b197742fbbbf4b1ffdda9768e4362f38060a9c3c6c3ad0b65034bddde48e76e63ac940375e0f52f7bbc91ddc7df8c361fa4c435c939bba8676b75628c1944bc490e19f2612e81f619243dc4daee8e8a99a167b0a75d2187196316fd6e48250ad625faf6ab2b3549887715025b4fdd1437867a0b8d1e0e38d7210ac8aa81f78f28af42cc431236074b55016206c8301d3da7f487fdfd226c261b0ddf408de64eaa82789bf8c6a6308e5a9a0164d8b8e48941d717a53947ec2878ab814f15f70319bfd096d8ca3cdfc9704589dbfe137ba4a493fccd4da2822f87a5f0b53f6c07f59cf266dd6584c0e8369980b418165668a7b206efb85969dbf680c1214e85d113b22c64c048f40ecb07ffd91f5dbbb9a4dfd2f42fc25316140d02e0fe9f74913562e3ff6de500dd8008283907c5e0eb9dcba9674f304967b0a9f119ab96e00426aadd6cce039fefacc5426222fe75e6201387360ee813d8f1672952ffc5751165850d8c724a2f41a24dd2a03d93ab3b72f1d4356acedb5a396fd3d6f7a3dcdf88921e9ff884318656e3f93b23b9f802045a9f5a7b3b7e7d63168e76eafed5443832915380774a42e0bacc17fe10f00b4ae0d29a456d3d116556c6c00206433374b88a9799afbe87d33bd537c09707dc7124027d9e9b4168b6162552b8187d59951ed96341dde75477379555e71ee7a1e435ee47a878f0d9cc79c7c0d2e3908b7058cba2cf4558d746042ac2c83c1e5111e23609bdf8730a28a0e02d5af323297dd92ff707b60667e1acac568906c58a81a8d7129fce62008e9eb83eb2aba1e74fcc6a4fcb89bcfc21b66a5c3b52d0ad7a14ce31bc25edf01216407e57d33b5940ad184659e8ef5f9a41bacf14295a4d9db4b6f0c1f6bc3b5b0de0d68d6ced5f436206d27d7caaba7a17c4cbdcc44507789518ae8776e3f21911c60036c8a5aa32e333ddae9d2b3112d4a98a39a234d16c57850c305d4839745e601283b5c6a14e649fcb7f952b689792c4c186d759ceba83eff4f00071949ddc46cda6bc5756c7b996f1049a4a8c5ff56407a52730e86a7f88dca69f17a93b635594d913c92130255f7fdc0c3680c33709d7887049bcf0a318e75a3fd8b4b22dac5b0e0d5b856e3740e38bc7c6b47c5b1ef8496a9d48d83b8f62dd0942c2333ab81a60a466bf57a5175314c2f4bd128600b8ee2b895b4e3635d1918ca22fcb15f4190bda15a12766d047b27a2b9bc9b1bd462e03e2c852c46995a33c3dc247aae629dea5063066cc4aca89e7c6a3a2cdca1836551e671122151b902b1816076aaece9ff4d86799d6b665856e4e0bf9a77dbc78dfcd39414b0ff819cb6a4f1dcd1e02d28e6678f7412ad405389f7ccf4180ed8fef330d88478bd10b29df3a73047216b2ab43af95f087db633623c5e9c2ff769348672006998be0c2b62130ce20152d70e2746d51a5dd517f9a5d454a889a3858ed6c18b7c88af234b771c9c036f83483a40014d7c2f4df0b244b0826b1f5ed8f82eae41a7b545ab51de38b246df0d04e09b0d26bf9d9b81821bc49acac70a7f60df825ecd6b0c7c83d2cf326873059f7edca9331c0659e16ed84ff364bb84acbd09ddaa4d304ed9273f4ef9325a079ccb599b15ccb417b2f2060e70bd184b7fdfb8a31a68e966648f0d6b53aa25cd2788612fca8d3c46ced0b6922e9860fb36542619bb92d700adea15416e76b59f3a997df7092ced2b4e00ad4b22afa2d03ee630a2106e7d07c4eb601fe30f65fc9df037b7a0f6839bace87d963a70462a36efe263b9775f862583dd46426eab83c0515d9bb25c6eed882de5e7f53c1f41cd36291c8a102023371c3f491206c00a30b0340862de6d2991bd6e23ee20f1e79071942c5e49131e4f7b0c3c67f0bd875ae9791e4574b42f1aba9ffcd87e0596d898ea1a368002de010bfdca802aec37506a2ed3d4fe4bd5165d239b9642b6a1ff5ca1388baeb9e2953aacdda7a99e4b37957a5a22ab7c4f2826feafa5dbe94ac0746422ad031e4ef4d8f94fee3db5ca86a403255af6edeb75d683076c8f9a38bfc13b4ac8f112b1dba70323498261720540dde236c61739309090c076b0dc691f0121c91ce905e7919fc9d9244eb42169a6e75f72c3780c3f232f8f4a74257988db37dd5c214dfbec7d2d69867592e8f1984492aa41dceb7edd84969bfd0937a8c77f5ee1542272a5548e18b8c81d03c758c9f9428bc3962426eed08c179aca6349843eddbc1b7fd30192c032cf8d025e02627f5a9d51e21f79c5028b9df3cacb5e1ee9aa038297f57a5301cf455b14470fdaffe3626378c81241de805a0b0893d838dd00ea713d06faab1f585fdd235fc920e6f809b53d1dd3d66a0f521f4a59d851d774c882bcb6ae007c40f8b50b716c25f60925b5476f48dcd7ce859c79932ba2410da865f97ddecc5070ec8f10c8268f532c2f1e7f5516cfd89da1ec285d4506a7384d18f38178b12931e8c6c922ced10afb99361cc64c1756053afd2407c8f5b2f557de73b2077b84f715b662b168cbed6d14346d8cb09b47250cce5e2959066300cff266539cd5c44db23a994e2d7cfe04ad1c7405017fcaefc2ca7540304cc0a615382968d54339d3e0cd0d1508c508da011a6375e9c19515ecb364732398b3ba3dc867756075bf515694db4a459eaf8de92d95dc1f4967095d49f769883c3c02321a0b395a53bc73053d92b8647fa03abfbf2fcf94e461b45ad64053a2286a0f3a1cc8c92a468eb0a94c86a4d2a0760a6102daf0a196851d16584d63a90af14b27245519853320c1e9e4df3b792ee319d79850df5ef09b37f6437e8f3eae086c424bf61e14630fcdf47e1380522be1c9cbb47725158035e1b26d4032ff1d82328089382fb3201285fca55a23cf101328f90053b331b3e2421561f64ee289405b11d3f083feecea6a9d12e39025599aeabf79a90e2a72363ba2b62f7b9618abb7c030a6671cbd30cc7f440e0a166a06da0175c196ec658e743bdb26395f43e4e2cf96dbf130aecf8bf2fc9412e17d513485732487232282af196e694fea678f77736b4c5b0f927e8c93eb38090fba81401c13e83166eebc72d46db8c20a5ec16e7fa01906d7192847cfe449b416c2bbfd39e60f0f0397f646f287129df705a15abe3863ba26bd70454e30305dc75e99bfd6ba5c46fe0cf2526f17ecd1099283280e0592ef9062915663ebc70610961263544971244894af78ac93976f5b87bb2824438708c7810aa8cc58a4d159279e6cd296b4a60e5b91d51676ed18ce660848583f6a706813943a2ad36a1204c6fe96a876bd405dcb49566827be24c8a42c53a6df0e4ecc86216319bfcdd82813f0e0509de8e3d81dc3501273c6b64f1e4ea0c49c3084fa31535f6809c6303570c22dc5e5f09825a10fe112438e5d1a91f546d16c80afc3cecadcc53e794829f1c5450207401b5a88332006663fcc833c39af0a6cc48f3708c15d89664cd6161ce067bea01905c0f5e78e0976bcaede9e4d553b81a31f6f66c561b22b1952135e5b8294a23e180644cba8a24c6d5c9e9a2ff143f187e04ec05802bd05c6754ff20c048bf69dc7bb6726afa7a41a09a0138bcf52710d28e8b058d5c2949414b5420d3b8c9fb018e5e9df152a4c003cebd7b84a5d47130d4c0b38ea69224cd6006dfdcaafdcd7ad9ac5550722f598bbe3b1716244095d3509e9772d7a2c154e236805e9683236af87a6765d20e1db6813ed40cba24f45ba98d0108a8cfee5fe150a67579b5a15be50d4ca528063aa62e410dd90b819e04b699fdc4939a62e7f10b2fe017811dad21f7764952650cb5a2842b96a3c7c5fbf60fb9a07c197040308170ceb68f24d0cf63709fedd2745c32bfa3c519c755e08400712a14042c603826d43dbc4ab73e375379f672c412095563d4623a1251fdd9567ec544f9a40be42eace0ac737f03332683adc72f1509767d7b49dc685a89889e7ed768956805de62114cabd78f836c19b4049ccd44d1629fe2256b63b5a68130da999ac6bd5f8808c223597f9162e37c49ab299b21503de624e93972eb0084c66c85d2879faf380ba9f69e6df75d7514c012a4ae2c0249f4371a5343c087aade556348f8fb470be2f98645c0b4e125ef2d5089d2526c1df80745c8ddbca22982c4995a6a91c8edf1a83bddc2bbd1d72efd7c2f5f64840e5d167b6a540109c0d588ba8def90e179b133a7b99677131c1cfa0e466e50ba772885738d59065c1cc79a315a13d5eaad9ed3ab242da1e0f2a0314551647bb602a5b0094498a8646540c0739956b86fab8947f52592e8b5422c878026e6ec9e0474c4d01e62ac6de9514249a0648e31e692c37c8fc1439e2f6444aeb943a6fe4318f55886e2d2b7527e104f55be2825eead1079b80d114ad10afa9dfd76a2d213758afea81b79b580719397467570b6571de5b5b1859a0125892071b2f70f45de3840c0a8c19d974103a59af05b1c2ce9f4d007e2d1a72b9a9f7994f661e97fb384e3f3d0c72078ed6b6388062f9ef36645106d8db26a3eb8f5ddda6ad9ab9223e51d0fa621e298614655a33688acc1a601bc33b901a60c408e6a472125cf173091ee25cf9e726b02112c0cc0501110a08a8f9d3f8c798f45e2f146b0768c702e85f0733a1096d45ac67589a73f0d31cf881951646779cca48cf398d100ce040330d8d8b7b188e051309448ac0c7ca24c227e27f2f14660e808e431231e9ebbe8acac40f64f80cc398ef1382562bfd2c077a1b8ad134eb999f9e9381fe683a00d549a529f5a6d7149b5704e555ceeb8f314763a264493a25900f88394639584fe74733376c400c77b1651c105fe58cf68be1909421d0c264b2c3b9e2a031d025ff4c6c65ffee99d444aca9e5869531393f3b0663eed38672e4799f073bd2271259ab36cbb7f5fb3481697cd0de2b1a0a68ef4225c5a2951356ef7ee8d750b05946fb1b8e230023aa7d5990ab23221e5d470b4998ca613c18ab6989a2c7edd7a32d9c84cae5c12fe401f37b01f0cc3d6431fb446f4f54054da84ddfdd08c7e66b5326da8894a050336caedb5414d1620c48ba3d64717a04b52680adb0cddadb996d6a1f2a58f6353595b4d1949b0a60c3696d6d6cace18d2e7a4caaef920ca821dbfba841e6ef3e5f320e7ce4fc4e246b0e44d06eeeff5b13e55ff367ccf148d72bf546dc1baefe994acbf17f961cfcf85f9957d97a9e845925a1a45cea4f3301bdc005d9c3cd3a85c0b457f60137cacd1b35de8020bfbb5bba65167d110d91945f6e112feb9a5eeda5df402ed98e6c9eca740e5de7c0dd6e80d1975c2df7516f054ddaa3f68017091fe0262eaf72f8d3ca25a8dadb75285ee06ccb5e12041bfdd3367ac558b0656036e0930886069da765be77c342010a3e62590e26a971a83a8b098840118dd337b59c699b5de6d6b6c96211f3074daa2aacccbf24ab11a6d0091c057641a84160056c06185e41ae43205edce89e95c1fab6765bfe4290f778045c0c48ed831ec33f8ace752311ced09e9b843d211b97cd4e2e3a99dd2a504444e828d28059e21759998d55f2a619cb8c78d5371df81665fde57adf70d5efb74eea363b2e3e0cc5f89046e570952b6d3c67f614fb75783df1a85e80e27cba0e198dc1f626015a4182fd9cef433e665eaae030b96b92eaa5223b6f16412a1d02b8f9ab3a3d14adbf3e1e60006db05002d1d3851e1613ffdb8c14947d7507dad3f809149890138bf4ce422507221023a20371c1e4524e3ff10c1e42147ef437f920368a93032ae278cb9001622057caa43ab20b4cf5033b66ce5c04adc0bf5075fcf385b0ae897ea88e833f6b6273efff6b2bbbbca387dc251f436665df684c63e7f180eb6dd24a65b4543a2b511629b2de46f49d6374ffc605ae3503974e914fddc76682b1fe46a2e653aff4cd7e3433b5bdc231eda65cfab247397a1e545e2ca99b55ca204d6fed6509ff1b1254daee4a44053c9518a94eea492fb1ddecf4b825d0bf2b4c91def9bb629ad29f2a3d71d01b001fe61d75762a9f1ec80a86b51430eb32a3e6a43c970fb61cb06a86c72e3c2875420f89985a5272c84d89bda56f1c7b3b69b9643a76ff958a60036fd0082b7706c2cc1fab702e88158917b2042ccdb13b4581b823ab44f55adae99045f9ba1b0a853335854ea1090d8e983f3c618006409be8dcbde57a6c749e1e691c57cb4e497c97e9aed01ca9e6e601ea126118c381229249a48ff3b16eac1303e282b8bc809ecfd0bae694a3a59c965c703468c8a25602ab28bf21f9ff75b16248168a9b40490a40287cc3f5bffccf1dc91933f94d34a28306c79bc20077b86ea8742c0b40a407b7ebaf298dcc425ada62c51a0f094920c8f7b585c5b409ff7d8ab7c4ba3246197ae376ade66e8d81a2160720c44af4bc7cc9a4c0937fb7305fdc8c065039831855c2af0f9e9c9b51a6fa3ffd7a1febe9c311ba96391434c6495905ba9f8dee12dc3dc122b175b40f0b92cf949645c2a88d3ba8ae4a83d1c86b4b20b55c80b78ee4872f7922ea7368c30c7778bd00ba4fede6ceeb4c9a1d658ec18763084caf593ac2d5783112470a3096353a4fdce25b3269e5d9cda5b1a671b17a16c1fa12214e4df171eb4c76edca670852eb40c5243201fc150ec4fa0a7ba279640bbbddb0cfbf1332061c47e3becadf5ea6b1064c3548f21b88f51d5752e61002e0e0c1dc9e1d47d02daf3ee88caf93df9226b7249d8fcb94c04d5dc9f25308ed1a6529d43b4aa075ace5c7ccea02238c1d4050dcc779acb98beac5f5f6866aef63e8af2a2a57abeca704cd56838116135bc53c471fcd61c6b107cc8bf64b780f63bb845163fa32294833dced0f802be4639737a6ada8c54cad9ba7ce75f8b387c8779106ac071a6561ddf109f14866188113009185650481465ab62db5e2bf12f6ff82e93f1ed482293792fdd39fe5ced86dd89c378b0923fe75c1a1075bffc077463abb414b678e5ac8b73f1a70f5799c2e0650cc98aa1d2b196d160d3ae01613cfc877d3b06c752b8f1e3e5088ccdfb3955fa22de0151f676ceb8f1b3cec871f4b8c622c486165eb6397ef01ef336484e3eca441cfe110fb9d83d83fad62e4dbec3b2ed7672491ef2593ac87b94d614d1111df08176e792b41328bc8306923f0bceef87fb3093b8598485f87349c8d0bbd49ce0946da76014ddb53e49b5bd3461fac34ed1c9762645886912d1ea54d1b9efada6ca7972698f1ec818e3558e5914cf338038c375ec4690be616b7439ef27bd8bc798c0733a53df0159788430505752f9fc7a92a7ba71a9d9e0aa52c59ff5c3d70c6f1a9b67c817d71d7b987b9d3b5af6e321ba99a5131357a8ca68a7179f2ad4bfbc7af1113f9cae74070fd42680c2c146e571242d631869a0f25e0c41ab0c24892b8688faea719740c900b2069a2c1b1c88fc8d16f1bc8fc9f4709a826b1fbe9823b452e61dec25b8f2e835bd52330ce88628640181c376653bb5eb831b1ed5b35d44b8bfbfd827273bbe8f68c58c67b0f8f2064b75094e26e0848b10f611b904467414d63dcd54ff9094ff458220114bd01211224d6cd6a3fe317d578dda8e0b47176ee4d8835337246706abe5496d01cf3c206a56fba52275255d2734bac3aa52b41053be83590600849268306e88d41dfa99e06b9557e135c8be2b4472c374096b0acd05d9ef2fc88ac79a5a1980510bb25c80060b88388a638b979daaccb6a24bc8562605704c7144ee5945348d8591e2640afe084b946f3fcec05bd5236d2bf4520bcbaa1b7391ce48d568e09a992268b2f2073b85d9a9bc04268d403d77e5a75b0c2efee00c8307bf34cd4ccd1277751c09b1f362cd000a3baea534bb9acb2adf6cb3db0df1a86724fa8c09a947c6310f0595c3206c04a2ec4320cfc5efb40167317f66f3febfbd01ea213d5200704a663f5396aeaaaa1e53cdc18f4aa37bf69feb8058e18231065c1bd0dfd58fbe68f413b366d18009d8bbee7b2d042910f7fb74cac9228a897c6254d6bb497b6a7ea3ae623d2483fa153913482ab53c81dc5d316c298dafd5a83c36ab07036703962412cb957b473447279f93a781c72a3b0fd1a4139305f808e1d0913614c599a89817fab8d5c3679f6c96e5fe5aca2294c0debd97d744ea74d6697d2ad783a5216e231feebe375b5484ec353ff6ed6c712d381d860a143fa032b0d1df4c8c37903c4fef6efd3ad1eb5780e57fa38ff5ef51ce3a1c54a0c85ae9477fa2e3c4e32f1ca2599da60ffe5fc5ce2b96633e708cbaafd663c6d807255b94af0905d9e0d53e64fce2eff0bec5fb26663e655ee6b86446a4e3816136530ad2eea24ccea90b140df483c64190f775cc732a77491955478024a3fa9e1e712e2e3466518966876386cdcda2a4072f623582fa73daea9a731acbb4007ac4d02fab13d535c605619a50dedcaf704e131106045eb536a312728e4e7f016d23effd6256ad314444ea3eece499ffeee7b835c985e9b4c1881aa7f07b83c1afd90a97d698d509f0dab3e05010c6ff9d78c2c31f833fa43b651938d1089eca5953b53ca46050d05e304107e06b3509685a60c8564169aeff21e5fd2352b2b8864543efec3c0ebe1f1f04eef040f88f7438e11c20cc22c34b36cc22cb4323ffb159c88177194871efb0cb381275a220c83cba79aeed13e08f921881cbf4b706a10f4641f7aab8271e0903f5e3672c48b46963df67a60d9636f43218c6ad9eb81f5069ccc0dfad96f6d137aec29ae36429f651f7299862addf132d53a853b09199d455c97e7d338192114caf0421f44a726f412099a3ccaee08247c643b2d203f94a00604271f98507b2f0cc3a6ad2a5807ccf41d06ce87fc90a4660739ba1139da6086447826a4e17839a4e365ba754a5e33d03509760fd47aa749117e084fe85cb84d9b5a1059983ba8de293b1999e584ebde7da71e4d4ca2b2039011f109c911e7478cf3f5c86e18d5d0246ae8c7bf2e18dc7b9c73ce7bbc87528c517c516c516c29ae14538a27c515c592e24831a437508a5f9eeef3ce25e17eb00323069063b2abaa0088dae4faaaeffe5e332c8ae5a07c97aa59d2241412940eca512e4c3dadae09d910dc9c891c7d4993e27b4f14eee629dfe9d2d645c8b1089efad1263724d700c9f1db47dfb4071c0c96d722d6f4689b0fe4f8a990b65d91e8bfe708248864527648182149b6ae9d7b101bc2ddba2648cd25d239399d24c7f85489eb3df9ed348bf84bcc2535b94929243da68ffb43044408e95a7fe2ee7cebee0c4d8a31141d5524c78f11f59240bd24a87724a21e8a44fa53ea944ae590f64e140a37f45b4cee5408f78ef7c4f71e5f523fbe33e16438f08333b94d075c493e18ee4184c039418e3740843e243fa64936e48764a80a85aa4f557d42d54af6d5670ff14af6f0436f6d8673c49a2dc09952421f5f014e26fb510b0aca6f178d83891fc2ef54e3a614ed65c0b1887f02255e511b099163e843a0c781433ef92dfbfab65e33d9bb4ca33cf7e5ec3f35af47cef0e743b89e3eda3b352952252e3c5599029c4cdb7043237bf8f4aaf1d0e17663a5c628638fbdfd69e3a6e942e08b6c6e84640a413fffe4f3efa4934e3a297f5b916de821863f7772a66da30cff8611be19843ff9c11f0e66fe278330c604cb207c25b932085b282b83b0f51e368370e5a91984a9119a417836cecc205c350161a90484e31007334118661bbf2106cf20dc2307331fe2ce0fd413c3170ea61fb35a0095b68958aab65db93f46528ccd92e3834dc256d42f1ddb76807707e7719d0147b06e7461f8fe853fd7811ce857de3e185efd0ad39f8dd91c2c16c8a1189ce99a5ce9e5dddbe04a2a9eb47d7614a09402c55b272397772f722692b3c00fe385d7227e8b964916fb2af01ce1fa1a7ef965ab02cf7fc1d59f60162b31e83d670fb387d9c3949494f713274ebcbbbdd349bcd40cf22543f6504227e36a640f531efe43c253e2f5584ec6be25e63f2627891dfcdc578445060b029d644ec77b3819e7365d3a6925d68e994f5eb6bcf6220c81c72d5b4f9c48f90c4477ee65b5601c2f4780473e9192921271cabdc6497ef2ce7dde16fc525252926495f7b729292b344d58dc5352b04b8694f7ebaa919292b2d341c0aefb79504a8a863db36027a1f41331b4a03871a2a9fca778d7a5141ad66270143af744c79170e204caef80d91fc727bb96fdbb645041f9474491f782244a867c507da48d7c340c7376d23aade3a687d336441e250a7271a6dfcca4bccc1edaccb246b28a86617677856bbda54beee674665891a5842372fcca3169c12ee710494ef323114bdca14f884adc14c3bcd1e9b44ecb4ffb2c96b7609759f0cb2fb8738a5c3709c971488e22702de2bbe0c6f97182fbc6c1f8689beed11377781c4c7cc724c8f1496e7a4b9a457c4978299b35eda59c709dcb0fd54b741be1ead125cbc6c9788edf3b3c30674e0614d8be0557ac772b9686e33591a3b3d47274c6b1c3297fdefa0fcef15ee26de41c8cbcaeb7fc9a51dfee70ca3a66ae6fe1cdba6194ebbbb778a5c6cdf56fae35478c356487b798b8c5b8c4566096288feabc38e57e39b9df39cf0ff3ada7fbb273eedd83418e0d3e68e4bf7e9024e26ef79a41dfcdaea2a434b89d44e334112db9f5e137109c4c0a7ee0603490d7022249e264a69b7c464df3939220e4eab2f15e461a6f6a252552ba3b29350b014f9bced4481c0bf84a2808da17dc1bfd9f5ddefab74612a449ad7512d77a8d9f9cc683b4036912f49383813974cc7c7f0365dfd937e81b6f19e7782fbfc23ade6ff2a38c517e947f23f2c88736b04793e0f6f98adc7673bcf742e791d66f294eb4a86db373783a27c31938197f38a773588a8c7d1ac909ee549360e825be305dd9c7a04d8e673fcb3ec309b8ef3319dedfc8b420d026eb20dea8d8a816c2840bd25a08486b94091e0c2fe2b580df36f0f0b8e59ad0a7929f33e9901d24dfc0cabec66e7c5ec7bbd1ef7fb110d7bfcb518e39ea33e4a339115badc61bf60fe3c0e477bf94f27bc7f3eca7d7af5f9f4e7eb239d1541eeecad697e69a4523f146e24f82ee882335380e092218a918b88eda1c952124e2649cc9799c05fc9e1f196adb099c47eee62847f91027d2ae9dd64978602fd13b16c39234093e4824c36fdc10da381878c35fc73b398fc3f79a47e38393a91e7ea56d8f764e1be91d3a4d825f2f70b72692e1066d727aeb2064d849a08f1f8958a08d95937437f99188a55b4877902ef5c37e4832fc2652c4fe50d2483a89838149340b200f46ffc0b580df040702c1c1c0df3a0519be9d45dcf8b0fddf6f10e3f86499e365a3ffbdeff743be96fdfaf54d9360932e3dc7d88ab9bbbb3bbfeb9d9a349b042f1862eed66cf47bbb7497b192b272199fe75067e1072b4f9a24ff3649de26c9b72e82fe852eb923d73fce8f18fec430c487f1e1430dbe6b068f1ca163c7c2b5e00490e5535c0d71e15b7f17bac37733102ec9306e31d969314d82d839eff9a6cb93238c38e54d2462f9391d864d9a0ff14a754f5698f3b39cdabb7356324915aaf79307d7dfdd88afa3880bdf4d2b1fdeaab6bd2ce5572e3fbf227c2f0a45b2cb4d8e6467b5edc96ba67bfef7db88e55b37ca11cfc6b54248b3734e260774300db1c3cd693ceaf312c4176f9770c0bfd021544105bafb798def7e0f8543c4edb70fbe4022f54110f5e0eae0712000677a78d1f0bced80041368a96008049ccea473935b647704123a39042d4a7d748f0b8af142974ede7d0c5d6a79f708e8128a773fc32ba04b29de3d0d5d4397f07bcfa83da09dbca7c77b4659fbe81f5d920da483b4908f37691275c27dae6b40bf3d222fa7b422c5fb111ab1e08c894a4ba5fee1b8cb07c9111141897e7b47547e7b3b58e1577eeb9ad9a347d94b9b503e3ea4e992843dba44a10f78037fb81cfa1acbe6e4860527c83b8542a14fd1b0619fe028fb97877fd225152ca51f758962f5f3f6bed0f210c58a874f430d6d4271790843ef2e1960084298e27422b9a47814ec3dce62054ef128f08a6fc1284edeb2fe6290fd8a3f8f615f61cac292e1978947ef783e0af625cda2a62614f3e32e691f5f08946741f919dcf44e489ca7fa17ccf218a65f31f61f5cdfe2cf5f6c1f04fa894327f8fa167cf2233c1f056ef91518c5a3604f9ddcf45745ee1d1f025d3ec32c8ff18f70f629f0ff0a9ce25fb0a77ca759fcbb0902cd02fe8b065f8576821f72c10f68127c0de31a52a0c033b49ce0185ec0319a041f845d78e1023e8649148f9e05ce1b5ba772fffcfafdcd43bfedf7b7119c8c94d3523aedac91cfa64937b8fd564297dd34d4b0e2df2bac80f8123a181bdc18ddef4aa80aec7bf7dcfbb484c992d9849432cab9848b43975c3f4e3f20b6ea978d9a4ac8fba48b317643946c5255e40d71140a627885234bed0c6c2d247b0791bd4b905d7afb60b2a1699c4cbf37c98e83dbe02b9cc8238e11d4d35038d9ad23c0add58c5bf2bdaa5fbd7d45b619f2f6fe0df957a48232ca1b31596a37faeb90b78ddf6d14ed86981a282bf8c10a72777f7dbb4518311e994796f80db9511dc53a5e865fe4ca8f9688ae6025a30e0d157948932074ce6d3c328cc1e1f98a7f77cf88ecfdb4b7a4495ea4df5f8fb3f089e4c697f31579457a9ce659fdf37f45ac5b33dc109387f43beb6a8283f11e07e39f03ce22177e3f234ee619e14c9d01c7c24d6f890b2e04200030302a54b4e4eda15e4f6c1a07d353831bb5bbd2ef901082ce4a6b33cbf0f9ee19e2ce4921037f19a18cb085b06e34823bd8fb2005ac1b8da0046a08aa07aa0d10d54705410541f5513f00032042700344087cd41f621083fa43fd2106b503d587daa376a076a072405eaf2f5be7eed657943e56ad8f57595f5677c7fc4268f9fb58abd28fb52aadd4527921b4fc6d6f35bd14fbd86b59b57e30ac524a29a594524a29adb5bead94524a29a594d24b6975b964a095528a83fe56df62f8edff45a36a970cf4312bfec3efbd57df7bdb4bc2cea790574a7fb5070bab9875514aa9b5d8c7a294d2cb5accfa589fcfe7adcf452da5d4d6ff58cfa3438f1ea177ae78e679b5ea7319506b2f8c525a7ba017a5d462f653eb5bf553eb7f5a68c17ad873952ea57c4b4ae9ee567efd4d4a6d477db50671942dbd27835a6bad96ad6f5500000000f2bafd58967777b7e5c29a587e75cba784edb2bb7b74ffb83f86f9b3a6b6594fb15a5fbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbb4b29a594524a29a59452cafab1f273699b639771ece7f3b13e33c9dd791286fd07b3f5a5eabf5a9f0caa556bad56c56aad56b5ea5b37acf5b19ffaa9f5f3b12a76d5b7d4a256a5affab753bd0a697d77a556a56f515b2db5d40584d31d6e24a81ba835a29fb7c6ce2b72d81cb0f502b759ecb7fdb64c5cf9b0ecf88ec9ad6fa594b6d6ca4ef82ebf4ab9b59049afdf3efb482cc438998b465beb596b351610a0c1a652b8ef46321e01babb47e8103e8410be430821840eba0f4e06bebbbbf7c6a389dcfdaf1d8e40671d0e6ff0fd8afbf8f01baf38ad46be11b5151aaeb51d382aa7add0781efede128cf4649783ec8e302224db37c4dd224e7e4a1e4eadb0090d4d0f2de234a9bfdaf8e05af948b672959fe6405630a44dd106a2224ec78e4adc1481449c9a039160dd88367137cb1a35c9ba1696e4fa1b8f3c31b0935dae3cd024c9f5a791ecb2cb4332fdf93a3cf8c8f5e7c682b566b5ae3927c5f6ad597f62fb16ad3393623af3d6957d1d3043ec8210831ab5dec2f2ba6cd0af9ad5a4ea58cc55956307ccb2fef55ef597e62e1b93d6b7aac3af7f615675cdd46abd7d4b71fcab8e32c5ee2fcbc2dbb431bf566c3509579574cf3516ae476170a77b166d72b798ccdddda58b2ca544c9f2ca523e9c96b6ddf082f4a670254cf98b07f61206f9967ceb2deddf35c3af8fe1119fb02fa37d68ad5bcdd18f9927ce435af63293d95b5926332bb364666599c4940a377b3f917558d9bf0c7a6741896bbd95e115f9d6670fc22b52cb31737f66c7cc9f07bdab012e431cb3c52c348bfe8949335321d3b7342a4d4332c3c4de75f5d58faa1753a3daf6c9db8bfc462ee4be3ab10e4d72fed6a8b2fce155bf8230a8c4687bd550c974baadacaaa38b91ca21eef622bf78c1dd1c931799091393d797790607d3a8bb3d0b6d7232aaafafbd0bb1ccb3dbf2cab1e042ed8e9c8ccb160647850f4abe5e5d332e87b89b63d26ecaa1029a0e76020ec6bb1696becabd432e9d1b612227b3bd4b66885d8040aeefb80e71bdfa8a6f10e5f9a2433a9c3c18d8056868d275486efdfe69d5eb9aa956b520abbae07ac451cb8105570797a70bd47a170da879696adba3f86587c06b017d3ef67662b50577e6008107a37af94ee3d181f460549a6c8da4439364ae5a0e0e460893ccb2646cfa2f37adea65c9cac26b861b42aededa8f55e9cc33c7cb9b63e25ec4f0fab1a66358a53f75005d33385e13b9bec8c9546de391450ee64d37d9ef9a02c8b0643827d3325cae43b8ec001e3dee851bf0e09a90617d8c762784adb4199c45bf3b1144cda279cd704af0103d6107d1122223a4ac28b102851527ac80c272ec44d06bc60e79fe5716c8f31d8a6b46d5566a7cfd0a0a3ae459b5d4ea954b0bdb1a90e95b17613f8750626ce31144a62f83f81cba1437d76a8d945c35a8cd8743fdc506d6b575fd0ee0b2e5ee5c707bca6d659c34a2a48894aba73eb84afc9a51654867bc81548b384e648b383ea449fd68051d275e1c5115711c6a50735494bf790cd22ac88ed3a5eafb23902e410a35d8a4ea54e1d89a824bad1b6d558ab7d263aa6f62dc883ea65c49e5b7fedf64765876597627b27b4e46d31ee37fecf22af8fd7ecd1127df05576d05b9c23d95985279175c358d6688155e032f43c226fd6b5fdf397e127e8ec5fb15f8c1ca92d31d71465e6097e3c221a12ee87bb5d6b845e9055350094c02911cd1813bef311d2339d725efbd57478dd4b6ab6dcf1ff4553eaf96755d303c215e7e05ae79192fd8932f2ae14a2e8fe312b408851c9950917f9b24b5189bfc5eabd8259ef2fbc7ce91dc4bf4f182a55479f73d4cdb62b28ae61c8c3f4845dba4f5feb29e84d73523efc37cff2fc8b9ccecf2ceb988b28b769b74b598774d6b8577471401c4fe36b7980c619593a1f76488bd27866397e54993ac77e93b6fd56e6e6ff094735c053f4792ff183ad27b173cab864f1ce9fd0b16bde7e08cec7ce3a67ba2a9e961e30305e221a224a682bc87e2df3593e2633c18fff06518c0955c5eaccbdb979c9c186effa5cb7fdec9a3ff6c3fcf63aa6f6e62eae63d5490279d074782b007783a010a881f2006ba8de04cf01493d0840c6f989035b287f4f1a24b57dbfeefc387340f4ff0748a2f42273ddef3ffffffdee3e24e7817977f4d3b894bf42c89a9c79e84a75c5cfe5fc4b83841512195dec94d24ad128956dcfba2b922af05fc4dc557392a542851f15b8544858a2f92e1c833ecaf69123812fc2ac74d7d0257157930fa46064a5c8024432174321c818381bf554564081f028128780187b38120d0038d1241563124c81dbd8aeb1fe5c4e94453635d62cac597788f8f2e69376e7a7129db25e9a26d33bf604fa259c057819dc79708c5543937404660dc7179985db4cd02f93f46bb9226359026f50d9e51e5d77c6705f0f4558ea556dfb8a9cab9792da6aa1ccb563928be056f2fb7d48f2949236b7a9c84329677d74c85344daab15cb6c07f4f630afe9c370785064f3195738a49e089a9b81379402090cb37c7b3622aa64ea79b98ca897171efbd29ad6778b0ae85db625e33ee3dafb1ae857bdff31eac1b4118a3bbcb0865e8bb0d3434a9abaaaa4af07dc4160617ba8b46e768a35e34a00d1a946fdd4e6e1a9e061f8db3954e9366113795b8a8542d3795410b158d00000000f314000030100a878362b17024881276d70e14800c85a24a6a589a08941c07420c0619630c0204100000000000404646b026009f550008dabc5f3fddcc4065293da26296c27170b40b97202c7eb14b37064e50a76fbfde123c68ccb83b4ee27922752a5b5adf85d3c73618dd31f4e0b255de9d901db9368d76baf89fda553430030ada31ffeaabe46b82cdb801146b45e1b594b05bae63e111d2681aa8fa0c255a36ecb20b595b8f2874743fe92b78efefba353c27b4e771218b1f2c64d53a53552ec896c6cf625c4fca762a870a47408f4b5394bec3b2e20b1f7349dd027864905720e32b8a418b8b3ef52a788ddb846c93788181c4de3ea81bcc89a0c31ea030f7b68def8748140897cf91b7b66d47443435fc8e78e963bf116e30f9665a4bcd434af31a672c9061b5f4528389d64faa648f5916d3130e336b5bd6dbeb285560d53a8f5e276a9e5597e44efe926fcadb9ad3206c2f45b242071b2460434d2266f084c59248d25785365a4893faba2044c2860e12cf8d710bdebf8b97045f2c3ac2083242d4cdd462f2ee83f701a77c2b37935a4b74832eb6826d91f06f18a52d18af278c652dda03d80d8a6fbab34e59f1a06da422d649762f6d28638b7a4497190b7c11018a2fd161e96175ad001aa91c6db478e9c78f9f83da1bcc704b6f8d62f18dd14476a9601e3e12a2e6ad10adacf6ac808fbf9e5c12123e60013a2877144769ee314736e9f0c708988c380abd0c23d3d621bcfd5e5d6f035ac8c8d7be35838bf06a116633b29ad25a852dee80ec316b66f4d73f43803595a7c9ddf53938305a2919d99cc6e95b5253ac7a4d2fa54b385b88c0df5fdf97e387cd78866a3fc4480884264c9b6b058a5305877d0734dc8ac0c1ca2d0241a645dc4561f682d3e4119191f32b8e13534875dc3a69bbbbf55842c5d3174a603ca8b1681a7c3b549cdec61972a829fd913c452bce88f465fce1e864160398d7306346ce81af8977a404841699cda2cd9f5fae353de97596b175064e02f5f6247d22b071ea09cb77f2e5fba61db39f4b883fd4ec3df80e7acc4609a96a2c28cb65562028650095d4680ca2557664b21ff34b264883fea5a1da3c8fcf18a0676320bbc214c0b78612e54a6005792d38cf3b10822d0c613a58b18bebfca67297f4ea8bb4c92b9a5b8f0a66b23e408e1ecd3a57e7e2652338a4b01516999632539caaa8e88a626809ed6bf0a8e610bfb360c2b8a49b0f30b68d539b8c17a07a0de583e7f386aa5dd8e3197aeba9a501e39a4370afd4ad0a27e118b358e2e948309c190b4c47c57c05c37d4eebdcf32f0a88165e3b03ec5f991b6c1a03f8a1755b553b94e19be55b534b31670504651af1e5d9e44626947e3fa451ba51bab0411a45797302ca8e9184401e568d5252cd8b428924f92164475f05cff0b98cf062f5528512fcc4b378c18c02792408f86d8ea9653c9e0b187b091fa1361d05e3ff6e24c95950927d5e5f9ea05928a3914d2820cdee52e080d46839574859138686749d4df32ead6d4fd355cda86f6abbdfe3d4c6151f5661d620fb53da78598c1d5f0e2fd9eaa170b4f5bd4142540493a4545f69e340735081752725175719b2a5d1cd5586d4a225dc6e5ff269431552fce9890681e3b0b1d9efccd0fa5ab002f0122213359a1fc795fda21e07e41efbc1bc877dcb13d7aed044fe90e273b6fb6e7f18a66b68065017ef9bff0fb3cd76af8f163de14c542b8e2428b6b7f14ecf529a16be2bb50838d4708ee84377da1e7542e25b3a28faac33182be156177d7a0f53e96d51ae3901b01de0ce64cd7b3edebc9560816bd707c3d98f69a40f48c2cb21704546b86fadf6ebefe0eeb39ce47747e48a2701438ab569a7f45a611c3e610c20c126e59ac4736e20dee62f4f846b0f8e0189827d63e55f3532533258fac12b4c6e99e6d66c612dd0dd4ead8e26f796ca24305d457a5dd5a97cfef931a9c072c8565159808ed3046f05d3efaeb0131f216229ab9f0d8b233da3f71f865ef4755e6ac31a4d7c9257fc2a8957bb6bed0081b0157e2793541f941d622f347394feeb421d6baf746f1a5ae6946a85173042823367996cb8899cec73612d90445318f69b9365eff6d1bcc1a510f1e26c28bf7b1ef51616e0a2ce724ecb6ff127f38ba54208576a40167418bbb2203991b07c243a27a02a7155a6925fbc908a88771e4a799a9296d25d760783e8d7cf3408a1b3a9eab24262c32fcd2134e7606a9c297df0ef3a3687d6bf31cb11504e089de3ab857a81fdf09511feb5edeed206c6969adf3506f6b914e2a89b8f31652245db9c14f0d71f9442ca4555431beffef4ad12dc92d8eef595ca537d9b7ee0972c7148b814f5a4ef84fd7df1102290532f7f4a9dbc401170770a48ad6245e73266d5051cee1ce8a2f85f4e4b7ff3e0700ac6ed880e111e3ac970d49b0bd63a608e90be0f79bea74f08bfa1eb1e135ab23bce16aff70818b480ebe5317f4b6c6e3688a38309862d05eb462b2d41f7eca99e112726791c866444ac06310cb6a5ec48f3062baaf389ae77cfd747bb44b9626c67198e421635808ffc3a6526663339dd9d0e50120c0f84fe8453936151ba02f43a2b894ed8074e6efe76961cf64d93cb6dd207ba51b922e60a92a0f0965092d73948b4a749f47de9410f87b8e5c7e93aaf6e60d15cff000a8f66ce4ab253a3d910deb5867b36c97fa1b46a93317b8a6444261514a318889d988adab307b3778dcbfa1978b690d4bb27280c32ed243bbb9b66ec467600dad30470e95471d0fad09c75bb0fd112457bbf55533128da9bb5aefced786fb7c93db36f246f457bd9d5aec93a29525a55ef0cd39a231d71b0a1b932b0ed676c9121fa609bf0273287d1ae3b444422d42b1e57dd0510b460af5f4be9791dd463109df44219ac35b2dd0e09c90bbbffbed089c7886e13e8245c0c816c784602897747ea3a801a2e5cf2410184fee5104cd355c09c2899382455085817741b6608f2e2591e5640f61b336c75ce7eac0b6b9cb07de8ad360af3cbc437dc29304609d49c4e984dcf2885b6aac8e93eee4d4d3a6a453dc9299796729e4a1d66ce7f5b34842a00cb4676c4da064cd40c036e23b35c1b10640b9672da0d488426d71327f9c9da782c79b0e8347c4033e2716f9fd6cc2020ef971e22094ba36e791885dca29224f1f76edd27cb398513bb1cb0d66f528f5802df489fdfce828e3da0889857bb225ca051f81f768dfc7918e4607f5e0f4d1365fbe511612112dfc8362d8e2c15f5deba4968eb54b61e074b6bda9a5bb1a6630917ee83d54cc986359ab43fc901a3693155e4efff70b830c0bea171f9a06d69fb9bc24993225dd44f6cf089a6b3e48001feaaaa367c66f1d4056a8673110eae2c856a831edde7c830b994193cbda1e2d799077af74e917c39de3d22f61d9f9269bd20cfe0ad5004a354c6799035374ed95150b0868b99b0601280f468bd0e8947ee15bf920230347934950094bb2ff889bea604a0a31eca952ddeb5497b196a73555338e650ef2d2265ede5829f787637b91cc6b74fa5f99cce54481a76b1028f34bf48a03fdad9ba7e240a4011afe5302f476ad6e3edfca5baf975ab71fe084a6496abd9b60ab49484f15136225b31d82d725db8c0d5f8db0e4cfac89a266449c8db77008e6a3b669afa8f1bd88d1369888732ec45d44a5793e700def14f602ce08115f03413fb41051c1099c429e09650c0bf523197814a1c538aaa901c4ac0793865243913f66b18be825f5f47cb5147ea7649f389a0e49838e98c8e6b018154b0f7d9dbeaa64c35085c87ad7f264f2407d955ff8dbb9f8926809ea8dceba78ae65e66426fe2c225f649d3a0dfaa14541e4935809180c93be3a28308f8702b0a1ffbdfea326fe6c7cac267552f8a533bf3f38119cdfe8e63fc51d3f52d00bb81d9f05edfedc704910c95150f54cb0f2addb6fc88a97a1f1d67906068d9206ac40864fab918a5862a804693d57dac05a9cc794331e18a4ab96acbcf9afac1793ac2e5a7ba43fe07d551d2dfb0a9c0562936df2efc4cd3c2047022339a9b791f2ac67f0984618beeb1e2e6221c25b87d4e134ec84748a62f31415e0a70f91105926b50c3c442cd872113f842a7d95db1141e847a445336726584b3c870a037edfbef66f9b1b2553c6f3dddb56302095e8ecb8fa831b1f852798b4722b8b76f4bae0367753da6c5c661f4f4f6724caff21048f11bca62e8b316456382f0b33a453fe3f2b3c0d2a39d014449a0bf8aa7c9e3910d36b5b3a4df619935879217e6a788995a546936b523cc0f1beee846c929a737604b019595e84027539fa957ce6ea083ff53e2b545a49f0459e0662724fd209688716d98de2db2dd559455ab9a9823c4bc2a161100954606a62bc35b040c82ad52682ff2c96316832b0078a10f59deb10c4378fff374d41aa017ac953b7531f5d936eafc18e74d5d09f4d8db4e5533d09d4d05f49c0da9cee13635286c17b1cc996f2f08b1f1070b046b84419c783a2129a589e64aea21892c065292bec0cc80c6b5bfaa3d016ac0981383bcafe30079e06417375c7626695f2bff50f3d00f93454a8f35ce3723c6cf77ca6202237dea7cc159a79882d2251fb90e8a7a2bc05db2fdb6c6698215168b3c79d2c905a4e6ce5355c607666e7a58b60e1b872b250a0786bf5b0229ed9a48488ff3243dff1435405fb4919f5de58ee28727741f48534a4a8aad5f667c00691ab4e88d797b39cf0a9832d2cc87da970334d84747d54833f7c10f35b4967afb242771e4a7f14b0ec3f47877409d1e0857d5f21c346f9eed80ae9a5a4b93c21db65d17c556729955e3189293b16fdb8962f39a7a76b0be274d34d268fcd1829fdb91f94704fd44e15018736899a7e9b177ba807b4d56fe289df048a85b1321b12f81a29892dec63c0ee0bc12b86bf2bdfe9ff0fde8d6ccaa3bc349abdf24973e0b99e4d43f6d5393e198e0e79a0a8e3dbfeb72eb6c2d3c7687650846595aadb511b969121f402a431bd03a8356b735e893909aca407efd4f7aa699425b6b2d2e7c4ac15264141325a870f016580b524f4bae11e78e677589d0f2f23a1c2cf2fcb8099426e9bcee2690b9ba26ce3765c670a8ab4912213977243cf82968df8e1339ca5dbf7eb94de9a1c087b99dc9782e729d8d063244ac6888d4b31e9f99bbc298f18d9d2eb26199251a887997aa438b9c8414f3bb53e13ad2a37bca989be5d82a88cf01254ded54d37c4f8315b6aca2064e47d150c077f6c422ee4befe4ac6f9a0c956dc4af9d6c7ca489f4c9940e14adce5a6808fc32b4faab068cb0b642113e9fd437af1aa696533cea15b415a7be8a170ebb8773c7d09d85e9c49129c1d89c9ce8e24084e452449adcf684a2f2349dfb380af0f38dca9d93a5cf73f1d839cd57f258e0c3ef713051e7a99710f344e378e36649af01703fb6a90fc2405070195e66a706596e0592d8f9ceae6451e86f6fef17f97fc7db1f35164052b0649a3d77385594e8b1580395770bd5486264ddc58b87db0f330f939a77b531eda5c8eb1659cbc4353865b8e3ffc7d1ba7845ade3e69e7c8e2123c533d173f2c7f9309e7256e2bb176f9d604d75c8cba2c5fa0c80a0862b160158b5a0597caf24db6250d7dc67abb527a6d22d2a6e7d71a4348df13e14733314f42df707675deb697b822d572a494518f178aaa3df94b9ebfd6149a08d31f4d1331450a544b081baf20669121355dae1822bd55e9b0c4a36642fd6a409d72685ce79195b363108a49f49c0c402f38bc4f9d4974fcda32652c5b3379f411a2216a05b1a0df648af6b4c12e7d944bbb532758ac6f6f773c6034efa64989e1367a211b1467d94266cf2151f60b72490a2648d7c10e129e9ac38af125218bf37fb934adc7d8ec84defd71d157bcdd78b984f14b2a931eb1800915ff24d3564cf7f33aaab4e0ad1d38302e4238a90571e01d7e2169f4d754c4d4a5338026de3665b1896c6f742da079984e3840e5c77f2a034c9ea2992899275e49285c894c8cb19e686828680c0a1354e5d6e9d1448fba33d4fcf6c54a27b60c28ac320a5e88f5892b0e23c936aea7d4978d40d208960d1eb333b07d927e16910c496b1ea4b4f612bc0de2f674459348a71c3fe065afbe27cc4b2586aad2b07e05c4b8a7b00a7892dbe66bf600a94112f8978e02cf65f4620551535b2f57c828071f99257c54bdda61cf08667b21dc5446a9ef71eceff6d293a8ae7be7520da5af3aea4ebafb3a93ea1807a2c64c76662adc760d3da754870178a0aa0444a84878a957a7a9a07005f500725b6cb1fb0d91844dc23857f2d982e45c8521774434ffe263bcbb235e081db259aedff38ea9b59c0396f6d47e5fc89f0860e18a634f8876e86a03d7f72b6357d946e9776d9c7062617a56231064b44584f96466336f5cba036de3b980e44dbb5ddcd76525bff53db30ad396092763902658a2c9b565b54ac40dded97b3624e05b0da506bb5598561dc5407ca00ab84dcf4586875bcdd02715ca1be6922b9716e1dd471c2982b77b8be62bec1eddad08bd284fc1f04f69edebdee065fc62cd96b1b6e7ca6377a8fc8073976b99e0f22ce8f43af04ddd8ef5e8bccf92bec2ef4c2870fbd84a3bc7ac93838565490ffb614f75d715c5291a7c628177a2392ac12f4c513a497418abe467ad71dbd7b73dd2b315fb3d9cb9a7b59f9cd2d3439f6c635634c8bb181267b314acd1f4b488dfa5973c573b68356ca357f002e3d3e558f89d400ee1ee771ff91b7a1cb7dba67fae38d067db7b09e321ed10c68bee73c963ef232747d9ff64ccf722c1c8e82ec38f03c8e89fc9d6ab263c2f3870d51f14e05677de3a518e27b314cfb89b830b8f4d318d3133964e4eb0fc7cc90788da1462f8fa974222e06977e1a63ba448e9a7c24992e5ee9a138f1f6c79ce890f5ba8e7a61dccaa7f2d16a9ed4806859c2b85068f96932005a67821af45997002ef0ac3f410e75d699a10e38eb52c08536eb4f9003cd3a53a8a3ccba04700066fd09e4e8b2ce0435505997001c34597f821c40d699e330601ff23c6fd8b45ffb06e74843d0fdc07f30991914ee1c7e3e738fa1c68eed0bceb30ca1fba5ef700e3324dc0ffb7d4af6820d9d8b2f48ba9478cef5eb889a33d6442f54cec2b95d752c5ce52b6a4940af12567a2014cf5bbec283ab4ecfbd09b54a99c256d589a9536b8710ce9ec2ea56c187f41c042f84812b6c23dd4f47fa0c6a9f6d8962999c7b36958e6b43091e934a954b31278a5b4b65f5a421ecc916c934fff5ca687d1914b767d63de38fa37d1b98e42322fd25806e95e4c392d7e496f1412655279f69d015ab8628e2656dd709c201de4781f5fe4e55a01eb9c695b86c65ea423ed51a69c496725a408ddf9100fe73a25b051855496ca37e4bb5b851c545049777ae602bd5ca5baa9ecf53c2ab7b2fc3b5b7fa30f9e1c6fd673b90474a6a9e36b14863e2b16e95a1502fad7c9b3bb6c5cd33664afde0845013a775abd4fa4451cb022567355dc19684ce0ab4c255ea208266e8fdf85407476ece870b4958ae7a14158f0c88ec21a3715bebfad6a60d4ce201cd4a8f22bd225d21cd241ef3d36e550df1b4b9fad1ac38d2e217c19a92d85ae8da9e904add7583bb2368eb04168bade6edf61e57ef0feb46c4051484e85b43b815d5287fb195b707f8626a63a7c41f1d8d617f89eb2ec4d78f7d1883a3463b5d595001496267c4d0c7d18a6fd7f71501b3f68893427ca4949b4f16b723058d0ebb8deb8bfd7c435eed99878de8b2d8ea26db2ee905d60734fc720611d6b635ddf0b8dcca12bbd5688ffd5a4bdf6a31e60c5cef755238f900cf28ae4cc1e36efa60deca553e018cc2afd40aead5ca951badf7bfba8652b4a83cc3ba28dee5fee50472534916d0011d17baad18ed6a734968ca4bf1bc78f002cc7530c6a25dc1fe99c9ff0fb8d6ecfe7c271b81f7011ef16a7fdc6c56183baff2176098857b863dc47afd7876829cdb2b0ce72bc03a1a24800f59690d0fa4af307a5239558ca8c8ab2ddb188806a663f9ab59e45fb5c9ee73990fb0e0e9cdd658fb3fc9ff45db8c7b77c62cb04275789360069b3823aa2626562a78bd6099a869cb403c12bfca44c9cea6ab1ae2a9edc922b8a453c176ae2ac5866a433ddd9db120a2cb75160ebdd8704846c326433e396f6fe4ea85a3b060d6b75ec2d3ae7ec488218513c272739f09ebb4fa29e07624ec4c586181485811b9751aa68c24fddf9910e0fb4c67fd93c262cb38c5c45cd5bb278fe1c6253e6b331f09bd606628a8616d1d4f2cba645852117a63f97113f67f2d5deaa0a075297308ed5d831f5648a356acc7ac32c4402b9640869782c5183ea659e57876993c725db95ab1fc73523fa2762cc4fee2d68e1317fa399e4a9b0546ad58d6d3054b3f437d6ba3a0692875c97c469b55ea4eebe6ca94658c311d7a1396797fb94c5be6a6abf9fc309b27a790901d7f05fff23bfa353116509410f5e21a67de0c3060d100537ed7a24747b06c219918efe1b28ad75bdef4640ac15a7d579b6fd846e4a3d88a640445c4c7fb19ab15ab053dd51047d355e6b7d7932acc788c6ef57fa6b76086f51997d1d19ad0cf2ac7c6c9162cec92107769f2745139aea147adc583e2302ce9ae983be2c572d48a92eb402bebc9cff267e5af5df33f46a2db4c32b9a4761f52cced2170a91af289106392e6f888b29e5a9c92eed18a5d162743416fbf3d25eb137603d6447cdc5179ec7c84ee1baad8d3a10d4a8839154c88dbbb345897f47740d6bdf6e9aab62bcd4ea4071797c901fe15c83a42973cb8357b34264e050c93aaeffc39e9a0194ef61a601a3cbb079c639b8e6ceda1d7c592a32fc375407671c891781df13e52b212f7442d229047dcc79f71b2413973613e013485b653484d0f6d32ba98be6b2d291a77727a4fe1fc392c29a2b90eeb173c2719c4faa5036999a1c0191503d7aec104d646f9b509545fce81fb903d661b8f1ec3a796fe2cf0a4adecdcfa3bd89c468ecb0e6557fa500269e2f94efcc22db2ee535f8e6d2a379ea5f326024bfd79a776ac0d2d6dfbeafeb1639e5321655a90ba563eeebcf67e09fd24b04a8b5089c76f805c94762a2abe1062f1079f5b050bba97c2db2f18ad9ab1d7d0141bc444ea796537f9d2e3d8adbc9c4065f76c30272c93489e4efe9c19fc8e4c7898b657c1232e8d8eae4cb89a801c07a8b634401ccc7691025cd682f3dc048232fc9458a21cbdaf00703205893b0043af8108b12dea66cbd1d6b55e7efd56f0ced774210b3c07e472684df6f03c09f6982fd72892beae135e2c2c443b2e2950aeeb75a368524d628dda959f15bc11b3b84b41c42835ecd50407cbdb6767f7f4bc6e0984705f9381404391688400ad174f4f9f8dc29a9f03b3110a39c2a3e5f0957fbd94edbf35008f455c55e0bc20fea45af14c4860b7dc87f86154ffe304e2a5b0d41da1534a857fa00d2fe2910e24784aa81080efceedc785fc83c523fc832bbc0b4360fde9e3801aa6157dbdc43e9c769a66ac7cccd80186b8ce2b30996d67b0ce3c562ee701b28e8d11a0f87ae9e37052edda483205cd3723823ace14bb96e145335162a75022e2ea5cdc69ae105ebc2b6ea407fd0b17c6bc8648e88634cce00ba8389f5531324e413580c25afe655cabe02a88eda4b0e666aa0d6ef6fc1bed1caa0d13061128df5b0fc236c4dea5804fc6117aa1936ac2c6041f3c801b2aaac398ab3b8167e01ae2834a9430d334fa2970f481068fb66144292191d215f46a05aad67d46c0615eae3a07637b3b08b9c02ec011e471198470ca0fb9bbf3011d143dbfda7552d5821d03071efc527d9a6a3acbdfae30b8c5a8832485fd1907734cf97204195726ce7016d2a393ea9f5ed408b59cd2822f21762335be3f33f9f10abe7e54cabba022d21fe0a6e205d85a9b77dc008103274e23e824f0fadb56673a2e93aa4eef05f9fd5e815c6596dbb58176d7df7cf96892a5ab2ac6bdba7bc9250734b21a228d8608c6b8aa2689459b6094a68c5ebb36a77ea0e0148d6b1274c1ff372a17a79e40b2857ba84f0bd65dea6f2f339abb88accfec8b703ddbfa9d6481166c830fc361686391aa29870e5b6613aa251a63c99c875408799866afec8e36f640f82ce1246a73408b3ab653770be18d13bd36b696acf0acb9f433677e883845629963b39cd6c5319909fe00cf3f1a59dd8d6941a57c9232cfe936c497237ca3c231d99ac02b596a064fcbe2c6b6b8ec9fbad4c194db4e2cad3a125a01302ac9d93590800e5dfbe6ca1c4a426c99b3c8771f8c4cd61159edd5b32b6814312592097d91b163104424f978a7d53b2b52406f6e6881360561ff2620f41da979427ca98481d5686244057bee9ea46647caf0c7e7f576d49d511340535dc007c95cacb8560b4d8f4ae98c76bf419d259e79b067a690d338e729059cf82a9e0933c9979ee04a481648bcc793dff4d64c3f0ef54148211c4d10a35bed7bd2447ab06d23e46434d7218ae056e682f50ab1359ea8c4b097206197bb7a1b17a63958c02f0f91a7224e92ac7008a49d88ad59f101f84022b2107c7a424f0292aebd1a5e58c9eb0804b9778659faca4482515f33b24150ca2f0dee81a914a6bdf89a3f826d5a427349aac0f22aa8ca3202f37e39e05e01d33c4877be2925e818a0cdd140c8e44a795f37bbd3d67db682b3f664af8fe1215dec448fc62b54ea440777e478324d8e3ce9eba97c8de206f8faa756283182d122930702fcf12bd613d5c265dd276d5ca60858f280a81a905e616bd47238706cc9cdece7c22322239768cb056bc454184d5362bea86ec477558444b606387b03683e0c5a48b3e931b84ab08a3b4a465a32010e145bc2a5948aae293692a9a9c66ec676a07a7cb713d5f173c46ef5868d24349e4b613a54ca556a076c58e52a35453ba6741c991160ff16f569d229bf97cf756d07b432a6381a2da363715933045b9038a5cbe4f9302e7d7c6e3288ae12e1811376dae92a7d661a1521dbc233d5958956875eb6948f4460e6c0a7577c03443732b8031629ce4a2c42f5335fc0a6b7e7a0caa79f3d0035a3c9f00328e758642eac3fdad50b3a92c1dc29f542367f8b69552f9463b67a4a7d39b8c7e0dd06de5dfe50d342cb68bc5fb2ce10caa38e5dce0c3be6af926d053ba7efd8b7723169a461eebde5f6da0b9a3e6c8718109eb26e1cca9c35183081036b5d5af0f927013dfb4d1cb082a1ebcb2969db151a8909f15293927471c179976464fa69d409013052f46fc3c8ef9882b0a8080c06188a3db8b120c1d2ad9e6e80641612816e01401933d313c3fe3e283030fee6196955a56520ab312db48e3a5fa511f098ac0398834a145ef12713b14a759d6e0a252b684078c0693248c9ff83616e20871828d191c7a0d62c1e2663449e0b7ab02d7d861820288f4e966ea490251a70deb5d5c95f429c7ab345555c181f7d9284ef80614cf662d3c06be469fcf6a4004b991e939841011cb6382a1b004d68807bfb2259eaabf59dd408f74fd2593ddc888b82135675d494bfe4e60316911add8b9cce6747285b8a1fa5907978ed08876f95257883a675f6ec035555901f9d3adc1b38f479889b60f11ee8fd367a22e404001fce2c2eda744b2488b4519220202bde7ab492efcf5248b07506d1c250a34e0cbe91e40c4245b73ec0d8b831c70f778bb06d8fa070b3666cf3dfa17929383a79b19533496f048be21228e9c25b50c8e59b9d92660a2e842b053ad513f86cd39525d71a3c0d8df706a1b6a5abde354f0caf04e8c878e16cd8c7a00abd3d12adeae54bdc9b9444c6d11f967d81a93d86a247bf350ecd38fbe3392d2e83490b52cad2124ba378aabadabe2399d50fb69d2fd7465aa83953727839bff4b8dbcb8685e92d96558562d6c3d081b7f2155898060cdacedae34102878031759e323ab6e1e00a35dafc94684ab629d19df759de794272d096379a1229a6b86c4bc1d34e1daac1c6d1fe43ca3d837992375e4b17a67437f342f66e133c244b575add1d6419f8991039ba1956d89daba03463e18882082335c9ad1e378d353cc410b300a0a4b7ef6d6f3211be87aa21586bb1941b055257348c4bde3c7e860a26862787ec73b3392ebee73b8fd7a07785e07d02dc7788aa03c0e0cc0ad5708c91e7afb2c5eb7024686fc287aee2993c13497d9470827772f10766016ffec9f3aebdbc7f15847b2320da51174b727654489ffd20be187e433bd1958f878737cbba22fb34775473735b1acc9b97cb075683eee28b5125d55bd0a68a341a24b08ddcb736504f87b028db95e83c45429fb092785ad23cc7523d4c29670e89c9ec66f1c4404c503778765e74da1708bec4fefcaadd4fbb7fa097d77ee61d64171d6000a8ab8f97d8a4e8a7582409cc914bc5b1bc8ed04839b47ce7ac6009c5fd57cf00218b4a047c90cfb2a26d63014d21cbf123235e667a738f2e01b0460519dfdd8c3407d55719a17136448226b1563ad72a4f751eee8c99087d0bfd3612086ba938c67be1432f7e34568ce92153c477172766338c6ea406aeb8e977607249a5c1bb30fef5d3049961f0495fb93de4d49ca137ec33089a555cd77b73aa35830fb66068895ab0e78e91707aa3d5f27342ba4222d89aee1465246c05fd5c2445a460d9904410db367143c3cdab466175f85e960783fa59fcbd59e7c0954a67964c6be3a82b13e97886b1c47d7c4ebbc67c189f6e0ed3e0eb72f88ee686c795d4f0dd84058f1256a84c8294c4ed3838bc16bb445d0a545d938f39aa01608dd519f0ee2947c79b5412fe831117b14f9ddde8e1f43507da3c336f12ff456ca57a28a6a77b33ee04849e355551d09b0b78bb74e9d85635ac1aa0342a73cac6dcc4b3acc3768653963f551bec05553f0ce0da0c226a2ad95bdf4705aabab5c340853d9b46f1f1dedc600fdd60ffccd319c4f5a66dbbbfe961ab336fc18b4788f73a6f44c9a0fc6eb821b1720581bd8f9128fbd28d400469b1a30a3cf68c30df15a766bdceaec3252c940c7d8d9128bf427799e0ab7f18613bfad7fc80fd25aee2a3185127c1ae2ef0bc30b697dc89383ec72c097a3119ef9d3e5de6ac3069efb227ea12dbc7423114bc6156c6b5c077e8f1c346f99b78ca57e58110ddccd92c8f9ba035f9763582177e282cf73b6780403cd2e71bd2c6d467bad3ba4d1a2a12a83319defbb52959bf64d2f49d53afb103b92d3d49c4757dd5475aedbb949e17efb32c7b308c87bc2056d5165c3d620ae17acf8105549ad1e185a3c5e8ec16deb8e0caf85cfde15bdc21f1a252f37f68eeb1ca76a279fe8470b85a493372607d835b5e3ddf7e9a94b6c08efced572eca5f918f6f6a1c7eaae52d478b84c1126df0b28d07e7061d3cad7876b9aac2304aa483c35810d3b9cf3dd42b2222c94e3814ffc304ad2300575ab742f12c8a227bfcf23f6a51bad86b0f0be070faeebbbebf81a39c5f0dae82b4431d97adff049c1211c7e1129d2eefddb23c3dc864851c044bf37a274d970906d3698459a606f965693191f51b8da764c79cdeecd375d3dea5bc4af69515db869dab6487fbbf09e6a95f74f3574f75ee9ae0aa76e05c677cc9c8a8026d1953f7d78489a6871427ce9aae73e8b00fa4d1c1091a63d257a7010a03885b4c9e4239ec1492c88bf9144ba39d45003afd53c3dccb776f4a97fd7dbb0b1e7d82fba382bf80a5166c025aff0481c53cd2b3ecc793acd10d0aca50df38ea7c6be5644f12b26ec0c92a25530ea19be267ed13b6182e1ca05f7b9218d651035a3a0405e069951618f49cec84a1c0b22540404ece18e811d06fead76f102267793f0dacbe791693fefb2478a6dc602aa66af320677b0d54774ac8dcf2ff317e575145e8e1a88865f03223cd2a46d4860397740bc5e569cae0df332b0c541fb600328e58e317cc3eacc93956f6ac0d7dbfb639198e1559581f01a0d880de037e387a0f14d18cab160d82a281c8a3a39bf3794fc14c0f77dc20ba0eb3c991f975b9133bd09215e9ec0dc75eaf7162c58fcf17eb187174e74b19f1aeb16a81e109fc4de4667f9ac5b186d02313b961d3a7b0cc748ffa1e9b6c93a0a29618d50109787f473dc6420602a10a424d6c3c7ad5c37e19661968e8f6f49bc33a70b383cfa86c8bf5808879682e06e2a40a2376be8254122cfe42e333530c0af5dfa577dde8dd5c02d4a7781d53b5c650ca1aafaae15cdfa8023747ca900e8336b821c8b62f067bda193c820d361219fb8ad1dc82dd9ff754b051301824d880caffca65e89b25c954649427b5095b7a491e009038346a820639fbf0037153ec691af67fb700c0fff319477ebce4bed7c7de2a89472afdbed5c52ed0a3887bef8e8191e8d6d42bc55a2ba29f15553f35142eec412aae6a0e9ac3af685af69cda69e0b9505518ef340f528ffd222fefb90c06ed701e8f635d7e9fa599ece9c9f2f9edcbaa9b08e4db031b967b89cc629fe2595ac2733e5dbefc41f5ccf01f4baba523695ace47359f293c841e81e11ff359ea16a99c333d49864d2624f93ddd258f784ab9af2d945698060d9939582912e4113cdbae91dc991444aa22dc05e885d9d218ae36d2014991a836d37de236c8e1a54ca03689b0eb4372a145c2c9482642a3f42089698a1bfd201f07bf88a444e6194b1454a540d586f482236334aa745da0b8b7319528bb0f67372efef72977f044998934b147abe21106fe82b06ce8e450db7b3d781588dbc83c8dcf29502dbf8358c937d1d2c8f8a52a37da8f5c9b62dcda82572fadf0b3b06f0759ad179726435bc90eab46a4c37fa24ca299f6600e63569796470e9e59ce514e71ea77f6ad5638b337f2e29972049b3d2fbbd10763b4800f6ea8fae215d0336442c1273d32aec9561c7008c8f0502b715252244b4f3de369caf2fe8c53b5b2594f2ecb53f20605976256331d9a54d1d95b8eaaca230df41c27f703c746438672716a7324122e776000f85236c33f9d8ba8522b9ba8d521f11ad0199f5e9b6bd8bc43ed3c268d864ad8c2441662b5d4f08592650baa2d6d6950ba52cea92593fdda0b653675c8a196164e267c2ca64d868d4a0242464a93762692931ab0c1d3d8544295d35ab4b9e0395b1be42e6c384026503e72ed9a5b4a353fac320be3cb7fe4aabd1ca9c8c9b15d810767f842a25bfeb440a8b3514b3c60e01ecad420c08333d5f0e11821ecd3a859179f0b5b68cf5b0a6d0fbbb4ba1203ef3d5f24472235b99a4f3daa78a260dc5e2ac4e40bb5513926d54c72fc733f135bad2253fcb2d8cfe539f65c56a48b86f8ef11bfa54e50842bb76ebcb943ecd2734592283680faecbf49c9b03a66b6e387e9745e2ca961a7c993c9a3c1dd4cd56a6fb6569e593518917898fdb97dcb19c1b3f96948dc2275d00c748bdae1344a4140592c74754067f7d3c0da0bc4e64b15e4197ee85173f774a984ac6122d9ccbd4e3e3a70b2bfcd464dfe4bddf107f121420f7e94f7ca567efaaaa5bfd30559631fc1e8de4728617bb9b6975a2de0479d8c47cf0dbbac05e0a703667b69d8b27d01db7b2016a718769317f6480788e225588f83af2c1da05c15d55608019edcd69ee0102ec0ecaa82391d88b4baf62db0bab96bc33bbd8717b63cb76491641f195e75ca17e1d949ca634c7e10763c8eb545d082340005bb4c82c4dd8127bc0f598ce38ded4568a7a6c7bccf8c078876681974fc358c73d48c8bc519b896bfcea03624efbd024812a86139e59d346a4ef26916b4decd65a30b9b87c3d345d35e445759080e9ed1313a93db540f2e83f80d073c6bb04f55da7095a7ba7b77499bf233729dc24099edb009240607565fa56a31985a372d0c3aa424723795dd6ce3b297c061314767cc2682f81edc2bd45e62c158e2cc42a60daf054c9bbe059036910b90366517206dae1770dad02f40da946080b4b96160bc6a43c5c0f88637011fc38e18a854e8cd32d007cd90a488c1e99536987ab2c09c3073bc79488f6015e7db891a761d3a1ac904fc0292af9129d015527f72477bee28ca343d84a241aefe4da138869ce9a1e811605999005035b9b8c4ac3f1fe3c402ebe20d7a5b7fc57330c08565e828afc3b51acb5f8939e1896b942edb3a8144fce2aaa0f0a62e979bf256c21d03d0d2fb3f931c6b89d218556ae92ebb11771d6927a32ef4a221c062213265139e67e9a1d84b6fe7ff6e9e9c409e904ce0bc0649c7fd128c13db3611d88b04c74ed122e9cb4f5e27e63433fba7ecf7b7f6bb2dcd9f8f8fb1b3e6916bcbfd72fa9e4ed36657959133c0a604806b385824ee9d4a3e46c4fd25164887d7f54a4ce3477943134d90c056c3be442675aa7a233a1a7f6288410b04d43a35ba8e8c8d2573d6629bdd785d2f814073b1db89b0b54bf850056a8b10fdf23c9119edf32caf716fc0aa5ee65e52288b7d73a2b80c355f608ef0cf035b4947ea66592caa82c38df3eb93afa18cebb84e1ab3b6e0e3b5317e0e4914d1a0bc477c21cb10a5eaf9086d0aafea110d4564a779a2cd33e9cc9b9d9506b39ad368f74295c228ae1b2927c357de63e012a330b474620653a6871289cf5cdbf858420d353621e16cccb974b359d5a9f27a42028e2c78b99e2d82d92f1b9f5ef13f9c8881bfbbd10953d14327344394b4693e1629ab2574c2c2b603ab59dd3010392e3c1530a2d4f9f1921f200c60f266139157dc0b262c37023ac3dda5131513b1ae5cef6a6e6e999ea8b3d30047088074b9b5d2990760b9122ca6d6354229c0401f689717defdbe076a1c64d7dd2f122ef85b58b2d6e07873b14cdf2dc2b3577694beda2edb4cb812d631de68f245bcd1bcc65486d536f64887a5f666036e7a788e583837c47cd0a60297b56f37f47d269912386027fb7d5fa4bed9de610197bf5917b210610504c269fe789349ec7e1cd215edb25b30b35bfcedc82af5ca1af219519b8b197b4c49de45b82f504b28cbb6722d2a2437024dc9ce4fee42cb856a4e1ed3b645c9c25454de0de2ca7cef5099f0ccf7fe3a21f4ea7abea064791b1419af6137fc956514cc070acf5227e9a53a91e78b70eab08098d6f957bb1009d1323f1757b91a82163ddb2771b1268b42f66f830ec4d243598ad3c5a3cabf09329c98e27ab283904ccf84766de912ea7410e55a3658851fa3d8e6c524270875f67118541672b4dd7a7634abf431ef962dd3227911de103a9829e1f8bb221f81159bb9285a8eb063e20480fb5395d24dd75c22edb9ec72c4529b8555f51777a5210f4f73dbfcf0f808dfa5e34367ef71eacdfea984d027dbd3ba9d0256aa6d8c627ff3e9f34267582538585838266f62a74ef62652788d8f3649640cb13b87423e9c980dfcb929c2ce6f20e9940143e03da546c4c56bad8168d962e07266fcdf8f8187c02051b6a1dead8450edae80a97f9245e7b9eb900e3e0253fcd7ef6343184a28f85228d4bb52e3d14abecffba455671596a25a1f1e9a3aa56604753d0d5a9db10d37efdf54b32100f69da821e73cddafc609a514994b1200e8fb5a37bc8770a79ccbdd423819e2f66c008c3038fa104535237affe33f29708a1ff033a90644d3205f2a714a515f641184cf225fb87ce0417a7690cefb300683863ab4f47f770250b440691e3ebf79da1394ba4906f2358ac48f93215d848531aa74d46ae1780e2e9fb1eaf252ef7b0cf069c63c6d74d2006064f167be04aee114bbda7252ade4b2a57b1c5be8b1d27d19494870abe14256b5f640ac48ba07e039257d3c07ba68bc50fde4a09874105703ffcd119075bc534570d9bbfc146459065b51b8d6b82623623637f71cbe9138ddab505a20d2d7670f1ddd6e35b2c2cbb72df4268465e1a56a22f83e4cb1d394d3232ddc2107994e1bbc9f0566b20137e02cd91f953c17a0babf01d1e03df29d5feb4320a86a20f64bbf131df49565a7045a9ba2fc0027f6e1ccf6ba9cd9d52dd47451d0e8bfcaf4f579f80d77b9d2b546f39ef0e2610e1bdefd94d8d0b18d83f34eb561d70ab73893019134dacef5172ad585b0a3f31bce29ca40c6e3b66467b2c6aed068f53121cdbcd15d59ab0b3e48c1c62a29de16d32752cc555c48627dc46bf10dc5da017cf61c2c785ba587917ad4e7cdaee7e3149f9f59aec246b06d530c206a890207822458e2f4faee12c1639542c817d672ba993678ede55e27cee072103a78ca62326978f1db5ec6abbe5bcda37585323ecc1719bf37c5848c74f1fa62fbc865aef6901da4fe03a10f93b78ef62615844e5ba2d18bdba4efb7170f1aed11f813211df97c2e8ac6c0d195239d7d128a6b2729ea6e1862284a3b2d9e070ac074743bc4426ed74085ddb97464b590a4e38a6cda57622c0c5d71a5156b10552067f94730a3e9e97cd718b1174b236a1bb8d0f6ffae8bad9f8cc21f81ff20a5c12bd9ec293e564376cd4c18f8b5fceca7c6607fe8fb18582be017d0968961f60e174ae5b739f2aef332493ddf0770563ee77fce68153d2e50d3b640c02a7f5aea9eeb215682be044eb8b7b7be5b3af9652b0fa4b49e6552c4824aa8a0c65c4a31e105658b3cdaa9483a0b338b05a2e66e2f20d94bd1c840558bd20fbcbbd44535c66946208951c6e85b643efe3a5f0acaf34d16f5cfd5f2d65cce58b95ccbf435a52418e8804720e99053028b88ae20e04288c3081f3c8e0212a3f92df9fa52d02def2b814202c072a9c0de7d3a5cc4d30c936d7cc255c89634218bb24666b1ec73ea6376cb895a96bf700a88e78ea382cc3a945c886fa49a6d8cd08765aa081e2e5b3e5d98dd91eda0cf6880c28be12f272a3cd91de2bd6cd3c7230ec58cc176c6591bb80da2af302a839c8625a628cd3e84a35fb051348c09b1b8e02855ee6b2b111161b6808aa1c438937dc7801179cd50ee69348575020b6833dfb53d016b9aa02511ff5d34394ce59b193cd543cf401382610ef8cd7cf195d91f6deb1d0c59ae85de4a744f2f4b1a5b6696d977e4a660560678fa7fe9bb85feea16690da2e7b40f9b78c5327653fe799a77caa1fc1cd40ca00f91903872df4f8d686ef7a5c670992de2c7e35cfbf1a4f172424e0584ef05de99851813571040ea88734b98ee0050c4b2cd8819775511e93c32efa9aa66775613cfacf26fda3a21e1599f5c555113ed68a1526d8b5e76571e378d3b548b7005b4c4401f7efcb013aa0baad088bf3470a19b4657dbff2edf7ac996295713b9147a116168ad9632c9bef8a92b608825675fb52a7d7f926d590ecb093c6129572f8a612ce924bb82a554c94e3649946129c31004c1100cc33004c19ff9dedffe2909965b6bc15cec0a6885c0752b85b12b3665d227db60897a2f57b22b589ad85294e5c2176557b094295952f86028bb02969f1436e3cf179bc1cec0a5cb0cdf8f8d7569e28a0965ac4b8c4b9750d6c415136668e28a096512f8ee61a8b0449008162c59be073f8b453d162e5dfee774a4fad367117f85926199e17f4e322c5950bf9275f91ff055b22ca2accbff6441d93fc962f0cf82b22acb7bf81363f8485821171ec628c33f7129bd74bbee2ba952741dfbee3a4a575265cb752c7842b9864e1f2ad9d0865fdaff5c42a14ce8f4dfb340d7b10f5221860648203143171a8c91218a19c094df5b25c094f653636420a3fc5e29e8fb624e6c69876c8be56a9decf77d312b639d5c41d682f6e43edb27d5506a28f556b6c3323cb95adf1a720d85ffc94659a804b42f43c5beb04709c6726191b5ffbd1694459571f3c34b952d70386309312530838a3228140a85b219471b0c43191d00a2cb0c6290821f100460e96262400618033240ef02141383324ab0b41163461965d0674619a505bfb4c08c507c39cd7c6b063533333333d3ea3233333333b65cafd7cce8af96d8aaa155c397974d2df1a5d5a5e525f52bf17362abd56acdfc4b147f6cc55a335f52b64bab65bbb45aa30d0a065f685a5d5a6068685a5f5a5e5a35d0d0d07cab0b0d0d4dab0b0d0d4dcb8bed32d2d82e636b84e5469ad161ad560dad1a5a35b46a70c19796975697569716985697d69796979697562bf5ae2fb6cb17d797942cf59fcbe572d5c45aae56aa5543ab86560d36ad1ac62fa15806cb0c24661c95944b7de872fde9349e7e74892914a85ab9c6711c5daef7d2ba5e2e57cbf5add538be92ef55f4b556add74bd65a8525eae41a6d72618e87f8b9fef5b956dffa56a22c577e333645c65af0ad288ae215b0146539cbb225f05206295d4c18654aa08658822a4a1fa58b298110a238f32b514cbd5e34a228c26a623634b0f1b5532bd94e9529d6bf56ef92a536658af5ad13725a92582b956ab419bf941564943f4a173386144c943687d2c598004cc99af11e5eaa4e355ab08c3277fd98aa8925e5502f5a994db954ef12472ba24e9f737d69596bbd589710492f878d33e3cfb8ae80305bf4fa1917ea67666a4659cec260b219578ee61df6397194e568723c449048088e0f93e5c4d1ca5c3fb3fad4bf62ae1bec8e4bd6723961952b590ef5aadff1bd98929d88107720c273ae2f650ef5fb2b3d961bbf96984a2a5362187e4aa54aa9ecab52af044c811fc66c6a954a7de8e2a1cc812a992cf520186180114519a60452ba1831bc94624cd00574a9c488410331c894acaf8552e554af62bd2af5add17542524a47f82011291a592e2c414bc4cb25cb8db156ae3593baf134cf41cc3f1c1a59aef537623531982cb52957289c972cd762c976aab4af42bdeb067b4494a11e4ca16c72f64399eb06bb038e20116016abc515aaa808038c68652d114c982ac66441868b32a1ff30da3061c6306398b18755ca4bcb0558062c037ee1bac18771bc61c3e37bdc80b961c3e37bdcb86ef0611c6fd8f0f81e373d8c76bc61c3e37bdcb86e70f110662433def830558c615c377c6146f00b130664790963b35a812a9bd17543181160798f1ce8e5f3095fe6aab7b21be33844eb59b156caca0a30e66c4a1b451465106392ea4f2c9f309f8f8fb15958329f0f0b1c03669162c95661a992290151566699b04a58254e4e7c3ea275823584ea57a7560d76e75942e46c940862b4257893c353e66c996bd56077acec4b897a312448a3ccd9284012b0a0049fc76799b05158296c4ad046d1aac1eea0fe14169d6ca2f0120548c42a015ad9c9be2c67cba672a59259948f4cd6aac1ee9c64a125d3da81c5f23185efc655468ca1cc8831fcd0c6c2d3a9fcc078faf0944a59f1fb52a92c41291bc6ecb3421bbe4db55227fba718ca66c0d660bd8837183f0712c11263a20dc65089cf07c584139f4f0a25ba5ca1cb5bdf8d13b1cad16ab160af8789ae1bae1a97eca43abd28cbd995eb849957bdeaf5ad97ab5543cbcbe7f37a294a55ec25db21be2b485cc5581f6ba552a95ebf8a25b59c46a55aad5e2a1a0edea5fa178dd8c251d46abd5ed552893298162ce2bf582f96d87abd4498eb61ac97ea5dac6fb172a2c8fafd952b1c2fbe285bb14ea2c88128ae9ee564f52a570c26cb8527d11553b1c0e490896291ebc5d7b7bad823e2bf542af159b01c2fca92c457e5807d60583a3a60bd72fceaf57ae960fd07e6f5ea80f53639580f0b82ad5aabd56ab56aa95832715503fb991971753a89a79a100cc87ad1e59289ad77c95a2dfb6594c9723ba583e5809c388a9f4badfdd7cfa8523ea921966c6cc976b01ef6abd3e974127fe5a2f999d4283bfd8ddc4e95e2d3c872b64bb97afbe554833de292e556b03fb98260af13aa648961c91a6339dba5143d25a644316cd5d0f2f2b2ae552cf52fd5b3c6d115945aad5229d56b29455114675a35f82a864aa54e38ac070dd8dffe666666c29889d9b2068542adbe26964403a25035352b144833b3fa55cdccf7a55cd9d088346f6335ab9aff6a72fb4b133233656664a89919d9ca75c2e959a1ca4bd5972663acd58225cb0c4dee0525e04c2cf70951a21e164b023f4b6967de6760ff79b147661ef6f180a26981df0df608cda36cea73df57c2be2fdf48037bd07ececabe19184ab6036cf29a9999f9bca0686850bfaaf924fb34bf72d5843fa25428144a967bc95ca730250b06c26030180ca491d987d5bc12f0d4fa6eb04756a3eb47d7d39c5c1c4b1c321e10e7fb1910c7f559192b89e6619f4b6d7276e6696656cf031269e2fad5eb98f9b166e69360ad996ff2c164b9f4bbc11e9991e55a352857500dcdaba4a1a1a1a179b95ec997ba515a7b83fd992fab1971465c7dabd5fa9958cea69c79d809de0404bfa646969bf9554d4d4dcda350d6f5af57f2d1c460af045cfd4c6a53ba64df0d7667c552fd78c369be1c3080a096a0140af520685161993b25812d60b56ab03b259167cd7ce10c28dba1faa447a5c43265b59469ab0cbf1bb00b56aa8906d7017a0f787ca0ccdd28bf0f94d145991b6d930d0f0f6ea87262f981799b4235956118fe9f3e753afd290c431aca300cc3534853ba182f760007309e3c8582322338223c85a7930c6c0003ab74311ff84001462083107009811701cc942e06041d70800d53cc80812dbc7821022fd666bce15ea4a08b7b61060de3786355e6c64fa580c572006a0a0c6cd1128198022fccb027607921831070296d54a58b098197efc65196b561f4d1818d02ca5c0b8bb07431536ce0fb0ea085cb02c6e0c00f434c81860f1f174620f881200882a07d10b4de8502ba58a26c8120b0b6e533fb95615ce0d8826288cde7a30442a9b5dc183f1f6bb558c3c7c845fc868cdf90ef735a4a1db331773385171b311c10c2fef3f89a60d9d2c3d4770251a80ae850a27ef8114f3d7abcaa020338f5f010259ea4a02155010184275176c3c62bd0a40a57409d42cb630a1994a812f5220a55a2503fbe143484a7f0745aa244e5f083429dc2efb12a5dcc141c2873ef8a0186a6d2c36c295306293dcc16244a7705cd460fd31446990bcb9087f8f9b4ac0b005a8452a2088a36665d4563f8dda09e057e5fccdaff6239a0f27ba69c6d0225855af9fdf7dfabdaa0019212f56f53e5f75752a50543312cf0dbf195612cfc6eecc702cba3007fbe4752b6be9b24513c0d231e50460650ec9043193f3e039b8db99bb2c8cde7e361820803c9e781f2fbd6e723baacacf430419029438fd9128481e563d452fa7b8c3582083d4218b934119e5e167edf17ca6423b844443d2ad63ac1181b538fea214ef995084610460f584c6cf9c18e54784a892118a307e30e944c6603e2a456247818583c768c1eb2748c5c9af86c58fe25f9de5afbc93a18ed2bf9b2586b8465337a3893fa542a7504cb7b88df0daa758231c778fa9cf884b512c188a3c6c9f88d1b54ec042fad98196850e6782829f204899819bc10f97ec0322776f362ebbb39c1fcbbb991fb72fc6e6eb05c228a655d43a81757b2dc8792257d6fadacf5f97c4adf177e3eae21db46f9c98ab856508c5f992b52c41ef9cf07fc1e3eb325f822f8cc7e4af6f9cd077eeaf459107c890ffeab5ef5817fe3f3f9c00f1f04c1b74171303a9954aa89c5c4963760ac9ad1439698d3c2fac447a13e2840225c9a38f9a9044f277b7a0b04ebf4b510b00263a4197784327104714e7ffa1509c66762c1c61759ba180a802959dffb898b9535217e3a58509c7ef5aa67c9565ea69ef58942aa5492eac1679d5c43be737a9bcfe7547e279710588ae2a344d92afe16cb140896a9d8a7f495e2abc436da40a1cad38b594ab0142df852bd5f014bf13f9fcfbacec9edf712adebec107fb5b21de2e99321c0daa4c4961829b8b0f97c40fb9d12c062f968c7914b1356e6df0d9726fc6778212c1a8ea06114210cc129acb5164c6963adfdc00e9439f155ba180928800334a58b914014fed9f0012cd1668d30ae011dca2842062c704802093231184f6081157c38011459c4a00302bad8e2db228a117479952e268a2b4a55e962a2e0e2eb12ce44a144173151ac315af09b410b54e962a010c2c540c1436923060a236c606da0cc951e468a2b4adb347e5994df87a58791e2021e460a296cc03a8128f0513b401ba658bf8305ae3e958cc96a87686d09a26c69853e2e28608fa8de9de0a13c7dc80ac3d08934cad3678fe456a9df619953fd0eed2a8c812916c87a577d25985ac956b224f04f21084ebf3ad9d3e973accfa53e17feeac1d80e91655d07f53b421993551996ab2b58ca13a8e403edca5dcc037818029d9c46d4f74342d9b62528fbae305fdf27f321313ea851e642510c6bacb7d696ae304aa5d62b2c5b3e5bed19e59554a944f39a696a021f8bb1a9b4df1201cbcb5515e305c6ef41b089181fbe88e9214c99136d4022a2e820b0ec7b0f1617d6ff9b8d39b11493831adf0358a0eac5a304c199171f0467decec83658be3e7439f1d78b878be2e90bff0402c8c307a5b43cb94f79503195278792c1fe4484e64f7f23c968134375018b7d8f1bd1b21ed6e3795c32d4872d59ee44a63ca93ce5499614ca4203d826d03ecb961e668830a5cd1016004197eb7cef3adf7bcc368d9f06ca54e96272404099137de6ffbd2b871e4a1b9f2f87059436fe7d37b0dcde30ba181cbcccccf0f87c763801fff4a899979db1200832f12a9a9aaed836560fa24ebf512b6a15fe15134aeb3a652873cf3985ffb99e68a1e2f4bd7f1f820f86e0b79e5513fbbec7e7f38131158fcf4715fe0e27dfa39e830fffc6ebbf67e5be47850f8aff05dd783036f35f6c7c1e228ad583899693eb4fb11d37bee6fd7170f038623b9c88cfc18bcf816cc70d19132d25cdef7052f3aeaf79d7bb6027808f427d4d8c464c0273a807c79c1611e4f96eac8c856a812e269f131e6d4b50e62aed9fb2582d33a088810fc70bf9cc9636c7e3787735711d0bf4dd7c2d9bcb9194e3c5579223a68447ea5934b1138cc7e7234a51aa7e8793d3abbee655b9568e77d7c1f1a758cee688e54ecfc19f5ebce18b52f5396ec82208f6a7d84b668b549f4396138b503d5ecf03f5e2dbc7f138623b604ff3a7bf91133ffc1bb11d4e505ff3a8af91ed80fd0e2734cf7a9a673debdd052506fbd3c5bd2777faf0679e26363e2cc6444bd943b469c59258b272152b224b81a1055fbe92c068ff137281a7312c7f8fd9c6247fcff9db2db600add6e9431aba9461f8ac5096d352864e5c420f7e12281b439f79e93adf0cacd3b35effc5c003c43086e1297cc98c98f9d72b76c4ccbf7ee6f57abd5a328c6190ea59600c4b0cb68d9f26509f65f5033e2b26247e2ae572722a5d0fbaa21c819f7285aed02593e5a0942d192b66cbd5e7c2a24fa9bed003e1ea89f1148661784a9d4e3a25e3813001d58ba71398b2a24c3d59a652b2d427a5727608cba705f58150b0be2e5f683ff0f5fd3731e6529bcf8b2c9706d9672a4f1f0a04c17c371f982564e5ec872c7715813a80e127fbba803ac442100c08261483505b7c2c5dc7bfde75c43a88e140222eba6427d7aac562b9702e9a77b9bc94e328fb5c2e95eb84995fbd5bf1c12f5e7e0f82c1f1cca49e8318cddf5092c2c9f58191e566649fe75cb25c18cb8da5162cae7fbdc093eab394aed329e6fa1e767ad8f742813ad823afff542e174ae58ae54030e5e7c2b95cb2572c771ab560f9fee44a7d7f0291287329d717cb81a5eb5fcf727db16f7cf08b3de2fa51060a51e65227980b04731a5dff7db21c0806f6b9d428fb7cb873f09f2cf5c1bec615fbc6170c8772b960af3afd4b057b57eca5faf1536170b46a649f2c27e47a57d1787abd52e3cfcc9c6abee51a6d643964386436f5630ac7e9592f59ceae4e2794ec74c291fad6984a8d295930150c0683c1543529d9f77627077e2955af04e400f6335f179b970dcd2b61c37c33a7d0358e20111c4b077b2467cbd6ab443258aad77fe14ccaf5faf15d2d27e3f72d99ebf5359f6c47eb950089e0664aab844c89f27bd5c3622ed8ab9ef5b9cf4bc9d2195d9f04fb9ec6f5b8d1675086a3ca261c65b9b405ea608fb8bea761fdd7c515c47a9d50afd7eb5fad477de2e7450707c1942ceb52bdbb52aad86966e6b34dbc1cff042f47d90ed827c9580f38fd787ad8a7721b36c65e33b2dce7454be98aa5adb2250375b03baa95cc45d192e1e08bd58089f17b0799183f1909f6fdc596dbcfa6208236be6a62fcde1514f27c218b090582a208b6502c95b5e207a240103d08d700552a14aa5c39a00b18a6cfe7fb4a1e1f2cd66795f362ec08fc68c457f2051ba7e9ddd1342fe5e978e6ce38bdbbaa11de771b21a928d2d51a0ff5dc5de7a3cec1dd877c04c18bbbc7f45d2f9457315edad8f6585fbc9a2afabd749be8baf5e7fdfac458fd15db743cf593cc9cda5e452fcefcde4d71941bb89327de1bd5e9b2298324f3dafec4699ad7c7b657aff9fbe2b679b57ad7fd2adee5cf44ee7e72a7c1615a862037d6e846d3abae7833e14fd5bca24a6a500b0e50f345172618a1821360a1841748aa7080d22242b18241b1450e4f81163e150610e0218309a210614686273fc4beb880106088279ed041c3a6071b2dba480050960e1cd55002095096e74e84bbddee56bbdb75a722a1e9c52da07af372ef3e31c1fd8ca69aa774290f3d2cc17a8a087b9e6036e533f684c3beac082424e2200fe107a94f144f2168ade7f848ffdca2109a603d75e4e43328ebd6dad34988b5e0d7c4da94fdac05512d7cf6b3a90f47146b5136e59f7591e08742ddacde86df177eb1a1b5dfcac6e0b32a3fd9f003b1b5b9cfda4f94f2edf8ec870a3f5bc6672deab328d81cd6829f888113987a591cd67220827608fb59d467ed07d2ec17ae5442be964d22da530fb0049bfabeb0075c7d9fc599f1b12e843d2c262094cf43ff0e6043f0263c7d16f41301ac18d63f1fc7d1addbd07ed60556fc7e58fb9dbe0fb43688ddb1a26d7ddff7a196581fdf177e960724591d882358178d8ecf077bfa3ab0a105ad7f50be5fd9d03f14e55fb303003d8601eb4aaef8408bb261caba2c08e6fbc419688b80f6fbc2ff5aaa1b7bb236c513f680c063bf154afc52d6ceecf789004459d517824a56f6f1ac0575ac8af55931653f25df07df079f07a0836e672ceafbac2b1cc1f0ebe0fb3e8bb2e1cdaa7a58d6e9b327fb22b2e3134ab1549fb589add46751b0a2b5e06743dbc47af019f9787cac2ff59d2c683ffbb1be5468c113682d110bda1babb22d6bed11fbc1b70253560ced67edcc5a148eef860d3f7b0aad918f65c1ef030b82df177ea135f27d56c7b7b22a2b869fb576663df85629d0866268ad25f2d6e687880424e16441abb2a18d55a966ac2a3b3eb02184f6fb505f0adb91031e56136b3ffb596b753ce53b5f418b3d430517f8ab5004196454888dc1022a578c05482941187e140b811b15c1016c74b7f0284548314494582e42a188dc1950ae10254f8af800064d2e0f1e2345d8ec18b9af258894c0d583486c657d4a60d7f0a9b551009f67c3c9da0d3ed0a929f1e5849144ce799e1f241091630608b56f81f039689c881a2b5e3be5e01fc6e00eba3bcf27f915e37616f2485e6f14093d6d5975cbc4a8e3893b126adbd1f1d424ee4e65d47143afe4ddf7a4a1b8ac44d040534a9552852fd127a5023d681d6d21928937a89558246ccdd8b085a2854ba00b8485656200a209f5fa52aa30c7e541910534ada6b4ce30e7b5e513b2e32425b4282417682ae109102c862f5c854f7066d08402187e90d9624f3318084ab67ca10e50676763494e2474d184428100850b07333f3280276ca1a1a9031595d68dd68d169870b013f54a064d48b6ea849a0e634a05ba4e49a100bc6c11c317ca033b13644b0a8c50fdf8001791063ebc3ed649092c65247482ab380143cde966c56435028a85f047ca080c1228e204181480038e91878bcb7c5243154d2cde2d88185c4066ec141ee09154073e5b562923a895f80289089d007ab0622283a6554ac8652436d911c464a56ad2323a9148a0294798e3b342cd6a5ca8152b481680249a5662930f6c36349dc0f1645128a056a723a81f497e583c950fb1096a95eac005a4ea1112a972dce031820e1c3f44129c441961cb4a2453415c4188084149b5c2948ed30cf451b5421faf24a54aadc29d9393b088127bda01c64e387854a2091a093a6223ae70a8886c5942c41222de843dc21e280534fd78854027124e1fa87a843c667a400f606822772c78037542f0e4822c003b5420ab0c580099304e30400148d4a0e505269d74c3662d002cac90c2142946509e00a0c9ac48909b114408e1c32bac68c30c16a4c0842422c87474902262035920200914824c9879c0418b85aa428a0934a104029038a20822869072e363870c028823a336d448c3b682192ea08296613ae080de921c59a594c8e10b1195176512a0c4cc884f8e1bac9598e2b123021060019f45440010621254801b0440034d1843a660c00214a085ca14223e3637420e9081c1942425f8a852a806cc30010718d1c30e36b860800214008722a224477cb4ec0d401b7c3408cf78177c648429f84a700ac386e003c1f70155172d2e3e0e7c5b7c527c0d0019f0258539dbc382207a70e2e1eae0cbf171606fc06a4e341fcc8ee1eb639d569f4a14bf54eaf48516b416e5ae1970075881a670004de113d48fb7a9186c1993683a9d5aa91142b0252ca227ccd1426209540d4de113158e150f9b189a542a842b801fb036aa2532118ba056e0119bd549034d62144d3758d8a222020e81460b8ca6531b4da7968e0f34b5b6ac024d2a9bd7973a72da39f1d0850356073ec0107a699a89cdc4401dd88e68036b03861309629114127006442222d1040ef5eca05628269a40164a4798c3ea016dd80a73564c4e24a45440e940ad50b9d68dd60d958d0a474a05700d18503a402760388d69122117ea9e268207e1ac3583828516d4019784505a39505f8a4a6a478ae8c4c1cba258e0296c8120f881295004552b1e21989292a29981b282a550290ba64221e14e68c50ec01d5b54209c96687a31b105860a778840308460c020a3bdb7c1460abc28c30132588ce12119e5f025e8c784128864d50c17ecf81867c45495158a88dad0828b0e8080030f181f9400010608b6104345041880801d72841e781b07bdc6e005677cd105175640a1254b005858218522a2139880f0410e1c5250400b031690e5059a073cb20ac20b0c125cd135b5c1c60c64c042951c38602010738505a88800041a80c30d02a00540052a4544425b6871c506a600d3440421d8428c1554542009246c902186179c01822ea8a880140ee0d2844fa12098eb8c138c010616565060024f24208701e093160016aa50110a3a32c381b9b6d0028b2182c8810b3e03000021264147662f57e82718630b2d3270050526f0440312a0c30d5cac0040a884233322427a706860a1b77182314890012caeb082021368400274c8e18601701183668505137648356ef0c4c9cc6b043cbe78b121052a3c460cc0861e5313aa364036be354e37f86c202e112ae04bc087000be4eb01792cc9d20149001f07081f0fbb23a503ecc0da84392c0e550d0d0d388633add7e8d2d1ea80c5630553a54454ea43a14e27d0babbdfb8bb0e1e22f878038ae3d476b78aaebb1d7c661355791eb8dbd48d1e281f6b64e0eea28f352e186bc6e0fccd3f3e51ada2afd1dfe81fe9ad77bd38f32ffa353dc0307072f7978f355ddc6b8fa4a218b7f438372520791545c2b69a14dc9de563cd907bed6ff935fabb67b342926415a1268ed2c1e37e3a223bf91869c6b85e4975c57bdfddceba3d043fb724f8089301b653d1adf1f938735fddefacbec6f97c9c1b6caebcac47581418123f55bcefebd147188f53c5321fc7158c651eb791549cfe2dffaff9b6dead1f23a97775771fee8e1b95d02bb9e24c1dd6ed60134db5ab5c506dacd37bc3bc75bbbb8e3bca87c7dd3f704721197deb6ed9ddaaee567702233d9fe4d79567fe3062a4881122467c8c0c3122c4481023408cf418e13162a4489122448af814195244489120458014e929c253c4089122448810f121328488102241880021d243848788119f223e447c7c7c86f808f109e203c4a7c787c7c7c8902243880cf119326488902141860019d233846788112145841011e223648810214282080122a447088f1023418a042112c427c89020428204090224484f109e20468014014204880f902140840009020408901e203c408cf414e921d2e3d333a447484f901e203d3d3d3c3d46788af010e1f1e119c2238427080f109e1e1e1e1eecee3b7c7c61a15752c75377b6ee66659573b3ba79e15f78177e95b372e1ffffdd6dea6e93dc6dcedd43b72adcdc6480f51272f7968faf125e24b87b073ebe687e56abfd6c9553abfd6cdf70fabfaae16c1c12bafeef1b4e6f6a2594e06e518b73d047d708bef81c1f3e7edf3f719289aa7737ba9e709f8dae1cdcfd7d745df1d7e8e6d9fe358a71fb67fa5479d9f6b7fc9b97376f68cdeb1ab494d735ffb8fbe7a3eb893b49a67c74e5c05a30c61f0992efb9f94f8b8a53a6abfb12923cce8d8a5392e812dd549487041d92e499c2dd070b3c3e58b07d92b7c253e5c6b349e1ee21f8d86a72133871ff407082fb17a6f6f9b061f4f64e87691a256f3c5bcc2ef971b739f28a5bf89eedf1892aa1e7e7fd7ba7c37b5f7787b95b16139e0077277d64d5dcf54af234ba223d0967cae8810a7502602c790104c6a0001d884087274cb0230148c010701124c710427889a2140286b90149889d0000b581430e78002a626328019918814e0fd086262027016801015bc8c003dc3171f35ed88ea481730394928231881b1421446b8816782488118913a820871e1c1b824f060433c624a870c9510344d9b0c40d66404089103ad2f8caa080d293270840026864c147e6064160f1020904002119e38380125e70c08805133ca0872fbe20c420028a2f7c008167c6c5b7050c8e1560e042cc088c2cbe5b16af45101e6081e900557c4fbaa801831c68c84a31a4f87a22f0051546472aa880164f7c3864700510eb11600cc00213568d03047101212230e24504246c0948c0c40053fc4004cd0442583104f8f1040b36f0818807f060991833c4c88a313d5829c18bd561862a33e85025082b2ec0c52e3d71344611bd11d82c61b12ca0a16272e189179264d8f6c708dd113f0061c6120052eb2304d605a78edd0056705a970e43684e123b5290823b1a5558f1a0063f573c00c2bd4c0c62c41b742c8145e03e851324c045bc8c6942092037a205a6113d5c5471031f48bc8b018a7c8c900308599010d775d18122482ca182265c8e1be1900588162eac80859d7b91303e68e10216290e1ee0fec116138c30d18007151777b009a632ac60c2d66a830c32b838c0d88616422851a38d07702002395210a3039c93461b3f7891220b5586d2250b16b491458a1388a70e301d658cd186b9060d50a0118367e0f5451b420ae8d1e30754ebe0012eda20c76061ace20709475059b471e30713c4b8828c0b5a98a8828d1a6cc00911a4e09e1e0848c10618358867d0808a190e929e60a30a0900ed76c0418920b660828d04d02001b42dbaec177840820d1c9200630a03447182287010828d0d460d967aec70b24cc1031b2bf4402483971c263082142f6c988085146dd4845880c7880b1b22d060a39d522c00b0010b1b2b28a068420905b4d114c55ec30c188841831d488081178c90aed1c5114bdc5270d1422083738d09888089b4c70bb6037061610d2276483280161410018b1e8ed690c18a1100f9d0e1810d4ce0c91a495cc670014607ae30e108d01a501c5004e9063f8638e006246b0c3143c80a4c8e1f4c9c40c81a3b8898618b0df840850f69e4ace120d8326840041866627aa881822f3dac20176902a688871a1ab8c0c883cfd00da610b9a14603604042d3b302012da8b4d4e861015908e5a084c948d746a8860b2b1042b614820b6cd0801a6adc21ae30814313496001451a6a30f1000a2cdcf44801220616a8913300322034f1458b1a48c65003568129399851267da0f5c50d64d0c65203d4a880145f147171832f96d8b191430c105764c0dd9d8d2c6e600114e8d8022c41471018eeee3158a511dced158b4170b74eac2b88bbb56e832377af8105dc7dc7c7d38dbbe3dc605dd6348d92389a97eec8f3e63c2fedc44926c69924cf27f9ad5e1d79ea955433d25dcf9d1e12de77dd7ac7c427909dde4e4633a07d61861669a82df8a2e90b31339022c50d1ab80666e4c8428a0e63b671f442f2e381153ce0c0a7471357dc9c18c10157d42e085066660b00a8bb241240b98286831d1aca786180b5021ea0a10a18128bfd885400c208601241b47420c5069c084115e117a207b688010b42d863eccc7050640d108c1f54240192589b22500526d4208d1020c08716a8455a70529103c1ba872ed0d195556460c28c2d21cc8046b680fbd2101e9c55c605dcf6e8b87fc0a5c941971277a2774f9171f731eedf112032e0a71894c01d4c0f4d3ef3a3c4ed0c44b8fb18dd4132dcfd74f795bb5ba227ee1ef311ac80eb95dc37a7375a0f3d77743c15afd9e4f91292fcdd293ef1cf4e9ca2f7a6af8a5edc12b5c8880914a1abc33853cf661a2ba11bd5a1eb8ea6669d2e9bbdf5aae84f5e95ca9dee621d7a945e1d6a622024bc552155c74bf3928d7957d60be5b7c95bb73e538cde568cded0ade213fdad5e74bd4a4934debd1f24bebafb0a3e7e575cafa40d4d7b4820648f8ec6bb67db0902a488898dd84e234680f89826eed1d16593b4f1701b45eaad5ba34878ddc948eb35c91d9da67849cdaa7a717a47af584bd9d96bb65d778be46e6fee16bb7b0f7730064ee30ea6c0dd5970180678b8dbd3ade96e6deef6badb9abba5b9db00a434c0818fb68cbb6f34dde9afed5b3373f868c1b8fb0d1f2d971256ac55d4dd5deea7994d41afe499753b265672eb3014b0e0b83b0e1f6d8dab387d248f6d7fa6bc8cd38ff31abd79267caae863a5acc32b6d7797f4145498e1ee2af7ef74771b1f9d0cbd925b77b3e26e55f035af2b7ef5fe89d595b7f1fa6a46f7dd2ad6e174a7437fa377dd8fa4a27b5fdd9a6f7fddfde4fea1dc9d878fcea457d2c44ab4a5bbee98abde31739ade9dde7a571b9aba5b16dc6d1577bb8287ee560513b87401051427a872846102270258608132820a1cddb610a282561a741343411132354ba40dc0b08028150012aa22321c03f490a9e9a00612dc69a01e26e4bac87084e801910059b03c4c5353e9a0e8030b582c5613ab77ff1124d28a7dcfb23fad17b27c8f9235fdb0582f8acf4aa9c257c5b8842f886f3fb115c6fc8715d3d2149bc1841ff055312e3398f013bebb76a0107eeb8fc0b7fed36abd6af55dec8f8a0b4b7c77a1e03fe22bf95a6f632fa8deaadefe0bab31d6dac1c4f5a924970c01bdef533204f4c037a10c1ffcdcd842c99ac0175b2d2eab47c5b8b47e86ff51bd6dc99ac0b76f655c5ec802be4ad60472e9f23fad075d2b8ce0b7622f64017f256b02ff43013c02ffeb627f542fc6ba58137e54dfc5feac6c6c070ae1b77e05f0598f8a7111a968f969c95e68e268f5f65f507dec85d5db5702ae620efa8f2a26a6defeb09618af781b654a968480def708e8ed400184f23d2a16bebba0806fb39cb45894142c96130b603120e9f4a10cb40060f915f0fb62a9c805862ddf7f6118066a8ddc3aa78f6dff9a87dbbfb3fa597d9dcd1b8a71fb6b78e96f680d27e7a686db1aaf78e3db2deb34aa5e9c89758fa4a2185df76bac8453343575360e094d5fab3835d1ad517ca6698904dff2c5e9db64363b5a7778bdf9bf434f6e8da65f4b728444933a8cdb9fa6e8d6585ff355f49675362f7f46fa9d55a6fcf3646fcd3aacd351d1bf5332949b8a3ed6e8d2167a52cd7f5ebc6225ac3e5ef38d87371a745444f4e4f99acc3abd9f03f4244edf264fd670ed7bb6dfd8e8c9136b8dcdbcee70eebe67deaf7de8ddd5ddbc7e52639cbeb83b94b362dcc64879ffe6edd28bf32a9ade9d8f9e0412ba29cf44d39477db5d8c9b61dd2532f10e6ba17ca44f8c89ccbb6ea6a07c84757909909a895294499a7eadd3c5e98be3e133136d604b0414a0c416026ce9b265cb16a62de696bba5e6bbfc3822dcfcec771e4784cf11e167bbfc3922bc7af33fcbf9b752c5fda48291cc809633b6905b6eb8fbcf706ef6e5c2bd8987f3e2b3498af34ebcbe8abe2ae5676b5e57fc268a949f607d7150b0beb89d36d15dde51b4bee1287ac53a9e56b379f73defbe40f9a6ae78c52dd0d4ac9a78a7694c1b694b96321aa7bbf71eb2243166f1f2338dd1afc1bd3810e3f620cb9258ecd38bf5df28bc52456f4b682ff8f0c294178adcbdf64a5ae96bb5d7518b9ec4c13f360e09d5fdb879bdded4c4e73f0e5198410410629c4968679ab18cd128139aee763cfd1a3dd37ca4b737baa4adb0b0e27cf2741516b0fc6085859df2345eabb0f024366fbafba49cf76fcdcb9558cd40bacc27cfe85cd2c34e4ef4e4196149c1b1f8385693a4e95d329b25797dff080912a6fc93a6d74c7284e456b4e325e5fc24e3965cb0c185224eb60082b1050fb480c5498ca45e9cd9c3494b58c5a92d61b576f31bebde0cc69e067a4d4eae58456ff87c8dea90bdbc9732de5a4573d2f42ef57a30c180e90ba62a98a618991ec0d4c414c477907c08240f0f4f0e4fcf93f06a46bf96a6d7acfddff2bf0e8973f3ff03f4582d7a1d529f17affa4ffc3a244ecf4dd1eb2441f2219034239a466b3be728b534bde635d1ad62dce695fad2f2c95379f9e4e97cf2742d9f3ca32828520a59c3284dcdd8f6698a2e9139d5bdbbf2eed291a50edc5479ebfe1ca4f5a69b09ab79c52d648d2aa1e75ff4eaf0ea6cb8fbf5516787df9577691bef78b453c59a964f9ee6d1747634da9af7dd216f35a7a2af7b7729bd77bdbb5779b7271224480faa7bdadd59b039b0971042afe40e6d36d378dc31b8ff4cf7e7fdf1cd8475eecabb9b09d3706abb2b56539e928ad236d6275e518d4fdac6fa54b38dd633ef899eea3569fad2b68ab78ad2b0d2c5a9fbd29a2508d943f6e8608d91d073e7bcd2366fb77945339cbe38da56f17a77387d9be06633135db18a91567c5edc24c994cf7182647775348cd76d7b80bb67f1f14a91dd0676aee0187768901aaf8f77d9d4799b58e96949172f255d4c25c91112134f3132b112edc4269e72e253e5e51fa6236c52413556f1096a46f58aa7987867b455aceb5d28471869bdb8254679c52ba899c80a0f101e2040822cdd284cf8542fba539e4e6bbc9e6789ee9437141a8542ee4ef331cf4e9f22240fd9a3a3669da3e173c57a8a933ca23d3eaa64dc710f27f9f05125c24f546d72778cdb1837aa557a38c9dd6ff8a812c928cddd6b7c544fa790104ad345e14ba5d1900e111f754cba1bf7d71b4dd3fbe7c5fd29a496634ac69dc4399748267cf3a799cb31fde2eeae6674a36b3e1ad38b4d5469c5465f2691e1be66f596491838cf25493763ee0cbd513dc5c7dc17f735dfce5ccd1ddbd432c7e3ee38f3e2558fe8192818d7a812f7a5576f283afa29f46a892bd3538b704c3d9ca463de32928a7b27d7fcbd8d6e8d34c6317a71485d4e9486d31ba9c92dc57aa33bab3837da478924fa8d8c7b0f3b51cb5b971b14dd9a6f2bde7defeafe31aee836baab4b594d5279afdec7b8234ce6e2d0f50877d1a7d0116ee2ee270d4aa3a1f36213c5edee8a94f7aeb72e399d70f7d700f0f14cc1cbd366cd37b30877954ab5225fa32a956a85b3a3b3b3a3cd7ceaa8e8d5ed649424b599cf1b2b7acdeb8abfcaebf2d6bc252a956a857557bde5bce29d372dc9111201f8686b5d0cece0e3e571779c9bb18673f7283ed670d0b8a0fde0eea58fb41468a3933520a113dfd0f3bc3a1877d4c3496a46770f2745d92856f231004adc3dc8472b37b062c5682501467cb4b2b3d2c39dd4371f69f49154f45cb389d7a5bbb10ea3bba5ac964faa2c0071f7221fab98a08a00a0f858c588bb17f1b18a1d5768c25a1f5560c27debbbc32b6ff36eebbd7dce5be7ade0d4aabc7ebd519d7718e8c95aedf5bd396afe5a0a61dc9d003ea64002152adc5d061fa9cca6843145bb7bcec7292a292e18e2a3140948f1a1898f528adcdd051f8fb8d03c9c1b1a4df3d29d461f6bdbd74eacd15f79b9c7cb3d74ab58eba0f781dbe77996e45fad7b7d4935a31b3dcf8b846a8c3b226b3d9ca4a2b415ab4b9976b54e454275adf6792f61b5f62a564291febe3ecf52898f47378cd6300ac3041f8d8a188d968ca418297177d5c7281d885205d0f7d4fbb89706b9f91e4ec26a5e81dc7c6934b494bf8771478fd373f3b313afb715c5b8fd3d26afcbebed35564ab1d6e9a55fb1e6fd7d15e3a8c4e0230a2870f7177c44011d514082c20750be80f205dff25ba9655507af78bd557c2c12c1583484bb2ff1b168852224445cb89f2a2fab3adfc349e45dd11d13fe9eed4ba32115d5ad7813d971e80ed958f14405493c21333e49bd97ea8b7557aff9d77caa3ae4ceaad0eb3cce4dadcaebe0dc5839a554791df2c46b5691d0f3ef7f2e9f5c5fa3e9dfd701f0d189cedd8d7c74a2c3dd9df808802ddc5dfb0800164600e870f7251f858e18858eb87b938f4d28d0648826486313008c4dca13ba70f72b3e9e703ad6297eac66accbf7cff3feeec49aa7a366f5efaf39abb5235ae96bb79cd75d4d77f503e9be341ada64ed444f5a0d4848fbb0523bf15ba9d5aa60a5fc3f6c7f642465e8878ef221909ff76bbca2bc2b78fd8d7ece2dbd386c7bed03ff56b17e2415c5b6d7a811897ead879368357dbf966b28137ef58e4c3660059305304942051f990cb93bb9e2fb1ad5792bb5d96ccdebfa2158a99d43b359adcaffd05bc54a411f020924843e8973aa58dfbc8a22a16b915eb2a25bd3aed6d1f0c6293eafd6d1f2a69de75d73cf465b4f1aedc46bd66adeb9bb908f41a293bd6be2d4767fc5bbc76a7eada277ab79499ade25ee5f91cf02a48abed6b7a2cb84f18a7147af6ff967c55034d31d227b3849c7446fa88977fa6f4fbd3af5e61c7dae7949157af27edefa2ee55345a90c91b7fc491a5d7fdf5f31929ad3d7fa717ab7fe5bfef4bed657f71aa7b6abe2df979757a4fb7aa33a1477f44feeee10908d97cfbddedd6fbda2b7292fdb38c9e4d9649f5ede5e5125ad6614ebaeba5bf10e4945711ae9af1e5a3114ddc34ea030dda1dd9f7829a7e9d0bb7f0520b1a966f5915434bd26aae69dd55b7e1e46d357519c89e2963ea7b7d1f4ee35ebfe3e3e79a9a9a239496b5e42993cb97badd34bb74e32efdef77b37dde1f5d79de6bd46ffe6b477a160dc76b2e4add48af066eadd1735b3d6f7750f27fd2dbf7acbbfe2c7e65f2bb553c8a85625efefe1249c999a51157d9c1b2bb55a959cd26868a67bd8c9eb3cf97aa37f77284ea7787d8cdbedaeee14fad26868f63a4f9eafd15fc2eadfc79917ff89b1e65d13db945ea3b8fd49e65d319527cdc7b88d77bdfdef0efe8f0f96012e25b8fc6f6934f4a8899eaf6654ab7833059d5845427bd88952d12974f5d0d5433b13ed4ca4b74699827ad849263af14675e8931e76925ea5acc3516e293e8598a03774c553ceb205549572e2a4ac84a39c2a2f33d999a8b7e27d4d34ddf1741743d14c77489f189b4c4127deea5d4fd899c8e8c42b8eb233d1895774c714a46f13acc2ce44369e51efbc784d4bbcf2f6559150235508ab4b453dec64096f15af2b6fc9d6174a6fa3279ade29db444fbc42d95955ef12779f71b73bdcfd888f3f6eb8db1860c02da05ac7d3a14c5797f7a79777053fb67dde7fe216508dd7d7e89f425be565d32c67b3a31e4e5ac22a519299d39fd9ece8ee0bd4c34eceb3cc6a46815628e8c6514aa321332be1283dece46aaca560bc324932316e895eb14d87759b6762268c754e4d8d9e284eaf19b77977c529efa461adb3e67dd3349b3887577caa78a7d3ab94d7ddeed236d658094d2f6d8771529a5e1a565ab1c6abca73b75b9ab6346d69d292e5052c2ef8e0dcbd87931ea7482aaafffeeeeadc6d0bee1e5a157c94b8fbeeea7ecdafdd6defa6a23a7a87c8902146ee0dc84e8f4fcfbdf510111244c80d0890214686e8dc369aa29ba7ad0f484cc03a71e5c889bf97daeee6e974e8ebbbf41b7d6caaa85651f4869e59b7b36a1e79bce2a54f2fbaeebfa1bbbfe5dfe5bd5126fc58e9e296feccb88d75f6068d776a43b5ce3b8cdb5ab7dec74ad9761fe376d67f62217c66a21f208cae477faaf7b78a75b3994dc75b97b8dde2ee361f83d8ac79df156f9487140284e4d1b19d3a185d770d31689c9a2a8fb6b10e40093e026972778da4a2e7c5e97971fa79bfdea8edb78a5113bddd78fa4fbc6f284e5371f7241f735a70771f1f818cc0132400405ebdb8fd5ae3b4a7ded758b75ecdcba8125ea16cbcae78df2eedc4baabd2ccbb9a5987cf53cd26d67867255acf5431d28a75b8b7d135e7ae0e279977ddb4adef8d963756d2f14e15aff886d713ab3c6da2a98db7a3ad17a766a6a95845753a7477f19a64e654e5e19d95f0ce4a34da36af8ab746d324f3a6b6f4eabccbeb8e966253bda612ba4d9ca6d99ccd52dd9af54adaf2c9d3f9e469bcb3aaf230d2d5a178ddd1b65679fab64369e779d54c3bcfbbf2eecabb34776b05c9dd4d87ad51c6ddf54a9a417474707a4dad8395d07d95d0159f347dd3f4d2f4c599fbda68d85cf3adb7f2f4c5eb763fc1894f5429afbbc7b6df9aa773771b77bf010942dc3793eac4673655fcbdf4ee7bfeef74976777b7d6a15bcda8d658f770520f27d130d2cadbe1d5a4a5f8cc3adad5315d1d6d637db56e47eff44c15f3aee0f5b6339b5dadd3c1d9803b12aafbacbe0c4288a16da2bba73ede807153058c0435d72b696a54b7636a54c7e4e30d90c63cadd11d9c89776fa3ebddedecccf46e6fdcefbbe61d5ed3dd1f39f18a9190506c7b7d718f571e5642b58a6ff8fcfb3377ffe1ee38b8fbf6d18711fa2e99f7b6e2ada23b27bef24776793d5fcdafe2a4bbbf97aa9897de293b4284dcf32644c8ce1021468a00b94280f8602c24884f90534707a7bc33eb747454bccb2bbed14ebc3556d238e59d18676a1a92120def7bee786bbed174e84dcd34456f1a23ddddc65ad3362fe3339bb48df5c63a4dd1a4ad62254cc36d748996b45eddba8d6633da4e6ff3ee7479c96c66e2339bf9a60a6d7d9fa01b55855a40d3aba24c827ae96e5726a1ad78c77475e9dd79d398ae2e0912a6ab3351ada2eb66c234acaf6dc550741220417848560c653653dd7cecc1c57d9b785db3f93babfad7bfa17fe26de21d137e8d3ec61dfd911a6dcdb4334579b6da89711a55d1dbaff84c51de8f5e49bd511d9abadb256ba5c81f29c2ab8237ba2e9d17af3620ac43b7ca8b82f18da67b77a7f54dcdde9af73dd53b94de15ef8ad2ab5b3391d6375da27b170a10259a5e6272de1f8c5726a64675b399567152deb399d6bc7db71136d59bde1f8d55c844630831fc0cebd04dbbe1f566e390504c45afe4cecece35777a805c1e22414c21679020428af060223a369eded19b9777368a94de999ecdf69a773b9ea661dd5d6fa30c067792247d6c9ce6ec8b57a4df99e8499d62259c7e7a6fca33d36b3e6ea34b8fa4a24b39bdadf854798fd7fb98ca6c86d3b749922448767708e3f5e827bd5bcd2da06bc625c13ada8974d7bc8d66338cae9bb6d3279a5e2524ad3bd7bba42e65a07d695bc51aef746b1355e896f30a059fd9c4405bc5da566a7468e77c5e1ca5b76e3528bd6a46f7aee8bc38ca7931aecc27e0f3ae483b2948e84dcd4bce8b9b985786aee880700ba811e6611e0a40aad04eb73661c2a72a14b4d3ad4d70129c253bdddae4c44827badacacf3985ee7aa1dc2031f1149d6255bd3893a6355e915414074810dee70009c2bbc12da09a86799877858633f7dd69f43c2fc6d1cc2b3ada15dda96978dfad69bd9be27536d3e1ad7b9ab6a3053854705a4b9e9cf2482afa53a6c06ec6907abd385d7233f3b102988f307ce0e003051f386023a8a1046c84a311824448c39dc4591f7d249ca24ae8bad3512f6edf7c0d67876d1a55cb5e5acbc1e98b53dae87d3523dd3f712f8522420d22b000134188bb93511eb7d17f293d2ed0e306580fa21e48bc469bcd921c2199cdbe84dfed42c802168296107864613879a23747639cb92f894934133d296bd2e1a5353381c5b8c480c0be0647fc10ec3f00210520300103010610521038f8208d0fa8f8a009f6010b1f9400fb6007ec031bf715456dba8c7ffcc04a69efea94f28a84a4b3d1d7999dea55c24b19f739372132d7ae7a716a92e4c53b2be5d7e89a756637210fc6c03ce001e6c11498074e78d04067490debaec626bab49fe481038f2c3c8cf008778c01db61801d4cee5ec3d9e1d46a37bcf4aa38e9b58af5ebe8004c87143a6c80e958d2010bce9eed775e77371ff4b88d06e5fc8ed7c15207b60e60309b10d8c400b381e264edc43654bde9639b941c46e41882e51861386e8043091c30e0d0e1400c0e708071b0fb8fa243d66aff6bbea16b5ef1ce4a3927c6b5da2a04e3e06fb870e384dd3052630258cd979a00d4a460345cc068c0000145a9d57c6cd44756f55daad592d6bca4c26886686c6034a13b59c3e9f910604c30d80930580e1f0e1bcf70276b3c3d5fc203d5806a40b535df46216aaf519eed6b35d818c266283093346304f68a01ec05c5ab8b93fae28c8c4e95a762f44fbc9bd556bcdbf168baf63a640e5e91eeebd4f504cc85612e23986b04584b0b582b4b0b875506c67a008c6505c652025ba9601581156c75c3fd8622adffb6d7bcdaebe49dc6ebaa4fbc77ed75c8a59ca6f9a67dd4f2aebd0e89a3f2f0ce4ab533cd5acde6ce896fbeb75125749baacedbb40fac43375e310e6b1f1b49cde9eb237d03536d81a92e4c35fa456d3a3a584915b1c0c42aee4ec461620f580a8d5415b01493934aabd6f1a244b9e5fd37bcd65e27f3aefc3d925ea51ace0dee5d9a466b798abbbf1c961a61a815c0506060281386ba81a160b09314a70e5e77f7b3fa3aa7866935249c6a8caeeb3575fe3eec0404760a011696818546c0c2edee35bdd6a6e04cb941cae993f0536e8a6a54c8da898348a559de784aed4f3c45ebd0bd2f894db486b146426dea359150dbf7d4fb399bb7cb27f1eefd90e7ed96d39c9790af93d1cb84d4f174b6be37b2976ef5e270264fbf463f67df25fda48a95b0ba2fa9e3ed3c854cd1bb55fc7a45579d2fde6bc6e9cfea631b928ade3299f713f2bce9c5d1fb967f293779f3aa4124de5929a71b5579f9d5f595b65679d8f6a77a77444fbe8973369e4ed32737bad19bd74a9f714b6b36f52eaf506aaf73a4560bd297cad1d6f749ed757eb6b16e69ff2d9fead5f14e9ddaeebda1bdf47b77a9a7debc77bdd5b4e5ac7867a54fd3f249fd4393182bc64cf80c62520adddf3ed45ad09349d7a6f25efdadf1524e4f7c6fd2fd9c7dd18c5bd239f8768d745228a272f464c62d3dd6d9872ae5c97bfbac716e96f213cc4bef14bce4fc19c2e94e871aed4c84d3b749263a71de78cace44bd74bd41391f09a1970a5633d19a8932913e551e132435139d78672221ac55acd54cb4e2dd4e0a929a572a5134de790ad31dd2b11e97bbebde5535eeddcdcbeacadb387d71bd9be2b397a6f7a897a677e3f46d72aa9809928a6624b528dfd2bbd1dd356bb53f7770d2b5fd2c4a51942841bf44e884a227a8929acd243878e729516e909878cac648ebdd5acd5acd28920a84a4a23b4f4932f313dcbbbdab6e34dd199deb3dd5bb8df0ce5392f44a74684ca38c342e10c2effbfa97f0c5faef03d258dd5d8b8f3028e3eb91fbb50283213c35425251dac64827cfb6d26830f8233470128d31cecb7fcb68ec5ca7695e8fa0a1c4d1b071128d254cf4020938c65456ac94d33447d9eacafb397189a4a2277e0194dece99e80537e4196a9ce1c5195d488cdb4b39556beee4194492087d8e195598a1cd30e20215b8a00717e0489c5e25947705637c6aacf36ee5ed304ed239d76c3299d5d65aad56fb1979710b50d08209b4208916acd08251cd7f62b47c120989a7fffeb9de251e14169850461965ec508697327265042983b50211ac004defeb484ca2394b3a336d037a1d5dd6ca13a5e96073cd4c5680b302940a60a082312a28800a9af82c67bde9c56464800c1fc890818c2a6478e05efb194e4f6d363baae9f49e380ad31d22cf1bfa50545efed91849459780849050bc62a5ac5fef9c137d1f2bef873c33bae2dd6f75e5d91eaf17e74623ddad6273c5504e15ef8c487daa4ae8bda79a7fc82f1f3f79aad9f6d8e66365f2e489cff52edddfb8879fc4e7d5e915a7174ab933911581843154bcd36bbee9d0c7e9de58fff6a1ea3cd66a365521db6a836202274cd0c504a793ea894fbc4df0628c51c50003450c2859ddb867be18792d4b60851f95a0c95f2dc12a0c28c200e339454f22a968563f270c1c30b800838b93fa542fee5794974ff4ee7a5797a3f1ad777737a73bde63db831123011a64adf6446593a3370a1a123afaa02845435fc3e98bab3d51d103053d79522ef9a09f3f2a2232126a725eddc5e9128dd3178771474f723eda99e8c43b13ed4cb433916f9d1124c1b9897262550a8e328233dc4750856b8d8f682378c1dd4740babb9f5f90e1ee78bd5f44e15f7c297763172b7cd1e41fef7a475fe870ff133543c04608c8dc328da6e6db5b8fd03f4b2b3e7ab1022f8ef022005ebcc028034499a43242654600810840b00110d0e0bd152be9fbe7fd39555ebefdceea29a40add8dda7480044953bcf4fae2689d10767476f4de6153cde64e46497ddba140424baadcc7ed6cfb3445974823265084f0d619f72b790ae59ca87ab57acbd7b727a77ad1adcb27cfbf67dee9f0fef247155233aa97e05defa854a5e440448b2449700ba8d1dd17487321c49fa8899568bdbdd3618c354d898f5cf090386b46952e0edb34aa3bc33d10853be9819de7cdf3c0137772e7bcead20360079cd8f5f6a9a24f76e08b7b07943889a331be914824be59baeb79973a30c301ad73fa9b97737ef36c3ae39638e0028e52d6ddfc69941a5139f7dde128e7c65be7275bf3804ebc944f35682453c679e79321e2c930f9d22653c44b32a2bbfbce16655c07afbbf5a2267ac32afed9420977cc53714828eef3164997b684558cd71b6d09abb3d9519ab34d8b11b4386d408ba50d7c162dc8e2882ca06491240b1e0d8ca1012a3480a40159066490010764e04a0690b893ba1fa0cfeaaba88e7a979e563b555e7ab7e601a94b58a5a97936538bdef6fb75fe499367ab2dddf554af49abbdceff2c0ac9fbaca627be3a24c646bf793b155df12e27bd26bad1d5dc3c9b8e87b45ea0d721d7bccddbb3e5f858b1128a4dbcd66a64ce8088c5174e1e151545f99e6d09f93d9b142c988ca1c1982bc6ecc67820468c180388c96268625e5744e00ada152a2bc6b887f04f6ebda23e56acd7df9a0780c7c1bc75df3c5642d37b794817a7bfefeead58093fcecd353f475fdcedd354d32e4e73b67df9331d72879a78dd1a9fb5d72149d2dcf8733446bab61d5e77bcdccb39f1fda35f6d393835cc5bf7cdebcfc939b17af7c56d1a4e6df7c96baad80a9c15332b48a8a20c1942aadb38929cf1724f042346c8a4df59c5d74a95c7b82a92aac8c1400a301004068e30c0e3646de7bcd65ea338356caa99e8e6770e5eca2989ae3b9c9a50ed86a735bad128b57b8130067081182ec0e364efa62b56ca3a9ed6f737ba5ea375ef726ab5d7374888e90ea94c7788d4a15be33f55bc33919a1feff299b4e6a58dd55fc22a0fc9430251fa13eb2ed193a79a63334abfa7964ff65235d76a9a57ebad77dd6a364f54d734d639fa76cbf8bc2bd665f335fa53ab6915be56abfd0bff499220b9fb027dcee72441724bb111121d8a33dadda1121eaf791bfdbf0bff8f5374a7cb66566bb55ad0879077bad35d26fc3c8daabc28bc2b285642d37287b1132415bd184897c1c1b97bf6510a2b24be5dbd79361eaafec6bdcfc126efcceb56510a7ca1db9a973bef974fea2433a7df332faefc19928aaaeba5a293ccfce45f2799f98956b37e72aab885bcde6818df305e6f277af7058a02050e1468b9fb7d4bc304ca3c94034c80089a099ce489dac609f4f856121803e89340ea2e011e77f2d41278b91ff9f4f0926828b3d91112a6fc43d3d7c453a21021021d88c00b11e881c017b5259fe2f3ea5ee77c4d0867eefb53c3b87de2abdecf397a526353bd5beb78e68a9a9fa637a9a8f6102002011b28aa80228562c7132c78c287276a64cdc6d3b413dfa51c203d3fa020a1bad6433bd38cd378c56d1a4ddf9a8aa3756cbc74b7bb6a46f1bad5bbf4e7f372afc7b44d5eee9198446f3ee3d06bd3e9a9f726f4649a5e532591d49ceabb7bbc92ba9e9a4f1ed6bb3f31133e1f87c4cb2b6e3f80020f1082dc3bdeba7da87949d770129aaa52480794e1000938c0e6801b0d98a2010668009506f07072c9e375c94d11d6f76736abdd5dcfa66f9e5cefce797d8dde84481c154dd1ab746fbe56fbd9efacd6b44e4fbdb6efdda11bfa297a6fe6b5a5695ed38c5bd2e57dff54b191135c9c307222e624ce8dbe425466b323dace39ca4923f589d5a3253ec49012ae8da77bbbf4cc3a06e0dcc9ad435ffbd8e867fd3958094db1130614711248e83311035c132da08cbbfff90b88825c000e4dc4a0890d34a143136913374ca471828f4c34c1c4f69cbf65adcb26b66574ddfdc6644df77092d1121c5822014ba84b04b97b0a3e2aa0050a18a380ad000f1230260160127073afd57e76ce34dee84ac506f43ab59c9aee61279b0913d53ea7762b9acd8e6a3fd3e7c5516c404ce8ed469f28ad879366337db47536cdf2498d773d15fd1a4ecf92d72171fa6efddf4bb789571407a7695e6f2f4d2f4ff36e3ebd26baeb6d20a14f6de85eb1929a4d6cc38f6e95f7dbc4b71bf6a1e2e89b1ed9c349247ced14c2bbde510f3bb9e5bfba4653730daf17a7e6eb8d9170e67ab17e1b4fa3b8a5a535ebdf3b9c8495746abb1a3d4df454859ed43d9ca47d60ad9f0a8ac3b64752d1359ba82eabd9c48fa4a2bd14b79fd44a58af794a99897ad8c9a9897cfce8e29e44cdddff775e93b071274f8d1ec00bb772a23919b754e549f4061da089bb23a1b6d7eac5bacf61babacf5bc8dd81f87800d19118a3916822c9116e013d620047a447d08e907204cc082eacd46a55ce73bd38ac710b453ff48740e65b0948864823a6ab53af79aad788d7584407c622928a4011c102224640840e44181101330016eeaebf7797746bbea557f71a7ded435dca2b2e07eb50f496f26e3e489cadd56c62ac6f5e335d9d8aead48cbe9a75941333dd21134f79dc026af4b805541b0d3dce8d95da9a6f5bdf27e8d678dff491545409a3ebc66bcabb612de5f533dd21bcd3f235d3d5fd8991ae7a758f4df5aa2b56ca27a8e8907a71475ae3273c216c38def58ef0aeb7694f68493ea7080f498acfacc32da046293ef310d31d9acdf4d5cd664752dcad0d3be7284b374a7a75104a82f82046577940a4e1bfefe37df78eb7ae79c98971fa36c1b6de1d9ad168444542465182a6d0824e28a3141d19d168b39b0edc3d04f71810367a257b3889965e33bba7ee3708c00ac0dd7671b734b8db197cfc0189f10730560677cb256f5d5e6f3f34f11ffe874f9f5887de74091827f4d6588908cc17778d3e989abb2fe5148c8dbbfb40867b9299ff967d70c2dd5d092b6d8dcfd92c8989eebb8d5edf9fcd8e9024399aa2a24364adf62aaa4b82c4c4533e4909bbabfb9926ef3f94bce21592ccfc241fa9423df50ee57cb4949f949ae90ef90e367757ed7cf441b3555ed6ddac554ca3ad78776674c53ba329387d716b5e579c6faa50bea9288d00e319ce439834e5ddf4973c10a1efd2acc60393bbbb5ac4830a4e9e7877cb13e334459d2c61a2530a3ef312adb169f28c762063071b7680e2ee64ad96cd352f49d36ba241dbbc79ff0ea2933aea899a28cf4887277457872f3a28214ff5e2f3f3c6b8231ddc6f3928b1559c57dc420e5c92e0339b3dec24490f3be9e1a41cdc9ddc5d8c7bedc3a6c35a97364ce54b1977dfd8e84b971defd314bd955f70e03006072eee4ee25e8af75d79a6793f6f9d8da73fef9d73941e95fff1e3c70f9209bde134bd3844c1a1887b0da7e70612b8bb141f6f10c00d37263edef04f6a2415cde76f5e76771c1f07b0511dce9f74870610c6ddc934459d0c80c7cb08bc78c00b06bc18e18500ee8e828f5e806ca0810d60b893698ad7dd5bb1d26bb497a677c52a46423759c3e9791d12072ba15aadcd6619a5ed74ed759a5ef3e66b38463745b59fe5ddf33a359a7acd1a134e77ba6c7ecd089fd9acfd2dd796d46a38464fc22fb929aabd0e89cf6c2e61d5084a91214646f777d2d59d6b7e15e565dbfda5ac26e98ba33c79f6f68a7779ddbdacc810ad65e617196264f427c627e943452f0e9ff0244eca4a2afaea35efbe274edf26275679ebeeb7c6679a6f7e8771d2d0134dea53bd585fdb8ff0640dafb8bd33cecd639d5e264fd68004e1d56abcf5e8c913ab78b7bbb8dffaa6587703ac94a8940f2df6911ae59852ce0cc80800000000831200203020160b874462b964d92acc7914000689b4568c4a9bc95994630a19640c11810100000000022401004be0ee176272210535c7c21586123c11cbcc803094083abe1ff119bea99d409cbf44b0af4022611746d565083c67b00b190255fef678cfa84f68a830cec6055fef15f7a159193d289fa44950d91dbf796fdedf6c1cb2f5cad2547b5577692a00b7f382b3b3ca3f2e31a733bce3d3bb03ab430bf536a752ae5bce5492359054ee58c6ad3099bf7921985304adfd32c6d15cad4b5d44e3ccef5ca28be58d3848b53a9521d02b10e750229e76e25c3df18024feb68ca1fbea4a82102c3cc66b9f81d578fb5b0867114790d281d21cfdcf9eb0b53009424f06f18223369dedbcb1910cd3303a7b50ff7f323162d9c8aa6e9ed92ba2452c93142d7a953479329d28346a7961e0b0dae31dadb1c1f5e87226ace7c2e747e8a14f71d9697690e928d6e89da27002555e4413b948364c9279eb80004c0658b943dd54382e40d7a6faee7bb9fce3c96509fadeb8b4b2dc2f984ad41553d051036b691a5a7bdfbb317d2346fa1db000f5fba6613f3e17923c3bc2ec31763fe5e3b98f647a4113189b611f631278a1611f57e6dc8f10e6a4d4b0245bf202c41114e5b7d8182c72ab94cee4c2615fdd285ec83dd1966340c7f0407fc4fe0e5b865bf78831907faed331e5526fda17bb94a413cc16ad89ce0c37ddab9fda71609fdbd8619c51745e3f28fd040ac0de50e85c25761a3178d07607b8b7958ac766f5dc748765c99dc739364a76c2285d162137acfe2043c31f2893379d71a6d00e709dfce13acfa3403f6684304a286532ce5042ef636bd12919aa55e6e02db1e56e18d1a07e7a09e9a94a21fe1c140a9ce80a047f6b73593ca5a67ebb7f61baa6121f3927d4b76cb8a941e4444b233fdce3dc667885d1fc3a972d3b8936c426bc30fe5208e02ae7760ab778c74e4def9df765259a628735c1f5d4422c968ef39d5465940ea41cbc65522e4ab0e15a21184f4e586fd934f796e897450a6ea606eed3b170b79a443a16f4695b88ad4230c91daa01a631f9c65198df25e8e11404ad34311d3480e9fa274d1856c51aa0c271f2a9aa9239b48510a56c6ca9ccb538158be3ccead3997ddd7e574405d79959bc17bebf2776661923a54da41040fc7a206445fde4a3a6bc2ee00d0189e537e1ccd3a501984c0f1ead31f38dc353c4c04faecab02ce1b51c4537a0d94db1e0e0c56b055e6e6c3f2738c7241d806bab647d8a0cd63033684acfe64e36542ca922dfcbb2777b9a886b51aee571885c5dec6b7ed5993d292d513685ed63d85e089fb98253d6e4909b092a00c20adb898f0040117e5c0824d2ead962e5c6e7fd03305a4cb4f253ef4f793d17906067a1c2cc49e5ffd4f538fa1d9b9de9d0fa954c8cc1c6264d0eb5ade2e6c2b53c6578c0969b916c06ab54cd2d1249e2da4d9cf03804a2db86e34c024976e369224d7d26b8a242b9eea13e51848e69f910feb60b332d2d5344293aa6f8f92af3c7d968f0f6fc455c7569f0b7af6d669cff1965f1279055312f8b44312fb0db16535ec51b5f42de62c5fb2b38e7baec2399dca92e90b25a79489d65d55714a1746d29025048a5851e5456088ab01790b5ae8a9660e33f978e8292584890bda2d880bcefc7c2ffe289dfc2805a28d0e00d80ad966214bada0d8a85ff3df0294ec2021114a8c0993d49f89508913b0c751e1b7a1b75b9cb26e930613ee83ca450b578971d576719e6887f2db13a5c283ec61b4f8042a05bbb22b669b0b2302be3d1996b255e04a7850d205209a6ab4c8cf712338d6b89bff1aee7246fd60f0c202343b90d0dd46173ccc1ea1542c994b300bd40164531487f67ba3a77d581d9b91203049d8e62e121f29d06ba767a247a4945bd08aec85f4cdab8a4c05c2a45d866ee97a490bcfbfac159cbc38748f4cc208c377e1a55574f3b63a1d45003c2c35e5c7e97bdbdd0292dbdc71b921af2e219d0ee33dedd4a202f83519c065845f825b13734cc752a79be4d01e2d1841458e5100c6241721717ecfd369297a10d5db64cd9690828d332aac88ae9cfe007c6150490b642efb3c4fc40c99b8f33ef3828c8450ea083b4d30881cba8f61a824ee5bfd3f39c59161e9580883e68ec35e5d89cb6b162d5ea05ac699f009fd8d91731891902f0da04b0dc82fbd4b9a5c5bd4ced54c48989f0647f8af21c96fcdfc3f087bf815a3e90031ff6a66d1e22d37036777dbd00d84885bf531c143c915d63f082a6cc691dc2a942cf543d0a1e1ccbf8892f6bed5a564865235cde808c4922783f5eeebe130383759beb6eac737ffb9e5804ef7bb5e3bde1fe5310170403ec429c4d45c112f9cee460b091ee1967a564a6caf97d300ce5395e3cb16c3b1dbe042243c8d3125eff71c63815aa96114c0f2241cb73dcf18ab7d73c5e0c3399e65a58d8c847aae87ab41c8daf5a1b2c176d282232c408e51c2f791ef73731af26157e0bc119d18e7b8516d6a7700fec7b8b9986c77f784970b7bbda1fc4705fc5f65e4ef883b2fa0fb5ef8caa1eeca71d7cb938928d6d2fa4476dc1b5810f50433fd2edf01cf474dfef83e40a2b645408b073970d7849436610929e32f076b50198421cfefd7c990d67c961fb8c848007f0c8a5e5819be1acf9bf693530e849a57caae5cd9111bb326a66694d614185cbc1b6fcdd53384b7640dbac0a3f223185b6230371a7894e8343fac28a8ce5c35835d40dd48b4d70c5e88c348636da4190fcaeead79fd00ae9f436e1743542ef286987a91a2264ef4bc54d505ce4e8df12927010e6357ee5e0d7b8895cd474818973fd79efa084ec00a0556ff3109b75fe86411fdcd796c523b1ff0445a949dbabd2dcd0efb75566ef55a68c6a749d121d1d2fbc33bbd91c24094a62766910b637f22369065dcca12ae2551bb33858463d780edc349666ca7d9a39ce73f2ccf1237cf68f4c175bcf1b0e7c19d7d12fe9a4865e6624d9891a65ae33971f43213af76af8bb43196649a9ff565ddbd7f2bb0b2a7f58a6f4df534463c4b87f2f102df02df6219a339a5c959fde7b6ecbbfa642f9ae5aaed128ba99a6a27b2c0dddeed997e480cd94d90cc3012cd28875aaae67c2314170123cafcc806faa78036897217ca5f3b11c95b4c385ce7a8d2d746e874c93f81b2f99b559bcfd9379335b90e3fbb8f0e4a95384b8528016f5bb8b91e1d6ac2db0a409a4b3f0c363731cd730e8019780e8388e487783192e57eb1d3a911384dfa330ee6372661b53a1d862181ab3402466cb6899d85375ddf8fe4dc6680700a96d5acc4693b98239a7a537e3980ba5a4f6e4a31692b72d1ef390852c37848ec2cfb82d2d6025cc1e2d410c81b43cb4e4a047579ad5a61702eb93e583fdf8ceef24537ddfd080d799c6917d27044e12bc9e38a27e65abc43256908afc2e43a0fa895b82a0362d9c6a58f2261461ddc5445fce41d5041ab0f2a54e2eded684de36383c9b487af294d261c88cbfd76203bc47392b6279a20ac0d31a3e8390f85e6b6c3cff5d1d325762dbef893a2603f4b6e8569d09a99940945c78cf18bb08be0e5ebdc499961f5ec4e52ab1a7dda91be22b9552c186331e1fef111609160b897ae1bded1b78ed16217d59a044a7f976ac95988b8daf3d501e2e1b6805e36a5af0c77d6e1852e9fc8e8c03ebd36643993aaede531761509533373215a90a755f592203cea1655b6cea238f600a5c7359b4175cafd5ef050a36ee72ce57f656ccd04a4dd6153d544d3bac3f853eef90bb991d093823335ee4791e125f507d65e39dc3f574fed89e7f09b6f7c584e5d1a057e35bc51d3e38a8aa067d9814542091390b531cc17dadbcf4bb920b5221702e5af1cfde602c21077dd0bafc00a1229475cc44aea987aca2126920f785e9dd4f50c7629fd2c676a01732ae8dda3c79933b9c0563e1e22f096f3f8bdc69408643b9b254cc72e07182ad370b8b66c2212cc2a4ac45f9019d820c20500ecbe359ac06b27ee40e7ed1d673bf63ce473136177b6b2b30ab2dfb911fa1c6e087ca2eeede289a3a92e112580bab7e378e8df70d20de3389b49cc84a9c5cbce72811e1d745113f5af07aee557fe48aa428c4302912da796ba9ff8f8c39ccbc2c13857d40a53e3d6f82968109e0fa2ba035bbc2a9eaed2b479a28ca423cdf678c53f1c2dd5de40946128134bd2d64e5aa093ebb2275aa95b9dcd020fc24af999dfc2e856c1fd9a14d4acc40bf55821ecfeff0a08ae742ade0593a45d82373c8acfcc4892babd07ae3ca040af31fd17201e519ff61903669912bd48076c5e5dee76c8ab3248c0d8f8c6b50d1b228d73a8c8abb5d28a700c42a26e14987610cc701019061734abf2923bb81bb5f9b0dcca6fbf235c74ed2a1450111f0b3666f00cd2adfd027da3f86a02a3c7ffe011a45ea1d30209caa90877f180a770622297ae7659cbae41ab4a3741ecf564c962db53aeaa825e903b89a70dc9f1aad23888a580c8b10a82a15de23bb66a5736052e5349e3d38925b7b6ce47af6641c86a5705d9842ffd175a4d2d9d2f8ac8692d0e123d31d10ed8a869ca027b5c7927fd202fd42f0a1aad40c2810e674e1c62d926fa7b82e914cc67cdcd438018e74f0cccfcc1eb9cd45a002580eed7ed49011d0b811e98234da48d1b0b116ee4a38e5ad3bad46d055bd7bfe291b678bf8f124e4db187d2045640bda6e8e7a659fda15f79028541a380dc436ed24c22d1f2c6987ff14d21ed89494e9e12228287d93360af0e4ddb4a9db9d717b0b8d37583e46cede28bf943861346416d4de2766a5aa62dc9b969d90378bc32d1777e5b34d65dade85e959143d087d6ef07ae1e533f7636e1505d73771889fbbe7b98d5209c6a923cbbeee9997ff7958278298ae346c3eaadd80629d22041d44520c5896ec85bcd0b7c10535e2590bba56c297dd0cc76381ef55f11a8daf2403ebef9c970e5ecce04c6174a4168dcafc275bff35f2a797b4d8079065bc7c87d8bb364b465a3b2782c77fb105be0fbe1ab91c52a3de960273094a914393d301d7381d63f06e5ef5a5b879001720e2f9fa5d649715e52698797a609d8f7c2d84f92943ade42ee7c9b3d0fb406e756a4fb8bd9bd14285088f7203036d95d2ee60475b9d1f7e41fdce2e0d8103630510ef38c6c2ddf053deae17b9ce069ebe9e15e48a420c4816d3719b1f711015956c532a11ed5d3c3a9b95ba8ecd823bfbf513bef04f560a626a33a03fd3817903d51519de0688b275bd67c69b78c7b8b4e2e303a4b6ed572c19f05ba640329eb49db29a394d361137a81e933a2c7d5223990f158b805b7ae0b153005c48c74262227173b18b8128b9fdc87668e26e02d261b57d88980c38e554315d85a0f7dd3a54446f982a51da78bc3d7355fc0b6cb7131c3db5e26173b0d089b14b03edc178455dd09bd2ca965cfe435c639f371437fb9667d9036b00d2328a5c0d94d75a5fc3f110cd8d085edb38be31511d9ae761563671cf3de57b20329f48fd8b1e889ad5ca98414b2f08421dd540e9b9e1d2ad827121a34d109036cd662bf02b32b1e33b2d206710f2badc27151eb0791ded126e27b2ef97094c7f08970d41bc8aa068329de6514b22861bab161471db1954645b8f9572f13f8623bb79e6a8bc1fce5005e0a59686a313d9e0a55595e5f8c9468ada5ed75a0e72ce1effcbcf4e4f609082805760ca0c90b03a680e96db373b74279c7281ceececbba137115a0bccd832cb8fc362aa514c69d84ebdc3fd59e740b7c88764c8d4f48dcb89a5099292bd5a66feca2673e4f3ffb7726bb8e5c139d1b3b10d1ef3dd7e7ea37be861641c4cd08b26e167d29a8861a3c7b4e896fe1473c50ed9e213cf1fd5c111bdec7cdf94c382a7964c04c684bae49b99dc3b5f5ba77c911876e150de814f0c832ef325443119c3ee594c8527bfe6bc570e0d804e05a8ac2cb6a78eb1f17a11fc384a58c20b8ab504f71904016ebbb1f3ab7764b5ce681a845fa750cd07b9f0b30b4a0657a80713787a84e02bbe0a5de92527db11f0931cb57cd0968eb61a1713a4be63c921e0d0b94a8c9c03b7fa4cbbe901ae38f23e0d101c975b066adf3ccf9197cdbea85b112c480fe3d2fd10de2f2151f14a089af9d78bdb0ded421b0f6c666eb4f993cedd29117749a91a7d13934b04b95707d84e5c0eecee08191d0a68f0946a8ad95905f9de2f3b0f10db6ff791fdda9bb801c95fca4d9cdbec5d4b2283aef4c4af5f12c961009f93ca772d095e6a0ca440b6eff00c31df0fe175824893cca12318a5b3f405200b67883c9edebce59ba8e8b3d74ba007ddbe0f2589eb7042059e72935e81b83b05dd752792c3c15396e4366f1047277e351b5fcdf49bad068d1e9271480a26d94d4a4c445f20352fc72571d0aa3d8003ac6c8816ea4a7366f48eca1f74e29073a8c8ddc7061c9106384ec59719a63e23fbf96ba1151ae3d67dc99f2382415d1565f4880416df74c632ed007996886ea53dfa100ff5f40984c8e4f027192accd8e6cd25fbd64b5002297c1779c05168dd10ad8111e4c8da8f74328b0886cb58853e4b2b43389ed1456f2528baf9343ac8c7581f5eb4f0f0de3e520cf2378508a77112871ac09e0758a889107334a1f5c0cbd4dc3019ff3683e6aa9e6ba09cd069a4bcabc5be7b83a0559a942dd6e674ec29950729f7f476f5b3e0c1ed1ba1240a997832d118e227d405e4cf8ba9dc04d1c4f9ffa50bc70e0cceb57617e123fb0e62a616a55c9722f3c074abf395048498f82f42c90edf5aa5ae1e1d90084fbb281c38ff6c8e298b4562b4c96abf678b12120a4f7376f14e6f5286435b8c96b70090d100b83b01714d5aa774e150a8f89678389fca37ced29545dad10128eaffe21bedb36c916ecd5fb75f976eeaef972700c91a6b5a64764bc3511fa3b9ec1889019dfa5fe7ed76c38f1af83d7462cb8e57cbf9bf97968a1c87d24dda377a4341723b766a63740cc75c7ba386e9b337e1fb39dd1567c46320f0d7adb9ca0ed51b6acbacd1ccd2aafad158b386df51164bd607c2941f9763beeff96a6a471acdd04f4935df10c93b8c6f418ce461c719e8977ae2f79cd9841a883e27a1e5de91a5b4b0c68a99dbf2bb9145c9595d074fbf929c10635c6f51ebfa3d72e8906e6a0a13568e81ff2d5a8dd046685347210bc2a4c40543e660cabfddd93719b09c3474e24f7249319625c56083a1866981193b261ed2bd1a26d2d475cc208b2d00dcad06ffc56d258d5768f3c60f52b38dd7500aedcbd3a8d2ce40002782b4cd330c44363d280a9ccf246445dc6545d02cc0bd08462b10e64eb1f623b261a52c3ddde8dba1760f418f2b2c93f5fd237e715cc48c9bf714d290a382e654c1b779f99626b58449e79d8193ed87d831695806593d9299dfb7645e7385478442e50a34f8ef50f21f888e864f067077a1997e90aeebead620eb70d68096e6187aab0ea4ad1aa92b280274228bbe2ac4c447d67d45bfc2d8c8269b96dd4e4073b02a5650c697a133993b3dd30b013300981d7680406f1cfd5f6694dd0fcf8ed57a1cc635b13e234c9717f4e19cd95466a36fbf961137943e5c0a9900351c369815b1f9067c0ff7666e7c6f385b73fbe9f0a178e2eb4fe981308c8a0382ec1b012af82fd0261e12a77891a9bc4337e665709faec06517259b58e2fe0671e58e6cae616d661ebe1a3a6dce55c8a5202a330e7eb15d4d916781e9449262816a6607ca54d49a6ed34c2a1d1834068eb7698cfa67a15a6a16f3b4b6c933277f32dc263445399fec86f26e19ee3ebd247c91b0e9d85ec309be10ae4c7ce07c51ca483ebe423aca23b86ff3f84b9cade8103f56a0cd859b3449b93d4ff6907204930bb3d8e0f6524c265f00d9738c22085cae08198d6569784f4ae647ddde30ec250fd3aa82172347ed25b4857843699f4ce17832df24cd5ad81d3b178f44e6f2a9822411d8808f347955c31cde9a65e82bcb32805e84da68eebf7107d22a29114170ad50901619c292cead5b1a469eba4294809e9342d05ed4357817cda1782b8d7eecfff004bc7ee90999a21132f8eb2ff2056ecd93d5e6c499d875ec1a947a32d788b865b20af0080d1d76c344b9866dd9dae86c993b74bc199dff0f5f7ee63945a70bf1886c9672774c783158c90c80767a6b1f749b46eafb67006944bf3eb61d6c72485467a9da702783e896b86749a6602c40bb4bf1bd312800bd3542965b56cfcadc51ba0fc58e2244164c2e10bbbc1253d1dabe052eeb8f8343e349db0398736a74b21b1bef6d1458783ec7dbade9b9cfe6d02c5c881e29cedef567030b9f2222ca1ffa106121a4398bdc898513c31b4aa9f0c23190ae8fa05a4ff70ebd370abdde9fa0ca96ccf0fe2abf9e74938579a0ab2dfe903f7ec89fc162b6f6c12d73733145b6927a16c9e9da90a3847b344cdb8157c8567987248c1748a07be51349e0a73fc69721b52e357793ff4ad8d34a305eb2cc31a1bf6a685414e6a7aaa687d753d66e8f6225f0dd4eb41a021b38f87268a11ea13c34b915bf16395ba5b179aae4b417a477d0890b46b1aecc1b376563b488c0285313d8eb659e4d069417353bd2dc87491a4974719e47d7c3bf6cf0019132aa7c0a28184592baaa4f46cd0ace7a52f9d9a96558f0faf39c3d5de142b69a1428964a7dae76a94ece13aad6487c03c459c98af04ebb684da1373cf3634f47149150362fc0354c9bb5ebe4e3f2a08c1c68c6e4ce93c590334106be3767e9e498bf3036dcdb7ecb2e4b8deef58d50c3856b2be29946d1dc77575fb97892985ababa23d3ef115d1cc606be70c14314a082f0cc69edcff2f05a600cd6f0b37d57981e3b7a2c7fe03bed034706fa39026282714e3f1a24dd1476cdb2959b33aed1f389dfbb8ca207290772439e0096bd768c0e0fddde72a559210180753d91aceb6468c53a33e947192c74e022e486028e460c8a99e1ee2a80afc7829ec397708e379c765d591a04fc0247134daec1399cc73423d0962211f60378fb7f5df197ed3b5b4b1e65a4036d908426029883f6d24ad8a4a48b68dd3f72569a7fca085b18cab04e6655e65009f0ae6dd17eb4d8e58829fe0ff23c2bee10750f0b81d79f94384ccc9bac720a5e24f7940a9022065f9c249145a4c99c2d1803fb9d003e85da5269ebd778b2cbf37863665c485a3038cb52ffcf739d36fa218e7f94e90f497d1f972af281757016711030367f592acd3e10adcea03f67f1a7681de70d4f4708bf01ebb9f41ddc55225acc0257854caa5703cf376d7e5cd26fe86209e222db64f18e6e71e0c5ae9fa798663c72747eab55345a8095da3b911fe1db3fbbdc50992f9b5bc80950c1950f7a4e2aa61379d54c1ba34e8de109eb960f9e17057477b0887660e5ab787e7c2a70f6d205411e27ef7caccbaa57ebb5f39b4a3c30e8840984d5adc621e52cb82a7380a1470ea3524ddacd5e78d4d5dc5a3ec67dd44a94ceb81dec275f6e6b3cc308936d3eb1420515682c7ae4cde46678ba24f4ecbbf58da0f1f40ce8d0cb9b052ce31f8d88cee5372d6f583f8019d0c900bd097149c50923c30769a5b0410cfad25c5ee4bac8df4a09e6c3eae183e422d89944dab9b4f9a9acd24e3cb7c5edde739663f78af756234c569f67aefd06b6345c661ea03b9fc31ea02f6e4241dc17fafdf54e7388e06d9f60e5918032f6dd169bd176b2d6ef7cb509866f01e1aba1a905046438ec0ca76a3b5c9da2d3a7820ad07e00f964d4aaf6f5072adc147829fa7be4a87604d7f1328937db5f56dd9c74e6e387e9cc91f7a802dec349d857b3b7b4fbe58f38f38dadf3f1021e7e728784389c894786d017963a05233500850cb7377c394da32550ebf758acb30091b3193f4e254125dc04c41885b01cf24bb804b32c1883698080d4494cdf3e7b3f85a002d83681329d8d989f4b04b511db74bb740aba59a7b4e68762c3f3874ac275d120a1b899f081e50aa70c694711eea34869987cfbe9c93dd04754fc15ba0d76ce6338abde618846b140c6adaf2a4ab6f551af3356429aee7af5872d006392253b640286aba50717266933000889af059889b0e4b5975f676a04fe0c3afcee7e235fdefeb8012dbb25f39540de4e247c0a6c8ae1ae58225d73c9b7b833f62757af7a287d5fa90a48ec3e423767499f409999fd19408c915e6f2829f2e1a940b457523e82be6941c04fdea86ebf25ba6381b09774375b9d641fa50a726b2b87abf228551670dfb1d87370dd39555338d53fc00e77b02a0f51891d16848d3c8e0e419050201057fa9f013c413b673baa9494d6109729c2bfe2c19651648b092a0907c05b3a3ffcb5ffaef8f866db5c52a30865b6dbbf3aea125e233929cc74e531c177e025c0c1cc72a938968bbecb52021ef2c383a47701d008167ddcab3cb49a07c5d5e4e42c10b7ebd09bf5c2d56204a7bab27f68551f80bf058080c4423e21292c999cae2cde06fc1cf748538cc48930177c099ec56e0bbca6ec1a194d441e5299a5911e4343885f14b38f367723a2e245248d5851868078570d578d98da50ac879babb03f4070527f7cf3538bf310ed4cafb452c564d4f51eeb517ed4de15ba2bba8426f932242fd939b9b88e4c84de678828fbae3dd5e84d0a66cfaf99c7a2cabf8ad1e2c385a531ac9ec9218e2263906e9878be15081102feb17e4d7637bb81ddab9e7a2cd66d99ba6c59a3014704b728943bd04effe25b3b1fc09bc0c5cd1d1e2199b7636083602b6300c4fed40a3a9f826d68811a6cb4b077eaf7f2086ffb58209e3796514dccce0ae284c8517ea82140ee3458a29688e9450d2e360534cf3222b33bc82933497a29f1844f3e7142d9f50aaca48bc8a9ac09c180cb83a68857807aa87f810a2f3d1c645d57abd3d8ea37de71bb5492c0a98dd0a5d068839be28b44613279f8f0f3433178cdcc1719d907c7b35be9611c53d1a2728c89b48f445ff327e939016d6ccf6364605e8a491aa5a5834580dba2582d9b3e2a793c070cefcc8cf148fe8d2bf77f76d6c4b0e6fbd4e66303de78912ca00189c53eb78ebf075b410ee6109312a56ac618408bd94b204203d8c26095448e561d54370d442dbef37b76de1a641422fa7496d3f5538277b4c7ee1f5445aa66e04f9e78c61b2f600f9555dd957c44481ca2e024964d1cf19ee5b5d2096637be184b4847e441c61626e9bc4939de11e663ca3ed626ed85906bc01816a914c00cba2d7bbcba5c9ac0e341e31d370a3785c3aa386ccc20f3cf45969dfba84b6873eea40f3d0397de66a70e1ad1879ca2a47d300b80bc6284f52ef813ef32752d313383edde58e6454cd904c87b72402f8e2a52d95ce051a33aa032071928d04dc56a14ca90b6e22404757414e31400ea8eb65ce3f175d16094a07693e14af64bf2926399392e96d8b65bc7a557a6937932acedcbb8d81707769a6f90b08164abae06cd40b596f864f6d1026c32560f68422d054218fc67267ca0ef3efbe7259cc50ac9dbe52fdee60d6dcd1e766f778516299497f485f595432bb25d331d8ca2ead9657994c14c4f19c7c12b7ace7032b3b5deb02c2680ea7fc94ccde846190667a7d37386c073dd05259d3ed7db020bd06f396f0211fc21fff862ac25a0b4731463dee4ed40950c089c7bacbf7de16628816284b4025fd8f12affb27d50884f18811738761a3c4d05c501716b6d38343bd0c7bc00f8568644f5e0ca9229d8d1663ff87c8075229fb072b8bab989d88ac6e55861bf8927a4c573ecfe81527a61be4f3c3d1f745df5cb26389ed01a30e1598628f5f46e97cef50b16415bcb02ea0f87eba9a3639e21fe8094661c230e31b2dd78679a915c1b9fceadab41fe4d5ce79d4b8fff7320f3f548756bc0270b93a95ad81c37c059d3c00f8f7725b21e2b20103d3f925461cc732a8f94683e9b855fcd830ac3e05a1cc002a2116ec331005a7b3afe56f6f95a2bf41f726f10d5525e3159d4600a083d78732b5f8776130495a834e281006c73346ef4bbc73f9d7ab99fb04f355c1c4b8988673472455e3cf9bfdd88b872f878fa49387b6b2e45c6f1fa1923f5798fcad6affedae037807c58e32cae29ec23f65ff2c975c9762a11164293d8ff73c58088f3a6d3ca22e2496701b6f1d3a5cc7acfbe15fcd0d140b1a6875af638382310fb710d989892fbad5389e7c5fbd9d569fa2ff9dc94fcc54c92d24a55ab6b656979f39830942cb52602bce87fb629909c36c1cc77f20a82d08e795d4f11b9a2389206264b3d41f2c62f25a82c7a5335ef05b42c0241dc2a359c060580f0aa8231fe6b62d7d5d02d10dbf47163ff951071c19d434495b17304a5629c09b70f4930d629a0aae5083c95781f85cfa97d21cc21679141b4ab3ab942843a82a579f77be4e87e87e6d1d111a44a725743f2f618e0cb103a722fddb62bbf4b80709c5c23b8cc83f243c82ea50e5cd32d7fb3d833091c1ec53970418c24707070a5d851700797cc6fc5f459bf436d332d4a5ab395ba250bd16874b30c4c8617b139594b4190bd0d4d6d6829b19531358fd80d3a10cc29cd90e7b86c736483e82df61af9bbbb9deaddf2bd61b66adc7ec9f8ccce0647be08f8c8b650b2d62ec2878a68cb4a7ecd927caddb493cde97c5d325b05b2e2cf8df5c509ff70cb2ca0d8ed0e8ad537d45bad6b68c78d4ac69b1010784e84c140bee3bf531fdc024456855b75938ba4ba1bd405e163155909831e5962aaf4354cbed8cf7fcb35476029186d0cb4c333b74103e8364173617bc0140c8206ab33fdf159addd034e7a00ed6daa87db5f381898dad0acb5298c824eac379fef9cf9fd83756f9c9252afd5e46c69b724732d57da91c084a536d72271a64342973a361d425aa80403a7b6587a094c1edd2e72433842536804dec52afcdcb8963cfc73774ac5f15599139cab48064afa2d7fae1ad71c3719ac2abe52e071181f4a6e0273cd2483a765bbec876eb75ace5bb8631522cbe72dbcb60c6e5ee22c80422a705f3d010bf4ed4354d13397828ddbe7bd7c0c19b504abb1c711655c6820de062048622be8cbeecc21af745602ce886804f45dd92dcafe46fca88c5705ee35c699b0c54accfe683b18f101e18df1bf056d0f8c94bb48151695e963a10739eccab023fa0831750998f863dcb6f6757d66cda56ae017ecf4169022e6af61b94ec4e2c0a5baeda5e1bf3eee76c6abe02fa22e4d2c095585e8ef18e0cf1f75999853e4c0a3270995aa28cbdc53e81f20e18be2d0cdfbe49c17b949395d7fda986e541f6737677b8338639778a75861d64277a4f0a231589489dc10102e8105cefc93b7e81d0b45b9b0fde5a722e8ba62185f8a53da3f9c4709af1f5c8d2e1fdfe23d73127f0c9f04fc1e2581b5c8464f203d7d09982d009ece02439453cead6ee10e20bd95a2a0a85292069ff20e302023a5ba983f7de0e1c7c4e6394d99242d9cef38c2695ad7005fa29c876460d01c0eb7b3ffbff5663e12076aecd377b49991ddef4020c8d40d740c0d5ab0dfecc00718760956ed5e3a4148466f43acc1aebc72e80105506776ebd89b68ba0fa32780db91b5c48f3cddeefec90201aac8ee51d9440861268e5f57867d9a053e72e41692db60a061a18351995a9135004e881bc8a046fa1b24029dfbe864582ad94460b3c675d1221ff9eb6236052534fe5edf22426e15780f90da62f293356de6bc20adc16603b44ce6c08837b97262c0463be0b4cf5f52a36e189f6a97c2c7ecea9038b6155d3e059e2a8821d19cf99bb86d7a4e44c8e12932c0b5ea957f461fee46a854cffe9cbaa4cb29a0d99ef14ad8e69d0c9e3aae3ad1769724ef1a3d12e7aecaa3c573702c09604b4ebcdcc65015c0f9058ab56b2c73072994419ddfc48e6a9b2a81b7f1771cc9c8fcbea7755e2703bb4c728beb8a4ebe55c12c153319dd699200c0fbc375833046b54a263e68f1208d9551b5dd73c0f17e10b4f4695c77d199d35a6643969e49819f5110cf993917ff39757c38e9bfbf2305120a0ce4c654e07e7cc6a7ac70038302dd94df352d65551127ce81626266b018f8fd57ff41c731ff2576b2db17f78d55b7c9a9a24148ce2d7d7ab58938c9cf83d23daa40963a45c748aa9d90d812bee4966ea4a8de42b38b21bcaacf8a93eac78b26c5f04c66cddebd0faf6d7af4b15c6892b877000624a3f2995226ad32a8cc3b0b9822d1c424dbaf911fe873e91313c172238811a5b468bc3347b279382a2b220ddeaba090be2a516d6e09136ceb88df25fae30df5455a433baa822c1d7ca399fa54ad2f48dc1cff8108e94a857c35f062eb339e3519816ed1262d82306d77138e4b33f4610b6b1ed1a6b4d4c6b6f7105aac01939750f04bc29b18533752da284e10e5abf69fac7c6f683e78f0f4e6fcd129b15d34f5b3784477ca7fc888874fa221a203587b2ace79754941c4ea37db6e30a18b13557704f1d82cdfc68e334b089edce5ca8eec3e3f13f33b8f76977fab862bfeff9722a56988339625061cf04519358d5007183b8acaef0cf159d7fbed20d6dbcc5014c123ccbf85b9cb7e4768a9a710356a988048c87d279a38ea116734a8c069948c054d699501aa8526b893f83c3c72d0af2b306fa83446a76be0f79b688109e1cb0c3ee324203dc6fff13635c3e765f8364d9367c14e6634cc1a9edf23c4add9aa2a5a3d83521dbdc863071b96d2544b3b3df5fcd2ca24c34db3f14f31c5edde2ed9dc8dd2d74d89401826e0d293a1dddd8ff116b1d96de1cfe902921cbb761d75eccf750d5492905fc4b557e9e520c03b8e1c1f1860bd5b39bfde968e4905484c5a0144682a95eda5dba778951132ecd0b97a5af5fd13ae189053515ffa8e1e26ed44f91a42ed0bcd79e52005e67125d547f785c5647cff435ec51984d0f1b650186bbee086a2ad3dad1d993bc8862822b609c1ee5d7d81d1ba631ce6536e79df36063392175e3cc50daebbab9b315f8f6b6e6179a4b5faa20943d4165bf4e4b9d2a54a68080570c3883bd5e2d5b33e3f9524a22f233db80653838eb462ab9c35d61de8810244c25a72293aaa2d2ac20bc5660f9465481711444438abc4e31cbb94491ed0df842c0fe8b8575bc1408ab9ff90f7e137c94ddce74656304541f20933ffd8c2371cb544418c4ba9ecf1919657f6905831f0893b5db9182223e5f6218de7fd6cc5e94d4876dcc3bc970df8a00eff78260478348fe86cefae1652b9895c90441fe532575e89057c602bfe085c5f9d63727f90d1f4ba5537ee0f7990bf8c17b8a85034d30210647cef147c02bf1365d92859a3ceed5290930f8144d4e50ea7261fe7f9444f81fd9e16f6acb2d5f24551ea676eddb65343b3e3944a4895c8c56f404dd061e4cbf7e096f1921b8b415e7645cdb77355deb69a463c706914668fbd382b086e8328acb18dd303f87215481f0e2dbdeebd1bba243ec7ee369156e2b4c9fb801c35cc95a291a801a36043dcd0109530927211e644d41a9d0bd8443da4dd8c815a217fa93c99fde264ca03de6eeb37728d28d204696874a30d9cd825bb8e77d189f848a5c9f8d6b8e16916aa2274b67c8b4d39202bfd9a7f5c7900b6f78b8d88dd36007b602f16c27bf80df00f27f97140e1e4d00c31ae2cb71b87d1b46c9b0ba408ca29848ba6e25e78c338866869e4d8f3c812cdd49751337b7d583b489f7578d9930a296ad51615d249c0c6d94277cb58620b5b56eb3ea063b84584ce71dd7877d75f1d50e075f25eba5d9fb99116f810e5c9240150bb454d9844dad18fae2418bd6d53df1d4a624c1437ca362fe8fe77f31ae66b6f067158649859715a4e38606f6019a49c0f24383a71460aa267c8988b581b5e444e3130834e3f4b32915ce769d779ae5236dcf57e35e856e456c2b6dd8d2c81450fe95dbebd1aae72addad3c767b52b404dfacbfa5aa3606309b92359c2e654ab7935a34519d01866de98c0b54d6d23f921b3edb0b4e0f2f82cff7c90af1aec2117333379d3239c67cfbd2c314afdbe087d4508cf0ee6d35ac29a9a77ce63e7fd6c72bfc80d78c15365d1ca19ee0ae49d8fe0084039d4777d6b7a98b8d6d790ac07c0ce365ddc8461e234aad898002cc3a345f21d29813f99089e28af1fc055cd66de160e2157ef26fbdbd0764ffae05753654945ae25708131b6b31a1f183798a9a51dfc18ed0432fd99b9fca43aff2184cc705eb51a78037c3e1ca39003ac7c0c79ca49c73dbf58d0ad908702af3e6baf49dec3b0837d17c0de2d09fd9a5c71391406a4d2fc7448511685334c21d6b7d75eb167f799b3b878609276f2d2f09a86839bdc7bf7d1c6e4e7b408921348dfd7179a97c0704b13129fcefeed0cd1ea6fc0ba5c48dac3780f64f71efa9374d2ce7cdf73c048a508325e2caeb1bf039733517848b04835ab238687999e5ba1e0473957b5322e205e9afbc7e4d5a6f19871dc1fa6029bc26831f721b3f4f607f5799e9d79ad5837dee7dc9c8d2129e0e8a4c76a4bcb42063e90d6f9e34ad199216cec403ab595355fcb669534933988853dbb7ade13a847d55a45db916ba2866bc6984406d42af22ef28db612e6772c80161485e806c8ecdec67c24157f70177aa46c083d5dbac5246b614ec99c65f11491e54c44688d151656000a63cfe65f81e2dca30d5484a3119adcfb74a1b83c950bf5b6b8b8bd7976726a175dda053548c91f56c6e908e0eaacf9b0af0c59752857cac717e1520e3f5e91a2ef053831c66513f87743932b88ac0bd0ff7bf3c6d2f3ac427281da64ed315415f9fc552c525620789d36b705b2e1753713be53d49d33c85397403df5b38380b3924e073879609a5cb50509b8fd0857337f51e8a5f38dd156615881bce4893059dbe96aa6cf21e94038e126e5262a889f3d2fdb078d94ce7e27c2ca6d9fcef43c3d4a9865d2fa53010ce6136655615806f1b18540a9e6d90da3a78a33a32e95af1d7fe284b7df91426b140c097c07d0ab9298e16bee69589f24714d8b60ebe935257414760d609cad5403e6e7f643bd6febd21db8faf6b8836404205f6c84c8658fdf7cf0bf0c4f52344091a6880f94d89a14ea786a063f3a389a67e41cff836e1d3250b471d800153b302a871ab886afc2c8c6670cc18d0b49f653c99d6d7a1031eeba65b5496c574215fb372f9336a540fabe262c376dde12ec1f796d37162ea131aed640ba7ac300633abf495a33e82751e346699b5257b50e72066f2921ce01602d1ef946b8177706dd4433c8c99907684a1c195e9453b5d3fec60314dae05f77568b2aa5c6fd5b0fd58a1ed3964e7aa40914c03d877ca4614e8455ea829c91537ff965cddf1fcad339e2006b008d8aceb564adeb418915e489e426793db1c6e73b4a5ab74b9ab6662179006dba497b4cf40663b78bc0502ec32ca3fb754cde27f426ad7948ef326841ec7ae9c85b15d0cec356fd1c82a1ea5be6cf7489ba16036f4d312b42cfa91fd217eef5568c212c1e72754c26454182e6e3a94a26cca3858fdabd926febfa853cc671b5c8c4a5703e8e8357c038c021b0c514a978290375150445792ed8158db44a710360628e679f64c263181611ae1948569b36de28cb6c71b9216ac0dd6a730b18cf1a4f0e79e6095f6747147fd8a1540e32688c6f197fdbf1850e176bc125a9092246e1e8ada07233e6a9fce47934d91d17e695bb74e7b07f411f822ac4709b71bd9f95d0f33b20cd0beaa26257f21428365a7bf941d774d7ca9549013a196f114969fc5697dd1f39a45720e06889115ddfde4f51b8a1fae8e808ea57e00cc4425e7a2c16f602bc491c7b7837198f1964d1fc34a916579020f436046cd3b4061c48e09f0c3120b8fb8d1f9ee8e7131cd0fa6dffb8462e899f1854b06262a7489f610d23be419b4fa1e5bd149dc18c480e13ceac79e5813b517b4c39a501b6152171025be1ff9ba08cc0883c03265690dffc9db0f7a4d7e64afacbdcbaf67dc61b019156519e19fba2edb050e5f5aaa89cd253eb0088aa52d364ad441e088e43e03302248be1820da78faed27f65d182f9ad1a5b83a06a1869934a789961c97c49ed2fc638877e151a1272c583723d3d88620e6918d2b705201384c95cd8d2ff562b578f306cc52b608735254008738140e230a6313674faec7aefa1666ba523d8fab2ab1611280d8a7acbea2d0f4133672a39b4929c9bdec8753df66660b7c1ebda2a1dd788fd328bc25153ba17cfc08f0ba865c4f3c12585c635bc3b7e96e47732d74d58be0b0da65cd0bf67e1236fe8e8cc9e9591065f6e2689734fb7f64e1119756cfa67f15a99dd914166138db813023333c10f5972f9c01f9b89b763b1fe9e08377190b2de890fb1a3d5f198f46d8d95a2dc3d264a31fb97a8d8c5ee668dc40fc69e65daf287928fc7b59ef44d47e9da8df1bac0ee5a5ee8f196295ac1a3e536336ca46b667ddf919dfca6df84c7a23cf45101852884e79d78608c767f2696fa90a27104e846266777f7120d4328162e1c3910748a2a446f750b8dfb299dc6e7c84ddc12dc57485eb543e60d02b402b3c4b35322670b1288ab32fabff8520d3d6a30dcc453ef1e6f71fd9f31d6bbd86f6c721759dcd6304c96e0641195e8150c22154de7c08b442d15a98084b1375be520cde2b5b68e654bfc2cf3ef9b1972c290d5c038b379ca38e6b09b129028ee4cf4fd6ccc7c4a6931a2644fd136131f490735d5128daa4f667ab741f7e9d4e41b1e70072581c7cb80a33a3c03f6f329e28db2c1c0ed6345b05d3b583c4e35648d5edba4884aea9b71cd3f691fb5101ca68772910927201675a22f879283161333b2106de638e12905316c130df482f8f5a0d5c30001adc6590ead0aca8e9d72016a67f937e3b0129e5042db5006fe8e8860fd43d343ca31d0c3bea3712d911d57a868e4eb95b4e005a9b10cd975198d60d426957c4d268ecf8a4261df359191429e797d273ace08b765d7b8c392f683e0cf5baea8ddd06336bc592c9dcfe802479ffa984caca5dae864ab73262d4a20c172e717e4a449e66428eb8b6c889e511d30f54a922ab1ec942a1e4d7a8934a018cf8b7beab8470d4f117390c072640d79877c1ea3d07821ef0f81c7bd433ada2d662fe168588125d84dc771d58fc04e1e83e41be00bdfdc4a17f4ecb32db75147a61c3646e0e4d3357aef1900e6a674ad1ec179bf72adf3426785c4c00990d97b868ccf0f502b8b46f28d7f26f29450c3ff2ba03e157579b9e87134480a31c3f43e324c293a95ad374770b5595dd4652ab8d7b064a01aa98f455461c35e30090f31f6ba653f8ef5021e7aa350bcc92ce020db74f6dc5167854067768a460b532aed67cf53d0eeeb5af5d246f704a1a224bf6174b6f6c9025ef1d71fcf5154002ba244689ab061289b7355d299121558229c3170e54255474738154a099f8392c9179612a827242804b88400159c1ed4132f1fd3a3140c4e520688ceeed257770beee032dea3c1afa5b0d3a0a9bb812a7596496858dceff4cd185ede32086b2f4f4b84b23e8c71bb4cf083e68e507c90523ec086363fbf971735b145082eb365dcde7210b18c010459ad3b21b7bd0fd3beba6324801f86b460f1da31788c4f89efd6399362a07a24a95430ed54851436f846861093971f200f3bf0984f0bb2527d4e48d85b794b947e06ff9de61ec0182a53d40aac8e90f21d6f71a504acd8a61b8684583950264027ba9795d861e2a988d8ce151990d5100a5c46cbb65c5e1bf625ee107cc1b0798e8443151bbd9cc3784b1b3a6ca09bd3b86825f561cd1b15beb3451713c2b7b6d3570c15c9d81e2bea276c4221847a67dee69b3018cb9a7a404dee81afa18d42047f71c97184c9d3524d3fef3a056c4da4269be298c1dbd2e0db8ee9a2c13c08c491cc3b2eb28da0f47b4b28fa7cfcdf4838c9a72b587b60b8ffaee94ea98e83697262c45cc96a60f4ab90953ca027c7e43e76a80c35bea5a1ada59701f1600ef509b96b718079c9b01389e761a4ad8fcc66d0fe89dddc2f65b00b6c6f646ba8e46fc36dc1d8b67ddc3e9b5390c0406b1177b02f83dc3c09a435d0b6fd225ee6f1a24601da0cc9ae6732d1ca9151c8a8c60d72e0d4308f443dc543b70c0d4880d1eccb8274702eae380b2297bfd1908bb4d23e566cb17111309b0542bb1c00c4a281434fdf35ab477769a64c7cff9fab661ae69d2f9598087c496b015730db089eb788113f7e2465930b06899da8a74bc8f1d722095003e06f61f9c1e7ace2ecffff9b01df03e857fb00f16866e8e5c9a063466ff2ebc0ed0bbba03905dca42568102cc379e82529e737ac84fbfb2500534fa62a22cd3b1a81cb8b130ddb09dc6b6e505de1c8b8227b120b0803ac61d4bb6a38c446f356a4dd27bd4633fd3c9465a72c00028e1055a9e078660003009654b707541a181f721c0bf19fc5ec2c44bf157048fcc3ede5b1632a696454f1fc047e96159c52c154fb762aa7988b732cda95a40512a757d4c5646649ac2f0a428541d8e0a87ec3b5f8e4c978103880f4bcb31e3130cdde048e0b264a74f74f17645630f84cf9b014476f77fc440ae5ca17accf6eefb0304802d3dab8e2bbb4ae82746924382914a21fe058d92f26b84b8d11fffef7d62034ce985c01530c290018c2a4c265500a246d8306c49a2d1c7f8cafcfc82cd15102731eacd81f6b94d2e321d18366e3d00d92b145528129acac6d942d01e9f098951ef16412e63a9b939ddecc0af262ec9e1237154f0baf958102bd2cff0402214947a546583e11c98c75911888d568cdaeca73a29b845c216a682d9179217af0bf3a9416aa7e9f41703ff19f1dba0fedd0e3d4c35d78334e6b236de2f90631c42293649bc7d72030a4d3fd6ad64f03cd9a4ae830c10c29599f633573a069368334f4e254cb40bf498224ce4fea3be265094b52c96edba519d03a1fe65495217665a7f9d2688ac28a11d9146f7790c616b8a9f85fb503784168a799140a60cbe31ffcf1878b554b478bff866ac4b3dceca54ce275a5bfea6e9a0440205946839df27203687dbe0ddb782794870c6ec24b0f62b6803f3f9236588370c7365b451d32977d3c6ceb4bc1b799da62119efe74a1e34be35d02bf185eaf31d8711a63df7e2a6d2e467215b448a99a671823ad019c2be216504a4920a4029a77f8a2daed9634a8ea61e382c41b19a1aef9d2225e654b67c72413709ef6a5d6216ff9f74ae4be4da155c73d5c3827c851d95b1e5680b5a4f9a9a96f7f31eae5a1cbb42d2ee5676ace60dfdbb59c0457c2fb8f85627723da9726252ab524422788ec9037e78785ed60fe741721406055d53d5b65241d82fb036afdc6be6761d1f2547d6a81fe8dbda387ccd6539deee4def091b0caf1a4259445752a8b9fa01a2d16084a5360088dcd3d7f8709c236652b31084ac8b2841eb52ab83889dfea869066dbe209a9d499a081b6f52330713f6ecfa84214a79e0fb5fb45f69815d8e79129c15535d0b45b72940160e2610b16fc9ec7607282a45fafb37aece7afff52551795e9a62c57d560e7c33a7cbe946d49e7e2b129849c2a3b63c828affdb9d3c56bbe6844dfb52d48bdb948d66e37b95b7085109d40ba83aa089c85e68f703fb73ffa80084d403895018825aa3464f6659e89378ef0fc9f28d42eb44aedc87f09d28ed7a8b6cfe594fa62ac7062892885cb6cffcc72b8c61e2e5d87c13053b1d3bfd83a95db1b21b634139a74aa38320c5687dcde4b9407ad6f3611a1a1994420770ffe51dafc0bd189748c469d8ae41e4b9d343081e6ec9900173f9c9dd8fd49fed16836320d8606afb45e99060e27c362097bffddf7377db0de3621aea54adfb857af4bce2409dd32cdd3f46fd4b1d31e70264a7c28d3df6d852a71661ebf509f1d614377ab5ffd26316adf78b02e79a3de922a13fab89d668810e3ece448c838ce721066a3eafa5d0159e570c2d0ca52d264a26b28b1fa4fed81757981602ba6bb8005026e01f952c57d5a5a7472d7218964a90a031ade52ca5dde3372194c93b0e463c3f8527aa9febd81a9a52d8a775bc7f3689fd8f1009834e525167b2ae772e7a5d411273acc8466fc91e03932fd5708458eda659e040705c9c556796d285f677c3afdccce0cec3c2e48466a9f542855f290dd4a8eb9acde188a521cc5002daa83d087f1183caf433ba1693a083490c388a2b035fff97abff43206adb32f76e80a784d6494915f6923c4f349c6ffaa9021d89440530a64736093a0678d46f790d549fd85dbc5365ccc5a3137f67a55f361b2b489c9c45f2f8411c3ef16bce278ba6991e7377dda09f8e532936673979a310759be51c292e0a809ae066ebc1aadb075a02794524fe6e8e69ed003aaf2e560063743a8a7eae03dc16f38314bc412580d54cc75ca3d9f46babec10c1c683a08de0823089fb2e9900bd0c6dd4254aab344cf15da651660b8f22197ade5354ee7b6b957b0fdaea5860aed5b16b4a0c626d2c9e6dd7e8b1dde44d5d759c49eb51ebff6c43ad8f178f00694a968a6e1d461df1293ea42b858fb17caf256b1a6cb06823e1a94e89e626397f2350f7ae5d7126ce187c18ba8f0edfc17b312ebc5ce670c23b9e873bc4bdde80410f4d22af650b3a0ea0c7d28347f51f74d27c452c50493f1c1355e92c0083c3fa6be19927963dc376318a0d41b4b86597b35f37c1da4537eaf3e9c340a3ae22abde7db33ada76cf4f509d134bae8cd2b7253ca1f42ce134de9c9aeab88790fc10d6e47954dbae920581c8be590bb3773cf2c685af78edf940541934f6c13605c0e6dfccf18c4ae30416ff8ec8059e04d6ca818e3d426ad070468c7c1645340294d54c7f6cdd75fad6fdeb032bc2ac04cfcc2b581a1a0c9ee7d02a1fb2a387480769753f26d0c3b9fd4d51f4db501dfb03ddbb3db7cea965fe1ffd77f6d11f0c436cae24f6e1e2f3ad21f974a84a268d7f0a5beda0de710d3ee8406582100c8900f5f945ff5871f03356f7bbfe5af3fb0952af1bdcfebaaec93e8cbafd0e7bff2e01e297d27a4d3257ae0f95dad06cecf4840e6bf592ee5852564d1cfde06970feb5bfb7dae308e1afc97c6dfa852075e993c2c93dc3f90f5487ea58ef625aadfa3979f2cbb3c1f7f878e53c0c4524ba7ca2f6ef6b0c61366c7a041b3451b4f7df859ccfff200c6ef8a3a7219d903661746c178dcc44c581609c67b55768c07362f1113eca76eb7791feb8576f388ff6bde16b9f4b3ff30dceec88d0dfb8f5528dc03a03b6c4f55a0121e3f09f192df358341fb2df5dce689436dadd933382d77a9f1c89e216b7fe6af67afffd62943da509556a837cc51186bdd6b6c5106c1c2debc0778f77ef333311d91ab7ff5818e955266e3dd43b6a7ab57ed36bc9b0b8fda2d0565dbd205ef710ccd1a68aa1230cefdae1b0c655789cf47a2872cef6c05a0e934c48cdf7e6b151705daf3f5cbebdf66562ec420e277a338437337fa1b25dbd71c121b391f1c81a405fc8ab7243eb7e3c2c6c065a070379a7fa303aff7f7ae22a32f9df85c8b0869c2610bc23855e3962f5d5d2c5fb6ba588973ecacabf5d76b17db32cb17da3ec62fb56d9c4f2edb289f5dbb28ba51fe3b8395b5c693353170a8cb538e4cce158aca25586900bc66f90503b1af2c73b9ef3ccb40a679969354e32cbea9c33d3aa9c65a65539cd2cab709619ab729a5956e53c33acce6966582ddcb2da5f2f5dbcbec652cf72e3ff3c6ff6327580dbb8265b091f43340708e0b413a7a9e7e066fe031dbab9e1d0e60861998ebbcb1538b6a3fd6dd003fd623d11faffc2fab7a7a6b45935e405cd1b62aea7597a01886e78e4f92d1c3222c975a6b0211d29fe1d64ff33a6debf593f4bf882dfe0d5eb16e84bf61938d68fb9925eb51d4299579e72f5b594bb8d6b709dddbd5ce5442083d19d3959e05a694897eefbff8bfe1893643d534ec03a5c061d4740c33f1c8e8c476d84d938e8f2a0c2cedfea0f67810c08bcaed2ac0725f6c50464c61ae94d589a711ad2f4b1cf95c2b5765b4e4853e7110fb54b3df774c2c3e9552e3c50d193e6e94b90a9626a3a4e98424e9da609647d70170c3314b7f9aa74c5634955bd790e7601640bea5796802ed87e0194189b13e270de3890a52e709bf75470b30d48e45efa69ca58e8175409ed47d8328edb497f357dc26414048e831351fd0bf7e4ef253acfc3dbb2929d101b4a24df61e3f468e8a748af795c12a1c416c220fa94c9f2d7c9cfb915b2b7e8ac4ee8e1a0b68e2b54d9f1b8fb8bcaa5497e6cd0c9fdbf253c8a226e4f0a171910fa6a528ad111c9914996f357ebbd9afe8caa0b614ef18b5b4ce0742e9fd901c5684c4f77cc3a6943de4f447e97255c2e54b19ee4d0203b2e340e7d6f59b7b8b944b68461bb1e21e43b8097fdf4bf342e7df48ec7b0d9aa520168c1d16fddcd583906cfa044815936ebc0e56674e79b27a2c2ed64d004253fa804d4c3d6396b9be72406c351c7e722c511e98c3f40e4ca8c71bed2cc79b8843c816aa5e897242fcc18a52fbe1583976d86228ff92a05ba730c419212808ee60dcf457e88e59b455795b67eb163e21e8e7d4d07b834d2d2a3950cfd95103cb2b21c665c537fc1370b046628b2e0c6f3b80e971c62849a721c504f715a5e1d65e5b68c04592c0d230f3410c0133af30a6235f3041a79acd3e2bac5f59330026abef8171e8dbcaae64a7c708e4159f47486c5bb91c0195f3e1112a00117551e046895406fcd0729a7ba4ed4c05233075ea107cfb91d088ced2ee7430e1faf069a35666b1304c0acb692ad0a73269ba8aa36d3a8f751e10d98be8edb905d90380ee7744aef7605fc6c7efa119bf5f3a7dd9602266ab2bc64ab5238f764a6caf6ac508138cf7ffce20e499c3206ec7afe96bf6032e55c4b6ced442a23467c7c5786f3f1839a0aace243a55cdba6dcbbfa1b6940f2d7e8cfa7d4b935579e297813fe5d0e4e87d580cf2f0a32686dd9d43644a2e166a1862ba7981dbf577b0686bdebd8ddb9b8b2d547d00d1fcddd19492e163cda1c000d8ebb31fb02a0195db1749e2ceca90429b2fa3cc4070bda8e5caa7b8c6b0468067186fbd89e752819f133ded8bd8eb98868ed414cde1e05c1a039cf52e4e0644d0e054574f7c201436b794a9fcdf8f458ea07cd3ef7326b2e8bb6735c5925fb0d20243a42736afb2d3c21ff008851dbc75081e7fae5e71d80c573b665917b27018f573b8a4f76d1103abe39e0404e1eab700f0ebd6762ce8ad51578961b10c1aef24ed42238c53d3f1bb5ab19b9eca068d325ca29b5c3e7f0021278588e54620102dee14f09a85c2ce7aa6285d1a0b55b1e0d08063bfdfdd4be8e7a16133c26fef0982a4c3fc01484d8d426358878415cf79fb930da98041b3a095b6e824b1d0605b1e8ff165768fde42dc8854c77dab8e35cc1a251cf4dbc82d697f7413e397f2378544a0ea0b5b91b7d2c5a6da76d9ccbe42a6e3a77e0ca0573eb73fbb5908b06b787dfd61d9fa61527da12251a3804df393b2443c49fcb89470e67f215136d78915d2b1236594aec55733ed8fb12e98b106622bd42f61e8822b9913d8f289790ebdde61627ad82bcf4be8e0d0d808822b952a5727103fb4cfb25c26e5d34364595d6eaa5bc356ccda783d927dc322ea491356e579bd3cca51e54396e27dab7ced080aed5b59b74bfe3624df046badf90c29a05f864e325e6f5c556b0392c51a296846e755a2ff7f36fd7d79912bb31a0c32a8101c6408f142c5b41b8455841617a94fa1e86f71f988e433bfec5acdc0fadf06db00297e9dfcf8f0e5e6ab0902607f1eeca420e6f58a0684debfae45d7cf474381ea0f5a5cda403533a9af0d3907c71e69948d70230d453d61f0adf11a89fafa6691eb596af4236af4c14e7b9cf07ed290d212051069a22a6319b1611d687fcc9699cf5119bce0420f827e20d462aef87202d6de3aab882fcd7251310edaabbe99ea3d0bb7a41776d33f7ae173115fe68267ec83092c5bec00c390814d177469fbca8197423a78ea34319e31194b5d9792b2163a411eaea764574358c01d4d8e04b1620fa0d873d1c063b0dd9a958bb5f7e388d2da07f0dde5921de79c0dee705d96b89936ca17ef0e370e702dff0bfc1e440cf84ad27b2c969adeaf52dc732c80e7805e832b32daa77f1d1d3e17880d69736930e44e6bc3800449c7902961bae4237dc13d4cf66579deb66698d176c7c72cd16407fd1caecd2c629c7df0ae77fa352d947c98a0cd68f001284a973b011d02019980571a01dc81c61ccac6c07042306fc7ebee0c598b92e37c6c709d5c727346e52d05dddccc7271f8e2682826bc423e83eb15af596d5707afaa46c9feacdd5a469e7c5b0941d10224bca3abff00135f3a7c5f2e0e8850c9640f1b35f3c135fa537df3c006c41a11c0836bca0b95db302dd8d11897fbd7d62325cd4eb43313a43bff779a1945330c406e083a052ea041634c2917dc29e0d35829244669908520edb0cafb8bec39afc1feb1176771d2686070701d0c3cf7815999c2bccb54c0ddb6d8bd9e3ddc3808d96b619fa5aac575dbc02d939fd4bb76e985614cc027c20950d7f033fce51488c99cf1e0d10f033a0e925d14be213a3b9df102b663039cb5bb0f265d6173d7441692dccd38631568bdac2e88189a86563d43d41ba94fa6c0c60a23b5d4741425ae2a5014cf123eb45f33b195e80516be56777f18898d00d13082a34952c04e2edc27e5ba74aa0169ed06f79d65736013440d692e683c1fe07a8eddf928401dd078fa808c2118af6ffaac63e13960917230168a75029ea7160c90bc81918013565f1bf6954e659848b967aa8221ebffed2178830184abf41066f09d32591dc7a244b881f74a2a537cb47887ff7fe5e8e340137db9f496b4e44757d2a54c8db0edffb375e39cea0f415d3f063408ee6a6faf1f0e3fa3d9e17c703e6caaa411571be879c1db9d361c43d79f7d465e0ee39fc3215a96551ef1a2281250eae4912a54aaba0c451ddeba0dc83a53047d8373f135bbc95eb0b144e29cd38544f6ab81e405890d14951fc8e8f1192a70ba0091ec612a344b9749ca50d84edfb77673484c7e48fdcc9bccac91a4952ef518df0e09ca39b6c3f32569c5e58dff186037e1ec8e3e0e5417194b419d868e0f4fe6ac81f6885efccc4dee7db95ddd06d9500c613f675be9931baa0f85d44fb5556770d4f2d9e2f7f49b34735e8101558111644026ed58bc7554b1f99ad33a251d25f059b7b1a2701829055d85fc5cede4f7c2368d88c5fb62dbde81a63b640e53df8177c343235b6bcccdb53f978ec6842f50866cdbe8e6cce237eba1c8c12708723dbed24b63d27a21803feb5e0b32a702a312e32d2669b45c3b32aa946d56ce3b070ab32ba55efe51f015cc8cc81cc11a91533dd5ddf1013ea0f44e7b586fbc4f2e4b14d0912bb7bc0c24c5cf32fc6536b1d0971b1f052f123c508b4fd8457eb2703907bb45eb777db9aed3d1c3381b1062f84d6565e95264c5b8af95819016bdb84e73a8314ee7b2f595f034f12be4596d2b0f1fca8d819d2d263360f632a2962678c302330c05ce71491ef0f288233d82eed80322aff8eb013d444074f91b3ce56e89542a45f19e45e761afcb4305221fdbe7fc1289e9ebe5c4e6b5cf0a8a3ab8bf2c279c65673829a7684ccc2985737d17e310ddf9ce94f2990200bca3657ddcc28e75b642e6fcfd1494ce5ac29e8c6601b3adecd83bf8de0750c0f816a43973135737f7b2046a78aaefb48adc1793e623496143e9346d8d3468da08c8271ec2eebaf3d245cbc776e11a36f1e257a6de4aa2f8b970dce8d211f35fe6fd7ba1d5da48d836c758ab0dd83f277378aa8129ea5a21860c5eee766f572eda7ca5f5d0a375dafc641d028d197fede38fbfefc2b19859aee04e26c7a954ed5118f2cd60c1b8479aa67de9a39238571cb4c8166e9450577253881299ae52a83a20b37ddba1e1dd93569796c21f27bed6f24807ee3d3ed66cc0c7ad446fa916515225e495336d03f6a83ae9f24694ba6d7428a9a172e104ebe7a9d1eafdb67750221a64cad3146a76108419021a0ef77966b48eae36c61ea133b8aaccd7e304bbb561869d336e6c49693dbef36197bd6930fbfc32efe326ab6316e8f9f38a470997e3da0906c55e2eb8f059ee2c341330d38268fd5feab1877805991e9631ee3f12b7cfbf595003065be891bf0eaca84b50cc61677ec7a0d158bb1161ecd81d9e8576bce8d8373c5703ae6d68f2e5b6f3304fdb1c833ee7d9ecb8aa8acd43c01c1848ed176340781fef5674d293a66bfb82c20332f316f95a4fe511e6522d3cee232339766b9759da8c78ec68ba2729eebd14cdb197bfee3a6161611f753a0ca33c334eb56bb4adc5bead2e0d4545bb8d8300ae009f0c74d5896d145e96d84a65333b42fef47b9d947b96cc1cfdfff119ba887fafea332b0ca68162ed4a24e3e3ecfc56c46e867d6e91d1751065e0acc81fd46d8d42817ebf87405eda802036c58b2113443798ba1504e893e265decdabe41a9e8783f7193d8ce3ef52481a0c21ecfe9dfd325b5886514bfe16f3bf9ac99964408ac44941491094c4bdad9bdc0de422907a2a166a9782298ca36265a2dbfc3061ed0eb4d405ae1f232e20c7593a85969aa7af14a9b296a865cf551372dce6183a3a59764be0ab9fc278c063e09022c9364114e35628123c35d0732fdbc9f2985b940f1fcfa613f62107dc5ae0b1f75a9098118ff3908eeb4a96753e8bbb874b67ae804059f6bcf4497f746d8311c9174b1ae255aaddb4b963522c1ec9911ea90a3a88ed8153b01ddd48227110f493f69f91c029ef07fc685d500b5f70efb099145a6699310894832994f97db2b82560b551cb771ed0924503ef1aa3bd4f55bae5725e8c9088e36311032d4c7ac3484cac9664c3939164939097f4bb20f4978e8222da30ae3720ef643dd97ba7c7d34e323d411c49973e9b0ef17d248279050619c3936316e152b7a89902917ee11b04d3112cab521420f47a9039adc39648eca19882edb7c1add0b8987dec4b60818c990acd8599235795cf0885616e567e35b21b65e549073e4c1844d255024271f4ef44f8c31f901e725f33f2e78e6caa6ea022f7bd4f16f5f11691810f5f52d272b0f68fcf0458ff12d7b0830e081f15aa6f8d2dd5699e3a5c507d215917a53f53a949104db5ee45ba76a3b0f95e03ed97317413844e11882facaa9f1ee64dc79cb86713db38d0777e527190dadb57c5c0fc3fe248aa78829d423dfd32db39bd277b32b1365a2b4f45b69f4028cc154ed068684f3568c1d688862d9c3e6a6c5922213223ef07bede5e06458d13340e2b91ff2e3878846c59fd94e6321ad87a0f1f6b0dfe6bb8a89eaf5fc303edcb39c202e8096c74d79a61c0a734022878e76f56a040d35ca4d81c02f7683fbcfff0339f859de804c0c7dac2330d05eb2bfa2560fde9b6c0d716032bd9324bd9770f7b46a3a57f6ecb8f8ab167f95f77ff577dedb4c3112d8485f982c40654cdb7dc891959d332f7a5eeab5d370447c470df26344e71b7947ff80faa3bb2b63e9216871fdcdde34fb124cd13861f426fce3bf909b60728a94d36d2c858f11f8dcad9a3e198886a12023d45b991e6308d94e0071bc9daf6581fa0f4695982774de431e31a7d9448cf7498441a8a1a4c537b98f9119751aa2df44740da70d2821c8a6c5ad56b97dd5ba68fb18492cb11ec6305b51ea63226d302151198aac394e71a5d44a78c99bbbe93a6e704b178e0d077e89b12a8a4a0f8e1bfdec962f909b78f4e26aeacfecb0dfdcc708947c710eed63840b845efcb9377ff765e638c078dcef6da37fdd0812e58894862e885731c7c74a452005db871c3ff127f1685fbdfe1dd94de8901d146b867c8fa70b4bf9e600099b8e60f9deb9120e756c974c182815e190fd35c01f913699ef60dd3ea03dcd4f3b7e041b3cf63142e04b8888c011384734df88c0c98e0443d3e1a943eee88c98cd10676e6d03f73162108a2c94fa8afff7674507e5ab483c22c622a8051e580e59ce8a280ac89b732081b9ab26d85302b6fefde99011fc3e11bff69910ce570fa36b4c174cd4f64b39bff6a4a4fea2c46c2c7e2c21b84ad9d98f2a0cae709b6b6c374b38c011b7d2fecfe3845c08ce8c79fe98d021e4e2527bf1ae60be0ce10da2e0434b598930119727d6647cb18208ff0f31c03e46940d803a221c714af7dcb615c6b7e831fb079f70d9c963120dafe9e5170e81b6bcc3300a9fd054ff897e5c922f62a46ac9262b717ff6319204a6dad1e3064bcf2f5ad462bf1de500a640f9ed24583c2ef0fd889d40464cfe0961b8a6736439c74ed5ff3e4644cf8e99a17556f12869a7f247681a0845a9398dcc50bff2f75b43acf4e7f3de7e34047ab65d78e2bb46ca2abbf2b58f9126a01a70c83a4bce888fbc0283d7c89c0178a053b81554bb81617c74cae91bf582882a1c4beb1afdd43507d27d9d7017c4b2b60e7a780c4b4bc7648a0c4016d9cbe28af9e319c75902e1843a178261308391f7316263c545b88943e32b36ff48bd470e6c04b1cca73f3c6ee5cfcd935595304b4d26319c240a920ac8e0bcd2c1bdf611023a2cf28003ba53d0355e44234eb4c1bf0afda2ce90615b2fb7554710170ace5f6a7598eb9229cf244ee76484c3365335105408a464a464d9c41d9d9e9a4b3bf8ab5310c94186e7ca0fe875da6f6678313d71e0e82958fb513c59315fb9bb5ceb7c9f7aab0c478f645e9313e7e8ad6e4404a720002f3a8a2f28027141aa0786b70b19eabcd1804700fb06ede924d147b57ac38ac6da99f0ca32beab5cde17390caff3e8a52cfff8c577aecaab548328eee041ec8bdec6a6f578ff938d3ab9a2eaea8026c01548e17d5c7bdf38e5f5a4f0c209d5fdfc30dc2a5e91bbd7c6f203f7c3c7a9bc6a9d65b58a468ede8e1e578685213125f6d65da976c7808208331bbb27573492d6e125bbacee476f7a3db192897557050af49cfd0371a515a516d75da5f0690b630198207d1c366c81798ce08e12721ebb8af78f7927e2b788dbc5c85d12249720d1d89bc9dcab84142e5259b4bcd5b1332fe5e1dba09e446780bc494de1452c4a40f9bd97bd141364fdc482344d67519c4ee7f0cd1cdeefe07052bc28e3b360230f99e43b36b250226f9dd9a8eecd4106c143c372b936abb25940e64726ba2af295f16dbbfbcfde00f71207980371159d42e27c6db1208a4e36694081604dbc0c83cf864c4179e591e0e804514e8f570da6cc5505fd8c038e108a65193bfb051201c02c03e3d06dd663c3ece1ac6a1dba37361b793ef840dd696ec67bc71f8115e5aa300652a035164cf77325f8f13bbc3bfdd5f62d36e5787670cd328f380d040c38904680085b5c8515900672be981eb71e9a1f0f46831057a4e1985b563b6028aa064428b5bba07c079384392a9f01a6f602944ed2fc6d588c7e052fb604d39c403df183a024bbb260aa5b15a2cef9db9389711b46246612e137e6ff92407f496368351c64994f05376895c86146c92a4c67c303f34a476ebda4602d3a2e8a68a760a6fb79d1c5bd986361d0f7d1783b2f9c936cac1054ba470f07440009decffcfc5a054a0a5b5c007aeb0a6e12940e4c2be35bc59e23c5fcda892af2079358ffab4fab045c5f97951176f1dcd67843ea862349678209d3c938f32e2f02eb4230232b48cab2014b3ee8258bf76817285ae51482f445b7a5f7a12066e0cb0f5e2ad7e8347e0906931116a6975cb92fe379c5b76f24421336ab4e3d4fc8e1fb0a730333fe9b004ef1b3c74dfa1735f47e0384a6d52368b10726be6d005d004a160707d6d3512de056865b36aebd5fc83699fdde366b8ae85649f2a5e42fced14c3b7c41c47365f064dec5a160d832fa2600822e22fca869a81074e047f87f610d69ba866440fadfcf3c2c9489aa989bf597a0b59fefe5a1c576bb7088872014c5e01c6d9c1cf08848055bce004a009e0600ab280090961942f31edd0b1ea48b25e536bec1a70a82926be4dbfccf1d2aa4884f79006f193ad531a1a1d7043bfd8469bb6bb390696d4fdb8ca681a98993294c085408d111f4a4783f24fd6c0a5cf2e35f4de3fb710c768f439a635de5c755e7965389e6bb097fa129c5d174dce3de8edca253792a6bc21b4a8097867f8d58b58ea5789ed7338026f89c5318111b9bae316ea8af7da00f75e5371801a408f0d6c933eb9d6c4496136dfda6116a0ce94d1ca95def16c660c841e3c3c24157211a0c0e2a46b15ab21355327f623146ff5417654fffa2ce98f1f2ad852c257c3c7b78ff79ee06b0594fc9a3d140924cbd2097e29c71821d9272c2a29a70e45dd88c82831b28f0c24a2a6f9e8092a62aed41de0aa1cafda7bea5e3f407a6d710f7f50ef1fe0f90d0760b0eb1fa18554a9d658b9c6e1e48754c65188d368c1c5a1dc7dca13ad14711bfe86fd5da32769f2003729ab7ec08232b0cc71edce0183386b3e6f267f07f3320187e522f66fac647aa5f8ad94b3e02802fce5f7ec3ea9df5e8f22bddcb755a235baff26859bf153219a5efddfe6ad3f64789d765b8e1acb8d780ff110adfcd3ffc45dbb1fe9c416dea17595a895704ba55c9b83f4d97e8c6d4255e266bd3772065900601b6943abb5c856bd2204f9e323f35ec3f545337ef363e7dfd9c2dfaeb3520aaa1ddcc872581a0bddb478c8ca7fba840e48f23a59e90e2ef3128d1916e65145256be926d19dc9ff53a58227c275ce6f77ae069e275f422f83bdd240bc003b5c8e17505acd81aea417dd6549b8f7f0e1b42a51613620f9dfb0c739efda114cf6e24c5a1f60f4603d1cdc198825f4c25f96a0d155319b60e506cf4d18f90034daa8b2db81b4e431028a55349549cf9d6623c00d3a87d36992800799c487ea1bc924f9f10c12adaca8bd49b07b644f23b3fba35fc762bdacd1dd04db2e5a65623273d878534cfeba807c635a69cdfef1bf6795d728d36ed112295bf5d47b545d84d75878af214060b61dfffd8c3186b792de8a2ecabae383477a1a61ff582268b14ad2c547d7bb33c168b94f52a913704d9231f832755e6b105ecee6b83e04c03404a967150b7526a339d45a9acddae5378afda4c62fad291554c9e50cef7d9fed6431ad19f733890aa8534eae32edd4289c5b65ee3cdb84dbd1198448183158945a0d995c307d45278d740172a3dd9fbfd7ec404d02103e3f5564073cb83b5e9f9d2b94629b7e5b228f3005a117c93cbc2743910a0ae4fa8d2249dd64f062621efa522cb8378d731e76c3cf622bd81f133e574fea6d4c89512b4d88c3f3247ef04de35eac0bbc2052ca7191a420f6e081a68828bad8deb235f0c23c4665e3e1e178cffb35608c00d33f3b6c00342b63439502be98eb5a25ca019fa62dbb58c6df9d417f6ea66ed2353c86c5348a547c45373b24aae1b29c36d5ca402295f34f7d061b687fb86ea1bd320318d7293814712eb12393b8bc095f812e7a99330910c11a2c5c4a965f4011900436ea0893fbe6c91416e704963165380f605c5c15844e03c7be61b70d0e68bd99300eeefa1a4a58380a7519022d9fc49a72fcb2a201849036cb84df12951e1fea2bc057551aee442f4e8a98fb5af0c533941a8831cbd3d71b9ef37ac4c092eaff6ea09bd2180446cae81e9ad96281ecc83adb980b8fb945fc7bf0abc63d54dbb7bbce29067686b42757750dd7c767ad6e2d330fef8cce8f7a28f1805079083a6d7d48a127d422a6bd932a62e74e2168a9033fe7882772d66bf32e5c3f8dc586465573566b21ac6e3fb3fd03a6d2b71ea78ec427c4043a63b97ff710d18c27518d5023cafcc4c586f38c15c8a6b47fa47ff01e772aab72777c10e6bcdac1b88f5102ccd588ed0e1ead277d9080ae4d5be0c3ac15fa97c4c87b7e5af293d81e79f69fdd16d341f9cc63994f908cd9daf4fb18d75071384f0321c81a229647dc5f337da38125dbbecd10b465c418a8030ccd007d00c8490e67a89fc420587782273bad1471659ac3dc7f953957e1ba2150c2d9e9261aa8ceffa710070fc9b853cc66192acc2fc8997fa27e12d684ac9ce5bf0ef8b3e85865cfd3045220f2b2822399215a94f845ddce7d4c4d186c4a54841544ad57ea3504345181c01f43389ab6a50af38261c0b10028b2517ec5b46a2d585b2cb7c0ececd2e0a3d622ecdd000287cb26bf991d67f14bd2513f7164d44ebdf5b8a3a2ce24e4e58bd7865753a707e2d90c3cff27d1fba8272c55238cd8473a22ae790f7121d7c7872100c234718912e942c1161b1064331255340922ddff6d6955840d5dccc4cb6b15111e67e43077fb6868eca2075f1af17f0350c0d9d402830448619cc38bfe90411eeaf85452eda875079306b0854eeeda3976784e0c0726c542465096ee19f496e70880ba3288843884b92353abb7bd5ead7701ed31519516b43f16ccfe8349aaac83c624af50baf32d12739c713ab217499da408b70bb664b34fc612955cc61eee5ad0069833ac46509b954510c8eebd660e1cff7ede199dfb366ef0161b628b13912fd5d6ae878306821e88ed77e743cd31c8114b1e9470aa691aa8b5ac8fd3cc21342a156bc4b8f5f7af898875f49db0e42f80376927c355a04ff178c575bb69f976070f2a83d81c3bd621c30f69955ca2e5370d50e62daf326c1e490b0f942a46e7bd21cd34ba90fbc044c4c9edefa39bf33e3cae27e6f3ed17f161b09fcc90da6fd2c646b5a394553df1ea752af48baa30efa6bb1d0f4d49519d02f4cf779324662da42048b895b0a064d9b012cdb67b5800c947676ba29ef4aa19bb394307ba5d8eb01ec5a230bb06344c435b218a04dfae65202e94bd557187dfb3782ed8e43194696c6706b4af925a471b9bb5f434d2d38157b65182a90713d2ab8db6f8118160c5459701aa58488b67d893a5715da31e847207b1ceee7c7ee83c1c465b8d27f86935395a58461530a59f2d0a19da788b34c77fac36d5f1721d9a12f9a314e4fa391872b4b94c94968d79e347b81e9074c4e4c61ea6323be47ff9a4b05165799b23782f304f1594ad661e83f7b49c35f99842ddb9ee9c9344093cce28cc231ccdbf0b49aed627bc24011fa40cc0616b657e6dde47a5560dfaf377fac7b84266251a5cddb24d080131e8dd38fafe1540e7d515320c0da042fe121cd05681f98ca6fdfeaa339e138f635121d8a677343cdc85dc0cc7b1b3f75ae256aec8f7f63b083df4ec143f4b8b7227555065f1b185526bb5c9b30a25225dd8260506e23058bca16b8042a42d4990a675c0bc5bd09897d38da96ee615113599553bc12697a3acdb837d6740e31795e1f56842f9c794eb00e4d3b4779e05ebff0d8cbd49e0244f95f03d55304c1201a128582e89f05e40be8c4e59c85ab2bab905010ee68121ad204ec9e5d5a5137c7f9eb6c02af0536b84f1f2704075775e4a975f14ab25dc750f5e003103f9d1030806065da3392473bf877bb3aeb0e9327f200ea7e81cb8420f426af36a7d9385ddfc48d1ab5b76d70e846790b38571e64ac8bfee41dab0e1b6084c58b4f727e594f1355a7894c43201ff79b29e0e570084a72a1a96191c04ba716c54022a212d9cb1d8e1a040017ce8a102545b51d9c80148a89bd7b7ba5da48603fe8b7cd448a58c24938938af23da12f5987e05b51f974b87545a1dc34190739b5e62f6acc9dfb58c2a9d1e81319181c7bc7b518ac3391b4f0849d1c40848b77b0bffb0b40a7469fa2eb690a74635472bdef8d194041ebda5b3ebd0a652c746b3d196a4321f744ea23b6b9007eaa77f22e95d4493a18059c33bbcf2411054e021e16fdbf9a09ad71e4d33230ff7f20c952c81adfefebe73cd7d70ae049f1b6d19c85ce904e3b25d3544541239b949bd49747d4df162bfefc7bae1899b41f83e785f13ceb159c99c930c220177f535b6eb1504a4dd7a40058b784da510a176cb2ad683796ef128419ab2aa6774439caa516b6faa3a400ed12d7df9b1dbf2b71ebb920ae6d5e5356917c1d425a8cef0ff6844586c7c4ca4f53bd1a462bba624b96467768723df4d2c5e8546051a903b6aa16c2f4e817401068159a0f902baab1a820e48ca6e470d094690a5e600a41b902449886f9eb996aded892d67dcc2608ed1a698c75b474c52bdd442bbe8c30056d09f53b5648308bb496f79bb0906cb4eb10f81316023a119931d661f7b57d460110c609b6c9e358c498696db45ca2c6c81d4250e4c134a83cb83de5b0a20b4dbb339e0daa77845c7a7e7780c7ba45c2e5cda35c99c6942169b85812c76fd021028a668d204cbac95075bf66ba45ef0d49cadd669f682a8d2f443b65743e671ba3efb510f8dbefaf75cf7411cf9cbd24af537c388fd2a937b3a0a8167f81bac99786936df2ea9984ee6fc112d47606d7109bec17d8403ed5284614025e2aa8efe84a071049058bb4762ad7caff92c438b1709d154541f03a58c3afab8faafae1bc936127b7443a1aac7ac8646e46a922623aa6d1aa7acaab0b9e6dd128689b79405542a8286eff1cfec566a190e935007c51ce0b1a5ddb3eb65285c221b8a9b320e3ff614dac3a7a2872e7285a51bc59fb7de3f021d321b29b1edea47a2eb2d5c0eb973cfe076b1745d6c3aa11c7fa698b044208a61db29817bf7f2d529173436ad43a2cd30572a5b87d553b45515d3a7361d89c83bdcd93eef8320e99cbb4a7555ac52edcd89702626e6ec788d21dd9b6b3dc27528b9de0671fcd47753f303d44f97bb960fd82f463bc120bce7120aa6e8e9c4f33b8b75453559e471d3348656a5e6462794f173b89b5a4705ca10456922c4e48dc157d287606bb4867ba389816247e58b29af3d76d46e7e594b399f5f42ef692e873010a173add5636fea6265571d1fec04e57f17856c5e6ae14916f7ca45caa18ecdaf1a69ed94cdee14f32a24fc260e722fc3d540bfcc548cc0fbcf11507c78780b2fe7068ca701e8c40a6ad29d3d69e58d124e039a8ed75f096541a7aa050dfdc907a606ac4dc812e08ec30bba0069c021c075a422e3342a6f77225fc2832d9e794ed33af5461c1382d91e206305a890ec969aae1d078ec96c5ea9e756ca1cf56297444a6b2bd69fc83084804df4f7be92762cdbfd00f07ac9f34344229a3388d98ed9569ae2051dd885471297a4ccbd0bc8000f5288e601e2e1c639ebfb927054e2f6004f88a6aeaf0034bdc599d23823c54b73aef1b625702ca7d7d1dac800aac4a064832f81ca28268142311d563a4e899f36cf05ce7e384c9f0f25dba49b7cfaf2a98be8cfc329b248cb5ba27d3ff26dc1ce1df55c5911bf8eb442afa9fcee388864fef4251b8d83bbb66a43be2a6b29151185bd309bedea6b45c284e68560c7bedd75729cf2420355fb85c716ba4db75cf1f7300825d81b937e6479aa53e28d16f863807e6d58e26163faf5ab7fa7fb32284b44ab4dc66003078acb9820837cd5c05500bc016a2cc0e1067c77ab72d8c2a74782a652811d060e488610457e4050bc5c040c2244b30c8659dde2f8f5f143786d6ac6d9ae164033289862be9e1147e523153ebfebfff52fe44f2c688ee1d8edb0f84c7ba730f0ecafa65cdfbec46e6b38feccaf2765f9ee8402ee7fd8766ce855dbeb9ab29abe2177a041f6a69a58cc463b93b0662e0319ecec32860e7604feacc8dcffdd0c23739719f149101f7429d679ba1dada615a9fd2546fb409370098d01b51193060a6e145e80b9439669d65a45b9cf49607ca121878ab8892e678db7a00100470005663eec06c735a4a90971f3c13e574c8d85b89479739e6bd1a39a58196324daedadf35e43aadd702d50b26c65b97615fed8a6b06410dae9ce4ee1b381dfd5eb704da40ed360127ecafaffd731c88be320587e68d344938249711ab6d2f2659566080540fa7eee375b1c46fc7b59eaf9e72bdda3d2b0615227ae7f8fd81cadf3fb5e78ee3bd63b89f8c3e54507fc0484ce90e95a1cdba3c0d1c8755db8026ce5afaf2ddb6c955f159ff9d8370d6c607a8a71b9c3833c0ab5a01231846aeb7db7072203ff033e99629a2cf9bbe16b3d7f447def7754e08579b3565694cfb5e9971d44c2b12c4c0f35b45fe8015fe0a33ea647284831aa355fd3cf9a0a2e36f82a790640136042c04cc1c5b5f251a1f65bc4a27d9714937d736b1da45acb81107d8b1c9120f098da71cd1abd2950c95b63268a941fb8b7a96eb39726925a3c3a75586a51f3dd2286a9f89c09738d86d3cb30e3b5855b4ac9ae77bb495c527752022fd841d75ab4e6fae425cddfa02a72d193b82e1117bb6675ae861a05d0dd2122d31ed03476cdfda1e366eea7ff248c181e7e912b679651abee4b9d4230b6280005dc2bed1870ed6266e3dda46cc5a026cd2d2b059179a3063954cbd248d9922c13b4f1837fa7af06d32eb23081112c9a2f68e8fbd0642622f15725e02d8bb75eb10bf2763d642bb6110c6982f2df647aab0c5a68a56d45dd058c74a5d8c1af00a4976039696019fe304744ac0de36df8fe76feabb194bfda1b24473788d595b75907f6f36888351858c7b7e7d77eeed255e290764d00c4b378f09df8be69d6fdb6f716795cf12736273149f9d4ab7175b14b585d94ba6d1c72c99003643c599ac120dc78a422819406e4f2f6e02c8c4563c6d9c00c3de215e8365bdfd5331695c86390ac6c447ff082d19b0767c13f60d695847decbd88f9e6dce1f13a7582348939b55161505d8f208fa5c43b49b950fe2aee80049645cb34119f0875250e17438e495fa7ee0fd1810a54d3c54d49c897ddb0dc5e066cf8b1169cbb31098c11e8e0ed3bc2516f46cc91c7d5a22a9149612278701789163794be1fbafc77fc0dda0ab3a6016b5746481c934aee95e1c2eaa5780f2cd17b92b57810fc3e7a8474d6f928dd3788f51bd87299ce66fa9dd6fc91268aa8d757564037dc6ed6cd06b6a9ef70b859060d347c5287e1463651585d8a6b742e5c38b00546f30fd1d4480da99e6c47e64a10a609e58ad9e60c8735c3910ebf9d2806625a264892a3187dbc20f0dde3b9793d5b3d3d422cdf4cb947e83570884dcb2f8370ff90fdfb9f2f3e96735d5d6c6fe08aa15dc6e856e4c9196306065f8873be23d6b5a2dce10742d8fd258aeae82887e07e12546c4c1fd3293dc141f1feaab30eed4650399fb62ad2f1043dd577eb74273bcbb7b3b3e16f9342e1419331a70db76b0b884192052262e247aab65339c25eccd2537de4db08c9b17bd20d7c4f3cab44b2f74912b916ed9b81ffca38c99a50987551cbb59f1e089808856f57bdc05b37bb4259669fe32415a3ff23a116850cec9a4a08e7404354852893824342449ac130f933583d8c7df222cc1dad6c00013381a950fc385ad0cf74976291f678581f2188855d1b7e59d3969cfd35bffea703f23e3e613925eb8a7b7ca1e38e15a0a681874e0d2eda835668e8252141681bd2b6b7de8686129554cc670f4c3c8e8fba4e48e3e97e86f16616dde53644461855a6be7cb114d191b63b00abea42d57a7a00085dd605865fbf72fd24431a8b5fcd4a7cbbe4011888082a1c80d31ae61c0a1cdd80c3cbc22c7dfd799c0eda250fdd4f529a878316bf8d511ae058f86065c02719861b8b611ec3c21631507d3582f02b9ec2c8363f77e1d684f35bbd7b295b89d3471329d463ae9dfcb2fbbcbd7cf55808ded95e0b537e4912079cc3376734dd01de097a39247a961a97f972e68ccd86a2966f9231b6daacc41128e3f613ed6f0edf9f6e9e57895f0decfc01aee812bd84199fca5d44297b02eed412bf44e0603807b9bffe2cbf9d980eba481b9f47b94419656589a3b0e736c445a34af6192d375a197639c0b2b0e343c6664e1c3356613534a6d3b63890d2c54805fdcde7fcf3fdd3051fb2f2cbb48b231be520aae821ceb1f63b81f7328785a4437cb9a039d9e3424f3b8cc01c8eabe07f217939ba81dcc474b97de6af752bbe466348ea71acb115341dfcfe7ce2796f26ada09972a08bfb7e64751c5f0f8961f425066a8299723c5601787c345b22862f3d21902dce3c572582a2f7a7f98abb43c0ad51e621c7ad0fcbc47b9049b5ee3c3301647b12c917011ec2bc41ed3be4f78752278c1f41c1c8354d67c2088156fd68ca9e9f8415841839d12404ccbaa65be0afe0c6c6aa6a1a6e7b1ba889d8fa3bcd8fff4df5005e439eb669560ba5c01f0591adefd9f558aef03cd36bb9742dcd4e2746bf5711ff5e0304eeb7b703db6d78c81a42a2695f3ed127fff75ae80b37c380bf265cec937c57bc32a3c16eaad7a3e26ca4b02866f1e6db60390b54283c5565ab030fd1db84266d095e2fe9bb2776375517220adca1afac8d2564f362ad4153d32b95b00feb8e1cadaf73652e976da1997cbcd36e033162582dbb80508e77be516a04c1cd9ac5a1a6885f500d480a39294af4ab869738b74e6ff665154881e3eaeb5b7b5385f895559bc30d13a399cb9fb9a73edb5e3c6958ca7b74758812f0941ab375b3b28fa9679085a27e68ba456e71acbc4b202bd5763ef97ecb90d3ae4451d0c94b721b07fa9b02397cf7914a34f6f99cfe3de06014fc0eb85debf757f9b221c912f0f3b8478f4ec6aa4124ab07ed974948a68c9fb2eac08416d2a2d04fe93d1da3c712fde710b88416fa13dd3d71cd50b04935a9063892ecb308057ce2c3c3fac013c02da0b2fa7241b418b8b7287e625b9628a8ce77f57fd5338eb71fa526358d6e60214510ff3106ef5ea0edafaa9017a5c173025c0c80eeaa42a83d9b51a8c0d979abc77f611cb57fd2fa9b8b3ebcbad5125e9904afedc92ff8486da7ce673cbaeedba9090053bfb02993c2951c117804b81d9b46dc5d9a27b09ac9549f9503dea1108bf823be8dade7ddc8664499b7735609c5402f1238fdb5e6b6cefad258d4c25efeb39c006eb2b0d349d9b1ba99bb20d5322b09b5e8a7644adf9eed51c68906b67b09c9e8f5612bbbf31fdd93cee9e9270f320cff8696a05603afe60b82d771f9cf247d87cf7f68dd3ebe62d135abf2397775861bac458c2f598dc213189e2146ea38a8fa25a2258080f0405056e3b4607144e1038af286d6b83d265411d105ccd2917079806b2ea12ac727b102b99131b20f07f6b9a6a6c1e69fb4baeecd6cc288e16445e28ba123409fb4322bbbbbb5bc1a36f05341d7bd0fe5b288e077ab2032c17d8158d112ad036619c58a085101800044bc30836b4a0c39195471e03620b5982c800231f90d1d20202aa30440d0fa638018c1f829071cae20338c06ca0e7c9008c88e0020cd28480156556898099e202218538617206180140828364a587b280071915ac31c52c81850ba0c08f8b43133158d044705ac44921010b388b5084a36358a8c9e2814d8a39e4cb1c3c4d1841c30b21be3821c9000e8942903ebe7037b60820e005387c79543002460146e85e6400c51860c0c8a27821c19597c21a494ce2c588251190e204376f780983421438760022801708c03149148a8700ba24a27a839b508013ba88e1022d508014821b5d24b0e5903c86125045971556a0c801bea8224897052011c204c08861136a411e09483db2880b421df8e1020249a45183500d523650850f52e808a5600ae203180b04840810860662d85085c0458f465a1a8f2f36970c94112308172e68e1b23941c00bbed4d001179e0d08b18118642eb82c09e2026530011a610b0aaa18e445800703b6483166001a3401c3c69693035645616c006f99205060043a89b0b1c51d808337583803b5421b63f0a1c5195486159260e2032fb304322b0c21b100278d2e452b9410e602814d97198218314005cad4f8e82033f6300012350a10822610c9212b20024929a80b13105801094f6e0812814a08fce8a10c27b41452451973d43183305a4000021c19c071e2005a72e0801d8608c0031c2d58b00451801f117c40cb012e50458b8e248c00f263013938a2c7940c006d218393104ae00e808e74c2b0430f36a2004909828c168048c18102b005ab4ad6841459ee20a38909c8c8f041962a24114300189214b2a4b41a7f10516695e56aa119e4844718c942b33af9d0b31158e46040cb0a151420606902901718a0481706c0b2070104103414f1c1f2240f2a52356014a9f0480d59128962e88b0a6a709e1600c95200158a08827e0445c14285163e1804860f22e951610416f8f083076dc47105110fa0507aa478ae8411460a1e2851c3bbd2433e81911e9298716505100440021b7805ae80f0820d4bdcc888f809241038051564b61f2f7820e10b0f4ce1c20f0d4aac304448aef153654c081099e282057e700e59038c1c3560b1924707ec6824016492ac5cc108921a7d4c91adacc4c8c02ae003175889b29b2492860b565801800e3e2c02c51506a47082385050c201a8f022050b20008c295f4e20a46022c0237224617fa420a5e4151b5974a832c91c4f1082070d3455c85cf18703aab401451524c0f8c0076c5208a8521ae2901f9674314295263c60f0144210426511d8870c5a70870854cc20c1054f1a40801ca80091821800998487192a425c2c12824843a960419490c364c6081f4290a624a5200a0ff87cc0c90c1b2cb8d2880f0e88c8a1244b1d47f8a8a00040ecf0e390201f03708001481f100285292c6001902123a2b8295a9c51440444c64d319a5f7ac0630a37a5278d24db070e6e4a07631889c0744e8a1d63a8114211ce49a9e24111080ace492952401255582b468238e7a4cc4c51c24a508267e20e1e3601e6e8d1e101873230a4f103112880416184131051d9b826a947958e3ec5246995b36997b6d32187fcf1070c9cbb5ee0dc65880671bc3185db563a49a8ede48365e7ae42ae4196bcc00d339c73fb94da27940ae9399df0f9eadd9802cb7183e55870ce0db9b1e39c1b3ae1b8b180218c953ab9e18686b0d5b3765e65d36e031187e5e15c525ead721b643c0085736d08d1060e4e958b70da6015b552dfc6d029d56ac3cad1a7da78ce3994aac56ae30387e5cc3aa55a803848868ce7f280551219a1ce461f59f524891575a2934b906d0b46f41b6662f56459cd029498d9c0a6091b21e0f0a0d268c53947e3b035f670ced1cc6025a417c463dab215a22d75a47194a6ed12522e2aa98a56a6d5ab4a45ad5409291721e5a2689465560d41b6950e7750d440726e5ba54aab679d4a45daaa3fd96f1409069cfbc93210d270e3a4caa5a9af7d133fb91ff3cfa7dcc67ee59b4e2e31fb7903dcc9e1e8210804b6950e1a8038e7b0283b18960d0d61ac2dab8c381a5da03184c60deb51583e038f339a70fc0ca33344d8329673ca3d697b295b0fffa267fd143deb878a8975fa8263c60a1a68a0c106fc59acd41bbd061a68b0c16a45658c162a5ba297540ff4f25bcad8a28c179cce9b585b36011d3d100fff815eb6d42913ad5ed5e2f22ccd48a8d229237f88654fc958198bb28569462c2d7a79a557825e50a89ebd9db2fc57d99cbb5ce0dcd502e7ae401c0e193f388743869073fc4bac272263c739d308fc94a44bac2722a3037e2a25e912d11880108da146690c0d38374612ce25adbe15c3183438e77ea7b4d4184363a0e09cdb927ecc184cdceac7acb4a352efda181d2ce2b6921878b84d0c339c134303ae24461362e06072ce89c18213c3c7f921c6029c73259686dac238c4394c63f12c256f5934dee282e5ecacb42a28549ef2289d37e027cd4b966559a9947ace4fa6d249954baa8d27c2d5a35079ca1679e0ef2cc372dea8b57a232a2b6db5ca1dfb9436c384cb5b16242a79d5eac9ab560f9729aa936913fa29a6fd42a82e2b1f8db70071eefae3628173571f7c3877eda1071758b8e871eed2a4e8217b44cf318273eecac10c1a56f8410f19cc38e72e114c008408661a198190736e469fa26889fc810421ceb94b03556011540031c858e7dc75c21161b4140144146338e7ae200a69409395cd8e16ceb9192c544e082408128270c43947630022e68001134d8c7102e79c920a2851e6a2239b0405e7dc05082346d01009137f58e75ccd13430070c2f4060c7c38e72e3a7424810b43c4a087733c2a558f269465cfcaab3d02b6652caf5a3d3b5bd2abc085868d2daa7021b827ae143cf862802aee8a801645380b759e1396a6ad66e09c732d687173945711ea3c27a9236da54d5b366561c8ceaabc31d396ad3cc009c03987e164c14b44a9d32a04e71ec1c14210552e7a92c70a5440c60c196274200549198b0c5c78e820b1be4584a9340df545830d74366c039dbcd27ac750f9b48dae172270b92c1716c0550042dc1d385798e1b6950e0be9efd058351707753827430cce4591074e9929ac604447a51a024092155b69f5aa13eb8be4693bb1f2b669ab9d8b30284348b968046c076b82948b4678120313d4e937f6048b61c8b9cb8e9954a6214367fbd48f537205094e947cd1214a69ab236cd3ad0d93a2a48893aab5b78675fe5b4b499810680860c36d9e70354d2ca288083433a8e942c52ea9c3b98b8e2500c09294ca5c73ee428173d7094ce0dc35c71654702d75f4404e0a2a58a9132a75f21206150bd071c15d3d478c0090150b8a86e9a2d66a63b9a52a69acd4a9c453bfb7e7465d90e9e2b28390341c8e14d725a5b2866aad747292c652793b77c9e1dc158773aec65d605e98d9c18dd9262d857dabc53f75a4e539d1fee2dc5502e72e38c840218a45b6950ecaf92009932b4b0bbf52615892be98a0b9eec089a2836da5b3df70ee72c3b9ab0de72e32ce5d6c381c28c8e04031c61ace5d247028a41cce23cfb94b0de7ae349c734bdcc582c1212e0fe7f470ce0d399c27ca6c2b1dcdffb4625d683cd10618ce396ce889249c633921376447089e980ecb6a7c6a786a3257036b1ee084104bf4c0a98015e75cc44ac0545995f7b762785eda6ff4644b69eec74a99102e9d7ad48c0c383040720738430533542803f51b166507e3a7a22b06e72ed5089cbbc870ee1ae312031226227126d669959f6c2aedc9a679cf4731a7f7bdac37ca39f5ab4fe78f3c4afdaed5b13efc64b3b6d6ea89739798309cbb44e0dc05066bcb58a48812055bb5f650132663348c8626252c676312011ab09ca41f534ad2a5920e0d150f96c0e36609289c735b683a58628c69b37211cfcf7f6b956228e24a20e2747a7094004309241c25ae4e1288e8f0d7492ce1743e635bf676f2e9a982c41c487881c4904bb55698c63a1d6d27ad42e2c639773a620ee7748e9842033ac20841dca6c29250384630e19c6bad362cb3b28f69cb2623668a08a3080914c18bf08088459c4e369d72f8d6a3e32e2692b88870170d1498c361391ad075846944ee2aba58a000151f1d9edf94654361b07f2e98ce50d736d683e97c4ac3727cb4292c9c88fe289b5a47a9df56b9e8080bcab2c50aa6a3933a611bb69d8cf2a6356ccb479b66ca1aab6b5866e5476556ce2a9f4c27d33eadbee84daa531196c50c0d8529d2b80c61db09b56daf65565e9d562c314343618e3ed535274919854ab58a8a30d5866598ced18ba1e2a3654a969550a83f0a23264c0e2aa7884e1bc6f39bb2138d687ba313514ad3366cebc174b8c6517fea3fd8a62528490a7fd6499f4cda2a88e82445d384581a104b03d280fcb8407079c0b9eb0be7ae0e3877797171c0b96b03ce5d5c38776de1dca585735716ce5d585c1970eebac2b9cb8aeb02ce5d55387751e1dc3585739714ce5d1670ee8ac2b90b0ae7ae279cbb2ae0dce584735713d712ce5d4a387725e1dc858473d711ceb91a7781c9418e1cb67043181339cc3025cb7cb88c301a1a72ce0a0e3c389d2938b0e04c5bde71775be93cc99995b94a7562dd70c5864534d3d1d029ab72fe3b8699f62967889f72d07f159d6d539d4e2855511e1a5215b5344694a371c17486542796b69d567f7ad306a589091814ac04cc04ecbf974e4cb02898eac42ab11e05a589eac462b2517997a2b01ef5e40996c3da5aaba1a1214c477562692ca789eac4c2b4147f195619752a4ab5564e58a9bc8786b0ccfac1887e85a54e9aeac4c2f2ea5919c5d243ffbd343494c43aadb4d5497380eac472c010eb846a15f5602438378301230038a45c244324ce61440e47861970645840121ecee9f0d513f1efd1f9558be8d45fa75aab8d0996a44ac29c0e4a37d14cf81b655393cc0429044843480c3822e39cce3634b4a54e598654da8a0f0da534ec8dfe7d8e8258694c30ada77ef8a9c4539ae69cf7001d3dd076f44046641ceb937c7e30a32e8c8a706e3bfa8e699a90d19073262323ccb9561987a5720b8f1618ae4bab09e7b62b85961aade9dc3666958b4c3bf51a4bb5561814218c0743ca4538ad1b879db1b14efb8d54b9a8a4f346272c6908dbaa603aac2d66082967797e12c27474b094766a929373da8ebe8aa609756169405bcd7d9765fb8db28cb3b6926afb95b64b2c8de731284da5e3450bd2587fa49d8e522cd66975b47aa3d409cba68d6dcf533d2b0d90a986546120aa5831a8786a911f4d0da761c0623bd8098bb2833d4c43722e624527210dcb368d34550929170159e1ab0fea5ab49efac93cf5443d9b107fd696b1742d9ad04aabb2d2aa742d9b26d4b5acb42a41dbc64819452be744489db0242d55d481eb4111826aa20913548f73aec7e1a086506f74da9ea73e890986e54769139331637ed019c3c439a7b3d28e360d05c31d4e67a5ad560f251f710e83c90d6d5dfb150e0c5660703a39f968d3502733b05313eea412819f829c3b3d6742c43922131e48cfb38c87e7678748843e4757a24fa0d77e83c74ff142fc7e01f03ef804380efc6e40b61c5b8cfddb89ce438ff1290d3bfa1447697028682808c39e755a31d13284e50c051d7d0a1b0272c2515a06849980056531b14e473b95b4b14848fd866af55fe59d94ead1113314067b130b8525693de4244b01e807684bcf17ec013aa76d68c867d505754a612f05d32972a2a33a9948d007c885642cb2157985a1190ce53134c5f78ce916174c2729a5939453d84ac33e2963a921009418291552f240a9a8a44b2894b2170071ae6bc9c14ad8b012a4f86c48b9282848877f09d916a4d335beca44bfc272727c5e70624c20c602625ecc1331970b65b8a0840b605cc809f382305d84b9218c5098135a38a485385a28228b94ae056e51b66849d25ba85811faa1923d4cfa31a52c1bda4e4351782212aaa7f24a37d1693214b11d8c093634a4a3755ac801e3089842c02c010605e639e7b64d8a0f6602d664a849168811a54e4143435986302d3a382c84f0c5055ff2f822019c2f53bef07c3180973fbc6c81e385e5e58b17201c2f17165da6e862054728112127848226c1e12207971ab830d95287739b74d26408060d31c1865027d311f6298dc720265a86304c4ad7c204db24e6046b32d4040e6139434db260d9d096658849c49c6099141fcc490c8241444e9c6469e2e4bf3b61820d49198a419809180cc24cc0b2602660529c3c4067d5526143138b12056bc224cbba567a194edb10cfbfcab27c32c2a60c6126e8701374569bbfd1291f61afbf6fac2defdf52ad2da59d744e613c9559a91696a43996b369a8293a5bc6bab6a9506ffaa253131898a0f2a6613a4627d60ada0a7333c29a30d129b134a067695eea931e1e2f451a2b954d41259ca01c248330a7d38409d68409861d3d9096325ae670271c2d5338a7c5e458a9dfbfc25824a4b45871cee9e068c19cd3e18fda292d4b74369e2c3bfa14901c4e4767e8484b0d0d41cc046c1bda9ce4e77f846d3a5fb00d633d1713d1c98aa609f1e71ca565052814ea734b8569dbea9d73019826d6e9e88f5a184f3dc622c13947c5b94b03983ae778aca4b4d3d642edd44fd1b37e5428b388736e89c351c110419c7341597a84a864f911c2d2e3650b1521a01f2a423d3e2ab8a1c6081c172d403d405cb46c99f29385cb0f162c3f5936ab55d25825fea5eda4c2112a04e19cc3d293e5670a159f2d5452a02204f493223a6d26163f1d9558279dd24edb69ff4aa5421815ba389f9f2e5d5200fad922c4a554a469289dd25445da7e5512abb4bf28a75e952454d44a3dc69f8828b3522dac6b49a95c74a58a2b4d1c31c40fce391b877365071a9c73252b42290051c152f2a1c2c24f15303d5bb6f494a808819142058b942e5a7c847ab460a932ab10d04f9442403f403d54b068d12225ca95faae38b9d2c439a7c4e15c79c015047ce9d9529a2d60f1290995b8945af8c122a4658b142d2d6009fa6921053041413d405c7ca870e142654b50162d5380bab072892707cbd9e1113ad280322bfb44d985affe8452fd5761213dd0d103b1901e88d5d2a22a5a5979ae4d616d19cbef544b4ba57aba6009eaf92d9b82a8f0fc567cbee8b40a4a3d960d85ea316dd94a964d432565d43f3fad566fa44555b459f0f228d56925a409f1201f562a1b3deab7f0942665ca98552e5a3d2b7f497a1578cf736d8a97293efc675375d91eb5535d58cf859f7cb62e48cf533fa996f63385b569563607836b83324e111b1c1f2db494735711ce5d445c4308e1ae04e04c01645be9fc4efdb67d89a77ecccebaf4a7152b7532ed5ce4c45d409111dccc0070181972fc63c0a094868e72ea8bb42c592674a4a5a4a821c503525c9072b3829e377a66e8a982422228e4e19cd3d11962fd565a3deac7645696f193cf10d63526182c6af29af55c525a86809860433f4343493a67534ee742264081e5dc86ca2716cf8e1c283449426dda49e7e455ab075b6955309446a14e475b6b4bfd6f9a6963ab960606d3d95659a5ca2aac8412b6d3d14bc174b613584f74f2c1c66c5968cc96593c2ce0f05cc7930017258d47a1f214cea3e0e0a2b04e1f389c283b82389c9d0f38a7c3dab2ea9442ea4d47a62d5b596941a1f2941d244d0a0fcf4ec4d959e274c40c4111c4391d2860b88ca570a014c171a04c1c28374cc40c85d1c1f2965919cb5ae0329684da5a5a51524a4bf5709d212a403f587c7aa8f8947cb6f458c9b2216cdb925279cc9633a693d2b0a4cff9c1585b0e4afd086940bfe5fa800ce71c0fcf6dedecf7723aad543c3c5926bdf0d5afb4bbc4cee1b4225b84b32aa7936a11a1606f9c733a3dd50cd649d71faa15a7b3915013e09c73097038b48c0e7f228c82e15c0f1d72ce39550f4d803611e9c19966ecdfb02d9b260ece4d2b3ab28c63c253391fa9241d5cf8d6855399c2d28082a48b78e044331c6a951fd334a13845346d480f145170ceb1369c0811718e3f4b4b413c9c738ea501c126768ba7b495c682414e87afb4de73168298734ea7a37efb94069d7b73e03cd3964daf09e79c234a9db607f4ac3c91e489069c4e0ec67f7b62724ee7c94d62e994c9427838e77074cc70cee9680047e7071d9373ce4b19273a4f9c738e4727e52295b60a4a3daac48393a3470e0772c2e408c004439c73571c8e095598f026c0121c29418a12b038e77486b8a0f229a356da4aaba2818eb67a193458697d439d72676929564b7f4ac3f817159d9c24a192504dec686284732edba6a1b26cc5ca1713f6e5a8e3c5fd555831ffd57359b1b864d9127df22875ac1cbfc9ebc637cba544a790d23737c6135ebb695129f5a82c4b52693bcb78c4088501ba92e0dbca6efb4f4effddcff34262db6d7f5b4d6d9cf2e69a4d7b275e47c8ac278f7442bba7ad30f220f19f9d274ae52d59f644a9bcdab97219515f8efa66fc1b52fdf5e35544d512437befa33d774d3b1152ce1cdfeb4f25e5f23e051ed5993f29e563d9398ea6d276cab22124b68fe22ef77b7ae14f539665595e11a57009c1e9cbf5caad279d1ae2b7626d3bf00ae2763961bef05a89d234bd33af09e48cf7cfbbad7cf521bd17107a634da9b65be7ac7fd656e9b75556c1eb87cfb8432e2185366e8bb329cbb28cf55cece5039794f68f8fcf89f5d3f451aa9610be2400ff6bbe50db08277f1af7609f57b83be6fb6a1c7bbf7888f8d639218c58cad8f1bc76c89a7eb73af2bfb6de2c4d3a970eb76b38a57cfceedae195570e6fe67d7fd68d778e94465396651997ecc2414618a5b655d3bc71e6bd87e7202e3774897794d44aacf9c65bdb405fe33c638c15535c29aca1bedf955efbb05e2d213465192fd1f0fae32a73841176be739c61d3d99fddd3daaf11db6acab2db59ad2cdb58ab375a411974c73c67fe0f4329dfb592f4735adc2185b6ca3cabcd3214ea3715a457a14ed6f66d0dbfd7dc65c5b7a55f8523ad9fdba7986eccf7ceb14b9669ab9721a5a576808cf6d307e3d419d7dd9a16ee2e31ef91539a1f9bb28ca75adaaa9494652c955662ed8cf4a52c6b6da715110bac9ce95768b1bd31c2fe2c0a9bcefc61f912dad721cd2fca6a42aa31fc9eef6b9ee391a6ba31d0bc61cf39db0a2bb7b99ab26c639d884efc4da428894e52b22c53c5a723af16f3bab3e5369ab2ecc1234d5542b58ab22ccbb24cc371d20c2b8c3bcffd204e3d4ba18d715e7df383b7f7ecf81469783597593ec452bffd22eacd87677d13de8dfb7c94a8a5df27023b6fccd7f8e4867177db6fdc6fcab292858142bcb9c51ac6beb7e4109e2a95514b4bedcbb13fce4d599663da31c7fd8fe1d5d3ce78a51075fee894f5e6c793e28d4fe87dcb486fcf73d3d7f4a529cb58ab92cfdb8eaf8edf27d52fd67bca1de979aa87d33b25fe6a9fc6b87f7253964dd9924af8b4d6fcdeb5196b5396a1f28ae8b38a6a9977ed6f57aa7fde3c9f29cb666d955845fd497e0badfea7cfbe7e69eda62cdbead0a39ce31afb8e6f4f3ea529cb7852aa27cb925259680796beeb18e1db5c218f74565396f1ac9ef5b33325cbf89f54daceb26df52c55e639cb56cf3a4560e77746a94a3ccb562c95f6024f9d8e52ad128e1829ef9d54d219f1de3b73935642a1f2ceb2df292da92a5996651b7621fe738cf543fb975319251026c6d87795fc5fd67d650bf0d62ef5ee176eda29e4170e60f4d33c35bdfdf27cbbb433b080b9ed76dab83ff28ef367d9172aa7a46fa9d4f476fbeaacad0da52a3a0979d1d36e8e2bc7d2e287639767ef8c114f7cededbc6a53961d7d2a28cb4c2c5614aa1aea9de17d6aa7bc129b78f88fd653a7120d5cf2435c71e63cbf9ca9965b7a7fafbf0735d65463cb4d599659999754797594651beac46a4559e1ff450d75fd3a31cfffa62ccb321e2a59b6b35d4a629d7e767850d7dd6a09abecf3bd3e678e16ade7be16dfa7e5fbadab0ed07c4fdf8a297ef3ca7c7f9f5899b539c9b2ffe9c7f3ee3b3f561e2796483be49b7619edd3db39d7aa0a9abf77398cfbfdc76931d7aef49b2f8dff62af9ce67e737eb47e70d2df74d39b257c5396e95889f9490b6fc635eb8da193142887dbcacbabd492be2655b4c47267fbb28671ef3c573a5426c510da4de9cb5d7295b6e2d467460e1fd7ddf593d5be6bca3294aae854da6fb4caa64d4ee14fcbd757726b398e506b2c2ba5530c2be5ffa0ce13e26acab206f4607bf1cc51e23931af3a9b4c5b4421d7ac35be0f579a757ddc94659fd250bb947aa32f6945da4a9565f584dc35ef9f258edccea7b277add4c3f3e6d6fc5f42c9b1ec2ff344e957df8df7db1262fd7637f1448952159d76b2aca89502dac1387ec6503e6defadd29ab2ac946553a0502c3fff8655c6c7af5653961d3d20d3384a6bf3bfe56f6bfa263ce94fc9a7ad7cde893f9b36945b3bb71bdf0bb18c54e768ca329ecaa5375a7d9601d90da17d32bfba37fc18b129cb56acad94653c5f3056ab28023b59edfae22a2de4d6c63e2d3465d991b622d2a1ef67c7f33e1e6bbcd53e539699b696aab4d27a29cb787a728ef216146691a62d91f6e5fbbbee5e25af3d4a5396b1565122e7587ebc374f98aba5da946512c64cbbc676468a33cf189ab28c55d44b44a9d3987d4aadb4ede4590aff464d1f7dffaf4a5396954a47799565f389edbdce59e1ddb06a5ead29cb569fd2b976d37e9fd56fde3a753465d9c6ffb712eb89b28c07dbf2962c2b15693c95575966dab229ef6c4e8a34ad44b42a9596e4941460c2aa84ad95585b6b552a09a0890398c09286fa80042c020e80802cbd1148780013073011210723a1012584f018506ab2001240d83e5080023e28210130ff4a010840fa540807603dd10706809b07b05462528078eabf5239800020e02ce00612a54e44441aaa010380101000ff1202c0a48312091cc00d4a0fd020f22fadde48dbbf2a95e0984aa36aff56b24b00b000259dd52ab152a795cae64618420d0368b2099b290ae182a55ff5120be917e03800c1122fe6b8be28a76a96789182110650b7932a77706161e2c0915942901ee7dccc12e76600e0dc8c12e7666c9c9ba99999716ee6726e06ce5d93387749e2dc15c92503e7ae479cbbca387739e2dcd588731723ce5d8b387729e2dc1503874346120ee70564427041c18123a3041c3dce46894d500f2144381c4236e0700839644b032280002cc81a0e47103d1cce204f1cce2030389c41807038837ce170064981c319a48cc32164000e8790ea7008d13cd0a10987a303061c8e0e1f70383a9ce17074d8c3e1e850c6e1e83089c3d98100371be074c0c10096e00cc09120473477e3880deec69121dc8d234ab81b47ae70378e74e16e1c21c3dd381287bb71840f77e34821eec61145dc8d2393b89b3201703765427037659cdc9489e26eca58713765c0b89b32dddd9451b99b3233b89b3242dc94e9220ee71c071a14600c45dccd1893b81b320ce06ec808c1dd90f1dc0d1953a4f41480001be004e5e170820e71378e94dc4d19ea70569871382b78e0705610c1dd9429c3dd9491c2e1ac608273ae004e01516071375194dc4d1432b89b2892700db831c00342c031000e013808c04d9687bb8172b91b2898bb8182dd0d941f770385057703a5c8dd40a9c1dd4099c2dd4009c3dd40c1c3dd4021c4dd4081c4ddec0cc0ddec8ce06e76aeecc0e06e766a70373b44b89b1d29dccd4e16ee66e703ee668704ee66670e77b36388bbd979c4031044a8c3c7ddd4d182bbd909e36eea48b99b3a8070377548e16eea30c3390702020eb0448ebb59220577b34490bb5982c8dd2c8183bb59620925576ce16eaef880bbb9420ce7dc010ab08173372b30dccd15641cce2a0e87b36281c35931e270b6cbe16c380e6703c1e16c0e70385bf4c07570938506879385078793a509879305030e274b170e270b190e274b090ee03a0064c8dd00b2b91b408070378038e16e00b1620996e27030188783f30230e70470e31c00963847c3030bdc920ef660b99b3d4e70377be0e06ef6f8c1ddeca184bbd9830ae75c070550800e3cb81b1d8a70373a48e16e74e880bbd1410e77a3c320eebadc123a7e502862a91074cae3a2901361a4090238d9630a2601f02268030aa08214c0eae087ec91254fd880a20c95810665944c823996201b1c71050b378cac980ca049162b385594e04683064c1c36a064bc2522a86141831354c08a063b28000ce7ae1a905098910122385c5cfc808893400ace819952841e4e4c710221aa8b061958b82ecbcab5416142238873ae0127f8100129ce861f0270030166e625806be6912989141680c2392884703e381f80e0a1c739d7430f2b9e009cb29c9053a91306256210c0528f7a581411b0d4a328ce0c0471cea8a7e7c259244a231c705c38c002529c28c205392f2738e71480723893b8f028ad4f4b7c96f8b48aae17c0e052c1350619db8a071e4c95771a1775579548a67b50073ad96f8442e5223b96d49800071c48c070a9a48daf565486b0d46dedf7b29d543ddb4995a36c11a5544527d52674a44d214306466e5be9b072d0b63dd752633cd285cb927fc5da5c0a8e876ba9d38a15c60c1656263a19e5a14f694043d8501326aabc3a4ab5b28cf55cb22c7b95160d08071a6668c405db4a676365d6965560892b053ff010c3af38ea64da46cfda5227952674bdd67334d040030d3648652998ce182c89b53af11ee72e3cae02286288ce963ae5958f1820f0c202bf3dd99e88ff49830d529ab6a95239a565548f73971d548cb0c4a64b0d29177272a2f044c19a20f11313567f2cd9969516567f2c188661291766c090f8a9f444fc4b63765eb11449030d9b2f7888c2d31f65b343941dcc042cf5a85289a3b42d96a8f1a2840ed6c6b12851b0bdda66b2d49ce01016b04346700ecb9e6ba956ea8398f101624ea260269d27e2afa5c008fd4ce909ea9982ed6048fc7419bd40906da593b462a5fe89ca416086119c33e205062875d156df429214a3938f06f4271f8e6a695f8e34d44b99c2fa6deb7919b45515fea92eac53d109cbea9332160d480c95167eb8947ca8f868990244a5b445cb962d544a54b074f1d192a5c4424f96bcf14d850b95add2a81d09fd988c92c2d252299ea56cd97a1ed5e25a161e220d95d24ecf6a92945598c6c2744efdb05aab164b6326d6eaa4b18ca5369d14aab5e98cd2d91eca4c00700461e5d5e715154a29a594ce39e79c73ce29a594524a29658c31c618638c104208218410bef8e28b2fbef8e28b2fbef822c618638c31c6f7de7befbdf75a6badb5d65a5b6badb5d65a2ba594524a29a573ce39e79c734a29a594524a19638c31c6182384104208e17befbdf7de7b10638c31c618e37befbdf7de7badb5d65a6badadb5d65a6bad95524a29a594d239e79c73ce39a594524a29a58c31c618638c1142082184103e88afad74ca08b314fd80c1e163cab6d2c9ab7fb24f4ff66ae33f9f3a11a5a85041e5e732651554f4ac9f4f69405fa471e160468395a67bb05636213d7625e2dc858873d721ae0913e72e314928d6fe95734e0377e470f4b871db4a274997b62dab664e9d8a4eabbd9df8b6e5234cb3b26556f6a9c27f0b2ab372157ed2bc4c2e86d6bcf1fd62a6982835962a69b5a39cb5b5b134d4c6d2505c4a2a55ce320c298dab8d87bf4a755ab1b6ac68cb473b28d449af3e0885ba11b66e845d964481a3820e38976525d5b6820838e7b6950e2b75d25425fe48a73e05b55a51d91a0ad533000104a0030e36a0b96286672602971c6f5c755c6b78e0b2c3b9a30b977f75718004e72e2daa78e26202c78e489cdb5676d0e150a8560acb5e95c4b2030b2c7b55120be32754364a9db04f9d50182b6337b0000e457a2884cc14376c31430376b660c91b8cc804e2c6038a687283946c85940e2908e386009400022035441461c31d427f2c608e950a6ca8220b2d575008e3870d457aa890854382c6060bc8ce0fae05850d340b90043be1481735c4910419179a0881a586268e94742142940d6ad8478c3143014c40a9e149d016bd8844cad0f04800bc80b12dc2060d6a6ca0c51a699470692862091063e41092010d603220a54a027c688486117a88c302322829cd80c8180ebc80e46299210c1f3e763061882a33f440d3821920a29c608620390aa119132b9841012da0228223605e9021901e6a40c849e10619bcb0958607a05e86198298c0d0e54293a18a06507070f245081970a688a44f600b55521e938d0d8e64c892744511524039824c94a45500b03cd1c0143069c78f02dcc0923a240100042970b8d0c88574021aa8eaca0b44485120f1c317593c2b9088b0c89a08290206527c0119116ed078e468921f14a60b2ce0c21199cc89340cb1a18b2324b407509011237054a2117202c90eaa2326721805f1048a168c1449810955085183018cca38830f1864c86218014114080cc8003d3112e212020b53f008618449b1810b2c93d8d1228446123f3c7023919607e49804e86889192d1cae780e8e28226a5db9001d7c047180839601b4e871c356c60e8b051d7811d198c1666991420e8498a0090bb05a2788a30b4b8604b07a5a31e8d108190f581c1cb28025be5c2181cd0e16fed022694bcd46451f2070001bac39365405c8a85909e5b0553fde1c618c4ab0cd000db1d150e26055822b33142203a8c58a89541b4024b108102b5d0600a898d2081d2b2793ac9e9022112e313832091a07f860883c624823ce3d64b8e38f1828008230243102cc98185838e209ecf1c04b0c0fd00004ce707ae0a80ed9b427661283a844d024020648230b21150f58213e50fc304515a4802e73d480e5507d90c618389071e1060d1028962841d101e0d0baa8814a0c2310208a26835ef201253b24a15101212b610c1446da8d1f49c0608c1a72522ba811a10619643e525640e1022620c9e186540c57b6f01109911329285984209dac88482911c10b34268046074526f00005289438544550081d408c23fe684151c7428b36a46829a4288ae0257b627b004a9299071451060c8b62630e82c21a8fac813aa288302a70d930014a8c07c4a441810e74409190860d958328748c22336fbca0f112c68c00863d24b9414916637ee872038c63c418c3e5a88945987879631a00813324700522586010a490ebf630c406307c71c8746231b004861b02c1ac8051b2c1f0c3c3072890610c11307870da8014325e3a38f5211484690a1f3b4e59607c04a004592227960b1270c71dba85130a60f4b1c516401c386d7006910c5c5cf1c25407510f909051470b262a1a60013d898f15d39877c34a9205c0440b5992e346127798ae1f50f065c9510188e01040088964608442889688a1032d18c2002088f22214e0c003aed0419413460d81d8f848a03702091384c010c5ed68683e602046178ff42160980120a51c88e85f7e8003041d88a383ee0014d85186080ea23c0c1a3082166c40ca0fc6076f00f88820bf430a3cdc2cc286210f84070a8084360f3e015cb4f09842c414fe07198ef4513ba89c034b80e963f4e1852751f160cbfb0289fbd8292c45d05883dfe450479a98a4d829e8c30b0b5250986463e00ba42a4f10c5ad220289311ce8e18c9dddb0854a2055c8b16da2062c218258a1e760844be9108c07fd8403429841208e0efd1e08c4091e1c161a8ae14186399c0f1912322870e48bd9415e239b9243840b766423c850324ea80129bbb001a1f306248be408a0410704b448d2188a0135e2010c1333436438e04bc6249128867c00da42c70712bc18da62859720a4d8b2c81003eaf842e58d10bca0e4023df818a3412991d2170808e490ec0b124a360871810488296455b2a2d221099031c2940a3004d5095a82032ff061a5cb015cf0e58617b050920592080800c70b2c9b2e4e865660c70b28d4f88c9085062d5ed0608a22257e640288a103872ff7030a688999a26fe144cc06d4100343943eac2801489198394916257b047d11e3de509d40852dc90537f850002104d812c605256eb02246cf0a687021c7299488e3e7b960020fd3017f68204b9846685c100404589430674071858b1a2d60228c104ea68800ca064284f1320128927802e502611cb0a486292c44a2430b860496767be5d33d395268dad8796e5e2b8517c297f9d290a17cef99dfc6befbbf4ebbd0b00133d791c6be773465194fce13346b4c1a9fd4fcf24767b4184993a2e92f3424e83c5e1a67a4fadada2d349d68d4a00feabf587378dfe65467194f0c5450f9c45ae5a02c5315ed1668d2f879b77e7cdb87f79ef7bb541a346adc39f67ae3dc3973b8cf8015dada778e5bd33c79569fca8f9ac2da5a3e4f63468d35d3f7287cdd4efdb08c5eed836fc77b7b97fba518a1303b566846c0a97e55dafaf0a9e656ef14414346b4d9eabbafee37dfdf7c8c7ee385115edd338eb01486460c6eefeb7f63e5bc4e2ba529cb4a6164abf18b50f3baf9bd118a00d21d25e65acb6b024356f86eef965edc778ce1b7124f3d149a10ccfa349613fece7c4f490302ca1f9e9f27dd5bc62d9f179a0fec4e9f94f865c6fbce7ba5d078e07bcc74effd6ac6345f70096baefb76593b85f7760067c9a9cd566adae5b3db0bacf7a5f17ec475f21bdf9465a549d305ac55eb5b29a79dea7d2307228eba52fb14521b6729cb22cd066c7c96e73b75a6b166fecf25b3b24f96ad5ca0e142cfcd61b7fbbfeefa204adb25ad0acd16776bfa91436835a493531e9e7f0bb66dd9e942a345aeb9db2c39d4333eefd09495a8d0648173cc1f37d4366e6c1fdf81068b68b9bc9b3f1eb38ebae89451bba4f11568342035aeb1c24a21c492c2479301dd33e5714269efbd90f62b3e6f3db7bcefe984afe1987f5596f16cd959ad7e7b9f2c7b9e653c3456bcde11f2577fbfc51a725396a19e6b45a594b6c1f07cf55b141a0cec2979bc1c62b84d5996b733682e90a58cb1624cb7c43af39c653c3455486867a6f0ce6da9989c3eb472feb658639a2924857a62cae5d6baef2a69a4d017438b5f4318b396f95e3bd05800c7ce618db3cbf95ac3491345bd9dd397e177ad1fd79a068afa208479e74d29cd5bbfcb079a27648eb2cf3a6de518561ee18aa6027a73be2b952ff1cc4f662764b597cfc9e9cdf1e18c4bacdfb08cd91aca04344dbc4e279478468831ee5f4d5996653c5f6898d838ca9769beafda5def3665190fcd12ba4f3d799796e78c7587a6a2d67eee854689baebd35c4b9ebb7d4a930484f9e509abeed972dd651034483c6af39b96d3fa60d4591f11ff72a8dfcdf2bddc329bb2ac94b46275a13182ce18bbd66f465a44e712c6cdb59df1e1c93111b5cf38399f56c76be3a3a62ca3a1008794c3db779597cb77a9a019a2f739f9a6556fc96f8c50881b27bd3d5f6db7e4d68ae1c989b215e68826885ca37eefe5fa36c71bbe09ec0cbf62fadc3e7b31b6344070fd15c7b76fb450efb73c403bd713343ffc9375cbaf35e29f14f3932a979e954b4d687cd876be8df2fbd45a772b9b30d9793412d85d5378dfeb2e7bfeb7343de4cf575a0bdfd2f0501faeb55b0d7bddf6f50d03cd0e8fe67eb5c554d6be65378246074ce3ad77633b31b4b63e4d0e5772fd905f7bade493ea148476be85ca463438bc7e29e7d8e6187b8ebdcfc03e3b2ba4af717f79e19ca447fa3d567db59c93ca6dea92d292653392dc5775c7f74a0e2bac72053391d4fbe49e4f1f8ed9be8b2189ba6229299478433ef19341ce19e7caf97bb4eab81f91efcd38ed93396f9dad2ef3647f14d7bc65ec734bf99343c48c235cf30e75a65acaaeff6d23bc635df59472c6bb79c48c7448abdc3ccb8bed83b12fa2f38537f77cad7c2c27572477aa65fe5cb99c1deb1e836721a6fdf6b92fd7b526f2f89477f358f7d5fa2172a18dff5e774c7397af9bb2ec109aadbcb36e18effbf710061aeafbec7f8f3dc3fdfe054f5e3e37dd76c76b79bf86480965cc575efbb8dcf227a7ca4c21d2ce97f71f9775bef73a21b343faf7c60e9fbc1af3e783e87fb9a596d34e7b35efa62c53f178991104ee4be3ccd55a1bfb77ea026ef7bffef3c60c69bfdf02fcf8fbf7fea09eb3973113c89c75631ae5959dee7fdb946580e057eda5b7438e758718ff9123a73547faecfe8f5de7921f7cda8c67979a0593bf4d37c4fd655e6f96f14099e943ea2839e59ac22de77ecf946543337cf46b7b8d97436b77e54f9bb2aca467f6a8f0f19ed86a1ef3bfdd2d951e96be48ebebcfc6f8ba4753969554457b47553425e8fa61260f8d9f63dbb9e52f5fbef30a249493e64af1bdfdeafa54d075ddff784b0afbe3974d59c6b372612605b4c27a29dcbff3b675463c22fe1a31add852785f0a33774c2a69867446f894e2f84c59d63363c7e4ff627ecbef9e355759c7ad1b6e6ae3c6fc4aacbb29cbe8e09bc797a3d4baeab7ef9bb2ec8db4a22933288074f24c5fd7d03e29773465d909ac7cb267bd2186f5af096c7cf175b539ffb69bbe1666e678fbde879562bce37bb49bb24c8e2d71ddf1defd92578ccaa538eabe15565b759690df1d4bc031eff9e3c6cf6abc8166e0d8334b8961b63d9ab2acf506ee9ff38513cad9e3cdd3946528ccb8016bce1abe07dfc5fbc66bca32de06bf4fefbc7aef4befffcc9099574b4b21ffa71946fda62ca332c306cf75cfdff3bedb25afd394655266d6c8fae257f3b5b06aabfb3505cd9080eb48619df5e1f79396569851e35a88f7aef5f18cf794d3946569e41bf5ae316fa9a184399bb2ac6465060d0d2bb473c297317dfbb329cb9ea519edcc9c6161962f5fef1a2fc7769bb26cc68c1da58e107eed5ac78fda946559c673c24c19135bbe759774677b1fefa692c6f9cc08ac8515f2b79f7d336474fbfd31be57da0df1ee63d49e5fed8fc70deb9676cc8831adfcc86db651d668a30ca33f951547a829dcbd676ecab24fda998e19113caffc622d3b7d3cf6ddaf2166c098f9738d984348bbedbd9a36a49c252789a52aa292d292c35327159256df5a212727e955c8c9d9d95e95341382cde7ff8db0ca7af9d61b04b9ee092dccd7767e298e1fc8776eabfffe9e96c36a55b9a8b4d25c98f1c0d4efedcd799fb577cebfb4d24a3c3b44335fd86dabd6f0f6a7e5dbcd3ba0f95b8e75af59d20da1346559d28fc966bcd819c7f7ee5729258f5986ca5766ba90745afe36a4f4b9a474a73870bbec7d568aa9e4bd5a3e81990d3c96335ebdebfcfae4ada62c0333c305cd78774cff75f8a6e43887ff64d91582992d1e7f115e0cfbb5b6632e6198d1e2754b1fa7f63ed61af23a9385c616676c6f7e8979aedb9465fc5f98c1624b2bb9ce4f35e5b1d3986546036f4bc871afbbe219fbd4a62cd399c9809c54e3ca2deff6e1baa729cb7898b9e2516aaffe57a9fcfe3a5a51698f99cecfb662d8e59dc1c08eb24fbcadcc14677da1d0057aecff95d62aebfda8b929cb9ecc541171cc94ee3973dd7d7e37651991862a09cd5051ebe5b1d2092fbdcfce6eca329edb129a992272dd337c88af8e7ceb9a332385ad9cda88f9eeaf4fb8b129cb7c662c605fbd145f3eabbd76ff34f1f008edf83013c5bd75535c1fee5a2da5b994ea926537cc40f1ecae70f3a821a536476b42e9dcc2cc13f96959f9e653be990a48cdf78b77d32a399d1496584fc4fa14a6c030e3c4ffc3f6c5276bce104a56ea8da850996982666b63dc574fa82bd79b678609c8678691f31af9e534d6cb899925e4e5583e1e39b738ceb79a51a2efc7573e9f714adef54c12f3f6fef693f7f17d4f6a539611a54e49dc4b8e0a1a2bf5338384fe78a9969bc39f3b5b7d678ec0d0e66cff427b77841b0f0b894a966daa6d8768c68848e1c3f04dbcb7dc36e35fb5360db5679821cb8ab45595a4992274bd7bef0e29c512de8a89b8cf3394985efaf6c6bb6728b0e1ad75ca8dbfe62e6daba8c46a65b13343f0d73c3fa6bf39a653425396d55043d1c9b4e918cd3083951921ec7b73c3fafdd52c3b7e5396b158a7bc1242cd04712997efdd49f36fcd3b37655989cbcc0438cd94dfab679df5524a4d5996b4a292653d2c4ddbb27321310344b6f4e3dd5adffa26df7ac5da76f2cc0ff0616ae386746b1d63cf48333e3cfbfdf20ce9add46a896724701f52482f871dc20caffc2d9b82f44c0f146e2eb5d698e378a3e6e1df5f4cf5edd7f6d76f4d9ad9617e8efa67bdf1df8eb69a6674e89d634d31d5dcc6bef5a361268729a17eb4ffb41c43d9ffe2610687bd6d7c8b319711eead25d23583e7fbbe7dfae10ead7e553b095d9360d8e9bb72d73de5d6b802615084c27cb924a9fbe17f0825d7504ec989ae4874e633fe9d1b6a5db97c385c90448e6fac98c6f7dee3126a3df553c325839961861b7fb7b0eefba40dd723ff374ffeec5f0eb38e7a4bca41adab0c9e5dc2c9e7574b6fdcb834c4e588cdb4570c6d96940257235b462d69e7f9e22ae57b622e46e4a3f175aeb4c288698e8b449ee1fbfce0ec3ccaacaf262e45eacbabefebce7bc491777cc540c779ebe6374b7baded59d6732582e7c5dacab97396f8f56de251692b9f2cdb545a2b05d485088eb04f2b1fceaef9abf490be797f5a61cc326e4c2f0cf69c5bcf0ce59b995b18594ff482fb926ff874d6a7fdc96aca3254d67219923195b2460d399650eb7915a25fefd8e593704b2def3465d94f8e5091b6aab25fc525cb84f64588a4584b9871d4b6d66cb9896795774a9b322b927624a4af4136ef137eaf52e6f9e66461a7ca25c8bd533f88ebcff8f1f56aca328d55eabf2586cb057f2d7d7d6a89b18daff98ec64afd64595096d217e555df495d2d9835eb5de7abfd5658eb9ee20aa4efa85f7ef7c17a75e710901eafed30c6b7ebd4fbf11f136f6af3531debd69df2242e3ff0dc8f4a5d73ee37ce8b59b02bd70fe1eb99f67b6dec8372182fe4fbeabc733f6da77bf1d12bbcfae3ee3bdbc7b96ee2da436b5cebeedaca9775afd04b96d970e9d1e7dc3343fb6cac94739d07b713dbfe70de15435e770dd70ae0c54fce7cf1e6afc27c8172acec1071a9e0f3dbfdf647f1bbfabe87812b059c5b1d23a7bf5fe3ac2d1e3cefda79ecaf67ac37535396756d5e77e8fb35da08ed7cf25108ede0f2cadc9fbfcc77dea7eb908f7b8c5dbfedd5c2f77660b8e8d878cfdba1edf6527c2f96c085825a75bc93e73865a670d76b87eb04ff0ff3acfddf9bdae268825c29c67346093597fb72a16b8ea8f99494f7d793ef6c7984f625478c9dde5ba39e794ad8444a4e0f132f571cd34e8d9f4abaf7d69d4ba2ab04fd3df9709d77bf9e5f27978b04171c13cb792bd6f9dd59b7b66f4c7cbbc42fc6fc329eba9ab26ccce506e5fcedeefbd6bd77ccfde86aa373cee5eb124fdd9fbe98ccccf76abe63fc676bc5930dae79bcb6da4e619cf5df1abb6f3929ecaf5e99f5459dc6cc7091e04d7ce98c6f3f85313fcebad4784fc287ff1e7e97671db73426d656ca89f99b13f2fad0b8954bd9639c4fff94749e51e785f146b825dc57766bcab2ed3283c6aea18e58feeb10be366559eb2a8346c82bce7cdb3ef37d6acab2d535027d75c614f69a39b692be29cb4e171912ee6c6b95f5f5ee7a8c0e6b845dda9c63adcfbfe812e337b47b4279f9a3b2ee6dca3296a685a16dae18f3dffd3ef8d99ab2ac5f22d8bb42bd7f728e61be329ab28ce802034ecb9ffe883b9ff5f54a1482cbe1d4f0ca9f6fd2ffdff805024a5fae967ec636d329f3af36cd94657f7d603e29edc6baf7f7e0e36bcab2212e0fe8497bb4fdb7fc707da1fbc43ac20d9fda1ddfbb3a607ba72f3fdd2dce975fec459e57760e6d7e38a585b90b7cabcc5ae77773cdb7de8b030febfce48df46e7873d542d7069ed3f8fad6efc60aa7a495462b59b603e6e2e2e21be7bf17697e5aef3365d9bbb6d05ccaf7b49cefee6cb9366519d2a93f17a02cdb971639f62e27bf36effcd64a5396a5322ae8b9069465cfb55496690eaf2c24ffae6597d55ebdefaea62cdb197361a12ba452767dbff38bf5e5e1b9ad1c2b3b527c342f99b66cfa7df5706960ebfd0f5e392f3465190f8f952c9b92632587cb8e943fad84b2aca8f4acbc937465a0d31b798c19dbac2786d7f4ab47e92c7494b764d9515ea1705d319fc6a7b9e65d5fb4f189b8e478c951614795b3a8725196ddcb0a8a1fcfb65e2be5631cb36c5f18b81acbb82dbf79728bbbceb2eb025563c969d4d6525ea7b655602c3f67fb6c7c7cf6ca792e2a1e7f3979bcd33e7d50dbd3142f53d8f1dcb7c6c99fcd154a717396f669fe1ae71a75ef9705f8c3bbf383d74e5396b1362a5714373fa512f6be2d7fd0be29cb521a2a179da45c503cfd35f21e61fccb25e6b99ee8dc4a5d378f8fa394399bb2aac49f55ba2ac01fd6b856fe187fc5f8ad585c8ab45595152e27f6d3cae5c6fd6bcdfa415313983e9b398d7453fc6f465396b1903e95653c59b6d258794caa659a723bab4b9625055170c961a434ee89eb83326f4aa0e8f25efd97bf87e7feac953c2177ceb4c3a771059454e069baedd39ef5ff84193a417feb392f9f933e5bb77c42491391cbcaebeb7cea68e33f4b091352eb5dab9eb4eb0c6fdeacd41b2d1137c659434edfe60f5fac4409dba98699df6ce13ff8b8922432efb8e768779413c25c91e0b2f6dbe3435c73ddf48f981c4ecbedcc1147bc233542763bf3ddf7ca9f4f332ee2c55dabb59fe3a610c20d841222ec96df358cf97bacb4530ad4ac617d29e1575e33ed1b5032047fbc75a68fbe85184b2c44e77656bc637d19c585a5a1b6222541e40a3b97b14eaa659db24ee0dd3bfbadbd4a5df7b6d38b1220e4fbb7125a4ea3e47bff0fb35e7df7673eefdbbcb5121f6adcb23fb63b4a599fe412c09b625eb1c557ea7cb9edc1ea0877ac7867fdde9b91072d5fa6966f287b8fbfa5921d2e841bd22ee5c4a7a2d507d9a044078b678e57ff9634f38b6f124a7280d13ee472c70dfbc3b9dba00487dbe9a4f4e5479f3f9e7406993f09239dfcadb41d5fa349ee779df7ac7ada6a1fcc636c24b919478ae9ed396bac358f44ea8b5f5f7ab7b53ccfd7e2620309c634e369f7c3f4e9f934071b196cd99f7d0ca1a41947bb2f1d6c1ec1716fce37cc5d4bac2db42983f1bfce39ceeff5a86d77e4b784ef7dac97da6cb5adc2a691baef94f15eacb9cd3aea231b46fe27b4efbd8de773bcfb22fa41b9a7fd8a39aef16945ee770c3b97f84e18a1cd36318036bf9cf99defe9c72b4e84ca87fbe55ad78d88e61f73cdb75ab89f5aec65099b436c7cb0ee8be19d59467d9fb081c186fcf3c4d1de2cb77cf105f96dbc37e775c30e39875e6c0c81907ecc9ccaa95fa43c17722fde12eac97386b2cfc8254728091b42bacccfe65dedbb746b7c6d06d15942cc2d8794721e3f0bb23bad56f397257d51f6e782c73a3f8f574b7b6fc6d2069b16d0b8e9e7ff2729eff356216c02c973f65cf19495fede37db00d2ab7e0b29acb65f492fb7f9235b5be1a68f2fbe1d6eee85c8c60f3da3b5f33fcb1ca3e59705ef4ab8f5abfbd6f71d46206cfa785a663eed8c3b4afe284dd35d6cf8a0955b9c29fd4bf1c595eed13b9cbb6af9f8e4af4bbb6df478795f593fef872fff9baf1c6cf290fdb99cbb6e5bfbc34ba7d8ac407f8553da7da99d9847ad027da594b13eaca3cd59439b1448cd33d7bc6f4db5be189bb2cc060f3ca7d4f3799cbbdeaa6dcae68ef8f5edfb17d23b73b53c6747eb36763c0c21b56fe27faef78b75d0ac31efb053ac5f971b9ab6581b3a2e870fdffd3efeeccf661b14c03931dcf96fbdd0eebf13b039c1bed7d26835a7fa3ed9a709e4a579ce77bba44fe32b91decaea8f342cd2668e7c1fc552d3591fe78fbe1ceff97b53478a791c76739dbbe6f8f27c9f3e4fd2ab60dab2951c293e59b0b029c1abbbe78cdfaecf760dad143670c45ee1b3f4658ce5e5f6bdd175bf975b9da7c632d76be3c67b77cef758de9dad3db269e3a19ef46ec939be99d26743e6ceb7fbd638c6a7fb7936f1709e6360c3c67e75cb6befc3afcf5af11a18d6bcabc571e22a27ac24b034e627257e9de78ae9b55163dfb9257caa379e99f298844d1a73778933ee75caad39c447d8a0c15fcabb3b873b6bdbfb3c23ca183ba6756afc24864fe8023666c8faecc7799fee74db9f65f4ab7f739933e67cc7ce2f1c6c46902baf73479b65accf3e26c35afce67e7df67f95d63ac6a53ae2adf19597d679a18d1856c2df1a566bebc47dd2302ade32da5dfb93fb697d22d8325e8de9d3bd1fdd328311fbde374ebeefcf172b0e41ad6f63cefbb33b72ce25087ec7c8618e39f38df79427d87c00536d1f86195e6a2bedcfc6036fad851b72aebbc613539b2fe0a6d76edc659ffced9eafb0e9407eb04faae7e66ff6dea317d9621aafad3ce20e5fec42472ef5ff9ebc4a39a9b4e180e635461b9fa65157f87810361be871eed7316faeb9a017d3d86f95cf71ddbc541a836ae992cd16f1f238e595bcefa7b1662d7ebef7a8bdfa6e8a73cd5b727e7658a996894b0a289b2cf88ef556aa67ef76530cb1801befc71dc2fa5bc7a7a66d8b8d06b6ed13ee47f5938f62cc6d32c03997cfeb770c9f7cfe57e84bbf5bfb70cc794ea82bb422eafeeaebf4d6d71a428a017933df75e75ca9cdcf4e1b6c2e30778ed15a7963a7c1a68a29f78d33bf3ead8ef1d6186ca8a051be5b35cd9277aae59b027e851c5bb99ff237616fc2460a6c73b4ff5c4a1b35cdbc8a8d053ac6f1414ea1d5f4d51ac58e77df9937cc707f84150a69abfdb82dfe7f02f2299fcd14669b2fafbb0279567d7bad6f2bee9fb11395e689ffd6def57e2f23189b266c950f6a236c98a8fbbdff2931be10ebff25e484ef52d91fe62df39d48cf5317b051224adb6bae0f4a2babb5788a4d120f76f82cdc3d6a095f9fd50689bc2796f27b9717f39be1066c8eb8f53dfdb05f2c73b750db18f17086d7d2f877d64c2bb429426b6ee58bfb468aa5aeda868857f1fdca6d8491d6c73b05f2bdb2467ae3d65f2d47d90c5133aefb29b7f956f937db08c16d7c9c4bfb227f6edfb509626edcb7a57d72fcb1eacdb299c086f8f5286bdcd85a6dfb8e0d10593ff9fdf559f58399629b1f3ab671ee7973957942f93ebcf9f8a1cefc3e9d659500ac94bffcfa7f9d31f67bc5a607c82597cff3bf8e1bf2a7820d0ff9ddcc3ff38da7dc11e96d76e8f07185efc9af5c626a75b0336f4e2b7f35da49f5cd01f2093ff7bf92db8bbbb5c141630bef77ae61ac52db9f81ac18eb285fc515ebb8f7243ad20ab9bcf47bb52f7749f0f708e7d50f37d734cf4878def25f7fbc7c572c292418c3ccf33fbf7bc637b30c6cc479463cb1e4a92e5f74aaa3e611582dde11dbc7f7ae587ed7f2292d59f61c859a32364e4827b5fd3ec6397253a9c6914cf7ab57cf6c1fd61dce2e3b546a1ae9fa25e42f522de55fac19b9b16a6de1bdf7f20ddfa5126b16b1bf9fc7fcf4cdd9dafc6a1489ff343f7f78f3e31b5f4d0cbedffc3ede29b396b5de9a4460d4146389e1df1eed739d1a442aeef9e6587bdfd16a2c0fe1cf7e8512df17658e9a5ea98101bfd2be7e5ff34871cdf7a7e60599db79719f937e84f1bd29cb78885227293586bc1a73b7fde1ebf9663a7f4c2e7a3585cc2deda3f1ef3f89799635845caa218d364e4b79adaf0f7227ef6ff7e73c5c6a0491fd6d4ab3ded87e7c588b4e26a87181fe7c21b5fdcd876fd7da0239b1959b3fbd325a2c670a6a02d17947fb2afc0da5ed0fa25077d400121fcd7c3e9659537cedfe03bf7e2fa63cef1be3c41aa8a895b2a3c68fcdf7a631f7bae7fd4b2f1714d4b0e071cbb3cdb65e4ef72dd5f4c1f97c38f3ceed63c8f53365599651a9e1e33d3875949cf787278ed154829a3dfed527efed4f669e9f77d6693b1965190febb49dbc70d49faa944a59f6aa24a1dfb2942deb2c535d6fd4e821b3dd5152cd5f9dbb674e65a7b3c0d4e45131c6f4379519d67ea735d5ace079e7fd2dd51b5a9b2b3695be46055fed7c183fdda1deb1c43aa55a59c6b365a7c74b963d2fd5a440db7a257ffbe1ac77bf1d0fcb31d50fdb5e1fd68b9459a9a42dcb64cd1d9a3f38f7fc3aad8e3f35d6d6da3f35766c3aa18c7267fed2be0b739a30d979a1a68e7ab39c993fb619c20dedb6ca41516ae8d8f0d20b2db57adaf89252d9a70605716faee3a417e7ccb1c63c5a6a4eb01f7e517268f9fef70f85a831018e5d77cba3bd75cb4ae11cf4656e2d96fbe9bcb5533978b6b7f2b737d797520c7352da498c9a3866cd6f79acba4afa267c262e4125c8f9c93ce1b5afef1e3b8523536a9fc4585a4c3984af5452d5bca1e18551e3bc1f7cf9f634adb4ee068fb7f36e2bff4c69b67fa5a68d7c218d35f628aba559a886cc83b163bdf7c3fbb2eecf9465356c440a69ce7d5b8e7b96f8ad31658516e7672bec5f29376559e94b0d09fece5c21e412e2f87b52539665198f972e356a3c3cf7bdd7465ee5a47ca6c1b5d433f20eedbcfa654463ebdd73c76f1fed37eaaf3923fe96174b6a37b496666806df72eecd35cf10c2b96b19f9efb56f43785fdff8cf899a11544b67845c573a6fa5b992f11ee7fcf47df6f17b271c436e1963e79ac66b317db4460c5ee5e4574fbaf1638c6b185c62bc31b6f14a6ba38622d8556a2c358ff3ca2b2706834a6bf1f3b9f3b495ee1a027ca9b6375adb2996df1f04f3c5feb7d31c5fe599eb0f5c9ae5dc5d7ebeb6c7f81e78f6d6f9afdf5b8921cf5fc0a9b1ecbcf2ba7f3ede3b50ebbb9cbe98639c98f2e885d6f4e64d27ee72ebafb08b1827dd7847fef2e757a36ce5444954c381acb1fc7763af39f23adf061ec37fb15a9ca9acda54c305ed1df6bcfb4fce533955b345dc59df78237f303fdbb116f5492d31e4d57299e5a3a6273559ccfa1b6f8a21fed99f435396a15083c56fa8e1d53b577dbf3f0dc89965edbd76d9b1edf065406f5e399e4fbed75f5a5c7305e455763cf7be5640bb23df39f36ab3befb21518381bcebcb54729ce3cef3ed0526a4b24e5b63be34cfad916aaae8f365fcee8c2fbf1c77a6027659638792eef98f4eba3d4bf35233c5b392be6befc417bec55a8aa8b7edd33efce8bd534a0bc8f92ccef6ee8b79e71d46b1799ddc5e88fb5b3be76f25136aa0e898631d1faf136e6ef77de2a5ed4f3e6cf793f4ce5c53016e35ecb96a399f3e4dab13bbe72b77becf3ff278bf094db9bef76995f037bed99465bc74a58689fa52dbc799cebae5dbb86609d8f1ecf6eafce8d3fb768d129c6a586bd69457c8e1e428540d354958be73b6d24a3df7b4169ab2ac5583c48d36d7dc6796f2752bf711725aada5d57ce6bbf3d33546542cb395b9cec9b7b57517d1edc67f339c31f2cfcfd6104169cdbaefd9e7ec743e37655949e3ba86021876f9bb4ffaf8edefe550cd103fa9d575dfbf2ff1e3baf4accc55ad2ce3115323449c784e2ee79bb9623a666b289e9a20367ed3e6ffaa1fee8fce09583e5fef5dd60ea1de4f03f151f23729fe28e3ccfb6b7eb0df77b7523fd58fcf1d6b7cd09fe3d31eeb7cbc6dae3512e85773aae186f3fbd3f86a7aa0bdbe7dfbeb2b6f0d0ffb29e72f25ae793fae6a957eb7f8989a1d3ad433bfd73bd49b53fa6a74f8fab6cc33f719317c70d7e4f02f4a89b794f9fde6b9d6e0703bbc3257f95d6ade659f81fe2bb7b4fb4afc24e574925d23be3d4ecc3fdf8ba524f1d6fa3e6e4dbf5e5c9f269257ebcb08adccb3dfcf1b127971ff787997babee6fa061a19d468b7a4b4ee4d79bdfd95724a393f395b7e2cac9ea022681e897967feb67d99978154cb7af9e533cb7df56b80c6913d2b8e2fa5d59a43fab091b757bed9a7ac384a8d9f91b9f57fad3d5288297dbdc8cefb76f92cec7bee8eb922f8750d25e653776da7bd31a859defdbb578863d7fb261271edf2f1a9dff70d5f0b918a9fee38560e71dff0be43b2d5d3e6dbdfc3174e5c61b0258e98cf1bf137795b72de0a392f8849e9d281e60576725eff499eb921524ffd90660eb9ed9217f2decf49e7c3fe7beb8c67a021c47e8eb946def54fceaab5a572a01964778eef434abba575672d3b2c4ddb824423c87df9f1f9ab18cba931a57141a4916b1abbb4b6ce3969cece961644a9bf738be7e6f6ee474d2ad00472b99c50ef8931ae32e60ec8ab9affcdb64ac84ae59dbd08d1fc41218c12cbad217c39f37480c68f17a77cf369bbafd45a5716bcbe94eff9b2f2fc68d57dd40b739f72436d7b86f4f20165c7d7725bbbacf1c652294763a54e393657d0eca11fd30d7b7f1a461edf56c9e992f3b3a3ca5958195525cb52cf626554df59d1e831278c7243ce7b871753e8254785144d1e9b46c8a5bcb35bcd6d7e2b7858ce6ceb9b3077f879ab40663b2fecba6b1b2badd32454852605f541fc348d31cb98e3beab67fda068f0c83747ddabdefd59da678782e60e9939e4af678d9ff2cdafd0d851ab859faf961d464a7b1dd042c9f7ecd0f6dbb7dd3474ec376dacb9d2b967b756a200cb7a7f6759dfee58a73d01ee7fff4a9e2bd68fda4e6302fb90bf3ea17e9a7ed5d3d4da4a9be7531a6a8a8a660e89a7b57bea3727d6f5350feb53d89181460e582b8e6fc21d37bc307e1c74defcb147bc21ac9326d19480ea5aabcc3de75921cd940b1a3874d4f5d92ab3def9bdaddf90974298777cbdeaabe3346559ff2d5986a27183ea3b2fd53c9e7ca8a49168858194a3208a21040002aa4603102463110020302c1e0ec8e321a968c44e37001480024e9868a64c3495c9826110c33008821888318610028031ca186498aaab07730aa861b5662d08484ee22c7bfb14a1b5083493afea7a365f33cf7096b5c452c05cf04dcc5f8a901e173cf255c43723bdc299717eecf007439142ad28a8c162fa25671907defc787d61c77fdf9bafb372d363bc58f8cb94d2cd544ba9eeb99e38129ee340859b144d09fc22632f46cc4d276cb8574e60d47d5c6915c33d8ac5fd31c9c2231710488283aca0e52a7feb195e6783308989dfde98c3254ce86857b5912219c2823beccc21f7f89d9efba515317fda86fbb40c1a699c80257a3d5cfdfc93b192626c081b18bd4f805e3d6193bd78c2a1f428addb583b891d3a15d10494740ba26193d7f8400caf313838048b1cc70bb45c63d7919bc2794cd84afe8c6c684595bd134c56cdf24dd856fa0257a118cc2dfce1611cfd743e663202689c013277c8168565a9154bc1109f6d0b6d1de45a25a8f11ef0190fae79eb38800a039a9de02cb16e41be7426720fd6603ecfe359039dd9e35acc63ccc1c8135f9e43296b532a5010412970613c48428ad913d9ddd730d5c830df957275b649dd8e1e0c135dcae750ec52646bd62d6006ea23b387b0725ec59fa90615fd81471e25fc095525cea01e568306282e0e9f773608de5a3156a40c727cbeb4e23f5d005dca5277cd4b68e92109793557a49e90792f8dd7bd08e4f1daab49c97f667881f7784a15ee6267b6928b3e820068eaf375e4afb392dc611ac2ec31c47950f10ded1805aaef3f3f87c3862e6aec0e1b960716d52abc54b0bf6c3162590d0f11b88a72a0098e89a7a064615ab25d5f5c55a48549c3604a50c927d9337b04e936d8ffe831655ba2ac31af8600e887ea73f8deeb3d5fa5b5b027020ce889b249d4d76d124e11eecbd3786aa05c3311a45f31126b12b04b0f20da18c25ccebba05af6280b255dac6e0c209cd1cf5f77b96938aabc1acb2fcc2968a0a1f94073a7b457c03a519a6cefd1aea1d3d379491c980909a8d0e0d2954d039da0b1b99f59503ec9ae446b0cff13e18790113cfeae474f5fe3f34cc090965389d7277821d159396a4da34a65e1ebbc1ab3259b6764b8df96a5db020fdecc8e72be70898babefe706025d0dfe4bbd7f699a72324d25d345d94da8b4949bce8ddf1f3b26cb76810535ef76b22fa087ac788330dca96939733d19ed02c4aebd5e570c562fb3da96d334d6f4df4f9a50f59ffb04c7f62417807242ac5abf66cba0b8d0127843f680d1ce4688ba5fab40c39b485d89ac999470abec011fb9d689a68138c4010a9d642c30e2e3526278cae23fdf1a030138219cde0c3a83daf4a48cb57f9c4a35ec6cb252ceff6be564ee8899552f692a624ef1971b4a5071aa822807c3ef03819f9b7104ddfab0acbe03ada68089596022360daf89070eddd43ebda06ed9df282034d50ec28b75e0f3de38f06a3124f3056f8965965559238e76624d6cb911baedcb9955d303bd057a3c98557aba0c10d73adccb86d801161d30f08f8783d4022740bfea91add67be1c55a0d536ef733fee10ce47a2790e4c6b492ecfa37f6db2b73a95068af61cf42c144bb387997e93b3d0e3874d78196c728cefa86efe26f38e2233d1e3691d09f2c1e8c797000caf1bc947b2aebd418f397416f1354e737df9887227970002d1ecfec995a106682efde04b7048d83f96dc094111986d493f68aa0321a0005e19a51051f3f6a6abf98b57ebc5f9a4e4ed0661d190712cd800ad42b483f77756fb152795be1f167ecbc568a621b31ea884a2981dc9e1bd7cc062b0419902093b35388c47c8140a623eb879f4634b71434f479fca4c4453918a35e9a7b62602cc0c52cc88ea9099a07389993c5f82f39ca52ccdde0a062c542ca59a052fdd17c741c1e3fe560f0c2dafd60ad9039decf0d67e624172309fad163829d14ea9472a1f198dfd1c0665d0254858b06ef9877d96b51c5fb6570f02140b66b97204718da4a9206e87a018532be968099c783e36be546c372cbbbbe254b1b5b123ca614699ccfd23131c7f6f45cbb8034f04cef9413b34930ba4fe114c12faa807d0156bfcd4f25ebb8ac4b6756396bbc5588e8f95c881209f20da12a74b6758abae75155aa82082eb9f349b0113b0589968c07c5f338ca7030e27877871b8e323bf8e9a0e3766c0f21d5054ec9e4a0e45bd8cd8e0d2d1458295e35c78d4f814f1a167cdf00e77c909220735a695088bdead80fc465ee10cfb2755c4eb66d43f3d60aa976f5fb33b1c9923156a2811d672b580a20eac258cca834ad1feee6dec3cf771849601d26483c3e10d7f13df44521085fc15366d92cd562b4716fbec4da0da433dfa08729bb45479292395d3a2a60932a569b7c89d6fbbeacaefbdd60dc2c5c6b921bfe05bdbd1a6af408e9fc79dd5e85a8ca3f46c722e87d4ddad1cc29ef61da0a81d2943c21276f63f9b52e355c30173d63fbbbe52acd6a7ac6a98dc8d28051c0e0235830e1b360a0482c9b5a2e22701eb86be4a9c405a9df1409502fd70522a84e201021f03f083f383be39974b58e04c04e09b9dc37cbbf8609b835dd254d4b32c05c35839a899a719b76049c06c58f7478b2b9157d93cba2ab6913d77506e859b8b12c192d9af7d2697d080cb989804c965324227c1158399dce5188495d730c18043e06199e3deca918e66fa0d8a1df626c6ca41293d5265cc15f41d80df6a0d0311447537e4b48e37a06ec0b96812ea401e85ba7537df37fff57c90aba7c9c4cbfb3f27301b567fa6cbc03585c9f7f9352d024b0287ebe629f0b7c80f9d477e9f9a60bdcca52bd2d18350caecb3382e760e4c9b079487a0a207ed90db5701b664131bae1a3da0c5156691e6b0fddb9e38a64b3814c972b02e24e1c1d8c8a7148dc0aa7a66bd2b218aa089b9517d0f3c49ce662e878c7e618f9a680af38f2a708f04e0a97d40486d21423a433e6a001be49647dd086a8060beb7ddede2e28c8431b3f465fa8be1402304ce6f617b6b9cad62162bbe0abfdf2bb39c6bc7d959e80790f37ecd3cec663a35d85c5657e0d340351de137621dbc97c8bf160f80bac7071406e587df2e77c063dedf24933253faa6fb37c6421cc45bdd5e79b1e2bdb7ff343fd843d443ce4a44a75afd11f3a1ae52710ea8af9b1987840e74de858275934bacbfec5c73577dde428974af18362764fad3c6871ec0bd55c39b7fbe2cf9eb80cf343f3b31b68f50a7b5a1fbefcd238c341b7e4cc82921d8f1af729e264722ef6a889e2156ed39e74a58861ef4f7393206d21d4dd2a2e4a8c75f78c75d5cb74646620ae2ea23c95e079ed9c33353f83f7a3ac471b4bf27c164178981be2643d6b5b4e6f395f94a2f7ae38b87e36a854bcf4cdb0886cfdfef1752f9eaa33f06d375a7597569cc7b3275f8a8897fcc4f121e0928b6941a22db81771c6e504ae104d09f94e82fef513eb355b73a98a3325257a2c5278fdc27466f34d0acc6257fe3026fbbbf441d3dd568a7c3ae73167bfbdcf00b3eca47fa8437229b2fce400f455ad32a5becbef047dc916fd9a5342404c059359deca63a3c869b3a5705b617731e9f3f5d8afbfcfd454749f57ccb2aee4de1204719136ba489a73298dee39b647b5b2419af5ee8fbf62735b99f0b8c82e7d07c746e2776b11349591699cfc250cd4af181653c0e49d186f18c6ea488460e15107a15b2e5e97c66c5f26ea195838962450d53c1216370acb09edb721e00629e8ae183f340c8080b07d513d77b538b5cddf010ee3896761cce7869ea36952c9dc69b3df4c5de2335410d5b769a19f800ceb45eb8c5ccba0778c04e7845bfdc6adc3634296f572b31bd9f638fc3a9835dfc7608baba32e205f543c0b66a91d6956e66b9d21e65b807ca3754ba26c031dd89b8f6c8c1557f09f40178df9ad17ead109deff3d0843050f0b93c5f7b1ef604d399393fa33e3af0f7a7b4fa610c8f6505d84301e410ef4203e140bb9e0011826d4e339bfe46891885debc6159d435f8fccfa3ca79b9d9302ad51ccc9e8ca6f02d2d6f9b581402bee8680a36dd5d9203a37ecd56f525bc42f0ec9c7dd3745569c2ecc7e417bb09512399bf72d64c3d43759f9c1f8ecbea0f5015898441ba6186dd56c95790598d17d8ada211d48f12131d92f1264148ad1de81f19cd3a223e5243dada17b927bed660f6c6f2069c5c94a1630c8ed4d15f503c4bc6f9b0c80d58fce14e6487105bac0054d438232ef9d11ca46d2647c8fc1c74bdc9c19e2f53d61fb87a884855ab247fea7346cd28df6b02c33882f443cf45de803ab76828134268bd45e9f12810755ddfccd82370989af52a70bf20b28245b44af1c524d0fc4071eda5ab52e331d0a2f4ac17c45d86944cc1009e4267cc4ff30daa5704aaea0259c3c75dacf0943a9f3cea2c6ae1e944fe865133423cafa258ce78eb4e633dc38807f043fad0385fa23afcd7a78442fff2f3a26c2b691bf77d6c4924b466aac13ed9a110ce5533470fd5ecd8b8144a0e0a2ba520ff98fef2175dbf41054400e863e25a2748bb0172031a5f97cbed8f2121b9e0891261805e8b6a935d82901cb72b181e87b426e9f441fba760a3f9641d2e64330a23d4f1db4a9579436d250b50fb5b5aee7abef10d86c417184797538a25cfe0f6430de84fa4e09ad211c213b27fb6ed58714c4b5274ed2aa79ad41b35219e93b4b984e4c578ecde31515aa07b79b42925147090b995d28fbbbf09aa135b3832cae0b0e1724d0364baa86ca73e84d45a15f262f5b7fb8b055708a41f1631e57bef086ac0003564ed873c40af30816e065c888192dedb03f6ec2f34fd6db2bb4498afc5febde3e2b2b62e4f5e4ca114756d674c3dd574db1afa591ed421f45e74f56cb5b247d8deedf408eed91a802920845d7a1dbe0ff8805b3b20ec11c0c4f3d84e90f8d7e43120474c27c5cd7810551bcace6ff1e33e887f0ce64294beb9fff0ba94c4561ad3bf19a2768d9dd6c3f7d667da3c746fcd6487af14f696e37c321b561011d1681d09f6e988e78a44edce2c18172d9ffb145c1fd66df6c1af85357140b6133c90102f167e5e9fb612f5daf1ffb0efb5e4253d81ed405075e9585f621d7e6a8dea2260fd9ecc668a341017af83569afa9ab10c24426dab56b16b273db7328cfa7d98d2b1153450e6553f19d979990623e86e3fce6eb3d81290ec92ac6b623fe73e0e34bc2f89e98d6044c0dad0e026c119362c93fffb1a65eddae21db4bb009809b452faff3c3c227e2c33ed497a3fe6e0b6fa19234ed8869953f598f7f9bff94e7df8e5817484b30b5734b49f530911254a0a9c044ccf89f91f304c2c90141642037979c990cfa4670cdd84cb529dd0c98995b1f8ab6ea6f4e6c08fa74c6c5030ce7216dc9373264f8383540a67669483bb8fcc4d8a2001b40bfe49551b3560ec41615b3340b349f7a7d66849a0ee8244550cf2cdb6e90d39ad1d9b0418905af860b1dfe3575cdbcb1fae161e395556b7b933db2fdd376de4cf481124ebc76f3412dd55b0bc16ba8aa375f9636244c0da5a2f3f7f62b01b9bcaf5e878c3dde4c8a57b03965eb307b177d7bf88ee670c4251d92d4da45618ab403bc9542d896119d32a251dbc54230b0f81f5d80e477b941c71cfb38aa0cb480bc2223c3ad0ce2a5bf790728edc8a92db3a26e4f8a7363586ca9b8d16c94dc1a480eb93f5fd10bc5b21ce20719b9becb2e8089f97e58ab225bac67fe790fc0e5c8a1d2c48fdc99a0ba41c0ec9a3accd80bb969c824b7280bc9cb5baa13dc8faa6c5f4a040e314f24b329e3ac3b4d568ab53b70d568e1832a9cb83cd444e5e10e366ff26209f4b9bfd014de7b626115578d4ff6ec2685c66df990c3dad363aaf26e37cb3831f8067aa541c572d4eda8b0224d2bea90bda96c8e975387e95d1e494a8e237bb0cac4aac921e1c7fb2b1acd829704a6cff83631eba88df9dbd49d83881167971260152c6cb546b0a5a7f3d9f19ba56c8d9885ee4592e004db8cf511c987d558567e6f073a42c68e8d8613a5cbb1b9f187f831af3a413bd8945327fa741f0c9f13f85b87a1c5c49df6a5a8f39106159f2c332fd1f3e03dc87c057ca01da3592552a49789e154dc8fc37b1de2c81c3eb10a102a78d5bfa13940bec44002cd72b2108c0f03b142f76992c3d77c6a25c44a53e13ec797558b4cb9ad69c82ee1060b5a34577a26fb23f49487f93c98bfb789975a4b2a30d6997068b9c1d9ac4b5be6a40380390bb9721e491af8db6e74342f432573fc08b58bb1df21b080cab2be54650a36b91cc332e2e81e39b48bd1355a3d6783c37656af6877dedb935c95816507aa143735e368c426f54266f437420bf92737a60fbd709d4928815450347909ebddc29c91620b52a220260c5122db6f569ada7f0b07556f471fae9f15de7576652377e103786f6550496513394e822b4c74351c17b9299bc49d884cabf55a18abbc555d1d60c2d4766d4de43c7c4dae8dad3600286c9c1bf3c701e02263c733c6df990b91ded8994e84ddb5580f3841d25478e9fa6e21cde41372fae3ab04b91f7aad703642b0d369b616112febe4f1ae705c0a2eb75f670c72103e2cf37526487b0c401e573890f372618db0e569b477e96a06ac623e957990330f3eedbcb8742623e9e44e75e3a60b094fd9837016ba615b711438d6ffeef9d6ce2c80b74c51067884ad74e54693b536da34744216409135841da8ec69d9e6abfcd01f69992d583eed7fdcc4f2408c89bc77fd2bf9381dedeb7b084a3f39f773cd58d4d85b3a467121064446785abbd2e4d7917776d0cc8670b9066e92b1111914aeeb77b008ed8d2d76de167c06ffcf358314a5573851865dc86ff88cfe3b0dd8285339aa308183b8e10642b7f90dfc1b767c8d1ee68ff3a32333478bd9af4895f10de42e93b4b640d5331bbccedae43ee8062bc5f0cb2460b94adccc78558a33ebab7df539299980d669749deb115ebfd1eb9073fc14eb5be5e41c0639853cbbd464c75a67cf9e9afa300316c02c61dd54a690c80850da74ebd15dde991dc2654c65908faf465fbbba66d57d80a5744f210e31da7b0a60239d266f1f2420b1042c831600c546769a34b5085d440bade109a3a84d96872da01c19362945699968c82ea80126b824a23a319e091f6f609235f36d70ce2a816c2eb58d28f511a25e85435088f87c370a55cda8f02eeb5773a847cc6522bd7e52f6d23fc7ef5b96c55cb9872eaa62f2cf8c335ea92bd7de17a0e0bab812e3f7912a8720356341029ddc3498e1abca502ffec7490c9d91e239560d0a499fcedcf106217216526fd1fdacbdb12b2103d3d35dd344cf1e9020fea870afa12d5d8cd834732208fae1156e37fb4d1037f96c3d0e7a356b9c51b30ad08e4093da7195cf88a0a0d6c5c0ca3df872f0087299a7bd53e69660ef25c419a73fdb1fe63df4cf2121445e1e0e10643757137f65a82b34fb8ec1d238c144a4106d25cbb89c37f938075503aa79632021461ac8c72c0ea7c5b81ab13a249e7e4572cbe851d794895d0ca4b3dc1a3ef1cf494329dd4d2c3992d621cba771d5dbb4a37d60cb4c7fee8b9377557e43eed474ab1b379c9a8bb156392cd29d5801539d752a677e57e2be14913c3224e386ea504b8ed4f30864d1cd21715648b807b14ed84681f0a225e6eb95cb1e1ae4ddd31e31624bc4fb014efe152b29397de215a2a7fb1dbb6c36ffc9bb8b8ee23535f6a50bbccf34b19a8b75d98ede26b578b37a2cd49be7c24a759d8f6cbe8e4318b5e4d1530d8c26dec5bff354a2f94d7cef56d35223fc2b542d1e82fdd568f4c363d865176e00161db16b7cd2a95b6f4144dd1732da09366d5fa19e997e4c7b1b885738223d311a6fd78032e633422ec3e88a7da60468742df603fa0357951d06f3b1467a44898fc36c1e3e384644c1b853ad22aa73ac05862217285a4ab5dae3c5d438fb20f81b91c4de57db50dd039d32c168f6fb28906d40e11eb8f6bd7209bf52707187a189da1f8eef769afc2a87cb94ce6c4ac8896f42908eca06135fbe0f91cd96a532fe5b638b1232726212e3ece0025d0dcdfe97f1e6546082bb1d4705df26bda4bacf4810067b290e6eca69d1b0284f19fce102cce2982e1d2980e095497c48b91e0731f703f6196d69df62dc6e50980d12d1ce9a54ac9d191f2d941c87ddf8140bdfb659c40f47455aa00255dbf4576ae7350fc486df01bf6a8e27a8f392d7792bb32525565343de953ba59208b294bc7023b0ab4379135b762584de0f09f99aa863d1cb789e8abe2886fc268b81d33bfa62f4fce3d45e4db7f2cc591767f23c22ab1a78fbf22843c05946baad2894cf44cff1121f8ba1101925f3e6aa2954111d64a2cfc5627f4922ac9ce4ec82f50cb997ea22d04d7d69c8854011092e14b8707b01cfb9b39e0127641ba6ebd3390e440809dfc43dfe7dba2d9032d6c9d8efaad45cad5967a75c2419ad5668d6c75855e07f5f8b49bf1a48336b9ea42b561727ac663e24e2ae32fd65800841bf6054b6d861875dfd70ea3a2eb95d98d695db2e5170fac55f723e794ff5b2aa433143d29ade8ff8f4f9307377f85055f45b516ea2621e6dfbd9d0858aff96d74e0f16eb3e800ece57f17b7aa61415fa0ffbaea1fdd00332ff0465819d7107361ede2f63aafe1ee0da3a27b2c518853862b1b5dd0eafb65933b5d4e2762d77b2f063070d5717e2c38cbd448c830fb7618e39700904ba5e510cc532d654d52eb570c9d9b922b4ce44e21f5a9b1b137236441f76e072f3b99564bb403d4065d4ba72c9505801943db3a7781dce8909570ed875b3818615f060c4722373b1f418c509b032e37788c5f76bf7fe64597db7b278be542a5906f6a5fe1179dc6defe982f9ad06fab72b3d6d9ca68aded046d9e30c2c80292b9ba57afc9c4adc9def04b4d5b7338ef0d995a6a773d0700d6dcf5a726737c69766fdb0be1f9bd9f0808fca930fed6beb33b218fde020367ab707f21ffeb27f3af25dc6d9e0ca16eda2ce9383e7f7236d975a2f5a326f026ed0007b9d3165472969f2d22430358e2a0557ea25f3dad74346484efa8952e852a35c3ae3ee4ea3f9705c81843b6b1b610b66adadf9a7fe2e19089e699242982f532c2d57472d01d5532c1f99706da71082ffb66b7803fc347e363dd4f78ee1359e0d8c73f27059021fdb8e826d333c3bb8ff9b89c255f909e2e93456ee6cb958203e9f0e5a52c2747cc9908d27532fcca0017c569d55c91a10c819c2effcab80fc76d0eda52488f22b0aa7cc415283d19a532f64369c7e332076d06731d94a6dd543cd22bfb00660a0ec2d3844a0285a0363e18f9e61fdc60e50a20ba583e02f92787e3e960af30b9809695d0ac92b0abc84b8990662270065f2baabc58551f8ebb0c0a158bdc084c0f5c480dc0f67e2841170ea2c17f0ccb8e3e8425e1f9a1ff7d95328f8441678d28992255ef32da1c7c2ac5014a0a1634c1613139e3c58a76bf406fe044509caee546b67c871b2a0df8de3349e18aafa42262b3084495de318b45fca3963b8b15771042e5acefda494a84c90a647c641586b45b646acfd1ab2a12bab130e9264e14633155492e5f8934ce5f8ac22e315270e7e2f0341a7a9919d69c0bb94c9702db919de7d003307e5ba43cfce45754212cb023caeca41ccb26deb5ff2318d96f7962b58ef317bb95364be7fd7ad649180a6f4de930caff644b10e75083e696d32bde1e10ff730f074104028e091c4667c474e7bc24cffe7cbff83b27c491d5ac2bbe010104459cd13eef5f6cfca722900938c3bd1f4b8a10b7e3225d543204c630d630c176094a121b6b42a450c9a03a0e2d166dad533429876881d6065ca3b67085b31b34074fceb155549fa20874999bb07820f361df9c6740f1bc3a217a92e9f395ab8878ff1f06c099ac06088f5a7bcb0d40de904c0d4e3037dc2d9ffe67a3e89ab04ca49e168c7391eae188e874e6e3ca862c6337f6dd37dd13f89b403eff0aa727a859babd45de246b523eb9d15c98937b12fb7815513ace69ea57e4112a63432254f1e9b104520540ec853c15408cc921d0c55c7388384ec47b1102f737b0c5b0e58d4d619ffa6d7eaf3e2e4382fd64107000e00193b95dbc942c71b8661732dbeade54fc594b9cfc97864ec9db9824269ddd31ce08ddf802a686057ed4baf351628cea6450a41c9810beaccc42f0852f8c81f4b275fbc45590b1bb25cf4e57b1b08ca010f806d2761210742600774857db72afebccf0ecfd0612e4edd18b9478b0ae5c2c1f1fce0eb5ddccd25bebeea66b879b727d5e00b4e04d1e339eaee5769973e281fdda872e76ed654d637ee287bcec1964916f501f5abf6622018348b36fcb4358eac0b33259c0d2be53502b6a2ae591ab9ec984d51f910fd5335200353210d41601c28190317b5ac3d6a307ad0e1e3df9dca637e83150977cdc74071c07c82269a4317e5c64245b111968cd900ce710c1f9d5e9ad9b024cbbe2c56fa54266c382900dc450d41bc1eb3d367c9ffdb8f8f3e8fa91e2099c23ef93530a85fc761415ded180fe5ab7030334cc22462a0b3441053f9cc07fa8bf6b7e0e40a36b6aac0b86cdf1e53a84cce008bab708369a13d1a46c7b5651cbdbffe551801f3890e8328ffc14637d62e2166d9c6f6c6ee451b24d845d53639ea2dac310090ce321da2cd16644fcae1ff7a5137c11c731564a5f88160e2130ce5e654adef68e8a3e8fd27000a6a6960eb34e12b84a333a425b740a529ea2b70b9b77f334131fc8f17d14669102383cb257d7a7f49a0258b7dca060225ebedd123720f33871e0af35b93be1c3bdac1b70d25bbf51ed07a00167fb64538f4de7dda039ad075612b95c36c15642031ab805901f65ed576d24423d3796333cd008be30b139304f4812a0f9815c0dbed564b100c1759ed6eb3b2a12f716aa3c43696e01e3afab0082e13173d2ffd7b9991c2f17b48c25caf2691087d984af03cf906a8962feb91ff742ca0fc65bccb0a068cad268738802720ce4764c0ce0faefe4048216c452ac2810d10de14b19766595bec57d72009c6abab845825893947ca9faa412ca783524a5b5afbe8487b86dab4dbcd26aecc126fb82a76a4497c9ce542146b0a8476c3f1f9077f6e800d233e23f20addd39fc1931b2bd330140596505e7f08aeed9555ab90a247e56b49029eb1d050b404d73e57ee2437c1b5d1dbbfd9ceed48131b04824da59cb2db9ed2eb2a8014f0131993de23f6dd4d455b2e0ad81a542fad6c7fd15dee97522150f553b75285c02efc17ba1c91f94fcf56e4c76a6f6275a7ff1957e15fed2f518a5d27c5bcf56c741471b360fedb593cc5078ff9f3584d35670bf80596b1782e759a9fbaa48e60db0ac4588d03a2b7f5307925fb05f51096e379273c6e5b79a1d60a608ec7a1d19753ff39499f93daf69357a2d930bfbd1bc6e4f0d975e2446ef497c0037c86443b9342adf764174795c12fa4af3d9e2fd89d6ad95570376cbf11e46d3f9fb31d9eace6bfc38ef0057abb7029fcdb5ebf27424ef1af503c9af5b1de7170f7edbf2e70909ec082ff787578a450f87573a1ec57c2b30e15e2fdc0c71374f7dae71747eb251175aa20f0829048069688fbb25a1f455e8417b907aeb3a65cb9fca5df0693275c7d6e5c41fa0283b3a07dacfe6c1d8b4a249d07bb03980c900128020400a0008e6341cd3c54b9308d419bc10080224000000ae038c002c8bb174025000b0083bdba6f8d209f00d038fe6f4ca107bb6a1f8ea28601210069719563f421c61edb9a1edd714d6452553260ecdedfbeec7f3c7be8897fc3990182f975263d03796d5bcaf036d0160fc6d47e0da9b052eeeb12656d27b5e015740ee287e046d0ddb81ed8041c417d5f293fc759b7b06df963bdfbb2387f94e416ff33e0b7df9cf63c8ee162ec0e9443be11cf0647a63a968f8a98c6cb41f77e831ce83dcad80da019c12f682c81f2cf545ff3d7574ac67e1df4dd9bc86029abe0182fc9bc6e3a864020f61187d104381b313adae93917ba250bff115081ac3e645969f6c9f25e2c1f40b197d01ca8d8c7e9ed741b7b0baedde7ad7b13ae3dce3b5e42515f97323622f98e8ed5939ca3f49d37ecebdd81d80c75f2e74c3793eae36147d2ccf0d55eaeda59816d34af3902fa1a0f35c8bec6b7e1f40b61aafc6642a047add66325d89cd8b8fd10815f7d7bca7ff693e2795dec6d814e1ebbf2f9021b69d78fdf8b01992914cbea8ab6ddf488b660fc7fc0939643a47752b454325dcd2ef42b2262a462e4304602351936731890a88098fff25942d4ca956676a4f0e20d9301024b4df04dce3dd859d830e78ca25dd975153cf096f29c290f1459a7892457deb341e7d4d4a282ca6c5c39a50d677f1af6f2299212764986d47bf5f4c42a4e9c09377fa37ce79eab88c568ba512d2d7b72e927a3ccee33f6c352b9816ee3dbd2fe43bcc0cd5bbcb34fef5dc41056f5744c52d3d6dfa960926dc128395cd70c5acb0b09862a00a644b1890eb0f9e315d3d50957e98b5a02037f6fff16f10afbb1e06d9190a8b13ac8f435c3a95911bf727aa0a43a07fe1f206f113eafaddc543bdf806d640b06e43f1e4aa55d5b5adbdaca0ee303e0d7815d508280f85ce0787a44e69a5c5edb3fd8b134b8d906eaa736680e36659deb36ac855cc9233e9d5890bd607879b620a42941333114b5174e3a83a9aa4a1a90cad8d127fdd7084754a674c165556d3085de5ff3d52b8b83801e0ab3e5238a46736e83883fc16666c20ad9a681ea7761618c515fae26e906411fa5cc786296a7d66446a919311b832e508e1bc0c5c554388fe835aeee7c93b75f027f8c33fbf646934cf7dc14c89d3110cdc2e5582ffc68c30248ca4eff9506d27a64a774140c4a03bd5995f97b384499a008298c715b59385d567b85e9c3a2ff4a96e6fd79deb746ffc242dd3da7cd7e50c62a3c4ee5e7916b1699b54a799dfff52081ac26c0b547c19401b059e31ab2dfc5d03cf1bf40b6a57e3e2afa17b6653a0b2f0fc31ef6400f411a3194411399f6c78ab2d0e5429c1378f2208667b2a74bd045fb6d3208a4779b25c637aa373bfee62f31b85e28570069d502075ac3a0262b294a2bc927033b22d897f60b9bf9e6222aa7d3dab7901f15b140b7cf6e34a85ab51b39ab48e571070131de29118a6fd6552b5d190ee777d5f3a7b593139dfd64e2c46d90f82c18b7e6a3750688f5f0edbc244a21ae83285b89ebe46eb04e1599ef0d315b30a6d02b157dd7a5c72b2511ee425a983a30ef52d5fd2cca66ac5de230832192ba52d7343ba8ee0362bdeaaf03b59a6fb27db868956000c89c48bf15469d76fdea98420048ad94b10037fcc74af6bd5e2768be7ad78d74b2d70017a5a1bdab7a2a4f2088476cfaf4b871b45fc87836d0645d518c1d0e0867ef3297da5b6ba4f0985f2a4d11e07293d209ea59cd770be204fe11367734e969dcbbd02b327f90828439bf35bd1760ad63198408bde7a3b8344db7dcaf8b01a6be1ec0c7a84f43a3b854adbb9be1dd36d4144e469e538073901384e332250b2251429e328466ca4f7f2b474ac63fc60bad2d5eadaa3d173d4fe11ce6bc89da35079024b49fd21735cd1a83dfb2e549330fcf5c0c94115efad3da6205d7b86d562e119dbc0015d58366d6050432fd64cdc9f0c30899a8a099c7af439af24509eb39f7343640cbcf34ac040dacaebf40b4d94995dcda55220a68cf2f79ce70a5debbdd5afeffded5b32fcc44f3bfccbbe5df114c9cc53cf3ad189e5a5021ee637011880c3e419d01649b9a7c08e97ea33390450c3cb9de01649b9b7000c1aed1b311450d3ea98e6132655cb420567c5f228a9d6c290e2bb4e708fc23138721921b605cd351082ab4e710dc83898721cb1b606cf311082ab07b14eca3a9c721c9113c66e3d1442bb07b1c8c83098790ca1d386ef351042adb7918fca9098790cb113046e3a8842bda7b1cdc81e98310cb0f3a46e3e8042ad871b093ca6599964471cbcf3674daeccd56183682d7326a0d7535eba995191d4329298a4f4a8fe2e63e31dde825e0171a8ee5a50e4179bd469c8f740ae397c24378b84b943e9412f51b3d07f2a9465c0eaf10e12f2dc5704aeb61fc5c24a61bbd04fc42c3b1bcd42128afd788f3914e61fc5278080f7789d28752a27ea3e740fe696a29e2111c50ad1e8a38f235d132105bea39d0b093850a20395d43c858f5f4c9a14b3930ccce6685f7e93d66da50ace55d0e2500ddab90fb64938e8ac588b2c044be2ea129144e06cdcb0a995b92800b5088178427310bf3d2380178095ab99149e929e02dee6a0bc3b5f53d31109009e70d9a1c487771b1f8dfcaa4c99cd47ff9a4655bca83ac677d182d6f4fc5b2a2ac7cb48912578b330aebd24d6059df5ed22d3842638e0878486e425993184ae82f8ef253abf955ee3342b54c0019dadaef47db0556a76a96e94576a1750af5e954a6956298710a0f12545d260e72b0cd6cf4fa589f16a8e39e0176593e64f0401ad835d7c3618b48ba927a32b61adb77cb694da728567ba183fe0c1524ac39d4b3c823d738aaa94831d3bf94d5d6052134dae465a0e114c875535e058b557e572d3461c778d189950e6b8ffe0d4dcc81f8352dfe76f67970c36d48e3c8e10fa37f8ff179cf94aa999fd7d8d6095db407e8eb13399ae869acfa4bb126a6bd4b524f21bc5784d84bdeefdd1859ed49759bb331a69f88b88e53ff13779b0adaec920e8bcf10c27e48ef602a0c5cea639b18dc4fffaceba6b802af1fc6df80099c183816713b8684d70ce5be42bfdebeb115f4a87c36c6c658d7b3528f1920e7fa9b4eb789e8d10bfbdfa8bd0d037fb9cb8f782d4bc23d753fa57b235ac0342fd6f3de0d799dd3698d163c85ed20e3aa3cf00f8b1a3fa978a015591c2d38de668b55d5edb08a976fe28363062729845ba378dc8ecf7763c49e7ac9983faf7eec357c859f46721ee4244dfb358f242850fedbf58b73ead1fa72ee6c3bc2310d2463c3995bfefc1aec6f3a03ce577ad2a4914d37dd0ef4215674afdb00f4f26716876cc7efeafabe24d5d4215cf9b371f68fedd310618f34b897e718ba79cbae4842b8bdefa5c69a0e15dbaeb56461d204d46e745fa5b8ca00794815ae9ff3e2962325f792691981a8fe241e70be9d04403eb67bee0c1bbd49d2a8edcd270f585430651ddf0783a6f90dfbdf8d4ff1f34172bde5efde310efa61312ec80b8c16a30d3be8ba2f9af49de1eb8b6748eac0f5270b4ffd9a9a1e9cfb4dab11f46f42cdc88d197e726b8408fab791e7113512c0fc69e7c53112e6fff92022455affe11faa1a0fa825d30fd02bd3efe34c6dad7555126ebe65bbb950d23e1983b2106ec79e6e6fe9810067cc82e18944f7e277309f165421102c97704922b19e52b6b572852d0d81868b63ae17137a86edc07782589982ed4281ac6cd94053b50a166d9bd4387fed60cde800e1efb91b4a1403711e65a789febd997763c20898c243febf509ebefdf4d802e64c3c81ab286c0caef8597f871cbfccd8bf67c105a7546c178e5bc2e8d6866ede3182d0c8d10295f2c281ae901f78be72f8fa156c3da12b5c0946775ce10acc9d95025345c9a2faac7af62a097b62c719ed19dda0546e1681dc8226b64e7bfadef32dcedf5a532269ca9a6381ae9c6e42bd89d8845c0f5d03d3eb401da5299076abab810eaa357fe3948495747a233a29312cb88ee648d48b70f03dc1ac2363aefe635de17a1359b159e3ea5a19a8f4a78199bd3c327ffc0180dd1e8dc229192583b30c927d48afd3070740f4e8e7d770ac69d4115a82e99e106e2b4620615342c39774b8e3d7956bc2c338dc8a29330a4cb9ec48eb09318866b8b75e032c520085d4ffe74992a596d96857bd62faed518a5279d956bbf81d99080e701edf888f13bf13561af2bab114acdb0ba7fe6aa5ed0583fa675f8e890e40b6f24ee2070711b6d546d582ca069562e294e6fb1bf900c15c19abea240c1c887abba1e5e9905b8d0c6b0587fcc1150d2083875d2a654d4223a3badc347f122f279cb23c44885d0e9a192df2a41bc62283e9d59d5be3a7209e3589f7e7e08f8877785f2237675794e45b76b483955fa22310cee1cd6707cb175222862799028fae92763e02bbe0ae90c681da151de25aedaf88f66f1fc1608e0d6911b6bce008d0e34054836e7cc96aaa0fd4d6590627be1c857f5a4f49da9ee67711aa680841ed7b765ca62a38d70941746c7714585f446488269486af5223fe263454bc6c1f9c55e9ed0d504dcc0e01e23ec243b7d85ddc54745e41da2c904ac505e409e46e49107760ed897f722ed87a38e30c25cc4e13fda87230cf1b84e7dde736f48fdf83585e500f004c2d09626181f1e7a3613c518e6c4b1ae35b02a1a54735d88386ded4df6d0e2621001631245f858ed5f50a3b408951bcaa4c24282257fae0c89490957245a20b587f0f311ebaea4b4244c5abaa05822a6025ed5b29dea3ba57b7f087d88f89f86ed57d4cc0b491e79608366ea28c34b15d816e520cdd00ba91cbac64c3c25cbacd0cea1c12ebf1143011d3acfe30d389f57ff473eeb3c1f02c7012e82dc4ecca442db4356e77a8f558a302eac9b5617c1ef2f50ba924c894e7d1412dbcca85693465f08d0265b593333e96816ce7e0e1fec06819082e2a218c6d0c1e0eb4a5b946b107f89611163461b211c0a743307a36f666d04a7e36041b648218cb9e629f2343c6dd09209e64ccf5e11ae20283226303c9e52f9bb8d51a6b9d1ceecf605ba360f11dfbc16547751feeb2a4ef777851d0a1439a9c9e80a8ab9b3a68fa97d9ba479b9ab6618a8936a50face18f29bc035392e7995f338eeb78df01ae0b57cb05f0efb10a4a7e66e3de414dfeed758edf858f494058fcef0f16b3068d5f7cf45e4c5cc47ed0a1e568be2933b3a8bde88a0c820fac72b73c6f8de81c443c32c1f2cd34b92dd91700f0cd06ffa820efc0833ebd2b4b1553ebbe830f3d7d1a4a3363d9170aed82c56fd7e1567e1a0ff8013fa2b6ee6858aee0a5cb69b20ff1940fa00f9aabd90d95412092d487a7b5f94b6380da963f9fb1e7e4fbb736ef4e2571742d3efa790046bc58606e680f0c18cf14fe1ce7786c7a8deb5a4d6c7bd0fbfa804df3e5c16ce42441c8bdd36897269b8323f0e8ff7d0197c17bb442970fca39c03a983991b8c63ed8b0f0a0bf17272fad7fceb94f3f2250ae4ec91219be471bcb61e75a19d00a1a8108dd73b246eb06e3c59ffea4286694ef0468024f9c878da3b8372dfd7f7f80d4ca486fc949d3595fc88600f6e6ef68488bbe4413f526429a42864457d34ac4cccdc74a08e2ff4bb26942119e885f5e8197e955889f8884cfd6519c4e6112c0f951aaf26a5552d8387d55e461228871186ac7aed342c4cf839761ca06820c3151ea30fd2979e3fc42c1e4997a1e18627064d81bf936ca76bbc358b3a020421418a059cfb6f2700b76c57d3a8d7096ed6162ff1a44854ba8cc70b646f47221ae17434b3ecbc83f74ff7b5fc07aea69ff780dcd8fece9bdbb2bbde811c800e8d0c0e1827c937a333af32ceb9a0c8c5db918fc877505cee7ff0bc9f6bdb4109ecf85ebf135a30d7da7e88d26bcb8ed5054a2ca80de7e0c067f5233f745c9f67ea093099b39a5fa374d39374e2c1d968f984e7cbc13774786976628a8e910bd1508c49453060931c7038de935038fa876b449047799ac41bb27a670ca805f8ddabc5765d24775572e457fed8dab3338f445e35ba61a1198087e8e8a1078c1e295e17bfe304360a47afb6db37e0e671da57095a623c85f48fb76201f564abab2b27e01f658ed95876b9cac8d8f502f5911d833e2fdd0d78fcbe62a343348f5cfa38943d541179e64be5a7af6c352aee2279dfad3af757e0cd38e434ff9431c8537ba548c63d7779bf95ee8790a3e72cf4462369b1962abc3a41a40cd469e60f40bbab0ec3f6eed11e4d49b33f4c1ada21889ab9da16fde9d8ac218ba6233c3451d3d7807efcbb6fcc13cbba6db88c3a78d19d44e6ff88939855cad3e123b92cdb036ce930ad201708a940e3edb78e1fb2c341ff93c624b2f5a6421593ca2bdc9a5d42638f4185e7b938017ed2e73655aabff585a90f5e17fe4792aaf2d1273e7a21267d3c8cf1ce15bc5c093ca9941e45d87c471bd72eaca3b099f50e4382b0639007dd5a74672accc75050988515a5429e3a9fd5aea26cc30d89cf1eb5d4c219182e77f2668f960e6f93e91ab47030eb3a0c344959b47468154ba79ae0976ec1f1796f1fc7c42f428ba6e89beef9dd68eedcc76dd0bbf62bbb52b8cd9eb8ef91bcc631faa897c4c7b44da9d62cb8d739a2134661c6d50180fb089bac0d09e607a2e00a8e692971c216609ff6a7158d33e2467d9070bb8b46c3b3cf4d5c6c621f2d9d1ea83b86020ba48dafff26287dca04674f6f63b9b7954b9efd3e6b5b7e2ac7cbfc4e83c3ccaaf3936fc465cf79c448be43f9a0494a66343fdcad40cf32184fafc57d590591883fa3fd2fff967831fdf94fe54fdafc9f22d693ab6e7fd4b1c72e505d17394198efce47bd74be892a607e58ff5da7d59c40b7c30b268ffa8fd3088d622731ee018823ff31dd2cb7dd6fdcbf8dcd06374017699081b92160869ea8fc26adae84280bd91fa2f6c205ab1565ed3da44c3313dbf2f2751841d1930bb87da8533d54df5b35df8e16591de51c91b7c7a660a2d941833e278bbe1cba7ad5f2596db19e9196566315c99aceaa1e6894a2abdb4dc8624e480526b84ece7c144c4496da3ab7c1f103710fcf9cda0dfaa11eb8100b64d8e20fcdfdbbd4f0e944839ce248c2f881cac87dd55bc6ec0fc750e0a7d413524d4a6d9961a726c52815fce3e3e87cbf2159ffbfc3b9d9163c8a351724d99739dea7c5ddf82202b13e4afa4ffe8efd33c9413d6769f4035b8722ca0739f3ae948b139dc985cbaae8bbfe63d8cd76c54ebc4c73d4d8e1f3bc9058db91b9f3b519e1e918d0b74883fec03ea181baf8eed84e23966f6d6b1f50ff5f4110c4cbbae5b521db0b540cf15d494b1418db2163f3be26593dcec74679a3924efd90d9d425dc5add65dbfa240cc374820ad148a3b05c597b0b644dcd66bb4d2296d28df7e53bf3a2e04e111efb36e49deb75ca7d5779c1004aeb1764e6715bb50c59bc2705825328b18804b068883704f635e4043670736dad88057074f570bb68e2dd50064443b215cb1d7d7e2cb2ddf1fdb7c693ef6c790fa0fe995f7505f7f37965e93a80be947ee33cf3453afdf4837a0ee26ce857325d2d010bcb9898ef38e42e47fb93a1d9d3113b46c35f3758eb92de4695b215e3b29c67d1729fbc34461b6c2fcd8a7119ca0eccedcb4903e4d8ce6f76d51dbaefc6e7c8d7c9973c23c0991d3cd74d0b17d8e95585ff8aa57303d35b551c26945d5c19e4cf097bd6db973ab1f23fb5368cebf8aa07dcdd81d6a80c1e6b8543a6d8b7380b27c0c7af717eff689721393c429844f7493623b769a73280b55bef17328842cbb20077651df4db60eb8006355a4eea5cb362ecee3adcd5ca6c571336ee817bfdc6bb585ca9abd9248daa2435f85479312cfa1458298e2a05094ccaee89f0a6a683d18a1dafdaab909277256e9b3ad7efd5086768d33eeb9a8a98299b59e805692f2c5571e8612403bc187108c7be099c7fc760bd3405e958bd5427d5e8f44be6374b077ae99ab0adac48ad42cfadd7d19e2f20bf06097b7dde11378664bdb947c0f7ecf4f8834f00a9a6800b20dfcaf44d00314e58080b315a420f5d96ba4414144942131d940685c86615aa9d5a034d5693f497f326a98bd1831b1a941aa2dc954bb444a704d9b334d41349800793aeccbd28c8c66ad3353364c8685196c25c4560247cff6c602683ed77a13d1e5acb215cb76d7b8b7b8231fb97d2f472de731be9b7a382dc7e156bf6dd2e7a6c5ad20176a94d32343af06c09ebcc7884278f4478311bfd774fe3ea82e94152f9e90cb4c5c6cdb09da2da8a13cec86fb086e9c36e1773c7963a880741888ae3f21f7cfba63ec73464e34300b77c95ea300d6bec63e85aca8227100e2040f1a226e0a6f5cde2a27d39005da009d621b1a3c858c63abe714e08e9cb5d35d8b9f508dc37a1359bedb23502722922c70f8bc3596cfbc89032ec156e7bc86a7cb228b4320910c757d10b6e7093a322d81e73e95c3136ab14389a12a8df8ccce593c5b5a091f38b77940571f2c6945616fc6103cd8fc972411bbcb6f3e14b0e4cdfb353d2630a2a6e9e01754f6cf533200415ee60049c42ef062757427af5ed44429c484444e3bae921f8589f563a13fce1d9f4f038760ec634322d01c40c99e94484dda15aa6ddb1cdb75a602b483068eb01ab18ca84dc3b88438a7ceecda7673a1cbcfc7394b666f74e60aeb697611bf1ff3fc1c8b500b9c7105ce2718c04b8ac5f6d1629b6755604c4e9a80557a4c1208c3d0c04effa33904d013ee1bc953c11454234bef9863d4bf50bf1570ce8f9325dc1b2dab8923ee109c770c8c2443d2023c554ac5cec39fb4973123ec6ce3b2957da91fbd7f8bf13ae8fbed5862cffc15029fa20b35860d3aaab3bc9988d80328236e02397a25f4c9e370e32a617aa74789bf4e2d5b21e0f6f8090fc69ff72f15e98e1c477f7f9b62bdef4aabf35b1366df4a93789354f9eb7acfc33fcec1ed72363573dda2e9f69d409e3b9e116bf9cfb16972dd798d7665cc05bccf06e6bb55e58841fc4b1eb3d16407aafcddfce3c70fce2ff3acc33c5e43e5bae65c9d024d9e09efcdcd8fa275c29a9ecec68ba3c47fb4d4990b237b83f54fdc6307fa19ac10dbeb4b444baf1483760e566199af45b80f27a8e71e183cb1d4ebb1fddd31cc393fa42ecec43ec3f9df416b8d1f58ef5ce09b599834bad64d9b44ab4826a80c635256c01766c25e1335759780d78bc2e66d991756b9dd20dd2c0257970a6d17039b734f5898194aaa0e37af2e9705e35dedae7a4dfa1e4e99d816126509c034b181aa1db265727722e67a29159b1ed9e5c22839fce64a09645c1b58505fcfdb7184448c1472386486417ff87d513fa50d3c5d35c08894108f6351b548bd1d48f8bb7c8513ac508f74075973dec4bb07b449ae81785720106253fbe43948921df25acd9377782e75fbdaa1c2a4e241c31fac2d506f0878694f17225eb81b0479eec092083d011c3af1311d921a2846ca8d9bf1556e48cc4e1c78aecac77436e694e04cfa926ad14b9ed282039fc173b3ebbe5d866cf956c067a7eaf6d57a5a4852da196d35f85610865d1c299377ee8f537ec4db7aed407c10d83b79efd482704e8d3af3f1784a6274968cb8f4a568837268d065388c0ee2149b901ea594f37b7477a214a65a4f3fb15d7a5e2b91942b09fddf3636372bdbf4367632dfa68945ea2a01a7f708a10e6057ae17726a12ab000f4154cc11f0084a6d87258ca5243d6e5b79772f0fae3f311ac777ad8cc70c5031973abc2e01d950052903e876f938a37686aceb46b1540c82f13ef4baff2f73aecf277ff58e82dbeda96cc678a3d48a39cccfba9ab455770c2de61735ed9f375e6339e56e60f3d89649f38bae5862519b8c05a62d4ccf20b5adc80e95f66f5cdaa98258f5083dbfd6069fc4836d3fdf63b2e5c27106c11331574dd40ff8bd4b93c2239a6910b4dc630278fba0697c1526bda111b74b12c942eff4fb0be461c23a778fabc18a260c0c50b5b4bef7cf18161083b66b2d9a62466c42cf318e489a327f6f8e8cd3462d0dc0e34c03bcd4c77196837b0dab5d257c5975ddf78700ae18666bb24ab9ca50dbe48c23a592b8f7c1b545dafd232fe427a4b2443db9b86c8e007bfcd67ef8c4e4deda4945228f8b1ee48acc902327c3d0f7d6f5c2301fc0b67773d12dcc4f74cde6726299f5c024d4c51b67ee83fa5ce7773596a8694619d9e16a487105f7048f640b7eae80eec1188d8cf6b30ceb86e632e38e69d41df5600e3bbe851ca51b81b575a7fe0f693fa85c1e50800638dc3c57543ee1fae6f04a80bf0596f36c3a552b81808eb3f2edc250255618008c397186a75b074d87424301c0e1e8bf8f3f3e69ac98be4b8440d7f0949d39d4198ecfec0150d58c4af7a38cd21e43a3299133adfe39487d79c206c240f80e157fd71285293326b86a89333a14da0eaa3035a978be3bbf4241317ca09f8da78ff82c6fda37ad18bd594dffb8176f1c49d414f23970958c7c332c2d1fa4d35bf55aea94edf033d7ab913188d49ac9069c7f05c4c049d825302fd06e8f3fce946708e97d062925499aa8b25203db519f00e88738118f1e3d2a59ee70142a80646886cc6804fccb728e08a4cdc0070f100eb58325c7d420e7abd64f48cb9d57737e18684e5fadcb66b3d80390a1d2dc0595c9f9e55f9afdd7e4cb036d06293893adcf4713730d929cd8142729cbd5d7ad5957152683f7c30285a84374462a95d8ead25f0b58d79d281b2e50c8fbb713d5cd976d45e0682ff7a226abe72cb370acaed367bf666e88209f157b27b0fbdca264992adf9cef64307a81afe9807069940d3485e7a4b912cb585db6e9ec0c622172dc63ccc4508144c011f1ae2ab7bef61815b54758bc14c06e00c5b23c24141d9601195c95d909073a8a59bac82516f08ae8ae0b294beb6e47125ece6405c7a5df95efb52be8a087330196937e22c4dc4cc153e6d74418b3fd8949861920c6d99465da550da293f33cdee6cfe9b0297fdb20da76c795b039499cba794b9ff60499f6a2cc89bdd483ddfdc8af5aaa990750a5094cd940ac4f2e543bdcebd0326d197b0614a7ad27aee5ec5f492cc18ecfd78a9d3d3295ee023b1c3d35d112e1e235da5aff55d11bfb55f2ba563901c877f1290a462d8566c8c86cdab63625e23cd9d6bee5e2276822e851dc22eebffc011566e5fff5d26e052b42ae0709e4467a6140e08e558ca582a285b498b70ea45a4255a3c5ce649af58b5f10677a53fc8f0fdba1dbdeadcbfd078924b33923d60231f964733a57f94041e4557e96353f977326a96bde126ca9dd1b4086e3b180c9c0cb356ff86aadd90239f6a748fda0367df9b42d7bdbe12367eef4062fa7e2d7c32255b8cb3dc73d8e0319a7424c2998ce7d0271881e21e4f3ecf1d21345e52bd9731a0773d154dd59ffe8eb59e86f0fd5f8d7df72b96db4b53f9085fc6b25dbc60ec49eddc476e0969741bcf664e2629aec064fdd74cab2991f279b8c4a5d95f2bfccd6eb66686b83b3eba9d67d95c3b06287af3ab4748c5a50f1af8518e36c44a805dce327083b4999575c7d05183eb9d77011509f7a2b29a6bde73b1de22f9ea401a7946b5956016edfc0c8696eafce7b9ac5464db4fd45d520711e0c12cc20da548e87ddbf59267c93bd10606bf7fec0f50b3bfa305caaffd03ddac0552db571794f18899f1952ffdc9fbc3f978bda203fd63c68b6197b61df8cf18234946f0b0512653c0553fb32627aa33c068d70e58c2c1e7aa37002a6746607e8c8c2e76130f07c0d977e94c963d6c497960e5263100ff0a7fccd07c9661d22c7d650f942c3849d9f0ce69d725a33d3484412d32ce8e816f5a70fed65cc0fd121c48a70fc23c08d9d458ff8cc351684306fd3c257a66ed3234d87e542a47283da40e8c12e60624ba03c38e169976fe9b20eec32edb3c5ac0cc8d45c9010b717a8251b4c33386e32011c84dec1ef42421b0f02f48243fbc9b4849e0952afb73f41e003a74690cc4b2dd08512b3df1a5bf380403ae21f73fa9df2658057558c0bf7045d989cc73fb480a41b970b8e8b16c4fdedd5a02504af9808a4f4bcdf8a649ad627ae3f37a01b5e02a26bce0c1d50f722013b2f9db0217d87a580a9f43ae7775d8b50974e80c43ce779b5907896e784e5bf8ae6878ea79bffcffaebd87b5e2096dde787c987da6cbf7ff73f7e9b68f7ca20bcdff6df1c155d7dd17c4af20291c650b4092bdb7a930605720ceefe82b4bf6fa1bacc4d9d6df0f8c092a251989bf770bca7de088d00191e73470d07da4a12ba65b135e0daccd8ab6896772df96825cb4cd17ada0d915e91fb7187bad3c44e81ee5942fc189935e4a13e4f095778fb05dfeffd7f8ce3efecfc55ecf32e4465c77702dd617274672fbdb02b38a96cf307e0227bf17148abf0dd77db4c1be88df535def13c46e7629330c9008115aad4dd706b6e882bf0281a4e282cb995eba547d00bc3d967868ea712c7ff1ea6f12a2f0cc3c1a1ee4ad27fe2240474305b0d618d120a8c17ca57e708828eb7ea9bb25221404c0c15c164062d4f72ce71bb2cbf348c847645e165a80ac5806a2cc1ae3ea4ab7088f7444b042d5600c893ef65592a77cb2e032787e68f73a94204892708e442180065d0daf4082b1964a067fc9a7049ef96bec0600ec26f89d6fb19031fe143b6acafa8a7a2c37fffe2863f28783888be80d656149beb53034e664c16f76bd7a791c462e48d377867c8cae4851e8dbf471f4ab6365f06c4a72343109600a7b34f36a16b43f4a60af41d17077af72902bc1aafe8259eadb5618c4cdbda62ef7703b2a71c3cbac6ad3c2711f8b7d130135cd2c6997d2368b21177605709621ddc151336f8cdb2117f486ebeb6b176effa4929c5fbd14eaba5df71350b76c291eea6108bcfde86569d63d521e08e2170c98e68b69d3c8b09d342506f9158f12b00c3fc2ad21e4ca0f8fc3e082f262a9815c14d5f00e0d461a909372d4281d8c4f2c470c30ba56b2934c12a02660a3164b4e3a5c8b257e1a65a67b86b9ad620225a1e7af803cfcdf04ba1a3cd65974a5d7e37c038e28003fecd428269f827b18502c26b6f9cb5d2386ef5142cf60b71cbe1e6a2c99ca824ff6aeed3328951702e0405b2157e2e73fe68034f23d8165beaefa81aa7ebd59f7bf540668568692985b61e8a175dfd59dc3cb1db9dd237b2ca507e7da6767a6d34e35b827b4bfbf2f9acba3d13f91b252ea837ddec04020cdbfc4721f67ed6f4f9ac21b0a7c8e0ba7f92cf93ffc80ac94d8cafd5da4d4401a2b721da4206b7a1b383f2c92f24a4d75f5468daf8ba8bdb3c48bd423b8dfdeb64e1375a38801cf13882110c791097366f63960bf4b79ea51d14ca43ea9be1723ca33758fe4ab7b5dad052460f3d3086a4350dbe06c9861ccdb6ab67219651c6743260de971cf1192c16a7a08f146318c44a4094cf1ad8fd538a7a22374b90f0d38756765eb23b6fd1f0b3822a02bfee12bce3fbe5db710b69255d918a8be8d5b5a69dde78d6e3a386cd406caecdebacf3afc4ef8f72d510ba6da9d4999a08fa365634e6c9fc9a429580fb168a5d01a77dd41c2b82a04abe9d492cf3d31199d0d8cc02fa1e988808c908d356e283626c5cbaa2e36140a46c3abe42a7b4bda1a48d1701fbc232dcbe5ea3ceb8115201c835ccc39f2e211b098b410815672d704297da0c458523a7829381c75d8846470c8e84676f41baf79079fdef8785238416cda2ad853526956ef78de799e6a9d2bad082a9dc420128ad8fbd30ed45898a33e2fb42ef8d701da831a82dd7a611764aac12cca3977b0ed451a0b9ad6b32eca91d72e62fd95fe8d51ee67699909ce3dd8beddc8bc8fb8a1b1c73df46eaf7ab2d1e11d6a323331bb3034c42891a00bc763c6197b8e9df542bac7c42b54e0562ca14445453671ca1c4819e28a25b712ebc81b2e33e0f76850208cb4e6b672325c93119f27cfe680c14e3d8fea94aff40df487fe1577514527faa925ea8d1a82e2fc642c57153b5c30fc3f05a78718fc2eb7ac2b4a0c7af77716bc03c6e0187164a849ccc520d8574ab5d47a1fe13272a59b4a44e98657165c714a841d153af1e841d5b46222d89ea380373ee179e160be88b2a379f2234842df0e5d7d56daa081430ea5f8e768655fa6a25742e349518ed569ff4e2a764099882904fad5ad95d1f0c807b2c657efbe1a309b784cc8cbb7ad4c8bc7511fc1358d64a3b484c1e416a880d2424e517300dcf24caaf84b008c2d9f0f91132ee2e334277dfb03cc4ef28d2b5f78d84d879ab748a3e89531ba985dcf2a663ae1ddf1ce87646ca0b691274db6af1af36260ee86f4814d849fb85b00232e1046b052ee516f1e3682152f70500d09dd0866cf60d5530b15632d4e15cf87d67e03ec71bad5eaeff5aaa95a210aa4c1e9971589d91785add4c6aa5ea093cc0f23b192f598f135912bb30f131d5e4d536117b9018c281554dfad30e555ea4f18f09aede99cdde1e07690919d7b2d13ae4d14443508cf7386b61bb32dc08e168598605e206029a8b124b247578998c244adc9da80322fae2487f3701c7b9434fa69e0be55812b737083a1f11c3706c50ebfa38c828bef052b2f5e6f15b191452374d2b6e73175f000f5d744a93d860a674c48f049b4917f98f60096a095bfc887f26aa18f59e2202c364a90965a991e084f2834c7095392451a079ac9b2511f1876b9ec3342ba08f8fb0f4481f342ddd293810a6421faa61b27d266f00e1b85042e2603b51bcfe8d7fe15266151ba3dcb23174145affd3cc7b4d4f871038ad97b0e2628d99ea105eee112a14a014e85729d5724fa1ec28a1e2691213bff5700e13bfaffcdb0449b37de5eab1350006372bfe05a10697cce8e1b437713687ce2cf4477dbb173c2f4a795d307b5385b9849abe96156828a9818cf312259497690d0798c87ef2ba6bcce0163e63032dff98bd3698c5299cb3315da39564e7b31976ff3ef5d6de4a307330567835b1382427a4bf77b820aa985176a4650c967d516f30c5bc929a6e35a79a3fc44a851ee96d0b748da68b18b78a5a24ae09584d1d11cce27d839cbcc11c3e46c61f066635c32ebe816692d85b8458369cf9b0b60987b9a4cb0bc87e179a7ef51f5a4bc9862ed463587db5c6f28be56bdfd3f72aefb78c38b418e0efac7b7613103e0343684a1110154087339c14a0b563fbbfcb80d25dc2500db9ea45f67ed29b75171eac6f781132fdfb5418ad2ed7dea7f17b073d2286ec7b9801770d1059b9055f5481f456ef816c3c0dddd08ac305d324bfde2e382deee1b5e1adb78314042849465faccec06f14f9b741ba80092898e7fe80154e078d4ae03d1115b70d745f38333a678cc916d8bca0e140928c209a949c38e2122770afe8972d64077ace22d464dd6823a54cc2e97290a031c4aceacab9e389ed2fa370c78aa71ed28089456477bd8579a0902082ed527df662c362ecd8cf6a6875472bf5d2747b7d1a590b2de621ef01e37b794f42226ad99cdd1736a80bbcf6a5ee5dc8fbd17336101adac6fb210cd7a820257e9469bc1683e3a2288d6091cb35c3c93689edae913c051cdd370d6dca965d365ef1b1d4c580842a02886fc926ed276eb7b1b7876609c0fca25811cc2cc0bdf4cd59a066545172134260a7a9e6d33635cbc3513d68f4cd8882d4dc6b2f0cf50861cac223854edde3236463a3564504a8d09d4ca48eeb3754d491b78a6001ec4c0ee9fb2291830561e0a825fda7f8be874c987a85441dd4e6708e990d08d8c6782911b64e0e86319c67506af476dda057b74345717bc1ebe5330aaa9bb5936fde7963e618f41fd1442fed7422b98169796e0f568387a2209b8a9f05f481a7f2e150d6e673ef5ce7918793438addcac60f0d1a1f0fc4969b210d6bc5508be5a214c26540020a0158701dd4deb98a89a581dedc0a2debefbe21ac6c90a028e403b66013110d6797f2a4e058bf0b37725ce6e9949bc87296601b44e485a041db19c82be0aceeae98c3c2d890261e96e2c86adbd78113b61761c1e53dfb7acefd390841270bb6cad0b438f3ed783d6ea5dd8eab3d1acae73bc83da9bedbdc28f670686a09d0136826b3330407370ccd6c356c7a8d68a66a5a65821c941219063328475d43137d9dee8f5997c0f9dd4507b84a7de77b029e526fdbc0df89f46aac1ad429648a8cd2218b4837b8cbb56020b7cb5a2d7c3fbbe76d27d9db14bf407bc587dd3901f013de4605d44e94d886d950424a01c05fd638e64a433d9b754cfe7e21590837df62b090059634b626a604ca6d4ccfdb9a0ffe0da7447885f0c6d7ffbcc94d9a7c8f148ddc831ade85adbb421b8da3afd569bf19b3cf8c8771d639863509780b7c185b49846db145ba145cee1b6d6c7e47f66f415a8c58b49fc82e477e3610bcc138048af66d01c80b50ffe898fe438f1b966e65fa7ee60df016e9194fcef87bc84e7a843494ca9bb4c0e7db60a783fb6deca0851bebce189c84231bc6f0d208da77f4be1ddc63ac278ddbcf924412ab45774861f84012b8ad2dcde03773fc7d8a4da5a64dc0b28d15981bb7462aa9c4c13fe072941f34f300b1ddff13c41bf1b572e5b6a4dbed3e66b3d0073275702b0889d71981d80cb321f39eb299b7a7be49a14d79c48a53ee6882cb6bd7ae8f077785947ed68df0849421805ee8ac1078b0fb322e7c947f02f2820471e92f3bbfd9df18bc09a6e1d28e7adec84cabc8d950287d373f4169e8d4f76fc61bd18111472ad23b4664d326a56219f9a49924e5d8f8a883f2ccc7068131cc2c5e876637be58100897e51ec969eb4e3b9a0170082e4b8bc14e08cc0f460b4261eac66eda504c778747e5448c597ef3cbe3d3185f7806a44325f95aa47e449835a76844eabcbfb7567294742943235aacf56ea131756e557976241bf3e219bebe1f0dff31050ef87bea5fab9f25673b03443122010270d21d0fcaee29f6749925a338ed38cd2ef88ddfcf2a26b72f7db7ccb1c6c6e7352d72cc90775c2819945e4099079c6c1c792b32a578bf94add7e39d7afb9f6d3af79490c4b8921d564cbaff6d9c6375d5c9d60d4d3a932562d08573051335a550f91aba1db2bf50633edf43d30300c34e8d2f7a3612dfa6f9c666ffe88e5f1254299a6a0218efd48d636315444bf2d0cb530ab9e940b25347a721a93096c7bfb3509abb851a34170131585e315f9ded2029f3611fe337f5901dbc26bc45c93c1bcca83d78fc7c8a9ea1522f1843e6e3bea12782ed85b1bb187723f0d6a5e463131ccf9251c7c2a0c9479dbb841e9ae01aa5f0d63168ae037dda017a0537823830f024c30100000000000000001c131a21be51637c139b524af2e73da6ffbfadd1bf9aa6769252262953e6deea6de020e002d01bd97be705cd074308110867aefb110510b9ca6f7fcb8ae96a492e971d3abcc7ae2e50fe9074972ad50afb10b2a3058a1f104289efce525ab936c980d207d5af162bee95d26a64417ef021a5fc65759f56eaf2a7ec213d7b1d4dbead7b4592cbe572d9b1a30c1f24b85c80cca0a484e402888877777777a72aa13c062f878df1858e01b481a2075e6e8667576a6eaa41c94323cd53c99762d4db4804143c2473f49c85aebd952eaf807207f4a4d4a97369dcf05a76c0db3df8767c2956af2875d85dc6172f75c61729a7d0816d9717aa9ef29526a0cc41a55c27b94135fb6b062525243d9a87142872b0b37b923953079d639ae4725994381c33a88ccdf23e4b6d935c2e14389cb2b4e6547de237943718f63eca3c32bcfe66492e97cb650709c42039e19102203d7a809123c7c90d728c71b92481e2865e87e63d0fdef2fba4286d48c8ce5196f291da31324261839db37c638aaa5a7d0441810700089435acfe9e51aef6f2333d450dca7ab53a99c7f7feb407250dc7dd0799a63a6848764e6f98aa7fd2f00c7a5e1372a3a72ccd7a33742a55c6f3a6d3a327a50c6ec95595de7232683e2a3b69bef7cd2d8761a34db040198371a7a335c8e81fe7538122065f77c7cdba5fff5fcca3848d1450c2d0bc6696e2b5c34dc850c07032ed3b4aeda5303551bed086689cd0f1a4ee56142f1c4fc52799955477b39101a50b7e76cc7f1e9dba6f45e142a246c6349964c90e13285bf865eba4b8c887ae8f16d0b3fab7bbbfb3fed6a06481510fed6a9a2d746a29583845695ed1bf9fc3bdd6a05cc1d8cf59e639fbf4a1b20267de1eb3e65e994d96024a15d673be62c56d8e52e45458ab92a6ae49e628cc2c230719394490230439c6c801821c4d99c25284fadd17e51897cb32718a144cb94967d68366145d147c21a58955dd1839d69001050ac91935196d83129dfb539e709e8c51eb720dc5090a39e131948e6e4069c24a4566b537d3de1d6742db41e4692cad234e455982db351a37698d429a4c09c84c9dfc4ce8f66c1238b965ea218414f72824acfc5c86db67f120db13ca11d0dd5929b73be539fc1423a094961abe7d43c3a7daa014a12da17af4ed37a8b3cb402102a7348ad3f4742a5d883204bd37e336b754c33b3fa008c1b441f464d24a78789c1204f38d745dd264ffa6a8070508966e2994b6d4f9f26bca0f4c1f4d3edaad7d6d44f1819a3ef73ee4c99c5da9e47d945186905e647662a4fc93bb253dbc586b6dabc785d22bdfefc29249d847f12f5da8525da7da24376fccca457e42cfa7d9faba067171ccad63b6d97e27a9bcc5af66ebf3a4962d36d9baf32a2ff7eceb3842482dd4a8e9d9237cffeda3c532b7eb9c648ce99fa333e0929059d829c44c9509edb4b92c8e2fe5beb68dafdfdc5824fb5b6719a3562d42060bfb457f666d2da357fd8a4b567edb6e4eaa7a7285b62e5d6dd4d2cc573984905618aa4964e6ad53652a569c52a9dac79651acd821ab307d6dd69b4ab9b6cc5285c16408dd99f4998c4e2a5ad5ee59ca0b4deea12284a062cd9b39a8ad70cf21740a54689d3588be951ed55b0831459f44ad1e69e66aa32f0542975223a46a392daf1839c2c801c6172a082185e61a2643a6d59deb1ac5ad56e80d713a899ccd154244c1981c25649441274fd2502ce57e56a7c2841a3d0414a8522ace4dfd3df7da65e808f98499c568df9532be670ff1c462e5768ef54a9fead710423aa189d2d89e851c216c3c42082794762e2a343308d984522b351b723753ca5413afcc2367eeddde949b89fe7e731c6f79153af3104c7c5fb23e7385d4ba71c3a42404de63d7894949092e17374c4afe8d931572095e6ba9a38873d9691f4ba04ea48eefd9e50bb9298324a412893c596bdefaa3ceaa1d3972f4e8b1c4c8a1e3720900144228917c3affbebbd57a4a267eb97c206412ba9ec8d5aca2a42a958f10496cf2a3ca4d13a91e6322815e4dbf1eda734beb432061d0a7ebecf56f5db52e843c628d57bdbbe3fa31eeceec8510471cbdb365c6f05ae719cd10d28863a956df52750c971b18421861b767893719369eeb4fd010b2085f88b85f79ae44ffe9861045a84cde94dc6fd7f45c48220ee139aaf6f6fb6a66871044187b746937159e7bfe05be083984619307615f9a63c9d4109e16de4aeeb6d4c55e88646e6df20f52cb301321f898d39d068f575abd419ca14e7e5413f539ca08429d9a830c365ad4641e883e9a9a944afb230410c896fdb679c3bb1ad71fce1ca2777f3f54aa4f83103f24c4cbac6a7455a9554f42fa607aa9d739a67195fbe183b1bd7f7cfec75bd420217b38777eafd52c5d7aea7a388b9bbce824a299b33c285d8c263ff30e1f653c2c753cb6d6e293d21b6442c81dcc5772e2d74f6b25233b9ca3c74d7af76ab39e42eac0dea85c2fbd1f5ea683310ab5b2a74aabc7780f42e6e06b579a9550cfa86b92835a0a2573322d7a64f4e380bcc6fffc3eaa433438a8b74a96c6fa6acad707216f40ebd54c1943b79ed6b90171314dbbf73a884685b401d52fa6b9643de79085b02119a3867da74bad22b4864635a554426b98e8243520840ea3ef544ee8cfa461751bff5dbe6733cd1b84a00121b435ade7fb68a61a849ce1a864b4e9cdf38c49e78d1033a8658a971e4a7d26cb60d894eeada3c3275122c39ec56e8e72eb436e6e32064ecfbb960b9d3a32130363721f5c98ae49ed874115cfd08c4aca3f19da4108183a75e6318cb6d6206c1c847c01256da5ded45d2e37e585c575079552fc53853a07215d783c5ffd8a99d2dfd124840bb836f35fdffab4ee77ae3868175a297d9b3dc52e824a2bd6d6ec5b296693e53d188c0a2b4eefbbe56ebb66eb694165158f76d3a07b263a354645158d2c25775a6674713115b9a92cd7b1790f5450d169b532ebe07295f6760d0a544e9136f1bae23368f574c6a0620a64c5cb24d55e6921352497cb574a913aad29e49379cc1309a1420abf950c3799cf3c6426b95c525019852e559d5ee1e9bac46b061551b0599a1b5dc995c2631e544271a6ea903a3ce7a4d62519a9806231ffb28550a2aae77c41e5138a10fbd79362d64b0fc404154ff82bef4d757635a77b0c2a9d30d8fc46adc99590b191c38c1554389112338f7a4d67082924b95cdca86ce25662f74bf50751326f4d18a725b40b757a57938650c944724eb8762d27d5c3f9c68e98949ca811460e32749cdc600c1c5430e168a97edb56dec8ad2e611ae1d2b4f5ff3593154b20d37434cabacc9b79812f5a00844a25fca0ca84a6bf775c2e55a850e28fab54ae49374f52368993ccfee93e6a93d01d49ec3a7b8eebd435aa3a7133542271474db732a5e62053238d165420a11eeda8aab1dfb59093ec50230d1312e4a0f208b3cabd5eef7e4d52ea884b9c473d32b4232625233658262327de4623f6b4b527a5b2ed342f362a8c4875ee8f1ad3dc9eaf5fde832b8b607f4fc5adcbbcd49ec44411866c312394cc507a3720a82462131f33ed6feb28454872b9b8e16a541071b0dd9169836c1b13a2e00d93353a5039445aea555bb9a34db474c2230c5431041a3ea46e5991a9b3532984e9d55655bbfd73d48f5408f186924166b412fb300e82d75175f6d7fa93784972b9ec004282cba5642b82e8ccdd64977059724c924a204ea2be59734851fb6940203b7a3d6b9abc6e5b55fec00699d25c4c7e28f78f8d338850f1434a6510df3d3fc9e592c37998ac71811d3b76a8205d9246bb0f1b90804f70b9b0093b1b697c21004354fa7052ab3e7e7c8be472e9b1466250e1039f73c6c646a9634755871b953d9cb7ded37ee6ecf5e10cdc819051d1c34a9de93e93634a34b3e30c1d1fa8e4412573508df2f63f6407b27ab8a08287db631c2537f6e678fa8fcb65073b1b28a8dc21692e846cce227d745bb103e3d9f4b3b86e6ff84b4e46488004f97146a50eeba057793eed2f2d394919153afcb31e7a9458a165e97390a1230c10ec4023c71a394260460e32749ca03287a5ab5625831a0f553a24ce3e560dc49801af13354c4c509183e3e99f5ba68d5a9f24f93142860ef62e11a312074bba4e26ef47243b40a0820a1c4cba7c546398d5f94292adbc0155cae42b992be2a775c3012a6dc840850d0b081a0da8ac41021535a4a25c9bbe94f2fac9111f3fe206906583919192930e54d230810a1a467898ca19464ade4719628891818a192c5029c3a2b965c6b8235c6925194678fc000302953138fb28f1c1e307180ea888e10195300079c36710810a18be70ca9a7c9ef7cdfe2f12efcb2555bc804edd19946e4d1fe44c72b95c2e952e70610b98b9769d2965891262450b2737f1fc69d47b984e72b900a9640102152c30a0728543d8966ac6cdbe65a2a162850654aa3082800a153c35213508cfdbb51a921e3dd608c9c90f6fae4c6164011529bca7a1c33d6b8b88ad1285f734fb0953915b3d2b50484b2db27975bac71b559e60b05f5942dd99c8df9c804c4afe73761ba13ba709caa47cb5c9adff3a2d13d4a8f433338891a7bf25f4aa6934c9d3c1d3bc1525d8e2c677a35eb141c75492e0ea60a61a2e544102b329b438dde7c2757c843bd4fdebebf398b5ae6284844ba9f54693e542e8548ae0e9933d22af26c2f79e5b49e1a7d3e75c65089a8e901e3e36eb246245084759b1a14edb8787b81284e56d3589292d52aab50284566dd23c7d2626f558f9c1275f6374542d4b84a6e283c5d4350a15d3ad4a47e9452fa636e45f99a957f302193e6696b9bc360877177e47edfc4275ac10364517cbac3ed7a7d0f50f52945cd87237ae727b8de15639b040c1450228b73000c5160aa0d4e2747beb4a78301dba2d018516c76be998427a32b5bd8d921e231ba0cc62011459b8ea2373965aba7c496391e9e02353459dbd66c142295cf56b6ded415586e4726183f20aa392a3a58c253fb3d05d715a31aa46b85c9d0d2f90e38b1c39765ce08b1c5bd103a515480db532526db7c91c56dcb72d7329d7ef6bdb0fca2a4c2d71f90f4ddd9b54857276371b32b3768ba9c85cd3b7d468b283a8e855ffcad1ac75323ae514abafce97b96b4ea74de18a52af4fa6cd1933f583520ab57ed441ab104fbd1b19145298b61ea32f6fda1de483320a375c8717b77bb9b12f971b2c372e97145044717c6e7f5cbdbfed51285a1f95516bd9ebdb132832d91a1f7cce4fecb25cca5cf1e51284e20963fefe77d0d0498b4e270c1f958bafef4fdc84c289bd5c37964a574d3a9641d944ea3d4679755fbb41ab89e4f9e77475fddb1ba36402e5aee5fcb3cae9070c2898b845e78f66ff38715a92cb65a4470c2897f0b5709dcdf1ea665ea0043976e828238dcb05488e2f6641b1c4714a6fc3f44add9c1201a512880e327cae81f858970b0b289450c6f37c7ae35cb58eff48c9c9c824b60d139bcbf4dcc80cc9e5e23dda7bf4142892b87b95dc8cb7b42f3912fbb949794d420a24acd7d6223d4aa5bac324970b8380f20833db064f4d8d93f608e2c6089093a5868e128a23109e3caff85add28a3482e971af0e8cb45e19df058853702c4c47ff4701233288d38c998b45d21b34f46745a7596ad71ca22d828a35c647368cb1471b856cfcaf46ff8282511c7fcc97063baffee22827d4f93911e3facab24970b90921f40a01cc2e439e82c736c25dec41443dca9ed5f5d6ed2742f19500a819eae879ff7fcd05308b17cb5fd51ebe8cd7a918cb8ff889f04f93108b306afd1bc1d62d44c72b9b8c90f165004814b4dfa63924a679b4672b928811288ee95c8c752bf04b5c879cdac4ae79a52440998c86f8c79f07cbb22b95c449260ac8c77224355a907042248b0dc93a7bd75cf72469123645ae35e997892ed522246b03e3f6acc69c57476448aa0e8886cd7f7daff598408672564e73636e88c1a1a224340bf68d520ba6b43494408bdc8fe4f7acecfc6251284e4667deb8fe8b1cfa4210284366e78cc5e1db1b78bfc20b1ad4d8bb956ad84e901111fa435e772b4dc2c4f3b965e9cfbb5bc9bb9dc5091174795adf4c81e35422ab0ec023d59a1a35ff5a5f4905c2e40d4b0e802f7b7d39a7be5c292718f42b5ebd3b1f62e49c3828b83abc7ccd31dd1f06fd1e6f752be1a32f563165ba031cda9d2b3eb3966243dd6481a26965aa85173b897e59fa44bd1420b4bd9cac7284765cc2592cbe58d12931320dede2569cc42f3d333bf4288ecfc935c2e38b0c8c21c7d5d6e9022b95c4ede7b5c2e3bd44803880f165862b16c356dbb6984ce50de80c7c362f131cd0fe2936586e515eb7cbb3dca93f059df15481573df39a64e6a324b2bd21bebccdbc46cd34a72b9dcc0cdc28a54e9c8f8717e745c6b59c51d4f978c5c15ba8834935b9d5deaac0ad2820a88c0920adcbcd3bd0aa126e368523202020b2a7a319faf66ff7d4575811d2f4006021c50415a90c371c00348902fd2a8c0142ca738e566b9937d9be333532cdc7535ad6d68d06a29d4f4b321356a48d6f8020226256f21052adb536c7752af662579811b3bde5826266080a1a30515d0416219c5417e9265625a9a44e6048b282e3f550fdaff3ac64f32120ad5df873c516e8f9291cb25041650e0f3a1e5b8d668583e71544aeb2cb92d8569871a69f818b178e2f156377223e46dce593ad14bdd52fe44fbbf5c24256770629131c6941eef7567a135749cb81a244016196ad9c42ac5abbf4d2d8b26b4b5334fa1f5738e2b121e2363583281ecbede68674debc582093f6630651aaff75eb55cc2283c84fcebb847d95b2cd1fd9ffff9b748218324bcc4701e266bf4585c72c6e592430093b05462715288bf8d2942491b1d0438d0024a1c5fceddc85d1fb9c03209756d880df6e9b36cd6c72243126671ee7e2254cf864f527272b9a42512dd67edadbe4e65f82e0d0b24d261625d37b80ead661828b03c2275af73525ac3c69a8d0c8b2312f232c888d89cb4d70e7636d2a0c118407c0460099646f85e5ad7ef7b9db84b02e4c464a991865b18c17cfddc27bb4f1e6fb22c62994d623e3597923f15b150bac3a698d90b0c4b22f2ae1d51b2a5e4fbf323c8c80e13e4384347092c88b05f56489341fe9edc2c8748b54aa93f0a8f9d446e3262e23e7c942186c510ba304f3afbf5e90fb3a510691d75d019ae3eae4542e42936d77b385de91a352c8338bc101ef4750929347a028b20cc7fd5d5529d4b21e31a96403cb3ab5b8a2a3be52f092c80e8e6db3e7cd4b8d1b54860f9c3e5c9b7846792de2abac0e287f449efb01325c9089005040c3272840182765e3fd478c3cd5081a50f88aa976732fe778d4c0d0f58f8b0ab549e47c8a0d7742e963d7c9f31ddf4888ff1747a507fa72f1def328a2ce501d3f69faf357ff8a0c1839953de6e5609e91fbf83a551eb0a719551e8ce0eaa959d5995cc2d624575409f46d3992937077d8decb0d0c11d8f42c629e92ffe22e1e501cb1c12721be3567bae71db22075f8ffea0e9e5ee47dfdeb0c44173d73cf358ff5c5a0b1cee0edaf31b7392feea0e58dec09890dae4cf1e84060e82312c6e7845b9da35d15ae6da6d4899fedbdcdd4ac697d8c02bf9327bad54deba2439f9c2b28646a755d727d6f385520d6869ba4ed49b6958e3ebfb8df1b6b3fa81bce16658d090eb93cd4a898e99fe3f03ab75c69f7b13d188b1430579c3628644dd98e930a356cba60cfeba1e2d6e942c64c846fec8583a766d8c5ac6b03aa92dae4788794cb288612df4e89f9419c448d7128643d6438f94af1e163028afc14e734e32e7273e561b5fd83e8ec7a0c694fa98f42525263fd8e28583e7981b3c6ee8cf24205df03669f7ce51529de679f4f0131e24361839f136dec205367b68b6ecd46fa501e226962df0b5f1e97450492e178b1652a342c7933aeb931ab1646121659650253f554e4d62d223162ca065b217598d4179e6070f1bbcc07205ef74fd8b93b1328396c90d2c5640f98c2e137725c3a6ab70dc2cde553d9aad695460b5d01732543dd46d58a6a04c2d83f89c578c161d2016292c422bdd596ac1c01205957798fbc60c935106b14041194ff7e9ac6390a1b34e82a061e22765d0c0f2846554f1fab46f6b6c12183ad8d9e8d163b9a1c6e592162798676e5e45df292574134b13bad7da503ac71b1d6a0b13d0bb390a213a43867cb6846ec4a996eab0f3135242ba6456395faeb33209cbf89b51b9faf8de120f2c48d877745f3d8971a50d4a7a0019f95162c226605c2eece38db31cc198c6f465d8dc2e291b019d9532f88d2aa53b0f9335ced07112048d352c45e05de38c3ed549beb7482e9732c2b010c19b4f6273ecd2a7ab739621a8a59e792d25a40ef26fbf5c4ade4719dd8307891897cb0e8b100cee49ed8951155ebe2508d78d798b8e22557f29c887418605088a67da18cefe6432d52d3f587334cd418d0aadaaef61f181f759c2c3065150e985b96bd4ebacd75ce4e5853aff26d7fce43ab4bf0ba3e96af5d42b364b4982464517888db2c74f9f30bd762ed24a637cef2c753219322ab86085286daa3b3468f66b546eb12ea5d308ef0e532b26b95c7cd860fd58155ba4f4345c85ce8abc16692dccb4c88f53d1b2920a2d12552e2aa369ed2a626516ec692143e6689fa402b0858a2c0cf33fc25709754a843f2ab1508f2ca131ca157ada27f1c1a3028bff37c74c313284ccfd8a67c7b7f4c7afe71fdba8041738d4809a06100d21f00504dee8e14303b60184367014e01320414c0a10803756030600c009902027204000bc8d15a40d1fab474500404cdc820200bcf1630edcbece6bca85946f3689c20b72b9b8e1262335e0d1237de283c71938e4f0c30d8e0305071c4e1c881bee46088e37989376926233369a671237f841db757654a7674e246d5845899c54f2a47c0891200e36a07518cdf51c256e6492cbe58d1fec86f33831391c6b303c4ebac40d35181e273d4880ac91110b8e34181e272624407a8c8c5870a0c18c54709cc1f038a9018f0e323262c16106d5ea868d55bd0e1f3e1e4719fa5c377eaef2563f85830c270dfa4ea7568d288e31b4f1797d94149fbc651c62e8d4480d273db647d56be00883f12bb6a4f4cd8c42b541891897cbe30043224cac6e8e0c19b3cc0e1de0f8c2e13c85baecfe573274060e2f2485b7675e757de0e882f3e164a79073a175900ba84a8d59a7f97d486f0b9ab8baf2d150e19a6bc18dbaf335080fa7cb82e2b345261975b6e3c281054bfb4739b23aad8e29c9e512031c5740bffbc4c8ce525b890538ac80a9d7b741e7ee94dbf0c1a3715441ad15ab1a6a5b4ba119e9b1fc04481b3e78b08fd5638581830a66ce6abb5668d01d35055b77279dd2336e4c0d6630c28619bffc8c93206808000d38a4908caa794e95689f7b39bef0038e28a43749d9e23e95aed642012532a6a23a88e30969901a3b2b6d4676821a5d3fded3280f32c7d184b48e7b4acbecabee2e2618feb5f2636caded79a47df0f8cb65470e36729891c37fbcb1860d4a4c4c4ac2d0f17e02200180028e2598eafbb5ce5c09aad0161bf3a8d323c224606253d8abf4d7a3df0c7020e1163d59f25bde6f8c6a1c473087cff61529e4fcef46405ea7271b4d5511231824388ae068ddb2dfa9ae346b8c83088657dd93fdda479d690867eda042862f172a7e213caa3346466705419d63b3b7a693e9bc3880a0de4ce7abaf6253ae70fce02dcfa4838a9a112a4a03870fd05a676790d9b43d9d5ed8ede72365b86ea13cbce05de77cdf9d7091e12e8e4a36a978dd9a251b125d2caab4f0968daf5ef45c649b7b2657875cad37354470b1e770e726a4a6ce5a15b9c5276db4639602e921620b4c4bc7b7d515a68310c8ba5c6a71e715b973ef12a1857f42d64453a6925967160939f560a2598548531922b2f04df39f1225777ea5b138e5989039f9236f86c5623ec708613a9057ac72f593cc9ae9acad2bf4ec39e9cc3a6889fc5bf19d06377771abf38b5120c28a850c2b42b818ad1e945661f698b36b59236794902acc1b47faae0bcf5caf402415c996deb5c9db1388a062a554c396d2b03bfe9540e41427dfd423b4dc2c99158829da0e311b134aaeb4bd147a54ab79ecde7f73ab860829d0e24df8bf47cd5aea4791fad6e9df73eb38a9928821220a4729f95d375abc4e23029150f4c195f6602b4f7745a070577578a93cfe849de165fad14ce5219a40c413ac0efbb24ee6927e9f4eb8a35d96fedff03fb3e4c447199c58b7545d9b34334436e1eacf0ecfd3244d2010d1849b63bee9d8d22fd3cee37f8d3242100237802c1bbcb197cb880d4432716e32d1aff74a5e407e640c114c9829d4449c165d42a93463fe3fc820dd64094346191ba3a2426f30442a617c1db57a6b95b69f915c2e2397cb1960844182334470b9b4fb8f120612860825143ab3c3b49b28779d49a04b9d47d76154aa4f9204422b75f759e7e4e977914870b35b5226974242f15969fce822f36528039147a4b5a6a3720f29d4461147b4adcc448b31d171f30c441ab1bf7892b975ea72fbc41881082330ffd6f2abe2775b26b288353c8ecb3add73bfc4474c4a441491a9711132fb181049c45937bac8b5d11cde590cc45f2082884eed980ce6ea21d056b3f17da5228658e4eb4e426cdbf6ba440aa16ed2254f47f3eb394508a1d2419fcc112f547b546410a6ce067c35ff95a92e4c7b431141683a1b484324108b3b19ae85c9d87f1b1140a874368086c81fd4b89d3a7886fee412f1c3c2e3c7ad35dda9847b02a4023a52a40f96e98cdd7e97f15c8a06ae868f32749440840f46153795e22a913dac1df4b9d42e4caa5c492e973444f4702c8d531e3aee6896f2b0d4b09bd1a58e86081efc2cbe1b4d7f1688dc016d2275941f4b337bac043a60206207459ad2323b9466ad51913ae0a1f2c3dc3345db4b840e2a21b31ca91d740a2543b2e324c80f1f65c840640e791c294a66ea934a6088c8212d8514553a2b5d1d5a6df828e92112874d438a8f632e36a6431081c3b1f3d3ffdb88102b350291371c7363f4960b993fff2737f8b1d0b85cbc5920e2064d894e3faa1e37e7549136a4ffba5eba0eb733621136283de8a083300dff994322b2868356cd4a6e6866d22349d340440de9aa68e9d7b3278354901e8f44d280fc6914af51a58c2e23392268704384dc245fffb1cb65471b25674000c882c0193f4ad2d0a144ce80c9eacc1e3c75503d532062063fe73165a34bbcfc2265e8db4b75c6f09257a99115889041715a8e0c1eeb31d8762684fc6ff17acd3374888801533dbf32b25fad52120903225ca67133bd9f80042260b85b465d3f52ea7c527fc3cd9081c817fae442d657e665d84f0d44bcc06721e6661fd4a9f8ba80cb899f2bfdf33a087920c20573849794aab943997207225b50fe277b65b7e9d2cc1e8868e1e0fa3a475bed2b350807225978951879bf539b57df228860e1f070229496a35397961a3ac60882c8157e957255bf866d219a1510233b8c12f70f214f55c853e57b48cfb2a9472a30ba3c7514f2179982be1be2958ed9c44995881414a5954c2bdbec6d37678844410fb6625b43d926dd8242bb2e6b5f7a50e4097a7af2a8eda4d2cf53c409fe2bb7bb5b8f48135e25ebb3b093b65a5633449890af271bed51acb901896ca84412d4802c0c0603a140180c0402c114cf024311000018242813c90302a154a6496e0214000246442a505c28282226228b45e2b1481c120983a1500cc5201085811485912c4f8aad00e48d9e40e9231d24de6fc91c1a6d0f3f117c84911134785dd99edaa871fa5e448368b0ceb9e8f0d81fac18c1c0139c2ed27ff8bf860250883ccb7f7ca15977bacad88371abff9183167dcb1f38d5671357fdd7b451ad21c20fb0579f0fce46f9042dfcea1ce2f0dd6584e032c4b824591c468fdbe2e5e882512ce2ba63455a50857325903c0953f9a2bf8baa39d270d929a8d7d76cc5dfe187cc677b5a8aa05baefc7666e6b40d71ccfa428cd8b10f9ec0f1059bec82b5c8599b22d0d3936fc706153c4f6c69400ebe558fbb4150331665ed6d7475b1e0a3dbaae286ad7b66784663025a7c0f25c8f5aa01e57e8e8860e13762c8db825cac7ef82745d47e46ae6600e378c5d6a1986e98a87028d832d4c93255ad2f407b103fbaf18c665552d2c8d8dbb8f6969106c22c20de09f6d7d132975ee9eb099cdc71588ede4906f0915b7a21cec61d99cf1376f106f7a56c605dfba6cb0c317f0e3ff8701d8b27c6d775c4096e60c756ae1cf497cdf91e7058c20111e56791bd0b058aa7bfaaa0af09b7a3c73382cdc21524f6a1555b9d1a33579a381d43e830fbfae9093a2ff2a0a2d4211330b785b49949c946616d5981f141c216539b67c40bc259999dfeb4cdbdcb8c8e1a45e9a98e98ca044c5b0fe4b81aae6c6882c480e20b3362a51475f2ebe881787df26e39b004850457ef530263e6930146830cdda448eba13fde48085f7caca644ee35f5f0597b60ef9a3cab3b3b5c054851ceb251fbae43c4a417f98625f2d4bf7ffab02f1f4291ea8ed282204c10b8560f3bb45d04499b305596bfd9126a1cbd10da748f5579bde2bbaebd6e5f806d6ea9513b356458ccda6eb374915db3ab77633e40db21f4ca8e793f12a37eecc5607349b3bd1436365bcd8d7263117b3d6c27e8bbeb12313524196474324accb02fc6dd9401e4710dafd7b2be189221823a9d3ac098dd97ad23183dccc4fa8bba6e7d48b31d5d4651117a6d23ad0da028930689b6afb51168c96f52658d7b048353eac48a32caf594423ebfd04400f978587cb4aea2281350ababa62b82af421a862a0cfa3da77ffe7177252978d079ad029a402fdad91d5ce37da432b40e11d7163be73a8300c3fe1c822af1462beb279db13738dd01b9844b5bd85388b526bf81e1644af6eddf7dc6442d3943b5e8964f70cfbd94d29468fa645e0622c3d7269f42f7875d4ab402fee0bd514af10adda59cc83a415b17014121a160d8266cd51994ade8e40e764cf163f4c4dec8800395808074342860f11ba907785b87cc6423c034a321a42bbe7a474dbfaddf6dce90ea9deda34054aee7c9537ea78f6fec40b601ecaee036b8cb91ec019564954f9e529ff6a85b900ede50fd29b29f87fc7d838646ec0e2b1f81b2db8fa54bf49ec4bffeb9ade0a4807c63e6edcb868db69513b2d065e2dbd633d57393a684736579b18d3275d0b75cac2ec025c0e6ec451864c4101ce70200130f2941b0dd3275e46926faa1321a19cce82054b5ba68034afec27436e325c2fa4f7b6e36f4ae71dc1eb996a39108bcd92765cf4584679371c70d2b784297a48ef12712fa186de31aeb612e2e9b337c3549e03f08b7529250dc0c1a2c812b73318a3a241db27d794d64c8acdc499fb485e767c1c44cfa966c9c5e49a34880cac6042fea8c3418f70299fd02a1e5f2f92e1cc4004bd8c134c36651a4bf818f9b0be58eaf740a0987496fba547150c4476b17b85c68972461688fa2958d3c51443aa68abb4535c7cdc93d4a5d65824967ea960eb2720de1c3020fec26e2a504c783ab5371438f5cff93de3711b4d6592aa09f587b03f49cec22b8fe55d4e232a0c95514687dc2752825a6e9733b21914fe0ca22fdebb99171669aebacfaf3b422b218a1c9479ed3dbeebc5217bd181267090e0f23f021f41b0f301cedbefc2080c3eb67f720dd0fded4dc76c1dcce86488b6cc04c2cf09ea12631f2a6c798c2420223644a02d20b7af4c6dc2948cb732f35179f059c2565ac06c1dc6430db2fd206c56b2a96a289031f57b58e63579ca2d42af37a930ed8ae9d331fd4be9c6d7bb4da0a2c37a41596a88948063c6a7f6d9ed68f77c226a5274a4a782c574a0a9d7758f70cd4c9847d4f0fbd5d3b81206ca0d02146f5873fe3a2378b12e55a2df805aa5f68467522e9cb3f2bc3fbe23f8d4d180105b42eee197e59f7020e436ec5fb653136102252ecf10c20d94130db006e742e61b19919121eccbba69e74c75cf7e261f2c486e4a3cf75ce75be3493ca9b5579682e0cad1b48a020217b58695577e77b26702ac1c70b78d03ce20130462f2932b3bfa686821607615e36525cc723137c53055f4eab204bc28429c6c428f29dbdc722c39888afc4190d1675951d0fcabe9093d77615f4c720b9e857071ea5609c92434e4f8295617d0f78cbc4e0522ccd4517013d76dfefb1120273b0555ccd1997cf8115b439cc051f214ad9491aeb35f1359a2b186969f345847c888e4b51f4ac1a0aa5ad2199115a5058c60ae976e02b80800a67d7e84f68815e17411d2282c0d86ee0966cdc9c0d35d44cf3e733505d5d926fcba486603eea1fbeb1bc0fa867ddf78d894bc4c4fdc40e199a7db2cacce7ff7e10578f33b74fd9cb103e47b631e237895b3e3cff73641193cf19255104562282f5507b23d399ba9462f742928285e5e2f6daaf85131ad8de9a193d278a9b33791c1f530086a77419f9e5cd4b0f31b260acee9f8d4b3f09a578e996bbe995b6e6a4f1e36de606ad61de5e8a2e2c4bd755b0fe13e26bdbda2c21dcb7777d72c91333f38171a496df65abcb11baa03f09c0120a01d1b76e7f9d8b74cab39582710c2013e602af3143baac77c2a1d3fd47b596754796126dbe55de815b0a859b6ca36160502d18041688a559140d3e59aea339437c96e1a0b620a2bef251674cb841c980182ee412f16456c60dd692678372e1c8173d658d4306ac98e6c2bf97001b1605e373d2891bf5f44688e26894a591d25f834e9417ce6486ddfcbcd13d996c7235417bfebbe9f198bf7bf68ff3d005e239ecdb2ced7efdd7a8cb452f806bcbdb542a236f1e8b51b0980127b5d550b83b49a06f465dbb25321bb1558fe4072ef3bdc78d9e30e8f579aa00e410fbba95628b10186b3d28dd5028fcc3bac23a098dafda87df22bceff1994847f9fb8cc8916fcf9c6e1020c94db5894a7a876b4b73b3c8c66c852833b5761d046d6e7d82aa744639ea857780b602f862170e22aadfe735c7e279083351f9ab816ba04d686d1a4dab9a4d1ed31031fcb08adc6da8ea2485e80095ef5505d6b87197837423969592477f8d138111bc33e019125d316976f401b7f8e1cfdcbc0eb2b1c1aef3407623586c81086827b1d09d017a6a6ee032162f814856e097ce766509018248195231967fe99c8adc593d79019043de35698012027c59e6df86631d742f019046b82115a79c63b648d6a1844bb231ccf910a314f7ef7df1f8d55ea040272fbea0c65f82e2218da33cbcaf67c1247efca507a74fb56b330d737bb7a247e7acbc8be4595d873e5c4662628cd512e06aa21294e9182c4e50a5d0e61f8429bec61e17837bce9d70251144c42710a48cea11a568a0906a120a704fd8abb25625d06aa1530313447740e8b4582c8cafbd193127477d9eaead154340cd0ec888f3b55dc78ecdbbb6ca698ca660b774b9bfe7a136c532d720d3153a206a74fe89d446c4813120b28ecf0f65d43c7d41bed0bc389a4872b17df7d1ef236b0bc0110d7078e82a52f74ca9f722e1a61db4f8b6b622547efb3508db50c292e44667a9d4cbcf530c776cd313156e1589fa51a4e87fb551d80f408f859c4273624d6e5b3e13a8a82be3686d239313b2c908996d8c107caf25777eedac078c2cb6719574b74f82a41a889f46ba5e9da38bf8c404aac68282b4cf4aa5651ebef34959a4b75f8770e13ac3d03a78368096ac25f55aa38fe4332f8ab46231971dcbbb042fa31d3d60d38874f600ef071ebae1d5c264f1d16e4c825a4fea009f87992f96e9e58d3f54ab6e4deac35ead630aa5f54eb020e439c9e1bd8886042cc8cd1ed82eeabb29dd06da8211eaca1ad7a2c1196e3eabda34e9338bc91f952a03b513e6e36792c5bfd924d0aeda40b3b94ff58d692620bd9872ed733a88f69bc1cddd1778177d86fa465e5c8a45bdaf9fe6a97d6a918de4be93315746173965c6557de27def31b735bd519d1b41c6f5e224a6b249639342ac6158f2e075a996766e08879374be635928ce26a3e0aa0151a10fa8deca29a3bb484bc216d71a37c716bd133fa0d48c90ab9a634bfae76cb7a1d4d450c24dc3ec4e0e749473f5dd98e7f2a0b5a2a78d95b342dbb865725bf09a0267c842fdacd986fa0e4b59bb734380b64378d510fae07af23abff5e007af29b3066eb3c95eaa54948a7d3a8870b353862b9447c41f2519ecc2384ec8058b20c93248d0c086c4e398b12eabca874adf68577395baa7ac8529c9687a734025c5dda0ac7df2ca3505cbb20f6163a4276e854926c2e268e77bc9896b27dba0f59ac70413a5b10a6a41cd1f45a9155e1d4e7f7fa35b3e788677d8603f0d96a7456ee08885f43c761e79504c1723a6848f57eacc3dd97a11641330e77113fac7effe1d05e5c479bd74758f049b8738669b68b110acf4f89162fbf2c821f514aea2e501e49442ce0556ccd75e6de30d0cebb62bc1596c92bc8628b47229ec3a8a3d015cfca1de18808fa4b97ef8ac1667114982fe983ae8a1f37bdf18c1c2e80892ba4fd1e00710d81d25160398430709d1b17ce614f64115af51083726072557bfc4304e4060ad35f1c608a27a8e02276d5bcadbd2af3510efed5cd2729b918844586a0d42412416a5f03e6badcc2277772131e50674bbff56bd86c742827cda8d6bdc71829e90d66eab18406dfaf2a22ed912da5f39d565e1fa5cc4b101aa0ce205be3968223957bc62b7f47f8af1d37fa0691f6aa784d7a90ccc56ced85c7c34ab55a2ebaed20de9f2582199b604c9b3abf9e3baa5a1ba1e093365589525983c7ea7040cc8c0fb2f8b7d48fc6ff011c54eb3dbebda263dd8791f213d70a1ee1bba21338422facad234e298424c4333b941e2797deaa3ded38d43e6142ab9b8054112d02e04621200c57f84a89bda4f933707038847d3604e173065fec95bd8c695f4dc85aad91af7e64a265b2311a83f5b62995f4ef2705f96bfcb7ba782e6ceb53e32eba2c7df68329ab95379c275fbf60a8ba62d0294ab12ea506e1daa1f5197137063ba7a7c051c89573080f5148cd24be3ffe1a9a67c5389b782a5610dc37854af3480fb60cbf3ecc9712c56e3c0ba07648a6d9189d81e82e3aabeb5c9ce7d11fd99c2432bdd74d6746ef417c54dfdaf503bcc6d031215ce405d5b443820eb29cb69011fe30c986931e99e6490b3bf314b43db581463fa7b9a6686bc9ae5d598b2737228a19e8a27649522d5c5ef84a2c6b8b83635024b5bbc8fe7965574c16946e79e452dbeddc42c5faee3ad0d9286f9e2d49fb8839127e5295cd48cce890bef12279cbc0dcd4c3c3f9c31ed09f71a101ffef8fa4e7286d55913434ec3f3d9d86787ab2239651d6f7b96c7ac66f233e41b093266c95ce04f1bddcb85980ab2c6a6c8f22f9f0e20ea6b7623f42ca283634c7448f8131c7b2d9ecd8edd041c08bb81ef130900fde805a2ddb0f1f671a961718c3372208443b3e1a7dc0c8559f2c43d3ad89ff20c2dd471788d1d0229c078a6ec6edefd44bb523c498831df7afd30059286e127bbb09d2070d476bdaabc16437eb9b212853a9623a7a9c1e9341df3b8bedeb337e6824d431dde0b407f61547f721e417d02630085dc73a55d5c8cb72a0dc54ed1fa6062e9f866ca4ba9f4f088a51b2a29d3a3191339652807f9e136ea70eac2c7970478c34d8d0f7e732383cf7705e9bbb44815a7b9ab44c6342ada0acd7c48a3f6d1de9afd0da95d674b33eca7db4bad4f1ddbaf7ddc0d24b223f87d3aabef9179a9fed0b85d811fe2a8526e740a1c443bfb3d6dfa3159080776a23ae993ee2163b5cef06b0807826a248fee6fa830eb7b83c285d3dcd77a7c9a8e9fe30f0443ee17d481962176f39b5772b6cb3ad63a28e7154410dcb727f32a26d5edfbbf3c286ee521dbc0781d0de9fd9851647588859e989e9fbe14d075e0e00ec14838d22428dc1bc51ab827b49dd4be4c8f69d58513c0a13c2a64a636f423ab5416f1418a1b2da325113fc7dbb274240a69fc5dca697775ce4611e6893c5e4920c2c05a07f1ccb71bc81f2011fb4f0d5904a0f593093b8c268e80c2ec03646012abe5256f9dddb977dd7825901d8517d2034390e7fb6bee51665aec74f2439e4332292fcc5eda26dcd3c59fb999c90efe50f11ac15eca62addc713f6defe1cbbfa80f1d74bbfa45ab2b8c0d4ac32cb19c5dc8b1390975e7439efffd1a10e1580a61b86bb3f50dcb61987e9df5c11e88e8ab16d4aa4fa999a46aed946ae6d266a8bf59c44b0a72031addb395423d709a381c1065ed42df089088dfbf0757ed105149b11076423660760c8e5cc4584f9f0e97d205c62eedfe737a22a41a528298b616819b213e506b5f80097191e5c0439c57d56b9f71d11cca624c354f334d3dcb928ef47c8968043c1bb57d44777c7ed0e38c6ba65b8325d6f69c5a989d36ca2da48f4534c289ffdca1158fec8b9aae741297815c5bed761675870c9687c47cf45e13998b7a2a85102915828a883739109bcc80d88c69e793761cd6ef180e73b7bf0e05b747a8b053ae7839558c382d3510a8f0af846815e25469ebe988a210b871377e89a11754cf2c87b056904650a5418ee5932d4a0369ef817e6ad19780aa8b9a41dbae0321e2737b4ef68254a77b9d76a01528ccd7214d092fc36d36e2ea2d396faba97aef5ff3587d1b345374208b1ea924309518a20542b51738faf8e3ef2824c9881131076e2514a1c513b76750064556a16f8d81af081c5641595ff4f21822bf18c5ebda3b99a35108c66fb90cfdec343eeecdd15fa1c844057868572e9b85ce3462abbf44d51c8136edb4b051f648113e334ab485d5b88ef35e7e6ce12d130ddf8ea3ff3aa8cf8bbb2726a0f58f8dfe1b2ece9499b61bf27e3a28d2595a46646148f685922c2eb98292282967b2522495222e2f04db7a0dbe4c565e621c6941073c3f66019154bd6a4573559a4fec9f3adcace7d99db483635c221fb675bb5735525a0c0a635c748a673925f58e7ed6ba0ee3afe0d37b29560cf377404e3c8d6898bb8fef9bdbe0fd3d85c5bdf5bf16b0b4a56e5394f0dfa45a43e1a2b4c86df9d58f1c2844be10c9a81d425159838847fdc893e89536e28464e416f1a8151cda24276408a2efa0eaf6dda22328f695e9ee035bb85bb9eb6d1716de89c4f6aaaf5687e773289d1aac2101bb0f636fb95b6593d11b93066526848afb7b97bf62daa32101bc1513ef2d1d84fd8439b55027b93527bef960b4aa52c60cbb4adbeecf67c6d25f117030cae0259ba5d8c5f9e9a533e7d61de10e49ea2ce01d9edc2e6db383a6c12428ccf92eab9c4f55d672775d0a4b19424e5d65e6d185a3565bd25d2cedc03532554fa60b4894ba2a564644db7b809d9a31f844439c262afc760ecdd396cd018ddd9301fb63123c0400618b0244afb965de594bf5682690af5133ac5380b037b38a647a4ebcc1285da6c7a74189f76a0626b2dd55c392a26a1f1cc2807ab81cfc21f7b3b3cce4b27148c626dd6ec67173913685205831d221776c7e130fc2884953ce2bfe6b3309a97a63da5822fc961ee3b4ba278393b8cd900c26a533592cd8ad1364f8d078372c3ee9960637abac5ac5b1ffeac94a266f94e798465111420524c1016d43b838353d4ae00d8fa8fc4da86f8844bfdb2d18eb86e3f6134df3a5f914c7b0b55075b500e5333872ad26f100229b1535370d8f2165f25835ccda65ed9ea82444da109f28ab4c3a1196dd37887a2f6a30e90c46aaa31a8be1126faa678f03915e26fb0485eaa424f53d4bd5921e99abe3b84971d658ac5d3ea15c369c4678286b5d87ad98ff3b1f7e0bb45c17e86593a4eecd24b805d25f6a8ebd680e2af5e39f308c24c9d49082bd52410196b7f6e9cfe1f908511871e6602a141cb61d4a2a9323e1de74d2d8eb5daea041edb421990c9b817b387a11a9ec4134e533f0517d6e9357affb275e496bd4135a9fd8b5b4a8f6f8909bf706170befc3a84d3db3a81197ff3962af78bdb72cd5a407f59713537491d42f0653542628eaf8d79475713e57217fb858e9ed5717f1239dde154c500a2fe1a35fd06e6fd227a31c10939034fe1eda4d563bd98f3a094889904cc36b6144eaa7e5752596901137c402168e3d6ed94cbf3a7b2d57bec87e05809d5b0b2d50ce4c1685fb534c14af86e4b36695dc583862e3cff4ca7b4e2abd85969207c079c92953810687bbc2f81c62da36ef908e4f4effc2af287fc43a73a26878c4ad221cbe04a75c8ebda86aa73ebb0abe92a8bd3b31aa646d7d0fc8e7ae1da3b69530b4fa929344dea119ff4b1a3e1ee643be563e9e3524cf829071d0f07a9ae2e906cf00f83e6691c1a1ce788402b32b1da99c584df360224248945831ad6a2f73b71a58fa54b87e75d42d130d4c2c23910fcd99bd62f9f9e38227b3107f27fa8070089f64fd12a138b1b457df5c151758b1a5ded108842bf6ab2a4ba691fe73413a47b6c36f86db4c70eee4619179699e1c399744a3d2dbba6b606ef1e1833810fe4c5661eadcca4b63188323e251bc90cce16d13371eabf976d0300d8e2c251d9044a94cf33ed8b6f4a24d4c9b8830bb4de3a9c771728cf65b9c2a27da2447c625d9313b5284aaaf6af7a6d10e891a2b761a624b43bba90ed1a56d77f20c572c70ae97d0746cdb0869b14718476d5c64994af7761404e517bf6a158a9ef644c3012623ed3d0451460fa52e4873c3d0f42483562a2d1a14032f2830c1abcb6aa16189877ba7d86c21306eec59150b71bfeddc86802eff71bcbb63792c1c416ad708694ffffcc0896e8f1f3894db2952605db48af8200bae32c5c6f4021db0431cefc588ef665deca1d7fb7d338a9c6ab57df852471e0554b396bbcfbe1eecfacec4b7e0de64c5e3ecb40e605229979af44dd41921498393542f609e29443e3813750766598a16723e45f15d2b75ca733c273ed464c99eebf58928ac4639bab8169807d1ec892baa105744f30e6d1b26496b2336360414e944ec434fe7c3036524b09606f9215c4b838f619c8ff7591b1eb2f54b02a109bf6c888e0971bd26823f1cce008ced0306360491a0ca6cc0ad243bd7d109ed092182617dc10c209f1a62e3d0b1ed0d0a4b0388fdf3eeaef5f318321e4bb1dc6c79359d63fe3cbdd0deb4d3908b17c713f1af5b94297ffdc8ba7f0260197c66ac0ed1eb3e5244741cac97b0fbeb47df03fc2f52ebbfa52018c9d73151800341f14581c4c704735165c0b5dd060bf1aba21f947d1e537b0adb91af274d4052e8c4460a0c948d893cfa8ad7f3abb45c0ed9c07ccfdc38223028bea0f48550" + }, + "parachainSystem": null, + "parachainInfo": { + "parachainId": 2091 + }, + "sudo": { + "key": "5GudrNctouBDj14ocw9WjmpT51p3r24E2tgDJT8BeauGNyik" + }, + "democracy": { + "phantom": null + }, + "balances": { + "balances": [ + [ + "5GhXs9iMk2yoKaKenjTutzNzQW7Dw6wZuRzdSN6MevqbjEWU", + 4999970000000000 + ], + [ + "5GCdvgD4e3ydz1NT18C2R7EWGKRy5v1LAA3T9Zwbyzc2trUF", + 10000000000 + ], + [ + "5FHGcJVTii9mV1MoDDDKkuJBBF6krXRUCQ5fDbvPGEda3HYT", + 10000000000 + ], + [ + "5E4XGWNMafFR92rNd7qFqk1jT72E9ExHvv1CguthJwUoGrFk", + 10000000000 + ], + [ + "5HVx3j9uEGNsnDEhX9ZdASdtwevkF9Gced7CpCQhCpUqfRwV", + 39999970000000000 + ], + [ + "5DfhGyQdFobKM8NsWvEeAKk5EQQgYe9AydgJ7rMB6E1EqRzV", + 10000000000 + ], + [ + "5G6dQhyK6qfRShAsTD3UUb8r1yBtqM7kK3yKs8Li4eg1GCWv", + 10000000000 + ], + [ + "5CnzsKWTXo4hz7gxtW8AuVrueDU5h9aAk633aQZ7Jx8LxcWP", + 10000000000 + ], + [ + "5G73sYSWWHDu7vy5Q6FjPHMKyrbt9rgokVHd8wjXCfRRMYX1", + 1999970000000000 + ], + [ + "5EUJx2cahj5s72LJURcx4UQgnrKx71nGdTqErR3p1cbHCbjE", + 10000000000 + ], + [ + "5CnuVVLsm3tLPWsoHPMQiYLgMNrE3MAzErbn4BGUz9NW5bX5", + 10000000000 + ], + [ + "5Hfy24UaDDXtizeRVDqQSz1w228sCTqXxjG9tNwkuZxrvsss", + 10000000000 + ], + [ + "5EYCAe5ijiYfyeZ2JJCGq56LmPyNRAKzpG4QkoQkkQNB5e6Z", + 52998860000000000 + ], + [ + "5GudrNctouBDj14ocw9WjmpT51p3r24E2tgDJT8BeauGNyik", + 1000000000000 + ], + [ + "5FNptX3Qu7P8ZSJApkgTD3yDd9KE47HqNv4TAJBVBeGasTmv", + 20000000000 + ], + [ + "5DJFwCPDhgW59i4azPbtf7WsBp7pvh2WB3gdeZLLHBMCiMEc", + 20000000000 + ], + [ + "5FUEUJhGriujJxfMM696Uw6QBAyZGhhTdmMs3cXCGjnddWLk", + 20000000000 + ], + [ + "5FvXsnYxcBEMa7W3V1zyLKj16q54JLgiCA98H54P65hzTvxs", + 20000000000 + ], + [ + "5Hn1CbwvhnNerF8MCk6CCjSf73HVErkayvfeKd4fRZzZkSc6", + 20000000000 + ], + [ + "5FPL2CwBU2k6cBG2J7HUBewXwUuWqb78nnt4AZRz82vc4SAB", + 20000000000 + ], + [ + "5GjxHY4LoAYvWFXv34xBnvy5jThGiQr9NNATDXz9b5kLKApA", + 20000000000 + ] + ] + }, + "council": { + "phantom": null, + "members": [ + "5FNptX3Qu7P8ZSJApkgTD3yDd9KE47HqNv4TAJBVBeGasTmv", + "5DJFwCPDhgW59i4azPbtf7WsBp7pvh2WB3gdeZLLHBMCiMEc", + "5FUEUJhGriujJxfMM696Uw6QBAyZGhhTdmMs3cXCGjnddWLk", + "5FvXsnYxcBEMa7W3V1zyLKj16q54JLgiCA98H54P65hzTvxs", + "5Hn1CbwvhnNerF8MCk6CCjSf73HVErkayvfeKd4fRZzZkSc6" + ] + }, + "technicalCommittee": { + "phantom": null, + "members": [ + "5FPL2CwBU2k6cBG2J7HUBewXwUuWqb78nnt4AZRz82vc4SAB", + "5Hn1CbwvhnNerF8MCk6CCjSf73HVErkayvfeKd4fRZzZkSc6", + "5GjxHY4LoAYvWFXv34xBnvy5jThGiQr9NNATDXz9b5kLKApA" + ] + }, + "treasury": null, + "collatorSelection": { + "invulnerables": [ + "5DXcCS77vQ7apEYSNXJ7EjjZXTtxLxs9JX5iLHAf68wngVt9", + "5CkX9Hsx97qfJUyQo8EiTDLQmfMUmXBgE9gY63PqpZ11pitT", + "5Evqct61smmWdekhiNnwSyFgi29o7LxQhLgL9cjXUHNumoCN", + "5DSBruvbwpHPBRhxniFGVJNA4rEkn6mpAcG8UUrRkvgxTpYC", + "5DReAm2nTiV3qV9uUE2L281azRVNRvBEvcnypLzKPnfAkWSX", + "5DHvsm25aXKNbbpsxiz3a9JsLHinxmmmo6BHYSveFBkNonMK" + ], + "candidacyBond": 10000000000000, + "desiredCandidates": 0 + }, + "session": { + "keys": [ + [ + "5DXcCS77vQ7apEYSNXJ7EjjZXTtxLxs9JX5iLHAf68wngVt9", + "5DXcCS77vQ7apEYSNXJ7EjjZXTtxLxs9JX5iLHAf68wngVt9", + { + "aura": "5EsoQz9PCdUgi61FfsEgnJuRtvDRtPgDD4Pnna43Rq8vPFM2" + } + ], + [ + "5CkX9Hsx97qfJUyQo8EiTDLQmfMUmXBgE9gY63PqpZ11pitT", + "5CkX9Hsx97qfJUyQo8EiTDLQmfMUmXBgE9gY63PqpZ11pitT", + { + "aura": "5FhgvTuYZULBSjcgLbXEPeRr7srJFRy1QTMWtweiJ6uiMH9R" + } + ], + [ + "5Evqct61smmWdekhiNnwSyFgi29o7LxQhLgL9cjXUHNumoCN", + "5Evqct61smmWdekhiNnwSyFgi29o7LxQhLgL9cjXUHNumoCN", + { + "aura": "5Ey3Pt99XJHiCkHmpXwnb7FtwMZSAG5yTrd4u5wa8U4jPTpb" + } + ], + [ + "5DSBruvbwpHPBRhxniFGVJNA4rEkn6mpAcG8UUrRkvgxTpYC", + "5DSBruvbwpHPBRhxniFGVJNA4rEkn6mpAcG8UUrRkvgxTpYC", + { + "aura": "5GBStN591W2QcdDhxs2haZvkidiCEtmHGQ7omZh5jDc89H1f" + } + ], + [ + "5DReAm2nTiV3qV9uUE2L281azRVNRvBEvcnypLzKPnfAkWSX", + "5DReAm2nTiV3qV9uUE2L281azRVNRvBEvcnypLzKPnfAkWSX", + { + "aura": "5GMwmGssVkQtUKsm8UiGeiPrba7wdhkcZ5xmNj8HCH1ZUhvY" + } + ], + [ + "5DHvsm25aXKNbbpsxiz3a9JsLHinxmmmo6BHYSveFBkNonMK", + "5DHvsm25aXKNbbpsxiz3a9JsLHinxmmmo6BHYSveFBkNonMK", + { + "aura": "5F3tZvZr8adETVGYCuMaHyzrYp91yNiXtUnydh7HrhjwXgKh" + } + ] + ] + }, + "aura": { + "authorities": [] + }, + "auraExt": null, + "vesting": { + "vesting": [] + }, + "schemas": { + "initialMaxSchemaModelSize": 1024 + } + } + } +} \ No newline at end of file diff --git a/resources/frequency.raw.json b/resources/frequency.raw.json new file mode 100644 index 0000000000..9a248aa4c2 --- /dev/null +++ b/resources/frequency.raw.json @@ -0,0 +1,124 @@ +{ + "name": "Frequency", + "id": "frequency", + "chainType": "Live", + "bootNodes": [ + "/dns4/0.boot.frequency.xyz/tcp/30333/ws/p2p/12D3KooWBd4aEArNvXECtt2JHQACBdFmeafpyfre3q81iM1xCcpP", + "/dns4/1.boot.frequency.xyz/tcp/30333/ws/p2p/12D3KooWCW8d7Yz2d3Jcb49rWcNppRNEs1K2NZitCpPtrHSQb6dw" + ], + "telemetryEndpoints": [ + [ + "/dns/telemetry.polkadot.io/tcp/443/x-parity-wss/%2Fsubmit%2F", + 0 + ], + [ + "/dns/telemetry.frequency.xyz/tcp/443/x-parity-wss/%2Fsubmit%2F", + 0 + ] + ], + "protocolId": "frequency", + "properties": { + "ss58Format": 90, + "tokenDecimals": 8, + "tokenSymbol": "FRQCY" + }, + "relay_chain": "polkadot", + "para_id": 2091, + "codeSubstitutes": {}, + "genesis": { + "raw": { + "top": { + "0x0d715f2646c8f85767b5d2764bb2782604a74d81251e398fd8a0a4d55023bb3f": "0x2b080000", + "0x0d715f2646c8f85767b5d2764bb278264e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x15464cac3378d46f113cd5b7a4d71c84476f594316a7dfe49c1f352d95abdaf1": "0x00000000", + "0x15464cac3378d46f113cd5b7a4d71c844e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x15464cac3378d46f113cd5b7a4d71c845579297f4dfb9609e7e4c2ebab9ce40a": "0x1840c0cf083ba1d081fce7c1f38f5344a4eba4ee5c13e1dddcb9cc6acf745597101e5dc06d8418a0dd695bf3a23ecdc219103a149a863c1977396bf0697a4740157eb4de08f44e6077ed072e2fc357aac007150e3b73373434c47ec56323b52a753c9ea854901c1b36bd203400c90c31a69367316f7deaeeb14037f2be44bcb1183c33f8c4c1155958d60d4d52a5181677da96052493d876b747272311b52cfe6136523fba06e0f31f35dd904386a0ebe25d505ef09af4d39041afa1d994a23f5d", + "0x15464cac3378d46f113cd5b7a4d71c84579f5a43435b04a98d64da0cefe18505": "0x00a0724e180900000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96": "0x000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef74e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x26aa394eea5630e07c48ae0c9558cef75684a022a34dd8bfa2baaf44f172b710": "0x01", + "0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc": "0x4545454545454545454545454545454545454545454545454545454545454545", + "0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746b4def25cfda6ef3a00000000": "0x4545454545454545454545454545454545454545454545454545454545454545", + "0x26aa394eea5630e07c48ae0c9558cef7a7fd6c28836b9a28522dc924110cf439": "0x01", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da907601cc2a010ed1275ea23249d162cc336523fba06e0f31f35dd904386a0ebe25d505ef09af4d39041afa1d994a23f5d": "0x0000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9087daec71521aabafedf866a7f64f5e2b26873df000ddae71bbc035cd907b1d23b06e662d7db11cd5802f845fbae547e": "0x0000000000000000010000000000000000e40b54020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9153f452f91cee66081c23f4d576a7495d64279ee49fc11521ab7272190f8c11fdff7ab554d5490254f292613b36dab30": "0x000000000000000001000000000000000010a5d4e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da931e730f3a953a3225f49274c496c9763fcac9ce9c9807732f092a84efde7cfbf77b4c3abedffadfb12cc63c6f6836605": "0x0000000000000000010000000000000000c817a8040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da938c9afe0b949e0c6de30c9f9690b24759286ca034a2523b7a53c30e433bc148aa43a4eccbceffe2569df30c915bf666f": "0x0000000000000000010000000000000000c817a8040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da93a359ba59b928db18d11768c099514dc2041926697db16c0a27bd1bfe2883b69cd12186f89bc44c2e1cdd2eb69508268": "0x0000000000000000010000000000000000e40b54020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da93b8dd5c4294875366a677618540b85ca92e8dba6b1cbd25e32a786a128406a24ec3e7f8c0c17c65e7d146f14f0fd3e69": "0x0000000000000000010000000000000000c817a8040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da94401818a050e4de57a12e11fb42909fd6a793e27cb1bafc5c241872cafc75e08333b6b95765bf868e47056909cbc5b07": "0x0000000000000000010000000000000000e40b54020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da945ed7e14b284222bbc321d633445a78dcee0137a698a9a616193c80550185ea91387f16208544a8b47d477703b055b4b": "0x0000000000000000010000000000000000c817a8040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9463b4bc9061462566035a16500f6f773cd0760f6b5ebbcf0181368f7d7258e7e1f3154c43df4a1112b6d7e366937ca42": "0x0000000000000000010000000000000000d4bc3b72c311000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9577d86199291e264d03f89eaa9f2f5698e49e6382a3e6fa0e0cecefca2af3c7f9d3eebde95bd9e75893ed179d03cf61c": "0x0000000000000000010000000000000000e40b54020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da95e296d1638e5ed76195eb31e20bb5c633692687b80fcc7293aeae47847e234d9744a81963881d262d044d0dc7080f059": "0x0000000000000000010000000000000000c817a8040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da95eb3b1da94724da7d5057ca0fff068a440c0cf083ba1d081fce7c1f38f5344a4eba4ee5c13e1dddcb9cc6acf74559710": "0x0000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da95ecffd7b6c0f78751baa9d281e0bfa3a6d6f646c70792f74727372790000000000000000000000000000000000000000": "0x0000000000000000010000000000000000f8ccaf2e4abc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da961f241703cdf949d6c16a7da8ed0c21746ebddef8cd9bb167dc30878d7113b7e168e6f0646beffd77d69d39bad76b47a": "0x0000000000000000010000000000000000e40b54020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da962e15994f789781eb7d10d57ef6012ff202f792d3edc84813c8e89b6a2cbc6dff7d077522f0b8be78e4b0877f2c0b70a": "0x0000000000000000010000000000000000e40b54020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da972c9c13fe5c72a6f24003e8d75e4ddea3c9ea854901c1b36bd203400c90c31a69367316f7deaeeb14037f2be44bcb118": "0x0000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da977ab3b3d505d9fbfcc15afd64c3b7f573c33f8c4c1155958d60d4d52a5181677da96052493d876b747272311b52cfe61": "0x0000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9827923f0c1f71aacc602295d6038ea55b6fdaa1aea71c2cabf6fed4c2943d6fcd7c7a594e0bc36c8293220a1971dbc74": "0x0000000000000000010000000000000000e40b54020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da98e567a94bb8ab6eb963d9b59cb195de8f811cbc8611b38f68f4e486284e71eb45523fc5cf685c070bc76331d595cf81c": "0x0000000000000000010000000000000000e40b54020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da98fc01f29df0b229d45e3b7eba22304431e5dc06d8418a0dd695bf3a23ecdc219103a149a863c1977396bf0697a474015": "0x0000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9a87399de338fdf2453999c25cb2fc8e27eb4de08f44e6077ed072e2fc357aac007150e3b73373434c47ec56323b52a75": "0x0000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9aa0a1ad268ee63562b4cd598996f452daab55f57a977dfed1fc64e88c242c9a6c7f02abe2b581fc58f2bbfc0bdaad224": "0x0000000000000000010000000000000000c817a8040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9d649c40a476ab8cb3a82d3d1ac39dfc196a666eb5d96e39f555094e37f32885f6c8fad30e17bee5fddb138843285c237": "0x0000000000000000010000000000000000c817a8040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9e370a1772cabb591a3dfc37ca1cca8f6b2bacd25b122a125e0196107e0a13e0505d17399e46b93f339fae9387d9921cf": "0x000000000000000001000000000000000054694df61a07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9e71b40fd102e0c83fe64021a569352de5854d238bff3f7a924eadcb1efa6fb2cce5dbdd340afdbdaaa4586567083883d": "0x0000000000000000010000000000000000e40b54020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9edd1bde5ce4e868766e20f9b5c3e4451f06e128a8f9b813d07c1212475183c174de545f1705bf9b1ae8ce468a7f0ec0c": "0x000000000000000001000000000000000054e0c2c21b8e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7f9cce9c888469bb1a0dceaa129672ef8": "0x04246672657175656e6379", + "0x3a63": "0x", + "0x3a636f6465": "0x52bc537646db8e0528b52ffd00582c3005beaec6911450106868947468da41a369078da61d341a08562859830b09151177b0a109662f4c79468f3311f448c18c44e28478c8a12a20230f753ac6313173997b8261822c19edc819a33ef82d219b904df6de5b6e1930159b133114cec81935e56b6bd083b2de7d39cee84181eebebb3d2fef734f2283195d277331e934457069bb19bded190d0f2fe15bd2ddc9e2b745a3e58390a56d1ae1d29625c125f921b8045bde08365ade02cc034d8bc692d192a6b720b6a8d2f238524af9052235a0f5c26cd0ddb23d92c24b6f738fb630eac77ffcb8097da7afc6fc50a7dea957b719abe479fe559f97ef4d59516afed528aee73ce5961fcc7b7fdbb3d2e467ddaa57757bb1aaaa6a1051bf07e1bc53fa2ee653339fbe6b7255699337c8a4ea0e23e2fafaabafd2f87a757b319feb51b276028d9ce8ad7a10f586135f3acac40e1f2b90f578fab42ddbb66dab60d09cf284132d1445b67c14aaa19c5a6aefeebd0a5f71c31c1e460b726fb485d5216eeb570d7a6d69373f10f38987f5bde7cdbacd5b8f350a773c65ae6eddaa95b60511753c7c0fbfba517795b69dba728bf954a79468d6c76e83bccff7bc20a2a64eddf5aafb44f27a83726af757d5a0d7d4dfb655b7610d7a1dcfd80feca80151e73376043675c67e280dc8fd694144bdbdacf9b506debcbbbf73bda1afba538719e9e9dd201b7547f97218113ef5f7c3a77ca807b92f3d8586ae257a7eb11f253d3fb5dd2044e25f11aa6ef340efd4e9ac9a50d07a3132eaa199b6feded0d5d6e71743b2c4ac424106685e9df721d993fbbdaa42f343b2ad2f76244957ef61ab06fde8eab30619a0ddeabc07b92f5dbd4adb0df28e118952db4e2dffea9cd5c9bab9dec7baf1ddc38a3822aea1365fcd98b43f5d0ea6055d6c80f4822a96c9ca5c7ff134be5387f14db4bf43ae9daef6aa5f9d9ddefd9177a7aecacbd7c3ae6e3b6c12a9625cd3c57cd6c9644cb25e7dde613e4eeb793d5c5568552a6b14d79bebeaae46715dbdbaacdb903e76efc1382de8f50d91d7ee4efbeaec5dcb5a6940f3f4100b9a44ccd38bc658d51d7604754b5b26559aebc5269d759baf4ee96296b69ddabaab9b6bf7aa6e093811a17783b857ef79aef2ab6b314b0b7afd5ed5a5eee22048559d96b56e6ed62dde9daa374e0b722d35328c8cba87a65ce40185b066200382dfa1b75e2d55d8b23b64db6979923f564b2ae337a86d450dbf5544ec165a6a58a2fcd678592320440a627c31ed61dd881a6ed49d9cb6e8f9ada8e57785d815b2edd10adae821d7537bb26a74d0fbf2a5290d0bd1bee8e5c08b296a461b514b6d83dfaa7e3b347557acfbc528b04ba862da1dfa15b9133f3ee3efefbda78218f463d37bef39a117952e4c0085354c11042da6bde832ddb5d090d530c951edda72c35243b6bdddddd5ee2e8876771f824bb2ddcfa5d5d2842dda1d08f33893fbf643bbbb2994ee757a368b4971822952a4408a18140081dc3f3859caa006903b0a870d2978a009fe3bc4c5538e0259bc3bcc5e8ebbdb7e35ac697814c5191a1e526182a7e1126ca86d4e80347c568a1a05b26d07b58c8647ef51146ee8aa770c20e8a0b7ecf15961f58a5185368420e353bae384b8a068d2e381a6fd0ec1ec98e3a1939d7eb339d6a1d73f396a00051bb43bac4e7660bb43e8dc195aaa90d1abe50a2e1d805e2d57b0a01d177706dd6cbe87f94ac70a2b421d6aaf6e8e1d163208ebfcabdb54dd865e579fdb8b55355caaded432586b98142febeb92c1d3bd5e755bb804b5cd35a4be1175f5e5d27ca56deff2f45d102b22359aecf1b8a397131f3777b4652dab3b62527ca492c16feea823194c8a879f153229c63b2e3d0f56d7af5eedb874bc3be2927cbc238379322323a329a678c8a5770fc37a31299eba2b7b3cd0145fb358b4b264dbecb85c7a7bc76feba5e3954424b8041f9f8413c275bc3b41c6bd5aaed8a2e1dfb7375fe9c5e1141d44832e902ddb1cf3f0b72047db10bda66dc918b20d493f30cf34ed4a205b2d6840a3657ab5b4c1855eecf198d260c114aeacc00b365460922d2fcb78c3085a1e8779f6c8c8c8e80a933c10e65993d436273b1da106816cdb7d1fcf3439f757b942ce717f40a6a3d7082688a269af186974d1ee0bc4c12277728fa3703a38025d217433f8c57c0af08329dc400b12a85c210cd3166b9d1d8f500d149fc5bd0d7f8bda6c40264ff5cac3bf3b192bd5b032cf7a31323292020b4bdade5ebfef967aa0486349dbefabb98cea1eee61ae549fa2e32be8328f33323232a2625a1ed65c365b085d9e5c72d9bb6075bdd87b11544b1867f47e2b17ea8e1c96002b0748c2c5c1f730d4a6f690a0075826c550d7d96209383584dac93904d0ddc9f8afa6dfdf6bb8840399c799de332ead962a6ce9779a22747732f8ada6e377b8b4cd20b8b4651d1f773a3efe072ec18eafe1d21eada08a8ec7611e36c5de86e8189f71891f4fc3a5f7f8f88b4beef10b246a407b54c4e5e8c52c10bad97eb3e573b6674c01a7def840ab0515f5de650e06747db23d9ac2a5f768ca17bdcd86efa1574b1adee81592d11848e566eeb156e82eba99fb661153c0a92156c4b53cb53b570a463c85984fd45cf6fe30059c1a93efe1c9a51ba911712d2fb5c924f76df7585d2f10a801656dd003b8ef1d10bb4a75e05c0f2f11ba44b23d82c28c8ebd4753d8e895591f321ab3198ccf610a38359fb577186511fe7b0f2f976e88f0df9fbc3be4d2160ff40e2fbf5c7a979f5ce2965fcc476a2ebbba0bba9dd19877f89dd2450127a74d26c1c3d3989eec9d1f54d4f0f02ec83574199842c58b942d52be5892b9bb5e0662bfd8136d9c4b242e6db0864b7c205ce2e64f2eedd11347cdbf98e79982706f38cd5f2eed7947899d7ea7aebadea60e32c9414602dfc3942e56446adb5b7e32b64e063249db865e5bafe112fd3b0e97284a5595b655b75e511793322e51d5df29555dd365d2758715717d69db75eb54ddbeead0ebead4f1ba0743d56d5ab7adaa2e93b69a769f8f678a9b967336d8eebb3a1b4e3b6d938f7fa7cf3959b70de03eeb506ca72d9328e56b31a96d4cb4fcd66d3e6c9d8c3b85d8aeccc524204c7aa77e1f4aeb797c5837d741eecb972f5f7a3bf55ed6a1d77b573326f11de6b3d1446d32893358b7cfa5fdfb7c3cd0e89db4435e3f20fdbe409e06b4d38bc3c972710beabe40b637dfd521d9915197de60f3a7fb9cfb789673b6acddb7ac21978ea0db0b64cb9a4f9dfb76353bd7c3d4d5d7d70e11725d3aca0543dde52aeccb4b07511d6506bb606216fb814646ed76874c2e6daedf7fc88a4026ed2f57b9afa38e22b11d22e48c3ac800edce771892cca8dd2f2e6db351d78cb5f01ebff7de7beeef39e6cf66ede6081f9edd8f3b6b1b1fc863e7b6d0edc9a58dffbe7cf7ed9dbe3a99b4e7c9f80f091fe86993491b5c05d0e5928bd92f97dcf97bcad565ee3466b9e47a4f2197dcf7f45d9bbddb503032f877fec37c587399fbabcba477c67ca00699f44ef99abda7f072d864d2fb624616f3e1f7700ff7700f9f9c733fa00b647bf3e90ac9e8fa902de6b3771811268c8c8c9ce8d59649db6c3ee56bb9e4bec1de2f972093f8fbc59649fc1e0622dbb2e6c3bbf3690d97b6f9d45d199796497b3e0d97def9355c72cd5fcce7bd877b18d6283f1acaa99d767364b6fb6ca7dd1c71877787da90eba72d9336d8fbc57c9cb6b976efe11e5e20ac01bd1787d373ae0cbabb4336055e313232323279b15ac2f0424f592f46464646262f564b185d7a7b81d0ed21db483700d946ba17c8b6d9fcc9a5d552852dcdbfb8b4472af0d2fc8c4b7b3e0d97dcf9353bc4357f81b006f45e1c4ece1580ee4eb6474e60d1dbecfde4d26aa1e2a5f717f338d3be864baba50a5b7abf5cdade707abf4056037a2f0e27e70c40dd974bdbde69cba4fdfee45c0eba4746577a29ba02c836d20d926da4ef74b3bd0d0523bbf9e1bbf3ddf7ef8bf93ccd65fc1e3e3947a29bed57522b32f0a50dcb6a83c506eb8bf506eb0dab0deb0c9619ac32585e2c325863b0c460b16185c10283f5056b0dcb0b56172c35ac2d585ab0b26075b1ac60a5615101c90288b0b6585aac322c235845b0c4b08060d9c0aa814503aec257f008d80aae221e216e895a6214b08d28056d014d01bd622dc182c29a6299c02a41f5a57a8335034b0695132a2e551995112a32aa225462544715112c2e2c2cd6106215d1089109f00cd00cb00cd419d00b1c0314831585ca05d595aa05150baa15545b542aa8505059a9b4a8b0a84a505d518da09252395119cd30cc374c374c35cc344c33cc324c2f930c730c938d0986e985a9c6d4c2c4c2b4c24c63566152c19d61c1c07a4135850a8d4a0ad1c86a81c5026b05d616960aac1458287847806cc036c037e01b201ba01ba213f1098b08f08b2505f706c703b783a80400e830f10107859be2a4b8279c13a727497e8c14713050c0910420c06400e782010451c2008d0185017d8252b1d6d08435050b0deb0ccb099612dc0bdc14b109138d59c62c824b8243823b82dbe2b4b8329c111c19ae086e0c27863b7244704370427061b8203820b81fb82cce07ae070e0c2a0d94146815740a85828a804a712da09ce0b2a090406d7168a0ae5031a06040bd807201c5026a0b4a05940a2a058d824e6135c18282f5042a0516176a05540b28195028a0664061a1b8a0ac5027a06840d580b201950585055585ba82a2829a82a222df20dbe0ce20db9067906690657069a04c20c720c920d5905b906ca04a20b5e0a620d39055a048e0d85081095023a0aca0aaa0444049e1002a0a0a0a6a0a25857a82728232925fa41be41b720dd20da90699068906e9458a41b221c320c120bf20d7905e905d905c9059905d2416e80b2415a813320af20cf904e904d904c94532412e412a419a2191208f20b7482db20c690449862c821c438a218f2411e410a410641832081208f207328bf481ec810443f240ee40ea40e6407e2171206f20bd905d481bc81a481a482e24163903290319030903f902e9027945b640b240ae406e21552053205120ad482de4096416120b69025902490259c50879851c81b44256214520a990537016928a94424621a19053dc1b528a7c423a218de297f886e886f84664435c437423aa21a621a221b611cf10cd10cb10bd4432c4314431443662182218e217e21ad10bb10b8e0b910bce8ca846dc42d4826b83fbc252188a88058e225e215a21a611a710a510a360f92072297226702c70579c1547057403a60182011ee145f1a0b098c027602a2c053bc153f80936726e706eb8353835b8361c19dc18621bdc169c169c1a2e0bae8bbb027581bc82b3824bc355c151c145c141c1ea817b8273826b82e34269e198e096e09410c503ae048e041cb0d2100127404358005a415dafa3dea8f83181b22403499658c224892449a87b483c61922489b58e89930c2c197ad2010d24193a82895013249e34499284c7c401ccbcc122d124c912281c4082c9d09325421b4832c464033d4c2f76034c9c304122099425492c814204ceec629168e2006dd660916892e40319c061d20089274b922ce10093248e8092e4031948c281264b7403a030d9c012285098102180c9c5114994d0c0931f274e9438c0d0114c9c3851e2003d4c2c0bc5499325434c9048c2848906769832582534f0a449920f0831e9405092264bf4d013261cf8c092223e63b04c8e78a2c493244b923459a2991cf14489050c3de98012471cd13d260c9050e2082648fc982f58281f600294040a940f3039f244892650a03071409d2e580f3459a2859800092921012475b260990c2d41a2899325519230e900930e30e0014830d9c006963ca087b9828502740493248e48c142197ac2448849124f9a7ca2e049130ddc4c2df68826509e34111a628249920f385962892549849820e1a449074c404728e1c484334fb01c48b2646809124b8698102133b1004113274b9a0c3579d22407b586053a4209271948c264a80347306182c90ce5c60a2971808b52c34261d264a8899012490c7560090eaa8d7da24493a125421d4022c990124ea02469b2442f11ea40e7b89158a0b668c1a5f744f7c8c8a8dde9f190700470046e0947c11db243800062c81007239492e1942e4ac7d239b9d071846e4638b148cd6955f18af0aa9894eeaa72c22a9d830e42b9cf39c7cbf30347282143866e238471235c19e7420861c4e69432ca29ab08a1c4628c980525c33925a491514ae81c942ca383534259c58d101a00a3d1c938574608a1ace6ac663527e46ab2845132e4c8713af7de838e256391211621cb386594942ac0740e56134e2c5a1be58c52c638316cc61863947308020c011d643861845142291db363c70c6184902194114a8631333333333330726606cec019f81e84333333ee9a812c8464f9e08312ca0ac30e67c8005842e82c278504a1411813692043c97c4128213bc8cccc902174ce4166e82084ef41072184cef14c1e279d74d039b70ebae5e768584229a194169472173eb88f576e001842295f7207a24a4b56f8e60f8fdffce12d4b1925945000cf3184922164291f94124629258d8430420721642821a471f0bd7dcf41e8a0834f2e840cdd0b800f7207422804426686d239c8f0317c3b78900f4a280130219c10b2843a124a2825259d84d593134629a394524218444a39a59432c61e2084873c4028e193cc0c59420821942c1f4329259c0ca1733ce7e51c0d0d845242c84e3ae718c6192b6b468c9ad7754939217432621b239c7032e5229411bae87248eba483d349e7dc0e73be6739a7c3ae73eb1c90750e4a9983946e9d73ce6172a59412080e9a8c61760c9925c3c912d618e594315e5884d0c1754e6e84d775c1ebbdeb5aa656d02b1e8ff581034d869e7440e8ebc3069470c263c765986082c49326499e345992c4111ad080129a009c3401daf9b1830f520f524d909a1d7078b8d9d981849326491c9164c849079668800912393bec80c223c606e888251970e24409211e6c963011b2610294648809264f7cf0581f986c80470665084a132698e03c51a2c9d0114ba03c5922349464a8090738a004a96603d044034c8496d0648496307172c4cd8ef5e109932596589284c90696082931040587c60993284c9c2461620907926ce049930d6c4009273f740c2d1162f284c90672c831a484124249906022c4040921259834111ae2812609284d9e34d100e95a1f923862684906920c092d1982b2830f4830c1f1010d3411621225c9007c0002880008e130b30140820914284c8496e08012472411621245892398082559020589239824f101a80444009638820994244a0c2df101a12378ce04932470643430d48124434f9a082d91e408284d38d0238800f8e0e38752122694f0c0508fac04440092048009d012271948b281274d9280b224893f0ef888f284c9e3f521c913259a4011621225091326421a4822a4c4d092239470e2644992212698e0e058fe8090121c60c20119e50993c70336069fa8923d9daca2d3a9a8e8449da8d3834ab6e8743a9d8a8a8a389e4e4545a748747a4427a8e4e48a8a4eaee829d9a2d3e929592e824a4e45aee85454f49414b9a22256b2454527662527b74a4eee54747a4a8ab6c82939b922a7a4c89d9c9222577462a96457c99e2a252777a294ec292ad9d354b27b3a9d4e50c93a257b72ace4e44ea7d353d2f3a6e076d77100ca920d9f53dbf89299c6d57918121d97da76a239956e1926c87d9973cecbc9cb5c6ad51197646464649c8c94b34a9953ca73c619679cd1b40cc4bcb053be2476c9c8c8c8dca6f788076fb48d0f9cd3d5808eb308de68fe8fdb545145ebb88e5398ebb7b1b1b1a136d7856117cd69309a2ff6f368301b9b1daee33f9c0d063379f0e0711f3835ffd98153b363f2a8db3e6c6c6c78d8d8541f5765e3e332f7b1b10f98988a53717cf8f0e1c347c5b1d600729c0339cee90e5508f60ec789c92ee734920fcd07ce493838ef619ce3549bbeae2a38a73024398da3dd1cc9e136cfe136a736d5c777a8b3331c97acdba439c8807e9cbfd3db8f6ff347851dd171fec47e7e9c4f672ec67ee4b133f6735dd25ce270699bd47aec6063739c5f97d00fcdb1ffd49ce6cb254cdb847eb0eff80f8f63a7b95e43739a1d34c778e070597b9ca6bab6a9db383ebe830f1fef619bba4de3e3e30f43c27d7d87ba4de975ec452e0dc3b06b6a374774b8cd75b8cd29c46ef3dbfc47fd7b5e0fbf6edb541d6a0e1548c56a50f61a3b3c0ed8558332aec2a5ebf0da55a5e1af5a1dd5a0cc596b546b8d86a7300e63a0994ba099df7c312333bfa1b1c2251f3e7cc8fbb88f638954aa8fd3d580fc7111b0d1a5de232aced074c7c57556c124f89b3aab3821f094ce6bb14bdb88b68cca4df19a05881a517c91655a06e2ba4ee7256b8f4719f4dac76975f9f0f11e9618929cf6716a5d3775737df3c58eb8e69b1ffef52297766a59afba49f91bf9ed532f26238624a7a5767344e63f2ef31fc7b270e9c7e1e98fbab9fef1e3113bb243ffc0b01ff9eb0ebb94ef71d658dba436c44d739c5387f99c46dbb8695e73aedb9c423fd8afffec38f6e5d2a56d423fd779fcc7e6d7b11dda32093ba66db079685b906bec97b6d968f23d8fa66e73ed7159718ed5ed9a1a54d43ffe1ae4fac78fba4df3e3c7312439fd43bb39e2e3f23eb4698549f0f11556694d14c553a734a3f82995e6c532a932c90bbbe93d0263074df9aa9c17fcab0e71cbd378c9ba4d6148a870d143ac0199d352c3b230099e3122aac6b4cd038d9d2e174052e9301f9acb1a6b143711c51711c1000b368c4c55012acdc814b529cb405c8fe2a6f84bdba0cdf90d2d4f53835c9b64ddaee37c3129eb90ccb1aae3367523ea5185a0cc172382d432efe12c5c92393c4e9d17822d53ab231b25e495b8f9f6cd7b18da04651dc8b02f75974d5086fda64a0d0b959b8898075794e0022353115c438c148c616ae2034427537529764c51ec98bcc05e1d3d274c5b7475d4f036340799b3d2dbdb8c41c34f2bdcaeb150b9a9fa36ad34fcdc820b501dde610fa84e04f3ead461529b5498044f8d2c53dc4ec1169d43ef110adab072d43a3e94e59027a21e05bd1797952b5448a1e9af989ad5ed32d431bc86a79a185cc3e37071ddb02c0d8f8571c4256e788c0c27c4625b1a62599c10cc4de73594c5e738f599ef388febd8269586a73c8a2c53c442859ed28a2c13f54d4a8c886b4aaf49854b5b04151c8fce84a37a116480de4e5d73ae403277d2b26e56be681ebd475a1ccdcbfac4e24a738911e1dbfcaa404ee4e7af4fed89fcf58dbfcd86db36753b350fede647c7f93ace1ad0cc77bc468aa5119d4c391e4f610a98f90ea0799aeba85b8e96798e1a05bd3351024c39825af0c2a8af532d9b3a69c595de255491565ce98bf245538f547d5dd69b1fabaf5bed9a5aa3570d6a8dbe568dbedec337f234f5466a3f2f8d306061d4d7ab9ecdd88f10298c61d4d71df6438029477d7db14bc342856a5e0419a05903dad068797e4f47a2494415c5d3e33811959b28ad286a5262a8131559a7342a3751a772130eadc8d2a2a06200131427537c3cd5a4c450dabe9c6d8faae0e2846c7b5405155a6a43b039902da1b788e58b76b25c1a88b148610036c5c3a26c123923a328325364628fb41bf9ea51dc549dbf2dd1acdd48ed0119f64d49633f5de9997af3c34646fd5e6464d432f5610c585375891d593710a1a5e644fec6c8628f3dd4db29ab377c2c540c608a7731f5c6016b8abfe1ef110ad8e83d4241187a319f4bbbf9792dff5a62759bbfb9ee0133da034968987a73dd99d854d59b4b63c0ac1e853355bfbb60aa33c90ac53516eb58dd3ca0849e701f84d94e7d5304f59bebb05fdf3080fee6d28aa09a94fde2463c6c6ed73dfcdaaa529ca9d26ea61614f3a5b150f9c1142f25e60da6289c297eca343232a23429d417535ce2ee84e00ed3a51787130e2e7a2757e41c060417687c5bab53ae5b11916d768dd697b0dad29e580db5c8752b6a589d7788d04e6f7c272e0d1db52756f3b7aafa36835c5757b6e8d8d529bcb8fa624864571b6c191ff663757c555d8c1a6f731dcf79aeec84c8d3e7e4f757d8a0f1f1e91e5de9c2003e47f6a859db7aaef83dea3dbad245af18cd525275737275bc8ccb249e2e864163845c9af4071689878e29bc16f3a97c6214d7358a6b77e896214cd4825e5b4e037287da36d4f0f2b16e57c753359ad2cb9b9f5d4295a68f0d7bb11f6a8da6da3a211bc7d375bc0f669d90e8e46a282f3520f9edaaeef42de95490b95b95baabf2559d7758d0ec49d5ddae9d5915d4ed10c78fb5edb439b1fa3d32c47ee49fb6ddfc58f052c3b28d85ca4d512bb24c5ebc4bec48d550db8ae85d9daa6ece87b5edd44cc4359ff2b27b301b04daed90e5abe0e56cf0e21210dc0714cf7787f014567e1342ac089c716eb0e193dac60de7914c243d3d5fbdc28eccba1b445eb06edcf0132be28c3ac81df5aececd0f3f7ec5f8c2135dc1bf0861dd7eb007f487de0fd1cb03f37dc625ec7b1a2ed1ef6b700e642788594f7da228abdec8470dacd1f0d8e90acd533270a3e1e70ca8343c054fe9c9593146ca6aea12e8e6c8f50a5e31d7912be692a7917e3b528d887c7cccd2f0f45c347c04aa1ee15555ebb2ba8e0f234229a51a50f50d1ecaa9a19cda3ad03c44027f69dbbca5c5182fa2863d0f53a74c993205e651ecfae0388a5d1fb6d7f3ced4f32c781aaf59df61ea9a20bcac47a206841d1edb4186fd691b764abb99bf5e1d1ed36ea676845e9efe02a2f43a422ffaa86df3d4295537eb37f17b133522d5f60cac50be2690a4ef92d5fab4182342fd50d4dfa316e4be44f94939d7b27af405ebc37e31187cf1dc5d7d0d935c12d97ebbe8ee6230b0b10b26ca4cefee6ec6243799c45f50e66f746e65bd89774d7d877ea7ce35deb164c9923acbb9ec36368d954f9db322e3bbf8ae08afe82a3ff21f9f468cc8a62129120cefb4dba19f76a2dc6b027d7f30055c9a7fd5e044e881cc7ddfc3afba5e820654fa7a3c5728aef98c19d9ae34a058b72ae456277e6876d07e697acba24eb3b8aa41efcb170dc05f6ef4f5ea9446ba5811eb15d7edd45cfdfd5445a8d3bb4a5fd5eb0f3b323fefb45d1df71ebeeac69a5b1df7eab46ebc8f323be8bdc168c835dffd241d83c12d19ced0f0f2db4e28db232e8e5a9e2ac28819787926f86ee40f84a4248937a2a99a3006e1d2264f490af6cb7ee2ce3f2397114ab814778b02b8c47b84858b8eff8179a06967cfa08930ce259a3aef8764f35d03e1521462871d49d2d427755e4adb0db21aad30059c88202d2965dd1c75ae93aab26ea796409bfca134ea94b6352199eb63e677c4fd1d71e7781c4ad53d9a41a471a2a9ba5aaab025a334102b32bf35f1a5dd19fb714ef43c5d366aeab24eaa6ef2fb9e279d68c7cfcbf4025d774506bf19755532c641ef51175234b7a0f788066b34a9f78806567e86a478e9ed1486ecad032428a3f731ae4af6c6e83dfac209edc8e83dc2c1083a48efd10d7ae0b0229612ba749092de17b1bcb0a0838a607a1bd2c2156a5ad0db10172da05ae86d48045a88bd419902183d00814b6f50b270e99d4646fba5f7bde72c68906be641185dbb36d7c8318c2e3a4aa1dd69bc1c46c43bd4b6a31e9cd17c78f7b6d3cd912885e6bf0af47cb62839dce1e9ab41fbe5cb97daf151db4eb046c9710691374729b4ab437ce4cd9bebf82a1017715f3ac87d89dacd8ffb7b11f7a70dd13d02834b0f71476de34771fd7eea1eaefd6a6daedbae0ed1de9fa27b50586977ea4e6bbe8b77dfe29722028cd5b911647be4022a3d4fddbd88b43eeb661da8fa3c753e8df53a85a93730dfde4e0d73aa6e316a41311de58aa93730779d9dc2eb861ef66bfa58b9e97bf86145601e53b35315e6b1be2ba6c2a6f0a2eaa2a163ea6b1a2faa6e1b3aa67253c86e2305254c90fbd2d9af5375ddd0311b1d4318ecafb1eb69f455e3b31af39e1753e302519fe7f9c58ab8cfb944dca91feaf3373fafafbfbeb4ed14869151c758e9a9c39c15193d4ca577a2295f30959ebe31348566d8369ac60ba642a13a0af706845cd343ccc75591d1538811d9349a9e6e7cce419e38c0d02f19464f344cdd696a510dfbae8e45b15ff1afab5fd587645f1b0b5d18167fd16a5551db0d52ed9d9631e95dc31c55059ac49537da9dc62491c5de231718ede2403d90d1138d39c34b088bfac92d34d482de972fb38295f6646adbbc9397032f2db5f9ed690e7eb123bb842b7a6a58222d6a5937399f1060ca514b26fa3dd9255469f90d040da5c6858b210891c218b00568344eef510bc268ca97ac315fbe7cd9c2446131d271851c48f98211bcc362d4c30a1960714528872b38d86234b4c4aad1588c8448610ca328049872c404085a1ecb13ab8689d28c560dd36a44fba2272c70c1149c78c3c8c81435a32946464bf43bd7656cb108c864e10a337883942f5f4c6b84a6c89d5c913b7194457810d678e7a819e3df673c15a364ccf51ead404bd754d70e5e46e81a324fe1b9b943e2f7343ef7e65ff527ffe4df2bf929df9ffca3fede7b94a71c7d8ad0c34e862fefe46fe05d73df4023c8474ac20a5dc3d559f6c2116ea0a78cb116ac7125d49d7608c6d7cb2e2e6d1a7687c8efe30e91f50726c51504a1779814bfd83a99b7cdd3fce3b11e4f7a3cf4f138f3f141ec90afce7c3cad19e7cc5b7572cedc311f4f0de7cc578fdf2d7afba1e377ec10d7f172fef51ead208bfbb24e067efebdf7880b178dc3a4397f43fd35f70d457d8f5620845e2d594ce91a26cdcbea665c9dd5d9f7b0acae233f1b50792a1de663fd3a3c55b1ef0ea195c8a9b78b087520eafbab6e54efd10a78d0ab13792b1fab147fce6375b2cfd4b6eb73b5cdf59e9ef27555eb167d7bfa1e76c196a6445022b0afb6cd5e17b479a00d6ef8d250960b175850d1d7a19cfada5b5bb7b1ba31d1f4d45d8c1dc1b48d8996d7ac4c1fe7c518914bdb4b8c88d5bb3a3deff259ede6877e4fbf1a90f5aff6339b6a40f3db3cc29fdbd436a40e8641cb419d83cec126747732777ec6a5ad06874bcc8e685e39505ae419d97787c455dfe6fc56f5e65e2fbf77712fa600ba97c490c03f6d9bfde42516c4c494279c30ea6592d4b647a92b6209a0d4352b77555d474c01f2ee148684e9c490f4b4f5aaba4ec0890896c3147022f2a4838a9a7a0fcf9feb4753135bc0e94a5ba77c555891d3950e52d2d6e9bc2c2c01a72bda3aa55785fdecac17acc214706aeb14e6aa88e02da6a9e5dd7511662baad2b2bad3ebaa2a6d73f3391898ade84acb5b7537c866ddfdc290f02d6d738b49ec872f351876fb60b6a2ded5d9f608065b5abe67754de7c5d80ffc6ba0f77887113975a4b40ed4f4504d4b6d57275620f720a2dedecd11fe079abf7d9a4e7a01b305da7b940234ba068732cf7bdfde9ed3366784c16f8d7224a6f7af42a805c5f4ee97defa9ee32d990732f7ab07ba5c8aa75485bd913a1e081a28e041a320065d7b8fb478a3295f387f980f10ff7dcbbe4922dc598318117ce83420f9ed2d836b745c0a2f5881f8f0114302cfa7ea6b14808166c3e9a801bdf3e755e3b4f7754270c753951b62465c4bed398c889dded571ec5e0a9c13027ebd34bf8b152ecddf21d6ab338684ffce98023a90f550d6f150eb40d61b3432eaa1ace1e973ef56dde9dd213eb4557d78970dcd41b6d31b86e47d730d64fdb95fa78b111940efea5cdaf64eb5edd4f456dd5c5b771811eb8f56f7edddfd08ff694dcccb8751200a679a6f220a6792f24dc85346cc37318d98a70eddcba20b9453d3981d927fda067bdb1f48fdd58d48288a7bd486e4e337d86f2b6ab811f5b67735e847bb53dae69ae1061b7ea3380dc87d3b6acba459a516f4a3dd7989f4e83d02e3044d57096344485776d842072b396001a40a0e556854ea943ba31f6ff870a3471b385e6ed8b05983871a355d76a4a1038d1c67d070c161c6cc161932b23d8a19022608ec876b8706b1481590790a47d6441a98bd8b08f7d36e8eb8e6bbe6af120ac91eb53b84d8cfdbfdd42fd68da8e31943426a4adb30f99e27eb911dfac58d619423d597aeb8a057ac2b0dbfc1decaddbaf3a177b5a2aee73d5a2346291fa3fcaa3aa5157dcf73a715bb94a7b4464dd25fd82b88118139fdabd5b17abde755d7369f0f53b7216d83bdf194eee52accad7a73e4ddfad3b6ebef9612eaf0ab6df1d77b184bf657e3e96298b6113546b34ae5a6eccb05c834a2a2982f03414fb40cc47b766407beabd7b13a9fd535c5542fb0d3c57cb0bb0aa3617599e4fa3aad112322e9af5abde7d1eaf03dcfda9e75883b5275733ef112439213690e3277a5d75de9c5a1884f174b2c62f637bd475384c14630bd47534ce935a2d6d82388c66d96c8b8f7880a97de0c2a2135a50f562a37c10b428d08be488814c630324107319fa0d9ee7437d8db10f7fb9eb1233bf43b964969dba929ae9406b23de2011b4deaa86d441dcf75562a37cd6b52b9495e6a1b2cc0d488e68be09781e0f39a620da2be7cf9f246cb53be665d537c0f5335e8b5d436d7510b7a5c615d0662db232a463dc4af2e8624a71f6b4154173928c1b048647bb40235da19f51708e5e1a919c880f6cea8b73d9f7bb55871857e1812e744dd4ebd0ef3917f95ca34bdcbfa003632bd6fdd8ab628b0e56f7edc95965a90fbd271b10764a61db2c9dffc582db5a0988e1a96f79542eff4766ab8bb05a79b59da06add21ce29ea7aa9113183169dbc809a83069db48166d70e9d4db0e3392451b2c63240b2f4c3292851b4cdaa6be7c3192451b4cda962cc9a045b6dd1d902704755c94dc9ccf65ae468eaff21fe6ee30a8c12d43c85021030643b8a31dc2bc43479d2d87dead474779bdcf114faf1df284c06a76d559e1b9ba15026956077e3e9e1c9b03ffc30e3a3934ecd1f0f3f1ecbc9cf839b3697dfbd1fb9dc763c44e533bafe687a56d3f7adbe968c4e371462f277e665bb6d5441a98bb6a9d6b94d9d69dd18b9f33cbaecc99f596a3e5959ff706d4130646a3c16ab624f9ab5e4b92a7752e49beaa70499244935d4460575a1051cf9e5a171d5fe5a6b8e8788e81bbc2a4f8cd5d69cb4d2986988d8c8c8c86180a34ee90772cd629bc78acecbdcda43331646d3bd7c541f61ee9e9922a4791c08e9f12f3e18819d97eda10377dc48eb82f5f602f46b59b9ff9f7f9a745e1767c57b7a2ea82f1b22ae41ce84e61553748448426c4afe5dd0a918fd8cf6b1785abbac50e41bf531811efcb17b724790afb81ed4e61471e3ff760e62bd67675e47bf8e443412cd93b3fbef8054a3773eb45c6a7cc8f217cbdda46d4bb3abb41f7de83d9d5598702ba0e8b6ccb08e38caefef592590b9d85f948c614c0178f7632ed9c8bedbee34e17ca5c4ca2be0511c40ee19eb70097b6e793e0d2fbfc00962713a3e6083ddf849edba5e7aad173d9e8204c9a7775874993c4a4193fadcfb5e65ad3fa56d30f2bf2aa0223ab6edd9dc2aa5a582790a901ad179803fad068a9644bc76f967e4870d1fccaca1ba834bf3a8d99a7f31456a4b27e13e4da3d0aec7d504caf462f3124f29416c575a56d2f7eb528ae9db6bd67551ab3c50bfd640d855f9daa6a5577755c53b4ba5edde2871cd46e7edeab3f0d08febdd280aaa276752bfcd32093aaf36905271614d3507675b6ea8be455b1aa515cf3e1d46e7ea8bf531a10fc906ba94120d6880439cb411948794bdea2b88859206670e97567f45ed3babcab9b456db1324bd6703376e44d2aba232ecd3b329aa264531a048a5bc48eb887fd44c824aa0837e496527e52a162e59dca22447d9eae06de631bb8e87829332323435393e1b89c195c7abd34181177d494b65d4d6db0273c9515685ebeaa54269319f6332fad3349d6b94cb2b40da7a7b651e7ee79570d909d218c3c40891326dc1457c56de1b8703cc811b1cbca554d1dd772699be72ff58da6573e5ece0c2ec1ded30a3be2dab0a5df29eaae6e4fec679efa62547d3ff43174fb228ca31ce60635c395e6a0f7e50d3672e7ea3421ea43b38586b276df15e2b40d5efef4d476491b444204e34f13113b129f16335479589153c34f2ebd3fe6a64ee7f5b01ff8d83d98d7530b7a4d490dc63f22e29462f6bb1c43eac30f33e2fa622a2f78d78e83d861cdc9207bfb86708c04ba40b6caa89779d68b2c9ebacd18f35976ef41989fd841ee8bc37c7a9c6e36f31e753bfa9051e977a9e58b15993bcc67e619e0ae39fc115b7a4baa39bc1227c4ae909ac3ef8f6a4715d3d57779a8cda979754a2de959c7c37945ea35ae29ead45d59ddb2f738ed7118891539c4a207ac720d0bcbc78fe9e3f4f5a8ae2b18982f46046e712506b0ca10a6f4bba4c8a0c8a08e988c86df380b67e1d279b4c333172e311a5c725db884f1199c069b4184fba7f0aaa9904935a49af7a89beb1e37824b301646846b6e825c538f025b3e28c66951602e5fa48706b44ceaf121d7b10d67832c9211b73c9e1fa7d1cbe3612e78bc87b64dad422a2fa747f591ff51390cce818ff5469ec3e02c5d64106ed1b00672c1a52fb8e4b27009e3ef067970a5218cc19d0db26db9347c8515891a10cc875cbf03c50fb9a6a8a3c7c35c50f4baae1ed575cdb709abf4f85643bd1cf98dc403ab58b0cae35152a36d73d664ef0d56d96a489d854b423c380c2ee9383c1f7189e6f04c0697701c1e4ee11205a37c1c617a68373fb07b1c760f6d6ba27f1ff5b9c124f81ff5bdc139908bbe4e55368349f03595b730890c2e1e0f67793990b9a0fa1a9c52838c7a0dac02b1e0925090fbd2371f9a5d0f0fad6cc1a51c878757a2171803e699e2058ecd2165ec08751b6d3b4edd71a5a9dfd8681b64128c751b62363b0e0fb123315eb1f2b8acf0c76d7ebcd628b36f8e7a8b5e1a9e2e5624eb51dfa354e46df3b8c11e3db4cd46bbb1f9b5abc771342a8b8d366794a09896f7f18d3a6a481d9981861a5ea837a86071a58b2c647049630d2eb5c125ee295e44792a0b97e46119661c75fc8ed3ea92daa6f50e6a5d3c88a078a06d344c828f1ac5c327a341b6515f34fc96491f9bf3a8dc3eeaae906dc76bbe1892a278784aed780f9761c6173d2f1e4450dfa16d515cdf9c56170f22626e5e738721a17e736a23af9859970dcc0a7e74d428bc1e96430b726e86ba64759da3bacc8ac58ac47484c18a641de4bcf43bc875e978ea6c70e490b1e14bda54d734558eea669ebc6cb61e97a737454eb43cddb8df1b5a9e698e8b0711d46fb4edc55c39627d5fbef44de5277ab1226cb43db45d1d1b6d8bc7790fe3c09050e7515db3103a6eae6b4ee575535ddb103140472dc8001d1d431828dc5164c7efa83a9ea3d23c561c97ab53f32caea92fb85473788a07541699eba83b4e53731c478d9fa9100b26c15315c6d4cd75cce9bcdce0e14586678d86dfaa8eda4dcc61c78e771bbfd38bc968b00a17d9b65d36580543f22effb023ef52cb172efa11f12eb347719dbde7d585c92eceb25dbdc12a35bdc12a0d5f5521aab7edd245c32b793c4a36c73d7e9b5b46bd880770e91dde889dc7a38473dce1e171b8b44742a8a297d2b675638bd4b6f5d2eedb466ddb35da7d7b6f350d2ba35e1c6e20101850792cc2869548bc9b73ce39b13b29a2dd46efa408fa206b6a517834cd37787a6a511a082184b9ccadbb63ae6ec3d4ad88c6e435b904f44ee5384ddd8a689ae738adf99c595653f3aef97652d77c2361ee4beb38a5dab3eaeb39596adb5dddd5d921f4d8a10ed4367a9a22be34bd35c4d2a2f0a0151ee65885873039be3b046a5178b4751d5f0cc9eca0782840f4390e440f616075980ae6f0931e56f430540bb2342c53f0388f8a478563c767765c66c767765ca6a66e45f406732745748eefa839be1df3ddd5d1a16d39347898c31c479d2fc77da6cad49a97e39e55f798ba15d130a7365407993cccb7d930cbb39b037379cdea7a1f0fd1947dc31753752954286d6adb3c0c3d633e54fb9187973f54c3ef9cdb3018cff57dc4e4af3ac50ba0770bded2a2b8c98b775a690e32eb8ede65f4fc87fdcc536db3b46d62a9fe302c453b262fe029ac373fb0e167c32e230a6d9411052a5136b09dfa09d5a75eac087c90830db59b23f3f05323228a6b4abbf9991def84ea288fb0c89d62113c3d77a2e64c14747bdd8ab8a50105ed3786dfa6a4bc139d4cefb082e06d937bf8bd77284ea6a741115f69bb391b6b417b9edb8b6809a4f75cb1bc472a3c4c4f9be21d0a08df3bdcb7f0b9432d7b397b28769f56e3b37f45efe422d4a2e60ef3c14237b3b1285f1ba9e58370c9b5acbee1e4e0d997e3e31bd6f27179dc9597038f7379b8436e2eb5ad88de9cecb44c10129780e6a1cc83e2372686f4d082f64b6381f9262f732a6b8f1e3d7af4e821a30161d20c32f81d5f8cc42418e47a576793dacb91b9ccd4b47999cbcfd95a8fc7cbbc87dd951c39ee43db668ef3d0b66cb7b44bda76748e57dab60372c97ae5ce259bcb93b8645d9ece1a243b9380b45c80eb19a4a50c8adfe6a3bcc612f3edea311504d9c6e3f30ff329220a67ba7e49212afa42042c90410d6d70c3175376284ea64c8302fba56941b1e7f5d0b0c49c0796ec37154b55b7225ae6582d722629fbc504a351e1618ad1a688f915f36bbe1c18a311592d70011828c8820849b862da97030fc575ec50c41ce650605af672e0b34301a3d5bc1c78eceee8f1649a337a39f0d83cbab47d394731dabe9cada67de66d1e311f1b1b1e950d8f295ed45cca12157d984f5555ba83ccfa0e932046c4fad48260123c0523b35e73e9da193d1e252f079ec7b7597dcb7a73465b4d6fce485e893c0f6d9bbd6d974adb2e52e3cc8b9a4f6dabe96dbbf804415d0e939acbac474c022713fd623e16d520e7c877e99d1f3603c252b463f2223eab52b2c72cd16fa81f5094d75840907d5b5245645af657e7bbac5b13462de7176bc09a322927a3a32b55a84c79c20923131427d3be9cd95103c224204c825f8cd2823009dea7d27e854bee7cf4bee56dcce53d46a3e1f9cae422fb82b3347c978677ed64906deee8883f67963d9edd9cade60ef3797f8e1f0c0d8e0d6a9b93aba7a32eebbb514ef6301f79cbaaaaba9dda0aa2baa2dad236c7b24891fcfcab5435b752b116692943155e7638dec33462354eaeb65e55a7e694724e398b5a3e5705f5aafa621a751c753b358e571589a3c20999937254fabdc27ca6b68e0a27e49ddaaaaadb29967f557e33c67c1e13ae8ae7b01faaa9a96da72a98f482a8966ea1db0743731c3beaf686d751b7211a3e47158abdb9a386a7a943ae7dde71d49bf7c73345762862b2188a1d8a0bbbae6753c01c0a0c06c39e1dbee6f14c3173286066b2c3c43cd3a6a8314111a34d314d50142d1a5cb8018a33d480c21bbc3041e145f5ec31cf0e73f803e1d29621052a5b8614a834e9f1ac097e874bd4f643c321e62719db9ab1395b4d4f8db32999185f78023eabfb72e663ea7c39f33041f43cb6d3f357dd97b3917a9ed6bf9cf9aaeeabfb642e26551a9db5fa66f37433c8a429b34c824caa6ee4046b70e9a6fa7cb50db9b44761b8d1f3cba5a9b96c1e1919f9549acb602f36352327588349db3d4cb9ccb57c7c15b9932b92272a7e4a1849d8a971277129053c683e4e102e31cd561a2e25b1b4596b6782d8ab450a1840e064e237f10ec5d3a4308089cfdabe9c7d11bb1f4e006e0519d318b745c6ef61cf35c835913b3936400c5b5dfa9d679559854b307f9f587029e6efd3cadca26e07b2adca82c35703692cf6b34acc1041182ca4071174c14178e73a382e52ddb885f8ee909ddee174063b12d34208f19dde3221dec3313bc4877ea738e8777ae3a68e033b22c4376e1df8bce9409dab0eda768ae9c7a7e62ac477a848645a88531c18126efa8c9e4fb5a0ccf5f605c4ebbc8767b005c4d37fe7428408113223040000102244c885f4d0430f3d3ceb210001e8a1871e60302439ddc3cecece0ecc0ed541076ae7d45d3b3b3b67c68cc4eb9c5a3ce4413e2448902041ac20431080872178087202040912244810ede68890ef5c88c65eaa2c43f05cc76dd111e2540fdf790f3b0ff24d088a11916921dc8ecd8d0f3ce8f8a0b3731e767676762a0f3b973bdacd9121e7e143cec3c63cdce0084047003c5c87071e78e0a1eac4a3a8dd1c09e23a0fe23aa741aa10ec20c7e9f1c30f3b54ae0107f09d0fe03ba73b55e741eaecf7f001440e0f409c6bce75a8ae77e041476787baad83ce83d4edcf2a4254d27b1ea96e0f19400da2f254598e904adf7969479b55809855a81a94b15ce33fc835a0951a94b978c4a51dfe2e001fe291172e05091224c883f4701000002088172e6d902039e490430edfdc961c680e0108400e39e49083e6b630e9fd94071e98873b1e28a53cb0ce2976e15037d7389c52792d465197a5c375b04c14957348310fa7d4c5030fef618821c9691ebe9891784aa917a17e6aae1bd106adf43bad371c802a04db076825a759bb39a2f31daef31d346885493a7fa73a3a3a671d1d1cf643cf3a9cf90038d5a8b6f10eef41c80edac6bdc3774eeb369b0afde870ea3fd775f87289d236a11feada7f7238751d2e1dae036b3a9cd2b61c7600c0b9f6701deaf68ece85e8e8e850b777d0d101401582ada3dd1c09721e1e44632f4c7ae7e155162ef1f0f71e722e049b877a263d7a25945022630d873f1c72aa106c6a13747d7b8356d8cb6d8232d6ae6fef77e140b3ebd00ab4c25efa9ddbe002607f672f6ecb0b72c38fe704c205983782a87a9111269908582fa231c99c3a8c024df0387c13d679dc610fe071a811d92c6684751eef616a55c6224044649ab9cc197b009b644e1f4681266e0edf84cc6ffeb007dc1c6a8b1921f31b2dd26899269dba8b2ba50ea380bc8f57b509f9ea3495489ee63295485ee63adec33e2a51751c8795481e9e7a87e770d7329508528088e6d689aaf3f86a4432b770d4268888accb1cc8d9c4a3364144046fbde66baa2a518f13fd44f53f4e539bf89ba86fe2c7898a9ac0398eeb38118f13ed38518ecb6844529ee60e3342e6361ad1c954fda6123953a571a580e4d3684dc87ce68b2191694ae37b3506ea8289a1d57595c509f15e3f2daa6871458a2e52b8a09b645b95a5dfb759a5df37b946bf5759b4d0e15c9f58cdd7a1fe58cd5ab0d1322dd394c25c8b51c0e633874dd85c1e06a300cd8c4624afe3bb43602e4a0122781f2792c7f1c51e40734b23b23934e1a84dc0d3dc476d82e636d7519b2082b73955b7535fd8036caee31766043c8dd68475791e95c8bad48a9aa8b98f5ba7950236d7a135015f9d2e6604d4a4d01cbed28aac22cb2473d27787b0260fb522cb04bf91bec5c834e933b5ba4cb5acea4ca4c58ad06b1190d188e02d2d0a792f280dc8095f87dd213b68db4eeba03de153cf41dbe8b7182a85e6331a913335014423ba399175a2191ce8b5c32a85e63e5e538978bce694eb0d5394469d29ea86b57ac31445511a162af23e34226722baf6cac789aa46e5a66b4555751d27faa151b9c987568473f81e5a114e55bdba0e4a3f53a9dc3473ab52b9c9ba4c2d92b98edf54adc8ba0ecb9ad18a64342a37595a1433b70e4f53894e261b2d0a49cfdf76261e55461ed2bca612edd08aa4bc8e1315e1b80e8dca4d32cfa151b989462bc2a151b9496a51cc68520c60929f8732dabe1c2e4d7fbad2731e4600ca351e8f14eb50a322352fe84fa657b1091e1665d30489e0a3c84c90893dd26ef8d9a3b8293bfdb64453ed86b35fdf94f435ad3821aebfcf2a8f673e603ed388b04f06ac69ee8b81774dab6b1848d1f81b8ad51b3aeb0d9d13abce14ab5f5494bfa1d66fa85684055f5753bba12094300ac1593c664edc3108a375c82f900da64b0ab28d39fc850597b2c35f56b8c487d7160d4f1d93207c07b20dcb7273be54c0cc2957d1c516ade3521e3bc490e8381f620a98f90de59d9e3bc4071a1f9ac69d8e181296e7197c78d6e2a27a6c05b39d9a00538e4c0fc78c4c1603835d3adce290dacd0f8ea18e9a01c2f0858be9d5ed05c2af28f6f882d2cdb2b93acb450d27e6f3b0220cdd56301b51cf74906bd636273d065d201bbcd2ef369b61356e799c95978304337a8fb6b4b15d7a8f8e0086e6357608bd3b8d7f567abb7baccfc8cae3e12f6c8eabaef01a0e0b9628a4e3420f988fb910cc85b00bbd0b3da03a5f08c785662e042ff400ea374558273a99645e64cade8035edb81144d4e325ad42f045f0f86245d4bc8765acc02a3745c8bcc884a30a054540fe7a03d664dd08a20af26d6ea335419dbf261e6ed4685eda7d862f6404a5bd3558bb296207346af70c5289a93734e7179960aad0cc711cab4130c7aea30ac1d3d35785de8bc8be581131efe11c5dda5da6a2d1ee34b5882b44271317ed8ea31a41341f2f3f5383222035f6f272dcf90d5813f55783642ea3355165473159da1da636604d467cd1d69676bfb8d01a2414819b08c85bb7d654bd884aa3d2ee0d5893515003d6242f64c4d4d88d1b11355ea308aa4abbf3b3d2ee27930d052373597a735fb4fbc66b64793cf1ee7c146313fcc5cb718fda4d04b8c42d595e8e337a3c544cec065b59135761a397e3b63c1ebebbe3f278a43b7a39ee52bb89803c9fb526e2a5e6babc1cf735adc9a70887c6cb618033b92d2fc7117911013706309060647a429ea8684718b260643232a23149ed89bb2c8f276a370c70a69b083c6aee6ce5f1c094e1042454f9e2f1cc70d1420da32c476ecbe35934ba3c1eab0d37a8c10c2393bb5bc379716e183d9ead72e531178fe735e10c2790616472e72f1e8f104ad0c191c99db33c9e35a101b58db93c6de32dedf8a84d10325fb40556c0088208b630c3ca941604408b0fba70c50ebd5a7c408496bd5ab21c49d1031f5c61052cb0b2052ebef0410c3124019641852a3990e92d630a5fca98421b2470ee391787608de37e877508f67b87fdd83931e8728923a4765655cf0ba29ada4e8f1946c86e213b5e07cff53d7e5c4f4e0d2671d48228a8c1e7f6c1bcb7c3389e61041fff3ee56fe6a4de7befbdf7de7bef93923b0feee6b0d3806081f0fde1bc223eb9f7aed005b2b92a1d4f21752a0129748145bf574b1a68f415a6f44eaf162b3ca1d3d8d2c5a8afc6d182852e4dead582852c8d052f4d7b6217ac409e46652e1827840f2724fefb0bdb21d88e5358729cc2d4cd35cc3563048e659e98cbc16047ac86d731ac88cd05f7dabeeed4e012bcac37f0db17e603b53329521ac4e3314265b22ccb642a10b63759262333b31b0de7543821b24f2099633d90e0681b37f61edac62da3464f389fcd6758764a636f509ba139111531d1726e4d48e765a602652f6a58b7f7f31ac729cd67e46736b7466f438cf96cae71684032cf36eeecf243dc33dfa0b639359ae6f0db8c0624b3cdf00401351a9967977526889ae32002d3a4066b36b51bccc8e39187daf6230f91c8cf7cde517142c0cf2cab148c6c9ee69b53a3676e5333ac08cea106049f3d066766f3b1f580c18ac8034d9c63724e1f3d248ec5583495c16464646464b04c93a1f94d9db90e9bba0d83783c3a8c3c1e1d5a76083119886532c7a870426caee1065b6e17b5a13ac83627d7cce7d0eb4c0392879f7976ea1623027e2633e2e1f8eebcc388c8e06534790c6a37329f39cd9d118e531a3ccde6e4eaec35df60cf0cbd9edf865e67a7beb92a7ae61656641e28d3b0571892abe78dc89e699b930b36cd713ca6eee66c43afab689aa96dd8cccc27e63343656c99badd321f68f910b4fc4f6c095be687363c90edeaeb8e0a2784ebeb30d5b5ab82af43e621bd9cf8eb7ac47c2ecd654e8d5e8c66874bf053c7297c909d1cb39298149d89a66e1f49610b9dde2328b4e17a7db22de30a5df41e452106adf596718530da881d021f3f8185315dd74247c54d31419604135c82793c85a9db4670c9080b2871b204972e20a77956b7536797984f76fa34ba836cce9fdac1d35ce633a719199aeb590512afeb7a0fe7a86b32e2f1ec64b172032d2a00c3096d98e2affac78d7d6246c45cc717dba13d20e6440e0c5f98725c47bd018017131100bc98b29713cf25c89e414b83d9941d2394600c6d19f178166a30a3c7a16d3347ddcd5926cd7c3122a89e790f67558dde86b8699e5da6c6603e32746a3746b6e78b6ccf3a53b7ab674e5337d7349f95ee203b82021b4df9a2a938be183c35ac43af71688e0a2724bbac9baba2b3cfd48d0999ea9e557e8cbbd20fa6211198866e196683d250735656e7bd016c7aef793075b1ba7d4d7155ca48c30d6dd5aa6e4d54612f0de761b00efad193e8610d60d3be9c4d010ddff3a8cd6dd1efb23a612f0d0fcfa575557a7138cd227e45ee24a94a05d70b83a2b8bb2abef44f4c3b0d47d64edb8672485c627e1789494cdabbaf53c1dbb2078449bc397cde2d6b7eda56d31cbf2da1ac3407d9cd911ffd1e35a0f7f7f6f6f6b49b9fb7fbdb693bcddf9e46d23e1bf681c82d90e00a62e8c7437042ac13a243ef35575a4772daa6b5bb7c8d4d36d3fbddacdeb3e35997f3e0e3d7b9eb62d221ccd210ba7665a4c1a5dd396bca175391392ff8600523f0410e8460062f267ecbbb8949cdad0e69e36c08108a216416a9a3376cc0061498810b2f3b53aa335000238c71bbbc710433ac21096754f1829034f8e032438c9626304919a11936785bc48aa2cc5841531445c1aaa2283348d0144551d5335ad59a8a5aca0c294dc134455534941419af5e31be78e9d83b861197deb253700d0000000060ae480119a040032f286802008840852350f105256421c21274a6a00517442e51946199000b350d6b7082c438abdaae86f0080d1b5a15c461128410424869975a4d8d16212861cad6d4f47bef3435b2570b9535e41aeda6a0e4186a68c11442358293089840042fae68a1832aac089284176049c0c1088e9280054c144980820793f2c11b9594636481a2a5a42635860fd2209d4043185cd63b860fb86412aab16383238421c61abe5803083d18210d5cbc232478c982a6f708096934ed1d038b2c1e4fc049187c808537be58d18223f0b0850d29b0dea32d58e8d95b842594218a2c2e45852825c648452a0a504a4cefd1162d4f05d9d218210953d23072c20a43c8d94284b9e58a29ab842dae68c1862948798316485b8010b798c00a9e1bb0a00837d8f2e50c24d8a1e5b3365aca9652ca08175ebd63d4c0081996bb1c4cc114a56a4da5a1be2e7b3c3b838e46f134fc1de2e4a4808c316eb9d2310a538c5146cc04508a96183ca1650652329a317c70b4e58aa32d52b4148194da7ba4a50b2d7bc550031baa58610a2374410552fce81d030c2e4d7bc978c38d22db6e77b79f0e46b0020d2f4ec8194578811854b44c610a0ebd475a7ad058ef91161a640f7e4e18812bbbe429cabce0db3c9e4cda2963e40458cccd989d17f4b9df3cad73e87d1008609ed985a60b976da7f7c8086bf49a365297a332ace86d889ac7aee78432464e5085ba6586592efcc58be171bbfc34ec484c14d8500b72fb56679d40e161dd2dad2d5c1d1b27459603c31d12cf8f3b648c27baac1b8233923293494198b4a45e1a26dd50df32da8045c7df501a116eeaf2410c51a5f7490c31cf3bda23804b3b460fa8f47ef7db9e91f5164429ebdd168dc733051a5d990253c58b1da30747cd0693b665359245ac46b26063874b408c6861069376490f6a4098b4c7c2ffe3612dc36192943172822b4cdac6d15bd6cb251cce88df3301e52863e4043c681cbd476490a12f2e6947dc1bda694e0c9991753a704298020d2d5484412184104208bf77f11d522b4a6a87507287c8b84322dc21f0ed90c73b8457477eefdef380e4633c9453c74b37eb64521832cb626b1e081e568e3a6d038240f06fce0a241d06bf18bc98247340170818b22dcb681e4e063f1fd45e36c50bc77fbf009ddf3a296d9b4dedddf9d6deed81dccabaa777da466109be6521dcae73ee52dba54eed6aa7eaf6deec9ad46de44f1d889a4c5114e5aa9b52dbe0c657e5e609e86ee9c143d6f8ef95207c2c04f337e6ca9369cba7e71e15943ac7fc1e8471abac1b101f5723833069475a806808a79d00911993e416042908cec2d5b6f7e8240829b5e9b38f35c6203a6e3f0d903d8c57d2ef5b379ade3a147be946985d9d6cf751fed04e3a2fbc587d8b3146f8de36e41cdc5d9d6755cfeaccc3ba2d193d8708826a1b908ea1fe2cf9f8304064574dc634ca8f8672bafe7efd69433fef97f64eb5f728a5f4bd4721b428f8207c94c24729848f5208a11613f32a4a29a53131300642184329a594c65431ef3131f32420d44d2e2d0e93e6634eddaaf0baaeeba2af0e298510520821a510424aa966dd0aa22d4ae97b402c58410861f51e0d932c08218410d230c99a32c2c71223f2be759bbef7de7befbdeabdf7deabde7befbdaa7aefbdf7aaaacae276b565fd3fac8ef52a4a29a5d47a31568d552fb7b0d2264c05abdaf3b2ba395932fa7de24c4a614e55981f82347598ba05d1d429bbf7de7bef8210520a21a510420869051f0cc4e2252965cdaa9a1645e5153108f362387332d7c260570c4c8fd5a11e251048bda9d322d863fe6a0cd4ae8bbef7b00f1d629694ba4bd26f104248f7a89ff668fabd8aa91b907e30da57e71d42082d0b42cb8270abaaaab220c4eae604880f3cd4cea4f79e5b23db2f93ce24eabdf7f8c12829b713665767c369ea50dbb286b47aaffaf6de7b5555bd577d7befbdaaaaaa8a6adbb56e31f85e555555555555555555555555555555555555555555555555555505610dac54a32b7737c2127cfcbe7c61211848c8f57bafe759efd5e5bc90eda9cd4910fdfe2898de9ec3f87a145ab1dade06e13bfc3b10d49c17b2a7c5a56036267ae16a737bff9c29c67120095d9842a6f7880c28fc40072ff8620a6e9ce10c5de0e063660ca32aa011b860022c669cb06668c3132dc841185570e30d0d870dbe9842c51b45b8e282ca001ab904392c2849fcb18a589d7787398dc8fe6ddd20117e6cfad402228b858edaa19c1afed50dba861a0298c48e19663b750f93f8d60f32feb647cdef7924c0a2ddf79c8053c320f1af6ef07da1b611dd1059d83d0c97b45003dabf755f2e2f8b9c5060c00518fcc08920e0c0e84570e235f59a294d51949473cecb29b3a331d4a04400e1101ad6d4f41a410d338c11863705ea483f70e95d561a26fd50850f9ed00428c27002147e4093acc96a7cf40fde7bef59967ea7a9793c9a124650822d48c105389881e95d0b09a6f496b523b5bb7b102ec17655dae06120ed9e9331634f73d90e16b2d92bc615be983b6f084f50a1853450a1cb0bd430851e271984a1822e27b8420766c8c224715ab6c183965ada3883045ada18425fbd5adae08204730ba237520ef37947522e2c3ca498a2a57c8d9472468abafb8cd43c4951850b5ea638eaa2075d30519f5cba69ead9164d3545e5a8298a92914a9086101ae10a52343c4d0ddcd16b042b78911253431b34e0411856e082126cc840010e32baa0810ea498a10468c8e2ca0fd8e0510431c814410539788317aea0851bb40105366a8aa045a6086864a1230b152e4e18cd800b48d851842c3146b082172d72e83d2a82093a476f192f40c30ee8fac0143be79ca3de9573ce695b75ea3f6656e3b40d486fe97dab4e9d56b53a5787d9d378abc964a56d53a378b2f7365feda2b665fdb4ad86076e8efb5b2e3d1e6862d80c5940e366ccbbcb1a671b1f7eff08e1a506f91ba4b04ed8f0af81e021935e6ff00b7bb724c4471e4fe67a9d69570821d743dc95db6147f6cb976638242e9c0f66af0831bd5a7cf085185abae6680c252c93b609756728a775c164333497ab45d6082f78a36b98b4bbce4591e9e80d521c4c2e6db3d939c74f0710208430ca1d5c288aa266a5c30bf4b22ccba297d57b24861b602e0cc3309818d97b3486143257966599cccc4caf162b8c4073e1c08103074d8e31acd871e9d0a143c78e9ad5e20334d85c3c78f0e0617323a3821e170ee653060e16041b07f309725f9ac7eaf0715c0f77ea6331a8d1b85ab33afcad2e8a2c47d3f0d821dbfcacea3d1aa38bae79d535fd71b9abf7680c30ba66a9554d4a46f8d8ed95e34a462d8c6e48021270f0842eace1044d0ea6153fa8028bc5826a045262b4c2a8234c472999962ada90b2a3570b1566348e5e2d556481d292a58107527cf46aa1b2a5b9570b952ee0c061740615476ca8128528664e2388c110bab0851658c1451b5658500c311fcf090c3568e18a1bccd0e28a314c32dd00ea9ae74646464f988a9e3006319c90861a528882c9b92a94d0c20b48b0021182a0c50f62b464e1824a4caf162bba34ecd532822c19b5508c2b3145ac610b21bc518233a664013386ec0d2f38cde00a2f54e0c618dc10c51726ace3b324348f23353ac6484d299dfb642208465764e1031480e10ba6abe5d11111faeae20a0980e83d3aa2a275f41e11a18d2cea802ed3e5dd32af4c4b0d93a073518d07996b20bbc75706638c700c14454d8aaaaa8aaaa8f7f0a4bef40c8ae275fc85a228aaaa26c5d4e1a4e629334fa6b6b00ec24318635debe8e218771d740e4208a19471a1bb322cec2245d15497312902a9cc886fb094ce313ba7d5640ebec80b6754038410c2f82d83198450c618218410c62865841042762e3ac8c63ab91b652cc0a4f9edd5331a2ec5cbd77029c6c3f8f81e96ef40b8f4d66570b779dd1799bd1cf99614b58bcd49edddb27beb647594fb0ee58239e77492bf39ed8663a5e138e7e6acaa39e79c9655cd396755553b8fa92b1c479fcbb9efa59ca4769a1064e7a4748eb9e6e544524708d9c18711619e5726dd9d2ce38de6814b1b4743c0a223c6ef3d2fbcce39361cefae3b3936da39e798dd7bccceb173bcbbfb3477bee375ceed193535f12be592113521082174ef8d5933ca48166f3c6629930493e6dfabeffb7bef31333b68248b372684efbdc70c21337c14331f4a265032c62825e53397e2d212fe4579966e4a29638c91a8aaaa5755a56d2749119131ba8179bbb0a3ef9acb987b22c8b20cc2cb2f437896980f8c996466286bf020333492451b6d6c30c61da2dffb7b10b683efc1f72033f39352db588720bff7385681bee55294176c38adb4ab42ae638c7b3425060ddf701193a7ae58a96f164f5579eafc9552cbb4ebc1070f21e513a38fe408618430bef71e455143f141085f74d40ae41b4af995324630691ebeface88f950b0c6662f9fd1d008633c471f297d28a919c9e20d2359b471e5cb172359b401b386b16eb0a394da3e4a12d9289dd4723484290da4f748085d7a4bf33b706377b0468cacbe980f166a43c1c86e7ee0b778eaef571c56691793e48d64d1c68473ce6f94a1ce173a35f5884d26513792c51b46b27803f3a1887a93984f4519c9e28da654dd983aa5b591134c798379e6cb91df3692851b55d0c89aae4fb6638061d47b14c61abdd5b47c4d6f1939e8d2464e308549db44b0a9a580a8a409970974811ee49c524a99211a6d0212331540304020148b85e3115114551f14000fa3b450541ccba32487619052c818640c21860018009911991935014643e6a0578b5fe1eaa22c29ca6a1e4c05244547a6896571ea39173d76efbb84e69937ba717f32efd435b9fc7fbac5f957ce3205cb0c047c055531ac0616b834501a676fb974bcc4cb2419426673146eec6e12121afdf994416911bb088971c5626f82f1281ef52988b9dc1c74427c9ae78e7d5880ba3cf1f98a58fab97a497a0eb7f67e0a851a2671068290030b14667721671d57f173074ceb0b5d8c809650deb6413746d68c5a3063eba1ac375e6fa65d4281b690923f15c982dea4f280c6ce8bb7a26bd32a7934b98e52d96b15db6ed23427748b0185f342b0f6f0bcbfb3e9670990c8c2932e19e8e9ceee4df55ab91ce0d6cf8c106468cbec72b5be9fb41609cff1c8b4bbc8ab73b5037d684e519ef9769736f2712482897cb4e806190a43c347b9e2ef00bf8a2076ef98d028423ec4cb405f9fd10f05427f9dbd0cb93924a69d3eb429d45a80052f7065cf7f16b89e9fdde40ac6e28a925b53aaa78002b3e3f01c9d8be8fd3d18c7e07eb0624594ba5b33f733b7991dbadc9e2ac8b444349c16c1439f7f7a1023b7a3595b368a8314ba16e418a154ea654011d6777d63d9b155e82da288ba0f8e7fbbd49b5aa7a80806d32b3309b04ee7c85845a071c78820842dbd6e55d7152f2f1270174d23a964631eeecc13be7b0d2cc7086f22481d129c1cd649c938585a9661a48db22e186fbc5fa85c0121f56b0fb05a7b6208cb761f71f65a1e4769ac2a00d19134ee8d8925c5b181be0bb48cb7259071cd8a8b9e4a90a408ac8efa5294b2efb5102812fdb512073f90771d4ece550f3887515eee6da43e75f7827ecf7de287e154d2284471eb45fbac60ef4ac87defa836e1c90080fb8dc32b473dd7822d78c9df6eb70e30cd548bbbb8456a3e767aae3f06cc29b3d4446851cf555002396411e2dbbeebc360ceec0c9a61c25f2fa2149c110cec3dc371260a64149bc2582330de12ab627af2bed1bf45870dd57f2e28559239f16107f0614f79697a50f55b5afd3f297b601b66376e0ebada4ef0244808a11c538e986f0be5f8cfa0e88c2a4722643229e34c514494a6df6b134afbe97f52cee88807034b6a0c07ed6657c19bc6987372037291f23f010619064e610f3aebd4d0f0a913576b82a71f4f6ca782c8753ec4e97b91cc50f49f986587937c2495e41b5102b44c93c1c8b74ebfa336866648e378a3a0370680bb1335cde9ed6d61ed981251cd256961873e6a99b3b5092d80595d57f31d380e09bf184fcdb2224e7068037d0bc3696df87d9cab19638234e31f3e117a208044209d1957c0f1e6d915ea07ea81599d3124a7aca4969c639c13f1064e57fabe937098009346de0c8cea899506ea7b04a06d11d53707b2bd4e4b7902154c8b430c638d6fc181944a9adb38ceefe2f8d12d9744c6ee7f9399d311b7c9dfe58ea08280be91eba5b79f148f524af971c0b7d9e244ae537329021919caae043901716fe223ccd22e99ed9d84c63d3794f5de0053249c6c434692a89b971cadbb5f036241c3dedf0644d38d02f6e38dfb9b5767d00128a6811e08be9875114fdb6e599895da673dd442b977beb8675309bed06d7c463dfa2669aaa38e4225afa497b27853a9aad920a292aaa86d0a7046420929bb71dfda037587b5862d063e624d301f4df4d22b5c9c1c304069a84a1b967316c33b271f59195f6e44935919286e1a947f2827104e721209f0ec0ad7ef12fac3012b77cda31ccf131d8a5626d0fecc5ef45d3ce6cfc7d22699a6331efb7fc3fb904d956d410059c2e74c4523f6779a1a09710309e5d80bbafc8a8aca6c455b4a91efc2a781bb0b4121b1e7ac1d086f3771b5e3b870de739294f684beea7a62099316b803223e57b97dd2c34910a90f71df8ab9bccc91e7375dc389de1e49b2834244c70f89fbc15b65d49d29a208fe13a595d3eef5ea161153cd2b37ea4e5845a1ae1c5abf3b5b7b2eb755e04aa4380c22e10ea1a1188d08d50bd116e0c7573880079399516d7a6468f8cc495dda8ea9d0844f77c168e5f04a18f4efd1c8d9bd7f41346d56107676cc5d433b4888278f384fdb9368e47310885e41df2108057a90c570f631fd4021bf5e48c255640901a733a99ecb4a51460ed42f2503fab47717490337981796f40fe5113bba7992a27ebda09a60b38c738a37009ea60b5086340013997f53e3831621787456c26ba219942d068d23b2b7e5746333df3b7af1a51becdaa97853dfe73bbee7c478bb59af077503c594409ca393bdbb12962876a1b97e794297a4cdaf7da99ee2c5f4ac6a70a9204606bd766c2e89be147df5508e839726112c88ff496f965311284d512808a4956629f957d145d112c2fe9f6548cca79cd70109bf63850eeae4d5d52662c35b735e6b2c026ae735aaf99301b56a4fc97f52b0801d6d99ea0f35b85058bde183ebceae93e2ba9c9034651ef4284e3d2145a51ca7e8ddc13c6ffb8548ec568a345d07f00e187568ee02cd0509e982dc594ec764ccad4fe4ac1a371bcda79a5e8b50d0a5cdee94d396d87a6c920e8f260876fcbf3bf200218bd16f9dd2299f0b8fd1f27ef3f19448c1a883a0ecb6e8c16e9e3874d90ac92377a9e0be3c658cfc5ded1e00f4b4e89b7a316fb7167c36521a112a59344443c4c10356833824ca9085186766d775c093854a42a1b0874c322f71dde4d54eb956bae4695e8bc5a9fa3fd18a4bbb7839a980db1b500fb6d0f623958ddbf425ee7d0d69310665e91e5e1c8ba532977fef586334afcfbda06ab814fde57f58f6430a211c32d8db0cca47c173800fbcb2cb87b1ffd366cf08084e202c8fc0629ff3978497786a7b97c008af026ae4dc1154b5da2ebde3e4598ccc85201ac1fabceea294bd007f3d506446ab0fa867f1bb58f00cd2326c8100ea790fe8a89f533cb6af4bcecae70a47fc8400432b87c8355ab35b358271beda1032d1aad4778f4cb71481eb0876335b3830be7175f755ff48b696558b1c671cfeb522f1139d3a40092361b0c5cee5267dbe59c7bb988dd0b73f14e21647dc35812d170d850f403aacb38ba35cf9c65b4a65eab8c42d2e54c5390fc967fff2d48983f41a3f22bc54c7cfdc7eb99f3d74002e838c67bcf621330c451a47ca73a1b09b8e1f4c3fabe2b937f3106b41903a54a309f1e045a7f2ae48962c297adcc1a4e09844d30be597655203d47badae5f2d1dfd697706a2d7f380ae8ebad95734a427e206529ded535374ced5500db6461e807664bf236463ab5f5e3e24d9ff1f4ab52412a654671834285577e7000e9c4f4f056a413fbdeddc123a796810a6e3f4d92ddece72a364a8b1a09e9505bbd3ba3271e96cdd756a631a814aa2129f35c0e22e812281d6dcda81807ea4221655ac400f5be08985fd9278c66a261cb05f72d22418de155f13b4fd7c1e43bee221faa8425609ff565337a86de489f0ecee746fd2ae835f0a632accebf5ea32485c13f8024751898bd8adf3b804ddf79391fb4d2ef5c9c8afe65136a95ef3964af82021868a24c54c8d5f517a7e4a218477c51c2541ad0b746b7c08f68d6a494981758a073fb39798d4362f851a8967ac050c3203377b4d7c69d36455112762f4c7dadf757d60ec6858d0ac8c2e0a865a02c9ac5037352b2bd3c8e440bb727057f18bb29d3e7d5f91b544e1b0f07396187bb8ae031eac95e61e70d0c7cafe5a70a6725988f3ec057bd753ccaa2440c815d6d466b3e40de342a0b849a020796862acac5c5339f563f30942a3e3803a94ee585ae12f0ce2ee3cb6121f60b1ffd39dee373df1f1920a1b13b4c7e550232238a43dbb90147875281007a8dd892d5e88b1f981a451ce6a89007d44e90f0dc4fc1710d5c55f7714e11e561e1b2944cdbeeed4457c346ba59153d2587a98a361750112cf4191bfba0010acd96f9ef54529ab94e46ee16943919b6df27fa19c587fd58396e92ee611c360492971a1ce452c35c14e642801c6b746cc6a7c1a404a8a4d8c98c5b464466bc98ecf496bc1bb525c8d88f6d3ad40aa962897720e15f4a41d584a4cf13e6bc87d794159720501dfe1b85e1bb61161bf5e0bb0059c954e0fc41a81cdd59795f35ed99ee8bafee8fca0402a132b8f7eb9477fd0f96801201dc908fe44a57d92301efdc109ba2e7aa1c35e508e7ed562d61f1e0d2df35b571225143c30094d840d91331429951f23f537d229a38ffc78b1ba28465b5f104f7b93a473d6a02ddb0cd98956ca21c912c37629740db8d93a0098fa4e2e94a79412b2c1eefc8142e38d16ddcc076dd7956b58638d658d13210339ed01405f9ef5553773fa0a33b3c862561bbc37dcaaeb3439f95953c74d24bd067e3f79f9807dd793e7d0d40217a199fa6f665c1603965983970caf73ff318b19bb322a67e1989ef93703b6b664194d6769771ee16778b68358bd21cbe8e41277d083d84a691170854a1264d9193f99bc7027626062d9c6c0a8beac918817f38bd3fcd79488c48e124fb3409d570a59eaf0657d4e43a261242464063d73fc4b8b269aba45a81a050d40028bc5b27234e62b4ea73b36042f846e62168858f492045521ef98c716b2013b59be4371805acfe0224c24e5cb26cbec15bfb680d2654170aac698275fadd448dbe27ad72fd2e3f25eed80eabe8d80f8602c4f96a19428d45d4c45eb3c1ebe56a91e3e549ee12ddbb73a18d679be70fd169a650284463c2f70c263f3c5ebe958df64c740ac45145fcc49f4ee4d5eff4e75ebdf6ca04978423f797f1fcbb91b231f63b6c1c73c679b116c0f81f09c91e2b93f1d40ef155424c864e53052dc99ce527bde96ffce9aaeb8e777b4f36314b30a5da411b60cd41ad38f398faa8737b8c152760825601545bc6596c0dd6dac2b9e92d33db0293dfca132b1c31d991403b5287dcd59860d9404e09719e59c208df346d386dcf497b84ce1df9272fb91d4914bb4ad39c21000761b2f7d4dcf585c9628ce6beef37be66a5fd277a06b72e05a85ab3102adbc28b0a5d625a0f090e93d66b97dcf7e7f5e5d7b66695f8db6d63715bc4fccff9888d235db51a610a97851b73325d46a95dd43cd00c5b5ab58316908648bf6cff18c087bb894ef4d16d65ec54a1db88dc9e38ce108686036564f545921ced191a436fa520f1adce252facf9c43860c8f4fb397c318478064afc1aeb468ce23d4f65739b682ed4ef1fedf548280030c903ec6c62b719cbbb550adb12d8c49c99e196ed30aa6fa4d114ae7855b0ced6c18d77beda9a62ed82151f54746aad565ec4d87b7304e51f8b366a38df02017d4397dc859c8df01105f09576bcec6c38a521361c589d03bd11fdbe605b0996584ef30fcdeb7444b79ff7b3d8fdb1ce8e4a04e29b95803d4926d29df0ad3abe115855219a0741d68a47279df48ed0b478dd782f2a2b11eb09d44e8f48400471325c1748733255e0a2431f4b2b7f62ab41bc3e0a8ac3c4dff9c39170ff55daa56d912108aeef2470a66104935240c57e6bb5577eb14085cd7e98382e267e7d5813024aa5de9b348833af3200c6159b078e2c6600590aa85c87b5e17c35a023066f8bf0f1594b62953451f469ca6a5623c0662425890163756bf25c790c3f42a283d189fd36c74eec9224089fb5ae1629971e955540940b6f696eae552aa85e3cd0142b4b0821b934fd915e323366ea6436b088e0461f02205fa2d816aad30cb6de139ab57e5a685793896932dabe072f3647973b347c1110fbceed9fafb6486cf256909a0bbee715b70d58a5356bda1288ecd7b832003270817e6edd4b45f7575a9bb811bab2c61ef90fa1c9e40f278431428df18ed94d4f5aaf0bb54eefbb6f0357affc6154e764ae6cb209cde6a87c4505e867e658e283ac829f9d17eb10237872d9c9207729dab1d037c7053c8dd83fa9b292b7b3b306a244599e2d431028dfe4fcac918a075c1c5483040a2532331bce37d1d2aebc59ebbb9986e5474ed0cf78608ac6c83bb7dfae647153a852f32e182f7f2c36a63ab431a591c3769c69b44d34aa400eb874bcb9a08974c130701f6bd5324227879dbfd7055f90b8c877832758251c899937d02d5e39072c4bd67030cfeeac7b4eb8b45ebe61165652587a7c6d10e17672e03f003ab18002480192e5d370ec6b19415e43631fe4d8e0c0491f8c3e1361884ed7ea430bd18f7958fcfd2be8c5aa9f6fabf85a30716afc2143083650989e43514ae9b5497e2940f58e47f227c37ac18742c576a842af4ac3b9d02d0d84a4a1bb28648dab467c9cfe34c1f9da107f1a55100f7b5094e688cb89a539925c8081cf874040e57fcc5886b3acd03170712f63412f036575623911885b02c00ba8af46ea34dac4644ff1844fb140e5c44e645a9749568ca73d4a907bbfb9c565eb88d416d84ba391ea1827e4dcfe126592962c90afbf749b1100c1eaa43fbe76b378f0311a0b82de46adb82906589b540881bb4b5251582ab22f927370b634b602aaa1a81b4463fd5ecfd8d4adc1a9dfe87fcfd7415c022ac15a024b8d33bf8d288759ac6a30b0708f6336a2d0faa530510addba3a519029f2c10e9b5db58c6d669eefd4601b1a2b34f142af9555b412faf9fed80c3deeaea216f7cfa84fb94575c7503178d70ed67bd39d1d710f8a985f900f089aae25ba8c04ec0ed757ad8071b7119c253701f98b2d362f91d3e2c615589b853cf5a5193cd443bd31c509ee5ac6a72a20898f6db9dfe28804aef0a12a3f22a10474c5e808c79c9d1fc26a25848c4c88e4af37322988b42faca93681fcf471911356d77a36ea0285bda6574166b33510d92cc07ce3ea6ec2851027ba76b35d0ae67518846f7892000811b33faca99b8a37e0cfc0f0e81b2b5b24cb0ae476dd12f4ea4eb81027cc739e00068c87345cd346f8bf281c175c2e966594162d9cafa7326640cd3144f571a8e93379b612d59e1e48e7d96a18270999dfa70229686e080edb8503675892966e4f071c65d3f8a6e0a2e5108cefb8de97e67468cad3b0f0aaa9994c9ee594c0cd2c025df3dc0687a7faf344bbb5976f0572a1a1090f5b8711220dd2a593a5db7d541c661f5099376cab5337dba835221d8b5982783fdfc2d146d87ae6298a4c4cae6ce9f5101bb7790d300a8c9c0359a71ddaf23e73354fbaf6083c42e64c8135ae7ee8c1baaf81fa9eba374fd98ee1dd3dde3757794ee0ed4fd63ba7744770fd6dd71ba3b54d70f8c6ee6879883b5f6ee832ba8f6509f00d9a30d002bec52e76ff5dd641996277505e7e977f1202706446d0e0c762337332ac3e2ec4c6b5c47afb43445cf39b87d07c23cf1838fe4a91de76bddb7d2132bcb3d8a29696f2aff546626742d15409e4d61166b018203a12f2b7a734d29ca4f8f41efda1b4b0dec6489da2d1a5fc0742b225378a1a0a56ee0304b973dc61a7963fd0416e73c67e7ec817fc38047bdca87326f7b1840c5b7b0b2e8087fc087678d2cddf775a35b476754a0fe6b647094d781ea963b54ad706839652ceca1b8c500f264c0a95e9381aa53ccc514d6f242b1820bbd43a555c5c44f51047c545bbcc719cf19a6cb6345095ec1b0cb3bc9e74c3fa80c4c9979c69a6a7909fef68c50fb373bcd84eb60589b6608d171cb07875b0088bc0332c0ce4a5be0cf167e1b9bb87652d426040205f477e477ce6d3eba3dc98ecdfd2512fb75001edf378fa548564eb30cffeba1d3332b5cdefc1e14a057facb88ea225cc220b1d1d668739ae0073a5249c5195226fafe814819d353771e3ba52c728cc2131cf783374fe50081d7aa3af945871c0e8af2bece46a67cc113506739a80b9bbc72005884f411a5ab539d99a5a9e48c94f64288e557300193c740f32d76184030fdc72f85babafa92f4f5ce6958618bd2dd37ac00b9deb53a0ff0d9aee2d41988d7d11b0858d886d642260e8e59048ecb795a036e29cfe1cf95a1a2e1feb2f4a6145b6f9462f5544956cf9462432f4d2a4d3a1e7cb4a5b5dd83dc61ba475a04333e4609cb534013e5e60eca7c8d181d7860db2ea2167a674456c2deea5dd33a5a64a3eb23d7d01f00955a858b046445b597fddaeac1d256a0c1bb608ec30cb454129ca8ceed64f00c600b9bd5a3f4a249be9f3bde2c3521fb9fdbd52307b1b904b0148585cd4e990947ff8ea1244a0bd9354eaa4da1ad60e84107154826eeeff379a896276156fb4d3f106be3bdc7d9d74f2eb17213191c45a9e52f5058aa434ff7e8759fedaa2253ede21762049025b3cf51711aa71f01afd5da12f24ef8d23aebb5949a2b912aba2ef162303ebabbe8b6082b0798ddaf3472d947769e8ce9b8a77705e19ae601edb8cf32ccc5a0c9fc8587039e62ba2db4be4f8c5ed8beee058158905890076ea728ea1dc5c1450532b1efedf27c7e0812f3008ff6a96879898f8214890476c99b8270faade149cf106dd8fae850fa664ea4a9fb86ac1b0c08ddf7d82cac07c1134924e4971cbcadae073814233d43c4301d642b15471ed3f7c53715e50e415ccad90e888e6f482caeacd31f800fcd6ca884cf3d1bb9e0f9d14a7ee1834f7814efeb8903196514a519cac9fdb292b06ae73f158ce29ce5743b28ab003459395dbbbb0d42eb3b0bc6c1bf154cbc58401a3e4ba0e2558efbe26b507c9642a4d9844bbbcc29717d5f60fe0942f476317808fbc8cfc2339fdd146882be626eae22231035f3418468f602888e90eb77771d94013c3080f4e416b5ceee251e34bf2ae376ce3bfe673d5cd4dec57aae8876300e8ef4ca40a5b2b0e328ff891686162bfaa58094637aec2c7980c6f75fb93a2fe396770ced38b0e130a2177b191f378cd6619f72006c7e94b11e763e0a71e89a0c81c366fc3febe4d5045ff636e039ef2bc2062d5c9a70bbac68cdb59df563d5330b1a87327b9808347238b94e24a97b10763414f972db46c811589c681b867ede49d525b294148505e55bbd1ef7c29fcc8dc9501bbef4694e527482a8fae5435768d8c72d37a68b8cac68ec591d69adcf3095902b311923301657d3c91a044bb824cedc04e8cc83bbec7c2268876801020091aaf6a841303f806d0fb2aacf867fb68396b5c281358a1b698d39c3af08fcf706fee3342118225d1c3b1fbc54038f4db28de63c301a5da5be40297c7b62c86c45f3162d7d7d7b0aa35cfdfa207bc861bacc05023109c1bcfb81913d5a0678be0fd83086ef3e254fdd9f04455bc4ec04338317f420bfa61f1d6f3b0db8254b8cc90560913ec4424a1837482679e9872b79b5be0d642bfe6a35f7cfb188e0f02e6e9b1f92fcd1132f9140409b08eaf2623997c93885cc9817ec71e6ae18ff12f634c9f34fe3853205f9c532a6ffa5cc5795de470eb42c1cf3f0315ab9c08d7adb00f8395126da449dc8276ee29ba889b626ca0e6f12724d9837dd93de3619b0f87e08ad6d591a27dca460e1106a703bd45496389ce08d6b38960ca5c5290d698e3196ecb81ff173a7f7654e847fd6281c3eb8e64faed51c894503a2c6f98d277bb2aee7a82e7bbe70254f615f315de77cc49d3b8d6d2575a9fb0b57e2a4d715be2bbf0f9ef9136a25041c70f6401336a3f9922b867456d1ba7581f7077fc6c95edcdcfcd1a9fbd3613d7e7093b3c3dc80538cbe1b87bf369d731736fe9112d517855438175471b931007c0a91924d23eb8e1dc5eac01706e453856e8afa95c2120a632bc66c15db0fe8a3e012a513326f4a90466fba738a051b3a52f5b70410517d80835e0c474db2c373eec20a5007a2d2acda17d02bd45c088e2f207504542c994e049aaaab20203f4f8dc81aa57175b08d5e308e2a52d0872087af27a281cedeaa93d0144d6fa7ed685baacb9588a333d09b6825bf3c57c91a8315de910f45695cfc1c72c9f96c251df401729cf7891613493fda96738de569395ab965a3b464123ca04f7d998c8fed682551a4d41c87bf19867b562b1f4d2dc7d10ad2873a0ab611cb6332b39ba542108ae775408984073a5c4f4522bcf1e7c7fea797845d9272dc14d1aab9506d0cfce4f86a07d8c206f40419421de2c2853891af1bb8ecb122ce59f9ff92dcac15225585f68986784c71d976afd4c916f7b241950ee640b8e2357f98ab5349551744b26657b77beadf2da723f6213bcfa41a200fcc1cc8e512fe55217b53098fe52628d7005228534a8357bfae3d2dbc907790f5ef2e7099213535c6206ac56aa0c7b4bcdafe5ff8f83da9a218069502b1d3e46237547d5c6d8d48ba801421843bda39c94a525070e82d4a295cb7189335ce87e96d244e98a22382e03c7371b5106f6c78de347b325e550ba7b771c0a654658dbe1d5f82b1ea35f2c2d8764c038dfa85a254b00f2bdd5b50c1ad4dd26f75e0cca3b94194258c028e47713afc4820b3bfceae4e27c3f2bc792c2d2aeaa300b02ade5cb8efb626d32c0b537833345892d39050932d381a15c4dd1bff4ad1daf6410f7e1a17d1c88d07666fbfb0320b732db8b8b3768582854aeb4b10c36fb330c26f3d755ff1d39c511c36dc0ee72a5ff0b37a07a63bc07cffe2c482596d8e75803f93a2784fda39583ef7c27320d0cee5d4279c3f78853d260ba1547772386084f3de1da6ac84b446ea16b2bce8dd7acb83d73e9e8a83eb664c85540fb4b431c7026303d6e52e0cb71099f9e3b071617896382468b8f7a5b25288857ff8417574e9746016f7f9ab42c26018996b51d0597924fa9271cdf508c672a611bc0f2be2e0cd0236789609b61e568eeba14d83968f1c2094d7f62687f8a7c3e0b3a766e291defc85560ce3077b9e9f7410213edd60d0020c61e3f21f17639781ccf5029a36e187998ac1d9eea9d9c07d8d7694ef2480d591fca6411342e032e4a3453613c81dc92ff9060f32b08ad4c56acbeb07ec8ea4f9bb88dd7933b5db10abe55290929afb207cd6370891fb5134d95f0768e3034bfc6b2dabfe93edb2a3e1d72d893f66f1ea85ec85a6eedefe05b907596fcfc6b9569ec2036deb914eade57d3c1e174d9d9257ab07534d1ef87bf481d529afb178e13435cc535a207019010adc12de18c56f20b28cf60c76c28fa4c0be0314b889a8f4560a4ab1e8e2a3c884115e734b636985dd1cd8adf2bfdc7eb36a5fc2122c17116e6be01add8c73a0703de4a600b2544a4485e309c7e4454c529db8e5120ac0c44a21df87e00bb7d93ad5136f16b52235191a022f3484c0320583bffb1ba9fba7ee0d65583dcef81422e2925991e03009822a710e09c302b7b0a5e4345042171cddab9b03d393e9c73a822d90105bc47d1e222c3b62e3db351a2b0937ee71790669d1d5b2bc8e6cc5a75d9c837b1701d7ee290f5bde0a05e3bdfcd6e752e6c285750497171fd8626863beccaaf2c0d8cd4e47fb3d7514f57dc9560302ba69bcd5713dd9d65ef4c7db9a78b1ba7a9951f3707ca3dbf6fa0bfa70ab6aa343e36e00e88ed03be0b6ddb923f8b0ffb295dd4ee7bf095ccbad3b586603a619518ae274196cea9cebc1e99068a7257da2795e508f43a3470c5730ef5c90b284853d04f430f56286c99916f63156399342178377c951bc05632ee82db1addd4524138c701356022e2f0486d2228d1c73dcafda812e4d19310453ffe3b09c34dfc1232733c3ecf1e0ba215be886ca47e950a679e1c01ca5e49afb7cd39c53fa5dcc1218dbeb15d3920fcb53762f4c836028d8e7763b96aaf02aeae919ab899514534db2f1b6062622b29b6a6707d59625faf19610a1dcd87bae35c046fad13e4d42903d5dec99ed57f946fb62da95aad530cc12c2f35872eec871a0968147ce46a7180e606e0a247fd5f091459ced8cdc7faf4c1bc8c95a1010ed8e101bd278a19a7d4eaab62e14c3f38a0b41e6c59c45b63f060d4e7e50a09cb3a12f28697c7b158030308c78b5760946b3e070410ca6e0783467efc72a80d8cb1aeeb302069a534d3d933e469dfc700ee0305e890c7615482c83f28b607631a425acff57ea166b8868c61737c9a6ffa5aef11e288940c6166399ca3defcb6ccd00504ef7272b28d36526259e399107941992b4cf391a7820485a7730479c90c08e88a8dc7f24624aaee90936f2c5585cfe60db02a2cdbb0905ab29696db332ec33daf2217ecf21cf1d574a264c5e9498dcd83b4c5147878d4bb263de9245018abbce4dbb8af8891b686b0ebe7feccf4be1a1a6dd8fc72d524f024429bd153d576156f3e153ba3b06486fdc9daf75dabf16024272bee208f3dfc4f81bcb47c5adc3abadb99064ba75562a9aea7dab4930dccbe5443c921b91a31fed03fbc1f9ef19ae58debb05b543e4eb5e708da5ef41f1fa38d30454c0c06ad2bfb1d4cf0ceb06315fde3cb35b8cc85ebc0372a29e72ebd8780370c4b01011b087aee1b6532a5a5fc75e6a976b7325231c8b560435b65877ebab380c38c1e5f199bd63a42704b7df21d5e3ed326b09f633691c369430b502a94884ed39933a8a449b41350157fd90f451cacaefea8ecd5281475812fb38da9dbf9580d87260efbf958f98b4b289955f407261667528072b41b144b4ee2c4316c8d0607d1a31a7d799847611e86a44426226399909b20d62bbdbbbbc9b7314de02c9a744dd0b25cb05731052e4e29b0882fb7c93fa50ab889ef182baf4cf94d5473e4764263effd1edec962df95383daa4b3bbb41cfb2445ac583b9e5d625f9b8867a8dbdba2744e22557040792e1ca5ef2d113c06b5800fb67f923646e2ca903801b9c88ae9bbb1f2d9d3b29568b4fe363f41a45fd0dcd0a36b9c3704b8878b8cfba3847c2306a1b1c013f070560ab795d99ae954044ef70198a97e7357a7d4048527df626201da88e1ac0e81c423004dd3adf3ec61fdb0f4e2a73c64f264cd89564031d4b20dad8fb0e727299c624933376f24ad61ca56eeb0f9cc9c31b0217d215a961e8a75b946ec578a20bd39c83a502f52d4a0320207e0e531abc9e92875cd000fa59861bb7a5fb413950bd25fc84d7972ef5db0ac3aa2de06c695ff821fd248278028a01e67287bb12aaab92fb4618578c0ad82798fb5112314befacce39e8238dcf175585d397fb1695328b040f1370651d2745837d6f508055472f2113bb9a10e2b89c3dd304bc8b640d52e39d6479728d30d9cacf7b93702b98a204701931804f5a98a881eeb62a10a34f0d1095a882de615c5de8641d5b28260506b0f194da43ff7b87c8a0a0a553ca11838d0f1bc402235313a1e9a16da318d838668d755b7c5f4330ae7b317d97d363ec13634a20bafc83c1e2d3283dbbce900ad123198ab0fd3053d29a945b29997dfb3c3b6af6e00889f52d7348f9b728947c7356dcef672c132a0c14f9256a5402857758aefb69b92f4962ceb6d1e9e52a0ec3cc7af99be53ff653643409b6878a81dc26418e6f42cfc25f50e4cab67bfd4d021991d96723ce9f2ffd90050b3916e67eb1c9b72e76c193f995ce646a25a991152e5519cf1af416ca6a555e4850ae6bda53749c4f1938072ad1002a7d787f740d4eb2697ab6522d8475a64410d01a6a131c54654aa600ad7d45f1c97cb666f0e4f1db17d98629a98d086f56a3bb37141321f9f33e7680b05192a66456801ceeec6f6006f2e53446b3048cc238e4d6c544ebcaa85e06aa19c53b88c48741ce123b1b70ddc1f7b094613f970eaf8760ee7cd646ab66e986eb0809c426ca4b7ad9417be80d50d5bc7ed92ee05282b394bca419d824970746495e5396356e45f2572f657e6e6d9605b6e1cd900f42e361b9382ed91d6f8bddcc2de09c6845cbfc3ce1538baa9bb8058a57e037a90c3bda21d3a30cbc0eb29205c79e457645b06027bf0de5444c6f3c25f89f675d3d21b4b084a9b42621014a3bca3330fedf1294852485fbb2b71c002a460ddbaf3eff5913b822334ceb5a802a418db651722a9c3fbc0a1ba60b378b06562d213e4fcd7da3cde84f9f8a2dfb2045d1e369b711346de889b835c2aef78c8bbc3366bba5bb171c7c3e3d981e1142596f620a81d838cb0c5a434b2524b8ca84252d8b836150e716a73844d221c5b743fd8200ec366c82f60c9cdc254e6fdadab10f0db5c383b6b930a5dc782984b0213859bc8b6464fdfda1da8ddb40cace6da56bcc831d692e9324288c2099e4765f64ab1e91d4d50b3d918f4ab8bfa86aa2d480f5252e8591fb228ee04cfb3590fa7edebb383f3c95ea1cb7fea3fe3b9530ab62ead8d006fd73635aac0e84304aaeb90f0fb98c5730e6dab384e7176d8ad63f3576b5b144b635bbdb38eaf1338d49d0ad662bccf60b121baf1a92d7fa99193493655ecfd460aadf1c79eb91f9ed90573b7b5c81243ae3ef632d546b94d0f7e1d3046764e4ef5541cc9c6f0af03ab609405da324c0f71ecbadc33fa900fad856d6b0acb1f390421874256d6c605fb09b6cfcc7eeca4cbe6fdabc1a6ff28c757de4065198a8bc0ba46beab56034b89b0f46a39cfded9e0d8b240b708bbf0fc088a1f455e90b39e48a003b644efd364e44fbebddec90ca9d32170c0495d4163f7e92376d03ef2f99c84744fbcfb4ba97339b84734c0979dd8f149515fa285cb08a05eab211d14e031039376153df51dafbd4d992a8f8ef59373b85b1591009cae13dfdf0a9b1972ff65c523281ba363f7c7f6ed750b26ad60337dfa1507781186764a81f2f490485e6aa4c10387db145eb86944aabc59d077d5ead882ccbd1842953c7c49244cdafcfd67ccb0eadfd54c5a1d74d98ce545bb8a979762f2aca46f113112cb35c461d868e33b8be86458650b05c8c8223c5004d14e5c5f4290d5c4263d368101db40e2789e05858edb8bf7f9e508f58a965ce59892c0a040ebe0c050ea30bf08e2e78a0014b36441fed7fd647723079a45d15b1d5b53fa1b893a163c820ad5dc5baed8bb969d95b83a3f8c5f9eac0733e674e1480f952c8dfe6d078533dcffc65d16b353cd36f61bd3ce981595716d32c967770ca0201fd720636c45b519334b94809a37d859e5c12a74c28f1ebdc793d1c386c3ff29eca6039511863bae0aa23ef8dfcc89ca08b451312277185d0714e46d0a37a65ecafe6337a7b3ec2dc43dd911dc6cf30cda88d7455c6504bd95b4b4ad3dbeb18c40c8ba608ed86ed4c22d26813952182d84e286d2b15bfb1ba8d1234c449e0272f6a28eaab95d68cd43964955436b3b53cb9569cb3cec39a5ccfdc98b5d27ee16d12e4b9b3a061c3385161459a8d926719175bd1f5cac18f3e2e508c1e9c7e8260ac6d4038df595ec0c82e8e17ce80f8c69797224179784d0a2ee882f5e24e27a425f8a57711ef04aba3ca7464077841ffa5f59f9dbac034dd555375c817df2a0733de6990f82a8b7fbbb26666c2a3977f9164166161c39b3587f802dd3aef5749f310f72f9d9ec654567f1449a0d3c800a5935934d53476b174eb85072baf7765026068fa7ddf6dbf4360ceac005f383412843a4b44c9396c845b9f89ca0cc4753021f0039f10a4b46fe9d98793e0980e9ac00a54e8525dce0d65ca8844778bd6a55c51f0fb79ee3f30b72a47cc5bcb34720e595ffef89c2da325cc941e0cf08923850897b8c25de321dceb4b002e5e2b9e3c192a1e054cbd2b2fbefcef7691d14aabc20a0f0f5159e7314e89d65e8a5816e25b0b08b44bfef5472999aa6a2e72c65f4276084a5dba2830cbd2d40d81db1627bd44a6836dc95d270030e9a0e8ab4fce0cec617c429156346eeb9b8a82551dd21d89b427c017b9c8f66dfe2d4f5f58fe34ed56d701cbbdd80e18b88d1ce15a3df8fea46a24d46e0a97e3490ea2577fe591c49613c9f223c162a973dce06d14e0947427d986595f0f2f21c07520d5f6f87bdf199b7a1ca85215e4cc343a15f4886e9647a6fb655af52152e35d2f1ae9411a00e5f23561b1662592b1fd829576bf9851ece0004543783df65983b07b39e4fa52a8d601f76041e4cbc8f6ab2354a587038a2da372e934d07ead8751478ccd52625034a305ed3efe01658d265d944a37f40bd42f16a413ebeb66c56a20961c42ce6eae2028201d9f584b25b762a805b0f59fe24a4b6dc9ad14a24de3b71447160c8d312ea0106b9e067553d642c3c37f5f3a232adc97f58571803d98e64a7c7398f891fd008259c6e8d758f98110b0c21f5473593e1d93b217585475b157d78a4dacbb3c0473d97b352e706007be131fa10a265fd710afa9cb6852239e28da841c2a796e98d4122044ae7cb3386a8d621cfdf25fcbbd595dbba155c62c8e42470a39effcfe0ccb80f92306e0b73811382c1ae0cc9e4b8f0837a68743c745224b905a2a8d314bc35893d111a8a93b899667e4832cb6ec22b003450eda9250a5d8fd5cb11c790d665fcf435d11f5d5373c74c4b51fc444a830b50480bd31c247d3e6ddc92b4619af8d90c490d39b724699294c4b699fbb4aaea0ba372d3cf088fda44c4b3522cc22fb4472605df5454a646de6f0ad638f40553dc43800d4b062f917286f797e072b45c0932f2d728f5b47125304b0a61ac55bbaba7a82f377031be0020ec25efa000ef5a560efb5b65578cc5e6aed3ee70cf26f9c66efda0ea39973c8f8812b471593e553bfbdd049acd768afef782432f0b7d97a4772243fcd6166fd9dec1436ca9461782322fb25675af7f0cea50e48444a86718442970ffdeabdf0ce6fe006c10caeef185e49d07419a407a9fcd652f1fb0e3120058dab7eada9e36919054619a04e6116a6c1ccc9c8447aebf2d087723ec09cc5c4228a5841136bc96f1edbc916f411b00d0f45d54f79020a1a009fe35c7c3102a4bfe88e9c4f60d9b048c925bfa132d9152af2d109a4ec5c95783320dd1e1b8692b5636bf16cd9987eb85df2fe474cf35c08d3eb0791774d669df96a1451d50c932acd6775f84b9d16de3c6e9ff425e950fd1838318373d0ab61c4690f8bc7ad944da6aa507f03e9ebc576873f0d5f8f03096f130ff43a7a92b4156e061839a91fdbe658630ec117e06e3eaf5d4cc4d259f91739f7195ae25c0902e35e9c5342d8248bedfa3e12c29ff8956658a8a814766d37eb5a2aa0088bd34cd2a447e1b542889308342516463f1967794d2984068c6711c7cbc79433a6e9762fba32afa5843a7b7baacfd4d0e07eff367575cfa0c8f8b562d0eab5cc9a005755803fd05bb281a02a1efce4b4ed0c497acabc2855c8a16c94629a00611f9cc590fbcd7daae1a2683402dab86e8e0d1fae36dcbf83894cebf48a5c6a18bf5352bddc8c76a1e765e1676a4fc660f1efc7d23a83bcde49493f7ab9fb567c74c8c2a772ae99a34285567e2c45766d1cbbd5027b8cee4e3c172d8bd9aa9b18fa448f4364d860bffdfd32f94714818346047438d9eb8fcc8d273825a7e4512af353a5af6fcdb598233fc0181e2c74d6613f2d5390043fe0f1fdf25b970fda5a2fbf81643fd9a22334c250b8015ef6fde37e38646ce143c86783c7394c81d1d5ff0fdf235e45e9ef07a1237746dbfa921722c258e6cba7b3778600c0a706c65cff76348821315d00d3b23a7be7ca7d0b6dfa572b6c91d4b1573e16a8b1ea65ab36daedad37b436fa4cab00226443b0f27df2ba113509befe05b9508200aa70856d3e43638609ed86c6ef4516080e579b1400a5b6a1a81be99741a2bd4106178ecf243239ee203e63c832c2049c65031c8c95825a209249028c993690951f10565c96b41e05881310d7ebae8b1b18919fd8734bd5d1d57834af1dbc7d98129cf7ed181944b640b8b53ee7acc866997d25a7c32ce1e82cf24de0e09c484a3875bf51991ee35ffe5132a174b9cf2d8213cff78a3ff6a8b9053f625e5e2b52c3c4cb99e5b846a2169aa93358bc6cf1b17373fad6b7a792bb64f9164ff6b1efb5c87e5b468e25d556b03c063cee66dc4e778106328a9ce60ff688ef51d120e5e1bf34843be463316311149c88ec3e6736935320665ee9cce1212c10c95a051a19b4d41dea3ade20a6d6fca9d893bb914342213ff77589fb196733d1d9145c2358e570df1e0457e156df36690d165c81dfce909db01dc1824a59eb758ef6248eb0f520e24a55a73c6707d576b2edc171b2b441c6fbb490ad6c4e175886945c4658dc85f301d73a141ee50fb13488e2a1c7054b7ce32762194a86c0240e6d3cf925f5e08e9cd245a2e68a410eb8b0d98841fc77fa9942cd0437458e4c31b9f66967e8de858412b215acba15b5a0494d45c94c461086faff92178b7263448cb8b6ae8a75109060cf6af94804add2e5ee2c709c40cce0eff8cb4c77c83ac6461622154b8f60587c42f235d1bad81702f6afd976f6c1a1583f3a08e40a094f3a3564eae1d4b600e324bef11c87bf517de189c033354049402512db625583a7ffbe30e44feb479a2425762ab540915e4250d3f4dac95d8092fae1a6eee48b95db07d72464ba5140fee6297788818671c2bd2c3700309ceca63f32f009899624549161ad6a207dc5eb92383b4976f207102f314c63dad2547a6632243c2709b243d1c9592f49d821380a81cb1aac57e91512f62762884d5262d68eb2e450ae242301ab47320b03742418b95258389f17b3607fa52a95ad49c121bfcbab8fb241aebe501c03aa423c96ccf6a7ac641921d0672d11c85bd890f430cfffdcedf661b5a102b3b9c0f852adf6769762830e27134af3afc2af680eb37b62d7d3b7525e9c2afbf4e966b41927a3f12f25e26ac9b41d4f9d5ea225ca008721f330d31d6cfde3cf148768dd801ff16b7ff7ecde2d85aa89c5beccde46e128d62052f6daffc0e236b578052cd3ff42b4dae11b33ea046b180db6dd8d51dadcbfd48cd0b0f16aeec13897681737f8492284c7b96aad41a6f7ca4405d51b6e8f3e320e06b9780065ed34df9e9b6d124d6afcd1cc69ba490d350f5c452682bd435c85e770662519862e95fb113f75903dedf38559b3529a12137bd54e6629d37a8b395d9f772f48191379bfdf9ab93bbd12b322db0d5ac96c3e63767d53c158c0027e376ec0f520fbefe74b56582a069fb7554493f54759921b478218d6bca515f1db09d4698ce4fbad9418e323ce60dcb2bc7639d9b384eff853b2d5e4d2a588c64d5081716b2652ffc66545d697bda03fa066f89cb4bc6b6364580c3ec87ac2913c7a89944efcb4accabc0fc99b237d4d8df1326046ba315f14db66e56ef32ff351ba047a3144bbe30a527dff1d7519c20d643f756a0ac0efdb20d9483e01110cb8751c404ecc58d84b960f5a3af08702d1098a7b20dfd9b10eb4706d54edfe3373fe50e4ac35458045a8252daa10a2378465529043454acd603844e9ef56e4682aeec30575c2cab7e24711b7255b6e9b9400e5b0728299cbc48d8e32a7fa9cb933547c44a89a069c45366bed67ecdf19ddf5292a65214f5321c8c2556e7d2fc56b5a9a2c083d25ffc2ccbf4b90b2b8b958fdf403b25d30bf2232a301f24a6a426688412ab6eca8607aae380b170c0864ddbb678cf8b729f78e0ab2571a5bc0bc8c776f42245cd7516a85ddd514d2dfe68d50493fe19536ee685f64a4b257e563fe35cc78598d9b644f852223065f3144e56e08a2f7947c4fe50577e74f8e25ab7398e76e36f51d304cb45ca12f1dcfc2d6376b8e2e5ef2757e8e27d939e78f097fc0a324bf771f78ee2f5f75dc4984cb3a701370ce6cb62a0dd629e21a40d898f37d12c0a530b48ad028bf70223ee3fe5d9793df03d185a928dbbacbb023bbadc755719e95c5bfdb1e1899703dc76d485b9f03cb4ec38bfbcb723e62252b6a89aa5ce0ca4d9aafdad2a2156ff615aae4100ce766df9ecd7b13a356a3d57298cb07f78d99a185b352ef6c3f9ef63a13ec373324d71246afe6568d14dbe586c32964399bb4530c6396670fb332e33215e62ca238b47ea1f83ad1ebffcccec20aee1345e99f4f7ea9fdb3250518d1985ebcf607d175c7c9ee559cff8b43c173ce371bc572bbda7821755245b1266b2dc12809f8bea56ea63eedcc44918d55910d7b32d47c36a3ea7235ab7043ded74b3fa6039484654b32c9f009be3876c6cd1c6ae56665ddb48b3795845807ed0ad067d789cb56ffb24517b935adb0592d9366643b24bc5467e1f01b5fcbf5aa078c33ce4207feecfd59934582c5e647d7040f9eaef64aeebef85aaf5fe67c1525f522dad93c4cd46db1e8f9fc62d46ae7a25e60ad82f9528d7d2b21058a1881f56653686a8d7cd7e1ed0cea429f834c363ae7f680f4ffeef0489aae5fedd4f467b12ee025261268a4475d59a9732862ec142a3a70bf1cfdf960787bb789a4e927078c8baae66170aeddd0079894c00fd7d753b81895a28dd9af6eb0e3f38dfcc1d495e3f7bb5a524b45eba374e270709afaea88debb8fd0ba0aebde4152aa6ae9915374fe6fc8a8c4225b3c5ce4adf8f5216d8e73713b797a9eeb63d874a0c1b497a507014e41ac1727cd4a38d7ace8e4a9860b8217556e5c130ca434fa3fe5fe3987cdf8fadd33809f7bc34a20285fba7f982918ef8c2b7f5a1fad3906c2948fb34e3d49d8728bdcfc27a480dcb7c8c5c96f4b43df218477ba2255c018f361d5828674983f331ded3023cd8b08820b238793960c3f2a5948fceb08622149c12ff16bf40aeeb16b335e67ed455a65405fe227ba3dd5a9068c16af59eeaba977839ef9bcd3351230b37726aa21d3cf1345083962916db042a47d2f731ad878d5420faf1b42d2a3ed9c353a658e8eaf493d9669e3445c3de15346e6e1942706045f0c8cf7ee1211a5a571eb21146adf57d79d1fbc99ebf3ec815918a0c47c22c7152b3f2ad3696acf598f9242b489b7315195cbd2c577b547fa00f3478cf20e681c95b160c363289b0208ab5fd1080a5c3ab84416b0c7ae7b7f2d915a7377040f68e8b9aadb6102319e85802a59ba428fce84306adf4e746b6e3e35d344a60c3b55a72349ec63efa7803a96ab01b3bf1b60a4b5c516f946c7a67ab05e706416e83eccd24b13347dfb39dc81380cd1245a8f1566e9bc9176da51a41abfb68bd51a59a57431070dfe5acd10346dc371ad4e43af29f2abdf2469404571721c9400ca3edaa8c110e027ae049d9cf7e2f9e31632be637b804e6dc0902d93a6cc3c055dc0481f8a6065798a2cc99948de2dbc2819e80be7de19f1a0d8fbbbed0c73c889af4529733ee45d5700ed6dd5204ae0014ee24ad4c1c06101495f5779747f3ed6f80f094a37769d8a553c2beae67358d02bbba7cadac154b0f067ef96e115de8b6f820d0a44a44dc9448c98799e6f4b1bbe3c680f9f9ef5ba50e3f1495afcc221c68d068487b5c414acaaa031256243beaf4e95f0f0e0c60d5b315b84a1a297554e2c780452a02574bb267122baea1767e8c2dd64765d6cc4a728a4b2c2c1434c5fe84099da2b77c23346642285ed801352ca03c90e277540949faf08cfd6ad6424477f2ad80ff1c2aec5308a6de09b98e81f791c7f33e0f91c2ab0e8c72328f52595e95224f72d2af7f3a90af45965e6ecb88abc1ef84986b0ed9486088e8f395ee940f53e5a11e3a5641c8140845a956a6e4076907f8558fb862c1b8ddecee1d8a7835788d9d8244283b205a6d393c9087e1b748d1dc2dc8377a2b93523a86421b3ac8cb491b6e6f26cd6ddd97d953b23f19deb6370827a7feebf9a7432d4a8ec79ba43158591dbbee22788ab949c4ed903aef3746935bcaa7e75c6be36b1494d605b3316a3ca67b9734fc07890c98cf18c588bc03bc80d7bdc0d1aa6f5797ad0e370b100b74ef5b6af33c99d0e6fc0b74e23b103e23abcded3256127ebd72db6d3925ea80db666a82a634551297b99dbcd46e081b932e93f13da0b99b42446572fbbecac518b2e446b4fc0c8e5c2b0afc799d1a581e901afad49471809ce2efa2d7eddc8d04a06bb0f79108d878ac17e2dbc40a3c6ae82a0c800aab4df0208e74950e063f93562dc14ec69b1c10c41c886d0fdac94155dc1eb4ea1a0b55ea19e40df68e995aa9436768825775692a13eec3097c0a8094f87559bdf5ac4a89a6b746e49c44853be8aea727edd50990098506beda88b9c07657e21373062084565b7e8bbc4d14f35b04b6806e0b5ab9e5ac910033a53c0c24c4c3cf2fc18cde8940196db73f30c4f6d24550dabbef542df272261a1681d37c4d1f32a5d3f33f9c361049d1a5f5830bdaeab08a684e0fad34c9f7809b2a185f312e0d3ce5d564bfe32c49c38cadbd33d2eb2cde19e1ab1dfeef49852f317fc201347847cf6f08402100abcc3fa584988513aa20354d2e84669785e684eb23d494abd1a327b3366642e38950a4cd3bddd876f3b6d79a6996fdaa9c05f60aff15a550b918984696ac48406245899948190489d246947ef6e9e404f50245598c320dbbf1076c9db26d037b19245e4f69573247699bf413e0d018c0a7110522136ee8c09835d7cd32127311d3b4f882dbc4cac98b181c4b50acac38c66eb276c0b7e89b2763307fb0c15cea2877d1acc97c0bff7da8ace8ced01e8f41c61d70668f6fdbccea0c496c2369a9986e15da8208bd65fa05f24762871624562f8f2ee2704f0c00d2830c5b4741ab25c95524b9d853ace967fd0594a7a6fab3104eb3d5411e5f792cd05200f63421fb541914fa6d62a0b31965ba7086e69236298a6b7e5c79b5d28c62ca3dcea116b4fc09f7198dae19121708a063594c52890eb41c218b0fd718cac571f3a1ba7167bd3f534515de64942d8066dccd22ee80b4e51681dd43a7124942fb0de4acb25c5ba6cc39200baae5c2ce2a373b2d99ae303c9f07d27160161e61cce9595af00e18a335a7bb77cefa108a3d27a4a33583d9cae022c2e7486f64bc8916cda2e34d3d8c8db1dd42baea8d52f7cd9e246c6a380ef2e01c53f3a8512a2a27f11bd4061110d9f720c57b1a07db7020a315667c71a8100109514e1cc10271343bfac80eb0c3fa48d145c3cdc33793d26a3bda4eb145e151f50ec4b83ee2f24051b8a1af3b1cb011db72011b457ae8294fe5624da388d38d969755a005eb0610c8d8aafaf79e8c2a62fd1859a5191108ea3db8f93b32c43aa9c14aaa65260f99f05348f80d8f1c411e729b00c863f69f1538c08d54bd7c766aef34be2aea29d72cfbb4cfdee30343dfd5bbc72e696895efd08b0f4addafbf20f9724e687a64702695b70bbee957aadd047db1e5dd3a183010205b7e802716d3aafa70ae81cb5fc8c115e31d88e1378d2e371ad93ef53342ca11b1b3216fe204eb7a6c86196cf3a3cd59bdd2ae95867c1dfa13b8870c11dc6671edd2751edb470172a349b2ac9392af11cae388cf2c29a6546042ff4b2e9099dcd8b2defbbdae19cacf4edfac2be5319ff2edf2be3ac1f61fb00fac0c4f2be2cc9d1cb624444d647e983ebf36593b0236dcac5f5696e78d8e8d96cc800a28911def63eb70a966cf6970a23782e88db5c9d876df192115866e0f68f6da2bc076ce74e3d1510d37c747be56ee8c38d5a3fe87c765047ece93a461c15c4653eee05be89dc1e0996778d80c0a3a9bfe39da18ac7e928adc405181536e5b07337d63fba1878595e43b671684184c31c102f28bd29b3a6d4d135cd05303072122ff80be11b0005fee92d358871d6f84812a58b75fa09ff372319f9f66e80c60e21622afb35157569f62a0649f191583f37cafc5c976488b77fdc09fe14135514357e87938eb3957dba6e883710c2fbdd8845ef48fd2e2fcaa375140a4f590467da42ce85a3305e42651df3ee456228d03398d7c22bb15f61363be5957d0a989bc8de48a361ef0783274c53c03bf360d548da2d09506e56cda22b8257559764a9fe260c1bfda0deb6079a83c2136b7d0958557060c4b5d98c2edb59f55e68a694a5801b8efde04edd82a3d63a18cad382f003f2213691b80a78aea4fa71e6e02890688557d068532ebc13aca70cab9a5fead7f88366f74058b0c4bcc39d5605eaaefa70b2d80b2a12c63b66d2c2856a47246c3b6f1238db9bb2323e12c09d5f5fc2d0b1c8c4908dd07fe4dd05ed72e868e20f679281289149ee3827698356a5d7b8a4adb099fa8faf52c6d7110aa9274c54946f26bd6f50839a45c37b4376341e654f5b272f2dc94495149f42257698c1b52326964170163aa3af8a389729cd1109b12dca1434393c15baa9523d4e2abf5def1311e3a8cf82fbfb4123968605ea660e0c0c475e7fe2182f9c46ecc3275014ac509e1c83fc456f04ee201f751c4a8af01ac444466c6a8040bcadbe869eba9c7c86f500a2bd83e0141a887f8643071529dd0aeeb90aa9d207e4409127f3a345a5d1c252cac0db9691d511a1199ac6ef49cfaeeec678fc190482b66b3d126321b6f72041955707ce5862e953b75846210a54631152852c17529d106855ad3bc3a74997a3b57b38067b488a86f6a76d0bba6516d4630c13aa377ec35ea882dee5f90e452a9d50b5153f8e421cf24b6ec98c717e52c388dbc0946f35771bc2dc3252cd8576da35313ab4be64e66c4aa4dececf1ebc676f031f803299eb441a613596b313efbac2038d8378d8252866acfaa147a05bdce990764041207ae5011b42efb75b3ec673f6f0beb2b2740b0a703adb99f81748091a6a28f1dfdec2ccdd1beb3e483ecd054ec38fc1adaaf164c159860e5bcc7593fe9b7ab713255dfa2800879c2d8e5056619cc6e09eda7ac876ff3aca12f51964eeb85ddd54b9f8b0008a61462c040d7bb475e89ea0ee5bb3279cd296db65aeb1807bb800d01626745a0025b8f5d3dd680a16c78a532df66fdc03edd81d5a0213935e72541422120f8e483de33b16069ec3ecaa3ce45f39e01f29ea76ae2f3315a47efbcced01c56792b0b2fd85b9411bb2a07d8fcabd12112ddf0c3acc1595333474062d477640deab99e1b5d8ce325a1a22851c8569b78cae168767a796fe326b65cbb774dc160c1d127cd387d293fab5c439fab83f6960ea1d203fa04021ccf424f378c6cca6d50297f28ae939c0a67785f0efe73e0334e16bb061a1ef6d4004859f14353996c0d146d7434603a693981a458d58178d442f064f4643f76f69604b37fba20b91fa2142e8591f9d74752bd8d05e74b0f574ce7a0055f085d43728eabb857522f351c7dcca023aa1f06497a58a1ef01b6529fadeec7b623ab398f1ea48e4e98527d7170bc8b1b46066353354d211f7ccdc116c2bdf38db64a83d76c46a42374353ddc7870d4da4a91007cc2182e5b384e7c38746bc02dbbd87f197c97af600c60edeab6e4acacd020edcfb561ef1030c046b1db461f6eb3444521b74a71b34a3fcd47e6385d70f1304eb6dbd30b5407ef664a9d893a585e5d18fdf1b6d525540918bd9f9c5860801fcfb4054c756f6a56963131445fa02284fd2146677f170f8468785e9fa878a01af67af979744ea656ed4244884a8fa849c289c48e79ae416630df84648c011c020bf32896f11298a5e3d0d4b37513d62d8db7aa1cb8aea9ea0e9c024ec1de7fd439c9a48a94613bc53fdf839be1560f3287c9f07cdbbf5aa26006f15fdbe2c4e49046e7e950da005859729bc5b7a996122071d28c3cb2f3719f900e64c642f6ea3ceb7fd924364b324655c8955dd1149e257b50840ac03c9568ffa9f930c9af38533f97d3ecb005fe30831b23b3f88b6344dead84c20643b79ac7583e1ad2fb60a18023b206e6af2b2207d319b7889c76126cd99d86bfd44a7678d117b2a5c491682902a56df1919d469ee0cc218ce51af123acd1626850ab80257f14096114e33218166eb81d0101f8a772f78def1f8f7275f9a5f6b0b0750f83b37b517b863040f34f8c7fd84f117c10d6961c92f92db7726621d3b93e4a4187e73dbc912464364eaec26147c6eb3233abd875fa4c081c2c0a6f7794b592e14c37b02851463880124276d27bef5924949dc11112f70853b8a808ac5cf22cf41082a1778801a88b1bf13377b1769556d98f737599d0d0b46a15ae0da285385bfa3879b502abd6280769884764a8a5261364af5f138755221136f0e43752a13ed98b292344e2de6e47c2d8d023c510364d821aa37c7309d0c331a72028ee9aa87a1b83486f815a7115356a4b2a8467e2b1785e9923f2d4cb9776b72d37100a1de7b5e4f90aa666fd2f2859a9edb90e74ecc183de06725f2317dc1f8270301b1b5433c2f87b13c2e919c3ddca67e9d8da589aad0e2c54fd7418bb861e942309c120a6d5b3edc6d9a7991836a6700e33f5717852641416c505ca530630931c0a3fe2ea818b8221544ec6cd8415c7b3a12014b1910cdfc5eb0ba7ad2868c58f44940363cacdf77d09c87b21e8a2a896a12a2ba231109cd0e3752393b2f0392a5a07d67cf8a0ee7a1315179a0afacea1eba7172a226ec56ae16acfa2a174d354eb31daa94ec2262f7886e90cf050a4ef3047757f9e97698559de82e931da19b50e845ce6b2875838af022b9539d932847f2b01d6bf471abb3d34fad29313959386786c7178907547e11a01d9cdb1e4d0316a8e013ec15d755f9ee1e9765548bddd1f58574c43b7379f0364160d34c769211afa2ed791a8d38bfbeab09c2dab27b53173ba47031b1ef4c1eadc107892aeb1a9ae70854c92ca0344769691e76d6b950d201cc133b301243a520bc5f64f6655b6259087e20a1227a1e5f4d5a4201e5d21af1b470b5ee028332e0cbf600780bb0c2a1c13fe45227676248d11c9c5a1f734473588e1499015da43592eafd885bdc03fabbfc6a9f54cbaf830cf39fb93f3004b215aca662d302dd27b08a3fe1a47ba7dc888dfbc86578226a497c0a0e408193c48e9cba590451396dfb616731713e819c89736ce8c46db314ab0bc71ab3ae67b70b1f7aaa5fa7fa654eff37559a58f7f8a04644c695f1883b8816a7bee00dd924657cb06fbfd67310d9ea00c1b07d7718019351ae6260288ae0f43970aba75b50a382117033abfe858e73b6bf2c6485f64adf481562b4c821eeed38c9926215ff313ae188bd2961410b30d51df1a7db8d3885c36f9bf6e61d1fb820e2d89891b8b264564d0c3e9ae99a4345648fa3c394683f7dd2cfd15cdccb16c6468650c359447c54cc62b3bdf33d1a2cc2a9885029dce6c85c068aba802c7d6d0a170ac2159b4fb5f4c4c18e44e53536245f730a68860b07b9fd8ff2580dfd8a4a2f38c12a2cee2490ee25364ec5d547d9ddb317237e010eccc6e2e92e5076339e72500167997f5f887a6dd2723116ec22a6fd460a840d208eb1ca2244d1b9bda150767747047e5125316db48f9da7e22e9be60de4cdad320200ba3392aefe941c4b8e03b03e3bd13db259f6401c81515e8d647aa806459f829d207559d5bc195540d1226c3f524df8d04fa096cd197b6c0641105767003a2edba08a8977a12d89255cb419764f2feaa6f33cf5f4159611203cfc02174bf5c76cc84d8d08056ca14961f177ae7eb12410da00d1d3d3ff51e3c20aff63dc928d00066cc898860b370851a8e12dd2380f73fad3c48cfa128d022dff28e6491287f65e15d6c2ef51a9ab0551e9c45c8a784dd07ba272a1cc73bff447f6c20e1df394e3e7d9f681b5190043799a40f5de1d89702e79a0a0a7321294f757a00c815f824bf2bddf921c9b7c994b7ac6026bd0c543cd1b29495cb8af765ccfc44435961fb44d001fc1258d0e0c84ea82341483dcdb0d579d860557f9595aa3f66b7f3e969cc7bd0d673c007f88a8ff26526d5481173c6f977ff3222604d8a14bd09fcb890c096171755e8fd15be2734753f94f9db86f85626fa2a291e7c93b216aa0d97f56f2b71b2e79e8e6ae21060edecc738916783a27f8b34ca8529a2394368be068e8bee150d064b1e4346e056f9af7e13cc87684f42dfce54de69218fbe966fad7f4c2cf2652bbc1f354a6eff05a5f7cb3b212420b7eb77c9fd47d819c477489a8cb8545d96b4a6a9c2022831eb33dea9b448bef42ed634281c65744c56942f7d23e2eb30ef406fe7422393f7b98343ce773e4e0a5a967b03b6cc7e43e26ec7ae11eca5a08ebaf0c606fc3c0fe8d78efa0f3147090afed5676ceed3f6daa24c13b40baba2149579a930b0417056ac33083b9d6968a434a8bf98dd5868af27fbda16f4bf80b58e3d1c95a1d0309eb9a8b7340a68ee85edc2f1c1842c0482531aaefeeac1607a877ff5c37f4f4d496d8108db5508a8a95423d9908756c370399614cc7bbce0bc0f7ee2562a61354817dac32738bc62da6b5bd627a26b1e83c90162ac9a54fd3d22c4f856e0cfc5d4a5250c3430c9b772244d79f422e70ecb3fdd82be359924cce8e5c25c757e78fee4046a5c3a4b89a0f6e218016b5fd806162ca348087da42733579fc47afbb8d713510ee69b7ee95d19ece715a92196d85358129aef8360eaa8c513bac5a4705d591ffa2cf76ae34cda0d796eb176ac1fc4788aa9e412263d38b35ef1e74b574b8967273137160b086c69b9f10cb872d3010738152e641a7b272f5574d3a47dc28d33eab712310c9adc3ac3044bd83dc158ff640ebe9b6576466217bf8faca404e58f1641e9285eb5a6428ac6dd42f6a51abc2bdf19bc5a6b136554292db79b7e17fb270f88649be4dd5fbae3f87bc4be65f05671de7f9c70d151f650872665f19e8058cc327d2bd7a3281af8697849232fafb5dc206efc37f3f56fff5d7dfbf83ef2da43f4c779aa01901e478e03a15eb4b623a926b4936c81660c012d9605cd35ad6d9c22722330277b9b26d996b31019e8ddcc1f0e1f0ee53188c305c01cfa19af708821eea644fe53d6a0e3b9f339bb12a649cf63d2814c03141c11db802a632a6457a2020977ef2636f116f3e4190d4c99e00872cf6f902943d91ad01dc6b7b646399178825396a2345b254a1d73eb0dcc109389a83dc7cd64b4624f27fb1c604ed1d683643c5225213a2e4fbfa87dbc1b9c1e179c697c29e079e6d4b7de52c40ce693973a509716f103d5b08614e43f9f039a52f472580f09fc0782ec1720ae473c9693b8e2b31cdc587a30e8acb15284aefe64c29144abbaca116e88f0fdf9ef3f593fd8832c935b3b54c58a1a5e9f3cbeca48f250a8b7cdcfba59e1f9d741d8aca20fe8317ebd7b461ef3cab741cfefbba59cf4889a05e352282fdd1dab62f710499da70f0d47fb2a17a7c0dea33872eb83600046c62d817de8102e01d2e2f7749d4a5765182e9bb8cb5d140c94d8355f2dd9411f5f74911231e65c93da65ebb056e30f48195b0e53e5bfb4f796c13f06847ca28fa769f270df41fd68150f811783154a474e70dcf494d92971b5a767514be1636f092b8e699d4ba1d545dd26f649630a20ec1ff03ecb5dc61f3f553aaf76bda3ba2ab7389850ad6b8221173119b09e5d05136e8478a79288fd4ccdf0333bd1d2643a45a72e0140b55363dfbd05dd3a7c461c0e552db3838e6308cd9689336ba0dfd1a72c9369ee9968c876664638cb4920bb249f27712b61cf5f25920ffb3d13bf1a08b42035bb6a25eb5fa4a0209440a761905979468bc12e2c0026b7feeecef44f93e699a8a96288cd8f3782976ebb44f8b805978346606af49dab74dd8c71839865eef345e670315c6fb12d9eb36dd722bc2008e0f451dec4876ca6f12696f422a9252e8f2b5979386ede231f9fd7e58cc9831961602131d9d9f418df1a43c10334ea1e487864f2c8fa738146d80610c44aea850b6e548467ef5e92044c0b2bd511737a7fbc22e9729e58ddd6e63aec37f1b80559ad3dbbf70e7a7c72f7f66d0f4f5b1c4c78469e01e00cd0a522596a3c132f8bc6e49d4fdb1a9fc9fc8e536cbe1942606994b3b8127c2a471d05456581bddf54d2ee0ef6d21ba4ece7083f1a70a13f6c38fec8425e6b71726b0a6fa0c2b9c0aa6811d67f5af3bd6abee8056d7d8c210fb0d5b9b4af67ecf66319bc90e2d018cfd062667151918d24aef05490ddfa080c6c70dbba4d2896142aa221d117abb28c12b0dc468bac17f11d21ab25f98a68a490b525391491d1108b2551189135a94d5b98166de3d3135564267c284e0dcc4ed9a69d0879cd26a660a9a77e2ab00c68de0e223d4ba8c260241ae26ab41701a6cd96427829d1a8d2780eaaa4185181b60325f9e54ee39a2c86418b71c7216d627bac6790325b46bbb14fb123296e66329373961a483c9b64bbc277a9a872139a4181b76becb082ea139598e5ea960ea9cc4d38f2ff1ee8840189c521bbd31347122fc5fa5a5e04180dc79d86e8b91e07232718cae04607212a596c4fbb4eee2f076838977b07d133ff473b441327d708678ea7c2abb8f4dd4d334f27a34b65ba6edac1425be1c5bbe30bc31864040de24ba6a8cfc26cb6b1ae2cd6c10781a8394d2ff28be555cc1559519ce9d92b030c3c042afe9bcc5720181aa7036d77b3e8527fad679fc52175dbb6fc43a14c070519d2443a48e54a9ce4f4b957159721c688f689e84babed60dbfdbdaf16c96118b407844c12e2286a5ed95548859b19224c8fd8fd4deeddbdc9de32a52403060ded0c810cb03240b9597e2a5455c090a4b6714000e1e3e3e323841042f00d991042fcfcfcfcb080052ce016b870cea24fc6406475244762202ef3b86d0c95df9ae6c48703c2fadf9a30ae8800ced0c67835debf13fa669e272121257992ca934c4ee67b71f23899eff11033e683f410430c81040404348468e72cc2444232ed94fc8b0cdb5543e53297dd70d98d361901c40c34f98df822389f8d983c42a53751b7f3b777c1c785ce7120a852fdaf5639395a7ab504a961965b1b6fb1fc47dc1449c36c7f47dfac574200c1af21c4ad89b9388bbfcb0f27018596ffc7f2030d7590e5bf93c8faf31966d8cb3013ed2de0e52e96ff0c136dfb25b58b2b0d91edbd8ff6226998f57ebeffe70324df9948dfd1b7a55d644420ee85713e31be3118082afee0fec6df87f9abaa34fcf1d57934fc5c070104eb6754a37e322080317f3f99f59f48ee85814822c6f1bf319160eae5bc587f136deb01e1140281711c04824b22992d4812790f5cb6059d42df7199038181780f4ca7f0143a105ce63d30b9cc65de03eb1134bdd74bf412a069c6d832351248681a12293a7da693e9436cf9bb8c81cc1f182789249298fc5c67f80310e6633eda3b4313c7453373f18d61a3f5e7b48840be19e3f88f0e0b06828a3fb823eb33eb1f4fdc9589e4d500df8f84887ca78bd2aeeffd3b2722102e641c07828a3f3899c72c3ff38471210399ddc1c20ef253c8383effcedbf64e2449e43bb14fe1b4dacf7aa7bd922872bd6def29d4e486a2cd38fddc897ef4eb55c3d01aa08935775cb04a910f40ad888a1e8042a5a7a20a32c05985155a40a1d2778c15311e80dac7ae1803bcd2aea971324e0b17bb020b31c0f9586431cbc2ca0ec098b659d142075a6c9103700b2eb2805cc87000cabab801989ada06db8a62bab0411836f0c208d4de8b2b605cf9020b2854faf95f60f9020b1857c030f202340ac306601837e802d4649c9676cd23df29c5da4abb38d70db82b9c95ed0917c3412703b7d71e071f2aee74b0c872fedb0959ff14dda06c4f9a95e5db82b800535f7a697a7fee8a08a4d338295532965fdbc07993a2aa17bce06b4112c596ff0c1988a4d25b80770b62243e2aa7a4a82c6a969566f9472db61850919a43da6ab1c56013da64b0cd60a3c166c53685f599581377c4c84064fd66b4add729ca3969967f89723ecde27c78c285b1e5ffcd1808f703e3780c943c03090328ac740c749b05987ad55f2ee655013bd816c45d11b777c9c5b82e6cc7404da8a443bf4adf0dc596bf8a7646cef24f75b3ee0999854177859d40f32707efc602ec228c213154cc5c50a9125d262b6216d1d5c91d4830601134c5a9c4d74f3090941116322a2c63d617e0af92a635ac837991f5f7a27675efdf0db52b5aa6436ee43ba94e06aaba999599433a2b6b07bb0254d51e2946549ffae8ac54ed8937f0c20848e14b55df93b0f704185fdb10b0577c49e9fefe1239f4abf41ecfe0eb18d8f67e33eb563c178bf15c8077152027e362bd6a2a382bbd92f5ca5f562e56c471aaee4d0c6326be089a9e9920d261e8830d8a3f928826130a2523d3b5ab98b84ea3a20a2a485d977699fcbb1c703ba52deddae28fceb3fcb7db81ad421275439dcc0a49d40d492249d4c1a680770b8a6d431bb7418971312e66456c5359999759a952477e411b55959355b07231671181b78375958b2de6be5b53458c6dfcc1261b70f60acccc5ff890c5b62b7ee1c315ebdf41e988baa21d4adf23439757ea79e290aa2a6781bdf20ee64d50cdc8281b907862b2f10b236c604d3662d97285d9537430675921fbb71a6c4b704cf66f41bd3d611cff62fd354dd3ba801e5306b96f1aadd75f89c6d716e4dce9c4b483423b276a50851446ce6d1d2cb6a488d92c544f3c71c3bb30ba4236657bb2c1b62018f89677fee5ff80b70c051065e317402de0621a16f1870543cb227211bd882ed33be8831d58f79d68e26a30b7f758e8e3a1c9b37ddc50fc6fb720a63620e1a457d1360c343df7770bba5b10b76d4f36094c9e064073bdd29aa000deb0f18b219cb0303662d9d2043b8bc45eddaea88349016f07eb60586813a9e57f3cf866297022b58b0b67edf2a45e7d3c882eb742e488e07c18679e613d0866b98cafa626db5140691ab24e645d04b6af54222d5f5314139428403605597f999943bf52551239cb5f5219466c19c5963f53298b2dff12953167f973a1efc81b30cb0a31f64aa22ee2ca57f64a2222e4180d05e80539692f8cb2ae77cbe2a5de95bd5b5077e43b3374967759ba59a7a55da6ef601dac83fdfd1b8f6e9ca1fe46a30e6622f29ded084aef6c59da14e43b9bac59fe770be2508b97cdc8fadfc885ebc2c538a4769dd12e2e1c1aed323dff8d47dddf389b7fa3d1df28e3c07a41b046bd2a554c9da17f755654bd6057af4ac5f5bed5fe54ef67b1da73d404c6c43c496e21abb8c2933820b890036202e149ed9244a127f5d7fdb15ddd4fc458ff6e28fed05465803fb02e0617ebc2b07ebb2eae0ccade0eb60539cbff9a86b620dfe1ae882c7fd3e55032760be262b1e5df4257cc90c3c26d81c50c65154924abcc700be26233641a3b183f01e48fb683b19090d0d0cd8e57c57c429388db8d07d7280f2e34040514504cfee971145f8e650ee24d2f129535fdb699368662f2985e7a1cc527276d5b9a548a94cf8b20d7d6e32d3e95c7537c4d3b2662ab6b823b2a46de4121b36eb976b0ae017825d1f6feb2a85ddcfbcb58bb4cf676b02c3e932dfa6ed0185b37fe9bdde0b941a38d0fd2a7d8c34433016e4ff5d3c2547c271aad8dd38d05349101910f692081450a194478c5c8b2f1276a835eaee23bd1d3b710c44fd1b640917c5688f369963f53993cf33d2f4e1b95fbd929fd8dbf71faf9de89723fd409f0f4970b87c4dcb811135937ea3713c2591e7a6ccc73954984b331950bdb35df9ff36957ccfb733fa7094c9e59199cef9a15c96763de358b4432a020030a1b33632a0d111b3fdf46fd7ae53f2b083efb69e9954f0e4a0dcac5d5e9bfd9e92ab1f3fd5154c6d5e9411ae3ea54bf190c674fcf54a610694f95871e3b9fa94c22d2cefa69f1a9327924e7d32bff8f723fbdf29f993c5de5421a80f79b85d6ff9b7d5ada25c3f6a87fa162f270f5a42640d36f7f3d098b8f69dba8c5c7c57773d8183719d818c484eca07443bdf2e7dac17ae5dfd968831424d986819cbd5cccfa7331df2975507a877bf94f80b333d3632e666227c54e5783c8f28f1f8144c6e9bf39fa15897a755556c66e32882b7f54746d41bd2a7d90de64c06561fdbd83c52da85d5c2c5e695b1259676a8aedea18c5f2cb8b311a2111644bb45f3c6fe8aea33cf50769967dd1774aa02afee08ff1c5d42499995f4cdb7217304aafa2ad993c3d03f07630ebdf35a1bd7f67d42ef9fe1d2cfee8f7ef98883fbacf2153610152b1fe1d14d63f7e281b9088311a60f79b4acf51a152dd6c9c402b4fa52692c9a9090c136e22372d0d1f7871c76da02540ee0657abcb71510970b35d9f808cd4cf7120a852bd6d46ba2b7b19e928a65772958463abbf813c0b2ff600f9c8f2f6d13b09905f6eac445a492ff70d023eb258dad4c3453370227c31612510bd580944af4d8c2b4144af9702053288e602fac5cddea9d10a862c5712d0d81b240c43ab84c66aefb9fc1e2e22082ce1ab447b606e6044f862e24e7429511c2de0227c49ca5b0ce1277c79dd1c5bba508618b25789da980191ec25e5b7d1482f655c21e9c53f1421469797a77d92720a7a20257cf19430447aed04218aece5719fa43d345ce922f662225d008b612f6aa79d2d94487a719f490a3f18fafca002f69285f7c48a98a45c83319080f4da7e88862616ac109dbc61e49426c05edb33613604f6b01590b882cb8bc90064af980600bfa434f4f010421f24bd98c0f09303f3c9da63a30a3124f94d5e9fa43d13095970d2e5d5c3a474443483e56722d388c968d01ae51cb7d883a12c80be1f2e9683e9ac080388ad50e5082cb5e08a2e1fca8b5150fb6084546300476822c6a3b5f74c2f68f98a606325d27a2f2997822d47af1ef94cf80b12885e4d5e9406f11b6534e7a337790571a6dd4beef879889e57c15e750cc08b848f6cec1573dae936b19271f883f4e967888be5ef1162c8f273b15c515c3481e8e5d5f824f514542105980dd059fd312bb042f4f26e0c310328b197d7c20eb46802ece5a598055494c0e5c5a47423f36d348291032f6433df469906074250805e4c60663569a8e0e8e5e1e8210411b8207a7939745690852f432f4f871053d8f2f3ae28a031f4f2680a9cc47e5e5ea532058ca197e702142a1cbdbc1d9f4e124be0f2f25ef866b227805e1e8f4f52fe010b218c60f87c90a509b197b78a59d0c841d28b8937441756aa851b312c99d36dc2b32c3c8181a5efe17e0e3105908d1048f62a51af3f8e4adac3a13165e8c50466065a66f7a2d045f692d4861422865e251a8930854ff8f26c7c1b05298d11d9236b93d74dcc27e946c124c016381271abbdb428b05c6cf1c757ccb751a19f20fc0544e925859f43992c1a05316495b8e5a164b98e405a195bfcde0d26252e9232c941a205b397141afe2676934212b86c4c70be0c25bd6203e0c6c87c0d0390e6933432018d2d825e1b65ebd548ee7b98842f3fe42a9352059d15a5efd4fd3ddb9e4552f6abdc772a59ff4f08967bcfeb3e19e38ed32d81e5346d6be186edc3980587028c5878306485c42058ed83e8605df2efe366ed9245bdd212dbd2b374e33371566457a44d22ed1360c926912d94eced624470b12ba6c8642db3fe5c717c92a85ddd90b3ac50c193787cfea5b9fa1851b9f4dcb2673d1b02af24f25701a05d01f8f1b10008f00d29d9c0443eff01d46c12c9806fa31dacff4a1ba3c74bcce07321507eb3f08c704b13daec24be1365eb310d9ce01ae8d8826a00f67f5b507dc1f2162b9f61f0561f0f183eaf01d82f7c4cdd09b05dda6ffcc2e4e14186a10bac927eb62fcc2229dbf596e0f2cb7f81de2e8a04bb58fcc1a1ed561f0c73885b28ae8d894c1eaeef51867c08878d5f1061862dd9f88510beb0b7831131d9edb720ed69175ba6d6d7371f77e43b291a5f9c1137bb89bdabba72bd2a1d493931ccc862fdb931980b8343e280f02354e262bed32f7ef5c4236c19227af530993d084b5c5e9dac01e07f39236ee64d80ddab9e5f29a979327c5ccc68b3979b75301a80340e64fd0855f591c2a57028a51ce8278f904a453d08f61d7db3a019ea9042c820ba960c324c1e4d4e9157c82e6418a124f20010412965ce94dfa5e40c9a8f2bcde298c7844a3fadc86ca9f45c3b8f864ff22b45fb65a242a954ac57def5c42054b94197570f930e0ca35777857df8338199cd1cfad50d39ab09d0948aa99163f208957c3cf41f239c09f04a221c7386bd723a8b882dff49040c3401e0335121996f2a947a8f0acdfc47bb2c9dac571d15fae15ea9d7a8d00ff84a3d53a12e3653bb2b2d3303b0670c18f33c796a00f960b97630aa3dea6f07eb603678b512993ca83a11d0c44ae69e2d4a12a94e34d6ec601ca9faa1cf9778e29b89f1f9fda4fd0082f4000800e47319804e00024c9eee650753027c13d3397f929821178bd348e955d548ea69b8e230f3321f5f2a2ee6ddef9162a4f4a9da93fa52ed297d0efe97a4b79befd5d0597f7f0272b1f941ba06010860f2f8e0b0e07638ee87c301739bc663000318e063ca594f62205d808fa927c596bfcb00dc783e1e6d22691e03f04ea458d13723ea15ff14e961254f23f5191309c9ded33c038de6720afd4fa76ff61d25f1cd6c10a8c3cafc8c972b7e20c511cca0e20c27bcfc71a45e2523937aaea5da5d3e483b0cc0a114cdec60487457da8532ca326bd7f745e0362e44e286106243b481fda4cd300c55423eed993687d42b8fa9200acde48932e41971f8b921bc085c4c3751356481a2bf31884c21f2009fbf80c32423a0c0de4aff09c37a11d2933a58115442ae930bd20c27d2f421ee703e702117726158e4e3bc8871fc3d057c11e427c2714426c7a5a867f12bd4bb882d771b24c07317805a02be086e9f80f933433f02ecfece30a2d15dac775e863a2f378096ab09983c5bedbaf4ea8abddd5002660ef1d5c19cd5d565a71f78a7543b28cd2aeaa2587f17806e93c81c3e9e616c014d611c9872616fdbe7f0b629f713f62ab4c2fd84bd8ac5f8b9cef0a3d724313fc3b93852af8c002f172259d7f524bbb1200c259461df7e332be1951f9905880868fbe3dc2a0ea50d8d5e754102c8c9b6cac526520da99d594664b90a8532a52ad24452fde52eb8c3b224920a50c0a7d10e4aaf98e886887ea43031c9e0e8553a851d940680b3b700e46118946e2895c3d7397c470bf866bee3493d7de68fb3fc2790377d883b1d1391e5dfc14c44fc77866b28fd05adbda901fc70af92007e56af52ed61f2ada0cb4bf5f7868def450c84df3f1903e1ea488ce3ffc9f79d5417e01525159d3e0d80cd8140edb7677e9644d68b3307c4c1f2b36f950b7f8a002f177690b3bc815e0d64e594c8f257a950a6057c4d8554bfd12e4b672545bb21ffe15eaada7d33dfe93a2c1827fe8896dba0685e15f02d60b76e8808303513c0df517ae59f9a3c3d3464fd9d3ca15d14274f13f5aa89da4ac762d3c7fa4301ec6cfca205616c410cf8989abe6dbf932e0d70c0e74280f10b257cb1ad042f0e9844da3a60f268df021620f041e08b60774517ebb060568cdd94b8f2ef8cb6b0810f0176f67631cb7f7320cdb817eeee45749d80882b6fd729f433ac7321c77f4f2720a26b9a51aa92e89bf5ca8c93bd337c5391ea2527ebe537bd2a4563ecbe671a6d0e5d55a2d9cf026f999b2ad1ecc748f89e5f713a615157f0b8def72fbdf297a127f5ca9d801c3bee63dc61ed3b7a53179cdf6b10983cda7b1188c0e4d93e52a192f681de053e0c7c71761fa4a5b300946ffa097c1b8df9edbd087643bd72243196394dd3a43747798ae9da45996164f9df6a3906cb33d4b1fcc3f2d3f823a298a3f71e474f3ff414721098377896e3be47d52a8b644c12f54a4ee0f31fc0cd269116f5772259b1fdcc2def9b22899944fa51b5b331c1bf5cc8a1cf9f3fffe35edfc739435f0138b920f5ca5500de26485d69b48fc0f4e9d51038a7ff80778676feccb0573e610d2814983cb18bdd9e8bbd5c8ca9ecd566fa8f82f4823409db3bc30ab81060948d91c5f23d0559e78cda2513c38a4b46d92c8addf197cf606f17c587bd31f676b02f92d86287b0fe5e05be8d9a62e84562fad34fbbb85af9bdd38f0f783a9dbe290d7f2cd2d9533dfdf4ca8100ef296c27fdd33f9b8d5d9c11b39b8d58b6a46181cf7f00ddde79816f86f1475b7f0f039fff00360f3e80b7837d367ec102346c974691ce4ee158b05d9909e016c4d5ad9a3a29b2ce70861e67a58bd235c18129a4d3eced603db6ebedb1fd7c630a91dc6b342ae16221188661184af14dc15d810517fbcbc5b6204924eddd82e4f38e7cf92f405a0258f6c25dbad010d1b8f29724940d480c69f64aa2a422eba48beece02281f0b44f4dbf269f9c4f8c6a0e25eb8ec9b793fa143125d01e462fd19c959fefd054cd5529d401366fd672c0e279fdb0df1ab54db0a60d7d3cf29ecd53ca3577ef9b57feeaff6a7909e7ef8b5d74e3fedd2aaa69d7ee8293c2d007c1b8958c0b24fbbfa1b20c3293cbde53ab9f4ca7f22250194a7b05dd264865761ca9c3aba284d0550f5aeea64a92fbd774560205d7bf8db9961fd6f87049b143d290deb49ce5a0267d41d59ff18cdf310474902df0e515902922f462473484f01646be3d318f9f6e2451066e14b5569b8e220f3340b882f99da23c588ccab9e46877f01368551f852d51e2957288c79a95e871c3680bd7e10808fecc5c48398bd549567cef297a9ec41cc5e2c63a2a128607c7dea2fcf3ef081c9b3fd0724083e49147fb0758f23bb9f54330cc330d4c2300c93640aac3f1823c514529882280a4453bc4ca19206952a50a852f4842988ba8044539c00ce2f4da1d2047048fcbefbbb0551a9c2848d7bd3572942635644c51240a1d28752d3e28f8fdb4c524e9f76cd9fed63ddd060e22347268fe98fcc2154b20025952d48126d4e6cb00f7cbc05850004200081083ea65b125b0c92f0c8bcaa0a61d2103f22f822d8bd0892c424eca7cd4ba95ef5a5ba448a9154fd25345c697028a55e003eb257a92ee991a283007c64af545da2fad29796c87cea8d943ef5fca9da23a5f6e0f8d4f7e4f8d23779c5577cc97c7c793c93f05084edcc27e1918fc30c4ae54550eb601d1ab4eb429343e955af43e95575c9121afe9a97f9d2eb907a9aba44556972a87999a7e1aa43cdcbd0e830f3aa9f79d5a7be91006eb02d2885634655ca5123939aa1f12543e34bd54800679834c3a4118c807b3041ace29b157d42304134c137f3a2f9cd6e5baf04a7388794e0f445147c4c9d0ab1e52f897cc7abc02b58e249aa97794fea01b4ccb507ceced3d771116b9879ff6e8ab8937affdb59f1f9fcde5b1297b09fb61874a68d688bc2f2167e3234be9a7c4ba6e99bcc216d351f3ea642a99754a8f432f4e75f32af92a9b159773ab1fe3fff4ad5e9d32c9f20c057e97da400c159983fbee3f393f32a7d10e02bf5fe13a85da07d1af9351f5ffedc8fefd0c84a9383ea675e0799afa94b685ee667ea122946685e46e697ec78d54bf5f14519a857fe329455d4bf95c040d3c62f582084e56cc4228458d38e898ea86b827d82f857641fb7930200b7b34c268f960470c9d75cc02b89984c1e1e68fa1f8799e7c983f6343b5e0701f870f1a2f938b92e20be66aa8f8f0bef43df47c7e3789ffa3eff3e39bec6c7a7f4aaf749bdcc6b95a62b0e3b6a93174da5e14a9343e967de48e9676a8f14fe1ed5979eab91548fcca7bec98bf349511afe998faf12a5e1a7f9f892a134fca98f2f15a5e12f7d7c7935b41b72967f0eda7da5dd91b3fc7110597f1d343a8bba80e4028daf4ae38bd2f87a1a5f3a687ce5a0f18583c6570d0d0e3d528cccbcea7b4a4f53a33522001fd94b557b523f531b0920f7131e01bc924852e94c46938b17d6df6bf27108446420d84f9b9561abea1934101f9b2c33337b11ec4ccf7348dbed3b888fe996446cf916830d8a09c43f534867bb6e414600d9fa04f12f293e52e6e9e30f29d020baba2e8ab83391dc0b13545d15eb917fd84fdb076949e43b5b1291e5cf04f7c436656e2dc4cfc5621ad7abb2ccd53b2dbfc01309c6322ab6c098d8ab8f06fe9999e54f958c2cbfcc91e557214da17206952a9d195a95a22214511128cf06e589b185b23179509f8d936da83c09a150c1842940212a41095d284103187871441080e2910f5fec0e4b4059e28910f84eda7503bebf6623962847b09e53f920f52ccd72a35ebd9c0cf0399440352ad7db4161bd617fb46df70eb2211625643662f9e189d56123162560b67fe01d376256ff90b6bf7d883fe4b7cf5660fb3d96cd7ef2ca836b4f78f067cb7448b44ee3d189ed6f1faf1df6aa5f836941bd722de0d5826cbf6769d7ed504bbbb6b4cb8d7cd6aedbb0a32baf7c62fb655275d027ca60aa942b836450bb3cee381938f0010f422966e4e0d5df3f71a7c911b32118195145152cc6883b4d64b00415b0a025881f9e58e2d5df417187012bd841142743080216557825f5aaa14001af1bf9bb91b7916d2c5ab4f8f44e7cb58c8b33645c6ce10118b148f1636f87528463dcc85c0c508a4f1f5125c9f4f90cdcfefbd2e429fd0ebe3343b3fa8fb8f43bf51d803bb44bfe6bcfbfcd04d0a86c4daf924020b0fa385010560bddab0461f8a657b399dca657059cc1f6cb7a6bac7c6d0eb951795540fe3984ebd1d10bb6c0dc75d98f66b3990d2f40eaa3dee9d059ad05cb9419962949f6c6a3176c790112b3a6f10bb6bce00c2db399bb96139d1449aff83f6a81c8857fd6ab687de7a659fc33ac6ece67895a2cff8d463458d7eacdf9ac057ad512303a6a2058dbd0f2b74f1fd12e594dd0e14f077db122b8a075bf528964fe8e02641bb1281176d8ae88e54992ed6f9f6ea03ec2f6730379875e2518b6eaaa9e3bd464b49bcc8db1781804c6be62f93b08dc50fddf3a90e5006ce6a4f6d2495d3ba94bafb8bb58b1fcb15e7197a476c54622c206b6673deb9e01d99eb5ab9f67dd9758c61d04b2a5e1665df5615814b6c4b28ef572401cc44758e6241bffaa6c6fbda557fc7dd4cfb276315fe1e72efc859fb37077b1fc97b75866236624cb5c2c7bb1dcdda55d9787da4bbb7658b66d3dff38aee4f32422ed6dc232faa9545b4baff885fc7be63b5e9988adf050bbf8394abb7ed54040d89ba3e24e02ff82b3ee33629665dd1e6e5e1a1e02babb6504511cab7377b7d45e885bc92bc9bd83996dcf02ca8fafd927c01de28f1bb6df028e836766ee23c8bf03f3c69ccc8914cbd51bbb944aa5ad6e57fbd26f3f734bbf550ee4e8a77de98f942ac85997f6ddfd60a954aa3782a552a98154606f044bbf43e9bb542518671109f4aa5fab6ee3e4d9211e75a0672df8c1ded865875942c06b6d4da5a73199b8dfa15f02fdfcd3ae23fa3370a317d0029d64bbdfc495706857bf9176edb0cdc3b1a57d8932c7d8b272ab06d0a8907f10dff19ae3de35f4aadfe6d8b7fd2a0f5980037b55f672dcdb0ef8301292bdaaf6eac35d8e78e64141f24532a020230a245fbb24736c35972ac7958602dbcf5e92db2be12c8ef651bb3d3d89f8f4973df4e733016eb752a9f2e076934d6c7f73d13b3e5a94223f969ea780f2a3d4687cc9fa4101f92fe7ce61785d10c0950d2feeb811c972120972b75f3026fe8d331c7c2788b3f839cae20d401c3c23edfae28cdb48bb92b0fd1dda05c62d9663cd01a3075ad808c6fff81cab047d22921476758d4892098fc7631b87c418638c4c57cdfcc59357556323e7ac28b58d7b6ef24837994ca6666279866d2b71debf4d9ead549a436494edcebd716fdcdd14498c6dd96f3295beae63cffb2638a3d77ddefcbea677069ef8a79c186160401085d2380e0c070394f1615458c0bb83b3c13030302008a2503568d398afe98d1b2d6c2d682d486f6ea185e89dae12cbc51608823ca839a4adea0bd08bdecdb5c65703c6af80379add468c92ef86d701af4124aa981652aac903134199199ee16262e28de61a271ba0928d6becc0c78b8db22858b1110736cabc74b160bbfcfb6591d53eae208bd5aa92b62450d96b82300cdff65f1b33e2f45fd467e36b2fe5f77b257ab77ab5dfdeb57a447edb684bdbfb02c01bdc1ed15ef6aa35d92e69fba3a6b16cf796ac7db59d9345f0e28e7bda224a4993a5babdd7f3876984956d924816c5bce7908d536286f147d793677eb71220ff9d6c51cf3cee0518b104818b65a152e9bbfe1e26d62ed04a276b578d98f8e3c6fb776444205e1471ae441fd8661bb277e27caccff004a23aa0e251d598999c67e38bdb13eb93cb828b654103abe4dbbe2992cf9a4c31b28a246a81db0ca428292dc54d223ad6f413e31be32bc204faa19143d8f69bf1c9a47632c3c695bf463f3162cb1f87159272c8a72e6856b6d88281f810d8d138a359650c8181781118878715458e145bfe6e03b06d1971878b69cf7fbd8b27818381b14b803c8e147f743296adc75cf12e402f29a957be05f8fde562dfcfe7d32ed31723b2fe0dd90fd6fdfd82ecfcfb0159ff8f2661abbd899bf57260572fa8e2ea556df5ae565ccc54e38a07c32a069b54a92543aac45df4c9727a389217321f9f2afed05a7eb201c8bc17c5a3e1fbbcf8bc682bf35dc492ca6b52f34666bee6f96b6a9ea6f62cc9f1324ba42ca97955931c1a7270cc3ccdeb50f338ea121c5ff33438ea1299cff1353435af7a2946643ec7cfccd8d02b7f1a8ac38c9151cdabde488e97a979d5eb90e365707c93993742f333cf3f33f3386acf121c9f5a2265c9cc979a58a003484896865fc7c717cde3781d665e475da2e3671e475d22c5888eba24f5387ea6f6f42c99f9d24b31927a1c4f53693ebe6226d04139a48949312946c36f64e64b6f04c7a73e4e1aae39cc7ce975c0f1a997b9f04ff37f9f3eff0e176a07ab95a3353a0bd451a3b372e4f81a1def3de59724227ae1a8f9191cefd1c42eae98529afc7e0478392bc3edb8e0fced886efe76b1d6df4e16c3dfcec86686f5b743b2a59781a6be45557f43657ea63ecb858fe1df867e9c411a87c6970c34be5a34be6e687cd9d0f88a81c617abe3e22cffae4bfd8ebed90f6e07124593407c330170505c7173e1003e37e393b5ab5d2e7333a2cbbd9041f817c6f9ae58c70273930b62259f42cf00df4c0bb121880b707bee997256881ca0bb3ad274c29a3f98f837ba21b1f29936b7f4794d60f991c4702d8978a0cfd0ca16e0e5621cf9f50511213d390b4010c42ef6c8f65e91bcf243cb9894b54b4e9f194a2b9ee45f8cc89988744694942653da29368403662cd75512355719c42c20f8898f32d37e87077c10f864a79f53780a7d47f5dfec9b894036ed634a6e7522318e2bbc49f21dd5abea0c9d7b8e02bc7de4fa79f1c95a6a5e1808d7b4639e3c5e064e270db897a22206f2491fffe255f040d7a5f3d225755fbcb03d1fefa75d9f2b268c194655193f1043261e99480c2445a5155924a77820b042529501b83127f94cddc79f894034177ffcdfd13b321fffa65d9f37822fc61f2a1b65acf677c60ae0deb0a58f9fda64ca478af741fc4bca29c6a342a93fa55ea33d80b6bfa33d70b6df939e09b8b9f0042ee31310a7d0657ea567b165145b326779cde4e3c1376b922a9d42a4892464fec040b43bc3ad09c6e9be0d66fd092c0c8463d4225211a558df38d7a2432b20fff524d36f51a4c41fb3f973d8f8450b60d035212d3f0f7ed9b300f9fdb72440214c1d0bedfbd83d794e9af6ddfdbdc636ac83df6b93e7f49fd6cd81dff3e4393d53ed3fcd8a8f2289f1924e589c2278e249a4bd7ad97a1fdb757a7ed92ed4db78fe2ffe8879fe1981c03c3f4cfc71e3f9c1f8a3c6f3a3e20f2431d6fb16def3a86c817ad215a0f75f9c879fbf27aa3f16411ea8477d3be152ab0283f260260fbf373f1b94273f8a0a95deadb87ca2fc3d854be1b65eb3d434ad07cec6b0f5780ea9499480960322b6fc391f224e185b545893925b8b9ae6f189723e27af028c32348e6cfc62085d6cb44d874421705befe6e1b8fe4adf8af213ef8301b71a2e3d4a19a3cee996c082540c9189b3884c8c2d9e9ced39a46463174488528616db5db5e7ff285b90fbd397260f6785392406017c6ffbb64fce21fc1a973eee3b36b7e3e420e5be6907ebb88f9388568b9a70053f4e9e20fd7543e05ffe2eca77455fe581edea8f709d4527273aeb272a608a4023b47b697868786574a86d0a894698519850f86a7c27ea55c0cb85564844c3daaf5f4343839942bad214d1be3f0addd069dea07d77f550dfe57afa6e882b79a94bb2c4d1d36de2c4c69538e698e3985f6062bf7ad9fb88f6ab1bb4da4119ea95a9bf1818cadda09c0f950e45391fcafdf098128960a438491bbf40620adb3044d2035144353eaffb6008a7a831849b5e95d314b24541850d9a60635c9dde8bf16c7c61582fc6bbf19da84be1d17c27ca03866f189ea7903885c898c9c3e3bdf9d5a09c36b9500ad8c23c558f3287946afc37b7b0a7df3c1bbf40a28a3dbd37659ccefdb43085b4e542ce270af0850fbba21458adf69e8cc6cd70da1412af60b5f7bc1a8de378d06863a8b43568c9c240db963e1e445037ac77b1f843abb789ed62b105f39d8eacf0bd2751ffa239f76c9dfb6a0496f5b4431c1f2bcdc9f122fca81fc28f62d1fb96f53636366ea3a4ed57751827e77372fe73288f8f9387c707e9a39bd6b78dcdb7e86d625befb9d323fe36eff9d76aa150958608eaf987a024bdd202d6514390d8ebcf6a629d22b12caa44b3395587716c6c349b9b8fd3a6de187bf33e68129e1e5f44e76f568fa3522a937ad0684f3825d3af7ad0a83d9149be23b97ce99df8da521fc75f79c4ce2c59ba1bb5ebca986dcf8b005ec9c5fe4b34daa5f3fdb24bbb7c7cbfc739f5f6d89c672a6b10ff9af0e750e7c16d8e0e9d1f67ceb3ce4b3f42e7198542a16c7418888e676daa8ecedb50f9363652dabc7cd4e49141dc86cad7a1dfc7c993f3415aca87993c92e9fc1c5a532fdb1a9dcf99f3fd8876e9fc7cd0af589d1c7ad9e63c4f229ed5611cfe20ee835eb63e6ab07206f98c0a715a37afc3402ee7e8304ea9db2a9776d57c7f19572c0c368251c6135b1464656cc452e58bf5fcd386241487f513b6b2e630906865f52372fefa11f6728f7a292d7df937e7a56b33d400614a8f73b76fcd50dda8468dcefafee6a3ef80d586f531461e1fe3e963ec5179d45b8395ffd5cb9dea8d57acfcae47bd318b953d5e3eb7cd55a2599bef9e554fd4e6f971a8470558aa4a347bd3d53b83453dceb72a37e408bfb437f508eb06e7af12cdb21ea7de19acd3aaa42d7feb6f4e55d296f5ad7aa566fd7518884d3dc2fa9b477dcf223755877150b52a69dbc3e659f508bf667ddea059ae3a8c6353af1f6165d5611c59f392eabccc0769d4b3285b9994d4e3593d3ca71ac9ca7a14d5929ad58fd3ad9bf7f8c369ddf47867bdce3b3d3d8bb6ada1d1faa0d1e2d00bf6d0791d0612adce9f268f4e65d08f407935d6635a7a1c074ac0e683b80dac473d0f972e5dbac469ddd4bb036647af5027168dd686c79f1e456f13cbe33dfe78dc40755e864aeb93a7e4e371a88f6ff9e8be6dfea63dea793cf3cf22ad47bd465b95e6e6e5b3686edee6511a6bacb1c69a4dbd12b0a867557ed673efad97372fdfb51b6c9ef5da0769a77787e54a735389d854167f8bca89809cb741557ffadec6dffa3815806ad51b729eeb919cb7a947e6b3dc61737efe89c7f3ec749eebfd361d1d934e37794adfd2f1a1d3ea52eb755ad467ad16ea4bef25ce1bbad2dfd02b019ed27b397f6b7ae8bcec9d0e71dedadc58ffcbb9bf571b7af32ceae323ccf7bf4ad5ae532fd723a7de1d305436cbeb8e5ef90945a474432f921d7116e1c1e351a8e79b7a9bd89bb7a17787b561c9c7a16fbdc67a8f1e15e77368ecd58dd1d1a939df83c65ee550c9fa93cd9f3e88db50243bae042ccedfd01ed86a56ab47f851cfb3088f47a1a4a4b709fb7889baa81f4113cfa9042c3f8b12d1aa7c1b7a71bee66de86562514d62f69e1ea722d96151bfc3faf8930f142df1f81a7a9b1c614fcfd12b017b8ab6c6e4a1ef514ac313cc30b23c4c3b6c0f6c79bc6916a1e109668061797c4f22372c8f97a1ded368793cd31d5693aa9bbfa0b5b93dd6ebd5fef4dea90c9051ad1b1b967c1ba4513ce8ca3e65cbe383f409ec0f7562fdadb1a73fbd3cfd69f29c2a830c64fd5ac0ca675514f7f928a2235a89d4ae8bd4ab96f5f6547906652baf44426a57bf3ca35db5ca64b32c32d62e2bed7a3914f2a06590145f6cd46223162986ace7c5cf4da61d2d28c6ca9a1d56d6ebbfb2f91b7a91d89bc761b150a823366fba79a62d140a8725593675f541bc45a3b5a137f4faaf22f8f948d27a1d2f118ac5f91eef79fcc9c9a35384ed7c1c3adf86b2f559bbe6f7158155e2f6488fc7f952ce9ffe4adb75dff3069cef7104e5371e7f282adf699c446c9ef58ee247dd1896f459f4c65816f547d11b6325eb512c947c1b7a5108c879d647ed65f5a800df8b1b3055718495bf55e16371de8bdcbcf6287af32caabda45ee943d19b0fd22894cd6b94f54e6d62af6c1e45b516ab6553597f51cf43be9c36b0cd7916bddadf548f0a50ce1b725ed62339cf4251243156ab48626c4e95bd2a3dd76dab3e5ed67baab2575d7d1f1fe70d38dfe383740f7a99581c29a924e21607e73d0356739c045cfe1ef52ef1b8cf9b3c3a6f73835b1c59af8f57e21667561f44dae2d8501c9cda3a37eff52a716bf33ede07752347026dfeba51960fd29e0df599c79348676f1e45751e875e2416e7e3e4d1f920ede5d8bcbf14c2f53691d4a5f6ac0fd2ac9b0fd292e23cd31e1fdbc50a59f5725672bdc1e699ab0d8dbd8ab152e75737f588ceb788e8d4d607711c7a57df0930d99bd7a1a88f1375e46603a66f61a1e20cdb7ad4b3ea6d6259382e1087c65e49f931e773ead57ef5380f4363b370eae5568fc43245126351cfa23db0bd799f44daded423a86f3dcf22a66f7d0b098a6a9608ea713e4ed64bcaef34a75e24d61fc5a243f8e56b3d8970bda1add7b9a9dab7506d9d5e2431b6f514f5b157ac8f73088ab57a99d8d6af583d7ef53794ad4e8f7a9bd856d5d1a1a6f741a5a5f41ac0ae9e07bd48ec4abea23d4d9eefbd8ff2f71da14a123ab026ad8759241ea14a1239207223c71040994404f0d274cc5e965de9553f4d43e9284457260d915f34980bc169b4d78d561cae561f7bf59e8f24b21cc1ca8ef191441623b8f577ebf5d2381aeec5f627d97e1a19f620ed911fdbef24078d7645a5f52180d78dfa470820eb4fdfb14e1d9776d97cbfa3214313c779f28bb3881f7147a19e7f8886a4068baad7bf07e66f6263788dc6006e016f87313cab3b75a7cea6d2741fadf7fd3ae84daf4cf26d135686afc9a4eade2ad03a09dbdd02dbafd55abb09d62b9f0711d82b027b84dfe68ac0dabce7f567c3acd7388e7d00fecdb3288ad6cb9c44da1bea41006da812e9ee4045d4409a5e0bea20df892f98ed1f22b2fd9e84d2281a5415d216f51a37515b6927fdc4f64f37cc767791ed4769ac05b5eb4a99ed1d9667111d5656f9840ac1bc0cf21d982a675b8caeb4ebdd8bbd8e24af20a91081bc15e20f1df1470eed086d084e4b81e4ff19c94c5323a34ab1510b7ffd398bac37fefacbf79cfacc8d7cd62eaf317fbd1a35d011371fa4591fa45bafbd0301bcdaf36b30fad79d6a30770dd62e97f5af7c5490b411749d6f9cbfaa9cbfa04ed560550b8adfa35e2ea75e10a75e95f5fbd6a4b937d215ec5559376ad1bea11dd447f4aadf863650affa59dd5fe9f3cbf0fe033086b7f1b0f803c7371756402a6c0f49b1ed43ed0490ffdb4ce8f8db34c8f1b7a1d8fe8e027ca2c1b4200dd6b0a0e847e0edb0c376f9bbbedfdeab12b63cdbb7d16c1f91006aacefd79eb840932451c259af9b3c2c46f2b128db2329b94b19f6aaac1b358c16b6ab5f7a167feb838ffc62b158558230ef439ccdfb10eb6fcaeea01ea55736aa9cc9407da807ceba57c97136f582ac6afa7ca857fd020c31b413b58bb915830cccd4897c68c8a3700c317cab25a5fc560c9265a841da067de1258ff728ede2e1449d3b3b8f671e3e14278f0fd2338001c0462c4b70b11b1020e28fee8be00bdf4d1e18dea967bd086ae955bf0b1fa46588a00bdf4d9e1ddfc9c9c3aab7c7b25e1ef9f84b03cedf1e97756987323dfe72397f3feba0cd5f95ce5fcd6a7f37eb1f65fc817aaf17490d56feea6dd02bad8df7249547bdea5f51399b02cabf7236446ae9f0e65bf572ad97a1caf03838efa35e1d567ed1a11e466cf56bd46fc038fd3da867a13e732dcdead782f871ead52143bdaa967663537d8b1b1181ef7fe351fcd11245b5b007600c5526d9a02e3cd3eb42b0fd2caaa55dbefa397956efad28832bff6943b4b222a9a108eae74a139ac9ca2fdfe794b34f4a9f9cc9a376458781879c3c2f304b29bdf0e2e4075258c2cc074f78241610e124cb102ba0e2d52f7750f9a55761af5ca832490a506a302da8573327d2e2435654708422328c10c64009f1cb142b63845110318bc5272011a58a2286ce6882124651c408bf44b18330054e4bd6931f8a93a0deab94cab8725425222de5a1c7a2b4ae345a2a7d883d8a94eb433e140414a6904417197ce9220a2e3002073e20219cc1888c141105349668820834a8c2008af0411a434904218d2e3c8a0cf21d9914d45526b9118e6875d0686592efc497bd5a11b6ff69b43fb6b5d0368e24dfd1829252f6ca24226f8350f572f5a62c8ea71c71fc75508f2dff1c54c6966b91e5df3530b831ad3f73adedd3ab0e7be5443ed4af3dd1a06851665a9006d38634222db35913a0261421c51357aa34c18c8f09594cc1094950014a1a4a1441095d3811d2020b39d0c0123420030ca028c4e0c2bd5ee2688922eda92aaeb4a7a13571a5fd0cfdb8d25e86c6c495f62a0ac695f629fac595f62d502eaeb4bf41655c691f43635cbd6556c5801fea7b0a91165579e8b15ca56b1d0a816fa34c0b98f59e7a965ef5fbcc8dd85e377269e45960268fb3666d04a293a8246d31a7b9a2858ca119112400000314002030140e08460342a15055551f14800b87a2506a4e9c47b324866114848c41c6184208008000400c109921b3020021b9ce50122eb64aeb6c6ada30e78c38f47436873a73efdf764176e6a9a1d9147a889eba6879cb157b1e37dab80d75741043b305077b4f192106a9515f8ef6e408098b00635e15ec1898bfe2b399a7149e13eaf9c5a1411b74f60a6ab41aa6c1843c04d8b609fe061cc4a1083613b849deda08e84caa3e8bd6859b3ba63252682dbf7202bd3fe60ac03cbb471ccb10f261dce13800e4f806c1132bc18608cb42050b7e31f8a62358a261d42851b128803f98c4abac9302cd94e48cae05a760d03ca8054537d4540a2b05be22697c283ab513498718c08d91662cb8de4925d96a2f172eb6dfa8d7d12d616364c7f3b4b0374175e4a672ed9c83660645042c852726a07f692eedc16b3749ae9ef61480991cba69174d5a7114ac47a72e4eda9435947d4bcfd5dae136bac5ec934f89d65431e4404bd01daf2b46270d442da29f9498f36494ca756580a35ec0851ab5f391b6a667b20c18e30913ce18256f4a91354506782af799b2ee53fd2cc7b1adcfc215d8bce7d4f81701cf7eb41c962917670f88f3eb5b820d1e4ab2c1f90888d41a4d0b4222c6d79eb5de00ed61ac04515ddc9d015dee239bcce65f4040e0ec961268692211e311c522411548ef395c2238ac0236e6464e2f6e3dba64e4bf50ac71e9e0d0b97f53dafd05c3a2480b3763facb2be5d93ead9325fb4c0ce2e0e987aa50c63207ebef706644597ab9bd96e1d06cf6caf3bbeb037af7740fb335942aef57daf3e4b8bb98bf7a9dc2a96032ec64cd8bae3231585f1dd855b2fd83fefe3bf45ea4c27f9f3c370a1bf27e658fa52d6677e7e2e249961b21650affaaf0d9b883fd9dd1ce4443b52438cf16d589200f1594c47a65d87274442d28d66ddc962792ee6709fb77bb05b6fba82d0b087635bc668bf17711cd5951ea77e9d54ba0cfd76520fa166cf9f245eb9d13718576178556802d2330e7162cddb52763611ba5ed00348d727b00b89ff5b9e0dcc63acb6b9f6fbeeb7c8754d24fa044799b4407846d554198120c3f9f03c33573d7e4f2b379c2d008a1ff7b925a019ec8c9b56eb0dc92f067c0ff997b41b3aed0fa77568246ca12ebf082a815b6fad342fe25386dca332f0b992ab9ca05de1244961259a4a430d8183840b47e12a2e73b50557b23dc77ec9261dcd3d5b1aa473da85a448e1a60e15ea0504f41b30cec9f8808e411f91063613eb297697f83f24c8f5e3b6335ac8359f4d2c60e2df61c6dc18f8f027b31561a0e9e391f90f9de42564e24ea39beab2a10152a244b1c660096d5108c487add2454180296c1925fd9c856a99a5615f29b9e11fe10e0dd75192b3dc471ccd042dadf9471d84c3eb619dfdab3f592af02ebdb721594e3e475a1a6eaac08c77b85b89eaf00cc2cd2ac2ae1bafb8e4f1d7914df86a59f6d67e5623d64bece875b935a07e3c7c590597e1beb163387cc51e89e226f798e7d25e14a375f35bdef555e55914fe9514d6cb0158b514a241cf723074350f63c1725e40bf684af0b2658e086935a1dc81415c08e1698d0d8db607afab281681652ec3d3f0a7f25fc9833fc0d3f3edf8fbbc0da1d507c7fd7079f507dff37bb2984e68d3edf09ae5478d79a628e0e3462633f9ab331a3060c40ad4500140c03a0bfbf655db27a1b30a9b3b47d92de64470104360f365416d6e2ab5ba12a14c8e3ddcb2dbb07973b2a887f85fc5168d855d620240cf4bb015ef0098eed93fe2a78ba775e7502900ad6cc339dda28c9018b84b1ec0632621719fdb6a66d0c145f42ef0cfddcb5034b9ed4484ac9c25109329d3b5db5b2ff77e20544b0ad2931cf887e639fe264bf284c8c9cb16508c9438580078188967020745bbd438cb3b0185cd2cd19d02b4fde5598cf5a163393bb8df7fdfae82005dba4f96752d83de3c009c97bce29aa0ab636873c87281875b0b0bf38a9782358b30d5b795474f91337efa02646e9625822256cd59c525d77f633f149d688793d232c237838adbc6f66abed1538f10f27045cac2b76cb5ef40572b690e27db40e9584872f8638d1eac91f80f4030cbe4a317b02d706cc773f85f058b682123938557f1a4eabbbcd978057e1391d10c4d4ef212e7b18dc177d72b95dbcd69779bc055680c5e4a59b464a802c08b37c7efd98e28a24e0852b3694405b71f40a0addbcca6fde6004c34667fba20cba42a99ea073b7ffe22ac6ea8d1e8e8e69246c4d4f521ad77a4271d158a8e9d469ef6ee08b86020b0c65514c133ee16c7074575e3c0f60e2f6edb6319be58035a5a64ba5d6c9ed4f931395989615d86311c730acb4e44abd53a9ecacfcf4f3e5768906f6f7a0000f6f5277d341c377932c058e32dc2c7a370901bcd0360c0d57b996a8c33452e3221e96f67134bbe56c7b87dc803877cde59263eedc50d3d9fdaf611e6533348dea41a25872ae9b6aaaadf88b8ccf68506dedfce99024ac94f9b3320380d7731c101a5bc24903023e50f0930305123eb27baa2b394e5bd899348fcf92f09c3621f23f0e02ecec340e40d1084b7d3bb2d7e1f1ce9c9061cdff625e8bf70c3482daacffab7dc84f76ab9f71faacd19e4ea386d5e9135b9f4c4a16bd9c16f3444a768dcd1ff91b9df8af31525b197634a8ba4b55046c8f5600e57388bf5586b02fcfc0d3f56b33c0b497ba60d6366349a67342a7300b8410c7c92f735ee514b74532db30f98f164989fcab79a5b447b17a5e8d91677480ff18133dfb0c97edd1762e8052ea0c423b06a7003ff9245c8f4b162687b76bbeb32db98e8bc725fdc33ffebd98397ea04b37386ce9d2034f1336911c06dc61b435076e4193193742224b9aa2fa1f99f1cc3d3458cdfcca5b6f14bf91b3dc0497e4dac11970ff2683878160cbb44eb272d2cad826154e378606cc728fa00f5c5db0c8b5916a7b2a16a2586153c0fd6f840dd77bc2ff9a2c657fa318026d8816996ca4d8b7f494fa418f7f6bd5fb09ff6601ff01933c25c89de8ba0bc10cb29c6edbc861379703c9eaa2c20171aae4e0ff54a2070008db3b666bd782526d856c8101cb58a32e37a25f9f90184e21f037ca639eec90f6a62b2348fb4a00ce41b5646ed673db1d2e52524b92441b06b9128e1e003ac91a6dbc1e47e0b4e6bb9ec5d23354927d2c1a87c02c77790653256041ece1a7b7d2946fc5c5e105e6ba8148b1b6a5ce7da4e9de0d59612d19cb05a4dcff319e604a338f2318e91887f9bcf620eea4ff21c368d3d9c712056e6697ff333ab3fa69f2683702a3989f5a73df3f9c541c0774668994ec24ad4e390380c90ad82d6851f598b52a65f6f471837c1e419675f9d06607e0062163788a9e7cb53a1e8261432aed2415c9088bf22745321120bc24270a1e874d877b934986bd9208425b03f78595a0d21137c7c129b2c8ac343f7bc9b2dcafdd1dcbb949cf35f1c8c7f3de9148cd7a164ab339fa749d36f0530d373bd14330da7c382dba7162305179f18465bcefa0d3faa3fc1b69e816a455b6bddb07096dd09ba68d67673c9708669de7d72b1a55ef05628d340114c8742875293a5cd73cbc0b0bf47e48486c727478d0f5523c05e10d0bd3533c13840fbf06912a861c432d33edfcfe05ec510550d9ebb4c4441af6f57b94502183941c77b089c72d67e6e61c14c7b3a2a5814218f29b3c9b0efc0ee926c8624d8fbf44dbedfcb4239b9d006fcc17e11daa85b23f962af2fc60c5aa90581cc3d972dbba3592c78265834159bbfd2b21126e0eb9f86531560a26cc438b53fad0c4830426e1d7d83ca03cf8d800d2f37a807be055ac00fe3d70918e60bffb451b4221964048b108f17e0fad37701d4249018a02c1a1a31f7a51681e1b5c6bfe71ee4d263e0d524abe45deb3f4023c30e473b7f0849ed557d8f6d368f5d97d2b537f3879f4be36aa04d2c6b659a6deb204601ea65d33d3430de85bd1f61361b0818b27791b20ebafcaccd63929d40f29ae7b22157d9f3be48feb7405f4ded836426e548abbfaf6b8a379184c741b57fd29089fb498d56b04b034ceb464a5a7f3f2883181fea52c96c2aa25c68d6e5756d10219f64f956d923f8bf9cbd9b3f55fac39ac31336b91b1fa7033926293ebed6e683dd961265c13ec9a1e263701d78c8c4e056a359c590b5d1b41b80c1d1b753251df85e799ce6a5045268792e82006d0151609ecff36eda840da8ad205f18ba58d412738fc20ba02937518c7030e6532a6f98636439becfd400b9e00c0dec61140c48a0d44eeb5a7a73272c857fa2c9bda81e6705a4c771e294a440ed41f2fdcf42d41775bad30498a129cbd4e3f1472bfd52b2c1bbf30f5d58a580a30d56532e31016b63f9eea9b2193e8ef1a5ebab11d4b350ba5a19b0a4f0ab95111705d68d63631edd0c94963cacb6ccf0fdec74f80ad067050f972e26284b1c86963de31b40cddfafde443bc4fe829940adc7e9d05a46fc81f65ca648dc34f10acfd1d954bf7d02c2357ee0cfcc8fe2bef0d6a847649486fa47c481399a254b4f6f76424ef3ef1f230ae68b9228228b59944af821c8415eeca3932e837cd7d930c7be8368721025ebeb730de150dc6347260df40cbdbf50c09cc26880d6faf475797d7c4e956ad840514c55c7552d3b67d538b9bcf9837ed278e8192352929a4c997a059bc4812080923302c034eefc9f0923368a1a08eb42361c3fbdaf4f2715a452dac500392079cb940c47ad4a949b6009e907d060aaeccc40d3f5857245a4932fe796150801a1f4501f3206a0dba33d540f8e30f5c1c1f78b4f78f0084faeed3dbf600e5798a8264cb9fb04b6ae01b2e141451adeefe678b1cdce312377b17bfdfa47773e2800b2d0bad3dccba4bb16e8336a06fb6ae7a83cdc6bf7894fbdfd37243bc7da30bcd0a9e5df42643a7aa092650800d9868c9a1296ce2a94cce78094c3557d2614b2fe6bde5b714987f94f46c2893bf204a01b4bbb5efd0cb30b2340092efad1e2dfbf7be3b5af0e884ae76e2b5972e75ffae05f5d5788558e1083c2e886bfde1cc43dea2d5b48f6a0b305f34780d9d9e08ed150fbd24e3b50b5935cb0627f62f145d8558d53f86208cab83a579b118b44dfa3fc1742b8504608751f3f683d26a0d55e1c75485269fa9562746ed7c3cc5e07bc366c43f6296c330f151ad1ee2b7e148f7d24021c213f3eb4fa471947ea9be5cc8dc4f77f209c13e06ab21aa6aac5f21c515fbb6a026ed0dd653f92746d07b87da2e6fe9679cfcb746dff516519a53e8c4d855733ca604c6f9657d04abd7fe70796529ffdc74b6c5d900c2c51a826aa517b094f433e414d26dfeb71a4a90e0c9b295cc4c50f67d62f9941cb14a52fac207616c8a5f19bced298c8fad3bd43233b3f061f4b857db0170382fca0041205565da785a3630b2a0f2bf42b64bac78455b882ebed29626a14881e0827e65c87922b95d96bff5f997abb8b9cc1f1a8ec1324c0f5f302716403dc407d5e65530afbcceb98bcc96ce5cb2839cd0a41e37f0a0963b5a8a96d319e9008e50be38ab9c0428cf6d93b7881ac8fe49777e6a1161093e5b599239513547901c0ef5d300f34c4f997bb71691b389ffdc1417797de0489bcc3ecef080559e2c0b2524ea92ac2977d240f9fbd9c97f524b7ab0916cc258c0edafbb9d0db347818f231adb80c183337d8e24ccf92f6d0db9facaaaff1df76db054aa01b140a8b20da4fff29610e21ded73aef881afbcd337d8d57581d22254323f5c16362e73e2ac50655fddeecb95bf7b334b83f75bcb127fdd80da8ac2dc13cc9bf51e235c796d434be731f16251e86e492af4bc3e8b056c3c8b2d315cd5bfc390f90364bf6b1920ca59e0d3b5b7dd04112202d80f93b756353e305b115ebf73dc7e6557e90ef98eb11c4f2269688b7ae720645810547417ef3c0c9929aa7117147b5003e208396c7bc0cc1ef2f17e06b1a8495e49af48fa45c2b7e15756b19dc1c51360147920090b70661657b1a0f5043c2a6bad8eb9def3fe67142942fb2462f09510aa148703a31fd37950b6198bd9cda02be30640d4efc470e418716fb791ecf39a4c51ac4a940b696cbbfdcccdc50aa279e840a674f56874a23c07a1aebcf1f8ea8892b15c4d1e57629cf3a4053cce171a6da9028af0dc6cd98292c53253c1a667798c1df6335478da37d55a7ee455cc76a30e9c3af82ec562d4f6d606b13528f63a1a3ba6d5a97174a622e3a7ee6565914304f9cd7eaa733c25b78f96c0ec7620475c0dff168baf8b4a4fdb23af6f99a24357399487596e4128bd43935545ad4837f528d0376c0814929aa13eccb0d2d308b7eb43d59301f1757f76fd26ef2281af2ce472c7c03d900bfacb78b23f038859a19b0c26b9262ac646aa8c7ff712d05fc658353222e3cbb57a59deb209d4fa7afa030696b43361bf2db7f5944289e5568f2e81baa7971f5e23cfdfed26b6d02a38c5eb8c757542b6f0f3390b7d054a5358761660d989ca3b8576eca27d0660537aff2b9e4c0e90925ef666972cde88817baf0b7317b86cb91e84cea5d521f773befaadf30470738a71564d4af1c0cf50d32114f79b207af534a36980e806f633bdd4c05996d020bcff036b2774ceeb451293bf08e7eea6ae5df6c651ec2bce20ea63c38b655e4db54203aaa6c9a4bb86982e67253060ed7391368b56e0c0ea29c86ed8bc1e7b9cee18237d261723d534567191f4e935d5554f4529e1a293ee59bed4539512f866003265e09072467133dea0f1af01d208541366e4f4cf3bc6bcdc1467b9f84c33a2d289ee881eb67bdc3ace520d07a3cc3497d7a84bbf06d0b932dd458b70c442ac7f529786da0826f83c8ed940d562cb55460078175abdb00dd82420c7e81fadaa7171b39cf24dc97fb1641a713d669802532f6d3079fbb9a2eb494323c2142bb4b9f3f79dba72e1ad83685b0b7c3d82070b3e7fea88dba0e6f207da421f2cd348baabd9fbca12986675c36bcc91b8bdc5b8f491c8f47943bbd918d3cc26c08cbbba9d6887ccfbb09d8d63de11682f034c052eb02db55b6917f63c851485fb43785344cedbcc768a770763bf973a393c6f28b6f5af05bf0461ea44a5783ac001c70343da841f0dcb77e8815dfd1c3bab9a159c7ffd4385dc9fb509c3ea452f4583ccc8c6a6a4fa9a2bd5f52dc70c3dfd956dbe362a5a0fc07ef4c5612f561e02023bf23d475e57b95e00250bf2ef403ef26850af580d72d55ab1be37d19fa456f5d59d47ebbe1d7f0bc9ca1eb385d07f7b8360c98f9fc6d1d301f913dffc994ab42835b5851f8b8fd8b1bc2c29e38801d10b0a76751300d43702025c6f8a3588c88ab066da9ff86dbb090812bd81f51ae0deb696ef1585f3c79e88553df648a40fddcd017a6475809a335caa6a72e2ed39edc0d70f7dc14aea300defe2ec880091d7623c13c0b4cfb41fe3335a87e80a35a000ad12438249d512e72fa20a7db76ae196e15854997799055c4ede601658ca287347c0bebacaf9f7486457caed04b3cb4a0f63e35f39443d7143fc224fa3deb0fdef0a9896a15c04b6eddf105eab4bcf2ffb921fe42d5a6bd0d88f86515fc20865f2c092c3c619786864816632b1cdfa8c3886957a5b668f1beb3dd426920fc17b898af8ed4f5813a33b4a12f33faf7d016d6442588f397bcfd138e4f37c713e57e565795788871adb50819b28e7190bcda707f80f360a96c0101fc4a7e941aa815679a4df4baba9b764a2bb5e82cc3a69d7a2100c9a24c53b6b006432b4aec385a3c98681090c75de64e92e50c3e53ae3610377f9b2c12a79aae76eaa57a77fe8919efcabf8928f4454413aaf9c6f22733e067f25daa0dc605c4704d8f6bc08f788a8ba3ddc963dc4ed2aab92dfc377a78854b67240dca407d120b20b1f9bcf4e15c5272e97ba6ed713b658cc2aeea04f2b48548f9e4d0a2dc8d1e198cfbc4d8c241b618bbd37a70e1b53b7f35f9fe97eb04ac7341d30ea3f095b352d18945839c6e06da5bd9c433096561ca77a8b4b2dccabcca5cbe78156749a288924343598c0ace6c4d9b25f96f33310ab6c17418f7a8e53db879741354ca457356351d0e533e588382383dac3a8fcd109c4d622badd8d31fc692b175a24c11b5fed559fb6bca6e650213ad45eeb7366f055da07e7ae117e9f0a874b087babcb2c187c3bbbd0e80accf7deab5335889944f6b59170ae18a14c93e10458c7c6acb3f746ca3d04d1d12f9fab068269ccd8ce395f1a8249a082df42ef134a695df9eb05645549ee660f4fb24d363b30bae3642b71ef55eaca452de79ef08d08cd56e491c02aa8cab95abf7ede2ac3b9e4f00497d8d86f57e45c7072c76c77b13266bb018fcb091d1d261d5c40d34e57b5a2e28946197b7f2b9c620f4d0a325abccae43722c737c38a22831ddaaafe1b98a8a9f22584fb5b9411232336d58c320f9fe81fab6ff068b6d7e108e555723737b0e1ae58c09c5aa13255a027b9c75108592f92f68f326b569f9d79a76f379806aab405b82b5f8ca5f158244a871eba458796e79341cc90ae910aadcbe8b3dbae6804b6482530da90a2ed0d082cd3bded5fde62e86e9c2e40363546ca858b415d17cecdfb135c76f26f157c7f8665f7546dc0a78d39e59c60fa6f258b0830229d2780207d577a3cbca3bb9d6e6f6dabc21ac7c05a95bfc0fb5152c07cc1b3d9003c6a56501e105c5577e37ec903010a3595edadfa5968142750bd0ccdc54aa751437d20117b91d3bb932a04d1e15af222513415f34d0ddeaa769d85b69a30b69d54fec0252df50dc7e234381f820df53b3e74f809d3b49c293830d9c7bc925a2a9954744eb070360ccb3c987d7ccf5f46ce2af1e425a004d12ba56431ae4f3a6097306d3b1d063c9c5ad630065ad37052bfaceb7ee1e883b404620bb4e20b4a200437b56e0a980f13b929a1b4666ee448496568b9bf43509c7f927c76ab4fa502affbf4cbc11cf752a40f3520b0ad247e9cc7fa69209f1323a0d1ec3401612f74e5b184626642968e4b8f5abcf7c27267d2b56b9a38bce7759d815333e1e7e77a1f40eefe64a53103c3f3dcb4c50a1ade1bd0a643e24dc1b899ba7b2a10b1f61a76d7ff4830f67dd64d44ee5e3512317a4f3c1710e4e4ec3c221b59ed29337ba5f0f0947755113a75e189ba86579f391f0bc31d1f432d2e8df17334a90b1df4d76bf5104bab54a6f3817d9c9b2452785d5615912c0e0d11adb445ac1a274be7a238b011f273b28ba170baee079709fc575367cb98a0cba31f376c54fd86bf822729dbd534038f48405f764ea7869bdf173b608356ea4df3e3cd7fe0dc23f88076d8fc5cef1618309cf431b5903dfdb829b53d362a60334d8458c35eff4a26dc7d66a9b51b4e2fd1ced644a4231e5b13654abdcf4b4106a8636d60825df5dc8fe18e3b216f98944445d9d2b1c7d626ec011520a5c5a8a40118f481a8d860f055c6f4b8382535784348b58e80d50094b48222034da612662ffe5b2f9db0cea9fe948c7698a61391fa9ac5171f08355e3deac83916a0ea38f6bf54f3a0d131d5fe9ac7f758391d18e2e4f48b638ef9bd3f7a96ea3e56e3c32a8ec3a32b1cf07284e6647f8359a49b4e444971a07a3247123f48d9d56d1dd98fda8c226360ac737d235fd99a1c58036ef64cca6ecbe437a57bd3e40c516540c096b86a56802e6a8958df94d6bf550517dc43d18f26b1f02e4b62c79da18fca3c5a7bb10a1790ab06be7c889e8fd11951aabbc0c87496ae38b842d6a3ca1b37ff1d2156eba02425607d25fbb7583fccbbb75c7bc35048571b097738ea622b5fa9b0c2db1eb1adc1027de39184ae8c68d35d9e086e81aa35d4d1247eecbffc81aac31bb55f4636a7cdae898d36c460e69e8a29683dd6e264a605508671fec7b06d518cddcf2af1e5d284d0e657470b47e548b682f8fa6cc20c2201980ab6433f28bf8c81482fe2a4a1d6bb44e94170c398f264bf9a96d8700f8bcde61cebe4d8835bb18961fa54ab3a50f0d9f32ea003239e0b1882cebce7160e83e0ee7944285996f28036d96a4360b30a97d72c35cdd348f797ac59181b5000a6c6765eb18ec35968c178cf995642f0b9e3b80bf41540ca32d720d11d50607037c7949691fcf05f20237b4b98c06bd31507a0567ba3d6b36856410dca6ce283cbe86098fc9d2e3d051051e3fe7abdfbca953fd57da6a86f7751a16889faee8491201392d844993284029efc7459f8179589a61d454b6c9aa060698689e6e98f0f2a5c3387019900d8e496c3a640166fb94932fccb23383c0f046007daf02db9037c9182d56a18ef1341a4458c6bb60bcd1a76e655c59b6d8d5e56f7abc1b7c8ccdd6e614ef1003431b35cb39d2e276383aaa86d6192a8df61a5714448dbb0193282c5a1675927f61cb99582b2c01f590758bec35b45541544587f5785aecc41f046b4b26a2afe4d4414d7e0f363b002c3a8a7691e43f6a601ddfd2bfa72176c00161a625d0647feed0b4ae1655e4cccd60c2500afb5cc5c64a4c8a4fd46211cecfce6b003cf71286c9a5d07194fbe36c33500a24dfd0e6af809ce1baea08ba07af24c587117bb690930e5a6a556f9cbca19d5539690e560d2fbf06ccf4dcb23756642c7581ab076ce471ddfac2208d71f691d30977be11adc41f9160a9316b770c028b16d01cabc94a8a5d3122366865678064fbae00243f4b1950f22a8ba61a59a8391157f99b01ed5fd03e1e55c54bd70600718cf6a76687fee34e15d30cb373683c4fcb3119fc6af2c2bb19e0d2888296dc58b2c8c5a4e9e971dd64efa8b73703daa03e1bfab26fdc55140a990622efa2dcd495c048d700f543fb06f9f76f3f827ae889010ac6de40e35a0e4953d0887d6150a6e58d556156aecd10c1e52e160ac7003b8c9f216d5615742d364940e0db83e90aa11efa60bda8f9f332595b0c8b16657a74e1b4e127a556db45af883062df788f5efb4e22b38c3d89a4d5e46801142a1e881d2d1af978110a557411f4de22cb122e4c7bf5c198f1efdec4070e4066920da402f5c362f3a3cdbe058c852d34c83fe7d1d10cb9b8b562b1bf569d84dfbd6af5758f894f32f190d5682b031e85fc2a2ebe00a5bb58f92e46204d663b02a257dbec8d392309e7245dcd3ac751b664eaf65ebba301826bdaafc1bf6bfdf7736b38bd16a6d4744752e91ee96be65999f0266de6a2f0c726f70b601d155fed964a54c1433c9867de10334259506604d0693da386dd1ad411046489c9996f90b285945259e1ef205435843b83823de8e8031bf1f30adf9ccad9257e221207cb260bf113b50085a4776de22fb5b42c776ba420bf3537de59a94fbc32070507c09c1e1f46577be5fcecba919fdb6890bf1bc100ddf1227fda20f83f1a6eeb7c95643c10ff1687292e06a7e34e8d89f45f943a0313ee3f9c783dc84894348f0db10e25a22c4e73d74b16b1412b4cec359ecc802e9ae5fec69e7e8d71fbb671ceea31e5e4ab1682b27fac9da898d653a64532686fe4263d657b0f3c4f2fdd9b9d55d920f5566c43165534fcc32b8d41688929b37721337d676785df5d90d6c95b70aa3b54c9c4145f5283bfcb29a447f2e895afb4ccc9dd59dedfad5a316e8cb3383a60670450f37d772af3b71de788071b50f864f0693af4ecec14e2cfb543370d8874fdd2de186b51076580b317599db116a5d6ecc757519e3fe851a2a7a0dace057ab751b3ba501266ec36c7e009f1e8be56fe42d3bfeb1232b8604e33e0999a3e499443de915bb0afa61881fe2586c4e94a29f87614a2fcf192b7f89dc811a241370f4ec2b0a4b892660e477e5824ea5a9e5212ac0171ed92e6757235279c376d587fe22cfe539004559c7108fe25bdc7ee77c37ddf14dc55f15902bbac49fc344b50ef57094bb5bbdb0115ebebc6e70f10c2263dbe4b4a2b03d30cbd6ec89b21370232c3b620cfe980df835a1986974b7b675e119892126a3f0eee9351bbb3a7dde2dde9fcf684b353c94f27f82860d4f4c4ae5182ac39adc885530d708e198547f0d40623405b179c12e189307f3862800f6114e92a1ea9224f7e066add81685eaf82ef39f7f3d5d486dd0f879da1eca8a01258a0e1b1dded50e951e37828f4109aa067e1d83715b46a51ca6bd961ba568452c8e4717da52372a97f32d45714fb1b740f1911c4511c4297bc384342c7a1cff19434a9f39c73a51dafb33fbf32738a115150f1b1a18bbe3a3d1057c9a9ff3b321adb3cb5f1359e273360c450de19cec320dfdfa85eb4a0c9320814c86f8415afde78dd8a1ed57bfadab287058c7795c475cb2d07e9016ea167579ef498610b4de6c9d506bc138d696f35293762dd4f9d1c58fc7651ce4ea0da97f6dc261ab3c82e326008fe166cdb04bc53ee1ed173be0312269ec9042cc474968569263238c6ebdc0e333a242d61c323abab2e39acfe13935604e4234c90336958e6aaa2827fa2cd409d8f0b735b01e3b99161f97e676e3a28576ca78f0a4023c8996df11edb1b901dd1ef540f6ff2002ce09acb823ccecc871f75d27fc94ad04ec9b02c531a6e28f86c4da148d3684ded38e95a65935af1196f0aef2b486bb8f60a5ac601fd05ad3e4ab542737b59d1bbf67435c2f8fa71b3a5d9389ff8f6b87b5072ada1c36020188ec87396489d1cf3407e2c1090e10e68a9ee5574d726579815053dea7ebb76ce4a8aa27d8f8534ac006323bb18cd09a4361b4ca35a2166b727cada4529c6ef11bd9d378f94727e4bcb48831637109ab92695e776310f463df87e1f712cbde870bc063f17b6e3180edceb4cb3089c0606b02e224214628eba15b36a2ebb2e50418613ad3eb401dde0d3f5e0d7670e38c6e9192f5c3ddbf25124bce8fff8d7daedbd0dd53eb877b24d16b4558ed9e669990155658065a2f4714ce6e3fec53d8bab8f5e2d991e2c720a30fea37c55c78e1563b66c856262113b50a676c305ec35fd8e02ca55be72e466318eea47cac3c8cc5af41ebaffd0f15481f8d11250b02e519a87ec398396c20128ed913a9265eadd27a285a14a61833c6f7036e7c0372604f2a7602297e32a244992a9ee72f611669377e18791d661eb5abd4a7b71b954c456cf4bc42fe6e17915782d81dfa9d6cf41108bf1c82aea2afd361f261db4e46e5f5a012750a48563dbfae8585b999a8648bc3c89083cb9e1ed3d12cd38c465493479523b856bfa75d4c5ce766423446c1b28a72e88ca3240ab684fc84966dc600adf18ab6337ca522a57717225ca041818b4dcc2e92b22b990b344fa86ea86461c641a2170265a4be2516630dd452357761b200343a478bbf13ebacecd1723cebd6845143ef1dca84119990f5113e644f5f170af0a9be7c10895ee1d77ffa1f3328c733884f2eaf677c4a99532209c5aa77e6cb91845aab1aa84e1756a88b48c3137821bda656d806b3be7eaa5f2f5a9a5b797be5b6385718b72e528d614764856a459f8f96a27e33d3f40e6ba899ba3e24779d05050ddfb3c2f1b6b3b94c1a7d668009c4211b8bdf272b0360c57688040bc33ccdb06287d942b924818e8e8ad1d707b17c9b4948003d9b3e0f4232fec3a002ab41d3c8e3c8fb8a7409bd06698c18a5b61ea6b1871514b91f0916f6d3f5d831d07db55ebc3f722b08c4552572946b9b89dc511140507d3bbf908954c75248d33b5a99d6b7c0ee69d1886e68a3054a3dce117a8d73e064d470a501d1d7bc4b3104721969fb418ea5f19a80e27fb05db625bf25dfea61640ef10176d20282b55de498b48538d334e9b8068bb0ec0f2dbaaa20587df75494b1c162b4b6959c9b4f2447c27df1859be58ba2fa1b2f822c9910ed67ec75a2221905ad19dcc03caf5052d0262a1f74d2d8e596d8a4302b88fc0edce741934b1d454f08af903e84698d25a96e89c188b94df41a22f957025164881c49fa72bd9be38559b72e8061e7125b6a82f979738af5ed56e5d15658ebab0e3e09441b004a1382b6907802834e2e534138905651886be06e843e5d4988e774c723404af9ed0f5d23d6fc9f249f338c3a3cf82ddc5758fda11e313fdca6e7100c75a026b3a9be6b30eddb0e8f1ecec1eb6057bb2aa85b92ce896ab93f8d6cee8bd9ad61b643ed74878a1fe500c1560b2f5623f35a423b08f1a7c9678c21c5c6b4e2bd93df0c3dc27187ccede789e79fab27501e0a14c8f0197ab4dd35878d75fb556059e0375ecbc952a0144b5634fdd9e0be651e4cd5c3b2dc36e8b0d9976fa57695f8213128f2fe401fd8158cb22c074ed94d782d5ff37ea33ed73985321c84be7b63de30a6d6a7ac4cceabe4b490eb0ce414670e40396321fb2d42ac1bb1b1d67524b5eda040a55600df0778ba6891438c304e0bb9af803522f7b481a4d2029505aab9d7e0424cda426d827f547d840e2db453055a26019ebd32986e9dc5daa3d4e58ddeeca234ab1e56b989d152ccc8864e61317da767e6e6037427d1e5b0d96a361c284318c9dcaae13fd4896397ea70922a2c688b13c1c65dad6773ebcd234482b67e894752b75c2684ce1205e718630e964745a05389c3181af4959715a76d767f328b9ba3113b3ab27fe30461dc5126cfd12a76c16934d99d7436bb410af6201d83a7b12a33e5ab25ed5b118e5d49a5a560344a2963302dc899d6e44c982463385a9103b7da2b932789655a8e90c162d5bb88daab7981357b0e3ade11ee034d621631ae16cfad9c5bd99625b72f7d535226420155e5af5b2db9874defc44877be7e85cadf74576da40e805f2f9e0ad9d0b98c3e93ea909f744cb30f92360496e15fa7449a28328f92ffe65d82faa5ee59de99aaed67e2e4eead6b8ec5eacd986c4c4e6078aca90e0e9172991f84a615131677d8086f58f999edebcd891d1bc4cb62d70fb2b7718378f908b28d9587c7f7403096cd24b25f8bce20fd88c05b10be7c13c42e7fb3b330fca225e2bdc44a4d7f7af770205d1319241c6017a4f935592b4cf0c2d13bf2b8dea105ba96cc7caae2c9e425af4f4cf97dc537d6ab7f6ccc2943291c8010880250423521753f03bae2a50fd1baba8741f11742911cedc6ab6105d141c0958062e96eabfaebced7ffb9ce9423e25920767b292853d04cc630c8835ade1309087d9dac5978d53804230873f4f0b030a777c20c698259f5fa2643b8bc3569bce160691014c30635b1d396c25c4a17b25861bef523f38bba841e76414b51e349bdc204a545a789bfa5d6e847b5bdbc18b83ee4718b1cf0ab493358cf796ce819c80f886af309cc2922698cddd6349f0626e669a417d8a2ed2496d20aa3a81cbde97a7098f661ad7d51486d5273f6a87b6f61315fff3e133681443b849185277996861157d5fb3c914453f4123913cc3406aaf37acac7623260da0aa7b95d04acf4093eae7aa66ee5af6298bf986d5617cd2a4ae433a85cca9d4e0126365fc84a17700cdc5578baaa0f4a3473093ca6883620cf0286e820a48366ee94d871e5b9de4831379199691f611dbb46a735fbb2a21c6814fae6f872306fe0fcdf6aead79c857ad132ab96ea385e2298e81fdf033d80aa8dfa13e5fab3707c3a8c22b3d102ac21627ca0a51a56115502a24b571ad320f7c09cd1593d05d98558d0d2d84dd061ac155e73c4c511a48b710919b4f7542dd5580f88b1371b9014910af2b222c5d3ff13f757c7a6469e23e9a198490ab6c08a10e8e6a3bc0032a0dd2da43f740f67361297558a1b399e2b8ea165e8fb67042cdcd13da3899d55887d3814c3302b25e86125f84add48de96e25402d26a098eb893001e7509b6f43829be77e70fd002d22f7307b21fca92a3d8b3c0ff8306247087718f428cb4510c5a5cd8ecab369ab973ecf37b1119eef9f254fafad09f482a1fced47d98ce047a11bd96b3e89a9786877158d57701f5ae2e41b3f6d7c7e6fba2bc00d1b5f1bef073e01d1b6a94706f3126f4804fef982e442b58656839246a2ae3fd704a5c24c7bc46e509a53f81a7a00a6c4146c644ec4011f8493db0c03c982df1c1a1c40701b96856bf8777f58cf60a91481d5dd91513325864bd5a50bedda05b38e67227d76ab2ef0a7649e8e16b40bd63c906e134bdccb81e257e59cc110036f16a168c26fe153c1600bde05e4393daba7dd6ec06bcc0b70f60fe9591c7e60ad630d158382681106308c5f6c07cb693bed883510c7eaf4c1832814301cd88660591f46d7e78fd43ed470dbb7fc152b470a6c5912a8961f9302bedec9c3268e6814cfe5aac6811c4d9cd82438535affd27f5b707869d61cd4fd208fcfbea89866c5ef0863bfc626512ce78e54682e259fb4d2f034c78e5903c5640db8e16da3932bc1357f0026ff42d51819f89ee2c12de458ccd5f27852d6a369f39a85ffa221d48050ec50b236b826ac581057e976afaa4c2b95c960a28b25221a794c5c2bc1698a44e8803808d00e2fd08bee1a066a7dd208d8fe1d11eca808112fbcfc86ff1257b230cacb2dac8b52804ecd50725e9de6d31f918e88938cd2d2ac9493699ad97ac93031451064ded6a18c409cee6aae60a4d0530eb82f44cde3a088a247689ba0cb9ba5b00e0e0a5382c873b62c25010c1bd87503083f560275b64c58162db16ba905aa73f6366191c39e893a9810806f701414a5d18831f3c69cf7590a8443d6510ba002655b6ace4c34bde9672889808aeaf271db283223d273f354bb28e08d6d81fea091ef9c484386907a8366fc5fc53ae4419c125e016dce9c58a14aba4604b85195f51a309e71ccf0599a59390801828821b5a24d729baf204ca2175a9d746f658ea62001cd0d04289cef6cd3a32d854d133f5611f7b929ea162f42b55083d7113330372db5dd6bbad28c74e744bb0c7ae303239f296312d636c4dceac676f3f70fc926150aee053394636cbd4f52b2747daa22522589c6a0dde8ab9417f894a49d5d3940233e27bfb01b21e44613bae86354819fdc0f376aa8e459c41d2d34e5b4828a8982e31f8846e2973a28e82bfab6d1ad052a400651bfbdd22bec34c230c1f172b5994f7cd89ad5ab5dbfb6df0cfee6e9c88be979276126bcd2f9d030f16661dd12b69f359dfd89536e9c9515a887158e1dd26531c7bcc73b274a50cd8d0a5bcda527b36c9573867d38ad28043f0ba9555f91d0a709db8c755c5578cdfb9c1cf89c70347e4ad18a4a403cc3f4395368bbd9f169ec1b4d063d8d2bbc4ee34c1da68e9fd44564ea0b0ea0aa2255327aa22900781f5e014c49e6d37133a08ec6e49f67797328a468cbd440ca3e8a9a67f3ec39065b21b7502f4242fa165fd9888e28faf9485604b2dec0452ba0af0e0836449483aa97946432bc643362ca164923610a53577cbe6465abc486a393b8dfec50c22322197429d063fd2ffdddbcaa57e268d4266e38ba4e0c6383d79fca03613b03b1ad124730b757495a55e8a1eaa9ee9c15c8206e5e4048b660b839899b982f846136776daf1822c398d121a1eb2a6389c66723111124ed6a486a8fe7a09eaf111e562378db619cff9f0753b7c0e75aab6e99ae674683cdbd7b54f7e304d7d597a4f3d9c7f7ad6152731289bff336c6b49047f35363466ccdeaa56dbf598a9525536dd9a198341016002e1af0d3589fbb76c40a7c0d313b50cc9a321716865901cfedb9f77ed885d49896a240eaad56937b813bdaac978d7eae948e8b1969ecdae2bbc7a7db9bb381830757e8bae973736afb1541d8246108b3163b08b7b2d2e669d537f87459f1df9c6b3114d56868094b204d4842f7ff116697be0ac87094800d1eea171ec7d26ecba22654b94e14834ec7c3b236dc444c9a182736badc1a91be52d82153acf4e34801c32ec3829b1355f04c4a2910f9fc243835d335254185a96e849b548cdb9eca7d6caf214870d769ac53f779d1bfda83ea48d019515408765d1ed65205a8bd7559316d7135f1f7d25c1e667fbd953584014b55c1b42c87ea9e6ae647020aa94bddcc57176820cb473a912226a75b514c417954bb96deb66976c88b236ad0f91a6bcb9c3321097f5b61dd667384ca59dc275a3b3f4b1bf59c23540c1e1090522d8f12e947bcb84b7750d9c7a39c6c6a5954fe8d2bdc75e7313ef86f6cf2f3a5b091c315985019a20890c9f83ca6dc78b57067cebb13dd6f7cc6b8db19b83baf150309db29db9cc2e1eea9a1d56766b64b005c1e21df5e0925a5574f597acc561bf14b356c9c02a7982be71a83f06b09ab2bc61abc3605975d36506ce247fd14deac69befb885cfd08fa594c9c42276f655c150e799c052964715788455081f5456109774b86d95eda85ffe98e14f1ecae35339013772045522da8796e8165e1eab0adea4a55e2e98c42b910e1d0d4f1f005f2994bd7649d9b6b553b132d24de2b0b99cdd125d0534adf60e78b0e1d545598c9fbdbaecd8a4241006937549db351c6bfbb52fc07df05919d4913d057006dbeb9cdb1fb5128d973802c9f6c7287ccbca90379f488dac40e394c4c1748ae859ac517e3a9df258de08c6c3b984944988696a5f27736f6366b3949b9678718845e9974b55b1c993cfb6b96a962e4d3e2c61fda877f06287092c3c6eb5bd36d825dcda265fc3659481b8aa20b8cc5d22b290683b2b2f014f438332430792a6df05cc84bfc88626d6f0a34d2f5346e4a2ce8458a80acd030d4fb74ff8eab574e96aed562a7cc20f50964daa07b6fa157df9f6363085ec51728f9ca8d06806f4ab92d628fc764810daf9c85a8e7ba8312e2cf63964d4ee223b0e737cf0b4fef78d1d88434b6499249ca2bb437c104c7585c83b11f0bbe15d7c32aac91d3adddde01c45a3c03c5aa170c897ac0318f32dd0bc16e6e33740cbf068d3c82f61a4a451c2000fe0eb5487a860cb3b7e54cb5cafeaaf25f66cddf65b6be723cd3dc0decdbe9248a918c940e9034dd39024ffa492aa499af04c4e133eed388ee0d0cf1a224de44707ccb6f497243d8464826984ed4e2bd09aefdae7d251c619930ea8efdeebea3998175a1206a5ea5144349a60336f62f2522d2b3b06ac8847a06112b9b552fd466b87520d28fc855eadce12e634a0f4e8acacf74e0d554a8c8069fd8ad6ecba649f8a76a041172ac2b8d30bf4d1b887ff181f14ff32d8a36575305974c29979c27965ca31bb5fe5c093d40dcd85a268d34f520141998cd5953dd0c762dd0af37d830686c4f9aa470f19ad8eba2d0f8727db33365b6f09290ee20d0d4a4829b10ec70ba4bb78da9090d5f029633296f5a70c2b585d2c462b48c678e4e50171134dd6eb93469ab23060841c369badec666169fd7b9192f0caee96f198ff348e9691af383c6825fc30edaac8d7a27d47718e44f1b48284530c244b670c72db29efff7cb2672a8f2d4d1f31222c9ccdae28a784fc1f264045999b742e75ea96dc597e4abbcbef93f005a24ed74e841a035dc2c2991185662d2d95b3c3b628cb18cab85f7839704dcb5c9b06530268df3504e365d9d245e3139e26258c3ea100526359fa8438d3ded00cc18a933ed16c7c10cee840417f052b723f6dc9fb4bd0d4e7996432176f38cb91ac0c762599adff2f1d60bb6e0774bdd9de9ad21cb2634652c0a662a47a181f39a1887988ba6799b031ba911ceaafd3d4fb905c7328fc836a3793d04dd789320118a6d84e985823786f8d14e8a475b934e31513544759944f8c5e1f297428bd54c32f2a86be866f99f6ae2c7a42b69f05f4a063e5f50b17a403b781b46cb9ddf316579c786f1ae465448c7c80f31d10c79cb6a33132f573fe78cd832a1a34476bdb74197e1cc317a227de5ffd2de9dfc32f3a53feda2618d929cceb174663edb98ef77a18c5452a600c8ff71cff1940ff20d5e69c1477216d299dd743cd7c04382c15016e0ee9069fa3578dde8653bf0d4536f4bccb5ad3e84aa94ef64f2d812b471e3f260782279c2360b87f199859433cf28db53fd0957a88e341a6f321ece33dfe088b1fd39ba20a2d21492d9b1b21a7888fc69d84ba6c90d0e42d67ae779297f15e211290ea02ed592e4561cea46e7f97a35069b618d7546a5ee1dad4bb1ab4593529ba482d878210160f2a38375282673d1553ceab0a1af684e28dea59507eddd4ce3ad35ae82a4e11dc374195ffc2b89f4cbc43ec4b763c7f819244462a28ce61c846324475995d6020849b5a5c13d3e11a5780c8eb51334b133eb10c4efcb0f8a4242711d83ae0319472e277ac9643f6599c5fb32f090be91516795c19bde95c8d515a0ee9cbe53ef1719bd3d4267f9038c7597d0bae9964d325fa413011e4a004f2a3c4bbc6a866d4ab5502d72b02a211e09460ca68da3a25fc5e996221f8a2b784a9e2f7217192420ff79b54110d8753db00e897de1a4f7eb6a6755e993a582c3c89cb9326e96f86bffec7a9e73264774f398a1da7932763381ab0e3dfc422373a3bfad7f258b8c35428910099d11282391f8eb35c57471a6df592528e28b3a3557e6cf3f17a5b0833bfceea21f6a106b34815436657485541cc706eee9dcf3cfbe11b021b2c8e6ac68bb92dbecadbfa00afc1465308b1d5e5131a1b078424df070d20b9b0751da151e8647a5bf8ac46ec586b4bef88052b10328d10b0906d3324a1d5f3f19ce8e41ef1102de8d21bf47515bd14590b6e6316991ae1340fadcee6d0eb96daa20d0baedd2fbe81d72ec69c328feade4f32ff90dab0affbf31dc8671d637cfd543bb055bb82b488b80909edfb3709a53e0046012028b495d8670985b3311e6bf0aea487698ac4bf3e5762be5240218397e698502574ce2aa77c6a7a989f7373fb0721a25d29a32d38811c206705bb01ad0d62bb4bdabf65a7b0c02cf488bd33da88d4d03723dc997dfccdcfc044615258ceda06523e7bd9cc656957c25ef8fe0f853b9fd5e3490694c42985aab97db0c611cb39cab39cda1d20cefd21df4ffc3778d97025fc91f671092effccd29a6725883cc955df79159010431dbb724444de72b0302855de78ec7bb2473035a8baf2d0485fba857385cb80835f53faefe61878a94a4169cc1aad795bc91bbf6cf4189201c54276db91a4786fe6c0f3a87cc296741f14cbfff73514ed5a1da964e7b3e64d17972e2e575e6ad92754e57d1930c21a5008fc848086e852896b224f22b67b4d81fe3eb77d07ad798d5c8c28bd967e5c31cf8dff162086da2429d75f131255ce758909bb908b5ad7cd4228e2cd3b15eb2f156b97b5b05ea045d394fb6b039b8fb952e28b7c8b9354f19346a3641dd850b5b5d3d95e053d2e2de4ac483dbc8c1918e488b9930142710ef57f309b989c764079f0ccd6759f8f8064d433e4db1e00018b27143113c0f7b2aa1b1f7524ab5731fbe6cff51b3c4fd47d8acf5c1e347e6ac7165cbb78990041aba5803fdbc6b4d99d77fec16f23ea11ce4ce59d918b09f0366de834a8beb7bd1e87fccf53e60f20dfc8ed5c1025650863fffa09aa5e4b72fc49fca82a077ceb489783625eb3b4c010b87d606080167c4c35ab07be0bf67b16feb7c23e5855632ea155de6c74e82663fb6507a23623aec78041784b2b7eb4346dc0ce5646bab565efff843012c70247f6910b144d5ad991d002bc99e343baf6463871b10262dbf964701b82ad403a29b7a1a01f62d7c655c96ce2603df590be0d4d0816c5a38e982c50f8e4eee86974cb9bc575a4c21e278b2de5d0a829244c4b3bc8073cebce133b9b64e5e0bb1dc7952bf96a7beca84e3402f30951b2969b0cd49631a1cfd18246a2a2e86a33af21ba0b09d61b0873ee5e9563faf9e0f0dfbe14739a08104b51cc4ad783b7758a91181c977868b0955b2aca38d0288c8f741853d8e58265d764d3c5d9813b6d912632b2b0aceed14eec258971712cecaae41060ca18f5ea349f3c6230ebd32d00f8c0de32b76f3707ddca6296d33788aeccadba9b836eb2d8abf40ca223737fe9d6a05b99d8f0fae6797884530d584f721cf7de6f0df216329dc674ddd1fc6790774999948b102c60c1a43e80d30e989b28d2c380f6a857a137f7f1bcbbb3690b50ec0af3d514917dbab2598cc400e859204494db0ea233d3233b8627ae83c4a943b6f9b295f53d0cb8b748174099e8c35d6b35a9a3a58abeafdcf78b2da08df7447c75a8b14e547f57dee1eabb476ca322ff8d618493b3d2c489b9feb6847c3175ace43aa2b16e0ef2aa399af1eca8bc7f2290eac0e15ef5f80da166aa8ce1e1ee8f1bcaff604ad30f4b350b7f631199f689d72f06eb3b1d25a460304d0634e3070ddf9c360577141550f23d7bf1211ab32eb99386099ce24e3acfbb28664a179f5ee0cfba68915b7a698bd64a42d7b394bf30cd405b6c6a3a087854d6833a63374a79ecfa08d106dd23f41ba0fc309c55b9439345a1259a31969df98ba88560777a1d2cdcc349082b99c8b836cfebfc201bb456604176719eb6d21331c135c2de03377ffce2ecdf5657fdd6032d98ad321e805055e863db44cdcce5a17e6a09c2a91104cd4c8b672d51657c389a5169ba5c963bd38b77d736261e6376ca538fca219a252a33e230dc169b0ec0a3bd20c3367d3050cae7f5831f6127d32dbd9b2865e074dc7f7f7581be214c65b428af6dfa85a3e8798ff69b53efa59f8ff23e565c1092aecce3d588c37b8223d61aa8a9e58f737c31d85cc9ccf9c6791778fe16e77acb43c8eeb6ed8166716edf8adc7b830ef33ec8e2e5e2ea887975c127110953fe89ce923416cc68e13af0cf0d8edae02b3c2ad814bc7345273e3f2fc449bba5c303fb35abe3b67e8f4d843f87069fbc2146884027e98f86b5e2b6789513b447852d9062fe37664fe01f4ccc1f8d4af7326ccb17102e638b8b9f801cba0673b2238133f6ef051decdff51cd2293c2c6694fa0f253e495460dd9a3ef148a0011090987cc491117d1d8cb6ca40e09b03e2f233670ca309956844cbb1669586dc40ec3b62001d0d86ac5d079b166c18b8ba7bb8a8a8cdeedca40ca9c7fed39e2e27ef0edc7a08ccabcef5e088f27d514d4823801835e85b51f97e3f2a6df5ded539af8ecd9e028737a2ecba43b079be9af5b6956e0e076b71748b848be7f73b037bf154195186a1ee8cada39a24884ea4407eed00c0ea4008dfe704553e528e9427dfbc0a24724960a8f8680576898a65deaa9247e9f8421b1346261045fdc76591326ce2af000153810f8b673d3d4edf478a64f914c46cf13b5a88b2cd6f89de1539dbf4879027d77776974b4076154f058219a01a158137a5003cd93355733d379fbe207fb833362600b4cff9c4aa23517dbb83a371856a1d3b244d7d1063bff78962b7a864765d75027b106b55e68b4b93ed62fc028765cecba05f081a3cc87c97accfd68da5162f558fb03c4be7c9b228e0d0874f6f89df4e48635434826b67e9a55e48d3b060fd19de5e1ff561121d58b25588569ef79656a26c429b6cc29dd89e7e246731acfe1935b8ac8de4563aa401f778d59dc28a7f4323c6e2fb9a36147b8ea383fd29247788aae1680f007a3c744379f97d43b9cb1cfc76555147967e8997fbde2618c0ced129bdec3b46dd9801f8744653eddb9f38fba68cddf0a8cc2b7400a08c0837b755dc7f87cd3fbef4a3c2b44c0a17ccb46791b6cfb0302be75a74ac1549e8ea9b6637b4d26fa7239c3e8714dd70a93712f42dd44c82e6050e3df893e9bee1c75dbc5b7d638d104bd0b4541309fa0b9ceec26fb0f3211f5aa3cef53a653e90d95fcb201441dea1e93ec992e7997b4fdafdc6883d6b01e5677eb41cc594891df755d3b2cab9de098ef2b9db0bff0060cecb765d86aaf05c017a7c595b219daa7c0bebeedfb53b6d241707032dc12134f9312267cea02e80e744f6bdae70c3ae9ed509532366eb6ab727d488b3a6a2e72dc405890b98714eec1085ad31329344ed3278342816a5f025c8475c740714e01a492afb4e68f16a99b0d5740426a47ad092690154b5a183bda2c785269e04ea8e2714c6a4561a9831212bc4e382350aa1340a609f62bc39daac52a3b48bc6a1d488e277a85d5c92458ff50749507c217a1ca54fad5184cedef84f26cc610822964c83e5524281a408c5fa4361fd9f580b91102a970f42f06b23dc464d0e34d36f57b69e1f20733b514165ef901b5853fb41384dabe68a6f147fa449e29f183e554036d2761b9f86d858bb04cd74113c0438d23b94a1c247cc321c218572e5a4a262c764c8323e354800d9fa31ce54962669ac8bff0c037c50c1c6660881ebf3dab0d1ef3101406a5c4ac037c71a513308a4e3597f4f93829e05941f0dae49ff9327d145e5f39be9c419605859c0c342681ebffe3f38e018698457702ad0f94d834ecf01d8a481da6edcc6f179c0bfda32f5b11b710a0143f154f505ec773a35909020b2c830e10e01e7f4b2260425852d32f51eb9283e27cb0883e540abfe0eb608672eb94819fb28b5b5d31fccb6d706cafe84d5d7e29a8e2bdf2632d462ec77c3b81e78cc0f02f9e3690bfa45989f213b6c3aa074c6648cabb86948b28179591c62f7fb7e31817990f21c84dacabc0f9e4bf6cd47247de34230a70a97ce7cc4fc262f96302bc118707b9aad55bada04d97b39422da5ff6661610aae574376bbf415a226fcd2371eb279a14a8ca4d0e8c284ac851281112d02ed546d08138b683a7141c683736f3d25c75771c41de1ba01294e882b3d9c108b11e34cc5a2d2792304d7b98280c520e740c349f71e51d5115cea8618daf411674d401a230bfb206e4b3f4c152aea3d7e203838e26775c3389a26a571d605fa2d5ca0b7d65af3694236711981fd228bdc878d6e65a39f8a20d6f7fbc0006c3e0448eeb52258c3c26c730844b3858ec5c9d77de4d8e31d031a808efd3e5f938b71d12c3a17e63e498c5157d06cbe9a77dc2a164d0b154680f042a4247151ff27721797c64249f6996d02310c201c81fb2ca03751e050787ba54f138867423f381ecac608da10ecf98e687cf235b6aae3eb57ed3caa8248d898909669e114f35b326ce2ab5966c3414aa823cb0d415b1c2599c2efc4e481960ebdfb7168e910bb73910b7b8c48294faca003566ea5497c33ee67fd10eeea6ac660aaa741d3c5052d944db65a43241cf4ead8d41178da52a4c41015c8b3cd0e7b633c22e88e5b8ea1e84ce16a47657f52012c61223d57c291eeffae75784fc621572a34976c36c222d4e004d5bb61a79e23e6c70c66e57fc363df636fee0106ad70b66a13750c99b2b65eb8f2c145ddbae85e49d53287a31e33eb6af1981adc009ad44b3fe5ded62a567d8ed3a9f5592649471bdd2e6f024271b82b55821e306c81e4a5f8e1a019f55886d970986ab8313d364d94c003066bb97daaabe24cf3428ebc8347c385a0172f2d15d91f32ce0c112da5f841997ab590169682ca7b1762d78a9381775962513a379b07413f890ed824e180a1c22bfec47029b3e7a4640e1c19f41ab778981439c60471781a8e0b92dc1025b8ab76268d5538dd676567701332cdc216cf62229b648a32026d8cf597fc897f3d8fbe3fb66d0a68d07a9471a0c35ea502a023f8740d84893fdb646ca4b57c2083f552a8059200d0b8139542af62a5143fc6fb5f4a531123312a77aa6bed5643cc810238aaea55ac441d2b778a9810478cb92a5a4aeb87a8c17ab80674d1958a56a4e61a2e7aeddcc126aa6d8db849e597918c573c74073caad51487102795ab1e18b8780416aa9bf89ceaafa77f30c447c91688c5b9319ca79a8afbdfda783fd84ed15c91aa993b57a10e4ac17783b135ce973a8ddff3c6534f1c449d3f0c9bf9c03693d59b486a7e881b90b77b2dbaed80ced2ffd3d729b5e7214341b89bcd9a162b2ae8b1154a096eddecb553352f589542cf64d31fca5ec561a4accfb85d7c4005c5ae31560238a5f217f97e07e23a4f818c4df5cb51ec526136639c2e301401adc0fcea038c046c13c1ecba91d792a35f0a4b0733444262ea8e85aef28dd6a55509c5698d56291fc4b393b1083cf4197093cca4b85493f945326d7c264e3b637eab1fdfc0314424b31d27895d62dc44d3e8891e2d1e088366765a890966715805ee2c1a3d47415cf61f6299240615ee4c150f3d6e3b68a788d3b8c8d57422f8c6ea64411b63f7abe6ca6a3a8a3197a68441cc872985a3b1def4a00005b3e7ebcb408897180e78aa6fc2ba411efefd746d65727cf35c950bc35e28b4d639a8d8732f9b1c1c678224dd695443fd3f5194830b55f26403b7d32695e8ccf424f098d0785f78a4944fbef17065fe8608e4caf5b782b320989f06e7e2cf29c7cbd4d5a701d5471c78221149d9e7aeb2fc7a722b173ab818b14a2f402e25d07f267ce8425444fa68c710115e53beecbdbd418922d95168b3ad0e7f4344cc9b91415d3a595cf21c3e98f6a3d7007ac0c880abdc0715faa2b1d313358c314f557f2497de1c593fbdd071c68017570bec769d81661c4a638b6ce9e3400e80ea9291ca04f15bffb55ec0d7e307fb1df2c60f23d9f42abd1be6ccc80c75d28d48cd38e137d5f11bdfcf4cdac28d581833e1f02b17439c24b21fcd8e909da90a644d537708e7379156f128c2eebc1606a2af66c934660bdcb5d592238ebda5488a827c5a8c20a1740c82a7324b60346da8e7053ab214879799054a7a041860d0f61028d3719a2ab47993b4f01648b2b138714a3e87ca0b533f25f6331c5477c714a5013ba10acf992c7faa68eee0702d13c31364de55bade36db69d4f75ae1b6ad8a87938fdad61a782f31e6a4ef131d9b006c35805a9d95fc34a118f598afbb963908e556f81490055d40dfdca98a2ae833f6143064975be4e2daa8d2a965b4f6f0be5d96cc2c23fdabc5d454b7ec11803725ab06b675887c0c1d0f94fb69391b3071adeff1a71171988a922dc54e5ebe757450cfa3f71887e777a0c5f021a748d315270270485ab062902693872a588b2742b74db15e76bd336e52b9bcde8d71e3015a51c7628978436ded8c74c2335f0de4cf1c9da382ff5fbb592bb9e208b5353ca0cf4d77d57932a5d2f101be98450c621b706bf3ca406b32dd7554fe2604148f4ce382d4d06231ec46055ac23a8e663e26d812e7a19417baf180a7176c8fce0f06fee0869d3f06e5fcf615c673f8c5263090351cf7376387091415fc25f632a1b13daf3c2ffdcf13394eff095fab9510979a59d55aa1ddcb1ec0f3248c6257ccea9c1e80a2fb4230fcadcf39bd9fa73d8085dedddf6db12aea42be99bc899c8d7c8ce8512089d40571c6e98a63b9c56a948b088099deac8e661ffd755850e41a301fc93982b02e1c408eb1957e9690193a67f0fb7157897af82539fd5cde4f0fdc1e7b551e0fe2501a6229521645af7c325a0a3fc5138e19f8bdc208f214f88337593ea57b8696cb61f7937ccc16adc29dff9f6e44337f3af89be4e8c18bd06666c6d4747bbb037f3e648a722d2f1cc94c2516b03cc68429cb15429742da638d388822ecba119a4c25aac7a0b98dfbbee700294257c1b18fe46088c949ddbea9a0849d0c868106157c348413b10f362764c7babe80fc9e5c1858212d683fc7398aafa1a5996e1d6086e6b174929d8a2a1c76bd479e039b3c1f6a36640d7de09998fe7a9125fd379d41ee8baa63b814ec08647ea2854705b4bc5bd7138e2b558df0206fce30104fb9d14adc2e52a1c8ab71b75115932baa5475384cec1cb50f3e39121c1656a4e818b7a6542a432a987490f37cd54ef9489c34420843f28d5c8e3208b3f804c5cbb48dd73c3f118326ccea88e51c439a6d5530da8b2c4053e2d448701faa6b69f2f64f4cecbb986bfc24ad885ec2801dc94ab57129f4c2d62b1b3ed39d48a87350fe221cc206fb5845380d2ad898072d495a5586338439f05d2662b5e5f72f59b72f1cd742f4e7bd89011b92cd3fa1097a29c92396a4eae67c312b13ba8d4059c83a933599792692d39f7adb5df9a96e5959913801a4efbcc6c6ff8df7c2ab61e5acbf82aad1cda419f60b76ac84a35217ac3442c3b15e411968022b776372aef00a0d5357236cceaa06203bc8608a93f88360cf9f6fadca712492c82489eea2091b2405c95f6950ad6c8aca6a55b56e74e037960f15891ec01926faa6cf2f595c93ed8b1c97d32b56762efe6db5dc29b4e9b1aa60f418ff26af78a088c707c134a1747a93ca9450e2d8740411ef125c1746c2930318451543c2aed9794417805a103ce699ce1313300f1812b4da68fee62646a260182d89184da2b953fc42f0a3186ea9c5e52901f0524d4f4dc428d21fa648a7c3afbc00940ca447e0deb44b8ff0b940536ad2a932211bd967283b594a41a0d4da0dd000c23f0599012456d874b088c82fd134a3f47a472aef969dea5ef81f1796afd5ab26c802d8eda8544c95ff1393edc5ce61d71bc335987c8685481aa33301f73c2afeb8348b12f40ab3dfb34b93e131ded0be942f86f80eec1587cf0489fbd883e23c2ffed4a2d08a5bf6464ab6f22a9fb3a41dded5b3bc8665f8c7949501104ff5a3d66b220b7c276ff9ca13815b8e522ebac6a8f91626816cdfeeaf65c0556ab304a722c929ad2df09eba2612b92ebe9a077d20a140e7724ad4e11e9e2939edbf1acb6e8741245abe4552790d4578e082b7da12aa693144f8a8a0e66e9355c9354fedcc5d8ea2956d7041197849b39efcf678d528042369a09e83f0528b50649bc52d17976948e71de5f2bd706033bbe2ef194ae15858daab99fbf765cde4252d69717848c851dcd1fa383a115d9a7a91d8175370134c353e02d38d95824f78208582ef5730f7ae8bf3af438fb0001375a541ba768846ae94353420054455750b7320221714b063c6655566882de39e7e54e834066e4fa4665f6fc95742d835d70db8c8ea43d0a75a8575f408406c9b6166771c30e62bdf0a562383389912ac4d278aaa2593a90ee4956c654133d2c3d1aa9ae3cac3ebd2a60a4fbb6ff15e99385bef59288a359d5aae6951256deb42bbab52896cfc48aa7bcc2aafaa3836796e0d62cb0d8a9e4284d5aa1b3b14db9a473f451133385939423b594a11c49d28695f520bfaea5b6140b97bb2faef55ec7dbc4fed589b65874fce71ad23ab86297a6209cec093501fb9597032e099c20aee5348a22db78e3d166b6ae31dbc76b584bf3b1c889d2194c60589c0865cf6a00f80f1d4afc34e0a4828f170a0ccf82e40bfbcd893c5e7ad27ff14ca0a2c3ceeeaa9bc5c59a9698a11c38b6f94c1d61965d909f2a4a67ec04be3f86b76f17764d6d306efd6e8e8ca5c4805e7025994861afd367e32a9655ec987c578cb6cee3d82158c17e61c692a1c3f1030d5cb82700ae49c554083fbf475b27ab0afd9ac64b97efeae8f4a55f006370081c66272a57c3db29e4ae6622540d11d9b96abcd2bb618aefae1f92db25b9b47936ed6fa79cbe59094c7bcb1834b1a20ecd1fb7ec287072cb97a065a0a00707a02152a44042b475b9d5064ba40d2d4fc63bdbc5cec7dc0ce32c050654f171d92337ee41a927cd209918aa88c5ba5d97a8556ac5226d3657d06778f030db37c6feb05fe041266599db6117f3316c0798cae917bff1a3249ee97d109e3f16b41265a615676493296f06ddcbef944debd1c0514bdcad04892de65c52f19bf3dc26b2540b39f6becfc08e867a2c29c8d1fa727333bdaff46e869ec15315deadc497f5747ed1e0508cfba5328dba03cdcdf45bfd464cf910a3700bc21fd3fef899b30aadb2725a49f192f3711b100c83cd59b028cea1397d8009bd58b1031c2eda8aadb8400bdb4c8e861d8190650354d058806a8418063a4775d357b55389f53bf18296bb4d15a7f19d8caa10fa5e543ad5eca5db734d56e23e2c58e4e8fb9cd7cbe99cb7728b0c96792894252241c9493f05a776c3cffeefbf2e12fb4cc0c9fba6dc384dd9c1c1608b8d9f9a48c0a65225cbc1d239a4528b9d0e81c44ae12ea89ab82a55fa18a9312a45ff859f25e40e57efa577fec8141d31dc7f82a0ddd1897f750d91c5aaa261ae5a35ae11569f5140368e09e4fa57105fc85d1ed21d557c0357284f84f59460ec9ce70c500cbb74c30292a78b12fcc24abc4bd682f9475f6ceac10733651f5c6d319254f3afb94133332b522d99c3bac4779329ed9c5295b30f75083314974ba9e37fe599c9ac286cb8e0881ce7033e91393697ab3b817b15f50d6ce9c30c716c4f5b66208c371584f460ae8f00637ece0bdd2e7fdb777bcf948ef06ad99eda5dbbee41389f1fb6ccfdf41b14c81b6ffa1a214fd2c244faea3e4f6e0bd31fc0e52b13af59aef55b50062191f7ba4642d988d8e2b7f67b310f8cd2a5816b01e67b34a65bd6315c260fb7a5829e10411cc1b28f4321b14c0760d282ed07d01e549949ce24f0082426c068cfb9ba04f8c53f88f76703103c8f1b90e4d999b99431eaa93963c150f73dfe8c5b244215f527fa505dd85287629f0ece11f919147aac17503aa1a6114d5f5eebe372c4c4b46d987b15973a70dc49743d5d016509b98f8213e2a381b2ef8004707b502d1613e686146a670fbf83dc322020394d5046e70c4910d56209a554d3a452a11cd3b1afe0d8d4cc35ec65b1645c76fa5db93918b22890bbb634556c9ab063a7a9c22190570602fea04141fae23f0f15e4f44aaaf1df9139e30435ff7623acdade8bc36b28d10b5b6c9de7b4bb9034e0d930d4b0dc7719866a2e5f26f1ce30cbec3f37bc90edfef05137d54517ced8fb5d595931ee4d7ac11edb73537fe37121f5ca158a8699f04215dbbd643f6b1d8a2bac6d129a22f6714ae48e7e6812b388507a7f05ede8d414db890c98de7a117dbeaca51ea8fb566045f14104d23dd48259d6bd73a57a56b9c1bcf33ea668dcc7811988aa761d58a629b019919ff9578acdb192230153fc33e98a261cdb0dd139a5185d4a037bacc1829d37462c0356c383a0805052509e9ccccd3aa5eb10e4cc5eb3c9df7a2651bfc71b2c177f0e7c66358b6d5d351aa251de52693f6941bd96e7a9094a35823da5348288fd72a6ff5d25040b4931e443b8974230fa682908e628d6c96492b2b335e6fe45f79907a6b8dcc78bd484301d9bef220db578e7223a76f0f82f26a8dac1ce59ff18e75b6c71ab14e5f9951a9e663d6dfd08a10baf1380e8568c44be35d44e235b9380e2bea62b32ec1872af32a1675445fe546f455ec6baee37380effc8dd35c98c6f15971b4931bb59bd838ac2a68b819e0db41361ebb49abe88defa0f7f260ce8dc751dfc5b969c19a27370e5d7a6f547a6d5828f458a21ab61ab68150b67f601ab68e7b7e6e3c8dda41149095cb7810190f82621bc38ad14d669c2a1c82a9f895fa602a4645f1639c8625a3a2a6bd7e5dc665aecb385f86e831eccce8221a567fb1b55073f12ab6839a8be79e949b1edf3a70457ad41e9f52e193d882a9f8323cd57b42ad8a5a3c1e8ae7b9d939e90cddf8928d3d8f259e54a1104cc56b150e6d7d99557e2cf058edc7023faa270a533075550e6a15bcfa0b2f150f064dc3d670087a2c110ac51b0a856e8442f188a4e123b18f441a38d2b1865804a670287d2cf1180d275bdf8e4acd0711cdc5c78bdeca03f4bd8c6e7c5bb171151e78ab17792f282e2b6829c18d1c1437d28be7f5f7e85b8d0eed4c73517eda19ae6995b471ce292fcf5f6cf14f149969958c449ad092a0b9d26640e542fb84bcfc2352ba1da6e831ae3f1aa689e81888868d314bc48fe68a60b18dec8329918df913157d3c11ef65e63edecac84bc56b5a8c1835a865029e616bc212692e0a21013fd35c9cf272b389357270c3c55a43e23e2e7e1e11eff55efac64d9e4a29e5e91131cefb58e2e3850098817980c7127f1f8f78f1a4a7308f25d2a0e49d36fa783d976b11ae29c3765f2a9e0b3a85180ff358e23bc95604ae5e738c31c638e59084a51460cf87ede130cee8728f451e834eb61ab7e32ef75e7ace4935e61ea2fb9c6c7c3bee72ef852f9f7a2b9e42b45d19f75e465732ce7b79579eabc8812b780957dc926c86ade3164e2b8ad1dbf84d7427cea257309381d0ac84919cacb07571e59ffc049a939768c33e7a76fa56f197cde12ab6cba5bb045f64735a25ba3c9db6edbdcb76a2334e73f298a88a2eb29cd31c27b9f545df3057d1ab134b1e9bd9dbb04fcd87934d6259c61a8fea102265d866ab55ddeb19227a330e165b3c3cd65c76147d37a3f3927602cd4932c0cbb6ca86641bd22af909d4684efed49c7cdf5c79f9aed4e19d15dc0b87e747a2aae3c9a62379e80cf7b21def5c29f9860677da8e6aa898f87765e04a022f250f064d031cae7ccf90c722df493679c6619c2b19e7babc2c9b619bd1b405ac27db481cbe817cc338adba812b6635d76aaee636abadd8464cb94784c1c9f61fa3c08d66b131127c79b6190f214bd15c330e37116e18220142082114d2dc0f9ceabf24e139a15f3fd11098eabf2170e5c34bf50720a4c51017f0b6803104aede05e16369a1ad7b4143ae695f1077bb1774f3841d2fc04bb9c19eed895ef5e1853431fa3ce4565b21b132ab54b7c7bdcf7abd07d9248107211f3ef8e083df4acd419421605c5e3a9462133204ae663c48e30dc5b88c5395778c53fb332aff54e7576a54213d4645451915152fa33e568cfa582af5b1e88f9f1f30c5b6942cc7fd802bd4bbfc63a19e4501e9e64b6b64741e9de78d88de16f51e0b12e19b60bff4575f9595089bac10d825d31920e4bd7b402db43d1f4ea0507e0df08da5c7d2a3a96f739d5fb228141b23b2a8d245238b2a892ed317d99925a5cfccf74b5666e63a5754e97c1a565754c9be747a1a164ae9dd034241315dc803822efc909614bd92b1338156bd264ca18ae7c3061bb8b3858dd633052fdc8ea34031957e441410d1fb32a2b79d59b25999d1d9cec88f464696c8c88b6e64b3a8d2fbf3f35735222d0a487f1e55b232fd2951327c91c8a2a225c9d38ffe58d8488469956f68064f7a2c0981c8dbd05f1fc5889e84a80aa943600ac24f98ea2fb6981fcdbd3e9f7fe088a667490d376fe0d8f01ddff46c4ff46a3e5e085cd1c737d12ad3e3f6ebdd0be3c61faea61582d1ca2c53dd1ec7bfaaa80a812b15955bb14920a26e8ce7165c891ee34bc38d7f60cc249a8b2929967f9a8b8f71d3a1141b0bf5d8b14e0be7d478f78466446e91e26bd47954159d46a59f51af93b2a3685fa9287982e91af5b15028f5b148f5b1b01618756e7ce772a3cb8d316ccc8ff8563621e03ab096f0474059b000362d1716fc0828abdf894eac1ea2c5b1fa5dc934dfb5b5b1fab0da8ca085d536beb5b1e6a356c4e8da24d3b6c0543cd6c23dba7563b5e9cf632895975ce00aa5625140e8450f72bd648d6cbf2eb24696c86cbf4637523ab52895c78a44aecbf8db522e24e531c5c68dd216d5f880885cd6867f64a8a83caad8b8516bc33531a2ac446a0338153feb037a63b851f3c180c7124d56c86389dc421bdf8713a8943f8674d69c305d3e03a6cbabcc539345a5d8989245995eda2cca6465e64bf4f3262b237ae9253b735d741a164c73b1e5b1c4c32f36d3bb961b5140e64b0f223aca4d311b5ba1392128a5fe626320fe896f0d05a4747a99d2a99d5962fa0c7ce9262bb3fdb233fdad967ed54de40305e4fa7c90ebd31a5922d3a737027f5d0f422fb246fad4c2bb5594fc63d1972a4a5a251e8b646d6cb4db60b711fdba4d769bd16da868565a9b80a9f851cd2adfc054fc2584b570aef658587dac517d2c517d2cfa5853084c4517dbf2c6b0f1bb96181bf87ed0a489184dcfd2174ac8a249933024113242629a8363d8baf7f3ea0f98206cddfb8979efe7bd9fe602f2e57f2451846d64208c814217be302ebc884a78f81d3072f0f573a9719f8e66c9ca8feb335cfde0b07ef6a5fab387dbff0157f3dd0892719b7444cbc5e2e326f16379ac86fcfa3435a2a57005556e5a4a30dcbcc187ed2e90a3353535353dac2edef74e27f87aeedbe2e9c50df28e175eb8af0606f00541a22b7aa9fe6349d242e9b69d5a5ac4b0f19f8e66ee398846a2da2cd833d8d8c634c72d3e76b4483412f58ca238f9734edadc8cbd05145e27817bb0dc25bce6e2f5708faeb97dbd6b2d742e97dff515e6148dd8e4735dd7755d2e8f65c763e1cbdad25c1031b333320c5d78a674db5e04e2c00cc2ebbaae8b8bc015a5db06217c02a4590fa660a75c3ed665d753c5f3f5cb767c9f4a9e3f7fbdadd88cbc554c91f722e3c2cfbc17be97c17d3f2ee818058f6a2d9eb60814d9cb76f436d920bc324eec073170e58127424586c018d8022fa2a696229cd3aaeb946edbe9548452cb66d8b8e6220fcdceb618ba0d57f3ef3d1ed7ef6a1081a956b934d7704531386bb388c0d57369d5d63d9e2ae57142f333d8e0a3f5b1303983edd91dcdf17b8f83f0f47a882e1198ea5fb50998ead35a04a6fa5cb9e6b1742be5a9de63281ed7ef1bd864e3bb39f156f37d22ef45c6ed33d1c47be18e6b1e1c6ebf7be06a5a224fa814f358fa44e00ac84bf50b7ac3edc764e8b60b4cf5ed2ab6ae7b6ebf85a484ddc33ddeed437817b8aac04bf5453d4fc8e50911792c7d971f49b081165c5c985f0f175a703b7a82ab01bc545f444d2797db2797245be772fb449e503fa127f4849ed08ee6f809dd26d2d0b2197ae8be1c47204d6c8c8aeeeb76f1bec32e367abb08571c4c711d07b9ee4ef4bda41ecb5bf5c09d5e2efcfd815eeeb77bdc909bee1403e3fb79435008d8d3d1d7e9df3795568dfe5a4552657f4960a4ec2812496366666666663e49cb6264b84f8f8bd76a8df7a7f2b8f851dd1e172faad9e3e269a5ef71918baf7152d9325a44bc6d9d98b992239f7908ae551d3d356dca3998eca2e7328cefbdf7608b8b0dc267eb289fbab31aad82ddefe9106018f6b4d7f8feeabbcd4406d38f99bb5956aefce883df7be4635891dbf31c45737dc9b71fbf3360cf878d064d7eb88f0934d81100ceeda08fecb97dacb9d55c479172d34b3504a56fa5bfad74294ba5c3caa5184ba697aac99aa4b5f191628b3427802de54ff391e3307dc2dec6fd693e6e1ca69950e144100c1bca87e3f80fe71f2bdcae716a608dcc2c319a209426be5c15c08735de64e2960b4db62b724d8734500a93e9c5d4793421054e7854e8f3786c3bce5bfc6fea0dc43b1a00b65dea3c8ea52afce151a14f2a75d84510970f84ed28b7d81d75f454ea5d3c8f9f984af1883195ba6eea30cdc3f650df953d28e007e6211f00fb98472a55bb96cb01904552523447e3c4756347736f006a0f6cbaacf03b2a0bf461e1788e3a2e4b8c40744dcb59aa68ae073c37751f137a10c5dd61bb21ee8e3f6d47bd3b5277870f77c7e9ee38f469d18068d1806061390f1e3c46231616d259ea75f5d043ed686e0fc760d6430f2c2c3deca829d76ab7912e2686b83d3ce5700b1bcc41c1182e10d6b658ed3baa76068a6f1e3cce59d8767cc749ffa1a280f80f9ff7a1a280b80f87158661ebba06bb8dd46dede3733bd8037fe02afbca1320b88a3cb1a627a8e35a589107520a5b99159b16f1bda084e0eab17298c41b2eeed08da239253bcde9c41eb8dae1b293353c3cfe00e05d048a4136de45a17b1e6a8eef50ed01504bd75167dc46adaf517f54c5f1acdef8d3609a07968e880357b226e65c36deb45a37461eb88aa1318f259262de0b7717cdc5fe59c07be92700793d9a8baddf4f17a1e316fc62bb6e0745d916ff5b7a90ec25d2b597ac9125283642a3beb9c873453413693e22168f25fef174dc12da469948f3e1040afe1ae0cbf26c95782c1d9f395eba8d85368606c9e67876991ccf4aa41b39bdf41c672b639f3db33333ac9195936e4fc3126928205976b228bee8a567975646bb0c3bb3625140442f1dc5a3938e92199df4d14b75c649f5f41c75e5b6ca78ada8bfd2388e6ae3376a8d3f2d4687b5b1b1711bd46d667ce536356e43e336a7cb384c976215324e346aaccc40d978ac981371b885136313e32a2947317dfbd394782c9bec9a8cfa58b127fe04a9d438146faaf1293586a93ed6a6451e988afdd33ecd3da1d7bab4182cbe1f24b05f9f55bbacf940613fd87e61126aee692ecdbd2ccae50ed15c76fbc9567aeca8f66ebbb164db07a6e249b63b5d3e701583602a5e6828fa7451a315a2179187270235c74ea209361ee258822d7617d1c9469a598ca6693edd45ab6216b107a69ef05e62119a8bd72362f178c4cb9845e4792cf19187335989e858486e3652094e9670319941271be976edd3b249acf35832c0f1eca455a823e6959f57da249a8bcdc5195f0bf6e8dc2e1281abe6e2a5e2a74099dcf885f6893c419127f2449ec823776a48c982821c345cf88eab434a434a2e7307b22feb8cf7de7bb2a39104b20639b4f406d03e2517971b297086c09576283afdf5135c6976002fb34f0b8ad9918570045bf78286b4b653ced5920aece9c0de7bb4b65c28dfadf990e7b67f2c378ac045255de08a01402e2e2e42809aafab9b7b03f674742d58bffed6f1dc34d8fa8f7b2d49e0cd6d18591461e08a6f92e01e5cc50d471601132976ccc0841c0803531d6d12cc4f70eeaa0998ea7722d1edcb37d4bae2768d15b719c9100ecf00c2a8bd4358b949734255700ffe42d00d8781c3a8e127f1900d54bc54d12bcaea3712c803a778fd0eea21b892ef1fa0d3cff6160adafed32ac81f7db473d9a2284dd07b19ddc61ee3adf24601a19f974705b92e83d0cfd3cfe3e8300ec7106cf4d7b593fa18a905a6fa342c4d3be94a3c1667676e5bfb635ddaa8fbedad390e5db87278aad2fb5c87a7da54a6f71b06ef057b9f9f700ff68279f4fb4d82b722bddfb50a6e5758036d62d40e82a92198eaab54acf2ce156f47a7d487828d6eaa8d64ab9dd355b4561f4c350f7bc13d7a8ac7a30f74fb99edb8adedb8e7c2d4c836158fa5d98bdb326ec741b7cf3f3eb79be7f61be7b1f445967538a7d3b0350157f44de7d010b57cc54bf52f2ce8d4423217bcf358fafdc6699c56450edec0234d138f441a3851c8803d1d9dccb9f318f72efa7b222270c5394f700f9e8275de1053f1dc40051d6e0e5cf1d014af0787c1fc440775df67bc1ea3cf340976aa68b1668ec8cf1c913fc268f069b1a45d1275e6c83e31df3d566c5cbc15ffac984e815e71e9177e989cb4b873078b3bcf259b511d5d0ee34ede5ebaf4fae7e54dab00f0792945ab509f8fad04870c1a3c7c03baf9b9f12ef690e2931ddec9d67c0301b661e31d9dd9613437454fe351eadc211b7690833bdf8b9256893e777c06e0f31108ae7af8bcac812bd882a969c5eb0191300f1eb85a61f97c0c822b1e9f8f4370d5729c9bf9d823803f3ea90138db7aec6d36e6288a918dade6e655b7115b374e66a96ee3d6bc97d1676c451fb8d28ea5f034379fa3088f9bd7f10757d9ed630baee093214e8097f770f9006a7c85f28e5e950b613bfae65908a6e6b1635a450991559410420811a51005b028203fdc87cbfc701feccc92027c6686ede815e205b0323fdc87fb606756fe837d3025c46958425894137c85b8913bb2b2a6083a3e0f7972dca7c21eb87a100ac1277045003b84eddec3bed8ee3400eb6257b686ed288aed688aca7cb4d95416eed8b050c70ddb6b6e342fc488de91edfaa27775d40ede1cb69350dc795ba14eaba556265a6e00b2af548d4745b5c9f41997317dc6fb3378f0f8cc8c9b4ec36aa9a88e51516d514062bce53231def27e8b9d59d256a6e53fd899f896cf48ac675420be5283e0003c881f4ec30222bb76fec1ceac5cfbcc8c67a761b15414df87d3b0045005f01f2e2380ff70fe0f2cf7c1cec4b37c465e00a7613d8d630076d4b8d34a5a6a1ce2c152a30f8f490035832db892351089bc8138f00622b99325cf52e377d4770350df15557ab9bedb03a72cace16c3f79f219d9353bb3d9acfb9d19fc63c9271f3f4935c6655453036108ae9a87c3e01e7dc5e3317bee9c3f782cf31dd3e1ce63a39168341a8d46227a893eaa7d31ac72158cf35826364f3bd4c702407d9787fa585233627447b6771ecb844eb695dbf5ce9dc7aeec6d28c744d90e75e53c541490ec2bd9575041b4cfb8f6190780e87c0229ee138d6ab94134374f734593460cc1965dbbe931b01815d5170253f3342c5345b5cd808ce931aec463c5d8991f769afe58da3475cf27467581a979d3ccaebd73b9b3b9783bbcf05eda07e5f3b0094f95f279f884a752f96c36c024d4f83c94c25b991ea3e7f60f26ca584b390fb581da07a6e677e8a0feb9f300a849486f4d45c75e477d8eb792771bef20b892f1d94270d53730a5c362396cb771b3817bb412e6316fa34eb5afbc85c7cde3a8ec85979abf513bfef1792f8c86c7c2c57b81366c0dcb863b31dbd1d73e771e43a9514973f32935ee3437af5223105ade34378faa528ae6e64d35f2c0d4bc8c1a83606a9e468d4330353fa3ca1a989a8fd173e7494277fe549fdcf915d9ba33fab412ee11ad783ce681eefccf9d73078f65b6923b8f7136aaef926e4a7db76f6eee3c4aa537e7ce9bea638d6cd4792cf39bed56c9760d4cc336e5b3cbc86759246135c6dda2b91975606a5eab7107a6e6b3fac5067d2cec696e7ea7e39d2d50a16dc75c85a7a29fe72c3cd5f5f9d36561b8b3084ccd53ba6ddd695ec7488fc490243adf227005b578a9792ee814ee9cf3589d719f067b1ecbec60cf9d8f3af391d26d3b9da2ce9d51a75513b36c866d24a2d7b44bc89c2394a68ff03cd234f0c8a481b3c40315a7d349c93b410847f739d95a4ad68c185d228f05bebd703a45106cdd0312023fa455dd34d84e30a7d3e9743aa1a1667421cdfabe9656c5434829c32abaa6d56a6dadadb5d16dc389514ab6e2755182f75e465a6071c5a906db14f0110ad411f2b00441575ad48ca2573f3a968266385232b72094b135b22db8c4753e123fb64b336274b7c7028f41271bbddd4629854e36d115fd3a8fe48d78575aec07db4734f73a5f49e87f24d12b6a5b70c571dcfa11332d47f180e6eab00d8174d8fa42e029dd36d6792cf0700e5bf7805a44180a811c5c31e0a5e0bfc0d16cab694e0818ad9d56aba694066cdbb66ddbb6f7d2576e36e0e5932ea5684e2611637f7c3e9f1f31b376561bc70d1be943efc5a755a8cca22e9a2be51f14824110686e19f75c9f1f24fa17493cc4869be198288944cafe36128934cf3a245266b32cb37133f57c7fd6ebce0abc15cae589bc17d133d33b11ce6341b1260b4da4cc76cf0b57b2659ec722e7b01591d312919106ac4304f3902e3c57ee9c23f1256118df34277fd5279aa8c063911fd58e79c88b2a138fa50824827b58e0f1909718782cf26d71e5a55604bc992502858474e0ea074cc98de51949abaecb330dde8b767996c1ebc1cf2ecf53bc17ecf21c03ee317a2fa2cbff205dbe6fb807dbf778f025e99bedb692d56ca9a4699a76da9cf6a7959ed5beaf5525edda9c53d3ae5dd7998097fe655966bbec6699cd851a49b36c862dabdccc832fa2570a18d8d3d1dd324262baf72324e67dc23036f8c7bd17b4e4bd17690b3c4c4bcd7b694a638cb105c2a02787ad7b41435a41412f68c8ecc1ce85354a6a684d9452fa10d21cd4c1bd39781887ed31f0bd3c28e43aeac51bc6a9e19a98e6a04c73f056dec09e395c5903a3ec18638cb1484ccd29ddaed3943587c3d6714d3ca4a7d35f5323e50e2685926c45d29864a911f018852b0602028ad1c906a1171cc4406e00baf3c2b317adea33500da5ef0145c835459e6c40701514242474816ec740bdf358608c31724e91c7020f853621b87ac74fd80ba2c333175e0ffe611e415ebc97ebf0bc0526af075b01e83fa3c3cc6e232bb25d5f914824129d3627fad346232a1289ac203a14b1155813615153c0137ce59980775e2412891e3cd08540ad822216feacb4b9ac7f469dd5210edd88492b1ecf159d41d810be617b0ce486ada3164fc54265785c7ccf7b29f11014824370753d1e3e892d9e930e1ccae9e24de3b44e856dd8643cc6e1ea8561c78b2e8420872038a1090b6585e66293e66c1cb351a7f05ef8c66375742374d25c84435746a158e3a843366c1d140aaa71d47988749af30c8dbc761a69514048d72e43ba666796c8cf90646668b26c67f4f8a8c9682791aed91cfa916d9ceb285594898e52491abd8c766a6734db381a75694dbbac8ecc756a677ed8861a0ac87531096af4a3772ecf67fb7599edd7b7b39541b9c8ce88348e44ba76251eeb76e6d4b5903a8e64b13fd6f5ee44eb83d72366c5166fde8b7c7c6cc153715073318a15bc97ecf19105ef057b3c04e3adb8470457236e1261c0110a12147a2fa61b7f6e1a6e8c3b4e703c3ab9f15de942214c74ad46efdedce8c23f1c87ef5a08b0e138e308ac1a384ed7658fe3463dcd90b162aa55f41b75f41995c64f1575aca22e53455d32b2af54d4a5c17435591cddb067db6eaa3f55794a1094a33cc51a5922436f04e52a16f5c77a34864575a83f7a6b638dce39ffeccffefcbbd33c0ff6ac3981e319c0d17514779e81685c741bd447c761513cd818142fa845c959c32eb19f313edf73f4797e523fdf51f4aa8150925e46444733343a1612cdceb94152306b53a929b581e66d8d317d01e8bda0ee7c2a3fc1a1d370678341b54d5a25cdcd9de6e6ad6d9d0602c0a7ce9d3d3067c29a3b610bdba1d203a0aa5c478df11cf5c6b1d3532a6aab21e336eaca9f06d339b01eb882393035bb67e2b0f217b54dd4367a10fa9135528d2c91a91759d46604e5d4a2b6c7daeae9b0c9b0696fd655656da1da5a609b1ec39d9f3e9ac963c1611be8b1cc0692598dda2c1c3509fd456f121d13d90753ad8d456debb4cef4e104cac6d838d49c90dfde9a8f0cc86f7f8d717a9b1b57b9b4286bb19494e6696efee97cb1e198c7502c4a562bad8c8a44c5a0d4e3a8f2b6e604127c53de9a0f1c6f2d26e5b5a2e46b9c86855251d2cad06397d2caa8bc869db97195cfc4383d4d0a8e0a913437ff0a759a9b127eb1f5c551fbd2630fa21283721cd00a28b581600d04c261e1cfcf9d31d895782ccca28e5d4674ccce2cf967685cf45b99d1b163760685a3c6db1a0a488d8b2e5303c767e26b1c8795117d6467e0452857a9d845b5c64728a70f82726a8d2c9181c76e241e25e541b0ab5823f09845398e0aef8d8adafe582a8f51519b55e2b16c581b9b19b759b94d8ca7dce6741b19b751398aa8a2ae1a1575a12aeaa25151bd45735389c7321d435191714a89b132c3c6a674d1bfd87ab3cde71ed51e82a479d17c325f2ad5c71a01c1d4e4cb7203f53b8eb189878741f10889868f509a16d514984c269309878465242c7b9ac9c42caca26430cc1ee130bed8c1fa9a4c2613bd891e9bd36432b51d5514cab1d3b0b0582a9528ddb6ec37a15499d1313b836118663261c78ec1cc74987e2ca3fa582d8d846551eb8bddeeb8d56a350d1f699a4b665dc09e8ef7c2f56df0efbdf7f8ade44bb5bc6dc506e4fd782f34aebcfd98f7225fd0f5ee31b9fdce812b6a7fccce69792c3ef464e1f6004e3035ba393e73ce29a53cd47cc81cb83ac154ff3f9db60dc2860d1bfef0f1f1f1813f7e9afae067d4b043f03818bb66549be5337a7664493c0d2bfa74e103571b4cd5b4ea2178aa1c8fbb2e9a414d7e54999591aed5998bd558f3589ea0b4cca294782c0a53b0a1f009623d9676f81c36503c6e7bc6988f566798a5459f2e5a0533929d217da472d2552c042251219a3db3506868e6f808f9cc9c1cb88a381167e6449c991371664ec4a133a76b6cc7a5a4a4a4a4a0a41c25272545a4f94041b11dc79ee670bac644dfa57c504cabcc1a559f1fa0a00daea2508e26173e7e61e8e483f9f8f85c1f1f9ffe91242e1eccb97dac6543016916e97045d24a9dea2ae374aaff8e914af5b1de162184106a753ba932ab544370a48645051497066fc5ad24b74b753b6bcdda4a2f914ec3c24855084ca1644a27bd6485f0293701534dc586e382d723c227ad1285d16fb042b7e1f590611edd6ae01e6c782ff3f1f63b080314b46e4fb1c56318869d3687518c5a8d9999520cc330c6c93ea21246867bf4d0c86e167b56b83d7af3cdda8f85492fc5dc03deb82c63b359422d91e6ba7bd0777cec18d74ae44c34d1aaeccd7db65d669bb0448830d1abaea9a9a96101ab7b5eeadd8eb2bcc0f3522897d6c35505188adbd718e769e1f65b07ae7aa8cf4884300f9cd15bf4a6679e216ead7b08ae184708f780611ecd433dd4d387e11e6fbb59863dabdc03008f075c6d3c5c7e376fdbb8fc2ec66d6c24a235d28ceb1cac55e6cd8594d2516d160e365a12a9e834c698c5d61a6a5c1e6a0e5e7b86fd3db678680d4f95f2b84bd2b1a7510b03bbced3ca0403c58f6adfac3e9611a2979ed5992321c0f96165ef0a513223eda3d3b0304a351f5233929d3ebe67b075f4cd0403dd0b30d02d1da65b332819d247275911d0b0b48fae3d4ad1ab94c3c7d67ba171e1631430deb4ca447a1791a0c0cb20b8824090d26d4b399d2c04029241188a64a10f0a3bbddb456156b31028a8aba062eb6410d0859741175e536c3378e8bd6059b81d63f688ceedc3c0ac6e600e4578c21add8d87ba233a97be6b175bf1a646acc69cc7027522920b0f6bf038781863b04dd6a86582816efcbc820e6e7cd360eb416cc5566ccd9bfb72c06b6a52604f47bcfe2389189956d1c324f3d2ae8b197b36bad8db7e340793b82ee6ebc7f31161b349ab9a19a8e3db9d443b4cffe8545bd411d9293de6e3a380c94aa253f0b4a27e5c227b6a6ef4f8b8fea8bec7bd37c421f30ed89a11f1da2092ccb7c0d5948fd23e9f1f3d308a9cd03378ef05524a29fdbb84234a3fc47b8121e2a29fd34eb18d3a97c7ca75bf14a3f46f15bd8e56a950faec17a5f4aa2ecdd16715a639fad6c2061f59b0c1974941dff49dd32aecf48d449e4e3ae9a4935eef5cb0206ca38b9e1debd1286247826f5bda5c4cc2c6b1088ed7a5035224b2c38a82a7b9303b3cb41d7c769a9b51da9d7e64d4856614cbea63d38f1754615d70b6917d3aa864aa0229e30b3618613ce4f99e3603f14a4602d6c7ba93f74108b52232235eec07499a11313e96e7e345cd08666e2360df15888282680e3eb662e4d3168d826e41a58840482ebc8154e742ba7321e58e40adea362f2034d2ddb16397ceb5b46d327bad8a44b4e6e347ab187bd755a8803c0e5e32cafb3464fc5457aa64a0566d6fd33bc64bef94b7cadb623ed8188889ceb9302ed89888e6a010b86a2019b6a324cdbe06ea600dd6452020b8a2946edbe9440f1f431e9b11e86ac7a4285516751d50a9b2f40199423ad6a552047a2fda29bd84604aabef5e421602b7744d9bda11bfa421780857f46e5e71e12fa1d1e8121a5d42a34be86a96b65ac0af492e7d247b563a3c4ae9a69a441e2bd5219a8ba2539ba52d17da25db1de1eb7193b452edeb3244ab48165eb32e9a8fcc0ed11cece01dd156bdb46680afdad5db45a00b89f8112d139d73bb0929a8e2f6a7cd2ed0397708177969af8e4d4514642a81b1a3b93efc7529b1c15f6f4561eafa3c7655da4a6cf1f2319bb634d727c306f3a35544b4aa559dcb6d170bfb41b48a7f822f880b5d50a8735b3378f1fa95e3b15cefe08a83a9ebeffc7ad4c7e3fa8812d1aa215cdecb8c7b1de61a02f3419bbb32245b47555d03e9a097975aa07b015d5eb834775d6f2d6c1d59b0752e57e77a5fefeb5d45ab721a49abf8f739f55c7ff0fa7ce7722f1a278c78971e09bef0459864ebf83d9659755c8749d8e0ed7ee99be61e41dff434d7d59d7ed0cb85fea24fc76597e820e906ec1d4208a115c243e06ac27e43f8bd7768bbb785207829177e46ce183b8c220f3ef8624b461b136fb625e293680ef20dc4600621b72e536abbb7050d2c085bc7045f469a2c6efcbb245ff9f8b678313f9a83cfe7c518636ce2c70a369fd369caee747a2cb048ce93274f9e1489232f6072ce3927c77829f917e34a1d5782f1e0b05d796a28ae14c9cbf88e8584decbbc32be27a86668934fba46a87b0e423892735af266bb4ecf75ce396c0f76181bf6ecf22cf4de137d26d12e8aa239792795872a3f812979acca63f32ca7e51b3b6aa1a181f9608b51cdae2a7a1677ce2d98fea2c9e232f1b6b8a2b7702ad83aee4a1c3c34b4cd39e79c3bcdb51e8b3c0bb114baa66c0c08efe7761fe77045694cc1f6fe2b46caff1fbf803d1d3de54529a534468caf178b70792c11059b11ef9e8296184281a7928f6f0d37ca63f14586a4eb045703888f31060d69c518638cf49a324a27ac15b145146c0fc2bf1384103e1f2e71c84d74417733f3d056437b29f8c75b44b12d71e4ce8e19460ba31c72798927e4ed2bd135f127e4e5eb3a56db76436effc9222a6b40de4bf1bbf417f734071f4fb075c7d92e22628be6a00f7703a139c8d33bf2900d1ba497a28ae263cfb067987d309559d1514146177d6459c7168129f882b69e1f1d75892caab5634705d18e5db3a8490475591490d14997199d34b2d3ca681f7d646734db0466fbeacbf2dceecb7631978fc1bc9fee8896dab5a0e6b38b3eaa2820d945474d1b24b3a8f8eca8294205c13e3a6651d1d2a3a69d9f795006a3618dcebf40cb6ddbc5dccb32d122d31cb4f0a3ca3510dbdaa2f81debf0e7affff4d6e79ec6ae1b1ffd0c704ccc7b7932ada2b7c5354f86da72cf6381d4fe9016260d9b7d2f0178b71de7783c3c553c04e24219b598c702dff3d373f5f4f4f4f4f474cf6c1421c89d1b7162220f1c640e5c8d7e5ac156020985c48249e9a6018c18b9e02c620f4f733d9b8442b6e2e317de8a084cc59fe0b0a5e1c647304e4cdebcac9309a5b0d2a117bde21ede413670efa013d8e46aad9acf71682fcbd96ee3de83cf8ddabb05572c94b2dd89b3ddc9769bedb6ab5b948785ac5089889050a93e1626a3662b29a15c450e0e8d1ed469865d29e54055ed34aa8ccfa8a69feaf6959a725b519ea3c678a9aafc69a809d339ea6395600ff4813dd007dab813757ab60e66d047d348cfac91eca4eca4d28d90ae69b454378dd298f6812bd337d8aa30a7b9f894da4f725428a3a2d468b21049a7e26316a70d083a50c98d7f4241ad92d609d3b5db6c9771b6a8696348d9e3dba79bb4105c954ec3d29e5d467b767e26e3253bb35dc6674c1d77bbd705aff325b9eda51ee50b08d8d3d1f1a89e3b5c886815d31a5ba7de3b1d2d439c9aeb9e32be1fbe0246248b29607c820dc7db029648a00430bc2d180b25294f04c74e1a091bbab6b9cc43dcadcb7d73b9abb8fc6b723aae14d2dc03b8b52332fb804ef187585e1181297ed7c30fb7fff8e5f6bb9bea7bd1de4761d161bdeaebc1489807bfdf1021cdf1a10d90110f601df66124dc839b300ffea93b952c29f3794d90f870133e9d7ca8cfe52694ea08e908f14b02cd11eef5d369db1e63c7a4ad8fa59fd9ce62b683c0bd4eebed08dceb88f3e3fa31dd07ee75e6d7a4917d8f25a655221b633b1a99e65848abe4f90f1872693ea4e51fef4ecbc4d490289140095fb81def8bef471b2ff0b6b832cd313c9f6a6e479b73d6409b468b591a96100327514411858eca9430ca79491bec3133bfda979999999999398856e9b0efb1708d775a035f80c13faaf58968ee74527ad16b9e93c07392d6595048730f28c28f56f1936855b4d07241305f47abbe75777a0da3126aca200721f3d783f09f35f2cebfded9a262a4b2651e8aea35632e5484a1b2a5dfd564d81aa6a56de9076d47f92fc67805ec22a1793d489ff6afbe9195c3f75c8fe720069a9b10c9320f8fd0b4cc629e1839c6785bb169c1cc310edd18bfaa8fad0ade2ce31ce5508aed46470ee2a11b2f1b35e535aae9d967d4d24f9584d5b00eefa858be41b1dc9aa8a955d42455d4cc6ad6421bfb602c1e4bfc56f9caa846e4fb2bb56f8462988cc363323016dd28bd5040faf241e02f78096133d77ff314c157c69fe6434a29e3f246307afaeb2832e8a53c064516b55d06f63e4a067b1fc31e447419d6c89299cf5c3308c692430f0bb333a3cb5f4a7ad1af4b8a36591f4b24b14b6b441ebb08b3a8894d96cfb6bd6d3bf36c1bca67758171f1a1312cf3ccb85d28f6a879ca3bd745ad114a8d887e3dd6a80a619e1887696e3054502857e2b144a7301d23e536a39bbe6defaa588bda2cca67e4e98dc08b2efa655113c5ca8c4c165e74d46665e0451685ead3538b9a238b9a5689c7121d63c9d3b022f7f04f100f61a26b47877974626c6c46171dc32e9907a6b8877f809a20d25c8cf2c888a645a393172291888ae8038aa9e75e8fcb8fb76ae1deea15f1622e9fbb631ab03edfac6577bfe7e37537d490807f82a594f2bd6b7c2cafdbb6b43c7efcf8f16328604f07edc7232ae1e84de9b6898ea3e74522dbd59620b63b1a9d6d102ead1ab5cba9657b6f643b917579b6e5ddae8559ef5c1d64dd2a0cfc611879e6b9afeefa1ec7534a8844093e3f2768728227246e18650f116e5c005cc8832b3212264bdbc67305116edce00216283c570ce1061784c024085804e1c63d5de18a2bae08029329aeb8e20a20fcc00757dcb8a736ecf80085090a131426284caeb80285890f9870e18a1bf707077d0513123061d2394c7698f085b0739840c8489c400620d69151137c584bb8461e6c1dbd105e9f7f52cb3a1bd7c67d29da36625c78d69a524a69c721604f473773ee4ca13ccbf0b8f918dfadc43f510f5cb5c0345786a73ac0e3b099e666cd132c2c023d161f989a87ef89b477653dd88e5dd48b1304ed506187b541273854cb48982c6d5b493249cb30916438bdb8f312cd701272c0061f1ef40e1096c13b4b27694bb0258b5992ede21534db45281cc0ce67574a6516ad49468fb54559238b928987a919052670c061cd1c1139c187c5b510f3334762087e584be88ff0d0622dd94a8f5df4aa7f602a2ee1a9da8be6489f8f4ad83e1fb5783dba09f398ef4f2f3c4e086b21530ba1b4d0688462c2e6fba7bdf05471088f6b2f5a1581d0dd847bc42c58dafed99a4c9c16629e46c976a71bb7782cf371089a8d4b785ccc827b442da215ee3c66a312621677f644253d31660188388527440c3ac0f579985645268f9b11c916ef0c47410b3df009622d893bd88ec025dcb0969ce0e7e312deeac716ef65c677366c3c989276bbc29d505000f6cb76ef362ab34e6437a26f6675d076890efe8a566c5dec3982e73cfdb4ede9d87304761412f4d933bb043c55006699c068b5eda453f3b550a4e287c69e499f5c78224d3cd1abd845a79878aab845059e2a6af188bc97d8f3586a50dbd5e854a24f73f34e9a9b433e3fa64f76b5d063998fd5d3423d73ce9cfb72c468630a72c708c5643302cac23e51e0087b3d363880c7f2c229f9e7842b5db807bfebe1be3f5e99ded915f340e6d16d4946330f0b37f8820feb4864e2c3c28e5d750092bbe09f2d6ef7634efb306b47f20d4cc953c9c385d7357360233ccee2bdf0e3365c335c69e34a1b1b14aefc12ae3c36e79cf399482482b6a36124f3d032928864e3772e9c93e164af82f47a6c7ced5896bd8d39d39833ac3e165f3509cabb72139ec26391e7ca3f8f45de54b9a7455928967d604a5281258381b5207f22920d5e8c9ede2be5b2ddf594fa5eea091ac6d110a09d2d4cb39256417b7a6cbbd231f9526524f01d2381d955dff511cf555eeccaa006f892ce9a8fed43ee55da9e90172a29554642aaef6230d3ea75f1253d21359b338d80e79b7819a755a2f3169d92e2a9388bc7ade0a9188bc7c9f752a386ca55e9694ebe7d3aea6cf24dc8170357279892a7f4e7f4a35d9ff59ad4ce33867a2c96a253f2910a1f4979a468052f253f05adc166c59597378f45f2dcf070509f7878787824a491479a46461939bdd2388357929d45a2772b0510fd25a1d72eaa2dcad230adce301c6ac610c49a3932a2430e6b097fe648d3418825fa9102f4b096603f92e8545f23a285e8db681f013dc0f3a17f1f104dc488a55998e7431fa681829af04894d14cabcdc2a608755dbbcd1216d99993210642ac992330083d2c11cc2e4bbad6a3d694802c5256398b4ef5b7ca59b4103ccdf5b50ac54d97e03647b803570c54ba3d8f458b9f2f2e171c44b2ac1393c09daba4551c94838d318c5bb31f66910042b26530efa5f43e110710725f8f09309c00f7602b1e8ffe0e1e4b8fa1add890cce171e15d1bb76ddc930b36143cda2210c3edcfb0921d9d98b375acc3ac9a22cd35eb5c1d4a752e28d4e7217ed22a149d22e7763d45ce652054bff459afc357a5b9ed54e3c9a6f9808b7014b8a6085c310b2b59d6792cf42a696274edd8192312a7ab3dd624da99e895f679259d22550ee2a1271c4615d98c6063bde743c76800a26333dc3e83f1841822d2840cae7b69cc4a9ae31d1cc01d20202fe00edc79700728a885e81d20a0200d093e66190808a855ef52ba41aa1dd117daf7340ce30b1e068eeca1c8b6cea216c59675588910d065055f81854e9f81ba811888819aeb20386f94e17ad0018f6b6e09a1a3961007cc60541927876f60aa9b218410f6e8769cc3adc73920e56e32c98592a12820cd1a3d3b113b93f244084f5833471a0a21169da7612541c18f9ed92130d557bc5507c154f760c128782b17988ae2bdc8ec9d0d1bb79fb50fcbc005b75b41dc7a2ced04d7c0e0e65a20cd1a5921546c5d73ab152384500cafc97be1db7368c3ed9be1f6997590d4e071cc3b11c9c6f7b970ab85e88fe02cbe6921e20df8a6550f89d7b2c1d671aba51dfbc17638446451f0fc84bc49a8855608eb019dea472abae74f70c58016c2adee863c4b29906fb8f21d57898c0ed32a1595788a31aa3ce5984a8549a92e2aef5c865089f1a4910e351f494aafcd1a7de6c805b4c35a42b7635c43856c8329e9835368c4f8a981ecc71a6c4fa846b68d1b3c362370fcc7de56ff341fbfbf7ddde1acf900400eb6af8f3931ad7a6cd32b9b251c9077891daee9b8fc4cab76b83c11b8e29ee33cf47079ae6915002e77d821ab3beca06387f7503920ef1239ae1dc3b2639aa669efa1ea8f515dc2146334c5a3ac3cd69573f79bfda037fbc95a19d627bb8a4d750dd69956537f9a022e9a1cef1c8fd50903ac6435c753fd1c2fa2d51ce72a119892e761873ad39c3c00e47554b6e994b44d342769b0590bd39c7cb52ecdc5196c447ef9e07b8dc3c0571bc76163f41b35c9c8860c6ac095a3c4883a1c410c4294a3b0518c9b564c15a254de50ea11afa9a9b92b670d091c75a8431deeca83434d2fa1062a40005f3a4473f2336a12952fd6d949c631193586fdb152634eac25e05dd3fb4598fe64d418679433aa0894f3f92bb6e3bb924128efca631c5ba931cdc9c7a83fd0b0ad24d19cfcca619a88dc36cdc74a7d57065f6e231e4aed9e90268aa27f2817b8525581c58e11b60f3b37a889b0b3245ad5f7b14db2d9d659258b62f9ac3989e253a1829aab0d51e166f68a31c608c3b8f24db42a65d57223ff44abde12729a5c6973e58d1663782287baa08584f2b0837049228856d173864d0d096e1a6c44f866832b7e297811356d52c2d34a331d921e619a51d3484cc715e43bc5442e22dadddddddddd7d11bd8260316bcad8f0872b68b76ed83fbf06429e1d38ba8f7b30cf7b51792ff13633b9cd53b8cd5cb016b7cf3d3c508a8de9fb445ad5d1306102d1b18bced363d88561a310d480200a6c743d995114b545f4a5bfb268d5d3028c2a6e49880dbde211e4f016ad7a4980a28bdb40578b3a0c655c70c2edd809f7e9c5b249574f800813cdb5fc49d6d3175bb43b733209badcccfcc797627beff827b292b66213f25e542e7fc87b819799bbf7858b7aa7b94fb24e734a9a631ad815dbf3b9ef5eee1ec3c67d864b5ed7bca60c82bbcbf3793df76d7f296e71812b9897e21f9d448ccc4b71f6b8171ff738ee69b9b44e34e1c4cc6d29ad1333cd35910ecf071df335e45ae05b2e08617a1bda8217b73bdd07b908ead5e8f2d821148f5b07ae209c02ae0096e032736c20d8b3b5fc200257a2cfbb7012dd046cb27991638539bb963b590d04297d22d9587777f0a65f9392886c70dc66041b0bbb3eaa36ad1616f6116c2cd39f168459223b4313a92fa8540cb5c5b11e660ecd8c00000000f313002030140c88c4a2e1704c32afca0714000d9bae5270489b66499062c620638c31c40010000000008048832600840208ea49a9588461f2bfc23b15dd63ee562d9d379c02b0d3c2b49ee64b58b848f06693478759169dc03e094a2d14233c87d140ad0ce2e107ee0527a148be8223fad8fccd62e8dc0bfe16a59ea85f9e90a58a4b2e0a72dc2f1472831c2670260b854cf78200c89830ef367ef60caea9bae456a98808f3ff1f0f0923161bd1cb9efe111f5c07f2b80a8773fe3556bca3b7486fc3d0c34c6adbb90ad627c803fc871ea62a48e93a3ea94928bbec1e7faff811486f81b8c7dcff633c9b0ecd7351d163a5be26ff9043a9f3f7b13b2eb0db52c8c03201309d550de1c44db9fe89b515028e61645057febbee88478823da3aa04ad6871f22c75a136de5153b9b22317687d57e39d75a7af84198a2a6267eb6269dff36ace86857f3d9c4511e114fe97e7230c99df4f84bc3d50b8fa7b8222b19914ac25c1ccd7ab39a22949a0271f0a478cfd2d150f5ab06ab0c9e91fcc4bb3a7fa07361be8671d617cb454a7dc038b101d4a1037c43e4598f49ddf29503f26840a68d2ffce317dd3738983121b1cb2a039fcf08ca024534e8cc8dd993f604ba141bf0167d5f21c7f2d064be90149de27ada6a7c090c95d0ddbf728bb436b22f6487a7efd38462734e516a913ed92466d1673049e450653b2f2f022ef97acbafc1e922622cbd140ef8a76244252d2ce77c881c8a37cfb9a422928eca457ce62f134e08eb3533b6004cc5fc4e29638e3f038ce9472f94d4fb91b9ad5044f21038fbb67f39c3ecce00e95deb5753e95f18cea559af5877f32d75d424ca1d101385eb3d0660ee73e8dc4700c87ae8f4e2cd5bc6e1085d768989aa39eb68646b8a15ea0fc506802c5a3977fc5e50419ae64174202b04be264b73fed7056ed03417826c2ec5923d6932a9bc9de51e398e34e5c6efc9b866df4ef4716b17f6d05e1169a56f7acffe9602ff2d96fa6fffd2ff8660839dd95917425c8e1f453c089c8be3da954455e003a3477b74ab42b74020fc3a980356c968b16f44aef715c60f9b3d3afa8a644cba007ce81af0ce4136cf2d8d422cab04d9f30871d53997625a06f695f7905cf9050814b27e0b10227a349f9915d021ad7088853ffafa63c38c0112b7e425d5de41162aa6d77ecfdf818f2ce2e102f6dba7288442b1315ce737f568b63d29a541f81273136d5e4e33eeb588153896ce135feb7f9c9258d2e489d1669eaa8017ce804a6ce0d0c6d06f4656d40d44e0b38f6dc2c80001b8ca9f76904b0df835c3a15c00c6aee79e4317808af1569e8904d7b39fe29b56353c1644e3c79c64639aa19881e9e7e994f8db9974391640f8e304ab1e6a7ef9032c5ef9e0ea50445a3f2f80f5350e79b14fa5ff67aed7168a2d0d5ee066ee21af291a98808b9b6c1428f540aa3cfc1a6cb55d33541280c3413e00a8af242cc1d072bf28034f65c760059ce96199d79daf45d91abec88a39239c1ef3257b354ad9a070a23211edc6a39a28d2e191e5fabc4b965ac7b7fb1689e627d1d1af0dca87a25498b79229ffbd63b5660be6f24d4b0f4281bced5e20c3055eb75e20e38a26b645687245a83869a1472e0b7e313dbe0a351193b8dbe0da808a403406f9986d5b98fff50760f29e581d22c51f8d2f317a0162d6a2eb790c56ba4d7824bb49f26de480b15c53f3809b1a1f97246a9d3121293147f24573d259ca749e57b07893e10e309a8abdb0ab6e2ca055d1b4594022921598503082c8049e73bd633d97073edc8a391c148d1f0fda1f32ba91ddf79928d41fb4c9d158cee34d03e12018abd1b32888bd329777e22423b15c666f0f19e47ff674311944d4f4f413c9c66c1ced5dc874f3679b79201e04a08f3202887d9bed934d7ce5cd2cb47c8350e87161c4863d6bb5b54adad62c644b49e3b4b5ac6c8118fa322c3b765bd771892d7918ef563ef1b86d409185d18acf452808e99b467ff12db44e0d88209053e72d9fda3c27dc92ab3b9e540198204e7f042a9854614a75c79b7c34dc01c0d51d547157278a1b6f6cb8b3b01e38dd1ea0b0b5d6fb3982cac171f76f030d3c72312b81b3619352a5ba8411f8b312ad350d16830d9c14a45b39743aba4859e3c205f7b3ce52f4cef2435a6b5cabaa86f2d697df40d30331e218ca9da03fa05badd59f2ea5644c5fec687154ae2e8ca2b3173edf9234a551c019b4888cd4a18fe97e58948359152f1c09d024cc2a50b2d5c3a416f39456cb5020585825795659e560225affff63fcdd1e921d94eddcfbe4e8454f578ba53ad8a1acae2c77a14243e893892190ee6f296560db2f7ba8635ebeb7280f6fae0617699e32fdcb8971287692febbd8a28eb566b5dcc348e6e6b22f1b9ffb6e7309fea4be7b2bfb7bbf93f9e30f6a99697f581e0235cbf999e05dbece3bf06a5fc629f99940b786551d0a5115f106f1264f40ddaea35875d018f3e8d583489aa15ad9d51556a39f56858cf30cb2307d0c3a29e9a320ec486a3bb2595c1db5b74a2c85ceb8c935c47755ec80ad96821220640e0d5cf573abc180a116079b590819fc8660d2ec88aab8fe17041843fdf83054cf4ef1375b983569b4891e3f0ee44dd5d53ee0ad6f0087a9a92ca4f8f03b3a427498aec97bf6b098fa5dd58153e6264e89d65cdf1a14cccec2fc86d60b6a0aff4e320faa0ad0190eb28ef995a51477c561e0078b3d8d226e3d1366b33ce352574888534731d99edee7cc09cc0302c711804d40b0ead257730763e478bda1f0a7f82dbca319e74de926e854059bb312a1291f00dc5c874e38d07e3e34e4e58838586ad0d45368574f81a7e752e6f53f361647a325b91bc23001c43570af7686237e81b775961008b0fd1c4a282c65d5f31896724596c2eced003dde5c015ee6a7abe86861624b1b81376c78e4eae51372214e094aa378678230bf7a0b3502c914228f859b8afcc69872ce683f99d1676333da07e9eff6710971056b71620f145e6b2e4cbc76d6eaa74a330a990890dfda298e0269efc75684b9d9cf0888e2d4d22427e4afedd86ec81310b58fedfd1449c4178fc85dd8b7c5677ea0f74c2c2207f08f71a1b5c91211daab2594397012179d68de4df95ce4031889213a8fd7f546af59e844d17b6be16db829195cc0b4c62d0b10d72bea390d6a86fd8561e34bf40ffd79e4a4f73d118c6766014a497ef626d9284fb7ff8fcd3fee920793dc2928593ef15e955238c0c921dfc567f1c2d19dd5906f6e6868c99970c1e86041fd72c853ef26574458bae6a186a48ed6e3aa3d742a5262059720497a43ecf557ffb2ff48920235ee1d4c9284b4d4258a3de6e835a46216aee29aa08253150134de1db1f1a9e03dbd4cba19d9ae3e99c72b9047545fbf3daa18fd1216d43ebda5a9f1115d27910c187ac5a617445f48afcb0d5661959eb447306e8c6d15df28b296e59065ec6589ded16f8915534c4282a320efe5e80c57ad494f0d16feccaf92542fa47b79e3e491d20a6b8d8444b2c5197c5801d28ab080af63377cb4e726a829df8ef4ee749dededdcab497bafbd550b0aaed8f4713d452b06a3d30c785649d29b3d372ff419d2dbf3ae80d158dcbd152c66e54d16c6a47ca3a37a49bcac1616b782b55b332985ab94097b6d170134d19f20f2f9bc7ccf9fec45f57b8dfb153f94057976c5d7cb82bf65812d97bd6cb8212df55231677b3cf7422a7a0955cf7846f4926bc68c82ab5c52668e2ffb7a0f30938c8a85c5b827e042d61612981b5d3d818575905f01c6b6d57be3a6a0c2624a8139dbb61c66574962e4c6576e9635e737709087c6f3661d06bf6269a2a230d4e54e2f56c4bf606e0b997c11f8b496f4cb6488fb97b61fadd8df76a0ca65f94c764b7b6b980ea37a42bf98c0e261e055706012d68bd96772cdfe3429a96866df5cadf3f131e821fd70bc1b8b1987f9efef0415779ad0339da840203b353ba69639827b868ab53efacb4d60caf93fe5a2e986450fb0d060c69f31a4f591398b8780d138e0c5727a9d4af5bf1e2998c04d93a1297947894742909178052f873751ee87391e5d92237ba8def514c68872282860f4007c94ad188ee693e153bca2ba7f474fe305ecc1b2de900db6d985729bc9f14a12cc3a7985177c150faa95689ff0911489d99b5aa499a7ebf1fd35b876ce730e6ba4dcdf77353bde75f53a95b0c65345de5ec7b26e99d78ad88919c14270277722fbf089540154abc326bb4345c504c1c6d46f8da449430eb621da6a3b668d2a111a1dd18f14708640ab15fe55a1d429e96ecce2916a282d0610515735aa700eb26a019e87cd69116691edc870d6d155f58efe017c0be50ca0f5dca43571d0c34c44c51c7a62623b6478a167f228205306f217a338ea6dae418d31b1eddbd6be779640a3c8278810af88bc1ccf4605db2a8b38694e123b51893a5314225d9aa3a7330124f0d7d9208960bdc2e3699fcee45370d25b4ade6dc79523188da587b993d934b081103b19fb4365ce84ce6aab9b0b90ee9d077d6b9bbe80721de7a6113d0dbe87821af69b9a1f7d092f84bdd0cdd3adc71da6f2a7220a900fbfed3dff64c82d21b0554ee41790dedb033fb34efe1f4c5aec5b01aa14186e78964ebf3c36a1764584cc5882fe6655884fb60ed9972d2600bd8bd6ce1b127dd26c224940dcd9f64ad0f60cd4540aa0ca49705ea9771b4ec8541eb5932a55dbfe305d604ba0de658369e72780495dce72d46a5a9da60d4268c5aceef9710287268a82c6e66d79f1367667e5f61b8477d8fdc4ac36001210cb2c8ef12a136a9efae586c793c53007cbc5c9277d8789f4ef7a75685a5d482027ac6f5e6ccc8910c14482dcf38ab5a1a76d6792d9a1382dc739d339e3b539a3e6c1681b1a30b880254967c547fb48d154f03a7c08731bfd4ca49bf58b1553dba9cbe1b983a37448da7053fd3acbf3fdd9576c90b1787fc90ece20dbc4c3c09bacb2f33bae6e164781a64ba5b3b37a4fa0638613d78b547a5f8e81a029232839ec583fa4543ad967a1906de12d7d442723642a987bf756bd0385a2eb2b8b619f6454c313142de268885ceb354773021bc4dbccb05bafcd5f9e170caa1a5c2124dedc5f6d27f133b1c854f652d42cb9be5505fe92055dbbd7ca717e8c000388bee68c9cba7b291e0c6d2aa9f3cfcb18991d4ea406efcb67d6cfe602bfed1eae99dc0ce4363d4b84cc35d0e637cad6176b36c2fd044298ea75a2a28d1054da528921281d90a12d760b48e19f076fe1a9a8c4a8524e5fb6cdea1472995cc2343ec6c9345226f26f16e2361b7dda3e1820528061540460df4ced7e3801809bc94305cab6e11f5b0922a9d114732f7e6f602b6f5c937c0254b9c8fea76755b3538d161f19d37a1b5fd3ca94752e688608edc53d4acdfd9714febdaf8131d98e7849244565033b71c5cf01a5bc3f1bf1aa0741292c7ff12b20ecc018292d46edb544dfa82a0539a1dbc9e8237d76ce51d9b20d540acf8964830875a31665c72f078ac1cb59448087179388418a1c7d8818a9503b1117a6420202c36f36b86fda1e74eb458fe8709dbf6bd0c59acd8be8919a4ce72e2c181f40347dd95673723080c26071c2e5b88d9e1ca22ddf2cfbfb4f7e3aeecf4de5159074a565eb9c4f325fe10ffdbb3c5cd383e5196a8288e56c3db87298d5966cb87782c53ef1635d308a3db6b07ee83d944a232b34595988d868a13b39316b4a89d7e937c410c208d239c1315c0ed045d4e1e0c6b4d9ee48d90d37b3d2c8054787c888538da123498b4453861c76289134e35f301834c010440371738ead9fa8f8498e8421c6d59ac78e25b91aa12397891e9a909af3c75b9a374683e8501c19d7a791739fee425b8d90cb7c0e07442371aebe38461904e72c2d1f9e9dfd7bab2c063e1e5fa84765e8272dafe204f55a84e206428c53748eb1d43daa239ee2dc880fd4e75e05e3f1c5622ede5f180cd1b694bcf51f6d96e38836a37828e6aca03088f23328976ce2de0b3b4bfd561603e47c29d8c6759d97a4e1e7ea179eb04b940545e3734de07a1a429ae6e8860a119798a6c9b73434e99cebfe5baacf8fd111ffdd7e37477da9fd7cebacea3b1120e2aeff7a0c887a7742b1f49dda4e6ee593460225a7b4781488ba1a15ef8266e28df707caff193291ca597c154491d23253e7b44f60fb48f9cc1993c10ae5d613d50a288a31e40c0a51c7ef1f87f3e18213e79603937db9a61d2c44f7f950e2a6d017fb48be92bbfc3918965d9662d6d400c620b4c678385143b33051e222d07a61e5117d8e42f38757335c8eb6cc247270337fe668d3b32b629a345d715245d19af63a3cac2ca41a4eb1872a028d6cceff61349f7abc6bf461a4bb6382e11f9959fb4309366c9d63a112026617a9121050bf1e8ca1ea3eb44c34012c321fe1432261d9d879b3390fa1cfa71e701aa909c8a47ef9f192cb091cbd3370e14fa82014fecb5aa0ad25936a471d25203962522c10c979c8400e44368cf63bd6cea53b2a749311f7282c2dee1fa149171321b553aa79f95c75a2e303300012d82d016458da6a412154a1d4e997ea8b69db4e703c65d81d84b35e8ac6f2f426d55c7c57a553911dda4240c2825d448e3e82fc7dfafbbc64fd0527097d887710116ba23263deb28a986ca0b23dac4e278171450720a7cbfb2e1694aaf44d8251bb97dafe27c5009607ddfb193b1f461ed9ddb89443c0ae8ed8363df276435e509721eded94524f363254239cd693dd4f03013e7c59497afc919570e97ed649d5f9320a20fd0fdb5e11fc8f8e7bb0e53b607500275ededc1ce0d02767206bdd80d3f10b1e1aa0c650d6614b0c24308a85a020efce1995f6e42bae7d667309bf84262a0fd6551261742fa6577813a050f3d6485430294bcf0b68a9b292021161e7a7f345ae31717fd2b3433a3bafbb0b666217d37fcf1f96e74377bd05e578d85e905b7edf89f350123ea8ca11adffb2e55cc1dfcce8e3c675c31e340fed32d6e51b8f5dcb253aa50d8d74bb9a99c7d26fcce7f14c3f327c9a8980fb8b0bd4b8397da10591ee0524a58b6baca6e4ceac27f8d6c09233f0333f483707657bad05ca773635552fc01b33d8aebd66aaae6bbf2108593be3310cb054cd7d1f29e916ea6eaca1d2d68299c524751062c8905ddbc3050ccf0eaa9dc370c91ec1c1e65705cff7932ca4b645e1e98025d5291a7d6ec739d62bd75dfcd01ba245ae0c1d02cf81244d5a03eb277df8057798807c637d7886e2a986e002e71f11a2fed6021b530e64289481bf6acd64da295c0114ee8717757876a02108a20dcac75e2b099aeb242982e7dd769dcd63e365c457909a792fff980ab5842f1aeab19f9e8e760785af08fd9a7e2099f03254540f24d0f343846f4597b239b1fd90ce5b25050a2875ba3f3d76221c17168f54108a2b0062cdf4b55503a9e15942ddcc92031ea6c71533f943a8cdbb3bc16caa30d384d2d5aef0a7a2122b8101e60b0660d83e8907470f2cbd336252e848789e94845adaf94027a12aa4fbd1736699dc53c52ede5b8a6d90a6719314037d05c6cd7f6fbaafca7b6adcff6a039b46d61e67bb4d659d57a27fafb3d3bdc8c02972dd6b745dbb38de0af7951ab830aebc5c3741c310c6fab156b17e46d7cfdab1131f613216ccbff85156b835fa482ab5007013a5d6d0268db2a441f2b6552edccb41c333afb0cf0b79c65b0d2f794f358ab5340f09c1f0df39f226a3a58101b13262bdb0b327cefb8d5bdad3bc0bacb74a3f4db9f1b3eb2eca284dc58b512456cb5a100bf2f850d561c4558c6b165104251b224f9f49b0a1ff7bea099d40c6b38500f6f0ca88d426937787c6e64b25efc256e7cb8c854c3044c869bc178c86289f147242cdc4a66ff824a4e91b80e9de194928ca7bb26ee5b5d04c4657671735514502dcbde7b9457804e3d9ba3dfce5c1ab374959c7c289431e2d810a411dcd9ba4dff12bfd5f35c98091aea216d415e3156ad4d2701bda4951c9a4c8bb854036631237cfb6f94652d626ef4a0b73d34cf127b26ba3e668f232ae6b8e067629b2c7eed8c51ea688964f911d826a9695521dffdf8cc58ea4c8ea1b7b87ed2229be339859a53502aa3c2bfe23d2162245baf30be98490ce1765db0c1eba4072d4fdf7931ae5e91494654cf1d8801fffe5071bd1d89fea287e98945b32c63aaf7c04e7fdf6d74116bef11768a2def8f1c2498ccf8b819a458c95522799cccbda1feae445879f6e57cfd5cdfe8d07e23ead281dee03c84abe7909284195097d9d550c80e618401b7f776e66ffeacc317e9f86fee60ee10dbde47813845e7f6fb6bdbe5aa960fdbf652ec10f20e248d8fa9a87fd17e7558c5df6ed5ed26059a30c4a89343215cdc183011d673fb6eac1e0768e748cd71d49c941e5d8755337d209cb3c9b678c4df2b8895a06796914146f69df1bc238129fe3e9696f8d89948b3daae11312e979702f7e8c9c665d7cf0ee38f1711f82dfbd50961bde40d2c8b997d2c168eb7e791cb328aa1791bb9ee6ca93a5ced28480ecb1c08b80383af99842a1bdb42eb686acc709364d1bb4e43579967ca4633e1eb1244a9736cc84d28f4d2e2dd4f3e95f14ae97b964b0125b007115558c3caa7f3f76e59cb8c6aa9e97a84d45eb097a83c4635e003c15ce3b6b16e6682694b0f8cfe51473be9f872ac6b716475ec68ab720d2b3374c7e1213af5a01f80539cf127f8a33f4d7a6b7850a9fe6bc167647cef504acfe0451575424069f13a05abaed66c9067b915d458383fe98d3e566f6225d5ed11cfdb44c91763d16400be78d8ec743016ad61463b8337dc2790d61ca336d0c0e7c58eaa6a3843f1c8ec808407145e827f52e1f46640bcc63dd86e71514ac6fc8a7dad07c3bf654690d41bd41aa7176ef65dcc771c8927166f46d39d0407ddb48a67e378ff1ff87f48acd816008f436993621809c027e342d96cf80ae82fad770f57bb8bb54dd1f201a1f8b1e383fd80c643fb54143d31e4085b37458413bd756ffafecfea3d23265044a18cd6f84f03c3359d55323d2b820936b443cf09104a2b14199996189697d486db05cade9cad39e904a5e0116f682ffb692839ac76b91c3a5c325425f3cc9e5de7480eb018cc1777bf97a2bbee784cf7330edadb030b2cafeb8ceb83d01c5fb836122af3df18acd74ab8da0f0277510fd38f08fdad74479e440ce410dffda8f5955df7d86b4701b064d058ecf5f71dcd7e325416b9827ac62389643e5227bbf83fbe316aaa466c9afe8c33c260416dbc26fcc60b3b4e10583c16c0ba5ff06b77f69201e2833338eb5ce4f51e8e2a98072b989cc79929b14d3ff6cd9f3119d1b87ab5f918e75fa17ea26b4d4a788e7b16be2911fed1a476c0615384200a0032e15795920a88bc26a119ec696a86207607d6e73d33343e05acb14acd9f8f932643365f7705a87f72cc2a8c5b5edb313663b9fd8c313993a9f200c6abdd91742b41a06cacaf8da68032aa365047012d1d4c23528d90816f50f4d25280d4ed9af86dd73130988cf83f679957ea7cb484d1df05288f1e6c62558f4851832e2907600f57453e31becb089d855ad236ca05a6165816953c17300e4a12e68fce0a21df3d67796cd1af564a26d6f6da98baed6e94a4c5ffec012c1d5cee04a73dfd82e8dc5df8738ec072f94fca4cd0b76e1e396f53c082fff6ac7531149e6257c2ca45d0fd91247f0dbf59abb48433a678ab0116d386bf65573de4943208a4bde7a6664b8040b99d86f803fe385b02df17d8485348ba86f836e980ad7b7c58f89747acea2c0a5fa541088e314e83f14cd0fd0e20a84d49316f33dc41306a1a2807903ae81d3148fd0712879e55dfa800ab96acc8efcfea56b30a7085760dd7b8d5e67cb2f5650181a3259b8a459202f0a53c09b2f70698ecb4ccf9a13e2fc5b4db923acc190883db5e29bb509b75dd334e8a8c96ed397e729fd57a8625f4933da1f67c1b564f6a7ea282547a08cd9b0ec6e2b8999e7556bde217b5b112ceab85fb4cc4834d3ba84587f0318cb450b71964c4c70fbc397db7844746e4a50d9fb6a3df1741c81c40e068a3d1eeeda6d7df9d4c3b7bbc2f054000a46fdd570494c29643de04d4f4760ccbceaa7b84ca5d06212098a58153d3104432af733428df71a5b92fc7af467eed1b6dcccc960cd8790993bf87f1448d9cc9259dc454ddd2e1be8df2e0c91699fd608549c2ab8907f91059a7ce2744b4b0df4028596986103fbeb081aa2cd970afcb64a7f585ca831a94cd883d01173a010878c5d041430407b0f78681c828f49d4dca161de43301bb44f86e4dde316632b15aa16ced24e83d2cf3a916b929dbdf7ab347a2231dea813adf4971c4810a9c5fef026e409d35d9d20046fc17c4e6811f2e074baafc7b9f280b000fb8f6448e023c3a24ca41c3974ee191bfb588ea3559772d656e85648ca044066ee40136378139ab18e69947ffcaab620a0f4012947466e4757d3ce6238c9a5c4ca96fa6460cb99dacf255d57583f8b86ff8cd6fc22910eed6bd84c8c47a579ebcc3621c0e0e88c71df6486d450de31e9a695828af6e1c12769042795a52d40714a8dec12e4ab0136037800d2f0c51c9d0b26cd32e1fb0a944cb32b938ee7229bbfafd747bb26e03287bbf006b7bb9ed7703e4593d72c40549ba2419bd75e77bdbbce8fdc1547592d5aa4592191c1e5b0364a1e0c626d341d1c04994991a6224aec155c0f1ae56336192e4f4b3c5735de2e950fa97a0e758917a041777d61fa5cebc638695d19d1549f7c2211dcd150ddbc55986080477b1e03962a6a597486ab77da5254060d36841d4804a495cd91c59e1a52d0408c301835873e3e65fc8049fd1589b0fa6c5e938d3f79e60c357b0689602e32456f583dca78a2e6cf6e4813dcf5b891960a036645360076ca49658ebd03f0f78e251640944894f89df81f8f6a8398914d99654833f082bd445b272688185082bda8ce33356cc1c3c95b123674b81f0197225d9bdc730458656a69d93d209bc523a9d37021612a1f18b9d4276bd3f2eac8cd7776c1a6aea10ad70f5b64899e91cd4dcdb2e9fb0f0c58986ef4361edd4ea38fb93d276699545d7cdd53a1e2e9864943f5e15a495ca1d6188641c81c143df5bff76cb9a8e3bd2a67e13a76eab4d99c7514937fdcc82ed3d1c39930e7c583ab38a73925a7fed30e1f21ad311a7b1146f2640121fc51a554cabd1d86be66240db1a50bfa0e71efd9b1dfa1a462b09482730ae6683e2cb69ca19d36cd4d4ca22f0c3e2bbc5729aa0c6358cc762c7ce60b19ad15fd6b905d367b017fbebed7dd6bf73692f28e76e5d6fb7dedb4a857dcef477fd42e06bd9aa55714a77f5ee801ff925ec2ea92fbefca190e03295ef42aed32f884053cd20e7f2c643e4e528a93f2f584d1dc83ea4dba8b44b803afdac99d2bb92c516f08d91c9d5b0ee34420396fce9007032d4a981d026ad42c05473cf6cb443499cf64487ca009c5894cc2a5d3b15dbc78e557476f1ccb88341e70389cfdf5334d25343e401364134f6ef0557ae7670fed3fbf62e0b7a77f62633016ee53573d15a2e4d9de69d6101aa2a74092e4f161febb32858795e1c3baf409a01672436d2a383698e91d7c1d6d6ada424ce5f9b68511e6e557bef548568502b399d785e0b0a5f62b3071599a8f36f30e921f43864fd1b5dba9a308b82b8bde539bf0d73b7423daa19e547810baf7c6518b32f9339f1ed4fdba2bb46a425db6e8a357e72449f67b1390d5efdfcb906d71dfb38b47b0a5ec0fb8ce3fc0703e6a8b4184eef03824c86a1325808d48b7d5ed17bd2175be87f4bea731b34734f52d2152f06442e38683876bff4f07dd50d293a0adfcc950d1b4fc18d10d834434af19cc6d9fb2c38f7224bffc316e6d43c52c3af94f1f7582e2002f311896e9ebe729931dd4fcbfe0b727f8984cde729dace55e7829e72c6d13c7f8f09691d009d231ef146609a9d813f4214b5e5a8168a2b6806839b3e6186b9b82543a9e369cecfd8d85478a527e26ed0b97585e79c6b5ccd15691f2623a8f701a61f5fc098f54a6cbc4d350197a79f127f1d822d99e5a5a8162b7d4ff2373a5936ceedef597a2fd6656fcc8653fdbdb31786fabbc407936b8026f907958a0b2307a31fe92a992954b4817080d00ad02c4e76fd5dddf646dd65e2f9f595c168420232b35eb6b03c6f053d63ace1a5c9143d397d584fba4001f83f4f757621aaadf9aa00722ce6faf37a0f915374da5a73e16b176fcb737e881dd4f01bc827eb8ef5e828220550b29b417f8da011cd0dc8c4b436c6e17b55dbc0cb8ba312e750dc05a98def7ff899bddbe785d57e7fcc0b8c0110d5b60d4e5817e2b8fade045c813b815b829187041683f670b7c5420dcfd2606cdbcbac9c87a5e00b40b9451891cab205a0e3e4019354f8ed87f629836483f940b37c71197b66420afa42594970c6228194862158954d518be8bfb3b87435e2c880803bcde08c3c72dbc8ffe1d636fb9ace7162933b1612efaea28ffe28c59b5ca19982502c498a27b7b1ae385e845a345943a6130fd1e38a3ecca84f4f061a651a2664b12d8123747838f24f144ce77e94202500a902f66151858081a8f210dce89b34461cd4e3f4479f9af788f0e907ed9d1660c96107c6a78f786833d66ee7ae2338a2ab1b3be55b19edc9b171de8aec35052312ea2cf55a5de5bb29fe95aaa4190fc7d8a8c92885b5a90e508574a740b79fb84289f8df70b0614752593f859293bff5004a3ca3e8004fc27f04a138b8694171ee06df28c48a75c66e81103c0df7ad64397de859742bd1f45e24d40624b1d02931d3d2f8833dd0af12c39c864cf5df01240c2437f79687ade669d1256e0aa98a0a3c119663b47741f201db2e265ea226929d1c9118187675332b51f46ac3415f6aa47a5e090883053718397083cd7a145f8f4bc34d7731a16c0933f32e0435c99946f6a4955ee090d5a407b3f3c24ab18d8a8485eda6e981f7c4397f51fc8642c60dc5a801cf99cadffaef376d613236f2bc403766989e48782e2857f7f53c3b31eeecf6458c230d6323b733954489841513d633e0dcea4183002986c479c12c52bd5ac89c8529728b944f7c917a55d565fd42f9a6aa8891e6888a9a2eee53aa1b88f4a2d6517f5e6e8e8dc1a18c0964547223bb321d237e5c763bae52c6a54d90930eebd294624f6b504bdc1ff6df235952f95d189ff166a60b5d8c624feebbb8093ee65ccb2fb41ac2d47d6fdfa086b3a0fa3cfd222074f57a8cec27c42bfa22015883b0bfd6d0f97c61c6a483c96a6ff7bcf5f7d8b8f645b01da55ec9f02a4b9729a40bf9c607a427075addb8b050ee4154f7abf8c9dfe2cbc971eae71804bb0ea764e29fbd9c129f86c173b4a2070224bf7f223d093c77d0be2673a53bb39c3a4ca597a88f8457a6637f08089d89965ffa607b07c8566f63651367420447a00946d96f3333e6f043bd2b95e5e5179bb5cc31ccc7f3ad0e7acc50426466abd01f4b826383c53b6f8e857056a2978947c89ff48be295f36d6218a35213d0df71665320960da2035a47595f094deec5e3cf755df335724a3ad21d220b465a12597daac219230f93b82aef6e38427331bea3b24681a8e3d2e39547d3decd54e3d386e45a070e3380bcf91600e43f5a3641bdf284ef1d9f41d5a8c5b5d958774e828e947791031716776c5701076880a6bad5e2ce382dad2237edefcbef1ca9995b2c4f24e91152c64b30f2c06a1f544742c9a0c94482ebfb9c5eb4854432f2ae6d036719d56ee99943e63db63aa231045a37f4c97aa752f7c46dbd7341b8f0f7311b5ceb4763d5ff42798c7e47ae71c5b8e5795cfbe516da6de87a01c6f72b0bb483b4ea7bd3e1dd223d7354a070ff153851900d97aa2451997234cd846baf7ef17c0485cce288e595c87b214357d808b582cb8395c362ee59c57400aa1baf2fbfd0b9fa9a37be63228a8c4252ae3286ab2cc7cd659edb085c62c57080adccd9737e599bc383c75c38ba73f4fd2e962277447d0c47366f4bce30348d020b6f4ff54b9065c91c7f6b162f3634933f62532094a76c8b1648643903448a58eedd342e2a1dcc0445dd168fd95182748d47ace772e764c9197f4f7a1bab58ec698c617279976ac8496c6ca4972e17ae612773e977a9aaa11341d04066412a0c4dc12f01201d4c014e231bb15974a808a452f85b3ff7547f5aee3f7135e91d6a73c24b72f168a6f966cb59c8c894b5f2b646674727287d5ed85073888fde75847aade88994c2a2055e10bded420703a4780a888a2e139b5d19cb1f80cd15fd3f5d6e87a5b26cf5c1928c0dae108b07cf179d17821116ff820d40db82ddffc973ac25655f49592a6e5369ac0d1c7af5445bbdf689d0f783cc11f3ca1bcf17e41cca97a7bc5e3dd717ba46dcb7205404ecdff343f0ac1ce55a76da0d9f05638bad32eb845b50ea27753ce357e248a1dd5f10b4f958dcf9e95929b41637bf1007c20aec3fb25e993a0beaf045dad5973e7ad555045e2a369871adb4780de5b141543e9fb050174b6eb0f26b7ff5001baf96b51fcacb4c01cb95d968a3e00c96f1914f5c2e43632971ae3ce791f0bd1a412a6c4cf7b8e08d8d8a1ded0c0511ee212d4766ad84e4988c67d726034ac897391c2b29cab863405273d6f2014a96013ddf252f126772eea1061c8c743cad314de212a9373329dad31f7286a4b0c53865553265b2c83751026fc84b370038db0eb13d75683e7a24abf25f00566c4f7ebebe02e0b5f9601860a3f94e21a2c5dab033e7cd4fd4a74183abf62e07cfe7d1537b74a45fdd34566ea63c8fea3ef9a828d6eb730c2dd8f87f85637aa4630a859aa730ac6fabfd4d70754f2f7fb267da5a858da0873db53d4e507537e4f80d2a65c9f16c67381de67e30aefb2d7cd542d7443ee628fc08fcbebfec7dc8a06eaac971ea5a4272a0f80693ad73f095e619366ca6b5d703cf83fbfd7e373e5baa1a11388b9f8f41ab552bbc0404a0cd8cd7134755452915006709887d4514279326aef5f98ac0355be7910b9e20f2076eef43908478d1ccb3ece91bd73e1996e989cb7c22127e808365a8317c1689c54c05f883892ce9a2b495cacaa821fa3cd59e25efb810d8802741b59fc4a954ef22f8b2f1c1a4ab6fcb8c82c1ed4e379f77850b8d3e2d1d4c72ee1913ff5f2e644ce9d6d128024108403aebf21af7aaed95f61a401da86d843681a3dc0655574c9128ca46de72bab9b7eb9b1b7c179719c674aeafe128967fe0cb5698ace8b30d3c4fb5488ae0501b2abf579ffa3030d22495a91419d984ed8e49e762a5d40f78432c274a9d115230bb8243c0eed0dc63c0da1036c58a55b23fc8ab422c905b64b146391563fdcdfb7e03eb063e70b492e9d80216be0bd0d5f1586a485b3e2e8c49e2ae89d4a387c7583e2c709b2c8828534d412d4d26f4da5df5aeb39c30ffa2cf9ac67e2c17aaa476f2fdb47a6204f79aaab8bc532e53cd59794e8d7e8e214bc840a9824b0ee8920b5cae199f1a3b1a397f9f3fb0d2eed51cc83d6a11a4edf8435b7d43c5f5500358991bdcc19aa4f5cbb901fe01b9dd1f2bc37d53aacbb117072828610562a0b24a073bc47529167968b467276b6dae48035c69b8923fef483fc0aa9f0207dc17ca11a9da3558425817e217c123637897c52ea8267b01fc03df3dbf57a6f0ae6675d22d55ef53c85dc5689ebf550aefe82aa5e31d29daa633abe815715268ed70640aee01c7231e786c00a7e0c480711446ac72062f38b98db412d01feacf88af4c415605cfdf88eae33a9bba0983173a21b36409fb1f38f58a62dc7342493fd394085e8b84152f4064c94a980139617e4a571615de9c60b00d0d438731c787301845493b48b0f4198651c8042586259cc10d85901a53f8565060fa911dc002a8ac68291020d091319c5383469c928bec1b91d193334cc83b7bc541c06edda0779f2d1f4dd80a4de20ad19ef6f088532d64bf6725064baccfa30c2557f50fbde7ab7a02c58d47dbb0005c2427fa0ce7b088a6ac10546088a32f6630d0463e23359ce3944b11f84a36930b252f684c27b7c36bf26c89012a6818d8887ffe7f40b4c66f78a3215a99bb86aef96dd174a03b50998c6c4785aa208d119af2e8e14cc52829acb0aa46c3aed953c5070c073aac14767d4ef45448c75fcd4e93438329f95fc0ef67c691b8412407a8a3a89d6011544fd7838661ea7b644ec554d7f9a85b50c817bc50121ddb994e1a48cef83338e780055c617998d265001c6c83418a844fe5ff5d72fe48627610b1cf64645e5fe5b9aa01f049747a01a465b39bdf7da2c5061970a4fea385cbf58357409c54021c6482f508130b2871e3986670f2e2764006cb7ab2518e47466732560effc9005cf65382bdee2c5ce8116233c21c6047bd7f2383c7b39a580b58a3497f38572d3e8a0b3bb971aeae798bc84c50e47c725697011499063df4425e1cd955efb82bee654f41b4b2360b7a386b07f6606e828d90babd157c9be4bff3ac9ec65421dfb52f0d8094469ea2769906330924c7a671a2a9721200c4ecc7be8d5a7667918d096e4ec34527aa080bac0e75760024667e340c16d9db993061723b2c0a955ddc92c5ab67507b9b1ebac188b75e830dd7144094f868f8b54de1b2a87a783424f6b9762aba14d88ce6b81d46db98484004c97515180b4e5b573ced79db00dd08961a648d9e96bee433a5b085d2873ac3b757620cd1b3eb5c801d62e2727c6d6b538a40e6f5c53da64c9a16654df9d4f56bcf16aec01c185d00851ff70d0488548f419640c03be5fc801e291e1c731aadb75d056a362061c096f56f96e3a1044baffa34adc400835a364eb3fc04ca6ba095de2e732af626a767c0a2ca06b1006ef6c5cbaeea6769679bde556f1688b870bc489d80c673fe2de5de579524443b42773372b3094d0cc296b0ace26c0f772a77eda0df427d542e76a6c95db329a8d3970d08b2a2ba4a49cf740e5eb41f5aa1092290a20a8e1ad41243814ae731053c3c0fbf9d3c2ddbd876a49fe268872dd05323c160ad1528f2863e1dc8d609b1ddb33716e99c816f7b358c62836e510fa2192fddd6362a150ec246022eea28ef3ae368b8bb2be822dfb77c2b9bb31d6414b9698df0ed1de400c3a9e881de0b004d0d7e63bf4bfa7cefb18fdef27e8205e4479d5bca411f8f8df9fc56a4274e93d6efc189ac27a49085e8fe38f9a911b4d64591a929364dddff73946af7b727ddd1a0cdf40427970ec338db7902afb5d9e89f858a283b3f028c75a7ab2ff847046784c962ff9cfa9bed9aa224a90cc9626feba5f80fbf4ec4018e78f7cac56c71332839b9403ecde42822fb51ca96f77543fdb29374c974480c4567d05c4cf2ba1707a1738e939581f04b06d9d8ca942a7878810b2cca137881cb09d912ca4edbfa8a894379871db15388d1ce80eff94ec02cd8bb5988948ec10707571131ce360ce128c3373ea42b930573510ea8ff540cb25cb4bd9d64970384f01c588a122151fca115f4500b4fffa05de27506061e54d1b734e1b112ceffeece20e27fcf4559e6918b84136791e4333247806de5d050c893e309664fdcd22714b2d085aa374b25efa65748571edaecb63377247d0981d78c00b01c3ffd21d85af978ad5a22b265276c30cec304268312663a620845673be70fca27e0e832babd3efd01babdc49b84c3dba55e66c1bc2c5b9938102836773cef7af2505b8038e478d58b145a2e1170a9626895d729b8be606e33bfffa0933cb9f9b5e53b25431c8b9a2fe0186f3d02f37c569e2efea1384588d51b974a1d2ea4c426f2d9c97387359f7ff7ea3cd14af50cff30c0060a38e6a65b083362ee19409f64c877694e9c3f41095a1fe23063d7fce4340bee361b5edad66a57a66137cf9cd58715b89aaee4ad075bc9052c09bd4c48faabb7dd0750794824dac61a2d04937677245323c76e43a9921c42e849c27a5b344c70c74e0ad5b4d4538c8aa26b84d472449c26e8dd1ac553b0bb79a17831d751694b1026913b95dd00e94acbbdcf15eba1476c6d3b22f6c26b1c070e1055348fcbc8b66e2719906d8d9cbab991b8722bb2dce25637ab5ae04a9085d08071d56d5c12247e62a3e6a43a124eab9b44b00df61279c247b0fae1959eb8bc8a5e213f043ce3e597f31d68437204718f6cb874beeaeebb320bc6acb3f3a24fd37c38995a984cdf0e40ea3cdc2d12722296fc9c4fc531be89c513f50acb04cd553a67574af451c4f9de569b91bc45d8bbb8ccdc4bca571d52db3dc60b0b17db3049102c4d80da7a0f179e5c05b84a85f238d5952ff15a9692c821bfc452612621a8af5234d1a871144e90cb7a7f1b9a42c466f3195b2ce2df9ecdfe2bd06fabb9d1f084753f57ba07f5afdc10282ba4f2d49ce5a00437c9853c43536d6930e2f320606a32c9f03eb63487ca1f3b1a222ad39613b3d0ce5e6ba6aa7474c94e1a5152a439e86aa611198c7bd6f2a630a02c1ce17178a570d08f1855e43cbfeff22e2298ffd7f5883623e9e5d9e4a84eff579623cbfc0264367d771f4cda765760ae8bec6bc738618b02b9ca7708525b2a841f2bdea9f6f7bcaa6148e94c66610f86a14d3a70266258a0ad2c2f8aa7f68c6c83a2fb851e6b7be4330d2d960d3237973a5395369eda6c682644b4480745c5c43b5cee5ce808f12fef501431d96a5f4ca72e8e8297a172ce10f61b64d7baa86e8a6daffc48261c3dfc5567b79ded15ba6c19dc400477b36bb58e844fe32f944b5f305c39589ad08cacd057b161f13a888fc43fd1f3d78beddaf0a749f3687e84efa0f0ffcb893ea6ecba5277da0ff0565c3f0611badd246979ee352dcbe0466260043150ce00cf355d8858ebb47555c648c8c89ff3047346600dfcd2d9263e5a18949080d4f466a029b8c3d7072024a52fb669456113a31d9f1ea6569f9c47a1b41e38a838cca83564468bd4c522aa13dcb3ff91a663e7addba04de1017dd68dea35c6c85c31ef7c492fde745332eee93b33768d315ff9fd9fd5f3436fe12d9f22c7d4b44a46f9bbb6945822faadd17d4b9d5b2d4e6ccba9456c5278742942b4ecd2249aeb3e39d82aed0b9c3971bd63f91acbe7292ebd24081732b2e0bccef57182c1ba91da5bc4cfca08cab48a39b6e0272edadb7d96c2439f8dc2f1681d1c828377dd784d8f7b684b15896222f86708f1d4c13c6c678a39304c5d24f82780cebb4afdafaf697f63004f0c25c5f50df203d80101c8a280911acfc955aafca4b759059fd64967fbc30d1fa72f5f197ab3ef5efa40c86e2808160f2fa71b7e5600d4301f2a29b6a21147e1005b54fd6a196135b07283874c5cec84ac1dda729887eac132ad3e9ba36251c160550f7f65903c6b58f6a8b12034f049f74f6ce99a0b5a04d52456fed809bb875e313267651d0ab2215f723b0cd08a8963770b27ee020aeb9f211d8f1121f68dda5a232f63d9e800d48adc2e0e05b9083b9b5031e1b3808a01f85240063084384af5597b13e1e880ebb5824fa7049bc012cb50db377fe52f644101966546e3df9af56f8ac38a14ae5f23a8d39b040ccfefd5816b136c5a75c2b65f53bf3ff28234f7cc265307d18f80004c3ae6ec843f1577747e4c9d2378ed03a6ead33613b1910804c70e9e45028280631390bbed1a973cd126c20ffccdb272ceda1a7bb1c1155396375248224cb79060a9a9bebcac07517aa050061360c862768346784e212f7cb3ceddcc7db6ec7491317615ee54162898fa27e81520884cc094e26484f248ea2748ca5bbaa095e7eafb13a84740805f41b7e86e45bc7a64344a75006516a77741ef947ccc119864187714a3da534a0341a307da3b07a8546800779bdad5c5dc87d92881915a5256c3fade7ece72fa925a7e96b33380c8e42cc7860219274fa87d4b0b03acb272f9b33d228a89064184f6b2aae88e9c2bad8812239c934979096ef8728e43f8602ee34396a24d4ce137a59e57c1ccd4693173d257da83141b771d0dfba666f82a407afc10b7dae70064d8f91b9f8406460340444b1779aa8b60388829db4b008f6e637ed33b86118101115552d68ffb79c16d517032576416ad5d801e8ab790794551cb5396bae12efd450a6e3ace42df26e9dfb7398ad38af1bfbe509758d5fc2f370a327077b2d9f371cf9a2b6d8871b3495b5a78370393ab151e2f04fa7fb5138823896f76bd24b4734e3914fb9128a2e13f298f2f1d7cbcefca9d677a710b4f2599d4d1662653d8861a1d5faf2b3b953102097d5a33843e0ea79fc4ab9fe89e5c299da4b4b456bc2a28318d54b85c9bdc0588d30ebf2469ef50e40df50bb09213d109ba8527a0cef6c23071e294d8a1b2fa4c09a6fbc1da18188d7ae52443c673866c0161e91862ffbaa638ddf0987a1ff5e00e0bbf191300418d3db5ac765c7039db7f28cab693b3209f33681751686378d98bd4a951831f9c2270b36242cbb36ef001e73898c23fdd9f2e9c360d87ffa01c45ad85af9932f87368656b7ac02dcad5882cd178a9589512808ea21041ddb29b8c81afe34e19725e0f941207ccfd0d694d3a67f200cbce9d5333429e908e876b18c2198ef8d81e5720aff1232e97d8255c0621ab468fb0104742f97d1cbfd78d7673170df11eeaa9201f1732f06cdff4f66b525542821fbea3b51b98459bd7d0fb523101730b80aa13393f6711055dc0bf6ed1e969b5e4efcb530a5457404bb56dab69641cc2d0f52334bc0e6121c2b0cd20ecdef8fe94cf467802bb665f2eeb7e0c4189fa0b963242d98c96fdea4dc0da1820f6efee1cb5b53a3b81cd59ae7b1c7a4d060b11666a0cc06a40dea570d50f80bbc330a25a0f6523e44d693e42252045b1d3fabb11f9ff3fb41b9386358439dfaca3584c39486c368599212d1a2561b4609c64f80d0e4ef65df02a3a322854a38b0eb4cd8aff6142ecad55b9fa077ba43b80eaaa36e38be6d41a1c23cb0ce2f10188861d8c7d750cd1716e620ac7f3fcad184cba9d416521718875376426e205ead76ab6509d1a44f1c59e0cbbf356aee6bb33e03890bfaeb702a8d46262edf33d48bca6dadfc92277504537892521bf43859b9b1ba9a26d420142161e9c5ef57c1be195b718671ef88b89455dfaf6777b382c63236c9638439eef6ac1a0d91b484764f03598659f8dd57096d34e1c1e158d98f507e4689821545e813d41db2f4e88b0014dafb5108001b1571221cf868b3c61a5a7e33d33a6e9f6cfc795d447e0234a552a6000d6bfa8e22b0717c68b5f14ae757417063b4ee3041299a6655f640f8f1e98394607a75c9a3e0c63d9c72661fe714c0cb91b9b13f5801ef8291fb949cc57eb67ab1a08963e9cf62aa7fac8652b66811ebba272743ac93a97aca7c035f137f4c538ed60418b6f07223ec81a076ea3b607c5e4d81580814754f22408274a8f3fa9ea81354bd2a5acb19a49055463544fa9e112919146f29a8b66b5a4cf429d753034606603aa580a796806f83dd00656194145044015795861194ce17bcde2fb2362cbd95a2d97851a3ba519362876386f2b55829e7eb5948220efa8724b6268ab743da70bc05e1de68f7ad0fcd424caee8af1f582fb138bdd6ec5a9b543e37f98f2354f4a4bdea32fabcd97c75bb75b624f8b92b715630fd3d00e23165251a09bd3bf7708892a69d48c4ad24f5de9cebb17c150861c209d7464155926439a8a62a0140870660ed6e29bf56d0c68a35b3c6e7beb9c80656f59814fa6068f83bec56f2ef56e8cf6e857616dd3405d3a2a17544be11ce5779730d7aea077cb8948e3b040c30e61f36a36d690113af86305529bf679bd162fa639fa0ce9e14685ff75e3b395501061aeaaf2b7078ee73dad71b900983c161c8c98353e85f80612e7f4219712c2ae9e18dbb36a875fc2a367e2bd4f84a2207cbfbc8124e0583680155345b5b2cec3b7729905cf796ffe13d104f3bab7106e92e74cc3905f403a6df44529fdb32b4ee5cb9053d12164f2c936769665d6029e96c54bf743297e00852938366b81895e18ce1f1415ba0fbbb5188168a2898c7dea24a1c6db42a414d26b353cbc5258eae8a7b9b7d069951710658c8402931adc1243ca8d28e09350d42c6bd9edb12c35e72f2676e816607c79c9a9e6704966a322f9e252c65bec100bcb2d6c850941223b2e028125848ae24f5ec0ec5a6c3160abf9597b6ba93411bd22d0dedb49ab402de4a728b23b87b5a1484a5f156d474697f49ff75a10dfcff1b9b5399e11ca3d076aa4a92afc25fac7964b507384e7e8d439582f689475a5dbaa7dfd6f2735b42252393534e6f73482b2b87ba614a6d3d3e39964796ea149f921ccaac731c434f466ddf9be63965f2e7891d05de8d1fd4344a98ad9f5a4a1ed265aaa2c0d55599ad4e877c411170d88e1f70ddecc9c76281da4f2671e193cc494a1e50937c1d0665a0de9df2663c71434a04adf50061443d3658473a2ac10ae8f07eeb058979bd336e05a6bc48308d1eb19c20392f8668b423b19936fa49044ebec6e40fd3b95fc456965cf4461f6695c6a5150c85a4b31c32283645ac0afbe749ac6daf719bd5f51884c511e47f0196b4cec062a0062e50708ab0d97da908c6a5764be7309e79ce5f4ca971cdcc51f60683c30d4f2a428d845c08c3b42cfd603190dd321bc6fcd4f7447ae0aa285b6542dece9cb9e3d40bcb8aa0164a0902f5b81c08f67d7cfed39623e9b60108ca4f8df8207da71152deae1c546bcfbfd40740da5fc0dc747e6d6de3c9e3ec4794d7ddd77a86f3c8ef35c6305f21f4ced6838c7a9f6a243428d18165b423d95521fa1b1f2e48296dcedee8c910f0d30948c9df6b60acd30b5b488815c3290763d92a49c0e597dc7e94fe535ab816a3d15e1e27934f421b70dc9afca22811a5764551290e6b19f4055283e92239d088d41238b501351064c97a5039b40ba26a5f0b8d0cb18803cd63fc6e12fe5a5e58544a06c56f092e1c2f206be55bee4020d9df2022fd19287ba490a8db5617c62ca3b2dfc995d02eb4505bbcdb91f32ce78e458c1594a9606bf45b23d8eab2ad2307162d49608882c2a318c2f471ef627710b18bb7bb044a1e16372fe5b6ef21e50d9651481a31ff249b51a281f2c9a488882137d57906546eff4b519cec55cc9a2153f1a5daf06a4255d7c3aee1cf298ad6089d7b18e1f86e8102031c5a79c17f4a0d1867d1a83e6dd40ad9fabe4b94759e4a108e4e20f4fc3d4df1047a41dde4e3b4c3336d8343ff9e95536e8493d89a69c97962810039a375daf9c16532ea01a97b16e401a423d135e812076322a38e2715c0620d021f4cd62618f2d94ac248e85dd24ef52a305cd8a0a040510629a47279537a7462f6164fd2f6b54b827e24c06dfcb7297361c92f51399c98244cb4088636b40254401cd06958db988c9a403fbd50d24632d7735b595b84c05af0336dd9823f31c1f213153496e45caf20c7306080094adb5aa22987e7a11dce8128676762e3476ceed5bb55508aa3fc90eec995a1f0b50ea0927c581b4753ce6f49bc16f4d6dceaa0b54adf2cb0d6f6d4a2205f2f42737c41729ea47be7868cde406337f6308dc42835ad59c0c6adf30bbd6302449831c351bc2282237a9e0ba5f5e7110c81e81a3f0f638e600d92d448ce1b96c4336543d2c91a848be039c4cc1b6a65be9c31dbe633e28324c490649d53d14dcd13a5d4b33fbaa00c8c3e666c08d2153dff615e29ab67f7d344b4a150422f5a5d0f938d006b1a04e7f2c89eceab5c78881c5dba9bb0d405d229ecac232ad073764199e23a780f239b0596e3bf07ff5f5133018235adc46f9ce842da0a70db7cdd74c1a5197c6d05722096193cfb5963f5e5942b7699143850a1af835be2da4250aa89a752043938ace3d75a61a1d711a0ceffe1dd5cf3e73b91591bbbabbaccf3ff101b0afc98107840683d81e8fc149d0a5d77020ece11bba6c04605a9cb7f9d39941570457b1bb293c247ce91f8015170088e8c2c87cf59d0a15100ca530be12b8c0e3947e06e7489b056b391d98c65e1ece584e3e0d81b853b58179c8a05ace48a5b36ee4b8aea332632cf4a3c349e16146f2d890098afb42ea65c409aab47b89589db67ee0dd931e3693e3b79208ded4bfef761163bc3c5fa49b2d7c32abc3197f1bbb257f733f4243b8f7d6a48a43c21620dea81574c93a8e881e5cb0c4e4e5654d69c5599654341de670363e56500222101e8711e2aafccb5cad4598fc8449ddcb4bdfaa66fb3523573d62aeecba9b759ccb727f30ad2e79f1db5cc9251247b4fcbb7e87f095d5d5ec7b5a9867cabee3fb6da973bbf5154db5fbfa953ec94b4414a30201d9bf2448c2e1654481ecedec777f15e5ab341c05e2e98432ab000e60534df995a0113173964ceb34e2dce7ffb95b1a819d681d58877ccd70e44af4ad2270cb9dc147a89b18f2f904b1c477055603ac412c84c13c03b055b4eede576b988ead2fd643b0ead2da797b2a6465d9a255c705397b8852d0dfc98d87d4a4abc7466b18bf4d889093c2d5d2a2698e206163d16c8111122d63305142d1556288155dd5620bef35df7fe6a648949b315f3b7fa5d682cbfb25a2a33823107d742c2774042128b12d81f8923bca6ecb02d972126ca0a378c0fc38f3a7ab6a040153f7e28e4bb5fc145030290f373663da5470c73fb3071d6aeec6893f71bd33efa286b771e48c8db601f1c557a5cfaa44f67fb5999c37a46d215a73e171c744326eae9e0c96b4ae7ec2b31c685b10f9236c52920968816c98a4e44a76f051d43fa22297a3d8aeaf71be89143f34308e1b32a65ce962859d6f508f3a743a10bb32bf101910854a449fa2a23a86e7038b53aab3b9c1071e5c2050d48dba50b244382b2a5ff5cb5193666a3fe1c4820eb8fbebccda8639af1c6f1c7fe2263695d948de48b9b73fde1c20da1dbac99983692ae6d1722184be8bb6eea2ba777962d96ae5dcf8bee83d346ae51d6186aa8f084febfc968b12f05aeeade7c45f23e7939086f3bb22bc53879520ea049c481a9da3aeb03a7ba56106ab6c9851bf33ed833fa48d45c9fef6a6605661b8088cf242a1855b4c00c48a64fd5e4e8a42bc0b2d93c0766b26da61efd4243244d6060f79fc94fefc58fcd20e1e77c63e03430a14355f30b35b081d9b9fd96c22e00e92fde53f77647e3c205144cdafd932b79c9f089d9a54d27cc8cf1db6971966933a6b34a079333df4ca79874ed8f8114a98e3daeee12cda44ef784eb908b6c0c1de0ce24f03276e53adac132cea385b3d0d4f76138ca85cd36363c6c7b545b3bee128a10d8b763f8d9c7e8193127041e72040826f412185d366c0df22a06bf450d2698356a3b0ab18becf5e91e683ddbdf9f67ecc5f01c344869dca27fab8a62520639cd56bbbc24bca96259459776b9b497a6c48e9eff53ece8b0be8fc84acbdaedd6ea43bf6e7c4a6fbb06ac2c900da863292b44d1ad2454f343d5ab85351f95c0331e1f69037a6a8e7f870e33718798a295e574b4aa3292630413b9d166a1dd584600c460898e609f015de344f13bd1d4f3fbb381ec399b070239f81fde857f2f206d20e86b02c3fa3ea780b93a60dd6b7753d7cf24f6f76f2cd057d22b52b8c3fc34da0021f5a08341aff6b01a1a1fb0c88107480f8d1751ae7879319d51ab140e8d31ca3c14b79551d4c4894bb5e851b3afb5b36fea6720299ac4a6b866722d6d974ca2a756e086835ab322af46d677c1c6883d97f86269ae5712a4578ed2fe89c3d7329b6ffd7137be14ccdb130801786385dc00b3cc0db4e501c23c2d9e53e6170bedd345929c5a4cf6d75871804d0e21bdf434f881cfe869fb90cae2d7f1efd4ce8a7bc249b1f8e119727301ef4639689d29275a813093684e4e7d06405bd0d57005cb01c6ae74eaf1a35f4e4fef6c553899a0f11c20668e550b59e359ec0905840ba2bb4eee4254f9273ea2df209b8881c5fd1c7f8f2788f41c2575b32ec977db62e859f5d6f948b00145f73638bf488ee4ec754593f341bd50f8bc8af2b34d919a5cfea15df8ac17c3693ebd8dd1c07a240ab7734a9d88974158e7738bcdd04fe37b645004d4248a4bf720036247e4d35a931d124d9a1444756600bd20e60c3352fb7fff7f641112fe371cd9d4dc1dd60b9e6ad16f41370e3eb961994b82f7d1833647baf93ffd77a6ea44d4e1ddf54cd1cbd00e84fb1ef440d0364a3406e7f9160e2d0ba9b515e2b3b2d9552d8b96e118ea5e76e98db4a530a8b09f1f87860570384f1131be2534e10e83aa72cf54f944a0db07a615d388b38fc1061d833772351d1b0e025a9dbd6d9a6d7953b3ffe0b0991017a74080963c5144d0cf3aec65d6561b1516d8c2a0fa14bbc23c46a0bf7234f372021c334b0dbf4924054229402367de84bde0efd73e05866784b5f561a12333d009aa98f6dd8825b27037d34e2b295e8eb6a8781dc8428676e6fa8e4dc51f035f66cbab3021f1e8d01541513695422289013a578ea76983bb490d8358f21fc96bed271406588d1c1d061a44576b028979bd4c1cd74ddc61c200294e4db22bd021b6068744503a64c632ceee6e758da70aac06dac0d582a9c70656c9a20cf23d6b38df371c146f211bd1579164865ae83d9341801af43c32f0e65cbdb2b0149d84bab61353ab8ae019b923ec52caf7d584106097aec4443785d5d25924ba51e41173c44dc3978aade663e81225f43e36d232a902413802c65b83d4b3eb0ef22002296af76ad8a2040a3935470983d49805da01ccb5f20f289c6f3ee3feea509d3753fb0d39a8df4b93ecd29bec70dbea6301c9a1c7422c5dc6c2bf17f5221b431b5bd444735b11c20650074da36d9f46812c509831b792e93ec5d429b3b06c68606a54b0cceb93cd8cda61f5828aeded97e81ac044203a78744f67dd7a9c2a3c71a433b07c9007011f1931b0cd4f261a07ea90aa64ce7c1feafb42bf9fa69c8238ee68ff8633d2048a31a98be33369d1a202db5f3d74e8ccb7e0fe23cb48af83b3260cfd3829c3d163ace212b4df0771f649c340d78952cff6896d60cac06f181a03af4284f4297a5630ee81881e3f1a8181928e29b071dd93f6f9094e1ce42e89da7970ebae639710efa8f1974ab1261d228cb11d030c9aad89d492a6a6d13b8544bbd2e64926f8ac886189c35f7e7e8f81002421b54e52e1fff02148ae3093a17f9988d008f2caa24c72610a0d1ffb6567f1c80c94e456ef251759284ed0f145f1c6c8702147e9245f6dffe0d31c2b40bc67adc3f8d0ca131f5fcbfe0d89cd7ea65953ebf13abf152d669f69d0d45df05f12a0d47a4a64923d3311a0b1a6e25ba005289564c2dba894138b71555f945891c4230dbdcc6ebf5aea73950fae373ab947616cc34b568bd0ed925f66598f0e4041040cb3b00c17dc31a392b11f5a7a88ede5507ca48dec8b9b08c48a1f8706001377ffdb53aa80d390942ddeb89054823e52637fd7450700eeff686af7ea5d834c6a0170051f65a91ba6834bd6ab100dcc860892457cf00b753e2cdee5241dea6bc80263f5dc5164479c448688ac9a665b1ff56a254f25dac82835d3b8f4b43799a2a98d87284882253ef5734c0a01fab6252f9af6005a326cba8592145a28f3d7f9282078700b9e2b3aea7a160a1844b2335fbd78c8e0c68fd53d9fdf3d0d253892d47d458e31f36b5fea4452422238567db7ffbae93f9f6a0b435b2d257e6ce117b1e7e78ff9c86a30d97191f1fae1fc4f427791034fca31d548807aa0a1c1ec201cbc097f9b967dd90c65fdb770f82c1d8773129d469927160bfc82e074d8bdad1509f7fb1409c3eb8fe7570035305e03295d5e8084f6d8dbce1428200d130489a5e20f81f8b18c21a8a9b277063ad6a3ac0f56c168cd720ff4890a6cf6cb9cf88e40df025ce68e14442dcf486983cc219f662487e0e1e9a89a5f0427197598351e75c3fcdc5466ee31f5818348a4451a0ea3033a7c816950177d76f26af80964f480fc6e8b66ae9974c08977e616969eb4f24171209fa57d22802a9e4bce4231d54a2cd4e72764fd91f1b4d9337fd41884d62614510c7006f57e3fa534909cd6ee525f6615d1172aed04a21a25f95bb6d5b69f35add66a39d23e4e4ce1a6bfe252198926490af95b697fc17261a744e3d560d2c217c3b920a5661032ca1e939743663c1080daac5292e55436d300b6894702ca0cb887db673f81c8557e1d9e807b78b329b8119d22dee85657b3008675f7e10ea0cf69b7658c79dd2a50946de8a5d1bad1747f6b35281aeba84eae03a6f7845d567fcd1209ef2d93f8270383f3ecf171c99927092d0107a95d4180343bd5b93c852c720564efbc90afd1bef6598c1a76b44e30178b138281ea731bbde8cffb4ab45f7bed623aee85ba2d7ffcd99565b06c6c2669752950662ac2f3ef9772d41b396ff5a7bffcebef3bc728ef8eb6ab5cc639ae9cff99df8dcc47449636fcc5b1baef87aafbc95dd5f5d43ae51e3e6a12b82329c4d0af1abb2174b35d402bb1ba591550f66a32bd3a7d458a7ca8995ef9c922b3080bce9388f71d1cae4a9475ff96c35e663c99f6de4cd41a2d551be2c6045fe166931506b21e0474085f33eaf22a74ad7794a445e63f8b23f7c693dcac91c9fe41211ad9ab2ce8a183ac6d84c3c178f465ae68fbb46f6e3c0f602986bd7cc9e17d35a5328f215fb6c631966fcacf047f47cfa59ec0b8fc7a003e67d5053217a02d16481244411a42b0f97a807d292a35ba7ef8a6eba07356b764a1b86ec72d4b3ac77a431d7b26d0ad9b5f981283c52b1130f60ba2feb087c63f64e6df644688e01ad5d12d7489adb7206a29e5aef820cce9e14c95939602d6bebea19e3ba3422695881a0056205f994dd998421138e4c8bd1b00c4c8a8a8c1761ff2d0e00d34d18c53feb71fc52b0e9c8fc20093eab749f87c317659e9080e586ead3599db582878b8b7c980b420758a3ca65f885eb962c6058d2542bd0e3027b7e1609c137c81ba53c9ded675fd7030f9f99331abfffeb9305e7fd8d82da4f9406aebba428f75fa7088dc9b8f1ab573c9baed3f913ee7a9eacded52a9a48f710103fa95d37fa1f9994913e4eea7e9a8f9acaf8de97a79b095c8651e7073e5a591bbebce2ed95671dc3f6b0ac05903bc7cff915e80bd3f8146464a605ab59ff9d4f73174582c2997ff160b262793f750a49342ca44c35cb88d8b908b28706da3c1e44198cd95e43a7e6cfba50d2f6917980536574c6919c2a119c011347474ad47c64734b7da8bc631ce17deb1f5db4f6b2b3cd6c5387bbee561c2a085ecf4fd592967d1840bc1915116372505bc630118762077ea29d57e4f1e15f947ab9db4d6f9b315e999469a275c9cb8c276bcc8c71068d56275f20c96f7fa2c928e714c6f101f97b9725a40f3dd83e400ab38c8d702688889d1545e0536bfd57a1e47e4f614877f68baced4efa5bee2374057d2ddcdc6c9535813ad1ac4c187b1f1eaa75519ba276f594ece17cfd0f18281cf765578b5ba20935b3cc005dfcde09df5e2adb1ed099f98ef886105833c412a610e43fc34ddfc12b6d7fc60f9c534e776979e393646b6b946030e3c09e4c820a3f123a2047e7ade0a3b5dbc1e6ff03899e84bfe149fd69363e7c9a7aa46b2bb3b22b41b53f2399859f5766e2ec52875b34c5e9696bac6b9ffdec0e802864f2f6ac56bd7296b782ff2b72488060f11dd75e4f9e8dabbb74334c59362005cb69521d6627b712c22b3881f59dfd125a4da409ddcda686882b224796e4a5fa5abc84ac0608040e553b2f74945637f6c3a8d9c9e14dc9ac11c97475aefcf5b8c6973808c4d815f81bbce3f3e19018df5ca5822af653c53c9de269d3ac95c5d32cfbff9a5721fa3c39b1dc94fe0c0ae7f0b51d1640219851b48a39d2176e66a029259d932674b429ba7521c6d5eeb1bc39b4ff900c7708a106b8c03b172d2e6164f49c4ecaaa49f8e0be32c1931ce931a00518de1ebb8b1dcd3284a47891ef15950ac3f77e09c9baa92be9cd164a1fab201806bfe49372d83bffc904b16d082f9b2a297e6bf283ca565f218d6b2112b57639ffa34975501879468f806098ae21e136c1194818da6282b4de2362304aaffd633aee0d136753f97e335138fe61028eca45462acc0eb1438a89afb5fa4bf4311fcff1eb16fc7a8ef87a65fb52ebb9c34a74db21a92f86f509ff7afd0815cfdc16cc1197daa6396918648dfe17cbf9132abc8d3d725331eb76f000baa6570cf6d5e3fac50e4b67ecc414aa7c7da31112dbd333d20e53308161186e0469c96698694e66781be8b087ca82deedb9f36b27ba788e284a8c1ef4563e7f593d81a4aa03894634ac4e6fd6ec2c9955d1d62cf4d9992934b6f66875649c9a63144c1d645393e2bffd2299836a68ad84dff2aa02e63a6832213062224c686344a3fe30497f2db1f5df8f8cc789da37c05f0c054c32d3d9a321a0c913054c306e0aacde58e2cce901d1333883ece3001ed0439a10a801a6726b02bd2e19eaf8a210101c31e2490d5ad0632bca501e719a451c86bab7c45d2118729e96f6589486ee45b8882353ecf2b4c326c16920dd5078043e8108299929afd057ef54ae7d7b3cda93fb3186468b309e40611e1dc56616189eecb82fef73b674578275179f09061ffa27f87480b1174c96dc4b0e002d0d211b08615875954ba757bef0a9e73ae5e8f8720f0b31c9ac92ddb142cc0b746f32582dfba5c226f045382efae0d55d5e41c2d3a6814b2603228221cbb365dd879d1b2b68f2e58b2af0cd8622d18d61010eadc200724bd15edff46a990c0d5bca68444c1d963d149dd8b47ca9d9d89b87e05010511442378d81ab1ef470a91bf35e4b0f0d5152ef8cee01d51b9f79c581f43307f0004e3517b0c3b941b94c490ac14c5e59fa88ed7a7812258b070bbd35a09a3c6774e157a7094eb4599f226548e10b1db224f8be0627b9189ecac43b7eddb4a0ecd02349cdbae3899b047e301651c25c98a261281065201c16fc2d4c6b98e2aaad9dc797c2dafaf412ec713446b5bd978515c2eaf5deb14ea1cab3606a802740e64be9c7326aa2274a53090ec5b1e1fcdadb18b24d406919c71ae948c2b2556088ce13c5e66952c046ac25a5566108d505d34d83a920d2d5ba180ecbe9459b0f8da44c966fffd6ac1ae540a47199a933a7987dd4cf7eef71a7ea0ccf07a98743940caf8808b1f3aa00fc9b989da050824fe0d7b20577b528a24138e9225e6258849c5c63a097519c2301a080de0d5880e40aeecfd68cb273d2f6186ae07d5a645aca3b98ba379059a28cdd43d684afe50f2b92f930d92adcf70eb20b7a7179711260b084eea98abb402c56972950148d9a202313faa5f37e83d38624133d5dc0441331621d4d15f77d7887fc44d87a8b410b1fff58cf266781a6376666fdd83297e0697991481960f00249338caece5d7d4a032f143035274dc9998ea2b7ca744c51f95b8894a232b96eba2cabc2937a7528c2452f571fc4dce7821d739e69e725a43f58fe037942be888c5cacee8fbd3cc1d66d210841a500c2cb0d7e9e0280330b11780834a2f51ea4a1d827008cd5fe642653a7ff225b302f01d4fb9d87e081250019f8f5c757e78de5c1d45a04c764d66d07f86428dea31ffe17a24ae960fa5fe4eb60161a91839fd82ce25250ceef841f5287df016d8d23c45748fecf00098bdf92e3fb7a555257bb233862b3b2460e76dc4b8262b9dbdb72673199f7cdc023fb54a343559b4e8c56cbf228bbd230c5920d9b5bcf31aeb4271cdfd92b285df353b65e15eafffa0c6c2e69caf5506865c8f61aeb2e03f01344445a3a75e339e84e1eeb3f3f2987b86f81cd468d93e12d8c7fc28e6710b4f99cd0fb2552cf54bfc228adfc2e00cf0f1aa80078cd86fedb700bb8de09785231f8415e176341087c74022a492b42044bef9665ad1ae9b64cfd78e0be449df21c9eb6e6517185e310b34525851ddf7db2e4bd97ed2d8dbd616686315bc7a4b50f4dd4d6aaaaca010c57c9b29b8da3305f1f82566783e10a50d3c503bbdf1bf26ee4af7d2967c328e019256a0af2268529244cfecf7ff03a072bf10ac4cef2b65f1d5996f2d6cc2318425d5a6f08d869e90fb6d52eb5d8d433f93c747ecb8f1432781a1c9fdd645262fa1d7d7cdfcd71638803b628b8a99c4f24395be32c194a21b004be5cdc4d2a6c9e313448f67b24cfd72041dd9b3fd645ba3318df18fb3526ad8b7c6c8288889a2ba4ce4ba5fcc42c14e47fb6d03377587036905df7e664c88882be3a269d49c28c2c54ecb554322fe466abb7c75c41fc54d82d581dd0d6e513c09f2fe994015e7506d5e6d2c235ea32989e7a7fc9477c19eabd93d0be5171a9215dd4b43ee1dc2638d1ef1067d1a55ed4841042fe84a486970b49f06d9d35a5aeb96259d70ca2be9a3a5833ac885799c4cba1aeaad268b5e044a9f4bb10993307379cdbd88e3e0971b776ef0d9d30ead02bd42b0450d5a0b731b87cef0c1f1845b47e0152f335f399ad9442d5e13271a024b960c69d21434ea2c1782a626133e1337f43c8cece29f9f670befa7768f91a50a2474a6d631212d3eba1d4b3debb765e6dcefd8d1bd4e051e621c6d6e92b57b62d4a26169121e87b650dcb6dc2f40278b5b37d95e271fc1bdcd8c0c484082b4772b7eb243572211e3cb5d09f079591e059ae41bfb8ae541848abc303563c86d88ba0d582e8b82e329bb43ddcc0cfa565d0339e375643ff918f818356b95cf31035232c3fa3c9711d1914d353d0a3ebac0cca44efd7a46702e513fa20b205dabf6d3e948aab6965f1b53739b37629ea903eb73322304deb9a7acef77909292f13ea4a602271d1b4e40e9a7a401cb6203322aec0dad4c88f03032040b9171c8bee07dd487cac5b14f043a88dbb1e46d2d6b460f3b6287e16ccb53df4aedc763b8ed282e6117c70538739bc71a3711b49d9a8321d55ddec566d4b3af384f743af275d575d2dd5ea9183efaa753cf03a476b72c4bd60fe1b1c0594f664b1480201ec640442c32e2071c82d9371702568887a113c78266cf66b9d9f0679c00f39293829323b39c74a565eafed3759968e9b7c79499f44043f8d94cc69c85507d35dd97856ab8cc55f69f0914bacca42e5bc9d829751533cde2310a5b1238e761b36cc33a32d4220cf59ce34543d58e0f131b64500265aff6105af2a06a208f782f7970418bb44d9b0a23235fe344fab392086672eb83b316931bc961cd13b12211f510f7194765e5d7f2675eb9c582fe4b710dd17b81b2463d91e099ddb2b082a8e1cea4ff6956faa87f02dc6ed59ef77ec6a9297bc8a32b9733f47f6616718e2913227d6bc9f6144adc2d3390c8ba5744ab504726171b24f9fa48bf5c58a4840f8d64dd16f4094b0a97c3d56468932b8b5c92352307157c65aea5d4759d301dda9027a7f3b604328fc40595e6eba4fac85a72f712bc9bdc8ddc3f29e6d01736fdef7c5e527f3433ff60f5fddb4d27640685cacdde0f7c7f3a0a452b8c2896111f5f31e61332f927143046f757ff3f5fb74578763221c33f27f8968bb0dfa24fc74568185f9eef5b1938698f10579b0a32c317acd0f9f70129f297934304901212666d3e3f13f326e489c51c30359e462363fc352dc11855e962e26b21117a6a10d3e4fdea6e348eb07c8aaf969df5599c8b669010ab81109dd8a49c810471ec6511560d7c7f788fce64765ea9bb715e12dcc7ab6f1f9e4c89808d59ee1a01a6f3452ab1a417167b7715fee5f498a3006b24a3e3aba806e346cf0f2c5e928ad35331c16eba0ae18119029a7be2db584160734aaa9692d9128b45d65b52932a7da98e96bd0ba7aa5ce3fef6cc0f31f47d8de8415382e21dc10f8368fa2aca2b1bad454b63da6076cfa130183ab3ad4fd37562f3586c64236cfa0d46d570f568416ee9309fea08e728a6a1cc5a59802e009a5f092e9ae6704eec90f1a10af302e55cbe61626470ff02b358ac53b859a4eee5026cfca7fd40b7e87d31062eb07dd0b0f6fbee5d2d161066ade5affdf59e73981b995d5996ff704e9d783353065051c49d19f5ec7e97fa7eee9ae1e37518280d1cadc29d049d26d329c15eba62290389a00cb080d981dd588b9f873982a1f0341dd53628998260439e338a07625e0229381b4d9aaf170cf114311699e969635ee163e642118096971a39f464d47c77f5bc0f8b7def7b8fab8f8739ff6f473900664df0cded23e906e4078f5e53508b1517a018fd855f3172ab7e43e23ba3e2950c0eb22089e1dadfd53a9cee2c5571d7dd78c4ce3a3b0ca5cc0e74f37000f8ba93678ed46e8f53bdfd4302efaba19511752039de6842df45b49c7a79ce0c0fc0ce4a1a0dab920b617ed9fab35d4d23bd59ab6eb587ba88331b35ac045db91cc34a309502bf5385a29ce6a899fb73af8aa3bfd8c9ea69c598a46f5f58ff925d3467c206c001df20754e31494509be88beddf64135a5623ac01d60f7b324022b2341703c63cb4d44309a88a2704eaad5b1185b662d765c549e4b45af7b680f372afbf3a714673b24600598deaaed532db96d3cb6858a06ba6fbe5d205338da188fb259da8652c1a23a7f1305be95675bdd30f0ad80b595de845f4f5115359173ff0425bb3726da375e344e75ed21a47555cd0a52eb8c6820cd370dbf23b26c07ffe7889eac215e7a4e374c5bef06c8cd6cc74e865f850ad9506b7f1fae4e7f8bdfb89c15db53341775f6352af629ad3425dc9f7395d9a0ebd4f2b705d6eba4ccb6ebe416a667a71d3a3a98663262b092035fae2893df3c8f0f09b2e386bdb055481f6640cb19d280230e277a31c999a742c26960a04aa62656c4639f42169c36b04cd228098cb4a98e13669bba2f6e61e4dfb6b2473e1ebdced5682e390039a7199a3ceffb4bf1010411fa44fea5066fb8628d69494c8c605961275982f958807d4680b5702de60905253b03aa4016de76d9b1466707d2fd211f88ae951cc4fe550dad03c7e9750110575a1051c051db91ca1c43bfd378b5311a6f1ec506f8c45f74817bff97cb940d4fa915b3a1a5f665a0d6acd5ce18dadef741e10b934e4e96aec4b3065244ecc4a47b399be978832c53e40a376340f0418afb5be3cd14e5e13281d9cd1bfcfef76a26252e275ddcdfbfa970e68f77998fa3d464fd9c536d517f068df7b6ce74deb5a5ab0243dbe52382c6855151d9c336e6f67eb9b4fdac5dc61987ea31ffa5fd46073c2999d495003ba01103a960b590032251e2f60dc6b28f7cd3d2de5e2a683b334ee2e78af1473f350cc7d38cc037ba78919f0e885a430b195d70b2406b68f0af4588a5554752e6690ded5a90def7fca8ffdb29a33134dc1e93364fdd159979a4e8868887a0069e47bffeda240cc60854e4587496cee0497f53f114a137481db8113e94d5fbec8377ae9b54fcbf36675573a248bb6f17fe408b1442c037fd3404c4891edff25c5c0aa1c01dbc1fbbbe90e9c1815ea906735d5fa1d6371c080e9291211d241c84669cd743f3c36883e2e06b00f1206f1da1640b4c4c3e34ee943c77279ae567c1256a8528c2db40605bff21e5683cd5b7cfc141a071f784a6e358ba696b696a61134707b0337c3e9f958fbd36448c1f2b5660ad980a2b749f919d74f450ee34aaf80743146e5258a92fecc48b2055b409c6154db0554265cd0740616dc066eecd9a44f94f02f0908c6612e5a91a55a99366aa140e564582dac0ad06d426abc40124c357acab7e20f6dc63acd9c9152a1ab461549bc417b63cdf3fec2b906c57334d7a601a5b9dece0c15a07cce379c2bf0be3c9f3d365e9ca83bd42d72e10af5a79964d2d37145a3170d07fa8aaf0cfb7c8a6e1ed2e429d59c81755e24c50c40109aa7501e98458603b72987fffd8bb29856c99bc80b2350f944b830acd74ff273ca1a9a528866b6cf35426ec89e1165c3ca882b5cc8340a3e462c74fd0e5bc577e5795d17680038da60de4428102f4ea401947c3df37a68f3ea0c353d09e4cb14fa31c3ca28e1ee8c6e44c2cc11b5c00d950824b59df2ddc9e61115960e69b8948365e5f51211c4ef369781d6d4ffc863eaeab84a521f691dec6c483eed75f0b17f755ab63bdadb663f690af92c3fc7b03c50e6b3fc6c67c8d5aa2ecc4ec0d787371c91b35775c87d0a2e697064d4bfeeb94c4513b18d47de06be862e76e5f7197fe3751559d18e7a9af9fcf3478c2199b3ced812a1c5d03c53b77de2fc09e567024d257e8639669fe62f8c5f58f8a605c7a04fa77e7a854209e19a5032f17c29fb45454bcd793e1a5bbece536aafde5c6d4c1f66d5ffdede46c268597b685102d225c00c179380d085eec436bd658e27ea9d56bd7d4ccd1a05cf86190a0aef69b2464efbdb79452a694920caf0a4b0a100a329c8a6ffd370ef6d6a376870b457223495a495bc0f4df6489ba7fa63d4184dbe198d2a2fa5fd55b96158174186154f85e3437e91805fb92024751e54d152c24a723c95697d8ee20b925ff64d11e5cadafde35ae4108814493218ec8752184ad4ace996b2f9a733df3c07e741854a8167d5408a6611a04a3d8690e475ae53da438508df328fb8c53d90f880837b852822d4a000601a0645ed78e9047cceaef232b7f0462c90d643dbf9752087d7ccba9702c8e8557b136444ec429253eb2b2844adef79367c50607aea6ff8a57f7741af8141728980a95ddd12d681648619aa6c230756ba0e7404e070b1c8e1b1dc9400bec339ca94cd1380a57c357d8a7ec0ed6c1dad0602157f3ae184dc19c05a3646cdce02a4ce539c265ca50f447adb1609a2ca0d81d7d84b5e92b9c436142ed6f820aa39c4069c289e4efbfa0ab9b8b3eea256a1a27b2b4ec9d08ae7b57381a1915b2e84671511f126214fccd8576e8510ff229438efba8518d853ea2c9b23b9c3a5100b0764103e1d819c74e24c4c3bb69247416d2ee969e844de1d43b62145f11b2dcb21e3f7e282dfd05a32c0160eb0caf1fdc77ae2837f32db6bb58c21b7a593825e3a3e06aa4b0365bb077c134fd970ccdd517f4dec57dd4ada5c1503be859117a53706ac6c7f818fff22eef4a989c723515938af1fd1dc429197fb54f85490330fc6d9a20ccd98134891c9ce002517c25dc155e04351073fbc4dc280a4646d406d6475d7cb103d64e4cab2af100d460edc4cc7cc07660edc42cf170222a1c0e33818b88b888c8898260ceed587fcf42ccfcac70e340a0a51be969cf0957f36ef07ee0eeff3c86280d59c4c4800cdf10ffd0ff53b75afd35367f37727fff234e396d295f90a3e93fda8251ed7e2423e3f1186ee447bb0521f3abb3e20a5234e97ec9606ecebf6c602e2bbd0ebb093372357bd1c05ce683c6d7f84b2646cab418e6b0c09ea46d4c2ac9aff7f771d1ecfd99d4cdab756a2675359fad27eac3da608f91b4198f69313ed36ad01aafd335b4f934b46dbe493bb1137e92f1c47853c6f3fc2d9f6fbdf73a0c3343eb2932824e30ef6a5361547f8cd6521805f34279c885b25089a100b9cfd2a3170e8f625ad6c3aa96c6551e31ebd2678551146b27a6cb4c14dcc873c0dcc8e948c2dc58c861b220efb3676de3b559eb336d352037d4eb63aacb78f608c38e388535500361314b94d44898f2ab9f0563670e00d041871db0d8210012c2975ab668a1d91d2cb42c14801d76c8de2f0f1ec8a26edd1a88071bbec251e19a8f30b7d7647b416bb447464040ff5b1376a36792f2a2d0ed3d91f272a3f772603e74962c7d4567b1c1d66fb221e0cb77c9529485855edc686b48d9ec4e7b8a10a40dd4342eb4f4eaea4ffac89fac0bb1942693ff8dada9d47e1fdad7deaf306aa90f090135cd0f591f695cfbc8771b48480e4d221390c3021709b1d0858309ed8e8edabbc234fdcf897783b519404e0e5f3c302a46a0858b7e204a0316e64180d759a69c12f4845ed04ed982afe45111006321a783b31e469855511606c0da8949aa59e82871f931b29875f273b458e2027916275a282e990fab3a9113391117f1604fe3da409c5ada529aca01dca8719e132f8adafd86b4507b5eff8e5a4b1f05bd3c7fe9ecb1df5a4b153db852b70e61c1a99967e54d517b17d2f7acd02085d12af033da5d30aa1f52169a8251fdd65bd48962ebf01646440d093f72a32d070002888cc7ebf53acc458dc385d1e6466170a3b52cba5e9809c0dcdd7f604ec4a967855158846aff50ed7762caa89b132de52b97021490f1bc0f4201d8cb0ab99a7e12d34acf424ec746e1709e13ee05b190d01bea17fb088c2bb650d15a8c30b717c4573855ca190089765167c989bf75161d87e24e88b8280a2972aa5d5d11aa5045ca39fbe85961543fa117548409491911f26116468eb05111a31a087b41564cec3737bab02257d37f3927e6c302cbec2246f5107363219672cec648ef48daf53aec5038c5fccd4fa20e85514ffcf93777e2d4676bf63d17f5278c6a77f28238957d6f4c1d8a13595d03350e3341888bb8c85f575137ad6e259b865b19762d800144bc4744f6de5fd43aa8f6bb9644899fcaef80ac8755694b61145725de4eccaddb0bfaa62192f5b06ab71353d6ad819e767d03b113f319354e140e878b5e90d38143ed7f424e87d372c5917b3ea051e929c96e7571354498166d2d5dc594bff5d1ee989cf2100b998c244d62774ea89d9ba641c1fca16d212754ffa0ae52dfbb91911b55d4a3e068fa2517720bd3c350bbc88d5ed02be2395fd00baafd827a2fd2c604be28e14cbaf7045468f76ec1e4976c82526a4eee4beadefe52e918f57c5edd9dac8327b3e7bd1235123dea66fb871784b4c7e72d113df0b96e9552f6abe866a4be77afe1bfe7ffde3b47f3e0732a9b1f0456a494c04a09b0a0ae40e44517753375b18553313713911744955f86dd4948bfab43f867e7d12621c8d9e9772277b067ea44eec0b7fe829a7455307ae9f4e5dad3362374c8dfde5bd4310abeca876ba44774852f80ea32204e0b15d22aa7f74938a21d0df46bc053eecd4fa4c3080342a864ebbf27e2c20863a75f877f831056692ac4df291103ec3475eb8f0aff74614b15a64c7f32e33ff8eeeef12b279ad6bf9747bcda53fdbbdee9f6313e0d97723f4d4e87fc18bfabeb2fc19f527ecf7fef26dd68943427333a9bc64daec6a356bd6bd55fdae6f3e8a9c79e926c75be04d49c8363b8dc4cc992c0947ec1ec993f85f4fbbeb4978c417b7c5e9ddf8f8335541daaab020750a8c2ca932a535d1538f841bd1a9b9c11e17656db9deba69cf0f797f658606350482b1ab59efeec5dd623fb39b3262eff02f34c769ef6bef4435e8926f104a4434a0f439378a1374dc35ffa245cfe3d931d25435ede8526f1429f3801893d16807f02e23d74e779bab552f627ec1dd6bf24adcac35e4229a38c10c30450335a65a5300d2f10388f5e6fbd119cb22e232c9851ca5261d43661d42f90942c9cca82719a880a5fa93c85872a6351f92b19170aa736b7a5466120214c2048ab3c4e354d0289c679d4c891113e9cfa2aa4db19e934d1762cc1e072339aab92db05d3b9606edddc77073be1513204fea349382766f6a37f9bb40a7cce9478f409ff273a8651fbdfcc1e20727e85513be4fbb0c41723dc52dddd284feaee47f87c63b25436a869b060a9ae3a47e46d854b726aff3d7793f3cb5caaa464a69b3bcef485af8588bff9bfc699ef377ed7f89d0382513a8cda07822a9220a504514a30e5880cdf66de96f41a8ef6e142b80fe1f77baf63bf8ebd45428ae0d416046c86bf3c20a43a394238d5ec153eebe42451fd7338f51e3e963f75fba3265ff9856ca172146618d550a616f3339cf2671d9a1384b9b92c4098d2c4297ebfddc408b1b5e17731338c4261bb43739054f9237d57c3df2598b00aa951db6e6aeca76d422a921b13a3b827914bc159487d94e537ddb69b7728294da647416da61fd2996d56874272f3281c951fc7a3bab32c94f00812202a3e46dbc4887d19b9481117673cb00846f96f46aa57bf2f4448f53782aaf1ab353bc6978dd31f6f34235c24eb234ecbfc31eb66e4c7577f9d16e28f44487d50c6b8c1136e50f9e54d75cac4156c10aae4937599a268891ab0a10a2f82b07c11a392d11f8cb2aa64b4b880a2fdd3a46ea98209acb8b46e774712d31b12b7650b30c296d574cfe970d58bb65002dd626a7ce8eeddba5fdae38e30b739af184e2d9bb8a973354e6a4862aadbbcc67f7f45a323e71e0a71346e369495ffa3d2dddd49ba4d78b35a98335edbb1b8e49b8273f9bcb4bbbb544e61f2bb7fbb54be65d4c2201f1ae2c1151e0cedd090dbdd67c21be47293c9eecce5a683c1742e8e9999bb85d061661faffc2e0b0ee696a39ff05c52ccfe937b3ff14bd65c65c21b0416314c59028b258c9090bc8ec9cc23424a19ab977f551256926184dfc4dc62067533b96d2bfee4fee4fc992ee1777a72fe4d4f6e51d37ad35ad49de6b8305111d2cd64da7e94d9309d989ac3918ec6fdbec9e938d5dd0f621b80ebc1d1d465cdf1eb304dbf4683ffd7adff69383d4d51b35d6f1a1c968d5627f937adba4d42c991996ed2a23462474d3e5874adfc2ceb57037e774f3fbabdc55c8dfb281e0e7ff94efa4bf91ba3a4f092d11f4619a1bf54cea752bb63dff4d23b70edbbbf9c8d10a718a173ce39e79c73ce7d84ef87b8ea140846b9d7b971ce6d37d539d3f6d1f6d5c97db76e0b15ac9024b8f657e32162b410c3cc86de3dc205f352f7e1bedfba199019f5354cd6c351a13a4e714307c5c56caa8de5dc989ad47e9954dd78d4fe19d3812eaa73fcf74e1647cb7ae6f791f9043946cb23471ffeaef7a28cf1bd97446566c2ecd611a6fbdd1d42da2050d58d91637c66de2a398812316aaec57c2f9f9f7692f0c5adfa6db39eff69a7ca1dfc93059fd49224f19654ee07a204b52eeb593259aba21b3f7c493766af96192e08dd9b9917d0cfcf598fe757cc78b8b949db02aa20fd9554f2556e96c45992ba8afd1f0f56547ec7b4a5e0146cef0c48f58264406490cadf3e6e2aef5b8277777b03c1b54cdec2d432f99d4b29e99a44899ffa94f84f55f2fa41a1049aaa25a1f0715d1766cd2f18ade48a0babe2c2aa86e0a3f12f6b2d97f5b0e06f2623a0a049b5dc3289868c09dbea5cb5301f74509e7a441ad4608b32f86cf5f1529d154d5871714ba42d89caf524a4ff34c4ee5c252d0e9bdd3af7e8f65e3e574bebfaa4f6e2e663b9945265616eb3ba9ae7d20ad5ba0c8aee19cfd64bbed48c67fff97bdec57bcf8bf7bc78af0bb7b858c3f37a5d5f187afebca1703b94f0bea9ab12fea94a7ca68fa95e7f35149b25599e24eb03ca78c9ab0ab2deabce8a156c91524a595d9c2559cbb22ccbb22c6bbd885f442e2216e218a27435110c35ba9a085d4d7cae26baab8958885e4431c42db17ab1aad6c3acc78b3c65a8b17ab1ca7822862d86b90ad9afad17dc6dd695cf0a5fc097a5fbedfbc8ba32110a253ea6ea336b920d434bb250389e244bb7dfba5a0b5da42f94f8fd664ab22e4d8820bba498557556aca00d524a29a594b2baaccc876559d6464c4b95b18b0adf19aa5ba13619ae2bf3e1ae509dab81ee0bb5b550790b7531c7589419d6590f38861734610cd5653ebc5ad5a2986743ec4ebf9509697a95b097f5c878b2e7cd59b659e64a3c59beb78ad0032d7533d5237cf3f1fad8b99acd8586abe1ad17b6a176df350f8ea4d4d5641865c2c2a41710933624b20946408151565de1bd7785f7b0e8235648b38882eaff62755634b104a90929f5d5f75ee9bdd27b6f7a018cf72aebb9ddee8ca703f5daf7fe980b2e6238b5f441e94793abb362054715befb0c6a708327d4886d764931617556ace0095b1215d2ad5cc8954caa426425174f32a9fa8293e8edfeb831b7eccf9bf04551752b4cfecdd4cdeefd9e43f86284524627754355598f975a653c9e64c3a82eae8699a950a5ab5085498529653f0f893b4d2b2b4c5137537d629fdf14e9ba9af52da623f28251dd50f57947c7ce55cd51f7291079e1a72e3b665e8bb4f9b08c6a7235fc5298528714a0d6c3dc0c5ecd190298f40bc1e4e5629ea572d68306a45b06eae32df420e87afd83b9df37988ee80ba15e76ddfd4573c155d6c37911f961ec51d11390afbe6bec20fed5cb76ddbd25d2c6a40555fe6e554523edf1773cb8f6ddcc76e35098db7c2e020fbaa8ccfc2c81cbe9a8418cca5248f98e0dd5dd9f145d4587d5b6f5921aacfc6a6b5ebd9f436d6b84986cea5198fbf19bb695b91f8de68661723a4cae66adca6aa8b09ffb6bc8f271ca39d53598fc9747d266ce68663e68c4dfaac3560684468d74cb4085b49dbf3060d760ee3b5e2baecbbaaacab2aacab22ccb925992a63edc166cd3d2b167c12c6257cc2dfb1ee838b55d8ffdbb1e7b127f4ff63df0bd4e1798eaadecafbf4a58264513389d8eeb2f8d2b515797eb95ec513d027bb97e6280c910847eea45f2e1b0fcfcfc603205949f8a8116faa917ddfce7a72ac9f253adf7b18a7eeaf5a3c1f871443fd5a22f6bb336472843adb8d25c5c4d0ca3a6abc162669a8584f9935331b5ad7db72cabfacaba5eb0cbe5ba3ecbb22cfbebcab22cbbaeadd6755d570624a354663e7ae8a75a423fd5a2491a8c9f7a515e9b7e1d5e9b3ec2dcefbf305761c152e5432c8b2cae1759bd582f2f2f17f6f2f292bd905ee610d20681edba2274a54aa128350a51a935b00cfbbeac53f615a9aab2acaa3ecb2a52867d950589bf81997df615563dac64ac48570dcc5f05b31ff1e7844fb2aa98d9c3cfbe0752c7a81290f8f23bfb2153952cabaaaaaa92afc3d5771624beacb21eb492b6a8a4bf4e9857f799e65a4cebb3df66f5da99b6c1cfaccbaab48df41bf696769224ecfad35e56b56006af4b733ee2675b46e55b72cb1ebeabd99c11a2685249d4b99a2d7bccd58bba9ef8d449d2de00c2e57ef9d5d6647cfcb33b9e303bb6ab9a57318c53fdabfd95e64cd38d83b961d5bdb3b298dc301ba2779c30b7baae8155fbaf0c735aff60baf726cce9745cb5ff22653d9c17db1b03f605c6c555b2b21ece0b52194862c89cd65260efe1bf2fba663d223d0179d1872b43945cca82bc8fefbdec313edc87913608d4481f52472b131095018be76d8228d54ff0539d476ff6feda7dfd36f8cf694ffb7bef8ff6b4bb778da5c1a69ee1325e0c181361e44be562cdab8491b28c8495ae69b9542f1226c6c0184f86cf6813d3d81a58d7a071b23c70f9bbc82f3f56d5655dd7d5d7f55efc4a562f2febba2e2b565246d38431a6c92866c1dcdfe66c1ca64d5d37f1f13db13bec0e6ea28aba8e66d3b13ed4183b0b73937577a6681bc42854e3f0cefe0d10244e0e9658c8c8c408d1bcfb75381ba2779aa29a66e70fa6fb7d7d45153f98e2045f9c600d05586e87c1e5decd6cd3b558dee0ef09ae4ebb2b09dfacdfaadfe46ff16475c592f6b0ea29d2cdab6f7555a7e1c377f03df5592d3f71f1e47962b2d3728453301509a336e3b19e98a71eaffa6fed2a9d0ef8fb95d3117fdfda1deff73beb01abf360940ea356c8104468df3845fc7320d4e997234748e31ca9475ccdbe95799323673f88bdd1dc89ebbae04b4e7d0cd33c8c699eab79bf75ad9ccdcbb1847963e2948bd894794e55ffaec6aeeb316d7b4e7a0262fd7c1fd6cf67525bdbb82ab1792d3d499b9a5b9bcebea45d4fd29854a8f96ccda80f6b737d6b5b8e7a5d5af5d68354ba9af74c98fe8bad53815545a586e4a6fa6f742d9d8befda7653dd39929b4a7a81d5bf11ed08a320cc78e40efc8ec1ecbaa12af461511777238eaafe1cbf9200c7976fa6fe266b34c2a823bbdbae0418058938c2a948b7f8f2af08e3c7d78e70aa7af835aedfaa97d448a56938f32848fc9e8a1e9140a4d0faf93a6d6d37d565b530e123e1d4cbc33722a4880469a89bc9f70a53d417f8fcf0518dd30fff2607e7f0d81dfef02deb67e3b4f5014fbef726f3e90631eafd0dba536eb061836e2f5fbd743dd16d4750dfd7d03667b44d93b6cd3a43437253adadd3c5c565cee9f26e27463bbdc068a7177a1a0206262626e697f8c3fc8be6aaf5589665d83eb68ffd1226692757d24a1fe389905e065dd24ffa18a45fe22e73ef2d8d474e0e46bd8fd1264913a2d334ef6134d734a5f799e604c7eee8c1d9bcd7210057f370d4f73235b7532d476f5a0cf37518a6fbc74c62c0aeb29f4bba9464145679f873927255558f4ecde43e86513e4d95732f1d55222ba43eaf0dd37d7bc01b8707d3f4bb9c2992a8fced475062d0ccccccccccccccfb8fbeabf17f2eb4381348bafa23793ed88d31466ef8e0cbf8d8b9d9b11a9ed7e4932774fddc638cb17bb320fe3e5b5f8c6fe50d3c28a2024a0c24a79c737757b325e9ced1cdddfd7ddd7797dd4b76fd7230caed2ed3221ee1ebee96d5e7cb5977679473a6aed9bd59f2c0a445dd5e3a71e8f2a1bfbfacbfae8b12cdf8fe5ba325e15ff1fdbab4edebf5d7f5345ceabafefacbe57b574c3bf5988f3d57ccfafe21fab33f5994487f7622c24f7a7ed27c2bc986414489cea6919f6912bea56dad5c5b627afc6977ba469d231f11a67bcdd5ece6dcfd37ba876a9a7d4929ce9ca56ee7558c74eb767e7d7ce970ac59638c54360d7d554cf7ee623b07b962e2e6bd7704c952f1e9eeeeeefeb73c043ae78eb8548533df994aef8a381c7fe78e1c18a802d4fee6b1364dc455a1c62c3069c1910a381dd8cb77af13221c6ade000a95771c0d3f8c760487a209957d70d1c144084060c5680fae86df0705482dc6a164dc8dabe19fda3b1ad74390ba7d011d971c758530a271b2ef47a27166d6098fdd910067d3df7fa4714adfef92507bdb9f77a87dcba7908c6708a35a3ee40c48a98899923633931bf9498a0f84113acb1408467515a7438a6c0e0b11b82a4f54657e59391dd833dd90dcd4f7f2afa715d11630df102d46c946e51c1e40d25e4fddef18957fd60aba2362c5646c5bd54eb156efd98f59aff70c08ac154de2c2a8187dae861f6ea07257c3cc81badf3ff033d3fd068227cacb331eb92dabcb983f02c1a8965420104c524cabf8531c289309c542528965b25eca420b37b36d91fe62962abb6f4091adaa3e705b6851956c65c4d52cdda12673b310318abfcd40b45b069fb73ffe3161a22245359052d578f814fec4358f99e7c8bcee14eb9669ef666fb9cc06227c81c8fb31a105055bc0e7cfdff3e3181f84cf5b664fed0f4659591796914ad3e5052626868c19261a354e3232271b5615a6a0babdbc09634a36cd391f8a166ab70e502f07b72387f7ea02e0635497d51c1e3b33b763cf61a8fd7e6260e6c7ccdcfe5e776fc979ef3e57c3cfc4d79fa0210b2686982832c282cf9b5789f8faa3b73fe7e9286d176ec386d49d9558264f896d97e272fca658dd733b64d686dfe9d81df2ddbbd3119dcb2a1457aee102547e4e6677f0f84d72ad79df3c5efdbacba3f2ef37afeb1e47f4012ac050b431a6a5020c477593a96efb3a93437501d86898f9c14737f8265c6cd75ddddf14f8bf3fca527fa8ce0847502af6506e7c6bc1c0027bc7186374f3793eec8e48b7c53220d695f9a83e3a86ed621f3587d1d35a8f5e57f511c3301f8e5acfa4816131cabc6334660d1f7607f634e2cf3d7d0d7aa21bd7688407167f4cdbb64e2c3e8cf6fce5d7b52db5fe3593249478db92baef3da56efd5a0ff64ad4d5b6ee3aadbfd91a28c9dcb862ff68f8c8dfaadf9df159b4276e15b5fe5a93cc51b71fd3a695cd90357e652836bff42e31fbbbef14dbedf4fd5b4721653e1cfb2c0b82f9b036560c98976f1bdb89ca60998ff73d4e4f7f6541b0fade0867d73b1b52e6ed9f78ac5827ac537335c618bfcee8e37df55d43233d0dcdfa37cd90413d06dd4c317433c1d06dd2120f2ceeb2980bed793f1f7b171f7687912d47ddcde76d4bb71cb57fd29ef7fe16668431ba59936e5e8d5cef3a2b2560521fd6c65f524c73a127f9d6f7eb348e11ba994c7de4c3eef0ef57b1f9a5df7254cb872b363ffbcd07f63d13abd81be112dd721c65d865f15895e64fbef7de93fe5b0e7f8f477d9fc3f9b03bf6b9361925b3321ea0e15f8dd939666d63f2a2b8f7ef28afa33ce79ec95bd74116bd3f3f3f3f3efd846eeeeeeedeef5e5e285c6e86c7cb619473ef3dfe4767bcdff3fecd32ddefebf4f608ac972ebac71847328dbca9effafd1cd9f2649b8f57c7a8a7e570caf1a81b35cfa9398c5a2a2b2a7d9faf36a2ca8f3e1e9f3a7a3d2a391519153ffac381920d83e038c5ef4fdb6ee0f76375dddf1b727fee71286e3fa4acf5956e1e4008871e07d7aea3fb2c0647371ed5fd5342cc8c2f62d291f0f025e44b6de3e1f25b0f9506e637ed371a24cc9f7ed3f4bbd06b6a5bbfe74fbac98fa44cc3a657dac6a4877cf82f371a4878547e6ffa73e677442476157c51dabc6e48b0fa9edbb9777b37848fbab5f9d678b8df08265883e3d456d7eebdcefd8c1be36494cbd7ef3d99ea66b6591d87fbf3ea0be3e5b48970b9191c9dc5dcdc03a1831232a4c87ee7f00d0a07a3fa97fef6e80d8a518dba91fdb3dfe4700cd0831914e5200d5150c1831d02fc8cc109569e68c190163b474398f9eeeeeeeeeeeecec9611acc0d559b5671a632314e85e5a493bb96b6591f9d94326e186052e13feb92524a29a594ff8bd11ef931bec4fec264f66e2b09a6e82cfb617dc6d98f2ccbb24cb37e7b481afc4c7b2f33f99c79c6e34fd27e314b7375d714c4faa59bd56369f0577b59102bfbd1d303ffed6f067f5b5adf197c4bebe10c66d8f5abf5bbaca29a332ac6c4a8cdd69272b96dba15b752dddd7d0259a698a2084f3ca99b7445d0c11a6abff4af80945d0429beb0995822e638755d54dbb04a7a0b09b624b0825cd522599675799434d3a6055d1efa7075f9ea49ef24cc85fabf25c1da903efe05e1673cf05aac6318d5a6df26e9e15f57c603ad4a42a25a92516e691bf631e35912ac8daf93ddb124d8279cda9fa2c62e9afb2473ba739f5497ed3774015c081f7cdb4575190fa1272190ae28045e8328abaf2ae77804deeb749072cef7e8df709917c0695677bfddd5e4da400230c796d0bddf7b0ea13335cd0b99b323cbad78347b0be6be16f7cc90d735ca319782ce39ea9e93d1bc5615f362c018a17c955b381893a428655555966559d775615896914899c481ea57653c0d2bcb7ad605fdba300c732f632182e07135a4b724213a87d27b1e311cd9a67f2f1d4e37944d33df7b8f6e1042081f55ddbbacea925824b92be0f399a55d965f1626a692115ad6853dccdb79953d57e3badb09a429d33dfc75da4299ea9a495b92302f95ab98fbfc3bb71c798f8aeafea5f4d24b9a89c96262603182e8859a8c0b88d6665895569d7c4e983564ac014f3630be81b91bb0eb31973d93c9d1cd3907ff46ed81efa0cfabee6f643cee570b93f29b1ee329935f4ef7fe302f3124482295b8549aecb2af346175bf2eeb966ef2c55d8d7b9fd3453e9797970aa6d957c6ba643c3e85e677f85fde8b6f55751ce33901dbd784b93f656ee59ff142da901091822280c0490abe88f264236c7f30ca6703f8fe5149dd1f735803943eaca4cd28e9804309e23083e190c99fc97c702d6932bafaa19a52ba99921623076914135375c87abc0ae3a2150180ac8811002aaca4bda04a9a0b4d499b3b94aaa54929530250d248f52a61250dab51c3b42814a51153e321e391cfc305abd7c4944352a6b0c0d94817b81a4985af58a9c97abc9a6125edaa3c90b09266d521369990a29256d11b180cd3dc0e90dca13a111ddc0ffe3de8e000178d3a94f79025a0eb7b092483a63cda43498b3ec4c04a1a14800caca4bd4a1f34d29223fbf1756a47c81f4a9ad76b0656d2ba6272a8e51546f15b9a049a22543905b40221525910594a1ae7e4e0643a8ea87484acefa1d16c1a7e4c734d939355f9e77636fe4f7bae729943b98ba3f1d7aa37cd19c00c1931624ef0b34a82365ec3f6812a073d87e3507c1d0a3f87f21c4a7b1332060ea57124907481a4017c50ab127f331f8cc3a5f6dd4ccd4a3a3afabb87468d93d1285491a0f26f57755fb91d9593b561a1cac9ee8050a210ac9c5406ea29511845852194dde14cb895ca2f690a28941eaf368d753517621414f628ec52841ac7a7c4a11eaf3a1415cc6558dd43c2653f64f55761c6f3e88b32f7af4871c09ca9abcc14ccc5610673ef53d8954026d39c1402b53f060ea789cacf2f811ac7a1389a14389c28e4e2900b2a0bf514eae6502410344a4165cf78a2100adecb6b067328d3e13479c23f045f2db1cee45230553971281d5a95830e989bef7590d5b9fc4559d4c9298c622919cfa3110019cfa38f0908a3300d3f2ae3815020106f31151a350d7765aa1008428132fd3708c58751e348a00b1a55ee0f40c603dd9198aa43288c62b959bc128718c551280a557e9d865038150502390dff1aa6da5f2303b2c3136ef0043ffd8018b580a93a2a93541e8defd0d611516347e31f00aeae5589df1a8e8ce75109c43400aabcb5260bd25b74214a07ea7bb86da0f63b947f0d0f15e93dbb1a7f1c72c05ccc8b0bcc842991321818181818ecb2602a1961e07398e63500896e8d5b3f0f2e1351706eb78bfd662121a22056f0640573632116bab2ef74d8693c8583a430ddd36b0793bb208563479f7fdb0b737b9dde194ef523992657a5a87252554e9eecd06289a2854a90d01475bf824790c01c387064b618ac3a395261a9728a1ae7aca40cbba8e32145cc54f92bab1fc2a94ae8091350629029b14cb8651a7c4b6d6b66bc860e83c371a2a6e958fbf90b4e6d713af6190d1a171175e5a1a66927722d9cf26f08a1778f00ab2d5f062c50e2759b4cf450ed67206c39b588a7e015a08ad9a69cc14162de423fe1143b1da4dadd81da1d065804836169bc86fee1d84facdc504149a990b69347ddb7785726b8dcccd644d5d997b09955af30ca87680b31ca9ff4190bb1142ba8feeef35d522fefcf5b980c1c85dbc151d68628e6fdd9a54479b275139c2d6b80d102e474581b93fa82e4a66e18605265fee5b79b6ae36dccf99df1b8b04006d5839650dd7f8676e28f3fe34dda09c8bee9f74d2f433b3125127fc68948f532be7a19efb20eb2f4f4c3da8aaa0f33a9a7224530ca5d638763937531c09364eb5e0cb43b647d4718ea11d078f76f272dd434347eeb27df3f2630e6961a3fe57f631cb4d37ef56ee7b5fff84470f88a2e89791c621e875f12e3ff5d7c57faf84b60be8a4b4a1f5df66e64a721aa2afe126db5ad85609c6a37e812faf23773ac831a27d225371e3e11f9942ea95e7ed3f7af6edcf8f84bfc89c4a774c90d1a046da1a6f17fd96988aaa23ff34bb4af9ec8cce34097d09ff99755d58cf6f4b71c7faafd1389ff74c91343feab5f72e3e313a91e07bae4bffa8b6af4358d26616a1a7f4a9dbedbf9df50d5e98ddf4c54d36efcff266fd076e5dff8b983d3fbf794c691efdf579c8eeb3dd6d36f3d452f93b6253549acd84bddf8bdcceb1b646ea0a71ffc37bc0ffe1ba863940d19999797d15e7e35574f9a92573777b450b6f5c1cbcbebb067fb268db7683c85c6439a0c8d8f62342e2a694cc4304c06e628bb83a37036eeab25ca93eadf4d780dd5dffd373669aec65417594bfe24ba195d2346f97718e60eb91aff4b9380abf11fd4731e32c3eca8c463d22c635e1037c6a78622346011dfba6ab76c94f91c935afd6f6e8334248ce28a1ac1a8fe1a8f6ea88f569eccdb7823553e6a6718d55d227d45b7f771964828f9a89957a118b58553fc3634196d855430ddefcc12443c18e7e549df9f13040a8bcb0bfdf741a5f9a447f328213d5b4a61543f1918d560ec96df2d35be6f4c442e8bd1492bfdf5260d93a1bd641a299e34b7736d50774577ca02017d937e3e91d2bbd025d6977ed2254f0cb1bef4f24b5c9e34dfedf4cdabdecdf7df2439fb6f4a15dd726a7f93227dda474beecb7d99a484fdd253a4425ce869df65e96988d2bbfc90d2bb5cf4244bf424970e9918f6939ee4bb9d18edb4bbefad1239b3a4c5d0532495fe144beff224d2bb3c8961b453f5f361fe453b0d311fe64f1525321fe644c4e525c986415d4a9adb796d48b2f5d192e67648d4ed909e08b7d3a489cb5fdf645abf565039f3d2888e78847cd374fff658b8b8334ca9020c2c6eb7f4002b226a82968daf3a55d5cfc45a048ee6c145124a5718aa37b5e3dbc22923d426c30faefcf5b50e93ab79327eebf0d3f6a5c6eff3eace205c7dd4873fb68c18a6f8f3cf912357ca96bd99d8cd22456061a8b2104e392ad270458595a9b84250e52f82b31f02a86b84534d69b8941087da5d23458866334b6a4a3105aa7cfe4b938e8f54f94854f9b24aea9c508b1461a4bbe9e907f5235e058251fcac73d3388f56d36494f69698c24c3c7e2147be1c4e6d92073639f5a4cccf70aaf4ee61d10d4e1055b0bf3427bf73fdcef54e7e07fb205cfcc1a1ac1fc0e6a342d2479ac3d5583f00a9f0c6a1acbfe1540b81597f5942ac04946afc1c3716bda920cd21f9661d6aff6d1c70ae666f72dcd0998691095350c3d18e00671e115a19d4b71d400376aa524a7ca4db713ba4a06cca03c22a2d483c2d472ae06cfa5deb71358d04a3faa60747d3ef1ed275c2a8ee9ce96e5c4d118c6a0bbb713aacac08465d75bb696612039c16b5df082dc2282773735a18e074b83a67a453ce23a98593524ab9dacaf607e3765d6cc6982436634824d293482429a5d4314b6bc33ab61931d8c2fc06335f76ccb5d9b0ed8a591b1da4dfa2696df857d28dc6c615ebe79ffefc31eff94df0f965fa61e8cb8ca94ca21b4b19d2ebb08b0b0eae86bfa4cd300d3f49734cc3668cab316dd59655971a838696b58582cbcdc006581a700dd8298de39f6d3b82dadb81ca6a2e90303767e4c3a9d33b52a471fc3ba39b096842a991e6348e49ce8abe23b00874452475eabfc92260f411cccd646aa74f1475153146186193274adf2404a89d0f6c183b4fbc777f03bf8913d38e7f08503ba6ec1d8a28a72fa8752d69bc2951f71f5d57c35a95ea499a0e046855b02a2affd50427a81deb5d6b1202d38ee543e57782daa9e80e8e863fa74da6a783db1e759f896c0e00c215d21c7e6833df382e031f84c2f5f2957b1b53ec10bca902e0e1c6e9c8e1c129ebdf1be91edc0e1c6bf37030d2fcf748344e8cdb52dfbe68d6bb17baddd4979ff1979b379e8df736deffdff83ec3dcf8879dfc34ceeefc0d1bfffea671643c8d778d438518f5fe248543bd97a9f1fcf30280d2e101f039fc26abe98637d47bd434ef4d7fc9d04e377ccdbb9d18dae9067a1a22c6e3782232be46c6e390f14bfc63bcdb791cef766e78d738271ee869889ac7f1446a1e078e5fc25f4337596f782238bee66be8927d1cd435cd0def766ea0271b74a590f9f72b74faf7326afc0e35cefb3da2f1ef77cb0e747b1aba99aa0300d521073a43693c0e4735a946a8e4ccf6b4512d15cd000000008314000020140c874442b1603c206af33e14000e95a04a745018874910c3208590418818400c1900801181996962003b5be5b551f087cd2973019a23e81d1dadeb044f34ff6c943b46d3fe8ec36812e6c4b1821accb01f3f247efb449ef27dbe1c0f1586b31a7411a3d72cad2775288c9b32021f9583960ad5bbf05497438d0293b6ea41f827a7d7fa63a639f5b536a132a857b1143450a1817bb3436e37d03c87a6edbe1550d9c0a49be21a1cf6ea61ba6c638f278bff1e5fcf025c3485ae0a6e8c839920a3be4cb021319c8f53ee5c0ebb45f594fe65c0daf517a03264fdacf35f5efad34609f5d832d0c5303abca91ae205a35ae532fa7b72a2c04996c33a65a571f6d24b5fe07501865cb0885659421eaa332bcc06421ca573eab860b20d1be0c90be77e528585ce0decca7090fb11ca1db206f3c8749a16800960f18b7bb196d1e99ebf166d0fcfaca284d4b6fd2b17be0ecbc1114acc375bd6252000a37b7163c0b30d5fc3901e932f65818cd82c1b4162e1e6dd6840896f93703a6ecd8b577650eb15680df58b2eb87ef5228eea31b6234ea25469fd974a52eced3ffc2a40bf7d65332622378479a57608bf91d41df5f17bbce4e25e9a5984574f57bf7e815d93c17b4fe70b6db1028eebb89284a698f1e867d233cef932cce57c6c6a4bcee57943502724823dc10441e17073d7b4d7337b5651bc97bc88c0dbd425172e582b6f4eab3b968da0c23c0a557960681a385464a06af370ac9467c30759944f01e539cf3727a937e1b5874e47363b4520d8c365df868aff70bb4f0f747d84b4106a734cbed61ff6fe0cc0334ae35abf2682226a0d2606210da2b85f78fb72d83c1923d1911fd80e31b07c3d148db4f9fe44d8167b0492116cb352507e717a7aab57071343d99886b0357cf7fba7c320d2e3a9013652d9c140329d65c62db67485881b9407fd9664d3fe89f16388c7157e2940d2431194e4191d816625dbc369fb82fb6fd5b0b412c032840a4657bd9362f9471a7e8cf427670723cb69a0b35aad6762d90590bd1083f94c4fe4e0e857d805f91e1d792d2a409588d729c92638beab8b478b8cb551f85ebb0849945233caf146c21d067f6e27007b78b7e0dd44fc22fae22c96a66fbc855f9a5868042d2dfcbdac3c8113e66fa03de2b0f5d14e5d3a352bea551586634f6f1e3c8aba4440c0d32c6aee6a765e88a12d5fb1368e3bfd9be1fa07344f3dba5f053a1e19ccd518c4443284016c577fe756a74da20b0ed1df5be36374bd9bfae2707a0bf94250994f0b7a1c613915809e6c94f1aa1a45b4a50833dc4a3733f2fb666bccdfc6d897666ab33a5c85b82903fc826716bba1e9bafb319fad92ed88f743a580d8bd0f074b8f5b4fbaea0eaeef156c370b4164b6605bd2d0af637f904c5a1d25a49b16d4650cb1b17789b1b3ede6289d5a969decb5e70adcee67deafd21d57575fc19d7a55387c5714b1abae84bc8e1877078fec516ab09070a784fb48d082701e2eafa7ebbfd37d9ef22cd463deb9115dd344dda99c11292d869bf0d5b320c312a985f6e491237ab491c923a451fd4feaa41a2615c85921fbdbe43ffca86c16e7c2f56715aa5e93b46ecb26142ff1afbf2a20677983ae73daca0b49e8bce2202098e8b3b4733caa7f9cdbd3f72be81d3cd533a400fa18d40e14f31a4ed15906a5d4c339b300e9a90442f6ee168bd5bf3fe2cc3ff753f3c528c673bad40a7415539130a5e1a7f4d6ae530e7094e5ff2125b1006d4834dc09a16d20c6657690750657db0bbff21b000ddb950063a593113dd06c265e0ce255e46ea81cf8e0d3a3a7678eb87575f9d34b71a067740c1b4abd261e5a7c20479bbcc942b214d1d4d8505140d1afd18940257a7c1b405e8bc8b00347e8c9cc4c5a4a34801c38c60af094f9e561837ba1ee3e6d993a6d06b26751daea50ad7963bd72ee2a85f8ea7910d00c090f13f2ab73e95f5b623c0becc33fc4a307fee8ff441f843e0251253fa7f1f91cacbce78d8a92a8bcd7b0fdbb9743334cfbf3bf1824b40dd177801e63b7b676ffaa4394cb1fa24163d2787479cdb0b8d26ec7791477a24f90f6e28018add8ebb0fe912b99064b1d6eb694a44eb4e8f6710e45ec05c4c99ce7dacee2101337c80bae3797cbd60979168dfc2fc35d50315a25e77a87a2a0210fd344bdf1e6803771dee61c4477826ea39d8366ac28b5acfbbbd4828f1ee20576596dfe7b75eca928de9b8b80f77485a0a351f7fc3800e742e337f99b1f5a0b1a1a229ae0c5b20d8bee1f3187273a270bb15b6d7e111c1a130dc0797d666c701d42fa79312370e4283fc7193ab5df13b65c223d06304bb756143392386702d64cafe59b00441e57eb53a8aee620631bf8519b8713695c198f4d6c9cf0e3031a33068509b6cf61ac385a8d0cbaf23b6c87d18f71388f5f2acb9666e1f38b46b602cbe59c1d815d8065f631762f287eb0e31be38c2e67c59366fe9732cace2e55c1f81d8068d9b9d332b75c4acf3b01692f172aafb12655fde4e66f645e6575537997c2d9ae1cecaf7e23f3a8477a915104ad63361946494ac6678ceed7ad42e9b4feb157ea179a87ad3c4058d145a180bb10c75f608b2d4fc878b0377a46fa93a7d4417a2ad1280ecb2f9ba0a2eea20fbc07f0717ceaa1f1ddcbbdabc42e13e044805d512392d9292987245346aa38324b8f42b0cd9032715e556348138e20b9543d934f784ebe3c75faf90dbe96999f5db0280a04193459bac515f0d285a20dc3d0601e9a6eda0c3c5d7e181b7c480fc938c43f40b23b1a616ba380c8f0aabaf53433a084a93698392ea64b8b2646a598246e37ba045662eb33f7db3539f34fffbb7685c37b01452854e29e76131908997a248a06d5cc09080064ca8fb842d9547d3282774dd79286fa1d6f0e87627f3c666247654df020cd17b2e54c6e25f9f03ec2fb795e5fa32e1ae1e9eb717e40fabefa7b7ea5491056150f9020c611413c5e1117da979730b5e9a8b3fb2ab9fb5d6421fa7a7d15fe4e4a2c4e13d37e3509f01fa662af0b8bb0bd9d57264cd72e91629b9aaafe98ede0210811d08a0b0f4efced58500665375105c0df89b833c971cfe7adeed805ff154e80846d32826ee38e228ed64c14c675242465546b91183128d285ebe0a353df6c2d471d636cef917aaab444c48cadc761211a237ff8b0f6599c0fcd3bfad71ef8ea77bd3e5db6bd279eb5354eb9025b5c061595fb023e36efabb63582427061b0c95561e5d62d68189a3dfe9a2d48f38d6c2337c7bd102eabaa85c51f3db0a852bc7b322c094260ed4609670ab8e3d4ad56fa8d027dd5448162cc60ff18ed8c48babaed8d88e6715b86d7eb7f61594ffd1ae8e01c20feb76bfbbbc6ace04608e2b3afcd730a82bebfeba3ce1f1b29be1959b26603fd1217f6cbb7ad5af9277f53452923e273cef2cc0a65248cdd8c49c654518663d871f33ee1c9fe05362ed0d2e3428e752bea0c2995886a6003d2720a583480b0071e25f3867e85feb0043baedc6de292b743f64bfa822ffb34bf3fb9cf7fbd8b088b1dd76ed251c3cf23598dedee3a2dea4617df10c43e582714d03e821ddb69827bccea5073d8a05d30950d17ade8f0d2bed852a7df9df6f6bacdc4b68e08990bdd6937cca965b6ac3e51bdb039ec3fb20bb5abc15a57bba8d3326e0cb314720b03b449495bb51b13e2f20baebba9079d2e412b85f5270f284b48f659eda2ce0f51bde15193bcb2682b0698a787d9b901449ea0457edd0b11c76f0b0f7c4f4be5b5606d3423b4fa40d30cf19da6bbf1f2cc5e7295c60fc8bffe15b79a877cd544e87b2dd058876c36f0dfdc4969de7ad35031462a88f5ca52111231d2de4db2eac564943bed60c67912d05f1ab21b105ca9169a2318bb29d27dd2f4878f4880500416cb034314c62226cf9369881bc95e31db8c61716096ffb88c289e1911921c05a64535e2d3da1260f6572219a3cb40acbcc57fb6a48a240b2346adedc8b0a49fa0db19c7679a75e657097aaf9be475b4add9246371182941ea03754c88a76c5b40ab8bea53de8e3afabd88a225cf77737a638da43288880877b4f98e4628429e6e7d92338872c924f91d15113388ef7c923e7678364760049c445f002ce52ae9df87ad67a06cf33a30ecc2f46638c13d62a9bbc91518fe9751765235466f68fe5f47962ee743bd6388ee0a3e4fc475c0e35f4632dc8509a2ff47b9acc66ceb8dab93e136d09fe46716cfe0073514b1a6d28588df1445bc062a84721c454c7908de273cd68e16e7d2a3d2779b6ccf558ff77e2344e6e3baee3dc1841c2dfecb4c89c1431be72287a796817e1ab7f2d0e81322ad73fb154f033ba45e8e038318600761917cab2b629320e2ceaac8f821d58288198252b2d247fb2f941fb6c5ed32c5cc2d6235338b18309da31eb72b905dce4ae06a261b27ffe7455cc1398dd7efc25d3973302b2511ae3fd0e847c40b9e706849931bd617fcb9ef858cc981c6444e04e58a1f3789f841249eb6295e3fee62c75497ccfee06681b961805d6dbe1c5cb170d2dbf24bef83fb6808036ab287457cb48a57662ce2fc507bddc6e508fc10809634a3ca21923af17f458c784a50118bc3e1a24327364c367f893e1d4f95c023eb92830a537a9d1cde74b1c4beb31561c23df043b9c37e96650fc9ee9006da8563d669b472da411de04d5b7f4b16d0b33fd0fda66f3eac086952f5f9cb46039c93f46ac2c95bb1eb4360e6e04e5fd8291c81063c8be838a108c6b129c5049f0cd3106144af6cd912fe14e7cca36805ff01e21a919e087a9e343b83135692c1b2bbfcb479f4f419c5d480123ab2aa539a00d150003c7478647f60fc842e680e07200a500dced38367bf8268768438440c5dcab6ea8f9e9ad16b629a75b779f14f995f5c10535a552bae9547a33e98327e5ac3f9659a4c6cd2c2b19135c98082c212353eb0c971ca7950383a9596f9ebd5baa6a6a48b9d7d26dfe80a429db55267f1330fa34cbdc799835bb33cdf8b141807ed51d956f9907c18fa6aa4c7f7c70d0bc8dc7f59d7748aa90887cc158fb947abe908e005615a8c91fd68edf21f77ffd55a506510e93f2f17da2126696620e9a58a1cc20e63ee8d02b819336f5a536c1bee2f8840870d2474a2544e72de7cbeaa603cc70fbf276f900f34be96e9fb26fe543db6ff6cf022442f354d8d0842630bd911947e97dd79d0cd1c034954a3fdeb6a3d8a6138ea6e8f8e39337dc6fc665bf60caddd4dcbd0844225230eaa72fe0cdaf241ceb10c448934579f66e39aceae029244c3093c231310305a98d26112db3259227e1ca2a0b0ae9001c14fa6b26ecb6ccc8cbbcac3d119ac72de6c1cdf4f8c9fe8adbd86af6220c96f9af00ccd00ddeb17f00bc90e90187c06052ac148b01a41b492448ccf473790ea0a60372e3b75ba5f7b97da6ac690ee77bdcfcd22d5cb1d92727230f827abb3573b442cf6b41b4b9f94700d3538cc975e1950d71e1387744a522d6262b7d392bab4931e1da61864158ce424464e05101572257fe1475d7c4d7170be7bcbbad95621d56b64cfd559cc6b3e74abb666017963c13cf6e73797e918eab5ac7366a26a8834d1aaf54f1d86b1b1bb3d9d74c061f5080841673aff93315b4f2f7d870f90ed7735a72ac62de5a54f10a8b0aa18cf7cb3416fb638e3e63475c7bd61cf336a999d70e6a4311e99528349e55e575e38bb58eeb30d5b627e58aa0c2c691437a803e18a31f77d1d2f3aa401018ceb336226d35ba6a0e3fdfa0936ba44bbabae9db63d4e5386156ff3db79a631e5eb87021e6fe0ff72d6984b8476fa24ebd0b6d6142880b0112585ad218550b77270fd64b14675c511cf344faf3c8e3db77cf6dd98f20c3daf7233fc14c5f13b27abb870f1510f128458b040128ae4243c049b0c984d689121b27c8e4b7f69744494acee8fdb3a389dffcb74ca34e49bcd3f3aeb9f35a203d4e123f73ac80d5f0924d799ed98e4eb9950a261c3354a257d847cfaaedb2f8c4f1408b4ce582583d93071eddf8da46c375f29918c9143112fcf5c96f8a18016bae499f71331e3e7da9270678460cfef5d53b3e267dc8c135bd103f12a89ceb44aee2b2a26db6671567297f6ac41c3b80022af6899a04934d5544effa0310a3b8e204687989771d4a5e672539d34afd43e5ee6c270fcafee8d834aca4e76c9a3a7ed2c87f430f3434f310e1af05e0509b8ea4e3482d93846ab291a11012153bf138b5ec70b4ab80100ea159bca024d448074fb767f910fb4654c81fde19e08d37b1f4bb9607e4e0f9adcb24d0d4a04900a72c2132908854cabdaf880289ac2e87628f7ac5244337c1e9bdecfea5bef59c19e56fef5cc73311ad0cb5ab3bf0c896178aa32bda2f9510af0142b52ebc04a52c8aa4b20b2d49391a7d742522e169598bae1c3f39e0251464911c9e04c3c2f3d9d41beca0102ebd1cd13278aaa9b9cb340801834dc026cfde59b268103a1c88bb280d09310395e3e62889b91b279cd89f0539de799897795780b1fa30fa9530e1c2c2a0006e272b7625b737d4f52cfc4e59dea708fc3b3c18777a55548c58319f5b9122461c46559873eabf17282c041f0dc8224502cebacdffc0799b06b912fb075429a41b4201cec3f4922330d4641e86f245da804ed46c016424dc0b4e92dfc8998eef404c4a034bf941e6c5ed4d1d6154842c12ed77eda061f3ee429f83aaf015319c86ae1babb767cb4d0fc3474aaaf7ed5cb423b29760fd6e62b7e7e92a5d06035d402515ef6c94111fc1e68f8ddd7e8e1fc73a6d6194eb7cddd4d7ff94c540f7b181d7d8fca5f429113a3c2318ff63d575f65502b5a8e24a16562602d5f9038d09eb0076e00f31ee1b767dee8bb160a70bbce747f47d1b73da8edfa1351a5bdea1081105c641a18c2f71bab4ebbde42b0bf5f5e898b1ab448ff8edecabd7e6f8350ed9a46f0cdb5e3ce9ad15b586be62e016aa058e85916805dce0c7b369d5888223a01828304f2682ac795753b8877913383559daaa955fd62a728ddb53f3e4c76136c8b7284067202762f97589299e785aa1edf6d0906b08813bca86609c4d2cbeca4146e22f2d88ac549d1c6005bc077f2566cef95d6ad47d1252fab10f3d597070a0a9e99670edc12aeadf3d244ccbf802d2b4be12d874a968d2e0247401d380098474e85d7e93fab48c9a47719e3a8f6f9231023c442846c83b58674741d74659a8f5f48c05628e499900e35eb015e541a7008b1ec3d5d221100f6dd3fa13893b934fb0061a544675c60f47030fabfad6b36b3b3cb64d193459559c6634e6286f72fe1faf04083c071971795990102b006a2e523c2def511b655e9e25072f82a552c7ce0d13763d53fc0ea206908fa840eec3c094895ddf6479e8b19f926034ca44cfb153835fbc99c0b83d40efc429fe6f7cc6a87eda8078880855f1544cdbfb1f1be4e4eb5c93379df1649d171aee03d612800085028e44b4e2aeb19c628ceb9530861d36b63a0b8dfe343b945b9259e714c35bbfcfbcaf7d1ed6c829430692c1820da10721e765fbd3659f9851b68603ba19914846eeb91136edba5d2e32cdedde8194143fbca72e5e62b75e8513a8e0a22a2414aea4685086eb4edb79a5e6bac02b9bf73e63652124cbbbf7c1239eded05439b0fc290e877a12a32e9b86b67eda09554680fc53fe377b072e3fdb71579d0c9bab4875d6ab9efa41175e0fe73be8474b68536a93716182914420dbd904b8511bb3ba27a05576730e54fdf2e966ddac4d46ec748ac59f7e544ef12e45f4451a6c32752ef2b2d0ae3887023bb0a15a6793de22bc61bcea538ef4a005cd41d56ce3a50965af3a10b63fb8d2f96db415ceeaed9b4237ee6772a4e69c7362705eedd00562ce03b18296fc59d6e85352fb894722034738a4b10ad6b520b77a97d1f2f616d1f817f7fcea93167ada848c9d694a5cd810ccbaf78f41ec8d62c9fb49676ba64f175aba29b3e6c275c30aed41051845f178b058d01d94754525d55227422ed3a71b1674acda913a005903c70e63da413133c30fe8ffcd27742c33d3920261f9a7b1434d28c0a3372ab96c0a462cde806ff9ed54f5e1b2858846f2644bb38493ad94d02f8ee4d2c69fd12f55279eb2839e23219f13c56828313f6c0750233024a5493ef0c3fb858ba81722fad6f6c6e7eac4dc2d3a51da447c84ce3e8878cd879f9a0fcfb574860016dab137e3a1f1bf5c53878263995006ebfc74cae83137b0448a21b6f390a687fdb124a8b034cfc04a0935b86216b9d62432f8e9abe410cf49abd0112ea95322585b902ccdcbe4291a38a3b408cad3b97ab4e51fd4b1773eff5b9691e88cc598c5f5d48ca6127206e46203a3d308ccf830c7a80960467756c2b255dce52e07011e6286b35c29a92457678e3d46f3ae39a94f986cbcc45464a35861b0a70c3ceb529b51958453042c70ee28670f9a154fb45c95e593b314ac967578463edd95ceab0b23a62d04894b29ac7704b8ef24d027b5d72fec6bb2ad1ebbedd81e063c7a129e89c38289ae45f71fb95336ba2e0557f8bf5d00e56f51cb1db9e51e7d7cb2c36c9c95f54575289ef3a2dc8420b153ba407f4e76c22ffca265540c0e306ee9842bf9618bc9a1f4e4b15d0ccf9fd7d4b4613dba992d94cffd43d97d60731a5fea9df6192faeb1baa6e6b115277aa5283a1b2c5da89fdf6c4cb2e0edeaee7c60d44abdfe76c723182b1f102e83ddbbfe14e823c08e157640e806b4e756db425bcefc90ececb5195b42ac2759cbecc5461927222f56f68dff81e809270504ca5f228056adcbf3f98e886f148a791ef299e0649644f8028092164ff45b6988e758d98058b830175c03e59c720974898bd7d9003510dc27177ba3a65100f6865450d607070256409c5e3014542b6511b68805cfb7fd3c9963e32b59849385735e91947d6cc0fd4220531216bdbdc0f9afc9bc37dfd6bc45be7caa32e894c181e093963cde79e06b7630cc2fd3fa3e7d7e826cbd7a132a091053761be91f0697f5794793cd942039b8cd8915483dfef94f61a7867332ce0c03e25c7a417aff63228730d485ce73463f7424ec96e54312fa162fa4eaac536c2311ac3124c586a1e5a39faf896ed16b7589a7cca3c06341c777f10764b2e67c2f85890e876b555e2effb1d2effad12061a42f41add1d791cc6f5de76f5a246ccb86e01421ec17e0543ae9ecc2f4ba38f4c371eaddd6b972762cf70817e9935211acaaa0e2969ccdf37086ce43a981f6e98e6e11274c04da39bf5dd45d2557e3ddd8eaa111ac1bf1e722c56acd35489b20f29a35de87a98c6364451914c2d92ecc291360e48d33c10fb399eaf0a56bce06b44f956cc6bd33d76b294081342b5cbbbb4ba3503057802a3a0d5b5903c421ae4690445c42c2ebbeb3754ba5691332585485eaccb68a788d4ce4286d02149efa05fb9bedba554d3d4d804ab461e62788ffa823b1a3661acce19ec6017d986da257c74224b82d100801ed7cf50cfca61b2091e3e347dbed9e2513ef44e9869864e0f8ffffcc72053a656a0019fec6e08da73800724ced6b2486d66cf08e8d4d7afe13462fb2cdb3306ec4a0a62602a6bcccd5ab0023c09bf6e51148442f083e3141e35f7e92163c205bcf0046a2d93ef9c13b74464982c989cebf1553b50a6e210627362cab6ca061da54db554bb910b582830399899ccf42dc4c07d297014dd3cfa78a9c853961625e0c13782812fa1e44d273eb63800193b1ae2401c4d0f5c38864e7da5c6a2e2bc6881db5087fb608c5b4df635cefc5000dd76834c417d6a9c12853ddd1c7feb4c412bc5838b85fcc83781cb014758bc0b873382e469eee986c390e571fe408361040abdb04b52873dd7a5431adb6fc2122922b9bb6b3daa031adcf937afd8cf1408d5c62aa173b2d6baa1c5f06bb181aab73eeb57c1ca293b67785854b40ca7378db17f90a3a96f5747c2cfd43176f790f0b03cfe57d3526184019ec1ae541658c1467d6e85b1f7caa16170eb89fdf5ec1405ea77010328fcd6ba2d621eda0b3d8b3cc1dc304617b1d01552168c393b1cac56b3f175b87508ea7b27a660d25c3da1bdfdca4c0f3bae76e6fb630be9df0a25324c72c643df736c3c2744af434c81258097dd6bde94df9f2c7239c5fb654f262d939e0b378d13d0aba90726d071d00451c47b84076250fecfdab56a2feb11f08e30013306b2b8f5efb9c69f4201a64aa67472856b716b8dc90ae8dd1b90d27642c7dc1ae791008d4f5e1d722cbd385ff79587e16f532680165a0c26132149301df562576e268cc8807d19091757858d68e414e5abf93e275cd7c3a0571268102a547a8b5e9fcf263567b38e07fbff2dd755824304ab305c02ac9c0e2ceba27158106b9ca20bc1e149c59ca6b6d42f5c5642075de26915ac029881cfed05594f827a3a57a1a40239e58946a2d05f8ad0a0f7d922f1d195105fa022f89591e4d20115c4661f744f9b961348852a3d8ed72e38aa85bcbf23ec8c721ef9603dc1510d6d09ee1c4a815c6a70d27555866002ca97875b7d980f148393704bc5fd666f78f1dbde23717896a08d2ca74b06ae82d287a439f0253cefc99d67f6d607f926a874eef5fd96c101122684914875e509c03e2d65662697eb76787c33d06ef603647db0efa834aabf449799ae5f61f659686438132477893b83e3282917805ed2dfdc5a765ab28aa6a3a8d74992a270a1fe52182e95747a0dcb9b25ed50196bf28a8b0ceb7c9d3cb134953dab58ba31fa7de6be154e8a35206a74dabc323461582e08afe9a33661fb112935013a60209c0fa4324caf3e7aee531a7bfee1ff6803983e9d3a7564560452f8f3db7fae84f54fbf5985466e422d3d6def304bf315db4b559c855b694ec54bfa06c75f9465aff267425b63a771a65b1b55ddd7e24c3981ea1e96b42c41b90036c4018a1e41f17e358b7b9a2856cb34f799a1962e7cc86ce942477e90d924e41880f44ddc65e94ce8018a8e1974764847b07af543c3cf598999f036b6aff53f618c01f25808c4242a83a94af59a2936d28e60cdd523a14496759c53573e227e62899bf8c44b2ce2208e78884d0cc4272eb1899fb8c4230e628883f8c4436ce24b70ae4e2272e25fccd54dba5c2e649218598bfb0f7dc597b79dbce74ce63a601b925a5a83caf36307b834f1b36063035a138efce376266e139d8f83883ad58fe79f630c8f3fc51a6cd35b6a6f469c57976ee600cb90d904e7cfd0513171af265781e88e8ae20601998420efbcfd93a9ede909f2824855e2bd022313b321ecbdbc15e00a929d8459317dcdc1e4a408124dba3f07f1599e39480dfeb7cbf8923487e23d04b7ed858b73708eba62f7a398e76e4f2371a132f95a638f37c31a87cec635292ce283c40b07dbe864f997b0d528ad22728a4a90391dc65fc2a1b9a81c2b2237398b1a886a93f8bd4947452cb400e1abdcfcd85c74b19ab15eefe83c78551ca606f570571e2e64a0baa80449c40812a56a5e5fdca2dcc621f46f88204647534e93a75beac7ebd17b197aee7be63999217ba5fbe523009cf36b8f690431d885a0da0421d68d5d10ba216283300174ce5fd2532ddde00b180146d87c2c215d827dea00e586379c325a8700e72af4e8b9fcbf96f6ad378d684ca337a6119bf05f4c292dba57ba00dbbd854d6825da3d7ce3c5d48196974dcdacc4caf5886d91a320419b41477ee08df5ff00e1b74596a67bf925cca5594b61930efc9988d4ce149802072ccf868a48b66d27ba2fb04119b2761db537014e3657564ebe66a31439b7e27cb0504eeb1d1db83134817ca9ec5d816ab77ba114a03e174156bc8175089c69da29f4034d0b29defc48c1f6a18daa347ead613c065d6c95141fdd20410a9336da8dd9575191e63e8cb03e3d76be398c2db9a577d541aeffa830c3a64d7a27861303fa4d8e3c5b00d294ad1701a00ed9c034b49ce455239b7f51ed84fb0b5bbeea1062c190c9cc54c1427c0fe174fdb0a27548b1998af11300dc85a9832f4f4992ab6d3a3c691fe00efccf6ed8b2258ffc3e7f8f2e455e0d6f7134837323462f2e4c3a230664407a5f270c63bd9288e3f8412fcf95a842d9130039a2322242f7b87e75b5b6cac8e14667155285b2e84192e35c30800fbee734874c65f260c05eaac7f71cfd25afb9a0ee0904b4b1b7be3bd46f3d1447ce015837cf47b0372b81218f400a2223c5ffcdd93b9ab58fed44b6cc13cce2886333fdffa6f14f819f79d6412cfb20ef9a5afb65edff7dc250b0596fb18e8a00285e8db718cf26f830d4a4bdcd80e8e5581e3ab57901dbd272633f3c533b6ba2bb2bad15f93aa11d671a8adc122600d973686b0092fdb5579e4e872249b26a6799c2ab5282888fd9e0b0ad60a352e23d65bf5711013646b5ec090a57537a45bd450d38e7bd5765967da5f2190dff4fd7b528a32bd3168e85ec41e2a1167f503681b1ce88ad44ed9a535b1143d1c79cd9808c2b2102275a4c0343f54bd1d7cb13c2092c21b69729f5aed5d544f8be9c4a827e3aa6b82f6169cd13cd72ec0da4b41e9dabe5c5eec3326c24aa492c41dd56771d992ab4aa251aa6dbff95cec5ab51e034a5feb5cae36187033d56efc2719eb3f381e8e0f8bc060578280ca3f0542eaf9f45f0164b42c0debb5a2ed725994ebc22e8109fae38af0c91ed4c7ec41d59b1c91fe1b7cf4ee3a8d163e3d05ef9ebc0f44f6336a75d6212877b77dd8e602802b7bf4eb95ba907efbaee5913f140b35da1dd3ac4fb40e6b3a6be856441d83e85efcc52a175b8e5a7c450bd921d4a14f9c9551aa0c16f62f6bdd74a7aaccd68d10a374a008dcf2f25ce4f0f0c260b1dc15dace9a7e19ae7978eee53eee7a79c7a4689e0fe4fc0ac70da9cde1650b39750f4e1f166930ee52812005959dae6ab9f9a12c2681542db37d43440ef74600ade58dd869579842b28675cfef7cc8070115d1c844ceee08998168877a9d3586d4b7abc3d62c883a0f3b2a7b8cd3389a7641c4fcd6c8cd7df0d7f02fe218d2eb764709d45a8d7f1632acabdebd2caee30325643b66b6eb8bb99cd7443d0f0c3ca0a60a6855097095ad3190e6729e008116894024e535c6a0d4a36e787af7f68d25655b09e368faa12b15a8091c1194799c77169da4468520f0f392ace02f43ef36029b0b517f4a25062353fc4940e7755fe01e85a4ad67d7cbab90d7283bb367c65788155f6b39635d5710ba8970867970d3e88d287668dbf577ad00dd8c6cc1adf975a2d009f2578cb52cc0cda8eb9890f6bd1addd152f2eb248b29c5a4a5c08916896938154ffdbf88524f5b41a6cc4eaecc0bb473dd37f540d4f5d87367763add7a2779e353f2ccb9e5c4ed96f12e929dd7a925fcf3bcb4f00112af1c6d1037648d37d981995db78cb3a48783131a3f602ebb741eb42d82493cab61caea0d72690a7558f4a4b930aad147f52ed239201152ae477f69035fdd219dae89cc398a02a0ecae9461e57a94c60e78024ae8ce9e608f31cfc37732c3218558ec0b0fc22536074b1a4675ffd867096aed8ee2f5310b3ef4fd66da88440ad253e52075890c063f9a057455663c6db34c63603c8a31bcb85d6b6782970b5b41f304a9032f6223147d53fd7d53a912a4d09e5b382c41a3041a280521b703348a3428faa276f2a122dfaf52731b4b761366434dbb5ccda0dff8404f6d97ef4b4db6f7de108194f714c6f79734687bf54495b174ec9ed6c9790a4e73c62f47e18a8a30a90ce02f365e323e15372c5ed23b4dbd610735e3fcd094c3e42a5218456e4f714cd10eb099bdd9a9eb0f91a03ee663d1574fd49895c4fb3800b28ee845ee3a6176ad90df69de4f27b464b28d19e89269a7ab9ffead374774196b11e0e982d1f4642ad0e635eb62db90a4bcf2a64f229c9bfc86d8132454db247696dae58500eaa3392c05bcb4dc62faa13dec5409e3e1f6afc7764127e341caa6d54c8cb15ecf8db0bea59bd432358e99716ab581cad59ac8887d6d6fda9626f059ec4bb17b7c3465b9ff7fcb8ad4e817ff5967d43e498a6e0ddd0e3d2454c8214211861fec023764de5a296b9661c345424dcd557e4b3a8aed1709297e190c80ee4f382e6f4b88ab11c8f68ee9896d67f4398f57bcf622f71a7d7ec14ba85376619097d3b50a244209d84480380a3d50169954bfcb6cf7005dd747b4f01db7a80e00cd9b80a9c8153a1b8ec612a2c3dc2d1ee5f8e154edb83feea0ed53d30ffbe4d6642a43c53bb89a2104f45ccb07815fd782444ceb1a8805690ae94e639a10ff4476e3978f1bdf3993e3d73d08ae7170dafbafd46cc4e5a013c2cdd19b45ed0047afaed80cc218978a76da4b8649e119f7c56e892a7b55fd5ad8f655513b9c5590563d34bebc8af6a6a0751129382459b6ab4ea7abe993226788c2b66d60c45027f99ebe964b42902a2912fd33345a16ed83b2840cd84da842bc87e39d5b91a5b36064c2b9dff4b33607d7790bb46754afc539fefd0d4d0efe31f8f64864a1ae2d209418e097bbab535d36ce5b3b2f29876453258420c4e1779e6c864c6c8b4f71d1b1d312513ac1219944868f669097fdab87362358869c48d958e5a42dc8fea2abe0d5699bc787db587521d0941de152c63292442e48671fb26321c436dd449650dcff3a75175e950812a739c318e7521fe4945fbf5ebafa4211002345a94b64b1d6db7512763d1f5a64307f8c3b07395ad1f278c5bb00a9fd287e311080d8c5793c73a35f09c3610d2f1d88106af35709da8a0237eb0f204373509d4b868c5e2f87f82090d25bab8f64b485f851900f60a02be4c426ffa2d63230938797798824ee265dfb9745c03cb72ef95f5dc5a07067f61b702d9babeaf6b08d6d1918dec8eb73461eb10beb0d940d12381accbfd1509906b58b1f304cdd95691ae1ccf1371923ec917e51b73ed152ff80579696866c857c17e692f6409f4a924c55f7d21cbd11b905bc7cbd136153597513de867392cb25cc67ff61d50bb7aa660b0aa7d8caf1dc592e9922bcea8d767d2489902746d7f9093e276abc5005b26684dab8637bd39494d2c77f73872ea99731c968ddca0b2035ab6b2a2b25bc202fa6a19d8426d522cf314b221b884dc2f2f21a6682d15870ff5c0f9f63dd4d0e5b96a86cf6e527f9e96aeb3e16e63653767b29d5921a145bc550221dacd5e165246193d47ba0018e22edfa296a973a1a9b9a1b31ca005bd862623d4b938c3282342f03c81261edd18d99bb0eb1410913bcb8185f671475ea7807139542af6534db89a6485274ff7fa057c7c3d1d22f7d6c93a6bb7e162f67e41fa437558b75510addb854f93ddb81e47ff0b8d3f48635b7affe1113cdab3c40ebb95554d27b994e9301c1adb68e9ddc345672faeacac3254ba70db936e508c96258c07414369f3ac1cf976d677efec2a368e67f7ed1b2d349a3092e67b5e177763d06b8b71a3b0e90807750ee1e0ec54baa04dfe9d1626180795ffd6aff481101272a34a742f1c0822a4c8d0812972f181925833d76b883ae3d3f1608cdf0ae370441e2e2fe489234e0f944f7b681d69caa1a8f3dae35202e740d18e53483cf68a22ff2807fd572252645f00dcd166048c32ca1018b8a494de28ff0c1179b8b50daff2bc24fcabc0a3ad6ae440cdde3d49bdce4bc89d5fc258dd724f511a09fee470b9ebdab93096ea8655eda19299ea4437bb2355d31c07fb07b04149c613f8aca56f90a7f464f9da209c1d0dc08a57970a01d04b2acf826bfec79a7ee3f9831d54017a878cc1676667382c579aec508300c745f8fc8cb775f3b731655dc0796dbe5aa62380e092ab6ad477be0261f6b8254dc45256c075b0ca5fd990d89c5013b559757e0e10d664c71a892c3672f0f7238d879739698abaf974b5ba606eff9f6874bf4ea75bdaaf4fc7d4468c9eed827c3a6cea01bf7ba57fd70ea38d4bba8581c18f6a06d68236da45d764c13ee586886501c0b61d60d97717a13eb32a7e2f9d7966476e7f14b56b97cd118c280f4096d147dd1ff6af88d6f04d060bd2c8837a63e1629e4635d4f2b421b31784710670f24daa9e65bf712aa3fb0e264e425531a92e8ecb95317255717a20f1ed679ac23afeb4fa6e187a89b2a37a7a0af41feba53f3ba300dc664b5007df4debf26a97a39e3a0138316f21890a2d2a2c1a8ef9b96b00f18a623d6cb7506ce56f27f0f11d91d5b0b7a7a081aeeb212b01d437092e4f5271b48d2409a06242ba3f8e20a819a6aa7e0a4af5970d2c51a47fb7bc7ad9c011a0118e7a0da6cee54d711b10a0f22f210446452c22683317a2da6730d00186cf94d15df317c5f9542a2e80f67398451f7a100a8357217b0a0e7b3818c1bd6fe675cb0ff39450d3a2d7b5f01dc5cdbe63b5e22d98db6c6f696114ba26c05184676b2e503f9c785ac0e310b2ffd2ee5bbc41b94657b274e5099bbe30b2f0ed3d16a5339ad12fb0768d6141bd73dc488bae5800743d665c8736dea161552c5676e804b4fc410d7e1ceae4fa1be9c92304e22769868eeb35e402c4ef8173a02472047632326e6b38ced3edd76c793e0f5000b715c13b1a1c469aa586edb15763498416d3a1379f6080b9d13d1f3df8cb0d23a8b95fe3037c84cc201057d5e4ce7edd2cdd178f81f870834d744661217a7bf797826fb6b1fffc57d272e74cc52be7ffae9287788b3d2c295a1e90e1ca88007199b6e50c3c7cbd78a54f81c5aa66ad9e6066a710e1b8a72eab214b4e9569e22b48817bb20926c0061de3f457c56a64968691b183844a84278b7330b0def953333cca6488a9b25e64f3bb1cd9232e090f01d075e3f739adffc3c7e922cce8a86ad970bdd833bbf35fb31a7dc3cc30cb442f3e804e328c1270ab1c6ec7bb84b66f93db76dfc164e16db9b3cdb99ddf0c1f8a28912dd4eae70b6a1850bc3c262641e97ee6630ec1441582fe1837717e50eac1a957a223b2da7cdd933cc487fdd1974742458d5c583976d386810211336b6e1fad336776ed2532f267a164c83899a36f45cdc3eb66e7c8227c7c9a0673bd3f1a328d9ab9a13dd3d2feff74f1068a04a6b2a27fe41cdd320fe4e46e5dd1139d232023957b524d2feb0b00f895db0d4a2d41d0f11365446f5f11221519d957344f81c28caae900b84f983478e4daaf9f5af7f6d06f6999f2b11f766ed8977df61bd9f7bef6cde7c95b7a67d295625ff1fc60f54e6f8a1bcb7b2ab2c1ea3b1ad5250f5c04bc8840ff0093cb93a5da917af759cb7f85022d5947d4f6a94e9e638ff9a78500b1ed6ccb8bf69bc0432eef7854ab1dc77790bd5e28b8722e331f491b74eae9c5c446a8b36845132f1ea38ec3dc4f29943964204e26ec49665e11b98d25a24a08be7f8c447e284386faf1ed443f508ca8ee1fa1974e081113d2afde3359bfcd0f6188e79224a3982a2b0db831593ad9b1b0247fdb162a226bf4943c4d822fa7285eab9bbdf07566af4126f7b06cb2843f5b50f5b80d90a94c5c6799ad420d81c9d216c172221facdd0d3d50ba8a7933143c0a51c7b5f7ba2bd2cc65eab60f03b9e561e67160d0fde22c312973489cea4b72628e96eee8199312a9759584deef2bf5022e741a8b8802399ddf77b977e31dd3e88c9682a1dc1be371e2e594c73a7c4e801d5bce1c494295c3908f57c9873073173a1e4b02fe65c4308b180f41776f27d8c1fd08f681a17b13189e3b22236c7a31c8859655310abbd60f6eab8a9189a80e178271337b5dac06daf17cdfe814fcfa7069be37c9815121955be2c1a2d8c37bbf565353811bb6aa725382933ce590f9e4e5c23782d95ecf347a0782e4426aa7be3c155ab986963149b1a3b2b9260c849963896aef4d566bc288564c450159e510c6b33baa635102f45d93b4e725b78d0a91f5ce4d2ea105ff720852afe40f9464213333a97741f362719259ff64697e702122b023445c59cee9ae6934ed8bab73369d05b2d0b11780d50a83c80c5f0131fb3390d02d75c95a4a1dd65f2089b53f534c9efdea5ae0aa94b9d32330cd04eb7a485869b893a179f8367a200b2405ac0416056863e191fb9af4b9abdbb7847a4fdf265f8d8dc85553ea3bd3c547553b5c08cea3b1cc0309ba0f2291d3b360ea450767fb6eb65a3aeb7a139735ec13b4d14aa2648a46a8439f3a39845b23213c59d9ade0166f8ce9231f0476051303a31da845810995ebf39b19e624064a792500b72fda06a208994f3f73a63a13e80802cba87d8d506c34f1c13ffc6ca358f3153bb900d22045fe548365441e08193d208a0e7226e952fbb72325ddb9f3a070ee7dbec3930ea3572c8846f34f5b6d5dcf163f2bda10d5975158adc307619f4fd991b73b4f75cfa4d28ac58c2d88a43cf23670005c1c658c162025b901106219e408bf7d81c526537c181d46bd1176cfb350e14fc3fa91cb846b0058923f9e87bd4c8327f7f2ab9888965b66b9dda28b7e8e8f7038a19c032b9a706421c598500e1ba4e9557b5b9464095c955d3eb3795ff49c7d96a5f52fba97ad7a71d37436cdc9c2ffc92ff2fe54d7a5d38c545a15c67171bd9ec10196ce327841cbe3b1d650b39da83eb8a223c8f539c066742bc6ab4e20e410acaf8a62e8b89ddc07855c44c94136e80da0f6b423c449e015d4f356df3ebc9a30a1534857c98f96154e6ebef48e46840ff2a1833772a31a4363735c6d6392610556494dd8a78ef0fb7d4b6d47cf4d6d450c31d2e261110384ab85a9b7ad6d3fc270e426eaf04cbbb5aa855715c6d829b2bd073d7009ba0a77387632f0d18c7824f9dac48c1cd74576b4fce899df454256a940dc583d8bc1392f8382691d5eaf786293aa2ad25c91a044748a84a9f722ee3533e743b6fd4923a313f111258755c3cdf97d8037c815737cbbcd63d261b05c5bc2bd64764ed5e1d970296a0fe6bd20d3e3b2b436f19005cfb4ff1b3403002954dbf23e025b77a59808105056f5a3114fa50e14143bf57d9fbd24bbe0864ffcefa35819dc84d8c41da08731fde6c370d76b4fecfbe06101f58dbc520711e852332f862e2c01a864ad42e724895f69feea17cbc3c19a033db1c789e8dbb7d0e397e3828450134bec9fd1f55173529978593a1ecf7081b81cb70baf026f8bed6a549c1c271d827dd321cbd06abee7f5e77dd7f70933ad09d04899af31d0ede1303a9ca486523c10b1b3c66a6bf034d4365891384b091d6289da61dc761e234fc75634e1d29a665011541197ef614ccb93d5447544d4f82bfd3caf96faad178d6b14faf15a258c3172e4a73df8067fd42058672d04aa03f6bfe7d2616aa42bc4226be1cf25bad29fb6e07c1d3d047b1c573a38be8b9a50d5f1af7798c4a49f7e95ba175c0f7dbb6e581e4b39d822d3cac036aeead3b55a9ece479cb847eb2089dfdf4ff2cb2a93f506e19e1d4481d112fcca3029f3d8eef24400a1628e64fe005c57760c4fe58d76e5912e3c9f4d1a6ca0ff841dc1a2051a207ef4859e772e678cb5a24500047e1a5c09e41f499b8e603056335695c0d36e6e1490c72f67da06a71b8a50d9eb980cf9e6d1e5e15ae94d9b3f1e84f1d40694040c334df1306c46711e4d3922ef3b3589bd13a31475d6a59796aeb8869d3df52a47a5674ff9f6ef70e410054fe312ba36882e1e5fd7fdd65fbb3387ca324c6fd37ae64f378150ec05423a7e56bf7a03aba5794778671439277a394ab6044db3fe538c6a9cc21c0dd988f0d455831cfb31857c1f315f39af7a1681db5ba124a770ffab884f770a7939c09f0d81d0211a0424d7d06c249bd5d3cfa8b801941a04b506895aae8431e2258311607aa7c3ad68516c6fbebdbacadf9bbf5eefa1215d268bd102769ec220a3b77d1928c2cb015c5e051be437cc7fa5aa340bc136250e39e488da89269db0717b2411762627fc39e5927f4ef5fdb7372b2d7dd93494d4a9fecbe6f3c1191b1edace88eb1091372bdf820394d7293c791b9167e50616656b3cad56ac4b1048178c7886ed6a22dd51506919294795dbc42a85640fc6de2382b722932eccc7d1b51675db5545a655d3c72b5dcc441d031fba78da007dca07bca35c23e5d7701bb46f25106a2c4ddd2db7e5546169f1ffb9386fb014ee7c546967f407280690310c2ae2f1904ff4e7dbc8eca2a62e8013e6aaec4c7e1907aae152aa003b7306840e250bc42556dd00df9feadf09b9f31a1e97970fb9bee0ca7d25f0c60df82580604d234de009b8258204d415e9eb460548ba6a0f30489ccd4c04d8b44279170fca7d2ff176d73d06480c4ca05daa0d262a6d61227c7c9eac0da4f05c454fd9eedec5193793519388ef289a8c720cb50702ab5a0f7172eb6457daf58aed52d997912af6b3cd828f96f6120ceccab320c8d1691ef718492974315a23774facfc1ec44006e7e62af05c6aa06e593315151976427c630c903b552ada2e65e5b7121405a4a453b36ab43b6e65e6af033fb8463abe9c95b5547f82b33f8a073d6546c73e0deb3e40066c56f00e0f38a06c8338aa02e9d6a9b1a65587b43973a871e0660184ed0f92ecd7fed7d340037355dee7248c1bfa9ad5c2c2b5c86bc0409dcb9769f83ede5e265c7e6d55f3b51969523efa98af6af0ed19e8d96be591e74fb7ded68031a0fc6b5adee445354a353ded292222362e329adf18ae72dcc1554efca3c4c900d5be55eaaa99fdbe1cdc20dddc9660f1a5b9c9ccb356cf44eb85a4527faf40ab2d5b76aafffa178dfb5e5d8989c96a58e0497d53ce0084000b22314dc3f3a0899e17be2c33bb986d75f300c4f5fab9189659ebced0dc8ae5b4015dffa9e544ae75387c7cdbc7127becc358bf833b9b05f34bfd17f87490486e5bfb54ffea83d178ed6121da8b67ed5b748047fb0145459e69947e60048c8c404b9ba383d78237439c8b40b98c68c4a35da18e89f9b2bdd0b9302ea85f55c77de4e20b13cab05845b70b15071ab3e4a90561459763d49c77cdf3637da871bcb03844b151621ca3e2c14a12d1ec052f70bb0885d0dd612e3253b004c06075cb6c57396cb995c058dd5dfcdd0f0e89d927842861ec19338bdf59ff6f13cc80d58c5ac90f7b9eca81e5563bc5b0a61d0108aa590d9a11601cdba2af14444d0f70c4393d3e48a31fcd0a58fac7e8f42f25aa4b61727fac95e01c64809f5bf23a24f71209cb200a0d6de18645f371ef9dc93ade1baf0440863ea0341953939345edd0dd46947f34bde7043badf20f3fe4f805e89b292842a67dd598727bcc85e83ef96bcb67f9f3567150eae26c0dd3797a02720eaa72e463a9e6aa5915cef035299d44689a97b512872ffa17a0b3de933ab4cf4fe7c5f9f396b4f2dc30388012e027641440574b8c55b1993a43092c67e94beed0debfc827f6e79805e009ead939ca2cd3e7fb4b90af808471c9857b5f960d9d7127de4679db969a8e4de5daa5c37acb77d4dd49f9d53310876cd56813106dda7b62ebef782cdf47fc51123795d11765914a03e605d157608d366107f7a02e4017534a0b0ff974cb7a753176354c290d03be259bf20ae5de6a80732cc474351a6b53c47efabffbb4e9ff18c9bc6ba4ccc761122a1a135545dc5d776684daf0a226d2ce9f6b695761424781b29fb269c491acb8e511fc3074705b0bcd7c0270209ac63ffac3077cbcddbc01fb1aecfd34b8b482805c29457315f6c4e0189ffecc084b717a7ae669698052bb731723d1422d86c5570eead21a6fcf499ee455e7814ce0450c06f59a2dd001d424af978ed0c20f834778e3701a2a68fe3d7faf0874a99beb1380c1726f109388104d942fa4762f342312b5490a2a10dec0e7af07db8985f4d9376e24fe59daaac0f04120b65be9f083f233e98f0899148c3dc3f4ca896be3a61d8c285ae720321ac212b9a53d98b52721bc1219742fc71a5c8c1f12153b86ba4cc68094af4ee7e259bab13f97715f49100cdf17e586b07ce75195d4d9c3cfc60bf4c775e98d3abf69f506980d43b06e7a745f3a7a17f705ca493950041332ce148088a153f0651e3d158871b72bf79f7939d454775143608044ee90d684e25d51cf578209ddb42b9c1cb174530db307335738f1083d70a410eb0cc4f77a98c1a54ea0ce077930839cbdafb3c3305378a53a90a78e071a8a8534560bd9b5a7e0f9bd5be4e15dc1ffd0302994ec9425988486b7b617b5a8c4fba83736e89d6d6daab458bdbe0e1c888b7467c25ea7124cef4203f7b99a8fe4e85bcd3672f142ea0daca41ac4f6043612fb23865c95797f227fda0b0ec4433ee89f7cf978c7d2dca6da1cde34a157346aa13c7073cbc5a2ed5603cd49605711a44fbaabf8087634d8371d2e5632c77c8152443dab8dff1371c136e44a8ab6d8a316a820b1dec60c769373b0e1e310981bf0c7e2a22da52b231e8b0490d03e1c0e891463e1a8af9d2ff46dda3e374079de6c0c81724c821c351b251423b00a5658752744233548c0c146729e96f2c2e666505842c641085bcdf1c8b2d88f75c6fd52cf27cf975a21d406570eed0747666a0f9b101ae6a42520e3b2fdb6e6cf76647d627d2e5b2deb42f5aec2276d547e0ec76e21dbd06a73bc8f8e03680a14f2ba1180899ea5a47b4d7b02356f052ea5374d29654f09f65aec61dab949773607c458a8cd2cfeeea0996fa4ecc3fed4f8b50917c5e6d36752e1c2fa7b4b0f281f78492303b01acc7f2ebc618a3120c41ec40e018eba44e6f4fb98b34e1245015173c60473c7f332951f8dddc79c5a7653acb360817ae422b11ad17d33822974c8ed75bc805a5349b8c052c6e2313007035f75b565727108f01428642bb72193057e52f8408c9eae942900491e85cd1316155637533c389600cfc2f0975beb2b46b10bad969bc4ef7c3ddad967a31cbe72f08b221981419e894c60804b7ceea4bbd269812a7a5d720ce32c1a6925105d9656e212a55565546d86c359c4f910479f919f18ca70a15f882f0d6b38862835f4ec71f0d9c61dd1dd92c04fcefb883e45013ee1e1b2b804887a23365017e9affa19cf11c58a487e6be0ceb03887779ebbbf4242ad43a8e0677df41b077c0d712fb90e8ba617e3ab30924a0033b4b108936c46fc26edb429820e34b361b0bae89a47d26adb46f3f31892f234fae3268dc389bb5efe9b061795f64f50d7d17928721e504dbcd255e803925114300f15b5b1e8ad446f556b437d32555aa9172d52f9d31a8a71165be704844f4ffb4f4cd884862b800a269e32d9b8ce578cb31b401010f5567d8f8efe35467855e74721ead13b4bc8884acdb8a425c5713ecdd64970564018275d65d29ebeb51a3c117885f462f4fa6a286899e92c12d2ac6443552ed7481384fbba258d04aca8ce6f87c4ef832a1974553e6cc432a6f0819a7e2316ac0c2e43658a2b11130321ff17db0bc85da5bae802986a88a5c0b646be73c6b1bdf6aef6e0f483fac87ec652cda8eb034e107690b6cae89d8c0707dbbf81362a1e35a18e5a56f8e2ecd3bb8a258e8c977611e9522a339839b0c2444616c207bb752304430327fc041eac803d9ddca32077a4ac83d3be7d90cb66244e1ccf8a7eae9f5bc17cf1e7f2613b02485fa4462d219243e4d740d57e768551c3ce93671e8c051a28fd62e83abb12b0a1f9524f00fdc2ede35de0e7e8f35b8fe4b64fcb585150491da95802050ab0f5d479a41cc789707f44bdbb5dbaf75077af0b8fe34406ec6f5c4885fec73850bfe1a0abc8f3af51028141e243dcec8ced93d80daaa215370cee4ac69b3783959c348e338540b98840422c6ec0fc3355809e6e07675ad533bd49ebde72cf17594c75983ac0da85366ecb97439a9988062c5a6fe9b6a74b79196c3e3ccfa02288c1b04e6e6b0e5757945fecc70fdc4ac874347511d1ba356af1d0ff3a1728451730f16bf12780087d66c2882edc11549bac6e253c703237509a906abeaaeff3c60a84754037ffed5a41aad86f2ee673a99a76d1f7229ecedab2cff812afb1b102a98b2d5d9b2acae1ea39d4111732659e9b63caca888798dd8297e7006c42644283d2e48403fa3590a041fd60ffdc1034f7b75b750c0c1c4440894ebabeca7e5b2e7c5f492c2f8672f5de481e1d77de58854e4235feb7799b02851e25ebf3f7e2d1e83cadc696c32fa555f606e7aed0da1db38c6e58fd693beb11dfcd44d51b7d2ce250e250da6c09041a4a556c63714cfd891e8e8519e4651500a6fa8ff2df4afa86407e4a02243972c2bd6f092104e3a2b53d714ae225817850de4e8b8927c7da45b20239ede2d3106a09971f8987f6c048913a55148484ff87dcf5bf5463921c7a8f7ba2fa4a0c120c149888b3607ab873c52de5f27b80b8a00b706228aacbdeddc31180d65ca93210911e9b6a031d89b16755f70f4f148e4097fd791a997ba1661e0d3136d59d49ce2353aa738c18f80d04e9612c63a042f18c40caea6b14c8bd5dd51c93dacd14d286599c7481971513020e7b1d037cec061c34961a89dae8f372527973fbdecc5c740f910e1d575e64fc152a7274831556e062b896e318c8be6b22732953a4557448af42da9fe26cad87a935546d5c87399915f11c75d6975a08f7110342cb5e48b6b84dbb537a09cf9b1d13ce4700863ce777696fbda8b2e4fedd49fe2496f64c1d51caf11042b9913b2883ecfdd5602298b717e3c0a68bbb71b2cd033184f92ec6787236ff36824b76b222c84fbc09d20cdfc579a9e1a7cd885db29675c189e69154a343ea0a370bfca153289ac1596a6f8db49b83d1ceede8af46b33d6dda9e8fe2257341d92b219aeaa5b1525f1f69d04db34306ac7ff1796efbb2f531cdeb8386e6a92077d92e369b4383c6d6b8eeaeb568484baad5137ffcec8b507ff8b0f7adaa3e5a380b212458cfdaae41fe80d5dacf025faf01a4759d11a02bf627c9a9374aac5a1815661882cd39d150cd1aa59fc769ce8aadf5cf2b5c36972eb7e5c53680e34324056d5ff44ebcb4cdf94894b18bf5b242df51c287c803dc7d9dc4c175ce125d5afc6c366deb0d38aa448a03f0fa8a54d169c6b1f158cd5f12dcf64653b28fc12eef5ff12354041aa189ad9e53741432164f4d83cc847e9e2b082463d290304875ec6ea5faea4b0f68f3fe2967457a482ebe3f01c2e418d2aa9b9b60426d2a42f08787956d26d7376ce977d6d6a5057c763d1f43e0d2189044c2dc328bc926880161beeeb4b978b9cf0f3923c641e846848b1e8b82f18c2b82fb7056f30a1d6a5148b91306e367b44799aded81b4167273e9cf76be1b848c3115e9aa3e9fcc3d0ce770f9fcd1d7230a7ca58c9aecd0a3452827ee9da301ae3a6095b578f66e616459b6b09132e62756ba81e96638b2d83f7c8488758ba2bf5493b44d528421939c3bf3a74d4e93ba22858875b64ec0039fc25195b3bd80bb0182fc0ac0ce840f94c2116d02a178b0e0ee9318cb24a1cf15fc8d24a430247ee9c5398c11a79ffe8a564409a225d194c6a463e09313be812b399f49230f5a88bbd43856a27aa0f03f4fb7351496490b9b86ba9ed9c18c86145789b153eb1394a6bb38f049d488c4af67719608f0acb8b709dd416320c021898f88ff53323e024e97cbf07eabbbda56f361e30ab3d7668469f01f318f728b46826c1e708362c85f1399fae56d80e5000b02747b1bbaac00155167399ef9f02d2025d9c8d52a9f843b5f5267cd7c988b0056e3449a3cec7b251f2e9a10137cab62583510291feed27859b5bb85a00f24e4ff57f031c4c27006067319cecf502e06b018c0cc106e06f919ce65280643380ccf60789681d90cca62088e01d80cc367289f81b90cc6610083a139c830c0a9f66e7e4e0f2cae466d4a3859aad054d765e7f3dcffe89dd22e51480a18cebd4cf2c2b4685d9747d659cdcf67a2da9ec892160d8b0a722242beff74261a09c739c33a8d39d207d5ad73a627e03b6e0d8b5d10e172f1293c13ce735b5689e0b8e7e9438989d692681818c0681d29b1b0839c113bfd631cdedc2f4974e3a3520712c7f4cf92e2ca3392388825fcb698e45761dbe5f3c1cfbebc2e3eeee271017fd0a1370bbc35cf67aae4ee12ff830f4e0a759a78318a8848efa8ec0b4f45d084c19a3adda89d7f4351b889b9cb44e930ef456933a0136418b9482b14660e77abd3b20af07dd9d9daf639269c98241f7dbad3ee648ab66bccd9351ff61ef4001ff8ccee911dcfb67cae98305652d17b7844ba61624ff46deda5c0fa4b1c780e800c22bdbb5a23520b06ba3af157265a75e19b83ade6074f1bf0e7f393905b4f54ab76bb18ea55c881e73e01458ed48c5ff3c7336eb81a3d7af9c18d7ca38c067c858040b5494204c22003d4ce0969fc4d229f595fa9579980100ef56ccdc124e463240d473099f5495835a0426779f0724df514a191460194ecec2a246e51126fa1bf411a6a36934ee99c4202048275af2d5cdcea47a732d9c68406dcf7d2d1fc4967645821ee8f75a50c79c649266c981e5b3a7986cd2b915ad2b3d40b3284d4743b54df0085f19e416c9410d6822504ca0b1487d342ca617a22102ed16dfb798d4acc109e8632404513b63cb1d5a29c9125c03d14c174facdf8328b95cc3e0422368191c9ff2f2c9f5fce0beddd110170b0271acab9cbdd56fa9a8a0f8df4c39d17142ba366336a44587e71b12e504437a9b777622f42db8e59ed71ae642c9866c4877d5dc75bdffb3e34f37df57f2303e5d7de9c1a28c0b5c0b874c2de2d6cca696c391717e7db638419e5e628c91fe844c64bd78b952d44f2d95b084584f7c0b8b7442b9832ee9de0951fe493265b5e429e267b47cb89f5696d993a378672a336dfa284e3c9102b67e4e096bc5b343be621181bcfc6d3653a0da6b0f1486f20e1a755810bea31896d30c6f2271dde9344f5a785360596d205e827718c0de792745e903229d49f6f6e47f89bdfaafd451fd16b03633b2a9f919c9375239480e138af59f84795955e9c93f6e285111ecd68255a68f936ca5fd4285c64152c9b28b110571542efaf305b360a4c0081aac496249bf2dc8772c20d859efcb90a8261fd4bdc9900b2aaaa0d0a02f47f5be47a410039ac3e2e8178a54271d8e1a6154d781047d8c3536fe59f99c0cd1f20a3a4c77735e30f8cdab3af0c60acccda47f20f98eaa0f1a4fdd8ad3883d42ae8fa31e4df949e72c627a52ed3466d80f9b94e1921a6692f47f1ae07978cd58b9580942948366f5bbf013a603faf26a2aa164c6c50d44caa74501e3ab408403587eac1073c1a283aa117e224b91250eb1bfd3e63451b13d00564eb490c4439050e6b5ee44b870fac717427f0ea450f9ffe0fcb11faf49f508d2f4250a009208a343557c30ad4b04715b8f6d7b40fd8179b7ec6d04a29c5b7a4623ead05a73a0637b22af3e0ceb498f48f425c6f7aa45b7a0d66d204a98a66a3c411c5a57eef409452405b7a7ed90fb62cf4e06836998cb0124781ccbe031ad69b8761b5db20dd0413b18b7328a1b2a5e2d9ef5abb0fd04c9a511b23cb2d54e3939ada48a5e0a1b0abe9a7bd0bacbe9bfe75e1ddda2e12820b2a9f91634f4de0d577c115da91b852d475acbc92f17968c76ba3a3595e0953d0aa5b095301fb5cbf593aaecfa15d4f9b263264be19731c9c16bfd0085ad3b1b4f5d6d945db0d2711cf7a02d27a855ed67a8e9a7cdcd623467675d645fe2ee52e89293b07f6f6d6834d381b527f9cef564e362a953efa96ed8d9d0a6d6bc86786402d1a9bd6aef90cbdae3cd6c2e83fbd7fa1c8e0a9c70a6bbf041322c1294f31d16b78bd1fc3d2265ae0da3b989e463c0718aa62775420eb6a3a91eebc74ed313e3475538dbfae8b34e7325cd4c670bc72161ce831cd6fadc70a41c725a43dc78de2e6110c816f451e8fba51de2e01533ae7d13ab72b34323adab7c5d47de86a7ba17129c0685c8d91b9cec2a7cbb54b51903eaadeb0674132972ec91a1018325e900a7a10da3922d876414792666eb9a7492e1c2b209f8a07a8ad9824509dd121740a12905bf228f53793915be2481ff0edcda7a099f55d0c0040908dcf39b8ae50016a74ee721f36f7bacd1be6ce805cd121008c0980eeedf14e4bd11721d7bbb9fc4acf4b3061f8ba2af5c5afe3a7c172c7591941b90835e765b89e168ad46ac56130d1bd2abce25e09a102fb934b268c9a20290834fb1913056affeb103105b4988024fe9b192419f28222ab04f41a70fe073186959469180092d4a9564c009a6338f52b84e43ced4d85a837ef65b7539cc508c2ea31f187eeefd9e31bf5782ea37803c9c7242e93253d2d18d3fa769a96db0ca49c45ef90341346b8d94ffe2ee38ed3001781dead803ccd3a6e1c9d9765e22c76cca72485c4cd9fac46662e2d6799df6702b3daf35795978433ea663b2a755417e577fb07acdc830ae05e76d59b7da560828d121cfcee66caa13804a6d82520572d0d833443410025ba6d24f5eb87dfc0b5850708b72f6e5ba8b2049aa67ba1296effc0b00764b2c002f69da201cf22feedfd66683d00010cfa266d859a892f491cfee3b88115f8ca132bd5be1937e595539b6865a8ffbfb8918f4af51661c05d667da2c134d63c79332aa311bc2fa09d19023f2de08237d9c3605b455c18760c957dd9143edf99799cbf65385b1aad22db2c381fb05273d9a8f274699ff63c15327525b1c7f6ac47c14c1e3184967d393722e5d82eb6a2b90415a2e70eef73e43b48107dc82ba3fcf2b0f977cba6cc315bc33b2ce3f8e98a3b72f65b6a6e431433e04cd704e1ebf1593317e427c022534ea9854aaf15e8c2cdb287b646a1771e7cb4d6c25ca5e3a9989108bcef50ff42c8b46b6b584b097fe216dd7970a4f8cce0f9bb78b8b08cc1788e121dc67721bac1b03da0936610d9baacd067d08c87864eeed3d6208e453e45c8597e06ebc6f1f9a37a74b5afc80921ce1b0d51a32190712481ab31279c85ca2167c3b97e0d3320f7567be22ac2e4565da621222b770b3cd97124263466fab895b7a62ad8a96a36cc209df0be416f4ddc5affe95489f2cc9445162e1414a431bb58ff1410fd03e693913e1e4ec4b5a73eb92b94a670b2d3667854654d32782f822fee3864bb1f1d36e0365c42a64e9018a5cd610e8eea63941692575398b81517ef090ffb5e2a73421270705d944562006ed10e047629f9392069e47f01a856875994a48407c3b114c3c57a0f7985e3414268b435aa019effbe516ad6d213cf72eab247943d72234ad9362f92e8c6af7de8602f10cf93d8e18a2e746b53948e026c0979a22d9d476be6f8052c7a753bb619b9b3d30be848e9963007b7156464c8470e881e85ba1fefb7b4a3f21c342a43298cfe81e12aa675b5fbb7992245ffcc1dbf066e69f5bd7fe36ccaf6efc44c7e5c36fd4d887119bb5633c3808c6d25ec2fe942abded5115bfe410e03804cff66ac42d13bfe6ff7369aa4a1f81eff1b3cb59d0008777ae11f86f3d277dabde1568ae5f9d11b15f985c8d2042cc2f95d780cc6da468eb62592082bcc0203c0ef5f912e8019df476854752ded06ebfaced298c546ee9531f7ad1ce95ff33226fc36a31b722da2d8f53f401be22e1131634aa18c21257322d5a48867be0d9f278d8bb1744671cedd43d3af7cc506828459d882b75f28447ab7cf82cd49870cf78ae21b812e051ef4c1a3a9d3b0eb8bd81cde7c3a0505377546ef90f65fe704e2393ae0235853a21b7b42eb45ab416b36e4f26617749a97d10b10515ad91aa61542379d061a9c96fce8dbcff9b7e037c19cf223226cd9c7d0200991fca48e4597029d9500766a913ea1a7de9189caa045e4f84027313c328ee8b081d6859934b2bff1f1d1694f6afc1f0a05d6db910acfc4efde9279e6e29408be8af5b3ca9a1a31fa327ad7df5dd739581aebbbeec10a3afa624535e5cd93b79eec6b2bc12427548cf3dceb39ec63f7c6864e5cf4b188da73c03a303a722896cae090a0c9af810d72516edecc679fe3640138cabf3905e6d49184561afcea60f4727b8e16a728904142f58f3909c3845d5d891c1f3080d908cacf57e1b310d45bbcf7a5184a83260488f2d93262aa9a1a0d0955b00ec194906f192f56185aa3085df2b842e874b78ce3bd460b91493b7785593c2d345c22fee0134dcae90fada905484e659b9ec173e96b4cedeaccbe2fceef4c5d20debb736abae1bc8877e7f82f2f47029ec2cde29dd403a990e042430627d8a45e673e54bf31a6e7bb3f88e8c8f679f332ddfdcdac9090516cf0a3850d5136bd2dd74f72f0bce6fa8fb62c594fcf0a9f2b9bd8dd953bb2b195a9bc27d9dbcc6413527bb4e697985699a47a00a73e4c10c24b7b5dab9fe42a493b26f7f31e5691cf3f8374c0200d941cf20bce54eb1b2bcaeaec38ebbbbc5913e99b4c5a9e00326b14eeeb4bc00581cb16a548989a169e7e139a52b00a9c07f085fca4e4466bb3adf23fa9a9ec355aa2d525462187ff3b250cb8606cdbb324fc2a96dfcc555af09807418aef9461bde2f096cf1caa6ae1197d2d14f8dd8b1d2f193e3e3870c48ecc29b833caef20a635ded76e877a186f2a5b807655b3e383e1d02048e5ac39684864292d906f2818ec323a783de4fb2a553e7121120c52376051670395129d864619523fd3db98bc706995cb821cd345288858590421d50b4071d016f080e00d52fbb0766a0323e71f13bda65a3188c3cb8b099c00cd4909fe0d8581a57e37f680c4a2b4662844b13fa98c0c51ff6d75df8fc37d1d83ad584f45f6eec831a8d7c01a655f24d2ec0655f67d50a90aacb32c17246ea4a38cf9813fbd8eb536a6de91b606fae800d997a2e2f7a4e2795900f1f580ecc3122bb6a0c3e65028ba053af0def9459fa3de413df140141794adb086b77fd0ba3d795739d72f5c0abf485dcefb18a722aaa2fa46c70c2fe0d4b8e75689018776e48462c900e3c33c7164a2cb3125746a8917292f947655a9f9f793221e086b09f99fdbe72d27ec193ad9b3d8908c6aa9fbf3db8179848c912519a6c5fe818821be0e1d94731952b93f5dcea0ce9587ea19521522f8df49ad3a74b656968b30588336679e14dbc3e1985704fe3c4202e8769a12753e62a215efb10ce75348cb4e2bc9ffa2eb988802f5ab8218b2c92211bd58d8fe0d2424a6dcf4e2cd72b36c96a7e75ade7e55c869175db8aae85e4059a7589dd487cc8916c29927cc1acb28ff71086108c03345aa916be4b22317f2df1e2e94a91c95adfc2836a39b2636fb13981ebe38b5f85f73109c09cc3fdf4a0e1f7ed01e7b0772076d9b6bacef6010b3b906831ce85650df2b044dc23f384460bfb338c428e3a0a002210d1ee48dab1028bd393160d1fd0904a80f5917fe66e5f6f803f4c5cb340f7cd500b32d431e683836e5359c215c5550cb2a364a6cff5e501fae4137d265c63ac3a49d133cffd238acc2d33997cfb1491cc57006205bd5711d6c6962ca7efbfd50250ab5208e7668625ae592e482f90b331a23ee8690aeb4a0e84b652b820bcc3290cde2a3a42abad0b5737001485e263c22f84bb1d891e178a880d30b91926167b304a0f0347624e731f46b4f3a40fda79d6d29887f703f69d923d03a193ece1d89330d43cf55f91c9955338d38eaa12b7c31233bc1d56d222e41321ffe84ead4e2e92c1774bf42c74072df7ce494846639d416050a353984289a2bca39407f71b822e332bc182b420ba0746b280351e1d87aa68d2cf727d464cd9463421488463044ef41d6b69b6e9283c8ca1545a23c28dbacae4c1a4dcdec4ba4fb05b044b8d38236f706c98b3157f2fe0d6388b28b0369276014862161ae844994bb4b226c587c136acf0de518964d0ce23f69ba927d42d47ce3bd0d2ce118a2e5c64d587cdbf8f4cd1f969c07baef2ccc1ab815bdcdcae2e25a711742fe504201b4e25598816d0bea9fd9697e7380c83c46db44cdd3d60a64aa8a63025109753e771c25cd95695bf0093708732d6ce261757a89c73b93e732c9514ad3de5794ec9833c267d821803963422bd77fe112f6d48cd5eb80424c8422cd34c088ee20d0068b8ca933e5165ad7e248c74276c399eb2fa45508287834c344c15c5ab03fd86a17118349f4406cd7f2e0c27773a84364f8eaf12bf6a0a0c87f86681a283559426eeaf7f0bf8d88a10a5576ebbdce01e092eb9e20ce659c083111726ad937c640b6cf541b8d7bde7e27e3f6317f1cb7415bb1ed201f23abe936ca839c2a793e4cfb2af645ca8763bf85420018bb461849a7d20dff2fcbd0b0cf1e3b667a0893c2ba479c036b3b63c696e228a652a3dfdd837c78ccba605d5ab1a4af842b1dcf6b7fa028bf4d2d0ef12e29739093a97342c1ac0752b3f13d3aca5ddb2103d9f888700e6dd7f82d923bf0877d10cf07e1770358a11d844cfd00d65309bb34c7f9f6e05a198217b4e3d01232b75b7e30fec5b706afcbb29ca94eea57e5a0614f4aba658d7eb37916b90ef3482acbb834e29be525e8ab600cc69e86c197fdffcd6f466d9517feb1270d9e3d9c55a4f263b9ca276494a4c5e8169a2be67187ae65a8b81cda62a32f25cffabf7350e6be728c610794e7c571964470e45bf11ccf6873294c964b1a06ca55769b9e9ae72d077411f4f61a0f8cc8241152fb8b38187128492336062a4431dce1c5453d1c3a346395e30c8c541c6039de5e7f1522c98f35aaa9eed875560e628c97caf166fa1f36e0919a1975f8bc17e2ca2cf6f6eaf23cec65d90a729ffb9e6c565cdce39886a0553818c59262a8a98f93bc291964b75ef5a150480323c8e6cd5f670345807ed5670b873e8649754273ac33f5845b3c5b9b5a304d5f616bc50510afbe4fd78092c406cbb931a14069e98869f62e38461386e70eca19c0b791e369e1712105c0e2976f5631bf942d1bd89be2c7842a37454f15584e73d0cab16ab9288833bf07bef98a39bc9f22c27eaa883052c7cfa6e12be36287c3b2bce33f591641ec159043345f5f560721408eb83ad45c96579ba83989c9c4bed45c0e3e10d6502615b1aee0ee6462512fb091a570007f06db2140d2e5aa905400e1438a5aff99854bd75e3933129fcf034131667b67da776ba58e7aca0df06392a55ab66f8c8c28579fc98c739e6bc9d02b93e96da7393e6e71805694a71f08bd22caa0c77548d698ac144bb3da668d342329e3111d9a84f9421a76c7e1d1ba42991b9f1ea61e965fd2937d4ea46a97ca2b0fc8edfb3d835b9e7904747fd8302c6dc310c5b353f09f9554e474a9bce6e059c254303ec5e8d41343cce5dab3cf010499109698c334564809d90de7200d9f4a44b35dd98b2348602fdca44d05e9b8948dea19e23baf0971b242090cb08190f611c85dca5c4b30655a263ffef259136a3cf707064d0d0225b8f9f08cc14c3278de1a23c4c9611a048a781cd8ecc654ce62b122c957c92f38c27c085b2c096b3071e9d3e7f7c68cf1f245eb09303d19e2c6564a169a99e9c9757bb2ae8090849f4cf073f4f17c843bc65ed2acc902a572b4025a8e92eaea83ff9a241f3efe677907385b8825745aeb1cc3a2e51315597a0c50395cf5f6e656e713456fed47eee2fe71a877b326299421264abc263f160162c31625ba00118546c21af1d606b73424441c61ab1ee7d2b0ac8e0547eb5e13aa8a85a18e396d6cdc368c7914a4f896c2541d76037e39ca0d1eabf496e5f85cff008f8bafa26685bac4e214b425536f8c5b4b3107a12c0a7ccc06017d0e4c914822a8153435f53b3439e3420add1b0a110e13a27d16545469190275dde8a920b78582dd5d439a34f9409d8752724f9a4a65d2aef53228d2d3221e65ae0f0c5e750030ecaea99ee1c2c131b848dae1013753bd317183b747f2d0e685cb17371bb7ab9c4d52b04a08a6140771d2dfb82ce348e2837bfce2bee2e3cba3374b892157c0e0394c6a0363ab10103557415eff88738cd0a64b8f9226d0420d450df05be4bc5b01b3a7d67d3dd3f0505b7c94a825510f1ebc48c51b3016e5b8ea77f172a887c09f1a32764653751e830b729a3e0d6ed3512a024cfcdb07a25f49653ea7056edbd421443e46d7b9dad8b0d3f5eb3c39752533802874cba1556e643efe6034528de9a0720c79dcd1a9760524dcd364e5b7b5f5d49eb1cb548015d4ce7d7f7747db9f43ce86ae8ead8244a7dba1f0f70142d01b8d6dcf67f7ffc91dc9bed1d143621dc0c29514aab1091d40eb2d191298654928c3dc3c7e45f2d2298a56e4ff5189a6996e7b2ac29182e8a1dcbd50980d6c5103d744dd7b0945917a53e8a00ef32f0c933b833d8bf15c20927dac930eca1cc33249ce32aea247efe025838523e7e6869035bd85ec60f5405c997d72647474d571486418097d45aeedb56c5f5086d939ed1fe63f69cc25b0a64a85c51a15aa7ff3d8d7c1b85231dfe6fe4a342e729f8afcc8e01a4e8e16c664fb3101ce7ce7791ab6a110afc24f2694cee743f28582dac8ce2e7161c8fcb48a00106d860d010068382282086f7fc31626bc39fcaff26052a5eb8cd525c87677d9823d403b10c9b771cb0bad6753971521bd4938963ad16902120861b453d79abad2105587fad5b177f8d6367561338050b15736988f6dabc39b9f153cbfb181627937122138b1bc8986758fba6d1518c8a34662d424f7d3d7d7be7198f419098f4a110af1e68a1edbe7c4b95f14b035e7ee5313da7ac1fe0202e71eb56e96e648f78e6af2436e2897c0cd3d8c8b588dcac2321143078d8bf2943500892e2aeedc8b45ac9e980771293e42d338ec2d82ff6c714d4ae6c8c8a7baf5def2676c480b0237c0585ea2908bb8bf8246721f5e07a84158ee742f6a1904b3fb72210859a7389648e01e29707eb9525ebf6e274a62b8f7e897e758dbe8826282451a0899739e73cca8d14547f0f4aae942f0ff8cb3353b0df195f2c2fe3bfbf83b11a048c7d933ba5a73ea6fecc558feafd84b9e42e9efdfedc5fd9cf189b15faab7da3878708894de06ef5f69c60265da3c23c504f91fefd22402cf886fd3bc515727d42f75c1f66c4a99a239ff6c2eff3266096bbfb20803fedb408e9b01ba52a4289a11b7cce97364cf9a12e6f5b7e1cea08884752bc57dd492681c5903581aef716c09a3d8202bdcc13913587f80bbf20dd1b29c6157f71406fe7ecf8f68179fbd20fe9aed93403a0d30d44cf5c5c52f12c5baae6956dd40e28fc73b243308978f12e3e74f2f2b37026ef935a7fbe0b0b5a86aabd72a2091d703d78b38032839eff46b360c6cf11b4f679316ed33efe38f17a68e3eae971759e0c3755e77c39c6edb36193c2a9feadc96a926bf2dd5d2ae5ece91f4f9ab3c0c667af98e2d420d00ff9f4556e779750765d1b9131c33318838c40a23ab10707a54d745993d046a850af006a358c5ed0b722afb360c0dd2c4a99674f655847c3a5e5abe6a6d3abeeac99ba98dde30233de2a616e4e435172fa739f5d92f4586a391aed9877cfd297087e6e18a9a3bfb049e640e35013363e954611d529038c3bb39c618c6d641dc5c4a32d90b439e6aa1d82a1383c7867414bc3b787103b44bc17acc3dd61f6a625344fce065cabf227670f52b4ea829f1d53adaf117e43271d74c88efb348ef0cae7f75051cb7f175cb64188a871567a9874f14151748d95a2f0c8b9030c54b96bed4bd65efa4a3a6a7efabbae73c013f78f5ed9d7c8fd71ded2d45a37871644cd383ce18e03dd557db85b12994166c0bc01b1e863e1fbf60018f6713fc02e0a1a297dc31e7b6f9b2bede91ab76f3ab4b5030097b7c7730c9d2d4922b556d98793eeb72e40e02d23324679ea7c29074a14c58db605a2819cdb548d12ceec1e3d973a78a9b5a390dbcaa1843b5002345e73b4cc1ac46798aa0b849e7a0bdf760d5337125bc75dd136d987599a641cb0c37e50ca1ee0efa4851495b51723b40b9ca5a003ca308ea119ccd11fe8fe0841124fcaf374cd6c167678884894f30bd751896d695cbc4957684463d63a1a9c13d47b88ddc68903286df073ba8ac208a999f5f633063c5f40397bd4b6e7fe9ad11d0e880e9830f6af446376ee36ce4a6956b7eb4f403124fd059f66d4a6cb3a8b77bc3d923c894db9696582d6e094049a604d75a91be61c5499cd2cab33be5b1c9bd99a5eb7e346bba1a2b7326991987f0bdc8baac318fafbe85e2bae40821ab3b9d60ed0c4a5c1f257312b5ba1fef9e82cd2220fbc55db03c9dbefff84c2ddc60273418f911adb14bcc7e39c28362e13c3ee4e7bd172eb13ac0685074d9ba4ce4e53fb3acbd0d10d858943b3edc44cb498a4e9494e48b911cd6afb8db496bf127b223abb4d7a80f89808c4061e3e8bb0b61b18daec168ead001ec98faa1808c5168042729ea91eea36e2cac9173bc5c07b19c003c60a58a2ecd3195218153d46a21b7b0db7970422c5192b8a749ea8169b1dd0eb4ed112ec60a2a663ea72260d03051e8c210cfdc44c6c00610e04a5a519557a98a38274e3f49de4b9371b51686617cab338848ba9b12c0192c56a8dd6a34ff934889398508b5322e7391a89e601590e787c36a8d236728b0bce163e4681aac58c3851e297190599c7dc76e7ed458040cbb049a9703b15620dc19a5038578d8c21c77ae909ea1d2d260b7da49e4f8d7bc7bda355d9fbd84af2803777d842e9a7920178025464a4101045dbf2e827fa06f0bf7fbd39757da87920a368ccdd82c21841049c8de726fb9a59432c914c10ad50a260b25e816544f6dd75fce75d6ddfeae0bb0639cf30caaf7aaeb932648746183293f5560f09335f77bd0626666b6e64c229b709b3ca77cd7657174b466305e299e2df18a2c59a34e710a9356aa24522d8d4c222d2342754e5b3027c6e5e2d232676ec498b2542a170903f3326346842f62e1c4a862386b7156f98af1bac8485359bce269365257ac6636e310ea9c5108d5f9b462ce8e565c99cdcc1459d4ae0c3e2366a6c84642f31991cd67c414254c138d2aa964ca6215d7746240b9aab81ee9948433c52054e7910a6d04eb746288711291b29fe7539d7311b6f296572dc7f2763e9166ad9345cb9137c61863b4ac9dc8a7892acd182347cbbaeedc64895354e7f3d1a09f1113680a96b93a6518eaaa502c1707857362462850f532d864ecb8b7ac2bd187ea7cb3cf3530aec1f25761be259b4d63a572e876d7ed76e4e0fec5eb4e869d3106b064b4254b4dc6315fe406f098568c31c618637c31c6f898638c313ebefcb2a2c5bded5816cce11b63b4e2b5a4b45cba931d235b1ead18639c71da18ad68c56839316413f8846a71296e52215bd677bc0f3e98bd6839dcd072277db39c99a74ba9b41c8e3070c69cdfecc4d852578c31d6d2c9d58fdb9c995d8130507e0e2184104238bb5f8c2c9b8672e6b41c793723ee208492dff3f8a285bd62667efc98fbd94dc2eba77468a5bccf4d937d7ceebdf76e7cd11f3f8430fdde740d193e99b18d5884afff0452248ad76814b15a236d12c351bcd12b4a825909cacad2926a970c86d4b2468d9756590b73ef0c00d0b021036005c04e0003c8e2cc6a76572eb54911086db291d2feb9bb40a8ce3129aa6af4cf9d6429911aa3d945332dc3e0cba0f69cef96f5c9c4962563eddd4dc9122ff46c1127f4d1515a4e74e8104668df4bbbcd52353d51034bca7442b1b4a45c4e59f44175ee461457cb09dea0baa89871bc85a2a258665a6213d5f94b8bc6e3ca61d3ab7e45a89dd57acaea29aba78cefdbd8ca4f9e42b58a101b2933cc8f1f3357769e93e774f6927f91e9b445cb617f4ef5c3413b5b4a2f3b5105638a9b66002f001b1900de25a3aa8c35bedb90f762139fa8ceb799e7ec07d5f94bd62a0c9b716f708071f08d3e607b6f06806dc73d3b519d5bc6c17e6d64015065f16143786d7cbf5309b19cfe838ed2681a0e06aa7ea8e4c37fd17aee32e6a6f12dfa8becd64b7e4f6964a9e7e8db73a9fa017b7ae2c367ed87ebe9f918df163f3afcf89a7be576d8676839fc9a46d7c06ce6b1093e9d6ab8bd441bcfb39b1746334d3422b5a4eabfbbedfc63a00750a14a7f8e31be76d8ab9691e1c3fb1a07344217dd451761a09477f3e8ac45802d0ba594525e9952caebbdf7de7befbd27af1c9d79bc2b69c56bdef4aa62eeb41cea37b01ae28df6e7379a26de69c51f2264a10c6ca58b9f3835a7695777776b976ba8fd78a9a16372668e199e1b2de5e3c5b4fbb4b3af6e1f4eca9de955d770735dde573be796bc397ad53333f0daf8c1bea09334a29b4813ddcd5ff4de1bf26f1b6283c8b34b64a7a892ea4844af3b2d7f76597722b9e9a59c6453feac7b93934aeec2827216929b32bf3c13f9b39a7391c851a4ea978bec364402d1fc5d958f7cfae55424a2bea55ea41add2cf3217f7976f3441af537fdb9e6acfd38e2afc3cb8b80e7a74824ba996b22671fee4b2e72cd6912709904dc9732af974651b31ba4e4a2ab53727a7550be13b3bb13bf8472762e429d5cc4e22e17f68ae5fac9590b42f2774d244d2391441949e49ae96e28a0327b24ed8ab2bb9d7ce73d29752239c935edf4bcc7e0cb45d672fa2a6bd9654dd39c66a967b6c53b63d64a9574abe6a3d6bcc56a1a5f73b24fd12572d644cee774116b23cf34ed6e355ef3e7f5ddad060d1a3366c0c0a8542f2f2e2ea9544b0b0b0b0a753a994ca5128954eb682412695a96518a61d76bd7bfd2ad4eb2cc38eadde66b9bf59ab3c47f6e62b99b7ccd4f8eb2cc384e779326120e528d34d535e7ccd99fd7bb51e79df822cfec36e4a98fac0eee2fbfae8e0888fb21724de317892ce6739b2e029ed7fca2227f56e4341e9ab55157f2d3b79bdfd8e9dd893f7de38de7a79bd6f29b67599e26439e71dae70f06ea3932e47720100794514619ef50ef50cfa58a76d8ddddddddddddddddedf03a79fe6ade9defc4f00a2ca420050b290865d706bfdf7b37cde31ccd73ce39e7fd9c73aedb75cb868f88da5ee183336f09ae2e0b3565a3693687a957f36adf0dde59b3786b36bd69babad72da05108f055d9c2bb1781aa737ede4c1807f4ed3984d2c9a1789d908361442add64be2840d0a09b74430b5a16aca15876d15897e9e557430d36f22a3ab417af22c7449f2f1f7dd36ae0558cabe80de3354713aba597676f4e59333a764f04af631cfd117684d08944ccf3664f2c50b6b1614c5ff3ccc8a606215cc33559c979a84e1df19d484154139168381db352f803f491f3c21ce3b89cb59c2979e4855dd82bed4527d66d1d331ec2f8e51dd88ee9247367a1109885463899f60777901aec693a82cc3e8e816e693f26bb1631ce43414bcbeaccbed7fea4199c4cbba5bd2b38b8124fd3a53f8703ae89434faa441185ac8857b478d9738467b9826ffea9c2b3b3115292cab4f469670ffb7741264a604e5f36edfcccbe2a6fc87af823e547a15773f9c8c8ac56eea954149a570bf87ae2dac1f795c43583ef0b8b1f2904f462dae71427d353985c41abd7eeae20213309cb029a22658a25b369e367f6094dcdc90bbaae0bd37224c7344b2870cd85baa89756782c60117f053d2a6ec705e4645ecd6472fd50e9bf7c986839b3c90db0d0783c1b44bef80a7a352e40d725f40d44334a45d1dd475476c30ff0c134979b6c543a4ea66b698f61da730a7f5a01f06708f2084c8978a996f33cd37af4ff3ca0ec4179503abb6684bca2ce34c9c715854ce4114b34c9b476fca028fac5d292692593b3d7586e2a699904a363a4d0cfbb3f98e85b5c68a4651b7be82510fc7387396d2cca17a7dff46377a6c0e855bbfb22e537f883d548303aa61d139243121b92424d84c0b87cb39c98474424849a060363e8d272300cd3805c4128c105063dde07055b79d8abe784132e35dac9d933e7d39da6399d8036f2a0b5b7c412f03d27efe7fdbc77f6fdf07c7c9eb36fc9eb793d3f3c704289ef23be655b71d255ba8af502c332458a14a1a0a0308686b200026a28da8976a2ab68280da579d04bf412d894513583ba981b33396cb8c6d241820ff5d3459093694ab2f2e5108c3ff8f830d19cf48f12dda449846f39e16478740dea12a9750f7c9613d372e2fdb46e8c5e59711d8570645c7157486e0bbdaad23edd93eaa85e288c2309468257ab768a615a10f82327ccc4c9f404c2b7939af8766a04e368671ac80b5611a5293b6939cf4f5a8fae56fe74cc4e5ecdd55ccd0b9bf3c24e27ed39ca94551b9f6762402894f69c053aa12017c4c2f572949683394aebd159b5ef814c23924f283f83cbce239480d20a68cfec5c0225a313bebda554faccba1fcdc789f32959b7846be29aa4604a7beea2f568c9aa758fd12b93d74916e47644a12024cfca1b79312ea8ce8fe89590db31e70ca2d0b7bbc0978ea719354c3ba4b34bde11a1a3d2c607ff412d07de7844751ea1844964a04bed475b5a0e8c3398b169942e1d987c70d238979f4aa552aaf8307ec1c0c0c09733dec36839ee82d1722e98092113181a3ffd52d6d07ec02c1a519db37b38998996332fd478f4cb0b7f8a702b45d1657ca9913179e7f2e7c5b4b3df601a92b3cf708d653372f68b755cce8ef10e9ac31157c6578c66b2cb9f77b74a47d6a588d58854493d71ee6c07341efda43b243219f2ee89ab258f7955409e4f47c14b25b30b6f6d3ce7dd48b0b56b2750b6b1d5a12c3efa83f22d35fa44cd9eb51082887f6e59213f0a218513ff28cca4469f10e2c93f8d99a5f5883be0008a28cfbc7ab28548e29fd3eccab22cb35e062326da50f0f14e8d47bf948f0af49db45089d8c2f3164d6ca1e6398a0c849eb51c1d758b26a8fc3653737605826a393694ddc22e6a477f0b80fe5e01d893381ef778286d763c5841c585c39a0518875e145cce38373da9bd70acc05a18e0d55c1307398ce5b00a2a3fe3b43bc7a1349b59b680f90a803d512f6f7733737ed924d0956038974f209102acdde032e50a4f1431e50a4f1481736941b0c72ebc9b90bf79f1b29b9017b3cb3e699f56d5ced3d3d3d3c3383c580b1e0678e9d082f2b9f37721943ba0ec2baec9a2716efcb31850759a7f519e8ce170dc15187356617c3e9f16f567ebd3a790a5b431259fec559c7f8a714a8c3363009a37d8e02308428824c912502c191282aff430690287344d0798e68befdb011e42c4f2cd00df4e004793835bb9f6d9ee299895db41890c911dc82c121c705082b9e8cf097939932a32e3b40bb4fbe99510bd72feaeeb7931910563f8211d2022635fc0e1e0e3d5bc6be3bcbeabeebdea0ae4e414c3b20101b5db1d02d8411ba4a091bc435e86eece0bdfc95c70ce8b794e25cf6e593ea796f3aeb4fcd03ea714890dd306e68de7595a0f4e41fba9d3d2c8350d9ba7dfe6f7b45d72d3b5a15aeee6300d08f6a34beb51fde4f064cd39bdc9a034239148a492675647c42c245296bd9058523e22792973918ba7eed62ff26ce3295ff297bb9544259288e494d6ac6ffd91d65e1a69a5fba38d85485687e44abeedf67ee423edc77b51e98eece64c3ee3768cdc7439a824ba3a23128b8f4a26df44de9a57d3dde93779dfaddef64d745d4c572773929b36f89a93dce4e22d2af928f3ce9c548ac0c8fb6e3f46de4146dece336e477be9925ae59ac9aba6f528795f9d76926725bbb91f5d04381993eabea8542f14e518cad2724c34cbb22ccb3ad3dcc5b678cac4aff94d97bcabe5af23df46a37a75485ef25175aa6528d760fbd60ee53dba9b6b27398bdb9145a0e4a23bb25bbd5b8e37b9e608703bdab551c9ab6ff04d3bee472567f12dc79b581c65b957d5d27a8c5ca774eb68d45e4d6ef2a8e5984851bec8f29348242791e08bac7b9467f3670eb723734dd3348812b1ecf4a34e17f62a13b9664ba5ab0262f292f730dd6c64b7fe51c9b2931939ed8c44b23cdf76c7bdc84776cbf1a249e33197a1d0b16bdd6d429f2e0e95856ce76c6aa0ed339c9d9d72928bcdb02a670d9b713b48dea48b1484fe75d9bedc0692dd78da59956376cef01995ca6d689a19aef2d67254d7552643656760986bd7309687c82f6feb52c32e79725d7632945e196b35d810a9f127a7b367741c82603ca1a6e2dedd996b43af1ac653aeb9db60dcdda8f1708f899ce4ec76a07c7b7117e7178bbb1df72d7e390d47d91c344896465145774ba154ee626914f5e5eeb827e578cd5ddc693d742e874fba3aa2bbb96f7112bd2adf60aecab71df7227769b93a2227b9e6ad01215d0438198de5eef4d36871d1d5b9ae8b0027d39ab75c043899e9cece18b9d816d77ab478bbc83a814e7b09bb04742ba045f31aee32c35d2c75cdf669c68ceb2a4f794a59d35c6437242ffa3191542773b9b322d77c5e7e5d0eed13ecb13b9dcc4545967f3acfcf205d6dc846163eb5b2936d191787915a0e6a86bbd8194eb2ee8534cd0c7f0ee32e2ffea2f2140d178771de169bee68b87893fc726749ac01c1bcaf4ae4ed4e2572cd2fd1fda1dddba279a92d46f26ef1b6980b22f26d3ea66ab93f44979d8c9371cc39c96e9a53958b54ee2ee6d5498ea4ba9c746914f5ba4154eeae8eca45578786bb9df7eeeebc575dd8ab17c76800992ff7e42e05e327efbbc1d84dc9bb3877165a59e6e28db95ceebc61ee868277f193968372924b04dc85984bcf70717171214de3725ff7dd761ec90a79439584390ae52d7643f22dfeba66490d57395559176727a3f1d05c74dd15b9787532ce45b6c535cbe2352c6c053887f6898babec3683b8dce964dcdd28ca31d4dd78feb53490e976b4885cd3dcc93c1747b9cece7b946f3bef3191853b29a7ed010cf376b95bb75891dd8cbcc83567b703c6676877db7133ee66e43527a3badbdca1721a3368dc0dc96bee5c65d9c92479ed6e22a7ae7218cbbd52dd16a77ef35a6ceac51eb150de1a0ff7a8ebb2f3befdb5638e39e637fd8387c53117014f10e79a5f7643f2973bcb4ee6726d7398b7a036919bbcc56e4a1e33f21b75d1dd798f393b996de73d8b53160cb328bf79283bfd64e19bec466443f214be55adabddf70892df993f503f9d8eac0d9973cd0a691ae7226a7deaf55e7763ce327de5681a87f5f558f699755f9f53ea6cf3eaf299cb046f5d0e253fd3abb7923e13a38c2f100043a02c53b1cbe5754d0aa37374f8e8a30fa3778b4e9d468ad1481d5ff7e6be20213ea6901b2e10a13f085310f650e188099f40d9464707fc7300ebd878a2b3eec538a6bc363358d41703efca6b3b4f74cd03e567683d0b7bca15626fddc9387a0af1d12b9632a362381f876be8721fd7b5630587f73e2c1f3608b940d34cb7fcd51c3672a6576f4a8d77d52b8f4b3c00881ae915e42a469a863a74b7b19ae9156b1748c2cd43d2343e4d93392442a48891244dd37373c338608eb6e91a7a057550b3df18e886753cff0003ddb00e1c2ed0439a2612d141d59c9d4ce6cf6e4ade72fa4ecfda9bc1523635a55ed008153a8b8a18a1654108a184f13d08dfb4e2f39bcf078178428fc3d3416df994cb6fa9ac5729d681bdea2e1223356c73ba3432a7738ec4216177b9b34676a03f37c20f6bf674505346e61562591b1fbd7a6ea44a15e888447871707748af7ca81b0be130c465a16e6cc5c8db699a244db3f1947ffe70804d73c43d08388c6f7fabf796fc36938241daa16f1cc6a957cf573005ddd4224a10849ea30441ca1be0394a10983c1d3dc7e6ac9587fbabcee9afe68663a0335090f7cf91344d3fe370df390fce79bb2e813f0cf47cc35c3cbc372f063a8c57925c32c730b35b17e8befd8d47e41eba658de4e0eeaae43de29e9d819628719d44875e84882dd2358c037da769a03b24f3e77ccdaedf8f839307fa74c0ee86fd68309de79cd36337c717638cefaedc675ccfaba93df4c36f294e03d0157c7e9bbcc50fb6f0edb3af14a13253bd5773ae4e4d235df698b63527ccabf7264472dd8e5202a9111f4c2a75f5a3027da91b9b8d0de66df06af26ac3819df8380ec49c6d48a745a0c65b491cec98e64ee2070a3a38d1543f9baa274fcd6bdd38a4a194efa97e407fae437c22bc67f965f9f5c3521f544b5a2f5ac6d9e97f472019dde48b2880b01c73cda5ab2cd7a8b868a64d7a4d0b9b3dafcbb2ac39e7b42ccb92349ebdf8d86e0b3ef0810f7c0004105404e0dd0fbef8a29b7cf1c50f3f50685f50aea75e718a6fd0cd7d57371d0975731dcc2fb79c477f4c9932757a759a1fa6439d9f624f6feb5cee9cd8e818e734a8aee3dd520cef12b6d2055ca2b2b78b5b54f667c13438514da7aae93da89bcd47769195b6be180d704dff6c8c8521ace382efd5d8f4dda6cdc7cb3ae3b01c133dce44f9187d636dde09340ebdf3c5fcf40feb7042b00e264d73049439e7755dd79cd3b2362f26da30806b9861c33a66f0113eb2160ff40c0019af50b6b1bda187a71a5cee35c6daa95750fa0dcf2da7c095bfe92ea26eceb28e76e898f039f4e7d0dfd695c15d778571bca03ea117d42ba7016908f9a1c72d861e0b287b0faa0eaae6a28b8177c6bb0d05db05c17b30a44f58c731ecd77433a06ce3f9506b73073cdfee7e0362fa18e4fd7ba2435befbd1945d6d5a13fca23efe385f2c123acb00d5d937a31bdd550b37a310f681a91b3fb80ae89bc73d69a4ab913eeeea0ee68399adf340f6a138c43d6ebdcd3f988074e8c48dedef45d9c5e0ee9655d90e9ce39e7bdc2ac0bf57a5da93972b1fcd4475e9d3a17c6c82d2d87e42f0ec3a2f217ab726addbb2a4da3f27ea9e1355a9cc60cf7192fd23197d29dbdaa4be9fee2cec53197d6c5a7a512c8e5eeaaa23b97aae8d4319faa787f1879cce5dd8c4c375d29772e99b397cb20d4a7cbaa72b93fe8bca4a7462d2d2efdf292bb48695d5c2e8da2627707965a5c5e9d16770937eceec06fb9b05735fc721f796b40aacbcbbdaa713794cbbbd198817a71f7e254ba9717f722ddbd380ad372589cbe48877a71aa1747bdd89717e72eca51d60d51572507161f8359585e7ccb3ee53095729abaeec6f397a41efdb22dceda8f946f93c84bd75e49161f61578785e56e3cef5803525930969ac3cbe5f2e5a69c48ea9a5cda6d07460c9bd5e76c71cc61467e60573a97949fdce5871cf2dbc8537707fe74f82d3e6269b92c5e1d65e19fec26e4476eb29b911f411cab1e31f2d2651965fc40b9a01dd4ea542213b5d69776be1b0a6a9a1195bbcd5943e4c574cee8baca40524abb031f8aaee1224cd4cd014d699acd35f1ed593829ae09d601b957966bb695b0aa5c0e7d664edb331d54298bcc896555b2cb9fea07e6d2b19be900e13fa01dd4cdc525a6633edd49bd30ebc2b86c74295d95247fcda11cd4cbc3b88ad4c780b82967deb2453aa6b368292f11aeb548af8c3cc764b5724f7525e2da854617e2b3f1d5e9b06b2c9f772b92350e2cef17fd4519331064d3bd208aa408e005134c2892ea1f5ecdb9ba81430772b44f16335282c0f8e753fa34cd0f4d63e37370ab9eeee925fd63c5174f2c67ce9e7074f606d773a3c710c4988b04ffdcd11be0751d2b209e00be655513c89c3a0ed9c5815f0c133a3b559e078707e72eb9bc2ea11ee30eea11bef23b38cc07e0c1f398b51a4a0d48025e3e895a92e71eba75d9273ab48cef3da889e6d5a1a3c3a8c57bec03f88d6f915e7d11234e2ee7e12f78f479e15dd2030e1ce83e269cf6224d73faf617ea83ba15f922bd3abd4fdd780b492e4fbd18311c01042480e0c4504f0f4eea1927da1eb8032092d8e10656e02ce901074e741f13cee54b7a681ccc7d1a80131d5a9f06e024797243f424380825797203e6f026f171933cb9017abc495652a26f2cc4635801174eb8e00426a6d0c58a67882956d4a0065708fd200c3836ded383138b34cd00befd8a1ba83ad25dcf6fd26513989ba09ace4b7c264ef4cba1f599384a6ee81e9ce897edc10607ea00df72d50fd7e4adfbeea64435af10e8fc37549c385d35fa9a9f895a0efbcd93aec7ba9e8f7ea4369c4708824217b369ae7857e8b0773f8efdfab9d19c90379b871c9d03fab5472714c70675aa248369c7c9ecc531979342f0d69c8ce3e26bc65c73be7561afa893b7bad8410f7b260216a09c9e817ae021628e39aba042ecde8026411d93d0310c62f2ea481781bc23a8f1d02115ef724adb9277c6ee3250b6f17ad84526e85b80aadd88cc33e7a8691b28c30a6b1ae0b1726fa07996d92434cf9cf91560e328455cf99df7b3a14882670a53c2c08316a4347940e696434d03ccfc80cca3f87975a68b60de11d478cb2da7e239f5a112810fe89643804580640435deba3a53c62555ba90e76d39f5229806c47aea4eeb7185278a98120413825d31fabcd8b5d8ad18afd93493e565b94fd23c56c722e09222fa39ca18cc703d4709c207d5831e8850aa0203f120861ebc78eddab9d7b1613f8789361e2bbe5dbf2a8658e2e134c3df32e64787f8397d37e0dbe9103ea7a671ef769e1064c8c089173d479101124fdd6b7ea277bd4069777777ebb467cfb754eabe9b1d82601cfc5befb0eecd0e3f2cc3eebd03d2af539d4b87952390bd76376cb00689a8cf370fa2ce534b34d013825b88415c914b2c21260f2e208c8ab33aea96fa2acc966631b8e212f01da3fdc000110f6af81eeda852744411228cef54afb6b98076fa02c8409049d906c3518280c1a7605e60176ab70d5bf8008a0fd1a1c68b80a7a3507eb6b1557fdb7bef5dea1ef4428341f929d003b61411c647cba34a05dd72fe485f6814559573bd7a3d8fd0ba1ffae7b20756feb9d5f3cfe3cf5b8ef9730744e5284d34f9527b11548a50e2e7ec3927841a17513792971ca94925eca5b7c5fcba32979853272cfe58a43fece649ea322d27c7ba3a985b3d341f37d8730cd37e606e39a5da8fe7d14b36f6734bb38167081d23e95e1a051c0833e80113aa60c5164d702eedc77c1dcb9fc3cb7958fe2ce96e3a7c7e59eaac5daed9c03384e91088f427b76b7b51e7f9843f309ff764a3108fb90a4874cce3ddaa4fc78a58f222273109e3454cc678cca30e8a715c57297ab6451ed1497e693c625401a91ebd7abcaa163fb9c8696b96c68367d299595a4e8b472b72cdea40661cd2ad68a5dd787e9b3ad1b520228f57d57279f0fcc8553f4e5efde455880a1c8e0ff301b2bb4da7cee22c1665b21bcf9748560544542ff76a64b1ab23ba1dfdf269553f609247c1b3f6a3f62879c8f350e3c159448cfa8efc1c8e38e033ebf251868223351e0ee12906afe6e3e6996f6cd12d8d87cc816ed919ed4532a8d77394274d80506f148613d442659b672275c7b316438cf15b654ff1f7f4f4ccdc60a01750ca959d911d685d57a9f04118e5bd793042eb5956a344cc38da06d4b18e1ee39fc3827324c6e1ea48a46514bbc6f869c92c7c84afdde8094a5dea5dbb1ea57fb069a470196a2c036c1a691111f4d22111457868652e8b87ee8810c24376da7c38f1ce1703c6cf7741f9fa72d7c58e36f3bb196c9af95278cf8241d04f4b46c88ea75cc1842e90c045377c47787c458ca417c5c1672d982c6122aebc9b004f69e2451194604209477081c31c03998822082a0f351e900925ec90c533afdc7b8fa50302ede641bf7e700536383dd8e03c71deee3abe016b78f1ddd03d3851fa13bc76cfbbdb4ec66101a58ad9ae631311be76edae380211bebb598a369e2a9edbdb882cb8f0c20b8ef21172f1afdd12bedd8d01ce340d5cd9d4008120f4d0e667e6439975d0c72e195d1060132007027a06b602da25c0391fc0994aa47a3ab1889ec7b997040a2f8464e87966419d4c25521d89b44cca532cca5fd392110a7d73b105d6f37c4dab8b97f051e12f9cdb317b9ebd237c5e3467f10c33763bbaa707021ec21c0f394607455b04fe318e1e4ce5693d1809b287ca43e7626428da78a86024bcbce2a3160fa7fceb243cd47a3016cf11c61723b73389b6134824300f0d51c5a8e5598b216ef08e8cf8ec0f63324410effab9e09db3cfbb1cfac4102a802de5736c126d27f8f61b48a1f28a760efd9e88920a6acde8ccf2cf29751ac9969ccc84a28d7cae1e8aeb9c735e2c0fabd4ade6ccca3a9e37cdbc0f0824deb1321120b23ce53a63ac2fda1df870d0a75eb54baa257bf63d71a19ecd1eb34b30efc171b0fbe4f9741821b4d39fd51eb34f4e9dba35093d3d666f104271b8aa85418883103104dde0764cefeba66cdc8e799965b2cc86e5e1d54a226b8eac6f6839a5246bce4b080e19ea317ba363daa1d37ecc30ef10e264dad26634bb5add1079bb10b7e3f276f67a83707831ed10703bae2beaeb45801756a9d09e7ac5f2d509d5c11b9a66bee796b733ef8800cbb4674e2d9bfd0bd4722606ddb2da936aafe83c95ea747a82a8f991d296ccb2343b3fe320911604fac4699f79292d27c53a2674c9309bb23aecbc7782b9fbf8f0ac4de0e160b7baeb59b6024f1894c06c01266a3d780a302faf075ba186186a585a0f06430d55f66ce9afc9a3f5e02d4c253ce0550171cb2fbf92a0e09f47bf5a10e8d60d4006d95fad5126919684f2c92827b530cb59967301106d24f8eb043feff63caa52f004139581b8e0f301ac83ff391a5fd8604193266cc10232f830c4163e742102c51e2c87c10eff3c874728bd7240d1b708a58a08343464450b576cd1030e5e4a61c9162b18630b1f29442840f5d5449f6d06f5f4f4f080b33513263e0fa1bb3088d0008a1e2b50814a4f1838d05d21c28bdfbae7e1d64b8684a083e276b10332627004238488c2117e7352baf09b0bb27e7354a0bc18e89b5b02f90b228a300417391812821970a063328416ef94884b5ca132440cbfb115d16f3c86cf8b7129f7665e8d01c460820f15aec8220a1038d0e661953330e10b3f3083114348e0c0224881267be81409bf9da6fc0603f39b8d21c44000192021032e1031c56a073ba13f0e0d0d7184c7ec63d814aa382b1dc32f9f7065a8a78a8f959f8e611e6030e918fe0df6dc2154f0d775c934018b9eebbae612ce8568f296659586a4cfab7941d2470b1f09f0313ea1a669a09e18e1b3d2d3f3114626af46326112831de408721e87aa6c22994826f2885eb927d4649357367192c90b62229b1051bbc9479f5713875e8c73187d9eada0c410687041114f20430c5cfca820062c98525c009492a5dfb27f4134f9d7847f4190a1ba2272608634c8800b4310821538528c80720e06475882641e1f70f104227850c60d90a8014e114acec99f2bffbc704d7a7a7a7cb0deabd9ffe80113c6e0051f8c40031970de1650a0825a3106e0b7ec44e53718252ca0862548e93f6cf1928b17b8000a1f20be088286b17881155eba8fa6612c7ea070901641ec00934d7e60f2ef01eff1a820081eaad8208b253b9081f3b4f8f75e7cd9cbdf4e2f615e1ae1b71bef80df72bcd4c2eaa5cf1a83f7c109bf02028b167cf1d24628678a1e623005186a00040f59446182151242d9440df5052bc0581003982bc28022695e2a010bcbc1c882665d274684f2ce2394a671fea8f4fbec90849872309070452730ced0bb1857008600e083415dc10fff82e08d163c108a41193d5780812389f08221500861acd22b264e3a6b5fd04b7f549e50d3e06cf23ea1fb825ed013cac2adf28220bf2059814042f4aa3cdfe2d087d12be742d579150f0df01056910f10c23adc4bb7793552ba943e5f16668062c41734e8820a38128b976108e10c547881c41264cc348df5f26e4558e8e38d5586bca8fc5b1cfa4d3279e74141efb0e86187d7f1efc5a15733719cc72aa4262f4526258e0753e278aceb09618963c738dee5bae11c7dcb2712b18e0875c0987d3f49bf75b48561d975594fc218a1c6abf8989999999999310c083a9bc6b977390721cf9a392d9ea7c475a3a15db70290409dbb1e0e02c1e4db6d006d5180f881da11c82a80712bef3e73c0ef20b9db92f10a4ab9ceb447ab82e8d3b2a2f3cb243c385148bcd12d0bef36a58411dad73c4808a30d08258c30aee6f25747d8355d8c704a0863caaa6ec2c7cf7bc5d56a89454df5aa57dd4486f42a4ea91b0f1119c23e3588f949793350eec00e12238f0cd5391223cf0e21d22bc743efdc07daed39f4780f9d8cf31ea667e71c12d439225d40086b208410be2a5841ca942961b87cda997b2f5e192d570665e7264b19a53f2865845246e8a4f37b39ec58df839f1907cbe6013aeceb81d78f9939be7ecf3ddf82c6f8e0937d034a9f169fd9669321ccba9debe7e7dcab8985c10c93601ee22233333b2c680dd7ccbd8254aad676ddce19e1f4fc984fcfa6d761c8cfbd077d7bef393f668e314a09a3cb179f9341c85230943588c538b1cb1b9297578410c269c9abc3fbe8a68fd7490968207cfd3b3ae6e0628c31c286704aec0e5c244747cc8cc3bbbb1b03949be6bd1dca36b61995900bf3ea2e9f76490f3638d785ee3371b0fb9cf4965fd6c706673a6697f43071a6fbd8e05c4e914c8796712e7b24f53188f52218bd74cbb2bc3a30373f9ef7a850ca28d7d1be67db32b29b41cc5230af26ca30c29859ead53c1d76e81ead54cdcb03c7c706e759ef3383f39c76b4d2d96785637d1ce7796b3ca24f0ae779c579cf3e13e7eaf0b68baf9312c0574619cd5a051c80f3dc0ba2dc341b18bfd3cf4e3b020e787e1ee77e268561fe9e56e494aa5354e95b3dd1cbbed7ec92552ba05d054634a7d6067c8f4a2925e612b355cbd8b96e2db339e8907acc8f28e9792a613b8610be4bc4f0617c4fde222720092862ca154eb4e5139c108c42951cbcb32cd4e904450a285240912205458ad3e9e4378d72d64ebed3e2b4a5853e4a79a814f4e6d154ea2405c52cca4f287feea040a19ea3aeabaecabfd3490af8dbccd31c4f6d9e4a71c29c909c5ef65f4d693eeb74721aa740292f8b06a255507750d0eba0649bf4cba96f199413b6895a5cf38ad13863f3f46e453293c9594cd494722c8e52779bf9cba36b9646515baec4ae8639fcd1d5118da2c7bbcdbc8377a73fd3a49042e42320a30b6572d1d5c1b0eba430ddcd4179eaa47032f464a753fba83b4b29a5f077e0d398b9c88e28575b72911d9544948a9cda1de884e45acec8649d54d76cc95ef6e65198956c7d314db23e8e532f770cb5b0579767f68a223bf2cc6aeeece52a06a19302cadfb43f1ed11ba560f4de0eb46cedd59c3514525be9754538adde89cfd2e27b68337735d4417777dbb82c179bc0231e9316c23d637784edf48f2ee66a44aedd4df3eacc24c7bc644d5ef28a5dec626e691455bb45b2d77c2b926df033afd0e16b57472be25bbd1b8cef7446ae79e6ad01d132cd475707c2bbb91f1eb324841082207b1de8cf1d658dde2dc92d619853fb8ebca796c931eb6e98e96e6f59d639e76e9e659d9b6c69e3611f304b726a2fb7dcf9b81dfc969348ee7eb8aeba2adea276733fe8c3777574b72299f3c1d11cec3aa723cf5c737e575f8de8c2a69d59fe6a9d887c24badc99dfbccc1db4d41f73d9cbe8979c921c364d7512c9e9a6b976b7ec3512e96e3b3fda791b48244bf34bb325929b483ef23a12b98e66bada8974b7ec47772b9271918ca27a0cae9e4d16af96c52d96ccabbbb8b7b4786b41aa673a2327f9c847a391bf54928fece526bbedbcc9f2e7231235f9e057955c87bae525ea96534be423df7992c96e2211c947221f79f69ac974553ef8455765b98ec9456e9944dc2bd7464eed2672c6dc84f98834b2d768642f92dd487e8d46570773d3d579f19117c97ee4cf6ea45b247b17d75e462f2e281fb578aa257354cdb23a1abdaa91aae6237f5975d474ab8e34d2dd5095e5a25ef5d934b5ef86b22cef499d64a757bbed7c1d396c9acc473e723ab2cf74379e6747ceb2a8dff4b3d54d16736e1a2bb33a9a8bdc7445aeddd2cbfe5dbe6685949403c95473f29197aec84d76e4cf4f963be6f9cd8bfe48ceae591d74487e5d24bf784824ccafed7211f03cc92955999cbac945b644b29a3fd7fc79e98a9c5a1d6dc48334b7cca557bb29f9eb559aeb3c1fb976e913237f447e63cf6e91ec2776e776811dc884174c30e19db30eee1d135e30e1c53b2fbd520fdc8ee75c87ce41c668756820b48c327e4bd2d3f30d93bcf860bb32a4b424841e618412de1df7804487cf918132ce8d67981bfe49e76879f671e79f47f81c0e8f83ee8bd37386af57b7576f2299d539814adf9e3b06da16f07c8067e95bccb38c43787ecf13ddb3c2ca15841245602b3f10328cd9d71733240468867b7a5c4fec41753ec4e2a1ed06083abcd0df1bf282a88afbc63d337caf6d3f4f748e090ef278395f3dbf9a188e717e919e0b747d5742b817f47d5262a7138a4f2cdfecb7f7951854e739b8762704a3500507d309fd4b22fe5cae0974e8a552438e1f94a1078571387f50de4108e3cf0f3a723c01e41147114f00b95bd42e09555916dc4161bbb348ceb2f0c1107c8f74b05e3a4fa843e5d1f9c9eb9e6b114a079e1ec67e8f6bdc63ca85d966e01f47095fbb28823cd0e7c43b7642efdc3b27c4385c0c849e13afe689bc012a00c21b5ccf751c7391c0c10861cf0821c4c1e7c9119bd7d9796ff9ea7970a6d323ae8cb74ba6f7f0e488cdefbc033c8650eb11abb8a8a48d96b4450bd5d08c0000007314000020140e888482c168349c4acbf60114000d93a046784e1aa84990c328c59041861043400000444460643600f0a6d8d5466c419a160da91be251806daf9d3afca5ea340bfe473f131003950052cc49be0a80f0194014d40e1ae84b6328cb46b83b5a4e55722dd0789fd8d2dedfb6624c9db6299e027028659eaf5464395407a04216af700dcb72d380e03dc2466866692735f12e0c0c9943a35fd8e09e2991891725210413af1ba47addaa3664b7022b1af018e70b93426037359494c30860c3958cb929dbe9b4065852f3f71a996039ea853b7ebf0b012378ddb71c6eacf47fc9d0ebe73d1c5d52aa41ce217b175e0b3d1d21538eab4802be42092e25d460f93ac3c1307b31a42944866aadcb7565dc3eaf711b2cb8f61e6e27c0b165c206993d5d38a82d53b021588ee8bdd2b1b31d7101858c7127483da0c571aa84afd9afc5a0d7b6fc5e14a1ee84d9200ae86b333ab4bfe3e112d8118834ebb0f3ca490aec9f2fdb18c2320e480b2a541436e59a62420971337f415cf3dc2aebce0dc022effb91de9d6c14dcb5c1fd0860669513798841f9ae8519ccb0bfb80b1ce90de897e869922d71b98a0b0b6c862d52df80652455c410eac18146d139d70cfeba51ca4dc3534d78d5e399066e043d2348648d1e53a485a6d1831e5800fbc60cbb05c34a293d97138332f795ad0551685110bfa3bc4130008a16550156b46b5d7c81905111a260199248d1596db22849451087d91ccbd3c3c9359912dd481ba3e68339ec1d54af8e0ecae2264e492a0c73fe5ebbb674d01e380f27f4b18118baf33b1f0426d8228673c5efb5a87d720e2e09d7c8d03b501cf84a2da4ee1d044961f6e12ff43434e232fe04140163e0601888b1a35aa16a8434f6cedb81633bf397aaaf1bd8c4ab8200a484f2f9bfadff925131780d003b68999b9ff95e49c3e7853b7c2b41f7f1eb529a2c30eac2c9ee97a009ba818b0546341d20d6c4ce9a529ac70d5afcbdcc12a344a57dd3e2d07ce8756e7bb14ccf8914f04c37e7651299b166681a3ac97eb515d4b60a9e8b81f63a80ba95454c85e26ba2d36bb3fe99ae5fa06234c9b52d3224f57028dee60d4e880502df2c84c3e63902b12772914501828e59de991cd56d607201346c2708a6c782092a1a45e59217201fd0235fa22345a8fc6bd34be265a2e02208dc518fd6dfa0292458dc5fae2c48d31583d81e2e744d20764e8a2304d37ad59fa0d2fcd7bfc1fbd3faa0c7e289223bd5d1a523040232f55eb094f3788e92cc6645d3e7af0ee0e8ac089fbc405af9f99bef3d016de98c8a7c6a1bebd6831b3094bf8cd1cf1f04f8a659fc460fcfb12de85c02eeacce110f3f070a347e0c2967e1f8e71706183e415a6f4d0273b269653fe7bc3ed0561cbcc01f1ba71f09df5780ddd8cb2484629fcc84f7edfb63117a79435905cac5b403331c8327ace3bbf77a71d4a2039e039d5e3610b54e03835080469677b70b25f53a6a4748b56636db8e8d16abdf7cc80788ca56d4a02dfaa58d1bfb42c45aecccc3573cca799195f8bd49353e1a136f7610df3c5d2d6eac6c9ea25bcd2bce2bc28c956689788e65a62626b983265dea15bfcf99a34d7b59fa26a8f4f7f9ec7300e99d304540830bf922e2c0400156b899376704850080dd9a9ff5d0d4870cfc4385b14297a7a412eba480bfd257ffb993fa6f00f8c5856435779e33da251db97ef75dac04146a0154f9fdd80b9117e324db138d4f72d4adc2eee92f980bb81ee58940d8336d4ec9e287039ede98f00a93dfd6d83ff3d0f289d2a43925c9a1e69585e3bb7eef1eaf569d31a32f96547c8d810ac99871d6e2c3e4ba206e2864cc67407c23dc418f754413daae01dfcf83e53bb4e5c70d1460f77d8844a7dd020e32854ebaea80debf3dab00e555eb49bf4530936272b6fe8157cf739353947664fd8f8ad920336f7098a92a9314627bddecf8d60b43e9936619528fa565857f9585da4e4a9b2b5276e6a445c7fcdbc9ea52578f65ad1a49280f3381d7d672ee054034d6b9eb7cfd44e39b5cd5789c26366f29d2bfa44ba3073253f2c6d77096954d7dc3ca7fc8cd1665873a2c91b7173bf58d11df75dc6a1a25314d2f741fa63713b577136daef18e2d2a09cbc6accc5560d94c56743c9385ee8e27f8dd9670a9a29b1ca5e4bfc6bcfe24f76443887b00f0c70e4079905cbb2f2ad31747ca05fe33555878d216b224dae505d89af5cd0771bd1ed8267d9294309c90368d2199a6b60de519f3496b8692de761408ed674b80e85a01cedff0e79e8aa9dffbf863ff011d3e69de5d22e403590c8922c23e9af3cdcea78180dc7eb1bb03e9bfec08278531e1a54c20483e00b4a52e1d86de0227b60e547e0145713d2cde4735aea176b65bfb60da069150ffb13d38c210eb1efc18fb10279b17a4c0744e38503232e7c99ea604b28fc346f0e7ea9ac58cbfc2c077efbd7ee3d6472ae3c58e5a6cf22030e6636898afc5bb08df5ffd4c601fafd04c6ff94a46d3fd8e5f9e18696bcb67f081b5f0c545186ab9346c0e8cc8763e773aace3d0ba653bd19cb3399a50b94fb90a5264f61e4c4c352d33a07ba2b94346c82aba85c14013cd957de2f47df51519c9b9dbe2ca29783be3c0d1cdd355545edf8c2aeb15d42caa9bee8ff63deb5b5c1afbeab11abe35b46e3895b6004d7059ce735651d53c89221a4ecd9f66e2c4925bd92ca4f4c27c3e1afe934122ca944cbcacd35686dc145e9339d289b6264b5e3d0214e23b8c6ed44c9e0721d821ff4c144124db768ea244236999573745fde1dcda8265bf92e396dbab7397fb52c3bd8dc36857185b8cd22fe855fdfbd4d8f9f2113db933b5c2e22c792fa1ad653102b21c344b60cb8c537d417e7822b819a4fd5f720d52212d18573bbd0037c3fdb2d039a29652aaa1ff1fc61f430bb145a92b3c01b6b1788305c5eb983064cec53e84d2828173aa218ffa16e667df0090061b4f78c7e88f076f2f62f66a5ca9d415971ac86e1ec8e312cd4828b869541f4d4eb96a370ea904db787f94a5cc015b54ea64d6e1e882d6d92fa23a464e7286695a19116c62ba8b88d1936f08bd24459cee6b427af2f13d7ef8163d8aa1163c2412b30d05f75d33be4d45daf0d701ff5e67cb677cfbd28ae26f77b778c234a2d74d59d1599e3964866368fffc965880597a879b38e6b343ac517a565356c2311a62ab5b05db93c1b2e3d63693e549858672bd401765071d312893807de77eef01d99b80fe7eda439e1d155d2e2c29f012f230598b73c76e80540010487630e213366de3cad52303bbee55283e074b71821d50bd1fbd16c4b908e71709dc862b27921f06f2e4b8d0780ed6e90a468fe9b85eaf8f34ec65630c95ff691fd6884a20884a53a518e4ad46e1110b98c30bf47b2f44703a7b71789e23f15ac7f238373ad698335addba6d56633c45524dce6952272646a22f882d897f3f57ad8eb2a269323a4910c02cbab96397358c9343d7f51715fc8aa392359ab61094c758946dca7a9aa4dcc172717c2b4875d8227655a92be4721753b2119b9a134d48d99a3836b10d2fb6c1763ff8653b5244095dbb820f60b3e05ab7f0d0f00bacd316f972f5bb80ed3008f7c0ccfcdd26fc7777109a1ce2cf238d8cc3d0ad96805b992ef0e0617e88644f94ff07347e0d386eac3aa0b44260395f1df59651173813da12634cb4038696b0c6ee964aee5c774af1b55e5db8b3cb15e006b3d2803f3bb33ff7aff57cbfaf6f4d1be610268be3158faf04d841b80b8f883b781cf412ac6c8d88092a38b908958198a918c54e9c165f9ca29470e04f274d9f719abd586396c9375cae4bd4ab30844f54141b796b0fd1b1a0bd1c6f10dde54d610fa54d0d71d76e94b0672c20ab35d0a157504de712c01c45ba9f28e303e805a81d8d9690951d915987634ff5c7e9ef73e129ed84bff2649dd06c9ed4a2e40250b7627abb11443d447271b3a02afd5bca70d4a62bd856b8a880603199c9c5bf2515dc2c03f182c978b33f138f9e8d6bbfd7743e8140d1c6ef570584610966967e63f23e94ea9702cde842f315a78080b900356296dd2a60949e909dfdccaf1af0c15e32b6fd55a38f4825db77ed128442b0c5f1db50e6201dad4eaeabf816ab2481f619fe37f951b2071991b7bfd438857a08fd8466f02fd1a1e077dc15f734af920d037806c213bb6d60a6f214cad035d80379709b21db2f9744350c76bd9b54bb70ac38a39cc568432e6a4203b0721ac40a53ddf022c09311b550aec33b29c666b0d4e3e138ab76be311aa846d8285e8e756eb08e72fa61342ce7db4ce54fc2d90784ed14f7ac4e6994cc6f918c6937bd3cdcaa1a88b699d7a63246480d236d6d056d4473d41b9d010bbc33e65fa89f1a988a71305139e0d6bf8f93b78c3b0bd6999354d429a5386babd07aaa8bd6fa771232ff3c9decbcbd064a63dce87896a89547e5d3076e3463b04630085de61131900a8a4b27e8f5ce5bd3a5e8ee87856e3a52215331819fd637ab0763d52100e418eb1aea330172103462d52b683bb1536262109fc8dc82d420f55d4974a2d7dca1e088d0bb3e06b106c387146bdb20b626f31cb823909de80466fe28321a7cb89a40a0ce5b01b30831b7bb83ae846fd03d20d0cc49b417f9d89819bfafe53089a873ed5e297096b38d456cc4802a9cd5fb31aac7509d04d610bd9c8a380fcdb8ee4217bf096cd203374815b7d6e010af8945941d02c323ede198680fc4e3e9c85a2d0ad0ad48ac930129e22d5560b4b9a26e0471233e8348c33f5c97bb0bc5f7e7c45518c7614e895780ae3a535afdd0fd568381430b84f4eb85c287cbb2f3eb06f08d58fec07974cd0a903489b197798f6185afe49c88b038cb05c88d21015c251003e3cc132301c39a820c1ff332d2fc12657196bed761838b16f01802115ca9d26b61ccfbdec46be12ab98b8ec84a504836609dc5cc8c87a37aed57e89bad68a98539a56018ca08c52181988f4bffe313251e19e86bbf5ff3dc852fded0bd8fc1adab1df24d30a173e9285270f2a56c06c8787f400bcd72a72f30e05ec0ba083a86cb307e254f3e01559646485a253b76f8f27d7f56be22dab5023a9ed81b90ba4d244132f22ac34f6f01bf00c60d9ba9ed07f20aae59072a9cfa0c77a7c38b384f9548298f50cfffbee30e4cbe5a1fc9513e4c7b3792da74b59e31249d56e0a677c48e1b8da4ed1a88f721f4988a5f9111d70006eb7c0db4948506e968c7e27bc4707c2db4eedba49d3c2593271ac337313df1eabf8705b5847dd3c45598e6b5b2f65d4c7e7c45d2eeabf262fe7223079f23b9881a8879a0ce4383ed0ad826c142eae35a5b72bbbceb537d59d4988ebab596818326165385243740bbcc29c085705b408f1c7efa91e30456cd055706048b35504b1ac12e0929e01ad84ba4019b13252c4014fee0c9dce9395faf06082e5392132556e1803bb7e059e8e33eb70a31dbb4cc0fd3cf09a7e551acaa09ebb249576ae7ae62cb67359dc21047578938d6cb1a8a010bf4b93541d1509427ab93dc1b98b37a0ab636e0021736ab461745af9eec8023066fa35f352cc6be324a85614752a5a1c513be2bb92f231a5a8007bcc2fe99a042f5fc2c51493a57a853eedc8a0e90f305d9ca28b448792568308d0096accb92810cb0f070b0234126fcc4679dc0f7b5a78fd2729b6900f72dfb156aa712ed2f0b01430e0b7140aad385b8ec13ea927c79952fe1479d42a40f5d61b1b3d769e9b70e4198885047d26e575dca9a690f5fa1aa8ba78c9d11c9841bf5b5aaed19088956daaa64d08f889c287e12a26a0182612b04ce883d55ed1a3559c233a9172e6e4d5685550821cf4f4690e31086b3d3e441d609018ab4125ce1cba9865d19e6abe08150065bc448b334dc7a0c044861036d322629efd42b1e22ebba3c48a335efcda45cb636609910dfb3dad5f2a3b72e9d6f01b81ae066c1106605855a231e2ca2e0763a62b0450357be978a7b45abcb75599900ded0959224579d2b707cf1bd157e94bb0219dd8585ac261338476c4e7dce51b3294cae546cd14b5c52a17bb3a876e5465f019d3662d69ca8d0363574ff4ea247d0ee36bb51546c18a2e81d49034fc2ba3b60b88e42c8dc538ec4ffaf30afecb55e4f6ac13c384a04309ad91aef72374f99301a008fba38d9c4e4d18782413ed379d77bf64722ab6aa6912667e23aedab2a375747c3019f8311271ea4708bc3c5bd0e97eb1120699fa597a8f5001f23043f8b09d7f9f8e9e6cc3efc8b3b2d5510170b62137ac361d3a591e0fcec8c43fa1246c55ddad7fc2c84e5049cf0a14c1b0f703722171fa9effb9fc4bbcbfa463c8c6e570683de3b58e3225066acab8ab486f0c6dcbd8cb83e1280ce5068d26eb36a0fb0788ce8335be0425065769d6ef19ad7bce27781bc9af618afeee228338e55f9e150b4740eaf8c2d9fa3d7b8118bdfbd86b25641664746527ef4d1600f9dcfab18980b930aadebf9669351a10f949f400bb9473a163fbcaa4f40e6948045dea9112b79bb7c8272002075be72787c1b33c950adbee5f64939b2de2c33a72eed7971c8f8b9e50ff62cd7e7acda5d505b975f5681eeb1f35ceb8e7da261b3768685b157235a35bb9ea37e03fa3f465c250ed2387e0784b145422b3ee93bdfcd9eb346339127446c8803e039cc087c279b95a370f9a637eba418fe1c31496aede2ad0435e98b1cac2779ba6e675ede9161b4534b9f95b3488a66af99609f6bc0298689c97e298dd52d4bbab74f24b0b040a5355fb222bd07fa1910ca8348a870cf2e0854b0ce8940e277d8f24ff3b8b8448a17a6835f3814ceff4f21a8b4151278f2024f1100f4c6f1c64953e06e21d66fd0a1b24dca2f417c266424c1e5bf686a7c25e64d6c937343bc16c920c3b2cbd649b61fa82556404fe8d2efed6d04e24056525baf416d6993203fa79d3971189dc0449e0b848ec778ea5a00e0aa59f4902a243ca6696919e997ae36dde0cee7d36ed3c0c58311cd65ae7d51c4f18a806a5a97834e86904be71d69eb8779e6c000597c6b3b56c214f4d37f5342da876f648d46033b2eb8b058c262f181d202b73f1049559814398f157a435b36878c12a0b1a9f2d96efb9c45ccbbe88490b28d3b125d281c819639454575dabaa2ab2d9e13ae9360545a599eb00b02ea4fa3878c5925bcbedb51bf7d440abc9333d4055a5bf02bf5425648ca99dc605a8e8fe4c06a913a6a42d12f1fbbb3074e046b5122fa3c2e1bb350234eaa07531318e839c6060155a3945d981110aecd095d35722301876f2d0333d863b4862324a2986f99610a45e0d9f53b8ba2de7e33e14f278dba284abdea18234c14ea32e12915867ac25440d702f0e9129202eeb8421e35976154664f94a2be58ffa670633a8b03a84a125344b9fc651064cfe7ffb39f2cf1351900189a173a18be302a0cec89d541582804d02a1af6071a5913c521c432d17b45e1647f59cdc96779fc88db927020e0ecad65f69a289a0c77b8cd2aa3acba2a962e4c94d449f79ff3feb1a032ca95e35bfa016e9328625defa44471806b86ced35b5a033e3dac7d6cec1434725a771f5144287b06482bdc5b77602acacdd577a4d5d05168375e0d4bbca29c5d644cb188d7c3d13bdf10e9cd9c70f81475d3185914759723df806a6550d00fa66bad89089c1a33104fe1c61c650a3d5e7caddbb18170524021f7a8b2b313729ccd4cea9ff7c991ae5d2d3f775d84cd4453340a4054057a30e6361ef855724f9cb3a0a60ed88149889493dd6c44063c01519f8033d16353e4bfd1d63319c4a2be78cd8a6d99748c5491d24cd0c1150266d08a89668e207d664e760d6824c2297b3adbdd226a0967e3e5d613b2a2b043db9bdb24a2afccca553cf437caedcc5043173abd65befe81d0daeba64e8a780e03c899084876276f119e6f717ac7542a68b63fc5a35b4b7f40f59b5dced534fbe47add9352eda7a7fa40090f68fbfacdef1c321c7ef5c14945f14542c85d28c9f8f93dfe15279d8a3d5998c6a5ea53889f0437cc379f0c702e4cf2d7056435d3e320bfe1ab31309d18d4d9b462ffba261ca3f8450507704855e4155358a5408a5622223b7eb01429ec4838f2026ae0748135c40beeb603ae9e0208e7a4329bc7653feb474017206bcdc33949aa3fa2551ce4d908de8b484a4e273db6f1abf194ddd00af42a3df1ce382bacae4c80c6759f344fc2031116005583c703f78e9cce18cc114ebb1598b34571b0885e79afe196ca437227e2b96f43751e7dba5ad1db52d81929cf25733ac44ed8d573d1127de9bb99d363011355fbf0aece1e24123a72044a463150cab76d8c57ecc63f1e915b8de5dabf062704ce4919c93c1b4a3853eacfd60acb5b9d6accb3ae9c9a39ca94aec0dc81ae44891024522eb3d0f221f76bc782848b842e746a7ab9080a1cb720ae04f4a9fc3057ed8bd50ca055907409b4930057b023681a665a982d6e29346e054d3a9af0caad13f2e037dee069e869dc557ce05b9f1495e7ab9cc223f2eafb93dc0ee5dcfd50898bbd6322322c59e401bcaea35e8bbe7820f34c135b6d5298b0c9536cc8d188c8a9d11948d685c23d2cbc6aa33f6fba9075f6b01d121596b1e907ca9636e364a98cdbb644d7c0728f05a548b04faceafdb0a2363ae67ad8609bc653bcf83a66e90b08cf03e18659436b144a3e140a5a98075abc422ade3376054e5766d349e42c0808bd20308d3a6269b889b28074853f7ce451282bc6355832ef7b236ad3c5b6555e52d90d36cb50f6933717b87ac94a86f23c418fe72771d9bfb468a6ae3b57e58aa5ae44ec8d9475596599408f34d8da7ea74202f4e16329e31674cf50e8adac48b62a4d9b97ed50938b382b50b7f5fa012a68331693adfc2f4554e4d7c06b0d4f21cfc835308d67d0fd64262c24d100162582618aa52b196a02853c04338afacc0601d3a30662e4f49a236e2771e2436f8d8c5982e8c969272413fcfb1016c733393a39db7bb4173a83e6bd7bff1f3d6711007cee98c6599afe5e711a1cf2c547ec7d649eec0326a0f5bbe0eba4abc4e6f86133cd4f22364d6d50e370f1165c7610db354ce8874a5d1883e15c29230bbcb2d17079cb690dff6299dcf6ec67f66b2faf44dd137f5f1c95b3241c8f3f60b05aee8ae477b3e675e543fb137223a09995ca2aef6dd62d9029137d9d7e5dc68134e6624f88929eb23d54a602dda09e902e886c3c9a9690a5ca084f09789cd3066242011abd31596e563454f688d794b0bffbdd000484ab08a452cb269bdd316f8802aa45f930f218426d730180d7d10d91a2398ffc942c98a033a4b2ae654a2f6964dcb8f6867f12b39670833248162e339b0211ea4f043259c7cb45d3f37650382a435b2f070b04b8c3d3c32507b8da62c917151a444dd1a66511b9d6510b3a07c26524aa1e54c2660e32aa788639e251ca3a04c06fec7582626e699ffc0d2da572d2d60b89758794a06c11483d62d30f946ee195a4ffe821f12ce60518602708236781c9042e46b9d6a36e3fb4ebe7dca1c3aa067b5fce92e776ba50c634482686b98823a379ac42cc17b9404dbc82b6e65f82747755521e7c9db769f88a5ddc393e8c4a76557224c2242d7ea3c87f60aee5037a150f1e27d35334858a7e150b8932353349dc9f7432d235ac86de6c21e3956a496416441261728a3a63cf341d469511e639ac40851e19c30fb6d5f5fe740146a6384cae6b9f7d40bafa0a645477790ce7339b8ae82fb9efe128b6dd1529d64755150c6aa4b32571056538397a3d28693d49603f045eb11e0390569e82e309e37d90f2f62750bb2af395f6e3145c922485a3709d3c7f4883a49a2f2238d3f9cd9c45afdeede0fed30a8dd4c2db07e25f826efdf692b3afee2f2c67a4af6e4a07778bccd7297497e868a4c70be69e978e49c4540cd4983c3f49dfa258834ef42008642a5c364ad3c57fc60194a2b245eb673b3d532580ff2c13f8c6327d87d06b29f6b7510707d327b9877303c16d4f820c4ad6063fb013ecac87741d29bed87acb61a7f6517d1ba343d020c67b7f6bae609c40438691975501b5b87880e58feaedaeeee8557a1df7a2e553c17614579ab1bdd05472fc7af305731346a28e68488e59c7485507ac5cb243ed6f2362b8712701f1a26d23eaf791d31ff5fc40464d2d572991c72a49b061876e748ccdef0f0d8b526790ef94e7e8984864ba1496e77316912998d4e1c2c4e3bc2058fe784a5676d00e7475b4a409c7a478f36dbf3921ab6aef004763af230824a1343736f53381fc02b2132bcb8441b8935cde7361bfc3f8055164c0c84fb646e501f482b89139d0e78b80d65f228a887c7793fa266aded0e82485921e6fd4b84719249246a2a5995d1823b71fe9e33016ecf4feb1f138a1a2490649b25e3241885ab9cfe46a1f88b683b9112812af847d2e820b0894f197b873a64504de958df621ca0ee63a6b61c0dc5fd28d3dad906cf7d09ead2e0262759fbb808046b18ebb4e2179e0f8fb778e62a2f52516e0a51ed11d1712e26f165f6e51bf75db02626d482ba67b1bf185ea99d2c7f62da20cfb7e3e46edc62d186f132c26a556c1956d1818edb180986bfb020ac4a5a68553db9b4291460fb9785544cbc452f6f802815f66b6fd40e0839b4c43ecfa127956439acf6d468fd341779933ea3ebc8fac226a75fb29fa24837e6f07f7827b1edde4865489714448da849c8b959ebb8782367daa7a439af49a0cf3a62737ba0322230668ee4f146dc5b45f209ef9612853404065ae94852c8d22685b9fff3b2481125bc047c341d6078407fc3250b51acdb1a7f6d68881b34227f7d0d1091a4be4ea925bce4a3886101ed0163343b85460f071f2301a0dcda149af8bf75566f692bab9a154e04900d972423c1a0976ce892ff509aad953dba4a14121ae5644df28bf54befe79726d2649a189a3dc53efddf7e1946830586fcff041fd0814022ceee57976680267446dd0cf0fdab10d62ca547acf9de4a41e86504d307d5a66780a85a83415284b79a501bc8a5e28a70d61b7c388658ddeac78db08bb6e630f02ca180388ef433d25d45e484e79986199d491fbd01ccecad031819d64b5f7d5a365d7bd43c949d4f9992dd0c8d73f4220b125b8fcee6fa732c63ea72ff48b5d90f0f6b1b40d399d06f479a9909f724dd5c7a78d3a540da0713c0bd03173eec3c841b27b973a8f5de4ed259ea4f4e13abfbfb35427c73e9068750d786da07338de17f6735a468bca2032e7996ebb188127871291a0a327b88e45b4036c76cfc822e8b1a35e32c652825824d8a644e3a111a22191ce39141196ef683aadfb5a42f03a30dc3cc9e9970606fb736b2e44b67188504006e38e362d112aaf60f7f13974aba921d0d3e8adc52760b10981ce8444b086b777b4dc93b5445211915941a39179b9d05484b33edbe4720c543bf7a8cc836a6811e7f8938bdda39541c5595fbb6f815236f20bdd023d2bac3e9316d9dc704b68643a997f4066cba063a755e1688b060b4b2faf82033eaa8a4163b859cc19ca02357750e1fbdfa6b0606712e70e867cf9b1b88a3c214b775c1d4f7052688aa1ade2027eaf099420127af1f908a61a204442d8cec635d3c45bc727367331bc2452814fd2e153243cef083cb4d64f33abf4abb2ca48b29ccf0b63bce9dca9f31dae851124750daeb9b9f48dface34342413d4df4a7fcf7dac61bc6566de0e49af03567fa39a65638cda197c6a51aa8fac0613e3b62b2b100a6bf147c668bad7c5e4b8e4aa7b1b491f4068c1214731b535a8504557f76418c61e71c20d3cdb4a7693a141c09d6018f8debedfe9860be28942a3a546b31b290b118e433a887026b0704653d28e4a301f70310936d1be0d89863e4d23c0fb5d0918800047f5419a201c38cca3fd57b5dc9db2e04b534aaedb7762159b68d87a6650aaa9b5d44c1a60a4628226c2ac73f12bca10b161c0443c3eef8c73d1cad8c5243118e9e06d7f1d2bc7a72a0305c578c4e950c9710379955f613c0ec47520e6a157fa80ac84e6215c2b7439fd6204ae09fc2778af589e0816e1bc8ce91ca2d353dce8346fb3b530c724c989b1688a3afdf4870e3c6362d3213e687d0a6413d41b853c500778b5d469c434a614db9b32f0620c11c23a2bcaa219f1b828b586d043d89d393b4bb8ee3c9895389088766c6da4f5d1b5fc331849e1627fbf993b67422a8bbcdf6bdc48e134fc8d635404375d705fa891a45316003f4de2a0d0ce7f344846cd23638ee555a34ce2cd2e618f63f522c7f6526fcdee7b988d1b6761d6f5b3de5a2b916b968c8b73b0ff71602c11ecfbee0e21f7a09c52c9dc3915d6fe805f88e08b5f7d5639af15b0c17d2c6efc4055b125c247cf02262a36c371ceb2c78eeeee716311b84d2610c045878b4f20703f50665be475572aa3870bb399bd87ce06d04a8524d2640770be258be4b421efe2e98497a11057a7e7c45a2d384bbba1ccf64476a88c086411328471f8380ee89342f26d84f1350fa2f69aa42c1f57e396f389e2db8aadb8507dd70f892b4f8519e9e21c3282b2b750a69c79137670542262aceb27dde78f41e4e0427cbb238e6a68c053fa98ef62763f976cac3e46381eac2431c03e62ad38b6bc46a606728cab27c2f9c6ba8eda232793d458f5b8727f0846439483fc2b9cacee1d8488453685d871587697b06cf2f5b24e5c0b332c66d5c3ff4c6f055b909b255194ef40c36229369012d217eae2b8301c28da7bffce3395ed466590b699e538a5e13562a2eb2b0524d0d3366fb7051fd27c4769b71748f258df02ee8aa629145a6ee6de70b0d15d77795c2709a2fb2f4a95966be6890a3d3ea94234db6d64f576b952b90a478d6780be54abdb733ff38a36d042171b2f8b961ee690d1d8084f1099184f720a59c3049e5dc6ade23bcd8e1afb89e45248ef80cf826a52ebc005cd490a7b09ae23aaed31fde44d40686d63201f81c05f4845e1987d2c585fd328705a3364c181b66ad8c2766a8d3f5792a255882d5b43dfc6db0f6f2306e88b802ce07a8b4e5cc363d89781529fb72facb62bd126272cb8d5e3c2a4a20d89822ba055b571d5d3055faf34c96d4038b130bea7dfb762a47a66fb486fd7c1f47acaa153cbec9df836ff69d01f29491c77cb87da08c96131fe48a7699f4f6cb0a5e0263c30c8bd23ff3660d6a32605e14b6a103ea948ff6e33b6331f71d27cf419cb94f19e528980e1187ec671f3ec2b647b15403d558fa804f4f249892770a2b5e9a1d5e4618eab40a823bf75df81a318b4cae83c041e6f782ab8c55bde15bffdd4e91c9aeb702b80329eeac48664b8e01ea98b4b019e8ea3a1b0d1a33167e0c8ebc7bd9348b639c6ffaa922a8f42f4d446ce1e78c4d079eaf060cd8f0ae3ebffeedd55bb9249143b4f641282b66954f24540b1be6e288ce1e66841a9eddd449520d2d2a0aa514deb1f3b30307001918c090e3b08ec036f5a770f76fb098a69fbb327901f7d8177c71a381e3ee5b9c9dc80c313b1383ab6b8dcbac137e6d847f31c4e3d3a1ba12eaa4aa371df1e700385c44ae4ece15c22b9aee16445d7e2eed5190312264e64dc522e284cbd469c63919c4ead24ccd593e554a7b88d103dd4d0a1a704b51feff09b2a2abcbf55ab2fd43c1fe0dbbe4eec124847a58036bd2793d429e7498c2040eee84ed00c1cc3cabd9420f33b9b6fcfe29db3bc3036f8acc176b90a7638941e8e34718b2c494e77065b0954b1ca957029b3db829a362a18a42924db43097ba577f6808025bdcf951453f9090182c22ca39532e5b04bb24b1fde7ff6da91387a991acfa66566ba315cc92a38b2c0fbb4412099831cd65889b433d89c65f8b6a61a10f30444f7c5144959ca90039d6d013232c4b2e82a7e7b62a4a1dca1d0a155ecc039ed1504bb4b0671a434745bc0bd333a2892348471e21cf23e24bac2ce2a663235c6595a004f4f1b8b507220dacf6db5520ade6c8ec51b89620fb95e5fba3dffd4ea7598467f8041d930451697f9942709ee530eb138cd48e7a029c0839b80023ba5e6bcff6998f979e02e96d2566db9585bc9df193a597ba9de0bfa1f6725beefe8634d4a7ed7d065c54bcbf71b47afb736ed8827be74073a927b8e574a72484eb623d08589cfdf92163e8c09ff7189ae759960cfbff2130ba48985971ea5c1fe23847da0a5dfa358d51501beb80846f857cae4326b46d40b6ee888ee7d221311c945d467cef6c49e2dd6bb24c0774cdeb9ef07e218d961ae18c2ef25b9793fef0c01b2a627338d8a9bf9b76d9e8810c31e73c9a54ca0245e926e4c9bc73a676a1c9a590557d830d7970af6c888b4b4dfaa8eb157b8ddd8ff6ce6c3bda58e6e91f3d8d1c038383cc1a0c723a5663e2af73f85f0b64fdc3b7209c597a3a47a6a3948e3315cdbcfac944eeb68bd3885af0acdcb716b7d3868c5bf2e72de66498f87fe5ce3546178661d5e9bb745393bc66323680aa99bffdabbf5979face196b48afbe471ec1f0bd6d6cc3ff887c9c2445f61e599dd8e4196f721b607fb9c370e8fc30cdc669290f564b9ab9686d8f86847d07d0401a838a4f52e10b219645dcefb4c994ca423d9c7f83e99d60b31ca9d2e2cd941c9bc9ddf2368c535d5b70a5a890d6254e2271ba1b22c2ed0b538425163c07cb24f6baa58944d746639b068b253205d2e5d30c4044fff59e5e0b6ffb6cc1f239a13d48edd32c0e8c50cbe6bc40aeb326279a6093e1a8379c1f178dd04d4b52bc2cda331ceac9104aa7efefbb9b8ae1d040ec08560bd63ad4820adad271e7f67525a90db4d138815d6de332a695121507d9dc7e80706868ce0d492f23914a7f17a6f0198a872ad951af6f5e65571f9832bd1f3fe295095690031843f12df79cb778b22ed8bf49fb8d30a0c416df38ad7c655e48c63c471347f7c5c6020d2ae8c5cb4078e4ea2a2cc56fd846a68c667d58dc9495863d0f1b7d7087c0237299aaa6cd89ab85579a68cc8051e082881f036ee995c05218172e3be8383a5838684f3cdc415d8a7dcdbea848206662368d79afb28f4814468864e615fcf0c0643594307cdb687e0d2347730bda831535a1faa2520ebe3ef1b16f32fad161984c6120855a11f791c7b49ef0c0e7c330db5e02cf1b251b5dbbfc8e929f4037d159bd99c5abcda8c2cd24892cb6938f7a38c951f8eadf1ec25caead58ba98893a1c3888e7dfd2ce7aaaaa939062843cc7c178a8998598a18cdd680fc6b8fa9c93cdfc81c538d1cb6c70080d5644bc368f7a82cf8de213d8310069e700e33873e111f439d7e3b17c6cb7fc800e9f1d8d8520ce58c632b500f825321aa4ca8633dfe006544b7ab407096e7fa02e630ab98f3e56b57101106fea8d49c6848043d06cfb4a897f0a8b67a89fc5fd37898d29967da0f1da24dbd715d89b019f1479931079e101d6fa9bdf11bc621f3c76ea9b6d137e17ffe5ff27ffc5262dde21768e15c6aea9e668f421c8ec9572f23660384bbda87d4b956aa06794248570284b221ca05c9e419a066068e8002a0838818139d993cf7f6b47c415d413ef705f56a7465e0b4a7020cc2057e1f70cf915526c6008cd1cf8cfd6c6c4adf0928c2904165232d5c2f5700bf39392180509ee7b1d97008766772eecadbc2e492ef155b5825858b40f1e41b3d6f074260dbfb198f12fb9d7a2bab2a693b22f830ad0345860eb491aad1678de93b13ca1bf3ec0a2853b1ea2b03cd3fb579247a45ed19a2e82fe0a3c2524a14e18174f720765aed72d6567da32122708cc99910c3279ffcacfb16d8bd6e0d7b21a1b582a62b3c740467737a69d1b802fa034e86ea084b32fe8ed0b873514b4437954200f11c5843c04a5eaba53d38fe66d3776f58062823a8ec310f96f564945c1645f73e0b4e85255bee349b996b529f0d096b248ea98ce6f6f84e7ef2e8eac36b1218e2da6d8e997d2eaccd1f19cf0f8564ded4daa365f42ae1e1d1da882985af58e4b7bbcd80fa0412e6e78724699929c4319c15b687230c46bd57d83d5d1143b3fd2179477ba8f70b8b3618c12dea5473bad38915093dac2125fcf1e8ff46ef48338bab3570d23f5a5eaa1e3e087f2b21555134600eba49500e67959695b1606a0844d9a54c8e5acd831766fd31a8ee05d3f250ba3dd86502af90907f91da2e9e65f10df73d26e39826bf24823a70cd7f4353c2714814d928184f00b15b8ea6fd2e117406933f7c2a437912736fecd9a28d694295204ec9fe27a045cffc03d7c9ccdf4d1d8e977336251846002a7d24bde45ec1fc81c234b587ecb64afb15e735c289b22c8e3022f4a155c88909522b8f7a1c8527500678f1387d1fdc7057479c67388be7c7e5a0e62de5535a5a903010f5a76f990f50d0e0c4cbec4b846c6e1d25f49781ff196c6c5bdb57221b2ea2e1a435e4987e494c73d68c2a596007194f4a82b326d1499f526b2ec4b3f107b49413973500ceb18ee7724ed1d1a59cf7e42c7fbd1c8c29abfe481219e2dd203b814ce77ded2d6328f0900434f0c76892743e3971fe5d131b02b32c8ef3d99e6089ae8f5c9f104e9869ba525b55a267b609cd7408e34f7bcaad7ac5b1b3872777ac9ea225b000b61afa27cfde16f1dc1b7d807a081644177728e5bb3364e44191f2ed6cd95dada621f56a361ad836b3c5358a53cd4064b5058adf8f1ce3607ae453c388b0f4d17697dd3f913e0e1680a21c5f4d7edaad53692af1789656f765c813629dc075d3a6d430b20fed7e3e43eaec36ab6adb7d4834cb9637abe65ed3b0e429aca34e3d5dfe90ab3890dc62b1f4b48c7cb98fdb6c463c105bb905ef449db53a08a6edd212309b036e80097d50d401ef73b075240ef503be5bf8b083d55f3db4f4ed654f12c52b4b76ada8db34c9b51511e40852d0cf0c39dac35b44b475416bf311e045720b5b50fde8ea7c63b833c54f7f86812224c775fea20c112eb41f93ba5d726eac1d1d781e31e9804bb6db511d7b0fbc62d23ebdd21a2d39e059dc3460b5ef9839871cdef30c47fc4e1797b7488fe74a8c629715c777e45910cbfe16a5a9d0c003bad2e9497c279fa5d8f072c0af4f1bc44e11793a3918c0ec35120b64d3c810cd5e43a26c9624d8b854ce4c87f8be0bfd452579a1252b3dbe0f411faf40131fb5b6a3628c00b68b6182248d1ab3d129adbdd6be2fbc192f56d831d924c360ed4effb171033929b736fcc90a6943cf0b73ce2a33188eacac3f60659143cba877b13daaf071e2ce2c7d2fa7ca9e4d874934da980e41a09582edd917291f03c9baebc3dcec334aa9a3d34640e08d237b8b110186a33d848407348cc9c1e879a621c83dadf1d4802b120ca99cf95a14155f5cfe60a8de1974148988dc7b7122c3b9a3ff860f577ce25be59836f4a3ef8a3535ea29b997035d1d4047fa31bf2ee8900107715478faa3a2b0e1e3005a0d6de1e00b951009aa41d432d4a7558a067e8f1ce13135d1b306a6425550fcadc7cc56781fd07740a09b8cf6f195c97bac3fc0bd8e9ac75681e43ad8acdb60147a009b9ba797f4f1b240383997b796b2a6f7e323fced610b7afc1c1758a89a36d0eb1fc16ee3bac89ca2594279fb159caa247661dfdb2dc4b71e45e460d1542ad524aa69a66920bf4ddd2cf9b0140b7d6593284b841de1758ffb0a75819072e557d117e75c7f650733dfeb354b7d3181c070d5e01cf6e1a5d9d15470127b2f9547dd6c7804c633d2897d248fb6d99982acb95257b9766e02959bd2859204dde8cf51ac50f5cb7ba95ee4b294d6753f9e096249922a4d46b860d0022ae0e138c384534ae4ffd9f7d832b6b4cdc0033165c06f049af4fb934d3aae4fb8c55863bb8db974ddc0861e4462b59f35fc6b8fe1cc3f15d50753cd03f299e8f2777a626e10301bab2277ed428e1489036fa46305a27a0e00b162762f9fcb59a4a843eb8c030549d232b24f5e0709449f08d8d92ae536bdcae3c5a11ae15538c82c9b7ecaa8c934860dbb9846b8937f50224378b663e6b3f4790031ff3442fbaef256ef3542131986642b7f050a07d8825786a400ee8b3803afe382a0c1989a8cf02179fb1fb4c9bd3b5340305f3329bc44afc075fb714f0cc92613b64aca198ab5d31f15d5fa95b82769d714a16b1a192c22bc6bc010529a41065fca42e61a24f62fcae9a26c7bf6522b24a73dcb7a0c03097eee1d97fd660bf53bf0200719430810efc43ca090f3c096cfb9a625062efb3fa1175a8082486308f31fe752110ffe51a38230ab6e26ceb08fd1e7a83740ea835aeae7edf54739a991303a5e40b860a28fedda62b0c0f32a2260683389623d4fd66fa589ebbb459802c979a6d7823d54440ec9362ec9b656560b9ff41fa0819dadecc43dd13eef3787a0d98cdc0943209fb2212009d4b97e53f5f4d09e0940aca3a17d08794301d481d0ef235def1495ea40fd53bb460e69191a1ecee3fee71a007178ee3ebb5379719419b69532a78b0b0710cd9f903fdee30ef25089b6cfc37193c13cca9ce8958bd93f18f3c15c4618b1955dc630e56192f29ff7bb98a027a8b57c9a612c3e25cbd8c11049fdf2a11e4f47fb08452e5181442c7c852205ceb001536a70b0d6b8eeeec84f5f91dd03d94fef434c6ce99e35f6bd723518bea4d98c7c80ab96edfd71daf7adf2c00a4ccd9d236a06068aa299eda4ed990543d1d8a73f9f4315c19840a6f1ec62e0030eb5a2a6d5452f02d6468ab4038e83a3303fc1c5907d8ae7fdd0bd3dd9167ebb2a81684489ba9917f46d8eb6573ec8319317a8b1c2d22f62d3c5db9f08b6b2363c65a95c1eb7545d84e80a21bce8b11a52b67ee9a2c0d57daa1d86d19b05dc0085555476c3c2c407de265db7d903b2692d1335f8a6c029bc2b0728b8adce289b7d1db3efada89eaf4e497d79b7f31ebb49ae18c135ddffa629c7b2e1927e1a59c79887eebace15b45f92fdc4d46c0a7a4041c5581af7cd306087f30023bae598778e0e7a5c0e74cd5eaea606124b6b3244fbe6ed0d847611160e9883eb6263d6655d470246165f143a46479ce5ca9434c1f26c49d2faab23d4014222e87abc8a51fbfa24a142ed090d5769f4e455331ea1c49ba99d6718c2062f7a15289feda53179a21d9f205c011dec5ad175ece051cbb72375d2773580c677d267a185a058ee4e10ee7128b0daf108e52226d33cf27a6e9364ba67d2b15b940412ee40fb57b118529375ee5f4f9f6e8ef6271c5f5bcc90a87d59ba4b53b80e8eaeb85e6f5c1d574b4b44cb7a70a853a330c8d0f349c13b16c2c9a24d214708124e903e8ccff55c9249874acf3f2804d161ccdb12b54ab56b6421a7ab93b709c1c24dc04dc814f1cc7029e62edc671ab8e98037a6dc464de4d3bacf902042fc0621d68b0349cf103388c3201ba1bd7280d6b18e46239c92e9fee7b53c006266eaa0cdd137446ce86442c899c69da799c142b586b800cb7420010e76d5c4e09686bad89ccf1e262b3440d6bf90341e448108fb2572b47486423d031669a69c47ec80c05354f2fb60b8c2bb980f0522b0982355939e49261e1a6c26f28159896afd13588f3f5dc39945ce2bb435cde1c423fa6c1a955a19e4a403fa09d28a329c71f320a9b39a283adc3aede997e3e89ecfa40b37094fc749caae2c1d5444d2847d18c5e0396c30f544b6f5da6625884769141ba10f81bbe677431e1b8343a54d2b77fb2bf985fba76441642d80e5defb29c7ed9eb7782b7b520d7a605ae31736454ed702a4995f2a52a5da8230679d1f8eb50de67f4dc89ca1c5384c47978a2903c952c998c38fb13af60087346f4304f66e53a390f62ffbb760990f008c0520b9b55039742e6051115b0814568b17af2b0b102d45ad2c16cb515b3cc962d9a1c49a42d0059b29fcf1af298cb3b1986f4c888b0b00c6bb240ff3d85096e4ae7a3816a71727664f581d04597cde0c344bca259e6a1ddfa6cc4e8169c4d9769bb73d043a5d453f04adaf97012bea6d21cd232f8dd4f22a5ac53d0e3cf8ff94f3cfc4b42a511f79b381e00ea1aaf373367f0e64414a6e3776a80185fe1a26b435c857bc20986d71460d804732256d598c7c0161ad07451690d34c76efcf4f79d3ba56445e790f1241e7c5eebabc31e8c5d6e6da36811f2dfdddb943c51d3627b49cad2e4a7148df2759095d16b37d7fd0ec7d2bc31f0139cd37122ba17bc382ece5c7131d5972742b9f4723e2b2725454362706fb7774adf4c1fcb0de4053e93408bfd053f2bc2e660c169b10c6f0d822eff050babca89f96191147168b69e64ea1624884dd51a0cd7762ab7ff5abc67f6056067b95fc70e8473a4cd4cd3203969de8f06ff258e0a535649835a35ddd8c671a2b59f4cb0d3075bd59540b1086b32155108dbbef7b833d4e019273ea04cd775807b4914a80cf7cc46931d03079d0c0e7856a09926b41420b9e5a95c1de346a7926bfb16a9ca255d395308371f401c598cfb0bc408f93fe64042e5dacd19660a238ec620d1fc41218849dcb3d50a2562335a220ad7bd42c5df016268a15a15d36e7fde53e3c34b9ac50a8d5881c439a8ef9927c32b5390090b9ac53e4a4eec627707f4a990c3c9d801a08d449d988146d806a8b208b858f5a02db8d573616835cd6cb2e2297956c45b38059e1a4b7a207679edb447b73deb181ab19954bf644be43540b5cfb47f7347984ac57ebaaedff5e586bb55d86879b8ff953d7054ac4f1de4e93fc212718dbd6ed1eb8c88b6a0b17bb3037f8ea0ca2ec549cc471260aaab5ff96bc5e45ec23954c105bb12ac0296a1983a01b3c9d336ef9d4a990e26e48964f0cd796dc6af52b46a4a8d5a736836bd788368bbe883a8ff3d18e56a138773a2ba2734018e340fa502084eca5bc528ab283ad0607f2e427ca0fecd0c4ad32c40d28a8991b498589cc83fc73c2407b6bc50be67684984c1b2b6effe02c57d551a6d3b0fccf9b354558f294993eac38983cb0a19c426412d84eaf89b03bc4131f15317e2a35302294f632aad309f867577fdda14ab3ab3171419eb72d57c47978682d85b94426540784ad6316b064f984aae24ab2334e313508315013d16d335c7519f7c2423e5ddc2bcfa21343678024c538ce75862831a991ded7f8216abf2d43386d427f52a70fe7cf98195afc871661e806c7cd674313a527569f8bba423d0fb73f19ef256f637e45c5cb4a5f6b544126b2460a74f32313b6e99437ec0783fd5ad9d01de2cc262f6f1fb2277c9d8a6d18e45f4dbb1303e76cc90dc8046db4391eeab14b97f0501c392dc53ccf2717ca0ee3338cbff66f8202176f30271671d24ec8250090a5f0e6492559c2365166cb1102bf9585cce4e13d2c11257f72d8ad6d6d022af9a36c3a273ca3c34ef5e5c935d432f374097f3210fa040d9cd535654b129407563db416bdd0994ae666d1e6d3cd01ffe4a8f650cc58a9c85942351c01deced37d10fb53a54592b501d89f8b8b47df5cb16750f59e318e39150f6eacaf505a6157d099a908fd0e3a0666cc2223a49b97a33d9ffa030eb2186d91507f5a150d23d2d5057fc0a7fc30a08c95e3b4c99f338029a87898a06a1ea1d458ffea74353cc8a416f794efee8386ad1c2f96437ac826c8957bea8cc251a744f7a761a3916f703408893331c1111c46eb8aa53f3b7d52ffdc0cf84df774957edcfd8d7a505773a2a19dde58a88f2cd54cb9f4873772e677f3b50846a33813cf3f3fead2fd43c5bb36baa680d41693c9fc51e852b13fbdec986c14f47a369ec9dc3c962c4f1e3a71541605d9d1be69b6f328378bd2c9fb7b23845189a7ffc4cfd447953d11bb70f0359ad37fd6491aba33081a04fcab8f5fabecf73fcd7a8430ad26bff07c751c8754de8b5091deba9909fb96afec48ea9f831c515976537ac97139251190782bb9a9cb762931e68fc4f615abc4f5d53ebda187ba657a758484a9cb055d5485261df86483f9b4c9dd85a1a42ba062b50a8980c8d05e72d04a156a59a348cc770996b7fdd76803b692fe2ded9aeaeb4f5435a71f6a6d52a31ce0b8e4b074b4268012169980ca736423c2c35504507ede49f14c132626a8597f2af30b2e803aee5ba256e9f3cfff822fbdf6dc477575b2f2b89f8078ca60b57250fe9b72989bbbba0a4263c0c44604165178bd6c6cc64014e055d08b3b835a90baa16438ee0b0e36cb2ba26e28f79683ceee7543f932ccb6d58e97deffdb7e908558c61ae01ca8ea92b6447834f893c418e28642e2f0bd645db88efb2152483673bd3f508c53ec0cea2795096b1f2b8a3d0d453c72dde6769f0cb5952181c5be50303ab13422f1e088eef0b6fd0b0572ced5f5f6c54b7b4af08a8552cff889fcf188af3b9cf8501e856bdb57a8d637ef36195fa1dce826bf19210435666580eb45f03f9e3f25a6027d48f867fd40e5e0dd35ab009327cac385e780f135887cda25acef11b21a246456440afaa060bc031329c06bece5a08b4815dbe72640b28ab40819f7a6107d86ba4d7eed294f24078889ad02f7a53c4f6577fa16e73ccb74d80ca2c0284bcda2923c2c717505d6cdfbe219e8d0641e36bbeeaca3490b271c658cd01cc0e4cea259800f146ac0c7fd750f302c1e3574f76d23b2742ef18b4ee2eb953208e87548ccab0d1a58a86c6e71f82baf143b7266a78346c9da4cb01812cc9cd03b8daa57f5840db64b410699db1b46d67cfe089a7a0f9187a20d4db8748e125ff6018250602622d34515af8431e0a38d6e832578755ff6d43aaa188bbccf6b449c4cd73e7145797b5715f5efabc001fa2319e3c986c48fef55b57a0490d8b94c67af7a52ee63098306ff25ca4c7e3c0dbe08027b678053c72e6b28acb78c19677bcc3562b768e566f8f59e9c65168e01e730d12a0895708b9312099fdbf93319ef90d0f09571a5e3305e83142731c828e4b3d9ee64994b9bdd1df42eaa832629544d3e8bcda28c403e7866eecfa90f35eea2dcbd8ffb9c53a984f0b79ffd1cde59e082265bafc2ae5d49d34588384de481060b15ce81cb0dbc18abd295431d721d1658c63c64536a2e977fe05fde4a437097fbbe88824d527c79d80157ce2b4b4f0af2d95a492ffb4f86d1fd8e693933e51a9a0af47c6a0a5f4ec0824c13c120249f6539a367a444a716153a90cec57e02e7122bea6c52081323f250ddaf12f2ccdd5d6bcbfe0c6606789f15ebbcb2a2513d4be56d40e1491bc96dfaabef048eea7667e4a8d3782386b54791cfd9e73814c1a40e4ba073d00d433c1c23cd3b74a14f117d5a2452616e43eb058ad8a4e4fa7b008c0440a5782c9ae905faf4f18e815601c72e120d974a6368bc45559c5c4197702791791e68b9b0df3fa321b439ca8d1037494f744a491ec4128ccc200162c8716f2fb9986c1a729e403caac120eeb947b21c1a36bdf655c3e5e1b0242ab2ebcf4bac1adfe8a8cbc1e26d9f45ca200062eb3e81148e4281efd0a01098418dfcdc3d35da1b2893441a9e3454394563fe97e0e21be66953d05c2a402741dd41125b16a245a40867ebf275e44243e9ab95a70c4e87e666912c070989f17d23f0a89d2e9b432021eafda1f19af3a054274ccf8841b8aafa42f301b2f4fa61ac9dfe107a36089e9c0e84c1a14065377a5c3e65df4023a321cd220b1a7da80b71d0dd08ace0b39a8598a3547f120bf5870500c28038f204b4fa5e0c2015d9ed73ceaae9ea07a93508fe9052ac25c07916d682178e3a8a5af134a69ac4b78c147769c3979475c84459111a6e36dba84dd29f0db03189a039e7c474ad69ed656bb3a232785d21b26c0a50c4645e61e4a2e05d461ff0ae480995bfc821558b8014497357e2d74206ad5bb9ccccfab2789ad94be41fe3fde75e7534328e91f16f46941229de975d68c02fe2fbab73504040b882dfd39c626ae4355ea97dcbe4ca818c7e204668f1a3de33d88020185a4225ec185e411a2c04efe82af98483fcb04867f23faf2dc700b1775efb2464ab0a3bb963152c2884ad7195bd58c590b70fb9d9d23ae6e0cf4bfbd87ff2fc4d6d4ec49c6d302721244fefbd8b53f9003fe56427b92b80058111aa395e9973a8aef679c0e152acba984957942e1cbbe53c26f43fd02c46c9ca37ca0c6e0074bf58507fad50bcd1e2b64e72bf009887380cb1e66ab34dd17f417de2f4e7b8b7d7bf160d55817798847f42550da47ba42da6fd95e0b71b05a0fc889397da4660091c05ff7e9bda3131d8fd210209883f76898c3dc1d3244b8cfc8b8ff954043d1980a678758ca4375293b5a569292e605515258a8eb9204ab10b0aea991808cd1b70274880d6bc5f90775083ad6ee8f8273c51bf0cfefe5aab0a4f6585dd1a9e3dd29fe638b85a1981de9c1023dc758deb469c6014b2a1bd84fa083e2e5c529ae648801a8e8b99749e94467eaf23fdf87945d3530b7171b0c3748df54b45d8732d1cea418e2721567a6af4830b015e3112d424d2df7f77330a481ab6cb8a9dfc9596bbb2a853dcca604dea997c27342064eaa726a49b765a926c308b79a4915bd2803c7cd03b2193aab578377b61e942beac3d3b0b715e7df2b8c361d559bfc86f883d05e86e6d850550b8926caa701dc281fd01a11d18cecc011eb9c3fec2aec90ad2e2442245f3e268d62bcda5df67e0195b61a76a5ae2850e1f961304b879c9239ed8ff3623285ec203e2c410998265b5b6b115bdda1905f4d5a6ac3986b0b64684eabbca1e07eed3d3da0bfeea44dd6cfb9cd091d6acf602e5b2a2e2721d3ed2000366e57d10fb37efc90b2e88d1a647db178232f0578d43fc3e1b5824221f632a1b6fc96405d1d8348743a5baa0a7c7dd0b53b810f4a84c358dbb72d602dc0a02e0d20289480691ea14d961ecbb341b8e28802d5a32370eef28aec458456539d27484b99cee6fe3bae04504bb35ed4c34ef322f0f46e2685a04c3c8abb78f434b94effebf287aaefbfba20167e977ed2eb09ead25bdcd0294659c1e2c42c9b741ff8edb229c6ac2daa01ec7e72d482be437762486df7f3cd52a11809331f50491e0b09b62a6207adf74bc618de8b6a86c434f114daf7fd071dc41f66c1599612e3201cd83a0873819ccea6b649761e81ec4866b1084021c7b8c1a9571d322ce16dbba92f2c70fec7bf82b28ee75c059482124adde2d4d460596361b48358f71046a1e64f197deee2b160d4fcf0fd4c7de4fc4345e1eaf8881cc135b57556835cbe3d33269d8b765ac073a3403d5be7e53b308f7efbd46136b021ab2dfeb1b2a9b87ca20a128f71c80db6c37aa523b810cb8997c324dd35d8d36637dffb40beb4a908a5c34131096a0398bbf5a28a1fccda4ba28c4db8ab51c5f80a61061ad528c029aee48738cb9d09570a374ec30d237eceadfcccbb46d0ab0ac9835dcc711f22224c43db2863518abf80a36982fc06fc4bdebc13a7c5c4fa5e6a6292097918a43fbb4d0a5999c28db1eafb7447f9a6d0e35eb2d40258d496b6f3ba6a43bc72d6273111cf81804c5642b19b38ceae88388d6d40dd1b6a00ceadae576b9db05dba25055655e166ff3383c29a7a2500136d764f5c89a31e70350677d6caf6bbb1a9cadfb3363c87ca38948bee016a023249dece26d4cc7289ba8822f38958e8a2352b8e33dd7aa9f8cbeabedbd2540895d473b69440876b47d65c61d5438658c0dd59bdb1bbb1a1ed3a003ee7471834ecf60e5428140db803799d0aee1b78d71b6d9a15045b1c77e5df6af46ed1df0aa9c120ecb07d9db064d108849ce9442c11f219e7ec2c65f6621fbe03efe88421d9b9afcbcee8a343eb6b40405d68080b864f9c63f47f65594393c5032d71739b05d8dd73254bf2f010578506a8504076e224651d6644bcd864db1ae4de58767307e82c74ef28652d1241662a29baf245688cd37c9bb9edac5ed9da40e05ef91046e5ece5cbc43af597386c2059898a45d0e18c04437799fca40831f111b74a7002ee3f080196c4e3688e4c72995e772944457ce4b5c7281552d715847c18fc3efdb80fa5fc9d59ab8841503bce57bbbe62ac6853852ba64477930dad057f98e18f3881ea47b84e7165e6aedef5b115974003d168e35fccfa516847bd5a83c1e6734161b0edcc32183214aa257c4fffaa491ed878dcf8796170979a9a25b0f6c6eb0b15951678830d902a8989a1d7f4f12b9ed5d2652d82069f8ce238ed9d488b95fda0079b8db484efcee201b07c7fdbdde5aacdb4624ba3b03af316a4433de51d4a261bd915548c1dca05ed95ced8b19b67f9df3d1b8e377affbca5b7de75a0dec7bc80c68d0f95f61ea0d58b884fae36684f2a6e5f616aaaa4584ec01cdb877383f70f2f4c2b54a8780605f9680875472af36e1ed9c04cb21af9244a9be0358ac481c015a1a36d0aa8dfe6bab73a0398afe532bec29af80b3f2e08dbc716530ddddb5912f6d7664466429844464be0db8f0634d5d5a595c1f60142c739b6b41eeba91119e47b1799c2b332a0619eb68835ba54560145cbb33b28c5321eaa77b83e70e2307b23e677f75d2102d622270b2243c26195c5ac7d81f914271afbdf41f19d82ff1d6a0f4249c27e79eded9b63c2105fa333de135741233c4d387657194d3e5255dd2feb8133c9f70ad099fa536b70a5dbe3226ce6d307ffe88b53f9d57b30a37b1028bde10e3050ca2704e133d3ac3fe16f30a1f85579f0ce917410607725cd22e07dbf6feed00787c303ae84603fa5bf54c9414e3c361a28bc453efa41a6c94f2961d433737a47a5cee4a51c1e11ae2032cec78eaa2274f5eee7abaad12c410faae7026b8259e251315a26324c2fa4efdf91280054186b001985c9b6df8434734b89987bf6996981500b00b0d9ff625b407170ba80a8753d02cbadd7c8610ea3b567c3705f2c43abf4458531c5843e54dd2938749bd4b94bccbfb87c8b9eff945e7bf0ea8f5a7cfca72268e74e48efcd8f9243a163ef93949823dfa2994bb4ff6d27074a9456fa5d9906e059511fffbc9414878bbf9b726c1c51e82589f46eb4126d4da9a2d2de89a12e8eef1100ac0864239097b0973d7236a86313c9107b116d7f355eef725eb7a3c8016605ccd15d1b6e87ed5e9bc778f3670daa67728c4b7af5943ed4dd88477f7a90ce307e21f5f01fcacf55fa6e9a4bf7f4f0e2eb6c3093a27d313b94bc8e21bae00a2184d69a5708ae985a881a433d8377528d1645efa41e83f950ea29c0ac845847c3f2ca24e4c7f87ef46813e498ff07d57e37446bec1d82756ca9073f6136b2a6962aa32a3182eb68f7339c27eff9aacb9596deeae08e8303bd57f2d6884631f114db3fba625e27e67af29e52dd9bfceca6b624cb6ca6b83934936f64525c5d28eb03d8d00119b93e9d863904950197b557245b42e0ebdf6a15965d521255edb49034f0c218419120c41084f92f49ea3037d8e083de225f77a8d37ce508acb7c478613dbab97109a64ea726e0d3106175c57361474899a22fd2aeca154acbc404b6613da1e52ecee8623ea240697e8ac6f63fdcab973b3d80d587e386d11c816d1b97e686c3134cae2234837a2b1b887a33b4368d7fccff66880a467f9a4cf420b3a6a376ea7363e73a75ab82cf3c1a2cd1c860bc90bbc3230479f85164cf83e62ebe9c1f30cea003e3211ea0187731dc37f6485beb1219b79d2d96f6e323d0a18d93c6c9ff1a0862172918567bd0e2c753bdd90482b700ac973208288bd41f343a41580dd0f0aacd4e8f68bf2074d9256c2adadb937ff77ce60d4856e2db0dfa0bfc02b76fdd3285eb2760428e3645d041b44bc4a81b45ed51989ced596e5e8581105fb7bb24b1e077c58a6bafe97e8c2887377b3981e69c6087ed555709f551a9c51d05d1038970416c39648353ab36195c34ff3ac5abc71b50a4ac91ef1186dcaf3b3e7276e38ff8ec70384bb071ba9cc23c337c1787fa330d42fa3ecbb8831bb16de84605e99d83302d497f1ad4e561ed0c92d614f5bf46022e16309bb4415cbf06c2061e320071358b1188f803333a5d348e7ba941d01b7be8c9678caccc4f77fa16daf015a379f2522160a1b15ed7d907e19f1ec6ef5af6e72da6abf1017e9423a9895bebed2981cdf2c770d6b11af65b7fbdf65578df751f6dc46b51b2f40bd9c972484c9d8c82e0cac3b4b18dc2930eaf4e0b2389fa522cdf8ab6b5f7b621cc629900b1792f1cd30d6a81ce3015e7edc6f5c0deb750eb61284e6efcc35ef10f401e652a09afa9825048e610220bb0d45d230ba9362f69cc196b10b419ce2216210e9417c5b8e34ae2b682f4e5cb02c3e40c5252c34a08c712953c4184aa9f404ae73184fd330f4d5672c6a8024676ff2ec46e5f1e6f6ac1a9d94d04c8251af9b263d22df9ab02963cf640ed56c520afa26802cce9058d0c7e8ad9fa0ffdc1837ba94969eac833a2b3dda4254a95b8f2072b61e08ed12bca2896ac78ce1c03cbb0125c17b637325827137470f5eb810513c751d9ec9f10a1fb32f95d6ac2285dd8630e998d022930ace6839e7067a3b990eeb96192406854bd1009eb6c5ede2283f81a63e39691233dc0761dff89b144e74c1301838a2df9b176533f5e95497b281377d0b1a3ba78b9877d2ae5968ad7e57c352240910e1a1704845c11c53c750e9b8e381d81c3004191d1269bf6b4e23465c807020e71d633849495f6300daa3b1f54d25102cb77552e170c7de2512d4d5652ea40924e6b68ca65ea409397d904231548f4dd3522a382953713c9a26879c3262a150b4ddd6911702fdb438a615c76fbf304386407b1f2c28d5baa4316b24d18b523da5a1f5194262d776a90022d2e269369bf76e51dbc668037dc24a6aea7b329b5bf1f3d71b28ab7132208ce7c0255400fc8bb183c23ea04679114ce79a6fe21a07f63b09eabed835295f4a8bd398f7eeddcffca6a27d67c61a64ed77587ee8bddbb2a8195f80f4e713706fea9ec2973fe327c48359fa9b2b22597a188863fa382a8c53c540cbc04fc2973ab5b33fc6618d4a418e7132e8554db59d5e5a10a9e1e91851d2d7da0d6234e123dd508cac8ebccc20a23084adf0cf9919b5f742da39fbb59bb0524055f275d5216f959287ccf3c003180d594c67c51af7cd26ffc01e41e87dbcecab798caa0135d97c562a69d7bce3c31b1f61bf23383fea465fb493c2a53f07c3086f8e6806b29c41e6f6fc93aa46ae94a62f5302200bb1a0fbcb6303a68bcd7aa4f1c1aa5ac8b1b222954527d3ccbfdc6165b4fcb94e700ddc77a2619c68516ec8c6ffcade55944e1364c649b87e45419468c8c987145ab17703202f75e02c640d41c8d0926ea9b227599329a67ff5a9c25ac0ac56b8859a3d9d7edfb146086c7568d23181a25125db80b70e2f4c23614406d3a38a59215ed2e4eeb1ebe74a39ff72c7488eaa6d3756613a11a5613494f1e5cbd81102c1e99f14bd9632d7cf71fe79dc6ca4af73938741c3c3746f1dc3489ba610379f3d9960d575136a31448348c8043413e6e4e59f54cbce22d9a2b27ceae7bbe05ba5c45e120ef031fcc01906c3dce18fe7b7c0c3b00c837b54359991b247650c917d7e76f5a116a2b34fbfa53011a6ad1665152b11fa4f5a5c859dc776a09c918afa6a8cf9f51dd0e7f6cac737377c71a997e39080a6f11e0cf02f83e13bed6561ffd417fb6e787609486afd0b41d5d19d8e0fd3110c34b18a9946fd91c29abcef7b379f75bfc2806a477d713360ea937f9ff80898bd91ef5886b9db23e3ad323a83609edfbad9c5d0d04e6424c5333a343384e9cc2fa49f8c6c9adbfe546c90cf449ba615832e9e7ef29cde97a5a2a718f017819cfad334e36c5c04be969c8470b6f2b859e4416b241996cbb2448a76b007e97f7eda15e9c720c52be620aaf954f099f01f23a99747b4d6cceb807e7f81bce563c540e83620a561615f572f28573ef3d716c8ebc1212ac1086e3db9c1b1c738cdfa951519343b9142b622a874c250d77c565537d5328aa989fd2c4ec0e5ac53e4223724b285fe0c031c1abba0e4ba8909e618f47c2a2c375940225517e7211c3c444da04b14109f2da1d76f0ee1d8d90015536b108863208e316ce2212005e6ed0c733d608092203ad24452a18aad23a389a900ee89128316282dec279246f7d8517a834fb06ada142f633c9019497e55457b8d63a729c3402660c74f603edc9cf9a0b4474fc0bf4dc5f7f7db3f2c9536144a6756fc6206c1dd0e3c106e0b5ad1e08337aba559c7e7e3ab721dd38c9d9fa22580011096b030615dc1ec5409ab2ba049af16ba69a656778f6424108b2144a84aad274263af1270b5a7cbfc11b64a53944dd2d22e4f5499a12d323bc69341ce81142f65a149af6410998dd0cb2fe2399723014063b333b387f02d65687c7e884b4304e30a8dd27a970f25b9297012ac454926d1633e773339015685e4c5b6b3de5055a7cb830f939d61443f1bd995251d19241dcc6e28edfbdc1856c923086dbb7492b34d9f0619edece6ef2e19c97a21e79647f9a596400ff043d12ea658b32de9c66c80e953c8a775a9fba7b8c981ee415a95848e2c64af9cb73041b746d59706350cb7fc903e60814e199937f1259bdea31a52065cb58f2f822a1a8015d7639a7a5daa3695120dde477f6dd81e35b02488d04bc307e5038d8707deb252186f0400e7e4b4c2df58ddf99115d2f0c5efd046e530760016b558bd3f7ba5addb8bef2110ff98ca839506bc4f8c367140bccdab44f6389233163c1211843310e425390e942c9f884096790de3a9186c3a8aa8a2f151885b1bb77b4825eeec6caa9aa50c0ea580012046caf0110ee5461d8c6f96b86973bc4a30b6f2d3da06200507ec50aee091f101109435937b96e8b667bd54d44a2d09c03351aa8047a522984baf91ee1f6032b221414f8c7936d6d07bf559005c28258e9eb64839b68d88ac5829e4a098880158d2599d19aee299ea122d513551571d16857fb07906b05abe2d0dfd3d4a5c6baa0b44ba4f9b386b12a92a553085531d6ceceadcac00411021b9c60580d5a0df90f4f73f58eaf2867ec9568c0008c89ef4c27279097753a007645b2fcaefb5b3fee35d4f0c26277ef600c73be1489d9995fb210d144d74ff98c5925d0af2d3efaf69c3ada3d8321b6f4a935d66f2ce40ff95fe56d0d4a14b3c2431ed8ad0a95a812570c65c036464f23b0cf3d5cf5fb861aa9291ee801d5217b7c5613c604a64a151a2f29ee5d387503691e0993d7927f0f33a01a379bb9040f2da6e19195d065d6b666fa6b9029bc675797f987be54d4b220b8f7fde8401e0c6cf3f11065e6b1ea69f1567cf1a517867b42f4011e8935e6561851d9b47a9b885d88eaea12f37993739da8101540d780f91ae86dad35192ad18e87e2100a97b6264d1c839b67c302ca2c506eb69b65e6d1d3341e0b2d659f5023d9209693d90dd043f293baec9f348cfcd52661a75fa5d402a259e2a0fb7eeab01ad2a95dc02981cadcb66a3a1341ef52b55b22452c0d9f7cdf37840f4866dbb106a1fb3e77950cfd57e13cc0b9d716f447817f13c3442b91f4490b7ca37aef681c96c98a0f24a3086d9dae34d62c21a788c33287824a81b86670bc19ec89e8fb201a3e0dfe45db8a3b36651c2c2b80eacacf015524ac433d51bf105380cf605230c7effb03ae0eda4b0ac64d50968b362f938c7842ce02d1c43107fca743e382e1ab0fa6ca5123853af6774cd046617a9ebb5b9e238dd8b15c644a9524163ce886907d490f08dc84acdb338cee036f9a1b43e46864bc91689954df8f315e04c1445f71b8c3802cd034dc3c4ca90e33361ba3da616fed369bc03f054e3f303813aa537c03a0e0365094c6bb175fa124c1e0577fd6257acb0893f76b57aa2ed1763a0ca50170532cdd3bb8da4c408b639d9417ae287e68f40b50aa13299f3baaeb75c75fbe6fd35a605b3c11af06ccc04f338821f924d360fb353f43bfbc840959511a6028bec991401a3fca7ef2152d4fcfe44649a1d0ecab231783740245d20d1a11f5c2014cf454467fea0a9bb4bb0e864829a5e90119589a863287cf7d3ba839589d713d6560920e1f562fabfeae808ffe079fc482be251b9a2084659e3f21c0ac2c9f10ad2d94089951f45b210faab4299e8972f2eeb63c0e95cb3e6e542f436f167a2be6d60ba8d588ebf1763b438535b0697ee3a377dcecfa2a5b71a3b73ed935591a29e80be2655e184959da183e7a82739f7e761d47d2c076c740526655f8c70a26c2a3b1c7a224923d240095677947133875f44a6f9cdd574e4099b80aaae2bb54a7365ac99597eac654a0a70d77fca48392ecfaaa7e8590a05c64a15d56d7e68262097876064b475b536aa9a8e643d16d3b62619300df14788ef57641725b371869fe1efa3bcb5aebc9ae4bb929874daeb755dde53285a02fd701d2a99762afaa9b17a6a1bb7566ffba2d656acc4464214d08de0ec5368b791bb7fbdbf877e8bdd7c1e22ed33b512e9340b6259f1aee01ddbbd38d4cad4e80ef7f2b0d0dbaac46efbbbf70f3183f43a94106d22242016120357e1897684b96dec2706103e02ad5b290e11f17c00aeeed9fe5f1ebdff04a8c0b7430a5ca3842fb07c0b5c24bb422efcc4875eb61f4892d986b78359eea62b3b7236dce418989feb8031d800f71b3579eed2708735385535dc01e96bacb1416cb568f28d87da39dd164a7b131a1bf02858ce295affb07b1ce652d9a11fe20bf8db6b4d0f6035ee438dff12428338e567d045aab8817c90f3efd3970ebd7c2970ccf2ab0e39b7daf06bfa8d73b4be0d9ed5a1d1dc4517df0f554d8ff9ca28653c8781fed6329ea7fd30f481c38c8d4852610cafec5c918e487ff8083bd01ca848833b5d4d5d0c911e101bac52305cd0148fde031242b857b665ad0ba202030dc4f4964fed34de6b6a5cad8ace7301ec3aa444067ae65f645fd552866a54327b9727eb60623fdcd615089024eba512aaa966cbe176c1734caca0fcb27921d4cd9b3ba6f3b39cc48c47d9cd27196739a6d6bf82197985377394a7b82928c665ce950c0a20a487e465678d095d24fe971f6a68784b787c543744813a0548211e1af7f64221d37bd3e7b80696175ce57d7aa7c00e110f7c324c7af33b00a0c05f2d7da10ced610f38aa64a93d00619f19ddaa9a5c04b0950841f42a1ad5cfea8717f454a53708616d02998739a60edc96c3b3960e4134d3b94c95a3734eda5e3c3c5dd238a4e76517e3226803eb49e5c025f4f2543d9b42e508c746f0b9acd353f7ff217a3153fe9f30ed30d559db615403d46aead6dbac1454a8a5f96db458bf06315fe15d55c42c54f3b7669566d978b2621006ee695fdf9a39b20911f6ef3e95b549ec02e60ea255ce3879723c64c1567d7d86ed9ad6dbf6e19c20b9134a1ec840b2426eae596c8cf93e6a1a5ba705b86621dee38a9d493b33ea884d497c8382f78321c10d46b9b0ad362b56a6a420239931115a302c128fabf8b5f84c142cdf6057465d05b55126ad77566eb417653da98584ce07ab3a25a9059e3957d8abd8d0208f7ced4b0f1991681d8d37ab8071f6b8e62e920751f3bb30aec820298076b1cf08b631c7c96735d5b56c7fcda01c18a93d1e508cb3407733609879287aa4026795608e80863d89a4c4a9010dee4618140934f8e25d1964721266062fd0580e002c039ee44c0809a2718f8a1f7cba1768d07ce2bfafb3eeb1761ad56902b258f04b395f45309c7e67611bfd8d51ff45f59d851124107ea076ebd049e53b0b16d4e651f295e6fd3cca4f29c026819958918317a65bfe76ff8ca9401a439b45f162615d8c7de4a05de99bc1d3aeca922d4832f9c28212a36cad140616032b540c147f503a8622a1b6f165f83f3e34204a07bcee29381d79851a888a38f3f2804f3e36904b999b66f20e0e7a22fee967acba80eb2dab255a68b1da909cbb696253c8d5e33560bc871494b4d0a2f9129af19fe22cc69e32d1eb884a8dfa0872f02e1b13675374b507ae9381cda3d51aa86e0636895e6be0ba19dc345aed81eb6270f368b506aa9b81cda2d71ca86e06368bee1a4c5f02c547081d488c7c620588f5bc2b2b5c9009e4c67802d0be6b19eb0de6a9347fb12bf7c40a5a964c0dfe9a57a681733b7652fb4b706618a38f1815c0de8fb7e9aece665f2d5b9daa4a0608135e037c5f6c22e670c32e82ed24d761c0dff3e5b5691c878a4cebb85ef6dc6c5659b26473dc6505b5ddf33dbb5209e5ef0cca5ebec033be57f422b0f97783996621a6c2fbb0b20b69ed482e55efe5aa30c8230a38cb3169afdba6b77bcc26d011a836b0fd00956579fd4dde941e98253cd770eb02eeef341944f8595ddd88f48ba43aea61e33eed13c2ff773df5fea67ca52014582aafa2d0710e7a8063c9a7e59a7f7b43277c3c49742f2ee83929934f24d5c56152aa5221423dbaddd0b8322a368bbb40271a3fe066c092a3c70b5cbb84892ebaf58b77a6f1e0bfc84643ab445efd3e90af3369555bc9d93c928a99f107cf30917d10e3dc863750c4cd976ad5b9bc21accfdaef4c523e01c1db4644a525a629163f56cb5fb1a5fa4c56ae3f0f9bdfd11b7e37976196cfb3390bb494decd0bbb2fb6762c7638277fa16bc4f4d8139563648eea7bc1da3fae863cb3e5e0a5b6505d8518a5b623c182a551fe9db2ebddbee2d89c7e4e2143c3ad766f318b35e046ba0340428131b8edc3d04f231028016d449dc1951a705ef5cbf577198001371c2b970ad7b0c718eafa71d7742c9441b963983508972143a8ca9c9e01cc2cded07d98a85f79ab5c42a8695dd258f100868f15585c00b5e967cc2d7f9c8d12f72cc94b51d091cec6b9cc5000dd0338911194a13ae82280c62bf6c30ae4b5fa14392b6f679fcb4fb6cb2ad1f1f51226469b65d67ee4c02a6cbbad30b3a3ea1921ea0dc4ea28c482e1781520cf1626d5cc72ab7007ef840b44141aeff8fd4fe2650816e66ac1daf9bc1cf92547e69acc09b6c99a102196fa5b0ea1f14d51f830743a85a14c90e8fd1c446a312b026c40d7c9b97089dbe614e9bfeeecdfaacec19fd584928b90c8a9d84055fc238460f7030ac5a3bde013406015da84553cbd3458f80ea0a85bc8dcf97981f8dbef15b1a0d4e146c2f96c4700013205e5eabf7bae9eeefec14d65882ac99edd57695d9d1e40fe6baa0f58006f3da4dd264827c0c053ef5080f4a6be80d167102d1408abdd1c29c0f247ccdca768adac41dca3c65dbf2b4f0a21984837bfc7cfbf0eda81cf04eb54d41af1143988a37a4d4e8acb9feb750573142449d22cdc346bcbb5e0f0cff2d5ca915dbdefc41d11cdee5c698daddb38224811e11ea6dd03df799933978a5018d05f6fef640ac70d62f9ea504766ef67461f689a35566e501235b4133a962bc76fab941e6b67c3ee19fc9d8ec3bb39a1ba96ba132dd479fc851708fa6e2baeffa1a62dc9ac29a1842b605cfed2eea669d30ea0223047155352049545d147f92caf9f7782fff820aa246f0dd963c394ae5c4352e244fbbf237b4a0c3753aec9896ad3089c1026d5966812143d789d2b6e4e21e1587155b6a929b33607079a7f1410c85c133b15c5fd29afdc04faa035ff66660e2f22a579d3880b22cd94d8d8cd5291af489094e853d7c40ba115dbdf0ab6284f4ae3f27aaa4a699fd7cc943a8463392e4bc9193951d73c27cd35a386cae07cd04fb2ae6939e08892af0ce826504365a752efca47cdc2cb20058224c73ec2234e511559177bf734a58701597215073749c9c84aa22bf792f148f36b8aaec99e656f3fee2088dc4466c9513454adc9813c34b0696719e85581e860873a9ff460bd07ac82b8e42fbbf48f284cacfe87ae12c6e301ba0708dbef1461aec0bbd908954172873d60f051299d2d153aa48ae1d14d5786b18213be73c0f91b882a20832d8168e282067b0488e0923487b708586b4eb7e716dea69edcf9c08ee2461641d015de046ebaa3379a2dd6e38376b9784e96d82f6eb81025832adc646b668c2ef3abe92ffd524b5d079de21f07a78df22a9a93d771e6069ae65a0fabe6c7fe8ac716758c12258f7b98b468b73942e7585b10b49eb96b8cd9ea6a4ddbf2ef85d8141f7e7af9716ae7b7e62a765f2ec7e526664da9086ebc251922ba5d898edcb00ad4a232d6b19a9dda40df08bc2f85527d5e0f7367b240ad60683e5c4291c168f9df125c695321184ce1f6fdb5a2b527fae92ec2924d461b9d709e9ea3e0f8a1930fed3b0cdf88bd60ab0add6757db43178879911b967acc52eba4f589a2c91c4e80326fdd8aa414741ec4732a85f2a939bde45e75a66e317f61c25709d9cdf736f737070a21f0f560d82f31eebc4961bf19c30a75184d161e283e622f877fd4329d24d32e97a130a5254ca8b2f88bf61f9961b00f92361648ab41c12a58cc0168444f53c59f4414f3827c40a3755994018028663d3d82568242de0aa213eb10d43ad8df3ef188bf9574b0e7a1bb66193c4c3400ade174f026ac5a9ca09cd7d741219b7ea8fe55ec23d81c166091175c1e2143034eee70e0a68e66641db0e5f39393a97bc7961481d39c912a523bb5fc485098f91e07b48feb59610e85dec891b0d594d0e992204f18f35864920b0c18ea8fa0674fdc067c8995968d370f1469b1dca0ebf14295eb65cf8d4f01d21cac8766a9d6ebb648c1da872a1dae2cd6dfc128fdb0df933fc9bc8b81d46293ac44785bd80c907ffa9ebe562946798bc4728459ccc269fcf87decbd59c8f0bb8717800ab46b475cb93ffcbae5864373c3ae64fef45e4ca6cf6be24dfe50451577c41f1c807562ee62868f8c2ae4c2becf93f58cb008006743bc4abede3000a35e1ed37862f0b7e2f876c76089d1e21be8c62ce15f32b23e53e838fa5f6bf47c094279cc7e6ecf2a4b8ab801f6e32f79d9a3749a19474fd875bc70053dbda0544d9c7e3dbab8f27b0119cef2ea55691a5c07eaf03a86c70782dab4761d40e26c09c2835d735a6a844264b91f6c1742c9127903211cbadeb8469e9a1042fd739622dcb6376840f00d51068035723208516888cf24338be7ec4313cdab149158dfcccce03e249e2a7963190112cf944cc483708d4383cde21ca4b5e3b2f98bba43421857f33f4872c6ae2879a326e3383068eaf55ca73a6f0e991ff5802928f2786cff0ed7890f09ee4a6f38796a4064a49e06f04fc1ee8834214de6b10ba2e08fcc0ce65ed545b45d250907d02ed95d82b24f644a258ac722424b211c68328b988e377658ab56712a4466d4ac7666ca0856d279a1cbd1220506b48b2a49d1f51e13b3e275b3e39f58b064c8d17012b8a63aa2e3ac547e1aa17c5f5216deb5aadbc3590e96bdd37bed88f441d39ca7fbf8cfba18ee8296cec346d9b63a7ecf348aa95fe6491834b06b71e79721924159eb3476c556b5c95fd2ae9edd068dc4caec71d426e0de3c1416a24440cd418981cdbe26fe57333b6b9ff63c81b2176ae8820500127cb52fcee5413f3a5c5efb286ffeecbebee602b923b61d345b7c06de8f977944e717cf5a96ca26e253d007c9a1b33591dfed8c73518346903b32e66742fc6023e0b5adda94390688a8d54d7930a07b92d53f117cc2e39d701f8faae16b833a9a4555b3823ab4bec8895157fac8ae95826ffc277519abb937d17b8cb2ce328c9a771b2b59a6a26e96a19eb5ed54286ef1301f958a034f79c911d9d7a0ed3e85d657282e6848ea16802486649780d9cfde39da139f9b8c3fc725e97003b29a95c75e1ea73f3686c88f1544c1682213a52048170779893232faa678c28e804d24b912ac9da2e8860f65901b98c4c04dbed7f775397bd911ae4744cfc9a35e90902d2988b1ed43f0379c3c8c3671c3967b55acb2aa3de696a65c46748420f8aa02667b752f6f22dfad0cabd8c474d9496f6c640eb6c200e2e4c1bd938c9abaf08a8c0539b74bbda49c2b60f74c84ef9f7b0b7a54c6139740ca75c161bdd41c6ae07ebbd4957004b88c875085853eef1f5cb2b06831d11a8e4f8fc0bbaaa6168d08981f756b9e817cd44ecc1a50e8f0131f85b7c6864bd4e920d30141b5a69c806cc96785f176ed90700f949d985b4eedf00461a6e5fb637694e827895f31729f5902b1d171c7d6c6ad5330deb2c285b1c088036266673eb7cf74e4bc59aed3d26db4f85246fc0a8ac455633fa2c5cc9389db3c8e4be55fdfa2b08a80bcbc3ca7b8e6aa174b7142ae7d2c570363ddda23ecbd7706540b81aae25c25986c6426e5ffb8b3964ad7e1a8ebc4c8c4d5af8419d32a66f222fc457cc548dce689c5dd7f087e4f538823a0af025708c925caf1876bb88532b98eb3f948dc3bc1fbef522a0cc92a169d072888fbc23dd1278621b0d2c43b8766a38c28882c5a7347fda234bdaa7053357763aff51192e4b7bdbca47c46304667b8509af28569dabb98ca515d4b8787aca8abd44fcf57c996560019ff2b8641df53a9e83802200013a46714978117ed3cc1327d16591de1e3f70b685286bdb283fa26a7987ac26235ac98e6e36e7ad1b33a8aafa282938fbb65819ec11538e9a729401abdb9a60d5e78c083b7ad4a64c1b25ba3d97fb9cc1ed60c03ee28902bac0da6c9f4dc983ae292f003f9125efa1f9e475fb204585aeb95a1fb0ef41fd0b37eed450ad408d339c3a4eed0dc474aef9ade5ab2d1fdae9797212f8c25ff2fc7df9c8a2de3b64b0829af7ff41f5c015694996ccbae512191ce1b32ef5d0dfdc92ca18bc29e3d0df53572e90c29a0a58b618024f5c04e2f9aaa01d41703aaac3e955b2010a5a40e0e4bd2d519e710ed8486205c0ce3ee427146c4f1711135d5ae8af337cd8755864a315442160806c332dd632e04282590cbb044a93e876516a2613b6397509518f6c78c9d30c9bfd437cc59d748dade524a29b7dc7b0727097b092d09577268f1f2b87728293f9ec4b1ac1217bf72f30419928b8a0d1f2a8a7cb80b16ce6639c73118e37056671f701ce79cef6ba3820c20d20eac294b4d3ecee5f9cfd073ceae2b8ee3243809e6808d301ef7c7d838f5d8aae8b115570f739d125649228f1f203d7c788c88baaea987242b9224096371423c6aeb7a9e289c3349bb0bcbd71e2134ce39874222e2d775e538bc628c31f612a1c4b12b863ae2258015e9a3acad2b668dc91c2324b3561cc618fb18e1d6ceae3b9c5c578cc3b8cd59e9f13c00cfaf56938863a5c8c0e1181cce4ad18eaf423c388884a82224036bcb88212acb62dc4502ceb432aa7201c5678911302d2f1e77135616b776153d30a2b7be85fced76ebbddb6dbd21600046371e4b196949a53871abeaf9a2852181b3ab897f7ef07eeb2bbf718e598c5174fdcae1d795af39bcaf8d4d0ee1d9508d2666567c58ecf1ef315e6f3d970145d673fd9c5f223a8cfa7b87b91b73ef2d1a475cda455ee4c5dd4bc34b09181630388a467c572976f71ddee165ef490c4312e3a6f7deeebdc76fcfa37bd7fb81e96aaac8d7928e54942fcb3d8274315ce115de2e733bcdf560c4e9cd280c1c81934564036c09d6d0175604f9b7e772bcbc84ecb154122722b28884c6c7f4f4643736c9988cc262b008a245e91b0eb71ed7531c0ee3a4e2911ecfb2ac11abbfdd6e38f8fbfd46f8380aa60dee7191af5f7bbaae18630c044651158b18b158c7881aff124f087439433ab19242e600f379e2b722111e05b0307e6899d1c2a76904d317c743b03cbf71aca376bb6671c8d3ccd1d18ddf380a047e100b7cbb2ecc9e63dee14b945f0da89c5f18dff50afae9db8de7486ef7de7b7b74fcbdebbdb9308ac1dcfc40024b0f508454d61324588a58c872161130cbcddb6e622484080f18122a7c576e37615d2f7befedd674007c73e243e7cc28636c98ecd9e27cbd096594b6bed11a0fded659226fd3bdcd663c6d3cdbba2401dfcafc0dc1bc19f1c0e4fad6fc2ae15b73cc34c3399e2ea4ba3c6982c3cb8fbfbdffbcd49208590a302932331f1c525fa28052654c3f52665c52674d4917db46d8120626441723cb292b368c6debdad724251e545b24b68aba844ee09ad246931f4082bfdff1dc5c6badafd65a17715ce8556bdd7b57eb277a6b9deea6ee5b7756c5eb9e436b625ef72ce4d96eb49e6fceb94d882af7de7b43289df018df04e0106b2e689cc4f135a12441e2620c85598a10be5be5af8ddf13f7b0004200751adfd6249acb2abf241c2c96bc647045d9da1863bc8220bed6f8de3b8330afa21b515aec08e2bb5b7fa528f98bfff655afeb90218ff1cfcb63fcfbfd7e42dc02c6d8d631c6b8f76bf301e9c94804230b4f13151fa6f21863cec3489cbcc615e3db8dd772bebb579cf79577af386f5d792dc7accda6ca84f057e7a6f79a57587ffb973916c2b7a61900be3d71fede93e89e35da73c9787b99cf6675bd6736e26ff7b082032a70a6e26fe7800890fced2768c1f16fa7415995df16b0c4df0e7576e24daa285547bf2430574a38fe9a5061c8889ae3f376f6f6ecfcbd9765ef97aec7b51a1412e86bb55aefd56a595c7fefbd4c66fcad9d43999eaaaa5c94a83955ede63dbe2a54bb4eede607af7616ccab6a37519b6b548d6a8fe2d2f318dfb460b10170aca2c6985c0cdd0637f8fd541f069e897c3ce4ab59c36aa1aa7ce55ceb2d518f7b8af1c9b1be5d6776110bbef889028329ca77b5a41859d5ab45ec31c6681227e77cafee11994ce65c755d5c25608a1b35bcc28c8e2d3ff7fbbb40aedcdb4bf41955b668145a653ceafc7c8b223fa35c9f736e5122f428e728679c6b39f7535985e324db32300333ceddcc1418e36105c20b880cca979163d946cc6bcefd0c86209171f92a296535e70ce45b533976e6a33b7376995eee34d9c30fc4b766543007c330e518e08bc715370e87c3c813b494d6f1f23a84d77a07e9f5cef1fb304ae7c4b32c9b7f8e7278fcada7b79bce3855de96c2db6c5ae3bcd658885bdaf3dcf36e8678de537ee3e4390e0e9dc6406088185feb69ed64b74683ba6fd3c6f4697d8944b3edf0b8ffa81e63fcf37a0c22aa2b2945fd7e7e5dd7a36b738df7a80a019807f91807afcd3506ff347245f856e64c070a5f7f8b60867f8b617cfede7ba17e7f838f26af0d46ea0f3e40bee498224ca1c494f573e43c1300c415019cf9e8f0a9abb09e6a9c776fce5a9b413dc618731e5c7e5645288ace80a648b1a231e628942d5d9901f92d42848711a7232e43303e29677fbb099cc90c07534d8c8a5fc48a65272e908d0ce789c2a92ebb9a903561cc59b41021848493193a7c6061edb1f61a81e96fa97462a2f06d872e609c7861f2b7b3ba658daea6282e437091f128164591e284c51a636c42750912a14b130f4ed5303289b10d97a0bf3dbd7d7339b2f80c1abb715e9b8fc68a462ec7000f27b0265756a46240895286b55633028a5b741c8b6322929c9df123c235a2c88593b127491c6b9df351ce9cd74431d3691ed7e70392f0641991741d9172f419b162ccb50cbdeea9d623c26e9ca7c59a24e0d4ea87a6a11658b69439dde038c1ca5a394e6264d6aad647fe0ee0efcd39e79c495842b9019483098c8baf8917aef270529fb91844460bda6d42b5807235cf447b5e3b0e5c9b2c3c6d525f8c8fce6a72ed154e93f6b49fd1d37a0eada93dadcba035b9d37aefd2ba0ea5f1684e7a5b3e4781994a111566ec733747505e8e85a07618792f3fa71e8bf0185f2c1476b9e6ed3f312fefa8b3163278987310563651f0f88b228c2e6724c67c8d532876b6f941108c7c224713f6a7eb33079ff30853266a9cb86197ec54f896262cf1644aa8fc7991a14491bf4676fe40a4e3888e302066386531e959da4a1c8190b580c011ea7a92ca89e2cb572378e44e2bd9cb8ccf558d44929e2ed842a75044e5af01fe92203a31d2cb0a1e11454c566498f0ddce5ea0257fef3522b33029290bb3d1bd426d4c5f515009d0959b153e62415462f8ae92e098edb8f653b7575e5779ede63e5aaec31095047cee9b255af1b9eb8896fd490bd7d3938d253398ac7a8870434222e615d6d78f132558b84ef8aef14cc31993eb200382908d27433a9f3babeb3d1a0fa6ce47eb76e640f83684205209c1aba911388442d0985b48425204e99090caf1ddcef614f97bef79de7bec002b8aee5b137e70a44cfd6801314d015d4d05294d057b807438e89a340815116b1f1bb9299f1c0f34bfdfef269b1b84909af6b537c97a6cfced5962225a7385787037b9f3761c3045d8f168d01eb2ef56b82f805d8b7e7b8d2d6dd7ea02b06b71478fd28cbec36e05bd4f0187de41c74d380a35d2e2ab3f3fe4fc8ca6b09e8a6050f19d27d4eef23ad8b5bdefa09f1df4156e073b0e3defdadee3f6fc944337d98c791cecee1507bc179c9a8a740c511dc979226e99cab02281a844b16104690851860e85122b70628039edec0891b2be50a5ebc4951d5464674e9f3b9b875d54a28e97e016166044ad20346412c30a234c2dccb0cc606a7a1ad28a6642c90104054bd889185a40b47eb69b760e7d4d77bbd4bc361bac5e0415854bbc847cf9c73f3d6bb2b9dfa3da7b9503ef1a8bb0e6c9f49cd76e1728bf9c38411464f2e2d34364894fbf6449418485d712a00b5fde6f3e12670267f428ce07177c14277c14f77b14077cb4b3c46bf321878ac9ca4689174b3a3e1fdfb21038c125858ca4d8d3135fcbf6f8969d822479144ad1e4c591af65797ccb269563ec92351bb24c6cd3a33558a547d9e1a3ecd1a36cd2a3fd86bc361d8438790db1b4eca0e25bfaf696ac810142098816625c827ced6dc7b7b72435b09256f80081ae7c2dabe35b1618246285ac51d2edc90dabbd19b9191fbd1d1fbd111fbd553dda6fbf6bf3428f295a8e7ece4c18c9f1ed2d8519663e9048b98243e86b6f4adfde96523c54660839fbe26b6f38bebd25292ddd868fde9a30900c036d668fdabe6cca476d4b22f2519bede8da64e0d850110492224c6e7c6b338f47285d435e385c947cadcdc6b7b60cf04011b92a9b2a0af3b5b61adfdaaa8cb62bdbd186c56333c16333b2f9d8881e6d6dc2476dbf476dc0aa6352591b33f16d6d5933bb216a4c3744ada95663e9d1b6367cb476f4682d29b9ac018344538abead096b4665b42765342c9a11dad5a32ded788334e2a3b4aa473bed776d68451529a88498580df9687c4bcb02aad14423cb8f1538be9636e35b9a10056650c85e50d91932f3b53419dfd292949668439ad6aab5ae5feb58866fd76512f9e89a7cb4af47d7c6025b8c568c95e1f840f1257dbb26c52052c191fa61b58389af5d95627cbb0eabc8708a43254cecf0b52b8c6fd72ae3d5d9b7ebf1d1be620d594d0c598d1e5dd7e0a3abd0b8feda15f8685789d7e643931728a82b4a599646be17dfaa558f9a57ae00758061020363e86b5517dfaa49e5d8966fd5e5a3aa590e952947d3a36a0d55e95175a82621af8d492599c2e7ebcad31626a46f79d2005ac0273d48288958f85adee25b6e43e4d16aaa4a12e6f85a95c5b72a3048a40a552313fc89098ec58df0ab47f9113de244febb361f92a67e5dcaa0be9a283990052564437418b7302df95a1ee4c20f2b4014b7bc6824a9a0f2b5fc8827292df1216f423719bacdf6d71e7b742f5120f251e0d1b5d9000a273825c024258b8ebedd4594cb27ad628ab0a2afdd2bbedd67441a5b578ac808a6f0b55bc5b7bbca78f5e8f1d18d75659bb862d46e9f1d7cf444815529c85076210251968588afd5c614dfeaa34e2ac788dfea65ccb7dacc4a335935b5bad5c3a33ed2498ff68cbc366617d956d3d8138fb130a36fb35210133047902c4ba2afcd28becd1f60493d9982b1024886afd527bed5c02091166a2322f909913f7b9bb11eedd948363e8ace9cbdcd4d8f6ae86d8e7ab4e7dfb5f9a05336432a0c911b244913df66e087231c3ab2708425b15af8da1c147e9b8525b27055f941c329cb8aafcd25becd4939becd4a36dad7e6a51c6439cc1ec55f8f62e5a3783944e2a36bf341c7160c2424564a9650f9487c8b93983041218db89a51c4d762a52ffa160fbdc06e943d9e046928f95a4c7ca26f7195115f257d8b8f18cb04366102c53e4a2d0e3eda5b2c3cc2bf0f398820844f3d6e888abea16f53311ea31650c88e9252f8dad4f842dfa647a7104f623029d15254c5d7a6c811dfa649e558ba4ccd1e0591329d20d2a6b4c6a3bd4d87c0f4087d410da81e2050bf134682dfde2405ba10415a121a76c1f0b55719f4ed5d7288a103ab4912a121115f9b027d9b0283448fa6c247532314dc27572ed63572af1ebdc7165c22daefefda04c04a982834b8843850f87ebebd4012e0b8da92e20711a4325f7b833edf5ee18fc0cc49b9f32b5a2ae16befd1f77c7b939496da3bbc4d162033ad5033f40b4d1aa255c62b293a281602501308f813f57934f8282a7cf4f7282ac325e8088ce78771c727e2dbb3ea98548e9d7d7b9afdee64da353ddadbb3066a721745e25510d3d1908fe75b33f921e88988d60b9d292358f85a5309fcd65c7aa9a2a5458fa3232e497c3bdf9ec060188ab6fc4fb477c0ace1267b2550818b760e842d7de0107254b461e643fb46a740318282c718f2e8e843731ead11e5934487882c28ca7c28cea39dc6040f68cda33829438e739e81c770112011b2836be05c86732724e7718e879c3b193def39b466c3f3cecbc0831212e273b95b96fc5c0eca69c7c7c4c4c484c1fa98982059368fe1193a379194c00a4a4e4e8c1342366ea448e99818ae81f30cddc4750882e28320504b62327024bc9b10d3737d8dc9c570f4cf9e2105f4035d530e109ab01e0715e4e671b80c3d8673ce39d0d673003ccf90e3f118ce17907b5c37593c0e070524eb714d2a1e87c3c3b5f7ee0ab672b0e2d675edba75bd61e3d775bd417c1c2ef82bde080102af393ee76b2ec3ca39ef9bc3e038224b690a92aa113e7e86784e64c7962a4dbf1b4b787c1cc4732a4dcff7f3185e4c861cafdd389c006c1851d9d8d2695843a015050504162613477cfcfc3d17f1e539e7750d1b8e1c7c9b2bd2685263c6af3642e830508712e17c729d49257ee2f9816f18899198632250096bc01867c0b89f419d318c01639cc318e338610c18e3988e31f67a330a638c3b4be231dea061ea7138201616873e0e8744aedddcf9b5a7ebd34e945fd735653224051cab1c14394a1d268eb3f3197a8ad6d87c860cec8d8ccff53497e39dece601781e42f9319c43cd05bc129974962752ac187b3a1206631c0eed15e9f0d3220282c6f3ce8258f2bceb42a8e8a7ae7b80e5a3c1e6214c11144f3f1950182b078bc301000c975e9814616ee8623ef85862c5845359160a216048000347078a22a922893329c00de7062567589e83f1218241ca9931267c914201843824c887190b3b582085b81284c3a48c8a51c7e172660a6a0e2aa3c28fe7228867374ece39e7bc83e73138be729e428d0cf18bf28417c43224d18cc425b27db39dfdf12cdb65d01adcd9de635916eac6ef31c6986571ecea940375644a940f93902f8fa3783dc638169f391b31765036aa9438e79c73be624d51216a005254ae486d49497121dd23fc05424c2929a74843890ca86adde6007a3a8df5035ab8948c01cb6c24974120ebfa14a6ece00671abc97e9548a29a12572348f8d22ad8cac9a5825393125b6092448140b9ca9860017a3165cb74f24405a266f45aeb8ccd33c39b524262980846c516a51cac2a31a608f9cead3f83fbc3d0900a32a9a0ab1d202a433e62a4868644edbca5887e5eeb9ed5ec80c4c8f1d39ed3490dd9c8a912f1a94ac84779e2c64aebca92b01a462f316e9078d813f326950fb24f75405489085204fbd17366958093dd9805a52c92ece2e13ba7fcc97ef811c21182591244850929bb225b8666c913234e9c582e7c097bfc6c71e1037946c156f489ad68d812ebb2427219e93aa180a04907aa27a82c8b922f7d727b966ea87cf0bc7e93ca478b54c7e4c252654977a0a8ca785440e11dddb72e526d79ad79cc940af9fbcd22d591cdf985797b9880d29dbd78a44e40c5b0232916377ab4701189e2a7afb837a558043d7e538a05930d9af45431df3a2b20ed2a8f457bba5c4ec6f4c1e5e60be79d80a531126031ae0ab91c5b6e247be90d2d505f5a438e865893af335c862425b2cb1635f7228b5816af6d43ca8203f624a6960bfbf1a284961e81b1186ed5e86b092c87e6a909afaaaf9d2381054ad80a9e773a74e52b6ce360320c589a9ae94f92c49533ae6bd9cfa5ba6fada7ac24bd0ef3699db199b5bebd3e4d53f7adf554d7d2eb319fd6196badb5e6993cadf5549521afbd7c5a67dc65d2379f44e07cdb6936018808693982b15872b2a2e8985ac94921a87e2b787e39a68f9ccfbd039a6934b0397893aa87f1f99b543dcc9ae84c951975d81c11d5121d153a8694969c98555c7e90ec4861ba12f3a54d80ae5cb0263e4b38347e80f834130284a1fa02c24464d4f2a5574f5a47def6e693961016a349769b588b5089d69d9df30ed63ba7505e74529db16eaacc87191e73012ac8526aac8716d092bf802d478573ea2ceb7396f1409aee37a7c29cb129bae3752a39fb0ebb224401e668658567abbaf36ee63cee69dfb9bea6bb9f3ddd18638c31ce39638c31d1cd470b38b523e705081fb62a7ef1a853662470ce792b79dc7318e39c33d6faca6badb5ce3987c9ac0b284a34f1b018a20284310813ad90e93d9d28c625644b42387824f1dab17a391161adb136b73029a7688962e115f46924af3b7b7cadbda4bcd63a63288ed45365c8cf6f16b190d54ee00d5663efbd7477ce18e32eb3abb6765185138ece602f680c9b466cd9f1d5e208988f1a342ea7d4834934a3d6e2171958095da4d1e7cabb89a5e8734f77aeaf5aab3d6536785410053951761a5191b1b818d23e7a90517aa70785a569f3f4bacceeba6fbdb753d34ec65880740f8d59c5be397596e46d6f16b1fcd42cfbecfbecec799e4026d6881652329251967a8a642d269dad353cd3948a8bd7a7fdcd272de1ab6f3e69e12e1a7caa9926e4f7efbdb7ba93417b67df3758b39b6fbd7737977eafbff7de2adfc9e4508a0a314405a8cab789fcee6cb1a9eab7916f6fcdeb655e6ffb9fbdf75224140d219d223f4dbbaecb149b5e7cedcd6293f0db4ec3f117d3024557419ea084c182143604031f489c39013d254d00937cb94aa764d3400dd1f5681fa40e7c9c7ab40f089eee912273d333b5a12747861e141a7a78624498d538bc4925624b4da6a9afcb11162d59923d4a49dfa5fad9392ae8ec0158ed4b080d0583fea28414c2450b4bcc87a792a44b768a3e682c126ee966637ce231fe49d3b3779dbbfc7cfef1e58c53f54d2a2e5fdef62615972f9e85cd6c8229028daaf5554d939b9c6734848cb1999a1dd0dec933cdd4d41430a5b038b7b99b6fa2590a7b76749bfccc4bebdefac43466b739f5d9d3d46cefbdfbce983dbdc189622029d450065039ca81b2254897a5ef94ba4053528923198fa7ae2d5f8e6a526c42d5c19b5441a2340922b49a66cdd9aea879f2365a93027a9ee77976b39f6056339be7b9f4c1071f7c80f6343dd3db2f7e130c4dfcfa26d510482753f1497b66ac2c80bfe0e79f09a0de799db3d11a93ca5318b36f7b217c9aa6595c3efdb4ebd6379fc25461f58de36af54378ccc43f0ff0662fc14c210b4f124e9bb3abc78a0898cfecad096fb26a0740b7c9740881e614668cd79e3f3f615b9a6f5f30e144d33445d37ea63755769e869d24ec6e4f539c7e7dee681a7692903beeb7a7ca5489f6aefe5cd3cd9a0b1b3ac63b0ef00f18e31b6fb9eebaf39e77fa248103b77e06792ed08fdb0f8fb9ee2ba05f02cb77ad87e73d07b5d65a6bcd6b398ddd65e0911d9eb506641fb4773260fffdca4e540f9f857bb3598891c0ec93837be7782dcbea70bcb6f3dadeb7d748e3b534b46ed2585a8c8b2143afcf173cbcee672d02312e8608bde67590bee675a0fb87d73fb4c7eecca73560fffd324570c262255aa3b992780cad59fed09a0e2e0f5fad3c7cc4463c4477353b1c85f6cebe6187abd0ded94fc0492a876ed65ce0608772e071cf576726acda5b3cd4ca3b6353009b0f7aaac3d05be4b5f980474367722f406ea3336d87bc39f4bbd3d06b3b130b3d3b74bc7ba1f71dfa59734143870670e81de872125ac3a19f3df33053c0429384b39f2a28d1d5644b138e183a7c67f1cf9e6b6425b4a6433f7b5e325148ffec1a76e99bf8848f3fbb6d8775cf3ddd49a0022d8d0d727e81e6f8d983dee50ddf919f82b477b40760c3f78e77bddb761b7edd09a0b766f1d7fe660ad7689270f65d1f40d75043422fa1d3f4b5ebd01a03f4b577406b40e86bef68cd86bef6b5f7d09a13fada43406b6afada69d01a0ffadad7ee01adc97ded2aa035b7af7d0513055e5fef0704e827017a861dade76ca6e90b34bf029aaf55e073282dd769bbf67c5aade75daaebd069a80d869e73df59786d30f0ce7b93f72aef98195aa3765b3f732cdb31ecd4ddd537a62683e941af557d4c4f6b2ed46099f7a0e35a046ac0640693e0e7782fd0bc077d3d69351eacbaddf92760e8f5fa0aa86e673e08bbf3375c630166fa4c087d35d911fa6a801dadb7553158e1d3163ecd696f716f47e82f98c7cf7d05e6f155133a4ded7797a6e9e61eba867e7b07b46683ee845ed36f0f01adb1e9b7d39860a260eb9989872cdc1efad9b3301be53cec72ad9699f07ef67b446b34d46c7626daabd99968ef849d89f674bbdc37ecb286dc0eedd97646f447e82bdc15505a090648fa03f411ba09bbf6007d848e6b2e94e02102361822e442e90fc07bc13c3e4d5f4f9a0176e69740c37300dacb24ec54407bb98fb05b01ede52ec2ae05b497791ed05eee2ba01a76e68330b3c3b063ef4ceebd9d0eede5fec1aef706b08bd94900ede52eb3ab00dacbdd835d06d05e7cd7437b67d77a6f0ca5a5e70655fafd7e43c423176c422987bf85cf25a06247cf0ca5a3a219be5d2666c450624c8437239a4d4bd5b588c6316def2adcd78db5d61a68739ea942f4a878a73a36a7cb49ba33a6c6607e2eceb14b88b25dc7e67438407d7cbdb5d65a1bf766a94054b1586b0d6cc04d5077fde08cb3ce78ab623e3e2d49543f202a6d6b2a5b5ee75e735555779764176597a5979f17e0aaaaaaaab5d6407b6bc7c6d39c6e59c59746be3cf225922f55b5a7aaaa9ab4f95602528b68f92ae92d1636155dfe92b4d61a08d5790b47d6a71724e7405a6ff1d05a6bdd05686e51d990d1f4e5b4b5e3d35f5ea76442220fbac4c25e6b3e236bcbc90b19525fc67c9a4c6c872d6aa94cda7cf72734ba465b77b0dcdc69bacd82abfec034053442aa0a94af15cb265d38ca6cd983826b5e26e339e79c73ce3937d39a73ce39e7da83194524440cc1c0f1c4c7bd3cf782f39c6b013ee75c6fbd6b6737e9d90e0a9e59ecbdf73633de191328aa4cc8cd946e38d73b8aac06500b65415c0b25a19bbf2cf7862a41867c02fc02d4a215fca2f4d577c691575a56d24dd5bde67c8819111c223e44888818117141a4066d5579b4ea836f301a77981b1650099e35d19635481d837638125c869c0ec73188f37c957ebf1f8a2cade6cca862d23128eb2c2c194391a62251458c14b92a825584abc85726d29a2b7fbf5f509632c72cdf8c9291b4b4d2f19c75c6c3b140aed0c05261f1ac55240f0e59df72ba19c91d9e6bdad623e977cff9894542c257cbe9acb8acbeacc6accc94e06cf6da742497084df3804c4f47edf0f9ddc3f67af466148ae4d115adf9e65c6bad4540edd0418988c82e6a4e876404e90a090b890be90b690cc98c8df20507e9ccd51bdce62e90e88ce962bb605de85ef417bd17349b07e94c54db22c63647832c54adb5d6514f941a08034501d6aa8068e874cee9869ab48a1c344e37d091e658ac4eaf70b2e6ea17bbef067244674ce44eb24a1d9065fff580e8cc6ea129e8e17757599daa684e1735a26aefbd4dec1df4cbea99eea82323bf3be7377eef1b2e4342942b9b2713a9e8e828a6a3df3228f372fa5221c449cab7cf2ebf31d7dc01377ca545b16ac6a07550ab3c5ad5569ab61a73251985f542dd396badb3de5162373eda8a8fd73dd55a6badbf883448c6215e4ca0902ae1d35c885a66699422135a6b1da49c82add458b366d37d65c8b915153b9773ce397b29298f396b9d73ce3967ad75ce3967adf7d63b6b5bbac380359e35bfe5bdf7de5b690c12a2d1d29d24ee1d2b393575cde9c07e3e5afbecbdf78e0e93b3aad35a8725c15401d1c28676eed8cab11cb956b58f17dfe9ce52b5b7cff5d9dada8a32c79881a0642c412b8e733ab0611057f72ef27bebbdd9bd7772a9d5a0ac7794be5980bbefcdcdbe7e38d79a6b1d8647415106f11e403a6c7867ccbe35d7515d4aead9bd9477c6f4da52a394602332d75a6bad35e77cf3cdb3f5db2d287f7b6b281d5d7cb8e6bcd875b4454511e361a18631a843ce3c4bf9ed1d9615ec00a90ccb12c44195651887a31fa0aeaa68c48616b28e6088d0801ce616904456e92783d632c8885c10c9080c5d49593e315b462f206e8a52962d3dac9652163037293f236c5c431541b5a10d200d0bc903b8563106e951b79255233817f0c9cf9e82ec12a1b5824a654fd6aa5296e17457118af90cb5c085145b31428a524c29a805aca39890a016a808c590b420c52876d5b70748f28a18aed6b476fa4267cc31169ccc6879ddc99ce760d1bd894b74c6fc0159780a6acd757eba15875aab7c8718c5588342a2336652c902d4b2178b444cb33e49d1b51f4dcdeb0ea74a4a778a53c7bd379531dd37c6709e12eecd934655fd80572a08fc4173bae2b2c88785296310164016a488442550dffb0957b34e594377cef7cae3c98bd1efbef2e30b7f9ceb173aa36c4ec725f9bb6bcd376086cc21a52bcc8696b11df78648e76086d3d48dd5f8ddf9f632b6f7d65a0bb956faa4e6931625e3966589a7250a21cd4a23b3d16a412a6a53b5aad5b5671a90ca73d4f3bf0859003cd295b402a60894161a2a0fa227b21fde7bafbc27236a20c571b802084b4b0ab1a3952aa70910de3ad8ad39e79c73ceb75eee5f1acd14c39b442c2856a355fade442ea44b5bcfdf9b523966e7eff92e3714b6056b494cc68ca4d2ec4ae984e1d1e9cccde6885a70d8ae5e2d34b4557dfaf2a2bbb4bed2683435a75907e1509697a3edbdf70ed747bad3a4edd54b4f2189d83a0f31f0d4a9162e7e839084ab8709620f226096944b91aa86e0793dd39a73ae53ae34a1de7be70fa2ac5ebee854d1a5e99ea154fcb17cad35dfe6158ead11e459d57aaac5d76badf94e6242a1b5d65a27557df45af77d761949752793e3b59eaa31f55a6bbe9380c27ed250eabd068020da82843a27fdf676312257f1f0c130804f29d29cee8570ca896ba61b097967ccbdd44173ba184474c664408caacd4ee5802162800be29d31f7948ed090d69a01308e77c6dc5f157c2a3bf6bd0aa97aa581e178deaaaa55cdcbe98c8477c6fcacae7947e5991b01b36a7d943c521e2d59fc386fb1e43a67ae33cf5719ca8daa796819057233a93202d4b968c52c9677c65c12b2e185bc91f50b6ba1855b74fd047fbf1fcfd18634a7834aa1acdaaadedbc7562f6b429d40fed652d29dac0ab1a12d883bcc0d3f92cf74abc042674caefdc58ee95e5561d6557e24ef108f2c515918898ec31e2347ac2891c05a6cc13e64ecbc88e3862c1a5da3ad561bffaef158b497d3349e0ce1babb522c3b62d987e55135356577ba93945b67fe43552fbb733a25755b69e218d7d6b9ef241cbf55b4efbdeb7940a637ecead18d9f338077c67cdeb58faaaaaaca8222609611f14692b3afa3ad89d28f0e2a29c8eebd6524ef8cc94d28235393123a8496bc7cdbeb776787bfa16648f9e89c04ec32bf1edf769a956dd1b38737a34e95af80a37b5773ce2e867b0783d29c0e697967ccbd62e8c2a8ba33e6d691026573ba18c618c7184896bd36669213a78b1735cc6bc36aa89c2baf75d7bd9b28982f96307e68ce363ea4a33b63fe466bcc9c941e8fdfa4da41fa96edbc686b202458144d01214328cc89e5070ffbc3449006ba00c9f2516235a48413a6246602334ac0189821579438c66e9c577e24a9503f74f0403161d132bc09c544f5f94d28a6a79c3e4112802e61d5108c0a24e5999c80598c262ae310c4ce69259df1a3ca151761baec746589a2a4872a9f49a8b4ea9ccb62aa8cd4cc0c000043180000060071284ac338cf52e9ec14000f49b04c5e50349d47c47118444120043110c340106308304419a31072cc958d00305b098a0122e004eae9ca68267350d4523e4f16046c67d1df425db2083ecd361abda160cfd75dc59971653b8b71b07a597b5acbb237c069d93ddb82229a91e39207697004bdd105ba28be53579e674f46ad103fcb2b826c81983621f7131a955016a73e593555d8e9ef5039889c9ed2c5b8781f295397f047e5bcfebf89c25554b17e11851c1d262902f7997e7f68914d09ebf2fbfd46645928898af6d0a8616311378fd218c7c928138476913ab126df4e4fe1bc4d9ab13f9688ffdaa01663e02616ca3b0957bac32efdae1cc9c31fb2cbb0176dda133041704f47f13e24bf4f0b9eabb3b9e8c3a02148ee465846cf8ae1b4b53a725b0c649e200746523fb8257c1a28d03d3bcf5ad4da24a046351cb0f80dc4fe031208e81d265b83cca521e9756ce270ba2096d0c128568932cd24e7cc0a71db99b306b148dffd349af281669ea02c84a68962391240f37aa7cfcaaaae05df471feee4f30cdb4deb2e061a326ecd7c947949dc20a71ae2de19338588789eeae92c42e6c39a6c5edc400e9dc17bf7964f9c9c54661dec60a0c88887ebf7170e535eb831c64c342866763e8ede2c1463c7f58f9575a1b08aa747f13e0c9c84807e3fc8ee43c650c2cf4b080426ceab04323990ebbbc944ee98ea4e834f927e3b8a05396a31fd8af12a07f708002c2aeac4a6003916809cab7cd84cb7ecde0c73dbd1819d3b71a9f1bb8464ae9c49a92e204cfccffca92a7892c161107d561668f341125c7e45aafb059fbf5080da2d53e455109c19bb1cdfa5d99fc35c63b2c42e1ba7b8b7c155998efb4d54d7cb9e0eab0c8e15a86377ca320ad8a9e4c0d022119ac2c2473f4e30a4e7beb38a078b0de4044492e81e00e23fad800ddb1ee25e92d32088b4d577a54c4b5eb5aa23f5fd670f73c5ae910c5ddc3473ff8f7ecbb18b1a9a183be2cbea2dcb86cc9ac49add30ef61b152635f27efb579d7dabd9327e4d59109fc60959b14e918d95b75648ef0b45d8d1452e480a1599eefd99d73a040808693e68b6ccb570dab821fb94f0e34a165a8bcba31a1925ab52a294060d5a106c7f846cab8b9fe31fec818b7e45fbed1c2673ba45c185e4ec4ffa5730b8114cb11e3a560bbcc46b5d5380aafb4121d8e38724491232143174924af03063b00c16058df23f80464265b5ba52ca169bed2300576b6642db6246f690e20a6bae3167a8163b7d28d5f142098086467179d21bf3a35c32ee2cb8c0c765f6b400c59c6481246f1dbc02014257c38973351de46261f5aa7b228dc3537583ff2440bf4d4dad6e820d534669999f85c1fafa09379485353a69a32d525453509dc900087a5dce937b791c776a767303118f2d81f612dee6411aed55d6ae1fe99e0358eb2ed80517729e8ba0b216dbb2a980388cb11d8523ed6211107c795a10a596d9f5a875faf63290c78b88404cb5f8f8364632c149a2e0f4b7e70a5fe800cbcc696f552a2c1f76884965c1587c41a3788fb319c6fe6d487977fe83bf9f09dd979fcae5d4d5ba25cf7ed187a747da0534defe891ddbab97fde5330a44baf6263ce48efe864ef39e69400a4c367c8b57e889120a6c65986b21c4a861c4488d3cc14f9a832efb72a528a1e7aba32aa38195de19cb8552546b1c9ac647c0e9098cef822fe641866803d1bec916df4044d37c577c4b2b72d95ce8860e5c25f1dafcf2970f17cf1404cec196853329f23537cbf2509c123e3a657566a3e380795b5e80e116245b2e5a7729da1b5a45f47a8d72a67daa2ef5e6b6b5b2b30fbe7dda835172002b9ec68a4bbef43faf00149576e821ce9dbe89b90e70d491b5a98c07c4e7ec2a18d2cd65d012e0436a32c4e3f167b70570c029e3a969644fc167f9a4ac7e225adffbbd23f0b0f0815f263303a746d21f6e4910e4c688e7c1197822bfc685919536a96034f77751e748aee6ace48b836207c3f8330668fc7d0c4338ab32d0cde14cddb7984dbd51c5396cad42244a808240b5a753c19b37568446e6c4b2f4f268de2bf58f4d899c1c51ea07ca160a1cd782ef672745121ab31eafbe41195ad26131574d11aeb337c7a02e355804396ee117343c69bd417ac62ed367869558686a3eaee200b7196d5a1b8c42bb85a8420d4321a1b4958c15d72adca6e8c11abead488e72cb75c3199aeb1a1b5c21089d8cbc088bdd8d00a4298186b7cb63b3a81228fb1d67ec3b334f8bdcad07c44998e4f313a2e0787866ad1aec2651af4a243275d3e2e390d084a65a59ccf8e29bdd92bd11144c37af2bb5acd620b70a0626c509c3272ab1a50b38bef1b3b7f248daa20f55706f3961923e507637e14292222e8b8c2cf246647e7a93e9be7d585ce5b0dcb23b83a5e91c547d3e7c777d1ff252b89cdcb757323b5006b1fc9f0a0c22356dc91dbe88d3cdb75eef00362dae2d3edc5abad8c63f10e1f5e97d10e2863fb4cb91216a23c89df0ca780b505c2656b73bd8154f6f1d2ebd6d1c85218f1e232759ff30cd9de066608f98fe9789b9087ab5b24d331ecbad0bcc7fe5e52a4885ab37e21bea1a39b7d45297e67a551baae7a8b3d522cfece068f415240e6794771f76ad9b4d44569eb80cadb3f96ea63145c6417d425dcada73a75d4383db44e8173a89764fdcf3e3c8fb3907b519b988e5ec3e18627fa395adc879c15a686a398ad37df35c1e147fafe678f2200336ce5b0228b784e8e3484d963f8cb481583aea8cfd74a56e589934822f322cfc52f74674922cf6a25e1e45f1d845508dd74f76b13e25212250af1ccfe61057d9ddb6971fdb457bf255fb895bab14c864dee51abd7ef2ae9fcb24e58c984e802d1f83da4141223e3ee9bbcfa4825d32d1823cb00c084cd9985eb9040509761838fc14525efa665a0a5d4ed356010b5f1b1d8b1e7405691c186953dc473e3077ea6f944e1e22105739245ab034c9a21d60f477a600431569f5d347e5e15c5f2851a818f4c8eb80ca5e34b2808a1f0b59723374acdcf35a14f428cfcda65e3e2048045f701f58109873a99a791488d1b0047932f247fc04548a5de8d42cf53e56da4dd027e6a4c3338b122dba0eca9832dd2a8543418ff774af9bb88f38ad6ca5a6bad1dfa0fe80641d27c2d263e950ee4841c4aa1d5cec32873159ff2642c59c299e72f314248c4ab3848e49a72464e3eb146e99fcb315fd77251f2d5234d2864e8807bd6078298152ef3633aa28d909cdd68a11dcd9e6a71d2b017bcfc93ecbd8777e5824d4e158c92d495dab2fc293feefe4b7cf2faf64131721d060aab2b3ee9bf047fb4445a940435ebfcea19ca3cfc332a999fe9d37dc732652a0acfef40dbbabaeee7755dadfbf0b2acc2fddeb6a892f99bfd06d9b1b67555eec7ebb2fa7dbc2c57eb7e2e8bea9a8f965575cc47fbb23aeee3755925f7d1beac8e7dcdb2508df930b7b73071f2b9f3f762d25357dfd7b66c454df25a18d29baaa805b561f8baa01c16e40c6fdfda62d7a24cdcfc3a303f31cec3b314933be4314721a24eca3a7eb5c5ea81de7dec4b32f568699b184ded209a25cdba54d2691357e947228bd82c93a912e351ea7611accc5cb488238f296200453ea7ea3ebd515b7e0bcf1af19235c350213772917731bf5374dda205de83065c631064ce02239c657ca1c83706604258582b711a22ba461a8b9b61cf84bfe52c44114148f5ce43109d6424bce91f3362de28c91ee7e303e7e2ffec516f72c950a582e75537a8929559ff8a41633578db07b32e691223dc443fa47b511ff9dfb2ad0ac78f667831234367ecc6843a1fb0cfd3e5af8a442a793e102f80f981f725abe4963e5370ccac168cfbdc2b6aa5ea69c5b0c37371db0271570875d407fddc29080cb27dee208733077d84dfe5c252ca9d6796f60c8f5ef32482f98618644687aa397662c661358096cd8b1c1ced070b5af67b13693ee55300f3fd2a44a12a2fef1aa2645cb8fadbf2df6e51043e50832e84252c59694bc06ffd2c91471f01c960ff647a2b9d816783ca0904050e25025303054e15b5ce4195d460d302769cfd0752bc26be38ac2b49bbf8040c4b70495ea3e427a6c2a6682d2c395dd9d6a3789b26cd34f9025912a0df0ca34727cbbb4f57fd90b7c163c648146927d1aad7e40e4bda9a1b938bef6a11876e11d9ac230e39a4d4bd1a7eec800f412c89e5ef7202fa858dd116f691006a9a50b76041e21678c5097a68065ef81f183525faefc23cde3d6a1c10673341a4196d4cd0e91fa325962da7d564d189c9fb2233e09d98a0be396b14492f5398ded91d6d59eb6d9b5ce6308e2fb70a2cc6ea3e757e3cf10febd7b51c4401cf4cc358adc47165821052a64331a89d2ab32dcfb555c0e523ab89f11927f4d3a3b137fce89ec12216ef61c5968887050f0fadf88e2804c28fc33d76ef8159cfc8c1fc77f992bbb4a40bb64a08dff85dfcb58b0087a442f2e4fa59263578ac00eca1d02f08568c7c6018e982ca113d108a18a400c82ec8e3d19e211f1903a7910c6a0f9d202f2fc3fc67b005efff487cc0d763d00958cb0ace2111456bf7b2f688bb76cbc7cc885956f8b8823e5407a711da58ae67a923165998df0c3acba3f804c65fee672562048049c6f72890d1951154bb1391ee48ffd2da1cb5c0c96ad967ae86d648c0e067f7cde2ac10d1deab09366cf4897ca13dcee915a950546ef998d9575e4c11ac81f8d6ab6c1f6fb7eaebaf1675a95b637efbe582610a300447092742581bdc1e9a8849cd6f1ebab914dd5105a2cf5bb12a0bbb97f29663d97c7c462fb5188f65d41b20e6d6cc891105c561ed9ea3027f588a584838060ca5d8f361781418dc900c41c24da558d281774148080aa80be0065829a6d18488d8b23b4228ca844c2e13e557db566457d66ca11a930895f46b75623d8f22cb2ebb0cf1d868f2772deb8cf366c7cba27d488ca59d2b0e80e74c19364709607d4bf7bebcafaa759f83ee44988cb5a5199144238467d80aa1b3a964e92f1cf9302e5e2939c7f0748d0cc948470c8a789a80e7bb41c1b8bed3770522886ce6524206456b4284e8ca94209120038336719bd003ee0c2a8ae34a9c9f28cc2d52f220703fd8cd3cd04e4181bea105f966cc665c55c15e6d8ef643eae43963b099e565df688ab6cbd80d776571fa38e1c0037bd54dac25bc3e2103bf90f9fa6c56ab196a76e0c690c02fe1449eee8edc9bf8544a16709cdc0381806d41c85c40a600b1c29eac13db02e34e1ce97ece54ed7b6d0c7944c891a30e436ce1d89342d06c6740c6e76548a5155fb59b7a275d6cc9b72f977cc94a23da75b8a87b716a0d459c0b82c37241729c3e464d3d16043d609d0723d63bf4bb910789393abd01902d524c1ecaf8b97d679b9181adab90b011188fba4ae5a1654104a7856cc4741ef6f6c35f7134e8d430d5bc09e80be1f4f806d3b4cdeb087b29ae5808d0db5e5987e4b9de5739a4fd839f590caf493019a2f0cfc4bf4db6d3e5e33815fa049ce3d82e173a600c0214c65ff2fefc0fa3cd664d70e3fbbd71f2baf9fc090825749c60864e00938a01047e68b30c633a21427cb642733f59cd88b5e2fbcb6c405033737f4e745c9644c792ed1150200872cfa533fe84586d2adac19f4ed67a20ea769b3c97d5bfddf14590c1ad53e3b2aaf6708b3dfbeb711b63aa6ed7523d9747e2cb5206d903adebfbda2ab1ebbfaa53cd0c922b9f92932356777d65eb1b47c9b01fa178237ae8e2fb7fdfaded84e43b669bc38955c78b06faec80833926715726a8f8cb84cb0586ba27d082206d146aa5ac37fb3977e94ec201c5cb3e700c1f8e256795d1870745200a0a1eb6efe48430af4774562fe991f9628b6b019993b31165beb57586fb5fb88fd285a223c4b431a3fc4c88e3e6beec6982c14b501b9485789d2eede08b8aba62193de1757af3be9083ba184c58c49a9340a248a1c566b967b781b9900af60a4a762e48c0206140931e4dbd12612e660b6542588c84d1e71f539e5a0d8e9778c5b5401597aac3ce889aa5dc923087cbf65fb409d3642d85b1812932b99f52b0490b1f55fcc83b5359e5eecd1f8471347300404a6f34160d93babc424d30f063a9c6715048d90213e056ae6a012b2ebfb700a1f3d9d437da891f37e5da90a1c7beb9b4a96c16b9bddf10844b576aa3cfbc9b6db45cfd974ead6b41ba627e27896acd9e44b0473c83ab09154a74ebf23446848bc2200e16ff2ec40958e5abbc0e6a7a35a855ccba905d3e0150596ace42683dd5d1bef5ccdb3ea9d7ae0e4807e25e8433d013f5b59f6fad6e1173098cf4c57030fa1a2d55338f01d8f3c391d52fd4f4c79d5cdab115ca1270b14469d475c7c79bdf7da101215189e69c4d071c80595ba49831fe0a8b54e426b38bcc73716e9a8a0f9b95778a6056528448e6d59b255439e3691504d68acc833f743abbea5369112971e363596c340daa6092fd089c08d8d946288d990687f36880743f285d4c2db25370a6e69c085564e793eb246740bed363aa1cad25271809b4895e058cb289726a4a7c2107d184c1f16e6ca42a030848cc2e11e497642aa3246b4fe9e13cf081a0c261ee6d85c13f803283e0ee8a636c4274a4b99a6f0a2edafacb14c49ea20de18c6781100e220e58d9461590fd9c15d5f508de8089956556417fa8927164a455f4d70982e9a656f998d9011afdac5636a158cb8e04b5b0d8bd7eb24e788cf10e53585d9f58f8169ae84bf460aed557ed6be576ee0d4864a6bc881ab41e7e680cc922365322ffc980f78ec2fe440d7c2bd450994ef10e05f0526a1f411aa08be4b213574b345e8e7357abc6277190c0ad4817fcee3b4f2bf113f4fb545c8d91adbf10c76de1db8fff04d702b6a6e673ad3ecb0c53a82b01d66171bc43f577646113c155dc575c888e3dd96a2e2ebeeb942bf2711e5beba6247c53f6ffbaaf53c372df273a2b287428a6399ff2cdb266d49a86e19e5fb27968b7faf5e9c232768fdb22f99ded433854ed712e4e39f7721a18d74796be592181bccd6aca6d801ffb5e161382f6f7b4f1bf2b535623c191791ce9cd71e6d1dc5bd4c6ffae4b598d0447d671c44ec70650a1fa61d7f00f7502fd161861f56231c4863940b38074ee795d0c61a31d407fe481b3b82806b1d2c23efb73c0b23a51bc10655fd126c0df94cfdc8ca02c4eac61163f91c0fe187dcfb32d5e28933b6b134296060886b3f2ba5020d4bfa20d00dea7d2dc1b0efbc725babaf8905afd206b0274e59186248164f1b25020e0ef68ea5deb08c0d61fe968f2289633225bcd014fae0e45da66737a8071df1e9c8cd576baebe83f4cc1e4c7462490b61b431970cedf0bfefb7b8a1c99d03b7f76276fc6294ccee1e80dc44765d177f839aea9dfa55df4cecc689ce8ed6d8a296d62b02b917ac6fd5a2acccbeb5d063244877b62d245ffe400222bf40c3b694d2ced489c6ab3789cf0990b8cc09350fba669476617f6c178e1de139373d6da463d07c78c068cc57436130caf9966a06c93dd823a026c653b765e1f42c2570f3ab88ec866faccc403ba8c54d0898f5c540dbd74b89f65a11ceb3eff9970ae2c021f7a1e5aaa9ba8dddf638f27b2a8aca7be596f5a492ea67e9415ce542c1d49d01eb97ddeff4b17959bb1096350fa4434c30dd10d4ced97c01814baae807623949b6806b8f615ce494cb7dbecb18cbe647504a695274f210a2195fb590f062ff2f98a9645456786bcb055f890fd74e24cf61851025680c3818a198f2aa29b32dec41926d093a34b5a4bccb9eb2bdfb7217b8c24d8df8fb5f235b9ef57834a5952485d593c31b89a589be3a8f421f231de6a7b2694d111ec56ef45e5c5cb03846bcdb2522a992e0a357b502b4e8cbbc8869e5024e79c71e3f3ebc228bede828c34e3c123f7da821eeef525a7bb0478d81d8acb35e10dfa55196ba0ec427c19d02e8a10c29b0642110cc85cca3280c20f819591297feefa9f983f557b4aeafe2aca89aea096c6866856a816a23cb0b0312e0c2392c18f4ba3f60d226690dc500087f8d4f5386183240fde2463a41ca89eb53a1c3d73849ad576009124544f199b0244a3b5a6ff755033ca02fdc5152ef886455a608c09f35bc467525fe8660edf4d413e993ae142f667bb9d6d88060ccdd9777f201b7b4ca0d748cae4ea0843203cb540bee1bad59f2b6d4da156d239f92d3a4b26ec11bee69fa43cefa5b8a3623962cc31c4dcdc1432792cfa5172cdedb6555c06ab7dc4870755f90f3e711558586d3ddd6457c89aabe80bffa7bd6e661f59719aff9a1317f9046e9349dbbdcee2b85f5584ce903d3fa3202f45bedb273474fc6ee970e320c85f9bb6f838e7e1b96b86b9cb4b00ef6600ea930f44bcabd43a465e0aba5254b265bc67f89739ee9a1556802880ae96ae6e96dd98952dcaafc876098f5ab180780e9bcd6ef905fc33c59000ba940f8db42f7a66a2cc082e42ba89a4060264f1df11b09807c97113d20b196a8a765fed260bec82e5d3be229a39f00526899c799fc5ab156b2c0b48be368a0e1b9b20ac181e46af864c89c624b7346d0494fcf8b9a5d44cda9f512097ec95c1f08204122a62743e85c030fd26073860189f10a26f4046948c9a23268c459aefbac996166e99871decbcee239a8619aefd7fe913cfe6e0bce5ad7848e1f7972fd3127505e965947c6da8256d127531f3eaf885330d6accb78334f8de8af8adc0b36446873c4ceed05797926bfe6ae0224322c9993ed060b73a36305799e3d3bbf0b38b0f8c66ff7a4398f70b7498b521848287b7830f91d7414aef85deb44084d8374160537a921b0561addb1174d739c1417aa417bfc86163a81f1c857f36cf01f5800a54bd97bb354d2331018fbd3bea6b5642a941d5e54afba1d8ffca191dbf30cff6c707660fea25ee82e67ae94fafc8ecf23d57390e8976616a113ab4fd203223a121d877ce335897dd6533ff74f5e59ae216b6e2e5225cf21f3e20860200a0506dfa9c2ce035dbefb3bd2bcfa712546d32422b7cb9252941a20510e4cc746554825eced26be44323e1e11e0616ac34bf69c0ef3a85d5a9f7b365ec8a2a5eeebce31aa220a0e2c52a883c0d574ef1d25b4b2c739f618a97d8039d2c8526880d9ee5402cfda9c31527274d109c285fe3b4d1ca741f2c2a8e9749e6c57fc2fb25f28fbcbc415dc34da11af3d320982b890ae157d0d82b493a54085d0b5c75cd0c0ad15ff36b7b5d5de57a41bf8a48e937850a896e49314ba4ff85ef15ff88c018c88a8e32a59c124da61a08c17af4195485efa5c96bb9eb54d51727b2a04affa01a8b5c7689c1461f4775cfe404636e2ae1fdb7529175c20a21a5b02a3a07898231d59cf49fc504c8a47df0adf6352f93a8c6477d5344038a38f9671f3a7685034f3459d1878a12abaa4cc370b9b16c7bab1e08288881788b47404048eb6cd91cb6a117fd1c84962eeba787081273d827f1265126b62ca20744ee0484f0f631aed0336f98fbdae094f4c5ba41772c156534b5563a23cbd2d649119b1be34e22f5d92587728390f57ea55b27ca2dd4516e25f3339ce04eaeaee2d1f55f0936d2f9d82f1d8583e33acb06a4dd2436d90e05a3829cded4cd1618e9fd1d9eda09075f876b38c4c12ff789b2f4cd69e6b485c93f525b4d6b0e842554f9d13dbb3bb6a06c09d8191fa0e41694ae91cf27502ea159acfdc681d70c89f948d2839725ad72a8c3ce18d0f081d210788224182b3a97f2c2125af035efdbc839e14d819b4fece003b6bc54c23b415315edd147337f375b36121033a487d956e2b2a35259c965e1ad1e7e5625411d8303f9864ee209c0d6c491ee4f15d7635aeb9910d8cb0db70b41db69748af2a6dc99716717463d6aa995079e565fa2ff6b988b973fc102705b903158e3097073b9d992b1dfd5a26fae2100533698164f9c2f6c6d4abd995e0612c8fade10f96da584708185cddab5e8c628465a1b5260622be089d2e62602c859bfe6d1ed7917bf1a37488d64d1a914c96889841cf6f66a509e6d10c31e8233a3e9d69154844d120192ac0d82d5686059dd6aa104e4b7a47380c25fcadae583b0c88df2e0daa1c9b917b1655c9cf064193004627a6c72fd572fe64c6271cb896a7f0245207e93262586e2e9f3abea5198355b38611b0c730286fad68fd8f53e0bdb885dc252b9c1f26452d812083a44cfd62820e8753d413f7d18e46480e0a52b607bc5760bb8a4c9e491502333b229b04d4fa8e9daa19a4e15aff4a9da74b5bfede08f2e8324c9e0428f2e686ed6de5d549dd6c63a781eb5ef3843a1e35afa37c8b3275972443ddaa202923c428b2c114dfb04db706edbcb5e03410a7ce55ab703229147485d844e3c34211752ddb900a45e4726e2599d57220be686619591142153a977ab7efbfe5ce95f8c84dea1501776c9a9f47d6478e7c348b867c7553cb675f0e04d04d91e21f7ba79d1de50feaa57755e3984fc48c21de8289c500607a5d2c71a9181048ace2b5d67e3451dd7b3ea5441e8c942bd89d404b701975748b80b911a651cc499d9dfe45f8a5ff7610a310b4c590fb61a95abf0bc2cb0058258ec6665022c7ab9c2b3ae6b4fd0ce89b015eba97f6b54d41b4692cdb6c88981e8fbb275007286c6880e14a7ae1a276ece82dba4f6cf6dfb4fc47cf253f5b00ab2f2f7effbf0bf6c71213058a17c11e5a675c6b0d28dbfd4d4330562dc11dd30e22efb333e6ee273b662858bf9233c853689389d5652926212acfb01e93687ca854074a309516eb30a43b8d5c560ff2bd3fdd01241ddcf15fd7d39edc938fbd966b00605d5ff7bd34343c88b676d9f072c407c446840ea18948d42ad292fd6825810b69aa6507bd14eda22f0f316386ca98e633cfe4444f320d6873981f8d07632ace24915ce94a7889dc9d0892456ce742436c2bfbc4dbfc899cbb84f28d638854386226cadbed91abec8372ea1abf2ca568cdabdf143638843629f57192c194855c2caedf23f9f1273c3eaf266f408e8af984b90f15118ca198cbfcb877b23549737d7826147bd2304f5a860ab3090d6bae55854dace376a5cc2ad96e453410a2adc96899f6c41591b257bbb7c40fd7dde36255c28fbd883b9ae09576a5f4a54d73eff4c8b43b91487b5903d31661551f0571e35e4e98597345a1e92a11fa03f9845c5a883c369978a5b3ce496cf7b885dbcb173d831e78259c5586d63e27cdca79ec41ce4960927120dc198ca9647aea13554ca26b669b9eaad7fc08234620261c3e7105b82481d6cd95c5a711e2044dbd8f71f094a8ff2dda9c22b9b3af1ae7f8b515f9f0b42912f8a9e6d80ec443813b81e76682fe549405fe65901c5cbd116e4825ec7976ec9c257aa17af6800d6322a4bf96c34ab04bf7929b09f43c96f21402a143ccac0a6f128e5a180c20a0954800fee4a2833950b870e0d519723f281c071b4efe901e82c21256b54c070f6414ca040012736d82e572319bad76cb67d5585ce3833f965ec99d1c7f661af4909f9d78b3234da2aba397688f200669739ff254784e0dfaa890e21d49bd8516c7eef250310bd8ef7c3b92a34cca0cdbe71d863d0a365b11bccb9e6110bc86ecad99abea4855b1749e0978a67c02f1c0f6925c6ddcbeed644bb20478278608258dc148f71ea791ade24c061927d08ffa7e4363c31599c37b420bc74181fad2b6e0807828526eccbd467070692778e971a2075350c3c8d645f6680fc129d9eaa12dc20a901f89daed2b8eb2f1ca63c022e8254dabdb1e29b09298c01de223b8fee6d430b7e6acc7f159cfa0f38b4ad33da7ef7bf2e4e76099ad159043e2f85f4ad7a206f38b3606011a4c08549e4f2cc2944aaf069890bfbc02455c4d703526af22c74ba06ccb3a4e97ecd739dcbb5b41e31f3f985a5a28158060b616306b4f4e6a044865e033784a331d088f78c686caf998ef79276c38f33c002db9a42e7c1e6ec02602a369f68b5bbbde8deab4773c9e1b8fa8533343a08b72e26e682887313a101d7ae1b52ad30d78c7139cd027b88d53a99c309546b37345a110818c39c305b13b9b5eed057265a5301e8a99750dada90c047c180705ff696099655ecf0f11799211c9776cfe964c12aaaf08473aa65ae1d794302ef44c16dfdff1f9e5cd3bd5aa8cbd4643698df3ab87b8d8c7b6f7dd0996d6f50382b5f7574ab6f4abf3371dca738978583efc75ae42b0c0b2668285b832c9f25863d9da9e02875f74cef672c9e738620046abc8412ed4500b101c5cdde1363ae54cb4e8f4304aac580edc8ff49ff3debfc930ab7b367fe3a76641a92fea9db802bb694a5bb0c88bb8905f67d44329c3749d9e6cc8250ad67d23d50633b7c610d17e43ac82f448fe54e609568c4c336714a27e1c5d709515a423a03c96d54fa3edc1563e937b193c81e2e498b80b60e914e4da214351489598acb7f0c7320588ca53ad29c9f3b0100b7d2e50d0d8db391863d38ae3ffdfa5aa01de8cea52cfbb2d1c48e4de86d05e6bb7e625cf11e2ed400a014b742c47cbdfcf8dfe3feebc9e9d296326840d8145f86e8aa83e9786a8eb7246de68eac60f04a3d496980a48c75e52b4b74df9d0ba7fb0a81eaee5941436e2ac73929e2c499fd3eb7e7ceb202172e9dd129c7e5a71df0136ac1b0032add0c9d96086699237bc2f45138f3178ce646751543241d23caad7eabbf523c3a50471632aab563b7e234f4c18f6855bf2dcb8108d1559ec35cf55182ee212ba994976402a4710f1d06766bb05d3b742a144010f98595f2c662f86f683ef84566115143fa87d66503e0c7801c73e0d249dcbd924e690b84fc54ee422271e79863eae5cdb6a61dbc4d1c7fd4df63f4b1658a75c670c187dc8b52938ff57234e116bb251583df4948fd3c31c9a862e9a2f2ecef7a24341c664e8a20439d6958c933f7597e07e39fff3fc64bf27d5df7947f04039151e24c40efe22eb7df876d8d10ddf38a4a71f91895f06c3fcac3afac1fb429304648d5f64dd19c3b020ce13b5244ed0adbe205e9c0d1a2391d6424e2fa9c8d170c03f3038298948c93d6c81fd08b2e47d2d6b3f09ec9189d24fb76071861b78b1218f37ad96f230d9d1fe2b5865ee2f40c067ce75be4b7d281dbe03e7f77bddaba9b84e1df5f196222cf7b8d1d602709dad735e8b8ebd63deb58b318c87f2a8f0ef277eee970fe8e99f4be11d7d0612f788faf041cd9ef5f299bfd0b3296610c2321b05a814d93b47e1eca8967bd319d35af50667fa44be6fb4bd3dcdc3f90e151bb2fffae76e649e2ae9e68e36ff3932ec55ddbf8d1fb72804f0bb76aa7ef194cbaf114416331be7345448345f131548c971e6954008173dbf79722a352e73707eeeb912e3aef7352cd9d7eda4866244c1de455040f83a06e3fd66fcabb3b3da68242500023c3bf5bcf8a25b2effacfef767be2f79063d703a71ef0fbcefc87f5905e3fb9361535e2faa0273e0a9bf1ee1d64cbd7d7affa50af0702e5ca8ff2f5eb7e1e5fd3f04a039fc91013837dd0e6e1a787b8dc3523c75cbf3b7b585b0360fdffab08249c44d8118f869cdf4deaa65e8f997e1ebfc0a5d9d5b5c020c3eba3676c36ceacd26591dfeb0f1e5cb52cd402a6b71c215a3be8420d3e5ab5e3e196df1f259bc976b220ee1304d7c03112529da9ce4fe9c675147310ad4f2eb37b7677abf64d44bcaf60e9b4e2b4cbb6d513e0ef0f2c8e609451035f49f0ef8679f166a6b6a65fef46a7afc7e11a7db6a54bebdacd522a6c2cfe783967ba4fe39d6ebeda6c2c4626b553e5b4133d97cddb591cde2b0df002557fbb6fa61a53daedb9f920adef740436ffbdc0f1097a7967ab2e2ac7d1fc77b7900e994619173bc8242fc404f0d79f0e6143491b0bfef016a8a2ea7cf681837e202965f5ab635f2ef100644d6f88e2d9be61c0a2c9d9af865e832adb3e8cf6a7d14104dfd357387996910b37bc4ccbae447fa4c02218e878fa5470fa201bad3c94d6c511a161cdfb34a46e0f8df41fc6ee7747cc7e9d9e2d253b55f6bcf451e716984ca9a8a5ea660f5c67c7bd708593e60c3228476e0a062b30e3d8ea1f9f6d3ba62ac0d36471cffea07450c963fcd27f608eeb4587526ce1fdafa3e36d66d07db97ff22cc78ca13575554f867b2aaa95d3f3747f8b9957477f42874d5696e848e1cf0ca49a704ab996dff72ea9f6bdc67f8c66e68e8603fc323a7edb84638906203f6625e284661557bdb29cc47637325f4a00e95b568747a6c63a377f7acd18ba751d48ec475b1e3261b6ae87e6d3a0b4957a848f6bf4e1c43306ce90bafd849bbe0ebd54f80b96392d1635608f101de78cdaa6ee8ac8893f8497c14c6e25622ff38f3e81ab2dd26e5498901ede64067fc28abca49acb89e2fbd12408ca6b2bafc62e8b8e130e81630296bc7fc5efc36f202f153eeefdb6d3a9565cf0291f5078cd468c9ac48345378c88384ba75d7c3769b5a9896d6ac1fa3097409c66539ad713acaf14d067192585a81d390681c3a3ee805bdde29500184862149e006c1ff555919f6c38c40e72ad67ac07e09a366b4fe5b55a6a4e6ac485ed7d6b7a71304806d34bbccb60ecbad7f81dc14bb1adc0cb44a396f45b7165c3d4b11a0abc5ff54d110efe31430c6f52038799be49e10cd64b0b88536a5ac84e13175775d98af43931879629305315a30d2a69a1604fd05173849949c0dc76e0401ba483d86d71b7cfa045917a4791893090b008f7040b58d05e9df17204067b26c18836952c5db01601ef65a0089ed232f92a1e7a185711271ae8ad97489863dd4d2f7bc1b9b8692c06d583debde52044584ac267ca8851c0a8ebf8e9de0b6158b3a2d4b110e7f18f4532a01285ddf411b83eb857713567d3ae27be26902c5443f8068a7290ead1f01b287c6d4efcb0921d4526728c566304155804fa4e96a409f2a32fc872991836cd90f49fbf5a3ac785258aae7fa9eb744260793ce73e12f428b4fd9af87007aa1b8ad1c77ddb678a3a04c66c3547ca65d2900cd418f6ed92f272a852ddf556ada218561efa7401ae35832667eb298f5013b828e7f4cb5f37bed66345a91f573bb2ab42d937728e6ed4618aae4a7a5e6d784cb01966be99cfb39bc9879ad100bd2e5796c529e1fcd9327b2509a511771a612d56defe62834b4848d7fdb2160982cc52fc46fdc97fb42f579355672eaba7d4946a1b4ac7607f29bc1d5797877b4447b554f06f4beeba012ca393682dce36facaf4604ab993ce0ef59f3ffa5a787b156bc609bbe05a68f792ad4538e58d9727463f55450113d97e416c57dc0c7a26d0acc5c289c4577d1cce396ac648d1b8fc2c8bb10603bd5a65b6bb7466f41ee2112b0dab36ffc8ecc6f5232049b4d375a22fed291e9fac8a842547bda3c5f1a6525349d2245848fb78f52e9e82864665e73756726e444542a9d1390baecb329457ac6785859f607fabc70d20b2b1821629b282be9cb31779e6c6d066345c71c6f11a1894a731f0fe5ad7c40b9a15db198e585107199a1a0899ef26dc05a47527a34a8462f978122f80eb079b81f206cbbc9a9ddb1f60c1ab02c167017cdb4c43cb4c03f6a35baece2dbecab5baaf523d0d0db605ecf4b4dd18c4918123e9d7da2db3ac483c96d89796bbb791479cb5e0152be136a552842b6be73b78171a57610d1030837ad8e99e161a5aa8773c5fbd7a66e420178bd11de57475cea8f588c6d5b18f786d5d454ed1cce35074c8b8ecd10703d5bfc7dc6d35772bde19fb7d93b8b9942f66e69cb623f49da10e6c95171894d00d80b07651df369052eb74323d394e413776f7d0426c6179e61843464d7e0e4d31d167835aa00b29f01e6c2f70d8576e0ad5d72bfe87bbb77c4d17696610b8c599b4adb8a1b009b27e1348be9d47d0c868a186222a481ce157e95942ca81b963d47afb3ef27471497c493513586e8cbfd66444fabc2c5a81edab5babc2b7349cfb9e2b31efa2091a423ca05c70ed572804ad201eb951895738c4fff7b0f1144cfe2988ae412ad54bca218f85b6c8a86245a7a032dcda162eb4b38e9a06f7c6f27868662725454a8a0ec8bd60a57854f7f0382ce75758ca51cfe1bd54f4214261f5ddde0cd464180f1ba9e019eb56795bb28f560550bb78ac1ef2e3ad0c77f2abf91cd13f55f6d944d59f58bcab8dd9c8fb580a77be27cd67c67248a7fba21fd22cbaa30f56db47525de038d5649df89a8ea6ef3d2d8c1ef010223ca0883d1485564306694b23828de16681397cf06e1eb1f16b302cc73227cc60d8db05194cd48953f0bfc08600482238e29e51e738ed58caec324a20ac5adb4f61a3146c80e12fcc4bddee52e4453641bc100aa86840e81e5e3d78fb0d3a8873e2c3eda51220d6587b6b8a1dfd1b836ec0101d74a44879846eb36cf45b7a359b1ff32a7608ce651815654e3cbe38fe6ee0f2d146ee9f5407be9ba20d687d7b71986b795a0f2d7341304db112f7bd70d5fbbb736fe5bdb29d72d2b1231a68ec946e6bee85cdac80cc901833953346fffb68cb78d56bab7e7815a577e5565945c3dcc1f27190b3dbde0d74f520f88abc180964ab63d84bf3a4a256416371d743522b2dcaa313e70e9ea896e083abbecb67e98535a58a410ac5ee6610f0e2f8b715c18b1afd9611e07ff80df44f634caea66b2252853c97221247e8ae05ac6ab4f36d7cc8fb0b8917a4a9f6085f39980c42698c201ec2504704b80a500fd2ef8b918e57271847ce8706fe781ec7b335a070b30745fe0a41b9585a30d2e0b77b0f960a0ba2d5d42765a074d405113161fbd54f8bf4a0d57755c631cc0a4c5d4bffca09d86ebad15173c38b82e5ee4dbed04783b19eb84b818a0721da702ddfc04e638c46f7132a24da4b1e2dad91726a021984d993ac4f8885d07254b01cbd0894d5b071c096f0ad7c3bb04400b21f81bba79b9e2ef9a1cf2bfa77ad32aa442b12b59402b2433438e99b9ee6690103c9c5c87295b713f33459976583ed08a4cd6d60ab05bba3b96625aad71d4d979df7b5283c36c99ccb187fa8ae22b843675ae03daf0ecb56eeabda35f1ab1aa4f447794f0d0ca4655b0b5d5609be8ea6bc882d42bb960d26d9ae77b27396b8e64b1230cacb19d8d171980b86f8b4e676a8dc284c0eba2b71e48add37255892506e4fd5b6a8efa37699e553789959af8814ea056289e47330bc2541bc508b825a29cb0353511bf2c5b239b8e209e17810a2c4bba969e1608bb73bd698d64050956c8fa80189ef68d73ea4a0fb17a0b07c7a3001529d44eb6372ca5bc509898c14d8323367c84631bd48bab23dc0dda89305600eeac039bb49949afa33a0785ebaa64f387aa6afe29fa94bd07f97b4f6016fe43b8b28c2d53b174fd57d970e80e1dc0ef7a00116a32f9d15696f6c4d65b3b4b331ba18a42116d9848015827c5abc8c621255e8c82bb578c7262d8b4c2d8914c2715794b1cded4f07cf5b58b818bf3c22fd3c0e820b4eacae7eb666f9617589bcc015a131c41dda3fbf0c03229ad6b0bcd2fba9aafe74b8c1cc0cc175b4f44b5b7e80e4fea7258ada49a7677d2f3240a00fcafca25c51e8750124af7f5102a876605dedfeb86f196c1672e86dae60aa9c9e4f2b1d5880fa74d8b55a1f5811eb644a2cd118ef71ed85f9acdf62070c77b365fac66e063f081396967606ca11f6d31259a3c1c29ce9b9c6a1cc5cbb3602bdc07702b58caf46eea052759a708f9d58a685c79f0a76e524596113a74b8c1941824910b0116264ebbbddcace5b63bee407420300675ab10b27250f16892e53616fc3ba6c859a0274e164cdf451536df91190820cac4a1a21aa6a9c073af9d9461745d8c4e2f99ca0e7b6b16610ba61fac7231e84a90c289f6f589f4d3d245d699465f097e7cb304ac0e8537e695160354c2919f02d52f6d2060e76e86efd90be4752b278beb2a0c2626e57ecf3d5e8dd1f8cbebc220b1b450eeaa18925b549bd61bc0469d715797b57fc85355fdee64808c8a04eaaca39603bee988f6d03752db84e73e1b16146449268099daf814d869b24465ca9948d655e673b673d78f2e40e645c47d831425cf507ffeb070f68731c084cadf5146fc31dcef2b6f32ddd07005a3c8d74deadbd8c76751ab57cb71cc0de34fbf14e5ccf20bb313b20722f073ae928a6fa7db1bc09dbc7c414356bc4dfa3a94d118c6b0f7ac759b5461a062bb11dfa0b84bca3902be9e5fe5ba08d09f5afef8d54d3195402a3ba9ad96eb858ff7d23946e514bbf48a14cc6df6276113e8f0c29744d6146a48b027cd4a7c5146c478de49cbfcea411b53725740fc97bd9978a6f2801fdcfa705774a107034c463d997db1eacd84b4a7840228e857060d4b52e747914a253692c77153dd2f09930048b8b5622aa527d59bc6f982d6c8af354e9578e1eaa9e17ab99ae65e1e740aa20b8d7cb515e7de5911bb693ccc8eb95760d05d123cb20ef698d1145903a714b6f18ff21fc98cc81e539e2acf3ad6a026573acc570ac649dbb202c8415d720a4ca28a76c15b95516569bfb9652b2a3f13c3341b738dd2617e5c8a60703a3e25ccc576e406e154a9c8443d298aa12013915aaa9d1bd3f3c1493f541b5c0b191fe05a7187555fbb4b4ee0c5e88b0974ec54720e54fb1c3f488115c5f7f9e7f3f3ce61d2ff150562288da9126c164326a7f2d2d97b090e397ba57a3a0c0244c82da376cf60bd7da92882e064d6ee180dc1112fa6d20207708ec7f5fb361a9a0e0020f0fddb33c7420ed4627b548285f39b232d5fad10015615d89b40ee1a7e417e2d705d07c1ffc56d3e7629b47d32bd9afa6fe4eb9f1f0f4373dfd958cfd91f7032697bcf7dd944c1f7b129e229b801c622a4975b774500c79a919eaab9488f70dde53f63565192cd4c80fdbd0a73f4f98d9038184dc635239503a9f820385c6c2978ab7ba88227e207feabd2d4953d8eb1cb1882136839ee5a718c8840eab75bc54e6fb08ade1338f0dcd36cc7ffb2426fc49c67c305c3c8c9be00a3069a37ea0b3ee287e97419899c49040d39e8bed5c2e5b482c2cf229e8e017e202f9b4371dbff1459c41a4a278c6fe5140ab1ece4ae7f55b296469600f612070267fae56558fa86197dfc157b40fe586ff9516a82194b00267be7a30023f61e5fabd670da11dae444d4706a1db64484a4f15c2e75da44ed80e4e6ee2b0028925c8445156823da2320da378a36b91daa45eff87f619ceff04c04654e0a103961d6a7c4a9f416c46b05fbbb201b2deae8169b7c3ab4e2b38c822e935c09743609024f082ca97e259b0e89650e5044765782c85735b386ca9f24336ab267a29fad07d344ae60ec8e4f945e5379afca17fe8bfcdff6b314191b9d8484f1317042e9dbfd848c5b247d1d22294848f62ed59a702c30b21538a1334eceac649b3e6b6945fff987822c72267aa1cbeaa588bbf8ed961314dce102af7101756af5f4a73a0a2488ba7ef0a3362d7b6ffb15de96ceaca1c2db1e4bc1a05c3c1142dec11d9afadcf02aa25ae6631c25f7540b6ff1517aa638d339e0997d4ed95fa3f5d286ae10cba5ed9d6cc9d8368fa56e30d00913907240936441d21e76a79b6a8b3daec3a186a2dec6f29904df2004124d216f36800891ffc3b8c18ee253f7f222685a694f303dc51805e64d5ab9620e27aa16e1396fdb0a4361417b6df64682ca9a67480aa39c4856cd093ee816dcda8fe52e322c742ea44fca36444ec2bf5b9d89b7f2e8eff8df71b8cc7cf7c8ab64df307aefb7d1a29df71323217e41779ab300a349b7ebfe8ce3e77c481a766f44212fd4768d087443aa1e8aee90541207d6baae98afe922acc1d50369661ed6ede5aa0fab17a1e53480aaeddc93287ad1916f26d9db9d4659ff01b5a210c36fe2123270149b9d9482a7f1869abecb3187ef29c3befcf25384891d36af8f9f2724d0892c9fa3b9cdf45a4e7c65e3cb97936e9d1797488f6a35ac8f5527073c24413773288cb431c5bae02a3a249f55407c01d635fa14be78aad3c792e783a70a6a170e228b2caa09de33ce97efe5080ad7ba36900bdaf8e4fc3d13b42c8265c22fad147a522d5a7fbaba21501c5f03b465bb022f9d3521844a799b9aa43e42f3126e449fa701f695ddee0483adb4dee8273417b22098beba17835c18e08aa302f586c158fc97ea6b36aa4d8f37c8af158c5e78ef4854803c75c25eb43585594bd933844ded07dcf91d8cbb46e5cedd58f062d0b5e7d8c9ebbd5a9c45bd08d843119a54f3ee07c0585d4449ceb698db629856ed585efaa1dfb3a8329a51e5b40420af0118d301aee226bed5b5999260f2a8e8f7fa728d4acb3379879ad0e139fafa810fe588063d3a1e1df945c27206d9901f08709513e8d4b703e2f20fb22c05f3f169004931b73231fdfb784113e1d890127d215c870e2230d2ebc72db228056749389ed623d9be5b7a05ce5ce87d0b62f843e6d00c3565b6eef8914b0a2e3264705e10b35c1b9a5ec7e76b811cb6865e1b232095ab96f5cf7d0e561946acc8573e04649d94b5e6370406e5b96805414f902d2882b28e8c559e16de32daba5c25d98fd6c3407e158b59b2e1a04f97e1c0d5e1f9a397edb2bb918f020d7591c61e98ab1deb235a334da10c8ffc950f4b6c971a492d5a04aceaf2b0152687076b1c1f7e952be33d299d800253337a4be1a908ef461003d3d2585e63caa8d3004991f9955386d31cb82708364f65eba14c80101d27a760e821c16b975dd85bfbf28ae8010008f3ccbd08233548d21b66888ad29f8b21db6bc5e28e8767517a5b6e22a32b9ec1ad2b716bfdaf5ee5b030378db9040f6aa917ad45043d5c8d9097ced7c3d90538e55430a4750bb6e7b1ecc8bb3d805f849b92389c02fa4120a196c71deb4d09395e0a5d39195c4b3f601e083739a9d865be5917f02892555c06eb1c0d040426d919e2646b8921c36b4cc47bc7e5072fc471a621387eaff9887011cf59352633376fe0b2d4ae32e6cf605c8e258f32b501842b93d26840995a51632a1c391cc7cf84e75abf944c45083bfc2668d9bf0371cbdb2ca963685f247c313185d9a9648f9a2e2876a84beb9c06fc275deb2e4a71394477c306e807412dcf2ac4339bc76395f534470615328e61df530158a0bc6abc95d27845e4954181b1a5ae6be70a068dd5106ca96a7bbe49ae430933068527ff202904e47e064684f5fe2def672ee91b7289acf8dd1b651ae68ebf700eeae975f669868f43db84d9ac3c791753766ffc028a359c85184c4ef9756cb0ef47b487d01bcb0450d5b998ffe3d16ab378d48d6d753d20f63063b49624047760923a12891d798dd539812811ccc3d2e385c5f65c50322939ac4d3f8f7dea073ba6157e9b087cdea994b9423ea471a9039da0beed1b8e2fe5907ac0822ca9166ea27920eb63b09b8e0ca7393c4264baf996755789de16d803e755d73a6cb7d934cdd08b2e0863ba2a2a9e332dc1372b229b9d90a376a3ef722621663a370f88e8d88ad53312728f1b7415aa6bfce09c17d051d025fab20d7599cf2ddc84abab9200027d97d11df75e9dcf039aa40ebd9f9b8eaf74581b599df08668438caf4ae41531b1a0817d4e387205383472a80c77f03a27aba5c14472f65d8ba0896b7b521fa1cc830ed18785c1fd037a41a50b594415fc3900aa5c2d394ae0d74ac0524c6917da58be5a0eb38715489fec78f68321e7140f315d5a3e4d6489fa71cb3fdf132fc0a68c108d034006608b008e8777e9a1e8fe4dc73463ec5c5565ebf669a3ab849a0c2246498df29205e82c9e4e5de4b9160c22697e673fc6415a588b3c34fde8c8aaa3d196755806c4b55ed0d258ef2a8f2a061edefa3f1774bef91412f7d9f52aa7f9b8518ae1edec37db17fb2c0050dc5854af3aa9f22d28cc7f428efb0b146f1320bed72ec8656edce92fae8ea61e7e05fb8c852e4d84e1e9b2b08620da4679010f6e28dcb6432be968982c02fa2971d86d8e05974a31484b694e245743b751add3a97aa1b094c3edd54461a9ae48a12a92237cdb11f540d5f9c680b655d7e522ebb857819bac9734d8de369bd879824bb8f48176c079d699dbc2c067e1247e83bd4fa4e63f960b1d5f9bfbfbc23615fac67c1ea3bbc4bc8bfd5aef1a75fdb6130156288f597c2296e1a4f68f762e380ac29aaa81cc72d47b64bcfb50fbabe2c47cba1601597ef09fe4ad127a65ca44430b8756d6f6e1737fc2cf7c9e3dc0b99747e16286c21247778ac810205dc92fcabbf1d265a45414c0802ea7c11515d408cc9d31caf107757a2a4930e01eb194fd13610f1510d34b99ed2a3c5feef0eebe632bf0b4b20814eeb7e759ec0be51174756980fb07f81d6ebdc11ed8ebc5acfd742a22c9796aa4848a5c5d04df63feea6f06fecde524a9949444448e5040305930453b0ae82723b3530c9c26288b223045debbec5ebd3e9b67cd59a6993153d0f97a419edeec8f7de7befbdb32eb74fa7c349f174c97d0a6aee67f28051d212e44c2af0be647d3a1d17cf172feeb6d65ab56ea8b5d6aa0507e2afeb237ec1acb6fbe674eddaa3745066adadd56dadb556271bb2fd58b5617e66ec5afb66970cd97ecc5a5b6d972d5b6bedbfbda8b5b58b2bdb8f596bedcdf295ed87286aed9b5d4eb2fd98b5b67aa3a40b2bb7189dc5ab5627255232aa67b1755b5972e45c4956a874bb6361eab6f225084b4e6b4511579596d14f169c0f179356095996b4801861f192356129e20367a5aad6ca23c25617f6055425070f17575bca88e07545c86108c7c65f300b140d32b6eea45a5d20e1926e78e508c212e2190186221ea5a41a4a60f0dc9092e1b8d8f86ab7d8bed884191f431bb3e31394a45c1f5f21eb5e2b8857b9abaa2bacab2dd995d75f7dcdb06a342c9b095c5b1762da2f267b9ac2e584dafa8cf5c27a9f68a861805584dbe2bcc85a9fac9472c548d65a2b12ddf8982738ee415e77dfc2b8abca1a42d73b26d34a12735431ac383093c8abdc10c398cc8a97165e22ba3240ad1c985aefbd45f97e78efbdf766ddfcde7befbd7eef967cefbdb7ab57a16b6df544952fbf3708994b4435ab486886838214d651d8dd4add935497762a5c54bc982f8a6c909a1164c3d711136c50a99dc0aad2f2f130de5d6c74b0a33b148ec9491fb7b6cb8fdc1f767777773331e5ae7577bbbb9252d592b01c2baa9eecb417965b2877b7bb77770b5532e1852a5224bb3349e22e44a1eae3d5adfbfda08804b9fbc75ab8bbdf0072db65050f6a855b1554ee6bac4c7cdcb04a5d8664ffd0ddddbf5aeea0967c65ff6a4c5c5867d204a9423129c1c883139a2547cca46bb5bbbbbbddbdddbaeda7d2c31a05ab439e274ab5d65addfd86c1aed6fa551dca0953adb5561eaa9bed5a6bf571d18362835294e5d302023954942d17eeee3e41f5422113c585e90ee4dded2e546d0d9183d591edaf5a49d07254978a3cac3c4e966c3816308a908468d822e18787c91611cf94114f931b54093c5ef0d020456bd2fa2297fc886b05b3c1ddb378c2b8bc8041323366c64c195458982b3363a61993c5645d4573d784c5caed1977b4786bc65bbcf75ea41c9f4ed7e304d20ab8d6bef75ea4ee0a33864f30a66c596a84156e0c2eac775baba54507afd602255520a50ab45481982ad0ad02e1aaadb5d6fad3b6c31aa3b45f4cd653b33d36db53647b926c8f92ed59b2346badb5b5d66aadfd18129446729bcab4e4c0ddfd22e9d3e99496986e38a9132f727d355a26b5bdbd1b446a078b6ab5da0c2d3f6af76483cb93fab1eef42309c9830c344b8ed88b576badf5c25cb5c66426d8acb82f2dd5ee129ad4f409444e28722970c20f1c3b5e60f2c30ad8d2578d8e9f9eeeeeee76f7eeeeee76f70edb8fdc16c38a02936daa218e1ba8d35517ee056b584fd80275ba1bf527fc01abfb8fecee262c813a5d75fff9b28282b008831c85eae560ba2772dc4c205eed5941b604253f81c216968ea231eac7abf7cc278bc89b845cad62ba00754d4c980c51c92b8417a112d30830c01292988ebe988c842450a7eb72786aaff31b4adda6530e5543ee7ee246ee07adc98ad7579ca3fde2aa23780cbbbbc71bbc727ddc37a96d574d61079da8e43a28525a392849b8fc90c962c1848055abd586ae6ce7a4d5a3f34af2b65eae56ab09556d915ee7c4e525d7b75b35e40764f923fe11951561d283f1318a02fffd3b96a90cbd29c9f1867c1463f995244b93e431b1adb1d6da1a47f15770cebccd49f3b1d37c0ec00e1dce2e03d88e781c47efc7d3c00afff85805984b14c5e8a3f7e36180ffa2e399aa003fdcaf79c7efb606c52c982ac03c96ef6ffe8c0a30e3f7a739bb6f66d1b4b3f2607cf28371c46f9a5f923c2629e68bcfcef7ec3249927f92df9111103399affdb1fb1e3f0732e0fdfc48f260f2fdbb1b97e8070c843ff316087f060521e373fc46d203fc973c41c8e3d955657c76f9a21c807d56b4133f1dcf0fd79f430007063f1deff3dc199932c508d7454ab6c91dae8b110f92e91040ee9aaef0c0aa4188109b931018f98269a105129510315438c046d87114648fca51b5d07121975be2e7c2008af298bb262c2604c85d531856ed829f6c36cd709268ad30eb30c85d539916724dee9ab064989f57a444dde97204a666f0e0f9e8245594eb63bf525e2decd415d2a98855767777a217b55627a92f16707dc13a54ecb667ddba4d921beb754272236bad3b498a96d8acdbac205f91e4680709d3550d9cd30b39d0d891a136044968e7080e77658b66c92bd628643ad8f1c90517d91f5bd731c67ddcdd6d50c0a480b30204880d2e6eb571870832dca510b9bbfb0a528ec12da8c5bb00e6132588c80c435638c29e76ead722d75a6d97ea476cab7d41c9da17bcac05999e86dcb2b5e595993173c89619ab4f2e78c9d6becc3e88ff9c4f6612298a522446b7105bad5190c42d22dcd38eae1a4c2f629cb861dd20e184102c1eb818275e48d2e202cd6b3fe5ee7b51dbb43495bb77e0d8594c66830c91dba62018b27a6b0eae06210546baaab090519ae1c94eb30813e1a2d0b5562e3344b67e09e13199d2cd8825c2b2e9a6265cdb116241b50221b1f15a6bad408272ad4a1fd082512584e4632464a7aef83263c48550d45087eaee5e96912ab55677af33c4aafbb0a0bbbb9ba092727faddd5c88804430c126194994badada043434f375b2ee86e196fb6bedaa6e9fd69a5d2f266bba91f10e2cd181509523256137aa175fcd0890181815a05abbbbab7f75a70af35a6b779311a320af4d3f58b1eef6a6211bb9fb6734d4c84c4902c1256aa328914bb7a9b066a62c8950a4f0c55433663a8cc9acbd354851d968c0aadbb5521aad7ae0dc0df3c24d52c65cab24fc65d6be3747f1b276cc53fae250de7bab1426fbdff7dea62758f9deaff8efbd178aed5eabaa7cef886b1dd16cf585f147a25ea7fb203e1233f9fee75ceb68ae21e97342ff7085fb62658287ce79d5bae2060e939cd20cd9912521453747bc8e1055904baa0ac1666a094c96a2d80c383060383a20a929d1a891cabd30028d93ad2a186612a9303818cd2cc185198354161185402ac971c2d8644b06238c444a0ad1a5e1f685c3917562fb02835167202af2b03e51bad179496d079018562535168af2932a28a04c832d6723cb80e312ca53553831629072125b0c37c5a29e21d8eb23aea15a6bad6d6bbb9568c9bac34a250524342958cd006d551236e375d75aaded4ee14b6e1c3bddd5714b84beff62212c37df167855c8f20a2409d4e96a0db2d5ad3ba9907377f71d206e337fd8f0ee767777f7eef6207cd5a34655942d2763e70796538f1b66ec3015d562a820e52386d18e0a4b537cd8ae1537052657f7ae75272a2f3827b5da5925e5da04e525fac8cc9869c6643130610d361f99acabe6d72ee1f1f5b0a9ec8eef540765acaa5926cb48992dd965b2ae56eba4c78bb077ae986a65a1876988500d5f327602694e16632072f8b130cce18c895930fd631f3e78e2d2439ff1fe19b73963e785c104bfe60ccf309bcf014873962f8e24cfcce39999f23b327c3227974f92130071db522597e14c798aa70c06b3fb66dea2994312fc4f277c7fd0033f04c3da18044fcf6c10876298af47cb22faa1285a516cb16bedf01d05cff0c5330db932d8a07b18828fc132c8ec0f77fcca8f0b13b7a9dc93d32e274428a79d550e43213de1d3c2870058020417b876585901eae909c39ae5cee93625d7e4cee996c4acc2e07739e987cb1fb6634331d3da41cd5d6780ae807c5939cbf8eb0d4f1378b53b9b8cbf0353b343d3589695f8828cd114bf7f6aa2c3a53f2649921441924fa2237e4b7a107b0b5e66c187f8902bec0abd3e12211eff47f2e0ea677f9277bbf9b49a5fd2edbb498e8e28f9e1db7577b75d75bf17e747af35ecf2347099ad795c83a6df987650aa890ee3bbf51b2c764826a76d137af92157e825a7ed1f944fbe8a8f02f76dd22fdb78e516810505a7dd110f4a34b46dd21423527cdfe6f163efc6e639f8bc4fc9336b3ad05834ecc24147f483fdf2fbb39dffc1fcf020509c2ee47210df9f865eb924490ff08f288af16d7ec465f572de9f687ad301a541713e8cdfa4ff0710a80aec68fa97cc793568454d34f7014d69b93037393e4dbba894f115b33dbb9cef1dcf7b2d8a620fa7889bf33f76d379002ce1e5bc1a58e2b3919fde8cc02b9345bc97fbbe56f353bac93690b4686a5e3435499ac79fa61841cbe4f8fd98a68be6bd9321e3f7f06977a4cb025114e3d33c7eec8d388fbfb1361a76a138cc24fa81e64b0fdce4b4ded44abe8fc8fd698a11d9fbf3535a2e713e0d73f9224e5967807e149e886ff28311a7d349025311f9c38feb884cfe89a6b4ec5e52d8e569d0e48b28c7b3cb2449921577398bf1e7eec6e6d30d32fef0692795f18761172d025d061e1ebf043c0d3ae061f03dfe2ff4f2f73c6f02e097ef01f8250a4226cf341c9131f9fe341de6f10421e31423320d1a767918f8e39c6998dd025416e2b13776c0d3a03d0cbe106807816ff67decfcbec3f9e689f38dd834f3179ae58b240fce637bf68b208fa4fff7212e7b3c5584d97c57f16533ccd6343fa66ff695f8c80e1cc764797cb37eb3f1bb91a47d4e411b739cec607cfce4f8184d417cf9f604414e46513e7e3c9e694ec6204873f25762c601e1dbefba0d6cbf1376a0f9ce232bf9b12763a7894dac63d11444f7e9349ac678fccbb3fcf12c1fc49922279b5ed5379bf27244be1e1f8934052d9b5f7e89d3fdfd807a38ed8873a6b16c7af7ac8f49fc61f91867ff94b2125862e923519265fd6624899adf8c7c7cd6fc3dbb5cc9f73ec48f5115252853a6cc5626d114b22c86f98a28ed9b7d339bb3fb68d29aaa0067f8ac434cfc5dbfd9488e8f3b8ce0399ae39b5f3f121da6e9c01233d8abe4046e269df4a0c3d7ef3220923c18637ccbb22cef89a2a6b36539febd373f0230a3b0dd973fa2b05f63f338fd72cddba0e997c7bf41d3f16bc69a724cb1994907c104f847d2f18f28f91c8064ea5f9e28ee9f2063f249d1bf24bff49046114541921fa445254653af28fb9b258a3f1551155f262bb86967d58d275901056a9e44534f05f8a1e6cb778ca611782f5c5a5c6181e5ada0f26a4bca408511010b4266c718127248121345f415d513060c8c972f58bcd8d0050a97dc9628af18b4b0d0d5230b0e2e1a588c18e160c476a5cc16981bb26865599162b39a544162c31395215841ae784cc151430dab2329504051a05a401953d5850acb932a4ea44c3569828486272643724166e0b10487921a498e90140192a1488b2363a4ba44613152054a4a91264f489c9e9a9e86d40e17e4013c1c80a301353638d2e0092883a7160c1863a24b092c24aa2c40ca88260a40928027040ca105c180c7017018a0c605470570022280530b9d31b32e03c022802a019092d3040048d0a773c80711c1c3021c216a8038fad004e4a1a905ce1859971b2c1554b191126bd20149cd13cd1033c80c8f120759633cc238a07a712e2c5805e35a7a4ba4124601cd269ff9323366e2fb13bf2f0549f2f7fdf78df866dff77d26682668dff745a5a048febe8fa1698a9c1988d23e14d4f22f33f19148652066176ce05931bc4140af9ae3185eaedab49a0a9fac3a6d36a3c9d299077e0569b51d3b3ab790f60ac5842c862f767b7b7bd3a881c5e52a3743ae0694231821975b3bb3861b78c18997194eb25c414283862c8a62f8848cd8ee1a58e154031753d58d851954523fbda2e8bdbb8d80c4b76114fe2c27357d64f143f363620b204bcb97183a7260f2d91193b2f8e449164531f4202f50f7074b98544482ccfe188450f0e193b98b7ac294d3a7d5d28b28b6778377b7e89641a453a6898d13be28897264078becee2d7ae1271d51b2e7ee4947932a56d20d6832cf7b73a8abeee54950f7903b91ece60ee7e5f6c4ecc41580445114c1c06888c0b8c0a888e1520ef1aba239230c5753108fa41a329414892d82f705a4c2446de122a6c7468c2130aa62b8131f47377cc094b9517d214455e980f139515541b9cce9d3aab350a1a4474bd08f9e9f1876fc43ca9ef562c8f3aa54c933b96baa324503ab7adff049a1058f1940260f1dd889474f9ec99dd38e3024742188d064a88792093b6e47427c6e4c36302691140bbcb064eea0bac284c6cc101386c3948e1e551f0c2834884954432ea0929e662a90532701c965eea09272f8e80180dfe83d11bd3bac5d8d08e004a60b0d0dcc16903765d64e7412483979e1038c899192cf08888f61f2a9edd509e0e20b2364c8290c0a376057eaae788e102c0ac1912d362f370c75e58a681ebe5344f7eeeeae028a2d766b813e383ca93ee2e7cc5ae812b5c48413642451daf18f287b68648c95b7f8393820f9ea9a867c2081cd403242468c11325c5f086685ee56e25498c4069aa213b145c1a0c40588dc1921a3946f4ecd17fd061f209acddd130e5e616a9622f7f1719cbb27ae2eab1f362469514df9b244c23764d64ef4102d2c0902b5a4042a48765a684c576da81ba8bb5ba89bcc72e1d5412033774f59b0b453015f8cb3a79d107610058c8519524a39a87c4134f15aac1eeba1288a9667cb506dc7574e8b08501316513b9805bb70e6b664cb01fc4c3426d65a45f1e60082844a96511619867c3f5782bcbf17deedca48fb9ca62ba92b22397d1adec22298d97de72dd6d0ca11528d951fcba2c6a6f575c81d54d655057059968c72b4508be1850584a87c723610d6e42e4a08ea7d2cc85d944d2ad7dc45d9701f095cc2fffbb00bfb3fb1fbbaaeeba484dd5792a73d121f58bf59a70109bcec75197c3924793ed00b8358400218261a40b719827c361dd5bb06d5d3b8157e247b0d49f65a0e05a3083164a456086211146627f4a931c99c6a2cd0c0b8336717e0effbbeeffbbe50fc3efc4e85983fd43b5310b99399e3373341103dd0c884896f04d1655073f7381cf1db2e03ffee437419d47cf77f010da4e9d333c30643b0f34610ad338cfdf4ce33a7986b70c4b3043f0467ca0b9e5d0ec19fc17514cf523c039640a8148c5d499d532204010005a318000003201c4882244ab2a464f714000a44b468b0a058448e86226118100c07822006624812421884613086c130884aa9ea017126ae2df62b17c9d73d4aaee8e1f51a762dfeb88ef7af509ad75bf2ca7297b5eb4e6b97edca75bf76dbaeddb76bd7fdcac57675dfae5cb76bf7edda6d77e5deaf5df66bd76dd6ae3baddcf6abfb7ee57abb76df5a5dbd01dbd741e3fcfa967c6db55fb9b66bb7fdda757fedba5fb96d57f7edca7db3b5eb566bb7edcabdbb76d9aeddf76bf7fdca657f75dfae5cf76bd7edda6dbb72dbae5df66bf7fdda7dbb72b76375dd62e5beb976dfafddb62bd776edb65fbbdeaedd676bcd77d5cffdf1b63e68b4a874df422debbd8a9cd069e6d52b97f2755f724d0b5ec58d2bf4acac6f8758bb49aefae9351d702d6a5ca3b3af6e0d5777e9aa3fb9a605af45185768d6f5cd70ed2e5df7a7aee84058454d5ba1b3afefc76b17e9aa975cd300afc58d6b74d6d5dd78752d5ff5a6d7f4e0b588798562bdbe1baf5de55af7a6b0a201afe2e6152afbf5ed78ed265df5936b3ae05aac718dcabeba1bafeed255fff49a16b816335ad0954584b04ef701ad7b922b3a702dceb846655fdf8f576ed2b5bf4b58f1e9570fc3234fea76f4f0b4fa2c03f8de5582b9dca1081b064772a421bbb968453e3cbba368dd9046565584a58e8480d05c8239bd7a8f250b373716a9548c2b5fb378a4798baea7be3d96ed3eeb655289965c8767e5172a746e187f13a888f3ed00fdec88e6f42d8778be9be1535b84f4e0a6dbd24ae6ca40b12ce68c3cba20326411bf70c63976a910d1a4f1fcd444e23299d39c389c854df0744759183b304afe3e821dced2c01bd177e633db35bb3a2de7d4fbc31c30c83c308d8d07c49c4dcbd0e0c7426c9765dba23d34e65bd251290c2e0c594ee4694111ddc740ad6117c82d6206cd94c4ad07a4b9aae95f0f56d001d690e16c5d5058994abcdb47dbdf23756ad3ff2019138839a2e020fbd230250597631c06e99e1e55dd2b8aac95808249f36e1e9c4420afd67e26075fd269b7f907b295e6a61b884adc2fdc6ae447bb577978f045c9639f90ae9272b5668a61ca7275e329168fd46f51b6e1a988c87f3627558fa680ed632085f2c9d81c806196f221d8fb63f97eac50b5f1c2b2a389f25f0c0eb0557866b7ea82e7acb5739fdd5fe6d31e117b11215f3f633e3df1a1eb923f6c9c4d955ae93b66708c818839ec5dba7cf9aded444bd921daa8f0bc373f77fe4b96cbdaa265ddd60737ed8517e80bdb741af8fcc735523b11555752f2f0c903300c713c4627823d8b188650fa9783a3a37a34d250574b92a248843c5c182963fccb6a7ea49155619713e0646bb4b3144e4ff104341735e2aab65acf20a04ed52b4e592e2be5379cf0c65e862daaeb23d295ac8d8d43da4972572994f420ed7425d627ecae7c207a50528d07a7fcb08b6ec072d457e4f7b4e20396364958724ce337c95a12c2c3443a4d9fbe1eca71f0df09e9ba80203cfd2ada0140e143921e01d904720353d4c0234d7aaf31da35777fdb50958a5a4c4d3ed849bedc1469bdad725aa171bd351a9cb236e23d3cf7c82087f9f0696c81a86b5b6e07b3dc5ec3c8d106bf36b8abebc42fd5566053003bd77f0c4620ca3e1f5506d162bedde293530bc94e83500fd0a1d83a725570ae946e88565b6368ef84b43c2a6b018414e7374ae349b028d2cf6b086c6130483efc91c8fa01a423edf2d93c06adf523f1d1e8da1d679a2f677327321f38dca83a81e93f61af1d2d94e1250a59091e5f7e8f4f04ef8c10644be9e216a2ad57b11cf15dd3bffd8c4d3f13fd724494a9d75a8b5b084cb834a4e844bd43e712caf33b5fdc694f0ec646781241fd2bd90bbffde89ebb32c1df4658d924471d6abdc4a08000fe4e2715984306ec0e627bb75ced2fed1b2af399f7d1330cce44ddbcea3af92d447b323fed381bead25ad47fbf4539da140cb15bbe271f75903b60de3becc0570b45448675d32781625b02fa05aab88958bca1629ab0533d9c6eabfcd09ec6e72e1063fbec945188a2fc918c7a0c5beb6bf22bdd372b0ba1611fe6f1a85e263197b4915d299ae8398c9168f3e66a341bc31edf25d5f6ecc69f14ffc144e676a2e731b849c0004108d5fdc70872b31c64f058472912522fb385b2eb116eabaebc1457a597e7186b60be4c7cc4f344a37068331389b7db51a8dde1d88f6267861d206c38c71402146a266443c12f5d517e010c1148a3d4c31333bfec2b217dc3a3aa8d795bf4a6015e0215893ae02be420b454b031e6722288fb2c4bff3bac0837a60d5b42d4e31183c6a5cd365ac591eac873451645c9a5ec57b495262402f2917b6bd9f85a931fcf41ec1f69ade20754e879f023029855cd3087fa5d951f7ebfeca91a63264b45084754a48e45bfb4bbeb131431be39f68c80057135a77f8fa4a2a7513ee49e1dc5ddccc0b14f12c64d8e48e7b0f4da6f7153cc2ee2835c177f0bd71f3994ac7c35159c230a2751670ae6ea45d49410ed9c8ec1410054f4f6ffeec518c7aefc9faa586fd46b67508d5f1c48275aa17ec548f85b36a4cf6140134590324eded02bc9f30efb580cf704e4a22fb1eeea9cd3a92b274d112af521d066c74f82fab1fdb8c878c2f8d9698786a1bae6010fe5692a4576bf4f8df8ad34232f80011d18634d6874bd626a330cd802fca9f3ec81fe96fa8a8d7c64abdf1196bfb3f91260623e2510d4c243e1d2978a1442a03da1b8d62e27866fb332e8f06d22a708804e2176d682ee7eb637d1d254ac1ddfdf7ea7c260c5917e873733ef1ca3ea75646ce15942b1d6b8000faf409f4b7a82bc041d9f746ae4f239177588292680b4e0bdc917f96457c8b7e618da14e1d58cad1bde6c1aa7256c3e24b6604bf737c43b465cf8ea8a8ae37306ca24993ad9d60db36196e21365011668726fba07aebd11edbde20c26f47fd9084f6340352c5979d5dfb4d49d3b1d8cada58c8f6e9b477e143260fb96f0a0e273697630b483f70e9a9336026df28dc235e298008f9ac9a940d1cf8b8499c345cb1c4220ecaed12feddc96c4f6a90d810761951dd38ce0ced3f2cb18c2c80cb0c3707f8dbcfaf75c3a987d869cdb828f1f7d83dbc424eeb36f19f72fd034f011f4af5028d5b09d8b531702cb1d5e3d91e09d00cdd3615a33adee90699608ec4e3d3b59c4a22653f3519a57aa0b4bad7f8e197a4f0a815372341c0e4353d25040f29b9630f7490e74773623d3ed489485c981fe9d8dd0c0d8e440bfbee50fff199cb4f13efd8cd00684ec0dc9f0962a06b33ba78f86691c4d7feaba0f32ffb972c5df51715b5bde6dd9c958b001fd3059385c41b12aef1f4412fcda1115d2afcc7f78db79b84dec469444f9c766b396021d28ad10a6bb257a60f1e13dc78512a12ae4f1b71fb0331e229b5306d6868f28ec5bf1f0226c94d7cd2724f8db589bb1447669950b9abf3db3e087faca290e16343329c97f0727e359eff698632e75e59bb8218dbc415efa8a3c1d0e57f3771487135482cda48e9f45cd366e14cbb283c1c4fbc087f86966a868d76840e4adc82b64f729b4bebaea91b9fde8e99e7e165f2ffd40be8f050a9027af1d7c25e6742c7977716ccf587eb32dbe06dce946d3e81bd6b11d33271ac385bbb00b06e2040a86836afc38276dda159624eba292c1491265b08830264ebb308a8d9d98b664b234aa2757e353870280071a79deb5820ef350a99fae2ebcb1355cbd5160c1ff7b5674330e8a92e003514d8ac1206001fd7690f04b100e84fb1205fb18a038d0fae4f37f028d28b031036bd344d7e84b1897a597458c28e937ee890cf3bee752b880dd574208d464567301e3cdb5e0ae0893342f872b2e610747da13583802ae494bd14bfe28004ba66c2225dd72ba34a9e42bca1092262ffdfc19dd199fcb0ceeaf90a53ac4134c112b61fb6d82abcdb3026a252b17732eabab2a0a86b594a44eed5e42c8571544eac51f106b6b077ff161e8390f56caf2c4970cc5da7c77c8b17c86053a8626fc61c731cd3b7a036e01d03c3e1e49f2de921b28a1502b0b0050bf51a52a28049cbbe36492de298c7c11d8d74e35415d6c404d889ff9066ca9e27e60f796630a339d8b80ee5e2d71191e20f7e50a738e577c9db07f9d1aca20d99806b0d00d52ffff08b54d9ae6eed601803f743ebd34dc644e24d2c0e03a2583e616618a86c1185903d0e475aee82ae6b6587bdf98f4ba9c12f5123009f5cfddeda1de092a290906bde4a76ef76ba888a29c6c8218253ca98791973a66751e01ce42342e6989d93e81e13b5db0b22d50d1fa151a6c7503c1be5d87a5afa414e5a03ccd740b2ce9ce6d3bd0c2580671b4c6d513293894c06a9340efbbf5c8db3bb1f2d9dad6b0b3b9d3b016f0a614fda446734455e49187f76d564fb3b56812ddf9048d778f0695530a7756326c6d016f6b8ef742590fefe03a5e3f8301e37c295c06bac8e4ff3e00a26294e59aaf5f730575cafd8a2327b3322db1ccaf5c0ffb24dd66b7039488e0a23504285be761d6c93a32100f260f46b9092501612879e6f29314a640b3d1d39acb6ecf429059fb7d34dafd27bceee5b2f18d594637d1abacf18877e9c38f666042bcfd8c96198fe83869e6ba647d2082040371f39361277e5eab4165c0fb6b1bc3608d666275a1b41417e704528b69d7fb38bc8ade474beb2436a6c1f2be704962fae155549a9cddf3b1eb55ef912936b0b5885d96e37066019cdb2e40821387fe440127e3267bee164442b25c977e9dd56c1ae419a32cd90b4d5456905ab42cfc3d1a424b1c18efa80e02ad36f4fec07dde3484386a058ac26641f922a3165fef36d896051948fca7c0351d33ba460bad2fcd929931ddeec1e8d81acaa3934af864ee6c9c37bfa73c1aa290e5d6e2d6409edf022d2983c0e95e809d235770305018c21752a4be897a728bb50a904b0ec0764af2ca9e8f09e9a80fb8f1b121a6cf1c00b5a2058efa4010b791c81744afa7a956ccf9a017809e9dfece6ffb809e56a148b4092f75ce0a16850a076c33ac58ddc1ea1418d86b783715f7ce7e022a45d620d7314d54472096c258da5e9242d88c9a33b3cb19098604a08b7b48a06cb48edb2679f1a259e90ebb63f75f3447f37116b236427804049c44d8abdf0ed5d77829ab8be89d3d946b2ef801da07165ff8a2e3330c2e73f0adab48b4bf59540f22ba6d2ac6dcc49535649e711ea7c2bb814c2b621e84075e0354748a45237b34855801b86de3c30758f7d85d01ea934c7e32b5a014b1354bf0e1d9acf78bc210e10536988af0a5c18576294c1e35e55f89b58a4f81967ff6f3afe51b57e364857216e050af71ad105af57526b90841bf488d9bda0d7cd9d64a74fd15308ebb4c0d40373f5f6278389ce1b5f25faea966102190ae04bc1b151e6c40c019a46e494b4549b892291f42366bf890cc04ad770a821204666a4fda54de1a3d4db6cb00cf279234fe5374be307ce170014639064c71a0d5c8174cfb81b63c522775da7d6366060a74cfb66a09b5e88478b2514ace1796dbb6bfc790bf48540934299cde40003b907e41fb27c2904a58b82ff89a546f9f9e6eff68e7eaac90cc99f37135ac5c2b673729a3f09fa7f5e0865f935bdb30e1864ee26bb913c29bd5656dfc3697001fddb4b2a68800b436463751c4a3cd63a6eb9af7d92749fed0abd46c1c79dedca6c4e22d9fb313b6a1ce251db65632162cda9b9505ba4d6dfa99618d7028d54336c5acb97cd6ef8652c59b498d2adb5251e08d14ade6b4d75ce88fbf7dc5b1fa6be554953e9e172acefb7df6db800636da6f3c920471481a0cf3fd0ca5abd0f9994dd86c3d63fc2031b419d023277e7f93980bcba11940e1b33cb510c9a34cff25ef4abf5bbd2fece57c2514caffe74a5738c13e4b434ee72a7123451ae96a864f3e5870d76d7450c4be56a73819e72ad3be36658fa50b4bf64f90c1903184fbd615096676c01467b9682b8cc88226cee1a6eb2e9aa96a924389b6200e84427122bdbf9002353d9fca640a04447881d4bc5b2214c6b05a1bfae17a185b335c70e7ea5bff2be8662d3ef29a2b1edd7ac42d8d1d4038e4c61aacd1dadd70747fdf57e83ec641f3303a3e9565c7c3977aa00a134ab96fbbda8c5ac3864e92192b35c2467b1d0cc615458625da80c3340109ac6be391ad7a96acd074b38cea22f0e8fd34196593806c72a36567250aadb688bdc33ad8aee7489b9d1f3fdd2a27c2c72eefbfe8d89534f3aa00de0b54709910f0699cd9408d3716b52db13f973155d2f9264a0334d63673d953ae997128665562cb94ab943151795e8a7e4e7c40b26a8e2e00747dae6cec014cfa91ebc3ba04b83b0929a8ef6955310797e29a9cf238ff0838593182694fa8eb068c34bd7c6b65311f3bb682c99a24c61d594f6af8c0d8b96aa95ea5a55a84554fda8577df4325b18819a7b83b52e893c1e64d1f70cc5bba54498284c0190abcb5e8087d7b388efcb24b1e26989016e7da32c0012f6ac8d3c8c35bd749d77d59bd464cd7fba2f194a0efe2898fb44ffb6684c2e6025e3884f8bb457f3d037fb206da04fa2140d7ae8ede07a47f0a5c1c79aa95b34b7d9541868a0c04fdd4f8d0d46ca073dfc5a3bdcc98e2b8ff5a0b0eab7448e9925128f846d82c0b066b60a09dd00842abcd1ef5dda181b9dec14aab28101fad512ca06d41aed607d1e8f0017db6d577d5767d2301520b46956129417def2abb3f55c19ccbae37c7e0ed7615d5550cc34d4dd8c0d845f11e9d84cacf7b5f03d4df16655f54e282444d4ee15aa17b09fcb5596ad31f55008df4c44a6c0c38a0e08f2ebdfde2bcb604c0e96d6e9ceaf56056ac523ffcceef3e900b699e82ce17b07cd29fe12db47843e8f85abbcb02bfb4274a5700c511b0b16e6403b844f4de8600b0f1fa2351041dd54f1fa5157470e7a286b7d180e6888db564274ba09ae563324a73ed0dfb9ca9679c9518f9dae25896739afb19c4779c24582ab97a96879db1256cf796c41377c3cfb3a9a070a2a41fcd43e375d8878a29fcf993dbbaa0dfa817abb0191718a918889aff14bee366d85f030b8f442538d953cdb6615562c20e78c096cb70a41569042ca55e1774ed9bdee3aea53085894087da89e14922b1077969bca4c5e7f3184a5f1204ee0cedf46dcf438b495e95a8b22c532f9632bde2823d604240129c99c84c5520ce5f29e9fc92302088e2b76594d58d35e0c34dcd5221d6b92cafbcc1d2358d7a4eb40861702805541d7e4aa60611719940a5616e4e47b90e1909cf641fbcc9e3f4cc80f0fbb3e0f52a52a6acb431b907e87c260411cce7a6123686f95a736463d446da3602d4b20811589ad888ad6c78108181f9fdb335c73b3b8e84f709310903e020506f51070fb505df5eac50b3c0f5614047a439af39b98db12887b6a904e70dccd7cd8aa6749be8460a2ba935688714c30034db37859c152c5d5a4fe36a7e7fffa651e48826484af8bed08dcbb819e703542b9648c5f8c7c52acb0e5ba412415e4012a2e5075d5472303740fbce2d790b5cdcfdc235651d35ea54a31d7a7f94cc966880fbda247a20577d345319959944d4dafbebe9b784203fc225a54433242a06e6cdf21b2227429f8f04dea54b9b2c1ba48505fe6629da4542e1a2deaeb2201630e9760f3fb7d0a3c28771a16f7abfef92204da4bc6f5ee6da81667e1fe459550f627ad0c298416ea61948d61a9372881f08b82a0d10458b09287c1162587655f84c08ddd2346e1d5865bd214a6f96ed8b0b1d9e0cdfa31d8c73c55d0e56e8c57c48670ac0dc2f0ebf492f499c5fd101bdab629b3fe07bcaa8d369588f0f261b4ed3b8770a66aab49b0ca3bf553e7c868113f79a9b2aabb9d24bb68ded61e4e1c16ec5480427554175ea641ea55b784beb64ae0f580513f39528b376f8ba5922de39406ae1baa42df1581a4517b09a22da2f2300f46c568dd5554cf74f9d686a628c439b4678ece48ab80ab5f74218b8f306e826c861402424655cdbf66c59b2474a9bb6c1781f0a858abf5ca9228ecba141e9c6bec73214fd684ca22730c15b2f38be9e7ff60e8a4f59cf5f7c001f34af2602b60bf3c79e019a9e899fabdc28a6b3742292e8da8e011aa6f4a94d0c8c47feb31363822c3d622746237554c2d3208e0a1206dc4efaa684bb0df2cba43ae2fff49ae2a0afc1d88f52f600e08eaedebf5ac42104be2ad84435ecfc68c96ca8f6ff7620fd6998307860588b4051f16e5bdf953ac95200849cdb445c892f39d9735024e0e48fbb8e272a0430548945ef35905bacb8762ba53761636016062ef6ced60183362928e5e1696b77a06f131aef218a0fad248b9315f001e9f520e9d56e0840c23c4b2d0e974c6eb5aaacaa9e88041d3ad438d748cb3635a0c567aae2fb6f067b5530d6e8eda5b064c0ef0d206160ce7f012773443102401b0f43c7a32fb275f41b018eef9a036c76fe519fea7ad446d4f7d3404743b8c80911a754f5b3dc4767b9a9b21aa87d2014ab85dc8b329f370f6f87ad52fd629362a04efc6b4c0087d67a698acb8a1aa40a698c3f47c920032fc037220758ba3132d9fac38622cd55aef6c45146dbfc059da8c048573d9fb5228166a39d95b947b0ab6ea07578e3c7555dfafa267d52f0c6d7644ad694ab9eed1620f409548b11076f5de6461df3be23a2bf0445b177c068baffdb754b36af87062625041a19cf0fc00d6ac5a62d777b7fd021034a5500c1b98467091301f97335a72ab4b386c14f0c39a4191fd4d4ad6891a171fb0dac953080d4c0833d38122d9bf692f5f6ecae0e16a9d2e1c29923780dc041ae0d3164b17348f119413cc8105eafa03a9b7e712147ea7c088de9de3fe7b37966f10dc366b8888879a665808f70f4bc0cbf94a2b0f249a6271eba7e3c056861c8bc1fe590225d022067bc6311348acc71ca68286bc5507505a82a0b383718cf73f5002d46622701cddbc1c08af411415f610c4587c4a2edc62c195949ac5024de283496be5992beba25c142e93f37c04fdab02512a0a44c241ad0d4482feddaf8adfd0e15ae9a2e98f5f5ef0868582d03bbd4b7d292155e1ce2ffd49cf81f0dbe7efc60953dbcdcf5cef3143f88613798c0f68b27c9ae70a08d88180bdfea1f8dbe91bfa1316735da17015e886ce79c2f2b228261d7070d7c885a94c52f8a49914a9ed30f0f319534b5ea53f6403eb3b27ba899ee5ba1af7fba70cff07b0a29eef0a2714df0a68912480707b61b4e81f295f4daeb1078807ebcf1202ae8e76c16cc74bcbcba49fe7fef0d75a80712bf0d6d7315dbeb7c4f6084058f89ab045c09737605df474606547188f0f5e99b9b03d3f4b31072573af948cba6158c98d49974836991bc212f6e92088b0e6c581a048a33e95772bf6d40ce6b1968223f9b067131d4ee3119595ac5a305191968767a7a78c6707f5a315a2b0b8878c68029fefc329a52203f7accbc5804460f4b34d0c416c32ada04de85b734280d073d879a2ea57079dd318bfffb3240883463f3c9c80c54570078758df28fece11bec019d5d6bf145eff262d7d5edf5d37cf3a6add8615c3d55332075fa2d4f3f46f944398b008b7ed5081dcd0a714c04d9dfcd9645fd8afea2279d4ae84db7a3ad3f5e86b92d72ab4593523a4064f40af370f1ba444eb8db9e7255d5f2aacc2c650c6636d702e6c59318063e365a355ccedabce55e5665dfab68d79aba965bf51231d5b3aeb2ef5c160332353886f3f8f7d821041faaec0b12c381c27c0281dc1f15e1886512f41866b1cecd0aa4fbec91b87b9964c9d444cb2f35f87e90a79fe8ce6c6c497958881606d25ac4f0a537f0162ee8134acdb7d07862c4d0e75926b32a466feb62c510f8e45dc357b7f30baaa88d784cfc654406074cc84c2bf438fe2b22300177be7b89907ae00007a77cb446ac267b65dab42384b5eb6599be121da9e044b72dbcecf823d997951641f91b37f12a9195744e9f208c937a49c2d6857cd02558542656acdf5f3131ba124ceb3cf6296a181d57dd167902a679c5de9b40d4be1a960c8e128a3a41301aca2d98e5921dd9bb71c622bab6bab31876571584ffcafd75efe3a31df71acda23b649467e2cb947f577407696138e839f626af0081a37cf6ea9441849a29ea0c9fb73144b3d3ea3b86e4190d03630c969367f8ad4328eecb0d3c557d9d01dada71543d969c739f397a4dc2b17e3100eb8955300c6367aec5432bd67c44ef08457debfeee783f31cdaf51ff53301e2cecb72f591f1200959b9f95fd2ac1fb355a2a1f6f28d724f9d3481202d75b5b5b2cf7903ba213b76a8c99c5548a3bd6a3a3820d7a2f77d9057264a572c08ec6bec0ae830eb8520fb6d27ac8d73f278201e790bf7fbc9531ab45ad755e140dd4772fe075d2f623710119516cfcf8b1f58af2e0882a86d01571390d3fcea9ed5021019ed75409b4e2361c21718606aff903abf07314426be1f6213f90cacfb7aed8d2b141448ac4f2c0e6fc6ebcc0007495105954f87bbe89c86d224e5ed15026f6cef3bd25a79f3a015066ced2884e2c85805d386f9b5433d0285241bcb3040c41b13413d3e570eb8cc58dca57a3c40740ad1e7c8cf06ea60b3463f13a161db07aa87b536e105b850b46412f91879ea52be122c8d64e1e186823751e1d1a79c8c0af17506f51239929cf910a3da04b595c443129ff2a5bbc7206f2cef57ab115fd1368cc39cc00d69cf8c5dbb255d86f8725df4430f8fed302ae7cda3989907a8355dd7b96392121bd06e77220fd364ce9e44e0cd33ba6a06040e6aee45974d65b935076bb9bbbe5905f99d8ed4b41c9d247d1bec36655385397e4905b457941357634016e0429deb136b46a5003fffdb5dc630b309f332eb5cb0bff5d3858655d1eb27f104a2ea3ab5a68a24ed68a7fa09dea73eadb5ff5d9e30921978eadeac58c1005fed14a37afbc5e376943ee33dad43208db976085a7c3a332f452d9c7222c2f53b02bf118fcdde53ffc4deb5071ae63a3eddcd6c0c19f44048e3bf4867ee39d5cb86af698a7a6560ecea622e099e3bd61afef70e9acd9788da6d606e25c140477e90bbdef5d4cedacdbc7dca9a531b813f10bda12f2baf72dbf3b54173d8e97c49c2a835bd4c27889fb26bc983795769a8219933ae13697aa985abb36cb228979a970a72e79951563393f504cc1619770cd5bd93836fa476cb885f62f29383f2799fc023cf0595c8559bd580caf55dec3e8456d2ae9c016bc588cc9854c3aecc5bf64f4d928c51fc623a0bc8c9799c7b3f674aa16337d5ec1918901a904bbe4497892efd85145202e57a31e5a919e6555443cf83c2df972b8ccc3b1d318da6797939df2a44cc975c8e3ddfd7e887e07fe7363bcfc40a3eaceb7a86e4b013ec365a0a80e98bbcec27227c26a17c5bffcf05c8bfafcc737c00007df58df471e994209a270ebd161d5220c48f9462c56825f956d90258b91f0e4475fc01f18531f2e66a96763ed1ce5b6a8e160940b2298e6112f43af452f7dd3038616225e5dbac69f0f0409171358ee903ef63132e152094ffcfad9200b377cff638a7160b7f6909600704d497ee2e7a90e858312f8cf0bf683985d25134fd2360a97923063d2dc1a61d6a43aa6d6dec596f24adb357b3b664496be07614da805a953ca688d51e8ac51a962824a03d71b5cb43fe99a2644874bddc8a3ff62d948f6462ea4c0cc9c903083990840af66a86c7ff26043e34861490b91b5399d275a69d553fc5884acb16f78ed75344fff3d176dd0003b92b1d8c2f6c207cde33b534f3412c3d4fe6ed58ad2d52674fb2592cb62a1f8aa1a3174bc6052d6688166fc6e78aeb0f8a0e0291c952b9b2d45649479ad9153170feb8b459a67dbdb0bbc209392a48290d7836c41d0a98bc49cde4382f191bc2030ef54ce9de6c03304ddf24b0cbeeae8b4a8aabf768e1920f7c35b5002d218b74a662a8c9126a18f1f7ab12a3f52d1e3f6ddb739015cb1ccf88c2b64b823514abde5ace23efdbd90a193db9bb78a49836820de90254815ce7a162b3a90852924ac9f6d6869d7b550a235ccda010d23ed5ba1af05de9e9ed80178bdc9edba1910c694804a92d23f53c6f4f5d258d5d988d0a66d395215177ef4fa3f01dd9c90c902347423974d5239b4e53d05db83335357d6d8004d596b270b6d66baf3b44e526031cbdfce2c1e00a290039d30db8a2e0ed2a9498e4d87c03a3f9b1b57fc9e29c9510b956c5ced3ae0cc4093eb513a540f7ece54430bb887efe8b8726a305a12c5910e4183627e3b6d90db9c608c238211392a2426ae5061fca0e28717ffa16318a2ca70350d5537ea59be37d32866fcfe07e86459243e576ad369a8ebd32bbed9937e9bef07c7eae3a02c0b8dcafd806f8897f69284099a04fe0045c471e5e746e55d4b4a404bacf8b748878e0ab8407e66c73dd03216980275014394bc2247c0d08c66010375297beeebdb0a2b314c2609a6b5603580f1d306179f1f0efa15f7d63c8061eda75083f60c2d15eee1a5e7a7bc2e1f99875376df2339b5f90d45570eb0a1d79da87b504b953796858a5e85f4ff35566f925d3655ca39c1786ee2f7df38678f291ad3362225d7c9dc2e452c9180046d2893956d9b937128ccd0fb7636566819778443c5ad267bd0a2446985b798a5ba834bf4036284a2e9add051dcd4a1e3e35620708ec07542c170de542c2e7757b418eb084853aba962cee2f2139ddd37441f5097ab052e3ac722ab7f970c202dd4155694a4d03cd85e126690167024396a86f86d3579953f109c0bf914c66ada28c5f263cf6c719ce13dce670fa26e465b2c9507fa165d5ba38532e0c2d04e92980795f4849905c3b4939b2db4c750add9ac9105bbb4330cb48db9bc04377f65f80d1c0313cd59e1a0c13aad00bda944e332ec759a8048ea5c6204813adedf04e2a28b3ed514380e1b9934bd78c2e29966802357479707c67d24096281e599321ca30f2fff9933a2208ee7510ab3d13ee36fa2d49675cccf58a0885d24c75e2582779ec9280bbe9b8fe470870c8a4c448cfb28414f54adc4c4ac62aafad9974d8e23ae9f43058c0fa2bfc3580c3fa2868e0834d52c6240c0bb8d324b2aff3ebc8f5d038f31b3ddcde5045e24d110b5b47b4a2bb15d179d275db53e962b5acc8442756be6d16b06286d30a44be985394440b7f89b47b9321a7436897046d531386e35c5a91383f7400c503cd40390b3fe35a29f590398010a1b8fda14a16d2a9ce5f2b007fa03d84c6a352ca0ba5cee56290ed22b2f89b76c6d375b5af6bf400892ec0fe8c42a79fa7afe2c90f9ce545bd080cc287d95b4cc907a34b4f808d1af8d785c7fee3df04e8f64050ae4ec4685ab82bfca4dcbfbb036cbfad683aa0596469439ea82cb571f4c0b3d0b74a6529173f2abd4f628c0567642b609e08ad376865c1fbeb61331b0a3bbb5af2ddab61515b92a865c0b04cc22f8582db4885078a3a2b47ee003610a0e8f44fa929d6750cc3b3b481ff9a3f3d1846d4a05de80de137dfa2bbd0585f5af0cbb9ba9bdae44305678760cc7c676591c8ca844b6146a934105ff68362d49b189df3f9c9890c25d6bfbeea065701e634f52e8f660623a9ad2701188028b30b06f2311cdc1355187be9bad36314e55581a8f11833e9599f0c7260a24eda07791cd0933b52fdd5ea97601ced314bf0d8f03995b3bb4d03ab36aca44f8e67301eca7491dfdcfd3f8437b0b5c52576320a4cb94aadbdc29971b001432c0d312c5ea2185c15cc539edc11f32ccbe56d8592d20d5d02424b3c7a580689da49f3efd3d63759bb1cdcc47fc14af40fe38454ad7b72f5944a8e0c72116a66b8c9c6f997020b8cb379b79516b5902e2ac21a413cf0a76d478767394a26b22a42f35ad2b2df38ed46c110db12cae7ec4e637b9016143c941917789536241ce1969f2f7c16c8051d7c221bd2f019a7516dafeac0f5bbb29399249c25fdff7d8f34a585bf49053a09d989b0765544a12d8444bc06e4f3ebe73468fa8b089998c8b5822d2f844dbb410e44d836dd8868e1be4b66ea7ff19bf88740d8629bdda2d5c0b090a7b710ab159fce1cf2cb858148f6d98100eb5eeecec1667ea648781e70894a7c2b59cd4e56224fbe80f1b335ee5b98b8111f9771f2b6120e5a866bd665d216ce4e0c487f23866f88c31ec15823f29036f45d8d6f03ff3ea87b592a4f5da1c7728c1554dbc72db1d6edfbb1c42a854d8cbba2d5632722d36c45b45b84206c4ff042abba00d17b69fd46d9547071f0844646e27b716f9f001f5ef3bea5841aa8c3e7c3fc29f4d270a02af1295923a5091940103065ae8e824f8191317c1731b5ad5c0ce24ecb86940cead60a0a4fc23762d15c3041836a3f67985c39aeeb1af27d00df0bdb75f51de1331a9e109443919ba8dc5e4690d4ffc5148117228d87fa3fbcb755ccac08b1c73c76decac214a08d69ea06bfb5580f979d5aec11ab60b3972a868080236b898ffd1e7b1a9479d242003dd108fdda0a8105de4aed8c9c7def8ed8bf606b0d890cf960cc855ae7b72b9a6ed981632037df24a0dfed08af8c2b2f695f408fb573449b16c8803fe8fd629a033867013527c2a80def0ff4aca481273aa1bebaf18f3253147951849314693b4b043359b6e61a6df32f50edeeff40ecb179a8d97e4a23569800c8538aecbc658707f1b3e3ffd5c26459eae20a312f21863f6484e888a131c4cdb904110e1d4e3a1dd16f781c53d16b006084d12c8828b7a18b8312be63bbe9cb257fb80943cf1c66ec0f4b11e271cbfe531d06890bfef26fc1f8f7e3e54a9dd9de8de7015aa1a846cd614d554263b4db82054e39f6acb3efb7f70e28df366d8711bdfc85ad1d4dd6e638d304e4b5bd91fda25094f1b4a7bd64ab302dbb5ca848c44554bbdbbc5010288c86831db0d2d78a9e4f72e1d9a55e3f4402505814910ffed73c8692a6b655ed620c9e1a894d4e46c824edbbd7468c514a40323207b98163ea2c768a428db3e723274ad12407bee10faae1438fd30ea9b0ae81c0eab2863d72bf76694955d57fca18f993f4e9bf029ea42541db4193e83c46b0c4b04a9913a994ed12ca9c2b054cf9b374f935764ac29da8cda89ec7ed3807beeb227c0530d741cd85811a968a62b41cd693b600a2a3f96612ac74c63e69e8b26d2ccb22fab38e70391e59cb2552932d5834a7db2c4cf91fc14093f2def73d2ff51a383ce3aff5e5432cdba28c5a5514bd8ebd22adc7e03bc759ff4f30d90a512c5795374f888d530c3975c80b29f4a609affd7051955b824e45dcab7b0a54e8c757ccffedcc8343745b843053425ff5a08940803f5156baa7cc29928efbc59dc31a55e4993be520929b6aeff699c8ecae31f82f650e65caf368118bb0dae544fd1880e83d828e48b36854e75cc3b46c40eb68da7d6e75fa0699125b9de7a39d5a122766e257db894c718ce6e910ae09ea69aebca2419e1520a5222808cbbb5960ee1cbadeb9344e7251b3ff3292d9b75be80e0d4c59665f4f104b3f6e85599b13ea117d56bb244927243580aa48a5fe125830e1adf4d5c4675f76b1ff39976f1e8503a682e8c32bf0faa20c296882fbbba49d0d8ffaab775d6a3e85cbc92c8393516584e2ae738f54a9f4369422f69d0d4a41f5fb0337c8c689078d8443be663e53c76900e0bbac14de2f78bb24a4623b6bd99efc16d23ffcbab218107050b83434af651af0099449346016e4767c22d9ef50b48484d38d63023795a7e09b9fa71e7f316580241d47d831aaee471432ed6753dafd925fda9619c32c1abf2f098fabe5f96ec12c606f24f95be6f6e6a05ef94981a0d62c07526f8efec0ee2149f4760985daafb1f6985655abf2634164f77f90b79cba4db62bb4096217bbb340a5bc62c0c36f1a597fbc829e1335f716b39e4ae138588573782c0e2b95841ce42dff2b397bfb0804aa031db2a3b2c89facb58d28fcf13047b72303f302f42b15fd3315f812f029dab0b9d11c0a12339ac3fb55e41b4ee77bb498b7c5397d891bf4188045ed39038d31cbbdb69970985a99495ada3da8915d054a209436caf5ac91917bd7efc5c662d08396c6430a9a88f7020c932f4a1161be7dae8167f2e1ca6d848b8ac236db5d3035c1e043a9593b75c30542a4e3ac3f95919fa88520862cf6bd95ebcfdc69d7bd206f927f376962def9e7d6b0212b5c5f4268e828a851d78ae60434063dee7f99d052e5eccdaf0f8f1960bab16750eb71eb436330e92a3f8476bb6662d218410697b6fb9772c0c3b0b3a0b72359a405f91a1896cb74618ca956e595ca5fcd09ac62d3467b7e6856c05aa40b363f22205a1ae9e3b4f2da0c089bcf6f465ad90d0367235756da7afed53e27a3175cdc6167bd45581805c138336f8a64f718e682b5005cad356d0a665e904b2303a58044794efe788de281c6d6864c3a00b2fd9fe25db175e8c70b7db4721065db0df6e6f64340ac71c2d7cc9a3504ee1f345ee508a36d4c00b5804e350498a0188b26ce8eb2bbee9196e4c7728cb873b52579e2db3a69c92129a33eb0966783266feaed0ab897b584c23e5b5a7e916d89779fe168fab2c2fafa558defb7a25bbd5f064cce8c1e40fab823b8e40ca436b404a294d0f1a2aec0fed2c24abff4345e622f7b71fcaea67cd893b6f7fba3531b81171ed8ff4c132f4b24556267dd85b1f581de4ee4e90fba39dd20189618372ffd830725fce1637c341ee8f5765b3c8dd4baefa962479cc77e12779cc7325b93a816c71b15e352acf3c72318f83420453b27d75af6e8ddc8ca75b23b793bbd57d28448044d7a45b5d6e17e4b173f26c7f542fd43c77ba356e3ff95d383a17d673b3713b4288cc48a4e43182f337ab320d738d10b4a9e75ecf81131369717bac5bdb1173d5ef6d0651b2113f7493491fdb13f247f78344a1dba290351d1092d55fad4c30010453a93c6e3f425a04d21e446beab717e1ae619c7bee1bc6e901a7e9b55e8a5cf5ac959696a0702fd22277203dfa6815977ee462312aa335dcb91965bda48fd2fb7407f9e37bdff7e90964cde927c887035249038c5488dc140801da470a8447cf98e59947faead6e839a1b06e8d1d50d6a25bdd8226b94f9b749f3ae95693606891bbd6c41db73c3b20a017a5b10c1649a53aa1b10bca4d4ba3b003caa8102c528f3a0ae3a05e2fc5498a0185391f3a49304c918b51560705751446c04f51e7f3daae0dc117322d923e3a6e6787dbe176ba1b53c5606871c3dd0b088e68ce39e7b4d67ec4d960d6744033ae0ae9c37e488c0cd445ee2e0807b93fea8068cd3644597d12cbcb5bb86d88d6b81c661b52e1a1fc8281688dcbfb5c8cd6b8606ed68247150b1eef491828c5612ec6c5b858defe8550763671bb16eea8446d256adf5189dbbd8f24a44b53a3e25a3cbb26fa9ae2824374b46f3fe599c1c9dde69e43fd9e3b876f4e373d471cb959b6437474ee5158c7f413a633ca6a5378c39f1c51064e0c12b937dde6def47913bee999d8c6f413c6f4c627f72fce1173446f7e37c8105193e28e2e4476f545fa6cc801e9cd4aaf7ac4bdb89dbf867a45d42baee88bdcab150d4d8f1e2421a3734c7ad55c11ada13c5572ff6eaa7bd5ea341d051abba2ae28772f58cce747f6e2767ad53ee076b21192473b81440d7cb224c130a49eca196cd258a6af29dab0b30dfb7363b0ef5ef387c5f4d5f1207d4c4c79903cfab36137bb97e4d16ddbbddd8baeba9e3b8e98e4fed8918490f26847f2d08ab8f4c5436b72c43e85511aebd33efd913e66ee7760cb34686b2cc195e7c4da944b3fc29b0fde62740789429fd297e4d19514c4fbd795be1285d127bd8ad2abbe17521f8a44affa47f288e28edccc0a51567fe4cafdcd1271335a330365f5b78d9ba9b859c53628f6c32887ac146ac595d91f282e38c4a68beecd928a1f00e519c630815ef567a035dd6b67d5bd680d7d51567fdbeec42f2254ac7ded893bda9fdca3fd91a1577d4d16e4c1b2344189cdb14a680e8702d07c8cb56d6d5bdbd65a1b8e6e3527aecc5a1397a607ad994318b4216918b4d1bc6bcf11bfe788249c2352acd5e08e738886b2683429975e63e212099931a41199b1048d13220a020d365710b0d83e20981622d0b468f2a45bb4051fa890643d322c788069968868094f0c05f183a6edbcba00a287ca4336c5129a906db1c3f9bca6908888c850c2e924a3af349c10a591c410ba3c5f02a01d544163e302c582034d47853d81061925d713564a2043a9889e2083e867e35e54b898909d6184e602b332460d62397c84a08590183908c1712e22221d80bce0810f1b09c8e70b28bed7175b9ca03691101a439484d0a0010f96904c2eea4a434748074828a1f3e78f69ad6d202892f0c9a3cb6bada5f9d96eb7553198e50e8f17e371bb158faa6c7b897b723da1c60fad444fa81144027aa28c1d2ad14fd1eb357fccfc337fd8cf27799c49d096b892e480064283dd34cfaf6025bba86439a8d2a30c925568c3a6954961dd9a232bd3f6486f47b85fbd9a3c141bb1b8799ac0787091d4d9af29cef979a55b5c9ed6861b983908d89fa28b27b22409e1f2d6a357b3a39cced3ac70c400fd4365f6904032a84a99a46e9f49ba1443d15a16f7135aa3e17e51d6ec17cc49af66b7c639d44cbaf5226b7b6cd71c9a34549282a872f2b4d6faf06009209446bbfd81504c43a9f5563d47574253e2da8f34d6d2968d2a90249270a508b3dbad5984d944bb0d3b1c715eb9af6871850a115e44d8a9b03c27cb8d2379ebb6ddb6db76f78fb0e4edcda457a3ebdb477d7b75a6d093bce191a6f14893c74b84592682ce7c35f971d1e02249723355e3081285f971d36670258d2a950914579ae491164928ae30c93bdd622265cfd94d5b08a63468b939802327c191bb258fed233b9b5adb6474757ae6975cac3c4d005a943b099576d799edf55cdd7ad5e996f6c9d06b4e8e6adb120d9abddebdee9bb3ef795fad1e49c8d7df1aaf48423aa4b9237932b8db3b9210d92bfc0929c9d9b496faa3f6eeadbd5ed369591647e41ab24c9d731c9ed792f8ae86c4e5aec9e07af256af5570c7ba7325db2eca3613657b1a942d1eb7b7968126ca23ce2b1bd96e3fe2bcb21d9b286ff7322d923ce6b523aee67d928850d1c392b2f0b8bd1e0805d29228db4b94a457f2de4532fa0666e63012ee2c9472778f0b5998d9e60e4bc9830b6526d2e250de72264fae98ce4b6b6608246bde06d50e79fe30e76aba5c9816f56aced68cb8f25dbf8c7218e2e585e7c97be3b3bbfbca9aaab27ca6554451feaa6e7c257dcc8a84d22f4fd25684ec9e358a26ea2a28584113690898c1183f2ad80ec02283317e10821aa0fa88b1460a602b961e31c670a2b9bc400c2c7a50c2a9058a182d20028dad545720c61221b820091106154ee040fb840863c70919ca6309a2072ff8d93a209c10c2088d63e1117a410fdc567b10ba01c6b1f000c619301f366b0230ac10a2562660f800619a72abdc0e182188c124410fc87042b3c550d92e131c08155137adda2ca3000211a33a4484d92c48c387910b72d84632283dd182d1a8ea8c46a3110f5a1a2e1378cd822942700189eb15549afa1684649d220414080187d1e6a4ea580d8a248260a5195b08c46dd3465b8d49428a3c9e86b345b36a5952a1440e4a34a119b960a747f831311fc1acdcb898d166c3a6e18043adf531657c3437dbdb48761aa721b1cda98d58384d75efa6691a143f3e59bb1c1450fcbcf278bf5929a850a249a572ab95db6c1847c0000b170ab89802083d04192498624728166d1be5b88e30830735449085173e55a4907d23156860c104880555a2c0a6a84202d918628c72c0440c787842e033042d8498628ca120be2ca7184307793ccdb629e18a114ca146153a236bed14d95a6b47560d9f1d58d9411845a31a2c19c3c4e4e382090a55d218fd2ca90245d6ae68155419b1c0d3e40548c801952b64884f5409a28a0f77debc408d1fbc64462c59a383806106345ad0032b3a7862840de2c8898a5299348106025b9d428d2fe61a2c9f3f5fb73a50b391bca3811a649861480cbd6a20bd92321930ae74b1c60e7458c20722c53419487738d22cc1841c7b8c72d6c47422cb51163d3195c8f377fef334f340e687cccb30af81f9e9b230f028b771e10a3454007591691e69b236c2c2ae41bfe1af6268c5541b516a81a458c25d4951820c92f00235864002cf11804c5004b4c4084a28c21522a071458c217091069010a8206a2208490021ca0f5860250568dc6087336eb063c61a434528e3073ea8428617557030461562c8c2a081501160b4a0074e7870822fb0b8c10b2c42d04511174108f2c10e78a0032db6b0420b2872a0040e7cb28002a4821bf480c5154caeb8620454906085106c30540518331d5071c51453a46062ca1151100105ec091f64547470820a099a48420d8620e50c26c2582248891bfc4c41831acc0089246080c40a64f0c31156bc8cb0a2043e4b8801118ab0d23346942e6090c50b664438119b01941e173c6901104f7860810d6c58810d5c431801060421c850c11741e4c0890d807822053f3fc480c7053e048182263d548143932a44708223f040b44319af1e98600b1da8e4100593257030e286980d42eca0a004b31c96cc7448a086ce030308539c0e3cceace3b3546dd4dabde2f148c7b28e8f605f5c1d1f47301d364a2e2d2ca7efb599fe429390fb63679ddc78ec32d0b03ce2086523f546b88faac3bc492c78f73e72dda13aee40e8cc36c2f1e3f96079de251cbfd8e7f3fd7ca81049cd63c37484338f384219367af2bdee1d7b87e58ecd93efbddc6f85e5ef45f4f1b8e0f183b5e0f18bed647b163c7e3e283c7e3f79f28c9f2ccf97d08491d4d4634219450f5ab8c45a6bb5d5d69a81866523f5debd1a36ac439290cedcd0e570956cf1580f5391d4bc2394f90df8984b5290d3619e0aa1d07be1d8e1230dcb277a98eac184f634fc9a346bf6f79209e963425727522c02faf6e236aedd05ad8775735e7da1bb560cce9f29050662ce6ed993f7e51e29dc84d07c7117ce59eeba8f5d6c865ec1bcf6d6594b6579166eb26dd6abaf89f43164afce0876823c492c747904933c66f7e026e093d22deea73cfff1481f2f79aa54f74a69e39b6cfe902f11dc71e49a1fed8c9e7cb05e3de9d5cc9f8f64e1ca297ca428822c7bb5ea70b9cb50a8b3a07e427d545152906d93f56a93e56db6c9a8f7f97c48bc3e9f6ef5e7d32bd005f92a9f93eb0dd7e2516c04ebd5bc0d17f526e27eafaf49b72a290848e484f3282280a34082418aa420437464300dee178d09777c2694398f30e6280c21611d57bb68bb623e3392219de62d23832565d9d0e086e1f6a1ac4967dae73307439ad3506644aaf7bc98193c4f08632e8010bc4c38739a909e47287314429a4b52c5437466b0a42c1965459101813b6e3373d22909ac98c88ed3dbecc04236243c630e9ec751f84c38894844a4a81383630ee2997bb12b739a9f70017c9c44f47e888ecc6948a4c7ccc4ccc4ec20edd8419a89d97120344626034000ee010000e0019809a5e8799204daf74e8bf460a8b3040122fd4e8be06d3884bec31a16a122f899102785cf5c26bce9b151e134f8466749024499ef4c91e62a60b01ebc146f76a62873b086383d362960b03e854b71e63860c52011151e739b143e7315f04d8f0df814f00dcdc1dfc8c41c089569a025e40de46428200c528cf98d94891e98b907622ec5298e0d94e769644229d2c4e0194c85286b52018494472829eb8430002209370042b0e2161277e0ef7562fdb43a4be5913eeea7ac92bbbb5cca1605e4aa7baae52395bddc14b2c255e8128e34a77e0ac73b65903c5ece85931424c755a1ad326f87ba9503cf5214dc29205b25d917311fa516321f25959a991ba06b769cbb0cd2873df71de14c2813c6843794bd0ab915f2784236e1634ce6388e25733732379473fce5de8be6c5cd91e340ba0b4bb26e9566a52864ab64057e88c71f8faa5f071eaf8ebb94f0b8a1f0782f1e5526c0e40853a986f95e34abee178fcf283caa4a78bca5bb60961696169616969696cb6eb17739996cc90a1c9f2fcd7a1e06e3101f8fb775e012ea761cd745b1e770171be9f46a76a58f5d67df75f7b9c4b4bb94a85f9f2ed645e9d53c0cf759da7731993dee1c17a3355394169f71bb58b7466d2ca93edf21d12d1b5a11fd7c494ab7523fb5eb4465e05d702aec0e84e60867c671030c5768194fa1ac2425cfd3702c4969e962f5873c8f0a6d84e3f7439e87094739945fbec863cd2f5785f5ddcbe7172d2f924a7e99925f6e80aed95e32481ff72f2fefd12df917d4cbcb8d98fc72c20af945534356c92fa7806c6945af5d337a39250579c1f35258d68aba3572f54a0dd91a8d406e2f5a437746303aafba37b5bdb6abfa573d82e52e4693393cdee57b356b9e665ca13e7e54b57cdcb6ed5e95ea1f571d4ebe325ab3c99a35bf6df7aa54ff4a366eb21b7e4323307d7ee42a7dde25fc643bfdab54dd3bf5a6f0a87a5eadbe3be98cd2225cee3497f0f89991e7eb26fba6e47327bac2450c08af2e26794c6ae59ef2d8c5f2bc94491e1a17b38b2eaebc6c7e2fc9838b2b5fab0e3d5dd7dd482bace8a048bc5142af643ad1419048718fd500b541e8058fc318eca224144da22b5d485d54a7e85a0bd42ffb12e2e3a1ac6e696f3c7eb1ef1525cf57cf9d26f8620231d10266e96b05b9ff9a1facbbbbda70844b267e2f58ad36643b493434175d342113ebf7ca1356abc5e317fb5efdbd4a40599a90d3a2c4445232494d8359f57162bb0d1fae7a55e5a59386be9efbbb8da557d5c6f691d654acea55bd91fa7a6d7081780be8d6ec16b606746b01d5e251fb11964c8170dc58f311964c5fadec2df9ed757b875b00d2ab0aa4856e491abad5d7514ced6200d6dbcb3cb7d1b6699b3692344889c2ac142f604e58dda16e5fd3da95f6ac9614a4a76cd1cbdb1c3a69174179fe56160678f77a78f5a01324674da2e4249d9b03aa9ce4e6f99c9e4aa01882165f7c71019d2a59cab828caa33694e74fc8120a9d9fac11e509db54aba22a7b6c41576816d1c81a3b3444d650a2060c4d0ddba1167a353fc4c74aaf2c910b9d1b832fd81103b0af8636e44857669d9ecd8a1d12427ac544fd0ddba15e59222b8deb77ebc5f56e87ac74ab3d92f70e6be89b5eb1d2ac798dda21bac5dd302dc294a857f35010d5ef4dfa3c8aa977e4ab60bdcc8db74dcbc11d355811adb16648d6bc10f2bc3dc2280445243b74c3507551224a744a746f775b6b67c543f51a4c7b12eb9649fba26b260b84b4282300baf189e3f3a8c15679d4602b9044589eb7b55b8832c4270624645062866e8d73090d746b9c4c8c534a9e1f27183b48d01df0746bb451f2fc1ced0df20d1ad0ad6e7e31b322afac904739d361d22406258ff389e6d276ec90b55146eb637df23cdd4105aa4194885224baf543c1903eb42c2e386416b17244fa599485284b284f1913d24777ad1854dd9055b2aa681cb986e612d287a6d11faec8dd187c8c2d5242fab0cf801c23d340d748423e22abe40cb40c52f0c286c1d509b24ad6425925af8e44b7409a15868a4658a75d3be46a87e8fbd3a75b600f03804016608b6cc5e3c895a71d9a8d871c40b346a42999396d630b9a2ba998819519682154254761462c0a3360560b28adcd6ddb363c8ecee15a8346a3d720fb0a046e9f797bfde9966dfaa097a669445a740cee485d2f1f26f2c8b56d321cace4b004b6af018774834582684d7fdb3a0579845da391c5f4397d9bd4fbf68d6f7a28be51dda872408b5dea5bde826f5a5e9f933a7d917ec538f57dbc519cd4a5a801ddd4fba0052d2e425f314e8f4dcbeb715c4e5fa43e7c88715ac64d02aabfac286bde25047fe32d77f9b8ea31f60087a40ec220c5d4c12246641103125889b95c22cb2709fa3a4e82c6383d20915a6d7e177cd30265cddf8b5d2982425e44b95204188e3f0c73b8847f873d16b7bc318e37d611def4d8f473505a6d5c7e7cf39b1e9bb0d62159747c33430d94351f5e47ca0632a4c8220c98cb15c4c9a102f8b044103ce8b003d8104429b68e508a6128451a4ad1e5a1147bfa2db7e9b774ac8f03dfcc9dc6334679f04eefc4a4785a52450c2008b9c41b618321d0b57198dbc0a07d8e380f83418b87e854ed06578a6011b15feff21e9b969b1e90087dbd0d7dc5373dd6621b7a177c337f5ab01429c6e9b1a9339c8a419bbf9c62b088ea2f57e19b1e70083d0c52a42f322a42011a41043173b9c496dfecb458afc4f5170cdaf45dde77c1b5259c4351ae148b288b4ac121092cb0a852b1081a6f94050e9194656345799e25ec54a861712de5018a97122ea934d2a28c5b7f2a50b7a66d59127973fdf46acefaca41de30b5f6231410022eca02574ae105958cbaaca71650f0e22e516177ee1b8decc70d1ff9e43d8e1444de93b266d48d6847592bb778c11630c89db51df70e0ad542bbe26ae75e944f7f01f5ef49bcdbb0fbf2e81e36223f492fd877548647be8cfa26bfcbbbb01d832f7446b216ca0c65e72215ab16cd9a07ed6bb6b80251b92375596b817268413e596beb9491175290c8f3944ad0f3a84b470a6552e424cf9d3969ac04c50c64f31ea7914299bba85b6307751248a4269928755971c72672c5c8d5e8e32a8fc618b27d2e91caea6dae98e5f4a418c053504681e894a9c50b5a6edc458102826048e53acc4e137af272b4c3fdf17caf5ecd40a1515d926cdc389096b7d443dcf1eb41d65099fc5a9352e18446216bbe578bc78a3c3f9eeff5f17cafafc9c793c4ce3238fcf1bca4e725b199f3b899032ca37e0aef090841a41bb3f90410c8c8e3f7d30510b64739c0f2a4242139c032f707701fc7fad32f0bcd9d6a45755124a5de2bd7d22c6ddfc5fa634ee65a30cb331776eeb0e6ef454da6a3b0e9a7a26c7a375d35d77befa5acb964994ce7f0b8996eb1375133c3fcf4d2ad52a904f3da2d2f080c9e77cb61d6f15951dc95d9d5263b90e6e8940e9fec4fa8cf8a91d46c71925146659770e61b35ec4163c1719b39f5a8f592556f3f13ca846048c326b1c0fdbabc0b51e72c29c8e9de299cb7ba705d2e574651d4bd468532a7c27923fcbfb9ba854235d7b661bad42dcdd28dbacb3d9750d3c2b8a88f5a5146c1e0f1ab150d4d8f1367655b188e60a5966d935d21a9d7b6559c70ef6070dcf8170506070e181c3760ec5892e5d9c538ee84b72650e8b7976b1cb94ab26e4de99650af463018c83283a56455ba830a67eec2d7bbbd4a49429edba5e6bab8f4c82e2eef48415cf0bced9a01690a3fe1f12a9cf091ca78e01e27d0a8805729e02ef619bcc9e06d0331bde15a2677dbe8d8f852994c498361049521b187e50f53f73c9953d0decb84e03da1ce85a9d79aba24d516642af5507e3cbdfa5e3adc67eedbacbb3bd7b53fc30594a51466c4809282d8b78453ec730d91ccee876e07594941ba982674c72ed6fd7452ba35d29ddabdd69754dddddd2ca32726b85dd7d130012e3388be9f27d0e87a9627a592cfbd73bd0edcdd1cee0e4b527a35bf261d1263e793e73bdb755cc7d911ac5b92642b133b147751280ef25a471a546bf790862b43e6e8ccda7e3753c9e8ac57739661fb423a5f98d38991d4cce1243677c36e207ab58d50e6c641454044b32199904bb6337b014d9e20d9672ba07a697a0d5534d0cce9a8a4202a3c6f129bb99a6494391a0c5e1306ef67beb711ce6cfacbc74dfad8be219366dd53264dba65e3f32390dc9dbe6a6a952b4d8f5c471dbee80e18d752263d4a78ece122fb5e2b169cc227cc711cd7a4fb2843b7bd8c2419d11dca84beba71925136adb1c61ab9822e78aff7f0091d18e50e6f4d56ab170c859a4630986a666f669a508a35cad8c5b24eb7fe532bcc06b98bd110dc242c9524c81b0851b942655f946f0a417105938ea3323aa524a55b20cd0a4e648b1b6ba0b493e5b526ee8b87d68c601704f14deb54f1829948b114eb0806a246b111ac0677fc5ede51610f03f46abe47f5f0c54dc69579678af43a4b12207329ee4c11bc4c117a99cbd0f0e3f95e444764a1830b60c0850db010e7bb18be9449af66f8c40f807201b27ce20742b9fbb5d66a6bb5b5da7a84259c7953555a2fce77a420558a1c96c85d9653f06008db169b0f80b273915e0c053c90ee10ac9fb902710351d674a8602802f0934e69961683345e4cf4a007c9da320e559c1146aecdbde98beef48aee6419adf97690acf91f6443007d4400d54a65b5caa6f42161b20a5c2905cf50e6de52fc40254b297e9012459652f01465affb993671444ea1540757ad2f78d96223cdddebf05e4ab60fa8dd3b94f9729d4fafe808aea5b11dca9a385419419028732f9633737a9b194a0f52fa199a1d331aa881868868c7ccd5e1664bb237773c07bc0d3df87a10dff4546c33f31df8e6262706198282b619ada1dff1223307310ef899efc0383d36e06752380ecd2906ab14675208778492b2a40c36836d97c0fa243383f63633cf603dce8e83a709c18a418b89d0cfdc867ee6f5383d15db80df711cfa99e3f434b6d9813b9fe3cce09836c5ed4cb1a42c10cb8437f4e03d1e255c294a5192b697e4a1649a60c914374a4c08238b1209ae101229eee1eed5fac55e5b96b7a34edceeb5cbf18c24e96c4f4ad246eab9dac57ad59fe5b41ee02ed6dcf7ead638f271ddb18b8d62b4468a32e72642c704ffc53288c1fa994b711e8395be88ccc117a19fc137a21a32911ea43218ac7888cce9ac32e1f7fa78ba8cdbf9dc70e9dc013300fb1a76df287972a4633662d948bd8d7b365eb1676a627af1bcc68e6d24166cbc82cf11bd568175d2abcbc2d27299597e4f291964c6669458ea36a7f044c227f5d34bb353eade7094bff772ec936e3de916b6d63e81c99da7d4f1f90ff63de91a9acf7f51a48fd4e9a32913e0e39609408073a10d3d886f402832079fc229ad34a1cecc975c9cc13d1ce79948d3c22ccff6c271694a219c792adc82248fd667eba329b78e2b0ff72395c58420e7c9d3a9fe70c1d43f7eaf4db6cd2c4faf523c4e643cb26e8ddb6b0a0cb6bdde9f4c38f314c20da8cb9304438b3278936d3320eeb8bd7e369ecd49b752db0ed287023ebff1307f08913e58648f5b1ea172ac209b28ccaf60820926dc04134cb877e42ac9e68fd2ec2e374ab2db12769ef9946269169654b8809fc220670959f8269b017929cd14208485200b5000cea18050e696223b0edac87ce633f8865e0683363197b90cbe011ff31c3147943608bcf971c51132919ebea1fc74eb247ebcb9cb1fb7dc15b1bcc54778297f94a44c14e6c37f2fe9c384cf7f3b481f3f3efff1307f2420f579ad48c4e3cdcf3847cef939e7d3e974d226a3ac397201c11dc639f0d8df489e09268433ff5829a926e59a8fa44e5124522da101ce121ee0a91001df64f3c7f69a28cceee37df99180d01e31519847406891903ce60f105a0384f64738f3f7aae9f159f3aea6c7c7b646fc0865362194d9fa481ef360f8790840420e86c4c94409961489de944438e410244e2b30d0191255c8e20721711621d4834b94240e3cbd8db0f223ca25ccc0073fe2247197a47b203d823de9d50c1ac1526190b933993cb9e3c8959b740bb4f984e7b4791cb96ecee3c8f5fa787a653a8f4dcc29be01ef494114e112112084932031e6de246d32c9635ee3c195c99ab8a732e983fbbc15a235239764cddfc0e3e6825d23d7b8e1c0e3b6a1548d43ca1b372ee58d7b37c271e49a05f0e1c3c7513ebe1be189c35608c7f6a23523180ac771845e1237752e7513290239223da5f069a3d2abf9d46fd4138e1cc7ffa2746b1e47c8d22b300766a1730e1cf3fa7c3f533e580e8cc30a756b2ccd6c95a91565ada85b37309424742b85378a5f3627a99f5e9a95a8742b85473b7d6a29771cc14630173c82b5f429949906b9f47193bd5092cabe26bdfa78be17cfb5b05b9e27dde23ed264bb7ab656b5535d704de1f1273cae2e1e69e650d6c1e169a55755158e4379a4322433cc23f51122990508c7b04738da24f27c4d38b6ab158e300408c7af27cf872112bb4288c49a72f2c371c248920d4f5e2a9b3249a6b304319d4297d3d964f9e9e3966ffca534a6ae7ac5a38d079cced2c7a1e3dd2f5517505edf3ee0bebb3de761172eeeb8ee289853520352f74e3be48ea3a2def75e7fdfbdc18b5dc009c209ba7f0b33a7c63e0a1fa9c771497a40ea1d3692ba878d941ae3d20b3ade9f24174af8064e42737dcb1b8f12571b3809cd2c6fa91848b384a3927cfabb925e18ed2b470a623a55163ce268dfe9d4f5963bd59790ca7a15c4f497b0e592f48059b74ef5f5f4967ba7b025a432164e47626fba272d60fa357530e862a87b9e7754bd87c70e77289677e13d17a658420f73ef62dce73b18701c8ae3b0e9308d8d986e4d78ccc9f45e92aa8e5bfb7a31178e5d778efbf8bd46ef3f178e47607ec30e18a9d7717bfbd4fbdb404eeece85234e5017d230d7c87d93f7f0371c95640b9447987bf848c7b27dea30299349c75f4010cb303fcca98cd2d9f446382ce98511116e5045d671cfbebad5429feca3d23533b0cf49b7641443419fcff7f34db1957b178e3841b245a37892eb7b08d982491ff6d505db384144d9d351f1d83dc40366b93187c71c200d847630d7714a72a1b38e231dcb1d9859c725c98596ace32a641d870903378f12e8a4ef3b09df90fe6150de982e45ed39620dfa6e6775d3b6a06f56bdc64d04119d491f37f21ddb554b9fcd21255c507a37ddc6c3a0bc76d34db7018968371d94d846bb09b4d94efa467a8ee899422992422982927e7e66799cd1493785a0c420c544bc7fb7f1707a24b6217d741cefdf717a26b6199d749cefde3d2abbe3acd23530afa6a35ead80353078ce68a6880a4f59f5a97085fa28526414cf1fee72f63303a2357ff1bc5ee1c71994e3e3141a22c2d1aede0961fe50751d61ea3942d471842dbf11b2dc46f8f213488174787ad19aae2f3c7d7a552ff18c8d42297ab48ca03b4aa04a9a55ccd9f30cdd9a387598eba0aeba044daf1f428f6880d69830286fe339627d0cb4e6f42a31480406e6a64b896d54b7816f5057fd267598e75413d02c0b3903923eb45c47579911c6cd72ce402226d377d327b6395d856f46189c1f7da1f7ef45481f91fe918e53ba3744e7e52ea69f7e0a51e19c44a6b0257c094f31f4aad6b70feef85c492091d2bdc7704f3a901647b7d42ecaaa2ffde6fbc292e9fb5ebacdf7d2e74ba59bf08d50ae2fd5ef9b33caaa97e26e92c7bc1099917092c7fc4e2768f3ddfbe7e18db2ba87dcb47084696cd859c6546ca45f725a09cde98a92c2d376f0797436adb68ebed2f434baa55173b710ba2079d0d728ee84e1c9331b91baf6844d9e29ee68480c1268e386b0c60dcdf600d283b3dd10c89854b4abdeaaae75350a69ea8a36eebe92eb9374dba8a6833b3f7962d387fed01a99f43103820aa90237a0b11f99bb79a693283e358c65ca23796471e9e538798240d9e8a52cfae6e1ced058063ac49d554ada726aa51104594a1e6df10b28166eae3849ee93119e8c19db9575ea75965c51fb926ddefed5429d253422c5b2593b576cdc8066f5a5ac49d768b7af61beeeb95b0dd760c551786517d6406b584e2ef2748d34aa2c3360195eb71a5cb446f5db78f93879260ce6e38c7160a85d159efe1276b711a2cea54c213882093f16102694a289935196bd9d656bad7d0bae6dedd7db4f2f42df277a3a0efdb66d77db6ea8733af7ecf23b84d6802e1824d275db2fc6b9dfee37ef38db3b0cba48f1ab33ae2c7219d96be107e6295c7251ce018c738907240f9b2bae41f230e306a10164f987982e4934d41e42523f72e9ae5d07832c78c886c10a569619821aa40f30dbdf7eda90eda74bfad8b2fd215b3b7dca6880f4516fef00594301c9b2b7666c91adb5af5806c9c39e96713b8f930412d17e1fc3e9dbbd1b82f5f730df600e565ce41e062cb2ddc6b7db80f916da70b9ea52bc21e86223045dbe5d8a3021e8f2fb16d5cbe612de2ee3cea25ed9b7e0496487dcf4d8a07e7fb3bdfbcd058770f8a68705db9c9efa4da71d1c9d4022dbb517d9ee71e8fd09e38c300c5234e1ee9b771dae01e17485f34559f65e3861d387b2ecb72ef6a3d540597648afec47ed833b3f4487be6f49395d514b3c193352a1ac91becb67f970a32ceda4505296a5b1ac692acad2b48e6def10b4d8f4bd6f73c4fb0ddfac284bfbfd8df60f8b9728c59e792fb6e1f7d8a04eba4d9f44eaf04df76da7070a7ff7c27b5358e2fedd86fbb79dbbc536de2fbef9ee9db6cde2c943593f9ddeb7399db0c531e0f94359da876fb46fdfbaf14de91b9e81b2b4df983ed463667fa041107c70c1cbe5da4189529462d0d0861263328d22ae2cf12488229e2843fcd9b87fbfe9b1d9cefda6c7c6fb76ed8d49f8660ed10fdff4d87c6f7c3383288bc3371bbe9933cad2eee1a0594459b3208dc3bd4359daa5b8693bcd136a5bdca65ece6c0e081e92cf95ed65cc487d6eadd3862c16d778f32cbdc2b3ce39a7c5d346be8e970686298e20867651163d68d39d7412bef9f014c2a0cd76e3e1394459f41b9e4494458b6897a421db290bb4e9aee5889a4df70e4bca1aa750a6304c2253dcb08ab2465a08dadc489a237a351cbb686c59a653884e225a336777ce32bd2ff4e0047401531bcea2dea945b516519f2c4d505269e59af04c72fe6071cd50470e1c37401b30aa1797169614ea744d25d2e775dca6491e2d79481e7d28544a8aa564cda6387c7106ddf164ccb8591574d3a155fff24559b27f95aa6848a52a7a15bd824c9e5e79b743dd577b9d72c72e72650d6fb019cea6bd1b0f4cbb4af5e1f1de1b6d2cf728dc9cf4aa3758b79ec05a955a580aeec6d3ad3967cf9bf2a4f553ac78e71329aeaedcf33098934a4459cd82bbf16c4eba66137b56220ba321983fb4f7690aa48f1d5aa3c9682dda6c90fb76367fcccb7864766e9191d08c84e691f2d833248fbe16daa189426b41d40aa911c9ee4f904fce41e87a21379b03cd8911393c71c9ecca3b3968b635277383590c05b431adb1c61a6b88f4861e47041cc5d94e710f250de1eab66ddbd482688d5644597d952a684a11add97e90acfe101b11b95f446ba4b85dad68e3913c7a9b511baecce32623d264afbbd36f24481f7404b2e693aca2f9634a14d490add1fbbd866cd9c3b0e0905b941248c7e4d93c79b6b80175ceb42e57b439ce39a97c8ff474e6af5b136fbd6a9e145cfa59c66ddafd43bb3d12d00553b637658bc79c0ce503f5496a86e2028b4c71f4298ef0ce27562c29b5efdaab9ec1de70fb634ca6b74adc3ec5209116f3a69329ad78064994bb89dad61c7874527c4a2b5dd149024fc6c83fcb988a6ff76336caeac6abd37955b2697f41ef952c569f8652b23ccd6ada481b599b7959d8b2c534d490eb170085562e5290a199d91173d229be995596e0c34bbc195dc98f2b8e90893dda63c61250d7938df2436b74261111538898625201280a22a4749cb5424d449ef7746a22eed7a46b7454b8ce121ab187c6cc01d86862c3c3e3aa7fd89e1f4f45cd2628dcbde6d7a457b5c3dfebe3a9d576a9faee1f6bab7eafb31c487f3cddeabaaf496d55da748d35fa47e7eee3f732e203f5f17417c262bd59c63d326db0a454783cbdfb3c3d65ede954bd779fde593e76ef7cace7551bddf7b2b6561bc4d67ac2db6c3482c97a257b8d5ca6d20bac87bdc06cb2149e5d5c6c60ee1d6e564e14bad73085f0e6e646490bb18447a4b8a7e54a5e7c78c49eafca0c8484f9f1ccaf4927860a614fbe4b38de2d85ed75571021d5cb512fa88b97a4200938909629781dcb6bc8e2728ebe5e3c1e59e51ee3f61b6fbde24223d54385d5d61c1f6beeb9fa81c7239f9c3f70f4477aa1cbed9184b4fce52899519f4f2e2948a5323a828d5cd015e1dd7bafbd171a4949987b3dcfc2c0bcadf7541d3ba72e9f649bbaa953bd6ddbe1387dba9ea7c7f278b29e0efb53d74ff2e9f5e3910e1bf17e5fdfcdd3ef3bece464ddf85ccd1f300e48d937aee1782d06530e70e1f3f6d6f1d4bd25349184c8576ca4febe447a809cad1f5d0c9ff475311c5eb668913d2fe5799e97ba275cbdd361421cd7d1e28259b34d31a798355d11935573d7d4efbb53f7a9709c59d5f2d3267278ac9e0def088f7b4b85f11c60eb2f1e67aae2d3bb22668d9c2c136493353f6b725cce1f78dc728e2fb7bd8ece1ee61b4948ea1ae9015fee8f60745aac038f359fde827184f5305d9f42918274dcade128df9aeff752336aba5033a3ae0a679e4ce60fefa8df27d99ba4d3e9492a9512d2611aa87d4eee70ec24b97261cb3b84393ddcf20d8f7cb905cf1b260aa703a1a9f0e5a710f5a235b77430f4c2d5f7499290be32732ef7482cb0dc06c51b4b38d2e42aaa463ac5162620a437c2b1730ed9454c5df0119afcc91b43ee55874756b972783cf2653a9b22c6ed1d2698be5e3034242ad186c49e8ee3e6e912a03c73c5b93bfb99b57636c576cfaeb8f3d964332add1a474ff2fc94c1fa8bbd9a05f98a331e7364aa8ce8078f4651c6ac92be5ecd97f1937d3ed8f7e4a309251551b020a24ea834ccd4b6a11a754ad1cc000000006314003028140e080583b178408d9220ec0714000b8eaa4c724e9847932007410c830c320600200100000000644680060d9a1eb2c51edb2acb5ebe73c84889fd09c47755721db36af11cc638d0b0d51c7d0fb6c9290b4025109197f751b046e81e14038532509c7ade881ac28411c909426a705a1adab6cd8c8c7a4e07a88b61e0cc143ab9fe2ca5740ea4a056844c1ec9b32d6348fc0a74af1ae66cb20bf2de87d8a36685f84aeed39f8278140e644c33d04cb0f3572b02cbf3572ea9f8ebfbe28234b6d6f511a51a0e0a82ad0bf10363910e9bf4283fc0c6b596fd8200aec539539c0aa7f7018d0a2ad0f40167c63ead4998c97c552a0796390f340a883a6a6f4424c0322312905b0716352b78fc15d5c5330a35a6b9c8ff5a511452d4afdabed4d1f502da8d2844f7a40c1a0f572e04571c50d588f7651585fcbec2f0d5146be4659c8e47fa37fdfc70beb28444bc342227bb69070de6c4baedd2cb3fc77dd766162025c38c2f567396d6d786a465be23f0b2153cc2f874eceb72abd16c025309864cb2c453ce54db7c65287d89680c235aa402ed3c6c9cc00a630d5899a6e6a188ba4ec88094af45487bdf7d8df8533da723bf994f6bebb31245084d57ac90c4883590a8ce9a35d086b3c4a867862e88dc816886da079e29144ebb87cdb5599a2921b82cb11ac4337b2becb2e1dccec22713d86e5986fe5974b44197092853ea461c52a45fe292218e52625946bf9ee4672012c42df2ea4d47103b500eebfc51d0401cdea0b8c6146f58dc94997a3074e37701843a2bbfe526fa39e8be078de601e0e7672a8240d2784519344b4d8837db5c4aa65f1546cfcb2251867bd59f6141a7ccc5206adde1c9b0eeddeae99a530ed9c1f85101e5c37a5de42a496fc12acf08acaa4005590721c4dad86f9202bdc7f0dde6ec486a8fe50ce6daf7b388e39c8183a3dc1e0ffbde713cad9c75eb584b1293b474575dacabad92ad92c0fc83615efb58173e90eec0da3950c2e90c5d6b96b312c3aec4ab1fd24683a0c256019acb58cf9d190e6b9debf2e02a6e660f5b05c911993cfd8b010ed7c65f7ac50424a0eda7609f4af4c81c78e4cc911760aba6e93d96a260bb5150abf5c18d7e9b825d19be194ef47d96ac05ac4d80c5292e380b36acf08dce0433361705834fb0a6a2c80401e543e8f1e8de4be5185f8cf00d8f1bfafc89e3ad522433a8be6e339b04d38cd8ccec6df9262a26d55648260482e7c3f5d55880b4d5673d6066c2c8923722ec492fd74a5ba42d57ff814a8a196eb6d0afc9299c1221425fa95e8b9324211b7059156074c18a4b8dddd1d77b34fd6552a59b07e280608d79f2c190c73e2d917fad02086149c2a96bacd323e2c48f344e9b2763b8fc61f9b78baab1537cadda00ced745d787a1d8101a7e1f6c83baf49500f9894a8ed8d4d82dc6c4b8d5a2c10674b06ba621be3e60a7c01c08e4a53476947a12e20a50ded8f31db113f000b1507d43897991073b6766cb7a08246c7587d6ac69538a2620f326f46adffdab4b28fd4531d80130b9351cabfbc02c9b7118df1f2168106c335cd88ee5a05dc0ede6fade0b749c25501615d42ddc9e4259b9d347e368ddce124daba53cc0424d971c21187b98d1fa24929de4735f3e149a4d645c0f06021ba6fc82dc19eeeae9d0a277c30ed3f1b7469663e3575fc8deafc4f1266385441b502b310502e7f27306396a120cb965c31850867c23854c2351a5b4cb9ff01d3d1bffb6563eea1c8a81376325dbd44a2bbe2d11ae445a45b1fd90eb9b0d48dfeb4b1f09345ff8e53ed1516f945dcf81c9ca3bcad3907f49708535b93a39f35197d046eb895f105b4081bbaac6e2a6ca6b545f6d537c822a602e318de70fe332f050bdad12033284318ac34f1904d617723b5cd99c7193f540fcd7d117f2705b8858017502a4c240b96c4e6eb5014505f94b349e44035cb190b11154718d30f749a3c6a268cf6ef512016557d5734c6c4751ee877fbceeb97c9118d1b6b2ec418f3873578754c0bf0ba60fd6eb2d5d597e957ac03ea01ba4fb19269854677e989c1f387c50bdc0b3f0e7debb717a7e23e955fb7389da849f2d80e02a17e0542e2e544a2c1cf9c5c140fc592d473d52f9066d0a1624bcd070ea4842213b5525131536f3fa092cab7992b588f7419bb63101b1970201974c25b379ebbd20b7de5a6f18028db99ee8c5d0fb125cd3486f02b10133826643e823649406d7bc12ed718cc52a0a1c535b108664afd9b0eb4464d351f42e90f4f1036a5adf39ab7e43fd25b775784f3449f051d07613d08d3aea738ef77492f413505fec80668fbc3264c9d3bc2c1da989a089bd80fc6bd07645fad818b622b0661ab3fa05e2a76cfad307572e07c36636b4fe5bc152121ed915991bba0e45d3f83222d0f7e04ea0b867fbbf2e191be6aa194c21100834e9ac833f08c0ccba9fedb3c3d8392b6ceb0e436369e7987681d09ba441b05c8a44358237cddd2a92e21cae5b8fbe111c20b9dfa52ca5a0f4d7daba5e25f969e5cee7bf722797c2eacf31b439abbeadfd4c7e7413d81d16f201b69c0dc6171ad061c8bab78e22eb3e57dcc5d67154bd5d1cc48807bbd5dab4278e62897bc8e5faaa83414c1e5f2d08dd9d2afb10ab969d1ad55c3979886d7db1027c76543b10a4aebacacee5a87291522dbd98592091a931d4a1d20c823d54815edf023ab57a0f1e2832131a41d150c53a0faac2def983cb191bb146cb207e405029a419880201d61d6eaf3a779fd49208b140c93ff8a7ca72e6e906f472ccc2405a8d8fe74b5e6b00318448911fa0c673752acfbff281c06a9329e17af0e507bbeec507ea4b517270cea8afc9f82ffe4465a4b372bed44f5be9e743be0afb0fc1aac2dc27596d621501fa1828214e83229dbb656296c6a6eabab108c1614bfa0b6ab3945c7d10eccab0d4d75a65163be7cbde59d5301a88307b0d7520da139359904e7b8b8aa87b7c6c16286b34dd5ebb6dd371a2b617af5b8d416f5e095b9070686bac728fbbe428e6c0f9a5b6dcd537052e16666958f512df0c061388525906196be999e74f1604ee50a11e39ded1ad57b339bda0cbaf4df528e753328e72bb72e3c538d3bd0863c810e64e54b34457cf663064117ce3180d69fb9a373a6a7c621e0922a9cd865203282ca77de8c10a86b7207ccd98d779ba627ac85dc1b1c8c6533347ca4abd1c19516951dde034607a46f552545e2ee2fb23f27ccdea41aa74693bc0a1138b996b104356ce55cc7de2b40c31bff2e914012c21ec81cce2f5f02f9c89cfffccfe4f7220b6a18dfbd6b631423821cbed1fc1a76789398b20d0fdc022f65dc44563c5e31339aaf51d5c5f868b363a49159073b70e5d2bf432499b9356a8ce4f1ada191f7c505e9aae4059db64138848e88d3336714d89cde698a5dc26997215b988642252a60b3c53db0b65c338bb755fe0047d5863cda08418bc3a1c3ea313a06a3b4fcc58a407f83e0bd60936d6a515ed036566c41dcf9f8b8f7c0be89ce3398c2e91b0e37f0dfd3f9c60cc3cd826d3d4093716474342bf9b14f44d422ff9b824ccc08af605bf24eca10f2be1b93f4ea65615d12b43f11e2b0eb0a3d8d46f4f6082aa20c020918a820157452904b8a4ac2e89280cec46bafe4fdae218edf4ffec059d6c9d3bde85438be0585de115d7eebf6a81a38e908abfc68e8616e4de143c0ef3d49b6f589f073a9117cffebcb5017b90a156e04c18298dc0de7c38505d4190877212d4bec3cce5db2b0a4470cb1d0a94bea4fe9fec11991358e36ebd1a18e4474d4148f04eec43e19b2f8d090df37c67b9389fb7e7c43c67c30ef46708704307778b45136f17630641a58fcd4620bf5e9d7aca6de00b958ecbe87735384c106dabc937d29d3fc19b99de3f4b154e4745cf1e1875884320bbe4ca048a010fa3f00cdf224a35bec475d4517206080b3c83358788dc504fad9500f41236eb07ecb595fa396482da5ae7ffc8e2b71bb3628789d0365d2c54341563f33630aea3aba5dd93b2e9fa1708eaf392b6e5f48dfd65f3b7ebbb34691dfa4f9eaeda0f6f1bb718414495030d37a9462716ff15ba59841b72b5c4f045aa2b48a70bb3365031d896a95756c4c5c75c376ac33d7ffe55258f5f9b8c55c16bd482a48bec745bad72bee9ba5fb85ce2d9ddb9c1f3c2bb2c03a3edd0cb06c175961e144003165878c340f795b4e36ed5ae20656a284f1ca5aa02cec36a2366d3f21c45222e1c84003c335018400d85c0ecce99daffe8df3c788d39ff29c280a66e22223d26d54e2a796c6c0181490ba65051fbf909ce73dbf9ef6e4cdb21a606e3558882da9215294b1f015fdcf8d74473bb1bd7dad94331f9842c8c246b34c63123555e1119826bd7b397235a262137a8b17a160fde349bc85419265bd09cca65dd6b58558bc91a837891843fb64e1163c28378cc61774ab979ec93115e3507529cb02093a45632bb387c433d8b82228aaa31a341993264c4757105b4fa0dace0bb69efdf8fa5a7e621334f346caf30d704d3c0f0c39213d6903e00e507ee36d36dc7eb72e532791c9a2412f08e05dc07d670efd58d03a3ca262d8ba8355b44ce764c900d80206660ed5c238d54160b7f2e9bd34550a4b4e0cf19452d380ea32fdfec49ee37bcfed5a7817534d49caec4d75bcf4d1e253790bae9accafe5388f57ea5e80b6b194720a096fe67c71c41aa95fd27c8273fe997ec7a1c0c83c274de133e9b5a1f1af2a73f667f64cba95389d709683d8eaad26bd4638ae0a699c294d96db2ebae122c78387993fdf4b7297b2ab76a62c95c7b726007d9b33a36ed0870a0c24572ad78f3cf24349e33d0f88d0f95d879845602df8a890abe763f97cf1f8559a006cb85c383e6e43d6fe222e1a203b961f9661fea1054158f5636f77c0b70d27f8e8f123026a0201931dd6d67e1ada9508c397a4f66a2564cfb2c4ed9e48590c21e10e02afc464cb76fa5ed7bd03ce9a76288810bdb7b00396aace850a55f95645b601730fd8181ac4200ca7be70fddc446772e435c9d64a55f335c98ff4ddc0281cbc32048b316dac177b0f78d342e09830dc3110eb59d687c6245e70a445ba0e163a62059cd4f80a18cb360f1668bc47866d9155136985784d2d119099bbb24c763fa8de3b382f4de201ac712c75da9825ac33907a34c49dcf198525c3fc55ad5f115ed1263f0f900ddbee622562b24c822c4c317dfff24b5018b184bb324c5ce7b1a1957f63324e7d4402c5319c716773fc27c9b192703f441b04dbb9009e6a935df015e39e6240b681a16924e3b337dfbb444e871ec0fc0d1892be62f4d630411a111af0bb858bd375833b77b467bb88a3c19ea40e914555f93984d8325848532420c5ca8de4685c2d2221b8be2a24e03ea26336d8bcd386ab1d06f99307bfc32f630c52051262a0d16b9c89b5ef900a6551d03365badcc32e5d3cd97d0db7e72d9313ec7bbcec4a7e63785759806b7d486a441de363a15f53b9eae91c8093c7081e5557a9523305ae0242a8ecadc8837f3e29125ca8ca502f1e4b665152c97c6279be448e4d602cfef54816e1c635d47f73108cc435f5d99ed4322aac08335ca5dbdf3334273d914d84cf21dfb4b812eee494a48e4309d2726825ca5b801875b02599460c24fbca621906a649c757aa6500b74aba08ecf7daf9d4c25438557cd0e7b4be7b94f7610b6858e1956850fd08a6af354a0f3f9493765805f8207857124029dc8c44fd52b78dad88a4f8fae2e8e3e1b6962e6106bb06de0291ad252eaffdd0d6de04f04c946cb1b0041f2d1226ed4df7959a464a1dec7ade4dbce88c30a7ff57d1e92bca5496638d1d701a26c6dea7438fdc19289af453da1382cb42ddafec3750ecd166670cb0df45c6271e0f71177fb0045a5f479b2380c272369a085845c1b83c521cbb403f96e2b328839df5cd839ee2302ae6d08be60214605785930d67fb573b9045065d1ac78889b13da9935ccb4bc0f670d0b5ac86175acf870e9c7a3e99377b528b3fa1dad89cdfea55dbb24943e1a05699252a76be404f3cb957b58abeb9393135951f37a07c481bfbdf0f94562d48e06983582a0b4cdaa94de4c2f6abb245d1403813c2b4c25d8558ef83966b65d1faa2f4d7a1dbe623fcbec20ae573d98c2982d3354c1fcfcd354c6f807b9889db4d865010c476c652e3fa13f34d2a63e37391702492060aa1cf10d2366ad84667f08167dcffc88b9c6fd7c329d38159c82bf4b2ef68e0e8f054c2a91fb02d15a911a4b42fa573a1f70f8c329054a39f25b2fa326fe2504ab071d868d8a2ab2c85a7b3bb8f81c9dc345f6f5b4cd4a68fed8108111c689b0f3c61899b6e03f41db075ff4019b7ebdc49517f3abdf286c20db0b50bc1fe7f61bbb0b2e926c1833cd3cbb70e41264239be8ac44818734c1092bfdc6ce41a5b602d91740af681113afdd135e70683d7dc3247b82dc029f6e0830a403dc593b101005229d429bdfaffb63601005f144fd83c3bbfde6fd1cb460c3319947307a323f3b518bc8d57c03fcb588dc49e9fba337a13d052adb2869e6f541fde8eebf2a35838d9d040f13f43e24f1663cf9c6537fe641a75624899287e348cf76dcc12c630bd92a8e96b3754a52180fb94c162375f0ce3df9a7507b19f623cf5d26f7c5be406d5915fb4af824925e58f56dc218291e72b360e6fda4547c92ae4488a97d9c8a1ec97f69301078c80d517641f58fd98c79813a2b96c9000af090cb35baca90cfb2c4592fccec2c4139bdf0d4d1e71ca258464692adb3c2781b9ac3e5417e1e97cdf510975bc9e5ab6a64ee3d7e9cf031eac453380d14a156bd9487ad1da8f4fa77d769336a066b02271a3ff7aa7c708bdb44e702ed9833287f9b0a2adbcc2083f1971efcd5dc70ac244b95e1fe3e371838f7fc300b431514465da2ab562f84887bbb1b825bb849f17bf5a03078bd1b9481f6c617b60352295f47f9439726356c135bd6422958ecf788ab0c32780a7ef8fa8fefc1670adedc92f981273bed137498a1d3447d2a1e589a1ffb47051dd4c5b3f6b8151fb318ba0931fb5c6860379689e2391fb586835c1fc96b4cbd4548be39805824a0fde9ab159db7ea18587b0ef523cda62bf573e2aeb2f11b0b5f3af6545022e4355614994c2ab1305ee58f9523ab18c1962019712b4605a4e1f3cdbbe61a5283e476dfb9fa91d3b74331478e4bb2553199c08cb3bd582deecceacad606578e4f20b53a9a7cee0f1e71ac5fa2b74dfc54711375b906f09441bd551f244bc0d00587547ca123f73e07513fb55da1033bfb06862a11695621c6dce7c97f826bea0721347f439ec80bd087b64438e853d58560e28f48f6ba87a11cbb596426288bbdae5a988580474c752b0fb733205d127998c75ebf21a9dc92cf2b98192279333ff3807ac14af799d667edce47de68614d11a6a9c80752471e8747f49ed02c5471d823941cecbf7205ce1f9e5c952dffda3d6212eb8aae9bc1b525448707b363b153eae647cd5ecda2c9937d2c3c2c79e1c94f79ecbe7934544c9637b37ad56086404ff77f296764751ab3eb8824421493cc5dd00c15cc7ed04600e83453aff618b054edfea7d5fd05534e196043644412f9ae48ddc5162f57f93bd0bd6be124c40a0cec6ab931f16c33e46df1cbf1abddac96d4892bc9e2a6b561c7f83cb29b8606ebb2d6cbac0be6a65973bff3a22bddab795afbbf1e0aaeed2095b7281c82f515d2f4badb211af90aa3953896e9698ce87916d5ec118c48007622e697d14cd7aa5ec0c27742e3c3a882bda6e568942dd518151c6812a44392c4d811a046004f7de8074a4bf0235fbae246fba2967a66e73ad05f3f844b652350acaead297600ee2064687c61e72af40b1171fa3a88c3d24fe5cb49fe42347e1601bac5c7c4f4296c91379dcf5864a6675563f63c0b1c6439f0c173d6691438b396e713a944d5504b48b951cde5d4b5a26b84b58ea5d2cbf86b4c53dbd2ce65438b9fbeaf6cd8acd1b688229bbd618cf5c0313f1fe4676f3fbc66cf4bd29efcc8c94b4f3670f0c9db7194d4fd761aaaa0554f52f3c867c8747d13bf4a2ed5bfa514f2d1742d32e6cb37e6a8d3dd47d8814a9cfcdeccb728c744da2fc46f0bc5d2b190f66f88965edfc13e3ef99edb4add2496e149c190368f3f9bedc4b3d009cce706447c1a0c7f890ece84ca8de1ea3136dedab90754ad2c0cb1104d19391dac9806ae789011e888af5b7c3165631c58cae90f64d53fd6f193d1d242269fba2b5544645bd88a6c74ea7a4dfa0a68255906adfb29663b62bf5f435ff2ba00e700ddd1970632ba15256134983c5e9d66400a79697457caaa845af41604bb3d8df38ce897a3401d9e9d98c514e5c6676e21e30dc8dda3817cc331d744d90ef6af02902a1f68f3988a34c9a30f3986d2ec006ad23006ea344a6c18b3aa9d50334413446438e595b6cdaf958036131a817d80ec76aaa8fe3955bd5152aa188369d7c821e83d954000b11f538660ee8b7a0a4db20db9dc8764c56c7dace45733c913be2737ad84593ab2382a53c06ab511e3754b2148ff39793360000008ce16a22e69e24b2ab58a968690da82e550e1015d70a0d01e1d76e2ddaaf562cb80cf7582b0a715ab2d9dcb3b0dabdd5a7b75d78632e7e6529b32a9e5e4c0ea1c21d9f5e8bbbb091421795870b590b3aa9f560ef58fedc40a651d136c5a42778eac866ea7442e898ede166a80864a7a16b0f3d3f6d6843eae706b67b6a28dedc95d7c4f7f78f45ffe36af065675040fd5ef6aefff6d3ccff0420c9caa02639078bd28fdcec3ff3083a5f3a4089261197224fe9543f4a65dc1f940000fbfe0649f38af93e870ce7aefddfb71e7e8d05453812c9edbe6e19bcdbd2f150414c29a025ac31400a76fe6eee5920be729a11e4118f77112354ecc8fc52cfeec11e28ae3e481a4cb896a745dbdb77fc215e93871b5a9ada8e5c4a8ec6464c82f5f620500b84eb35ba17ccd31564e085837231181a33016f741842710039d6586aae6c00e21e8b6ceee84a53a954b705f7c8b2fb29d8508e4788c47284e6f0d15f4ffefe69799a78a38044865904519cf6ce078ea7cb3a7ffe3b2df61d420279c6f90a1b46b48ba761262da7991f2a4fc0fab749e7f86ed1451d7578637eedb4a33238df146b1518cb8c3259535d9781012f42edd950fc4c15bcc80673b1d9c69305958af54c6a7f6de3349dee4b2b2c7195239c651684eda319423046114743a0924417eb66dfd1735b40032fad7eccfe102a6cd0cc122ca62a8a03626dd1167f2276b40218913ac65d70e183e1074f17c8621bcbfaa2d1162e2d093b777b44f43cb9a81fcd5422380c66c83da59f5c3c0e57ef6efd4352eedf9991566f979e8a209d37f122e4446a9df655f26352a7bc090d7a4303630f6eb81baf169576b53ea31be784f63a440e6a369fa6b90eb72c2282ffc9161e0556682b553217be415390395e52036b803091e833d54af5cbda9affe9a6bcfdc9bda1f41e2e0dca7e31c7cb3050d31244b00be9792b57c945d5016c17732b3562d4900279f61725d2a0cafcee5b9db033e2e3403a97205fcf17979f1dfd848acba6d7c579edf8c913f5e5a869918a8675d8b4839e2641cd4e183af3d9e91a1962d3da155c0026d8845f1ba7e28d0618cd433338d9be39b8f3151e0b31b4462fa7e4f2fb66db5f357d648d38247dde753736adeb0564571b7cee3778091a373a161031e1475be404bdf2d35a6f047cbe975eaf422482098c516ee45255933042afdfa40f7b3b2d1044b2cbb38764f1fdb9cc5a07650b3acfae1758454cab63f21c69f2063db5485639b3a6b3c9d3788894ce835361eb177cd7cad3acadbe6fc9aeb80e49ba1cead4d94b14fbb7b98a1579eee265e0a9370411639fd3802688dbde7b11bcaf1cf27cc00dd07b4757e12d93c00988584e794523e5726e3a381435d63497006e78cac88df081a1ad1dd140adaa7272be98b2af077662901da695ff203c452243e6f867913b433f326b9cb448bac315cfa5ce740ffce42ded60e6d655974af701189c01895b8bc52ae8a5a3a578e48d0a0806c19467471aa568f5e30dae962ed4c12a6f04126b0a54559d612840c7b4765e9dee4d13c06936a31d6c6599ec33720e099b96c510be129e7a2d59117fad1224dcb0a9896ccde10a95e32992a566c0016cb95200242e5a09c8f01767ba888e200d4bac6f238bfb55c41b1855a2563f037fa899b5f5da1e23e463ba449f7ea4a3864995897f96f20711e3280699bf8b0acd29d6db49065de1cb75643697d851b2c00645b5b866a5a47cd99a7d7826e0a5c47aa18f9da7022431cda71b5b4f13a907311165ecfa18a04f9022be8777f4feea990e3f9f0e71bc27715cb96134abbf70c0f7542f7aca748ba3f47da6a3cd6180509205f6b8e76acbc9dcd8b32a34264bf6afcf69c41202a727708dfa123ac56c0312444044cea7619b97ae80c2f511a63495e2729275d4e6b075a8ac469a3c1ef249014364abf4bb368cd80129edd62845d6ee5dce3e5c7b7e7b51c917fe3827699aeef4c7899ef8698e0f63c8400c851d758dc892402c2cf02d0df70fbc429a56bf15815d9f248e3a4870cee1f0b859afc3f60c757e8bc1a02c61eb0e6cd4b8a8526616b53ac0abd591cb2261bfd634438041b22fd2ff1ab183e4dab7aa8f845f178b5d364b028f054d463b479d164314ffe9199ffdb3e80392ebd524b114dd3a46daf506cca4709dcf5640873eec153b207b1177ea9adc49b5746101a9ea9ca86b8f4be6996216ebe2b24569e9966140280e8af8dede6b60690088d25cb113e7095a51beb4c6d79c4307b47c42cb911ba4ab0389b3c2da5ce140474ba288980eb5eb8fd96523560d6f16db76d26a874e3898753c2e82228038578b95e5d3417f942ce7bb515f0b1a9629249b584ed55631f7264d9dc1c6b31c50c970e9e6837664d49d60c23392e89dd80f5802a9ec92a5b3761d3cd9f58d685974f544e095e2dc36fb1866f6e0858cc497c410f4195e05a6a637a9cea4d3d17211a36eaf1a98796fda94b5aa5d3ce1fa96c6c9005f628c2260a29b629080ee8ac6fc808d28fe8e54240eb1605874c35fded90a74c1305959273e0cd61cea21c02ff13d7b177ef3bd85e4efeee1883fb631d3e04c7c3c4cbf18c624ccf90eed4a775fa97d07caaee11d20fe3b60c690d6dbd771fb673043af05d089d470a46cba26247a46e770c4124ae3000ba788fe840b5cd97f881fcbc4a98f2ecae31fac489f03a26e5c58b43454eb1d287c974b339131f5d7413a0a8e28344c7d6282af18c658ad53ee9ed03b48c4998b8839e393f452b0018221897a64022904c6c7a0c01824614a60793c3f14e96f8f8a011c32284879357b034f19ea909f0636af861b12c46f9cc475bb06c73f7dcb011ffc5c68b63e3f2f73e9e8b9e82044f6a77723d0a57c78dfe38684b239a799d9fcabba77a6e909912f1e862b6c69bf193eda566be672adcb88145e6a361b2e1a760cd322d7de6a3946e21616d19012426b0d67e00620a169a2c4a94955b8c3abbc6e3677e92444563c7ff82f32985bfbee47d25c0fe21b178871199358dec8e9e3ad42eeb1910c4687b669689141358309723a554bef4bb5b20ad3981418095dcd7a1500f5d1e42385c879265d73ae4b9f4277a2371746c141eb359b4594594f2e833df061479cd24247b1713f3f3548bc7ae94896801c78b1a55daad5c46277384ce12e942a060de542b27155fadab8183722453660b646067c1ee5f5839bb3358ea0d3f53619a61eabb4d2b67525392d0408569559194801eb6f2f627c0117d1dd002247e3edc464e3e23183fe10b079d7eb81ee7b333fccce28735764266124e98cf454946c3a8287e056c534e01c059e0053ded21ed3da7a347958fc1488186a6fb2f04be6b6bb4b0ff5ded472526141d39a3c57187dfc716964aea5b2487e8c08e8cfac45af30a918b1604cca023ed3f57b87a4b02e355df07fc4dfb50e872e86a892fc32f4290804c4a05bd8ba44e323d22a35184edd74bca64e55684aa70bf6d26cc1706696a6288291cfa11026c54c8b068d7094585bb0277c61fc94686572a31b9c7f3269df551023b7b1e139be034e521884b2972c458e92cbca58c4c0326689a75ca903fa13b3ce094af4c4a4d8bf7db25158b99a76aeb2caf067eba372806631d3dc0ecee37865dab240138fd5df89d9bf7d8483677ec4cc9731540b425731e7367c02f28628d284add553dbcca4aee31e91dd757714c225f40bd4ae2c770f66b1e8591544cd9769b285940bdf3b6268fb0b50a18bdc1d58205d1844903df2613f873afafca281aefcb1f68927aa10b9d178c5d711340885263932af82af6c058075f92a7a3a1582cebecb0d6b2279dcc0c1104457997bf44bb859c5dac13c283621df26d0931dbc652c813934aa926e2651fcfd4c3bc05a8f2664ba9c655085e203fd340f9c8a7fb1e6a210db73a4ed5472c73771e90501a4456802941ab616e6f50ab6cee122492c4f29eb7d320dc6647db9b2382c11f4e8e0173673cf407b4ca292b0544797e7a82f8ffbea30ff5ba52e4540d129830f293d2762a582092a89ee2592537b32809ef9ff0b9660024d3ff95df52226cbf6bcb6cc7e83aed77b50e263dc13cc4858a072e7d23c1af824a29de2d78013a81d47bf787ef193b73837729d4541a9b5e2e4b7556c6b50bfffcb4bea41ddf3e60bb74da193148442e9603b239aad9201f44bb2a8de02a68c9ada1d4fe7a075bc8a3f8dba352bc5992de5ffc71b2418d1a98ba79d0acf64b20250eeeb22e879ebe8dc576042dbd818f28aeeafd9cb1fa79b67d1b41110e7774c70900e36338cead229d8e8ed9b03e41f99f0994a11807f9a79825aa4b10391f1077c14fe3e2c8adf7394bd4057b73af6008cf9b7e7ea2205f9ed05f26f81469b9be614a5aceeffdf576b7e33554962f23c26d1852a6cdedbcf4af41451de5543fdab214a7586b9f3175ae9fc2e2f954cc75a4626091b9775a395725f8269b4dde85242289653ee5f8f9beccd59f8bedbd3be56cc888865897578853e4cb1a5aea642598ef8854a99b3a9bc3a0544a12ed4f7f2196643a4751a8b8c3e39f56052723c4a260867fed30d904253b944d1253f5932fcd2f52739462f0fabe9d4972a08c3e41d713a1083960ae862abb72bcf26c330e1adaf35e06dd687bb0ab20e1dbf27005d654506e49b3fc081b10fd7be2b969416b1b053dac3c29808ba102d303064671275165d8e3c6506b747d217dca4cbdb007fc3955a2c6404342ad5b640dec9447be63cc698deeee6f4080a753a250c74c821626e7a146528d2ae34d5fef667579b77d1d2c6f1c749da054cfa48d3f835956671405a6b060e642f53fcff862dce238149af6a79efd4ebb6981a4a7990926571f69d82a1f643a8ac1dcdf205b2b86bb97aba60bdca44631b021e2e0ed36c9655dbbb66f56e885d936bb387d593636854bc12822eb36d3f53bb04579d9847201212c0c43a5bf15417d7f0ba86f06c6c331f8a2e27fa5ab0152241d9b69b4b6ba3e243c255e4163bc6e4c6980c6ef81fcb4de11a561e9f847d970698fd6f48eb8fd1ceb9d7a0f934cf101d01d2283256d154e3349286380000cad78b9c2a57e2e2dc88e0afa3f0e1cb1c5cdd2a2a443649c07c4eb209d5126e7b339ef921e820fa261a763e767b566c4129529f64b525f415c3d5074652dcd3d731d599db40be6a0cbf5628733ec0b0c2bb52d03d3afa0c5324ee0f613fc8a1f5ccf151e60109c02f17e058168770a2eb4996accf3be006edd60ddf72981fd109222fd818e62b80ea0a514d54be703c6abecfad51016d4c7887e69ea8dc21072f2ae6f83781ea325d086d4451019f51d7945133035c61f583c5e107356d4bc46eb46d08d78ca06f2248259bd791b99ea7c656684c48ce64f028337931a8b2cf664dfa172b0cdc5b16c84548686c4bebc2015792d795dd1ce504294d1fddf0ad89bbd8746f0168a6b3e4357a06980a74c1211697b812582ceb87b50115aec936aa6b93b338751f150022924861a498793d4c709df06c449270db1d1245a694ff0c93a90ad2dce212bd84c249b44ee9f5bdf396aabca4ad8722eacf57fe47e56a58becfcb97ace10aca6f73cbec1fa3f59af99533b48ab4beb2e07d42dabf46820861dd238f054aa7be4993af9a7c71c9f722e80b961c0727d5c37c11f71bbd45121c987e13399f0b1eeda2f3238c5c8ccaacdb03a93d2b2db9e502acc9d513fc867253e93b188106da7063189a04043a2081f9864add379695d7d71821748515b185b5e5052eff84fe1272a5325dfe90b37029449e13e44ff277c2947282c2061ee7f92b8dfc3ce731718b5895ac31667621cb47b61df842924936c056bcdf581c88ebb5c45f630a6f7404da6f411163a3317cd2b499cb288c7825ca5db05a402d7b9fcec963062d398be87853b803bd317993a52cae87954cedcfd8a63c2d8092b859fac7f8c2d54855cbf627cb32fbbcf1ba73227e3dab54bd6b031ae2d69d984140f3e869797d9f306292c22687f20ef529112e7757a6d3ae3c0e9a0363311bab8949b2c429f6decc229e73dbba4168a1b97725dd18e732ebe72c4a8d08fa633d9c39e665e2957f4f222192be9331a1d3a10281b6ca93a327b104c0ca3345e68f2ce2ecc51225e78694b51adfe06256ff5b34ae11a68497bbc7e11570b20591c850a5118b1ae3ec1f5f5d844c87f7266837b48b37a6d43c4903783c1504b6a84bfb1646f5c46afae1bc88ede3dc26897f91ade0f962fd41b5cf0402077927051bd42ce1fa9790b732ca2e8e695d57a6551c7f5bd538f5108b3347dcc12914da9f9e669d59d9fae83da0c7215c29e4e479e41ab26e1ed5bbf7c748073748f9ca483ec3deb5b415d80368c70d50551499e6274a218d3fa762a7497d9a248502e8929fd0e1646990c8683db75da740979f9b629efce1ae5718969ecbbba515d3be56aca6ee98fd9f4bcd31f333406ccb45d29a8bf12e46622cc4f8e69031f98e5d4f8756fea492fd67fbb63e9a374d321b2cfef05187b5c47b7b0bd0bf03367460ae352dd865b25269208e47621cc14e48686731140648be631f18957ad8f8d1b184412620fa5392285fde0863672b96cfa43b44f7c680a6518ac948ca94d36a96acec072fe12016f2511aaa11bd2446bfefe363936ca862b817f0880db39608c3a96a252466a247816eb78b7b12b5b5a96b6923a49dfd6fb3730ff97711dc18c6762c03179c98d09ffcb212cf0fd6acba6466a458e0daa854fbb4c1662d6b70a4befada4874b3b824a609927c6d1159fec62b70a97d1952eaa1d73abc46359abd49e4248a94a4cff8fa20a29a09f159ac9dccc981a638c0fc0833996894fa4782a9c00430693fb3b64bf04aa5f6e396eacb9332426aa8afe1f6c87ea48b5515f0a133ad36a93c3eb314227474c350848e0b16078586a28710ff881890c04938939740b0013453b05a264283284541d92717f745e263e24b4c2c86d3e8c59f89ab57ef5d1fa80b88726af6837f2b2c4ce8a2360cacecdd9b16837558d3bc1b8519cf0588ccacd8f5752186241a8488e03572310a16b29c22c98a23433a7256d18ee56e6103f57e1733f2fa52b66161db383cc917764011412cb194974a265e0f5a067ee211e0f92820919440d91724f0989480c6f63fa1d35ee347351f06f1187e394edbd4c260a690825d7a1c8228ed44806441ad18eeecf8cdde5d1567bede6361d32f75522170faf622a2c3da173dd86bd6dea78735cac600b86fc29e60872249b3ff88295fd4532be0e71bab9892c8efcf78323858f3a17d2f5cd7a3bca1b12ee8d65e29bc9058839bf56d925665c61ad8eb127233fa1dfa2075da38059f66f3ff051831cb8e2c8b8affae021d136e9ae452a2ace186e1bf993f96717aa25554ec0807c5106353c75eb789c094dbd66c6f53f69af6b153854a5d0bdb220d72038a38e76d0fc9a6362ef6e9f578e75e2cae61c436ea4b12230a21ea81b085a4a719be8620251246977475acaba9b44187343cc70cc5ae693ec6ef5ea87e1a9fa4925f04e89a785f803d2a0f309ebf8aa823cde71df063b8f69bf4c1e5638204e0e093e7462622e8c5fecf97ea0ed7ae8ef1a6de0a407ce340c9f064b57b56ffaecfc3449111b88932b8a2a68a252e2764e3fc900b5db814c4b433b7065a0a0094391603df4d5dd703324339d3eb642d0b93f5a4cf533ffc89eac41bc265cdae46537b581d3be60b7cbcd67e673e2875da44358564f7e149a0f40aa365520fdb1339d830e7a45f807f94d1ae837001daff9a214d00f1c0783e6ba670208bf2580d705f8cae4965577e9cc2d93657a54848191ceb36d56ac9e137681e1342e65982e997fbe17360f2560d0a30e4ba1da615083fd263b2c7e1560aae9a4e5efba4a51e67ecbcad97d39d3e0312053289c8becf19d494bd09d6ed81249ebb258260b028d426cde2436b08196a941fa653f57438601ecc0e78d5c3b758b97d4f1db12430d9c00a23fdcba02bae4fd476fab657fc0b04b19d75962b45e66822a7aa1de05081a39d2515dc8001f80a03ff2d6c053a6eac6b930c94dc363d3aca3ae36ed8a96fb1dc6379d845ce76148a49aaf85c4f3a098621e5624535ff67ff8d574c79a7d3b99cbaedbb71b3444d88fc5c35b87005af2e97dba2398afcbb425b8f5560646a886c8910bb0adf7a2767d21aa1c228299a06a53449d0c81ce75e6131d36728e3c1dedf302c515576ee584444a66ab90fb8447164c1593c5979caf4cd04f9c670f5a400738f69e53533cc1211380dc1f891ca916c658c1b1a20f4f3e968e04301309d4303c4a58c7d3fa0e1e4a334614c539d44186793f69e9bf5decacc929bdb97b444579262aafed3d34d1f19dd75c280feec13f1f9b1e1d387f07695734eb85316302dbc566a73c2ac8ded8a3d15910de50f46111aa4da4e780630b62210a878cc3ee57001da47c98dcb2d1b02d0b488fa7e83d335f6f38a2df47cdff3556695c91b7513994e56fda892e4c61b086cabf0ed57a0c2b9c7867270fa0447e627eee87449dc7dcd4b9d48d360905eac54d56ff34b3d09a9afc32943e2027cc741d25c923fb31c71977ce5803ca7ba0fee46b7f812eb9363e0f6c0ce07979fe59991123b35eacdad1e29b43c21ecf21c77b758ec203b49e46bc3e1f3edab2f23a3a15f93747134350df84a0f1354957adfaecd31d2820a70fa5a7d2aedece89f5b1974f628382bb2c6f5ac36d1b56e7d93e8ae54d0231a4b6f44930edcb525d461a1e500d748e1c6ef42a22f1e7a7293ba07eaeb23fbc7222c1e35e9decbf47fec24edea3ac58f7dc7b138c83d3fbb5da9a6564a44c411f149d48d501fb27209baabc42868f7fe5e00e98f9a3043b63e2bada27e89032d66a1c8167d3bc29080b1fea8ba997737ac1b70059e4cfddd5813758946fb873e7e153b9968d25c410e0f0cb7258f64089daf73cc6111bd68e082fcb8c3710c72a6824e1da6bc22a70e4f646603c9e413a293bd64b466d7121003115bec57686a60f8d2b0d90d2ea873bbcd977b7e2981f561c392f87cd25eb2075317180fcf85c0982ea3685e96078b81d91bdc10f561aa1c985d6b77259f940eee8635bf5faac90f8290b1b38c9dd9395648c6658f85391526fd7d731f6817bfac54efc88af56d193a361b77a5cdc9e1015e0fbb6d01f452b0f243f79bddbc62a9308610244293eacdeb0651e65bf98782dfc8d7836e8e6c8fb1269057648e84e5ddb5df8ef1b5a085f9d9d871816d70741f90ea1c511bf135fa7cbdfcf0908a1227ceaad9b296446c994a4344a71ac0d0d0eeff0254238567ca96a03c10b409b4f6e9301479695a5c2fa509efa0c3206c6e9c2ef7a4f3ae62fa620d210fc8fba08701fb25758a59863a30bd020a7336418b096458236eb23019955171d6357f770f94a5991dd3d08734eee879326870e62d90dcb47e9cb2331c5eb8b03d4e0d6150049c2960b73ebe1acfd61a1560f674bafaaf0f615666e29d2f255de5f0dcfe3c6702140e4305551be8a2c2498a8daac94e9c6ad0ba4a891346aa264399626876edd9601fd34765099bb06a3abd284aa9b1884da413d6a8d22ebab2bd59e4dfea19ed8534d21b9e84aa348b472af8c385bd7e621d5811491068ad1a760ec74878fb08d26d2c5854b466afb58bfca993648d66d0250b773d1e628e13e5e5d5b95591742d7942a58477031cb4323b65109b5ffd60c740993344e7554fe635c34c3635e2b9bb9260d43f586d2a1345ccde1e456cf8a83ffd3080af3876ff78187738948229c6dfbdc8c053cdf8a3bee30af05e55667144ec8f0e6b21d04022112a6d8498a79786783693cb1001fa732c295dd5870d8d1d1244fc7f0b12dc240b525d78490ca479d4f63f8f4ce0722fbc60e28e736268a66942fc007a3582112d3fc5f645c75f23c1fc66a779db66021a2a4d850e1dbe88ff8a5697a58240688b729760f00bc8f1a8640e9609be1dbd0e551a72d4bb96a3a6230ce0b8322f325403aa8febe2cbdb82a40ad460755889b05ff6a746caae11263074f6fa58127dd2463da6b6b3818c7571d2e2bd8ccfd2033b630a580f92c319bb11823048921c9c633d263a5b34aa303821ca3b17b924763e4bde58223ab543537901e6e64c734307a50df14b0f859482732a7287ca8ae56862800c32028b9d47a792d7dc7230ee0882441686a604fc176ec2df163f0511f7d35495e1d8eeea8ecebd25880c788543330e71e5e273178b0934c465483e5ed851c1247d27f499ed0ee784b60388338fc78909216d7080d87eb5c8f8489dc3d172ffba07485209c6114c50b4b2a88ec71786a190b6b7ab7008f395bf10c0285aef184ec38d283b301dbc846154ed50809c2c4f170e4e3da5338643ebd25fb80e68391b2ef3b5b65264c617ebfa34e4453f3e6dc5d2a0595df81a15b88c5436748de99614a409d92ea3d1b9869b4b02c14a7448dc34511bf21e90d9b08552e0bb5c17e6c22673a847a67af9c946470a963ec55f6af91fbddd099980ed13221e5a6056a5e4f3fa055aafa33f42a47e7cc10c543980476b7e165e184b602ee29adbc91cd0109d7741d0ff2409d9c9bef10354a0e181e682b4c86ec9d65e8ac80edae87ebece8962eae78e4d6016aab3da67a105bfe6ca64fcaa156145cc99cb36e839c6917349ff24992a3a0387352e159d1126a206f8d55baa4a2b70672447ddf3f54e3aea2daad6319a3a4a02c5d0bccadcf4177939581a98f98a202074b8dfa29da50911843042b02804487bf351505e6f2fcd9d8ec8cc5f530ec76d783923800abd3cedcc382e1d991656ae907aa8208fc28d68cf21a9c2a6899d2b3acbbc4b7e6fcc20c8e2bea6e737f82e4977597f8392347923cc1948e77827379c67952447520b2aceadc0ca8785e2a09b485eafc00f83c5eab613e03cef287cdea1fdc110ca789246f9c9c243e00440124f1234f98ece21b7338493a2469fbbfa421290bfe91d4c6958665603469d66cc101bb0fa89d7705231cdffe8a42ca3f16b9c83d49b1c00f40dbe518cc6b75b35d7602800fca33b8b2bcc1ef6156cd5bd72b3fe53e80c0f4cc0107f2add57be54f3d3d8877239542cda052c9bf667e1d32326b684d6380df032309eec1838b8c85e1901b2e8ecf0fd9184ff78bb04582ccdc7253b4a9cf8a6452bf44f48395b6e826122c5d9a0056fbb48f5685c8bfafdc095de30a782cb9dbf65bb5f7c3e3bbf48bdfe17f839ba5d0f09ef0fca6bf802c97199a92657a6fb2d513828968576e3dd3a244b152315125d176ca14d8fddddd71618f04100c66cb3625fd130ca109aed5127ae4d8a0a144f8e1b6e667ada568841a13fc8254361058d1e306e7c84953760b0af17baa50357217aabd6217b8fd9e2d86c935bc6605df3aacb9ba24b24da7cf875f5da4b3f5d12247b6e10011ba71596c760a90affc8c5746a6bf1f402e143327d67f2b1401cd6c1932476404a6bd7c985016a420324e11bfdac14bad5ce8286e34f5493203fa35a790bc60459ae562eb8fbaa828853134ec119875b71690fd4dd287dcb4ae140dda75c1aefd2f6c4ed3ade11886c8312f9fa351752e06fa2c75fdf201691309e2da55a69fa8b93bba908aba3519162d4adfc864c543cae0baed85f1f1e78b4602ea121c37fe3d3219b700685fa04f28f67a2c28420c741ca81258a1b3b5bb70cd6249d9858bf1c76f935d428d3a7fc9b1e2e408c4b3a0e02a52a108d969b03aa9f53827182b373028a93379b4c35e2c17e7ffb82750eb3d0ae7370c7f600bb8ad12e08a6572647e9c52ca390a7a17e62f3545aa40616903e990ab1c75cb5483b80a9619905b2719bc9d38545b00bff2c1b1962fae14a4ed26cfd07805d93eba381faee311584ea0a648d41327de704e12ee282540aef60c154ebdd4c7424a22fa1e7f51178fde2c8e693c637dc324a89df84146cfc6816f12c53ed1837981716159784cc38dea01932e7ec28e1718eecdd571c7cb1dfebb2d9a5f4d41593a7e077840935b264347ad19ebc269ce8682e8b42c5039b887319f482876e0e7d4cae21dc2ce8a6250c147c89ed60dab1baf0d8fcfd3e38113d9a33f9697c39d997f0a816f36d2a66d3f479b576a40cb994bcd18b87461e776eb1e4669a5c3222acaa690def4c671626eed521688c14a176662093631eb68a14473bf58b939092aa818c3e84c16606530275221d3e36da560adc6149b71969395c55f11bbcb7204e1f13604f2f584976b0e8457b18f9f2a1a4f8d1ea4ba2bacb26a68937885a6912193bdd503e144808ceb48a30c053b638ba9872eb897b6dc8b709d39a5a422ea02b31e7a5b5c54a0436ccbf340a3d5ac2136f79d3d7845c3e6a393ac699ec64b7f1102dfb43bc8b71ebb812be12ea21b5d2ea223761ebfca4567173142916e5d62569e01f07afc4e34e48a51d28db01e000924173a705493fcc51e326d539d759c368d5db0a2d26bb9f888fb14a5f05ea8fcd2775c0c5d54a757a72b56fdd67dc56dcad4127ccee2de9cd3514dc00a47698af56028638187827c6305435471e4c439aab02df0e00fdcff3ec5be04f424299c2c94f4ee14088145029540d6532879ddd24ad593eb72f424fc4e61534bf751227ddb00d372ae400b6d6c0001b987bd22152b2a760bea4c0b23f46e5d61e7bef0a053436812bfb94e1ed7756cdb34ab3f00bfaf28ff264ddf02484fc7991647691e1dc20bd94722bbbaa66e1d6362cb4c40e2c74f682c46f8b45c71c98b780717f5b15ff3c29f5c62a46710fa4be37795864ad4e1101cc6e8ba517bb50346349fc08ba82221fa28d0c818e82fc8c0d60763b567b90c83fbc8c2158f18bead28a2614fffb227533068716a6995e031a17d75ec4d6d021fd6cf2c6759b4812f53a55f658ad3c25a0f48faa326bc64ff72e75c09bc7c18d09865c8d016274cf452382a594bb885059272553df284e2693d9fac8e1e8eb01cb0beff457cd74613fa900384ac62ec09ad4b378fcc8f10d6b08aa9dabba78736fb71a6ffce842cdfce53d45bf4348cf4f79f0acb34b6424bc2f1d8e1ff88ced1108c499c702f87623730b2951fbc8f53ef3bb45dd7232cdc2161828f5eb8fedc04a061d9ebcf2e9f91d47858826ac09018475cac7cdd33f1eb067cc67af60002c13926ef4150c0b38edfd4157a343900ff381d1a2d79215454f31afa9461acd299a030e0f5f806438c3539b779d6f089cbc4ea532752efd76982a0d7db210e5f9bbba1dcca1230a08ddf5f2b69cdc69aba43a0d51a465f4ef4e235252ce45eeee53d927dd029687f08a3f2d2dadbcd61c0dba39422eae15c94011975d0f82408d395175e9eb1b76b98970658db4c344c2cf44d5f53be74a275d71101e0a6043e41c7dff7a4e87c0563a79488c11ba151d782c4a4e4ad6bbf0c667c8253264b668f19e1d20824ab6712a4576ab5c27173443cbfe7d05f45dd85f148292b33cfc03d4ea150e60875f192550b90e119cf801124e635ca00ef2c33daa9342872d0bceab7cd8128b0c6f192548f78b4e83e182367ef0b52b6deeca07963f2eec7687a1d8352381afa0ab6e2b03d523fcd5d64f8841e542e1a3a310f06c59aac5cf3ab9626170b830366a319c07a24554327fc02ff7cad0c98ef72ca68eb8ffa8cb2534f655ec0381f2ee19c3661264a1c404f903bd448fa0d5402c656a611b2533335b2d883770a951da3f9b71cc5e50840be3ec8c347c06631a0e380deb751590d7c222246dbe2cc4378af5f47b9710ade02d74481e783e03359d479a7d7016d2bc1d7dd35ab5cd327cace9da42c8713bd34b7328b3f955da7291b7b16f8cd4c1f5f83f947a71a0255d484609e317703cd03a2fbdff9e260842eb85c9a6ea36de918048ab3498fc844e630ec3c7028816eef54de7c090abc81812f08e729f49ada33a890e41a5d1880944efe319086bc97c3b07509236413bfd318af22cbecabc3e2770d69b951281cd9dec9049e1396fed9cd514e6031ed8cd57832405b8575cb73c86452844c04ac5dfeabcb506b26a0ac6c8d88b005a511e10a5006e688a97208278de17911b47d3fd0ee07727bf665fd14f126dcaa674709ca04142900c0c513c65ec8b056c48084033febb1fce9b34663ecdd20a2cd2230622278ee28f1309221ff3643ee055dd9647a6152ae6b99cae2a6aca3003431648aadda68f42f30c570d506930f07ca43a1f18135395c73ba025f9ce15a44975718b3dbbd734154c47c81992e60750f90d68458ef7b9462a9b0ce09d6d65dd73433a6f83274e416cb8fa477c29ad42768ee5fcd9543f833678e60331bf7ea69b84097413dd015674c4786a3555a9ad667cee70feb619685ebeb9934d6f25a12ec7dd7200e939eb5e4fe718ef3bc2f03df519d10c69cb354538c56fa1fb724f801254cc87edb1bfb7dc8828145cc4dde2c60af36c233260755680e7cc30311b15125522d4a8607492e31cce7e0bf68077d670961a722ff9b0a3d65ebb9c0b92265399f6c945053256b62d47fde4ac1a3fde72e98fd297a4b2bedb5b184752c7050ac400561b22daa3f9bc307c2b34d4c42330a4db14c8946aaed35068d859baac62310882075be6537056c716e8acd43b11eaf5409d2e7188f6640229973a5d88b425c9d66fe9d06b5f755a358d6a9459522d8aec72614ad9ea577464fe95e7cb0b1de3fe0b67e4dd4425866043c5a0cd98e3bb6504ade568f6ff22c81360461faf135cb122a2aceec5edb0716573153e90fb2a0b523830cf93ba2ecb7f5585783e50082a263a873f45fd31609432d727d9b05857817346b359af5a77158ad5aa2b8c18783141a5dbb5b48444b8ab4ade55147cf904008c565e88c96348fff934929d7d0173a90b3c47be618bbb62cb997290fde4e98b2dd05a10a5023b42b5ed8e4a0b066ee57bbb47bef483ec817e34d0d1053a683d67a51a3b27af2593f6865c3c297fe65b3868b8bf5302b84431096eb49740d0f9ba3cf64344b189d96606bef5bf3fd4a5b506a72fa46c11a25379062c4852781d597dbdb2844ec48da297386ba43f616b44276b68d8130634b7be62d8197cabdff71403d6ad0e1b09c98e7555da8392ffb1d256446bd5841dc8e87efb939e1abe3543f889921d790acd88eb27181328f2ee0101b59c00c99135d345ad546afed98856f2d5625aaaaebf141658da677cd9adc0134f0a7dea7aa036a9f16a1d0b2de6852b4d9bbc0fef5ba213a08ce000f41479f2353ebe39a813ad8b25798733d089133bb9cc7803b340cf2d9e8268acb8d7a746aa6279447c4447f69461439e503059ddafbe285f0e2e5b1715e008fbc29fbd287fe68e65d85811d84e06f4874121f808760b8e0a223549ea8e51c897255601d9c58af011aa597f8bc7a88bd81aae4ff4e88e80bb88859189fb5ffe09a8ca312ec1454eefd053a78e9cb8394e8f29846f897a5cc1c319fa64e440e686623a7f01de9da48c303110f93844225ce60513783e4e6fc3936afb6d4d18911e12d2b829bbc6bbdf70169ff23201e2213bbd8dd1a45e807d297800cd684e4ac56cb32209acfdb0b7436292e76d12069e50d374cdaa4c2ca51be4f8b18b1a8e7df02d9a032f3e2882514b6df7089f81a98c5017d46b1040e9395271536b2fcf1e131533f0804e6d433a65bd47bd0e8c3f32784302d79fd8b76a0bc88df292b8584d22ee86654a3a452927464b1466bbe404f8ede4285237a846334480cb0f9b567b416f2a1488c552af3f067141112179ae7a654c52e15579e5cdfd92172f25f546e71433a0c5012870246bdd77083ec36bfc70d802ef3447685cbe423c0ac955e5864482dd46643e6643aa9f18292745602a3e707360dc5ec3940d70a468ccdc569dcbc72aaf19215c5db4b181569b477ff1209bfe7776f0ba9c15efa6358399801bda2fe10bbb9359cc6cd52de1b9369164859370a5789b54ffcf299326c009d9b680d3b126953194beb859ceb5ab4f28ddc5c4185d48393e687c689cf2413a2d7406357334acd9ebdd0939242a684a89a9356451a44488d418f536655930bb41a0b14a3396643d5d43d4517510d9ad7dbe5e7cb9388a5e258fd0918b00ae528e6c8f5b3758a03bd750a9f5393ae1dc210e773bff3820c4675e36b65be112a79257a494b507598305b52c73219fd7e1cb85d870210c283ebddd2e184148a6b5e26ac93342f8a02a4a2a3e4c3db012a41975d86cbf6b9257227457e5dd398a4d92f80b98b5435d9fcfc76c71f21cf32e9c28f7d712540c082cf98351a47899cecbe22d4a960c4e30ee7de4575ffb41458940aea16151c0d1573c4da6541ff4730cc3ace2bdd48d216ae7fbb8162e1dd589fb2eabd14f0276c0dddd80605b9430d3a471f76d2025a00d87c7a17d36b156a048ab3e15cfad0a2bf53ecd6da485dd50b74467f57b7dd0367ca26011ca32b594b659e306d9e4f888c6704cce919217d76e53fb6c4eceacee08380d3041c3b0fa13b3e7b045debed2c68bd871f082e56960af4699a7e051a2b130d174b840de6a665da13113174cca5a77366d55bc642af1ca5970ec305baf2e847ac51c3457cc3fd484b2760370d28851b8851bf8012d73a4b8b879aae30719c65c5a90975d909da7f63040c615f5c7ef4dfac25ab39c15c8d7f4ebcc2c611c8129ec94b564fef1822551eafb929596d38b8d5461077b7cadc3175ca29e7cfc5b9e2ba00c7be79a00a31ecefba13ed178e1496b40cbafe256734faeba5439e120aa76071a59391d18c8d8c2c528af1451e5f342326afad5a7a25f3795563eee1a4b9c27273884db7583a4d6e2c79ad7e7d2b5702ca1ab85c2304e9c1775e480759ddd60395528edfc9fc84a14aee86cbe52f8c55eefb8b30e4d3b10e00b54149ceb46ebfd377512e1cda7962346d7cbcd2847e84db62a5007ec6e76965063d2248d2901355e2b871f2ab88876bb082083704ddd123584611f6153baa61a9ffea70b36f5efc981a593eb4737119aeb092f5a3e5db82c6676c780a5be8030e394841933e64a8539affa0d91b682c0b40c436f3152bbf4fb8f9618c71e09fdfe38f3cc1210f7c8df1e3835a628273bf121d71a16920e7f3dcdce42c16a3f4c4bd5a93452a022fbc7c8c4623b257f69dc094df726fbf1e05c32f74505a5406808ae14e70d77d9da4e4af1a41f5005c367c839bb9394ef5efaac00f00b23cdc66727da07a96a2ac03d338567bb90b073d7e0a398859caeb9d29065425079da73c54f67b20bf2955337b1f6036749a0c250e3600ba3d540e1fdc4123997ba38a69f65c3ae4e46e4d5008e992a782a10777995298e0e2b0b3cff543de73971e875169f880aa0d7571eb5b29ca87828fc3ccbd1fa0fac93a0f79deeecc05a64e880e5324ff3b73c1528380c50c8015439ddc620316fcf825aacc950000ba3ec01d9ca9ca1c2eadf777447d7d2893d7787bd614ec90c2148a0432073d170c5007f4cd4572f7e29e7a653c470b7a0bdbd1ba12676acec4b4f5f1d2c59a402e3f573614472aa3487d58289d1fc457f95e509d8f77072c75cabd31ff951302d7f3e5fdbb3acc143a223a06f5d262009cf23dc9f1975d797e554da841cc149da5e7e066f207042f8992b44f93fb3d9e21ec1c27b2d88b192f023058edd704e6115c10a2a3fdd69cd88ef0a0e81cd8572a149032481008726b4b78087bb06b0083908c5171d7adf2e4b7c65a30c8d785523cb0867e03027145824bf230d12dd3d030303cada9472d0813b24bd86b0a48965fb46f067e4478967bdb46739bac985da58e82eccf1d28b15ef068525239f114ec3cbbe35babae52887a1a67304a6969b9d65a8b9aaf669041495b2e2bd4270083ca500a716c5c557320621dfd8eab57558b587ce1ee6df2fdb6163ea9c2541b6f402db11c903b38577d4d8d4516e3a2f988399d6f962e89926eb75e888aa6442aaf9cf292cc843f48686602857511336cbba0615bccec97fc0c5e5f7a89d602de0c80396c8bbc0edbf0723138ba7238e8464b771dcb0f63afc027195069f548a0b1cafe2bbb6406f1d1e922d528257c6d259008428d8f0c6ee63e6e53805817a192b9de71db515aaeb4215e17e6be4c2e32ed4493722182e617db1911c2d043191c64a159c9a904d38495a7552d9ac62fe38358a76f30d6ec465a06d1b5f826c863d8a10f131630dba5907b6c52e044a545f820525c019a420e0a853636d9530e6aa34fa6f2bc26aa527916fd22ad9a69906ddfe120f45cdc9d80f5589d7b8a8ded1eb6519f00d008d8afea03bce32435943bb10321b8d6433d21d02850343ef92722a3f789c080432832fac0f0429d9e5ebf482eeb10c8fd39e0ae0a3e9880501f50153ca01381bccb59210af876888c9c8e8f6e60838c0085514d28003d4d56477cce95560877c597da1fe0202ed6954e50127ba22cec5ae4004918c27e3b24280c8b1787b0bdb5c372a9e8118030760f9cc4b1b0aa331f451c863922d0754ffdcc01fa1b26b70b11163c2c1c3f24bbdf78e7766b4d9f1047f4b6a8f1432fe34e8ad5d6f8b6e7588747c320a2e1bc740890214feed76f00201305c0c68ef7f2cdc61fce4817cf77b77d01366a3e7686c247c3764b9e2d286d1b0792474629c6b7f599ae41b7fe0a95fa2382c01880fe3127350a83465242db4073352a8d61281a62e62075ba1a76a03381820199e15ecd63e56915f5db80bb8e3100b72228ed619c9ca7735e411a081588afae3a202901dbf1826fc2e270a650cbcbe45b32966c2633d9296014abf2f7ddd2e3e1946e5c189cff8e89474872d5230ad7b9210043e8ce9162520ae3cdd28c77a118ab37f407689ed46223e0cd51992d84a5fbed5bc91ba2a3090422eba2be83a43f4826bb321d9ad1fd5d403f821c99cb42405fc2f9c2a2a40f36c612bb9023a605eda84e016ab88600fd36662244392ed7580027509a29336b30ce9ab8f503fce10731d0b3c341b01a6caaf951180d7c5f22fb462890d11fa30be2bc0efc12dcfce8ad1f24f4895c5cf515efc93010babdc18c40584725de350dddb4f819246d0a1f568110785354583f3bbdb8a688d199e30cb23fcf31d1d70bd954cb76bb5306bfe109a8018c0f73bd2aac399206a818df6e894ce836c171f0220e78ec0e0f9b3a3d043cf5048dfe0a23ebca7e7a3cdfa74c422ee5ae299b32a7917e33641707b49f9ed6d6615d77bfd07ed91d3724de5a51a88ac2532e0957a919a8aa1ebb955ba0a045c2f77935b3aebdef9922c30f7b8a53177793cbf8f6793f6057f248abb38e3e1080b6ff7e14a296ba52505216d386ed3dfdac61808fc365e34cf3d4cf7e8b3dcd8574b718711420f7092b223a266d561ea889ba867d229f5aa0accd43813a577f124ba818ba19f7ae82719c7964bf3280d4cbcfb5563a222b0bc17d11567e8a57c2f761e11ade18cabb91cad54bb292d67cb9ad092dd3f8167c9659a8e91b6bf80b3869075f86d60497a52c8c3f99f09250289476fb83e797b10f718020f253c4cfb27e96166d38fb3dbde4f412b7ce7d2e398ec14a7308a9b1761ade4faf1bcca6fe1471ac0767d7f090ff688f2ea1db3dfbd43398849f9ee86fa9f0df143e0e69a43b97924efcacb16aab8f044ab22fa4b3bc3965a96eb65c15039fe51e83ca2d89ebe85e0a646e3e2390bbe05c54ba2527336d3bfdeaefec5245a8d578974cf9d3c6fda80140741699a10ce05da292a9d277dd00f8ceba0f1cd0407cdc505ee6ff966f7f5227fef1a71b90574a910483d00a3794afa47987d92f98137ff9d10dc02f4549054b56dcff5776d87b5b390140ffe606545ee00d387859c1867251ba8ef29c2b04481cf599917e59b025c94c2804ea2e613b78af220896e55e399cfcc76f93408ea94a3258af14fd653f3009c876f67d705c5de0e5994c95042e5c621f38bf25982d8b9f1e4efef75d24a04fcab4cbe556822d67330424607de9ede5b8bec0b3bcfed23b09803f3e02372f771b3864566343d9228d39acbfcd3534abbde75f04c0bf3702b717b8c9e092ff5a890de593a4cfd5fab6ecd007b615e3612f2914a07ebc11b8b9a42df0fd96204b12196c041c0222816038ac6243b95eda1d72ee3302c64bf42c8f7c99cad505df1f82682f211acd03bf066f86df32a5404c1b3615b82ca672f256df9202880b62609d32e10521b12b293ac330e304d71c9c03b12955d15d1bf4bb4397638228d53e160e86ad4a2f6f951b3433a94be740def77992adc6123253f4852e6b91cfe32d8eeb39c374ad7cc83754202f7329d36e03b7350dc8d702b4f471f2e52dfe068c78ec1f986cde60362db94e829d835db31934ceee5520a6d5d874f5664959dd26d543c053aa7d2299d1c3e47e58dff3191c9a075f43ca3c3b3ea0a85743c4ebe791e46c5cc44fd31dd52b123cf2c095a52e70a09c4bc095a5a50ccceef8b18dc9779913ddc0eaf34b46a2d08bdbcf01523557abc5cf47fb7f3968c453c6fd442ca9cffa372541554fb5a81a209835ff0a404fae8d4f0c6075daac5329e676a8bb9776a349b047829dddc1047382514ac99c229e42037472351893acb281909d25c55fbb6103be4e2208c17b09fbca3d89ca6ab82807e24b912a7c95237f78d6a64d3317d30f41466c424a2b58f628f72e48b12c5e514ab9e9affe60250423c8b2171cd2a59df46ef1e84e2d1f638afdcd6e4eb500a34eaa963a2a9ebd80001dc765a01bca27b9d2bcda8b68aed338c8a1bb78d02681f091708637fa658fa497dfa12eeda0be235d1a9f8b2e315844428b56f1a69c86a339365b10c55d2d28a1c1456f34bad6b8302adb05dc5236016f26dad4e1b5f96ed8f0dc6b29581dc289bae3450ae5f336b6d2608d6bb235e072b20f25a80f2366a75d223a95421cf92fac24e883b906e886493934bba859d3c70f04d6e524788305732507d35e0c6664786c12a6c60082efa22477ff2379f3f87a2c464bbcc26ef7b2373210695a9c02028356fa818484c3ceff4599fa699ef7dad068d994f306ed40173d3be36ed38ff5e90c57b133dc7ea6c6f0fb9480a786081f93b92ecffb4f50db7457dc2e556af926e969486482f58c832781a4dc81410cd836729eb9aea5a09f5d7e1ea24aeb3f45c6fca0c765c8395763019e50446295e92cc3082b68b1217f1cff3bfa403e3b26174cd7ec66b047675a7aedc83d53e1b279ff926cf102a7ff468916e507a1b4bbeb49a424537d9a7e775fed7ab21469c09062a5152f3a9757090ce688f5658c745bd3cefe65a53eb6a3f5d77e5330ca2576e15dfa10f96fb17808c0bacbb3241c572cd59030e0db4dcabd2498a5f3904b44b18d8c801b4325b740137765755caedeecd7c118acdda6f1c74667b0564e4f2de5384c3cbe8e7b7801b021a31ed99ca27f4923ea20db291d2552e8932f51f8667173d46e14f987a6d3acd1deb5c0dba109588c40cca5662506884c829376cf44dddcfde1abe2698d0d769eb49bd3b3715f6181ab7f97b8a951a6667b6d608576c0bd1ec4893266d99713f016d1839e7492f580bf3bbfbd21e4c52ea7e6583d2c3e895b57b141ee04b2aca8b425f78734998215f48616d991d229fdb18e8306c13a77450ece84137ab9248742b6155a0b4296b6341c8618e33ca2a527b4749e919571f09ce3f74e0e31c1d1b23a28fffac1ac0c47bf1c21648eb485f683216c05d18c82c87cb442de722bf85b13dc5bc7e1dc12cc3ecd3be9af28e54548b15208e954de2971bf452df8def2059d1116f527ebaae7639672ce53bc8fcd5fc9acccbbabc8cb9909e5ca135405943f9247f22e5478c54bc3828d1b55fccfc194d68f8e610c7d6238b8103f8d0b55d5557e2941415663545d0c22e28d61a8e26a42627346fa14e0a07c475f06a9ed444f96d86a13da077b7f01b7705127a95be60bc426fe20478c7c6b6564d3dde8ec85784dc3ee755abb5768d85fa1bbd30aedfbadd1b3bf42cbee9a86ddebf476afd0b1bf427f7f85eefd6b34f6afd0b2bfa6637f9dbe9d2b7476aed0df6185e65dd668ec5fa1657f4dc3ce755abb5768ec5da1bdbb42fbfe351abb5768ec5dd3b2bb4edbfe151abb5768f7aed0bec31a0dbbadd0d8b9a665779db69d2b74f6aed0ee5fa17b7f8d8efd2b74f6ae69ec5fa76b7f858efd2bf47b5768ef6f8dc60e5668ec5ed3d8b94edbfe0a2d7b57e8f7afd0dfbb46cfee0a3dbbd774f6aed3dbbf42c3fe0acdfd2bb4f75aa361bf153af6aee9ec5fa7b777859edd15fabb57e8ef5da3b37f8586fd350dfbd769ed5da1b37f85e6fe0acdfbadd1b2cf0a1dfb6b5af6aed3dbbf4267ef0afddd15fa77afd1d9bb4267ff9a86fd759af6afd0d8bb42bf7f85e6fd351af65ba1659f351dfbebb4ed5da1b37f857eef0afdbb6bf4ec5ea1b3774d67ff3a4dfb2b34ec5fa1ddbb427fff1a0d7bacd0b3cf9a9efd75faf657e8d9bf42bb7f85e6fd357af657e8d9bfa6b17f9da6fd157af657e8ef5fa1bd7f8d86bd5668ec634d63ff3a5d7b0d3d269801942505aaf367c156302055a503192ec2b48ae383858b9478d0fb850b832d81f7fc155825c37d3c3497896a712137b5de1e63a777e6cf259e3a9f416a5ff4d66b246edd41cf9dbdd265bb94bca36c58fb1cfa4412b2f7de5b4a29a54c3205c70b0e0ce20bfed440b3bbbf7777daaf5fbfee7eefbdf7faf5ebd7ddefdf7befbdd7fd5ef7bf36e519ef9637e7d08f47fefbc9306231c2d71a7c5e70e87ec3fd6f8fa78cc067045a3dfde2705f16dae5fd1a5265c8efbf40b9e0478879348232764a7e7de3cf9d80bda75cb0337ef3de0e42b84cbf772bd6f6ae9e31364583852f843d72637316730886427fbdbda1b7d2422843d7faec76c6fcea1e4b3eeb3d71e4c8e6324de3290bffc58b91c96e71e9846ecbf27b5ad1b27c98d1e1e387233fadea24349a60293e276f29e22270c89f15d66f1a583111fa4d23e10c0d18614c67b06dca4fc232985e742594901e633f259e124728a50d6f855fb2ae7f41a08581f06cc1ffe131ee57e600a96682198664b72ed8c363bc07d98780323328b0f4bbeea981fe4e2728d9b07694aec7790217cc81877093ff0f58abb516424b39cec27f3f03675c66b5c77a3306d34e982a5d6ffd7c0ce278ccdbc13ffe0dcd09864b0da01f1f07c5de663bc11dc6414b9ee21b9a7e6cbb4d53027be8c7f79347f9ec9d0a12d0cfd3a250951ecb4ebeb30781a5d1be833999fe8c536c734393f2338e61ce848947e126f7949bfc4db0fbb8c9ffe431fff9b99007eee0ef1c287be7abec0e511cd4b9f4ef8dff57fb1d6ef62c57f42b46cf5dfbadcd38be4d83f90e94813bbee3fe035dfc047b8f1b711a0cbb42e8977c89ecf4b59b451f92fd5196866257c25dfc21196c3cb99e85eb40fe9a43cdb3d02f8e61ffe91787d81512ffe40ad1e867f45196267ed46a8828a998fcd38838f9224e1e0bf2981226427b7a824b2af80609e5fd1f157e823228f886c653301193f758f2245c3ac17fc2619bece3db68ab2fb9f2dddf5510056564bb97a183288f839e9c601cf149d84666e0e5d28d2a1fc3a3a78f631f27f43819e62ae812bad05e98a389fc47fe8030fc54fe535f7611cee50822f38fa84f8fd04a176e407dfa11901f1f47c53824ee01f12abb143e07eb2aff71937f15f67de73ff4c69180eed9c8892cb264cf704a182d845554d1fd5b91375f697933aeefcfae10fbd03ebd44d89c4eb53e26b59a17df5b08eb759a99653083dc7331eb129509fb9cf0a0287e87d3b139ad03f2bc22166819d6f75fa075c01e3e3c26f4fd3f9ac099084afcbf2de3faf723fa77445e9552941b55ac571ff6f172fcaad980f139acf2e75d21fb2c29791db0566b57f04097576489f703a3e09c087a4c780c82f0fc3d5d4de13afe768cbc46f98e05fae57df73c9b6609aed02574b390a659190accf33151085e59e8668f7285d48f2f878afcfefdbc236f86eb3c170df4f38e64c7ac56f36cf4f1728d78ca44d98bb2682fd6e11e9cdf07a016c0caa84e80a18216f2fbdb2fef4576ead0b9ae670c7b2da3d422f7672f62f8e044fb60da15d2ba1fd3b48f96a6d1fae2b555d28fd507cc943ead19bb268c1695196af752c9aec72eec8adaa5b58b97e3897331aa78672bbd1ddd645372e52c4ec544b03945d5c6ec45d7de6b5eec1f96c52b627f6119a6e1ea268fd9322ef7f70d97793fad527952e60575266adfc3d89bfcfb7939504687ca4f0aee6ce6b09fe08eb370676510a618629d5ee5ece3ddf2f3f7f329116cf7fefaa71aa6fd45b5bf62ae50e646bb64ff93b35f81b35fc9be0493bd0ace3e057359bb64ef2716ce489f3d76b727dd2e7b4bab3179ccc42466db57cd869502259a903793161f3567df655b742bf20c579bbd49c9cc5c5cb8b6a4f5e43b9716302f6240cea2df5db92dd657078f1e311cc6fb97b3997a6eb283c9935e9a6de1921f1d83cd3c6b978ec1d224b65bc6a67d07935f90fd3bd18b1cc387dc29d8d175b4696b49b72a14bad3a444cafcaed52f9b49266d310b5d984bee10d0e579e0554143244463db89ee79f47aec44abb948f4a23e682fde5b031000a65fde9f907c3ca39c5c1783c9719d374387b5fe11ba0a8712619cd9c6ade8d05abc1c9adfcd3723fb2be9192cacf9cd99b39a593358f95c64b969c3fe777d3f76ddf9324798b36b29909ddad33258cff46a9702d98ecb99d60dcafc66c4be08eb7d580d07f534f6bb8f01df47cdf4bb2cd7ef3878c91865f91de54de1320acde43d81592965f292e4ddf2bcd9abcc8f2bb26cca6b924b56ac64a3ccb242b3790796ecc69757943dc47e8708e30643191b65d7b5fa0506ba401991bd4d537fe5cdc942ab892d334e2eb35c7e2edd8ac3e85a442e44dd04e85ac0882d43106719d33279b15026ef95e935a25a9994d57c92c94b513279a7c4b64cde98a1cdd5846925f95dcf9914227a095d9b1135437c8da84658227e9cacfd6ab1297b8c156d69190b653229a070c6192fc76611e69782ec3fe36bc91df53c7f8b11be3cb3766f33b4b0d90c1dcf05965dcec65bfb65c575bc1956bbf0967ef1efda0cd91fb6c8ef29192ccdf066eee29f718f0cb6cbeacdb877e9186c9765aca1c7585b46a86bcb88a4cd5b1b754af615f96d285a0d3c79f0592a06dbd51a4ba26dfa188782a5709a1037993e0c66172bbd5779b03520e287e8c79449398e462e5f31472dc62d47dc5d3f5fbbf1b57f175bc9b2ece3632b5fd284882f67b7fd7a8bfea532e94ba19fa2d90880157460854c634945ca95d28c5748c5189dcfb24213e246050b82cd56366fa5d3c2f16622f16ea67c42786011c82086fcbe81ac24427ed0403344ddf266c0ec6f130ae11caf3d8443d0a3b93184ffe3d15e6b1ace073eedede4b0be73e85dfea0afbd756be60fe5f28763ed47cb78d6fc9ccf91e5bb112cfd8abdbc3e640e6121f667fc023627e882c25ec35c6278066bfdd4349c03d3b48768b0f065ab725c4087c774d6340d6bff509a16fab6daff8816fbc171ed44ee2ecca39dd0b4ffa1bdf6a120eda7863ba82dc0faf84ce4ec4357decdba49fe0d5c2a3560f4f6bbcfdabba6d98a3d201e236fcc1918ea5e77c344e6016f4099fa7ee1ae5a15ffa00d048985dfced9ec5493e2d56819127b271e8cc94dfe70b010e6f5dce7f3068bfd4ecb38fdf098528d0745a0caef6fb2bf8d3b8d5f75157129f49db50fdd8e4116f31cbcf721b04803ca34767d853215fbd42cb10e3ad8ce9463445376939b240541a9e5e3802fdfb18dc4a5f6b781b8d4f26f683ec2f4eddadd11c33c886118e8d258cf8743c8afff00aff80822a57984bfc4a5f96fa63efdb6d8c3c0f70d719c977b98994a71d73e3092732a8560efbde3acddfd78a0e586220b3778ef3d8744a0b8021b628c72f6902b508161d9bb1c86026d9404965dd77561d80ea0c002110b082fcb0d0516981069352291c8ba0ea0404209b25f6568d8fddcd47203ebdfadf89cf3e963f15658bf9b4fb179af8c9d18563ae9ec6072e4b88771d34b430e16dfdfd0ccf9f171cc8f2f1fb629c9374117b729495c048ef716ba5438b10d914ec8e92346220674f19ffff0901813f7701834a08b7fc7656f9f1cd0c5e3939d7b780c8c194ed9dfc79be1a721248e39a08bf78fe7bc18604dd3514ec05dde0fddf34f9378081e44ffc14311c46964647f1d4dc88118802fa49f70c214b99f68c2ea8927e0e42720c9a3ecff3428e47d373ec5ef07bc2a681e3e45dc814642f3fed44868de3792dc2d8e06ac5bb252866fe07ce0bdf51f78f888f738308eabfe7c19faf74470681faa8fe37dad13dbcc871f0a85ac86e5bddeba14dbf8e388eff0e3671807f617b6f1c7dec3558671c0776cd303bac8874f9fd27f4f24a318e661281f3ec4360fdbcc401bf9967d1828699c428f90feeb812ed823c43614cb1474d9f16f9aeef564f93e25e7cd8b340a3d99f6fb7efb7d6d88e0b82c0be3c81e629bec87c0efaca3fc89c9a3fcdb10c1417afff73ec67fbf611c1c876f601b22384efe611b18e842ffe451f009b6997926300f5de893b0f525377becda10c1f170d47f1b93afbf611c2539fffe61136cd3c3b2ac1374a16fe1f756ef1ddb9c1eb6b9de710eec1bba8c5e0463bf6954ae7dd33cfa33b07695bea52fbaa16b430447a5a9f8ed4017fab3d2c78658f8081b220e681af9f808f9f4b3cbdf9aff814743f37afce62161ddbc39d58041d1fb01f6b09cdf49d9b41dffbcfdcfbd23e691657f0807890217d54d5eab8504c8d0e566f8290d21849f798cf6f0edc6591fd83ad355eebaaeab836123cf7ff6b1d8cf4323bcf50b2459dced105ddba68d47e86676421fd98dd78f3c1b5e56e7f6982eda442893fd338f812fa10f364628276a1031e043abec9b6628220731fe90706a3512fa3b9152f693397e493264ffaa6a9730743d9d21d3975794f18493908abe1f2686f6fdd6d533b2efcf52ac8b52eda63c200f852202ffe1b8a9aa403e2e4f94acb1a01addaeaf33d3eec98582f21fc5fd2c1a54b54bb26856555bbe34206436b936da8f20cccab45b5233b53bd2b46b43a22cd26aa67643191365dacd72bddd5016e1c38eb212ade6fa122d08cf134b81758a2fa3a95d2c97dc2ba7f830d17aacb46bddcd240bdda6b935bbe408812c59348cf8241612c8f2b62992b405c0fc48daa527a44cbb13e524d3aeccd7086ecba28c9fa2d588797bedc68ca164da85d6a952011464817014f0d0a15db7ee0486f829693952fe42411a2b9a9099ccba205ed91e5b415fcbed311bf5d2a451c2fade7bf1492925a5d3aa795956afc4248412d22b83581a90f2e1aad588568e7d0f21865b5a386a4078a658e69cc042ebe254b29e31833e98ab09ec8372c223729c5a0dcff4678425a83465458a348a5dd46251433cf490bd4da45df47aeb7aecbaaeeb7a16845afc985df9de8cf1650c5aad5612da4bd5c34f113e6cce1efb09c3bd80585cebe4305641d93fcea985ec3f59f0c0c32b12e2813ccf87454f4f4f108d5f85d4b72e167a425e0e74e1c0fc02154134280cd592516505b332126665d9101e1e23458ab8133d3d99123b3b59909c9c2474743220285406a1cc30fa62b5e84946e9755977e60b75e95c3951e6eb491c0828c857f1f42e112fbfa741cf852a685620b61d89e6aaae6d8a4f6fd6a66883ae0a74d1203fe2a6542ac3eb52fcfcc8eb51b84f2541f6a2b7b4b76088deb54efd728626439bc2103535b4eab9a822fb6738080e60e817ff3a0220d5fc9b285756b0e0a107130c997ae0810506af8cc235e8e313a1911e21b04811388487c7f3bb5009b833244889559649c89c1c8842d108e7af20c19539dcbc80b80bbd500fc2a0ebcab950f0bb0b7501814117ea02e22687aed9a87fa12e20570e9dee31c2230d53a9f9126a35110380564a5bc66c3d164372625945202f9950c7e51e3ee6fa1e7055f18043f802e22efe55056524bcf085ba5052e6449903b17c181fc296ac5b06f6b4203c63a64ca593a9495fb40f3dd33f348d8ec1b26f4973a0b5a88b0a57ea425d3a57ce4585ec2f2b125a815c94a2fd9c137714c84daa1e6b7d10154910949a10b85a5d58ad3f526e6cd3a54d1b1136b7dbc553f6b7323ab51a9a693676c87e7e862390a945549e54ab894f85b078ad861ef5342cfe42bd1913ce1f1617aa7e84c01ff8933deb7c60b762159bd9f7cfbfb239710325719737a37ea15df8533145a555d4d0fc2ccac882878b86ea9c734e4aa9cce16407e409c3ae8be52b43182bcab2b2b46a0eddc80385c49db8735d9a65ce9c79a6523335533335533335abd032d71cda90dd3a831586ec5ba039178a0251a09f0be8e7525df1baac9c4b15020be985a2403f74f5635d57e6d08d3ab18220c7b22c8bd21c2873a1dac5df5ad4558296b1481937297717ea5a81cc8132570abaf89b4181543227cb93ca56a00fd876934a15a43a59f8f143b7b64bfc7a6dbbc4bf5250866b0a74fd7805b256239b8f458fb164943cf45061a442a48c4a782e7a9ce6322274dda723f142df8d4bb8c9a9282283b849c74d45d0a2111c233d985ce88391c628b4e8e3268f3ed9e163106a353cbfeb5df8c5508b52dc517a8e67f7faf18abd1d42816cc9e87de5762faf94becbb2a6d2b4c7b48b61a26fcf52b0bbe2453534ad94b261bb723b6f77c5edb0b73f32791616ada6e46912967f2eeff02c7787dfeecbd68fc7ecf0feff2c007800a83cbe2d7f59fe459f69a3cfb26f6179ec6dacbce8536ed723a73c366dac784c744b2b7e7bd1a79456e01aeda6ed37dcf5c8a2cf70d723e576294fd24a8fe14ef41903b64ff9ec675cbb2bb415b8b4826b6c29387b2cbbd9976e97f256e53795cf44afbd497657b2ecaea8887e056341b0596b0c50f90cef50f90def68f9ec7d4411f611b30a8e6e02c06b2d6f3ffba7d568c1ed26006094cf7087ef3f0acb63ff2c5986b1b03c2662799647e17e63c9b0d744b84361c176607914966779eb67c3b0ed511e05aaecb6bd95f29ce8b1cbfd8adbf5c82b58becb72e96369e581d8b20c6f2bd96f77c56b574554c2d95755c662dd94716f457807f7291c4ef919b8a245dcc5be352c25e5b1152b3416edb36f165cfaaa2a65a4cf6e677f85488477609ff24fb331fa944fe9acddae24ba295dca8b567c7645afddae47d67ec5ad21c21910d8af68b72bfdc9afa464f64b292a6f5fe65430f7dc1dd927ddae47b66fa5ac1cc24c4458f6a2d1e83ae2a67bedc08ebebb52d7c8e6ecd66ca57e52f6fd2fabfada3d1953c9681297d12a1237796022f1988e92a1734606150c5bd13821a1bf429c75c45dfc5fab891fdd64fdb895bd157aebbad64f0e76d06a32cb7ad10e99d52c9a8d1aad1f2b5ef1faeb2ad568c146c41cddd4af3dfdc97c0716933cb6abaaaa4252816a128fe9b02bcbd65b3f1e13df4626f417eeac6ba5ae3f122f1b73b652d611eca3cb841e7b0b26876e9d52c4f837b630d1202853555af6f1e9ed3669f2b1a7d98039ab2aaab27055d18f510800b41ad882c2a5c80800ad460640c258852953021040d642ab814014770b15152f32a89ea44c7d8a3b1e593d05f90d82a8c0b097ac8556037fba8b7c1a44453dc990563345f0455bf6a2d94907a0d54c9a13a98ec740182f548c91ce4be17734277b10375d28285355aa0b959dfe00b49aeb5bab2a4ac5ad2f5a0dc534a805cda141a88e48ab99d64e6e005a751161a07cf8da453e011ea3b0005acdc455d56e521960caf8d024df005a8d17f3b10b26806cd258ad2bc618a3c88e6289c91649272891f3a780d07cd92f1237763a41e2ddc8d784115aced82f31c6382d0db8c4191b469c53ca18658c53ca18e39c527e15689c94524a29a571524a29a594c6f918fc199f0f3611279cb40e5c4ab5e29422b0f19b08845f713fc5d107164ead464af835207e5dc0baa593aa091f7baea307fc817de81dd522fb7319d8928d1867dc512dc37a7f9485a1aa5f6a07b4d002aa1c05c41de7b9f0bf523840d75bb8934e64ff225eeea4119c2cb1a75121cd01ecaeb8498b80e8338c44e9018f26fb4793615446237a54a4c1c91e049526f4f53e9aa7e18834220c020f8868b2779af6182b745f1340cb2cad096059adaa276b7d0755920937f5b8c933c4b20a2b8d0871433fd28770e26ed1418585b85f951b001089773367b5c2a4b05f208554ce08219c46788eda02608e31bff91c0aac5ba4c7fbde8befc5f7e27bb2cadb43d22a639f03b2aa14d7d6de68991b306eaf0faad5c8f8c36362a4df41199a282463e98f1ef1bb5ef970937fc47928fba1fb70446d597e5d2fdbfb70bc0823b84c9f08244e59f4985613c2ef54070bbf3ebcbe4df531ad46ccd96359ccfc759665d00a610fe1cba5d9a8dfc3c78f2863b41ebe85236cff1b1cf7a9190a030303bdc2ef2ac735ee0871c8313760ddd2cd14a516a516a516a516a5345a2b4e4b26fbecf270178fd6d54307761ebec2e8ede126a7432ce5f1338e4115cd5a0b82e2ce57ef3ddcd1b79e87af204d86a30fa543d7abaf3a7864ebdd351b8e840534a8a51af5e9571c31e0ab1c9b0adb2ba8728748dce47380aa999a4bc01e4db7d0225dcd8ea312df511ed3bd533e05e5e8381ee4015183edde29baa9dffff51419e2eb2737b9e35039d8aefea9f4e00927c61bc361f8c33be330fce517acbffb4c8c18aaecef83a7dc4f1d976364ef6ae5565a6c44684b8d3fe3eff0e18a9b2af76ef2c745c43cb10f9965c425882bed81ed38d383c9cebd166021d0a1d1822832f6aecc19e698bd1adb501801951b8a229cf28bdc5010c109199bd9eb29b20ed499c60a929c72671a2c48e231251a2c48d22d7d8527deb044766e48f63700c9fed1659c66cb5e2463a2f7ddc20515cdfbe706db82e7b6e9e3452ac418e78c6fbe18e71039627519e823e6c881751eeef274cc7ac3636eb8e9d9648adf4f804e9f3fa71131e370d3e3dcabd31fcc98d9c9351cefa5fceea13a9563cd91c7bf5443963adf64aec6d723879e18e22ad33411cf788f2372327c3a9dafda9faf82badfc32084d0df0d7cee04db234758f3c76a551c218c0a0802139a5508d8cff921ab7b796279c6f746b75aa177bb1842a84298fe16ee5eb6bad0dbd1bf0b8aa24c09ee78644f08d7b798da4dd8cba769b05384844fc66e763b98c74417a37b4672fda9d53c21d4ba44fd2784fa9691fa55aba940140df619b18ce4d61ecc0e6e72e43869bd77be8f0f428804bc8101d9aab1fe71eccac325f92f1721b38f98ad6ccecf26c616d720b6ab6dbb9b8332dd91a6e208c4139c220a819c1b827eb0eec6dec2300cfb73322d34feaf05ca9fef1cc71551f3dec2387f1bb23844b07efa99f598ae98cdb2eaa6beb6b10cc33a86d635d65fb7a671c9fa97eb43e08626be90197f7092a00966f88256238544bc32398f37b9d6190419a194f2d832bcf1c8b47bf6ec497fbcfb807c25029bc489347e406e7a2b87e1df710fc81d7ea4f44750775047f8feb207ffd524444774e0e1d203de113436fe105be8e298e866c691f0e700ac5b3a6b51f9da6bd826e2d0fe275c71993759ec06d1d9d42ffe6e8bb5d2d2d2f2d6ca4a5b9cc77417fdceba893bd9ebeb4fbca3becee6f6b72f422630e10d43b69dec170f0ef6f3b22e11f8f382e069a628894c247eb7e8fb529f8738fab82946f18d63142937e1441f87e1291ddb459fd4c357f6b41aeb95c05d968a3e10c7867d452fafe85baba93e9ef279a9e7e331ef1f8d67ccbee0f9d3d1d1d181c25edfd3d3d3d3d353ba314befb3873d8e89619f619bd2fb872e6fe337340f035d3efb6f37349d8591344db3bd7fff0de8e24538a06968d8ccc0127c2c0776e253f6f3354c0403a51afda5f74d5382b81401edb1c741fa93ef3fc1361826fd0d4d864b38e6633f714ce1d2031e0df68f067b6f81b55f6abb933dca3fe0e4273e621e4104c7fc13943fe2a4696e8ee873638af4da8ff2cbdb738f33ffe471b247f9526f77dbbe7fe3b00d0a96a7b739893e37345876e7dd62d09c1bb6c9704cd164ef2d0afac59f84432f73baa14b0fc52faea1634c96d0d1e74555421d4b47b50413dcc529b27b091e618b43d88a98aada330a06aa7a2edcea648f4e883ecf057c446c175a224fcb867eb1abe762a463d9b07a33fa8d003a07b27f5c858af4581ddb44c78c5c607deccaea581dab6375eccaea581feb6357d6c7fa64ff37d2e917b7abd56ab55a99f4c82723ec87427d5cc334c931313131c931c931c951a9542a954a05fb89e01345f84411becf118806b5cde917947c331a479fe742092de3e1e8847e712d08cfbd062b2d0abab80cecf59407769e46e0f3669438e1619bd32f2555a55295a828105d79cc14afa2e8ca7637f9b2195dd9f79da6b25ab3f1dec489d28de893e364b0263e263d6e3209f19414a9d4468e2b29b22a2952247be901f3b1c7f011d88ec5309112ec4c56909aac70fc61e353722a39959c4a4e25a79253c929954aa552a9d46867b433da19ed8c76463b7506dd68e726aa22505cb58c97ed6a05a135cdc07654b55a65ff8a6a19aa2a828e896b68530f949938fa4c4ef55ab4c81d5569b566d6621c874d7ab2bfc7d5126ca7a94c82b6d386da72e0163a411717d80b77a1221665b20a9da0cc7cce46dc994c262b2843551077b571672b3659e18ecbd46485eb09baf8479f2862aabb52d408b6732cbdd3c3893ef127469fa7f54099ce6a3d98112833bf47833ccd73a5341594b144c8feada9de77572afa5c3f1ed35155fef198ee4a5da99d1c6314518a4b8aec8f49558c22a6a2cfac794c148132465a06115a0676b409da043a052dfae4d7137d664755aaec035da80af6e087fb7d0da248281055551fe8e2fff961935577a5a80a33025dfc291d6c67b24a65efee9918c953347e4c6c3bb90180848c356fe8e0ce4e0ec2c9fe4f8921d9453844ac962e16794f091356b3fad877bab3f5987eefb770edc6f1bd7bd8de6eebbdd721f1adbd6b043de10f9a2392f7fabdbefa5ffa8e9bdc95a8d879dcf43e6222fde21862dbb8d62136be28e59c8f02fbc34dde397c1c206e823c50899d221ef37aa795f0987e8d1fce9fd460bbfaa7ec43a8c8dddb793b70470d36ee5418c41d2a72d7f8e564f78eb14868db20e44c27df7f7262031fe2ff199f4f04ccf4b9abf2ad71cffd7c19c2dde4a6c4dccbfb90cc4079e173f7717703e1bc2a4fefc6fd43712350f987c463b85751c1cf7a1095cb51da4538ef4fd76a26862637e549b773ed36ab66767b874153ac92b4c7a0f043e226480afdec48a49fb87b4832a4282bfebf5bc6fa6ee54b18c664aa3c0ccc3214dc5514946e7e858f82f2256fd2f98019e5afff8b05c1aec03cb26c92f225b88b39f4ffa58b05c19aa4fc150a6287fc984df08e146c22ff49ffb88b1996485fc2dd033282370305ef20bdc987de351b2621159427e11d524214bcfdbcdccf78b67dcacf8b812def809ff218ccf0bdf55a2910e59250a0e600fcf7a15643c2d54d105feb6615baa4c8ea2693bf17de6ecb2626ff342052de84f4f7e287d704fe8c736f72af2da770dcf7439231ac35120ab7f110623e0d3d46922892bb7ec629f6d787304c5431999d44ad66fb181e63f26ef2272b6f72574edee4bb9a77f812f891e521ee567c89c99fd097137b294d1ed297370597b8872f4bdc939ea2a0a0e012876934e9e5873a1e213bb98d34e94bdcf1d848a110096340b0553e77bbd05f2489e78b52a4bc2994621e9b48e21d2a4fc23bfee546318f2dabe0ff0b7bb943e925ee58705c817dc07cf225787262322734a1303e6d0147d0cca44bef0366135c2a296d0f1f961e33b9312e8c49c9b706c40bd26f3f456fcfdd8e47e61eb6a34cf8baba51ee43f7e443338451e6d7db73fb8be21ddb93364cea786c79c6e96f127b12e951707793519ebbdd96b9948736c33a1f4295d05f9ff23585e32e8fade391438f4229de219f843d493e494a794f9ef4dbed1df4499307cc1d7dd9857690de7303c1d6dc0d91bbeb4398c79649dff1d8f2c95fa497b7db997437ec4d6e8f6ef743bedede8e47be1e268608dbb2112f636300820ba090b11a249817576e797ee723d3ce26538abbf93049582c88171f0ad110fdac6931cb87792153fffa9ab98cf5d74bade6b2ea00296effd8838284dfccd8428526ceb044ee277237618624191365df2d3844e867d557fdda6717044f4364cec7b07f384f318c9b62e0873a61dacf5bffdd186e721c1887e10f82a789e1301a8b8155ccc357b961609264ff172f880f9d459fbd089784d81fc08ac666002b1ad1674fc77aed31eb5eeb3b6ec54df6569b02fb390ed33d9dd36b089872f76061c891776a191c687fefb1429250e86188e4a793dfbff73af0859fd3f2fb40bbf863f7e1f48be377eadecff37f93de88d1e88c7d109db1bfc93ff2bb9a3003926cdde43781e4f955febc9183df31dce4ff42051626e778cc8efb4946898302921d06b683c90ef3c2d4e28a1a15275407e554f6b7c1913e274629a5f34d797fb8e984b23fa0cc8906c12e614b1ddf29106c6bef5f0e8470c0fcbbe7fe2e2b633183153ef4c65d6c8c66b3663466ccca2accd895595876611a10fe57f518c737f04912cc5749a0aa633b5905fbf2037a12a85be531ef6380242e350602cb11fbaa5f7cc6e90f6cf58132f051be4279905c798c11a99248e4144e850cec146e72f715fc19870f77bdf25596aaec9006e2e9035de820550e060c87c8ec96ae5352bef7efe44f6cdde4729301edd69265b73ea71fb19d1d01f6bebb3b76c7eed8dd1dbdb33964f79ecab550bb1794fd0938e464ff97a4ba17f1c7448fc6bbe38b2fbeefcb63eb6abe990fecaaaec0bad32146395f9c71f990c01000218430c2286184503ecd72ca18657c3440086badd59dfe941e1d0b50b6097e4b191f7a13f1b19611c61863fcd732ac8fef6f46f6314aecd9b30cc62833eccfd21e1448149872b669bed46ac86fd3b428840f65667c78332620457ef3657e9d73026f866c1713b6cffcaebb90df7c6849ada63e26fd8542f4677cd6d910e2eb062f65f6a69413bfa00e5809a584504228055682b05f9c066210c2da011bd55d50811675c3f91e0f30b945ceeaabb1f72165846ab0f2df56f8104759133195136746c8eb41395029a7acffb41af12b8e73ca28873957bacdc6ea2363185f16e406604009a18c1142286384105a10ca28659c538918bf4d32bef7fac3e575414a18fb254e19639cfe016c9335463a5db35836e7e6e25f07291f9338ba4946bb71fe2084904e06443360ddd261a7ec8f0579107219522a9eefc046eb0846e78c345e2be526954ee6c4e0689998822e2e1355d0c569b41031d7bf689133fa24c645344434740aca4019794ac1518573b44c02792e5c027933a815da85bf15b2cb535cfd9c388e46a9d55871882543bff895cd6b3709e4cab924102ab14cab81265b1603bac0c0c8b84158e3632821162f5960cbca792efceb953ad02508cd7933a4a42a49237e5716913b3c01572ab348ede023dbe14757c88abf6e4441198a12e58ea2e28ec7481e378d56cf857fcc5ddcc916be5b8e8343cfa03832ba1a072d07ede29a0fb21be9aa4a53c24d3cd93bc9a301d172ae16e46a3a5a12daceeacdd044d02efc3512647f3b5a69381aaa5f321574a1387f82bbe7386b29c6c90eb3a70121f2f11820790dedc27f94d386921ebeb51a17dbc36350ab110d719303a13d096374d5329e8601c13ead9acb632f3b59ada163462a6ff25d5df9ce662cf26841413c5a108f16b4899890d99ca29eca92440b12f5709dd55892d8949862514e50a28df644d42312f588aec888c8888809518fb662c11a901602e22c27b256f4441156b9435c9765166761696d7bcb43c85a1bad8d211b001e4221ad46241a05b989524affa568359485e3fe55aaf598876c3c89027893b5a9167c62b7bfbebb521bcbed3220e6875afc75e5b3dcd0d3984546443d1e235bdc50466f175339744f1e5e5767d782987ff2ad5d6f04ca9460c808e9556a257d8af41dd783004c0188285c55597ba55cae688826443761bb2b656bb52ddf5914e96b8f25d9af3d3eb99ff041cae61ea09cf26fbf425107a05cbf26c1f6705f1efda5d560981515f1181616aeb3cd5d2996efe131962b2a72453c2cdf8978b2b3fc8c8f46cfe1aea2e014dc7128d97e6b355072fd4cbfedf6f4b1947f9a7dac51be6f50503694ef38cadcc47d77a5ae54cb9822c863465460270ca7b59a35aba13c776f32ca6b5abb09059750be73d79251f0bb9dc206b9c9734adebebb1be5cdf49d95b77f2d335ad955e6a694ab7eca8dbd424179d368c5c36885f212af322d88cf299f92f2283f7a2ce5350d0237342b8fbd6c849242736ab0c814e5a6d1d3d08faef52997dbb6afdbdb9691fdf69c56b36935282f4a81b886dbfb32965d227a6c9f690b18fd76afa735ea5b6cbffed31850df3eb65d9a4383584c516ef28b8897538c783905d32cdbc972b220ee8204db8d561ed3d95190c7ecb05fdf7fb46a1928ef3f5a43cbd8de1fdb2e11a2ed53de5e94fbb2a62d60fb1a94ebb67dfd1947b99d6d6ae55edb35e2658baf1f7fb163a8bbc9a588b324dca403db6ea2405ac6a8875cf25d0fd7755dd7d36b2db1c13cc215c9112c29347aee7e9e8118d6442c7df4bdfd41184b356486f9c29d0dcbeddc4311321721734751145f47dc94ea97ca841a98904929dff990493032e925935864d28a4c22b54c556d2d833ee9a393483fd26a485505652e31b48bbf0f56086058a7971ac42277576a05af940a5f17927e3182ed248fe4f1982e5359d4122e87784c3f41049dec2f7da04cd36cb9933c924754c4631a0a2c3cc6daa04d71871383e5427616df89ac9085641f410db23f8b9f710bc4655456bedb82a8605b57b0bdb42d229193afa7b47b5264edafcbe3ad4641798593477f9d7c72f76421289be47ee2b4443e4d714a92551ed3506c0149f6914f0782e4ed09239cf2f56d2f26dce43d4546f73a62a55650e64a824272baa4c0b097d12fb9dd4d2ed1a870937b4c4abe4656befef5f56d9a1a032e7c39b1e1cb482d82dde1e3e58ac44d45b03bb6af406eaa44b0dd68e550864a35f285bb23f2f5d7909145d92832bd7ec62d0a49a64f37fa3195caf427d327fd75a340d180987ff2b188bf552eb9b148e431624bbe8b3c251f870cc176a3554949c9d720d8d0096b415948ab71fde83151361a31e01a8dde889747b8240921d8ebb5a0556e19a3f7c7aecbf2a3fb720d824d79ecd21660b51a19f6e9801279fbd13f8d01db1d51518345def068b55d515c235ede7049126ef2cba7af29f48b5fa9256c575548e4e48ec75be592d71e8bd9c99d29a33c1afd6b99a6e9b87cf2974f14f49e3cca8b9ca8aa94f795f7bf8cf8784c8faea73c4c796493af1d538a3e2502e6d15fdd4dde2e26ae9e141ea6bc5ddbed7c31e13291c6e73def96a1528dee889cb2d51fe8e23c7c277928eae4a28c469f47a63cba469f0243514db3614a730aae477460e95f4f51a9767884a2a04c1e610849150896e21df4477fa1dc2ecb278fd12bc240bcebb137c227273bdc22baadabaa2262cc2996ee2161f13a2d89ec3f01f03b3c26ca3400acf8191fad46539424e1315d44a5e54099873b2e53e14ca593fdb524bc2ae1da1027a22d31c2022a77d714a61fd8ab22a17fa520bd52f4c2555581ae54553d1a875464771d7cefbd8edceb07a2aed495c4f31c49bd4cb5e25e47dcc5adf5a3929211a594523c1a5deb4bee0ef84ac5d415b2f274c56a35d663d60d8fb92a7d1d50c6e4e9f780322b4fff079451797af2f4df09ca947e05b52b16997ed792e9af64ba65ca0333fdd733b4a0e7c26348bf3da5b8e3e12becba37685cdfb58f109714b9bb5255f533d2d182de0c914f0ab68f27e54bb4209781fd920dba231e913c2da344a4d594608a52811cad72c888c8e7cdb02c2829229fec2123fe16250a19c92eb2a8ec5fba2b6e89b6bdc9969968db6f5a109e4742b812702f6060565e45e51f8dca8a4ae94d5654de69bc43a2745f13e0e49f5653d22ab89b00277f52f25ef21d45652520219f7c13cf51f00477dd4412f2c9c78801036332fd731c0aa63c16b914ca4d3e797fee76bfa09ce078847421900b4b4618a2ba9842953ccda8e463aae476bf8c704cf970441341540783647f8da2b23f96b228a66935d6bbde0f47dce43fd3c5d495ddeb478aebc80c6c1753f188c794ac4a46f23d218928ba8c7f77cc0ef781f5ef1ca3fbc3ebffdc91c80f5651c58cf01ae179e2d7a6f836a0c398035491dc5084802797e4862204467224d2e299e658add765c999f87c70933bfee1e11f288deea6f143f654fb8cc616ac865b501a31fe0c0d893dbdb5621afd6f86c6eb4763a67b7eb8f046c3639ef53334ba87c60f788646f581edba27b6cba37103872700f534b3feca14de49baeec9af3506b4642153fee02e3e53c476f5517901f52ade0e36fc6efc022686bf7e2f623c4c42ece3e5d99debcc0d9826c134d08c1ca68079e1440eecc8f4aea90df67df72dfd2287cb7cb7698da5603b18cf302f62cc784cfc8186c774a9bf7334c58079318a179f606bbbf4f78fadbd9a68c09a005c8f490e51702b2d44ef9f0dac7c52bb080205882bbf1fa4603baec71463a585c7f8f73bee7e71a90541dafaa56dd77671699b89b0c9ef473fb8c412f41f8cf7d8832278a377feb33fc2f797fef123ae6ecaaaf4ef22ae2f7b2efa6bbfdc1087faa5fd4d876390431230a17ef11d587fb863615e0fb0f9dd22c2e6c5f9e1304e0e0387c84cbefaf56b91458f75848fc6882f4e0fe687297ed3c7f164ad9c9e85dfb37193c79808fd873fcb87887f9c3aa8dfe6d5bc0fcaf11df3857dccfc5e08f6339e63f67de325e255116a0c654a37b49fffd7534aaf6bdd8655470e39e064ff0bfcb00172e16e887c7dfbf0be722ba616301e435ffd97a32f60f3238767ffaee8dfaba28a2ab290afe863e6d047cd46aca28a2a7ef285799872481472936fa5f835c7c7e6fbc77013f6ac767777777777ab5ffc96ec19c7bd6185cc1fc2747998724c16f29b1887bbf86343e4d0220d837d5a0e08abf54e22b05ddfc0314435e5feaad94889620c4028d5b8fefd85330c98b2106ef2771f1ad8f4b2176ef2ce843937bd0f9d653db596e5fd57fceeab9bebcd4d6e6decc05d3d35216ef2c330396cc98df766c4f77f66b031bceb23315eea86c7c847fd78dd2eba3b0262ef97fefeee8995a5059ed3f9c94f52647fc7f996170e848a3e7e4848f676d46d4b4c36152a1289bc34bfb3ccd1791fb1efe2377eef7977bfacf1cb793a2f072375773f9dbe4f27daeffb744ade963ce9e944fa5d7c9da7e326935393276d6fb26df04bf4238d31b6b8c9fb4baeebb829889b72dc14e4e5b8c9ff045156c74fcfa5701cf79315ece7ace2bc9cd8396cb09d6fcf234fee87571dc7adec5848bc1b381ac1ecd11107268698402799911226869d5f5b06fec4291f3745218251d8e793f25414299f58840976fa3461f6ccc422aad9d33f3e3e3fd3482c7203079c6cd00165204df70b0cca500794a10fdf57f03195abf9035d561425a7904172357f22c452252da9aa98c320391ed3c9a06ea2320a88dd5a6690ecdff2e77b10054f10870898212a7ef73044c1d309a23ca61fc48128d80049678f4ff697a57e5a24fbcf1b1a23f2e7e3903fbf7fcea778eecc9cc9a393fdc644411788e78903fde2df32a89b335e1974e7a95ffce12eea58788227b972131074c181ad993b65818e1d558e3800c9fe17a8d94a92ee29dd98dfdf3966aced5382e7ed48f9761e8f03decee3f11888bd56cb358f9b76fcc1e6e977b26fa7b339c7a9c5895c8ef7ba9aa3bb3f179970c0e0c5e11cc63b0cc721321f7e0f7b7dc48c45dc7d9feb8f5fb995df11f1af5c1903ae15a8c4ecb5c5514c199a110000001000f313000020100c888462c18044228b52d30314800d92aa4e74581b88418e53ca20648c010200000000020020001a00aea479b44def00c4f69b254f7f07edefe4d0e6df81562a6b9d4b33982e2ab555d6cbcc582600b5037c599b4ae14bb5fec30c4284983bd87633526644fd3e7f3934b5640dde458822fff963ebdd9b2423ee588af07dc95568e7fcbcfa66757f4ddbdf60b394ef4417c4cf67526dec96288369dc21c0fd0cc3a65db381ab449cd635a21d5aa58a9fa76eb5911a086d6248d500144e2e7f67e1143def56d1c62db94c266a6fe8b568249dd40dbaf32e9aa0121f87441cb6c2cc76fe8c674cb770cab4ec48269ebbd8a60213e188c7e2901b2fb4555de642fec5844b19460117a9deaf076568f85cea80331fecb508fe67a6e6e80b4b044fffe6615a86cb219cec3dcdea180b22dffc8b821dc8e0c3e9d2387aabc7dfcf87c12979c1b947af74c4c576db60ac58a2902910acd6d7b6da41fe73500c1865c95b3b0f834ad4d73f5849a0f3acde968ef9ce43a72efc283dab7d5aad8cd41e1c3389fdfd831e1889c905a1776d0e5d51eae8272cfcf7ae4756cd97e478e1807222b188141cc8ff3e84abb00dc7fcd6096f6e6a7ae9ef0302de0e889bd24a90fe50cda9834ad5ea46ad5df55ffc867ddabe4fbbbd915fa68aeaab9903263766278c7516a07983b7ae2d15a6a3ee87ed13473f7ff629b6060af1674e43763e6ee2224d03a7459f63e6bc19810e0e94ea4e3dcaa8358c4367ff435b8b5ec0f479b446f3430ca929c57b47d066240880637596c6a68b45d4f0d89f1b90c4fad6e684cd522da5ebbfafe5b4bd7b8a6b1970923e6f13de07e5e4007383e8d8f8a2deb93abdd8c76b6cec0f31e009d65fed9c44ef9c161954c1730c21a11335923ac27738b99bdadf0614143a06d6e1853542df1dc0148f9426ba0d61fedc207709cce0200f69eda4c8e0f31ef03113b28c61c7c4b0a973ad6cceaaf48b6e81a5470f1f2f720663b95c36305b3b401e9a53e6b17f59c2258cd0f005522ea613573869e9b74b1bd2746d3dd21ceadefcca40154d1daf36f4c824979ceeae92edb8b42630e793959697d318d84aabca76d9780af359e04c017c4384674fbb5f20777cd18c64d55cdbacc528d5d1cc7ba6b49a3a11e6d7d933c7444f503854cd33453b4776844537b71eeeae1c5f1080014b82d1ae78a4a14098c4dd1b13c4cd52f3d5e7c8b9d35830ee86f1f1c23be1ca11f77d6fa69b9d8a78a59cbf3fc924b810023d3456f7411d1f54fa41c37f5085552a9f8fae0e0eff4e0ca092e7743f104be97e4094cc4b018fd56c637f8f2a58799a570d2b8cf7ac6df87b2f86c56781d6ef41359ea08def841bff2bc1ba90b28fd810fad56852f08a1abc29c2fa467381a2c1692eae9ce24d72ab70c3ad261c7f93aaa03ca73e14cde97c32aa85293723d01d476c9858339326bac3f5bd708fedd644a7837db39881ee4800c4df9eb728f97061af6a63326f9f9a5b1b47e681594ae3803a98f0144f2a1234d530edc244acdadb19cb9dc57f3ffef5788d141c35c4f92f9d4abfc172348b140a883039d6d6f89aa0b06d28b1bfc79e3598393fb83b90edb4bb751a436afce4e59aac24b4d0437c808338d8bd8f77a1d4182b1f44e9df1f7aaa0e713060cb5327cc082c4a4a3ba38cfe2a5c69961fb1fcee88aff4a79fe719cabbd59e1448a8e1a77ccf16f2e63466d3c096b30e468f1e1c9050ec5bfe4e2e56b4bfd53afe24e9e25f406afba066ca9ccae5deb6d0489328c6d48ba95b56eee3ad1cf3795c2b829362fb92e119b2af6f8aac28b301b4510d0c7476341d8c4e6c7bef4381a8bf0ce97182ec8a281a1d3fab64253740097349f5f59beb4029d74aebf37768f79703755e8d0c47efa401080e992000582b72e4960b41eb1a8770c42270a1cbf30fb1546aa1302b465ff049f281f56d0a891018f3ed6d5d7bfd5c80dfb2b2d45fad9b34c31ca5d07cb696002555b54f94e3dffd786bb67e73fad1a19cc5557db029d55827f2b97d277a3d730b16c0198d4e74784852b1f09b62285f96afe000364672a7be1dd72c1a6af360ead1fccbf6a6c0eb5a4247158cf1f234a5e375dc0cb213d474049ef84ac9455795883f98af6bbc9af190c9d9cf3de8038aa0aab2ac7638ca8ae1e7d5f8034e6c38cec1e840b5069ba7edefc0334e96ae3db18cc94b037e460666774790653481dd46196be111a04d1d108011b64ef13a9a107a2e0460db61c8207c413c70bd44153b7a8e9eabec480c41e7b2370069f92ced2ed04670138388d9834ee34b7c2608bf4e13b66033c70fc96009666ca0882ee0f26cdf29601f2e8046a2b2aefe7f3219de62d59e29b260f7da4f00b02456ad506b213b141b7e52b21d047a0775a2f41c1b0545e2ce9b64e6d6408b3b8d15357b75c9b864515b78d3572566656bda5593013d94bf9e74bce95e9a6655ddb4bc92c167d15dd697d7f0ec1d99a59e2ba12b124cccbdc5a1e84adce43ab7c514c1fc3d89e73676e69d64375c0e142798800ceaad47da39d15cb2b8383fa5d3b41a5923f991f7762997ec1abef1d035ba50b7d9d4cea5c0d24298e4ef3e25906f44647d827cc9636d61574ca0205b993388c2397bbffcbef31446c4e42b31a1f4dbf7aae8f7e0ce79d61492c82c30ad211037cb68a2f960570003b3c7a08a3b2188bb3ae979eb7f577a38ce9f640713b128ac8602a5d28e546925685f971d68f69697e71a6760a286aa1905ca81a998da40195a1d88494fcc6ec199eb11490a8335b178ddf37cf8d560f8d4e450ab08f8d73fa5a0ce3053f439acc8927d456809cad635e784e7e1e7fce9540f293c8fd55339584273d8db3c4f8d160b8c625598bcf34978bb7dfc450c0ff35f66000022717710dba5f0d140146b2da4edefadee201551e374a18be416596d835b0b8fa77e0db25ebb6d87367ea18a498265ed727bbdc792f6d9ac165b178358a74bf91b33c3aa8d3a031c884d533e806d8319cf994ddd1d5599fe9533f03a2ed24cab0d24d94663ca1e0d4d62c76fbe66b7662f2a6b7ba19408369151d1e1a4b90a861133c6d26ad5a34d78288e57cfb3c13a0a0076dc8f182bdb90691568f6e0e1fd29a3612c11c2ad67484039f4a5865001709458a7a2915ddb042406822e855cc0a93e2eb7afb484cca4204fa911afc8da54cc02468dab707ce03867f7d4705c80d2c5eb2e1589eeb605cfe3bc1388e3db7696708177d2cc3d8c587f94ab489ae9a66f71fcea96441630549b551e947c406d73e859957a000d7438a8c7ac355b3cf2d10589e761d0efbcdf382f695cf0f35a6b8bf206541788386f43f8dbe97441ac5fba81d706e0ebc7960d6e1c92f75a51d0656db29a60e20051715f4d7f772df77131b716944d8ba342c2f064719507995b35ded3ef6b7d4b909ec070275d2426a7da3e24184a92b7ca4dbedb88602544f8c4ddfdfd3f09f8e30b291eb8dacc6edefad9d3f91b8e784266f3dd68aaf2c848d65c2229460e5cbbd473b96dfc3dbd6364c40235d140ea73c969eaa2e45a7e65a06aaea307981c1514b37d338f2db43910ae88db96665c85ea95351bb4e7edb2c3a79ac3f3818db34fe850e53474f38644a094b10c01b634439f7272695194c48f4e81847d4a7c1161de37b425ea69027f6fb605d315f9282482ef9c3640f3cf97fda0f9864e9ca4cfadb1f860a75088595c3a71b205590286140e2d1c228ded288369f357dca1333b49fa4dd57a04aa5233166b32f80b5300f780fec91e30be01f42bfb7f2d6fece4590236ad9fcd4b415d8ca6d145aae853a30619c9e68f415ff256b9a06a5b58df298ca1ae08312b0d4cad2dc47334b81cab66273893c44c827b41f17aec53cbfc457c12d914a171ca1053f4c2080a7438ce6c0b40c1c4d3044b378cb62c1c1b4d2a51f41515ba437012965c26d359b1613b0e3766f3e011de1a5513d209808b403e46a5d2b9e434f6d2dae510a8b3c4da8b248da2ffe2bb19e17ca4e79f9e02bfe37949893f1c313bee54e0fd79115d90cadf5c5775c15b29a1d8575f9915547e07b869f8f5407a2d3cd4bd025c7f70e455fd423a1629b85e07985fe8b7d46d68e0c4ae67060500bba098a66f4ec79d72261b7607fdf1f205c61dd5877b9dc2c67ab7392fd7468cba3cad7363fe7609f56777c2573efa87407fb2c7f1f9c4d1109185153c77d26c626d912f805db00d54f421a69913980616c7f9ed3c10e7c6a7ffc437bb4b817f569dcee4e6b48b4870ff8da116a4a6f40acf1b65f8acc0c486b1e490ed6de7f66b6b5b2eb903644fa31fe8a700abf395d3081205b6fc1e72150a8499c6f5d670d807e29dc3e0e0bb166b01de6fc0113aea25ffa221c1ba011bd59488cdea046d052ce498c06135ff0a12e7aa51bb4d908e15496336552276c8a117920513937765693844a064ff7860fd85032bb9d87fe20a3a5ffef01df328153fb6ae5a316b45ff9132143a831e0cd6e785d18f370e7aa5132aa7d1d0b853b2526547abfb8b6162cb2f8cecfe41f5c14fcef2e51624d10bdbbe476828bfea4b08aa81c9391a1ee3e1309dc4ada97f2bb463d6ebbe31326876e63a6fae3e627c41ba2e6debf511b2369af2da550fc758ab07bffc3f8394e1fc042975deb369b5963a065bcbd4c885f1465a1ae1cfdd1ae9b32b10e16151d63aa01bf46d44d2fa08a4010433d82d0aa17be052eacce0c95aed848c5348a87024c2938cb32b552b60226c34462e1e0c28a781a6077f1d195ae3ef1291e9a53d4c7753a8abedcd39a40a98d0257b9ade50daa122b1862a2c3baaa904ae2498ac9afa1e0b188762ff56c9f55f7cc7f6a33c4a173b3f15c019793797c9ae819aff2e07aa60f3baf9fd9b5bbfc56ff50f03ddf0f42d7dce507e8e4787fa7f00e8f2c5409f24d137dc26e46392023939a827a476552175563dfdb6b5bc6348c65f8d7712a017a32ad764bfd18657a07af2157c0ba91a235fc7a5142be79ae6f1a1ce601c27bd361c4a073b91cf282cbcf7aef9222d9b86c85c10a49dd30766015900192e52cfd9ec54ed3c2058895bdea330897e6d02d11ab660279de8f7efadf1c2acb220cb8e1b4b2881475fc64a144b46c5ad604ff322e85e7eefadc6b3221b47ed4aa2dea780c40004097383f27ed8e42060af1249ac06633c8408d7cdbc478664280367d89275e6b1f9a4afcf9097840002e2e259d784bc6896a32083bf7a3e78f905a04a607950a3000e215742e5e8fdb7738d94eaf42d5e27870b850e8fffdb3accebd2a4631c6ac5db458d55de0b699126ad2014aa93a6d102f78870ff32a642eb5701fac1766c1a6a5bbe48dbee3ef3da396d90c79a0c22d317d9171a353d4d7ded8b18f4060394b2f6554eba382de6b216ac3043e1504a3d8496b9a8abbab276e20d7b66d9aa0efa61429b8647e0b9be88086ac65f5d44298e11c0250b1a9c604c359a75853ac9ce7c23b46f8bfecd9d40d04174734900e84817542d21e1d6f8079d8d70a84d697cf40c2f06426cb6c57d6010bd0ea624b096e398bbc9f5053396904c68ce3af2517395eb803bf33ad277acd3fbb61945b183df303119556a400709338f46f79758fda4feab8226d8619d326005fcd162893a99c955431fc20a509e9490407fe9dc2b646a4406d36bac5d0f2b67eda9eecf4ba3c3131f104509287fe9ae2752c7dc13369e59460ce884d0818e19ea778d1a4c8d5a4b7331c7d9b9336221dcb85c1876eb49a52544ca1cdb7d7f2983ea755ee8a546443d32ec36f3da34eb4170226dceeb6c6b29e04ac6267d75d823d09bb56739d362a4771dfff4b626ea7d6dc5af101c4e99dc63ce9a7911d345bdc9fa0d8b90cfb87500226a983b85a5169f619ef4dcbcaea67c2caf27050a7488a2df5a14b0c770fcc10f770841820ae882e1f7d3b6994ab60250a6d863471e2e97154c5a67c1f7088de0f54cef3b35ef1074a0fc7a879c9393791f83c339b151bc8264bd57570e1d48cfb56592545d8b3f8735b7a55bcf8073d17b2f55c3b011d369c8accbce8cb3bcdff0a99dec027828f08ff9badd7835b7702d74de3f989b1fc8c27f944e835f685ecbe42a0453915d7c76cdd373f65bf2955b54464333f25710fa3b227f2bfd2b39000833ec99806068a3dfcf07c69d4967da8ffd8f17de53bde6c8338158ca1e9da8da565d64378d3d797b438e1c9f73bb61cbfb3dff66f29f803d0824fc6d10c4d8ae750e1f6fc409eca55a8c6d2d09fb5569c89d6ce3370dda943565049b4cb0d8e23c2545cd53d70a35b03b7b6918c63630acf7b7f4cefd0a760b639912c445686e021ccaa471513f4109d35f36b3887eb2f9b74f2d61a54aa82ebfcc6fd380aa0d05fc4d943f0ca8aafa49e88b7d837e07e9b3960f846b2628fba4b521dfac3cf99f1ed8446e49cceb8256c46c6970b174dca8910d33102c1fcae979b4cad5daa701e4bb4b162f57133c4051b4a521ce389e93caceb591fb308c619ecb3b654c114d6e11f300edf655bbf944e1961f2b9a6c924bafe80803c6875c84a7febdb66a64295414ee00090e2707a9246f4cb4b4d4f82dc4a97ddbc6c586eb35ad19dada6bc92fff2bf88443d1cf03a0fc13443fad5fa9180c645f1af2204a39536b6fe61059fb68edffcb81163e2132c16f3c627e7dd27b2fc984774706c72814de79f5eba520ee939316d7e49dae5904736d4914c1fa2fc4ab5b741fe37bf9df0d9ce0fd889c87dac38c0999fa668fb5050373239279fe899c70e62ced8e89c8cf2ed1a7c15b8a259d6eea003be9176ed37889bada688b3579f40666e0f3d0f493ce15d1a4604c1e0d5290ee64cd0bce2c1be22e49d8d28a05a975b554f4bbad840e3b83598a7e50618e64ddb829e0b50e9eb992440fcf219cd0b2da7f22aa648f6682d6f61f4463465e1bf488414904b56f10c243d0cd02d3063a5e3a22112fc2b013a24788240cb8a2fa0dc5ade38f93fe078d3906b40686ff4158cd388910934820b60225b1591a0961ed2bc22f73c4106ae8aff9d619c9ed257ce3581bfe772449f0c4162352e4c78aaa79fa5100992e8ace3cf61800575be8a87a8148bba303d6619e1fa7a8a5cb30ff9cefee3cbb25b868afcfc85a025ab437bd47d4e9a657115a03e10b8c6d295654987be84916fe5f36f48a5042d25e7d71555ac3870316402ecc0c960a190f2695708429a27323ad84e89587cd38d2a076a039766ece47427ef456c46ed047954803e591c0ba19ed719041c92de4b703125ded9bb6d7e73524a22a9937633d588c8cc604afcc3d6146a0a34393113eaef121b96fa3455441ada15b22330139b6fef06d516256652f64b8182e1a601628cce9754dba6b862283d2baa669b3b14a3350705193c399f26f80271d5268decfd6688424b3043eba2d33d02708099c9198562da35529d78fc2fa66566f616364cc3a233cc24a6445357cc0361cc6865aa8ea6b6d6935a0ad00b51ef12445214baf03e541a1d92fdf6fd276479c331bd5ccd5ec44c385d9f5ae8b8679c4d9423d82219201341ed18d420f2554a4856bd063421d876e879247e24a88a1094e85f41114c18cd0b72d86d2703b91fd0ab475cfd5b539d09034c49fb0f9bdc2c99daaa96db0c348720fd59791f2aafe96da295f42ef6405095843c770933be79709bcc945f333a6a0c2e7dc1e2a7478cd6d6032418e8b6b04ab0f6a88e6fc764bd620fb4a30e1bd46875df30259fc71c6a5eb8b92b560d75c4f806990988d148da5872a296614ab16c71013341a30062188351032b3b78d2752c855037e496b3953020abfd343f084af8202b296f41d41c68a807b0d9eaa6e3a0dd0c5768f81e62dc54a5039fec01257224a560e2824f202ebb887bfadbaa6895b95892df7832ed993f5816b5930e5f9c25ba27134ffcd0c4a815eb9ec415ead00300630ef31a4210d07833933aca581e84b7b000db3b0288882486f9f0c1a05d327f0436a58b25fbc11a461486c5b0ab7ae7f54ffed4f5fd17fd4078b70ac54fc5e7e545aeeaf8779662bf21b35bd0abf53bf787a6fd77e3b8b4ca66c5018baa6446987f6e22fc6d636a6739d726d5fde618a248f56bcb81a913ed0681ed0535b3cbf4cdb0fcfd8ae681f182326ee0070557d95d2022a15bc9a4261097e5e935ebe7c8a6d6830d161bde679a0701e50ff8a15eb29419af79227ba40e4bb59d6fb95ed1b532c354606ae08a4418f9ae43d4ee4b052b4911bed6e47b1bb82989af28ca97621bb4b5457daa741e69d30cdf052bc78d0459ed3241a87f6a84a246e690e36b2efca307376cee6cd52ff5a842a9df6e243c6344fec54f4fcb75ae7eb52b60bde74f8005861c4ddeceb1226c473c4a6fa26a72fb8e4a695910966c815cc994df54795ad58a4a611112005ff0d9abc930d644fc36eff929942e6bdebcab41f0fb83e48c3a90f5c71df01391f0bcc269de8639b9c2f31e43205af1345071bbfc1acefb8040688aaae146730fea057e1b17d10cd69743f8df2979288b2ab8190992e7bd2e973e01e1a6f6261820ad0a5896798fc3594f10aa01cbe4c998d34fa672a98f3cb7330b6d1bc1f88dc0553b1b3959cce0b469b81aa42c368f385f42d3d019a99daa87fd340f6dede2f98c83eaa2b081e32dcf5196bb3560fb699b3b3470fe29a97b8aa092d2a9ca91ef9dee18599d372770edb483b164a0570fa8835d20ddd50f1cc3c18b837cfe498eeeb7f7be3bc7fdde6b42e3f0441ab64e94bc5785dee6115c521f76ae6da9f090a60606cee4852adb90783bfaefb5d13adf6e6764719e57ed9c4acd15b3edfa8d506c0e49b5a9cd7e3cb63765d95de945ac3227e484b609ad79bd36499553246585a7aa73df58534f2467db8c3efa48940a50ee548b258bf40930392a61b3d71213535b43d56f9ad6977ad3db6f27d0e0431dba2c992874688c8ab2a7019bfa71fcf8ad7a53afe12fd3da943e205728fb5c19ff9ce2e60015b945f62e0ae0dc14700e3636ec49a2304e0c2690b896419b825b68b02374a627474aac86f283d8f4db01c5121da881ec788b39b15c1f38e09e790d48fa514d6665e361e15f770aadf80a13474a421fe437cad863604d585a30b08ddcbd16c44510de65f2c26a0bf51c8db009a9c54207d268ffbf858003e64ade88fd290bac09a039eb8f772bc3c3ac41e70a50181ecec6f1d9c90f6ff0e52c0fa04a3342ed880e38b94755114c0a73671f1fec0fd95a4a43819eadacfc75dadf555a37953c48eab1dc0033dff6997c9d971753e860e7f3794ee91e2771477269fb40ea3982e273f785bd9d063bd772077fdcbb9c1cd60c232254161033011d532710583b3003a04317c96a909fa57292717b5a92289ed863c33cff0fc806725a1c5bef24ba96e1ae32edf43fbea97ef7b8902142980b74bc4d8ed58c3c6083c56725780c3450d8cb5e08a1f3dfc592c9c00d5cf5d23d599a6dcf02bfec05df031cceacac3a41e20f26920b1df8423a4122687cace7019693166c3a6a5f3866ae3e2d35c37784684e8d54799375d42818bdda56b8f49b08d1a7c1b1d61add016c146c315594b78c465709f994d250a20684934a1a03fde06649f710832870a3ed0c1484f623b7b0573d5834282ef67f4320738fdc2abb1bc0aa558cbcc516ba059aeaeee4360a1b9f9f370c2b51cee430ceb0a57b2f06db0a9658da10c0695afbc2223cca0a6613d8650af106070a044aa0a9b8757c2ff741ab4d7ebf3637beb6f381a3dd0f01370d01cdee045e4a294d59473de54803e16bf989fec24b7ce0bb7bcb3b8cc85ddfc73269353a447c9fd343440680808b8ed8321c1a5ee16f946398be414c10732a93b7aa2bde47ce96e6752533e3d0b2e71ee8a6bd5b741d971ccf4cd92ad4f681a3b18b4819e045859dd0ea5c29d06dba0182865682ac775ce4847c034141a638fd4602297d44f34065ad0be9a0a12c657dfff9faabe5c9e6d0a262e335c674fd481fe7becff2a2d6eda7bdcea5b9ef2bd08141abac6c101e1e4de23a1034aaa2a2265caf0ef2227772212b37b155505474be842637e11a87c075310250670b914183605eaf77f9a02d133cbca27b2a5c0d5de36c808d5f0214bffc0dc35d9c5d97ec76e1519e6a5a6b0e9efa5b6e0f7984a78e926d5c57d80245966a74ff323a2486ca61e69a9d9124cf441c1aaa187a55dec7474b4269b937f0bbc3dd55b3063cb177167e9090f0735eb53e909491af3aa5da024c744e56d47117b11772f81465c43c9c3f0c4c223261e8000255c8da8e0c374c3a3b2c36803f2e22948f7f9962998d5221ee4cb61656b5a459bb2410a4e7f6bb5cc682e00602b3ca3cd1dec7006db28b556d85ad31cb2055428c1efb06af165e74028b59cb5f86f2a5dfa4d22929f4621db931597d74883e69a6bbc1bd07310e6b4ce9f10caa4e942ed42936f88074337208ecda06075538401ca5eb28c4638e3b9ff1d090ed21a474594135c24a5f7afe0f7687251d9528717a68440f7ba28007ef936696adcdfca8ed0cf4704dd24117bd0626fc3dbba1dde9bac4098de4f17fabde2da8d327b76b2fdf4dbf6f9cb8e15ec6ac0745a1f6f4909642ad24840d016c28626230e1975c98769fe803cda0ed302d4692dd6f0fe61f7a5b422f69e454c9f8bcffb819b4e5462b5f6defac9740d2cc697c6cd5379e26451b559a08f2a15aa513231a072e3d14f218862b0184c580ba9c8f264741cc601ad6b3b169069fdef063688000e40e5b27f8802a6b56d85d202144f4d3b713afc22ce53d80ed1eb8bf1efa93aa95d5431cf3eee65a900a83d03200f41fa959630252fb3427b71d4ac1b003be170a08cdeca6e77095b287c8a00d68be08370b89b4f0cbcae071540eb37783e41023be6b24b4aa9f977f04e3bb3f82b581c57beea93018898f7471762eb5544c801dbce19ac12f84331f8b0c8ad42f0beff858d608e41651a5caaaa0160d21b3248ec92d3922e82f10ed3897eb642483ad5c995fe28803c41c564c1753d8f282eb68506928b0598f01f5ca7ff0ff6ebffc3edd408fe3f2374133a0d1f3298280c327d7485e8895e9053d8f964e5f533c49bb2f7c2e934caeac50f4f689d5a4b5245ef388a792908e4dce4392777532761ace28e2fc66f3a36ced2ba8ea20bc6d5754e89250ee136b99a7fcda42942c3aa5e0da0e83d5a5f9236d9cdcffa9c9d64264036180313a1b7bc3b1c61684f32126f3a7538a353882ae52d4bc460bbff22789934d6eca3df1ce897f172f264488c8f018d0ac30a19d0c9c8f73f97437b750f052ff76480bf6b5e9959c907461367cca080eb670768e9f70634a42619ac4a2ceaa446e0f62a7e1e0a2ae8188460102687161a0c5bda939c744a894df85ba8c5a0805441307e9920372390e039c1dd2916e17f15582a10b1dae032805844b117ffa85bcbb6a9e7002382444b8e882ad493be4cd65750f383b07b1442fbc6e20333e9c5e4458629b33d2e0e76b710d41949676efce0e3800c9b955835c422e687118aba14ff2a0fd0f47d7314baceb73ff94bccc8b9a3c1aef01b9b18a9a181ac692d971a8d1501add66a3854a8910aa0adc22026736a802ed23bcd62b818809d46d4ea167c696454f1f2e5e097ecc37c4e128ee7abbd2986093c5c914056515d218e2a78aa1d278839fe9cf9ca61d767b1e6261887b818ffcc39dcab88a817bafc16eba3bb27f1d8abc93c57e09bce75fc49b2b0466d7720ebcfe7010ba1767680bb97a8f97fe13066fd90b65b30a199f4baadffc68d9ff50113e325ac3af4775715c8470842350aa7ec80520ef487a30228d4b9723c9d2ee249afa49efda42a588a8ea73f216fdf3dcdc52ef80b152018feb5dbf014bc581b9cc850e99cf75edf8daa36482e8320bd010ab25813edcc0061c2b43bb4ec9b597dd6bc684c845ebedbd4cbc0f0d7795dace72f6720ec54009e1b0412dafc0536e1461671bbe0c3557a32928c8b38fa544e073849844f55cbbb72c44819482605fce42e273915f0bdc5a37bae0866d8600a993fa35dd545195dcecf055b2296d60c1c081cb801fe05d1cd0854148c695c062414994979b3eb3cd5fc8c4ecad3fb13701e6f55f13cc91c88424a8a837d487871985e19650b992e17eb90909ebb35f537997a3e61ad280d189a29d6a81a446ff4e76ee9c9747443f74a4b26a31be37df23e1051b4f66b8b586d3b568cf5e391a9755336a56e5a851dc2048d16e816733356151c43205eebf16fb0324d83e0a60ea841f0eda65f76ff8227b9b26d1b212577cb79770da0bc640613d1803a252b8e66cc714b8fd785d0890cfc1259cf8e530459bd2bcdbdf4199c3320cb8a08f389b3643c64cb82900a44be41c7c9863e8910568b35948274d5b5b60e402fed037baa4aadd8cac8bddb0945d36c62430083b655ec6ce56155357433861211f399176ea7d4e924ede32f1f3f62679377aa5f161ca265a63431cc53b99034ef99266026a9cff0822162d420c9809c6c347a2cdba0a6e99e6478acf4e90fd1cb5384a25354eaff187f8c6ff366232f12501e96f3a8377b84b8e48b8063677fd814de804b414c8b65532e347b8374676bb449fd81863bcee996b5cc322e96196ea7b3e98f3a5773458aee345411e87055a73071616b782018af7752852240f19a63569796908fdddae55ddab4675c41cd9523bd8f9f0573141a95552a076b2b83bbef3e13719ba9bb8f68624166d7565cbb509184943c6b33f6201cc6cad90669a5c85bed499cb51021c3aba8d4bcb45fb5dcd6cdc2775ad4a85d91a8c200d8af225370524fa9ca845b3ed12d471617753d72edc904a858e0b0706cb359229bfad465e983abd46c4b5254922aaad9b17530da8546e4e9bc5ad48e15e7db3f792c58f5bdca8097f8c0a9cf8a8b8ca59fb28de08ec4d529489b5c199ef9e5a03237567867faeb98f6a19cce7d7577189ce3d8930e6ba2c359a095dcf8d0f16696026b5966205f80c8888202003c216ca159021730a5a4185b5252ffd022eda4efeaa15d116162df563a3261f01f9f4e461af80f4e8f03ad9dc8bf5b57848f4d8b5f4f64ccb62463bb7e6e8205c6a7fc4d0c2922642b5949f0a3eebf8634b985cf3b0da569299738590ccb1bf0d139a1f511616e69e22740ab6e437b127527fa980fde5c14ab0a55a8a33924aeaa5f124c80a4ef727221d123a5b3fdd932fea1660111266b5919fa2cb0f412e306c63078b93d69f1ef44203a243263720589f63b9433a26ff74e68e5a5a66eddf89e915659db991af8e2c256d8c8766e673d24b98bb1109e05be1a30ff6d6de7c9117ade89867b3b2e6611af1c632297b07f5d88fdd37e773803614c319ddce60b98afcf6b7072c57d45868ae016772d85a2bc02e5d5291c0a58bac247106bbd9ee09c939d91cbde5c0542d60876be9e10d3b00975f2797de68287370bbecabb188e311ebac2996264473607e0d8b2d779ffc7c1d043394195c9ea32e77d0894bda9dc62145533a45dbdb6a2037989b57aefc6cd037e71f0802567ab9ec7c22a3742b31a3a88d5e963f9fb108a245511d139ea5c99e3c23cabc8073a7593824f82d6d6c464c1e14c1cada0de5fd38959b27c5d27e99cf25b663e3077954b3451838167d19389ec475afe1d7afa1c6fc8b963d1de892652859eaaf551fd2997ff5d698f68abd5e23359e6f802a7db9938a91f7ef6e79f1c2514412cfa7a8d3aff5fef5027e5d20b0b700333c140a17cbcae1d8f8f433a7004078de8f61fca6d4becb7e4d453e0263866f8dd7566a13c4bc5db9723777c083203ce36da1c372100961335f5f662600f1b709f925913154cfd59969513e0dce27ca582b7c43e5df34bbafdb6767acdf6382e52020e1622f0f5769baf3d65c021a8b9f81a3a6edfc119e6328342eb274cda7c80e40c8a093bc3a548b6fd3510160f4d082cc072548758366685bf1eabe067ac43c53accc846c4aa9d217fe96e6d11ab248b9db067b58e5ced81c3d3098aa400ba140acd112f10ac2fab1e7de47998665f8dff9250764e3f3e5147636060d637d51ddafd85b95877019f321b0a78086a9540d4fe8c4828b80219140d2c39a80ca34249ea7edca5f160ba22acbdfa60afbfc4bc9b4a0f792851b959c736a6346f623300b40e5d08b17f8f4ed84e1286d28ccf29daf1c7e8c050a02987fdc1f7742a0e9c57b79cf92bc848dd6880f1de9fcfc92439fe922adc6d2b866c9195dd2969c63c73e01d1990be1a12e70fa4440da310c36ff305be9a602be6e48399de4088733795355baa19985c2376c17efec7ada860c42a9dff5294af02a4637894867c72b1f1473756f6e7b147647d5feb078d85004943e3b9a6b6ace3aa692a840d58204493b3dbe0b4aef2f3090781abd6218abe9d116ffe87e4997aab5835a2b02f42d53455b3b1b23f21eead641d4f8502fb8d966167acf2631f2a93acb814b2f4c2f108c681af8abe2186a7bdc014b25b520112914b3e9b36aae6a833078b6ae6feb669805cce46d02efb905578791db12e806f5ac5735fa8f23933889683721e29ea4916660bcf66f7f4425724045d67a20e5a19ad887a3d5f6d4848b6d08b5cb7a55f11c46677b31bddd07c2a0036db99e3473718fc0af76420f90c6027063cb37cda102ae432ea70d9006d9ca21cdba1695f19e82a14172d237dac7ce0828c24699394c3708117f7ea44fef56bea9f2758c4af6087f4c87b5aa55852919aeb1ad66d0f0e2135a608138dc1d27351915a1df6996324c734ecea0eaa6ff874733f4160f59bac84af49e61c6b669f4a61da79882c61ae37400b03c1f6077b4e891e26860fb151b31a991948b559aba3906a5790aaf2b7156fe02fc20051fcbcb00e953d33f49092bd3f3e9ceedee8a6b5e25e8a3391ca0a1cbd5c2c1c97786883c51e1f4e4f14187adc4862d4b118b07020cf1cad2b13eb278a1a16948db4e44b2473ec9d55d4be0640ee30c76773b3f1d5ec98347408ae6dd6e47b5580b17a8fb9156169e4fda634ee573284210502a038cfadf462e05deee9c639d8ce63c6d7c372f289a7f499822eea3f1cb40c2bf07d95665b860048afe16cbb213069ff438079a65a71628fd0090780b5d7f387403be5d0b2090d28f52c544094f74effe2d983216b78818e7b7035eaeeb2dcf81ca274b374d7144478a17eed9ceaf2fa41ceebd1222d51aaf7dd11dab5a10264e6d28368755ec153ccc9552946e9d9300e1574e47fcc883eee146a1489ab452092ffecb6133729de17ae85ba06f97f945aef98c062ab1b208c5ccbce52bcafae3390b8ec80ccde456e5e52a13700f5225c0afc176437cd3a2444b2c90768bef54eef6a481bdca2bcdd05a80a01fe41b830ff7b400b6860a748ad133b33da7db3c8d77e59f7f205a8a1993e40db8d0d1a2e80a04e34451cee221610e95d8735d9901acd0481f87f69a1b884f51a55066ac46ec6f9ff5436098f11ecfa07d881788a1cf2a560e8cf698cd0ad11348cabefc68d60ced6e4f49ed082a335544a99456eade211b57ef0e481508ef551399c408204105827c325e3366143cd0c3ce6f592817e01911015ae5f84ee3cf51434a84f739484e4e04567d7b034768643f8225ed33d9c3daa3c9af1fff75f71e1b47427e83a3069720648db037ea602966705d26ce7537a0753f4c4e0d09c4b282d315b7546344a919ba0a6302109c6f2bb1f5892f8961fde7d7a85717092aad25ab19c2f36e9e9365d6bd334d118a077e7ce26f51c09788b9ceb2f6890dc9a675511508ad04945fb2cbd63c8851ee1b62511baca8d4982fdeef725a3d454d760b0dcb287528800d76a3c1e210040a88bf0c62aa863654daba3f6bf1ca301f9661cb60b55ee7adf37b0f7ebb0dafde1350c537656aa3b653c6330dd98a25633789b5a7b71a64d48ef426567b4a0484c097e360861df6dab670fad203b54885afb5aabd6c89781c1c277caa8c826f03a8b9fecdf86fd0b8320ad1204f0ea1241aae757048a0bde8213188fe26f97ea64f83e6edbc52c53770e3932bb59d43e0bb348bfe8b237642f6ff18c1706f51de45e1e6f7e1cad942de45400176b90c1cd3055c411fd4281a4049ce1e9cfd029ca4ae799fbb529361943b967a5edc4b91f32d7a70763c57535527d70da0860133ca54b432d9b4cadfb471a19ddefc6b82b9c2b2068ed20447231f5c574805e474bc6002397de1fd4ad3526740ff8ee6c9b29fb90c84604fadf60c0bb241a7dee16b716d08fd7a7ac3b0fa12532924ba3f79491a2cd5e167dbac019c7ec14f6bac89211f02737b4ecbcf1620408fdf9f16cc822158111be079562574cbc5c764751c94f7ab1430c0904571b44a07231170236f176032822c1f9e50121a56d9dc924d2191e214eb0994f54fc824fa62582ed8ce460f1c059461a1da785f4a67feb499e8908ed424a6b83d1d37e32eb2f530fe5a0dfcdaf7d51cae0efaeaffe0e5afb99242cdeebe108be85d7a61eda69e3efd0640e3908091a91f3e4128f8d5e14a7db2571e581a646d2b7e4e5a70641df91c73f8912508a42fc783decad37375db9977bd674de1606be99e80e291dd38184e1dca45dfee9105891e12ef779a0cdd9909a19c1ea5ff8123df591d8e4f0c86ef371ab5d7fe6f52c5d7974e5554d0b7c4ac1bc401e67caa72793ff7f8d509ee6cb62e6cacfad9cd048023af18724caf92d19160a21886dda7280cb0edd2a01b05f242b3ca328d73e276bc8d7700766e41be7c96e1f24ea073b009da7c7784f3ca9b430ad1f66472e76e9efb040f224f2799213ed51804e82f7b3eabf58a2db6572eff198990a925be8a8122befa477d0f6e2b8128f5f9c061505721d440a6305942301f172f93a102d104f66baf59d084ab01710f2eab0fcc54ca415564de20632e9cdd178ff2811d7f8f19be71d104068484a1a399034e6ab2a871c873918a8177999bb344592227d13d6f03db9b0c7a1408fe46576ed192ff505b7ef09fdc6ae40bc603800e33ce529f8ef7958bcbfd057e765a1ff28dab772238696d7890f1084f409f8ea427d07424c9ef653d6bd0516e100c758c8c48271cf2e93b2a573cdf6f4c9d79b3fc843a2fc1716ad6323d7c3151abe1c6a81e419c63f4e525c7c22088a70db40a14f27733ab9735079e23791a14d8c6beebbb12032fa54b93c1480b99226c35e0a0cd896a961a11bbc37baa752162d3753674bfd66dbfdf75cbdd902fca82604273cfc24e3cda98b4b3bcab67e1b4a45999c63b0d371c2da2958525e956e17f53cb692b2486fc6e69e622ee421c0d00a6613df1d22a2d874649819403a2426863d7e212503f5b7b9f4ee954470b2d8944ab19e08e73cb8f227336f9f37a9940a7d94e4e5fe1bf560b2694da5e7d3cb5e1625008fc209b541fcf9281e253cc63344fd401cf173d5a0eaa2846810ade413d60109a2012955a8a34c886b37586e1be243a11127177d7ee0773281dd73b052bf4a493275a8fd9d721089eceb0b229b9bea7a3df37db8b709780f31d71793d48ab8fb192781c223f03edb5912a3c1824ec731953e50742f2f47c9674bcd2f8889ae203cbe75570c2d12ff3d04df990e20b425484594fbc0283c59002778a470ce17833a5066dd8003913a20890209893ac01caa53bc0633e0cbbdd2d999b536e746d7ec92bf2567be1f20fdf8a0e2acb944dd8f021c5ce33b4f3a36c9d6d9ef48eb530849c61e80c9506ccee07e68725059ac405ad8c3bb1bdeac49f97531b8957ce3d57ed6ec04018141b61d429949fe42c975171578319aa2f208c9d8ebb37e602cce46bb1f75de07a484cb73f644e9ee9082237e1c2900f836809890775c02bc4c1a7c02b0374df9120c120a04080516c602d42eb0d779ac4461c3352e6710844904c1be9c89bc99074f08d557ed1a4fb8187c7ebdf0945408d307d4743940609fdda325bb13a0a043dd5b16c1e1f84cea2e708651c447cebd63b8d39d4e3b447daeeea296c26ed87463b8479cfcf6c7b1a0592430f5967b5a6e58ce5a5a449fde7d93ba34295dcb271d1f3f84bee2928a5fb8bb211218e07a1786f92b0e4717ee6ac55740fcb270d71f38a27de32c6dbf88e8286c8bc7df38b4dbec307c663189bc3abe8e689fa9ed689814b469af0bcea5848e8fb83ada865170fa7af9622abedf81964719049a3fa15d89f70d4018b52bef63ce987a2c09545b87b2b71a2416fe052071f33f6837d148dfee1800c35a46af84ec8d5a2d5fed15299434bca30d20de105f53d0a0cfd2db52e6915c3a0d4719001a07c516ed4ca5734f83201a9951e3ec1785f604c8a0401fdcb956e617958ccd0b4f09d84e5556e139ddd5e6c764d73dcf4ab8520d8f1d9408a53780fa0d271ff56bec1965c4aeac9441a2bc2c4d316442e6294ded3393a9536aed0869d5302bc30a1b7f8c3c9b0b24b224092bbe14a593efe7c5c97b94a3833343ff28b1857716002b198f646c04c707bba16ba5954e5a6ee59f42054fe59034f4533821a27a88bd40ab6f7076674dcf3af393313bff8acb21b02d3e721a632cd41689c6213316b8c0b13cc4eba504176abab588037effcd49a4f12923fb851d5c15e05011bee6b2d11d19b26d158855f6e890f0a6b5a2844605b44a8cae0b776d544067d732fa72c9b6a429d77e13ec94186bc365e8df0646fe8a87024860944764ab6badc813b36c2f2ef2255746a46283fc0e675608ee50426a9d1d242074a3ad8d61c5bb20fe65a85902634265aa882e9a5677fed1c7c2d944295d917336584a5a5de4c5915eab6c180a92f1fdf85ef4d212197a2a836fa7fb7d316056a7354681e09259e3ab8395d5fb534fafbb9e7e4737eccbf05db24600f45a8bfa373ce1185b371b1602bda7d4202ae15ef12fa5dfabc97bd8af16cfa67c8938290eee6d2b998393853437ec059ed43f4886d3b1053e7887ee78b55b4db71ff51da43bb3219051ed432709deee25a7209c8e194aa9dacc21333138f45c639cbe67f2093259c01dd0aa7765dce8e10d8f4ad2eb69de95b57e51c917a9b0fd66f602118b0e56cce976be79924e1f03db8a0e760179f577732929e635a58a348fca75e5279a1a20eca205ff81558a115a361512830a1dd765e0d22af1ee580a13772c50e4a8c43e7e5b4c4300c5ae00f07de2829738ab35e22731f4082fb67e251c40af9830b6c3e924f2df73c3b285a9f6dbca9d31e05c26625bc0880c4b7184e9a682921ab455689700cea9eb2b61be38c53df28419e03c0609d6998ac607d0f800a3c1bf000926de9a0688351e9fc0e126e203ffe66ceeb9581d19c9b90817de08bdae853a45cac396434050f5d695604d60ef3fc0f9b80508684b58acc313695e77041f56ac4b8f62d7f41d129fa849c57a6b5e74ab9cfcc5e7fbed60e14b3050ac1775c27ffb5b4fb17e37e4c96ebaa6a4c98954d9cd5f3aa0589ffc10ef91297b07ccc28e9a85e4c8567c309df1fcd7a134c7a03bf32b68318a5e53b1ce5ed703d4376767ee3c64b2dc34b5703df4698a6910c2f58e26a75e03c51797b3459039c5777101f261d0a1cf1f8ae5ba77c034c0ece738e0ed2cfa2a3951c94f62f962b86b36bd3466f927c9e887b70dee97e2b64590f5a6f640c1d6ca3970ea5c96ed97e8c792a18167a8e4f1fc476d5ea6f773e0ab66fb94aa8474788b744d899fcbf650b481c308e68f61b8344f254dc2f73d1b80ed4074edea59bb5ca2cbaf289f227b9b11ae475d721b7cd301f6d8627bef1841ea744eb464d97a90da3f03a63270cf873c174198c0ab2e06c1b633e8dfb27e0936e8c83a0a037f8e1f77ce8fcfa880813fcb55120afb1206a6b3ce1c8c2520f772dc28ee57758678eb35267846813366e0140f37c791121b620c62a5b855b1e82dcb718ebad06a9eb7281aa036a79ab3dc57565769ec1ac27cd808aa82e5564183573219b6284bb32e586b0ebacb970cdc243793537ab982a1338b34f48dc7eb40efb5aacc302ca59b5836e53658c1b2f1f5f5a02fb719e036fcc8aed22a447413cbeee6a24fe5b77286bdd686dd69c24a3a0521d9535dde639ad71edde3eccfc14c6a6783fde400d1de3454622f34b4f6597a2145c9101de2f49a677f3c874a018fae2b6189c51d2f9b7a05a2618a1a581f61d7af71a2e8314efcfa082ec433a9c65da8a20d418d018af4497a3e8ce295772d1a98389f19690302b7f4a264a9aee954825ca67bc1700d5471cd1b3b64809bf9e62f368378435509ebc0e88c466f0851dbdbb3ee978ce10ccd3ab49c5d9e09cf230321bdcc89722d59b66058c6d0b03faecfe2d54e28c6335f3ad95826f84c0367204476fe2103a9ee1286bfdd9841a6b00fcce0ed89da63eb9b8f7e37a1b8575a34f2b80ec35a628bce1f72b8894bd5a8bd8f265244e1505a74420602eb4d387680664bd58a244fb56fd45d32efb0e04264d5c62d7a6916c586478c30e61b5d1e415f1b81d3b9620e0f65ff2763e6101d09e42ea106cbe8d739a0487eed7bdb05bdb5202dd194fc7db59e354199954ca8efa3c4c385ef595c3617f3c667d054b2e1f69bfd964e893209ff0585da222b2e943ca0e111f365ad57414abd6288a8de9be9968bf7ac5e1c06159a4a08e7228bfa04af6e7b6daabc98038a60b95a0f34ca4a21519df3f3c04ea4f6115e0e30a444857925353f43ec70086f23e4db9240343a7e63b8fd2de6661ddad01cf5053206628652b868407ab9ecc0db88c215fa945979bb26d4680e2b281ad0608fe51e15d8a9699d0722c606271f48a5c1c1b458459f782df97e8ef8f4efba86c411ab35727b2c986f51e69a566a96b031fa9ed9e95b4fe2886376b1e47466cf11fb9ed126c9ad7439f40f85ef2d46a032a7f5751a8dd6663d3e53a1aa437162da087f0144da3656dd9947e00b20cc5559e995ceac7b6f835999cd7b6898371bfa9f1535188436347ef46e11c7db6067f440ea094b897eee34cd08e407d6c258ff435d745f1e92fd0c0acf4c78ce64a97d3ee73e61eda605419dbc61e1a67d9c49b6ffffffeeef679ba7f77f3aedc543de495c91d8205ea6e3407401b0874aab9fb200a91d61e1d1580eac60c1dd31794d0605300c22809f4927f981450513a98d70221c112200530ac4fbaf6315782f4315a2df55da3c4f9feeda125ef759d9e7c3bc8a1d46071ac7d02ca9d1a043e4c45b91cfee0357584eff4053b3d917b702012421de71a1b872a3ca911d174607e41e324317e848eadcb865ab4c9f110b26d7646efaad980113f3dd3a6d6696dbcee27c46f95bcfd5f5b8979ef9b9d79fce4f65d0f3c11e6e852132fffce77276d82bf57f3a9603fdd8ffa3d44258dec384dd567629a0b670aa57d1193384961f0a32a79600567cc9b5c8af4209d09c0357cdb32607b4622a512327df550ff1aa79a64c4b050402fd357545bddd60cfab71a251a1027a79b9638d9d636063ea001b4ad4f04c5069bb3fd6d096159b0b39728d4a4759e9715515d128093789a5312f21734b8ca1d133bcd98862ffce341cdbb0196ac7faa93ceea8ff241eedec4f1ba81ff7b4c3bc90cdf725fdfa0a91ba547ef0388bf00bbf2e33ad06774e4f4cd477a5be68f785bf221cfd97a4c732a7ae1048e3033c0060a098a2d142b6449a138aa2128f5baea0815fb5030afc0e57374bba0f202cd30da8bc510cb0b1b32fa497e930d8febd7cb3c361574744d9541645c0c6cacd1879f3f554e8cb2bb49273e718708345b13447e24b6197917be28fe9b71a835987326597fab44d11ae2c3ab871be1c4bcc928a426fd54ad02979d060af61f875efb8c8aa5bb6f770a31b4db376cc8a0db408cddaf2656f32b68409b9976ab24769523e4699c4476d90cc65821df092289364f0d1155ee0da23038d766ff49f67a05db22a724250330e4b05029cfa5bb31db7337a5a19045f76ed3aaf5948261bc840e9b17ee766ba4cbb5afb6f63b345975300f0775ef23b0d9feea37f1c02250de58f7699d37d0054259cd49cae3535d253811ee072fbec98ee6e8781a3aa457576268136ae36bd14eb054c6c85e87b0fe96b299e8d39a679252c6fd1d5a63a0618f2fc99be84a378c72d004742d7f25ea6f1e9312f1399bd7897d5dce758de64fda308b583b06e1ead8349c9847de692e82ef89c4c5dca771f866e1878edf366ddffc2d61f8677a1773f2e090c33e6cda89a4c9e67c4305cbd29104c2dccb1972b6d04ffc2b9f5c1d53dba078420c856bceba004c47d3450fa9d22a69bb8a305b549e2bf3cc04b0ddfa66931562b58e7c56a621a6b36da98dba7c4880a9fa7a853709575b19f33e2b0158bb4fff6115bbd929636b5d5b2e6318379f44f46fe31ca4a68f8fc5ffc10e150b0c71c9da60f4221626e08cc337c22939048afb78f963fac953b3bbb879f057996676aa00d31e4a9cf100e92019733a1e2949e3f69327a19bdd22f376bfebf1b47378faa09480e1d32080c3c39f873e3eeebd1220b9b231e6594551b65853075943a757648db29f1d5ccee6fb74b9ec6a7a6e4db8bcd4ddb10c29a6f2bd6a0df443df41c82eb87bdfd18fad448cc5a555d2d0595afef48bc1fa8b62d43d76980736728cfa42d7a2dbf4bbdb1d6a3bc65b947b99b9834e6396e548cae00d523f3e74112a1b200f971ec754644573cf21c4dfd617fec2125c984932b4b54e4dc26218d2fdb8e0d89f09b6b780c8c66b7f32716a4e1a18daa3b3829788d1f1eeef7f6e770c58051ed9ea81193ebf052ec1474e56701710e422a8a517a22a547e964e917ab16dbec1b6b1c757a5d0651315748085f21513352b451bc1835a6af3a891d9f11627d6e17b62e8cf345b5fbb95d6b00212004cf0125b5282999e8bd898a582c7660016c0c5eb8be8277f95d2660b56ad2e97a5bdd267e70ae95403e8596320f66e5639a05dc29e97d17e00c22e9fcd52f7da5771f3391c26781ec1fa9d9eaa70433d95034d8037313cb25997543dc8c63aca7f2cfbc1866a01447df0ffae1cd16de18ceba09dda84a36d0c790556c8edc29f5b03abd4488ba26d11e2e3616638bb38620f59e329ba5a51d5cc0786361ec249809ada2f090c9af525a2e72fbf2f4afe4bc43b2c17944932cfc8ebc8391d1802e28217ce2e4651e8789bdb9e01151af2588d8cc9e1a67c1eab391a4a45162f678126c44c4fad5a411a3c14fe3ebeb1eee6999d351486e4212cb8df0e5d4a0f8477c7c380ef132e202e2ad05512d4fa01f5c39f3fb6cd1dd88163f235a68ee290b56e9880f92c9968e93570cb4ce0facc92ef50e9f23a17e053582253e5a0c608b02d4227404813e656021efcd2c08ccc2f7a7ba46120e0eed162a738868f1430df70489118a901c2ced46a2b0583ac1c17239e50f955c6bc761d57bb01ef363987604abae01006d8f1d1039138fceb324f7a301ea4afa83855a318d965348ccaba555945b0a80fa32a616aeff30cfb30c1b6029327b55d68378494008b658b6dd034bbf42bfa7494f17ff3184a8e65a6564b1134266ca2ee584a0063abc75dec4cb391690fab25980758d397e8683e01a7c32dfdf5aceefb990141a3784b010d4083d199a30cba0e5d9b1c0be67ef94e0de524c1a913e303343bc3226969bca8abc4693c6c5fa413c746aa78257b077df7642132ffac0cf9e3a8098b1da0f5c39b9c93fc845a67361e803bb433a1e2c4e78523008f52cd65f841c5e70c283f5c6ba763839b25505d6f2d89e54b7c4cbb80758c38207e7ad2cd296326756b0b23c63c0958b501b9cd752bda132ffc3a55da25b7708b5f201d6ef1ad470217013c8edf0f6e0b8761378b5dc9e24e05060587c35fe9bea7b29b46782470e0e4c422463666292a07aea95a6a3def30731dc99f9135c447587137ef301e2ab22fc6c3b8b9482fa131515835d5770d1880c1dd8b856f40474e3cac9106f7b8ebcd2a1d69db8d9cc3885a8dd53dd80ae468b47b77084206a5d91ddff05acf780a3dd9e98566076c0bcf7c1acdfb61b579c8f289bdd8b7af962d7884a4b438236f8df5a1adcd285ab7663d47045b7d02d193348a8311a594e40f7d7e201db36df4df34e3fa191a1a8eeb6a0cf8c5a866f395506da8ed626b9a37151e0befe6da9817df0593447cb9ba449994aa0711980f597e9dbfa2783717d06cda1b3451ea138ed812f91939d05a36833bef80bc0812dc7f608501271255b4ecde185c5f571a201e2143711234817de3f0077552b2dd856436fe33c6a9a44fb116a808a3e59ea07f380a43ec11bb33f2fc647178c233f741eff186bb71a520b7ce7fd3f756e1d73902feae01b8d378d6b0cf31350de8b2ab3d5ccab995733aba54dd88e2e300049ba98b638e388315c49a7bad6a59c5a8435ca77842d89f20b442fe861c475483e02c43e1ad19e087f5f9e62ae90da5f3728f66e4717131cef81ec2f00c5786c1cba9dd52a3fa5d2edea5224b2a30b38dbe64da92f15e1a3c16fd7d76ba247f3b1f1bc8f6f391ea735ba3859fe2767b8c1b227dd17e20588304d4de3e8d5fa4725f81a85149c96fc49b59b9b4828722d961e8c2932c173d53452d06507811e6c116bf26d4bb91345da9ef36d4c1d24647e25ebe332a4221b0b2d7e1d25f66f2e5bfd10b272433f43bba9d2e9c23cf8a20bc4d33c78ad2817ae941109594bb4dd812734353307cf9b5f409980bf3b01df033dbe0d96e2c6eb7c99ea94c3db5df0163d43278446970d507838c481758de275baad7c45fb9fb4d561b65b4dae7c8538a84c8fb25d2fac56bbd9215650b0f580e0e38b27b97ab615736459f90f83130a898fa5ea901ab6ee4819b1611dfb7f4c6be70f9191420b52ceb6b9273a03e5358d577f3961575984aa1d0bbf40590a9b355f2a691363e2ab73b3960be8405dbede94d728c416550e252bd460a74b9bc3781fc0c85111cb5ad487c174eb1004dd426dcdd96afdbaf30556ce101159358a4f85a4d7754a2d10960cddda01e42955cd1941560c1f0890d3c6bd56c8c319c08c4a4b4ba01d819e56aa2e9abb53a50fea224893e151069759a455eec3460c31c4c355a9eeda65f597051ff851ab092f38560f97c11c7f4c277ed0b0479ed240630324792d0d1a7b6c46b82b760d1bb49fa99ba81bd774ebd4559d44ecea203163492dcf705be689c2b2c26662fda7dd3b360e2b8b5415c35f7b635a952853ab832eca20e490e839325f521444f21a707089413a1a3721d9bd55117d738e40466138bb13c15686d528f7a414da2e330d7f049f50cdf301f5c68aa6781d8be82bedb311372b97b8b17e78fa30adc2038c039ccf7e95d2f568c428f512c0189fdc773eefda754e25f68c886833bfd9ea9125f6ec655b344cb0b9ea7583765662d170cffa22a1e7296d53cec497f987e5f3a549ea1cb273116e9444f2ba7afd2130278fc591bc8e93073af2e93f586b5239136a310f66b4e7f4ced7e7cfff7ff2031c92d750e6c8f011a409c2cb70dde89fb781509fcc4a234ca099e0829ee71639eb0d842107c02d61ed0e92d77dc30545056666ee50b112c6b718f3a9665e545dc9f8971138322b01f133169d8cf90f76b195408ebc8ee0331dbd8b4f713b870e361704732099c1217f81e7867d5afe340462e3ed4178b73b0a366eca6e83f93e90d5a5339574f617660721eefb57809e3d49155d4f6c8bf8bd4e4f25a588c150ed069fb0011529041a8ad52d506bb9539dcd8999603f287bf91cb51ff4561ff2d3997085a7e9a4070e13b154c7ada309a97e041a03deeff0768cbee7b0580999b6ae27a43ef32367e59f0e00cd2f5744ca13793d933dc115aef004b7f8585958630042c3838ec6d56f7b4a91c5add3675dc48dbf621232971ebf7562445e1b3c16dd3cc8482f58caf418766eb30bbd8c36a7d1d204843997d5943311038cc2340e92533d8a14c349ba01f88b90afeca7b04e9a8ff8dfd96d22e20b61d1e04b5fc46849db169ada07c9942207fd64518b325143a07659aac6f6b7377a0911f423dd4039ebe6b6abb70d502fef831e49ea1c8c4d3611b184784e25fd8817eda12227868ecee438687973a1e73352df35cf367ecb9b156d60c59ab83fe4c7bd10d659942f96d3b05c7ccda37811657e6cb76e7fe828a8a02c758bfa7ee40048093a509ad128b773a599dc4c409f283c604b50523bffa793a50d86ec64c25bbbbd60ab02698a9c980e94bc308a5b88367468bc2edf91fce6a356aafd1089862c3aa2a6b7ebb62da7e6bffa8caa83706205431e228dd708b4526cddbe577df500abaea3884d8214f1c05f5c432155ea72304151baf82800ea3e7ea02dcddca616b937e3b609aa74ad0bc3666f48f05506d7528fb17f7ea90b2b6744b9cfc78590798d5b4a651cbb2403e46ed63baf07bed0280a36b7039c3319d58d03807e21ef63491b0625ffec129ab3a0b6f065df198427bd0e6a941ab8ded5211305ad3db8fa8d50ce390120c660d488760404f2df2175bc1d0ea7bf5e3c04042fce1701fd5c630b63d3b7ab5eeb3b5dcaab67e35f594ae0cbddd9c87d89e6e58e6608c5281d7f9dbc0111ca9c86909bb49a73cb55f80d1b3c7983c66c929c75206b7d873ed8b816d190236f148e4e9c86b27ce1269f4f524c4886a0243918202fbe705130e1903e6bb45dbcf51613f7ef7fe1c1a2b5b7667b9d76047d32758bf1459232385945c9ef523dc9175ac13ba0c8de001b7bef4f2916d818caa4fe49862c86f33bf55d136fc8bab7c5bb514da0e4fa7d70b950f8333ed629dedfcea19f650912cf5c4e90ffefb1b59a1b40368ae9f03280837776d5dc285b1487563b5059afefcaafa44bf9f3aea468dac63686c92243ff8c733411fe732c54968a7f5c97ec4f3a5348371ad36d4e728333b883e8c515eaf729bce846371018b16af3d9c45df313b38062cf25444a536380c82ec3589bd095651a1f991a52aa29fe44e4187b896ea85a9a84149f710e48f0bb0068f35cebbd3cf0fb53db43c98160881d25fe5a8d878f9e490c3c636ae0cf89036f36894a3463189777fdf7c85aa4547b7ebc47c13f1cd7912dd1f362012f6e8aac2e5e71edff60e31af9b2785202fd6f44bed5b8961ef5c6f50482323c3e819429863e198ac6b55d962582883bfa7661491534341fc535aec60d2c52217783552a16067624e7e948c6f57a1ed1f49d992c33fb69343c741af6438c6b626bf9cc99dd18c4dd356ffaf8cbe5666eb5b24d8f7c7df71a370fbf79a7654651c2d80d9d47f8d3ff6bc43e7c96591a117c1ec2f2e1723241de96614f06f8ec3f3e6e5c807f5d938495ee23f87c3e0a80f2f28ea282fb83c3634f5773984d083e1b714d6a927e608d0db3268e3b5e2bf8b64001e9572a6de1e17147689f1f1576ae3c1ffb166f530954b023da03523bcf6fffb2a0ecd0edf03c4dd1c4f6379677cd7e2cc2eea8c6eab0257ffd683f16d1a8a411a4f0d30914cca67d48ecf2edce78a839f97064cd1fcc620c8a15b41aa9ac8c732e24dda0fa8fb4e013be318b50373f25b90057d195f715a42e1b6e2712accdd036109755a035bc0f275ec6a1aa718103733735250a42a9b1546943f71e7d94b79e366aec02b1ae5ee4a32d4ab5e2d1216e49a7eb3c86c0521185410e7bb36d8dab649e1e95b22af1fc20c4267ff0e3efbf77b16c6b66c9d61378ba9c19fb4c67abada77a7983c7311dcfa4ac6b9be2a96b4b0ee0d8df6bbd3651f62618814f66e8c2a786eacf7efcfb74eb3ccc9ceabc95a560209a38ad5e2c42df64bfc3de472189e6aad6374d882b9a43fe63f1680d6d0c238e9a930eb250298ae77436497845eb602c13bbdffb7f2e2f05038630c7ae46d3f3fb96278ecfa937911ab3863c071c510ed66388a3268116dafe0a10d91a34ec50b2693a83499f4ff3084b6078f9a993d4cfdde918b7e851fa47baac5f5c804f3f53825e0821980eb533e6e6af41085312fe50b5766da56de2d8b6319b21c312eaee174639a421fa3f952e38c25eb1a34133ed2d6a4b1a77e41d881093918b341a5988c91dd5282e43dd00de09132129e4ec6b205cf982acdba324d8db5318bfe49d669926602f1ec37d79cff4736838749400a9d9fc31eedfaedd5cc41023b91198320b4d9e3df33824966fd70cf7a9ed5d585281d513c80857b1aa4be6a184e7cbd3d7efd5dde0e61cb067d8f0c2353d4ca17fe8603e9ff3c77ba04cbe2498904b722305efb201fef4afbaf335c09e899346f3138ae9903783ad84086ed2e53c5abb858f649c4a6d9dd1ba953131b3c4ffca795aa267b7144fd723d8ea4ecdd3891862b302e23c16ce941fa2d3619ed57d4ff1827c130c4e06b6630c228626ff33aa1203cb67cd932152e3c9c0e65aa5b2f532cee52eb1494a062eecd2ce391abc436bd810af149964d160b92b07365684bf17ae62af250f743a5c88754e6cff65c1af215e6ad17d91d5b665d3f0e90766a8f9857b82a656ecfa1f6c3512cbeb3047c04f039a1b542cc1ec40228bcc6eb59eaab23070284f63af3a7008c8386ccc4ab84a0d0cb83b68576d8f06ba6c16c0f31dc76c0350a2d49402536a92d5129ac83dbdff9ae8e048025be911d0a0b0f58c36c68b3087b8e9df1c3d65c7d90bcd4fdb394dc41c7106f9c287519e9e9367c8d101dcce1cad9147e72b626ec7b984683c99962f3eebc3d63ac01b90fc13bfaa8ebf804590d0fb5d30e5a36a7b72b983bd891b8438253016a753727f50dc1b33ba738519de8f528fe46dd57cace0e28f65c1d4c8e12345c7fc2ae84412a6fae47e47655b6639d255c345573184d7b8c8b9c289329242bbed1ce430521ad5057da32ba22da7aa126506a9adf15ff2d094b1c265aa68a2a133bab8cc32f8240ccf8a94885728663b4dabc81ba16d41273fe5861c45df1f01a289733c46795bfb684bd45825aa53beb2cefb68acad9b83edbaf2408c20e7a368124bb870fe923992caf5c2bef7b446b6eee2414ad3473efea528c75301ea2bae683930b0dd6d41af93ed64a1224902ed3fd4733c05560a908edcd6c02118ff48341b097e9de01a05326590618ce66b785859bb87c60582e1070d2563510b40b89703ab130777e19b16f678ccbec0fc5909fa7d6a43c6010ec9071baa45c4117466a9a192f44e1e09202785177d7d116dd8a240df55d45303d462af2efcc9d60c5ba43a8aaed99e74c818fc270639576bfa65e23100641b5e48a9f5d1739b9f27fc491a7e2b86568d59e171a155ea22039f6865e0c515190cad25ac028931b4aaf61bdf32b4bee2836288bd9e966eaeb06efb70ec070cf6c45a1f9b066b4a867233d51ed750cf1489236e01849310c60395bc2225b114aa82f645bf3831de5a08a1683fe2ed337eae8a394c8c53e1c6b51fce62a7409f5f5d128459aceb096840cdbb5552fae34add114d765462e30cceb8495c24697c4fec0b8b86218d366aa9317cdaa268793feedbcb7ab9c8aed8721f239f7ba09153c4f8180b3a2680b2b09069ac7d7daa79e1cc3a9eaad0ceba96c318c48fa2559ad3843ba2e702a8936ec69db9a38f81f5b959a9121cfe85f18ac8ff7f24c090fbbbd8cb3e74a4fba38744267cd495a777936d9206baefe88c33b9ad71c10764cdc852f8c460517726348f2aea839b8cf9cc215cfd3ea0d0d129643d8b38a8b42812a3151278d122b4afc09762a8ff7283a02320f50fb377b00433716864f46c1cdc78e407fd67c03c3704f479d459fb44b7d9595c378ec986b181671a639d81b8bac600459d7036b01d2fec151b4b9e150dbe42cc32e16ee151d4ab80ee4a5998c39e502d52cd4ed6697745b0a03866b53be48b6a9011238e0136efe4aafa29cff896c9096407415b05f5e0dd32278feea111d951a96981a57cc994675e11e5db704bf10a1f4533779b6cc18e818d44e11dcdc2a237b4490c4b4ba7e3a9ac60a5eff6bc98583647fb353044b564ff906d416d457dd5374e4cb5facf82b1c652cca5e8e791cc73d5e2a2bfa0506b7915aa23ffc9f6f4301b34481654090d964b60dc1220b2a0ea1548785148f9a5ba38097269329b2bbb332f94b50207295b1c99268c4a89889a3d371596b1dcb1078cd6e91684c8c9464ddd43970290826d07b5bc4e795c586f9f6a5c446e88fa0d618df15e801619a6d385c9a285cb981e1d1a332b2661869f03ea9b9f135cad179e760c90b01563374ac39168d7111351ff934fc01d6e689204c63e9e69f098ac6d5154151e274505c9e598dd1f4e4bc1fbd77c43adcbe89d5c5b2ed92187141e7ef019cf98525f18be2a1e573f8f2a789c1c59735c3756ec6b7c6cfc4202be1318aa673ca58c496566e9da8a89d2ca5d71097d2faa5e92735656aa5f5366f8fd7be637052131e249c99ac81b1f8b7bb2596cebab5ae3f6cf00ef251e2dd47575ffd90e355568df426258dee3420b5070cc3543cfbc6104a3c3662beef40a64eaa61dd431d54abeb2e0351ab2f02d68bfae5cba5110cdc10b17515fb948b49b4b9772da231facb23128178cf0106a31f11f7069fe33907ab9a32ba4a051ecb1128839592c461cc6f0a32e75fa8013dfd5422d1a2cedf12ff6fb90ab5cba866b5d313b5cbd840179a13c2ec16213215b703df87982b84f527ea3283b34efee930ce91bd80550932ab3f4ec4aba37e061abc5c58bd51f7e60449c2b84f793fd8be94078355518afbdd1ba997271d518bbbc55de135121d2c5c8cce1282f07d197c609e6a5173eb861ae2f3acae62de0965e909fdf1f0dfee8baea79d74d44954b671d2d354e04f2b48ed438cc3e7701d9e2e6178e59f5401534b130cef6d5f507a88ec0dd2bcf10d4450689d22a332cd9043b3473fd9dc66401e0577189b34d87f07797500eb81f7336367d613564eb6c7720c0c27228cb1454a8d93bc357466d0e3c3fe3dbd7850359e1cc5cc325e81224b974a56142a0273d86e556413de4fc5fff3acb4a0ba4fa6c73d21821b66dc342d5763d9592cb8dae0e6173eee4f270f1cfeeac51ad68eee4aa566ea17031b2eaf8d1133da0268610b53b356dd1ea4fa133c5f8fc547ef4c4f5755c19ef5f4228e27bf5030026185e01b32d5286f42659ed665bf9f61f6dfe74f4c66aae05750e65739f8fceb4e45725149171f14f86a5254b00a96b45e6575b2456c7ffb923998d72cd5ed08ef4fc2b86dfaa6549707984bfaa73b782327390a1cbf1f23ab6970fa26574a5fa52e31a8610d39250287f404cf1dbc4de00dbdd58cda07614ee3cc75a4122d7c4151b31338034be98b9772e88db0e35c3494ebea52de52d22bf1953735bd6317d454a606b10e779c60b67175fedc60508dcfc879f62d0fd7bf9fdb878a9d9b1e81c3969754e0737fc8850724dd2e5a05a8459d26eab437f7fc528008bf542ed34af87404b2fc9a91e4cbf0ed83b93c4152369dfff4bb713e93bdbf5a09d568ce54c68fceb25dd35b454dc89adbf0b8f0706946e96d32182746921ea5d2884eeb501e23112003c9091362eb7395668b54400a4260714eacf1fbdc9891ec517aec628ed0d13a1fc5d4e56bc13d79e3b9b425d0b4712107c6b10ee584431c9c9ec9ea65d439be38e627ad63d412abb2fde768585ee6bf95080807406f825e7194821cac0cf3d6be33f27b787db4cc2f01539d5d68161984d482929179c2bb7ef3b43cf25bd64f61961001db75cbe67302a195563a73a5f66d7c4aeb8d8c019095aa554a4375eced1ae01bb5956d045d66ca0de857d1d02aed5b33aef1ea2ed811f6dda1ca05ec5a776d079b71df65650dc1084774c4378f99e87c62c5235d5b11b4ca963a3d3b1586ac07f7a52debd12addab72d0d814d49262f1716784975d69c3e5af70314983c4b7715eb7ca3180d782b2022d4278218b9dceb488f5e8c54464fa1b64f8329bbc6938f1baf36a3b83b4e852bc6267ea71df760a558df9792e74159994a6c7f29116bd853d1fa89f6269859d919e82adf2f44a0f98a36fde7bf96c70bc45ce8763a3d8fea4733a172d0432876143ec78bfe891675d388ae4c4ae5fd1a256dd36b1854b83e0e81597a903a753578d1d1609d40bf1962a82b3fa1251c62e0cf94f06cbfb8fe8db1df3a1cc372557cd1bbf53787945cd33e727ffed93f053d593bd337b7305532c9376965ec4747bafba670f18dca8d817370b95efcf92907470928d8420c4f0ecedc43eb4336000c7ea90e1ea4ba4a833214c23654a8f61973db9532478cb3c235a35e3f289a1c23735cad40a235235da14c3f98f9d80fc96a23d311edc4b45b2f3685c907919878937e6b5cf032b6dc9a961d13f2b70c4585599608e19e1e2b6349afcd11b7906597f38ae43d46f0827040080e25769225a3be9e2c338b1b73716e6a7467abd6038fb548bdb3499b483b8b0da8d82b46cc61f81bd5081e8e735c428c0b3ce493eb356a735a78db17460b4e61f8a93d8eafb8e68bfab52ff81010b40c164e84fd2ad69304aec413627a2051a8ca700c7d4c328d8a1523c08240e5d881ee13e2058a9d1a47c0f1031c32c22dcf1f167c9892703b9837fac89df69208c002d57c332465e10d77ab4617f05c6d146d7e57ef1e38dff7e5ca77cef6c4a29625e015699117a4762a7df97b00f2ac880e8f7fab87454adf4361e1812cbf6b5c38f019dc1e04bafbc60fee51bbb671b1f1ecf6373f3065f65be5a6aa6ff31d1f2f2148a377925a4f9fc591256ca804ea7d9ed83c2685642278cb43f130f5f002b9343ab785beb94bf4fc37d7cad2507544e4cc687f8cff207dba58006d99a1b54664d3cb7a07e9d1e08c9d556cb3a6a19d9ab9e018e64dbf7514b7f67373aea0e4b6a27ac06d86230c1b5729d5227e6a1792548bf0cf29bb8cf35b1173e47e8277694431c32e838b069ab864ea39bbefb8ba68da3badd6886593140c588fed2310ab550a42ee78f408e26c0d69964ffcbfcb8c22c44fc925ad495326f7352b656f460d6f3020642523ba94abc96e4294096577adc9d45f8d6a7d59ad78a56d569ef5fb1167549b92c1863c3eae159127cbe14e9899ece80d9ee0364caf99e46788554940050f6ce29179c32dd2d0e068854c8450885739b746ef1761ab9fcb7652b844efaa4c2ad514809ab6ff4fcae7c484b4b7f9b25e25a3a128664846e82764a054e457225ed1e0ea1b704dcd8a06c3780c0446e414ed445472a11ae1453f39017b242391ab0dd51a427cbbb1aed5400d7662c1aceaf11a197f330cb846d264099cc176dc0c5a7ae89ddaa26576619581a722c8e7c87aa7f6df0a9801d431f1d5079ebd7f3d733abb2a025af78ea52ca929d5da2007603ca4fdf415c9e58f9978112af618b305899cc26948d32fe1599fc0c6f06769f0426754f0e87f3f266cb4b19fc88bad1a97b9a93c4c738bd4e4cecd95544cb9df14fb3577456617a69881d5f9bdef77a82df5bd78408bd4528a6b3b219e0fdaae46bcbbb53af5f1298d1da6203eda106237f8ebe8e58c4c3819b880385380c6005ed32368ae5c8d18ea4078ac562a7a1e14da2adb19cc2cb8ed678aa82046fe3847649067b0df2607edf26c33fc866e9bf0811e99b3555a30550a97e147e602b355d836e148437395380198eb9fca550b929772b7f3d7f9ca978c60ff5857b72aa910a49ab2a68dcea98e6b669049696e1376b10823d4353b81353e5e986819b1b1551319d8c6365382524b5c8b3e222840ae96b7abdaa6b25d5d922b94891fc646d82ac7694cf04b98d918c12b458ee8ee0b1a544ea79c899bbf61028707c15b251abbcb2ffdf41c1d4fc460934f25db6b424a6164f9b22790dabde92357f977e0c032f0e5b4e0f5f3058c00e63422c8c17792c6fdb157fba641625024550a7e21d1e7f291ac26e55408fe33f0658080abd5ecc99ca6bd6e1246575b713d6d277afb1949f935353eb1b5b48c1e5659be05fa58fd2b46cbf7add896b83a1953db7cd99d11434c4d275cf9ddb8b89158b6dec7cc3c92f9fa1aa3889e53f5c5a153dc8c2b586dd9382004103b4aa3e15e08eb8d5ff6181a0fc1fd7f93ff12d9986664d5591985ce4c1a8a0a4cbeaab3bb02b36322c95a969f51a24b1620b178585ab1ad042c9c310b68780f08d1bce2506df5a6d81b032fcc9f4a36800e2bf6099a19219bb87a56455f2aca7d875aea45bec27bbcb22df9b3aa3fdeefc3bf091436bf2691c635a0697337342acbdb0eebb3713c0d1eac07bd0d8f458cd366de89dd9a79a2f3761fc3d0a0c454924e9971bfacda26ca5b2d1d5fdd20244c0d6ad0c6afe9399dfc36e70272aee4b74bfa0ca1c23f85bad0c66fe501c63839fa401f28fd654f16d13528fdd5d39858cb0bf72609068443e0eb012695a893e6cf2e9c4cc206728599f3302adbc2fe773465e5ce35acf8eba02d534dd33a2f8036bdac6939ef19ea5c9518a19f327b8e6ee6df4c4b1a859434766dacad7f7f498c0e4b3ef752b484a63fa82c017b17bc9a06332cb2d1344e37ac879d3b51a649792c674cecfac8343b8439879e55bfd42a7ebae33b47f443dccad711c3f5e45b36c086d36c7c890afc6d7e7c72199824a646596c4ed60b207f35e867a4d1bb194911ca89e006e352de3b244aecdfe444b2ea84f70b8aa50617e02699e88bb2a33a133eda3ce1fce02ee7465f4018a0b641ddc892464bc7bdcada28b92eb8787e4920ca18c4321b9e89305ab1cb9884d610e3adea8e480ebe55257fd021e97d2cd6e6fee4af05b9cee2f313d8495d44ab6c703660b69fd66dfc8750086cf163b8bba1842011ae0ba8bc54908482966aab5b98648582b8a1284c5673bc1b03342553ff37a5ff2d96a123db5165fc843aae1422b4df038098cbfc649f238a7c93975d98af8421eae95426a03c23474023ffca319abc3ccc6f35606ba0b84daa2a8684bc9e8cebe28798fb523f24a28d003e70bebea13d584227a35cab25a215b3c3241dae0d7bbaa2ad33c90311e397875f6c420acab23aeb9c0c1e5570a3e2b241a62f15d3c45b8160224d5faf611230450a6d93a50e6fedb8762ce67529b557dbb86c67b255f8be016736d7763847af10dc2945eb39f49f0310eb77dc89cb2cc70124212a55cc2e36b457fcdd9fd916c264cb04271864841953243c34b7d696f0f36a151a4b2d482569a50b6c51ac135ded5e729c19744351c18230b2118f0ac93e75f5656fd4ffacb146de2b88d7a3d58ac8ac6154f9a9bd5969804db3add90b802f2e52dd5e802cba51faabee403e23d8893ab05ee726039dbed0bae14d817f186164d756e13095f28b99cd4f0d09fa04c039c188a26a555188283d74c8897f6ea46ac6fbdcedc8875572a664abe707337de32a75b9e44fa06bf054bc3bd02f66aac33cf5682330b718b0113adecc5069d3236a641d5f9471059865a78b204ed64d051a65c0e488d8c18201a746543216d24f07016b5572c33011983091b3957bd59dad0e59f1f1302d7ad876d03e48cb15046da5e98469dd9bd51cbc9869a8defc6e59249eade43f5fb37fcada8679d3bfe8de04268010519a0a7bda9801e8e6ecbd4137a93045d064711b3d0da0d3326eb380690bb787d2ad15a79d71f8b838c41e30329f5222f378b756f626aeb2391da44f89bafcabe65f72ff368aa8f5fc909e6a59f16320793d43b9d50d7256cb5ac37db108e821c69e7dc768169a75c6ac8921c026abd49d61a103987b0d6a4dab65b042b11b033ed71988b41991a70dad40186db5f12c5d91728920b06b05cc29cad0780cee4517dc1bb6fd3e016a8d1ae22fa2044787da64d53f7ab842f9597753388098a3e4b74bdd6b2a66be461ed2907ee677f113173c5701a7db54800ef345a3ff4a7632dd34fd0fa9f1f318cd6a09ebcc695e92e7a1eaab938068756d9b48921d944f4c860d77c1b50bbcd8ed181a70c4eaece779d946708f345c9dde30099d8698a66dbb0031581a13cfa451bd0446e9718813561d4df1f45002957b47f5a8cbfca18ebb798607804966ddd6813a792102a997d2627cafbbdaca8ca884f32912c53da493af04c5332fadf6ab20b22d21dcee283fe7ecb5cc1093765866d4a94269f166ffcc5ee10d9d15087f4943315e561d6b93bd5323fa25efc0c3e5155da754a51a3ec296548640ca986600f7ea94e20ebde0228015b9ef7c4c89a71573d9da6849efa4106e05018b7b3f5b96bf598ca08bffe5ea3d32e64574f384ad070a8fd1d604b95c7f1076dd38d386dfc58d3bee211251043a8a98656b305dc1a0dd6efa9bcb673dca8016052ab978da0eddba0187ac851be4660cd610cb626cd14fb7c06e6b9bbdc81d829b5da0325d1609c2651fb38932035d332dd1f4cccff6e4cafe588d317a6c44b241ba4cc4d05e645b7af8d6f303ebe7a4c33ecbb1e252f70098b0a45ca7c943cfcb4b181f11123687cec3e3699a2f453b712f516a68d73d1b92d85a6c897b6a26ff941d8e39f2747c96c83a2eacd34ff28b8ee4a63050ee6f44fbb47a9fecb891090a6c62e0664cf5a0a062aa2f849d5adbd8c0e42c0de723018a723c22a64aa17af27debe0171312ce52d7c89c79e4c48208ccbfb0894bebab48710ce0c6b298275ea548edd9985d686f544c4008cd617d142af29f86bc9e54da383427e3935c11926675e7606e13b09d9ea1a78c977d472bb7d2ba2ac1b78954b43aa6502cc7f824feeb94d48a802fa7ec71915751af1d54691eaf034f7c0d040ca6639f0563906c42303c2960a21b790242ee8cea406269124967ed58896c411994044e2a70c76a6729ffeff83997258aaa9de9368c562d3974ec0c8b307ef3626d8a98755b5eaabbfb3ce76c0a3fa8f9ac1c745d51174a053efe4bbcddb555047fc060563df601f59bea6beacd1787bbe4c3d64667ed11cfa21127fe87c7c54f67458b30cd6f4d80fd2fb1ef9d639ba7e166b3093bf7e7f13ae7675608ebd4760de42ba5bc84b401ccf894165e01d1da8e84d9981784ee83504712612ba2c3dc89e9f575d130dc73b2d65b90767b846834773a3cd06bbdba59f3c07be99d823852873f07569a4efe4a448858206ec65d6c11ab6bfb27434f2131387bcb2c43b369936e168f7e5dd5313d3dd993472f8a92cfaea63b4960cd3f12cc7626af5cd2930dd262bc13af2c61be2faafcedf96eaf9cec5d8c89f3ad104a1f1eba833b86a2346bd4c06fadc1a3affaa72f419384ba2f73e53b71c185efa97914f5b695d1ef7f2b18c2c2966c4f6ef675724b5e171b0dd2268a2ed03b91a52b327b205e088c8425c87c45999cfcd75421eea17e128735417ee644c540cfbfc41baed229f21b5ad6aacbe07cb1f49d2ba96195c0f317e4d7321a6c3c86b393749d375a46c760595e7a2ac2b1fcdc850b714ad6055f2f4023d0d101fd04d47e1ff84d143fa5e78b6f847dd0106f77787e5a539aedc9148d3dafd231ff3cae54f3817958a2f0946b877c548480a4d3d13f4ae66471f8a51a78b849d3966d883db401ed4c62983e0ccefe56e5d3b5f7d2d680f6e60218c27a0acfe36fe3a1a0f423c54e9769a2c63dea3c08bb127dc9fdccd374e5a8c792542163fd6a13337188de50b1d793aaebaa33a3f5a6970b1707350fad5c55b5a0786f3109ee3c6e33cbb1fa965cc0eaf75445c6ac3d4298ae5fa087478f8bd32b49726e3d21fbaf5625a3dfc0540fce5b6db2395d847fc31ad64ad389711015daba7c0e3598783ba0ae16eea1be9309a9997228f01f1e58f119a1249c03199e1c68ea9fb27b75d40a176de47450b7c1b402010e4b7c972408ae4a231cd00989449d85f3493403b43bac390081e760ff33de1f95086bdc98d1420386665f552e5459f688ca627b7a5917ac43a75553f12458197f38470ee1d58811d24192c9e8b42dab031ab503a6aefded0db53574e02e02eea602affb4f46186f49ef494c248ab92f25832a59286f1dc92a8d5e53cb3a0726efa1e65272e18bda2a81e6542b82e83e2ece92a4aca4d44b19b2c948c25aa862f6c9340f8bfd5482c6631df3b02aea60d5b0f70882d237e1535fa58c758a7bd0042e3951ee014767d91cfbcccc3fe8d98ca91d5f0816beda1af2f4b83333b6708f3505a54593e2a1c03bc47d1af9f48c95cf76bb94cf7a25b498f651ca03a95b810ee4086abeaf67f5463b25b24b1ed38ce50798069dbe9b260887479dd322eb3156dcb6b0256143b83a51f8295e4be8ce18763ac98bf28d19e7de4484c40e05284f34a157f1d16b3e902867a9b20f788298714f14e660d601676f7baab2d96011d6018b657308385991bb0bccc65253ec468b034dd410ee8cfa8b1327bf6b7f21bd9175a6eee070751b650992cdf109e5115a8a7b722d8a6fcb63ab64f08fb45bb386d83044b19902585220ca62d3a22db041a0e33cc1098d3f1185b2e1da9fcf84a868a39a5039acca7d5dd56afa6e82aed52ecbf40246ec38b684a43d3f4b40d1e48b91bbf57949dcc272163a94fe2aad447906d4ab9698e76da47f01e234f80cf360c67e08010bfe7e056268f118483bbb45b7ac676ee8c88642cfbbc76edd069fcc1bb83201d2f93cc11a6c95d143d3a9a520536a3f21f33f2f41c780968c8cdc2fc251058627a259954ae8d5abbdd69a3561a8a9d4c8483940f5806206f017b99c59b4e345b9cf002ba75c8b34951db4ac89cbae8e941d9a900d18d2abf8bea9e966640d0f79d329d21803a3553b0e86dac3299cbb80abe13a302d80716e65174452613e710c48597dc09a9443155b37268a2f5a53c9f943d4c91e3aae8e01f4ce527111b3844519eb02be0427417529c923d582cd0f8303cd584047509a6f72e15d600ede990ba54ababfea3bc7ab0188e587c2218793e007c688e3a9aef2da68603ddd0d3315b5849dd1f6886e3607450d793c4fda1f9dae8de26ea3448a2b1350c22e98255a2ddbe37a712bc74e141b6ec13bd717816a83aad18de262c6c9fc3a7614bff10970bc07e526d1754bdf137119791f81202884f75ee1d4b5c623a882ef7e711aa3da6120753a9a9b03498a9ce8952b763cb1bd0896115a4789714aa234009dbe280f8da0bad5821affc2099f411abc13c43f924ff847e85bf23aa20c61616165ee13d9f239e532252a6d315523e6b8cd0822540b6e540ff9084357e08555de0e5a774d372cf07d0e6ae50a00fc9161ebb14ed0648ec6f5e4b12a9779fa7f85142a56314621a1d556a16fd1292940e76671d37bc6705ff61c84f9d0d8741de7368f22e01cdc22cf6d01408aaaa81da8403c04f46c6a9d6e1e937b6808be1974644a2a9deafc3fea4e5bf6d0364db758fc5c54ffa0be171c546660b38bd405ec15ec87997f4fcbec3307e2f311341f2f547020f3bd744cc3676ed474202c1fddb748aca8c0dbd4eda713e8ce7261dd1f82891cfdc5e30123b4bef0410f545833db37d7ff55334a3e5098fb3ff225869c40f2833b205125325e24efaf22643e6f114062b4f21356d0066d9ec756dfc65904c52eb9f2247f3327e5af2a9f358fca9c94b175a9fb73d76908698a973f3eead11ef8ab15e14756006e856ae4b1172ded2d2bb1b319fe707c2fd1394179f4822957b335e2c7b558a59a9f82dfa4eb7c97d8a2c0a5cc4e3f08002f79f475d654f97dab91fe9c5329552cda8c381d096e8ad1ae87cacda93548a7f4252e9b041e843ae52ca1371e152b025bcec176e0341643ce30f0f0468c04af21706d84ab75fd2fd8cdbea75895ff702e1cc5985cc261d6458d22624fe10041b06822560f4d6b0e70530f28383a477cb8cbb970f4e84257649dde20f6003fecc0e2f89854c567cde65151137caa4984be87cf0898947dac5383a04ba4b46812527fe971d1148c3364b314873d7a834f9f2277d65241dc65b3348ebc00d5832938017262488ed678ef83ed63e2f5f2a1c57fc467dc15a54698c3b285e425852693ea4bf3fd97f2585c1b15bc259f919cac386fbe6fbe047f9d7c48271247f2d1cc65f1d670fe508b46a0f128cbabab03de396a74a2076c3f12238d5f0137d45fe73fb0dcd0c20488c546384e75cf0f6b7d9a42abfb853a0ecc50bed60f5b7a4b944594167c1c80f30c1bbae38673860e6e262b95882d8bae09ae9ec21e03e55dc48aa406a7eb765d8cd0715d6819410149ea850c2d3b2940e374886ad9d032916137ec32ae5a51248dcaf5a63df19b9b97d5d9854710c721a5ba8b1e85be96294b1a8c68a493d289c31ea837088e73783394d50012e9b62d11b5261681562ee4f73d27ba34c8f4d1d19af316b37714c6293b6adc0b686fd45cbd2e294b3b646102344ec87090f3087a2363f609cd3eba0a2197661a59c503e2c93c487e9f01bb0f0980dda88189ccb40f53f61440b7adce37f8083603310513a0eb6483e20dab62cb61db736c2a87cea0c2df502eb5cdf7c9a65c58a2ac568a1ab11a4a0a1068d70cb6d62b874be6aa101eb3695440ef311cb99f3165fa5ad107c7c6ca4d6436f4c905015fa53794971d5a0ddf0851e1752907c197fab8ed20b859945cfb056d0807a40d29d167427cb35210215ce6744a1e44c6ce70582c2dc0c6000633950d747ab41faa0a91fdac0be513cbcc26f71559a96140e81e79f58ab2524c7e7f56480eb4047bf16379df7dbdc02539581c72edf0a8108714df8b6d5e112ea2bc59a9eef1848e5c1997789f174c965b7890dfe8300273efe46b900f2ca5217e3106feeaa7d2eff8c5eb20a1dde63997bae206a99a6c4441a47bdf37778d695108311d0c1d79bd17b2687e4ed12349c0fc21543507c9c0b7f8d5287d98fd3c233ec881c3f0a198facf4887f40e46b5a4490a8151767c757e1e60d83c36a625e14f62fe9510f5f7215626041286a514297dd4a81a6bb6cbb010a75561cb27bb4858d98ded540362642e1d96da92b386de2da453d8cebf98962d16d7df22000a89022a73d459c2283662de80acf2dfb107f82beedc8e5f8d09847eb9dd9f69b899bd47b018603582fe5d8691d3d8c0916d0013ebdd34457b5f0a9043cc99031383ee9b33dcea88ee84f7c50f118de72a265b251db2b9391c1a3dcd035e264c43e60abe03706e65ad040188a9c564653ea23182dd35b6daeaf206b4ba19b5042db72d61d8e745e5dd16d085fd80c7b1fa686f5f04624b0aa050e071394de27be8fa4a1626017991a4156a6adf2177f715786a1fbac0513cf077602c7692575d97f14ead2108f5210ccf2aa51bd92b1ad470db0e0874b951993f0086bb4c6abd2503996e4359eb197e653c11841a391e350d1906b1d76c430c7811980a29eab99802dda8ecf93afdf500037da5a9bee539a90efc0a908d54a4bd322d39a3f73211b98834a6354679951d43728d8e00182dc41cdabc5c79f8b857f2de6524e7ea85a294fe85cacf85568ed5a01d1f04998de868a66d964d237d706b8bfa30d324d982a9699a31962a1515a5e9ad09366454f4cca8722653a4b4e4329524f729a88f29ed7dd042b26d161faf5fef51a11a60b539e8ebb99ce6742999959546ad063039e49a4ae047a2fe672c833e01278928ba5ba04213c91dc45e7c7e89fe3e14ad54a48ce59e184b03ab6ce440a49f6685b1290e6eee37baa673d4c6b516171875f20101234fbcf30aaeabc067b2e70e7881e9230c22c4ce3f2dbb45f657b5b3a4a3a99460de6b6a12f8c281ca4f80707c3c9ca67a8a3eb01264c07ceb9e08b65745900ffc49003d60ef4df1a775fd56fc6991a5045fe290fb30b1951785a0e591ffe6a2f4aa51df0eeef37bda309f16d444a7bd0170055b4be189189ab31a1f61e4a885d8c827e247d404d1b78d03935dc1b1e45db14621e2af5490c46c9389f613e6c4973830c2c48c49161733175a2234cbfd3fc715a568396b674615d2cbe0ad714c9e5577bdb08fbddd2f730845df7122e99626ed0fbe8730eb0cf0f35d3fc00e0f2358b3a00ae3f172aae61a39b10dc8cd9efcccba4c3821760efda6830be6e4de1964347f8abf2004d015eadc39d197999cd676f0a68680fe859d516d5be79cb6741087f860541645b588be78326d9270323d1d8bdd93d2d195835dd0a96f6766345176002150f11d9c55181b4f0c8057c6bcccd0ef09f38a66360932e66b69010abb19ead4b41b27032470f2bf1d69181f82a66f5e0deaf107b44381b6b14b6977fd0330f62496afcdc8d9f907c83d38e239d80ef97d7fa2428dc797d4930bad7ac2a3d12c189f015c0b05de2ac4b80c58305a19a53975dea9997e41dd0df956ac6be1a4f456e4ba997e216f57c4c62c7f0d373dd6cb1a75aeea7c9c567a5f8c1260033100de67c815fcbe9d9b59c35910220eab0edfc4230d762b84ac35bbcd6edbd6b6973609d9013e0d750c390caaf95196834f6e1b217266a5641088f45a50415b4b26dbe7c1f40d35c952e92ba5afb0f88ae9084e52548ac889f1a6f5b8c9f1a51c9a03c6f2151696e7c0e2b4f5607196d366817917c51b8c64f7942348911b1472838227280be0aa542f58000063d4735859798987befee04a251715c74a4bab4af12c0880b936e3b663798ae52c5aa4ce72162cbed25a4ce37b5db468c162637c28c6182f8b956a831200eb9b07834261527e455eca9e2ca53ccb338863851ac47bec914d7ae5d366b42c8faa3fbc47d48f7019853397b31c8eba54d2abac2497f48aa6f47879c9d32b95fa839b8f7735c77c4ca9384a8f2cb7499d07e37c4696a4234796f4d24bd5466716592a7516a967f12d4e13214e9be1e2f2f0046dc6cae5e9caca5b3cbab82e976a8e95b3b0acacac9ce531ed2246ccc2c3e5153f02e6d4798c722aaf3c755b8391a5dea73b6031a613ec28873e8b60338833a3603368f372832330c9efa9a7f0112eafb8ab367c389ac8125be02c07164c93c3592e6f593eaa387260c12bb76596bbf2ae3856cee22d78b8ccf2957b84cb2c6f9b1cbee279e5b1dea061b90f97593c07ec6e6059700a672c3f7ac502d3b09cc5e5472c2eaa3858581400736d860d9a15f7e16e70551bae8a0c059bb9a02c0f7364caafcbc320bda24911d51fe6dd6bc591825bab1ca6b49f6b348aae6ce5b0f422cf1cf24c713e354f9cad60d8aad963af1b13c7340b591beab6bc028b54647917d4ab28bd7a976f9b5eb52ca5ce739197d4e493253652ba31a8c180973a0f2652d15ce04f806222c35b083f82228c63040669170889b40ac2cf27d80ce264f8be811874b03dd852d9b99010f9e59212e20ccb4efeb89aeb9d09d8cebd767b6a33da115ea06eb396dc302dad6a98769d181f7f6aa0dc1e8c8b02259045a4a575a2e4ccb6e40bb713b7e7136c067720cf83b1e18628edd2b28d37f06478a425ce6c7e3639a67b6208969822bbf7124f72cb35998ede7db348475407d75a875ef54ade359abe9391129e268b8777aeb58b98073ec2e58769dcfb8d75b0dc130315483229b728a828b264892619e7b664899d4c47346b3c58d898cec0ba7889332cb6e4feab79b73196ff6e165bb20ead6a3f704030062760c20135ec56049476281b7c934d4a28df2c8295ef37d7dee5e1cdf1b0f7ac389d609d4fab9a6bdd318a5a3f18d0d6237e04949fad3b718d467b363afdc9d763bf38d864792232bcbc3de4adf7f5e1725f7416d9278cb51e8475514cac41dcfc6c7cbdc350a8394fe79c38a6e3cb3c5e9eb8edcd66bd3353ebd7f5006bfd0ac23a8d0b836dd0b527129dbecdf763bae1eb54ded6aa0b9ec18ef0683499606183404b6e500c4127e3e4965b96f19685cd26d898ce6ed5cfaf878809c86ac34995994cecbbe8c24f26d8ee3c99605da65f5df5986ca1166535a1dbb7ee73ab323d69a6a85e1a7979d05f358794526293ba26d95d4e26387f4c6e605c8df7538c167af23b03de83c1dae5d1c8abdeaf439b71fd1d469b61fd9d5a97c73cbc72588ff196753997259e503a961c71c6810c71fb11b99192c9a435c90e01ad4d18ff60dadb8c30f693ef8fd407f6d1bbf70e9f12ba4976f41005a1d3681c17033b27ad720f39280fa70f1b28377c2e8adcefbdf778da9479496830b05dfacd84889b122c8f925e2dc158abdcc9a731558ece87a272b49d6912393e7131de29ce32902312cf49219564eb10def1ccbfbb27239ca14438b35d314f7e987bd2435e03a7b9bcabcac44e417bcd82fc2876501a0c25d8ac711aa7616b5156937bb87c5d77dd75a8323c76efbe0b5d7b4f94299159f2c31907b263d22af74b87be1dea5ab71ea1432898f0e47ec8a230952767a96cd19b614fbe633b8959e443f8d42a2c4362eb8e6197c7eb1703041115d891c44d101d279028e96928bdea7a7fe020f41c38c3d3ae397a68550acb40a1b08b5d8cf756ef62bcc7f45c623b67b03990e165f42af4ce30e21e2c2b88c664f40a1e3ad998e8e4be42b1e6e8433ca9bc4dc63b1561186c339c8c5eb97e306627ccd61f7a68d5a8ba1ad8ec259aea0f4798ea0f2379f7520da24fab755d6dc10d1719621e2e325cc15854990bf37019be2c455515858517d51b36f37040f99987fbc9508a4472ca8055a5daa86fc66cde7a192ab144b64e2deb2da1ab224f9c41ac06019b0819ba5319218477cfbddbc652c104fc07228c7f2e53658f7a304c58ff80b464640255e303f01133316b7c603e1787833e243d12d6aa8761abdc8c1028bd62e9bb7783a2073ed9b5bb192150948035af214e91dc78ac90caed892a96c8a55229d4a150a9447ae892a823dd5507740dd369e3c12ee1c4124562136c86fde4d0a809cda53f5ad22a268e4608439dd11774b290339a42bf44c900c8ed086fa822479122dfdc8e102506a16bf5e4e4e7c6f3840e447112a5091c96e48c04d4abcc32c96da7e85523e91aad84125076a255bd130a954e4ba552c93961243a695564d2aac88484639356c5254394ecf0965954991d3e3364098cb7bc5265607c66c88ecb5b46551997cf0c412280b7bca2ca08e033438a00e02dab5419007c668811176f39a5cab8f8cc101e1ddef2a9cae8f099213a2fdeb2a9cabcf8cc90240378cba52a3380cf0c39d232a9ca10e033439c68335a56bd655b65549f1112a5cd68b9e52d8faa4ccb678604e001f8cc10226d46cbf2f233436e8a64accac4cf08016a335a7e7f9f111204df72a8cac0cf0c09b293af2a33fa8c9029f2ac32f43343eaeb6786fc68335ac68e7d66484e9bd1728e5546f496afb7fc94d80cf6341145f44374d3d3e3e36335f1a42ffe7de82cd67f922849bbf4513097584a6f354ccf522cf32dabbc9d746d109065cd3b552e36ad34d8946b4f251b1289442299ae9da2742d50a9142201a56e955eb229954238741250a72c2c13e3316dedd88c0464814646a08890d41b3e620e1df51fd0a62747e8ee25d214d6da1226019182ac0889abc1a457214c03d3fb344875e0e6355243a4b005b22c128e197a5526d39169749cf2bc755346735a8b42fd2ad5cb8bbdc92d68e653dea592a563ced3e9743a9d4ea723c4c1266724a05eb523c021a86453fab1c242d7a716b756b028094de8292d1e4a69f1aa4c8bebf268c99cd6a250bf4a95bdcc917dab374ea50bdb9d6e96816c9570e82a8f79d9cc2a5894a4552d52444a72df7a0c374ad22324bdb2ec14edd22ec66d164807b6646359a59bdc24208b343242fa2101b5a00c0464e1ec22e2e3d3c413d4754d3869e2c91336d4c44f0db279a6091f9f56b5dcd3d3d3c40f29c8a76148404d9a70d2c493263d3d4c48404d7a82e6b4d6baa941d64d0d7aa94132ac9b5028140a552847f8c2cf23915e4357a154292a509d02fbc19e603f374ae6b41685fa55aa17194a6cc5a941729f5481e47eb5c9b459cbc2169224b9537e223d753d90ba29f5964324520aa76edd124eddd0cd38609343a5a742f7f4d42ddd6ce6137622f7ad23d932e20122399b3f412650afa6b0360a2445e9d50f0ba803491690fb970dce15a4617e58a02a5a90fb17918629ed4801f460bac66849af320b9499f46a427116c80645e9954de9ed522ae109653e49812501d9580ffde8d54daf707ac562615112114fab5c86a20349729742dd2b1bfad3abce229e27bd0a7d8a5e85b00849ab5a9444a4a4034eb8c80d8a25a264ebc60a4f7283a203440a901b143e4079fe4c2eb41916460a8255c6c2a4297e26d065d32b972794a05e9dc0a69c74ebcdb2ee80b465f50e403594d801a846ead69c56aa84a5983f3c39b36e8ce46cfefc2842020acd277de4e661afc7861e7fb40a48a8ddf7043bd344949926a2dcf4ca9a116253ba1309b684f52ab31e8092ad27b96f9df24c13517a55a36359f32708951b143bf8c94ffc3c79e2c7c9ca4a12b974ebc21c2a85422ba83ad3c4144d9a6902e867c50d905e65d1084e1047e347e569335a6e501e0c90cdcdc398f40a36ac0753822da153fc64fa2453292c8a93fbadc7029259a126b90784620929328cdca0582249a6f474fa6a08877abe603398318b8d9a4b6fa112cec9a107907e4a39e9bea05635b411f2d3ab8e22b7bcc39d11f2a344a5ce0c51f2a4570d456e19c69d11f264494a9d19b28449affa89dcb2cb9d11c264e7546786ec34e9552bc92d0be0ce086982c454678620e1e9552721b70c803b2384a748a9ce0c29a2a4578d84dcb28b3b23448911529d1962c449affa08b9651dee8c10273cb6ce0ce149d2abe6c92dbfb8334292e88ceacc101d9f5eb51172cb03b833427c9288eacc90243dbdea22e49609706784f41ca97566c89125bd6a22e496557746c892214e607566881339bdea24b9e5963b23244748145a67844471a2573d84dc7200ee8c102770427566080e925eb51072cbf2ce084142e4aa33438814e9550721b71cef8c9022436e669d197203a4578d24b7fcee8c102040569d110214a4570d84dc32bc334282080992754648d04eaffa07b9e5d19d11b2332448ac334382e0f4aa7d905ba67746088e9029609d113205915ef591dc72bd334288d8bc3a33c446a757dd83dc32766784e8fce83a33e4c7915e350f72cba23b23e4488eab3343721a8c96678418e955ef20b77cdd19214686006933eacc10200d46cb46e44e964872cb1b34341878f35ca4e8153cf50d1519168142a3614123cf25fa44272d56bc57624f9b31df2098d35a1434327fde53c1f3c71e410c1dc8293843f5bcf88b93023919324185a3d2e1a5cd6819c6359795c37611211559e95594d8090270d8fda9020b830c03f04cd640959fc92459490f7c99d0ed6d69d5ca532ba4bb2b49d886b38f01b899b351932d6e6995d59cf544adc158c1523247e2c820ad82bf9660b1d315dc1a09ebdb32e9bdf17559dafcd8e1030924a395a8574ec01d78a457f541b881024990c471ce7e478f36431e1e036d855b6c4e714f39beafa9dc31d27517807b0bc5302055d69c7b97fac0569917aa40d4d838bd59854544d008d4312277241249443a218f14c16e4736302c82411da883a111414825d38b9617a576d63917c4b36fd586ca25119d223817b60a1f1fbb46f4ca3693569dbaa7972cb99460eb43183e3c2c0291f48a6749af5a1c1e3ad1ab7e920c95e49d0c21369da00ed481451e6eadc238d381e51f01b33d8f51b618c7e2235c7638b377343e5c963fa48da5a4572f0e6f2d79302d5f41ca9136d8057061ce7381a7a4900d7b77036b318da5c198f49207d34866096b3208ec1780c31c009c7120e3c39b56c1b75c08a45d20ea99c371d22a1fd84b0080c486953186416c60e51de9f0ad59cee23484f592072f715a65933a4c1db3c9f0b30756defd777133975d9cd6872e71da8c233fbc4cd22b9983cde1ade5702f2cd22a23adca2b24161787396677d76024ce0b551989f36076601c1c898fa14eaba0e8a367504705ed8278777ff587771c1944e6b419edddc5bcece2b66c339bc3ede15212273bb1b8d969e5f68019759764a87271327ccaed61ed98269c59f8227ad587af80112a1d7a253afc4b0fbdc20e8f00a8a29f0f9270362dceec6928c61ae76d211669dd5516899d05742800293c71f3a4bdf7de8379792ef0967d79dde0cbc3dd43ab2f5cb02afceb877d3d6ae081a770caf85a5a05ff8420a257f1f113e821e277c427394606f44afe17aa39c00a39465413a2c1888762fbf21686ae1b561907dd75790821a218a87cefbdf772ebd02ac94396f299954d0959ba3417a96a30e4e361a6cad2081d5d815eb52798b8c9f2ce464e213f84ca9a573d180a341779314c3464494596b7b0c4453418f29d27142b1d0e1352ca39e7c4a6bd08b32c13b73cb1eb40c9607715abb38e46efeef7dec32ca1d3bcc78760ada127ba564dc6acd1e7cd60760a8dae6b5e2291e8375a166196d169447f1f65eca13b12dd6ce6895d079629bea8e062589fb7255b2e675a8e88942778024e8c31c61863a40768b163c7ee18e3638c31c6d8130c97b13bc62f58f8f76ef7aa405f7e58abe075c9f06ab3c1081591f182801e84684a9a4fdbc0093b7374057b19edc938406bb029c11da0b9c01fc12a21c3cb6830e0a7176454550b74ef09189d732e66187c13033c7cea899b2932fc4b4be381031433f8e41605167c9c78f7c124213a866dab9cab315f13cd1c12b1c8d075a072e82e4b22cff9988ed6cd6ab245310cfb8d9631cc524f83fdbd5f93e50dddcc470ed9e459311aaac9a1ab03cb17c644e062c4ec94630c0ea490931b144dd8c92fb941d1049b4c61bbc0c905fbfe5ec35cabe08f33031541728be20b39396b236da49de855cb51b821878aa01c79f28b58c9ba0d83f6a65b8f9ff5079365d9d2650dc2aaa28a2ae040037969603d965ccd615551451551b2c534487d5625503570207f3acda59bcd937c4d8e5546627aba2ed3962f5df753cca7e8e012237216af0395ad28c29024b728b945f10523d9d588e9b4685cf22c494d6033e82367a7c3259049afecdf610f6c02dfa1935e850e4fd0caec243186a4b1536bddc9924c80dca238831a569c30cc966ee54974aa278c04f264d35b62c2a1fa43289fe4af7a83aee4a996a024234d2516f926231f9207e36c6c90209118bbf32ea771a6edc679304f07d391c96432953eba345823994ca351c944c234a3c7742d81a3617a69742c85944759c5c9a5d24d3773d9f4d24d984966369f664d12f2542ae1d363de299bb797c67425b23c1d622778bac52dab4172364b18a619dd64fa69963e4f9738ab3879de47e7d1a5bcbd7c262da6193989b379d3afc519c4e67c2e2f0756fa098f6ec22c4f0785b3c922c7e91267384e97419c2e4baf401c0df992e9312f9b2ef5819dcf2a4eb6a737bbb1e2a6d315b68d9cc5ce645909d51ba7d39456fc3a954a2596f936523a0bdc464a38d38182791e85dbc869c534f1643ac2b0dbf268341a8db089255655ae6d581ba90f09dcb1a7d3e834327d5402472373592431e6c3caa7d2e53389ca274c53bae832e2cc39193a3d621da85c3a6116d3edb1ec21c92fe7b9bc4f79cccaf1990f2b6b20d9663a50f974d23378239ee684478f35082cc7cf7c7a3f9d70e6c3ca1248c6ee725ece89f4cc46f9917d2355191bb349964aa59772c9247a05d22c6949d9401a06d612381a1527d32a333fe94555266461185672a7d3d3e3cd50b974e5a5a77ba3e5d3bbce84423f9d307daba7d36fb47cc22cf634a75bb798f6c0b2e038ddfa095b6fa28f6c8984634d1e5d1da82cc2b5042e0656f115854ef35a9167a55da2a02d86a56f51f50a5acecdb7461d36b560b33f02d9d8d884a0c6fb5fdfc19fa66a19beb5d58d3278a1a95ace5eb68abc98805e9436fbfe825e18100cc330201890b7aa4911d95dc547ccef6e09a5d4fd5de7a4bcbbf10ecabb391d8473c2391b273b590217e3bd43d940b27bbf042e86bbfc6b9cf9a6d58c50daec5bebbf86f5bcd11e123e72eb1843c5a925a8406a092a4ec5b97c2e2a5c4d2e2a5c3e974fa3146b3e6e60fb587e6f7793331f96155a3381a6cd88c7814f8e6faf62496e671dbaebaab8b064c1d1ee7ea3c9d6da79b8fc7e04ccee3c46351906d177a1892d4c237d3888691e9e21d7362fb127471f07a5c1000535d54da42d2d90349f3d20a036c361ad9a7f6808f2a8804be40899c851f5806a5a5af53a7f22f61ff9a771942a096d801c6e9c5d62967978d5c37df360de14ed121fa3e4784c841f50ab668e7fbf5a6c9d5b71d639115388d99b87028a58c32e9bfc6e727cb602f38020755566d6faf0bb7c79ef01391aeff12f0d6d867cfc6b4383a18f7f6a682becf101859ead7091ad672ee2b1fb9aca3abd5673b1fe6e6b31ac6c45b6240b59659e2a3fdb601a9c7f55e6c1ae36fe70df886962cfc34aa09367e4b6c4e6890e3af4708f38abc999946f199b8f2863ecc777881b7cb825ebd060e480bebe9009b6e53e84ae5d00ffe0ec150dd66644d9307b6f7dd73ba08d871be59397c728d706e3b2fcd0ee01d665d753d2ccd74bbce9683837d886b5b7b7235c8e9805c77b6cb88a607724f19807f364545d75d8b06b035c6e38891cf14584c7bce79a8b7f6955bb6103850baec0e76cbc9b8c73575b69799ef6bd26ba7b875671401b9b59458671b8e16eb9cbbb5673b0fc10ef1e718698c728bb1acb392250d75a6b5783332449a09341607b09579b47e04209dc1b9a70d28493267ea2b4aad918816aa828b9fda8824d92dbab60bbe59d49059b35909cf9b032fcb3ad21963105278a10d19f52b00f67eea63dc9106219b349732ea749c1668d27c71bfa5e8361c9085f6317c21fb8192136bd12f223b773773e3af75dbe3e1a36ccf243fb7b7be3d61c16284bbfe5ecb9f575851e0a5df0bdc306ff81f65c9a12ae062af16a1c843794366b5bd5ce39a8e305ee50dafab43bbbe65aabee0d0fd12ad7a24c89dc06da78b04d72bf9578e048768f1e280225b7c82d0a2a96e4ec71c6559d93f55279e9ad789b455b72bdd9fc9b6f337af018e52360c69ec5d71aa3d5606030aed73b5bb2bcedf545b6b26ac3bd1ff3aed666f438023a1c6b0ed760cd11b3f8c6240d0e775971b8470cab4c8c98cec0f6db8dac46c687cb3ae4f6369d60798cb26b305ceb5b83390b0ada5a32382f129f66e4c274e89721745c7b085e9d07d3362825f41ce047a1ace5a1c1c09ef932ec814ff1c9e1073e83507263d717ecbc94107ec218e37befc139277c4d16555badad5624b176d879d61f4419e218657862c1d139e3403eb52ab2e078395322bfec327d2fbf9b4d98e978c15ee4d168f4d9306dd32efdd168347aa3c751e8735e179ca5cf630d63fa9499a3c7b4189664d782dc78a0dc64faea0d982174dd20c49906f2e8f33007ce11e9a3fad1e8f6b41511641ed6cfd963c4038628d9667b6a229d52482391088e7418dd99a7136ccbd669154128ca01e1db68843f6f9dc72a8ed17cdd36fde38674fa68347a69f4d3e824d24723d263fa54ba99a5b11f9dd61fea470f551c1653144645a6a3db406eff689b1e1cfbac6de05d0ed4e8ca5387ad583dbd1a3581fd793a9a37d5aa39e20111d02a37bae83d8238f4aa3fb89aa37e1ee218417b75f27ccad47930adc6b4588331ef046b6f1d556d744659f8d19d39d61f46d99e92aecc3c6108ca8d0cb9f1840148a62cd81482cd5c4e613308d63acdc187cb34568b28b23275fd5a94712093b0bd2dad786a153c6dd1aeb58022d8013ee0d5639e8c16d339aefc9e7aaba9185fad9eca76d0387e6b9819c7f8a7715bbb1c673353fa19b7b50b7dcc2bc069ea3bdc7a0fd3a4bebaab3fc4f8eaab77fc5793532f957a4ca72ecc57f7e1b64cf3be4a1d3ff5df17a7d74a5deb7ff1e34b6361fa7e0097e5cd64dc003fc0a559d14b9ced7019d807ccabb7565198efe0c36df9c1e0ac26afb00ff7e1c6780f176603dc4c88bcc30b70b31d7987c79d88848797d39797185d318f1dd9c7cb315eeb0f2dc661c5919263e06864871b754060b3a893e3e3ce11243cbdfae3a392b8a4573dbd7af1f87c727c8c4c7c9ce478f8137f34ce8b192a9b6c3665339b4c0338bd659d4f71e77a6c8212d90a80b81377522e7a7e6468ab013cfe4171341e1117630c0170390c9ca154d7016756002700ce6656b1792ef12ad9e3c9cf0985b76ecb9f92c73380db9a2af56743c4d170792a2c8000602239fed787cbf82fee4fa97bb1f2d40b0c6f1a8c883d7557dcbaa8967b225a75efde3addd34d5a4707003a73b2b0bc9de5d009ebf8cac88baa8c757dc0664d7f7a4971ead4850b172e6e59d2458b531797b648a552a7d77aea6657934cad469fa2f45e3eada2d6733995c373b82d75b179596ed64e7abc95b6e9e156c09b1e567ccacd7ac819bcc9201772bce966ed2767f0a68795b3a79359f66630488e6f95110f06d688df016f50b107067464d2b86d0867cd09ce0e9dc871e24c95270f6cb364640c255c4d8cae0351ece4371b17b21343a322bb17d1663837ddcdb4f0d501fb8e5da5c38b8c5e496be5e20d109c9c26d23a6dc47a74168c6995f5d0b53ead2bd8ac712117d160c0de097aef04b61f4f63d7e4f8fabdf6e0e14bb7cf153a3d74bd3d747568d575bd5df32bee7253959f6e56fae95474a71b321f5816fdbd42fd7a8baa57a15fa8bb941b2d9f5a65ba4984b156994847899e9262b99b52ca75a0645252545254442ab40716fe58f41537abc92b54544a2a2a2a8fe952282545e5a23bba8a68845bca453714fa68a4321a3d74b31a1e560e65353994624f9aad329990085da1eb128d2e12bd9028845d8757e9d74fa85e91525e3a4d1189526a644c575151f98d965530cb8ad3a85c74152cfa8adbd7e45068c55539d5e451e9a5c73c1286dd5eea032b7ae8a3117656f4168d44217a85ae0bbbb050e83414baacc370402f5243b56a9e74b3d02f7cea36ad8fee2036df60ebb1939e3d74b39487dc60331f58267df64ae5f39855219552ee8d96534e4b778856d1932e11ada2240c44aba8bdcaa53eb0d7492f955ee92997e44aa41289f49248947291e84ab94cb765114974496ff532954a27921391482f5d749148f4eb225da297ae89944331ada2b7376b4d32a5d4e57a5b535d3519c32a7d365ba6d7f5d0758d72d31ed8f7de3231cdcb074221cc86de427f37d5aad06948c7b62798b8b9b309856e44af52521c28147a0b852e44affaa113117a11bd9a0f8542a72fa18742a1d0cb8329a2b9f443a17ed3f7846830429f506ce82914667b251ffaa92584691c0e8483131e2c2a15a98f6e53075666ad93f09125ce5a3b6c136b379bedb576f0b2ae877e3d74d51f42d3b9182f2f0d26560265b5765d9806f3d7746f3fc46cdd6cb6945546bee5add6fab4af73ce5d072a7792be2dcfd9fdbf772d513f72a2f79e75d1a5c1de138dde883aeb96e54418bd5724babb7134de459903f2427f08655a6f843edf9a03f25247a7ce39ea68e295c8f47034c299c3797f14fbf3d12e3a200e1b3d3ed381653a30cc122fbaf59707f38b527af7e66e5ebd514335081189743d9cb9e92e5c63924c47313a1c3463d87d042de75c0dddd5b71a44c8e186ff5c467736f7e967af30cd74601975f4b28c2efacbcbadebf5f3c299b35eaeeb905546844599470ee611a48ebaebe88b363b2058a417c35ce8559cc19a4caf0e2c87ac4bbe899e690a1adf5a6809d263d8257f3de87228ce1e930c31c5300ceb8d79fa7c6ec30ed5aad63d8f4776cfbbf52dc82d993043d5a0a723713621ceecc3198a52ea9cbb3456133947a97422f898beb45ed6d2594e3acb3e9cc19a2460bd9ee4acde47d3b82b91df1dd55ff017be9ce4ac4a3aaa415c87d547df47e7a077f9f2c9d511c991f2bd27310d7597f5f1f4e321e2b9740e0b5f54c0efba6a3a350ef817c4d5c4d17897eed567974fbe3e6fe90fd3942e78eab1a6f79a12aa37e0694abfa0ec9132a5fe84b3999f8eac0f61f85e8a3799d2dbf27befb9fa1eeb85a38bee759961b07b88f099d546e7d1e3c1793073a2eccc52869c75271bc534f0f5f4b46217151c8d88e1af6717a681f5d45dd75bcd216ba3f216a637d381b158b31d149ea7a33dc9f4f5a2ebc0723d3d4dc5219a39283a0fa675cb8bdc928a35c5190626b42084d092af6217151c0d975f7cad2f9f0c2feae49e448821da8ca624f7336c08211c12adeafb40818d799d5b8d786a556745eb33e6568390d9ba2c0c6f86e52432fc849758eecb863210e20b87be77b9b8822741517ce1c69a2fd68c3243bff5a69b32df60e9af633f95b03bdd60b367cb741d58c6fe1615564d375a3eb58a74eca25a45c230d62a92ca4717bbc9344da64f7b1da88c5d56197b69b1933d61789e70adf6b4561e563e3da6b1a7dc96ebc44ca7cf5b7fc2b05b55a662227031e64d2d63d8e79c17038255ac26632e9ba46b4fb442f415d787cb32f32a5774592626a92615d63a12d39a56f67a0cc3cece894d11664db78eead5e8d6eb6d246ac2eeaae822535719d269ca69b09f30f6948b4c37e564aa35b9964497fac062b431d7745ad3b242cf1ec22d45b41973e21f92c3560094e3294ccadb9108d1abd2488441233ca68f6e2be925ad8ac76e3309dde6e9b74edb64253a0f8b3aa1106e9e7a6a325519d34d55e6745df4d78599b0b7cb9dcad363e93aaa4ce9b4142a859a25843d84dd9d44d7f411fd4bb52a1ee995b3cdf35ce26d0f46dd75ed1aec733dad43d2e9152535c5ade38e8430ca3e43b9d6a2d063da01b52ade05b52a24e38e84a408c591e831cf5e52ce939cbd8ce8eb2b34435262552684db7ccc9a14399ed61b2e1bd12afa52ad0b310435612938b83eb2e445314c0513a257a75f5d65ae593a9dc26ac37a25e2748588981043f42a54baa18f42a1502814c2f457e971ce3b773a752e740a854af43ac5cdc5a053a5ca5cf3ba876ec945192744c5ad55eee5e547ca41f01a291807d7b12a332f77d149279d73ce3931c5f386cb40b42a3e25e5589571cfd120855e072a4427a594a66007a45de2dbe83f1c909d86922310bd6a1756b9672a475dbcbba518a58855c68856f1b89c17df3cbd2ad1b7574ba1db03026184cb41593a45e93d207d4c8742a1df683984594ea7097d3e84e74fb75e93ddbdae976ed69ee4d2e936677aabd765b2773783992a5b97632f47a455f1229c73b91c3558d83c3cf1f1c5f2e448e4722a682ef13bc8a81b39d302b2eda20948a03862a4c18e303b58938164353cac2c33257237c480c4a6b8b918f230c36e32847f77f046c5c08d9623bed1324442637dfb6c3744d8d1db5ac6306cde566bedd79bdfaab301e79be2f92b6495c0ce5b474d4902dba85fc1f1d877eaaa0c035a25dd0f1cb403d2ef41ec7e846060df336773bd07a18b11fe6895b349627b069ec1f667e22d1f5833ae1f60e39b8c6140afda61cf10909f0ff9c1c82f87fc521a4ccc73917f303b9eebf79e835084b9fa621e8c6ba2b91fed222f319cb530f8d07e60e4ccd9349f2c9d8d946f2e488321efaeb31982cd6c96a9b6279494eecacf276ea670565f1e70361dba4eaf84b5b1b15982fe5519f7ebb268409f60d3d7d5d12ae8c38856c1bbcff84b5465daba5895b1e8c32e190cc37a5699ebbd771a77ebcf599fef5bc4ad40abe06b95997802adc25c23a255f07a30735a0b7fd083e03528c681fb5565a80facbb9c755d072abbbf2a735d1886606b556644ceaceb40e5eb967561192f3d34764041f37dafbbeab05d83cd50730a156e2806b4ca6a4c625a05af06fb24b6b15e68084fd081eeadc5593044e860cbe99191dfef0d6c1b8cf7e905db77f746f30084ddddf146980316b45d3f0cd01358ff4dbc9954d87824a2b81bebf50cb29f2becf1f1281ded49dfd5d0cf7013d4c76a64ea4924d26fb44cc22ca5d390de27f54b0fbd265b37c3b2656fe9922c7b456f7554934722ecd6cd600ddd59652ccbbade5e2cfc767835ab26cbfac3cb2dadbabc6930dadd0f7cf209da5aca60db8b31c6084fd06615b0a508884719e216c5199ce456718c3216686bc9c8609b830085a7d43ae9da3de7ea8e2513f5544b316153b797a9548ab6462f0cf6cabe9d521749b65558dbc3d38b894dddd690ee0d77095db551631ff3e4091a8cc371f6a9db4c701e0c5c12ce624932e99aaab3c1ae08e7a67120bec1482412c947639766d4524824d331cc9482c244e068906e4ab1d8477605851d03924da691e9a411c9e69a249440225bd3318be5e44c741f9dad3d1c597be368d89f309c9c8946a45bd345278b01c9220c1e1e624c44839df4d3a943ad3c7340b08b4cf78433f8728c4cb7185ecc8459463f5d0459d8439ce1b0878787371d339148a26718907c7aa9745a6fb0203d746a510ea98bc5670ea2774e8a05b3109592648a8d300cc3b0110963f01976b372558eba2b4a25989303557472f23bcc8139f91d5a0b4756740badb534a49b6e9f8d7028c619a4217d746871e61c84a392cd61c2181ee14cf4d3b1f9de71e0b194d3e9b1deb0a7318dec4d2baeca85ad32e114cc842dfc083bdd5699934844128d2e9564d9ee6e20060f31ecf4b94adb499462181091c86432fd46cb26cc723a4d33bdfd443a5dd3e8addac7740967306327dd9a6caf0e2c8f302602d16d14ba76fdb5d69a0ad6e4b8939d30d2aa279fcbb2e109a10e4bcfa0c1073cd8c10e78b00320fcc002b641310526ef8d9d8e6868a044eb119d5e0fd05bef616cce7725ce26f6683c95ade9f0864dc14906406e50f0e026bb1a84fcc35a7b0fd88ffc5a1b699d563934bcb706337ad8b3ee25049bbd9ffc80a6c8561409a8393cc493480263187e6d925a5a853de2c6ddf3701e8e9b188856bd63570a1b82392e48ab20127824bb373cd22af71e3e6ac557bcfeebd3141f2e6bc9a43fc31e63c41e630de266ec9187273a9182fd3c9794a370a7dc4e79d629f1b90645f106fe889eb91089448f78dedd88a1cd986d0676172e50286beb6bc954ba4f8a07642addeb11fb535a83f1322974559e1e2e635f717716a5672b563cc0625ff1ac7b8e9d66056e9fee89f32b7ae47dde51b87b5ad53edd04376e1f27381a500b2e86fb8f944540c1b03f289600518ab55ecd2723c618db4bab641cb1f33dc8a8807cf2b9f7ab0796c546cc41bcc9e3fd014d6723dbc55de2215af5300c4d265848b1c9041b79da8a74f7b8243269339ad06654ea9ac6741f97e65da6bc662990475612e49137c11ed804fa283161b8a455eeee5d1a49ba1989741e23eca43bdfe78cb007e2401ea8446288f3dec3204e439c1fa8f3f304e2c0387a9329c52f48bbb863f36453a81e9e9cd863f5aa45a105207d05218b114a54d22ec809d0a9a130c9e20e8e17f93d6995cbe292ec1e95b4eac90d1c9fb4ca459e06c335c162eef1e6c1c01ff8f3200e0c0289b4192d68334477f5a2ac62119e35c73bf69663f61e772a8e77ecf188c41109129bc1eceedc33f8931df67e5a2545767f0f28bbec8921bbf7242a6918f7f81654ca9eb22cf264f7f733a7b528d4df6f847593ee79af7f1e8ce381a2fab90feac7257140dac55d0755cb53a8930e935eb529da8cce6ec98f22795e4e27d8e7243ec2b98c619a770c3b20d887cb738a26d2ab965df94d77035d8351e46e64b058e3d9641dee47c6fe9203bbc4ef3ce63397654cdbb1221a1e3408684bb0f754bdeaf7961d5857c58b3ab40ee9add345da88a3d103c5ae3d89e64917885661af1713c053e64dbd7b38d9b428959b153805c3d9434f50b92f9a0bf694db848cfd749fc8d86d0232f68763c20f66f412c621e1d17dabb05bd703d6291119cb84c818b6def24ba2a68665595526bee2960603c359cd4ece74b41efa969f07e893a8a9411f23c5f4d895389bef661bb0c94f5aefc2876ea6ca3ce811733665cb5b15811e8521427373ae0071f68059dec1564955b7b44a3a49c4100d86bc10ad92bf9258ee87041a93221ecccb27d02b78f908341a40b818f2f244b419f3f212be002165734296904590a01fb945d10623396b3e5976b5b0b316e49144ce688e5615555431457e718ad95a7b69793ed4bb89810b463c177822da0c979d11123e0b37133232bcebe13af8e870c34348d72267e365875f1a0cd82ad060c0228660b397efd041d3e2028d46ca08d8f065e87e72b342760f42610112d160b8c3d7b20db4b5c4f8402289ec1c7642623264b4aa7fe9c0b2b8d7648733978dc8646404c4cb61399d94d2490c638b793095671ecc9cd6a2e6fcc4e67c17e69afcd2aa868135e0bb0e54867f55e6750e6c66adb51990739874ef418c44ab9cc381cdef568df72a663efa17a5031b9fa1fa736297c7285bb7599fc1367604cc166e6f8773482692e7d2b78cd8826599afc9d3fabc855970c45bd1c24ea755cee5f074121b3a90b4aa05e5bea78cc4839928d4af52a93295113a76f4ca61ebfdac7e0650011330b0e078cf5ca69978082c0404d23649b4cafd720289eb06b6029d65c4cc0001d335dc27d017e5724eca1d05f3c4ec6bdaf065038b44af3a77afda7498132e83e8d3c8afc8f2af09b3497369391bdd38c313cda5e5d8e08adc2e901f5cd128a0ad25833619c279d5a3ae07505fe946c5f40aeab5a230ea7d29465d29290a75835c500f4144affaf4225115366b3dd2b58d0be2b98275412e0e69bce8d6753f9c4d123eec8371813b67654e9c61bff40ada8c31e4173416b4d5e8100a10ac0e32a4418650821c939d29ef82de8e0b72b3edf41b9a0a52123c2023e8c7f3de8ea3e1825c0c78d473c3e34186b751f4eeeb55feba18ad147bf2a0b40a9ee2c7d360c0cbfb9484c0d2cbd7a6ddf6a277847445b72cecb5d277b6230351e923c97aebf7514d43b16a23e9f62212e929e9795d14c3da7c5fc1e2efb278e83a16872bfe72784bb1b438cbfb8a775fdae2bdebe5dd91312a5944bf5e31d13c4dbce8335ef478dd6c475f379d46da17ad146361115d741dbbbae9751b3a564b9615aab7b08f92c434a16398a6c57ddcac8672386dd102a75ce22c8561ab5870ca8a674ae0b8b2dfbb861ebd7caf78a187b394fb782c52de0b1df661e829a7a1fb52eee3f9b121f894b40a3e645d45e5efa94c8aeaeb7da58bb1ebbbe8ae687a6cb6add6f5ae7a59d6afee15d4b3b98275cc33bd6bc534d72dd2adeb56edeb5a71eb2a34f5d675d1af63f7b55eb72376d1a5a15d3f1ff37ea2a7e9cb377dd8075435b6594dbd2eaba83ce6a95cd243309f4ca5eb6c97ba318f1d39841f92b7d32af87876942ce9794d9e4fe809142960af60866fa03623483f1d2719f64f866f4632cc3a68da40f8ce79f06ac890898b01210a656dcee3b91ecf7bf2789874930c7f55d160dcce73794373418e8663e2dcd066c01e62820c3b0419def5d043dad735e995db81b6e16b7c48743aba06682a781a9b48ab5a05ad59d03dacec98381a2f2e069c518006033e734e68ed9ea856248e4235863f3204d2ed8264d84526ce9e24c3faf8aa4ca5984ebe2e3292afcb9a22f9ba82100fa6e7b41f80b573e6849d9361c5440cd12a28c4166aadbf213a8d7cad9717755f57eb50cc9b5d4483f1c34a8cdba1cd09e210026d2d59044abd55191d46a032a558eaf2ea406523da8a3e060d46bb58911b4e8e56838137d65fb6bc90dde14d18b22ba2c570efc218ce905d1b6215d945b9e36244d44eeb3c987786e612774280a48a9dd7062339461eb49156d24b5aa78bb4ce11243b5d04862875ad3d77b51117236bdb48aa8db44eeb749197fa7ba9d47b2ff5deea7b2e5e2a8569de7b2ff5de2b408a26954abd54aa002efb705b5e5d1fcec36db9002e5aa78db47313c94e0d6cd63a718995c254874946420f90e40cfae4989363ebc408c59023c6190a95c299b5f8ed50dc4a5a2749864a72dc7911cdc5bd419912670dc8baf88af42a6b413a4838ab051d85724eb8232e8953e298a4acdf7797ba2d4eaf8b1d1289ccc91bfa878db83b228ea5cf1a141d3b5a152d008cd80cdeb0b87ed8ac055169fd5dd2d39900b0f5e9a4ee8b810cda6a00162ee196d55829a594324be2d9b80ce0cac79da8e362c4c71d28f491a1a922092e123c2023685765621cde3c3eea381a0f8a8b110fe3221d5edf0870008ce112817df198a6f8f43d75ea52b7e4534f3d7563931b7d5a156f2cd62afad461b670dc69308e84208567aba8cc0ec72f6e2c12e3e2af6eb623af4e53a9d46966fd854da570b623673b3210a9d4adbfc08fb14aa5a475693db5c3eab6fc22c67738be594d8e715771748ef172da6c0f477a5e57a351641c2656191f1070191701e7e13a043cc25cc602be001eae8004c43c01320e93ba3ca5d78a1123e374f5d47fb31df9a7f207eb14b3e0d34b16fcf7d45bff0566c10738cd8be31fe0c5f15fe0f7fe77b31d39f59bbd17e034d25671bc387d96c4190f9b8f60c918a8b12cfffbdfffa825ffe266ef3b1c562078f80feb8ccb3c5c62eb2fabd55b6d80cb3c64a9aff00b0f979886871fd3c45c3e99e26101b762be438ccb9805f47099802b200130ef41060c8c0c2965c8b05232ac4b1819ef01ab323e9c0719d24ae1ac07190890f11e64f07065c8c099cb3c3cf670cac38d485a15dfc38d3b3f9687677127471e1ed3abfbf09eba3e5cc6cd7664197f55c68703cca0186735193f757aa57bf142c6f185a1f834d67f8c7f8bfe00ad553e7c071fbe0aabaaa8f46cb4f5a11c75aa6634000000a313002030100c08c462c168482818561d7e14000da1b450784e1947390c21638c21000000080000000000640000006922d942c49eaf513e1ebdce006c141e8e169d9a63149901299d6443d9212cc1e061ded9d7d690b99834d1dbc3039aad615fb410dc601d06efcfa1eca53d6668615f1321075216b9c32239faa99b73eba5b0ca6ed96f4d7429a9a9095bac28cbae6e45fa12c811d26a4b1f6e5b554588bed4a13b623964a27f97e2a737e86371394252a5c8b72888b40e20c18910f31578ce3c63e9cb4e0b871d513b4098bec8abf1145b1008fb5cca6bb18c0d03d2c48e74e62b74f477fb7cfd079466f8974a930f76e6bb87b2b023f03ea25f2a35c35d49c9f4bad7b4d95491452060a9b16ee10209e06c84808cb845434aa6a8fdf47d7bb900d551aa53d022ef0c90cd7d87f462474c0b64a07b99876fce6b27a5e9401b0a20b9f0e5ed88f912218f67ef980555eecc00f6c89a4a213c9a4c994fdda580730df1e9d5bd90da7a816cf311e70de93327f3ad868a013819789c698faac1e721079e3f1d2c46c9a1c9123d95fc4614ba5f68c817e45376d96d6c850d7a281ab0d503bd75ec389af027aa0beaba50c764f1b818db361d26d01616660a58d7c5e3b27b6ca365b1f0aabd74dbf4b9e0f10bee180940b285498b7e2a31349df4f22c93d2d174705826251d0e615545d1c6f3d8879d843c4b7f46b4119d4174729b06dc1d74f1f0431abc838b6e450dea9a472ab13e59acc6ed720737462ff5e328f829a01a0b18f80504212f00d3d60e6d94300437dcb39e4528bc338e86feb67e179403ff67b1d3338b0b98cc5c1f0fd0f65289f14a83db505f44a8d548e0408793ada6fc556853b28ceaa96f21e830d68ef3e7acf3d512762c9f67fbe88a6de36221db18e7a4241fe1814a441cdb8155d700d49e6a1895e74cc14c7cf3a4dde41609d8c8170d5cb9c22a541a2341d741be65114e0222b50b52aab08a5628f9a0a4f864927e4ab38aeac223437cf6193063e17d516757cddfd847306603bdba380d6dfe23f72cedcf221f517fb4445f3db9bceea63b8885af8af656a575e3444437fd9342d33f9316791a9d579c2c5df577d0c10536c58b3616b5258af969ca405ab9f161848e95944cb4954ab90d4e467d6de831b07d958e7541b108bdf36fc2ccf3075f1af5c373a48905e550230aca71ca6343a5fbdf72054bad16b059f0634f8fe51a9e42bc347f231e3ad259925ba235b24834f0163c04643c1c7c47a2155509badb1660026778c37ee6bec3051b608aa36d198d18b9e3745fb36b63488834b9792c54374d027a4f70fef376fe27a1e7527a8405fac580109bf7e2f44690e785cf9060a04f96f7483e0aeacce834f3ca653dfbbd2854cecbea9a75692cd1ac75c0c8282afe93ecc0f5b7d18b5dac6bce5023921a107977c9c15cb971acd85b6176649e23a49dc52db2302c024a46df4207814abef72e6e7c3d4df503dbb6ad6b8726ffced5471179468bc3c6e87c5818da1039560ce1f6c91bc1d4aee8210d0f0823211c17b87a16d4efacc52cb59bbeaddbab273d4c73dfeeb877f3b2b78868a0aad72dbebaab8fbe25218068859fe0db43dd9176f22aed3b9cd207e2deb4fcd4fd92fe8846b192f94397531b878bf4dca089f45c126cb54fbd4df2cb52093c2bf9466a774d10eb1264889125a4427b9774387f078eeb7af47756c000273fab63d8151f619ba5e1bfe42be31dc2723a1757111c56eb7a4b58f7071b1d9f44fe8133dbf03299ad1bbc6bb2ab35062db3f2b1c04b66dea464bffa6dac21b50328c15a5c0a24cc9975917fbe3656f8f28b21c9d732b8bb9c207ef9112c89c220e4262ebfab0398ec56f888b1f200e09f270ac15700beae26c4a90c223fad0b8202fd3324f81c4274cc5105883d451392a41f682841db58979d100889491fcc05f55a4121089915703e5e3ef3a011e3fbde5bf49e18513797ca2f040d338a16315505d60eafd0fe8412bad9d07cdf04ff42d864c897fcbb3eaea3d4783669b84cec8d5357c81dcc1cbf8ec32c85396e2e44acc79925cb31075c14b87ca858997dae28dca0d1d58f181e348e97c39e05c24904c103316dcb97b4831b39c09b9ae0f56cf9c03db78341e2a26fc842371d63dfd03ed4fc6daddfeb0a1126fc98250181376861fce639b89b2e187243ca087cca419fc12cf03509666ff7d9d9a958a06fa274c726f83bd3917e265450b0debd20002fd18b33f42607043210a627b9ab6915b9e949e3c7bf80e10cc2014dd12f8f4b4b3445e020bb41a04a07b54e859804614c863c101bb5eff253940186f7eb9e5ca0f5e7ac3e9e882aa031710d0354c30cb1709b87a1e8e321a01a74b023d796f0935d91accbe79b16e31ced766357d76fa36e2bb50e43a2162b298721f9df636a86f4583419fe3ea5de4a0977365a332fae1e273cbe6f7f1b7aa8e7245ce35ccaf814761f6732e8424d8cd7e7cfa3043bccdfd23d768b046724a92e8550e16dc8a8c291ae684336097fe10663922a4a570d24e0fadc7d393026662e017018624ff540691dc17c526bdb78e57ccb918e1d2e45ab698ddab474a8948099a996fe9d7b1b87fb188639bbcd827f75f2995981dcd24e73e146e9352b450d2ac44d91788b762ddc61796c20f54db890ef927ee44c6b93f512e4c7f9576e1c5c5759553be5423c7a8955e355a736f5001d5770ee5eb4c3f8e292ef2e14b1aeaea003e19565597b3c95db90b6f5651405fc0eb62a5b85b42a14ab029a1be412113d34bf93e855ddc1e81933edd0032d67eac26caa2cb7719bc95ab9d85fe2f6c3af556733dfce2cb82bb4682bc6f9ebc171dca5be73794509db7cda134b398838dfa344805c5f666df77689318925d8f0076630f2c89f72bc837c7635ab5fbc12da316c03f915fbff6a224a73bc14ea731901453e34dcb996930317ef8b0d4e2ad80cdd87fccb25fe23d9968dbc32be46e1d5619ffc91b352ebd04e13575328fbcbd677f505d52b3021011542b554695b2ec2c7a96861d4cfff690992e3c5a9d606a5c8e266c481e8bfd684e509985278316a5f795020adec37b4893bb44cc50f811a437372542bc1fdc9d50d235dbc2ade17799fa08cec442370367242fe0e3dc39c610a8c2e1193a1cab674a87ae0085141a2387c5cb6ddf6171d206ff48c04379d6bcdabd92aedd6e1afc3c8576baef0737fee9848fecd4b017cf5fa1b6df362065b519a1e8a57e34244dc9e617b0c177fa4fa1a5270c2d6d8c39a2b546d73ad8abfba7c52f747e996690a9ba080d27194990b31be094d39eb9839858594ab8b05d1e7908b3bc99c29b2886bb3a9826a18107ae1ddf291a9165b4d1c707e4796aaaad963a9a81b321657c5a1fd666280c0fa5c9e900249b0346108656ab21ad0d51eb1a703be2d691912495d99afe3f319eb6f5bb83e46237e081c69513d92d337a038b2077a4e101faa8e6d64eb4cfcf7c68ef9f20e005140fff66442fa0194b5235bc12a7787ea8d732903ec5f1e5034b44caa004937711e00c574248d933fc4f014c2a3d1d5b32345b7ec8c5eb0396cc7fb3f8bc9ad8e601fd78b3081edd1a6ae3d149f897e6e0c049d8e83e4dadfa4411ff4d34b6ca9a1aea9faac0e838e5ee839e6cefc00c9a709aaa02b2053ae63a5566d0ebd745b8c4a85c47279afdffb8628cea634358aeea4de7f1b0583ec9080cbb8c45061e8377ad1931edd4c83f304ad3ea3874270fcd6bb0f1f9d0ac446011d4d1ae47727e289d84bd5a146474efb420eab9f67c03e124012698b022181a4498a6473d1c3a2563721f59ae1dc121760fa8bd56147f1111e0a601050ab0a32621b3e5270b4b5cb9889657f8119105da9acb4292fd51ddefa2100aa47b59333849da76f026b8147c4e5f9dcc436c47b44b7707f6266640bcebd6c64edcfbfbd340be84df430c22e5650004d5bf0268c8126a841abe47d97a2e4707f27b972ff702ea4b5b6532075c4e7b9365037b5cc807558a5e73f9a828539e0e3cf0eef434bd07de47a559a052da053830152e5882c6565c85090a553cbc7946f21c99e5cb18b1344a7f9f0e4cb8fde6712795fa84604ed54da4336d9bdcd1ff96cefa1d02961fe7023132fe35e40fbf43d8c8d9405c141b6afbb1ad83495f449bc73f8a81d8008997695b17836e3417810d91f1577facfb1790f3c30adbfcbac60fc351c7bf8ccb36970c4c5f51385a2b8493d987783f581382926dcf2a6b2974ba9f4bb507a7a67ac7449277e19f60a5754e40f180a518bcb3087bdc30045912f3048b29fbecf2ff4b73f31a72188fd2bc138ce43255ad5ff831542fe809d6dc2298f4abfb416118497a60e5ba4978783ed1e953a8520fc403cfb6a6504e202078e9d85151b303d51cce46500fa04c50e68098cf17ede130191ef215bae2ebc392225e2d14d838ddff3ca9b05dd0b010a5db038f2305db7224bd0f8c93d73f2323fbf98757610d784d14e9165dfac72a4c49e1f61d4669e0ab03571a9498b6c2a7be52fdf159ea7d9915f8aa43c9e7d7c7a801bda01145e3b96f69ebb25db5c610c5e1bd43418db0dbd114ce79ba1fb46b039b8cd9eb4b86e16ec544bbcacbd376d4ae72497170fb33638981d4990f3c126d6a74992ca721669383e2d4825358e30920a04b1d70e400683020833adf56f0853adecaa71cfdda483c46e67c7917892a5d80c77e731cd96ff763a1f865f66c6bac99ccb61c8e6d291dbae1f212dea5c735fa7fa5342c79793a440bc6bd21e2153e3dd50d8d90c1f2ca6bea1a3b7d4845afeb2c999d4ab8fd331c46a4604825ce2b7e6ecd57c9b433e797bf17ca592f9b7e957f889ede18ceb583a485c9887aa6d915b99601f4a3582ae2f351580407789ac6f8c9f252695b9aa6c8f00dfcd0d4eee38003c961404185915459f9e94814f3373df8a833c8b17f5a533748cb804d4d387571db3e0eeac7c0ccb2d1ec4594f039e9f072e2c941c49d8abe2f0cc1b42b0b9061d9b1cc6f16ab1d3fe521c0c858f124ce085e5343b0377a73d10b83119a92dd4ebb5876ac95951f861fa5906f0da7ac7597f00bf4aee4d4dde43df5bcac0d5ca55d6e5358161143184c9160925b57d549ef7848cbc1c79d8589ba822a9223e5848508e23ec2c87fdc8081b07ccc7496876e4b6f5ca3c9581f8226281e1848bed752d94bd20e4cdb5941fc93e2e3a80fa2b904415889d5e6bbb3984d06a6c6a8b79dbe659856d15e8057049700f9764c7620e61a68970a7f11579db2c82f42212320ffbed24bf7acaa971bfa6a31206dd2c8ca63451453e57e79eb3bb7570ce2953cff096f4cade8204b046a60c1bbae03149da3ea953681f9b562029b9166d3438639a727faf03aaa9abe84452f105e45965a4124f8640c79b8ae50641388ba095ae218403071c28b51cd8746ca05644c1b49b13faeb3c117d9697d95c6acc6590fc65f154ff8aa230ddf7faeede036de5684c3ac5ad967db8b568f3335c8e01703bde83f60f497805aa99309e5ed3d80ba3adbd716b177b217720413c2145cb682b6a8ea5fa1364ff7092de3f6cb8188b8ca5d619f0dc2d03cef9b76201b70fb9ed2ea8eec971c4eed338d97375870f2a8cdd3479f3fc5d4d704fb77c924807c5d00ebb43127ae5e2285ca8d708760c6e4d8fc6019c77859a527a34d0d4915c1e72a1571777005ce4380559775b0ec9e21c774b59a59dfb5ddb641f0acddb830186122236a7b0565142681be5c523ddac4fb8a621eeed4b1f3a4c3a068758b80d91b5cc059be87e88aa2400b60c655218d8985c27ff02cf4f064129c49209c0724a799d3f1a3557c0f80d7c68d4f00904fb64f0294a4350752d5633b88056817e1de14c066f9a0df5030d9b2f9fb1128a2464354174844fc5014f3ff0debb6b05fd508436c6c33f1f894c88806bbff209d07be89660127a9296e08fa261513ac428c3957226d0367decf68d6c5f69baaedb3b302a19fb51d90208c05c1f1dc872c60b45a27a458d0408d2930cf59d85e1a75efc6a1d88a877b0ede91998a29848002da9dd854571ecb53122a6a23656a8fb58c2cf2993ca48818adb629d3c24620ba7d0376f6a634f8f154aeaa22914df9dd19460cd28d02348936154b10ebafa084f6a46653d8de7656ec97d1ad2d37854b803db9e23a465564f238087753d8d0189eb035a6b3fa39eaeda24943363b91e30d6f8a35e123c9d67abeb64243baa154258fd77b1aa1933aab4e2132e22fbcb06ad02aa006b1e1b8f5c873778c4eee31678147a5a9d6e3b64e29a993461f20c11f5b6b1788da1257dd0f7ba8b2dcf90b9ad0deeb9c8a6d556fb69d49f907e98a4bb05a2d5bbfc8041bb0f7ee373512446f34cf6f542f0a514e7c0170a396e77b2191382a68674788ae5c3f9cec64822d9e89b014c018733e6b656306a630da4f2875e4a7a2f6165430c3c424007fbd81bd2b99afd4a374cfc970d7bc2583076d3a52a6bc1cd22a98bc48802989bf14da7c1f4a3a55669d94efa3bc9c889d3e6c28c762e405365ce13a94ae6c6db6bdad00ceefa2dbef1dcea0c61191b1b64f5a81b8bf8226e87ae0b1a5c133f802f5872488a2ebc6a106ecdb1a13047caee9eed56fb184ea3b55537322a1998a1dd771c5db1933f19a7f3b307e35546fe328e09d8c90e775085f96015c83dea07ffa6910469606af851a7f30113d9bac23532d4764b15f53f2ff9eb98146f493ed3a054c07cc07a0136eb08904d8dce41330f504ed7a611ec494b9c0fd8c1d3867de13d1f4c1447482860e0d88660915623086b51aada62e038d5ab5229bad5fb6ed421b439cc07300853663bc54c2f1d4833b1bd82aeea99e0e0a132c89a043aaf39dbbcc7d0f9a8917d6eccff96f940f3f7fba476ec726eec0c335b36faa4dfe3fd1066e4275b7ae8e1db7cd65963044924286d6b493fb022d596682c21996e36584f19f8a1378e86b4f93d25c03f2f20d4ad950a1c787d36c07370b341c5cf81b46632077750c374af4e0fdef29aca307ede5c0a9f0991c16cd0355d95712553df9d02fe1a8de2a45aa7263e2ce1567fd99b44ed0b4c8e04b01e584dd167733658c0f804c4e2413a32dad03c850719cf44c36a1bb46a144509fba51102558fcfe7f1bb2a1707abf172e9a26e4fed1e89b341695367f5d2d283c4838e7cddda6afbcdcebf4398b7540aad849f339be377aaa4c29caa10cfb078072efc4c02c0331ce5d587d81760690bb2226b799c70be9d42eb5baf070267458b10102ea69b84ce5067034a4ddfbb68c63d683ec584336ff8f2b341b606df39be8aec653e4dd963cf45034e0a2d99693671617fa625bb4a5a51f4d980889e57a30b4041541715c5e22b94321bc0b21a45e33b4410a9adc4add26ca6157736e8a8ff9b92bce3415eef810cf811a8045f2b9d0401c4420c83e897f0a85d36f904e8f7231b59128a8b7960a205adc48d49fa5c9e0d128cac2ee34d928741eb52c836e1ad35d86703c669335a690c06747b85d4e292660374e22d448842324e5a5d9222b5b1707330357217166b7c041a468cfa870ca03b2e9a0de4fae4945277fad02b8ba8149a35dc5decb9179fcc391b647720f03042960e647a360041164f79bd9199d310b3c1bdcd06070eed6cb01f4adc8a8380f79d153a8167f74768124590b7c8709c8dd071b588df9f71027467319d7b43a83ec3ae9fb5f11484608bef2cfb20bd9ad58f671016ecced29edf4a5f6d30da183fe52c5a210f7b1b232e11b0f02717e7d840b192375fff6c844cc4e9bab940bdaf36e391cba6f88772140cd598014914351b69e968237a5da47b1df670f1826429e8f9ccd6e03e00d36dc57f4c798e53f086bbba57c106d4a94d954318ba8193df0e57cbe8194ed2927be83ab5aeb5078eba316d73f31d6e8084d56b73585e6e3a66ca45e716bacd0e9f81623a57353c8eec21778b8e6a92f55806ae3c318417a970109ba0bff9703f760fc3450abb8bca5a53da0de72321a486e18c2af1c4a513331c31ef02407d0f79b968fa7d12289bbd26bea9f7d8db9ab4a0b60c78a8715389401c99090a425557ea1ebb02b3205a06402643f3e1c4d20d0130971f750a8906ae077d9671981e4fd41e89b4817c0ec3264fa800064d880c477164ed42cf528dcb4bd44cec1373564c44d655045fb0379ee90e30578522683fd31351b2f31ff98211ce04671e3af8bcff283bcdcac366fe8a2676e978a0fbc3ac6a3e22852e1cec5e07c66c1045a6a52907566fe04a8ef62971e9d3a41b84843141ac76c7fdc7091ffa93c5a46c28f236cb461ab953a0752fd2e053932ffa909ee70275343674276cb92065ff28c2e39d59dc498a6153392cd69ee17f9b5f40992879e7210fda4984dd3125014803e505ffd00ef23ec185c9cd79768e5044c883a850c45f6cfc195912263c0cea60530f7a2e4cefaa2d45aa136720604d2657a023d79e9f63486f3911fcdcb044dfa6648209c8bba974184c64e189db571c526076ad8b094d04d413849bf48fc9f85c61921c12c761ca520e13053480129b78cd6fc3b9c9222b08d9223f3b8bdc91b97d9920a4fadad53de3b42be7d580c15d4bd15f3e5890d8a34096c330f71abcf42e532fa8d6b0d931a1bcc6941877571c69ee36724022d8aa8916eeb7c75eacc2b55a9bca999f03c0715f67f8c465ad47c0083b02e63d23ad14462f193568378a963200a22b7fdfd3d3ff5f9edba38d69d1e6f6b34d8e5d603abff49dc1d92fd5ab066c35b26b81f2de0db0bf67bb82600d56dd5eb3068a5491bc5687916757b3280465ae140b5af73a83492f3cd5a1254d3f96482a01d83b17e8b21143b82987af6b04b6852249d865ceb03badb06cf44aff799f139ebfb96d967fcdd2338951eacf5cc526c2f43f49fffa5bef89b0dfd89bd5514d010eb3a214bd95eca9adab61c8e80a7408fa5599320ab791dd6ef4c603a9e2051828137863f7baad7625977664e9a6fdc5e48a90fdd997782fed38a8097b9db22b2521ceb38d5d803ab79d3a53655750cac86806cf1bd6f481195af8c917f0fe3ebb4e73ac106ae7ab5029ad5590c55915ec50ea59ffff3a3bad53770cfae76d77212038fade7de08aa3b5d0ef0503cbff681849850680479779a331e1550cb6061078b4f01255431f2b012a66adfd141d6a1045424c1d5bdb6808543a50d508c98913749d957767c36c26ad3eed73770276e22e2b6b1fa5a5bacd3f17662323eaebd9af821946dc723061de661355f2cb9ba2988538d9eb0db3474616237173b97cd4e84ed515614f2f4fe877fe3650e4c76ada8a948e6bac446858f5ea8191c5b2155562f48d326335876e459358f769f257aef0fdb3a970562c457f6ddb6b0c1486f14696ba3fe707bbb5ae32ae2861c5c8ada5732ff9312f2dcefed211d6ea4049bd566a24665bb12629dba2797458abecd2ac11b7b47d11b9322091cb823970f5626732b00eb6c694edf6e4df12c1af2a7a3a9306055d3d2fcdcd0be737d57baaf9f3483854a0dd9895ca998eeef5319acc940ca20a97e16d1dbce3de23b1522a09b3d35ab2b3849c666318bd9abd11612016d6a34e743103dbcae84d52fb29b9931578d55a1362f9d78a6b69b07705efa5f2957f9682c1a759128062ccc0eff3caf8a2e410f42b26e4df4c8b75449d08054e7099f446d5f90a1a99e858c0f3596582660e3328b7ebedc7cb352fa6af81343615a91ccb70442cd7b5e0d17608df0e362108c706f1d820a9576e60c75be7babe9023c86ab74a2448c76d43cddf4d714a076ef72ab502860528c2dbd5d551816b6329069985f3ab7452b449ac380e6e0dd217095768c6a2753a306dd1c53d896ef5a1f3e2553dfd4ab4365347edead93b8d27547d53e61f914bb376a21bd077e9b24f664862025a6ed414007d3d1af04a7d4446c23093953ec1c811957834244f312b81b0df7e18b5f6e43d36fed10a12770e3d8cf2625862bd92bc4fcb5a6f065d4b2f41a1908f9acab2bc799e90c405648de3e70b2de0e17a16725e30c69275f08589640720939373d834cf45ab381c2c5d047b352fea3e819b581167e696851efa7fbf0fc27c7240ee67d0d8757c6066262cfc36bd783dee3e8fb2857870079ddc77a88e96935c6b5474031441e3a0dc2a65847ef1c0223aaca624b2bcb282fd83aba157cd1230ad1f0e6ffdbfa6da3876732e542caad6689114d77c02dd116355a172042697c47a887eddc5524278a392c29e1bf8e08159360bdea8774c2492d4f0e465ff2f2c457b3b4fde6b68acc360212648fb42c759d7d8ee7376b0384999bf703b717c7e65cb509c4bce35709640b564cf44cf9c5b79722c1d71e27da8539e1c4acb0164137a0d8a56b4d70f7a9e32a66d9e1c8bfae31270be52783244f14024512483673df7e75da26055aaf32679c982a01c01054870293e5352bee9c125df2c54db4aca570f95dfe7a214f08c94d79474661c6e5dca5f137a5b8bbe86902b814281e2e13f0d7adb21e929c1b83719e5abf5f5040b422eaea4f3d857a9ca03993ee1d66603771087a68e67fc2aa62a9f003b7a451dae109e91e6d7dde6b5ceba036a29afd053950706c558f45df69f9c6f6638b9d9fb2e53875530a885fde380a71c961c2e8b614f531014c2d60df68658bfc65b5b1e032ed18cba0cf9a852aab227debe0e331fcaef1ec9c5b387f22002bbaa66eed067d1851c5193e9e512c03598a386ea8e34fed31a86e30e7f8a62a14b81629abfd6ef2b9932cd0c72e47d70b86d39bed75b7ade4624368a6ef285d730b5bb8122355130a249a118ac3835ac8307353438d8c5f17ba54066c6a7dcb3e13ce7abf422653e73cbb57a8387d92f08a46cd055706d301f42b600d76317b6da949177b335d488e2b8b82959bf4ed75cde1449a2bab42c3862471f4233144ecf7451e1a83b01a876da053236b2c124074892ee925943be11e67bef35cf8ad202122ab13c8c2b7aa6b40ba2e646c72f403671e8d4431685d778a20b5f0a03e84bcb056a2c179667a3676b6930879c62586f2ea248020b45e094e561b892264f58b200052aa3de75406ef2c13c0376947d54b86644da49673f03eaa195cdc28e0e8a43f0f7214befb38146736cd5d5e5b3eaebec491e7edbd33d882df30e1796bdd198d9ba6a86998fd170fde82bab8c2439ea29283d43770965c77ad18cbc98709a9d3433845de62d3a01a57ede72343e5923a2bd21bf17874fac3a6814b21f3c2436b254a4aa0082c603e198c30ec096292c9c36609699d8674065a67b9218805e9bcf5f9b284aed4dd2d98f27d61f5016ef7ebb853a364c1b8c7ada604096750270f2210d11bec8f331cdf7e462ba9f8feb5fd41a0f3882921c26c54c9c74d99817cfb1a8b8398bec7deee09640d5b24dd314c74a6083fbc7dc3877be6dfe534fa5b591a2c9fa90b60a3ca63646243392ade580a2daa59d0151c751af4e2e7b0d92b5041f9bef53146bd8d513ae03d31549c5d42f6ec3e2353211f32390a281648c7f8cd0b004ec68711b8a29cd0834af52a8b047f3f558e7310c938f4c713ae4d8282e7c5d4bc5df0f06d616b86f56ee736bdb47619f47002ead72c4bc5e9f4c17c4def269cd12d383f85eda1d8d7e87946bbea63c692172a00770d3adc3935765330411f46230d6c7e628608aee86f41d6a46483b54696a3d08a0fd23e1782b57331d1851e3775d1e514dec5b8c8fa83bd6a651499019786dfccfe46bf728f9afeafa85e70939ef72e85bca17a69d81c2fc688c36f208415b35bd0e40262b2833e7c6dfc4d90ef68e31949c8f3cc304fb44daf8ad196c517ac77afbe2406d0c0edbbbcc4f9a12a428b37a652e7ed202d01de8b9dc586e81bdb2024356670ac3815286e2ea1a9d7b519932ba36e0b831f23d8388d8e7b276c35b8434dec96eb94b7c0b7bd66521bf86c78272a35e5bf3fdce08118063193f5ee7b3af02ec849aac22fb6648ce982ec916d94d988b22bc49c92676e9f8e00ae7647b5d2d3e26236926119306c57cbc55e649584b4505704c0e9c44c1a63a1755f920956398d993f53bd9eaa846e339ae0972403eab1ba52daa999e451c46250081759538ab93fa400c79e1937bf19c6d686c1e98b6b11c79f6f880e48e807b6643b2e9bcc3cdff43496e02939d8b3c9262b2d94f179cf23600adeff8573904eb10ec9ce5fd5a3e1cd6fe73cfd48b6d29447256623178139a9e29dbda18a486a8be154c88e2905e518a5a0b09b9dcb223dc1fa4e31beb72aa1cb19db3e57924f9341257568aa337885f8a2de73e45c86b9f8db56e2e37392721023ad8873b7ac0877d6c5da5e990738c86a9875a001bda35e5875711be5837981b5d440aa60899c502830f6d826f2e3d298008d8f8e6e3a8bb054603904f7c8b86638151e760724cd20112df37dd314e65cab92c03dda685f187c0d613f8ed0290b4b04e489da33f74df41c860c2c1e7ff5547f42d4af76cde60cbdedd11624131d05ac0732b00043c404939a73d7aabd9dbbed5fd29483a6921e6d5a70cb038a5d5040bcf8925e3fcd8a903e412def3c44d135dfbbae1ea34d2ab46192520c3a50c52f46aebe0c861be67613d14293a392db014d043fd8297cae36e0d92b1abda84cfb16079fb7b9fa1dc06abfb09d76b891d506b64aa8fd7ffe5c4b42d167a29a32dadf684934c7be247c208bd88a29ceb8f8bbc11d037d5d0cb0a26f78e85bcc07816d8b05cbcc8906e2221372e882fe46f6e5e1e3b615702e8eb8f2f0561f029c3b2b132f259a2a00609a0c8c9466feb0ba1145d49cc9db7998d04562487d4a0c64df0f9a9c2b6bec1b825d420af2069a816a5a4ea0ddfb8905e987ab4b53d0f5715a7673b41a41a8ccb45c82e27e9b0fa4149ec49633c9e830834676238cd637f5ede68325376b6469f06011a7b58e358991c7cb051af782b4671425126c2a057e746364b939128aae2a7971f45211a310f4d06c7c42d46b89e6d7f771f7e9a29b7431e52e733cedce4d8c221c8d11dd1d516bb60330d73ca929b9170a41d020703f6dec6b91c1cf899a24b03b78243cdf959be2c61bf24bfb3ef1964158ea7b6c2893499202360c9bd2219f25dd0282f2257abb2865e5607c4c4a0249c8e3321444419eae7fc28fe1ba2ac1fed2b04c81f990f57437507d6dd9d40a4a0b8e6b7381e2b178e651c97d0023c0e0b6967bda7482ffc79edbbfd9b228b8de8604abb17b4f8ca97d429b50da76bee29c42dc679d4e7eb74f7f1f9849c0955db150a798a960c48d3d042ee612508e9a76c99ad95cf147a62bf419ad57737621eb4f44cef2b71a9177db93e039991c6d219181ff0faf6c6f23ab96efbb270d6e5226cc12b019c877d35c2297dc5e01d40c22d665c64b15b3d6ba7ef2b58e6c9b0b91df721d437a575541d7c875c3c778b93983f682996ebec46f920110e8331cf2d162e61c8c362ef89e87c457db1f389dcb7c7320b895b2cae1582b3f9e9a8b97e0de166ad3cf46ce87daddc6223d83a35763ee608639db49c9f661f3d616aafad165b5f30d6c430f5e2ec7c5c8c88e54b2ec697989b0f460573711237eb196f9f604adbab49af68267b9341d1df157eddfef24daf650d67c498fe78842bbd1f6a9e0f12cbe27ff2b51ba49a8c9f097233406082fce8996072bacf13013da834f3ef46a7621655cc4c8e6520c55dae872d95a3e61a24f4e752d4ff7c798c99c951049ce948c4b35f48cf99f81f6ff12f06270f7a32dcc5a0b7a9a4f6be3b5df4eb12e1f841df1e6b31fbd32112e29ad4ca53ebe741bf6e94628cef7fae54765e0437b09712f599d298a9bce5f63b90925d39716cdd1d2e6ca93a6c0ca458c268ca3824e3bb931ad2335728f168b1c7f986dd683d8771f1e22ff18e2247b733d64f10053bdb9b2383d4f5a15b630a54b64942d2297c75c2e29989debcda900fed6b36af6aba97d7b75a2ce9e754cd568bcbcfe71b5f7e3b840fea01c20a1af4e26cc6467634d36ae66a40cde4c581ac8896292cf598e7cb0436a69a6348d2bf195130d55d316cc4a391b288448429d9e5133164cfb1a17e13b69cb6caf823b4fcb880158c543987487dc503ec5746b00e288e2c36c4decbfe2670753c1104e4cab29aea1487cfae6930909d170ad635251c3e769e543c6b44c2568408de29f7e98c89e5941873706bea2576de513522f566373b67c049826649634420636b41691238b54039c15a00b05a37a054d4b59b36a3bd7b662d9923e06c9557b26ed4fd7b8ccb9d7f72cbd6a28762380ffedaf116c3fc4bb40d9a59f987e926d2137596c0890f511ff45586eab705ff4933c8bab16bbad50b9449ff46f6df0f5f3dbee6a420fe48390322efcb06a3c5a420ca464a5a0d2fbc910b75fce1a37e14d653f7c179ef67800afa00d3cdc2bf665f4fa211d6f4709d61a324c247b5866d6ce1b786de63828987acd29853236481c56b04fd55c4a7d0bc5c63c2aeba30dc594532302d9008702350951d76de61f72f00b95762254d5ccf0c79676d75905ca06928e7a10f3407d76f134ff27ae1aec5a2888d1a45fde25274eb09bd55efa27d57a2011eaca99d4da1f333b535f4f841a012c4b572933d557319af28a1ae61a919871d61c914c506312edc552aef74276380332d4af24aeda1a4efcf29047ce732c8aa3e8f10969a44439f08d2a3fc5390f697fe80e19d157ea02aa329ce6e9177742212e3194015b4aa42ce4bbe5d32edf660a925d67041cc63d50e4a39618b4bf1af9a1732e42e4a22b8ef5f356c18565c12db31df60d0caa16ddb300d0c9303a0116a0bc34794b2ce198ed94842b44315f80fd03602b2a7043a739ba63bf1f0d2f700a851d1bd0760b418c83cb2dd3c5ea9aa7cffd3b9972631795f152810d84f84f45420532e6ad5f9fbe61df7fa0979baa10a080e9fda2cebc25741824fb16d53c612cc4c81cf12717ed05b914a86ec35197bafed8437fab3b3d8dc32dc47ce48da7ab97bc43c3b187da56e61a66dc326e640aa4771c267c43653ef98a2ad19a116ff152031af3bb12fecebe9d8d246af6765db9a757016b1565502075a10bd9ea44a0ebb808c5b244db45a6412a0a8f99762c49708d3b5000fc47301123e25a0d32c5f345476d0e9b2a37e53b2423c9d8c4bc288672a22ab4246aab995fbbaea5c7f3d78e787f06f93ee949757bcc06b1617680725d5055839699c534171e76f3c5e80320002f6a636967c0e4144b907143b93e88678f69fff7bb8f19bffb9288f59ac2b10d5d454439451e8ffc38e5293d9524ebc85a04170d73b4bd1de5c2d5b66d518bc6504ae47a0c6595315863b0996a98957d90f3e9a6d60dbdd61e04b7f9173b5e578119d423a37e8b471d02e5d447d7e1947ddc8e8f206e4e8bbfea0b5cc1b2e78aa4fbd9bc8dca51ebae12fd5f669a1867a2e3fb86429cfc91f522c79646183dc889cfdee29fcacd70ef6d2fd79c197b19ac4d1a2b54d449fc839f85f1408ce52e7a945a0ab873f4566ec018839e7c4da79a9f215c689533e2a32d12e5e056e9482588f90f9a0332bcab555caaeaff92dd35adf86398b132447ac5488886fdcabb4559e7cebd32299415612e2c1070cb9933ab32a678f23c0b14193b5d87c8d7210e79574a107d73d2d3c67b029d2153c592139e8ac5ffa80eafa5866e8b4c3c782c347dd309c2fbdaee820d32cfc58fb4293746a98bc983bc9dfe471330bed7c3ca463c1be4d1f03b01bd9a820f74ade30078d10281a3ce7d9112635e0b1111b33057f48ae9455b76317acd89193efd4a61c8c7a32720e984a963329378c92e5faca4cc1053e41c998bf41a445a79c7ebb23ad9ddc722dcff91e5c6349c5aef7dade59584fa261f1666347342e7aa41dbe521ccc910e0140bc1b8257e231009969f9ed7ead9659f43d21d53faff2718783216180a4d19cdc871e95e7cc734021d04107905f60c2c3cac13e4fa3aa47b68855ab6f0ad1baeca4031e234af12b371e2fd6b40175d06fce4e7b9874b74124dece0789639fec87de62b276602d9b740f657362c901f017107fc860617cdc05748b3687f2e4ec5ffcd35dcb4aee2fa03beb423aee2ee190f7ad125483c86c1f017d095a8b05103b6cc4a2eb8cb8ca54ed78fb845b1be0fd6012290c8cbea696e4db2424d53888128b62d744e4ee6979118098ef180bafc98778966e2f08cfe5e34a751f0e0beee2573c1a65e51b0a3dae8862d0f237df53a6f98e560c136dfdd9431ca84a5d7dd00f003009be969fd145a0a65b0ce50602c8983f371bb4b1e4ef89841c9721ca2466f7f723d8a243b182c6ae92f72cc7bcdd9dc0a874c7d0459f43276ac62d36cdbfb3d5e4f599c34c7731454244bebba236ce8be4193296a6e7486622038e1af78b1d9b669189f31970df2fc680308d9b6c105d0d44da68d76cf996cd26eb35e4e2c0fc471df4c86467a12158d1686a455c6e204621b09c60c14c747dc0a5bd595c34e32018bfb0a1379ab920b380d62ea0220cc846c8c41ee15a2575ab37f2ff75a8dc5c8d06d63fb90c3ccb4f7b4999be90f2c19d7b370b7ea06970bd8c39610bff19562138af53f3ceb2fa3b4ed64768778ea1b9d4c4f72391caeae2501b2ac20ddadf0dbe3176acabaccffe2f81af77b2f11d8140429c206425a5e249ccce9bd742709811105fc5d4c44532a83d5c1f00e511a45cd3d2d0ae7423d4cd337fed82c87fec9af2b92944d8786fdeb124239f0ccbe8cc5dd06c4c5d54419c3b2d1114ba3e452036b2449bf595b0a92d984e2b2799123141530e9c0d6d82951529152bae2ae3666bc7f96718b8a140ed960da4d8eb38379786793f410ea3b0c76654b36cc6315f1a2aead86b872a17fa0112e7c8fb079c5e536ddb8599dfd089b907bc152f027b5b132cec48911e54fb4856641e26ce97a2cff3dac513b5a1a3b334d51064d884dac03003a56b4ecdd78dcd77c97136e110f8717489069c86512f0c189e75fbaa8578a2f7d5c4ae7bca487ac2688e7d4b8453a83babe64bde4cad0bf20daec7b958eb91e8acbecfcaa8fdd95d58effc480364fc29055ba5ec61dd049a07123d2e37e859f1944fffd24f60d9eee706fdcc9d0c3a0bc8f7cd69717bf80dec8fad10a8f69f6dd84138bb6b7a339f47f024bd4968745237d517531fab0c9bcca3a58d7e95e0ba70ed6d3178e1db7e0b781601906f5754d066e601b8ec0d8410a00b7ef9017640f14607f070f653be2db551639c05de34bdf78a56b8ecb91b3dd11cd5e79acd1907ecc7683104e087f8e815067024dcaea2650f845025775d3a719f6b9582ed700d1f572d608bf767582ae0ce86ae21022426b3a87276bd5a544d3c34d9a83d71707f77f3aff2d240e8729c6eb787f5652f35b19c666ccd5f66f53683a251e52d47bb86434c5215df4ab9a3bbe1d54ec5f71ac9af884ef252c9b847cc31815daa2c364371ff950bfafc8c7560748b83bc4c6edcba39458135cf1f4822b7d717892a94d8ae203903b612234f7942fef6bb32787e18c16fe71ac02b14e43c57a98b27361ce889dc44147ee96188742ce4b6a7197edbefda0dc9ea333e21a8157d415f4ba24971cda556d5710218098f82e5cdf46b619c0ad4205aad94de1b612ff4061d471411a64727c6e23d0aa504efa7e32290614a1424bfcbbf43a3f9340a7265107ad0b91f998e4cdcef22367cea788a5a628df1b3e877ef6d365477c0f7c1fdc33cc22a91ebb7626df47f08ae14fe45e691c3bd30090986720b1d3bff1724195f5bbb798793acc6f40405076e1a168383c51754db3d362e5700b736ba420614428e0e1aaee7cf5aec30c018679fdc4a0cbdc010a09bbe1297d1b32e21e5b80a85787bd57944391ac38015941c6687e96371cb79089e3345bc78353959843afed069d8e5b7b4fde44815e8bb3c3b4003215b5aeb7ef3445863a916960cb523202d0db9d1d87eb56465d98644463a5a8e30dd28b0d37ccce27e3a55ab9736b8dd601b00d5308b57d9b850cfeeb2f10f9f1dabbf1403db99d6f321d0ac3f665929ff111095411c327539bb1608bbe86456dcac6e3933222241ce884017a557cf833e23711e441e873b40bed1d73100e2856f7a00c9abc6f35b78a8170c558684f657dbe87447544b48c4e454ff17097763ca1d02894d7f919020dbc25f69fbdc21d2e6b6630b990496377082f43a4fe4fa5d9902a02365373c183957466ab065d0c29ded81f5034661615be484e45f1029e2c151c7c6ed6ee7ef37b06b8bc4cb0da8c2ae26e0c16299bbcd38e47d2cd0f3586be9c5bb896c7e1dc4c9ab67b102b3f794fcbde18d138914fb595dbc8dd8dbc888304c23a917411452071aa7af11bbbb73babe11208511e47c14f0388f8323b781470cbf1d9aa53c1838ad2220d8d8dc3a938ac936b58eedc190cf2790f5d2581f6a2ca64b0e41ea9ca347f6fe0460b1b2db5fb5c7aab21c8d2de1c0c33b33619feba388378a6e35f90dc72f1270996217354f18cbf8cafa4194efa3efb2fdc5b2f2b946d9652719b1c9c8bb5d2edb31d6b5932f722660316af52b292799787ede0c72d07d866378849998928dce72a31c8d512ee6397a6a9bf389b180e7a445cd61557ff2147c10835de5a85259437dd082a34462a73f7dd869adbe044ba6541e9e54228b171d0e4e191987551bf989e71a5f31b7d69c995a38d99953abc121a13b0f3c1b182f121214d322542f565bd3ebc508ea39c737e82590b826dc19cd2808deaf090ca179b7bacb66a109a8a6a5c519603343aed60721959f277c7a04d2f2b1a2da787f2ee4b54a40c0a48dcf59e8d8dd4b10cb33f0e9c4dd2a7791c8386425b6737fe38d93712cdfec2c16b1868c1e75a2c8720d61c68920332fcf6a2490057ad68945f8f3bb212a95c6dea1e986910bbeb93737318174c7f0a62d865ca106eb40eb7d453a4974627ceba39dfa455d0d8cffafee91d656a77ebe56ee5ff39dc72e928cf535e4c6bef8c7c13b8ab244eb2b35890dbaf5834e8c719b4562ad4f6dc84f2c513855044c19a7882b429b0ae9ea00dfd804f53c74547fe4df0436d9c09c4845208e808c1066c7e401a8e66fd3e4b416227635e3d2514252fa0982b07e9ff786f502159e8cbb162ccce90da617f2daab0b2222d25ab4f654dae5d1e64887844faca0ae7da2be27022766df27dc961f200950d02932bd121ebe8ece69783af87044e8f014492d393ba7cb1909b4f0ca020c58583798a88a1366643a2b6f224c1d59a7ee62fab9c872e346de10e042245ba4cb2480367aafac7839e9773972d38e0b339a0c0ab9d75fc9a62f3752f704a0f720424ec77f09b10e450d93d405703a20d73e1e42a8dce1a6041b897c51ed72e0fdaebcf0c5b7342f833296a386324170c4921893408ed6780c8423b196fe9ac8889d6391ca74d9a08dff19341cb3c01fd86b04d9ea2a7fe0ab1b202c009dfe2063ab000f8bcb1fc0ff4ed2df88d4d20ddb3731647d1f4ffe00c6c735087f0991f67d60231df4bfa5d62495a3a983b820e629591f8410db97b99492d45f3ad7086e9c8dbe4cbab39ecf0238ac25ff84a9eaa83c71d88a79128c98879dd62439d665d41019a41edaf871fa026b09780c0287b675d16116bd8f7c8de5fd7a79da4d45697677c87e8a9b5b1ec7e493ed760ac4f5f7b581d36c77cedb855e532400f4e9bceda104ed9227e7c1ff24b1e120b81011e24ca881f4d6b9ed1c8b94fe2f8edf183fba600465ccffa8cc1c2e8dd02c61399e064ae7cdd881d0968a9017b495c25b5058fca865c20c6b75620400404a4fce83ed70098e978a04547fd8dcd88b09c1c48710821a4e72191c22a2e4f1f04418cab0deff635c9e8ac981ed03dbb5aa862a15381b42cd4cec5c5b3168c3326052ea125a53a7a9b9b46fae9250443b97a915151521b8cd9b9fdf80f52c6190b017bcf272a875de6e1e4fa433d3a31afcfcdcffbd8095a50e35340be14582b5b9f189cde038afee2d5ca2b911ffc6388bc19287b77ba3629274159d583446b9fea7ca80352f3a6f68f0029564eb7688e2e4bfcd3bab651d77d64609abcd2a1a36642602ae433abd4e758d33416034d73f9648486c46f8295175c7a01434c1049a029f5e889da071483a55c79cd221af0c1b18d1840b9d35fd0522729010763e4711f50467f7959acca39a7c9317b08580a519d0efe81c7cd06e66a78bbe289d38de5e04095a374ec10a51f34fdfe8a73aecc030ccd7ccd9401cac2c02401cd38807cc641270ec97db36f49bed359581dc08d590ca00819a15656d3d6e10cfa5222401a9ab035de63fc1d67ca00d09017c2797c07c3f882535e9943fb2bfdd2a72150d9566af4befc685b90f2e2c464db1d4bea352705ff14e05b4552b1890b5498c1f18a0660b2d934300453db99c0963b2775fd0878e56db0ed27a2255815c7faefb72bd2c8feb4e778afea28e673a9ccbfe801a3d6e9dfa2b4c7d71f5b77eaa118b1801e8cfb5ded6a9c18f1cdae66ea426c9c494ec06b2100e76775d468fa36bd348340200045e565ee93eee78cdd64d19681c0410745ab3e48922c42b019fd114f13d31b9a63b51a09666cc8634430840e4bc15c8c5bd175f257f4345905259952ee1241c98672a1493ea3c7d50fa682cf97e80364f647eb4e16a28538bba8596b8b66fad2a466da944d40710f831434977065b00c0191258fdcf067f435cb0838de084094361c81b0441f5401fdf29a90ab0a3c69edf30b6e778095e5db221d951c4717a6eacaff2c028e7142cf20a5671c1f6b488f4de712aa43de21065e6063b621987d0d5357f403f5506892473f941c1678c6d715605d98571dfa9d45a5c497aad987ef8aaa50536a462cc1e08ec2123c7e1db064d99a603ab259cb054f624d8041abb6216ff289cfc98623dc16f454dede4e5b709d840dfe244c55d47c92cb28b834855a1cdac48feb7fafdca8f6be08618fc51bf98c909f75ba43839f7302300d7cefe08e703c1a878a51b337fb6d7fee50205d0a3d3809632a5302ea055d7be1bc591027cf38e9f55b47f8f34282c6533e4f29c3879025106bc0e78759bf7aef3665d991eeffb1fef619fafd4ebefe8eee417d24ec47d7e6e168acfdd5c02cbac60bb312e91360876f6b2ad19a979753571a5a96e96ad9c34f767d87e87f7f2591bbe7825ebb9fbed67dd5090760ae3da3b7f111758d51bf7006dabbe37198609f83f3e9bdb1b7db92d6e56e0e156a109c3383820c36112d17b066b3f93c1ba0f4cc0227f86a47ca5e4887eed5504917ce52912a90e03be31715b08d4784db35782f1cd74360562b17997bafa289b9a94a450b37e9f102880426c064aefd53f57eba1b1d01aefddd0fff740f90343677c7f6bdf19485bd54a21a0cfa89777c8c4bf527ce05a5121e88984a6fdf2b7e03f37e0242d677464770634bbb746022d6bf7fa9b7c061f0861d97ef9f8ca61d2c6a00ae0d5c27204606f4a1f9c4a0e69ea236e4270e97703d45b025b1902fa0a9dddd1057f9d651465d9fed0b92a179d869b628c736b09e00b0fce8724746ee52932571f690510addd20d679bad5f3e00f26c5231892e9066aa22da9f8e7baf73c7f23bdb3ee9f3f3c42db1effd3aadf3697ec5de62e02e644815f50831ea56f0405391125d99961d2c38e92013465feea03bc91f922e931edb5014c86b9088be1745b9ddba4d1ed0e294c271f3e8973c83b25f0c2a2bb17830d94fc16b2780020985f85e6e82943cfdd77fd63848fcfbe7e0b9a25eb6a1d574a731bb6d8bf5500f98dc4cba2c9324f6632e45695aa9d0b4fabcdc964df066b11835fc2b12396acaf32fc0dcd6b67053d3b758f18192863419ec9ec9e95901c4b2932ccf00fe8609cb5451a56842047b3411acc7b418d8d8da559da4b225742deac5c0bb087fbc1169a4616e8a19b1a8293e0e87ab46c3baf3bf9c0ffca0fa947ed724a0915bab8b790a1022debdd2eff10d1f11b25c8e61527621f244fdd50ad47968c3d03035990a2976f81a935af7ea8b748a1115f2ffb372a6cfea79ac07b5972565ef70c87269416388ea46587f8c7dd72bd8868741b3d7caeb45f98281102904c369a81df20f6d051753e7cdd1fbed3108c9d5214afa5ae7d583a7669c32ca40323d5ba36c986a586dda1086f7d14bc81eda8e83065a0aeb9a53fc8451a3bdc331a510c6546880f840fc27078af539198ac7bff27fd4c056a2d2f05cbdbab051bd16f2aa218a8670731173b6db8c2cc49af6c0e670f4cce8633b596e0e908008d3f01868e3cb38a898fdd4f54e4bc8d2e457507d822623075a86d23e0bfb736eddd3ab8f00e13fb60f33f126f2130eadc362ea22698502ae29ba641ba2ce38dc42359aad4d3837411a583fe2a7868d48a356ea77001984c8da217d3279ceb94bbed29072f21d6d8cdca4bc432827e1911e3328649a78917aadffd17c5325ecad95edc346578d2c31ba601125b3fd26bfd01f5056dd41903ca5267dc3928434c690863bcff1464f2cfd8493f0de38bd92395ce242c7ac93ad37e3de353e8f733820c14399ad24ccca38b38e2ebbf7724ab394e347771af47b6f3f2088c809a081eaf83d9fb2b2c70f1586a68d19c10c503766dde1443c28d87ad5e12412c0175e6d22731ab33bd4ca8501211a602b723350c6c22d8a6b6c6b5e3b66178215ec37a46f475a50c08b6802e6154bd713a5f32821bd9f7c947a5e82f5063ade889ea95c2a2179a91583d603b26720893cac4bbdc675dc5ed59451d5272b953a67dbfd0d3fb1acef6bc242aca1260f15c8e37c4087943582103c35601f030cda278ce6026e25f03a5b6c99dfed22c057b14c06d142aa8d48731f106d21d5dd1c4d56b20c309bebd27dad67d3622ea360377f8f66bc6007045c3683aa33916bb18f389db65c67d0b1d19ae463cf82331be9032d6e0506d41036dca0b04d0ed8215986df0db35cafb6ce5eba56f5efa106132bc37793e0451b1d38f7b0edcf3607a3662626b72761e1461f3666e55da8b983ac6f2570062f523f36f35686202e8214168098d45c67ae448856f25f81ea4d0108dab82ac400c449e92b2282dd6e51994333f710aaef75fb2cc0ecb4007a1e01228e3ec4b2c8bd54a01755f368f85085d55ea6aac5a71cd7df2ce5910dfdca9aab60af38f90fdc7afb63ec729d031b9627a2bfd078f0313db5648d603c1b66b2894e59c5411ce56a22c747959437557052fa0abdf149718624b1448a6c070fc764a868821e238fb6874554f8857d9d10285df48ef7af1d0a504a3d322c1c25231bf2fcc3d9d64bef4f5cd3ad0f634f8f9e9afc3d221855912fdfdeb6cd8da186a7feb3bff93450b53d7e013a832f2ad6cf1c5581f9f5cdf61c8c475a382a58b5d0fe582559fe3d45b3fec37a710609dad76fa86f4dc3588994a9b57b4d2d1540a9bf8d2a31d28944bb9e76271ae02972246bfda57e9507205a79f347b540c49931af4308293bcaf2ea4cb14bc3e804ee358b916419ca70b4bc1918aac40e122cffcfc91dd1b2b2757428b3d8a0a873b2c14d31b0edbfaf0ec68068d603d7ee0b91930dd2c87037e8e072024405a4e5b78e75c389ed74c120eff32cf727d41eba2b74865e6bf64bd145642a076d6cce66038c05d7e3a9f1833299955c68c87511186c2b1786b30319de0c48002a09f889a0f0532916b87317cceb25a5adc9c07251b07ae54facfe2b4e63f68d81a2ed4ff1f7be0eccdbb9bf98587b9cf1c965efac190e566dca14a51e5864ed2ed1d1f9292d1e19bd65a1ea4fb0f0adc02531220184f3fc7aa64ec5cb1082988f3157a3ade370e500cc687431104dac6b59a2317714d89c1e7233de94234048c6a2dfa85612921fbe0322693df7436b97a7bb5825ae9dcdedd9598d0fd0c21622abe3848d1770dc1acd8b58ab0792b612b58d3ad0dc1179331404f8e38ea0aa1138d5a5246b404919f01ea3cb104ffd8ea1873bca87ce35e323e3d40a0f46308cabd34cc4d656e07dc7439a8b496b31fd6c6c55660e2a0efd5a8d8a21f0e96c98e43dc8b401e71f633d1598cdac4caa075f1972a2a5e5dcb8b3e54b58120b05fe6d212336361cd997ac2ee12d242da3868100ee9bc93ba1b4b3b9e8d7cb2674374c4812df663613b5ccb0029429aaf8d0f6b2e9aac2e0f6eb5fefbc0415af7f4ea687fb714583435d03b72ce80f8612cc6b33c3a1c83b81b25d41cd21c73a253393eb1ce48f455ed4c7d0e06ccb132ee9c478949ff566d6252b43154462bbfa9261822632128258881229ad2c6186684012291017c4cbc94cfacf28d233c01e41d5ede85a04a4a03f1ca16f6544ab6a87de2a25baedd95a2390cf9d9483df42283a6a71ba21e57429727fbdf40730981b467c0cde3f1313e8d3a482dd728ba3e0b9b46ba60cda6cb9ea8d6b3d3240c4f479e509464cb355030895e8c0926d30d8f279ce8541d5de446d4f6b550266e9c86c920e2a560988558de25cd0b7c825f504a39f90aa7d381abe09fcd1829ddc2a59f0f945a3311b85a514bf61316bd9f84019f29398189744a4b53f61f077cb345592f66a318d77facc94cfa3bc0cbe87c9aa63b195858d202d3b11e97f4877906d72a334b53b0988d05a4df33a4729372483d055f1884f6930ac2791c67c21c6181124f2a6bbbad595562ecffd252a5f42a955dcfe1940ccb868f577b98ac9be85ab519893f421c4a7abb4127377614cf0dc1d92f71615e34ce0b99140f9b1760b18500d554e03a020cef53e49c7cbd0ef20ba8d8f0caa42714ffcda56cdfe35524758d3e38b913d6e37188348a504fb4a36602df91e31e964bec75312ab4924cc34a8600c088e99c614ed902e990f594d71d57c3030c8ddf005cb90045137b194f342d49b78db03cd43222160d2f197dac2ccf25fb0b45650055d7aec85914198c14ffac19d93c88a27c79008b2a0300fb2c3db0d64f9fd6afed59f5f773be28579d1084acb4fd25e289264d59caeb86a588f2b8c35ad60d5f136e76647f41c335ebfb5ed3a0b2aca5b1625ccd32aafe5880226eeaba24bf424a7547a25fba36a1aee04c3c133db2cf4b6c8ef4b65a2a8ce1d71d9e19767dd48249896a83de91bc26ed7faefc0d923eabc50ab48b9e3e51a84b647f541cff5eedb0e8630a24353991e0d61339e3f5397db782b094db03eb2eb969b7cda5f081412771fb587a82a1976a1febc59606aad54de66dab2e801f1ea8b342d5fde45c2a568a0fc93402710e62179830d18ebc21349f319c60383ae5c3d33bee1a4ad8e7f9005987b8ad3e12d145d94d781ff936f021943e71aab00ea9d7ffb32b822f4b796a6958ff79c24de5d7526cdadd0cedbf21de71e2d7cea7aecdd598a63fac6775566bab1ba283427faf79bc71bb7c080459cd89383946bedfea32533ea61eb2418c24e72421f47d1cd3da009fc6e6e1eec5298053b6462b5ce416e8c0592f7104000ed600a5405c85f3274245bed727b00044fd9e0254c7b93510df084cb799e9933b99fafcb4e31bd0c5297bd8cd2d2dac8c1df119f3025a9f8c4aab39625ce831070dd41ef35b08316b8d2965138c5a998daf878312ae92e482cee869a0ac35b6662aec2a0e0c573d235c49b07ffbe728928440eb639e67c26241b12f14c6543d3e260ec8cd3c123d4636685496e09295ad3ba212e4e1a2892d668e489159980f416e28c71ee28223975b2993c8977f2531776bc253c48618b05361a62184d04006483a235cb059c663094481eab433b0357d5af935056f34c442b1f7d7538113881df401b03ad2cfd53c38d22649e3eb7d3bc2db4a825893086c6f4d56524461de85c32e0bac72b8fa44a2d65f689e04d8adc140b8389329793711b3a54219b410fa07259f125dc13369645fa29d74d5f46600854c245934102d2368b00c171c548880b934324a5d774820309f0374a2c4ff6ef68cb5b3116f7c5269f03866ab2252476266f9242f9589431cc6889d00b67f7476890ce960daacf362e29031718fda7f5ca7703804345e91d274acf805223b4e40f93b2cf7d4b1cb61da1ebbd08c8d96db67a10ebeea6d9e073194134caef8b0954ba0c68977c1db03441ad0c20a763462df33f69b32070ac283a71873ce81cc242d7f8da338e69ec73fdb6aa389a619ea1ac1dc0bd36c6de4f5c70bc3c833d97cdb08e34b12ed0521806de6ee98dfe6e4d693f4d03bcfba7a20d0c01b41a4dc626ad66a8293cfd9a5f5625b2f663d92d59b0cae51a1371de10dfb3e63da76e2a9aed8ed2e46c1b5adb58f18349694c212142c236943ee0fce59006b500f6bd8362b69b2af116e85b9fdcc36496c35ed744e5ae163e99ca907c3c7a011b4f2f16cdb49c9b7ad0eabe77738871e0268f4daa40d801e3bd5de8d48f6c1f0ad4d21bbc3b06b5ea0c8d92e1065efda6c0164c68bd8f7d4a62cdea07556b251c06b1ccf2ec2ffe7c7569fca69b34ace4d2b6589caf3d11689bac5b6666618dc1aa8c60562f47f0a8f6f7118f0c19befc0f017e66b679700926740cb8a6a9b79016faf2c1a62d09b445cf4fc0690bc4859b670b191a661715100b414f79e5f18fcc73a9918f85c61b94d10d58f545dc5bbb9ec2a6c1e0cc4eefdd497ec01b89f6a6bc7b2851b37fec86cb033235fdb6704e0781ea0df0f03697d4e8e68bed69eac9646f77af17549f6c8f7f5a4c318eda42c62bcf64416edb1b7705006ea471486179f2b1d3cb07a4a19869bc9952121f22385b8ca45ed986dc7d3852d97d9ad82fd2f536a9de3155fc1696395f9a0ee4ac4fc327660b1e853ecdce34d81d8ec87609b71a9dae1a737f6754cd397377544d9e6fd5e4a5b64a520f1370945f7e547aa3cbe85d1b7dad61fe0966b927b6d64aa5be07eeb63f6098846bd4fefd1237ad1f6016f9d8c88dd20a0de3fbd60fb335f2bb45d207b8e67d4e87a20dfd50e977d0027f95dd9d2a1d73962f1cbce1f093fd489de83c476c5c070266dc3ede684c552d4ba2fd7492f010adc281ab744ff1d6da756d515313cd53a29a7e86f06b141b1d0ff059ceebdd071bd5ebc5a739da07b0670a51aeb5973614543350d253dfaa6610881b410049af01d3b5592ebc677e68c536a3d2c1d5191ae0d35cf02bbcd66be821c87b9ae41ada04996faf0a7e17496e6a0534e89ff912e3ecb1a618182e90a88dabba5ec277618c3ee2d4d96c4bb54ffd505eae2551db2530cb883f190dde57ffa8568faea07abbcc1de24d9fda7fd43e75e5b02ebcc412900e68344b168a40175ddce1e1b0a6ff92679a90498aa87f881e07a4687257b536bb84b9da6d6ce22180e70cffaa2f900a2a4d79f5ea5bfd3ff6a5f90d0c9786c0652f5f5e901f7cfd9643f748ffa69f904c2a4375fef49ffd2ef6a9f60d2d948ec0d8deaf3e939f6e7cc040fae972177238b54f81684fb14bafb1abe770935e97ee5ac127888dd936d32df19757b05e93451e97f8111db0a3315fbc6751c10aac25d4def7e2ca213dcbeadb40edcca47b3500444daa213c4a82b494838e605471a9685f63db8acfe810974975a041e0fca015266e599a28ab70b4669caa1c0c1fc8b408b0ea449aea6f122e1da93e81d18db1aa065f3928b80e220f5a13f71334e5200987a259c121061b09e03ad329921d9dd83348b84c61234394808efdcbf18e456d3d469ae3fcc1f62a2148031f792ee68a4403a34af100b22d996e668bb8f367c6eb80323765173b6ed95fd79d6256947816181a37651aa9a55333bdda48691e52feaa597ecf2ac8a1a564716b133d085ee09112558bb1fc53bcf3c2e7bb10c9010fc0c1e156fe14c006db2eb9f40fa7badba873f74ae2a57c3a7603c2d7af735b13775e4a46736d591402cdf0022b6551fac6db49b68b2a1396563cf449acbd007753a2de31b768c997d12fe780c1fb537dbb39c3398438ca2e1ba1b6c3124cdb9223c55f7c0306bfd3e755156f203e6636345bc94187c16da008f5c8a60bc09caa5419df1b82eb59a87aae46b93f464262d372803ad4c308f46e29388778fc5551dd6f5a6189433c62dd896d82627d39e5c35a016ff4d1e60d81a55fc3c53ed05f805a59f9b267beb9be0bcffc72845651256ec7e434d29739aa13f4d7f4e92d45ef7d922e18953c830e920906e37cf94638e9841a88a012468ca4baa18ec76d54cc311027b1582b2709fa76ca775a43abe2362d7008d8df8fed3d58665b1a3300ae4ff700f9962bb091106ef45bdd241662ae1d277ef3bbc90a9b6bbd06498a4af0da1426d00adcc9395adf688f0c2811881d492dfe13d2f3765904ea0df0ebbeac3895bc2fd4e9fbbbc19fb92c23608384ccb7d5aa5c117cce308259ac1e8fe7621e57c839042eed723dd3bbaa0b735cd719a0d901e0edf3613ab54a7d5c67df3ced69e6ade6604756d432dc003361e4675690e244024e7d6f8977b19f3a6856e62dd8bf4f2e2b998aee1f98e79f30264ce3379f586190a9a49dc67689707383751c7ca25e49fb1c5ed70a85d18c2b76183dde59b0932ce7a1ce50446424169e8857dadf2858ac7beb02bbf8afb2ef69df31cf9dab8f793f6a5301e3215ec6fc925fe3f90aea7381532ff7a0323f73dd0eb785fdd565edf24277c06d25a6c157564bd40e3a87683feb16b4c43067d2abe7075b33bc29d3b36901e9612d911863f05a0735add6ef426f2d829bec7f66c9ce4da23d0eb02c901366666481772b4f9634fe0b545568edf39b4bfe3a986acba1bd5a204b7f6342f6c2fb03342822599d1845d865fc39b1c00e1afc89ae16fa9f5758ba6180fe508632eda5831ae8a9a4ff228fb40b8cc345b352d1eff6528a94c1364dc66a92b730ff5f3f9395dcfc7dc0d920a13e0a610c141c69900a39195b4513da44c2d429cc4f4d271118081335927894cd2e61d53c380dd276ca4bebf296cb954dd69c5f3705581ebccc839a12d59f2677921d6de19fffff56040ed8f506d7068ff759cf66b8e483d2a71f160175d39b5c709638de4dd7dab89332aed5cc6497aed38c524e3cf770b994c32da0123cc6e30342107d85b2d69ae4072f4b2915d18c98d402d886dd2544da58b99bebe95342cde7918136d6f655f21428bd3c4ddd6901fdc25a19d70320ad9c18bfd5c2a6d33a12084cf8b636a2847bbb2210a83eb88570cb9f02050eb6db070616530039d1cfc70d0a3b2d3283086d20f1f3ca45d48efe363505d0828b4bd7f97c10ccbbf84c8fa49aef58114d802ba001c03db21bdfba1dd346724a382c3624df6adcdff3726f1e1c406339512057cbd1326aebdbf310ad7b3d4ab151318176d1e3035b2bd3a4dfd77f8ca94fc1461b9b123a724bf3c5c3c94f112d935784444219c4997e1c788d35eaafce82f2dc3f1242dc372ff9213e9f44788f9fedd8a01ce60f8d903390fdf2df784b521d931756f29839efc86ee8a502509a8989aa2a842b1adcbac3f3199ba560ccd75211c2c8e9c11e630ac9acfc93cd389e6a8db3451c601a0c56446bfbd0d51a2aae7335a8c687e7297a997c7474e2ea8b779b427cab3e808207c3e913a465e0057aef8dad4e86d6f049cc137df70b75804b0e688bf4da1d6009cd797a44fb351d5fcb0a4840f6df7e9405e268409755581548510083cdcb9e9481bf896fd019bc49151a8922579c5dfa9d03d72576dadb280c11e0b3273d63b4237dba93d2e25c7f78bb55e790ee7cb4cdb7ddf8e9d26f28ba73b43e10e9b737cdc0ac6d1738024a7f443e80e6035adc20221b1e15aa014eb584fe27c00b28b9744da711b2517d16831132880a5f8181a036a053b0fafac987ff37ffee7dfc46fe987fbfe2468c0e6180e99675bce0ddf1302f1cf31e8f343d4f77d5d2e7f4e1fc80f36fce78c73aefd23fffd1376b49d9c039ea6a27a7d5d014fe73d8c2f2256d64b02e6a2a11e80b4f44958d20e8e42375d4a3b7910e5e09a9ba4eb379b21e99235141b83102bd620003193db6d24f8affed39d5d72af1ab7bd3e7520b2b2e75480335eaf7c6955d88d232211440370f1fb1a4aa5082128e2f7aa71a7f3778aee455c631188ae02bbe62d0ebeb20f8080c2c652dd99f299880b2730fc8247343c40bacb0744191d519ae65000725134ba8c8074a4753c06a6eba624043e44c74203ccea8817c18d031b25194eb9024384fcf8c525f2c537a376db4959538aebe0e371015a1ee74b68328e02b596b3e8b63834c1cd9a8003f52d4623bc8ac861448017ae45bc456cd07836edf5f2ba66a7eb32e3067b7d479034a7c4574bb4c4a31364c917155c98cce47a3cd7683c42d31574a9e193000850b9e666848eedc03c621544a87ce0102b11f2e75c28f58da0b1163b45bdd615af6899216fd35743aac7d7f57a820644e03d76e94cd71751a80a88ae35f1c12e58b730fd54b895ac1201efe13b64f06564ecadc0ed78fc1d230e52cd4a25147ea3ad48364e53effc7409f78729a4ee89f1124655a2c19ae307307ca478e3521f3fa2e4ae53dfc713506ff0e026c55cc75d5fdfc0c32bb586ba6b9dd20cadc2bc7b32245a1e31d1765956fa3124b5e9ca952b7ec07e4814452359ca0aa47a6de6e2f79877067e50331719f26572e24fe4aae606501d03673b8c57be7ebee51c1c340e1b9b4c504082709b79c78f7398030c95927150ad331d3279f9ac2130fd09fc7b0cb2b3d68162f7370583704e2416d236de8d29c7b6e8da8c4cf7b8137b6a810fdedf80300aa58a251caea0d203f4640a6a93a93d9a1bb8f01399366739f5432cf600f9f2e01cc2e59e9353788880f991db9c96c5a4db5707daed235f3cda4984a5fc126d45b784e4ad4a3fca71aff75dfaeeed62c374dcf4748b23daa02d9a7e29379d001f3ae88497ac949e7e91f98909d309490a569dd4ca5b61afa4c9a1f5743b9754266e0ac951bb3f4f844b300768971ff50d48bb9de4794b6431ac934110cf7ce57bbd7930bcaa960d6220f3178dc8f54fd906df44f14a5a9928ae609293f88730d352e8ca2da48d4f4513b548bed9c9e026a530d7678674565858ceaab05a6bca7c3807e5d2e38f62c0c7592a0c8ad7926bc22a726afd890064abac4006059b3ab7953ccea6d41c74e045ccaffae0267302f07174bdd7e74390eafb84f8151831a50fa2668c8a914523dbc88d5fb9a5011943e655f61dba37e92c8df9d18f01db13ddc46d915203aeb6b69bc349ac3050bac8034502186fe778d85b927dbe4630be129d9e09f73e9077440bc0ef60e5400e92c32e2bc132c3a8b11430813f5413cc7bb9909b3f3d60344f85a419099a346aa13e58a322646c4328ae044c36d1b6b1d882bba40c6a79998428e31aaf127faa2d092e635d49c9154b6f1a5388e2f8f9ad4dd07b8db4d4038b1d97e131b004cc8a6bb3ee28cd7fe4a89b135be16973ca4638064b8958462019f54c34e4632be78b3b5428388655b519706068d1e88ea60df9f108a281ad75e9f4efcb2a5f781bb909843d2cac35d25b1102dc049abb8e888d7142ab1e4e2691aa370122b6c747804ced724e67e268ddce5ba9c8dd8f3a9f1adc73ac62c19890b0387889db15c6100bace68cb045d466d2a7c15bf22b2dfe302431dce8bc87b04168e41fa29225d451aec9f66c369b699356ad3ea27543acc85510ee21772a71036dbb523089e06fbf8d0af2f0451784193c8a4fae55edb826e395f2aa68cd01c49a7dae149cf69e377d339a862faaeed0f95924ea4f36c43018119ed95b9e82221f5cbc347cd84fe0b2e082bfcc2657062e5c3244c833ffa5eb3e52f6b0a2562836f6efa93d6190a2f2707f97aa1b447aeb26f5c689aecc018419440be1069302fbf1d9f33e0a2d1371d70eeedd603b41adcaa169ba51a5bca07616ced4545923393436bd9e8f427541a4e39b14e33278171db5565e979cfef1beb2f217e2e59932f0983c9dc5fbcdc9090a763a522a92850ee1533d3af95385128d4048c4316983d8cf70ec7db4a70d693986b6ef319ba346317bb9233ffafa59b8876813bc9d74c14c36dd0c4819361a7c81b70bf2e270151af0e23a11418c4ef11e1cc3483f2daf7c5f1913d5be64b7503f10dd33d5f891f62862c0bdc645a08d8e9d08e75c967e950119310799977f236760ea9b17e3a81fa4c20bf09c5c7d7e635babe095c9731a2b8991cdf11e2a0759fdaf0bb7b4a2c011e287632edce1d0a551f85fd5f4e30128ff396a2c201204139a9570d8012556b4b19162f4676522afc0aa11e485d8582e72546d5758acfe21ebd75a51827fcb6a1535469ef19767d2ce04623b827a2455347b60d1afe5dfe4f051146c3d63d71dcaadb0daef836b1deef5743fb57e1777c8edc91947d80e0d84eb9ead8dcc440a9c740a1b6799d5a1d3d251eba3a0b19804d66289f95db6c3df77d15f08ea2f3a6eb0568bc6357b0b4b0fd7c6a4e8572c8c15b02eaca79dfa903854f6e78d008aeeff6491044a0e7b5a41c1e4ff24120f11820b86042901e2517d6df3625e20ba81bd5e9a492004a09d8730b5cbec1b104118c264ac70d7814279b856627ab52d9e90f7c28c5c7cf168d68de61692ea0760488af478b2d0de15860887e0530b87f986398a59e25728afa23d9c500fbe1de6c5c1ed8c3110a1d009d5af875123676aa670090f79e95609d6b0db43fe184ba1407f85def90e6d52234f51186044f321027489ff4aceb636b0eae039c9b4087a26e20513eee57c35c434f40f0ac5826399716866c9e45248337019b583d18dcb79ed1d26748ecc8f4eb597ffbdfbf720c9f6d429cf08e729197ea1078235e3156c8fd9521ce4b9860bd4c6fd22c924b7d441d8d80df47b2e2f65511ed186a27f28f785e0a3d7ab48a3ef4d934affd2f57c8cf34acdfd197df708b5420a00b2e37d2fb9320350eb4ec7dab017db3c04fc2f75e7357cb2c55f299f1a75463a19f3662f4222f16b1eca077a390f60429aaad42b9bb84deec9d73de50254950d4d5e913254ab01a0f874b4834b245d2697eb98caec5a279413cc93ca79519533f26b110071475cebea354dcaf3ca1dd452457fcb9fc991a6c3c5462a8b4977c29b997fa645737c1fa4c40eb23bdb780a9b3aeefc847605df452d3ab8370553f792f383acf5d8a3932ae8c1d00a2f59c96f9c5620490659e49dcefdc29f340a7004828af4cac434409c03801374bb2d81dd00226f7b2cb3320d7f80c0261e5b22b9bd5d6efd456b2dc64eedba89035637c5d6ed135a39fc3e7de6a884460c142e7efcc77c7ea6dcca1467871e6797475b827e74ae2ab4b7510a330f15fe7ce17e4c2e9c2788d91e97dcd2f24eb90e19643c6d65039cb322a9f1a1df312b9ed38d6e4bed657ce39a2ddf57c5b5c95e348bc1030866c8d4e7df3f0e095f6fe7b649cbbe408f0803e2790adc7124fdbf39174bc1b13dde0e2403b32b8639b629ab9adb47e296c676def300f2909c7bd641e6d7dadbd81702fa91f84f72a44a7db2139d72e1664a3473f35650b3d2fc42c7c5c0bd08888a112664c08a336b8e085a914a7312dde8ab870fc205852a8181549e02e4b4290330720ed83c5034430a6c2000406c6e012b0510d18b3fe46afc731c3eaaa0966dcfaf8d831908dbe841dfcfa902708963a2bd12a866f46c6cf4038ea68a3197cca9498551665b641d0bedd00d5100e91ed36d985d9392c9b687f9481d2788841cb12c71b055c63f95ad4fe8a68ec58be9a3d26ca14f7826afcf44347528ac72bcadd224f8259870844a74151327d7a0953bd49dfcea2595cf14edb3669637ef50a0a4b23c5cc22ca56f0939c08733e038c315c09b219ea9f0495a0c1f9aa0d45ae0cf9cbdad6e3647c83fe88d7cdc859452c94fa9878f25bec3888d4df23bd92209af5f0822d885a61ad37d64808307239009280a0ffc916f09fbae7556f846bc71fa049c93bfdf284370175a98bace289c8de90ef704c21486f9c9d975813b3b60d8264ea895489b1d06c3e7e014650731d05673203a08513b67f84dac486bd7129ab5ef160e986c892a0e019d8c0023eddf588445b7a8ff9d28cad2a9e7cccb152682c3779d82175834950640fa6026c4c15de1b314ee65a59e012bb46a6ad7a47c7310ca96beed1a8b9336a0aa56690e9dbaeb0b36688acdc56d273c0be0686c02cc579d761e24bcff86da798b87cbadebc59f8da7dbe7b33f085b36feddf26d7acb254a29d67e855e63f901755e5e580ded8d318feae8ebf22061721304c6cd309d12d4b05f409cb68fba95da42b0bf4b33f34e8fd4b0049ebd06cbdbf55f0d9724e301429c498e163c8bc5f2bd40c486e57456783e585e360aebdc0b3bcfe61795a9cf79229d599aa6168619af580cc5d1b3049a1d3f898d68a1d20286fba13452692310e47c71eb7b25ea66f4a347223b155dc3207fd22956a7a85b6ef990b92d28401d20ec3bc25e24a501dfaa3930248173721342c95b23a70de39ead8456af937ba560d187533eb6f2963658c0f65aaa6fa23bf6e3fab90dcc499ada5d27b92440b06b8ae197631d4bfdeeceea34aff6defbae563795028b1b11feb04a122ac709f47e360e379bdd72c5fb2385ad5d00587c1fbd8caf99c9478e27980688279b3434d15c8c3c85ff2a2991a975f91fb16fba269634b70404203329f4f4331f00337d2d4bd2e53bf763cc10629cd398461d823d5ecb172afdca0e71956ab54c1f2aa6c9b00f1048a04ea34a274dd0f4318bb17835b7fd1e3ed64e61df860ba756c7f69b1bb2dd11acd0e2908a82d9ce4d34d7cc62ef7a727324c16b646947547b7b6d0ab11579536d5718ee18f0d216f6925a41b0a0a1c5af88ca39224b8f6da8e7f4235b0a59f027213941046d820e83f63eec1015bef86b348c540a75ff4c4b0ab537b0ad175c40c705919e66fa8eb19ae4efd5c3428f3d9780858a0b2c1e87d9e9e43c12faff875424f098fd0b80d0fd47840010150c4e50f53f800f4e3cfe4540e6d13b1e3468a8383469909560dfaaf43b67066798874942f1dbd294e3b3642e32e322f85dc4b01d661eb19f1db69c546551039385de7be16451f83c68590ae45f03ed020fdf2535741b6ea395bdc320e139e4b2ff829ddd20482ebbf75230c6185a8170fccb2b181f94b2a13b4cd46b362893dbeaf1860ac808ebbfd2ced2e2bdc93449f53e559a06bed83c6c0c94c620c4332a76294b077babe47b7fbbcda469844f6320c06c0d436625ddcd4ac0f1d62ab5a690a4bb21fb91289875cfd375c52af58e2548c7f69d30c89e35ce060110083ab24bf30b218567c410b98cf9ff585b4a53bd8ef7e260f828848345625a2521e98b2673fec71758cd40cf32481ba48d1cd13f30eb370bb4816e1d530f1a7ca889d43a3176da0afae6a2416aa4a57f88498cbdf7822a373ac708920ab74797827038d9030ce7cb3b0a7862c39d720a347e39516ad213b701eeba77f3f9576d971746c509085ae2ad67923240cde16fd95955a1bf4de7605675cfc5420266559027813453fc16adcf2d61c7f81c88ddc486867aa28e26d96f7316488db5a0dfa4f89857f868e3bd162a2a87a3f16cd42edbbd375a97275fad18e842db76f51de062003deccba5e572d04f36f64a713b6eb9dcadbc8fafbe0c3e382f58c0b4c216afc4204a4303929976d273e2801ce210fb8d22ce86dc221ee3142f1883d6be7746b5ab34398ef2434aad0cca85ae3b74ccb5e7537357c3a9cdd98ac2307295ceb4ae77db10d8afe11b68c5a64d5d51add1046ee389e076826868d79dcc5628b52261a9300fe9024141be3bab4a00f4a002d92b676922d7f526a85f371d434ff67acb1830eed306502f796d7d3534d9ff099ea8a63ce243e283944a13a96ac2a4e26bcabb816f45a13164a198d60a3bf23fc25fd2796a6133461577a84c41073335f73ca6923918a55f24f6db57f60aeb65683318649c09675202a07ad2530ad20cdacd37727f065ae2562571896143d5039257628601b796912de0da412a64e82652635ad324449c673c85670a24c2b72fdb85aa0fefacd0b8f3d2fcd3b83a4dcbbeafc896e0e8cda9c08eed9a4635df7728ba499805401024a57fcc190eb9d35e82b22873aac6467871de2b95d95481c368233711f54da9c3250d5af75999849c5d28fa7406b961e3ead8d249a4466ff3077efee70a891bcc8cb34c0bad6c61f802ba5c205e0eb87a6d69e536a5d2a38ec9d1c7b097369770fc8f17a402ea00f1c94a6bb0ed6d67a657de6bd2034c35e888f91e55c932b7ece24b4817d324b56c6fbcc02a19fba61b75c6818cc0f2bebb13ab3b976ee1d5952caa46884c0d300ef0d4d10a5df63698e4c06c82a9448510454e04cf51502cd20a8d86e9538918f0e22c72a57a85a58cd61c67d3acf83bb1e8d753e11c69c545e67b5a291951f131047f3bf3e79ba3dfbbb92794c0f82f6809c62544107e0bbea5da30a4c652e026c339312535cfeb24d2cef9e199d528b3a5a3c505e26af10adcd58a57c712c2e2f1a8cae48c61e0bf0a1fe5a0849a0ee2c317371f7245d0bb3b69e038276d1d4e101e46bf8f367d23fc3ab0740240403c236c0e98c03e8554634ad34a35018381454383ddc856a89e964c8358d0abdbb91137c30fbc2b069f26309b07cd53705e1396d4d0b9ee6d4b78c367c2e64305ea38915b8216a2a84fc41c5f4db34cb4f654f1fc4403ad26fdd39f6a8db55a811943a98b911a1b20af22eddfdf5924fdeaa40b4570e5d44b6b04f3d5a1e3b4b09f97ee9d8f00d7006d67ed1df795cb62e23bdb5ea8797125e2f49cb0d82a7c8521f4275aa7762b5b09f45ea349358c9f30fcea1f6232d492c7d1ad622d58bfcb0cf49964d720c56b0bfac57630df3559552c0f6b024938b30bc40b7f5a5a6f05e8fcda90b2a6aa69e369ea9edbdc8e9b997c675f19e1245252dd824c1ab03ba448073d2f25b3592a9b405e65412e5d1890b82ca48eb4c74a082ee42ce6a5863cb5bcf090b7869721f294f0a24496125ea2c85bc10b16391578f92287022f66e4a12df3b270f1fa7fe848db6f8fe4187c6d8d20b5aa42940d4522f15943cdf622f996337fbe2ea99bcb00268665c793c6aa0bdeefa1cd221e53e0f6f3fdc15f66a947da79cae9d27f5971a3144c03b7bdd6c89ad0173241cc7c9e280348451f4e4c66e73938c313b42c70749a944489ab7fa8de3d49666594b353c66f79ae91e1518efaa9c10db1ee6a9f9e63754a3de6cba57115d15f6047b4154aef82bd35d2371f38e9a937c96f8091d8e9f271d52be752c52964478248274d12aab8737230133e4e0733bf4c94da4fe2cf89057decefa09f3a0f837713534151c44dbcf157a8cb782bcdbb6b04bf63d73db29c301f79518018541d465761be82332df4630035bd572abaf8a5773ff933fd3093b30c943b5f5c80bbab83204e89d1277ca0b2fcf5dd7854e4c52744bcb872a40d209af23c9bc2644a1b016b1b0e1dceebf4e239dbe3e587185d50c46ed320e1497ba3586323071e5a1b84d63feee9fbc45ff93495a22c75607d9eacb626f86c164b89a43c85313813bf0a54ea159d331dd18e7a867ef7a775d54f5e603410d8616aa5c70345e75f7976614bec6e78903fa1fbcbd4fac8e6153298b48c06c1de3edcd413253ce0909501b38e7878f7de6c8869e61c1c0a776d2c9cbe0649a87209d57e41357156da281759841b034227e5c30fb26776cb74b5b44aafb4a551ea2e18bc3e86964ac7a8e9f2ef4900b64443cbcb6f7ee20595a0ea992d384d7c895f676f9f73ca4fe8bd7e055aa6124c334e181de020b2d568cc14376c3c51dc07ce95bb5ded0aed4398f5f467ea1e67b9451273ff0677e860c2a6586eca1e2118eabc5112ceec9230f419b60e93e51b041fe17d04ff51589ee2e3e7144a18de88a01510e37f706fbb8a89245bb775e5b165f81414f937a5fa130bd200bf159ca2846d25e5ede7eee02f8c2b0692b41bc899f5535db7331fa5a9c1e23740a17f86865854f721efbf40d794eb291072f67fb50d70ca8a32ee09fdd243e512293300b881ccd1823bbcb5c06d91499d98f879c0580df29a1377aacfee296afc50f8d691fcf95dd6195a1a9bb5e08946ddd9a8e0c59cdce6fb583e3d6c581359543ba2f74f9eb23eb4e547864027370882804b942e88cc47a3a0987e8afbd0224897f5cb1b6c2f2a37f20f0a3de433d80cca45d0ef6685de609bc0443f93445777c05df83e3aec83cb1abfcbcbda7a980714e2ec2c44a4695243c8f29f40dd9e1e20fd8fbc2bbcf1ed871e9758a4f11914046b7b16787ba6443a4af9f32c4510ac64e26772953864445c63eee976897388a89b7db09ef8a23970974b9a86a8f7f596f47882e1d967151e3d912d848585c4701ed5ba55cb5b0577cf69ec3ce2b329668f1916143fd68739077907aeb75261d9728e61aee4d71fda9ab00ab40edc58a809146215f0b34f0f900ff27563cc873d4b82f85878a8d6aacc9a8bea6557efcffd79b6adc86fcc9f295e0ef4df65fcddfe5485393d15a2bf3c2eb34a1e488b671317b6294656250f8a1c3018ee27d4030df26d84c0fe027f435abba68a0716259cdf05d1b7181f78b9431b295cc6adeb61aad4ac115467abb7be3182147e6f489cc0b1e4aa4d92aff020e9b65dfb4d13602107bb1160cb6f784cba2b9f0dd2c324c46f8d684c9cfb670d04c809e092e85fd95ca08d53b7a88e4b7758fa8ee8108a9c99657c28258778f8245b78db10c81b1bbe7f92a43ded1e39906d56f8f09c79ffb702efb96c95840ca192e4577b1ce1332b363b858669d46aeb928236b46eb6785544b6de02f4d039a7574bb14e4976923a8748fce6d1e085d0f03fceeadc701c8147acdde1557f8cb61d4c17603480ad9ea86fffba694202db58f7d5b08744c9a470699c913f93a9ce03599870c627689df6ff6410f9293478f8c529c2bcd34ea0fee084ff9b2b7d12b6a5f4b71c7ab181073eed56b7dadcfb051ae579206f8989526a51024fb14238f57c62dfcfa24dcdd432700077d037283d93932f995d015add5c12e075284e752c85ec25767ac91ed4c267412104e98549cac810515563a671a6612071beec08a6211cfc806a8f9f48eab15030b27df4ae6bdf6e8d07c06152f56551b3048c0fd61d0004f72286d5d6c7e17b8718e790317956ecab3c3726925c03eb12cdc5610d149f0e2a6d86bd9e8603103e41b9743825dff9876381ac85af6f7fe03e439d4cff083c9c146189c5890dba1946c2c343b775e0859763191c9e6c061d8669d4a9212bbc09b4612b28b9e9700fe27ae038b05aefc4feb3378e0971ef2d1dd3fc10c1ed5340ac82b01078b9f9a9f0f4bffa401a057f36db44c520a508de591e9c19f4abbd4c073dfdd5211a52b803d174ca203bb70371a7376b8ed70269be0c6f53281808cdec5e1f4b4a1115688638e3069d880f910e11bcd1d3924e498f1929192f1b893c8cc5d0d6ac0a28c7021949769d0e08bdea2219c927c6d0ba92e70e880bee1d102d8780583b23f59df9f220287dadecbba56482b620afa5895a19644310d43933511d7ef293fb19f66ec1f115b225207b4bcca11d63c680e5f6730416192cd9a52fc3df41926c537376e3b44c71e89d1af09102da3803300e8d9012ebfa1ce793a074fa985727e24a9668d566f7a8a9d412047ba5832a818b0f79b5911677f4744e75431f9143313693dd26a1eaaf1c2f150d8e035e05ae8083e19bdfd06c883a8a4da2c4b223ca08fb4409c996a8626c13059e2da288b24b546836449d6ac035ac1da48694f78e52c2ad51a901b40679b78e6235a0345205008dab0e5043da3b4799706f942cc12ed090fbd6b1b0dfdd845eb88727a9650ce737f153bd58880e0708550be5bf6f490fa970c7f5d1cb8fe1effde67be3a70cca8f0967fecb142af223a102373674ba5837dfd350d1f2f6bff074f2c23b86885abc02234102940e3bfba26eb472854e4c348c57bf486c3ff832c944da986f7975c1b819cadf9094de3ad18d7be9232cafe2dc0660ac0f0ef2be7f6b15617c0c00e273c19ee5274c36854c8a7dcc772ba6ca0239ab9a0d9ced66876e9dbe016ca2047ab41bb755301c594d079494838e9dfa75dcd4afb573fe02ed34eb1ee4b0027d24122821e1fabce33cf32f180e40e766559197cae7558b54bbd3e22096485a9b2f2417ef3d8f472a1e91701dd68e24c9de2bdb967b4b99929401310b180b590b8df2a79b8d6ca8db476afb4937381ad6c506fdee3beedf9ba9bfd90cf3f6da73366f3fea5c6c702ffaedca1789ae96d56c2ac12b45b3a05746b830c410d3d701ed6712a0208c89fee9f09fdfdc0dedc6f0fbe20c88e7c7740a3eca659c379bf0fb7b0bbdd32b9d9e686b744aca4c9b587c910c19ad245af44b34aa7334aa7d340a018dcab489cd776ec6128d9af4fac831e7c5348cc39973be1c2f98dafc9ad45aebe92b4a041f6e524a685d6cc00fc109eb90ff3f30acf2c268141667a724bc2ef01b76ca713fdc1c26638c3212f1f75bb1480a29ffd55185abd5134670db7f46e1fc82def6b43ef774b33e3ac82de061eed234aadf653425d4fc82b84d863ec9ba6814ad49604a6fd5346a02ed99f82184f6af6b9a73e0bc8306eb78da533b6f9e104eede746846a63de050d8c4675263125a713aadf45d7c057351e54940b9a184386ab34a8351723078174e0d788e346d30f5d0afd236d4dff0e0c93c090db28267f68686888d4241a868f46187cd2a8869885df0f9f930d5288c5f85cd2bac022bbcdeefc13b6e66fad9a33ce1821aa51fdf342272ec355395ca63f0b35c357cd0121c481f109eee7447e6332d12f74d2a82dd4396bed9774d11c6262600fb22cd33491a6692fa345da9c5996411da8826c47833b1a7c3f342857e01a425ff53ec1e8f002b1b6588f640527f30a3af0274eee69d751da75b4a31cb73d6767f7dbf6d376bfcdc9e17473cec9cdf99452918578cb449a10cdba4c38a451adc5a0be2954108447f84d9182277073382e6a50337ce2359463a04268c8a34248088e397414dfef48c2c7124cc01c232090a732c265e2cf9d1a243ed7a3a9f19a9a87aa098a18f6140211a92e2becdf152a7623040297f809fbcb552d34b14a97c47be9536a61857eea010b3fc082eb34ca23f49f57a8f0de0c5d49cd2de4af46f5a07a9d3eeb1c7d7c8d0735fbcb9d742a0748d489ab4eb988a28e6bbe62022b69208d8a9d03451d12bf732037a37be54faf463794150fa2f1b515ea9a2d3db5ee44b35473aa690fbf592a37572de536c9691436d9d2cb94137fce5a5fe700812fd9e4933996f937e6df7e5d6eb8f8ffc0eea451b81dc26f9f6f167c6235b3d0ac18e9dd30ed1bd3ac90bf3ae54dfca17fafe2095e7712bd49a32616803a852de914f4c7fca38bffd376507580eca06a9f23101cfd49a3a237699413ebaf46c5264efcd6e9f0479c6b3aa84ffb075f32e06b3edea4554f087f82a311f88232cc09aaa9c935b586860685fa3f9d6af5216d98b3d6d3a985320abb1935050a90e01bfca640810ea6520a35fb0be52f5745f940402e978f4f0d8dc71ba369379e21a70df1f39303c4b98572b00b758a0ef5ab534e3a459f742afbf89e3321109d8d7efc209d12e2422fcea0116fc6650c0caaf0c22f4915829a05f825a1820b06d50a42f825b102d014f825b1c20a5b21a7a506167e54a861c863027e540c2dc1f4fd039e0dc46fc6efd6c4493bc15d3be5eecf9f7bdb1e020679363008ee983a92f54bd604a537b997fe994a5f6ba9f46e516e9e0fa524bf84f2f27ec6507fcd6e557b4dd3348ddb9040f1bb04c9d2c4b0321090840f261a95a363e10e84a1d5a0c61bbd1db6505a940318638cf107fe0448379055edcff009a6d1f207847008738522a34f2d2b2cdf42c485c5e531972b96c5da2814e38a10cb8d2df2634b8c2d4f5b62cbc7ea2d1f6d6e81d1a8a66954d368711ff35b6c7677f22817eff252e7857011ea7939ad385d6ed5a897ef5610c95108491f6919238dea67e969b1cd9361abdec956b8bfe55fabecb3b8ec74b12ea14dc87412da3e632b6e876301a683452197904b0910c78296146ec5b180450bccaff037c5a0e62622c4236462492162fa377d8a85b1393b66f191c34979fa30e2d3b3d89515eadb2f8085c5c4c2227ff42a9645fec027cbede0d19b525e1ec63ecc62c54b73f2a994a7161716169796969b7fe096974f59ac7f8bf40c83b4dc485b5073146af91d1b66f928f47128be62934ea13ce949a7eae9f6c069791c96a72d2c2cf7b540bf79e547a311f4969695953fb9cd274be3e1966fae46addf725bbe7ecbcdf2472d2d2dd7e5f43a5a3efea9e5e3b7bc1495d3cb1d279c321a95224ab5a3cefd35d45385b8d790d653fb737409b50fead5384da79f2bf883259ea0a0f2fb971cf901030fb6f851010620f88742c8e110193ded9ae2ab1a5f6624b024a2f2f2fa681caf94eef2f25d6c047219195fca1865044ab9f2238753923f228723658c0a8024998522349d329954be818aacbcdf761ab5f2dc631cce694ecd76ab8db84cb4cdc244eed80bb7ca7d9c642350c432cb17ee2d4aab23e5c72b8764efe01c81dcc77f7e30714df545f0034b79e36f2a802f5cf270cce23a50fef432da83d4dc427838d5758a5485f06c1e24b17c84258fa49692cd9bcee93bbbf2288e4ff7356aa5397fea8f884aa9b68ce96ea67fa592257d345992bfc966263069cea1e6e80367f93b803ab57d7f5cd2aad1f743ce747be0c8c7894f9f0f8c06211862013f2a845a98d2b7559b7fe0fa2ea5fc94dffe07769b37ec380793dc63ecdee84eb82da12fa87902e1deb0c80299fa27cd3f2ade48a5db13f672e3149083c607bc992d7b450e2b91e10887a3c5a03ebc350afed04f4dbf5a3b15e3c3189787a110a806da2d530ef549e734904ee9f44ea7460fbf9d60d8ee835b5eea433d696882d3c0043f2a8458b8063f2ad0c0832587a3c9a0429c2114f8897e15391cd168fbc7712fa3354dd37c4039ca7ee04cba9046412d0615d2c0213047a330a819eae0eca5bba4a4d913ae83e55f77bd76a12ba979fa6029fdc9abc5a0c2c8ca84a806830a21d4946018e6d2bd6314347647283bca8f127bb0e3eda16a1f3f8bd8c34ccbe46337e4c3cfa2c491c3918de12be1811ff861ce867c78337c29df3ffeedaba362ee69a0cf873a3b053bd559261fcbec296a56626c8bb46d111ab1281f93d867d9b344de56c4b5b80911459665dc8d0c8d601c4ef60367f81ef3d747b05fc8c2fe2ea879caf0d9a9adbe40ff87ff3df6b4399cf7a295f601618fffac54f27e24a69943baa083eb9bb0d7b6d786e058290b1b595bddbef4742bd5dfbeb664eda9105c1fbb3a4c5f9fb3517ae768688f7d53cc4a0c57d0055474c108155de0892687c2f439f2408e86e94bff3889238f0f5ec491a7234f2962b8ea548f9674056f7a408cdd78555491ad4a5b49b44556c9f4b96423abdac80359250babaa0ae138d5a12869a6d7ae8b0d481b53c8b528f23c1b37d9782d4c9f9aac8b8d98932371c490b301737270a9446fa944fa234b923c2107479e4e1d49e1e8d3968d8575285ac633e9eb7bfdd2d35ab23e84f4f57190ae8efaa6c7d3a9ea99f42593e54c5eb24a946e8fd2fb98d831e9e17b417a1267c3317d4ada4a5689c6a5d2850f45fa5289bb013b42ef4c6fba3c1c97ae0f69940f29b5102fdd7a4d1c4e9c5114638c511463dc389cf81b87f39ec617df9b6ee969c93e4b297dca4232bd46faf72da68fe16e6830ef8dde8ffe59228f969e44a9e91281f91898f8cdcd887f237ee929a954b212936c9e25253cf003db5249e2cae2df470ea774a3a591625bc9ceb0948505c2e24ff042b0b851bc6f790ea7c2bc3785201cbf39d247fb5cde43fc9e85757937f634ca3ff2342a0cd9972e12275c7fe370485fe397a8f6a43949a587dbc34c0f37ecead0de0edce2f63e1a6bab95b65a699a06234fad908a381a28aff2af53dd73dcce89c38991c7557095a2410821d4ac0e6c457ba8416de5ead01e832b5829c62761da6337b00bb1c833823025c5743a69b334bab0051ec154c3344dd330d2852f5650628c28a47f18b27867717d08bcf5e61d5bbd707433acb6f4a6df220f0fc42696713878300cba7038a652a934ead8bdf862d73d24598857389cb8c1a86d2a9be5bebbd9c78663a52df5a968a3a6d29b625da92a95c4834937de0c35ee8608d73b391a284ffad7a9d26fa5f870fc6d87e370e20d2fd2f4141856071ab5eec8b97422513b7703fb8d868bcb4177c30c1f10670f8150bb7394e0ec4546707ced469ce1c2bd12d125621ef0457940058870c4ed66e813473445d96bd345bc1bf431d0a070a3943e91f635762cf136e8534ae9bf49297d50094df01bc22f8912743085dc933083f0330d9e972636c41e363fe279731338bbf1456992234d70aec1f4e5d7742ad71834d54fbfc6e7899fcf6f376fd384a1ab5e680a2a7cf0cd2713b3dba9ece9d37f31f4ea80391811ece9934ffa127daf31cafb0f68b3af59e61e06ec4f67806d8072c0d83fecb1e85b12ae52798caaa4587f937577f95048b979304c82f1b0078760ccc5c2d88b48d645222a2041295c612870f6f5699689a4cf4f5412974426231f24adaedb11936559b6ea5486abc7a0117d442b08868ff2744ebaa15878a451d8d3b80ab65c06fb3f9d30238dc25e8b427d5f75b0ec0a691d57991efb0e121ffb86a253f5b112f7300862d8774a9337362a87cb605fed0b1add5caf108c3d7d41fe04fb0311dac18e05c15eb9217e6014eb047b6c823dbe46cdd1684c83f38e184c424141f9d235a251187c949bb3af2e1ae5af23bb48340abb47340a7b4e9b42500b087e4996f004d36e73c8c43b0e07fa8baf46f9c3ec21c6c15b44a3b0cccd4661ef769ba4ee5f9256119ca19120234b8ebc5a1049a7b00c8360ecb124302c48a746ff303c3d19ffed3dd1cd2723b02f42cb6e77cd6207498e28c1a27f2c82548a0aa97f6716ed3349fbacd5b88cf6b0c6b97aca35355fc4231184f69509a72760ed55016bff82349175816a94867d9e35fd9af693fe76f31469541389289c8dd2ae8ef79a017d3ed48abd09b37408753eac0267c8d578f3e6c963099c61ec1291ff38223a2f84bc4d44e11f45bfc7186374ff1ff87134fc79c02aaaa8a28a7767018d55070f1d3f7026d24414d847c1fdf65dc41c4e9c211f3e9d9da63d0faa04cb6baf516d341a8d4e2394ea440e4c5febbad34bca9be87b79aee4d3cae7c771e5338a066f9ba6514ae9cfeee3d3acbd29efc8a1d91cf871336015f8d9503a5fdb36aa69dbe8b7d1a67d1c69bf699707bd445270fad1e9f4a3d1a9fea884f24ed49313ef39417a99f20f6fdbb66ddbb68d469ba665736e9d8dcd616febc9654c9a4f75b9313ffebc19d260ff27275683f812ae4a22669bc777a71f010a353f8effde8b0f93b157f4556d4a5123ea757777438133ff5988e93435cae1738717937766dffd0f4f38b31b57d0d07a730978786bd46442f5e7ee31bc8fd04488e9456b42ed8ab526d43c5fbbefde1c8e36ef95313105ef5f89be7effb07c1ed8e725b00b1df0515709163ce79c735e1ed963f71bd5a25151e33f140f682f37c47391dfe5817d86af8463222370ece1cb7f56863f3bb1dff76432bc3cb24bc41f93f7df37ca34a504429fabe04b8c8b6a1a3d7fef3d99ec83299ff0cb2c39f07679689fb3165dfaf4b1a7d9e5a17df65344443e26613f7f276e7519f84e9c5c067e6c22460985d6058d0b45b436685c00a2c9417372840ce6df53fb34825ca635162ec2e416e79c326e0c84413117e6dce732f73e97e986f909f3d3c7854ff825f13182ed47abfd66ef4b4b641359acb3dc8f6cf7d58e9e64eba35892c996546ccaafb0d8d3b7589677b12dff625d7e857d79b72b606660d8be8c8639ae82439a050c844c5a26c3f6e110875008e6e653ab358485b50fb1e6859aa1f63db8b52575fe7fee1c0b310c0e981b303f617eb28061c1e22193f619c2ed6a22a32d0d1fd8721512f3a13204826121318cc599cfc242267045ff4b13e884c5c2276d1b884eeff4aaf4c49086a2795898910d090c4241f571d1cff96d455624d2a84844455a0a62d63e387b987515f07b77e66a189441219c65d049e63f529a803f643405c16977777777777777777777777777f71f41e3d01f06beb70aeaacf06b484ec662c58b4b0bcbc395574931951ee5e1c79081804e8dbe7b6ea3da8b1efe1130ef1c0e78bd61fe813bd360e8ae7dc4da08213a74fbe1368e0686b39fd3fab3b003f815d6877fb134ef625f7c8b15c0b3d8993f5917bf6203f02ab6874fb1326fb2a82f591e1ec502e049b6c5571bf323bbc377f63e67ed6ff69f5a98221f8988beb919199edf2c5789be8d740a3bf1d8eeee383df248a2f3e7dca3fb68d32ccc53fbbf59fb9cbddfd91d7e6463beda164fb2007814cbc3972cea4d56e6536c0faf6203f02bd6c59fecccb358017c8b7df12e96e65fac0fbfc20ee05958ff2831d47115e47119f9f254ab17ea13ed73d701cbd796d4f8543ecd7824419fdbb48f37b42cfb2ed2aad947b07cd93f3e001f685e0860c645007a9041f1008016313b5cfb30b18b746ab6401616ba1a257f85854a1a25ffc542200b97344a7e8b7c160b99344afec9aea8a458d8a424e5936c03b1add328f923db3bbdea2042fa0929a54f0c5ad84743dcd08705d5bfe5bb904eb907e911716e3c8f681412392dbb25e46954cf096a863ef033e4713d1b88e5fc0cab80a7e470cc6f9f9f1bf3c69eac7ecd08a9e5b363c2ec65605a7675c4c0f0676cd49bf121a89312a83f7d8f46d71af83d751a086bf0e3fed910d4601dd0e69a1a0c459f9feb7df63e5a55ea9728ff1eac23ed4b96a665e08b28eebb398acd30587b52b5a3db037ec7d9edd64649ed49cdcfc544a786d0c850e1bf870fd293146a11b4427e4ec9c1c11afc6ed5e820faa60fed7bfaba21c474dab63de4374a7677dbeca1cdfed94c8343d34f70f6de0467efbe419be30f8e4870d6920e9f6c89752e36b0dc047e37be1a95c59fb3d6d3a9bfe36337be992827c994048990979f434a299f4be7449893d3355702082466414f5610c8d62ef083b5051e794d0492b03b1831c67bf9a36f4d85d1a8f73576cf9988de45efa2f7eca90b6a869ab3a250f8a9a66b3648a8d8c317ad6a46e1eca7cb649fcdcce17c14a5a19f7dc0540112bba84ed1cfb2a789948ab214dd27125d1743f87defcdf86b71a8d8cb1793c92534c12f8913861ed398fbcdc07e9a14ea4be28421f8257182104cdb617b974518a2b460f80f421a57694f46beb4cf67be19f91a11aacc341846a7f2c4313534cfa6b1940dbf055228c101c02f89143dc07414b30fecfdfbeaf001713fd8d247631bed37f7f743d82e7f7e4af9d0c2931e2dbcb0e8881c0c5fb6f0c88815aeb8e3ac74d1fe07d6ae8b0d95d75ebb2aff0353ac070ef6a5a7af03f0bb21b87b94fa1b8aed46da6bce6d2711c75dee9d7b8e1371947bede66854fc1a434451f30e1346f9f7353c47a7de0d6803e5379ac2a53ce5b86c66d9fba7bc9beef3f6a3cbfdc67d677b74eff230f7dca38acd34de77a3ef2c8d873b6ef45d471a75544565c444a3ba1944348a7b2a1a8db623f4e037eabebb2edd13bc5d268878feb896a2ee47ffbaef46a697967bcd92fe91449a361a7d37c3f1e8471692485c0d227840fc236709f8f1b4dfd50e93bec3a487c1292958ca631c4ecaac18119b75a9ffb08eedb94f71a99744fa1e32f046fa0260d2ffc01811ddddb6c9dd7cb2617156ba34444fb79ba58d11ee220fc8d59b77e0fa9c3561aa63bb3b4c58723720ca633b4c2e287786e8e974d513623e8aa65f7b92d5d1a2a7402cbcbdd167ae0135c3a7d23eaecb2edb3f9c9580787bf974db486fbb19d6ebb8b338351a55a1e81b5045bfbdeb88a9e88d7d341655d137ada307c4a2cfdb7377fa682c12418961597d693b8dc3a14febed5e46cfb0fe66b8f711f17b334de08d86d7681477392ade30a4ebae8b0dbc713e38db4b0e87bb351a151d8fece86115f8752a375102cc7d978339ce85fb874716e5abad16bb2268ec03e2ee9fec1abb70ff7037c331fd8e471378fb1a5cb7511698fb1ecf026fcf026f6f00ec42ff611ddd738f625de8bd5100cc7d8fd7c2dd75b15100bc7d01f0f6af0a5c39bb6d5747fff68fb3d1bf5d927d2cb28fdf8b8fabdb4f8f6f6e24d1735744dafe0505f8dc7220c0672f418ccfae23f46c46533c55f3dc7c6e29e4c642109fdb0b359f9b09ee6f249d83a76a97ea73fb20f5b98700c4e73e028cef21cf866b273f7c6e277a053e7cee18d07cee279ecd16de8bcf300c02f80ccf30e3e233748229ea335422f3194a01379ce265a804dc0fa578aa98cf90d5a2610e78e8872e78fe6c56cf46dbe133dcb99fa113f6f3ab437e70c0fd2078aa97cf4f6845bf2dc07c7e5550c5d68e1acf267b977f2f13003710b8674cadf299845bc3fd2d9e2ac63c9b57e3d30137cf065c06d4e4b819066b2d1c37cf05dc5c157087b819066b426edc3c137073b5a1a309c1fe356e86f1f9a271f39c7173c561bdb03f026e86c1d3e700374f216eae1802f9607f1937c3f81c62809b67016eae04c89943b07f0c1e5765d3e6e61a048f13ec5f93b95437cfd4cd150817f68771338c7f3b7155c6f3c3cd730037571fda090ff6a7692759ce8b9ba7006eae3343b21cecefe266188c0139c67219ff00dc3c7bb8b9cadc7c02c2fe289fc9c3cdb302e0e6da8285fd636e86714cee7033cce9de7caaf6e68ae960ff1732616e9e2b62cbff25b6b07f34225d6e8639b5dc7caaa738f3ac2e5759ae60300a0f7faaf189f8c49b812d3000b97c9c6014db98564d8811583cda10254ade0c7c692dd074b41c272cd69b69dcf9982108c8e53bbef366e01cb204232c1e21a137031b77b631dd9ccc19cc552369249c8b0d4241403da487bc99c654c44345cb08ebc9933703b39c0c0799906c95e90001d9c613280e2fa1a02245348c855101f3c15a9811b87a338d2986e96044b0d5d08e2ca80a272fa11a46b4e0f269c5bc19a809bd197fb972957606918e104425e09103f66f03f6cf5208f6d7d0203bc7984894d46c31341d8b54f8f17238e2853c6e7fa1f6432b5483dd25caf17182fd85fd070c3f6b4da099403efd694d50cd4d137a8911adb0df682df8c23f0381dfc3783650f550f0a3bd792803682d4fc14e0586516b614fc00f2cef192afcac09617f2a731358c40068040fe88b69c19147cbb73d8a088944229148f79f19ea7bdbe3b1d9bbddbb6d53864b6cbb3cb46f284dcd35e009d135e00961faee69f74c9bcdb53e09e551707260d704d833f14308ec69c6cdd89ec67b33a3e7def4a5e79e964c5be9fe7679f46712e639b08bbd133f84c0ae13f351eee5d1bf7dd4bee28c2e0f58456e819dbbff66a8c84a8108f6d9d5611102bb29c0de09225cc6b19bc3659c5586fa4e84aba611efdd659ed684ff88928b027ec65e460ec3b297580c9ef6bdb4da63385a6859ee87d8673443c75e3ec4de7bccfacb178371dc7f64d083405f4c8e2b9c3dadf154a7acbe3fa208182eb04f4c7ec14a5403a46cb62855342e93fda3047837fdef09ce7c440ceb2278fbd1b63d759f4feb365ff3975b8cb11dfb3682fbb5feb9bd2644a7b5277d1d80f00e2dbad5addcad9720ef893ad979785cc845cc8b29c851f566d47337ff89de7caa75bb58b73ab571370600a8d1e7cf27ae2e095279078a387bff4de5dedc431995725ba666dc15ddd732dad53e4f3a7a1e235ac3053d504da368b66ddb28f73b703836ba6d1bd7d1df3e53ee9fb3d16d7f391cdb8fb2e716624a2de461fdb40c19aa7ffc1e315acf222cd2a86e050949f9990bbd676dce39e7e43e7bcad97661da83ccc65987424708b45d07ebd17a4e3f79334e1ae563abc0d94f9321252dc7593f1bc7ee3cd365b29f1fe1bb719e7f4a444c7a1e235cd3a91878b67c5e0e02534abfd2f95ccf67febcc1f38378f3e79c3de7e8e7cf492d8763d23967ed16ca67b53612949bbbef96f3c0ea8db5afdddddddddddddd8dd324fbde4c9220b807fc924c2184690f9bdbc6d33e1aa0dfb6ede386fb391cbd6963a8fd190ec9dd9ad962a7b6198be39be6f3d486f76c3ede4e604223e95437ea20772a802d76aadb36924665dfad2ec0d71ef4a436c1990fe1ecdd0bdc9267337a1564719f1d0c386b20253883ae9f13927aa408e631a7f6337b169c0dedead0be7ed36caf6a0f0af588386b9d0682b3771b48a3b2f72e0ca2a1f6611aa799d21d73dfdcdddd5d4a29dddddde9bb3bf6eedbbbcbe770b874f71890b56d740567636301d11f36b78e67ad27d4c3c0b08c64b088b3e070c46f5611232bb81b313a0f0c8241eeea146475cb799e8dffb80fbc07b280d84c2f30f06b9ae9736e73ced9dbfc6d4eaa3dbd4ac019f3de6dd693e6c3f6b2f781b3d102c3228dca3426d5878d0a812b9bc49bc93eda4c046f267b1eef45363ab98a896e752bbfd7eb5ee16cb4d3eaddea56fb744b52afdedd41dde2b2972a770a1f0c63a3be59c7aea944c4daf31861ed3d8818b863cf39278ae651ced335cf66fbfe209ecdc34518d129ec6b370b87a3670c0eb33b78b0f9fd797e769ee7ae0a6763de4cfaf9fd270e47bf7695807048a3b2e7ec0edbad6e6963a8f5f30baa3f6fdf6dcbfe71eff06a9af654dbb66d43d1046dff3a689bd96fdbb6699fc2e1d8b46ddb62d8981a3b564580e09321485a6887a5c49d447f941a5b18b3a6fa237fed7b444c0262a37195f3a0fe4fa75a79c4d02d1f55b314f264dd67e8038cc2e1d0be87340f89bba1e5fafeddf2396b3d9d1e8562e118de4cf6240bc3f05e642fb2ed3c3ccec3c3437aed33e9bb8eb341ba4a403c7aed29b55a186a12add329eeb6b69b850132a1d816a32792f7be460be2e2b6c5eb3d6f267bb7ce73a4c584a7824f66fbecbbf56ce867cfc242226d9f359cbb35a36d2e7d2522de9ec7086f77e2e0ee7695a85f1b95d5aa63f43e20d6bede233aa57df64674aafbec91e8d4a86daee9b4add36a5aa6bfe5e3020a82d1a8de924081391bf3fb2a016768ed03e239a9769318591836031183bed7f6e480331f8dca9258d18ce3c199f7742a7ef6187783a3a1a3362abb3ae8fb801008154201b3873c9da217b21a95651876cbf00838db2e2c92443691d49f931256ff36ebcb29e67fd862f69b8d4f814411ff042f040c6a2020bef14a4c1e10379296c93e1b026282339a253e4a7096fd606d49d5d12d9cbd88b3d15709987de662c362999dc76316571e433087eeeef706d2de43dd4dfa493710264d9230e9d4ce853a1a186aa679245cc89fc7f8da933b9288dddd5fa82fa600eac09e0869007380e3ff68ce2f1292f4d228f9fdd8c72128249d1a0544f64a23c263ad093d22f6f7d049409f0f75eb1171840d4740a514eafb97d1f71ee603aaa5a052e804bf7fcff5d3c3137522102641ad23fe840b71d244898bd5d33bad23c404490b0e79e20990120c83a67df07be87edfc3f771487ce2891320254558bef29d21211f2450f490ce79b204c848111804ae5e3bde4f0d2cbc9837f3342c5418346f8606067e34327af40ebec38b3def4cbe1fbd817be16e87a8e982d3e5d3e512c26f7e978f3c7b32fefea0ff7b09216cd22a37e2322d9fc06ec4551c923c5d407c76709e2e776119c481700fe11e114fec976b453b5d57a82d50c90f3cc899b40a06b9076dd984f374e1ec413d952cc1ed77ba1a55840a6f74e18671832f29d63146ee9503fa62b2880686e33aa594527a1298689b8d1638fa346a8b3e748b2de962e2b304bbd6528291f85cac1971d59c270d7a75ef6426a13b843eabc79714359e82d49d2c81e0f7f149ab34219769125b38cf396b3d9dde47139ab3d6e8138322109dd1c79fc4e140cec57f3482504acd48f632669a914e1dd1986459b7514d24392ecf6ea3a2efd86d541463bcd127fe60b3dba828ebe122870f21476010109e9f7e0531f26c96e43c9bfe99d138c660f9221d97f11b1114f0457f7eb57b0d0bb5ebbebbf273f4d184a08037221ef8a2ab0e8602f753cefa4b4dc8559a1117f1c01b510f7cd19f4ffdb2ee72139887e3cced66443b893423b8453db85f53f234e81387564524907c3204438209edb032259993279e4d4f26cfa6699e8dff7b18113f385d3d7bfe80dfd7f8f09ea6a48a460fe52f26ec1be6687c104d0877dd48288d82d2b17e8dc3113fbb4a407cb119ee03be9f67d3a4530fc757a71abf17b13a688d54f98240e8ef3f934c7c62c1d0b17f9956859abfff711d032b9f63706ea006a252454a955b391c2aef52e8d9bc1b2a37364a45e5ce2edcf8cc44dda487b07cd2bfd887575888575656a8639af5ec2e3781572e64f266e4470b839250e1c7ef2d3cd512240d033d9b95972c180ec9f757bcfdd7a97b63ee12282f51fe511e46a23c8b9b4fd874339cc10acaafd895f71707cbcacd2b3ee59db381f22b9e363763c55dd141379e8d1236de8dab5eef48a2c6b3a12f7f881c2a52453e34821429dff22ff6e1182bfa1dacf6264b1fc542162c028dc0231008c350d8a97173334c1702a1caefa05ed2a99593ed2161ab51121e61e5c222b00581e01268041e812c680428052c025d2804acbc54c9b381566e0f8973cba728b68130db4bde4c1013cf7120dc8c958740a82b5747cab7bc0e94f701f14afdb7a387b1ddb3b0dce3213ab5f2f26b74ca6447bf625ba851127b93cd1d062c7b49a3a4907ccfe954f7f21d48a7b897df419daa2fbf99746af4f21ba8c1e085d3cbef25cf86f472457e9bdae133c9aef42b6ce397875bac0f8859ae636ffa93cd9aca0de2bdf02f91ec7c33fed58e6c754103a3e6cdf88b6c8c46f96b4564d6881becdfc26f871f171e80054dd889f998170178ca057cf1d0e3bfbfeca1a80bf8fd5d72d1edfe346eee31c2e8405861c2135c9f8dbf9f6f66e8b9685ce53746b8dfdb67d6d70346c117d11f2a7b32d8470cc3d863a8d9290ae19d5bdb875de0f8b8dde17517fef0055ff1854fa8fae6ecee96523e859818688ceef1c21a6313991e5f43f4f950bbc6054dcc0b85305788651fedc9be34aae7431b83e5ad6f6696086f01b93689d4fc5a38fce1cb8ff60577c48de3fea667f3b4255346bf3c2076d1289841e90588c99a49dc423ef619063f6b2163625ac4609e68a2a49a240b4d70ff8bd5c4bdc9f491aa7cdef15c5cca0fd60f1697c28dde89e9323dbacfb532d4fe957fae2a3dca93beffe4aafacda9d8bce3b9b8949bb937ebe9c559e326b71c4a9faba480dfc71cfd7d87783ebc7f4f262f8173f6fdef872c67ff800022338173f61876a3620ccbda09fff84e903066e77dcf87ec1b7237e08d89b16762febc5160b905765ffa3b515be67d6c27fc078c71de4013d284683f0881d00ec4cf8470f6d8eb40a4a20e4ef07c2c6eeeee2ee5ed11e1854179507940dc4f037f32e10916bbbb3f8dbebd9782ef987c190e3a372aa06c8bc5699e8cb7f0b83fbc54bfbfeab5cde0d581fd7cdc8df8f3256703e37173bf94f0090d9f44e50963b631ddddf1b3e6851a3fc7fb39d56864a8b151fe5ade29d07e3a82188716e1c5c4a0aa18e1d022d47e0efbfd6808ad405fa778c4efcf31def9c3610dfa62f208b64789655313d18deb4695845232a5a8ac9c585a5c5e5a5b10c2d93fa62cb823365a60ae48a324cc6f1df72f35fa13904f3d3d2ad3a87cc87c2f9f4641aaa47dfe09969f5da80996ad25586a6ca899b2589d2ad22a0ebcfc1e31ba8800883cc4998fb1270620f6f0317e2022113d10653efec40e44fb311e1137103510df81866206e20e1fa3111103f102f1bd88dc8916882b3ec62262052205e2cbc79e388108f331121125102310597cfc8910882c1fe303a2036203e2b7cf1003a2cbc71c9f9bd54616d050603b510131e5631c22de880988a68f3dd1465cf9186b441a714654f9f81371e2f63122201e200a111f1a198a38963e4619d100b10011e563b6130910e1c71823de449b48fad8138388bf23d644554c4520e24f8c30e20f7100f187e854fdf835503ec4a12880f822d2c408dfcd8c1ff36cba8f1fb98ff23f80840758feeac011ae0db85c19300203f1457b2c50440556ab09102101166b08020f7080cbf5c3801c38e44bd4a380216eac56a21d1b3568b0584338083880cbf5836518a0005a0f0162dcac56da4e1035aad410103f307e18c08f0f43342f0430337b620fea3e0f007817370680d4c34be685baf95bdc7ce2e1e613006eaeb7dab7f429a5a31db84ba9fdd8ad78bd885e4422cac1501622d10ad18bc8b5b1884eac9f53a42e5acb8ae51445292f53cacbf48a2f6d2553710da598a26b6e58b37e6267a5178ab6c5c65e35be5eaf1789ee10b34199392558b66b28ba862ac4ee0f8bc5ea9b615df79146c99ead56c97545b82318678403d685b88c6443a52e577984a25571157b629198eee3904e05e0bb8f367837fe04f539e200773c7cf731a755911575e2ea88cf51c8934e01400eef26f66ce0b3d3017730df4597063e3b930c7cf621233e7b13a04eb1c0c2bb893f18f8ec5ac09d35d2aaf8bac0676f59e0b3fb14f1d95db8fb21bc9b385481cf5e04dcb97cf71ea455724581cffec4043e3b144474efab4eb57cf7be8277237724f0d95b80bb15af564956043eb713087cf69c077c769da14ebd9ce1ddc81e077cee34e06ee5a755d2d54a7a498e4e658a77237f707c6e2a903c1b169e56c957b3dac810dde9bbef1cbc1b3974e373ef0077405a85ad7aa783d4e850eaf06eb01d1a9f6115b84b096a15c68242f08580cfd0c9924e99b6f06eb09e037c865dc01de948ab301744027f64742229de0df66380cfd008b8abdf3d14d22aec0587409e189d7ff7d005ef061bbaf90c6180bbecbbf7d1aa6cf59e40203549740afbee41f06eb21df842beeaf36303ee7ec7b381df7d8e5665ac07f48260fcf0f94501776fe3dd643d2e5a95b95c06460c4cd3755fe3d9c4ef1ed5a9d18bcf3ce0ee5bbc9bec07be90efe2f39f66abb2ae87cf8ebb21f8427ef75df7efd96cdf5d6d0d35eed082d5e28f60f5c01bfab3811e97ab284b03197019e1fa8137b407033f587e7cb98aae2e105f1688af226e3ec99d0ac4212c452f0aac26b02262b5036f444312b82257045810603d80d5036f443f0ee871b94ac46a808b01ae1cae1f7823eac1f183e5cb97ab44ab05c89702e46b889b4ff2e510bc11eddc90432b5769af04ac6cac6aac76e08d36446387e52acd358385c34200ab07de683f07e871b94a6309e1c22e19ae1f78a3f518e007cbc75eaed25605c05e04c05e31b02178a3eddc604358ce97cd2a8855cd6a07decc21d50ecb55d3956201c182c1ea8137f3e7871e97ab266b002e1f5c343ff066f6c0173f587ef672f902c85e33d9cb45f6c2f20360a99221783377e08b953fe96108cb98fb37ae5ee6a26e6eccc30800d087b6b877877b7da885e95850ca62d11e2cff2df7744577e80a86ae58d01d2c1fc6656b790dbd5c5e2daf212c9fc50afae2fa71b9b85a5c3f58fe8a15918a8825ea11b156442c15114bfe0b8b7612ad443ba2d58a68a5225a8976b07c97d244790dbd4a2f94d71096df9292995c3f9daba4b9aeeb07cb67216122560f7d61c962b17ab0fc5395aeadb41d6da5adb41d2c7f258bd87ccda1f99aafd71cc2f255d4501de798335d3f2e97935389929bac9ecfa7cbc2b227a5b923abb9036f44afd32aded50acb1dcc1da14a80442f7843abf05ed0d7891ac1f20a6f46fe0bcb3771331a6fd7551c2b73ac15ee9c4e658e15753a25231078040996ef3c986371455a355f3e77846b750a49a7da5919355991521755428158aea24b5a46fe1096cfa24cb0a42cd79b918db5a15ae92ad355a78274aa5f3e15d2a94cfa889e6375aabbf2bd455d2e23ff445db39e5e7e375ff650ed63e21e3e2a7ed14f5daea24f867aa184338ec6e36c6b944c83b6a41299af3dbc3d628b4dc6768ee5325276f4ba444c8b60918fcfb4f0a765e4639d712d8ee52ae8e3f3f419e5d783fc80ba94b46be358d485e57bcbc783742ac3922bd232f22577c48565bc5c1132c7c271b4c26f87229a803f5c362107fa1e7d3ed4f850e4c2de0426f82569c2124c7b3b2d692969b55c06498cd19a6eb8d184e62b08fc1e46cdb3895a6bbe604b6b0999af2924a5d6603679c51f6c32dd1c79700482513c08fb982108c87504d77ab30bc14d38171b848280baeee676611e2a5a46583d786b1d0c1487975010132ccab085e113380baac2c94b684e235a70f9b4b0a704d3601a173135c0fe999a7215a2e1f76fba4a13d284c0d3a9d6185f521c5f13f2185fe010311c23663db6a20d9eaac6019f230f1af03946c180cf518a1c9fe311dc28dfef72782a23707c8e2558c0e79802057c8e2e18e27314e2e4d994b0f05450e7c667f742023e3b196c7c7635d4f8ec4d9e4dfd7e1fc25341168dcf7e84199f9d09389ffd0908f8eccef2153c15043ac0678f81109fdd06f8b3f340c667efc1fdbef36cba333c55e718e073b721aad4a8d4cc56754d0f999a810000405000d314000030100c878422e1682c8eb55d7a0314800c8fa24e6e5a19e84110e338838c310621430000000000001840020000ad90778a2a7447bc9ac724c15a0c08ea733fadd63ad82458c40299a066fc0f2c0e80a37960c8e39e4173df1e53d11b18f9c18d74672d32b0f85a925933b577834967143295ac2502e0a945ff249535c714f890fed3fbe5419aec8f5ac22b058bea541d5bf4fb3b3ce8c4380f57637266da31dea865930108f0917e5907ff5faf9ac910b88a1ee5ed207e0b197e10d40807182815471586dcb5e19399c44c4304626b06f1fb9c915f2bab37ffb27c917f0086fb7fe75341b682c6f7685365ba4f7de69b30087071eb37e9e31cbd09adf7db5c0998c5c94260dff03d199069e4224488d72751e464e47e47969a699e9e92768616a0422a2e411cea2813e224a63a6a6267cc476a9332e041d555f4b5dd1e6753128c9a67bbc10c3dfddc92d44c8739970cf37cb0d1a8a286c719ac0dc712021ce3a0ad78dd393b2e9935f44c1934444e2e933e06da0bb86e192885d22527ccfe79bed715a8cad9296eb4b4a54862f44cd3879e27d08761addf1a15490560d7bb1a026a95ab3d2c59290542b1ea15b031f579e1b27541304b1cfc4993e6321daf9acd7ab93efdeffaca040e6d19406e9ce140f252a5ecd5cd65aa1e7663715c2496fe97515749f4b69f472f38bd498dd5bd51e5a48bf2235a20a9a3619c2622fbce37fe4da8b44b4b8b557ce207f94982e5fe1ef618eaf120ff6eea3e32bbee3a81ce173aaa6df1e501ae01c0445bc07e3ab5fb9de297ffea688434c9b1a03e0a86202a80d3c8b85ca4c4833ea05a45ed1df01fe2878fc403d16ff1fb70d9167d820db1098324f671a5c493be352912a78e833b4ba4bb8b86b3232c3fb4fc999d88541d986ee6d0480504090dafe10389a4a42e9d7362cd3cbbb6932c4aa1d5c32b70442ac6b97abdb13072d8474611a53b360ebdc662511547185d37108ba60628836bbb64a3683c0ccce06f3d14849e38a9fc7d3493ac1c5bb2aa149fa5311eb6c2463da9136440b3f1696cf38803c8da2b7cf5ac9135e66b58810bfde0ebb3c0c5976eaf0217dceba3011afc0bc3ddbd235dded5dd7761519f7ceceba5436845e3f6e82f24ca00ce32c1862b7842a7ab64672b7551a4e2849fc54224846deaddfdf86f0fdb3a667f3ba8af14fc1dd29d36e052734161826c498b0c1a61836a55ccdc39b6a39ff9a46075ed5d1342c8f4068611af172331d14c6d8ec0e3db5c80daca6785b393b045ca6a778ee3cc273847df2bd1fffabe0d4f16fc2b15749d0d3db0bf92db88a7196a8365e0c7318b940713feca875c243843d3644395f0fbdb2c2604b1abd137e3fa82e19d9bf929b55a132d61883c60b9e3207488e0699c476b5d07410556fd9ed2348b2e987c779669d1c7a067c4242ba21d3726979c3a0362ab47dc19a00be9d2376c6aa093aebaf35769c6b5aa5415a806fbd0bf2e444af842724925424148fe68cf7a53a378431b0e67328aa4532676a95813ee12d815be34618b28f40b68536e03aaa13bf266d0d445d4eb4d3407ca801c96844a3ca23a13e70cdc033ec1d5b9858fb9cb3653640ba85ae78010256c3162274f04bf24d5b911bb64a6005761ae0d4d617c2efda4a64004e5fa90885ab9e3abca615d3ca6045eb3b6fb0bfd9e5e0c595ce30c1b6cd025d318d1b82a031a527c6c0cf185054a4569fc466e9ddee3e350efc403b7c85b7fb28e33035cc8eeab9ac248bb0d1fb799a72870b003c19f45f807be1e6683a32d649129554b4ebcce59981e007ccd32b4ab6dd7cebbc5954cef088dd6175724f046806bd06aded402a2b1b8141fb2e16e4df1ba3997aae388dea58cc7e38fa33665298046e9b5debcaffc81fe4f0bcccdbe9fd17fd4040e6d239a3cef855bbf5329b3fd35a7f9fa3acab4ee945bfb5da1e6c948e47afc47c01a514b71d32565d2043951348d2f5e155764b6defeb75fe70bb4af7bf8b7135e3361fa25c97451556a09f6036a8f1703f6b696e56d00486cbed0ca8a134b89006f1cba6105d95e52479b3bcd4d0f44414f7429316d16c6ac0702ed38f7c7af64873b222e0e40a35ae4e608f38b6a74b099156e9841d7aefdeeb0ae0601a497f59635705f4d81b38e4510f633e807faba08b1c475ede35609511d4a03cccafea80e86be56f62a9b0e520254a57c897224ee5351703b3037e0801ff682e309034cc6af02a8e93d108cf700a45e7144b749c1ec1e083c03d943ce2ea6e5a4da0813bcd13e9e88befa95fb4a6154705f33de951642ef9287cf81e13c330e41b70d30b8ce2164beeb2a37b21ebee9f3591dc2a1c2ca8374280320ace813232751fa16f7c4e5a864450ffac347a357ce16f4017e83c4e2d1bff459c01448ebdc4ee5d4d2898917f8b491650536dcd6ca5636e1e4579da6b0bc3a5b61479989908dfdc5f6ea27514fb3e89b510475ec5d3df1dd42767b35589e0630050457b2facdb96f7d0886d6410de3182d9a4d2f6cd8ce753c57f325461b902a356f80b68031f59b1e1fa41edd388856829dfc3e1d1dc4c16f9dfa5b7506a383a890282e93bb268805c0ec93121782aa1758f87da1bf7ad04d9f7bb5361ccdaa0ec5fbe2bdf911241842ef0a2adc88a05cf0841f8adf2b163f45ca8e354738accbb62608ec07de9abc66b3264bc064391dac3ad449318e8b405652055297064ac7d1cda2c83b1531ba45e0c606fa67c4a5eef2339acf0e6a2d7a6492fd68aebabb3b18e1b4d0a46b3f48c8571e383357cb46e15d99826052e3e2fc0b2e63f343557b8bd58b5840a045f6443541a33768de8830ebe4ff551b04d2eec5a141d0547692e264a7a23dd8960897685ef4373949f4c121e895081bb0b37ee702a50145b54ce158a9a3d185603ff66ce541e8608143448a25fd1f6d8cbd9f3147b71d69bc755a8ef9886b3c8f5f7ce7b0abb795e1f9d85fa84457e245fc8c09ceb6b6b2cb1e1884910b2c0de4c0f7974a5df11b4acc743e0d7efc115813fb8ad2e074c03c12de1e66c3bb15c5798891cf80d91bd9b035bca0c9c1bec73707ae22b3bd0836226392b47cc26fa9a257f733d0052edf11d19ce757d6cc92c970319e9361d8e73d59134c5e674c38ded63fe5f656b735c1304cab585a033e4d1673923ad370632b30961f97e12ae3275693fb939e203080a1ab93b0eb691c79fc426e0028f3cf55ea157b11eef541294d28b18c99028561511f5a216f840931867a23a084b10dd7a3fc69bb66fa1754c97e1ea251cdd66055835545131f051a8e31efc4806388fd0aa325dc41c084dd908fcb4c2f6dc40ea359f70858900a14c6126f581d7c99da5a6d8947226f48bb7173c2eb25cd8d4a09df3e6e6fd1c278779be67c545fcd21bcc4d0d87ae67cd2a13282f40d00ddce2f4dd78976a81c49530bd187a9f3bdec4c73e3a7d6733db30f739d990fb99289cfb8cfac0fb9cbfc87b964e6275cc8e4d35c65ea07e0ce6a66f57f8858f56fe15945860ad84b5bdd3d42ac603240fc1b9d0c049ad6fabeb57b7851ae66cb061bfaa0004cc7a56598164a1fbd4ad7152aec25cbd30bcd711ef7e2e13ca56ff2e9defdda93bae6b097cf2c55b67f322d5be075b3be017d6e9afb783d753f189dfedd9c4fd3e465b2cf4e7397d7fb2c5e07e1c052ebd4c02b9ac33eb9314118aaf7e3b7e27e6e14bb1a5583d4f6af48aa97bbaee17279ecf81519fe8ebd6e8deada5046a4f1b1482671fca969d46706543011403b6d2147e65722ccbf75f971b444fc3be9b893e657725edfdb6a2368e9a0bfc9996b1a55a1b2dee3b1abedab126693503f90a5fdb6d89d89fcda8d48dff0eb8f6dca43f895ac75940ca39a7a02122af19bb4368d45b5f523db74612a0460fedc1d3465a159791e91a9b5f1f5043ac8d036b4c2e15bdb6a11bfeeef543cfe0ff6bac6b818dc9e8d8ec4d9f0d1f372c05559abfe5268e7fcbaff230962bb0c693e3a32b375be13eef2cac3c0afa7231c243a60e3697b7151f8932a1730f95547b1bce3326b597ecf33a53c736cf36b7011bbb6015b8b334f144c70608fd853d67dc0eb491c585d13e1771ac0c7b32ee1801fd465dadadf96819d27f3acf2b94d857b402119df7f602fe8439ff5e6ce73502bf138fa0faca5fef859ad8a16cb1652620cfb0f2c55bde959cbd4c6112fd4c3c8fea40eec7cec6795c8c764240f56c9a0fe0756ab8dfcac5bad90387ce827c1eb3fb0961ae567bd689a20975009a3ee37b095f4e0cf6aebb7a29a4007a3fb556af1811d4641492d669eb1fe035b417b7ed60bad21f0b6f04302fd531a5b3cb8e785cb471228fa532ab665717708f1cb0a54faa124ca3291b07019d8bd03f24b09c698628aaf8de78029c92d63708595c3201f0d7bdcbbe5e482aee0aab081f0d2f6df7198e360fff95aaa2c04953107b36299f15ff578b2c8b403008a4c18dc7aa45324449458d827da97fc43a8e5a22f4f926c92ff2cfad73dabe9f1f06e41865a3a52e19235f11dd6844ed4f28f8cbced8a2478bcf2b19f1cc3acd18e152c409528e24fb5b665495cf914e3824284b434faec6d9046c99fa0fffa0e3515f7760b7598285b41dec29f857c20361332c797fed551eed0cc3c3ddf6368889a51b18e193459e63a73f6d815ed915fb09b99b71158e4390cb17fd5f9111decb55e2c972e25a77ee9d1a448da15b7bd95cfba3a919f325a00b673a18e3da468997ab0ba0724aaeea4e57bafb6f35ca3e2d212811c0131d33d8cf3918a08bf72337cf6f58cbc78fa0fde29f094182cc025b4c6d750f7985ed50603ef145e7ec226aadcfdb5fd89b33aa747c302cf69284ff72eae08b9a0347a5e6e99d57d1515efbe719931bc51b2da02134e53a87e87b7cc4e39bc1d36815699b4df14de751e15006b461ea1bddfcf93b9536e6824bc209924cdf9c11690f0fc89dbf0d022a00b62814af98e6d8b97afcbbbcdb6286d7f9d18209389e68b2e7d7975e2e5e610b508b04b36025a59bc5fb11f0bdc69b70a87b24a8a0993d60758df8dc37ae467aa5b6a75c52145acbb0cd08c69a066e403ba0359aece27a847a47e4ffba8c6fb11ff603961d76a450fdd08e85cc7f723178c1b8aa4e7ac6b03fcb972dc300ac1d594300a966a2eaea5ead0c841e236cf8763e1e1c49effc0e4369567d1a6167814f7b7fb7be0183bfdc8c16d8bc45305685622757d8c48fde4d05ddd1a6cb4f6f801ea110fd9c6e8b625879ad7ae43457449c39246368ad0da099ddfad4fa522e9537b8de58cb6488011924cc97e2c7c90dbac6ccca9d48839b5a15802674b4777529137581263b42df54f53b108d3d45e5f6d1f878e28f66b7829426f9866033d7a9822eb2963b2453f49e1fe9686309822c68ab5302dd3cfacd4fa0ae9c375ff1a341b4e6c34e0582e4deb61f8f4a49a31cc29471fa3928b98c28e8f1030cdefdf034f8d86dfed2841a16ca124332bdf5f830ad106e8f6f84ec1f5614566992b2d3e4de4ba542884047522f8f2809843fa36c1f7dde05e3290b89648397d9ee8dd9803230d8c606fa02d5b113f10e50b04fb81066fed98f0804842a0f52811c93e4139a3fd09898f740d4d62e4060204ef437005a1afc040d27b5ab00f326fb414ba515c0b02069a60fbdc8b61b1c944e88b1a90942ad045c8c00a0aea202a8e3f88314cb1c69ba83fdde1e01d484b921fea758c88dc064aff788a9d6fdc1c7c42f041988450ef613bc881f5a673a123863a2254f0bec49c8013fab7f978368d2d863f423412ab0614e86fc4742416233e5816b691579121522c0fbc91e742b00243ca6476c8e81d8fc579468a15a23b60b9505ee8488004071a5eb3b66c8a90b61aec8e8c372a9b6483e8c2ffcb34d119658cd67ce7e3ec7d3c32adf45671391caf4493f81d7a15313962313750a9a0dd70c03d6012f3c1a24fbaea7cdc86cea0b2f0957bc88e577872a1b9946f67c6762e6cf165948aadd422ef0f8e18c3ba6d80a92cac112385cc7ef00a3db857385ffd482d843d986335ecb03c48a300db08794fe53a84204f7bb5ba1576615496287b54970a47c5f1634c8b498f3e057e2100c77d6e9282c8bcde49e73184249f3db728c098f5676c40fa88269a15789feb324afa6880528e8236c7df87580b2201751af491c89c7f0b19c321fd1400179ddecf26e422d6dd615cc00e4df0091b74183d30225432d259147967c1fc9432e484a6705758ae25028b9bf09b578166efaa1a96921be48182537f777801a009114da00aac0c8c2de36d2b833927983688806c91a0cf8a06328827c1848de4d616b8b9da14ec06883fcb313d293a0c0ee31cf9cb9fdfa631be1bf35c192f4aa1c227d14509b0e4d93d9538bed5ca565381273309bc067829d8a6899fe60be389e1469ec26474cc7d33253517fe9dfc2e5fec0ebecf685acf1b18fef014255cdcd4a3fdbe8fa079777338490c3946041521707dc9cf99d0781dbc1b22e6393ba05f4ecbaee5da5211312f827e9ceccfd959f0249f191776115f47c3e285f827c35565f650c5f7626a03cb4944a7a7c7929cda2e16c7b4d9fdbf28c32c6bf464405d4b67fee77597e179f00b65ffad3db56eefa68b0f168d547bf26f409e4bae89ffa25acd2b4c1c0f194eeee2c1420799321581c32a3656fc7430ca8de7200ffff090d80eef48582cc00492ce4590addd698641edcc160fe1da82ca4754f5bfd670c9a827a669f7b2445dddc4a98534cc35bf2a0dcc246f14600b2b100cefd4967d79b205a9784460616b1e8063f344964cebe39085a584fef1b6de26e8fd69f5ad87899950cf2dd087c80eb9c166374cdd8c46d9aa482f78e772177416246ce07e90b6ad9276624b001d3b85660214cac9119c4f62eddb78404b676a2c9f75d389a30ed26dec54627bf4f81af4704bd4fba23e73d73f2ffacf6a2d6ef64c44eaeb57832591cd6743496190f4101b66d0410ee443039105fd104c9f42693c49b71f089aebceb274303156d1b656ca7510d739f6642783b396147edce4e1c0996e9a15b3fe42ea76479bfc5f0a0068ac05f95b4608bd13519abaa528ea0c7067da9c8478405f7c444047a33d4e4298c8773ac880aac49ef1e1f3cca26e59a34c42a0049b58f846b68aff6b6b68d10521291e1019b4fbe0770a9fa4ff4b630e04cc48d0ba8bbfe53047f7c63b659375eaf2394dc769b9e0d765658178435052450a3729d2e574929e8d8a7014b37e2da5b5fde2fa0a0ef544ee92bd7ac2daa5a76c1fcd70d7162dc31dd67fb6ca6c8c5a97ce5b5556abffa4226bd1516b81300521dfae75ad8ae3352dc74ab50ff968bdedf9ffff56b4d2ea230d00e223b4b05eedffd816b452eb3b505d3740a5e59f55e1f04c1d8e19d0f1ffffeb59e9f5b10600f1d15958affeb72314df58a7c924c11980a2cd6216c977d6d2a489f9c57fab596bf21c229baa654b338bdaa1ccbb1b4bd0fc8bff16b356c47b189cf8de64d5b8acd6abff1c4e2912ed6f2cd3e388c04173f6619b933585e94c3a8f7fe047e7d4daac42fa0458c85a255107fcb0c60273a8b914ca1eb140ffa83e3fac75d8ab47419dddcf8b8332a59511c37dd832ec1bb9f4a8b31f10652a93d1b4670d3ad75daec47ab9a49ca141c43f36a8862554461bb1bed90645ab76a1c9191896a928a0f17b26243d5aa655196251c702013e2314fccf5035e5cc0f33ea885e3af0e65133ff8a17328b0d1bd667a9f165a3789964305bf5434a5ab3b6ba69167a24f1ea1ed6bb9d541c5662f03edf472052b93f1d4086ecfc7f76f675e6a8f31a1fd721fdc57b150c28f9f786c1d7016a11da5057feae8779131af916ee9340fdc3814f67402f704080187432137b6324c7e57aa8bf81666fa9b2ccf5b00bf98ac6d4ecd1e0823a4faf8d4fcb3dd065a11a8e960db33a17cd03a37b0a29e83c2e5486e2d272b6dec6094a7e5cc2ea622b5fc9a180d1ce33e46fb086be06bc7bb1f2c7c722e94a41e74721f20a23825f4cb52a75b770de275729a770c3660f832e8cf31617f917c3ecd642e1445921dc67bf64c93d3c18b880389d70225207035ff5e53d8e93f32e43b4212a0d2663235084e38984eeed1f8087154e502b9b0a53bc3b7f96e653cf8d931fc2a0356a16fe834c3873f3177d7d786ef2fd9b701d875c6dbb04cf9232c58c5dd9a19afad9b3c0fbe344aa7adca985eac844f8714a955d83e3bd7cff3cbfd2f73ef62a810bcf885098e6b61eb86b6f6c99e529f09cdf50abf01f242203ae5691cdbe6e86abbb715a5d81a696d1320e35ecc16fc7a974614d2e63e0ddbce4030306f0fd7de88d766b49d632d2df5a59ed69591a5c0109f83cc3f5eef306a9ef8d27c063a9569947e2dbaccaf41de2fb6940c5ffdaf13a50575716c754ee572908310fe8c55e4f0bf60a0279aa873e7891f2575f75c721f466f5b748ecde30449e1b918f53168daae08ecf2d82b92d2f52cc8594f50916fcfc1958fac1dcdccfbb3a4b77a140af8d8d7f6fc7b6745f3bf6dc0f8fd736dbb65038e4d4a178fc8e9337808f1766eaa18c149da86dc829d460ede59a240c7d11ea85996327a96f843a0ab5ce4fda9183e7977b27eeb70076eb4e1705fac23a4d8341182e24e4ead3a84023f6af4fd9a4116f52d6e7fcedf7cb9635698e73b69acf10a0fd4c7c9d27ef710ea076324232ca07700ba4b9e41316e9b106690d1425e6602f1bac43eb7cac8084e184768994b4cf9e7ce382f9c17ada1eee650311360eb336967558879fd8486f5848e857506221309eb84e588abbc919e887c11efe7c8275f40d6b7a2d83c45f5b102126c58917d50b608f17647d0299f2c4afe38e489bd364a78312ea1e3213aa389c5e9a57fdf3e967de6164c182630922372ccece134e7fafe9efd9d25af0e5d0402b22c7b3f3578678c5483fedc9dd75e1af95bc795c1af653828d86e93467f28a61de74f1373d891cf8743f5d7d5f75ea1954e6693ee6b7164cc2521aee195ae15085655a370737aa160eb1404495ef7728073f51c34eb1af740147ade29e5a07d1961b728f0b9e8ef100853c00a55a1ec07582ec19d6d4a199b72c2f3cd67fc045c8b3dc65f548b317cbe2c8d259615ca79faf5379afc0fd32a8db188280c664e869013158d7c5fcc4d68c7840b8165a246d7526346d400bef543400dc26a21040f77402dd95afc00981bde333aa66131b00065e94e2d47ce2e8d01521b0c49b67771e7af61b1557882b592b8357dbe4aa873de0199284d706986d62f70b60db21ed5f41be2b14824a41b9c181bd321588a6081727da0cfa19e5a04b1516dc319dee0e2231e93164b0e56872a6a59389e5723a38c4deb806bcc8b325de06832c6e3f5db988b0ffead43cbd75ab77d80d06c72feb9fd50c98509aa775abaf5228fb04a9a7bbaf24c44445424f17ddde8db5fa05104595aa069f58bdad75e23557a11e23eec1130904f69d836fc284d1cb41b7092d55878cfc687ac9ea70d8d22fa27149019a76b7652f43218454242e02cd481e2dcc5b9eca10b963637c3e01208be52534be4ec8ecc765af761d67242c3705ab3192021c26dc9db800f7b3a2077ea72ba9963e61f02152bae5a6c3ff5e84db329303ae86fc6254ac6d64871da41ae1855cc36741e1b9d8df0eca82c10379a3fb83ef151dd659a7475a2906117abb768e19e3bac9f45561eda04bb6ab535d04a72182edb808209728bb0bb3ecf843087f99b8aa8661899759c14914bb02360b8d0b9d5a8e31019883aefa5cec97c436acea6fe543d2953e499adef8d87c34e48bc3d74321904b9421b415bbdc803bfb985bb13b4dab2aba7d91885f3a1a4913c63dad7a91b51da9affc7c3fde509d68101c73c815f05408602728f7a01e4f97cdddf12d8fddf23a427d001299f6f587149faac30a0ec638842ce76f2924282e5cc30e098b21fafeb98c694b9d8b8a821617f34f7c232b8302b82de2fb0752c789565c6efbe0d49eb944d6e78bc10c5a4a7ce1885a0e1d0140b4e52dab77f6e1aff22ed1f1678592c0e646a52d1f3f1ea65d00d2d6c7cc7bde1fa524e33d1066b4525e5d43c8be8f226585fb2172bc0d588cdf73883907ce0f745ce242ceb5b8f852e5e717c3524a35127e0d264f1226357f7282962e451535295a12c95afdecc603edfad7a93845223dfc6bbf3950b6ae90490d6778bc615232f3980aa85d1df2fdf3e63f494ee28c8c2de36751b0307796c5bc16f13acb65821df95f98a1f3ecc6da604aaaacec1ba7dfa284ebd5b222bf644571a5774f6ed5a0ecc8b8c610bcee52623c51b01f1347c0912711836ca46a02347c973b94ae713dd98fe0a24e2b60e43acc930e35861916f57d4e005fc543c1d5c2744417223ede4f5285c451a3e2d884b7bfb00c4f67fb9cc5ae67a04da883b9292676896bf553ec82ccdde7513ad5970245ba32d691da3eee2ad4aba6729761d10f0162227ad1c12146906cacd9d44bf079c2d9b681a3ee984a70d515423f16bfebf04e7b7c449d64a6ce6cb978f1173caddebe110edc17ec36d7e67437b18e164dd849f1d5a91fd75c34c8e499d9576e9a7c216cf039946c38d8a1af5b0f18c1e9f50c2926fa1a2bc5c099f9194bcbc0042a1597bdc6452fb383c4faed4476a4a1d0cb9013f6fd840c0d4a527422b17689d5d354d1cc14bc2bba5a03230254775fe503d0461f0fcd6e48a5cadc3585f0d5080b68cafefa5afdb8285d33f8855b66f129337b03b6e863b41bd8ecbf1fcd1d3d31aa97a8bafd860c117e076030f40a20865ee4728351c09599102335e4493054ec2b1279da3c654bbb2571e5f909938140c6bac3e1127e33cf7f36c365192258f0e4799b056f6f29888a6c347834e017037707b9efd40a7b8c9028aabfec2f928924a662d9bb10d808bda90638c2acec7d0eac7b5162b2e1476c39cedaba2cf50acd607e91a2a5317f717603cf10057ac66a98dad91daeb0b74a50ea277dc3e52b743a9c408d36f423639f0170b6bb7d180b4e3c967af6ee2b2c85161f1ff245b5fb30bb717fa0a8d934759459b1d3baadd5b98eb76a347df2169cf455542a81e6444181cffbc225def2ff5db4aad024a8240aa754821d2583cb506fb137f515621d86d59f85a7098ca5b068316c62e5a4f6bd86094fd885574163f197656c8eaad0a3e81cb26bca20ef0691c20296468444d67404acb6268afd76266b394b626fa5af6b41d24f70995d95bd00a61b22a7503651c4b54a994f255e2560c5bb17b818700d8f647e4eb9d7f855bff74136776d5506b4126bd16402fec624d01b9588045f1f5eedb1b5e579b67fd266a1f75342c4563d83de390abf37bed57ea984447ca6882aa6f1180817af157913e29d2f860e2c74c855e11d535915da3fab8febbb561a1e134ba0b9898d02ad773cd98ec484d5dd6371566375e374d7e27dd3f200431c30821496734f50c82b86da41ed54dc84c7706f6c136af923cc0214ec8f89762a7ef7bebbe72e5e7c66f2d92d8698ba75fd8e5594fea52e1c8755d0eb094f0a3130289b7b274b29e4e6b4276cdd7f1e5a32827ce0be17099ee21f47fad0363773a74ff50c9a439dd4837f1f6f2821ad501b8f2cb1de4f313c4bda0d85bfa298354a17beb92b2906281e3996e018bff9072232507bb0822700e2e0d097b9400ef502de8ca4010ba1ace01a136cc5a1b6f2a6b28fb4f93001c6db33102a2e79f2a41d64ca88eac68f204806a48b93d677e71f025b52dffd0714601a28be141a4a95989aeede04c8db273b3b3f93c861dd4b86624baa245a4e36459ca89833989b3f973f49f2278851a028eb111867d6a6d24e270aa5d76956fd5a5e0251e0c0106d92c35d6407da22b6c61932eae4f647a41569fedc70195b71f58145ad75f2855f1c1266b7a09b68efe2e0dc05f26d4315f952972b481c382e6d798a24c63101e220d0cb5428f2be07b8fe6447bb1b3b35819467a42b9ebc033f593d96182bcca1a8275613ac81eff47f0b719340530a6c0506d2d200c81e38ff8a50d882aedb53749e46ce00ce7ed61e1e1bbfaf4cc44661e071f26059b6f0b3184268beef09977e6083042af0d8f7833aefb78fbde240e306dfa15281597c4eac5cffdb947064040839ad0ad62e8b04e2e09edc07fc273d1ce5af86e39077899a23a92b6e8bb5154300564f05c89ae32c60dc8f91ecd0f80b13d8fb7ebd0a73f631a9be87df7ff500740a8ea92df324f79b35746c93758ebbc720d8d7ad9468cccc06ff6619b629e4608bd01f4336dcc0af5d7b89eef07dc143e5ba9857b98f95fd614d4d87db01c0726a5a0f2cfd9190ff7b6880664e36db45aaff3a3e803788005ad5a1ac1d54045b64cd7760525666c336266dc7b2a301d01c202ad2f6ff41709189673ac7b56f4b0a3b2a36e9541401df157a98587cae2fa9b75c08176c51d3b316118b79b98ea8281247a853cc846466336072ee7420b6283a869180f0da5c0eca3f2fee8f88f10e12d495f64d08ec5d048f7e0e2e53004476ba4fdc3509072223153e4cf2372468fba8b3b981094f1ba2d8ea2272de2ddadcbecdbc0c61a13436de582c4e7c32e9bf3519dcedb034a84b1f7110c12236e87683c87ba2ea338adc7cd3fb6fb6a8c9ce4fd0cd973e961550a82fc6d3a063d847a4bc75dd518b5f74b74f3cdd323785947fb20a62052c7f01e6ef3c653d779e895fb0076bc27414470103d68b7c3de8605a4351c5446a257de0372c11a7a6b20b8c621b68b960cc1b2e860efda83501457843625d761ff95fc9736d6da267c195e4c1adfe78f6829969acdc3a3328f634b0b7bc88189422430622d51e2f18ab6a5caed83e75bf43109791f0b7d5c0ce37cd35ceff63444c72e89cc8f666b1ea51221ef0042df28c79cfbf5dfa05ce1e428cb7a3152324dd774a3b3a58ca8a82e5447147260df1b3dc6752586337412e2831343ab9bbddafd1662cd6ce61c61714c78cd33ce7fcc3cd1d8123e7a57fcf94f086bc1e113952852b1c568715e28b434d0e99f1ad33f74b1fd372d97311e73202b5c9909742f60aa1b2d19ecbc08381d41b40c8bdc8650c068a35032ce325687fca22b464a90bd928e9583fc6aa09b17b81151c1d796da7c8bcdb73a7a67e146929ab2c97ee7825f3111bf00d0654a9292dc26ff224cf22b9b1bdbb89afe16108bb47a08e64c66ecb3655a0dda5a5247227c72c9351c7f05075935feef63343f058738519809cd7719954e5b9bd8a4ddc3059d286745586c86bd7a6518b6f16b6a1718918e9472b4076936b9052505c074867205a19ab2e711b2efc54a149550186225afd82d72a5dddb14b1cca7fa92e317e17069817a8b309526e62c93aec6b7c43ef911fb5cbd55ac088d037b40c4b1b04ed46a336e775ebc1e969254c36228e760735358decda448fcb2043e4752beed530202a0f499cb6c09034723f43ff5a5c7f4d247f2f6bdf14132f9af09d48cdecc7bd934ad177de86e709b6ea7c0eb7a1230820095ba7d82a9a9330b0c726065b687356d834d82c90fdd5f33eb7f854517f77f82d7d51b022694661317f2957f5ce38779636024c5c3070d876cf777e38d673961b01c29203f81a600467c3e5f90173bf808bb7e0ffd5484294fcc4972ddeed81f390f0bdb55c25270492a8377db21baf4f2d645bc9ec10cd0107fdc01858b7d2ea53c228b45716510e0dfbabaa11f1d6abf3275932142391de565acf67de0d8a9fc801e5b573399a39dfb2d04d9810b682b2ba204f61784b4dfc2b0cb52344c42556e240b9a2e8f1a08eb1f4cda91d0c04bf710eb6167c114ef19ce14e74f420a2bb18a649a29a843117d096638182f362083613c4d25d425a9d7be626c8c560d8f9d4fe9360f6240a791bfba2413126e24641ecd62b21a1937df9fd6c4b8b38d4a32b86037ad3ba3dd58d20ea35ff62166e5c8dab07d9d5054ab09bd218f8f41fa915eca46d088a9d1516108e03b08cd761f95be9f67616e1ffad64093b765fd0160f18a2bb8b70edd614c218427db4c79f5a282d3069aee6f6768bdc8326b0025b29c54b1f48c0d5be95e51f3dc9e179d3c82938c826b6ba50ebda234af75ad46287e3a7df7fbc143e452790215b9e16d088bb14f49a4db9347b90d0b8aaf76510462a8dde70a07c534c1702a820632410e1051cdfdb80db4c66269454788bb86775cc00e8ba139c83996300b1e27eaf1123669c3169118768ca77ec88d66bb81d275f5db11c8c8fcf5869f6dd0c2fc7ff517a0310bdaf3814061a540c035d842d9b6925cf04c69c7716f9142c6e873a4e9a41020a50f947ab3055a3be167ec6e01ccbf930bb1e0144955063d15bd4c772b1468b20beb98816670b6684c688f8716d1701c353ae8dcade35804969681057c6905476610c830eb6b2e8d9c325a61830d033fd633db131e9f8578556c2a91b7dee4462209b7d01e6883fb723d1cb44161c3f04db91c2f308bb3ccd78fb95cf7a1db69a9d18d686affa7b81aa04a03cb7b4013148c94cb2afe225e6e772ce9c931418b99229862919c5f4b3e0df5de2fcb44fc56d422c79f3f6a79800aa0fe7cedf5a9d56bdb7627306eb0318d94db3781792e9824d06a185542104a247d3e68585959206272fc29710fa9167f3d34dfef55d9f87149a52a2477e0decc2b56509e238a3c117e71149cc9ed915c67f3552beaf9aca5504b1a2ff1bfc9f585606f4771d5f34f50c56228476f43151cd2a8b4e75790e87cc07a945c768630d3b43355a32331e9c89822b6d7742a5cf88834cc1b13c20af5846aca07c63478c45199cf8d096058deb56136244b6a58e3d2b682896bedcb4a87a2be32e35f64e0848b640ecf3aa4364c900379bf45c51ab0d184e4e3fd6416c4a39f6fb00dd88e558974a2cfc70dc108b5897b258965a6cfdc1dd12cb58288558f7b18b9608812767a5ddf69f6bb6a3aacf0dce03f5378dbc7542ef6073118c06dc9666d03c5ccffea929b828b7859fbff04d6ea487e21cef1ae536abbb9555dd60b5c536f45638112b98d88a86ee4a6b15b75bb11bce5a761283ccd0ae708266b5d4a0a113495536172030c1a1b0498d7a91d20b6e85d8a914d399a63254d0322b04572f93e5a6e503d7d7a659eb7fbc47c8af32d654b5d15212724a29e65d049be1e6bed9b529e1d139b0567747cf42da359da1dfcca1ee7f8f919abf19904012cb4e1c3d6862523482c8fa81c1eafd2195a5ca4a4295e60d87361e2103b78054a5ca6c880420f88d571740deb47507a4fd4d409d1127f1e436a639b0aedbe7874f1028070d81cc68b2de3454dcc462342b23aa8a9a58188d07eb4602cb3503969bd1a4847454fcbd82309e6830bd0010270c8942174f3f2921ebf1c322bf5465911a71f3c7d5f7e4068498accbb9c8f56e970d34370ea9c04a20fd4178d9f82b9d79acab65e1261f200b23cc47707421740ea0dc1149f597811120584a90415ff5a68385aab7bb25341db9ea3cc427dc13a2a7345b0023998d13e9af93c462cc5773d2d8098fa98088ff822c4f1f44326d119d33e7e914374b3ca2b8f5f238f17514d129793b929ef51ae08f8914e3a61dc2d8cc8e872642a52471404040cab430b1b3d8c8cbefd87dd3a8aa601c1a12dafe93277ed99150678f5971e887a5491a00d770ea63c3a8d8514db8fc9a57dfc44fce0817b7c05212e40107c5f9b6f5e08ea4a3c7002df7210e5d902348694f5e193e7384a54645316794a6751260e38670508ae76ee152ce3d1cb265b2b2126fd7e127ad93f2a2cea387a7aaae898a549a5c3b9099d28269f1497f0fff60e1c76e3d3e4a26ba58ee007e68764b75b93bd086d3c83916fcf378588f63f15d5ed36312f27aa5f4992e4111edbc8fe9f19bd3c67493805b9a45f0feef767f3162f79bad8449a4d96c1d7705efbef36f0bf4ea35194aa408691707d66bf7d463bd9dbe8845b19e0f71076ea98ca971478e3f153b77cc3777ebf024d9a1c5c01f00dd8dc5d80bd3c84dfaefe61b4e40bbe33a6661738dd881e6e552a1815e2c99ceb6f25489ae5a7c292a67e64e607c5dc55674a0509973150863c23e898bd1eedaa47d779845f279e20b0b152c7b8c4f596d04240c51582e59cb71714a80cbf2e5a21eac37735b7724c7851d04fd23efd8ad56d941b865c6295e6d909258a791a47573b99e4b329dc968bbc46b0104c1f4589f038233cb351bf976b3ed0b45c2260149aed84b01c26fd59b6f90722793232b79c77c373d720d47e4d0d1b92f0857a7b53dadf4e7c05c741645432992b1b74ae901d04e6e38816e087652c5fbc9d26b49e8eb6d0c75b51f8cf04f79348783ad043c12201c0811dea8c80eb83b9bc5f3fa6464949e9e54f50f230f587f4a609b727a3fa72b7f39be496bdf1959323f3c47d7d1a4916fb1640a22d16e797e83fcdef892b245eaa90e215565c1401a3908a7f26e269fcb721b1bbfe98ccc83e37170cb4ffb708344d2be73488dc20c96ed3ae3003080604f286a4614d12f7431fd7c0930781cede1b9d707b17819ef42372dc9f150dcf9d0aac2f1cec066bc101844d34baa276e95730b12674803dffe9dd693fa55d69dd5f4f31ea7791be42c221aa654e47b87b9df3ea9c1450259a59f52c96dedae8e4883e8b36843f573caa763df641622ac2d715c111ee0e149e8c82c8bdce4128ef5e5d01955c1215dba340cd658c192ece1f204ced205a030269de9b75ee37938623c3dc153974c0a02e2ffa9900b9d483f5fd79c531f5139bcb448b68f7cb5dac22a2939870e0a3ce81df7c30abc0abd35ea4f801b7afbd0a0f0c64188dea04c06675544a49c1ede50af0b3211b4e20e3fbb9668675085c6b1eb67ce3a6806afe9d7e20f2588a4301e191bea86a97bd5d5459cc3442b7a88173f0475d17b875de24a6ba73171187dc0e31ebee8fd63ffb980a95a32f1537de3be5b03eeb9399b17f58a3810992a06a41918fcb34603530e90ba47d7a54db449bcfcf5a942ef39920711a70613503c8a8e4bdd7c16bba8546f02ecb1f7acdda02f919a610313b1804f3aed93283569390a3f244177e99016604a7f64d649a6f08e5fd79a51a3160213baf5df3c935efc8ca12568abfdade899f2418357bb3b622e73a65eababf52d0da54f2fe71b4bf4860361218344f42662727251bd7138d13b1c4265d6532ae6c89638bf07e780f41ef0d1731edac753a17446a1c48114db4ae8d224540ed4274d532ff595168abce6f355ddd04cef536cecad3417d2ecc0897380f99919d6b05b7350479871fe9d8c750dabf012f31596b0cf7d3f587f98296cba6efce0ad20e84c8bd435992ace6fbfe58b71809910f61e074fdf3f567dce31ea1f1ba3a3730aef24d162ac81f61ef0713eabe82819a3bfe96a616d4726d484cef9162cefef917261453e645ee56a7b209c44637bf55c8ef3e4c47df108034d293571d75e4f67c4458dfcfaa093d737166bcdf1f6ef181133af179cae1a7310aa3b7f3a606fa49298b9a7235ebc3c2464a26d6df0ae52af2e5ddd4ad31119da54f24fcf2de79208fac2eecf9ecba861bad51ad74ef430ba09167618e2cae9189b615c068b180c99d218c24561a4248f37591383a2d4c11843e3108b285572164753978837899999bb46ce4d16b6f22b0bd6bf0e861a8b6f7ae1d2f6e1bca641767988682c40cfeace291b63e3b5b6a17a96f1df826cc1be859882c64f4901e4ccaf4c6243e49d7c614b4a4264eccb8542a7e68d5ec53ef673981af63c2de73a7029384b81b14d79f18e79b5afa73b61654a5adeca743831a1391157433cd1843571abfc8b321a2cc4899fe96843623a6726cb6c715701bc6326815597cca2004575108240cbe7d80dd85f7eb121f82f6bf2df4cd38fae25a7363ea8f2a329e527e862c27b6060d8e8271c035d3adce6dc05900e35928849a6f47f7f92b83b2a9da4300d601f7fe2b6fe48563df73e006cf0dcb74929e097ae1b34e155074f38b0dfafe1bdac745e170033dcbef00478769598e55ddd09b07f378af825ce224681bef0f7f217ada7f4ff16aae6e44e450a4f143ef85b2095192170d06cb6424915c9b30a51db90328e957357b592bb1250f13eb1dc0096601814c39d78615bd41b2928d676ecf8702cb2b9e8a187cd59b37740b4a3e2c3c5860c8370add05e5b56104c5ae2fc25044bd0975a227c274d551713af41a382610488a77c46669e1497d9b073e4ea7ce42a9862e32b5f86627be2fec421ea773ab6cae593cc8f64e8952bb1b1b5ff64bbb7afad6a5340e3c42a90f397d0e9ffa3f63b83bfe6feebde6fec4b5233b5e2f40b4ef471da1292c69a4d4e073ae3902ceaf9f66620dcdc1d90e5f2fae5bff00a39bdb9ff0be56806deb6a56980cfd4220a1007557cff379a519b2ec00664eaeca2a1452240dc5e7c6f76c92fa95abb89f1a95eeeae018bb88162d3925a96fe22d87a2bf1f7b6a8538a92fe4f7744343a2cf4d617fe51e1ff59a56f6710012efa0c23894e599fe14aefcabf7aedbf16ca0e99cd7e10ecb7a3e7dbce81d4b1ca25056d7e892ed1294d436c6e0bb18372af01ac9ab8e588e005e623fedc7272d1605c9a6155b43aa3da71596f0e617d8227ca9a861119e09333f9714c2b4831ebfe9e1e1619f3bc858733420391938c4b0a932f4264582028fc2988970f5ecb6d56cc3c8a69dbebdabb3d8e090c902ff33643efdfabde5f34326b42bff03a41448d4fc023bde3fe830c88b41f50be7560b93c803f8649490ca8d573912d279abf21659fe02cf9574768071d7d41d74dc78ff08441d9bebb4a674b74ece8355f89b69e955ff1f53b376d69404ac349fee713d4e2452fdad4808427ecb6509fd69e6ece7a6f105c5c7d51e026316c2cf35e29ee0492f08d936139934833c22f08b19c7d1e575641431d2706f7596df0230fcfd85a557c5fc73aa67b4a0b8332440c568c075cc4057cdf3d5a28936bd41bb8f7966b4b9d6b4f97a58c04b60c7dc7248b8fa4b77739a75d6d492184329c216b5ca77b47c409425568a6f54c3f961aff4ba4518d1b4c60bfdcf6ebd4a9e30f85a36baa66af900dcf509508bf1ecc06c6ca6c9382c2407ef3467ef615c0fdf29979448968dd0840cb8f13b754af52f912cb9c82824ef538737b8000053865db0859e4200ee6c4ca5aa026db9c0736391c1a177f23b84c299258c69d4021228f2b6b74cc7260322ff5674b62a5110d19614e1d36cd7e56a5bd94c62db541b821521b604142f8c2426440543be60d54710c0c7aa227f5f34471383bf4d4594073f343477b8cc0fae8f89cc2d2e0ea6c7181bc5181e11391abe4c6be2748f604f531d66e4dd6bfefc5e462df2a5193a0088e8ab73740a781dbb88f8657fbf982740ce5cac70ac371697b972695d826a37af441005fc2d0047fad6e8c0afe77a89bf9a05075d171a16fc800e2ebfb1fb37a5b9dd2128aeaebe575b5e807d3feb20f87149cd8e539f4b21846b0961ecaeb22beb40be24bb82a20da47df4cf7cc85c0b91d9b13a282588abbbeb186cc2758623c1afe9276d27fe01b24a9d50c94f86aa0dda3a458fe16bc29c3c0f50082349cbb10220e5b041c5e62491f43cab82bce7e84c0c5faf4e809b50022ad934e5a489e1959951b25933653a9f3566e6f9dd8dfaa49632d30ce2f0d6c6f610d2c5c939f36b0925f2b7cb05afb4a553ea0d0eedda610c8d9c5c7c1034de57bb7520dcb25f1cb2d74c77d52bfd27f4a9e7ecfe6ea763a24fb29c2e88034ca27b60a9ac77add584307a4e73737f9d43ddc57b297d315fca219a8c65af6bda07b8ebdec01e9447d8b8d172795547448b62ada2832b847f38ee16a4e86dba9797d0d72c4872f19494d514dfb1f353f5930bffcb29054e612c324d603d23e1e0eb399db6709404bd87e4e2ea5d9bd612d44bfb459174fc0f861d6e287dab23777e304891e9084bcd8252fdcffdd0829e393ac07e42c3c2accb8c216da671422f0ecf9756d6f376a42ec40e30f66da78a62f971df42396605fb30439d01e9002dca60d26dd580621f580ba307aa311992bb1ab8d8d90ec9ee5d600b030ec017525f4433347357651237904710c48fe045d599c3bb3f9d5d788880faa9d27abc9b2d187a8d62e56af446ba6d1595746070242b1eff5ea98d2d864e1251202e9f334eddb044a6316c31c7d4594250c1d8b0dcac83b00e18098598c4583593f30b14929e7384a8aef0ab4070e8f4e2933572a255a97aead5296f94de94e5b05f132044ce1530fedfd3b6a969cd070014c99aae4d9f920d9d72d9fb1a3bf94f2db48e7603955efe7c11c56d3e800e137ddc18e69dc32ea8095e2b2d115d98e36c8721a102939a0449c9c9310c3c85ed2e5e41d696231a1b4ec74f6a86413f9c0420315db13c83c1d3ab8af6afb8216f3a4e0158bb6e47828ce06155dd6e94783bbcc93bb9eee25cc0a09d1e65fe3e0b10f6b970010262ef065f85f1f54b040bdf5844ae7c66891deb4b0940c185a0893650b78d501ebb526409e463ccc138c6d36173dc80830b449d54c0c765c6c10c5ae746bdd7e29dc2af4c4fe2a69755981cb3b797439924858eaaf986b60a08a34003f5245c0e30db6ea565a9caa38b6ab7ba9a09216e7c4028e14c2f77b1797454c0ce693fcb327301740d42386ba58b2f8239e97bb96ee9494015349f0000f74163c7c7dac523a535c3cc5026d086b34032ecf03119c82fe61193e74b8ab05d2d3412b28562decdf5d6f2e2c70733fd8a4aed78345e86739aacd321ce3d5dea28d3c1d430c61db2a192c14bc8247da1084a82478ddede28dde18e12fd0c678876d6dcbfc554b701167e9d97f5f062d575ad7d9a9414dfc69dccb19af151e13573a51d88799525ea80efac80644fbc6867901180adb07ea3e9229965b1b96bcc9b2926e3dacb62bd62be591489194cb2317a1478f9253f202a7cf8d9a690290f7b9dfc8dbd79d6b6ed7d81aba15bf97518761f4e21a1f7076fc8aa8a45c569144044c60a562b1e695e58e138603f7c141f9b96a727abc48209d039a217cffc665b2499bcb164ff4d41223faa78a1b427413bad1d1ba17d5f1a7963a0ee85cae027811719770c7a34420a804b49291263cd5eee7cf70263b4d2d9e8e781d320dbc2e5533eb990d8d62eedcd963604b6e8f36971917a29b7e7dc09a1ac2d9ab54bb748e4a927bf11f9510e9a483437583ae18dda0293856e48dff282e436f04989bbe3864199727dd13f8edfa63d47d44018f27465310de93b28a85c13f5a802e4a07b40c9c208b92facc1c4397af5d1613ede2fdaabe2f20871df18c90dea77f5ff2fdb7597b674701f83b3d4301ff3de09e56404aa153600f52ac04727243f4058d4198abf57378c3b987b046b68a01bf72bc893c54aa36fdca73bddd87abaf8d31aa85d4d6dafdd1882152d16709bbea666e31eaca33e74711a2fbe064abe7e9c030317519a28d894b4fda388b6c33a2a8556006434d129a34c45083990490d1206361b4fe25a301103800a07f06ceff1a54629e8b4cf2fa6fc9332bf447025619f5dc70884d77aff4ecd25ec7586a5a846db99842c83c075bb1449e5943b53e219cd46e42f6601ab8fe71ffe6247b9d70aa824e34eb96d702b2312c843c97e547439613a1354b46d0924e035b077c4f3ec52b24477811803b3d5a11724f6f621a3ecedba0ff5af93c0826b7a1d3dc0b8cf1d46bbb3a57e578f085a254a6c782f7959e978d8c3f9b3533df4b11dce2371bbfa1fd725c90ec84137809d428bbb8e00de0f8c6e3a512ccd932a0b5413c29c2998fecf08d615148fa5f5ecd437d4cfce5352c3adb1bb2e8541f2f211d8ea8327be8608aec9a027cf6ce44cc42ef5f239e345d7aad266d57e88ba3a0cb533e022ca6c7a11e2f191f475e7d4220c1e9837ba94406d367515600e71d2c24cab5f1196fc3947c9796373634ef7d7f6a141a5f1f5c7a0729b53762a8b2f3f18064e1966a25a14bf6d4536ee9da10016e07501158a0e789bcdfaf8e1bed5d5ef5785311b2fd707b4cc39bc14c800f7f9deeffe0b5ae8a77b9618c64856890224935b19a31dc4d692bfc08491444a4ebfac8d468fda9801b7529ccb9301d2282dc53930b415d52119dbac701208344f90d5de81b3ea11ada01090e7d684287898eea4610a00aefdcced6cad431194db7c6fe2ac8cac76210657ec4d20bcfa94b4288978fead14d503bed7a7899a2ea2357f5e89906c48aa36da23346e14ef7327ae74f93a4c60bb0d7764392cef89aef15a4e2f3530c41afdd3681c95d9840b8c04f90043bf800edac045e22e4876422fb323c9e6d41bc85a66bdc031fd6bb1fe7a1eb83e19622368178c44064eff59a9f5eac89417263efcff642016b1d617547082037910c6fa479a889e82995c25aa7454ab2ad6adfe39e3d29d4aea41037f5902be2d22ab26d58bad8b0f9740f15cf6f21971fb565659fe1318c5d03d7ca56064188424515d018e71cd59e3a084127083ce854db5f9edafdb4a03b57d6ba3f1a996b583c937af4581aef58ea8fbef8576d1980b9e7d6bded02825546cb804462eea7ac7e278a9a601c79517e6192e18fae947c284d3f3f198597e47df5f90b0539aa8ff583a35516314eb6024ebe77a7eab979fa17441a6098912ef73526b6ce2e3e8500855a8574182264c29abc46eec1fe089000224a26280810cf7a18b8893c8afc4f02a99333142274a368b35a55d04852613076faa988519f3863e06aa30dae4e7e013bed39c459de23d4c260d60409f0d198bdd1b380861f670cd19074ac78aa0736ae87bb5685dea1ff44c51d5aaf2598b77ea0855ecf64cb57c9fe119626462534cbf03a0735cd02339af7b5190cbad22685271d7ddd4adf2596033337051711ca2c721baf4880c9994bb8c5456e8ce8e88dae614a4a04760a95db2a8db01565173c73ed42e5ae33732d3e5dd896034af98faa50a684314871d54cc574e7ace7e96b268a53e9a7f699d5e2f8f97613e000cfd264729fe2e3fa63973e32a71e1210e32f322b309f8e69aff77d2459eaca64234929d99115f3c4a42914436dba866e96b6722a967a6d4035ba18746e1878b657e4f6566e1714a147bb672576bf5d338288eace3b85aff0d556e0d180625381a9023ed41d09016d17296fe476f7195cea4d9fcdfa2def7bb6bb4e88be6c5a76aed747ee5215e484f5749af9d9c50a324d3b7d3097acb9a04468a3d2e540ab047bfe3ad44fcd793cfc4fc6dec46d74ac8ef055c5fe253b0a043303c4b2dae23e2dcc9b394a300ec1a48f85ddac78c603d6e4226ca1914c42b3d87b6d3f950e14322790501b9b3034f657080f3e7cb8bda661226b5f12135ac12f711eb97c490fb185d53ecd5b2029458619273564401ec3ec62b37057c7e712634dfc8e21b50adf634eae43015ef77057eb48728143cc98c52d17766a66333d89552ac014bb8023e44f6765f3cb32189d5758a46ee8d5baf88f7225aea97f8e712183413c5d4f9def22eec18a5b5b9881daa335a42c1c046674c3573a6833fd03c8c00493941934f035029bea8c4113659e72326e400334ec8d6d8a2cd5ca7ae6910dac9d099822ceff03626ff48a1c5d0dd62502b51a3d49ab4a8f7b71eb7c209d1f308b099638a362b9466ff733bfcf781d361591fa0ebbb96056f984de7b8781201a4c18f5918113e6e785c40c7df24c3e2e4cb6eda53feee86452d326714d4d032d6ef021b3b1fdfacf75bd287a2865e11c91174eb4700b8dd4fc2213835907e5c95364f53b071f20cdeb9dcc40f4715c989ba62a2bc7b97052a80bb367a33732971963ae2225446e20c2908b5edda34304771046a200d8aa65c706bdb34ca2506a8115ed28dc1e4514a1927bfd49bf329c685b2d2e031ad55510c8525fbd35e524dcef82d9cc7b30e51ef9046a2732caebaa1e227df4d0c43a3f7f3e0788290b230ffb0f5527857eb1d207574573650d78c749487cb75f822afcd034be4efc5daab0300a205a8ed47dbeeb33dd177de166bcc8a963a70da6c35cafc20c3702a338c3401221bffb84496efbf89a12f83902138a0188f17eeffb1c285cd17d275a5ef850a64e3f44c5c85448d87a7f32ddd6473d25e81bf301199d0c8b291d98a0cedfcb216f536a57087f320b10d15a5f7985d1a05a67e46882d2d3aa9826da0e505b75132a1ed33414d5fd211ad803eb1a0a6c57d5eb4a69420e6c092f83c32d1ed7095c5e7d0a00531a1a27081a9f2beee343661dfbec3f89851bc4f6ab06d35105a48e44764f9b81714fba8eee3b9adf1db4f05c3abdeacc4729322fcf478956fe6075c489ba03285dfc06698d6d9e7d46922eae765355c063851ed56b825cc2913bb5375023cd5ea958bfd2d3fbe9af4423557692b2ddb4182658c0cdc530c260db129a3c4ea2b18539ab06c0466bb5638fc31eab07c006f349f9701cbb32d77f66006608e3099da06df41fca83ccec7725657d8ed385d9d53dd0b13431e9730103ac50a265fd1640b70d0aab35f4e83792cc3de8510e9c0fa9ffaf1c695503c37f1050dc1415fe2046505523f4533c51c6b08402344c54df2c3c27249ffbae627665ca55ad017d2c9c28ce2d662cd03b2463d6f62004df6ae8cd0d3a9e567ba5cb37832e309cef6dbd74551904fec9a45f05ad6dd454fc00a8d0e83df9fef074a54f1e060173b76b465f0fed34fb964cbd9b8b622a7a019b02930ab0c4d43f1ceeb60b1a87f454b2413047055c572017fe65cd13f81a907841876f355b3185b810d4907d8bbe11740b983bd26bc4ad5cdf9da0b862095ad68ab15e6e0a037d5d9fe90c67883dc67e50d946b81306afe0fcc2b7fc48d008c3423ae7aef0f58c231dd99ad567fd0eb0383ac938026bbe45e1b62952d6d95e4c8f478d5ea591fb8c8ff82fd8b3c57b7907ee615b86b667e7ce36db0c2a695a5d94a8a6201a1b1814ac2b24e592a5a82e0549d6b7edace2d899fda9d1179a43d9c45a145adc6980fd6e88129be8ba1a1b61c64b724265436ccb8fdcf06387ba23f6bb7bcba44f45e5ca5ea2f41699b034742289d1abf1c174ff90e7e04b702cd6b30ce2504775203c4fb122e85c8de47817a1287dea2458495358b2f303307ce2a0990076f338fe7dda1f02b568d970792e16c6013ed43fadfdae24997c008297dad6cefa622a4184f2647de45bde5c19036220b13f17f57a55318a33a42105944fb428d7e2b5a1d2b086617fae1d0b57cc4513193556f0b1305497814b71a8a4d1cb0096010b4042c0ee19174e2bc9b6edf07ed047fa3c794ca6470653682f32e0c3a4c404650e6d15f9b0b302c524353a9ad272a3230ba4ce11b023f56715ae42e7908773a048dc4202ebbd83a17bec461e89917668244300790b176558b995160024686f77d084d831f8a12c75f6c311a1a30da61c4815347f3d5524e0cb41fc84943dee2cd63b098bb0633b4a5653ec7e1b43ba111a0481d8b8186231f0a21c23bc48ceab03fbb364c259b2c0053c28574af12d3849589c4f98f8e84431dec112ace86c0787fb30a74b211e9a4bdd414f222e29e76cbb0270d7d894402798b2118cc97f964ebb179adde51fb553e04ea6e2bc0ae34d2225d0965047532ce729de1396276c4a10ea205420aa060e7f3f4e6393e73ebb8b04f3818fdc39edf53274042f05a2e61011dbcd14971f2e334bca8fbc8a3c8fa65197c329ea517116429cc6874816f83746d221eafeaee8aec9bd82d4655a67a005d451b9349afdb0efaabe29f1f6801de660bf0e58e155830e82303714188554408f82256d187ac4017f02eb47aa1e2999dd7c87bb88891781ba10b7670488ce7a28097e9d1310559958bfd2d79c35c1be0e1619ab2783105fa3a9fc6509957ab4d9379c49a1b4bbfd383df836c3dae78b87e72f50378bbf33861dcfa0759939b1a61647f6520a21edaab3e08704f476a2abae938230409992a7db25e134cedf707fcce0868615f294300458fdf1bebcf6d6242ec1ae87d608559ae9e819c57affa11d61d22e74d497b325a1b9560de40f30449f4a8a6e0bf132928989f0d42d8554e8122fb264c28a6a99d6c604509232c5bafd2759e3f08b3d0fd51762d2269921336ff3d6ee67c0ac4f7294e118047851bfa9261ddb3bd27aca937e983bef798adb1ca94c65b8815a6f377ed1240ad5af9b7620359cc31119971b42e8e094bc9df17da42ee4ab765785ea5085739e030030897e02a8cb805e442baf48169645c6258297d43a37bae0fbb1b514a0ebd8eec67221c780446324e1ec31de5f348c34897ccbc849c31a83bdce7abf943c671adb50c68d7e14a56ffea5593bf46e61d300bfa1860212647a45a00f48de5a3f49b7730c152e165a53409f20b1ddbb3baed99b5873c26e574f69f06764d0bae2711b4ceea04ba0a7e94f9a2dfc9635d079bd5fbf053865c41239318597ed46fb2f3ef0ae8d41a7bb958a2eb78eaca7526efa061638b410a5c501d59a8e619e244ed662de23b2299329e617086ed5819f92cf02f07766746d5627c8ab75a1d3412b17c76cc5224cea5d1b15c1a721f745fa94011b5941fd9016f37b9ba369d9986f4e4d135b7a7df132dbff2f7af81de071e5cacefdf8fb7e1a13eb8df58e21db9819d28eedeb1eb700449d025fff4cef1dfca283a1fd42c44898b61fc4d3a746c5ee24adc20f902ffdcc7c020b1f3b84d487fe5a1c6a3b0dd69ff411bf0a42caa8d285065f8ff9dd2b7f7c76fa721341271019ecd8ff9b0021d85f1681d82e48d28c43bee5aa849d40e6dae6e70028e5f4efa6a25bf43c1d0eb1e51f3234058c3036792318763caa9776696918648f285434022328eab239877817d8e03d7ff8a174800515078d8df521a0273710003a0a55f1e8cbddff82ac2e6702edcbbf6e3299d0183ca368a408ce1f4e32993bc8c5e7f50226f063ad4cb9671ad556c0405509701bb4fe662ce697600cc16370da921b7eabaa1603f886950764f8d90d28676bdbcd237d2a7edfd3a6919b0f19dc03c56342992831efcc53ac891d876a3b22ec52ae4f4077229ebfb738694c4003c2de4d5d2414a3c949f9939a3dd308565132a41c6c5602eab5bd9d833066cbc57c6e5426b57996c6e0a448199a9b6462036e09372b8852b6f80682b28c99564ba17b97bb69e5d6d79db63937858a61f054cb3a38543473af131d542040cf8ec8ccfa8cd1bad2aeef0ac8f70bbaa579e4c5019050b1bf9ac43af1633c93d4b23c085057f7c54b696a5fe981a861a5143b13f631af80aae701bb05dede60bc684dab693ca1d29b8c0e8e909b18f078165c8ab56be208360803b1a477839840a170cbe877c2955846abdd8f4d681fd80fdbe179db1298211600cc1068911893a0d01cbad5b67a46c77a0020898b26245afabe1644af74cc45abddbdd4f3a35d66de40311d51ca7f5ecf703dfa62aa8d5d4ca7da1d637307cb2028711d847215792ef6e9c4bc0538e399e1e4dd6a47e8eb5219d663828d3c67e297b787bd18c23574ef485fb32bbb50034ff537679025729214bb8a76d23c5a15594aff5ac2eb99d5176f572bbdda8597a1f35ceaa68fbc022d88d6288179a443997cb06d072b2213c21c1f84a4fba0dc391635f0419fd2582c0a28468f322a5da90859fceb34b2ea25dd88eca64edba05b76a822f567382910fd8bbe849319c4ef18c59ea7498a9826e6949f32c54cd136d99de60470e3f8387d8b2d183b5a21878fa3c39ac9595fa6641418d60d023a4316d7cde35296d2278234600bb7d47c324ea6b9a52ae441b5555f8af970076a8e9ca4694b22dcc052031fbec9f364174587cfaff2c40b8bbd0d6be0c8ec1d2a9b1c5fee4d80421f3c898b0d3f780b4456fe7024e6d6c8715084cd1cc4f150bc1f6b0a5828b7580e9349219f0a92a251f8484db783eaaf8538215fcabe3b829349ec74a706930b1777c7115e28f4d185d13c636b69d5b7c2a820b6c2fa54b9954449dbb7ae4cc1ddbff0d33a62aa85baa95ecd77e6e6771c0d12d2733bb544bb70f176f1860b9412763a4811013818e3e10ec51591561039e32dd1111ee411c1018275ccdb13e51675e9e0c1f1ec190d9b1a145a38e87a4d96aa783802eae81dea39da088b6719fb8d62ab3a8d8a06aba9f53a4a05100d2411025a08980713d8a6efc9792cef5a255e7c90635956499cb57cd45ca44047b4ac3be5dae833ac6f5a219498454d523d0d0fac6a6fa2d6d02462b292cfd5e1bbc1cc6872a6627e0445f7380b1d811188d935d301a78c4c8aacf25c57297a83282add41ea3822caca729c68a0d117d3b84798b56a66935c65487689dcfda431ed253ad293416155613194cdad529708b6f74f52432672e3b5a2dd97cafea9fa7b6597ea14a364cd5dd6415e3432b53f7c8f58870e997d444b54a70deba8f843ddbcb1901a4c4b7802e3153cbdfb41a2cc373441bf7bc3de6686a795deef0fa6b5c0076e7eb1934ac1a1f22aea2b3a178d60be82456ae45fec0052334a7975a1fc4db03af3dc7a2cbb8aae76387b03be5ee3bf7d38facad9dd9f0df6192bc51e25999e3554d94740c3b8db208d245fc3a4cfc6b8d1b5a484cf10536cd59bcddd32f876d4d7ae3a2120b25f2fa04522f5f9400d717eeb0d993540b6976cafb53ce42de5dcc4e7e4df7d900698bca91157117d31de8d10eaff48faadc7b8464c4700ff30a1117ad2482e46e35da3b197742fbbbf4b1ffdda9768e4362f38060a9c3c6c3ad0b65034bddde48e76e63ac940375e0f52f7bbc91ddc7df8c361fa4c435c939bba8676b75628c1944bc490e19f2612e81f619243dc4daee8e8a99a167b0a75d2187196316fd6e48250ad625faf6ab2b3549887715025b4fdd1437867a0b8d1e0e38d7210ac8aa81f78f28af42cc431236074b55016206c8301d3da7f487fdfd226c261b0ddf408de64eaa82789bf8c6a6308e5a9a0164d8b8e48941d717a53947ec2878ab814f15f70319bfd096d8ca3cdfc9704589dbfe137ba4a493fccd4da2822f87a5f0b53f6c07f59cf266dd6584c0e8369980b418165668a7b206efb85969dbf680c1214e85d113b22c64c048f40ecb07ffd91f5dbbb9a4dfd2f42fc25316140d02e0fe9f74913562e3ff6de500dd8008283907c5e0eb9dcba9674f304967b0a9f119ab96e00426aadd6cce039fefacc5426222fe75e6201387360ee813d8f1672952ffc5751165850d8c724a2f41a24dd2a03d93ab3b72f1d4356acedb5a396fd3d6f7a3dcdf88921e9ff884318656e3f93b23b9f802045a9f5a7b3b7e7d63168e76eafed5443832915380774a42e0bacc17fe10f00b4ae0d29a456d3d116556c6c00206433374b88a9799afbe87d33bd537c09707dc7124027d9e9b4168b6162552b8187d59951ed96341dde75477379555e71ee7a1e435ee47a878f0d9cc79c7c0d2e3908b7058cba2cf4558d746042ac2c83c1e5111e23609bdf8730a28a0e02d5af323297dd92ff707b60667e1acac568906c58a81a8d7129fce62008e9eb83eb2aba1e74fcc6a4fcb89bcfc21b66a5c3b52d0ad7a14ce31bc25edf01216407e57d33b5940ad184659e8ef5f9a41bacf14295a4d9db4b6f0c1f6bc3b5b0de0d68d6ced5f436206d27d7caaba7a17c4cbdcc44507789518ae8776e3f21911c60036c8a5aa32e333ddae9d2b3112d4a98a39a234d16c57850c305d4839745e601283b5c6a14e649fcb7f952b689792c4c186d759ceba83eff4f00071949ddc46cda6bc5756c7b996f1049a4a8c5ff56407a52730e86a7f88dca69f17a93b635594d913c92130255f7fdc0c3680c33709d7887049bcf0a318e75a3fd8b4b22dac5b0e0d5b856e3740e38bc7c6b47c5b1ef8496a9d48d83b8f62dd0942c2333ab81a60a466bf57a5175314c2f4bd128600b8ee2b895b4e3635d1918ca22fcb15f4190bda15a12766d047b27a2b9bc9b1bd462e03e2c852c46995a33c3dc247aae629dea5063066cc4aca89e7c6a3a2cdca1836551e671122151b902b1816076aaece9ff4d86799d6b665856e4e0bf9a77dbc78dfcd39414b0ff819cb6a4f1dcd1e02d28e6678f7412ad405389f7ccf4180ed8fef330d88478bd10b29df3a73047216b2ab43af95f087db633623c5e9c2ff769348672006998be0c2b62130ce20152d70e2746d51a5dd517f9a5d454a889a3858ed6c18b7c88af234b771c9c036f83483a40014d7c2f4df0b244b0826b1f5ed8f82eae41a7b545ab51de38b246df0d04e09b0d26bf9d9b81821bc49acac70a7f60df825ecd6b0c7c83d2cf326873059f7edca9331c0659e16ed84ff364bb84acbd09ddaa4d304ed9273f4ef9325a079ccb599b15ccb417b2f2060e70bd184b7fdfb8a31a68e966648f0d6b53aa25cd2788612fca8d3c46ced0b6922e9860fb36542619bb92d700adea15416e76b59f3a997df7092ced2b4e00ad4b22afa2d03ee630a2106e7d07c4eb601fe30f65fc9df037b7a0f6839bace87d963a70462a36efe263b9775f862583dd46426eab83c0515d9bb25c6eed882de5e7f53c1f41cd36291c8a102023371c3f491206c00a30b0340862de6d2991bd6e23ee20f1e79071942c5e49131e4f7b0c3c67f0bd875ae9791e4574b42f1aba9ffcd87e0596d898ea1a368002de010bfdca802aec37506a2ed3d4fe4bd5165d239b9642b6a1ff5ca1388baeb9e2953aacdda7a99e4b37957a5a22ab7c4f2826feafa5dbe94ac0746422ad031e4ef4d8f94fee3db5ca86a403255af6edeb75d683076c8f9a38bfc13b4ac8f112b1dba70323498261720540dde236c61739309090c076b0dc691f0121c91ce905e7919fc9d9244eb42169a6e75f72c3780c3f232f8f4a74257988db37dd5c214dfbec7d2d69867592e8f1984492aa41dceb7edd84969bfd0937a8c77f5ee1542272a5548e18b8c81d03c758c9f9428bc3962426eed08c179aca6349843eddbc1b7fd30192c032cf8d025e02627f5a9d51e21f79c5028b9df3cacb5e1ee9aa038297f57a5301cf455b14470fdaffe3626378c81241de805a0b0893d838dd00ea713d06faab1f585fdd235fc920e6f809b53d1dd3d66a0f521f4a59d851d774c882bcb6ae007c40f8b50b716c25f60925b5476f48dcd7ce859c79932ba2410da865f97ddecc5070ec8f10c8268f532c2f1e7f5516cfd89da1ec285d4506a7384d18f38178b12931e8c6c922ced10afb99361cc64c1756053afd2407c8f5b2f557de73b2077b84f715b662b168cbed6d14346d8cb09b47250cce5e2959066300cff266539cd5c44db23a994e2d7cfe04ad1c7405017fcaefc2ca7540304cc0a615382968d54339d3e0cd0d1508c508da011a6375e9c19515ecb364732398b3ba3dc867756075bf515694db4a459eaf8de92d95dc1f4967095d49f769883c3c02321a0b395a53bc73053d92b8647fa03abfbf2fcf94e461b45ad64053a2286a0f3a1cc8c92a468eb0a94c86a4d2a0760a6102daf0a196851d16584d63a90af14b27245519853320c1e9e4df3b792ee319d79850df5ef09b37f6437e8f3eae086c424bf61e14630fcdf47e1380522be1c9cbb47725158035e1b26d4032ff1d82328089382fb3201285fca55a23cf101328f90053b331b3e2421561f64ee289405b11d3f083feecea6a9d12e39025599aeabf79a90e2a72363ba2b62f7b9618abb7c030a6671cbd30cc7f440e0a166a06da0175c196ec658e743bdb26395f43e4e2cf96dbf130aecf8bf2fc9412e17d513485732487232282af196e694fea678f77736b4c5b0f927e8c93eb38090fba81401c13e83166eebc72d46db8c20a5ec16e7fa01906d7192847cfe449b416c2bbfd39e60f0f0397f646f287129df705a15abe3863ba26bd70454e30305dc75e99bfd6ba5c46fe0cf2526f17ecd1099283280e0592ef9062915663ebc70610961263544971244894af78ac93976f5b87bb2824438708c7810aa8cc58a4d159279e6cd296b4a60e5b91d51676ed18ce660848583f6a706813943a2ad36a1204c6fe96a876bd405dcb49566827be24c8a42c53a6df0e4ecc86216319bfcdd82813f0e0509de8e3d81dc3501273c6b64f1e4ea0c49c3084fa31535f6809c6303570c22dc5e5f09825a10fe112438e5d1a91f546d16c80afc3cecadcc53e794829f1c5450207401b5a88332006663fcc833c39af0a6cc48f3708c15d89664cd6161ce067bea01905c0f5e78e0976bcaede9e4d553b81a31f6f66c561b22b1952135e5b8294a23e180644cba8a24c6d5c9e9a2ff143f187e04ec05802bd05c6754ff20c048bf69dc7bb6726afa7a41a09a0138bcf52710d28e8b058d5c2949414b5420d3b8c9fb018e5e9df152a4c003cebd7b84a5d47130d4c0b38ea69224cd6006dfdcaafdcd7ad9ac5550722f598bbe3b1716244095d3509e9772d7a2c154e236805e9683236af87a6765d20e1db6813ed40cba24f45ba98d0108a8cfee5fe150a67579b5a15be50d4ca528063aa62e410dd90b819e04b699fdc4939a62e7f10b2fe017811dad21f7764952650cb5a2842b96a3c7c5fbf60fb9a07c197040308170ceb68f24d0cf63709fedd2745c32bfa3c519c755e08400712a14042c603826d43dbc4ab73e375379f672c412095563d4623a1251fdd9567ec544f9a40be42eace0ac737f03332683adc72f1509767d7b49dc685a89889e7ed768956805de62114cabd78f836c19b4049ccd44d1629fe2256b63b5a68130da999ac6bd5f8808c223597f9162e37c49ab299b21503de624e93972eb0084c66c85d2879faf380ba9f69e6df75d7514c012a4ae2c0249f4371a5343c087aade556348f8fb470be2f98645c0b4e125ef2d5089d2526c1df80745c8ddbca22982c4995a6a91c8edf1a83bddc2bbd1d72efd7c2f5f64840e5d167b6a540109c0d588ba8def90e179b133a7b99677131c1cfa0e466e50ba772885738d59065c1cc79a315a13d5eaad9ed3ab242da1e0f2a0314551647bb602a5b0094498a8646540c0739956b86fab8947f52592e8b5422c878026e6ec9e0474c4d01e62ac6de9514249a0648e31e692c37c8fc1439e2f6444aeb943a6fe4318f55886e2d2b7527e104f55be2825eead1079b80d114ad10afa9dfd76a2d213758afea81b79b580719397467570b6571de5b5b1859a0125892071b2f70f45de3840c0a8c19d974103a59af05b1c2ce9f4d007e2d1a72b9a9f7994f661e97fb384e3f3d0c72078ed6b6388062f9ef36645106d8db26a3eb8f5ddda6ad9ab9223e51d0fa621e298614655a33688acc1a601bc33b901a60c408e6a472125cf173091ee25cf9e726b02112c0cc0501110a08a8f9d3f8c798f45e2f146b0768c702e85f0733a1096d45ac67589a73f0d31cf881951646779cca48cf398d100ce040330d8d8b7b188e051309448ac0c7ca24c227e27f2f14660e808e431231e9ebbe8acac40f64f80cc398ef1382562bfd2c077a1b8ad134eb999f9e9381fe683a00d549a529f5a6d7149b5704e555ceeb8f314763a264493a25900f88394639584fe74733376c400c77b1651c105fe58cf68be1909421d0c264b2c3b9e2a031d025ff4c6c65ffee99d444aca9e5869531393f3b0663eed38672e4799f073bd2271259ab36cbb7f5fb3481697cd0de2b1a0a68ef4225c5a2951356ef7ee8d750b05946fb1b8e230023aa7d5990ab23221e5d470b4998ca613c18ab6989a2c7edd7a32d9c84cae5c12fe401f37b01f0cc3d6431fb446f4f54054da84ddfdd08c7e66b5326da8894a050336caedb5414d1620c48ba3d64717a04b52680adb0cddadb996d6a1f2a58f6353595b4d1949b0a60c3696d6d6cace18d2e7a4caaef920ca821dbfba841e6ef3e5f320e7ce4fc4e246b0e44d06eeeff5b13e55ff367ccf148d72bf546dc1baefe994acbf17f961cfcf85f9957d97a9e845925a1a45cea4f3301bdc005d9c3cd3a85c0b457f60137cacd1b35de8020bfbb5bba65167d110d91945f6e112feb9a5eeda5df402ed98e6c9eca740e5de7c0dd6e80d1975c2df7516f054ddaa3f68017091fe0262eaf72f8d3ca25a8dadb75285ee06ccb5e12041bfdd3367ac558b0656036e0930886069da765be77c342010a3e62590e26a971a83a8b098840118dd337b59c699b5de6d6b6c96211f3074daa2aacccbf24ab11a6d0091c057641a84160056c06185e41ae43205edce89e95c1fab6765bfe4290f778045c0c48ed831ec33f8ace752311ced09e9b843d211b97cd4e2e3a99dd2a504444e828d28059e21759998d55f2a619cb8c78d5371df81665fde57adf70d5efb74eea363b2e3e0cc5f89046e570952b6d3c67f614fb75783df1a85e80e27cba0e198dc1f626015a4182fd9cef433e665eaae030b96b92eaa5223b6f16412a1d02b8f9ab3a3d14adbf3e1e60006db05002d1d3851e1613ffdb8c14947d7507dad3f809149890138bf4ce422507221023a20371c1e4524e3ff10c1e42147ef437f920368a93032ae278cb9001622057caa43ab20b4cf5033b66ce5c04adc0bf5075fcf385b0ae897ea88e833f6b6273efff6b2bbbbca387dc251f436665df684c63e7f180eb6dd24a65b4543a2b511629b2de46f49d6374ffc605ae3503974e914fddc76682b1fe46a2e653aff4cd7e3433b5bdc231eda65cfab247397a1e545e2ca99b55ca204d6fed6509ff1b1254daee4a44053c9518a94eea492fb1ddecf4b825d0bf2b4c91def9bb629ad29f2a3d71d01b001fe61d75762a9f1ec80a86b51430eb32a3e6a43c970fb61cb06a86c72e3c2875420f89985a5272c84d89bda56f1c7b3b69b9643a76ff958a60036fd0082b7706c2cc1fab702e88158917b2042ccdb13b4581b823ab44f55adae99045f9ba1b0a853335854ea1090d8e983f3c618006409be8dcbde57a6c749e1e691c57cb4e497c97e9aed01ca9e6e601ea126118c381229249a48ff3b16eac1303e282b8bc809ecfd0bae694a3a59c965c703468c8a25602ab28bf21f9ff75b16248168a9b40490a40287cc3f5bffccf1dc91933f94d34a28306c79bc20077b86ea8742c0b40a407b7ebaf298dcc425ada62c51a0f094920c8f7b585c5b409ff7d8ab7c4ba3246197ae376ade66e8d81a2160720c44af4bc7cc9a4c0937fb7305fdc8c065039831855c2af0f9e9c9b51a6fa3ffd7a1febe9c311ba96391434c6495905ba9f8dee12dc3dc122b175b40f0b92cf949645c2a88d3ba8ae4a83d1c86b4b20b55c80b78ee4872f7922ea7368c30c7778bd00ba4fede6ceeb4c9a1d658ec18763084caf593ac2d5783112470a3096353a4fdce25b3269e5d9cda5b1a671b17a16c1fa12214e4df171eb4c76edca670852eb40c5243201fc150ec4fa0a7ba279640bbbddb0cfbf1332061c47e3becadf5ea6b1064c3548f21b88f51d5752e61002e0e0c1dc9e1d47d02daf3ee88caf93df9226b7249d8fcb94c04d5dc9f25308ed1a6529d43b4aa075ace5c7ccea02238c1d4050dcc779acb98beac5f5f6866aef63e8af2a2a57abeca704cd56838116135bc53c471fcd61c6b107cc8bf64b780f63bb845163fa32294833dced0f802be4639737a6ada8c54cad9ba7ce75f8b387c8779106ac071a6561ddf109f14866188113009185650481465ab62db5e2bf12f6ff82e93f1ed482293792fdd39fe5ced86dd89c378b0923fe75c1a1075bffc077463abb414b678e5ac8b73f1a70f5799c2e0650cc98aa1d2b196d160d3ae01613cfc877d3b06c752b8f1e3e5088ccdfb3955fa22de0151f676ceb8f1b3cec871f4b8c622c486165eb6397ef01ef336484e3eca441cfe110fb9d83d83fad62e4dbec3b2ed7672491ef2593ac87b94d614d1111df08176e792b41328bc8306923f0bceef87fb3093b8598485f87349c8d0bbd49ce0946da76014ddb53e49b5bd3461fac34ed1c9762645886912d1ea54d1b9efada6ca7972698f1ec818e3558e5914cf338038c375ec4690be616b7439ef27bd8bc798c0733a53df0159788430505752f9fc7a92a7ba71a9d9e0aa52c59ff5c3d70c6f1a9b67c817d71d7b987b9d3b5af6e321ba99a5131357a8ca68a7179f2ad4bfbc7af1113f9cae74070fd42680c2c146e571242d631869a0f25e0c41ab0c24892b8688faea719740c900b2069a2c1b1c88fc8d16f1bc8fc9f4709a826b1fbe9823b452e61dec25b8f2e835bd52330ce88628640181c376653bb5eb831b1ed5b35d44b8bfbfd827273bbe8f68c58c67b0f8f2064b75094e26e0848b10f611b904467414d63dcd54ff9094ff458220114bd01211224d6cd6a3fe317d578dda8e0b47176ee4d8835337246706abe5496d01cf3c206a56fba52275255d2734bac3aa52b41053be83590600849268306e88d41dfa99e06b9557e135c8be2b4472c374096b0acd05d9ef2fc88ac79a5a1980510bb25c80060b88388a638b979daaccb6a24bc8562605704c7144ee5945348d8591e2640afe084b946f3fcec05bd5236d2bf4520bcbaa1b7391ce48d568e09a992268b2f2073b85d9a9bc04268d403d77e5a75b0c2efee00c8307bf34cd4ccd1277751c09b1f362cd000a3baea534bb9acb2adf6cb3db0df1a86724fa8c09a947c6310f0595c3206c04a2ec4320cfc5efb40167317f66f3febfbd01ea213d5200704a663f5396aeaaaa1e53cdc18f4aa37bf69feb8058e18231065c1bd0dfd58fbe68f413b366d18009d8bbee7b2d042910f7fb74cac9228a897c6254d6bb497b6a7ea3ae623d2483fa153913482ab53c81dc5d316c298dafd5a83c36ab07036703962412cb957b473447279f93a781c72a3b0fd1a4139305f808e1d0913614c599a89817fab8d5c3679f6c96e5fe5aca2294c0debd97d744ea74d6697d2ad783a5216e231feebe375b5484ec353ff6ed6c712d381d860a143fa032b0d1df4c8c37903c4fef6efd3ad1eb5780e57fa38ff5ef51ce3a1c54a0c85ae9477fa2e3c4e32f1ca2599da60ffe5fc5ce2b96633e708cbaafd663c6d807255b94af0905d9e0d53e64fce2eff0bec5fb26663e655ee6b86446a4e3816136530ad2eea24ccea90b140df483c64190f775cc732a77491955478024a3fa9e1e712e2e3466518966876386cdcda2a4072f623582fa73daea9a731acbb4007ac4d02fab13d535c605619a50dedcaf704e131106045eb536a312728e4e7f016d23effd6256ad314444ea3eece499ffeee7b835c985e9b4c1881aa7f07b83c1afd90a97d698d509f0dab3e05010c6ff9d78c2c31f833fa43b651938d1089eca5953b53ca46050d05e304107e06b3509685a60c8564169aeff21e5fd2352b2b8864543efec3c0ebe1f1f04eef040f88f7438e11c20cc22c34b36cc22cb4323ffb159c88177194871efb0cb381275a220c83cba79aeed13e08f921881cbf4b706a10f4641f7aab8271e0903f5e3672c48b46963df67a60d9636f43218c6ad9eb81f5069ccc0dfad96f6d137aec29ae36429f651f7299862addf132d53a853b09199d455c97e7d338192114caf0421f44a726f412099a3ccaee08247c643b2d203f94a00604271f98507b2f0cc3a6ad2a5807ccf41d06ce87fc90a4660739ba1139da6086447826a4e17839a4e365ba754a5e33d03509760fd47aa749117e084fe85cb84d9b5a1059983ba8de293b1999e584ebde7da71e4d4ca2b2039011f109c911e7478cf3f5c86e18d5d0246ae8c7bf2e18dc7b9c73ce7bbc87528c517c516c516c29ae14538a27c515c592e24831a437508a5f9eeef3ce25e17eb00323069063b2abaa0088dae4faaaeffe5e332c8ae5a07c97aa59d2241412940eca512e4c3dadae09d910dc9c891c7d4993e27b4f14eee629dfe9d2d645c8b1089efad1263724d700c9f1db47dfb4071c0c96d722d6f4689b0fe4f8a990b65d91e8bfe708248864527648182149b6ae9d7b101bc2ddba2648cd25d239399d24c7f85489eb3df9ed348bf84bcc2535b94929243da68ffb43044408e95a7fe2ee7cebee0c4d8a31141d5524c78f11f59240bd24a87724a21e8a44fa53ea944ae590f64e140a37f45b4cee5408f78ef7c4f71e5f523fbe33e16438f08333b94d075c493e18ee4184c039418e3740843e243fa64936e48764a80a85aa4f557d42d54af6d5670ff14af6f0436f6d8673c49a2dc09952421f5f014e26fb510b0aca6f178d83891fc2ef54e3a614ed65c0b1887f02255e511b099163e843a0c781433ef92dfbfab65e33d9bb4ca33cf7e5ec3f35af47cef0e743b89e3eda3b352952252e3c5599029c4cdb7043237bf8f4aaf1d0e17663a5c628638fbdfd69e3a6e942e08b6c6e84640a413fffe4f3efa4934e3a297f5b916de821863f7772a66da30cff8611be19843ff9c11f0e66fe278330c604cb207c25b932085b282b83b0f51e368370e5a91984a9119a417836cecc205c350161a90484e31007334118661bbf2106cf20dc2307331fe2ce0fd413c3170ea61fb35a0095b68958aab65db93f46528ccd92e3834dc256d42f1ddb76807707e7719d0147b06e7461f8fe853fd7811ce857de3e185efd0ad39f8dd91c2c16c8a1189ce99a5ce9e5dddbe04a2a9eb47d7614a09402c55b272397772f722692b3c00fe385d7227e8b964916fb2af01ce1fa1a7ef965ab02cf7fc1d59f60162b31e83d670fb387d9c3949494f713274ebcbbbdd349bcd40cf22543f6504227e36a640f531efe43c253e2f5584ec6be25e63f2627891dfcdc578445060b029d644ec77b3819e7365d3a6925d68e994f5eb6bcf6220c81c72d5b4f9c48f90c4477ee65b5601c2f4780473e9192921271cabdc6497ef2ce7dde16fc525252926495f7b729292b344d58dc5352b04b8694f7ebaa919292b2d341c0aefb79504a8a863db36027a1f41331b4a03871a2a9fca778d7a5141ad66270143af744c79170e204caef80d91fc727bb96fdbb645041f9474491f782244a867c507da48d7c340c7376d23aade3a687d336441e250a7271a6dfcca4bccc1edaccb246b28a86617677856bbda54beee674665891a5842372fcca3169c12ee710494ef323114bdca14f884adc14c3bcd1e9b44ecb4ffb2c96b7609759f0cb2fb8738a5c3709c971488e22702de2bbe0c6f97182fbc6c1f8689beed11377781c4c7cc724c8f1496e7a4b9a457c4978299b35eda59c709dcb0fd54b741be1ead125cbc6c9788edf3b3c30674e0614d8be0557ac772b9686e33591a3b3d47274c6b1c3297fdefa0fcef15ee26de41c8cbcaeb7fc9a51dfee70ca3a66ae6fe1cdba6194ebbbb778a5c6cdf56fae35478c356487b798b8c5b8c4566096288feabc38e57e39b9df39cf0ff3ada7fbb273eedd83418e0d3e68e4bf7e9024e26ef79a41dfcdaea2a434b89d44e334112db9f5e137109c4c0a7ee0603490d7022249e264a69b7c464df3939220e4eab2f15e461a6f6a252552ba3b29350b014f9bced4481c0bf84a2808da17dc1bfd9f5ddefab74612a449ad7512d77a8d9f9cc683b4036912f49383813974cc7c7f0365dfd937e81b6f19e7782fbfc23ade6ff2a38c517e947f23f2c88736b04793e0f6f98adc7673bcf742e791d66f294eb4a86db373783a27c31938197f38a773588a8c7d1ac909ee549360e825be305dd9c7a04d8e673fcb3ec309b8ef3319dedfc8b420d026eb20dea8d8a816c2840bd25a08486b94091e0c2fe2b580df36f0f0b8e59ad0a7929f33e9901d24dfc0cabec66e7c5ec7bbd1ef7fb110d7bfcb518e39ea33e4a339115badc61bf60fe3c0e477bf94f27bc7f3eca7d7af5f9f4e7eb239d1541eeecad697e69a4523f146e24f82ee882335380e092218a918b88eda1c952124e2649cc9799c05fc9e1f196adb099c47eee62847f91027d2ae9dd64978602fd13b16c39234093e4824c36fdc10da381878c35fc73b398fc3f79a47e38393a91e7ea56d8f764e1be91d3a4d825f2f70b72692e1066d727aeb2064d849a08f1f8958a08d95937437f99188a55b4877902ef5c37e4832fc2652c4fe50d2483a89838149340b200f46ffc0b580df040702c1c1c0df3a0519be9d45dcf8b0fddf6f10e3f86499e365a3ffbdeff743be96fdfaf54d9360932e3dc7d88ab9bbbb3bbfeb9d9a349b042f1862eed66cf47bbb7497b192b272199fe75067e1072b4f9a24ff3649de26c9b72e82fe852eb923d73fce8f18fec430c487f1e1430dbe6b068f1ca163c7c2b5e00490e5535c0d71e15b7f17bac37733102ec9306e31d969314d82d839eff9a6cb93238c38e54d2462f9391d864d9a0ff14a754f5698f3b39cdabb7356324915aaf79307d7dfdd88afa3880bdf4d2b1fdeaab6bd2ce5572e3fbf227c2f0a45b2cb4d8e6467b5edc96ba67bfef7db88e55b37ca11cfc6b54248b3734e260774300db1c3cd693ceaf312c4176f9770c0bfd021544105bafb798def7e0f8543c4edb70fbe4022f54110f5e0eae0712000677a78d1f0bced80041368a96008049ccea473935b647704123a39042d4a7d748f0b8af142974ede7d0c5d6a79f708e8128a773fc32ba04b29de3d0d5d4397f07bcfa83da09dbca7c77b4659fbe81f5d920da483b4908f37691275c27dae6b40bf3d222fa7b422c5fb111ab1e08c894a4ba5fee1b8cb07c9111141897e7b47547e7b3b58e1577eeb9ad9a347d94b9b503e3ea4e992843dba44a10f78037fb81cfa1acbe6e4860527c83b8542a14fd1b0619fe028fb97877fd225152ca51f758962f5f3f6bed0f210c58a874f430d6d4271790843ef2e1960084298e27422b9a47814ec3dce62054ef128f08a6fc1284edeb2fe6290fd8a3f8f615f61cac292e1978947ef783e0af625cda2a62614f3e32e691f5f08946741f919dcf44e489ca7fa17ccf218a65f31f61f5cdfe2cf5f6c1f04fa894327f8fa167cf2233c1f056ef91518c5a3604f9ddcf45745ee1d1f025d3ec32c8ff18f70f629f0ff0a9ce25fb0a77ca759fcbb0902cd02fe8b065f8576821f72c10f68127c0de31a52a0c033b49ce0185ec0319a041f845d78e1023e8649148f9e05ce1b5ba772fffcfafdcd43bfedf7b7119c8c94d3523aedac91cfa64937b8fd564297dd34d4b0e2df2bac80f8123a181bdc18ddef4aa80aec7bf7dcfbb484c992d9849432cab9848b43975c3f4e3f20b6ea978d9a4ac8fba48b317643946c5255e40d71140a627885234bed0c6c2d247b0791bd4b905d7afb60b2a1699c4cbf37c98e83dbe02b9cc8238e11d4d35038d9ad23c0add58c5bf2bdaa5fbd7d45b619f2f6fe0df957a48232ca1b31596a37faeb90b78ddf6d14ed86981a282bf8c10a72777f7dbb4518311e994796f80db9511dc53a5e865fe4ca8f9688ae6025a30e0d157948932074ce6d3c328cc1e1f98a7f77cf88ecfdb4b7a4495ea4df5f8fb3f089e4c697f31579457a9ce659fdf37f45ac5b33dc109387f43beb6a8283f11e07e39f03ce22177e3f234ee619e14c9d01c7c24d6f890b2e04200030302a54b4e4eda15e4f6c1a07d353831bb5bbd2ef901082ce4a6b33cbf0f9ee19e2ce4921037f19a18cb085b06e34823bd8fb2005ac1b8da0046a08aa07aa0d10d54705410541f5513f00032042700344087cd41f621083fa43fd2106b503d587daa376a076a072405eaf2f5be7eed657943e56ad8f57595f5677c7fc4268f9fb58abd28fb52aadd4527921b4fc6d6f35bd14fbd86b59b57e30ac524a29a594524a29adb5bead94524a29a594d24b6975b964a095528a83fe56df62f8edff45a36a970cf4312bfec3efbd57df7bdb4bc2cea790574a7fb5070bab9875514aa9b5d8c7a294d2cb5accfa589fcfe7adcf452da5d4d6ff58cfa3438f1ea177ae78e679b5ea7319506b2f8c525a7ba017a5d462f653eb5bf553eb7f5a68c17ad873952ea57c4b4ae9ee567efd4d4a6d477db50671942dbd27835a6bad96ad6f5500000000f2bafd58967777b7e5c29a587e75cba784edb2bb7b74ffb83f86f9b3a6b6594fb15a5fbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbb4b29a594524a29a59452cafab1f273699b639771ece7f3b13e33c9dd791286fd07b3f5a5eabf5a9f0caa556bad56c56aad56b5ea5b37acf5b19ffaa9f5f3b12a76d5b7d4a256a5affab753bd0a697d77a556a56f515b2db5d40584d31d6e24a81ba835a29fb7c6ce2b72d81cb0f502b759ecb7fdb64c5cf9b0ecf88ec9ad6fa594b6d6ca4ef82ebf4ab9b59049afdf3efb482cc438998b465beb596b351610a0c1a652b8ef46321e01babb47e8103e8410be430821840eba0f4e06bebbbbf7c6a389dcfdaf1d8e40671d0e6ff0fd8afbf8f01baf38ad46be11b5151aaeb51d382aa7add0781efede128cf4649783ec8e302224db37c4dd224e7e4a1e4eadb0090d4d0f2de234a9bfdaf8e05af948b672959fe6405630a44dd106a2224ec78e4adc1481449c9a039160dd88367137cb1a35c9ba1696e4fa1b8f3c31b0935dae3cd024c9f5a791ecb2cb4332fdf93a3cf8c8f5e7c682b566b5ae3927c5f6ad597f62fb16ad3393623af3d6957d1d3043ec8210831ab5dec2f2ba6cd0af9ad5a4ea58cc55956307ccb2fef55ef597e62e1b93d6b7aac3af7f615675cdd46abd7d4b71fcab8e32c5ee2fcbc2dbb431bf566c3509579574cf3516ae476170a77b166d72b798ccdddda58b2ca544c9f2ca523e9c96b6ddf082f4a670254cf98b07f61206f9967ceb2deddf35c3af8fe1119fb02fa37d68ad5bcdd18f9927ce435af63293d95b5926332bb364666599c4940a377b3f917558d9bf0c7a6741896bbd95e115f9d6670fc22b52cb31737f66c7cc9f07bdab012e431cb3c52c348bfe8949335321d3b7342a4d4332c3c4de75f5d58faa1753a3daf6c9db8bfc462ee4be3ab10e4d72fed6a8b2fce155bf8230a8c4687bd550c974baadacaaa38b91ca21eef622bf78c1dd1c931799091393d797790607d3a8bb3d0b6d7232aaafafbd0bb1ccb3dbf2cab1e042ed8e9c8ccb160647850f4abe5e5d332e87b89b63d26ecaa1029a0e76020ec6bb1696becabd432e9d1b612227b3bd4b66885d8040aeefb80e71bdfa8a6f10e5f9a2433a9c3c18d8056868d275486efdfe69d5eb9aa956b520abbae07ac451cb8105570797a70bd47a170da879696adba3f86587c06b017d3ef67662b50577e6008107a37af94ee3d181f460549a6c8da4439364ae5a0e0e460893ccb2646cfa2f37adea65c9cac26b861b42aededa8f55e9cc33c7cb9b63e25ec4f0fab1a66358a53f75005d33385e13b9bec8c9546de391450ee64d37d9ef9a02c8b0643827d3325cae43b8ec001e3dee851bf0e09a90617d8c762784adb4199c45bf3b1144cda279cd704af0103d6107d1122223a4ac28b102851527ac80c272ec44d06bc60e79fe5716c8f31d8a6b46d5566a7cfd0a0a3ae459b5d4ea954b0bdb1a90e95b17613f8750626ce31144a62f83f81cba1437d76a8d945c35a8cd8743fdc506d6b575fd0ee0b2e5ee5c707bca6d659c34a2a48894aba73eb84afc9a51654867bc81548b384e648b383ea449fd68051d275e1c5115711c6a50735494bf790cd22ac88ed3a5eafb23902e410a35d8a4ea54e1d89a824bad1b6d558ab7d263aa6f62dc883ea65c49e5b7fedf64765876597627b27b4e46d31ee37fecf22af8fd7ecd1127df05576d05b9c23d95985279175c358d6688155e032f43c226fd6b5fdf397e127e8ec5fb15f8c1ca92d31d71465e6097e3c221a12ee87bb5d6b845e9055350094c02911cd1813bef311d2339d725efbd57478dd4b6ab6dcf1ff4553eaf96755d303c215e7e05ae79192fd8932f2ae14a2e8fe312b408851c9950917f9b24b5189bfc5eabd8259ef2fbc7ce91dc4bf4f182a55479f73d4cdb62b28ae61c8c3f4845dba4f5feb29e84d73523efc37cff2fc8b9ccecf2ceb988b28b769b74b598774d6b8577471401c4fe36b7980c619593a1f76488bd27866397e54993ac77e93b6fd56e6e6ff094735c053f4792ff183ad27b173cab864f1ce9fd0b16bde7e08cec7ce3a67ba2a9e961e30305e221a224a682bc87e2df3593e2633c18fff06518c0955c5eaccbdb979c9c186effa5cb7fdec9a3ff6c3fcf63aa6f6e62eae63d5490279d074782b007783a010a881f2006ba8de04cf01493d0840c6f989035b287f4f1a24b57dbfeefc387340f4ff0748a2f42273ddef3ffffffdee3e24e7817977f4d3b894bf42c89a9c79e84a75c5cfe5fc4b83841512195dec94d24ad128956dcfba2b922af05fc4dc557392a542851f15b8544858a2f92e1c833ecaf69123812fc2ac74d7d0257157930fa46064a5c8024432174321c818381bf554564081f028128780187b38120d0038d1241563124c81dbd8aeb1fe5c4e94453635d62cac597788f8f2e69376e7a7129db25e9a26d33bf604fa259c057819dc79708c5543937404660dc7179985db4cd02f93f46bb9226359026f50d9e51e5d77c6705f0f4558ea556dfb8a9cab9792da6aa1ccb563928be056f2fb7d48f2949236b7a9c84329677d74c85344daab15cb6c07f4f630afe9c370785064f3195738a49e089a9b81379402090cb37c7b3622aa64ea79b98ca897171efbd29ad6778b0ae85db625e33ee3dafb1ae857bdff31eac1b4118a3bbcb0865e8bb0d3434a9abaaaa4af07dc4160617ba8b46e768a35e34a00d1a946fdd4e6e1a9e061f8db3954e9366113795b8a8542d3795410b158d00000000f314000030100a878362b17024881276d70e14800c85a24a6a589a08941c07420c0619630c0204100000000000404646b026009f550008dabc5f3fddcc4065293da26296c27170b40b97202c7eb14b37064e50a76fbfde123c68ccb83b4ee27922752a5b5adf85d3c73618dd31f4e0b255de9d901db9368d76baf89fda553430030ada31ffeaabe46b82cdb801146b45e1b594b05bae63e111d2681aa8fa0c255a36ecb20b595b8f2874743fe92b78efefba353c27b4e771218b1f2c64d53a53552ec896c6cf625c4fca762a870a47408f4b5394bec3b2e20b1f7349dd027864905720e32b8a418b8b3ef52a788ddb846c93788181c4de3ea81bcc89a0c31ea030f7b68def8748140897cf91b7b66d47443435fc8e78e963bf116e30f9665a4bcd434af31a672c9061b5f4528389d64faa648f5916d3130e336b5bd6dbeb285560d53a8f5e276a9e5597e44efe926fcadb9ad3206c2f45b242071b2460434d2266f084c59248d25785365a4893faba2044c2860e12cf8d710bdebf8b97045f2c3ac2083242d4cdd462f2ee83f701a77c2b37935a4b74832eb6826d91f06f18a52d18af278c652dda03d80d8a6fbab34e59f1a06da422d649762f6d28638b7a4497190b7c11018a2fd161e96175ad001aa91c6db478e9c78f9f83da1bcc704b6f8d62f18dd14476a9601e3e12a2e6ad10adacf6ac808fbf9e5c12123e60013a2877144769ee314736e9f0c708988c380abd0c23d3d621bcfd5e5d6f035ac8c8d7be35838bf06a116633b29ad25a852dee80ec316b66f4d73f43803595a7c9ddf53938305a2919d99cc6e95b5253ac7a4d2fa54b385b88c0df5fdf97e387cd78866a3fc4480884264c9b6b058a5305877d0734dc8ac0c1ca2d0241a645dc4561f682d3e4119191f32b8e13534875dc3a69bbbbf55842c5d3174a603ca8b1681a7c3b549cdec61972a829fd913c452bce88f465fce1e864160398d7306346ce81af8977a404841699cda2cd9f5fae353de97596b175064e02f5f6247d22b071ea09cb77f2e5fba61db39f4b883fd4ec3df80e7acc4609a96a2c28cb65562028650095d4680ca2557664b21ff34b264883fea5a1da3c8fcf18a0676320bbc214c0b78612e54a6005792d38cf3b10822d0c613a58b18bebfca67297f4ea8bb4c92b9a5b8f0a66b23e408e1ecd3a57e7e2652338a4b01516999632539caaa8e88a626809ed6bf0a8e610bfb360c2b8a49b0f30b68d539b8c17a07a0de583e7f386aa5dd8e3197aeba9a501e39a4370afd4ad0a27e118b358e2e948309c190b4c47c57c05c37d4eebdcf32f0a88165e3b03ec5f991b6c1a03f8a1755b553b94e19be55b534b31670504651af1e5d9e44626947e3fa451ba51bab0411a45797302ca8e9184401e568d5252cd8b428924f92164475f05cff0b98cf062f5528512fcc4b378c18c02792408f86d8ea9653c9e0b187b091fa1361d05e3ff6e24c95950927d5e5f9ea05928a3914d2820cdee52e080d46839574859138686749d4df32ead6d4fd355cda86f6abbdfe3d4c6151f5661d620fb53da78598c1d5f0e2fd9eaa170b4f5bd4142540493a4545f69e340735081752725175719b2a5d1cd5586d4a225dc6e5ff269431552fce9890681e3b0b1d9efccd0fa5ab002f0122213359a1fc795fda21e07e41efbc1bc877dcb13d7aed044fe90e273b6fb6e7f18a66b68065017ef9bff0fb3cd76af8f163de14c542b8e2428b6b7f14ecf529a16be2bb50838d4708ee84377da1e7542e25b3a28faac33182be156177d7a0f53e96d51ae3901b01de0ce64cd7b3edebc9560816bd707c3d98f69a40f48c2cb21704546b86fadf6ebefe0eeb39ce47747e48a2701438ab569a7f45a611c3e610c20c126e59ac4736e20dee62f4f846b0f8e0189827d63e55f3532533258fac12b4c6e99e6d66c612dd0dd4ead8e26f796ca24305d457a5dd5a97cfef931a9c072c8565159808ed3046f05d3efaeb0131f216229ab9f0d8b233da3f71f865ef4755e6ac31a4d7c9257fc2a8957bb6bed0081b0157e2793541f941d622f347394feeb421d6baf746f1a5ae6946a85173042823367996cb8899cec73612d90445318f69b9365eff6d1bcc1a510f1e26c28bf7b1ef51616e0a2ce724ecb6ff127f38ba54208576a40167418bbb2203991b07c243a27a02a7155a6925fbc908a88771e4a799a9296d25d760783e8d7cf3408a1b3a9eab24262c32fcd2134e7606a9c297df0ef3a3687d6bf31cb11504e089de3ab857a81fdf09511feb5edeed206c6969adf3506f6b914e2a89b8f31652245db9c14f0d71f9442ca4555431beffef4ad12dc92d8eef595ca537d9b7ee0972c7148b814f5a4ef84fd7df1102290532f7f4a9dbc401170770a48ad6245e73266d5051cee1ce8a2f85f4e4b7ff3e0700ac6ed880e111e3ac970d49b0bd63a608e90be0f79bea74f08bfa1eb1e135ab23bce16aff70818b480ebe5317f4b6c6e3688a38309862d05eb462b2d41f7eca99e112726791c866444ac06310cb6a5ec48f3062baaf389ae77cfd747bb44b9626c67198e421635808ffc3a6526663339dd9d0e50120c0f84fe8453936151ba02f43a2b894ed8074e6efe76961cf64d93cb6dd207ba51b922e60a92a0f0965092d73948b4a749f47de9410f87b8e5c7e93aaf6e60d15cff000a8f66ce4ab253a3d910deb5867b36c97fa1b46a93317b8a6444261514a318889d988adab307b3778dcbfa1978b690d4bb27280c32ed243bbb9b66ec467600dad30470e95471d0fad09c75bb0fd112457bbf55533128da9bb5aefced786fb7c93db36f246f457bd9d5aec93a29525a55ef0cd39a231d71b0a1b932b0ed676c9121fa609bf0273287d1ae3b444422d42b1e57dd0510b460af5f4be9791dd463109df44219ac35b2dd0e09c90bbbffbed089c7886e13e8245c0c816c784602897747ea3a801a2e5cf2410184fee5104cd355c09c2899382455085817741b6608f2e2591e5640f61b336c75ce7eac0b6b9cb07de8ad360af3cbc437dc29304609d49c4e984dcf2885b6aac8e93eee4d4d3a6a453dc9299796729e4a1d66ce7f5b34842a00cb4676c4da064cd40c036e23b35c1b10640b9672da0d488426d71327f9c9da782c79b0e8347c4033e2716f9fd6cc2020ef971e22094ba36e791885dca29224f1f76edd27cb398513bb1cb0d66f528f5802df489fdfce828e3da0889857bb225ca051f81f768dfc7918e4607f5e0f4d1365fbe511612112dfc8362d8e2c15f5deba4968eb54b61e074b6bda9a5bb1a6630917ee83d54cc986359ab43fc901a3693155e4efff70b830c0bea171f9a06d69fb9bc24993225dd44f6cf089a6b3e48001feaaaa367c66f1d4056a8673110eae2c856a831edde7c830b994193cbda1e2d799077af74e917c39de3d22f61d9f9269bd20cfe0ad5004a354c6799035374ed95150b0868b99b0601280f468bd0e8947ee15bf920230347934950094bb2ff889bea604a0a31eca952ddeb5497b196a73555338e650ef2d2265ede5829f787637b91cc6b74fa5f99cce54481a76b1028f34bf48a03fdad9ba7e240a4011afe5302f476ad6e3edfca5baf975ab71fe084a6496abd9b60ab49484f15136225b31d82d725db8c0d5f8db0e4cfac89a266449c8db77008e6a3b669afa8f1bd88d1369888732ec45d44a5793e700def14f602ce08115f03413fb41051c1099c429e09650c0bf523197814a1c538aaa901c4ac0793865243913f66b18be825f5f47cb5147ea7649f389a0e49838e98c8e6b018154b0f7d9dbeaa64c35085c87ad7f264f2407d955ff8dbb9f8926809ea8dceba78ae65e66426fe2c225f649d3a0dfaa14541e4935809180c93be3a28308f8702b0a1ffbdfea326fe6c7cac267552f8a533bf3f38119cdfe8e63fc51d3f52d00bb81d9f05edfedc704910c95150f54cb0f2addb6fc88a97a1f1d67906068d9206ac40864fab918a5862a804693d57dac05a9cc794331e18a4ab96acbcf9afac1793ac2e5a7ba43fe07d551d2dfb0a9c0562936df2efc4cd3c2047022339a9b791f2ac67f0984618beeb1e2e6221c25b87d4e134ec84748a62f31415e0a70f91105926b50c3c442cd872113f842a7d95db1141e847a445336726584b3c870a037edfbef66f9b1b2553c6f3dddb56302095e8ecb8fa831b1f852798b4722b8b76f4bae0367753da6c5c661f4f4f6724caff21048f11bca62e8b316456382f0b33a453fe3f2b3c0d2a39d014449a0bf8aa7c9e3910d36b5b3a4df619935879217e6a788995a546936b523cc0f1beee846c929a737604b019595e84027539fa957ce6ea083ff53e2b545a49f0459e0662724fd209688716d98de2db2dd559455ab9a9823c4bc2a161100954606a62bc35b040c82ad52682ff2c96316832b0078a10f59deb10c4378fff374d41aa017ac953b7531f5d936eafc18e74d5d09f4d8db4e5533d09d4d05f49c0da9cee13635286c17b1cc996f2f08b1f1070b046b84419c783a2129a589e64aea21892c065292bec0cc80c6b5bfaa3d016ac0981383bcafe30079e06417375c7626695f2bff50f3d00f93454a8f35ce3723c6cf77ca6202237dea7cc159a79882d2251fb90e8a7a2bc05db2fdb6c6698215168b3c79d2c905a4e6ce5355c607666e7a58b60e1b872b250a0786bf5b0229ed9a48488ff3243dff1435405fb4919f5de58ee28727741f48534a4a8aad5f667c00691ab4e88d797b39cf0a9832d2cc87da970334d84747d54833f7c10f35b4967afb242771e4a7f14b0ec3f47877409d1e0857d5f21c346f9eed80ae9a5a4b93c21db65d17c556729955e3189293b16fdb8962f39a7a76b0be274d34d268fcd1829fdb91f94704fd44e15018736899a7e9b177ba807b4d56fe289df048a85b1321b12f81a29892dec63c0ee0bc12b86bf2bdfe9ff0fde8d6ccaa3bc349abdf24973e0b99e4d43f6d5393e198e0e79a0a8e3dbfeb72eb6c2d3c7687650846595aadb511b969121f402a431bd03a8356b735e893909aca407efd4f7aa699425b6b2d2e7c4ac15264141325a870f016580b524f4bae11e78e677589d0f2f23a1c2cf2fcb8099426e9bcee2690b9ba26ce3765c670a8ab4912213977243cf82968df8e1339ca5dbf7eb94de9a1c087b99dc9782e729d8d063244ac6888d4b31e9f99bbc298f18d9d2eb26199251a887997aa438b9c8414f3bb53e13ad2a37bca989be5d82a88cf01254ded54d37c4f8315b6aca2064e47d150c077f6c422ee4befe4ac6f9a0c956dc4af9d6c7ca489f4c9940e14adce5a6808fc32b4faab068cb0b642113e9fd437af1aa696533cea15b415a7be8a170ebb8773c7d09d85e9c49129c1d89c9ce8e24084e452449adcf684a2f2349dfb380af0f38dca9d93a5cf73f1d839cd57f258e0c3ef713051e7a99710f344e378e36649af01703fb6a90fc2405070195e66a706596e0592d8f9ceae6451e86f6fef17f97fc7db1f35164052b0649a3d77385594e8b1580395770bd5486264ddc58b87db0f330f939a77b531eda5c8eb1659cbc4353865b8e3ffc7d1ba7845ade3e69e7c8e2123c533d173f2c7f9309e7256e2bb176f9d604d75c8cba2c5fa0c80a0862b160158b5a0597caf24db6250d7dc67abb527a6d22d2a6e7d71a4348df13e14733314f42df707675deb697b822d572a494518f178aaa3df94b9ebfd6149a08d31f4d1331450a544b081baf20669121355dae1822bd55e9b0c4a36642fd6a409d72685ce79195b363108a49f49c0c402f38bc4f9d4974fcda32652c5b3379f411a2216a05b1a0df648af6b4c12e7d944bbb532758ac6f6f773c6034efa64989e1367a211b1467d94266cf2151f60b72490a2648d7c10e129e9ac38af125218bf37fb934adc7d8ec84defd71d157bcdd78b984f14b2a931eb1800915ff24d3564cf7f33aaab4e0ad1d38302e4238a90571e01d7e2169f4d754c4d4a5338026de3665b1896c6f742da079984e3840e5c77f2a034c9ea2992899275e49285c894c8cb19e686828680c0a1354e5d6e9d1448fba33d4fcf6c54a27b60c28ac320a5e88f5892b0e23c936aea7d4978d40d208960d1eb333b07d927e16910c496b1ea4b4f612bc0de2f674459348a71c3fe065afbe27cc4b2586aad2b07e05c4b8a7b00a7892dbe66bf600a94112f8978e02cf65f4620551535b2f57c828071f99257c54bdda61cf08667b21dc5446a9ef71eceff6d293a8ae7be7520da5af3aea4ebafb3a93ea1807a2c64c76662adc760d3da754870178a0aa0444a84878a957a7a9a07005f500725b6cb1fb0d91844dc23857f2d982e45c8521774434ffe263bcbb235e081db259aedff38ea9b59c0396f6d47e5fc89f0860e18a634f8876e86a03d7f72b6357d946e9776d9c7062617a56231064b44584f96466336f5cba036de3b980e44dbb5ddcd76525bff53db30ad396092763902658a2c9b565b54ac40dded97b3624e05b0da506bb5598561dc5407ca00ab84dcf4586875bcdd02715ca1be6922b9716e1dd471c2982b77b8be62bec1eddad08bd284fc1f04f69edebdee065fc62cd96b1b6e7ca6377a8fc8073976b99e0f22ce8f43af04ddd8ef5e8bccf92bec2ef4c2870fbd84a3bc7ac93838565490ffb614f75d715c5291a7c628177a2392ac12f4c513a497418abe467ad71dbd7b73dd2b315fb3d9cb9a7b59f9cd2d3439f6c635634c8bb181267b314acd1f4b488dfa5973c573b68356ca357f002e3d3e558f89d400ee1ee771ff91b7a1cb7dba67fae38d067db7b09e321ed10c68bee73c963ef232747d9ff64ccf722c1c8e82ec38f03c8e89fc9d6ab263c2f3870d51f14e05677de3a518e27b314cfb89b830b8f4d318d3133964e4eb0fc7cc90788da1462f8fa974222e06977e1a63ba448e9a7c24992e5ee9a138f1f6c79ce890f5ba8e7a61dccaa7f2d16a9ed4806859c2b85068f96932005a67821af45997002ef0ac3f410e75d699a10e38eb52c08536eb4f9003cd3a53a8a3ccba04700066fd09e4e8b2ce0435505997001c34597f821c40d699e330601ff23c6fd8b45ffb06e74843d0fdc07f30991914ee1c7e3e738fa1c68eed0bceb30ca1fba5ef700e3324dc0ffb7d4af6820d9d8b2f48ba9478cef5eb889a33d6442f54cec2b95d752c5ce52b6a4940af12567a2014cf5bbec283ab4ecfbd09b54a99c256d589a9536b8710ce9ec2ea56c187f41c042f84812b6c23dd4f47fa0c6a9f6d8962999c7b36958e6b43091e934a954b31278a5b4b65f5a421ecc916c934fff5ca687d1914b767d63de38fa37d1b98e42322fd25806e95e4c392d7e496f1412655279f69d015ab8628e2656dd709c201de4781f5fe4e55a01eb9c695b86c65ea423ed51a69c496725a408ddf9100fe73a25b051855496ca37e4bb5b851c545049777ae602bd5ca5baa9ecf53c2ab7b2fc3b5b7fa30f9e1c6fd673b90474a6a9e36b14863e2b16e95a1502fad7c9b3bb6c5cd33664afde0845013a775abd4fa4451cb022567355dc19684ce0ab4c255ea208266e8fdf85407476ece870b4958ae7a14158f0c88ec21a3715bebfad6a60d4ce201cd4a8f22bd225d21cd241ef3d36e550df1b4b9fad1ac38d2e217c19a92d85ae8da9e904add7583bb2368eb04168bade6edf61e57ef0feb46c4051484e85b43b815d5287fb195b707f8626a63a7c41f1d8d617f89eb2ec4d78f7d1883a3463b5d595001496267c4d0c7d18a6fd7f71501b3f68893427ca4949b4f16b723058d0ebb8deb8bfd7c435eed99878de8b2d8ea26db2ee905d60734fc720611d6b635ddf0b8dcca12bbd5688ffd5a4bdf6a31e60c5cef755238f900cf28ae4cc1e36efa60deca553e018cc2afd40aead5ca951badf7bfba8652b4a83cc3ba28dee5fee50472534916d0011d17baad18ed6a734968ca4bf1bc78f002cc7530c6a25dc1fe99c9ff0fb8d6ecfe7c271b81f7011ef16a7fdc6c56183baff2176098857b863dc47afd7876829cdb2b0ce72bc03a1a24800f59690d0fa4af307a5239558ca8c8ab2ddb188806a663f9ab59e45fb5c9ee73990fb0e0e9cdd658fb3fc9ff45db8c7b77c62cb04275789360069b3823aa2626562a78bd6099a869cb403c12bfca44c9cea6ab1ae2a9edc922b8a453c176ae2ac5866a433ddd9db120a2cb75160ebdd8704846c326433e396f6fe4ea85a3b060d6b75ec2d3ae7ec488218513c272739f09ebb4fa29e07624ec4c586181485811b9751aa68c24fddf9910e0fb4c67fd93c262cb38c5c45cd5bb278fe1c6253e6b331f09bd606628a8616d1d4f2cba645852117a63f97113f67f2d5deaa0a075297308ed5d831f5648a356acc7ac32c4402b9640869782c5183ea659e57876993c725db95ab1fc73523fa2762cc4fee2d68e1317fa399e4a9b0546ad58d6d3054b3f437d6ba3a0692875c97c469b55ea4eebe6ca94658c311d7a1396797fb94c5be6a6abf9fc309b27a790901d7f05fff23bfa353116509410f5e21a67de0c3060d100537ed7a24747b06c219918efe1b28ad75bdef4640ac15a7d579b6fd846e4a3d88a640445c4c7fb19ab15ab053dd51047d355e6b7d7932acc788c6ef57fa6b76086f51997d1d19ad0cf2ac7c6c9162cec92107769f2745139aea147adc583e2302ce9ae983be2c572d48a92eb402bebc9cff267e5af5df33f46a2db4c32b9a4761f52cced2170a91af289106392e6f888b29e5a9c92eed18a5d162743416fbf3d25eb137603d6447cdc5179ec7c84ee1baad8d3a10d4a8839154c88dbbb345897f47740d6bdf6e9aab62bcd4ea4071797c901fe15c83a42973cb8357b34264e050c93aaeffc39e9a0194ef61a601a3cbb079c639b8e6ceda1d7c592a32fc375407671c891781df13e52b212f7442d229047dcc79f71b2413973613e013485b653484d0f6d32ba98be6b2d291a77727a4fe1fc392c29a2b90eeb173c2719c4faa5036999a1c0191503d7aec104d646f9b509545fce81fb903d661b8f1ec3a796fe2cf0a4adecdcfa3bd89c468ecb0e6557fa500269e2f94efcc22db2ee535f8e6d2a379ea5f326024bfd79a776ac0d2d6dfbeafeb1639e5321655a90ba563eeebcf67e09fd24b04a8b5089c76f805c94762a2abe1062f1079f5b050bba97c2db2f18ad9ab1d7d0141bc444ea796537f9d2e3d8adbc9c4065f76c30272c93489e4efe9c19fc8e4c7898b657c1232e8d8eae4cb89a801c07a8b634401ccc7691025cd682f3dc048232fc9458a21cbdaf00703205893b0043af8108b12dea66cbd1d6b55e7efd56f0ced774210b3c07e472684df6f03c09f6982fd72892beae135e2c2c443b2e2950aeeb75a368524d628dda959f15bc11b3b84b41c42835ecd50407cbdb6767f7f4bc6e0984705f9381404391688400ad174f4f9f8dc29a9f03b3110a39c2a3e5f0957fbd94edbf35008f455c55e0bc20fea45af14c4860b7dc87f86154ffe304e2a5b0d41da1534a857fa00d2fe2910e24784aa81080efceedc785fc83c523fc832bbc0b4360fde9e3801aa6157dbdc43e9c769a66ac7cccd80186b8ce2b30996d67b0ce3c562ee701b28e8d11a0f87ae9e37052edda483205cd3723823ace14bb96e145335162a75022e2ea5cdc69ae105ebc2b6ea407fd0b17c6bc8648e88634cce00ba8389f5531324e413580c25afe655cabe02a88eda4b0e666aa0d6ef6fc1bed1caa0d13061128df5b0fc236c4dea5804fc6117aa1936ac2c6041f3c801b2aaac398ab3b8167e01ae2834a9430d334fa2970f481068fb66144292191d215f46a05aad67d46c0615eae3a07637b3b08b9c02ec011e471198470ca0fb9bbf3011d143dbfda7552d5821d03071efc527d9a6a3acbdfae30b8c5a8832485fd1907734cf97204195726ce7016d2a393ea9f5ed408b59cd2822f21762335be3f33f9f10abe7e54cabba022d21fe0a6e205d85a9b77dc008103274e23e824f0fadb56673a2e93aa4eef05f9fd5e815c6596dbb58176d7df7cf96892a5ab2ac6bdba7bc9250734b21a228d8608c6b8aa2689459b6094a68c5ebb36a77ea0e0148d6b1274c1ff372a17a79e40b2857ba84f0bd65dea6f2f339abb88accfec8b703ddbfa9d6481166c830fc361686391aa29870e5b6613aa251a63c99c875408799866afec8e36f640f82ce1246a73408b3ab653770be18d13bd36b696acf0acb9f433677e883845629963b39cd6c5319909fe00cf3f1a59dd8d6941a57c9232cfe936c497237ca3c231d99ac02b596a064fcbe2c6b6b8ec9fbad4c194db4e2cad3a125a01302ac9d93590800e5dfbe6ca1c4a426c99b3c8771f8c4cd61159edd5b32b6814312592097d91b163104424f978a7d53b2b52406f6e6881360561ff2620f41da979427ca98481d5686244057bee9ea46647caf0c7e7f576d49d511340535dc007c95cacb8560b4d8f4ae98c76bf419d259e79b067a690d338e729059cf82a9e0933c9979ee04a481648bcc793dff4d64c3f0ef54148211c4d10a35bed7bd2447ab06d23e46434d7218ae056e682f50ab1359ea8c4b097206197bb7a1b17a63958c02f0f91a7224e92ac7008a49d88ad59f101f84022b2107c7a424f0292aebd1a5e58c9eb0804b9778659faca4482515f33b24150ca2f0dee81a914a6bdf89a3f826d5a427349aac0f22aa8ca3202f37e39e05e01d33c4877be2925e818a0cdd140c8e44a795f37bbd3d67db682b3f664af8fe1215dec448fc62b54ea440777e478324d8e3ce9eba97c8de206f8faa756283182d122930702fcf12bd613d5c265dd276d5ca60858f280a81a905e616bd47238706cc9cdece7c22322239768cb056bc454184d5362bea86ec477558444b606387b03683e0c5a48b3e931b84ab08a3b4a465a32010e145bc2a5948aae293692a9a9c66ec676a07a7cb713d5f173c46ef5868d24349e4b613a54ca556a076c58e52a35453ba6741c991160ff16f569d229bf97cf756d07b432a6381a2da363715933045b9038a5cbe4f9302e7d7c6e3288ae12e1811376dae92a7d661a1521dbc233d5958956875eb6948f4460e6c0a7577c03443732b8031629ce4a2c42f5335fc0a6b7e7a0caa79f3d0035a3c9f00328e758642eac3fdad50b3a92c1dc29f542367f8b69552f9463b67a4a7d39b8c7e0dd06de5dfe50d342cb68bc5fb2ce10caa38e5dce0c3be6af926d053ba7efd8b7723169a461eebde5f6da0b9a3e6c8718109eb26e1cca9c35183081036b5d5af0f927013dfb4d1cb082a1ebcb2969db151a8909f15293927471c179976464fa69d409013052f46fc3c8ef9882b0a8080c06188a3db8b120c1d2ad9e6e80641612816e01401933d313c3fe3e283030fee6196955a56520ab312db48e3a5fa511f098ac0398834a145ef12713b14a759d6e0a252b684078c0693248c9ff83616e20871828d191c7a0d62c1e2663449e0b7ab02d7d861820288f4e966ea490251a70deb5d5c95f429c7ab345555c181f7d9284ef80614cf662d3c06be469fcf6a4004b991e939841011cb6382a1b004d68807bfb2259eaabf59dd408f74fd2593ddc888b82135675d494bfe4e60316911add8b9cce6747285b8a1fa5907978ed08876f95257883a675f6ec035555901f9d3adc1b38f479889b60f11ee8fd367a22e404001fce2c2eda744b2488b4519220202bde7ab492efcf5248b07506d1c250a34e0cbe91e40c4245b73ec0d8b831c70f778bb06d8fa070b3666cf3dfa17929383a79b19533496f048be21228e9c25b50c8e59b9d92660a2e842b053ad513f86cd39525d71a3c0d8df706a1b6a5abde354f0caf04e8c878e16cd8c7a00abd3d12adeae54bdc9b9444c6d11f967d81a93d86a247bf350ecd38fbe3392d2e83490b52cad2124ba378aabadabe2399d50fb69d2fd7465aa83953727839bff4b8dbcb8685e92d96558562d6c3d081b7f2155898060cdacedae34102878031759e323ab6e1e00a35dafc94684ab629d19df759de794272d096379a1229a6b86c4bc1d34e1daac1c6d1fe43ca3d837992375e4b17a67437f342f66e133c244b575add1d6419f8991039ba1956d89daba03463e18882082335c9ad1e378d353cc410b300a0a4b7ef6d6f3211be87aa21586bb1941b055257348c4bde3c7e860a26862787ec73b3392ebee73b8fd7a07785e07d02dc7788aa03c0e0cc0ad5708c91e7afb2c5eb7024686fc287aee2993c13497d9470827772f10766016ffec9f3aebdbc7f15847b2320da51174b727654489ffd20be187e433bd1958f878737cbba22fb34775473735b1acc9b97cb075683eee28b5125d55bd0a68a341a24b08ddcb736504f87b028db95e83c45429fb092785ad23cc7523d4c29670e89c9ec66f1c4404c503778765e74da1708bec4fefcaadd4fbb7fa097d77ee61d64171d6000a8ab8f97d8a4e8a7582409cc914bc5b1bc8ed04839b47ce7ac6009c5fd57cf00218b4a047c90cfb2a26d63014d21cbf123235e667a738f2e01b0460519dfdd8c3407d55719a17136448226b1563ad72a4f751eee8c99087d0bfd3612086ba938c67be1432f7e34568ce92153c477172766338c6ea406aeb8e977607249a5c1bb30fef5d3049961f0495fb93de4d49ca137ec33089a555cd77b73aa35830fb66068895ab0e78e91707aa3d5f27342ba4222d89aee1465246c05fd5c2445a460d9904410db367143c3cdab466175f85e960783fa59fcbd59e7c0954a67964c6be3a82b13e97886b1c47d7c4ebbc67c189f6e0ed3e0eb72f88ee686c795d4f0dd84058f1256a84c8294c4ed3838bc16bb445d0a545d938f39aa01608dd519f0ee2947c79b5412fe831117b14f9ddde8e1f43507da3c336f12ff456ca57a28a6a77b33ee04849e355551d09b0b78bb74e9d85635ac1aa0342a73cac6dcc4b3acc3768653963f551bec05553f0ce0da0c226a2ad95bdf4705aabab5c340853d9b46f1f1dedc600fdd60ffccd319c4f5a66dbbbfe961ab336fc18b4788f73a6f44c9a0fc6eb821b1720581bd8f9128fbd28d400469b1a30a3cf68c30df15a766bdceaec3252c940c7d8d9128bf427799e0ab7f18613bfad7fc80fd25aee2a3185127c1ae2ef0bc30b697dc89383ec72c097a3119ef9d3e5de6ac3069efb227ea12dbc7423114bc6156c6b5c077e8f1c346f99b78ca57e58110ddccd92c8f9ba035f9763582177e282cf73b6780403cd2e71bd2c6d467bad3ba4d1a2a12a83319defbb52959bf64d2f49d53afb103b92d3d49c4757dd5475aedbb949e17efb32c7b308c87bc2056d5165c3d620ae17acf8105549ad1e185a3c5e8ec16deb8e0caf85cfde15bdc21f1a252f37f68eeb1ca76a279fe8470b85a493372607d835b5e3ddf7e9a94b6c08efced572eca5f918f6f6a1c7eaae52d478b84c1126df0b28d07e7061d3cad7876b9aac2304aa483c35810d3b9cf3dd42b2222c94e3814ffc304ad2300575ab742f12c8a227bfcf23f6a51bad86b0f0be070faeebbbebf81a39c5f0dae82b4431d97adff049c1211c7e1129d2eefddb23c3dc864851c044bf37a274d970906d3698459a606f965693191f51b8da764c79cdeecd375d3dea5bc4af69515db869dab6487fbbf09e6a95f74f3574f75ee9ae0aa76e05c677cc9c8a8026d1953f7d78489a6871427ce9aae73e8b00fa4d1c1091a63d257a7010a03885b4c9e4239ec1492c88bf9144ba39d45003afd53c3dccb776f4a97fd7dbb0b1e7d82fba382bf80a5166c025aff0481c53cd2b3ecc793acd10d0aca50df38ea7c6be5644f12b26ec0c92a25530ea19be267ed13b6182e1ca05f7b9218d651035a3a0405e069951618f49cec84a1c0b22540404ece18e811d06fead76f102267793f0dacbe791693fefb2478a6dc602aa66af320677b0d54774ac8dcf2ff317e575145e8e1a88865f03223cd2a46d4860397740bc5e569cae0df332b0c541fb600328e58e317cc3eacc93956f6ac0d7dbfb639198e1559581f01a0d880de037e387a0f14d18cab160d82a281c8a3a39bf3794fc14c0f77dc20ba0eb3c991f975b9133bd09215e9ec0dc75eaf7162c58fcf17eb187174e74b19f1aeb16a81e109fc4de4667f9ac5b186d02313b961d3a7b0cc748ffa1e9b6c93a0a29618d50109787f473dc6420602a10a424d6c3c7ad5c37e19661968e8f6f49bc33a70b383cfa86c8bf5808879682e06e2a40a2376be8254122cfe42e333530c0af5dfa577dde8dd5c02d4a7781d53b5c650ca1aafaae15cdfa8023747ca900e8336b821c8b62f067bda193c820d361219fb8ad1dc82dd9ff754b051301824d880caffca65e89b25c954649427b5095b7a491e009038346a820639fbf0037153ec691af67fb700c0fff319477ebce4bed7c7de2a89472afdbed5c52ed0a3887bef8e8191e8d6d42bc55a2ba29f15553f35142eec412aae6a0e9ac3af685af69cda69e0b9505518ef340f528ffd222fefb90c06ed701e8f635d7e9fa599ece9c9f2f9edcbaa9b08e4db031b967b89cc629fe2595ac2733e5dbefc41f5ccf01f4baba523695ace47359f293c841e81e11ff359ea16a99c333d49864d2624f93ddd258f784ab9af2d945698060d9939582912e4113cdbae91dc991444aa22dc05e885d9d218ae36d2014991a836d37de236c8e1a54ca03689b0eb4372a145c2c9482642a3f42089698a1bfd201f07bf88a444e6194b1454a540d586f482236334aa745da0b8b7319528bb0f67372efef72977f044998934b147abe21106fe82b06ce8e450db7b3d781588dbc83c8dcf29502dbf8358c937d1d2c8f8a52a37da8f5c9b62dcda82572fadf0b3b06f0759ad179726435bc90eab46a4c37fa24ca299f6600e63569796470e9e59ce514e71ea77f6ad5638b337f2e29972049b3d2fbbd10763b4800f6ea8fae215d0336442c1273d32aec9561c7008c8f0502b715252244b4f3de369caf2fe8c53b5b2594f2ecb53f20605976256331d9a54d1d95b8eaaca230df41c27f703c746438672716a7324122e776000f85236c33f9d8ba8522b9ba8d521f11ad0199f5e9b6bd8bc43ed3c268d864ad8c2441662b5d4f08592650baa2d6d6950ba52cea92593fdda0b653675c8a196164e267c2ca64d868d4a0242464a93762692931ab0c1d3d8544295d35ab4b9e0395b1be42e6c384026503e72ed9a5b4a353fac320be3cb7fe4aabd1ca9c8c9b15d810767f842a25bfeb440a8b3514b3c60e01ecad420c08333d5f0e11821ecd3a859179f0b5b68cf5b0a6d0fbbb4ba1203ef3d5f24472235b99a4f3daa78a260dc5e2ac4e40bb5513926d54c72fc733f135bad2253fcb2d8cfe539f65c56a48b86f8ef11bfa54e50842bb76ebcb943ecd2734592283680faecbf49c9b03a66b6e387e9745e2ca961a7c993c9a3c1dd4cd56a6fb6569e593518917898fdb97dcb19c1b3f96948dc2275d00c748bdae1344a4140592c74754067f7d3c0da0bc4e64b15e4197ee85173f774a984ac6122d9ccbd4e3e3a70b2bfcd464dfe4bddf107f121420f7e94f7ca567efaaaa5bfd30559631fc1e8de4728617bb9b6975a2de0479d8c47cf0dbbac05e0a703667b69d8b27d01db7b2016a718769317f6480788e225588f83af2c1da05c15d55608019edcd69ee0102ec0ecaa82391d88b4baf62db0bab96bc33bbd8717b63cb76491641f195e75ca17e1d949ca634c7e10763c8eb545d082340005bb4c82c4dd8127bc0f598ce38ded4568a7a6c7bccf8c078876681974fc358c73d48c8bc519b896bfcea03624efbd024812a86139e59d346a4ef26916b4decd65a30b9b87c3d345d35e445759080e9ed1313a93db540f2e83f80d073c6bb04f55da7095a7ba7b77499bf233729dc24099edb009240607565fa56a31985a372d0c3aa424723795dd6ce3b297c061314767cc2682f81edc2bd45e62c158e2cc42a60daf054c9bbe059036910b90366517206dae1770dad02f40da946080b4b96160bc6a43c5c0f88637011fc38e18a854e8cd32d007cd90a488c1e99536987ab2c09c3073bc79488f6015e7db891a761d3a1ac904fc0292af9129d015527f72477bee28ca343d84a241aefe4da138869ce9a1e811605999005035b9b8c4ac3f1fe3c402ebe20d7a5b7fc57330c08565e828afc3b51acb5f8939e1896b942edb3a8144fce2aaa0f0a62e979bf256c21d03d0d2fb3f931c6b89d218556ae92ebb11771d6927a32ef4a221c062213265139e67e9a1d84b6fe7ff6e9e9c409e904ce0bc0649c7fd128c13db3611d88b04c74ed122e9cb4f5e27e63433fba7ecf7b7f6bb2dcd9f8f8fb1b3e6916bcbfd72fa9e4ed36657959133c0a604806b385824ee9d4a3e46c4fd25164887d7f54a4ce3477943134d90c056c3be442675aa7a233a1a7f6288410b04d43a35ba8e8c8d2573d6629bdd785d2f814073b1db89b0b54bf850056a8b10fdf23c9119edf32caf716fc0aa5ee65e52288b7d73a2b80c355f608ef0cf035b4947ea66592caa82c38df3eb93afa18cebb84e1ab3b6e0e3b5317e0e4914d1a0bc477c21cb10a5eaf9086d0aafea110d4564a779a2cd33e9cc9b9d9506b39ad368f74295c228ae1b2927c357de63e012a330b474620653a6871289cf5cdbf858420d353621e16cccb974b359d5a9f27a42028e2c78b99e2d82d92f1b9f5ef13f9c8881bfbbd10953d14327344394b4693e1629ab2574c2c2b603ab59dd3010392e3c1530a2d4f9f1921f200c60f266139157dc0b262c37023ac3dda5131513b1ae5cef6a6e6e999ea8b3d30047088074b9b5d2990760b9122ca6d6354229c0401f689717defdbe076a1c64d7dd2f122ef85b58b2d6e07873b14cdf2dc2b3577694beda2edb4cb812d631de68f245bcd1bcc65486d536f64887a5f666036e7a788e583837c47cd0a60297b56f37f47d269912386027fb7d5fa4bed9de610197bf5917b210610504c269fe789349ec7e1cd215edb25b30b35bfcedc82af5ca1af219519b8b197b4c49de45b82f504b28cbb6722d2a2437024dc9ce4fee42cb856a4e1ed3b645c9c25454de0de2ca7cef5099f0ccf7fe3a21f4ea7abea064791b1419af6137fc956514cc070acf5227e9a53a91e78b70eab08098d6f957bb1009d1323f1757b91a82163ddb2771b1268b42f66f830ec4d243598ad3c5a3cabf09329c98e27ab283904ccf84766de912ea7410e55a3658851fa3d8e6c524270875f67118541672b4dd7a7634abf431ef962dd3227911de103a9829e1f8bb221f81159bb9285a8eb063e20480fb5395d24dd75c22edb9ec72c4529b8555f51777a5210f4f73dbfcf0f808dfa5e34367ef71eacdfea984d027dbd3ba9d0256aa6d8c627ff3e9f34267582538585838266f62a74ef62652788d8f3649640cb13b87423e9c980dfcb929c2ce6f20e9940143e03da546c4c56bad8168d962e07266fcdf8f8187c02051b6a1dead8450edae80a97f9245e7b9eb900e3e0253fcd7ef6343184a28f85228d4bb52e3d14abecffba455671596a25a1f1e9a3aa56604753d0d5a9db10d37efdf54b32100f69da821e73cddafc609a514994b1200e8fb5a37bc8770a79ccbdd423819e2f66c008c3038fa104535237affe33f29708a1ff033a90644d3205f2a714a515f641184cf225fb87ce0417a7690cefb300683863ab4f47f770250b440691e3ebf79da1394ba4906f2358ac48f93215d848531aa74d46ae1780e2e9fb1eaf252ef7b0cf069c63c6d74d2006064f167be04aee114bbda7252ade4b2a57b1c5be8b1d27d19494870abe14256b5f640ac48ba07e039257d3c07ba68bc50fde4a09874105703ffcd119075bc534570d9bbfc146459065b51b8d6b82623623637f71cbe9138ddab505a20d2d7670f1ddd6e35b2c2cbb72df4268465e1a56a22f83e4cb1d394d3232ddc2107994e1bbc9f0566b20137e02cd91f953c17a0babf01d1e03df29d5feb4320a86a20f64bbf131df49565a7045a9ba2fc0027f6e1ccf6ba9cd9d52dd47451d0e8bfcaf4f579f80d77b9d2b546f39ef0e2610e1bdefd94d8d0b18d83f34eb561d70ab73893019134dacef5172ad585b0a3f31bce29ca40c6e3b66467b2c6aed068f53121cdbcd15d59ab0b3e48c1c62a29de16d32752cc555c48627dc46bf10dc5da017cf61c2c785ba587917ad4e7cdaee7e3149f9f59aec246b06d530c206a890207822458e2f4faee12c1639542c817d672ba993678ede55e27cee072103a78ca62326978f1db5ec6abbe5bcda37585323ecc1719bf37c5848c74f1fa62fbc865aef6901da4fe03a10f93b78ef62615844e5ba2d18bdba4efb7170f1aed11f813211df97c2e8ac6c0d195239d7d128a6b2729ea6e1862284a3b2d9e070ac074743bc4426ed74085ddb97464b590a4e38a6cda57622c0c5d71a5156b10552067f94730a3e9e97cd718b1174b236a1bb8d0f6ffae8bad9f8cc21f81ff20a5c12bd9ec293e564376cd4c18f8b5fceca7c6607fe8fb18582be017d0968961f60e174ae5b739f2aef332493ddf0770563ee77fce68153d2e50d3b640c02a7f5aea9eeb215682be044eb8b7b7be5b3af9652b0fa4b49e6552c4824aa8a0c65c4a31e105658b3cdaa9483a0b338b05a2e66e2f20d94bd1c840558bd20fbcbbd44535c66946208951c6e85b643efe3a5f0acaf34d16f5cfd5f2d65cce58b95ccbf435a52418e8804720e99053028b88ae20e04288c3081f3c8e0212a3f92df9fa52d02def2b814202c072a9c0de7d3a5cc4d30c936d7cc255c89634218bb24666b1ec73ea6376cb895a96bf700a88e78ea382cc3a945c886fa49a6d8cd08765aa081e2e5b3e5d98dd91eda0cf6880c28be12f272a3cd91de2bd6cd3c7230ec58cc176c6591bb80da2af302a839c8625a628cd3e84a35fb051348c09b1b8e02855ee6b2b111161b6808aa1c438937dc7801179cd50ee69348575020b6833dfb53d016b9aa02511ff5d34394ce59b193cd543cf401382610ef8cd7cf195d91f6deb1d0c59ae85de4a744f2f4b1a5b6696d977e4a660560678fa7fe9bb85feea16690da2e7b40f9b78c5327653fe799a77caa1fc1cd40ca00f91903872df4f8d686ef7a5c670992de2c7e35cfbf1a4f172424e0584ef05de99851813571040ea88734b98ee0050c4b2cd8819775511e93c32efa9aa66775613cfacf26fda3a21e1599f5c555113ed68a1526d8b5e76571e378d3b548b7005b4c4401f7efcb013aa0baad088bf3470a19b4657dbff2edf7ac996295713b9147a116168ad9632c9bef8a92b608825675fb52a7d7f926d590ecb093c6129572f8a612ce924bb82a554c94e3649946129c31004c1100cc33004c19ff9dedffe2909965b6bc15cec0a6885c0752b85b12b3665d227db60897a2f57b22b589ad85294e5c2176557b094295952f86028bb02969f1436e3cf179bc1cec0a5cb0cdf8f8d7569e28a0965ac4b8c4b9750d6c415136668e28a096512f8ee61a8b0449008162c59be073f8b453d162e5dfee774a4fad367117f85926199e17f4e322c5950bf9275f91ff055b22ca2accbff6441d93fc962f0cf82b22acb7bf81363f8485821171ec628c33f7129bd74bbee2ba952741dfbee3a4a575265cb752c7842b9864e1f2ad9d0865fdaff5c42a14ce8f4dfb340d7b10f5221860648203143171a8c91218a19c094df5b25c094f653636420a3fc5e29e8fb624e6c69876c8be56a9decf77d312b639d5c41d682f6e43edb27d5506a28f556b6c3323cb95adf1a720d85ffc94659a804b42f43c5beb04709c6726191b5ffbd1694459571f3c34b952d70386309312530838a3228140a85b219471b0c43191d00a2cb0c6290821f100460e96262400618033240ef02141383324ab0b41163461965d0674619a505bfb4c08c507c39cd7c6b063533333333d3ea3233333333b65cafd7cce8af96d8aaa155c397974d2df1a5d5a5e525f52bf17362abd56acdfc4b147f6cc55a335f52b64bab65bbb45aa30d0a065f685a5d5a6068685a5f5a5e5a35d0d0d07cab0b0d0d4dab0b0d0d4dcb8bed32d2d82e636b84e5469ad161ad560dad1a5a35b46a70c19796975697569716985697d69796979697562bf5ae2fb6cb17d797942cf59fcbe572d5c45aae56aa5543ab86560d36ad1ac62fa15806cb0c24661c95944b7de872fde9349e7e74892914a85ab9c6711c5daef7d2ba5e2e57cbf5add538be92ef55f4b556add74bd65a8525eae41a6d72618e87f8b9fef5b956dffa56a22c577e333645c65af0ad288ae215b0146539cbb225f05206295d4c18654aa08658822a4a1fa58b298110a238f32b514cbd5e34a228c26a623634b0f1b5532bd94e9529d6bf56ef92a536658af5ad13725a92582b956ab419bf941564943f4a173386144c943687d2c598004cc99af11e5eaa4e355ab08c3277fd98aa8925e5502f5a994db954ef12472ba24e9f737d69596bbd589710492f878d33e3cfb8ae80305bf4fa1917ea67666a4659cec260b219578ee61df6397194e568723c449048088e0f93e5c4d1ca5c3fb3fad4bf62ae1bec8e4bd6723961952b590ef5aadff1bd98929d88107720c273ae2f650ef5fb2b3d961bbf96984a2a5362187e4aa54aa9ecab52af044c811fc66c6a954a7de8e2a1cc812a992cf520186180114519a60452ba1831bc94624cd00574a9c488410331c894acaf8552e554af62bd2af5add17542524a47f82011291a592e2c414bc4cb25cb8db156ae3593baf134cf41cc3f1c1a59aef537623531982cb52957289c972cd762c976aab4af42bdeb067b4494a11e4ca16c72f64399eb06bb038e20116016abc515aaa808038c68652d114c982ac66441868b32a1ff30da3061c6306398b18755ca4bcb0558062c037ee1bac18771bc61c3e37bdc80b961c3e37bdcb86ef0611c6fd8f0f81e373d8c76bc61c3e37bdcb86e70f110662433def830558c615c377c6146f00b130664790963b35a812a9bd17543181160798f1ce8e5f3095fe6aab7b21be33844eb59b156caca0a30e66c4a1b451465106392ea4f2c9f309f8f8fb15958329f0f0b1c03669162c95661a992290151566699b04a58254e4e7c3ea275823584ea57a7560d76e75942e46c940862b4257893c353e66c996bd56077acec4b897a312448a3ccd9284012b0a0049fc76799b05158296c4ad046d1aac1eea0fe14169d6ca2f0120548c42a015ad9c9be2c67cba672a59259948f4cd6aac1ee9c64a125d3da81c5f23185efc655468ca1cc8831fcd0c6c2d3a9fcc078faf0944a59f1fb52a92c41291bc6ecb3421bbe4db55227fba718ca66c0d660bd8837183f0712c11263a20dc65089cf07c584139f4f0a25ba5ca1cb5bdf8d13b1cad16ab160af8789ae1bae1a97eca43abd28cbd995eb849957bdeaf5ad97ab5543cbcbe7f37a294a55ec25db21be2b485cc5581f6ba552a95ebf8a25b59c46a55aad5e2a1a0edea5fa178dd8c251d46abd5ed552893298162ce2bf582f96d87abd4498eb61ac97ea5dac6fb172a2c8fafd952b1c2fbe285bb14ea2c88128ae9ee564f52a570c26cb8527d11553b1c0e490896291ebc5d7b7bad823e2bf542af159b01c2fca92c457e5807d60583a3a60bd72fceaf57ae960fd07e6f5ea80f53639580f0b82ad5aabd56ab56aa95832715503fb991971753a89a79a100cc87ad1e59289ad77c95a2dfb6594c9723ba583e5809c388a9f4badfdd7cfa8523ea921966c6cc976b01ef6abd3e974127fe5a2f999d4283bfd8ddc4e95e2d3c872b64bb97afbe554833de292e556b03fb98260af13aa648961c91a6339dba5143d25a644316cd5d0f2f2b2ae552cf52fd5b3c6d115945aad5229d56b29455114675a35f82a864aa54e38ac070dd8dffe666666c29889d9b2068542adbe26964403a25035352b144833b3fa55cdccf7a55cd9d088346f6335ab9aff6a72fb4b133233656664a89919d9ca75c2e959a1ca4bd5972663acd58225cb0c4dee0525e04c2cf70951a21e164b023f4b6967de6760ff79b147661ef6f180a26981df0df608cda36cea73df57c2be2fdf48037bd07ececabe19184ab6036cf29a9999f9bca0686850bfaaf924fb34bf72d5843fa25428144a967bc95ca730250b06c26030180ca491d987d5bc12f0d4fa6eb04756a3eb47d7d39c5c1c4b1c321e10e7fb1910c7f559192b89e6619f4b6d7276e6696656cf031269e2fad5eb98f9b166e69360ad996ff2c164b9f4bbc11e9991e55a352857500dcdaba4a1a1a1a179b95ec997ba515a7b83fd992fab1971465c7dabd5fa9958cea69c79d809de0404bfa646969bf9554d4d4dcda350d6f5af57f2d1c460af045cfd4c6a53ba64df0d7667c552fd78c369be1c3080a096a0140af520685161993b25812d60b56ab03b259167cd7ce10c28dba1faa447a5c43265b59469ab0cbf1bb00b56aa8906d7017a0f787ca0ccdd28bf0f94d145991b6d930d0f0f6ea87262f981799b4235956118fe9f3e753afd290c431aca300cc3534853ba182f760007309e3c8582322338223c85a7930c6c0003ab74311ff84001462083107009811701cc942e06041d70800d53cc80812dbc7821022fd666bce15ea4a08b7b61060de3786355e6c64fa580c572006a0a0c6cd1128198022fccb027607921831070296d54a58b098197efc65196b561f4d1818d02ca5c0b8bb07431536ce0fb0ea085cb02c6e0c00f434c81860f1f174620f881200882a07d10b4de8502ba58a26c8120b0b6e533fb95615ce0d8826288cde7a30442a9b5dc183f1f6bb558c3c7c845fc868cdf90ef735a4a1db331773385171b311c10c2fef3f89a60d9d2c3d4770251a80ae850a27ef8114f3d7abcaa020338f5f010259ea4a02155010184275176c3c62bd0a40a57409d42cb630a1994a812f5220a55a2503fbe143484a7f0745aa244e5f083429dc2efb12a5dcc141c2873ef8a0186a6d2c36c295306293dcc16244a7705cd460fd31446990bcb9087f8f9b4ac0b005a8452a2088a36665d4563f8dda09e057e5fccdaff6239a0f27ba69c6d0225855af9fdf7dfabdaa0019212f56f53e5f75752a50543312cf0dbf195612cfc6eecc702cba3007fbe4752b6be9b24513c0d231e50460650ec9043193f3e039b8db99bb2c8cde7e361820803c9e781f2fbd6e723baacacf430419029438fd9128481e563d452fa7b8c3582083d4218b934119e5e167edf17ca6423b844443d2ad63ac1181b538fea214ef995084610460f584c6cf9c18e54784a892118a307e30e944c6603e2a456247818583c768c1eb2748c5c9af86c58fe25f9de5afbc93a18ed2bf9b2586b8465337a3893fa542a7504cb7b88df0daa758231c778fa9cf884b512c188a3c6c9f88d1b54ec042fad98196850e6782829f204899819bc10f97ec0322776f362ebbb39c1fcbbb991fb72fc6e6eb05c228a655d43a81757b2dc8792257d6fadacf5f97c4adf177e3eae21db46f9c98ab856508c5f992b52c41ef9cf07fc1e3eb325f822f8cc7e4af6f9cd077eeaf459107c890ffeab5ef5817fe3f3f9c00f1f04c1b74171303a9954aa89c5c4963760ac9ad1439698d3c2fac447a13e2840225c9a38f9a9044f277b7a0b04ebf4b510b00263a4197784327104714e7ffa1509c66762c1c61759ba180a802959dffb898b9535217e3a58509c7ef5aa67c9565ea69ef58942aa5492eac1679d5c43be737a9bcfe7547e279710588ae2a344d92afe16cb140896a9d8a7f495e2abc436da40a1cad38b594ab0142df852bd5f014bf13f9fcfbacec9edf712adebec107fb5b21de2e99321c0daa4c4961829b8b0f97c40fb9d12c062f968c7914b1356e6df0d9726fc6778212c1a8ea06114210cc129acb5164c6963adfdc00e9439f155ba180928800334a58b914014fed9f0012cd1668d30ae011dca2842062c704802093231184f6081157c38011459c4a00302bad8e2db228a117479952e268a2b4a55e962a2e0e2eb12ce44a144173151ac315af09b410b54e962a010c2c540c1436923060a236c606da0cc951e468a2b4adb347e5994df87a58791e2021e460a296cc03a8128f0513b401ba658bf8305ae3e958cc96a87686d09a26c69853e2e28608fa8de9de0a13c7dc80ac3d08934cad3678fe456a9df619953fd0eed2a8c812916c87a577d25985ac956b224f04f21084ebf3ad9d3e973accfa53e17feeac1d80e91655d07f53b421993551996ab2b58ca13a8e403edca5dcc037818029d9c46d4f74342d9b62528fbae305fdf27f321313ea851e642510c6bacb7d696ae304aa5d62b2c5b3e5bed19e59554a944f39a696a021f8bb1a9b4df1201cbcb5515e305c6ef41b089181fbe88e9214c99136d4022a2e820b0ec7b0f1617d6ff9b8d39b11493831adf0358a0eac5a304c199171f0467decec83658be3e7439f1d78b878be2e90bff0402c8c307a5b43cb94f79503195278792c1fe4484e64f7f23c968134375018b7d8f1bd1b21ed6e3795c32d4872d59ee44a63ca93ce5499614ca4203d826d03ecb961e668830a5cd1016004197eb7cef3adf7bcc368d9f06ca54e96272404099137de6ffbd2b871e4a1b9f2f87059436fe7d37b0dcde30ba181cbcccccf0f87c763801fff4a899979db1200832f12a9a9aaed836560fa24ebf512b6a15fe15134aeb3a652873cf3985ffb99e68a1e2f4bd7f1f820f86e0b79e5513fbbec7e7f38131158fcf4715fe0e27dfa39e830fffc6ebbf67e5be47850f8aff05dd783036f35f6c7c1e228ad583899693eb4fb11d37bee6fd7170f038623b9c88cfc18bcf816cc70d19132d25cdef7052f3aeaf79d7bb6027808f427d4d8c464c0273a807c79c1611e4f96eac8c856a812e269f131e6d4b50e62aed9fb2582d33a088810fc70bf9cc9636c7e3787735711d0bf4dd7c2d9bcb9194e3c5579223a68447ea5934b1138cc7e7234a51aa7e8793d3abbee655b9568e77d7c1f1a758cee688e54ecfc19f5ebce18b52f5396ec82208f6a7d84b668b549f4396138b503d5ecf03f5e2dbc7f138623b604ff3a7bf91133ffc1bb11d4e505ff3a8af91ed80fd0e2734cf7a9a673debdd052506fbd3c5bd2777faf0679e26363e2cc6444bd943b469c59258b272152b224b81a1055fbe92c068ff137281a7312c7f8fd9c6247fcff9db2db600add6e9431aba9461f8ac5096d352864e5c420f7e12281b439f79e93adf0cacd3b35effc5c003c43086e1297cc98c98f9d72b76c4ccbf7ee6f57abd5a328c6190ea59600c4b0cb68d9f26509f65f5033e2b26247e2ae572722a5d0fbaa21c819f7285aed02593e5a0942d192b66cbd5e7c2a24fa9bed003e1ea89f1148661784a9d4e3a25e3813001d58ba71398b2a24c3d59a652b2d427a5727608cba705f58150b0be2e5f683ff0f5fd3731e6529bcf8b2c9706d9672a4f1f0a04c17c371f982564e5ec872c7715813a80e127fbba803ac442100c08261483505b7c2c5dc7bfde75c43a88e140222eba6427d7aac562b9702e9a77b9bc94e328fb5c2e95eb84995fbd5bf1c12f5e7e0f82c1f1cca49e8318cddf5092c2c9f58191e566649fe75cb25c18cb8da5162cae7fbdc093eab394aed329e6fa1e767ad8f742813ad823afff542e174ae58ae54030e5e7c2b95cb2572c771ab560f9fee44a7d7f0291287329d717cb81a5eb5fcf727db16f7cf08b3de2fa51060a51e65227980b04731a5dff7db21c0806f6b9d428fb7cb873f09f2cf5c1bec615fbc6170c8772b960af3afd4b057b57eca5faf1536170b46a649f2c27e47a57d1787abd52e3cfcc9c6abee51a6d643964386436f5630ac7e9592f59ceae4e2794ec74c291fad6984a8d295930150c0683c1543529d9f77627077e2955af04e400f6335f179b970dcd2b61c37c33a7d0358e20111c4b077b2467cbd6ab443258aad77fe14ccaf5faf15d2d27e3f72d99ebf5359f6c47eb950089e0664aab844c89f27bd5c3622ed8ab9ef5b9cf4bc9d2195d9f04fb9ec6f5b8d1675086a3ca261c65b9b405ea608fb8bea761fdd7c515c47a9d50afd7eb5fad477de2e7450707c1942ceb52bdbb52aad86966e6b34dbc1cff042f47d90ed827c9580f38fd787ad8a7721b36c65e33b2dce7454be98aa5adb2250375b03baa95cc45d192e1e08bd58089f17b0799183f1909f6fdc596dbcfa6208236be6a62fcde1514f27c218b090582a208b6502c95b5e207a240103d08d700552a14aa5c39a00b18a6cfe7fb4a1e1f2cd66795f362ec08fc68c457f2051ba7e9ddd1342fe5e978e6ce38bdbbaa11de771b21a928d2d51a0ff5dc5de7a3cec1dd877c04c18bbbc7f45d2f9457315edad8f6585fbc9a2afabd749be8baf5e7fdfac458fd15db743cf593cc9cda5e452fcefcde4d71941bb89327de1bd5e9b2298324f3dafec4699ad7c7b657aff9fbe2b679b57ad7fd2adee5cf44ee7e72a7c1615a862037d6e846d3abae7833e14fd5bca24a6a500b0e50f345172618a1821360a1841748aa7080d22242b18241b1450e4f81163e150610e0218309a210614686273fc4beb880106088279ed041c3a6071b2dba480050960e1cd55002095096e74e84bbddee56bbdb75a722a1e9c52da07af372ef3e31c1fd8ca69aa774290f3d2cc17a8a087b9e6036e533f684c3beac082424e2200fe107a94f144f2168ade7f848ffdca2109a603d75e4e43328ebd6dad34988b5e0d7c4da94fdac05512d7cf6b3a90f47146b5136e59f7591e08742ddacde86df177eb1a1b5dfcac6e0b32a3fd9f003b1b5b9cfda4f94f2edf8ec870a3f5bc6672deab328d81cd6829f888113987a591cd67220827608fb59d467ed07d2ec17ae5442be964d22da530fb0049bfabeb0075c7d9fc599f1b12e843d2c262094cf43ff0e6043f0263c7d16f41301ac18d63f1fc7d1addbd07ed60556fc7e58fb9dbe0fb43688ddb1a26d7ddff7a196581fdf177e960724591d882358178d8ecf077bfa3ab0a105ad7f50be5fd9d03f14e55fb303003d8601eb4aaef8408bb261caba2c08e6fbc419688b80f6fbc2ff5aaa1b7bb236c513f680c063bf154afc52d6ceecf789004459d517824a56f6f1ac0575ac8af55931653f25df07df079f07a0836e672ceafbac2b1cc1f0ebe0fb3e8bb2e1cdaa7a58d6e9b327fb22b2e3134ab1549fb589add46751b0a2b5e06743dbc47af019f9787cac2ff59d2c683ffbb1be5468c113682d110bda1babb22d6bed11fbc1b70253560ced67edcc5a148eef860d3f7b0aad918f65c1ef030b82df177ea135f27d56c7b7b22a2b869fb576663df85629d0866268ad25f2d6e687880424e16441abb2a18d55a966ac2a3b3eb02184f6fb505f0adb91031e56136b3ffb596b753ce53b5f418b3d430517f8ab5004196454888dc1022a578c05482941187e140b811b15c1016c74b7f0284548314494582e42a188dc1950ae10254f8af800064d2e0f1e2345d8ec18b9af258894c0d583486c657d4a60d7f0a9b551009f67c3c9da0d3ed0a929f1e5849144ce799e1f241091630608b56f81f039689c881a2b5e3be5e01fc6e00eba3bcf27f915e37616f2485e6f14093d6d5975cbc4a8e3893b126adbd1f1d424ee4e65d47143afe4ddf7a4a1b8ac44d040534a9552852fd127a5023d681d6d21928937a89558246ccdd8b085a2854ba00b8485656200a209f5fa52aa30c7e541910534ada6b4ce30e7b5e513b2e32425b4282417682ae109102c862f5c854f7066d08402187e90d9624f3318084ab67ca10e50676763494e2474d184428100850b07333f3280276ca1a1a9031595d68dd68d169870b013f54a064d48b6ea849a0e634a05ba4e49a100bc6c11c317ca033b13644b0a8c50fdf8001791063ebc3ed649092c65247482ab380143cde966c56435028a85f047ca080c1228e204181480038e91878bcb7c5243154d2cde2d88185c4066ec141ee09154073e5b562923a895f80289089d007ab0622283a6554ac8652436d911c464a56ad2323a9148a0294798e3b342cd6a5ca8152b481680249a5662930f6c36349dc0f1645128a056a723a81f497e583c950fb1096a95eac005a4ea1112a972dce031820e1c3f44129c441961cb4a2453415c4188084149b5c2948ed30cf451b5421faf24a54aadc29d9393b088127bda01c64e387854a2091a093a6223ae70a8886c5942c41222de843dc21e280534fd78854027124e1fa87a843c667a400f606822772c78037542f0e4822c003b5420ab0c580099304e30400148d4a0e505269d74c3662d002cac90c2142946509e00a0c9ac48909b114408e1c32bac68c30c16a4c0842422c87474902262035920200914824c9879c0418b85aa428a0934a104029038a20822869072e363870c028823a336d448c3b682192ea08296613ae080de921c59a594c8e10b1195176512a0c4cc884f8e1bac9598e2b123021060019f45440010621254801b0440034d1843a660c00214a085ca14223e3637420e9081c1942425f8a852a806cc30010718d1c30e36b860800214008722a224477cb4ec0d401b7c3408cf78177c648429f84a700ac386e003c1f70155172d2e3e0e7c5b7c527c0d0019f0258539dbc382207a70e2e1eae0cbf171606fc06a4e341fcc8ee1eb639d569f4a14bf54eaf48516b416e5ae1970075881a670004de113d48fb7a9186c1993683a9d5aa91142b0252ca227ccd1426209540d4de113158e150f9b189a542a842b801fb036aa2532118ba056e0119bd549034d62144d3758d8a222020e81460b8ca6531b4da7968e0f34b5b6ac024d2a9bd7973a72da39f1d0850356073ec0107a699a89cdc4401dd88e68036b03861309629114127006442222d1040ef5eca05628269a40164a4798c3ea016dd80a73564c4e24a45440e940ad50b9d68dd60d958d0a474a05700d18503a402760388d69122117ea9e268207e1ac3583828516d4019784505a39505f8a4a6a478ae8c4c1cba258e0296c8120f881295004552b1e21989292a29981b282a550290ba64221e14e68c50ec01d5b54209c96687a31b105860a778840308460c020a3bdb7c1460abc28c30132588ce12119e5f025e8c784128864d50c17ecf81867c45495158a88dad0828b0e8080030f181f9400010608b6104345041880801d72841e781b07bdc6e005677cd105175640a1254b005858218522a2139880f0410e1c5250400b031690e5059a073cb20ac20b0c125cd135b5c1c60c64c042951c38602010738505a88800041a80c30d02a00540052a4544425b6871c506a600d3440421d8428c1554542009246c902186179c01822ea8a880140ee0d2844fa12098eb8c138c010616565060024f24208701e093160016aa50110a3a32c381b9b6d0028b2182c8810b3e03000021264147662f57e82718630b2d3270050526f0440312a0c30d5cac0040a884233322427a706860a1b77182314890012caeb082021368400274c8e18601701183668505137648356ef0c4c9cc6b043cbe78b121052a3c460cc0861e5313aa364036be354e37f86c202e112ae04bc087000be4eb01792cc9d20149001f07081f0fbb23a503ecc0da84392c0e550d0d0d388633add7e8d2d1ea80c5630553a54454ea43a14e27d0babbdfb8bb0e1e22f878038ae3d476b78aaebb1d7c661355791eb8dbd48d1e281f6b64e0eea28f352e186bc6e0fccd3f3e51ada2afd1dfe81fe9ad77bd38f32ffa353dc0307072f7978f355ddc6b8fa4a218b7f438372520791545c2b69a14dc9de563cd907bed6ff935fabb67b342926415a1268ed2c1e37e3a223bf91869c6b85e4975c57bdfddceba3d043fb724f8089301b653d1adf1f938735fddefacbec6f97c9c1b6caebcac47581418123f55bcefebd147188f53c5321fc7158c651eb791549cfe2dffaff9b6dead1f23a97775771fee8e1b95d02bb9e24c1dd6ed60134db5ab5c506dacd37bc3bc75bbbb8e3bca87c7dd3f704721197deb6ed9ddaaee567702233d9fe4d79567fe3062a4881122467c8c0c3122c4481023408cf418e13162a4489122448af814195244489120458014e929c253c4089122448810f121328488102241880021d243848788119f223e447c7c7c86f808f109e203c4a7c787c7c7c8902243880cf119326488902141860019d233846788112145841011e223648810214282080122a447088f1023418a042112c427c89020428204090224484f109e20468014014204880f902140840009020408901e203c408cf414e921d2e3d333a447484f901e203d3d3d3c3d46788af010e1f1e119c2238427080f109e1e1e1e1eecee3b7c7c61a15752c75377b6ee66659573b3ba79e15f78177e95b372e1ffffdd6dea6e93dc6dcedd43b72adcdc6480f51272f7968faf125e24b87b073ebe687e56abfd6c9553abfd6cdf70fabfaae16c1c12bafeef1b4e6f6a2594e06e518b73d047d708bef81c1f3e7edf3f719289aa7737ba9e709f8dae1cdcfd7d745df1d7e8e6d9fe358a71fb67fa5479d9f6b7fc9b97376f68cdeb1ab494d735ffb8fbe7a3eb893b49a67c74e5c05a30c61f0992efb9f94f8b8a53a6abfb12923cce8d8a5392e812dd549487041d92e499c2dd070b3c3e58b07d92b7c253e5c6b349e1ee21f8d86a72133871ff407082fb17a6f6f9b061f4f64e87691a256f3c5bcc2ef971b739f28a5bf89eedf1892aa1e7e7fd7ba7c37b5f7787b95b16139e0077277d64d5dcf54af234ba223d0967cae8810a7502602c790104c6a0001d884087274cb0230148c010701124c710427889a2140286b90149889d0000b581430e78002a626328019918814e0fd086262027016801015bc8c003dc3171f35ed88ea481730394928231881b1421446b8816782488118913a820871e1c1b824f060433c624a870c9510344d9b0c40d66404089103ad2f8caa080d293270840026864c147e6064160f1020904002119e38380125e70c08805133ca0872fbe20c420028a2f7c008167c6c5b7050c8e1560e042cc088c2cbe5b16af45101e6081e900557c4fbaa801831c68c84a31a4f87a22f0051546472aa880164f7c3864700510eb11600cc00213568d03047101212230e24504246c0948c0c40053fc4004cd0442583104f8f1040b36f0818807f060991833c4c88a313d5829c18bd561862a33e85025082b2ec0c52e3d71344611bd11d82c61b12ca0a16272e189179264d8f6c708dd113f0061c6120052eb2304d605a78edd0056705a970e43684e123b5290823b1a5558f1a0063f573c00c2bd4c0c62c41b742c8145e03e851324c045bc8c6942092037a205a6113d5c5471031f48bc8b018a7c8c900308599010d775d18122482ca182265c8e1be1900588162eac80859d7b91303e68e10216290e1ee0fec116138c30d18007151777b009a632ac60c2d66a830c32b838c0d88616422851a38d07702002395210a3039c93461b3f7891220b5586d2250b16b491458a1388a70e301d658cd186b9060d50a0118367e0f5451b420ae8d1e30754ebe0012eda20c76061ace20709475059b471e30713c4b8828c0b5a98a8828d1a6cc00911a4e09e1e0848c10618358867d0808a190e929e60a30a0900ed76c0418920b660828d04d02001b42dbaec177840820d1c9200630a03447182287010828d0d460d967aec70b24cc1031b2bf4402483971c263082142f6c988085146dd4845880c7880b1b22d060a39d522c00b0010b1b2b28a068420905b4d114c55ec30c188841831d488081178c90aed1c5114bdc5270d1422083738d09888089b4c70bb6037061610d2276483280161410018b1e8ed690c18a1100f9d0e1810d4ce0c91a495cc670014607ae30e108d01a501c5004e9063f8638e006246b0c3143c80a4c8e1f4c9c40c81a3b8898618b0df840850f69e4ace120d8326840041866627aa881822f3dac20176902a688871a1ab8c0c883cfd00da610b9a14603604042d3b302012da8b4d4e861015908e5a084c948d746a8860b2b1042b614820b6cd0801a6adc21ae30814313496001451a6a30f1000a2cdcf44801220616a8913300322034f1458b1a48c65003568129399851267da0f5c50d64d0c65203d4a880145f147171832f96d8b191430c105764c0dd9d8d2c6e600114e8d8022c41471018eeee3158a511dced158b4170b74eac2b88bbb56e832377af8105dc7dc7c7d38dbbe3dc605dd6348d92389a97eec8f3e63c2fedc44926c69924cf27f9ad5e1d79ea955433d25dcf9d1e12de77dd7ac7c427909dde4e4633a07d61861669a82df8a2e90b31339022c50d1ab80666e4c8428a0e63b671f442f2e381153ce0c0a7471357dc9c18c10157d42e085066660b00a8bb241240b98286831d1aca786180b5021ea0a10a18128bfd885400c208601241b47420c5069c084115e117a207b688010b42d863eccc7050640d108c1f54240192589b22500526d4208d1020c08716a8455a70529103c1ba872ed0d195556460c28c2d21cc8046b680fbd2101e9c55c605dcf6e8b87fc0a5c941971277a2774f9171f731eedf112032e0a71894c01d4c0f4d3ef3a3c4ed0c44b8fb18dd4132dcfd74f795bb5ba227ee1ef311ac80eb95dc37a7375a0f3d77743c15afd9e4f91292fcdd293ef1cf4e9ca2f7a6af8a5edc12b5c8880914a1abc33853cf661a2ba11bd5a1eb8ea6669d2e9bbdf5aae84f5e95ca9dee621d7a945e1d6a622024bc552155c74bf3928d7957d60be5b7c95bb73e538cde568cded0ade213fdad5e74bd4a4934debd1f24bebafb0a3e7e575cafa40d4d7b4820648f8ec6bb67db0902a488898dd84e234680f89826eed1d16593b4f1701b45eaad5ba34878ddc948eb35c91d9da67849cdaa7a717a47af584bd9d96bb65d778be46e6fee16bb7b0f7730064ee30ea6c0dd5970180678b8dbd3ade96e6deef6badb9abba5b9db00a434c0818fb68cbb6f34dde9afed5b3373f868c1b8fb0d1f2d971256ac55d4dd5deea7994d41afe499753b265672eb3014b0e0b83b0e1f6d8dab387d248f6d7fa6bc8cd38ff31abd79267caae863a5acc32b6d7797f4145498e1ee2af7ef74771b1f9d0cbd925b77b3e26e55f035af2b7ef5fe89d595b7f1fa6a46f7dd2ad6e174a7437fa377dd8fa4a27b5fdd9a6f7fddfde4fea1dc9d878fcea457d2c44ab4a5bbee98abde31739ade9dde7a571b9aba5b16dc6d1577bb8287ee560513b87401051427a872846102270258608132820a1cddb610a282561a741343411132354ba40dc0b08028150012aa22321c03f490a9e9a00612dc69a01e26e4bac87084e801910059b03c4c5353e9a0e8030b582c5613ab77ff1124d28a7dcfb23fad17b27c8f9235fdb0582f8acf4aa9c257c5b8842f886f3fb115c6fc8715d3d2149bc1841ff055312e3398f013bebb76a0107eeb8fc0b7fed36abd6af55dec8f8a0b4b7c77a1e03fe22bf95a6f632fa8deaadefe0bab31d6dac1c4f5a924970c01bdef533204f4c037a10c1ffcdcd842c99ac0175b2d2eab47c5b8b47e86ff51bd6dc99ac0b76f655c5ec802be4ad60472e9f23fad075d2b8ce0b7622f64017f256b02ff43013c02ffeb627f542fc6ba58137e54dfc5feac6c6c070ae1b77e05f0598f8a7111a968f969c95e68e268f5f65f507dec85d5db5702ae620efa8f2a26a6defeb09618af781b654a968480def708e8ed400184f23d2a16bebba0806fb39cb45894142c96130b603120e9f4a10cb40060f915f0fb62a9c805862ddf7f6118066a8ddc3aa78f6dff9a87dbbfb3fa597d9dcd1b8a71fb6b78e96f680d27e7a686db1aaf78e3db2deb34aa5e9c89758fa4a2185df76bac8453343575360e094d5fab3835d1ad517ca6698904dff2c5e9db64363b5a7778bdf9bf434f6e8da65f4b728444933a8cdb9fa6e8d6585ff355f49675362f7f46fa9d55a6fcf3646fcd3aacd351d1bf5332949b8a3ed6e8d2167a52cd7f5ebc6225ac3e5ef38d87371a745444f4e4f99acc3abd9f03f4244edf264fd670ed7bb6dfd8e8c9136b8dcdbcee70eebe67deaf7de8ddd5ddbc7e52639cbeb83b94b362dcc64879ffe6edd28bf32a9ade9d8f9e0412ba29cf44d39477db5d8c9b61dd2532f10e6ba17ca44f8c89ccbb6ea6a07c84757909909a895294499a7eadd3c5e98be3e133136d604b0414a0c416026ce9b265cb16a62de696bba5e6bbfc3822dcfcec771e4784cf11e167bbfc3922bc7af33fcbf9b752c5fda48291cc809633b6905b6eb8fbcf706ef6e5c2bd8987f3e2b3498af34ebcbe8abe2ae5676b5e57fc268a949f607d7150b0beb89d36d15dde51b4bee1287ac53a9e56b379f73defbe40f9a6ae78c52dd0d4ac9a78a7694c1b694b96321aa7bbf71eb2243166f1f2338dd1afc1bd3810e3f620cb9258ecd38bf5df28bc52456f4b682ff8f0c294178adcbdf64a5ae96bb5d7518b9ec4c13f360e09d5fdb879bdded4c4e73f0e5198410410629c4968679ab18cd128139aee763cfd1a3dd37ca4b737baa4adb0b0e27cf2741516b0fc6085859df2345eabb0f024366fbafba49cf76fcdcb9558cd40bacc27cfe85cd2c34e4ef4e4196149c1b1f8385693a4e95d329b25797dff080912a6fc93a6d74c7284e456b4e325e5fc24e3965cb0c185224eb60082b1050fb480c5498ca45e9cd9c3494b58c5a92d61b576f31bebde0cc69e067a4d4eae58456ff87c8dea90bdbc9732de5a4573d2f42ef57a30c180e90ba62a98a618991ec0d4c414c477907c08240f0f4f0e4fcf93f06a46bf96a6d7acfddff2bf0e8973f3ff03f4582d7a1d529f17affa4ffc3a244ecf4dd1eb2441f2219034239a466b3be728b534bde635d1ad62dce695fad2f2c95379f9e4e97cf2742d9f3ca32828520a59c3284dcdd8f6698a2e9139d5bdbbf2eed291a50edc5479ebfe1ca4f5a69b09ab79c52d648d2aa1e75ff4eaf0ea6cb8fbf5516787df9577691bef78b453c59a964f9ee6d1747634da9af7dd216f35a7a2af7b7729bd77bdbb5779b7271224480faa7bdadd59b039b0971042afe40e6d36d378dc31b8ff4cf7e7fdf1cd8475eecabb9b09d3706abb2b56539e928ad236d6275e518d4fdac6fa54b38dd633ef899eea3569fad2b68ab78ad2b0d2c5a9fbd29a2508d943f6e8608d91d073e7bcd2366fb77945339cbe38da56f17a77387d9be06633135db18a91567c5edc24c994cf7182647775348cd76d7b80bb67f1f14a91dd0676aee0187768901aaf8f77d9d4799b58e96949172f255d4c25c91112134f3132b112edc4269e72e253e5e51fa6236c52413556f1096a46f58aa7987867b455aceb5d28471869bdb8254679c52ba899c80a0f101e2040822cdd284cf8542fba539e4e6bbc9e6789ee9437141a8542ee4ef331cf4e9f22240fd9a3a3669da3e173c57a8a933ca23d3eaa64dc710f27f9f05125c24f546d72778cdb1837aa557a38c9dd6ff8a812c928cddd6b7c544fa790104ad345e14ba5d1900e111f754cba1bf7d71b4dd3fbe7c5fd29a496634ac69dc4399748267cf3a799cb31fde2eeae6674a36b3e1ad38b4d5469c5465f2691e1be66f596491838cf25493763ee0cbd513dc5c7dc17f735dfce5ccd1ddbd432c7e3ee38f3e2558fe8192818d7a812f7a5576f283afa29f46a892bd3538b704c3d9ca463de32928a7b27d7fcbd8d6e8d34c6317a71485d4e9486d31ba9c92dc57aa33bab3837da478924fa8d8c7b0f3b51cb5b971b14dd9a6f2bde7defeafe31aee836baab4b594d5279afdec7b8234ce6e2d0f50877d1a7d0116ee2ee270d4aa3a1f36213c5edee8a94f7aeb72e399d70f7d700f0f14cc1cbd366cd37b30877954ab5225fa32a956a85b3a3b3b3a3cd7ceaa8e8d5ed649424b599cf1b2b7acdeb8abfcaebf2d6bc252a956a857557bde5bce29d372dc9111201f8686b5d0cece0e3e571779c9bb18673f7283ed670d0b8a0fde0eea58fb41468a3933520a113dfd0f3bc3a1877d4c3496a46770f2745d92856f231004adc3dc8472b37b062c5682501467cb4b2b3d2c39dd4371f69f49154f45cb389d7a5bbb10ea3bba5ac964faa2c0071f7221fab98a08a00a0f858c588bb17f1b18a1d5768c25a1f5560c27debbbc32b6ff36eebbd7dce5be7ade0d4aabc7ebd519d7718e8c95aedf5bd396afe5a0a61dc9d003ea64002152adc5d061fa9cca6843145bb7bcec7292a292e18e2a3140948f1a1898f528adcdd051f8fb8d03c9c1b1a4df3d29d461f6bdbd74eacd15f79b9c7cb3d74ab58eba0f781dbe77996e45fad7b7d4935a31b3dcf8b846a8c3b226b3d9ca4a2b415ab4b9976b54e454275adf6792f61b5f62a564291febe3ecf52898f47378cd6300ac3041f8d8a188d968ca418297177d5c7281d885205d0f7d4fbb89706b9f91e4ec26a5e81dc7c6934b494bf8771478fd373f3b313afb715c5b8fd3d26afcbebed35564ab1d6e9a55fb1e6fd7d15e3a8c4e0230a2870f7177c44011d514082c20750be80f205dff25ba9655507af78bd557c2c12c1583484bb2ff1b168852224445cb89f2a2fab3adfc349e45dd11d13fe9eed4ba32115d5ad7813d971e80ed958f14405493c21333e49bd97ea8b7557aff9d77caa3ae4ceaad0eb3cce4dadcaebe0dc5839a554791df2c46b5691d0f3ef7f2e9f5c5fa3e9dfd701f0d189cedd8d7c74a2c3dd9df808802ddc5dfb0800164600e870f7251f858e18858eb87b938f4d28d0648826486313008c4dca13ba70f72b3e9e703ad6297eac66accbf7cff3feeec49aa7a366f5efaf39abb5235ae96bb79cd75d4d77f503e9be341ada64ed444f5a0d4848fbb0523bf15ba9d5aa60a5fc3f6c7f642465e8878ef221909ff76bbca2bc2b78fd8d7ece2dbd386c7bed03ff56b17e2415c5b6d7a811897ead879368357dbf966b28137ef58e4c3660059305304942051f990cb93bb9e2fb1ad5792bb5d96ccdebfa2158a99d43b359adcaffd05bc54a411f020924843e8973aa58dfbc8a22a16b915eb2a25bd3aed6d1f0c6293eafd6d1f2a69de75d73cf465b4f1aedc46bd66adeb9bb908f41a293bd6be2d4767fc5bbc76a7eada277ab79499ade25ee5f91cf02a48abed6b7a2cb84f18a7147af6ff967c55034d31d227b3849c7446fa88977fa6f4fbd3af5e61c7dae7949157af27edefa2ee55345a90c91b7fc491a5d7fdf5f31929ad3d7fa717ab7fe5bfef4bed657f71aa7b6abe2df979757a4fb7aa33a1477f44feeee10908d97cfbddedd6fbda2b7292fdb38c9e4d9649f5ede5e5125ad6614ebaeba5bf10e4945711ae9af1e5a3114ddc34ea030dda1dd9f7829a7e9d0bb7f0520b1a966f5915434bd26aae69dd55b7e1e46d357519c89e2963ea7b7d1f4ee35ebfe3e3e79a9a9a239496b5e42993cb97badd34bb74e32efdef77b37dde1f5d79de6bd46ffe6b477a160dc76b2e4add48af066eadd1735b3d6f7750f27fd2dbf7acbbfe2c7e65f2bb553c8a85625efefe1249c999a51157d9c1b2bb55a959cd26868a67bd8c9eb3cf97aa37f77284ea7787d8cdbedaeee14fad26868f63a4f9eafd15fc2eadfc79917ff89b1e65d13db945ea3b8fd49e65d319527cdc7b88d77bdfdef0efe8f0f96012e25b8fc6f6934f4a8899eaf6654ab7833059d5845427bd88952d12974f5d0d5433b13ed4ca4b74699827ad849263af14675e8931e76925ea5acc3516e293e8598a03774c553ceb205549572e2a4ac84a39c2a2f33d999a8b7e27d4d34ddf1741743d14c77489f189b4c4127deea5d4fd899c8e8c42b8eb233d1895774c714a46f13acc2ce44369e51efbc784d4bbcf2f6559150235508ab4b453dec64096f15af2b6fc9d6174a6fa3279ade29db444fbc42d95955ef12779f71b73bdcfd888f3f6eb8db1860c02da05ac7d3a14c5797f7a79777053fb67dde7fe216508dd7d7e89f425be565d32c67b3a31e4e5ac22a519299d39fd9ece8ee0bd4c34eceb3cc6a46815628e8c6514aa321332be1283dece46aaca560bc324932316e895eb14d87759b6762268c754e4d8d9e284eaf19b77977c529efa461adb3e67dd3349b3887577caa78a7d3ab94d7ddeed236d658094d2f6d8771529a5e1a565ab1c6abca73b75b9ab6346d69d292e5052c2ef8e0dcbd87931ea7482aaafffeeeeadc6d0bee1e5a157c94b8fbeeea7ecdafdd6defa6a23a7a87c8902146ee0dc84e8f4fcfbdf510111244c80d0890214686e8dc369aa29ba7ad0f484cc03a71e5c889bf97daeee6e974e8ebbbf41b7d6caaa85651f4869e59b7b36a1e79bce2a54f2fbaeebfa1bbbfe5dfe5bd5126fc58e9e296feccb88d75f6068d776a43b5ce3b8cdb5ab7dec74ad9761fe376d67f62217c66a21f208cae477faaf7b78a75b3994dc75b97b8dde2ee361f83d8ac79df156f9487140284e4d1b19d3a185d770d31689c9a2a8fb6b10e40093e026972778da4a2e7c5e97971fa79bfdea8edb78a5113bddd78fa4fbc6f284e5371f7241f735a70771f1f818cc0132400405ebdb8fd5ae3b4a7ded758b75ecdcba8125ea16cbcae78df2eedc4baabd2ccbb9a5987cf53cd26d67867255acf5431d28a75b8b7d135e7ae0e279977ddb4adef8d963756d2f14e15aff886d713ab3c6da2a98db7a3ad17a766a6a95845753a7477f19a64e654e5e19d95f0ce4a34da36af8ab746d324f3a6b6f4eabccbeb8e966253bda612ba4d9ca6d99ccd52dd9af54adaf2c9d3f9e469bcb3aaf230d2d5a178ddd1b65679fab64369e779d54c3bcfbbf2eecabb34776b05c9dd4d87ad51c6ddf54a9a417474707a4dad8395d07d95d0159f347dd3f4d2f4c599fbda68d85cf3adb7f2f4c5eb763fc1894f5429afbbc7b6df9aa773771b77bf010942dc3793eac4673655fcbdf4ee7bfeef74976777b7d6a15bcda8d658f770520f27d130d2cadbe1d5a4a5f8cc3adad5315d1d6d637db56e47eff44c15f3aee0f5b6339b5dadd3c1d9803b12aafbacbe0c4288a16da2bba73ede807153058c0435d72b696a54b7636a54c7e4e30d90c63cadd11d9c89776fa3ebddedecccf46e6fdcefbbe61d5ed3dd1f39f18a9190506c7b7d718f571e5642b58a6ff8fcfb3377ffe1ee38b8fbf6d18711fa2e99f7b6e2ada23b27bef24776793d5fcdafe2a4bbbf97aa9897de293b4284dcf32644c8ce1021468a00b94280f8602c24884f90534707a7bc33eb747454bccb2bbed14ebc3556d238e59d18676a1a92120def7bee786bbed174e84dcd34456f1a23ddddc65ad3362fe3339bb48df5c63a4dd1a4ad62254cc36d748996b45eddba8d6633da4e6ff3ee7479c96c66e2339bf9a60a6d7d9fa01b55855a40d3aba24c827ae96e5726a1ad78c77475e9dd79d398ae2e0912a6ab3351ada2eb66c234acaf6dc550741220417848560c653653dd7cecc1c57d9b785db3f93babfad7bfa17fe26de21d137e8d3ec61dfd911a6dcdb4334579b6da89711a55d1dbaff84c51de8f5e49bd511d9abadb256ba5c81f29c2ab8237ba2e9d17af3620ac43b7ca8b82f18da67b77a7f54dcdde9af73dd53b94de15ef8ad2ab5b3391d6375da27b170a10259a5e6272de1f8c5726a64675b399567152deb399d6bc7db71136d59bde1f8d55c844630831fc0cebd04dbbe1f566e390504c45afe4cecece35777a805c1e22414c21679020428af060223a369eded19b9777368a94de999ecdf69a773b9ea661dd5d6fa30c067792247d6c9ce6ec8b57a4df99e8499d62259c7e7a6fca33d36b3e6ea34b8fa4a24b39bdadf854798fd7fb98ca6c86d3b749922448767708e3f5e827bd5bcd2da06bc625c13ada8974d7bc8d66338cae9bb6d3279a5e2524ad3bd7bba42e65a07d695bc51aef746b1355e896f30a059fd9c4405bc5da566a7468e77c5e1ca5b76e3528bd6a46f7aee8bc38ca7931aecc27e0f3ae483b2948e84dcd4bce8b9b985786aee880700ba811e6611e0a40aad04eb73661c2a72a14b4d3ad4d70129c253bdddae4c44827badacacf3985ee7aa1dc2031f1149d6255bd3893a6355e915414074810dee70009c2bbc12da09a86799877858633f7dd69f43c2fc6d1cc2b3ada15dda96978dfad69bd9be27536d3e1ad7b9ab6a3053854705a4b9e9cf2482afa53a6c06ec6907abd385d7233f3b102988f307ce0e003051f386023a8a1046c84a311824448c39dc4591f7d249ca24ae8bad3512f6edf7c0d67876d1a55cb5e5acbc1e98b53dae87d3523dd3f712f8522420d22b000134188bb93511eb7d17f293d2ed0e306580fa21e48bc469bcd921c2199cdbe84dfed42c802168296107864613879a23747639cb92f894934133d296bd2e1a5353381c5b8c480c0be0647fc10ec3f00210520300103010610521038f8208d0fa8f8a009f6010b1f9400fb6007ec031bf715456dba8c7ffcc04a69efea94f28a84a4b3d1d7999dea55c24b19f739372132d7ae7a716a92e4c53b2be5d7e89a756637210fc6c03ce001e6c11498074e78d04067490debaec626bab49fe481038f2c3c8cf008778c01db61801d4cee5ec3d9e1d46a37bcf4aa38e9b58af5ebe8004c87143a6c80e958d2010bce9eed775e77371ff4b88d06e5fc8ed7c15207b60e60309b10d8c400b381e264edc43654bde9639b941c46e41882e51861386e8043091c30e0d0e1400c0e708071b0fb8fa243d66aff6bbea16b5ef1ce4a3927c6b5da2a04e3e06fb870e384dd3052630258cd979a00d4a460345cc068c0000145a9d57c6cd44756f55daad592d6bca4c26886686c6034a13b59c3e9f910604c30d80930580e1f0e1bcf70276b3c3d5fc203d5806a40b535df46216aaf519eed6b35d818c266283093346304f68a01ec05c5ab8b93fae28c8c4e95a762f44fbc9bd556bcdbf168baf63a640e5e91eeebd4f504cc85612e23986b04584b0b582b4b0b875506c67a008c6505c652025ba9601581156c75c3fd8622adffb6d7bcdaebe49dc6ebaa4fbc77ed75c8a59ca6f9a67dd4f2aebd0e89a3f2f0ce4ab533cd5acde6ce896fbeb75125749baacedbb40fac43375e310e6b1f1b49cde9eb237d03536d81a92e4c35fa456d3a3a584915b1c0c42aee4ec461620f580a8d5415b01493934aabd6f1a244b9e5fd37bcd65e27f3aefc3d925ea51ace0dee5d9a466b798abbbf1c961a61a815c0506060281386ba81a160b09314a70e5e77f7b3fa3aa7866935249c6a8caeeb3575fe3eec0404760a011696818546c0c2edee35bdd6a6e04cb941cae993f0536e8a6a54c8da898348a559de784aed4f3c45ebd0bd2f894db486b146426dea359150dbf7d4fb399bb7cb27f1eefd90e7ed96d39c9790af93d1cb84d4f174b6be37b2976ef5e270264fbf463f67df25fda48a95b0ba2fa9e3ed3c854cd1bb55fc7a45579d2fde6bc6e9cfea631b928ade3299f713f2bce9c5d1fb967f293779f3aa4124de5929a71b5579f9d5f595b65679d8f6a77a77444fbe8973369e4ed32737bad19bd74a9f714b6b36f52eaf506aaf73a4560bd297cad1d6f749ed757eb6b16e69ff2d9fead5f14e9ddaeebda1bdf47b77a9a7debc77bdd5b4e5ac7867a54fd3f249fd4393182bc64cf80c62520adddf3ed45ad09349d7a6f25efdadf1524e4f7c6fd2fd9c7dd18c5bd239f8768d745228a272f464c62d3dd6d9872ae5c97bfbac716e96f213cc4bef14bce4fc19c2e94e871aed4c84d3b749263a71de78cace44bd74bd41391f09a1970a5633d19a8932913e551e132435139d78672221ac55acd54cb4e2dd4e0a929a572a5134de790ad31dd2b11e97bbebde5535eeddcdcbeacadb387d71bd9be2b397a6f7a897a677e3f46d72aa9809928a6624b528dfd2bbd1dd356bb53f7770d2b5fd2c4a51942841bf44e884a227a8929acd243878e729516e909878cac648ebdd5acd5acd28920a84a4a23b4f4932f313dcbbbdab6e34dd199deb3dd5bb8df0ce5392f44a74684ca38c342e10c2effbfa97f0c5faef03d258dd5d8b8f3028e3eb91fbb50283213c35425251dac64827cfb6d26830f8233470128d31cecb7fcb68ec5ca7695e8fa0a1c4d1b071128d254cf4020938c65456ac94d33447d9eacafb397189a4a2277e0194dece99e80537e4196a9ce1c5195d488cdb4b39556beee4194492087d8e195598a1cd30e20215b8a00717e0489c5e25947705637c6aacf36ee5ed304ed239d76c3299d5d65aad56fb1979710b50d08209b4208916acd08251cd7f62b47c120989a7fffeb9de251e14169850461965ec508697327265042983b50211ac004defeb484ca2394b3a336d037a1d5dd6ca13a5e96073cd4c5680b302940a60a082312a28800a9af82c67bde9c56464800c1fc890818c2a6478e05efb194e4f6d363baae9f49e380ad31d22cf1bfa50545efed91849459780849050bc62a5ac5fef9c137d1f2bef873c33bae2dd6f75e5d91eaf17e74623ddad6273c5504e15ef8c487daa4ae8bda79a7fc82f1f3f79aad9f6d8e66365f2e489cff52edddfb8879fc4e7d5e915a7174ab933911581843154bcd36bbee9d0c7e9de58fff6a1ea3cd66a365521db6a836202274cd0c504a793ea894fbc4df0628c51c50003450c2859ddb867be18792d4b60851f95a0c95f2dc12a0c28c200e339454f22a968563f270c1c30b800838b93fa542fee5794974ff4ee7a5797a3f1ad777737a73bde63db831123011a64adf6446593a3370a1a123afaa02845435fc3e98bab3d51d103053d79522ef9a09f3f2a2232126a725eddc5e9128dd3178771474f723eda99e8c43b13ed4cb433916f9d1124c1b9897262550a8e328233dc4750856b8d8f682378c1dd4740babb9f5f90e1ee78bd5f44e15f7c297763172b7cd1e41fef7a475fe870ff133543c04608c8dc328da6e6db5b8fd03f4b2b3e7ab1022f8ef022005ebcc028034499a43242654600810840b00110d0e0bd152be9fbe7fd39555ebefdceea29a40add8dda7480044953bcf4fae2689d10767476f4de6153cde64e46497ddba140424baadcc7ed6cfb3445974823265084f0d619f72b790ae59ca87ab57acbd7b727a77ad1adcb27cfbf67dee9f0fef247155233aa97e05defa854a5e440448b2449700ba8d1dd17487321c49fa8899568bdbdd3618c354d898f5cf090386b46952e0edb34aa3bc33d10853be9819de7cdf3c0137772e7bcead20360079cd8f5f6a9a24f76e08b7b07943889a331be914824be59baeb79973a30c301ad73fa9b97737ef36c3ae39638e0028e52d6ddfc69941a5139f7dde128e7c65be7275bf3804ebc944f35682453c679e79321e2c930f9d22653c44b32a2bbfbce16655c07afbbf5a2267ac32afed9420977cc53714828eef3164997b684558cd71b6d09abb3d9519ab34d8b11b4386d408ba50d7c162dc8e2882ca06491240b1e0d8ca1012a3480a40159066490010764e04a0690b893ba1fa0cfeaaba88e7a979e563b555e7ab7e601a94b58a5a97936538bdef6fb75fe499367ab2dddf554af49abbdceff2c0ac9fbaca627be3a24c646bf793b155df12e27bd26bad1d5dc3c9b8e87b45ea0d721d7bccddbb3e5f858b1128a4dbcd66a64ce8088c5174e1e151545f99e6d09f93d9b142c988ca1c1982bc6ecc67820468c180388c96268625e5744e00ada152a2bc6b887f04f6ebda23e56acd7df9a0780c7c1bc75df3c5642d37b794817a7bfefeead58093fcecd353f475fdcedd354d32e4e73b67df9331d72879a78dd1a9fb5d72149d2dcf8733446bab61d5e77bcdccb39f1fda35f6d393835cc5bf7cdebcfc939b17af7c56d1a4e6df7c96baad80a9c15332b48a8a20c1942aadb38929cf1724f042346c8a4df59c5d74a95c7b82a92aac8c1400a301004068e30c0e3646de7bcd65ea338356caa99e8e6770e5eca2989ae3b9c9a50ed86a735bad128b57b8130067081182ec0e364efa62b56ca3a9ed6f737ba5ea375ef726ab5d7374888e90ea94c7788d4a15be33f55bc33919a1feff299b4e6a58dd55fc22a0fc9430251fa13eb2ed193a79a63334abfa7964ff65235d76a9a57ebad77dd6a364f54d734d639fa76cbf8bc2bd665f335fa53ab6915be56abfd0bff499220b9fb027dcee72441724bb111121d8a33dadda1121eaf791bfdbf0bff8f5374a7cb66566bb55ad0879077bad35d26fc3c8daabc28bc2b285642d37287b1132415bd184897c1c1b97bf6510a2b24be5dbd79361eaafec6bdcfc126efcceb56510a7ca1db9a973bef974fea2433a7df332faefc19928aaaeba5a293ccfce45f2799f98956b37e72aab885bcde6818df305e6f277af7058a02050e1468b9fb7d4bc304ca3c94034c80089a099ce489dac609f4f856121803e89340ea2e011e77f2d41278b91ff9f4f0926828b3d91112a6fc43d3d7c453a21021021d88c00b11e881c017b5259fe2f3ea5ee77c4d0867eefb53c3b87de2abdecf397a526353bd5beb78e68a9a9fa637a9a8f6102002011b28aa80228562c7132c78c287276a64cdc6d3b413dfa51c203d3fa020a1bad6433bd38cd378c56d1a4ddf9a8aa3756cbc74b7bb6a46f1bad5bbf4e7f372afc7b44d5eee9198446f3ee3d06bd3e9a9f726f4649a5e532591d49ceabb7bbc92ba9e9a4f1ed6bb3f31133e1f87c4cb2b6e3f80020f1082dc3bdeba7da87949d770129aaa52480794e1000938c0e6801b0d98a2010668009506f07072c9e375c94d11d6f76736abdd5dcfa66f9e5cefce797d8dde84481c154dd1ab746fbe56fbd9efacd6b44e4fbdb6efdda11bfa297a6fe6b5a5695ed38c5bd2e57dff54b191135c9c307222e624ce8dbe425466b323dace39ca4923f589d5a3253ec49012ae8da77bbbf4cc3a06e0dcc9ad435ffbd8e867fd3958094db1130614711248e83311035c132da08cbbfff90b88825c000e4dc4a0890d34a143136913374ca471828f4c34c1c4f69cbf65adcb26b66574ddfdc6644df77092d1121c5822014ba84b04b97b0a3e2aa0050a18a380ad000f1230260160127073afd57e76ce34dee84ac506f43ab59c9aee61279b0913d53ea7762b9acd8e6a3fd3e7c5516c404ce8ed469f28ad879366337db47536cdf2498d773d15fd1a4ecf92d72171fa6efddf4bb789571407a7695e6f2f4d2f4ff36e3ebd26baeb6d20a14f6de85eb1929a4d6cc38f6e95f7dbc4b71bf6a1e2e89b1ed9c349247ced14c2bbde510f3bb9e5bfba4653730daf17a7e6eb8d9170e67ab17e1b4fa3b8a5a535ebdf3b9c8495746abb1a3d4df454859ed43d9ca47d60ad9f0a8ac3b64752d1359ba82eabd9c48fa4a2bd14b79fd44a58af794a99897ad8c9a9897cfce8e29e44cdddff775e93b071274f8d1ec00bb772a23919b754e549f4061da089bb23a1b6d7eac5bacf61babacf5bc8dd81f87800d19118a3916822c9116e013d620047a447d08e907204cc082eacd46a55ce73bd38ac710b453ff48740e65b0948864823a6ab53af79aad788d7584407c622928a4011c102224640840e44181101330016eeaebf7797746bbea557f71a7ded435dca2b2e07eb50f496f26e3e489cadd56c62ac6f5e335d9d8aead48cbe9a75941333dd21134f79dc026af4b805541b0d3dce8d95da9a6f5bdf27e8d678dff491545409a3ebc66bcabb612de5f533dd21bcd3f235d3d5fd8991ae7a758f4df5aa2b56ca27a8e8907a71475ae3273c216c38def58ef0aeb7694f68493ea7080f498acfacc32da046293ef310d31d9acdf4d5cd664752dcad0d3be7284b374a7a75104a82f82046577940a4e1bfefe37df78eb7ae79c98971fa36c1b6de1d9ad168444542465182a6d0824e28a3141d19d168b39b0edc3d04f71810367a257b3889965e33bba7ee3708c00ac0dd7671b734b8db197cfc0189f10730560677cb256f5d5e6f3f34f11ffe874f9f5887de74091827f4d6588908cc17778d3e989abb2fe5148c8dbbfb40867b9299ff967d70c2dd5d092b6d8dcfd92c8989eebb8d5edf9fcd8e9024399aa2a24364adf62aaa4b82c4c4533e4909bbabfb9926ef3f94bce21592ccfc241fa9423df50ee57cb4949f949ae90ef90e367757ed7cf441b3555ed6ddac554ca3ad78776674c53ba329387d716b5e579c6faa50bea9288d00e319ce439834e5ddf4973c10a1efd2acc60393bbbb5ac4830a4e9e7877cb13e334459d2c61a2530a3ef312adb169f28c762063071b7680e2ee64ad96cd352f49d36ba241dbbc79ff0ea2933aea899a28cf4887277457872f3a28214ff5e2f3f3c6b8231ddc6f3928b1559c57dc420e5c92e0339b3dec24490f3be9e1a41cdc9ddc5d8c7bedc3a6c35a97364ce54b1977dfd8e84b971defd314bd955f70e03006072eee4ee25e8af75d79a6793f6f9d8da73fef9d73941e95fff1e3c70f9209bde134bd3844c1a1887b0da7e70612b8bb141f6f10c00d37263edef04f6a2415cde76f5e76771c1f07b0511dce9f74870610c6ddc934459d0c80c7cb08bc78c00b06bc18e18500ee8e828f5e806ca0810d60b893698ad7dd5bb1d26bb497a677c52a46423759c3e9791d12072ba15aadcd6619a5ed74ed759a5ef3e66b38463745b59fe5ddf33a359a7acd1a134e77ba6c7ecd089fd9acfd2dd796d46a38464fc22fb929aabd0e89cf6c2e61d5084a91214646f777d2d59d6b7e15e565dbfda5ac26e98ba33c79f6f68a7779ddbdacc810ad65e617196264f427c627e943452f0e9ff0244eca4a2afaea35efbe274edf26275679ebeeb7c6679a6f7e8771d2d0134dea53bd585fdb8ff0640dafb8bd33cecd639d5e264fd68004e1d56abcf5e8c913ab78b7bbb8dffaa6587703ac94a8940f2df6911ae59852ce0cc80800000000831200203020160b874462b964d92acc7914000689b4568c4a9bc95994630a19640c11810100000000022401004be0ee176272210535c7c21586123c11cbcc803094083abe1ff119bea99d409cbf44b0af4022611746d565083c67b00b190255fef678cfa84f68a830cec6055fef15f7a159193d289fa44950d91dbf796fdedf6c1cb2f5cad2547b5577692a00b7f382b3b3ca3f2e31a733bce3d3bb03ab430bf536a752ae5bce5492359054ee58c6ad3099bf7921985304adfd32c6d15cad4b5d44e3ccef5ca28be58d3848b53a9521d02b10e750229e76e25c3df18024feb68ca1fbea4a82102c3cc66b9f81d578fb5b0867114790d281d21cfdcf9eb0b53009424f06f18223369dedbcb1910cd3303a7b50ff7f323162d9c8aa6e9ed92ba2452c93142d7a953479329d28346a7961e0b0dae31dadb1c1f5e87226ace7c2e747e8a14f71d9697690e928d6e89da27002555e4413b948364c9279eb80004c0658b943dd54382e40d7a6faee7bb9fce3c96509fadeb8b4b2dc2f984ad41553d051036b691a5a7bdfbb317d2346fa1db000f5fba6613f3e17923c3bc2ec31763fe5e3b98f647a4113189b611f631278a1611f57e6dc8f10e6a4d4b0245bf202c41114e5b7d8182c72ab94cee4c2615fdd285ec83dd1966340c7f0407fc4fe0e5b865bf78831907faed331e5526fda17bb94a413cc16ad89ce0c37ddab9fda71609fdbd8619c51745e3f28fd040ac0de50e85c25761a3178d07607b8b7958ac766f5dc748765c99dc739364a76c2285d162137acfe2043c31f2893379d71a6d00e709dfce13acfa3403f6684304a286532ce5042ef636bd12919aa55e6e02db1e56e18d1a07e7a09e9a94a21fe1c140a9ce80a047f6b73593ca5a67ebb7f61baa6121f3927d4b76cb8a941e4444b233fdce3dc667885d1fc3a972d3b8936c426bc30fe5208e02ae7760ab778c74e4def9df765259a628735c1f5d4422c968ef39d5465940ea41cbc65522e4ab0e15a21184f4e586fd934f796e897450a6ea606eed3b170b79a443a16f4695b88ad4230c91daa01a631f9c65198df25e8e11404ad34311d3480e9fa274d1856c51aa0c271f2a9aa9239b48510a56c6ca9ccb538158be3ccead3997ddd7e574405d79959bc17bebf2776661923a54da41040fc7a206445fde4a3a6bc2ee00d0189e537e1ccd3a501984c0f1ead31f38dc353c4c04faecab02ce1b51c4537a0d94db1e0e0c56b055e6e6c3f2738c7241d806bab647d8a0cd63033684acfe64e36542ca922dfcbb2777b9a886b51aee571885c5dec6b7ed5993d292d513685ed63d85e089fb98253d6e4909b092a00c20adb898f0040117e5c0824d2ead962e5c6e7fd03305a4cb4f253ef4f793d17906067a1c2cc49e5ffd4f538fa1d9b9de9d0fa954c8cc1c6264d0eb5ade2e6c2b53c6578c0969b916c06ab54cd2d1249e2da4d9cf03804a2db86e34c024976e369224d7d26b8a242b9eea13e51848e69f910feb60b332d2d5344293aa6f8f92af3c7d968f0f6fc455c7569f0b7af6d669cff1965f1279055312f8b44312fb0db16535ec51b5f42de62c5fb2b38e7baec2399dca92e90b25a79489d65d55714a1746d29025048a5851e5456088ab01790b5ae8a9660e33f978e8292584890bda2d880bcefc7c2ffe289dfc2805a28d0e00d80ad966214bada0d8a85ff3df0294ec2021114a8c0993d49f89508913b0c751e1b7a1b75b9cb26e930613ee83ca450b578971d576719e6887f2db13a5c283ec61b4f8042a05bbb22b669b0b2302be3d1996b255e04a7850d205209a6ab4c8cf712338d6b89bff1aee7246fd60f0c202343b90d0dd46173ccc1ea1542c994b300bd40164531487f67ba3a77d581d9b91203049d8e62e121f29d06ba767a247a4945bd08aec85f4cdab8a4c05c2a45d866ee97a490bcfbfac159cbc38748f4cc208c377e1a55574f3b63a1d45003c2c35e5c7e97bdbdd0292dbdc71b921af2e219d0ee33dedd4a202f83519c065845f825b13734cc752a79be4d01e2d1841458e5100c6241721717ecfd369297a10d5db64cd9690828d332aac88ae9cfe007c6150490b642efb3c4fc40c99b8f33ef3828c8450ea083b4d30881cba8f61a824ee5bfd3f39c59161e9580883e68ec35e5d89cb6b162d5ea05ac699f009fd8d91731891902f0da04b0dc82fbd4b9a5c5bd4ced54c48989f0647f8af21c96fcdfc3f087bf815a3e90031ff6a66d1e22d37036777dbd00d84885bf531c143c915d63f082a6cc691dc2a942cf543d0a1e1ccbf8892f6bed5a564865235cde808c4922783f5eeebe130383759beb6eac737ffb9e5804ef7bb5e3bde1fe5310170403ec429c4d45c112f9cee460b091ee1967a564a6caf97d300ce5395e3cb16c3b1dbe042243c8d3125eff71c63815aa96114c0f2241cb73dcf18ab7d73c5e0c3399e65a58d8c847aae87ab41c8daf5a1b2c176d282232c408e51c2f791ef73731af26157e0bc119d18e7b8516d6a7700fec7b8b9986c77f784970b7bbda1fc4705fc5f65e4ef883b2fa0fb5ef8caa1eeca71d7cb938928d6d2fa4476dc1b5810f50433fd2edf01cf474dfef83e40a2b645408b073970d7849436610929e32f076b50198421cfefd7c990d67c961fb8c848007f0c8a5e5819be1acf9bf693530e849a57caae5cd9111bb326a66694d614185cbc1b6fcdd53384b7640dbac0a3f223185b6230371a7894e8343fac28a8ce5c35835d40dd48b4d70c5e88c348636da4190fcaeead79fd00ae9f436e1743542ef286987a91a2264ef4bc54d505ce4e8df12927010e6357ee5e0d7b8895cd474818973fd79efa084ec00a0556ff3109b75fe86411fdcd796c523b1ff0445a949dbabd2dcd0efb75566ef55a68c6a749d121d1d2fbc33bbd91c24094a62766910b637f22369065dcca12ae2551bb33858463d780edc349666ca7d9a39ce73f2ccf1237cf68f4c175bcf1b0e7c19d7d12fe9a4865e6624d9891a65ae33971f43213af76af8bb43196649a9ff565ddbd7f2bb0b2a7f58a6f4df534463c4b87f2f102df02df6219a339a5c959fde7b6ecbbfa642f9ae5aaed128ba99a6a27b2c0dddeed997e480cd94d90cc3012cd28875aaae67c2314170123cafcc806faa78036897217ca5f3b11c95b4c385ce7a8d2d746e874c93f81b2f99b559bcfd9379335b90e3fbb8f0e4a95384b8528016f5bb8b91e1d6ac2db0a409a4b3f0c363731cd730e8019780e8388e487783192e57eb1d3a911384dfa330ee6372661b53a1d862181ab3402466cb6899d85375ddf8fe4dc6680700a96d5acc4693b98239a7a537e3980ba5a4f6e4a31692b72d1ef390852c37848ec2cfb82d2d6025cc1e2d410c81b43cb4e4a047579ad5a61702eb93e583fdf8ceef24537ddfd080d799c6917d27044e12bc9e38a27e65abc43256908afc2e43a0fa895b82a0362d9c6a58f2261461ddc5445fce41d5041ab0f2a54e2eded684de36383c9b487af294d261c88cbfd76203bc47392b6279a20ac0d31a3e8390f85e6b6c3cff5d1d325762dbef893a2603f4b6e8569d09a99940945c78cf18bb08be0e5ebdc499961f5ec4e52ab1a7dda91be22b9552c186331e1fef111609160b897ae1bded1b78ed16217d59a044a7f976ac95988b8daf3d501e2e1b6805e36a5af0c77d6e1852e9fc8e8c03ebd36643993aaede531761509533373215a90a755f592203cea1655b6cea238f600a5c7359b4175cafd5ef050a36ee72ce57f656ccd04a4dd6153d544d3bac3f853eef90bb991d093823335ee4791e125f507d65e39dc3f574fed89e7f09b6f7c584e5d1a057e35bc51d3e38a8aa067d9814542091390b531cc17dadbcf4bb920b5221702e5af1cfde602c21077dd0bafc00a1229475cc44aea987aca2126920f785e9dd4f50c7629fd2c676a01732ae8dda3c79933b9c0563e1e22f096f3f8bdc69408643b9b254cc72e07182ad370b8b66c2212cc2a4ac45f9019d820c20500ecbe359ac06b27ee40e7ed1d673bf63ce473136177b6b2b30ab2dfb911fa1c6e087ca2eeede289a3a92e112580bab7e378e8df70d20de3389b49cc84a9c5cbce72811e1d745113f5af07aee557fe48aa428c4302912da796ba9ff8f8c39ccbc2c13857d40a53e3d6f82968109e0fa2ba035bbc2a9eaed2b479a28ca423cdf678c53f1c2dd5de40946128134bd2d64e5aa093ebb2275aa95b9dcd020fc24af999dfc2e856c1fd9a14d4acc40bf55821ecfeff0a08ae742ade0593a45d82373c8acfcc4892babd07ae3ca040af31fd17201e519ff61903669912bd48076c5e5dee76c8ab3248c0d8f8c6b50d1b228d73a8c8abb5d28a700c42a26e14987610cc701019061734abf2923bb81bb5f9b0dcca6fbf235c74ed2a1450111f0b3666f00cd2adfd027da3f86a02a3c7ffe011a45ea1d30209caa90877f180a770622297ae7659cbae41ab4a3741ecf564c962db53aeaa825e903b89a70dc9f1aad23888a580c8b10a82a15de23bb66a5736052e5349e3d38925b7b6ce47af6641c86a5705d9842ffd175a4d2d9d2f8ac8692d0e123d31d10ed8a869ca027b5c7927fd202fd42f0a1aad40c2810e674e1c62d926fa7b82e914cc67cdcd438018e74f0cccfcc1eb9cd45a002580eed7ed49011d0b811e98234da48d1b0b116ee4a38e5ad3bad46d055bd7bfe291b678bf8f124e4db187d2045640bda6e8e7a659fda15f79028541a380dc436ed24c22d1f2c6987ff14d21ed89494e9e12228287d93360af0e4ddb4a9db9d717b0b8d37583e46cede28bf943861346416d4de2766a5aa62dc9b969d90378bc32d1777e5b34d65dade85e959143d087d6ef07ae1e533f7636e1505d73771889fbbe7b98d5209c6a923cbbeee9997ff7958278298ae346c3eaadd80629d22041d44520c5896ec85bcd0b7c10535e2590bba56c297dd0cc76381ef55f11a8daf2403ebef9c970e5ecce04c6174a4168dcafc275bff35f2a797b4d8079065bc7c87d8bb364b465a3b2782c77fb105be0fbe1ab91c52a3de960273094a914393d301d7381d63f06e5ef5a5b879001720e2f9fa5d649715e52698797a609d8f7c2d84f92943ade42ee7c9b3d0fb406e756a4fb8bd9bd14285088f7203036d95d2ee60475b9d1f7e41fdce2e0d8103630510ef38c6c2ddf053deae17b9ce069ebe9e15e48a420c4816d3719b1f711015956c532a11ed5d3c3a9b95ba8ecd823bfbf513bef04f560a626a33a03fd3817903d51519de0688b275bd67c69b78c7b8b4e2e303a4b6ed572c19f05ba640329eb49db29a394d361137a81e933a2c7d5223990f158b805b7ae0b153005c48c74262227173b18b8128b9fdc87668e26e02d261b57d88980c38e554315d85a0f7dd3a54446f982a51da78bc3d7355fc0b6cb7131c3db5e26173b0d089b14b03edc178455dd09bd2ca965cfe435c639f371437fb9667d9036b00d2328a5c0d94d75a5fc3f110cd8d085edb38be31511d9ae761563671cf3de57b20329f48fd8b1e889ad5ca98414b2f08421dd540e9b9e1d2ad827121a34d109036cd662bf02b32b1e33b2d206710f2badc27151eb0791ded126e27b2ef97094c7f08970d41bc8aa068329de6514b22861bab161471db1954645b8f9572f13f8623bb79e6a8bc1fce5005e0a59686a313d9e0a55595e5f8c9468ada5ed75a0e72ce1effcbcf4e4f609082805760ca0c90b03a680e96db373b74279c7281ceececbba137115a0bccd832cb8fc362aa514c69d84ebdc3fd59e740b7c88764c8d4f48dcb89a5099292bd5a66feca2673e4f3ffb7726bb8e5c139d1b3b10d1ef3dd7e7ea37be861641c4cd08b26e167d29a8861a3c7b4e896fe1473c50ed9e213cf1fd5c111bdec7cdf94c382a7964c04c684bae49b99dc3b5f5ba77c911876e150de814f0c832ef325443119c3ee594c8527bfe6bc570e0d804e05a8ac2cb6a78eb1f17a11fc384a58c20b8ab504f71904016ebbb1f3ab7764b5ce681a845fa750cd07b9f0b30b4a0657a80713787a84e02bbe0a5de92527db11f0931cb57cd0968eb61a1713a4be63c921e0d0b94a8c9c03b7fa4cbbe901ae38f23e0d101c975b066adf3ccf9197cdbea85b112c480fe3d2fd10de2f2151f14a089af9d78bdb0ded421b0f6c666eb4f993cedd29117749a91a7d13934b04b95707d84e5c0eecee08191d0a68f0946a8ad95905f9de2f3b0f10db6ff791fdda9bb801c95fca4d9cdbec5d4b2283aef4c4af5f12c961009f93ca772d095e6a0ca440b6eff00c31df0fe175824893cca12318a5b3f405200b67883c9edebce59ba8e8b3d74ba007ddbe0f2589eb7042059e72935e81b83b05dd752792c3c15396e4366f1047277e351b5fcdf49bad068d1e9271480a26d94d4a4c445f20352fc72571d0aa3d8003ac6c8816ea4a7366f48eca1f74e29073a8c8ddc7061c9106384ec59719a63e23fbf96ba1151ae3d67dc99f2382415d1565f4880416df74c632ed007996886ea53dfa100ff5f40984c8e4f027192accd8e6cd25fbd64b5002297c1779c05168dd10ad8111e4c8da8f74328b0886cb58853e4b2b43389ed1456f2528baf9343ac8c7581f5eb4f0f0de3e520cf2378508a77112871ac09e0758a889107334a1f5c0cbd4dc3019ff3683e6aa9e6ba09cd069a4bcabc5be7b83a0559a942dd6e674ec29950729f7f476f5b3e0c1ed1ba1240a997832d118e227d405e4cf8ba9dc04d1c4f9ffa50bc70e0cceb57617e123fb0e62a616a55c9722f3c074abf395048498f82f42c90edf5aa5ae1e1d90084fbb281c38ff6c8e298b4562b4c96abf678b12120a4f7376f14e6f5286435b8c96b70090d100b83b01714d5aa774e150a8f89678389fca37ced29545dad10128eaffe21bedb36c916ecd5fb75f976eeaef972700c91a6b5a64764bc3511fa3b9ec1889019dfa5fe7ed76c38f1af83d7462cb8e57cbf9bf97968a1c87d24dda377a4341723b766a63740cc75c7ba386e9b337e1fb39dd1567c46320f0d7adb9ca0ed51b6acbacd1ccd2aafad158b386df51164bd607c2941f9763beeff96a6a471acdd04f4935df10c93b8c6f418ce461c719e8977ae2f79cd9841a883e27a1e5de91a5b4b0c68a99dbf2bb9145c9595d074fbf929c10635c6f51ebfa3d72e8906e6a0a13568e81ff2d5a8dd046685347210bc2a4c40543e660cabfddd93719b09c3474e24f7249319625c56083a1866981193b261ed2bd1a26d2d475cc208b2d00dcad06ffc56d258d5768f3c60f52b38dd7500aedcbd3a8d2ce40002782b4cd330c44363d280a9ccf246445dc6545d02cc0bd08462b10e64eb1f623b261a52c3ddde8dba1760f418f2b2c93f5fd237e715cc48c9bf714d290a382e654c1b779f99626b58449e79d8193ed87d831695806593d9299dfb7645e7385478442e50a34f8ef50f21f888e864f067077a1997e90aeebead620eb70d68096e6187aab0ea4ad1aa92b280274228bbe2ac4c447d67d45bfc2d8c8269b96dd4e4073b02a5650c697a133993b3dd30b013300981d7680406f1cfd5f6694dd0fcf8ed57a1cc635b13e234c9717f4e19cd95466a36fbf961137943e5c0a9900351c369815b1f9067c0ff7666e7c6f385b73fbe9f0a178e2eb4fe981308c8a0382ec1b012af82fd0261e12a77891a9bc4337e665709faec06517259b58e2fe0671e58e6cae616d661ebe1a3a6dce55c8a5202a330e7eb15d4d916781e9449262816a6607ca54d49a6ed34c2a1d1834068eb7698cfa67a15a6a16f3b4b6c933277f32dc263445399fec86f26e19ee3ebd247c91b0e9d85ec309be10ae4c7ce07c51ca483ebe423aca23b86ff3f84b9cade8103f56a0cd859b3449b93d4ff6907204930bb3d8e0f6524c265f00d9738c22085cae08198d6569784f4ae647ddde30ec250fd3aa82172347ed25b4857843699f4ce17832df24cd5ad81d3b178f44e6f2a9822411d8808f347955c31cde9a65e82bcb32805e84da68eebf7107d22a29114170ad50901619c292cead5b1a469eba4294809e9342d05ed4357817cda1782b8d7eecfff004bc7ee90999a21132f8eb2ff2056ecd93d5e6c499d875ec1a947a32d788b865b20af0080d1d76c344b9866dd9dae86c993b74bc199dff0f5f7ee63945a70bf1886c9672774c783158c90c80767a6b1f749b46eafb67006944bf3eb61d6c72485467a9da702783e896b86749a6602c40bb4bf1bd312800bd3542965b56cfcadc51ba0fc58e2244164c2e10bbbc1253d1dabe052eeb8f8343e349db0398736a74b21b1bef6d1458783ec7dbade9b9cfe6d02c5c881e29cedef567030b9f2222ca1ffa106121a4398bdc898513c31b4aa9f0c23190ae8fa05a4ff70ebd370abdde9fa0ca96ccf0fe2abf9e74938579a0ab2dfe903f7ec89fc162b6f6c12d73733145b6927a16c9e9da90a3847b344cdb8157c8567987248c1748a07be51349e0a73fc69721b52e357793ff4ad8d34a305eb2cc31a1bf6a685414e6a7aaa687d753d66e8f6225f0dd4eb41a021b38f87268a11ea13c34b915bf16395ba5b179aae4b417a477d0890b46b1aecc1b376563b488c0285313d8eb659e4d069417353bd2dc87491a4974719e47d7c3bf6cf0019132aa7c0a28184592baaa4f46cd0ace7a52f9d9a96558f0faf39c3d5de142b69a1428964a7dae76a94ece13aad6487c03c459c98af04ebb684da1373cf3634f47149150362fc0354c9bb5ebe4e3f2a08c1c68c6e4ce93c590334106be3767e9e498bf3036dcdb7ecb2e4b8deef58d50c3856b2be29946d1dc77575fb97892985ababa23d3ef115d1cc606be70c14314a082f0cc69edcff2f05a600cd6f0b37d57981e3b7a2c7fe03bed034706fa39026282714e3f1a24dd1476cdb2959b33aed1f389dfbb8ca207290772439e0096bd768c0e0fddde72a559210180753d91aceb6468c53a33e947192c74e022e486028e460c8a99e1ee2a80afc7829ec397708e379c765d591a04fc0247134daec1399cc73423d0962211f60378fb7f5df197ed3b5b4b1e65a4036d908426029883f6d24ad8a4a48b68dd3f72569a7fca085b18cab04e6655e65009f0ae6dd17eb4d8e58829fe0ff23c2bee10750f0b81d79f94384ccc9bac720a5e24f7940a9022065f9c249145a4c99c2d1803fb9d003e85da5269ebd778b2cbf37863665c485a3038cb52ffcf739d36fa218e7f94e90f497d1f972af281757016711030367f592acd3e10adcea03f67f1a7681de70d4f4708bf01ebb9f41ddc55225acc0257854caa5703cf376d7e5cd26fe86209e222db64f18e6e71e0c5ae9fa798663c72747eab55345a8095da3b911fe1db3fbbdc50992f9b5bc80950c1950f7a4e2aa61379d54c1ba34e8de109eb960f9e17057477b0887660e5ab787e7c2a70f6d205411e27ef7caccbaa57ebb5f39b4a3c30e8840984d5adc621e52cb82a7380a1470ea3524ddacd5e78d4d5dc5a3ec67dd44a94ceb81dec275f6e6b3cc308936d3eb1420515682c7ae4cde46678ba24f4ecbbf58da0f1f40ce8d0cb9b052ce31f8d88cee5372d6f583f8019d0c900bd097149c50923c30769a5b0410cfad25c5ee4bac8df4a09e6c3eae183e422d89944dab9b4f9a9acd24e3cb7c5edde739663f78af756234c569f67aefd06b6345c661ea03b9fc31ea02f6e4241dc17fafdf54e7388e06d9f60e5918032f6dd169bd176b2d6ef7cb509866f01e1aba1a905046438ec0ca76a3b5c9da2d3a7820ad07e00f964d4aaf6f5072adc147829fa7be4a87604d7f1328937db5f56dd9c74e6e387e9cc91f7a802dec349d857b3b7b4fbe58f38f38dadf3f1021e7e728784389c894786d017963a05233500850cb7377c394da32550ebf758acb30091b3193f4e254125dc04c41885b01cf24bb804b32c1883698080d4494cdf3e7b3f85a002d83681329d8d989f4b04b511db74bb740aba59a7b4e68762c3f3874ac275d120a1b899f081e50aa70c694711eea34869987cfbe9c93dd04754fc15ba0d76ce6338abde618846b140c6adaf2a4ab6f551af3356429aee7af5872d006392253b640286aba50717266933000889af059889b0e4b5975f676a04fe0c3afcee7e235fdefeb8012dbb25f39540de4e247c0a6c8ae1ae58225d73c9b7b833f62757af7a287d5fa90a48ec3e423767499f409999fd19408c915e6f2829f2e1a940b457523e82be6941c04fdea86ebf25ba6381b09774375b9d641fa50a726b2b87abf228551670dfb1d87370dd39555338d53fc00e77b02a0f51891d16848d3c8e0e419050201057fa9f013c413b673baa9494d6109729c2bfe2c19651648b092a0907c05b3a3ffcb5ffaef8f866db5c52a30865b6dbbf3aea125e233929cc74e531c177e025c0c1cc72a938968bbecb52021ef2c383a47701d008167ddcab3cb49a07c5d5e4e42c10b7ebd09bf5c2d56204a7bab27f68551f80bf058080c4423e21292c999cae2cde06fc1cf748538cc48930177c099ec56e0bbca6ec1a194d441e5299a5911e4343885f14b38f367723a2e245248d5851868078570d578d98da50ac879babb03f4070527f7cf3538bf310ed4cafb452c564d4f51eeb517ed4de15ba2bba8426f932242fd939b9b88e4c84de678828fbae3dd5e84d0a66cfaf99c7a2cabf8ad1e2c385a531ac9ec9218e2263906e9878be15081102feb17e4d7637bb81ddab9e7a2cd66d99ba6c59a3014704b728943bd04effe25b3b1fc09bc0c5cd1d1e2199b7636083602b6300c4fed40a3a9f826d68811a6cb4b077eaf7f2086ffb58209e3796514dccce0ae284c8517ea82140ee3458a29688e9450d2e360534cf3222b33bc82933497a29f1844f3e7142d9f50aaca48bc8a9ac09c180cb83a68857807aa87f810a2f3d1c645d57abd3d8ea37de71bb5492c0a98dd0a5d068839be28b44613279f8f0f3433178cdcc1719d907c7b35be9611c53d1a2728c89b48f445ff327e939016d6ccf6364605e8a491aa5a5834580dba2582d9b3e2a793c070cefcc8cf148fe8d2bf77f76d6c4b0e6fbd4e66303de78912ca00189c53eb78ebf075b410ee6109312a56ac618408bd94b204203d8c26095448e561d54370d442dbef37b76de1a641422fa7496d3f5538277b4c7ee1f5445aa66e04f9e78c61b2f600f9555dd957c44481ca2e024964d1cf19ee5b5d2096637be184b4847e441c61626e9bc4939de11e663ca3ed626ed85906bc01816a914c00cba2d7bbcba5c9ac0e341e31d370a3785c3aa386ccc20f3cf45969dfba84b6873eea40f3d0397de66a70e1ad1879ca2a47d300b80bc6284f52ef813ef32752d313383edde58e6454cd904c87b72402f8e2a52d95ce051a33aa032071928d04dc56a14ca90b6e22404757414e31400ea8eb65ce3f175d16094a07693e14af64bf2926399392e96d8b65bc7a557a6937932acedcbb8d81707769a6f90b08164abae06cd40b596f864f6d1026c32560f68422d054218fc67267ca0ef3efbe7259cc50ac9dbe52fdee60d6dcd1e766f778516299497f485f595432bb25d331d8ca2ead9657994c14c4f19c7c12b7ace7032b3b5deb02c2680ea7fc94ccde846190667a7d37386c073dd05259d3ed7db020bd06f396f0211fc21fff862ac25a0b4731463dee4ed40950c089c7bacbf7de16628816284b4025fd8f12affb27d50884f18811738761a3c4d05c501716b6d38343bd0c7bc00f8568644f5e0ca9229d8d1663ff87c8075229fb072b8bab989d88ac6e55861bf8927a4c573ecfe81527a61be4f3c3d1f745df5cb26389ed01a30e1598628f5f46e97cef50b16415bcb02ea0f87eba9a3639e21fe8094661c230e31b2dd78679a915c1b9fceadab41fe4d5ce79d4b8fff7320f3f548756bc0270b93a95ad81c37c059d3c00f8f7725b21e2b20103d3f925461cc732a8f94683e9b855fcd830ac3e05a1cc002a2116ec331005a7b3afe56f6f95a2bf41f726f10d5525e3159d4600a083d78732b5f8776130495a834e281006c73346ef4bbc73f9d7ab99fb04f355c1c4b8988673472455e3cf9bfdd88b872f878fa49387b6b2e45c6f1fa1923f5798fcad6affedae037807c58e32cae29ec23f65ff2c975c9762a11164293d8ff73c58088f3a6d3ca22e2496701b6f1d3a5cc7acfbe15fcd0d140b1a6875af638382310fb710d989892fbad5389e7c5fbd9d569fa2ff9dc94fcc54c92d24a55ab6b656979f39830942cb52602bce87fb629909c36c1cc77f20a82d08e795d4f11b9a2389206264b3d41f2c62f25a82c7a5335ef05b42c0241dc2a359c060580f0aa8231fe6b62d7d5d02d10dbf47163ff951071c19d434495b17304a5629c09b70f4930d629a0aae5083c95781f85cfa97d21cc21679141b4ab3ab942843a82a579f77be4e87e87e6d1d111a44a725743f2f618e0cb103a722fddb62bbf4b80709c5c23b8cc83f243c82ea50e5cd32d7fb3d833091c1ec53970418c24707070a5d851700797cc6fc5f459bf436d332d4a5ab395ba250bd16874b30c4c8617b139594b4190bd0d4d6d6829b19531358fd80d3a10cc29cd90e7b86c736483e82df61af9bbbb9deaddf2bd61b66adc7ec9f8ccce0647be08f8c8b650b2d62ec2878a68cb4a7ecd927caddb493cde97c5d325b05b2e2cf8df5c509ff70cb2ca0d8ed0e8ad537d45bad6b68c78d4ac69b1010784e84c140bee3bf531fdc024456855b75938ba4ba1bd405e163155909831e5962aaf4354cbed8cf7fcb35476029186d0cb4c333b74103e8364173617bc0140c8206ab33fdf159addd034e7a00ed6daa87db5f381898dad0acb5298c824eac379fef9cf9fd83756f9c9252afd5e46c69b724732d57da91c084a536d72271a64342973a361d425aa80403a7b6587a094c1edd2e72433842536804dec52afcdcb8963cfc73774ac5f15599139cab48064afa2d7fae1ad71c3719ac2abe52e071181f4a6e0273cd2483a765bbec876eb75ace5bb8631522cbe72dbcb60c6e5ee22c80422a705f3d010bf4ed4354d13397828ddbe7bd7c0c19b504abb1c711655c6820de062048622be8cbeecc21af745602ce886804f45dd92dcafe46fca88c5705ee35c699b0c54accfe683b18f101e18df1bf056d0f8c94bb48151695e963a10739eccab023fa0831750998f863dcb6f6757d66cda56ae017ecf4169022e6af61b94ec4e2c0a5baeda5e1bf3eee76c6abe02fa22e4d2c095585e8ef18e0cf1f75999853e4c0a3270995aa28cbdc53e81f20e18be2d0cdfbe49c17b949395d7fda986e541f6737677b8338639778a75861d64277a4f0a231589489dc10102e8105cefc93b7e81d0b45b9b0fde5a722e8ba62185f8a53da3f9c4709af1f5c8d2e1fdfe23d73127f0c9f04fc1e2581b5c8464f203d7d09982d009ece02439453cead6ee10e20bd95a2a0a85292069ff20e302023a5ba983f7de0e1c7c4e6394d99242d9cef38c2695ad7005fa29c876460d01c0eb7b3ffbff5663e12076aecd377b49991ddef4020c8d40d740c0d5ab0dfecc00718760956ed5e3a4148466f43acc1aebc72e80105506776ebd89b68ba0fa32780db91b5c48f3cddeefec90201aac8ee51d9440861268e5f57867d9a053e72e41692db60a061a18351995a9135004e881bc8a046fa1b24029dfbe864582ad94460b3c675d1221ff9eb6236052534fe5edf22426e15780f90da62f293356de6bc20adc16603b44ce6c08837b97262c0463be0b4cf5f52a36e189f6a97c2c7ecea9038b6155d3e059e2a8821d19cf99bb86d7a4e44c8e12932c0b5ea957f461fee46a854cffe9cbaa4cb29a0d99ef14ad8e69d0c9e3aae3ad1769724ef1a3d12e7aecaa3c573702c09604b4ebcdcc65015c0f9058ab56b2c73072994419ddfc48e6a9b2a81b7f1771cc9c8fcbea7755e2703bb4c728beb8a4ebe55c12c153319dd699200c0fbc375833046b54a263e68f1208d9551b5dd73c0f17e10b4f4695c77d199d35a6643969e49819f5110cf993917ff39757c38e9bfbf2305120a0ce4c654e07e7cc6a7ac70038302dd94df352d65551127ce81626266b018f8fd57ff41c731ff2576b2db17f78d55b7c9a9a24148ce2d7d7ab58938c9cf83d23daa40963a45c748aa9d90d812bee4966ea4a8de42b38b21bcaacf8a93eac78b26c5f04c66cddebd0faf6d7af4b15c6892b877000624a3f2995226ad32a8cc3b0b9822d1c424dbaf911fe873e91313c172238811a5b468bc3347b279382a2b220ddeaba090be2a516d6e09136ceb88df25fae30df5455a433baa822c1d7ca399fa54ad2f48dc1cff8108e94a857c35f062eb339e3519816ed1262d82306d77138e4b33f4610b6b1ed1a6b4d4c6b6f7105aac01939750f04bc29b18533752da284e10e5abf69fac7c6f683e78f0f4e6fcd129b15d34f5b3784477ca7fc888874fa221a203587b2ace79754941c4ea37db6e30a18b13557704f1d82cdfc68e334b089edce5ca8eec3e3f13f33b8f76977fab862bfeff9722a56988339625061cf04519358d5007183b8acaef0cf159d7fbed20d6dbcc5014c123ccbf85b9cb7e4768a9a710356a988048c87d279a38ea116734a8c069948c054d699501aa8526b893f83c3c72d0af2b306fa83446a76be0f79b688109e1cb0c3ee324203dc6fff13635c3e765f8364d9367c14e6634cc1a9edf23c4add9aa2a5a3d83521dbdc863071b96d2544b3b3df5fcd2ca24c34db3f14f31c5edde2ed9dc8dd2d74d89401826e0d293a1dddd8ff116b1d96de1cfe902921cbb761d75eccf750d5492905fc4b557e9e520c03b8e1c1f1860bd5b39bfde968e4905484c5a0144682a95eda5dba778951132ecd0b97a5af5fd13ae189053515ffa8e1e26ed44f91a42ed0bcd79e52005e67125d547f785c5647cff435ec51984d0f1b650186bbee086a2ad3dad1d993bc8862822b609c1ee5d7d81d1ba631ce6536e79df36063392175e3cc50daebbab9b315f8f6b6e6179a4b5faa20943d4165bf4e4b9d2a54a68080570c3883bd5e2d5b33e3f9524a22f233db80653838eb462ab9c35d61de8810244c25a72293aaa2d2ac20bc5660f9465481711444438abc4e31cbb94491ed0df842c0fe8b8575bc1408ab9ff90f7e137c94ddce74656304541f20933ffd8c2371cb544418c4ba9ecf1919657f6905831f0893b5db9182223e5f6218de7fd6cc5e94d4876dcc3bc970df8a00eff78260478348fe86cefae1652b9895c90441fe532575e89057c602bfe085c5f9d63727f90d1f4ba5537ee0f7990bf8c17b8a85034d30210647cef147c02bf1365d92859a3ceed5290930f8144d4e50ea7261fe7f9444f81fd9e16f6acb2d5f24551ea676eddb65343b3e3944a4895c8c56f404dd061e4cbf7e096f1921b8b415e7645cdb77355deb69a463c706914668fbd382b086e8328acb18dd303f87215481f0e2dbdeebd1bba243ec7ee369156e2b4c9fb801c35cc95a291a801a36043dcd0109530927211e644d41a9d0bd8443da4dd8c815a217fa93c99fde264ca03de6eeb37728d28d204696874a30d9cd825bb8e77d189f848a5c9f8d6b8e16916aa2274b67c8b4d39202bfd9a7f5c7900b6f78b8d88dd36007b602f16c27bf80df00f27f97140e1e4d00c31ae2cb71b87d1b46c9b0ba408ca29848ba6e25e78c338866869e4d8f3c812cdd49751337b7d583b489f7578d9930a296ad51615d249c0c6d94277cb58620b5b56eb3ea063b84584ce71dd7877d75f1d50e075f25eba5d9fb99116f810e5c9240150bb454d9844dad18fae2418bd6d53df1d4a624c1437ca362fe8fe77f31ae66b6f067158649859715a4e38606f6019a49c0f24383a71460aa267c8988b581b5e444e3130834e3f4b32915ce769d779ae5236dcf57e35e856e456c2b6dd8d2c81450fe95dbebd1aae72addad3c767b52b404dfacbfa5aa3606309b92359c2e654ab7935a34519d01866de98c0b54d6d23f921b3edb0b4e0f2f82cff7c90af1aec2117333379d3239c67cfbd2c314afdbe087d4508cf0ee6d35ac29a9a77ce63e7fd6c72bfc80d78c15365d1ca19ee0ae49d8fe0084039d4777d6b7a98b8d6d790ac07c0ce365ddc8461e234aad898002cc3a345f21d29813f99089e28af1fc055cd66de160e2157ef26fbdbd0764ffae05753654945ae25708131b6b31a1f183798a9a51dfc18ed0432fd99b9fca43aff2184cc705eb51a78037c3e1ca39003ac7c0c79ca49c73dbf58d0ad908702af3e6baf49dec3b0837d17c0de2d09fd9a5c71391406a4d2fc7448511685334c21d6b7d75eb167f799b3b878609276f2d2f09a86839bdc7bf7d1c6e4e7b408921348dfd7179a97c0704b13129fcefeed0cd1ea6fc0ba5c48dac3780f64f71efa9374d2ce7cdf73c048a508325e2caeb1bf039733517848b04835ab238687999e5ba1e0473957b5322e205e9afbc7e4d5a6f19871dc1fa6029bc26831f721b3f4f607f5799e9d79ad5837dee7dc9c8d2129e0e8a4c76a4bcb42063e90d6f9e34ad199216cec403ab595355fcb669534933988853dbb7ade13a847d55a45db916ba2866bc6984406d42af22ef28db612e6772c80161485e806c8ecdec67c24157f70177aa46c083d5dbac5246b614ec99c65f11491e54c44688d151656000a63cfe65f81e2dca30d5484a3119adcfb74a1b83c950bf5b6b8b8bd7976726a175dda053548c91f56c6e908e0eaacf9b0af0c59752857cac717e1520e3f5e91a2ef053831c66513f87743932b88ac0bd0ff7bf3c6d2f3ac427281da64ed315415f9fc552c525620789d36b705b2e1753713be53d49d33c85397403df5b38380b3924e073879609a5cb50509b8fd0857337f51e8a5f38dd156615881bce4893059dbe96aa6cf21e94038e126e5262a889f3d2fdb078d94ce7e27c2ca6d9fcef43c3d4a9865d2fa53010ce6136655615806f1b18540a9e6d90da3a78a33a32e95af1d7fe284b7df91426b140c097c07d0ab9298e16bee69589f24714d8b60ebe935257414760d609cad5403e6e7f643bd6febd21db8faf6b8836404205f6c84c8658fdf7cf0bf0c4f52344091a6880f94d89a14ea786a063f3a389a67e41cff836e1d3250b471d800153b302a871ab886afc2c8c6670cc18d0b49f653c99d6d7a1031eeba65b5496c574215fb372f9336a540fabe262c376dde12ec1f796d37162ea131aed640ba7ac300633abf495a33e82751e346699b5257b50e72066f2921ce01602d1ef946b8177706dd4433c8c99907684a1c195e9453b5d3fec60314dae05f77568b2aa5c6fd5b0fd58a1ed3964e7aa40914c03d877ca4614e8455ea829c91537ff965cddf1fcad339e2006b008d8aceb564adeb418915e489e426793db1c6e73b4a5ab74b9ab6662179006dba497b4cf40663b78bc0502ec32ca3fb754cde27f426ad7948ef326841ec7ae9c85b15d0cec356fd1c82a1ea5be6cf7489ba16036f4d312b42cfa91fd217eef5568c212c1e72754c26454182e6e3a94a26cca3858fdabd926febfa853cc671b5c8c4a5703e8e8357c038c021b0c514a978290375150445792ed8158db44a710360628e679f64c263181611ae1948569b36de28cb6c71b9216ac0dd6a730b18cf1a4f0e79e6095f6747147fd8a1540e32688c6f197fdbf1850e176bc125a9092246e1e8ada07233e6a9fce47934d91d17e695bb74e7b07f411f822ac4709b71bd9f95d0f33b20cd0beaa26257f21428365a7bf941d774d7ca9549013a196f114969fc5697dd1f39a45720e06889115ddfde4f51b8a1fae8e808ea57e00cc4425e7a2c16f602bc491c7b7837198f1964d1fc34a916579020f436046cd3b4061c48e09f0c3120b8fb8d1f9ee8e7131cd0fa6dffb8462e899f1854b06262a7489f610d23be419b4fa1e5bd149dc18c480e13ceac79e5813b517b4c39a501b6152171025be1ff9ba08cc0883c03265690dffc9db0f7a4d7e64afacbdcbaf67dc61b019156519e19fba2edb050e5f5aaa89cd253eb0088aa52d364ad441e088e43e03302248be1820da78faed27f65d182f9ad1a5b83a06a1869934a789961c97c49ed2fc638877e151a1272c583723d3d88620e6918d2b705201384c95cd8d2ff562b578f306cc52b608735254008738140e230a6313674faec7aefa1666ba523d8fab2ab1611280d8a7acbea2d0f4133672a39b4929c9bdec8753df66660b7c1ebda2a1dd788fd328bc25153ba17cfc08f0ba865c4f3c12585c635bc3b7e96e47732d74d58be0b0da65cd0bf67e1236fe8e8cc9e9591065f6e2689734fb7f64e1119756cfa67f15a99dd914166138db813023333c10f5972f9c01f9b89b763b1fe9e08377190b2de890fb1a3d5f198f46d8d95a2dc3d264a31fb97a8d8c5ee668dc40fc69e65daf287928fc7b59ef44d47e9da8df1bac0ee5a5ee8f196295ac1a3e536336ca46b667ddf919dfca6df84c7a23cf45101852884e79d78608c767f2696fa90a27104e846266777f7120d4328162e1c3910748a2a446f750b8dfb299dc6e7c84ddc12dc57485eb543e60d02b402b3c4b35322670b1288ab32fabff8520d3d6a30dcc453ef1e6f71fd9f31d6bbd86f6c721759dcd6304c96e0641195e8150c22154de7c08b442d15a98084b1375be520cde2b5b68e654bfc2cf3ef9b1972c290d5c038b379ca38e6b09b129028ee4cf4fd6ccc7c4a6931a2644fd136131f490735d5128daa4f667ab741f7e9d4e41b1e70072581c7cb80a33a3c03f6f329e28db2c1c0ed6345b05d3b583c4e35648d5edba4884aea9b71cd3f691fb5101ca68772910927201675a22f879283161333b2106de638e12905316c130df482f8f5a0d5c30001adc6590ead0aca8e9d72016a67f937e3b0129e5042db5006fe8e8860fd43d343ca31d0c3bea3712d911d57a868e4eb95b4e005a9b10cd975198d60d426957c4d268ecf8a4261df359191429e797d273ace08b765d7b8c392f683e0cf5baea8ddd06336bc592c9dcfe802479ffa984caca5dae864ab73262d4a20c172e717e4a449e66428eb8b6c889e511d30f54a922ab1ec942a1e4d7a8934a018cf8b7beab8470d4f117390c072640d79877c1ea3d07821ef0f81c7bd433ada2d662fe168588125d84dc771d58fc04e1e83e41be00bdfdc4a17f4ecb32db75147a61c3646e0e4d3357aef1900e6a674ad1ec179bf72adf3426785c4c00990d97b868ccf0f502b8b46f28d7f26f29450c3ff2ba03e157579b9e87134480a31c3f43e324c293a95ad374770b5595dd4652ab8d7b064a01aa98f455461c35e30090f31f6ba653f8ef5021e7aa350bcc92ce020db74f6dc5167854067768a460b532aed67cf53d0eeeb5af5d246f704a1a224bf6174b6f6c9025ef1d71fcf5154002ba244689ab061289b7355d299121558229c3170e54255474738154a099f8392c9179612a827242804b88400159c1ed4132f1fd3a3140c4e520688ceeed257770beee032dea3c1afa5b0d3a0a9bb812a7596496858dceff4cd185ede32086b2f4f4b84b23e8c71bb4cf083e68e507c90523ec086363fbf971735b145082eb365dcde7210b18c010459ad3b21b7bd0fd3beba6324801f86b460f1da31788c4f89efd6399362a07a24a95430ed54851436f846861093971f200f3bf0984f0bb2527d4e48d85b794b947e06ff9de61ec0182a53d40aac8e90f21d6f71a504acd8a61b8684583950264027ba9795d861e2a988d8ce151990d5100a5c46cbb65c5e1bf625ee107cc1b0798e8443151bbd9cc3784b1b3a6ca09bd3b86825f561cd1b15beb3451713c2b7b6d3570c15c9d81e2bea276c4221847a67dee69b3018cb9a7a404dee81afa18d42047f71c97184c9d3524d3fef3a056c4da4269be298c1dbd2e0db8ee9a2c13c08c491cc3b2eb28da0f47b4b28fa7cfcdf4838c9a72b587b60b8ffaee94ea98e83697262c45cc96a60f4ab90953ca027c7e43e76a80c35bea5a1ada59701f1600ef509b96b718079c9b01389e761a4ad8fcc66d0fe89dddc2f65b00b6c6f646ba8e46fc36dc1d8b67ddc3e9b5390c0406b1177b02f83dc3c09a435d0b6fd225ee6f1a24601da0cc9ae6732d1ca9151c8a8c60d72e0d4308f443dc543b70c0d4880d1eccb8274702eae380b2297bfd1908bb4d23e566cb17111309b0542bb1c00c4a281434fdf35ab477769a64c7cff9fab661ae69d2f9598087c496b015730db089eb788113f7e2465930b06899da8a74bc8f1d722095003e06f61f9c1e7ace2ecffff9b01df03e857fb00f16866e8e5c9a063466ff2ebc0ed0bbba03905dca42568102cc379e82529e737ac84fbfb2500534fa62a22cd3b1a81cb8b130ddb09dc6b6e505de1c8b8227b120b0803ac61d4bb6a38c446f356a4dd27bd4633fd3c9465a72c00028e1055a9e078660003009654b707541a181f721c0bf19fc5ec2c44bf157048fcc3ede5b1632a696454f1fc047e96159c52c154fb762aa7988b732cda95a40512a757d4c5646649ac2f0a428541d8e0a87ec3b5f8e4c978103880f4bcb31e3130cdde048e0b264a74f74f17645630f84cf9b014476f77fc440ae5ca17accf6eefb0304802d3dab8e2bbb4ae82746924382914a21fe058d92f26b84b8d11fffef7d62034ce985c01530c290018c2a4c265500a246d8306c49a2d1c7f8cafcfc82cd15102731eacd81f6b94d2e321d18366e3d00d92b145528129acac6d942d01e9f098951ef16412e63a9b939ddecc0af262ec9e1237154f0baf958102bd2cff0402214947a546583e11c98c75911888d568cdaeca73a29b845c216a682d9179217af0bf3a9416aa7e9f41703ff19f1dba0fedd0e3d4c35d78334e6b236de2f90631c42293649bc7d72030a4d3fd6ad64f03cd9a4ae830c10c29599f633573a069368334f4e254cb40bf498224ce4fea3be265094b52c96edba519d03a1fe65495217665a7f9d2688ac28a11d9146f7790c616b8a9f85fb503784168a799140a60cbe31ffcf1878b554b478bff866ac4b3dceca54ce275a5bfea6e9a0440205946839df27203687dbe0ddb782794870c6ec24b0f62b6803f3f9236588370c7365b451d32977d3c6ceb4bc1b799da62119efe74a1e34be35d02bf185eaf31d8711a63df7e2a6d2e467215b448a99a671823ad019c2be216504a4920a4029a77f8a2daed9634a8ea61e382c41b19a1aef9d2225e654b67c72413709ef6a5d6216ff9f74ae4be4da155c73d5c3827c851d95b1e5680b5a4f9a9a96f7f31eae5a1cbb42d2ee5676ace60dfdbb59c0457c2fb8f85627723da9726252ab524422788ec9037e78785ed60fe741721406055d53d5b65241d82fb036afdc6be6761d1f2547d6a81fe8dbda387ccd6539deee4def091b0caf1a4259445752a8b9fa01a2d16084a5360088dcd3d7f8709c236652b31084ac8b2841eb52ab83889dfea869066dbe209a9d499a081b6f52330713f6ecfa84214a79e0fb5fb45f69815d8e79129c15535d0b45b72940160e2610b16fc9ec7607282a45fafb37aece7afff52551795e9a62c57d560e7c33a7cbe946d49e7e2b129849c2a3b63c828affdb9d3c56bbe6844dfb52d48bdb948d66e37b95b7085109d40ba83aa089c85e68f703fb73ffa80084d403895018825aa3464f6659e89378ef0fc9f28d42eb44aedc87f09d28ed7a8b6cfe594fa62ac7062892885cb6cffcc72b8c61e2e5d87c13053b1d3bfd83a95db1b21b634139a74aa38320c5687dcde4b9407ad6f3611a1a1994420770ffe51dafc0bd189748c469d8ae41e4b9d343081e6ec9900173f9c9dd8fd49fed16836320d8606afb45e99060e27c362097bffddf7377db0de3621aea54adfb857af4bce2409dd32cdd3f46fd4b1d31e70264a7c28d3df6d852a71661ebf509f1d614377ab5ffd26316adf78b02e79a3de922a13fab89d668810e3ece448c838ce721066a3eafa5d0159e570c2d0ca52d264a26b28b1fa4fed81757981602ba6bb8005026e01f952c57d5a5a7472d7218964a90a031ade52ca5dde3372194c93b0e463c3f8527aa9febd81a9a52d8a775bc7f3689fd8f1009834e525167b2ae772e7a5d411273acc8466fc91e03932fd5708458eda659e040705c9c556796d285f677c3afdccce0cec3c2e48466a9f542855f290dd4a8eb9acde188a521cc5002daa83d087f1183caf433ba1693a083490c388a2b035fff97abff43206adb32f76e80a784d6494915f6923c4f349c6ffaa9021d89440530a64736093a0678d46f790d549fd85dbc5365ccc5a3137f67a55f361b2b489c9c45f2f8411c3ef16bce278ba6991e7377dda09f8e532936673979a310759be51c292e0a809ae066ebc1aadb075a02794524fe6e8e69ed003aaf2e560063743a8a7eae03dc16f38314bc412580d54cc75ca3d9f46babec10c1c683a08de0823089fb2e9900bd0c6dd4254aab344cf15da651660b8f22197ade5354ee7b6b957b0fdaea5860aed5b16b4a0c626d2c9e6dd7e8b1dde44d5d759c49eb51ebff6c43ad8f178f00694a968a6e1d461df1293ea42b858fb17caf256b1a6cb06823e1a94e89e626397f2350f7ae5d7126ce187c18ba8f0edfc17b312ebc5ce670c23b9e873bc4bdde80410f4d22af650b3a0ea0c7d28347f51f74d27c452c50493f1c1355e92c0083c3fa6be19927963dc376318a0d41b4b86597b35f37c1da4537eaf3e9c340a3ae22abde7db33ada76cf4f509d134bae8cd2b7253ca1f42ce134de9c9aeab88790fc10d6e47954dbae920581c8be590bb3773cf2c685af78edf940541934f6c13605c0e6dfccf18c4ae30416ff8ec8059e04d6ca818e3d426ad070468c7c1645340294d54c7f6cdd75fad6fdeb032bc2ac04cfcc2b581a1a0c9ee7d02a1fb2a387480769753f26d0c3b9fd4d51f4db501dfb03ddbb3db7cea965fe1ffd77f6d11f0c436cae24f6e1e2f3ad21f974a84a268d7f0a5beda0de710d3ee8406582100c8900f5f945ff5871f03356f7bbfe5af3fb0952af1bdcfebaaec93e8cbafd0e7bff2e01e297d27a4d3257ae0f95dad06cecf4840e6bf592ee5852564d1cfde06970feb5bfb7dae308e1afc97c6dfa852075e993c2c93dc3f90f5487ea58ef625aadfa3979f2cbb3c1f7f878e53c0c4524ba7ca2f6ef6b0c61366c7a041b3451b4f7df859ccfff200c6ef8a3a7219d903661746c178dcc44c581609c67b55768c07362f1113eca76eb7791feb8576f388ff6bde16b9f4b3ff30dceec88d0dfb8f5528dc03a03b6c4f55a0121e3f09f192df358341fb2df5dce689436dadd933382d77a9f1c89e216b7fe6af67afffd62943da509556a837cc51186bdd6b6c5106c1c2debc0778f77ef333311d91ab7ff5818e955266e3dd43b6a7ab57ed36bc9b0b8fda2d0565dbd205ef710ccd1a68aa1230cefdae1b0c655789cf47a2872cef6c05a0e934c48cdf7e6b151705daf3f5cbebdf66562ec420e277a338437337fa1b25dbd71c121b391f1c81a405fc8ab7243eb7e3c2c6c065a070379a7fa303aff7f7ae22a32f9df85c8b0869c2610bc23855e3962f5d5d2c5fb6ba588973ecacabf5d76b17db32cb17da3ec62fb56d9c4f2edb289f5dbb28ba51fe3b8395b5c693353170a8cb538e4cce158aca25586900bc66f90503b1af2c73b9ef3ccb40a679969354e32cbea9c33d3aa9c65a65539cd2cab709619ab729a5956e53c33acce6966582ddcb2da5f2f5dbcbec652cf72e3ff3c6ff6327580dbb8265b091f43340708e0b413a7a9e7e066fe031dbab9e1d0e60861998ebbcb1538b6a3fd6dd003fd623d11faffc2fab7a7a6b45935e405cd1b62aea7597a01886e78e4f92d1c3222c975a6b0211d29fe1d64ff33a6debf593f4bf882dfe0d5eb16e84bf61938d68fb9925eb51d4299579e72f5b594bb8d6b709dddbd5ce5442083d19d3959e05a694897eefbff8bfe1893643d534ec03a5c061d4740c33f1c8e8c476d84d938e8f2a0c2cedfea0f67810c08bcaed2ac0725f6c50464c61ae94d589a711ad2f4b1cf95c2b5765b4e4853e7110fb54b3df774c2c3e9552e3c50d193e6e94b90a9626a3a4e98424e9da609647d70170c3314b7f9aa74c5634955bd790e7601640bea5796802ed87e0194189b13e270de3890a52e709bf75470b30d48e45efa69ca58e8175409ed47d8328edb497f357dc26414048e831351fd0bf7e4ef253acfc3dbb2929d101b4a24df61e3f468e8a748af795c12a1c416c220fa94c9f2d7c9cfb915b2b7e8ac4ee8e1a0b68e2b54d9f1b8fb8bcaa5497e6cd0c9fdbf253c8a226e4f0a171910fa6a528ad111c9914996f357ebbd9afe8caa0b614ef18b5b4ce0742e9fd901c5684c4f77cc3a6943de4f447e97255c2e54b19ee4d0203b2e340e7d6f59b7b8b944b68461bb1e21e43b8097fdf4bf342e7df48ec7b0d9aa520168c1d16fddcd583906cfa044815936ebc0e56674e79b27a2c2ed64d004253fa804d4c3d6396b9be72406c351c7e722c511e98c3f40e4ca8c71bed2cc79b8843c816aa5e897242fcc18a52fbe1583976d86228ff92a05ba730c419212808ee60dcf457e88e59b455795b67eb163e21e8e7d4d07b834d2d2a3950cfd95103cb2b21c665c537fc1370b046628b2e0c6f3b80e971c62849a721c504f715a5e1d65e5b68c04592c0d230f3410c0133af30a6235f3041a79acd3e2bac5f59330026abef8171e8dbcaae64a7c708e4159f47486c5bb91c0195f3e1112a00117551e046895406fcd0729a7ba4ed4c05233075ea107cfb91d088ced2ee7430e1faf069a35666b1304c0acb692ad0a73269ba8aa36d3a8f751e10d98be8edb905d90380ee7744aef7605fc6c7efa119bf5f3a7dd9602266ab2bc64ab5238f764a6caf6ac508138cf7ffce20e499c3206ec7afe96bf6032e55c4b6ced442a23467c7c5786f3f1839a0aace243a55cdba6dcbbfa1b6940f2d7e8cfa7d4b935579e297813fe5d0e4e87d580cf2f0a32686dd9d43644a2e166a1862ba7981dbf577b0686bdebd8ddb9b8b2d547d00d1fcddd19492e163cda1c000d8ebb31fb02a0195db1749e2ceca90429b2fa3cc4070bda8e5caa7b8c6b0468067186fbd89e752819f133ded8bd8eb98868ed414cde1e05c1a039cf52e4e0644d0e054574f7c201436b794a9fcdf8f458ea07cd3ef7326b2e8bb6735c5925fb0d20243a42736afb2d3c21ff008851dbc75081e7fae5e71d80c573b665917b27018f573b8a4f76d1103abe39e0404e1eab700f0ebd6762ce8ad51578961b10c1aef24ed42238c53d3f1bb5ab19b9eca068d325ca29b5c3e7f0021278588e54620102dee14f09a85c2ce7aa6285d1a0b55b1e0d08063bfdfdd4be8e7a16133c26fef0982a4c3fc01484d8d426358878415cf79fb930da98041b3a095b6e824b1d0605b1e8ff165768fde42dc8854c77dab8e35cc1a251cf4dbc82d697f7413e397f2378544a0ea0b5b91b7d2c5a6da76d9ccbe42a6e3a77e0ca0573eb73fbb5908b06b787dfd61d9fa61527da12251a3804df393b2443c49fcb89470e67f215136d78915d2b1236594aec55733ed8fb12e98b106622bd42f61e8822b9913d8f289790ebdde61627ad82bcf4be8e0d0d808822b952a5727103fb4cfb25c26e5d34364595d6eaa5bc356ccda783d927dc322ea491356e579bd3cca51e54396e27dab7ced080aed5b59b74bfe3624df046badf90c29a05f864e325e6f5c556b0392c51a296846e755a2ff7f36fd7d79912bb31a0c32a8101c6408f142c5b41b8455841617a94fa1e86f71f988e433bfec5acdc0fadf06db00297e9dfcf8f0e5e6ab0902607f1eeca420e6f58a0684debfae45d7cf474381ea0f5a5cda403533a9af0d3907c71e69948d70230d453d61f0adf11a89fafa6691eb596af4236af4c14e7b9cf07ed290d212051069a22a6319b1611d687fcc9699cf5119bce0420f827e20d462aef87202d6de3aab882fcd7251310edaabbe99ea3d0bb7a41776d33f7ae173115fe68267ec83092c5bec00c390814d177469fbca8197423a78ea34319e31194b5d9792b2163a411eaea764574358c01d4d8e04b1620fa0d873d1c063b0dd9a958bb5f7e388d2da07f0dde5921de79c0dee705d96b89936ca17ef0e370e702dff0bfc1e440cf84ad27b2c969adeaf52dc732c80e7805e832b32daa77f1d1d3e17880d69736930e44e6bc3800449c7902961bae4237dc13d4cf66579deb66698d176c7c72cd16407fd1caecd2c629c7df0ae77fa352d947c98a0cd68f001284a973b011d02019980571a01dc81c61ccac6c07042306fc7ebee0c598b92e37c6c709d5c727346e52d05dddccc7271f8e2682826bc423e83eb15af596d5707afaa46c9feacdd5a469e7c5b0941d10224bca3abff00135f3a7c5f2e0e8850c9640f1b35f3c135fa537df3c006c41a11c0836bca0b95db302dd8d11897fbd7d62325cd4eb43313a43bff779a1945330c406e083a052ea041634c2917dc29e0d35829244669908520edb0cafb8bec39afc1feb1176771d2686070701d0c3cf7815999c2bccb54c0ddb6d8bd9e3ddc3808d96b619fa5aac575dbc02d939fd4bb76e985614cc027c20950d7f033fce51488c99cf1e0d10f033a0e925d14be213a3b9df102b663039cb5bb0f265d6173d7441692dccd38631568bdac2e88189a86563d43d41ba94fa6c0c60a23b5d4741425ae2a5014cf123eb45f33b195e80516be56777f18898d00d13082a34952c04e2edc27e5ba74aa0169ed06f79d65736013440d692e683c1fe07a8eddf928401dd078fa808c2118af6ffaac63e13960917230168a75029ea7160c90bc81918013565f1bf6954e659848b967aa8221ebffed2178830184abf41066f09d32591dc7a244b881f74a2a537cb47887ff7fe5e8e340137db9f496b4e44757d2a54c8db0edffb375e39cea0f415d3f063408ee6a6faf1f0e3fa3d9e17c703e6caaa411571be879c1db9d361c43d79f7d465e0ee39fc3215a96551ef1a2281250eae4912a54aaba0c451ddeba0dc83a53047d8373f135bbc95eb0b144e29cd38544f6ab81e405890d14951fc8e8f1192a70ba0091ec612a344b9749ca50d84edfb77673484c7e48fdcc9bccac91a4952ef518df0e09ca39b6c3f32569c5e58dff186037e1ec8e3e0e5417194b419d868e0f4fe6ac81f6885efccc4dee7db95ddd06d9500c613f675be9931baa0f85d44fb5556770d4f2d9e2f7f49b34735e8101558111644026ed58bc7554b1f99ad33a251d25f059b7b1a2701829055d85fc5cede4f7c2368d88c5fb62dbde81a63b640e53df8177c343235b6bcccdb53f978ec6842f50866cdbe8e6cce237eba1c8c12708723dbed24b63d27a21803feb5e0b32a702a312e32d2669b45c3b32aa946d56ce3b070ab32ba55efe51f015cc8cc81cc11a91533dd5ddf1013ea0f44e7b586fbc4f2e4b14d0912bb7bc0c24c5cf32fc6536b1d0971b1f052f123c508b4fd8457eb2703907bb45eb777db9aed3d1c3381b1062f84d6565e95264c5b8af95819016bdb84e73a8314ee7b2f595f034f12be4596d2b0f1fca8d819d2d263360f632a2962678c302330c05ce71491ef0f288233d82eed80322aff8eb013d444074f91b3ce56e89542a45f19e45e761afcb4305221fdbe7fc1289e9ebe5c4e6b5cf0a8a3ab8bf2c279c65673829a7684ccc2985737d17e310ddf9ce94f2990200bca3657ddcc28e75b642e6fcfd1494ce5ac29e8c6601b3adecd83bf8de0750c0f816a43973135737f7b2046a78aaefb48adc1793e623496143e9346d8d3468da08c8271ec2eebaf3d245cbc776e11a36f1e257a6de4aa2f8b970dce8d211f35fe6fd7ba1d5da48d836c758ab0dd83f277378aa8129ea5a21860c5eee766f572eda7ca5f5d0a375dafc641d028d197fede38fbfefc2b19859aee04e26c7a954ed5118f2cd60c1b8479aa67de9a39238571cb4c8166e9450577253881299ae52a83a20b37ddba1e1dd93569796c21f27bed6f24807ee3d3ed66cc0c7ad446fa916515225e495336d03f6a83ae9f24694ba6d7428a9a172e104ebe7a9d1eafdb67750221a64cad3146a76108419021a0ef77966b48eae36c61ea133b8aaccd7e304bbb561869d336e6c49693dbef36197bd6930fbfc32efe326ab6316e8f9f38a470997e3da0906c55e2eb8f059ee2c341330d38268fd5feab1877805991e9631ee3f12b7cfbf595003065be891bf0eaca84b50cc61677ec7a0d158bb1161ecd81d9e8576bce8d8373c5703ae6d68f2e5b6f3304fdb1c833ee7d9ecb8aa8acd43c01c1848ed176340781fef5674d293a66bfb82c20332f316f95a4fe511e6522d3cee232339766b9759da8c78ec68ba2729eebd14cdb197bfee3a6161611f753a0ca33c334eb56bb4adc5bead2e0d4545bb8d8300ae009f0c74d5896d145e96d84a65333b42fef47b9d947b96cc1cfdfff119ba887fafea332b0ca68162ed4a24e3e3ecfc56c46e867d6e91d1751065e0acc81fd46d8d42817ebf87405eda802036c58b2113443798ba1504e893e265decdabe41a9e8783f7193d8ce3ef52481a0c21ecfe9dfd325b5886514bfe16f3bf9ac99964408ac44941491094c4bdad9bdc0de422907a2a166a9782298ca36265a2dbfc3061ed0eb4d405ae1f232e20c7593a85969aa7af14a9b296a865cf551372dce6183a3a59764be0ab9fc278c063e09022c9364114e35628123c35d0732fdbc9f2985b940f1fcfa613f62107dc5ae0b1f75a9098118ff3908eeb4a96753e8bbb874b67ae804059f6bcf4497f746d8311c9174b1ae255aaddb4b963522c1ec9911ea90a3a88ed8153b01ddd48227110f493f69f91c029ef07fc685d500b5f70efb099145a6699310894832994f97db2b82560b551cb771ed0924503ef1aa3bd4f55bae5725e8c9088e36311032d4c7ac3484cac9664c3939164939097f4bb20f4978e8222da30ae3720ef643dd97ba7c7d34e323d411c49973e9b0ef17d248279050619c3936316e152b7a89902917ee11b04d3112cab521420f47a9039adc39648eca19882edb7c1add0b8987dec4b60818c990acd8599235795cf0885616e567e35b21b65e549073e4c1844d255024271f4ef44f8c31f901e725f33f2e78e6caa6ea022f7bd4f16f5f11691810f5f52d272b0f68fcf0458ff12d7b0830e081f15aa6f8d2dd5699e3a5c507d215917a53f53a949104db5ee45ba76a3b0f95e03ed97317413844e11882facaa9f1ee64dc79cb86713db38d0777e527190dadb57c5c0fc3fe248aa78829d423dfd32db39bd277b32b1365a2b4f45b69f4028cc154ed068684f3568c1d688862d9c3e6a6c5922213223ef07bede5e06458d13340e2b91ff2e3878846c59fd94e6321ad87a0f1f6b0dfe6bb8a89eaf5fc303edcb39c202e8096c74d79a61c0a734022878e76f56a040d35ca4d81c02f7683fbcfff0339f859de804c0c7dac2330d05eb2bfa2560fde9b6c0d716032bd9324bd9770f7b46a3a57f6ecb8f8ab167f95f77ff577dedb4c3112d8485f982c40654cdb7dc891959d332f7a5eeab5d370447c470df26344e71b7947ff80faa3bb2b63e9216871fdcdde34fb124cd13861f426fce3bf909b60728a94d36d2c858f11f8dcad9a3e198886a12023d45b991e6308d94e0071bc9daf6581fa0f4695982774de431e31a7d9448cf7498441a8a1a4c537b98f9119751aa2df44740da70d2821c8a6c5ad56b97dd5ba68fb18492cb11ec6305b51ea63226d302151198aac394e71a5d44a78c99bbbe93a6e704b178e0d077e89b12a8a4a0f8e1bfdec962f909b78f4e26aeacfecb0dfdcc708947c710eed63840b845efcb9377ff765e638c078dcef6da37fdd0812e58894862e885731c7c74a452005db871c3ff127f1685fbdfe1dd94de8901d146b867c8fa70b4bf9e600099b8e60f9deb9120e756c974c182815e190fd35c01f913699ef60dd3ea03dcd4f3b7e041b3cf63142e04b8888c011384734df88c0c98e0443d3e1a943eee88c98cd10676e6d03f73162108a2c94fa8afff7674507e5ab483c22c622a8051e580e59ce8a280ac89b732081b9ab26d85302b6fefde99011fc3e11bff69910ce570fa36b4c174cd4f64b39bff6a4a4fea2c46c2c7e2c21b84ad9d98f2a0cae709b6b6c374b38c011b7d2fecfe3845c08ce8c79fe98d021e4e2527bf1ae60be0ce10da2e0434b598930119727d6647cb18208ff0f31c03e46940d803a221c714af7dcb615c6b7e831fb079f70d9c963120dafe9e5170e81b6bcc3300a9fd054ff897e5c922f62a46ac9262b717ff6319204a6dad1e3064bcf2f5ad462bf1de500a640f9ed24583c2ef0fd889d40464cfe0961b8a6736439c74ed5ff3e4644cf8e99a17556f12869a7f247681a0845a9398dcc50bff2f75b43acf4e7f3de7e34047ab65d78e2bb46ca2abbf2b58f9126a01a70c83a4bce888fbc0283d7c89c0178a053b81554bb81617c74cae91bf582882a1c4beb1afdd43507d27d9d7017c4b2b60e7a780c4b4bc7648a0c4016d9cbe28af9e319c75902e1843a178261308391f7316263c545b88943e32b36ff48bd470e6c04b1cca73f3c6ee5cfcd935595304b4d26319c240a920ac8e0bcd2c1bdf611023a2cf28003ba53d0355e44234eb4c1bf0afda2ce90615b2fb7554710170ace5f6a7598eb9229cf244ee76484c3365335105408a464a464d9c41d9d9e9a4b3bf8ab5310c94186e7ca0fe875da6f6678313d71e0e82958fb513c59315fb9bb5ceb7c9f7aab0c478f645e9313e7e8ad6e4404a720002f3a8a2f28027141aa0786b70b19eabcd1804700fb06ede924d147b57ac38ac6da99f0ca32beab5cde17390caff3e8a52cfff8c577aecaab548328eee041ec8bdec6a6f578ff938d3ab9a2eaea8026c01548e17d5c7bdf38e5f5a4f0c209d5fdfc30dc2a5e91bbd7c6f203f7c3c7a9bc6a9d65b58a468ede8e1e578685213125f6d65da976c7808208331bbb27573492d6e125bbacee476f7a3db192897557050af49cfd0371a515a516d75da5f0690b630198207d1c366c81798ce08e12721ebb8af78f7927e2b788dbc5c85d12249720d1d89bc9dcab84142e5259b4bcd5b1332fe5e1dba09e446780bc494de1452c4a40f9bd97bd141364fdc482344d67519c4ee7f0cd1cdeefe07052bc28e3b360230f99e43b36b250226f9dd9a8eecd4106c143c372b936abb25940e64726ba2af295f16dbbfbcfde00f71207980371159d42e27c6db1208a4e36694081604dbc0c83cf864c4179e591e0e804514e8f570da6cc5505fd8c038e108a65193bfb051201c02c03e3d06dd663c3ece1ac6a1dba37361b793ef840dd696ec67bc71f8115e5aa300652a035164cf77325f8f13bbc3bfdd5f62d36e5787670cd328f380d040c38904680085b5c8515900672be981eb71e9a1f0f46831057a4e1985b563b6028aa064428b5bba07c079384392a9f01a6f602944ed2fc6d588c7e052fb604d39c403df183a024bbb260aa5b15a2cef9db9389711b46246612e137e6ff92407f496368351c64994f05376895c86146c92a4c67c303f34a476ebda4602d3a2e8a68a760a6fb79d1c5bd986361d0f7d1783b2f9c936cac1054ba470f07440009decffcfc5a054a0a5b5c007aeb0a6e12940e4c2be35bc59e23c5fcda892af2079358ffab4fab045c5f97951176f1dcd67843ea862349678209d3c938f32e2f02eb4230232b48cab2014b3ee8258bf76817285ae51482f445b7a5f7a12066e0cb0f5e2ad7e8347e0906931116a6975cb92fe379c5b76f24421336ab4e3d4fc8e1fb0a730333fe9b004ef1b3c74dfa1735f47e0384a6d52368b10726be6d005d004a160707d6d3512de056865b36aebd5fc83699fdde366b8ae85649f2a5e42fced14c3b7c41c47365f064dec5a160d832fa2600822e22fca869a81074e047f87f610d69ba866440fadfcf3c2c9489aa989bf597a0b59fefe5a1c576bb7088872014c5e01c6d9c1cf08848055bce004a009e0600ab280090961942f31edd0b1ea48b25e536bec1a70a82926be4dbfccf1d2aa4884f79006f193ad531a1a1d7043bfd8469bb6bb390696d4fdb8ca681a98993294c085408d111f4a4783f24fd6c0a5cf2e35f4de3fb710c768f439a635de5c755e7965389e6bb097fa129c5d174dce3de8edca253792a6bc21b4a8097867f8d58b58ea5789ed7338026f89c5318111b9bae316ea8af7da00f75e5371801a408f0d6c933eb9d6c4496136dfda6116a0ce94d1ca95def16c660c841e3c3c24157211a0c0e2a46b15ab21355327f623146ff5417654fffa2ce98f1f2ad852c257c3c7b78ff79ee06b0594fc9a3d140924cbd2097e29c71821d9272c2a29a70e45dd88c82831b28f0c24a2a6f9e8092a62aed41de0aa1cafda7bea5e3f407a6d710f7f50ef1fe0f90d0760b0eb1fa18554a9d658b9c6e1e48754c65188d368c1c5a1dc7dca13ad14711bfe86fd5da32769f2003729ab7ec08232b0cc71edce0183386b3e6f267f07f3320187e522f66fac647aa5f8ad94b3e02802fce5f7ec3ea9df5e8f22bddcb755a235baff26859bf153219a5efddfe6ad3f64789d765b8e1acb8d780ff110adfcd3ffc45dbb1fe9c416dea17595a895704ba55c9b83f4d97e8c6d4255e266bd3772065900601b6943abb5c856bd2204f9e323f35ec3f545337ef363e7dfd9c2dfaeb3520aaa1ddcc872581a0bddb478c8ca7fba840e48f23a59e90e2ef3128d1916e65145256be926d19dc9ff53a58227c275ce6f77ae069e275f422f83bdd240bc003b5c8e17505acd81aea417dd6549b8f7f0e1b42a51613620f9dfb0c739efda114cf6e24c5a1f60f4603d1cdc198825f4c25f96a0d155319b60e506cf4d18f90034daa8b2db81b4e431028a55349549cf9d6623c00d3a87d36992800799c487ea1bc924f9f10c12adaca8bd49b07b644f23b3fba35fc762bdacd1dd04db2e5a65623273d878534cfeba807c635a69cdfef1bf6795d728d36ed112295bf5d47b545d84d75878af214060b61dfffd8c3186b792de8a2ecabae383477a1a61ff582268b14ad2c547d7bb33c168b94f52a913704d9231f832755e6b105ecee6b83e04c03404a967150b7526a339d45a9acddae5378afda4c62fad291554c9e50cef7d9fed6431ad19f733890aa8534eae32edd4289c5b65ee3cdb84dbd1198448183158945a0d995c307d45278d740172a3dd9fbfd7ec404d02103e3f5564073cb83b5e9f9d2b94629b7e5b228f3005a117c93cbc2743910a0ae4fa8d2249dd64f062621efa522cb8378d731e76c3cf622bd81f133e574fea6d4c89512b4d88c3f3247ef04de35eac0bbc2052ca7191a420f6e081a68828bad8deb235f0c23c4665e3e1e178cffb35608c00d33f3b6c00342b63439502be98eb5a25ca019fa62dbb58c6df9d417f6ea66ed2353c86c5348a547c45373b24aae1b29c36d5ca402295f34f7d061b687fb86ea1bd320318d7293814712eb12393b8bc095f812e7a99330910c11a2c5c4a965f4011900436ea0893fbe6c91416e704963165380f605c5c15844e03c7be61b70d0e68bd99300eeefa1a4a58380a7519022d9fc49a72fcb2a201849036cb84df12951e1fea2bc057551aee442f4e8a98fb5af0c533941a8831cbd3d71b9ef37ac4c092eaff6ea09bd2180446cae81e9ad96281ecc83adb980b8fb945fc7bf0abc63d54dbb7bbce29067686b42757750dd7c767ad6e2d330fef8cce8f7a28f1805079083a6d7d48a127d422a6bd932a62e74e2168a9033fe7882772d66bf32e5c3f8dc586465573566b21ac6e3fb3fd03a6d2b71ea78ec427c4043a63b97ff710d18c27518d5023cafcc4c586f38c15c8a6b47fa47ff01e772aab72777c10e6bcdac1b88f5102ccd588ed0e1ead277d9080ae4d5be0c3ac15fa97c4c87b7e5af293d81e79f69fdd16d341f9cc63994f908cd9daf4fb18d75071384f0321c81a229647dc5f337da38125dbbecd10b465c418a8030ccd007d00c8490e67a89fc420587782273bad1471659ac3dc7f953957e1ba2150c2d9e9261aa8ceffa710070fc9b853cc66192acc2fc8997fa27e12d684ac9ce5bf0ef8b3e85865cfd3045220f2b2822399215a94f845ddce7d4c4d186c4a54841544ad57ea3504345181c01f43389ab6a50af38261c0b10028b2517ec5b46a2d585b2cb7c0ececd2e0a3d622ecdd000287cb26bf991d67f14bd2513f7164d44ebdf5b8a3a2ce24e4e58bd7865753a707e2d90c3cff27d1fba8272c55238cd8473a22ae790f7121d7c7872100c234718912e942c1161b1064331255340922ddff6d6955840d5dccc4cb6b15111e67e43077fb6868eca2075f1af17f0350c0d9d402830448619cc38bfe90411eeaf85452eda875079306b0854eeeda3976784e0c0726c542465096ee19f496e70880ba3288843884b92353abb7bd5ead7701ed31519516b43f16ccfe8349aaac83c624af50baf32d12739c713ab217499da408b70bb664b34fc612955cc61eee5ad0069833ac46509b954510c8eebd660e1cff7ede199dfb366ef0161b628b13912fd5d6ae878306821e88ed77e743cd31c8114b1e9470aa691aa8b5ac8fd3cc21342a156bc4b8f5f7af898875f49db0e42f80376927c355a04ff178c575bb69f976070f2a83d81c3bd621c30f69955ca2e5370d50e62daf326c1e490b0f942a46e7bd21cd34ba90fbc044c4c9edefa39bf33e3cae27e6f3ed17f161b09fcc90da6fd2c646b5a394553df1ea752af48baa30efa6bb1d0f4d49519d02f4cf779324662da42048b895b0a064d9b012cdb67b5800c947676ba29ef4aa19bb394307ba5d8eb01ec5a230bb06344c435b218a04dfae65202e94bd557187dfb3782ed8e43194696c6706b4af925a471b9bb5f434d2d38157b65182a90713d2ab8db6f8118160c5459701aa58488b67d893a5715da31e847207b1ceee7c7ee83c1c465b8d27f86935395a58461530a59f2d0a19da788b34c77fac36d5f1721d9a12f9a314e4fa391872b4b94c94968d79e347b81e9074c4e4c61ea6323be47ff9a4b05165799b23782f304f1594ad661e83f7b49c35f99842ddb9ee9c9344093cce28cc231ccdbf0b49aed627bc24011fa40cc0616b657e6dde47a5560dfaf377fac7b84266251a5cddb24d080131e8dd38fafe1540e7d515320c0da042fe121cd05681f98ca6fdfeaa339e138f635121d8a677343cdc85dc0cc7b1b3f75ae256aec8f7f63b083df4ec143f4b8b7227555065f1b185526bb5c9b30a25225dd8260506e23058bca16b8042a42d4990a675c0bc5bd09897d38da96ee615113599553bc12697a3acdb837d6740e31795e1f56842f9c794eb00e4d3b4779e05ebff0d8cbd49e0244f95f03d55304c1201a128582e89f05e40be8c4e59c85ab2bab905010ee68121ad204ec9e5d5a5137c7f9eb6c02af0536b84f1f2704075775e4a975f14ab25dc750f5e003103f9d1030806065da3392473bf877bb3aeb0e9327f200ea7e81cb8420f426af36a7d9385ddfc48d1ab5b76d70e846790b38571e64ac8bfee41dab0e1b6084c58b4f727e594f1355a7894c43201ff79b29e0e570084a72a1a96191c04ba716c54022a212d9cb1d8e1a040017ce8a102545b51d9c80148a89bd7b7ba5da48603fe8b7cd448a58c24938938af23da12f5987e05b51f974b87545a1dc34190739b5e62f6acc9dfb58c2a9d1e81319181c7bc7b518ac3391b4f0849d1c40848b77b0bffb0b40a7469fa2eb690a74635472bdef8d194041ebda5b3ebd0a652c746b3d196a4321f744ea23b6b9007eaa77f22e95d4493a18059c33bbcf2411054e021e16fdbf9a09ad71e4d33230ff7f20c952c81adfefebe73cd7d70ae049f1b6d19c85ce904e3b25d3544541239b949bd49747d4df162bfefc7bae1899b41f83e785f13ceb159c99c930c220177f535b6eb1504a4dd7a40058b784da510a176cb2ad683796ef128419ab2aa6774439caa516b6faa3a400ed12d7df9b1dbf2b71ebb920ae6d5e5356917c1d425a8cef0ff6844586c7c4ca4f53bd1a462bba624b96467768723df4d2c5e8546051a903b6aa16c2f4e817401068159a0f902baab1a820e48ca6e470d094690a5e600a41b902449886f9eb996aded892d67dcc2608ed1a698c75b474c52bdd442bbe8c30056d09f53b5648308bb496f79bb0906cb4eb10f81316023a119931d661f7b57d460110c609b6c9e358c498696db45ca2c6c81d4250e4c134a83cb83de5b0a20b4dbb339e0daa77845c7a7e7780c7ba45c2e5cda35c99c6942169b85812c76fd021028a668d204cbac95075bf66ba45ef0d49cadd669f682a8d2f443b65743e671ba3efb510f8dbefaf75cf7411cf9cbd24af537c388fd2a937b3a0a8167f81bac99786936df2ea9984ee6fc112d47606d7109bec17d8403ed5284614025e2aa8efe84a071049058bb4762ad7caff92c438b1709d154541f03a58c3afab8faafae1bc936127b7443a1aac7ac8646e46a922623aa6d1aa7acaab0b9e6dd128689b79405542a8286eff1cfec566a190e935007c51ce0b1a5ddb3eb65285c221b8a9b320e3ff614dac3a7a2872e7285a51bc59fb7de3f021d321b29b1edea47a2eb2d5c0eb973cfe076b1745d6c3aa11c7fa698b044208a61db29817bf7f2d529173436ad43a2cd30572a5b87d553b45515d3a7361d89c83bdcd93eef8320e99cbb4a7555ac52edcd89702626e6ec788d21dd9b6b3dc27528b9de0671fcd47753f303d44f97bb960fd82f463bc120bce7120aa6e8e9c4f33b8b75453559e471d3348656a5e6462794f173b89b5a4705ca10456922c4e48dc157d287606bb4867ba389816247e58b29af3d76d46e7e594b399f5f42ef692e873010a173add5636fea6265571d1fec04e57f17856c5e6ae14916f7ca45caa18ecdaf1a69ed94cdee14f32a24fc260e722fc3d540bfcc548cc0fbcf11507c78780b2fe7068ca701e8c40a6ad29d3d69e58d124e039a8ed75f096541a7aa050dfdc907a606ac4dc812e08ec30bba0069c021c075a422e3342a6f77225fc2832d9e794ed33af5461c1382d91e206305a890ec969aae1d078ec96c5ea9e756ca1cf56297444a6b2bd69fc83084804df4f7be92762cdbfd00f07ac9f34344229a3388d98ed9569ae2051dd885471297a4ccbd0bc8000f5288e601e2e1c639ebfb927054e2f6004f88a6aeaf0034bdc599d23823c54b73aef1b625702ca7d7d1dac800aac4a064832f81ca28268142311d563a4e899f36cf05ce7e384c9f0f25dba49b7cfaf2a98be8cfc329b248cb5ba27d3ff26dc1ce1df55c5911bf8eb442afa9fcee388864fef4251b8d83bbb66a43be2a6b29151185bd309bedea6b45c284e68560c7bedd75729cf2420355fb85c716ba4db75cf1f7300825d81b937e6479aa53e28d16f863807e6d58e26163faf5ab7fa7fb32284b44ab4dc66003078acb9820837cd5c05500bc016a2cc0e1067c77ab72d8c2a74782a652811d060e488610457e4050bc5c040c2244b30c8659dde2f8f5f143786d6ac6d9ae164033289862be9e1147e523153ebfebfff52fe44f2c688ee1d8edb0f84c7ba730f0ecafa65cdfbec46e6b38feccaf2765f9ee8402ee7fd8766ce855dbeb9ab29abe2177a041f6a69a58cc463b93b0662e0319ecec32860e7604feacc8dcffdd0c23739719f149101f7429d679ba1dada615a9fd2546fb409370098d01b51193060a6e145e80b9439669d65a45b9cf49607ca121878ab8892e678db7a00100470005663eec06c735a4a90971f3c13e574c8d85b89479739e6bd1a39a58196324daedadf35e43aadd702d50b26c65b97615fed8a6b06410dae9ce4ee1b381dfd5eb704da40ed360127ecafaffd731c88be320587e68d344938249711ab6d2f2659566080540fa7eee375b1c46fc7b59eaf9e72bdda3d2b0615227ae7f8fd81cadf3fb5e78ee3bd63b89f8c3e54507fc0484ce90e95a1cdba3c0d1c8755db8026ce5afaf2ddb6c955f159ff9d8370d6c607a8a71b9c3833c0ab5a01231846aeb7db7072203ff033e99629a2cf9bbe16b3d7f447def7754e08579b3565694cfb5e9971d44c2b12c4c0f35b45fe8015fe0a33ea647284831aa355fd3cf9a0a2e36f82a790640136042c04cc1c5b5f251a1f65bc4a27d9714937d736b1da45acb81107d8b1c9120f098da71cd1abd2950c95b63268a941fb8b7a96eb39726925a3c3a75586a51f3dd2286a9f89c09738d86d3cb30e3b5855b4ac9ae77bb495c527752022fd841d75ab4e6fae425cddfa02a72d193b82e1117bb6675ae861a05d0dd2122d31ed03476cdfda1e366eea7ff248c181e7e912b679651abee4b9d4230b6280005dc2bed1870ed6266e3dda46cc5a026cd2d2b059179a3063954cbd248d9922c13b4f1837fa7af06d32eb23081112c9a2f68e8fbd0642622f15725e02d8bb75eb10bf2763d642bb6110c6982f2df647aab0c5a68a56d45dd058c74a5d8c1af00a4976039696019fe304744ac0de36df8fe76feabb194bfda1b24473788d595b75907f6f36888351858c7b7e7d77eeed255e290764d00c4b378f09df8be69d6fdb6f716795cf12736273149f9d4ab7175b14b585d94ba6d1c72c99003643c599ac120dc78a422819406e4f2f6e02c8c4563c6d9c00c3de215e8365bdfd5331695c86390ac6c447ff082d19b0767c13f60d695847decbd88f9e6dce1f13a7582348939b55161505d8f208fa5c43b49b950fe2aee80049645cb34119f0875250e17438e495fa7ee0fd1810a54d3c54d49c897ddb0dc5e066cf8b1169cbb31098c11e8e0ed3bc2516f46cc91c7d5a22a9149612278701789163794be1fbafc77fc0dda0ab3a6016b5746481c934aee95e1c2eaa5780f2cd17b92b57810fc3e7a8474d6f928dd3788f51bd87299ce66fa9dd6fc91268aa8d757564037dc6ed6cd06b6a9ef70b859060d347c5287e1463651585d8a6b742e5c38b00546f30fd1d4480da99e6c47e64a10a609e58ad9e60c8735c3910ebf9d2806625a264892a3187dbc20f0dde3b9793d5b3d3d422cdf4cb947e83570884dcb2f8370ff90fdfb9f2f3e96735d5d6c6fe08aa15dc6e856e4c9196306065f8873be23d6b5a2dce10742d8fd258aeae82887e07e12546c4c1fd3293dc141f1feaab30eed4650399fb62ad2f1043dd577eb74273bcbb7b3b3e16f9342e1419331a70db76b0b884192052262e247aab65339c25eccd2537de4db08c9b17bd20d7c4f3cab44b2f74912b916ed9b81ffca38c99a50987551cbb59f1e089808856f57bdc05b37bb4259669fe32415a3ff23a116850cec9a4a08e7404354852893824342449ac130f933583d8c7df222cc1dad6c00013381a950fc385ad0cf74976291f678581f2188855d1b7e59d3969cfd35bffea703f23e3e613925eb8a7b7ca1e38e15a0a681874e0d2eda835668e8252141681bd2b6b7de8686129554cc670f4c3c8e8fba4e48e3e97e86f16616dde53644461855a6be7cb114d191b63b00abea42d57a7a00085dd605865fbf72fd24431a8b5fcd4a7cbbe4011888082a1c80d31ae61c0a1cdd80c3cbc22c7dfd799c0eda250fdd4f529a878316bf8d511ae058f86065c02719861b8b611ec3c21631507d3582f02b9ec2c8363f77e1d684f35bbd7b295b89d3471329d463ae9dfcb2fbbcbd7cf55808ded95e0b537e4912079cc3376734dd01de097a39247a961a97f972e68ccd86a2966f9231b6daacc41128e3f613ed6f0edf9f6e9e57895f0decfc01aee812bd84199fca5d44297b02eed412bf44e0603807b9bffe2cbf9d980eba481b9f47b94419656589a3b0e736c445a34af6192d375a197639c0b2b0e343c6664e1c3356613534a6d3b63890d2c54805fdcde7fcf3fdd3051fb2f2cbb48b231be520aae821ceb1f63b81f7328785a4437cb9a039d9e3424f3b8cc01c8eabe07f217939ba81dcc474b97de6af752bbe466348ea71acb115341dfcfe7ce2796f26ada09972a08bfb7e64751c5f0f8961f425066a8299723c5601787c345b22862f3d21902dce3c572582a2f7a7f98abb43c0ad51e621c7ad0fcbc47b9049b5ee3c3301647b12c917011ec2bc41ed3be4f78752278c1f41c1c8354d67c2088156fd68ca9e9f8415841839d12404ccbaa65be0afe0c6c6aa6a1a6e7b1ba889d8fa3bcd8fff4df5005e439eb669560ba5c01f0591adefd9f558aef03cd36bb9742dcd4e2746bf5711ff5e0304eeb7b703db6d78c81a42a2695f3ed127fff75ae80b37c380bf265cec937c57bc32a3c16eaad7a3e26ca4b02866f1e6db60390b54283c5565ab030fd1db84266d095e2fe9bb2776375517220adca1afac8d2564f362ad4153d32b95b00feb8e1cadaf73652e976da1997cbcd36e033162582dbb80508e77be516a04c1cd9ac5a1a6885f500d480a39294af4ab869738b74e6ff665154881e3eaeb5b7b5385f895559bc30d13a399cb9fb9a73edb5e3c6958ca7b74758812f0941ab375b3b28fa9679085a27e68ba456e71acbc4b202bd5763ef97ecb90d3ae4451d0c94b721b07fa9b02397cf7914a34f6f99cfe3de06014fc0eb85debf757f9b221c912f0f3b8478f4ec6aa4124ab07ed974948a68c9fb2eac08416d2a2d04fe93d1da3c712fde710b88416fa13dd3d71cd50b04935a9063892ecb308057ce2c3c3fac013c02da0b2fa7241b418b8b7287e625b9628a8ce77f57fd5338eb71fa526358d6e60214510ff3106ef5ea0edafaa9017a5c173025c0c80eeaa42a83d9b51a8c0d979abc77f611cb57fd2fa9b8b3ebcbad5125e9904afedc92ff8486da7ce673cbaeedba9090053bfb02993c2951c117804b81d9b46dc5d9a27b09ac9549f9503dea1108bf823be8dade7ddc8664499b7735609c5402f1238fdb5e6b6cefad258d4c25efeb39c006eb2b0d349d9b1ba99bb20d5322b09b5e8a7644adf9eed51c68906b67b09c9e8f5612bbbf31fdd93cee9e9270f320cff8696a05603afe60b82d771f9cf247d87cf7f68dd3ebe62d135abf2397775861bac458c2f598dc213189e2146ea38a8fa25a2258080f0405056e3b4607144e1038af286d6b83d265411d105ccd2917079806b2ea12ac727b102b99131b20f07f6b9a6a6c1e69fb4baeecd6cc288e16445e28ba123409fb4322bbbbbb5bc1a36f05341d7bd0fe5b288e077ab2032c17d8158d112ad036619c58a085101800044bc30836b4a0c39195471e03620b5982c800231f90d1d20202aa30440d0fa638018c1f829071cae20338c06ca0e7c9008c88e0020cd28480156556898099e202218538617206180140828364a587b280071915ac31c52c81850ba0c08f8b43133158d044705ac44921010b388b5084a36358a8c9e2814d8a39e4cb1c3c4d1841c30b21be3821c9000e8942903ebe7037b60820e005387c79543002460146e85e6400c51860c0c8a27821c19597c21a494ce2c588251190e204376f780983421438760022801708c03149148a8700ba24a27a839b508013ba88e1022d508014821b5d24b0e5903c86125045971556a0c801bea8224897052011c204c08861136a411e09483db2880b421df8e1020249a45183500d523650850f52e808a5600ae203180b04840810860662d85085c0458f465a1a8f2f36970c94112308172e68e1b23941c00bbed4d001179e0d08b18118642eb82c09e2026530011a610b0aaa18e445800703b6483166001a3401c3c69693035645616c006f99205060043a89b0b1c51d808337583803b5421b63f0a1c5195486159260e2032fb304322b0c21b100278d2e452b9410e602814d97198218314005cad4f8e82033f6300012350a10822610c9212b20024929a80b13105801094f6e0812814a08fce8a10c27b41452451973d43183305a4000021c19c071e2005a72e0801d8608c0031c2d58b00451801f117c40cb012e50458b8e248c00f263013938a2c7940c006d218393104ae00e808e74c2b0430f36a2004909828c168048c18102b005ab4ad6841459ee20a38909c8c8f041962a24114300189214b2a4b41a7f10516695e56aa119e4844718c942b33af9d0b31158e46040cb0a151420606902901718a0481706c0b2070104103414f1c1f2240f2a52356014a9f0480d59128962e88b0a6a709e1600c95200158a08827e0445c14285163e1804860f22e951610416f8f083076dc47105110fa0507aa478ae8411460a1e2851c3bbd2433e81911e9298716505100440021b7805ae80f0820d4bdcc888f809241038051564b61f2f7820e10b0f4ce1c20f0d4aac304448aef153654c081099e282057e700e59038c1c3560b1924707ec6824016492ac5cc108921a7d4c91adacc4c8c02ae003175889b29b2492860b565801800e3e2c02c51506a47082385050c201a8f022050b20008c295f4e20a46022c0237224617fa420a5e4151b5974a832c91c4f1082070d3455c85cf18703aab401451524c0f8c0076c5208a8521ae2901f9674314295263c60f0144210426511d8870c5a70870854cc20c1054f1a40801ca80091821800998487192a425c2c12824843a960419490c364c6081f4290a624a5200a0ff87cc0c90c1b2cb8d2880f0e88c8a1244b1d47f8a8a00040ecf0e390201f03708001481f100285292c6001902123a2b8295a9c51440444c64d319a5f7ac0630a37a5278d24db070e6e4a07631889c0744e8a1d63a8114211ce49a9e24111080ace492952401255582b468238e7a4cc4c51c24a508267e20e1e3601e6e8d1e101873230a4f103112880416184131051d9b826a947958e3ec5246995b36997b6d32187fcf1070c9cbb5ee0dc65880671bc3185db563a49a8ede48365e7ae42ae4196bcc00d339c73fb94da27940ae9399df0f9eadd9802cb7183e55870ce0db9b1e39c1b3ae1b8b180218c953ab9e18686b0d5b3765e65d36e031187e5e15c525ead721b643c0085736d08d1060e4e958b70da6015b552dfc6d029d56ac3cad1a7da78ce3994aac56ae30387e5cc3aa55a803848868ce7f280551219a1ce461f59f524891575a2934b906d0b46f41b6662f56459cd029498d9c0a6091b21e0f0a0d268c53947e3b035f670ced1cc6025a417c463dab215a22d75a47194a6ed12522e2aa98a56a6d5ab4a45ad5409291721e5a2689465560d41b6950e7750d440726e5ba54aab679d4a45daaa3fd96f1409069cfbc93210d270e3a4caa5a9af7d133fb91ff3cfa7dcc67ee59b4e2e31fb7903dcc9e1e8210804b6950e1a8038e7b0283b18960d0d61ac2dab8c381a5da03184c60deb51583e038f339a70fc0ca33344d8329673ca3d697b295b0fffa267fd143deb878a8975fa8263c60a1a68a0c106fc59acd41bbd061a68b0c16a45658c162a5ba297540ff4f25bcad8a28c179cce9b585b36011d3d100fff815eb6d42913ad5ed5e2f22ccd48a8d229237f88654fc958198bb28569462c2d7a79a557825e50a89ebd9db2fc57d99cbb5ce0dcd502e7ae401c0e193f388743869073fc4bac272263c739d308fc94a44bac2722a3037e2a25e912d11880108da146690c0d38374612ce25adbe15c3183438e77ea7b4d4184363a0e09cdb927ecc184cdceac7acb4a352efda181d2ce2b6921878b84d0c339c134303ae24461362e06072ce89c18213c3c7f921c6029c73259686dac238c4394c63f12c256f5934dee282e5ecacb42a28549ef2289d37e027cd4b966559a9947ace4fa6d249954baa8d27c2d5a35079ca1679e0ef2cc372dea8b57a232a2b6db5ca1dfb9436c384cb5b16242a79d5eac9ab560f9729aa936913fa29a6fd42a82e2b1f8db70071eefae3628173571f7c3877eda1071758b8e871eed2a4e8217b44cf318273eecac10c1a56f8410f19cc38e72e114c008408661a198190736e469fa26889fc810421ceb94b03556011540031c858e7dc75c21161b4140144146338e7ae200a69409395cd8e16ceb9192c544e082408128270c43947630022e68001134d8c7102e79c920a2851e6a2239b0405e7dc05082346d01009137f58e75ccd13430070c2f4060c7c38e72e3a7424810b43c4a087733c2a558f269465cfcaab3d02b6652caf5a3d3b5bd2abc085868d2daa7021b827ae143cf862802aee8a801645380b759e1396a6ad66e09c732d687173945711ea3c27a9236da54d5b366561c8ceaabc31d396ad3cc009c03987e164c14b44a9d32a04e71ec1c14210552e7a92c70a5440c60c196274200549198b0c5c78e820b1be4584a9340df545830d74366c039dbcd27ac750f9b48dae172270b92c1716c0550042dc1d385798e1b6950e0be9efd058351707753827430cce4591074e9929ac604447a51a024092155b69f5aa13eb8be4693bb1f2b669ab9d8b30284348b968046c076b82948b4678120313d4e937f6048b61c8b9cb8e9954a6214367fbd48f537205094e947cd1214a69ab236cd3ad0d93a2a48893aab5b78675fe5b4b499810680860c36d9e70354d2ca288083433a8e942c52ea9c3b98b8e2500c09294ca5c73ee428173d7094ce0dc35c71654702d75f4404e0a2a58a9132a75f21206150bd071c15d3d478c0090150b8a86e9a2d66a63b9a52a69acd4a9c453bfb7e7465d90e9e2b28390341c8e14d725a5b2866aad747292c652793b77c9e1dc158773aec65d605e98d9c18dd9262d857dabc53f75a4e539d1fee2dc5502e72e38c840218a45b6950ecaf92009932b4b0bbf52615892be98a0b9eec089a2836da5b3df70ee72c3b9ab0de72e32ce5d6c381c28c8e04031c61ace5d247028a41cce23cfb94b0de7ae349c734bdcc582c1212e0fe7f470ce0d399c27ca6c2b1dcdffb4625d683cd10618ce396ce889249c633921376447089e980ecb6a7c6a786a3257036b1ee084104bf4c0a98015e75cc44ac0545995f7b762785eda6ff4644b69eec74a99102e9d7ad48c0c383040720738430533542803f51b166507e3a7a22b06e72ed5089cbbc870ee1ae312031226227126d669959f6c2aedc9a679cf4731a7f7bdac37ca39f5ab4fe78f3c4afdaed5b13efc64b3b6d6ea89739798309cbb44e0dc05066bcb58a48812055bb5f650132663348c8626252c676312011ab09ca41f534ad2a5920e0d150f96c0e36609289c735b683a58628c69b37211cfcf7f6b956228e24a20e2747a7094004309241c25ae4e1288e8f0d7492ce1743e635bf676f2e9a982c41c487881c4904bb55698c63a1d6d27ad42e2c639773a620ee7748e9842033ac20841dca6c29250384630e19c6bad362cb3b28f69cb2623668a08a3080914c18bf08088459c4e369d72f8d6a3e32e2692b88870170d1498c361391ad075846944ee2aba58a000151f1d9edf94654361b07f2e98ce50d736d683e97c4ac3727cb4292c9c88fe289b5a47a9df56b9e8080bcab2c50aa6a3933a611bb69d8cf2a6356ccb479b66ca1aab6b5866e5476556ce2a9f4c27d33eadbee84daa531196c50c0d8529d2b80c61db09b56daf65565e9d562c314343618e3ed535274919854ab58a8a30d5866598ced18ba1e2a3654a969550a83f0a23264c0e2aa7884e1bc6f39bb2138d687ba313514ad3366cebc174b8c6517fea3fd8a62528490a7fd6499f4cda2a88e82445d384581a104b03d280fcb8407079c0b9eb0be7ae0e3877797171c0b96b03ce5d5c38776de1dca585735716ce5d585c1970eebac2b9cb8aeb02ce5d55387751e1dc3585739714ce5d1670ee8ac2b90b0ae7ae279cbb2ae0dce584735713d712ce5d4a387725e1dc858473d711ceb91a7781c9418e1cb67043181339cc3025cb7cb88c301a1a72ce0a0e3c389d2938b0e04c5bde71775be93cc99995b94a7562dd70c5864534d3d1d029ab72fe3b8699f62967889f72d07f159d6d539d4e2855511e1a5215b5344694a371c17486542796b69d567f7ad306a589091814ac04cc04ecbf974e4cb02898eac42ab11e05a589eac462b2517997a2b01ef5e40996c3da5aaba1a1214c477562692ca789eac4c2b4147f195619752a4ab5564e58a9bc8786b0ccfac1887e85a54e9aeac4c2f2ea5919c5d243ffbd343494c43aadb4d5497380eac472c010eb846a15f5602438378301230038a45c244324ce61440e47861970645840121ecee9f0d513f1efd1f9558be8d45fa75aab8d0996a44ac29c0e4a37d14cf81b655393cc0429044843480c3822e39cce3634b4a54e598654da8a0f0da534ec8dfe7d8e8258694c30ada77ef8a9c4539ae69cf7001d3dd076f44046641ceb937c7e30a32e8c8a706e3bfa8e699a90d19073262323ccb9561987a5720b8f1618ae4bab09e7b62b85961aade9dc3666958b4c3bf51a4bb5561814218c0743ca4538ad1b879db1b14efb8d54b9a8a4f346272c6908dbaa603aac2d66082967797e12c27474b094766a929373da8ebe8aa609756169405bcd7d9765fb8db28cb3b6926afb95b64b2c8de731284da5e3450bd2587fa49d8e522cd66975b47aa3d409cba68d6dcf533d2b0d90a986546120aa5831a8786a911f4d0da761c0623bd8098bb2833d4c43722e624527210dcb368d34550929170159e1ab0fea5ab49efac93cf5443d9b107fd696b1742d9ad04aabb2d2aa742d9b26d4b5acb42a41dbc64819452be744489db0242d55d481eb4111826aa20913548f73aec7e1a086506f74da9ea73e890986e54769139331637ed019c3c439a7b3d28e360d05c31d4e67a5ad560f251f710e83c90d6d5dfb150e0c5660703a39f968d3502733b05313eea412819f829c3b3d6742c43922131e48cfb38c87e7678748843e4757a24fa0d77e83c74ff142fc7e01f03ef804380efc6e40b61c5b8cfddb89ce438ff1290d3bfa1447697028682808c39e755a31d13284e50c051d7d0a1b0272c2515a06849980056531b14e473b95b4b14848fd866af55fe59d94ead1113314067b130b8525693de4244b01e807684bcf17ec013aa76d68c867d505754a612f05d32972a2a33a9948d007c885642cb2157985a1190ce53134c5f78ce916174c2729a5939453d84ac33e2963a921009418291552f240a9a8a44b2894b2170071ae6bc9c14ad8b012a4f86c48b9282848877f09d916a4d335beca44bfc272727c5e70624c20c602625ecc1331970b65b8a0840b605cc809f382305d84b9218c5098135a38a485385a28228b94ae056e51b66849d25ba85811faa1923d4cfa31a52c1bda4e4351782212aaa7f24a37d1693214b11d8c093634a4a3755ac801e3089842c02c010605e639e7b64d8a0f6602d664a849168811a54e4143435986302d3a382c84f0c5055ff2f822019c2f53bef07c3180973fbc6c81e385e5e58b17201c2f17165da6e862054728112127848226c1e12207971ab830d95287739b74d26408060d31c1865027d311f6298dc720265a86304c4ad7c204db24e6046b32d4040e6139434db260d9d096658849c49c6099141fcc490c8241444e9c6469e2e4bf3b61820d49198a419809180cc24cc0b2602660529c3c4067d5526143138b12056bc224cbba567a194edb10cfbfcab27c32c2a60c6126e8701374569bbfd1291f61afbf6fac2defdf52ad2da59d744e613c9559a91696a43996b369a8293a5bc6bab6a9506ffaa253131898a0f2a6613a4627d60ada0a7333c29a30d129b134a067695eea931e1e2f451a2b954d41259ca01c248330a7d38409d68409861d3d9096325ae670271c2d5338a7c5e458a9dfbfc25824a4b45871cee9e068c19cd3e18fda292d4b74369e2c3bfa14901c4e4767e8484b0d0d41cc046c1bda9ce4e77f846d3a5fb00d633d1713d1c98aa609f1e71ca565052814ea734b8569dbea9d73019826d6e9e88f5a184f3dc622c13947c5b94b03983ae778aca4b4d3d642edd44fd1b37e5428b388736e89c351c110419c7341597a84a864f911c2d2e3650b1521a01f2a423d3e2ab8a1c6081c172d403d405cb46c99f29385cb0f162c3f5936ab55d25825fea5eda4c2112a04e19cc3d293e5670a159f2d5452a02204f493223a6d26163f1d9558279dd24edb69ff4aa5421815ba389f9f2e5d5200fad922c4a554a469289dd25445da7e5512abb4bf28a75e952454d44a3dc69f8828b3522dac6b49a95c74a58a2b4d1c31c40fce391b877365071a9c73252b42290051c152f2a1c2c24f15303d5bb6f494a808819142058b942e5a7c847ab460a932ab10d04f9442403f403d54b068d12225ca95faae38b9d2c439a7c4e15c79c015047ce9d9529a2d60f1290995b8945af8c122a4658b142d2d6009fa6921053041413d405c7ca870e142654b50162d5380bab072892707cbd9e1113ad280322bfb44d985affe8452fd5761213dd0d103b1901e88d5d2a22a5a5979ae4d616d19cbef544b4ba57aba6009eaf92d9b82a8f0fc567cbee8b40a4a3d960d85ea316dd94a964d432565d43f3fad566fa44555b459f0f228d56925a409f1201f562a1b3deab7f0942665ca98552e5a3d2b7f497a1578cf736d8a97293efc675375d91eb5535d58cf859f7cb62e48cf533fa996f63385b569563607836b83324e111b1c1f2db494735711ce5d445c4308e1ae04e04c01645be9fc4efdb67d89a77ecccebaf4a7152b7532ed5ce4c45d409111dccc0070181972fc63c0a094868e72ea8bb42c592674a4a5a4a821c503525c9072b3829e377a66e8a982422228e4e19cd3d11962fd565a3deac7645696f193cf10d63526182c6af29af55c525a86809860433f4343493a67534ee742264081e5dc86ca2716cf8e1c283449426dda49e7e455ab075b6955309446a14e475b6b4bfd6f9a6963ab960606d3d95659a5ca2aac8412b6d3d14bc174b613584f74f2c1c66c5968cc96593c2ce0f05cc7930017258d47a1f214cea3e0e0a2b04e1f389c283b82389c9d0f38a7c3dab2ea9442ea4d47a62d5b596941a1f2941d244d0a0fcf4ec4d959e274c40c4111c4391d2860b88ca570a014c171a04c1c28374cc40c85d1c1f2965919cb5ae0329684da5a5a51524a4bf5709d212a403f587c7aa8f8947cb6f458c9b2216cdb925279cc9633a693d2b0a4cff9c1585b0e4afd086940bfe5fa800ce71c0fcf6dedecf7723aad543c3c5926bdf0d5afb4bbc4cee1b4225b84b32aa7936a11a1606f9c733a3dd50cd649d71faa15a7b3915013e09c73097038b48c0e7f228c82e15c0f1d72ce39550f4d803611e9c19966ecdfb02d9b260ece4d2b3ab28c63c253391fa9241d5cf8d6855399c2d28082a48b78e044331c6a951fd334a13845346d480f145170ceb1369c0811718e3f4b4b413c9c738ea501c126768ba7b495c682414e87afb4de73168298734ea7a37efb94069d7b73e03cd3964daf09e79c234a9db607f4ac3c91e489069c4e0ec67f7b62724ee7c94d62e994c9427838e77074cc70cee9680047e7071d9373ce4b19273a4f9c738e4727e52295b60a4a3daac48393a3470e0772c2e408c004439c73571c8e095598f026c0121c29418a12b038e77486b8a0f229a356da4aaba2818eb67a193458697d439d72676929564b7f4ac3f817159d9c24a192504dec686284732edba6a1b26cc5ca1713f6e5a8e3c5fd555831ffd57359b1b864d9127df22875ac1cbfc9ebc637cba544a790d23737c6135ebb695129f5a82c4b52693bcb78c4088501ba92e0dbca6efb4f4effddcff34262db6d7f5b4d6d9cf2e69a4d7b275e47c8ac278f7442bba7ad30f220f19f9d274ae52d59f644a9bcdab97219515f8efa66fc1b52fdf5e35544d512437befa33d774d3b1152ce1cdfeb4f25e5f23e051ed5993f29e563d9398ea6d276cab22124b68fe22ef77b7ae14f539665595e11a57009c1e9cbf5caad279d1ae2b7626d3bf00ae2763961bef05a89d234bd33af09e48cf7cfbbad7cf521bd17107a634da9b65be7ac7fd656e9b75556c1eb87cfb8432e2185366e8bb329cbb28cf55cece5039794f68f8fcf89f5d3f451aa9610be2400ff6bbe50db08277f1af7609f57b83be6fb6a1c7bbf7888f8d639218c58cad8f1bc76c89a7eb73af2bfb6de2c4d3a970eb76b38a57cfceedae195570e6fe67d7fd68d778e94465396651997ecc2414618a5b655d3bc71e6bd87e7202e3774897794d44aacf9c65bdb405fe33c638c15535c29aca1bedf955efbb05e2d213465192fd1f0fae32a73841176be739c61d3d99fddd3daaf11db6acab2db59ad2cdb58ab375a411974c73c67fe0f4329dfb592f4735adc2185b6ca3cabcd3214ea3715a457a14ed6f66d0dbfd7dc65c5b7a55f8523ad9fdba7986eccf7ceb14b9669ab9721a5a576808cf6d307e3d419d7dd9a16ee2e31ef91539a1f9bb28ca75adaaa9494652c955662ed8cf4a52c6b6da715110bac9ce95768b1bd31c2fe2c0a9bcefc61f912dad721cd2fca6a42aa31fc9eef6b9ee391a6ba31d0bc61cf39db0a2bb7b99ab26c639d884efc4da428894e52b22c53c5a723af16f3bab3e5369ab2ecc1234d5542b58ab22ccbb24cc371d20c2b8c3bcffd204e3d4ba18d715e7df383b7f7ecf81469783597593ec452bffd22eacd87677d13de8dfb7c94a8a5df27023b6fccd7f8e4867177db6fdc6fcab292858142bcb9c51ac6beb7e4109e2a95514b4bedcbb13fce4d599663da31c7fd8fe1d5d3ce78a51075fee894f5e6c793e28d4fe87dcb486fcf73d3d7f4a529cb58ab92cfdb8eaf8edf27d52fd67bca1de979aa87d33b25fe6a9fc6b87f7253964dd9924af8b4d6fcdeb5196b5396a1f28ae8b38a6a9977ed6f57aa7fde3c9f29cb666d955845fd497e0badfea7cfbe7e69eda62cdbead0a39ce31afb8e6f4f3ea529cb7852aa27cb925259680796beeb18e1db5c218f74565396f1ac9ef5b33325cbf89f54daceb26df52c55e639cb56cf3a4560e77746a94a3ccb562c95f6024f9d8e52ad128e1829ef9d54d219f1de3b73935642a1f2ceb2df292da92a5996651b7621fe738cf543fb975319251026c6d87795fc5fd67d650bf0d62ef5ee176eda29e4170e60f4d33c35bdfdf27cbbb433b080b9ed76dab83ff28ef367d9172aa7a46fa9d4f476fbeaacad0da52a3a0979d1d36e8e2bc7d2e287639767ef8c114f7cededbc6a53961d7d2a28cb4c2c5614aa1aea9de17d6aa7bc129b78f88fd653a7120d5cf2435c71e63cbf9ca9965b7a7fafbf0735d65463cb4d599659999754797594651beac46a4559e1ff450d75fd3a31cfffa62ccb321e2a59b6b35d4a629d7e767850d7dd6a09abecf3bd3e678e16ade7be16dfa7e5fbadab0ed07c4fdf8a297ef3ca7c7f9f5899b539c9b2ffe9c7f3ee3b3f561e2796483be49b7619edd3db39d7aa0a9abf77398cfbfdc76931d7aef49b2f8dff62af9ce67e737eb47e70d2df74d39b257c5396e95889f9490b6fc635eb8da193142887dbcacbabd492be2655b4c47267fbb28671ef3c573a5426c510da4de9cb5d7295b6e2d467460e1fd7ddf593d5be6bca3294aae854da6fb4caa64d4ee14fcbd757726b398e506b2c2ba5530c2be5ffa0ce13e26acab206f4607bf1cc51e23931af3a9b4c5b4421d7ac35be0f579a757ddc94659fd250bb947aa32f6945da4a9565f584dc35ef9f258edccea7b277add4c3f3e6d6fc5f42c9b1ec2ff344e957df8df7db1262fd7637f1448952159d76b2aca89502dac1387ec6503e6defadd29ab2ac946553a0502c3fff8655c6c7af5653961d3d20d3384a6bf3bfe56f6bfa263ce94fc9a7ad7cde893f9b36945b3bb71bdf0bb18c54e768ca329ecaa5375a7d9601d90da17d32bfba37fc18b129cb56acad94653c5f3056ab28023b59edfae22a2de4d6c63e2d3465d991b622d2a1ef67c7f33e1e6bbcd53e539699b696aab4d27a29cb787a728ef216146691a62d91f6e5fbbbee5e25af3d4a5396b1565122e7587ebc374f98aba5da946512c64cbbc676468a33cf189ab28c55d44b44a9d3987d4aadb4ede4590aff464d1f7dffaf4a5396954a47799565f389edbdce59e1ddb06a5ead29cb569fd2b976d37e9fd56fde3a753465d9c6ffb712eb89b28c07dbf2962c2b15693c95575966dab229ef6c4e8a34ad44b42a9596e4941460c2aa84ad95585b6b552a09a0890398c09286fa80042c020e80802cbd1148780013073011210723a1012584f018506ab2001240d83e5080023e28210130ff4a010840fa540807603dd10706809b07b05462528078eabf5239800020e02ce00612a54e44441aaa010380101000ff1202c0a48312091cc00d4a0fd020f22fadde48dbbf2a95e0984aa36aff56b24b00b000259dd52ab152a795cae64618420d0368b2099b290ae182a55ff5120be917e03800c1122fe6b8be28a76a96789182110650b7932a77706161e2c0915942901ee7dccc12e76600e0dc8c12e7666c9c9ba99999716ee6726e06ce5d93387749e2dc15c92503e7ae479cbbca387739e2dcd588731723ce5d8b387729e2dc1503874346120ee70564427041c18123a3041c3dce46894d500f2144381c4236e0700839644b032280002cc81a0e47103d1cce204f1cce2030389c41807038837ce170064981c319a48cc32164000e8790ea7008d13cd0a10987a303061c8e0e1f70383a9ce17074d8c3e1e850c6e1e83089c3d98100371be074c0c10096e00cc09120473477e3880deec69121dc8d234ab81b47ae70378e74e16e1c21c3dd381287bb71840f77e34821eec61145dc8d2393b89b3201703765427037659cdc9489e26eca58713765c0b89b32dddd9451b99b3233b89b3242dc94e9220ee71c071a14600c45dccd1893b81b320ce06ec808c1dd90f1dc0d1953a4f41480001be004e5e170820e71378e94dc4d19ea70569871382b78e0705610c1dd9429c3dd9491c2e1ac608273ae004e01516071375194dc4d1432b89b2892700db831c00342c031000e013808c04d9687bb8172b91b2898bb8182dd0d941f770385057703a5c8dd40a9c1dd4099c2dd4009c3dd40c1c3dd4021c4dd4081c4ddec0cc0ddec8ce06e76aeecc0e06e766a70373b44b89b1d29dccd4e16ee66e703ee668704ee66670e77b36388bbd979c4031044a8c3c7ddd4d182bbd909e36eea48b99b3a8070377548e16eea30c3390702020eb0448ebb59220577b34490bb5982c8dd2c8183bb59620925576ce16eaef880bbb9420ce7dc010ab08173372b30dccd15641cce2a0e87b36281c35931e270b6cbe16c380e6703c1e16c0e70385bf4c07570938506879385078793a509879305030e274b170e270b190e274b090ee03a0064c8dd00b2b91b408070378038e16e00b1620996e27030188783f30230e70470e31c00963847c3030bdc920ef660b99b3d4e70377be0e06ef6f8c1ddeca184bbd9830ae75c070550800e3cb81b1d8a70373a48e16e74e880bbd1410e77a3c320eebadc123a7e502862a91074cae3a2901361a4090238d9630a2601f02268030aa08214c0eae087ec91254fd880a20c95810665944c823996201b1c71050b378cac980ca049162b385594e04683064c1c36a064bc2522a86141831354c08a063b28000ce7ae1a905098910122385c5cfc808893400ace819952841e4e4c710221aa8b061958b82ecbcab5416142238873ae0127f8100129ce861f0270030166e625806be6912989141680c2392884703e381f80e0a1c739d7430f2b9e009cb29c9053a91306256210c0528f7a581411b0d4a328ce0c0471cea8a7e7c259244a231c705c38c002529c28c205392f2738e71480723893b8f028ad4f4b7c96f8b48aae17c0e052c1350619db8a071e4c95771a1775579548a67b50073ad96f8442e5223b96d49800071c48c070a9a48daf565486b0d46dedf7b29d543ddb4995a36c11a5544527d52674a44d214306466e5be9b072d0b63dd752633cd285cb927fc5da5c0a8e876ba9d38a15c60c1656263a19e5a14f694043d8501326aabc3a4ab5b28cf55cb22c7b95160d08071a6668c405db4a676365d6965560892b053ff010c3af38ea64da46cfda5227952674bdd67334d040030d3648652998ce182c89b53af11ee72e3cae02286288ce963ae5958f1820f0c202bf3dd99e88ff49830d529ab6a95239a565548f73971d548cb0c4a64b0d29177272a2f044c19a20f11313567f2cd9969516567f2c188661291766c090f8a9f444fc4b63765eb11449030d9b2f7888c2d31f65b343941dcc042cf5a85289a3b42d96a8f1a2840ed6c6b12851b0bdda66b2d49ce01016b04346700ecb9e6ba956ea8398f101624ea260269d27e2afa5c008fd4ce909ea9982ed6048fc7419bd40906da593b462a5fe89ca416086119c33e205062875d156df429214a3938f06f4271f8e6a695f8e34d44b99c2fa6deb7919b45515fea92eac53d109cbea9332160d480c95167eb8947ca8f868990244a5b445cb962d544a54b074f1d192a5c4424f96bcf14d850b95add2a81d09fd988c92c2d252299ea56cd97a1ed5e25a161e220d95d24ecf6a92945598c6c2744efdb05aab164b6326d6eaa4b18ca5369d14aab5e98cd2d91eca4c00700461e5d5e715154a29a594ce39e79c73ce29a594524a29658c31c618638c104208218410bef8e28b2fbef8e28b2fbef822c618638c31c6f7de7befbdf75a6badb5d65a5b6badb5d65a2ba594524a29a573ce39e79c734a29a594524a19638c31c6182384104208e17befbdf7de7b10638c31c618e37befbdf7de7badb5d65a6badadb5d65a6bad95524a29a594d239e79c73ce39a594524a29a58c31c618638c1142082184103e88afad74ca08b314fd80c1e163cab6d2c9ab7fb24f4ff66ae33f9f3a11a5a85041e5e732651554f4ac9f4f69405fa471e160468395a67bb05636213d7625e2dc858873d721ae0913e72e314928d6fe95734e0377e470f4b871db4a274997b62dab664e9d8a4eabbd9df8b6e5234cb3b26556f6a9c27f0b2ab372157ed2bc4c2e86d6bcf1fd62a6982835962a69b5a39cb5b5b134d4c6d2505c4a2a55ce320c298dab8d87bf4a755ab1b6ac68cb473b28d449af3e0885ba11b66e845d964481a3820e38976525d5b6820838e7b6950e2b75d25425fe48a73e05b55a51d91a0ad533000104a0030e36a0b96286672602971c6f5c755c6b78e0b2c3b9a30b977f75718004e72e2daa78e26202c78e489cdb5676d0e150a8560acb5e95c4b2030b2c7b55120be32754364a9db04f9d50182b6337b0000e457a2884cc14376c31430376b660c91b8cc804e2c6038a687283946c85940e2908e386009400022035441461c31d427f2c608e950a6ca8220b2d575008e3870d457aa890854382c6060bc8ce0fae05850d340b90043be1481735c4910419179a0881a586268e94742142940d6ad8478c3143014c40a9e149d016bd8844cad0f04800bc80b12dc2060d6a6ca0c51a699470692862091063e41092010d603220a54a027c688486117a88c302322829cd80c8180ebc80e46299210c1f3e763061882a33f440d3821920a29c608620390aa119132b9841012da0228223605e9021901e6a40c849e10619bcb0958607a05e86198298c0d0e54293a18a06507070f245081970a688a44f600b55521e938d0d8e64c892744511524039824c94a45500b03cd1c0143069c78f02dcc0923a240100042970b8d0c88574021aa8eaca0b44485120f1c317593c2b9088b0c89a08290206527c0119116ed078e468921f14a60b2ce0c21199cc89340cb1a18b2324b407509011237054a2117202c90eaa2326721805f1048a168c1449810955085183018cca38830f1864c86218014114080cc8003d3112e212020b53f008618449b1810b2c93d8d1228446123f3c7023919607e49804e86889192d1cae780e8e28226a5db9001d7c047180839601b4e871c356c60e8b051d7811d198c1666991420e8498a0090bb05a2788a30b4b8604b07a5a31e8d108190f581c1cb28025be5c2181cd0e16fed022694bcd46451f2070001bac39365405c8a85909e5b0553fde1c618c4ab0cd000db1d150e26055822b33142203a8c58a89541b4024b108102b5d0600a898d2081d2b2793ac9e9022112e313832091a07f860883c624823ce3d64b8e38f1828008230243102cc98185838e209ecf1c04b0c0fd00004ce707ae0a80ed9b427661283a844d024020648230b21150f58213e50fc304515a4802e73d480e5507d90c618389071e1060d1028962841d101e0d0baa8814a0c2310208a26835ef201253b24a15101212b610c1446da8d1f49c0608c1a72522ba811a10619643e525640e1022620c9e186540c57b6f01109911329285984209dac88482911c10b34268046074526f00005289438544550081d408c23fe684151c7428b36a46829a4288ae0257b627b004a9299071451060c8b62630e82c21a8fac813aa288302a70d930014a8c07c4a441810e74409190860d958328748c22336fbca0f112c68c00863d24b9414916637ee872038c63c418c3e5a88945987879631a00813324700522586010a490ebf630c406307c71c8746231b004861b02c1ac8051b2c1f0c3c3072890610c11307870da8014325e3a38f5211484690a1f3b4e59607c04a004592227960b1270c71dba85130a60f4b1c516401c386d7006910c5c5cf1c25407510f909051470b262a1a60013d898f15d39877c34a9205c0440b5992e346127798ae1f50f065c9510188e01040088964608442889688a1032d18c2002088f22214e0c003aed0419413460d81d8f848a03702091384c010c5ed68683e602046178ff42160980120a51c88e85f7e8003041d88a383ee0014d85186080ea23c0c1a3082166c40ca0fc6076f00f88820bf430a3cdc2cc286210f84070a8084360f3e015cb4f09842c414fe07198ef4513ba89c034b80e963f4e1852751f160cbfb0289fbd8292c45d05883dfe450479a98a4d829e8c30b0b5250986463e00ba42a4f10c5ad220289311ce8e18c9dddb0854a2055c8b16da2062c218258a1e760844be9108c07fd8403429841208e0efd1e08c4091e1c161a8ae14186399c0f1912322870e48bd9415e239b9243840b766423c850324ea80129bbb001a1f306248be408a0410704b448d2188a0135e2010c1333436438e04bc6249128867c00da42c70712bc18da62859720a4d8b2c81003eaf842e58d10bca0e4023df818a3412991d2170808e490ec0b124a360871810488296455b2a2d221099031c2940a3004d5095a82032ff061a5cb015cf0e58617b050920592080800c70b2c9b2e4e865660c70b28d4f88c9085062d5ed0608a22257e640288a103872ff7030a688999a26fe144cc06d4100343943eac2801489198394916257b047d11e3de509d40852dc90537f850002104d812c605256eb02246cf0a687021c7299488e3e7b960020fd3017f68204b9846685c100404589430674071858b1a2d60228c104ea68800ca064284f1320128927802e502611cb0a486292c44a2430b860496767be5d33d395268dad8796e5e2b8517c297f9d290a17cef99dfc6befbbf4ebbd0b00133d791c6be773465194fce13346b4c1a9fd4fcf24767b4184993a2e92f3424e83c5e1a67a4fadada2d349d68d4a00feabf587378dfe65467194f0c5450f9c45ae5a02c5315ed1668d2f879b77e7cdb87f79ef7bb541a346adc39f67ae3dc3973b8cf8015dada778e5bd33c79569fca8f9ac2da5a3e4f63468d35d3f7287cdd4efdb08c5eed836fc77b7b97fba518a1303b566846c0a97e55dafaf0a9e656ef14414346b4d9eabbafee37dfdf7c8c7ee385115edd338eb01486460c6eefeb7f63e5bc4e2ba529cb4a6164abf18b50f3baf9bd118a00d21d25e65acb6b024356f86eef965edc778ce1b7124f3d149a10ccfa349613fece7c4f490302ca1f9e9f27dd5bc62d9f179a0fec4e9f94f865c6fbce7ba5d078e07bcc74effd6ac6345f70096baefb76593b85f7760067c9a9cd566adae5b3db0bacf7a5f17ec475f21bdf9465a549d305ac55eb5b29a79dea7d2307228eba52fb14521b6729cb22cd066c7c96e73b75a6b166fecf25b3b24f96ad5ca0e142cfcd61b7fbbfeefa204adb25ad0acd16776bfa91436835a493531e9e7f0bb66dd9e942a345aeb9db2c39d4333eefd09495a8d0648173cc1f37d4366e6c1fdf81068b68b9bc9b3f1eb38ebae89451bba4f11568342035aeb1c24a21c492c2479301dd33e5714269efbd90f62b3e6f3db7bcefe984afe1987f5596f16cd959ad7e7b9f2c7b9e653c3456bcde11f2577fbfc51a725396a19e6b45a594b6c1f07cf55b141a0cec2979bc1c62b84d5996b733682e90a58cb1624cb7c43af39c653c3455486867a6f0ce6da9989c3eb472feb658639a2924857a62cae5d6baef2a69a4d017438b5f4318b396f95e3bd05800c7ce618db3cbf95ac3491345bd9dd397e177ad1fd79a068afa208479e74d29cd5bbfcb079a27648eb2cf3a6de518561ee18aa6027a73be2b952ff1cc4f662764b597cfc9e9cdf1e18c4bacdfb08cd91aca04344dbc4e279478468831ee5f4d5996653c5f6898d838ca9769beafda5def3665190fcd12ba4f3d799796e78c7587a6a2d67eee854689baebd35c4b9ebb7d4a930484f9e509abeed972dd651034483c6af39b96d3fa60d4591f11ff72a8dfcdf2bddc329bb2ac94b46275a13182ce18bbd66f465a44e712c6cdb59df1e1c93111b5cf38399f56c76be3a3a62ca3a1008794c3db779597cb77a9a019a2f739f9a6556fc96f8c50881b27bd3d5f6db7e4d68ae1c989b215e68826885ca37eefe5fa36c71bbe09ec0cbf62fadc3e7b31b6344070fd15c7b76fb450efb73c403bd713343ffc9375cbaf35e29f14f3932a979e954b4d687cd876be8df2fbd45a772b9b30d9793412d85d5378dfeb2e7bfeb7343de4cf575a0bdfd2f0501faeb55b0d7bddf6f50d03cd0e8fe67eb5c554d6be65378246074ce3ad77633b31b4b63e4d0e5772fd905f7bade493ea148476be85ca463438bc7e29e7d8e6187b8ebdcfc03e3b2ba4af717f79e19ca447fa3d567db59c93ca6dea92d292653392dc5775c7f74a0e2bac72053391d4fbe49e4f1f8ed9be8b2189ba6229299478433ef19341ce19e7caf97bb4eab81f91efcd38ed93396f9dad2ef3647f14d7bc65ec734bf99343c48c235cf30e75a65acaaeff6d23bc635df59472c6bb79c48c7448abdc3ccb8bed83b12fa2f38537f77cad7c2c27572477aa65fe5cb99c1deb1e836721a6fdf6b92fd7b526f2f89477f358f7d5fa2172a18dff5e774c7397af9bb2ec109aadbcb36e18effbf710061aeafbec7f8f3dc3fdfe054f5e3e37dd76c76b79bf86480965cc575efbb8dcf227a7ca4c21d2ce97f71f9775bef73a21b343faf7c60e9fbc1af3e783e87fb9a596d34e7b35efa62c53f178991104ee4be3ccd55a1bfb77ea026ef7bffef3c60c69bfdf02fcf8fbf7fea09eb3973113c89c75631ae5959dee7fdb946580e057eda5b7438e758718ff9123a73547faecfe8f5de7921f7cda8c67979a0593bf4d37c4fd655e6f96f14099e943ea2839e59ac22de77ecf946543337cf46b7b8d97436b77e54f9bb2aca467f6a8f0f19ed86a1ef3bfdd2d951e96be48ebebcfc6f8ba4753969554457b47553425e8fa61260f8d9f63dbb9e52f5fbef30a249493e64af1bdfdeafa54d075ddff784b0afbe3974d59c6b372612605b4c27a29dcbff3b675463c22fe1a31add852785f0a33774c2a69867446f894e2f84c59d63363c7e4ff627ecbef9e355759c7ad1b6e6ae3c6fc4aacbb29cbe8e09bc797a3d4baeab7ef9bb2ec8db4a22933288074f24c5fd7d03e29773465d909ac7cb267bd2186f5af096c7cf175b539ffb69bbe1666e678fbde879562bce37bb49bb24c8e2d71ddf1defd92578ccaa538eabe15565b759690df1d4bc031eff9e3c6cf6abc8166e0d8334b8961b63d9ab2acf506ee9ff38513cad9e3cdd3946528ccb8016bce1abe07dfc5fbc66bca32de06bf4fefbc7aef4befffcc9099574b4b21ffa71946fda62ca332c306cf75cfdff3bedb25afd394655266d6c8fae257f3b5b06aabfb3505cd9080eb48619df5e1f79396569851e35a88f7aef5f18cf794d3946569e41bf5ae316fa9a184399bb2ac6465060d0d2bb473c297317dfbb329cb9ea519edcc9c6161962f5fef1a2fc7769bb26cc68c1da58e107eed5ac78fda946559c673c24c19135bbe759774677b1fefa692c6f9cc08ac8515f2b79f7d336474fbfd31be57da0df1ee63d49e5fed8fc70deb9676cc8831adfcc86db651d668a30ca33f951547a829dcbd676ecab24fda998e19113caffc622d3b7d3cf6ddaf2166c098f9738d984348bbedbd9a36a49c252789a52aa292d292c35327159256df5a212727e955c8c9d9d95e95341382cde7ff8db0ca7af9d61b04b9ee092dccd7767e298e1fc8776eabfffe9e96c36a55b9a8b4d25c98f1c0d4efedcd799fb577cebfb4d24a3c3b44335fd86dabd6f0f6a7e5dbcd3ba0f95b8e75af59d20da1346559d28fc966bcd819c7f7ee5729258f5986ca5766ba90745afe36a4f4b9a474a73870bbec7d568aa9e4bd5a3e81990d3c96335ebdebfcfae4ada62c0333c305cd78774cff75f8a6e43887ff64d91582992d1e7f115e0cfbb5b6632e6198d1e2754b1fa7f63ed61af23a9385c616676c6f7e8979aedb9465fc5f98c1624b2bb9ce4f35e5b1d3986546036f4bc871afbbe219fbd4a62cd399c9809c54e3ca2deff6e1baa729cb7898b9e2516aaffe57a9fcfe3a5a51698f99cecfb662d8e59dc1c08eb24fbcadcc14677da1d0057aecff95d62aebfda8b929cb9ecc541171cc94ee3973dd7d7e37651991862a09cd5051ebe5b1d2092fbdcfce6eca329edb129a992272dd337c88af8e7ceb9a332385ad9cda88f9eeaf4fb8b129cb7c662c605fbd145f3eabbd76ff34f1f008edf83013c5bd75535c1fee5a2da5b994ea926537cc40f1ecae70f3a821a536476b42e9dcc2cc13f96959f9e653be990a48cdf78b77d32a399d1496584fc4fa14a6c030e3c4ffc3f6c5276bce104a56ea8da850996982666b63dc574fa82bd79b678609c8678691f31af9e534d6cb899925e4e5583e1e39b738ceb79a51a2efc7573e9f714adef54c12f3f6fef693f7f17d4f6a539611a54e49dc4b8e0a1a2bf5338384fe78a9969bc39f3b5b7d678ec0d0e66cff427b77841b0f0b894a966daa6d8768c68848e1c3f04dbcb7dc36e35fb5360db5679821cb8ab45595a4992274bd7bef0e29c512de8a89b8cf3394985efaf6c6bb6728b0e1ad75ca8dbfe62e6daba8c46a65b13343f0d73c3fa6bf39a653425396d55043d1c9b4e918cd3083951921ec7b73c3fafdd52c3b7e5396b158a7bc1242cd04712997efdd49f36fcd3b37655989cbcc0438cd94dfab679df5524a4d5996b4a292653d2c4ddbb27321310344b6f4e3dd5adffa26df7ac5da76f2cc0ff0616ae386746b1d63cf48333e3cfbfdf20ce9add46a896724701f52482f871dc20caffc2d9b82f44c0f146e2eb5d698e378a3e6e1df5f4cf5edd7f6d76f4d9ad9617e8efa67bdf1df8eb69a6674e89d634d31d5dcc6bef5a361268729a17eb4ffb41c43d9ffe2610687bd6d7c8b319711eead25d23583e7fbbe7dfae10ead7e553b095d9360d8e9bb72d73de5d6b802615084c27cb924a9fbe17f0825d7504ec989ae4874e633fe9d1b6a5db97c385c90448e6fac98c6f7dee3126a3df553c325839961861b7fb7b0eefba40dd723ff374ffeec5f0eb38e7a4bca41adab0c9e5dc2c9e7574b6fdcb834c4e588cdb4570c6d96940257235b462d69e7f9e22ae57b622e46e4a3f175aeb4c288698e8b449ee1fbfce0ec3ccaacaf262e45eacbabefebce7bc491777cc540c779ebe6374b7baded59d6732582e7c5dacab97396f8f56de251692b9f2cdb545a2b05d485088eb04f2b1fceaef9abf490be797f5a61cc326e4c2f0cf69c5bcf0ce59b995b18594ff482fb926ff874d6a7fdc96aca3254d67219923195b2460d399650eb7915a25fefd8e593704b2def3465d94f8e5091b6aab25fc525cb84f64588a4584b9871d4b6d66cb9896795774a9b322b927624a4af4136ef137eaf52e6f9e66461a7ca25c8bd533f88ebcff8f1f56aca328d55eabf2586cb057f2d7d7d6a89b18daff98ec64afd64595096d217e555df495d2d9835eb5de7abfd5658eb9ee20aa4efa85f7ef7c17a75e710901eafed30c6b7ebd4fbf11f136f6af3531debd69df2242e3ff0dc8f4a5d73ee37ce8b59b02bd70fe1eb99f67b6dec8372182fe4fbeabc733f6da77bf1d12bbcfae3ee3bdbc7b96ee2da436b5cebeedaca9775afd04b96d970e9d1e7dc3343fb6cac94739d07b713dbfe70de15435e770dd70ae0c54fce7cf1e6afc27c8172acec1071a9e0f3dbfdf647f1bbfabe87812b059c5b1d23a7bf5fe3ac2d1e3cefda79ecaf67ac37535396756d5e77e8fb35da08ed7cf25108ede0f2cadc9fbfcc77dea7eb908f7b8c5dbfedd5c2f77660b8e8d878cfdba1edf6527c2f96c085825a75bc93e73865a670d76b87eb04ff0ff3acfddf9bdae268825c29c67346093597fb72a16b8ea8f99494f7d793ef6c7984f625478c9dde5ba39e794ad8444a4e0f132f571cd34e8d9f4abaf7d69d4ba2ab04fd3df9709d77bf9e5f27978b04171c13cb792bd6f9dd59b7b66f4c7cbbc42fc6fc329eba9ab26ccce506e5fcedeefbd6bd77ccfde86aa373cee5eb124fdd9fbe98ccccf76abe63fc676bc5930dae79bcb6da4e619cf5df1abb6f3929ecaf5e99f5459dc6cc7091e04d7ce98c6f3f85313fcebad4784fc287ff1e7e97671db73426d656ca89f99b13f2fad0b8954bd9639c4fff94749e51e785f146b825dc57766bcab2ed3283c6aea18e58feeb10be366559eb2a8346c82bce7cdb3ef37d6acab2d535027d75c614f69a39b692be29cb4e171912ee6c6b95f5f5ee7a8c0e6b845dda9c63adcfbfe812e337b47b4279f9a3b2ee6dca3296a685a16dae18f3dffd3ef8d99ab2ac5f22d8bb42bd7f728e61be329ab28ce802034ecb9ffe883b9ff5f54a1482cbe1d4f0ca9f6fd2ffdff805024a5fae967ec636d329f3af36cd94657f7d603e29edc6baf7f7e0e36bcab2212e0fe8497bb4fdb7fc707da1fbc43ac20d9fda1ddfbb3a607ba72f3fdd2dce975fec459e57760e6d7e38a585b90b7cabcc5ae77773cdb7de8b030febfce48df46e7873d542d7069ed3f8fad6efc60aa7a495462b59b603e6e2e2e21be7bf17697e5aef3365d9bbb6d05ccaf7b49cefee6cb9366519d2a93f17a02cdb971639f62e27bf36effcd64a5396a5322ae8b9069465cfb55496690eaf2c24ffae6597d55ebdefaea62cdb197361a12ba452767dbff38bf5e5e1b9ad1c2b3b527c342f99b66cfa7df5706960ebfd0f5e392f3465190f8f952c9b92632587cb8e943fad84b2aca8f4acbc937465a0d31b798c19dbac2786d7f4ab47e92c7494b764d9515ea1705d319fc6a7b9e65d5fb4f189b8e478c951614795b3a8725196ddcb0a8a1fcfb65e2be5631cb36c5f18b81acbb82dbf79728bbbceb2eb025563c969d4d6525ea7b655602c3f67fb6c7c7cf6ca792e2a1e7f3979bcd33e7d50dbd3142f53d8f1dcb7c6c99fcd154a717396f669fe1ae71a75ef9705f8c3bbf383d74e5396b1362a5714373fa512f6be2d7fd0be29cb521a2a179da45c503cfd35f21e61fccb25e6b99ee8dc4a5d378f8fa394399bb2aac49f55ba2ac01fd6b856fe187fc5f8ad585c8ab45595152e27f6d3cae5c6fd6bcdfa415313983e9b398d7453fc6f465396b1903e95653c59b6d258794caa659a723bab4b9625055170c961a434ee89eb83326f4aa0e8f25efd97bf87e7feac953c2177ceb4c3a771059454e069baedd39ef5ff84193a417feb392f9f933e5bb77c42491391cbcaebeb7cea68e33f4b091352eb5dab9eb4eb0c6fdeacd41b2d1137c659434edfe60f5fac4409dba98699df6ce13ff8b8922432efb8e768779413c25c91e0b2f6dbe3435c73ddf48f981c4ecbedcc1147bc233542763bf3ddf7ca9f4f332ee2c55dabb59fe3a610c20d841222ec96df358cf97bacb4530ad4ac617d29e1575e33ed1b5032047fbc75a68fbe85184b2c44e77656bc637d19c585a5a1b6222541e40a3b97b14eaa659db24ee0dd3bfbadbd4a5df7b6d38b1220e4fbb7125a4ea3e47bff0fb35e7df7673eefdbbcb5121f6adcb23fb63b4a599fe412c09b625eb1c557ea7cb9edc1ea0877ac7867fdde9b91072d5fa6966f287b8fbfa5921d2e841bd22ee5c4a7a2d507d9a044078b678e57ff9634f38b6f124a7280d13ee472c70dfbc3b9dba00487dbe9a4f4e5479f3f9e7406993f09239dfcadb41d5fa349ee779df7ac7ada6a1fcc636c24b919478ae9ed396bac358f44ea8b5f5f7ab7b53ccfd7e2620309c634e369f7c3f4e9f934071b196cd99f7d0ca1a41947bb2f1d6c1ec1716fce37cc5d4bac2db42983f1bfce39ceeff5a86d77e4b784ef7dac97da6cb5adc2a691baef94f15eacb9cd3aea231b46fe27b4efbd8de773bcfb22fa41b9a7fd8a39aef16945ee770c3b97f84e18a1cd36318036bf9cf99defe9c72b4e84ca87fbe55ad78d88e61f73cdb75ab89f5aec65099b436c7cb0ee8be19d59467d9fb081c186fcf3c4d1de2cb77cf105f96dbc37e775c30e39875e6c0c81907ecc9ccaa95fa43c17722fde12eac97386b2cfc8254728091b42bacccfe65dedbb746b7c6d06d15942cc2d8794721e3f0bb23bad56f397257d51f6e782c73a3f8f574b7b6fc6d2069b16d0b8e9e7ff2729eff356216c02c973f65cf19495fede37db00d2ab7e0b29acb65f492fb7f9235b5be1a68f2fbe1d6eee85c8c60f3da3b5f33fcb1ca3e59705ef4ab8f5abfbd6f71d46206cfa785a663eed8c3b4afe284dd35d6cf8a0955b9c29fd4bf1c595eed13b9cbb6af9f8e4af4bbb6df478795f593fef872fff9baf1c6cf290fdb99cbb6e5bfbc34ba7d8ac407f8553da7da99d9847ad027da594b13eaca3cd59439b1448cd33d7bc6f4db5be189bb2cc060f3ca7d4f3799cbbdeaa6dcae68ef8f5edfb17d23b73b53c6747eb36763c0c21b56fe27faef78b75d0ac31efb053ac5f971b9ab6581b3a2e870fdffd3efeeccf661b14c03931dcf96fbdd0eebf13b039c1bed7d26835a7fa3ed9a709e4a579ce77bba44fe32b91decaea8f342cd2668e7c1fc552d3591fe78fbe1ceff97b53478a791c76739dbbe6f8f27c9f3e4fd2ab60dab2951c293e59b0b029c1abbbe78cdfaecf760dad143670c45ee1b3f4658ce5e5f6bdd175bf975b9da7c632d76be3c67b77cef758de9dad3db269e3a19ef46ec939be99d26743e6ceb7fbd638c6a7fb7936f1709e6360c3c67e75cb6befc3afcf5af11a18d6bcabc571e22a27ac24b034e627257e9de78ae9b55163dfb9257caa379e99f298844d1a73778933ee75caad39c447d8a0c15fcabb3b873b6bdbfb3c23ca183ba6756afc24864fe8023666c8faecc7799fee74db9f65f4ab7f739933e67cc7ce2f1c6c46902baf73479b65accf3e26c35afce67e7df67f95d63ac6a53ae2adf19597d679a18d1856c2df1a566bebc47dd2302ade32da5dfb93fb697d22d8325e8de9d3bd1fdd328311fbde374ebeefcf172b0e41ad6f63cefbb33b72ce25087ec7c8618e39f38df79427d87c00536d1f86195e6a2bedcfc6036fad851b72aebbc613539b2fe0a6d76edc659ffced9eafb0e9407eb04faae7e66ff6dea317d9621aafad3ce20e5fec42472ef5ff9ebc4a39a9b4e180e635461b9fa65157f87810361be871eed7316faeb9a017d3d86f95cf71ddbc541a836ae992cd16f1f238e595bcefa7b1662d7ebef7a8bdfa6e8a73cd5b727e7658a996894b0a289b2cf88ef556aa67ef76530cb1801befc71dc2fa5bc7a7a66d8b8d06b6ed13ee47f5938f62cc6d32c03997cfeb770c9f7cfe57e84bbf5bfb70cc794ea82bb422eafeeaebf4d6d71a428a017933df75e75ca9cdcf4e1b6c2e30778ed15a7963a7c1a68a29f78d33bf3ead8ef1d6186ca8a051be5b35cd9277aae59b027e851c5bb99ff237616fc2460a6c73b4ff5c4a1b35cdbc8a8d053ac6f1414ea1d5f4d51ac58e77df9937cc707f84150a69abfdb82dfe7f02f2299fcd14669b2fafbb0279567d7bad6f2bee9fb11395e689ffd6def57e2f23189b266c950f6a236c98a8fbbdff2931be10ebff25e484ef52d91fe62df39d48cf5317b051224adb6bae0f4a2babb5788a4d120f76f82cdc3d6a095f9fd50689bc2796f27b9717f39be1066c8eb8f53dfdb05f2c73b750db18f17086d7d2f877d64c2bb429426b6ee58bfb468aa5aeda868857f1fdca6d8491d6c73b05f2bdb2467ae3d65f2d47d90c5133aefb29b7f956f937db08c16d7c9c4bfb227f6edfb509626edcb7a57d72fcb1eacdb299c086f8f5286bdcd85a6dfb8e0d10593ff9fdf559f58399629b1f3ab671ee7973957942f93ebcf9f8a1cefc3e9d659500ac94bffcfa7f9d31f67bc5a607c82597cff3bf8e1bf2a7820d0ff9ddcc3ff38da7dc11e96d76e8f07185efc9af5c626a75b0336f4e2b7f35da49f5cd01f2093ff7bf92db8bbbb5c141630bef77ae61ac52db9f81ac18eb285fc515ebb8f7243ad20ab9bcf47bb52f7749f0f708e7d50f37d734cf4878def25f7fbc7c572c292418c3ccf33fbf7bc637b30c6cc479463cb1e4a92e5f74aaa3e611582dde11dbc7f7ae587ed7f2292d59f61c859a32364e4827b5fd3ec6397253a9c6914cf7ab57cf6c1fd61dce2e3b546a1ae9fa25e42f522de55fac19b9b16a6de1bdf7f20ddfa5126b16b1bf9fc7fcf4cdd9dafc6a1489ff343f7f78f3e31b5f4d0cbedffc3ede29b396b5de9a4460d4146389e1df1eed739d1a442aeef9e6587bdfd16a2c0fe1cf7e8512df17658e9a5ea98101bfd2be7e5ff34871cdf7a7e60599db79719f937e84f1bd29cb78885227293586bc1a73b7fde1ebf9663a7f4c2e7a3585cc2deda3f1ef3f89799635845caa218d364e4b79adaf0f7227ef6ff7e73c5c6a0491fd6d4ab3ded87e7c588b4e26a87181fe7c21b5fdcd876fd7da0239b1959b3fbd325a2c670a6a02d17947fb2afc0da5ed0fa25077d400121fcd7c3e9659537cedfe03bf7e2fa63cef1be3c41aa8a895b2a3c68fcdf7a631f7bae7fd4b2f1714d4b0e071cbb3cdb65e4ef72dd5f4c1f97c38f3ceed63c8f53365599651a9e1e33d3875949cf787278ed154829a3dfed527efed4f669e9f77d6693b1965190febb49dbc70d49faa944a59f6aa24a1dfb2942deb2c535d6fd4e821b3dd5152cd5f9dbb674e65a7b3c0d4e45131c6f4379519d67ea735d5ace079e7fd2dd51b5a9b2b3695be46055fed7c183fdda1deb1c43aa55a59c6b365a7c74b963d2fd5a440db7a257ffbe1ac77bf1d0fcb31d50fdb5e1fd68b9459a9a42dcb64cd1d9a3f38f7fc3aad8e3f35d6d6da3f35766c3aa18c7267fed2be0b739a30d979a1a68e7ab39c993fb619c20dedb6ca41516ae8d8f0d20b2db57adaf89252d9a70605716faee3a417e7ccb1c63c5a6a4eb01f7e517268f9fef70f85a831018e5d77cba3bd75cb4ae11cf4656e2d96fbe9bcb5533978b6b7f2b737d797520c7352da498c9a3866cd6f79acba4afa267c262e4125c8f9c93ce1b5afef1e3b8523536a9fc4585a4c3984af5452d5bca1e18551e3bc1f7cf9f634adb4ee068fb7f36e2bff4c69b67fa5a68d7c218d35f628aba559a886cc83b163bdf7c3fbb2eecf9465356c440a69ce7d5b8e7b96f8ad31658516e7672bec5f29376559e94b0d09fece5c21e412e2f87b52539665198f972e356a3c3cf7bdd7465ee5a47ca6c1b5d433f20eedbcfa654463ebdd73c76f1fed37eaaf3923fe96174b6a37b496666806df72eecd35cf10c2b96b19f9efb56f43785fdff8cf899a11544b67845c573a6fa5b992f11ee7fcf47df6f17b271c436e1963e79ac66b317db4460c5ee5e4574fbaf1638c6b185c62bc31b6f14a6ba38622d8556a2c358ff3ca2b2706834a6bf1f3b9f3b495ee1a027ca9b6375adb2996df1f04f3c5feb7d31c5fe599eb0f5c9ae5dc5d7ebeb6c7f81e78f6d6f9afdf5b8921cf5fc0a9b1ecbcf2ba7f3ede3b50ebbb9cbe98639c98f2e885d6f4e64d27ee72ebafb08b1827dd7847fef2e757a36ce5444954c381acb1fc7763af39f23adf061ec37fb15a9ca9acda54c305ed1df6bcfb4fce533955b345dc59df78237f303fdbb116f5492d31e4d57299e5a3a6273559ccfa1b6f8a21fed99f435396a15083c56fa8e1d53b577dbf3f0dc89965edbd76d9b1edf065406f5e399e4fbed75f5a5c7305e455763cf7be5640bb23df39f36ab3befb21518381bcebcb54729ce3cef3ed0526a4b24e5b63be34cfad916aaae8f365fcee8c2fbf1c77a6027659638792eef98f4eba3d4bf35233c5b392be6befc417bec55a8aa8b7edd33efce8bd534a0bc8f92ccef6ee8b79e71d46b1799ddc5e88fb5b3be76f25136aa0e898631d1faf136e6ef77de2a5ed4f3e6cf793f4ce5c53016e35ecb96a399f3e4dab13bbe72b77becf3ff278bf094db9bef76995f037bed99465bc74a58689fa52dbc799cebae5dbb86609d8f1ecf6eafce8d3fb768d129c6a586bd69457c8e1e428540d354958be73b6d24a3df7b4169ab2ac5583c48d36d7dc6796f2752bf711725aada5d57ce6bbf3d33546542cb395b9cec9b7b57517d1edc67f339c31f2cfcfd6104169cdbaefd9e7ec743e37655949e3ba86021876f9bb4ffaf8edefe550cd103fa9d575dfbf2ff1e3baf4accc55ad2ce3115323449c784e2ee79bb9623a666b289e9a20367ed3e6ffaa1fee8fce09583e5fef5dd60ea1de4f03f151f23729fe28e3ccfb6b7eb0df77b7523fd58fcf1d6b7cd09fe3d31eeb7cbc6dae3512e85773aae186f3fbd3f86a7aa0bdbe7dfbeb2b6f0d0ffb29e72f25ae793fae6a957eb7f8989a1d3ad433bfd73bd49b53fa6a74f8fab6cc33f719317c70d7e4f02f4a89b794f9fde6b9d6e0703bbc3257f95d6ade659f81fe2bb7b4fb4afc24e574925d23be3d4ecc3fdf8ba524f1d6fa3e6e4dbf5e5c9f269257ebcb08adccb3dfcf1b127971ff787997babee6fa061a19d468b7a4b4ee4d79bdfd95724a393f395b7e2cac9ea022681e897967feb67d99978154cb7af9e533cb7df56b80c6913d2b8e2fa5d59a43fab091b757bed9a7ac384a8d9f91b9f57fad3d5288297dbdc8cefb76f92cec7bee8eb922f8750d25e653776da7bd31a859defdbb578863d7fb261271edf2f1a9dff70d5f0b918a9fee38560e71dff0be43b2d5d3e6dbdfc3174e5c61b0258e98cf1bf137795b72de0a392f8849e9d281e60576725eff499eb921524ffd90660eb9ed9217f2decf49e7c3fe7beb8c67a021c47e8eb946def54fceaab5a572a01964778eef434abba575672d3b2c4ddb824423c87df9f1f9ab18cba931a57141a4916b1abbb4b6ce3969cece961644a9bf738be7e6f6ee474d2ad00472b99c50ef8931ae32e60ec8ab9affcdb64ac84ae59dbd08d1fc41218c12cbad217c39f37480c68f17a77cf369bbafd45a5716bcbe94eff9b2f2fc68d57dd40b739f72436d7b86f4f20165c7d7725bbbacf1c652294763a54e393657d0eca11fd30d7b7f1a461edf56c9e992f3b3a3ca5958195525cb52cf626554df59d1e831278c7243ce7b871753e8254785144d1e9b46c8a5bcb35bcd6d7e2b7858ce6ceb9b3077f879ab40663b2fecba6b1b2badd32454852605f541fc348d31cb98e3beab67fda068f0c83747ddabdefd59da678782e60e9939e4af678d9ff2cdafd0d851ab859faf961d464a7b1dd042c9f7ecd0f6dbb7dd3474ec376dacb9d2b967b756a200cb7a7f6759dfee58a73d01ee7fff4a9e2bd68fda4e6302fb90bf3ea17e9a7ed5d3d4da4a9be7531a6a8a8a660e89a7b57bea3727d6f5350feb53d89181460e582b8e6fc21d37bc307e1c74defcb147bc21ac9326d19480ea5aabcc3de75921cd940b1a3874d4f5d92ab3def9bdaddf90974298777cbdeaabe3346559ff2d5986a27183ea3b2fd53c9e7ca8a49168858194a3208a21040002aa4603102463110020302c1e0ec8e321a968c44e37001480024e9868a64c3495c9826110c33008821888318610028031ca186498aaab07730aa861b5662d08484ee22c7bfb14a1b5083493afea7a365f33cf7096b5c452c05cf04dcc5f8a901e173cf255c43723bdc299717eecf007439142ad28a8c162fa25671907defc787d61c77fdf9bafb372d363bc58f8cb94d2cd544ba9eeb99e38129ee340859b144d09fc22632f46cc4d276cb8574e60d47d5c6915c33d8ac5fd31c9c2231710488283aca0e52a7feb195e6783308989dfde98c3254ce86857b5912219c2823beccc21f7f89d9efba515317fda86fbb40c1a699c80257a3d5cfdfc93b192626c081b18bd4f805e3d6193bd78c2a1f428addb583b891d3a15d10494740ba26193d7f8400caf313838048b1cc70bb45c63d7919bc2794cd84afe8c6c684595bd134c56cdf24dd856fa0257a118cc2dfce1611cfd743e663202689c013277c8168565a9154bc1109f6d0b6d1de45a25a8f11ef0190fae79eb38800a039a9de02cb16e41be7426720fd6603ecfe359039dd9e35acc63ccc1c8135f9e43296b532a5010412970613c48428ad913d9ddd730d5c830df957275b649dd8e1e0c135dcae750ec52646bd62d6006ea23b387b0725ec59fa90615fd81471e25fc095525cea01e568306282e0e9f773608de5a3156a40c727cbeb4e23f5d005dca5277cd4b68e92109793557a49e90792f8dd7bd08e4f1daab49c97f667881f7784a15ee6267b6928b3e820068eaf375e4afb392dc611ac2ec31c47950f10ded1805aaef3f3f87c3862e6aec0e1b960716d52abc54b0bf6c3162590d0f11b88a72a0098e89a7a064615ab25d5f5c55a48549c3604a50c927d9337b04e936d8ffe831655ba2ac31af8600e887ea73f8deeb3d5fa5b5b027020ce889b249d4d76d124e11eecbd3786aa05c3311a45f31126b12b04b0f20da18c25ccebba05af6280b255dac6e0c209cd1cf5f77b96938aabc1acb2fcc2968a0a1f94073a7b457c03a519a6cefd1aea1d3d379491c980909a8d0e0d2954d039da0b1b99f59503ec9ae446b0cff13e18790113cfeae474f5fe3f34cc090965389d7277821d159396a4da34a65e1ebbc1ab3259b6764b8df96a5db020fdecc8e72be70898babefe706025d0dfe4bbd7f699a72324d25d345d94da8b4949bce8ddf1f3b26cb76810535ef76b22fa087ac788330dca96939733d19ed02c4aebd5e570c562fb3da96d334d6f4df4f9a50f59ffb04c7f62417807242ac5abf66cba0b8d0127843f680d1ce4688ba5fab40c39b485d89ac999470abec011fb9d689a68138c4010a9d642c30e2e3526278cae23fdf1a030138219cde0c3a83daf4a48cb57f9c4a35ec6cb252ceff6be564ee8899552f692a624ef1971b4a5071aa822807c3ef03819f9b7104ddfab0acbe03ada68089596022360daf89070eddd43ebda06ed9df282034d50ec28b75e0f3de38f06a3124f3056f8965965559238e76624d6cb911baedcb9955d303bd057a3c98557aba0c10d73adccb86d801161d30f08f8783d4022740bfea91add67be1c55a0d536ef733fee10ce47a2790e4c6b492ecfa37f6db2b73a95068af61cf42c144bb387997e93b3d0e3874d78196c728cefa86efe26f38e2233d1e3691d09f2c1e8c797000caf1bc947b2aebd418f397416f1354e737df9887227970002d1ecfec995a106682efde04b7048d83f96dc094111986d493f68aa0321a0005e19a51051f3f6a6abf98b57ebc5f9a4e4ed0661d190712cd800ad42b483f77756fb152795be1f167ecbc568a621b31ea884a2981dc9e1bd7cc062b0419902093b35388c47c8140a623eb879f4634b71434f479fca4c4453918a35e9a7b62602cc0c52cc88ea9099a07389993c5f82f39ca52ccdde0a062c542ca59a052fdd17c741c1e3fe560f0c2dafd60ad9039decf0d67e624172309fad163829d14ea9472a1f198dfd1c0665d0254858b06ef9877d96b51c5fb6570f02140b66b97204718da4a9206e87a018532be968099c783e36be546c372cbbbbe254b1b5b123ca614699ccfd23131c7f6f45cbb8034f04cef9413b34930ba4fe114c12faa807d0156bfcd4f25ebb8ac4b6756396bbc5588e8f95c881209f20da12a74b6758abae75155aa82082eb9f349b0113b0589968c07c5f338ca7030e27877871b8e323bf8e9a0e3766c0f21d5054ec9e4a0e45bd8cd8e0d2d1458295e35c78d4f814f1a167cdf00e77c909220735a695088bdead80fc465ee10cfb2755c4eb66d43f3d60aa976f5fb33b1c9923156a2811d672b580a20eac258cca834ad1feee6dec3cf771849601d26483c3e10d7f13df44521085fc15366d92cd562b4716fbec4da0da433dfa08729bb45479292395d3a2a60932a569b7c89d6fbbeacaefbdd60dc2c5c6b921bfe05bdbd1a6af408e9fc79dd5e85a8ca3f46c722e87d4ddad1cc29ef61da0a81d2943c21276f63f9b52e355c30173d63fbbbe52acd6a7ac6a98dc8d28051c0e0235830e1b360a0482c9b5a2e22701eb86be4a9c405a9df1409502fd70522a84e201021f03f083f383be39974b58e04c04e09b9dc37cbbf8609b835dd254d4b32c05c35839a899a719b76049c06c58f7478b2b9157d93cba2ab6913d77506e859b8b12c192d9af7d2697d080cb989804c965324227c1158399dce5188495d730c18043e06199e3deca918e66fa0d8a1df626c6ca41293d5265cc15f41d80df6a0d0311447537e4b48e37a06ec0b96812ea401e85ba7537df37fff57c90aba7c9c4cbfb3f27301b567fa6cbc03585c9f7f9352d024b0287ebe629f0b7c80f9d477e9f9a60bdcca52bd2d18350caecb3382e760e4c9b079487a0a207ed90db5701b664131bae1a3da0c5156691e6b0fddb9e38a64b3814c972b02e24e1c1d8c8a7148dc0aa7a66bd2b218aa089b9517d0f3c49ce662e878c7e618f9a680af38f2a708f04e0a97d40486d21423a433e6a001be49647dd086a8060beb7ddede2e28c8431b3f465fa8be1402304ce6f617b6b9cad62162bbe0abfdf2bb39c6bc7d959e80790f37ecd3cec663a35d85c5657e0d340351de137621dbc97c8bf160f80bac7071406e587df2e77c063dedf24933253faa6fb37c6421cc45bdd5e79b1e2bdb7ff343fd843d443ce4a44a75afd11f3a1ae52710ea8af9b1987840e74de858275934bacbfec5c73577dde428974af18362764fad3c6871ec0bd55c39b7fbe2cf9eb80cf343f3b31b68f50a7b5a1fbefcd238c341b7e4cc82921d8f1af729e264722ef6a889e2156ed39e74a58861ef4f7393206d21d4dd2a2e4a8c75f78c75d5cb74646620ae2ea23c95e079ed9c33353f83f7a3ac471b4bf27c164178981be2643d6b5b4e6f395f94a2f7ae38b87e36a854bcf4cdb0886cfdfef1752f9eaa33f06d375a7597569cc7b3275f8a8897fcc4f121e0928b6941a22db81771c6e504ae104d09f94e82fef513eb355b73a98a3325257a2c5278fdc27466f34d0acc6257fe3026fbbbf441d3dd568a7c3ae73167bfbdcf00b3eca47fa8437229b2fce400f455ad32a5becbef047dc916fd9a5342404c059359deca63a3c869b3a5705b617731e9f3f5d8afbfcfd454749f57ccb2aee4de1204719136ba489a73298dee39b647b5b2419af5ee8fbf62735b99f0b8c82e7d07c746e2776b11349591699cfc250cd4af181653c0e49d186f18c6ea488460e15107a15b2e5e97c66c5f26ea195838962450d53c1216370acb09edb721e00629e8ae183f340c8080b07d513d77b538b5cddf010ee3896761cce7869ea36952c9dc69b3df4c5de2335410d5b769a19f800ceb45eb8c5ccba0778c04e7845bfdc6adc3634296f572b31bd9f638fc3a9835dfc7608baba32e205f543c0b66a91d6956e66b9d21e65b807ca3754ba26c031dd89b8f6c8c1557f09f40178df9ad17ead109deff3d0843050f0b93c5f7b1ef604d399393fa33e3af0f7a7b4fa610c8f6505d84301e410ef4203e140bb9e0011826d4e339bfe46891885debc6159d435f8fccfa3ca79b9d9302ad51ccc9e8ca6f02d2d6f9b581402bee8680a36dd5d9203a37ecd56f525bc42f0ec9c7dd3745569c2ecc7e417bb09512399bf72d64c3d43759f9c1f8ecbea0f5015898441ba6186dd56c95790598d17d8ada211d48f12131d92f1264148ad1de81f19cd3a223e5243dada17b927bed660f6c6f2069c5c94a1630c8ed4d15f503c4bc6f9b0c80d58fce14e6487105bac0054d438232ef9d11ca46d2647c8fc1c74bdc9c19e2f53d61fb87a884855ab247fea7346cd28df6b02c33882f443cf45de803ab76828134268bd45e9f12810755ddfccd82370989af52a70bf20b28245b44af1c524d0fc4071eda5ab52e331d0a2f4ac17c45d86944cc1009e4267cc4ff30daa5704aaea0259c3c75dacf0943a9f3cea2c6ae1e944fe865133423cafa258ce78eb4e633dc38807f043fad0385fa23afcd7a78442fff2f3a26c2b691bf77d6c4924b466aac13ed9a110ce5533470fd5ecd8b8144a0e0a2ba520ff98fef2175dbf41054400e863e25a2748bb0172031a5f97cbed8f2121b9e0891261805e8b6a935d82901cb72b181e87b426e9f441fba760a3f9641d2e64330a23d4f1db4a9579436d250b50fb5b5aee7abef10d86c417184797538a25cfe0f6430de84fa4e09ad211c213b27fb6ed58714c4b5274ed2aa79ad41b35219e93b4b984e4c578ecde31515aa07b79b42925147090b995d28fbbbf09aa135b3832cae0b0e1724d0364baa86ca73e84d45a15f262f5b7fb8b055708a41f1631e57bef086ac0003564ed873c40af30816e065c888192dedb03f6ec2f34fd6db2bb4498afc5febde3e2b2b62e4f5e4ca114756d674c3dd574db1afa591ed421f45e74f56cb5b247d8deedf408eed91a802920845d7a1dbe0ff8805b3b20ec11c0c4f3d84e90f8d7e43120474c27c5cd7810551bcace6ff1e33e887f0ce64294beb9fff0ba94c4561ad3bf19a2768d9dd6c3f7d667da3c746fcd6487af14f696e37c321b561011d1681d09f6e988e78a44edce2c18172d9ffb145c1fd66df6c1af85357140b6133c90102f167e5e9fb612f5daf1ffb0efb5e4253d81ed405075e9585f621d7e6a8dea2260fd9ecc668a341017af83569afa9ab10c24426dab56b16b273db7328cfa7d98d2b1153450e6553f19d979990623e86e3fce6eb3d81290ec92ac6b623fe73e0e34bc2f89e98d6044c0dad0e026c119362c93fffb1a65eddae21db4bb009809b452faff3c3c227e2c33ed497a3fe6e0b6fa19234ed8869953f598f7f9bff94e7df8e5817484b30b5734b49f530911254a0a9c044ccf89f91f304c2c90141642037979c990cfa4670cdd84cb529dd0c98995b1f8ab6ea6f4e6c08fa74c6c5030ce7216dc9373264f8383540a67669483bb8fcc4d8a2001b40bfe49551b3560ec41615b3340b349f7a7d66849a0ee8244550cf2cdb6e90d39ad1d9b0418905af860b1dfe3575cdbcb1fae161e395556b7b933db2fdd376de4cf481124ebc76f3412dd55b0bc16ba8aa375f9636244c0da5a2f3f7f62b01b9bcaf5e878c3dde4c8a57b03965eb307b177d7bf88ee670c4251d92d4da45618ab403bc9542d896119d32a251dbc54230b0f81f5d80e477b941c71cfb38aa0cb480bc2223c3ad0ce2a5bf790728edc8a92db3a26e4f8a7363586ca9b8d16c94dc1a480eb93f5fd10bc5b21ce20719b9becb2e8089f97e58ab225bac67fe790fc0e5c8a1d2c48fdc99a0ba41c0ec9a3accd80bb969c824b7280bc9cb5baa13dc8faa6c5f4a040e314f24b329e3ac3b4d568ab53b70d568e1832a9cb83cd444e5e10e366ff26209f4b9bfd014de7b626115578d4ff6ec2685c66df990c3dad363aaf26e37cb3831f8067aa541c572d4eda8b0224d2bea90bda96c8e975387e95d1e494a8e237bb0cac4aac921e1c7fb2b1acd829704a6cff83631eba88df9dbd49d83881167971260152c6cb546b0a5a7f3d9f19ba56c8d9885ee4592e004db8cf511c987d558567e6f073a42c68e8d8613a5cbb1b9f187f831af3a413bd8945327fa741f0c9f13f85b87a1c5c49df6a5a8f39106159f2c332fd1f3e03dc87c057ca01da3592552a49789e154dc8fc37b1de2c81c3eb10a102a78d5bfa13940bec44002cd72b2108c0f03b142f76992c3d77c6a25c44a53e13ec797558b4cb9ad69c82ee1060b5a34577a26fb23f49487f93c98bfb789975a4b2a30d6997068b9c1d9ac4b5be6a40380390bb9721e491af8db6e74342f432573fc08b58bb1df21b080cab2be54650a36b91cc332e2e81e39b48bd1355a3d6783c37656af6877dedb935c95816507aa143735e368c426f54266f437420bf92737a60fbd709d4928815450347909ebddc29c91620b52a220260c5122db6f569ada7f0b07556f471fae9f15de7576652377e103786f6550496513394e822b4c74351c17b9299bc49d884cabf55a18abbc555d1d60c2d4766d4de43c7c4dae8dad3600286c9c1bf3c701e02263c733c6df990b91ded8994e84ddb5580f3841d25478e9fa6e21cde41372fae3ab04b91f7aad703642b0d369b616112febe4f1ae705c0a2eb75f670c72103e2cf37526487b0c401e573890f372618db0e569b477e96a06ac623e957990330f3eedbcb8742623e9e44e75e3a60b094fd9837016ba615b711438d6ffeef9d6ce2c80b74c51067884ad74e54693b536da34744216409135841da8ec69d9e6abfcd01f69992d583eed7fdcc4f2408c89bc77fd2bf9381dedeb7b084a3f39f773cd58d4d85b3a467121064446785abbd2e4d7917776d0cc8670b9066e92b1111914aeeb77b008ed8d2d76de167c06ffcf358314a5573851865dc86ff88cfe3b0dd8285339aa308183b8e10642b7f90dfc1b767c8d1ee68ff3a32333478bd9af4895f10de42e93b4b640d5331bbccedae43ee8062bc5f0cb2460b94adccc78558a33ebab7df539299980d669749deb115ebfd1eb9073fc14eb5be5e41c0639853cbbd464c75a67cf9e9afa300316c02c61dd54a690c80850da74ebd15dde991dc2654c65908faf465fbbba66d57d80a5744f210e31da7b0a60239d266f1f2420b1042c831600c546769a34b5085d440bade109a3a84d96872da01c19362945699968c82ea80126b824a23a319e091f6f609235f36d70ce2a816c2eb58d28f511a25e85435088f87c370a55cda8f02eeb5773a847cc6522bd7e52f6d23fc7ef5b96c55cb9872eaa62f2cf8c335ea92bd7de17a0e0bab812e3f7912a8720356341029ddc3498e1abca502ffec7490c9d91e239560d0a499fcedcf106217216526fd1fdacbdb12b2103d3d35dd344cf1e9020fea870afa12d5d8cd834732208fae1156e37fb4d1037f96c3d0e7a356b9c51b30ad08e4093da7195cf88a0a0d6c5c0ca3df872f0087299a7bd53e69660ef25c419a73fdb1fe63df4cf2121445e1e0e10643757137f65a82b34fb8ec1d238c144a4106d25cbb89c37f938075503aa79632021461ac8c72c0ea7c5b81ab13a249e7e4572cbe851d794895d0ca4b3dc1a3ef1cf494329dd4d2c3992d621cba771d5dbb4a37d60cb4c7fee8b9377557e43eed474ab1b379c9a8bb156392cd29d5801539d752a677e57e2be14913c3224e386ea504b8ed4f30864d1cd21715648b807b14ed84681f0a225e6eb95cb1e1ae4ddd31e31624bc4fb014efe152b29397de215a2a7fb1dbb6c36ffc9bb8b8ee23535f6a50bbccf34b19a8b75d98ede26b578b37a2cd49be7c24a759d8f6cbe8e4318b5e4d1530d8c26dec5bff354a2f94d7cef56d35223fc2b542d1e82fdd568f4c363d865176e00161db16b7cd2a95b6f4144dd1732da09366d5fa19e997e4c7b1b885738223d311a6fd78032e633422ec3e88a7da60468742df603fa0357951d06f3b1467a44898fc36c1e3e384644c1b853ad22aa73ac05862217285a4ab5dae3c5d438fb20f81b91c4de57db50dd039d32c168f6fb28906d40e11eb8f6bd7209bf52707187a189da1f8eef769afc2a87cb94ce6c4ac8896f42908eca06135fbe0f91cd96a532fe5b638b1232726212e3ece0025d0dcdfe97f1e6546082bb1d4705df26bda4bacf4810067b290e6eca69d1b0284f19fce102cce2982e1d2980e095497c48b91e0731f703f6196d69df62dc6e50980d12d1ce9a54ac9d191f2d941c87ddf8140bdfb659c40f47455aa00255dbf4576ae7350fc486df01bf6a8e27a8f392d7792bb32525565343de953ba59208b294bc7023b0ab4379135b762584de0f09f99aa863d1cb789e8abe2886fc268b81d33bfa62f4fce3d45e4db7f2cc591767f23c22ab1a78fbf22843c05946baad2894cf44cff1121f8ba1101925f3e6aa2954111d64a2cfc5627f4922ac9ce4ec82f50cb997ea22d04d7d69c8854011092e14b8707b01cfb9b39e0127641ba6ebd3390e440809dfc43dfe7dba2d9032d6c9d8efaad45cad5967a75c2419ad5668d6c75855e07f5f8b49bf1a48336b9ea42b561727ac663e24e2ae32fd65800841bf6054b6d861875dfd70ea3a2eb95d98d695db2e5170fac55f723e794ff5b2aa433143d29ade8ff8f4f9307377f85055f45b516ea2621e6dfbd9d0858aff96d74e0f16eb3e800ece57f17b7aa61415fa0ffbaea1fdd00332ff0465819d7107361ede2f63aafe1ee0da3a27b2c518853862b1b5dd0eafb65933b5d4e2762d77b2f063070d5717e2c38cbd448c830fb7618e39700904ba5e510cc532d654d52eb570c9d9b922b4ce44e21f5a9b1b137236441f76e072f3b99564bb403d4065d4ba72c9505801943db3a7781dce8909570ed875b3818615f060c4722373b1f418c509b032e37788c5f76bf7fe64597db7b278be542a5906f6a5fe1179dc6defe982f9ad06fab72b3d6d9ca68aded046d9e30c2c80292b9ba57afc9c4adc9def04b4d5b7338ef0d995a6a773d0700d6dcf5a726737c69766fdb0be1f9bd9f0808fca930fed6beb33b218fde020367ab707f21ffeb27f3af25dc6d9e0ca16eda2ce9383e7f7236d975a2f5a326f026ed0007b9d3165472969f2d22430358e2a0557ea25f3dad74346484efa8952e852a35c3ae3ee4ea3f9705c81843b6b1b610b66adadf9a7fe2e19089e699242982f532c2d57472d01d5532c1f99706da71082ffb66b7803fc347e363dd4f78ee1359e0d8c73f27059021fdb8e826d333c3bb8ff9b89c255f909e2e93456ee6cb958203e9f0e5a52c2747cc9908d27532fcca0017c569d55c91a10c819c2effcab80fc76d0eda52488f22b0aa7cc415283d19a532f64369c7e332076d06731d94a6dd543cd22bfb00660a0ec2d3844a0285a0363e18f9e61fdc60e50a20ba583e02f92787e3e960af30b9809695d0ac92b0abc84b8990662270065f2baabc58551f8ebb0c0a158bdc084c0f5c480dc0f67e2841170ea2c17f0ccb8e3e8425e1f9a1ff7d95328f8441678d28992255ef32da1c7c2ac5014a0a1634c1613139e3c58a76bf406fe044509caee546b67c871b2a0df8de3349e18aafa42262b3084495de318b45fca3963b8b15771042e5acefda494a84c90a647c641586b45b646acfd1ab2a12bab130e9264e14633155492e5f8934ce5f8ac22e315270e7e2f0341a7a9919d69c0bb94c9702db919de7d003307e5ba43cfce45754212cb023caeca41ccb26deb5ff2318d96f7962b58ef317bb95364be7fd7ad649180a6f4de930caff644b10e75083e696d32bde1e10ff730f074104028e091c4667c474e7bc24cffe7cbff83b27c491d5ac2bbe010104459cd13eef5f6cfca722900938c3bd1f4b8a10b7e3225d543204c630d630c176094a121b6b42a450c9a03a0e2d166dad533429876881d6065ca3b67085b31b34074fceb155549fa20874999bb07820f361df9c6740f1bc3a217a92e9f395ab8878ff1f06c099ac06088f5a7bcb0d40de904c0d4e3037dc2d9ffe67a3e89ab04ca49e168c7391eae188e874e6e3ca862c6337f6dd37dd13f89b403eff0aa727a859babd45de246b523eb9d15c98937b12fb7815513ace69ea57e4112a63432254f1e9b104520540ec853c15408cc921d0c55c7388384ec47b1102f737b0c5b0e58d4d619ffa6d7eaf3e2e4382fd64107000e00193b95dbc942c71b8661732dbeade54fc594b9cfc97864ec9db9824269ddd31ce08ddf802a686057ed4baf351628cea6450a41c9810beaccc42f0852f8c81f4b275fbc45590b1bb25cf4e57b1b08ca010f806d2761210742600774857db72afebccf0ecfd0612e4edd18b9478b0ae5c2c1f1fce0eb5ddccd25bebeea66b879b727d5e00b4e04d1e339eaee5769973e281fdda872e76ed654d637ee287bcec1964916f501f5abf6622018348b36fcb4358eac0b33259c0d2be53502b6a2ae591ab9ec984d51f910fd5335200353210d41601c28190317b5ac3d6a307ad0e1e3df9dca637e83150977cdc74071c07c82269a4317e5c64245b111968cd900ce710c1f9d5e9ad9b024cbbe2c56fa54266c382900dc450d41bc1eb3d367c9ffdb8f8f3e8fa91e2099c23ef93530a85fc761415ded180fe5ab7030334cc22462a0b3441053f9cc07fa8bf6b7e0e40a36b6aac0b86cdf1e53a84cce008bab708369a13d1a46c7b5651cbdbffe551801f3890e8328ffc14637d62e2166d9c6f6c6ee451b24d845d53639ea2dac310090ce321da2cd16644fcae1ff7a5137c11c731564a5f88160e2130ce5e654adef68e8a3e8fd27000a6a6960eb34e12b84a333a425b740a529ea2b70b9b77f334131fc8f17d14669102383cb257d7a7f49a0258b7dca060225ebedd123720f33871e0af35b93be1c3bdac1b70d25bbf51ed07a00167fb64538f4de7dda039ad075612b95c36c15642031ab805901f65ed576d24423d3796333cd008be30b139304f4812a0f9815c0dbed564b100c1759ed6eb3b2a12f716aa3c43696e01e3afab0082e13173d2ffd7b9991c2f17b48c25caf2691087d984af03cf906a8962feb91ff742ca0fc65bccb0a068cad268738802720ce4764c0ce0faefe4048216c452ac2810d10de14b19766595bec57d72009c6abab845825893947ca9faa412ca783524a5b5afbe8487b86dab4dbcd26aecc126fb82a76a4497c9ce542146b0a8476c3f1f9077f6e800d233e23f20addd39fc1931b2bd330140596505e7f08aeed9555ab90a247e56b49029eb1d050b404d73e57ee2437c1b5d1dbbfd9ceed48131b04824da59cb2db9ed2eb2a8014f0131993de23f6dd4d455b2e0ad81a542fad6c7fd15dee97522150f553b75285c02efc17ba1c91f94fcf56e4c76a6f6275a7ff1957e15fed2f518a5d27c5bcf56c741471b360fedb593cc5078ff9f3584d35670bf80596b1782e759a9fbaa48e60db0ac4588d03a2b7f5307925fb05f51096e379273c6e5b79a1d60a608ec7a1d19753ff39499f93daf69357a2d930bfbd1bc6e4f0d975e2446ef497c0037c86443b9342adf764174795c12fa4af3d9e2fd89d6ad95570376cbf11e46d3f9fb31d9eace6bfc38ef0057abb7029fcdb5ebf27424ef1af503c9af5b1de7170f7edbf2e70909ec082ff787578a450f87573a1ec57c2b30e15e2fdc0c71374f7dae71747eb251175aa20f0829048069688fbb25a1f455e8417b907aeb3a65cb9fca5df0693275c7d6e5c41fa0283b3a07dacfe6c1d8b4a249d07bb03980c900128020400a0008e6341cd3c54b9308d419bc10080224000000ae038c002c8bb174025000b0083bdba6f8d209f00d038fe6f4ca107bb6a1f8ea28601210069719563f421c61edb9a1edd714d6452553260ecdedfbeec7f3c7be8897fc3990182f975263d03796d5bcaf036d0160fc6d47e0da9b052eeeb12656d27b5e015740ee287e046d0ddb81ed8041c417d5f293fc759b7b06df963bdfbb2387f94e416ff33e0b7df9cf63c8ee162ec0e9443be11cf0647a63a968f8a98c6cb41f77e831ce83dcad80da019c12f682c81f2cf545ff3d7574ac67e1df4dd9bc86029abe0182fc9bc6e3a864020f61187d104381b313adae93917ba250bff115081ac3e645969f6c9f25e2c1f40b197d01ca8d8c7e9ed741b7b0baedde7ad7b13ae3dce3b5e42515f97323622f98e8ed5939ca3f49d37ecebdd81d80c75f2e74c3793eae36147d2ccf0d55eaeda59816d34af3902fa1a0f35c8bec6b7e1f40b61aafc6642a047add66325d89cd8b8fd10815f7d7bca7ff693e2795dec6d814e1ebbf2f9021b69d78fdf8b01992914cbea8ab6ddf488b660fc7fc0939643a47752b454325dcd2ef42b2262a462e4304602351936731890a88098fff25942d4ca956676a4f0e20d9301024b4df04dce3dd859d830e78ca25dd975153cf096f29c290f1459a7892457deb341e7d4d4a282ca6c5c39a50d677f1af6f2299212764986d47bf5f4c42a4e9c09377fa37ce79eab88c568ba512d2d7b72e927a3ccee33f6c352b9816ee3dbd2fe43bcc0cd5bbcb34fef5dc41056f5744c52d3d6dfa960926dc128395cd70c5acb0b09862a00a644b1890eb0f9e315d3d50957e98b5a02037f6fff16f10afbb1e06d9190a8b13ac8f435c3a95911bf727aa0a43a07fe1f206f113eafaddc543bdf806d640b06e43f1e4aa55d5b5adbdaca0ee303e0d7815d508280f85ce0787a44e69a5c5edb3fd8b134b8d906eaa736680e36659deb36ac855cc9233e9d5890bd607879b620a42941333114b5174e3a83a9aa4a1a90cad8d127fdd7084754a674c165556d3085de5ff3d52b8b83801e0ab3e5238a46736e83883fc16666c20ad9a681ea7761618c515fae26e906411fa5cc786296a7d66446a919311b832e508e1bc0c5c554388fe835aeee7c93b75f027f8c33fbf646934cf7dc14c89d3110cdc2e5582ffc68c30248ca4eff9506d27a64a774140c4a03bd5995f97b384499a008298c715b59385d567b85e9c3a2ff4a96e6fd79deb746ffc242dd3da7cd7e50c62a3c4ee5e7916b1699b54a799dfff52081ac26c0b547c19401b059e31ab2dfc5d03cf1bf40b6a57e3e2afa17b6653a0b2f0fc31ef6400f411a3194411399f6c78ab2d0e5429c1378f2208667b2a74bd045fb6d3208a4779b25c637aa373bfee62f31b85e28570069d502075ac3a0262b294a2bc927033b22d897f60b9bf9e6222aa7d3dab7901f15b140b7cf6e34a85ab51b39ab48e571070131de29118a6fd6552b5d190ee777d5f3a7b593139dfd64e2c46d90f82c18b7e6a3750688f5f0edbc244a21ae83285b89ebe46eb04e1599ef0d315b30a6d02b157dd7a5c72b2511ee425a983a30ef52d5fd2cca66ac5de230832192ba52d7343ba8ee0362bdeaaf03b59a6fb27db868956000c89c48bf15469d76fdea98420048ad94b10037fcc74af6bd5e2768be7ad78d74b2d70017a5a1bdab7a2a4f2088476cfaf4b871b45fc87836d0645d518c1d0e0867ef3297da5b6ba4f0985f2a4d11e07293d209ea59cd770be204fe11367734e969dcbbd02b327f90828439bf35bd1760ad63198408bde7a3b8344db7dcaf8b01a6be1ec0c7a84f43a3b854adbb9be1dd36d4144e469e538073901384e332250b2251429e328466ca4f7f2b474ac63fc60bad2d5eadaa3d173d4fe11ce6bc89da35079024b49fd21735cd1a83dfb2e549330fcf5c0c94115efad3da6205d7b86d562e119dbc0015d58366d6050432fd64cdc9f0c30899a8a099c7af439af24509eb39f7343640cbcf34ac040dacaebf40b4d94995dcda55220a68cf2f79ce70a5debbdd5afeffded5b32fcc44f3bfccbbe5df114c9cc53cf3ad189e5a5021ee637011880c3e419d01649b9a7c08e97ea33390450c3cb9de01649b9b7000c1aed1b311450d3ea98e6132655cb420567c5f228a9d6c290e2bb4e708fc23138721921b605cd351082ab4e710dc83898721cb1b606cf311082ab07b14eca3a9c721c9113c66e3d1442bb07b1c8c83098790ca1d386ef351042adb7918fca9098790cb113046e3a8842bda7b1cdc81e98310cb0f3a46e3e8042ad871b093ca6599964471cbcf3674daeccd56183682d7326a0d7535eba995191d4329298a4f4a8fe2e63e31dde825e0171a8ee5a50e4179bd469c8f740ae397c24378b84b943e9412f51b3d07f2a9465c0eaf10e12f2dc5704aeb61fc5c24a61bbd04fc42c3b1bcd42128afd788f3914e61fc5278080f7789d28752a27ea3e740fe696a29e2111c50ad1e8a38f235d132105bea39d0b093850a20395d43c858f5f4c9a14b3930ccce6685f7e93d66da50ace55d0e2500ddab90fb64938e8ac588b2c044be2ea129144e06cdcb0a995b92800b5088178427310bf3d2380178095ab99149e929e02dee6a0bc3b5f53d31109009e70d9a1c487771b1f8dfcaa4c99cd47ff9a4655bca83ac677d182d6f4fc5b2a2ac7cb48912578b330aebd24d6059df5ed22d3842638e0878486e425993184ae82f8ef253abf955ee3342b54c0019dadaef47db0556a76a96e94576a1750af5e954a6956298710a0f12545d260e72b0cd6cf4fa589f16a8e39e0176593e64f0401ad835d7c3618b48ba927a32b61adb77cb694da728567ba183fe0c1524ac39d4b3c823d738aaa94831d3bf94d5d6052134dae465a0e114c875535e058b557e572d3461c778d189950e6b8ffe0d4dcc81f8352dfe76f67970c36d48e3c8e10fa37f8ff179cf94aa999fd7d8d6095db407e8eb13399ae869acfa4bb126a6bd4b524f21bc5784d84bdeefdd1859ed49759bb331a69f88b88e53ff13779b0adaec920e8bcf10c27e48ef602a0c5cea639b18dc4fffaceba6b802af1fc6df80099c183816713b8684d70ce5be42bfdebeb115f4a87c36c6c658d7b3528f1920e7fa9b4eb789e8d10bfbdfa8bd0d037fb9cb8f782d4bc23d753fa57b235ac0342fd6f3de0d799dd3698d163c85ed20e3aa3cf00f8b1a3fa978a015591c2d38de668b55d5edb08a976fe28363062729845ba378dc8ecf7763c49e7ac9983faf7eec357c859f46721ee4244dfb358f242850fedbf58b73ead1fa72ee6c3bc2310d2463c3995bfefc1aec6f3a03ce577ad2a4914d37dd0ef4215674afdb00f4f26716876cc7efeafabe24d5d4215cf9b371f68fedd310618f34b897e718ba79cbae4842b8bdefa5c69a0e15dbaeb56461d204d46e745fa5b8ca00794815ae9ff3e2962325f792691981a8fe241e70be9d04403eb67bee0c1bbd49d2a8edcd270f585430651ddf0783a6f90dfbdf8d4ff1f34172bde5efde310efa61312ec80b8c16a30d3be8ba2f9af49de1eb8b6748eac0f5270b4ffd9a9a1e9cfb4dab11f46f42cdc88d197e726b8408fab791e7113512c0fc69e7c53112e6fff92022455affe11faa1a0fa825d30fd02bd3efe34c6dad7555126ebe65bbb950d23e1983b2106ec79e6e6fe9810067cc82e18944f7e277309f165421102c97704922b19e52b6b572852d0d81868b63ae17137a86edc07782589982ed4281ac6cd94053b50a166d9bd4387fed60cde800e1efb91b4a1403711e65a789febd997763c20898c243febf509ebefdf4d802e64c3c81ab286c0caef8597f871cbfccd8bf67c105a7546c178e5bc2e8d6866ede3182d0c8d10295f2c281ae901f78be72f8fa156c3da12b5c0946775ce10acc9d95025345c9a2faac7af62a097b62c719ed19dda0546e1681dc8226b64e7bfadef32dcedf5a532269ca9a6381ae9c6e42bd89d8845c0f5d03d3eb401da5299076abab810eaa357fe3948495747a233a29312cb88ee648d48b70f03dc1ac2363aefe635de17a1359b159e3ea5a19a8f4a78199bd3c327ffc0180dd1e8dc229192583b30c927d48afd3070740f4e8e7d770ac69d4115a82e99e106e2b4620615342c39774b8e3d7956bc2c338dc8a29330a4cb9ec48eb09318866b8b75e032c520085d4ffe74992a596d96857bd62faed518a5279d956bbf81d99080e701edf888f13bf13561af2bab114acdb0ba7fe6aa5ed0583fa675f8e890e40b6f24ee2070711b6d546d582ca069562e294e6fb1bf900c15c19abea240c1c887abba1e5e9905b8d0c6b0587fcc1150d2083875d2a654d4223a3badc347f122f279cb23c44885d0e9a192df2a41bc62283e9d59d5be3a7209e3589f7e7e08f8877785f2237675794e45b76b483955fa22310cee1cd6707cb175222862799028fae92763e02bbe0ae90c681da151de25aedaf88f66f1fc1608e0d6911b6bce008d0e34054836e7cc96aaa0fd4d6590627be1c857f5a4f49da9ee67711aa680841ed7b765ca62a38d70941746c7714585f446488269486af5223fe263454bc6c1f9c55e9ed0d504dcc0e01e23ec243b7d85ddc54745e41da2c904ac505e409e46e49107760ed897f722ed87a38e30c25cc4e13fda87230cf1b84e7dde736f48fdf83585e500f004c2d09626181f1e7a3613c518e6c4b1ae35b02a1a54735d88386ded4df6d0e2621001631245f858ed5f50a3b408951bcaa4c24282257fae0c89490957245a20b587f0f311ebaea4b4244c5abaa05822a6025ed5b29dea3ba57b7f087d88f89f86ed57d4cc0b491e79608366ea28c34b15d816e520cdd00ba91cbac64c3c25cbacd0cea1c12ebf1143011d3acfe30d389f57ff473eeb3c1f02c7012e82dc4ecca442db4356e77a8f558a302eac9b5617c1ef2f50ba924c894e7d1412dbcca85693465f08d0265b593333e96816ce7e0e1fec06819082e2a218c6d0c1e0eb4a5b946b107f89611163461b211c0a743307a36f666d04a7e36041b648218cb9e629f2343c6dd09209e64ccf5e11ae20283226303c9e52f9bb8d51a6b9d1ceecf605ba360f11dfbc16547751feeb2a4ef777851d0a1439a9c9e80a8ab9b3a68fa97d9ba479b9ab6618a8936a50face18f29bc035392e7995f338eeb78df01ae0b57cb05f0efb10a4a7e66e3de414dfeed758edf858f494058fcef0f16b3068d5f7cf45e4c5cc47ed0a1e568be2933b3a8bde88a0c820fac72b73c6f8de81c443c32c1f2cd34b92dd91700f0cd06ffa820efc0833ebd2b4b1553ebbe830f3d7d1a4a3363d9170aed82c56fd7e1567e1a0ff8013fa2b6ee6858aee0a5cb69b20ff1940fa00f9aabd90d95412092d487a7b5f94b6380da963f9fb1e7e4fbb736ef4e2571742d3efa790046bc58606e680f0c18cf14fe1ce7786c7a8deb5a4d6c7bd0fbfa804df3e5c16ce42441c8bdd36897269b8323f0e8ff7d0197c17bb442970fca39c03a983991b8c63ed8b0f0a0bf17272fad7fceb94f3f2250ae4ec91219be471bcb61e75a19d00a1a8108dd73b246eb06e3c59ffea4286694ef0468024f9c878da3b8372dfd7f7f80d4ca486fc949d3595fc88600f6e6ef68488bbe4413f526429a42864457d34ac4cccdc74a08e2ff4bb26942119e885f5e8197e955889f8884cfd6519c4e6112c0f951aaf26a5552d8387d55e461228871186ac7aed342c4cf839761ca06820c3151ea30fd2979e3fc42c1e4997a1e18627064d81bf936ca76bbc358b3a020421418a059cfb6f2700b76c57d3a8d7096ed6162ff1a44854ba8cc70b646f47221ae17434b3ecbc83f74ff7b5fc07aea69ff780dcd8fece9bdbb2bbde811c800e8d0c0e1827c937a333af32ceb9a0c8c5db918fc877505cee7ff0bc9f6bdb4109ecf85ebf135a30d7da7e88d26bcb8ed5054a2ca80de7e0c067f5233f745c9f67ea093099b39a5fa374d39374e2c1d968f984e7cbc13774786976628a8e910bd1508c49453060931c7038de935038fa876b449047799ac41bb27a670ca805f8ddabc5765d24775572e457fed8dab3338f445e35ba61a1198087e8e8a1078c1e295e17bfe304360a47afb6db37e0e671da57095a623c85f48fb76201f564abab2b27e01f658ed95876b9cac8d8f502f5911d833e2fdd0d78fcbe62a343348f5cfa38943d541179e64be5a7af6c352aee2279dfad3af757e0cd38e434ff9431c8537ba548c63d7779bf95ee8790a3e72cf4462369b1962abc3a41a40cd469e60f40bbab0ec3f6eed11e4d49b33f4c1ada21889ab9da16fde9d8ac218ba6233c3451d3d7807efcbb6fcc13cbba6db88c3a78d19d44e6ff88939855cad3e123b92cdb036ce930ad201708a940e3edb78e1fb2c341ff93c624b2f5a6421593ca2bdc9a5d42638f4185e7b938017ed2e73655aabff585a90f5e17fe4792aaf2d1273e7a21267d3c8cf1ce15bc5c093ca9941e45d87c471bd72eaca3b099f50e4382b0639007dd5a74672accc75050988515a5429e3a9fd5aea26cc30d89cf1eb5d4c219182e77f2668f960e6f93e91ab47030eb3a0c344959b47468154ba79ae0976ec1f1796f1fc7c42f428ba6e89beef9dd68eedcc76dd0bbf62bbb52b8cd9eb8ef91bcc631faa897c4c7b44da9d62cb8d739a2134661c6d50180fb089bac0d09e607a2e00a8e692971c216609ff6a7158d33e2467d9070bb8b46c3b3cf4d5c6c621f2d9d1ea83b86020ba48dafff26287dca04674f6f63b9b7954b9efd3e6b5b7e2ac7cbfc4e83c3ccaaf3936fc465cf79c448be43f9a0494a66343fdcad40cf32184fafc57d590591883fa3fd2fff967831fdf94fe54fdafc9f22d693ab6e7fd4b1c72e505d17394198efce47bd74be892a607e58ff5da7d59c40b7c30b268ffa8fd3088d622731ee018823ff31dd2cb7dd6fdcbf8dcd06374017699081b92160869ea8fc26adae84280bd91fa2f6c205ab1565ed3da44c3313dbf2f2751841d1930bb87da8533d54df5b35df8e16591de51c91b7c7a660a2d941833e278bbe1cba7ad5f2596db19e9196566315c99aceaa1e6894a2abdb4dc8624e480526b84ece7c144c4496da3ab7c1f103710fcf9cda0dfaa11eb8100b64d8e20fcdfdbbd4f0e944839ce248c2f881cac87dd55bc6ec0fc750e0a7d413524d4a6d9961a726c52815fce3e3e87cbf2159ffbfc3b9d9163c8a351724d99739dea7c5ddf82202b13e4afa4ffe8efd33c9413d6769f4035b8722ca0739f3ae948b139dc985cbaae8bbfe63d8cd76c54ebc4c73d4d8e1f3bc9058db91b9f3b519e1e918d0b74883fec03ea181baf8eed84e23966f6d6b1f50ff5f4110c4cbbae5b521db0b540cf15d494b1418db2163f3be26593dcec74679a3924efd90d9d425dc5add65dbfa240cc374820ad148a3b05c597b0b644dcd66bb4d2296d28df7e53bf3a2e04e111efb36e49deb75ca7d5779c1004aeb1764e6715bb50c59bc2705825328b18804b068883704f635e4043670736dad88057074f570bb68e2dd50064443b215cb1d7d7e2cb2ddf1fdb7c693ef6c790fa0fe995f7505f7f37965e93a80be947ee33cf3453afdf4837a0ee26ce857325d2d010bcb9898ef38e42e47fb93a1d9d3113b46c35f3758eb92de4695b215e3b29c67d1729fbc34461b6c2fcd8a7119ca0eccedcb4903e4d8ce6f76d51dbaefc6e7c8d7c9973c23c0991d3cd74d0b17d8e95585ff8aa57303d35b551c26945d5c19e4cf097bd6db973ab1f23fb5368cebf8aa07dcdd81d6a80c1e6b8543a6d8b7380b27c0c7af717eff689721393c429844f7493623b769a73280b55bef17328842cbb20077651df4db60eb8006355a4eea5cb362ecee3adcd5ca6c571336ee817bfdc6bb585ca9abd9248daa2435f85479312cfa1458298e2a05094ccaee89f0a6a683d18a1dafdaab909277256e9b3ad7efd5086768d33eeb9a8a98299b59e805692f2c5571e8612403bc187108c7be099c7fc760bd3405e958bd5427d5e8f44be6374b077ae99ab0adac48ad42cfadd7d19e2f20bf06097b7dde11378664bdb947c0f7ecf4f8834f00a9a6800b20dfcaf44d00314e58080b315a420f5d96ba4414144942131d940685c86615aa9d5a034d5693f497f326a98bd1831b1a941aa2dc954bb444a704d9b334d41349800793aeccbd28c8c66ad3353364c8685196c25c4560247cff6c602683ed77a13d1e5acb215cb76d7b8b7b8231fb97d2f472de731be9b7a382dc7e156bf6dd2e7a6c5ad20176a94d32343af06c09ebcc7884278f4478311bfd774fe3ea82e94152f9e90cb4c5c6cdb09da2da8a13cec86fb086e9c36e1773c7963a880741888ae3f21f7cfba63ec73464e34300b77c95ea300d6bec63e85aca8227100e2040f1a226e0a6f5cde2a27d39005da009d621b1a3c858c63abe714e08e9cb5d35d8b9f508dc37a1359bedb23502722922c70f8bc3596cfbc89032ec156e7bc86a7cb228b4320910c757d10b6e7093a322d81e73e95c3136ab14389a12a8df8ccce593c5b5a091f38b77940571f2c6945616fc6103cd8fc972411bbcb6f3e14b0e4cdfb353d2630a2a6e9e01754f6cf533200415ee60049c42ef062757427af5ed44429c484444e3bae921f8589f563a13fce1d9f4f038760ec634322d01c40c99e94484dda15aa6ddb1cdb75a602b483068eb01ab18ca84dc3b88438a7ceecda7673a1cbcfc7394b666f74e60aeb697611bf1ff3fc1c8b500b9c7105ce2718c04b8ac5f6d1629b6755604c4e9a80557a4c1208c3d0c04effa33904d013ee1bc953c11454234bef9863d4bf50bf1570ce8f9325dc1b2dab8923ee109c770c8c2443d2023c554ac5cec39fb4973123ec6ce3b2957da91fbd7f8bf13ae8fbed5862cffc15029fa20b35860d3aaab3bc9988d80328236e02397a25f4c9e370e32a617aa74789bf4e2d5b21e0f6f8090fc69ff72f15e98e1c477f7f9b62bdef4aabf35b1366df4a93789354f9eb7acfc33fcec1ed72363573dda2e9f69d409e3b9e116bf9cfb16972dd798d7665cc05bccf06e6bb55e58841fc4b1eb3d16407aafcddfce3c70fce2ff3acc33c5e43e5bae65c9d024d9e09efcdcd8fa275c29a9ecec68ba3c47fb4d4990b237b83f54fdc6307fa19ac10dbeb4b444baf1483760e566199af45b80f27a8e71e183cb1d4ebb1fddd31cc393fa42ecec43ec3f9df416b8d1f58ef5ce09b599834bad64d9b44ab4826a80c635256c01766c25e1335759780d78bc2e66d991756b9dd20dd2c0257970a6d17039b734f5898194aaa0e37af2e9705e35dedae7a4dfa1e4e99d816126509c034b181aa1db265727722e67a29159b1ed9e5c22839fce64a09645c1b58505fcfdb7184448c1472386486417ff87d513fa50d3c5d35c08894108f6351b548bd1d48f8bb7c8513ac508f74075973dec4bb07b449ae81785720106253fbe43948921df25acd9377782e75fbdaa1c2a4e241c31fac2d506f0878694f17225eb81b0479eec092083d011c3af1311d921a2846ca8d9bf1556e48cc4e1c78aecac77436e694e04cfa926ad14b9ed282039fc173b3ebbe5d866cf956c067a7eaf6d57a5a4852da196d35f85610865d1c299377ee8f537ec4db7aed407c10d83b79efd482704e8d3af3f1784a6274968cb8f4a568837268d065388c0ee2149b901ea594f37b7477a214a65a4f3fb15d7a5e2b91942b09fddf3636372bdbf4367632dfa68945ea2a01a7f708a10e6057ae17726a12ab000f4154cc11f0084a6d87258ca5243d6e5b79772f0fae3f311ac777ad8cc70c5031973abc2e01d950052903e876f938a37686aceb46b1540c82f13ef4baff2f73aecf277ff58e82dbeda96cc678a3d48a39cccfba9ab455770c2de61735ed9f375e6339e56e60f3d89649f38bae5862519b8c05a62d4ccf20b5adc80e95f66f5cdaa98258f5083dbfd6069fc4836d3fdf63b2e5c27106c11331574dd40ff8bd4b93c2239a6910b4dc630278fba0697c1526bda111b74b12c942eff4fb0be461c23a778fabc18a260c0c50b5b4bef7cf18161083b66b2d9a62466c42cf318e489a327f6f8e8cd3462d0dc0e34c03bcd4c77196837b0dab5d257c5975ddf78700ae18666bb24ab9ca50dbe48c23a592b8f7c1b545dafd232fe427a4b2443db9b86c8e007bfcd67ef8c4e4deda4945228f8b1ee48acc902327c3d0f7d6f5c2301fc0b67773d12dcc4f74cde6726299f5c024d4c51b67ee83fa5ce7773596a8694619d9e16a487105f7048f640b7eae80eec1188d8cf6b30ceb86e632e38e69d41df5600e3bbe851ca51b81b575a7fe0f693fa85c1e50800638dc3c57543ee1fae6f04a80bf0596f36c3a552b81808eb3f2edc250255618008c397186a75b074d87424301c0e1e8bf8f3f3e69ac98be4b8440d7f0949d39d4198ecfec0150d58c4af7a38cd21e43a3299133adfe39487d79c206c240f80e157fd71285293326b86a89333a14da0eaa3035a978be3bbf4241317ca09f8da78ff82c6fda37ad18bd594dffb8176f1c49d414f23970958c7c332c2d1fa4d35bf55aea94edf033d7ab913188d49ac9069c7f05c4c049d825302fd06e8f3fce946708e97d062925499aa8b25203db519f00e88738118f1e3d2a59ee70142a80646886cc6804fccb728e08a4cdc0070f100eb58325c7d420e7abd64f48cb9d57737e18684e5fadcb66b3d80390a1d2dc0595c9f9e55f9afdd7e4cb036d06293893adcf4713730d929cd8142729cbd5d7ad5957152683f7c30285a84374462a95d8ead25f0b58d79d281b2e50c8fbb713d5cd976d45e0682ff7a226abe72cb370acaed367bf666e88209f157b27b0fbdca264992adf9cef64307a81afe9807069940d3485e7a4b912cb585db6e9ec0c622172dc63ccc4508144c011f1ae2ab7bef61815b54758bc14c06e00c5b23c24141d9601195c95d909073a8a59bac82516f08ae8ae0b294beb6e47125ece6405c7a5df95efb52be8a087330196937e22c4dc4cc153e6d74418b3fd8949861920c6d99465da550da293f33cdee6cfe9b0297fdb20da76c795b039499cba794b9ff60499f6a2cc89bdd483ddfdc8af5aaa990750a5094cd940ac4f2e543bdcebd0326d197b0614a7ad27aee5ec5f492cc18ecfd78a9d3d3295ee023b1c3d35d112e1e235da5aff55d11bfb55f2ba563901c877f1290a462d8566c8c86cdab63625e23cd9d6bee5e2276822e851dc22eebffc011566e5fff5d26e052b42ae0709e4467a6140e08e558ca582a285b498b70ea45a4255a3c5ce649af58b5f10677a53fc8f0fdba1dbdeadcbfd078924b33923d60231f964733a57f94041e4557e96353f977326a96bde126ca9dd1b4086e3b180c9c0cb356ff86aadd90239f6a748fda0367df9b42d7bdbe12367eef4062fa7e2d7c32255b8cb3dc73d8e0319a7424c2998ce7d0271881e21e4f3ecf1d21345e52bd9731a0773d154dd59ffe8eb59e86f0fd5f8d7df72b96db4b53f9085fc6b25dbc60ec49eddc476e0969741bcf664e2629aec064fdd74cab2991f279b8c4a5d95f2bfccd6eb66686b83b3eba9d67d95c3b06287af3ab4748c5a50f1af8518e36c44a805dce327083b4999575c7d05183eb9d77011509f7a2b29a6bde73b1de22f9ea401a7946b5956016edfc0c8696eafce7b9ac5464db4fd45d520711e0c12cc20da548e87ddbf59267c93bd10606bf7fec0f50b3bfa305caaffd03ddac0552db571794f18899f1952ffdc9fbc3f978bda203fd63c68b6197b61df8cf18234946f0b0512653c0553fb32627aa33c068d70e58c2c1e7aa37002a6746607e8c8c2e76130f07c0d977e94c963d6c497960e5263100ff0a7fccd07c9661d22c7d650f942c3849d9f0ce69d725a33d3484412d32ce8e816f5a70fed65cc0fd121c48a70fc23c08d9d458ff8cc351684306fd3c257a66ed3234d87e542a47283da40e8c12e60624ba03c38e169976fe9b20eec32edb3c5ac0cc8d45c9010b717a8251b4c33386e32011c84dec1ef42421b0f02f48243fbc9b4849e0952afb73f41e003a74690cc4b2dd08512b3df1a5bf380403ae21f73fa9df2658057558c0bf7045d989cc73fb480a41b970b8e8b16c4fdedd5a02504af9808a4f4bcdf8a649ad627ae3f37a01b5e02a26bce0c1d50f722013b2f9db0217d87a580a9f43ae7775d8b50974e80c43ce779b5907896e784e5bf8ae6878ea79bffcffaebd87b5e2096dde787c987da6cbf7ff73f7e9b68f7ca20bcdff6df1c155d7dd17c4af20291c650b4092bdb7a930605720ceefe82b4bf6fa1bacc4d9d6df0f8c092a251989bf770bca7de088d00191e73470d07da4a12ba65b135e0daccd8ab6896772df96825cb4cd17ada0d915e91fb7187bad3c44e81ee5942fc189935e4a13e4f095778fb05dfeffd7f8ce3efecfc55ecf32e4465c77702dd617274672fbdb02b38a96cf307e0227bf17148abf0dd77db4c1be88df535def13c46e7629330c9008115aad4dd706b6e882bf0281a4e282cb995eba547d00bc3d967868ea712c7ff1ea6f12a2f0cc3c1a1ee4ad27fe2240474305b0d618d120a8c17ca57e708828eb7ea9bb25221404c0c15c164062d4f72ce71bb2cbf348c847645e165a80ac5806a2cc1ae3ea4ab7088f7444b042d5600c893ef65592a77cb2e032787e68f73a94204892708e442180065d0daf4082b1964a067fc9a7049ef96bec0600ec26f89d6fb19031fe143b6acafa8a7a2c37fffe2863f28783888be80d656149beb53034e664c16f76bd7a791c462e48d377867c8cae4851e8dbf471f4ab6365f06c4a72343109600a7b34f36a16b43f4a60af41d17077af72902bc1aafe8259eadb5618c4cdbda62ef7703b2a71c3cbac6ad3c2711f8b7d130135cd2c6997d2368b21177605709621ddc151336f8cdb2117f486ebeb6b176effa4929c5fbd14eaba5df71350b76c291eea6108bcfde86569d63d521e08e2170c98e68b69d3c8b09d342506f9158f12b00c3fc2ad21e4ca0f8fc3e082f262a9815c14d5f00e0d461a909372d4281d8c4f2c470c30ba56b2934c12a02660a3164b4e3a5c8b257e1a65a67b86b9ad620225a1e7af803cfcdf04ba1a3cd65974a5d7e37c038e28003fecd428269f827b18502c26b6f9cb5d2386ef5142cf60b71cbe1e6a2c99ca824ff6aeed3328951702e0405b2157e2e73fe68034f23d8165beaefa81aa7ebd59f7bf540668568692985b61e8a175dfd59dc3cb1db9dd237b2ca507e7da6767a6d34e35b827b4bfbf2f9acba3d13f91b252ea837ddec04020cdbfc4721f67ed6f4f9ac21b0a7c8e0ba7f92cf93ffc80ac94d8cafd5da4d4401a2b721da4206b7a1b383f2c92f24a4d75f5468daf8ba8bdb3c48bd423b8dfdeb64e1375a38801cf13882110c791097366f63960bf4b79ea51d14ca43ea9be1723ca33758fe4ab7b5dad052460f3d3086a4350dbe06c9861ccdb6ab67219651c6743260de971cf1192c16a7a08f146318c44a4094cf1ad8fd538a7a22374b90f0d38756765eb23b6fd1f0b3822a02bfee12bce3fbe5db710b69255d918a8be8d5b5a69dde78d6e3a386cd406caecdebacf3afc4ef8f72d510ba6da9d4999a08fa365634e6c9fc9a429580fb168a5d01a77dd41c2b82a04abe9d492cf3d31199d0d8cc02fa1e988808c908d356e283626c5cbaa2e36140a46c3abe42a7b4bda1a48d1701fbc232dcbe5ea3ceb8115201c835ccc39f2e211b098b410815672d704297da0c458523a7829381c75d8846470c8e84676f41baf79079fdef8785238416cda2ad853526956ef78de799e6a9d2bad082a9dc420128ad8fbd30ed45898a33e2fb42ef8d701da831a82dd7a611764aac12cca3977b0ed451a0b9ad6b32eca91d72e62fd95fe8d51ee67699909ce3dd8beddc8bc8fb8a1b1c73df46eaf7ab2d1e11d6a323331bb3034c42891a00bc763c6197b8e9df542bac7c42b54e0562ca14445453671ca1c4819e28a25b712ebc81b2e33e0f76850208cb4e6b672325c93119f27cfe680c14e3d8fea94aff40df487fe1577514527faa925ea8d1a82e2fc642c57153b5c30fc3f05a78718fc2eb7ac2b4a0c7af77716bc03c6e0187164a849ccc520d8574ab5d47a1fe13272a59b4a44e98657165c714a841d153af1e841d5b46222d89ea380373ee179e160be88b2a379f2234842df0e5d7d56daa081430ea5f8e768655fa6a25742e349518ed569ff4e2a764099882904fad5ad95d1f0c807b2c657efbe1a309b784cc8cbb7ad4c8bc7511fc1358d64a3b484c1e416a880d2424e517300dcf24caaf84b008c2d9f0f91132ee2e334277dfb03cc4ef28d2b5f78d84d879ab748a3e89531ba985dcf2a663ae1ddf1ce87646ca0b691274db6af1af36260ee86f4814d849fb85b00232e1046b052ee516f1e3682152f70500d09dd0866cf60d5530b15632d4e15cf87d67e03ec71bad5eaeff5aaa95a210aa4c1e9971589d91785add4c6aa5ea093cc0f23b192f598f135912bb30f131d5e4d536117b9018c281554dfad30e555ea4f18f09aede99cdde1e07690919d7b2d13ae4d14443508cf7386b61bb32dc08e168598605e206029a8b124b247578998c244adc9da80322fae2487f3701c7b9434fa69e0be55812b737083a1f11c3706c50ebfa38c828bef052b2f5e6f15b191452374d2b6e73175f000f5d744a93d860a674c48f049b4917f98f60096a095bfc887f26aa18f59e2202c364a90965a991e084f2834c7095392451a079ac9b2511f1876b9ec3342ba08f8fb0f4481f342ddd293810a6421faa61b27d266f00e1b85042e2603b51bcfe8d7fe15266151ba3dcb23174145affd3cc7b4d4f871038ad97b0e2628d99ea105eee112a14a014e85729d5724fa1ec28a1e2691213bff5700e13bfaffcdb0449b37de5eab1350006372bfe05a10697cce8e1b437713687ce2cf4477dbb173c2f4a795d307b5385b9849abe96156828a9818cf312259497690d0798c87ef2ba6bcce0163e63032dff98bd3698c5299cb3315da39564e7b31976ff3ef5d6de4a307330567835b1382427a4bf77b820aa985176a4650c967d516f30c5bc929a6e35a79a3fc44a851ee96d0b748da68b18b78a5a24ae09584d1d11cce27d839cbcc11c3e46c61f066635c32ebe816692d85b8458369cf9b0b60987b9a4cb0bc87e179a7ef51f5a4bc9862ed463587db5c6f28be56bdfd3f72aefb78c38b418e0efac7b7613103e0343684a1110154087339c14a0b563fbbfcb80d25dc2500db9ea45f67ed29b75171eac6f781132fdfb5418ad2ed7dea7f17b073d2286ec7b9801770d1059b9055f5481f456ef816c3c0dddd08ac305d324bfde2e382deee1b5e1adb78314042849465faccec06f14f9b741ba80092898e7fe80154e078d4ae03d1115b70d745f38333a678cc916d8bca0e140928c209a949c38e2122770afe8972d64077ace22d464dd6823a54cc2e97290a031c4aceacab9e389ed2fa370c78aa71ed28089456477bd8579a0902082ed527df662c362ecd8cf6a6875472bf5d2747b7d1a590b2de621ef01e37b794f42226ad99cdd1736a80bbcf6a5ee5dc8fbd17336101adac6fb210cd7a820257e9469bc1683e3a2288d6091cb35c3c93689edae913c051cdd370d6dca965d365ef1b1d4c580842a02886fc926ed276eb7b1b7876609c0fca25811cc2cc0bdf4cd59a066545172134260a7a9e6d33635cbc3513d68f4cd8882d4dc6b2f0cf50861cac223854edde3236463a3564504a8d09d4ca48eeb3754d491b78a6001ec4c0ee9fb2291830561e0a825fda7f8be874c987a85441dd4e6708e990d08d8c6782911b64e0e86319c67506af476dda057b74345717bc1ebe5330aaa9bb5936fde7963e618f41fd1442fed7422b98169796e0f568387a2209b8a9f05f481a7f2e150d6e673ef5ce7918793438addcac60f0d1a1f0fc4969b210d6bc5508be5a214c26540020a0158701dd4deb98a89a581dedc0a2debefbe21ac6c90a028e403b66013110d6797f2a4e058bf0b37725ce6e9949bc87296601b44e485a041db19c82be0aceeae98c3c2d890261e96e2c86adbd78113b61761c1e53dfb7acefd390841270bb6cad0b438f3ed783d6ea5dd8eab3d1acae73bc83da9bedbdc28f670686a09d0136826b3330407370ccd6c356c7a8d68a66a5a65821c941219063328475d43137d9dee8f5997c0f9dd4507b84a7de77b029e526fdbc0df89f46aac1ad429648a8cd2218b4837b8cbb56020b7cb5a2d7c3fbbe76d27d9db14bf407bc587dd3901f013de4605d44e94d886d950424a01c05fd638e64a433d9b754cfe7e21590837df62b090059634b626a604ca6d4ccfdb9a0ffe0da7447885f0c6d7ffbcc94d9a7c8f148ddc831ade85adbb421b8da3afd569bf19b3cf8c8771d639863509780b7c185b49846db145ba145cee1b6d6c7e47f66f415a8c58b49fc82e477e3610bcc138048af66d01c80b50ffe898fe438f1b966e65fa7ee60df016e9194fcef87bc84e7a843494ca9bb4c0e7db60a783fb6deca0851bebce189c84231bc6f0d208da77f4be1ddc63ac278ddbcf924412ab45774861f84012b8ad2dcde03773fc7d8a4da5a64dc0b28d15981bb7462aa9c4c13fe072941f34f300b1ddff13c41bf1b572e5b6a4dbed3e66b3d0073275702b0889d71981d80cb321f39eb299b7a7be49a14d79c48a53ee6882cb6bd7ae8f077785947ed68df0849421805ee8ac1078b0fb322e7c947f02f2820471e92f3bbfd9df18bc09a6e1d28e7adec84cabc8d950287d373f4169e8d4f76fc61bd18111472ad23b4664d326a56219f9a49924e5d8f8a883f2ccc7068131cc2c5e876637be58100897e51ec969eb4e3b9a0170082e4b8bc14e08cc0f460b4261eac66eda504c778747e5448c597ef3cbe3d3185f7806a44325f95aa47e449835a76844eabcbfb7567294742943235aacf56ea131756e557976241bf3e219bebe1f0dff31050ef87bea5fab9f25673b03443122010270d21d0fcaee29f6749925a338ed38cd2ef88ddfcf2a26b72f7db7ccb1c6c6e7352d72cc90775c2819945e4099079c6c1c792b32a578bf94add7e39d7afb9f6d3af79490c4b8921d564cbaff6d9c6375d5c9d60d4d3a932562d08573051335a550f91aba1db2bf50633edf43d30300c34e8d2f7a3612dfa6f9c666ffe88e5f1254299a6a0218efd48d636315444bf2d0cb530ab9e940b25347a721a93096c7bfb3509abb851a34170131585e315f9ded2029f3611fe337f5901dbc26bc45c93c1bcca83d78fc7c8a9ea1522f1843e6e3bea12782ed85b1bb187723f0d6a5e463131ccf9251c7c2a0c9479dbb841e9ae01aa5f0d63168ae037dda017a0537823830f024c30100000000000000001c131a21be51637c139b524af2e73da6ffbfadd1bf9aa6769252262953e6deea6de020e002d01bd97be705cd074308110867aefb110510b9ca6f7fcb8ae96a492e971d3abcc7ae2e50fe9074972ad50afb10b2a3058a1f104289efce525ab936c980d207d5af162bee95d26a64417ef021a5fc65759f56eaf2a7ec213d7b1d4dbead7b4592cbe572d9b1a30c1f24b85c80cca0a484e402888877777777a72aa13c062f878df1858e01b481a2075e6e8667576a6eaa41c94323cd53c99762d4db4804143c2473f49c85aebd952eaf807207f4a4d4a97369dcf05a76c0db3df8767c2956af2875d85dc6172f75c61729a7d0816d9717aa9ef29526a0cc41a55c27b94135fb6b062525243d9a87142872b0b37b923953079d639ae4725994381c33a88ccdf23e4b6d935c2e14389cb2b4e6547de237943718f63eca3c32bcfe66492e97cb650709c42039e19102203d7a809123c7c90d728c71b92481e2865e87e63d0fdef2fba4286d48c8ce5196f291da31324261839db37c638aaa5a7d0441810700089435acfe9e51aef6f2333d450dca7ab53a99c7f7feb407250dc7dd0799a63a6848764e6f98aa7fd2f00c7a5e1372a3a72ccd7a33742a55c6f3a6d3a327a50c6ec95595de7232683e2a3b69bef7cd2d8761a34db040198371a7a335c8e81fe7538122065f77c7cdba5fff5fcca3848d1450c2d0bc6696e2b5c34dc850c07032ed3b4aeda5303551bed086689cd0f1a4ee56142f1c4fc52799955477b39101a50b7e76cc7f1e9dba6f45e142a246c6349964c90e13285bf865eba4b8c887ae8f16d0b3fab7bbbfb3fed6a06481510fed6a9a2d746a29583845695ed1bf9fc3bdd6a05cc1d8cf59e639fbf4a1b20267de1eb3e65e994d96024a15d673be62c56d8e52e45458ab92a6ae49e628cc2c230719394490230439c6c801821c4d99c25284fadd17e51897cb32718a144cb94967d68366145d147c21a58955dd1839d69001050ac91935196d83129dfb539e709e8c51eb720dc5090a39e131948e6e4069c24a4566b537d3de1d6742db41e4692cad234e455982db351a37698d429a4c09c84c9dfc4ce8f66c1238b965ea218414f72824acfc5c86db67f120db13ca11d0dd5929b73be539fc1423a094961abe7d43c3a7daa014a12da17af4ed37a8b3cb402102a7348ad3f4742a5d883204bd37e336b754c33b3fa008c1b441f464d24a78789c1204f38d745dd264ffa6a8070508966e2994b6d4f9f26bca0f4c1f4d3edaad7d6d44f1819a3ef73ee4c99c5da9e47d945186905e647662a4fc93bb253dbc586b6dabc785d22bdfefc29249d847f12f5da8525da7da24376fccca457e42cfa7d9faba067171ccad63b6d97e27a9bcc5af66ebf3a4962d36d9baf32a2ff7eceb3842482dd4a8e9d9237cffeda3c532b7eb9c648ce99fa333e0929059d829c44c9509edb4b92c8e2fe5beb68dafdfdc5824fb5b6719a3562d42060bfb457f666d2da357fd8a4b567edb6e4eaa7a7285b62e5d6dd4d2cc573984905618aa4964e6ad53652a569c52a9dac79651acd821ab307d6dd69b4ab9b6cc5285c16408dd99f4998c4e2a5ad5ee59ca0b4deea12284a062cd9b39a8ad70cf21740a54689d3588be951ed55b0831459f44ad1e69e66aa32f0542975223a46a392daf1839c2c801c6172a082185e61a2643a6d59deb1ac5ad56e80d713a899ccd154244c1981c25649441274fd2502ce57e56a7c2841a3d0414a8522ace4dfd3df7da65e808f98499c568df9532be670ff1c462e5768ef54a9fead710423aa189d2d89e851c216c3c42082794762e2a343308d984522b351b723753ca5413afcc2367eeddde949b89fe7e731c6f79153af3104c7c5fb23e7385d4ba71c3a42404de63d7894949092e17374c4afe8d931572095e6ba9a38873d9691f4ba04ea48eefd9e50bb9298324a412893c596bdefaa3ceaa1d3972f4e8b1c4c8a1e3720900144228917c3affbebbd57a4a267eb97c206412ba9ec8d5aca2a42a958f10496cf2a3ca4d13a91e6322815e4dbf1eda734beb432061d0a7ebecf56f5db52e843c628d57bdbbe3fa31eeceec8510471cbdb365c6f05ae719cd10d28863a956df52750c971b18421861b767893719369eeb4fd010b2085f88b85f79ae44ffe9861045a84cde94dc6fd7f45c48220ee139aaf6f6fb6a66871044187b746937159e7bfe05be083984619307615f9a63c9d4109e16de4aeeb6d4c55e88646e6df20f52cb301321f898d39d068f575abd419ca14e7e5413f539ca08429d9a830c365ad4641e883e9a9a944afb230410c896fdb679c3bb1ad71fce1ca2777f3f54aa4f83103f24c4cbac6a7455a9554f42fa607aa9d739a67195fbe183b1bd7f7cfec75bd420217b38777eafd52c5d7aea7a388b9bbce824a299b33c285d8c263ff30e1f653c2c753cb6d6e293d21b6442c81dcc5772e2d74f6b25233b9ca3c74d7af76ab39e42eac0dea85c2fbd1f5ea683310ab5b2a74aabc7780f42e6e06b579a9550cfa86b92835a0a2573322d7a64f4e380bcc6fffc3eaa433438a8b74a96c6fa6acad707216f40ebd54c1943b79ed6b90171314dbbf73a884685b401d52fa6b9643de79085b02119a3867da74bad22b4864635a554426b98e8243520840ea3ef544ee8cfa461751bff5dbe6733cd1b84a00121b435ade7fb68a61a849ce1a864b4e9cdf38c49e78d1033a8658a971e4a7d26cb60d894eeada3c3275122c39ec56e8e72eb436e6e32064ecfbb960b9d3a32130363721f5c98ae49ed874115cfd08c4aca3f19da4108183a75e6318cb6d6206c1c847c01256da5ded45d2e37e585c575079552fc53853a07215d783c5ffd8a99d2dfd124840bb836f35fdffab4ee77ae3868175a297d9b3dc52e824a2bd6d6ec5b296693e53d188c0a2b4eefbbe56ebb66eb694165158f76d3a07b263a354645158d2c25775a6674713115b9a92cd7b1790f5450d169b532ebe07295f6760d0a544e9136f1bae23368f574c6a0620a64c5cb24d55e6921352497cb574a913aad29e49379cc1309a1420abf950c3799cf3c6426b95c525019852e559d5ee1e9bac46b061551b0599a1b5dc995c2631e544271a6ea903a3ce7a4d62519a9806231ffb28550a2aae77c41e5138a10fbd79362d64b0fc404154ff82bef4d757635a77b0c2a9d30d8fc46adc99590b191c38c1554389112338f7a4d67082924b95cdca86ce25662f74bf50751326f4d18a725b40b757a57938650c944724eb8762d27d5c3f9c68e98949ca811460e32749cdc600c1c5430e168a97edb56dec8ad2e611ae1d2b4f5ff3593154b20d37434cabacc9b79812f5a00844a25fca0ca84a6bf775c2e55a850e28fab54ae49374f52368993ccfee93e6a93d01d49ec3a7b8eebd435aa3a7133542271474db732a5e62053238d165420a11eeda8aab1dfb59093ec50230d1312e4a0f208b3cabd5eef7e4d52ea884b9c473d32b4232625233658262327de4623f6b4b527a5b2ed342f362a8c4875ee8f1ad3dc9eaf5fde832b8b607f4fc5adcbbcd49ec44411866c312394cc507a3720a82462131f33ed6feb28454872b9b8e16a541071b0dd9169836c1b13a2e00d93353a5039445aea555bb9a34db474c2230c5431041a3ea46e5991a9b3532984e9d55655bbfd73d48f5408f186924166b412fb300e82d75175f6d7fa93784972b9ec004282cba5642b82e8ccdd64977059724c924a204ea2be59734851fb6940203b7a3d6b9abc6e5b55fec00699d25c4c7e28f78f8d338850f1434a6510df3d3fc9e592c37998ac71811d3b76a8205d9246bb0f1b90804f70b9b0093b1b697c21004354fa7052ab3e7e7c8be472e9b1466250e1039f73c6c646a9634755871b953d9cb7ded37ee6ecf5e10cdc819051d1c34a9de93e93634a34b3e30c1d1fa8e4412573508df2f63f6407b27ab8a08287db631c2537f6e678fa8fcb65073b1b28a8dc21692e846cce227d745bb103e3d9f4b3b86e6ff84b4e46488004f97146a50eeba057793eed2f2d394919153afcb31e7a9458a165e97390a1230c10ec4023c71a394260460e32749ca03287a5ab5625831a0f553a24ce3e560dc49801af13354c4c509183e3e99f5ba68d5a9f24f93142860ef62e11a312074bba4e26ef47243b40a0820a1c4cba7c546398d5f94292adbc0155cae42b992be2a775c3012a6dc840850d0b081a0da8ac41021535a4a25c9bbe94f2fac9111f3fe206906583919192930e54d230810a1a467898ca19464ade4719628891818a192c5029c3a2b965c6b8235c6925194678fc000302953138fb28f1c1e307180ea888e10195300079c36710810a18be70ca9a7c9ef7cdfe2f12efcb2555bc804edd19946e4d1fe44c72b95c2e952e70610b98b9769d2965891262450b2737f1fc69d47b984e72b900a9640102152c30a0728543d8966ac6cdbe65a2a162850654aa3082800a153c35213508cfdbb51a921e3dd608c9c90f6fae4c6164011529bca7a1c33d6b8b88ad1285f734fb0953915b3d2b50484b2db27975bac71b559e60b05f5942dd99c8df9c804c4afe73761ba13ba709caa47cb5c9adff3a2d13d4a8f433338891a7bf25f4aa6934c9d3c1d3bc1525d8e2c677a35eb141c75492e0ea60a61a2e544102b329b438dde7c2757c843bd4fdebebf398b5ae6284844ba9f54693e542e8548ae0e9933d22af26c2f79e5b49e1a7d3e75c65089a8e901e3e36eb246245084759b1a14edb8787b81284e56d3589292d52aab50284566dd23c7d2626f558f9c1275f6374542d4b84a6e283c5d4350a15d3ad4a47e9452fa636e45f99a957f302193e6696b9bc360877177e47edfc4275ac10364517cbac3ed7a7d0f50f52945cd87237ae727b8de15639b040c1450228b73000c5160aa0d4e2747beb4a78301dba2d018516c76be998427a32b5bd8d921e231ba0cc62011459b8ea2373965aba7c496391e9e02353459dbd66c142295cf56b6ded415586e4726183f20aa392a3a58c253fb3d05d715a31aa46b85c9d0d2f90e38b1c39765ce08b1c5bd103a515480db532526db7c91c56dcb72d7329d7ef6bdb0fca2a4c2d71f90f4ddd9b54857276371b32b3768ba9c85cd3b7d468b283a8e855ffcad1ac75323ae514abafce97b96b4ea74de18a52af4fa6cd1933f583520ab57ed441ab104fbd1b19145298b61ea32f6fda1de483320a375c8717b77bb9b12f971b2c372e97145044717c6e7f5cbdbfed51285a1f95516bd9ebdb132832d91a1f7cce4fecb25cca5cf1e51284e20963fefe77d0d0498b4e270c1f958bafef4fdc84c289bd5c37964a574d3a9641d944ea3d4679755fbb41ab89e4f9e77475fddb1ba36402e5aee5fcb3cae9070c2898b845e78f66ff38715a92cb65a4470c2897f0b5709dcdf1ea665ea0043976e828238dcb05488e2f6641b1c4714a6fc3f44add9c1201a512880e327cae81f858970b0b289450c6f37c7ae35cb58eff48c9c9c824b60d139bcbf4dcc80cc9e5e23dda7bf4142892b87b95dc8cb7b42f3912fbb949794d420a24acd7d6223d4aa5bac324970b8380f20833db064f4d8d93f608e2c6089093a5868e128a23109e3caff85add28a3482e971af0e8cb45e19df058853702c4c47ff4701233288d38c998b45d21b34f46745a7596ad71ca22d828a35c647368cb1471b856cfcaf46ff8282511c7fcc97063baffee22827d4f93911e3facab24970b90921f40a01cc2e439e82c736c25dec41443dca9ed5f5d6ed2742f19500a819eae879ff7fcd05308b17cb5fd51ebe8cd7a918cb8ff889f04f93108b306afd1bc1d62d44c72b9b8c90f165004814b4dfa63924a679b4672b928811288ee95c8c752bf04b5c879cdac4ae79a52440998c86f8c79f07cbb22b95c449260ac8c77224355a907042248b0dc93a7bd75cf72469123645ae35e997892ed522246b03e3f6acc69c57476448aa0e8886cd7f7daff598408672564e73636e88c1a1a224340bf68d520ba6b43494408bdc8fe4f7acecfc6251284e4667deb8fe8b1cfa4210284366e78cc5e1db1b78bfc20b1ad4d8bb956ad84e901111fa435e772b4dc2c4f3b965e9cfbb5bc9bb9dc5091174795adf4c81e35422ab0ec023d59a1a35ff5a5f4905c2e40d4b0e802f7b7d39a7be5c292718f42b5ebd3b1f62e49c3828b83abc7ccd31dd1f06fd1e6f752be1a32f563165ba031cda9d2b3eb3966243dd6481a26965aa85173b897e59fa44bd1420b4bd9cac7284765cc2592cbe58d12931320dede2569cc42f3d333bf4288ecfc935c2e38b0c8c21c7d5d6e9022b95c4ede7b5c2e3bd44803880f165862b16c356dbb6984ce50de80c7c362f131cd0fe2936586e515eb7cbb3dca93f059df15481573df39a64e6a324b2bd21bebccdbc46cd34a72b9dcc0cdc28a54e9c8f8717e745c6b59c51d4f978c5c15ba8834935b9d5deaac0ad2820a88c0920adcbcd3bd0aa126e368523202020b2a7a319faf66ff7d4575811d2f4006021c50415a90c371c00348902fd2a8c0142ca738e566b9937d9be333532cdc7535ad6d68d06a29d4f4b321356a48d6f8020226256f21052adb536c7752af662579811b3bde5826266080a1a30515d0416219c5417e9265625a9a44e6048b282e3f550fdaff3ac64f32120ad5df873c516e8f9291cb25041650e0f3a1e5b8d668583e71544aeb2cb92d8569871a69f818b178e2f156377223e46dce593ad14bdd52fe44fbbf5c24256770629131c6941eef7567a135749cb81a244016196ad9c42ac5abbf4d2d8b26b4b5334fa1f5738e2b121e2363583281ecbede68674debc582093f6630651aaff75eb55cc2283c84fcebb847d95b2cd1fd9ffff9b748218324bcc4701e266bf4585c72c6e592430093b05462715288bf8d2942491b1d0438d0024a1c5fceddc85d1fb9c03209756d880df6e9b36cd6c72243126671ee7e2254cf864f527272b9a42512dd67edadbe4e65f82e0d0b24d261625d37b80ead661828b03c2275af73525ac3c69a8d0c8b2312f232c888d89cb4d70e7636d2a0c118407c0460099646f85e5ad7ef7b9db84b02e4c464a991865b18c17cfddc27bb4f1e6fb22c62994d623e3597923f15b150bac3a698d90b0c4b22f2ae1d51b2a5e4fbf323c8c80e13e4384347092c88b05f56489341fe9edc2c8748b54aa93f0a8f9d446e3262e23e7c942186c510ba304f3afbf5e90fb3a510691d75d019ae3eae4542e42936d77b385de91a352c8338bc101ef4750929347a028b20cc7fd5d5529d4b21e31a96403cb3ab5b8a2a3be52f092c80e8e6db3e7cd4b8d1b54860f9c3e5c9b7846792de2abac0e287f449efb01325c9089005040c3272840182765e3fd478c3cd5081a50f88aa976732fe778d4c0d0f58f8b0ab549e47c8a0d7742e963d7c9f31ddf4888ff1747a507fa72f1def328a2ce501d3f69faf357ff8a0c1839953de6e5609e91fbf83a551eb0a719551e8ce0eaa959d5995cc2d624575409f46d3992937077d8decb0d0c11d8f42c629e92ffe22e1e501cb1c12721be3567bae71db22075f8ffea0e9e5ee47dfdeb0c44173d73cf358ff5c5a0b1cee0edaf31b7392feea0e58dec09890dae4cf1e84060e82312c6e7845b9da35d15ae6da6d4899fedbdcdd4ac697d8c02bf9327bad54deba2439f9c2b28646a755d727d6f385520d6869ba4ed49b6958e3ebfb8df1b6b3fa81bce16658d090eb93cd4a898e99fe3f03ab75c69f7b13d188b1430579c3628644dd98e930a356cba60cfeba1e2d6e942c64c846fec8583a766d8c5ac6b03aa92dae4788794cb288612df4e89f9419c448d7128643d6438f94af1e163028afc14e734e32e7273e561b5fd83e8ec7a0c694fa98f42525263fd8e28583e7981b3c6ee8cf24205df03669f7ce51529de679f4f0131e24361839f136dec205367b68b6ecd46fa501e226962df0b5f1e97450492e178b1652a342c7933aeb931ab1646121659650253f554e4d62d223162ca065b217598d4179e6070f1bbcc07205ef74fd8b93b1328396c90d2c5640f98c2e137725c3a6ab70dc2cde553d9aad695460b5d01732543dd46d58a6a04c2d83f89c578c161d2016292c422bdd596ac1c01205957798fbc60c935106b14041194ff7e9ac6390a1b34e82a061e22765d0c0f2846554f1fab46f6b6c12183ad8d9e8d163b9a1c6e592162798676e5e45df292574134b13bad7da503ac71b1d6a0b13d0bb390a213a43867cb6846ec4a996eab0f3135242ba6456395faeb33209cbf89b51b9faf8de120f2c48d877745f3d8971a50d4a7a0019f95162c226605c2eece38db31cc198c6f465d8dc2e291b019d9532f88d2aa53b0f9335ced07112048d352c45e05de38c3ed549beb7482e9732c2b010c19b4f6273ecd2a7ab739621a8a59e792d25a40ef26fbf5c4ade4719dd8307891897cb0e8b100cee49ed8951155ebe2508d78d798b8e22557f29c887418605088a67da18cefe6432d52d3f587334cd418d0aadaaef61f181f759c2c3065150e985b96bd4ebacd75ce4e5853aff26d7fce43ab4bf0ba3e96af5d42b364b4982464517888db2c74f9f30bd762ed24a637cef2c753219322ab86085286daa3b3468f66b546eb12ea5d308ef0e532b26b95c7cd860fd58155ba4f4345c85ce8abc16692dccb4c88f53d1b2920a2d12552e2aa369ed2a626516ec692143e6689fa402b0858a2c0cf33fc25709754a843f2ab1508f2ca131ca157ada27f1c1a3028bff37c74c313284ccfd8a67c7b7f4c7afe71fdba8041738d4809a06100d21f00504dee8e14303b60184367014e01320414c0a10803756030600c009902027204000bc8d15a40d1fab474500404cdc820200bcf1630edcbece6bca85946f3689c20b72b9b8e1262335e0d1237de283c71938e4f0c30d8e0305071c4e1c881bee46088e37989376926233369a671237f841db757654a7674e246d5845899c54f2a47c0891200e36a07518cdf51c256e6492cbe58d1fec86f33831391c6b303c4ebac40d35181e273d4880ac91110b8e34181e272624407a8c8c5870a0c18c54709cc1f038a9018f0e323262c16106d5ea868d55bd0e1f3e1e4719fa5c377eaef2563f85830c270dfa4ea7568d288e31b4f1797d94149fbc651c62e8d4480d273db647d56be00883f12bb6a4f4cd8c42b541891897cbe30043224cac6e8e0c19b3cc0e1de0f8c2e13c85baecfe573274060e2f2485b7675e757de0e882f3e164a79073a175900ba84a8d59a7f97d486f0b9ab8baf2d150e19a6bc18dbaf335080fa7cb82e2b345261975b6e3c281054bfb4739b23aad8e29c9e512031c5740bffbc4c8ce525b890538ac80a9d7b741e7ee94dbf0c1a3715441ad15ab1a6a5b4ba119e9b1fc04481b3e78b08fd5638581830a66ce6abb5668d01d35055b77279dd2336e4c0d6630c28619bffc8c93206808000d38a4908caa794e95689f7b39bef0038e28a43749d9e23e95aed642012532a6a23a88e30969901a3b2b6d4676821a5d3fded3280f32c7d184b48e7b4acbecabee2e2618feb5f2636caded79a47df0f8cb65470e36729891c37fbcb1860d4a4c4c4ac2d0f17e02200180028e2598eafbb5ce5c09aad0161bf3a8d323c224606253d8abf4d7a3df0c7020e1163d59f25bde6f8c6a1c473087cff61529e4fcef46405ea7271b4d5511231824388ae068ddb2dfa9ae346b8c83088657dd93fdda479d690867eda042862f172a7e213caa3346466705419d63b3b7a693e9bc3880a0de4ce7abaf6253ae70fce02dcfa4838a9a112a4a03870fd05a676790d9b43d9d5ed8ede72365b86ea13cbce05de77cdf9d7091e12e8e4a36a978dd9a251b125d2caab4f0968daf5ef45c649b7b2657875cad37354470b1e770e726a4a6ce5a15b9c5276db4639602e921620b4c4bc7b7d515a68310c8ba5c6a71e715b973ef12a1857f42d64453a6925967160939f560a2598548531922b2f04df39f1225777ea5b138e5989039f9236f86c5623ec708613a9057ac72f593cc9ae9acad2bf4ec39e9cc3a6889fc5bf19d06377771abf38b5120c28a850c2b42b818ad1e945661f698b36b59236794902acc1b47faae0bcf5caf402415c996deb5c9db1388a062a554c396d2b03bfe9540e41427dfd423b4dc2c99158829da0e311b134aaeb4bd147a54ab79ecde7f73ab860829d0e24df8bf47cd5aea4791fad6e9df73eb38a9928821220a4729f95d375abc4e23029150f4c195f6602b4f7745a070577578a93cfe849de165fad14ce5219a40c413ac0efbb24ee6927e9f4eb8a35d96fedff03fb3e4c447199c58b7545d9b34334436e1eacf0ecfd3244d2010d1849b63bee9d8d22fd3cee37f8d3242100237802c1bbcb197cb880d4432716e32d1aff74a5e407e640c114c9829d4449c165d42a93463fe3fc820dd64094346191ba3a2426f30442a617c1db57a6b95b69f915c2e2397cb1960844182334470b9b4fb8f120612860825143ab3c3b49b28779d49a04b9d47d76154aa4f9204422b75f759e7e4e977914870b35b5226974242f15969fce822f36528039147a4b5a6a3720f29d4461147b4adcc448b31d171f30c441ab1bf7892b975ea72fbc41881082330ffd6f2abe2775b26b288353c8ecb3add73bfc4474c4a441491a9711132fb181049c45937bac8b5d11cde590cc45f2082884eed980ce6ea21d056b3f17da5228658e4eb4e426cdbf6ba440aa16ed2254f47f3eb394508a1d2419fcc112f547b546410a6ce067c35ff95a92e4c7b431141683a1b484324108b3b19ae85c9d87f1b1140a874368086c81fd4b89d3a7886fee412f1c3c2e3c7ad35dda9847b02a4023a52a40f96e98cdd7e97f15c8a06ae868f32749440840f46153795e22a913dac1df4b9d42e4caa5c492e973444f4702c8d531e3aee6896f2b0d4b09bd1a58e86081efc2cbe1b4d7f1688dc016d2275941f4b337bac043a60206207459ad2323b9466ad51913ae0a1f2c3dc3345db4b840e2a21b31ca91d740a2543b2e324c80f1f65c840640e791c294a66ea934a6088c8212d8514553a2b5d1d5a6df828e92112874d438a8f632e36a6431081c3b1f3d3ffdb88102b350291371c7363f4960b993fff2737f8b1d0b85cbc5920e2064d894e3faa1e37e7549136a4ffba5eba0eb733621136283de8a083300dff994322b2868356cd4a6e6866d22349d340440de9aa68e9d7b3278354901e8f44d280fc6914af51a58c2e23392268704384dc245fffb1cb65471b25674000c882c0193f4ad2d0a144ce80c9eacc1e3c75503d532062063fe73165a34bbcfc2265e8db4b75c6f09257a99115889041715a8e0c1eeb31d8762684fc6ff17acd3374888801533dbf32b25fad52120903225ca67133bd9f80042260b85b465d3f52ea7c527fc3cd9081c817fae442d657e665d84f0d44bcc06721e6661fd4a9f8ba80cb899f2bfdf33a087920c20573849794aab943997207225b50fe277b65b7e9d2cc1e8868e1e0fa3a475bed2b350807225978951879bf539b57df228860e1f070229496a35397961a3ac60882c8157e957255bf866d219a1510233b8c12f70f214f55c853e57b48cfb2a9472a30ba3c7514f2179982be1be2958ed9c44995881414a5954c2bdbec6d37678844410fb6625b43d926dd8242bb2e6b5f7a50e4097a7af2a8eda4d2cf53c409fe2bb7bb5b8f48135e25ebb3b093b65a5633449890af271bed51acb901896ca84412d4802c0c0603a140180c0402c114cf024311000018242813c90302a154a6496e0214000246442a505c28282226228b45e2b1481c120983a1500cc5201085811485912c4f8aad00e48d9e40e9231d24de6fc91c1a6d0f3f117c84911134785dd99edaa871fa5e448368b0ceb9e8f0d81fac18c1c0139c2ed27ff8bf860250883ccb7f7ca15977bacad88371abff9183167dcb1f38d5671357fdd7b451ad21c20fb0579f0fce46f9042dfcea1ce2f0dd6584e032c4b824591c468fdbe2e5e882512ce2ba63455a50857325903c0953f9a2bf8baa39d270d929a8d7d76cc5dfe187cc677b5a8aa05baefc7666e6b40d71ccfa428cd8b10f9ec0f1059bec82b5c8599b22d0d3936fc706153c4f6c69400ebe558fbb4150331665ed6d7475b1e0a3dbaae286ad7b66784663025a7c0f25c8f5aa01e57e8e8860e13762c8db825cac7ef82745d47e46ae6600e378c5d6a1986e98a87028d832d4c93255ad2f407b103fbaf18c665552d2c8d8dbb8f6969106c22c20de09f6d7d132975ee9eb099cdc71588ede4906f0915b7a21cec61d99cf1376f106f7a56c605dfba6cb0c317f0e3ff8701d8b27c6d775c4096e60c756ae1cf497cdf91e7058c20111e56791bd0b058aa7bfaaa0af09b7a3c73382cdc21524f6a1555b9d1a33579a381d43e830fbfae9093a2ff2a0a2d4211330b785b49949c946616d5981f141c216539b67c40bc259999dfeb4cdbdcb8c8e1a45e9a98e98ca044c5b0fe4b81aae6c6882c480e20b3362a51475f2ebe881787df26e39b004850457ef530263e6930146830cdda448eba13fde48085f7caca644ee35f5f0597b60ef9a3cab3b3b5c054851ceb251fbae43c4a417f98625f2d4bf7ffab02f1f4291ea8ed282204c10b8560f3bb45d04499b305596bfd9126a1cbd10da748f5579bde2bbaebd6e5f806d6ea9513b356458ccda6eb374915db3ab77633e40db21f4ca8e793f12a37eecc5607349b3bd1436365bcd8d7263117b3d6c27e8bbeb12313524196474324accb02fc6dd9401e4710dafd7b2be189221823a9d3ac098dd97ad23183dccc4fa8bba6e7d48b31d5d4651117a6d23ad0da028930689b6afb51168c96f52658d7b048353eac48a32caf594423ebfd04400f978587cb4aea2281350ababa62b82af421a862a0cfa3da77ffe7177252978d079ad029a402fdad91d5ce37da432b40e11d7163be73a8300c3fe1c822af1462beb279db13738dd01b9844b5bd85388b526bf81e1644af6eddf7dc6442d3943b5e8964f70cfbd94d29468fa645e0622c3d7269f42f7875d4ab402fee0bd514af10adda59cc83a415b17014121a160d8266cd51994ade8e40e764cf163f4c4dec8800395808074342860f11ba907785b87cc6423c034a321a42bbe7a474dbfaddf6dce90ea9deda34054aee7c9537ea78f6fec40b601ecaee036b8cb91ec019564954f9e529ff6a85b900ede50fd29b29f87fc7d838646ec0e2b1f81b2db8fa54bf49ec4bffeb9ade0a4807c63e6edcb868db69513b2d065e2dbd633d57393a684736579b18d3275d0b75cac2ec025c0e6ec451864c4101ce70200130f2941b0dd3275e46926faa1321a19cce82054b5ba68034afec27436e325c2fa4f7b6e36f4ae71dc1eb996a39108bcd92765cf4584679371c70d2b784297a48ef12712fa186de31aeb612e2e9b337c3549e03f08b7529250dc0c1a2c812b73318a3a241db27d794d64c8acdc499fb485e767c1c44cfa966c9c5e49a34880cac6042fea8c3418f70299fd02a1e5f2f92e1cc4004bd8c134c36651a4bf818f9b0be58eaf740a0987496fba547150c4476b17b85c68972461688fa2958d3c51443aa68abb4535c7cdc93d4a5d65824967ea960eb2720de1c3020fec26e2a504c783ab5371438f5cff93de3711b4d6592aa09f587b03f49cec22b8fe55d4e232a0c95514687dc2752825a6e9733b21914fe0ca22fdebb99171669aebacfaf3b422b218a1c9479ed3dbeebc5217bd181267090e0f23f021f41b0f301cedbefc2080c3eb67f720dd0fded4dc76c1dcce86488b6cc04c2cf09ea12631f2a6c798c2420223644a02d20b7af4c6dc2948cb732f35179f059c2565ac06c1dc6430db2fd206c56b2a96a289031f57b58e63579ca2d42af37a930ed8ae9d331fd4be9c6d7bb4da0a2c37a41596a88948063c6a7f6d9ed68f77c226a5274a4a782c574a0a9d7758f70cd4c9847d4f0fbd5d3b81206ca0d02146f5873fe3a2378b12e55a2df805aa5f68467522e9cb3f2bc3fbe23f8d4d180105b42eee197e59f7020e436ec5fb653136102252ecf10c20d94130db006e742e61b19919121eccbba69e74c75cf7e261f2c486e4a3cf75ce75be3493ca9b5579682e0cad1b48a020217b58695577e77b26702ac1c70b78d03ce20130462f2932b3bfa686821607615e36525cc723137c53055f4eab204bc28429c6c428f29dbdc722c39888afc4190d1675951d0fcabe9093d77615f4c720b9e857071ea5609c92434e4f8295617d0f78cbc4e0522ccd4517013d76dfefb1120273b0555ccd1997cf8115b439cc051f214ad9491aeb35f1359a2b186969f345847c888e4b51f4ac1a0aa5ad2199115a5058c60ae976e02b80800a67d7e84f68815e17411d2282c0d86ee0966cdc9c0d35d44cf3e733505d5d926fcba486603eea1fbeb1bc0fa867ddf78d894bc4c4fdc40e199a7db2cacce7ff7e10578f33b74fd9cb103e47b631e237895b3e3cff73641193cf19255104562282f5507b23d399ba9462f742928285e5e2f6daaf85131ad8de9a193d278a9b33791c1f530086a77419f9e5cd4b0f31b260acee9f8d4b3f09a578e996bbe995b6e6a4f1e36de606ad61de5e8a2e2c4bd755b0fe13e26bdbda2c21dcb7777d72c91333f38171a496df65abcb11baa03f09c0120a01d1b76e7f9d8b74cab39582710c2013e602af3143baac77c2a1d3fd47b596754796126dbe55de815b0a859b6ca36160502d18041688a559140d3e59aea339437c96e1a0b620a2bef251674cb841c980182ee412f16456c60dd692678372e1c8173d658d4306ac98e6c2bf97001b1605e373d2891bf5f44688e26894a591d25f834e9417ce6486ddfcbcd13d996c7235417bfebbe9f198bf7bf68ff3d005e239ecdb2ced7efdd7a8cb452f806bcbdb542a236f1e8b51b0980127b5d550b83b49a06f465dbb25321bb1558fe4072ef3bdc78d9e30e8f579aa00e410fbba95628b10186b3d28dd5028fcc3bac23a098dafda87df22bceff1994847f9fb8cc8916fcf9c6e1020c94db5894a7a876b4b73b3c8c66c852833b5761d046d6e7d82aa744639ea857780b602f862170e22aadfe735c7e279083351f9ab816ba04d686d1a4dab9a4d1ed31031fcb08adc6da8ea2485e80095ef5505d6b87197837423969592477f8d138111bc33e019125d316976f401b7f8e1cfdcbc0eb2b1c1aef3407623586c81086827b1d09d017a6a6ee032162f814856e097ce766509018248195231967fe99c8adc593d79019043de35698012027c59e6df86631d742f019046b82115a79c63b648d6a1844bb231ccf910a314f7ef7df1f8d55ea040272fbea0c65f82e2218da33cbcaf67c1247efca507a74fb56b330d737bb7a247e7acbc8be4595d873e5c4662628cd512e06aa21294e9182c4e50a5d0e61f8429bec61e17837bce9d70251144c42710a48cea11a568a0906a120a704fd8abb25625d06aa1530313447740e8b4582c8cafbd193127477d9eaead154340cd0ec888f3b55dc78ecdbbb6ca698ca660b774b9bfe7a136c532d720d3153a206a74fe89d446c4813120b28ecf0f65d43c7d41bed0bc389a4872b17df7d1ef236b0bc0110d7078e82a52f74ca9f722e1a61db4f8b6b622547efb3508db50c292e44667a9d4cbcf530c776cd313156e1589fa51a4e87fb551d80f408f859c4273624d6e5b3e13a8a82be3686d239313b2c908996d8c107caf25777eedac078c2cb6719574b74f82a41a889f46ba5e9da38bf8c404aac68282b4cf4aa5651ebef34959a4b75f8770e13ac3d03a78368096ac25f55aa38fe4332f8ab46231971dcbbb042fa31d3d60d38874f600ef071ebae1d5c264f1d16e4c825a4fea009f87992f96e9e58d3f54ab6e4deac35ead630aa5f54eb020e439c9e1bd8886042cc8cd1ed82eeabb29dd06da8211eaca1ad7a2c1196e3eabda34e9338bc91f952a03b513e6e36792c5bfd924d0aeda40b3b94ff58d692620bd9872ed733a88f69bc1cddd1778177d86fa465e5c8a45bdaf9fe6a97d6a918de4be93315746173965c6557de27def31b735bd519d1b41c6f5e224a6b249639342ac6158f2e075a996766e08879374be635928ce26a3e0aa0151a10fa8deca29a3bb484bc216d71a37c716bd133fa0d48c90ab9a634bfae76cb7a1d4d450c24dc3ec4e0e749473f5dd98e7f2a0b5a2a78d95b342dbb865725bf09a0267c842fdacd986fa0e4b59bb734380b64378d510fae07af23abff5e007af29b3066eb3c95eaa54948a7d3a8870b353862b9447c41f2519ecc2384ec8058b20c93248d0c086c4e398b12eabca874adf68577395baa7ac8529c9687a734025c5dda0ac7df2ca3505cbb20f6163a4276e854926c2e268e77bc9896b27dba0f59ac70413a5b10a6a41cd1f45a9155e1d4e7f7fa35b3e788677d8603f0d96a7456ee08885f43c761e79504c1723a6848f57eacc3dd97a11641330e77113fac7effe1d05e5c479bd74758f049b8738669b68b110acf4f89162fbf2c821f514aea2e501e49442ce0556ccd75e6de30d0cebb62bc1596c92bc8628b47229ec3a8a3d015cfca1de18808fa4b97ef8ac1667114982fe983ae8a1f37bdf18c1c2e80892ba4fd1e00710d81d25160398430709d1b17ce614f64115af51083726072557bfc4304e4060ad35f1c608a27a8e02276d5bcadbd2af3510efed5cd2729b918844586a0d42412416a5f03e6badcc2277772131e50674bbff56bd86c742827cda8d6bdc71829e90d66eab18406dfaf2a22ed912da5f39d565e1fa5cc4b101aa0ce205be3968223957bc62b7f47f8af1d37fa0691f6aa784d7a90ccc56ced85c7c34ab55a2ebaed20de9f2582199b604c9b3abf9e3baa5a1ba1e093365589525983c7ea7040cc8c0fb2f8b7d48fc6ff011c54eb3dbebda263dd8791f213d70a1ee1bba21338422facad234e298424c4333b941e2797deaa3ded38d43e6142ab9b8054112d02e04621200c57f84a89bda4f933707038847d3604e173065fec95bd8c695f4dc85aad91af7e64a265b2311a83f5b62995f4ef2705f96bfcb7ba782e6ceb53e32eba2c7df68329ab95379c275fbf60a8ba62d0294ab12ea506e1daa1f5197137063ba7a7c051c89573080f5148cd24be3ffe1a9a67c5389b782a5610dc37854af3480fb60cbf3ecc9712c56e3c0ba07648a6d9189d81e82e3aabeb5c9ce7d11fd99c2432bdd74d6746ef417c54dfdaf503bcc6d031215ce405d5b443820eb29cb69011fe30c986931e99e6490b3bf314b43db581463fa7b9a6686bc9ae5d598b2737228a19e8a27649522d5c5ef84a2c6b8b83635024b5bbc8fe7965574c16946e79e452dbeddc42c5faee3ad0d9286f9e2d49fb8839127e5295cd48cce890bef12279cbc0dcd4c3c3f9c31ed09f71a101ffef8fa4e7286d55913434ec3f3d9d86787ab2239651d6f7b96c7ac66f233e41b093266c95ce04f1bddcb85980ab2c6a6c8f22f9f0e20ea6b7623f42ca283634c7448f8131c7b2d9ecd8edd041c08bb81ef130900fde805a2ddb0f1f671a961718c3372208443b3e1a7dc0c8559f2c43d3ad89ff20c2dd471788d1d0229c078a6ec6edefd44bb523c498831df7afd30059286e127bbb09d2070d476bdaabc16437eb9b212853a9623a7a9c1e9341df3b8bedeb337e6824d431dde0b407f61547f721e417d02630085dc73a55d5c8cb72a0dc54ed1fa6062e9f866ca4ba9f4f088a51b2a29d3a3191339652807f9e136ea70eac2c7970478c34d8d0f7e732383cf7705e9bbb44815a7b9ab44c6342ada0acd7c48a3f6d1de9afd0da95d674b33eca7db4bad4f1ddbaf7ddc0d24b223f87d3aabef9179a9fed0b85d811fe2a8526e740a1c443bfb3d6dfa3159080776a23ae993ee2163b5cef06b0807826a248fee6fa830eb7b83c285d3dcd77a7c9a8e9fe30f0443ee17d481962176f39b5772b6cb3ad63a28e7154410dcb727f32a26d5edfbbf3c286ee521dbc0781d0de9fd9851647588859e989e9fbe14d075e0e00ec14838d22428dc1bc51ab827b49dd4be4c8f69d58513c0a13c2a64a636f423ab5416f1418a1b2da325113fc7dbb274240a69fc5dca697775ce4611e6893c5e4920c2c05a07f1ccb71bc81f2011fb4f0d5904a0f593093b8c268e80c2ec03646012abe5256f9dddb977dd7825901d8517d2034390e7fb6bee51665aec74f2439e4332292fcc5eda26dcd3c59fb999c90efe50f11ac15eca62addc713f6defe1cbbfa80f1d74bbfa45ab2b8c0d4ac32cb19c5dc8b1390975e7439efffd1a10e1580a61b86bb3f50dcb61987e9df5c11e88e8ab16d4aa4fa999a46aed946ae6d266a8bf59c44b0a72031addb395423d709a381c1065ed42df089088dfbf0757ed105149b11076423660760c8e5cc4584f9f0e97d205c62eedfe737a22a41a528298b616819b213e506b5f80097191e5c0439c57d56b9f71d11cca624c354f334d3dcb928ef47c8968043c1bb57d44777c7ed0e38c6ba65b8325d6f69c5a989d36ca2da48f4534c289ffdca1158fec8b9aae741297815c5bed761675870c9687c47cf45e13998b7a2a85102915828a883739109bcc80d88c69e793761cd6ef180e73b7bf0e05b747a8b053ae7839558c382d3510a8f0af846815e25469ebe988a210b871377e89a11754cf2c87b056904650a5418ee5932d4a0369ef817e6ad19780aa8b9a41dbae0321e2737b4ef68254a77b9d76a01528ccd7214d092fc36d36e2ea2d396faba97aef5ff3587d1b345374208b1ea924309518a20542b51738faf8e3ef2824c9881131076e2514a1c513b76750064556a16f8d81af081c5641595ff4f21822bf18c5ebda3b99a35108c66fb90cfdec343eeecdd15fa1c844057868572e9b85ce3462abbf44d51c8136edb4b051f648113e334ab485d5b88ef35e7e6ce12d130ddf8ea3ff3aa8cf8bbb2726a0f58f8dfe1b2ece9499b61bf27e3a28d2595a46646148f685922c2eb98292282967b2522495222e2f04db7a0dbe4c565e621c6941073c3f66019154bd6a4573559a4fec9f3adcace7d99db483635c221fb675bb5735525a0c0a635c748a673925f58e7ed6ba0ee3afe0d37b29560cf377404e3c8d6898bb8fef9bdbe0fd3d85c5bdf5bf16b0b4a56e5394f0dfa45a43e1a2b4c86df9d58f1c2844be10c9a81d425159838847fdc893e89536e28464e416f1a8151cda24276408a2efa0eaf6dda22328f695e9ee035bb85bb9eb6d1716de89c4f6aaaf5687e773289d1aac2101bb0f636fb95b6593d11b93066526848afb7b97bf62daa32101bc1513ef2d1d84fd8439b55027b93527bef960b4aa52c60cbb4adbeecf67c6d25f117030cae0259ba5d8c5f9e9a533e7d61de10e49ea2ce01d9edc2e6db383a6c12428ccf92eab9c4f55d672775d0a4b19424e5d65e6d185a3565bd25d2cedc03532554fa60b4894ba2a564644db7b809d9a31f844439c262afc760ecdd396cd018ddd9301fb63123c0400618b0244afb965de594bf5682690af5133ac5380b037b38a647a4ebcc1285da6c7a74189f76a0626b2dd55c392a26a1f1cc2807ab81cfc21f7b3b3cce4b27148c626dd6ec67173913685205831d221776c7e130fc2884953ce2bfe6b3309a97a63da5822fc961ee3b4ba278393b8cd900c26a533592cd8ad1364f8d078372c3ee9960637abac5ac5b1ffeac94a266f94e798465111420524c1016d43b838353d4ae00d8fa8fc4da86f8844bfdb2d18eb86e3f6134df3a5f914c7b0b55075b500e5333872ad26f100229b1535370d8f2165f25835ccda65ed9ea82444da109f28ab4c3a1196dd37887a2f6a30e90c46aaa31a8be1126faa678f03915e26fb0485eaa424f53d4bd5921e99abe3b84971d658ac5d3ea15c369c4678286b5d87ad98ff3b1f7e0bb45c17e86593a4eecd24b805d25f6a8ebd680e2af5e39f308c24c9d49082bd52410196b7f6e9cfe1f908511871e6602a141cb61d4a2a9323e1de74d2d8eb5daea041edb421990c9b817b387a11a9ec4134e533f0517d6e9357affb275e496bd4135a9fd8b5b4a8f6f8909bf706170befc3a84d3db3a81197ff3962af78bdb72cd5a407f59713537491d42f0653542628eaf8d79475713e57217fb858e9ed5717f1239dde154c500a2fe1a35fd06e6fd227a31c10939034fe1eda4d563bd98f3a094889904cc36b6144eaa7e5752596901137c402168e3d6ed94cbf3a7b2d57bec87e05809d5b0b2d50ce4c1685fb534c14af86e4b36695dc583862e3cff4ca7b4e2abd85969207c079c92953810687bbc2f81c62da36ef908e4f4effc2af287fc43a73a26878c4ad221cbe04a75c8ebda86aa73ebb0abe92a8bd3b31aa646d7d0fc8e7ae1da3b69530b4fa929344dea119ff4b1a3e1ee643be563e9e3524cf829071d0f07a9ae2e906cf00f83e6691c1a1ce788402b32b1da99c584df360224248945831ad6a2f73b71a58fa54b87e75d42d130d4c2c23910fcd99bd62f9f9e38227b3107f27fa8070089f64fd12a138b1b457df5c151758b1a5ded108842bf6ab2a4ba691fe73413a47b6c36f86db4c70eee4619179699e1c399744a3d2dbba6b606ef1e1833810fe4c5661eadcca4b63188323e251bc90cce16d13371eabf976d0300d8e2c251d9044a94cf33ed8b6f4a24d4c9b8830bb4de3a9c771728cf65b9c2a27da2447c625d9313b5284aaaf6af7a6d10e891a2b761a624b43bba90ed1a56d77f20c572c70ae97d0746cdb0869b14718476d5c64994af7761404e517bf6a158a9ef644c3012623ed3d0451460fa52e4873c3d0f42483562a2d1a14032f2830c1abcb6aa16189877ba7d86c21306eec59150b71bfeddc86802eff71bcbb63792c1c416ad708694ffffcc0896e8f1f3894db2952605db48af8200bae32c5c6f4021db0431cefc588ef665deca1d7fb7d338a9c6ab57df852471e0554b396bbcfbe1eecfacec4b7e0de64c5e3ecb40e605229979af44dd41921498393542f609e29443e3813750766598a16723e45f15d2b75ca733c273ed464c99eebf58928ac4639bab8169807d1ec892baa105744f30e6d1b26496b2336360414e944ec434fe7c3036524b09606f9215c4b838f619c8ff7591b1eb2f54b02a109bf6c888e0971bd26823f1cce008ced0306360491a0ca6cc0ad243bd7d109ed092182617dc10c209f1a62e3d0b1ed0d0a4b0388fdf3eeaef5f318321e4bb1dc6c79359d63fe3cbdd0deb4d3908b17c713f1af5b94297ffdc8ba7f0260197c66ac0ed1eb3e5244741cac97b0fbeb47df03fc2f52ebbfa52018c9d73151800341f14581c4c704735165c0b5dd060bf1aba21f947d1e537b0adb91af274d4052e8c4460a0c948d893cfa8ad7f3abb45c0ed9c07ccfdc38223028bea0f48550", + "0x3a65787472696e7369635f696e646578": "0x00000000", + "0x3c311d57d4daf52904616cf69648081e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x3c311d57d4daf52904616cf69648081e5e0621c4869aa60c02be9adcc98a0d1d": "0x187c63b545dc15066a4867f5d127b554d2bad49eab73303f550e99ea11d9ab123ca0e9a263e02d8b504808a67abbab811cb14fb376c0f79f5b7d6f7c2e7dcb585d8062ffd04e84549b541668e4974f37f79f490ea846321e8a613c3406fceff565b615416b0c34c5f3d1451a5d44390325832154ea20196b152ea5fa49346f5a30be16ebba3525a83e5f5e49cea331d5bc15c723d1dff7319b42837524b40c59708415832dcab4bcc60023222bbef2e222082ba69d53c9a870129e1c858a9ff87a", + "0x3db7a24cfdc9de785974746c14a99df94e7b9012096b41c4eb3aaf947f6ea429": "0x0300", + "0x3f1467a096bcd71a5b6a0c8155e208104e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x45323df7cc47150b3930e2666b0aa3134e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0x57f8dc2f5ab09467896f47300f0424384e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x57f8dc2f5ab09467896f47300f0424385e0621c4869aa60c02be9adcc98a0d1d": "0x187c63b545dc15066a4867f5d127b554d2bad49eab73303f550e99ea11d9ab123ca0e9a263e02d8b504808a67abbab811cb14fb376c0f79f5b7d6f7c2e7dcb585d8062ffd04e84549b541668e4974f37f79f490ea846321e8a613c3406fceff565b615416b0c34c5f3d1451a5d44390325832154ea20196b152ea5fa49346f5a30be16ebba3525a83e5f5e49cea331d5bc15c723d1dff7319b42837524b40c59708415832dcab4bcc60023222bbef2e222082ba69d53c9a870129e1c858a9ff87a", + "0x5c0d1176a568c1f92944340dbfed9e9c4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x5c0d1176a568c1f92944340dbfed9e9c530ebca703c85910e7164cb7d1c9e47b": "0xd64279ee49fc11521ab7272190f8c11fdff7ab554d5490254f292613b36dab30", + "0x5f27b51b5ec208ee9cb25b55d87282434e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x89d139e01a5eb2256f222e5fc5dbe6b34e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x9ea3e2d10fdb9a071f2f534d51b0961f4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x9f76716a68a582c703dd9e44700429b94e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xaebd463ed9925c488c112434d61debc04e7b9012096b41c4eb3aaf947f6ea429": "0x0400", + "0xaebd463ed9925c488c112434d61debc0ba7fb8745735dc3be2a2c61a72c39e78": "0x149286ca034a2523b7a53c30e433bc148aa43a4eccbceffe2569df30c915bf666f3692687b80fcc7293aeae47847e234d9744a81963881d262d044d0dc7080f05996a666eb5d96e39f555094e37f32885f6c8fad30e17bee5fddb138843285c237aab55f57a977dfed1fc64e88c242c9a6c7f02abe2b581fc58f2bbfc0bdaad224fcac9ce9c9807732f092a84efde7cfbf77b4c3abedffadfb12cc63c6f6836605", + "0xc2261276cc9d1f8598ea4b6a74b15c2f308ce9615de0775a82f8a94dc3d285a1": "0x01", + "0xc2261276cc9d1f8598ea4b6a74b15c2f4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xc2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80": "0x00008a5d784563010000000000000000", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb30f432e556098ccdb36523fba06e0f31f35dd904386a0ebe25d505ef09af4d39041afa1d994a23f5d": "0x8415832dcab4bcc60023222bbef2e222082ba69d53c9a870129e1c858a9ff87a", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb34d055ecb91165e1940c0cf083ba1d081fce7c1f38f5344a4eba4ee5c13e1dddcb9cc6acf74559710": "0x7c63b545dc15066a4867f5d127b554d2bad49eab73303f550e99ea11d9ab123c", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb37b746d1630382cce7eb4de08f44e6077ed072e2fc357aac007150e3b73373434c47ec56323b52a75": "0x8062ffd04e84549b541668e4974f37f79f490ea846321e8a613c3406fceff565", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3d65764583f266e213c33f8c4c1155958d60d4d52a5181677da96052493d876b747272311b52cfe61": "0xbe16ebba3525a83e5f5e49cea331d5bc15c723d1dff7319b42837524b40c5970", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3eb95783ff6f0a37a3c9ea854901c1b36bd203400c90c31a69367316f7deaeeb14037f2be44bcb118": "0xb615416b0c34c5f3d1451a5d44390325832154ea20196b152ea5fa49346f5a30", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3fa89c02741dc50541e5dc06d8418a0dd695bf3a23ecdc219103a149a863c1977396bf0697a474015": "0xa0e9a263e02d8b504808a67abbab811cb14fb376c0f79f5b7d6f7c2e7dcb585d", + "0xcec5070d609dd3497f72bde07fc96ba04e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19501c5a4a768b4a98346175726180a0e9a263e02d8b504808a67abbab811cb14fb376c0f79f5b7d6f7c2e7dcb585d": "0x1e5dc06d8418a0dd695bf3a23ecdc219103a149a863c1977396bf0697a474015", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19502d953118d417dfd361757261808415832dcab4bcc60023222bbef2e222082ba69d53c9a870129e1c858a9ff87a": "0x36523fba06e0f31f35dd904386a0ebe25d505ef09af4d39041afa1d994a23f5d", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950652674ad6ad0c9a56175726180be16ebba3525a83e5f5e49cea331d5bc15c723d1dff7319b42837524b40c5970": "0x3c33f8c4c1155958d60d4d52a5181677da96052493d876b747272311b52cfe61", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195075e9e0b78c442d2c61757261808062ffd04e84549b541668e4974f37f79f490ea846321e8a613c3406fceff565": "0x7eb4de08f44e6077ed072e2fc357aac007150e3b73373434c47ec56323b52a75", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950835a67e13fc0821461757261807c63b545dc15066a4867f5d127b554d2bad49eab73303f550e99ea11d9ab123c": "0x40c0cf083ba1d081fce7c1f38f5344a4eba4ee5c13e1dddcb9cc6acf74559710", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950ff050f714a8d75096175726180b615416b0c34c5f3d1451a5d44390325832154ea20196b152ea5fa49346f5a30": "0x3c9ea854901c1b36bd203400c90c31a69367316f7deaeeb14037f2be44bcb118", + "0xcec5070d609dd3497f72bde07fc96ba088dcde934c658227ee1dfafcd6e16903": "0x1840c0cf083ba1d081fce7c1f38f5344a4eba4ee5c13e1dddcb9cc6acf745597101e5dc06d8418a0dd695bf3a23ecdc219103a149a863c1977396bf0697a4740157eb4de08f44e6077ed072e2fc357aac007150e3b73373434c47ec56323b52a753c9ea854901c1b36bd203400c90c31a69367316f7deaeeb14037f2be44bcb1183c33f8c4c1155958d60d4d52a5181677da96052493d876b747272311b52cfe6136523fba06e0f31f35dd904386a0ebe25d505ef09af4d39041afa1d994a23f5d", + "0xcec5070d609dd3497f72bde07fc96ba0e0cdd062e6eaf24295ad4ccfc41d4609": "0x1840c0cf083ba1d081fce7c1f38f5344a4eba4ee5c13e1dddcb9cc6acf745597107c63b545dc15066a4867f5d127b554d2bad49eab73303f550e99ea11d9ab123c1e5dc06d8418a0dd695bf3a23ecdc219103a149a863c1977396bf0697a474015a0e9a263e02d8b504808a67abbab811cb14fb376c0f79f5b7d6f7c2e7dcb585d7eb4de08f44e6077ed072e2fc357aac007150e3b73373434c47ec56323b52a758062ffd04e84549b541668e4974f37f79f490ea846321e8a613c3406fceff5653c9ea854901c1b36bd203400c90c31a69367316f7deaeeb14037f2be44bcb118b615416b0c34c5f3d1451a5d44390325832154ea20196b152ea5fa49346f5a303c33f8c4c1155958d60d4d52a5181677da96052493d876b747272311b52cfe61be16ebba3525a83e5f5e49cea331d5bc15c723d1dff7319b42837524b40c597036523fba06e0f31f35dd904386a0ebe25d505ef09af4d39041afa1d994a23f5d8415832dcab4bcc60023222bbef2e222082ba69d53c9a870129e1c858a9ff87a", + "0xd57bce545fb382c34570e5dfbf338f5e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xd5e1a2fa16732ce6906189438c0a82c64e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xd8f314b7f4e6b095f0f8ee4656a448254e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xed25f63942de25ac5253ba64b5eb64d14e7b9012096b41c4eb3aaf947f6ea429": "0x0400", + "0xed25f63942de25ac5253ba64b5eb64d1ba7fb8745735dc3be2a2c61a72c39e78": "0x0c92e8dba6b1cbd25e32a786a128406a24ec3e7f8c0c17c65e7d146f14f0fd3e69fcac9ce9c9807732f092a84efde7cfbf77b4c3abedffadfb12cc63c6f6836605cee0137a698a9a616193c80550185ea91387f16208544a8b47d477703b055b4b", + "0xeec6f3c13d26ae2507c99b6751e19e764e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xeec6f3c13d26ae2507c99b6751e19e76d5d9c370c6c8aee1116ee09d6811b0d5": "0x00040000", + "0xf0c365c3cf59d671eb72da0e7a4113c44e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xf2794c22e353e9a839f12faab03a911b308ce9615de0775a82f8a94dc3d285a1": "0x00", + "0xf2794c22e353e9a839f12faab03a911b4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xf2794c22e353e9a839f12faab03a911b7f17cdfbfa73331856cca0acddd7842e": "0x00000000", + "0xf2794c22e353e9a839f12faab03a911bbdcb0c5143a8617ed38ae3810dd45bc6": "0x00000000", + "0xf2794c22e353e9a839f12faab03a911be2f6cb0456905c189bcb0458f9440f13": "0x00000000" + }, + "childrenDefault": {} + } + } +} \ No newline at end of file diff --git a/resources/genesis-schemas.json b/resources/genesis-schemas.json new file mode 100644 index 0000000000..787d05b753 --- /dev/null +++ b/resources/genesis-schemas.json @@ -0,0 +1,156 @@ +[ + { + "model_type": "Parquet", + "payload_location": "IPFS", + "settings": [], + "model": "[{\"name\":\"announcementType\",\"column_type\":{\"INTEGER\":{\"bit_width\":32,\"sign\":true}},\"compression\":\"GZIP\",\"bloom_filter\":false},{\"name\":\"fromId\",\"column_type\":{\"INTEGER\":{\"bit_width\":64,\"sign\":false}},\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"targetAnnouncementType\",\"column_type\":{\"INTEGER\":{\"bit_width\":32,\"sign\":true}},\"compression\":\"GZIP\",\"bloom_filter\":false},{\"name\":\"targetContentHash\",\"column_type\":\"BYTE_ARRAY\",\"compression\":\"GZIP\",\"bloom_filter\":true}]", + "name": "dsnp.tombstone" + }, + { + "model_type": "Parquet", + "payload_location": "IPFS", + "settings": [], + "model": "[{\"name\":\"announcementType\",\"column_type\":{\"INTEGER\":{\"bit_width\":32,\"sign\":true}},\"compression\":\"GZIP\",\"bloom_filter\":false},{\"name\":\"contentHash\",\"column_type\":\"BYTE_ARRAY\",\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"fromId\",\"column_type\":{\"INTEGER\":{\"bit_width\":64,\"sign\":false}},\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"url\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":false}]", + "name": "dsnp.broadcast" + }, + { + "model_type": "Parquet", + "payload_location": "IPFS", + "settings": [], + "model": "[{\"name\":\"announcementType\",\"column_type\":{\"INTEGER\":{\"bit_width\":32,\"sign\":true}},\"compression\":\"GZIP\",\"bloom_filter\":false},{\"name\":\"contentHash\",\"column_type\":\"BYTE_ARRAY\",\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"fromId\",\"column_type\":{\"INTEGER\":{\"bit_width\":64,\"sign\":false}},\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"inReplyTo\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"url\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":false}]", + "name": "dsnp.reply" + }, + { + "model_type": "Parquet", + "payload_location": "IPFS", + "settings": [], + "model": "[{\"name\":\"announcementType\",\"column_type\":{\"INTEGER\":{\"bit_width\":32,\"sign\":true}},\"compression\":\"GZIP\",\"bloom_filter\":false},{\"name\":\"emoji\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"apply\",\"column_type\":{\"INTEGER\":{\"bit_width\":8,\"sign\":false}},\"compression\":\"GZIP\",\"bloom_filter\":false},{\"name\":\"fromId\",\"column_type\":{\"INTEGER\":{\"bit_width\":64,\"sign\":false}},\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"inReplyTo\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":true}]", + "name": "dsnp.reaction" + }, + { + "model_type": "Parquet", + "payload_location": "IPFS", + "settings": [], + "model": "[{\"name\":\"announcementType\",\"column_type\":{\"INTEGER\":{\"bit_width\":32,\"sign\":true}},\"compression\":\"GZIP\",\"bloom_filter\":false},{\"name\":\"contentHash\",\"column_type\":\"BYTE_ARRAY\",\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"fromId\",\"column_type\":{\"INTEGER\":{\"bit_width\":64,\"sign\":false}},\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"url\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":false},{\"name\":\"targetAnnouncementType\",\"column_type\":{\"INTEGER\":{\"bit_width\":32,\"sign\":true}},\"compression\":\"GZIP\",\"bloom_filter\":false},{\"name\":\"targetContentHash\",\"column_type\":\"BYTE_ARRAY\",\"compression\":\"GZIP\",\"bloom_filter\":true}]", + "name": "dsnp.update" + }, + { + "model_type": "Parquet", + "payload_location": "IPFS", + "settings": [], + "model": "[{\"name\":\"announcementType\",\"column_type\":{\"INTEGER\":{\"bit_width\":32,\"sign\":true}},\"compression\":\"GZIP\",\"bloom_filter\":false},{\"name\":\"contentHash\",\"column_type\":\"BYTE_ARRAY\",\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"fromId\",\"column_type\":{\"INTEGER\":{\"bit_width\":64,\"sign\":false}},\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"url\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":false}]", + "name": "dsnp.profile" + }, + { + "model_type": "AvroBinary", + "payload_location": "Itemized", + "settings": [ + "AppendOnly", + "SignatureRequired" + ], + "model": "{\"type\":\"record\",\"name\":\"PublicKey\",\"namespace\":\"org.dsnp\",\"fields\":[{\"name\":\"publicKey\",\"doc\":\"Multicodec public key\",\"type\":\"bytes\"}]}", + "name": "dsnp.public-key-key-agreement" + }, + { + "model_type": "AvroBinary", + "payload_location": "Paginated", + "settings": [], + "model": "{\"type\":\"record\",\"name\":\"UserPublicFollowsChunk\",\"namespace\":\"org.dsnp\",\"fields\":[{\"name\":\"compressedPublicGraph\",\"type\":\"bytes\"}],\"types\":[{\"type\":\"array\",\"name\":\"PublicGraph\",\"namespace\":\"org.dsnp\",\"items\":{\"type\":\"record\",\"name\":\"GraphEdge\",\"fields\":[{\"name\":\"userId\",\"type\":\"long\",\"doc\":\"DSNP User Id of object of relationship\"},{\"name\":\"since\",\"type\":\"long\",\"doc\":\"Unix epoch in seconds when this relationship was originally established rounded to the nearest 1000\"}]}}]}", + "name": "dsnp.public-follows" + }, + { + "model_type": "AvroBinary", + "payload_location": "Paginated", + "settings": [], + "model": "{\"type\":\"record\",\"name\":\"UserPrivateFollowsChunk\",\"namespace\":\"org.dsnp\",\"fields\":[{\"name\":\"keyId\",\"type\":\"long\",\"doc\":\"User-Assigned Key Identifier\"},{\"doc\":\"lib_sodium sealed box\",\"name\":\"encryptedCompressedPrivateGraph\",\"type\":\"bytes\"}],\"types\":[{\"type\":\"array\",\"name\":\"PrivateGraph\",\"namespace\":\"org.dsnp\",\"items\":{\"type\":\"record\",\"name\":\"GraphEdge\",\"fields\":[{\"name\":\"userId\",\"type\":\"long\",\"doc\":\"DSNP User Id of object of relationship\"},{\"name\":\"since\",\"type\":\"long\",\"doc\":\"Unix epoch in seconds when this relationship was originally established rounded to the nearest 1000\"}]}}]}", + "name": "dsnp.private-follows" + }, + { + "model_type": "AvroBinary", + "payload_location": "Paginated", + "settings": [], + "model": "{\"type\":\"record\",\"name\":\"UserPrivateConnectionsChunk\",\"namespace\":\"org.dsnp\",\"fields\":[{\"name\":\"keyId\",\"type\":\"long\",\"doc\":\"User-Assigned Key Identifier\"},{\"name\":\"pridList\",\"type\":{\"type\":\"array\",\"items\":{\"name\":\"prid\",\"type\":\"fixed\",\"size\":8,\"doc\":\"Pseudonymous Relationship Identifier\"}}},{\"doc\":\"lib_sodium sealed box\",\"name\":\"encryptedCompressedPrivateGraph\",\"type\":\"bytes\"}],\"types\":[{\"type\":\"array\",\"name\":\"PrivateGraph\",\"namespace\":\"org.dsnp\",\"items\":{\"type\":\"record\",\"name\":\"GraphEdge\",\"fields\":[{\"name\":\"userId\",\"type\":\"long\",\"doc\":\"DSNP User Id of object of relationship\"},{\"name\":\"since\",\"type\":\"long\",\"doc\":\"Unix epoch in seconds when this relationship was originally established rounded to the nearest 1000\"}]}}]}", + "name": "dsnp.private-connections" + }, + { + "model_type": "Parquet", + "payload_location": "IPFS", + "settings": [], + "model": "[{\"name\":\"announcementType\",\"column_type\":{\"INTEGER\":{\"bit_width\":32,\"sign\":true}},\"compression\":\"GZIP\",\"bloom_filter\":false},{\"name\":\"contentHash\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"fromId\",\"column_type\":{\"INTEGER\":{\"bit_width\":64,\"sign\":false}},\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"url\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":false},{\"name\":\"targetAnnouncementType\",\"column_type\":{\"INTEGER\":{\"bit_width\":32,\"sign\":true}},\"compression\":\"GZIP\",\"bloom_filter\":false},{\"name\":\"targetContentHash\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":true}]", + "name": "dsnp.user-attribute-set" + }, + { + "model_type": "Parquet", + "payload_location": "IPFS", + "settings": [], + "model": "[{\"name\":\"announcementType\",\"column_type\":{\"INTEGER\":{\"bit_width\":32,\"sign\":true}},\"compression\":\"GZIP\",\"bloom_filter\":false},{\"name\":\"fromId\",\"column_type\":{\"INTEGER\":{\"bit_width\":64,\"sign\":false}},\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"subject\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"url\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":false},{\"name\":\"contentHash\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"attributeSetType\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"issuer\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":true}]", + "name": "dsnp.dsnp-content-attribute-set" + }, + { + "model_type": "Parquet", + "payload_location": "IPFS", + "settings": [], + "model": "[{\"name\":\"announcementType\",\"column_type\":{\"INTEGER\":{\"bit_width\":32,\"sign\":true}},\"compression\":\"GZIP\",\"bloom_filter\":false},{\"name\":\"fromId\",\"column_type\":{\"INTEGER\":{\"bit_width\":64,\"sign\":false}},\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"subject\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"subjectContentHash\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"url\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":false},{\"name\":\"contentHash\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"attributeSetType\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"issuer\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":true}]", + "name": "dsnp.ext-content-attribute-set" + }, + { + "model_type": "AvroBinary", + "payload_location": "Itemized", + "settings": [ + "SignatureRequired" + ], + "model": "{\"type\":\"record\",\"name\":\"PublicKey\",\"namespace\":\"org.dsnp\",\"fields\":[{\"name\":\"publicKey\",\"doc\":\"Multicodec public key\",\"type\":\"bytes\"}]}", + "name": "dsnp.public-key-assertion-method" + }, + { + "model_type": "AvroBinary", + "payload_location": "Itemized", + "settings": [], + "model": "{\"namespace\":\"org.dsnp\",\"name\":\"ProfileResource\",\"type\":\"record\",\"doc\":\"Profile-linked resource\",\"fields\":[{\"name\":\"type\",\"type\":\"int\",\"doc\":\"Type of resource\"},{\"name\":\"contentAddress\",\"type\":\"string\",\"doc\":\"Content address for the resource\"}]}", + "name": "dsnp.profile-resources" + }, + { + "model_type": "Parquet", + "payload_location": "IPFS", + "settings": [], + "model": "[{\"name\":\"announcementType\",\"column_type\":{\"INTEGER\":{\"bit_width\":32,\"sign\":true}},\"compression\":\"GZIP\",\"bloom_filter\":false},{\"name\":\"fromId\",\"column_type\":{\"INTEGER\":{\"bit_width\":64,\"sign\":false}},\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"targetAnnouncementType\",\"column_type\":{\"INTEGER\":{\"bit_width\":32,\"sign\":true}},\"compression\":\"GZIP\",\"bloom_filter\":false},{\"name\":\"targetContentHash\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":true}]", + "name": "dsnp.tombstone" + }, + { + "model_type": "Parquet", + "payload_location": "IPFS", + "settings": [], + "model": "[{\"name\":\"announcementType\",\"column_type\":{\"INTEGER\":{\"bit_width\":32,\"sign\":true}},\"compression\":\"GZIP\",\"bloom_filter\":false},{\"name\":\"contentHash\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"fromId\",\"column_type\":{\"INTEGER\":{\"bit_width\":64,\"sign\":false}},\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"url\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":false}]", + "name": "dsnp.broadcast" + }, + { + "model_type": "Parquet", + "payload_location": "IPFS", + "settings": [], + "model": "[{\"name\":\"announcementType\",\"column_type\":{\"INTEGER\":{\"bit_width\":32,\"sign\":true}},\"compression\":\"GZIP\",\"bloom_filter\":false},{\"name\":\"contentHash\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"fromId\",\"column_type\":{\"INTEGER\":{\"bit_width\":64,\"sign\":false}},\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"inReplyTo\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"url\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":false}]", + "name": "dsnp.reply" + }, + { + "model_type": "Parquet", + "payload_location": "IPFS", + "settings": [], + "model": "[{\"name\":\"announcementType\",\"column_type\":{\"INTEGER\":{\"bit_width\":32,\"sign\":true}},\"compression\":\"GZIP\",\"bloom_filter\":false},{\"name\":\"contentHash\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"fromId\",\"column_type\":{\"INTEGER\":{\"bit_width\":64,\"sign\":false}},\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"url\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":false},{\"name\":\"targetAnnouncementType\",\"column_type\":{\"INTEGER\":{\"bit_width\":32,\"sign\":true}},\"compression\":\"GZIP\",\"bloom_filter\":false},{\"name\":\"targetContentHash\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":true}]", + "name": "dsnp.update" + }, + { + "model_type": "Parquet", + "payload_location": "IPFS", + "settings": [], + "model": "[{\"name\":\"announcementType\",\"column_type\":{\"INTEGER\":{\"bit_width\":32,\"sign\":true}},\"compression\":\"GZIP\",\"bloom_filter\":false},{\"name\":\"fromId\",\"column_type\":{\"INTEGER\":{\"bit_width\":64,\"sign\":false}},\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"subject\",\"column_type\":{\"INTEGER\":{\"bit_width\":64,\"sign\":false}},\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"url\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":false},{\"name\":\"contentHash\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"attributeSetType\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":true},{\"name\":\"issuer\",\"column_type\":\"STRING\",\"compression\":\"GZIP\",\"bloom_filter\":true}]", + "name": "dsnp.user-attribute-set" + }, + { + "model_type": "AvroBinary", + "payload_location": "Itemized", + "settings": [ + "SignatureRequired" + ], + "model": "{\"default\":{\"type\":\"record\",\"name\":\"DefaultTokenAddress\",\"namespace\":\"frequency\",\"fields\":[{\"name\":\"token_slip_0044\",\"type\":\"int\",\"doc\":\"Network for this token address using SLIP-0044 registered coin type integers\"},{\"name\":\"address\",\"type\":\"string\",\"doc\":\"The address as a string encoded in standard way for the given coin type\"}]}}", + "name": "frequency.default-token-address" + } +] diff --git a/resources/paseo-local.json b/resources/paseo-local.json new file mode 100644 index 0000000000..2a6089ed3c --- /dev/null +++ b/resources/paseo-local.json @@ -0,0 +1,204 @@ +{ + "name": "Paseo Local Testnet", + "id": "paseo-local", + "chainType": "Local", + "bootNodes": [], + "telemetryEndpoints": null, + "protocolId": "pas", + "properties": { + "ss58Format": 0, + "tokenDecimals": 10 + }, + "codeSubstitutes": {}, + "genesis": { + "raw": { + "top": { + "0x0595267586b57744927884f519eb81014e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x06de3d8a54d27e44a9d5ce189618f22d4e7b9012096b41c4eb3aaf947f6ea429": "0x0c00", + "0x06de3d8a54d27e44a9d5ce189618f22db4b49d95320d9021994c850f25b8e385": "0x00003000008000005ca802000000100000c80000100000000a0000000200000002000000030000000200000000005000000010000a0000000000000000000000000000000000000000000000000000000000000000000000e8030000009001000a000000000010000c01002000000600c4090000000000000601983a000000000000b0040000000600000064000000020000001900000000000000020000000200000002000000050000000100000000010000001400000004000000000100000000000000000000001027000080b2e60e80c3c9018096980000000000000000000000000005000000", + "0x074b65e262fcd5bd9c785caf7f42e00a4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x08c41974a97dbf15cfbec28365bea2da4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x08c41974a97dbf15cfbec28365bea2da5e0621c4869aa60c02be9adcc98a0d1d": "0x08020a1091341fe5664bfa1782d5e04779689068c916b04cb365ec3153755684d9a10390084fdbf27d2b79d26a4f13f0ccd982cb755a661969143c37cbc49ef5b91f27", + "0x08c41974a97dbf15cfbec28365bea2da8f05bccc2f70ec66a32999c5761156be": "0x0000000000000000", + "0x08c41974a97dbf15cfbec28365bea2daaacf00b9b41fda7a9268821c2a2b3e4c": "0x08020a1091341fe5664bfa1782d5e04779689068c916b04cb365ec3153755684d9a10390084fdbf27d2b79d26a4f13f0ccd982cb755a661969143c37cbc49ef5b91f27", + "0x08c41974a97dbf15cfbec28365bea2dac713b7f8b14e2815d297585d3581e774": "0x0101000000", + "0x08c41974a97dbf15cfbec28365bea2dad47cb8f5328af743ddfb361e7180e7fcbb1bdbcacd6ac9340000000000000000": "0x00000000", + "0x0f6738a0ee80c8e74cd2c7417c1e25564e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0x1405f2411d0af5a7ff397e7c9dc68d194e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0x1405f2411d0af5a7ff397e7c9dc68d196323ae84c43568be0d1394d5d0d522c4": "0x04000000", + "0x1809d78346727a0ef58c0fa03bafa3234e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x196e027349017067f9eb56e2c4d9ded54e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0x1a736d37504c2e3fb73dad160c55b2914e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x1cb6f36e027abb2091cfb5110ab5087f4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x1cb6f36e027abb2091cfb5110ab5087f5e0621c4869aa60c02be9adcc98a0d1d": "0x08d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d01000000000000008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480100000000000000", + "0x1cb6f36e027abb2091cfb5110ab5087f66e8f035c8adbe7f1547b43c51e6f8a4": "0x00000000", + "0x1cb6f36e027abb2091cfb5110ab5087faacf00b9b41fda7a9268821c2a2b3e4c": "0x08d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d01000000000000008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480100000000000000", + "0x1cb6f36e027abb2091cfb5110ab5087fdc6b171b77304263c292cc3ea5ed31ef": "0x0100000000000000040000000000000002", + "0x2099d7f109d6e535fb000bba623fd4404c014e6bf8b8c2c011e7290b85696bb3": "0x08d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48", + "0x2099d7f109d6e535fb000bba623fd4404e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x2099d7f109d6e535fb000bba623fd4409f99a2ce711f3a31b2fc05604c93f179": "0x08d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48", + "0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96": "0x000000000740f22d862d52983900", + "0x26aa394eea5630e07c48ae0c9558cef74e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x26aa394eea5630e07c48ae0c9558cef75684a022a34dd8bfa2baaf44f172b710": "0x01", + "0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc": "0x4545454545454545454545454545454545454545454545454545454545454545", + "0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746b4def25cfda6ef3a00000000": "0x4545454545454545454545454545454545454545454545454545454545454545", + "0x26aa394eea5630e07c48ae0c9558cef7a7fd6c28836b9a28522dc924110cf439": "0x01", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9007cbc1270b5b091758f9c42f5915b3e8ac59e11963af19174d0b94d5d78041c233f55d2e19324665bafdfb62925af2d": "0x000000000000000001000000000000000000c16ff28623000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da923a05cabf6d3bde7ca3ef0d11596b5611cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c": "0x000000000000000001000000000000000000c16ff28623000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da932a5935f6edc617ae178fef9eb1e211fbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f": "0x000000000300000001000000000000000000c16ff28623000000000000000000000000000000000000000000000000000010a5d4e8000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da94f9aea1afa791265fae359272badc1cf8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48": "0x000000000000000001000000000000000000c16ff28623000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da95ecffd7b6c0f78751baa9d281e0bfa3a6d6f646c70792f74727372790000000000000000000000000000000000000000": "0x0000000000000000010000000000000000e40b54020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da96f2e33376834a63c86a195bcf685aebbfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e": "0x000000000300000001000000000000000000c16ff28623000000000000000000000000000000000000000000000000000010a5d4e8000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da98578796c363c105114787203e4d93ca6101191192fc877c24d725b337120fa3edc63d227bbc92705db1e2cb65f56981a": "0x000000000000000001000000000000000000c16ff28623000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9b0edae20838083f2cde1c4080db8cf8090b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22": "0x000000000000000001000000000000000000c16ff28623000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9b321d16960ce1d9190b61e2421cc60131e07379407fecc4b89eb7dbd287c2c781cfb1907a96947a3eb18e4f8e7198625": "0x000000000000000001000000000000000000c16ff28623000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9de1e86a9a8c739864cf3cc5ec2bea59fd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d": "0x000000000000000001000000000000000000c16ff28623000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9e5e802737cce3a54b0bc9e3d3e6be26e306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20": "0x000000000000000001000000000000000000c16ff28623000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9edeaa42c2163f68084a988529a0e2ec5e659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e": "0x000000000000000001000000000000000000c16ff28623000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9f3f619a1c2956443880db9cc9a13d058e860f1b1c7227f7c22602f53f15af80747814dffd839719731ee3bba6edc126c": "0x000000000000000001000000000000000000c16ff28623000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7f9cce9c888469bb1a0dceaa129672ef8": "0x86473d0014706173656f", + "0x2762c81376aaa894b6f64c67e58cc6504e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x2ecf93be7260df120a495bd3855c0e600c98535b82c72faf3c64974094af4643": "0x010000000000000002000000697ea2a8fe5b03468548a7a413424a6292ab44a82a6f5cc594c3fa7dda7ce402", + "0x2ecf93be7260df120a495bd3855c0e604e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x2ecf93be7260df120a495bd3855c0e60c52aa943bf0908860a3eea0fad707cdc": "0x000000000000000002000000697ea2a8fe5b03468548a7a413424a6292ab44a82a6f5cc594c3fa7dda7ce402", + "0x2f85f1e1378cb2d7b83adbaf0b5869c24e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0x2f85f1e1378cb2d7b83adbaf0b5869c298ef7dc060436e4ed803af07632b89b65153cb1f00942ff401000000": "0xf627b5123c4b0ed0a8d298f582312ce0e74862e97a681aac48bc02a3821b7c6802000000", + "0x2f85f1e1378cb2d7b83adbaf0b5869c298ef7dc060436e4ed803af07632b89b6b4def25cfda6ef3a00000000": "0xf627b5123c4b0ed0a8d298f582312ce0e74862e97a681aac48bc02a3821b7c6802000000", + "0x2f85f1e1378cb2d7b83adbaf0b5869c2ff3ae12770bea2e48d9bde7385e7a25f": "0x0000000002000000", + "0x31a3a2ce3603138b8b352e8f192ca55a4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x331bae0b419c2dbbae4e5226b4516ba34e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0x3a636f6465": "0x52bc537646db8e0528b52ffd0058843906aee2c8441d581040086bd301658b5fd03abf51b7386ded32b086ecd95752e612c752c92693f8ff2720557e37dd10f552eb812049ba795ed32c8729f2cea87cfe5ce793e9bc38e65acf91b71cb79941f3a3288a42fbad9bc8e8a9912db70c34224d1baa1af4f27dbac697cf436c9b7e790615a540f8ca4a0f21d330245f59e972f9fa74cd9cdd7e7f568feafbb13ea2b63ed935be8aa1cbedeb74ad6f9fc7a62b226022be485dcb2b5662d7f87d1e6aaa439a303068a13e907df3bbf564d7ccdffafad7a32b56f5dceb67f5e88a95c9dd7ace66b9cdaabbf53a7dd4b6faaf6b7c751373ebc5aed55bcf5de3d7735da3afe7a16a9b8a2ecf98a254b49f847c79c8246f3fa4f4a678bb965fcff83592be9ecfe3127d53b55fcff8dc333e5287b4ec2b3290277a75a5bc4bdf1f19c813bd5da72097be1fb6f875cda4b79ecf0c84deace77ac60f4120f93c16e19ef1abfd7ac647eab0455a725764204f74cd75625d299c4bdf1f19c813bd5da720574abcf47d170379a2b7eb14e44a7997beff62204ff4769d825cfa7e58455ad63b3290277abb4e41ae9477e9fb220379a267ae9478e9fb2e06f2446fd729c8a5eff3b8c4dd6e971ea9e9a844de2ebdd835be7d1e95e8edd2233552233552f350db26f2f20caaa6dd44c8f7eb9ad9afe70305e046f6e9cd7aae67fcb0965fcff835b25fcfe771a9df54edd7333ef78c8fd454940e0943e61b938cab9ef1e57ac6e731897bc6476a8e852b90f47c75bb5d7ef8e2fb75cdecd3f381027023fbf5263dd7337e48cbaf67fc1ad9a7e7f3b8d496eb59bf89daaf677cee19bf96dcb3b6dc337a3af6432ad692de2ef9d2f2eb19bfc77e5829b78beb193d5223355223759762cfe8a99ad21a42ee41d2f3b9b5244d55938406c0253958b283256c9664b1248c255a2cd1c112334ba45812c512182c29b324064ba05862c5922a9650b1e48925572c996289134b9868c0921f9624b12488252c5822c4122096ac60499825574b5eb0c4054b865862c49216d01d9614b18488252258626589079698608997251c5872c312304bbe2ce9c0122e4b7058f281251758820125602861a384074ac4509203253a50b20325612cd161890d4bba2cb9b2248725205812c3921996dc96684009194a70a0648c2558948c513284121c94dca0448b120e288980120828a16109074b612c95b1948325324b642ce96089074b3b58b261e986251a2c45b17466498a25334b24589a62a905259449528125264ad841921e967c580ac1d20e4b61969e5032c3529b242458aac0d26de9ca520c4b125882a184304a8022c9961272508214499c48f2441218248922091449c8242993a4892425485246923192f0906487252596a0585a2289d5121249c858f240120a24f940921a925860098c25102c6920090896ba94c026890c25f06049871274b0c481241058fa400951946083246d4a80c152124b65969c586a6269cc52074a48938489241e4872c45204966848b2c49298245f4af842490c4990582a62898b251b24c9b25483126ab0b48112b6500243095d2ca949a265698b245549c62411b39446c96d298ba5199224b154c392059228b1f482251728d940122f49ba2c69b17484122b48ac40420512182091024914489640c204121d90844162856407242440e203121520298324044872409202244620f18264082423405202242c400206091148be20e182a407242228920100c0a04484d29592104a64949a5062426909a5314a4a2865a1844689064a412801a1b402a51f9460a0f48452192528949c501a4289054a5f28ad51f242e9064a5d28a951e242c9064a35504aa3b48592164a5828b94069064a679464a01403a52b94ac50aa42890aa52994cc2849a114859209947650e241e9044a564a23502281520e4a3428cda0a401a50e182943e906251c8cb451824169034a5b9438a04401a50a28d5a06401252c4a569424a01402a5188cf44009034a1950e2a27453f280113346a43002859132469e30a28411278c8c31b28491248c1461e4cac80a8c94c0880a8c086184054686301284911f8cbcc0c81146ac8cf060248c910e1801c2080e4672307283111a8ccc6044062315300201233018b162e48a112c466e45c62842469132942e50648b226014e941112d8a8851a48b226d8adca0881745d41891409131459028e282222f2872441131458c2872558488224514594191161401a24810457e20f24391aa223214c942e44c112c44b02042032232280203112e8ac440640644b220f204113344a42042868813d48a481344ca500c105182080b881441a405442850640444224044024934482a23494d520e92d224819114465299a42d927a484a4192194ae022c986240d0cf922e996c42549872160244120a92a29cb901f9238302488213618b2c5901a0cd162481643d024dd30c44c129621530ca1628814439a1812c6901b0c61220986215e0ce962c89a216a924490b4658810435690d481a40824694992218986a419922430248921500c5162080e863c31440442bec86184102f84d208d1c190db90aaa31e1cad191283901eccac864860880c43b2f0b040480d8cca1052861034321a64553209c866907d40a64586459665080c3c1710e20221461cd1c04301214300e08a902a840431aaa93e08a1224a8819216084948006096a191b29b0a102d90d6449d894b02591e443920a6c16b0514089124833204d00e7769ba83d818401a42d46ae40a20109023c5b8eb6f0ccc095800703419e08e2822049041113e488202f08b204081d083286060f41ae820c118405418408928220398c3046901a48b805b1004f0b826020c80582d810240322a811a10b12ac500d501b644f8c70c636858d0a1b124668c635b230237cd1d1850e35236811e18bd6408e9a1c2e72ba70d1c0a3081d38886083a01a44a88108694018c18e18724830c426c7182132c8e182180d625cd820e3088c1fb71c11e4602267044276e0a30c038858394263440c12207868a0ac42b6821e256a2ae09143cd043220784480471724196866788480870d3d4ed0b2a859f1a821890a1e14c8c982c7056a1cd1b3040f09f0c0400dcc90313c323092c103043c3cd093040f2f3c2c3086c1e303351f6a3081848566058f0e2055f1e0d2c3440d25784c80070e3511f490e97982470578dc9024865219d5032e2c3daca869c0871442b4f01105912d7cc0a066011f2e00a18b0f15e4485173c1f84592550d889a14352e6a54c88ee0a9e2c992b443d2086a47f4784206852c0747577a4041440b1e666a601401018f1d7884e111442d8b214bf00082c7097898a0b6050f0ef018010f15f040018f1e78a48007181e3ef0f88187103c56c083043cb4e4d04008cd0e2f76dc76ac31cac1110f8cc8300263c70d766011ca6204328c7800820e207cd931434f0fb12e3110eca8ea39418f097a4ad083821e303b70b0e38b1d32ecb8d29302232f645ac8b0a8d144100e82c08805219b418d074732e8f04091107014a85ed435b108541c14d920a487a33084e040870b7418e1030a1d42d00be8e041481b1d23d021021a17397290038a1c48e41022c71039d8e44822871342d4e46822470d727091434d8e27728899c1b003861c51e48001ed099a1339cae44893034c0e1e6861e4d09283865a9b1c32f05480680c1f38c886a0a5a9c180c80a1a0d8a8ae0c9004f0d3c1648ea62841210b91969e092e181408d327834907483a134b435376d625a46b0b255c1a32546019e08f0d090a345ad081c343c1dc011c110246a4924799193866603a31818d140c88c910d38d2e0d002071a1c58e03883e30a1c55e0980247980f3a50fb52230922263022868e3143c4300a419702da195a0c3a15f0d822b4c58c89d996d99859046634cc66981131d39213c6460e84b898a100a6057705020e34a428a3a82151db81080c3c577854259191c4050f2a92b248b2818d286c08c183071b40c8a490c1208907471a28a928cd1c61e02803376a6a7851e30635cc0c016208114938e821c511046ab0a086096ce0a086078ceca006076ac850a38a8699a136239441a304433da0f125c71134ac6858191a83c788a13076d460c80cb22eb208c86490e520d341b601d905645f6422905d9179400602590764189091405683cc8a2c04322eb21b641c90594046019906645e8678a0a48310223a08d4b418ba1a1a622888a11d8648c059a1e560860d9024308306760333d0206541d242bb62644393416d063c3640d3010f1a6852704cf850c247134233f0c184100d7c90c9c9c14712463818c281902bb8267880106245cc8ad8153980b011466c8a18153e9610c2c2c798a31bf870e248cd5117b1323956f019fc05423910c2850d1e0801c3c713466d84d6c4cc1081412c8a180c847620f4859018423d100ae3884d8e2084c010e2c18ba0722f446ad861854814471638e200922b845c508b400e2986b48048161d161882c390100815214484d095d010422c08ca40ad099e1b6432c011831c21c801821c5d727c20870772e810a401d9556c8c580f72b4e032216406425ee458c24619426a72bc202704463d10b286e7ca160347c6b625a66648073c4208b1c1101842c61092831c57b1344661c46a104393e325a704b119c46410cbc2488c1816b12d7aba886971e4c5510e788a8875113b13db41cc0b2137107226c626f685902e8676208407473ac8c182231ce42042a80b9e216252c46210ab42b6830c075905645b40c82186039a815a0a6835c801c35116b4287890e1e144ad04b42e7aa0a841a6b4824702342f825041fb824712b10dc430d06344ac06103c10b34039050f969c1d6060c0be807901cb024603d80c6032805dd1d3021a23a0b1c31df333060d110c99c0cf173f6b7ebcf851f36344ad06db163ac8f001c3c78ccf0e3536b5217ad20ca1a18718491fe8210284108070030822e04902042f3c4880c0c5c61836c4b0d1c6460f6cb0b1b1031b3a98dd7aac8cd618dd8027053c2fe05941af40e6034f086a634631642ca85531e6a096839e266a37a86151634c4d8d0e0dd47440abe24802b52bda143434352bc61dd470508bc151046442d45e3096515ba28698a309f48ca999a1615113636302475318e961870c19153222686a2e143b44d4a2d8a1010410341448ceb4191bb75ea299a87d71740392313a610c899103440d8a718ca31a6854e8a8a04818322474529093834a831107b5323958e4d4a0d6450e9a9c2d726c90d4e60707849091c3250705396084a4111286102c727cc849811031466833420f723e60a403215b18ed206705238891f3254705393ce47411ba414e0f475fe45809619373821c18e4b8e0688c980d72a238dac191183c4408a1418e104339e851418e077882109285500d8cd8e4e87044460e08724c202406423698952027889c245c1bc841c275438e18170e39635c1dc851c2c5819c25728e707171e52044889c17c820201b812c06990db20cc826b064899c1f40f8400e1146c8c8e940ce05726ac8b19243891c390cf1408d88da0884a8c0a1414e558e2284b4c0f141a94d6d8c9d297060a885a9390cd1725303a3316a4edc0871c3021e0ef45c05e1404f114b90a8d5a0760592055c242043408200491215879107ae2b954b8f2a2a996a658bc22685cd0ccf046cb0a0a803453814dd5094832c88ee0a511b97959d2fb51e6a53f0d0817683ba81a52d4926d0e30ad90b70bc0c99a03ab18481a52fea13435f5cb7a42a5c597a62203bd3470c31a2c6123cbe9468845c1d69491aa3fe60440b0d073c5890e356a48b122e6517b535fd8211766084c38e191e1b2a14a59a256424e941ed870a065646fd22e98bf28a1e6420110229024a3a60d481da09642d9029212b82b6454d0800609159b1348123186c0461138304053618d4363628fa87242d968c3822010f111c599145e1822169054bcad8e981ec0bd9982414f0c890d4832139d42b8c8421e381ac0643ba2c51606c439b413983a41f7c46202353cba069e18aa14c53771822e6da60491b191a1e4314e9c08e14484c90b42689096e0a4a1a1c95a086a6c70c86b840c6846c0b0eccad01006ee599d2063a6c505225f34256a647991e18dc323217d498e819a282c1dd9280b14385921c8c4460c897b206251625a89119d1614ab8814c4d0d53ca604811433ec0a304a51625ac51a2431983a31992724802a2041cd8caf0b04a42838c0649865842e31262498620502c8db19481129e905d21e3a2e4a2cc42664689077ce43082c18388d7055e1840e244b9c51032a30e88a4801323490494c89024043e2258ea411211f0b89289e9bc704e7030e0ca705070517439704f7052cc98c10c0c920684902089171c165d09b8223a1e44d80249103a32d063c5d14df6434f143d32e8b9a206179d554f153d54f4d0a0078b246c92aca9810447c4086c46d081cc06351e6431a8955104074574200ba3480e78ac18e1a2b6021c15d8ac7aa6e831d333839e3236245043816c07b234b22576c6e0b92169c14e9b9a1735121c55c9aa90ad91b1a99d39c2524a21cb42d6854c8ca30bc8745063816c8aa30dc8c090e140e6c4101ed476400363c811250c6a3448ea92e481241e86383104043dcc0c79c1102f3d5210a9427202233ce839c363869a184a3d28a160ec811130644dd45a80a40a2445f090a18613442aa0e3029d23745ec0a3030f971d09ec44c0a6c526015b048ccc185161344510190499419033433c0c81192a410e0d3911c8d1e2a3023e6af06101222f88be205a438405111a221ae02881b304ce181b2eb041850d2b6c546143091b49f860818f2b1f430c153164c4500b7264c1f182480c386b7c90c0c708726420870672d8e0630542b7a0363c3df0a0c0a80823238c5a208403423a20e486117c18e18711c20861420819214d8c30c508568c4085910c463418cdb04366e7891d2778a0e1a1058f2c6e68c049e0064d9199222a8aa6f081c507047c64094a41900f412ac0f9000e0870ba8c608311d48cc0c5c5e2a2b934b849a28ab951e2c64cdde2668a2a45d1104544145d0d7da0688ca2328ac8d841c14e0a767a08e241e7079d303764dc947133c62de3b6b964e8f040a7073a621c51e0284b4d0635236a696a41d47a5023a366839a12b5308e62a89139aac051078e6c309282226492bc247d3132016e055c18ce049c0fdc0f9c0a381270561c0e5c972564381d382e1c06967ee02ec06921b2022457445050b9a83aa839a86a8a68a0c8971a45854155a28ea949d4232a12447c306245bdaa2ca841d421aa10b505b5886a828a820a4425a29ea0ae8048984a012775025502350235860a817aa5d2d039e830aa952a43cd526f15863a43adaa58fa4c97e9318d442b81e4874ea2a320a28216d329681dba053d447ba059d0443497beea221a8836a25da080bea1836815b410ed43f3d02520d2031219d01a98e815d40a7ae60529ba812774045407cac5019406aac58504200005039c500002183141000158320025494a40720400454408012908105a011c3a7210914b84f4323d9b565726a8260c6032a509d30a4c9884b43a89c2c484094844446b82a19858681285098cc6044731413135e087b60433453569810145806863a29e98a4a4988084064d09662105177668497094169e98bcf0e484c99329374a0b0178e169080f0d098662625281c90b4f4c524fa030392969629885145c08a21d6183f602868a6282826ac2640a93294c29a4d08485144e20a2b9a08866044b81d2240528509a0869c10a510d88c204a5086662528189942826512b34e00913151a8d088682f2a449149313264c4c2ad8a05dbdf0c4d482139327536e541426165e68a2e4b4219829852852a23069924214294952b8321a0b9c484981c989104d08867a81a909ea05a62302286941403d19724b1a103e682b18a2fdc038b430ec03af908294294c309a0a5a68c01315a2484981c993299789014d6c3bb414d8a0f5908214a9272d3831fda0a1809d3c6112c504f5d4420a3fb4133014d39306307932e53699e2244a93a72241341344b9c014658806e685a8274f5256886aa18910ad040c05c5044546e3218766b5830a4d98a0ecd048c05152a43c3179628105164a78d146f0c2531414530a519a9c2682a716a25a1881f6a5e9498a0a3e685ed8095394063c818ad202131406b420e58816021a341070141314932e0cf504ea0515989818c0e4c994fb820a4c4c361eda07a088681e60a616985a7062c2c293265052f8a1e91025458a09942652529ea64c693244e3c2504c4f2d4435615281099313295160b41c18ea490a140634817ae2048714a2bc00d5a403dce4a9c9941b1a10e549530a4d18c0848516587812e5090b1ce028282950983c4999c2f4b40156418a94a7294ca63c5901ea89290a15294c5e606a2a691a602826274c4fa04c99d2244a0b42341b188a29aa8529504f9cf0d032c02b403559c1d230c04c4f5398303d3d69c189e98909940a525366d02ec051519858608a6a1205a582d49419ad0686628a9222c584491429319a05f8050630a9001414a628519aac900293292c3cadc0c4499416a43020ca130a44459192021327169c6c6128169a3c3599c2e449ca04588a0a403409305454142629a608b093284d52c041d3c24c4ea4a420a3d1c04f52548062829a81a1a25a9812d582941a34195868010aaa090d5a1537896ae2844914294f9c3045413d817a629a6283060186627a9292029317a29e4079c28026509e34916a725a16869ad28294a7063009a26161a827295150528c34796aa2c4877685a93c99729f989a9ea41460a9a45961a6a8264e9e406922c584a905a6169698e084a9010d6862c20d5a0c403418382a4a0b52a630817a626a6a1205c504aac91393a5ddb8499494169c98404561f264ca6d4094274d4da204109bb5119a9501a5499494283276ccc6e0a7063c6181095354930630416172c204ca09135394a2590f9e9818c002130b366662f00a504da040419122650a8d190f584a141336cc94429426509a3080899428265051519e48199aed80a19c3c35a1c2f4c4a401519e3889c23485c99329170a8a14294aa23c61414a123bd3014335a5c0b4420a3960a8a8284c4f4c2b4479f25918519ea8009b81c1293c818af2e429ca0526262f409932a50993272627509eb4606b4a410a145b6c860386029a7dc14d98c4666b9805264da29a386912c554c2cdcc0b073c81d2e449d493284f766637e0a614a440610013a6a816526072810967d605333d491122ced4b01415a23c79e284e969ca1326509a44456162e1c913d31417989a4051218a52115326280c681215a505159844a5c0f4f4c44994274c98fc3c09cac222c3c515232e53857c75bb5d4a557f3c920992093a85b2b89d9d9d9e9d9ddab3537b7a766ad7dd75739ec762168b9eab8348d1e3fae3bccf73b93a1e1e4e05fa755cd7f2bc56b7d74cb9b6bc96c7e3e8317b9e07825dabc51d771c77d31ced1efb6b799e378eccccd46ba660d7ddf25a9ee77d20b738aebbeb6ecfeb9876ec752dee6eaf3b8fe39aa9e7795ced6eae4599b9d9abedb1c7b20e8872b0aed5755dab6371cd02bbce637ddd79946b0e3fca7577c771dde7815eb7e775cddd573dfebc8eabc79cc7dc1a3bd06baf039bc756d7fe3ae6c0ea792333f875cc752dee983dafd675ad96c7c45dcf0ef7f06b1c41f0fb3aee388fabc7ec31e7795dd81dd71a36f53a6eae7a9552cff3c2ea791ee39064f7e755eff3983baf99f3bc767d5e377eec3183dd2de4a4467bcd5cd7cc5ec3bad163f69a6366f0ebba6b8dd5638f53e0ba994166cfe3aae771d70ce08e9939b209731ec735b39ae5792dafbb96c78c02a5ddb9bcaeb963c2ccae9b05742b80721dd79ccb47d76eba3df67c3c4f8899a9c751ee6223d781ccfce970ec2500a7e937b6e7753dbe58e775dd75441dd9f28698b98500cef3be8f99e37c7453ae9cd739203333d73e1e0ff53aa863669c6ee6af7580aecddcd18ee3ba55bbaeebc6d6e7b55ab5c5b5aa01bad56a91ad56abe5354f77d77527745d2b8799eb3aaff3c0cef3beafebae471004c18e9999bf8eebaef9f3bc027453aeebc15e73abe535775cd7cc1ec7600ee8754739f66aabd56ae5b45c9eabb95ded6a6eca9d2b6466da463d5d13e0d5dd7d3edcd77194d6ae5f5d3773adb5beb8e30174dccbe5ba71b5cf8dcb84d6e1164091d75c87d37534ba69009ab97a2dcf634a5ddcb95cdcbdb8fb4adacd1dfb785dbbba6efc98dbf35c9cebe686cbf55a72e37af9784abed70d0b09e1b870d8f398769e97e3f930c7ccdcf7811cd7715e7777e7755d9793c3795d779c57bbeeaff96b8f63eefb9abbdadd34c752d71f73cd75dded71c71f7ffcf1c74d9e99bbe6f6bcae6baf82dc751d6d8f32c775d78cd35cd768aed11d4e37d3eeae6bd2e3aeb9aec51c27767394829dc7dc38720d76f77ddcd7dd4940ae63f62aed46d0f362208f6e5677c82cd43dfbbaeedaed60e63a8f52cacdf1e0aedbe3a8d7795c6de6af79fafb40b0eb40d003b9ef6bcf63cfa3dd7975c78b63ee3a9ee6baf9eb66711d7fb5528f765397e771095cc7b1d71ed8f1d7751d7773e779b4db633587cca2cc6271771c368b1988bb644a4b1637872c16b358cc62160b88c56aa62c16ab99592c168b5921b3b8b9bbb93b0c430ec33064200ebb9b5f6d54d46aeea3ac4347b7c09ceeaea39482dddfd7811f98d3607b5d83b41b6cb069cbab2dea55cfeb3cef63afe33aeeaf5f1ec8c56ebae3af6bd7751d53e68e9b3df6c01653ea51af7e9422e9acb5d6abed79dd0cf691aee3f63cafeb3c8f7a94769dabb9bdca5e473baf3d8f06738bebb8ceeb98bbe38f3ffefae3e9b88fe3baaea31d33d7b1d7cdadd6d1d1d1616e8f02c0e3babb6973b5e3b8af3dda811ded8e5d8cf3bab9e9fad579af1833fb70d36e66e6b81c9dc775ccac6eeab5c7dc75f77547bb9999d575ddcd1da5edb1e8d751da94bbf3ba8e99a732abf3bc1d6fc763eeda6bf6dae3e6a8d7dd1fd78dcdd1eeee9488dae33ecadccdd31d77cc757fdc75cd5d57bbc6e1e1a0ed35d3ee3eaff3bcaef33cdaddcdd1aeebba6eaf76d775edeabaaeb93f8ebb6306bbe698999b39aee3baae3f2337fdf5f7f5d7349aeb8febafbfbed145fa6b8e3ddad1aedb6bee698f43e6b06366ca5d73377777ed75333311f6ba96d7753307d6a64ddbeb6a771cedda636eda71f4fb388ee3ba9939a6cc711cc779ccdc791ec771ec79ece1781ee779cc9cd771cd7173cc1cf87d5dc7791ff7d85d37d775c7795ec77547bbe3ba8e034196c7dc751cc73165ea71773733337b9ed77558abe7f5c7ccddcd1cc7cc7537edc6b1c1da6aee8eb9bb29c8b5d75de775d75d77775d7f5ff78d5dd75dc7d486c7757bdee7257df041adb5e678b57aaccff3bc211e771db3e775423e8e9966a3c546fa715ee7799ee755efce906c04a95ecd8179d5eb3c8f046f04af3dcff3581de538da715cc7815c4739aef33cb08ae0eadaabdd9ec7cc75c7eaaeeb3aafb2d74bd22cb1418571bff024850526163c20369ac24293282826169e445dc68016a06821cc803889d28409d35393292c48e9414269928214281fec78a2c10405c5f434850529291c89bc83494a4a0a4c4f464d351f3ba6a4c00485634885274f4c52334030f2e16387131a5251986a101b453579628ac2d400264da09ca4c0c4444ad494179e5298c1c293a8282d3cd9ab10d5828c69052651519e3c4d619202d41316622038617a6272f2248549cdc70ea6274f511f3c358982b2f153f20e29529e809a5268c2002850a43c7df0a309d313902c48f6f3031505f5c405a6188b8da2487912954213a8284d9ea298443d61810529b31d2e3c5181e9698a3d4cc74914a629539ac47ad464412e48a11215d4d4248514989a6a3e76fcfcd861c46407535313280c5801aac90a0fa13049314161e242131684701a20050a93064479d280064881f24359086226a62715983c49896a92821428509ac4745c607212e50993284f9aac90820a2a48f911948d17989a9844b9c01405c78c28a606d8908ac25475d8884914294fa09e98a4983c356182920213a6063479921205c5c40994272ba4c0240a4a0b4d546072c224ca05269a5414a68ac395a5f9a4faba3d2a4ae54d51b12a8702835494798aca6b51517554df4955a9c011052ada7a4d4d71758a4e4d4d4d51718dc214a5aa53532d6e6a6a6a8aa93caa938a3ba9be10052aca54542c14a828d5145545618a4e4d350a4c35353545a7a6a6a81a85293a45a93e14a8e8146514a8e814a5ea3814786a6a6a6aaaa7a6788aaa51e0a9a9a9292a2a8e8a85c214651498ca43818a52752830370a4c45c5a14045a9a8a82a0a4c45d52850512a8a025351141ae0ada1cc4c59806ac201f63b52a5677956ec199b7dfac4d9cfdaa07674ac0fe9c8de4d9fdf11695bf852f2eedda3e23bf1a0f8d641b0d4295b25694ad12b45afc8376ca6dc9c8bda3391578ab6c97b8bec5a7856f8a237e43189bd1bb267e08bae783a2651a48ad4b434e96df2de3a03a197559e89f864d78a2e3f2cc99ef1775947bcb72cd7b317289e8e4ddf41ebd333be68754a7a99b6ac49755b174b5a9e1ea98aa50926b5406b72177c785ad636e9156f02806a88cb8c43b426583a8960c997d656e9546f3d9b805422bbe4cb0abdd2ec4eff95306a9de865d91b37a4e257125d5619eb19bf3b8ff42cda9141cf4366d1ad0f291d93b87f89f3acf9ebfd6b6b46d5cb3d6b5da76be0eb7dc030b466f8d6435629762d3cebf56158d21b8aa723d7b3d6c392af5886b4995617e5cb2ab967331f1cb11879a935bd574abd926fabfc829451dda556a767ed59d385d2fc2e7fecddf050cfea597fcf58b672c99526bd4eb44d9b366dae5746d5cba7251d93d88a3debf3d859b2677d51e743b3aef1adb1aefdd6e36020f55281b4d312ae40f275c8d0880d84b9e0a50f2b0d39911908bd5d661490f4481dd6d189bb754cd031c9a93d3ec30af359d142038a4c43a069acb8fca6476ce38334042e1441060204bc4c7598df35bf238fd23804aa831c5c93ea9a6dc535e94defd67fe31278a935a76e5ba9be0d78a297bea50392a1287ea314e732f94a0361aed3ebd2d7bf18089371eb3d1a02df6af635bd4b45d2b3c62427aae4dd2e7dc88d44d88a4b1f328b524abf4a29d733173deb8a163984cc6c4a40eaa64e945220ecb6986453771bd7ec6e72160fbb922f93173e156b717a66ebd92b59886cdeab726cf4dca996aee95cee400180006942b9dd8baea9734dce6209dbae78a75a7ac6bd0969522d595cee279facb41cdce0430e3e803973bbd9bcd3875ec9365ade381248e00331784008db952c4436faaa1c1b2daf64691beb5524d8e8bdb28a04db696502fda9a4d2b853329e3d912a8d3bcb9e562678a7f67ca571f76c11579af95d93afaee84d26c33a8000125ebaa062043378e2977b00b0906ca3bac0182170c08108332700c3c636be5964c26f371bd5d2351b973bdd7279c6545375731c0853a8b41d0c9cb9b1cb571828e202792abaf526471fbefa7554026f7dadefa62ed7a1b9d576ac7b37a72ecb46f16c13141be5de79ebbbd23bb7c44c6cb99ef5f275a6d70485d15cef5d146662cbed6ef6e53c1b85d1dc2eca0857ae6e67bd5499d22145113aa428c29a2edc7a5af2793c800e298a305d977b577aa932c5686cadb3536dd3e67ab9c92200821ab8340d2e251073e3a6309aebe5a6438a226ede0857aebe1b33b1058c81d1d85af6c6686c7c53bcdc994360d661f2550d62dc287abddc786260022b35b8dd6c6cab4c7df6c6e7ac596bd59a537834e1660631084119574ac8b9fdae3d1184f5b5b4001757a7673168cf4ceda0e03a2eecc0784b8c57b4b242e0b52e5f59a003ac23c85c9d4fac473871759cb81b63226a3fd6584b7ac34fac6511be4eb4cda5e77164a21699a80f443d40f295056ed7e46ebf5ebeb2c006aef9ddfe2732107e7f64207cfb5c8297af2cb085bbccf23aae36e5cfc54cc4e76a1072d76897aedee943afec6e2d9fb8becc55e0eadab8dcc36f0a79bbdd6060a4ae678d497d6f5c9add0e5ba2476b51e4a523b0cd042f9fa321f00f245f51a086cb976ff8628e81d0cbf74625f272de3b8eabb56f9f350280eab2ee957d6bf9c4f2de3d8a75ebbb71898a1e12aa5a3a719beb59661c66d77e1d8fd8b89c65266a5bcb1b65762fefe0d677196576aba54cd46f8d4bb35b2d3351dbcfa35d0642ef611dbbd3cb57151863a9fe48dde30aa4f9fb59d7cc1fb759efe378d7f8aa0261dcfe50d7e8edc7ba46dfd6a4d7a7673deb59bfc724cfb2623ea54ecf7c2850e6f215057a182f5f51c088fba31e0d35addf4926bdf53d260df5acdfb366429abf7d1d71a8bbae35840b20e9c35a99b95a735c22a5b8cb3157e6926f2d9989d8a88a728a90690a48bedad2e57697af2660c4659c2e9463cb43d585b0eb3c4b2f97f000248f00a0ba1c672d7d484b22f47eb4a4978ad21940745ed779de43cff33ccfeb3cef1e7d5736511b802b4630e95243e566fe7b4442759b986ff62993f46a025d2e5f49c0cc355f97fb8dcb571248c3bd0bbdb272cf28f7cce46edf2b4daadbf603eaba875dd725d5237557d21b5211e8f45d597263117a3b18117abb77f6bb4d01b84256a7a9db94b34d640b780452bcdc0d5f5c47eb3f11d69648bfbe7aa7dd9baaf7af6b7d3df122355253514ac5847c00327c4da0070e09d5d735935e6abf9e71e71ebe969ca62e77eef44c2f67191072877c990bb96bf501b871f5dc43aea4978e5cad476a7a79ac476aa6b0beac0fa9f95d4a4fcf97c0975a6b9108b7be0b6fbd083109d8702b77f3bb669ffbbad6d4a7e73e229b56fb9c35bfcbdc0df78c3bd7337a53bcf42679ebc32a5e4560cd11b5f1453a12b19fd8b5ee6e1744e00ad309907c55439a4b6ff7fdf0888a5c9a64533d5f93defaf2550d5a5c7a295b734ce2cea51477f95ca9449a54b79e19084c09bcdc4d96e2727f2aba9c757a5dbec96dae59df47aa65d82297d402243dbddc3ef87474ba1379ab8dd15b3f81e672f78ed888dbcdc6bf855cd7bcf3ad5c7ec80cc4f530a412ef2a9989446b8677eaeb3db466dff0f462694e5d915e97093575c37307cf0ca4751713b9ac19be7e7cab64261aad29bef2a5a513ab4d9b36655cee62695211a161c9172c9b382b45af77d37b5fef753cc2bdcf373c2d4d7ae9eb48c4bbeb610953baa657443c3311154b27dae67e7795b0239cc77acb9af4b60e9626bde043af34e9f53e9e1b97b87be731493c526b09e372f71e72d8228f45c687d6e46e585beabbaebb2c1d95b8eb3d0c79745993eaba2e9652df151f9626bde1998188d6140f05c865260a1f1ea98665ade7d1659dea1d4bd37b3d8f47b87b6cc42d861bbeb86be1f95cd7c0f3e95884b6b9a2652632c3f0dd43cb8ca3f50ad2df98a83bab343daa16f5ae844c673073b95adf33d0dbf5681073bdd787af3ebfd677b56673b74d6d9d689b5b4bae6cea73a7657db5ead76e54eab775a2ba5dd811eefdb626d5e5ce17a943ae47a79509ac7fefd3ab7af4d993de6c2c4baff8f287907ce9a54f30119f2badad49c55c3ebdaa34be496f975ffbddb9b289e34e4fc930906a4deedce9cd7a7e8f47e8ed7aa7a31277cf9af59c8529f5bbf73bdb544f6ffd5a2d25c3447ca49e6a2aaeab1721d31942a65b48be9ac1cca5baddf0c54326bd5df05c8f78deffead1cefb643dd279dfa71ee5bcff7a8473f37e513d22dfff518f5eef873c166959737cebaed772c6754a2cb2932596d9b1909781dab0d8dff8abc402742cb0bfce5362811d0bcf697ca7c4528f65e742cf29b1e038969cdfb067d06ffca6fc19b2a70dd87fec19fbe067f91ac72203053a0da09f03fda41d88c64fa0ebf8cd714a2c3784ec69ed83ecf9813d79fce7c76ffc377e7ef01bf6b43f97d953f61bc752ed593f237ab5e7d06f0c0dfd0cfa903d63b10ffdbc71a3cfeccfcf85ec3964cf1caf712b74fb73e842f6fca97dc7cf9fefb027910d7bdaf8afe336ec49f4eff8f9efb0a70e1ad65ec74f1a3e4aa317d5b03214c562cf51a3c64fa1d7b0670c041f95a8565afdf980c68d212099b542e510ece82776232806937df05aabc18c7ef4c1118d5aad56bb51ab81000424644b1a43b1df1892d1088a05c92c0c88f6b27ef01383c9843ea81d09fd0c01555bd2a005d56a346037fa51bdf1a3d76ab51a0843376ef41fe50fa1a3a39fb41f1d7d0044333a084020fcfcf8f133e83f6a3f6241b0a31b471504107eca0e0208423fb5da8dfe23f6c17f0cd56ab5a39fb2a3da8d03814003e1407e061dc80f1f3f7e0afd07ddf163e8e82866f45a917d083fed43a04720fc043a08f63c82bde86779203b76e4f8297b0ea3ffd0f11cc75144e340fee3e78dffa03e6af6ecd1e33eec59f3f133e83eecd9c3c777d8b3c78eff1032c2614f1eb761e303d98d7e9423478d1a38703c478e9fb4e7c8f113e8470fe1677d08b488e8407ec20e84f278119087f0b37cd1cfa1ffe861cf1cf6cc7122a21cf6343a11d1cfa01311fdbcf11cdf8103c78bec399b5d878eef388ea2e3f839741cf69c5919e84fa1cffee3e7cf7fd0da913d7df878cd9e3f6a3fff9a3d7dd46e644f1f2f2afad14f7ba39f341e823d4100e13cec49644fa2dbc8614f1c384e64cf1cb761e3443f4b7b02d35827b2270ea2e3f8c9e3b74a98c63a901d5686221df6c4614f1cd7f1d2e8a79035c234d68d76dce8484c63fd3f63bf3d4108fa0f7bfe3d843eb367d0ed39bb508f0bfdac17b267d09fc39e422fcb9f394eb328308dc5fa913d6bb4fbb0a7913d8dde83873d7718552c9c3dad4ca89f71ee463f8decf981256fbef31febc334d68b74e4b02711791c3f38fef313873d6fd893d7390d3bfb39645d609ab55368343eb3e7d06dd8d7b0278d213bc39e56dead3d659671ce7320d6eb4241b203fd94d933668b98c6faf97ace61f607d358c7790854b2cd2be9edfe946c639566ebfc3a1ea137e9edb6de2311aadb6d9d4722ad7f476aa0b2e73fa5cf59a578af0c8f54911aa97dca2a56acb3ada7ac62e5c4b250f47a87a2baddd9e62acdefa385b14e6f97bbdd502c037023c38b071f52312ce9edf25802b7b9a16d0a2f966668614af4dfe93feb043b42fffdb326d5a5e70b639dea76cfdbe58365002040d2dbe5fbbd55f2e529b9d2fa3be557697d9d92acb47e4ee953697d9cf295d6bf296795d627cba24aebbfca1f95d6e7a1cf36d1dbe519534454ac2e42227c3dc2f2facfac63e1b977a23e969fbb9ea31e8b0cf43ed771ae47587eec89f30a742c420fcfffea1196222c3dff39dfa71e61e1b127cf5fafffdcfc559ee7278f3d6f86fef393e7e25fc752edf97d27ed499e557f567b7e5606faf37bd06f3e9e4fd6232ca03dc1773ffcb1a73d6bc66dbc59fff9d9ffb167d79db42778f2e7cfc363e10e644f1d9de3d8b3be65cfd6cbf067f9d09eb5fe0c0f7b0e495eb467d71db467b5a7ece0c97af2a778d29e5dcecfeeb4d3f8499e863d7574be63cf9db3580fb2a74ed077583ba7f193751af60c6ad5a09fad212bc32cc79e39dfd9392c6767c77e06083e48068221d82a777e786e2ac9ea16c853bf70a77b959dd8dfcfcdabbf9245561264ed849dc8f3c3f395af9b0e6cb56a48b2766e4492a725fedcb0fa6bf055763bb5dbf9a99f8d0fc8b05f65f81b3734401b36727ec2daa2d17ef669b4160f8ffd8cfc3e133ff8e027f80f3e2859acd7ed6922785a379bfd2c3fb331fb5e3be4ed3ff8b9f907bff193e73768b49fe1693468bff1b3d5d9b01196b79f753b9fb50d1b363ef8c9fa07f6b461e3a6fe060d1ab29fe265addbd3822e9bc173e3b49f3fa7cd66354ec39eb3cfa071da4ff0337e9276e83939fd737b1b32d96704051d76d98ccb7ede5cf6ddc671fc7c1d072d8afdc6cfd76fd0a1cfb8711c3f793ee3e777da2c16b38fd11efb593e467f868f9d060cf61941f694d953f61987051df6533c8cfeec4ee3b39fe467b4868d9facdbb0670d1bb7f6acf1a0a0cf7ed6db9fade3b0e7071f7cc89e307bc29e93f3983d81800eb367ec393987fddc39cc9e40b003fd142d12d3e8877e63868873993d81ec0974d945f1f627786b4f9c19b73f433b8569f438bff113b42e308dfe863d3fb032505a781af604c1ebd853e7218d873f5bf684d09e60f8983dc18bad8b3f4bab8469f4b19f3bd608d3e867f6b4b1f31af6b4f6b4a7517ec89e337e6b4fb6c1151e8c69d301302a50652b9d80400d4d88e1c506b03861c3521ee9c77e4ca32fed797b1ecb4ca317b25c69fc20d9cf63f684f91cc89e5440a0800b32664230022680b0fd507120062a2850c4143c309383ede7e78df5611afd8f3d7d2c579a0e6bce2eff7c599269f43df6ab343ecfcf6a57601a3d8f3d77ac0cd486e5e63af67c3dc7ca5064c3528f63cf1bd75ff6a402811732bc80804d185d7c61ab5cc51a147c80021c6053040f6c58ea5f3f49fb8369f42f7bba2c575a0e6bfeb8fc93658b98463f5a9f4ae39f6d51601abd68cfd0ca30b361f10eda53041f82b84109c280620d096c2d2bc36d588488d0410a86a0228b185cd8b0f4593f3f3b631a3dcb9e9ee54a23b266d1e59f9d3dd3e8394b561a9f4f55a7684dd4260c431edb3695663d7d88d43553bca9c39dafa46ba668cd13052ef802073c3c3c3be7b9d973117efc38959ffbe33d6e06b978fe90aec174c43fe91439df84ae993cd67cc00eb43862073b3b3b40dfb9c97312483895d725a1478f53f9b93dcee3b6f38d744d474747e75482aece93ce3fa16be68e351de00122a6e00208080828168bdd0ce1a60e1e3c4ee5e7f2f83d1f49d74c1d6b065953664d216bea08393f015d33910e74d1f3bc17b0f4a08d182e6871c3952a1e1e9e9df3c884ace94208745853c3cecece8e908e35592eb8c00bbc00bab9f3116ef23c0604047413849b444646a7f2738d6e02b99963c78e53f9b93b6ef600dd9aac2e2cc072038f881f64004667051835342113b226a7032cca24717473e721dce439ece8e8545ef7e8e68f9b388a8a4ee5e716ddeca962d6680005150445f02005bd021d6e30867e7185992a1f37770ec24d9ed76ef6d0252c100306a895115cada1e212860b2c557a40a3a58b8e9b3be77193e73d6ef66851828c068030c1073e705680070cac71c0550dc628417473e74637799ee366cf05da38a1439005c44c8145e6820468a8000f30160abe5c00881b37773ebbc9731c377b80bc2f22d0a24c2cc89a9d06ce6cc00241326b723530411563c860d6ec356a8a0843bbb9f31a3779fec1cd1e1890355b082b2e800528664daa439727b6880559b3268217381124b366152b1c3c70c48c9b3b1fbad9238359f3f4e19601306040d67c801859b439a2e74e503d40316b3ee0a6a509313c7782e279cf756241d67400114768e9a2a7a787e73d37755ededc79d04d9edb9b3d38326bbe40040f3cf0040f0f0f0f09b326cb072d284005ec4e50b0179035bb2c8a80c20aa03b41011d769d56cc9a1c144fc8300218ec54802eec26d4ce9da0760e74d84d9df3dcdc79ec26d07b6ec2421c6bb6175dcc780104742a4017e82694ce9da074be73a08fb4667339410bc6ececece87c8725beacc9656401e2053a3a3a3aa0e8fd496c59738a0c1e4c20cbcdd6756ebe0e7493fcce4d9c1fefe29dba3f791745f15482aef8d09a535dba808288d69da05aa23573ba7b7722ffd4ddf33cef9f354f2d5e6011c6ebf56afd654dcf9a375dd775dd59d67c21066b22e0a5d56a7d6f59b3b366085ad3852c62d0a08ceffbbe9b38f7b909debbc9227facc9ba000f5610c6901c6b765f4cd083167c7782fa5c37d66c1d5e40030bbe910cad496b88800a60f8beefbbc97a7813e73937c1ffdcfc94c8d79f4822d6ac7285030c6c60dd098a759c1b799dbc53eb4faf9324792a4197fc106b3ac0cc1742c000bc131478d671ac495a9348ebaf3b717f6afdf57abdeeb2e60b1428034b1716eb54802eeb2614ce9da0700e9e65cd973587dc7c72e2deba53913f716fbdd53a95a0dbfa68cdae09233ef005089e0ad0056f42917782228f73f0e6ebae9be4c79b38ff6e82d66c5913bc094505ccb9dca9045dee4f4edc8bdce9897b91275dc99a35892aae548183837313ea7527a8d7c9e35893b34846ac39b584143e808024c99b50dc9da0b8bf4e5ab3881d42c49a0fe0c1ca0e9a78bd5e37a182707f5933c91ae9197f883559325c210305aec971a70274b99b50b63b4105b9eddccdd6ef4d9cdb6e920f7293b3a6108ba4677cd09a5c0d5f6460c335a1ee9d821cca664de819ffda136e22d9045061dd2087a2b273839c0ad00d6295f48cff3aeb37170fbbec42a7711b2ffa8eff38908b701246186104114410218410420002e4545e1708082080f0e3c70f1e3c4ee57579dc24ba498346a3ddcc71b3c6071f7c7053c74d1b376edcb8d9e3e60c078e53f9b9386efab85944444474b376d328478e53f9b9396e1ed56a351f3e7cf4e8712aafdb43878e53795d1d378b6e0ed1a041e3a6d14d5a8d1aa7f2736bdcdc71f3031b364ee5e7dab8c963c78e5379dd1d3771dcfcd0d0a9fcdca19b3766b353f9b9b39b3b8c8c8c8a8a8a66b35379ddd94dda4d595996373fb81964eda9fc5c7bf3c64da119334ee5e7ced0a1e3547eae8e1c3972101111e1c081e3c68d5379dd1b1f7cf0018d461b1a3a95d71dba197453070808e8a6d0cd1d180c76f3377962b1d84d1a377b64b253f9b9b29b356e96414141376ddcb44242a7f273856ece6cd8b051a3460d1a344ee57569fca7f2babf59de147574746eda9b403b3ba7f273776eceb809e3e139959fcb737368c68c5379dd193765373b513c959f2bde8cf5f49ccacfedb939c35a5b96654fcfa9bc6ecf4da09b614e4ece4dd8cd9f9b9b53f9b9373763377d3cef547eaef79fcacfbd9090505050904c268bc54ee5756330180c080848144fe575c59b3f37714892bce973f3e572b96e7637c7ef3b959ffbddd4b9c90ac353f9b9e1cd9d9b393f3f3f38786edef8f89ccacff5e9d1c3c3c3b3b3b3a3a3732aafabd375a7f2baddcd9c590b0707e7bb2922c5d7eb45de74e98ce3e8235a134a0abcdea1a88cd73b95d7f56e864320b75a2dee8bb158a7f27359ef19dff47ef48c0f25556f77282aaedb9dcacfed2cc7718ff2b99c158147a720973b52a3d035ce9a28f48cab8529f5ebfbd536d5f3d5a537f97ca4ca63521fa9a98a5012ac0879c8e4abdb674a29b548dc90cf88888454a26382cf0931ae3d3d49f9dc7aa9efd63f457dd7a99671bbf5513eb7da04dc467ed7fc71fbf43fead1952b57ac08ad096dddad043903b375bf6285db5cdd6c596ed8ba6709c1d6ddca8fdbed66abea6cddfb36b2be4f1f329d81e42b196ab83f6e3d8f4a205ceeb56ce27e5c1bf9e336d5ffb83c1ef971ab750a7251b091f4f255150f977ea4cfb91eb1cd2cbafdae44a17df0556d2e0ba637907c95e5cce52b2c5aaef9ba7d8ee2f215961b6ef8ea99f9dd3ef71137adcf0fe9b80249cf5757c2b8ac7b6fd6bb9b5ef9f5acff955ccffa359275beed29b1ac77a4a663f7908a1ebd3d760f2be57675cd7b9febdaf7be7d56c937f44abe5f496fd851efdfc3afa4b78e9ff518a9bfd27be89551d44989bcde7b34c2d7b362cf68674daadb7dde579adc35eba3ea659dc7a4ee481d863c16615993bbacb7fe95e6ef77af344dd3f4569862ba70bf73cfbe23d556e9745eee5f69c62eabe4eb95dce59ceae5ce631267b99ed15a72cf28797906d547b909847c83e4d3732bac01d71bb1673e3da3ef2e5f5d4173757a46cf3f31ca514a293df78ed653daa7b53b8efb77390b3bd29d7b674d7afb9c8da2b75f8b50dda61da54084dc35aebbe9f5bdf2bb5cd7baf3c3aea4972bf92671ef4a18777ab987744c6aeecc37261957ddb9320037d27bf77a3a2655cb957cbb925be44aa6372619627ac6b70fd474e50b13f1ad63529f47cff298c4f5ac1ea97934c249f448ed95dced4abe5c492f55a5344dc82390f4fc907d903cf2919a73421e327ffb7cee1a3dbfcb908f48b267f562cfea794cfa7a568fd43f4853e7d6d3fb748d7b7da8d335ae67fcfa58d7bad78754e44abe3c76476aa4ee524ae842517d97febbd4c28ef4e9fbd446d1db59ee199f2be90df988e4cb97c725fab6669f1ea979a8564a81b852e69adfe5937dc4d9d88a99cb17bb162e9739c5e52b9971b0448ff589e0d712c1926dad926d9e0d4173eaca00ccf54eb6ca576bd6718973aab7a9be6379f5b4d2d37325ec48ff8531c9eb2e0721d31590dceb550cb65ca60dc26b5cd68d28e164b085bbacbf1e7d9f495ef39775ef269bb9aca3c03aeb3f7c2e8b752496917a74c5eab3ac3be9a36a63fd042b2eeb09e85a456a5617ea81cbeaebc3e5b2c8aed5b3aed335ee2c16afa932c4e056fbf53106c2b75ec640e86b0d40c84a4890fcbe4f8c8640cd8fbcfc1fa9b59ebcc2885baf530ff0f51167a3b6dfb87c7545062ebf427a02b2ad2e5f516183db5c2e5f9949e2ce2e5f49218652949535d7a40ac2bb660b1478c1e5173d01598bb87c5526cca5465cbe7a228c8be3f2d51337d0b108b8c499eb84c2e587af35385ca729d735a3b088c1eb9a515f72c8f1c035a33ee081108b6b46d18045774da829527079e9c60ac85c132a0c99cbdfed36729bfbcb476a2a4adb4be8442feb61775609452feb7434c297da26da03c9574e8c71cdbeddbb7ca24cd43deabb4edce68e07c1d1b6e073a37c3a9096fcb034bd771ef7f1092d773cf8b003c157257024f25d3c2dc583e5f81e8fb44ea9d99632113d78b1343b94e27fa5492f158b360ec28fb9dbb5a9358f549dce4bff517a4aef1483a1cd956a56b328b566545f273ac6f5ceb12e455e28dc0d866bf69d5863c0d0e64a7d66776abb14cd76faaec400c37d92f26eeb52ac0b45755b967b46b9b7e9c45a73bb47b553bd9e8529d1ab5bdfad2355efb594eacb3dec0600d51097328e7eabd24b4fcd168b76775bda2ae1bc9f6dea33655922fcbe127739db545f6d13bff9f4d4ab41c843661103f9ea5158bbaeeb5ae569d5d5ae86a700ba376520bd64a9769d12c83a527f5c69dcbb92530ae94becde65f7d0a30ca45e86eab71eb67c2a8d3b589295c6b1c6a4ee1f085332a972b87d4f04b7edd3af772acf76c8614be4b1ac62d59f02df028f58b5989680e4ab2682b8958800c0b76c95d6c10f806d2d6bd5efca310010086203edacd2b887e3527d5b53c96526a2df2110c4d67aebe6933a5b7fa5557dd8a3d2cd15bbecee8d4a37b74bf2f6a9e8c74eb42b9989c4ea3207703b1bba44ca40f8721fa913704d04dccaf5678290290f24481f239930e2f6750410d22f24534a455b84908a80ec73ff42d2148200d5b0e02226846848770630f390ee3caa20e4b6e085a333371ed2d921ac709b3675886ab9d2bc9062bdc1a73da33f7b8a52d14a656073b9833fa4b9dc5b336c1173bd873384b9dc4725cc5ceee1c7f3757c621f9a75cd3bd76a89afa2f84f149dce2b867cc357d8043bc27a77168bf5961d4b0859a08bf5ef610b3cdf1668897c6fbd25fe2be9f528f85653c702c1d6b8c41db44ddd4dee5054d7fb372e716f896ff2ce9d654defa26d9dea76e578b0a4ba21d5155fa5579ae16bab6c1acfb5fe2aaf5cb972e5f52ccc46b4af776acbc26c64d6eb596a43aa6c0b4bbe269518802de4f85a47a5f09e35c78716169ef5d1c242fbdd2bc1b33e56d35742fd589f12f7960d5b5e096b5922ddc387f68a0f9bc09bde52689989ac136dd37a5de21e5e8f5ebe1dff83e1f25d453d7e88d035be53940aecb007e10a243d872fca85e44b2f9fb6a824ec35b7becf502ba4774d9f5b7f734dd6ade733bc2689cf30991848eee69a2f3e73bfabcbbd962c90e607865e21b96b7eb7cbbdfe03f321791cc7841a24d0785de7755dd78d5c92d73d847c3daa3322d1e59a2267ab5762ba5c7aeb63e3abf8aed5d78b7df4c5663a437cf9f52c063252335c8f49dd9de5751e1315d50d548e2bbb53caea3aeff5acaeebbc3246cdd0363eddb97b36d6b3ce32c7758f09f90ca49ab15b4febf7eabd7aaffff179f5b57aaf35f4ba8c7718777afbc2b8f3d511501ce1bde3bc8faf9008f9dd3906e29ddf31107a7bf4ac3b13b7a867dd79aca6c8a5a86ba618eb23f0dd45602067a2efdd7174adfb0fdaf7a13efa9af699b01e5de3ab23be1ce934ed7b771803a1b70b5b65ac67dfab1248ed7dafa7df1148dcef30d6ebed0b63b1ce57471871f9ea8823ae4e495b36d6b38f55764ce4752108d9bb214f04bcb42b53355d0af9896d07fef461581221f2bde9132f5f1d71753b26f2fadfb9ec83e5d767b1ce476ab626ebe1c3666b8645c0fb1697209eadf939b9702506186ef7290cad1314d51d6f52e901196d2e1493f952c30c77b4a135994d172e7844b4a60b173cf3b9a6d699add379cd1a56da2311f0321321d55064957d1e8bb0deac0bda26d6db64b1fe957c591f73255548391e28975b2dff5067e84417d88d4b3311ecef3b087eb30b7e253d588af74a96f7102c3beb95fc952647643cf85a7e17cbf048f50b1ff25da549a3faf647df3ab5e069f98144bcca9796e35bad576b86612d5966f7903c5257d19ae715c14a729340da73eaf593db473df9d9a57c5a8617cb3e59b2ed555a89a25872cf5a23110f7c587e47aae0d7e2dba519d5745ca2ddaeb31c97cbb79e7211db9300d5654571afd6a4afa5793e497daf8fe2eef5b834bbe6d4ed4c179c8496ba536bfe505f70835b7fe81e7622abab9d8ddb25552bf55956d955fbe28efb2f7512aad6a4baddbdd23cafd7dd7b8f476c5cb37a66bfbee37717bc5d5ab570c195113d70377d6ef777cd2cbaddbb1775dd7f90b713badd87faa86ddd7d5a60e6768f913a5dabefba77e7ab0714ad40f23b8ef2481ff6132b903eb7dfac37cb5eb1b2b72ff651b5f559cb6d9f9e71bdf1ac285ebe6ac10b20f0aa1cd7b3cab58f16187175588a24936ce2b823dcc35a4ad5739c7974bb3f15ddce3abd38aec7a4eaf44e05ccd50a890150d9fa55eab1540b8120b67e4f353de5c171a5493671b771cd4b6f67b690baf3f2310d6e67bd7ce5f7ae24800e29886863e3739d972a53ccc416db676fccc416f3bc5d8b2b6ddc90dab8dd44c8ae16dc8a30828835650f45486af4d771e92fbd4e1f5122b61421715dbebaf2e2aa882d7d69e5ce46dc2ea187dbaf57656ebf962605df3ad79d3b372ef5ebb9922bba603d48c1da81157c152fd683e06b58526f24c0f72a9fad127a621d8f7c221d09f01d200bb57daf9285da3cef55bc13be57f94ef8cee268bd21ec72eb4f6fbcaae1d6d7eee0bd9bdfdc2bad7cf7de9553a0ad3b3310d63d3b05dabc9b74a92aa96abdeb4a6a6b95564e41a80c24f82cac5b85bf81b6eedc5fe7ab2b370ccb28e00d2f964aa0ebdc48841e47fc583641092f7e14cb28e147be38a549756fe85fa5781e9150fb6aa27795b0701c620c0bd00c11c41dba7c35840d4354c15ce3e88db0d055c2c2713c5277236b3c327e083397351e016fbd67ad7cf6a4b281360bebd4d68da5972a96688f743b7b7add596f7976aaebeefd9cfaeed9aadbbc57ddd6b2535fd7bd3bcbab617758c84d91df49bad05958f8ae3ba5161676968acbed31a99e76dd37e5f58745c84361bf3e75828d24c0f8299dc6198f83f3f3d13b8f278cc729c5effc13ce2a361a26b48de4ae09557a2ebe0af99ef36842cf457bba4e76e7f104f23d476a236e3d15a2875bcf62379af0f39b8be5785759e5e7ae77e301803ede2b4df8f98d3d5dd7693decc40ffd74017db4e7cf4557c9369fb28a78a00f955580fe739db2ca29fee7add2a4ba263d1692af84e872c3ae8c022a81b7bbcec3908e07705de7afb28aebafdf94a7eb3727cbd375f23c1ee047a73c5f1fba5852ddf0e04396d8f17880f3e6e3cfd77dcea3093f07b227f9f1a6ac02f42af655ca9f5355848e739d9fe46ffe2acfff04b23fedcbfb9455ce53fcf873e737f6f4f9c9f39cb36da8ac729ee3c933f6a0b7ad1b4d70fde6dd7802f91f7b52d95eef294f6a7bd9ae34c1d5fdc656217ff39025d69100e2816c95f1aeb346cf9af0f32ae25fc729cff12e3b55a5e7432788d60ad0c5bfec1468bbf9584e813692194867cda2eba5ca75d14e8136f1de6fcad7c9723c521d4b6a2300694ff1a3cde2ba95679ba0746fddfbcd913ab466d16d1db466b7ca28955a01fa8d3da98d86ad72c27eca7ec61ef4a17f25eb626905e843ef294f9ff73cf422c0e532135bbc0870b9debbcb01a1e5b213970241f2159935d7f4b9dcb95fee64ce343146881ad0dc20ca04d185055a8428c382322cb821881a806003441a20c4001106881b6e288a5d0963d923adeb9d5ef0b2d25c46c34a733d4673bd11ae5c715858ddae77d6f56ee812bb12d69d55c23aab74bdb7ee777954d22145113771541ae1cad5f598d8e2fa903da9ed9c61c7d3daa9d1eafc2c6dd56d2f3b2574f1b7534259aa82d8b050d95e7f5d27864b1f5456dd767359192ba7c6eb1c66a7c8eb90a49d1a6dd56de4c503952795edc729c86d3299ea30f90acced526af329ab6e3bbff367d56d53ae8bbf794f79f2d82997b5f2d2f9b963a770ae63ab6e1b9f63ab6ebbb15338b6ea36d7456be565b9d24cbe2a019b4b6d14c74e5c6a592099b866e705cc85c264eea9b8dcd61800f1e3c97a34daaaf12e9b65b45682d85c5c8fcefd1b0330fee6643dbab155ae93368bcb5a791fcf9d3522a1ba5e679b0640657bb5cd756e8afc4e7abb912ef015acbbeb596e73ddbb39e57a16d65913487a13854b3fda2ae3c573ff6808d4de1b0ff0db78f1753441bccb9eae8bae5104a2fa9ab4c19a235a821d2ea5f43c448fc212dc2e8dcb573c98b9b585047ccb16d11cdf917a8a04df024b5a458216a6d4b7dbad9fbadd6eabc7919d2bc55d28adc38cf06d59f0dd8dba481d36bd51705c5b7cbda275a26dc6d31b86e1e812491c9c1b1ec4f4cd714892ec5109ce430ee76187f3c271fd8674b95eae875508ea352b0632173c774dfc77bef8959f78235bffbe7b9bde28c852a767e0290c64ebdfbbf30d3f9e75931c9184e711496891680e50849e8167953f7a063efc518f86340d3cf8e3823f2e781e87f40cf4b9e04d36e2820fabc8750d56cfc3d5e52b1e5a70bf7f5d8355eb0400be46e8ad97de8ffbbeef2137e5f1f58ed6757a455174bd426b4eddf03b18487810fceb11b5819fd5a39c832fa221e494d4268a3c80b9392e5ff170bb6bacce70a2589ae2616388f39c1236de94b0f1e6861b95e43cf4c430e7214b0c73c81c9c1b0b135f2ff2f5b013c35729047d8f0028a1036d1393f1b0086be0db6b9d1f5a713d7abda4da2afbb64aae67dfe98d64dd7b7d11d5f11d47cfbecf7af6fd7b38ab473d9af6fd337bdcefe677cdd9ad32bbdf79ecd1b3ef1020bbef668f29aad82ae96d7ad92a8aeb5def21ed4aabcba4ba30a5da25ac2fc5ba4ef476c5d30b96b03e0ca417065a00505dd17a814010db78beb22a73f9ca0a06b7155a73ca3290d6bf7ff5e8f5ef643da2b6ef3ef5e8e6df4f4300ff3dbc29a90d2c4d2a4b5cd0ca08ab1aaed5952a82a5091e169eca984b4589db2aa1e8f542fea68485a7b6b6bd4a5868977caf67a1b6d71fd651c9cdc34e6c95dca56392929b879ed82aebe531003701609beba6b4c26dd88c274b2bd4f6b230d03abdda5c2f553d6ce3adbccab065a1b6f157bedbede6b256586d6ce3434e6c957d796c42c752087a3a964096502feb5f47d575e745d8971502bd3484bee90abb6caaa7b78ccb5756b7eeee7cb5c31897af7620e3f63f6b42112feb5e0be48d6295dcf5bcabd941cc0e6176f87284e57967d18786d08d4a7d398f5eefac12bacbc2b2430dd75ebe22c19a4b823357e8f21509ae4800e69697af4830811bbe98bbe6ec761fa221302575cc7af3b5b9cb3563b7bbe99550dfb6692ca1eb6df2dec5baab1d40707d68087d69d9978edcb9de246ff7af6bfdee220d8195fad5d25b4f43e8126a09453c267105b3c3eda4b8f50337dcf2f6c39713bd1db526a5e311ee6dcd2e579712a1af47aa5d4bd8914e8a4b4d28aa4bdfdd89dbb46913e6d6ae94da21f2dbefa4b8b494dab9dc33ce561bd5477ebbdf16a6444d7a8fd0ce4685f70341dca8be52f4d623d5f2d6b2bc1d155e3e55477b091dc6dc7ad0bbba5dd76809be83b8f520b8540f9e8e4858b605f29adced76a34010eca21e97c09bf436d1831fd83bdcfad1c9a4eff05ce57639d136d73b1ddffaf826d3d156d7eaeeebbaaeadfecfc711a6839a5b0f1ef651072b6e7d1d45f1e2e812c310260bbad24b16f4a26060e3388e6309737d23ecadc360ad1c599791c1603018ac94919eec3c97edd035d9bb873a42b0ca0626248e3922d735b009e8e08bae094404e8e0917af0218715e754b76567c9c6f77c7c3896b01dba067b77d698148aa2183b52cbc4f249490cbaf8bac8892f710c61b0c74a277a61174b7abd8bb7bb819d838df7f9f8d0bbf4a33fa5492fd0795ca2ddf140e5cf8f4f4fd9d9d0b3ee3c650da36737a5795e9cd23cc9d23c5da5795edad9d0355ad9dceeb486d165423a8216a654dfe49dbe9e3beb3c1af1b8efd0b5f1ddc3711cdfe38fd4b4749dc22e5f1d41830e6378408b0e37e8a085cb18a14856dd76f1070fde9e1745ba43d7f8761fc72375ab75d75b77b9de3d74b95cae1004c597289e04cb2725100cff1d040f82a1484bd08984eb3a5fd0f52a9de875b93e2ed1aecbc28e8ca71f2ddda167ddff123c52bbf0db97d6defeb2fc4ecb8f822fadbc7f947663125f6d60cda54ab44bad1744cfbaf75842eb82d6a472c187dc24dc5e4e5defb4345db8f42fe9b3dc5665aafc7fab567051c3cd767b85dbc7f72cb7fd9f35b9976cf3eeddec6ef8446bd2d6c1b23e2c4d176eeb3c9630bb2d25102cebbd20bad67a677637dceeadb2c9f4ac33c5db5130b7a33890dd9b0c05d3d11e6ea773bb933fdfee748777179b84bfe34613caff7534e13fed6fcb77b6c9ab54b09ed120643a83152097cb019dffd1105847c6dc7aa0d2ec0b3b33107a1750002040c25e746959748b2e8fb023353310a3db469747200890de8b2e1d97806ef61de9a5d6a4f7b3e6381201e132137da7e5684daa26e295549796b0bb4a13e85dc25d171212127a15127a584521a12335490605053da422590605bdc7a420974b144531872062a7a22c054097af5e50e68640e2cff7229fa5bab4344f93de75af34e9c7bbaa1ad1ebb45020eef512ff1a932e59f20d61221de963211d9374f78c747f7d6380b1f73cf69e582c16036397c962b123f563b1d817b3b02342172f248ae1eb45bb009526bdb0b3822e3e483c3310b3e8c66ec2de0f4722f5307a63ff5e55cd4b1445512c65ddb844ebb9ec3d97992df372c457b7e52593893299ac7c81b2d7718976651676c4e7affbfcf530563e7137f617a7237a3d88afd7eb75a4765daff5facbc28efcdcf51ff1b1f2bb944bd7c41d1914d5f54a936586fb58d2eb1245beb2d2895ef1a348aff758c9973e140f2b818e54814abe3f25ab4ccfb8fb941e989e71ef293b2d2c33e60996e679cd6ecb91d9152dec08cf5de7b11f9b9e7177d99d7a4d9699cbfd63c332a353521cc8beac325da35e0f3925c581a4d703d33597d96db9dcc39aa66b373720f891c8ec820f5bac69ba069eeb6e31e07b4c02df46748d529224c9f388d46458ab68d22e977c1d93c8d392efcd12ed92b68de81977ca256cb568eb5ccb4b795a22353dd319c2e7b0c325ba7c85c3185deed1e5ab1cd47051736b97afb8f4a0e6c6c85c5dd9e52b1cb85c1cb674208c1be288acd2a46128f2f859f3bcdf69699297be2cab6e2b455adab3fc1468e3f6f17d0f43b1e4fed150145bad77f70ea3e74b756147be7b2ff255351eb5e679e9a92ead65545ffa6f5ca285773dbccb765a7ac685e71e9a517dc36f2432bbe1794c0aa9773a9ef6ccb3517d5da2cbbeccef7a1fcb27a5f1df95703e9ebbf659f349e9fbcd95c87f1fade91dc772cfc68fd6e4ee8d359de81dff59937be69d74d1722cf9be4a2712ae8b6f78a4be61382ed16e686147c0b70eda9aa667dc5b076fe85aeb1c97cbddfcc6b8dc5b25e5d233ee21d049fe3c496a59671cc8a6ef7ccdaaa6c500511c487aee9fa56f81bc51e4f5ac97aadbceee81cb123adc6c535c1a22365084adca0b27956de81028b26529b259d1775aba56d5748dde1b2e5fb3aeb92de672ef31336a9a192da6499861d22e973bfd62db084bbb340996da70f99adfe5ce750de6dd4bd56de5f972a75cba06f3ac0964f9be9484d287eaa0ef4a20c641df8d2590b79e1b4db02f5f47135ebec7256c9b61c94aa3a7e312b659fb551a2d2d571a3dc8e5f28c298e4ad63ad6bcf8b0cb57375cb97c765dbee2c098cb371618bee2b81c88e640f6e52b0ed8709dc8dbac77697255b7b14416cb9eac4fb158b5e4fbc38c4bd7cca8be95c8ec562fdf91bacbee0546dcd9ade7e5dee55756ddf6895fd56d1e099f3dbf4fb1ceeda3b9316e97fcaf641b8f4bf5f6ad536595dc3e4cbeda80981bd5b7b9d425daad9672615dba030d70814272e41157567136eeb53481b47167aef54f45b75aa7d7f5c255da15217b3762cfb89ef175424a4b1f2864c9dd5174adb95238afbe5757ca1b6f59ef28e55d7ea26798dfef7189bb299137a5a7af67b4bb7837f4b489ff62a2bec9d6c544cd3dec22dd305c6ac99e75d606a597a3b48690b3b7bb47c7dcfe774a84bedfa723926e91522af688e448ff7bc8540892af6c08e2bafe9d13432ad63149b44de1c783a5d97fd9af743d74953025ee76bbaf73b75e1e95c8db7ddd55d2db7d1da95d25bd61bf49fc4bb494f5ee3c16a123d71b97157be6ddec377d07df3de446b375d788e426e8721da9436e2c42ff3decbe33fdf71da9eb7804fcd7e462a2fa1713d5dbe598a8aa40723718eeeb26774deebafe2a9f9c78cded76a3702ef928f19217eb539477c527f151de25cfe31126f7f5beae93a593d07d5d2c9d8250f1f57a59661c2ed7434eecd2042f3ee4b14813612b88d8fb3a1d95a80e26150cf765bb4bbe63698a484d1f96fc267abe1f3d7b372c4bf6ccb3f6762eeae52084427297af6c480114b2bb7c650398cb4433c6711cc5871fc7711ccf43630fc2300cc3300cc3f3501846abd56a7d67bdd56ab55ae7a15617ac875c4a71e9d8515c9d92de6e7347266275f9f58c75ca3a97f403f403247759ac8f0c24a9cf625d6420acf3104b8b90ff7ac8ccccf6ebd98bfb253291ebe3c587e05bffcef25efc57fff57a97af2dc2eeef6ce528e6035869ce288ce6769529e005ef677e4d50c00bda28e0674deee6d77d8eeb66bdcb90a35ccfbaee874947f8eab635916e3f6c895c6fb8f3d5e52b0cacb97c26e276acd2e4ae579a9d157b367e20ec3ab26b9f12f7b0ebba92ebce4521fb5edfa767cc21277a6f9dbec724a44a4b1d9f2ee44a297abb528a5eaf03cf959e6df2ee71d68cbadcbbd2146ff710cd0d5f6fdf10a6c44c6cb9e1bbcba5b9a16daaa3eb4aae67dd43a6cdd5c5544757b9128a78b91276a4fe7a4dadb2e81ef4aad89551487a1db064bd557ea7a3d377634cc4ff2c5b8ee3a80895b88e7b87d4dcc73a527325bddfbdb3bed2870c3b29cabdebaee46c13f7faaf04eef52bb9f21cebf4ddb9effbfe59ee48d549bccdb5d75c737ddae75eacd3337e97ac87742cd2673d6c918eacd3b35847ea104809050050e1f88874ff3ccb2a4dd69bb87f0fb9d7298dc2fd8ed426bddc3fcb8c831b8974e702215b93bc2c527aae67cd0541d27bef26cf7ead85b49d19c55dda829087cc33a55840f1b94a1fc06004515cfa2ea1f85ccfc28e70979ee38e4499c49d9ed2a3b9bafdab4baff875938a19c39bd4cce5f7ede6e6e6e6e6e6e6a60a07070707070707674b4e4e4e4e4e4eceb3fc681b5a474747474747e7597ed874eec3865cf3a5b97c7a868f3ea6359717906c6ce8a31aa66e695a7fcd1a93d39c71dd643345e60fd2ec344990e657832dd708d2ec345d0326a1eab35db9d2d3d373a0353b3b3b3b3b3b3bcff2c3b6c347577878786ee5c5e6b3f19c8787e7597e5408309027beba4e41ae172bb48dedc6245cb952f5c3e6f3aa99cde757aa7c6c3e4fc3409c289beba5ea87ade7331b90bdd2d3f32b5966362bb58c9bade7597ed8ba18a1eab62b593e9b95179b5b161f9b15d618b79bcde766bdd273b3bd10e1c7567d361f5bb3dc7e4fc953ee943a654e8953de94452640d26bd6309c49c5701353dc7e35c340b8300ce4b75fbf90d66431d7ec34361954555a989735bf4bcd8c56b4269f09ade973691a195cd51f612a8dafd969c0d4bae54b3d976a4395c1964ae3db69ae40aa578b5c7c059273dcbe58840c6eb70b1032937c758df491adafa48f6eeb9fd0b5eff613c0405020d3dc7afb3617db35798cdb9f0521c271fb411808f77ec8954ff54f52dfe53bfd4a85f7ea8a5c1974434ee44aa01b762257fadcd013b9b2e7862c912b796ef8895cb973c396c8953a370445aeccb961287225ce0d45912b8d6e388a5c59744397c895e20d5f225782372445ae6cddf046e44aef863822577637cc11b992bba18ec895f5863b2257f60d79747276787aac0efe556d13523134065dca15b8882bcadca87aeb8ddbfdb36eff83dbcd455cc1e636137133113fac3e70578ca0bb8203455c51034ba4455c41c3e722a3b5067ccd201ccb88d589f143c2050ef10253409ae0e6860b0e77434e11566cd11169115664d969737578445a44156cae0ecf8e4e0ece0df9728d6208b6be9ea6ac2e421a0352ecaff149c3868f685178f38768b2183664f82333ba6e705827b426b973d1f29c5af37787369d8606d124e47012ca71a3b9545a1fccade726d07fdea7555d336387994197bd4fb774cdfc854cfbd21cfa0cb3c669bccdd96dd44c24331b35ca188da1d267862d75ca97a4505029ca62e507032ab91f9f927b4e4800110edafb272dcd0a5d7312a295e142d79c84cefc38c91126c7ebc6fb28e400438483cb97295db367166acb426d59a8adc53019255de3d9d1c9c1b9215faeb16ba20d6f803a5a393e1caca27bb4b7f5f2018df6aa1f5b918e6e1d3ade5f8a6a910edb5c72d8b3d310d9b33fa0d9be1243c60cb5d1af5b18d535284a6d54d4942953a04081b2c20a2b3871e2040514504840021270c20927986082094a942841820489112346860c1982848424820822fcf8f1a3478f1e4545453870e098cd66434343ff63b1988f8f8f8e8e0e4992a2287e5fcf680daa56cb71d532a5dd155490f4944b3deb669177f3477736268b61322ed4a359a5d57f37bfd64d126473c39b173f4f0ccbebb8da54904b7c2089d0db164abcd9824f0b42b72d1d4f46493d62db43eb3a684dbe6a59f3c767cd225b15663e5b15675cd656451a9f5b6d55ac59033657053d73fbb49e4c656a4dca945e3abbbae74c26c3597356ad39eb335a421e322b12a4d960b8ab1a8c49ab6e9fa6a947671afdec2b22a320cdb398eeae646210f290d9dd3edb696697599d264c3de2be2b528c0f996ba69aa9475c55d3fa0c9aaebd3c71ac5de8faefe343925c555fdd3e1731c5964b3bcd17301c981ec68401832873d532c20a31dc98ae35997365ba46da97f5d268bae6b25da66ba3f5d264ba26f699ae85b6c774cdb36d45d73acbd936d3b56ac55471bb2667664666286a4acf625074749c886202381394acc0a11086f604ef548d9a16c5a668d068b1c28a2bb40c1d63cc182a460c5d238a5d258a7d1345caa65ce203d935d4a065cb962a2d5aae5455d5db952b63f4ad6f6cc618230c366c68185d8312454bc36835744dd7a044d1d2359da6ec34748d987ad46a9ad60fe3768f71fbcaed7fb46ab97d9615d369d8a4b9940b50165f7ce02ae9597b4b6471e59ad0b3f681c11542dc137ad6f54b0d12b809e859b36e22b828f4acc32d9cb0e13ae959cb6e3c00e2aed0b376fd40031b2e949e75cf0c5db4b9537ad620170ea0e046f5ac3933663a8d7873ec35e06b26d96c5aeff718b7ef3593e7555d337d6a1f49cfca293d1b026505119c9428f4ac7f53f62813d0b3feab3ca1c4519a302b95941f583213249331f36385ec27f633c68f3d2b18589a1f35403f3f416cea17189aa0a0d75b1830d82b97334131db69d6b0590303fab1b5aa6ea936cc40db9acd5833305484a1e28a0a313e5490b1e6bb5b4ff74011f290c99db9358d162d3d545581b97285bb7d19638c2e6cd87009238c1bd6acb1a1675dd540b158b6a6a9695a0c8bc5f5c08141b2c390215d4410e186fe3eae86efb345dc16ca7df94090e3d2aa9c0df409d22ce2b66c69356ad0d433e11b0d9a6a453563851565c65732e3bb4c9931ae573163c618d1625a4cbd32c1841aea16d69120d152f57dc8907aa5f57a6b5d04117a8c6603be478f308a8ad6f4ac6b50b55a1c4170989e3514c7d9a19ecd2a18eeb1d80e3a3a5d44b16733a8ce86f6ee440fe5d9fa85bc1385222d7339ad69fa54545d9392b92ab2e17611539cb9e6d762ea1165d3b4fee7b2e6478ed6247d4431a1186ad9d01b1b4abfd423ae86a6f56ff8ba903bdcfec2f570fbcbad57dc96346a6230ce0cd0183f3eaffab1c938324032d9b92f95d64e2f4e4ca5c96230cb6db1814ba57160b830dc15bd715b8a9c205f96db72bdc4d4e878817d747dc70bd05fe479bcfcfc06e73d5e7c9e436f424f8984a71cb2538aa093534e81b28213141270820945f52866674da387155d7ad09a1f90e5a6993f2e7dcb9ae4cfd5a5fface9737dac98afb326d99c357de8abe5cef0f44e0e210f99df96db677a397a4d2a8625a61e795f9ac5e54b9a2f67be98f942c6862f5cc07c0963b2ae3c36f5c8bb35997ad499695aff36f86c21ab58b7dfc787bcb1d6d423b67d246bcded77de17ef06a61b630c356cd8a409230c346bd69c51a3c68a3469cca04153e6cc1932561caab39d153d9b99e91a547727ce3639d136509dedccf46cf64467a6aba262c4f0188ecc574634435aa173c6074d2ccda3e8a562c08461a2fbdc997a44c734ad5fe6b38244739b3ba3863b43c58c214def2acdd535a9982d642eb7e5f6b9301e19af8c178677c643e3adf1acf0d47866bc34574f905cc41461ee961a7ae82d405cfa5c973e07a66b7dee86ae713b74cde9d5372a8692a166b82f35cdad6a3a8c9eade9dafb358cae993dc6fb954dd7cceffd3a46e56e5d33c7f7b92b5d33ab96f7b9aaae99aff7392d5d336b0defd7345deb6a43afb9bafd1a44d7489e305d7bedf4d03597cefb154cd746fb7eedd235d1f62b97f76bbfeed0b516cecdfbf54bd7be1f7b523367ea0d5d63513295d63e3d968aa9b4fe548eadfba46968f79a7a649b624bd3d886a63197ce9ae497a6f1a5bdc6360598a6f1e5acf96bf61a5ee203f9044575b95fa649d0a31beb91695afff7f1f1c878644aef0b13f5bfdc3e576bf53c28bcaf45f56a9e2a42ce65eb5fb19202ba40cfe2d9eaadb8786cdff93e2f1bf72b56523f973e0bcbd6dd4aacc78673fee77dac5b110acf17435beb57aa3a5bf82cd506decaebcced66cb92637b9170250b8e4dfcf8e2c7461bf92b55d586f32c9dede6565eb71ddbcef9176d39bf52c5d9769e85b3e9dc8ad0d5ed66cba263fb21e1ca952ca0ade757aa3cdbcfb3b4cde7565e6b6e375b161ca0f375a825795632cfe87fca181bd1fb943236a2ef2983d8889ea7146223fa9df2878d80d808c6463c6cd4c3466c44ff2a4536a27795231bd18fa58b8de8c5f2c546f461d962237ab004d988be55866c44ff951e1bd1b34a161bd17be5c746f45da9c346f45cb9c346f4b5e4d888becb8e8de8a9e8944fd733ed75d7e70ff510d9e7ebfc2c91757e2cc6b1bc8eab3a564d247fcaa3cd45c8dcce8dcecdf94337f51c7973be0ececdcdab7e6c3ce73fa7bb77bec8c33a4febe0ab806c3ce1c59df1ae5701d974ac95d9f4c2b1a795496fac95f972955cc995df57c66262f99743431e95abeb0c421efa3e92f4f1f9f84c75fbf691fa133f8ec5bd1e07674f17ea7d3a2b423fb69693d0944af39c5e46863cef2b90ad8f658b2aadfe47a5d523555ab5a7924aab3fa1d2ea5128a2b78e4cc843a6c7e5c885a6f56f4555b76ffed8729ba90db7b9ea765fc87c6134d7e4cc7437cecc8e6b72551c18aeaa863953c3e85cb3d3d42d69c06bb60d7d65b60d54cc9a3ee5d2851a41c1d01ee80e34081aa623436636c381e48708467a0c294232bb2fb7fbb2c3982e4c174427a6eba133024c77d5acead577b5a767031059dfd7e16a7512f2b6545abf5f5d9a4aeb77f7aa843a3266ce549f8eabb65b5369fd8e4da5f5bd5ba52d41d29b1d19cfa3a22d7e1172d7f89c914fd1a7726cfca1ae9d533b3739396c804232d80f39e37c1d1c336ebceac736e3fcf710d907c580fa3e3c3a389fca1167ecb00f8a95366ad0f8d48cd3ce8f1111d907c5caf13e366834f8df0ea3227b4e15e998cdf0f9727cd003cbf101ac87c64ed14bc76b0ce970cd669439b803f9f0e8e07caae724110e7b5601d96ed8736a36a314fae0403e3c3a389fdab13fa77a766e68d68a95330b6fc35a893fa766bc86b56ad1b056dda7843e64adeacfa9196d6f5fda5b1f216bf50ab264fb90592b972563f6838d3606245aeee1d9b1569fe572ac956771ac1547cea01afbcb405814fb4b87c4f95488248b0591389f82f1f81b2b283997f5a99ee7bcac55fd94cf77ce27c91e1f9def8c9f120f44521cd7a7c659102886877d6a9cba79ece794380533528fce29f1326bf5fd9c1a1f83592ba01f6bc5ba4feb533d1fce733ee5facdcfa99efeebe7148fb5e22e7e8afc0e3db350db39a563ada8f5c9016d0cc75ab52c79f3d921d25ae9582b2839d7b3ff38cb4d89d62a8ade6ad95af5940e55ab39ab35e4cd2133e6ddd4b97cf1845ee203f9d4fd0515ee8450a298d30305823f50a397b30ac806f4f1502e17cfeff4c2e979a5f4e7ce5d3bd00fe8437742f187baa16c98a89e2fd4cd7bec69d574c3634fab26576b64bd92351c0b8583634f23a06e6e2cf78c7c5fd9a8aeb92c94cb65a38280d2b5d1428da385d2c3095d132d9428da13b824a06ba1850a439b802e4eba065a2810b44e7a36ab6f59a856cb86f9acc96b58168a75a73e14cb32186ba1e89dda3639d13650dc9bb3269f797abd4f99e82f37365fd2a4b9ff97e6d25dbae6eae1d2b53167a887ae89d60b98ae85575d03bfb343d75a3e627d07d1b5cfc6be748de5f3f570564d4c06995bdf61bae659ab261fab261d6ad544b669d366cd121f48ee218f457edb9ad489fb121f4822cc442691499520e995204d4a86b2b9940c1364c8be2665c3a61e3597a6d57f1f49d950364d9026255344d9f4f0e4bc3abd72ecd969806c3b553924e8bc0ac89693f3aa1f9b8f93509fa9b4faaa1fdbce151f9f77984a737aedbccddc7c7a786c73f902a6d276ec59f50364cbb17d25a6d2ea9b4ca52d41f6cde6d26b2ecf98faa8c8e6014118d3b9f4519e90d36bcded2603c11ca7d795dab9e0a3b84b459c2727d695ea017d406bde5c0ae83e39d12be573c347d1abb343ad495eeae706273c3b05b95239177c9447be2e05744717b5a6eb523f177c7212ba523b973eaa03416b8e97027272dd6eb70b3eaa5e16b5a678a99fca409e9cea95f2014133bc14d0a5949ead091e4acecd61e17837d6e9d591dcabb6ab7bb44e2fb17dd04fb44e429f3dbfef523fd70cad97d3caebe4be5701d95a9702ba66ce05ad939015a1366ddad83ecbed837e2ac756f56363d973c8b3e73b7bc6387bfafcd8aa3d75da077d1590ad2dd93ec0a9afbd2bcd3a732b8bb9ae8f63bd63fdbbd7a2baa66bec32fc5a9ce95d5131a459abe8142433913942615d71e3bb940a4bb359ef87e5f8b1ec91654b08ad13bdfd26aef5a51123de7593c9b82ea601ad49d31cbcc87d19efb2269319adc964406bceae68cd5ad5d5aa5b4fab20bfd423239556ff7d24e9e3c3623836e0eb3932e16f83cf16b20abcd9dd3e33e4995bc3735f6e0d6f726b6e4d03e6fe8e52f476d8a5cb8ea5d348a42fc28ef0d5ed90c5984ca6559acc66c6f2ae66d7ecb8984ce69a1d176673cd8ecbad6c1343cdd033b79eda508f5eaf9fa2059ba6f1ad37528fd8769386b949c1dca45f8eb4850d5b6e2cd2165b9ac6268b212dd216554d7b59a42d6e4de34bc6cc9934b79eba80e45867c4163370752b7dbdc96c4c26c35993c9dc993d82342917beda82cb35990d9b357da4a4697d3366ce9c499386d7ac699372b9f5940bed42bfd01d2818da030d4383a057d488eeeeeeeeeeeeeeeeeeeebecaa19506740d1731cd751eeb6b812135e22a88303d80d9e14b172e5137c460403f3e3d3c3b5509b872c2cd8453890b4ea8e91a8d4ad3b5700a9aae8150ce74adb582155dfb9c98e91a0b85325df31240a66bdd09634ce81915a3a467f464b8ccfa64b84f24757c621fa26bbe843c643697fb85cdad7c255d33a909239780d7d9737273fe0a5d333f285d335b53ba6682d7393f8a8e11438db8a24184a13d80a13b7ce959fd0c07bf88df83ffc3ec394fcdfcb90fec40b2c7ce2e97952ef4ac3e560f2ba37a560f54d21b7eca293dabf729a90d3dabef29a1f4ac9ea7a435f4ac7ea75ca167f53a25ddd2b3fa9cd249cfea714aaaa567f537250a3dab274b5ad5b3fa5799809ed5bb4a7aa567f5637942496f3d33e9cdcc0d5d0bc3b0a16be09a1abad652b3a56b5f1a2d5d63a1a9ea9a77e64ad73a2bfad635cecc185deb326cba46c99c32d127732b9bdb3799cda537e9179332419d2069d1ada2d9fa77333cf8f162bdb999739cd79debbc22e919fdd0774a233d7bcf86f42cd633a49ef9f44c849ee9f4ec47cfca1e3d2b8bbe124757ce9acbe5195430ca1a43e6f68518085414eb2ef18174a2b78889faf46c668989facc47454cebd79b644fcfe55325c8a253264893cd50326477cda2db27d423faa5697d305f18f28acd5031b76fe6f68bea11bd35adff91a48fcf358b7e4d7aa34dd093a921086b1668ee8f1f4545b3998f0f497e9f17f0ac9bbf59c283598471f9eab2ae5cbe52e2abcbb226d5652df1d5659dc722dfedf7a04597cb5dee6a51c3e52ea78511b71b9758e7de959cf53c16a14a96f0a0ad0a7f8e076f45fc2f5f5d5779a5caaaf52c564e41ae77ced671895eb5b9b4caaa75aeb4be5dfabd659d825c2ae55da6b6efea8e6515b58117cbf0d4c6e391a95b94be197e3ed73cfdf79924d34c9f4b6ffadcef23491f9f7f362b2a3ae24a337f5cf33f5e69f56c76e7b567cd8f84b6660bb177d6a44d4e74cd6d6b7e9c35e999a872d6e4fa52b3ef757addb626fdadaf476cabb55e8921732b9bb9f5f21956b7a008fb740892b528734d1e73fb2bb0de8722f69db8c2f751e001df4f00ebe7f82c3ab6effd1358f6ac92f9f4bc4ace4d68f984ad9ed7ab9ca29d0a02bb12d12704ea791597c5f9cdcbf52a4267bd8fc4c7470c43b0e755467bee5c769d976b64bd4af92c3a369f501441f06bfdccb155ce9fe784ac97eb55fe1114c5ef8bb5807ec26c951f7b067d67870586ae57f9f9277e5fab0514f3b9d8fa8080623e2f43f067eb1f100c168bf9fc60eb5fece7f82a4017b2558264d6ca3b2bfcc0180cc8b67c7efed8d63f9fdac6d6fa3955a1c0a2450cb61eee5578ec3915a44d1bdb8eb5aad7b1670e8eb5a2bfb153d48ab343dd833516a0c1f6a2b4872e58686173592b93bedad868adcc7aaf8a68cf293a830f60746163fd9ca25060d1c28a2db4569d25b9076b2ca0c5065a2bce8ab44d0e92b881ad65adaae5280ad060b185edb356d47e75061fc0506363599df65104496f7230aaae4533210f9914cc6daa85ee10765f1240af74a11f1713ce1b38960d48eaa36aa8d50bce962152b2eb1d4acfb458d34bce9156a8473916c772d3c68367fdebe19a9c06a91e512d4debf768cdaf8ad6245bd6f4b9e12911245fa13163522db74faf90977c14795bef9f3cd7f528f0debc1f15bbe3a3b8fb7a7f85ee8a8f824191eaeb3de7ded81ee325ed8f2fcdcf7d591cacebb245ac3442d7b343f48e16b469a4c6dbb222f4ecd7e434b79f80f0b61eb573c7f74d603dea75c1f791b4eef7fe10d7a32a92ebbba38df95cd13eb4e641ab83735bd6875ad3e7b3a2785996b42679bd28ef7657b75a93bb35caa7927d3966a22766220b86ec9655c8c92e7d54bd4f2c1fd77d22bd47e1dc27ee39e77f409765a37ceef728ef3eb5de739f5a21f8a8d67d12df3a9fd4b94fa28d22afeb513e777c94789f5e3a4f5237f7e965a3c88bf3289f7bf3a8d77d226dd477c9bf9ea4c2fb9463a3beabf3a7289fcbf328f2ee3c6ae7e69c9d289bdbed76a98df2b93f7f8a22afcf7bce7fd79ea2c82bc444f432d641cfff292b13d1fb94cd44f43d25b30e7a9e12c644f43b251013d1eb943f4c449f53c698881ea7c46122fa9b328789e8c9728789e85fa50e13d1bb4a1713d18fe58b89e8c592641df46109962113d1b74a9175d07f258b89e859e5c73ae8bdb28789e8bb928789e8b9d28789e86be931117d971ceba0a7f2a11506245fa1d9724d71f67a1c4d4295cc26ab1f7ae1bcfe376e5e1f03faf9f32c3a36d7eb7d804672e75578ca4f017dc6eb75461267fc39557ec6ab9c323b45e3b4f708fdf5a40f8973f32a2f7b4ed9388d4fcd2ef4f267161ddbcbbe4a8e4fc13ef47ad10b49faf8e0e0dcb87efed8730ac7693fa7884ee3e7548dcf3ef5c16dcc287f4e0dd91ff62a45cfa26323717c706e6e5c3be34f1e1cb7f173ea83d7f814d1673fa77e0ef4299ec384fe2a3a3e35747b8373e3728daf9f3db6ca3945f40f3e85e3357e4ef9f0fce7533d41b7af92f329d9875c372e976b1c5f53bd848dfccee87abd76c817fdf0f87c0ac7f6d2d9f9b9f373ca465e47cfcda75cf7f939257bd0cf1cb6ca1491b5128fc35a75b09f533707fa39d5739e4ff9fce7555e9fea256c3baf72c39e531f58ab3ecd5ad19f53336bd5ba0d6bc57daa86b5fa4ec35a813fa786ac95c97a5b9f19d6ca0c4fedadb532bd7fa5b532bf83f6b75626f89615b25666eb9c8dc11e64ad4ceee714d065d6caec2eda2a317b4e8d8759b27dd09f53ae0359b27df4cf299cff58abd08a533ed60aecb1562dfbdd9cc75a7d368b8e6d47c79e5532dbf9fa948dfc9963cf29d771ac156b6afc8db5f2ec1437c6044fd8486b854ed10a383106076c2f3be5b2569d656bc5d9a9212ab0c332e14d27bebadd6ebd195e4a765be733f8b52e25bb2cfb5d4a763d6b3af5129764754c88e182fb92925dce9a4ed48b1bb8c0c07549c92eb5a61337c6044fdcf1a6139592ddb6a613e5ee44b790c24b17573cbf9640e4cb358a3dabb605a11b82ad8fe575d66c41e852dbc4b5207439dbc4fc7da248923a3a3e3eb19ef59b4ecf2111560612d5b118c89314ecd24735c8409ea478eef728968b813c49fd5cd6a37018c89354ec7a8fa23b0ce449aae7768ff27e18c89314d0ed47d57aa97aa954e83110a99c4ba5bcfb9ddf622052aefbd9af675254642052ad918148dd5c96155f0c448abb1e10a91b0622a5733d4be6301029960e03917addceeaf03010a9ee612052e06d205238b7ad0f100391ea600c446abc1c10a99dcbd958100391fa84188814791b48953190b6a762d17a01caa1b95deffd29114f40819b8119ee9e50d9d4db7df6a36b268b31d275573274bbd9ed7ec2ccc6ed8e02f8ee2bd4a32b56a015a18f3a1b5f6111e676b7fb2ca4dcad64b55e65a2cad53b73f9e414e43613d54779974fef50d7ba277e9477848993d0a5e7d229c8a54c54a925d28d45e8e90880d26495e603aef7b34a95a96faad637b7ac59dff459d323e2bd95dac28ed42ab58401a0e978a49e7af6087ddfa76bac9af78ebbf75352276c9155f2d50cc05cafec2ed935f69058939271bd3218079fc7368c83efdd1847c3d075cd4746c8940524498b547bbad457c05fb1aa0f5b255f75872df2991109372e55b635a8d415005413b8df5211af498274bfd7653da49dcb9cda6204e97e46908a44b94e534aa21000a872b8df48848acb75428106a6ffa8c407970aa4b1440b938e318488683408a0019315603050301c0e48e3405324f9140013a4a45252a0c9c3244752c82063082206000306c08c00cc0c01000086648cc34547c220715ff132cb82ebea9255efe0a217a72ded80d12daa25b008d56b46117606d1587051baca14d6ad785e59d0fdd5f42a378b158a06951767b7b30bfd91c57d68c5e84926ba021cc6f4fc4a879c1bdc8be9e5cf62dadf9093b46154c4454ccf3b25977c159797cf48bb6ac1064d631220cb3b4272fa37523d22408c7a2a2ef867a4ddf83552adaf8e13025993be6b31ace0b81347c46d84d549b242e21f06fe4ee378bab025d1256fd71b2a6f6f9667dc36c71de837dc080c80962aa4f68b7dd0eed7ad14772a1a771543387d97ea8b82cf11abe8e26aca1a031bb1f4bf5958771f923453a3d652ff310ce960775e369d91e566f9c88fced2d95ba853953a6240ec31a91fa6301c2a0d92ae1dc8c4ce385e0766c15c4a6801e0ced2bf67a284adc791c0795f311d80fd67dcc6df40bedbe78d3c184d95f3ce9f81cdf3a934e76fd7cdf04d28b3de66dfcc041d2d6ad645cfb95c1f136547ce0a9fc472485ff81f2c90f009aa7951bc2d52e384b63d3155d8ce1a4cf836a670067cf7b61ba8f05fe5ac9b76a56a36dbaad55cfce91a316b0b3ba83793c5c00072bf9229d4d5a8ccc772074305c25f34125c8a87a65a6077a2c15a08b1d04841d4039a92967635eee01531bae6c5f58bf3c9ac4219b6fc04ed9b21eb73a6fad1b94150e83e9f55887bec4a8280ac7f81e63f803aea68fbd18f2230a98511d0521f8235aa92815fc13d5ac6de18e8414007bc5b76f531c1d9721f98aedeee867fc27950c4a3a8d00a2e604f292b61c4e6d93e95d23e7070c78980246a390a641a2097cbbd46184238989b27546805707e537b5410a73a3521a06bf422865d1db1e7fbe0b5872d8a10c25f34cf9a3b90cb353bbbe15c611c3e10d01bd9cebbec0771288cd82986fa60a2bfa3c7c575cce1d68706e07dac2fce1e1304e77f2c7fc74abd575851f3616fe4ba71b4be11bd6c8eaf3744571b63cbcd8e3de28bcd91f5a6c278aeacb4f181d954ca8fbdcfa371110abe2be5a2939df278d317954b1a8719af59ecabad442186c1056d92a083a0e210280203c7c3b510fd783d7876ae0ae49cecc5afbd855140097378795e1ce28949126e8a54194cc124e3f406c10805610b3e0df3362405baa9fb9d6fb40101fa39941931aaa61ae3ba88316c05108976f2682351a6555b8a23168957dc5935ece7f04f77251eb9069490c9c7f3f760038222961f004993dcb4652d18eb2482b1887f2d4b9d2cdbbb8815b6e67f221962bef30bb013e64317345fee5ce204ac0112a8a1906494de49c0b4e1570b3b860fe2aca73def172332d78204e266f434734a865077ad1306aea5c9b64676d8da37576bb60852947e6bf128f99712713a273b4187c79c324e97cba1f7f4b2f00ded32df8b5e3049ff9c75e603691305da599e2f9155fc3a3475665d1d78aed71276658abc9b23fb71aa63370fbb93592eb0918f28a5176a1e57b18918beb681d430adb86b6edbb3bdacd85de5d6a6022edb27deb69ba9e7d62ed3bd2d3fc2486cb5a059fcb52e30a9a8d3d6e05f6d0c2cf74a37188d238c73f1770730b02ec202dcc9e825a991f15292452e7601d0bb31d80e550a4a09023f82e3840d076ecf9e3ee4ac8a1e473fd302bee4f4fce26341b40e96aef4fef72213052e6e561a4cd15e1ef53147485d87e6801a1809d100b4c712b128d96e8c322faf4c105016cc4924d8c88831446b714533b746aa40d1aac46404da219948846db106b907574ac8104be42c966c24cc08a66cdb263964a1fddea4bedce6cec81d5389d5507c0e6bf4ce2e24fc162276f32ecc6e3dfc667ad8edebf38974abaa6c9553ddac6ed6c671429c1b22ae24da3a72e8eb92998c5fc6e4ce72996ee00cb74c4841b16bc69f2dd6d8bd368468a6aa5b24d9e155896676715cc4da95cdb22f349c2d4a4aabc73143b067f5cac62f23b6316a660363262042cacfc5b911da0c8b6a324c659061672dc389b5b04bcb90e4f6aa986bdb112b34e684f31d5908475ee993cc6c83090745c2db793b4141184eee5e9a57e0f6c54d63223e783f3d5c3b311e31b4cd3b73521f7c417691314cbc76282949075c18d4360120282a060cc215ea3d810cdffaf9e67eb422d1f98717885a13deb96ff47bb6a1d1d507b64dc650c7c4157858033d62835891378f6ca4dad0028e35e8cec857f1017ce541a88375ac008a4cb95692604bb2498cad69c68c9a96595e158ca2d1bd4764060333462dbdd5e86a054f14902755e3f218f863a1a263f7ed5c6aab5e9b30acd8da35e9a731dc7f797939113df0b51ae8139485fc2105209d08ef626063840d5d92a3119d66f28a75312ba423fbebd3251eb3311de6c13dd025b6af6833483f0923f2063e818ea7b73bcbc4715eb417d6fe94b9b49697ff6e74ff944def277f40947c7617e4bf5f8e3bee8c9375c5568314c7e80bf113ef41ba283899644743ef3bf2e3a3e51bb087c2d1e6f45a0ea19049f46892cb2a49381e0959a60d6e3bb53c74f2f6cdc98defb106e92a74083f11998a8afa49964bd4eb12908ce08c711edc5946db25211315f5ab159b1963c6f5884c802a8e0b884b5fe62dfab838843295db5e777cb6c663c04101b8268a906162ce1c372ff58cebc3c0edfce1ff3e6e7b517e7a377e08e56807863497d3534bd213845f18e3ccd764f22a075948ed818ca816a7d3d92067ac14979355651e9b47314804f660a236343c8672752a7b68b409cb6691ef18924d20d3a748937d46ee792168c1eb5ed8e6052c0dcd0271515c8720af1ef8eed1d37fd44b88f7f31df0054878bcf629be86019563e2dd31ac824b73ca7f8db9c929ba46378a9459f7aa9062fdf8ab359cccb7cdee13b8af6278ba62d5399093d55fb4961db5a5033478f3370d6133ce2e89217e024e1ce0c1f9066503c20e8f2ab2f1fc00d362f748503ea77ff360b11507fcc3e6dc36091fc4c38cd92ee8b7d78e20293ee877cfac2ab8a9b37a5855161ac69f1e044aea050fab6cc6c30b9b4f69a5f55320242c6a482ff70dcaa78fe1a4d2ce9cc35c43d357ac82029bb8aa32e38c82e2f42cfff2551e9aeef2669d06ab8aa897429287835491c88fadc9dc01d744531d29562d3ea411d7d1cbbac763b422f15263e160c95e8501fb1bbd30f15b91bc58726e5350d43279c9750b4e339b00406ed5457f196f082083e769a9bbe4c74dd72d7c63a4a15f764e3d49a6efaeb3454c934134b15c4151d68f17eb3bf7b34c958cf8e6babfdf6d164e3d2359b167fd6dce8ed205241ac5e726978ec2976ac1d853d7445aa2b17d7e530555f4e0d3e60d72af0b1d25bc77d8d563e0430c68628f98f4896373255b145b57ff7e37e568febd5708d3aba6e54b7fd36027d2abb181a356e84979b0984f2768a5499c6bccef1255343d6f8533fb411c95f122a4f7ca14a0dd50536b19650517475573c5cff6516d3d06732ed84ff7386d79595f745e544322955d0afb0ee080671c08a4b67d4d1afc7c6cbcfcc4e0a9da86b98517b55b645af1ea25454060fc7ec7060efef3d85c823c0fb6cf5daf4f813e17cb47c8098b31fabe5483917611bf4accc2ba0ffde5e37355377f5d99cd528b3b1a9e6774a7a611ed0c2b99e8d551772a2b70e3c37350aaed6b55a8748d86548a7d5016a2f1b8ec504142003c9f1c0a2100db8d7416273a2f53c7b3c6f95d5367b2e9106d68246e84876e22ef9b5fe0986c8b75643f673782158bdc5ee54e4deeb73c024b7c3cc85c49a2a33672937b2e21691f4d69fda88ae0d8fd1a84ecbed82f1a29ce2ebdcdf4b92890a21895a110ba23c1ed2a44ebe64106607b44c866a07addd88f5f86a57804a7aed1831c3093397ac2455088436db897ed26aa208040fc87100d9316646c3015079e091e6e7d26e28c51cf83a2bf314a70d0a8382134148b8143064a6c41a9a53eaae4ee4bb60f2a0288b813c4eee1f6989172641531d1702ac22b51d6a2fd5006313756fef232b8a660c78e9d50f03cd82267b02ba048a450328e5386267885b7e1861c19684aaa6ce748016ef56be1207903340cc73884f1f9c005b33299826b559f7249c501023f69404c73dbd673dbdf3df5e527e32cf741e3e70456488f9cb7e2a9ba9d050dcc8c8ecab647c96b20a9c3d3b601fb691ae895e6df986830d9f6166fcea3b4414e3beff74523623de1f857e7855ff8be67d9273c620351d290fd416c0ed001816e5a4aaa76986618de5d8290902fd930b3f131d713d12d97f80dfd9f2bc971997ff7c379d41f3768fb7b6db177e2f6dc10875c0c7cfbbe01289980c8cea47ad0233c297b30bccb6b5b74f173e5a8616efcca80a72805b93287045221bb641f64d15ffbb98ae3e735047d5370037563c0bb196e05c430949aae4af49a3ef0442b46ba6429dc90e1f11df00e7742bcab6513c63ad6b3287c08e39ccd5a4dc037d0ca422da165dfa54f68153fc151058e66bc1a507ba299096dbd17cde54e9b5e44c695ba0241d52b0428d9160bf3a352167cec7d9652cc96a8cc88fcd1c0adb813e08fba7d7e933425551705e664ff74635b34141c74afd96944ca12395863237b4a4c6006b061de16d47398c8f348087399af4044d621b03fc7e0b6d46a64aeabffe015c2ca64746019a9a8c49b5bd891e96fb6baf1ab4887f8d28d770f9cfb6a13e10a96cfb5dee16245a05a99a07cead027138dcc6f57dc55d293592b394e6da7c827c1183b089e3b4cab6b750a1e225c1d5ce1eda236bc6932b7e4a6af61821d7959933dc7630b53ed00b6420f179f2ff50532124dd8e36a41a40832ce67c4029e704552fbdefa7f962810bac443259dca3130457ee8500369512b894690fbc99e7a90f4a2dc9210421b397244c166c3e6b003538eed03b6458c64da56872e26d33241e725d6e795f6936922d37b0ec5bc51d559cd345cce7f7b2eb6b6fc648ec6c723826b0f17b60d7e1b02ca21c7e7a2af2c5139e221fb87537e18c70b57eedb4d8fbd2725004fdd0458038137eba3d4e35a212f7fde56ceb38a9b92b027eab71a6758912206372510f008796d0c0d8c19f984267657a1ce2b3df9d950e7e7ca6ffcdb796165eb258820198575b1b0fea64de8a75c76975fa3d93c044751daec60917ba002944b255d191466ad86a6cd830f0412cac14038490a8b77da18954a0b2780f71e8c796eff7a4c6e15504624c5aa16330295865d9d053368627720d8944acfc511af2c952c0c9abf4e089ed08ed98c8f0c1c8b0c1d2e1b0431249286fb11e3010721ddfa346ecfa16809377923b845466c98809a91c634b1ff19200e193f106327785e0546b747f752d10f3a4c3370212895a7195046a482751bb0e4857237dfaffcf3c488f0c5dedba151a0b0dbfbfc91faa86dc4e7dec20b315792db9a04ef38a5fd48e97ee8a31e9c588d614fccd2fe22abd7f6bab105ab02f478f037acd5fb7072a0c0f6884a982cc4004aae16ffb5b430b2eac1d3359ef2c72fd63314818c8e0a829883cee2f36caf364a23fa3e71e3838191ebf3fc6288ece3f0f18b36f12321fb9a2130beb2d74cb72ae38d358bae9f5ddcbcca907f29901620c6c2ea20b39939e150e23406440f0e30def840efca52857686c50beb4230844bb7ffe6a17edfb069da074f3f142280cf34cd0762ed2aa0062e92332bc2d1764c6c64df7e18ec64e804113bffb1201dc923038b29886458a2e5b48c8feaab64348394c4cb3c1b3f5b7403e7e2eb92b0b9a074703169c302683b6989a462a10f1b9c98aa6aa38915a5637a51a43e64b47264d2938f3eb8ec75d596351b300100e9baed1b44cec0f646b57e37f949f0bc361c79e43f0a6bf6b85a688c4787c3154c63e18ff1c60ea5c961726a8285f7be16591c5ed48639dfbbf7da678f5671e7f1b405a545f1667336328965eedd7fbfb30461377d8ac73bef3550ea5c97a7d8046686622bbb59f9759bfd6bc5c5abd3c9356efaa0959248d5f7490a33a7c635bc2d5c9693f6bbe854c67d1cc0fa9fb4b0c84f6be948251f02729d5bdf7e79a185f77f6b2c3e6f9ee40a03a1d1179d0e755e97c7be5203a869c734010cc9baa3297101f7369da7ddd8b90ecb7853b46219aa9a3c55ac59111e050cff6f6ce3207894bd2324dc26a7e0fe7e8de1dff909c03955fbdc05f7e5d279d4d872a567b64a825c8d24004a039f87a785a9a762ecf1fb7e1dbfe4d1a404b91040d5a712c4e979cdf05dd26188832796e0007cf502a8adc84e0909cd89e2efc2462b5609b6815808a4dda4ae8bb9506d106148c0235a54853f9b7da247c04219ca6128532e03f6f3a3c21b30dafbd6ca533b2f6e32cf15e2ca571fe7576195533909a4826375b9ef45e4c0682cade656248f0adb05c257a93a2daac570862516cfe9294e997063d36b208dcd5ba17f2459729898a8021d0e3e4cfe851c949083b440aba2154b09250ebd4c3e8b8e719a7a002fe51c8290e233000ffb32c599dab1e2640ca8c12e2368d6138c1d46cc103eefa4a7d3c2248d3451b233f1833ad018ec217d3dd0175d730687b3af6251494218b41da00dbec8260644ef8b9f484ebad53a16817561b29bec116028374405d8a92b2b1221d925bb54f2b337a98cd1669f4742b2d76b180703bda0c40568456899f7647c3b15d604d88503726a20ece093e39f5ae30f75a686e5f696f01137bf89c4402400707c6d0c3190ad7362d535ef9b114adc1ece4ff55f45bb134ee85d84ab036d8eb34a9da3d9c4dff958331797ef73fd4e390a4bc9b611be55f145ed8bd9056de37dc521dc576e48d4708fa561038a4a5b35bbe28d5ab64fd36b8c99600a45a7225ebae1e18a4a08640b0f84b6a89c091e4e783baa967157db371aba92a0ff0429388e37baa688be7e60b0edcc37bcf43bbf2ec1e74617ec741ba96b48985b9d034ac756a6960dc70592f5048a33eb06a0888dbac6eb83d4395e4e78b92a69881111c1f2b0c0ddfd0325712e4168657000f8aef74e2028f353bd857be4578502efb3e570dbe1b9a6a81ac1708e260c0ed419f8d2c9f1377de8fc028795c665738da4088f6b496a48c883444602a44910c92d38b86dcf48bd243ce368736e929518d1815a5ea8c1d4bf1c6059a6367f75672a654dd6f138eea6164fa7facc53d75f58215b894ed85ccad12de5693b2395bba3658d7317445d2072149dd5ceaabed9112611613863928c28e1ad2b0d7a8bc4c3b2535e96e8b4c273a685cc54730baabac2695456ddc5b8ccd369509e4fef128f3cb8baa56c9fb466c3bb4621c999c3247a721b65d3414fcf86976b578d6c3168c95468ff774f1dad4f0d3821020a6c5ac081559bd344450c8d05fb2146a9a81baec8725996362e38885dbc26019e2de6f4c6c937c91a310943e9f042577efc1ecf8ead8b80a896b96ec173c579a670ccab79e161a22c6e31876ce1bb213b80315433f5bc387c23bc62079759c11f3270c795addfb1fdd36fff7aaddfae5de84c7b8046202a69063b1e111c43679782864833ec44048a4826d048a61eed95cce56ebc96cdff7265ebfb6cc3ef3b5eeb969f056f6d0571dd65e55aeac23cbb4e806cf883b2b6d5c56fd91b2f9ad447b3f2ed5373ea63f4f8f67375d3da4e779ab96312e7f7a4e9197969a47d6eb396ac07a7c13930fae91e473dfa9575db8eda3f428033dd92181a8f847e8aab596c7e22397ec64769fc952e0853b50159daf205e76380894f447487f7b79b2bf535f152d6a7a5cb98069f7fdc903b0231060a710d8d44741e354257c2827ebc3ce7c3831de80af9c14d878580a92406e737b09db7551522b13244ad96ec16a4fb0af52cad8d4aaedd71702da74d19eb3e319ab263eb0a85f137e87971aea376090b438f96340b3951c363561f907be59bb5ab8bce6bba3c45d40e5110ed139d7bace4bad0eb9680d1d2dd922b0825706ac071cd0e1947e24e45d84946626c636a1fc6724b8bea5bab4442d5e8f3b35ca34daf130f88ca349c6356abe8027d56bc3209cbd4454f1f959d05915898cec1807d3a197682a9318b33e7026430a7e40f8dd816b35969376a401ea6735ee57a348ff8de302baa6b74173b84ec61e40f3c8937a1f44840f6bad6afe164cd53959e3ab6cc7719f605c1fe7b3ae10ec74f7e890c41281b365a5b4ee753bd6853d6351d29ef7c021958dc31a4085f457d62d186d84c3f5ac4666361a12f409b250729fced8337b9d2b0047485f989258a2a2e7df30fb9d24487ad4813055628712a077ab2bcb6e7b9ac4521a9d3cb1af05632cb31512946f0812bc934d4f793684129ea59369060f30adc7085f91f37a62568d7de13a8ce3cf3073ede232da0d5ab7ae5d30d7a9f9a41cf5b7fa181d9c902d01b637cc064c80440d7e725aa72795388f8b2146288cd36459c7c22b3561ce4a18098a51395ddd559c5614a030b0437dbeeaa49f358d096db75ac33f12264239d0bebec2f94fd788606a70f3fb0c3c4d8f572e56d6fa3106b00af156a72912d6173597a95f9939aeeb4e25b3050203ac8b6a30bb0d1ed7fe0c42de25b3ee05993c4f88ec20d646bf449a8fa66ff552a8f2ad85f53b82759b2c61b3d03941d94da89b21e67268bdf9a4b6cb171bc2bb94d8ad212ad772dc5e156bf57899d7022d755df0dea1548308747038a454010a92a8d16d5a59648304b0ba08cb0276b377d6c2f02a85942003dbd5562cfeb2d7ee273ba67b069c42645ab9ab8093bd1866dc66c67fee156b314424298d0aa6de57e9212b42157a984d8523a9e424ad94444b651bbbf351bcb61aa2102b745c5be24d6796cd3de22c41e0f5ab943a6f20c6c4d8b467eec76c3a62828e11f722bd449e3bf3036893e2e82b4beda7a745c1c997b1f56430340534f96c0f4a8880e96b7f80b793c22edea22ac03fc733a3072961baae9d52a87a78ed642ae8395a546ce83ff0f06ae646af5e8e929790e84b578ee0c527305c02991dc73c99318ddf9d45c2d2adc64bd25857664a6663b300bea438b90a61ce7ccc849fc4813a7dacffe60901655e53b4e8bbb7f7ebd920974af22d428ebd0c5c304328d795bb94cffb4897dccade329f75ec569081c52c1de1ae203d30fa11dd42852f13211601749c2b706599ee841c0a129124f4881aa5b99378d076b6fdcd1b5c482d631347718790e45799b5bb966eb9cf8a3830e9a122c76dc279fcd591c32c1a370c4d66bc5819387bf2292c02946976bc60569e383094c1a4f0c4f351e401aecbe0d5bf17f5693ff21faf4ef1fc00ea2b162d12f756e469a1cb8a2d12d777b83e8009b8d2e80e87db789ed576186b3f965f8ba029b5e67ef3fbd85dc150d1c38de3ac5e0295559bef47a03d8ec2c6d20e2cf58dac366ebeb123841b32f5c2ff6b59e1a5a6767a7f71ddda5ff2e0b539a651278f0f300ca52370ec39febd2562ce1749f12b6e0ee806625666340a3d4450095ddd6920204fb23241b892c313494dc11d9f2eb6d492f8d72865c2fa5a0abe18feb46839dbce8dfe49229f0022b6d4bb7632043ef0fafcedacddd4b1fe230019f0c904d00a5265b8391d2cc45f492e0143c1a16b32c6fc207b95953486c1120fd32b2188c1e95c013b82e12f2cb4aa9a00e2388d853453b243a0d3f6fdba695712385dbca1590e4c651ab301840a6b2db0c35dcd28bbfa9dd78974633d0bf088d52860dab215238e174854f7c37717d4b1455e8628970f1c00668a0c008deb66b7e0addcb29e06d335cf34ba25d2e308b52373b1a0d0cb0861d933994e3ea36e1049cf1380e5cb18680687e1b1936b88e8d8abf450371b1fab527442066bbc043dc7f506ce7137f816519b9d5380040c4a14d25d2780042c4a14705d2284c7f040e934dcac87f380729c8bd10017832ef27dbbad86623f21526152a6b12d1077fc8e85440dd700b5bbe5f9b2a16fa67d9e26831e9886ed01e7a11b97b8fba830bb668ac6e73d530f155a7d1a1b983e8d90ebd98aec8ad10050f3ab012eef1ae113967c394e69c0a50a3817ae513e53c742e9d20563f2caec8383a8d091d7511590b2d8fcf6e51397e2beb0b99b7b9e8912fc6458e9036b440047f71af59f07c8fed67c8d7ce9c7b338c6e54e8119ea06f5446a4f6114fa7873c49b5f751ea6b33d0b3f20a066652d56157642302c43705558356bee0f25342ac619029d52692060ad078cc36257d4efed8b61204d441141899e11fe4750e1831059f5fe5f97c5fbf20532b7cac4e2f50b558e0ba9717303c27c157e4889bcc006a16a13364cdef3cf1cf0b3142e8346c27ee582dfcf02a5caf12b65552c5c2774612da4752347d2674de9848caac11b7387f3ceaa55a5d0f6f8e79b8aefce7f9751b3658a1c80394dd22379c437a79491ab0e546fa17e6d223262e8615b8c341015fa7f1fb289105cd3f9e9c8319be05655ca21e8a27cff4f124c9cc9597901c0b715514378e00b742e40756689638f7d41276d8eb84351a885067d0d806d32594eeecda895eaa038c8b10a2475508f7c76c1b0f33375f4e37de9a17e3da8a0de74137a3b9bfff6222e733cd5613fe9e0f9306d56c68745a4805877d48379b01b816c9e80f3de002c8d575ced2cdaba2bcc53fc157f7679551d115b0314983b359aef50b23bdb21381079b41b42d1ffa9824e2b5c5b7c63c88bc1c62d85a585ecee38b74f81888622d560336743e8e841e54a2a371f5ae17b9ca0381602836b98bf719883b74dde905ba5d968db50e7a155c998622ce9bddd551b736dcff0040e023246d27f21e4eeff371c355770dff3c3821c72bb4ee86578cfc4fcf35317961a5c307aabee8b0f099915c3208316818042fdaf7fd70b63ead85d88ad370d950431fb1304d7306253b74c8cabf4fa1022ab47b48d5800d20de2dabc1524f69aa37a917745cb4986848d97c9d582f479d7ae5723e439755d481f3805e59c363b91c00e1ecc4ffca20f8cbe7694827c0e270f72b0f0365ae330f92bf0ea627e5e83f543a75d685d5bcf397a21b940ecfa0042b7cee313b69fb47e2f1d3117e66a6dc61344e813254306f3aa486c325c59e2b09adb9aabf6a0a3d2fc09e85bf0de884204149ec801501c6a82c8d50b6360dd80285c94aa9637b91a65dcdbcf60ced846c39dca76aab44bca8dba4d2b81a18da89a1ffae0606fec25903ee76e74e7bf6058b3e68f4626427e6b580c57a34c4d5ba0af92d9418aaa18966002c060530db6bfd82cbbab9b8146e9cc02f8151fa68a8314dcd3a999b3db44ec8a23f7e9560f142fcc5ea9452776953e4e1f7b2f9024abf6d41e5078fe5ac49e2e0812845c28eb990ccac0a9b936142ba42b556f3556aa104b5675709ac3c396a8c853c0218627c35d7dc78d0fef62dabb8982b14241e5dae194db058072b107e2dc88d7e389f35c378a1346900810c0b71223075f9aed10318d92440d1b6c0f66dc8b94370789bb26ec8893454f5406b302622f8d46d0507009cd1b066646606b758e5ce50a8cb324247f7161f76b7ea2300fa8bb592c9553345308fc1d4aefbccca7a40cf0cf225d3a2ca0f771ebb1d6be692eaf8cf187e1836e400934bf23183deb32b7c07292bfb83033cec2a0b985240aa097883b6b89e076f43632ea6ae24553967c6f9cf6ba9221112d3c4b023a2072cd67d341a6f7dac1bbb59926ec2b3c75a89f8c10db52d647cf4957123ca9e72b9fa6b35cb4297bf46a70d8103e9ef27e3e2c467841d48169c43685be05dfc01bde33909a33904d5306fda002d606cc41dd18163f447568191c5fee46961ad5e387fec80825b042e99a1ec436960bf1b4976fc58fae774b518a2718801639296c543f481018a92b2eccea9f298473c800b88f0cc80bb2cdcb0496906f5d723cda29a8bbd6caad8fcc65992c2ae031d5188315e3458041c19b5a2a454484ada459fdb76ca54c4e84b4f941d9e094100ab860e9b40122246376d8ebd607c81a7176a0527204cc943661370fc49e03e2db8c52b73c8bb45c8b455676532640969f9a12adf27aa720deb4eba9791b8373a5a379f060063a2e61547da3184057ad8a21f92fd6398903fe0c5e40eda3520d99147008c38b97e9b77810d5a2a40ce17b907acf9630eaed1a39c6347c2018aa83bccfc42f0273b79b02b4300d9d7bb6423fb1139549a64bf120501e21fb6a428112bd8072ef59b1636b0f7fdb9e97281043fa6c4eb536db5ac55c57e43deb2bb831a5deaf49c86bcc71fc8348f887463f8041f75714f3ca7fcf23c7fa5f86933eda208b91de12d3ba6314b61b3b75d251d00f255e265fc12d85645546b6b58eed22bff66c1fa8e9549b0b93e9a9d4e142c50c1bfa399cae6803761c6dcdc6e03db1ff699c81dfc7b6404387be616c0c7c2064f0a0c70ce9369882b16c5a47acb76c78bcd7f1a4ac5cc865d6a44757c9dec16e3348647f076296de02bba273962746b9e4f51b310a5be574a10428f990638962f55e09b4c56cdb819b9cd9f09ca0a2d80605c6059e320cceb2e10a47f08c27cf6cfd13cf7c1c28136744a280ddd87bfb82dc92b89ac1b02359ccc77ef82d08160257f91c43f683fdecbbb1dcb340ba54408b52ee30fc7ac7149ccbf506cf5432ff755787469249bc41915d8aefba75f52156fd6c7a6b9567a6dad61b72a502c974eba1aca7ec664ee9cc2bacd5bba064881bf2bec0836bd7c9d21ab104f470185cb6400e742c29c211016438b1364021b7038f1c2c09e7679a87042d7a9ec39b99a16d32019b17a5e969389f001b95d9dbeb0d49790e5f44703952721ebed27d4793534adfc5bac43aa585f2835dbe854864bf62bea83604187a21ad81b93a2f7f0f3149bcb11db140ae637e3d566f8aa20d932083a4298e990ef71ad6de053d9dc448c9ac82051b02e61ecee3fb225f4934c08e49843e6229180d487e3beaf140da216b808412a4362a212a7824e2cf75e51e170958a2d75508474b99bf1feda2a392cd3d4f1686bb74cb265858e25fc607e41b1993963e62fb7fd16a7ce93ebb1ce84230e67645c0cce975408bccabb6d29fd43b6ca9a6ea2f4cd819ca97943e008066a27c91b1332ee27327ea26f72d87c6ab2df37d65f902602903d1044e879df698c01a979c88ac2f5abbbf4e5eb2d127f9138db71438eb09b865c4c25ef000e3875dec7110c14c28e7ae08d57f5207cb9829ac545abe3b1b05dd4e8458eb18a204a9c721992812a98274a3d253de4a88e9dae945c0e53c7a679dae189460888d4be99145f598b16978075aed9f1ebd7a42c377f07678fc0bd281b9a454fde992e71334863df46aae39f990540c4af81bfa810b576672d59f0a15d8c50ffbdde956dc1e8b34b31332b8d20f8623a7981ee298d7b6128d037e214563a304fe9f8249d3b1345e6be71072b6bb9c7f5477bfb0c08b580cd46599ad8b699a449a77b470abf8ac2ede48a4c7b889f2292b97ac86d5b75d41ce659565bd78019cb4edf219446d9b7074c907338367991cb45381508f7347b9eee0f403fabac0c0240cae85b6274e35587d7be2078ecd7b3fa4ef7bf3a657b5dfc7271387183907fcb4cd554c676d1c383513c199d883d0e759cf902b06218bf84a5768f99f749b93c381a868a55d5ebfb685b8b40a3d41ca9643536c34777864161796ec9cdbe670ae26e99d441bf7f8a6384d6ac1841771433d547f5a78d2a6480f24a7a33800329e70697da1ed9154460d706fc452498865c3adc5ebdfdfe3c50971ff72836035daca924dc011d95ca04fe048fee9901786d6ff125b5581b878dd2ae7aa6d160c36e221fbc5d12616347d91e7a062e5b58a90f77d37949c206a320266e598b5bf63bfc36e8e3a875d35cc6bca8e146d3921ee643469a0dbccce9b6a51936e72a7a1509174f9fdbc6039f828676fa37682ed1d1300f33ec2d6e7a4920058013e4090ab31bb1a35d018dff5227fb04a341ab24089a45f3ad6b28e0062200f23a51e7ba430b5b74e32e2793f35376d8bf08e1667d582f2ba36ba193df503d023a56388f01bbe2f67b00dfe30742b899b829e042dc51837e4a2e1bfc98648e894025c30d58c0b7f063df1f07ec1e6b1d7bcc5442c2b4987db7759478d52b2eb7d8c0e92ad3204e78506ad3ad54c07e43b73f6bd1d92857a2f89ae4de751186f2fa57bd49a96944ce38255c704efcbfee56289603e2efdd3186dbdbd9680127615deec7c316afa6b91b8f6dd911395d4e281f16852b9eb1d0a0b45a9888b89b363dc3e0743c1db9e299c5100efb7e3139ec11b5ec41c6795dfa1c5bc64fabe44723df971e33ebbee5fb63df00a56860b520f477e25f3bbf9cf06b67fe2f661bc4267041f9e22a7f796835f02fe4269704de77987fff4ab85097886587f31d63a688f4f17ae0c75c2d05978eaf61a1b0eeb582b511af3b8317b27839d09471ee747a42d33d63993c13cf276dc6947a69e925627c646204115fac128084be62f387eb1e8a33694bf3e21783087cbfab7be7c8a48f009652f96c8a8f6d089093563f1d5b5e2dd2b4019093045f6886e055899701d2a8e84f09524b85048e281e87d4e53e7746b8f71fa2e0ca5e95e9d1196a551356257d2f0aaa056741067af7bedb13cbd0955363a1971bb8d5b4bd08ffc0e6dee4829762da63007f5f393f9896ac6845174f81aa9193ee2120fb7ce85f56087586e1864b51fe7f88ef0182ab2854ab6145d3aca40a96bc72074a759a44aca01defbd46f3f9301f0d1c0dbaef4074cae79ca2ed208c3f82f86e3b949218be8cd6dbefe9b353b4056e8d7fbe55cfc7af117e027907108196873e38fb7483646e1a6f34651c8c988c1bb895bba59e2810f3b5801263f8f2469cec7d3a537fa79e40eafc005db65abc7979ee01d674992a0d1182163f705c8c46862a3f4214c3e1a310fa5324b0883d879a5aec509ce6dd91a3468aab4eda4655d7c9de40128bd2e2cdd9ce6a8af8056bb1a585b218a77aa42756188979cdbd201653315bd21be733af9739c636691f5f8e90df1b80e0c3f4affe496cecebffaf79a50850b24fbe2d283858f732b28eb759ea13eecc5bdbb9abc6d358bdcd22934b70330796a592d8a147e2b5a4269b8cf5a239c54a6acade7005a2915194785b19a1a15c17eff9b7ab406f9d9916855f9eb11260c9247a7cd10d749abd22040d22a162cf6d7439375868930076e4bb7bcf252e3892c4fad551e56936426624404a9814e830ff41bf1d8d6fad9ff836a94a3483a051db3a07e84410c51a66ef791134d8b55f0a0efdf1c70054f3f6769aac0022a767504a0ab29509a9a58ec60333b9baa5a794f9ca9415d3b8737c1bca30b6cdd5bc9519c65795cdbbf05515f989d97101f8d27f3fa8b1d6dad92ab014b05c715d5fb65e7498061cc1ffe94e9daf2e540e18f642c6f64e8a41f6785c9558b715c2b1084da16b973ecf26670e4d1997561a4e869cc4efe2beded2bb4fa92431bd157986ea83273bad5d40b67c35ebb08bff1b5e9bf0f1c4f9367852468ca319d19912563e45d204b494094f565f6bba5a29bb84e5f32bbf45ad6bd7b88732fdd8337551b6743bbe9250018a719050e25288a0f15cae27a254a3095284ae00f049dd5a06acf28fd5b3c78fd5faf5ae468a0181efedea01188e3a97e57aa70e258e0099c3c19c0d3eb1507cc5a2f1ea1d82304651a234aaa381a22bd3a895ad07ce2b58d24ea301dbcf7c74dde0f61dce5d23adfe1ab09c24c2a69b507f0cd0d6c497bd0546216b5925142e7a9bc29fe4c4904fafbf5725e3fe665107da393d4a8381c554257c753f2f41465f4c8cddb8f2e4c8cf1188e3b731fa65b570c583c95610b51448e1d2cd40a12e05b6508831b4e325257f19a910c0f808cfd18ff7db37e389dc14c452b46f8c14fd998520070e4d2bfe9ca86b113b782c99268620a925f255efb028a11036e0d644229557c50a8f76bfcc43b734b19ecf3091d910d51d20b36170f238a834bb544773afaeb3dfacdcf4be69cb391a6c1329100afe27c8f2144225677b2f850ec849eab5a3bd0dfaf5a7f79f39214158a81e0536e2bdb69cea65c9b8cc427f0ee09c60079807b999d8f15e4bd5947ac9fd5aa8c15045c70c8bef54f55fd2520a7acd342885393984e408d684e5995469ef27482d6afc3242c7d2c2f44fae10460806bdafc09b6519d529a951322abab881b94e63169ced731cfe35ae4f88bccea560010e92a73073f37df5a06f0e68e6222ed2e1bc461742b38c3281854ad797353d38fc6577418259a14753895ecc845930f2c1ad48f82e6169e7d6720a1d9bc21d4b6919275d8a1a3c4f9c63a70eb8d350c4d7118de4af1d8480f60b63eb116bcbce9cb29399371ee90091392ea568cdd476ff81c716ecdf4123e995db89830a39a3bc45fd501ceb02014ad0a25a59a30d12d81ede42c617f356bb07a1c868537f118142afa408ad595878d8d0cb441263449a1519b75ae426863e150c3df521178dfecab677046329801878c9281c120fcd96eaa44e538fd26da86c8603512108ea08cb1f512db703656896c42be0fe122697f0d492b09510892661af03e8c3adfbe58604a5a0d93fc4fb6eafca6c78bc70491016840aba48f6f3065f59226bd0118a4fc3258ee0db603441cfd2fcbed934d56b8177fc026804a80e37055cce9bc051b0207a07f05ec4bdf5f17d2c7a9e19768486f6e860ed558e8a6f3a47317b325e5e6d494572a81706fd83e0519414a9034c6a30139402457f19213c8022b4946f8e371fcf6ee0ea7a5cec112cfda5a4d6b7ee67063f55fe4744e905df510ff40a83949e91564abf7e4755bdad6939b746f567319bd5d26b3edd83adaf5bcacccdde3b4a4fca58fb963e1948705e7727440c914251b74b5a0a0275bc5d6378bbe3a4c338582abe76c7b2867dfbf66ab21f469517b693aa2f7f867cc47398e69b7f5eb70de6a6a5c8969b5ce44481b6e6a5982cb5cf1c7b8a6191a0cb529ca36082381d3e5e5350457dc50f8f260ce0909fad876d58a2b5f10603aa540eb622ad804fb46efcc7d1dd4c838993ea6ec77d115baa0327792ee7eddc098854a7e72e37b86b181709a517977a2a59fe1f3b155167eb3a4d60cbabef0b1090158bbc9f3e68c55997a9ece9ac83118eb9ccef70ff6310831d3b3aa71e75535bdbed9d989519ab4fd7dcd351871147438d0062702e4b002bfb6415fc474e80d060f40298b0e08ce02bf7b6aff3ef752f63c4a782bd74547433332f0466e326afb22d466b513530b7faa6aa13a230e90940199f6a1b8abd1c259f8060c2d4bb4cad9e9b6c4dd7dfc10c4781d62c83b4739d80b6b0124eec09ea33bb26e9461fa99182a96d57ce680035ec998fa000b4a2e2a602e3a97b30e16fc01f0af13df071e6784f7c3e6cc9e757d9e5a44c201106406f5c441e95cc07d783410f47be5710883809d1c08442440d5cadffa8163e80195a581f9dae3098b8cef82204ca278fea16776cb9731d309115976a79fb873cf5b364009bf7c19ea1a91f3bb02c8aef19fa93964b4e45a76c2f74a4e1ea34a8dae79daeee2d0fcf2eae2eaffa6d43cbb5917dcb3118bef4db2fb7a7cb144436bc22fcca2d626762caa7cdeff5e518802471f2004d3beba1714b18f840910598d760106107806d20f9ae30b3cd1e7b32b5eacb2ef484399a0076891584802b8bd1e95e6d082087e94d9c9748cff4aed5ca194d7d2532de7ed85dbfc3e7e80da547c2d3c76decff2232173f996bb86c80e4ba3e326ab344826e8cc7f91f09821facabc49a59fd02ae31e2719c1dfbb3506068cb1f7264f0c7d55097133134a234804bfed6db24db4e488f762678af1a8d943e5819a7381ee90c23f0f07279f2a3df51283d670409898cd60bfa773c017047adf5690f54598042b5c553a338b1985f9f596bdbc55803c4262eeec4d5b97e85c8e436322e5e6ee4b72c592a5a87482063c3e37111c22c27e0657717e7cf43da32b9dec1849e3741cf14f7239ced954110660b913f15351fd4ecbd508b768b9221f7745b64c88e3c890499c2c5f4020baaa7045c70a3a8f5e186dfc06e4243fc90ed72e31d402ff35ba9f5e14e7c7e57cd4ec2f1d83692498df4e42cae959ac5c6c46b46ca1977735992f3a9965b3875b33bb03a8b70ee297eb8dff1d1add362fcbd4920b4158b9aa18242103b64504cda3a336e4ecef63f34e0cdcf6212d3f8c0930576cfe6cf175bc2d97d60916042f314f8e535c91d08ad1faa24873292eda79585c86297bc316d0cd4a3d21251f774fd0b6bad74b1f6f85531f744b5835a416e56d621e103f39b0abe7a1125919bef833a75f7f0ddd6116c990903c39fdaf988af9efa3a9efa2ee33fc30954412a29dbaa7522f38caa4efca4672a6fe7cc7ab770b04b038b426ed90428ca94c989d6c867b73518e694a2d4671ef6e6dd46a74880f4b9f95dd3d11536814f47d2bde0e8018136bad6a47c759f8619dab1cdd960ad3dc7fbbfefd6dca5468894b88e0ad9ac4b820521c0b33473de1d4152d5c9a243be544119b661ccccbb5c2a1def6c7d97f8985a009e0160875bf6a2db86be97dca7cc935ec84897fa5d6e1ba5a662cc5bbe86077393f8ab2d8db94c10e6ec2fff8f948306d970f1c904fd671f20b22020cc018a85970006b4e685431ae0c9f61ee99d909f8128fa133f64e65b9514ac0a8302577ceb486819ca7bfd238ed8a118f68e8827f89444c6f7d3ffa2b98b0e29b47f1dea556e4bbbdf973827657c10bc49dd1613173c28c361e0e537f607ed2dcdfef44ae3c7aad2a70533adc26f7bccaf4a9672f91f486bd4e5a22df8721249726820f3cedb050edf7275b097bf4c7d9a6d82d245dc91101a8fb66bcb02edd23da9bd6e48d2bfe67f84438fbbb285c38f9135f669f76a4e8f06b02bdd9ff9640e1b84e63a1fc2ae051276c066259b49f2650c6eb06c040d6e6f42522e5bbd5b4fdd5ed9e094a19cb35c7dbee19c1bf72c9c85e2f72ce53bd5a6a405b60616919c61a8212245179e29ddd8bbbb875f6ef54c84a79b9580182060c7df332549072ea433ddc807d8bffb161883b2d5af30058af4fc54905b64983995a14015d18cd67e1aa21c6ca161c1004ee7027d3f4c627459036082b3f837a2e28c17ff0027c02ab02a2de2992ee8944d14f02b7cc4111f0e8398c6c47b765620efa63c8b4956e4057c94462947b2f0723d6c57803bdd6dc9fb602d739f03d903e7e9251a9722fd02320de1544833c433cf8fd4620583a29e9eda2296a0f3192f1629944983a81364340cd35b8d48a5b18f07452c66e33df1302cc3479e606e10f851d6535371c23c5cbc4d1133f241f1fdd3c314d3652220425d85ec01337290e9a47e86abc2c68850442d385ec2f6fb2598b3a93ac78503ea23a8d49bb8b04f3f2f0d8b002231d3be1af54ca8a55eafd2bd78cb8acefbe20b0ad8e6802bd4a6ce111e8b11613066def5b841abe8e9318979a509291db538d5d857acbead18fc3af95ebf453c4419db22ac8f162c1ca1eefd6acd0148e4334f54941b8fc1efa1f5db5fbc47cf3a667a52816a4c083c0ead6efca26de4f511b2bc6838d83feb7b88b6d0e1fa903d75877be9d2b86aa060aeb263a0e6a954f54e31f04b8fcdeb0b57ca8d3ba0b07425372662d758725235444c5f04df33089d9ba53e6865867daaa1b311fc106792a41864b266fc69eecd57ecbcf96b1365fe295216fc8e882918ac717997b95f2e3c927b2404889a418cd92f2d1c73b421151deb81f1bd08da4fc0f5ff1da6be3c0a9b98822002641afa8f5b78ff13361bc3b306c48cd339f504f989e6d2eb414eafa216a2aee63d16f04ba6a549b008f44170409641ca85943b950a51d58524cdb1c1f0b7e37e8621396d98f8b32faf3eacb34cb6d680aa76a082fe91298d0d5c559560204563d923ae216693522b5813ca8fe892b0ec3c41f31be6ceb49ddacf3331cb4140e8e63fc7e7e7e2a75cfb26fede85f4e4eaba89b6ab2d79933446033bf5cc60e88c575882159c3b74992600d193c976f1da09c117e712e89a5789158331cf6c623852ef5032bb9f404847c44ef02acad2bb195bf0ca2368849d6e703f3810f523bd3ed3d52ea83126e849aa298e06886451a5b70bd043b24234343c1972718b871cd8f1922da29a00122730e89fc5a151f49e4212271bd788b5b877abff4170dca2f2b59af305e5e9ec60e86afe2ff0c5956568cbee706c5f98244c100eb3f51c146f6a7eb82e613c7afebfd7f0f603b7f53d39a65bd13de12bb3f96b5cab59e535df1ea88afcdb4445b7a628557ac06e755f5ebbe84da1c533f8ff9347a9930210a68d78f8457d06bf30e161570d5e03c37a81091e020f284a76516cecd098ae2cfcf97d0028a204384c8c88a8a71f5f28295014c9870f16d1753ef2d5435dff140e6c3f457425c8c3429579095de95d814aef6c7bfb692406fa6ddb5e334aa6dc80a80f6eeac3e3aa8eae954db77f0f9bee70785b8b48061f31bfa38d44d14bff1dfa0741e00b8e8c769624c55e993dfea5843e8eb69c3369bd88b5649da68c76f178109e96bb9e5abd2c12497dbd8042c331b90ce92499f5487a55d90d098802206d5d088618ff74718338927719b6bf2021024d05b910f35e81f3399e96240a34889b4ef02177c04bfece1a53a7f649e425cb551a14e49f69f1e126c970bdcc0eef0d5512a54f3d617f4511797f5d5e4eea442731b95feedb053278793e28c7b85d5d8751f81241ee9f77b27d2fa72cb689d4a186be06c843b796b62227f65811f8f8b4170449e6eeac73e4aa5dc027a0f88214169f1c719aba1f9e5854d9ae227c1989b9519cfa728c7ac456fbe0cacf23ef927df4e976e528d738882092c088a648e25fa4dcbcfb9a8b1a2909ffacc4f81dcbe6e749f6849c0d6d886e1c6bc3061fa8cdfad333c0535c31f1e69658ea94e8b02b40c7ea2b07366b4c3179340dd8d5f9f8aedbc9641a4dc1c18d25a722c751b668bb4dcb6a314d723349c45cb81ebb583e97cb0310772c338fc911b8cf4c375255aef3437ab1734bb65c5c9135b988cc27b5fddd1e310f6d8309c60433086d30c0e224beeb2a00bffd4060f683b8c401ed0e11894495756331336e5c85c455bd59d4fbd05bec9139099ebdc1d9326ed09d7dd82ae919541e1a19896f45b98e669cb076900f0a11b6ca3223c1d41c407b2b1d2fb6dd7aa45f98dec32a91a616f40e84d3c703597ff1b39e7d870348a2bb5ac24b1476b48574bdc0b7b8a3191818feb86f23373ac223345a460a4de59658046eda035600ac15564b36d65b3a9df1a90bf9545ccc220adc157ac32fc52ec090759e92000a70682fb98389dffc3d06b358548a8bf76e2fe90509b0c88280dbac5498dacc1a7f701999ba8c5b9e974a852849b0443628fe203b0013aaa644f2d9ed96c068ba2ada1ac3eff41efda9d33555d0dd8645426492d06414854922d5ea4567f87b468b82ddc14e9db37b5955b3ada27d980983b7f56904bbb0355a34fff15baf5700b4f8c69d7c7fdb10a5c7116459ab63f5b1b9e46cf51113bb5b65966baa09471e198ca3976d13270f40abb5f491cdfc4579f34a173e08bf5f74bb9aaa555e4c5d2af429bd5a54f959c0907b5d5eba408ed50a69a8a1e8e88622fa74eab60c5724b9d7aa89034b4d94596b114126e67e31471a01c6ab6229e9685547d4e0eea376a10d59d99065c4f715d3622bdee60bb8c4f00b44af9349983914feda6326abfeaec11f1db0c0661f158dffcef39f432fe592458bba0c0d0bcbfacc2a49b34e8a3267579607ad457aaee8c8042c6834327817b5cdd7e2db0e239a33625eea00a71229b9c174b5c54ed1ecd678792f7016a63379a39f4aed9e0886508e719f648f9ccc4f2532cb0d2b88fc2fb45a675f891ecf06380bf43b940b4ff8275f292ef163162714a1f7bff14196e67ec3c9fe0dadebe299d4061c0af29f17399a1cc7d72066d003fa0cbefc4c6cbd21743141c4c362398b3fbde61a9c47a646e74768fa7d37ff84055f332aac9a880d781f8784438a68cae163fac84eca13e8a00852a5d221c8a7dbdac1a4a078e2207cac6e5e59dd707df768f29eba332948e30150107531f711920dce490acc3329f0cff14f4f568d604d6a20617b4c921862f97bf370cf12fcc90b3e33203ca103fb3aaed94cdef84909e856f36de50a6ab98c761fa27e6154c006595bef75edd0aa79495a173772c8baec6f4581ed23084be652f8309b5e1ca77a9f9017304d173b088f0c1ac1441c545f3b170320eb54f045e061ddc9a8fca85be0fcdd058aa745c88180d3fb00fb3e51f1ef5916ebefafac3633a689746a82aa28fa7b2ac3dc17ab4818707e41c9aee3031421f792c7d41032b3bbf882f6ba50e4b3e0a3e525617037dcc7f5722f78e248dd2685aeb8abb03c86dca4d7d984963dd1235bc13dd0a4f22eec7f54654b56422cd20173ca13a675bc0f7b2f6a325108aa2ddb1a6425e89cf6d28ddf6ba27bace6eb562323de9a60b928e4fc4ccf463b5a48437b73d3552106bbc92feb958adba06dc5fe0ec512cbfb4066e911ade05f4e6b9ce4886694af8deefc6da8a42cc8126bfc8c616aacb431b7ecef4ff4f28cd86e9df846265ccd08a2fd760067fb5db97752d695843f59ea3cfa42bb78b1497fbb03f2555710431bada43e5ac5abffbb0c86f09f7b853200fde4026033b39d4302a00c59f7a98bcdc61c0e9fe4831b635da61e6b8c89b92e2f272cfa4eb5587d3dd7e8d8ff40c2621676b8454145db3bbfe4c50903ab9dd0a35871e034c5d1c84da154bb2274f8f5ca9cce3f942fce3f0194e892c444514af1ced2e30c2fa0759f19784299e19c5d19aa8f2a376f5b2f34d2520006b6ccce8cdc66663ff8261d8d3c159719cf218f5f6b092014b2c6116f6270cbf99aca270d6c79ffc180741e0bbb9501ae03ddc153aa4419803a9723851b23708f8b92a314dd9c872327a16a181d63f2d846ad23e84b2be321d70a63059a984188da14bc7fbea79dce851f1737dba5a63db32b8d14a51e17f1a542845be33ff519f809a77543c7e74db771ddc693daf21ea1c41590264ea46cbac509c7b326fe89cc7b6a96c6851992f0298b05c6c70d36a968cf6c4aa3548a5eec52d0be59944ea81cbddaa4a63db32a8daa3c7a359e9533da6796d21195446f1ba9d89e2ec7575dc489cc23eb7be77abb743499f929f73aa61d2a58017986c4d57078f629313ea5ae20550b55b97b9e6c550d918cd6454419d08d8fb522be369f03e8990eb37dc5cd7b12ecd96e65bf28db6558a0ecc0f41850d9f5db6c616cb6cc70992fc6b7d7b545785576a02c34f8f17d1aca6c40b61ef4f40912357341033e6c6899ae1343482df09ef57b154fdb053742c17454d4f6346a06fe9635239ee6def30a4ae86830a689dfc310f6a516c19bef2516375dcef2d8bad88135c036ddb8a3a0098a96b92a482cf1cef43fc4b5c1b4d4a182bb29aad04e334557aead418d95e51faca0b065f073e38facd5aa063d09005c2692f6712919defd66716f0d755f10b964e8c175984994f428a185c9b99a6d367e401c2cb5f16fe468362fd149d3776cd3bcc9f1d2ce5b6f3a46efebd64c8cb139cc33ccac503862554eb1f933a035ed498cc73842b0ba4f9ae40cf17678bc5d246b944292b3ed727d36099f252e761c3077b95a6fb23f618ee79010726073df613e99216b856be6aef93f813b7266ba8c64c82d8b96750266f86548fee241885a5d2c4e00a89f311e1875da81e9e364f85b3b2e501748a80824d6408426e0d4800c551078ebb8b03e50b580081099d52ad2f0abfbf15bb1eb39df1867d653dd8975cfe198713f9fbddda6e4bdb338bdac2c7bdd4ee1fd673b4d5959f6be99ca7bce769aba92ec7d3b85f79fe5b465e5ecfd3e05ef9dcd69d54ad9db6d0ade3f8bd38b95b397fb94bc7776a7952b65effba9bce72ca79d6fc1dcfb766aee3f8b69abcab953ff593fc3fd67b1e873f949a3737df12636843330321f8e63ae9f817333abff8a9b6997318613375cfd08ab80966debe77a59bde47287c97e12c633d2ab59c57d0c0c1d2adb95afe49cfac86cb918f8ed13f85ec181acc6588b80b23ac10dca8d817ca80849c30d40f64d6747794bb4c21bb6717b99d9731f4ac25f7ddec6dea6a61d6114b714da1cd897dd9bd12836f5f7a4d67615e969dfd9215134207ceb895849b7fcbe6f5190d0ea029135ad41dd2ece34035c318648db6dc70b56267ddf48d72d2154f8e7a4c15764a34d0a7ff3f26c4b98e1a123abd32ef6f5a59a1eb2086baf17ab582c0f7cfa790c44016258b0516660fa4521eea8f990dd0f7f90f341f4c9fd8520adb845c259344e169579c746371120d83bd94958b6ed5caa31f4eb495080eaab4871f8e8e5d055a2e01c9ff7957e9884d407abad15731f6414c4df21e3e8acfe082eb76cd9cfbbec6778de67b943e86399dd110c5bc24739da7f48ea628b7941f3a114e22488e28880add49bef35170691dd9d206d2f2f27a57653b36a27e83da28bd0e73da387a3cfc187add472b7f7fdc1da9717f644e425fa0cfd9d115d843e9d193d873e9d29f4455270abbc54aa4f64674467a073674027a143670a7d9714dc8a5d72d32782665c79a0fb66403fa17f33856e9614dccd2eb9e5a199d24c7d05d0579b41cc00fa6c3358ac33291748bb8b62a1d5e7f863659209669edf2a1ecc061face09078989a349903e89bfb6a25d25933bfd78a5bcd307fac60128f0b223649d5ac60cdccf3b73a259d43045facc2a414fd349f1950b890492ad3a15abe141392daed4ebeccf50940f3e2af559b54ca6fe333e82045243d8e9a6e096fc8d863f9cb8af15d4a3a9b38e02b5fbaaf084b7c15574bbeb086a0415ecd5edf2a705b708a96007136565f715f0ebb24b325b9aa534f13bf4d3ede7249507d8e7eb0c999cfe7f1c6ccdc4a91f6e432d727b591d997e5c9f3c3d1aeaa73b19eea553e1174b0d0a99d137c62e1aa9dedba0c084a34524923f4b7d1ffb9cc1cb751c664aa99621aaf5e64a4e59f80902bce031c9c68c409ca6c8bfb92df5ef92d38043808f71a67b91c750c2dd92964eaf8e7a22ad2fcb5f08830a8516bb3489d6af971995521c89ebbf0a7a7eb410250ff4581c8090c7428b07bfdca2a1967aa437523d5a4f17feefc2f9e3722340064b8b6f1878742315d830f4aba8c7b126a02cd1f874c18069ab53e8bd499569e965915e2eca91b7f72ba1e2403ea5c3c0990c040878aa3972fac8241a6389571454136e766e2fbe6f941404248846f4b6871d12dabff8ad5c3662e9555c90a0ec0d037c1ab7f4b08870daeb0b4eacc3f4b56afc7a76143f80ea8c3646c6edbb987aca7f8d7db9e3315908908a8ffa2213198cad837fe3e85297705dae458c3d77c2b4069a5ec02b181405ce98931dade52d5d6aab05495b52aac55e1aa716a5431d2a706ee42a34194bf9545dd60973387f497df614534f434665bd765e53db7f684ad5d4f98280762bbd492b8f2072a188f9bb2f58b72e5f441e48b02d54e585b926e2371ef8b70c9a68bcb405178e55a0cff4d5b2d1210d31d8932afc5b4e6ab2e37ec2711262a60c15d843db33e9745f12671f7aecab7382adb7f0de8b13eae69c5850fe21325689a3835c911a4c4a46066cfb7dc94e23bdfa723d83019361de2a4b07de9a082e343f97a8530c6fb8e960d97874ca21fe5e840c2d6eba3c0f8cfc6eaff14e015d0714037399714e8847df8a0157d162dc65556207efc1aeab3587de8593b7264988867031611d7651566e20c344eaf3dee885885fc8be9f782b01a2df382224a9ee6a83ee53ed2a43e49c1541a65d7010069301dd806ab2a9fdaba2897f42ee394db9b458ccef3dfd06686a076d36c440a9ae25b572031c14eda302151d84ea691be283026acae29cd4195e09fc9ef1a2ece59a0e9154af59a9f38dad5aa40c9dc2e5ee696d309c8d74d98a549c46a607beb7248c96ec864ece9916dd83408a5b2dde3b8e877fa3493734104ed4b89311e0cff137ee48f1f03bd51de61046ea884abb104d85aad3acee575e4340a0774c24e9500cf3dd0903426012b29d8135472a36a3788b2e77418d3fbada5fd9dc780a44238b3e93951ce2f91c8248181abbf79f74d70c5aa3bb42cfb46fa918538b79c1bced1bfa127a5b5d41732d69cdb9a51c0ef0f82eb4290bc797bf5da6c5f8457446deba426544c2301e844d74301d916f874307653f525e6e826efecccf8a4ee7db868702e2b8441b409ed49c97dd62145fd8d7f5aec3d9eac4e732fbaecd054c9a20b53448e52c742cdeaa8389cba48b724fa34afc2773b20237a12f6c12fa00471f60883d015f031abfdf3bad412df433c13f62e569a5f7c6a32a46a522c873c2da1786b849ccc8f17a75ebfd028e248925e0e96f9f375fe22e9d8701acd8a0a5ab26236f89a1aecd799e1a63ac8aea9538fcc8ba003651c0964368ec016141a03e6359af1408afff3dc844b5bc9981daa3946c07d59c5d55c16f3404609ad972945dafe4d16a91dcccc3243215a88c6b8c21fcb0e0f01e5c4e14d420aa109cdc14b3707038e99f1cc900e5361df0323bd94b6dae430a9d56d6cb0f89ffcf127eabd4557f7e571ef7d7d340d7e662f69648a093fac859ae06b679bdad4b6bb03349fc6a40aa87ceca0f206b73587b1eec617f0583d4ac10607c94b9c79980a0f8400585fdf6746072b1a1943ec7ab9964b56aab2796d9be9775871ea2d921e3ec48d1f2d5e2c252f7eb8ec38b0a4c9dbd4918a2f57e3780a1faeba0f5efc8e181f1967525541f363cdcee425e533252fcf55c1ea4ab712e781266b293a46853bffacc21c113d1c4cde0b99c5bc75a09c663e406196a6e9f8604ef9b578553fca587f0dd7edf36e12d949f4de0bfd82fc676824a9268501d29fc72c94cc18a71ea6e1ad5fe028e432c175ac80b62963267ba10cb963dc6908eb5796145d2c3cd89555db0e9aa40ccf2a66bd400d91bd582ca26208c7703b735c21a7e0ca913cfc4eb25bf4012a0d6aa9a34786a1cd6099789ae7bb3c605602d67fe5e5039d989985bb5ab9fee4c3d293da8adb68a216933989903a6c54f1494bc624dc2ee0c6c4d35e6a3582516de63f47137de89a92da5bfc448b7e24d1cb21929fa384c1808b1e23111bfa9fae6b88608b67c6a5c1367094b0a08e485449f76b8c0b93520982ddea0eb1ddbdbc1b8874cd9cbedda3042553eb650fee4d8010dbb12efa9663e98d123f903663b32a63da3c5a5e2fcc00f90827fcd3a893f9e79ff81c39c8fb887a9b146a224516af24010336d00f90393f9094fd03421a04d266cfee2d33d07ee08ad7c6ce731f10dd3a5f60d947ffdb9c7229ac929d1619c7f9621e1f680b38e4c8993efcda0c16cc193a863edb1847b6ee937a9784359dc4ce89e8d8a13744b055e45f685869f68dbc6aa76773c857dab8126000d4625c3d4c7b38829bf443ed45b01b80dd43331a2172397e53c0d969d5b6fc37d1894f0cadd9526573a5d188db9df95395606394014182ada11520b0ecae58f6e6f16c8560ad538dae182f31e0dfea12c2eba25e4ecc56ebca7267850ced4cccbf50f0a579ebd2656c71a34e7d4b39cc672509876010651d03b2181e280e8374c752ac61de3383f3a22f2bcc449cdec7a5550352053a813184df16e4230ce751b164ec9baa08801406da4ffa626b96ee4d1a9a0d87b10861e9029cb132b7e10c24c0ca449950094c0865bf38009e36dfb60f340f7bc02b4c3e3917c34933a91b23c1a2991a1faf41936bd0e435078bc551d3b68752ef91eb9b1a4957c191604c236a686d9d2d4bc76a40f4a3ed22ce89d60880b32d798061254ed4f30835367ae6db0416651136570fec96aff67cf5332c085130863f220dcebc3082b14f75bdab9749762b2168d0d620d54ce148b1071e1cc0d66157876c4853c5e73ca784c66b870c4024eecc5ccb58e7ca8290032b4aba92eca194e3ce98e7f228fe0cb1578d858e83129937acddec3535049b210ea692287b324e4cfb5de475a8c9311ac7b0ceeeb019e026f0a76ae4b02eb9b8e26aa382e215be2cc483e8da8e106c1245871660a47cb30c826bc0ff35d2240ef460b1953907d8cbfb70a70a859f77307e783ad288454a104b7dfd8600e89ee5397250de0a4c28d215d1160833fc129c4cb2c204e15748779ffcf85c7c563edf562420433202c3235870eb3222e66337139c302554014a5cc644939dff715dd0aa666ef34a3fd705b3d1b53d71b3b86fb19a8b3b9838b2dd8545362fc663785e8111b16427b0b4069c946065c0d20aa601c7ff2ce6e56bff1ee6fcf88b4ad178803bc0565a88ef1af9f2de77675908274fa61d429a8d7f1210d092976450b01361a265d1f170893e75689c4f3a09027606386c76700dceffe0eabdeacd44bf52859b51a0a3ab9e48483a01f92ac16a63a4d1291306be84ca03392d12d4d4b0d86021dc4da14de1e91831f40efb087838dc21065e21f0d332682018c7e4799058371b34aca9e4cac30b00c694c1d5af277248d2f3cbcbe227a9c0398444dbc930eb9b62890402bfa1230fd9c25d3ad2e2934bb32e647aabda31167df0a5973cc021a0390473c6445170cf7786203f93623404c960c10dc216b787853b34fb1e2ea936fe443dfb176a8a53fe8e579b0be502823a37aae58785a2cd09a9a465b62d4d92e6509fe8ac157b51828f913f9a4be9eac5e10cca0eb6bfe223193ed079ac85b5a5416b28e80f44d6553952d1297a2bd5e2f8879b8a9a6dd2175f2ce329acdb76595e6de9eabf8667f757499d52ceee4085d7c325a81bf244a51f8e10c94819fe9be6b91b01622beee41314be0269fbeacb1c086fab351e642c355e13dde4edd3a15c2bfa4e911830ba2f8a88938c49c11f7ecc39247ee0738c3b3dbac856533640cb214c275286c07eb0d6ba84c4fce539b204c7bcc32968054603a6b9fe017c0cc090ac495c31950a28332e9db2e433aef8f98d00017a74d65cfce3e1f0b16009a1f30bb170fb1e3f92be5a21b69abcbfb63ecd1d6b2da4028b5d8e04fd4c8a2c8066e515d4ca0a5305656b351a19167eb1d6451484db103320e4063458b84b4ce6d3e3361f67554951590659240636e5f1bba1807e8b6a880ab053625fffda9a3a0bc69c6a0a9d194bb5961879cd70302943bc717df1bb77a3974e0d0e47850a5f7616e13ae9332c6e87612b40632b86fda7147ce0d4dc5b4ef24234c427038f372ea329191394c933daf2a74845d12410d7b716b6ec7263daa27f19242aefbca97e9a046726d9039655337abefd69561a1eed460985974631bf1a22198ffc9985f8bf6d8da4f6649effdeeb872903c718ea5ade5d0a702f8fdd1d871ebd6eef23b59a349c47ba81d3902b38335a37266050844e79c7d33f11ecd7b3a784714229b3b01d0c9858ccd076039241a3c120dbc605cfa6a88ef8ef2fe94f7c7b400ac0830239807553f9ba5281e87b4991cd8f715bc61603b365f0df29e0ebbd71b783c8467d0639e4a601696ca99fa13431bc7d8b1e63d56434d337d5407c3cc2659fd04c857972a41505dd604d7463780ef3b68a995eded97709bca1ec7cc5b6820b1cf90f7a0f454513aa9ed72fdd85c277cc2d108d5298990468e4bee915b470048eaec4be0e5c30d4594d3a5568d1f2707490b6e2f3c3d1a1d18cb871aa09abc76fa0ca1e8a7f38dd7a73941fda0424fd2a942e6f441c46063f418ed33dbe113433a74be92da7ae5e6ebe2522ca5e7bf6f2785b65b737b3266d96a835b209d95bee1da50d1f0fa90eb34a151afa39b6ce0e89638c33fa39c6180780e39473882a9900bd46d5c82f8cfa7ce7d07517c6ba395f479445fdb3ff3e5b9f6fdb2c56017a60efc2542a10856281118c60ebc25ae05be03d70cec8b21975b30e1ce70fde03ede7a9aeb42b2b2ccf20ed3567f5df77da36de77d477d4bf1df077140efc7d75cfb26cd68159a747d40d5ed781e07773eb2c965df96bd23a161064b1eeea12bd8ed3de7d5dd4b77f37a3eee9385365535fb1a79bbf17de6cfee285a158afe7ee7a0a7596edda06758f33bfc62eabc3bd7bcbeebc70ea71d28678ed08f75aefcdd94d715f009cffde1700db001577f9bb3e127719cc69dce5d018005567c9b19dd1128c609903ea1fabc7778a20c862799e075ec562b12266d9bc75605e7de5d1f2c81aa84b1dd4e557ac0e41e0eaca83b64faca3baae431dc6ba05e881bbcefbbc136855376f1375631a2d61087ed368ad1a2d2108aeb8e6d05dde43f5f86c70ddf31ab3defa67734dc68151e073883ff0f9f8e30184595f797e755d06695fcb593975d35b9607284bcc529de52ecb23f16a65596c5459f9cfe617feae3a4eaffeddfcc29f0c66755d06310ad5b12eac857a0b7516ea036fd681c1f74af5f84f654f07edcacda9bbf3c23652d48d89ba4ef7efa8dbfd7bf7cf9bd53bddfe017297997e0d04e42ef16c8b658daa5954f06c74e76a6eb6cfd38717b65d1bf1f45346192fac3e7ebb6761f5b02ece0bebbaae3958adf7bee785d1ebcc3777ce6618f788846b70fc66338cbb3674b86faf97fbf6ed4e51836b7044eadbe324290992302753f7acaaaa9e29e69e559eca7e2dff6ccb553b247ed12108d4f9aef25cb6feb3adbbbc5ef055f56ff5ef2e9b5fd8e572adc02ffceabfbb5af7fafb6ceb11f51da75b57fdb35907fedea81aae57f0f52a1f19bcba8af5b19e41fcb12e0cbc05e8815717065e6775d6c1aab2590756bddaac03d7d7232a07d65757b5ae0e41e07798eaaed7fb5d98eae6b0be3aebab1e8959eec96fb5baeb12c5c34300b847b25877b9583cbca3fe3bcbcdabcbba3e127f2dcf3407d592db08cc1d67bad8ac7afccb6695e9b3441310fa111d1f0904fbcfcb3de2fd48f6ee2371ea9eeb8d01707bc4d1756139c7ab1fafae7a8fc4b09cd5bbafdeed90b8476256cbcd3d70cb55d665b30e9bd5730bab5a2ed755aad6cd20561d3c8b8d1d823783d8f595753d36ede5e0cd1d767df5171b7bb6bab9c3aae34c97cd3a5adebad7d269b93e12b31e71de7961d655f7fa63b18e7aa372bab3eeb1ecea9ed7a802f4e8162b31cb3666dd2c31ebabb3d8d65d167c8bcd2fdcf2c9721dd7c1b3b80eded57296b76ecb7126cb366eb119fce91455a3f1ea2cd4b51131ace53aacbbdec2baeb2cd55d57f5d8a1ea2c3776d8baf98555c769965d7db5cae0dd7961eff1def02e5136629cf9d52c23ebc0b09c5884eb757c2496ef7ceae57beaf59158c7013b24963f9687d9a097ff0ce01e919dd4eaafc88bdeca035e5827c20ee3e6b979efdf78c80b335d675ede7458bd8e77f97abdcb7ba75bcfc9eec626028c453b5189dabc238d48939449f06c44cc631e16af434daf973660dd75e8e7bbc3b8eb6c9fe7eef6f9ade3ad37de78797922c0f9bcdd1d6924d3bb1395f0bc3e135f42f1d9b0cea426134e9f4eb207cb1f70aec1b4c353d7e1e9e69e0da77d36acb3d5d828f6f1750805fc3abcb3a78831f6baa4df24a574de6f23f2580d39dc5f8c33e85f449a8dfe4c4a676c28bd31b1ce0c3b8cb3719e9507199e9751d891617a4ef670a18d5ece298b34f13fb40540f9d943316d81debcb9c3b3e65a6ba5e76647bd0dd048bfae89f05a60280b67644c5aaf4cb1ec4937940d546201e6d804cbd3e850de7428b78bd35d87f5e6a6d1a13c4e87524a496f28db6434f69a1e37381ec4f18be1185f37bd5d0aca2d40792fd618a70072f264022fca3c1ae51430bfbafb03de720fde3210532601acc16953d5d17552ded0e866b0b419041bc46d3abdff9d4eefdaa6fef4af69de4f27ef247df4ac6fb0f003277e80bbcdd49de2eec2b6f7c09f0216c577b64614a08e49c3b9d96e545aba8902cacb201c0f8ab893a9ab9b0e4160648273a4f204d0a382e594d34da693c974041146534cdc29364d29ea10bcb31f96dea97227bbf3f96c8d02dab3964c00f3ebfbb270068c5cd7addef85122852418d99161eef8a6a68df0b8adabf44647cf4eef3a107cbdfe30bccc02f47eba3a04817109d37bf73cd3e906d01388c08224bc7de70673efea03e212deae1c9a1af0220d3c9d6ea67a83e5e9df51debf14f5283d516a4df74ea6d3eda1787b671f708375e8a5f37e3d8bf0bcfe8cbd3a9cc1f49e44d9107648bdca7138fda13e1e493be4ba1d19aef74e6187f4dbcd3d1bee5ebb9b1b77377db332ee1d10de78663aa4afe99036a5326e2959a4a1073bfce20d9e1d45c94d0431ca2b766e708c11fc6ee0e5983369a367929385333532e28c199a6c8d28c00e4b9c1a7a8834f23daa9436f0bed95a6dec5af34e8869d799ba8ebb3c15771988db6afde48ed3f51cb76d34c89c6f1b1a6bfdb66d5be57a9824e701efd4cab727edfc24276595728b5bbcfd439eb32d5bca96b43bca773daadc8ca8937b9e73ce8dabdbb6b50cf7a8cf73f366ec30461a8e8b311cff921169e26b6638c92d11bfc56d8bdfe275b61863ece2bb099c48135b94d28d6edb06f280377a5905509eca621dc67f9dd40294df6438ce885846e386238297a59df1f2f2e61ddbfbf1c2726ea638cbeff4c03d700fec4d0bcba11ba6551ac7b8d91e8a65d2eea058de6b0bcba1276cc2ad0418513762952a15f7bc2187a5ddb9a11b573b9b2996f26eb28dd0dfd742b6159cb7ed5382ecdfec4ca491bd046f4c30bd941299bc6cdc60faf601e64f06a6ef9d9b8da61a353fea6d27ce54bf96cc52cadbfa62b81fdb6cd7e14c0f76d8c214e70ff747710602c36c001114144404a65fc11988a0a0a01f14c768d34387926e6ffa796f6e743bbd920aa07c0f545152c73a5c02986321a55e3f26a57c44499cb62fef73d6a6cbbf70867ddf0e963f5dde74cf661dd8f33a296ff64ebb7f768579d7913fddbb3a04016139f2a7cb7bda74e0eddb5f78fed54680b985fbf32c78ca56dbe4b803dc5f875f5f0830ffdd1d3db9cdc0bbe953c2287fe1083a09e34d36f66c934f4ac212dcb5e654dccd59ebbc3c1567205c9b12a1de76fab61b15225fd82e0dd21b902ff4a9478b3579cf9b934e3a297ddb48203a3cef793de8900e71e6b6d1cb53f19cf7b31daa63df7708247bd4e684e0d19be316e3f678a9136987f4fd9e89b7d3d633f568eca18540b9d99e0d6fddb69dda6e0948bf9d5e67bbddf4c63adce454a2848d9e44a136e2ce80448263eea17d4abf6d159fbacd7610da5d9e8aa90ddd2604e79eee1e6f3ab5f126db45c817e83bbba16c88f531871ae3cd4074900e3b6a3b48871467f2545cebb9ce521b387a438c78ca793b93a44c7851861367fc1069e463f708a6542d17cbe3656d435f8faf91b17956e21adaa6869a49abc1b9b9f170568f281b58a89b6d60d43d9b6fb20c7f427a369f3f9c5bb88b5d692ecf2fdcb57457c7a4b9dcd90282af97e73d87de730dcef4ecea9f8db8c5e60eb3d82cb1cfc41908dc3371eb2dcfe5dd882991421270eb3b32dcba273f97a598a5757758d6071d2f9cb212cfb4cdcc4b7ad7d68862c54adc6a1be94dd07b591c3d9ba716870ee7a515608e4bb109fea167272e61ef3978e80187b6f13e8fa36dbecfefd036114fd4bf7bdf87423da26eac8a489104f68ed3dfce0dc511e5dd1e78d8a14389baa15e1b38b07437c49d5eede9d3e6e3f961ae675700f30ce6666ada869ebb8cb6f9ceeddc70a7d136a673afb6b3b4c3fa2f65c19ed5a3ecab67b51e577ab9ab138b6a4b2d649f47fb9e5f98439deb68c8e8591ff51509c524dcc524ccbd9300ebbbee5406755687203026552991a2983eade99ccdb21bdc35b48df73e8d76d3b3f6641530472afa3cf4d0365300a8dcb361a2efd3a67bd7be35a61d5994534f288a4e9ccd20cdbb4d8d28c07ad3f387b94f5b230ab0bbe9dda479b79bb3e77ceef0cd5fb53dd4d4cd83bed7369bebd3baced97c933bccddccf2fcb59e41d6732bf5fc423dc78eb92cc3dc430c3ecf60eeb966f52c0373f7e6a9a6ded4a06c8d28c0ee36da06f5bdce59afbc6d5c37c72516bb438e1e22cdbccad6801369d7213867f31d93a2696610e717ce1dce1129efdce08ddeaf59e42684127c1c8d8e30044793c96432d1732894bc12954351104cb11703007611a6d8a35fd734d66badf55926c15c9648307733ad1565432dc299146583897b1bc105c1b46d4c374bccd51831adb408571b6d0e1e96281be8ed1f1dd2e3cc1c0f57b06de463d1e9e61ef4478882431c8d8e8084042338068e464808c24647f8815d7034320214b037bfad081d9a447a88c4dc6d211dd6226e07e9b07ee732c53d8de5b9e78fab9fac7337a75e1f9bd67a463d72577534d5b9b3bc733d135c79cbc69e81b96762efdccacd3d1477df74080253b787e26a8a56872010757b26aea6f7bd41479ee27a754c95e61e8a3f1f60cfc43d134b241ba66f23240dddd5f95e73beab23bfe1ba7937f798a81c362c6f4fe3faede60e82b93642bec0710f3d4ae9cd3b2fccbd723f5907a6d9074c79a23cb55996f3c25907a6c769ee012f4caf4e7dbde960dbcca36c387da27408026e2752e9f0e335d55b9fabfadce1af7b562f656dc3dd796ffbba49531d88a0a0a020d3eb71fab344ab6f96a8757fbcb63acb823ddbeed9afc38dfbca9e6cd7217759dbd49b5f98fb7ca36a985656f59395af1688a0a02021b0ec4c76c6caba399b2d3ce79c73d69b7f703db5777b076923e40bf4f475db7826de6cd852ad724206b7bef3ee57d33626d763ded9ff55e6f7db8b6b69165953336d738addb38fb9a983f97579a52ee8facbbf93cc63eec1fc3775afea6273e15a8277256b9b95d753f62f47c93c76f25c7e5b30ea8b4dc6b9e816c9b2cae973f239f2442dd0fef595bfc4625a2e90cbff53cb2fcb73545fcd9e035ef5ae6e5cf7bfcb3eeb66568ce502b96e4c7533d1ec02d9b70ecafcf51598bf3c057bec2897c7fceb7b63a7f039e057319eb372f026182bef5e54d9e682bbac9b55afb659dd4c145e207b5fe0cd44312e90cc5b5fb99908c64dc1fe72d4d7f2989f7e5fde8be7a40eca9e837aea9d0bd4ebdd2c77d5cd2badb6016f267a7181646e2b753391ec02c1bc75d4cd442e2e10ecaf7f2e7ff9a9e5b17b31b765ba39e77c4fd9e79cfebdfef44d868b59b91995ba99e85e20980bf60c92c85e20d85b3fdd4cf40be4f2d73d53ec829dcc73bc7f31cf31dd83794e77d3b99c733af79caf6dbe9b89642e10ec7edecd443117c8e5ad9b6e2682b9402d7fbd7bb95f8d3da7def40df69cedf5e5a79bd37544b10be472bb7a3311ec02b564a2970bf4ba5dcfd0779dbbd9e539dcebbb9b897ebcf67ace46895c2e50cba5e76e267a5d20d75bdf5ade72815c2cf42d4b7b06eaea01b68b0b3cda3619b63de28e434081e93921707ce668f71d3d147f374b6f5279f2ee4d54ccc9f9be52ff9da26ce0a141414ae01e798929ea460b96374b009ff0cd387a940004b8730eee9fac7769b91e33f0b84e52212870bf1e092d21821b771138e278e4830a7e01c7231f39c05460ee48680adce75037fa5c634ee259b3c45c8c34f5f33610a68de7f65c1fb72bfb91a74edc471670827de844d568d4f66a1b73320a122c4fdf7206e1c80249708c471560828778ed48dc018ef1c8024c703480b703d248042210810846a8221a612b9a5558e11503e2064fb4808a156e00842647a4780009ca132339d8410e84d8801020b04264c0c4034e080b9caa08419be0c17224121cdf3f007374d23f00a3bc3db037e71ca274889441b6edbdddfe7104763db7e86a884538af29985255d46f75d22982807a92aae228c5036e0a5a78393ee7bec7711cce9c9db67963038e9a398b339c737ebee6cce6cdb4590ace193d6dd4ce6ece70c4399b52e298b3a8e33331d104ea4d38a276a041413bc8de2116d5eab53167f138dd1203c91e5cd325de15984439378ad3dda4c51a586108294708c1088eb0408de200d3bf9ec014d3df0498b2d4285522c50c4660850b963044951aad22ecdbc2d1e80a55600f47a32bf80067191212dc6f2593667a575307999cf40f251327bd1e74fc208d4824f2870eb1d6c3a49dde075fdec9ca5ab5384e3fdd204caf37ec6c8e0b53407df7ee06e1bdd662cd9336e0e84ca777f5a70b647aeddeddb33f471420a1b0821b04d5bcd7ff00997eba77814c0f02e8545f7b68d2baf7dbc8a4d586a26770a234678d4326cd996d231dcacb20f963ce1a071073d65998023ad30d610aa8a65b33678de373566dee1a09125e1767486fc5c80e9e1caa77cfc17d751b88508fa888aaafb2a8be4a2512c9eacaa4291d84ba12a9bbd24914a5251d3de4e8107c8f1a3dea0231248dd01f641068e510f923c8e4d9a100d5eb15c01df51b2226eabe23c7cff7d355cff1b372efdc3df01bf86dc73ccf0e05c014603addf4584b7d078ed405e74c7e013005a4befaea0651fbe951bb61c89cc9ab6c0fcd993c68617dee3d6adeb43ac49a0fd353f7244a01a79b3e73784f3da272a072acdcfe3167f2a90b9b47dd77903993f7ac8d39933f591c73266fb2b0797174f73567f2f5869cc599b0be386ee64cbe470d28d5633647e5e6868a4e06dd1421290a12a8c08a153c410a29a2509b3e40128252146450c51550d4e60d906072824b15520871f41d09b103568f0e5069d2640928b4c00913b51a13484042419423ae10822a5c381a513132810c2903b6033083608b4a92540b0465341523dffc8d11c02c43060d2180291c8da82c813308ce84548cc01b8e465480e01c166900090969beeb91011a78c0065a1c195201133d382044a4090d84e080134720c520d2da4993fb9c930326eeeedce05945f7d95d9c399343dee4aae0621441b8a3a00de079d9e4e6bb59c556e99c37cbba655b4c010938d7702be0584b4c9084a2a41f3e960440040eec800647e0408a20d462143c1c05055579c20e86b045155b0cc1085b08610b1f74118c4ccc39c3886e03f4891a4a031396c0283c7fa2546d7e26de2c94282d5144164a86509b40a4ac60cad00b8c88a206b527401c8db638a24f448e89bc49c0c993140cd1c00b90c8a246a77020890bc4408a1824416906138ce83640b7bb73f344ad1bd0912a609084287cc8a088dacd114b424b558c2021458d0280cac6042150f7353c01e65884b31485d28dbe7b4206711f8e465bb460ebed05bdb9683a4fe96b0b13604ae9cdf3eec830e54e393a29a55b8800534a29dd82094c394c29a52f1935dd164168d326f4d6937ece39e7d4e2099e8d674b8b23e0f9d89cf39bc95a7034d2220b5c857905122572430b8e9126096fce20b4ec8d0a2925ea06d9334a2d90b47032e9a45ac4400b1668e104dde8d635a10509b420b2711ba78510ce1467a184b3c4d10a5944e1b2d0411645338b174c245918995930910512a8142a25250b23b2f091faa615e00a388508a00a5439e94c5105e2683445c98a45572c53d7840970a6780ace14c7294de0ce346548c7faa69dc2c4a2092d5514dc93264439e5072512e50d4ee2096e077852c618a3c4a209f7e40958209102e70e633154032c5a4a291f6327a51645106975c881e30e7b2b2d202bd2707a26270c4b891b55036cedc8709541ed0d0d0f801447232c88c80029c56208a6943e5e7a5be0ccc482035d1f7c01f763b218801c8e465820817348a42347299d1c13f5037b1c51a409490869c1144400a1560fb60d0dd7bfbe025c2f6b5aadd5cfc449ebe104142058c110a430a4a88a5afd309d7dafa0823b1c8db00072852499579cd170ba58e4e2258bbd1e9375383549b5dd7aba2f1c6cf4f525c0138e4657d000e34cda8b932cc0d5c3b5718dbd884eef7eba385362aed67ac50970adb8d69b6b884593f6ba8204265cffd8c55e262ba3e6b1573769b2191b38af8732381a5d41046649c1b9a6ebba032fca58583ed2be38a3d5c8adab6901bfd692d2d2140d02f06553c359191d721c57052898e3b89bebdd91618965e49a9a9a49fb5a5558c2dc636d4331f7c7195c9700fcc29ec96f16ec9ec94bd91f006f6a7ed4248dd65ce06854851a60148e46555082b32c1651274429c503528c901c8e46527ea06c883c74f627ea06ba451180d1880a5270472cc5076ec94853b09c8933109e8f38f7c07309524a29654b898af68b34499ce0dc612329457094928339a530b951623171bc11159ee0684405249c27113cefe168440527781289384b2936f4252a03e1b602945122cd3c929426381a4979827323714c00517186e9f3a66873fa7c4ad21a69cebae75874133ebfa2a465f0642508a21401d2a4c9229193344822f185f958d4dd7c73536faea909c3bf2452129ef2462ca2018e38622278dee88a27b8a731f5a10f008ea81b1ba677266d3df062db508f52ea51ca9db81377e24e277aba366e1bf73adf79ceee78ba79be27f75a75fa369ce4b48227b72cc3381dd268153d8c08defe1361dcad71c4011f98de46d3665150509010b5781c3bec00c7e768da6bf13d20e1781fb0a845a329cc008338bea76da2911494e07820da26a8695d8be7ac8e0f286cd6c2662d98d08801c7d7c823708401c7371460e36824052670a661838e0f2436e218f6e725aaf1f56eaa4c65a8c38859381a45c1078e930452bc95ee9d8df86d43fbb9d61bfdfa0e09ee5e8da03084b977b691805d4fdc46dfaa3f5d580e77d3b99bee37bb8ebb3af5dd730d63a372ea3b1d7c80f5ea54b0c36a807abbb73adc6e6cce0f78dca3ecd536508042139c3b6c048529f09cafedadd76bc81beb301e7583c42755a682e4beae0ef7fef376b0c398b3715767bba7b7a1f08c9e00821db0a31d1138e50e1984693b21df3bf0a26cdb1ee7497e470d96976705cb3e02c272e45010707f470deeeb43b1bc31d2cccbf71170a373765d774feee8dec3dd6040bf43e1d06346be2fbf5a6ba6138a6d4ad93de7e985dda0bf52d02592ebd91e1414d4b349b1447629b62ed2e11b4ce9c439ab2252287183b739a30ac02cc3dd6a22707382d20d132ae7f4ede6d34f27ab4375e6b953940d464da0a2db880949b80f465367eaaf33e5ee3af39dd5e1be2e77b443b08ba81a1178d208df03643b3212d058f40099cfd6b319f1d97c80dc97ebbbbc73e375f6eb1180f5711ea372f0b90fb8c1dcd5d93e2fbdb18ff0629c31371c1c41628a0a64e0094ba8c51c98e0034818fd00892010a156833b1c8f63e6b8993893166b5d2d3e364086135fc1dbe8bba6c9da76707bec71c6c4dbcdb40460d7213d67bb4983c012904801042b083a81086adbc1b679016f7f192d5dc1d5b6cf348dd6b6c749a361850eac70851830c189256adbed9e0033fd17655452f164d3b6c7d7d034198443d3628dd6e2bd28590046232ba0c02a1c8dac1882bb9667f0ac4525e04c034f1c99e079d97cd7e0b4a2081d9eff7d0d01730b7f3d936fc9c76a2c0123a6180647232b8a30c5d1c88a25387747e0382065b82f67d39812293cc1f41b3da592dbb66deb23ba2931c6c9cde0206b708d8d1a3a20120aa07c8e4d704c9a02c737d2067068741823131c415913cae829120dc4241bed03949fef9d9b8ed217783d14c7cbc3cddde5ddf07779613926588ea458debc3df7b3fc7c0f6cbaa69d98b483e29d1b7c7a8742bd4349fc591c7bdbd9168743ed6a47690d1bb771b87b86d2b0fb1cde26ee2b6bdc0325e914e0e35b38c4193f91a6cb3470bcac693fcc9904e23551b46ece26b7d125d04afca303881b9cd7a449212bef9cb0622a4216ced7741762fa5c992b37dd339956564c3b32dcedf8a023c987b69979f5109d84de7783c38d8dd95d5016f66caaa415c0a01fb288cea1b23cf46cb33670184a35f744a5227e87a6f1d03670c071534f5d6ae593afa6e1cc59a5d5cc59ad6103f03a26edeb597dd781e0eb953f2ca54005ae974500d1367d6f88f847dbc0fa11773ff4c8a0b6e95bb99fadc6b335a200f357230a707b0f510f444fdb744b5b230a70e2dc250fecf65457dd1e8a5b4787dd83c9fa109152355dffb33b91a65f33ebab944da8f5d3b1f343db7c4346724fc5a89b5e51afdfebe31582abfca4bc3b3109a38ea2d8b3149f6c0caa6f352dd662ad7e4622e958f0e1f820a07ce3403a0104ece7441a60291f372efec0891f3c8125479f80e5b4a0d0808f0c5a12e7ececbc74ce53a9b3cd78052f461b6ae9e74f6fb4a17476ab1a07a7129ef353e9c7932296824011126588142253862695224146a80fda49a412ba642be29854a4d7142e492f26fce2ca5eec63af16f87533c85212284aa22c915234854953410a9ac247d28f0ee7c4b3975cdcd7514964d7e53828b9f7e5065802bbb01fa0287663cf8109cc85390ea4981b73044c217365ae43d2ef9f808aedb5dfe1538708fd36e4c26b8a70af4662b80c28ee65484cf792c07848bb0d0b9fc9dd4ce6bb89ec33c378f89959f8cc5d78cd67dcdcc5701907c0cde0cdcd2fdab5b93fdc7cec591d3f7ae8a01a39a5a785ec74113eb40f1e24951da4141c32ca13c04c91c82872e3ea95c1d861c1940a0c4ba748a1512814bad4e1136aa992b4940a4b9d20ddbfa690dde5f349521517fef2b9d404c6614e6a1efb8c424595f0309f52946278cce794272c5ce693ca928cff3408cacc6ddbdccca021009c5a0def3e0b70a345060b0d560d1d4ed50e96fae890064d2a73ca94320f6027940ee70d60e7120e763e994a1df6c5d161dbdcdc1c1df68ccb43874de3f6d0610be0fad061e3d4ee4e875dc3fda1c3ee6ecf670e2f008edfc0e12d0878ca0067d1e1df01ce4ac04f2a296f4f02ac0e160156fac0617f7238d99d0ee50ff0192085838d1da67ec3ee50008b2376a83acbc60e592c6fb172a8074b609dece2f753a9089517977d3e8122c6617c4249327bf829a5c3d9c259f8a4d22193b6c91ecd674e7d7438ffc25df85ccab9b983e1359f516cdc0ccaf0183e6f189a41952a5a609d3cc3659cd6b8f93fa6922949dbe415256d93694bda2603e0379fa7456d9369f88ccf53266d9303701a9fa74802980227a9f6996db8355c1c0850c336863300fb12400068d0300300f6c6caa0d9ced6d099b0c301dce613e7b4cfd3206d936fbef2792aa46d323e003e4f87b44d9e71d467ae9d86cfd3a1b6c9346891b6c90478003e4f8db44d160085a26d320e04a8591a1dce632b03670036ec705e003600346cec703b0d96c60c0b801b4bb33636f42ccaaed81964d8cb10837dc150635fb02e581adbd3e1fc4c0b96053bb33e84b6150386fd5ec82c7571adb5944a87f3b7744a87f332964ae9703ec6d2281dcec3580a852ed127548952419d743863121227789e2299341c3d936fb9ae9b3b969ba312966fdd0cb26e8e4b587e75f34b250f52242b37d7607983c19b63517eddeef6e7dc7490332c9270bfad00e75f80f8d8e1fa904de28c68040adc413e701bc11b954e723708f6a5931c54f0a0d4c3131f967440d989f283941e7a2078e8d5995706e19fde02cc3129694ee1455976a10a2871067136c21167702508677028d7229cc15a84b30c3804430986120c25184a30946028c150e290b6a4a9d44b328acc503cba4010ce3243780ec1191c520de98640232a24432e0cd11578f2c64829edbaeefb3e10045badd6eb3ce87dc5c7a6cc41db7475b38944a7b725023f2dd1caa9254a7db344a87396e87bb54444f4719e6eefb87ff560f7208e98ae231feb10f70e7963a6fbea6eab5e90bbdfb603a8f6a8dd32f0626d93897ec0f348dada6afcd7c5772793004ef7e7088ffc1480eafe1ce1913f440ca006aea4509f777f881840edf4208ecc4bbd0771c474bbef411ce98238526f1047661047e87d75381fc491beb10ea70a5c49a13eeffed0233f5df77d20d86abdb8d30de208778f6c37c7ae07d794a8c19ea99e56a8a1bae7a4df87389dcedbf707883bf795f9a6db814cef1e1f6bdacd0399bebdfa40dc697d370f743a7d1fa83bf70de8f4f9214ee06a8576ef036de754a6d703792b10c8bb971ae254435d0bc8a452a70399beba43c89aa79ae7e881b6affc670859fb01f25e3fc4a906de95d4fd31d57777a079fa1f2f35d477bd1b9b6e07aadbb793e976ff019aef0e544fbb2164ed07a87257b651a0d9f73d834ad617785406465da20c50e5416dde9f2152b5f91f2e49370bac54f9f1529bff10a76f74ba7ebcd45e5a2b30e5a9be9558cbb502531e6b45f572ad5a60ca6351b15aae16b84a79a6ba1d88e5f351c6d55aa50ef41dfccf10a7534759be1d88fb8fcb5fdb5faffb03d49d602ef707e844bba845905accd55a81decf10a71aecbe009dee6aadc09467aadb81be4f576b05a63cd33cd0473930f51fa0957bf540df4dff01e2eebab29ea1c1f70cdd5add98eabec0fb5ab9b1d46da1aeec40dfbd77c1d38da6fb75f576dcfd36203aef8160d284e421a005e08e781ed379baf3d4f370e7e1e11113141484e57978d424dce761c38ef81df1e69bbec37473acfb8eeee657fd8e7a738bfb0e2eeed86ede41e38efeecd87d7d5c585e9934821779d077e7cec363bbe93ce6bd832ad6ead5e2f2facb79c4ce232f8f0c0f988c87a706ec3caff3b8ceb33acfca79e6bfdf90b92179a4bc30989b63b09bff7ab9d9e575738ca5e56617cbcdaf55eb66d6eae6d68aea6670e566f0bbcf0b4edd8cba3c329fcf0bf66e3e5dd3ed6eae3cc0f5f2c86c37fbbc3cf7703d629262c093b54de6e9e7c762af57ab0582dfd7f9bce0f928e3f382e9730f87e9cd3b9507785e1f97941de4b5349d4c2bddece1703dcf00b04f0b733c2bd8c785b71d3d8db74b796593aba71b3b79a6fb42a53a50c5aa275cbbe595826d97c2d0fb559c31fb4e28bc581f4fb7ca75ddc9e47da9f734a8fa8ed6e35b29bc6abd87c3acf7b830cf0a6e79fcebc32cdfe14371cb7b2876bda785790680613d2bfcfa8e9e1376f90e1f0ec3ded3f865470f8863601e7bcf0bf34c2cb3a3278577f83496b932c64e4b238d7ccc6e91461e664d2fb68b34f22eb6725fa4f14e2b2914a85ab9585a9186e5f28a342db148037b8189918991734a101ae0989b465e89012edea08f23d2c848037c0389813863fbec3a10534a9f2506f0bc47330bf4146733d262ed167959e1f92c85e0243b1af3489c1369a62c22d2628dc992245014a9b1d050c02ca7c0f3f984e71b0a5304a149bc28f3e2d10f2458624f7e38e28c382f025a00f27414c0d7e9e594231c619d95cb77d6019f0a52bdf3b1bae907eba7225af782b0fc13e23aea9d639596bfbcb38ecb61593ac95229c72298fd79b140f4fcb06375f4c083cdd1a10c9ab37ecb14eafba90b72b14da4c321b68574902ea257b67d745087546450dfe5decd7f995ebac6889149abe9591fe49eba77071c5aefd7b07a9fc6cafb352defcb70fdac7357f5edbe1e31f8793f9e585fd69f99efeaa52ef7d5e26269b1562a702595ca1675a5910efb5f7b9749875dd4612fe9b09574d8e7e1ae447265920efb3564951b524ed161bf9d00d22f814b20025a00464c6fd870631e0e4f7a740415381e1d51843d1c8f8e48c2d248db4c1b66bf488f0a2fca768833e457de6a2346745a1eab5439c212dca2c359810ae690b40d0f93e9ead4cac3f3ae8ec9f4f956a2e3793c50a8abf37d9f3c52a9ab8342f16061b93aa9d4e71b4987e5b14a952a5430cb270fd779f45b6e07b9ae8ebc5da44a152a3dd4447a480b99b67fb40f2880593a69273b5091438987273d2cf9004547941d293ff4f0c8abd3ba3f40341530cfccd0a48f9e4d9a2ca267932689f46c761430d3269346593777ab9b41d5cd2ff0fedee75fa6cf83954776a87f3fddfcd3bb53bc7277f0dcf079c1b9f200a72eea4a1f3578be2b87bc2b899cae1c62ba52487779eaa5af21abdc90b2c80f2780f25906259986f0e2df99de7dde4f20eadf579e7aa90e5ef5f818ebabb3bcf596bb4297bf6660f135308f1de6f132641e7399c7dfd8fff6f1345cfcdec5e3715e5cf6178faf21c6613cc679f0c8f3983dfc8c470bf138e20c1ef23c3af338228d3c8eb760599885316c0d2f2c0e8ea561edcd8d9501636b6076c6c586a1cbca5e1dca4fd20e658f506e415e2b018c78d6cb4f5bef4946db702c9739fded3757d7d3f53a96c3bcfe32e7626e3914eca71fe65d8ddd9ea32d9bab5b92b5c272971f7653cc617e8a5de6ddcbed6b0b77e96beb95ab4ab51c75977f3187c50ef372999f5eb7ac179c8cbad86ebb644bb59daecefa5b62ee0283715da0d7656eb23fb538baf55737af622c37d633c89ff59598b73c15bbcb512f87fd7b1de69eeb326f7b6326d54f32ce05bd9b5ddd0cbe62acc49cf554ec2d47bddce59fe73acc4d32f7755ae13619f0e654ab6d566e2692c9d8592f6fb9673ac1dc56877ae5623698d4cd1f48643dd3eb2d3f75b00b9eee9d3b9d6e959abe3de7f43acbf51697fb71dcbb537aeedbcd794704e35c679db27cbbb9de4bbfb19c75eafa745d2096d63c4b65022fc66274b5baebf15dabf5d7e3bf96165046e6b3d9614434e7912712a2390c11eb3cf2ea10fd18402de6086801f8888984588f818109f1727f7e080a0aaa80cbfde97182890d9678dd9f080815610635a8fd1031809aebfef408c1022329b51f0bac542162003596fb03ebefd8116bb5c8cc6858f7e7c8f79f23de7f8e6cfff19a4c4b6b15038a7df59f23a903ad1c48f59f23f4abfb732447fefb3992f35de2ef3f47e48f546f85bfe7a0886850b3a35037e30f75512c442cfa8fd29b61f2e6d0cf474c1493f2bbea3b785d5e2f2a0943046b5d3eaffcbb39e77bea7bce9197cf3139dfe5cda97ff78b69c1a0602f7779b9585834de6cb55a6d376f2cde7db9eedd2547bede5cdf92b977d4855d3ee710bd48984b7973ac6bb55a3fea31f6d5a134dd6cba7714aaa5c5c5bd5f59ab4379baf974d46c06e3a8bf88017628419ae7a0686858085bf83c1788665ee83a9428188e7acef16aee3de7a06e0ccff162b8403411069a9a0b347bec850bd4e202cd3d72ba9f99b570815a2cccee11d395852d312e900c8c967ba4bbe18b96ec02b5b868dd23f5ce5c995fa0d663bfcc3dc2dd9a0e654ccb2fd0eab10bebf71548608519d4fa0a24b042512dc35afed27a76b9405408161851a1b67ab5dc23db95e16afd02512798d8a003b5d63d42ef4d8792758136a122cc80496d758fcc4bc3f658e915068e8850c26094459c1e680d3e7436747c38ec80387e68edd0217d4f87f43cba6f8e0ee981e890f2e8be3c7448ffe33305301efd0882e3111151708e454a98be691096c7790d6dc39dde46db6ca7c70147db74a7df21070f6d738ab8c6523e7687778aa5ee8d06019e3ef2e5d9789cde61f25edebdd133f0912d9cded1995aa67ba38d80a78f0467b7a376e08dae82a78ffcea8ead7ef5de9820c0f35bb783dbbaedde9833c03ed2ebcfeee8f7a0ce65fa9ec6df34029ebf3e1b9ea747591d797964f0fc71a441789e46dbc8d37b3d196d535dff37fb2d449a05c723288868e178f40415ac20c20e9e60526bad9d49da2322264f2869168e474f8ce0090d98ba530a9673c2f18de3cd13c0b14311440094eff0054a3a02232310320224a8ba1380f9db6cd7b3e3783402a31128c19982320b1354a52527709651e4140ed3cb2d61d204ce720ad924c9b6c9217268099ca5112828ce12099e974128c5f222484204171041053a279a3001754286e351135534d1a4a822e14559aec1377f98362dd633292b52a44812fdee35e11360966119f4b56000c6e078d4040b30c5f1a88914e0fc3241094a20b9118c608e60d229eb268c7093a8b726863441c42c326f688800a4381e8540049306023a8d804721f0009d46c099d0e27834a4054ee178340405e730a90412cab4891c119aa7640307231a58ebe740c27d1ea0d4fa3eb44d3c1a4a8253b8bf038222dcffa10f44d362adcf5189caa158c707920e230d6c61d9c29326a7c459bf5b384b28b86be1d8363186b97f80b81f3755bec2907834d404f73496cf120aee4ff900e089ca81c3f2e2449a7e37018c38cb214c86e074d84940fbea3a107c0d5921e9ecdeaed05dd1b1928081b84d39e3165b2489e00732704204136a1420a283249cd0c1114b40428d2601d32310fc984c9c703c6242082c981f98f281250061cab83da0f746068d1dcc1b226096c1840b70c5f1888914e01c4ec10394889323225148a142029ca50ff9637ee735319dd1c9123847a5af6d34a6c769f920a779c40411a6d901178e4744a4804d381e115982c11c223921b57297dc39ee1cc7711cc7711cc7711cc749f9ee1cf78eab9c7ca49bdc382c6b6f554aee9ecd12a94a12d45a6b95533eca3820149933469aea84cb156f3535f8b5ed36da86e2ed381c47b7fd6bc536277853c2db06056f7f58f1f6ba9d8b82b73937fa027d3a4c27c7711cb7c2f206916685378e8b91469ebbcd71b1f3019d4378fe4503605f7a4009cba41a1760b8e250600294292881d22cb1682c22cdfc0c1eb30357d03b24cea0374b3c630e708c3494de3924d2cce3f454028c788587cc25e28c8884e7fc2c027cd108d00120c459b4214007aa8861c43985270b70c4798509d081a448250d04e84093f8429c43df12291d782283703c5a820aceb10a9ea7d136f16809293816cddb58c20796483309301e792009471a346ac0a169afcdefd03614cfe78833269ee7e1c8034578ce277842c113e72805cff06679031c57e2116ac81b6c92a81f238da4985a1984a5cdf2f11b2a0789842587b2814786a50fdc9604587a8d24698838ce22c0178e974471060fe9034ba248133f830709224d3c09703792c431d2f40d1905ee4b29e20c891469e2a58834f1f2067186ecf78833faf274587eaec419f29b13bc285f00cef7d19027387754057608eb795cb97f20ed74efdb676a9af67dfb4dd350b4d4b7db88df9eb25dcfa237eb2ec8cda3214db6ed88034b78dbb6a4c680177b035270a4018e471b4001f656bc38692f308fb7317f9834fa783964d2628fedd14e311e2f834c9acce3a59249833d1e8cf13d4cda7dbcfc3169a8c74b2493661fe36b26adf5f81c93c67a84f1a87a7c38692e973d1e88496b79bc1c9a34178f7f59d96de12e7ce62eebe20ac95cfcc55716c6159ac178f894bd57c8059abbfe597b855edcdb9b6c8c2b44e3facc3b2b7385c21867e1d5c2aed0b5979db330570816bb423158f8ec2f5608e6dc657ea40127589e45e6b17317c84c2de6a01592b9405aa809a52e133bec9e158a5d202c35a1eeb10b2455fb61aed0cbc1bb58210f7696b7ac108ce5305fb1422c17c8ac09bd0ec27ce5272b6401ef301708cd6685562e9000d484becb781748ac26e43d76d805d2aa096d879d65855a70e10271a909991e3bcd05d2d584e661a756c87581ac6a42ae83331788ac09b11ce62d5c205c4d68e5326fb1422c5c20b09a1077d8ec0291d5845c0e1ec651e105b25213425de6312e909b9a507dec302e90534d887598abac908b5b40a847edc50512a326440ffbbd406635a1968357e81e88ac9dde56c802423d6ab20b44003521f032323f5d21960bb52ec4ba90eaabbbb8406835a1d363f70a7117da2e442f747b81744d487598df0af5615748e60a79173a5dc874a1faee40640df6182bd43acc1502226bb12b045e68e542a90b7d471d76855e2ee472a1d7855c6f39ce7cb12e369cb3f8976db1405839346731be655936c79cc5afac0c9ab378959546e62c1eb4e09cc5f894ed61cee25156fe98b3f8cf4a247316efd993c599b37893d53167f19d9541e62cbe5aa964cee239fb398bdf2cb53fcc59fcb472c89cc5b795560747940df20544233b1d303952024989244a30a1931a39522204474a68e04809248e9420e24809218e92a0228ba324a01c257183a324961c25c102288e9228729444078e92c84094a3242e709444501282c0e408892647482469c289a320528e90f8c0111242a0b084a320511c0579419220434190f480084a47427c1c299174a44416474a44390a92741444e90946343942c2071247423240e52888068e8e8072140489a3204508c1dc39238a607a9ac40826983b171bc2f52f281919908239237c607afa1afdd3e9527631d2984e27d695582c5f67585e0618b03c0b00b0bca50196bf3715cdae03c1682aaac13a77da4ca622199761730f2ce35e44b9b8b90776c1d2a46d6452d21453202131615254b464891225495837e79e89eb59902061f54cec35919d058ab6a962c483f1928ac0b460ee4d31d482b5ee211181c53c26436231b17b4542621e736f4990bf7e4f49116d03e3c5bd242c3ff24ec553b08be7c1c0b45a30582c1613739f17fcdf9c775ef885f770f8c5bd263b15efbcf0ebc5f5716197bbf3c22ef7907458cf5a0a9ab493929ed5cbf0dcfda4e44512184a622c098b664c58406a618a99249ad77b2ebcfe05db72b12c3e5a4aada5169456949694d61418dba2e25996a0eea7b3e4594b6d935d3ec3eb595056af6745699bfcc26b5ecf9202c3eb595362783d8bcaf7fa56cb47eaf5ad1f2baf6f1501befe4445f679c1349c47aa0e6b32e3b12900f01826556efed79f96d0fe7afd4989cd5d4ec3caca8c546ac6bddf9b3f038502c007737bf3ebc610c37d5ef00d0c97470606d0a6e6d6d06c6ede997886cbf2bc33f1eabe87c32cd7c78555776762906545294505cac9d724862418a6e8b006a9c36a6f5187d53eefb06013930eeb7b386caf8f0bb3dc1d166c7ae1c60e5fae0cd7c5dae8b0fe6571e8b0fe76870eeb632c0f1dd6c7ac0f1dd6c3ec4e873594b9303676d872f3cb745db02c349625a8c3fa19dba2d2617d0bb635a5c37a166c4b4a2b4a0b4a6ba9f5a4a5d4617d47015dcf1e120fc9a4ada2f4acbe034f7715457a4864cf262980aee788e4c2528c3365d86397cdac21b85e6633ab08d77b52b258a7e7965207b196da0a607716ebd94312238d2b5becaa21cf4d976ddd2c71eb7d97cdd108bbce62f34a10865dda2c8760c97a8e3490790600cc330c2dcfb3ae035daeb794e2ac3e5bec7a8c340f499cd5bbdea81aad734a5700b32caa451876593e51355aa72eafc7aca2aca2aca2b8bc1e13b3300b5b4591e199b584d44ac2827d7d0b89b5f7f52d28ee75f1fa9611172e64af6f1591c95ebcbe35f4e2058cd7b788c0b8315edf1a122346f8fa969070769db085d7b782cc66dfa93cc02d5c1f1766e1eab0d0c27347f30cbef0fc82e12c5839b33f74581fda9e0eeb6358203aac87617f3aac7f616550bd8bfa5b6fad642d4d9a8d9ed5771d08be5ef92f2e2eafd71f13138bc12eecd9549405682a7af9ee82fa2bf5af3c067c4c75985db516e0cbf349493615e1fa9312fbfcfbfc72f10c3e77373d77d8f40c62d3f30b9bfe7c6cbae7c30b7a4125329902430a8d2831a0c8a558789f9727b198ebc45e7f528a891dce62d7c785615747becaf0ec2109953c24a1cbeb97795f01bebcbea9d0cd5985c50e137399cb50c369bc64b8cc842fb6062183c5c4623fa280ad0945a0820ab59f9602b6182031c444ed27f60cb01f5100aa4a912a6c50fbf97a86fa2337b822283418c25dad472d760c30dcfc9a176e7eb940733338d3c2cd1d66e19e6637bcb9a68b71f30d08e3bee828603c02e2a4a52465b7c5c585b957e6d15ed643d6abcbcdddebbefe5bdf4d5a4ba967f53237bf626e7ec1dc0cc66eed605d07f5acbe035d6e0631eb75f30bb3949ae0dc41b866d652eea00c24612d6540086e792f018c474548c1fd049c41381e15d104b7784870ddce62e75b5fd99612ae57d9ec4ac2f5a0cd2d48b87ec5e65711ae4fd9eca204d7a36c7e41926146707dbde9a424c7249c594b781505d747546c0629c311deca0a5ec1f338afacc4d97ca472fb0a9ec799ad986c065471d7a75bb1585e2edbf5e95e6030b7f4fa74d7c50b3aebae4fc7429ce1f3b500d2f8bc30959767c5556f6c89e12e9581b1dd2e469cc1b3e2429ce113c3f47e2fc41911cfb611f7a872bb80eca6a048943693eead68dbb8251c5795d4da25e9ba09c5c9bbcee93d1c4679d7fb8e8f0b7f57e79bb41c3d9b77e244496969a98bf2d91d4e56c60d0d9c1a6ce080a3c339df75203883bae390ea96c45127db54a2bd3465142aa7b416f4d2f3a0370232b8e7857b0a06a8c0b98b92244897c1d4f36b258c33409df9e39ccef411db7466d0ebd3692aad934e4f013b9d969275b24e2f75d8e0cd75ea34940e7bf573dffe4dda6ac5725337bf5aacebc928211d9a454b48454b48484848484312a98b8a968a968a968a968a968a264d0ec921392487a6003165ca94293862524c8a49bd14866118e610ab562bd5a493a6baeaf692aa87ac7ac8520f59ea21ab25d552d15251515151d10cb2d2338610c619269ed3a49ec974f33b94b10ee56bc777fa8e939ca7d38b1275b78f1ae14edd57e9349dea0c4e3271db77ea2a3d75953ac1495d578df4e9e6aebb19ac37bfbe196cc48811234664901119b45127393a0e9c531a89db6a6a6a6a6a6aee993a0ea4f22b5fb98df40fe9c69e752b37f6acde7c2980b9879070bf87b81eea1ea89e61019acf9ce6f13bbc7017fec2e373c0f09ac3f0781e64780c97e1f13dcc70199fe1f13ed06e73dae37500e03707c0e37768f88cd3f0f81f02701a0fc0e37b664f4f00ec0f3fecece8d0e1c30c56869521060b83cd615f70c1d2cccc901503afbbc060648c0415995486e6142253ca901945c8841264a988273fa6d290a41b575f2e2f2fde45485cc82e2c06132373fb087ed5ba2b46f8590b33a779a1e630c8407d502341b4c8a44287e6144a644aa14366142a6442a141e6122d623ea13f403b95942851a2444917cd00c0cd570791c0788cf033252d2c9939cd0b4c6a0e830c323e0385a2c3e9591a34839d54689139850e4d2994c88c42874c2854c85ca241e6135a448c1f1209cfcf209d0b6cbd56e03bcabc921ccab9cbc65b373ca52aa8442a176b7445ce31a6660418008000531500304018120c0583b1380f44e90714000d9dbc58541f4bb42088719041c81842002106001081110182c18c035e25dbcb232e50aa0d4e4b8499cadbf35125e0e92104f4e476171c8fb8446690a3eeea294fe8b01cd75b24a3b5d3521ebf0e0d89b90d96d821dfa2f75aab8e742c38b87486009894669365c70ac9722b1e94a3cde38f5bdef617866d8b60e4991006dd036b1e15878d75508ebdaa2032e101cf4b9b7fab0d55f89d6761f00609b542f66db6510a3eaa9a8b62b9139aee8ffc307ca83ccbaf23ad45bc7c7082773c4d0ecc02d830f5294246f7c60fa8c1a38007eda08c6b263c84053335569879af0c8d8fbeeb3e177ed0e9be5476941d61d3192e5dafee5f71c6eb0a9fc4e9b057844d539274fdb9e928a1a8355485d0ad7ad4e4d4948446aa0082c16c9cb598a173256b2779a304e1febde28f23918883a2f9001bb31f64a51c37b7cf19c0d5187d05c211d901e36f7d6a0298edb8b0cadfc7ab0b7421344095ce9357c4e87218486ab784c1b7e3d5d9142b92dea5988088ca89edd2ac54af8b8f226043afe58f23dcdd3bf15383093bdd7e984b2b2accdcadb7cb7b2d37d3bfdab78d8c62146b15e3f14440ae4efd5f31f8c4a2fc74dd3944d9702af9417454f878fc340cafd6226737619c869f8ea628bc3fcc74cef2748303ee390591a5f929abd158cb02ca77746fd3e9932c3b578809044b2d5ecc960abc4748fb943a0a961c01fae9c4a9fd2322cfb402436c534dc4b1055872d1801849cc305695d65f3a34a42bc9d9133e26908b3ecdc1a4f230103e5561053e7e3f40a05355a334bf7b3a9974409e9d190a7229fec4fe651c36ce4f67cc36b8ac0ab802d0c6ba4cbc10f2db5d8060ffa81ca5465bd36875bc2f3d64adca2c4995622933f364100cf12d0fcdb1422dfcc67bc0ce4f46e4c31fe5f2ee8e88fff955b6e4f9d2123239350a457975c55ad438e3353dc9b28d97bc84c9c165ad9165f786cb38ffecaed425c32ff1f69020d29aed5a9f9307bc6985ae11e181cf1421941687d5276300c40dde40a246171128f8135cea55ecd9877248021b05eb5242fe59e0f562fa8b4192592c24b97bc9d18b15ec8013cb340a386c3d69d2cef266c870f2450a183432b501bedb6ae4a50756639f26067829164a684dea50949f582467500c56f268452515e965ded899a45cd7759e9208e6bdde4b62b98bdf7d26f650af3a882b3ca27e1f279e62e18d44cfa8485fca5cbee289d6816d73d4ab462012fd67bc1e37f719da385945f8765cb38b6e932660cc70c8ad7de0d50d72dc05f20b1c7b5ebdcffc706e7ddadce3aeef570d614af90050d1745546da5c4747b1d8bc376bf16b116e39d267c0a052b94ae5c577c8ef831890bb955a707a842708e90725559214eb14446cfcbb9720594b13e4c2b62c6e7b202db0053ecc2808fd1f14ec3f38d2b52653954256c882639514d281126d6b41530dfc54161ffd8ad3ad1b8556eef4af0ed6c31b0fe54f2c2e84353ca44e166b2a482e735df550cb598e438239dd901e802ebee1cfa437949113560615f03962b15b961b47de0570fc798585672f2a1f5b2ebe8a9744e123f201b01120a517eb12faeb77162f3460ae891e6a658551b90643296c8bd31148fab205b02378fe86c0cbe5bfb898da32ef15a80fa4ea8b0be84a13637788d33aa7671c79e82d40acea2da2cf7ae632cebd2bb940d3b0cb43310283aba922a036b4214540b7e42e2f51e7e6485336c7a995071a42594cb8e7eff288f897fe23ecc8b0091573792f6b0052ba54c101f84d0f8adfb7d8a96fe798cbba046d3f9d27d352be85b7bc8129d438f4ce763be0800282e83d4a93ecd3ba9fa224f346b75b9074b860136b0bb8c5d1f16373b7f8f4bc620d68d52d6a4a9b92bd2bada014047f52dafda25e6932ba214b10259b42e39b8114149df0f766c17d828ca3bf0806c58518e78b7a3b8be7bfaa3527345fdfdf5b894d9b61fb577820c9aa47a4b7e49f132ebd67d381285dd0ada440b2552dae6d5c731c7398782d84ed7e4f1538a1796bd5e3858fcf574cf4933e6e26f72fded07ef9365f513022f71570b25c944ffa2953840ed11e912f842ec5db1d73bc153102221604110dc9a3083cee4160c54b8a848b7b1cb89a50e6f5c4445f2014dfe2a51c75a9cf24e0a66f1a952b9524df3f09111787cb0fdd989ba2ade80e4ea7f6d9dc5ce85404455e8d9c2f8b965ccc3e68d381731eb5294fa16f3418598cd046ef18747b3ee4083366aff6d391368e8f4ce8b06fbb54bf683f3f1544d77595064630227a06bd2ef40f2dd4cab36e386105ad37b10ae5ce8a340cfb4aaac4efa95cded19215fcb93578e778121a56e10ae8b93716662cde30163e7bf286ba221208e8ce47c1891bb59f81458dfe4ba754b96082f771970367bad81a4be72bc7055893b07e21d162825581bedec2e9a21d442f3ef3eebd4042a12b582b298587520c0e8ad1faa92752ee019379d4283db1bbcfb40fa9772ddd3169a24b09a596a8e4524329dc810809390c9d18cc3c17171388db1767d9f72e7ab5a88765238cefb5de79a0744fd9d152a347c1fa61841f0884bf6b6e4ccdb6fd47a77fb8d817bbb8acdd61d09d53310914fca4852a519ea868c2e4f33f899246ff477e1efe2931199d76c84ed26ed284ebf4afa60ac298a0497a9744e4ef94ad48872db2c7ce642658e768ba35835294ffb6c05dd84f19f15881bb0becb7823508acbf845baf6212b4224fffa1077e20fb4bcb07f213a5e2fff99b330b2176fff9fff63fcb1546d1022c70f3d4df2e6bd6bd45b8057b320dc2f42b13f917f9db86228b13e9b64057beef93bac3abf0a28e26900eac34932504585a5b58f5dc6472ed5e6f0be0af4cec7e0cdb66cfba6306f180c1cd7f72232c7a75bafae9bdc64dd5c7b11a52da7d2392dcc517f20ded43314425a75be04038a1aa8c2bedaa73ec91178413f000d7dcc1c82c78ef4fd7e33151698a202a7be1a3f18fdcd5e11e9f8382c87f5c321addafb2e15887167a0909cbdf22a06ba6af344e6f0b1a43d56eca66d6bb57e423e47bc3a5ba11f5650d70c688e81148332489623b648083958a512a2a1f2b04f8919fdff3b1142b165e8f186d90e2012b8a88932e5c4a15702fd1b5c05818d95b4df51cf6517ff215c20cb8a615e5ba88bc329e404734cdc431a0ec004896e0d7beae6a0f5b91ec17990372ca6d7e3ecefbd0e5923654a4760bd55d3f357e1b0b54c90243988e7aee48c69c04d1e1d3e8813c4415a1221151c1a96e4c7e6034b4e0d31ac51fd54e083f6226c60a1bfc652ddcd2e690a29374c7b6feecfb6b38d15a24c0ff341cec9f8e041c4802a718ddc86f7011d038bd00b2a8c4fd3b18ecca95b578278a2453f5cd424e483adbe7fe18c7fb0178c97b00be22b3c8550708f1a8eef4ce45c2315fc03040b0b2884f0b0aaece11bf42f3563b75b6daeadff304f1a8f9c34fee775e49d59b9ad3b855fc76a089df41acadc3461816a970ed09e7d31607d98fcc0121d06b20e7e65dd0f894303760009a616a08fc635d599fa91dee20f369d3651d252f03f79e7658ae1fa13b8d4c90845ed6c6363e6772cee69a952c61769189b628b0e8f2677260cb6268171bb17d91bc35879c24cd1d5f348b76539de6c936b2912514b38b95eca3807cb83520ea6e2e9de92972c562bd07e7b5520ee077b4695f9ffc28883fcb73e59595126a04dc08bac872cdd5ebf3416bec31ac07c67758d8a4030e76ff9a4c3c4bad2f5b662f932a9bba3a85c4636237f5ebecb14eb9abebd05017e46fa771cb5a3c38fdaa63d0769abddb3f1715a216983b18d1fc158d1987392935f5fbe17a6ae0db6c3f08a93cbf432518147bb66d7a259e264f483730cb3bbd5d8bd0265b49a3f1774c47e78833d7134e458f37ba7627f06395f5a67c8ac568145882e9ca0f292183d77b1de4101fe8258f936f015eae9ccce813ab243621ea1ce253e64c8669d174ab0bc0cd4d5ae4eae4291d3d81063650101834cb6d5f63015127b6395a0edb7649a3e2551b3791b3bece93a9a148e038842611e559400b4ec676375360c55d16d4e19d0646c3171d0ed755cd98257a33ca2910e0e25aebfca5daa0d233642e08c2657140c223425f28378d52019fd0a55b73a0692fa1f434617e0c0e4a48c5e56d2227e8406c821b8e7269e33e7989cbdd9d7fa82e3246dc317c47ce606109697eef03e2c6c5ba7da00b9ed1b312e4a9273c1b5d8c8fa045030864424241d559d9b43b378af41c689236f14d304f6b1c8e07474460c8701a5f2c87856896861092851028e975f2f3a5abb1a59ae230056387b51d119798311151b2a4aff0c08e2ca9bf831d637e48358fe41c62185065e4a024f32cf395777f900bffbee251d9e1c385d4236aab9ccc0f6057d780f60b10e02ddd5645c5bdd4c67610d9f13386ffbdad26c81fad8b68af1b40f62d64a5ae7986c7f3052244f20f7867f7bd64325f6df98f9e2010f5e322e7d87c853b9a205f7c7d1b1b5edcbb5161ca613e6e1d41d934cf86b04d0ec7fc58b3d9089cecc6ad52c7d58c45b002bf76d236464c72f0a6559d7e6cc70658e11b36596006dd4b9037834c8be73e8353b2269f5b5a65766a7977c9d4473e98865c43c4b4506448bcd6d0bffd79716460d58146f3c24fca52c8fa1a25730dfa5ca394d42faac20eeef64df3d1e57ed4758b69e9af553c0a116e4ada417590b19a38796b6c9a210ce8ba9cf7a84bdf70a6a130babee544d411fd47e29fcb499a4544f2c60504d6dacdeae04df864f81bdb0112a9d4d3aac2f729697a19a04d4df39bdadcdadcca315fc1f45a538661acc3c6232f25d5d39f15042991276df67d803ed2115de0ea013590cf92fd617f8c4c074189b5122f0c5771773b520642075257a42b00160f0d9557684f1c853c0b50040495010657369510e723cf828e0b99eac4d78829371e37f65ea4019c5fb2bae54ef5a16417f0aff98ace99edc6cf03f8d3686ebe173fbbd5fa6f8b22dfb2b71ba90ca4953e033f06d32c3777ac2b3a38a73b58337faa391bdbf81c4050ccd03634ca9a93fa211e3c99770637e8c98359d19e394932743db0784d04bc898c26423856cef6dc88f45e134b98f3d49aaec1e9d427dd19513a5636d019d1c63150a44225a75241e6effb5a703d8e9a89840d1d12b4638e944a00e679c05b9464f98ab2a95c0aa98b68e3d63a8213d113515023e0d6d2234dcc88c3939d163ea70c9f63c3e3f8f03105861fb11496ba6c8b1981bb70bf8be7dbaa5bad541c0d6b543790dbb8b99104e7a305187c6b7ec63138394d564b8058c6f3b86aa4b728c457c602cef514ebd029fa78113fa52ba20190a8c793273f7a0cd261177ad129d9f6b3b9439d43379617445f5f38cb3763ce01d860bf45886e4c07dd2e2ffe94c7bc873f5b05983fc31562c72b03ee6b9e43961b5ac0759bfba0afd2ee9e0ce84aa10820feb72e53d5ef2dd0418496e44c24160a43cab641ee628d4d5004ab823d6e4c44a2bafd16b524cd872b6def477fc2597dbf020e7ba4b8fcae29cfc7013e8eea0cb21525839b92649c25d1eae1ce5f39644b133b175729c3c29fcc337ed6b9bf19690f7d75a421bd12bda935bc4a9cd2ca7889323cd772407d5daef0689fca7c961c154a514b3477f974061a281aea99a240743b0020dbd8af3a3b28853e7a8c1f151527cdc01932dab3fa9b8c2cf875f6a17ade213d28ecb9266012cd3bbd545048168d3cd4b50bcb1ea9e711816f64d2e4676da9ce787de96d6691aa3408c5a5461230d8c43e47aded2f2ec7f290e511afacc1e1c70c4e82955257484cfbf95eba809c8638b1973400bc98bd17e27a4a829e39439be0cf646190b2143d12fcbb2f9fa53ef61e4a65f0ebc568159749cca1551a6aa49b05c8bd8f18e7ee058ecaffec2fb0361870a83090e4c432a78bc03e07b18c7c2e82ec530ecef24088a181ebc7a63a503ecbb6a081628ddd624ae124123450e73490922ea693a66b36392630687f26bf4984c6fca1e9a480ff7b86b8361f9335ca770d8656d9514c358abcef6fc3aaace1f014dcc6427422c33d3a2474c0b63c5983274463f41c1b9ba4c6e944d97a11e7c5a8fccab0c477ccd8ee86c69b76a6344f89d143cfab0394aa9e2b35686f7bc7107d5aa496655e6c2e8e6104497625a14cb934d99320f57fadefa8665452eadbef81b12112563283e8028392a574b8e7366c015a1c38be3c6046453fce33bc26f90d1909d108342ba843f9f1af773f20f811f2d9ebc571cb457199d02af7b4f37c67f916e1cd6de5f3385d4600324e5abd214ed6ae832070abf644f2de04188c72d5f271a4bcb712e1ebdd6fabe6288b8afbdb01036e22d6ce1a7068f85cc12ae81d412c7502c4425241e80b0649432982eaf56e09f5dcd04849fdf8f238de0849e9f99df5d53b2d6e767f8903d6918691ea2f857046b8bcfc409134b24b1b7801bd38018e2c63df39d52aabf6640d96e9e16343accee729b9dc3f319769147d1223da715c8e7de8914ee47db4a7ed2c451803045b6f31702111b0d5540e557cd0c716a852a43ea6b069f4772865b7941abe5f167852c6a54c95b387d060311043b4e6911080614a2140e07fa2e1e95e4a1a38fe554ddf7034b3d59064e8323de08d53fabc7f6df3681e1d7e8b5ff050e95e2698ad018c4f5995c69cf6885d1837c6653b2d4071e0fb69653051537968fc40e4fa6af9771f57ec977e668870c0e00560008d5a10546aaf23c506c8101fee2e26a034a3870e698c095d85566aac6d640ca7623f9b990fc23e94ac7c78101259b26e6b07a1343c9f5914e1a5be7f17f7ef8cae503a01dc6601503369e68e50ab8663198f44e9702c5a35f5c1842ffdea338e2f60ead30d5fe6ea0366da0b04b3ac5b9e2155182dde297bc062ad3b9cd93af27c57254874bacc6b2ed4799e196a2400e0fc0f9a7598cb9d73f46261fb7199cd25e4ae5920771d0e72d7cdfafff24808052623569cfa78453c4d5162d19160ea0e3c484b4d858666493c06e84584415448fc0c21d2e18e211ebbc45153b4458b0a1263af6aec2c04f9436ac8372cdc999a5ac423c30c9c19b199cd59702694e6c292c5e3aaafd043bf586c2dff5c808aff2c9e87ab67412d7c04c074c59254176d662b721def2a4e1827f1e9a45a56907de239fbc4c213eaa7b05cf829a70388322b4acba92e0ff6b33148d2bdb395f96eca08622a1dc968871eb6ccdd702e97529faa6714c094bfa11ed733fda72acc488987a7d613c42b55ce08aa9a7f25b543165f1a81790ff85a30535f80ab810cdaffa5e330dbf457c07f91b2dfffd9359bfcfaed561f5b19c82ace82617604aa9c155a00469fbf96d46ea248de87236b1ef96695267fffdb20a1e9b0b83eafbb4830cf228c472203d3b811d6a57e912ca61602092a295e87294627ea41358a4d5c77620add78f6222f3b789e68a8b97ab49ac0f43ac6b32341716551a82d669f221c15d449ed4a154570a2a86e426ca9a6b2c1ad9b0fc773ed5ac4cdc2c555c877d0e9d4059de89bd85a100f7d062cedda0b00914e8b78864f80d11eff7da9b07a45583bb984c698dc47b9d61e116aa9707ac524bf9c61ccce358f0ba06ab9a6c40b04e44ecaa2484d53b16c6793ee70cfc52fcc4fc3e660c77ed4ca56eea81554832b3d549822076293abdef439924a0cafb1cf8cc572d31c6dd0303405d286f9770e5c049b98f8b1268b55bb4d6b2766f8581b8ecda287f880a0f510ae1a11294ad0d5846f492f8fb67eafa412b8548fe94f445d0aadafc971436cbd894d9ca99ad9ec9a9ae1e6fdde976945caaa7a55b77f8f008b85ae1bef1a5f2d1023f45bd5811c020147046efdaab675e37d97756078505d7b53bd582f57cda49557f753a5adb200c6a2ef28848285d413ccadaca274529551a96c394503a5f84d0a19257842d913a9a69e54d5f66cf526f9f2e123eecda24a7a677c163dfd5cb973cdee07922ca101e1a6f08192a53031625b9acdfd851dd535a96b3d0ec2526495e5d5896c3535b1423dd3364e8ddef20a5addad9af52e8e6c6aece35b2312608ef9f52b6e1cac1477b8b2d4882347c9ce4793c7389f696022959a009b49657d6591ffe6ca89ce068a8ad988d3c6936734a6f8446b76d0ab70958eea7b04d2552d874332109984c4c42047640fd4d90c1fa571bab8248b73a3fc97ec2b511a3f751a6bdc2cab4d75186ede365bd0d259deae695d905272e0211a5aa2541293915f55aafa2c6cce3be73e8a107543bbdba9153c19ac167629b30c331900d9f6d539b2adc1ff6047dc6c3abf079dd2d664dec324f67b5ff0d4bbfd86867bfa3bc1cb973eed1b99a1c241d66bada4f1487789131172e4facafd0a69902bdef456ba6e77949a02f0b1141e008dd2835c9c4827abbc46fc10646c18f48da4e667974b0cfe42b4d2f12da6c9a85d98b4867730298f8049156d540c61f13b129e0cee60bd46fb9f3aa1a7c365d438f302de0f1ac944894dd5e02329f9478aada1f0c366f3004d0a3f0a5ac452380a9dc22125476ac4c8c882e34478cfee4c864819ac21d784a2ff4272239b268d702cf49828a460dcda451f05730701f4e9f6196a1adf48d9814d86ff5a85d1100d12884121a6cbaa058f3cc0e8d42c25cafc3e94a4d6b8a436a56248ac525b1f63747da9c5d463e71ddbbd7319128cbeea8f2265419aea040f4638a9a9350d236768011ba708b1b2d4f97750081b6ad12d53b7604c6b876018b7b76e30ed2e5aacae94f6585896ef09712e713fc79414fc50a3367680cfb3ba353c6984a7394c80059a5bcb49160873dba9371addba761c409d2e9c0cf4a079b5ce0372c027c618b155891d68eab21d9fbd4838ea86aca628b86750981e79766d1a39b4562a557e283dee8a71cf6449843f82e0703569c46f11bda45d46aaad1a207d28594a4b665ccb4cddf8561108d29bb09be0432a39831214a100265654be027493d8e998e4ff0de2ea4ed13458e609cb7b58b9cbfdfa97b6f65ab5f4b2ce1512d8a41a947ae6e30789e8ff7275971a449b39e7f0bb8e6b7fe7fae02c3975236830f72d016535eab69295d75fc23431e2452b8c5e0fc30979572b5ca901bab30ad904406aaa1b0a40bfd1f2d7fd9f3a911406b16c77fb8fe42caca25599dfe5a5937c158a74b1ad4805e8ba5a62ab1401d7722ee3924680884eec015035780451693628508aec7eecfc1b204a11556bd1d6d2cf701c4160d96e944500a1951c490552814eed6f11af9c529a4f3aed0c4c095c04a0fecd406f8a1f11200f741eb66dc4ffe57da08ea3598be3e807e8824c9cfe5ace0b07f76306054a401167bbbd16bc8d205eb379171d8718891445ee16cceacd621e08a16121553deb465a445f7af32663edbcae554504752dde6e66e1ea55215180b3ee9f3f3db2552f0206183c92d45060ee3f970451fb1de3e49c90f8bb7ef9ea5d902a21677eacacc6994d8a15d3d0b401ad8fec811efa4076751d47b721606ac09421e04a901fac28f6b93683b51c4532859ebf0657914fb440889a069c9b0800f3699d6c508820097def765c9a1aca0a532343a3ea17142953ff2ec63b518c2c5f9816b80a1a0c844daba36ca488ca778459b3f3c6988c1471aeba004467d1101f9476291600a3689b4346de7f9d6664d01cdb86217f7a98e71823bc1390cba165f32a2d8fc7190d59bb54a9584a4b05cfb04d964288d6e2440b93fe740b6e55a51481888cf0308bfb590ac80dabfba772a8f58bb2f58acc47ce050f1ea8cff42a3238167aa0591500281354b52e53f9b09e90a75a9a42c0488258191bcabb7359aa63cd4f1dc9d4c81b62e229f3fbe7503c4d61f181a26e5a9a65bb1cc13a9e4e9951aff9306c79922d95ae7207849dd4c36e28a77fe22eab8c561197421e9e8dc91204ffed15ded7b10ab721985926f6e298b28f67d1c16f1bea8054a4e10260a61b7fa29fda7c12453e91fd43a11d3e97833cd97d47d5a18a904d2a25dd685a3b3c49c82fa31b564b97e63617a90a68fe33cd719c453b85ebcdb5dceeaa54e94d0f2cd1872eea2e6c39403ed1b60700e5b2f2ee800257ac6b9aead4e25910f5759066e8e069111225361a0aed4a7ce80077a518464e9409885829c8578a9b4790773fc874607aec87749a9494b4f4a4d4d4c4267665dde511f81c81403497c438b278017ed59852c1fe77165c8b0bb5bd9208231ea3a0a0418408a1fc9c9b0e641019a83c58ef251f61f7870595873db3fd878414736c20d98ea382c6c0c4d932d1df505f8e206ef1d76f3a68d64af3938c7cd5662f145ebba9805d0a3c81de43bd9269bd52770167275a8dac80cb7d43027b604c03adfa6addf275bce9401dbc7362337649bf57618bb889a5edf60dcf8df25021668db1554d9fbd44b5f565e6041ea93a5fb1eb3c366fa0220dda396bc585bd1defcf6bf77720c5f80ba9e37d28ca2f9d049e6797e3bb1612b51176a7fb51514f32b682b2e8647518a2d596ec0381cf5036457cf4e80af43f8e50fce5cf463bc13310d5ac5822909e4080548405d3a6e86ea36793ccc393670c20ba02969fc5e2a127f30e03886dcaf02f5272b023821701bf693702d82cde7b12c5705869470ff6ed97361ac2f0000c6d8638cf75e7d20068e2062c088438d4825a520940dfe4ecbbf1d0ed7898886f45ed9db5c118b6bb14ad6bc0b950ada965e18faa9fc93b8e6aa324fce456547f50d0e78c27f21dd284e238114519c3c98107139b6eb8b7efc7003929c964373b3eea6a4e92c03ff882dbc40da81fb904c41cb1a1d380f0821ed1b313328bf39670a7c53945657f4a8bb1baf9b17f4a36cb13201c1fdb4a08d0cf282d7dd86aae06d5be96ed0435d9669c86ebec3410b30fcf2c21541b1471daa8a7a0d748f5796d21ca2719f496feb99a50cd923c03d16edd820088254855ea85eae35308e0bc2f6a74acba463399185655ad42b7ffbe0117e7de1d2c1e684a0a22f1e110380e809a9f67de4c7394a2eff61a3a0bfd1da5d6a82aa596f3835b283ffe9a81781a23b5dd62c4fc592ebf01474948987343587a517c9c4eab2232cbee27dbf1a87f1cac2862e30c94e654c46f0fb5e5218f17685c98353897e4e4571576c0e83213f740a4a8792eff1779857bd86a884022567f6cb18780d58248b767f4b6615446f0d6ffc03fad6ff7786f8f134bbefbd1007c53dcffd37be12dfd9c5f7a8b42bde13b13630918b8ae4fee32516992c5acc9e1e11d3f20457fd6c5948b8eb6a03ee411803b5dda8b7ccc476803b4b04c5fa555cfb614c8f1a41d387f78c8dd56102645b1c037606efe1ccd62294bf478f36eac8957734d124ed00eb89e3727317470773506923bf2676ea024a363d4c8c012d23525d7f434db08b4065f45a7dc37bd1e950200fa29e14d9c425f700a3410bb740dfb77803e66f980dcdcb7cf98d289fb56a82d7c0d877098ec43346d1bf2b184f0181fa32461e040edaa7e04b06852307d3cc85da0a074925568e7e0f6210a66d03d08201ce2e7b7b2e3ed01c8e59b933a88ca31e8e369553565a1386f69e4d89e45a1db3bd0be08ff69f83ed0f262906da2aca9beb73e8496cfa4affa7b97f6ce08022fc43d1b669f3426bc5f5f7c8cdddc5df28241503f4d0e0dbd127ccbb05b924cf840395cfca0ea7070ce90ccd87d6080cce8e56c6e25c2936863775b8b1bdb092169e31edcad086f3615efaccbca4ec891932ba1d8e0fe3767d6a0a7b71666ec008060fad38643000c0013e2d8dbd4c48a8ed1d97135cb0163daeb9f047b4e1ad7b72ad4784e14743946388ed9f27f8690faeee5a7a5b6ba1d1944105744a4381436de574b4d4f0b97dee9b08a703069366d129a6f56112d34cd07e141261ea4a6f7bed205c45845aa9fb6e6a771d3240bf489ab05645ce814cb9f289e04b93c6f66826a9aa5e09cf2f23c7d2967daca630ad500e6f2e4495924417261eced4dfb4b1bdb637d871e3260f8194ce42764798d571b7afd2bbff0d12473987189e0a9e672e53a3db44be2e339275ce51e1354c1b646981c69e8b26b00bdae24f50b3a969054f1c626232ae26ac7e144e65dc65768432b21fff8439ea77f7d171982d9de768007147120c09ad7de0559db2bc6cde6365769dcc01431c802f5eab67cbb6b57bb7ee9a9802030fcca75f2e59c3d1eac0a0c96718b4bbd5c3897233b457cc0268ead0b4009f1420a6463f1d288f8e29a82bc6b979ac58ea12e80175397df21f650342c9ea3b72633c3ba58556b56553195f8aa522d0bb5090c38a85d7aa236e2b2dde093dbca5a68b1dee1932261e61b1b2906f33d4d3c80640000dea09ba35f637ec885c9df566d6a97df47b2cdc14e806dfa5d024ee7819193e5accb4cd2864a82801672d997a9ad7f2e6e4f39a75debcbf3ad1458fa20b0c0a11867b5ba59d928cb5fbb60ae7ad9c23fd6f596e3879016bb1371a55384c3ad5d8f0153a708ba2a3372e3d56d972ebe70cadae7695dc94962264ee0db15da65dfabbf54c9ccda0bc84000d7cdcb3c08b3d635bdbfc07fb97a8bec1af14502cdbc087b40c1edaad601021b202ea2f4c411e4821d5dae4d4959dcca228ff1a63605b50b3e67119457611447261957e4c55204aea2c2b2d4290cf06f3a268759e33b81bf31382018bdc4d020977524c78168b0f131f75b7736ed8170d31d9cfcb841d0c582afe93f670de8e3f4c125237d62f8c3cd75589bf831e3374d89a7b4509a50cc62b56866b43f51e2d43922ac3d92e4f614eb8c36a380409f470dcdf0d9aaa488d4e5f9aed0963e0efc179445959357d122829dad610c1a0029897b1a5f4bc8f55bb371f4a6bb090c360653808d5a2312189895a79972da32b09807b3462c10742bc4f941aa48d24e55884a667250d9044f2a8e46219f901261190cba15778a0abeb2e52e4aafa62088c07e2663f56133bce921cca89f300a1d3ec6742e9f986c89c053e4604931e5b1664ddf004e57a19658c5223d5ca0d49e5456e22a4cebfb130372685568f63eb34056003faf5b812cbd704507b396b15b85665f8657f9649339f2ea95ab9eec7b24926d9af5338907479275b0f716c0aeb79349b767d7a51dabace3bf8dc6f346b286972e44fe29cef34dace177daac58e6e084b3f80a83a3ae0407c5db6a23680c32f2076835adc09659af188fdf8fe295701e97249e623e3e852fb131c1ea88d39063af6a06241ffba9bbaff37759256f5122ad68067a10915c8f665d561ee2752e1e390f598f71bf8b6a84721f3a2ce102c7c5403caba0f6c42e8236245f06ada87a175c8cb799ea2ff612cc224f4f53277dcb00fd404470912603caa5e0992db512d2290609f2117b7a962e1430745215cf00d6597ea3e772050a651b4100b61644ba99effd24aee10746a6369326a297ca7737d7d8108bf40bcb6e76d07dd7e83e07bca68436433b087d4595dce42d8737a5f7175c325ef5daa4f5894f9425cb55bef81084dc0d938d0672dfce24f74c02a0ed240c5cf447cc9b88e7b9eb40da7cdf292909d18744eef49ba85c4a79ac61c4323c20650c64d3be27740b83bdfa9ef43276d32373724348969327fd3bdb60d5c21e6274a27f214eefb453fbacef3f4b3e1477c713a94bc1dfb58772a5c6639fe1c9b4efae92b746e4c80380176faddb2242fb0b675e0d3d694dd9a994391c9df0b5a9a1351429643b78495df679ed340a012f2d903c8356d3aabf99069046934ffd4cb021fd213dc49f59b06dab4cf0c5cc8f90043956b9c1d582cf4dd695de9e16296885d18b66d452c0d57f695726a7d00c0e5f93473ebdb34406b3c6207472a00278a04966b18001b1b099c87e296435b162ac8e08550edbeddc72ee63417ebfb55f37baf20e4b99c6ed6c6fbfddfac0e0a5aef140ecbef3277bc43a032e226c4ba1764b29b135de3398e08845a1511af099b112ac9ef07a13fba989e4898c03d2423d51bd11d284c04233ea3ba5310628e24b73811d1adb1d9f8bc68db8d8968437fe85eb5b90e738c0a5c5634c211a471679c4969a2955cc293c95dd0df4024e64282ba80cef5f832b16a27483e3a72b98a0f7b70d677e9f162bddf8b32e53c9992cf18e94616229724a10f4c7276aacffc0104baf088bd7a44541927c7fd4b1fe513b1200ba692ab8b10921a837d26449de41dd179cfd840769d0fa3b4eb6e272352f400e9d31c583d55e96efba03db942ba713eb677ab0c91ce829fe3db49d00176d52f6d0cde6c1b604b27c57d3de580f81d385f77da3be465b029f5bbe55b022b242d66dc8999071ed241a738523e04ad7c962cd5c303833d7d7017e6cf4f82ed9007fa6d7f18334863336d8ade409ce4ef9d25e516160cc370d5a588125ef3caaa76137aaff163c6ac162914f59a0e562980c058dc6292e1a23f853d8c0985d4f70986d608cd34cb3a3bee05b06382b3498262d814af93f69a01b356245e404c4f178d12d7535f98a98f4e9e97097a84192466acafe638e5478312f59b34f51ae8b8a12d1030f2ef9eba9be9ea013d32423caaff38e4e670caa634e29cd46c41e02ef53501e2be56242ae82eb3746a18b6e5d27f8a2fd404ad18c74dd342e9f75c0c50711824defcd071158ec5ef7c3f1f5ea4e787bcf7c7ba1e3c6f85987c83fe463896e6e967f60cd102265e89ea3228c4423e8c627800eb4052eb55729b2298a422cfe043a45ca4f7eb79feb0c3c8b40cb26497d44ac4976375f95c8b443c228487f34cae8c7f1b005b9e3e82c6033af0e8a9fe8ce08b03f9e905f7e922f5687e7f7f8b403bd0e20de4caf03d5138c3e64dd5486e99565e6be6f4ad0c8de1597d4ae2ee8445a84110341551f00cba1bcecf39708d39f478a99192fe4182c89edc2a08955b4201e252520894043d88392d46d494ea2855ddccd285542320f4d0b36ef0d4fd10d9f5283d2b1b007d882b23007d355d464a25774619e060e91389c4752dc599077c898cca43da84f0228ca4ae05deb6186cfeb55d131b00cf678433aff37daca17f616d9798684151ef06b5651dd21f00088cedd8f6c42dd60da2fae1d57361627df2882fb3e05b5be0764d7d412a7cd5d941acc7f91fe2e38a6c65e75bc90d436934871779743838d42221c9531fdc38a2394539e0a6388ac994bbbf76d612fad7219ef2b0bf17491808e1897948a8598753adf50309436d7fe7b2cfdc2c6d0152647a0dfffcb356c04537359f09089ef3fd89380dc7344f1c0490a0d00511d0216591daecdb37f5ca5112a4fdef3c0598c69d83035b8700867b1c89b57203433b919519a0b5c7fb490655f609d028abb58f749edf4e6187213671ee1d2c0e15d486a8cebeb9a76ffd179e58a93d2ea67499eb03ce88246bc6001e9132198b0505b507cd31e4826c8f0be7dd6f6536cf8ae412a01583504946ebf0ae08fabd57035df339b6f1f964f28b5da4e191c3df90f12e058f4f55f71a09cd5325861c02a044445b1cc057bfcd402c766a00e088cf0c21b8c8b446afb610135f654dce2324d1056e9fc48c971720c11b48c7a9eb6d250d87498a11f8f54628aa60f96d928c06f708601a402f08c809c03fa70e3b6d33453c1cbc38c05d0436993847bdce8c4dc68cd6d421dd91b8362a6597405384485bfdf1f57699adcaaadecb76260426ff23203df3537c5a879c33342dbeac054bad0cbca4adf7d0cb4bdc45502fca3d4ea999b12fe997b9ed44c2a927a5b157dd70d03fa650d6682a47ee66ae781781b692b9c7d6f4dcf986391fed191ab1c6ac74e0aa4049402781f8b39095c051064449ea7476d8f744500ca7528cf618bfa519912dcf7f3c95eb4afd34ec722a3524a9ed15d7eeeb6be540db540df4a163abd60d44d1e00da632fd293d7db0df2096f91628465cff3578b2210172782b3e3519dbaf2b2e1bc9c9c5a1877af52322eca813dba8a3c69d5d7b92933151d6568e70a82f6ef566c1c33122084cb7ed019debf3481646a8a37a76f33cc3a0cd078379986ac08047962fa31c7e07f048b0f3d51c01f7d4d60dc092a491eae54d77a466152344954d3fce88a11d7846a46d6a632b2b19d2c79d1d3a256e2fb6a4bb7911942c427d13144214607e978d84b87ee74e847b1835632f606caea095b44ac0ba337af409e21b11ee816d6f0f44ccc541189d9f9b89f01395011bc60dc2e168202e91ac2d310c5b5d9c35ecb31ac083b0d99e64eb00d0b5a075a4069426e0c2d2c9ac1528fac896b490216bad77aadb1fe577fda01c7157ca9aeb05627c34fa8d2858f2baa4af20185d2f19f0aab7ed3bb47a49ab889e39a5987b9cc90408e0eb039f0e0cfd7d126c1809af7417305d6be72c67c35f316a7ef7f8389f70c02d5a10b2529fe0c7d9083e11a696f1f68f1a5fd16b90ede5b6a47d68262534d3dcc1b11732a70ce8d8f0251fc4e871beb31eece9837f6bbca8d1a7a5a6ce06e0489240f7f1ad5bea3baaa27d5e0a174bd26cd4cc60d0ba7dddfe31e16073a19069233a33490573952d9e2db6efc6e48102973c45931f75ba512f2370d4295739636fe3770311c388faf69661b0635707e3886597a201f10f1d478d6d714c71b2150368e8d961b49b1a45610de83c4faf4cb996d40b85d9c1268dc782d94173b178b4814643d6e3e12d62af377827e655caa8790e9738df7325bbc1a27a0716818d2f440f6d2d420feed22d863e705b4ef73024026b1083ddc08d8b7ae0448cbfb488faf872a708bb0c9787d194bf942ba960ce1b00b4ec6259f63cf5d9394f6d4eff0932ed19f2731c577aca627d1ba5918dd5634c715cdcb737e9ec47d294fe1f798e11b7dc0b7803fcdac879b895b2efc6110bf8f045f06a5400f036e91b489fdc25af902002c51acdce613e7e1fa97bbfba1b629c09264f751d522b6cfca4f46b12b3b4ecf1e435b36d55e460212ae3506dedef90fac6518fcaf885e3878760887cc1272f6607c8f121420116242f14428a4c77e9fdb86f126286ce0a817e62eb715c21c509413e2205c3c9b339710645231acfee6802a0e186c2e66971eb16579c3737aa3c3773b872946643997681d390c832c54555716ba66a088e90a2a095d5920c810b7ad3e72ade34d124a6d4d948b2659f9b4b4507e21f077314065cb29bb98dd4e5c725e808d5ca6554e7ea83885b0b95071cb11edd6a49d9462988954c62e32cfe35cfa1b26b4812b3e699fca8b129bf0e01fbd1f5162f292d9a14bf7d79e8724e4e07f47753e9e17251155b1d2a13768d601fbf66c4f6e1fc9b4f81d7723be766394921b9cd880956f42ec89b7fbe1189637dfdf21906ecc888e2908d484af9fee3d1aa3c04a0461e1caf234ca8cb36665f5ea32f8819da47007a1571fdb783c65b7e3fffc920670add9f685e0a6aefffd672c2b2e6ae5b4bc746b4db2a8ad7db700b10b793ad1c2c89037c95fd45497d305c19583ba304d892888fe1de0c8752303b13f7fd785c3305f098141dacdefa0decb2d544c685eaceed8f49626f6d837f741025c01d73a0109ca2a3cfe0596f390f75f2c8924a50709471c5c2d38a0ee3f5702e45137141e8f0e7fa459ad73fdee67ad4f2e20836ece7045d4b02bf89c293b291877f80d35e4f3f6beceeede14d721885ade789990d665f15072ed9a02fefce30f16f32f8658625a0f1490cfc6f99a93aef0a6111250ecc515d8eae116c901492e63c14924314b831b929091142c05aea9d58ee1053c5979944abebc3367e01ad9a975d787fb74ceb929a8fcc6c653c51728149d9ea3c30e244208c751e06e97e0136a3aa2c4a9edca208be35f5effabe31ce3e00c39b60f60eae1fdf454d893a38122038b645aacb1e985da74105e581bcc3545e31b6ce0a81238a79645a30d2006f94ad82f8d8fc43e24930e88c365341c43a43d36bcda4213f6ea648cf7982cad0fb301c4d40caa3674919435a921642805e71e0df6eb454d050370e8b4368d5fc625679baea9cc11537317d475f5f519023764ecaacc64de3f5d884fb9d1d87cbca281c64b44074a827c0281b3eb64b0b32d0bda0690623352804cfd9696d2051c7356bc2e07d36742486624da7ee5bb79815f5dbab931006b92453bb0c3935e2481f62a813260c96b15f286590c8ca773b057e566d85f5a548e3b05b81fddf5c9c0f68ac227b614db2365a613730666623c929669c15519f2126979db002b4a13455d8bf1eeb83694eeb844c804c58795f5a0fbd6114d52685b8176ecbb766104af99d875018c12e3c4169e5cb13483135bc334761259f25bf290d4cead72d811d2952cc9cf898f2c09c0e9024e9f02e4b7df9e9eea1616c6ba15f84cbe6b80ee6aa7303e883c35ba6090e2155215bb6f0fcfc6e134e036582bde010c6409a17c1368efda573966b8129e8a70d78723dc789fb3f5bbd3e7d62ef7ea82051c639ab20de675bacd5b6d1a19eb742d417506a069f6f18deea546979ed3650d4cc9629fd0388f5bbc37f07e39fc9b19570f3b0c6acd2a51c411e04d0be62e6c81731ae0431c504900f509faa556ae5207e89e396ed0413a3c9da5f323221919d02f08d49cba57a6bd3f5f410209b1f61dc8cf17448260114e1a4980fc8a3bddc3b3cbde446cfdf2484424da51604b253ef42cb59d2ace6b666d9d4ec5bd12f1815fa82411824fa00c268275140e80bb5566e1a037081c4d31ca1fc78c5a6caec36af1c19a2128f4887c19bb75e380482907d5f1622c584cbe1ecc7e2d32d68e5c0d5b597d1715b0fb718eb11378e40ddade55ed2503dc9aade1999cb8f88aa64eb7478eda12a4c0d76b106f8af90890f41388e495eb31aafa4b29b073b4e6e798ecb38bd942c9303cbd208c660c02550514683b1524f8a16fd06129f099927f19b08645438db9591b8fff0a38d94f59e347783c65ea319ba0ee0d6994667424973e4137b286258d91982b94d131103d27f381f5907bedc3fe5396ced54f2c342b2b980a0750169dd56e94b460e9f54da480a27533a0f40d0e62e153a6917c10f45bfbd84f629e0651e88e1940992bce3c8cf75b0ece2d7e71c01b9450a79ed825784306d10147f7f405e661a6d18343c50c276eb971706de5e1bbd0c4655c6a7f84e9c05bb87ef8a00318492f9820cfbd243bc65f060930ba4ac9d4da0bc9ffe549739639a1195575a34ce8329d93cb380f8691a7a7a733f1400588e3532f0ac0c34cc91f8f912a64587daa346b16cb00d71859ab92ea1301898e4a1a64097912ef181153bedba6d0ebe8eec7b295cc0780e3afa78e7670956aa3335d6c6170657c55eb94987a27e1667e171ce647084857fab72f5d624f54dfcc81d7601d06398a40d9f5151c1d8ee6d5bbd90158b7d0764f2f935998f471358d319b200e7d5ce4cd96a62dbd9d29f11b5b28fa955086a5046f96f3a76541781c6d8821de46c2d3ad9a925a07083b59d6b28b11077bd9dd29ad1699e2ff1dc89006ffecf797f3ad35c5cc52e0d53fb856ff3f4e6164b6d1805f0c1e74d44e4b25c2d1377bd779c58a828c23dd270d98c3add7b6cae8cf46d89ea537486490ccd7b231e4e0606e34c8bb51af3eb303a0162822973d3723e411bef20e16cc8d86db88320f424400b88d8b2d13a530e54e8d862c93799867eb99fda341eb241aa6c541dfb6f280b357354e584a25c12b8e8ef69e3c8423a31a4f89984ccf54a1528d2a0bf8b3654fcc5f14c85a7b9ec917ec40b84dc9260056ec7c817354274dbb660e97b06abc85aefa053c66651dbeb864f84228cdc1a2c487a2b164eade1cb8c2ac2190a563116ea5545046c349d2e60d1f17e7bcb8e06a6da76361855554e284771f03a848cd75788d7526a5cf4273563557aa19e90494ea09d900b942cce1eb279191c7393a2bcdb5e33ae9d3cfac47b8c550f4e5eb59c098e455e08cb5ad00f3dd8f6625f4f25968d57b5eebfeb83d0ab16874484b5a30d061507a6ba5361172f847e18407b2dabeec6cc6ea9881bf0b50663c9b53eaea6926ad442c2653b24500fe508c3f0ccaebdbcc221c192c8d9ab68a0940b01a3705ffe58699e6a82a343157542636c24b259f214966e08533fe2123e2c1c281113455aa09d01b349bc2d4bc8f3b4369793b6725174c51aedac18582442c27e4867ce54b69b77d207afef47742f74c4c0b5b40903132a310935d9c3f617c7de618dce667f0bf2c83c54866f9733db7f90dd8569f780dfc32dbb9e34b9a5a9d5687fa7f52ae32078b9e9e2e52ddf707378f8fa92da991c094ad104ca54c3592044ba81789ee49ee2dddd598d74f4a39d82b6102fc58b380246edf9454f16831bc9b505971d4eadee3c48c3413ab83f611167883c0dd7f75fb07074cab90ba8c44f30e22f9cdc262be28faecf7d0f2a5f64743ab6bb9846ad24badcb4e653e0cee6d945eaea2ca352689d801051362bf989cbae063b175828982823306948c19e8e984c13df901e9fff197282d6b6fc60ce05ed5a7b437522683e11a92d4df4e749383b86b291b540bb11baf8db4e4d025d594e6437334c68ccffad9e9f85048628783e9802042a2f6fc2134981a74d32b3c551a9954c39e0924eef4d4166e13042441b9e66b0b5e194e763bcf79183b5199ee936c67f1cf02b0853c749ef5b340512257320960944d27f549a04f9d00bb928c8e15b90cec22e1e719a57ab98ebddafa3b63735ad5260299d24f4c64fa884c09265328d2e9f20ea6864ed529c0eba4dcb953789a7ba554283d0cdb6f640f16a08a81c9aac4eae14f757c54268c2502c7ddb3c492a39385452316d3174027fe66884008468e41a44f2dc32964c3053dec9321dc4e4ccf2ad45a7ea5900302d5e359fc0ddcba04cc8f72ae901a02593a2a4161803e9eb489a29f8ef325e25c547058b9ddb1d4d169632fd47cd6792ee8dcd024e3f061777f1158762bf4db155f5e181537fe90a9b27c42fb33c8bf624ff10bb83565df8b1aa93c674dfda5c86bde376ad37b96236f248846fd9adc55507a774a0ce9e900ab55c32136a3079bbbdcd65acc09756360d2009a760b44e7362014702595c3ba183d9dc1ccad3cba17fb73bb98fa9ddaac0d2f4ca93020afb5e5d33b4e62348d857eab4c06aaf6f7ea6899cf01292ad843a8b2f473b61c792264ab613f36315f02cd580f237e6e1ee4f2550259d4f484bbbe8f83003acfff012a63e1a4d5d074b80e7803f6be318a3fcb0ff7af279770ada5f4719a7c330edcf71621b11f14039b7ef5d441928b7e8ba3b9e96044e0a43dcee27378f6bd00cf192b3c31c0469b6d50d63569aba61ef11a2f9009adadadca8cb77afa35f830394d8acc8da0c8af50c163a7bc5de8cb1100ba4aed8e60b9e22a8884d81495a2e42a1826552617726520d51780f2bff2109deccb710c37de4650aa06f64cf0d236eb35fd8b398187e2f412f2edd535898a2bc243a7ede1265956f6afc7ad058258afcca2084cf7ab4360d8277c4ab3c9d68a4214e48930306c677ba069e17b3f1bfbe45863020d88fbb8c2a9a02b5a4b71b4944e54e76012bf5d8b84ff461e1332af8d57a60b077c1ce1f9411398b2f22516f671f6fb64b0f8370091636495b1990132c7544333dbc6a595a620e09842008a98f3d16638794232206bc0275679348a0d7b44cc60a747ae2fbe2d2808d8ebbd78fd6186288d8ed537b180acfa5c5b8a620bb73cc9d1e8c566f705629b226dc01fea6a8a6765bf9e766ab9d084d6084862a2d767fba2c52a7f5118a8d1dacf968ab1c55ef82f01592d35438676d74661b77a440c767047241e0322d54481738a5f08973f7f2c9f02cad482c65e7e40d26bac0881a834080d3b9ae3f39f84ddd8f38aadf00faccc8122a674cedd00e805766dc253f67a317c45e89774928f355936f84538b8389868e8670751e725d5c194a94f60f6da0cf0b7c72b32b9b7e870dc60c9a6bfcc5e1e1f3005562bb5eac65a0ccf7394ad9d4405f2a297dd494a48e21b48f51c033eb0923db4d10b51b2043f6e2146ba226cb7c37cb697dd660a3ae881e1a2f4ccb2477f77a572cc3596f4096c8d5ecffbb3caab9e6ff6b57bc5bc6c057661a298c57d83cc06abdd1420291d9f62d3c783c90f616440ed7b51156f734e48d0c0f4cf232bd62a05de801163118de46da611ae273f63d3be6b5ffa362d7d3c2d2535ecb35314e991712e6c2251ef99432bb19c8dfe8088c6c62d7a6b8211b82e08fff3a875dc29b36f34138f48c44015b6f4bf5924851f2a0c34e9d14727a4652b5f5e742c50bf1b6f5ee33d3939715f70238a772303671d9439902daf999783fea6f02503d5db405f2c2a3c45baf8d1774adc612554622651ba3e12f348861bc9f44494a80f09761f2a4fdb4505171d0a684c30f3b80adf04ac84a0037212a03a3cb95c979653aea8b83bd6210faf78e71b020ad2a429ec026aab230500f308d03cec25e415c6505a5508001a610005a45a6df9d83244cbd56898a031063a928a19744e073b53821da83ce7463198b0d554d698a2a00aaed1a910782d46f1995b75fb6113e2483d2230e757207d0bba3c388cb6fba916cd7d5025b4f7f6bfc074ba73d36e0435821553c74b6accf40dab10f3df034a5c60b3d08c92379bc9588cf64a6c6322fa926c7d4734d1dfc74e82d0e0ad9281fe9e939f43afafa8e46501dd197214ba81bb73b021c462636e5e981068fb44c21d790748e43951fcf75fa3a91a6c390a3f92a487f85cd8902741336148c0e5a8708cfbb3393240015c61fb054c7001846fb41f784b0109af1c0d1b85f11fe06a98912debe96f128f95a5ee637dce5088a23e63f1804d23f5531d53859c5d10d3431d33b545c02b07f7f71191444a20b7670eaa370dd5b9b7f5d73bdb9ca66d5a593eb3e8e69a3336a38458628a47f60f7732a0065008da2ecff7f4b3ff110e4441d60e516403866fe21cc57fc45ad5f373a97d48974bf355149c6de26996c6cad19dccae6ba0116296d60fc4b8066e2b521d3eef605f41c12a8bf4faa81c67ff471802df0a356edebb120fd686a7f9c185e88110eafbbdc386f82745d7390ed26edef35293737cbb6bb31d7ca57beb18732735daef102a3dea4178c2b275429aafd24f265d0d8a7e1addb3b5f44a0dcc4739cca95185ae70ec0c8092a68a8085e840049396c93f231607214b03f924fb934da02eeadfefa717ae05d64b162832770fc3b57797283c46fbe3c5dd0b2c26a1dd1a7e6386bea31bc0e9d919e301f9f78465d6e7ea23b1abcd1edcb02b18daf0e6f4ecb6366fa9bea350196444d0f71625c413350bc32871cd12f64f4381cffdfbae74a72b2a7531b76f8a90fcddc76d3546603549c38cb7c80d809112cffafd5dfb038abe943bffaf2b25825dec6fde7bf2f066339a892ccd19d340159110c5a680166bd9d3553062ee754e9db72e0eb3bc8a467d7761e4b06ebfa969ece34041a44b6f7e0bc91b9e6564b3515b66fbd19d7f0f9ff590b63952b8cb1cbf2a029b7830a691e81b40396a0ecf4eb2ce916e6d4afbae9001411df37e210f186bc3f23f7b1902d6e145c00bde7439f3f9273fb0c921735522c6d2758809338743595005e85960b39ebb3fb6db35805ad928994118f7bb8a0272d2b747d89aedce1ee9683eded0b06c39a70eb9c73410e4ed23ae2c70a6e127c93e27d0e5501064397b90fa0682739d775a269f7f64bc9bd66bdfde157320e49a5bd81b81f5b8eec3a451fcd98115d41be5a2a3e9ce044a25b8510def873c71d947ed7502a6de1f7944a82c48c2d8717e57a29f83e19841339a828c45be72b65657dca89c6943228fb2b54b3f800eaba120b5c6c5401a35c9a8fe7942a036f9ffc3307018f1f3b7e4ddb109e52fb6ee893ba685e61ef9d3ac22a93414a7885f9b58728d8abbe235deba095285e65c1387485661779781e8c94fd402d7b7448a3a63db9b59f845ca8d2a6a4d720058879cd7e8b7c8122d7d08ad2b6177874df1f0917c85e6a3588493cd48c47e0d373e6c29a884c48106649cb208aae02302779b4bc413f4fb2c0d6884422bb3219ba1c91361082bb8b74108c3f10ecda5ea5ff76affa21a66bafffe4cd8ccf09ac9ac70798b27746a8039fd4ef374bb18b0d6f1f06dd78d1c51d4ced696863cde07ae80354ca53daa41574c1a0cb85b9ac76fb76680755b63ecfcabc244ea1f96da6803f7199ffa11709cbb24b1ab0a33fbd5861bed034f60d57c0f180610c36c71ec95125df774b4f9420924ef3b4ba0060d25418f444423f74e25c96437350d93d41dd4c1d1c3fe0adf91045e6eb8be49073f640ab86072f816b2ded1051ba242e03920471aa444a40b8aff6716172156930c563a262e8332ac3f3ba0a6fbc8d13b05432a40d75d27755ec75ab87cfc6caf0481fc5371a1216740c57444b3b298d5ba0bfe6323d606cf6a4819d71fdbc3a7c05fa5eed50e20fd0e150504bfca3cfc97230d9bbd20fad0e5c566c6595e9b48a013e3d8b9e15c7aba186ca0da08a299809ddc3425290d02fa5d42934d6ee2ee1b012ebcc18a148c2a52706f0b9dd7d57f63712dbdd01989008723e24e70ee071000a9842ea64de8cbe6cd6a33f09ae405367426955174cb80e0347d1186e6284b9928265dc1eb2263643cd4cb462600be4c53fc89af38c83a51158cbd89206c2d841792f106705861679f9964486e848a74abf3e14774fdcac4cb66901036bb481c9276771b6ed89745de65b4aa621675c67cc736ba9fc4fbcea1ab5ba2e8dbd31f7fea3d763d74ab373209aa7fe00d5a4e4c71805351121a8c6c71504c5aa801f0a538c9998bb40f282f8a890480c8ba690b9a97114c3bab7f9b830ac4e15a70809ffb9d805f62892c6a644e49130460a641be99635575d5993e1ae612535d876d403d5d3ff948d7fa375025a7894bba27f49741b93dd4b7651f47c67b2a92f32026b246b001e124cd89a80096c6843e6876b52f3a9d24e1d7bfe349affe6754d2ef8a30307fde3abac8542f7bfae7ab38569a4d4686045ac8debb29c762b400c4b4f274bc6397522cc7d54a8c9875dbd99d8dc93bd0bee07c668d73d4190a7d357b626de4dbdcf14d36218bab45693d66890a5e52233489b5099f1b2ee884458da5c6fb1097687080a660ce098d2d6a1f245bb8f30405b5746df3cfbbb53441dc6c254bf7fa6d8498ab7fddf0d47b9ff55d200aaacb02c41e9eb1c8eb4af636e14b9442f8f11c3850bf02b08027622e93994528ebe0fb39c96c7dc29347570726b27aefa805841a2b8e6591101383a97be3cad0042ac22fb5a9266dc3ae06032475a794ed5600044229d5842b6de28f6cfca22b100baa6d3ce302938c239f0c29469a93a53d2adf0e6e95e85f7b79405d5cf178cce0520067ed4f3acbe636b99c38dc4430be1b318c933110ac310276b2cf6864f060d8853975b0d7761bd1251102f073607e5d6b6180afac387356acc553aed368ce8cbb75cd5bf974c350c5bc9111b69e8becb8dce01141b20add3ffbe71ec146c4d1b5f100aa2c5e86c2391a54654e5b93455f068e802d9093540b22b1bc3739c783bd68ffc854bcb11951b92fbef74749b75e00284d9fda9325dee0e4733b9e33a6ea95ac773258ced028f3ee82bd13c6e852df5eaf0e26ce31c3904460b8cef5c47c342e1c0103777e05d5aca264390f77f6ac606b5671068d46943440a338bfefc5a552859f6eec4d309c8862fab2eda3ddb6cdf8e34ea6851a018f364d48c491b01925d9d68aaba317552efb56ba20acaf51fbedaa9f02dceb1d90cc78de200644859c6812e44b838f8eee16ab6ce67c5cbd67ecffdc81aaf8da47bcbe43a3886fc095f74c77133491b2ef5c633be7e54d542d8040f182f6bc747cba486e4cbcff98a181b1fd95504b1609b50dd7f4e5b7da62a6834639abad729c7f96ba014c2b89202ae2228cc97a8d7e7fb19fb2c58cd1acbc63eb1593388d67648600c67fcc332340d104095ee899e43ad4091fc53c6851a9af177e21d4bbf05a1c7f41a69ea7da71a13e641648b77aa166818f36491a98560b9d79c6765ea43261690d2fdde67ac3ee7e9157792b4906e62b12a794a4110c749d57fcdeb081cd049aaf0908d28f316efffe11b4cb7b3358452e4d05e29657d5f786d73f17e18be422186362d3ecaf1aeda6923208462b5df5d63f40bc0f0f3f8bd36bdeab2c56a8f41ea951d45b8bdd026e4d7b3b066df2a8c6f2d07dee74934d4a7fa46cfc6a77fa3ec2afafc6c970e782680ff3c2ac29f215242414dc505dcf957d261ada40548884728f8486ba530b78ab03fecfff27ce411074d3ca113b03655dd6bc64efbecf5c4d06ab730108549cb679626ed5896e37ac22a0b38af2a35629e2bbf73a08bb5ac36c0b087544db6fcff83280ac03b0ac4bc07d7d941f6aaff12b813146720a8728c7e0630e830521c501da5517d8b808777cb607e07f1a4b2752757d568f0c02d7fe995b7182e02beb54b8a9350c2335ba43debe50e87713821addd2ea81128e37c174e058977b82547870dcd58192e3ad148a0c09d7d03885bc32c14b3b175ca054caf39a58c48859d3f31903e8454d905e5e9e22b325f3876df6219501596d60e6047c75c365501f5880d5eedb4c00d288e7a5fd79ecde64799da8833d7180f708dda99e29c6b8d015e112c60c2cce38faf0011a5decfddaca2c5b2685a1577c950e8abc9c40fd97c804ed79ccfd758ad6383ea7a200973256fef7e57d1c125132bb4c2e0ba50db3e90792d0f8243d99aa4c80b4db84e694492602d193f0c3664bf6d66c773aae82d171cf3057e115e8af47db4191e8ed256df7f157560295fd5550af5b165d72954baf1d9cea6b9289ade3277fd30360c20f285f7a40045a4b08d32aff8f8c7e62a211e79fd7162bc185436be668d302c39a26c0eca3b1e05c2c90c735627013abcdae581b18d05e88173504b07426bcbb346da43756aec198c03c678ab2d645514a9fe9be3d5c776c6775d3ddccd7dbe7be26966fa5c0b8bc3e5c738d2fec86fcc21b186cb771c3bd1062281f2ea6d5ab86658a0b078ad67709c6fbed1a7f2ab1d212da3086ff6a661f0577780488a145928c3644ac4f42a92c56d68ce6345116709088f44401dcc7b8b0d4bcd990f3f5333f1310dc7553f690256894c53245da093165165d92b8668ac32af4928e86e9a457a6d4fc95164244aa5f66ae861499f1e164cf49b2c3a9e9104cd154c50f325df6fc26861d3198c623babc46d1a7b364a82c494fc2bc327e6486c42df105b53a9af7ddb570ebdfaaa6cab121ce425aac31902dcf422191cf5cc970098c89109d6dbd560cc60a651271824a8d2d49bd782ad973a904379d09f5620570ebaf1fad6750aeb3c2f04e2fb87e17688ff33b5bf5301855957416b34ae3637ad97e3e0444eedd267370e2b823f6b6ca3df86b41915e508f2bfce5e44ded2fb04e6cdc560e26c3e6942c3d88bae0271c193938ad18aa1115c3d6101e05761f0dfea62142071c4dca5f60526b3a92fb5320423eaa822c54e733d4eae7262e4cac67aeab2f2b4b03b70b981d133f2d36c25eb1f26308220b19264b7dd7f605902d01758e1f446b085233a88e13d20c84c2363b624d8d586aacc909993c69347726485b582a3de131c3e7d877da5f93f5e5e50ef3a2cd19054a9be18d5c7a416d2517a54c42a70c62e8bb022b2d6e5a41e9350a9e7b49960e0bb4a020a0e0b7b9d0665be55f8f7d073456eeb972f302bef72bc61f68f84c6c763a82e458753cfd632d832e700e86969a0132589af43c7308ef5fcaa1806c511c3f334fb3a7d2e870adbd09f4c56ebe2c955deb9be8377c4cac4308fff2dad0048ac3f200b790697e5133fd7f4428d41d9863f312c0ff365f36b566caf3385dccf3f4c7a4b8b95717296e88d596b7f4795d002af48b17605280b72b47535d9166ab515995981091a6f5fb045aa3acdd8643656a5d42fe309cd4143ad016863daafeaff5345ff466d44021ad86674dc7d78133df00806a81904f02791aecc9e8f5954c6385ae6efc8d39849578ca9a5e2da6bd02a755b778859fe4ebdbdb635cfd541a447eecf537f46a1894edfffe1c4d70907a6cb0ee605083851ac9abe49a5b9c771d7562d6dc3898fcdbb6d0d74f41dacd6f40f3940f722089c3a269e9bb6a8d2c651d4565844a9b45514bfa2fc3189af5304782c9d547858c915b870e1e4fc97f36fc81bbebf92d561df9cc43ce0218ad38b86cb0db626b11f7b94dc97432c1acc1422a0d1fa2a872af2b2f9d0c717a354acf0a856fb8fc492c6d282b598be0d092dd3dc80546f892ecf12e1ad27926ecad09a9e67e040a186cd2cd676b1069c38a2324db26449cc42b818d471dde9cc3c0ca200601933eb900ba76d9add5e9ba94b143ee89786fc7bd81cf983e4b4dc333b9f35c1ee11402cf46929fc6c68f5a76c18eb5934b17b6527e000d06a28838cfb35fa911eaaf8c72285fb72feaa851259324f6a8f983b7e9008a00fab3baa65de67b065f6aabdec4ebde3402b0f51de388e16473189bff9b17153975b90c90cd8c12ce4f3a0246476f2f6de8fabc029e5de78e46973bf9a3bf5f592ab127602a2ee464b652749d1ee1c81f71e522a0cdf2b2b6ccf7f69aba57db67373fdd47888a9ebbc8b18aae5ca728c3378e2c461a08969629d9a2b8b868f16ee3407b84249c4f4115970084e3b9cd37bcfc0945fb60bf81ab5a9eac098bfd57c86670319a1ecee9258cdb83c51e48af9bb30372079b83fe5ba75956bb0753f445e65deb38a276d94bc6ede11cb0ebd161c185b28048707c6c819312666825c8dfa8a4c3145decc5782f7fffacded65f2f2bf6acf09d6c6cd2248b69204edd707a579f05820a1325674a205f378a15497215c90a4a52c4928311e6689103223d40cdf5349276ba0e9035df8a928e6312e9de4ab07d716771cc8de81729ebdd59425e591dec477b4203eaed358ab7cbe8f9ab1fe92edc2e3d25012f315a9b9d15dc210d45fe2552ea4d02df640d88968f346f1f93ffd4773131adc06307277f5b09c94b4f4ca284184ea614d53f2d0080a10cfee0bd0507587bb8daa97a46205b3364183654bc9af383fc0965a6c4d77e6be082744a7ce217190c02d700193c5483b527a930028128d09a7db808c0839f57d5b74a85f7f5439c41c63cf32a0276b01c6b790148dea2fd9e84d136ccac899a35bbcd7adc9c75d87121e40cc34dc079de18f67b73e5357621ca2be0c1f1dd97b58099273d88fd236eaa44fae8447df9c4d8e0c10c839424325ba4253422987b2a8d78e865de6b248105134cd9ad4018c7a411bf621b70ccf8717932c16b667329ea53631008d2c630346e1f03b2a2912f36a590ec436eace2ad2c9119154c44636245a103732aa48a5055f664723479f8997b70325d01b2669571d56f93882449dd4d9becad0c2f8ed5e1fc28b36dd48dd56445b34da576a6215f1432cfb54692304a2a2afe744f903dc19221b902224c22147f8eaf9e877bb7684b028a726f4d9ad2c0ae27df72af91894ec82556100479ce4b58b8c2e40735cf260294add351099ee3f2c044426342a8b6df317ea0f1a2a329a3e9dddadeab6040177a86454b5636fc9f9d34a9fb6120d3f3793a7829632602d39cd3ae3f568a8cacf5706c2c24fd3e584e2ff66dd62633aa901f21c1b4851465c961277a2a0b6fa0b9bd111dffbf5eb49a010ab295a2a06e0052e6d6f802c3b2a8862c15dd6f5d10aff5415b37b3f18a149ed55d2953291e659ef5df3a0dcc6015a3a01f7df6e0b2a1cc3f33f38448b2d7897aeb863bd39393ed297f8362e07419d1c7b1936620550d5c800f768b7b69f18c34f36e3dc1bbea0aa1805ac1644f689e02d63265995ea4964f905d6cd3e03f97b3aca08d1d84e2eb457475ce14ee1eb8fcfbcd70407f85f46d5106c08b3a603e8e1ba9346f66e9218fa16410c23f1c5eeb541dafe3c2cb2b6ba6f3fa4dafad93ae125cae51e2ec8045b7e70091da60d21feb10c217e8a46693ff3927b55db25c7cc283a79f9970d9f1b8cb10f499574af464d605042303ead7c2965a20ceba9a0e0d9997348e75a9d8216ac7c286478175a75ab1e3c01d2f362d50023b3429c8eb7c54967dab3974a7c4b3a13bb981ccc58cf39b33d6c553a5bcdb9dec1c169e03bbf57b5dbf8dd4e15a6c216dcbbdb7dc524a29a50ce4094909e808b20a492f40d0d0850c283cc922434d7a210686252a84516a02444dba143f3b65cfeab93a571d5f5ba99db267cbdacce1db5dd1660924ddc84eee8a5ec04c14175cd1a2c9952f4ac6b47688a0e224892f5c547131a505814a095010832b28db0b33052eb0c812b8c205cb182a575810c55aa57964a3d859a9a5b6c230dacbb24910ba992957b1bd524a89396d61b053cea48fd7f1bd58143b0d46944d8a2e6c0d52b420850a56490a25f3480a1b6d07aa1f61523f6698ac273642e7f2bd289fe72ac489474a866a9d7f2252ae799e3b1b85f31a8e25c4aa1b914d3511702e82ec1e7c90b595ba578f497184ec555c80ac6551a4593296872d6f5140fd2d8aa71c85a6b65af64f821529d7b247c93e4ac736879cad8e8714d1b762cd07595b69bdba0aa19a305f5e5dd5b85ac322fa513897a0030650e344597d3cc9183363a2a068c2040a182813288ec658d91732be34833dec0a5bbfbc3961c48f34ab821341d41ec0baa198d812c0a8a635d97cafbf9cb0fd1d69b4a126908ec450fd98f31633d523c68a18293f3a12df7402cc17d12da3bc3d712481acb514df37e13d604427086e4c60b9318102d9742da5fb6559d8f5e54d4c0f1669d39737314fecd8f374e8a9981da86fea30eacec3532a9b643d6270f871d6c4742455578ccd2887325094b01823030c31a02006098b2901cbc849155da69e5ce0c28c1823be599b92cb99e348f8f2b402a81bc4109143edea6085c90557a89852064b1231f2b450521c3791387d016911b6853993d45e5376635612864a182cf20157ec6035a505aa2442dc89e48671baf786f972c1cb5384152a3038ba49a10316c36cf91b26099b826502ccd112546090a049c064e96c129d973730387c7e7903d3c422c1d2cb124becf4b2845d6205ab6953228c264a7c61cde0fdf2a6041925987c294309265a65dc9498a28413322a195706b688529bcd662ba2320532a832b05f387c77172abe8b0a6c95ee9955318afaa65fc0fcd6c5891f7b9c9855f78b2a866d32f554fdd053e5142557c19c72f0aa6493d30c3fd294dc862842410b4b53a0e085a3a420acc6c882a48a13113398b62e5eb830d65e75c9e27569e2b470911284171d86a0a28a409417a84003922ba9264e4856346579298dce68d870438202430b2555b54a45cb0b2a28f1448526a61970d1e276f1e1cb612b97a8af3557cc1a838b1f7ba476f0e0f274e32284b4a241871670092309169a08da02e9c889951bc6802aa386dbe504200fd9b403d645059a325e90ab185eb880e171a1a2f32a06ece5edf6f4e0cbdb4deac58805a1eef3fbfcd39d7fe190ae731cc4ca4f1c827d82124c0036f2d9b903502d8e46124cc027df1b8ddef3209f830e8a5f6badb55696d73a44fbe71204a24559bff0ba175aef42f9ac308745f4b173b37e343f7d417ab4b57426b17ff42dd19031b614f301aab8996ceaf2c79fa73eff87ea29cdd3db97244f7d8806c59e3e493d752f64deea29bd7929f3d4b5d14b707a538582c7989a4a8229891e368dcb1c921a4753c0c473c18dbb25511fc9ed9f5e6e4e6e55deea9ab55bcc1420c992602289a72a0625e3886c25937144b692c9c892ad643294ac642078f86189147a30c10d359c02316c8032061421a260726998d2ee80ed0ed8ca6d4f605f37d4192eaec131bed93b8c6f95ba9bceac77e18bceacc3603bf1457715f2442b5e172ee6dcd299f5afb260cb4d7dacdb311e37d91ee35b9392c7d87f6415402859b2b442105758a861cf550868cc18575020e5898aa31a165f2cd8dbfa8de1c395bb3a90a042824cd5627b5fd42cb6ebe5ed082bbe96d9fbe5ed0831544836c166441c21c48f33fac357b114a360f148150e48af6277508f49975feb746be907d231168d545980ac9d7084cba28d13ab4cc7a2d739c4d6e9d7814cbfa29e6e3faa2bc65130a6583c818244517698b4e59f00cbd5474a3a2b0b0a4bf9a65f51039805c8da512c36c2f505c8da151d10e5fad072c401d727c80059bba21158f591128cb27d24edf94662231cf9d0586c04597dbe014635ecf20a8b341f5aaacf95b52ab1206216e71463531c128b82e4b5eb3120538c72c5235538603f903b8aed08f65b443f08159f4e50b455b15e250664ba28259dc94aaf135554618495112e38a24a2673c40c472c594154944c82883144dc60b3d3b77e1149dc1463a88f24437dee9632d447feb8892eec3f2ec74893655e78c1882fb0507541a5070cac4041a20b0d58cc20c69633798b15f62cd24429abde6e31f3760b95bd328c0990a8b8224c192e8841cd9e600a8cab1d5440b25453c19eb69e9f2298c088d88288323fc232c54ae8be65a91a624c2bcc1048d88419820759982162d84320a1618a81665a810e131393090996b8f58dc9c9eb9737a6263b30b1e085614281bbb25ac29836cb5496315ab27085d1d2c44d18aa65889b305aaae830372d33685141054dbc6074ba749a4b1fd2f11fd5349cb556386b9f0415304596db10c4de0a678d86b2068663d660e8792b94351aceda0cb15fe7bc1b66b761e73a94dbcb9d686150429819f7c7381238ee870aed340d3909c16ad579303d94cd86c456ab3e020d923721985e7fc5b2f4d52780816bbd0a1d55a91ec6d721474bdf9e93523a29dd30ea3be80ff5a93f1f2b449a35568de55f0e2346b5966884e5ad13583c6ad8e38f15c26285482c37aafdd0a0ebd56939c4a2fa571c1285258a60ba6cfa8f7629f8acbd2fb130d951ebbd32a7c02805316a70218724c208818219840bc424413145491367280044151065f24f6e0ba141957221cdd2321ccd41a30d6141aab42a94afef2ab0e6b2c79cc51d4569d9deae40b132929a157370d9232d0826d547127138d4b32cb270a2082d654881841430824802838002dea0050aab288aa842c6995a973de669dbb4211a240970e5a966efa13ed3afb8f0f7e5ed0ad28fde84c3d0aad00f191b6038810f586c01a536facf2f7e9cfdb4f4a7d109cc74296385179620c5508b8009caf4f0821632bcc0a9466343d3164d4c219d71aa4d2f7e4eda3b5d5b2b91a1bf05904f5d26e1b4822c81a8efa095eacc275bde7a38f3a37eead64ef17b5a31e60a2aa89874fddcc7a42825d06d09e9e56da9c973f0490f3bb0e5adcad3735c30fd98a75edeaa28fda85f56c1e2bf97b72a516f01335559dc7eb0a2c987c34b5f727a2916510f3e39a5fce1891f9e6478c40f42586b6de7fd90042a618cb1f759fdb024e79c3f6da5cc19195a71425af1226f56b2802008b6b6152778696b6945066965051748e472b9a694b3ca192b471f8bf52d917494a37c2ac18f124ad6da28c90ccd323ea4806f3eb450b34cdb942e9a9e6e0f657a78628a165d8e213ba50a1d53a2c83aa6406121a67ce1849802e55b2f6f5366b8507c735a9a97b7294717f6f226c5cc0c5fdea42c2185ca94bdbc496172efbd9d27c5b6a93ccd711ce77d4a524a4f9feebaaefbf44d8989c6cb9b520cda5fdea28001f2bcbc4519038220ab95f3f21645c9fb5845e6d5c7807c5fbf8aa309df25c182c506924c948cfa4006efebe1a50381f1692834dad01090161a7c32068a060a64f1c0e59cf7b65105abb5837ed960a2b551302510f6ed7232d3b4578f17178db634a8ea208371a0028ca6e604df4f249a3335af1c6613a7b30fa8bc6c24f67ae4add71b1c1b3a789e2438309d69d0ace1eb8bcef6117bfab861394973c94422c0518e0e0d4fcf438420746233f4fce8ef7d5a7f5e97398e0062623219447042b6d3a48324b788193c304079d0824b84874cacaa684e84e20b67a8a87a4c2a3afb600551df21368d1e179ee6861e0d9638c931128c74d291e3e90fa83ff7d98c461b1a12810b0d6ab4e09ee3e747ffcefbb4fe3cf7d98c467b15d4b0c1c26b48d6c5c64ceb389d4131f3413233a580b036a9aa0f149f1b5ad22097b44aea69676e6ca0a4e7e9c7a6ca063f3ad7145e3a17e628724695fd0374c4e52ee7bd61b0571154401ca0d0d4e392c19e3e3a073892cc34ed35246beac941e41f833dfdc3a1250d7afaf11e986cbfdc853891f3b127fb28eb7c7cfde89e8ffa47f772eef6cea2ac3e55a3d3aaa754af32f6f48fa6e5120e1a8d46e3800644fbd9e0860f6d66a386063d341a6248731a8d67066d4716d3a1e5c06c706e682f1a8d564343a3b9768b4503f547f36a47cb340e5f4b27b5b168a07c894559456be38c2e15400a7a8529f20b305527c497447bf96ec050f2956b4507c60657c066b685a2c48a97c3172cdc2cb20dde0d63b95fb8334ab88c3745d6a2b9f85ac089c929e87cd058e024de1330a6a07853360d12fd64e718b26d7337702d7c4a28e8975e92f4e0d9c0fdb871f7fdb8b7ecb5614f36334fb628212939e77cadb67dd9a50b32485d487959ba98c16706851bb65ed265b1bb24cdc3a641819782203a13501541c6c9082a30405089194375260c9555c7c30657f096d8164afe617f543017fb6af1a86cfde55e01054ef2e20a2c5e70e16dd99f0d5e16bb05e56eb13b2c5c96ad6344776583525c1594f18ef8c2ccd7c2be2fbb7c7186c9176210b1395b0e636315ba3076e7424e6177396817f6eee163018c2c5906280e0a297009c0a0eaacd83906dbe66ef054d8dd0e1d986d7dc854ecfcb2cb991f7edcf889ddbdec7246cb7b326cfcb2cb99a61f6513ec07f6dab21e21a53dcaa61f3b36ccbbb0608cff5e7a4172f5e30cea4bfa98b0a29e00ea371c2d755d47fb5553196402fd6aa9d0d6219830ff86f471add7da5a79a8b5fe67c5d1e82508570249bd6950bd412c90ebd7875c71570982b41208890b98333feea75489d7aacc18aa532e60906c4b6aaa81ecebd3a55fb7f96e2b4a39db6edd82414870dffaf5ca42f5eb5c9830f3d78dfeb39a82402c107bed3dc0bc7a2bce260eea18b4476cfae36c3643906f2341e03cfc007dae487d4e745c7b587157db54c494ec3287afad74865c96809aa2a650c356e93b68b54b34595d432e4b004129a517d3e860adb598fb9a608cb95cc5650924ee87a70fffabfaf0ab7fad22fa1ca8ef79deb9fa2420d4b407fdfb38c761517eec5c3886e039fbf9f87916c7b1be761b0ef9bc8ab120e17f1e722e41049cb0837e407b91cdf7dab97c99fafd92cb97a8ef3a315600e99395b7cdd207bdce1174d00b2d963d3de72fc8fcb6bde5a284d34b2e4a20fd062fb92891f45982d04910e67fd9b92cc60a203baf449c18ab5e39c75c97396bc56d7b2b278e07279ec117eb51afae9e8389433aec71fe6bddfcd8dc78cd6a6ad0f4b8c4edad192c19a8a361df8df7ea68f2e658585fcfe68aa99d74e290f5eaeae5c4217ff864cf27392e5f94de9f4a10eafb905f64fe078a708ffd8ed603463ff36834433aa3f872bcf1d2259dd977d04bab2450f5df63b5aa1a2554991f6b92d557af6dea35aa0a191511c40ba0a2808a02a605b5ea55aa0a1941895246141eb028428b2f6ad5eb541532ba21c91426e08234c493ab5af54a5585e40aa882e0c104562f04e143ad2655215973a2b4c4f4b5a93ed504c4e69c1cc5f666bbabd351364d9b84a251b120f3a98b1ca851954605a1348a4ad1294ae589baeb66a615db7b2dae1ccd1fe88accc73e7a6f5dce10b08f45f3abf7456a95edb15b7124f2fdc7e50bd3c3fefb3215aaf249b77886608358bf8ec321568cfd9062ac004ec598f62154a4f2d43dffa2f4542caa8fc5d1fa07e6e36d7b1c6e9bd52756abbae9acda2bbbab5642b246279d178719c2fc4a915e1a191919b9516d9c4fa402f1c08f1978eb1ca88f3d871ca8b02b7b9450381ca7d16380060981c00448d8009119c2b4527a8b0ffc8650b087e7d6edf51d09c2fce999065da74114c8f65c914954843e1824d08794a2f2ce5b63ac71e438ff2658c4da6c3a7c51769ccfe20882e77cd43e843a97bdd65a2b179a5033e79556ca89d57b10715d58645e853b1268beecd6d376e1a2c4182e4a94e142665d3998bd61e797372fbeb0c18b2ef0cb9b175bdc50e7bd4de8d41f38ecd7cb9b1745fc088355212f9ee078e1020ecdcb5b175bdee6e58daaea471a94bd7297a4d5419a3143cdd44aa76e55156739aed2c94d6d99d6da7bafe53adb7595ce4e731a630e0989e36cf7d9efab747e58e7dc59a5ce66ed7ddff759b0655bad4a67cbd31a44ea5cd6e5aa74ba7e68cd626dd9d26a59a6a7de3d3d5926ba842ea14834892651243264c890999a8a9a9a8aa232a930314d25a6c934958c5819b1aab213692285601aa0c70c52ab7c7aeac382413a08c8286c31ae74e2fa55dce9d6e7dc75dea7f5077e2058e904b5fe3e506b0db2748bb5bfbd2b9dbba559ac566b6f97a671d57c353595ce1a1aed72d1d0d4d4bcb4cdebe6bbb9a974ded8e8d7eb46dbd8dcdce068184ece979353e9cc81691c9c1c0d83cd72726e0cf4a123fb64b24aa76cc60c1e1e1e1e2bea10ec11d2b03468543a69c8742c2633c1fe087b19d8430606a9b31db0c70e18a4f2cc0083747f450fcc5cbb779c153db36240be8a2377757505c6d3a99c1c1d9d584c26dbd999318387c7b5a5b265a08f2aca30b36074465dea4c5abfc8bcaae26881b74ff709f5a1d6ef93a7d5ef131a54ef93fa4f1284251f318c463f45dbc38826654fb7d65a6b93f6744bc39e6eadb556ca6aadb5d6436cad6d62af5b6b83a49cbd5e3543d55a6b63d8324ba0216b33eda5ecafce7b2d0cd22bfa2aea2b4f4a29a5cc317016df8b2d5741a052763b0b59cf5cae3ed3d330d8ded2a7e8cef343ea0c50a058289c1327b7a85b54eba392ca1db482319cc3a3ceb91029d73897e178a40b950cd5b823253a6a9c23d95af62ac6b03802e7f285ec5abef7661f8d88a44fdbe750ca7aa90533a5ed61d72a0eb136873ddaa744a209f48930f10538d0a04c83b8b75e996608f2add7271a64e9ac0bf3c4d17521765658c1641b8e9a88feeaf875f35db709e7bfc2f935e17c3adfa309e7bbc2f93b9cdf0ae78313c765902a4affc22e9413c7a723c2169ffe873505397fb17cfbb8c177eef291c6771cb0bef3981482551feb9db76450cb3baf914238deb99e21fc4c1cd63b97de7dc7f22d80327bd4afe9ccce6c944bdcff3343f09e9c03b72e2508db47fad57d8650afae5c3ef2c0bc258572bc7a9541345e9d93423a5e3b4efa744e135639eb3c276c499fce6161e7aeb0f31d7696ceb64ff0009d58a4663adbe2e3849cf4a9de0aab9c55cf5155a825bda719829438aa5b9eaf0ebaacd53591219638d21fbda7b75b87516f8bea73fe85a3b6a19d38b04bf000354feb523574d2d0e4c34e3f49e4e7c75eeab5caaf75079d4929f74b5933aad1205d8bf04fdb5fbfd73596d1b4e3ed91339f3bdf41bb96e7d2615548bbf4d98eb7dae5463510f4ed4240df3e7d6b7789465caeddc876d08d6adee7db8578eef2cfb7b3c2d8741a37aab5c2d814630a6839cb85b49ce5d359a2912a5314c2721ad1486cfaae3ed88d6a2c37129ba2094268bcc617206b47b9fa60df5e231a3152e335228d51ade546359735978ffbb14bd6b6282b7659034359d3a1ac7da151cd0b8d6ad7864598a8137fe490c713d9648090079d61a7e10f3ac3de41155a15f2ea831d5fda0e3ac38e1d5b26f695509666173ece65cff749a79568014cf66412fe28a7987cf50d54a1973ed5bf5089f95aa50a6cbf4302d5326c74269f099d716530919d6bb4a2a233493de720d4f658fc41673b421e74565d68888de7289d870c7ff88f59fd9140d23d4001e601920dd0a071269bc11e6593127b944d3b78fc70f232c7e8d4fbfcc8f978872c40d63ecf45f0b9cbda6cd6e57bcec53a718417229b6a9e08ab3e19739c634e9cd199a47f43fb655b7194502fe792e7c3f762225fdd3c19c326c9cea79a922c3a1853660053198b9e2c57d430b14a7c90f40528064f402df0f2691a27bad8604153ada0b61166003fd65a595a0052ea9e271d32c806c0a569c2b0431f5809aad13c2b78f0d21d203123800c3644c06235c0d1b5273d224051a38314b2a8a36d969811d31e6c61775c56e8ec68da133933f4072dc078f48c2b19c7354d0e36a116a18b97a87f8a1a1adaf5e5ebd12e29f6f44e034d2382aba16932c8d786b6f9c1ceb40749aa8f7e2191e90ded1ac3db407f1876d6faa35f33d87302c5c8f8be395230888505e087fe15668f79ff774db8dd4b9108d317d1cff7a5089374d65a25a6a2b5a9618ff6655843da637e1a8eb4b336a4fec15ed6bc74bd84559ffd18ec313f7f0370410fd31e6dcc4ad133baff7d537ef4ad8f46f5eb7f9ea6e10735ec31d310280c3d3fbf08ff81d9e6ffacbe43a3147bf0b59c65e9d6075b531a7a41a189267ff98fea9aafc69ca63a8f46dfe51f8dde8a442490f41a4b9dc8eb69568c012142fbe9d5eb144db04f44429df9e9466ff431bf40a6cdf6575e51089d511dc2e88c863c2cd8681ac67ad4b7379a8604a0618f79fa9c39a6efa0e14b100825c1b6369cc1c6d88ec1e6dfff744cb05f841f161b81f30e7efe17d33a411fb3e2eb83ff64b5744a21b7869dfe388fe4f82f47d3508428f69869d881923d661ada30b1c74c430f5eb0474b43d7157bcc4f431a147bcc319f975f64162fc53dc646d8d547bafcf21a7cac077d0c4820e9f4e77ff6feb05e7fb462b6e23fb75fb694a201aad8e37e3925a536879a86343aecd1d250042ff6989f864f668f9988fe570fd8a3beedfed3404f2e2fc5ac01d8a386a621ad883d661ad2aa663706c4e83f1adafcfdff2aad53d6cbd2e17f944e2aa9fdcf4763f7dee7be0f761ad6f70185c8a61a1633fdef86a6e12b893d661a9a60bfe8fea633ba2f6b3492fffd681a7ed51e2d0dc7b75284d19924a2ff45673334c13e1118e65e32739dfc58a3d17ff367831b3e34c4d07966ece090c5a4d4c981e1dcd8bc6a70b0624070bc75aede9f617e9b18d8ca0273ebeecfd5d1bc6a6e6c60383a39b2d88c1de711c31e9720110ddf41bd2d4e563c278fabf1c26ca970b3823249a72d3b6453103db887860656548af0120f1d3f883ac450890bc96907273a9efc18d2e243ce53a304344fbec0d0449c4906c8b13423c78c1d0dc8a8890a7305528ec7e25c32026d8a8c268b69706533058a2946688fc56913f22345e74727a7059c1dce5829e1e7b158048119136c06c34941e680d12288890122b3c7e20626d053e5a6e7c6a6c6126e62084c8004cff2721d16dd574d0d1b9127720628ba8fc5113020c3d2b9c658062b638f3daf5d7b8f679f821ed7f30586278f3dbc2324227b2c6e0006c4e72e172ce7ee737d396e4031058a77c1def5b9c421222f21aeeffd7a6ced7eefbb5bdf99f6a006305afc26f2fa7db7f853c2be925d8745f65bad9653cf5adfdc720a12652d16d96fb544b75fa4a9b05c83a053ffb4e719429e38b07ece3fd8634febf77cd4f93d71c49e9d25ff826191f9a07d09b2b684620a14531e24a21f7c85e0750e14b075ed01929e31e7d17e1647ecd63d71c47e8bea67fbd9fd3d984c06dbff7aece3ebb57ffaf5e7dae5b45a1c43e9f975af16a976ea178d49e3cb275df6e8a72dfd2dc6f64e7be713d6def9c4bd3ea7bdd767f569e7bc76ce6931c6f8faac3eabbd16638cc51d14cff0c99e6f4a4d83b0e350cf9fb99e4044c11edd5b513ab1673de1ad5fffb0b63488ca19768947c055677dbdf2673a340f9342bb4e09c2be2eafdc2faf58810722be9d9535c52981b0bd96b28e3c48f41de84362d10300d5eb3ccfa3382c4ec43734edc00463cc71f80863cce5cc612730c65cee3cafcb1c6e411025980163cce5aecb1cfe0263cce5cefbb4febc2e73388b2630c61c87a90063bbcc8914832af6fa9c1663cce5cefbb4febc2e7338853a8da881710563cce5cefb3eafcb1c760263cce5cefbb4febc2e73f8098c31973befd3faf3bacc611490983a420c0b46e08031e672e77d5a7f5e97390c038c31973beffbbc2e7338ca4b1456626005632a18632e670e1b517566ce8931e672d7650e5bdd2b4a715a4b0560fb64cf68b7ec59adc86e78a8b68a4d0cf652c979ef5a0a17fb90f3de3058074f606ecacb9f1e99f7e5bc370ce63e9bb506800597a5e858a14788dc29c9ec7bcd0bde795102f39b3477924a4f52b9a389a64149e5a44f9ebc94de92d4898b2e2dbda44ee84cfa993367ce50511bb5513939414135414135cd264d2693e9643a994c2606ca944025a54aa02261e6c8f1b24e4bb3536c5aabb597c3d9e65ce9ccf6622e7b1d973bef0335cbb258954e96f63e0db2760b64b5f676d5d0bceceb55e97c6d174dcdcb46dfd8548a6371702a9d3838d6e6c0c020f5a984813de60ce5531d1d2a6d7803f6b80183541ba4c2f40ca557f000f5ab4e0e18a4fb2a7a60c76c2c56e98c5151e640d1999c3472fe14470b48af8df93e3969b517cf70d89ccc9935270d63a3f6d79ab4da7b1d83449ae6ce9b9ee7c94b690d00977d9dc992233abb362321304267d7de257f91eebd9ac816652f8148b5b3dedba213bfa8d89bf633a3cd563005ad5ed30a99ceeea548bbfa98898654d8d5afe8546cd8ab8a4d9bc207cf0ab6bf5d9240d452b1fdf370bacc611c1c162b2604ac7dced220d14b06824479bf58ad9de99ca20760adfd7df4a9e88110d8e4c6ac1810fc653c75fa239126da2cd007f7b9f5fa6fba5c2e974b4a6e834456bb4022d007ce446840a2244e5f44ff3aa5fdd099f42c5a3981882391ceab924a9ac940280dbb3a8bcca7ded17a7cd33366a69e4a3da5648658985967a21ad0c7ec339d11ed97b6b1b9b9c1818144244cc0077d084820e93a8672c05e7b024410f0415f88048ac564b29dccede09d9d9dbb632b9d3bf286351a69dde80df6f8cfa57166aff3a493d26a25100e48b429a5941eb9f792f972e8cc91f6734a03f6a8d1b0d7fe2f67e6e4c8174cbf72b40dd8e346cb588cc6623386937340a22129fdf5526bd98e65c580d81f8ff0a0339d188de84736a3b3d7ce9e3183876728074d142b9d5d6cff0ecf37c46453df516958e7f54fde8943bafe1cdacf7f52eaccd03199e6f14aa75f90483f0d358f9c94359e40a998f3cf0081d8cf12888807f4315f4b209983070c32dfd2d90cfa3a833ee8ef50ff2769501a93c65dc1a6a29d628a4d5d823e667cc72481a8a84591c6a421ab08126929823daaa501124da731798044d47bc41d1ad49821b1c77ded8d7ae3c60d7ae3c6bc217358e3083e2684a7f6f98c1fe747f94423476a59030d6ad8b0319bf9f8b4868872dca06df0832f57c3c66cce64658d476c8044bb169510002e9b8a36c01ef5b39e814459fb8044f9c68d1bd3fefc00550a348124b6375e1b8044fba7d2a79456bf6191234f6d5864be361048a403f0658ffa39c0416b7500126900000000d3fb79292525fa017dd0d712c85f057bd4f652b73f1a792ad210c31fe799b1f3f323fb89fdfcfce8e4fcfcc07e7e6ca5930316f5fc748a1e2d00165a2b3da1c8a4feb5e67f134c40954ab4584728d8be8209c891575765aa6c6fc104d85c6b2dbdf7da6aadb5c1c23fbd477d2b81666ef5e8bef3aae77974be5863092f3dbf6c99d003e7a7f7d83fc518101c3f3dff145b457a00c1f1e3c7aa745a29bd2eb33cd67c0e9420519e12ec401fd28b5c0934bf4ac7236f61d07456ab65c127bd567bafad5586764cb56ee5a353b4d6a74b1ff5f3c431dd47086c369b095ebee84c886fbeb45f172915622fbd2029d38505539ed45b67c24267d3a928692738804d98f80e8a4467f3681b0981ab04223418202143408867801f7207cd41a3b3395f9cd359e7b8133fafb5d65ab17f5d28ffe21bf0c65fe1b491b3c65e8d4122c992ba154a50b6c04d134a974bd25051aa32dcede8168f4dee3e9015db3435363830998e6c872714777a6ad898e1b3c10f075e93c7547d84b415d2d4c7baf474f06c3a5e928e67f392b467f36c397b496f5d87bab7d44de1745638dd5467e5eaa6c06eaab37aeb2d50efb0c72eaa8beaa4ba321d993c6e586bfb38a3d1f838b4a33a8d380ee5a06d719cf57c7d691d347bd2690b1626d9949bc84b3cf989272fe5a7bc9497f2d35b87e5a41999ca8c9c94a9e4a49c94a94cd96346ca4899496e9297ecc836cc67341d433bb2bd6130f7d98c461bfab14bca638af09212151ddc15273583ab9ac14971559c142775c33ded706476b8278e0cf7c43d71647ad823c7c431714d9c13b74536a30de5a0e5e0aa743cc1c1c910f703c76406a7348363c229714c3826d65fb86a875bb283abb825b80a57714ba0ec114fe1294c85cf6033b2d886f92c074d16db1b06739fcd9e382c43494c9ae4c02cc04d3b386a0737e128dc849b68b0920c6f916125bc052be12d4a7bc44938093bc14f300e319fd17e663f382ac79279349168f8854bb58391762e1546ba54970a23bdf57da364d78cec465d3337ea465d3352f6789feed385ba632e9858ce86f94face6d4bd6130f726dc84366d2130f27391b84e2ed3757299ae93ebe45ea48bc345ba385ca48b7471e0618fb6aaeadaee91150ecc4798cf727a5c067be9dcf36397f4ba4c3f45444a98815d40b564532d19d45415f294402828fd720d4ebd757ddd5ba269b9b665aa32c882e93c2a9e92a7e42d6526309386a9c5d47516cc013a1b3571588f0914bd273ab32c9673e2ecc91ead92925d8ab2582c951a9503ebf19c370cbb178e1dd35b6785a307e6addf973df3d66bc291c88c040c48afe76bd7591d3a6bebbace2675316bb3499db575d6d67536a9ebbaae4e755d57adba3ad559755d9deaea54d75975383a5d924f1cd5bf2a7b4555d98f5d924d22d2230402376e13ca7f85f26b58e17c4efe276339d86b8dd558adb5569a537368a5b45eef69ec923c286f8c17e581e992aa10ccad8fb94b92c1e8ac83e974dd52a552747f1840d68227a927a9a72729bae4e44497e892d386bdbef371eb179592f1d0b1630b530e0ca669148a047af51a27600e457252852a93a6481489c57249839a5ce06e51c1e8d11626a6261a2a7a345d930a047dd3a3b7de02b33055218f4933d5a71ab585ce2c139d794a4a4a1e538ecaa2a49445c75f1347e75fb89faa908e88234aea9373142b1c2915d8102d074ce7d582279814ec496ace3997749c68969ce69253962c59707c4f1c1d5315c2112df5e93ab7d6737d9a52445e3f3db33da34ca4e9642239994813a98479448353c23c9254f3286b49f534a9145987c96ec88044358aceec27af9ea00ffde306928606a48ff59814fa517d6aa4908e93507dacd74f7cb5747e9050856a54f5b1af3faf719da53816cebbb6d3aa8fc5f1ea7286c063e2b05ec59188f89c5732523baa4ad1d078b05a626db94b1ca9f51d7ac0e839cf74d6aa9569e2b05528478135ea3da52a84237a4c55547aeb64e8cc46d199f764bd2710c8ecb14b7aeb5dd293131a3456a6273468cc4a3468f49eba9d70a8742a9aae925622552302000040016317402020140c0845b22449c22c143f14800f6794425a3e2e128b6391588ee2280aa2180e8218448c21462163108266a63a00b9002bc6227b5bc517769d91e821ac2cb6c89f8bd060c71a40899e2c3d0538f9beae3cfe501f986258c558891eb3f47df1e6f3b87f32d6f05db7b6bf7809ee3caba1e8a9826b0cbce8491dc5a86236d5ad7ab96ce9a267c023a4bae91d23fdb7f9d004b415891d34f6d7b5d4597eb00a23912bc6d58f36038e1eee55849269360c064b2963d9fc18cd22d66f7be6bf3e9aae05985a55cad48715d9df2c437a980beed8f2fdf63c9cabad1cbbbac6bf51a50be9b1d74a1e070e1d01dd08aeb9a65fd524a343191008a467584f7f03e8611db43757a8ce0ce8b7220938496dba3599337fde2ac4deed87a94568699c19ab78c08b440d16a1dd21736ffc29135611eee4164a76fc9c020239d368c73c22b05986484e2e3af9469838ef0674c6dc0ef6ee1457569afa47b1390944c45465d0fe9c29311b9024b0ec078599cddaa7355f2c75aa71a9c5883f74d72ead45853e75c3a0e990644f87d35a7913d9f402a1b756b827d47f7da65c9ae315020563c5beba90e4b7b454e087c602f35e50214f6f8163b584fda8d5c020d1e805ae898542b142f9ded4e93182b9344a280422346bb9fa914634dbcb78889cca922f40b6b396db089a3b4209a582bc63aea92e4f952f3064a3645d9c06bc48b1a66a5b36e5438c204f21bb0440dec4e76ed83555b24c2160e8c4e232952c5529b6eda67c100a1477f1ac0459215debf0181288724f3940725966954a7e18a6990824a9761211901ce714d0d03e5c3f7e6995a06dd03c01cd2d3e7406b658112c1414b099e4bdaf74971786dcb2458f29fd7fe6c3c0b5bed3d1d627a57e9da1bcc23cb7c31c76dc710e7947744192b5eda1f54ef0c91e6dfa560fb7f8b6c305a188c78e19ccbd6fd15992977d3a00ee7896efc017c691250c296f5f73196d395ae46e38e904e1e112d19ddaee084ffd785df8ebcdc7ebf8ecff533188ccd97ee471aea37f04c35801a5db90ab66553ab914cbe244553743049ba02327acf3e12f778e1eeba2a577fa54648caa500cc55997f20087958055b4b989b9f1f9a49d00780c3de5421044020dd512a973e8b02266742c7447be3c9d7cd4ed2919c030d5c82827664b24a44249937fc1811de20e5a408a50ad002118e39d5bc2b65bb20d19ef0d6d5388e7f99a6d65f7761e5fc60e7ea7871f2dc22f8658e6460b85b33a3db0de76f261ff1306a06d451e042e6f76c82265449825cf0b4b89f12e221bc62f1656a1cf9aa98ec91984cb0b0f77312e689f1e44d8c72ecfaa28650ad403293d62c3f3d90c2fc8e3b976929e090d56e8c4ec7e192ee7a5be0a8f551a72bf454d7dbf82437e45960335035bf933761397191b6911b92d58c79358e78677a5638b15a915e758b088eb15f46342bcce96b71ab121d5f00333eb8e8de18b62385c8a96664674bb68bed476ea84b4a946b1b56875a39d7a95904da173014a8a634556e79b3bce2d2e36e62b3677e29a40ed2f1d8ba49bc40f66acda810af83b7149e4e9d2d4ba8b8a8930d7596a0d291c62c678d8ea431321ab5dcfffaa0c005c937c402cf32e41d6c8c2c9edbbe32e4fb0a3f70d1db3c04a480200fc0bc8b7c8b4097006c8db52011041e727837ba9d2ec27ed253f74b94e9fcc5f7c7f5df5120a168c0d751cf1195dfedad2ff0428acecbb0fc30ead4e971fa5a0bed9911a15cc840c1385022087c4b943fe2a615a9e66f14e344d1bc81c324f091d35a4530b7a525796a3c9cabbd5e6790be4bc3f2dffc77571bd365a84cf99999551f74ae4a0eedab78b5d6af3add929526306750dcd67d650da914514c2d726fe2698fa5d96efef4f519bbf93b7b85daf2637b6cb4101030f4d9c1002ec05c3585c63033f74bc5fc96ed43dec38dab4875265af8be9f00bbd13827de239aae0c38d462c66b25270bd128d2378ed73fa0855a54e2116f30136278d150f53d59d41e96e47e43ab18276497414407914965aacd65a41b7c3b8ce3713f71c3dee2352f33eae128bf2496ae5330be5dd61e9f9cac06aca27c0b1f8e52fe761e2cd79fa775602098cf78c33609b2b4f3cda5650aa047cf45cc0dcf5de8401025a006adab441e4d4dc7632b6c9bf4b9ef7e4d6e95e1c29616e23c620ae99cb3768a5bafb2c6f8972f4ebaec11c3ce8d4bb5491fdc877d372c8e20ac25ebf75008192c1e7ada55e74ef825fdd482b27f513a2f62113dd9273488a03a8910f6c2e83291ce393f96bfdeb321b5678bc59675232bef32e3cba7d575a863d7e322ce7b071e8b63beacd4f771e7e7cedf4cb97c29334246e66a7a5c633756ba22ac61719c8e763f4db7289cf69bd3ec30a5bd6fc07791d77e4de16e0dfb08335da077e4143568fb26d4c1f817fb9c33dac328d0d962a03ab16d20f110c9d611c9aa954755d65cc4fab1490fb106e917596ab23f2a5a4170769c2c047d6ab24e1f675f19c59cad7cddeb8b82e83a90e27d1cc38d44eca942309330b1247fe0e675d6d62630aacb936698b8ec6dc8e89ca79558ac15c9d5e28746392aa824e4d34ba54a5bd5000a925c904485427aed7191c28e08b95592ad857fa6619b1a9b0fcb04a5ed07c2e239284a475ee067d7c30f90afee2a6c105d1e4bfa3b8c84e4a50217fa6a8e18b7668f61ae4606286ca18ec52722def42ed5b466410874398185d529d31b59787e9ef5f2a5be12e000355a6b63f360fefb401d667e37bfa1a7f8c774b600dbc591606622b1ee3f12792a15470ce0302e8e7f95491bbb5bd40325af9aa261b74f53d471be4a8358954822c50672ee3d157a7395f17ba8a0759d4c61bd0792a6204abc4c57a8343620d9a301b9d057b45fb16c3c7fab88cb69194248a68316b5b4a42e08b2b86b2802514414d6bc1be180e56f0ba65659466cb0cb2726903d722ea6c4e89fd99c16e2b331ff5b6ef2c9be984da18f14b4feee8b73e0937fed6fe2baeddcae9a5336642c6676bfb472e58b23c84b66af9a9f3b36564039055415543b1d1b97d99fe2379807845948fa1645e907cf7d90969e89f5e5cf3ba0ebc48a129dbf2b7b4c25010d1c8c49eabaf9960d6c9025c5b8b3a4b3f61d7e94c7b90f7f8b3f48ce9279cd677de823a822bb6412857f47f22e1fbe4e3c491bd52abee8988d3698fbb6fdeb298bd243218ec2007d48f2982739d2440cdccb1a05d9fecb32bf068589003bfcaa51808b51c5080291c3bc9bcd8614fd563079ae4e2bdefd4aea93bd950cb568fa093ada41eb8e9193d0db5cba6aeaa0de00ab6747ffd18e3f1c4166b7758970b2642ceb078f8302f21c3fa77e776222874e94a8fab7b17d9299bd43eb8ae6b7dc3bdb7253affcc218a79f4868454e1a1252cc07bcac70f4056c370ca02208eb15469ca3fc1a27e29be2d391a9a330750d1d5631bd83680bd47ccf9771e59b8b7496cc2db417b41024c0835a37108061a156e120a9c7d3fd71d60d4e092e68889e71c81820585c6636b8fe1005188d3b2732d00b3137502d96c23fcda73cbcb8be6286f2ead5756a17473e9ac5257c8b5c09474bdca21345671c701596bc3a361ca698cd54d8cecfbdc529a49c343ad065a45c26e3addc4a8b72e4b67a13d6f1294d6e215b516ac2dba0b050d9f97327319c0151a77829982497682bd4f1873bcae7e834d8b4264c418db4a30530e4442abe4487d6081cbc617807e561eb08c33ab9d971dac99d325528c5542723711ae2c2a005adc47a6508dc0fe25b5acd20cfb0342fb07adbef8e6d471631b6e75823e1a9c740ba10a1a28bd4184cd0b8c307a7e4b5af79abd7e298a97487b1b7b7802a094054ce14f063589998e139756a7d2669d33172c4e24ce3b67ae2c888b00e191dc83a13d64e31869a20551a7c2ba4880dd83eb5d57a0ead19c2016d153dad85f9059783f8b7bc82bb2908cd0f501d331507cddcc29d8d024de60a868952cf12d557ec972300e376c6ca97371f2ab5cd6585518975c49b6b1489f5b8202c4441ba0c710450ee4c83b4f4ce625d19e84a43e902cbcbc1429e445859762806ae35bd55699b0b5d9a0a2a584a4d20ba1fab978caf8f86005ca24e7785e629a038b731cb0dde98246ce959f159d5b1096744079f6227b6c063493e9780b1cffd621f3142e42560421f7977429b08d50c8c2f543de5d87d6c381c7692e7be7a2ed1ecd898a720c057fde0d7dfca69ccd0585e0bbd0261f5200ce3cc45b8b050935d5853bed23b00603e8487c172b55b00211b67413989f8e3ede0600dba4af3866dcd900444fe671649714380cf395a24cd86a37b0f9d001c757762eb368805016777509bcd100ea12de454615ac4004e71fd965e0209c5c436bc3690f6e56bbe822eb18e1470d1150806fce9576d41c9077ef2ffc3e33738e017c8b773afc7133bfdf03dab7689b12a1ee8faa530137ad08817325c64339bb36b999b3da0b756481c0f6d345d532c09b0a97fb7d7bb4bbc4f51dda6ef4d2eafc8b387e256b9fd89d57c8a8ddc508d0487a516c4b007677f25e05d89ca217ee0e8a937bc9ed1c7b9466b14b073d2d433dc171df62fcb18584f84ec755bdd7ff427dd3141b54141c7f54106f8e8f84f24401879ff8dca5881b123fb6ada5948db882e0335251967f12f1d02959ad42533a53dc858d048f1a678007ac07b75c9e88a181a18d80d79f3a16240b6f77e5861f48421570da2efe4ab16fdb0e15152634190d8f8c8c5c340b042189385fa7655a4a9231c94352ea926087714b5b07cf274f3b5b3aa46016b988cde62b51366bd6e8b66ec9ec1b09f12753e9b68f4e520e6ba54309095158a24a094ddae6ff424cc9fe9ac2ea87b5e088b18ffddc683816eaa7bdde8a453471c6e1f1989af876968bbe292803e3c86a2a540f6593313c3c7800ab7f3b53a0fba43c2042545efd2f619b6b2d97a001105fb2a2de15eb484dd4d0b8bbed591e9753fc722de5eafd4ec8b52c70ad71865331dfbd616b5e83b3ee8c237789d31d7fd70b24c83987add449b118933ac4d75c820a0f50d2f13938774bd9810ec111d31d770bf567e0e06080cb193e2a6af87908851e3d5f628fd0e79b24e6fc40e9662aaedab199b6947e5b0272942ee70d2967e6ade6dc45dd60187501764a3e79ce934932a94b624732bd5a96f3cb5421704aaa4addb025281a47b7706e4c4c55406cc63f7cf754482804f6aa5404b981b626b1a9c811f8090c4d58a43312f8c65b903cb4a6d1cb3a504cca410f069ddc2e5c79b29c93f9c8d4ed9ca5ca9b74aa6253593e4260d0fa87d4a01a2c05d3ce3f908a1c813f092b0f5adfc2a6cc15fa3a842eb9c00c1f5e92c3a8488f3b82c1350f5ee3c96359bced228a03de17562a6676c75f5b913d1919e27e75829701b12f07d158d0781dd10b1003a5a3d64de6d4f86c8e30f381e4570821e20c7895a7d81880b15a1a9fb84ea44b85524dfa8284f5f54ca7677dc43bac228a9799d669dc7ee7db600e2e5ea28081fdcfd3c844b2a12e862124883e4adad569872de775a1bc15626a365a5f0e0b1e0378016817bc987c1f18c1f2eba48e1404369610d7c355182dcb0302a8728caea6373d793091cce1360c2df4088577a8a0d0920d135dde8f5706963b4002de83888717a50a08cfb01783e3e8bc400f2870414e40d33702d497a0d39b50205d9cbf35e7676080b956003b678cc6571d8d00ba78164c1264da57dac901520930ea9cb0e03fa48f4deb5e80783e92a68290184451f47080675a3d8e08c343fede85da0a28193a84bea1320137e4039d428572e119a220f52c6f70b03d07f18ca6a8089dbee7242b1418a859d80286ab41bf2c48e6a44e10537ee0a871e753eef1551411367b10dbc02808f6c213f245cc3a29602809ee8fc3d3cd15edd0f82ba9a97f55982ae6f50c8c6b31df1f192618d32c105024586ea4bc6c573d37c316a87f18b14ec1f216393d1517468ee167d7bc6279015f9beffb61e4f3a35bf108c2a0c83ee7704a008ab600b627d04e32d62fd956bde937ab620ba0a54d33432631318a0dd6b10bb079ddf7130dfdcae86632d97e953f6c11cfda68903ccd09762d155677bae2ddeec6e745de5804f3c2994be6a405efdbc65d2faba189d46cdc416f08c6e999fed3a2c70d00183ca27a656f120860536de5a44430895aee627923d1947b70cf01ffc19ce3089d4efc9812f2fe3e58fce6cd53b73116d1e5ea68190e85ada92d8c013e6c55b142760e0b977682a82bb848362573eec9d4c42a6c664605ef11aab31ba526ab4dbf447fda32c328aa33ef0c6b7f8e49df005af80d03c624e312a7a353e18f2f39c15df15ebd087270b7390e6d84a864a505d795e582bdf476f6d6d153595a20fa526d4fb96f8ab0a0d213ccc3ebc0507468ee08edce4c4ab0c593ce9605da897bc87a92eb96f4150dd0a17755011a4646bda6e39fa2fb300a150ae7842eb29691318508e53439d0f01877e802ac6cabdab84d0beabbcd91cc043cf02de1808bb0782bb960f9fc4727cabe8e6d64260f98d70878a1cf3538a7a46210090cc0b5c7bfd18e1da353f9a87db68b329f2e235fe09290848ee721d2e070f6ee4ef9382d02a24bf73fd4c37a6fc6c5450d93c069b2841aa1b994491c339dda8768cf9a1757371c34788106ba5768f6a6cb9a61f7b65b7467088a212cf464f0eec4a4c8c106b0f28f8be5ebfcb263a9b0f29c9a830da42555ab9643905ac6ebf3b7185a48b00b18dc17dc0264b5774225c4503e384cbc9f01907cb802a56d274446114ef3864d1bbad7eb6303a25a2e91dc41edd4d932a84b38170506452846521e26ad38c86200a569eab3f1217a0e9f460c4d835dc434e3c70d91afffbeb5d4523646e46c515999869ba12e896590f2776511b7a1ba22671c6315517a427f279ea5f7151c6baf88917ae93ac4d0f5e58158aed36b90083daf883adb0b5e509b431ccdeaa44fee28ab0c20cec93aace78650216087b3ef39f032f8b1cc7f1914a93ac3d131f3ab74f49d32236631dccfdc30fec565de1b293e937c7ca97d822820e521da638399df588880bfaa62868929ad77fda13d1b9dc3b2870bf925f836c5963f8df258d491815705cd12c27b56266096d0635de9b9f00301394baf0212b3dae4b989234cc4f3f475ab9659b87f8ba6e6c04f23afeb4f94a9081e5e10186ddc7b00a3ef1c77a220b16e401b7bc50f3594fc791612c803bdd6297c9d18f34063c195a2f65546c7520b506432a878c4778a9bef97ee8042c18fd7de61d38447c99359134df2f0d0c54dfd710c3b601bcf42a9418af915a5b36755095ea1700ee7747537fbf27d595da0dbd9501e07f4b2ef2f88b953ee97c7d7d7ffb7c54aee5f60c6fe7c40545d3881f96cdf0ce443f11fe4a4034588e7c3ccccb508e8bb4d044516ce4acd662c352f23c10664be31dfedf6c75987be189cf520bd34e67cb08cfc17dc7c891058db7d7c5d365943cbc2b71af43aed9fed850bd6f521467640d27583d93d8bbce00311591f299f684c0a08f09758a47e3584845ab314d2faa2f746990a1eedbe30bb2ff28603ab220a9f7559158793355e24acda261b6b8766af348da6c7aaa9b6fa9310a85dc836a261e71fd5e9a84b99771a3537a4c8f81aadf5357c885a3fd2d62f10de30fa44c4d8f9a5d96cdbb613b795b6da57e32474ca2c9e81b02c7420f7b645ca30543289d845a4d9cf4fb36db631d2298907295794b34692f6dc84af777fdd11feb0a2074643daa3179e0c6aba7055afcaf7aae82e14ea1fb6c9d36f049987120de69c4763844941cca905f32fc0fab628497471a8a8506d0084f4827292782253ffd94d638c8be87af8a6160f22e2eaa260632c0db7720a33533a9ab41178412df7bc8ed5903271b1d5e2b865dadc1dbb8bcd2bb6c8f0c9866bb1fc93fa250f9ffb41b995f9667e385db48fee3d29af5a2cb8fa5727162fcf8b5da7ffafcaa0a11dcb147721ebb385cbfd434f1f506546972f0c58d3ecfb2087c7a114bbb6bfa244db9a0247160142c81add34a8038380d63d6832ad1861d8d0309c58bebf714537ab4b40ce1019613c06fef3012da86e806b35f16e7111c9445be311b7cc38d74f658552cbd04fc5cf47911e7919adebdbdd6323a7ba316cdab582fe2bd052834e6ab93e5948a78bcbdec0d952adb955fa351649c05962b5419f1bd1d405583fd62c85d67f675a3d27014d1821c64721a30fb54e55e23bbf79d1f620d265d6a57285c4248fa42403fe0cd28d49d3e207002d12b5fc3bdb967f760138158b500c311b204ca7996591550340615fdd35dabd629c17515881697d5bd19d97284616ec65069ea15326d3e684de7022cecc4f7a56d62533b9672a5c1f07d68f335219bef38b824dba5cede9d080825d13c1f615b2e4ab68ac5db8b51977b853a6ae8d14daa30aeee65ba43f80c529cd2343dbb40b491f18ed3dba0f1c8dcf99f318cd91fc9c466be3750a525aeddd95ec72cf1a2eec1313b42bf31261238687fd23e34045671935a3769f1894f2d9dac1282c96b238bb27838ff202b93254e5f40540d7dcb241f68f7d048f44026cc0b15b10dc760c3729134b92def0559c6d7884ee29d581ddb0fa953c6b1150ad2e45472acb6a1cd71770efeb1ce6ba98b58aee6ab0651965f00062d9350f75612375029c104bc1d8db6ff53f8f1e691a61b02ab5c8eab408651194ba8f9b8949a3696dded7e7ff93179e4d4307a5da8982c6bca181045e2c78dae4ce7bb06300b12181d58bff96843fa12bdbaa0d5a654d97ec5592d44ffdc80800ebc8256aac5b549dd1eec545549691635b2ae87ee19e033a71c1f7ee0e8fd7ac1e473d727ea7c1bd00285fc4d826064566924420d2412cb943370ec1982499235f8650c28f47f40d43337da2fd0cf56cfa5ee4b56f4e840ea3c3718fb3e0f33cb919e462c4525ead7ac524cf9d3d7c36f522882d069c81b8e664269148bd5d2d65a820fc45ab761425d80a9a43e9a2d9148b9e40d4162cdc44088df7b3dc64da0497440ef3ebe8e365358f872b82a7fb577150929b68a91578fdb067134b97728724b0cfea791e101d0f94875734ee8c28c8572523288ba62ab83c9f8508c72a607547c0167b5d0fd2b7a63e5ff8738601d3e1ff6e578d0c54fd210afe7d8d0720e8032839c74916149d0eedfc27c0c56c20a935870d2861960c52ce5d7cedd9cd528b14ccce1685e39ad0a5e8d8e50e8f39840c6a4ef01d03d935838a0927213afcdd8c66bf022c7f4e27f8412e061bf5bfce49222947ff89ecf8a3f951934721b46ddb1739265b4b995ec70b4e661473e7851d0e61002521dc0521cf66c3c12680f1799c0aef1e4586a7ea0c06d9225f15681acea99bcc96a2cf296819831e024e5ce75002fd2eaab5a2695f03140a7641fb96676407696a839a5c1bd443b3ce00fd994f4d090217a7300ac992f619731de026e6e0c9565f86a36cabc77c21d64d5460b675d75c4cdcabcf709a87b263f38270615f855aefa1afd38a341f386ed29d34ae777257253cb4e763ba3e6a0da0ee56f42f0039b6a782a4440473726c22594baee365e7023944f836089eb730a37d524eb20755094da231635f7287b686c6e59d086340d2e134d0a4527e643450d5e5454568cedf3dc339c74adad1a5e7c9111b611d11db9b179efb257d1baacf4e2c5b5cb0bfaaab488b4d147df442d534e1b16c39cff91e194870edd032013b430a695f033b4ce95964822820c792cbd4f178d79a5b601842d8e21b85fc8c02b08b5a95d7ee5b1bfa0ed75c0f7ae610a98d7dc6d979956e239f717d1b838c4f7336ba7bf05b0aff248a88d0e0d33bbb656636dd98e97328018b0ee57790225e331528edfcf88ac9b438ba451f67b8e64f2b12091b825842111b68ee2d12085d08842bdbde3bb463401184bc84dac3ae04556f4264ff64f0277cea975d019811dd0f354f50581b115c3efca4298933aec62fe823e6bc5c9748a12f4b8ba5128b84f61e784525781c71c23064a648ec50b89e1c2f4282144d6704e00f480718148da6cba8644ce84439fc6c0c84e34bf15289a11fd06b2300e39cac89efce13e010f4c2f99979e055a18707c3ad1a68e7891515c76dab8938c54a7e5acbdb5a4a127e030e126e34ffcb8f520351be971232f037f12705bcdb234cfbb2804ce3df0c95302525c60a21ad1d2a56fa11cca5f54bcd969508938a3fcf24e79b33451a3104ca08a4e8187a64d510cb803a22f9cfc49cb121c611ba5e7c449aa4c210cfce0c84111026a01138c44bb9fa5058e84740732e0b5e8fd938197b829218b8216e5c00320d59a152cbb90cca44f5505728de72bb7beb6cf3c3890163c3181b361e912d75ab818fcb69053a90191b1058124ce0f6ae6cc8c82023065bf6f58c691912076295ed77c8c800238329b61e57333c8b0385da377ad8c800638314b82f73dcb154bbd2c788a983a0e1debabbec7232889161e3078d1394211d101cefd41869c4000403604c2f3ecb4d8cac38c412e821b04dbbaeb1a306821b032004e3e299f4992bde112a1c4aeb94053360cc39e0e0dd16bc32d3b225199256fd27215f6fb34885bf38f915a27f63955364353bb503fbdf142d061cfb39c9d11c636bb3805fec5d840bc62dc2c15d9bca98011442988ca4a88c4da5875e63011d33429a900ec45c8a65de263e45f4d1255499e0f6846d0c4732074e6da7a709286454c159b84caeda00d8a458bf7a00c059b4442896c051333e4fa379e1cae426cb4be28fbbeee37ec354ad42d81db349971ed4dd0298fa241834c4fff70385d1f3ddb85e1e6e8f6fa48e3aba372f5c0c4d0c5e8da0ac29d8fac1ff17a23d38908da0b593c2b1daaef155180f3984c15b4d83fee045c9d6988cf21f3aeb2681d131a0520abe8e698630309e2d30e8a704296a332e2dea68c3a92b9c84192294334f7e64285a5cffb9814fb7679a864d1c3892ed76418e562655b9153a090e40c31e9a68ce34a2fcf71b8a3528a2667993d2c584206ac546a5e48e201004b3fc7d71a3615bf079c2525a60bf0c244e9e0ee7059c481e0b0e593d2e60e048612b07a85fa7f2be8c756dcc982b3db96f2e4fbe358b06ad6374c0e8303734f77e318b9b10ad06fa31d0b6b44c5b540aa4e63ed787b25162ba779cdcb9f2f4c925d26046d2c75cd7e5f48a6fe6a62028e5b764dafc40199e01e7d7150f4895d21ac3e88fe7789080530d83d6dbfe3743b54e856bcd520d0671707320815da7d06c3d3bdb87c4cfd9e468bb4dddbe7f43dee2c1f0de852b8004c3762cc01aec7f094516bbfbbef3667837001bc267e7f77d74118e8bc35c680e28b2617bd98108072ebcf22da8d833160c1ca8bdc47ebdbeb412bdeadc7d133dc8adf6a0dbcffc745f7c801d32fe302452287b5df4a6898367f80d892dbf2584b4189d70c39a60c5858be955ac5eee6da5582fa4920b82f96539b5941111125a297221a70b9a1ead7d28fca26d9b80c4f354090762019d5e11c93edb00b03cef6dfc222c4d12d80b38631280e3f48688a90be4af45529b3c87503d22dac519575cb09c383dc012ca1ff85d6cdbde530dba9ce94e7af08ab0ac463b2f02d01611da847b3387adc9e0d4984f7a444e130cd882ee728592eab4e4ea1e7c289a8c2252ecfb321fadf00d0aa8063e35c04ee3a4da34a180c8c215b943fc8d5a2d61b5a074e2bdd548b7881a29ed5af9e252ec8e32c1cdf3e53b2b16d79d9608cbc760449e03a980359c453f364f47c9ee3d6484e7e24ae0d17f52f3e3c73b0887e4210e7b88f317e5091d88c008f7e68c58041bd5e74e7ced481600d1fb682fe97d0fd61f4404e76f8205b23e297cbd784e13c13757044f038918ae7a86ed1242bcfd8da040f8812ce141f50b2141f88f2801f12f6967e58dc672d221c4a2500147cb55e0818c764c0b18bfb1b3e1e1480aa09caa566b0b408e5d18d1b093700b22eecb33788646bcb882b6910952b9591db29dc2001ba213e268206b5969a3981c07a0e107e025c8761bf349897584c11c90d9920ed7d8292e29da9e6a20421ff2eab05c4d7724a0320b983a8bc0b668622376732c1d0a430d8fb18a08bdba854f7afd970e45d383782c4bc80b6401ff10b2522000e6a4cb085c7a81dd22a345a7ecc5c42d5200dcf13c41bbd08b090a72836b2fedb9470b9372face7ed583c971a4210aaa439c3ad363f51bbe20c1d190793500ebf9c46dbbaf682492754a72fc2b9e7d2bf11eabb4560338674f426dd0d8665435bf55c6a8a5ef7908f0fc0076db76b54ce3c8a4f1f5998c66ec0ae187d9f35d8e020b4c203eb86a856ee359505528ff7c5dd30e0ac9d4d98f04949b648f6b6d11bc88a6bd2a045e85f3a9c32c8d0bf113ecdbe3378041e8e79db5bd7e9e5911fd432b3df57e453845a872d4eaf0d3110a9b496dfafb562dff384cdeab13c015f0592638d641cb4d8fd1d062502f0d8212bfeda2ecc814a7f2f61b403aff7d56063cc60198e6928d264f5862b9829d9de76b5c769822affcfd183de32c499b336f145552b4f551198e5a895892804d09486d3b0e2010fe508ca418a198e9b0798aeccfbeceb751a583fac4103549f01e8fc2f8aa2d12107a35dfa0bb344085fee5918488a28bef7a86555580b0078f4c471f2158fe5ece56fce310ffc0bf8f9f20a250b40d328a0b41cb7047b3dd007f91c57d402cbc6e6aebbda9b85e6ff1a2e5c47d6d3a5bee30c22f67f8040618d63a7dd357eb638cc24fa6d598832e49c2d8977f3c96a7dc560ba726ee5e2042fdf2c6b6c619d1187fe81c938bd39549b9c8284299bd11f995e276d9b9b2c28f5796eeb14ad2dc471f5de535955e9c1818925c9c474108a33fc56d1dcc60a957b57f8041e0a807cb1a46ff70fe075ec94d90006db2ec3048d62f7739ab8c20b22ad2a3f70afd1250a5181fa25478a1b60ae4a93d2bd8a0f8dd0774d6bfe0fc892529049ca1f5cedadfef11bdd6ea86f6bf66809490a5b5373a30a72ed109ff966dc260ba5fc97fdabefd1239b1f6760838af994c3eacecab7fa517ab11189d02713cfedee16cc854e9bd64ccfd2d4e8ae64cdceb0adbcef490dd28d261cbe97d3785249c99e93655738a11365ce58b28ceacb54d4c545481e090d4ba73f606580580c42ea2cc82cba070148ac70343850eee289562330aee676401d51810a1d70a53e5fdd80beaea847b0151ca9c770b945a41b6e538fa663215bd458d7a1e942ab4b594c468ad5a4912974b15f393e6d38870a85c7c0462c69c388b1efc92ae51be5012695fd0bf645b8522b19b5f2ee50ae270ca3ec4ce61283049f028fcabf27b691d020cfd05025eed9aa535f71f03587302163136b94ad2b40f475c99fa33d41fb788d153c8ec4ad249bed48229c1f0f456af710c8c59a69d60084d6ce71c410ee1b3ee195b2c6c2bad31ca77f967cc9f08e34253bc2e16acf8dced5969ca5fe810fa33ba3985807a511aab1432fc1aed454626f00850c15c1d8b503f262bd837477ec910fb7d057a6d4cb3d21ea68d81a8bdd2b99293898ffefc9f7bca1a069370935964b63919cfc178a80664cf22bf0741d37f66dd0e78962a79aec4c0d49083e48d638f5e3c5ee17f3ea76fd90c651202c1d10157e94fdda1ccffdf0ee615f446a65ee05552317543bc62f289991c471196e1b1ec01b582e69037b5c584d718ce9616ec97c13ebbea59efa329b6867755b59bf562904c3b2a811b02bcd08e8cee9b4b5a78a60246e344098b9a6b6731800a1711c29df16ebea1cb34a263ec83a16841d2122dd649d38dde9b4d724dfb1b6e4644e328331bd333e0afad1175b7ea6d8c71b2aab58a3a291b12ea819ff4a4f383f26d788b16fb8713efa7a469d79f5caaa6f81c0bd2272e04a74713e436f63f371a755f895fbf326d46266f00cb767e94e6108c8056a2b579bf91e3674047f0974bea0f014f6831d61ba8bbc5021a358193c559d4834e09b03cb9f26811ae25c5c699c92842bd69402060d5cda202b9625a52c62f012a627ca3a849f582e14bdfff657a1160ddc952416a97207a7c64aa6f8e1019034fc13ef4c9da4ade61f87f79e691ad2def45c42ceb3ca9211bbe612a51c8b86acc8225d450c1f08e72ecb4893e8b81bc2dd39166f30f3cc3ad134f56e2c58b78fbbc18f812273491014f1ab98f87f5dbb4098b665d40bc9373d0bba6f1e70112dd1d5e82c3729ca9bb4a7f1ed1e0a95d097e696f6952a4d2619fd910fbf3508468f25051bf2ef3e7d19d0c6e10a1fad10e0f873e9cc892c9a2a29d8387ff2402803e1954db82536fa904f29d72f814750df8a660c56508d7d036a21ececd56720a1cd61c93d9d43b1a6914c0917ed1427f0bce66d27462d2b4730d1a41ac0ff247cf2880c3b31456ca0056a8c450e106da49e180525e7204a48cd66f7cb2804270717c4e404e8fc07eea08cb3206e0a24a804e30750e5a05041e7761d8881c5560e2db1b78103220543c82df0b832208d4a02ba381260eb2418a4701091bd98e1fa1c9f7a837922ba118ca212be20d0938cb6b58a386e35059b30b4f71177e2b15f0066c23a59e6feb4bf22c27d34d1dd1f991e62b34c285d1474f3fdae3aaea92ff01d9a8c0d58f039fbc51321dcde2a4375f772977f9579f0e7f63810251b99596bc243d0c0192cfc9d9a1c0212aadc2eafbc80812455b53c8a7536c0d648ed944af6cb98040950bca1fb0ce36c379e482b252ad488070ec94d0def4ae9f59d1e0b2a2c4cd08e91e31653b81691c1b080845f2b6354215a08bd06c20aa6939f77bd3c2809b971eb4c4e5abc0a457963f55432d9576308784678d1d26f126bcdcc1c2fe7577e14d6f070b53eeea88c0f3e9a6fba91686070b0da421ac9a71ff56e5ac47249ec71b54b3337a34f3e72d2d591af0a01f946fb075cbeba4b6759d361aad5f232c6e3a50be5bff6f0080358cb6545d479617730694d71f69d88e1d0dd792c3ad3252848c39817a0eebe937a0d5637f0e350fcce590cb83b446c5d7a0de2d9ff4b0ca57e204749aa0c4c95c4ad15cc37e727418fdbe7b9d22701c1b2ad7696d2dacddace2b54a9c25e431839f1c8666e42d0fb0ee8368e7c5beb6b68d80c51180c316bc0085da56bad9b3cb7fb077846cf604f3df080f3ab80bb5a6d4c7351f5156b74970be1290f0dff95ec1aca7696d7135266ce488b8b20eab09b3b35a42c1d4c63bd4acad1f49919621f4a87ec7bbc2657d31695d92c6c3a16cc7565131292387f50447fa56a81ed515bd3e4cb90bf996884584e2860e728396822823bd83ba943da8fb627140b99616741a8de4f87ec61944e6fb0a6b8497e33e7d4c40cef12b4c9992ddc919604d5b217876d443c9f1dd8c05230ba5159f1f55d1a058834836136b7d09d9a3a3f61cc387f43f75b2b74433d565bb133aa69a15d13ecdc73272996d0a9fa538be0c53ccff0ff6e5581574026dbb02bf9685d942c914ed3efc4cca6fe16f5d1df4cacc34a1b9063314b27b6ac07290a9b7c99d4cc3f1d4ca96a487071746580e993067cd09e8fab2cc34e337539427132a0ca46d135c73aad8b72db90c90605957df82b7d288f3db508a79bab440e20875332b6de5581273ea683d6dd31d00b58029521847c4666ecddc6b9f1e93c404f1f672e9355efec3318bb43f3ef0891b42b51805d9e0734f59ac70fd53172bc83ec859bac12dd3e9c6fe017a25293c6449934a4d5c36edbf6bedac10043119716f3457963924f7273a298762795ae79858c7e9acd5937117d00a7dffc41d4ed073b6286fa5523953e61a43d9c36ebe1b52f84bd18cb81470290c54439ab006bad28db83f3466f28da169e50c6ad85d804a45c7b4c39c8869a311738a07b60545f5c8ddcc0a8a1932d4ed714d1ae00e1a5b849eb91c931db745082494fc3a13bb3c020ba1ca23253abdc9e3af6ccbceb52445f45fcdce49bf6dedd509e54b2e56bc28aa243ba43cc48278f28c4fb38c0cdda4b416be17665d8fe99cb73e456a96fb174f5fe65aa22995f2a77b6dac4443942ed0010d2399f858832e8d1d44640258f8121ed44407b8a00c978e08d1945a379e916bc051dc7d7b7d98bc66be39ecb6b339ad8844197d2478ef1849eae373d4b71357eb1dc117e179c1ba2913357f683ca4b4898ec3869337612a89641a0f7075ed63cf81e52cd4756f4eb4aca26af16bc3badb2ad1a256f52b39beaed0238b9e7e39d6d4c06df5133fa9d25fc1e1000b7f4d95dbff62ae65d02219de59e6325b2d9ebca01c679914cf6c0d4fc364cedcece3deff73f4dce99d4ed2ea0f03384f158d52ce3dc729b8645567e1080055403f72f2e83c47b5c81dfb1926abf1bd490636cc9ee45d1f6b941062c5de9de0fb55606728a27bc4c26bc5a990842d39c94590b03368e28848d48100ba625df71c315d8863967274e510850eb747fccb37ffb63a832217eb27162a7fa9115aa6fbb073874dfa117ceed549ff9d51dddcf210a6b9d370c958bedb56cbc70175172403e007da502c76a8ef63d6460e87ea6e351115e3af8a4a1f67f13ca461508a4326a978bb306ffbc7ff777052ee7027620c69092e76424546e331a1a8b2fc6eeb6714592e6ee031460263574ee7da370dd72e3348ec64a1bb5696e245b77bb131bdd298bda9d75b6401c0482958af61c88c3756d0ae685e3f7ef661080916773d4abbb8ef0fda4b2823057c39043b51b7a4fbb03bf491097e790f724ee845aa02efe6893dee731bcf2156bb2faf80f9e4218919966cd79d5c1f633c5091b653d60a6560edaf16d171292c4e659e5107186fb727121f28faf676c1223c856349d0c2d4f1d48023f65c9646336fe2a3f2a156fc1ba1213b2662399cf9fa3a4c54c0223fc7a7021a824185b9b3b9beb1468ad02170db411975021f9c4a48ef0ab3b323626bc9b65e9a698efa3d3c4fc3908b76d7f082fb188bb7e1b7ceaf41ae88cf7f2cb980ac8e36e4871a2aa47fa12858c91b2c6c92a3e28fa4a63b699247f0ecae5e190f480f66be3affcef080d7dc762841c93a5078da8f54ef1781ebe377216588f08eef9516e1cc55eaefdcf6ce1d3f1b076cd7e91b1f66c80cf83ce120914426ef0d6a7d1b53509eb4267025b3b604be09232fc0a6c03fb041106490d1f382c942637f34a385812c6932d4912b435c0938e58d7294c9c0d5260c1e8d51dea5bd03eb7787c6a9c4a36c9d7a55e879a19e4136e700ed03ef4e2eda48e046688c5447b1748922faa7dc8ee71c176fc1e2395fd86ea60cc034f0797add2e408e996fe26ae0f924dde5b30b388e4f760fdb82c24d49f793fcada3908534681d5c92085283942d6a3e088a20e95d9511109ab5322e5b22d3ab63ec66144025774a24883dd53ef1e3bd64eb7c75a5277fc0ace0670f3eaa663787168d8adce65acfcacd4576aaa329a68b756004471a86ca7d0a8c1b53a178ee9a37a55d12b5f9e6d9f3309ba7d8b49b2c340a907bb31e3b665dc40d5a99d8bc2c15a84c2cc889cb5d3d8ac7d013715c26ae0c37fd0cb38430bf6a368f56f66ad4cac6422b06f0c2358439d1fc808281218c165ead5a38759041e72147593db4f06fdc58550a6c60b16daae61388b86d733de1f43f2e1b9aeebee1818c5a64918d9a635d117756ac55535a91e931af139767eb220f41f776887ae9540af94fe49744294a222089c9fe2830d27fecb1522a50fedd95370cf69886ca30cdf26298a5158272363901112cb92035732ea12f53ccea0d8fe63d72c1e022a0f5e5ee001e6ed9d199e346742b11d2e38528c9c3d7a6ba760d9f573c50160b11854c6666918d8e0b87d3cf59470365e4425d988b5be9e5c7a4e3cfd440a4fde447ae0744a54e57d344453f4bbd7458fc814e0b2eb31be72979c1fcd5ca1b3dff87a4604c53496fee9803816784445f4ccb181484991f0e36f4b051950de603d7e52156b5520f40111c81b3c0ba2a7484e2d570147ad60e617296f75b5aa410d136a32b3e9779deb42ba6337c4be077a19e7e2cfe40918107a5b03fb3e9b9095b71c18fc1c7870a88dfa33d09f8080a38a0e508b1ea7c7a13bff40cd69a59c0db0db9b41484df0dc1c097a98d96b6e977db3b6eda6b5a8bd52f52552c042df533c2aeb9725d2467cc30781b625cc3a24f6701460d2a8938809670afe94a5bf9e59887a6dd9dbec4acbbc80e69bc91ac53800fe0d3b2892c0345ba4231090e686db8f5270a60cdf50075a201c1982ac5386affd5295d61e823d4a72171dd029a627cb63720a14bc3664b7444d97a85c01e2c07d61a543f0ed2dfb5e4951ec171874c3a0d1ef6994b884bb43ce62b5f16fda9a3288425aa3172568bafdb9d1b2a004396a8f5b191e8536d64b898111f9131016f4dd68c9b3659520da3be75cbab205fbf82dc367701c54bffda9a386d225e8ab94fc66d1b29fff738de3a5acd6ef956c418dc89a3f3b182b685438d42944a7bdd7f11274483a506f9c71ed6a76196996cac3a3f4e1bc54a1b7b2b1c914c6e6a4b8900d809f3cd58dd0e5a8420835442a0d5076ad70ee768fe1e83e2f0ed2a61e43e9cbb671790b7e754ceb670b7ecae7a1b59a1e0e9011fb63e595338e55b0a4356264e79437fbb7f7c6516f293d8387ea3bc7279b343a04933d5db5bbad0234ad2bb7f268125e5440a236cecd9069a8428a6609a3621b9b9874993103ef6b9f4e8b08f0d1219c4096ad0ba22c32dbdb901a729885f1a3263ee65906ebacaa272df4ea920242d3e70accb2198b34d06f7324a05930366d41d1b7333a1ca8a82f365d5964f9ff2ac3eba516f2b7dd963d961a2b025a74787b68de1612425ce0854401e264de2bfe0c1f87c0520105b1ee481b81fc4d059735e6925dd3d8418fb644eb5d159f51068da5e7a164d2e1a3e8ac5e9446147c1747729daf5327490dcb9a5fd7a76c21f58a3a2c384696e28d59232c8dcd9b1feb4e31a294923709a7863732d8061c894a32a61b3f62a7f8abb3c95b1907edc394d637584dbe49f65a062f7fed804b201dc016bd672c5b1878d43dd81c45707466a1606aab9b1ad5f6a7b489940d47e4830c11c00fd20001379e4a8cfa5556ca6c1f9c77b511dd52d3716d97db4d7731ecca8b454d22c0fa662b6bb822fc9f381a665e0d2715369cd2f81bdfc5cc584fbf5b8f0a9cb8b5086e727cc7a341dab80c41feb9c061fb03a2c6b0cdb5f832266b61336a142d1d13bedfec4af2861ccc1a4016221766dbf644427801ac4f55b8c33878f6e62e7cb423e575e780bd0613d2b41283c43e6b907a577a2520cf83d1ba44442e0fe50a8906c0d7fd3cc7c481a9b143b2398489b6d6398cd308f20e691e3a4c6c63e3014eabc1756c660852cbef40411b9d03b145495f69802244824b7b181d50da9f8cd26b08df23dd46cd92e776a6a8b13eb05712f0197a78038de81b6c9e5565d76cba4e3da9548b1c72adda3203c8f887f41d5a1c0ef90ab699f50edaf7dbfc795d2d824cc89736a20c8dfb0644cd1113e98a44560c52c3e52b66860763ef911e7f3a91f28c4073cdb7f0cb204a781964daabf5b8f0a1ca99f582b0dfce6618c112f9a232e6f110d6c3248d8309e79e07fc1c826e3201e27b16ecfa3f3cd64227ce7ede26dc1d7f6ab61fb964097c9fb9c3c15f0aeab137cccc0857997943e7b849c55f8eec30b5465ef9bf334a4a6db69ad1aa36d37e63f104bcbb09ca80fccafc3b06ec20cce82ffb2dc6986988b9141c8b32272c1bb821d8eb79440927accdf8f2cc2678cd95a2e7debbab571ec9b983871c9a04e2a1f230171b3a81ed10e56c856c36d6c0f75e87204d59021ee7d02fca1bc7033e3de1f5e10623c8fe8f0fa0351008fdb3b25286b8e5e3064e5cb600772c8c5d737743797625e2e803c463f9f30e0cf56c725c3b1288cd1b79ce115f2e88486f8636d1b5d09b78bd1eb8755c86a78e2681e2228399364fe997a1ac04ecd3e24055d6d09feb306887b6316fc98827c36092d95dd868c3c201b6c1f2ce18b008114aed3eb5def940a7de5f535ba5b8096f694fcadf09307d15b63a8884fead05c061f126d28f2122dff5253c14170c5b0a7dadb6d510127c6faf45efebc5bcb000fa1c7814344d60f2dc5e563c1d174dd3510c01dac631d831cd17b0463a6a497b3db24f9566bd50b524b45e2568a08594c7fdf5a28d0176ead69e26c0ef2bf0c85080b26d321054c541d4cf29d12f7d0a0fe37f5b015405b9fb6897d169826f3b555f538c66b159390b569283fdbe476a69eb06a68d8f6d698541df4cb4cd5ba0ec280d5102b83ab69f617a17d47e0cb13c47a4ddaaba5f8336981643254617c15cf343c4ab76f23edfd9dafe4770d39d2f5f21b453dddcb070e4468dfc8f0bd2246c035d008cbee47737338ee63475b8ea80770c03416c0f7420a941f7600b2d7f35adbf5a4309ea9e386c0514f660d0979b337fe8cb37819bfe5aa7536b83edd3a73f1ea45fa82bc39bdac9c5d48132cf46a9fbf7e64461533a6e2261d1fb7d4611cf3a5ab2bc9c512cfa5a3f2348c30cd8e5ac03631f6add4d30c1853479519e2b3f0cb21f7a6687448b1c7ebec6527e22fe5f97cf1d2586a31475169bdb17cbea27c3b96ed151dea5c95782fecd8e91f3982675b63557acd6663bd90e134556a52b15d35de809379e71c3b559a0d55ea9a70ac9faf50354ebf4832f8c56c5b77a5cb2a3374e2fa346d8d82995d0e7150943e7e80e183aa5d8398042a09d4d0118051dcbe83505b8d3da0c64f36bd1dd583424836cb15d0b9f7209837142c44021d017fe74416462ff58592ba0a91b0962ea663b60b3dbc0a2f00acde6117307475d0f9fefd4a47e542b812b3bce7b770f3c38b9237c278a43d7c2f8ef29ea8077c8234c1f346291528da8a037fbe5978b90cac57322a111ea1ba523fdce705576c7efc664f7978a5ebbb7643fb5800fbc1a8079ce3d360397f2af464d72e2e35b636bd761ac797ee8c568d968e58f1177080f593b968de6391cf50f2a55d428e0acc3e136aa2c4140d0fbf567253feb6f060c6cce24256833685b3b4a8af338ee829327663c9bee0b18ed52d83548275c84e00b45bd6a1ed909a8e2aea641d8a066dcc980654d47c607a54f41791604f3e864985933729a3583b70854e545b90b9d70c6e24162445f66758bad4a9cda194decc8ee6f2c5d95715e45a94d38deaed00296390c8d732b20a010b259e7d9757046a7ce79834399f87c7e57e6d01548b4f99264bb4828521c137dcfe529579795e80c6829dac86dec346dbe4526d65f8b2fccb6667d6564a58608715cb4db7fb188105eba540e1d5d373e51fa11e275c723d2a638a7869642762601a9694892beb2d47b5e234799d1b63ca9919e0372635aae3a693c5627b1d97864ceead6ac55ed091a952d9d1f94186db400c2cd281623039e31e70ca0a306e644e8b3aaeae2189667970115d3784a7fd6a37204376adc8281d23a140cf5fbb145966c03193189f8e1751e7bef1b452c7cd967c8e15c958582b27cb8a26cad9f37b83a126390ffe8cd17e909b8b4d65441bd045aafcad13e917dba148003701265ca00a8fff4702d4614a025887e7699c98af93c0f0d64b5c41c6932dac7bcc2b3da66ed7e26414fdfeaad05b5a72de9423b38d24027da8e4db66bb546c1dfbb4b1a60211316a5de16c64dbc05f134a4d1dbed034733405c4baec809494dbf254a78758a5d25bc461f5e14d42c8bc6cfe11ffaa0ad4c688b82801c1d28054e1a266af7b04c55aad42ccdea664a0222f19203d355f1d2616cbfbdfc9d9fb112d02541cff4ba29d552c4d961c38ac3a6b5a4c1add33e398b2f1d61da401b649f614a4a157e12534a4e9190c73730e7ebb173603a6d8b864115d96fad73c5e44ae9c9a6c238ef521c752830f2df49c8de172434249093e47422333be34d79bccbe40876ab759f9884846b1af72a87b290f72bc0b3c935c5940201821b8558da2aa0aed110ff76357acd46333e52616a1aa9678988f63b44c88e6a9ff7810057608d902c622e9618d3cffb5d15f4509c6c90da95ab0a7fc9f76a06c79bb4e29ef27a1543b9fbea63d90c0b8ca3f71d4166c4d2198804c553bc0a5c287555987aff2c3cae60e0748e5af8e387e6a211384281977e21dfb4cf482f1afbac211637c4f2c9bfef342df44aa7d60b15525faca153481b1c5eda5a2fadb685e4827d9007246e1cb9412a329fd214aa35796ed7fb402116b2d1afab15d738a37118392c0cbfcbab49644097ed1461e1a72ea979d7b8c75185100ab7d128ba5c33d269eac27278941dd68386876986ae7a7390197bfa072723c38585aeeddc01c8d59612221a5346db539a1bf9ca013f74183a185405cabc5cf3abc78e9ad0f7caa860a1733efdde7c6c3f4f430d45f2cbf78249ca5defdd29323dbb67a19883cfdc7bddeb0a70140cccebd8456d5ad6e684e334783f4d5e65b9a2f0ab48eddc318c1b49481e755d22d8fdce4c368bf31ecb91691074a01c449ed9a8837640dd78009e703fbd5a7ffee028346c9174db44dd984b4e2fcb15a6b2b0f2f1b7e0385bdb862285a71e975106a53ff2e09d01e775f30cb528656ed2c71fc4a2a7d8c066f4d9278fa0c27a563cf5724b16feb5bb9212935244f054e23c692154f1038f36c3ab264b664b624b99cdee3f9007a8fe7735a5bc38d720c6c33b3051cf4245fb8d10b1328591b28591bf4681fb8b1cdc3295131470660ed168a0e4209f8f8a3412014f76eeb4df6de524a19fe14de1686156adb5f578fc7bf1ec288deaad85fef70436f55b5528da7d5abc6bf1e428adee9da5f4fcd52b3bfbe5448efd42a0b31f1b4faeba931cd42db8c7fd3ac6ffbfb62dde99b3c366f51b479d3cf376f9a59c3f3a69fead03ca2c7bf8eb4a537eaf5d79196e88d8afd750f54f4466dfc750f53f446affefaaa476f9dda5f5ff3e8ad6bfbeb1c30d15b07f6d739d8d25b47f6d73ff0a2b7aec75fffa0cb750ec6e89d63fbeb1c90e9ad23fe750f26f4ce8dfd750fc4eb47627ae7b0fefa1117bd735b7f1dc41bbd4fb7bf0ee2a877ceeaaf9f69697f8fec307ad24fdd23ab569224c9274d27cb1859d3f0a5e3a2ac99236f7aa90e5f1d9252647a9f607ffd498cde27d95f0f51a5f7d9e3af8740a1f799f5d74fab2c3cfa3aada008ed17d2d7d117f9dbca421c1bfec291e18e3836dc178eecfa4e87deb8177f7d67d41b97a6b789f6d739a0a3b7b9f6d71f8ddea6d75fff337a9b627fddb4328d669669551aaf2fb9e95daefdf5a22d7a97637fbd488bdea5d95f2f2ad3bbdcfaeb645b1662a25516deacd29885d9f8c344b2edeff9c6bfce8110bdc9e35ff770436ff2eaaf3ff1b8feb4436fd2eaaf734045efbcf5d78141f4c6657f1d08446f7cfceb4f7bf4c649fefa931ebd71d71895cf9ffdccaee314cbfb398af43c56fcd2491cb5a13cad10b369594366857625a5b0310b8fbe8ebe3850d1fb08a9ebaf23752179217de1a8fb66bee4f9ec248efa7d3efac2c27b24b684e4fad211cd8ba2b765fbeb3c2ebd8bfee8efa39f8fe6f9d13c3e1c101f0900376f3971cd30d93d12fffae95938341402eaaa9bae5d4b049ca79ea66eba08a99b3f13b4701a3c83b8ded9fb6bfa0e3a007580eae64f4a0da10a355dfd59c06e579c93c00b30018214f6a1b59e4ef4b390bdc49af3069458d11f0cb444c8b9ce6170a25e6285414e77ad542210a43f1358a05aa511fd6c661af29d7eb3db35973d842a9dab5e22e7fb5ae51c567d98cc878f9929bb00a25cb1cc74fdccf9e939170175ddcf849b9599ee69ccd26559286fcecb5ffe91e1e315fb8bbaea5a22a4ae739dce51174197756d22e85cfd9970cd7eb72d335d4f7f3add6dc33ad4758ea2a8ee9e393f3d97c36b99e9e2a3cf66267bb10f3d75560b672cc7096f444c86adb0898d7f5d8359a59041470a972d3130599c9424511246668919a3d815a1408584a029a221121952a70957952d68ebc564601a9be1321cbc1b6c682c8683570178c55d3a0f59d75fc764565882c599146dd6a660b9b9b14202fc19e4030b12b63a50d6ebf86885f68b1132676145c608125bafe3342b2cb1420d16b42f3f94bc2192d11225d631ee6afd34cd1f0c6260e2f4099c9ba04582f28be07e388f8175b3a48ab89e660ecbe58494c76e892c87ebd6a77bdd5b758899e8fb9bc83600d5e71d81a1f8d79afdf956bdd66c00a805ee4bc26be04047813e00848002f1c187d5c33f9170f2a043071c3868a2da3042c3149388a094035d6aea8e103ad0a93a2061c1ba3a00a34b2e2f007cb03e090f3ae0806ac494082961d4d45f0f01e5c3d7893c53cdeb293930d8f404254505f49950203e3c090f3ae0806ac49408296194148e5a1de8542598493c206a5cd6d6fa2486764815967e183474f81085c933d5bc9e9203834d4f505240dfe916479100f1c183074f1d3871d0818ac388a6a90d223448310983510ef4a70f774408073a549414d5951d9deb8145c2830e38a01a3125424a181502eac35f07f1c187af1379a69ad7537260b0e9090ae8d37df0f0c401d588291152c2a810504f38aa03073a94948d0ef668b468ec8003aa115322a4845121a04074f8eb1f3cf8f07522cf54f37a4a0e0c363d017d541e9e9c467498e220a2496a8350431453882094033da8e18e00e1406feaf004f5d7af150dad56bda01a3125424a1815020ac4070d7fddc3930f5f27f24c35afa7e4c06013d037f4e4d4418494302a0414880f411c35e5406fba6e82184dc4824b9c1221258c0a0105e283070c7ffdc9c987af1379a69ad753726010e8d36e71949453070ec2a6a80d2134403181087e70a0fbef8ef0e0400762085e27218e2e1aa1042961540828101f3c3cfdfeba53071fbe4ee4996a5e4fc98140dfae0387a61050203e7878721c15e540075ee7409836c20008a2424081f8e0e1c969e9af77e0e0c3d7893c53cdeb2939d0c783e2d0b40184860f4c1e824f0ef45e853bc2c981aeb4e40e01307d240205a0407cf0f0e4d4a1c25fe7d0e4c3d7893c53cdeb29017d484d1b34787872ead0c3511f1ce84a06e8a2298010c2070f4f4e1d3820fdf5a60d3e7c9dc833d5bc1ed0d77bdaa081c929d8c181ae77770407073a0fe98e6872a0f794fe3a890efee8242a003c397518da61f24c350fe8abe016df114c410e4d1a477570a0f37a7f1dca8313dac29354070e4d43983cd3eba4813e25b738aac9814ede114c0e74f38e086670a0ebee880d181ce84377840607ba1e81f7d78362fa02b0a96983f9d735f8ec75dababfcee4b3d7e97ad087afd3f50c8ec1775ea714e85b728b854307fa99e60c7a8e61e8b397e9f4b95b1c95c1814ee2280c0ef4f38ed8c0815a8bf6a5bc0c3eebb337787d031f799dee0fe8fbb9c5511b380627ef08a063b84e7640a6ef063eebb3d7893cd33d229148dc150d69e02b817cec3f9fcf7d19f8967c177c4a3e9f2fc9d7f36d0a3e24dfb6643cdfb6679fdd28fbce57e4d344bea15cb5ef0b5dee71b13e3bce77b93e7bd953f73cf824450284102080011090c002a255d17875b3f0ddc242bb0ac9f56bc51afa4cd9c13f01d8cf6e21bbfdf3c91f59e27bbb70f09254504f259849b6a89e741363aa2b2ca9cf504dc1de0852d786d16cfaec188a6c027aef1ce1c9844b6c7ad2cde067c7b88984128240a5de08410e8000f8a49baef4d9714901259e3e4b03e0e025959e74b3c7d39fe611943e7b09801e2f3d47e841498dc063c19710e47d26734afe94bc84749bf01a076faeb0c10d6daf53264bc8cfd3422d900b09cb74ddfa0736e7dfeebdcde5171048d82f00188004082584bc5dc911f3652c8bcb892d1b2668d829a324cbce105cce521ee83861c5081c2879be4cb520034847132456608afc2844c8879e35789ab8a00282932d79a2044232068c480e0fc0c0d38624c989424d90d0083ad2c5626cc99221768a383980c2f4480b6204c61db20a0a9f13d8e8289983658705ae0167e4e0a061c30918901e4aec484913e68b201b42ec9cc09160c6c7172e3652780cb2633bdc7a1ca123e4ea479041b83d684ed0005132c50fd97907c71ab6ab39666600f153c24a15e320b4203700add9c9e4b0b918cbf1a7c6959e27121ba89a41a84c9640488aac190611253ac2a871e372421ddbe5cd0980d6807102068b0004194fd4f81145cddb8f3825c892a4f822080e3381d6acc4cea0146388390619f1c186c4d3862d1c6c722001b4454f8d629a3c72067939d103cd13896bd7b4dce0f2834716178156b0874ef18a51061f341e63c8d2c9f2f7844b50f122468850d79bac3d24044ad3a1c4c6963b5c6bdef145c7e72de69a3d989f48374b74100162838d0b300b5cb560b244c9988eb635ff8497888fde861d71fc06bed1902914228e22e6b021121271a6438499aa426e44bc994232c5646a465e7b4c665c993b89d233080400096cb4c1b545368649f3d4a5437ac74352538737cd0a07b7b21916e2aa7c7ce14d4b2bfbc2c23b3626bc5b5b5e8f3d67095950c42e248199b06fb5619d195f3c90f8788becc25126b8d80b87c5f0188ecabde952c728d190631c19edb1e324386a8f60c1ee158eba5838ea66195d11755a60c73d70d42ec1d4d878a1d0d0fbb211a9d8dadc88a68cd4d0fb9a8da149999d1d874408b2d2fb7a6d8941797d81a953525ee87dafae8d244f575859a9883533f4be558f8b4d55d7eabe40bb62e81282201881049d131b7adb31081820041172571dc0d0fb89ea094aea9cea2105650425edf857c4483b4e130df948d0fb117a6fa6fac35b458c1cf59180f723f05e449951f9c35b45763e65459e3fbc5564e7a68f04e98f90be8b58dbf930d70f6f152972116a5c9809bb08395b6b4478c7c70a8f48fd6aa481c2a60f9ba013ce395ebab48280b983c558274659a7c687f33782d4e37a63f87c21a466cc912d45561c9a1f4fb064b0d93224479a9791180f947a3d126f620c9c2727bea0fc58715771e4bc60230ef182630f511a910a00f68b44ef0e2adb1184c91321634a18c96285e5cd840d2137e82019a22345cadc43464c5b94b4346b569c9f5968b114b9c3650c0c9b396e56dcb5f18714f4380f2b0e7772a0e43c71dea332664e96c741ad38dc89c371a064cb98ac1c1ad402a72e96b7caf959ccf9be46109c8e1d04dce9fb12dbd67a476d46f6a4ed57eef54eb1af2e2c577cafbbd2fd760c8e44e2595ee14a1225063efbe71f59e902b5d692a4ef49bf222031c626fe6dd3718e9ab8d234bd24c94c9e5e963ffb65e68c73cef9f73bcd5b0242ad9db2d9513b452ea0a81750d4d8ef93ea7001457d710b28ea6ba704606d699a26be663649ab87b609370e6a4b48c5d0363d31d6e98983a4cdf892246e28f5ab06c0c6f1eb4a18db8b6d000a693c153605660aec629f1273b14f8d5dec5365fa627ccb22d9a5b6f47dbb25cc8ab73898e6424435bdef153947ef4b44d34458b22f006cba8d1e729245c07093f5fbcc59cd3f293fdaeef3cf3b0213efa0df6446c90ebe320e1af159df93e49c266980ace4bd59e756d7fdf2abd257a7898f24d7ea16aff112c93c4eced48a696b6d18c86fa4189510c54e6b460297a51c26c62457e5efec608b267f69f049ca6fea4fe6d93a1b5b237fe716bdc9c7d7333e9f6079942863c142deaec7e1707eafc8de35de22ce2ff1123160d3ecda6fdb63cf4c9359b19e947e0ae6acc53989dfb65f6e7f38521de2b03c310b31189665c2de33ea22d8b53ad33496105759267cd1ec05b34cd87b669a6c5bb19e947edac15e4fe74eb723467beca6931b5ee05ca1e1281c56234bb42f33ec8011ef5fd5fce170dec7c79c37bf3196e9a24b96b5dfb8aa548726212b242cb2c0f97dd186252ecdec93028dceef0b16b500a2264be4ae0ac69e6e9ea699f3d34dc0790e13f22a1257dccf2c66269f6995996e89cd1fa8056ef3eaafcd5288eb6d1637b3dfe6097fdd1edf662154f6e609762ab7590e770178cd6b9989ccda5fef79166e2803a8cd1671bd1eccc21257ae93c0822c9cdae125eb8b988525d6ebd76a288c8c972271bd7e8d196765a11d1b4246bc8e8d5988b7aedf3622882844066dadd771118b1dc9b2109be5eb57ac2b0b71dabd7eaf6ed6ddc24016e2360c421652c1c021b65e0f010252d7f15316de358b6d896133bb5e5d6e9162d9ecaf63f36a050a801cdabac5c13112c5ee178eb27070b4bde917cc2f198eb277ed61505ac0fd4a88503aea30d079eae5cf02ce4baca55b9d87a0d3fe344464bafad33f135c8421577f260c11a5a6a36e571d2e755cea2154a13ee42556d59f72897121dcd02aaafd591bf2dd2f9fcd4ce7909390994c7713b444d079ea26688950bace4dd01241f5d23190994c172175f467420899c9f4f4b756fe4c20f1a5734b86fe2ce4dcbed963e9764d7f16723f1334a0c47afe42a8b29909f7134094d4875c4b04d5042d0b0a403d7511504f7f2668e1dc04f42702ea433f132ef177af3293e9eaaff845447ddf228fcc913e634cec30ee58ed9afabe57184d1df5340591a2570c6db5abd573028f9332698844e2aa00bb56e97e266885509a70d732ed4db72fc2541c3f5a4cacf798994cb2cc64baee9abd59f5f5a6dfafcc248028daaed60f973b2a4cbf5b99c9bc5fea9ad69929548a44e26ad7d2f7ddba6ba8910c36f40efe0d363dddd3518ba3b030e87a002494f8c4bf9d3d9885e4351360baeec491fa91e268d24bd271effa958aa2f7c97b0bd881d96ffe59c0eed735fe29fdf5a218da835698cd7c415386a81507cc7afdc90a4bd8206b2346038a932964d6eb52564882b03516606e60d45cacd749582109b084f5391ae13a6162ed835a38c145afbaf15bbfe4ef5a0e7648c6d1a9000440060570c921ec24b000ecefe23289ded7ccfa35cbc2f3d4bad733fb9c2f2eb1c5a42dd12342a2cddf5efe803878828bf9fcd1d74b235273d2a4d1d7734d44b0d0d77781a4e270212a79a1b7d8a9724387057273a1af9f6fb9105d14b9106be491a3b9107748f179e3d34287b98d59e126490dcd854885860e73432642867ebb63dfae3c4b02134909d2d7cbb7616ee2bc3d00ea372d8decbad9988d69188b61b16c6c6bcb6d6d588cbc5937ab8d042e81376e16f086367b9c1a809c9e6a00b25fb7bef3d15c6ec83a0e00769348d819b730342f2c7093579f1d6dfb6ca66df0731047e11c5b65a6ecd9f799c7fe04e46fdc14dcb8f8195b590ed9af2a00dc0f9369217b9c0433653f4fadb3e3249643dea2f7754bf2f6af5f51f9d1f66ccdd6d99aacb335573aec545e04d67d164af759287f0158753f2b29fc9483a4edadbad4753e34f559e955675ba0b33a579dfdedde97bec99cbdcc3fbb4927cb27cf4b22e37c1be7e5938ee65c2ef73b4bdc6f93a6fded2760cfeed3819f2b615b28c0c539e91b217d8b3341fe7d9f04e9e77ebb843f7f23a45fa2ca67e78d31c9ad18d8e8eb270e42810205ca50934dfa364d1f364bdde752f3515b963f52971ee55857a4a9ef0f89540dc0fdf37a50e70446199690f2d9519dd767cfed1253b42e32cd10394e0e6cbb31bc007cf63bb4bbf3b465e9aa3a2cddd7c341a494422f859294ee009115d2104b2ca4195829e50be90738968ebe749b33147ed4e7fbd2efcf9643a42fa1f60ae0b3a3779768629a3aa7a56f33e07369cb215f06e9eac3530eca7ca987aa5f7a34766a9082b04302d3a2e306e953190609fcce6e217ddf5f4733985ff2703068e9bc9d63d1b48df328930336780d46642ecbdf664a7d7f5c83108dbebe736f4bff9229ddfd60a221e5606d43fa6b9ad222310ee9be5cfe865db053cb7368d2217d92e2943efd399fd2a32d0f509e5407649d737df6fb2175f2d9afeef721e57d9d20d2a24050e9032243a4bc377d7709269fd1db8143d3060d4cd65a702afdfc329fb8c21ad40ab5ff7d94884746ae2de4783883e641a138c029271c231aa497103cbab48971a85346667813224b07402f24d58e0f29d581071902a90993072cc10f7464e000ca061f9839811c989d183c589dbf2331e4128838e485a23964852734492160f496b84e0a3b20471cf4e1b5d1d78d8ac0a0d9cb9ccb9ccb8c71ce430ef2ac82031239fd495079d484dcbab496b4d6fe76890147658c31262d07fcc34ee2e00b222fc63c4018638c99862c0c80e9b1eb1eff76096fde0a4eaeee4b079632ea2b9543677cc5dc8bf3d663cf4d5229340ea6d94a556d8b9da05d5cd65a6b6d95092c2061040e600002221800041254504f41a0524fe724284a6471595969edf1f8d6d1ecbb585864269d2433c67e1fe78dc9de3a14b6a5c5964c4d8b6d535753c5c73e45ccc2a3b6cc74fd82ef292b1e1e113c3c22448810c1d6e5b708de9a08de9a08de9a08117a06fd162162cc6aebf116d195756414617cbc455c89283e7611c42c3caae05b84158f89148f8994d45adb6329371e179642e352e349f1a4785247a92c3c5f7ac00003e346d8baa5d898150ab37a4274b16e2923bfa5a4a4c6cc8c8fb7d4d563972266a13d06b94223509c337ed45614685cd2d2941501b36ea9acdf52459e0f21cfc75fdfc237a1304d286c7b2c74bb12923dde42b3c72e2466a14d03268649152e65399eb07123e8065b0a294b80ac5b58e4b7d09ae9ca7386270e13363cd62d4c931125ab48270e98750b89fc1602519c30d2810165d08a750b3330c6e675a2509d4248d62d1cf25b2814068a0a141515d5f638ca28ca288a17c58be2451d1f7b14310b3b70665c53c2e6aac88b158351fbc375c3ab4a71dd5158bfa38a6330c21cd7a0d481b2ee28a307305d288074c56922b6ee2821bfa35e60e50e1837827cb820b3ee285d1c1d5c7fa4907df9b2ee281ce477545494119b10466c4284081182ed7108b76388638810c7c71e82988516d09a0d36709e78f173a2002dc87aa01862654a9c7587c0407e87d0b0e58dd18c142eb0e2ba4368ed7081d6258d132f26eb0e71f53b4416084472b8e153638b1920eb0e41014078ac7870b151a4caba439cf03b4488104652a08ca4404141b53d8632f28232f28212831283823a3e76286216966801c4ec4c9c385d78b459b18b18584fa6d8b932b26e28fce337d48e372b022d8942664cc6baa13608138386054c193d35d60d857dfc868a800bb51d6761406c14d70d75a3aa2b6d8a0ab72deb86eaf11b0a0aca480708231d204080f0f21b84510f101b849a511688b2c76e917c83387bec20885968d98a9881e2050ad68e12582a62b8f9b2d516c36cdd2078fc062148c699942a3c26bcf0583788b762318c9f3042583ed60d62c76f10596382609821a33548cfba4114f981650bc5959033eb06a1e337883527bf416c107b3eecf9f0e143dbe30f6c78c7a66644fc6044fc6044fcf081ac0b8c30684406bd814103abe143ce8eac39ebfe60fcfda1eacc8c8a21846430f9b1ee0f216071f6e5467646edc8ba3fe4f8fda14413b63861f284d952e5b5ee0f1f9e20d102e7879b9925ebfe80e3f7870f1fba78e8e2c18387b6c71ec63c8c7930f360e6c1c3f1b17b20666109225f8a71c68c6d5af0093387ca8c146a73deacdbc38ddf1e6c981e3d378a58c8f4ac58b7870b6b719010d2d38307d9ba3dd8f8ed21eb71982c38febc91b161b36e0f5b21b8581283088a135529d6eda1c66f0f60bf3d78d80179da01797a7a6a7bfcb4c37ada613d6d3d6d3d3d1d1ffb13310b6d18b4352a4e7078f112b4c2714ba115458d06d7ba9f68fc7e5a2b43c7c60e4027a059f753538f3632c44eb8411cb4eea719bf9fb2de498d4f0a142766e010b2eea713ac61d332a785972e17eb7ec2c5df4f6b63bf9f9ec602390572725a736a7bece4868bdcd4764e3ba79dd3f1b13b11b390c39e3656d2d45878a158f18d2665966011b1bed6ed24e3b7130e2e2b4dd67c414307cfba9d44580363cdf88687cc8f753bc5f8ed9455448a9714586bc450acdba90430be9a40c15213e5c6ba9d308cdf4e4e4e6345553a1455e9d0a143078be57707b7af0e5f1d3a1cb3280cf9e2a34d9e265c7cd6dda1c51c266daea488f15664dd1df08bdf1dd6d4fceed061acc8ac83b1c35587e263ef40ccc2a2b4cc749de7bb8355910eeb54a4e32d7358e3d0f698835b510fdc43ad288b43511687220ec7c7ce81988519a28829e2d0da83246d7d019bb51e647ddaa86c593707ece23787ac1631c490f983e5cdd8ba393c804f97306c4a6a7409b36e0eb8c56f0e20d0a2664a12372b0add5837872b605eda0caa62828671dd1c308bdf1c387018c3d384a7a9a9a989ed71d35ad35ad35a5353d61e2eb062a1157d02adbb694b8d171f623d0aa5587793d5efa635b7df4d4d6345564d46be9bae1e7b13310b4b38e951c432a48f9a3d65c53982ca8ecc0024b6eea615bf9b8adacc066d66c3860d1bd81e6fd0661bb4d9066db66103310bad581b185e6974d65c10c90222f622cc173d5b6cd6bd01abf8bd6145d797e29841630455ad7b8304c498901959b3b106c5ba37a4f8bd216bcf1a9c20695c8867ebde104508913d7e8a989920b2ee0d55bf376cd8a05368d0293468d0a08183df1ab495066da5416b38eec1f15b83067da561e75b8306bda5c1f85883060dc42cd45f1a88f03011e161626262627bcc44c444c444c4747cec4cc42c2c51a5b5e70a171f7a949059ed08625385c55b9e3618eb66b2c2287e3315c5fc18431cdb01c5c4ba998c5178ec38ebd1844b9275335d9df8cd94f554baaaf0c0292a99b36ea624534e90b1d2a4480667dd4c5d267e330df9cd24c63446e42348e423180c06a77e0789ae82445741a2ab60d0c8efa0d8e32051573018140b1a83c120310b89cc8256436c320cb1c990214306b6c719868e19868e19868e193264c83036d4b6f519ba326411596530beef0c578f3d03310b4b98a8b26242c90f2d5080ac1d201444ccc5d78c3647d69dc1ea89bf331487b66018da820103dac6800103db630c6e43621886c4300c8961c040cc421b68cc971381b0dcf4ac0872c7cc93397ff0bc6dad1bc3db6f0c83fcecc152438387d0ba31a4578092f44081d58565dd180afdc69065e58dd61c1d6344a4ac1bc3d603bad29ab305cb8c3febc640e837060c18c6fc6ce067830d36d840f87b0337b58dacede8f57b830dc68a5bc5aeaca1ab0d8cbfc1d506c5c7be01310b87f606565b805b80402090ed31501503aa6240550c0834614d8a3345bec608015b37f0026896b050b3c43806ccba816ebf815f40b1c7c031f508346ee0d5630712b3b0849615131534aa00da3a5bb5ae9429e2a2ca0a2ceb060efa0d54b53450b534d040030dd81e6be0a66e69a06e69a06e69a0c10a2356c674790305ab4e17142c7bc25c7839a164dd1a08faad01178a32c73762b8c2bcd6ad8186393970589971867562dd1a04faad41180e2127c458939366dd1a2c45d1326e7131f1c5c5ba3568fbad81061a8ce1f9e1f9fd7e3fa8df3fb7748d6cedb807ceefdf6fcc6aebd7f5cb528dbffdbb7aec3f621696f0da5ae227c58d344b927c7549c2030c0f378104adfb07e8f7af9856f1a5557c3e9f8fedb1cf2dfdf2a55fbef4cb77f465c1797be1e3043c597ad6ed6b427166028a141962deacdbf7e7b76f0f9edf3e9f99cff8db77f5d87dc42cec10e58d0b9bdb58a11480c0dca903c4a807478b75fbfcfcf615fd58273f6f9788865ded9dcddb3efc76b4cddbdcf708faeddbc7acb6acbab28c6e7ce395171fbb13b330dd6e854ac900959241066b6d8f33f0cac02b03b10cc432103b6650cc40170f36275fac7ce558770658bc82acf941a362099d756770c5f63b83ace2992a2c7cc8b688ac3b831e31aad81024c74b4ad8ba33e8f33b830c32187bec1910b3104533b042672ca133969696da1e2fb9d9c04b6836d4d02574095d3a3ef625621696b002736c4373044cebc9da628f1332c7175e88e458f792159fdf4bc5123bd456ac70b2b503accdba978c140012e7c91b97311b6deb5edaf37b090e1e2c552a50e8d862b6ee2514348ca89972a5a66add4b6bbf9776fc5e427f2fd5b950e7c2850b197e5f50bba076a1ed42db850bc7c77e8198854b673f74f8b8b2064e5656bb8266071a416771d67d41cfef0b496190a4d13323061421ebbe20a4851d37426f36ac9cb0ee0b797e5f80da71c50f0e306e2700adfb02981f453043ea30c18165dd17f0fcbe30e4f705a2df17b028615152526a7baca453d229e994744a3aa5e36357226661091e666149b05c696126c95a460c9941595a6255d6ada4f65ba908846b07a13419593ad6ad94819928798a46aa98115ab7d29ddf4a2f86b41042e62bcdc7d9ba95523e6cda8e045aa3a2cbba95ecfc565252d2e9b0a0d361c18285b6c716743d2ce87a58c8b2906521ebf8d82d10b3d000360ae1e8d23567c89934058f21664e74213259b7853abf2dac9182464cebca13404dd66dc10884080a3444b53654d66d21edb705b5b03d47644421a660b26e0b537ed40803c83805ced9ba2dd0f96dc14285df16f654d853a14285b6c715d82ab055d0112b54d8158e8fbd02310b4b64b5edb8b362870e156deb922428aeb66ca808b2ee0a737e57283ebe63a48d15164b8c7bd65dc138d4e34cc7171b371e2fd65de1eaf195f3bb42d663b5aa207eec0819b4ee0a16286224cb1bac216d8cacbb02daef0a5f15c41eef0ab92e49b92e4949496d8f937249b9a45c522e2997747cec49c42cb4667bc4b464b020645525eaadce101783aee0f05977529cdf49534d72e8b102e3b3a6b8eea41a767898a911236c499a7527c1f99da4815b99ac20276ac830ae3bc9e825070ea1316e7aceac3be9cdef24b4df49493920bd1c905eafb7f4bb97c3eae5b07a5bbdadded6f1b1f788594822058f2460d0bc11e26595ba33c32cc79a276bd6dd3bfeee15f990f95275a60a199375f79e7864493bc208748667dd3d37bf7b1f6819e54c0103e5cc8c75f74a0ca961834d0b35e394b375f7dafceef57a812804a2408142db630a6e14dc28e4ac28e4ac28e4281c1f3b0562169678527602ac38232c0e949589151371b86069c247c7ba29b0f94da1e882e30c1848c06c41a163dd146aa8e8a145480b1d61eba670f69b0208ace8a04952a48d5ba07553b02253b387ed4c4e0cb3755358f39b02db6f0a628f29c8b14e72de1e23a13d464242627b8c74a62195a5219d3d762462163ae9b01ae3c644c9179d02b0f9e9f1e304b5397fd68da4e6375211c559591590294502ad1bc9c6d51a962c2e4c10dfac1b29cd6fa4149c7085ac0b9340635cac1ba948951d2348e2b4e87a5b3792d96f2424242cd609cbdb113e023b023b223b223b3a3a3ef62362160acf7cd9a8e1444f11242bf601e549923e5af48cadfb08cdefa36205dc28f1d3a3c58c3d47d67d64d40264eb0598b6e299751f9df97d14033c28d0d2a4c8d1525cf751a03669657066b470f35af79199df4747473aac938e37dedae3b6c7bcb307efecc13bb3786716efe41d1f3b8f988517c0b22248cd1b0d32c595007ec4f4196313e6848a75f3ca7ef3360e4166e4a8b8620364dd3c15596804c1512b7a955937afcc6f9e0ad8681cb5aca565e95937af58a4abebc7551a1f54d6cd23f39bf7c5137bcc1bb323ce14d6e94cf176b66ea3e3ba8dd28cd68cda1e1bb93db6ca4664dbc8ecb11b11b390048570d84812562ca4b51681ad15eab385e6a6cdba8dacc6fc362ae6029965e101878a0f3deb367a811e1b2f68104d1cdbd66d44f6db88089a15981661d83899b16ea322356c90705112e8068f751b89f96d646484d3dae1b476bbdd8e0de9f76eab0c6f9de1f8bd132bb11bfbdafaeaca22db19c976bb1d310b71c7bdb3c2b128c2b1282a2a6a7b5c847b51847b51843316e18c45b8a2e3632f2266610cdecad0c8c84a5bc3b60a608b1713294896d4c15a775198df456c3584382933240d1671dd4503e0fa71429a962d377eacbb08ccef2224577bdc5439b6d0fab3eea22d23133e7c5ae80933b1eea2b1df4545456ff41badd71eb73dd6681a4dafe935bdf6d7b73e3e764dcc425b070a8a146af000f1aab3c6e0e1e6abc91899b175eb2fbff51d25288c1c69a1c32dc7ba3504acd4182287cd17305fd6adbdfcd6392d0f14155c49be7cad5b973871660c74021021569eac5b77f9ad89fcd6628ff5982985c8944244b446d4f698c8f42232bd884c3122538cc81423222266610877520c29b4e5842e784aac6001a88822cc1a244cd64d24f69b68ccea069b315ee8d4b0b26e226314351b378c6421b3b26e222ebf89905a68e188a1638dce93751375a9d3e5d6c78d191f51d64d14f69b888808cf109ea1a1a121b61f725b1b5a1b5a1b1aea63e5f7d0d098d596d5d090691c32be7108fb10310bcdaca1b28b5a7651d535b5edd5720c8fa999a966ea568f8f5d2566a1039aec389ea1f2a40b06a14039a0bcc9f2b21164ddea96dfaaed0365d09a2a74921c9dac5b65808e3133c4376c4aaad6ad82fd56b3a0d6fcb981e50c1d3361d6ad6ebd01708c0532f126c4ebb86e55cb6f95ecb7aa8e955a69a995a669caf669b995965be94e8f8f3d2566e12ea284cc9b14556fc6e4c07142860b90b5b0ac75a7597ea7422545362e98fc48b364dd29960b3081c08cc71630d69d5e61f99dfe71536747d80f254fd69d469971266b2d10514c9075a75fbfd33425d9a0241b144551df6f943ca2e411258f28dae6378a8eb5a15b6d5d59a5156a7cf40a256661b9512bd2878ef4a1d3e9746c6e5799e9eaa8d3915dbaadefd275e98a28b688d182e2add0d9ba75c60588a9e1650c15317cb4d6adbb825d47cc4292d459e540b91c28975bcbb53dce65b75c76cb9156b91c993b3ef61c310b4bb0788262500ab63659c2ac60719c44c9e103ccd1cbba73567ee78ae69a275400a1388e39b2ee9c141d6e6c4a9ae8c0d3b5ee5c95dfb9acc72cf280a5b853248d9f75e7b6fe2c0b9b1b47b5afe38b75e7bc7ee772b9b1ac7566adf33c4fb6c7a75bde3af3d699b7ceb30f207c8e896d89756565b3d3f86657675ada3906370687c3f96f5c192e533b921d71f888c338b1c7b8b136dc565b17ae98c5224d0c222c0aa959376e037bb6dcc91ae4e3cb8c75e3a860c711b3305b59fdf58db3c2464c6cc434cdb637dd1e27314ddc65e22e739bc717de34c562a130232cb056305fc6601cd1226be3b36ed36aca6fb3c8e70b1adb173659cac858b7691c5156660c450d2a4188eb36a5fc36e38c09411312c34a0fad759b5b8fdd80e98172a7501136eb36bb7e9b5fa69839866f58277ce3ed6cc5bacbe3976977dd65c9f6a5db63632ec94a621632604dab469a0e352f0aad1dba8865b1b1458d5092759756517e973f6a4821a25da5616b5b77694cb1c68f9321572ac6cc58777905e577d915268c868f3e682700adbb24226bd3a6869f3d5d84d65d3ef95d7e95628fcbb1c752c82b8524b1db632feca526462676fc22c59e1c3b6e1dbbc8ac35728d248959788037666b72c481f2834e8524451e2fc214e9a164dd24d76fd204d669cf5b5e6b9b2a01335d62ce398b900ae30eb01956538448880461328448982debce5d4e7ee7af3c768d99e912b3d0519c8183a5cf89266aeb086a7c9151434d4991e2bab35593dfb9d800eb64cdbc61b5c798edb11b04b019363b8ef0609daeef4bc8c3db4361a6eb6a24c83066f21ba75d6599728527c80e18ebc65d8fc9b0de5a88411266cebaf1d663f88206478a3737e474ad1b5fc9a832234d8bb5146dd68d8d4b7ee3a20f2f6a27fa1ccfd8f15a37b67a5cc2861a336fe4b8f558a364b55f6b7fdd1eefdcdb6387811d91b34ed7f1ef3b76c594fc05dcbc30b1c34ea0367ed6396ed8c4081bd246cb9cf56a9578c1254c058a3266b402adfb5e9590248e162b6164a8918393fcbec529217b7ebc3911874a9d55c720222e4edc788b5363c54e4266810976caaa3d760e60618a8f5c73bae06809b462d08a1517e754a94145460d165ceb45f23bcc6a4c5a9c2cad2a6b891c84cc5421a2d8b243cf7a8f3cf6a72cf4208e5a0b3e4e64c859b36297cac21244ce58dde18183c81a9ef51a791cc6f6653e761e98bea270f5d7918a2852d12cad6dc94c4dbbd0f6d78fcee823ab23e3519692d55b383256c8faeb18c2f4e6adfd759e59d20bbd795c7ffd8885debcabde8f774526e3f2dfdfbcc7b9ad7a9c935c569c1b185f1ee7397588eb7918a3b791db5ff740a637cfeaaf7b30466fa3e35f071ad1dbc8ebaf038be86d24f6d78db28cb2feba510bbd8d8a7aefd8fe7a08197a1b11ff3a873c7aefc6fe3a073c7aefccfe3a87377aefb0fe3a87a3debbadbfbef3a27791db5fdf75d17b67f5d78bcc8ad28e8acc78697f3d0398de455f7f3d431abd8b7a98e95d94f5d78bac8c8aacfe7a862e7aebb5bf1ea28adedaecafeb2bbda5bf76faaa486fb9fe7dfdf51044f4d6567f1d88456fa2b5bf4ed42546644644d4e5433f223135cdc0456fa2abbf3e4484b6fd4964f5d73ba4d07be8585663cb97facbb2e4f3a5379565e9a507715489f594faf3dce5d17b48ecaf0f158786b6b2301b878a5f0e5de186b6fe7a0634bd03374b1d7e70f43da0493166901b226860a8ad1e8ad6f8b073850d51869fd543a0f7e0c103ea1e3c78589622162f8f3a89fa2da20e5122ead0c3863f6dbfc1ef1075b8e11431040d96174dd886f4d8fda00146ed0919133bd6b3edcff334f2d3cea03f4fb7679ff33c79e7e924dcb9f2a765b36d27a0f3249e47e7e9374bc89fba13871a963758d0e438732e29d3e2841a2b72bcd49c18d079fa79e2d3eff1543aeb10c170395133440fd9a983c81c285e605a143aff9ce7799ee8e9d8787238cff3c4a73e4f9cea797a80455555555555154b012a0a81d1b8121444c9b04d980fb12330d2a4f053c206174076ccd808b24263d53ffaac288bb323ed091bdb15a20ef597161445d12c284a8542a1a8dadba3288a7ab0c5a328ea24d6c63cea20c07874cb1e318ffa0d62965e1bbfa53e4d2d9d217cd074a95248c5a03505c10f373c26cae4311b5b53dce7d3544deb53bf40d4614a61e7e78bdf8dfdceef953adce9a33b31fec8ef09eaf0c8c3f3ec78799edf1fea9067b4c5ce8e37f2eb431d1a9d3dd4e189c9b6d69d3e054b810270ec77d35370bba19e82533d050a4ec14f2b604fc17b6c4fc1fd8a94a7e0c12b6e4fc19fbec49e8293c062e22958a97a0a7e79a8430a5e855ea7f353e75ac7e775f6a8739d437d79dd6faad7e9acd8eb74ba54a7d39d3a2741a7d3e9aed5eb745aa73b75a8aeca9fd70de9dceadcea743aa26ea7d3b925fb9deffcee5087bbb02a3374a8c3d32cd5768fd65a6badfd1a3bc0b2250bea67d5a3288aa2289faf47fde61016023403078e3f4808ad69192b472c42b6ccde98edb9382c98a673ca9d57a9347995cadbab5e615e0d9bd2e355bf37d4a1fa64431dea98cc4c7926bf35d42153199b4742f213c93592f79090909090cc0479a41e52028ad0305be1c7eb2a0da9848e1766000dd9c1658813a4352424241409a96ced51d42f0d75889e6544fef43b431d9e457588b4e6fb0fdc1af90ffcca50871f00227b9ce3ac999bacb2363474b0f958715cfa7869218aad395164c5e9791c0ee738879252f1b8211c862b3c8206a109ea5308a706861f2316415a4720b83c381c116784c3390981e23cceb2392923d6c3cf9f1b288ab8ae285e6f580caa6385c383c39dc0691cce6f9699c725c1a9e1703a1c2ec51d6b3c0e09a7a2e9f2662d451d227d7040d814b59831a106e80e4e0d97713814381487c379b0645d2347cea3a8eb218f7a8f10daa31e44fd09f51b431da25276cef3ce79fa79ba3ebd77ba9f4ec2edcd9f7e61a8c373f3d6fc569253654d5d0b92f2a9f76e7c3a68ed53b76e9ffa7da10ed3720232b2ac9989c3c3b8556c4284c7952e308ce8f01d9d4e8b0e1a41745eb02991c345256b858b394dd4d8090428d09ed7f975a10e7569201aafbb5efb6da10eb5aaaaaaeaa7ea5af59eda66e355bf2cd4a16a64f6467eadd4a1d1b9db0248eb777e57a8c39d0a7588c3467f2ab74c9eca6f0a7548f536e34dd34fd3b5e93dd33d074d7fc251476e3a94d4d89b661a1537685850ac41b1aee832a1a6ecc58a20661dd3249a48a649acf36607d3bc364cacac2a3e4dbf6f1293cc3453d344cdd35c31e54d28d324334d6d9e3055f3341d1b5128fdc63d4c73676e99a7899a2e76bc69d2f8e1c685979e2531709846c6b23c316321c68f89d34c6c623693675659f89db650f23c9e9f6fcff35ba50e799a82d116922275ce84bc9d8931da65ccd058b3250c0d233abfa5dea80dc81bb5f0f1467e51a843230f4ea5ddf42714d5e976dbb13f6dd99f6eabfce9e4e927db9f78b2fce9bd3c28fe74cf13f6a7079dfca967eccfb5187f3a092b407f3a085e7f7a082cdefef47b421d9e66bfdbc1dfb9dd4fbf73bba57ee7bbdd6ee7aec6e4772bf2fcceaf0975b84b5f55b7a85bd42caaaaaa7ea6f0f3aaeb29af86a9f0f3aaaaaa297ebcea97a80e55adb5d6667ac8f0f2664e94154b56ad001b44b2cc20d17162c8aae7bcd6da4ba8434d26062543cba05e5014f573ce9f808222c5a36128cc3c1a5695f5288a8699c8f1a8c7401da2698ab61bf1e5c50d356578dcb0832b5326a386102b5582aca99c4fd3d461a00e530f7ef3947e03b3fc6e827a1cd5e39cc4118f3cce759f2c8ff39e89c7b9b365799c07573c6e8b9f2e8f73a93f2d1ef796e6716e823ac4110d2048913a26aec4063991b2e5472126457eb0d1a1e976af5b52232b8c18b61754cc56dd198e1c685a142af2a85a75715ee7cee4755bf89cf03a7f813ad421bdfd782477813a443ada5288ec8fbc05eaf0e864813a34ad844f74bc085fc1691ca3d340088eaa1d5b82b0b819a1850d509c1a614c76ac19ce677762506ac717955b0f37403dcceaf05192c1cadaf0a8013243c8587e936d1a093cd42c1b02ee042aa3470d490b306b092336baa4399363ced14e3ee6ecbeefd5cdc2f139290b0af2c44e1e373853d63ac6311665796690653739df31b2ac7399fd1eafd05c341394a939e1c30c1d2db575dfb41f584adeb0c1003265ddb7cdefdb86ab322fe70c64cae75ece39675cce1a3259902cb80c9be1234ec36b1929e7ecd94a497e917146f389bccb64c662f379290fb2732506db153128b2a922cc1c3a4cc0c69cc9984dce14b2e70d1967cf6d61d92d4c10aeab239e405a76d64d12ab0869a1a385890c3feb26adce7e9345d2b8c9ac244494905c6d685296a4d9e96364dd645721186aececb9f3d662dde4d79adfa45826cb480ebe49922c1265e937192509123e6340b010fab2f648e33236e9d1066bdd649b9adf2531972fca6207dfa5317b7995452cb152a056e506c618953331d65d66f1561c312e594322e46adde5569adf6557f975c17709568a39f92ec9cab2cf5e9ac5f99cdbc050e1a2448a578b7597c7cf664664eca82a7363dd659ad9ef72ad6c33899fb769f5e2b39bc53e660c98e8a002a88f11cdc6bacd09f4584bf285c88cad16eb36d1fc36b3ccad25df2697d9e5c1b7f905f6d94db1b1cf15b249f6d934fb6c1ecdb4cfa6da07df665b761c1149155c15d35712196b5a0459b1b56e9c550c317302493132a7ab7826e3ae3ee3b240f8c66d717d765c57122738afcf2bcc70b03801474c1d39ebc67d7d5662a6ce8b2a39c402ad1b67e6378e0c67f61977863b7edeb8349cda67c7adc969f1c24c4f202c1e2668ac1bd7f6f9cb5a214144b72b5aeb3e8965bf4fabb3781a43f83eafb03efb99a595f5f94ce2c19630465e088263d4b3ee736b43d1aaac0c8a3427a4acfbec2af3fbfc3ac5a27c9f632799d0f7799e7df6f3a864cde713edf3094ac2d4d91a03ebb3ee33edb317417ce8589d819d58f7b946e6f7d99623e6ac3eef5cd1c667cf19733d8c6e6c8162860c112f40d69dbb1ae10b962a7fd26cb4d1b1ee5cd698dfb9ad5c9708df392fcf7d79c6d973645c9f73659f89783112a74d21405cebce999908a4a5470d373d6856d69d3b92fdcea5e5d63ee7d83e3fe5da3eeb88baaacfaeb30aa37bf15957fc9c7557ba2cddd608dfba2e9dd767d77d35f1f15907f619479c3367cab84019b26e9dd8e7402b9670c1510385c9ba7564627eebcc8e9fb70e4d97c6816fdd9a8eedb3ebda9cacf8ac73a3409814ae316c47b2a859374a8c40d6973c4c8468393bb36ed42acc6fb468bceac0379a95642bcd6747b9822da6685d117bf345cfbad12e119459b9b1a587a03939d68d7e81f98d8aa164a89907bed1238af6d9d134276f9f51b5cf28bcc8b4b4a45853c3c9bad1b5146d58595b5facb6bed68db68dfd4e89565efcbc53e3e7b4c7d59314eb7314275a6c60eda11165dd69d6e7256f5c8ef4c8229a5877baf5e577daf5958abdef942c2dfbeca9199acfe9d9673957344e907dd9e1b3eef4f819cd902a656c76ccf45c59779ae625a76d9f55e2ea5bb57af1d9d5a2a0cfaedaf809d4d1725255a40e961959ed12680c0b1d2b69f464dc25e70f7cab5c9fd5aecf5bfdfaac72c179003889a37a0f0057813a04c0071f7cf0c1079e0275f881af5c5f7ef512d4e17a32fd73bdf87714a8c33f499020e144ed49f809d421090f9cf0780fdc04ead08393eca0c992efc04950871d9c229e032668cf8197401d72709f8a8a8a8a499ca77212a8432ae7e077fa23b4fc083f99ccf8115b617e848f401d8ed0e91ff1fec8c9a3ad1b7fe4fa68c9973ff211d4e1510ff8299ab72a2c33eeb4b9918a7179cb1345ce162055a9d86fa94f3df5330b87441c498cc0998367ce9a8605e29a23e4ea08969d35e5f2e912249f2eb1f2a98b401da6534ee228103f35a5a4eda77cabc3a9f445f829c2b508ef8970abf6223c04ea50844b9d792925375e4aebca4b3908d4a194eef0c224825ee81f5087c253fda8a8a8a824783eca3da00ea37ce94324e1f221bc03ea30c40905f56685824242e6a19c03ea10aaa7d3e9743a9d4ea7d3f906d4a10e0408342b0810731e846b401d82f8f0e16bfdf0e1c88bffe01950871f7a2a9d223d4e309a9161ad3bf82a981f3968a4c901e34d0dfb2df5ea066e687021f2074c8c40eb06490abdf882248dc78b55ddf2ea1114af1a797bd531a00e550f1ea2ac1e8c68bd87ac3fefc12fa00e3df496969696b2f6fc925b401d2e8dfd53568e7ff20aa8c3a7d3a9489a77720aa84327f22f58e9eaaaf1e5cd0e383ad60baeb3b004324050c29c58eb725c2f80fd852266fe824f401d5e00fe4ebf43872235be039129dfc125a00e3be8a4a4a4a4248f803a4ce2e0e6393804d42187b3d7ebf5c2869cf99e3f401df6bc096bd037b903d461d399fe0634bf01cbc66f1052e5377803d4e1064d8102050a145c04754861c7fb9dd2efccac3bd73befed82a4f99d33401dee1c455114455114457d01ea104542f25a9182c4782420641ec915a00e917a5b5ec3959fd7e021a8430d381f4f96a431630408570a37355d5060c182c186d382c3e170b8ab3c8fc37902d4212e7d1eef79bc13b69e7705e3793fce3ccf11a00e79bd0ce795f33ccff3c7923f4f3f803a3c77aab55b1c85e137f0b59ad77ef6a8f3da7b27bcf6b1f6ba878cd76e0075a8833a221c6de2a8a1d224d01c639f166aa4cc7981228b8947c99fac21576a50b1736c084113458e17202d2c6fbaf748f1a65b1e85def402a843f36ba7cfe44c3c7c3c935bb2677202a843266df63b7d23a8dfbc3772d2284c07d71bed78f1466e8d6bdec807a00e8d943e18667cf24107411d0605a08a6510f4193c00ea30c349f44a7e2ab956f29e92922b795049e9ce2b49f9f0a60fd5a19973ced901a00ef307ea50098314278fc157758881f716f0ec0853e6edcfa01eab850f8835c95215c7c699b2d5c2d75bc86fc1c22d12894414ab050bb9b71026e584b790664c3e61fd3116ec899e1d50a0c089e2e4b307bb547c76a9ae219f9d44d79fcffeea308b619da9c7cb48923b40e2b0cd309b1ccdb85192870b6bbd620e2ab2a42b091b2b4aa0ac6689214fdedcd2a859e1c9b39a56de747f12e74d27f144ce9b4fd8bce924d4a179f4401d5a9002abf1434ee2a8221f1ac2f9d0904bb9fdd06faa1f723be47688cbd0501e1a4287869c8421cbf6434343973834640e0da943435ee35557bd0375a89aa6699aa6699aa673a00ecd30604a1e752a7588e2aae49cc18a7c06c3faec23d461067b9c16318ff32975883bcff3d422f6a78b70297538d4c16fe0f6c56fe04275b841d816385f967e96ae4bef95ee40133c2f1d4a4accc497545f56cc929d6d4b829a2f8b6c5b894b5c79a2442a4bbf5939bebc49ca5beaca924259fa3d7af1ba6837edaeddb6b22c1ddb30860972e137ee7195b55562af2fbfcad23119980c3636fbd2edc6c78dd3f0da9798ed4bdcf66599abacc86ce1fdce2f8ac6abac2f7392ad9eefdce5f5a5e72f1c65c3ca10bfcc605f66b12f33d997d9ac2c735a92efbc96d9c8a4f924277154864ff22875986464646464e421d4a1519aef8d51fb9e43a9c3de6eb7dbed1c843adc45bddd4abf9bde64fa0df5a697d574cde24def89b9f2a6bb8d373d48a6e64d7f1a83f566982b6ffa0775684a69adb5760fea5093219bfa0dfcdd04e78fa4acd9358bcfdefbb2e6b33b92cf616372de868141f2d9a5c2c0f8ec85ecb33fa9c33c34343434e44eea70c8511475b2a25de03ceae5c9a34b1ef50eea10f5344dd32e463e6d7a0a62779e8237a9430a3a9d4ea7f30dea50e7c12389f17824d7a00e9172381c0e87c3e17062341e8773267588e3e08fb880fd9107d5e1d109fcd3f7d39f6eb7d49f7e9ee7e96ee5cf302e51fef40ceaf004f33c3bcf730cea90975ffd722646eb8f991f304d56354e961a58111f82fc9cb0aab8caab61745ef50dd4a1aa0ecbdc76f640b76e0f740dd421300fd1e75a18b3ae54b810f322b2e644e007ab481794274cb0d69cd7e7dc73b95ccea5720cfda6fa9cdb9cdb1ca692739b23e670b99c93e0f639a39c158b237870bc38c29563c1c50a0e216f7680d1c94dc9e5ce5c0ecde5fc66e1f91c51ee8bd14d953a59d0a059f7ddfa9cdb2c3c00d695364092e409a3b1eedb252597bb639f3b91cb9d7dceadf15533affa4f1daad65ab7e15387f94bcca368b41e755787e8f965aca8e3460b3d5debe93a0ba9d8f8d1e2c30b09d7d87a76fd8966c89f9e813a3c2b3cce2da1c7f9923ac49d617ef3be54fa92c75a9e81f1e599355ff21996b937854baeb8d9e9a24567c56a76712104068bd18bca97d58cf2e6163375de74257568ba0575983b7ebd066bde5e03afa00e3548e3e48bbec8cf2cfcd551e2a5468d2f6be6ac2582c0d982e68a8fb6373fd622285f5454747a51914b9d30fa4df545584eaa5a9cd003ca9e22639f1b60694ba8807929c24f8a8acaa2a25c4416adc9f34545455ee4b688ebf7b5bac52f7a221289c422b328173dfde6adb9f1a6e97a8d95373d491d9a3d2cd9c89a5d87a919f299ca67ef957eeadeb0d4e0cf34c53f1d491d9e47eab0e8e716ec7fce5387bf284f44b47464cd061b34361f6156a22834376567aad2826c59899c3c51300b351111914ba17922aa2772bbedd713b9dd56ecc46f4b4664cfecf1897cdb3422270147d93033ae272282a2a40e12137f8a79f4acdbb63d91db2c5c63901982e5491f267cd67d894fd4e4f7b522b2f144fb1a9f88e8623d11da1ba943dc697ee967169a78dace7869a96199584bd75968c930e1a355966250902b6bc9e4cb314ebef49d3a2c93feb4f2a717a9c3b3fcfc012c4070f824a10346c99af11c3a77881005c980b2e62d331919f8269a1a6f3a913a3487d42151d64761789f9f5978021d3ac4b0e181a3c5daea3bd1268e9c2e3b85b6569ff770145ef23e62d0e74f382abbcfe716d0fbf26fde67b716eb3394359351f3794b19259f5d55873e29b23cba0fa9ab82e75f7ed32bf876e91994c8c00439fb3270d367825bfe90be2af832f82179c57942f5848a8a8a8aed311552171552171552171555a1174fccb414395619c19ce0e549d9102f54d64d8595fca69a618524899314616feba6f2cda0e264c71c1d4e88ac9b4aeb37559692254b50080954045b3715a11363509e1cffb01d59375592df547ace7e53518d21c118810463c4881123d804fd1e81542c7b3ce26c041d1c4582e4a86107cbd9ba476cb575c500dbdabab362dd2390fc1ea1e7f87b848c758f1843ba1a61a4e07bc4d5631f41cc42009cc075c50814185f6771765479527473e66add238efc1e513caa629d8eaa4c4d4d4d79f93de5f645f6784f993dd653473d7a7e4f4d8d996d3dde53536953c6c701a810a3b7616f4cf2181985303928b835b625456fc3deaef29fb0b7e277f036ac10d91359708001c4d25491adc46c9abf2ce8d1890c628694e84d922002024cefb3c84b6f92a745218a26c2596b4d6b6db6d65a8badbd1c8ee8094a389f740bdce491096dfd3ae6ba2348bf47fe04e65f3f81f91bdb23a2dee487d0d2c341eb27c07d09e75b08407eebf6b197e5700530f4f687b786688db7166057141020d73283d0a2f7491651d19b2c79485470be09706f85888f7f4679f43e4d5c8923711987c3e1300e87c3e12e0e6739e0278f63500b44c574211bf61659b790b1fe9cb1f07a0183d79bae43d9afeb24b68afe3a0884aefeba08d733b6fad4f1f7b4e825b1bde4d0914f59dbd7dbb2362385b7656d59ef468bd5efa75b0421042cf4f53a04ae63e0058ec2d64d16e25fbf55380adffbfed4fb2b95e3aff78cdc68d4e2a2ed4665461f9da0494296c97a0a2b186fcb1b6fdd7e5af426559e919f1f9db1ae48a3343d65e680c1612b8144cc085b9b2bc43b2b4a9c18522810979c204ef2ac6090892f74fa5419a1b38688a249b6352fbdc9e35bff99d1484f7e7044937efdbfb4d310bdc9b2b70e424deffcf5d6df8ac6be34486f52ecad0f01d19bf47aeb43587ae7acb7eea4456bd3af5fab2c2cbdc21d3d34eca0e891754557757931b36252b666bd1e82158a2046181e7ddab89d5d59af43c00a29a0e74e169d2149e2c4214bd2eaadffece8fb4e56ace7dc74436f52043b65ff3a091046007e76d226f97dd13b9bbd755e119ddbd8c8a2edb62f715ba2902c8d7fbbf4f1f65ee102e5b2e0089951625ad1e90b1d1d9d339a2cf40ec879a64f276897ce5141cff4098673d3e5584e4be7c6a07874053539364952b030c9687248ae4c9751d2323aed82e648d3ecc183eed0ba45178dee48dd68a221ba3a3ac7654657a892dba1553428195aba449f6aa80f5db2e9c4f804327d681c1157479b2b4c1e30cc3d3ae74337a63511337d4241b190996a340ecd9a29faac612ad1381e8434892417284728c80eb4ea2bc5a5bcd4f401833c9df65cea29e529e19afc06e616660e6787cb091cb818465d21addf86ed1164a2c1911e79036b410a412d7093c5cf8eea14974fb087d5f4b26e71e635faec69ef954464644f52faec69ef05fd2968ea196768543d2d851b74fe69239ae5d47415eaa22d84531f7fe99956dd7a43ba288348abe03a736ecb794b3dcf7b4025add7481c2c2212f3c286d66470f786cbcb06c63d30164e82b9fefec8379ac3d334307a0496b3ee16529bb435310a5f9e7a71a492b890389a9189495500745a206283d736a9e4a5abe73bf8f452affb6da95cf073d6e4ef825e61bc62c1a97bbf7389284fd148421bd1aab896811edf537606e565bd31304c05e583734c437f5bcc8e5266f9eb2928a541981798c554180a3761a01290c8cf5adb25c3f89ae17bc41be81a375b5dbfb7f8f75ebf9edb8820b876edefef7c0c1a45266a1dcc9036568606d30de6e8ec4467ae30565b5b1bca14e64bcced97d453f0d43d0d66c0c6c436b0991d95be80624d64504de9067334111ebded08c27aeb580c47e59cdb3efb07b3b097bfc8a202b0283dc6be73af9a25499239e7acad3dc75401eded5d7d4f20be53b92c4b13e725ce2ccb922449f2de7bb3ef5aa6ebb9a2a48cf309e87d4b62adddbf2c9753f7d6b135cb9c73c61863dc657f258931c6f7de7b09a11625723f8988ae3f79ba5f27ec379b66be9603f64df4b674ebaa1d715e27ecf674d374143be9d889ac9047fac6bf9dc2631ff9a41abd838f535c4ecf32d5a12a08a90a82697ae9cb399affc4a41abda134c039c74e65a74a15045c8acf34ebd2124dcd34c5a908c899fee46bc239071be5c060939dda4fa759aa6f73476cee747be6aebd511b3cf69c7f6085b9d34ee1cfb9d41d81f39c4fdd28d373dec15ded14e9b99b5a6b7f7744f6ebf854d59fd5fdec14e9f73abe2352f5738efeb6fad8d19c4f17807bedbdd79643ba9f3d7f5bfdeb94feaed3f55e16aa96e9fa567ff7fee8af3f95268848d25eb7f9b4feb697f4b6e8edb56fbaf94b713089be8fc11ee3f2662c28ee80c89298bce4c5a49339ebb1f139db29f2cce4c53048208ec29e6fcef74665b7d74f02ef0bc44115a82dd79e54a3afdbad3313e9466bfafa1965e12b33916ec14208395f805d735e24f72bc93213493ad51d61157cca641a146fc856bb5e266396a450cb2aa56c7175d929fb18a8d83b027f7da97d65619556c641aad1267051e9162880a376b9f5a54300476121062392fe0485a34897c24275258f489e7400e0292be906b8faa3275d041c65c3f2149f740c9066596e955f4fe61b4f965dec08e075fac25160384a6c975f9e74528dc62a1947936e1fe7e55310c5f99a709074d3f76439907e8338483af08ef0609d4827413ce91b03e9580d408e740484e91d7cd277afccb21c321eda1a78d2acc202887a93def464a74c271dc5a920a808c0692ea73a3245cb345571e9900a82fdf3fc9db83337843b2d87ec65f6724df78242172e6dbd14a6e4d41abf840c74435a10c1749ce37e26dc3a79d6ac56f3d72b7d1644284d207950594bb21f685f6be923795059cb1400347c8070291110bdc93305b1868910d32034252a92a618fc64a109e58a2d59eaac31183213b4964e74d618dcb3350b99b80675ad96283dcb2c68de8c37357d534da088ada54f49cf8ae2d4f4e53c4fe014d7d2e721cd9adb6a94e1b2963e10602b4aa6a6cf843b248d1a136b0c70665e3e226b0c88ca1069508e6b0cae1a21157e54386b0c7859a6cf84a82642d6d618602c5e329aaca6973e138604ad31c8d066357f270e717d7a8492ad4ddff563acb1b696be0c6eac682e357d97cd859db6b5f42d61ada82e77ead0a15d024bc1f3e26a2d7d4b4a5654a71a76e8a1283bd3cdd2978198de4a7f97ae7869270aa2073e329713665f427e0b03c07f7ffb051fb41c6e1a3e14d2af4235c7e94685948257940f23351ffc80b817b6543c54773ce8a18112163d2abe94480f31c47cad2830b55968e17ab6f222476cc55aeea0152ddc9f8b2b2bd3d506a9130ebd4f0ca9930d0a54d2a464a166f06761e9ab758d9a609a6082a30e718d810e8d71d5b250008bf6f7e73878510da9d19a0da9073bf426ff3a0529da7ac62a0c207a9f56b8883bbdcc91c0021cb4414b92a45b923483380b0773e7799eb9f34c724e71652561819a802d33f476585b756bea434ea26e1ded9daead505ba6ebe7a9129d4442b4ff7eb2707aea771df259385d7572457d16ce5f00fe496aa94f97091727989c10b45e07c10a2d9f3b4b801c6162042d6cbda72fe7dbc1cff97614fded9c67a6d3af1a80ac333de7b37f268dcd71127c291cbc503898cf2f7de7934f9a4f5a8608991a90aa176d2ea88093c6079a1db713eb75d527e57bf29148a3fd371191153a9b365f44008551ebb15ea76085f6ad4a0b081018684e98b15ecfc00a6d1c202f62ec316383e66cbd9ec10a4b601cc455e64f932159506c1251d22914d156f8058e2aadfd95b6b43d4ed26237f6b0408cbb39076a1da318be7839e7ecd8936c548a83388ac806b1bf0f04cb013b918db2166c00160400e0a0eeedef03cb41ca8bde0eb6ad96c77b84f4fd033ba523c9dcf025494b9a389224c91c99c3e57266d902b56e816e6d1a91ac2272ab739b733be4d63a6ec36e9968dd5eec8c542f729e5bc7449ecfda2069c4411cbcd95aadb55bfdb3964349e674686a5aeda67abab5d6da18fc69ead36867ad76a321ebd3ea306b235755d54960edb33ff4640fd577d77c570d07edce92c6b745da49a376eb640f95cc6bbeec868336a759d7f9321b0e5acff9721b0eda1f567becd84f1f4ec3c1a3efb2b95db5bb8683370d07914e68ebfb1add13094aba056e8c5e756851701f498ade67caeb29e1ae6b858336a3249973269030c293b9cc9565e9b8f2b73149926989f39ccf043128c9ab26807cec858318ffa6b874e9b336981d77e56dc2938ebfce6b7271bb67dc977d26e0e02d7fb70ae3df8bbf2eb4809f2ecc642de0470db54037c9d20370df6401f68950f50207b10fdf7befc5576f35b86e81c3ec01b84f7ad5b5ba2feca9b9687fa2155ab02b5c5ec4c600f252b15ac75656c821900a1a6fc2a82031b25ac7452bf489a1206224c99f3a5cab756cb4c21229f6e4a92273bba143c76add02ed1d8392606db6ba665ff6d85a0eb8eb4916e0e02d0107afb5962431997fe7168ddda88dbe8e1d1b49cf327b0a9e3d29ff32d3984cccece9c935a963101bff34cb567f9efad4bad7eb9dfad4de0bea277baad89fa7d893f6f8a754d629e5676efbf3f8a7dfac3f7b4f92e45ffdf7e480f82712d95fbf72ec08a42ea42974a2b28dff4047123d6c4b98f8a0b35a3c44173fc696bca5f559ad93c051b946068af0a9a263d09cad276b203260748cb9e364cc6a3de83db7db76d9701485cf34debab1e1070d0a144498c459ed8a34145f5867900059ad5fb47bc45124907a1164e015dcfa3dc35119b8f56b86a3dc6d9ef1d6af58164265115b7b23e388902aab7083397176b8e9394b6167b57ebb70542e7e0915744ef41172630a96b3d5facdca42ebc707212d142a0251015baddf2b1c85dfdefa355abf45ebd70a4765196f71fcc941844d0e1676eeacd6599085b60e92b02d4f8488f92aaed649b00e02eb18b07ed3d67014076f7d7e7d089f48dfc0e093be9fa0d2bcf82df54455e4db5a310d7c5b325b7676e5b735fbb2674f5a0bf46d6d1ab3dfb6cdba3d5975ad9edcb768a38c97dfd74863ddb7c79317ebc99bf5e4d6963dbf6fd7f5b2e0fb828961f07dc9caa6a8f87dcd70acfb9e29f9be6869197cdfb5cb46a606b946241267acfbba3d994912179f90fdc66bb8c793188bc45b98cbc598dfb88b0c7b3d099662dd58ec494c5656c8cb6f6ce6f8ec494ce235cc66a6cd6fdc86dd9ecc9982ef9c6d60f9fa9d8d2dd69d7b3c493ab9c50588c8efdc95bd9ecc604fba2533d993655a9cfcce669ecf9e3c417620c764fdce6d2ed69ddd9e24ab48b2f8a48d30b32fb2c7932456d6569991df64d78d75935e4f9260624f926467e0903ad64d9e3d49a23db9b5c9b427c9b5274936b42f248c75936e4f965527c8b2f86469c3ce8cdfa5f1492f7b3c59623d49965b5c4fc6f95d76d95877e9f5a44641eec832631192748b67ea77e59183abee642879adc156f40134e72885c52604044510135b4ec4561de3b58672ad935c6b97baf39aeab55bed5663415a476922916842eff4907612debc4e7597b1ab1d6b69c0c0b0e8155efae83801468cce30b476ab416852bb99d20d3f0fa26c0581a3cb83f05e0e200fc2af1a750842c56e2766476667dceddc6eaa5d99ddd9ef76dbaac9a0f23bdff959e377ded3f13bf762daef3c38e5772e3583ccef9cc48edf390834f2fcce43a811f63b87808edf85d9e0f33b07018eb26137bcfcce6f1a75b88bf2330b13f0044c98275b67b85cad51aeb3706aced9923769ae5c91ad512f3ecaad948ff26ba60ea358ac3b4d2a947426492b29c9eda6faa4242793fc84f249de7b71e593dc6154f9240fd6f8a4b0185f9f142623870b369fe4178d3a4c828282824af3507ecfa8432833ea506791536aae7eca6f993a9c3a9784743de13aa2e2cac8655daa3128ac4d0e0eb0406beb928b5f5a5a5a5a52534ca3f63bdff92da30e775aeb3468affd925187dac7a8c3252911c0efcdf90d45f5bd9edada9ba3e37bde9b13e87bee749a7c8f4ea0efa5b9f99e93a8d3f53db772b4bee7974c1df6c4d0d69ee7248e4a9fe7671622c0ca1e1f598e425aa458793b84249193e7caf1ca71e5e516cfe369e7f1783c970af23caae7c901e426068a2b39de78259011634714b4402774e165163cde8ec74be2c989f1499ee4578c3a4cca4f76c4f6009a03c6ea4f18373c5a384e60e196ad76bbdd4e8e8bdfb9fdce6f1875b81b4283f33dbf60d4610fbfd9363bb66c55e1227366d0aa93840d0153c36862859255af78ed6ed1ccc6bea843ded191a3a3a63f72bba1fe286bdd547f747464cbded0f8a31eeb91eb374afec8fd8dd91f79100e8b3ff227385efec8a5e2b4f8a3384dfe284e9e3ff2eb451d1ead31f36a06af0e0194648d9a2a7fead05855d77ec0d09485ad4159d5ace255d581386ac9550faafe84a37aae3a148e2acfb2bcbab425879137195a043559b7fdeaa206ce5831481c1f5ad49c42bd2a08d5849aa496aa9360f66a922a674c9b9a2b2afc9441a24680c758931302dd904243cd552a5655b727549e6aaa7eb3de5e35525930669c03c8cedb960ed5e629f246e4eb5826d646cd2854f54855b5aa7a157b6c7aed50afa9d8b8bd7652b7d1f2da7bda9df8da83c7d7fee406d06b973a8a79edb78b3ad4476e77f08fdceea73f72bba5fec88faec43143468d8b5b1432ebd1181c37f28c5df162676d3d3af147ee476cf6fc915f317578c4e3fd7e039fd7f4bc292b8fc726c7f3d848799e5b36cff3cb451df2ca0fdecebe60d118b3b6c492f9e362cc1c3528b64ec826ccc2d4e12e2929e942d2913529c97dc8270dfa24bf5bd4615210c490123b3c6824413286cb0a8210da191e6250e4e96ab282c8c407b186ed41f8055387207a2f7a3de0f7b4d69eeb25df73a7f2bd2d6b4e7ccfaf1675d80b2e2d2d2d6d5103e897fc6651874b58d4a16aa6f8a8a3288aa2a80751143533f628128aa228aad113680f455114455174879a409350144551144579a80974093d13e4977cc9ef973a5ce2f1783c9edf2bea909704e793fc5a518749e76eb7db55e1f03d33277ccfaf973aec69adb5d65a6bed978a3ad4476eadfc91df29eaf0e8b46fa6c4b9a1220d4c18d9aaca79ebd235e7c80938abfaf6aaba05adcdab7ea5a843b54b1da265e07c9a32b9118818088cd0901d6b5ae3c8143184a89831fe59d342f8530706b310afa93f6521b9a665d43e4dc78889fd38e610c325d5800e1d37b12a6096a44831a134b56778ddf668d33e7512ca104a53e3d5a765383e354ad334bde92e4dd77dcdca8a3bd73befedfc4651873bd75a6f3923f3da2f1475a855555555555555d5ef1375a8661445a3947153e6ec51bf5cea1075a20e53a9ae97f2db441d4a5db870e1c20507e228d42f78f0c28530247fc1eda0a757fd3251872a8aa245b67c893abcd0614c8cefe057893aec4076e2e88d8c8c8c8c8c3c6864e4506483dec84847589f1d6b44f89031b2ea03560c44e7c7951b466e46d7c8c88491363212fee691fd784d64d5aec15efbd55287ba97fa99ba4e077d4a96e353bf49d4619a45a893ac5024ea6798318fba1653e3517731411e1513e6d1178ffa45a20e5129d5b52ae8d53056affa3da20e5537a20e8d3e7cf8ade463fde0baeb3f78efc57fe0f11f3ca8d1a8c4a759acc3a1166394398904100000531700302818100a6651142559127c0f14801670a45c5e4a9fc8d3404f29648c21048000000000800000061b02aae86e9a211ca3843925905e886ed2e6d2458d4fa89c195cf049578e3f1e8329eb6ba5402f458ac81a02e981eccd9740036a7b07c178740e4618c398f06eb890e12ee30b004bd58bc17d9abc185fca2d191361dbb0f0d990b2a0ca5b4a328e4eac311c710a95f7eb108620eef35abdc06b3a3f912f82bb21ef550f289e283555a607da8984ba3b732998956de13feb21fd7b6e9cd3a1acf5cb4199889423a8061b027bc69480b49520b41b24667602ea8493f678c4acacadaaf98445e6133437e4d0941eae771332354ac5641a3eb33d04206982f81ad2d426eb5dd5e81130e0927d36862cfff1666ec3789e2ca43e9737458d91359fab232ae2247caf2d15a165a0e8ec0e59e48aa479225ec1246ed8a481d1c6a6ee9a82c882a208940e335fabe8aeffb78bb3492d24f10af7834172abe8750896a053a51e0eb8b143aae798acb9dac12f0e595438c93e7dcf69ffc5498ddc698f8fe3432f7bd460696b90eec9fa6f6fd101d60f38cbd767870a940c50ab38276d41a227fcb5ca1ddcee40ae69ab43cf2553f1ef7c0e5d748bebf98bea1d958b7f9d12178d79b0eff54964f5887f8b1c179a72e937d6042e673bb8a2698585b9e529023a8001053068c2392540723864621d9573e6f21a6558245de0de20a8cd9b4eca65a488e3d33670d5435384a84d0369e29c3e324f821069b5809b91f88c2c759b1102339ac8880b1b87e996e13a06f2ad39c3b0aef5fd9e4eeacf89d8c8b98fa712ea740e94df06a8b1c331423fa7819ea58f435b7cdb7959a1e003d49e47be02a23fbfffbe3feea5cae8dfc31822ec87aab3a7a580a575f81a1745d9a08514ac23a1332ebddecfa6a383f16ff3549a54710587c59f6043a2139e0ee0d08e437d83cdce406837751d31737b252b0aadc8246e00d275f54700828529e098ffca93567fe06fdc91c56ad1b46f1f109e2c045292e78f117053d961fad39ba8becc6c1256ee1f418980daae9c27b0c1934ac448bd0590f092300be300f38dfb5231ee248382d24201d63a6d8482cb4117225a549970475963e1e35bb06aac95b5bd0c6440c9970941cf16d0e37435e59595a3e30050686fe5283c8fbe72319a1c3daa696f94488c484d3f334b14975eafde16e6350d1624700822e73d6e5cc251547f13f5b1cf0183f290cae0b33bbea5d2f4b5e99fce957aa5bb7a19d19b598fa33b12da54d9bdc6236d9868f316da2dd722be601f83af816eee0ab7b793142fc0095cc204a6c091fc6e8e16296f40ff44546e036cad99bbbfc34943d09c635302333fcf010a8e1e22415b1f63b93ca8c2ed1154bb728bfcc6a183a12bc96627d90af35e4bb5b94b0d5f9aff06d12066b2d2e586a6b10ccff4772d1dfb713fcbf435268fc68178dfe6cff30bf4f8f25ef3cc0460e34580796600bf83d93ebb9c30d8afe5a788ba5b0ebf0a8963f10d02409fa2bfa353b56b0246e9c15e2ebbd304d8c16189f7f633becee017e473529ba9d8f9b011cdb84781ce9fc601ac97aa04541742ef4335b861251eef73d58138c794ba723c8ba265ea35f6e7255636b016b78925614df74cecef30101262b9c81cbe78ce18fb4c8e12ec738c3282f082f7279fd23170d9d35dde44d3cc88cccb28c23af2bf7881e9d47ba274136324b46a47bb057b2851178e0417fa57ea9c0f99bb6e51487de06561504218801bf280e2e679247ef39be7b2b9e5ae372b820c789ecbd07216babed09c6ece7947cdd7d36861d8d8dfa27f4449f4b436e73dd95e5766c56fe43cf0d177c1161c7fd0835fbab227535341e96e5ef4031640e116eb18c84ddf91208e90ca38f915e779af30cf89e396f2ea0b9105082f9a4e0f7f680aa4332a0932ca83c8d99247474e2585992e60dd79f295b61e51dc5673eaf7382048aecdefa7db4606351d11f84a41e269e98be39ef1c72bc84e961cda0b925cc326eb82393dde7c014dddd6843b8fc697424bd16db279366e6054a0ef68cbb85aeab576e25403d77e2f3a326a86ae6634bf5716da44272972b5a63a5f8797ebd9792959a117114b20d0156cffb28535e2e04b8dfa298635c036c2cc4a84b738403124616ac5bde1d18013606779b8aaa18dcb446fb218aa06b8840e3bb24333579c4605b460c86444ce189d6c3ee44d37f01be09c45741c75f70c50f975d745b08e707cd0059364b810d7d6f01eebf0717a11f58a9d635a7ed65d95dd9f10180b1dcc85a74c6ddfeb58ff45f803cb176aaa2fba47e34d09782a5c2e2d2657b0d57f9291f6b5f4eb3024edae89943812f131db2bc5989275e9e6b5abe3485e4e5793625377f4f5550a3bba67cfb830e32e256abe816397ad166c7f758be686b97713c0e2e0fc8396a11e422e72120c68034dd0140af5c95203256cb6490a102fa6fbd938887af440338846d19fce289ca514bb5c594413bbf68ed40e4caf7716e9a6a2175510109e9a304987a65b2610882f2e7075b550b11906a31627e86c534b8c63a913cc58dd7ad477cbd2411101c79b02a11aa34066518f6e0a0b7eb533ea267584eea3319581210405150d59441cddb38cab011ac04cf9425767a0e6e84b5f68c7b5b69922dcf732c932319ab7f067ec0aecc325c5c9b1ae0a2bbabe123e23f578ce6610ab451ed86aaf8bc1fb0a051fd23861341105ab33bda07e1fa912e87c5a9ea843c3cc2429d0e6a521e176904ecf3eebfbd5074009a2f4a9eae235d7cff90468a70af97b9d3ea4eb16eb95da45be151c6dd313494898b0d412d5ef2a7a34e426a967ce33532980f3b06512d5f29fb99620209230cc71e1658c9ce8e11dd49c415b7d06025b65545751377e29b33925e4582c790c2020a7b53a0d8729053a6b5b96a7b015f79b45f9c6cf3cbbb777a6a97483ec203ca01c69a3f3ce5e3d4b3d4fb45a7206c87ca6609d5ba56dcd7c6071fbab1d817cf401d752f377cd66a5d745b802c494dc02997f0cec83063259cf40e05533d40e6db5d0a255aefe289a3cd377225040d14b96eaf11c10d96538c1f22ac7d115650c9bcbe512b71691b101a89a26ff498d0974c738202b7011c46857cce1e33dd0f77dc50c4a6a839a68dac870dcdb4ba805a6358d57842394a721ab24c881fbdb70eb2c52a73c390ccce013646d8cf4d60abf474ad365b6914ddbd956f651a4a6c24260c3b4b10e49db86e2db75112bb6216590fc7e22ff611a69a4282aad3f40ff7fc4f0c1a0123bfdf68c26d437a6c5d88a3919afcff40fa46671dd3c5a1f13a763f0a7bf7b8931a64c46bcaa1d58dff683ff01d88ed050c10fc97fc0ec737fda1b64f93b91f66f7458c1a9b585a8ac5e3eb5e6a70090922b97766dad5efe08b1999fbb4c86106d6223fb5c3ac66599a4f185e6414cf91cff425c5e69f86e88ee15044cf430ec7566417bd0def8c9db698c43841c335c96d6dd7776e1c8a2b0daf78286b654a0ee787a4377c308a610b8377384e794e63c4969da285da86025789ce740a351e9b8e52fc850a188f341578352ee174bb21bea8b032a784d654bcf00730099187a5e1c9ba605a8869980ec8564576c2fdcc6cf3a692f06533de85355d22bd8e934776cc72603b562d3ea258553e3a67f8f41f2dca5b08b1064229cf666cc22b3b139d8cf1ff16907949b4a467862e08a19ab5ea4668f6f8657eed847fb9bef205e930d7d921c3ff2f6a960de6a3ad381045989b35ef6b2e057b4f859211ad1f30c63c022c9088923db6a1f923d8bc4764cf3ee7b136a41581de4f3308fbe1aac4da81b06597ed7477b5f9134567a4814ba684a44b84218b8d4a0a89e256964c3cf74dc2ccf5c677be253b906de30e179b4070efc7e73820509087e4ce7d4c767ccd9c20a1ea61510d99d51aa921597403ea4a139cdaf67ce84295e3d89f49839f8f53449e4d434b6d3259fd3ba2bfa739accc222e4b5b5a1519e85c6c923f13c552e26037467e0e7a560e02e1b36374eb63dd53177b4a916fc335d7207eea094e97a996dbf233e4a63a3767cf26db3ee0b038ad62ef1c39a9662028af39716663b8801364add1ff5173150eaaaa9fa2f502080d81443ca99f04ca7e29d1717e6d52e77da3b852b7dcbd153f4297b95b8df48c86971ad66449b6d1239f465a6bf7c8b7741a03751a51ced42069ba040e34f391b489809f4beab9ca6bfe893c546a6a173b61573d5299d52eac11f7cc76f9a61190c5b3c4fe2e63b08c333cc97c2f202fa7bc71bc219685c26f0c2d40023e1cc9155e60124c807c392f3141e2ce157304cdf58064a13aaa4070087ceb9c419444974af8aa6895aef7d7806a481346b343f0bd4863ffff342ff3606370605feca15b2f6a1c625a705b3a17652bb455e4cf1c64f39217cdfb3bdb66ff31ab054a58a15f381f8203ea21cb739d349b8ce782c930acb91095dc27c244c496597b41e9761b52cafe78825792d45b64581f08b3d5252d5730091dee803540895d281bfc186ebb249c4eccc4b08e2be058670e4f2ad9ce916a3d075127ca3152726d4a913ae3f3d6d623504fcbe9eb1fcd16a8080808038431de7fbe7fc97127baf2c1e0b390a4eeb47ea12b2afe3dbdec96a558459223f33cfb842af7f0e866e37f379a69ab2219548aea2a6640dd5f7b544a1ec9c7a7e748926c717ba19182f929a14bcdf734fc868b9c8e2742bd543bbf512a511a240a562b96dcb21f6cfb0069dd5a5d4921183c2780b0925cd8bfa1be5c820b8865cc650ca648f7480950cb3f51b296589d1896e2d9f6e1cea543d2794fb5b34c00e6a4e7c22d85bf584d0c6b80f1d44713dbc95d42ca1b8b3a8f7435e1796a696c67deb8a71ef78f3525ef1acbfb5d96a79eeea5e635f9cac4245b62e829ef2e7f2e9aca1cd764a5a35af278deec610bc0d9fb07b136caf9f2c90c5796c43f4d19b057665b75e0df88e1c06796483324c4da7fe57d1a7a10a1eeda6c3b03db61526a47de109655b7cce702b9f978bde84da5e7f322f0fbbdaf769f9da43419925bee4507f043ce949a1cf032fcae3223e116e7e300ea0ff2bd7379e990a26daafef18a76020919d6898664d6f2c4cebaf9ca27376c70a5bc6dcde17c22b44581219dde2916f770ed0bfcd8cb506b37469c6f60a529018284e47ad71d6d99e8cd3d188a0df53f0d5acab9cdf054c11e4f351e12f004a45da77faf93e1abb062de6b5eff24163a1f4bdae616b52599f310946e33ad220980bb7825ba7ffe2a04b36bff6e788d0a7975f3c3d04c54fedc564baf5e2d239ab3c15767436a58b11b35c9a6f00a8c6fd1f9ebeac830d9e4c638eecb09d4db392e9984216645a60475bc9f8024ab3db4229676307aaee89a4cb7418ae5490f9128d6ed5eb210f5974ab0b5aa39b454ac3503a3f5b55e6fc963c66b04c030175ca7c43b40514d2888992f579f7095f72c69d9e6c356b8f39f25dfa174dec563e2dae436f8fd75ca2f3a777803ef9400f3c4351716f4c9e2c033d51e3e62e775a14dcabd8cc5e897f92d56fb7d231db09b95f64f59aaffca6a49250d4224d81e391941b7befde1302819050e1d93bc128a95d4ad05dcfec5898191659154484dfb8d42c414f2c5594785d9b3f46b23e46ee31f076c434d93e30a195e58bfd78526f6600fee578f73ff0572a62739b1c061fe1f7b461b263445bfe69e5fa3d7223f6272c3396003bbd84c368fe35c4f2a2e42e69b6bd8ba373aec612c92b4b939fd2041583bdb278ed474496f4db115b83f435c5170a377401f8c55965fc5d087b31bc11da403b807331b183d03e90c60a80a44cb05f2e127707f774deb26b6b6db681e299570c722e5c46337c1e91bfdba4206ffd70951b1a7e2932f128b786999115a59498af61f9cb6e3deba986e2b5ab3e5d74979041818809cd80d1ec0f533205a492ac589de68ba9fb01046fbb129dde43619936a1fdfcc2d98df06a14dd1795a7fea1fca7a6764c95d1e8f2e4bf054b845e6e67154ff28af05be190d2ed86694d40670a8f78177eb530ac06fb67e490d0551d7bc082338e1e96276cb4cd526916517260caf68368e8d53d3d7e961cc081321d2ba85a0502bda26ff916de2893762a496158c72e4a2adcbba63983417c07e893551dae145e00267fbad306dfae560e029c42d20d997bcc3514d7def1a24dd6b5b8c1bee2c7bc9b975b073160b5446ed4422632aca88d0ce74e1cc40ec5cb2e138038617b482bd9dcf5aaab87382b0a00a076ef7bcacbf9a79c572ccc2d2c8c8258982c95e6bb5b08be35b1ecdf5d99d1a368748c47f04ea2fb192adce269e1bfd489d2f8af236a9fcb39002377587484826e3ff1edd8788f4f247e40edc0da57fef76f32e863ac9ec5e46136981fa88158769324d030fe546719ab6d5372d245615beb5015f4112930962533e0171822405ef58a619ec152d41e6cc54947c8cbc39799d14a76a8e95987ef83ca36e58d73095318d1d93203daeca55df4ad3d7adc8298426ff5abef98a2ef96226805bc6525258e6c09702f888cd69f8ec8fab246c0c409ac1649e90c2a40a5d8b72d89c5c8e83f77b6124784dbc3d249e6f4d230927f7f295a017fc5841b97374839caf62310da0beeb333551e07f843e80e3e3586fcdeb78cc1aa43c74508e50856bb3b2d43851c447d91291ac8566c1964ff3d499a3a2603631da61479d2c63faff6e3e9658cad502a7ef501f93a3259b5b971238d03552b9948d9f3e39721c1c467c24e7f6e498f02dd7ecb67ac8c785e79c9a99a152a021c3972d249f86d9a2e2f30de6a2b8094b5b6fb73331e565bd3b46be11d60cb99fda480c99a4adfec05b363736e968bec3d3e67f2d87c233047bd757451b16ff27057a722a77b59155918e0868ad64a3cd18bf3a3ea3bff8598b775a9e0916ec12b72462bb3d4f108d322bfe3405d6d7729c6217b5fd95516cfda0e872e98d473fdbc878f3146e0153cfff4dff39397840bf58782fda525ef185a47f477a5aed59fe199f6c992434e1df0c84f329276b87b9d9595cdd3830aad83ccf7a185e439665b204e854a33bffdaff98f1da20c6719aaab238dbab8168aeedbfa1ad7725e51b46f23ca992ed9586722e6ed349776cf9171d69765e0f178a1ad8804057189f4004821a71a5462ebfc3849732201392ed581834fd069dfab8356836a56808671edd7c5a3b0076779d154436a37cdd7fcb68e6ffb5d8308f7d0b0d250a2e40b2eb2f0a3886c5cffa4596ef6a29c1abf2c7054e8fb355a7cfc7563e7e31158048465c6e3644ea695e31139bcf9460f51e2fc10fb94bbf76ea5c86a509652e69d9c558e3642e9ef4b75f31fb807406a895e212d49fdb18640bda0384bf48fc06e2c61a12d7c125917ee7c8024fad3ef96434784d83669a664b06d9b417124bfd52771699abb1b0d8558c1da22a0fbbd1924fb8533e0114afaf4d4ae67b57f98a1971ff9bfe05a4e70d5674886fb0a5deaf9a4fcbc67501da15fa3e878f8723cba712700650e49b37ffc8598eece08b9bd88844585d9338900e8245321b3cd7af6593d7552a1f258a5d9dac6531d06401c6f0c291d8c75050fafa0b8615dd41d6dd7ea4e393d811b96e0076ee5ab23b9e20c8674af8f48c1c9434989c10b1d32258c4f8d1040fd18751ec92c4bdc19f728157a9c404cfc07a900b1713a82fc593a82010bec928a79fb21dfecc48f55e7207e135e189b8d7c58948758073e40f2e008449f165662534243d59a3d0e25a88eda0d92230bb97be7605db62ed527015d5370a087413b91c10efbf92e7967e23cd7ea180361ab46fc1a1a3026b000943e982e2127a48c26c7841dfc369f57c816dc1da20df387223fdd3aa5bd43dc04a04a422e265bce40293ecb26973e24fe5e027689c0116e7f72ca02d0d3636b6d64fad604952f7f460a4a9e1d100f41a0ed04163d2382c02dd298c8a021f8839c863846a4d0a5f0b5d9a90572322266cc18949909249e4b9466e5adc5e0e5516c40bd0f903c8f93d2c7fda6f869bb07fc6466a8e4b5191d032fbc274f91fd3c5c73fc6d288ad8dae65edf66a5da735a315997b6fa6526e8a8477b2fb85b9ab8fdf91e1c7f6957e48e9917b1da4d1f4e5393334739a6cb8e6a1a5dc71ee7fc9093baf4c67e10c7433a84bc9ecc2bde80ccb0fdec61ebf9f093b10f632b0e98b82107566d2d5e639ca61cd025140742541932544993fc16fd47c5b3dadc3ff7f3ec8236056c7cced650254ee8376abd1aa0a7d23fccd7714012372343ef45330181625039489f44e1712bb7528211d1cd0df2ad925e162acb90ef9505e8891e729de51eb526119b944ffe443b314cb28004d2847dae8775b0633d97a6f76451b0c6d1b979813557fb7ea33c7daa6a9265014e298a8bf6c676a40ac4351fce9e6b2d0a3f3792779162c9040e60a618baf0a9fe5dc10a65ea3425cf9f0fdca499b5e26ecab06df6a3ed75f97305f236a5b9c2a982fad1400455486fb51dde21e98b8d395e6ce5eb2ff189fb505537a6df96d901bfee0492828dfff7bdfb40307acf814210a103a34a2a5a1d03d9d9f05f6e976b9d7096e3d29675f129218f9956e2736b025446212e443ddd6518166b195dd13fac5bf5b0b59a71d71c96127fd96184504e8da7819a90da98ae511fad294daf6b648b66e030e78e0a7e110221a242758cc0a61ae04dbfeb51a7132b81ab336ec48466281f4516335893890fb7ec3dff06e79ba88fc33dc282d5c52aa269b1ab4aae25f73cece5566056fef60abd50a4d102198391a8ba3531b0283da0003d4a196c248989a60c817665074bf68bdd062f5ca3bcc904390f27c4f694a6d041d54dcc4f2479760eac4dd15d7c009fca4143327453dd32cfa10427e2dc357052077b43a4024c89c46b9465c4cb516b91e36cc82c10f3a92906549ad6a0419a8c80588489f9250d84a883622cce2ad6c172904836054025abddbbec478990724afb55b32a43c2e52522320af13e27174e4316e30ab5fa904af4bbc4db59abb07850757813445eab48e552154a45e25f10d22d8b950249ad14919603845eea5f89b3251ddca112884e4e51402cec06554f4986461a6be4f4d00803091b527e155916785220b343d26de5934bed6e03e026f278bc4da150711edf9dfec9303c5265df7a48b65d9fe4933229fa7622d6f309eec301db04a84b709f8a27e5f8185b612f5f94aa280026b3bf608486dec4929e2677c49cc34e896ec6e2c3037552d648eb16a3d1dbd918c5bb445db61b4d0016290a77878e6382a3a929e90b3851de21563613569a553e2fc2f49e9f407d99f0eba6daa634d669b69c61e8a02ecf736b0b819511d881093f7fd335e1235d00e35825a0562b4149cee279954481bc52c7b46405f05112eca34f2f4fbc0ce0c3ee9719fdde86eb77ab67ff2cf61905f5efeacdce5078cccf6171d1df4d2058dd2673d02a4972684202514f1d95dd161725a6a82f602c27284a96924f11e438788df25d310ed2448484d97255c4ddf44659c7c195be3ab4b8274bcf4396babd6b959d144b539a37b620507196a0fdcdbb8fd9cdc6f678b1c022dfa50d84282999df561612663cddc976621e78f60c35a042d72a6dc8588db27decd982369e6d01d088ed536a73af49b5b5e9a95351e1d6c4267bcc164d0291c6a19a359b45c6be51684ce61f5a844294b9cb9645c95b66a534cb36f3b042844576abf6767087a7046a4abdaa0ac3cd15189de474099252777867a65a0c4854d27199dc96d3d67bf60a2c389f1841895fadff6f47cca1243fe5d4317071903ba73c023e64c824a4263b2195123c05af24b49b51f438b55f423ba0adb1770a3211968837b1124ff3a6e12599523a28b017a7dd72da1c7e2cdc1bd04f2c916f8483af17b844fa6117a9a623266f7201bc6ad242263f0ad92a1586d779037bc16619c4ffdf0a22b1393e0d965494d7999c8bc444243a5020126cf13fcab95c8331d3b241c2c52212a1129332de6132026f18c4fd8414bbe589bc023b0c6ed81d9429025309727b7c37541c04124de94e4be2b785eca42629caa78a07d94c7e22a3b22e924e292997bc547fdb4aeaabfbd37f4f49d5f6190f38de5be27c0543bcffce359febb9ec0abb317623291c6042ba90d732cbd78de97e7d4c1bb5f70e96a59721ff4bdddc8f25472d2a9a7d01bc0d2e95ad29a23849453fc525ae1171c64d67a057b7ba4afc5f4c47e4499d5a72cda9e7ef89e1571b1ef15be00a3bb737a2714214204e60cc35f7ef448bb17d33d0759613be81a39669024087450a8d4664ea376b123a88407ca3cec0c5a5926a6784673bc33e6cd67b24a2c2b9e38995fb059016074ee9028c5c75067166fde826832ebd00e7feec430daf8179c40a453ab0f40c1dbce04dc37c76b1309243d7fd06d812a1fcef23ef27c7b5951c7417c74ca089cf9d5870b9237132d298f7413099d0fc02291259614d137ad8e1793fcafe5ca1cc472b98ef2b0cb8b6d9969c0937244bca86291321d698d0cd914340c83f3438e3e7ac5a821802aba075a56ba3f6fa6faa84c1e22d432b23504617d4a73be0fdb2a460668c6ce239726df78bac0c7d7c76b3cd681e40a4506f6795d7ef799dbfcb80eb085d32d92df3f7cfa78ff828e80165999fb2212219b1f5757e96c894db973e1fb6e9e806166bd231901229c7c1200daa1e99dbb955be54e49f30430130a80fbb14399e8669f4b03d9958139703801b3e87ce829f41ac4e1b84d332e54d25620e8df3a44d3bf9a081223736d465f408e9b1050d0ed275676d6bebcf20a86c7be517ad96e9a9503166f364d6f00cf7b097e5eadd60f6160aa4c73598bb527ab47a0e55ecb55ae2dd1a593613cfbf2377b95162d376fec0b3f98fb62e4e001e0d0bb7b8c12a8c4142341accefdbb05ca3116bb248a20dfc39785adc48481d2c90e9c82571fff56a6925080d60187b39fdf5e27afee191fc8867257850534ec4d99be8165275982b6f6d47594ff2a10687bfe13166e1017abf08d413becb70ab7d0eaa4367370c6a9633802c5c037cdf007c9fe36bbdf507be93d2b39bec0953402262136385de1f6775cd400aa6e29016c80a0dcf2b1c39f2bb4eb1628f07ed3eab80724ac63bd35402ddc4c86a52e02f2f0e12bd85b85019a5c6a243daa93fb038cc3810c516853b0835e2e4253c087188de3a057b8dffb297a16046e88d5dc3ec26e5eea0d4940fa25a5edcb4e9bcc2104f1a678e4836fb36a9608a41421645b4bd94fc5d1941fe64f1448286ffee9adab92b90f7b925684d6a3a7d7200a4293fb6a5431158f8d69e9cd58fc5758c9f17edc5116cef51dabec2752418059b909afa138cca14347d50c3fb267e9655fc1c7e927592c02495452233b2a957f84effd103f3602f30884631709cb08ad9500870190acdad3078c60d7b952c7536f76f49bfcf46434290699b6ce7acab3a061e2265305ce9e11be991330eefc8b99c8e9c391b89c73b0c2382999a1286e055014f78bb6431e2a0643935f452fc88d53a6c160d02dc3e90e0549391b07855b03931f4e044c75e71a669f9a130e467236fc59ad07ba06f2cb52d8c5c0f7b9365aa36c7aa8449d55b647bcf58f0dddd9fd27b385436e40050e64672f29a669521409516cd75418b7c20fd3884e682e98a04017f14b7fb70586fa8d320d5446a5fd91fa988a5a0d5be99b735c9c815b5b065932cde55951fb01db6800c54064c25c788657dae8c61ee4e88418cb550c1cbee393f819d9f8b18df28317af427b4e075d6589a9ccff73d3eae6a2d8188ce03f82be9f34c35e5a5f4938ce7d8d0d57819e5928e3825ef564b09ff93f12601357bd7002a85ed6e8c051d26a4be122e0e39b5afe7a7131afb9958eb1b9653731c9d61e60fab5b3f5386e0b02ae3606472ff0a941f68abf0370abde00a1ed189f0f67a82112b57414133d7012f8d1be5c8c1a52128853a15048535f4c204480a8a1c4f44d6b6010076bfb40cf1619d3e5180ee2f4af4ec6bd250000915ba5509c9b09a237522c9f4fb391d8aac0b11e5fbd59abab1a10c4a88f642e9be9a8271dfacb9c94a0e05cc6f90f698907faf44e1def7ce401858c76a60aeba4b540b78d2fae7ed60303cbfce6c35b8967511a27fd018101dcfb970fd4fa9521ec404be217076fb615ce9f9bb660bd29fb160e800f41009a7aba0edcc1f58758dfd93de8fa032169f830910bef061ee04a17dde7605071dd37b0eef1e640f2ed287cdea87df32322933e9836016593223204f703825967611f1977b08a877add7c3f86841b0b383df2b2ce8045bcd8245178b8974034f96b14f30e07dcb5dfe02e182522df0247c76078b1e103807071cecf167743098107799153af3768b1419748393f845910398146aafcf03bec164e8f8cb7a827ce04f109b5d95c260555b170e6a2cde98ba2d5f57881cb435ce61018894b556448ede1de97db48847ecc983f5332efa211b94e6be2e0e69cbb1e88aef69f21c7281096a29ecbd38c4f2f416346197a2de5e4a6e7a8bff9130693b3e92d23370587a88202a0d4316799b005e584c2379cfe8c52c0b3750a5fcbfa5c27ae985c36a05d72937b5c08555667c4f7732a67df280550041b8e8be2976ac5ccfae3c8a3b3be07ce56c580d2d36e0d7f1f53513447ea3dc7337995e50d46e915a55f10f1ce927a6e41bb28e8881d5805d701a718e0babef79880a61e24a399340cde671f809886ca31e80380f90e465c078326f0348336c6556f214e4269397ab0d0cc412e5abfe6cbeee151d1dba67877e0426c28a1139597810f504260ba26366598d39806f7c168076ba5933688a0b091166bfd7b78a4c14e2110d4bf0cd50f93ac2a5a11fec8bf66b5a553080ec2d65e1459aae226ba675a5aa978dbd63c73b326761da3426bbd321a643c12cd55d9bed01642c8efd8605bf2c00de25d042754749d592c9d1137fc9658e3bce8f7f8e1cec9007fc2eef21c39edee9f9191f5d8ecaa237647873d7d15d2dc16c9e8ad30cb30f66df3d1a532bc4580321a316422acd18b0bae18341452110c315469b83ad8c3312de64214bf0fbab16e12cbabe737f0aa98c89221cf04b186585a020ae40113d9ef8c7090a02959af7c328e042e923ac4d66171d26e122ca28042b9241250d5187e512cc7b858552ead4c6b4c090157b5e991f902eb435241280794b750556137b935b5960b1408b26f4090ec7ad081cb20c3c8cf358f86d566f4c716fb50a2ba99cf713d300f624695882217801039432900ec32b1de178b5e3d327c5aa681336912b8942fd85a5744b11b0d4804cf96a6d9259be522bfd35e3a6d982973673ad674cc0c8dc05e5d3aea6017cd3cb6b26d9709fde000c9a3bf4634aa7d22da97e84416a938a40d6c0583099d6b1144248d1b76bc86721633c506ea73bea720ea864262c7fe9beae0fd9c893cf983263590a949739d0c2061a2f125435a363a51a73f7d870c337cb7614ffc36b72839e4b624574a7c2872a04b634002b3d92386bb00890a7ac65e2ceff4cb19fb25892f280c9229a7441dd8a9b66b2f8ebbc32c6928c9ba7e5fac6691fe0265590d073857146947090542e49e2c64a9d82545bc2fbcc03d2dc0b5a0536052d417d43b21a0ffbe87daa0f6e3aea1237dec4ad4d1e8c370781d582cd7da66c7b3776948487428e8883f81306d6e8af3ce60aa08d092f515a8ca162e5105d99d2547a6007e0d48c5102a89faa8b2b5f843d479766a51dfd6a05698dbeb895936cf2c13a3d3df8902b6b0f8571756dc3eda813057ab244e4123094493da05c292c291e54ffa231f52dc8f426fe4146d8e716dead219ce0835c6c17556acb8b8099b6ef2afb3a40ba2acee055e17c259ee22611ba9725f494f78f1bfdceb2fd3efe4e2a8b7ac2608188e4686d2d7c660b6f6ced248b30ac59d49ee5211037493a2e82067e8cdc6adc404baa2930e1aa0efd63fe9d180f8d910fd5b55613ada69dcfa3c6f7da205e614103ed8f3234285ff943e38b973ea2f16e159450483b4c4974d81573a8e5a6200b0310ff6bf1541c461ffc85568858d51fee783eb120f3c571b45610a99275f8f848a200817173012299c8c7267283de0ee7cc96b3218a1faa91eb2e3471d5421c8ae7315fb547ed201a0bb710101b11fa9033e7aeeafc8cd0bb26769980b7a333b836a9175c89e057705919a296bd3848039f16c24191407ff85fe23e9aa097d4d587661c076c77c674552eb09473d8c8e44ad7f5747be4974fdad75ff80afb3c37cc1deadc3be2191e5ee433912bcc912f0a0ed5e4d5dcc8abc2e15b24cace490463e682082aba855441a06fbe8181b77a5ec3e7177c293d4bd0ea44f6f0b84efe432c36e1144a86198cdf902d3459ba3bd122983f7af0ce79634eb3f67570f8d2dca911a46c9e606a088afe19c60f916b3a3194ad307fd1f0906f29820180035c3f66cf2908a10f43d806ad1ce954a3162b9da948513c6de8636a59322d3d055315d03c8019dccf2e2b0658407faa4e1bc8bfea4a02cba730e6f0451bb2901fbca315df07019c88c4644e77f428a9e1c8d0d0465286a94bad5deddb2a219ca5f76b367b55828837d6be0983e90479bc04fb0a1fb7be783e652922c4f57823b40bca702502c118254074316dc896721af32ec4acceffda8dad682e80dc06a3273663f7837e63cacb825f25fc0b14706d68251c9ae99a332a09f9f12a7bd869d104ec11f26b7a17428221f1dbc610b7a342aef03e5cd7c2fe0c1b5105e4586e48cf4fe32c833994099daf04d9305a7f0d977ba7bddd4d55cb25b954d405462bc5c3a50baf1108fc1e78feb428a0ded9f84179ba23ed83dab0a4d940dab032c17da13f40c4b094f82fff3875f3b408f7378457ce1cfb0fe8d216529d60b945efad641ae2e22cc87aa0328ae12230a88ebc6bcf031d559a5a80219006ae3e12f2c89c9914c150f5f0a1b3436441d360de66ce839fb6daca92ac8ddacba5f98e428299f181d704fb964441d465d3907795b56594e7ee2a456fd960066dcf5049347423255a2a686c71e21dd67d8f44fa8957b54c2807bbed5eb160c2047f6e6395f5119b1e243276f8425826bec31df54a2a54b4b4708588fc300ebbcc6471d5e588730db787207be52bc3ef07b2c0a1205b35dc285165f83f919175474e01e0da036182ba228a47e2223ea4705188ed1c38ef291a3c4748d4850672f648c4d6d46ef7927f0502a95bd49d644630cb4e8e79dfd4c1a19dfaf885ef94d4431db55b71a50b5f7d80594dfab83869c702754a39912bdc6c3f4fd3bd53b7d013a6976d9c6927aef0d7b222051c0c201344ca6af2821a2130eb5044cf89fbf6e2d9e1ffecb2fcbf86fa55821532b7c1243a7c826a4692a251172e6409530577c5f7d446bd05ef1e24f94e88e9d64f615cc9247f63122e1b496a34139e8b03b4902c2ccbb0a4f220a2738a6e2b2852a756e6edef64528dc0b1d6207233b855b35e2023e0cc92d10b1f2883849a1430a7e6ccf9bab7b7dc9dcd595111d1659f2bef05cd6f69334440acd8281ef4923d7f31eedee17c3087c8fc2dbd18e04843d0b58193f7f4796bac5fb0163ab0745425fb343755e9c3eb411bac5f7ce18f57f5e25bc66520d82a6310b3b36e90f957c123c02fa8b3e4f3bec2d276f62f5a05b204c64d7211e025ff6921db5477a058e827cc3d1d941eafada3eccfe101f66adee0a5e14666676ca96f1ec06d1466896c39c0c6b6b31f76631d660bfcee38de195453cac94b5f76a5dbafc75b4f015b763f0f0000bb7ec852a8acc43a3e8b04e71458f381c14b7de1390d4836bcaf2dba9b85153e56e8d38400d89418b70538d3987350e0641f6b3649f8d27f52ed1f82d31edda812f20ebf7c634df480790f3f8a80115772f0effbd69a2d6f2cc598f36e92dfcf3770b39fe552af0a74b842406482ae7717a59881993a2cbaa1d6ed60de76bb3c2cf3c22c6a115e56c36ed9f29e976366ba141e75597955cf3ff86a059d0216f1ffd084640cbb079493bc6e6a989baf354abb10a8088ce0b5df4ff0a9595951432660146f94d00b7a1df307e4b7fbe23c63b61e6639e5c9b0126b7e874dfce89a8e797c3e4eb2fe78cd912fcda5b2cca59721664df089f9782e02ad1834dfa8e6b3d33c0af4e5f0563668dbffcbaaa08e80a2a7e39b66cd9ae94ee641ad5d1ce9345cf493b55866c5016180060e88bd7dc97b30ad36acb469dc6e59d7350fab25fa66829c7a331b4a2ffa5df565cd90e14a66a65af9b3092ecdba228abec564895a94ed3abade3c33dc1e94d5198560a5bed001930287fad1ac4c6870ab5a4298630aa373d09da72082afb5bc06cbab82fc4705e1db7e5c1afb374da417b77dfbc9b10c78eec403c55c17414f6e21ef7efbcb60eec459e14bdb9248d8d91cc9130a46b4b2de78c2fdfe3677afbba2f1c88fc89339bb6866a335646531cef86b1980ac00c3ca42e218cf7b7e2e9f5d7efe2a42a21eddc448e606874ac5a8e5fdf0ea6682985e6831987787c36a7cfe6242087b475c523d9113611b01aee96f84b88b89e8b4080c9d916f6e1c9652b53d47ea847c4b176c10e3c15f7ce94d88a2ba60cc3b95f032e4753a33813d68d31cf2e84290498bc9dc2bf7d27765bf4fb1ed02469176be62a544c0ff837f3058996c6c2ef58ef793888a4c68f7750ff441198143a97531e19b23917eb48a9833c90fbb7dd332ece26c66f49cfdf71a81d286e9dfcb04cf4619310996a2d5985f2aaee4d7acf7454faca9247e621ba1de332876d0dc264a6fd97f19fc10e40bb8f309fa6370d144808f5e0b7fefb762232ab8ec64fb36553555e5919834290a53eb7b90e66fde3b4cbd916d44fd724ff80ccca2ab11da685f167cdba03793867596e09ff1a94f63a937f2592e9384f05a267e9e24148f03a42b2721865985a1b46d12dd3e528012db659acc12752e4c2a76d28538ec3dfddbb5076a20455c6e7f9b53d380b36c3f30414d3bd3343e962b6dfcbd0aab60c5f2fb901dcd7a14ecd21d1475cf0bd8e10b960e94fefc61cb817ef44e2b63c018900559ed128f2702264a899d7248dad32ddec8c66ac5d5b1496fafa0ef94f59d96b24dfef5f61ccdc68e36b7571e07234b6fd99f0046cfa41f94454cb19448fd3740f98adad4f7e501f40f2b0f3012b51c103f4df015d4b423a7f0bddcd51840538fcd6524b691e7efe33963e09ee6b96046efff110f605e9862d6b50380003d9f18d627e5b1ea815191de3623b67117301aaa79277d8c36cc06a8d038804908576f582074651c04b2380ba2bdd526774528ab21c7a4c01a188bce2b3a11a002c4b9f89294953fb56423e4473a918b70620972f3e9188c89d1ab74681f61fa9218be7ae048ba15db2f971939834bc40771c9c98aeb458e63c2c9d264fe450ecfb562a8a5ddd6632d5f8d2a9e8501830ff5817cf7f87058a674551451242b4f46711d5e1cda56be4a4bac3a69fbc7b972cdacdb244e09036a7c89ea8e913ce433785527206602033a619f1e5848b4280ffa5cf052ad5c91cbb55f26a99a052339e29361107cadb96886d5dd90b04b3976e19a9e3cfbacc80dd660b95e609dc32c728177b960e7c33e2fdad3c418ebb6165711217c94995e6984a2500bb1f6723af307e94cb7bee9e95b08bcd32be54f00fea4c0c33c1acb1f180d09c0e23544903290961b26180a90cc63c2faf8bb9598fa53e3b558f5ffd96e776611ff4e4dc90e4160b5f198428fd27b939be2e30402f8ee9d5ea39569008056f0df5b64c109ebc5bdbf3fa597b9d5d15d5a5326b2cd12ac269260dd842285dcd86e229a845793f82a0cd97d50555ac8facc50a5094bd867504bc14b5c66d04578a3f31510243dc07b35645bf8dc9cebb5904c4195f4f71684412fab00f222f6acbba819d77b523626bf210c6cd2d9aaba4ef3bc49d45ee178791147c656807584df9747038e8e48c5a29668d747173161669e74eab5b5658ab32de68100fc299164f7b0e2f0c342de701e192d8988a976ef34c32cbc83c69236162f0b7c98d08f3b095a914e96dbe2ee48b519dfe47ca76c76dcf55e96485085d57a022cae2665e46bc48120b5665dfd16bb7be7e6f636bca3bda469dd5e6c0a5e6e2b8be676ed309bc89b79df2a6adeeb3662b2c406518f03dec671822e689ac403a1770073731c43d8cc5c21126854c2ed0e900233ac7ebc1db74a26e4e5c6877fa44571cbd9c74e832242d214a352dbd71dd427604154df053ea786c3f27f0d983250a750525b4d07d3b1c2946fd3b32208543f42151ba5b1787adeb8a8ac622a8607d28f85e6580adcbde8d5175dd7f626b2b58ee17c0f57a3613110ecd92c838018b457e1a1d5c09e17933bdabe3cacc779c8ae014e4bc4fe276635604eb2fda0981d71240b79df3499c374c5fb2bb23815a0e7d52811c1a19322a1f4364084dd9c0afa2932dee581567c9f1b1c97b156464cbbee3c3514f2d30309c14a64fccda03c2bf5fab7a90c0d6569cda8d3f14b7359609df12e7df0248cc7b2829bbef4b004cef7a72dd3641f37dcbc6a1f14cd9c65ff2883f3b3136ccd45013f53e1432df4268a1fbe10f7de433779d7163deb44241dea07cbb5769cb5ef8e63fa775016af30edbd40edad3bd4efb1ce355d013e2f2deaa8a252f917c93a1b67d805ca442d3883111f08b11053eb76b81ef06c33e8ab1e9054dbb960829e36734a59f07b9205e4c365bc4ff0e3c62b9ecadc318a20f847e45ad4340f4c2f4d5750c5dcfba8e895a53c108db9a06c20b4f8288a62a1518d0318b9e5c6d2973e89cc52dc2f08e5600cf34559b279f30ff905377c1d04fe7db7368a14e54d21806fd6e689e9ecd331680640802647c48889989571a93210c7714d56ec4695471323b7d2101d6c2d35b37f72f8916d15d3651e26deb185ac9b866311c1d245c96c3e3491a4905ed0c7a0e7e2d861319e201ce845b68d0f9a220254a06e50f57780263060e8e72d8b4cb5eac56c112fb27608209d50f3e6870bd9af78e1e12fe8172e1cac7f31fe0b97eb593f95fff26992194d66565681770f2707ed364fa0ab6645b1e2e55ddee802484742fa8355d219e8c6d67126e273f00a3dfb8f18c1b121ae42c9e11b33ad3c4f01e9b9038f86c1c66630b5d7727dc0dfdd2af00dd278a8455af8fb37c21d0d900c01c6a9e45a78a297c72f124b6d2c1bf7673172ca5861128f40a6b95836cf20a12f30f7ecfc6b3cfd795698f54af000450ae2aa7cf4b93a95f32738794812017b1aa110e4b4582d094a447da81c57daf5c33227b53085291785a18fa11c65299ec1a4f8e0e43e9ec1756ad076d428e5dce6f95e61e811708dddf1e5c1cddd0984dd75f4ab87c8f905851ef39ef022e304ebc5ebfefee1ac7b19aec87824034c3d81a99d09fe1534a4a8809116902dc0d625048ab66a2b564e703070f79816df47d8457aa1f767a5c53022d90b3ff4abfcd5449194b891ed7ff79665d1a50d6223ce150a64414b6c3f6ed435797be36e12e0d27c7cb52a08f80d0a141e02f92f51e703309a26dd5e4379da63d3663f8e64f79dffe813d0b6075190f9cdb861ffcbee12a3ff0cc45ca58e8a206b3746bc2042428a1ef50fb1c7d4d4bd11e10d4152c2da985d2cc56bd0f3860bf4f0cfcf53875faf99bb2eb42fbc661788088acf40b3f7e94979af55f9b3123d5c8fee27233a5e88176e4f385a5aa6d4b24d64e8f08604a407fcf2cd02c2d3b0272735f7d86a0bbcb80f9a4929a9f4026eadc28afc6022934b720eccd21e66918c5b7c5c47034c43c4159d7211f6300cf4fa4aaa0d7fbd9cd374e7f0945b9e522254dd4099b75abd34f7600a6079f26c7b7442a76f748386c8712d3d11cb193b9f50050deede0111298e72ab10d1c053551531aeb343c60b751411ff46e291342ddcf412bcb3c0499ed52c440833aac82237db995e5e40313853ae6ba94d1e530d0c50064346478df7b26dc9924832a5fc08d65eeaaefa6cdfe1069d69c8a5a057fdd6993d9f84029b0faecdb50fb5790ac8a2ef64caab18d0acb2c632e2684ec14d291fe69af71ae30b9616bd6234a01941c87365678b766bfa4c8c3c9cdf56c961a2a7ec467f1810883662ad7e691f79048f6839fd85003a3c5b121c0289d6884812a940057a5c5141dcd84a023f9e84a3568365b3128f5caf95d694840fadde1312243026015b7aef7e5576ff96d2922c84219458d1d29ff0d319bc62a5503a146bd7d23d186b80fd7b2f68faa1c29fc096d14156146b786e42a0651dea30805405d9c4c33f842e3ad8b19072719c5384fcc2758e9ae6c4025177d444985e43007668915452f7ffb3f434471ac036ffefd356e263dc1003857fac3f02a812f1bfdea44fc146429476de0164fe4b31b2b9f6fe363f0aa8b4257949f40570216642863103ffdd7edf000268a6043d169dea863a3c3459b81e3e84812b39da75792727828181d85f22d01b970336a31f1ce14a1b0c02fb636aefcdbaa5d18efd03362a666d4f3c79d069e235f5ceed15136bb30f5ab51418f9b662a37fda8df5ad2364047c70ee9702c4d79e63d5df39ced058286fdaf86933957d5d5a7db929245f581d4083ebc9f01c2b5a4b93689065a8ca3f7d5d5c0471e065bdedd70b17b63df60996d7e673734a2b8ed89f1137f6dd57f6cb62d4ce48c066668f3abc2d6a3e4e6805bfbfc4782dcf09c5b91d2835177518a6bbe8a8a7316aff09b48473f15bf4643814df2d54314a30779cceec4518eb30c74e371a58822c677f1e94f85de53520a1dfb5513776aa68d25f8a04eb0709ab3f2daf5c1d2a913611eb4922262f54838fde91df1d927a2f544911bfbf46c3726e7f907a0219db1236210d2687aafe8082d20e8eca159d832769018db7c18b76c6972b8e22e4347b9376b0b7cb06da6c9fcf1944095417d473c3d0e0e686676bc9659dc25aa4462fa81efc32e28c01c2bf9b779168336c8642fca30465bfa9a2f84239dc16728de818517ad6719d1aba19194d130ce506e65c1b4a7c3a0f8c179245a9e222c549596f9b9bdc3f6d7659e64bb7d3f50d0a257553af1af5ab5b5f78bd695315c04996791136e8c752a51aca4864e6cf087d9eaa296c55861bc1516fe0d093046d8543aa36188ae691e61077f671a869238317261a42944449a56719120d8dcf60273c5d9b3baa992fd1aa1120e73c3a00de5912ba36f5a54b425c9b9e29e39c4b14f3034a8d70220eb1d9fa8cd4eada247b147a93af4d3c62515c0a5f93b75f86b5b89b00101cc6ffd0dc0383cae348185e8358e7da54fa2a59fc95c595f140dcc68f9a6621a9817eb4f8a66dc2b6931998146126a0440d679ccbdc338593cbb1eaa12628cadd670107fda5037a567cb0151f8e865aae03c13c5d2d94885c16eaeb55fc0f0ff053d1710bb9f8460d458aab63525de3167284ef6ad476e1620be02a5145c3f748d3e3e2a1d448df6440534cba1823f6092b7579117405b4a69b468e81b4f6628e241aeb5226343c9fe1b623fdcd571baf2945f34ae8512dae1d0b4090f8ac5aa49e4a28a7ac74008f2f7da2d6a72fc4016ad0f7c48271e586cdc664acba90e06979424cb11b030590a5ef4b8a371cec26c831fd031a8ade054ceb39133e17177ed11deee1b8a820772133176717127f170f86a5e10818232175cc600450d8fb7da85dd94a40d56dc30ff4ebd3780381307d934424b866bd36ae6a24f5603c2edd78179b1c5a66d44ac9a1f5a686ec426cbccaadea617c464c9d2db0cb4f4fc0906e01c058b80e7453f5ccd52defc03ab5e1d4f072a023b5e6a0476ed64926b72b28b418e3011061f7f2c1ab1ab6bed407db66f80711613e9f6dabbdc59ac75773ca1cf6dd3dd4649c011f56312ac0272bd00ce8d6082b44866589f5e30f85a9dc0dd097252c0778cadeffefe78d876ae7043c2acf4cc5a2062e2b4a4a06adcf8d3c7a65b072f38c02604ca04418dcb86f597deb6927907e5df3647e6514c301c241e1dd04eaced5782df9596bcb91fdb1602a15b438eada7ac14433277bc38bb5f118298acb8db5add8143e7cfda837cf910c575ad55c0c53311dd98f6e295f367c1e9b170dbb48188974e230f8888260066ecddc58fba1f60821d502046eac60b82531b82e9755a507991c76db6d63cb114bde2a8a31dd0151de98dbd678c56fbeadec7ccf19c6f7f83a68da82df04d2eb07397e0a766fb32d512805609ec9cfefc22d32adfbe74e7fb2908fc95f35cbbc3e3f4ecf693f88fbbaac16c4f53733471222a8cb1c6d12a825ae898d46b5e1bef24a12e50e8f0de712da198a50bea31ddd2564e6b9647755a2277d87b951b1302f40a5702d29e5fb0f5ac5aee627a7d40f24c9d68f7e0423a6a119ef6ae3a9a743d55d22b9d91fa9afc63cfec9d9b11658a1bb49ebfe35e66d735838e90f9f68101fd62d2f483984d62ed84695df0a587406383feebf297afe6b8b8df3fb02c630b56f1b4e840114bf91f73b5d8cf70526d1e0e2c17f7f9cccc175060f521aa4e4b0b64cbb186f9eca1c01b9bf681de02dfa58895ebfdd980c3dc134119b74d33897dde533a5357e8a1a14f68a75be219c4b18639990d0108f86832e7356ff317684c975dcf566249adbd2a7ce752888ab49f83b1b1e8074077237e4eae4ac5ec0977d655c299403f4fc957b86a335f75cd60b66e013eacf9ea319d5c43ad121be4eaeb3f84a08433c2027eee9c0cc1361f6fd18127e887e4cb0f2baaae800316cf8b05828b6771b5821bb1ccd25e2fd9f875a7006bdf86f5a2bbdfc00f8f7ba457462c894f90995c5328a3abc19ce531dcad0c28d7caa3a291ac270025521a649594cb3a09a1cce11affba677af21d0a37ac07b3e0b0ad1a065b1e040a01f8dfa74f70f91967f5ebf26134343019108579ce709fb356d0ef7296a1d78b2097ac067d403589050dde42562a152afa78772afa69b92473496d7d56452ba47df73cbc24cbf006e96abc91697058fca9fc7122a2394c77bb38bd1b4d13379e65f6e9ea20cd74674a36158711421273bd8a6036e3d7129d01380016a8cb4a70a294e2e6077832e9555e21303e25154937f9df29759900bc57666cb7c7e8160a5bc6048cf6d5773867e078c1e1d10d58594610656dfbea6f32430fcae62c59e54cadf5ec0883d18d759f29391a0269b96ae238aac887034f3368958f368406a084734dc73463c40719adda3c1ee61bef55ceebc5f3d1da3302801d36327d3710f778f368b17f40ccbb3bba5dea5c16ece33929168b2992b9f6ad862e4548dd01396b4ab291d59e6048ab96206ca16216ea9fa90888c7b175c9858c8b9a54ac429693780026596749a80c2e2067e43603d324879069a0a47e6aa434f4bd94a2089352d9bba7ad322c8ac49d244699b753cc038ac5602c5d909b197289b401e9398c70b1d4443f304b7f3b543c0825f508df148734c810b21aa4161863293495c8438b48c13bfad53f6855ac57a380c4e5c4b87a85b90138ab2c6089c301cd73c6dd96eabe6147e211de6be9de99569c15426b4bc487626d488870f88fe80c84315cca74d7f555a2fce70efb75150505cd1ea7d7926af1e8f9a38414ab9b5a844e173223bb263e97debcdf5703d9c1e6f3d488f472fa357fa7e5602f4969544faece9f5bbd08d951dbf50028f96b388c877c0eba80e974b403630b4222f3c1106d539bcd891176873a1cc2255eda29da23af2dc9a7ee4d0bc674aa0451a8c00082e4a66eec7bc62039f2a2168440848dadab844752c99939959b9c12125903334213091da31a9d70db53b2fc27cfa329437a2ec55679835dbcee68324f8407d642431160cc489ce915c2ad0f8e8d9514f85552b28f4f67b0ae26373c021b48e0e2923f6333fb9197d68c57119703f550ac6c54e1b6e7b301f86580edbc9cb904a3c93b8a732a5217e4f3bed274aa7b19f1f7eb48a12046dd1bf6e86d58dae14041957c4e33e12af0942e33e06a9c37d549b2848d3839131d6bbb39bca9d28c064f20016c3fc8239b337fff99b4b997ef92d6be4a0b2cb7831d6723212bb618c679dcba25fb768a635b8a359f4af6cc56c4d72088178497800e3b1f598d4b8d0e09677e351127075a24bb68e219f16714c98c1c72f58b986edc3f0798215d5f5fa37dc718373385de595bfa1f95a571f47f33a94a072a89994154bc6eb92e0828886b827ac9675c2a34b82838eb61fa23586d1be9420c6c200aa96e04a3af41b664cce9c3bdf44124bd30608341e7c39dd1067da63b2167712cd6ef1ed6a6a2010414246ac1b28d34897f2bcab9af9898ed91fd3a72b54b8690465a25641a2b81f373ccb7b6aedbaf82e83c782293b767d4426e47f4f0bb90a55eccdb2a950b31b3aa96204d4bf1723a5f16037abf0976a5a3a5a052efe7df8a48b263aca889d700d62921eaaccb2408ee8318e9cce8e12a298107f52409de620ea8cb3fd58967b1653e01a01627e62a660d07182e6dc8fcddc8431be8c0a0a5c9a4333eb002186bc11475b2e208740cb26a900b289a46b8c8d89c55b7b15776d7f84c9cfbfab563f345ad54dc3aaad58298ecd3378835cc970c14b3e4ccc5500692c33f95b91210ab7883240fdcbf045fc28a43f16a6b1d4fb37a5ac10bab61a77bf8073e312da05c29dc6ae30072174ff65b6fd7037b8488eb03defc4a6b7e8048a2340a3563bdaf205574e9a2afb5c78e0b6cda32f84d915090df1fb561d3256fc1eae45e6aeaa15228165a90cb41f0bb3c637e857fed566e442c336977c62efd078691286433b01318d1272babb5b367c83f8c600bb099bb5a4e8d83b2367407695750ce835eb39b1e3b02ee885852c4c60cb092d7b95772e3d704ea98afb13c0715c29ce6b26f8e787d6f2c154b9470be96113e75d99bf3a426867347e3a87d5d768f6bd8c5b9c7c96b0ae6a132837c54f7ffd31109829026f7c0478bc0eb397c5edb763c8419ca75481d5285d602f4e160b2240c5780005fff538af3ad899cc107aefd9b03e19da6276e055b69b709c379ca5c3dea04ffe3ac0e1464bad282deb76ee4f26b33c02a93ec2d80204d19e766c44c4707191b1895013c4aaca098a6b95ebb506f5e9b71d1b6f3cb0bc39419d3295cf539efb71d596468d839ac27afb2827d370ce02b2859c2f9934e349acc81a9e7dc439fa371132da1e45134fc8e0a8a7c406edd6124ac540254369895981a50e1de0d7884f329972a957e16bd6a16a68fb1821072284af7e80878e3601533878ae32c13899b3d42020a37f102e38f08360dbde03be3a6a0144e10238a54586d6c0223fc611a593b4c548dabb3d05ae3ecc42e2ad7aa8d95fe3a33edccb625cdc8709fcbee2180cee927a55d76692b7c89c22a2f5e925c4fdbea6ed5bd40c6d255a72e49fd78324ca4f9f218ed789477e6e76ebd791b97967123acb0040c81acf7d8121011916a63c4fcee85447d977611ac35df32ab0d15d8e16b955e8607a4b3997655dc8295c37651c0c38185784556c7f0cf85e949ee617624f1ba5e8808863c5baef81a47113841a8ab672733e6ca306c70106c817d8ecd38846882d80c81c42c4ae62914ba4afa9fea535735b196fa188ab495bd36941406f298a1c91c7f8da89a8448723fe2f630dd0aa9251b7044bb293e0ef44e03ce6a233568142dc4fa645e615b1920cc99fb6f16e9a893c534838b457d2d387b74f38c68a85113dc2f0262fea0e2487dba05ac7a732b80bb8701490ebe3e819fe11a1281a4fd1bea54db87e6824315c9aa558f4290e3323c2b90fed0422c1a881e87d85120c1498acb4c4a8775f3df4ea4af005b5c788bf20a7ed11a22f0aa4a3bd45bbfda2978a24b705c243066cdfb2eafe221f6bd91c046b7a13d5a25dcac276bd4e37f61c537ee1fc1ce7cd33bd623f0e32eae51d4ef48a3d9c104c16394e951e1aa7451b06fe06a0b2cf306649204a5d07214869b37c19513a0dacf43a07c288283f29811e122f84b13a48b0d10439cc20616eaedd50f38680077789c2ce5dbd73847f46590e21d517d441648149143f5b08ce7e06d1ce5a99724d7db1ecca41ed958f05bf10f180f7fe881703431e620e4fac8391efdbe370836461175c2c5cc39d869585ea100f10886d87dd5721270a9b6fc025b489bda67122ddf35166227280a6a743c408706b735efe5347be3986aa03b348628382ab8d988d70c0898598dfe52460373da29fdc5cdf0206f20adfabeb4bb24f2bf9b9ba3adcc028b6badcaafff875a66f35491d3819befbe320534c8ce2ddfff4c1b4e01da7256683a1c7025fd7c1c78dda70eb25c9e7e940d2b3dac405c48b60e682881d3e1eaf23513888da2a77a05307642821a11367f361deac3f7065f0cf664da8b0707692048852c272c691776a3a257a4865ed8db1b0a01763e7ef46dabbc47d3975396143cb93d4161ed505f494d0478d1e4b225416bbe8e4802c6769c3ecfd17300b44b6ed9f6c1f3a41f8be5ae07fb598889795754aa72556d0aa2047e4f974efc43619209815ad2553bf34fcffdcad25e6a25c27addad0d1a84af5e3aa3f884e6c056c928e20c804764cf2cd69dab3bcaff60251682267c2ee907abf734d0418119f1c9d153dc886ce26bb901dc7410190ddfad9153161e96782f6569c009beaf9f4d58cbb071b68c2f9123c6dbc7213a4758aea373be1bc27948b8a96f0483466718543ecf7003e4e726202742218632fcb52cf26d023c1f00196fb062b84833e3505523533696acb5321745afecf0cab425c35b17f934a1b8150872a35f963d7b7c35fa651bf850e377991960e6bdf13ceb418d318d172a082d8dbc404200ec5578effa40047b41661fabc4a419a8af02e027d599bb06cafa827adebdd9b525af0085e3568727107d85b6b45bd3a4b742595ce236bc6898a47fe61c0efb4048fa2597ad4524bd71359a2d0ab5013177e78b1356211e4548b25b658458f37927d3ecaa3334ca60bc5dec8e4b441828c664d9176fae645e21e4bd38cfe31260902e950889d47e8d18d4f08912e5ba86299301cca9e6b971efe34106aa12175285220d81cb3f5e924acdcf443f457dbb99914f6366592a53fe2fbc1a9b86725f8aa2e6f2e7e9623f1f5ec87142c6d7ed8694db64258fc1a266989a093dfc7cb8057619c3a5a18dd2b146c879059a69849b24040474a27e6e392a50e51db32e6aafe616f408e4bb524b25b88bd6898fed45afed3d643a9381c7d3cdec6df132eb13d0395fa99845647c0d882123befeab47a6a6c411c9dd5f3b8341b68132e6ee63afa824341772977ce4564b4df8b4e2117c13c07433edda075df4ec4c9c73c7aa8107efbed32b11d661329cc5991a27c9dd612b81e8d49927e0983e4651fa8958816a4ec2145b8bde2ba3e3a4845cc4856080d0230f1e70f30eb13b240c095b12c04891c78d56b5bb39f1de56ceae9aeca8046691212fc7182063841e5dacdf154c8be995c27c69c621c09752ab4ca95f39b4f90a9bba79570beb26afe2253cf9cbd8ad02ad7f5bd8dbd0279f958385dcc930e683615741410780f0773a49017e990d5092ccabf86657e9a1d64816b3c1d828052d0a501ef002a34c55254cf1cc119478b611e4ccb31730a3d7e568a48a490209da2c0c43949142262f8a287e835713d39d63c3dce815ec41e653035277144444c25ccbd0c0ac8a8e3e3c9261c7889186e93518d28f13d3a142f4404e1be17d96340d4292b761c19c025be0d13f1162e5d467c6c065c1c1248f1346df231e95d2ac79465c38aba470264341b09f9a0f6088117da9ce38a8a004366dd1bf4fe18c09e5f912d969242668f70000218a70c0ac56fe96c63865197b86a31202a1c934f4da3a14ada297047175f4e4c8c1ab24a5e6e4d2b9b29f80e8b6d1dcf0ddaa8ff02e4d127cf55fd88b1f90828f0ae6d302928b4c0ef696250679c1388a19782a76861aa0057ce51ea861a1063080ef8b0f3ec5af132e1fe8109a1c7278562d7b75fee5ba70a514012542eeceeecd3b905cde0f6b7698acc78732cff07716f1ef9548ba009bc6932048784d41211b893d68b12c74e52dfa9b1136b2a0abd84ba3e12888655c54e4c4ccbb0d4975b4e4f02d134a5244459973d21cd898bac2491662f71762e869c812f04e53f2aaa8cd8d171847643996c34d1a3b80ffb96b534736f0f55b99173c688d6009b8cabbe82f58e1586461d4101ffae97f8a1fcc3d90262d9ecc155f48d502a9323079ef12cc350413f53733f357b92e5248050145db977de3143e0f3a018c7b0ec04ce1949c5114682ce76dfe171686a02311b21ceca45eb5460fb686d81b9d50dbbbba70f105b0bd7b23910c4754a7b5479510865074dd3a6ffcf6e5d65075f8e59a85756b4b299b918924387f271e5dca100215006618dd982f4e8e8502b2b9d81770db96ef0cdc891bceaba88858569bdf463a2cda409de52d18a45710c4344f385fe1b4626b84164884eb65b783679af43b6ca1bf9f02059fcbb7dbd91f265ac1c711aae96eefbf9b5e61beff938e70323956599dfa343871b92f42bf65c9132c1307259511dd2e122e68994290d0c4c6e830e4228ac6d770b2fa160ea226d8b9e50a84086637e2bb73ec808b7dadc74e0da20ffc3ab497c379cdbfe71b4dbdab26e86752c6d26e431628f063f22b41305523b47f02b4148f9e2769f6c6268929c7d36dda71adecf5a9c3fa9613de4e6594bc2b919dc4101a78eced07a69cf23851048b11b7ec2d0c69ca2f0f8c27749a0b33a647a23de95f46515d4d32c5a6858e6d007d4580abac3623d01147d16acb73b30101ba61c265571abd8cd8bbc7f92f50e8a60460612dc0dcbcd00f2df77938a1a3529c85f29c46d280210183fe909fff065c124ac32493e66d5cb18b3de8d38a3158e1200a36e715b8256a4089eb1148876349af21d9526682167c6862eb0eaadb8a1ebf5da15882d830cb98351a4a748013c134ebae7364dbfb867f5c21b3e2937f2a22e4b9447d1d75ada5d4b44275a7e0837ff6717bd10c0c594108e0f4c8d30099581d144b1715a3849a65b239465f9d44fc75889c3d3b702214706649c4925c276c6f96c91ef7ad1d0f7d6dab189e58d467cfbb2a6a3a6552cab53ad57a141f16c8e2f6f6f139bcff3282d7df1a668118628e45b3aa96fd178c0a19d4232ca49fd485886906e76c81b0c6456a3707c073ca47232c1b76320d95b9ac09c597077693e5bd74ccadc8217ae10f8bd9c4f215b9d215fc8caaf4fec739a30e43bfd186e3f585ac64563ed4d718f8346649f658f47cb96a445cba495e5680561883604c37469b9566aa94cd27ad90cd168468b47b3996023d1f2aeb31994d3ca0578c91ac52b6834ada1f1b47401babc305a5c042d2f463b6824dd43e368858da00d3482aea19168e346a6c5c568ed2e4a07c65147e6e4d03216b58073c922f978edb124fec8078340ea5960c27578aea6086517c9213302bb9085549b14e5d368e2c7fb5400629897a15dafbdc147c65a1930a769f9d0878e08ea5829160bcd0e5c3845c0f45750f04bb54d705d19e2650331f46a5c16bf680f8ee64c524ad5b87d5af47df46b039500970ce1f79a72c4022f4e668824d4d9723daeeab0d390d399b4ef69926b9449db0c8f1a6f810c486e342dd1aa056e04f4a695379b40c0d9f44ae71b6c2db1b6fb05ac4dd7a7954003a9ca78947a65c990198d902563b10b0ee45af64dc5403dab7129d988c287681289cdb91214fa99bcc7b6892fa0b51c41c66298a31c1e3d612ffc0916b875778d806de63b15ffab419fdfd2b2d29078637c7d3b3b153733f82258e28b60671620bf5b4b78be3cfcd97971f3802a79f06d16d85fcff907ec81428841ef7ac0f5d500140010efe3b0148de1cc69440e7e68763e4a96760017feda39ccb91dccbf12cae8a86d87ee93408ffb29d2c3fc1cd3e73eca580b3f884941008ffeba674896501429f93118de149c00fb1ae8524b93080befba0b2d88793291eeda60c176f78331861ee6449c0e904298c191eb70e96f1d8c6917b998dea9116244930471ac1bd78ad2bc68cbb1dfd06311cb6cd542190a21a8bdb902fbdd477704ad94b759ec29e3ac2dfbbcecb8b67fc2700f12a5b95a10aa652e430f3f179d79e79fe4914ca6869ea9cdf32f45956c48c51138c002d37f92046a004e3859c56833f03bf4402f8172273a1716913e745a5aa4203ff9dc6811a710d42002faa6a95f5a400a1d4f07151ca421b100858c459309bb1c34dad06042c1130a370a542d3c8484511310ae8d2a5fbb615de77da6907507b4f609ef18ef2e6c1f61a7ad427d14582993871e679dfb68e5e4146dbbfd6f46f6de5bee24f7de5b06ca05f005df05ab929944ae5e7f6e6d5993eaea0896115df1af96b0909274903f7fc52f426b69801d28ad317e982cf2e4a822afa3e3903ee4314c0dea05c92cca04d40719c4de6f2c0bd50ddafeff6ffff745aa447dc39372d050392f57fa9eb5fa61840f234bdf5c038f79077b77cc5fa812d9995d61b84437d88fab97842ca514ccd1ae6e4871cf7cfd50420c925211e4d95c91b7e24e190a3b3b0b85db2783dee102c465cb19ad0ab212317bb8840da0016305ccdb5c580cbfb48c670540073cf691c9f38cbd90466c074a4858ab1855d20c74072159aaae0378a75ea8be1663565600ae871becf6b077f60d01ba10a93b18406e3f0bab12f56dcc570d420a38723a1be59607e0d5a087bb1d9accb6831157cf67ce0e702f0c00d60c8e2f502d588b8144960b2054560db080242b2bc2a1baa2f245128cb5ba8105c20b2a7c825d50ae40451baa2b01e8914b28408342d993a592092adbc3d5040a1be6e0e00e90a4204c519f84261afe00672627f3509fe9a6dee220030e2aaf2c0f87f3bcb2c2c2020204db418e130932049dea8a0714120c31f45130191b5698600f80ad828e8514fa507728f9816221d6ea061686c3e17038bc80825c3fb02941273bdc43956e1cf6e170e84441f2a01305d9069d284814240a52c561e1024a93d560e6c20415d0a0d012bb1874ae440c4d136018ca3de84c319810842183046e6b6b6c074332a09070948350dd38ec714f9b75ecd287cda1063da75c5dd991a2d50d28b05c508087151b54264c9852294141cea81f9ceb0716650b650ac50905098508e50765e71d42dda1cce761bb1274069dc661d0395c892a3028d06850e8490f3a59f42a08aa2b264b16908050d11f867a2de193d3d9385c898517543864c0c1d0edc3ae271335889bdd384441069dc8a0b388acc1052b165440013103110371022291788148b44044a9303491e08428243e91c20422b1440e921081314c7c5797b7c4cd12896aaa1e4986ba833a1381ba6be070a84368952b55e5a0091bd3fec284b24081eea0e794aeb3d854b32445190f396423f7c0058572a5eb141027e634e8f0fbaafa7d9d5c8bf513bda4ab2788d8ceba73d0344545e3fdd9d32df40003c761355153bdb750016ad7b3059df2bd82be636e41260ebb05108c165c0b1764b0f5966676188ee358d5a04187814020b0fd4dc212bb070fafeea0e7b56f38d33a65987618e6aa7740ed6c4f535834bbaa4fb284795157827478a825d04396ed1a48ff34d0d5141f5d28a05435b5a03709abb73a4b231bd9ce35705d68ba0074805a0c81088a7c2566d0e17403121ea8ebef0bea8a565712cdb2eccab26abaae5a26e129067a48370aa07780d5a0590d6af2880f1c8fc7960dec7e81951eab2b4656d8754ab0a71d4e63b5824e414f37f494434a57993bcceaab0e7fbbd2593afcbaba839e3d74fdec301cab1a543aac63388ef766e3554df50412ac0e078da9f63211ed1d50bb0505a49d82be7be7938dac31edc2bc2009302606ab60e10d999db7aa41d61df4dcc6b22ccbce2bbbae02505555554f90ba66d3c2bed496d219fd01eb8735856525aaf3caee876e1628cb025d5958bee47436b21c535545538f3a5d1bf5daf7f4c7044c4e67a35e3ba62f383d65655923881e72aaa64060ad52d359966559569dd7599d3fb07e58533c5889eabccec60cd8d9c8c1a8f2b3f14237b29d8dbb91e59cb7b2fcc3e19e6776652545e7750c4b79b99ac13a85531d82c44f1676ed75dcfacd29743daf7dcff8bd8e3a709cea1013ba9ef7a73a84dcf55c62a3a7b30e763daf5e47a50eec7ae640126ee438d521e2ae671748c28d9cbe7a7d3d9d4b521da2ed7a7ee09bce6e3a07531dc2ed7a8e812468bd2820251a322adcf08a1a5842df3141e980c82c65b115610a71aa43f0ae672050afa7f30b4c000937723ac3249a848425d92424246daaaefc8324c610747566dd82c846b6cf4d36b2376fb2710dba938d6c9e9d6c64e788c846764d4e366a383a21b271bdaa93d921b29165c2c946762a4e36aeca1fb29ef164237b24808b6c64975d7f4f16b29125eafa0f6ced6195ea0a99dd441f6c4cf3e60a6a89a6b58291f9ec4d20fb992161c3a8a22b517356edd96f1b6beaf8af1cb3f8ff7feae3ff30372d1bea3121c9bbca636e0e530736d54776d4a3c6037c8664a476c83555ad5f773b8fc3f0ffff3f0e7f330f535a5d4bb028938e8980212142d0780415e96817a896abae0b820a27e77bc348f5a664d5604790c8d5cbccad41ebfbeb4f552ad3d909d21214febf50feaf62a55e965a5a3c2d778acfa716a706c37724d9c523c67a1df9fba413fc3ab108562e6ff7c6869448c04cb0b571ad1896dd5f5160ae261cc2de5e5ab0987d3d3a30c6fea4eea886f8e06a32a9e0afdaf74d5b5a31c766c6138212d48daab9662245f1b794b04f52d6eaa9697b54b8313f3cb4be5c8aa24016c05b6bea7359e1039603ffefdf1b4526fb83ab3b411725a7f5003d9ae8519c89a78ce267e5dcb02cb250def79d925b27566b1b5cf7e6c4b5d0eb91d4052624aab675630d868977b7f3bfdb776e6359d8eecde34a256aa613ba06f7227844ffddf7f97e5dce631b21e1bb38398091a7d58a250f2134572ed18c68132a8f080ea096fab6864df5c16b6a75b4d3f6bde2e4e23823e99e8189c48e27f67e9ce15059ad803341a9996b01d6f2c4496a0b5c17c886c544e36caa4707abb8c16e9672c0f88c1c8bbbaa278fb3005231378b19ef16148f1d938ed151a6b85dc89239740029a9c03971f382c1d7cc2da8be775ef74005ceccaa3cb78d07d8be950cebb5a29dbbbb6ed3a91235740d8e976846571480a4d4228a2c8711bc75ea4c7e42dd4c0ae0f2fc915aaac540fe71edba20348f2b5173d5eaafc9327f685aad34ddef3b05e7ba9c2b850e229c1dc929191da4ea4d8e4514d5118e8d2042d46655d0de1bc3d6d2265234da671193f6a39e5fecb3e9e48682b9a75f515daaf798712ed21e4895a86f7e448fe4ff1bf3bdf7bf7bcda121dc335f63cd962ba95d59918c0d7b63d0b7ebca3c034c38407b7f38e48014b793092d311aa7df12d80ac553f45724b75fe329167b3d75c0252d986c4e6c3ec2a68adb485bdb1fdb12a80c461572ae363f73dde615e3f361356f364279a864aaf2fa41af334741b250de5b7e3e0df6ca5c780cb952539429ef54f8deba6fd715ba51893ac9450805f1318df4fe45ebe31fee0f234f8d790943353e6480c980ea3b3b3663d07119a9b5f1147fa5d17ca92a5a43ca24943c42364f5eff59e5670e2c248aa07b0b2fec28be99cdb7b3b7faaabf9f5c4edde7cd4ad4bc19dd6bb7d6fe77dcdf397edd5c7296b4df94515522bc69d5f5c905dbac3184a182ba14375679332fbc8a7f0354036a2bc513daf6aa204133e78ee9e5c9088793d52a05759313c2c474e2ad36ae8a5c8eb060d2695a318401670d1e3ef6a89a70fc52d2b627df97a633a100d1ce8daea7b1a63ba61e1d2e04b062dccc58fae134a96045a8fa6eb971d598bdf786723e145404943c9411c09cc1e18cd16763c888144433512e64d1aae25e7a09a6d091d7658aa109ca107be6692a3b7debbbac8745067fa99b5cf20595d38f52c63a63043c6a38a540e3724b7230c0138d2da0e55b5eddaac46c417235a948072eb9576763efbdf7ab74d0ff806eed5f76db96efbd5bdeae2e5e66347cafe409eb0fb2867b8140fde56309d73d50f9cf5f3a33d62f9c32defe067311ea7bc79be592ffd5ff7fdfa92d026e4b4ec0899c27347aa62286dd9189c2ee0852548ea4203c84316424132ee8af85151b50f1ddfadcf4dc86ccd48a8a8fc4b4b261b62d6317226b4c15a48c65aa38c6694316d7c5e30c78e9e30c807919ee3d0fa3fa9e2f3c9bbbf70ef6edba23702539cf69ea4c29162559b3cba6b1baf784be5d3785f398938863dab32b62ba4a16f79bd80fd30e3d3d29b6e296d1f7337d68e0f6d7a398be795694407d445b6e6008111906b930ca635aa58862599b548ee13a265519e1bc18b1e8814b50ced873f183c347a434fcdf6bbbee2995a8b7da0fe69a6d3bfc7da4f06e8a70ffcc31f893037a9d053dccab3e4b536ca3ea217e3cdccbef45fb336fe9f87f9ab2258eca95a8f9ca1239abb0c230f772e2f599f45fe1b99de1640bf755aca8b139aa97c12ad8b3bccb60d45120b75a0b09c6284618945d53092dbe70f86a1431b1dc02c892b0a63477cd5152c7e424906e3068c9aaaac79223c6825ee62e6fc1c6a03ce66d3cbbe9150b1318d2b6a825bb116423001ad01329153acc279b914d8fd5ad6ca767028d5723eb47db57d00b903cc28749610652cf6c86d65c8eb6174c2cd88bf6832c1b9f3d98b73a13ae08534c97c7bfb798d657ccfae4ad44cde31b49cb17265cf8b05bd98296ef0ca211ec800cb5b9241a432f7929d29c10076a4b19904d860bcda0f557f57df3a654a2de7a10f29affdc15b6cd968630ec2f4db8593695c31f23a38ac1edaf3e92f8530986bbb4a81eced5530539364e545ed0b319190c98d1364dc1dad49412108eada93517234c40f86e5ea2c07a2471d74d72be95519ef5beae53085edffbdf7dacdf5f7ba7f4edba4ec895a8f9baf2d475db962b51732d93bde2883ce3787dfd9d299f4249c5add6378f0f121272e438a2222d2a44cb4fde6468d0ff64090c2791edf56d32be16a04d0be17f71d7dd3aaa448dbc01612b399cc3ba9c766be71e8f5ce6aeabc3e0d08e3b2c6ee865ce57ac1ae3a612f51c1e1711d3c7398f2a371f312263594c3d74bc9ad004d2928fb526a4b723591db237e7ef2bf7a312351192d3d4567304b9b375095c799bc6f30e0123d064b6765584a7e358dc4e1c355ede987418891da5dcfd6310db7ec906b177dbba784c95a89dd035b8e80778791b44bbf7debbe52ddf3d6e7b967759d00915795687586b7c042c38795d53b8ac3e5dd7e55ce6a81235f22619a45c822003e5c233d4bea90ffab6e456ecf5cbd1c270d71ff3e1f5c8c2025c8f5d7b3d1de1ffff87ff9f6e75134a7ee62b9a990a12b321132db7c0d08822f5ecc14839e0eecaeeae8e46d9100fb32fa1595a8930eac48d56edaa1d12cccd20722c7389f2296e9a1926950e98a01aafbbbe6f08544ad785c5aaaee00def2ad50809ac2d55376c78df0dee6ab6de4e94396f141f6b851ccf912da068f1571d4d97b30dbad9a2f6cfbea9a47031743258a3544c2625166e0d0eee8287f1733f23e6883ec453d409c7294705df0538407680d11dedac8abf4273261421fa17be51e39f8977fc97f4dfbb7da6f67dffabd81cf2009c656f662e2f585b20d0236a2ac2c3e5f84c9fca562831b0c0bdf7de402317998ee0e2e43c9622ee15db755dce8354a2562ea1ae980b58726e13517defb5853b227af5beab06c18692ffbf3be5e46c719ccb75b53977e3f6ffff63187e32a6bcff357e2f15c7888649dbb67bb72155a2be4906299725daa05e963f7f9cc52ccc01c0632dc8c692cf10d2057876a0928ab8b9c081c47b153684379ccabca7174e704746085a9b530e1f1dc557f618293235e4c2478bbdf77e5f374ad9f76ef9b77fc6b421d6b667aeba7e51b928ade572060b32ada79b0c299e2346c537d371df5703c91661445432353dc5d7cb5251e4c942268eabf865cdb91afeecdf2c72a4d06564bd88d6f4d1c02102236d2796c44eecd1cda95dbfd688a87133b47be6dbd9379bb39381b7c22dc4ddef2b6209e9ba6dfbe9f2e4e47ddd65d76251737def65f740450ac2edaf62367e64787755b881866166f7deef4b06a512f515f3432073f278ef1df3bdc784ac784b27414a56968c31bbdb756178253bc2c7fa2037144dc60cb2cc47a7c9013f288a235d3e6a8e57e991a7354a95a89750574c2794440d88a0520646ca5ae4a25cbb6e09a228e73b8c855bc9d6406011f0fdf9bd60bceb8ab88417405e76284e28a592eb58494a0a20394472b0e2cad2118a9c2e6f79fc3b8e7796660032880ca98cc96092b2579ade4c98a0bd82d0faffcd2ad3ff65b418237035f69c5f68c5273266d72263085d5247f1c5fa0b0995f0c9ff9ffcb3dd814a9526dd3561dfd755760da6a55cbf645630a65470dd6d955dd29c66ba6eaa996341dc6d79db828188b6263f2a51137124d96938356fad8400a4c90262ef07729d9c755d0e16632eea9545c4192487b26a6d3acdf40de68493e148e6d7032f480f1b56606cea8f0b2c00b070d75d93bfbbaeeb724e0267b304d71a0d0622f5eb9180a5eeca8889a117407d611d2c118da5a911cdc8826e0baf85bd5f68d76435d1fe0ffdf9c97af260f86bc85fd88b14775969019a463902cd72cbb153e62c8661270d541cff8d9475467015be3d6cf0da4304b76f1adbae2d8c54c50f8acc474f8eb019f6e5ae08c68b221767475dbae9071f91d65c5b8c176b428c4607db1914911a49785c4a7f6c2a54e347f4e8ca440feba2bb7470d05c38315ba81d5ba8182a4eee905feff695edfbfeffc33fdc7bfd756a4725ea1fce80292279782224c4d642462ec7dd0f104f2ecb68f3b967c4b6b8645c4427ecb1effd6936f26ecc66f048b12581a0961e3773347e3e6a2a6990e711e5dfccb26918924ad44e7c4a2611b6359cddb68b450c5890a7181bc55d27840be6844f8ca1a0bfb0261be67479bbf72ed94f8323c68c1b1dd211bf3e7397f3f5b607f7f7b7e3baf1c7ed6b785f78d686afacc5ccec290584e7c8892511ae1b7626f8e4fe3f6db947a441edfdee97153e8e95bd75de8d4ad4c920a50879cb5fb179fa7157c4a8484daf0234707a664e9e1a4a7d7b7eed181f4c50f5a38a92a0cae36d59920205adc57af0fa7f92bb6dfbff6d347e199e5996cbf5a944fdc2676411e6768673bbcbb438fbcef76d35338cc84943b8bd600b009969c115bd2d8df10d516a31d158ca09abfa9dbe2f0e9a4ad46e7c4ec61b8ac0e99b573e83dec90ce78ed5dc17df91d59e6be12923450d0c3e9e1ebf7ff67dc18e2a51236f92411f80295fa8d6ccea5df5fae647e08e4941984a6ace6198c7ff06e3d65c703553bf88ea08e509c01dd5a545cdd0d24a98c1316b9bc9ebcb32caabe33d44748e929876d307696314dd735d3ed672ec7b3f738b8801e596264577d3b663059191231c9679a4823787c0e072b28bc2f1336bc1c91c765d2807e16e8df3f7f96184ab20bdc587b3c5f64c51d4632db23ac790528cd87851f7a464168356a149b9a6215441c1310cc3cfba2ee75dbfff9c72b8f0f5f0e9a146a449c407d0034b3b967694cdc580e3246c2465b97d0cf3ffbfef8a1d95a87f88909ca648acd8da208242393c626ae4e8847640a0fc8a0c71e162c5eb417b9b3d4082c1b4440bd4e52dff6fe17efbbfb7522867897639b25736c211c91bd78de3e7bfefce964ad4cd33341176dce6950c06d02122aa41c311e6d5f6c008a9802ebb8cd6bb2512b1abab0c7befdf7b1c9e9a4f672bcb3237fcd0f458459938ce18e2d4c090901f23402f8270f971b53d9dbc6a9a3eb8563bb11a1b6e38c8babcc65e7af89c7c655df7c48e4ad43f254e10bde9b2ecc55a865773ce54a22e9183c6e509ed9eb9dad524d3e1368dc44ce0adca9523c73e7384ec993fd307b884f130a15383485f54026b3e654364725c6701e047949cdadf7b976cae12b6002f4a1be439c396938fb005e5bc2ddb705432fc22a5a7017e0fec4441d1613dd09c155ef9625590e1207818fe3f4928a449f5c6e594242da1013915d13dbd7cf8e1f4b62384a30754dbe5c5c7b80d72f88d8afa86db8fd1b7bc57a13395a8d1b89b3c37c49b4708f5adb0b819da0cbcad5bba51267be6343a4a42b26a302e380e4239c8f934a6f5875547a4f8695466386c725498159f2e0767aa718061a10dd349f8cd15a01068bcb33688ba52c35627929f7065efbd45808bb62260e58990755489ba5d7963fe25c71fffffb76cf7e5edde715771cc38673b5439cc6ba3f2f6d756f957283cf97dbfaf88594d128a33be23c5ffd30a3361f7236846a8f873fdb91f17fffff67f6fb80b66df23a79f1f3525af19331e385333933a7144a4881c3446bac92f8eb3250c1593991014c557dab1033a53a3592b7e1c0a3c0a282ad0947cb286528aab6ee845d957900deca4e580238251f586f249190aefd4eed7effbd45489fa0ced453cb9fd73b7e56d9d7cd5beef3f7f93b4993c31b7a9416547567dff5de0ba9c6f1a0b4e6b20d2bfb297aab82307aacb52061df6f2d3fe5cc384dbf6835def5b820b6eef5819ff3fbb98e2ff671a69b834a976a6f51253e66c7b6361f8f46d75d5b5d06998e57f37a1a944ed3687f7239afa9c5e56587e6fb0cf809c006de7c2915449ad215c99842b539ed7fa7bafeefabebf7ac545316050a35d8719cd45ff6cc5fb7c2a2847a7ef2f49a759ac12e371637231f1141fc851b0294a0536808d132dcc94faa28a7fa4c737e624da11f4238c09af04ac2596aea814ed1a78954360d4100009008318000006801005a2344ff396520314000c29ce78c08844301c10c8e29030181ac2401044310c05201403400c46313853430a3be8936b5a1d8e4a4efa2baf5ee27807034c7df5cbd46cab7edc3410bb7efc23fd93d219e03190be6ebcec2dbfc6a1ce339098f450b8c80a0a7a75f381e00f2cc33fd3a258b19cca52d28c883ab8b533a0ae50708cf762d579e40f452ed9a42285826f33a3794ea2ebd8132a8925630cad331494d01cd05d5f4bcc27951012070c3958618d7f67a987866260b9be826792586f20285f2411d1601cb482deb7876f5083416441546d1b499762c3ded23f02137974db88cc0ffdd5e77b051d9073693c3b8ad5949658115c17b6e52c5cd2b3c17e099b883bc8c4383433457e16237d87fe06708daaf06d1540195140e3234d7ee31737c231bee5eb20db7bfd449b46208d06111d8500065e0121222932531a0cbcdfa0fdbff66ac7f9cc1d616689879334aebbc05462cbdc720468394d9b2a4a28067def2fa42e1aed3d544d5590cd087273d50b8258112b97571167fdd9b18d16df6a363315f9987f5a5aa7a67a7a85e49371ad5c1548f30ff667eaa639c82c01eff62d019341be092c8f08af3a89fd52458d9f1244152fe1a2e2e764d601a460626499e42942cb4a80b272609b0ad3e04cee30689293633079177fb2af0a1669f30f083bac391a58b1d9b65099e85bf191a98b2af2872e02f8a7586b3317365a2ec3d16c4540d1e2c672c0b3e494f016620add7523b94ed9696da74344c82d5eff9a607476c3371bceece99fafe186c2ac74f1f386ac1e1a75687cdd6661898193fd99ba6b56fa1e390a78243f6880fa0a8d322e9f81f81008a86cf7e2f0d8dc6c186818b5cfcd9cf7473dab4637236d79c17c9612067555fb8faf16992e5a412d2b3697438faf02be8280156223caf7bb2b1ec1f0097327538616557947491f7a6074a235b283f903ca8a5e266b87d93425cd1006acf54d1ee1778360ca932c7e00f984418b7fe875317e18bdd8d6dbd08aa36314475ae7a331b20553544275825514baebdff676650ca7455d0145a4533969e0bb09b2e46df5207bb213d533add2844c8d331872770a3aa45e68f1ee0b6c2b36b61aea731e2197a44d100b90a00e464f7357075364ef878f27057cd323872d3ac1c744b88cda67ccebdff002e247dfd84b2a7c7e89bc36cf92a97b3bcf4fbf40e79f8c4478c5efbace0a3c5ffd528a8f770f90f8297fd7782fad3875e0a9959ebad43f98af3b6fd885e26d24b9e016badd0f09cd36b44a4fd780fe867baee3263eb98a2b0d2d3d38090b09f1438e12cdbc9136a638541e166d58dd677cc9380ba4d6ac22cd6a04d7295bb9ecc732a2debf4bae3fba5dfd946464326a09e4d50761a53d6658cf281b13ab79efc91f7069af6271375c0f24461beb2f880eac169b3c26898cb4c0cd13400374f9113fbce5b622be5ec935f5f302b8f7d04d1c979baa4b583f238d2967d2177552e1fa97e54f388c9e627841ff0d3434bf7053a98df236fa84b62a708507e0ead702a61f7898ec92bba9546ca18946555dd991bec41bd1c8d479be4bc7c31df574c377d612ae4f279c30d075def0969a6e223952e09d400a084776dacbb5b88c728a3bbc2817a0d3663d43acb5e8c1ca7e779a2c23e19a04791c722c8d5e759601e6ce9bc3992997c064f1d96b13f474b297b1c37de3abdeab1b2e6fe63b7748058664fd5641a9aba94dcf31f3dcf97224b2b475a05ca2f65ce069528a7754f08331ddd3ec39072cbb7f98b0209d51e04f2c566038ecbf4ba29a7a68a509a3378dfa48ced85f2c3eb18eacb795afa2918ea209c43993391646801426f6883f65656c7c9ccb17354d7f98272c6ec6cb5511b9b1eafcf20d05b339dff31e7a076bc97cf785df64a65add4d5dd38d188bf30cd3189a1c8f9baa79135b184b0a4fc6625178960fa98461074363c7ca23d34e3e5371b195d6cb187c13bebf231019397bfbb4e32f9983c16cce85b4ea410c8d7cf98617de54b7c5e8658ff48be7b58655a994e4d3a1f912088204bfd3333848763f675dc6e938481470891216361d93970608b1c694ff5dcf3e7d422e6a3073ecfc4dc64ad6b35a389babe0cdf44bf9a26200dcb83ab0930f0c715f48910dbb3064ce5513c37e049e80d5a3f65eb62156c86b8382754c91aec23329de60813fdb328387a0d97d63cd131540b657db8a3bd727bfdcb05bb11b2678abb6aaceb2a5921346aaf53e91ac60dca3f20b4307634776664bdb67f4656bc3299609105d2d8598676d64c9e772d6495615b929b35afebf31a16368c733384c9c2a040849ac00b993f6601a63426c22b6b256f420e07ecc5a3d3c81a785988aab4cf34c9060b265960d542397a19205f132b7d25084e642c6c41d994b876801df896cfa976f591117e8537ab153ea33e658980598d221ccadca272aba62caa0efad70aae0af5b53ccdacfdc5fd56f64cb7de8b97374d0c28e8e44d62d4b3c8bcf864a63fd354b67a07ef98b126461ebee73bcae3bda4a2b76de96b02e09ac8a8670a780445c90eb4a4c1a331d09519e77f81182a6292748626a38f8e591aaa9444ad3a3ce807a306c164d67a51aa1bc0797694d9b28b5a7fb3784dd246c0e435b76d21af994b235df9b81ff0a25f49d5abf398d4a746793ff8d656286c17f66a993d975a704cf61a118d2dc329e2424b6982f21e5d54680cac9711ebb488b82008d54390aebbd8ab654b8410d2abfa80ddf788197eef55b3d55c4e981d046b25c1dd9f8ee70c871127c3737293a538a7562f1b471f92735858b4333d10bd025e90f6124ed046f80e26dcaa410ff3d58d1ec0da78d645995c5e800d2a9c84c447d2c9e081b9436e607d97922c3edd43e30c9b60cd29c48b9b267a220bf2a0af55dfc73e016e1a2b9f37287a91ecf292744121c96d5c70ae05bdc2befe415118c6e67c4be0da60c2223247920d67ec4d1588300d8a4cb565cc0c83cc7485c45d94d9bc8855d236d538a691289107d738cffcccc4e96ea8db88bf28db3bd7b9da8c0f63b0db20dd4631bc7f04c0f063998779333c1f6bffd5d7e79de786526d6daab9cd13b78cbfbd3d9c12708648f0f669fb7d94869df42f9125c2b35df2b67a706b14fc60481a93f2464398a921b8218b937364690224a1691c6c714c89df39db310dbb3a2892d63b0e058a4509e77f9c0fa0834560db3cf48611b28b0e67d2ff2c2fea132993ee64638bdc603ee975bf6548f6009dbdc8a7a6f92780db556751308864dd1a858572d4c76b4c9378ed1c87deac5833f35295d30ab6073652cd5e03cfd8aab53224e4ad9920e2db572eb856c9add040135c8a75730f564c77474c149dbcd8c18b14b34c068e13e76a15c5f9a5409a98517955752183b941f27ee504eaebde826756152136f09a04ee2966fa568652c8946ae5d17dd2f071b557071a88a33cf55b56f3d14cbdab7f8026a4815353f59407e69b17684ec13abb68126edc2b8acaa905a4a4790a7691a1c47eac0b50490f9e0799c65a3f33100a940c9ce74971ca665e462f3448252517b1a1d01eb415d7453d7837ab79a246296b9c59a1f1c296707c6b7858eed5c6da47f6a964d684395983e61e0caa57dfe6e5227618493f8c7481c72fcbda233bd528a6609bfe62eeefae6631ca451fe66091be594846f1ea72a56dfc8987c24f455b0a7a979c5ea19ab7820fe6c0c84578c55da6373d968a8c7eab62a4f36003fcf5bd940675a0a3457556b3409b954c4e775364eb48814364a32af3d7ab2bd735a51307d2aa66ad424b785536c1f78c7cdfc2c405c4eee450c2de1011318e9d14f83438475056c73ce8fe38c75f4d7bd30fc0d0e5b625667b6d4f44cd58c637f87fdd238dd6b5390b43294808e79ced77a05a0b7a8b7bd6091b919d852236a1e55aac549748865a41082939bccf2cbcbfeb06a3a5701c25d9bc8e85a710f70ef29f8af18494b9b63ce18e2f04a235573ea03f0c74c64e8e079907d2a3073d9d73cc529c61003503bdc5572332416a9e624b7a7a5d627389329af73715b3f9182b5e5eea1b3433000c1380be4928155c5edc1075dda0124d91d18f6f6906d80171a770adc0aad406e798a9212331ad1bd7e8b00d3d1d950577ce2c277db52dc7b4fb61466752b3513ec6c0c9aca425af3075276fea892173ec85f3af46325b53643a32ab0366cb61110c780e2c6901e2099d8057283e199a17558c00882591d11892a7e9abd7af20c7f84676af2d852e2a178903b07c134f7696f7211ded7f224b51f885a216cb0b4384128ae7e6d7134ede2a8419d1228a7e5591fee6bac98d788aad67c9141cd36a6aa661ceaafe6fd44726ba82fe331c0b1b27418418e6889005884e7b2ce90fe845b96cd3e13630051a73f866364ffb4036ce832b0dca061f178d341d24d6e7b7f5079d6ed1b0d0e23d723e47c19c86604d711c1f58f95d82910b63765c80bf415a1020eeaebf9c29453012a41c67a96f859e37427cfa7ab76028ecfed56e69a7e063f283ff82ed4529b91e0d443d9f443f2c870a4c86350142267b92bd0005fe0c2752ca9228da39a7ace9f5180a9bffe66ccdeee3c4c366960115474868b3077790128c1215e0a06d4e1f1c6d6f64437a6cddd233905380d40270ede1853bbf8dbb719445dac7bc1629df6181e1cbb33b1c713182703086f3269c6e1063238b0ad792c57e597c54c3f45cfe8a271a96593b442784c4a61482c3a9928238e5e7819a30c55145b2fa96c0f4ab13b634cc33421ef7ab600c9577c38db2819a79fac7256c43d204dec7c9f440106394c451ffb5700f8b1de12db914a923d1da71ba689f716ffab457b73fa6ee881c5c1f7f09ef2010ed5b8918bd02ac64a66a1fc42bc2e2aec18aea8f05ee13636a180f9da0eaf64dc5ee4a7fbecb8cf7ebf0fdf5b326bb2b86bf620bb33b5c5045db6b2409b7e0482232d7b63f0920183351bda7914754638cd901630bdd76a28cd276fa4c46c93ed5647308edb8d58229a3b35d233d96212f1a58847d27521f6073cd901e6be26367cab9a6b685959d98a5d9c06c877339d2e706a77e8f0410b7577a02425ed4a912dd49d80eb303413176f2794adb83f8c8e0f3bba9548a36a6a864010518222594b5ad93b858a8b20a806d14c8c9113822e7b3e277f9302f602ae522ee8e936ee2871ae12befe4b23afc4ee07b5e839f064061252fb64123693105974f420abd22c0bca97f90ae420f0f09a98b4b5ec812504e67b39df80c8b8d228da9c1a0993c88071910773680181728efe9882c6d57ca9952d69d26b79e09c09d59eb2c7a3eb38bfe987e541c67245e62076782676fc996d5b91a01c4b146dc93a8044f18091168d1107a1ff330304418ea50b5ab3acdb17397092a2a4ec5395433f21b4135514033efbbcc41f19572cb4c1bff3637167bb2c8158db25c161d2e3384473c648132bfb412992b3ea70c379ce09010281284e746c090892f38fa77a879532b2c091e3ed30e48b20ef7fecf33b2271a22fd33b8fe46cfa394f48040b95b9215b306b50eebb04e1185d4853f44e0134147779ae0322225b046662c5baf86ff38ca5cb103ad5990d0ad9b84069881096ceb0d369d7c8ff5f928250074f6a231889be3d8d94d35366f30d85d7c507430189c83caf8642aabe1c3ec70c1a4d79a2448dfbdd65994882099600d24561252c3ca8f874b97fb3d1ede0de1d090118db0a522d4df427e6453e9aaa62dcdf245b473083636ecc5d265cd968f6ae288ac51bec2cb7a26cca898e0b4293749f3845c7be02b0582343e29dca32816d66ff135abf06a0af5bf68781b6068ddae5c3570f6f81024dc868d79f2f49b2d6db5df3f9ceee8c12a8242fd411c9b79cc0bc176262ec1a45392a6c1a0e208286d59750619d40d860518dbe28451346be049635e6d3bdb115da4c26a81c6b0be74d22e052d68ad170d36ab2302c523cd42f662ccbc2c7a45809469a1afe4625cb1614d730274c1be07e25cd4fa1dfae39e77ee68bb158cc085e0d9869a5f54fbf0d2db88f5d09d60893f5f1d771c91f487109faf40e5c38f3a0f812593d865a2d2832534b3dc8ce91987b6048250da33e16073c011e488522c932711dc75d663c84807d4c5d73c6dfebfcff285a1b73c577ab3279400a91875c89b405ae28da33eddd00436e6d239d0f74b18109143f490bf154ae0ece8375e07c199f397b2ba498e8e0f7aac56dd3a6107c2a8662182e2f56f14c69a3d4979b1442d253745f03ce7d6d5be54802b9aa89a51f05a6927a66d58a88097dd0884507695d4c5bf0ea3012e5910890945582f22e1fbcc4c14e431ff3a137ede0d50c3a15dd9bcdae3e55cbc5a6edcccd9b688096779ad4489512628e3f543c065812338f39173c40afd3a2f5ad791e5443a0acba235170bd1fd5f7da75613109a8dc4a0de9be8c23a549cc272098ce5181879c6bf0ced416336a581e67e054780225eec99ec01d54f8a3f6102f4c64ce90f4448af32a76134b29611f90b99ed4a9f25ba2a7ed253a79fb9c83e060a6e69bf070902388c6c862c348e89acd57280c75f54e135e54acb55c100a658d871e4c8e6382d0a0ef26b1874c88a1a2915b2a6f824e65f6a9c9452bf987f30fb9a34224fc7a09689db0c9f1bca81de77c872e3a00ba84e692410d635b0edd0f0031031f7487cabd243e6bd457609b4e079fec32a761077afa2c88e5c65ddf0560595ac61c49afae6501009c3645650db1d7d573ca253dbc6323114fba88a08ce43ff5f45fbc889bffe453f656ad763cf3f3a677b35f216566519f7213a0f6c3f0b6dc07cba77246b279af4a837c34cf56a970a8281369aaa0c25bff3b20410b4aa6e4e18fc227e9db19640c24e4aea2d1fb6979e0029850bbe8235ecc0f150a4a57dff3cd0650719d9705612fd7e7fcfd3edf249480fc18ad842b0f31b5a18cda7a4697ba9814b0db7a494a3ccdb854440876fea649d4ff634cb1583d2351248863d9b5dad9580e2b206b15325a319d3ffdbfbcf51060777a0b2b2a9966b13d3a54e71c8621c18cc1cc21e6bcb5a844d4a7839f7098aa65fd4a67d3bfea06639d33dbc350785f3761f762c7b4c6a2c34a142be470f39f39e297de897261d8aa1c7c781bea12b6848ba154fd9339100e7f35ce438d959a4da4eebca9e4f4fc4c51728043b4ed12b5f151a8f2c905ae08749f15f5533dc431deea7000d21eb00f35dd16198c7bcf28fdcc7298cd5b6defb6eef93f26060f2b141fe0f36c4722dcee8bdad0936b881295754e9e997b3ffd550dfd17366258a950abf294a6f5943bdd17e17c9109a88cc5a27826df0484c0ebf15287bf251739774a7e9cf73645bdc2468e2d11c96d032eef271dc428a6bedf4ca92e534912912c01b63fa8e841f3054e593718ba786e194d472259c3bd21301a4b6d45d66db631cc6e0dc3ce1c241b45644091cdc258d55c59e566467c23d04b0159f8f47816c99f6f993248229c207478bca78f14362397e463de1db35c1c68430c296f07c72daacbcc1108ae12123bc8bb1be40665e3b6043fc7a5609c626100a343299b6c9c7c8f3c66f96ae235043c1f7fd45a5aa4b4db1449281ed43b814445c66a627c2413464e8b850b46bddbd4ffbea95ca6a065bfe01460a94b477150946cd3e55d6bad2cdc50ef231f4626321818dc06793d1b3629734f313b532020058575ebb8529e2c65530e9dab36a789209cce6686836b0e5e422f052be79b945bd8f7a0aaa59b544914434e891b38c86be62dba9678f0697a266517979fdc45a1de97c784c86aa9e11b7767a7dcce3605da052408c2a041cb9481db8c4cdd11f28b2a0e03800f4b5fe443519eaabeff0b4056177c510c7109888ee92093171d41020060a70ca6049208d02571c0c83a490baca6c7478f6278a40580f080cc8f359c681d2df159ca15ca412a3bd221efc520efd9cf7ee1b7f7deed29f631f5d76c76da947dabe34a766c4209edee947c79b7fa4ab528ddacdd4c0198119c3a021c784831251d833ecdfffec2e8413e23104be8e188a988071cf45192b9d5539b226cb0ea4891eb76cd01651c18d7f2b55840a8015caf5c65db8dccb9466c18c41db5133c3f7506a88b225336f976cdfc2b356f11150cd78c1a1fc9b49a2865f81224ee892585ee66a94496292ba48968bdc4efe4490b2d7633678faa4609810524ae638faad832ec04ac73d1d015351d7aeaa2b264ed13719b821f50c76a33d5c7b2974ae56fb37f41b6cfeb2bff5537baf589833a01ea12bf25cdad19e3af0afb19b4c6fbc998bd6eb2b22c24c2b32c81e5ad54907fb2497c3e2266d5319d8056365bca58903bb73cb4975d9c1c9ba1bad69e3567b23eeab69028c0050393b65e8c5b220aec6d391812d7d0b8665abe5f3d1bc51b2f693635f2b474e7c80f2d3310ee8a0e17bc8f909d5915189b4116a32a882a5d8325844cc0036c1a07b9b4c00dcbcdf6f9faba450b13ea16a5d236c06c8dd383b8675e5b95a1c0cc0894e9d555cf6caf4d116af47c6a1d66f556bbcfbf41a6c0b2bf35992bad800793b883e5d664c0d3b06d1459e2b8c42085924eba3a910ca519146407d663a5a1ccbc477044e54b01e90f9c62a02c6f6d9906798fc4a412beb941c2972da9c934b7b7455c798a716f488d01bc76147f8a4c081c6cb640eecf78687c5e02e6df1bbd4b7006a16fd2f14cbcb74271cf90281244516e6d980d1570bfd6db38c947e5dd05b7bcde0a928c0a8ba9651e5f8d3dfb5b061cf2a77b1a8d19aad166d0eb483da4062918ea8ba91a5e36be940208300a2142c97762485a5f0d15fcb94af758d055152665fdf17fd1d7f097648bdf102f3eeebc83717bc3112e167006c5d3a80e19b0a3393763bec1b77eb197db97d2cfb3383791cf8d2279a3b479ba6d02bc806c55c0f51b689db08e70e9c9fded85e5211ce55554289b84938286cdfb31c7a307c7f9de95500f1ec7aea88b0d428bc406c255314f3aa61e85b9a8dd5f311d77e3a115bc40cfe32d5dcba82c5216a49b215c3892344c6437e58c1a349cad7b24c22e9da4faa9f579c707caa4da7b195c8e9c137fe93d05bc5ea157593250b846f9328868c76f434019a203d21111f5aedd350e88b360aca9763d5918a65cf2a34a089e9171be3010402d4686c8c34a00bdaf8cc4f4c48af39ac84de336ff740b686ab4a1b913f2b1647a504f7efca554800061f1534b5697a63508f35102b5c6e717785597e1c95a778f24316d9a4ae3779d550454afbee4853d1e33d2389e0bce1f4d4fc4dc4bd72ca2298b2544be385b12cff9083f4e36886cc88f097b1da67f7c9a80488abf816221bb9eaf0ffb802b246a7a98d2aef2a1d770f3e54e9650bb13e199f0d69bc4f7b9d269b0bbbc202e9c9e5e5e4f3467b356703879cdc6f0add4ec551df4e47b6ad10f4ad3db2fa6163b9b823bd6991cfb46c862780ffbffa0d2f87dcf6c0d69a3003c551cf52f42221d9ae05ebac104ac0c827e602d13d005ba043dbea037499b64db7194a8f01d0093683851afeaf13e086c82412c6cac969091a1cc1d7980df429c4b8a4a0c8dc34036bb230611cd59ec1b04aa8de8d5b47f4b6c98ed5505ad54bbc6ae0c740aa46714e840c6ab902120b964668d795365bc574493e4033d9faef54578a267b7870cca178224e71632d6934188b2202682fecd39a93923fb8ef1e4cc4b48830b4e949418bf81c35764de7c982ec8314d31febdebaec572887b45916e5bfd05136229fd8d6b726f9c2ff2864b3dc763e9fa1c63f141937a52b90b84bc9909d05a36df797bececae5290a9fdbefb4f731050e3fe67580a56a3d2b03f370a0d52980c8c0e6a63e7844eca6ed2956507ad59ea774773cabaccbf99fa7dc8cd7ac6e4a015be2bc66a814e98984b779869e3ec86e2c6a08ca338003ee439d875d2f48c5e253f1886daa58558f0cfe3b61e5d18363c17f5178a99232cb734377930f973d54c03caba859ec41179f459de892ef045f594325c376c9e250205327dec71714995a9c3a03e3fe9a21817151341efff5adcf9fa3fd9715f10c8ca8df05713369a890c59d9f8f7ee88fe66035bf10e014fc2cbb0c2a4faaec3331d43759f6fb3f15d2ff33ee87462c9a89f7c19658795637161fe4bb44d00524e47f49be22848230c1ad86e5227201ace60c8ea861bd6698ccee142abf4451e17e30080c6e4ca81446c15fedf3a7b19e5cf0a92d76aa7da4b34d8dce19177ad98946468b132af8804a899ee33e906e07e4004339c191a19652252ee507ae05c9a6cbe54c1c1823ed5bad460e151c2820e4097dbe21d5a0c60dfb50f750e0a69e21194122d029a126b3c81bd3e4164af36a54e55e5fb064f83fc1502bd9117cf3d01eb4e07077b5e470786b07eba9923a45c9a4a556be99ed454bc414adac6b5d9daae5a513a632fe8384daa0e4c6f7f22e89a73c734e06590df68734d00d5bf748a34c89d5d892f7c44b853cda12d30d4ad4a877fa50f108bf878aaa4368e99e470242d286437435203a35c9111fa1ba1bdc819d111338be3a8947e7d39ef1edb29fbc5f1a7f0676cbe1e1d3bbd9f0fa83a5e63e808d4d4308f9c5795cadf12d9f6f9c2dc2aff9ff597159f802c8060d55e8a964655e5ed411f21d12b7434e76ff2d3461ca005a0664cebcef2ec4d3e017fa6030b48ad1f64f4643f981ce982f00a18fa17c91f10821a8675eb2f029b2f864b934bbe0bb536d40593fc12aa20ee10639d74a7c4147c911556307028856ebb8a0de411df8acd453722aafcfa058136e4633f16064c698131d7e0a907efffb5ed75acd91858c4d13877cc871b3a58d6b6885158c4fdf5f176598e88cdd315d2ecd53270ab27fa4c95e98c905c6ea49099b694a313127a4434b784dd7ec303c54f9a4c17b189cfe3ec9dd1758942145f672789c0a434c4071a3ceb0b6ab69ed82861f19c7f60f68e06f130f49c3117cb871ff25654cc2d41cea2666c409af6e462f6aa6382857bac2c75d5007d7cceeca536e03cb8bbebce5d14f8df331450177f25621eae4e6c63ccaa10dec2c24143260df5be2921141df1551f609898d73cff1af2f524be8ba934e6233a70644cab40b0c74054458c8b7a92167cde1108b67f7116c615ed22cee8d135c65a9ed0ef2f6a89ed01a39aa5f9b3b3046edda0758b403ab48802c0e20e1300dc1eb41352ff67abbbba7b50c7a1fb1c62b8656f7ca2eed93234c8aa59498303eec0eadac199a7618dcadd596ca8ce30a1acf7cdf3937ddb7578bada99548633dd3539cd4f219d54d061d9f5e34879ab8a36ac351bae796160fe7ef2d98934abfbd547257e0a214e4c8c60bcfdb290ff55296415b1cbe5b096c9b4343bbb6db81b2e147c8903b71fde16f138436cbdce88dfc1f34214088daa474597230eb5134302662f07706343c9f64412548de70718330c03bedbd150d1444846dc590edee25cac4a2b6af12e87dcf7dcdea2926eb95986346378a1c007f429ba8b4811c1d543f5783d0d7b185820186a71cb09ac4f5bfdce95c220ac0d9a2b8cab74cb7694ec3299f742205ce3e2fee835d8b04b96914c9ee8a8b53da010c75da9c77c403b309a782a331a893650412197f20e74ab79e9e81976de2d072509739f0175d0a50926fe28027cc48d0423b7c64f84bc6d45d5362eb926b008647cf3ad14f1b6f72e470fd9712387b336f06281d053653282d1ee226b37cdb6981cd2bab2f44fa3342397aa6461a85cecc1aa6d690e4864bb3db8bb0aed87ab2d77a3f457110f3bbc1a0d1b56c3056de42f111f0595929418d8b0e161232d4482138dc0618de73c697661cfb8f15cda9b7cf3f8936ad0266fc84bea9996f4bbbc5cfe06ec642de05b2b246cb5d5b8e86a27c1f6d4885b6fda986a9cf38f698647f252208c525d9fb0831ac30b3f22dd635380ed1c3f687dbfc3756199923e333c15e01fc15d8702475e0a2a829dbbc60c1c6a074d06b409a3a13d2f8c9eacdcd6350047438924498c865e575e62a3f431c1bc0739307bd28d869a61a59a41786f6f8223ca1cd03e6652414a8c664c36997307de67e9013af003c6c9a4c1a757f3c1b5e0cdb44f2fd29c71f4a9c03257714153a65f4526cd271cfec5815536b2af1a2040d52baa8ea2295962d685aef1c77b13c0f181eefb4e279c647b84cf5ff22dcbef794a68df9f890ac74046e55a2409e0853cc07d7b2c21dbca2549641083766debeefc16a62f1e7a87d8b079adffbc714b1d09b4fb0b3a7cd87de4ba79b3701cbb60c949cac9c2bc7fc381ab4d4ae4d704a882ad6d376a649dfbd2f22e089e7551df8492d83db6ce43ce021fd7bd5e0cb5431e99ba4dd34a4ec551ece733905ca1c1498a0d1762cda5715339df9662cb096b3a43d5a4de428dd8d65ef5487b9161db9e6cd39664006e0ad13956da120df12976de27e9bed2d9022c0ad29ee64c36a633c4df4768813bae6a60341f809a5d9d5187412f7d7094249b534080f3e1aed5e6cdfb27c850865febe26170d42fb1fb12d0697b1ec63fa089ff7320494a015185cb3b59f798dee375bc6bba5b24e1fda88025294c12c18511600121d833028e5f66d4533db2444a10b0a0ca149553f54f5c32f631354193d7927baeb6dcc4bcd34806357974ff9827797e6a4e5e32e7d0b0920ad175ccbfd0c97b9dbf3b64bd7f25b0cb0f12468fa6d19d973aa6888082d6f1b4f30f39e2b08a3df8139901d069283a0dfa111871e72fc0063837d502ce31b49ec1aea220db12a0827f5a325192fac63a584c04e77839f0bf54e61db75378026b7d22399a3d89d74c22af9df0805ce4a4143bd55b9bbc3976210fb8a724c93555171694e3c2dd62154bcb29d12283635fc43657de13eb82dc674384739066f4edfb50700d62615515b4394aae700c1cfbb1b70134a563f250cacf64680d820eeb286a057fed7da71ba42f647f22238f4c0e9295d35cfea53ccd693a6511bc62fdd8f06e0ca59d2ab107cac0ceacf55783098a6a9e36620a0ebd75b3301c4cc73b3550c5bc001c5759b963fcc530e55f0e1621b91e66b9b0958fa91ba1373ba3858321cbf902780437f3517e781349f9cb20394aaea18427a0a480cc3054013592171077c1947727805cbf88b249438964979a42f1353581ceceb7ad926695843622cce95ded728f1eaa4b1d946c129b9c6daaddcb087e6278d881bcd3932ede35087c4ab54a5632ee747fc4c921d62015287bd81d303e98bf0dda1dc432290ae07364d8cfab477f7532b89a40008f65e7978d69c9c3289ea32fb8f7ef817c9aed6987f6acb59978b74bdee2f12a48df0d983ad7b81fd4b6b99f0c52a1142bfb2b010a8d01e169171d14765d78edc7f3436473a8b985bd2097d9587db192cdf063ebf1243f40f3972fa2da5dffaece18abfca3a72bf6430c0535eac9775f01fb11b37c860b73ccd29f896c5697ea2322a8555d998b6b90ea0a5323fbbea24883062d92e8b19973a207e1ba146fada7023b33a0da145b0d41ec9742c528a7e4e5497a18b64b64605fb07b83d862b8bbaf7e00550e6cf8a921439d8eecaada2c2720ce526c039f1b9a9dc8de136f3ec13f28fc185eb1f03c5aa3386d45b8165e883b61df4d4fe73fc3b0d02662f0629482f26cf3fe3e2a8b08ea133eb3ccf1deeea28b72e08a3417edc624003e65b9383738c9ec8011247182f13def0f509631a7d4def8b0bbb83ed7e759cd9d8852fcacef6a74b89ea17ef109d6951f178a2c105182f49edd0e878e8ff17d4f07e2436285f20c29ff117b80bc90941d313e30703c219b8d98c3e0ae7062b715c1e7e0f668820bd533ca16563ddf48440f8c99c89e031c93e089acf56505ec6aadc863907b298ff8f91665fea3dd0bf4e10814783669e50afc9a4f46fb41ecfb141d2ca4ec4bebb5bfe824849d25358280226abcd8ffeb0190c6dd73fa644cc3830fb9904771936d97d519c97ff72cf453fee1ccf159ad68e30cf13ae0e6b3b61aa90302099faf318e62114a7fd87fe14be50e2a419f71e4e2802ace60d58387e99dafc3a937baa238b29eb25bb567177d241616db0f76ad0a8cc833472719d86eda89f8c5de197f18311f38a33603827c6e7ed8623e17562bc1c77554cc479f0b00f59cb552766805ce3c5c68746e12477f4fc060e8dacf5c75e497083bf37dbdb937ac2d7af03fe717592f51141ecb63f04981bfdce4b60d0160169b18ec34dc1407d153ab830ecb55e7bc9d581bf008afdd2756d0a5cdc134be2d5b0ad28fad758a42f97daab1f7208539ef751f73a03df60cfac745e2c0b212567540fe1e270a8f1fa0c0d340440c953dee1ccb20541dc579edb3c3ebbf883e1c2e9323b3fe18947ffec305cce28c139aeeefc283f30b8164c5b5b805666eaf96968808f5daf9dde90accb39d66909fb3ebedce0772059e248451552afb3146276a229bd8604a9a1589b3a181ee0aa9b2680aa43af5a7b1e13440b1de87b4f48e1d0ac671dfda047315e124c8db3a75f7f97d60c33304a818b436af013af49ea1608e2de1214ab450def26b250dc01cdfd3ca5d5e08a8d2bd1e89732bbdaa5c5e58c291ceac460083d44de73bc92090f399bbc4002b3271dd628f237a65ff96fa5c8b5f63ff4ec7a498bfd05512470046bbcaad1294f0684db29fae87033ac3eec52e5e6178cd5f7c38fdb5c0eed8f6346968fa53287e1313302e0d88e0b65016bc798c2f276dab0ab1e868e1c5f42f4bc464b6419d9b605c2e17fbb510d557760105317bb205757ba69e61095cfbbd1377cda2725a116506150ba0ef211ace9b80590748ab4492ae4e7e386655694c06367e5f7cd87a7237b04872b09b93c36877acab2c74c0ff3dd5efabc5779125ff056e5af667dae242c4df23b69fee8aa68068f0036ebe53691499d26771de2a99523c6e2d97daeb2ae2dc6bc1938fa411d299639b140b5916b894be2b3df8826825ba833f1e1d27310d3b67444284552afa00ef7285e5b3f56eda04bf4af4a5a22caedf2febbf7d445c946cbe0ff00b29f3ebe70dd6de7ba2d6f286dd9a8bfcba168962d7fb5074b0f7bae4bd56bb460174afebc7c13f987db238ffce00381a09d33a538caf6d0f5c15417d38eb3a1d5a6da187e4e775cd7cab3260e17482c2e127f25c8591e4a37367fc1f19e85605c7ee22c968cb366450fb72b1d3bf4225be3fcfef445901e53e51df07d5fe5d117e2e56bccff33aa8de01ba3137d0a08794ff1c5061a50a466eb1453de977ac4dfb900643f5be786e242988760c1db1b8ec25c6181b9fc431cddfb7e40fa369d43ff4297be9c2b804f7faa0f1defc0562501c6126cfa3fbe4bc2f143569ebc9a532b22cd5b881706dcccc2a9a99c9f69a9363d43cbb112eb53cebd8728f00078ab575363abd0e5fbdb86a4371428ca3e97a1bcd8414ecb546dfb0ecf248df95e02ab0863d494f1fc29d7ff3aa296ce641f6996e5036b70f3397b533142f531ad1c34aff48f8fb7d37ae88a738d81058d50c9df358e719da3e375fbff9faced3b5ff6a636a6b99031fbbf74294ab64a74c830e9501fed0904b612b71d76eb0c973bc294289f76c79368338582e1fda9c13a1aa71d0ce9b3c4bdeb93a78835858e19a113e0ab3241d6c553da772fe15ceb68191800222d8ee3fb09f1f14d0152d96360b6d69671cd31925d110d0c37a2a86803353ea2be0fde1b415d450378f1cc8a6ce22debcd8ac155817d5a318ea637d9780469fd586d9e2679bccac49972bab08551f4fba2177e2305e95dd60dacfea196533b2b8b64123de089ddbcec55bd40f2cf8a97f262394bf6c8dad87b485a5fd82dee75c1203b55a272766ba75ba63b8a3a67712247984d2350483d30500181b438551a7b459e0f4a61f71608eaf83160e26c0704cbefe595bf70d29e207da36f780a67fede98afa0c440403de78863009cf5ac301008758f21c08b4578cdb8b6bec92011afdac3954608c6d751b6228c19210794c9e7fd6f9101782d882d18dd864978895d56105183f7284b250095d47273f8d1df8e8e8e83464e0d3d0e1a9acaffe951c5f6a1e1a8e1d9d536e6c075dfdb9bc60766f2977927bfbef8a0378038603305f30aab2d1517ea92a6ca3dbe9b6bab56eb15bed366ef3e025e46e72b161f97faf5cdfa09be52656dcea119e118f476f1c43288f59bbf57f0a62c97f9dc2e8bf079c4c099124f2aa26fffd8e994cc3fb01c6b6483a3ccf7d6b2de8f7bfbd4f3ef88eba277ee27a6f801b8b331648c2ab1e1e613e57735d4033844c760d97d0b217d364a5d5f878e0088693754aabf164b29bb62c5a6cbdb9b8e0996a229abb82db0136136481839a25e28dd58d36b5b8776cf40dbad3ea08ac152885b5ef304306ba4a6a48d320b0f4797e4c5a44c446ef3552780d22af71e4357080df0be116e57cef19b8633996d3ca25e4e28472091e435986778d1a8eddda85fbffff0ead0e541acf90d15a4e7c1c9bae74f58062db124b9919a15289c427c4a09b471667c026a0f7ce7912fa06dde8b46ac58e486a7b74ef9d7362d71b74c3ae593711c4ad081529309dc1f7bebde5ed5669fa826b8554f4921a9929c97469a998d024967434239a2d87c694e2558a4ec94fd51e60dbd6e6d05ea8e04c1e98d696e672b5b57c8a655ed0284c3f1945a6fe197f76578799f7fdbf9be769d8f43acd4edda65bae9437e8ca1d406a0b6c24b55033ae649cc91fc16051766da7d53806a70704b2f7cecae034fd32cc790c2092bf47485cec336e9cd0c28aa89ab240a0688e4bd51ad22aa60118a3eb0a240b32201811d49a74ac966c564297c37f6684e317a68cd534f6a31bdac2c61d8527bdaa18699452530b261fe99d6bd528ab7e573b95ac8a9bca76256585b8725cc15959d672cde558450f85230dbbddc9014cd12b1e15de0ebe42016b39a2ca308b890d20576228935a74352ab4c4c88ec4aa9caa62977a0b6c2905468504d4a1d892ee9384244620f65981ec1148cfcdebdfffffffffaffeff7f922bffc952706b086aa81da9546b8c9a462f2f38a69f18cd6adc92f543079285644520c9c5f7d6f0ae909d94ba7401be72c85b8f358e496d51648d59ced0360840a5fc9a5a93d17133cf2d7170d0fdb7eabc298ae97e853c5ef1699a7e0c704877e7b96f911d05780e648c43d7a525533498c5a996b1a869664df6308e2180fc3d5e7c7ccf4cb81c44a53738e253335e71dfcaa28c3639532d923cc3551186eecd79d2f30dbad0e8b46ac58248d2c62a14c6d04848913187e535447942336233428bb26e324074dfbdcbb29cc2e8d513f300629af13213331a6280a90989c738460305ef7d4908075d0e434176c500a4663cae7b4773be41f709e524d0a29c6b2d9d7871097470be41f70925418c3e90ac08a592525172843a486a49db6194d3e264f2318b92ff2cba2a19122cdaf89da63c90448b5266ba3beaf4e10b5f3174534f4068c57829e45533549f9ae6594b91ee95a1b6404bf6993be204b9372fbe3cc6da11c49ff7dffbefbdf7de1b98b5b22501b35e77a073cd9aa1a6acd00be9d0260c45dc6323543791fc2aa8d9acf4680078298833feba81e1b536adb1bc3b41a5e47c6fde85a77bce9dc2dea07bcdba8970da8a80a6ec0e30542f3524751daccfb954f9065da6f309dd1fa4d1bd7971f3ff075e610a660372701ae882349b66ab316128ecc7ab34c426b0f7de3b818747c0986efeca6feca3ffffffff1fc3ef3d47b7984afe49485c622cadb577be35862cd9fbc3ea0664363c82614f7826183eb5b864c9fd0cc93b2a4f1906ba331a29343672acd51d1084bed492716c5b4b179a9470af440ce8fc36ffdeb9be4137eb5662675b8227e539f02ecb5cdefbb7afd2bd7a91ad816fef450ea258ff648cf02ec30ff3e9f00dba451e628aac4766f9c9672ec3bf6d15815595f791d111d391d40e81cbfa54ab75555c2f2e52c8adf32de92456baf022638578c3597129f05651572d7f55b5d601f3fe5f0e9153e46da80d6a296f055443d8b7a36005baad50c4f5f8aef71a281c74f91afc46b557df1a9c059f936fd3536d29b275239cf95f3f8fa6ffff9ff73dc9a81932829a673a5c49d86c0f1311d8f285dfe01864e67702f2ebad9879c2375f3d4e87a2aa036c6b08a3042895658c18ae2b2998dd8832ecf3360fea035792c5578ea71f6aced00d15a9174ee9d694c3bd97801372fefede79be41171a9dbe899dea3fefb56cc4e5aaad1fa16fae0e47cb832a8cc535c6414ad156deae54db5da7e56fa3ffff1f8e6f9a56784d460b6733d4194d2b9e5a399347c266795c8a7868f078ee1d6bf906dd20a30f584c23c02e157d8d42bdf7aeb57c2a7ad42a8b8484a6912f329049a029b3e30830991e34cbe6d60c938f6da2636f758a1fa78668bdc9788b030c00bfc512570a54a4837a744def5eb2291c74f936c262e32c6cf6c3ed9db79bb2c8b62c13d764d574d584d55c6bb2356e3ba49d3a0c6f150eba1ce4b1744e1f3d2e81745e0d59c45a75f361f7c9c35ecf3e141aebcd0c44fec5c9929fb1e05678ff3fd7d8f100ca31c05ba4aec011c281efef9d45ea0dba595d61fc04cb95c32b8546a36467a1a551d8c944b1045da9c0e462e499ca47db928d1bd23fcf4beccaff8a3589768bcb9a8362ffebcd944fcae2b8954ea70442010449c993e3241d5dd968f15da4a2bddd968d3004a518755307a3dd3233f9b02695325a1443a6131f75b29022940ba11c16d51c511435391fe98ba4ce8ed808a6d67180d77b8b5458089142617ad7b0921684521c0818421b40dee5f8631195ea1b74add8122ada072af062669415a602fb64cd6068ca6d0599826d2a829b9b0a58a13cee9d5b9de0f4784a235d3b86d0e8e2232502be1af8c6ca2a0fa1b4d6721fbcc79132473dec2dcb6bc537e822954ce7f3c31a747bd89177642e73d72accea6a95b57283401963445794db4a8932586a494b3ae23032df2bed89ab38e1b088549ec062cec2e271f9825562e317554aee4244041b58510f539c57cc0c5601585a85d779afce0fd7e7d79dcb7befbd3997f7def2a6ba2064867bef4df2f6fcd0d0e04e611f2c9c66bd88628eced6569c4e46a2a91d18c9185ef7aee4fc67ecde3c9af7eb3dcd616f79bb49db37e8a6109fc791270e90039cdc612f94f40bf3dcb125ee569ab5646fac0f190f354332a07881c26889ae4d66a3dc6089a192ae09fdffffdef00c0f9368344b2f6168489307428161aa50d27114bbe87befbd7bffbdb5da98dffb13f10dba472ee20987733943d3f105d49390650d190b2961513989404d9d52baafb417679052db5c9b9a964d1c6442d3d8914b298927c7a72a470a048e7f4c5ac42a16413a7be7585fc592bdf79ea34369c5ab37a9d31c9199c830ec5cba7e5f184f1330a022ff2ff2db5d1eb49c5f41dfa01b9d56ad581257daede1ad46704f2da2404131d0cce6b101c0aa6c2ae5b14123c71b73ca7be7585c4ab330da2cc7071ce5725c9ddd9f155bd6b1b438b9e60f042e41676936e8d2ce4242a4293b97f9fc338e19787ee2fc1af7065de1b0885432439039619f8b3e45f2be65599e637a83ae545657d895c45cf63dd0229bc78bde7b137d88d0f4851b15b61a582e8a60983b4730304a68ccd1e4e3e63287f35845feff97b089a1278f4794f514d894bf1dda1d71bbb7273c8268baf7debc7e5fa67357c07cd6753d029bd84dd2d6a78dc8e453544e641cb151c1997cccacab61363c6d1ee1a772d8696f86088069a34ecffdbbb10f37ec8b018c631ed737e866b95b4d82c77604b84106d331c4920b6a528706ac98c99e6845b931e3165031ba076a03001fc8e2665e9b56c699cafdef0a0707200915652dc2550e1fb3a1342f9a0f82866a65cf16c499d847eae2846e6005489737b033501a36719509519bce33cc8786d2cb92e3a621e4957f6479feffff7ff937f038de7f9ea3bdf7de6cf4bee8ded3deb354cc5af22fff6499a6fb0fe69ff72edd56c6dc7b6e58d1430d2a6ae74a44b5c15cd1095ac736e9d6c36e8e8aa303c8008caa6f1723e08475d23ac50981b0cf45b901b0c902b9029199b3dce203f689ab3fa7065670512de1c2caeb106c277270582ca4c9784a6b49bb9455f694ac23b6e17889e6621348fba346fe372cc3bcb6b037e85ee50f6d595996b7bc7f7efe64227597a2b026b540d655c2fa760ce8c888eb6ed12ca12512bc207befbd4178db5935e1b4faa83e9afee7d53f321f3f3abc2fe04a0bc3506f108b85152a55d1260a3364543fead061d37aaa507756393855900f4e737a439940d332f68315fd298b899fb4bcb470286662289cb328dfa0cb743ea151112cd3ed01eef448077827b67d836e0aafc04a1cf9b19d043351472ab1ce4ba50914408824a29639a10c222dd7ce708ff3e53c1ee7f1fad744fc6eec41218f9bba31a61dd02a0d1dde8e745e3b607aa86339c792bd93d1b2da729669cc35a5a80ea7a9178986a51a1b53a72fab7157c6b545fa08415304e15a282e70571494220cae337a249962da37931dc770db2872203c1f5619134dffe4ffde8ef138f493b150fe647855ac88e9bde17e68f97707c62f15aaa44862b7e776f7ee3db59c215d29b98e4b0950394d51605b5e50e2a6a2924711d59b672e1454fadfddd120cc907bef0d22e5f65ed731931054eadb400e0b7bffe042b1f23e825765e5843fa13f65ffd1f491fc53c6bf29ac25b6dcfbed7dcb0a075d9e743d732b7bd6bdf588976e8ae2e9165643ef6b69851a77f8f088da8580f534a57d1a027b8b619840b4b23a89d1a51657ec5dc41b937338aaded6ee4dbbf37c8269b8374d73314d035861c0ee4a4db2155062c6ab8a4a857196162b09a53dbd002935e950843b0bcd6313a7b96c06358d9a4c57c2b579c7a39c2af9ae778ed543295760722bae94e9a83d9d243780a66c8a86c8b438d9a3c2fcf1d3266d06a18711318d07e954a3cb9182bc81216ea97df838ad5e2495587342e46523aa22143615957401911bda8b331bc417ae094fa39413132c2b3d8a9134a06b3aa28be1124ae33482a61f1f1cd68aa6fcffffd73077b2799e2cf3fe35328d4ee3d30835468d53635584cff38cf30dba4f68745ab5523083e51d964f9214e0dd9f84be5d5def9d73a5a037e81a71a65a6a240b48815217870e3c0e1f91c7a8d4cfb87b52010c2373180418028c81300e0582a2e7d60014800614c854c0785028384444128a44a1c018100c03838130200c0405c08050401c05a68a567b3c8ee50f18cbfa1b81ee0eab81af5923e52b0cb82f874a311c0c3b512aa7133b922b8e51b4107a443aaab5a98a62537a461475534e9bca2e52d0086a649394672a646e7bd2cec0d6865ebac9d7e4cbdce3982685596df5ca819777f919df997ef41614243f35953b578e50a94aa8e93aa2b7d32357b230eb0695b5fc65fb1b2effff5f396bb44d80affe71c0e71c0ceb60eaec7d4324ee7f916456b04292b5edb7588f1684715e9fdfec8de77dfd11af2372acc78526b6a05a25541e0c0f819096d6a879282c2766f0eebf84f97ecd3c43773dabc0be51761e5096bf66ad06ade2f325fbd9accacc6ba3610b4f0b93f52048fce7fb0eb0cae9e1f28039f7bfff7294da5217c5fc8634a9c8524324ed171b5544504ae80f8ca7e6027db85df211ab04e4a615e41e2161e96e987bfa009fcdaa15a12e795364e23fd8375a753892c9b50b2b8df93a8055d32537f6098a3ca776792d379b66510241c65b4d9e4d01e6926697d2257110c17e9ea8ed33b92197fe6f1706022bcf6769917fe5c60ec2324dea0c01f57c6f494e01b0849aaf91ca7b56100c245f4a8d13d8b8df56d2341fc333d398dd1fad47c8a0e6d52c2e8e68ffd3b632d2971f9da318247e20271f97580e0787bbb7d98c5011882255b80d50a1453dceda1923a34aca810aa3b163e21be096407f95119ad4b02b430bacfd2014a5229fa17a08150de50f972d9494d66c4893dd53b5f778f4f3271f6818714d26d3f17574f12b0492e3a66fed88d98ae660fc64e32a48380c247c5d74c44c9021dc9eed99d3ab4bc0b4b2d5b9f2f525a8b27f38d96560b0907c61a4e15aac190a66eb5a554b1283b6ab53766c7eb3ed4298265a8f4e6ea6c765e68c351c70e93c5770b641d4a96cd6627581cda25f75ecb888c74b3fbb127014d11696be72d044d2ae4ab026276260496e0f8de0ef8ba16da25b3c40764fd7011513b0294d04013a09bf1f729731a2f17c466071407875c4670fecb5120c9b880132017ad1feec20a32bd3e9764a37dd0711bf1f2f60c31442bdbbb88da36e76b78e720e1550b19d069df26412aed980a7c68935f390c002d931ba0e8e5630d67628cf7bb45212ab30e6cc938de779887adb0fffc81a9d3f35042e1bac4b1d622ace23f23a2c656686dfa0c214376aa2daf03168e5742256aaaa7d445a76d1d2029092cd58a00cf80f11a69eb011dd8ca920564c3d7967018b87cd5c45820cd01a91d757067389d5beaa60b5f8e423f431541baad165be807b58f8b286957499dca10e7337efc5de0210b2614a016601de5ecdbbf78b9b5f86de237a4c5e865d5e39dcc370c4d04bfe0282a8e883eeed163ade25a45f0d28a118f1a7452ffc1bd4d11a567385f1f39f6e0c813e932b52122b627e2f4192f0dac71816a17c0fc3644a75fab1e2c322c4625db36195c5d45b5d08aa72151d8496d810b7a734a81c77c3c70db7cfc9e0e7ff28de22308cc002e16e8ad6bbe48a8cb8ad2aa250a740ba62b99e8c4c3ec20c5812b628521260f467a68a01fba20e309a6f06fad397b2339eea35d432c95077860fa3c11078e6438f32d2e4a6473fbc75024015ddc0c48ea70cf351f2c235ada8c68f6b3161440d326631915a923daf9a651c2b0d980974b79871f9a8e0cf4fcf621a15574c8719b5b6983414e4688ed147a9a3569f1c9db4765eb96b065eca2c51d015e5ff6ff0dccb077258a26363b29b835a48f034f4c5695a57aa53d433f4597134e8482e8f7f3f6658b5514a8a37f46e7f76449bf700c91133378440eb3843d6487e5a4289f4ae6ce3b9f3e2c18c1b7e700417773742f0a01268fe5b84e004ea9f60cb2b6a0401fdde1e17f01b0353ffb56215780383eba86274367ac11881af1468db4f492a2daffec8cb74f3c7ab7ecd23e3e22d3d9bc9c48e517f4345b74c7144e93255cba6abc40ea02b872acbc25a1601c28a312d67f3d2168e7c655e06ecab932dd795028a4f711b8c0d15014673ffc94e5c35ec5f3495c81b0913aa1dcaf39e8c4449f3a6400730821b89bd9591dcb870d4221425d1e626920bf6d9696aefd97c0518ebc2526b9a2f23544e9d67c63d604177f7039f9c3bed4637392870592f6a6a2a6ecfc529e30f5f0a02db5da47ef3baaed05fa24298db5398ee736f7d988883f08b0b13968412351cb3fbe364e366a7a15b13b315c6ea0c4d211af978514c5d8f39e7588a47777c1e35e05e9bc535b2dc34000d787e608ae7be281fe895e29868f1523956e6e199faf6572864a9d429791701c7b56cf0e3c212949612b19cad53594c52115c4f462dc3e82b0d4490692885468a14bdda39a0d38b3f23e582ac387590f4901031b2651e8af1b41a9e735e07cd32d7060c9928c9b431aa886cff30844a022ef49a95979db0d423ef1477a7468e119c7ac1224227b52854f1759b4cca917415f9a6457f3cdbb65af5bb632f49f7c5de16f73a3433bb93e3af1e2e64857ebfa0d6b17622bf8b1a410767715ddf6e745e9c467f18dcebe6088e57ce0fac170445e7f972a8ad61a4bf655e935c57b7514cbf21e0881653b201e3fc065baa04b6be7f8d5695ae4360225dca40e6d209d410755c8a71c1908e90474317448cf77be886bc531690fc3b611841a288e147e6576c812804a2541f7d24e88935aeb5a72d692baaf569fc487ae04b7a6bc90e7414bdda4da89212ab94b3f7081780e640b16adaf161691c5ee0de923a29722be2efdef075886abdc2cb5d5d96f606f15dae95e9a2a915643ccfeeb8a89e011967fdb5019a2f155c62f4a90233b5bb94b20353d88c0e545047f6225cccc5771f9686db2626063eba0147a85d67b5da32d3b6779b3feec55dc54ad0f52a1d5a521332d1659a6714888b08f14586edd16b22a13e18be4944aad1f8cb94c00b031d7e7ffa3649d015db9378a912d00bfbe48aa54e36608292a40d722713d2da32eca0e043ab7faef9701011079aa8f988ad4dccfd8660d9dc7b81966964ce4f8791fcfb798a7f5167642e5568b87350b25b302ac0dde0d58b8b5a0d4e30b220935ade792198862c292698be15ebf5fe2efeb6f36a0868a2df0229ddb4327847001ea32623c83fe943d36c7cf74998346d86bd5753c361dfe8cb90c87207dd8ccb8c9f1cb95e59e1c6e60e48f2db79976d2b11e2e7ea63388b4028f58d70a9c81fe20823442456500ca74832c19a0ab6853c0a7f6b015ff919d9760e5e10be438dbcf064b12aec2b1981a5622c28f0ea2ec8fb663986b6212fad874d87e1a6c434c7c794f9fc274c3d21c6f27d5e845d44b4c93ece274974d0ca918c23970ae95bd22c0e74d02e8348f2016f35a58bc66079381fad8d95f45805af0d1bb265357f01b62f8d5678f20c9b8939cc465deb6d277b6761208a83a7491dddc409fd165d8910e9d8140ac1d53b44f1fb6d904ca666430deee78f542b3e5ddf75f9edb72e3b62bf6683b48915ed00760d881c5d0388c09447d939f19e96bf60158a5d9c7502fdd89f244a43e7f703b052f7a73fc97868f4924fd4f184be234586c7220040aed41fb91e89a56cb60e6798a5ee6ffdf82737b900d41a18f4a82f0ae0f225dbb550c011d57565f98ec26bbb4dfcc6997f3818bf9e0894ff8219de67c9414221f8ba7d3b123c38ffe9fa82289261714671b6ec0e2fdfce8cb87a282dab86ce295d3ee11bbd12bd29773b04c6aa1d76b29f2ee35c30ca298a23e638d7ec7e0fd1f1eff0dac9591cd79c9063233736bc8ddcd88903bb7ecf0b7d04332c5120c9470f43402fc1175ac6f91595d317b2d8103f8f9a14b86dcca3c08c6514037b3a5c9aea923fc1ee4ccf095d8d2bf5ee81c024039d6fe38c9aef9e2584466781164b2e72e50812b544ca78796adb9bddbbe71f40ca9126bdcce6697c12c9d1a043d43a1783e958b1d1ea5896447b708cb7275bfd3950ceeb335fb3c1e48053e0a4027e7abac941574e73f7f4e93f1150a747117d949b4b5555dab6a3a380e99cec38458a2b1d52714ea73d7ac275d4f88bdfe0c345fb548c7fabf836a79b903104977a4fa1b05d4361040365d20cb4fa0e99c08a8fb81a98fb0d2000848c3cc84cf4d0ba83d4399e0ca879b5ef53e4908b11c03461bf770002edf541814ef75816a5c1002815938155f52c6f7ccf59a3cc3595956bbb9063802b11297768ca27227bd840a09cdc4782ba3e4fb7f21481d7f450b4ed14245e9a9cb0e029d6df12c2486145cccf32cb32b22f2dc04a2c02fa9efa210c7091a7431d50aecb154e004664070527d35c499514b1f3e70003143932689ef9ea2610e6ec99001ad9b52d6d953a73b5dea84beabbf735bea4a859915e2895956bc45b236d8e8e090b5ad447520449c648b4cb0d4f265f38195fabee1d6698853ff5c39349a33474318f360cc800f43c7add658da26a92d513586201ca97e1c84c583624cd9f5ca19a1fe51fd07eb61f5e449bab76e774048e590f66953c4c151a616eacaab3e366930afa02dd6d2a8073afa734a2abd44b13db9a2bc34b2fd8b04a25f02ebe3e30249cbfc69e12c670186fe5800d78582a64f47dfa270a1323a535a4889714a22271b189e8d874b6a4f4fb2100014bb7de24b81677e9c2a45950c6326d8ea5e822884b4bb7606c65018a2d8a65819972e3da87b21afc3f3261288202d92afd3943f8d8c8ef564a1f8f53f26a363b40ec2a9e14df2717e9ded3615a6393ec184ab5bae8240847afa06c1a6bd3463687bb38e62569ab22d4c38bddea1d4e82c7e1ff31b0da7d6f73c1d786c210aa33896c162f8fd9618988c222fea1fd1bd4deac36dad2a39903940a061ec4694468072aef77a998169cc341d759e57e362b31866fe874da812e4f7dda84b53cfc8399a6a363af0ba252421c1906b142d20a870a163463a91d43bc045a4219865388e9e1d88f46111c0cbb7a9da0bb961fe9bc4c8990ca74c0dd1ed28da0bb6e43987aa795bda74f25b9f59aead29c4957bcaea273d6897a311c80fe12cd07e23c148bda188670aada6f140cd34133e3104eb2d8d3835de3c8244128dbf345ac74af515eff07e9e052a04b23149ed823c94a23e4998b8a3eebc4e29e0702ba236360fc416a2feef912e086a1a688405d44f9e6c35173dc56ac7b9d6555fa3f1828e93b86dd57385a9536a0d024e9509d69a14a31516aafd7fdc2087e877c2631f628d2607d6c41ae9548096bcde5caf720cb0dc13b51eee952ad14af52521148f2cc18b599a3083d326e2466e062605f0cda08b4ebea8e588e5bc0c7e36c740f87839130c09f16b2d7455f21c8acf42cdcc702d4620119e021c3307669fe9f454a40e03bf08471ad5852b232ec8254ca145dd4b7192de0bf91a5c49a4a7f5e6addaeda6ee4f2cab38875186f48631c6ecd06aad60cc612534ec4fda199ce462518efc34143db52bb6065b185edd22ca46680269d9578a847a8c5c170349c460b107568988acb5f306709d888f1494ef8b2678c22d15c1e4ecc9b6d1635a7da15cabb946a363a6621e84b8cfaccc6645955354a6706d6f8ecb19b97725a76ebc7ee24fd8d5076f9fd42548f002a3abb86739ad4b31fe68b99c9416e07e4917098ca89a6b2569e3ee31061c17b00b9eadafcd023c34450b2f19d5716af9f1b663841153acca6c8d4f02188e3271dbf9d7a0114ea6081fd04f174b33f0ea384bf066cdaed127c17d735add7b741dd84bfe0427d9b955d52409fe58894c42a31bf4b8a94b88937df6052760bafb9ed1d48a1a9fc86d88b1eb7050b1f7b4776c0fb50e0510465b406cd66052079a1eb4736485717f7a7e044ba9e2612e01851c5332c8381109f24092e5bc606ad0fc340a2451647e0263152f68a450a594c415a8299caedf36301e773f409fe065dbd5de91287d82c0eef11fd6fcf790709a84b75a5619b88847e69497444c04aa796bc3f50508c3999065692e6029787c5bebd6f83f5116a28d33eef6800edde7d9928ac326120cf9f7c6761ab9b173555d6b901c68f9a299656a14e8567f0fcaf30138231d5709c5300db63156ef4251c76caadf843fa39981eb8c92ecf7d586e195e2f7e51eae3c8d9c1013bd448850e6b13b562ac77cac53b609bd5880399d29704406a27460c9050f78a15bd9e4d451f2b49088f69fb3111b241e82ef281263e09b4cd4fae9a7968eda8efa1ab0592bd8c96c46f0695f299e832a385b98849836ce040478f664acdd9daab7f55b11e2496e173b992b0af1df81ee168e22c8ec47e6e8b6e67051015e7ea0c21146d919a1f10ed113196aa72aeb3257cf0c77a4c3a777f1b3764ad3bec0cf764eae9e9f47f02816b5788945311e09d5bfb60db0ebccfd4f408922afa07bae7ced1db133a3bc943153749a013e5df8901dc256d03224188f7400ceba8ddd1a53b9b652db2815b660a0f094b5e6490141346cad349f2efd2ff5dc24df1a0cb6047a0303e3165da507c32bdd1d151f10fea376465dcc6875bf637e044be9c1a567512b20d695fb48243f2c947d47cfb7fc5fa2cd79336bd2ddb349279b25eb73b4fd759f4316e109aee150b9afa874a1dbb737c249ed0a4a0dce5c6f6b3613edb027a660a6ed8f10a5ac3e22c05f1eed7140afbbc26a04922393e4e8de3d7db7bd98ac13c99a354289fe98cfdb51663b3c86200ebac398bd6bbba4a7310373f7fb28cbdb151cc74e768186518a2a94ad6c5d3d954aa833e4282afe6c97808368da864a66c3ddfa76be7b5d298aec55612a597d5e9605ce509ec8aa5190eb8ac240b98ce9399026f35656fe8f3168cb44271b6b30dd9da65f58a8b89a3c38ea19b3fbf7a146e16d7468d51e33aed6f6ac8d99a6f58dbc5b4ed5622510fefcf52ab36b06f7f637576ba66009c8b9a94046afde943a123bb73132bcf46a3a6264eaa3965f963ab03ed565675bc541a9a1ee99e5d4c6591b832e822b8927e5b8ac329f5ece2336de238132b5c34e5077a206359fd42802b393c9e701ec95cba10d4520509302d945f507b5624cf870ebcb2c03ee7f379608323fb18aec06d6c2c91d82efd453583948933e6a8a7e81bc615abf961cc5d24683a5197502f9201b6c4a4d5f9561c1fcd5423b20476e0b1e7e05607b453a4a265b88fa8a5028891a88cfe1455eae4a76f82a3ad4271e4b2a8589fcb0927bb86e5df2a2dd92232fa0aa0c8d2dd6881211af9723f61c3470254e6d383bcd9ee8f33be418d515bec8f7a43549080b1583f4988225f06ed37c0bfb814cccd811746eea0065d202f3eef0a373157bf332661e6d62d292b3d9e3caff37f934222066a58a5cb7f8a03fb5d7f3bb23a984d1cb5f037f8e43cc66648222a75bc21b0408df419fc7ad096007d1bb0cb34facca238d4726c6e3be85bf6a8a1ba30e73d831ba18dbd262899ee72a87f70206ab42a89d2d092e90a42565e8230af1759ef340c66578cb888ad6d36786bb0a0123214329d32ae63835bd71116092aa7b9d477439b778e7f53dda424942c08a5d7277a2b4d1721f6598c1b7f262a9cca2a29e5ebd8b81413c3a5f6f8e8f3c9b236ffad319cc8680ce7684ddabcf09b106556da04b1ff5f47835b7a479b10669f889d9857fbe53a3aa4bec9a0afc39132727d307dafe4b26fb7f8592a72747c3bc1338e6a5ca2e1cadc1a014a336c455fc08d2d6d954ad31aef332832f1035d9d824b2710f617792cf1022a03c89e5134855b44771c05d6e711a13018046a6e3ce5c2df2d20560c44a214f4d15fb9c2fc8c82c35253d76afedd64d4e3581d83c6d5a50ff0d41c25a5be80e3e198e66520089a7b0273e83d3ad50841712e361158da040ab9c145642f7839204b24cd3235594390b8d3e8ad269162f3965431ea8fa9b10050f2e96b2f273b944547c0e8af94d911245f0227694999a4fba783941eea056e227ecf69d853d437f452d49393d4bbea17550035292f0e04ccbd4304a353262d69c3ab21bf7275c1832a21c15256002910974fbe60aaedcac964363ef9bfe304038834d96a7e4a95867832fd7d17e8b8d10dd67105ec47d88ee95cc9f9a0894969d05b1f74b3784674d74f8453434c0222c6d1c094733d8903c510c8c67011e715905b90ec25c894360bd90c21afaf131563169f6079a18a6ee9e0b7bc20521c112a78fdbf793073ed66a85013e215621767e9c5be7f132db7bc18b831be2583eaa0079bc686f19498c8051c063825e526f3f29ea5a000375ef28d2c032f9d41c3c7de88fa02e5f8a088896272b9c42390ec910d33c4e939f2c3ec714da7c7fe5e9dc8ded2201c0bcee9b671e137146b8091732c087ece60b1b491db8bbf390b1b0a4af2ed8a994d0d08ef3eccb9a0d0fca62ff5291cd391553a8d64a1ab2c039d670454a61317a3446e0be0ebbf779ca001150e996a0ccdb056f2343f839ef98ca410373809b3ed4a4384fb6b87e6554fe2fad657680f02d8168ab8c32e7b9d83d281671499bc1277aa4d8eb4e1833bb0aa85bf45637afb1dcce19ba167dcce7bfb0d24d53cbaa23fa8ba677b272dcd6f0b43463f17e8a841949dffe89e1da9a509407a90c8784200c36ae58b1b5b6a2076fc9ca01f3b491f767c72683d84c9aab526cf623475dfe875b443a36a8d28aa91b882c692f0cfec23d384399c9f2e908b3fcc0aaeb25dbb57ebd40d4368cb2ac1651a519d66609e3f759ad8d7ed1224232a7c4a946558a8d279773f746727c89133fa77486552b70bc964b331106c00e97c58275009137f4ea4a50b2595690dbe548467cf7775d4e03e741f841a25b156f70407fe470d5c97210b53c07d9dfcbdc37267e98ea10c6aa8c465e8e9cd8dc47a863c5bf31b04953f9c89b32c2a60d9f631be995c7bb2995e2753a938df9c826129153b55bc567f644e741c4a54e316ea5f39016546d8f164c0af02395ea933fd5e0ad175b207aac90221f3968de0ffa48a8738eeccf4d540aeb3ff3479205d13db68ae5aba50462f5b44a5955717c449723bb31bada2c2b40ce94a36d1431001b8d6a87d5c5607095829c455813e024c999823d442430a9d00a9bacf26bd4f57d5486fa46171c09996244f102b7927be51049be4dd2a3673a9335a9669d82be7fd41eaa030a0f9b212eaab5e4ff239650d1d200bba9b2ac19333984dbeefd1146287045090bea82e1cb0fc37ae614b025bdd142eef1a12c9f0733e38422c2049331e4b5814c7e90fc6821fe8695a812b157d909d6995a0a8277f500db19262b56c6f33d66c618b083e54c571120bac52a817bf6909e3361228416701eaa025e354fc8e5520137a8a5bdcb3b5ad258dab13869b975c0a00e1238cfe3fd28fd60d6fa089b70a06ff39112c59579ee9032fad48f73fa8c1ebe000deeb7b2a6638a8425950c709f2faaa25ceb326c388440db406fc4d527f5420aa503906369c82b324e3e5978e48fdbab26f3a53db65f8913b24ba0c7a8bd60ae356e0bd6ff0a6aa15462e017a8029032a7780011a58a682c4db69d50be957a676cd73ca7fa1ad0a27449150326b7ef91d7975e3471245939e604afdf706d7b11cc0e76f3ee589ee874792d19061e266fdb567d503aff93b870f44b41990fb4e64ba6f067c8e02317cc408832c80adc2b175327bc131d4087cd0b1e47df262b6546805e85d3dd6ab3e5567b7c0b03e5bae4e2380799d95ba989e7c3d952516175aa3cdfbe4d9c1f5e0378410fb5f651d92f7dfc9f412ebf14ef2af8cb1e9a16e85c6e771f5a34e22dacaf66f14811b5549b558cd8485d6bf1a2824a1cd8cbeeb672f57041a4aae38fb5d5bdf423f03b96e6af8770fa5d14a02c3f729ff72d2249f3597fe0ab80a944ae04a47db19508a2a7955578dd11392b05fc90b2fb1f03c77911cbed939370716a5453281895d3d9962d79dd60a00b8b993a2756c8d6dc051b1ea64b53f8c7cd386b96ef480b3c3727fe012287946d39dd617e4cc9cdf8cbb720c70a9c81fe2082764a4b4be4948552580a0b95121f49dbf9fbbb2f73d40189d0609afa73e98e36349cae670fea347a219d4fa4fc4486d5136792e2c7ac02c0a39e9e404b7c337015cb0c51f365450e137f87c34e55fcb167f72c39079364ababfa35b157989bd8d840a6f9b439a9a65bbad98b8414dfc774e77320503b2f530bef4477a41b3d1f9c776cc1501bad42500ea2748e458ec1127af5c3e96a8130b40e5ae3729b509c3cf87b6c9e8c26bd6c3f17436415672829ec94f68969a6bcd0404a480896d2600093e249a93b8cf3a6bf0e1dd49eff9684e0f0287cfb98261ff75e61cfa9617ecc65d5ecc80dd00266f02176b701e5f0aacbbc830d99773871c5504d7337618e014d89122b2bbcb5ee06be74a843a103f2b62ea8f07d0790596de4d012d71dd6155719cb4052f54684698e284018e17d124c0308b30f34c172088a4f855dff615b172639ba32dc4ddea6e2ecb3df53d42c51965026a78a107089fff853e3b01fe88e16c7dd14a814d26035434fa9c1ed6e8b68820c58b3efc4b65e6b6584541a8425b8e1f64d8b96931c7f4890c07d12b6a3e8939473162d0730f7144e334835db6908c4c7f072410a09b90077f48b34544fe906d8e83aa42f93ec696672d296850e08ab519a015167271957755a1534a0ca64b73d81aacd232cac06e0ce66e577d7bf066e1fd69bc84b6d84a61426512f0f37d323ddec9659b51ad1fe8292e495a69405f5dcf2d3dd5dbabc113d2ca2afef06ce7319bb3c698570f6df01ccc0098f22329f535eac3a863e9ff4e439c9c66d6017dac0d057194f79b89a438ac84b280045b4c889dc4f53e5aa6ae3bd22b203b1fe2e7f629a7247db0241f1f309c1150c5e9035ace9a39792947ff16102f98b5b89fe99a54b318c1dc771d98e3d1f5c1b70cb43c958c0a581a1c9a3384c9fe84580961b0ae426a629d04b1714b934c6cda407e5768c4fb04ade8c709c19d221b2de874d24bf3ca023c5270df621bad695fafccb437ccee23be987cfcad29d9664df8a15ed337b6242804ab8f00e0754c50c4d44b4b314f8b747d3d82644d962697e70495becfa0687e38f37578442b02cb41ab10396c737ea042b8806a637aba0baeb9f20bced371a174c8555f4f29c1909810752b3e51f2d86ae43c7eaf72622ce67b595149615aa44cae6dca4cf17b4286929c887533e4eb0e1bc5e15342f7c7f84750c95484bb835d57827fff182b28aa2242fc60a1b9ca615ed057121136dbf0ac08e3fde23768091c70384eb8b31b4355d71567e21c1282829f9e85a04ec31131512e22c567a698869a8c30464c2c27eb3037d5626f201c964620902e43a10f93af83ed24b270bcc2329b3fc9a4f5a7e13a0bcd0754e222e98a508914c4619ea33a5bc3f650683b48c36307490ce90997588ae974feed8c9fac687f93658e8f5734cbc8df61fdd2223e270b22a52896334371b4937864c4739d0d579dab49b13d0394ade4733f24583bf4322c2e71b8f8a69c096ea122837c89230cf41bd4e239e8b25fef5471af17f1ea4e19ca78c734cf64b18326d07b89bf95651fa3e669e2325dc49d0dab36c7d32b0429416b7dc696d5d1c8f2463faabe28ab54d913e4bad93058501c2255060a2cb57e086e9cbce285cfb49d8882141374509df3b6aaac2f50fd68cdf83f89a72f92521691c6e713e95e4b15afe8f9a85122dab858a0b92b355f88e88c91baa2ee61d81249f8fdf0692c33548b7117d6748b91994766ad14b0c0a931ba11513ea9d1e00b57247ff889c99c4395aacbe272760b30b8e024605946d7c202001ad3e3727c7d237a77f46be8a2caf468980db61a5b31514a4575a9a688544bce076803981c1a19595343f63b51ea29cf6f06b8fd7ac5a9e60711f810d990676c0065afb1c4928323ee73549b74bf1a030768881f8a5e9264f527ea9928e1bc9ac1082070c58c17ae9db0c4a456c6e61164fdbbd8d3b9da48602d68d8e1eb1800f213df50276eee6a8b1421d690f52013f9de8d42dedcc7ba606ed7bd03c5eb86174d10fe4e736eb441c0b416ffb23e956c33bb689b8f355c7453ab8b9e04496d62edd55b0b50086bde8810aa446726c5af83ef7d78e3805578351d042509a46cea913441a0dce0dcbb2aee01da8c86e2aa73049662ab4d9f802a4215eadefd2763bcb48e580ca289042c0206b6a986fe19e02f907f4b4d6c6619a21c29239ba1d2d010af8b0a3b19b80b1f799b51a8ea10555fb3d2f932733fae5a6a1a9a1d9a4a1ce1bc7f962f155d1c80d778d6c8a7ae5de2e5455f30f60235570a41754058f93adf2dedab018c5c3f5a5f926e372a1b396d244bc6d251d28c088c92595b1eca6c849a76a39f632a59efc7e968d5c1b9ed771c4f2337cea7fea031979939bf155f73531db812803d1b7c6f873849e7160007bb43c7c5056e650a1050c8cf50082b3c8654ca762b2e10c516300bc4564e824a220052e3595527898f2fb57400aef414e41facddcdbef186c978a37ffaa4ba2b83acaaaf311b8158df6046b68dd916e4a6c152068be20e5ad63b86b63767e5d238b9611aa8d755c6e105cef905544694631a67622a72d687bae3350300d885f685a93fbca9231c9b7c18f7ffef81558165693fd8f0fe1eabaa57ca56a001fd2c00feb142bd4dc4e2ee51ad0320ef946203997c05a4eac05dcbb66122b463f061b02b906b51e47ce53b947877e44c361d9cbc3ca645f820478c04660bfb453e20496d6c01d2a35bdeeaf780b763f53d5b852854a247fd6947b9e906c3de3fdf6a0b8976cb416b96007130e5b0af16f33515b3feafd22b94601de9bf07d365ad2710490087995799d97677a9a959a71c2ed6051a66d8bfa46ec162361b31b164704ab06cca5168cb92c8b198d750bb32d9ec96a49d13a420e8f9fe55105ba22da0f1914e2a27c662d18031f2a47cb3df64110414a3800b553aeab9a80d5a87021930546d1da37502d9019482012ae4d4315770ce2575bba3f39932e445ee75c87faad4cf420131667631ff33289d3f4a0c1022cc6100ca22438a1912ba9ac0ba58b23650b436552e26b4e2b62cd4ae49fb98d5d8d55fef1636820320b481c5217b6f29654a7befbd0304032403f0023042c5b5b4a45af07643d1e416309831b8faff3561c3d0c2d29a2fcd99e64d13d8046a16e9d0921f8419dcdba3aaddbfd6ae1b6662d370d8ab15bb375a97aa43bfc848a0a1d952086e88215b98f13292848d8fbcb497a705c899da0b448264007116bfbbbf5ad96b47d1bdddfd75f4c75c8ab17a6e5e569ccda1a305088a7474a9213141e97091c6500aa92164efad3555acead025b3e90c41f50c81e42970342349a8032653824d225f995db404d14afe525082d9c7adb346f9339bd6080f4abbd3b6dd4735a0927777f7929b47a5e8099f7b868fcad0b6edb72d0ac49a175c405b514154475ebd9e1a9b5fd3cab356bbffd73a6bd3e6de1e9f59bbffffa99718f6ffbf64d52678599bfc8a2f93f722eaf22b593988296e9df56b5625ba5a11445b938604417f6d6fad0ceedc45f83a4ae1c947598dd38a576d81ed5cb965b6000c222e25a4765e60acdcfd51221f200e2aefee2a6255872e994de78350f1fcdf27d9dddd4f7476f79b8ae366953dbf230a56914671e1114eb8c0c20804b54214cbcbb3c812d41117cecab3c85e1b633d158026dde46705abfcc92949ea746f96a1a5d6435fab86539f22ae3a54bbbf71efad3557ec5c4be7623a57d3b99ccef5f41d3cdfd12bd6ac29247329cb70b8f51b820cf1e9242b21c662c5d38e886a54b110a2f6c45221cdb02119dfb4052988a145684b553133f5f8838cb70221dbeb6ac2e4f51abab59e83fd0a6748aa16b152816ccd542eb4acefcdfdffff7f37552a8dd868f5769d736e5b168aaa0e3dc64b66d3f9245878feafaeeb62ffff8c102564a270c6861865a65000d2123e25892fd6985413c218cea96b56acead011594b0d6716e943fe9041a410394412f3eb9ea35631a1bcea47913e6a90221a533466fed775bd8cd8282912dbd8a31673fdfff58f4f44266b0e9be076776fdb4d958270e79ef5b337292eb4e6d023338c7c46c85aa084c71d9f9f2d99185645727c6f9bcd1df66db46d9d7b6b77a48e818105600d606551f89fb06d27f5a1115b0e532aa9aee56b383d311e571daa57e3fbf686ddddddddbdc392b358b6f618e4fcdccd05ce1f32b24a2505a99c5c6a4a24b12c80d9e02194c204532dc97677f7bd3768271b405a6494fdf4c656fc039b2ce4cb4b0fe69015677becbc4acab921ffcefeff6d0b22c9d23de77ffd46556b97a6aa439d235c9ebc9eefc7b24668218cd25e66420c6f30a8fc3b534fd5a13efd838338614e04d3f083ca3ab5ea3cd5a200478161832ae29003ee9f8eb54056f0aaad6d8baa0e053b6a5867ed563d3d641978030402818045c0246093ffffbfbbcfc8b7dbfb2f3ca42d28d770f68b5eef2723c6e7c40db5229557d7093e3fb21d9c22a41f1c4c8c1c8dc446961907bbcd0d5ecb82f5ffffffd7e80f1be6d6e9ccbf1a61554d8b384514793eac77d639e7dcd96793405587021571904cfa9cde6ee63171c3a05c773770ad6540d521544bcba0f8849287d4130db3b41531964ddcde483a21e447cd2b0e9220a445472d85d59114567e47550bca76b3508ff9e8337a8b8ae2aa0716dcbb6df3bfce124d884c5eb7f8be556dbba79cc49d7bcae7525e57912cd534ff50a1e53c8104e5e0c2c1c3a6cb22aba1f1b4f6c284faf1b76d5554115e374d4a739bd261e10305aa0bcc4fec0409f7bfa385eb1b963f241dfc934555871ee3e5064926db9206a1015484a31584d15ca280a2e847510816b3a746bb9e29aa3af4182f994d278899677677f7d799dda2915760c0735a980a1192aa40ddb94a61a2657dbafb9afb541cab038c89535b91541a729104a371208da8c5b31715b37423c3d454920940b5184c48ba4a28579cd5daf9caf3a17c798d65b9b01acb019beac044d2855359f78e85aa0e1dea103151eb176c2af3437ac693d1ee7b2fcde8a51bbd04d44b407aa9e8c398c90b00f0883852b2d6af8dbd92505c77dd1eaf3a54ff5115d6d0187bd7b56d6d6911de9133b5c64d2d250a1209356ccb308c24b0181365693b565c05ae9d35b3ac1f3b59369d8d541532574350562cc94e99882d9aef81a6d6eb3a417ae562b6d1b6dd4a1dcb13cd25648483c7510f9a9615ff0a3201897e5660ad38d631e7385920974b997e9a1248c2ded43af8081aa67ce08142460dcc0ca126f60afd92029a0db5ce7a28f3d6137ed5d54f2f5e4edc2cf8eea34338481c5214707830742c15638860cac5e308a778fdb9afdbb6dbea99b673df28ca233c652ffcf82803a1c98756109d34981a16cc09e914effc1fb67bac7def32a2aa438bfa08c7380dca96b90f9f3e53763ba56df77387267dc3e7ebe2bd49b97ba728e594675d7835f1c660a4c0be74bec1019522850c63d5bbabc61ea7aa437b9e1a566a18bc340bd41e8fb2000c6c7ac6d43abf178d1213369551cca56d2bc2c5d3357cfbffffffbfc1ffff7eee53fc511f59cfa7888f9e969387f562e6b09d7b40b542ac88c8e7a70577f7b6dd4ae372e7fe9f5f79236e5f6293e8243e95784a3d259fd24f29e8a14baac613121d975f0a16c88a0322f871c4298710a90590dfd9d9d909beeeeefebe9eae7bdb0cd39b21cdcdd35dcdf5776fdb1d40d87fdb2635551dea1c91f47c9cde39bbbb7bd6f91da7b2ee4d7caa3a943742a9e7290f163f0efa4a98a3f2af47f5660889d311d9b9fa10af410d5350bcd85f9cca8ac6f0a93af4a749c408c2b83886d05d099e3f06681580bd496812f0ba1255a7d6b0b726eed0a91ec19d3b71b7fefbebdcbfbbceffff2a08d0ac7baadf8de9b320fd58e08d8d05beecec4ed67c7dc4916b38c7d870ce99a8d7c2efbfaf23837b1be724edfe61f85debe1591d71f191b4f24d5d584e441e23232bcffe10f2ba00077bebff977cee28019165f3abb80ad5d31eca2367bcf448c4ec84b7ea505df2cf42c96b96fdb4b775d6b6770186bfd8dcddd198a298a498a61828b5831b6a643a33ca90566092b52b24712122737e8c31fdcbf8f21132c8dcdff7fd7f56c571a3ea50201006388ad8acd5bd7798aa0e6d3a39d879ba2dd270acd570e6e6de8a4a5c20ece2d635eca8ead05883085bc2b89cdddddd5d7bdbee29ad38eb5fdf28084c4a042971e2331d20ac8f9b1a282c5468f982b291a4e75b9bccf58b89801b374c09f5f466337b746175cefffffffffebfef567f7e77164f5587f27abe1f8916c1ddae9a68fddcc73e49411f9f5fc516e1f37bdf5f28dfbfd14e4b2cdf77630455681514302a29aac6cefaf3df8af10bd18469432f4333b85c16cbeb0b43013c9537937f860567b8deb0e4f0e2a04f59cdc4355fd9c3d2cfc8ae2faa541d9ad5a5595e7ce5986c3643995abfab6f994da6ea50b4b49799104437aeb2aab4a9a76d0bc364dddd0aa6b9737f616582324299a10c51a628735c6d17bc8ad589230c8a9e6bf72dd3b63b07d46fe7feb977612c4d67d953462c2b41828584f7ebf1449432b7ce5a7f4b50bf8ee401dddcdb7673ffce66b66d5b7caa0efd05f3881661ceb00b61777fe1f7fd7741837bbfefeb421b5677775ff36bcf80f7a3219624161607c1214256c50bee27b023ae1d3f2794392c717de20cf186082402e5568da4e1e5cfdbb795bb7fbfcdfb2c29d9d236667e60307cc700f67677f5023464346c1c899df0415a218ae76c79166485b0636c7b400f24491b359d32a04ad870d9e38935440665baab59756f16cda259344b6ea967e2747b5afbab21068a914b5f762978038516288e886d85f1c0fc103b3a01491281916514245f2d551dca6c3a455c3d7922b07a7ab7d95b9d59e056dbd6e5b837ebc461fd0560751374dddddd1d765d9d3a42f6b2edefb07af668e3e289436f846042490668738a396f9d14baeefa37a17ba274f2aed993f5e1aa43f56a548782480e18acacd034e434bc5ef73606551d2ad41818875ab3ae93f059b42c5587767d6d8046f6b9dd21af48981d74569f801f583b7f83620bd4981822c9a4497e2037c386915b67fdf9ddfdbdd8806daddde006d1b5de6f7ef5ffffb741cb20665033c819f414e209f5847c38dfad5ef3ea7e244dd5a12f1a0492191807d73081ffff3f6b209add7bf32c551dca6cb2f038b3d94ed14ed24e136e00a7aa32a3201e305b4d9f98d7c746c39a102a1a242da4f32b5764519886aa0e251643301d71b9f58dc25ddc3bbda1e3d321c9de5b6b9fa5aa43994da773e0f3740e7e78eeabfb9adcdd31a834d475a750891e3ca42a7187228584bb7f9508dffeffffff6f70fbaefbffff2941884a940c589702a05e2f411952575c3747616bcc2aa51a562f481ef7146d51186c6c109df785ad83904945346a52aa2a61ab47ec2858f4d422a7c787a27ddddb69a8ea50629209a8d40f9a635200ecf318580418c2602049f3348e2d0714000714c250b078443040444c300e8982e13120140605c38050000c0c83418160480a8c0531f66e00501c213f7f63e5e503d905d4f09ffad803bec22ebe2e688dbedb83ac41b93bdf32067e4d5db678dda655428717a62cc36b05624e0edd0c9aa7d0588da844fc9f2c93bd24657c80bdb3c04f5c8925e9bbe9f1858a799fa67b243097bfc32b6aea902bf65bf9c08aa2f1ca7f63a46f14d46db77a495a545eb203244a6849124738b67e307aa54ffe12256ee0e4c9655ce29ca25dbc1469d7291c8f42212cfcffee7b0be1b30c52ee1651625955f7e35550d38a4827fb698ac2526012e177f3f4760ec5cc43dabd38a1208ebee246386a5a9fdea44507f699cbcb85c3b897e38b33909a7152e4240581e18bcad7216b506696d6e691a47db3289d19ab67f8524f0d7c49c8b99228c010de3ca886c271489eca38f7cc44984ea5469e042d547a0c8b6b600ee8ce488f40d144871c6f3c67148f80404b424138c14608861a340786ae10d6b558badcb0ab0aa1ba8e0692f2712b5b61b86eff0bfa8fe24f430b96cd4edb12cf635a8aac52e05ec2b14528c17ebf5f84bd76f2862c312ebd8df90669bcc65e4e6d42e68d2dd88930b742228ecfd40f159cdf737d7c789e4c492d4105fff8cb52a6a3bcaec6ae1fd87d98b34ae39b42f963e93e008fba4afae4e876e264a2c77dba5957b1ae0ead4db24155dd66435a0cfb7c79a3c7c20396f9dcabec39127e465d6fbf7f1cdad02a32ab5e6c518c4ee25900a9397a81bdea10ed4888076f3fa68d5767e04e2fcf50222af89dc6c7fe5f9cd3456e92e0299d791186b25e69d7e6c1532a024b302e59cc62a9e3a93cadff185e8dd2329bd61e0e74b5dfc3129775fe8005241e0e246df6b1c00faf32c03df4c9f4953e90d5d955da2c65f90819b8a393021c62b04aa96542780ef1ee5a8545e86b900e5389369f13bac99b0d3185f653e40b9fdff5371d0fd00f740a69493fcc50beb5063267de6c2a82302e759d2ad20f712a69e800d81169560ec2733a5f585ec5c34b0bfa1e12f31277d54d34a22bf16948b5fca95bae1e7b4bd5a7344cd093ccd02cba10626f1e2e852f321dcd203853dc98b12cb458998b94cdce077ae1c3f19bf9348fa01e4b33b162c323702ea82304567fc8bd1ba77a70e3adf4732c431a943c2772f97fe9bee9e72594b370eeb36afd79ee6d2e8f608a3a5ab53cdc0cd0e4abaf54be6404eae85071b06c9d860009afe74645fb7f85c81f252705cb2f3bb702011d69f61c065bdbbaa6421b1c25b7c164436abb0602662f377cb5c47e075707f038b4c0ecf2ff45103eaffb2084a478e879376f871bb179f6be5572de945ba7b33a16fd4b9bd246feebb615e4f2fee0662498b67ecce416096d11d7640aa096a1a446d183eedb083c6bd11e51e2d174d195b5d80ba87be842a8fda0d321dcb2d251c2309f9c3572bdb15b6887904cf32db7b42d90934cbaf614c0c546008d0316374d2992f5055c4cfdc155b12ece892cb19d676dd01ea1ebb3f358353f4b80d926f4d76818569baff17e38580caa969c76e3a614b9cb627e8f7ef452d3e0e0a95ed65da13f9697a9c2a5e61d1d28bbbe31ff4ca5052fec9577bfe5ae7b7101458585380b4bf3a725da4eec55a4e1a38bb3fbb92d15e667ff37866a6e6a680d532db415e26b4ab8ac5bed1eb413c0a383f1a3796e9868673012e2f94c1bc9e6906bb584e8e63f75da7aabc8d5544b0e8659a788cad5bc391859946cfe3f4054e7d83168219b37e5334e4225803126ef9af0205cfeaa23acb803c4bba06589247dcdfac16ea0c861f615f0545d54ff0e19c1186a850c9e97f6270ee66d7a4de3afd1de33b835664e1d3c964a87368a538473d3628c1db738cd282f36b8e7d462f7440608b2ec41ebbc83687f7dace7923362ec8f55674a4e4b3f18528f2d1f1c7eee630340c85e8b871178ff3c49a3138d7abdae341b7bc478561254d52a2015c50082e882ff8ee7cb18fe80dcc3af634604abc79402b917bf430dafc353b7c441c05ea4fc4e269ba195adfa0a08ef8b8ac2dcfdbbca4917ea0aa0b9041094d5d4be6caf9ba9137c2cf4fda2ec9b66340ebf7b06711068541088b8d2e11738f8068179cff61ee849f15b0a25b210554639c46090a8532a5bae9868c3a4023503586d184d814d8020303962d3395aacb9c68358c333feb3c9108e5e58b5b24ed4e181de0a1f2e361be19699e9541bf549fa1e244e5881e4c9f23b1603d6b4e3b123e0da02fdbdbc25e121854c23da9557afb24ead2037a701e4a8812893ea273521d69e52eb288df2c31d2c936342716b7c66681f05ba1519f104dcca4d7628cb82d99429f562422895fae2974524195895aa1bd3fe3a94f63732d642b1ccc249e5f79cc5264a4850d5722d16687721c9823452b888c040f1676d61d6313629c827f22b43108b4c6b71b3c10a0e2958020003d20a40f9dea49ad883f4bfc5b39b3b78e5c17d85171ba3fc6911fae866a6534b91808c918a6cc301d554d2d4f94dceb5a053ea9f41e8ae7d9a180b0c27def14e4e4eb3fb5f9a39c67e933319523c00b2e5348cb96791a88e6918ba1834a806f87ac024b0aadb46c87f76a4e70d1e53c00e369dece20f1fd1bf467d42c61c3725c2e291293f8cd44b52ff701de6a4b8a0a34c8930206339238f3e454ea0356ccc2eecb97723e12c4f5c4afc94e8ea80e79649d6cc78a4cb47e1d082394f03794dea64038053e55c45ffb0c58b7d5328aeee50584f42327572aea8333bce2d5b873083f06409659bf21d44d51c9ad4333e798eb1543e35787daa2d894aa34352b1dbc9d3c3762ff47f690998ce7629c00c918664353e0f26c3eaa493b75e4e1e63e3197d652cd2a6364b542d770cb0415736efd2940194bbe726cf9cf98f20a4c2244d6b4165fcfff8ed02abb1acf8b866fcd36496d9fa0503de298484bb4df4b8b2fb5047aa1d7e450c110ed749b5856cb448c2ed4a054190fe0947425e8b552223e07bf82ecd8a7d541aa663984018a784cdad4d4624c324dbada026d7f040fbf1d98f39664e0ef9498248c078c5ed1346d9392b2fc5878cb07a74f2f7ee9504d433e144e32c93580d0b09872c0f117e8a79fffa79eecf57eefca4c2f6bb44660c33a29adb95d0b062d0d1ddc007c53f1c65387fbb22e70938507a4080e77e2f9d89c779fc80c349af0c359e12052e5f7d9df0211f2ce11b819d7f9170cb4e29020ef68d4367d2b180131788e3870abbe1835d994a591980fd0ab1e127933515896cffb3333c104144b0a00a0167c698870d0d2a06197074df5c2805ec14a5e519a0c687e82bddb918f261731f883e368db73df4395be4b085fec376e82d62f85cd2c19586113654747fac83c2c6270d7f71ae7e7a06a3e614a5b86ade03ce81c40d8915700a261a5e55904498b61b14b198c2e7c634258e6b92924d30bb86eb64ef617d13e6336d0e120299d1ed657001f85aa2305d5932038ebf555c9b7b1fead4217321467583b98a0e02110225892eafdb88bafa9e51479c8926911b21fde13257176e668eeade85fde8144224cbb1ec2d37d6ab748942c178daa4d0a882d2124d141e4456f05d4f9bee6f87140c56a9eb4db7e2880b99ae6a6e84e2f75e1ff4cf54ae80bb7aca8b90349da8bd8ae818ec227f100694391835ba3603d4ac2fcab5d95064abc8d180da2562431363b80b3a9619f5a0fa799677590e0483ad03412de49c8f81dc84f3a16101c512e3c7888d1b16f6f88e0ba104e0978f5fad37725920a720ae98f8a09f537e5306d2b54594194429af10be2be6dd290a44849fb33851c65a849a9c2dc6c49032cbd7498d2a4e5da0335b541f5446558a5fe4f5dcce616c144bd5b3978fc54966eab1daf7252cafe9e65dcf4c8a62ebb9f2623ac481fca0a6b7a25df8ec88201bf0fc5a448e6e24bfa5b35650490053d7908d82de7e39c691ac78484e05e3b31f558197f9d201047f70a85a9406aa35efad05e577ab75759b47a50408e06663d87d5781e93934f0d78c04253e3de9882449d5c92e4da1728673d4c063497912f6eb39c89d42b09182fb74afbdac9a8d54a0adc8b4547e9eaf902c4205c06d243a9d0e7dd4f7c80226df2f48380496c2badd2d3c76eaef3a1896a1cba9703efd6195d6c2e134e20aabaaa95e80f8689d762957d8c380479d5bc75b99e56a5982ef63754b8bd273d44c60c5a392ba54554354d639ad8a01a6aef8891d7eeb90abd83afb5088f848265f7139214777d8d2105e19a8c3401be829d3581f5db270502e35bca0fa54b79b0f244a2d02e83cea6b744427b4d6fe43d3a3b498043736cda18434db697bccfa9f5a2f88732b854c201b5c4954f0f6580e1cebe8f61c28f365ac5237500e5d8fc7b125e0da7ea8eaa9496585ee9287e08c232e7bc1deb925667be54bef4b230e44394b875ed5c76a8e1390110747be80595067cca0d496422583ed8b430ab1fd7b5b3f5395369e99e271a1f1803e0644456469053a3de8f20692af6044aa341f70ca4f720cc6be4d5ce26d1d57d942a07e1199f2fe15c11b2dd14a050059ab21e3cde13936cd298f89a741d4721ee6b477c2d3337f6ff2f1ddea54aac599ca9b4aa9425768f00d50caf08a82715c3411cbceb1bfbb478edf948b64404c067a8e05e75039626b2deb9833b056ea2977e7163bc514a7ec560906966123dbc17e341be3ccb129769f56278b66d9c45e6fcb662056beae0aa4db05b0f740ff36db2f667377e9da45cb6f5978fa81abddd1361199380a4d256a510ac2393c1b1c8802c8c9cb6b35456a0b1be6f3c07c0ce6f75414e2080366547a43a18ecc81699450dbcf35f293128cea2c81710e6d691a5327e6c056361cd454bb288ceb8a01a3085685dca0db27c673d90d0bb54637c2c9eabe06a64e643e17e56c0d920ceb5793f0c853cd5967df44a937fa48f6d9a9292483f8de45eb7bfc4c111613b39e11326e2c00d8b54105e914e69e6d66ed248dc06e3386ac8dd2b35228dc1d19048d0bba4d3eba8c16cb424a407d4bab5cfdbf20101704e746394a11d9a0e217c5ad2ae3b871b5a699ca788dfbfdb5d05b5ac4b4f9745b402f636151ac1c1b518fbfd071e59a5dfe01638e989e065ad81e4261b6c26b18ed1e815241c4074a87b301a92622ec0fed08a07179027e711114850c75a1366ec97c424c600d2f94c532ca275b7a140e90aaa338bacc33904d198d643c66b90b96c35f1c873461b0a610e60311a838531337d69f06c0ef0aeccfe9ef0ac69dc8a9fbc7f51523099f2cf0f686598f2959928cee4d1ac5a45f7bad9f31ddd52325eeb40a8aa43af136b1f47a7da10e8f64dc5d3fa9382753aea3ebcf4ab0fef1cb0375b8bfd3d1d199beb28318203a9db2439eb3a86018361f936f6eb15730146f089ea3d61b3a9d14ab3558161d65363d590e2a4c4d0231242a7b9a8d92e57e9c739153d0a80a8ea52e9a0431207c129229c2734cb38969e18da2138644342777ccc32911f380201ed6cb8fdfc25a053d18511155fdcd5dc45965a6b1c783fb4bb409badcb450c996a05f0b3af62ff97d0132f3308cc80a96e81631be43719d11747a1d2c4d46968bf4c8f40dbe053cb21810064d03d3c3ef28d85dbb577fc2afea1bee5ec8d78122db880f39c0443cf24078bd44c4cdf19696e7600a91969cf0551ef6868a651e770468c6ad9b585ecf5c50d8f3e565f21e030bcca2a1933f2c4da5846498350c12a1e36fa686b8821ed382c8731df755266eb0e70b13a4cfc460debbb2e47a0dbd134254ae86a4690f62cff85fa643c234ef73ba2a71ea731ae28cd5ae7748f377ec5cf4df645b3070bb5d50fee110e544f01aee905c4576c919e372fa45822e58a5ca70765f302a195eb2567f16cd38c757ac45f7f8ec084e8c24528b58d8002939669107353726112af8ce12ad87e169045403eab94a954888e7cc1db6e2a5f00ade84aa46da2138ba78693d6fc5c6b5618a8137a5f396977ac166294ae84bcb667ea3c047b1ad8c60fc5bb649ba68a4ea0bb48985ee46f80d26887879f35c322f781b3215535dea030a5d0c26e5807aa853f36112bc6cf8f87068e3ac64bc470f49da0b8f518e367bc9371fa5c70d555cd608c85169dd87b4847d32cf4f732af148399ce92a6c1fdaf32ceff74a496a957627ab183f2cf6656eb9eba21a3d048a735b7944fddeaf988a17ff61e34caa8400e464344b41abb1165c2b36c0dc24b444bda8aed29376ff35cd04dc57b7e0e227d61ea4dbe367ed234dd6b03cb7b428a8dc7909afecfa6a287c0332261e18e3c1c903792802654ae6ea16200c2901ad958197a4db22ff2e1b039023da0e654220f12b6ec6a1948719caed9f9462d17193ae6a946828cba8564a9adfe46fe28facd935a63351704143fd527a0cd7ba542ff2c5aff22ce192505d5506d7fa44f15d00ab142952b61879f089389f990dd12d42a70fd5f7f32454151b2a268a64ea733eef756c4e0bc290166246b44cc34b883dd763dd4b9ce191e2137f6e51f9040ce540498c6b5761735dadf027a4f64cce922ca022c44d73b218a899a7fda3009432492ca65b97cdca44561dd0927b1b4c43fb1a324af6d09569de23d2907d434b3a1a56a70829e555d0362a1cdf5940feed0dcfbea895bc889c2a5a50077684653a80db0512b8383e1416d19a5066febdf2608c2c2021e4c61d7c7ce2cfaf136198c538b40b60f31d6d7a1e3932957d80bba35c1ea8b6a917d6eb122a468a22e2b0419d9774f0f5a445db834db99e09902289ed7990e681c40636f4c6a694e84eebc4ff0479959ade6c431f6abe4e9fc25fa8d31e0d1875317e553c217c44b4e225afa83ec45414b3e87a1e2316fd0927a0d6cfccc3c4828719213756fdaca42531beb4dd3b4e101f151516ac5c5c2b52a453a1bf48114a07a1cc45b6e9804dddd258772645d8e26d4cb33d96846579e53c3d8cd81c58dc39360934a08d4be33eec09d1a14f2ae25c9b930491c65c533b530a2bc1d081662a2c6205469c6fc5e0bac88675887680b46c3c26809dda6b36eee255a466cfda1b26c5fa8e7852bc442b4ca2c93ea6412c94c51addb0698706403c2ceadbf2d9d40739ea9e279f4ae3af075d55ea0d784629d7585b6d623769cc9fcc9a3bcc1435c6410829276982ec38a1a9149c3b3196c9a13d98a0a489c3755a51acb8d3c97a168aa9a590014e6c7b6b4e024678f6c06a8e5ce9ef89fd297b512e4ae4d767159382dfbcf864ded0e0ea0a75b754b9d9508fec925441dc698228f3637c16ca84a35009dd805160af8eb085a201ebd54cda0baac9bee833a34139b0209512c2e5923a6d9c4a4b89632e3108fbe5f192bc3f5283a6c61bba4009bc029548f093788939a84c813a7d54805f11b2ad8b3fc75b51feb2e9b829f9c2ea368e3f381d819f377849eb91767461d8705647b97dbd96925d28245dfb8c77b7f2bc8cd3043114288f2d478e48faddc8329cc044518b6c50400504323fad8bc4527b12a49e65731a95dfc63a49ff8264f3c5aceb78b0dde4830a32794c085e480d69184a4193810be7ef0f4e47911984d4d4bc8d09989a4e44fd8ad471f1acf5b771beaa45bf8001caebb4920b7038e72327ea489bed1c327ac40657a410b00b256e523c33a4c25bfce6dd95ddb63bc114f1a38c04b469c7c69670681a981eee8ec0d647a7dfdf291fcc51fc28cd66ca3971c9f026a4781062cfc3fbf4209350fc1008f16ed6b71c0d7828f9ca055d2c7aea81c43630f02b65b2c1405d9cf8c5c48269fb9971f619ef2a8026333df62bdc3574d41acca00244488dc28e5c89cfa1541842d49a4a89d33be1a8f9fb243ddef29bd0c5fa15262b0bdf6f0eaafb7a1e8427474aae29358372f06428e23ace992f319f5e7246579504c964a92df8fb181ed094e3d9d5143b191eff8052d1818e606a523c47590c9e2051d88ca80205ace3b9314b0f112f5a9f036f75a72d38de3580e20ae89690fb1ca90b36a60fa9341bab16afcc7041d46d44cfa01b3ea0b5c354802fe43ce935559b27694634dcfd1ef04c4d63489755516c4301b6126d4c8eed34e9b936807156a43672ffcb6da81da67174177a29a0a6ce23f7787b57640f069fb81ec15414e58f11a79b2137a5b0e8dbbf86307cb8f3823c67d7a8a918214b1ecd092aeb7c4c76799ca9af8cdd8f002f2a10dca404c6d9023dd0c88fc556839046e2ede5f4d0be88e7851ff7e2d9ad97f73a13f755a2f41f03a3dd56feae98637b2967a849e5fc56a8a50449bebd89f81099c5d2b96896577031e9c52058a83f34ae3de31d68e92b92e97521f0fdfa6e51c9c8d674a7685c1b95a6814c51a56a5f344cd5930f465d55100b4c60af03f22046314116b1c0ad4a814b117b62db67aea3fdf5cad222c75a028c1bcb1167735013655ab9d23e13d3b2ea14a969b5e783db2ec731031eb1a751d90249ba2c3faab94d350623d03476264c7b7805fe9df20704a07c89cfc6f0f61d1f2240df73da4abe5b3e7d4e1279b6101978278616ed49210649815904d10d7ce1fb86697c4479700c54b2edbfcba37a61771d2379aac11d607ca64709c6dd52250d0ac07a5ec7a13905f3220595147446e0b712b02de88ce06f24b7018d62f681a785a4ce8fd5224510ff8a231db358c8c43d3bf46c52879a0f9aae12d164923143733a9a34276a8d13ee2c9764c4a87c4a96022eb230dbc721401014e85a612415ac7c3c7806a8f07e6e29ed0dd8875418c67c08580ed9a85a34b43a1c1e756c75cd55c08d7a75b65b935c5489ace26bda96e4b830062cd90b10a5fea8562ca904ab128db0286f79a9076cb622ae816b70d83fe1b4f3bdda2f08dde552994e34f93291867f52a36a106e81b0d7155b7110b1b7c0b531015fbbfe022564a2f9e29ce164843e3c0200a2de5c0d4b1c40de5ebddfdea92950cc337cd78856e5d595ac538401bf471fb101d1d08e4fa4543fe610659387e36c3a93fef31630e450e0701130157e49411745eb014ff24cff4b4301cb9eb882f41ff77324782fc156eb5342127e1d361d540abd0c364aa2e543a26470b6ec3028786f1c08ff710a64c5cc2af00a773edd347b8a773581092a04dc2d60d1f5ffff51ee741c300a215ed28a66df80f0d0ec1d9cd47d57c587e18557cd9469385fa957456c6a910d01e476bc13f1cf9e03933b1e8c0e81cabe26d116a009727651c0ddf145c68ac691453853e136428e36ae198ac4e7b3de4cad4dcddc90e8c964918567aad67c384338737e20499361f15f01c9fbf6bc81b9a510dc62745d6915183939f698ed2d40cf34f4123144ab9f2d9fc4675cdb602caeb35de1013bab52b1a8a16ca4b27cfe3aaae6e915844bc2d073f8f1400cd95e84f9d26bf24e0cab696f3dfb87a358a621ee9e00d03bf58a1eea99fde5d9728cf1633bfd4f189ec5c30e5febceb86785b0acf3362b54180a93c5bc4ab2369fe6b5da03399ea746965e631b284a957b54d05312632867b330301e0b3c1e3e3bb93504cbee61ea5623d26658bed61dddd0a14e6beaff68adcc05fa0d07169ee81558154e4909f9f9d06eeee7924c3f72b1c92a3d7c5e5b582f4108759dc61490ae0a0ee0dfeee77987f4e80f9cc0ff09616174b57204d0a5c0383daec3ae71dee2ee1eaaae8340cf16ea7e1101dda5d896cb180be45adb0fe30ded0f26acb36fedc2ee8d075d01296837407a7e15627aa26667b1585014763f984c4d0b21f097f3d53a222f29d6a2564e8f557025b4a2e469b16f96d364a76ef4d3eff4985339a59bbb5d5e7e4b2344de415d93e732421fe7050be38aaef61eb782d9ec71b84096600302678da4e14a321addca580e0b88b4b0c086cd5f5a45924627c611b03d86e394a2cc73a48a655bd041bc381b16fd254a4a766542ed20f0762274f4e66a2e8c5615fd3a2db9c23d73a2fbd5eea935cea022578129605cda79b5ea458d7b3a8608ac0372f18daacbe591dbbcf1c583785bfc38ada449711d4c9fcc8cb330511714e6e764178e3d69e65accf75d15aca5a15635d78cbd455a556b708c0225da56b2401e94cf4d91e4c325039a42b9287f48b554580ea11f1749da25d06fc224d1c157d268003feea76e6035479899419d221d09c19b836831d90802ee7dda53ac70e66a851f967d37131a6d596a795a6209bc4af061d6870b383015d251c5c8803cd02654b1133018a4c12241329e5b3ff9c790c109f501a0445d8558cb953857c674d82ecd573d2f252e99e7d6c95f3a1b785ac8879add24c4561901ee090fe8c0e3b2c592d191f99ba40b8894b25c0503246e12ab6b8bf1c2b4fd5b95c95c5b867e0b09c21b3dc5b683b7d6f2a9c0b3c1156b30b930cb742cd6bc78a037df5cd98f4ac3cdca58701a7f5001705168be41793e31ef463a8269d560a76366ca54e4ea605f21a260160506004822c19ab7ced9e790a2c96e440a19e663cf21b36b0e9532e4996124d2fe8a812386ba7828be7407db9c464e41d7c50bc71c4e146c252a67bae31c4b7f3e6d53c4295b4742f254a446abd2cf6c3efa2e4ae5e7c4b4aabcc404f67742dd83509d0f45ee1bf80ec767590198e09886e6293b9b43bb4f080c6e845c2aff2e9c86d022c4269e418d0b108564184db003629b75d5feb7cc11b3145e6f8b078fde0fcfa398383236fa222ec45af5b7d9b2470ec7beb873c1d7e370531925939e13396eca58528253dcabf8b35b51f4f86cf78cb356b82841527f9280e4e6ad8e33c11108703229e60d33cf1c04effc70167ff65834aa8d431bc15259b157161f06c29605f2df9702cdc891cf55d695374ac31c5772eb5a6ff8406adb09bee4d13a5f7f5fc275f42543607c7427b71c95db01b8b383dd498863eef1c59bf424c55d599b1f21408944520f87376112034b5846aa1a4345a90009d9cec646e0f985ce2878601dae1a2b4ab47f55ec3fb9476854c275e2b8f1e148aef8237c44ec509863ded4119e01ac02f3958c0c8c6724ca0ce3f6ffd51d74b3a4c651da03101823f6d55d0af7f86e808105a41c2c7a28e32128fd5c1d3bca1180b5ecb9ec8263fae609951c8b1babe8fd8227802b6a70d57775f4218d9e1733ae141ccb3a23fc2665f4d370f5770161554a04d8ef89953580a431a7014979cd33007ebd63387ecc40178fc68649f44634eb6e695492b57aa0f0d6b99339bc501f2e36ba920f694a31cf8d9fadc5b4a5f646c6e2375c1c46340a6b67b130a7b970b3fd70b6072de721bd22609da9897b4e31589c7b79c4c2ecc7e807ada58af1469b3052abfd2513c0fa6b4643220e9d378415a90350603a7abfe09fe877c4be6d0243d094184357a6eb7a044c39d3898636a808172f95e74d9e799318d59f68117382c9860941369594be375c2b9d8b8024c62511f99a4f04fa492eb9e833423820dda49dd3feb975d79b5224af71bd99d33e66d09d2345517d1907f6531930803c3c8de7686054fd0275cf511b396ff49202ca4d3cbf1246651ab1878fa64fb25789d305473419d61aa2a929c5cd3040ae7bd76febee7472de9855486f2769f1e3380ed783547d49b575ae80e8d0aba9cf6943ab56b080e96f99d11f528cb0c4cad43186f441373ea74ca5128b1a2461d1053d4137fe11ef05c2ca4efb22978c83b6233b812e5f568fca411143abc4a3eb68f3d511e52d7fc48bacebbe6760b1e614afb217f1f2fc98d0b806985d044a88d7925eb55395c9158983b4e6370654972435b246b7fdca31f98c4baad976f6370fff5c541d015f0c889dc5ced1eea273b955d871f1f53d645b9ac765cd3911b2ec3d9b371d3e8d839f549717058e51241a50237a1bf99ddc0bd60a849454439107850220315d35448e771aa4f86e1db2ced54da5bfc0e003ab7d3a900107686e5a8d1b0dcf945d44738f39434453a623313fcb81b94c47627f928b3d6fc668579cd1d91596eca0652d5db820156bf68d637fb07a458b83ce8183ee042be787e2898ec34a738d2c805c7f79d31d236d6d6f4840bf801b9c2f464090168d5516ae9c46db7d0411ca731bfb01899c8a420b2326d80376307110f92391d295a2d69fcf1bace1dbce7b342a95ce2b571c661a2ed7be03ae07f8b557edaa10ec504d71ac6af232aa0abd8ea51437189a8ece2213dd027d47e1d2b562999e504135f66304864c8ff013d17bef516ad6c457a262186bf57cb2c62529d48652b38cc5f060907611e38f9338b7d58a1ee407f0d396a8de09fbaa204fa6a93c10441a8dc628405d35b18c9f615fbf8bc108b5d500a7cc4c87dafe2ed2a5758a6f322dee208f4b8d43ec44814f12f4a85939d142e19fd8f4a10d90ded0b875e0f5115ea1ca52188d436094b51d398ecdb3412fa59da7ae57903b8e9655c778e4a7eaa025749687320577e61163087d1f8a6f5b3e71035780afbcf650464aebcaee64453521e72531e5d28a7115e16cd2e23c094b94a61ea85c32ee227256b700f20a6e39545d7584431907444d505c28737b383017e77260612a344457f143bc61cd07274ab4b4378487ee4ac94deed269fa6006c91727e1635215c10d134c57580fc53b75f59267ef4958a79317249392a4394cde0ab187bbbca2338996ab9794b0184ea8ca5e87549a60e8fdba19f9d57fba3ee7bba6f8c4c9c40cc1ac854cdace24314b81ba537e844225ec75f239c6c978eeaa3f14e2aa67a76d89678e10b32e248d1a925d6259226a3fe879fce11b53a26a3944aef56f9a5b9643ec7c6199afc80abdc6a24666af665eb55fadb026c39c04218f4eabc8e574c6862ef2943c455aecdb8a3787b503d814300946bd15bdf043d54147f212999a0a5e4dfaaedb7c9302f4fee44c2fbd42c6697ccc19c5a8e2920730a0ad59458689ce121ca56f988225c45ea30265a7af4e4295ee690861617ad1e1368aaa009d031c44035a718e785a509855a503891f224af16d5d34065455039273bde82c7d715ca83dfa1e51b2af8d56ae8b46a4ead36a2198090018e532ac870840300c100c70a9412574953c80aa966f272d24cf4e1eabbf47636bc9267b4b29a594494a99d20e8f08dc0618074d3f42f826577b71f2f05760575b8136ab487f62528295b00ba3da44b259075995a52c2073551bf36e9bffbe9f66fe3ec24cdbd2c67416ddf7371b7e81fecf9fb3197fdb9336f90a6ca0f18008f4a9d5ecb44ece6c380da7e1349b66d39a8756d376fad46a5a4ec38979b3e44dbe7d8672e9cf9877adcffe04a3da8a0976b595f62518d54a58ccbbf0a90eeaa01eeaa066d36ca63025a9cd06a5e1d4938bc5cbd06c18d0724c066869012346b369357d6a36a49e387a862074c84f21ec29d2c3d3a3735d2e45c40644d05e97824f51f0a9f6311aa49ebacd23633ab44bbd0a02372e84ece0337ce7d866d4c309d9bdcb3808cba79e9252ca285f569b5d7fd1979f59a5bf3eabd0663ca1ad202cf9ea4d2a583d2cd998bef32feb4956054b608536a3b646bdb34fead5900a363062831ecaae7d4c5f662cebe1b20d76ee002e45e488a323886e022e45e4089f9b71765dfe78c387cb1fa9d8c3e58f8cb5eb30181d78b8f1a94bb577550dedbe671dda8dfe14f5195b9bb14fac68881f63fceae5c7af304cbefe09d672a355bff4253673d75a96b2f1ada79965b31699559bb9eb2fbf2b19d0c2380be9f3d336adfcec7d8b16861fbe43b7b59a51efb319bfb3a57620a87bc738b828223c4fdc8cfab91965e4f6f7db4084a789dbff801afc5cd3a588d400e7528a6f7051447e08b904b814911f3897baea5ea5aa1b1eba066d26a467109bc59f1fa3b9eaa9bb6dba6fd9f5b3b230eee5c7689f77950c18cacd3ff825bb719fd68f5876ddd63c647c3900a1bdf163b488652ce45a7cdb57cf3dfcd2beb254d3a1663e5c18f8f5ebc7e8cf3888b535eaf5cf6ad4ebaaca66356a4b8d7aadea6354b6468d1dd3b6d16f367377926c4c5fcb66f5b368f907bfc89f5f31da9c5634e8d0aaa80209df8a850bc6ffdd2cd6506fc637a3967d3e5e376efbc6e253ec27f69eab19d1f20f66e1eb9683bc0cfcfd066869212b1a7a98e53debd0aaa8e2368a7a6e967f9c482c93b43c39a3437f0f08a25ea19044208e2e1c28397e023337a616526ca4e84edd4b70bdd7de4704f1194708718fd209a5f7eab361073896bbbb5beeeeeeee1e007f2a2092b9e84329c20e132f303f243f307a49b34cefc9233ebd421df98947865c4780508e1479d38cf07de009b9049319493461064514610328ec40033a8e0881029c2714813b32333821d34268403c282849420b3c32c228fdbdf75ec9e3c19c3c887820e17144040e946fb008b54538457d941582f4fc0c311405111e3c0f50a14488200809e1210528726aaa9052c67844a757a81e3c3e3f436e3802740099173481099a2940c18927336548521401420b467002044398800a69010d567405687c4a5340a274e2eeee96f30169878f4b02061e821684904835ba20848c8f2868008313088414090108232140e10077551801681a2109f3c4dd2b220c600a44cc0c2032330e0521843d6809a2cba0c4a9b509888c40061e282571aa5ea91fa09a8024445061325162081e08a00b4d4a59c413b10823b1882014121db2821cef4d1504b9ee942b216088181031d38422354e5002d0ce156a70040b7400a10b5c5851722d80c249b56343ab4b47146cf08123706084035c073d9eb04382249248011772c8aa0541905e387241f5420ea8908451ce11a08882073790004a4266081d3f200992c2c591122b52ca186760d42b94cc4c0d8e4e0d46f478308e86848630b20524497cdc1662407bb29f205038c111464429e81b42f0039dc851540141821e2fd2608ae042a1f9791148e43967a800e7bd4ae91054a073919acc61e4065408a1230427a0e20640804802900c7a7c000555cd0006e08d06e849c904505ba12294328822bd429d866c08a2e8bd472aa2fa3d29e774af42d617a0c033530241174a4ad51335d8c9c109aa1082131ce0433088e2c78f232451420a2df8c0224249023e3c3bb051c11370f8200b4180420647a8810d0c8c8a2001298100888a36a10811412724881c41024540a2608490278ea8c04d8123c88447e58128bce09280000625472f00c1070b86b8618208881002a12940d0f304101e589054586288286268cd65012ac1a2044438aa59020c8c4053c50d518c800b3dd069018e1e50ed08d7810d4cda07665844d7524a31d32b540d0e05a4d07136b9c22989d6122574f766e4a657a89c1d1f3d123012c45bde7c6f0e210632d7ddbd4208dbd5e6e5ee8c4029c814b19e895884e57e209f4034443e8f3ff3bd375b0c4830e27175e7147912c8395df5246b84300a1d78746a091d3e2f08209e43e296084206a2e086880632a0510248115a40e10746f80007415428c10d98420e8c803061c48e21b020a4003d4e6882870c8a5a108216bcd38a14b87b04a42852b9bb7b7584376359fe84740d3f9caa57521b6164861141b55a6e8a123e7f25258cf40a154484c46b50e2c83dc28742952446d8224f600812171ce93dfa1300269ca0c7cd40220727c0c10f45a4f0822b78e004d1871442d400711484831e5dc43d11a194f18727e8121425238823393b3e84d004229c1584e002004c70e0e3441231f8004f1016021094d49c36483123a5f51674ca09239c64dcdfabaf836c8260822a00b1800458f8c115b51e412f78c28e27ec98020916a0200524b8c2144fce08217cef0a46bd42c9ccd4e0e8d0c0428fa683da648c4b3414b82040e103a34fb7843b711180c10ccf0988a32584e08212477055a84206382aa31f8aa8e0064e30618256d378b230c545e22043649c533a014513fe4d08410bb304fdf54e1048e00ab8c0e73d192d297fda0a156b743e338e8a31c079518820220f6680630639667033839c9250fb11017c2218410fb7b921c7d0fb4111f90189243d527062020b54706208538002891e4286189172088e5ea172dcc81892f3c215a26b298330a45728a022d186209cbe64056a8644e2942468e107aa0832d0a5c489f1bdca04119030210bf20645624b19b7808434a44d61c89d5c132922052a2dee38867a852a720ae0309299710a84a0c63d4a58d222f49f17277477f74969571797e029b59c4c7feff97c1cf2dd9bd48dd48ddf35ada2213e2a439be09f60a6b602df046b692bf02b06a34df02d8c016d82286d823f31168cbd7cefbd1cca7a2ffefcce11dfab2fc6185f8cf25fc450607caf6be27c1ab1ac874a7ec4aacd9c0ceb23c7973a39f16be35cf93d53bf73c4af56da18edb96bbd89717c66aecfd6b3bbc1b93c3ed9c51662df26f895cc95a1d8b8f26b7c08eb472965cecd1ef3cc4bdb37d3aad155ff3e8bd35a3f7f5af9f167b59ec9c7975f612c65c432be33be97f15b25433a8c5fca677b8696a42c9164c9cbd25b18faa497259456a5a793ca2f61f1af386db43e9bd35a1686befc199fca5ac2e45f54c652ba97af929f62011c527e8ca6d232a5efb60e7e79379e4e468ad028b2430923fdd53a9885f414cb6c5cfa3e44b24541a71cda4afc211bb575f08bbbf1db95d10232149085f1131803b529fe8989fcd6c12fb2bde89f1f5d7583fc6a27b591d2ef99d6d13574b60e6689d40f0c3f8056f559cba598a973eefd3d84367acb71ce7db39189dfefdc5b18d5562a14aa5d6de5d9897550b369367d6a363eb81bb29b14da901b495f4fad46be94929faffc0e72958cf9956cea52495df90da75d5434c821b7c228a5950c6d8a6f6126aca5adc44fc162b495b8e2040563c194ceee6eaa5b3ea5252f2d09c3672f944813296130e9174c9e7295f3bbd42526124389aee5f7fc186dd2a712cb7ab8d64bccb2999351bdfc6eee716347be35f92d6bba5b617c99fbb97a66fa59cbe1ef20a6565a8d65cc2fb1ac832edb887d9be2d72e5c59bdf12796d9b8b33fc618e59c7307522ae59c319a6c6a71c329adf8ece4e93ffd125e6163fa965898f927b6e4e9d3bfda8b94a736eba713638c6299892d9993ca56c32cf25b25635618ff0a2cfb13ac4f6dbae69cf32a5d267fcd52c94f9352fd92aa743da5f3716ebc34d60b934f92ddddb6be7cf914b530f5e75399716c2fe6cfbfda8b94eceffc0e6a17fdf3bbb2af623e3b54ecdd66c32fefcaffa9b077fbc84887c7a7c70e1736bfd930cbfc8a65366ef52b7f62a72673f4035464888d2bbfc2dc9dfc46577ed6418da44df2553096692bf263c0706e5bf16a46bd73daac03f7e9bbea86f996a558256bfd3e351bd8702a9d325a180ae86a9425c467f85ccd780fe747f8d1ba9fac83c4a716e6e39bf0db4fcc0232717e7bee91111f66da8c2f6dda3e8b36ab51a18df65f8c7650504a06ab895c8ded2252ccd33efde37cdd65b4a7dfccd340200d4e7421a518ffd5301cdaf4be5bdaf4be84b5e895f78ed9d0a6f710a3d1a6f71768d3fbd6dd98a1774f202427b9939a04fdbb6a5263eedb8b27bd3b8b994fa9aabd63d3664e067de7266e0cf141c86dfcd366ed2eeda643bbb77fda057dfe06d2427a7e2af3734fbb98cfcf3efda2f4fccef60247d77b17df6dec5dc7585cbf8ec9701b96d9b8eda9395bf3c08136a48676e9b30fbff0b79fa6315a5633a60dd231dd416e3fb7f787f5b259cc7c517a8865dc5ab79575a081b40fb3f843fe96d59bb5d48659e6a19a57c7ace74a46b3d4b22aeb7a8bd28af4f4b2159d407c92c4b2ca7a6a61fe15839176104a29954fb94a59bd8abe7753a8131f1531924883469bed606154620d8459a8f4eb4fb1a29e396a991ca48d6f2f5adacafbf7eeba9398bb291690b9322eeab9fc13e3a036f997301eea157ffa2ded458c5e71a736ebc0ad9803f2ddacbb32bebf4b0b131ffea42f9f729df3a9cd26d6739d791a08bf0481b681300b75aacdc2c7e9d6fbe037ea06f86eb31ae0fb0cf8ce9fedc7680d46d642c6fbf6edb977e117f96ce664c08789f05df805ba8d2eccd22eccd2372237176840745b2e4584064182aebb448c38ba47f4b80ab814911a14397af9c26817fcef5d25a3bf3ee5eafb73e117eabe0fc21c452bc6df184ac528632794259b64919af45475c37b082d127f833d5cf994aa6ce664d4bf2ef46fe197f72ee406f5e383bffc167ec97af05b311d601547ae03f3f33b18eda2c24f717cedab5ea9b8dc67d5c68d32d85eb7350f0cfd610bbf3c2c8371b318582dccfb19d26631edc22fd53bfdecfa528beb968de90bf3be1f7e76cde8eabd6533d7ef5b55c373b7ad0bb3f833cbfb56c968664a6bf5d667ee5a367e653377e953e8446a0074e9ad2daebb14b20570708c76e197f7ae0bbfbc7759a0ec4031fee9c2998d1beffbf7ee36b311ab0bbfb8fb3294fb9eab66d45bdf855faacd3a705d98e53d3fadd5855f60e2fb6731fdf0a96a024edbb5b6b20edc7823ffab68e016d7ad0bb3bcc52520b4ddb489b31b3317bb14119ea04b556cdd8d661accaeb1e7ee7edd1b3cf8537df2a7bc1f7c87f0dd756efeecdf5a7b756ffeade5dcac5b6659cfb2ac87bd17adb7aa7f9f75749b45efe65fc2dce39b6028d7fd4f5c7eac6f4d2f6197dbacb231ef56fb9e4e69e349b53aea80d0bd863778787d6a35afbd76f0b927218410ae78086d563fd49ad392735a53ca9f73ca3aab39e78ccc94ce59a985990f9ffeac737ec6808ed5f28f3ae78f58b17729231628352824d75fee6061fc15ffa8ce389e05077ac55fe6fad739278abb3e27fc6a27048aa105432a0a8beb2407e7bd0d09c19057d5e8ee9ed3ba6768708674b701ae36bd2fc14e9a0535039dadb5d65a6bf05b6ba41cddda0c4e9b1342ffee7163876768eb1ca6e96b96d0ced1ddddb3677aa6677a66e7664ddbf34ccb69da66c3b1be498c437af8193fa41640bda4bd5bcdbbcdb4d69aa62295aaeb4b9674912c0ee7a016d0e2579f31092ed354d8a4a1a1899fb1cd036294809a818686c6852842c3061b6a061a1a1af91997e0faff9460305ad45033d0d0d0500bc8be3fa3df34383455c350d34fb9d8aefd28beeb17dfb124b2060594c493789127e9813dfae4458e8462c21f3dcbfe33891b3dd863427e0cf00b1f75aba86d23d40ceef9a8beabdfd667ccd3329da371f40c752410c79bec481e75a3cbe8bebf206c52cbbcd76e04299dff78e6060e1fa0ccf5f7a27681841e75cf86ed49f8fda85dcccc8fee7b9f5140ef35db9ea1b9ae13a7ad797088e366fda6173912f723e8ffe833e9dbff41af6e743ba38670e1df40bd608059dc436849decfd5ce78eedfdc7dcf7a1247c22cfe90dfb36b09ee4518e097ea9491ebc9eab992d1b7f20bfb6016e79579aefbaab25935df4b777737929e845f6c0d77ff181ddf3b1959426c353bcc979e845966753cce879b81a3c17d5fdbc993f8e0173e621637df87ccf59763c611bf3412502cef5d1337eb1f99ebde9374e07a124f92d214d085a1806a3ce8459ec48d22f424ccf2bae214160ca1b070273d417c7efc784fb1961f3f867ee4187a938334e94e5d179006975cd1009b01da746282a1fca34893f493d2eb29a50d7351dace248fd5b9bbcf6f1e427b7a82f4fcd1a25f9804691732484b732dd6347365aebedbb0ab6128d7b1ccc6f577ee8dbdb137f6c6ad997b668330fe9db18ff50d42eb594bd6e2424b6aeecfcf3d2d295a35fdaca56d56a35216263e4946cb49c93e15c619032ecbc73fde4d3162b1811a6d72ff5161fcf587338ee781036d72ff1ffc83e87286628265a057fc2796c3499bfc2dc93f2acc9f7fb4dc09e3674cc7f8c327c29617a29854759e3e6b9e3f1a77dfa4611a8aa62d81835cd702df6319b19b7a399a83781bc09e6028bde29c33b9f41863f48f31be778fcebdc79ca36554eff79d7303c7879bdb4ff5c035b76de6eede4c43aa5c7373b99fab1fae93ebae7bd7eb8d7e1b3bb9b3350f3ee3594b779e895cd31e3947f5fdf4b36833ce71fb2dccfbf882f4fe5e75ce34ccd23cc32cefa918394099a6d65aaf6561f41863e51ccc34107b9769f8e5bddbc40362ecc034ccc20fb1ccc685ef34648c344cc32feebefa240c46afbc97588bc834fc526998265a0a03dfe1cb8f30c2e7aa06a6e11cb14d34264424a94d30be05c57451df2ecac5181fde4897f3a47cffed058d1620534b4a9fda4b1a2dd30251cfed703b5c8ddb717a3f7043ae7bb206c5e5f4896f8cd95c8ddbe170dc0d992ded05d76c80d428c63eda6519a866039364b368596a6711ef30c63ddad49ab71dda9abbf106a3db416acd5b6ba46fad796bad91e2376fadd9cc5b6b1f1b9639c63a2fc69be6701ef63b06bb35eeb153e36ef825eba1b5d62ec7e95c7e6e667ed1029fbbd93eee81e3621d1bb7ff3ab90ebbdbeddcacbd19a3ab7137ed726ed662bf6a06746d7e8b0ee7b68fef4eb7c57effd88862ec6f315ed78d31babffdf4ee76b78359da7bfc188d4eec89fbbea64d4ebffd5cdf56de6f20a2a05c7a5d9575cd396755fdb4ec55d1ebe925e79c0ee7c2a6944fbb88ce39a9753b485645e5b4524a4ab22af97e1a4f8fce0e41ae3fc9aafce5b5833a5065bdfd08f9b1d14411201a6b0eed05d76ca0bd601d948bdae1ee2ec49a4e9bfc1dd7b4176da759a7bd60196ac5ffbddbe176308b3f371fd7ffaa21d90ca5e67a6e47d6a7db59cc676da93fe51ae374356e87c3713bb8f200a660f1ee0445ba633c24fd5d47a4b44d5e52daec081fb9e1232f0292bc91243ef9f310c547dc058c7c8483da45bc691821f3f047146a1900a34d3152082184f1f9142fca47f8c57a37f9acc44bee2616a69540ab0431f7af8a31f2097250a474be3f84488a2813d1e713e52108278c908ff00b0fb58be62146a93ecc47aa0f5c2603b4c0936b6a1710b230b50b48b9e86670c608bf3d9f7808c6496d9671d0cd4a3e2b7dfc8f36e3a00b519e4be26725ca35b695f731c6ca5a30f22976166f0603a2481235912cfd8c547ad25fd0223d25450861c541240c7e85103e85cf3dd54bcb4798057a95d8bb1262efa69c9a1842e30923d75fee40c2aa3fc22c550519a8891c6010918dcb474ced058cb6f24c15e4214262b4a97a1842fc2dfb9e8ff04bc547f8488c72ca382d8cfc19e594928f70908c7ce4a9f4b8f6a2a2b3673a87eb1bf7d1b58ed601ad7355c5a2a3d8c45c639ed6d13a665a47df98dd88d03fb074d1997691836f8c31c6ef1b57c9082b59bcfe28395046bbd8e170609be8774503b554c4f84ffc63c05e98d0d26893ff7bfd92c98a97d80538524a29ac28852f25a4958cb27a0803a59052189e663194520a837c0a29b5598ca394d28a4288d170082985f2298c108bb07af894c21823fc18237dfe188dba5b514961841733c7001dfa5744b847c006a794525aa5a454561861a4f5a994f4a5fc2cc64948258aa42e5dba945042282185dff85fc09ac2b72797fbd3ebaab3ba683529a535d2099f84c948298d50c2aa21a59452f854d60ba34f723b7aa8bd287a7fe953763b4a58fba13f3cf1ddfa7e7e78da0af4815f77d8c12c353a50b5a718b0f633e4a70850b4311d52a8139b4eeb71e13b85ef96575e9d424a69fc6ae19c30ba85e19a92c6a2f028288f4d0698733efcf82dd1d9db4ed3892e9d994c26930b86b598a6f9d9344dac858b8b0b05f464d080ae2b55e9ee4eb49d76d14201546b892e4dc71b508b57656502601f9603d40c396d9a1da94b894949894949490c374e80d425366b4123e69a0050ae065b22eca6789a760bdd8971461877dac5f59cb59d1eb19b7282fa41032ebf5300f5a2a5850bf738c18503067288a68b436cc1a15df4cfd63cc496e8e3662d5d0b6c3b1d1b84cf4dc7855fda379d5545adf3576e480ca51b61c81b9fa9f85415bd63b7f05b584619c5aba53f13c0cd5a4a6de5fd158de28502b819652400177e29952a5209420861653d24d9caba2a9bb5b8a5a725d974ae2b61ece2280942082165040821842e170963418574b12a7961efb2602a50a048025f81a3c047aebfdcc18559d8aa2eff268205155b6821aebfd523b8fe5583e0fa5f2e1c30327aef2817e66e0d0c8a16273ed40cfe0e224184eb4f5ae2fa5b3db8fe157471724a5703ab815d1a63fcaf81b590d2e5e9c8c83c32f488a4fe1ed24d7490fe69215465873eda435478d06f4fa50a0f151e29432a3c1a1554806e94453565480547654785076ccd53865478a8e8a800756b92a84d4f9e64106ccd9b0f9fadf9d357c121bdb7d8547890bce46e526a2525f8ad6aa492bb4b07f670a78293a9e8504a55f01d8b36733226f3dcf0e143ca900a4e54d9b9d066adb5065578a8ecb48b6e9fa9ecf4b8fc8d5388205b3934c4d53fad87dc195bf3a0e283d29421151ca8b2436154d151e1d1aea7a5a73653d1b9ed39b64f8d166115b1ac64490d46151e2a38f0e3f3c30cfab82f65c8c752e1c12fd6a790ac05e5931eca1422082154d1b9d1c2a00a0f0b5388528a5478b80584a3e6541c19151ecce2f0ab0a0f66815e9a99b19eb0805470a8f0803a44f7bd0a8faa7d2a8e8accf5cf52882ebfebb9990cbafe19d491a736f94f2ce5a84d0e5578b4f6b953b6cf8d94461a690ad1900a8fa7a223a30a0f5974c40581eee9eee6ad0429a4d5349c76e3ef6db3c9421352438a410dc726b69fcda6dd34216d4eab3ec478260324b7a6f6aa66f211c3400e73fa6c3a73b69a09e3c9fb0b3f61f8e94f4d9bc160e78ae93fe78cf3a4d94c1c2e30dbcdb5a3d38c33e78cb3e1b49663b1c5ced6061a17c8e1e6caa826a82217683a379b8d67c399adddb49f4fab8f37776696fdacb2b306cd175f8cada6fb642a41a9b1d95441b556958445da6e9cb97dce595db69fa5cf7aa8d9948ea6a594369b7af463d426d7a95e69a5d59e8e7e4ced050e6de5bd656a36aed34870b0a8221555a4dae76e46d86e9a4dcd1b79389f996e6b0f89a083df42cf5ad95f31aaadc438e669a116c269a124d018235155ebf729e8243454d55ab148c15e05052bb94e50aa5a634552eb2988a8ce6a0eada835d6fa020c9f9d3c0c2fd8187757581879126bad755ab364af7a0aaa4355955d414648aa53f51d54d55a6b1565fd8c792e6615196545b1b93277a18bb50a0a0aaa3588a85655b5be9ad4d2c7f622862f7dc966a55ff159c9afb02736c65d93121b4379966c7dab069960255806e3c26afb744929e555faccfad225abbf3eabec455fca212824db0bf7b27aab85846a648a900bc59a930c8d99223bc8a8538bba2607195b28aa605c1483d18d8f22e385c527bd5aabad3e9b6f5536c65d9869635c566da527a13724546a187a1e455154a4a4940fbf4f1df49cbd89a23f19ff852226ff855aa84f4e091c99aa4f1d848242c4ef9df7a9857aa8e148f72ff9ab7e63186893553d4ba34dce914a4f359387d8057068f7e74838e879cb16e217faefc487ee73773fb130fdf0dddd1dfa7b180d073ba887de7b7736ba81c487a20e6a220a9ba889e2555b8859d8da8043cd955142aefb0744c006d9dd997b3751f7d07ca7cdc1e66073b0ff3de4061b6ceee183fe3a48f6c9bd89cd6289cd62c96617c90a3d9b596e61ef2b77f71e72776f213a259db2d2f9ee639d4adfcf1d8498c5e994a71f3adf4b21667928ee9dbb4ce3bd43a140d3b6500b31b79094524ad8423d14610bb14c895592c47ae240d59b9306eff9ada201cea6be610cc06248d902469b5af3307d0a6986d7fb8cd1d47c92cfe5a5361ffae41fb0e5c139e19c734e3869cf9609e3f2b79860e8b8b296ccc6fcf732985e6b6dc29e3d41266cc83f4a9f5d0fa1954d5e12c685b392646b70f6304b6b4ac8b4d407a297a8e4cc998a5aaa68480080000100c3160000300c0e86c362619c687284ac0f14801069ae4a564a990804b22cc8511006310618438021c010000c31c6394554037e17dae01234f7fb867ae3af1f6c414e3164cd8db374207599ab5e95c4f6c6aa9a8f97cee711438e956a0df2c6007adbff0e8d163376a37f162d83fba21c4a840662047c121321288f534ca1f0193cd008a18607fec88413409666f524fa109c7e99b3039d1d8024a6bb276149b12ccd3f09464ba77460e11d0583111f638baa5108dccf3519a919753be882e8af11e54c4712edcd9fb12f602a5324f1dbeff49ab4ca9454daa8f533eb831152702d1a887fdb57550e9481b43b049cf8077ca8ce9ce6ba2e893e875007381c696158d8b562a7cde797ca42fa8d12ec0c97a196968a608e80fd7767b86c5caddee1327bb889cfff853bd8e1900a42e28665a8fec5215cce232d3a3c9a503c7fa58ea2c83037d999de88727194b0084dc27cbd95e51c96c3776e68a6c65b52572fafec36b8b7495dbe50669c06c024a04b157f61804f7b23a23cf16a341757f280156e7c87a792016179201ae0cba8d2b404859d03b58da39aa99c922e6d41159d2aab20d599264cc04cd8c29d191ce86f6833984093b3157bde3ff0832021f5c72dc06822f703d545043646a5fbcd9e6efeb8fcd89ba85b946d4e855c33f5e682030658be4223ed064c98c4617900aabc86107f30e2fcb03e37adb05c653af93a80e619747ecf0289bd1eb5dd784f36caac2cc5aa8a351783da521fecd04221a5a1c70abf451109e00de2f7be58cb55586b550bfc063d280846d604d45e9f47e4a059ba0b4848004cfb0e39693e5084d2beefec0e640470918400d3d1c7fb84ffff07ace65d38dadb0bb44e51e1d7400a2663eb34b9e1837b6562aaf7bd2fd1c42ad9362920a1591c00c894d2647ed312d295f6db71c0cdda1fabc7419c704c5f588789482dc21cd0fbcfc75cd3b5ae736a5c1854a8c843bd3ed0beaf87851a855e78034f13f8b3b7b7599c75409c4b339c6c4f7c4a31d83feb495a18229edf705136771b4e61a253b84d61d4bcbaa69831f4f18181397e6cc045506dc744fcb9eb44195719752090f4371b7fd4f1e3f6895326d80892208adfdd1ef6720dfaf56d964dd8050532b5d8335f45f430f9a4009f9b8072d70e30c3032e7d2b24a2acf50a60c90d9c95de624edf20a93cbf0d7613cc2974dd8790397e59b67246bec17ff960c61d2f6d4cdbdcf070d2c6c6eaba0f19d1a1568a04f92d2faf0ea4404030de4984613b2be03727bcaacacd9d54efed1841ef75f3cdc0e45eba8c101d65b843a61375b888150b4424283a1f266475d84151a60215c7b78c151acc679da44f68c26e2e3fdc5430872d944c77fac45a0f8c9e1fffb9b5d5ea70a664ebe77c562b335ff78eec2789a2d542988290cab14680d37a676fb500c610d2342a8c6a3cd3dbdfbae450a40e4704fcb3947094ad496e4a0696338136a3136615d3870c90164549415a75c4835db094d4746bd99874241f7e1313a39e0465e8c4d8fadae0f9e02fceb29b556c91ee6921d82a7bafeb1fd85589d34bd2f349f2b2257d82607048997e38c45308f5614d021aeeecf61f1151ec5ba23b1fdc0eda937b24751239fc52068e02c273dc4703fbc13a922626986d4578ddba88e2af319c734b7bfcaf6b9e12b0871ccd62320b10054debcd7b5713740f41ef085bf3c7e62400cb2ac630449bf14bc2d998f5587c1361c9ee7500c7e49ba5951629ca27c2e1aa9693d0f8ea0a17457e796d29312b6a1bdbb5818075eb01bc7531d19dbbf228dfdb0dd8335702dccd4a1d6c6ec37bd6d32a66b95c2d250844a0e54a37f0956483538b4136bae2f84b05e5f35a9b893793f884d5841ef65745f86b056271c2f831ced2897f74a028e5734939e62297b7df1c395c75127cfc752fcd551b0da525fedf1f12458718731f0655dcc7e82bd2a6848b887e869362938fee9062bdab5b9771ba328cee44d5f94be84898ebc12e8f3c6489999af380a7c9f98b99423b6bd267f28e94ab127a43fd1a1529d161583b991244e85cd0dd137d959b9b1909a42b9f02f1d41c88ab843969cb454e96d842b36da537310d0583d2184c8b9cd4f1656da9968f40673b699a2ce0f27aebb6ca0c0e5e55d241a0f51692f81d4645827794b43662627b8e33c5098502f7c0843d27430c2b00fda019365690a78df851a00d549add0667e013d56c90765440af806ee4760c5b3af4f42e36ae6ac30dab3b52ee677c2743c69c31adbb605e9fe1e08edc735b2abe689fc0e2b4889b8fab79d0a3fa9a267f5114164f074996c0c7c9f36b0bf4f4faf6671529fb5f6ea8b9cc6467ac76cc3fae1f8caa5df5b14d366f359d8db4bfcb454b79e35d5f36d54e99cbd75a8106152fb006afc94cfc8eb409926904d8aa3ba58dab55f19c3de928d74f2b92cb99455764c175c98e48cf78cfdcf85b225746ba8d8363e078a78e529725f98513bd9aeb7dc637e7ed369acf8a5e22608ea384d6bd322d069135cdc5c603a7ebc896336b01326afe96f7e803a7b734bcdce9808f12e0bf9a5d66e137b85b1a9f8cd07ec14f1ea97a2db53089466bd291149ebe6b4cec6656c3d21016aa9dbc86dbcb680aae591b30cc5888fe74fac5e692503e1a0cebe07d01ffad113fbdd7ce10da0a6510adf7e3a83a7152c9dc1ab082a42b7c891d9531598850b10643b395f7a5dc8574447952276050ac21d6cd685fe2ddc979d99de88505a0c1e0f38dd688ab40d7daf583000cdb1b95d2e14f2dfb1498fea62c703f0be8ab5db62889749decf7a68494ceef85f197f6091de4012d2c14284299d01c48ef3a833edc2a87610670cd2a41344e73881d66ef0d9347c83af4eace351421d0f1e2bcfcfb2c90351d9abbb5807b695c8bcfbf902da5428e1bae7fd1c2b37bdc91a4fbe373fd44185dfab0e9714521fd559733de1b365d27a2082987c0627dbb2355635e959a43341818eb6f5137398658345125f4632c4cc5475a678370f515c0444614d921a0e1dea4f55ef355401702328b0e5379c02c650679dbb11a7fb0dc4da97582aab35b26d084d099099ed25756432923f0d39cebf2b14817d98588db22429253b6e7eb2b64d477d7c2558fef65db8c6dd5ca2935d8163d181aa793d0eb1480fc12bcc863625ae8758a0013620a1b3131e5b3e8f51d82e58931514607f0947d6fa921aaeeaa03d08ff3ceabb18e5d8cf724d862639a5b1ef497ac26b390743b779b5524a9a4580c034909e27a93debffa3a0b5cd4298a03dd6d90293632b4a1f3bc0acede807add98f8a80f86ab0489ab1f93301a38ef303780161a2bc53dda55df07c0d4dda210e418514348bb7b3479ca36d16412dad238d0665db2dc4c9552933c28ad5a6eaa5bdac9b53bd320454f8f24b233d98cf1520f706f9d89aa4eb8cb679a33c3d93dd38cb90b27892973d4e309425043747ff9f2592cfde678563eb89fd370849fb7c39a09f8087963a0a7a8bfbad21d76d8cdc2d219b26c9c7f188fabb1d6b963211a75a5ad0d01b187b1fea76ae07229fb524c112e457d2cdb8070c9304fbf8991e3a54be93a09d769b8948534aeb6e9dd1e484878c5c9cf1be22aca98705d257aa5efa43404926fe9d5f793c647cfd465ee88d5daae73d70c8652f844a42f6ac025cca20ec176be3dc2e1337c0cd4283bfa506309a42663c06abe965a1b13b8bfe7e9ee43bf9d306a06c90cb5c1c53ee035244ec02d718b4339fd689ef5b9fa611f5d1f7780fa7a0c81dd9d06dd1c292db01a32dac7695477243fd67a0634aaf159bbd9563d80aa678405695d21b78d6f101598cd3b0aadd6832862674218f7da770c45aabafb8d663d54440eb4a3d5ca59ff932a40e429ab5bcc7a9caec8acb1edb7d91b068cb7e11b132302da3782e182f4e3a6806cc449540cf837bd404342f93a89832b4c8513d9d9689388c0770d9404410135918d534e6fcd7d6071a28b8ece4c79354f62a54bca901940c90fea72d5d57858c55a9f7f76fe4b9d8088217c351f6f9cf102d73edbf284b86cb2f763111473a83e18941dec0c9a53519e1cc6813396f04736d921fc4f0381ae9fe916c5ef9ef66bf0e6be37f4d87cbc916b63818d607adf2d30860e4ac0015bd8bf0775a19f6e1b9cb5ec6babb6525e9323b52e34c1e8eb7089b21cfdf8464babb76b8badad8f599006fe912ff54aff964901afb117ce7e419d641cb4b5dfc2cf48c6945fc8a95269d34493666b2b7b7af86fad2f2778bad9a035d4a45bb86de293ae0bdaaa6abb6cda02f079665b0d49ed5171f4cef66c1b9db20eb46f6bf955374d7aed393bb6125603145f220ee62e15f99819e0aea385d6561c74f93b7c33ec5169630cf8a65c7b05d9fbfe44c77c586e85a38a06d19c8eb32126bd4538cf8f450a87c29c454f2eedea83e8dec59ce1d3cd1195241243764f5334ae770ebf0aa3bafc03d900169e1b9aebd5eb4b200c75ee6d8d6773c03596a477d58445f772b65d427e7ba67fb23540ad9a5ca6ac578c17df7fdc40c7c56b7da60414b5330ebe02e4f4d8891727c90568b318bb75a7b3f6bd808d20d383a7eeeeddb0186e7b5b038db8f7aee97ea67fc29552e8668581aa4b818cd83b5229b687c3642d3b6834160434ffcdc82f7a234a0748628cd34fc64d8ba43bb2c7d575bfb2d273588459142e781dd1497b008c99ef757b17584c030307a46fd05d3920dc84dea5933e4b7a36b3b00a396408ac35eb09656d43528d275aa0970cc7357afa819d1455541ecbf0261202f53c84563084cc852322eb19b2b80a5702547a5a79b8db1f5a6e3c594df57d01511f459e36ab9bbba670fa7df0345cff5b295616ca05e610c101544f44e3e1c8f21038ac5c1aad003aaa742a7e8ec85d5ac49b5b34bc8c9f3559127f80ef2c3211bb9ffebb002fdc64b9be8e2ca9f810414ce7b902b8145922a6e4e600dea62cc9e4403f065c27f20b843301a527767f6f96882f102ebe499b396901fb3bcd00e6715a41cf1bc69faded355174a8c22ddd614b44903d7db2480527b0a5a0570bc4d5176ced45197e0428f2f981a900781641c0b16bb56f5e7f3eee81ac8e62bf8c51148522ecb5d64333b51b0325383446c92aa108c9e3974f731e32222b5cb5795fa350049d0f02612882fd4f7bc135a18849d559da7576d17d0c639cb672a75c8effee1d1cfbb8c222a113675d7f85a33304871dc9ed49cb964097de0fea2dd1bc04f41034fdeb0fdf82f01e2507c20cad263ae0a948772c2bb4c0c137149a1777910a3616c6c97d3d447ee34ad1bb9d9c51ad4aa8e921966e8a7116aeb4808408dd2cad3722e8efed673e101102c3c10baf00baed28a6a92c49cd9683fc98a4fc188743c4b843614886f44e068cd64284bbbe59a88dd9843319dd3b0445b82af0c606e93326e05d1b44cc09aa0dc2a6fc29b9d17a49d5a8900d8ec24450c11e2da82b1265aefbc5f821c2ce439c141276f42b362fd5c4f9254f604430b79df17f227163277c548c4c822a4582ff6e8e03e8ab66011e34fd22121ffb8a8fbf1a3e81c788d8515e861da58a68b8f2f90d430f095b9bdff79eb34e0a4174ec83b52f6478cc5a5490d1820d6f46121443aef9f906927eeccf91129c719b7d9023df21b13ed208b148b82dbda1dbad045848781d23e7d7213a500380cd37477ce34a5c3a11ee076856eb3ea16c3050ec879ec6f49a4d8a5205f82ed889fda4c16d2a3184c30cbe01c9685d113c2e0f9714d9dd14f1895045f0dcf69688a3e847d6dc0321fc59ff573344f4189037e395dabd9747173b39eab7fd7f8c015ce00ce844f14a112a4ee1472a7f02b83000b84e338563bbc57ab5fe0271eabcca12598f9de210944335a45c2e6b7c94ced35e78c2656941e54597d1effef5fb1aea68d91ae8ed3f084f08aab343c512b0fbc3e584d9bf72bb11a351ab3019b3359ac32e9cd5b404b421b1c771e557882b42dabfd7dc70ba9091ed1711675ad32ffdde9ed77505eefdc3f08393b2f27203e81790e09454462b201c6ba56ba0b6d40a020390dda40e04b8216a14f4f2af7a147f887993b925b9f649604b08b100da9e1f3574c684267aaed72addd81c9c8a3d37c58c072f41d6c4c53d1a687085cef8b7711837c0ea0f0b27e165bcaa21f8741f00903364968c854e1e3d17b7fba40c32ab3e913cff00f6846dabc74e45380e189b3228fe62098625d583c055281e05b6c7fad4a3a1f00ff6f337fcb0f69bfe83aef74d8faed6a3778385df129d0cd43268aee89f0e14b516fc08604e1d1654d9ab7a1601e1bc43d4afcde32dc776d401571ba11cdb5f26587548c1ca58351b6fc1f12835d240a3ace1cb530ca9345c2035586014bb8014a7b834c1ccbe1530176e17fc32c11c9e46210a13cc75a27415279ee747a2664be5d28cfc89c6268fb5b30a394554e7010a51c1f99029b0c1e0ee18d7ef516697abf602952af5a42e1fbc1288e2bd2066df6d80cf57c624d91fbc0e7b6f4d1b4908cc57e1af8d08d0a86bc31a2d46a247716b9321f8f64844c9ea92595cb98c55373e706c2f7d6735837959d854fde2f01a4d0e475013c412df3db0a45d92bd205533cf406764713bdec7e2d5829b043fd8e63168b4e3c5c3acfee28ce87b57cb2f9ea2e55bf22d4ec6a7d53a66ee48ffb8cbd9bbe4b57f2846bb9c12791073070c791d7b14abf1190bebb21ab9a58ded764199f1277d06dc132246334394b6813373dd0f663392fdd01cbb505a63297a4770e832e250ec2195a0f16b4d3722708819547c91a5131077311935d6a9d55ad180c80c5c79186a1c72d5fa8b5674a549eb8364307943f63deac3ddec88bd2de56c19a23b29b501435765a5968db5c54f553a322ab9d9a8d402038312710231aa9cb16510f225eb8f9ef83172c5e6672ecdd02214c12830a1aa6a080cdd0395b2ac5c1b2c9288df93e6d570c54c59d10fa120f26836e4d165b1f8dfcf8147d655fcd5dd7e831b358dad5ba5b076675d4f9d2d14166155e5ac8ac04ae3778f030af7f295ac41b1cb5c48542a30df9175a217baacf9bf78fc8d6b78fa60302b505b72653aaf86ad9e0f733ac4079267a34a44b5c9585be6b6853054629d265e8aaa0dea8005aae44d0aaae0aef9b278aa6cd5c6f8252a3fdab686d051b3da356881a3fcbbb69d3e909db0e309f07b3bbddae17269fc2b702df29c6d28db2bb688c5c3cf32beacb6943d8b6b94e0d636aafa9a1443ed7fc57e92fe4a40928755b9a1fd1cea55e12ecd0c5dc1166257b4ff375fed7f3b766c0facb4f550c48841e9207543c478aa6e4b563a274c735c7f3785717b378ea5b0cfc0708c9955bf197e1ecaa5be11683707d8c1fba20a7f58ccb5ed7ee110abdb2037c287b9dc57e7000fb5966cf56183090e771c435714133ee40bb69bb66465829980cc1e28bb29227314b4e47d7c107b44468497afa0f9c096fc0fb34a376b44c9d9ad5eced377f183173ec825e2c3838b0f4c06849b21bf99e523cffe0c52b4ea4d19ff10e2f606954926288d078388a90a8ae87f5599c30d825c8a88da5b1f86af50f6ba9ba564131b5445506558ebaca2d3cb9918a490c1a8872a06cb5bf9b67c91bd3fe8c85966aba0f4f7590225e0daf50d2ceb00c7150a9e1daed2cc4f73890e19c64786acb0116029b6aa0d6eb93291ab8a1172c4f08cae6549b69224f875c343da349377a5fb613eef753e3d740ec0c480fb1b2ab8aa49415f8a6262374133ab965f87fdf687cbc22d4d45fddf97786fd56431db3de957bf9a8a883d8556a9038b9d9ea6ff987f7bbb6b41916f4b3c151150f183c49b8c0997ca98e71ee79d9a2a9d093b86ddc6d9fb78cbedc8a1499b0a4e291b04d1f8d32b097f316e706f5b471b3e36b7e23f1c2ceea6f72794908f35c977c826e8faf727bd28f39880fb2dd50bcc24bda706f31c1c5803c29b6add796e905d27b0793d54d241c2ff313ca1b29e777d8a821615268117f2a7cee107bf07e8c224840640eb37e0c843948fb1cebe23c7a64943a2640b93fff6d16c67b764ec6323be2f8f249d8e335b7e4a4a99061a87f675e04c7f2d09df0899554a6a91b4814151e930ea45cc48fac2f1abd1b1d5d250258a3072413b4f9eafb0478ea2c6c0c7e55b548aa5bdfe5381b5874ea1cca0518ffb03405ecfb4a1610dc0bce230f8c7c7c56b53164d86f5e5df231591b9eacab9cfa7fde6ed44645d4b1c241981f5ebcfbe2e19916c1ad6b35d9afe787dbe4e3b2e03832d802146c70e65ea1b1dbad4462373931af4305e31e61c74e0b2625a03b28c2b7eb27e00eab722d1a8a6a36ce2f0f3d6c8a13a01c392b862e4e51c1183484c06e5da6f4812ab9bb5ca590971db07d1955eb113e1faa750c4d53f0757d045bda75fb2af58a4314a07dde482dff58bedfd53f405c5530e79fd0dc6dd82fec73eaa08284e9c51c9e0c4767829cef6bea821148e1e2a0b679fd001aaf629ddde5d8c47dc08c0e3548b9f131b3730962dab7d2e655e21c490234388b2a8ed9f314ff716b315d084eecfa254edcef86763840e48e7fec141e3a033c453e2449bf163c666d35316dbfca4496628924d055633dd0222db3d62df04f03762d72343d2d14854dc63814d162f4f96a323ec5fe4317de2d13f1c996cf1b57a1b6262b8aea50d6feba2eea7f84ee7ed449d19207c93589859e2d40a62567a793c577f9bad79398a5a4cb9c5f2b6cfd80bed7ebdefad29de4bd693f655a6c3f7e1c022f6caa6a01f5782fe09df224fa5856c4b369fae2d8207b3bc0758cde93328f475a75eed27be4f99a32829eb11d9772513126c9b30002adf20b2c084e32d380f90046c70663d10f01b0cd35c28aef020988fa0824867c01050dcc965f78ed11919457f0ab1f7a48a1e4f6d4d71da7d79d388b97f09818973d92301526c90acf8bd857901aec311de87356d38a0b06bd5e34f24df822f9f72f0fdbec635be5df6729dfd4d1084f98a02f266dd1a2d3568c1fd8cd471abdfa287083f46a3af223eaabcf57b3811e94d90057c06b30865c220f6b3f297d80795d781b4102ae79b9379625afc235c9d03e29cb596e226f5f0e6e760b349b2446cae51a76306791ea7d5539e68f68f6edcd7b2c77065aaabfb06f3c44d164ccf5556ee8df96c97ee13ba0185da72ad00962c30da06e81fcba621be1001687c72b96b94a0afc5d7e7ba2c0a55055b530375cd9ef675ed5c6869d05653213797c74231e4d10af857fbfae15f210716db5619dfbe162f7d751ede2f460d65ffb6b1875feb4c69b11d0abf4c81be76e4dc79934625bf304e0cc87d33054c3cd2a13fc49d2b85f1006275e4df0afca378103d8ed5de2098ad0a988d238e9380480efd8416bbe0ff47cffd238441a109f765bf2b3a20b13d04bc6b5d52678b1cecbd2c246e692461ed8eeeb6880081a9dd6a8207ab6836f31dcdd2f46d469647b2d4b50e1806e325e11ee5834f4bd394eea7f219d2bfe3fd2516b4de107694b2eb0534b4092547274549a53753cad7030d59afd59757e000717bdc5c890d2d596b40e4dc28b691495089a671d5aa723636c02215b7559c0de43b75d99dcf077b7f5613efe6bb64b48e5b250d4a7e29fc3283621c4c7f50845d0757cbc0d614138fac218974b3ecf3ff564ad5f06c95efe18058cba007a0fa22f1873748515a77dddb075e75d4e84265dfcb0d4c8cee76ffff0a7d9a8beae406c7b8041c6ff18002b8fbf4f5affe35a9106761727408d126ae1af0da5707bd6d13b60cb403789eb48265af75913b6f9c572e20c84e2a0cd7c3c5733aa7e632e632ef7e39cd776f4d7c0e5cc1f6e3d3277655cc2d128262f96c039f5542b80ad0faa1bb54e04be0c2830830f8741cbb1926028b62e4be41c7f2fa31f2a003920b0a1efe8defe08aaf1670ff03951a8d4c38e514139cc3ad7c23d715f6725d2f2704e295f055ead4d89ab9b3a3b61346d239728ecf6acc318729accecd72b5bef605942120cc9fdf29ff59cbb7c314f19146ac7afc62c50884b909b76c9561348309a462b35a3ba634f113ba1c8c64376ba8aac9bc9245e00c9ba534f4d8308e20da5663a3f647e128da95273ea16bf30ce3f4f6dbd3f14256b82f96187b86933205e3c73a62fc5c179b9125fb6c31c0ca2fe72c780587e25e54e9d4acc35ee188516df864e843cf9c376e92862d1fa9caf5275fbe4d760f930abdd64cbdcf0164e727e98c4a056bf6eae0e3f625683e37404e5f85a999e6c35641b3fa2a5ba6675d2be6a5e9ebb8e1356a8340eb38763f6fa04b70707de4817a15014a14eaff843a5fc84d36e0bedccf05b1dbf1438a28ca72f2c3f517e41ad12b780ae87afb5403d7bb1591f13605a39ec106ccd292e4dad62f2d5d1cdf1187ef7105a13e5bd2bdc3f2ed7017074959efe3ecca0b5fcf2937248cce56bd7a546079adc479f41a4c9b1dffaf185191c363c2039be2080cd657a48df36e84024a81020aa1d57d66287ea7942afa2a9f5e4da4e63e82948064adb9e82583496610a0bf02c71120a2137a55de7af77aef85ad174d9dabdb5321fb10490f126da91267a9a7e32393f4f4ba7d2f9861fc0edbad3338b24fffcb59dea29ad4ea6a27be01285477fbab6b5bc75e3aa3372ab9df920febeec15ae62744e06f215219774156f88b517a5f75a6660f6bdab1fd047401ce21739ca98884720db074e0ff4d6ca81007c4a5f37522780ead255131a44efafd9118f1af3c36cf088948adca93ab8335fd103d75b0c9d391c713707b1b940ae110a9f648c05c74da5c1fb05510c0b7925777d7542d639575fd704ecb0fde915dbc7f843298da6c89be23cb4b2d98fdeebd0d4961f3e40af89557e99274bc314de97a145be13a21af802f0cf730e537d91da0763d1643f42a018b34da984ae2f9eb2ecfd5dda8c86b8cbde4a01cef8543a58b6dfc6af9da3bb4b93a406d1d09bc740955c52289e7ad6af96c8ce15b6d67960220c196078cce3b67cc3b98259ccd42d3354337eb9027072d803b24def51fdd20d53bfa2efc0a7eb2ba82da9f4e3c5039cfabef754110ae323965ff90e7315da93ae53a59b9d33bdbc88bc1ee00c2ac4a7ecd34d30299309269fd1abd2b6e7199812e6283a8bb304a51a6dc9dee3c345430a39be42049775198801a98e66a5fe43662a9c1f37587021bc189377b96795b481794cd0308a6e5b23087b9ab1553c56617d415b6eb43db81d8a98339e470db9d4f6cb8c340b64350fd03e3889517672698944b2521e6910320da1242088aec46d8718a124476ddf873d60a1c8f9c39f284d1dbb9564ac022c6df073226de29ad88e65d1016acd89c7b5d589a0287322e78895f9625e20e9987c375506fd856d6259ce3675f902be7c3c076b2c29a4813c73cca354c1ac1fced257429f5130901395a1ae5cfc308d575b2cc12dca96b3ddba078b3835ef304d92731a40ed0954e3c0f771284d40a274e977785c20fa69778c43d9545edd7c2f3ea1021d0a523cfee6f9b4e57574e3c479711193615774af4a39a820773faa181260c67c9dfa8e72b62eaaaa4236b42e6882a09d91d7f17db2e4c421f118e64b09504d10f57c3e26549255c57fab31a25a8d74634b9a0a5edea90e98a51d0db533d15d104ce6416dc1911466c64876f349cee82a89b98be6cf61f5189901e98478bbe44108f740c48ec69601efd5ba03ff42d0f3d8b40174204c3cbdd01d4b946e65256fe42d7f807829f209368f6d8296bef64960c0904306aa6c5619d765039f007c4413ec0ede0bc4aa7549d97841ab6cc2498ee380036d7b637a7a5951a5d9002f817923500068ab0934b7ebd0149e1454f133a1a5e2597098e7b496cde0695a8c6e8382f50de7e72f6b848ca14054d3990e07ade9161293e477fc4be45ad687c2b329026f240db4e86f29f94d854a483fc5cc577667d61e83f446a31970215153dd22ab736579af4fa19da0e944b305354ec43b0b85a37e07ab26c87687818fc41bdd1212230b26a44170e4329bd38aba1b20683579b4267e32cbaa16767a69519aa1750d99b85d5530b5aaed9b978910093191a0f06b62860a9a3fe3ecbdc93bfa8788021c36cf0ab5f0d5ce9973579c040695ffc4d3f010543298e531cf4dc797452285be187e1c415910f623dc85600b701c4c97958d1e47837b0bac3a850691e32189b66f9dadfe4a91002a68b20c37d480974211a37274db737240cc43a77afdc5be7bc1bd88ba57dd94793f990b99e36a21586be434590950456c9239be85a6b4358983d4cd653996871e3d23ac1cadc84f66f88fb0508829a45450f8277017d11b82b1da109ccfcb4c679d2841205d72b70c774440a5d438ea646c77f901168a23d7cb88b1131a68fc909177c75000734b12129e0f10c5f6cd54029001afc64b858ec6f01bf52408a3bc38f289e2992027663acdc4a9e0a6d4a7252450fae15ca30e3949f6f0d7b4775d5f83080a9f0429a07f9ea0cd3dc3168baa28f94b0374775d468f921d9497bc355ba9aeec831c8992edc1b8f744ad1d9147fbe6aa36cea747f1b306de2f5027708a58fb39facff5428eedcc6688eaefb88fac309050d80d4f05c4599c32e6743928512c190fe30142eb8f52fe6bd4a53154cce70d581bb8a6e6cfdf1b375ee9cf3aae081066ba80c878cbf45784581c5e35bc74afc8c6328fa815a073abbe5c7ed3bb4102e7b6d336e43ffad6279c9363ea22411267b6e70cc296c2e2f30ea41dea172d5dd66e7c5b06508d94ab9d1a1053e0794f6eaa84e86e50020db0c2af5ca0b99afc8c1975718c584211bc2d673221e6df8e178eae2de3ffafd08b34a90e0473885a848c93e014e3922a15f2e534546caea1820e0567387756b2c56f886f05c007219e3e80803414ae449b31b471f68eef2cf44a124fb7f57919093be1aa7398e9cea8357602d5b6a29084e7ff59911604dcb25366fe6459aeca1f05681143821e538a46022f08f4b9179985aeb1e1ff34895a84fdd7b0dd3ad60362c1a9891ec7f9fd1aed45dfce34c7769fc6c10e1c112ce5f6bb4c1075e350b24f23a4c913aeca6deb44ae606f6a635d64f8f63270b6619e0980d4e5a71b249026cd3f4b323822ec1c932286fe41f85098d3da38901073f6eaf36d687b0d7dc3536ff1065fc1957e561f9f1f129bbc8c0d9ccefd9e60f10bfb3a6bade0114246bf1585e8bb0b82c3129ba25bfbcda5644b8e8a132abc40d089e78e11945c073a60fe0112f9fc9207db6ee9d783db0a13ffcc6870d4be16b6a44ef1108d327af9e9f58b7de52aef3de7991e58abd2cf9bb20687479236bbeecdffc55fdb946e51aeefced637796fe3232fc8d9ec8219d4099fec59c6990ee67bf0afcd72d8c9852e8803a040dbe5a7901ee018508f65f31a44040bc38b4e8b29c733df05f345dda80073c2511090a7367f350cfcbe00fe2ad6664fdf73945760735172006fd97982bb6946ad166cd1becdca1c81ab85c6d74473c62edb0107c0087cfb90b6bad80e8d899efa9ff34b5f2693460d7e3b448422048cfd81392246055b66cd0ad01cd52f0ae4971c96aa06be2fb4b86abfba272f5cd8b28b415b92fd4ac5d7cc058f86dcc8559c19e00ce84c31f2f40668ffe10c00a07cf9b8ef597d92fe973a178e0b20f5beba187161fee5fc1422c80143a661d6056942b9936e073806964e12db03c8a7249717aea41aa91d32317597bd66c6fcba47fe751c175e98462c4dd19f248285fb68908acca938a23094b4c46da4b18133cd7a52fac84bf1850774bee13d58aa66db53496ca13cac6adeb71996f51315cd7b9cbf3b58418dd6a115f1d4aac234d991304839e233a9a54fcf62fa5808708e15546be6855c98165e3e406e58bc58c96840383848a53fac22e373930e7026bea3b49c3402c2d20f2225566a75c5e6ee6c1444df2b0c5a77064f9da86c3e556d7d5ae4b5e1928e290afb26ad597c71383a21eb319c3c665eb300bf44926c6968a0fbd5b9e38a17ca64b2fcce97a91cecdefc932c8a7cb16d38af045f54fb413ed50da0b841d021de068d4a1bbe406cff359583bd7083716376ac3859529b7791ac6888462da58f029eafdbecfe71defd4ca58994457e1549a537d8b90179954bc856e0a6a62e5bf0d2acb8915c562556e6ea9881239ea3ee4638366a8a2c426ae93282f4a88410a5762afa4edca97a906cd6076ad1b4a00c7e8a2b9f8fe226de9c7c16543e206341cf3bb36a328cff410ff3375d6d90254a0d8ceb1e0e06bb6956cbb589173f02d838140a99652d6616f9cc5bea97adbb254eb06ddae39da599834f094aeecc678c0a5d4d313443655bb75b2ed12f65e5cb870f01fcfe09b872c7416afd25249775bcd9d8bb765a960e094a35f3e7604f999c486a7735c52d0fb1ba5ec429dd95d624e412314e06834b6a4618a2807298a1066744c3e19e6af322029d8b38d871af9ea43d7ff4fa95b8b6608027fadf771c40bbfabfa747cbb79c043d39bcb51df868135181ecfdb7ed3a3fe73a2888b903f2181c701fe9f96d25b41ff9cd09e429333b6081e8ff4f7f6e49a7872e8ebdddb5c5a23193e026cf0a2c455052641d45cbac4f06e7a80e1d56dd9358e26f8688047868fcfc5b112d9e6fa3b00a106c65ae6756288a84497aca954666cb22496e63f50162400c61d51de9aa4df26f060fb1cdd4dcf58050415623a393f5b46e95198455b7b92d939a40fc390f8a0b40527ef255b1e2ce83fa13a96322b6b6ac872772d9bfbfad41388b912e686aaaf05c82d6d48f9e43591ba1edce6641bbb941d80e31918edd50b617794c1e8206ca993c268203e79570760b4cf0ff27abef1aa77fc6c4207d260156f14d0bc597a69e509f6c5aa13a33aa3deba257f10ca57514b7f2e6dd2e3fe2afece6f7732c3022dc01976d8feb8441e30dab275f60b163d95611336692f72150258b0b417b68ac63a118e43c8a4f3bf1351e5ab7072174e86f7e2cdc2f2d15a04e1959e1cd79970fb45a00ec645f056c9109bf4e3c20fff51195a9236e26ba26ba17e0b14bd699492464fab8014a43c4ac9269a73858301faf64cd15ad40729fcd362490557f2baa9b328b43c39d0a344bf270f312cee6488fc1800c399a867fbd7f5d467da06876aabb5d68490b2dd24eaa4fb9e2823784206aba07f2151b24bce457ee2b4c262bae809aae50d2d345a24288e6ad4e29a96afd11abd76315a57a91e5ea1fb581eed0939fe3da9773b84b8d69dbdd46171c99978e01604f9042e78b7fdbe658f3fc4220294472536d5a04fc0e4c691caecb29326875790f863dc8cf6279778551d04283a9cafe5a2fb952082ed490eebd5facbcd609e9a562446086988fdb03a356d01f4ca4a91b4f56d54e4557f715c60680e593caa655d7a67fd5f59c19e8572b7acd732da6bbc61a7da118b139715b039bd5c38e08515bc452a0ae0855a99289afe574533dba6822d15029c879cdefc68f9b02f10e802846bf3108f6c9e59fec1edbb3a0147615a3fd1f12e035475bbb079d9ecc35969ea36e00e3b2a102880870284cf7f52a600f76eb07fa0d8e124bb92e24f63965a6fe691d05d765c5b0b4f6ce557ebfef425e664ebe63907a482da032625606c38e4de1e49478daaa150d3a2ca1ff3e0ed41c1f236a768143bfcbc1749bc8bf89183ec010f40c4922fbad503a6f933d407f8802be0463b712a19340a009cf0cb19e52f290d5fbc27459482c0b1bd93bd674ab37decce1c8a0a1dadf6c50a3047d41868042561ac330a6db7457503d0e0cbf4e5a80df274171463aade4205e9a60a724be85164959d7329398551d241c454e54f374ae477c74d209de13ab92f3357745231d169a4bb89092888a42ac154e460cd3d95723084fd37bf94d78ad642db1222bf4eba5c7e73ca1f48d71828af1ceb0973866ccf946f264c1664dffcc64e22132650256b4bf9575cf6f28d1a896a282a08e794d46c27c6ff9b6d81fc5c30b8c4d83e11f9d41e5a5db100d0dbf096160dd4ecb5e66c144c485f8daed62b6b3ded536815c7b0402f601332a4da63ecbb404a9ca143b4223ac6ee1547c4c40750815d9b526d9441d69defb65753bf53dd653b0685450961ecee6368ea0e22755799c90e5e6c0de4a7c67183bea2a1d9005b306526f2f3f25b1e004446c54a158cf4d226b051e48c7b507ba560af0ed3b52be6033cc5991de66ba4e239d5dc56ef082093a9baa6b3e4e7fbc1eda63696735b7bd73b4fbe43109309883840284e592f5bfb8fafbb00a5a31f6b0bbab74005476dc99b034812c14baeb5541678cc112ee68d88abd29037fdeca6d8417a0a692054cbd345a4327b8002cc863c6a5b6263f027224a6e8eac73ecbb0a4004adbd310c880468f985c5d9b862dd3d8297444a20fba92f945730452fa2d70625956d1d25aad8fd6843029f713fedb1a9f940ac143a18f00e7055c6dc322e005ca8be9853df882bf59a86101ca581d30800cc1ba701e45c6640eb7c00c03f59887440f33c9b5d23474c85e6c50c417b9450d178abf4c98a29523747094bb004fb4770fdd9d807ec441dfd928c70c5366028cd7341c14de85acbf1774f99184d493f4b98c7811b395fdb71b91eb9446fba9a45236a92ef3e0aead17237b13f106357e0ff160626f81771a2e9a1ee3033f1ec28e36ad36c45bf63767febe67f8296ce2c86b3eb922ece85d1d453f76dacba521bfee5bba5edd79cb4740845437a7cde41c100092b1527a4e6ac7f3890415c4d36c61c3ed82375e1e50a5530d60a2a64680d0094c9e67d5c831f72787007b0f24194844f67d5fbc0dcfb3512ae66a50c1aa7373e5435d863c56cee6938e2ba8e78ba9e9c236e7521aba8d171517e04b86864bd3f8c039fcdc83b34841196d24d783e58974eaf59cd9363f7fdb59e1c210894e926b439ed629352838ba592aa83d04e2c415537f04fb773c69e37ee4fca7dbd79306eb4e6cd168988e9ded91f9d35648e083507069cf4303c7f22800b35c779ca8deba8e0112ddfe2ddea2a6f8fec177ddab90ffa359a295e70134613cb8b6514e3fb44c7ee71bae0f0a1618c27a854bc9ad40eaf838130585d169dc1c3c25045b82f8d78681ac373f0e8af50d1d1545efaa78b0eb06eca17fa53a443b204fa8c009aa6cd0e506b8c6491053340487fe2fb55431488b8c1b3d25d4b664290df0ea62bdd9a5f7d0391ecc22115fe68f8f5c9de8cc03719472b3edbbe90fb241d365dbd9b335b299452c33f3b614c84bc5f93ff742cf0ceb50813c9dfe25af99f3f66f5f48c7c9e3cc21eea552f017658eb76a7038fb66d5c3e40a25c632dab0e93722d783ab90d9824f8359e0d6588dce7befe47f09be0ca6cd950e5e8ce1fa055f5f6427e1c5e190432f7d66d468179a6a0b409398faaf8d6a3d0ac9305613704dc4f690a87b772821905625844aede5d9d1bcc37440b67f3ec52889414915546e6f70d7d4c7ecaee7aa30cb4f36d36e2c18e88f77ab9cb0a44559455a1ad706a8d07691f131df5c6d53356ab79f8b62cf52ad5dd488f52e9f02e082d9b1df83d7ab519f96945053f5a35dae3b1f840ffdd15d9d60559de0f50c65d6ed1c2c96bbe2706c981517a1c50066a6fa784e88e443a0949736f0a595107e1d7d546e37eeee5028e0be67d2f7e9e5bae0a52b36e7157350dac07efd508ad03cb15794a6682698b4d45d517d86705bca5ee21da524143417bcb7426d07e00aa9621f6767d657e43281cb54841943658f6e9d055a307cd36c902c3f748d556891364d73c44b087aec4817471e1a0da6c8a07b67cb91d0bb7a3d3fe70c5f13141c4b1b81d081c870596f299aa3d7d13a7973fb85e62db280c09b0e9e84664fc764f4a23ffd060b709df16cf424900fb2ed5b3c6966c305d797ee0836e19c3b91bfcddc54ef37657e495746d148d545942363c751a2e52942ca71b3f424c4609b773e743b3627535c658ff716e90e59d952167a2a6cf3cf7118b152867165dfeb4cec7211e5ac430e15e404f3f8f1762feb1a2b38b750d2e5a134f1e1f88def2997df3b7e61789f429aadbfc400d1285905ce6e0f24e54120ba2ef68ed574ee4c345b531fa8d28d363023d7ccdeee554aeef28ae88a4be7724047e44955eef7a12bb8f9683223a4126be5df5fae7c94f4c86f9134cc36100e3335635127a1730363e0954e8f662f42bb8baf32e24db94d9abf773ed12edf5901470b5169ab545978dd2ef0fba69b3308075f14873fdece6a0649d7f9e5c918886f7abe689181687976fdfcdcde2311094e4df3477839fb33fb13b8822e9d90b7fa519464d2f7bab41c584064a62dd0444bccb10770c1cf926debb5852dfcb81b6e4e3a4ec9a3d6c1c347130c605147d90724cf2356ba5a90928274776fdeec623d081668e37f29d296e3d8c46fb792215d36c7ee78fca31e8e558a4b3425ac8a0e688fcc881823b5ae091973b6a729ef9fc2c71e3e52e66185f549ba5dbd05104ccb6a76f4ce6227bdf74ce69081971d152bead3e323589374a3f390b2c7a430fb8daaf1114367c6529f65f681ed9013687dba74e2f6a3cb5f8052d07be52697953be1af3822834bb48f87d4849020d45b5c835d73a13a0685736126b289789abcfe96b034e63fd76e1cb1eb8e90374243ec65d59858867991f796d2f0ff7a4a66115be5286bcab61e2e20e2e9eb97e45867883dc927496923ceca42906059f508367baaed8f11a638cc22519d70a3c01de822a8d248c61ba9839650e4ee9aa158659898caa8e98c7cd6e117792c7b3a99491c02af81c662b519c4b34dc8c1a08d9736aad09fa057d57949743fdc84e37af4bfc0499159bb04374f0214578c487ff7bd31667946456f06d4516900226fbc2ed40c81e977276c4411723a6e5fb6f86e27696015e3a9ddd3e517601d3298d42fbe496ee6b1f65e225c7526aa04b5d34f293f6976f9dd6cc182eba2bfc244c1fd87c4a8e8807354f441c5db44f5e154440109981fa9287de8fe9507bf0a4ff2373c4b3c561118de9940b0459df38fb23b25534185b62c5dfe9728eb88c361be132fd6319d03165603164025b577a798109c07bf621c5b68684920d6b50663ab51886e7e2f411a77f4aa852c50d959f6ac0110a1bc22a24d14fe3a1fb22a89a3a47c2498a9a75934dde66230787e764bd78a03c87d6d50d7765a1171b6de09a482795e8ccca1c7aabdfbe8b78aa02e5e461802e3c96d0f503fbcd3c275a9a3df149314f505b638e8bc70d627858d704577639d56a8318b8f76c956210f4363fab20441d4c30eb1e227543245f61c88b58a79993d217b0086716fa933d94c115b24fe173c4870b13788178a40f5be5d7e06df8d8b489ff6a7d60e3c51f6838320a8fa066b3c2fc81a7a79d80a7701d8ad808d6cd7915e7e37a420eef336608c21d297fd6aa549297037c18c2e2ca84d9d47fb56d81d14415fd9578b4ff3f3343471ee1b089d00f77dbb135119ab33db113721757d52229d007072899dbb9b54e4a8134d78f3484c6ae3c28a5d7ac52f5e601ca9d4d356912eca154e68d4c6cd3ce7e61c4e2463c92e3caa5b99e7da10b1bca5a26dcc2e1c555bb5ccd18522aaea54c72081ccc46858c301b8001158a5dc0bdfc264297b28943b5d17591805b9ac3811fa7e483fd4206928bf1cf061aa224460a1e04c935a0cdfac7830016b29f4f06e52f93be887612ade2264ac65ca17578a10d479d096ffbe41683b67b85ee0e761561da4c02dab24201747bd0737f83a424aa836662002e5c87773b33b638c1195e3eea6f40ef6ec957adb21e11774915ac42a08e18fd10d52f48a79290d23b4e6377f3778c642fe8afb122e65fbf7aa6eb9d1f333464fe10d3434efedca08d23d5a7dd9edfc566bde19bfed0feaa2c360e4bd901e1880077980b20c250f4ae0f18f7753e8b82a99ff7dcf3dfc00bdc5a1cf61e75959cd6fb87ed806d5346c949417f94977e9da7c7903fc0ae8dd2c0c59f6374e0819d69105ee49a389a6f100e18d5379b3dea9541871310a52bcb3d0efbc8f377fdba90e0423e45602afbbb93537f4ba0f97308f8cbf7e569b47b8b5bfa52514b174c239b6c242a4fb8867bf9b0f2bc9f2216a9f62b98c16cefc1cc7c241523510b782a70e7000e2fde50e40766f0eb3690e8fc9d1d2d08cfea05a1a9fe7ba6b65cbf08d051a2ee45ea48e08ce7afb44142fe9444744d35914be93b3c1066d449de97757c139e3d5143b4fcf93cf243827f64f078c2d9580b5147e6fcca3ce6c42326b4b7d7f357385424a89b99db8a171dba7eec84d1403bf3b458a59773e539d1b8dfa5c210ecef25fc55ff0ade74075d2ff38917ec33f5156fbc360fb6e95be942b3da8f734cc003b7c4a05232fbd74a6f569a93f9f4f3e198b5ce35435b77149f17fca1389f558c0f1de829c2d444c8696f66d0c70911abe4a74c8c1479fea3484eb76819be02ea2946247e4cb1d48ee59fc7fc791282256123ac1c018019d8a809b1750c784f4f5b51b77d48aa2857b5cacc2483c866b1e7f9da154648b70b02044805a8de1ceb183a00c000ab327bff03cade7f681ebcff3d1196b7931c1c2e3919ca3e9f50edb1320b7cccd3733af34090654f282f9a95d76c1d42f61bd1dce91dbadd9b6b2deb17317d3c17f9857134b431cd0f7813fd054ee35859d78e7fae4358795ba024f63d34d3f2d66daf77b72685130d677805c49d89f4decee43484d046b0addfaed97ce1c3b521f5a116e158dd577ba052c05863859523441b58e7fa0c08f388a21e17da297abadb7ed7a91b5e876a958274e99e95d01282077f5aa58bcfa4156d3d96e34fface7606967aa070b90f44932c039c49b955266b4b354e5c54598c9a219985a54b1e063c3107602800d2179af869b1a14be27b74c51e6ec2b18a4a920b9ddd8fa25aea71f34c7f165b53262e50da77c8196315a1e678b88a2161d1e33883882d6ee68265664c10d71cd0232e8121d9197c034dde34d572623cc710763ee47e0d48a7171d9a220d49f98684e7de6ce1c9ceafc99e1b38330df669963e25906d65e74d0b6cbb3610af672e32524eaf15b8448007a42f625098b7c3aced928cc85ed0adef8ee92f24e51decb897d91eed93f3f9d9e9b3af60aa590611f1b181e46a2ccd020569aa72113079f1d100ed6aa1ca880634f50dcdec4e51f3debf7efdc3f8a8758b9466ea1a8a92436c51e2899e4b28eb427e71029186301a0d4dddeea302a1a11bbefcc8f5e0ab836840459ca27fd433c46ac5b5e86336b55d94100653b408f910435f2dbb3a4eaf592ab40795fb61832ed11d69519f4e5ca4dd47b348de721039b4f542ce5611bba66287e080aa9ef9ba7d2efac06d79c9797476134fe35ac6fcec083322c45918732dc245779193d2858d60dfc40b2bcb075103ba76a6be1448b77ea9b1dba6dd8823e203e1ca24f02c11bd5033838fbfda7c9926324adbc87e77b45473117560171c8abfba97565807161d5c1e9281f607278ec8b04eaa7d9bd8f5caf6a3c091bb0783b6fc3c69cbfbd28473f639cefde19a3c60f760841b50ed9d22fbf20c3dc1852e4851332252750335d1d3f626ec8df6ac664eda09f87b779c5767d6b577b030d06f0509dc55e1534bc12edf95796d9be3c0e4ee046f5f2ffb01739339d4ccf32206f68b2f1b1a3d69d1620f550ab4518487661dc26d7222f6531f4748582034760148e5b42ca2e6990d4dda877565e431f1bf146baf6567b2ff8418f42a20c64a432c12690c9e78be0eba1fb71f61df4a0b63a164513f1bcfb2a8ed958060a1f6a006ac3894f106cfbd5f55c352f855e1b61b3b4d82e18475377c4c99d6b7c1626eacaa9584c590015e1796f1d8dfe479c154eaf8b2a6af59a9ee815f2c23811e227c4e7f5854742eee50a29a33a21fc98d31aabcbd27a788efa9549e62020c3c2f4e7edbd43dc3691ee81970535863874694ae1907a24d4a2586c253f600e4d0801f4b3d9fb60e0443d4af96a80c40c6f177a89548a709873ff80e4d3881a361b3e7233d48990de20a26dda5aec13f9497796a7ae2be060bfac565d8813f4490cd7bf3a0139d5023de4fb6133ffdf19fdc7a85facb208e6d41328e6f222a6862ea73f2e9207ade07b64b3394813340dd6e67110daf337ea0a33cc784595fa829120325e90e86ae6680c9e87ed205d4276c7249e8cbd2179d01d6d7afe40bf1b05effc096900e060d0bad9f2eba47eb9e37f2ee2460a2ccd0214e0d98754022c0ba925d88fe427bf5032e7876cd295f96734fc50ef328c4cf59ca9c36c25421e1db47f57d9337e91bd3bbed8542c2109f9df24bba2da5b52ab9b3b328933b3b2a297e9af4e516a1cd3f063bb4aba667d25c1608225476bf330937e2952ccd68e7d95902259fe05af00bbc26b8b4afe63471fd23c0af282aa670f948bfd817cb59d7168929e6f12df59596e5bc0a1e7bd80f69305953ec178aefc9f9a72a1466f0c29002b71fea97df95e026d5a75a8093851c63afa0a7b07eed73878c88c21fc51ebf0235f5992ddb0be175506a48fd50b27ea5545c0c75a4d70e949b67046f2fc48c90598a6f91118ee63f0f50ce4ae0bcd1fd420899d42dd88bc772fe3d7789c83ce8cb71f33d53b0a97daf3910a14b495ecfa6a5c287b5f8bd7a435d93c8d4c3de09342e6d09aeda136e4ebe80fae768af6fb12b19980313f227169171820e1340dec5865d3f03737a7c7f8ae9d5cf41ed7de1c82c5daa002cedc05940beaeb0548149afae1ca1fb0ce0d52485ba36a17758192455ab44a66d4309ac37900d5d2327d4e57ef3c615d5aedd5864aee865e68d3d584d4ff387f3291f1af422ce5c5a0ef7345f4d0db0afa716e25062a4c98f20176d6a077c4dec4473e9d9de28b25986acf44c869058607617f957391f92fe2814725c7a97aa9846ed4758279baeda4ef6def1eca5106fce7839906f3a59c6a27f3bce1bb7f89a0e577bbd116a5583589125791d996328d70a25eca46c3a3dfbfff1b6d2a514510f759fe1dea25b3ee74e1fdd512848a2c9c4f61cf3fd5c3198d3d41a83175ec877ac30eb84365522d0921e80e53126e5c1a030e87ff476bbb98f298e93af81cdb35d0dc355cf637b8eac3df6b2dff5daf4615ab07d30f4c0757698f42333dd183fc29b3271143fd43779164c3d72c993cc650b9254b769665dc429b74c40d6f8f92813f2ef71d603daac0bb572ea096ba35ff2d06d465ed6e863bd71604ac3640954fd90fda1b01eb5f64d1353ab37011d6d0237e86f341c1a3d485783939f1b5c0a7af79a6ecb6bcd170d301f3e4eef3da06bf8763f45639d5361eab9e63c1e52f3221c668d696e7808dd65450609c7af6fdcac346ff5b926f02ac3bfcfe3da69692afbd28b0b9b55e6a364994ea7f71cb89ab9cad11f4815e548cb13b80dba867052dc93ede4e079039271447749159acba5a4b899c25d2bbf3c5241649935350440ecda5ed6104ac1401d2eaf77a392808a60f3dc377703a17bffd04a92e7cc9f8d44470865ecfc37d0fb8bbec45b1a9e794022c21125c65c06ab8277535041df6db38a482145a62d3bfa8c83d31ecdb09c06ce2395d7ab8eb554bc71c27789374c7565c8ec1e84864f349c4d127380e4cadfa72e2db95c8484965650b895f43cfb3df6bf99c6401da4386c3d3625f2215c8e40ff185a8479fe3f38edd13f71b3f94085e11b9c22d5bc9268f3f6541ea2d46338470eb478b06c02008ba2428136a31fc876388938d6ce2d0e0c24c2e29d1f36795dd765fbf3f67d2e82f88a84d9ed41b45bcafb8c93dd2d8c1ebcf5d363e6b31fb4abe1473be30385854e07e8b085628c32fe1a258a326756bda7030275b49264a34847ba6622584325937f4c15fa4df981876b2711a6374cbd67e32ce9a9459fe777ada9d8548634a129a774d6cfc4a619fa5d739cc88c7af8b8113e1e7a4bdb6702482fd3a3143ba5d2bd733a1b39a02a7cd00629ce7ac14c967075353e172241882ffa843efa2ebd266e4bc05eedd557ea71eb6bad9c34500b406630a30ec7639e4b775ea8cbd73d372c8fcb5664faeba3700598477c5ca23ba8c1a4328b02d95457fc6245638974a3ac5d05aa1514818153e29ce59d20b20d2174f3a4b3cd5b9f572d2a45b328d1f3908f93f22286c1ed50538d29aa0f2883b2dfc16b366e43eee653b221fd722a1e69f0c0b8377dd4b6d26327378ca96f2dc1db8133b88203c255623fa60a1e1e95525b019af3e2ccb124402489513baef20b1e427d6401854fc6b0900e4757d466fb9b0587c43a124ff840ba71648617307d9f29e96cd9dbc6e133bc6a36532584cf50de722291485e72496923af06a5ff500c06d884a12920ed241d3cf758b39509d3ca43a5ffae1b79bbd63f1712eedf5bc199378f6fcce60d8e4b3fb465888a9f29aa72f52e6adad56bd66f9ec3500efc01c68fa0f5839ffc0d8d052dd26768b9884380d367ef56795020cb1f5410c949ba7ee416705db607778a3b776d2ab22ca7f3c1235fa6f472ba42548e05192eb07c78c42fd556fe5aa7f4afbd662077365bd29e6baec82c5e433feac2318e82024dbaef4a8f679a7b07320a063001a2af31e962f2b46a21555e15b2ef2824aaf327995ef9c23d3ddb4d438283b2529b0f1abaed631a3bc78d65e60cb25e7ac7b841041a12e2dcdcb161fc75671f128fe1a2bf4461d6bc59977e5cc7bf3016c13a706e2ff4c0d4ebafcf94ca1575cae8a8f5ccb97579f287d2e0048ea79655611ed9031449f5b43914fd71c467708df9a013255b557ea792b043199096971fa829c494aaaba4fe991d824fe02bb69edd383f64abcece7d9c95c6aa5b7ee7ed4ed1221f4f7864a968cefe5c93363e6ea8e80a00e23fa446a7a5161569c06effe9574c8cedf61b116c5d6c42b0e6c9e9a570826f312803b4bcb993bec590e80c311b09812cd638a11245b5b640bcf04c4bce34be06428c27fab0c70edda00db25075b042887bf35becf0519f882b8296aee1416046cc99d33ddc445d954ca685718a8911ee1661541148967b52a81b3447d91c35e0e8f55e2629e52c0209dac3dad578c33ed8e62d610c0ee06225b6bc9f0507ec55346859b4e227631d52d159bd6e1e97099990cb511928c42b055c7ff6e89c5f5ff981348b024313c49865c698dda42a345d4c6e90a5473935181991e58c269f5e3fa7f4f9d7b2b022e0d62d573f5be8ef92581be40828de3768238da7d751e821c3aff3b7a6e518d54d441fb3644dea84f1adda412e9334e2479339c83dd370ce29f5f7547c60bbe456538a32f622e42c9bebfd6d0193e4102722fd34e9e1baa315cc36da22c1f03314506abfa41c688c14112ca148d15bc68bf6f796e0a83814dcd1aedc86505ca0712ee068aca0bd56bf5e2c802480db87f92bcb5e3bfbedc6924c30559bd5b100c92400073fc71a6187e09e2ffb96d80388ab4253013037f54d744214f231fa913d1f0a420b588056cef5f10d074d0f6e9d774e87b0dea75a19fc07d7e5fbd87399d4bfc4d9243854a845421a94ae3084e863282f67944906178e07cb450dc6b05dcd891552b6c9d9b938c04368cdcbd9f0769adeebe100bec163b378161e01b9809609f781a5951dc1238a6170f3c14e909ca98f41a07f906f7203976e0967281520a89a685fce3c6e0ba07f1d9cf3f95e91b425b166b94aebfdb04aaf9a63fdf46663437a6a19f3089bd0365ea8aecaf2710bf9b8f4389369f97fa5b9d11429863ebb595c76bd7308fe4bd07cd6c3964e8e4244166b0b397280663459fe3ef6cb980302b8aaa4d435320f492a8534eba69c8ed9ca07cc384001f2b1a88e1c710bfbe5d020aaad4b6edcb6435232954097c289cfba02d9943310364a1df7b4141398547b7d8e65044953af459363954a9982548587713ba416615a76114a334e88000dd805446cfda15fb58ef598047bb922416ff3ecea5093361f311a3550585d5d7ca3f7751baf23d0395b035ac67ce79d15075ffb7054988fb977a11430dc0bf431078a9311fbf8d24d33e5ffa37d328936ca749238beb38c81d97f12d2a7d40166614adea282e6c01dcd800c47c0c5e09854c95b17be882b6aab85f67fb85d9178fccf1c37dddc5aaa865c678c1e1f2b9da621594dae28ddc14c09c9cc70d63cbaeaba3d4d3a3eaeac457cb5726a3eaec5b5271c69964927886b1856c63ecdd8ea0a36854c73ebc04796a327821a894094148193ef00efe7b635ba64d3ac5556c69a026cfd0566855adbc8ccf1c423d9a501569f592686fcd348c391638ebff7832a367f725ec030527a4c337cebbe374ba5f0dcc9f72550e6d0614f81c95daa1e4780625d54c860891ef1f90713d39e7fb5ba7227d1405e4cacede70ec0554be9cac1a273af69577fd673537b8a663aab3775e9cde8e3927a0bd948ce13bb9aa7633195ae60713e16b488fdf9827df1717abf170dfd3a570d601aeee356494246bdb81b3277db93a96512bf27530812f36cbd097653e54d3aef7b5f1e61ecb27539a24b9ac25c1364137a901dc39e11c7a5cac032ebf6aeabc942ec35cbc40c20ab02252710b242a2670595bebfb126682fabd3a6d55ec75f659ab6742d59a907197e6439261394a80ce3aacf8b7be07d8827ed7a317ce6ead9cae797afff338cd2187235232e2f794a52110ebe10c732d36076cbd2d9dbcf5c6ea57f8d58e93e281d8797b1299767ec2dbd0a57c0b797a03dd4815dc945ba1b87d2e06a52cf24f556755b57feca876922a394e4773775ede4dc3b6cded5af17de3e6edcd8631de8be7a94e040d8631d74701ea0d844ec0025b4a656232d90358a254f8f4e639a8c2d23ecd6bb496aefeb362e3f94655eea9dcd8ac1945e70075ba630afb05fc209b7def0aea111ccde4a53f5a5da49acd507a3579ec974f3030abcc28658501c55a5034326d186f03c342cb4c15418f0220ac6a82d49c6d43d0908c6302c8c45c4a8d1b3de1a4179f5d81ed41a44411405448a71f485bbcdc767eb99850edfb87ccdc8db524b12b54d36917befbde596524a995292011f08f6074608930bf82e135270ba292e2e2e959d063cc3c16b72e1c22c3825885e61eac22c1e6dda27a31b44b17ac370172ec4dd057de9f349e9950ba7104117af542bf5d6c59018428c70519f8f3be5d483783e2a1c4d997cff6960bb8a8b4feb9cb3f3494117f3f9cceac22c2cdbbd12975514ad2e4cc36d4e174ee12e9c72c1acc7ac997d07fa0cb3acefec75c0444b2e53857371d9d9c16507c50e2297cb8553b00bb3903d7ca82e2edddb11434117176c937fb9d47aa9b7baeb34b94cd48553488da76a7f2242414522194d1389b4966999d732295008186d1a19395b46a74723173ab0f4e8074b4daf95a22890a65194664195ad4657cff40c520c1bde33289a397bd649a34d151919d88ed2cad2a73da36d34cd4ccbcc70fe736a5a832c1d442a299ad5323d83d68b755bdfa5ecc02ccbc2ac76c9a44c7c23a2a13553cb602d73491dd30d8e9c96b1341ad1a5714c8f587c0573a051a4a5a3699a466566647a406f3899d8a749c6c90c91ca76a7d13de7ec594def5b1042d06881423fa95a9d54b1e4914a5512a7117d676244ce6b4e5374619ad3ee8bbf893b27c98876c49cd5692645f18d1824aebccaaec9297f94fb1147b8bbbbbbbbc79e534eaaea69fd9cd6ce68f98ccfdeba27c4a75aabb56fff75d5ac554eb5ba9c86355953359514216180526baa4ad6544d25fcd4444daab60f47299d1a0b408959f35444631412b98742c839dcc338dce346e81a694d3a9f85f07cdce39faea1ba4f463d924fb2a5388afc916943f1ddb38950dd5c12d25d35f693ea423f4d57a31f9a8db505cd4da4c1fea13f7ba07e7e37172152d1aaa293f2730f0b6116328452ca391c5fed6360bb8a9394ca49292532994b94857013fd39f9a7679aee7439347d9791fc34ddaee9045d7b3bced928ede712a79893a42eeaa2eadba7409662d3536bd6e9bed4bf36fa16f7504a29e7d052dd7a66a9c7ce0f41b8c7a2b8f9d4f68694304f8f173f3d3db384777278478fe6936c2d8e327f64a3e644a74a710fd6244a989ebbbbf5a81377cc197b441a79bc10d9128ffa548c1cfd5a5ff88ae72d5e8a9147e41175228f98cab207b1084763322beac41db1871a44ee447a45cb10e6718f3c5c469dc823eef40a8d452aa5d45a916834a2aa8d67424f817c631d43e2db1802dd6e64bdb27d7372b804222b8e3b68ecd11e79300bec65dc095d89a2a56ddfce822217ba2ffeb7bbbbbb9f62f4c244769c4869dc1177e6ac5e7e37078901c488a81377ccd8a3bb6ada9107b318d22b3d7a70cccfcccc3c3c3c2522ccf7c64d0e18d88e49dc8d9b5e911c9d11c8ac94c61db1c78c3c9845f59754be7f73718752eaebd38fdc75298fe511fde0ce9107a7e8b803fa153feaf448465bf1f03c8f953de35c15e33ce38cb2acc3b2c8d5efb09b3dc51555ddeca96c936fd55a6bdc99228f69aa9107244d3a333431240cd8909103e76622c1199a1812066cc8c8b6fa56e4c129aac5ae8aea20a80471600e24e95c00ea8097fc2ac657f04c8ca0671cc6893cbe8331f5928610f192ff1079441eae064e3ec87f4851462bf228d11f3ba48bc8daddfd32fd8c1c4529ad1726469dc823ee441e31383c81be084202e1a27603993c4da78fdad5c97ffa983ee64eccf4d153bb16680c47ad6aee0091ff9cbe1c7cc859e5dce995377968cc552b7f890e8b07b935ced6393df25a659d53b86a9d3d285927951425a5ac1554eb06b1efb8041cc4514a8ee24f6dfcf370f0d9a34e9e8b4b539841b8f97367f698406abd6a957402011284e39f3c9939e3db960bac43eaf505e1ea2b79c39802d7d5a7cc7367f6601640387f999307f4d5de6ef270f5d9c2f8a32f870ab275fae01475f6b836c6b68eb7b0538423702eab49fa5602ceba1ecf7c5ae5903979383aa70f6631afaf689745eef41139aec44b2415ccd4d44c1f960f8873e35bf012c97fa68f187ffaa83ee3b3460e7945e0ba3602273fb4b5ce36671e0ed3c7f421e97d995c0e993bd3c7e499e8f451a2824987ebe976d3f494446f4c13c5416f7c0593fa4541765858525246a37f5129c6a823e5c42492a8be6061e946dcf44e6da80d25511b498406e160eb6095b9faf4260889a78b3b2c2c2929a3d1bf28eaf48a9e799c3f25511b7ad32b4e8378bf52fdde2c2075e3205d6bcda954ad148733b591eed2dddddda5bbbbbbbb7477bfeeeeee4c6d64e5a9f406bda9cc5e73c4c8310287eba7247a832f0eae6fe74e39758aa357a8af4f6d280eae7e4771e84eadb5d65a6bfda8532bb5e114f5c6b75a603bdec1c5e71dbcd32b3d64ad3587ebfc27552b25d11bcca27e531cf4a5b9d21bceab4a6f38a73fe7a44eeba4934e3ae9a5d45a91e87f34a2fd4a2c2f9af67bad9093d4e606a7e0a775be125352e9eaeebed70523b98a999999ba44781ba6c9ccf4a6566a533fee70b5c6201f7538391aa5a4b0b048e9eed486e777b12439eaf999999999a9cd9c313cbff398394159c86297355133c663e6163959923f9cfc901cc2c9cf64114e3ea87530607b08271fbbaca9791aa3369c829a93445d9f3153c69c99357e017777779731c33cbee2456c92165952bad1f3509ba9c34520c6c2481d4e7ee51d1e4e7ee8765606e1648c792836cc82da806ec78293d237a326bdec194ba9b522d1689492c2c22229a93eb5a995de509bb6ac128617f93ccca2c2eee425738a0e86a9943c72e236030f9494599c5c1794cf735d9c62eaee58494e211bfe055362dc0047905974193899f39a3d99459c9effa457ae11d32a2d16506f1873de70c193eb2d7e6b8a30cc4509afeb29f95d73d6ed60f84966517db4fe718a49bea4cca2af2a39e314d716396bd3b86a8bdcb47519272509576d92ab1a1733aeda2037496621a56416cccc944a66f19262d011bc599c82b004034b53c711504a24920196f5b823288a42980a0c2144103d822eee0babab3efe7ca5a778d2c7fe7d7d3ffb3653f5be4cfd5d0a07ad4bb9b844ebbeb00ba788efc234c7d7c545d61eaa9f1f67f4ef481dc5eaa17af914ed1579df11f6be46911fa98feff1955caa1fea9dcc78036f38a96dcc5cafe91184d07aeeaa9790e4277a494d42ffa7ddced27be2e9979498bcf6283691f6f44db42fd1fec4a669cf2fd29ee43bebde08c45892ef60e2841cc97da1b7634e7b12aaba4ee3bed027797eb61640ef0bfcc8915c28230b94ccccb37d44d25fd298a1e13433d0694ce934ba14e34f496e67b54ba9ccf707b10c4aa557a6f7a7245a648eda9cf35f7cadde7e5bd4c425b9dd8b4496d217be82aff5cb2bbfcfb10cf7db9d70f2e5cb9f945a4b6570dd4fff69d3a1476e01c839a5d68a44cf3985468c31d2233c2f45c2e73ba18fcaf379155385caf4e19832a1cf9430aaa80e9fb26a60bbea954e056a287a05ce9fd0babe6eb4baef5bfc55d6c6dcdc3a686dffac1ea8ba5db5fdb2befa16b7acf6930da4e48be15f0f80f67643541c0279c99092af864f3e4308df7ab61400fab9c9b77f44f61604604b571ba43d7af4630ff48fc8de6e4784ae8c6f913d688bd9061b657e24411b5ed334f3f20cec7806e8ad9ff24e78bdc5b6eae967db6b14ea2d75ed83ee25df5a88dd97f8d75bf7b2ae0533e7ac923722f8c1541cbc2f9387b9c9ef28b7aee2e67c0a3eeeabcb360ed4a0a2bec56345558df20c0e81c564d4c03df77edc60064761cc18f6cf62ccab870fbfa2387987c0eabd1cacef543af82e21ac20843ad8edf83d972f21f66c2900db1e4704c570e34961120710ee04f77ed020098ef22a727e250039bf3f38e7b701cdf9f541a6dc961e49fbf0dd2fc7d5571cfc762a5c67fda390eba6f7c7b6a72ef675de1a5f151ffb6e3ed675a417de97f891abae0a4e01ef476e5e159cc2298afedce0c7ad39b67aa04f1f7c38c8678b077edd5767447cbfdfe25c3d1c18c67d159c62eb62c07f56bc4438072fae6cde15af785dd715ffa237f486da5c59466f64395a9641ee7a4afad06df18bbab2916f69edfaaa1ac9b2cb7acc21ced8fa2e9638bedf3b1cbf160a9249a985b291ebabef9e8e2612816ef7a39414aedfc5426da80db59970486da3c6699cc6679cd4259ff11aaf711ab7cca2f6711a4ec3693ce146936cf88cd7947cc66f947cc66dc4c8dfbdb6594789edd33e4ec369603d551071f4cd8d6852634232a9e10dc3a4c60447c98f498dc90d931b2624b7fcccd77aaa4488490d931a26354c6af49461a36b209c69193d434ede30ac9e61b50dccb264f48ca6c1245bb62e948b6f07e316c4b0655aa665ae9664a8105658e1d75aab4a4258e157af545454a8f08661bd14ebe958cbba3ee562b1acf59d0aa450850a152a62601cd560396787a58373700e4682737807e7b00ed6c1392ac6b8d3e1615c31128c0423c148cc9a496e315ad1b22c8b7a87692ec668c5b720059fce9679cada3acb79c328c27ecfb01df5306b3bc859d76d718bb2acfd96c6acaf2ad075594fc9f8d9bfb6b07b3b6876fb76436817c41864ad6bbd7f45d589de8e9b40c02a082b585555ad12c20a7ee5b5fde7f3f4f529aac2b0ea19077b2e61442eec763138ec79b3acdbe255c52e11ce61d503286b59f7420ae2af11a6b1ea296b64dd9ea7ea7df676fc9c34434adbb0d1353454ad33b556d083b207bd65cd79bbc9fa6bce199ad835af0c74b1b7d8d54368299c5651214828257452dba8719a3967697a4d97654e33b32c9b3219faece71c811766a7894962e70836b56b627fd9d73650fb605615a7ab5559d33674cbeeeedbdd253f2635fdaf6533bc8ca36f6e9890bc6b37ec870e2b5245e57bd5d5765fdfd85bec6aebca12215a359dd0332da367b40d1b35343d33b5d399a79405fa8eb2194856197594eb765685d5185a65f5dc317fce39fda7fff49ffe4f49398d83e3c6273549bd7243521c52beff8eded0fabf458003b2fe2480974fbd98f621b52213a3d036e77c92cc92ccd7b2f9203b416fff6700509488480cf0da7ff606f82fc03f01fe4ffe07f07fff6f27800b233f001700b7a3286e676dc9ed4422d13571bb27b923b71b69b74b49c96ec7c24dd0a5ef762c5cf7f39ab15ead12405724e01fc6e1121369225c1242b510cbe21fcbb2625bf1afb728f5b0728ebd2e4c4f6f376c7b8e525d981875ba1de750eed12aab2712989f4a0c182f657a3a534fdc2c554e13cb34c5ef54a64aaa50a1553206eed3dd3d068c4749fecf3949273feaf04e777f3192bd007c4751bcf75c0ae7d5cf7fe12bfedbdd44083472b3db597affb717c0bfb7e23e00febd150378937f6fc5c99ff8f75610e04dfc7b2b0af023a12fc0f61e0a0136fa271bfd016c77dbb6f7507e7b0f85de0e46be0be006e076140017c5edacc92db99de8c415ddee4d90dc6e3472bb94d0ed58a4bd1d0bedcbbfa7e4a8977ae13b531b6a336304a0eb0b527a46cf38a574e42d166adba246a197766fbe967d2803cdb617bb43681a7c8a5ba66552a4149cc69de43494d3982019790dfe7b13f4ef89ee43015d92fb50e0ed441ccd1ef4a11fd9b4ad7d3290a8b3179c13bc2f144cf4771a4ec369388d0ef5a4018770f3a5a42e21a56e82c3846442b2befa89d2dbf5d3ab44c8dc3af78aba5d8910c8d1a486490d38246ea16764cbb601f979cf7c57d5ebe7db0e86cab7d451e4bdd7f61aa58371ba3927bf83715a7b72da322d63048c51757c0254e1ba7ef1a9f7de8d0103f2bff7909d93f21fc75bf7749e549954a494f229f515452554a142850a8a218f1827ffc4397b4e261227ff38ff60f7b2f6763010b32a79735e1c42ee31c263601dab10a22ca47dc85e24de3040a0111028fb9e91551009e84948bea5b30cd40da1713c62b5af279e4927462477a211cd04e849b21fc942a1adb35a12f6c5320770605fec8f661f065484ddb2d736fb1816ba5d765b866b7aa54ed35fa0995ec1686c906e74e020dd98b0cb62d76555f4f548c232d7bd1e2f1af083042c4bb33eb05d8ac5418a0e292cd65b3a7a866555916b2de326184b8284be09c6e11fb6304c4e3985580c0b5910ff5c554f4f9d649d649d649db0118953aa18c64238fbd5dee97a2b9b2e2ba762927bae1cfb72e1b02f17f75cd38455d675bd65710f8c5ea9d3546196e412a7b0aacbaa2aaa8771a81ee4700f0ba128aa07b6d32c1c5acfff4c1425c4103da549314e0f0985dcc339d84c6747173319ac64996660711a93afdbe811b366756c87c24e654031f16596d269f8cc244b7fd9e834da87b634c11bc27392d39462b092595838ff276f037a65ead0b243af40661412851cf9a39854fc09792101209e55279efd86c43c14bd127b064dada05aa7a59a370c6a6dada0ef19a06aedc8d7111c18177d07e32051f592d04fedc44669f616123f960d7ab40c46e9fb4be007172f8290307a8552cb5eb567d09691622191d2323b344d8a0a8b0e2d3e28613bcdb28146ab6a06a780df327ae6a0b61c4e46d8329264a38e02437d11a1063e1c8535e7e05b614a505881fe7a0cbb268bbc1df613c36608b32095ef54b207bdb4a8ce72de308ab82eec5b1cdbbaa733725d1de430fb2916bb4634ed5b9a85b38fdd4e85b3a150a6616f47d855c12c40a0adb3324b07f6c5fab16a605fac8f1c67d603d12bb3d6eb07172f82b09f613fb74a05a7c09e2f8c5ec12e4b8f6aa5debf023045c47060868d190ec848e1141565d5ead6e78d9a6a9d522c1d58e654ecd02b7c597ac43c5f8b0fbd324d3fb09d66d54053f12a1a8a93d10dbd32fd701ddb80116208159c8253a6a993578587b8f2827dd8307bfbec9572ea980f54ebb4267e82ee0b7f26afef4cbc843e7b8959d388370c6beda4d90a02bdc8b73f32f22dfd1debe0405f41f6928ee25f432fb5e7196df20e72970c91d81fe9a8566ff6f329b9655b873d53b2aa8850b3aac6605fb08f5cc7a1f9d807d12b739aac0b2186a840af30b6813eb4617f6df5e77665b703f195d12b759adefa5eb9b8c6c60ccbeb5b7a7adeac4a4e930c8e65b8f723a708079f0e9c33407e24a283bc3ff40a5fd6a1830f0da82a4b87edbe9b0ce0b85563b03c6fe815f6ffd1498a8abf3f8c5e81f12fa257ac1c4e01bfaa60854fdd86f1c447f8d20285c3313135135620100804622d94f18e16b6201008041a79fff71523f705e876a2dbd9978ec28ee2d95374fae7f5847b31650fd7dbc736e61e9dea5f2f86af9c275c8c1f5170d1521fb1b7dbf562b0ef111cdd90421b859f4959633b94462090c77be8d8f11c3a76f408ba8e163512d7793d69cfe597c8be1300de290a8be2a707c0f61eca74df33d94aa6139a08c629fb1d8cc7d7ec477b5f2a8de4b519491e7e2489577425745c099ac2022b66e66a88ebf89012d741e94a780ed7e1395c09d719e2395c09d7711d9ec395709d21ae84e7508253c07fbe825b8cb8d9825296e1d4ddbdba8fdcdd15f083c8dd5d749fa3b815fd2885c5755c89911e214256b349233121ba1eca27c9de4496bd28936f227b92ec47b68cbe565db56653765fa6a9aa5356a7ac5ad1cb81bb77d177b6caaaeb9b6316fa5a5ddfa1cc561c73eb2435508734403dd0167ad016fa6cf32981b0ddf379478171201e081f06c207030288297b80c0424f631148c487b410f840f40a84d8d56157c2f78ed2d077d3f3e1e434dd2b61fcbd2bdf7df7d1fb6ef7a6009debef607cf67db12ea4b77b53e066fc894df7057bf817765fe2555decc33dfc2c1fae4a7b14e79c73cec74919e7b734644e5e0a68dcf4d3b7f493df51cbf146ad0501d087e683366bab36dba3f971ebb4794436a9183ffe9cfedae44639de626803bddcae9f5bfc67f170bd557d8b83b6cbda2a4baf0601c1c7c7c787f2a1288a629f0861f4a1a17c281f1a8aa22a0ac62290880f61213de29f1e5df6e9d17cecf9e54b9774b60475d667b732a493a27a6ae4eae51e8bf2e19e88e204426d34841028b8a971dd10daf4afea95bac5eaab879e86f8bdd62bb56a14eaad8df688fa67f1f0e06b71ab5f51a3b75624faf7793a160c3a510db08813e9213e427a04fb475e57de8c84d2fe92d7935c72e47aedfad0f61ea4e07d9920db9fdf4bdc17fbf0a985b4d25e02f6cf12d4c2fea9b9ecec25faa7a697e89f9a5e62899743f56ea9aa57bae766ffbcd45efc2efef91cf3d33feceb53ffb8672f4a39c69f5a3b718c7c7fa4477a247e8ff4488f247a38b826b7aa3bd13fbd44f60342c839dcc3385cfa81dcc33fdcc338fe0f07f75454e39f6745907b5e8b6a3d65a1d543556f68d3b6508b8b429b96c2615bf67603bdb6651fda40dc626e9d88ab1774a9a3d4f7bfb6d7628aaeeaf26ff1eb4f463deaa19a1a5253535353c3350c2b6bd5ecd4d4ec50dda82a83d3f01aa7916daf45dde8889b6d3d68a38d32df6ea246998f6d17b6690fda427f6d246fb7915168ab233a6f878295b6893eb4953cc966e247b613ff55f4a0ade4afcdc4dbed84f52d9d6ddca2e484c8c488abd616da68a3d41fd9448d525fdb48b63e22fb96b6b6ea49b6eb4736fbda867d6803fdb380e816194d5161d1a147fc20bb61353535348cb062506da18072980a0c2144103d72e9d3f4d2e3c3b7decbbf52b8af1d7c6f6d1188f977bb94b94520c6c25b3d7a5f5e35bd35f9c5d37d81d32bb9d4924bc9a5e4527229b93c1751facc755de2266394d025c6128c2e5c5e4417081f37dd8e3ed85565514f71756d91e2699a9e62f9d5169f8a13cbf993a580eaad8dfa6babbea3dc64f1307f920aa8ac26ea51c9a5e4527229b9945c2ab692b05c2ccbb25ec9e57271e1f2c2b2a6cb0b97154f3fedb7fda2189d6a5a9ebf6206dddd1d21c7408e7f7aaf7b41fa5ff77eb8fee7259871847edb2feaff962570fd2f6644c10776c43d26cc780197718f09336680c0231299307d03109da0107dd3ef6e3468810c41e8213384192d1a06329c108306992594a8d0a23b40828902dadd220d5cf4a2e09899f22844dda2ee9e7101169268b9c10c6cd040c84d0c8e68818308d2c0230a65f08114a2d0e271e0bbfb453df02f01a613aab0b722e549da99a844b6d266d0557777cfdbcd3b040bd73ded1194c002aebb27bd966346279aad5474e815fe94d98d051baefb69bfed0d70cd041b80800935180347718f09365801d79d3081290f2b64d0dd2c73d3a1081672c0754f8732c2115860010e4cc0c209e20e2c8440e2c05a6b9033b01718d4e033a4470ad30a3d3e281cf400a10747e8440b3d3540e8994125a1470345b09a1778f420c1564ea07c602924f4d8490838998924720552948285dcfb71051bd508b672efc71568b45c414635b1c3d369f12182a1b40625588c7b3f4a5f285dc1d2260e6cd5042ac35a3bf206d672ef472947b5b126b8f7a3e402ca0a251a8a06250d6cc156649027b0141764602d2af4e4981f56f8c135c575e55aeb2c67059be9cc22d8500d6612f604f77e588166a2b1947b3fac3063ba81d58ac824acd505992ad4185812eefda8c24e95821de1de8f2ae8402e612deefda8820da3d8dba1e0f87768408b0f3faa9002ae9b071d96b9f7830a3d388c7b3faa2083a3b8f7a30a2be0ba11c7360694835c731410712ffdfe225b8023ec77d6f64a8b565e77bfa89b3b07b3801de0810513786f534240bd93f7f689817bff03102cbee2e9b4acb8b1f48980824480208186f30bd39ec3c3c20acb1c73d4631bf6fd08020ef77e04410709dcfb11041e4e13a1804f41f8b8f758bc6b7bd4df9f001deb1c0339421b38c8bda3b76ed10ea39c74aa54f52f876bbe963e9106dbbd22f07b14413b51f7dde862f1d07506dd1447f1d17559e4df7022ba9c4d7080f9892f581845577839f853a0693282cc99859af88989bec076afc88e223a870eb3c4e761f1510af51b207542091ab44c480e471c2b19036945e52420930edc205526aae7ff8a8c5e758b7094fe2f524424c40651592ccdc2c222b244da8920bc48b204e370f871d34e54d5f65aa4bc1cf8df89b7a28887d21fe3adb0befa8e3fe0c3c3c1ba2c8dd2df0f095c7f8700ee35ca011e8b05bc14fdef45160f17c732055b84af4869146e1e8efb2b09582daabfaa0bc38816538cda2866a03afe8b9bc923020c666a5abc256841c69016140b410351d0e11b04610b312d28af22dc0c1002db9c0634201184796a24f123abb8bd20140105372de07671d0829a55dc9a868c10c4b4805b24418d1614355900e53a235a7086124f0bb8351274b47827ddcd6ca01e7c39bce7f71e47be24eefdc4bd1f3dc0e1f805f6fde8010738eefde801cd8f24bcc0693de22e406eaaa3778c9bc9e36270b5d6ab62d4b774a430592452115a16dc2acada7ab09e7e5b0bb06e12b8ea690f93eb5fac9f7fdd08cc589305583fdfba26d85f6f825d068c38eb3f06f72ccbbab783cfef943fab0718b7181c6422b80d9c031e0e0d7838f8c7877f62122f03461c8c51715c016fd3eaa798a2d7c487c7d1efe171f43e3ae533fc188393dbe3e275f118913908d43ba971fa3923e3d0da5fdd0e06b60cd1f6dbe80695263421429f1d73a8772242f1b5677aa69a50fae9b00ca14d13952dd3335a86a545071f7676a0d0322d038592a4f18aeae95ff74fdb7394fef894b536eb281d678b0f3d72d10e9fe2283e6d16156cbb5754b0fd0e69841e050ac5c9e806ca699c66b266a3b4e8c5fa54953eb343037ce81f74e0f18f3c52a0a1a1a1a1a19182fce1de3e4919219cb0be77fc1a63943e4d29216489de3f7e44e83ea8774289507cf5f323e4e353d5f620f7300e97b8278545e51d6514847b7e7a7e7a7e7a7e7a7e7a7e82c88e2e000264f2e3fa4d482624f697253f26352635fa076eedd323efe20de7dfdb4fc1a486498d29cc52bcc1888339de57502dd47cae749a8c04e73012292c3d822adbaf3889f02d27582a62243446827338c1be1ed1ca06a1de49c743387fea45104214416f7a34e90d841246185ff040da7187834f7245b78389ffbec2e4bb5697d56e06ab7bfdbbd53f08e1ddfa427a8353c0677e00b5e114f0720c73a047fe7e4ddcce925c9e90b5b7135dffa314162b0ad4e63ab58150420965147888a8a723504eab2254a24a8f9888c949c842a58a14084f6e687f4da48211c0146fd719420925942a4cb0fd113ac4a1de49f56a119288c919c1759c3aee47abfccafa256f07d3a516d1b6c3566d147ceb09967e57d95e01a302313131312d3cf02d9c06238061dcc8dfe246704fb0af47f3f1441f2afa807a279d8ce1fc5b67477c3d4c6a70dc98262452c98f498d098ec9e48609c99ad9cf122125424a86940831a9615283077ee3062ec3a486d3f4ca9c7a05f319bd52d5d82099d4f01c2637fc86df380ec7f19c5ed1d12b6c52c3a4a6e407083c30a96172030837f09d5ee9a21abc87ebf80e931a263554c90fd5b90ee7df43caeb3a26354a86940891315716785068d5e80691d53efb5a6746ca6a6a0dd53ab313a1fb225f1b790d84559fc948134996c1d0fb4ca86624d99b30f12d1dfa1a9a403774de94dc846e27ea4e908c88b237f143f2f329deb4ad03bd1cc9615f403c03c7be803e723c027a18bd322b906131f65d8e6ca0b756bb5da84e6fc5da90393738d8673885c540f64e2f370cbb9c4697aeada20f480e2b44af30ff7c1cbcae2b08b663c161d98186a5655ef0eab847ce0d8e695e971489442211db18ea9dbc084288cb8f49393189836f374d243f4d139b48ee8b7c5b7d8781de5ad48561d8d31b18cd318161f406c90b9bb8f82fd177140747f2d325a156253fcb6e177544dfc5e79fcc4d9050092339f9f3c751dc04c934a28532d04fd165e276543472bb1f8db0a7f6e753d766256807dc2307a04b6d264e8e5ec172747a65c7f420b6b79b2eb5e112a50c8483f44a25a90da7a07ce98d8d086f4375e9cb8da22a5f6a434915b576a0426d3805fbd02b7c298e1e3157cd0ac17622cb560e4427bdc2a24731bae187f3ae7110f911426de88d4a4995dac412cfb8fca7f3034b8a74e9d21b8784b31e3a1527c2420ffa5a410f047a209a5ab35a41a0a9e2a8540db9153d44340200001004f315000038100c054342e1701cc8b20c7814801178a2445c509b08255a12a52886103284186208080c0888ccd0240400057ad4d0dcdc665ce5934847c329a344603989d2bcbbf9a71e4a66415e1db20069a52c7ddca799a25677a4fc1d41ff73c207f3ead6ebec4ca4a3def930340519e7d0daeac0fa60f41510b6062b638d79f77164836e2163cc9a44401febcd8d2c2e0eb76368a935a73ef7cb28cd1dabc7f5c47891f9a4dffa3b731fb89cd0670b486ec82767d772a45a861a06fac5a71e78f854a4494a00fc44d3384ce176eb15fd1e809430ae6462d4c8d58f75596eaadb1b05ad46aa473cdbce9359c104ff1c445e913a6ad396c74ef2ad144068a1c849045139560aca46a9b1b9b0592db3052e5ffc4af794238f081dff8bb8cafd1e61a95ebe636ecdd9b9b6f6b93665aa559645dc59abedf1bdf6b9ca71d4610d49b4666aa6ab9c4106a7b05bfd1c876625eab04a836a1e6da1b0b7bcd4378ecce7d8b8e1397c0483aba8edee8e971792baafebaed62b43fd38bdd84d3f8e92555cca1ccb1993a1f7f0ff1cf9a511f192a777d16be7547afb945ec42e80cfb8c01a4d90823dc73e74b63c60aadf4a50b648ad1436c956bbf55825b0d0a6be6dabae539fdee3c3c091728ffdd0fc3d966dd5ce1891e564c47bc70113aee5530be7fd1cd0e61f25640cad588d54223806b8cbb25da5cc86617d96cb18c41ab6922bd5bf0369823e7eb464a5cc868c9806c0fc622e6fbd35226bcbf1e7d0bd111d6cd8a43a066a29d55eb37c257ed90b2187e90ce29dab3fbf715920fb4b7c3c8133eebfabf47ce5a24f82b0e85d94c115712f24491f0518501830ee048a1f0c70364e4ddaeb9a0703c70daf12a8b00a7cd09d4bb205a6ff64d14fde2c582c321d19b0cb546e8caf80b5c6a46ce6619dce9e99b42a64327c827ae9423b44172379da319e8c2780ecb230180287738246b0a6238800d898dd60601c8faeb1d414b9a01d5a57ba236fac0d5f166eea55acb18a8b9afde89688f662e724c318a2a9a6873dddf62250a2d34584808f303912ccf4bdb5f6e17e3ce7ed3c0b820010be4d4dbcda9f1f81c640993658b0a630a097dc7fbe4c96acb71d0901212a662a8216e40c0af5755598613977cdd0cba9b1ddc5ea759145046e2c0d9be85e3a7959aabbea6a05819c6240921d3baf469a525c4cddbb97548346d8d34beffe6ea924507b563886f07bcdbd7ccbf5e90e3af9bbf4ac118d2031ef0eda589b90a61559af306d83698d05dd6e78bf8202b63f2bf3e0671e6904a22c7733d6442da21744456202e2dff215fe45205cfcba834ca6faac04b979684ef9a368b8fb8409a63c0ebe83f98455b126bbf096c658927a32a0c3bd70ee4fc6b7ceadbe517739f2fe2fcb1af4cd6ef8cc2a70c84d3b972655af21e62133d928fd6ad2899728e23155942585c3420c3432efc8fc536158cf48e232e9c0b535f6c0b14bdf0fc21b3308913ae9bc42eeb1eed237c37a8d7989b572901959fd1abbf8699d854a20db5ae34d6f715db8636d22e3de49b5c06b0eefaf14d7fab6256208b68608a9519974bcee2f9c74afe71c1c0c4d1f732ef6baa8198aa3419618e15c65650a4b2e4f60f4a51d3c6d0c8f56c6d4b0e3ddaf2fd17e0b78747601891b5032ba23a479556701468fd60c221011525d7fb086c3d5716a44149506c76b1b9fc2b204b9ac00036efc51c94c6405abacc80a2baccd3aeb59cb2c6b169f0d4b0aa02adb9f903cd553e2fc0e57c502b81672df146c0a1b384f026cbb02d752e12ac09832296e08a441f8c609704e7553f16eb0337aae1ef2bd011bd08c3c1c90eb996d7ee0d60d948926865a44371ccbc191496a7fd2eb70d700474c9b03e93307468918d8999f3793b70e1cffae7890e313c1933e63f0428c1d70e8016603f802d02150c053110e50e9cceaae082799a308886b19a4a3f556d89c3f0aa3b8fe956256fed29532100926537c207d981b1705adde8f61fc59a7d016cb2cd25a731ffb886c9a449b42052682c5fa80311ca5f02b0acf369643ecf490f7f66b9886c6ecb10766b1696cbd3e0297790fac7377d8cd10cc5d3a8629434b043ba2f7088d6bc8ae01cfe07b9ae6589d82383b8d90643330076aac2a2556ec4008e5e483d6818f4f05d756b389f0541055b21b252ce947229cc6b9ae9c6b2cc6ccde33614340c14b4fd9a2893a7c67d4547f50114f55e955c8fbd9c55f391e376761ed5f2838da06438af15942441ba5992b16e760634f4b991c81a1518a30e8f9cc7df82b440097af425a7bf69c7c6442ae3814583cf42f6ae70d012f84e65bfbdae583b14bedb7e62086f3179c8a5a7ccf0c6266eca27d1381413aba8fbefa4544ccf8e47caa283e1f2a82d945c751054e74463316f682774944a10b125f819c238599d763eeb80e5b39c29db1932b7009c5211e48b3e49865d2e01dbd0563d00e7fcce44c738b112fb0cade66041bfed5ed73637368312ed0061fce4801f3ae21c7e4b90356f1a3983fc3d8ebfb2d49d12db3d4c2b3820d4844963a55e73c946be5f9cd757388fcfd06e6bc48894369e19f75f3fd3e350415b256b80541910fc47d297ddbf49aae0d32090553646bebd51c834fc31f51b231c8fe309dbbfcced6692f8df805704227e1eb52a370216420363a0381f4b4bc787669b1ff8e859eb5490ce3e96564bab24e8be1141549259955f94062a766ed26792abf8027954dc02ad534aa54f662ccf5dc429e5dadc8bf20c1e3492349dd3b657d88b3f23eabfbca617969e46f16b9315e07d4810b058caf52465ada27e70aa032f6fa08b8e6d196495a42acd2f95de1741a8cb75a1296cd59ae44a26073478f3fba54dc7345a969c56a32173c54609d5bcf06e422d4641d88b2471c43ec1bac2b34941e8e09d3a1396ba43acc4502eaa2bc5e062e7fbee5353507b37ef03883b216f2951ff56dd3e3d060a59000f2d676993aa6c2f4387cfec147a406062797602c34838ad549f18a950e36c129d5c3ead2c22e347593e17a016972dcde6576de4a57ac1f68f1d45b4f62e9266e3de47e29a2ffeb1b954be2674ea35b41965c8d4c97e4a6e308f12562711e2d0c686b75cedf808125076f97c67fb1477a943362b7e8f03cec026e49d3d92673051e74eb8a1c5b4d249f1594aa1a19747ddd0ece879ed4b90aa8406a11f42e229158e792c3eb5dfa09b5d734bcfaf3fefb65a31952fe22bb7b4cf06fee51afd7cc0d381367252067112a430ddbe604c35c2a128f5b456d8fa2f93ce4a868b30b0cdd9d69dde8ff25681498e06fcea321e4513c02f7bc17f1b2950b56a190fe704d976e447dfb6271b902174cdb39a3591e68eb67c1b3292a02eb5b1136e0015ecbbee8ce479445475b66f9bbd94fccfb701cdda6e559606e5aead97fe4a5a4e9f8e1d4ce8d9379701a03c59020bf4f8a65ec3d7dc321797848644c4ce1821ce346d6ffb2bc20f68cd6d6d695d93d08b4a5703f5c6029c818cd390e34461334b24e97047546d21a156bb0195a7d26acb82f85069b0d8dd723f227ec95adf8ae3cda34ab80b2fb18d21da340b486b8af6b74e532283550dddc790fa2034315090b524956f423be8684df6935b131add64265c67165e03c95746a698853695d9c6edff0f5845d154da23e9b99ad1684b792e7890887a7a189452e4884f58b1a816d3feb5dac79f3cc015330f4f5af9bab1dfbb41f7871ed79ebf48bdf84f61b2b12a21170ab1809fc035824de00f82b6a85800d082770d66336a5d1b63af8ba3185707fb99b26bb7bf85b2198bd10369f2cddffe207c23d8bd58fdf923ee6dd842c13ddb01504e99a021070d714fa40ce2b17caf9099df3a756f5daa81506877b286276d3d0a92cdcf03a1cf0d79e3d9a5d7f2a87821b9441a917302d34772fc7b3a66ab32e5b3ca901ab0967cec026966b8002d61082d02100ce13f28fd0ed30c1867ab03c1ab064c63e9860f30c083828d6f8fdfa90136b61086090faa0808d1626e30d139d9878bc49db84548940c61fd83ea5035608c2c0d5e8978670b603f1acbb24b560976a74e978dfb5236b339fbf80a8f4c44b6828cf58b8971496f54fa4325c3994c424412636c1e498ebcfa6bd7cc7f8539d1c1000c245babf88bc6c7ead4824a7f40f5c8f16d778140226bf76470430b8bd2227eebde904124a1dd2ffd9fb65f0be52360105e47388ba45627f30a4f13f1be69fb08bac06a80f88fd34c0bc369d39a4a327978fbbc70d6b61c66ca660e043b4a2ada1e61080a7c393b71dc98e5e8685e9c7e7ecaa55a25c9816cb8c7e5cc7d678d4a4f90d0566b0a14380598f45cf99a61e4f2b2b8401a7a35c5b4aaf2fa59690b6c2058b6f6dcda4e61a0963a282c8e101159d914e28b305b4f6cfaee1a44d6a3dc13da72eb75c82601d45dc1bc590bdb975afac3b5768b797adf4e61823a762d80d11a622ca02e610995889d523e803763e508b7a1ecc90cac12d220674ce14e11a1933f02b8502a082b958057d6ca7081fe8dc18d0f7f5fcc2e6c395d0308fc7e5126a57054fdc0ffa84e789b78df6d944ef76757da6d0539af7febfd936e252780f57023103e395c683ddd00826a7eeb9fc484416305bba2f9fb8f2d31f6b63cbe7cacee4414d5279b7b31199cbbc857f763e7df9e376012dee7734a31df072a13d548b3157b4f08a0af67a27402440219611ad3f72fb8ac5a2758d67e4448868f2fee72f7e878cafd440217bbb41b491090541e4cbadaba3c6afe47e4d4373d6fe113ac02954fbcd0607bdece92ac16dedb5bfe0f569c7735acf9be189c815b290a1c15fbebfdef56663d97a41703db203690c71c47fb59131bce984aafcf98eed6764959271e719fa7d4b6c764d1a515cea3b3edacac42201fd4bfd565191f7b1564824e21e1271d586ee587c7cf481212080cae4dbf96d5014e9c7bba74815e21895e5935f8983f5d47bb9871c171eed37b728d650daa0caf07760281187bc8353468471b9f290c08898056ba95b10a3d943773ba97600561e6727997a0e31a6e1f0e355e63620765a6da41bcf015e706812d68ad85ab8e511001c0869f0f9fe3601d72f0f16b1f2212a308db67b34d4d26bdd169fcc32252c1ba51803237cdbf09413de8283627c09980b929de4d09b2fce4bd4be0448a78f0a8739a9d42cc70b8447a0de18413d622d627435ec32c89511cf2df89f1fd46edddf5b68fddcc9c5d65958c9e6a49637d89604716a8336801ba6ca63a1dc8de6f8359dfa1c54148a5dd0669e6afe142f576941e4a73c30a7600c5a5dc7fd4ebccbea20edd19188d0341a9e412a259428dae01a0a43d7a9f1fce9369103abd79a462268d06d02e00d8ec634d56eeacaac8d823cf51c8a3c08149c181acd267ae89919384a52935e8a006497712af82b8c05565e4b5c8c352a5c0053c6d38e09b1158380c2dfead89fd321926de3830a73faa89402f6d03604c11e80527f03f9ff810ee30cb7846c692b1c4490b576da9a74720417e7b1670935dbfdfe2b8bfbd0f50210220e063fe07802ae7ce0fe739a59945c678ce5fa51693816353ce7997f00e2d195bec7635f9dbe64accba5489e8deadd64cd5b31a0d8c47e4808d5889a751ec9f079182b2264623fc63034e8ec63e3c48dbd8c2d207324c3e2a9f6de0e52174fbe19f92ee212e722bf6c61cb5d0c383838d13a7fd33aa0f781a6f924ad39e160cc0e8ce0becb24c007ff97cd3d3350afef3d9606840163b4600e0649fde20bc285460cf1c8dfc8de9574520265c22e68d4cbecfbe35dc13d9d02b3a1197ee33bb5361ff411c0e6ce7b109a380b66f8351f3784828b293d3db4a2c344002537203600ac0538ccf67a12361af5b30cc35880f01d541b55281d0d33258ca88222bce227987be3bc41613cf342114d9a28f108e20101f379bf024cbd995a788604aba3a99c0a4b930823f5fa1d9dd52765744e70abe9843a89d9de6b13b1daf53ffcc4d5b4427ddfac6ca20b92874ac5a7bc204a9efb0aeb9b06248aed35a6096d75e01313a2039c1f14d7e0a3d47b129d2028386261f19bc5fee62ff5ef7d9cab2961edf74918a0970d3843c508a8e0ca83c820b43ccdb183e9b439f01904788f60007d0ab2e1e8b5e6af266c06f3df1176c50c0c9b39dd94cc4a6b41a0db9dac41bb0010bbdf1fa431b9a69f8b553042e3ac125798fd917b9578081078a2edf222d3efd015884189238ee16116567fb4b4270b503edc3477842eccd073c405e4af65798cd9a4ec2ff9e57480fa4d7291fbc1cc3233dca78c70109e307cc7f996684ef6b7b1f29b0dfa8da47419804af0d920c0eb6088ce8e51c94469060cdd261e7161aa8dc6ac59ba4223fde428d476b1055eb20c5e664490eab3cb0105ba381d59468b6763570e96d1047584965486b00f860a81bd19fd4eb147e54c563bfbc22554041a8b47fd508026f3375d7f5ab3c9909a61efe625e2777f52968bc025f84130f0321932d00083cfc936280c17ed10d9aa52aff0bd0f2a03d8cb22177e0c9b405664daf44a664d096d5b02cfeefe1611d57958168fdd98194358ce603ec3f46c4983f9b0bcbc09300e56ad6c2b8e8082e5dcb291763cd1b682167b7991365fa3e64175b6ba5ad074511cd269263b5b4c626047d9440ddc531b6ea9e14e6eefbae1525dc9b19084603ec505bec02e6ca89f85d9e26a9be8679bcf06c46a96addeb0dfbc7dbfc7b1de5c560cbad390580c4ca0b48c37ffc3e1cdbe5670ee2d222937e7f08635c752bb66b8a62c3674cd67d895ad9f58f8d0cf9637cd859990aa0db0847a5624692b0e58380b2064e237d78a3c4b2ed1d99aedd60c4b889f0c4f062d50a83570193fefff488bc2d9eac6168eec126503cdcab15b5fc10f0f3949fad7e9e6890fd9baaa9560d32af98928436cf5aa83a7d5293301b63cb3bfa123e3e51d73b559f239f0592db822b367c9f460b074b60c06bf72e75a56b457717a5fef9c5e60d3c5e1f6378a08478581fac935c2fe46a4339ea8769b7b92b09e2f5c21cd4990041105a6a7c9154e4d7652710d2513f0d7d7e4bc57e4b2a32271d6f97a53eb238cf4cdbd1777ba5702c96c44e0b6748a4ce0efb147926b7def8b8535515ea06a6816f069b3227e59325f187e9b429810c6f3302995c80b617799cb75eebb590c7bd143fdf3c2bc765b24b7d4cdce39b1d0aed11af5eb77bb13562fb3510faf6516d11869f9c94aecb5106312ef2239a81f92b52be19a0e299b4d3f37c0e492a78902de93753658d7fba1f49c15133d1439f2c24899786b8f7a2e4e2592eb6b4625028039e460d2befc10e8c2cca8da994e324d6b41a4ed9ec6f4a4d0dc123baf7aa242db756a00b1ace354cb1d5b9d639fe213ddaac89fb394f0c75466f44fd9b7b51a83565fa4ff1b2b66ec1ecdf54984751f59f56c48af5536adad8adb26b8a402819be33e67e10b11645e5db6deb65dd5e1fb9e745f9512c062ab584540aaec8bc8ea07f001625eacaae99855b5c52f558356a857169a2bc61b4204bb33562b926868e5f4f1b1d7f0ff83b883e4467236c5c7419ce76c29f65ac669735819bb55e006250515cec8c7b6073f106d6ed6783e5272516e5797d6790b217812b22ff3d8aa7a415ab551b7c1bf9e370c08cac3036636d5d82889ee16a01360120c866cc675ae22f3f1863cc0e9078584f32f0b782d4d1dc18c7ab650ef226e70f1136598ffa1c95936b128eab225bd3f5513ed6445a9b24f15aafa311dbc082daf840e4a942fe18da82ef58130b775717ea4304ac7a6ba050f917bece26b0c7135a20a58a8b72b9d16cc4343c8bfa14ed060bba14e5e80cea75ac2c7a17ac59d6f11a33d15f1730e92d351aefc37f29c438910d5dff2f563a6b22f15190c111dd01254563e0764551e968dd5cd42879c8efbf938663afbcdad2883cc84c9f4e5e05515815cdd1608fccc268ededcede888abca4ba9efa1661d7029d564e848f6dcff2a8103669be1f9d032d84fe976468fab8ebb75607c18e51efe7b9e583e0b0b85153951ea9935faca9de7e4d01f2c8b42216b2eddd40c637f033c0c0a35332ddbc918464b160a62e75ab5fbf2bd1bdac26cb88dfe5f13b852973989eea5cc7c5d39f7c68eaaa7dbfbcf76b5e1909d2df67e7d33268c5284ac57008c42a1c4330a57efc7baabf83bf9cd08805f5b9a00ecf436b50baa9bdedf76617cb7ba9be578f3851fd1d85575dc48b0bbdd52bbea0d30addba289de45f2f0f775f1b504a2d6d54300f3033787323377adcf5df0e00e6bf145de12fc3e4d9464f97af360e10bde920adf3a52172cd651a1176621369f269e1b667df069b0c21afec7f86adb2bdf456332ae883ce4f5c86c4b5827ba2b8a0da1d355ff540894cd2242b3229d6ab1826334a1f4196a8dff19a2f28d8890d6cc87f6f7046950d2064a64f53f1bbd4b6bdf153f10df900b42a74eb4de88b8994f80b5a159cbe0b7d57fcdbfcb71dce156a8f17e8a31f205d49fbc45280bc398cf0cdcb3d4c784841338a1e5ec855fc3cd36ff5fc5a7c84cd9f1d152ebcab9ec5906064b6cfecddeca07fd5b99140d6db236118a1707a5a099fb17f7b2eab3e98098246dff05a43a0ca186fde3b7d872a6cab4b115294b4f483e574beccc7116d1badc2f48bd904b6eb098cb90b6a2b114ba9cafa3c5f0c8540a74c41041d29523e593c85ebcb9e8289db3a80d12d8d8177e76613367967c101778a3171aeb06a490c21d307425cf898ab34d540369112da6278593920d4650fe9a6bc3eb7d01262655ada804e30912ae2a089cd8ab27443e08e7e8153eb4334df77e44a1e7cdac9de2ea35a596600cdf1d4351a4bb0a2f324886dbe69176b57afb09ea07dd987bf588c2503363018aabe686766078350e29b75ad9922ea2586c5b5559f3a3c56ad38d1b2728755e7e2af5b4c7257a64268922b67d619b56da7062d909e609aa7ed10ad95eb579c48a8fd96fa2434ff579887985780458288a1e45e8b9d86e5c66c93063ef84409595fe2c88b96d2e7e1c67b5b9b3ec42e0ad41af543b98060bc074203e59f9093db7ed6479b29af33c3772661cbd18834255d6936529aa1d0a508f088077b64fc91b5659567f08c5055716e5b02a64cd8aa50bf1819801988b3289b1c66f661a412619af1965f5819fac7d333f5f062577e08757370b18c7a5d97c3858eb97e568396310f75efef010aab318201066f4dca25140bc669904e13430d2e2436b26c7aa4d32723e6bd77d80549dd83603cb9ad1592465ad868cb1e085cd0fd72fd29457b0f0d8e0fc21c9127318992eef2ebb0e53758065e45d08ede3f2bbf1c792adea84297b5d31d1dbf52f7da5aed8931a21824d7474002c5950ac5594b3776e80459357b8182a8c07b72e3845aa4b589e297bd4708f246543dc249fb61a35287b68ed4de163026e52037b6399aff4a8e013267bbace595f9aa61090018ee6f33931219cfacbd00952b274d8818a2700e89a041df175c44ca39d1703701e00c3b3b62c4ef55a87110075e094e503ec34fd9ea602037fde710eada094c0fcc5f26e4e3f1381575fc65ae6935a24cd7d2a31d398d156500659edcac6fdfd80c90115e0a9d8b61f822b3bd9f6e6d8a963965b7591f6abdef0a8c76df12c8b62bfe389ea958f2f372edb74fcd32601b21ebf2531c8cd67af193356af88cc12550d467e345a347c4232f98e717a7829e3f46b455b7a4b0810c22df9c6064b54edd2da64f61247e04e0c3ee0a2970a3cab07cee6d71003983b193589322a2f59cb511138a5fc66189ae4de940dcd98cb02a311a55779cc835196bb2cf72bdecd5341aee903deb11edc39b10da313c6f183028c5cb38c5bd72d0ad7da1a50e9433c8304788cbd42bb5e7c2c74e83a38d22c2b2dbead9560559955810b0f5c05fe34ef846302b200119c9b4fb265195902dd4dce379658330660a6c609f37f55c1cc41f711f4c8b0fd5d126037717a577711bdd2467538b58da187900f4e4dd6489ab36637278b85b70275dd26861416581f3ec6badbaccd3a65e25a485b01a78f2e974bbf819bcdb53ccc002560a848ae0f1f86c22746854c7aed6bd1e2d5b967a338a935ff0ca948d0e26582f2f1f2b681fc7ec07f7024eec427e4a87f8d631a8654a35b5100615eeecba4e377ac6a3deef973acbb258b2d103203c2ed0a6025f60cd6d903f5cdc76c9d73cd8b88b4b671167e8ab2a4ac54257e5bd79ed09f473b1243b66fa22af167b369ee90c7b7750f02d70d8217a27129901509e245c4b24202e89342e768df44e4555144da1398e7bdcdc83e6d0c68b43ad5f9f4778e9ede43648c2a295bb72c606fbb1e0b192658c2a1b347eb6fb2c8c96c470a73732e6f842827cac1f6b95611c9737a14759a6f72662a60f0db52d623371910af45430baa1a6f18471a144fff9493c9b04d269601ac5ccb020a43d7cff174479641833b77572e851ddf5dce8ce8c4a0299561600af56dc3d5f8890175cabaa898195d5c1089a48488c24ecd25bbeed97adff9016723a9b94649b2730776acc0288b74efc343427dd39802a3b5718d26089b5c81d8499965815a172935b9254a26ac407db601dd7fca6a1f72451b22a916d4dc9f3e61ada3e8e7f3d77f8a1707eaf42e5390632de1b87a7e3a0d74f0622ada670d1ce7dfd6fe677dea856b4da3f6e6f4d962f4f27e8daf634ed03a058db1f42c6b08f405739df3e71b7f81fb2f377049778c0bde6ff866dc19aa0721df1fe0716688e788c3001362975e8a93f11eeb36092bfbe4d15d55c2de1e588911541164959f380640f37c6b1b8cc8f8183709fa20dade372e0f9449b0771ea50dbc81746139db6dcf58f8b9f7fd2fdcc9ce912eb38adc15dad46a0d431b348a274077e684675affce31f7436cec4515ac48973bb1987649cf588ce06d72e9fcfd629d61b79d7b15dcf8bf43b937a29e960fdf21d724d4a276b7e3373004362de07e65771f6d396cdfaeac5c420d58b1c9c555f406ce88f2e2be198b8dbff9f02fa1ce63ef35bc59dbcc1935bf8d8d8da51cc0d70930eca46fe700df4e4d918ee2a53c006a954649a8788979349bcb3d8a571e5217a4bbea8ad73c3ee7b2da381f1770f3efe3c7eec48b6e97a575b84355e5cee2e28d5e58896f475123e1ae543f23a5cb5eacd44489814a1b7e474317c0a92b5c60f2b9cf59719b16bb3534e44b537a19d9aa370033165f72ec2b8f9368165621a929e9c5077bc328431193c8d7e0a1533bf4ff191840957ae8b57f69725bbd140e6999464d2f53a2fc1542457952eee9f3af7c828b6663f1851c16cd813a6972a4cb83019e8596a3373351d8cca077a631c8a6e98a89dad9cd9a260135d842228e401633b33ca8f14d92105c3427704acc78921c151b062ec8bfa539bc221c8bcbecb480db10f15734e3a5399791fabb4f52a8dc7a0f0e3b001977f829757112f29c81fdccf5a72c2cb7b45fbe6b814059f49a84db8c8ab22d5735ae0ceb306736578143c70fe2640ac98123f82c064fb2e8e8d884449fa4b5d0c1ab2737d104bcc3a2e42a1f034e83f70a4142cd9ea68ce8d534928d100e85add1e9d518462c5350f3cacb000760054d5c432081491693693385973029ecef033c64f6724da360944a0c5e4c0fa12f1c5577829c8f9d47658d528fa5fd90c0b6a66967dd2b7b91447bc6e4a58944f722c0fc5632b0a6c1816424ad2b690b571d5fbb6ac0eb5e3f760dd1610060ee88b599863d35cd4175b57354a0b6ffb239d0354d5522e788a0c0dbeabbf2db911e7ca6417165cd706b1cc080030206f8b22e024948184fe76c73ef5a4242e3eb272633a5f92ddc6958d8358eab75fed46a8d5a2ae3094accd067b6cb27a898e8b8eac9f2cd40f281fabfb13b12ec699b56d05ad1b9237b6a8399a72f5c25ed6868b1e88c709d4c7f98551b0ede13fe5581dfea639a21bbc624c09c20938d90aed3833b2fbaaacbd31a34443540f544aba8c5f221448eab5a80daabb6b8ab2133445539959ffa4efd6cc74165d0da2f3baf9bb8ac8ba73e2119b55574c31b33213feaeea4cfff6c5f0085fb38805d54556cf9985789a8fd7ba2b6da0a9993b294a85f45c54b57c674d406399b944d32a91b393bddce86277e618508c977ff4411e889e69cb0ce4a9c708273bacf06ddb26e0b91a420ae2c4f85d03d72647c7a35a1214225aa2f00525a060c647917842bfd934d690aa3d20bea89cb2812981f64a6ee82dca8e44ff4e5da1c5934f7246f5e54f817edf9d1d0266e52f2586e3404f485949bcfa44abd1c01d22fc2cdc466046ab5c43a117b5a3791f343551c5b4bc72ff2717b22271423bf50a49a93b394a051447c4582ac6e11d4fd0e4ea263a34f640d2acb13e807c923bb8d0430b9e0a12fe2c4a0db60a867ee014e36ed85a7bb53aff00a9e82dbfe75105b2e9bf06a9e03afc655b46aa21624f09420f76836429c025de3d66a530522697f452c45cc35980330fe65d20abe00f002464ed934f815827d5a1a9d9d4596b9087f313550cd7d312fb4d0d7ea3a3ce678a3c11c8b0a0d914bab814abe60e6801ac6aa202fe9d4808546825d7c036de028c4320639b3512d32aa380d72040f9db5d4d1fe504b7e210a41b3127f6b0c69629c7a1f95b3225585933e2b10e20c70de841552e50ab58444ea4cca614ab1b3a5d4f52ef711d56b833ac71711f8daacf641b6b543d0e050368ec6a15ed3e6dca5c3e982d320b211afe7908bfcb04432231a253d1267bf8acc8a209a6808692a463ad01368ed6fd7fe943a8072ce5f220720da7a1d8953ed81b2e0e8563d467c80938bbf4481d57c64d8732adb2ea2ca6e8de7e046c529216d9bb0061fba61dd5bef0d2fe54e600b497b0d6a44405e9f261be2030024fc7be300d4c55d7ee9437f20ed15b0e15b9253603c186501045f1b3e9072c9493adae1b463c6a6a5df999fe0ebafe411a33dd065da87f1b9ce43172db520c6da86c6b73763d0133287a5e7d0a6f843bbf4e8e5d34a6904c394dbf4d6f9f281f06b163a17467fcbd97cd5c472a3c21fb11c6425e16f6b90344cc0e18ce242ca0a9f4ada1e53a2c1d28abba04956fddf2ea7d310c32cbc810bdd3cdda206443569fe1ea5dbd2a4e4ad60fee32eb3725549e2db679661e19772057cf6fb205fe6f2f15fa8a5c0c1ca0820b6bb872e8208ee474cc77d87640c6a6b7581c6c7c80c469ad1943b373ef01090d9c29453fb1f48108cd13a039f6170da79f229290f1745a91c51dc799b1255b73265ca1bc373b800c78afa5ff2412552f19dbc23930f5d432e2eefbb19758e1d608e8d321447d504f2d0c4ab1069c4593b91d5c1371f6cb7c09916adda1ebc41b81e795424958ea7253a8fc1d110d0c107c8700506ba6e5c61792738bb66814d7f1174df9f65fc9e8884ad8d7f069f351c23c0ba3d0895518966cdc81980c2841efaaee62db7eaa12f42cb6740bfb1ca6303e1acd1ce1871b55ac99fddd019b51b3d027ed9e370c2514fd0900a959ba28a0a95e0071d75b0139b6da5299af1874f875be6e3116c69a44c93150205a61436c25c06040e62cb2f9134bb84116b3baea03d6eea4868b456e5868786467d86be2dfeeb7e4bcaea89e963224e3129cfa9ec7172e490a3094a09b367e63fac7e6afec6b937e0a1cf95d5c419f68ee7f18115700718d4fd7d6f986e35a1bfe50eebfc56c743ef84f1111c968f87e6119032d2f120372b5e4a8ca09b1438638c00ad74b17d6c209a9136b2c8dbac9bc0ecc41dc4a8c6426d8447752f91e689b00246b9facf37773bad0b94d846662398dc895fe71b5570fb63b30bf3ed10bde29b6c1d819dadf09624785e2372b5225c828d81d314794e57099856cc834f97d5dc6247c1dc221b49e035cd532fdbab5c382181ae48bfb7c8ae0b06629a7d885bfa4f12883c67b00b2933593a12d61b93fc0dfe5171df98b42f0eee5173bab00f03799e0991ecbdc434e93bc25348b9a2ad29f962613c9db3cd7e301afc029e91932ce67abc527957103d43f9213be21a953a7d74d8c617349c485a9a12b787103ab0f19bc00a6095e73da4c88dc96e6c7074988f106c18753ae80bb3a0ca340c7db148a89e135b15cf762c88a64a03d61c58c11b3d7033c2aa7f56bb557a3b4d40c955d1b3a84b9ad8a718ee9ed5bb6695ee9279db7d94879a1b074990f4a60b47004b5edb40fa055bd14584bcdfbfa2822c7312fce2fe108bbc3303ed18317d3094dc8f11d1f8609cbd12d0669c145763ebdacd6be922e4b675e3c37c8b7e21ac4e135970641173f1edccc886a6e75888a57b873656ce271dbbf17003d414dadaf437297cdcb34c5158e3d2bc5cf610e330c3cc3b17b9fe69e94fa55eb4fd6e2b42237ce116fe7cf0712b2c22dc643cb5e6c72c0e9de7ad7775b638ab0883ffeff4576c5dc582cc564dabf702617166f1c5afafc5378c6bf41b1b9a3005875ead2a6c0815375f96bc300854075be1c57f52f88a65c223efd16d42096f8161606939c46e4d383a706ddc0d34aefb56d36d77d2d2c516f3c619468636f364c2726d23054b614ec4cfe60479fb551921b2674032ac8a4e2f56dbc2139dda98c69fa8b15d4e48406f89409e56779ecdeea71536efeae772ced1596243471abafff51a28696a66edcc6b07491d911ce8628736aa484c557291f4725a9b39b6dc125a0ee77caaf761b328fee1f3ef2eb197434a516996a2d53ab072de30b53bd4cac540a6d5f935dd8ce3b44df04e25b2d1ea53e20e8be03cdbc911aa7468a50639841c7098cd66a6ae6d773e26e52d2a385f6870d03974e11b288f175dffea6b560622537f2d7ddf6a0a2ee72b10b084d892588adad812bed060183aff6cc1e8bb1aa2e45a69d6157c3159f4c668c59607dea43574c6044b5e4bea02ad9452308d5eb0e60278e834640171d26c058d05598b222d73a92b52c9e595d331b5dbcba5b34d5e559f298040b808a82aaf53060a5c104f7620a0de670ca47a009184ff59b71533979f3eb9edb1a382749e9742a3cf69c51642331cc0f4f7aec4e67c041013b5d4fd038b062aa39fcad8f2c742d02f08c064265cd52440c5406c488ac13b45c7671b26b0c5dfd6df6a33c80c9160e6875d85aff4d821a0a55d204f8f005ea9ab27ecf9e3691dfbeac65503e332b68f8ffd480b613b3680e785565da41eb65d20bef223ff5c15e6b8cb60ca658376172b9f326f3d325ee5a0435d78c886ba9f7e258c068bd3f1f43846a31af42a361fb68371549d70a0dbc3abcc849cd066aa7041b584dfdf789c659010c8edc0b15e1cc560c2cf0b10c7027102090ee68f5d23143f3fe245f323e7d70249e3f97f471a4f87708489ffa7b6906ab86d06102dac0885a1c5d9cab8048c06448fa0ecbcf07b4eebdba7af05dd5c570fbb486476d0d55f4b2209b6f6c9b05190155b0c5a3a8ead89e5c74a45cdebe971abda74bd60b1ca1e61f1f27ab47a1b1ccef4aeb9fc431a03efd642a0500548b7871389da4a277b71a677b775d2ac090e2d34dc3c2d2b3ca0088a6e98e8b8a101000fcf05f0ce93bd8210c1c87d9f6e9a6c4f8b9dceb988f9d518c19a5f50b5e717bc933db3c5cada9fcf5a99756ece9e6966a5f148ee2ad007304f6dcca11d7fd226fcddbb788e1f97e830054b78c88606d63301297119f3ae40c8794f1f4c102c59c57f3ed5962731ec1d31a25797baa813348ef278e8640f59f2b36a9a2a6869a97ac942d31a647ea9eeab15d778ff1c7f8bc911919bfd67791720ba8c7462167a2090d7aab3911833221d333d74c5971081005003d4909cf0fb403749c7ed01cb9a2bdef41ea7daefd6f6cc40c7c279f1138fb17f10e637121d7e0cabc883f68abaefd7150baf44270dfcb555b1c0fc63ab55ff1f9ad2f306abac7f420e79a6bfa390b8463cc8d90069012e940438fecf73d9dd85273b27b8ce6165315dd3da67f676d978272247ed015d269527a787fa6b118aebd6816326581abf0a56f245227c90984bc45dbb421a1dac412d4be9637d885ef839e216e2b1197fdcb9641e905ba5e68ce884b6774126f206c8d8d6c321219d1c8f1f9419642b9698921fa5dd345a5af69c73406d646a406563e435a27a5a4b8136e08781f384458de52725326588abdd9f34356bda9f17322d79eb93ea8d0d99f6d5d2c09fef5e71372c5e24ab973b0d1849416b198f6dbe171705cd4321a86cf4d39f0c505ec3e964219e0c2d6cb521b1959201667f2fb1b9696304cc66f8402a9e6c414f32e45b01397f0d27b629e56f1d64473d12147e8fe29464cf9649116c58a6708d16a8b593eb2c079f145277c75639d5c5a73825ecad53d2ebae2119bf3bc918825b73833402a15ac283206a5d550243239d2cea79079a29d014f2a69534a499c82a6c97173556f86b68636d2f11318aeb5a9548b7703be5f340e490a17263dd41af071898e525911160c9fa19285cf78a75575cc1ab6880296ffae41279c7eab44d4d0c2c9f352b7abe459404434e5a834d0a353bd548cb6ecfc8583d97674bbba12662e95aed7c9533b9fbcdb81b5c5317242662f8328a4e4751a6d527e819a5149b80854f0094b06cf9db2b4dc042628f545349d039f66ef120e38c9a2ee32fd31c67d52f1171feaefdc328ebacc226fd9b0381e6fd7c4e14ddd55fe9d757b02f504108e20b51680906bc7318cf82bf0e0567006d559f16c561d8da727b7a116df7524e0918ed1ad6ad8b9e656c73720bcdf9d731ab4f111f8f89183b8051bd446eee9c453752ae8bcd67d9bec6deb7116ee28861a7723bfe51163f464700c713c13261e114d63f561c1d029b3bbb25b2f1cfceff56b849cfeef67e5207c059346ea9c905b81ccb16004f0422a33db91126291ce63f253d3680a9656cdd8403f6ebb20ba8c7a81ba48439e5e8de86fa1ec66b95112d25ee643983a3c0dbdded361f16a92d979a94abdbc3bcfa09357be6913397d0bd1ac621347591c0688feff504599bf577fe4da1a424d43fab8614abd78fda12e01585979462267d805bdd3ef89de532a56220bbc65792102458d1e2e617d4d164bcf7485ceacc52cf4e1e111cf8e89d66387f1efa038d9c3c0957a765481284c20df8984599dbffaa53259916706c69d7e19d3a097c59d129eef1256f8d79084edc6d3f2327dddb9bbe987c65c8f0ac3ad233961f0721a82a93f5a6d2e3529a871d47437c62d6aa52691584b82aea60756d73a1ffe0fa72053f1d24356d67344bffcd71cf699881129f2997de1fedfeeaf6fdfaff4b0c723cdd509bdc9d0d0b9c8e9f3da6a99de1151fc6434add3f52aa4a0a367403f832c819dd44ceca849475d1097f4bc98d1fc840fefb5593acaae2066c3dbc9e043799ad9026c3c527f3a9d2b2cdcd8ed99ad9d6d1df9a9502a240d27a618cbaabb9cc12c166c9f15b5f48d4698953aa66ab24747a4951656799e2e2557e3e91044b03ccd6506caf32db11ab1217ef6945dd18b4fe6799b4a21950b7cfbded3273df9ebbe7a49bdaceaf64931404ae9ecebf4961416f754b57cc1c1b6588272463bd4e41c2153e4a10dea4ed0d167b833de258b04a1cc89c17393c4a377cae10e9a498e0e3321b266085cdf4383f1d9566303e1686474d9971c770ece8be7fe98c25059bce65ae1521b01834cd35eb85e63d7686e277dbda68e6d8bbdc525912fb924b1bf3799b6e59211e27119620b3e9cea755617586bae96e53112a90fd3384f8499857cadb571279d0f8c8d48be514681b3e62adc01052e987100e4a1c2ca7ae607990339a9b5d4b705add4d1a6e513771cf7ffe19c7ec8032fc4a1ee7aeae4ec5762915ad209c5b6c92a5883e3de28f2eb796a9faba0ed36db2a1a7af9350cb7ff8208b1cddba63d1e77c782e7faf483bdbe825ff7c3771eff6c56dd29eb47f76764aa337ae3246506a4edc02fe8ee3343ddea362f03a71df7c8f6bf77959aa2581821f7a9dbcd0182f791ee2d4d54ac642d59ef5c4ddc926a8eebb8654265f42653eb77afe925c93e6450ddc787a6fc4cb7d2dde1d6d1c21e908cf8c30f5013a4a6bad82337ffcb6ac31b757536f8757eae2a9aad36604824179dffdb34d2893aeb74660a01c696bfc07a12b3fa9c74d1659df51effe6c20a7da676b882b644905d2cde32081aea339b86081f3ed2a655d483427cafbe0f4e5175861067eca625ef12eb3b87de80bde38e76b994f4fbec0ffeddef8a92788923b8ff507641c6c98b89c5ce182190a04c62e39b1f01fbf1e80f7bf2dc5895df62d2569272b0c15f4edb92c1bc0bc92e03378cdd163e67276d6d927968cc16f55c7afc55f304fe84136b5c55d1d961142778b69a066dbb30767639239ac3c3c22083c2277418994167d3b2ec2ab40d462fe5dad65a720022f41a97f063f87ac9ab552de230bb9e3742da6ece5f76554d62aeff70ab4589b34805c2b449ec2ab0c284d9a047d0119bf79a09638294759299e26d9822c43afacc95f2a55018cf9fb44970f7cb763e59f2e327cbad92a5a18965220dbe3a93f64059fae7033775efee3dc85b190e1aef527ad44533c09ead4ff8d6d88f4800697888ab342c462e9c9bdd48ac90fafbaa8c122c93422445227e2f1b8b5992977632653fb2c88f119cc377477703b6503e2e26fc2826e37081c9e4334fec71b891e0d405a688ad9f692c9a2abeef9bedb719f14c6a20485b39c403aba1b777a913220bf189ee1d2a2a476be5e83510354b55a61f265313aaa2ccd57863ab6a1f817b034ccf6f763ebbe5f18a2b246af3203737813dff57ab39841551704f79f723c660694261bf3f0626e8687385abd7a5fa7bcfab0866aeddac0fceaa5b02e0f535864e4f674b3b1c27e781b5ebd2cefd3a319137b6d60502483f03596aa9d62dbcc3134c89b303c4a8eea258c0dabb0eabb217670b9c41b62fd9a4f20740a9e941e4ca02d34cd3a39b94bdd944f8d36b864f0c9be211aa0f75ca33cb416f9266d461cf74a58b3151d916b97d499a280127aa7b6528930567e5b2facb3dad62dd0bf7a1d709465a7ad68de43d9ea053d2d3e114ddcb6aeb2a4f5388c4f8471f79745598a72b180261dea9f3267ccb176835cd88027a1c3badb8996751ed406c7e55913629148a60f049166a0862e9058bdf0acc26b23a794529c85ae89e1a5370b6f4fa91304101dd60a8e375eafcedc7fcaf354ea48c9973533ee6df5a71e5fc3cda76df2f5484042b5ce9ff541d60048b63dd39395b024d830963dc90af3d0e6b8dcfe91c5c0b60032a67ef1e94d642fc4d4db964c203f7f7eb0087746d3fabaa8b8214ded95806883ebfa7aeb52a508586fa397a99fbc344e6842f10c1690958bd7cffbafa72bb5959ffa112cc49c566b1b05af542e4d6d3c57bd0dcf9e1aa8804f97779052288083f65a602b1044cd6741231470c1dfb02ca796d3a2c8e986dfbbe0f8359ee23592bb466387523dd3455eaacd8f410dc03acc3ae3115384029ca5d36a09e31d8f5b108beb4011bee9e946ceae022c446b16637521c76b5b84b7bc1f78132be77c3390c352a2505daa40b8a45e47b1d6c9b6d9b2d30bcab79363878a2488e299d078f226fb299706f322cdd5ecb9eaa56bb2e2b169cb5556b39bd481242c26b0ec499a4efb5e45224d44a60367a7fee0299df8f124d4d42a4fb225c727e0b218b6a7bb3bef135cce82759ed52cb424355a90a4d560a625d0d4824fa956bfb42a406cd2959f769e0140bb3dd30e78a27d71b25deab51fdced056b7d3795f22ab57710dcd676ad022d24fedb91ad2c2e6a4b9c8c2ce41fe8ce0b34a020a6ca7c572da37bec4b19fcdb6696b3bc26df7e6b4eb80cf4fe82e0847b576c6e1b974cfc61351736f51091d2890fe2cf251fa1301d7a2f9c6f79ef26a29f26090dc75465daee065f4e24d8ac10421af58230b2eb14559f9488ed1e11a05a310b5f254f15384fed2708915bc7c4d5293ce60981bc82eb2456948d20d83690b2deb4b7560aee8ca37e8411a80f30181d155028c55b224028427fa7e36401e2f21ce2243f179b391ecbf418075fd62a8ecb1f1a98a0911d9d40b716af2fd7a4cd1a790813ed1c784c844026f03921c435c7a60ed1868024db1094c4f285022ddd31fb776093b5b0f95d9168ada7553aeb30a3152dbb6d8f18384c73d02fe9256b70985bfa32bba2514991ae1bdb4f0d46f075adc168b6684f049684651cfb587937df295b762e74e77bd18a77f8651f9e1f2aeb79d9ad91ca9cffc6ebeec6d851844fa53efa7a214be376d91f9cddafc8cb8c27f2ab450b418d5708a412a414da4ab61e6b7f93973d7d5d394e69ea8c3aaba1c16afa58e25318c1d575711eba4911c1eeb3bd40a82f6acd454b3656e53cfdbdcdfb8c90899d2d1d39946b15955db9e3b3b2f75d304952f8bc803cfd503c4558bf447c0594a7396210e2297b22ceb58613dd11c5abe287547616d87483373b83d61c181d050aded4ff3b5260fe6f4c2607b258f6f514946f1ba697fdb61429e16ea03065d3a64bf4e5b913812ed8ce1516b105461257bf1780e5d5adadd193451d4d41040c00fc2e2b6daa2e683c9319777c4773cbf2675d768ba1e981ca634202c4339f8492130089377cc0a6e3507a7bc1b74c36a28c3b9918208ebed6b9e018a59d428a15b74d390c7e7854195cbfa2ff910eba3d4f21c7b219479883a8db3bdc1cf8d00e999af5287a42f560108309bd4c0cda446594955f647fb85879fe3062d6ef7ec28346136b089d7a0a77c109c2ef34ffc66c8d1801046cee460dc27633fc88024c1c6ac0cd1235049a500d708422a58328741b489672f0990ffe5b4c34fd9cd2286a98e5c417e18c766cfed9769ff554f8a4a0b5084982b5116378a07cf82d4805f3d62462eb4e524928e213928f3148a760e6bf122187f293100d695cd37fda33b69b35425ddcabb33d8f73e3439e48034f3650e0be646c8d8303514fd106de64a6b2200ec0dc72e46dc0f399f48dc9120f0e2b2646fc0d1358013c3833cb4089b56c5d8de26048a1051a2133cfc7fb5b605e6a65ad6de149d9c3ca4ab904ceeeeb5dc1af28c004b50b50d3ba0bce4a300506ad1e3a7817547187b745d2055145066f0d6010f9c718f80740a18b1455795c53ea8aab56ab2e7701b4191dfa108e5cb3b6773d5e78414a9f496c9e3763346cba18dcc3339d68132f62d94eff44fb685225bf3d1de7537c3ca7a85ed16af60b1cbe38378a3e962b389d42dc36e6dbaef6eb046414d155bc4bcaef6a4d7423fe46d8e74072ffeffaaf7d6bb2c7fee6c443f283351026333a6853f6c5b99a08b5103b1f063ceff73d76ce1cfc9771d4b89dbf6597cb788efca09f427ea4c721f7dca0dd6b0961593e21b5d394558e4c4cb4f32ba004007ef3e868b38619ff240694b26d82765ac7de6a254c4c0ed9b53628376418d1e9f8506cb3f55f62a3c966f8df1d0001eba3b2c421712b467291ec7caf999cbdb313213a209b967a34ad2fdb65c67141b38337faf9eb65a97abf75d8d34987bc1c0f913c9c3394eb30771ed97c9eaa327b449d1d9d971b1e1e5dd41e27a78ee1704750569c13a11027bfb5ea8c4e0ead63a00c130d20f45a15c626ba8a2139d3ac9e85588fde3263c44e3d66c20547a89c04337a18d5d2421896ac8310d397d1198791dfa4d16006d967933f932c83e0317adfe188fbc59a716396035c35475662321a7517e6172418f0bc09ab9b465ee676cbef785552ec819f3e50e0529eb8a0e107e2f9f7539e459025327ae29a8d2e0bdb0bd53ee36e955320735e09f5daee52445669d3e85bd6e6c551b60d3dad0ce98418356f013ea5c4e2f47166ccfd6363f7b8abed9e84e8d2c811880a4f87eb6e9f17c3820c6106cd66f67aff9d73a3e032822a72914140707768741d372f601c207154e8640308e3da6fe668df5907e0392a626a52eb4caf934652a0903caf41dc87a24384fd4ac3d0bdb3e2267801b18d08ca365475489b10b6c52043eeff7056314414154c392ae55ddf243ce7f74ce0c0c8b243dab3c19422e4037e08e9310d02f83387f65f211c0b9b807cfeccd343f59b54e775062f15f655f9721c93b5fad9f72fac99329e35fb62604dd04daaf5f385abb83c0fabddc6d646437f3ae84654bf66d4c138ac1c6b0dbd4a6849b9b9453830ac1c675174e4bf2f216b559ebb8be5272ed7e251f67b39afe484089bdd4f2be35a327ce3da69fc12173b216dc600fb46e0616fa171d0c2bfb072b15f067aa82944236daf68740f77a3ce6c1e00223bd4a0f5541477a7ea9aaf69d6133f66197691a26d610b87dca5b21672f2d2e9d992dc7dbd155829caddfaf1ff5bee421ea2153862c0200c9fe9382902f3065860eedc45be1c0d4b0249bc7c5de46802b23ae86e34e5428891bd7f0dfb98b7edee77c549d2faf1b12de35d08b9cd3475a680259f1b16b7ce2b8a05d123f2f647e8dca7c0e6b707ed238b0258e3955d8e0c04430324143b84e8baa314190b772170cac1315fc46d41a7da25b14c5d627438d047b9239fe4a3b1ab0b44364f66f901837cb34115f817e025c2754350e964be85aa75c7c2cd720188490950a87610d95faf8b13327cb0ef60f8ccef6550520fe7006d1708bafbf9f52c435a760ae8e7a5587b2a73cd3fb00193258e7d6a8a2233575350d35651d32c7969057def942027981622387f1604df370ba3cd1880c9957b9216b1a00740ec8b8a4e0b6e97b30e86bb73f73a5000912b60233efa8f5bf7125a29402473ee036fc024ffdba6b0c72bc57e2145936ebd1b4d323f3cdd7bf84f9e1c175678a8fb0892f691dc41562df0e7a6a1f61ae82fa6864b5f35506b147a570796453767b0e2162f296483355894b4dd492c84bd25735ba48b6ea813e35bdeef51fb3ec2d3334ebc467c74847922bb060a97e71a826c4d0a3e7977e43b1aa0fd1d0a2b3cc9e26e9c7d87fb5f61bdd3b94a329c763baae420b193edb4f0b5a0f3949d3bfa403b95e2b35bfb0526b379dd717a6b5836acc33ecc2d103c8e93604aa09236d3a2ad6153bb1a90ac5ba357b8682bce07ac39302a3284dc35dc8a1c9a8b6c13e933d0100e46f23cddb8582b665cadc24a45e0b274b38c8332589595fbd3f1e8c2a237c17cd5e061ceb1470ceb120f2001c636d78c244dd06441246298f097fec0737cf01a2d7b58a62b51525cc51d8719941e995f6b28e499d3a87b25a424b5d03401f106567dbc2c4ab8b20ba88f85167c8fd6090648e82f2a5739400dde1db2301c514941d7f65981b448fbfe856233ea04d2cd2c6fb901e04e5120c149e49e338a6ef7be0525ea9b50cb32572062a9226be6fb2255c0d8c6269957b85d9e04dc0bded94f664d2afbb224461a7c5da09268c765761386dbec96dba5ee24c36de96b934279b3a4f95262fda97734eb9682aeff52c463a8ec6faf5fe14dc9b343fa041def052921eeeacccba1c1dc036f15df4c5de7711868319f416d7a8712648e0c7dbfab7413141a0fbd1befe9a61f767a93ca50cefd622aa9b5a1c9cf5c7f32a4c5297c0e18905c6814fd641cd63595eec300f8092ed2bd8e8f392aaf704d282c35b63677f7d41524af0af9c8fb4bf4320a4a9277661cdb57285ec4fafca38ae475767df365ada40122fee46cc0bf90226a4d4c4f39fedc3398243bff5c6ebed40f631090244eb4716c88a8116932f0f5b656911a5b9644b63e7e7644aa73a88ed78d5fa65b76e0450e431d53d5bdc4eac3a80728b584740732f1e863150f08e1ea2147231a85c1d85c6de71cd0212365b6a1dd3b9eb9c7c6acd888719bc86f5f34f387e832b338f37135be4ab49518a089d412ff40f769885680968aa44d78105a78e4daaa83a2e9ec91ab6c4e59656d33339d2152e2fc61ff10f883ed3a41ffd4fb337bb5c7b0f0112bc30fb522ce15345b7c6d0f59092455a501f2842988124641e136d2511157d5202bc064155bfb1e9f1b52ad5462de84dd3791039ca8e104b3ca1f4447b37f7e19c4893ab289381d07ac4d132e6befa1507de6c2c5f0445eaa01457dda279e506deb17e19b09861aac9fd1704249e739dad19dd7542b1b63b992a830c6d86434b06292a871dfb2bb1862006bbb437f4ce28526893aa38d988b871c1b6aae63365a6fc9a58b07495427b7d0ac6c4820d23a0ff29bb6d4f4d961a9c8ca73f753954013dd0ed34e730347aaf82b9bca969951490f57fdd90a40775806b7b5d4cf0147cb3b359d6dacdb2ab5e2ed504fa925b22abb90e5d84f3a3858ec14b9808b0cd12684dfde44b3e9d40e6c8302265149f29ab0e71fa837c0d56355c67739b68234171304803d73329e732ea48b632122921d12e95927776e445492696344a51d15631f0e3ea8294f26595c01921a48360865e7ce3461fc5c2a3144aee75883c46584c56e9d757602207a8e65847d6bc97166853900bbd850f04700bdda59f76059eddd15617271c843c4c104a05659435a95092d45485a6fb8bfc0fd7a84a359aafaf671b34de7e2d7615a79afe955f98a03b65b884d2a661609de4104d1ba1161e3f9e7ef10baf6e43cde8d29792cbf0974f1b00816f095a58544dfc596a3de366f95922895da73590d72975d6f10a61aa44836ca48b4405042c4db686ecf4bf168decb3b0e07f3a275892681202a36a3680cde9e5bba72e909c9bd256e29a972ffa41327f9bb01a48f637d405a7e231bf3db936c80a343e836356ed9bad3ec2d226129d9206a874eb20f5211958dcc09d7b0087e34d0b25948dab1b90abbde88cd6e4b308d5b71a027a056fda78498959218aba63beae550bf278faaa652db4ca0770e9c8f61f60dbe715a6aac050027108b17b8323c752dedac03e4a86bc490b5e4d0953f06e736b3cb171f9ae41e3cdb1f599f954e80b02ff296a0ab2d405508dcb81e15a76903ccba3067ba0aff4266eb1a7e8de12bacb4e376fc57e2b2852dc190986038d4abf1a44401eee74e735213d12b880ae31c949c5f071e040f3349c18509a39abf999485ba0d703dd6710568c66ed61dd94c8dff2bf9e7272561ae24b3ad59102ccdf979585ec9ece7cd18c7eaf67f45bc5b5a106377fcbfff3cfcc2e2eaa1f2ece670494ff9b68108ddf3c25490755d6d6104909d15b1ab4722c4e8ec2f25744e29475a8365ee2b79416c8767653eba6029b31b4350cba607e642a280c28ba2af557f7e7a65d225b6cf4f905e61a0f35f448f60afa0466356458624376790f0a77d82a58282a281be2bab72b806141b2c48a9bac06b281b4fe96734496dc621378f296c4e37d6723bfd1b23d347511e1aa578267f9e5513a5000b06b711d29c47f63d44ec4943db9ae944199d10e436ab456a115b8308e6e591c8546f151224483258df24e11841b67134e305d007797c6ed7c25de8e98a9c4495103d113bd02f84113609fe8a072a411460fb9881e072e1075ce1c1accaa2facdfa67ec567880e18988d9830a6f85477e0e7194a144cc79dc707cde05e476ee14852854590abf8344320bdd615f4ec41cbd97d781d6516ead0ee70eb6fcba28975481a32988ff50cecd518fcc9f1af78534e5d28911b4eb2dc570e866b5beace01d055504724fb25dae9cee3c587a819d210a20934a48ec0879a45e1118a0380be7e58fa981f546ea0e159c7347827e6a27d5dd5d5c1928ea9f2c2b1156787ef40dd9ad843b80c5a927bc36e7249345f6d182d28e7276bd24b0ac1dbc7710daea8a6490b354baa872662d2fa20893c54e8a4df957fb5db4e192d4fda3e0b103e25d03179c57e884974218253a5d41293da29a3a0407e0061140b5a149f36206ec6efa7649129371fd5f527db29a74347d4e9b86fe43e66272d70280b0445f911553ff4fe5b0ea161d624bf03886b53400908161ccd1108a517788f7393203744d2d6f3d4f9fd6916473f2349ac4cd3e6ccc71cd9db0fd99739cb38b4180de158084edcfe8bb94493dba3c8669a736ad7c1d5dad8e0ce8b47bf02f5a7ba506f3a2f2205b19e670e3f954ac18c24fac416ccaeb56ffaaf370c74600cb824e9716720d9c448c80670dd3c71046739c68ad6ed597f072d6ebc8ab78c7281a8e339f8c21b5d6ab26ba5bed9a80ad5745929c80b8cc29b77ae078d982a4042830bd02014c0abf1b2ff88ade72cdd99adc705a2b5ec65d362843f44e9a78595d97cf88f4854dad5ba6b4abef327abc4b6139d75f0b5fe696a0c9b63ebeb92d402de34b639fef9fa07371fe2650a99e20a413e0ea839df92f93d016e0a8e2548039b46081b65eabdb854bea3def32703a182e8adc3fc6a666d729072fbbec1719284014b67526c25a014d8401bc8c9dbcc3751ae84c5573803f6005034145653caf3077575c311922a91a91455818aaa4a600febc6cc30b838f82006daa5a438e834c7ffcc76e4c2f578df59871a909357f0f68316d6093a0653c822fab218125737414d3c95bb95c82e46a5ba85323bf2d4170797ebd8cac6bb48db04e11e0986247250590895de7e355120a709b0cb375eceac7a5243e43f10cf4b1eb65986b3cfa782e4f8358fedf402beb7a0e4fcc0f94394243201d28da308c8560956b102623e2c777f21f117efc4501034c143c9046b25ec6318b776b39acfbab3c3880aa974582c462e493bc7bb52a9744b5b898bc5e76057811244ee9eeb795db621eb9d345152062dff6dcba92cb8ca922dcca9a9aec0bc33c57f36d1a917eb83bdfb4bce3c5aa02bcb51b0b02ce0f834c5b4689fc5c78c50009c8aed39721301cb22684dd3b579462672437ac448fadb27aa883cf6d528ead3e7ee7d9621bfe76d6c8c8ae44390ff10b057a3365e57d99299fc041c89a7623e7998154b7eca9bdc8ff7a2a51ff85db1086afff02cf04c3edbd66e55a8cfa83029bbbaf15780faf7ccb626810f5a7898274285fcf90322b6a733d0bede1132214ce7bb7241afade959371ff7a09dad7fdf83cadf9fa82f0a97d89441966fa2a75e1a0bda76680b4a7662c61b3feecec546eca64457b2cd71591c98512361cd04065b35d6bebb36e9f9ad587b800e14753e35c5f63b3f591e05175339cb4d4cc6500f5029b2d71bce9684dfb7f820caa1cb6b5a6c6994b47900762e171f4510a4f0f7d2d74d202727b18870b90bea89eb91c96e74b20478854beeb24c5c6062e0ccfea3c4e39873f051c9ae85f0842dcbb292c2b3468f267604905485b061c4cf42405d153ef2a1f9cb62e21bdffef21f66e0c296ea04f772c8bb3a85dfefd1e59b1fa263942b04944d984a5f077f82fd65a5c1a1e2412a8d6bce12e60aafc857d08cb48d0f164dd131611ffae003b4bd8b5db4f4d303e5c55803493d8c0c9f99e1d43bb3815f829a5099020af8dd14df3fb983fab7465c4032c27b8ae826a3ea3057df39f9fbee29c874f1f47014b14e94852cbb323e1dd77f27b6931b72221554769c2b0cbc82e327bc10d30c1ce648e8bcf05171963475cab603c0c288a78f9b94842e40f87c797353828181046c9178f9616ad9128b7e45eb5bdb7b897789f0706fc57d1041082a95afe80f9f31650b865ad8a787e6b5c96d871fbaa0ec13e025ee3262481693a18b680358515839b4b798d5a3e6beee59351d435c373274191af5d0f157e2c65ebc0afac09a21f09ddd6518acc261ced378b67b2c535d0bc6802bbb39fc9042f58423ba4f5179a853bb7c3430a168eed148bd28425a27d3c382399ee0f73c98797c5933aec53a442698214f7ad4cd000a9bc83fee3ced052f2d683fbd9169b4ecd1b339f27a50e7e35e0e3a9cbce74ff054b22384a01c35515e199072799ee3607750436cb3b14a3aaacb321741c343314dbd71fd18db781470fa3affb59ee5ac2c1e7ac991d21966e66c22c508709fbd416362ea81699fb70fae9374bc4dddd27040fed6129b42c40a635f5a77e6aff54acb43ad624da2d7da83b1233bd1e1a184f696c247858f260c476c5ef965e6546c755136698d2b7bad83361112b15cd6b91242d82d2ba4f90efaaef59d630325bc2f9f58720c5e6a6378b502315a5d8006fa94fa975835e8ca6697b150147ede6efc7be2fb1ea5638f44e2097cdcb11a5b04f2eaf446dd017f1d6897b35745a0e37042455cc932e2d415e6bf14346a2b6346a3eda32f774a9a132ca1389dc354c5d984744fa52a533fd73355e0874601e299afb37c52438ca9ebaeb0760e87725960132835ba12e649ed05441fdcd4f350d4a00fa2296ccfaa4139393e817029192694dd2530a9b1c61ab9f784628f8d63338f8e291e43cb982490e5783e68e1d00aa0d210f526fc3d6507734965d84f01a526322facb989887a1b09be4185730f2f2064bac18ab3c064bec80446da620486105c9691bb922ea337daa656cf434d1d0c8e47fd8a2dad70f84d173c8cf34051be290cb0adf31a2b541e9a72531cf0055a3dc5638c8c09d8ec7439756a993b00be9182e68b1b4e198750a906f8a954e91816b530d141f964a5846ec83219524192094844fc06751551e8424a9de124d128b56efcd4e8b0e85129569e6791863d1f4e94d9eaf752356fecb4dae8f089fc10431423dc49dd3abe3b1474c4da43cb7a75501214104f3d6fc34e15779f249194372d48b4cd167972057dacc887fe90eb69c05af2eafcc680cbcaa0d90283c70bb8a6c72b3ce4b1b5521d5581f82acb6c9423e253479f0407f8bb2502a9a50515eb6e92057dfa6b48657de237c6e94be008468c27ecbee9f752631062cad5b818848a0d1c3a70ab64d074b6835e133370c0e8be59b6de240cff96f861165998f1776a9d017515a30348193abc834201c27726945d1cd6bfa59a04603d53ad0a504a1f44e0255f720525017cb582e8fc155eee4c238bcd0bbd47507f8fb4fa3b02a53b0ab6a1d4c4ef147da44f73b22992169a8e57d20671c14fee6367fb472fb8df625eb1619c545eee749e014f562e2ce66266f1d8478b7d6fd891a62b5bbf15657f956d827761ee037859fc0522e01277113121682db6ffd37605e1b6c08825d4a282b7232d90a4b01ce69aa1d48408c84a29c58ac1b8c688ebb359a4b9ca78d723ea77e94210aabca398fab05991797b07f9b3b027fc048ca1005f0b80470ed136ef7c8f8dbbd3fcc9741c30e7c4c08950374d179bd1c952aa62dc4c5a52d9c7ba49d2c29ce025c99353547581e0af8b48d8755e35722582fe56d5ba829a9af7ec5b98280381be81706ab34c86b078b70e50d8b4e7ab817efaa657ff5b219e9441f0e5bf1904ba2a3a694fc04e79134b7ee4935de26bdf8c516a0a8fb6c919ec79be8488710b82c45a3981ad74133138601a3e9b88ff0f367089ad44040b2032c759c4527f37a2e06507b2635df094d35328787151c363897e19151cb77a57119fb25cb1a8c0bf5348b083a72d205a5da1f3ff04dafcfe11bbb3e637e1ec21a6b6050c16820d18ae697bc128be13f130c0dd6a0100253c6d6b0518219b5ca0c721fed01df34b75af0f36a80dcd26bb1f370d0f56bf608e412ec8fc2960bd1ef57bcf79812dcc792b2d894d3ddf6101a54a801b58abfae9533d4e6adcd746606d94205f2bba7a4988eb69d7b8c0c886cb21fa3374b8741b4c93d403949422c3c7dcd5b7914c9d568223695c54018150a81868b1d7697d600371363a7f54c6a3204322567ddeccc2362b02c6a71497cc1e235d22985b326d5901fb5493c1708b5a40be28a83909b10b133701d851c79570cdfa0d267af10bc060a94ac015efc94647d6940fb9791d801d83059e07d7f462b1f559a8d9d7c19f2696b483a5b3598e3f71aa9cf4ae1de5c4f9361c4f48f1e3c30224a657fa2cda1f1c51eb74ee5846b34b6c600822a322057ce22b0d6cd24038ab682029fef565008d982cb2ecd05bb3ad39040c4772e5d1580283eb02d7dfc64cee3aae530971d4849999f117ab08670f74af0ff1a637d0a9281a30e77fc376eba4da51f52abc18fd4bbb40c754618e3de8181ebec541f67c0bb8083cbc7f973679b47fe9f5cc2b3d93960e67f6dd633c699cd9bc38bc7413b90ddfb7d78760468f867dc539149141cdeece4d220a6c0224863389933d2848909329e8e4015a8b42926369a00bec3f9e632627f180e5bdf7e43727236a9d912a2bba06d5c593cf5b9a5a5c80fa550b5ab32b9768f8698addb6f2d5ab891abba3178e1aec8ad389f16e50a32a931cc6a7664905c7af9b93ecb5b62dc30fcb289fcb282defbb91e0f64b2c948517fca5323d50ca7f9246a767f2fe556481c09057f955e235b67aeb704f8f9a7d506346c997d8ed7a87cc1f7fbbe0cb1b997b1d0af6c731b8c5167bce804fcc4d59a31079c4d5c8e6ac5e0601fe57e3e16188af6e1a72c8a850585b9da272e7bf102da49a06821e4220c42966f3d4364320e908f7a7b2afb3890fa4fa57b619104957d93a4f4295bfda95891de70ef3c77eb8e8e324678a6eccbbfe35197102a6f2ab0cc8cd11bc57cefbca51ee7f66ff44312f33276a02e1f2b387aed3804e88ee153053ad4f5fd371a71b16fe6ac4c1fbec72ac2c229fb2724d8f7a763054f609f21f62949f6ca643bbb219fab77089257c3ba40c2a592db115f11196c709b7038569e7e5caa041853eece0769ac6b955e8f663d3a58207ccdae381aea8e2597561319cd12e9bbb8a046a89d8464b86ce84e35b58125f5b55a0c4d97521153399f4913bce177d3376b1d361ef5a6d64d5fe9fb1fcb50c3adf1d3a7839fce88f37e0624a0eadbfbf1bb4cd589d8588915011bc7c988ff0e46af1551c0ed011aa37b5f1ba7daaa28b7ff663ecd1dc414126f37963bde6be2f849a849ddadc88551f51738155990715f72e2401fd0bcadd8537dfda56e70a6b153ca674f0da88ae1da0732407a582e8bcfa47720d102a501d5a7702f841f3219646139addf71cd2675976db979774ca6eb031d58130acc3056d9b56104f068e0f3c9aa84342fc71f554fa257ac4ff4d5e730b4ad158b3c28de10505a2345e34f576f1660b498f94227d290bbfe575bb35a9f31011004c951be3fb80bba07cef61c3670b80569616ef0281f4cbf189ef2817a45f1302a4f75271082fa22f16ad5cad36d1b9560d682f2ad04e722cf75efd69010128e756ffed16f733e1dd838d399b0bb795943181042f06cf16b16fec2a716e4719eb6d4acf1ca213d056e6d00ebb6aae3e9f50ac1e1d975c618fb5d7bbcc94262ab9d3cb4d50eb41428ebfc9f405a4d24861ecca1382af6d5b1fdd87b15bee3480feca278e8fb1a24d18738c3d9ed62a6af84ab7a30778869ffa9f7e04aa5843045a3d259e1df4a180f0a51274137ebc5b7d8359b90d9356a764441b5ba78518ef68a95bd4666c22fd92bce5bc442f68a7a85e80eb58172196af0df8a1634206fe28922f4f2cc22e550561754049d69eb4e34422a51cae2898452a5fab1412eae60f06ffd820c5fea18f7c23924d2f46884125b71c05dd2c8fd401e85683d066105db4b844e1d6aacf220b4931ebfc4d70cb01635149a9a081934b0f53538368204214be3bc18b120efe6c9ec147611f41c58866030f18769affd2003ce1682f7224fd6ab4f5e90bbf86a99a4468f9637a41aebbcc8ee8feaedf8fb6db9d9860c9b84518e4a02739ea5aab11ccdf376d2f5e9319f69447aa32b44cddc502594902c9bf3c3cfb9a085112fc549b88bf5be0d448c9541e1cd07cc087041c44b3a151cc5501d518b9f40127d377907948852abff274491248519cd50605ab349deabf1b4d2ed422f8a7041f2203ed9905dc3ffb3c72a8de4360537fa62734e12a1574f9cb366e807acf83bc61ac2ba429d8a1bbd1eeb9f3fcae1dd590114acad3383963a196172064d9d786e0cd685102ed7491014cd42804d26e1e0391268ba6d8ffdc79545c1df1936ed23f204a3bf9efb9788afdab24d7afe06c292ad06e9c7e174e0743be2251db3836e9607d82f39560af64808b67ba310a33357d0229b642e2a3f6eee7fa3cf8c80d82196e11ce55eb0c44a4a2dca4a84beed0fbd5646d772dd80151a3694cc941c14e04c8a0b217ece64bf6822d18a8130af61034b77e92889a14b9f59bd5203fe0de8b91dafbf2a535d6400ebb17fd851a2027ab6699ec4973ce97afc5afb9f483a0c952b13a0a4d0f1f5cd014a019c2b6d1047dc8a3213551260a3032f20f8893e3e3f1ca2e487afcc4edbd906511c43dff4e4e909a2b56663c5084a49dd1a82e06e431b822c0719e05af23021d82088d600106a4c39f0e502384cb8e8e8a6a58f5440c8f6cf2b30c95b1320366a4d351c730ba1bd8d1d5f80bb9443b5aa8b4b4839f3cc94f2af007ebd371468de3e81d8e0674ffa802052f7a9f8fc119309208530b9387ce32124b5367671c837000326c96c49e3e6c3bffb56114372a9c1f67dca1dc8d7b70d1a6011501ddacee4dd5939020ad0a0a5978e16e86798937d6c0761b25e58defd3407fc277f07b25731ea0d840f9bff387771ca847d8c4d8648db4ca6b616c8bae75d42f9b3ff47405372655922089da8783be63351d9bdde5ffe569bca3923d1f0529ada3e57cc4a02f25085c4f837a43694f329a79707e31b52b1f1f6f2e4e07d846a3e9f82772ad3c7a7a1a919e839ec0ad3bd35dc2b45bdbcabd00b299d4d3b5d8612247f3655806192853251ad38fd3194084fed33c44a9a66aa74384c80409e86e952da5f07eabbaa68a21532facb0139d8c35e25aff3bd734055584bc0ce8ad8a765f804b6f705a873df29acfb0c2241dfc0dd6477ec9aa9804aceaaff2c3a098e1b1ab1d4c6562dcdd09b34d2f1f281c1276025a43909d84e353e6559f35198f639766abf43da7700027098a1be86e2af7f845a69708339a5fe96f8a4307c5315f0c68c24f3ba35078584fb1dd1246efff7f68536e9bda6403fe001e26fb67f3d8aea2ff1bb023247927e0490ef28801a3f5db6e24fbca0b34f904b13cc1673dd5a0454616f69f5b6d8611ac8da84f852b3ae81f38f8504232ff63e7b06293e80fa8637199adaa757220078612a886b12c57f0dadf76d66f32449dd4fad0b6fbb09a36e82167babbec5615d3a1c45518e8d7ed21dd414b13effd7ad1cc57559f7ee404f3b6eacfa9ae1f8502af935f7bd4698ee37f0593ad157c3662a6f451cc5a74bac5e7f59b2f1ec0e5e81e17a2fb4a9987b7abddcc6a33159a2c85140095584eef20bd362fafa646f8480b0d5fc58a55e8188de9c46b1de7f84a577e169a1a297f42f6bbe2872dd0b8ff3139ce48451c85dda3934d04fb8697b6d8e66a022025351e7d8a025184233f6551198eac9465cf92110c5d0eaae9628a49bd4218a7b598ca913b23c0a1dacec00cd96f9164f7818a7223645e138777cc52eb9c738a2f8b47792b3b3cb520c3f6431e5be36e432192fe258b2c08140a6f42828cd2842b28808855cb2ccfe37ce51e0669996d95e25a48476a39e7a8fa2f525e74d69fcd495d132f8ca6e13f79d0752c7893708cf137f66c6527c752b2d1dd5ddc2f102862f09119d32b57605afde2b78ebfb479826dec10e03de5ce63d798c322f164b0520dcd026e02d41e39026050f9942e17cb50814b83b44ce028a0aca68593054b251072296586249a9fd7ba0e0d8cbdb97884c39c61c575fe3802b5f3195b78cb29ea1a531555cb12e488e9c83066fe1a7c7b960c00f8a560b85c5ac65e1ff5df5a8ce333fe3db5c5148ec505f721b77db7b4b29534a297606b2065006b54a103a959fc6ac0f376890d7e98c7ee50fdd88d1115d7021d420af3004dd5418aadf1687e8568777040d7d4b2158f7c3dfb6ed2f9c2f02127f96b6b2c8bf246500e34bf853bbb41574d4a6f8b74515e1e10b1810487421c4cb8b143f5d94079e20010549931ca20c91e2272d6a7dc088220c2dae24576290e2ff4511e192050d27acb072e5885383d16d3d5302ce526358ba25d6ea4655021f9e9d21b28dfd20c1cb95d32a41477303fcb0db990e9d98e5d8a218b6596a3f7711e622bc5b38c340893ce309f58096e3888272e0743a9d5a0e45e2a8010d77a7061c23361b0c33a7d59aad13074e2d47d1786cb0711841436e9d62b425f388d074bc08433503e3106f98a10a1ab20e4f0b873f9dff1d2df8e85e710ff96be297b24d695969bda34a1e601ebbfd396cbac0e161c90f708f2824889bf867e099ab850372860ec2ac679a44fa07c1d36e3e847bf8c94d6ee29741dac4efa34d9c015f1f1e6d860ff233380ae4a13890d090758c68dfafb3514a22b57458873e69a141d6bef861f124b5545eb0cab5488d5f081ae4e7137ef076790370b5f8bf36ea3c55938ce307b2b62237c7810367f1b05ec836dbe1699b46816de28fb12430248dd36da4729334dd87f6bcf8754357a4077df67af18b5fdcaf57e7b413eda473944061508574b8bc735a896ec2317eb11554702f1fd0b0736a7fe7f0ab3ae7e6b5e29f7e63061c371a704ce9198f200fd4b6f18c862028c4513c7c6a3ee834349dcf9985ce380367a75917bb90acb979f4e8ee6ce330b1199283a799951dd9777a61916ae30a29a594526e0c00c9880c23c5010eb0352ffd464e499a324a121aa03f080ad10141504e49333fb087fc36066ce013606b053e3e3e9b94798bd4e83a6dd3368d862162c418c615354d8738e59431dceaaccbe9b64b75ed514e6de366a9534f2242b792f0a032d0d35bb460c1c2311620674217131a800b40866090847e026de2b78225e45a0e1e74d84b6a87ad83da94f692add101f788b20555278a1c4c179dd9d6780c718ff82a300f77358942c8ffa87281ee876b1b89607484a38a3054dba369654e5bc3ae26519c7e384afb5e26c0c623a121bbda61603f60cdcda69561189a07162ec8f5dd7430afc691c5b388303d92e30c2ba37d43b60c1ae2901f1a726b6720e83ad8e5fc9a2435341cc4b489df47b8331d3b74f4cebc598e2a5d37d242b28e3b108406cd9ac36082456ddf1fee197565b62fc89536c50e70102568b83bbd8261dbd9d91dd32e149f8286aca3a56d7e7ab6e8e844981dd01dd4f2946629cd4f9a99704bc248e9f782a0116606740b12d37cd0d880868666fbe8f27730912b5fed68904f6d7a90eb9e1ee57b89061b2a976218a6071289045aad7ad5ab15871a4715faea991662312dc8eef04afb6008e2a8196e768739461963fc9ac98d2d7ae5305c68af7ad5ab5e9d24888bdebc69733b2f2c02234013ddea085b56fb3b12173446181c1ab6aaa7fc9348946edb0474dc4fee5f08fabc5cec72c18c41ff9b9b77b48999ff473c8160045bd539f16b15e8a8be7153ff8338caa021bbeafa6f1ba52452d79048f50f94794cbac95bb3286d7ec84ab06b65b48f5bccc4fcb64dfcf112dc3282f2cc51df2a1ad289825bdf388a9e429ed5fe8e61aaf4048580fd2098a3071a720b6c2ca7130d2571ab86467d9b18e7a78d6c32c6ee8af02e96b682399808b3900ceca0baff9024d5bd0a0f4654af7283a3e208fab8a9eebf43f54f0149d7adb243136ae8a36a7117943f3f25dbc7901cb56d9b8bb6ad565ef913ddeaa89ba3b46fb04472535337b501b2a0610ef99f2303db6baf7d44b66f615e42355e4552b114f2817e0d295dd41016115c2421030c2b3948f59316a582308e08213b8293d54faaff17b557c87850c60e7ed0a10a18a4fac1451549020a15274ba84ca15325b53197eeee203e609881a5c914b13352ad83112e97c1ba58f103134682e0e3446353db54970a1729aa5797ca1449e2141d94ba50164add85d518366e8c316edcdddddddda559588d0fa831c48dbbbb72d56d3d13966a7cde364a49a4f8358618777799f7b7b81b37c6275c2472aca2dbad11ed863ad0ee72dd0ca47f1bdccfdd59eb9ebb32eece841a8cfdbf7465bcbb79777777b529a3c751d185f64193f31300e9ea5f0effad398070f56fb432fd5db9f26834b5cdf33c4fabfc8944a259f725a88bdc4bd05839140a6dcd6e4d736a6b3ccff3ba95e9efe2eabbbb5bd40477031471f371a2a132452bc62b37624075a94c71448a1a3cd0ed86fbc6684eb1314eddacf22682d00daa42eafc082c6f712ad50e409cb61f68c8aa938a4647c681dd39e93881325a458c31c6e832ca0823861067d211dea3cb2863ac82be66f324d224d10ca171534822e1e88186bc7ac928a87164d1459219db6a83792c3471e4883618353c96201c4ed8665bade40623ad5c06ae648bb4c2c1ea06cb430404070e71149a71d23c608300aecc8c1e1168482343cf84dbf69492480f32928e259125a1c384e38a762f11f02af3800e71f76d9bc10cd1ed51ce6d521a2c404a3ab98973ea286d521c5ad09073426a25278792c0138dc3a4d1499d50d472e06c8d47110784d791be6816cf0a84f024d96124b3567939394a34f995f92801bc24a23bd090739866be364b3b9a8666d2708e8c73681cc5ae7752cc29020d697268683801d88043b3287250f8811324e808b111a1e3a40b2b5e55c2d02940922531d0d2c40932783e86d4826da3140407702536912fa10669831ec6f4e49eb32777a84dfe1b84013df4fb9468efeeab3078bb8edc63aab64a910b3304fe933cc857e2a121bf54b0d73be79cbbf44d798aab53d9c2489db1e12d417f005e50ed2b69db2825919e149b55413c1715f24da041156094e31e9baaae40b4dc4ba8c6aa0679a341ffe8020e0d39a4c51940d1418bad898fa47ae338f7f05475bfa9e805210dfa041af4f594a04538e2ca0112ad26ac126870c40e3c0cf193e406297fad14029104e6cb2fc7d6f80df12237322d7618a3890f383091f2e79b45ad40cb1a305882184234c16151a61bb8500d31c515443491f267d6a24050385122c5086308b19372adca2a3f1b6afc609869cc35a1dffd0b690d6362aa0de6c1df8a028a1c2d7a2aff047ac6431b957f0968d8e8ee4589e008922fb864d143942c52fca045018102032ca4204122ca4adeb05b20c005c5133959fc6c1122634b11d85f919597ccca6b566f34f8ad437246c07925800a31642959da547f0cf790957f88a36262f8630050178b1aacda5f4857be846bb46ab7fdd2d177d6313647e5092102103ba954aa3152fce42700953f48cf2c952cb654fe0cf047ef2131a8fc302c152b5f541e2aff0daefc1d8b5c88df1f4b1858d148eb3718b3f225fcc9892156459e1c4578fc13c338f903f09031071afecae6f77320c83bcd6f1bb52134b13a3dc31104abfc34455028348c0947b5bffd4319a6abf2d72cf3f48f1f301c4c58516eb31bf90d9961a121b318b6e3247f3a8b45dde42892ec1a6c2a0e19c172991e89a0346de2678ec55a19fed01228df2b450dbdbacc30d22b3eb716b59157acda1863fc214bd2d9fdb151d2d4c8208d2b954a4a547f6edb364ee352fd35d0dc2baaffec24f3a8a08fdfc518452e445089ada8b0060d5bd5367d137ac1827a0de38e20d09065b2f8fef10b47d5df5b1910880922aaf8a255e2382b82188355db56060dc0c8a2693d502105cfc2e6945ff875073c48f185cab72dfacaf863d1aa110e68dfb44d832aac4143eea93ee3fdfed5594687405987ad34e8bf020e941f864b1650f084b629abfc096042b776380d721ade4a81c60fb08071248a11330e073bbca634c107578848f1773b70e8cb8f3ec616b55488114612aa1d1bf43084147f942daa48ab892528b1460e6668e992e28f3a8b3a00942296505183349cdca4f8e36c51cec4e7075cc2d871420929fe1b4bc068c914d2a03545a05be565131d0136340c55ae31e6a876b5893f446f749d8829a5b4a35fbf7ae0b0d3ae76e186121a655f4d96291e1f417b18a15ba589abee4719384b5d56833442a0616ce154fe9844cfb492f44c4ec7955e7e4bfbcc6ddcc6ed8fbe7b1701d90fbd7c88eb8a3aeea506595fbe8ba19708f028a37b29c9efba2d71dc46f765e81b2ae8b7148eea6653b9df52c82a277c98e0d9c1cec4c1ec08980e623e90c51fe8dce097804bb4139a5d2efe96460fa281c8e8ab41825c90db2fa11a3e49a84ba5ca0d159fba54a8bc6a185d959f475d2a546235ba1c15a7442b1cb1c02aef8f4a714a9435c891471994ebd630c6764bf4bbf4f21dcc0e25688cada08486bd6a51f490a050aa70bb2a87d6c4cf1c0a4337d430c6f63dcff37c38d5578e67b6a67d4e8724a3bbfba09ccd4577773fb4bbfb31b62f5a9168341aad697ff4364abba6fdf55def97fe1601f17f29f5d352d837d41f95c2f7624ce6c8582877e64d9d39a15086fe628332f40db2974601099aa6699aa6699aa669d23d9833a0709c840e244d4e8249423aedc2625d95271c429c48a8539b6448cb91840ab1460a1197a3079ef40e860a79620094117822ad104d221215d209851b14a29006598535f1b35023c58884844dc806bcf8b132fd9da268d5c62907345cd90a88f44c87517673dc9a394ba653832df8200900cbf6778586a1feaf124492ba5556b0ba56ea5659c96ac75b258859bf5b73c3bb42f9d72b02e5f78840f9d7d3a1fcde16947f3d2d28bf97858e028494b45aa0d5ca78560a6080d0ee50c312d705edc0703e063840c8ab029adc59f031853c2a2a843c2c560879b21d21ef0a9990370404f0681ea7d3a96e2dad8e05ed386afb64ac4dfd1feee89ddabfb1069b853228770908edd624e0c4e3e4edcaccd58d2c6cdc8b745d746d4d0a12032aba29d4e85a191d68942a9baedbdeaa26b7589787727b48a8fe5ef28040e387fd324af9517ea70651e0a1ee2e6c7f98e305f6c87e43c96f5666bfdba28c314a598ad15551ca8f0d1ee93a444456f7632974578def4971575d9748b8bbbbfbf6fe2d931b6f9b7b64f9ad2df209c98439dfe3bbe6d239ce7bc04448c6729bee9eeed6d2582a7f5b69bfd91aedf95bf6d1d46da39444fa9fabb9a271237ed36043a12b8a40572d0790ca75a5c4d2a8b972539cb06964bea6cd74c99f99237b664b6e992ca9259666cc511cab4dfd9163ad1cd56d69537f0fabfb69d9848c4c570867be4248264cc6afdb398363f50be2fa8c32d69441dddf4a734a9b2a4003cab11ce5376d6a56ed9b9a24b465ac66f9a1d66c6ec9dad806e04017cb1519962b3016e510c2fd567a428d41de6c29eeb7928d0e3429eed3fe664b81be6deef65ce98626b53da864a3c396dafe8626c5fddc14579a4f8305b48a82518906adfa17839ccf02ed69ed7ab53aebd60d79edfc8b3624684eb9c5cd37c9da6bc0bb74f1f7d7c076e9929affa3b5f70f039bd23e0d3c2035bfcd4d1c5b5b12638c213977ff0720f7a374546388bb285ed3b6693ec31b638c0ac021c61863b8f94b291580c36ad5bf5d99cd076f0a1ae58731c6c851ca92e7acccfe461f2d26880371ccac1d8db62d7ea04a6ddb6cd458822ab55e53fc06d598822ab5f81da5c671f3e395891fbf56411c0b5d628c928582127865e447225653366351609bb695a6176b5ad384f5ccd46930cacecc2b0bb61732a8fdda4a1b6251b3c735957f3d46d4fe9e3db3a776cc519a92d594a8fdfd53475b85a34f5b69ab1ff2c2f7d4a974863a5fa053675b8114bdb0e98444666c90bf9d5ecc30c07fde4a54232940457b66467f6d4de4e17194b6626d55f3849636f56f89f5c87e7440363390911d6dc533d356b56d8845402b183473333bf3bb5cdd72b9bac5038bd163f418dd7915a3c7e831fa0c3c43bcc43f60d1a37b7b33b7d4b8b9999b99997be33a6e5027e20e8998999b9b9999b97b7a7a7a785ad52a1e29526432984c06c3c1e115b7b8c52bd63203cfce66e019c2cdcddddcec89803037377333370a22099048bc9c88025ef94301337bc7e81da377478fd1db6bf397a45b1d21a8e57384a6410f0af539c2cd488ee27466a6150bf2cecc5883bd1c973da3ce703b0d5ab1331c1216e4b86cb1a62a8b02d9b4a9ff67f89b576adb300064c3e9386a86b1934b6d9d3a1af9cf6a38779aa3216ec75153e626b9396a53bdd33353d660ec99e5b87067bc2b216d9a173f9eb2d6aa364b4a585883f2bb914639cc4dfecef36487c92c099d24322438ee53f271d4944d99acc17e1f4dd0161aec67d1a9c17e16d0a00e731497a44dfd49c498c89ee848997153762a67a5f6b7ac8653e653fbdb3f0e851eca1f4e196f7b53b6322d92815aa01cfce3efbb05f66350c00dcb282c81f26f7c57adccb6ac635dd72e8cd55da20878abc1d6a1481a04127962141a4e29b5fba7949e099d1543b19536f1fbbbea9475115246ad63476e341f271a1b0edd88c951970a176254515d2a5c60d1a29779dbbeefbcdd4f54b870d56deec2458b63a2b7b773fc28f3361b31c5ca142d8d854958a4098e4d89d66e0b829c4308293753565658a428dc833303244963745a8e23b4a94d0e0d1f3e3775259ad30aed6fc1874f6d4e1ca18df4040dd7678b32972d4cd90123298a6e814043cec9e96914cfce2c7e3a3fdd36dd461aa719c78a86abc3011d1d1d15df30cb25b36cd04a72dae5a8f9356b0792d5ae2591b58586dbb69d48317e135819186746b78ef292a9e7f54ab5970800c60db0e8a4bac43c62a416a00517ab5497722091ea3cd4a567d26408446c91b241d425011421e525227c8465c64dca06ed0a2e7c90f21211572941124bd970024eaa4b9bf2129115d0c8c2276583062bed9535525e22d2576236b3940d2728496dbd00fedf6a58843f08321c76525df271845411b6a1bb89a8a71f28a5aa1c7e92e348829e4ea7d661933107119d13b70953c9549b56fa39e98439424356b9ca632b9705bb32f3a7926e75f04040dd0ff1e91d75ea3ef9c73d2353f7746ad0c677bc206bbc81dafac1eab50965b0aa50433cb66db79e31f1a8fbddf4a46c1e4179a03c8c8c4439276f19f5308a81b671a0396d34679f9c8a251097f2215430814c80e06df2c888cdf623a594f1798b9a8ccf9a3ffb16a39431469751cadca2e4a6163750482412759d48d475a19048d479a19048c43d736d43e59e3b2e055db91378a148a472cf1cf7f182b2865c50b9672e142a02e2beb845d6d458d29d59ba334b6639251053fbf9f999b9e48b058313d088cc42f8f9f921d11b7aa346949353f3477a2926dd1d83d7cfcf8fcda8cb0b7de9e087d794970e6ce67c790c7e7e7e6c62fc220fb82793658cb13bc66e29636b2c25cbe80e4ad6bc6d68e7fe9a3dc61a89d47eeef82b6bec39e78c45bef8244a96fc893f4ad0e6c88866e34df9a18b69237f681f8446d4137520904dc7f1c681b822f467f4e3897c08fd805a0e31ba9932e79ceccfcecca5ad71b4c34887510e239b110e6bf48c6030ba41d3346da4d2b64ddb386ed39ecba7a169cc3d9ac6dcd345d37ed6d03466357ed268021a3e6730c18c1e9b3298cf5802193c5c94a069cc3d9ac6dcc3cc9ac6dc236fc8c410634bcdd6353593b10509637833b91ce8bb8f59e26b6b341578d4edbc20b2d4666f35eb4da172aa03a5bc9917a182093c41e6dc01389eda5b6cd5de228ce3894c4419ce8cf4b2a645816a0c5037665f75f765cb511c0416c499f9d1a0f61b24561b840584a56742d015d0958dc958f4296dfbf3777e680a375023af497e8b5ef8bafd7255052f70356e6ba20b8139b30b4e29a577d1dddbdddd793b4fcebe28fa8d797e6610083419047a9ecfd3633e81c71c620f149a2c9a22d14fd087be634f14e777024f1465288a44a29f528a2c10abf7dd76e2daa7f4be5d199128f485454a21910ba02f6e5186a2d7b05519fd04da9cf3dd639cf33d6a51d33e116f33285150d4d99ab9359208206e9b2f26ae9a277c875eae3c742e2b5381f1e8dc3c04c9ca12526ac7211f583637b2da2dfb40b74a0eb0da2dff40b74a0eaeda6d216d6f34f824d168461b64764096dd4252e4829c291245f2a7e80b35e81ded6e6ced1b3d53e4651be4cd02326ed19d0050fd8be12dc6474ced1e3db879090a932f47c9197394269bd4d0d4714a2bd13458448a2939933326283f6d20d8469df2a363f13975a58b871310946ea54d0982d245b779a17d8aa319da7ea8fde10935be6c0f698479b473ddfe47d76d032501ca69109444ae1c054a928493dc302249ed47b2b1708c700f19c4103fac8a6c3c82d5fe08db1a6d3e7ba31cd012900f4d82a4258f1851c4f69038ac518ea3248b95535bb2464f464f7a261c39317282a302b4a4b664817cb48f8bc924b22591481cee218b9046c82392b5329235822971028b22106b7c6d0ddf6ccd6c52436691278b2f24755fe2b0382886a8fb3288edc13d611eedbf4eea7a3296d1bea94d9be6621cf7847b705096477f475999fe9083a276f58f83f1707282ca8190acba8edae8a4a272bbadc6cd4a29d406e820e58a64acca6e1f70a37577e676676e776ef7e6c8b23d7e0d5bed4e41b773eca6c1bbfcbcd02a99b6217ec72798bc3ce4d740f2da16881f2f285f7ebbc0452fc81aeb4c41d7e95f4f9e51bad5119ef8d4279fbcc35b1a05ea7882b65c2ea35b1da127abddb2ad992d26753d4259c51ac5c1605b68e849f1a4f44ce845f1a288c8684ece4fc4e34df1629e9490837952608ef2a47852609e144f8a277323487e8f11265771092895bfe8ea398b682569a4c196370d4a0a7441dba64d6d6373c3081bb96ac22ecc07e58c1f5b4a96d2cbf1c2dcc0299e4efb32c751a3df972ec944bee4130993adad09fd7e18b1a8fb51b635dd2fabba2b6ac865a9fd61026a4757150149a1761f375b99fe06e8100269bda04fa1eeb7b1c8cba6711a9445a39274b97cd260bf2c49989452923111101ed53ff9fa81f287d255fb45259085345c5d4b56b73a42ba3a793b941d0140dcdc7856c8c890a6693bea7e2904418def71b76685bacf5c3b6db97dc60b8372c80383f2ef1128ff6aa1fc6b04caa102ec1601a832e6430d1d1e01bc2f68c8cb42f925b45bf3754f7447ed4dc6bcd98b8dd06ecd00ea3e09077d2971e0a238ee93b112f7e149c6403b3266aa52563262e3841480b8b91940e57c56a67473c20d01dc00400c0b656c4d0ecf0b1436476d385848c3eb82f2efd6a09023001e1734a446c6e87253a9919e09690f3d6ccd7a5828079befa8c4ac192b62cad08c00000000053316000020100c064562b1380ed53835fc140010658e40724e361ac9424912e4288c8294218418620020c40063084186aa7600b5b6d8dfc971d1f40d20b36faf3abe808d072ac0d91f1906cc110e294153c82ea638a176fbb80a99030b0905a1dd28b0e72f15cb08c624b9fa48a6fba16d7da5a53009398446a9813c8bbf29c7823264db19ff5086292403cdafc7e3dea62e90f23847717102ac20ccfd1d36cfaa1370b8271f6dc17f11ad90b77985d2a24ecbc1d85166519c52da55fe287d100f60714737aed32389a491dde734ff4a3938c8c666f2a88f0afec9c31428bbc73ab07da4952826af16378ab2824269a3f13ea85cd2ccfbccfc41031ca69f051a00028d58d126efcffce8bcfb3ccf281bb4ac37ff0434d06ee5dc1b3c369466964179c42684eca15bae123948f9850b6cfe0164b715f216abc9716c8e812f8919014c1464a507b313ccb94f180cf912992146ef6303bd3ae2caf99b94b56415606f638af0930548fde5e8a97a553288f6e2cdec9821e7780653c4f0993a8343123b7ec41ec6761e540e07190150b5f0f86cd8ab01f62d29907639420ef552e48813d1831dcf43787390562ee188eb846ad0f58f0e5460eab4957bddb21a2a5d93643b480413840ce69270d1a669e899566a0f053113327def77ee002241648dfb008532a14faa4686e7dba7dea69b53a21065e3cbb37e4e0f3d157225ed42578ee9c3c7438c7293da91af6ef234f4b30e6764346fb1e3a40f2436d28384edc185845a9e41fdedc73bf69be69bf922aded040ba19ed065b1f6e0a4a82b6ca442a2b91c22499c1dc0c4f41220593a276a06821462da1eb74f958457082139c0362a93ffee498d61c7277d47b22d7843e768b258106f221531a5c4599efc1313ae5c88e4c66d68ed649fcc79b90b7e272de75f8c5a17867873dac0a9b1c578c45185f0d68879c20c31a7b32266483e06597fea12fbb53f8a9d4cfc135a297012a27c37e8a5352406144bddc1e97f2cd172665ad64f70bcfe9fb42599a1f4f59508ae74008720ce7bb23541eb14efc6a0d6fca0fb42cf92dc22f5bfc736e86cfe87a0fb1bf3c6b395bc8adf02ba0e0891f192a42c4c83b95ae8448438af419f3c17d2dc080d8deccc5fc4c8b40579a39859ca4ff751208e1d11143b89e83a6d890c9a5b0f4dc44e37fdfcffc9d7a7f69a08fb0a6ad7168c5022849a0fa04b071e0243bd0f7a67415e9fc881e795fc381f1eddb6459c0403d7fa96103d703296cf060353011332bd0b45baf3768b01df87067949fcb93316d950d66dec44900b1bdb6320d3be805a0ebf82ea1bde035645944b2b7ef23d581fd31429d0eab24edc5ad119bc554451c46f3841760ae7612f6468dfe878c3f563fd3da51ccd80bbdc878810bb89a05d8fe378ce2793128a80cdc9f460f319e9fcd9eebceea7dcc0b14e506b3445e6d7bb8a8f324e80e8eff1c15642ec7d2d9a7542334c028aca2a22001f2e94b62e3796f78486f9f019826619fad5c13e1f4cb9072fc86433a400357158c4ad41b1610ecd731d285fed45781a84b11c78aa7fbe4e132458c8a459017bba24d4ad097c628671b4ad45a8c0665f0900b9e6ce168bee4fa9d20d2887cf119a93a694a240e36fbe69baa38cd67fef3700b1437f0534cce54c7ee570f69d292d57f3ac555a40599a9e09fa9e912535a46e5735f40dcd8ad36b917b5c7d6d1568209799fe9ae3ee3b733394607ed146c74e7bb5081ace19b053a1b223043ff699a4add345a69225e62628b21b91697ef17eaa6315ba36589d4f9553c1073a78d649b7e10816fa04ff07fbc3f793f76daaf724f28c3f04c189aef8c335d9d2897a9b9d4be8f08b6e74c55f125a65e8ef00d4d2a91a3f60974c96f9cc69d0b3e8e7f16841bfd3392105bb98be4de167d8dbf14a3a9e486fc68b3d7c83efef7141d79b430e7a93928cef26afaebebbad138844bd124d0fcd808c02b7d7e9d1cc6afdf75f753f1f84d4f0cb6bbd440262c614d8ece5e7fc773900b221e457c283d49189d4fbd44416c1beeb0ce7654b4bfb6c8073be8df2ad3f3e0a404e42bf7f730e49651b96779b8f8d81b0166ae6a448499c3ae632fc03a29cb493c577e93fbcd65685452d3db77841fb376497547397f19b0fd37947a55759afcc8a57b16b61a29f91287e6d134fda7309af99c3f7bec55c0e689947cdeeb49935df8dd55915742691753de769412a86b6873adba2696fc76baf4d52dfa752e69ac0bcb3198358f7ef361b82da530a499f910a013045991d6a73cdf5092ab1a3024ebce66572fddc3d11e5d1c96ff5e88164e4cd198e2914040faa04c2bf9be4d1c581a2129dce900c7f3cb037662cad78633e533dce5836c2d9c3ef2837a8e9f210a7384583217d9628861060f77962db1089e87e5512fec8ec2b7a8c3224ea8c47efd86ecf9273c9cc2512bf489d2d3d36e529325009af5f05fe1cdbf55c5f0f9b07876ddc792f4f838f6d6c8c82b078f6b30c5b567d33ce73da6b8247f115cc8661f2fa5062fe76db881c6a652ff2c879c0442dbaf7eb4f7e22aba3528dfead324180c8a8587525758b54fb6b2517daf56a322602cfc35ffeeb2b109b56e1bf0edbf44d832b236cd2e9ea35c19cb89d74c8ad7d86340b5e82eb21512bd2751bc0cde84a819880cc05190f5a23dc5eeb09b6aaabfe96ede9578cba83f66ad4b3c6d2e57b70a7bc5bfda75d7d9a99e9303c05957d169a8922c65ab896203b25ed4130f64bf92c47f085c95582894a68a8c02557c15d3a74ba996ec5bc8aee84af06ff7b04b9b3acea9d111e2cdcd5dfcdd58b343d007ae61983935cbbce6c2cac6804e7ce78f763a6266adaab9484521a61ac8566921510f301422819c3399f834409fc7616e8cbd5b2e3e45be601f775146d44344d6d94a4bf755de6cf6b7d2388b60f54eb9fb42e907e5ebaaa8216f39d7d1900520ea2baa16607208e4270a1218093aaee32f591d9eed5d5bcc851d291cb0a2a6bf2cee22c29662d82ea199793d6c259dc5ff6058c66242d6dded409d9b625b17c480bdb40840a84e4c35582a2c13b9af86037e37796b4aead953c452ffdebf36620528a92d804bb0412cdefcb15bc9ea3dd49264eefe6d1146a7042bd5d1cf926b7ed7835ad7c4801b574139880fe3cca4f1717c545466e4ec742ff8de4f6c9a646bccf499f3138ec21b2a061660b2338f08881bd52e2d9634d798f85d2c82e513cb6314757495d205941e1228f3b86e67de5b1f00a37de262f054d59814ccfb9353e3f2f0af85049708ce063b1d47f6afcb08f2337e1bfa0ab9e0a8c968c780c42838b2c2d11deb44bf55c8cc40498c577e1505a49b9a5761c6233e38b730b3171001e0b4ac68aa11884bfa658fd60ff27d919ab11447eb6a33c7aa58531ce61e1eb5a371290e0da4bd6cc0b9bc8c9f70a1556449f9dbf31d33ee35e21b51aec9c59705bf83db51601f2107aee4f72c15a13b0a098a6f804ca8a1de0814c60a01e007d2cdf421701a777c3c8f224ede1b04a845bc99e179d873518140e7e022c23c62f8dfa0b8bfd3d8004665e256beb21e865267f99bd33e4764c41a48d8270c70977865f2520f8eb75401d7b93e61081cc376e159c18578b9f6e13a4cbc419be58908d48fa7a52ab7181abeddf387b11752685e041d8e6ac7d598bf6e3c9c02028d2a5d07099f9007db89b11cf305b4f6c2ecebcdbdc34e2f7680bba075390448e87c2f6732b24852acf38722d27ade3346ed9850ed992475e277dff43d9baad043488d6bd5c7c70d4db53f1940caf16d47de5323c31d93fc27f80d0545351b3a4a6865d10f439dde13d2b9ca04bf4f156f73a3e2d02bf7329d6dff93d2b37e532c7620b149362a6cc141b2c1cefe17d2d6dad4de96a0ba3af37950b4235256c7eca6f91257119820b597609ee4e15457efc66ca6c93d3b72927575cdd79d6d7f1fa71fe095ac0ae127ab390a2254f97892071f55e190d944045be108b5554b59c4518fccb7c4bb7daa0fd3fd9f6dbaf3f49f3094c027df600ad518f113b0cc74d38b9aa502577066f4172da236e8ba191a93e68b215c46e2fdc13f858d1daa973dba62e1276c82f4f820c257454dd52f5a30b856b7a4057052e0fadd855f9374633d6bb09d0b69cea34af46de05a3e29a482333920f9f266e1cc8fa5ed7ecc60eeaa9c6ff7f122428aa63f182631735283355fb2c0836f6839a67fe5754ee2ceb250de11ad1939025337bf7310d4d5f0e78a416426a5721b2110c500227c4bfe2b85092613f5ba244dea8c40a69880f4cbdc211dcb27eb2adcb19bb92bb18c03ef45bb74a4caab6cd0b7afeb19fcb33f8ac9e78b86a882cc855a25090834716a6adee1e53980c59387fa7140c887099601702ec07fcf9547a1b36226f99c6ab4e2203b8cd48586581d19953465da137a9ebc93c7be1a0d2e49ab818c8cf7bcb0417bcb8ab0918315c6b3eed6ae79dc9f529d89cba4fed0532f390219430376e44b45eaf9463cf9e26d1569c2c7f292c395ba7838f70a7939206c9b77f22f6c0d28aa68bb1927b1264519019e975b008d8bcbc86b06b22139e84e7b47385bd28e82789548cbb0d1bb06f1a8b55596192724e59f344abd74d8d71b0e2489ef143c97473cb342889289c7c5e2bc7173c00520f453cbcaa8f0685629d767453ba35ed7b14c6a5b8c92932454625142c75aa66d90a8ce75c1eba73a0d9829a3df1a2e90d64ecdf484cdfcfe915fe11aebd63b9ca8d9d1a5594eec451633a8e5ce8b7a22b6a0590e4b16bf041b209655d1aa483adef8cc5261de39a557b050955b517be6862811765b72ee13601eac3cd48fe8483429b1a75a676d6239acc6cdfebf3cb5b0fc9b7adc21f746c6483c849f276f2871195db8ef6a29c6cae92cf832b61fcb9da4eb41f8c7155ce83decf54821561dbe71b89953d53d6c88cfd9785c3efcca38d39a0cbfeb9204286298de53e4ad16db55eb0582667fd4f17f0b0c99962f45bb85b085d4cbf478e577af160a0543f45dfd55986820123ccd6a441ea03dd5969402b92fc59251dbe20a2679151fa6463f0677c20792945a2b0124b53b62bd9b738a1c76da9e5539dd6a4bd1f2b7fb74a9a166216312bdc06e5212cd39052aae91dc67e362d46c54a3e5ac944ee8fae3bc83c9aa65fa279124d205b9d49a250be8fc36d02e1d97ec2b94313e1be94b88eb7c4283ec81e7c885afd3ac1853a954892ca665114f2751d47cc716334bf35152c65d81c0e4496c39367e98d8b095ce73195996016df695de3214a1cd4e615954a2cd39b458b6706a0e8019f6e2bd98219e45b32cdf8ba0aeccbd6912d63b1591c0db18fe71400119741c390c145f8fa6fe205e9de93e79f9fcec2e951427a071d433c5103eca314fbf80609918431b49c940fb442e0a35c8508a0b2288d8084e8b2214d5b4a8611aac4c0566a8369defd7fff3e33295e3ffd11a1597625c08df888971359dea72d37e0fa40b74e33af2d239e767f2e70fcb483c35612d4806c8c2cd422de8e2b994bbfa44cca2b7fe21f73ecb89a5a98d80cd53205c31c83eb16ea15181e9e7ba008175b694b4860d8fb4328062cd69692463e8d785d750197e19bdeb1be9e11c2d7246198996783e5cd9acc7f44db5480b6998d5de890dae7d4d605be39b7049268e54182e2f7bd3b2fde2950423fb0989fe611e77bdc3169e8a82c85511eba5b4ad52d5dd71a0ad66a312812cfdf286fe344c5736e2b56ff7eeb02f5e868b40c4f0c076e27f3698d87686d94e23e16b296db3bb2255bc770c43c8cdf8c90531a786ad1705c45d5341485db84269e1a1c232b040ed8ac6ea4312b5a29785edd2bd54cf8efe52142934a9b9f60512008a5fd1a7419029758532bb43f4d259da1cd4a70d01dedf3eb51fd4addc4371662bc22e8c6264eaf5bd162dd05ed314790413f2c9ff6630898431888c571514c258c0c78bff913bd69b028f35a0c2a857d93b50d21dbba90171374e4901bd0473d72645ed66ef3cfa616cc144fd20249f8c308d627a478f2a43c381ac65208b618063fa20518d714265906a9782ea9a900e1d11307603b0fb3edffa3ec0717eadbf0890cbc5ab77a96c48a14dbb74a1322b1d88e6141accf296f48f5bbec4bb4225ed4348f40e866de1cbd6473a95d1bd0c6490eb861379ec5e78387013a82eb8c050f1a1c280c79b8600a6f38842f896e2ba3112efbdb135fff58bb68e30ef35eddbe6749fc86c854958b09f150d6451fd5288b9cb604fe0e4e982b79c725a9b027825cb31091b4f818671875b5d20bcf097347241e9c0541633769cfd0fa77c55b37e238cbd12a30870af0800db298de52f130021285eca69e0a4f5b9f3e28a70fc7fc265953085baf37e8d50d027f5c2a1c4c8a367ae25bf3d59249e16f29be18bf01afffc8e0cd7c05e1bade8c5150c0883dfe085c48568829ab2364deb702fddaa47dad33550d474a8a833e73e7824260ea4cccefd9da6b61b94edb019d20ceca17841979397b4a66c9641a1fdf4f5a2523696cfda8ad0371045133e3ed995ed4d19e64555345815ab0196cd15b6d98972c134c2c43e89e8f0ea6047f481c4d90ce0fffef49dce0fecb1bea8f3548e839e72b70b46d56e22c5fa1c9af9ee2b94a1c8d22fe94b20a5807e496c2f07ed32a5d8f2672deef49a23cd8c75b7d2ecbe613255e4a9424ab6c55abde189f459c0034c1713b6bda3ebedbf07388d88903e258b97cc0a44f7b4d75bc0730ae5762ac7dde7f2f90df51a1f8b4a62387d46aeda2d09ab645026bb9a25a2d9718dd0910edc830dca152c3da3d9e0d40721abb64d419ccc6764771ab0397f8552b34a37fb636f555be9ad706508936524867c539f83aa4ad62e23a55f95b64298538ad98963f424b8705da8cea313893a301a91a369110a589b040c8baafb6c27e6b500290b5a2f713222449daacbdaa67446c0c1bc7055a20d63c5f6f76b418e07319c84b4db159c6ca7a4910d13a9d2dca398d11e58efd8bc2e34712cb840e10f3123c5dbabe56933fc41caa131de87989c634c15650b088bba36b61938d78f899e8f1eeb64c81697804a08c44be8882cf1fa905d889ec5fb3879c9f2ef7032144fcc0a1e259bb5fcbda31c777fd4ebc14041990d25d8a867c2d20798507d1d81e58a578f772004230c751d3c1f9276c957ddacab3a6b4d3ab923bb8b2748223f64cf2c180f522a49e3d04fd004f9de388db39d490b21097b94cb4a28e9f774b48462467fc9a19d3c55f2eb60e4de3909b6abd9a4dc621f9ae308aeb536247dd5779fa0c00392418c72f9e6329345f52b0ef5579bf4212386d855888f16edd268be8736d048846d8f9de3332631f1a5c2804975e28c1223dc1000aa77a1319b6b7a59e98b8e5c1a3a0f6c7143f671596879b210be556acca02e66f19bb7033b544a5ca4154680c8774bd9604ff2336af7ff6283cb55ec5457961f17f9d72419b1fcb7ff1482368fcc39f8a98322da2acf79063acfc211882e7ea70f0e4f88e4c28cc96289810160b7b31580ba3ee61219aa2b75fa5b4e7a6b685410d6e354e535da2cb43008afd6c361492cd280a49faa0e801aa6a35846b294c4e51dc03cebca9a483f0c865ae29f476877439b16f3d17b4469eba15f54226dcd0ba752069f944084983c751089d4fc0566cefda874fb4a6cae315cdb9a7ec8c65b198adcfa491be8682430bd1c8f571cb7bad0ed1a1e60af4027a5d476b8c7a44b826b5adc0b22f81ab1b0ded32f8daa0cf19a6ccb31acfdb53a6164614d80522df8caf8124cd3f5d43267cc79803b99a9d28767925b79362ec36cff5e3d430a6379788bc28e6654397ead05cc754037e0ab5e40692e2f050566ec0c91bc5f9df803b50664fdfd82dba97a595e1d80d2966bc04a862beaedd811fcb6f125e22643688bfe7db09b103a41c85fffa4d2ba4332bd65023c3d5ab6b5ec344232f9ce804b9bf5201712e64e313d4e99243590f857a22d7331b3641edb2852aadac56e29f9f082a87b3e8aaff03e7aba1e93d22550951656827c4aa024d7a8f505546aa0add11a24a0d6876e990eba2b5639850dcb7e917deb7eb25a3dd0a39a4415c5a4417f09b9ca52cc6dbac628f0a4503bbadd357aade3d31c99734a655c8d38b42d585c32526439ee642581a46b0bb71c8d3f0ceaf69a5f45f980a3c359a34d9811db240b4731437ed493608745475c1b9941ad6b42f687844a90ee2d5cdcc93ac3165b0416a390c51a829a5a844880e7d25fd738878b12fd3217db52ce4a8d054745c214c8b7a93ee3a2686db2b73e85cfce09ff5df090374d68474ab40f060d6a889dfe915d54bed19ac216a18d456cdb66bc25543adafec9e44180aea6c219769aa34bab6aaa468cc7703aeae13571ad0359ecb92f329e75d1b720e816a2f29469576ebc95d3f6dd3cdd622e7e7e73154826540cf117072a571bc083e14d4f48d50958b22c535863d799b4adffccfa40269d4dd2085fa25f125fa8098423f9004036d4984290de53bbc7ab60df72b05d9ad4a39e495d9a3096731eda66cf965b21bc3416252255e7116bc726ce5add2e7dd3429e78adde5d846d6d805f98dc220334b513711cb5ee2b4f356e9f7aa99f4a3c1efc5693b4be1a2ac1ba106da9278384eac849d4c2cfc2a485d16579b52a3b736624f507331e9414c3698cff3ec8ab4c188005595aed4d94bd4fd1ebea89a18304bcc0b77cb653c56098f9c54be82858d3af9a2331a4e220d0b53a6724253d614d44e7b7a937b2d76b7a00ac08ecd1661df6c874b7e070b4bacfbd5e1a60eb2eb7e04c3c994f006f9ed881a906767db24e8f548c1e493e442dd1731e2a72d8f8459dc51fdb784ee0e908cb166c2992359060e5c0f168dadbdbe626801d741558025f6d9c4272e1352e168f84facae7938dbb4458deed336905926ba4100a2427e86dd3889b6822310c9e645c1d51663709b687f42a1b43bc591f002ee4ff0f9c8e567fb7209dd21f4e9e85488aae7993ee2218e828c57aa062fc45ce440cc139527ed0da7bae1dd21939632c0aeb0734b7639fb41276e20014cddedff17250e5f11c1d1caba72ad7a05d339cedd9ebc94c097a2e38e0057c69fa44e974ad8b60f442fca321575d19e99c2070acb62775b1ad63cac44d71acfe0ac0d426556fafba627c8692d19b4ef5b487aa75879eb325812bd78d3e933f3259d81c4243dc4d0baece04a1f8f9735d7f418c49c3aee82fce834dd452cabc8227ef8e48b3d5c09854176545e833db68896418631fc8526bdb717a5d0c2eaf32c6a217423af185738e7d83feee69c6daef9e76088d0d43a0daed27a51e5350c5dd71a3228a12f873311ab8dc9ae40af920c221b7703ae07910fb6532900170429f4e956db71f81fc229c4f9a1927c15f2b14a6c62199752d56b9929e046883936d4213d59ea3a095b6ebb1cc4b125913a1792a16c11b7f952ea0fdba7666fb858ae710f50f816e04e27e0479cacafd5b39a8b2b6e73a1cf397a3e616d2785ead2c98459961484c402ac15fac898c9b08062891b8636655b16ce1b6f509157409da2ba3adb2b061417a885ee5c3eb4b2967de3571ca0f0ecf33664dbb888e87adaa46a0b2b2b923d217b899695f89f197b34617a7281cec0213dd258b1f07be1a2201966479d631b3de285a3934f6d648a6e4b3e929027c75c98fa171696ec267c570df1c00ba7981f9c658bc0bfb0e08583208cbec423e1eea5426528171e8af2c9c17572d395b46a42b989726ee3bc0ecd0d899410ab92b37679dcf5e8c129b136913718e6c0bcde321cd98207f744bf7c506335dc7b771adb5c3c074d63002e632dd9333c18545332eec187418e047d70f47c559fb0122884c0df81e117c54df2330663866f854477e40cf91a3912ef4d6cd2e8306b8752cdb40c89dbeb5b86c4d95ec20fc961bb18ec3d7f700f5931f0b5225038bb523d32d77f25f2a8a5507a4422057f4ebf5ed51c2687ec401e5064df1613bdb93a5d32d5b8c75d9542c2fa113d4be31b0ec201e7cb1da04acfa870d860098e40b8944b1dda9dc46ef2bb6bb841931ceee59cb152b1590faa68ae8359d86dd4b90c6a99fec033756279e77f0b310c83b726c9f076ae68d61ed2ddd4d18a5e51372cd33176f777e178063b1c3d61d0a3482c09e23d4a7b750b839724620edfbb2f6cdbb7037d28de5f77abcbfa3db3c991d400e28b0da4bec87ef8a89cb02b46e2f91b8a95af0c8a3ef863606223a3a2032ea83830aa5af6b2808ce975c528a8ef2b643e3986cc400f969a987b3d898c2fc2fc4a293f6cda10036553341447a6f6c7219fd6d8b62c6ff93c1de54de7d3dbeb480029595b39e3cedf04124fa04a71518c593e09ed89613c5554dd5ba408c030a90a82928d24118ccbd099fb81b35b4e5822cad5812f3cab41a44498529289226efc37a00a58ac911f460f7516a6a07419e124a6cd90c0d70521e8db802c131fdf42c4e3c58382db350774aad2972220e277d200364656dffa7d09168f99b889d42bfe214a401f597319061fdcb4923f54ec25ab9fbf6c333bf7a7b7d5e66a05da567cd349fee70c0ffb4e3eb9c5627a69b4b0abe3e204ceb117b52a90677a390be5b6c1dc051255dd836e37c25cb9829296a421b27fa53592a5fbdcdb775f0d6a182f6f2a65b6296a6e7da58313a443b3fa7547ceb9484dc812d660fea5e57d29b3d5a5e6aad7600eb74000079a85ee4164ee9f337dfaac68970689a229bafd5263a6e7b0e437c8e55b23b0d207851d257c472a074b1a480e918f59ab8f697a50c0c22a5efb7c5c566dbc6ce0f276c4203b510023f307fc6a37308a1525ccbf5e848b3b1098374bf2adcef0250623b3dab41479a06c0da19c865e24bdcae223626cbafb42ad8cd860c4419afcbef59a8f1191b9ce6e00d735e300eece30084ce5bbbfef45ce3b60cdd0dc2eedf1dfcf36df9ba10174908d34f4ed581688fd221a80845232ea0939a9a4698b2b4c0764d5289854e4f89cef2198983a1958ce9faf60e14e5f7a0a6e3b84f1ac48ddbf5b46dae72a1b065b11e99b94ef69464fa607b74fb2e74541f94b63740e7f333e399f5e9d48325471c0ddfea97c06f26078718a2c80b985d143ef60535f7b03c77aa39ad9ef524d5b082c64c5481335c6785f2ad6754a87f670be3b7a85e0e3c2c5911c96bc26e96f656f1aef4029c5edda5e01917df01124282481eac9b9212e4dc33333becf8bf0f933f00c8318eb69b7eb5ca61ad973880c7ad5ee90eff57c41d4c1a5f6412406c2dfc8dab4f9997c5b4c1473e8bc6971595029ca8090c18cc1cbe510e20e4f9fc30966992c3258c5847467083936ca9c03bc56dfcd0fa3b553b949f911a9f7e36947ae64f5c43a5b52c2075de366a7872fcf202717ff4201f3d17f78e087147607c96129246a588cd6777743b631889af0b7f03536e7737c8006463aae2602851e9f5e9b8ceb61964472346fe70f4ab692256728781686bda60759ed7a691257510ed574d31388f4dc22a7f2acd89af710117ede3be9317b9a49b1cab8c2ca7a65a53af06b451481d87194611a03e06bfb08789a8a22ae8a5abe6964e362582b94df7fe4e465dd96da321f0723620027c4e37519488067252640198d778235d3b535f761afbcf42f6400aa5c3d34c90b5d0f459dce9dfac3eba0266fc76521ec50287b02dfaf4b040d7d20b4d1c8e01e541fd7bf19658d1b84825b4ceab366517b47fbb01079c04170b67ae45d4218938920c03df5c861541ec93f57772b49cbf26f3881aac4015fe6a049ea6c834b33353201b32121edbf1abfb26d4cb91c7ce63469c09bbc6d5bff60ea5bc9e3858337afe47969660d8a2e7bea54875a5115fec9d5b40ee3d860fad60c395117d0bf12d704503131deb641870813e34c8a05d00e8fdae6444407b2050ad730434d61279e7524697cf666f2df00f4e410434ba475e68ee7b9afc4bceb794fdc18a86638a117c671bbb0237246570c1aaba9de60bbeb2f23a116f41882a2f92ee5654040d48da70852a6e06278dd41ce3709bb955a2d6f50bb1d11b66ba650f00fd176f4f04287baccf7ef3498256561c0cac4270842e777f5d33102cd5701c9a574e4b8134fa73c0761429fd4ff42a0ceb749c7e695f46e67802e0733e939b406bffc27fe548a1ba779a89ce4785638261da710d0b4efa6fd962333d47d2fbd8a90ab27527f29faaf0d1931ab464ac99fa6acb6005a33f0faae45b8fe83f3752442109c652a3dac57c2c85ef56402702803adb34580b505d54ee40b9f5dac7d8798c143ac38f7a70213a67db716e9bdd5a18b191297d90c87bf774fcbb806243685c582ca246e24667cd40bdeb4638581561062a228bc459f825e273a992c44e2e344cdd77ba2c58600b284399b550e0f3426d51875ec346c57d42bf5e875b3b567f49765ffa44795a4c3fc398ee2af05a9431055e59b9d423194e0a6928c1ca3a72a3b9882743abbe27e064e2192c3b6869edc8307c2d6e89f7199b3e44e612ac36d79606975e87a14086e55ba8f8c73ee80c67c38ae79d9038d80de76c4f5e7d44d4211c358fbdd7a3232fcc599a3f91205bc216615f64b5450abf5ae4bf52ba2c811fd6b225823db7a069382953fc3c7e39a58ba50c0d0e649bb29805d89337086dd7f42ab193a0d9a275a801e3a8128d10c93d52f966d60ee5d67a72bbf33e4d9957dd1e4b2705663a6b62a54dc069601439ae9f5e41a9b87154f5083569672befb572b42b05962f9d44f4389a28b0bd8050533244325429cd8ca2ebdcf23250169ab86334aec9c814653e7f6313270b8c51acb6bb6bb806596dc25900403cc14da5a3485c467abecfe1a9260964b1bf5988688ffa1ee8b058c4699c73fc077d91f2028f3504e2711b4f53f79a4157f014af11046d40ac9becb0c812e04cd32a37bceda2c23fa46f8faa3e43308e318a3ce5eae113397714147caa5c1493cdaeec473c427ac6c5279064fecd64a8f357cb3d87257ff3e762a090f4f93a33699f15f7d9abe46f8d0cc3caed27e987a504dee6ddf182eef7f911574335b6610bafa4ce484ad1c64ace037afca968bf09ab916068f57e5930a0d538af1cdabeb8a0743fd4e98a5b1f669af3494c2d32a02e345ace9dcc2ec1ca7954c620a0e1a50f1220e0a5cc6ceca72efc3dcc8406c17688a7cc070c42984808e28f325e73c180998b3eb8a06d74ed4a0f668fe6e30df94cbf6affe5032e5f83b09be2e3b6241a2550200480884a180dc2d0ae00dbe22b275e0a8f9da5b8eb5de7e8390f03112c501c9763d1d0921fe5c6a275a7be23f2d741191f359ba55f824f8d7daba1a92dc5f0ba8bb5679ffc21779b916af75e4cf2d2f96c1ed8f94c82b868b25bde84ac32de4d4ae8ec49ec0351e603fe543b8e5e41532d9f9c7b1e94caf3d750a19ffcbc8a6b181879ceca0525b718c035f6936c917f3c7f4ce3f93a661fd47fe1da8efbe20e7f52e2f08995f903662e7e51b6d9ef3b094904980b8bd748022a81442f36f85d451e3618dd4f9a0955c08128c61112385f38c0117afcbbe3ef39ccc912be25d882d2885b0c3dbba55aa30797000ef1cf25e5172403812365bb245532a18432fbec137c3394f3eb96512c59eb38e963262ed1cb84fa7b6207f1f5d02aa18df30acccd7471ae26262c3bff7816b7339c929dc4b9fbcf1777a0c7fbd429363f86f701c6bb83785a9ac165ad1d03334ec68e05246ee8e68c8621b954fcc10dcf4c3d59cfe3f3a80ce89592dc77033534d4c25f592ec8d08a084b5e5a54dbf30d811e64aaf0563559fa752e27e7c20254c27aa3bfe95b3eb883a9d39175a97b294d2f127aa6fec30f0247da515a0593f92ae3432e8e0551d7df181ce82ecf59e1d517d708b975ea9bc869d100bfa1ac89739224938a10398ca1e09a136be54064a0326dc991f75c0a345f394f7c1112b77720d5e5e63f3b9cc9bab33b761b01800613f214d53aca7cbe6e96dce8a102fe721d2eb0b558ccef2f4cd41e8b09b3402874e1abdf84f1a6b6569134087580c5890e50e2b51432a26464921386783bf6b9781c0f75d9361ce34fc49af6910aa63049dae94a0acc0ba6a63bd15fd85b0ce663814b0f91f843fa69ac048dd47946aecd79d699144483f1fbd9184bbf4b2d16036eab7e8130d6608403455c64a845d4abec796d97f08b736991c87069e636bc3fe7f2fb94767c2dabc3292c33749c70460e22d57cfb0e5ab9430f3d6228fe48e38cea9baea452e62296e1cab5287aa290aa021d3884d12f16cf1cadc4000b1d0502e6baeac1210222549dd01d29a12d25980efa192cbdd20cce0f6c4b26a65aef7f29381685cf53752bd2956c0d19eedaf593e3b06354bc50e702df562ea8bc3b6e11de9cf33a53df2c8c1d7deef087c5b6f1e1799209451bed28a859df22d3ef40ce4f7cbfded2ad66f4b7d493586e3c7295ad3d7ebd3f74aba4d21002cdfdaff2b9395328982c0b1a7fd6b22a474715b85d3450d07c7863e14de0d743828ec00ce11db7ed3c54b136194c75149ed8c27e5ee7c0431caa9d4df9faa9668ea67fcffbd160f25c85ce9e063491b1266f29922ba9af0230bdb4359688389741567622d4d43403f1538b4c7866f70a429af38379b3b8c8cde9d3e593c8cfce33683ded5e7a5d9ebf7dc3f6dc25ead2fb0f65c1fc326c5f331ad4aae79f1bf93c5b52082e8ff13856c6f2f08fc6b5f25869b1f4d748f20213e56112e23887fca07e1f24c261d06870fb7519d23b006fa7c42f47406746f2b3aef3c763325bac02430dd474ff48ef809dc238e150d14b2b6b040ed2ffbda6b93c4a3c0bc421c4e29dd90fa0ca86d29891ed356d49aac83af263ef8aa00361c4563d974507917ca97a0fa1056c68c539510762f4bc3f442b7b58d4222987cf75232169589877869e838fd90b01e6c7cfe5ca209f958587901e1b406d60bcb50abe2fdb7b492e9a4e152fbe485bb6a352c16d28dadecbd7c02320b4efc880d96f55fdc92cc48fca94b335aa21730cb37597a3aead4a12f441ce55a8447f469bf2e7a24fe90792abddd584244e711298a06d3bd77c9421583cfb52d2b4c3eb17c8588d7c30aa330de8ed8944eb0f2e3a9af9e76e36edc7974f34b74f86af2a579a3cac18e02d7e6dd053840436b851e2deebd63bcfab10e2f31827f90029464c7a28dab3b41e2441d4d67ee64bc970200b2650b3479591b3e2470e7a93a22e77e6efe6822d00d506b913b83f724794e70036b3408110404f927d3298aed322c89bbbdf0b29afa635b44a44547c4487b0b921496d74f0ed9177d41ba4aed7298cabe51917cf2f3e73cd444761c4a3155d35cb6e7db0bdda5a2f064876a98c55a6d9301e8d62104998897d49283fbe6b0b6d3a08c4922b6c44af713ee1b9776715e2e687671d077df8c827d04636961d341a910bc225e21de06d0aeadcc02014c98db327110e74db1d44847af201bb9f784ce9cf939ebfc7f23fcea222a1702bc1cd4dcc1b5452819a003578d1f4fc12913e226dc9ce28b76484311c93859390309f63d5be43cf542b0a9dbf3095751b76029637585507b02763644f54333a8672d491e011a8b87c7cda0404621ea57270f029ef9d5da32d7e891f7c27f6a80d107fae9222043eaf0e661c945795352b81184c61c4ab04508e3416d8b51f69a51e12111f72b8f88840c6eddd287d9f48617776c958a5281bc873c199baba8dd81ab067957be597ca467993501144016aaf4d86c0ddd1a6f694431d5cccb19e7a4787167538af8fe1c1c427292d64c8cee9cba11b6733312c859fbf10429cc9714f77c26e16ba2ef0198927e95d7789de0a52a2278512d51d344cced2a3b56f9c4792123e9c475ebc5605eb5a2f60aa913c605fa9664802879771ccfd3ee443cc4153f75186864b9ebc80ff3491bd09e5be9bc35b6306c335a2a92c0ca7bbdc631908a33b4fa266fc245b2c60d780980e86f126f257b2666f8b194aa12c0142ff6016ec178b979072f9a38db89e2b62c25786b0ca090d6104580f37eba1229483d258b733971e9b6a19a1a24d8fffe3fa678526f36235c26fc921244ec1d348c443b5d4e15458808cabe0c6fecd0db35fdb598c3f161e89dc64ad83714bff4724ae9dc22e2769968a0b033b0da66665a35e99faf94cfc2c4963b9ba5355069f951e02cbc07167ebbc26a66c108da2dccba0d9837d506e9a0b53b9745adbbe24cc4973058c8115c2192e3752a75a701974166d7943863e60e9b21f157ba864bceabc4c4afd11a2b812af381fc036aae3b26806cf954555fe6f0ba70920b994d0a3ac5b46bf1b21d1d976a29df4b509767fbd320f917e8b888dbc822edc60b549f8eca32e5665756388e18e4b8a92fefd22595e3eed81cba3626968085948117945ec1c6c7d5b20e61594f1420d4c9556f53a254c5e1111def17c6df07277704b8f80ec885786de8b32f704b1de26eab818174bb552d6a6c5952acd86bf2d1515b120475e819a2c4d6ceb61132f749e015ea45e98ac34cb1fcb1b982cde2479ad4d96617bc712e5fed0f564001c17a59e9e354845bede83b3d75d78055e49e8e163a8c29a70b9fe006fe390d2efcf0f0c1ea9b33f73dfc6ba3d06ffb153b61d95b1baee3c8ad2eb75d2c5d6e14da9a0dd5dc3058700b4073a098cd28065bb7ee2df47baf6da8914486badc5c7904fa08adf6a821ecc11cac1354cbb04d4b17531bff7c43ec02809fabae76c3aeffd2a5b2a7fd4fa05c5d5655d12da3025f74065458f20eb9aecd4bd17a0850fcddd79a50680be5b4a741f3d59acb73218591fa13f17452093fa87c30bee32130d79c9bfbc072943bb0a83ef7f8a51d2a44c34e9cb3371b1b9ba3ed4b3889c44d927a131a93edf665f8ce8810ed86b66f378e7fba8d96db4e2b66e90900f1238ee0ace71ee86f46be2d016682d2df3c1f6fa0312ae3de68d645ca26a468515b416f115d1a8b159df874bfcbff70e83c5dfc803c86b5f212d0b8874a294a85b50d6cc1b58d2978d457a9a87d8a7410d5ab981ecf041e36b1f94f4d9aa04141259a8a57152ab2fabc4f05c7c859329676a25491b1489a597931d946711b105df4f964b1bd8f26940fe8ffc059d271948f780680dcbcc1e31cf18de152a62222dbae3c848c1d4d9c552d47ed7c27d201066a7e000a1d5b537cb62805f0c6aa30f3e70aaaa1428232892428978e66d4547e4ac7875cf536b3a4142725d2da427b87bae5d4c09398bae6102d2df3d6d13f19ea8bb742f479b3529ba988d4cfcd0a462f7fe82c9300cd36a8987bf5ca80a08e45c13eba026cdb95967e065a468b1d4007ab31f3058cb78685199f8e1c5b796567b483e662a36b13bc4cf175cbced2fe93e7cf83c9d1b36aadf59d1c175a8c8da02cb1c12219ecf5b5e792cf5655a12f37fd4c55bd7045134ce133e53595624e87464ca2870cc0b424fae1322e0c991f65d3cc796430a9aac32ce8347759c9ec4ef8cbf3499ac5ce7d538609a5a293a93a506c34049540d9d4ec7473ec626c0651750eba3775b61c27622c3f798a467a29c7cb71a3688472ee0f4fb97523ac712afad3c267a195cc7d75b58ecada1e05c682384a58aa786779000fa9e99beb34106ae01846a59296b1cd013311d433f41afe3eb561850f0e0db055216f38f1ec597571b197a9aa5f8591b999b0ad199ae810b29cb7f1821e2c76301ff27bc8c54460bed4f9206a76065d8ad3a23ffa90068d4a07ed0bf3c78dd90e33752d151c93a58f5f197665485a42a333ec59a5a4fa318305403059b06cf1780dd2dea1826f946fc896dacdac180f22fc3d46213edcc3f9c9f8f8deca92e2c930baca680b1a2574261f23ee1c86309e439ae11ae39ad8fb9cbfe4bd98f5470e83103a01411718ca8ec571230475f8597d3c4ffb1cd1d2ca15802974f62c6b47f992323d4b0650b96fb2516180465ed630bf1d6ee4482a1d6899007fec7b9610e5efb30b7d4a284917b082969a3f60aaa4a5d25498d2f4de90a0464594566fe0e84143fb4a592242c7fbabd92dae796648ac2438f599e361e8a93a7a0f807e6bd01a52290ffb93ca23a16401abc6069000c42482b7c9c03e4283f996ee8b7cb0310ec62fd8031c491d8c39a341e3f0a13a2050c7debcd26a9900b285eab07ff3831f6219ff269c914b00490ea437aeccfe751bd45293de1f5a86191af5048fbccdb5701655907a09455ead6575a06808e3221a1d6b54dd10717ca2b6a0c9bc36226e1cd2c33156d716170e9d46484d56d664e999a7d0e42259f24c63786008360d342ec3aca3063b9059bfd332e05a7b2ef594e7aba3ce97226bcaa8aafded01ef5dd7ed6df964ab1532912915f8b00e4c1927d994b4e1a5200ce477442b526006735f378f36ee224e4c499b7a284e4a9636ed00f3b4485efdd8fdd2d476b998070b29fa0a3b38f61ad1df13f6c87a436b6e0e42a836ca2fc8bfb6a411d21b204c228c88a449554ee519a3ced0cdc95fb8f4082e8c7b0306c1a89e3a46be674bf96caf0893a2532e9e5ea83035ee61e75edb3c2c504f263734d848de10e6c00e2118fac3d8cbb900d79fcbeb033becb37273d9caa6e21ac773a691b07963fdb6f59f20a522a5158a17b39470e84a697dbb3844b76f43e6c27531f7936420fd698f718083941d8d3b3990e674855e82a1eaa33a04173105bf4ba67dbb2ad23fa457747a0ed74f97771660c5169ef62c766e17440751467952c3ee588fb756618fcd04c060b1b844e6c733084c805baff8d7021842d083c2e16c19a28f8d856d81741dd3e593cbd4c852a6484fcd4177dd025c09e55ae81724ef38df4c00a75ca2daf5ccb4c49a054e6bdba48a8aac3c52da743512b012320b520d3e9d305f574cad916fe282482718d5e04382acb6d75ca7feb815a48097958679b610aafa929d3412eea958205e17156d41692719f28035ca192ee9577dfc380244433dc31516dfaa9833fe28d188ddeacb2f693b1836f2c3a0fa9ddac52289a8b75eeb76bd515dce24f4bba7d685461353988fe803b9810083f9f83e476dd5b78ffa1c067fc9c014a6c80e2895fe14058adc63ac3d43a9e5346ae0fdfe342d39f2d602415d106ec2124e746cbbc38cb6d266892ef67b1ad86bf911d17b5187ddcc3ac9bba7385ad9324b4071ee716bf12b3659c3807bfd8ab8afb42a54d35afc91f4d6cd1c0af4c6dcc02a534c5439a61d38ea2b2f21bfa9375da9741c8e863df56f070babb4bd81c871b9afc78f7361a5befc8a763ec38d9c5a6ed5c48c0f945a6d04a6ebe6fbe532ee0d3180e4f167782ba48fb697efe8a4914158a926bad6cf3bce75b6a5add5e161a775a88be53b033742b72ae25a741e3d7090a3a17f40506816b75592d4230346393c439577df68b7c63cbb8dac73619c6bde9e86e25b4d7eefc0897d4ba169580e061520da3bf9ea6bfec838a6460ecca087704c30951428928d48005fa7ed8f6856ea2c7958bc4b01eb7a72025620ff58c2e52cca658d5072c29bda20b21809d7ed6acc5a0a88577b43e2b0422e8fff5852229325d45ea4716518cb047c304473652b9ebe4c5301116ae07b7c6d32f470dc1ea22f376440b5f59bddbc78a784cf51f2adab1db9b01f97d853d5996ae5a0af3169f8dcc6d3317254c40d6bcb0997d5b5f1049afdb4b79f1efee488541fbc5bfdb407b79136356b07caa590acb782a22149367aa840c887ae2c510d37147d970d60c964ecd64aa41ae7162a02566956a54a459ac23a5213169c2e3f46d4f78a54bf1279e46ae6b62dd071891c50a4f88d2094444658d259c4e523e0bf6c4862910de4c82ffd313fb4c9168796b08722aa890f5bbfa12df19589d0598bab4a090246fc965b0e57c2a7fcc631c68313a8be5fe1e0bc63f7dfdfe01597ca15e8d5d28128d4d0e939f414a05ebd4b4a8be53eb197d2b517e8967e421773079d7ef5a5df07658f00e65ff5535270bce9d096544705b7cf0c869c4fa7d0cb9fd7eb62573bc55c686bcf1343d5f64affb96677b9bd2765d67b3cb602857a5ba04fdd526efecd15003ead5243bae2ff7046533e5fdb6b6308223b29e24d0130c14f9da2124972e2fe6cacbb1f20ff3fb6182b771e5b9c1793d52c8bbcd4731b40572a26a5ebd1b1ded6236303e077d7257fe7666296bc4693e4e1e74f7755e5eb49ad4525e00706249b320d1cd947e113114a5214c6f466173daa7cf3ea680e54efdc54666f47a9d2f691bd3c6220a8d24add70233695b86d5e2399a5a8dfddaca85c9d4b9f3e4d2b8b37d379e730f9ba09f11bcc161a8119c555f3301a200e4fa2f50c9e775703a416da2045e42b60518997063743931b26cc66032191c83c4c7f2b82bf5d6e1a625e8eaa9a54c7364d9cf3982c2eca434e1652e560a1071add276ac08a00dfe2381e6222124c88979f42fc2b79c0cf2ce5de449ced550a8719d986f3ea2884e1bd454c869824dc762424f239c09214462e67b7c6034cb2dcbddecbe12831ae3b5567eeb7ceb42e373aca7e4122476b5a0a8bc618485b7bd69f9862c96a673d4eead9bf95170a00b48397d2fe5d9802d038fc7f263df8d49593e8fa6bbf2d3efd8b9966b75299f492b0dcfe5d25b9abf521f1b8377265bad70750c69427e0a4f510b78dc4ac795e4df3bc50024243c2ef83d50a621544ad1ea715ba962e4175f5ec53c1b5c638611709b3d40a555e0695feed00434a937fd3a35b515b723e89dd595898588048a4c5a8b10c413720d6d41822df4ad673e76bddf3a1333aef1f9cd32324fecafd5d333e5b5b586b5c0c32705ce7bd844a75f2898d7a82cd4f42c7e003c6e1599d702d9b14ed0099aa0ccb87b1e9d8aab9e54421553637ead3c608479b58c925cfc13ee7ad987b72af6bf6aee2a8456a3f92733877c2cfb61faac6f7492561c39106b6498f5bcad6517b5aac2912da18afb448c6a2e34a716e8fea50b081b3ec9de62473e4d7f50678a14de7137a19f5936ffaccef26dce78899f3ca6114e694eab64b380866c73d07f10729da7b4e79d0f66f823a3cd3338adb19a538e498669774d4f93b335a34253dce4b1bccdfcfecded5eb324b5f2980b40fb2d115d335cf6f057e2c933c0362cedcdb2c19d9f43e218bf4fe812055cb9f3f704417666b5b4f5b9829521214392db1a450eae112f4e0aff36cf75d61577d0e810783f1653fac970b91f9ba8d160a0a3f9c68f23e6b13e8317ab918a84aae37a03bd99a1c88ea98f88e5455a233d557c7052ab457736585d73af070a364556d7ae459884c2b76f5d247d9885ea878894892fb8ddb8760030b0c45df2e0f336fde97cd9a81e9828142ac98f28b8d5f601728fc7fda55259bc084865df4dc678439168384b12ae855663214ccb5ecea77e7bbbcce8b5a04d6357275e67a8a9b494abd42df8781d5c7ad4e10018b25a320ba3edb270acd20e2e122657243e12044092e9a488826945d0d084e2142dd7a3adcab13008c9b000e4249e02b255e0c2357156bece30a557af4bc6ce0e8afd481449fdcec0ebd39487e541a41df45931b730d4a70af7d919bc634e78329aa54481b3ff5fbb63fc833fae7e60f948cae52a4383b431b0f59d10e79fd16caf40e502bbb1ee433a526842a953046fb84e6bceb2980fc0735dce5a8c787effa6f03c5bc8355c6a065bb052bf6560e29d336008302dbb17d5c1147419605fa0c850f8fd0774c740273a097a44ef8f0225c7ab983133e7c8deb30c93350ae7270aa45eb0466151160acf18b30f8f0399a5ecbf17213a729f4e7627f2a4fcca757667eb3807ed0c5cbe8444208326e92eb8c46b6ecb949a59f733236b987e77c91b729bf18d3aba3c9f7ded30aae2c1eb88e0948d4843eadd4cf5208b6957a04d3aca7497c2b5079297303c6ea953a298984f8406f92eb75554060b29299793d09799e790290d103cf07852d111f2e70abf5671eb61c8a316f9c99a96a4577ac45c413d2c4929acec831d1e642f45e5128ab54dbab07955e2cf66334a5d69281e1eaebc996ef07fcb72701c9a992d4c0bf97b7822707a436edb61200289a1a4e8f200b9d3f012a479a593ad189857e91d2a6a7b0947080ccd36bd9f449f3f4f0085fb2f88e340cb504aa78f29dc1cb2ad9dab37fdaae5881bbf08cb9145c28311e9b6589b509ab7cd269629f7c3c4e759b28b7578ca3ccf5be374011de71f198e2b50009ce750cc6112328038c860713cc731382b886974fd38bbf608ce8e777f63cc569c26a8a35bfff845bad43024158353a56aa86b104818af513a61472e626da6078e80e110123d5afca3a10b2fb48e4594d30fb6f2681256eceb2be9cfab58102bdffa936e9dc010d564d15d67336aa9fabd77a2d1752fbe0e6bb60b5409bb443c62e502eab060b80bec08b32150f8140f610684e967efdc79e2f349a2224d03ea4a150490c0a849409fc03abf01368512e7dc74bc91f8386f122ac4e236cf420c4286c860785c76f0598a353ca801776d0befed313e554ff9ca8f8359715df21f8abb460f7d258b119f07262a02798100404169b99a5dc24eb5eb9e63216d072f99fe05d6842bb3ee99a1c3985e1540d16ae3a6bb3b3db11441b80aa4d0a90876c04d200cea075c057fa2f05aad82b7984a5e419146a3580f0c34f5bc4d74eeacbad04ec5091c4b90a0d1b481626f3fb3a9ea4945731ee26a5f72e3920c917be812f7744fe7ebf97f6d9a89c28c271b4e99c87ddef04bef7a881d6dfcf891a40329b137d515b31cd5a54352d24e9d2cecee8045b788e0d8348bbac318193b714f9de3fec95b398a05e7737aa56662828a8417a2f5b2a2d3b72754659366cb6718a74d4d8f5b429c12231e7ebcecfebe189a227394d99d533636d857350a33ca4fa9b520a3d91ca7544fe6d967bdc99e225053fe86831eceaf9e05b0f58d0dd38e79ae2a03adcb1c48794868e59737de94ae50a15bf639966dc195513753ee4c4bd5413739886c085c8bd68ec556fc0a70c8f025af3496b5f30d415750e6944907a3ec7e0eed4ab6d284562c49cfd481d7451ee98935c95273e5593b89e4c3deb398d085061a506d1464c280071eb830ae18c2f5edb08b931c51be14f6a00a9bac587ebf77bf82d9962c552b9bf4eb0aedfed255b4a290371069e06b806a2120424f924499224f9b8856cd2221257221ed19d9018ca34709c04128056d2696db1eab192dbf2e3123fa146a7cfb6b019dd564c9eb04c722f49f846775a0960790ce47b4086f149b4b5809007c80fa13d5ae56adac818235aee980d23694d61db3d061c246286a0ed03580a1ed8b8769135104cbc429bee323b6c6b111c3f3c9beee69b01526f712443a56844324ba6133f51814aa950524ecce3ecc81b79236fe48dbcd17d85e7ce7be7138a2c244b5fa8fca16b29e858fe1ecd8e437c64140ab350c8dbed76bbdd8e1584b3e2fbbeeffb8aefa85bede8a089e96cb7376ff77c23eb072aa1d50ece8a3a5127ea449da8d3894031e812e5f6286365d4ba9d6e758e9dde81a4dbd68e6e77bb1f0f20cf881f644fd3583c8409e007e806601bb126aa8d9ec46379c9f47ae4a6522f772c1df59a1dcb2fea628f9161f2979d85036498104b89350467f71b24d6107398bcef8903e091560bd0bccbbc738ab2e44256e45cc6651d760e2a703b38c92386f3f3dc8dc31fba2643a8b5ce47d6104a6a49b56cbc44145612bb9765e9720639bb795bc8f6d94776cf26b2eadfbccd83b15a2e48555647ec95f3c526bcfcaa2713515611e2ac655502d5e53c02677530a883c1e08adbed66b153df86c9240eabfad17148de300e77a40d2fe37008ae7fe89a0c7d64d5ba67a889b05ac86e9cb18e300e491da9039b208e38ac669977cfb4381c0ef7e7903504eadcae856258373ce4b950688fc3b109ae91249a7741329099bc7b393b0e499da669f2c7e1386c87421dba76923c34f9439342d61a22a1cedbe5dd382475e330ef768dbcfd3ec5f147a7419dea389b77c31c94a163f94771170c0e01c7ca8ec3553f79d33496f42173c6e1c8846525e337b512c0620bfd4a088de10336122583a27640921d7290b908a17d1ad182b7f0fdca91c583ffd0d98404769947110bc8cdcddbbbad33532a2db31cd38ae62984b335166891434121ee0f208f9f0ede9e21d50ea566f1ef72eb20615cce94e2e7db8a4d71ebbc4d29acae3915459933c618fbc69189c864ef17c2c92946f187844463a81c4524d1440eb399c9d1364fa469964e23d2649a4ca691ca993a5552291952babcc1b79021b11c7d9e89c2344dd3344d53148954ced4a99242459122c7ff01cfd0e2388ea3c803c18f1a3f1cb080882990305103004b82f0021a3b3f265e1efc26d153c4133a90810cbe1b724b5072ec88412f0652f8e861af980740a041081d9d2cb4018924ea13976e4cfd2c3b7a96f4ac7eb61c57518be4ef27954ca62f995053649a2f325556913422a5463daf222d96bf4594c51b858d455114c7719501cf8f7f8f5a8f634a6306ac1b2d65f2f740ace2ef509c4ab06bc01ec7bdf7de7b6f715cc5d0e874021344554a00de1b638c31c629bc02fbc5bdf7de7bb37803f4cd167a2c5a2b207e6f8d28b685505c8d8ed9a9f8b6d08b561177da422ffa502f451dc76d215c690b7dd7bd43a151bd22b7f497a95d60696c8b5eace2f6853432714132f3850c33339f4c9cef67c51fc755d4ecf8ec3ec9144aa57a96157fdc7b14f95e63d05506323ad52f70333dace2162d5cb85871b1b0d47a4d0d2fc1b4b1394114ff44029e5f3ce185d9a178518a31f6760cddc197984cf69a85190018163132260a3332342d4c17a51beca2050d2608cf35a6ad841a134ccc7302305fe06082e4134cd1e685f9c27c81e3f9052eaf308e230b18e32d8eaba8d9bd5751fcadd71b330551af58a724154c51a7b843a159300750ba8161621670ccf35fe078c6a5bdc751a77bef3d6e020ca0446a21d4424874c1851831480680f981ef7f81135dac8a7b34c0dee2bfa8c18d1b599881701ae39d5773dcfb8535c5215df16771efbd775701cfaf473195d7fd0c58cb1a3d072997db1dc30f834b167bebbdf7de7b6602c6b2f1858c857cf4d2d2871e6c2432cb1396b88ccc17335ea4168c4d7eeaca5f5132c919af53fc7b87f01e6966a0e2f93b9eeebdf7ee27bd9e10e4f9b94e4f449de2e76657014bcf51aea054b852a8d20d7eac926a61ac32593432ac4af13c533066ad505aacd20d7eacdabbc5628c31ee4ff08cbfe672975973395ef3d883f101c6470c0a86062a58564e9e8567ac8afc8476b3dc7bef91e74c2856f1ef0e43837685c9c927cd1735b07befbd5f26c6188b6866ec72d3cc08618ccb4cee2dd3806fc5271b23df8aff7c51c3a8c32a7e5103cfbf5bac622c8aa259f61c3c9f3432e83fb53cd3c8b0f7de9b85aa6158e4bd633a30f2d6fd3033e0f9374ce906ffde3bc664020d72bc2186423e90e3de3a0426e11093108849e8c324e4a7dffa0a49229168745796854e4d826198c06aaec5e5dcd461901048a71955dfe0ee2cddf03f4b2b88ab59f61d169656b0155cf58bc46e081016765c59c7912647cb61f5746972c09565d112aeba5c6791ea2c549d054e65a20ed52055a802b582d9464da232d14a62d55f2aa930ae26aabe58d5df4212bc04dece9d254bd4677858d5f9d8ed806339e014c71adc41626438e46cb1ba2adc31fdabae0e47e5daf271759ae3ece9aa86f09345d457d6954a57df1d7b5c52016655a1aa30468eb3e74a7a1594052dad40d3e97485aaa8b4366fb5582c56e986a61b471b44da8ea66355f323632cd6abf41c95a751da727268bcad3f8d18db3fcb8b4886d1af5162d0fafa6d171b38e682db31979c4e5d74606b31291fbae880efcaa62babbebdab4d601afddf5527b08c7e96ae26c12ef4abba2aec6aabab2b9dc56dc7f4bb3a8bb36480d1a682aa2f96d1df42901341a1ac5ed91791d7cfc5860bce450797dcab02656b2bfbfa9dbc7ee9cabe7ea1d7af7cfdc6d7eff573d1adfa53f68edcf11d6bd7d6f33ee3d36782333fa63ef3ce00e954bfd9675cacead68b41d966060986d13f73041433a33e73c3ea4c0e40e076d5bb3663038e15c13339eb4fd36666e0540379e0d90dd101c9f96877e0d61d56fd626e65d557053a93c3aa5e597317792b299bea3bde561380059001674f9a6ee75a9defd8cc1cfbaa97ac2ede6eb6b2efac3eb4725796a603f6e0acfaaa6feddd3598deae0957fdc195e56f994aa14e77d7f8a3502a78ee84737ea2e928ddd074a59b96d085177056a5e956fdea50d3d89670d52f902a5483348db5c0e6adb925145b984a660bd2a8c50ad1b3acb8544a560b52a53356316dd426453b2007ad3ecb14cbd8b5f2dd2710f8995f33a5d2a24bc0b1fc3c6b7ea938173819a8f704c3e83cf680c064f6a1dbe16ceefdb058072b6013f605c61bae7d80d65ad7c8d83516b0cbc91e8e6d20b60e3680d52d63ef67f5c0d9dccbc1bdf72ed196358b3a4833291ff0420c389b7bb7df0bbb269aee2ead605a31565738d01768dd1f0b6f296c2133de7aff5ed90ddc6eb719ed49911d040da1e332828ead7fd881901db8f9a764d7431149cdd298591aa353fcb3948f1f043f532922bc854ef1e78ca282e0afd323af6fc43e8eba418955fc43b8bec1b9e9c6cc44dd0075831845a8f153d3b47eb4ac4046b94e59bec5cce6df3bef6c0ac1b50f5ce7c7ad792569b3140f805b51d07afb10b4831c7602c8075acc4b7016033780c20f187cc918ac8664c45f19f9161af7ac1a85cd020162e4c7b1fc6dc94392630a388b87447ed96603f3f00604027310ab31fd4a642432b009d71183fe939729498a1b0860996d80402030178a49d334099e6db60fbcc49a7bb2cd0602655c8002e43003fb4b8621c91019720167335b662640cecf3366efbd37890ab2f306b05aa232f014a12107646095059ccdbcdf1b4c6b5cc7f297e2ceab1cdd8e656c1335ae44f3f0066dc31eb6643881c87bf3d1910f78e101e710ecee5ed8356e866e27d46c718bfb04d60c353a743431f7e823da478bbabc0df3300f87676a67604504cee6a14eebd8695a0e1ac6ec51d419ef8d02c46c043ee46c1f089540250adbee316c1a74a0c3b37de02448776cc3496802079e4df716116c2290113e9c4df71642b0914673771d029f5fcea63bcb0c1b8934775f8141131b006dbabb84d8449d7148b4c233c48e9c4df7151bb60fe89c79442bcec192149c088710c2194408b42405220afce852408419480c61c396dfc435ec0312e88008222358818e9e51378ea32e97cb1d816b5a599667cb591108040281431138e270b7db78d33e9ddb31fd5ab763fa7337d60c382bdec49b78136fb7598bdb2af6760b06a4d698a312a2814b74eea05c21b162c0229666bcc09dfeed1a1eff53139cddbddddbbdddd3bf83fbdd5bb8f7f0440809cd236a873225f70b3bb6635b05448b98c2d2a53aa769e45a05702cff9211e0294eb0eac7790615acf906170801d770702cd76238969f089b862490808d7862d53c6842a6a704edc3f353e37596ad72b52a593294447e3d1aa8692c169232b4ae897ef4a4d72fc4b8808c1dcbb1580a9ae4d22a0273ad6448cb341df7660982b33ac796e34de7383f4f1c5a87e681c6906262672db10136dfd87ccbb1f996807ccbb77c3bb2793ad2cb8a33099bc7ed76bbc1c024276b9d5a0c1dcb403e39926c1c73c0c3edbbcd5cce21523505fedcc6bce3f57e2c5ea080a9b9a5b759106775ce37f29a1d83d9edad04e3ed068b5b149cd5b99b8f488ef3f34c6346d6a8db1a016e6b011e087df9d8861f639b68c39f6213720ca2f7800ce58b50d1871edb62283f43763c42e4b691de2a738190ed643a592b8371040f57d3643b70aa848ea0a6c976c0a91358965bf5aec96ee0188c296430869a26b301a71ab7bec878388e73dbb5981a216e28ec180b310ae0828864005344bb288a44d1c9555afe0647780383e7858193c34224e0000a3011505a216704980ac0112e006701a51b1c214ece851d9c85dd56e1aa1fd66a1a8b85c8c16eb01c180e5643d3580bd4e0e458b0394d4829a10c91634cdca8ce38868896a5730d68684ff8c9c472a6a8f42f89432972a5496ad310f918b6e27f611b5130c368152baec726642d8ae6481e214b372710185ae92677c7b4abe3dee612fdac44ef8887d16ed41b054151a55029239f8faeb9de7424c3b89a96693af9041e01f6fc443fd96686a788e847f48e7818ed4641463d14d1ab12bd29d18b12bd2a442f7923a3239fe9c89191a4e988413920cf10203e4e37f80235e18448a5757d6ffbe2683a22e008d79aada9e57ff2ea14682668664873a3c90986fa4eceb33cb9e269c4d8d06741420923bb1528cba3aabb53e93b9d9a86f01650eb7d553d140a954aa9544fe47fdd46c7f55cd7a1eb5ebc27f244fed76d745cd7a1e7fef7bffffdef7ffffb5fd7bd782f5e2aa552a1a0a07c50c1d44e4a97e2a57a48f5ce1e940fca07154ceda474a91e523c54101544055141541015440553bdb3e7ec49c1b9aeeb0255ae57956ece579d505054eca8ac9c9fd3e314fa1494bb7a6de0803d4051a5502a38adf5d1b1966b72b98b7273a4d64b63830677f6e004a2b45e55eb4db55e54eb55d17a5b642b94e2a3d3966b42597d4255d745414149f14929ddb45cf774027ddcd3f4d332bd271e4ebb53ef1484b54251a5502a4e3ed4914cbe341d1ee2adbb6b2d77c7f449c9f4d3424d3f3992e93df170da9d7a2cd3bb32bd28a657657adf1def0ea6f73cf95637b8632fd0916ca336a13ab1ea278facfab389cee0cab26c552418e6881e247c7f823e6eebeadcdd9962a6946e4e3ea514ea3be893e8ebbaa66b64d7e26ea8dbba3e5c8b03e272ad9745db99e874a853fd2c2a90faaa3f6a50f571b38d8ae408234aa8eab6ae0ed89eabb2255576c8ddb001a73556e08e0e888f1defaa4161d0136a1449ac3897853b0204b62ab876a5ec2b2b4b57dd1d235d27aa065d128b4a6769451daf2a7ae63ba6b2a2d5a9cb15ea3bae27bbcb55baa1b5add76ddfd7f509febc342a2aadf67d5d9fe0cfdbe690d361d50c215f569e5c79969ec3d2f234626c2b1e7dfd4079f55e4d5e43179ccb0daad4c95dda171d39bb2d5dfd01a6d1bfa2ab41c032fad1ae22c12ef49f5d0da674f5a70f572ca8eabe7e649b199e22af1fafdeabc96be872034ed36494a87aa9deabf7ea91bd57efc6abe7d2bee8c8e88b8e55ffe9b6aeaf5de97cc7de55bfab972ba1bea3f2277da6670678c4f5f9912a3c45566d7699a18cd0869b8c143241324a7c3cec74b93d93c38d55b7ababbaa2aefafc200858d55fa23338b7757dad4ba5f31d1b75dad76ddfd7f509febc4017a7d3be6efbbeae4ff0e7c5e9b4afdbbeafeb13fc7975dad76ddfd7f509febc341d5adb7addf67d5d9fe0cf4b533249342311cd8a32c4a219c991b72c0d011790700b6b538a50884119463f3f7d4945957afcad159739f2b01b67e8a410874ada24b8f1261ac13551bf3804d7c6de5804a7fa452098368a483f7a3ce6f428b109e4b356598f24922cdd8c1f324325ab9b823ba6571df7b6950848241cfd30e28d7ca32052aad1cff4a36babd76f0a6a1acaeb5f759a0e94d33d5d11900848241cfd30e28d8218f9444291502414095322a14a24cca84838faada2716745d3a16349986877e872d0b91144b233a2cbb53e46a59b716525892d516c09578458a5c9d1748c487a2c4f5cbccf04e97466a8d3192634379a1c1adc8ed1b4343ac2be93e37a1aa54de5fca71163637915254b90d83d8b4ac8e64241b76004675f7a7ba56f1f6f65cb9e691ac283844270b62544d17bc5a7d3544aa542517dcf033b0ebdedba9ea3efbee77b1ed871e86dcfd1750f7ce0031ff8c0073eb0ef542a150a4a0a0aea07f5a67848ed52bd5490940ff583fa41bd291e52bb5490540ff5a25ed48b7a512fea45bd299f68ead6fc24949dd5a3946e548f525a415c4d29a59bf14b1082e7bed362f51c1a6feba1fa9c1ea6a751da66083569d2c4d6030330f035f5259416cd0a6872a77b1e518b49bfa4e980744c7d7d789050a7ade02ed7a259014dee3ce274512d15ad9316d90ab584adb2952a01995a08f2143325e52cddb44ca7dbfa69054f13d069129e7e38f14ebe5310292828152764e8f47369a78e815c3e0ce77a7a5d52c1b4f3ee5a2bb863ba047a4d40d966260913abfed30434b36b4dc25d9bd971fa41b7f24e41e8f8346de6064e534c42149310651206291748d07abd7f8c12999f8b53a386144a922021badd6294c8fc3ab6b1746c3bcfd24d49f6feb37616c4cc372b32fbcd8a980167c1991238d59f52a59c339c5c396bcf599b326b55b336356b51b376370ba267e6d33419cfac0891d94fd364436645f466c05d93f99829c16316d434d98e9f91446f3e0bbbfd0b6565e7b319ea188081aff965304c26691357dafe7172d9468561720a0a5a1d85d180696e72bb06fbf57cbc1e87f1506c2c2ed4d01a91f08c38d355ba21dfecfdd19c1e2afea4efacf0b1efe052db0aca772c0b874f44a1e44dd26b0288134124db88cb031cb2cbb53f7cf0d8a1cb41e746e952ca2abe9b2bfd95084e31c4b9e1cc8053fda690f8241b811527877242d92f7397f1b08a3303ce4de4c143d3789ad44a8204925d0f0f91213d1f3c767c6695e50db4f79cfe8fe6d0486d3dc8a751da7a9465c9f9f9ca843b261beed8ec36cbd1a9fe2012b87f6fc12a96c9ffc2302daf9ed3d3a7116383fd0bc5a14275680f50207a04eaa24ba04154882ec1a9feb24ca143d9905d0a7be16ab4395dd965481407aa4371a03a5487ea501daa437b8002d12350175d020da24b5021475b2699fef9e3f9b9b8b8c06029ccf5c3d57331e17a5d4b5c425713d77005b772c34aebfae1eab97eb87aae9eabe7eab97a2e265caf6b894be86ae21aaedcb0825b6961b0b474a3e247d30d12053d8e670feb04ae6658dd5637ac702b1c56ed4ab7ca8153fd2547ad7665c9f979fea735b6cc056100e994d7305e9e57c5d9c3429dc0073e7bae50e09fe86a86d56d75c30ab7c261d5ae72ac74abddaa3f4595775a3eb3a028ce6dc7b4c80811313e5912147d712455dcf2a39f966e429f965610d7fcb1d24df93539631afa9c1e59f52918477072308e80e1c2500246108613305e18431853e054ffb962e56894473d4b6ff97c6be107b792b461869bcd6cac3c47607fa6fc7c3c5587cdd06133308c7e548e4e51325f4b723ccd80cb64a51b72e4cbc1cc7994c19e468cad3fcb8b4c506f4a87542e9523a52b4bce61291fd048006aa4287b34f40eab013603bbd0dfd2ee584ea73874aadbed184f8571155118e738439c2052cc3fbbcd6600512f6a08ab8d37a5432a97ca91d2854a948b7277adc57de9fd3bcc743a9d4ea7d3e954961c7592b9b8d98c5597ef8375980dd8458fb7633b1d309d4e5b3aac85e1601d2602988d55c36880d5805512766b0109d1349cdd4c439914abfea14cc9aa6549f8f00483530f27204ebf5391f4846b7338742b58f5b3884cafe9cdb2de7f44824c0aec4264f20691f0e48400f9e163b7038e1c7836797ae7770ea3b77bb2519721c1b1218b92241b09223fe0af77c4480f8f0f088eed52f0b8368743c7b2b2b09ba8003df0526551ba211fa67413facc624537b9b8b7a1a2a053341cc160b41bf530e28d8018f546bf5191212aa54a190151b4e30469158f82aef88ce2ec78a85c818a8244c3531494221aaa44c3946888120d45c3110c463d8c80181519fd4628e63f0c09e3afc18163997f99d20df92cccb163008699cc088ecd6a48021e2ea1e49310717fbe1496f4ac321e9ca64064950dc1bd556461379809308cfe156887e176acd5c9751c643ca170d7707242e4bee304cd98a61b3cb738fde0e3d356564c7261f6fe2f32c9aa67750abe5d1bdb1d5b8269631058a869a34f4f91c250d7806b6311f8b66b2370c76e5a4d1b83faa60498362a81d392a79e85ad2c26e25bc7170739184a87d5d0699b233f3f4b5f79bd2ea900b38650580c1cf8f8af2e9302bbd02f76d9b0a5cf6e486822137699129cea1f75990fabb2276443a2186b60d90b5bd9b1952131b632246ddbd3e58210b2ead73220b21fabcc074e8bc0bb11b86bb21d706cc4b106354d96034ef5e36037580d301a308cfe930ebbc172b0aadfa5c370d91c31caeaf4fb8a7efe8ea52bccd43956f389d5fc2dafbec22ef2af748c655896353f4bc7988675adf949b49ace363a6335936a5e5ca841440d59c62f3299ec25d5d189e9e8bc641c7b797989c1da366ddb58c6692c164b45f3d5d39696c7a9318e58881a19c3d234254da6533fc1ac6acd62dff967694171a5edd173c7b209e5321fab7e580e7683e1606dc9f3c278795ed124a1afd7abe5f57abd5e2b5092c984f273c7b09adfec28a400809600a0286013b6e61786c98fff73cb9350307bc7b615a51544eb888a2b2b49006b0ab69b960ae68ee573c7326905730573e1278c141c160600a3b4028e706f9ce1d871820880a24f7a31510cc0c04f6bfe1286c9bfa2cf909bd8563c49f692b14c26234de28b709a7f05da7b0f112db19affbb2c0976a19f05631a56d6c4aa9f468c0d631956e6c4aa1fc6916c23130286d1bb26f38197e0f10190329962a8d4ab58d259e9d0880000008000f3160000180c088504e301394fa2daa43b14800f5970485a464c3a1088c39124c8511884410c320600000030c610431852540a0032f24b565528c5fbd215b0ffb92b33c651bfe1e9cda66fa1780e71fc4556801fabf66c8c787c773a7a79804d8acc5acaf1ffba6131b0f6cccb7cad0c4bf669d80c555160fc027b14328c5201721d8832cf2bd8d04afa2786bd9911de5d93ae03fca369592ec76066bc1f9d584e57a0501da294127c850d780809ba4a57dda85173535cdc4bd57ee858e8a1418af455b5dea93e20593518f666c50762b87a4ebb7282805a015bd7eb7c2c57ca2f5a6a853ec1d280af50a5d332ed06ace35a4f37cfd8e783e7e1301ef8e212ed49fad7daf5df6422e2980cd4f2adb955c7e5b672d18c2c68d4b58172f7290589e8b001e5ee4429cc05852524e3f532f4594eb784a70a373dd3cc56bf44bca29763c3b1a486bf1d1fa1742d86ea698ecc80acb84a6580880987f9700eea8361c6a21b35d6ca6c82959467f83e555fcfa3533c27bc948c894a2c706b0082ac37d332b23a081ea94c01ed80a4f2a9470116f5d71f3eb22f0256fe7d64caff52c9cffe23441c237dcf7e3911be2020723e4a7555dd42222a46bdec3ff3bd808623ffefd174a075add0cf031790d18575935cdeeea7f40112c695c0753c28ce0a0aa3d844cf6c99095f4865b68a89225245622340e52be78818f3b8a1c90f191dce47576eba2b57ec4e2fc7db07d4afcadbea0f487dea861eb20175b36ea393a9872d0dcdb5aece9fce93b7b22135597934af840ffb1b35744976d83784d47dd25b46fd277109381a9c8f8af79b3518e2bf90c4c2f53b8106231fc98f35199286d245b5ab06bdb5ff54d1adc0f278f0f2b9e0a57fcafdca786dad4162ecad8ca75fc1a0c6ce4193d1b026ec173613d2bf427df2c910145573260b6dd49a7748623055e6efec757d843bfecd433b49a02e3d96e7c138549459244f9f4b49a661993fa35db66f4c90f80e000f58cb86817215a35bc48ca3a974ba9e729fae834879d1babdf6905dc9180e3f6d28b955317498b56bb975b8bdee2c67924af9a912bf9647295afc4d23e6754f0ac09727caee79b3f7db08b9151b4bc1ea60e2a7064435e245305498c972c1981e95159383883f884f91a5c6192fff8d14acd824234325112e4f4972e2a66f0164e90138a70a5a772bb4507191950b18d1e872d30436cacc77f871125f7904a915e29a5e63aef558c0a5cf6109cafe6a42e18882ab43590cb472d170bc330949198e62301d4c7a714547321511bee58ab35d5c52c8fba4242925c51880325333470860a9b1a0f9bd3b4a483b15807ecc94ac1d9da40204d835c12c5955785ce2c20f90b2ec791451aeae8ce2e2737c59b3694f6a8162fd27233f95a08bf2d9716ae7787f7794f9504759df06d33cf27538db80c6dd388ca59ef49415563c96cd0eae15acacf708b9b43a5da0b5db526686e298e626a3f96458ed76967492e3748714f885cfe1f6a5269e8ca2bc7badc80e0dad873dd32f01e76452cbb145058b631278faef052a51c8d442eb8daf9b4ab2df521abbeee5ad43b15957ddba9ab15d32c1c8a9b1d9f789ad3db7c6a8fe49f97b1f80cc65c25b392bcbd4d2f450f05671f9b8ea115140a14933aa48abed1f10195f9eb52f1992bf586053bb9f42230ec89305e321568f72621607cb1633b74c0f641d4be32e3b17fec4b56f9012402ef9175b5122b72a2e0e83c38d8562d37313904a0453305eb5f44c06062c898a9ccd6d829de9cda4507965a62c3ee58bfbb0e1ca86440a3539a3628c04d3f81e963341ef935e4eb346a0f2e4f423c5f155c48c07282d94f1376b180373feed2498080495f17c13a581f08d59ee77fcb2fe7fe7368e591945bec1a4e1903ef2852f60f116bd7d2e85072dad386e7a4977f5697845deffd25988651120d9e73629b629ff63a457fdcc41c8220cd911abbe79db987990d885fc151f6b8c4f5b2c870839702f64c01579ba8804e7f1c1bf37affba5ed3b0f8d87843a98c396beb32e61bf39f5ab0bf67495f32ecf5f1ef77ad4ecfc228a9619d93e1db2042183be1fd2f86cf7b4a1d0523c91cb71b8440490c0b5abb7bdc8dea3dddf34799e818772f183dc243b16fd562443ac0b89acaea018d59c5ad70f15919dc3cd88a11d479212d7218d33b089a6a03df461e1582dc40740221518aafad15e61c5aa6583e53c9bef1234b40fb301ccec609172500e20691601298663c29aa514a9171996e1543a8e001f47d075f23606776c9bf068088893eb45f6150624cfe087209945d2a19432f1cea2961687145a492ac81dffd1d03ab2aabe1d5a96ae6a4157001156dd5b0a5def740784237a5346b1aa070d5d631a9c0f5d958b4a58fc3da223114a2d414a1ce9cc4f6a65c0090475498b04bfb3add2f76470d409c55c25882dc5090d4526e8ad0d4a5b8e1260b3b73688224150d62b5387bc95b4f50cde567b5ad528817b1286a4e7057b5af45b3e0e985ef738d970b2150b7bc0402cc65d87936b9d2ced7697737357df7aa445f00886cf34ed4046725fcfc8a23852f975df0fe11ea39e9daaab01c4019dc603cf2d1b5a7e45526fc92a213e5466b49870df0a7615ab17555190bbe7ded6a5235c98e0eccd6fdc00b333db5fa513544b09bfafbf8761481c9be290002a3d40085b6bcb7510814576414c92da7ad2e8cf085cddb3435881721ec8e51f78c7ec0a53f9cb65e6bc9fb30b3440f920f2f3a7df688db1b3c3200fa7b68c2c6424256c9abec5cfdd4446008ca74212ffb0ff49819c94378443f262388a7e180517aede686f713bcffc0926160fcf72ce11bf0b4dd8f7c5a52dddf5d4cbf0811e0d3ac69a384446f8e23ce267b4766c3f29befe52e675b6951f2d0330190fea7ce3d4a603cd5809430060796115588489b85db410e988d894202032b18ee738f21373676cf2080fc71ac4202c2aa95896e91192eea3adf671f909bfdbe24d1235d737f287229ff92ea4cab63649f65d2c62739ad108845a583547c3a0648667fa560c885c546bd9433ea6effb6d418cb9ff1128645facc1732749ccaf306004b857c6b0b4b7e7d29b9aaee9b8260e727e80ec50106b058015169efbc0135245f4cb05002e183957dca60ca6d7ea0c464835653d44f993d8db881ff463cb852dce00a31df35b20474d2affdf4bfe146d1630ff9d49880c110ac639d03fda4b4209370122e7a30513d8c3e6e2ce2d9c6aa4ddc7fb9889aea6410c076a1131f236dc7ab2d7a3e19b081d496078b95a0b0f0338a41e2b8119b44a641dcebb50f8131fdfa5711c407cf1cd093e4e145706265f02f888da5f347679cc1d87d53e82ece7b146daae6f23b4a1aa32b687aa07e371a36ba1266fe4e823858baff3d5c34b8ab2440eb2ae629f032e9f758d29288c679f757ac769bf550c1d54b2c2afb776761ab1e8a13db835155a8c6b2fd24f9e6b2d3b751c814b691fa75b78eee55483fb1b1efb61efa1780cc583e897dcef150330c59798492024cfb3db38f09a9bc6b82da9754ba14b70e19d56ad0ad42aee9f32902dc2d09d42ecf50d5e26b23f9fa7c71243b8515ff3fb3f0c7f391e03f3f9d7b1dcb4ae7b01318b6b65cf11fd4fe73089881b365e2a94ccd71f699f49e87accf33e10864dc971a139ef9aadb77b881cac129eacd7f0c0ccbc7131dfd536b0614a7ac79245204b1fa5ffb09d02f80e79bb5f7dd868f5b2b79fca4c07bfadad2993a7df4b21b33ebb736e15dfe1111edc61d0f240846797ddb88a82ea23c2f53cc27210895588b0f3bef461c816541ca9aad74e4a353b9e09598925b996c7a774a754f23eda6c36089833783b3ac75274443fe796167c7bb75fc4fc69796bd42af7a67a47a4acd9a7c1a97c63b498dbf9b3846def9ad46e4514c6186ca60774ec5bd0eac0732238a9441b04565246fc6ccc9cc12f902f0134b9eff89ce227e9be7b9909575fbb5a7d09a5a5b764a5d390fdd44f52b932a244d9cc7efdcd408385385f00142d8884373bf550028eb6a95e80e9e317fefdd50ce3cdd7d33c37f1ae650e7e069a8a674a607af1c36878e7033f7ba4009773ba26776e2c6814b17afa331b91c0395944b160d3318ba8536f89ebe396c1c86437597fe6b29f64ff6b368b601e9eb08a054c84002db5d7b5aa8da3fcd39a607df80fa520b4880a1542156a4efd1093b1f54689fb4a214d54ed13915aef7ccd7d5484ad37d63c980d40a492aa5f201651965c6b5b8f69e8be4fd675f646aa32a6dbcd0abd076677493b73e59aab48c08156eac0386a9fcadca8c72add5df28c4678fdbf1517721ae6d673c0f45198f7b9ebcbaf6767d602d1e3032397605c5393cd856c1a4039cf38832942cf0f4b9483888b04d0576ab01cd905ec02263def1a64c2631646bfb95a6ae3d307db09a24bdd4fa7da8e9c1b5f8de3a3e529e3c54c93dee1e71174aa651d6228dedb085b94eae53e33a8b17c96e79b16bae405912b74adf841d2daade840a6b1ad872f30a55296b8e09937d15636f0ea4482fe85f0f10d5f298d5b57a112aac0754980012f94910871553184e885bb6509362f80f81a3bc885fa2e27c899714161f71e696a1e7b90186fc023855e13968f063a7781afeb1b870bf5e16ce579a4cc62e3765db8d9f11c83b030004673a96bec2c61abab5dbbf384c0380f236a9b7eecee5cb5daaf9ed4f0b90ad305d4c832ecf083f01f06c2442247ef5121a12ed4744c66ad8e193e13f0f2c9a3f504151606c878f31a1e88542ce21221aabe11457cc0af8a7996c87e77ec91d1f0490e06ebe2835eb2d77f933dc68ba52e5fcb7771546b46952fa98e0481b15ed98eb5d5b3d46f7a536061996c508819048d61a45d9071addc723c90e08162bf66635bc09043b02a5f1e590140a134a77d6105ba45b1640d3170ae1f871424bb4db10a4724f9a772b8d529004a8fe4a65df067eea4184551797f674c6a1f3fe2a90f40f420881d7cd0308a23cd43c7b0c418d0ff50bbc451b839b2e990869ea1adf43f9b4b1a1dc465032b8d1dc1659207a1e6787c782c4f6dc1306a0771d561ae3a4996b366c6dfce3d5ce8ac1aa2eebb88a3e4275e6836877513f9b0a125273fb034da42a06ab27e35f93ddde02f4c7e40be40a56cf73d08ca316af5f28f0379b63a468aac43f2ebad01224f591717e97bfec8e69357b9497d24b837ce1a0c924ef0b3c5b8e82e5ac5196438724c7de2f155f9562b93aae12b5f19465cc8f50be08260f64c1deff92dc63d2280abcba52a1faaf029c11ad8e30d3fc9f6a55106750e2c04df4091e82da72293792abb25e73f2e11526266f4090012d783a869b0c980aba2a04e459a10b2b906a25dae33661822a8bfa2c4cd3b2792f0aff82d70f4b189499901464c28d0b876a33452c828897b05e15f0e6fc5f0973875bcdbe91381ff7bcdf9d0579b9fe0465975ad997a977a8439f4af3b2dcfa284d89df2beedeaa3b5936a6ba86f6dbd030a0d7b0a49b132901f4d2a6afa256554ea390c5a528aed46ec8cf76b7850aff715ac22de0420b88695ab892f6b7a756d292d372085e354d1a6fc737690ecb520a558796917aa9b176a566674af85b1e3c4a2a0ba8726149193f94a9d1698268f6d7bb840bb30a75f6c53eae0682868bfc7f0ba9f82e13c53da44ed1a7535f56a1cbeb588933a35c701f95e88d0f7c33806a2a395c411503425ccb83e29b7d4e7b1cbe8eb66209e492af89d9d1c052f8a5f0626e47c807ba665f3a895db10d1e19d0bd5f5206c683a133ec8005145c7869c3cbec6924fb3bdfb4a56e58eab08dd237054b9d4f13d9993c3319cf324b06b056f92ab59a3911822ba447e33136b6651e550eca0176b983b26733dfc55d37f12b70858e548b50e705177b019a84ae8134d14e8bf852948bf3dd0cd91ce799bfcebdd734c95b137640e0a476e272271d17fe51458334d1d785cf74e1859e4db35e13abd0cd02ea031e0852345b5d13e017d749dc4958533e5bb4ea41027e13122f19238913b892e0ce2f1605ed83531d2533e6359c30b3ead2245d7c9024661c6d481bb66f6e3fedc46cbaefae327a88178351b39fff0ba114ba07d038c6523456aacd23fc0b46f5e17cdf09a48c2fcdb78dcaedd1a1992e8c80277c2a61a83d4a04c9e845be787533836b874aed4a3567f3e22b72d43392f8e772822cf3700a6e7b6fa57f09941e9849cc7c2ede5f9109369c9104e1bde85626d1ee9aa64820f0d100d0ec2cdecd38bb83f0baa71f28ef67d0837b96ac628265e2483f582e32474940cdb951cdbc2d301fc28a0451a6405e0c00d4657da4cef70117b4d5b8e541e9055af6b249fcb296de909d79e60188354f12147aabf91dc09d62f843a307c2290e5778eb9ffc2d3008c14b61061654c51324adbc1869db3b4b945eb3e5096f33e90f45470a50d95105e03f3028a903936abf31da22e24b0b9b50794a90057a96a6472ad74ac5886f7f01a632ccf44d3f6206d13fdd1ee01eb05116a0db38acb35e4e286bb04efd42be549301cbf2b6bdeda80e2d85fc2641be4e085b174008e3b91aaa0faa3cc02581bf3effaffb9f56075f754faef500d30731492273ee26a5943987485da08cd775acba226c621aa191d2bcd559ff5d201139a4c50ce4e1be3bfada8aa10d131d16175e65a71de6dc78c61f40a2bb8fbc6f1b515df91d145cd5e5c539ea4c92dd60245658cc4b77413331e1b1fab4b9f42748bb3eaebefa128b9e96c117b2e375c8c6e8357bae871b2ec147f3fe56af85e61c0f5fe41f1a177a586ba4f38e00a88272542d87796787ffc5ff209005ff758af884f90b0206bcf372e6db8eb1839580901cdb0db424e284d06b03dfe252393627db8db1636a88e624988ddf791e0d54da2803136b6be8ae89dcbc9b063a7a90f2467753550d5a3a62d566fc984321b977c39d0223f71f23e3753f718f6f6063d4cd8f8de870660940462db7b1ac183390155cdfe81293e2a3c504fe3d22f611af5e7c8ae929518406da516b5874298af60c6ee1064770bd016ae5b053f7ec88b7e1a85b3974ff245f96410702022a17f31dedc094ee7920283c686951c02bc6c6ad82cb18d99fad8ee6d7063d733929240dfc992ca42f28f681ead7097622972683cab32cf114ec560fa7794183062caeb5e51fc45a7b4c4971748df0df6a1eda3a539199f6ff1b56a45a026181f4db2edef4d1632b2721a1f06b95adbb046cd91a9fb41c330ad8bc5afb75e48da641c0e3ba5f33db9d49cde07ff7edfd5cde804f7ce3b5d5de3e33af0080e1612e6a98960ff9ab57598dc55cae5524d8d54ee92fa4e96eef3836b6e9c2127c5d51abd3bbb1ae31807686d3d6419b19cf618baf22a342c317ad5a7b5abb035894617d4ac72d166548b289974594933c0949f2bbac2f60bde8e22d13e39fe7fee6bb643f744b741590d1566de952fa894e09552737a6ee280446ae821f8cf3b0ec45831fc24cfd7a19e29b9b010b841d82d9c8811fa5fee361c7a2ce1a5c08871120b5090102127fe3c0d127d24db1720cd17f9b017b843e0c69d85117829fb760e3d200152cd8c518902804af68cf2a32b7e7fe9cb841f587649d10f2979bbe005ca3d38b20b266ab4567f7768502750c8c691470d341920644199c9d9139cf2e8fc32174569a2871eda08cb51c0a1b5eb0806ac01c54c1c5fd4073b03f7d18ab0126817a66511ab20ad88f4e6cf5d5aac4db04d84df4c02d7f3b599b941796c567e8d433eba9b5fa11b031543547fa949c0263366e20b2134b1cad3a8f12b875f52e86d1c4dd7c8c09608c848f7ff5848791ed3bbb9e324ebe9f058324f7c46b831a217004931892b1ead49a494dc25d93c040f7f08a12270c13bf95f2f2b7825345f8fc05ab5c81c65747cd468e7dd925ab5bf33fe4048cd5551f19b1f8726c8cb55f766b16b8212e6d1f583682763fba1e403b7b275c9ba2a4768008dd00ec67d1b1694423ab318a5db72996a77ecc672eaf8d85d4952e463d720a21c12b1cb073f88dd26ab183b311cb601902149e9f2733b66c95a92682396d2b50e5de0f453b91d634f940c413d78d939af71611f06f2d6f0ae8b6aaf14b74737002e6e5b7c388a23d02bc237c6c0392ba1bd73a5b8d09a56762e05c4c177adb65dedf7cdcc5acf0a63f16a11693385e23c30cc33a879ac19a98f21047ca6d3719558e66d3ed5f8bc910a2cbbaaf238ae05b4611ebe1d41280a0bb44d5180fe7792c88cae365525530991e89ffc4725f2e3fcd17440d1408c671f88604f8ac2f3b264f5261ca7f1a754ef9e50e3e249322dded6e6ee06737fd673474f7fdf8c893580aa283039825823fe44e12902c36f8bf0280a89a216278f01474292d4ade594d06090689276fe15e268a1cf094349b236360861fa5a4f00e18e9adc59d6a2d305ca4e18d6638f0311544076d758f3c951250018fca5a68ed2068a602e3398189986a8b7c10777c50347721eb26207197865e2bf8b4d69fb1b018fbc1b72aafc9a8ea8760e2d33dd7c752186d37c9157d2fb23d13bf7ef848e94a8d84a19eebf793464e857d2e3aabd30fb1d9651c625e30c5ccd1bd8ced4f3fde4c84d637e9e5c903ae9197efaf1687be166b36dbb309e0a2c64cb4d48805ab117a07e47b1fa4f40ae8843e543330fb56449322520abc5a65eac9e19d10336162a0bef8627c0e080c736fcb71ea5c2bd58825f2ebfa3780285b7096c4daf2db94e6a9de875632190893f96a9010980aae03ec854d550dd25347407d8e859f8971e911ddb2d0792bb29ab4e25dff7a7d620a40dbdab20a9578367c6b339be3b3cb46e3ceb840137d2739d1ed75dbb046ac57601f82dbf39dfd11f6a3acfdc7986cc2d4bc1fd6f03bdb4c017581a41a824b7aef871d3ed0fde0e4a7efff24247874aa3cdfe2c53bbc03c1606009548e410831a8f4a29ddc2d3a496054f3a10414f96ff0c00125d33ddecff27dd2ce45da7750e4739a05a52e5c17df74d1091fbd3a335d00994e101ec0418a037296efdd031a7e363019c358202b8806c4de4864d9979b231f371ab824c6494d5ed17b448e55b6f30d7b39d7a29713112b036b3637175d08534a2cb43ac1873f4429656d12091b51ed072ca338f7401474297966fded5b4eb9f938a906bbbec40ec3dd3705b8a3a92381f9e7bf8b2eb4b66485f1ac934b91ab0818d00128882331f726b2cbe667db105bb24779da165d36a7987240eb7f323221cfb4743bcf5ccbf40d04b53d20503f44df54033c8414c019b562bb0c5d1da66ccdb80465aa02dc824523477554f13d5d17ae2817c80262b4adc49629b361a89a97e89e025faeee96f1b81619a9a5b8da985268ecde7aa4223d1855e5332edd6a1592925f213999d9c5eda39300948f8d77fcb8a5aafa8bd9b1aac8152c50f2a31b1e43aae10cc5821e8056291b0955d512653d25d2208cf1cd1fc4aa369c8a30d35a94a394164eb9f99a564670535b4e09f4e46d2de0858a197e61a4a536b8a9c05fd534b92c95d0831f64f010910522ef60103936c02e866d0ab826f12167239c7b090f6c2a3c6bfb53dec293e33264da3f0a88c30b3eb7ce50d6dccc2579ff4153c98bb5953045fb241de057f08e7d10a6569ea437179bd53b16e976d80171f4de6d1436d3dfb21e4ab91a20e895854292dd04be1da4cd5120523e1e5397406e7c9ab3f3e060b20006bd123a08fa36aa4954662bfb11c11bf833fc32e62fe3f6400c1e122567fc2222ac75a9cc1c1d78a28c83fa624e537310ba0f3497bb4c0114afe1aca0c805b29c256d1032278aaa85f0029380761f87281a8c34188647828ef04c67a502ddca1e98936791c84b2dfb4e79b84f4a51ab0541a1b1e0bd806a5c26e884a20fdea671def8d7a493c024e3b64fb6f61633e58c229c8c278dc15607d5d36c6baeed0681a7cc037d2af7fe422071028c7f77e29545bde0b8e98df0a7dc32ce5ee31ac8b54bc677170c956377ccaffe67c0f6f4a80dfeb45d5e32f5ce396384b572339bc6c8a2a4d960149d2f22d7e20d880402f46ef9371419e179e59a335400aab87e81422920ea6ae3b3271cb3701c56b3f4a8558c4d5fab164d07385b3d1004e5c093bfa7e5648e2c97123fcf68006db1eb462b8eec60a89768c5c8a36e29d1b70dd15bd78b21a94c1882010a0ccc1ee4393f5d68bb3452278e45be7faf7b1c6b497d238a06947d09bb14c1a492abfaf31f5d913d33e2626ba5bb1e22338e99e0871d5817205f7b708e522a21ee5b78e8e9ffc1e5785f4229d84fb5016cb770749887a5ed068a5c7021e809961aeeb0d4e206e3fa46bf661832a0e362f0fa05aff1baef0d6a9a6b348a7f6f0ac6421ccffc5c3c1087852b80c41076d17727010cf4f1ebd1621872b0f124e9d939e0888f74dc2ea1c84437551edf27dfc257d0814bea50ee5250bc770276ff8de0ce4d8a8302bd336b15a84c85730d052fc71ef1f4e7a33ca24a5a2ab1eac28230e3ebfc8cc5bc723cd3ce7dd513fef848870f22eb4dc89150219e8db068095650a79a5fcec3e27f31fe72659a99c88d6febbb08da37e24813d80db1df72ff77325e71b6a14e11977f052665ce164628a56c0f095ef7eecc147010a78e88e03a4dc0282d8a166ffddfe5027ea016b6da59d3838c0461f4a3c25baf7687c8f90f2db870108c628fe8e9edd4068507c3de5489ff248b0f7f0733c6000d4ba4ac2dc4ce619d584680a64f943548e73e0cf3ddbb2293190cd81d85ddc8e3e052bcb76dcf2c3fc3aa6519a604229e38d72084d16daeddab43548b17f3aa3f636c1000ce4670d4f215239ee8211d0b547f9fe7d0da894ce2528308884514770e5329fb9bd63dd74ab482ab674caaa3492c08de16ca8258e91714451b0395a6440a4db9fd32fe4892365878c2ebd363018f25478218c4e2a41f7572e60303be0ed8867395eb2cae22a2fa46d06674c805deaf6431f24512cf47836b9e7298fd866c5e488f7fc5b85264f80678308581095bcbc21100aa5cfab5616f8140c77d913b9bb0387b094d22115a03410ff169d3f480883e6af3f31f8937f25fdc7304c1371de7c5bce719870175161ddf9feba3a5abc5607a19f75b0020ad965d1b6ea0386c3fc327d489ac63d9b5a7b224a4650fb5f15efa30f1316e573576f7c100520c289c6e85543046e162cc700812e053555bd6e5c1ddae77ec75b7ced84c51ba49fd1c2f52a4b04e0be120bf2e078525bd95b888c138faaf8ba3175208502c772da30d13490ef230e5ffabbcabacb3e25c7d060be7b66a51769aa1c4685924ecbd40931582a756678feedc51ab04b5a5605fd025d0f8377849bb257cec91a399799fa771c342f5d896cda5c43ec71cb87eddd795f2cb247176c7306fde426995c3640a1c165bc0c9ed518c64bab16126a1daa766513ceb6694191a0f8a1a33dd9e675b7a5b772e9b1b73eb2bcb88d17e61c6a0bded5a9e71cc57ad9e24a957a98b54f5674920971843b392fb481b82e9a45f0aa4df65e525205360a3a2e3a36c9149cb81a99fad13c422e3cf6d1ff2af0aa28df8e8251b4f6671ed61d88c4088b5bbf7daa7e61e68d8dee09b1fedeb809afcd68ef45a99d0ec301afa8042f0f1578c394dd39641e15ae32e4d9d441c980eec96c8ba2ac1fdd1d19d87bcdf8ccc4ae70d356907d52ebf573303e5be928c50014cf927dbabbdede953956647c5b1d6b060a79994a14e9e61a418d2af3c67d3a9493d7f5c866f17dde8b41798a86c49240ca5ed2c54b6a29a57cb19166d6f66f26eebccf5e2eadca28a91c73cddd3392ce247b8480a3b6657aaa98230af45d9b35b9ba70a0ff559678cd8f1c7f272dfebdf1ed5bf9ac426c2de7a0171636a1074fd91324c04b0dc63389c36dbb2fbee464db3b9cf0a1bd20568b2631304979d055a6bcac814f59bd7f6528962d22fe8e8bce9eee856dd51f88d58391239e12e7ede3893137ce85a51cfe6fe9032e742a01c405544fa96f350e235fcfa36f506a42e33642c4f97292be69eae171fff93f10583c78671557f0f64bf2a88abaa312adff916a8b35240dbede360f620e1c581776ae0fe7b1783b969a8322e544673149af7d5f4615bc454800691a11cd8a13439c9ca0e61ccd01a8d10adfdac2dc3ff05ccb507cfad3e56d82ac2fa34e8c208698182748a77381cdb6b90dc3c83cc88f8906ac96217f897e2928ae3efeb245ba14f4189bbc329f66e7089f1b88cfc1f3c82e81f7078e48ae85e622744ab306a5b816949359664a6e2fb49b4093bcc9a12b455a032e291e08bcb6b768e1801c6fc3af80897c9c29e9ce62e13ad8f129dc25973aab801131aec3caeea5f5c4ba6dfa94eefcc7b643da5f0c6733643cde21fe1104ff3c9853a7a820008974366d34b8d77acaaef3f03528507a108332dc939783e1555b713a5e96bfa2c6cfdbef278d13d186c918a91ff7424c5ee5a22b7233d957cc33de48fa2910ce2dd74792b50800005bb7439e78054173f8e0c50f4edb653b46af7e0026fd81f13e9e98c3363acc404590497a3d49ab9e60e43320289f36741d1fb39f1c159fc9462675f0e5f60fb7a32fa6269769c38d0ee7d17164a24524b32f6dc7ecb1b930cd5a2d21153b60f513fb48f815d7d67a3e39625b4bfdbdaaf87c3a3d3724fc607b20b15482a436e193eee784b4566ac4fae7abc8d59d91b543e801ef294d8f8087ec15c2f94be8ff4380d2ae97d2584a017dff4c5bd67aa0131b191c3f5caa3c2223941c865b8f86edcf98b428d4c8a0962ef1258934e1fe99b700deee06032b9b8469345d201c5ab878b75761e7477e600c08650211fbe1058a4079243e401240d676693318e47c49433298a2feb61414903bb24047bd6aeeba345a88f00a13cafed714bda973caf12a625075bc9a1e00820413a978db3ed0c17ee0666cae1b1d8199aefc6d29cfb7746908b6dae5c25cbd75424e0d43ca9b361147bb077d653c02e2629cb2343aa6753a35526cc881f6bc8658f77e4e8f8d8cf86366930cc88f199f537e004d8ccc43f19be878c16f80c7f4ad5acce4af772a98f84fa2c322dc35e46e40f84048b28dd798c343bfbc5fa9c5823a5f36bd6e0d4a10f6cfe14148d5f17459e6bbf59c0af4d2a1ec22173167e470121e678f6595f91943cde2dba64fd1801b09804fee4cf5e0952f1971a167b18f28c888e6c2b663c238fecfd9d9db2778bfe416ffbbbec63ad8c0473356b769cabff9b4c157da2f4b1b494cd926d8dafdc7b6683907c1a1a972c186f252d6831a0fe9e3d8e891a5cecf4bcd46564e71f5a6bbd71428bac2229594000012650ee6d6f63e4058759607546fee9508a5fc91b3fb255132b96d617ef39b291d9754a34c3e878a5c23bb7d16bd2736bacb3aaebf3df7c2310e85dff7bef98f29536f5afe3462bb0e6d0257d42b7ff1fdfce2e9bca0169294ff64f3d66ec36e1f9a6fb1fc4cc41245f73c2b812c31663591d6c12948ba0fccf5056e481ca55030890e12c10e0b5059a57d3f9b4dc8579bcf9383c5a14a4992f1e2583697f03f3ac46386c931b63068fc4f6e1c7b25ce5afc7132b9510be068572153f1d489c09e6f83543b589e4eadc9f1c592bbf20f56f654d06c4f33ef2769155430feb455537e67e67f9ccc42da8dc49a08312bc3e65a24ca9213c4a5e899d6f75f692a742837460811a4f7d73e6a4746defebc75f63c845b8a9d51ca8f33b214b5f1812ccec7feb3c789f395649acdedbd11464c0925fa3b8f20d1c231ae2f87a9085b7d07e0eb169c7b8ef9a0fcd92bb610f2bcc583bd1227c29f7dff0c3e7a9e790db4b302cd0a73bf5f17764ae3f34a656b2ddcfc2f2e6fa6b798583f2d9e9d2e597745fc067b6a7ea109bda7b4d272c15b2ed1a67032dd0a3e5998d29624b6365a740ec0f57cb0f301198b8c0e6ed287197826f3f3a8354b1536632bfd3955ba78caafb62aedb429efd172546795a6156febd67745db5c8db60c7f64d39ef8826303a725fe6d7d994597912ceeee45dee90c7d0b40cce2f062de4c467b4db01538945a725e43a19ed48bd06a90f71a8a7a125eb638524296cc3b4468eea2883148161fba5072688d450aa3b9a577dc908b39d104ef541b30d00a9d6f9f3661e6378326c79ab6e941e7e8cd6f6be1b1894deb9441fc903542494838f51e849fc5f05dcdd0ada9d454ef98b2069334452b8ef997bbe24c7d46c3efa70cff3174f55af64913828159a5190811637a392a69a4c6a29944953581a5e2ae08ec79123bcd43ca4b2a54e8c6af0fd17f1248cb0a9a977bce90cf2b6791952b00d001c1b078a6a7b8ed37f25cb9e1fa59d30cc305391bccf281180024883646f6b8082d9f99f4c4d5669a9a44399b513589e5e101df13f190e44a5a4b411c02de90962d90ca14696c1dafa811cd141cf8335c7cf40c5032137cc804afbbb5ba2a5e0aeaee2b1c7da4636573f8208478db7369b698817a107294acb01ab48cec46f4e721689e07598aabdb601ff8e4a9ec0aa975d9d7c002dde5011d8be37d2a036da4fb0d86441ec3252bff76c035455282e124695294fda734c8a00def2082ddb3f2ea8a0c532f8fb3661c68b15ad2bb388d080c1b30fecb5cf310e42de7de6d6fa6de121673efd2eb6d4830a1dfbadb58eeaea358be98167b41f15c0d7770e9375f9121e1227c96fe221313da6ccbfbf71945578baec231cc760c335a16b8293db3d69798aa674e69f5eb784e0018d0021a7edf51299e906fa6c0271ae231efac09f1af3fe90c307268086e85fa6c850d6d5117f3d8f7cc17c4ac8d0a0b06864153f90887c6e1cb190b2a2a7c60781059d1c93f3891405e256f6fd8c8e9adc7fa571ebb6a6ec6073f506da4c851420940d864b4ef55504b815baa70b6e7f6ff0483c1e351e728bb5a231b2f7866042ab5b75b673e14aa901bbda09ef0e521b454d6f691c9d0a8926b721cfd4ddf9954372052659274c84d1a95f98adc47979c2570719f93947a5376916a59a305e59461b48a91c7af1b7945872ae5b5a0fd0eb324ca4fc0ee7292f8e436303621034a670b5daec9e44f6382e206403e45f1e44021a37d0a29bc2c80628dca3934588ec9ae28367a0f1f0bff6b8f23f193678348d300234ef64f2f0016235a40288d1e0dcdcbb5536ca184457222a13e17c924675fcc448d05837fb05838d34f41f6af811e48ea14a122630b8bc11014f18cb2b704cb2f1a00927bb66a84b4175bfcbd67c9e493a4bf3b522bd92e675c25e6c44b04d40971dd0e48d53ee62787c518c5b45136741380e4ceaafc8eaaa7ebd75669019ff1e0550fdc74f68fc1992e0980545a0f09759bc4bd0b46980f72dbcb8029454159eeda3acab0d3a0fd6d647568a14a2ed646d6da5430f381c98cdba1f7b736b3c5bac3b0ce7b21af20a2ad397f989f4c74d3e468cb7ce7183ea23ebdae288051bfe5f90e78bbbb9cf34b390548b6326f3bb2d19d61acd4ff34d9de3f66be8ef9cfcd19dc76b25f5fc670d85a0e4025231211f419e2805839cb56a2a981711bd0b3bc2c0931002bdb1919d1b07ce52f0e4aa7bd86f917da7ce925cf48b513301a0d48448536f5800769cc90f33a4b61d835f5d6d8cca6094b80f0bd1b3ce2cc7642aee4b8c4f12c4eaac54660a26d2e9c3d99c21bb820c115391c06020a3d0432b26fb284dab411583fa8b40218fe495089903f0a254acb00a464d3225fc669295ad5186d939a386d2f8871019e95c49a1256ff4657100bcac446eb499b8ae4b3c79c90cec3bff8809b462b8e7745d5e6687ac3d1ec0a0155b0b7ebd3134f8c5601388a3022b23ee4ae78d94737401e67a7ee74f22d0395b04a50c025b815baf181c5cea81cd2586aca121be844fcd07887945c99aafa134a8c603917b06b4b40062243caf20ee112b6d17d690ce114590b5329695862f33790498b70b9b00720e1bd29ca5984c4345c27ffc90c6251bdb351cfe73ffac5d88bc653954b8f9022512486be3aea9629cc5c8877007f070fc9f7b84e25a4cb383639a028df1cf81dfc99c708f45064210582cf753943e027d2cd04e4c63bd00821eba82efddbb4dc2945aca786be9753292a994c0af78e254148c9644a191b60140a958129a5be5b4eadac853bd649ff36b92cdd321a44c0142c3264952b0cbfbdb55d41f981868ca771bd894aec681ed6917d458200a072f0febe9ff187bc548c82062727ac4c7c38f03198c6c3cfe08ebac76524a6993b1e6671ac158e6a36e315817c44e789fa29f9adb88be7ef8c46eadd49ea6b74437e29632c65bf000d781df3c6b9098b542cadf19c2aca4f1407686ec0adbe3f3751bda1380f87690648c8d1d56ed1ab580ad02feeea23fb721955e85648f084a2ca5c9a64f54d9803fdc8af96831b3daf0edb6db9621883d1491b46d181b27204db8620df50e6fc740609cbcbc6245488d023151685fe114f3a9e55625f3caa40120ad936740c59be77780daf3598507d50e5c60519ba0a9ee5747d4b7bb808c363a2b80d054932c63f140d94d93ca2019f049ed2361ea4ed736c90c75935adfe37e07bc4c088701302cb820e9ce1d05b06652cc631c7fdecf1b0fa0c084337348cb9246f1341cdf402edfbd4712d6fbf993c084db542cc33fc41c4f2edcce434e3e88c046d3335c15109c588aed73653a3f8063137d3ddfc2395420e52864231193687ebb439448378429cfccae76b14a0683aabca0d9710123e0d4dcb6dd76ef5f9d296d848fa0fa4b01e0a2b73055dd8d1cf84fb0e15e4aa0101a7456ea388af5fbb95b0ab9ef80b7ab9786367dfef9b33f741c7f6494b22c341caf1b30ef125a450ca930fbbeed819e22146a964e071c7c25f959c5be9d180237492e106c0dfa33c3127dc458627911f82e724e362da24535d9a6176130d24a338d61dc49132d6c4a779c656504baaf388de433688bcaf286310afe374260a9ae5ea1c8cfc40eb82bba9b9169662a4229ff28a17bb223852aadb537c1e8953335f4aeced8ffd5c13fb3bff5a87df0437427ead2a65c3edbb0cbc3b82b766803cf2402a3a14a190f4db9e73c8c419df6bc2cf0255045b18cb0dfba94467eb71adac8c3269986a515aaaa902814ce4a0f7267643db6c0ec0a2986c3258a998420a63bdec9255524404c657074a0fde0f357198645c1383edfc5bdc41c8fd4ff960d7c55e4552ff4832a1f62fa618e56e95f1003451902de9d748696fb8eaec0abbbe0ce82e9104590dc882829d1ac736e6bc37adbf6dc1ef5b14b3e157150ac74359cd6c6493d70479fd643b17e733905f4cdc94d06626734cbe6564bb703142c973b6cfcff6cc922f1a4fcb894efce9794d2df2b82ec1634b0e1c8c32520c02ab20e00a04c85610a16f8e56c63cf08794dfa8287045e2622e8aa447675839ae1b95181b9f0cf74a7b91fa0b62b9a1533774df4cf38aba8afa2664ba9cd9c85240f64e48bb4644bc2fc9005b5f9d1c6a6f00d06d6726adae2bd5f1b91d31a6eec5ecb90db5034da37ecca79320c281f61d2914893ddc1a0305a12f9b98e25aede4d5488c2a7b8fd132b37a187c34559ffd1caf354b60cb27d9308b1d9ebb6f337b99867323d906b700b14a01b6b5c0f70ce81df40ccd5a916d456aa643723b8492efa2f10506634c0c2cdb2e29a36c286a70c589a8dfa2c550788eedec9c5a078ca040f08589e723f4ffa3fb3c1da4b1d41719282ebf2500b2bd9418976aba74355b128a89576bfccdfbbb7ba5616f39514de0a62170938059ecd0b5bb2750ce3c3b68cdc3e7eff46534ae17a37e8925a711852cb4357cee99291b0733edb84866db5999014dc36b48c945de2693ae617421328384973904835b2c42bd825c5f43c13611504a314b79a0a5e84bc215a561aa130c00af77bf3d4cee06e79a4dda368ca084db975f3e2ece1a162a850085fb99fd0a81b4e94d85b9c07a37519bcaa4e3803517e7e10a473ab7a759a0dd14f37f6412b838766ef8f5c625f142f817c833c71da46cf12b8f03292afce434d4d87ea97686912eb8babcccb8a2968197aed27c82115490dd25f2ae26ce769303dbb8b54161520119debb8e1818a7b70f35287b6fcfc81a0ea29cb8a2337d0c76b942e21034a132c7ceee2ea84756046df3236214f19fcb22da1bdacc60d19d36d4d3aa7784d9546bcd80989fba2c57318720090e5dcf5431345b27445734b43c6ca10a3c4a3bf0c7ce642c4bbbe3b69303db7148194a7fbc8b5c347fde8ef16cb9218393814e2318b80d1ba82355f6e4304b66de9cdb0794d829bb0eede43fda10517781070205c8d372d80bc2ac957e5e597d21bf25ce84ede5a7ddc8f577666ada29ca06c2a91bbc609d9a2c88535c443dcdbbfde85c502605adba9e304b7f16646da08daf8f491493284173b0b8e68a5501132efc396f0609855ce283b1268bcd2ff399c6541cd96c2fa76f7f38cda3d48d7e0329f1a8e3992ecfdbf61279833136c2b0cf00e1af4e35a60da2194e11658c6584b82260634c7441086c9e8170379ec63b45f4a5b6cc67d3b1c2fdeab9dddc8a7be8cf972342013a23001d49a8bb53a0a55558d2afa6cf4625f4d7815c9cbcf0d2f47cf79354aee3e7c42f6973990873776bb900951647b9d7c348ff47da2e61d342ad6312998e001c37fe52cadfbd43e4f86fff4eda1b51d264e690d8ff8b3be05e02a1ff02c59fc3a3b87725683e87ca93603322069d47be3aa24dde5dce2cfcc2069eeb6f1a473114641cc5c840822368b5b3c9edb38ba9266e0efb494453b552da56e1925d940273d25945ebe22470f19930b1113768a3243bef6df975e2c5379a26b1a9637e86cb5024f62f5d17321e794ac31021153b41b56407c74569affdcc78099f7f5791fbbc6349fc894e2d52a088eeffb2355dde5ff6c2fb2b009b1a6d00a7920532b2d437b6b396842827a97b80ffba6d0cf5e3e66d5cd59727aa1ee5c58f0c87086b51daeb8f21e7a67293a2e3846e2fa716b4fc1c21451e25301bcb950809074f630e867b7a7954147c418b3af788dad7abe26c6e5e1824f8b1e63f354f9637aab2408f93748a4a6b92ec37ccb40ea8a4c78804302e0aedf3c92a0c8714c9ee30ac396f8737b83ce85bb181d7576730312c688a39d2bc7daa058ae1c37d2e637fd913f64b3af57218f63865e5cd0b2f82d70e91afb3b2d6d383f2488b42f6ce1546da2b3fd4e342ca0f330129909735359505b457eaf0b111807eb1eab35925a1444015fb2bebc0ccc5cfe2f11d6b036a75edab630e8d4b70f58721e550785823bc2c35993f1cdae7446765081af4d386f1a8be03e34da95faf2d857431d207b920b437a51b138a3314db8ed7b5f0922bc988233a048d058141ef444c2fb7a49dcd719f824d865d34ab90bf8c97ab1c5c9a6fbc3ac862fc5d25d92efc5f20e88abaab1de89abf855f378a83a83f367f68c8f272f6ac1c3df1ae16999f0f6d5131261db4723f7ad600d0526945432c6b3681a5d6f0f86599161ec0237e9d42f3639146695a6d649982c274e03f70be87fcec6895678d7d4ed1cd2a4ee7c6807cb77ce9a6986982d4e980bfab79f7005484bc268373c14ced189a604f5913964d8bf270d49faca58e49b68e7a650706ccd11588b004ae272d296ee8d95b01ad768b2298a936c37876478d5e6ea121069484a2047b84d43274835892defba3851bddbd221dad0369ac2e30cd21781aa770dd451afe32f75e349f7921cf54b0f6423810d4979afa15bfdaebdaffaca3a8ee43b86c4fc4395c9ee1f34cdbc53976999c1c7024b8aa26b65d56276fce2504abb9925771dac2f42d76daa81f199c821bf87e736ea9e92a0fca798288854b26b2b686eda8564390cf47622c3d0c4299c11f94e193862332d1d08c114e3e6df63735b351965da4bc068421025a7e01505b20123a9b0eb42029d6a169b47bed50ba95defc6f0a9801e52ae7d9dceb56f25b69e25576748d693970cb3d0003c0041433a6060158b5ae881d25ef330f3b7c5c3729d0ee68d0c7e0a36d428922f683fe90d6f66e6b726f29539232e304dc042505343416530b04a6dfb122b120412eb3cf8a0d110224c78f0d28f01805fd5b57f5d5ff28782fc6a2f84f92b3591e6dec0097342ad7f766721af8f56994d3565f31396b8d9804c78bc5a899d332c29de815b9ac12019795a9be45c2a52bd70fe2b4aae4b2baaa4c78d2aa916be6d827c91feb0cd7b1ce44127f146c9ba10efb03ee7e357532f076b4c103ec3f716e9b2caad36333d129668e8fadc4bca95f69ae464e0bba62fdcae4b466729992d37cc865f5eb05bf14bf2fc94a54955af7861883a2f88d51ac7135facd65f579da860eb07f7fd94cb97ea6418ea7586d7f4e364f195831c4ac01d114253881891da4ac18c2360b06a37befbd4e57b7ba4c1f609c522677f9a4d5e976c8926c2b345ef76a2ab364e776573fab58ddae314dfc4cdddc8dba5e2571d51e8d434f4882dc6102cfc61376e04fe97b937499d3988f1f01f080ffedc6f28ea5986d62d0c3c70fffd90e279ba493669b26ddff0420e092ecfc62de74ae8d33a1908e4489f80854a6fffa2c488cc83cb31c99cad86936997e3440c0250081e94fee6c336fe8c72802fbbb5a80a7d8e42c62eb54aa5e011f54f074efb8d2181c44b74ec50050f7002ee95093a6435d672d6c092ea793e8188be2bf0f5bc5173182cc9bf64185ad800f21e052ccdd233a39b3f6db8645b48a9336dd901e9fa5a5a52070497149b8e9d3dd3d89c8eb9823a79ea5252b73049734c989f4627ef85642e09226519c96a81e97f5632c8aff2439f317b7f4380dec5b0fae61c02d1da1b821704993b4344e37979292e652d25c4aead158aa1b2f8d69bbded8339d58c23160cae86e468c41421475b472cfbc99c1d2a538f715f53a5b29d1bca16ff4220a549d559ebe159d6239c5d75d7cfe80cb1910ef6733479acda4d850b1822537217d366686b709e25e8c1118cf500604d806090909c9a655593ec0e5cc87ff682dadb4a5a540b10736b3d9ec885cca327d21435c3ea3a9d0ca0197331ad2e6491a6f4a95f3ca8e1f97f9f4f0b182823df9260dae2f36cd7b0ad5d1dcef603eaba7b993c4f036d6af9e7e1021338766fa3f336a86dc35fc57311a5dc3ffc6665dc3bf8bd9740dff5ad3bab73fb5d4002afbb4178bbd643dc2baa4b202e61e7374064a0205063938c92555d35e2df33153a02454e6cd6c179bd9b9904d1209cafd4e9a044a620494e4a8c9998192884ea336faa44de30025b142b61d8b88bb96ca6839b29fe7e3f9c03a80cb3ba3e173afcb9c76992e5316569690b040912ab2a3e746e374af199a0b86566605344f465b1e9315ec49c51f8c069798f0cae4eecbf3a297ead2417de98284a80cd725e6892995fb8b04d127a231bf241c6e5308b3d92ccfe80d7c05090241d1f3ebd9cc9bfe214ebbe38c8c19dccdcc11ece3870f11fd5682ef6b31c1f3bfd9de82ade0aaad03cc7454f27dd43d049b9cb52498ccedfdc2b3565a7d264174a5c8f357515033a7d2c0f05c00a0041b8299c28bb731f43aec0ccd6c2fbeb44f7239dc30756a1643504e58602ba695a50ac5a4dd507259eb5d3fbf42cd1cd6154f399838377038378c30c9269c1b534de29001c70d870d38889aec105c0dcd6018f20f43ece74ffb658c6cc2f82ef86bdefefc2f16fbd100522d8bc5feabb6f36e101426d3171fc3cc068087d1b97869f182f1ba8779b57871d179d7c8e8a8158b3d5d5949ba91e4b40a5a490a5578c1542a4240125885172815b9726ea083d4a4c94bce0d74909a3471a90105ce1422a20f6493de83097699bf7bf5a45cc1af60a55372cd566bbde192824b0a436f7bbd7fad5378bd7f4f9804b66251b5f51f0ce682cbbbf8175e0fa3c4e55d8cd395bc1e268c75b1b27eeb3115cab548cdb8559b04c3d6389b04c1f7f2058ea5d8a25fdf3dac15be90aed5ea720b1ced85cddf474bf6ef914506275e64cf124353f61fd2346af36f851de9ef5994e07200720d5d08794c97b9cc263ddb0a717cb0179ec734821332c042061a7460832736975128b746d80b3c66b840490bb6ec10830d3ad85c5e280f71894d9755f067d8b1de16a9191c9b062a838594bf10648517045f4d82196c9c0e6c9cef66b3e0d5f9b336e79c3e85847287d5a5ac55a256bb2002c91f56edeff05abdbbbbbbbbbbbf5aef6e9f91049e2eab6093d5daebd592aac9bb6bb7b77b555c4e2e273c346ddd790c9731e3e3b4d508faf579fdc519e0f2b3f730bd778b3ee4cae686f56748befb64fd108210ecf0ee8af581386a3b3c60d8a22e1dab3c5d5e5e5e5e30303519708b092601b4899931e4cc664643145ff8258231312ffc1241195126c4f112ebad179c301a5888e369483ad362822d2e6196e0332f1fc1125c51b03f00a8c766446b9960fa1f885f2ff08b100788c116131c0b73ac724d0aa6ff8da30926d0d05a12eccfe3f5b6986018618e551661d4d4d4d4d4c48824b8a88179b5a8a9a979a971c135306a6a6a6a66d9bf836a92fe149e54dc9c6413aa7079f3d454c8022bdb2f85dcc95c634037a4c6b131320d5b60650b744302ba2101dd901ce88664e4403723a09b11d02d09e806a5d6ae03ba2501dda400dd92909a76816e47403723a09b11d0cdc905ba1d4da05b8b567cde8479dc70f7cd56770742d5a902db5aebd3aa5cc772d65a6badd65a7b7b5042096badadb5b3b5565b9908831006c1471145347182061a7a68bed92e5ed7f5344e6718464ff303cc5697b839c9f56908c1567fc728d7975c9738c294ebfbd4ef3c7b715035956bc8f5f113b9d2906b92f74832ae29a896f2c5f6597f63748583085dc5c47953df8b7d93b5fe0c1ae0b76329cec082e913a155b92b853ccfb3f66d78a99aa89a6a88c3a37aea66766f2ca99aa8b058a7c2d238960a0bd51395539333533d5141513d7553a562b2b199a9b074585261a15a124b2aa64985a5c999e7bd01125876bb242e235c46fce08003cf94fccda6229c641b79364d3942b68f841b06d87b8a8019452622e45d77612b5022b42a7b3f4730bcb9a9c6298572999b5ad1327b656eaac999cbfc795fe670650e97cb5c164dce5c6bad2aab929455b7a9a6cd5ce6a41a87e632876b1ca13c731796395c6e4b9993aa2102bcaa1ccef33c0f5f125cb9d2d95aabad4c489112a449931b2d215a42fc34e126a8b52b6bf75dadb5561374b50b7560b076494d0ad55a6b75a7b5ebaaadee5edd091c102da62a6eb8d1f2431170405c09c840c51515fcf004050d54a2ccb004952bb6b8e00a1228168be5d576de6d1b0c057e67d0d7f2505853b5a9da546daa3675a39b58a3c72c61551b53558b3cd108d0aeb0aac954a9191d59d6c7fa582b7c35980fb520878ac2cd085f4c029773eaa794331f8b872a39cda9cafa58f563cdc00f93e19f9cd5bc16f5f646d7666cf8264dad2c677d8d11e140fe7e8639e82442f3f73efffebc5f89503c1f539d1e7da80cfbf65f660e1d79cc1bfb3b5480cb67f2f90112a471eadb17d238abb73fa448e37c6f3fc869e05bcffed380b4ccbebd3601514f925e8045163cf36f9014538ea8220912363c118a81061d18a20a11554811c5fc3b1fcf17e74f15be39ffcec7f3c5f993c765e43222722288206c90908030892f62bc782a095509467c11e3c553ab128cd7aef3c63fe60758ecf66eeff6ee175f149990e850430ddd0aeb3c81ebe770399cb5dd085b81769dadba752e626bbbce8ab8710cfcaeca0c3374b6d66a2b13471c11e4830f3c4980b039e460e4846b08d7103bad1a5a35f8a0000541800002371dc24eecf4d00312249dadb5daca84ce1453525238dc16291c09f00ddf3a5b6bb595891d2cd8b3d63e39393535313935799e77432ec7e4eef7ce1a7fbbe74f842f8f5b59aa35dcaed45d0f9a5c4ea52dbd1aa24cad1ab8aab8aadc98ff89b6fb1dd5daeaeeeeeeeefe3eb6abeede7d3d0309dc6fbbaeabb576b6eb6aadeed6bd7af576a0c2b3495ca5dddd42393016fcedfbcfeeae5eddbb9bd25abd29a54da7282a0a2282889bf75d0aeeb450eeecb4b083c47743dfe1b393c44e0bad1ddcfcc01b6bdbcebcf16f72d6a415b89c503e739a4f99d3ee9bf0b0ecdf02eacbfee08d5524a6acdfa9540c207c14a20e72531c4cfdfc403513aec5438b871fa57befbdf77a28e4f034479eb543345075a98b27f876802caab673180c9e15a16eed923a2878a44c0db89c38b2e849dccc2911bd433450b5baac2bb89cb89252b182f326b1cc9a6a331489922be7bac275454f8b8816113f6464d0eaa1d5c34f52521111918f1042d8ece04005153a59b46e68ddd0c3abedbcbb627d60d872619797162f181724883132b0991200f0e263a30934306a6290b213026073230019b4622b98244992246b34a60632ac9bc0d5a3febca1330bf3c00c2f260503582111e08bc9018d50064a0d570f709c921d69e4221e81cb1955a4c992a54b6b2133430d26268a998302094c7262649c746043d829417cc2c60b191b5288c98440051360483c306296720c2a6c2e931952f2ba027c376ca8e01000cc861cb3211d038089a08746cc93157064b018a0262eb190033bdab12356d1420ab0a203f0c82841800d073e373ae082e7885182d6398f1e1809126000f14a8f1d323a28e000312c78c107b7001e3249f8e811b30306bc20d38206f8108b704003649a7e80d8e801610ed8087049fa9011d0e1d5abbbef20e78d0c163c4b4c4a501eb0924b92064965624412e68c166c051979968bb0e0073fd07122d7946bca3de59e725a724fb9a7dc53ae29d7946bca69c941e5b4e4a2725a724f39a75c53ae29c79473ca3589208a283a5b6bb59589274f5c3eb87c08d2462cd80eb89c5afae954d3a8142950a01c1dada800d902c408cb156c9f562da95a52d5a4aa499593268d53bfaaaa495593aa25554baa9638a92a7262e4a4aa491551d592aa2555435544554b44a083a69642b5bed7eab5bb2e31650aee9f76481336d810d4b5d65a6b05876e6cda3e0fbc5ac40bbb31ad7b659eb8e5cc8c0fa7ddbfb195cdfdc7543e8a82bb5ff73b922e73777791094a0b5210a7adde81fcac3cbffe3556bba45f142c492e11458f82dc20f7ba6b87399ad5b3a2b5d2204a29a59406514ae94d726981a005821baeeeebfd0facb2cfe332b2c1d54a4afda681ea0cd59065ed773158f7333b48939c06ebfef5d356bb11e6828b77f91760fef52e9f244af8f5a3741fc6264c6cbaccc5e8e2cfe334560f1b18cc352fd1022bd982309ec0aeb75ebdcf9b39ecd5d710473876886375bbabb7b19ed80e29706de6cccc9a756017e20827540ec3db15acb95c6fc78ec6678b17b2d5f05dbc90adfe0c5bfc0cc311e602ccbbf81e30ef623412257c232f0fd3c3c5b7188db4a89ebfb248cd01e2cc7f9d468c7044a3e43969d2696077f52f581aa7fc7b5f8a5e8c5e8e5e905e925ea4bc5079517ab1f2b2f4c27457ddd31491342ea0297299ca2fb75cc71b637d175b91e2d314b9ccbface5ceff036393ec3e8cc198b2ee5b31166ae4ee698a9cd67abf3445d9bff521185ba146beff792994ef7d1e8f79e309c0ef62208dd2aa3b14cc668edf30c7d7755d3763deccc876366f6ae71bfb29abefc5669f890cc9f6bddc52bc9ec44065aff3baa65cf05d4979fe8b6594e7cf626dfb1a7c35bd9858528d53ce584aac2516161613cb89f5c4d2c28a626d61e11aa7672fa65acc132fa6169359f6ff5a2fa02fa6a6b91bcb09e498db57c130466dadd86aca3c97ec5de066d67fb44eebad3b6fbc69231ba75c65affb497a64e37850eedebd9f6fd33877f4eaf5c59463b9859b37fe353e00637392dd483acb5b4ccd9b99146072c6e6fb4fbc31501ed2ab08851e08c1b766d121cabfc5af3ddf08edeeeeeeeeee49bbbbe9cf3965d416bb7b662f41d3922628ac2c402479859ab394c9f35f30c0252d6a657fea84ea3069e294f9bf09c828d9c7721644f6c7002d82b10253a3913a69b2148dd0d89cc2de5f6af4398df54e973e1cfd9f17b3ffc5da569bb5a636cad4a4e79ad3eec5d8a9e301772e6b9eac9f47ac1875d2b2a2a279e32f230b5e8d46a2f4f864ac6f0c724bf3d7e037d22297512597f9108b9cfc7153938e9fb053937e42132e7193288a53a558fb763b92c73b8a18aa6b56113e57144cff2321cf87993a5f7dada60eeb67f9e5f9b553480203adb245b91fa5c8cdf6a36440ccdfc81a675446ff8859f96b9a973c7fa6c52461e27839f7412aa36960ac9b617dff6a5c7d38f2f86af441ed48c402b30293ec5fc08c223706204065930a7c1bf371190f95b50f2a83924de49ed1900711ae0fe469a82348984302f3a6c31c429a6c22f436adf7de79afb35a370337dff187074cf39079d3efc58404a13a44a68c044c1c3bfe2c60e27423902b7ecc9b12e0994b1ab92d0dfca647c0f1a765fd3f9a2ce7d38f1f20b55a5baf603a699ad5f709ed9dd9cebdaf1d9234e9dfa371ca89ebaeeb7fd26656dbb981f3cc32d424fbfbf8a03de416446f324b3f4304b89c514184d8e0e3e136f06d9060fa44a17e5c4f9f2e392d7cfb9f2b366dd4fd676dfb617d2ef36d0fe559a34429cc469f4ea14fa9d0a756e84ba64fb124c934d3a74e4d731bfdce5229a24cbf8be8962ad57afa5299ce2c3f1821d31a997e2b468f5a669405b74623517ab43e7c235f939292dbcdd61aa7cbe8f7d0cc99993e0f2578da2a0fa2dc6cd316a57bfa332970eb5d5fd21b7d2ae6d60942578c2eb98c7eebc3d188900da450f48932e55129bbe03670a4462edb82e797d4887e0d1a9194fba32065a24dfe597036ad56cff3ae4dde9b6405977ee4478ed4383e22f99111a64eedbf6468ded9ad13742f505b371ae1808d32f9914371a426fd682ca94f6f4d4fb259dc8286f0cc9c8a0497b5ec3c43f2c457c41bcc1c4c286444bd608033cd3666ad715ab97f67e6b488032462e03b5860fbd41b779aacd1dc8d414d7691213cf3c6cb5132a0e8c63ce08e87dbbcb126859f605716a3eb84264cbf7449e57e19bc03a68f6f2cf8b0135c82397f7436f5d67c1b19a8b2c495145ca18494267e052388018a9222241fe0d90096269a928e40b145081418228793dfa894acd96b5aead08c080040000003160000200c0a87c4e19050240a7361991e14800b668a3a6a4c40960803711c866128c45010c23000c02000409021c4106310d2f001c7b7b6b4a90565bdd3fdb157df1ce4fad17cb09c2369df08fddf013d18d05a9ad77b24030ded4d33d289e7f40e9ce1e1b012546c11205bbecc3d16b4c22cc71d816ce8029b20721ed4418c40444ea3886ecf428ecaff5a1a36595dd168bc814f135aee013d75b91d1da37636a4a84ecf23bc1ed15144a0d21ad8a53c14daa9c7fa004f4e90e75be3ae2dd0ce5dbdeddfedb03aeebf40a4c2eddd8b2dde011b4c0f925f9536267a9d642bde145be9713dbd93d2672983faefe86c811ae19a05f049dfdaa3553ddcb4fa20cec966749413075648087064d5b15ba9e7e95797f80559e782bd430d5200cc0107a992a7cbbf5f0f8d1467b7414bdd2538f650266e7a2f2d531499ad2b197fc937b795d1581cc09c0845484c704c6ad4a37c8d49ab7ad824d6442719d6cc224565b25289931ff47519de5507ded588b945371214b5807c164c5bfeeca65ea465b328ffa415bd382347dff980a7b37a0f120479f1c370a5f600eb065b5d6e486b5c19cf58453fd0e213c2d4524dd97b748829c11cdb5a9c3327e60ae9266b79bdd58239f9ae63a9a5f2a83577a74506589c492cadc0272d653a5af37c1b030533b4268d57253c8a71ddf146e50e78b3a69cda4af43ce70d13fed9f6dca5ac923354d114d60c42c90ea227374cb79af5924bba8a30cdef1859188d4000a5db251e1e6b126b542be387bcee1e74772bb8b98aa88851718ad28ead66460986298335818eeb641ce882fc5a77bfba3d319dd1c4050aaebc6b1c0a9c1f9d49e1d226a91b9b28d1ba382de672404e00c3d594808ab1dff1fc8b1ca3db94a3e3c15c9b99e198210b03cb3102d6171a25161fb02733d33085d9bd232d38c5d1912da54714d33a04ca702df1c17163d5328206e94b5494151a67c721629a83b9518496b8b5506a50f3a7e0db02bf43fb53ebb8c9ae0f392f995933c1462464f50aa86b5f330dc5a503dc715f8e5da65bb49de0a4bea80035dc53a5a5ea324e5526318dafe54dbfda122a85898fea163b2d6512f8d6e8dd6f944cc879667f6c05f80419a8e0362367498e1fd6827bbd8d8310e9190a0dd0835516df0af852a6f4f9ada6ca1b53c9fa880ad4ead5e35ed414461a6eb1758a14e39b79bfe1234f728f5a6ace2f50535b42428e187a8a5505150c422f6f8aa9f3a229c1360539edf5401c42d5fd93157c363f8b68389109dc6290432b4e383712b5230caa695dc2e0bb19a80d0a1b4d754c325469461e7e62d8ce6a12e63cc038b2466a4b36ea307774d289420f74ce24df608fe94fac27b4ebc2f154cd0f79f20d52c8b2ceea0feef312b2f01da128f48231d80eb278aefd3f7ceac9b7929428e3d3e81de202c9f03823b4f5e101958b05b92d2160e40a6e20e2a74507c562bdb56eb6846dbb89ff8d36dfe66c160cced7da61e58f0d5360220ec15b7f71a2a332d4f6873ad1506c06de6e69873d3986a68ade20d6f8ae673897c83dedf4f17dd8a6f2ba49da3fcd6b3229231b2b027c77b84cb8cfa83999948818b66d5026b90f70f9f45566ed4e6eaf4e5701d2c9482b9ce7e690d1d51307d69919223e64755cfc9188cb7a534b3c92f874bfc22b06ba9c97dace27ce61e04e1a8a863e5ecbcc54256b983f6a7ea610b8f12e3aa99d4b05585db6f3a1981b56fc7072b4eccbae242712f842785f04301d62479ed7b999fb005b33a463387dd5ff53b9cfc03e633f99782c1338aa0a820bab4fcd5bcf6ce38b8cf0d1c858a00813af00d2d3101d499682e806ba531d6beee0f157402c71fa8ba2f2a8de3efaf0f4cf27183fd3318e81b5a26be404a92ec7102862914384c974ff6dfbcc20833386cabb79af47264584f87ec26cd38b6e2ce9b0383b922309ba8834d89f939af7c6d709c7912e103de23eca7330a2a5c443f8e71e56c36d509f20933b87be1f61afdf77350758ddf23e6f74c51e7f37f5d8475522f89c6e9727c4a6f159c979d6d5522234f6dd26e82fc5ada57ae38114d55df73a5982d9a151970026731f2eac6245cff6c9285c75afd3cbc0516e533beccb6f68322ed8b5697a7008e7d13fbc712e890a6f4bec5856118745fcf1267875a8e06a46a19392ef1cf7a24343140cf19578560d826ab53745dd590b0d32d36db0937c4677f58c657dc2f7a652799c0488793927414f023909f063aaee61ed495062df4f828c1d9969015857a5c9d1f60634bd92ee6ea18127f172f049105471851e1d094d313ab4bd6dbb8b687eb5e6aa6d7e91344ebb6cbfc8ed5a8d6d66492c41e3798a11d4b696203985790a1632c96ec8fa553edf93cf94aa0b5c336c7b64c5b762ee588206f4fc452b7ad681d69aa24aa838170796d107216f9ba38ef750ee7ae554ec38aa20450c62442af323c9b9193ee58192b29935b2befe939a759c18bd0a61a2bf314ee23d7fc7a72831ee337e0e29feab7d249664d0951c603451d168b122f7b50c39ebd45919a6ffdb4fe13973471eec8b653f45eb653b35f1409df0065df08a82e2eea778347915c669fb89b66a3f41ce7e12d8e92bee8c7d82ce02de027f64ab277f41510b8b7689c2d4f54b496886f136cc7a07e5d40cb147b9384562a285fe3767adb1368ba4e8255a27c051e656b329aa58f2fccc0e948c5520e5430dcb46d95bfc4ac7f78c366f63c166d9b8d43850137dbc37a993eb356a426694eba37311df18c346c59d3ace1229eb00a4be3b243c7233d03b0e409e8ea217f409a85291481f2de4144cfaa6ee886189ae94406bc0064847a875008e247e7fd60dd1d3a8a17b5260f9cddc7b27edf9efbcac8a24d861c6d0c2f261fbe4e81dd7c025d45ef296d512e3e805bf1ab73d5bf51ecb8bc905c4601c2f72673d73732d37a2b5b06699f7f2860b5a421f7dbb28b8e5340661cc73b3e99c32c35355b438e7c57b88873510425d0ece62cb8caa4c56655d0b530b59be580fe72cc3848bd2513b4d0e4b51d24613288ac49551b050841182e1c35ab76e6e6f38ef40c6255d013601ee85fb52601cf22112516aaf78bb7158240e03e1222579d0c88148a892eb8acfb5abaa074f8edd017725aa0e85ae31af621f7f568881c5a2a8aec2714888ece66594546539d81542337efc04575be533bd4b10146d5f688812282f31d872029dd7e1a88a8efa2be3885e184c656443ec7cf529d60cf4a9a64672743249e4c0a10c7b46a5ea9cc289bcd03e40606f10f70a614f3c27f12ac3567f8a576a43591b2fd799c99537d3e8a2a28b496724a64789d004b50f811de69bde2cd19b1d9dbc41df2f9dab7ce789f07c795004a00739e9e4987a4b9ac68369c8978a52d522d2c8a66933d03860a0fc1e0c0d44898e28194d22da0e61dd144d688fb7b40ea209b5b8a37b110a2cd93b063a706c6a90b91e946949387ea7039f08fa929fef75cdb49b2b1e1d6a176a39cb8a15e824b3e34deecff71ed9aad8aefc93974878e5bb99f7308c70309c9eb8415ca4e20c0ee129ddc20f3a892f9ab64e9cb1c408c3d9b826708cc96f10d59130db7e2b31455dcc09cb5c04105370f048e97af0889c437884e8ab3aa2d35e44466ac696886ce9a7b146aadf2440bad24d6af5c34a3a042acb30e082d95bbe9408511116255e75a0c899239bfb11656c621e55f40f50989c0ff29970224712b3fc142f108707be8d9fac1c9b7ba0453abc80998050b30ca6e33ac1118995a5e7967d1362e9460079ad9873a8117c326735f6f08fd544cfcf8090c0c04d5a4555043db5e68b527d2d29e57212214b971ef4ce57faad4d9581929cc2d60eb63e6bc384714888a263b45789cfc1592aba71e9496ac716d7082e7d07c6b3205aa79707d0a5e7987620cf3ccde6e210a4377cc0fc538b31e3b79492c397959a5ae941c2110cb40f64d6cc5bef2ca86fef24fb4239202093550a67a06ee3caca017efca696f291a17a76473a9258c7ae35639872406e056bf0ce01fd5339620252f37faa076f0c13b735511503429332702c08e4b06ebaada1f6a6368fb47a1a1bbf3afa6b3d5efb562c48486d5d34d7ec835b4608e467be1e4ee618203fabceb467b5d73a3aaee09f85ddcc9106f9ef5f2d06c868a5d4bf8f53b995b5c283bfb1356ccbd9e713f4ec151486be854d3ffe7ae94ea78c5f7ead705c47a9f78d3671cf4f14e0c767d444a3b27b76196a68c8843a127aca036f8ca9ff32fa145456bc3f26545ada50cf50f354a496633300e31fc43c2d819cd6e603caa0bb37da21de5b8d5c878d2dbb1f6e06011fb9ecb94622261d7f2ad10233f2e9a91923f6b867f369cc4da139e1a64e09f175b709089ebc3212a44f7e7fdbd3eb59a2dc4b94c89d8202cb77703c928fcae959269c978a4b3018947949887c18e8e68813c3c6dd5f31c9ec165962281c702c080d9dbd5098a789e6858ab29b20bd4f21f7c7b0b2e8fdf3eaf4662cc2121171c563a203605287bbd68df451799d17d5dc35d48b4bf358556edec5c82fc7c0dc9878e7ed8302cfb55ebf3f425d8c32ef941aa84584482e660fbf52ab803156a07aec1d581423c4c5a4d75ac70f4d47d610b5630f3f434f6d3606e8b0bd035e255cfda6795f19609403cd0ade9923404ee54e4677b0e055dee06c1ad2704b47d0311c0405196077b527c8ae2fddbbfe26ceb3be23a56307601ce74bdc9f1c28e137ffea096e023614a5a033356909c385bf147f055c393a5b8e5bafe8fb31c0983e83764f30c8484d1a6adeb074b5fef07b7f5a8eddee6d01e2bbfad550a057434b7b3db30988b8a1df20dad313c9565ddd595ee7f699dc972e31f88c6f980d3be68b0f4e6a220fddad03a2cc8a2f0b6ece62ad33f7c989949a6c82127394f93c1e1953579e6e7b02c9c9e5b1918b4552a2800f3fa7d4247b43e4ab9ad9718fbcbc11e89a1da1d9ef140e2ca22628c7e1563431c7739aa034d9e79c82e9e021b6904dbc8a6fc8f95b87bb2353654d0ed9631b02c5c3c8ebc0b66cdf72a2823b8ce0b8c2f446710ed1a46e98a374dd641331a622eb498983c983467dd369639a71ce6eb868d015125c6a6624ae403855ba33021dbf3066fb84bdb1d8192a24ad378d322db56ddca582233c2d9f3cd979f0f7e4322a7b43f5aa7dcb75d584ecc44365319113512fa15ea30d41c8e28e9c3601d90eb7092f9a6f00ce0d8b0986bfef19fa4914ef841cfe39b747121838069de4275fb33e50c9b9281178373e25c488f6d75697a7e4781bf976d129912e737c714d5f746de8fcee238dfe69d6be65fc4682b75c59fb653c9bd352c3aeef11560e138156bebc207d8bb18e7499e9dfcd3f60aa6b697b28ce4c448b6b9736e8a46de8e0a0d30c21152114b2acc51e3e11e1f2c308f3db8530a255acdaa6b1bd42d1a303833c454163c4f8ef860917ecfeec46426ee62e2558ed8d453450e2dc723c8095feb45681a901469694c19a1365dffd21dbffc83f52bf78a346f99ec4b187c62102fbd42014ab83d1c37d35cbe1852eff49607b7f609af4c124638dc28b3e341a7ce79b58a513fd43e5ec06a922147a107c07d7b2bcb77eb4acf4539d8094f4aa360f2959535e37fe71a25e4277f25a7b2602e1b713938224b4e2c2e48d780f04ccd65d4faba744721926b675c78f1ac76ba860ac543f72eae3aeacf7f333ab57317aad4aecebf93ee91fd691a2d6758c46e26d8abbb68beba610d25a7bf31a33e8051f09aab1b49f5eaaed488acefc5fd9a91156c8526081bd150522376f3fdae892664da2fb4731e085f6d1ac663ad157a009123fc1d388fc044c27f30b628aec57c00412df405308fc824f23f909344de62fc814a9bfa04948fe2f10c70828e2d041f557c81079333ec214255bc248d34418e1d8122f17fbd765ec8f973915ddc17396be079e6a3c734aafaf55ed3ba84487e26b31e58c997beb6d32c84c7057b77da0a68f6afcffa41dd956ed4e148697956284d3755eb068efdddbdbfbb71d764587b341195c738944f1a021cca247f54a2cd498522f8b49c71d4e0342a4ef6580c0cadf1e0808dd8547cc947f55080cacb78c68a5b7053ffb78337efc1065001cfb9d55148a9f422bd82c449e76865a8471c7274e938d3dddf5e91547a57401b435eb57ad2eb1332a8faede45762442eee16ee67a2240f240eb59d98e748ff0ac6e0f4414ef6d80c0835c03447e9ceb4580ec7d8f88b8947353781022f85c4604c6cf5d857a1150a35fa844fcee69417be11e6777518108240cfa2d5ff65092b0c89a2a5820a363e304c4f82f03f23d2e6b40a3e7e104d8e187a56911e7d86d8fc8d6fc0dd60742647fc12064e76f150413f64b465c26797508bc98b78e689afe62207c756f3b0237fcf54444e8bd46083883de731a217023d7386e4fa3dd8b872ea01a24c91151d8c4552336655d32a2ad927b87e0c3bce910e7b16b87c089bf1f8891bcd700112bfffe22207ade0644aecd7b2dfa9de20a21345ce1d7c87a39ae494b5f7a478d4a2a0d9e521e233d6a7a7499ff7938f129d1f22e0b427f5416b2ff9669d30d7b34bac090d7101e30227d8e0d70f79cca65254fa23230ee088c503500de3885bf22accca9e1526fa0a66b792399bf9f76c5e8e2a915b8803deaa4a94f5d16698fb0eb78814a338dd57f6ea05b624aa5cf44deacc7b3cd02e05de1dd506fa558f5af0d7e54a987bc50e9d4d1598335a6ba75e8d6a63aa601b900afbff495005e57d8d37e3219d52b832c581eca0ed2dd182665ffd97ce18312fc436cf00389f456a9ac2ded1a55af3cf0e36368951799a0d2bfe9ceed478d8669d6425d6fb1dd3ccb380135412b82503767dd862b7bfa46ebac9735739fa78babbc72a6521ad79e6adad4609d8109d1339dc30a3630d5387ff439cbbf969e9a10c8c9c7fc3405adc80bb8e9482867589a998a54e61265e31a9eb6adc6c33213246271f3ff53ea90ead8bb22b31c3dbf204daecd6f3a5462727c2a116afa4d9580e7cfcf4bb1bdf09c09384cdf9fbc736ee04774098d883d7cc334f99e99b5dca3c527c7a929d91860ed03f933a726a442bf98b6c8d72bfa557f1906acd375f447db9788fe2c43917f46be6f40952b010c118e8f6aa7a6ba3e69a27a2591ffa19cfce2e3c0d5edb1304c3c46073ac25f1212e42ad78b8967d50e9ee413693a3dc9d45382384986147b12bc86bed19320d7cf20b74313c7606904ef650d0986b20f01256e81163855f70704ab954e6b1a429cedd5f5bc317988236255d21c39ea394d81f9e785601702a4b424f9a9c4c95a899b86c44dd1bff3771ab457df10d2fe41e61ad091535ab7f153ebe630d25a53531c2f337a1a02ab0863072de8427411534c81b92568407677ecf2c14c244dfc190a0f39a57e745fd505c90771a3369cd48e0c8267b683d16b7f8cc057c0214385c0db2c044bf3f91fcf8c52de835134591c4bee5a849180ce303c8ddd148db42bb44b54031b3d5c10cab05e84036106ef3d6ffc1799bc8f7a5eebc5c82e56a63519f53063ef5dac904db1bd35d3a05c648ec6b39b4897e4ba7cda8981f98531307cba36b3718cb41be290ba4046f5ee15ff2219c6253b45b12dd063dd85543d310c69008b49dc7666d72d2ed00a8d8243e735d4b00f72bb7113825e4264f41cbe17280b7aaa06162950e2e0668c9f2599a0c05c45395c364e3d0002a442264cf9f7adfca5ab9bf81782e3ea437edfdf8dca2ae18e93e26f218b8936822d3cb452a3f490e16fff9385b022261c2d5c26f8f3764a67b34dbbeedc2368e67f1c3a29d894c23684b7f344bb359518e40aea0b5166622c7963531f887193404aa8069209c8ed692098d9756cd475f9371750e31f713ccdc7d8bfaa0016d153c3caa40b2389bedb24d470cc5d32268ea3395615ac951cbda40154077a8e13cdc71f6921b017b6ccedcc5e4d82aecbf35d81064375ec89a690fe9c31341ddfe0a6c088065b149c97895c832a4008be0d83d0d1bf8c85a4dd60a9e0273174da4c0cae161be1158441c3dca8a75b12727c45a3694d3bac58a2ae2d20f2b3877e7feef5b3e7a72a5785cb9befc85b628d74bffce20561083ee82622f72b3b184659ff7186ee0125d6e80b690d9b1faff3dfd96cb3facc13ad82fe388a680a7669874de62e12a8914be67819500898e7240ee1e3cc333d97465cd03118d2c10fb6237fafd913ab11bef4952564cc129e6e9e35c7cbcc269e873401c7e29244823f4f2380a3471093ddc34c8200126cfd22e068c15b4c961af701648a142c199c1b55dcaeb98e15c955f9b34ad732f8ae11e9119b8a1efc45036ebc1b966fc93e9719111e4aa86ea34877a7dd11aeeb392820497d946cd33877714f304fce830cbc2c8b468a1aa242af629938c13a03dd551f6fa4b81b81be7692e22db9bf259210c26f89cb9556b17f493a2cda3294e4bbf3925ce652ccf1629368af872b7ad828d805b672bdd5d917f3c863d9737bbf17f73abb9bf516ff81f831fc73d78bf330b94bbd6c794dba518fa1b42271bd82f53d26c4e9c46c07e59e9558a6c2f92de8bd979dd42fb03c7d3428b26521ff10cdc1386fb40123f73015d2a3580ef3eb6a6e6056cb03b52923ca00c212d2a1cc74e6417eb7b11eb33bea221d9dae0e8d29336a2f629129bfa207f1ec13ad1a6b5d1165f50a86536a784d79e0728d386975c8a7a95d9d6122b93ca73d19855fbc7c46d933864cdfeb7864a5d1754be84916ab0e3f7731543cabdcbf7b915ab4fb4e349acc4675c98922a76ac344ea801a2b757919c72a95d1f2907dea160e39eb2e26f3f0b322becc531b24a438e1c137914f04c5815b9bbe2230c022eaeb6862d2d68f7ea2bf2025a389a1896ef368026cd979df36e38d0c278c4a6b34357e94b4a08c5254ea475f4ec9903411da90a493f86074926499aeb48c36eb22edee83e18d9ce483e448705caa27cd9f497a577cadaafbfe4c2f3a760ebc15435c7893cdc88320263cfe6705f3982c437a0eb4fc90b5af62073f3b010ae1b9a7353cac5d138daf05525f5901c8a52baf93c555e089baa53947e6b7246dd4314bdfdb24b16fa8ee1c58c793ea2d7f644cea14d2226cac0b05ebc9f59c97e0bb3e684d77c83440971546ee6aa116585f42ffe3795e5a9f542127dbee8aaecc4e4bf55f3a73686c67c7df932e93d590bb3af7ce5167de522248f85940614b658ecd05c26994825be741a56d6c301e170463d48a3907d4a76b84d190c1a74b6e5b1ffca64607bb0b848945c65da97c093645e448e4943f2e61ec6a919401598777087e3394e1b11b19134c9fe421ff90649cb45c75dc6cccab632edd274e8f981db9e68cceb82ad778a774715888c91c939f7212b565f60567517235946b04715a32a75f1716a66df7bb5f265f17913f2ea2a44f5dd8d5792e40c7fd492907a950679cca7963fb72a0f9040643ec2fbdea2c04ab5deb304ff1b27eaa8e6b1941eca01619e4929bfc795dd1f7b1c031352b1a1af7e56207411d5ac98aff58a16b776d0246d975d42660c742fa2c81fda84ea3dee8e833422629e38948f78409114b067d7863dd3c1da968767820a6dab78b1c6697fcd5baf9d6879cbe7415c9643904b1ff2699144a13eef7a4f9d3de64cf9e3abf7990fddd8e0ea29739bb0217aa73f66593ac81d7014f22cef15340efe92cd32879159163d92899668da8d8ae4bf0ca9f5f014dcde4db5d32437de3889034d255d10af02645a604081ba5f5ea3dfe474ee290400cff8405fbc8107d59d7f67d22ae9b2c7e9bc4cf0f0bfef9092c1fd960a5aed5beabd7a27fd795ce51d241a5bb0c48047016c7da448c9a11b1ed543ac23a0090d56c390c72bd442224092d81ee348199e25dadf05eb802934cfb3ff3aa7f8b5667b9a3e85447373661ec328663032f93244120440940452655b04eb8d904282cff26bade01ab38caf5b9f3b1df30f8548f85ffe3fadb8c71b82605820aa354cd54f8561cd5a2c5f1d72e4178dd850751f6443dcfb1bf37aacec83578ee9ceeae0b11a41ded8352719f862b7e4189030ae9088165976dadfebb7821477f1ec672739088a6b2b6852b63d5ebdf4536a883d3001de383d35acf59b23960ee5a16948a39871642fdf685a4a427678d05e50b20e504a7f0e92aa02831a2b0615a5c02353c29b04eab8681e3238ae3b03a67b17454dc24b3d233d5c2c303bb8bd5306daca32b719fb18922defceb1622a6f298250966b3a143fc7b82c2dde4a7e737c7d1e0645f4e7d304bf688534fda03b4c83841a7e9347b7029156eeb63a11b03468a98fbed63e91a51faa6db992c4f2e66e7957440d15e436e1a19d6414bf46a66d4ccb5435c751d2c5c485e7c0d55abd05b80a0316325ac252fe126c3165c1c3f761e50faa242786f08d0012fbf2019939c4dd7fa0411048ba5e336cd023882918f00196519b7b937d54a8293ef827c7d1a5233329984e6b1274f2b32c23a3cd4bf15866de1be639ad9668fc1f8db968bcae0ade0e9fde1606d651b24c98a5d5b31ade0d4e29936b0e46de931c9a967dc2557dc84c673ebeb4274c29779c5780bdd081751084d46589d756b659079dd8f8cd1602ac7fb3634dc269dd6aa6c4b87cfc78bc4594bd2645299ab328d61c90003dd1abc542199e40e559e9904d41dc0598f0aea44e5c098d4d29c5eca56e8020179db701c107f17a2a00ab886a9e25053448f949f2170e167d00298c74a5d87230a49b9dd25c4a1d6dd10d99afea6368ab24568cc7aedf2f5bccdd92dfcdca80893225e35d5b84b11ff1ccd75ec80928975336ebce8ea08b942ca7f0b21c5372d20545d752784a6b7c2b3567f6a0e703f0e9f3472d12ea19df39eb50db702c1a36444586fcd9c20496fb5861ad6e4ea6b94548513d39efd58b08aa16c50d51cabef36b4cd488639b5087ad15d1b0d6be8cc7e6de7624fcd24c242531c8e7f5548f7e95f219f78ef0bd34003539c7ea379871eba06fba9f8254b4b0f5b3379fdbf4ad9438fa0e96100de36d86de05b61153e1ee86f24091fc6fa67bedfb8ae6bde96207cefb4872a2493b827b18af65bbf21baf5fa7018d98fabd8c23743c19e9eb9a87939fcbe3b5397143e16a03c70df330f3df0da21b3fa3c5d45ab7ef87634b52158b265ed188c2dc5287c4fb743b2634279f406195f39d243a2e6569cde86b53caed70d696edf34b1bafed1a18d1d8b2267f5aead4dfe29e4a55bad9127d022c56915d94991ff4e3eaa748b51665ff35eddb4393e409d777cf5b35f51e483a958d207994c9d0b1cffa979be7b139a80da3aca3cdacbcf0b18cc89f35eeb2f2a718d9e2a98963d4dfef22288ef4b00031775570a4781ba49f73faa05664d1f655170fb6ddf0bd93eae4aa164d8431532b00b4cda83937405404c13e51f9d8d0593586390b58d76659bacddd082553246baa3880e1a52e3b9bc2dcb4bbe88bfd478ee35c5db6a57da7da02f17ceaa9344a383c6dec3eaf4e52450691666915975a9f30c6261289d19a338d634f2281b1e15e9cbd05913f972b8b38498f419243c3a8f34eea26de9412eb45449b97e0bada921c083dfdc523e1254c3ee484716ebba6a4475a4f8fadbc25503d73fd27fc245879bed89259ee84806278bd5a806cf3c12a307633da4af131ec04cb7bbb6e166cb1f1cc5e64a48075836b27929ebb68b2f37d5bdd8c1c3cda62672d203a3813b6079cae853412994be41bce0429bed396027c4424b6b412a1c8bb13c051bc48673ead0b2dc18fab3c90017fe8cb4d96c522aa5617145f1b8cf1ced33d11f9fad3d7512fdad40a636ecc3cf222789f9074cc509086c46bce9aab3952736371ad37a622e04b7dc6d21eef09f110ff0748a481978f40f434de9aea0084121ea50fd4e20d831b4abf0997036d2d1bca8d224ba88740625949c5e6247ccb52d3ec5de7a2dcec78508b6fe65c75f7d64d25859e1039cd6a5987951a98382024dca88b146bcd58508395b8154024a3ab8b881511521ca883962ee084c810282d5458eccee0f9711713d3f6ae2adb683df57585fa55f372404fa82d5f8ca35bd870cd25f686cb920bae4106034eafc317e9143c845f23cabe8acc18f1b5e3ad1a40279a191b98092aa8e7db4b407fd38893fc316e2b1aa2018487ca28cc2f9e86c5456528820d94e53ba13e297439f07344a4fabfdcfe85583cd16a5cf349931866e43299d491995cf92f0c5a7fb1a24ff8ff126d6a7b206a944b4f6a74d3024270d067a07fa2be1c77405ff883768904a81fac70bf80a6c72ca9e038e83b4988b495e3f1b6038aaba5ae242ec19c33105b247f7f347808a7a436242fa18c206424d5984dce4c7cabc963cd7f2dcdf5905ce2dc32815630277402f19e94d66076784f59fd27f813849cca12f27c70dfec50c5551875f94828b8017a9f6417a8df95f9c69018360051d91dd0ebebd652b4e03d9d702224bb00022c216de2c7c664c46ce36f85ded52a5445fda934494c196e63575d82c9d910b894ce9849a5b4c3d49d0c0d9f3477f56b16acde0099f2489a1c48f431799291952016f767f437b641906e455fa57b9517b8b62b91bcb28e9d485bcee93b1ebdb55b8e0a70cac6bd7f5725c39eafd828e0f3564d214dedf8546a5ae666cf19d668530f30fee140035b3c98a60174385272b34acb509bfeb2489ec1444d717875608875ee6d33ffcdf8cbfc3f440b8f1c07d03ec781f78b76915da5bde9ee77bea10964a67bd8259a60817a6d132d015397c6a98ce2b6c81078bfdbdddca232a0867cfe831f421c5cfa3575736fb117b891cc8ed3070c58ec43123f0982b9380d74b6a1dc93db089bfa7a225c18edcfcd54e473ceaac66a3feb33aa389e0b64ca650c96d5c1d484ed08469a7241c5134d794c9eaccd579799275d052f98685aba68614bc4df411582d9ac31e7be018ee5c81f2944dcc9a0d27c214b389c8209ea7c359e19eaa16f30797b2df0d7c60ea9b6fae0e539a6edd61378b23ab74ac531430b5fd02c376ae41b0da1918434f8386564d28029373899327afd71b30c7617913fa5bf2eec7610b0f2c9de47d5af7aa25ae89562ac2d2f877c79954786336f8cdaae96135eae3a477ac7bc8ac5ed383af28936bee5f8dcd7074335af9d48a12392e915a10561622ebeda6ba54b4687ab087064617ea5d5591c5c44f2f74d3aeb1c340a7f081737335b91ea87796608b39a82b99dc5f65aa7671f464428bd0e84f6a572b42a32ba45f430fd422a7eef02f85d2e41e3d238f3e3948fa5a86d21fcaf59c8225237d656527cead013d14e99b8959788e300567729212f9c579f13a056ef81da449f3290cb9448f1e180d2f57a8c422c514a6c66dcedd4c2be0190f9d44fc98eb06a6dc638b5704228c7b7881672cf1530e1ae401fba6d7f9823e36947d8d3fdf93224021272448e574a73b463c6c70e4e61d74c8a379ce797dd049056e4a431b431f8b33a901f15d3e3e33eb174c7ba336587d9f38aecac8012e9c1cebcc8416a0f032ada22885c33f557d200d8ab11002a914c3c8863531d43b2dfc243adf54d749f4afdb4ed3cc7911988980fbaab96c1914ab78e65a476866806f36bc9a7322ced38c7b6e0d394ef67c3688a24b8fad146f1b3343d3e5779a2cbd2143f9a8a585622e2434b32f1a325854e0267873bd43dbc88617cd219de9886a353be3856b1b23cbce4217080ec2e640649c978ff22a047d4501a9b863852e415582de03e85b80a8e6c5ee42fe92e42fdef7f951c2bb082f4c1d76932fa423e29c9f2b48200742a5f293d440aa5eadc8e93a0b173c15bfe2e4ccd64a9dd26a51a76a11e3d79424aa7cb84139c769474b66ad01d9c4dd507e2076c9a59ff54be5be51921699e705811471c46140f81984ecc2cc4e9dc57ca4d9d1d8fa3aabd7b4caf9e25f6c7d09f630d8f2d1b3c8f6fcc333e3dc6a2cd8fafa43d8aab19330f98443d86117569c11a1ad7c6771dee467932fc6451bb0290d262e48d01564a2ec70fc92a672d904efca935e5b7acc9f313f7aaa4e475e6bc6bfdcfffea001446ae76344a3c61a2d981db86f415b84854905bce23e7da910ea09c98e3b7dcc86a5e15bcef88f98eda811fe74a318ab4a279e0cef0db0f97959a17953becb01850f81691e2b97239f28a39b229d616bb18dcfc23cfc58001f35626cfd96d1720da87d2e17ed955318eee932de9efe68475c9f7e5b27579a03f1c4c0965f52b1db6a34ec979f3dc05f1af6af243d871977fca416ef43689f3ecd53e09a976eadc94a981386c0276da44bfcb405414d21f1c3cb2720219c08e8f9ff55c97c6af3f3102ca07e366fda8ee7dc487de10596a25227c195fa4173b639d91e332060f659f1712b87266e572c0901ba73f6e7318c4c054f1657fcfaea3fe3972c6d34cd4ccddcb7676018eac61260699750536cb9af82a04651ec962823a5f31021bf67a3901c70c0e571544a9d27dd83210103587d4e18683aedf5e715e7362897c60dcf8e2bdebfbae7ec6a99055ec5da06b2615b231480b2a4fec787877e414ef9f75f3f0ef57676dd048b87d475d257ffdfc44553ff6a5f627d7ce41fe5a751c30af9f70206f63a6b571431d0b175228285ce21c243c33303fcd6168bda718269f2b4229f2c3c7e68033bf1bd8020579b4e83e7c65cbada240045b29dcc77c86c451c429c1f8a85fe92110b756d1b7e735868324ab4f74386d54b2255c3986de5a533fe63aaf52125a02b48bbe467ed42ea4f6914841185d9c7377eaaface45d264c73ee3b5e7fc401a0e563f849be829135bbec6062f2570fc0dd51acb833c88da410ff4be8bce3386ff917422ab4cd12aa630aa4a4ae83808c995e585e7fbd4d32ac72a9a2b1cc92ed40e49c377c3b60458a331753768e3c867dc1f3433b5cbd8a2950e91157ea5896791d2a60706a28a89eeb4b12b737beb2d2216c4ad821826504668633bc937c5e4c3365c3b85a10cec8a975e097508e32c049652f4b19021bfafe89017112bd8aeebbfd8adfdcf11c904216d1de2d0bfe1c66d85314a5ac5f9eacfc35ed21d1d3fbf9472ac9aa76e94a18a99f4b5505a0d13f357c14e6cebe2c19e551ee5e20ca35aeba3ca0b586fa2664575918de179900fd834d9ff07ca24472132d70ea226bbfe03f7ec0f3c14f0f2aefdc02b84935988ffab1b88b445e269705994280f99fb386bafeb32eaa5513945b9d7917c2b7cdd6b355ac782f162b3454eb70634529cbdc032805e3941394c34555f27d71db05e001b475b0ee8c0f28f38081deb6d318ca145a24ba56678de5ddbe38fdde2da523eef7083af4d4b7c56044a8d5da34e456fd41107b3c78bf7704b2dc4cf88d58cd15ec138a4eeedfa26c0c6cbf761ec184b8d88ae4abf7863d55b5bdb0e54e21d2b613018fb48f13c2daab8c7bcab21d0280ef902ad722acddf9740d01268caf9bc8e61cc01475ac89266616cb3e99c6d8e3eea861eca39e76047090f2e1f55209e7d9dcbb1d88d378c0173811f1206f0cd7a073e2c9231d97fdcb1e3ab3d8f12b3c85c36f8b6266296077067a1c8751f2f29b96cb8846d3241d72d5aa772ae610dde2380955a9b238ed4bc4f12874df2d22aec109385827557bccac4b9cfaa63f49fafe40741003cdcfd0a742496b30c58a04b75874dcf5aaf17d3cc6da4c5d041117916438f7f7b3405d7fe6b44b23dd11eca48141a4f30c5398f528ae3e9b21dc9bb2b00ca4ce2c1690540557c53ad6d990bb1bd8f945958b8fe1cadeb85c72822ad6e3abb7c64d88ec317bfab004d83a3e8618ce8cf1da6dcacf8c7d0492b43067a64f6c642cf8ee950af1332e653da07ab9aa7083ea65c3bd53780a7caebd50afaaf2668a8cc86f620c92097f05aeea628267154bee7d2eba6796294dc994c981dc2b943d5f448e7b1728ed9f339ee46208a930af16647bd8d6db7613080417bd9d14bd0822fd0d1a5c04fae66866eb48413ca0d5d9aff7cb757eeebca1623eda9661b120908954798038a78533d27d5cf8f30047091b290bac46d0a87629981fcd3d54108dff46a49a37912f097ce3f2bffd880cdd3980de38d8df6b2c14d620f66d910d51aa618603047cfc2efd9795956d1c42ee18af5f62ecad7d0cc9dd1c60d63605a39683cbc6b0a999734c4e8b3b4cbb9d5ce2c367caa8c5c49a8631231b0e6972f941e677baf01cffdf378716ecc277037d28f3008c29a1b021330c0bf2bac29eeac28904b78e6770868fa750360e836f5c0b8a1e228d011329e732189f5a0576ca5b904fae83cb6d5522e03ea63088815f221fe5aaf6e02622126a6ddc440fd1a66c0c33c92329af205ba5dff293c044cc1121ea5206cae494f38efc7abb5e7c48296f0214a2c3b0a5509a26c000587990c88f396014e07f2ab68d6aa7f0b8e6a9ccc3c2bd0e38747fcfdfc824217aadbb1ab191957235ab244f9c29168c16fe982f0b582268efcf0415150f073a6ef6c6bfd137bbd840a9c19faae7df63b9db93eaccf862fec22ab9fc8a658ff27af4beacd05cca1987f06d290789f441b1bf97adb4fc6a77da398294f2f3a7d7494278276c25842c3f66c89228938cf28c214181853807bc0f0df6104c868190035ec249af0f57421f09fca60ce57dcc989188c7d97d0bf921169680011c9d05fceba48b9283d961ca5858eda9921c1fe3b885e3aecc84a484813886126496c7cee5d3dad72c05272fe36c9dca0e8c0906cd0a98ee3d9669d535b9738fbe8b47c7ccb4669cd81be1af0c8a0ec6807e2f3a31e6e90483c89d90c6ba93456e296a79d2630691d73ca63349a7abfc7a8d715874ddc91a52b7a4c2aa9c5d2aa544f00c8b9f462e78086e0576285d51843aca3d2eb08542788744133f12ecd6423d245720e537330d74c5b36e27fe7ed5ff6aaa80b72f8a629b9f865770a253ff9fcf6a73ddf38d36ccfa6f681a0967086fc84eb51e6d9bfedb387feca3c27da7b7ae03a1d2cd8ad8d184ad27a9df4baf0a90e86c0f9943f805b1bfdf2623123b2384187dc96a04b9eb643c0e3665936aeaf4f36de8037de1c9f592afe4aa8aaa85f3b4a10a92059f4b323eceb51aea5b133a9146f4c3d38c04cc043f39ee9122d64bcc8127fe015a2ee9a974cd00bd27f291a726a77fa722132790ac9e4a8d5d2b8ff4e0c0f3e3d7f62e5c8f998d3bb1e7e960d16b03111d461493c24a18acef55921ffb91c456431c6e20c3b6e8c3b8ca456b130b6781a67cca00eea5d8a40eba678da8fa88c190075a1ccf24bef11b04ca2aa3d8a20347f7a87a24355aa0cfeed84144f07f12d5ba023f67c8c7ded83a34f161aa6aebcee1df231f4210ee6fcbaf2fe8f250f4bcdcd196f8fee63808beeb40cfcaa04250b271a53097aa4eb8227c14055ca2c345130ada1c41834a3026adb49605d4050b29a0e25135ebef8de6fea18e800c2f45cd043d1e51b3bf8953711c360096f884a41659636bc6debea626eb9f245c18ef73a20fbd1cc3fe2f210ac08b0d1bc2794d7d7bf66f928cc8c869c167ab0c7e752dbdeddb6945bca94920c0006dc05ef0531d7911a596cc83f3f404064b1192837eac7ad4d2da4595acaa6e3843468dab64df2a045031baf7155084d9c903f3e0cd3ac0409c588a050313a9a21b14f33e113390ef25e701a9a6258131b720f2cd2700ff7bc64c39a90c00c36321735ca48ad5b724bd9929b5da8409a55e91736d7140df529fdea4781be9286daa10df3d6faeefd98b5d6b9fd4685cb2b0b5374eadec7f843bc753a7d365115bf1a22a9c9ae6673e70ccf711a07647e344dd3daa6a778d1b964788344ea3ea22aad716b5abb3470c70a881d0948818d2dd081e5f54294e9d50d231a43e91022311499e1c80dae1b1c1dca1d736386c98d07572f3420d62b8c6a10b7b8f1bd2f46958662418c22d481b22ac4568c663255fa436ab5b6d2fa85393c89515cf9b4d218ed2b25f25df74294e9bb356d424629a595e3382328b554dc36b7c29e0b15b8e104648ca09428ff42a3925b324b6ee9fdf0232e76905c2d15f9d29412756846e48a4e0ef3c4a597cf0fcc89506ca86bc87155e19c4a4d5b94f1cba29e795ce596abb582dbff4c4c529ce1489d2186233654663393adbdac488d524a77749d41b3fccaa6b25b3695dec908ce67ef07cbe827998af58ad80c37839125a02157885c8937b4aa0626368cb2a51afddf530255802cd6868790155dad56d2065b7c615f6ab51685aa09c01399a4356e4deb1da86a25ea875893631675c460474c4c4ccba484e9e956e9b6d1ad522d65d3a0d7b8ca3d60321dbd724499ded171b974709809eb44232111c70a41368c4b35dc40698e28d32f97c17c5e200c3ae02a47cc0c0f2036428610d179f1f00bbc29206143c6c1c9b16916cc0aac46999ed9810416395283eb26476787e7c504b7a2472958860b70e30b80ab2aca6c5f5b2c8d2db68ab8ca89362d844091a86948d564aa51a69b9009a209276956662c6319cfd88875c0b39f8f38ae141b321113592d49ab524b595b43b551c61b07324a8e5c94f4fb78da3cb4b8481a032eb2b89b7cb5efc7e797ebc8ee2706f21a1eab1af8a6f5dcc32ff6e938148760201243cbc7191f3d0ca01889e581cc8b47c58f406cd9789128f3c9eaa54053970a6f00536083f206151b82333e98a8aa0fc277eb8315c8a51f410b034ccb672d4a12a9a7bf9102145cf9fe27f08fd4b5f1568c510a28ae7c979952577b4e6ea90f4cc9a71f71ccf70b7e3405de2072e59ffee431ae3920cebf5b5e77f75642d36a131d39781000626cdfcb18ad942d8d7eb02f31391aa7851aa7757aa75fedd3400d6b271dd4318d3b47941ccc31978f83a3a3c3e32212c4a3136338487fe58ccbf8f30383c930c6e4871cfb6e88c3ec4e76cd62ec6a5a4a0244eea42480b9f205e512235863ab0b8fdc29811b2a105c47b7978e7331c2f4591723dd0cb3ca49021b50135faebd4f32e2e06c307d3182f2865b6d1af4144c830ea4c11958ba2e4a1dac4070b58a89a9210153ac6495180ac6098c5ffc6218fff0138625b10e0174b021f3f0148932d58a987d71027b21af076fac6276f0a8016233e405fb79020b9f66c786cdc3d3637d8a4c57b73284084a1ab18408ca9f51255ffb971bda70e78c1f446bdc9ad61a774b1945ddb6ed8bd17a15312e4dd334bba1e28d563988840dbfc65b1e134da98efbb6872962392ec6555bd3a15fa4a95fa4619a5a1b053240fdab88a325159b890269d50654bb23574a93a9ca9cd168d96afabb9399e7498bd2e2e1695eab9f4daf30b363c78e0ba303c9d58382198a8130c0c0558e98191e406c840c21028b0575948e85e00569a4d8b07fc09f17209951ad285408379040c8af8e5ac51a6fcd44950c67b8d34a8a82de11a3699a1613a34590fbe7de4fcfbd731f4622affb1b9a15c6709ec77d0d22e854618324148edee5728151c50da2d02aac40f13a2ea60a0fe85cbf6e4ad96c1f9006653c30bfd670838c325e062d224912182749dcd54a9dd433ee5927355267e9a4bf0fa3850ddba88dfac85d3e031d52b270699aa669405a868752971fed4029a5f5e602a969d05f86877edc6c8e529ebe59fe3039c85a679c7c698d5bd35ae3aed55a14ea3f061b302fcd6a3904122400180389c6c94fa32d69376d49e78de07cf9d5a0d473812f4d451c36dcd002577bf6cbc9538c38662b517fa667d5ae54c2830c12615f9480081fb2b8c204cd7c21b19583931f84e00724218a74aed0ccd722ca8f9e1ac3d628c392573ce133c5cb9461bd5da9f70723b9e931c0c5760d46c9fa0659c6d63a19fa5f38990ac1db5fbf529866752afc39e7a4dfcbcbed3702def9d200486cf8c21d4cf7cbbff1a7748ef3e4fffdcf377a92bd05c49b0ab976357ed0206f7f773b6504bcd65d469e274fc5edae3a1370fdc27a23c81197d0bad62b6c776391ce11d6a28c90a903606143cbf6068872b1d15ad4eb2cb921a80d116326cc74f7d11635d82a8f189b4155b9520403293bc0e28a2934bd04132058814bc88a23944c0d6cd1848de2f6c374ad4f9a4ceeee6e734d756c66c66a7594dc8e1501f1833be3c62220b8b8e14a56a960010c79165f1559cc8308fa6b3ce3a1898fc2c73aae627722250c8b0d5f801a74fe6cb8c0863ce3d8756fa5de4f78ff5e9b27a4bed4d76a420a85547455458a341e65f8c6222558cce0cf5dfb5458625fcdd2f977777f7777777777d7fc25bbbbf720b464442c2dffa1ba8567dd32c1857425caf5171a7f5e8272fd19cb0d104f70729a158b3230745b91876a6c7bd02fecee952cedbde7ea6f1cb7f1c6a9da20959e0fedf45ae775b4bb53f719e9bc53ca82e02dee26fc9c315d6608538439c2444d1a93849f20cc9669679ddb344d6e76d39ba729e3270aef3cb549e7a3f0365261bdf3e7df391f85afba4ac2d87a42ca9220e5d37094cb1fc1e58be0f24370f92e3ec3e583e02dfe7d2f5f867c13e4c9e57bdeb97ccee59b5cfee6957dcaeb2128c1f5d3d09aebf657a3bf6fbceda3c212cbb37e95f06ce3f9dba75b4ca5c54b58c56f328100020924a452021040016e01b81559c53a9c027f0db203bc6c0d101b21438af01be956f5f8c432f85db7b6d7a3ebaeece67efbb4a7f4b7df68f7cff416bd966fea5e9ae4658f33cdaf3355d1a48a26b7ebee769fb4b6d678662ee19d39c6442ece462230128df722aee26f7106e2a751c9f9e6fa095f13733d12d9783fe15f52fe24a4fe3b65c2fb9ff0555775cad62f659fc617d4aa7ede89aafea418a4d56cd6321491adcc3dd5a6427b1908b4f978c955425ad5cfbd52faae29a63cb95d77a667ba612f2da3c77b29c96085c4831e2449d9ba4ef21b1e401a8e2ac8bfe9b8428c2ab4c6ad69ad71bb0b13e549ab1c5a482c9fe489df00157a8cf812754145198ee3a2cb3e715fbc5ef7d93408a4c14d86e7749a41a866d966691f90565503f0403f1754912b23284d9bdc36944cd26169f59bc2ca1d5c84c842d334add61a1d6164c1b9ae4b939229c9349b252199b298924c301351832d6061439391c9c874444d2fcec55a536e4a9b72ff883738816b862bda7065adb28d5b5ac20adcb9f5681e54da1ab7a6b5c65d5d5c406c5c80d8b627748ce13177e2b01ba1bf6ee488d9c1a3c646c81018627098fff813875db971669dc7630e03ae4d5c37d7268e6a1c970a8dc45c537d8ee3b89acbf1b89c89a3f567ba561d5bd88861c54690ac1ab7c6ac716b4eb521232dbbdcd7d7d534ed02b0ab5d00e83a37796edd580718406476d060a4b6c4e5923181cb65536959c7622d6ba2aed2b208ba2a042c6cd8411dd442b467463a8c64847680ad382230f4d41cd91c6d1fb7cf489198adb1991c3c56defad53fcc3fe00314181341f9f6573335406c6404e5f7d5342d7525f6421ebcb18ad9c1a30688cd10d8520e2b3884e939e7ec39b939e774e92da726a1cce8810b0fd2fb72ddb9f763bbf33979d252719337be5452ada39e23b79cc2197e585984cb1159d0add26da35ba506f8c0152e3ed0df2a678a7f0300617c2ea61718186454cdaf9f35e262ab9d3d93a0c01beef42c52270a191f28cd42a6885aad45a142b002c4cc8e1d3b284737eea7c924e384d72a2bad80d5f058b96e727476785e4c7c9b381b6f1969953f96998f980dc18844999b119cbf6dd206705e0972b0dab30b1d30e8c04f0a1b829e02fa528e524aff1d8857f3c56aeda24ccfc89285aa48a78a8c2c36047f70058c325107375131c94c3153cc24331199aa9864261e6fa10a1b9a824c41262137cd28a54d241871b47060801b189d2c644086623086718c83380a071d64eb8d453e38b861d7b980302eb6eb3a97172860ae083e8c71ea105b09121f1d21751251ff340e6a668d641d6b1ccd7524149c26ab30121cb2441a3061cd9fb58fdf958e44530117614219438244f66a55bfdac85bb2bf913ac85bd2e52a9fb9aa1f25b344ae180a667f66afea0a1ba797fcc5735dc771dc854259eb2f29ee84e27b69f2c547e05045ba628d35562438649969da4c9b69331a3089d51aab318f51dcf9fee4ca777fa150fe82c077e5f4d85685c331848fcff597fea0b496a5e726b0a17c79247c700370bdce19b10cc1240b158411850f51585ae0dcbc44c0811ec8da89165e8020a3d0b8218cedb75320b10124ac78e003b77f03bbd906e0871f3831c6133b70d1034d09c600228a0a889ee8383177c0f0919ad7c365cc114c6e47b9fdf5882e6e3f6557175e2841d2b263d50b5e61bc7eba1d3871fd79e4dc70951d4bbe7cb85dfd064925305d4f55ebad17f0e59d091726300a5c76e389e52adf13663214b3dc7e1feaf7f6a1f7a17e87d2acbffd2d44197f1d90441c2def5083ed8a385aa61c0a51830348629b63abe5ce441cb78556c761eb768bd742c4d1edbafd8da453edaa2088b1136441e27b471cac009e14e8db291a5c474c81ff08eab21071f0ed77c175446ef7544cc4c1df35c8a696100b6cdedf7119f5e08a7f29ca4e949f8d490f176daba6f84a8a55c032002696ffb216118733d229091bd2697de470b56f40a4a11f3d1b0ac4485f3bf93aa8c7ba93940f2003969f46195f22e2882d17410c1d0805458b9720a4d7a5d806a2b1634307bafeac4594e1ba858c1469dc90916452962b515cb20340fe314440cc726d50f68811c3c6e76e2cea00cf75afe2d9f3e1e0a5af554969d5e24c85fed2eb113fbad7a809a3153a20e95c5ca20b13b66bb0e357516554ce34a35e97aeda2dac2ee156bb069544d06ea7c22d6504e676ff105487a6121e3ae5e808257374b41a440ef51cab55cc0e5c7365398bd75dad5689a855b1475d7958c1e0db39569753312e3070aaedbb0489fb0e0c2cad8ab72addb42adef67ad47a3ba063fa60de76b55a54f81e11d16d845cdeb8cbdffab19d8cb5f9651761aa104fd0e0f28730f6e5c6294fa8e06e2bb0336e9cf28413973fc61c6004ddbe1754ebc7c66a45b8710a0a965c79e394190c71439474828b91d53c8215be4896bffb2b2f796b395c4cb9bbf417ca0f67cb9794d26fea7eb59491eec6b093dcfedeb66aa29ad6759ed72366b9f30b5b87dbdfcdaf877d7827aadceb1153ad7ce7a06c1588b3db251453a3ae55aa3dfd2480c34c3ba5713a710905cd01cfad023c3915da30db25ca9da5cf2ebaf3d3eaeeeeb4bacb252c83130521cbdeec9307bf118c7bf92bbfe547f13f0cc8bf6a564c092eefe0b802962cf98627f3cfd0ac586404922bc28d4b977198f24e07850a175c9a824b5f4043df7240039772400697f62871698fd2a55f358fae5e68b4bac29d4520e931a54b8e40c4d1f5c8d294bc669a73a0ac75808b2d2b9fb9e9fca1bb7b8a7e385f7b6e7e9d140aa5e4fbdbe5387264799a3eb3b5a3376a600b177052763b9ac5b2f34bc4093e1c18b0fc1df3c7b0bbeef2e2525ce61b70bf3105d75ffa5722ae3f4a88115cff078788c1f55ffddc229ea5eb5f438492eb5fbd1e2efb420c2e72dee572e1346b5576d106969ce0f653eb2448a2d28384d919e2f6cff6a287ebcfc327b25208224a29a448b1c3921948d900cd0b5730b9a28b1ae820469620b8c8f1aea7422311e9ca973e36dab0d22650e1f6f3edf78781489461d0766bda60892796741125082934bee4c6208c1ab0e66de5c064055c4099f224890d9aa0f194f4b1fc2d43b60b220898d3152f7022e38a9618b5acf63265638a0d654c1236945db3ea87f2e773eef286525e0968f2d60fd520cba5c1f854d352357eccaf111b9ca91a3f68d0660e77a6bb891619a5b07e719ec6f4d1eba184e967ba258a977641c180cdd2be7fce199a358dccdfc1637ecd7c20f385cc1f329fc8fc188acc3fd22da699bf553adf25e9ce474d8e2ecd0a8f70eeb9a0bd6c70e5021df820e5f4200224d10a255f40c1020cf4c0a544336bc4db29b13be6f3980f64be90f9d10b77dc1df379cc07125b0ff0214f027bc0462a2178452a2198824a086297bf985dfa1c6b34918d9696d81d4b7b1e1ff1cc07d6291d0d01d1933c92326934336a952bbd845c8d6507c809142219152327b020a118500fcfcbe767e7c68593a3d35862424344506e72d8888f728c6e726e726e726e7628c75a0809a9841b5709250809c5868c4c5b55a2369086845a95f472492b33a42b491a14221915a3e904162414933d3c2f9f1fef1b97504ce8c675e3ba71dde03440a3e11f57d1962d2c0c0dd20ff9e7d238058b11974a232e7dcf53f2bc6e7b557aead99146437e240b0aa24d1f53490691d28f7ca859e9b4c3a3c43ba79392921296aee3bc1ed15229a104a4124ae8e179f9fc987e7bee9dc75b8dc47361b19f96f551cfa8e605914633f7e1461da48da8704eb358e238810509c56c7029199220d9b0818484e427199224b510025bc3c7767fd620fd98e4f2ac417a4356b404513b1f69901621e2307c438434489f739cb8f459a759918b4b9f43f9520bb510aa8562472d8442616916ad464623784134113c1f33042f8874f17c78900681862f391636f225c6e1168af5d08e8b87c707f6e34a9cf3fad971a22d11ddb081822e7d10bc209ae763ca94ac1744cedc7b785e3e3f2757ba71e1e4e8784b31eea456eaa5ee8806bb6e68d058ea393a3aba9c8dee05228be32d77b58a3e75d960f79b76970d1bcc3ccd0a1b49869b98ec69a4bed249d5a88564f8d2c9c8f37c78e70569ae3fd084ce84d3adeee9b74ba859a12f5daa3377bcef69560d1bf97cfbf4f2e9772cca2cb5d0a5f44f5f4caf5057a8ef7dab5ea1fefc6ef40af5e54f4b9813fa3248c6bac534f4bb2fb6aa3e7f9d84d42afaee6a56c848378ec33d7d3642a24f5b76e9874e34bbf4e94ffb344bc64bd2e8c6a5b3d3439f9384aec6445026941b3296a31b36ce951bf68e1858e894a59c1b36d0a5cf793ee6e5e71dfa947ffcbd20f2f2b36b66658674c52ffdcdf3e14646508864548c9ad5977ef582f4e597542e7dfaee04162414a39e0f66b151cb9a15a788e184c75fee135f1ae4de3f980639ee35af0767822955831ba9065fa9291992c81a34c1842962f0dcd48d537610c665afa698d98a2ce9f217ad4811bad19321892c727c218a8d5c24915d6e52adfa498624563c196e78bce534f4998865de921fd7d2a79f644862e4c970c3e3ad0bccef9ee57b4264aa8d5c45df4b5521f3bb14ffb4cc55f38533e31f9f35cb9ff65399b78cf8a78666c5296324b9f46f68560a97be902130102972447eef2afaf343b98ad2e754f7bb4ce3f2b7c496f7fcd6fbba4f7ed3812ecf8cf0d2d56e38fdfe6c0b7f0d9738d7bdf502a3cf49cf4a495c5a020d9d72e5e7d2ef9b241a3a25073c977eeb34cbbb341601f1344b5efafdf26689d379113a76081e9410740397de68967cfaefadf994be75913346920129425264349a5c39e15819bdddbdbbbb3dc6184f3896dda5bb65171c8370630cbc1b7fc619fb39257b98cedd27ff665cf99daec79651155f46b8326ebfd8d3cbedb79d94a71ee68c2a650e3698e6ce22b52a762e208c8bedbacee505460ced0633b8e14af3c17245da0f2c7763511322cd0476bbb1a8c993cbbf71d1c489fab2f3c6a2264b3c41e2c2d0bfbbdbba94d11312633432555d15bf250bacfc240b6cfdb4d4e562b3774af6e53c255960e5a5415e232cbbed0517a7a46246e1d25b5261f965bf7b730a91a9f8ab19c1715f18dd9c0b15cb92de0e6bf8e07e662965c8996d4ec301266796df59a6c5cfa15992a06747eba64d4b7d33cd298489e33a099343b2526d56aa4d1f534caef33985e8e890f649f7e614e2e46d3a82a584b9f265b75e4eeb68179905eb2d6641a35aaddbe44e1aa8526eefa8f0b7d4aa55fdb5566a6d2a5cb94c2b155018668159f01b9fe3e84aa640765da89ec2fc2923b3c0b779686eb58b553ab0968269158b3f6c1f6ea756304058fe1026320b51c6c18a4060a523a1080454b89b8b900909d124867cd0d91b8b92f0d1c2c697371625f11a81d72b83af8cb0565a834deac8b423cd7f68006746f17a2699048dc03f80086a55accc04a8b33f745cad8a35091e98b75dad50989288b3199d0ce758e7d38589b188f961e87699f7a8c46c59ac5ac9682400004873160000200c0805c321a170408ca2381b3e14000b6e9a4c6c4c3097c662410ce2200a62188661288818038831c600a5105283e4007395d2019733e8b919130e9de58baa0f8137a8e1fe46c24b7a6a3783bf6e3ff2d620093615dc5d65dcafb772f706925ccf66b273a4b3c4fdf4308b8e8fcd25c2c8ab66a2cf42f503723c1a1c49e72bbcd6f81b79da83751e59a1f28000ca527ddf3da6ed972ee732543500e55282e5eab281fccf74e1f8be33e494e4de1374dd97c8a4d778158b80d052a5990cba6e31d13b86de6d0c57a066155f387320f37ad94ec8056233821b28fb0039ee03da2d21f994d14be1ebb5b781376c4441964264662478bf68c95b50f83f1b7ea0527d86983283f957001b17156861d532c974b8047d30592bb924c89a900dd4a24a346c0b12cb44c1f58dbc5e02f6f6368b039043c3b104a99f3acd45fba7ee9f2461247610279fc634abc26a41e4247bacd1db4cfaf73e693a47c93e3e9f7da64bcea16c3af8afc51a37e7cd9ab38f028ebaf06fdf43089c4b7e95d651144405c5a0b4b29d475fc7cac3a71efa28581224416057922acb524cc31644cbc46393304fb9e8d2686c01929a34b49b1ad84e329d3498c8820506b2b48904a4c30aa28a09bffd0bbe1454c1f7ff48b5e130c94ead8052a164712c8d353ef54dc533a9a609d65453533671f6365df9949ed256c583b4806a12b33bef4d0e420a4c4532fe06b87c2e394e1701985a290a59c216e3d78a83216d22298d77521c12d1b6c858d61f80cbb56f4e5a5149795790650d6407e7ef9dbd5cb5f5074339c4731755c621eb0461e9108449f640010a7c2558e9880c93c7c7c057aa211da70666e84dbc879b6c34980eb690b6066411207a80a5222acac2fc10d9df1512851fb2482df560145b5652908640e89f4510c729f02efdf8702c02a180443f904409b9e321ed0b2063c42c234c1840d20c86015f6513971571b50068480212f6049955f0ce3e4b05051d0314a1533d7d83ef7dca1a8ff58d347a62dca51444a7720432687ffabb8c271cdf88d40427abfba42193a8fd7e4d3ef28d82754afd1792c41294954b0d57100f6190fc1324187cf0de30f4484c85d9684843d305c932da8286d5c89292160e79eebcf03dd3c0d05000024a29f10d375e93508ee89fbcc92737b94edd91317ce272e290d022fb737b1aa84153960d73571fad808dfe094c408e988b2f958e15e99e3e4661ca49f756cab505a3efa02ebf6fa4e8e9c07157a564afd5dcad8a46df8281bb29b22c3654f9197216a790b95c54a5a383aff59d06fbed636c5e0c94bafff06030c2477a81640ba383142731a68839e65476a02f5104508e7b0e567af9fb899735c65739531e8fae2db23c1fdfe5f27c3cbab67439e3e3537c16d76de5bf80e078817bb2f002a7582efea62e9296c88afbe405de5203c601f080023671e67acc91e0117765252fb60486a4284e5a3b43028f4660b1dd200ca1c91d0a0f55f24423587591049d86e23bf1fe98c4db8460f26e5530ff957624a5619b33b02f928360ec4c5591cc19d8cc00d6b6d3cd80c884730d36b364e96a631e16307db4ba47556f4f0d3654b21ed1d39f2f58c0cc1040af70def9ec69cf983df18a05b9f7e5cc410e5581e635d207374975efe8fa98b8cbc11820a412e20620c599e3d4b6a321324e7d14c30521cb901e958b536fb82f2d871845821b6401d735eeb4808e07fc97fe4a0b269adfd95952d9a042fb9f7df316d68d00fb6fca02f9bf2809397a761d7fddebec8f620dce4ad8d45941386914f5ebb3e6e8e8603e70f2e543bcea3e4e3cf0681644b660a56b7a251807b19695d66ec8a30c8f13247a32e7112b6d97d528ebf24bc2d4df86dea8ca6249eacde2ffe863f1e42e558c04f738b6db8ed4d5b1bfe432b455eb83001b0226aeb1cd2dadfa8457d988d3c68840f0da3f35407db2168235667c4758396bfa24047527eef1c2165bbb7760ca10d1f1fd1b2bf2abea0457d8dde164b0c2311077544ecdddd23618fdef0991fe49ba2ad97dc96f7fe739a40fce1adeedf37c931aefa9abc2cf52f73b26804abd99c65b4fc47d8c669eafe23db8cbcc3f43cf48eafaee6e247eabb8f9a3b4cb1d87f24e383aebade829bc2fa1856c45c31bd97cf96a459f707a22df70a9a030d08ace2c5c335a6f8e12a1a725bf225a09bd227c8e10349e53d188932abac26812efd51ffad6865f125130d41f48efc014bb752ef3f0cba0c437379d6369e01a2defcd9ebe34f29bc4adca41a6832be2dc36d10f0819140009b43ad997b45a4e87e839025b820c8371a001752402520f498db8bceac1d08aac69452ebf20122dc943cad71ca1c08e70e1084399babe8da8feb71bc16fae44f48582e8ffb12fac9dd324fd67f78e9c7eab5dbb22758c4a1bffc65fe9ac62d8cf2999611ea3a5db2d65023814aaf2c0cbf10fb5e36464fd37ebea97548f6d50c3fc5d73861ffc1ecd12f155016c9a1263b12a5a04dce4d768e48b0ea501258961764652fdd67169f8473ef470bbee33effca5cb9cee74e388135de60aa7fbecacd21879907c7dcf86896c8b11c362e2e52f94358737f9aa566d49986d78820b567daf2888c3c79d077e470e6e3feb4926126d22f2b51e82720557e600df426617289277d06bbcf24eddd600396b9fcd24ea430c57b41b28ff22be762aaef58c7176dca7450e39d411b10797c78a2a8d8c729ba8ee6366edcd729663b67d41fd8808aad4f1e35d6a1c5730ec13cf15733b2e99618ca8158bcf0ea7adb7826c723864ea5fa8424538d04f7f14c7405572943015419f4b4446eacee83acd9328ee6fcc98872ee02d0a13e48882e93b99cdb45752ac0fad433793fedfcbbb5274e923ad674cac4f3ddccf266542e9fea18584b6c7390ef3caa2af90479cabf95115eef319ccea7936e625a3c8d37e306146f40c3b00a82c7e770965b41bf16eb877cea248a4992b56a85dcdf0206ab75e69594667fc667fa1aaeb3b20385a9bfedcf2b04735c33be27ab67557c7c424e000c9dd0bb35ab20814094533bca2efb1e6740a69d38f92c785ce66da440c6c129b9c48703f8fecb5afa4efceaba4b24c84050e31c21341e85392f10178e7ba51cf54c15e57afe0186114ea3cb2d28de88d1cec10cbc7205acff78767ee23380761633e245858d6f5a3f5ba83b35612094e709b9dde9f481064a1bddd90809d3cadece8ad23ac5eb339f5bee1f78d655e2a53848ffd4404baa528180e23896e6f818a158065286b3bf80a3eeb374f6542e61124fa6a6f28d40c952b24f7d9ba32d7bc9c6ccbd82faa89a519c82fcbc1c307531a5115a00b97235a4d36f0def90c09b79fdba8059e2b5eab6665ad0b510544aecf514bcbb6521bd1b20f867bd1a06825afa467cd082b8dbfe58ca65e82287052c7b544f8ccc7265892981dbc7d35090c048fbe69d6725aa19717e5bf35720baebcb00ee0d12c05dc291d3fa2bc4bb02cc74c2daebb54e1c926084b6c8c7d2801294a015a41f18f790d88c1d14f48e55b2e271158ea91708c49cc3111011e5190beac6542f96530737b4da86015a97c7aea5c1c9d79e1a0b3549104c12b3cd7ecfedba964e95edc554fcc70e643cd331c031246f4b13ecbe0226c313a469b3e66b666b5309b3558c68bfd6f9eb5f5ecf92bccf3c56bea6000595db0afa6049a90082bcd24fe79a5123263ae71a0420e154209e46ad3608a7607ffd412559cccd1395346a76fd4445daf6cf4da3746b86b151eb0e9c8ede529f95179fac66fd82125f38d010c2aebebd878e6d45c2235268e5aa596e77c30eb2284fef3a1506eed607880b2923939d949952f96d41f2faa7a058614e0d974cb052ef16f6d8d95a1e3c1d35f08571259821181d72240a76cb9eb05b16daf96cbd4c6e13e988d67d8246185e2c42917f973c5a6570ab3fdefaba1d4a992c0f3b03b098d4d36a630e8f4425c51d543b78e1724fd7012c4ee973a05545ba1507dc515bb0b8ff335a016d1f64a91b5d4d6b948fe503c5e47c51273ae9603c623c4b5edba40a59c34b7057fc127f412ddc90d06e293bb6ff43bf809f498ee0e1d768baa76451a08afdb34b1c6b17cc4fc45d32848a51c7f41d5d197ef6e2f5efe45195240c2b2b2ae0d129f6c58ccbb335ca34581743b1c88b91d89327ab9872196d6ab8696860ad450ebe93a66f5fde983e0fc35c24d6490b4622c1b384894a313b98aad310b4ab48ac334d101155afcfa01af871588199a832fd19fd92c47ed8240be9b433bc6cfc410bcd31cb4ead9d2c11313248e70132cb889ac2a2ac26a052b714ada5024687ad0efde08d9baa0c1cfd127ba164d980ede4da9518d668d66ed074ea0b4706419ee40c3be50e6617727f7852661761ecd54d4244f1035e4103ce07f6f2dd9858aba0884a1c3919a26944122768d0085f3c8bb937bd4322ca28b20351ff29f36eca1fb5087adfb934acda3fa651d922c2050e58dea481eb2a5186f64e27be3a24116357327e35d92ce63d5ed0a3a19bf01993310a60d1761d618fe0c19faf832956713ab4b1de3d2e4af5abe02a4092339e824c75813ea1d54dd9366583495234dc19305efaa034cf3e0419e1accceb2c14ab84a1dee8930ec544aa9dd70ccea49ddee3aeeea53c8e49ca2ec5863818615d055c33fa3cd077378fcf04e6e9e3c7d1063d6128aeeb46e66f800964beea6a714d751e4044abe31a2fdb257fd271177a3015e3d55175cd754b2cf81cfd74ebac114c40a99ae8485adea83d163110381d2e6355703f884b5089490b5c903292f8ab9fb0a451206442467d83f41d78e863f4bbf89f7663c84b352e46e2733c5afd2f250dc5b120bdf54ae557cab79325c28c6e92691debb425c298a4baa5e655d12d1683fc7dfd7d264468d2598403c1a7c846bc771c43a5947e722e03e38ec7e196de6856f11485d8ce82e02607c9f5e7d113c51491390025899f8eaf12095bf66e5c3e8b683c8c466c7656150d6d87a74047a25e4780070cb0ff3b756126097a0edb5613619490ddffbf93560a21386d4d58460a519445312dfc052ef17e0047e524c34cec124f320f59cd6fecddf10298530c2b3628eb07dbd84a972d9fb3620e7a9b5d2b323578ec9cc4cf1ee25c000ca0dd2245d325380cf519f4b96564b465b14bc220b2bdcbb22544135d9e738134eb646103357b83b508675bef697421db0a1554c2ac783401a8c18593b94c6436941408b4a60b4b33bcbb8c011e5a627d19b093491b24634210fb0f3df603d3cdd38a7473aa99249910bbce0c668d4df5c87e517bb80148336418e34e1c98e19b1907dad41ec2c26b05a2296b8cd1492bb6d86f87f315d59f3d560a753bd07de69641391c684ed391e4207c452c9f6359d7a8a4f9e4fad6eab415f291f7ec7c5f15521688c1471d0c6e9e883da3c37ec6779f09efb7ff1019f66279b67e3f7f058acb85740f02150e9438e613058d7cfc28185126d1c159eec9a0c3c8264e357c3f20e185252eb82b8643419af668bd15746be4533a1ae4785d4c5351dbec0af01e9d5429118a1f786ffe43dc6c80cbfddf214c8f83ef39ce2047ba37490ba860cb8346d7206e9a6b9c574c49ca6f733c5deffd1b967c65caf45a2bbce7273c64c045a9a4683234297ec57c0a0ec1468532dffaa465bc44143b7e032234352d8029d0d032d13572b6af232be895621e11165a797e8dfdd8c4e658bc9fa00f6563a170a0c55eceed03b293281249352321f46921cb0b34574f8bc4010fe19c0f1636d62d0675948da4ad2f92e9d6dcd8458a0cbe78f14c51c72ad3a9c03c834f37696bf93c37e4cd6c9005e7770ccdcb88dc284226dc5e13e70b11561f6999bc6b86eb58056df24b71ea866fe3dbf09911cae08eeade690ce7606949aef21c464924b3a4f3088891f4d8bc124a70bb17d96e054a67f08fa4a273870ea1b20c273ea8b96baea0a607dee34705cc78b9374a6695ce6c58efb10b4c8fabb1ec3027a7654d33d197df64820a7e26953657119ac500a1504200f2bf9e2479617dbc7a3410b8de68756eb15e81628b7838ca51e5aa47d686fb6f6a13a41fffb4f2640a3446ac635bc556dc0c4315561e1b54845a0d4796d3ed754d8c89fa93776a0de97e90915da65e5e5aad90d7d4c650d9aab1e7b82280a85759846fba741e7b8b18e5c5d6e42fb4c9a524fa937be59b9a3d8cf6e58280ad47c411bf6b606be4e61f1968f08cab1e6553bcf8523b78cff8ca12126212c8928e5a9fbb6f4d2b2bfb283a2f242e873270db77489a663aa67825ad86c815ed4ed6b5ee1b2b15446a2e568afabaa4e2506da3615206371405423b9d756fdc47a4535b5f4fd6c95545f63189dc7314357f678b0f4abdca03182ac2f5a508f90786b2fca4dd5ce4cae43e4d7b4ca8df2dcf5baa33cba3489010317c33a3782f01d62203d00d686daa121434532e702b0587591f2ec77559e5d8847ac8c13d905d304dbb108efed34fb230570036542a64a7214ccd537d9c415be8588895c01f39c8243a3d64d2a3d8e46cdbc2707c0cfe24673c2988c3c9c5d8fe1ff6ae9ff4034d2215739da42a9b598d15016cfb24257e928a9eaef68bedf5dff1220ca480b18965d438e55ef37c7dc35e5cccb771423adc00e804b24683113eddc9980bec8e0d9225d410ffb78383991f09cf5df6a92ccda3e8057c7fdc3510a94d09b294b7fbaffb0969b934704428700048501671a580b7add08d804fb45216fb1aa302cbc052bfabbe7220e63a05e0da7499edfe18c4cb2296bf02e236a28c3b607d5be94aae4c5fd4c8d44e3f1ba085fb0402ac98bb2ca8a8049a988ab816b30ff420e46bdcba8ec336259ff2e832279173b79d73ffebfe27ee4cc8127b48f7897aa4557f7ec2b2d69aaa29b98f94a1389533a1bac2be3016984d2cbf9d2b6fc136afe363ff90220762366e3447d8385dd8765a4265d79a36c876d7c613f0e088bc5cecb8934feaa037fd3ea81e6bbb009dd06e937337c737ec0ea891fb679ce23c3bf23fa5c545b043ab4413287dd70f40b1810834f243f9de98d1bc5cd5732476df0f7eda7304aa2857192db62005d5964ce765d3a772b116c6e993f806a2bd3644e6ba3cc1905ee32f5c99c1e5f03b37f18bec63dfda23174deb05aca7c318b006f6c66b79c2f9ed97715ec1f3391122750f22d3fb01ebad341e8110c98792927483211fd4d7136417751798ba4b3f0a05ba48a9d457857b095fac029ef4538f72b156c4710449420100e458026b5202e4010a878c488d1d5c8f2b3b1db04b215b1ac2c5a953b195d8f26b3c204454b9e7b1227896717b40484874b4476b31e7314cc2e5cac2ae157b6669ca083586f906a2bf1b53a068a703e00b2ce64bf17cedcfdb1c8a6c9ed64656e0c6ed2d0bd6a17f720894ee2dc6e2d5e47422413df417d458afded1ce938fb1b3ea85f37021a12a758a1ee61ec2438723d4a7fa0eef773b85abe380e9a0dfbca7c1bab401d0618fcfbdbf22eed4ede82c760c2f47eabc27c0f2eb7e96edcbfaa6039ad84ef5696f752a5971fb8b8551526e1aa2f1e34e10abb864a100df5372a8b301295aa73ad214795f18cca5221d1b64fa9cf5a59d8510d51b010a9101f5152067ea2c49956ad9d108726b5092a158b2ac66932aca5c7260b2d467091573521c618e9f191afde1b6815b3c8d1a2c4116c401cbcb1402ada4004639278be4011cadb3cde91b7c050c36220930745dc989d8ba866c91116a88407ee65051b8a6dac1196392e58eba48dcd3bc96616ed42b1d60e24f86e1dea7827860a6e110d73300332d2587223eaa142427cd838a41fd7bf4991b78492e14ea6ed088aabca480ea94ad455a03f96e892403ff6186c442015506fa97a93b7ec50f78fd14c5382de0f8ce487c17d34d1a2cf2f5751a367ea4523f468286cd44a131a452a50e7a016b583fcfc0a0035514ba4f2f636128a7d156b7b8f2a590da3a7e2d5448510f2b35be293dc183b6d333ed1e8670093fceaa896b7507a101f5171da46b67c5438e66a2d0054a7e91dfda4a17dfd70a76ab89e9a428d137abf42d6438979dc5b49ebd50ae95ccdb7c002ab545f2be7a0f1d66e51b4f25d8e76a77ecfa2811d4d1b8cea5f1767beff147a2e85f82c964fd89b41682de1721a9e2882e9caa0e9207436fe4856d003ea45294bd1c28b9326a8e12559a96050ca6053599e2cd6449cd8f1fc8bd65c276108ee2d3f5660acf17fef92a90ae5f53e5505341930a0efe7a561c08b1393551b0f5e00a4161ad3bc44a20618422204b49b0014170d54401f5de77967796054d66e6ae25879edbd8e60b85238c4ab843ea2bff24f659a30aa23ed2bbe6e2e0b9543b203cb9fbc5fd8603507b85897f8d6a55c1ef6812a704de67bbc7bae1ca2560d0ea106b5e9787d1a12c88dcb24c7c80ed7bf06e7e6b173d07f603640eaa9a686727a0c3aecc65a075a83f3f26971825075815a51211ab600a69e9fecf6e5c6a6a1aa605c8fbf9398a028e86bedd966a919d49a5e0e4409fd2c43f8a13f7758a90da1a3228b380d9b0f0c8527624ebbf3dd94801b7b859293e143e8b9c19209c7de1461553c4ead89a24d9faad73da2370be41aab6d4aa21cf747164d479e954011a9025793ff62ddc351be86612dd131352e1a842e3806628efd0158c02c8bd09c463ed09ce1f21b45d17d0553240c996271e6eda3426461688f74555f4e5cad38855ae94926c04360b897a6ebf49df4272c62ade310acee4082bbd8a102a38bd74a944aa9d6fa6087b0ae9870424d456b277027bd7e1fc6c051ef67f2f947fd3d9ee24446825d76365759fedd16e6aefde501f7532b6fcd9834aa3b2476c25405ba36584d88db92469581c27b2b5853851a97a56c5bf6cd3cb7527b84ee1c203a084e0d292d2003539ea3af901f2bb135a9e93783c2bdee027e7546a475f79a16c40bbc645e2431c03921ca3fdc932315f0bbcbb0ec13179ba1e976896b48497b8200db6c847f594cb530fa008dd343e7e9ac2ce0e47af05ed072a4a96987d367a6602f7138153636813d947c97533119269120995141ad92919282b871bbb520fdae078a6810842b933fd37562aea702281d1d06ec643d7a047b0618565e0a95c6ab34006b51d50ccd14347683a14cdd56dd9bc99b2f0199f14f6b8c91aae8af175ae6e4c99e7e212cc69ed6ea478006da3097a332a9b5ec59b847e8e50d12269e2279eb46f53682ad967a1429eb1dae0bd998fdc7d6e0c8a38ef1801ad13ec96001bd7e29cafd7decc722df77bbf99cfe713d4bd771cedab3b8aafd5dfd3f36cb4cbf53f407a6149b655bf7854477f7865569e341fdbcc136f70285c09c66475668709a280ecff478e0f63a9ef5c69fc6c5315173fdc7d73bb29a04c388ee238ec673ce37d931093cf007494b439f53b54c1e5df6f0f21061787dad599640da64d89027ee9c39368de82d86a39a1bd4d6d3b6731d431ec302f64a6f21c46bea1c3c78cbe68e374b20ffa2c3511cd62e21f922b8810b4054513144cabecce5e9bbef98e2bf37a4bda35a33796e21130c330eac686ff03442b8887971ece7b99ae38b909b0de277d5af4233e5334ed33121740dbae6b3fee9e0e5c2915047b0f53463294179053866b1ffbf5bbeb50b08813d0c83a6182ed8fa566f6729541ce542b69c84c6a814fdbdea877e2cfb0d14a6902c6ed643a7e51be58077458283a073956755a861edcd9c27c1f1aefba5d1750a573defa89a36cdabfeb14884029903755e1327a741d82296299a938adb71a8316f1bb0325629c9efb17af6a3a553571336b0903cff9caa31499e52c47d8254650ff6706b518f5fcf2de1c030521194e5c140edcd4a6794ec9aed558f0efce89a08552225d68a98f49736b9bcc3a439a226d2dd0d4a0d8a955403f08a0c0738bbd526e523c3a1523b205a2c1b4c6710960ec167b77eeded8e8e781f46df8c3679ee5754d083e0ac37ecf5b767359ba6e865b74864bbbd67a165a818bd4ac1f6a1de1feea39fa172a14997cba19f5038999182c814bf36c0f596b53d085c7eeca357760e44ad9a914562d09738af1e74347be8e4b4de1bd0f0b389d7dbd716751caebb89e2424e12d2b70834ed23b140aa574c8f1734b1dbeee112e7409307afce0f26a354be9f0ef1029f8e22611c6ba454b6f585a2ad9a9aaf448a2f8d4fa535c22d29e16879f622fc5f5153198f88ad52461910ac95823c765701f5a2a241aa4edfad4b0113ec226af68a72f73f6d0147e98978f56bc2c067101187f57ac97202fe773f3a42543dc58fd51abb09b123e70d8a81a683567aef96ab6f783436dbc1f724a3f326c24704acd7a5b25c07d8434c61d18ce536dfd39b045e9cd928393ac9542abb3021cfab4ff55512640fd1c1544506709dc3514eab9c44c26d633cfc4862b3aee559cfbf2a33cdb2475612c0d05cdbbfb3546c452555c98c5a99977d05b574fc0acbc4136f5adcb763f1690b0c67627987ef8e1d34fcf4ecf9f35a7f6fe64a3f8497bb5b0dad600df24caff5259a8f37aa659e3a031b579d23c499ec6ae53d6585f39ef4e60aacee07cfae7e54921a5811c33990170325461e76b019b7acb57e8fbad589358761564c6b7b58527f1f4c0544ac79cd612dcc496e7ce2c467875bdf65372b53107e44b4ee32174dd10b6563378485069623d71c1644c20211911227f2c5d3a7be7fc2f6f125aa457e4223317da50a52c4a1f3268da40d7efde06fd241ba7f9c7526d68686b8d9d930e998a39e8ed08f0c89c5f0f5e2a11ee609986fd251614b12faff8d97d69dc9d98750a14d641090d9c473d6803349e3a00d6bef86451261129aa4236b1328e83d17b890a22517de8aa6495aac3eb45466266312d8241d14445a03178675e5112e75f212c39a12a14cabb69c335b1db560d76b0c4bbd448380ae4ea7f056fbf205befa7e1115821cdfccb1f4f22dfe3fddfd42283a8252ef8922e985ccc307a68304f1a5a945ae0e251497f3a7407bb5bc0e0086a68ef4baec0c309659adbaddb0e1594ab591a8269560e1a7ba7829f0d6c87e341fe1c17aa3572f224739b443af33ca2e33a7927df89e6ce644de5fe36a74cea97490119187c514ccc6578acd1c4b3722fdd7e8a5441e7a0c2ff421db932e1d3b07658e6528b8d61a13b5f5482607b079e4f103ee4e04121ddcfeae0f209729579e7de106de2b265fe9c86d37de926c0817cbdcc2d957d2e10ca83b2ab94fa17ad3bbb285d8d77c82a146dd393f052706ca92588dc0649f7a8a6fc624c5de5dfe1fa720d23c2f948ed41a376e5f70851176e1695e8ff854f01d01401292475584591a5f00446b1c1745234882e65a3ac4fbe83889b35d76fa8a7bb324dda451b993582601af803c9587acd95bfab8e245f20a50db836885abb0054f32aba22f11138ca2e9d294721453411495c732b89aeb64fecd9b6ff6fb73457dcd4b1412ab86c0b843d5f3f8857341f1e6947ef75995ee1324571e12e37367e75331ba3420275867024507da46fda200b96b4e33f48b455e3fa87c60ba4cdeb2c93f0d5637187dc16c94dc4ef91e3dd93428eb63ff535114b50125a34c143dac43e8c480b6688b80ca7a42d07fcd656195d5647df4d33a8484ab6f4d363293428906197ae450293521efb64f27ac751c6551be039ff55c65715a0999056905a75bf010c77c35cbed3e0c07a7d8d529dc6254a7c2578aa478ef49d172e87ed69972c2e520e77675db0a4a808fd80a2319aa531eab77848b3237018d254ce926f840027ebb5ce1ee51847368ac1b55ee2db80c7072ec670daab3106d353e3be8b82b23615ffacf0d4032ac1b48d2847d439fe24ced1ca8de10e3cbed84f5be8a05dccd115c33c95654466e8464d739ef7d1e5314bc28c722d6e93a4a43950aea8cc39cdc1402de5fd66fd175d0fc1a62c123d379f36272adc644668ec570ffa826843e482f11da0ee69e7732a9d31dd982e29bd41765c39e9c90161bc2266c669140de381ea5e1e2a042682a030413d745dc9ddc7ad148ee6c7c540a18014c407201742b27aedfb272e9f3294b6b86870b957a68ba72276bffab2267f6a53e9aef41975a963486d21cd29b820e6bbdc6c050d0a7df6a24cebe9ec807aa52304b25721265696a53cce9a6a3620860dcf09036706918ca944e768cbf33a71e8d8fddcdce4aa98160f4ec6d74379912ec2681525f988c703497038162529358ec5229f5ad86b9860b097464681c46c6455532000d36889453d6c7b6ce701909997bb6c916bf49233a635892eb80a08758bf1cc846160ec186de000ee36cc4fe1f1c2d699057e1ec10099b406ffaa2c68b3a92fd01c06a19a0cc6db1fbb20cb6386945f515bfc9de044839b7a027ee8c067d0a4b07fe9081d8ddb1a8dd3e02db584be5be90c85255327bdc9ea1c9b8782a3409c5c046355634f021de2649703f6f98793fab52f042e40cb52a472833243267552e8b55f9afe1f241fbe6ceb5efd853caf8940674cfbeb6293c4d9d7b3a58421ee2d9d3dc2c13a8e19f030c088bc47b75be3500b7acdad349b5db517a845bfc22a4ab9202dd5a0519b5e02db4f313c3f43e1fb5677592b711147daaea01a26813880ff18a3b38794f268f0c829b71a1d53ea00b719518693268510973d783569932889eae46b6134fa7584051e4f05625b27b13932b298603733c31c53fa28bb705fb5cdb54deb362d395065aacf87648a39793cc91dd368a8d9926cc66d3be318ab5fbe6ba905a22a460dd47f0a1a45226c042179150be4820255401aaca1de7e0d169f0b4c418c7c6d569c0fca1aba969c74fba2c030526995ad7b8d2ea44a258b54ce700b9df33bc8ca886eca13f612bd2d591bd30587071e34a1d37ff4302a0f058a2f504db05a238f8251c4f422639cac58328bd15fc4de893f3728a319ecc714407b1a503086d0db4af80522f55451e203c5aa1904dda90a8abdc7cc5335a201d30a2ace503d6b9894975fd43d07c8aa3090e59a1bdd7fce8c071ed48a0e41f3f49f82dc57cb940a6fd22e01d06065ae2c4928ed10e04b679ed82c5314bd97016757e27389b76db7d45f70dac836efb8d80ec20a6c03eb5307521231dcfd4dc58a53201cd7e2ba5737874a5105b652cb19851c462bfd4d134e73207d8437293fe4c08953ec42ad787d21bb0c8dd17b913433c0cd161d5a4d029eddd2cdf85519ede7014f6090acf7b42b7b8b814d29bbe39c0ba9c8ceec5388e94006cae74c4818256f184aa65e6d548c411003a24a4a793b385658c227fad9645ea291a6ac929b7a0b6bc21c3895db8ad130e8cfa0a27a145dc718139fe0315fba7450663fa9e8386aee4e9b208bf32de64220ac82163f372d1e7bfa6054e5cbb7c3b44c21485daf74e1c87892e4720da9d0c0d44771c240f093be09c3b348b2ecb0cfa490aaa1d45316da239f623d3927dc88f7ceb11106c8c36b7cf96c46ba6e5c7167aec54223161a2131ea973b8fa959273cfeba16f29921f99d975c95263485d5998ce81ab50f08684c49354a7d54548a17ed7d0e720bf75622a64ddbfe2def612ac707b2924ab9c654d370e30942431715010b86b18704ca44ea1a8103e7f1174fe6064246cfee1fb7cbbda9fc17993393a0f4c10465c03887e8135831e68d0de6d6066860932509eba44cc48f56c58f54fea5316654c1b3f524156606064895fb228fe3130b483e1ae3dbdf88d85ac3fc69cc433ebb5a9dd2cc4216a0441a28dd1fd27e911b6d65ed5fbc4139023521b6f7947a5d2d0e426ee0dc765afc10b964d1211b1eaf401ea357f44e04bee788629c9c21100deb719c91dfdb1ceb1ba2e515cea178ede768c6e59b5cb16b43b1837b843b9cb039e876f2304e173c8479a7483b6ce2d6c782f538dc6c48c5f6b227f67cc3e09be2c16bec6914f1b8bd50bbefd0780b8fc70f5c1b8d0d44257b126c3b0d58fb96fce9231e72b55572cfc0f53fe925bb9d083a1b53a3766aa7426880133772a3c52d088be8ffc24a889508454c5fbe49c60be62fd82af1383ccee110de07dc0564b1a241e650306132643ec27b7e711ee235a2b0d21c24ad7ef6abad6fbbdf4380479a7653f7b03f9a569a4aa37b1b56aadfcd31c527d72e22963c84f7d24c5d0ecd7f31c99e86aa3ddbe45f431347cacfbe3a6b4dd5641ede6976d5881ff9c54c101f4425f4400bf51430f624214c600e1cc239820a6c462a93714a29512cd26b9a48d63ce81a948b3c02a32202e48f12ca62c93c5da301035a86910b32f1d9ff61c19783e2db930bbc669911ef7d754adae8730b7d9c68c7ff1a473fb868a29c430ef6817934398466787015a55fd7849d6f2f9e09a0b0be770908c34f47a06815fbd19eecf83d2fe3373e159eb41ff38bf2a1ef39ddb6a33ed18f65048c7ed12f6ed6df49957ab183c263f3cdd8299dd327e363307e4a6d9839ffcf20843f5a6e8761513d38ccc722d55516c8561422d369dd7f4e5f8798555aadb05ed4c80fd0a94e073893c7e9e9cf70a3fceefb5b74c444e2458f545f1d932952c8100dd2ae6b307fe7bf6966fac6664a92cb3c6f576042068b27876220260802437316b121ca23a6c031a3abacf4a12e1e8e40e7a0f86d143ba9ab35818560031678981ac29873f054fd4131132de0523014ee56e8eef055d1abb61006c296d2f0d34957533a0f22430e8b8a0bd299e1604bfcd3cd4486c0a1766ec5b7c1fd67fd7353891b1389a716406cb6d30a569a8cda7480ded9409b5c1cf8e995618090e4a604efe08d92dd3679d060477e38329e8fd4ddbe2c394582b72b5de89950881749a113c0fe16a7e5e7efa9c56ee130a95626cb9eb888bdd2a777967e7544175d9007a014d069fa45d33abe1624d0bf91f167710bc516984c6950595d0677dbb612d8f0db0f53ee51bafadf8e2c87e95d5f21034724f435b9f13b58ccbeba9f8921d00970e9f52ba4d70a0ade9913b595c1c7db336b3565a9e6885b9ed3ecd98683fdbdec66a168d959bb79c92bd481fcc97e547a4e0e569800c0061635595a65133166e1321916781be040e4733014de094409799d8bfc5fe9800a62f06bfb5b244b0e6c3f2084d692eb38e4b8dc0293543530305b16476835d895aa5954dd018ff46265878c192159b415179754d928b5030ab06522ff05a79fb9979e3dd10ff77322173b4ac4e8b3007c20ee44812cf8d91c25671faa34a4615dda34dfa2e5d80397b0453af6c61dea176d9906d476e1f444b7f85e306888c02b3f9aed9485afe267e89bdce82047984435c110b2849476640949cf9df0187efe3d80cf5aaf7de065f273d3050acf3ab810b3b59e9721e11cd420ea0f85b8f69bbe2e25c9807929ccc31cc98389889a45ce9d7f9c03f6679c9170a96e0c03d5dee89f38f64b2e90b583c11d0d67a602e15b3c225867fbf41773d1e71d2b64f28f01c65a57a2e115da8eb9bdd9bbbe5870ddd2bd49a977f942a8e00fd0a4c8e3c429ac24abd2d60703900143f8085cd1eb63edbb15698b10f4e763d094894a72b088ce62ae159a712ffb9c9465084398d8643703296a9252e2a2051907f43c5edfae84f9b71cc82887a7f7580a6727a8ca3e970c14fe727b1d0a11c6d5303c74ba5030f91cab987fa9d90d40962188c5959859cbb8adc6d47acb209e828269365ed07bdbef8c6059779227d78cc32fa4c39ac42fdbb982ee0dfb3685b6c9874a0a41b4a3733a091c15cc6de96f5caefb1a5b6179ba3ef902e6e751d748fcd1ccaf268a59561b22b107bfc9718bdce7ab52552cba6303ceacf2341a5530a59e2f3080d15b3c4b6a42473d3f671ae71332c8cffd0f56224177ce7a2e5026cad41a9558d16bb6d398691df7d6a48afe87f8e8eed728e591ac2e11a6fa808f758e6c07d089ae29dede186042c0640bd0f7a4c81fb4f85db71160d4e88e332013add6f1d7cf057963969c6e593bb26d68e4b160727f09a80a978bb6c9c9c2885ac275ebb7ee7eb6f01056f64194fff100fc6f08aa3ec86d343526730382ed95763c44465d1dffad6a623b3eb3afb010756397aef1d38da78c393e946a1468f2a1816c37d0f81aeed35a20da654a3da8e85687e394794c918ffffac9879d2a06df0c58ca63bf8851024710939178b720bd3cdcbf73192e4d895fc7b600c3f932f3d4dce68376e7b1e95fd0a906755d0c66c805a6b3704b2ba5589a4f172c0f7afe013b822cdeae3d4c3c09690e96a0b8eac18d8abc4974fc0750975d9fbc2be59514ce2d11715cd9ddcf30b84172a8553dc9a8c4391ad9798843d35a19c202726b4cbcdedd06ab48d6f30af5ddafff8cd9d16554d311a2092984b627c12898cceb93f5f9ce8ed232cb389b3e2f96ca67af8a7ee3a7f847e52ba41cdb289847dd2fbe945e07b863806ef45546c2ac2818eb6f51538a98a4c63ce93857ee91b82914986cc4093a9b9057e2a0ab619d2b12e8bd5f69830e41324a764ba9e659cb3ce49eb7e8c009f3b10687bc58704cbccc2a3fe1202e8d2b6e3a53312c40cecad7441007eff91d965dc153ecb769c418473ddf7a1f22d1e48137912a46370ea0d95be41c7f7680f7104b14d529d42ba55823be4764fa4fbb1893e09002d68fb470d742f294679a02e5fb3cfe8e540d5e9aacb6312bcbfd9c8a2cf955cae29be60883e20cf09c36c69da4269d6b67762fa60e425fab1bc71b0afaac00ece241fdc61450b4d3c4c7f64f5d4d0b68168e48a46dc68241c8d48a411923431866ba5c1003e749282da6c1b3222ce7973f9ad8242af083a681432418aa96286959cd8fe6473c3001052b5560e83cb480da653f87ad52489e8d786630eff5be6cb65c66ed63efc094012322ce33573a479e3d7aa830cc30de7495aa4d2ce036a3752d0706be7a8ed509056a1575fb4a869f9acd6c151dd9e5d921a259b363dbf69145a9c303255643855db102703d9bbf5cac9908c2b1b9a83712fef1ad786a95322beabede1e33a6f3c4289142c3b0e47ee431afc0a6a8f405b771f0921651b1142489a76955b643c71cb34a699911a9708e13e2b0e539c5941f4154002d8fa292a0ff97924e52dad3572531b7927796a686fb14883b269ad852754aa200fa702298998a5d9d3260348ce4cdf143eac05590f28626742475f4e102162cb65fe0cd6ba3bd0bda1af0c2f0b8262b39c0108c0817087e0c1601410858b2aae291b8cffd9f70794bd80bdcc90f5adca09b451b729d3d48dea38e96a45db5de67e1610957bef15bb7ec8d8cf58571915e7de2c1458019f85f8179c76054f4cc260f3750e62d4dd92e6ef13d4cacb75f2a16e00d38d20626452a66c6d54220ccda88b7d8f1a8d43d281e2810bec0942d73657a39063409b0352d471a2c31c7ccd054c384c1da2b20208529b25d87c7816cad31d5179d5ca0a807d140adee4839884df909705046d44915bf4f38eb0045bc3e8e4eb910c83b50be6d7ddfd6c58ab73ad462c1ea47eaf7b8bbbc57ef3fd47f2e1a4332e96f16199fb56151d2d705e10c5f917461204f3c5a3f92009b75c1ac18aa41c8d57115dd1270498c9c3cb7c5e69e5a58aed04d4a69e79b6cba4399d68014b1759c7bc7a0d3b7250ccb41e266a25d19abaefd82c37086e1abf2882f09c2020bb7de8765cf25333d366565552fa90cdeb724a8ffed3a9aaf512c3bf827d76913d6eaf9217677f2fac8d3adb8d0bedd88a00d1f48a6ea862420435cd5edbfd63d01d3ce186244199522b399da30e9ac4898b94aae6f4313b0eb5b1c617102dc2a1d14c118f4050e3ef6d1eee93821c70cefd6d2f910c618e6f561420ecaf5474a10fd16ff262cda87cd0643d3e4d88aeba72e2459eb9c9eebd6007ef6890b79d802348996eb9cf953fdbf234e0c26226049564d2535c8e2b168ee1c5a3c56170cc2b72ff28ed69f06318347be18cba1ebc80fb67a63b49037d8cd7e7007ff856105619b778685c7f6622c39a4a76c5ce8f9fc382d7040caa4e957016e56815d067f96a963765bf33c926ce985992008b53d207bcdfb3b507b9a2d08d8ec8caaa651fc7d401f98ab6406509e8d124242f6781f619cca91d50eace84475e6e23d6d541343a333f168c8563f5b9768102dc583ed4f02879b0f741c071d02d506cd46620d547b24bd12c17682abb8133b69e908c3546e5a4321895ba6b1cd3a370f33b2d3b665d1a465600453c0cad98348fe444cab18def80972d42a00c1b12b4745e79a50ed76256108a9dc83e86671023440daa43a5cbe77f19e16b8d04707ec96300d920ff3a3ec8eac51bef86def9505604ef25c0861fe602561d56c78ecf543c44b9d689eee7601da1d6325d55967e59db26fbac6475da73e3b76caa4117374d46d8cc26fd7ec4f6216fc257f3c555a4552edd91035e20454ad17f4f095b5db3dd6edf2393fbc156efe0beed32584a368270b4ab49d54c416ad3811a2dab4cb0a4eb6ba5e5a79b0cd2b3aca43babef01518fe319c628db1f6c1b47b90896d39069b087ab8b5be227811fb62e64f140cf9f427997bfe86829561e54190ede1c54fb50845d18474db183dd56f4c24dabf491ecc964a743c41e56ef90e6d0b47301f016a4f65a9e8f35f4ed0628e05d5e2308c115f44c8c2f991a010b0c3ae786661ddd375ce022bcea2b98636465c38ce0ee3a8ff3871d2a2181675a7b3eb31c1e6b62477c85d1b12fadd8a3b1bdcb6a52e9db93a0c477c5ae0f04b95480f5efbcd3f8cd4ecefd86c4fa4690c1cd3a03465e33da85bc4e35d895f0a4def46d5692eb17118deef1ba7af2f9f259f4bb604e8df279c847b7ba775dbdeebb9d0421528fae27d3ef3c58a86cc89d56d9102ad1141c9620d211c4d96604172082d8ad635d31f9aff92053f23984228c5f7b997597e496910d8f245bc6866eb64107fb8c83e52e223a0a0fca9516d750d40d01654e78d6c009ec1343d0224940a0e76329eed0dd724eedcd1a20a890ebcf9bdbe3af45c612f3c64c2be3a0d27f34e26c630d93bb465c10be6c9c5a3e1c34c06dcfa2fd10e87a328546b3e38ae6748ead442240f353920e295cffd136ad604dfa1e535a226e9eb453212f31859f1a128d9cf7534e494cdea9c7145e60eba491b3782e1a2bcb6c8ec4cc1cb0cddfe2869f4126a57398da3c8ed8399ba9d9720b2157d7a5c287043601418da872534888748699e7ed86a8056503deb0519744222160bd248acbd3d5536f648d10e8794594660f27edd263239cb41cace9aad1bf1e53ac4ff77c758b9724c832c81b0c02b0011316a511afe36773f2201ea0ac68328ff136c1f4f0d04fa8a0dd2fb158bb1dd0a9dc8f84bf95bff66f22e173002d76d67034525b378e5dd4c08dfb5e5b2632e056a89079d508a414177c3d0daa6a061246fdbc58213052657cb4489d2493d08f14c53215a5a16939b1245f6765037a0fba01c4ab285b98b03386688cd49a7811d182c30ce40b3a0c23cb816f3091f21a2ae7e3772bff88286e3447deaa037a6dcc6d36133b37c2b798214f5a914aa82d2ff00835afcd591e02850cce53e1d7bfa14d1eee0da050ad350b16e035e6fbe710606645028630f97045d4bfcc904de20ef38459fcf1b33ea9c5bff7664178d6768202053e10a8c1467b14e282a18c9a7f6d4c74e27eaebd828466a6ae87af1a2b5e91d7b887a79b91fd4ccc01da39a47191899895001813c71459e3894f518020a5cbb0e5586ce64f8d7db42e261e66027868efd3168f964947dbcc1af46d7cbaf1ccef1681523abcb1f19ea93a44711acfebb27699a13bf7a996d5b4805421be92ea8ee9036b4c875e803f49f81510231a440c3cbb47dce47d737cdc309ded0c44550d014bcf67c924e73877c17ceade901f033dc4b5bec2870dc7de08fccd8498a7fbf7988beec435a85cd4de9df14e543ccf00fdc4041cce95636236793574b565de2c2e0c15e99fa301c33e71dfb90d85c4dcad9830a41f82c978b65ef1ad02f55d00919bec7afc048824c6053ba2b53d3b13541cdbe4cc4d39f49aedd16b179c64e168778f54636c9c7b2243735741995de9debc46053fe50bd77136ccb5c7067b37b6727c04415cc3d721081f5bad83eed3d65587bbbc251031090cb13b1382459d342c19c3791becc3e2ae1b00b5a9a8d2764e61a254d3d74c265d0c1b4209dff8e8b4091d3a958c6546e9dfab664baf8670195bd5477490ad81124e26783e71e92b5c9930232b83b620518240d9198fa2208ac9c53176c2c21bb3dcaeee16ca9468a871deeaf976040e8ec2507cc85f10b3607635161ab7b577429b6f2c00cf7426efd77561a4d77eecf843c2dad54374c13d2e54d2cf6e9a4e7337bfd3c86762141938bbd5d6a9a16501f4487035dcd22a33a293970a8d6d35de10b6c1235de6ec37bba8c95b8bdc6d43c8864a09680c68150b0b099b7cfd51c73261d58f1c4deabb3791fc7539baf04a38778666bd7290d0894f60e4af9770c858c02070d074a64dfed3d2b087cf1177e607cb6e311cc51a8bd30c61fead34b7fdfc4df69b554ef8cd10afe5ac7d79766c5a568d5633a64cf32623a88f7562027f5d80996cf54c4682b99e91cfc9f8c198c78c357bd15b8d3ef7895de29ebfa595010e51d71d81765848f6b5f9b58a05cc1d9bea6ca37f2655de0dd4ffba478ce7ea99e0b941177384927283fdb607e3974e95056ec7b52d705db4b90007a02f118498aef6b30a7cfbc7202da1bacdcf451508dffd71bf0d23a6c105975db38af58f3e39cdfb10e0a2414130f0a3d082d0a20d214d20416d62b6bc1aabde321d1c4cfdc4752f9013fed908fba5459fcd254f4495066fbc1301981a2a4a245e06dc3328afb0f83d5227508c14b5283db9dda8404947bf0ffda824a34e9133a69693087c2346da098a3c7e04843d51fbba491a2a98bdcd1ed480826969b7fb0408d81dd152863509cde7e8b553bd2dba0d29177e84c5d925d0e2176590aaae5530ef0008ed2b18e838436f551373219ce798c6c1d4c14c9c621f86d54afeda2ee99156b14196eb87e785935c2a3f4905f1b02779d21ab5041b51dcfe0f001d9c8c300f572f3e403cdf77205d8ff6a983f10a3089e0f0db3fef92da7bfbb29d7cb00c8f60b7886472e88bdabde2f28d57b0d10cb1d79b6997aeb4485c3d9875da3a7fdfdfed3a176a1464f30909b7d28fbd6a8671501f95cf22c67016d35d8b04c761c0632798b757f517e1743a925840488f11e5afbfa80ed869114e1881aa3305159224f2cb8968f7eefa9b3eae4d3a0341f3da8d7cb8f0c18ac0d043efe47050cdab4fee7555877aa78bcce108242bfa02adcb925723456302217b5300b53af35c98edba23df8ab92b0c1b6060a5cb2c9c2d4e821e7b00cf4a7889ed2646f14a3c6b88bc379901f33d3b4abaa6bbfdcee95ceddeabf145e9c0211cf131ba0ab71a112c6a38f9bd49905513f79a32b1e02821ee6587b0887e683f8c63ad828943bf250da4da4586d66745c9721d48d47b685d9aa2bf56f4970818d89d06e5d504f680938002651dfaf7d068fe1c3c6b95333b37a05d885062be212d92a645cbfb9535c91720dc5b7518228b05b42d8566b2cc7aedc42e40cc158adedfb18a3890ae19ed112043493099331df0859878c66d48a3d4bdb49003cab15a6347194103bd95379508c51bae4f8388f465a88f5edbaf85bb729c503e001e812fcbcad4031473a76ac9fb9413edcb599464a3050a6687d525dfc126265f416a57cdf892d531e6a398b2b08150fb139f2e6ce2d8faf25e5533f59ce6ff87b85f3a512df006acd6d331bb2969a387730168a3701d15728a858412acbf037adc7e945c30503a930e45175763f67471b23cdebeb2ee12e5a57af526ce5a71a0f9e674f5265d7c8d0be5c549236d55b80cf87a9d2161a8ce15a60a8100ef9a6ca35e7abff32cb832fbced20e9bf7ea22b95cb7212209d97b932df79652a624033609ed082e09a14f1bdab1c785762260c9a53133481dedb44519d3a165e9abb7037dab0337478f1f40a8057c58de50c7219fe54dcb1beafdd116ed0b3a59f343de4c6730dc0505ef948c9424355252626a72ea58eecc39ad55972aa119a69594829036b343248a24774ac03c7489358a29bacd3ccdc24fa74b9dc341b19f3aab2e959896ac525395620a292d423356307552f69037b2cb4b2ae6b0880a4c814ed68c9a969f26940044de4ce7300ce6041c40cfa4fa4fed1cb0cd6acc0c97bd980edcf1faa0144c8bd34ade4c4a4485969cc07099ddc9096a4acb522c893b52a79f3e6a52fc74ea235dfaa949e1d439d4d2272ad5399a14cc439bcc29674b3a413d39695aba6b14ea9a03cd9886311fd535ffa9ae854592a817d1bc86f6272c020464fd67f3b04852873fd6b9b04811a00ad43da1e8aacb9ece01a1f5d5a5dfe89ce9e58e7cf5632ff99f2e328f94b31b84bbc3ad8af9c09ddfe58a3fe9f36851e6c8f71b2d4a57aa4203863bf6d1c7c470631e559a4e99a6d3a6e9d4697ab55e7d04eb353492f4537d73239adb7084cdaddbd048f52d9cf574fae9b36aca62ed9ccbd9ec30e66373968f609d0b8d8446927eb8f0ce59356da61b99563f3770009dd5b0880a35bc54a9c5c9440b10e54a1fa91285ea9e565ab0a405586898c2b00ef3ccaa1699aab5c81bf61966829137ec4ab8c664a2ae459c72289853d3f3100d63862eff683f1f475c5ff037029dd1b0880a334ac32e9a364d97bc78b8b409456ab100519650a5c9a5a3989e9ebe003a8ae90933f7f795f37bba6b10a28618688e8433b80a9039b40430b090c40751ee684709e5f975c41d6d927426a927a92b192755311f3ce3e7c230a663f419027d3bd0033d0afd422494085edcf61694bc913eb28e1e052a4442fd8c91ff7e93bc91ce608c1de84350ba63357ae9246f7aa9b39dd356d64e6953faa445a7d3c5d4a2f4015c71f9ba90663c01d42a74cf2e96dbc996deae3437032753ef3961c1764536d5cc5c4f3ed1edbd8c72a244e523d085281970a90107273518a14a6a88237af08052958a03140d498c21aeb32c6b913a96b5dd9d109d06e5596b9b35c5f251f5bac98294926b23271e68bfedb07637faf69e25df0e04886fe72027297022e4516137ba6db0eeb8199c6fce853d2c58d56ddb8c60820b215bc46dd6d6f0e8c9318adf383a4b33f8feee86b9e87a19b5d4e5edcba825aa1f716c1739dced65d452162d435851bbdca925a8a51158dbc9d819cf5e96f566ece521c2685b4f69e2a864b1b4694e55d6caab4d6c567094698829ec0ea721a8ec58e26a0829de0e26948668d27648b9f2eb59db22c19622b8745137e6259522a03aa1229aec10d7f5924a11416851eef7924a114b62bca472049254276b2473dc415cd7c2d1fea5a19c36680eb3948663add5de97550353a82f27e5d90d0b29dd422d9c2c2db3ae749d94d2477a0a151cb56faf9f8fecda4ee7b794d25d3dfbe5e48a04f34e0f74f6cba85463666623265d0280a07352afbf82d5abd2a6379f995a6dc2cf386080b05e7728a148009263ca602bccee945d200a189a68a1ca0aaa12cca48ed8d0c208a224099a32ab37e44091542506324002258b0780990116512398e2852e336af46d650718befb7a1c4cb9634dcdc730e58e9eb8c48237437990524a1b76968dd9e0c3216f5a8660b74a3dad7a9be6d9cde3b837ad528e635b374ddbaaa5dcfc7280fd0c725cabdde577694f4d0bc9d1903464dcd0f0e2b6cbad7a93d97e0cd62021c091dbded33534daa6dd76a5f1edb486867cc1f48e85cb967396bf5e55ca9bbe3ddcd9924d3e3d37e44ecb2c3fef5c81759f9e1c375aacd182cbeff9e7ae2fbe903bb2a97dbceda09449269df7acf39e2e422487bc99fe81264c9ba943da4cdfc23186366917f64c9be9e20dda9660e667c992253b0d16ae13199242cf94d9a9635d84dd0af2cc5a180c4c813ad0136991dd8aa23bf31ca2f30d7205e5ac7233b364192443949228290e8240a202c52a04e28a8a4a926a0226ee86c91bc99a4f4aa5b473365fd1b16671742875f1256bbe79a7514d737a615256afaca00add7d8557318242c59725a4207a612669700444d5950d3d58d1c3acab5116950b56176da3b21b134e68a19b4daa22c1d65dbb922e43c91da9cd99730edd4a6982a897ce2c903cdc846bb4cbd80e2d889c503ca158a983d869d353a669d3130b38a77a4ab508256f9a05b24654bb019c5cf6aa314dd99c7160cfe6c703687acb2f7e8652d65a43146cab506ba5b56e23ad5ba885926ed149aaf49b7742444a4b484747464147b4c911450a121a2a5a6ad24f55414646415dd54f1cd7b1949ad8f6e92ea63b361493c684d4444c4df4b469ded09153b357c41179de9cb3a7a57eedb4e1fe7a740c02101c72518b1b2769713361bbe2bd1667fec787637adcdf0ed713ef09e028494852e982e9376e028cd510d2d11067295290d05051109123ab2023cd298992511098ab226088800103268c92255d775d55d715256171763bd23c2bad429947cd555e95e755555559e1f027a8c080908b92c8197f38bcb7f2e6eb59c7e054d262cf6e9c2219ac7a2a9155eafdc8d13364ea372dbf35994ff3e99b4f130acbd3f7cda9396715cfec4664a8848e2225391ab2f56ccda939d5328f685211e126f32a4868a84848096d33a52812513341611152b2a4e46435448f340e3374d464a80e71d27a2a75ce6883a97b09d2915211511223251cc7397f3e5cc732a184560bcb9c33c8112c58a88aa6ac4e259d05995067eab3399b2093ea1a11574681c5e8b985e4ca9e5adca07454134a2d2226a6163f994cad968fa73b36d1131525f9bc8ec5752e262896734dd4369b375133313d69c2d25d9e08fde6db5432cea5238ae424a9588ab534e9f24f4d1a7793fac4534cc5561ca66e5cc446ac848f2c1127260dca5682d644b3f11b6bcc3ca7b8afc2d4882dba3aa2df9c55c485418e403591cbe563ca65e7b0e76c7118e4c814753afdf5fdd410e9670f158e7efaf5eae6f403f713a18bf1f8c3d1e1d5cf185ece0f84769e7a0659d3c07edb223723679859462ba603e759ae3d8bb5682087311dd33b99063909174dada7a64dabe5872bada792aaa325cd7b7a2a0922a454d447485346a968d181dfaef8cd6d74cec6373aa737cf317b4c19b5a1d8e2a6815707873a3564a669b33948e58e3a53bfdd16b184333a1fc89df6cd697c39f80ba16a5f0ef91c7adb9c53dd34474d509c188aa5188b8c6aa2e837da734ecdaa69258a4a2cd4a0636666e6d07e3c5c29f583d28f54ea072702d4ef85c1c4d9c322e0e87accc3b50de54dfb16c67c20cca7a136e30200001c340701b057fc6ebb9d617d05c06576be95374a5ca3fdd596792ef3dc9695376ce58ed43283864efbce35bf738dfc311db2be0cab74ee66ee644f9e73ce09d4cc4e0ce02503e4ac366b950d3143d081334cbbf17433d7d02a9d4d59660299101589cb8e23bf43fb65566dd3ecb66d1b75aef286fab4745a6e1ad926c7d2585ded3cea7d93525abf6f7369764b9a324eda5019d4c74b23603daf6af693e982ba46dd52aa51aa4da0e5dabacfc7eb589cd7b138d6078214ae86b3dcd69e0b7074cc159c92c16d4e0380c053e72dacda065edb3c5a3960eb663dca3c2c6b4c23dbb49cc6b12aaba39d372b07aa0f75cf1fa79d6bb4b3acc9650773580144e035aefb1a309fab4e1d8f1e1f083936d04a4f8ad56ddd6030aa39f5af55bdb2805cadcf738535ad9a9a9aaec961bd748ed59f139d945d5790bcfaaed4475751cccb4797d2f4d135f4342ea2cd61f8e83282f9e83aba3eba90647c7435799a19dfc04717d3d3f8e86a6ad1b89e9ec6a5e5695c544fc3f2d155f534ae2e4fe3b27a9ad105f5342ea72c868faea9a771c93c2e1f5d414f138e1df31890494c8949cc67347dfb06b119a60d40399369f2ed314adffe5aba48dfcd359cbefd7bfa768feadb5955dfce75f9b6fa761953dfded1185e4126454c62380c946ae2e8db61804786f066f4304039d388bebd16cd70e8fb842057d0f7b40a1b104d6b56bebe6c62e1e53545b3769c6e7afae6ba69d5102abe251879153454b409b5ed6e672425b8f86e6e62279c91a11ccb93efefc0d39417a258e04234033abad2944408a680404a6936b2d5b7921ff98aa8edb48122f49ed3ced179cf3ba9800b7b7a691bbdbddce7390ffde71e38d254713def99dee8969d9d86d788dff3d742817ae18c181ca2e85c8e33df2101e6bb2e8926be538287efdc7e3e1dfb700968c15b244af0b605d76312f4db4613f05ad3075ed3faf3a92b38c2c9539f9f0fb5023802c22968366773deee9874397024d0b467ef290fb32c3fd63ca561040d483c756b44d453bf2af0e1a90aa63c3d62c953ab001c27cc4fb63ca55277a454074a65089ed222b278fa04c9537aa977613e020e618e5431021e5e0862e6c305ab2f4c4620e12405331a82a7567630c153ca81d51d7d36bfdc58a6348b1a9e7a60469d470fea3f48002277e8cf14f0a0648fbae9efc569308ffcf942decb1d7be8979e3da6c33c4b9d3364edbd30d89537cc57ec3dcc23bd75d87bd873b0f7687ad2c99af1a554247750a8ceb9f5dc863326866badb5de0364c1980e9657af2f77f9c8e4e54aaa2ec4861588eda86ebdba75960527970b4e2e173c8017b7e5d685736f781da7d5de4ff7e842d548e44e05ebac822e16933789735adbfded00f2608bcb3499a662e870394875ceb1fc6701a0e79cbf3f11aa5be76f47751b72ee81da73227cce794f838c85ab583a27a6834b68b14e19cf514c5dfefefd8ee5494ba48b986783155efaf65fee28af16403db6a36a2e9f9f8cc2579216091082fb3292f1d45f493aa71563b9e6311ddac85530a6838bed886d2e9f73a0e7cfa725e3abbe3a37b54c767102a31540f1c30aaad832a3ce4c504fb9a794be8aa8bf8ca8bf8ea8bf902853b5cdf42e5334cccf169ab241c4caa7ff0b2e8f16a76b3dace740d103bbd7c039ab60eb71aca494d27b884c9be941b0212f128d8eaa26e59ef628c260725eb7d6479d8fb1e13611d7185f45af22794335b9439fba06e6e051c1ce7a3174b8fc2c16cb3bcee3260bfb20d53fb72ebf0654ff1cb68022cad422f5cf2515ff794fdb6f8707d6b7f66b7905ad779de78131d6f2f62d18e329a08fa1e156ed55a4f9aba87346d640c602f27b9e0581de03e76f40e3c9dd90da7f8431cd25a7b53ac059ab1dec368ce9b024b458dd3ad07b607fc7f2faf369c5361fe1e52e1f21c66f2cb6853e5eeef29f18bfaef5106ae115babc8598504e1b21b0b7d77ba6067e6ec1afe340cd436e8520b46b6c4121b0ff9c05f293cfe7a3532d52a6297b15b50d754a99a68c83b8e955d4227de570590b636991faf82a7aea05c872371f79ca05762e8ff3be7e3cd500f6980ece372efc1ab06d4c5c94aba60de5a969431d070aae8cc7f8cb673c29c955f5e3f299b0488ed08469439d5c4e65c2d81613c6b630e6c3e52fff71f92b2c92b47991f0e7bacb5d6111669a36d36f38b75cce59ded3dbe6d6e5f283802b0c4ad23c899d732e0cc25a5a7c202d56a4d13d0b76eef9f4903d03387a4c82de86532d8e52eac9d00b91579f08f7db5183d430a6c33acbab8f1cdb6135cd59a1e41aa3947a12f442e4d56be1581d03fcda7d0b9e309b886bbc9404104327f911e84df81cd033396d363963862e7fb5d6da6dd36c05473b9af0a310583b699e7e3f1c3316070ed8876386bc61ef6a33adb5ca5a27ab35bda771cc306604b77ff4380675073b750e772cc0ff71f24707c818bf3e3289b9a10a494184245117c28515d09c86b11dd439a7ce8593cb6d67517072b99c536fdfbce398dcebf297c738cc937e64fcfabd1ee33fd763c222499c95d3860b7faec3c22237142d4c748531ce5d0e347b8531cee50a8b2471dccb5f311db30407facf95b81cc8cf53d52be7d5f3daf2eabc84e46121ae51998706e6b15e9d93b0538cd7eacc3465302dec42135f61b0afacd4b540aee53f9de7795e48c20ff80324a1457613d8abb310f3f89035d86b651fd985af5dd843deb03bcd20773eb0019fcf2df70399c8f4f8b932b53a0f4d9bea385070697cc6611ec3937e60b84ccc878cc3fc47c661325ff823e331c2223ad3a6ba4cf863dad49187746e8c8f72aa87104d3813c6aecbf8cf7519975fffc29f18977199b0c8cb631c68d6d33ded7d0cf80299a9696eb95d18d35c3e8b030fe0c5b5611369209016a9cb9a1a06b9aceeb678474398674e994864ca349f6c42e7c04c609735a65cceade798959d4c9092352a9048e1e5a55329935d10a1e40b931d8cc8c26ad643880b6d6871acb85b288a9286530c7b1c5124335cfa316fdaf9089b8ded701adeeb74829471d2667a8c9fde43ee4c9c1dc41b1c090c06c971d3af9449e9a349d46919e3474ec26c952da17745dd7c84ceb7d048d2cfe6d68d70de853656ddfa94c56a18f3d1b9f5113ab7a191a41f96db2e1cc11a618577da54b701d4fb633aa66fbe017d7f3e5cc199182f97e5d61a81ea65580d67bcef7658bbb78b38edc595305896a45849c27a2951eef6d27b1db933d7cb1d2d92ce4aa67995d1d933ab0de5eb743f5c212d76bb07385c69c52fe864c0410721e801e0000033621bc880c58041332313f3baaed6e7752cce6e5aa5b39956c1e2e507c256d341b7c60d741082b33572e03d001cd0d658a4b646231bc880c58041a3b546157e7aa76dad11c8b6a677766b05616f0fc2edb3015a152b550ff5334ca107f027f0173f5de667386aa012e0a547494dcd2a6775d668386ee08017ee0c2df0daa4b77a0d834ca71f64ba9db7c59e35b97287bd6350a54ad300a2aeaa5c1aa82a1688d3a7bd45a6d04f66e7cf87bdeacd396394044ae74b69bacef49ee937a6f398fee3f4d38150c9d7fe9c0e9b534611140381fe972bc3171f366540280c881019468281c1604e613cba659abc46c4f9c046cf0d2adc974a1a44e5297d0afd35b05ccdb7a0abf3346852da55415c698202248cc8c26ad61e2875471d16717abac19a8e5521ed3aeab991a3c70f09404a68f2d487506ed1716ade6b6816d4521a37381f50af72459b0220e13ba2bca12e5a51c41149886185f3814ecf0d1e3d7ea88479ea40a495964527a977514fc420e3e5f4a4b5b447969be4c5e943e6e8f4dca0de43ee54a7fe83e6f048910e3191e52526ae435cd4ac84b33c30a75396d4bd59eecbf185303dafe5baadf57da65e8333cfd56399e7d8c6606cb3de3318f35c63d5675e633d1fd192add60d1f4983d2efb9c78a7ceb56ee3c2765332929954c50eab4456b9f32e7a0ed29b46c83a21c3ca8f768990066d47f5027817a099d43f3d485748e8c8a5af2d489d4664a9d1e7945d4700772d0b4a9de7553075fa464063997daa66dde819721cc4aa148e7d8ce91edd599e80e9936b559fe4fae6b8f73da9a5a84f2d462f50d7a64b93f569039260ce91cebd553a8ce417247f3ea3c9413448ad547161ab988c1ceb52566da34d73e1f4d9b55e7a720f447f5e93128e31b94514fc4f01dad7254a509435d3d8729f44f108776f331b7985dcc97f9c51cc32cc33cc3cc8ec3e075e23beb3138f329f88ef392be63790cca3081c3779dc7606c7a8dcff90663d32595259cbca4b204d5779ec760cc0cbefb3c063d187cd7f2188cc9f29dcb6b2a5196d07ce619641df1ddcb6b50eb248bb39bf67931b2d54a41de54bf80a4515d038914f9be4149258a102f3f9f212dd6b872fb3bf77cd4d14940d5991d64b93330b97382bca95e5d8694a1206daa57192fe3a564165ed28b870d9137d53bc872afb4b2ac4dfc226ef5990291222d06350b350ff59014dceaed527794565fd8c2adaeb9fc708610913bf26bad435ab6051129e282afce413c34f5d599e86a569d9d80faea6c24a356d0f4757e75466ad99c55b79ba6e31d7df59eea3970540d64f76ee734d48b878ebaac1927339fd02ee79cb3e79c732e39ea577797cee15a995a96806e8202658453cb6666ec0d95a48b197b63b9cfde2c206aab4a9b3cebf01c4aee3586b16a518ab31beed84757cf4e7c7415a6ad50137592e7665e6a91673872129c6f0748170ca0eedc6aa55b07a05cb03d819242acd4dee0d193e3c21c8aca8f22940d1f6421858b18a83e1025a8851d189a3881144d4a00e6cbacab0894bc27314e4855cb53a058d04710793333665e464119f1af9751504d7eac818a626a88ea8925512c45f1243e41e14f04166ad18a3bedf43b1d36dda76b2eadfefe68e74c0bad50c7422d93cee38c9c1f98de1aba934ea92882188659e46ac6b30d7ade3e52116890e96a323db0e9ac1505fa4266cd2c82d218163c7ecd355aab57d6514cc7c8ff7a4abdd25a1de82bf8148c51077a3ae70aba1218488bd26948428bb2eb392bcb1a369dd795a3e78f16bb4e9dee198a120659f526581bba07804b42af14f0935df266d2a00ea4560440e9f09a4dbfa1e5a7a4c16c4e7d61e5c9a91a944019e6cae1a7fb9cae258858009073c8a49d47707d61c502145450584917442d21f41d4141cd393d886dd8adbddf6cc3a1d3262e12f3684af3686a431a0c52a6314d1b21e4cdf491a521f9a9dd306a3b683e6a48597eec667b9aa6c43c5aa869e11a42c81d0e352ef286a3fcd8fd689994f8e91b6899b8b07eb44c6f9bb8c61c594a104dfd748d69ca5839489be93efc74aa3125fd74fac972f25363fac97aa245f1939322faa971913b1c14f2460bf370525c637ac852226f1430c51d2d93d4cf6662d2649032c6226d82988759206b1c91392fc81cea57c0e6077e464df6b155c0502cc5532d72cfbe231be509548c294792030dbcb4b8e30760adbef90c1a359a56abace0cca6cdf868d4b83c0dc81bf6a4ee86a27547c135ce0f4c344cca125aa782ed06ee687b9fdc991aec8706e48ef591c68c1de99fe4d17980b45be4156de342f9a06536daa66d50291f58a5c86281dc1ce8293964491bcd63060001b035093c0dbfe78666c3c67795a21435e7c04f8a2f1d4df3517c1d4d02dba7237cea9dd558ca9b395df6ac744a8f6d13a800b4dbf9c2942130417cdddd34861ab49e7e201240bb6dbf5d449f84b6a0545d62a0ec5309a6bce62a9d573fea4071fae60b238f6c2425699a00082941dc9751527278ee65949424dd141449a0406229501c14525af811876be1765e70345c195bba27ae76a54e71392adb124cb0a8ae4d22e9da1478575c2e880e88dbeaa14b12a506cfe8ba5e4645718163baad975150ae2a1537c6cb28285b6cb8342fa3a03c6d3d4051421bc27553b002f87508b4b862703d115cb5aab84e0450df141cebc89bc2e37608ea5ac0b23b38b19cd8364e894ee3a1839225e2045fe59183960da709bd554420511e47441c591e222822c2069692262288583c940cb58db4f6c2603c6d464d28a8a249045f3411794cdc1bc6ae70e9d5501644f7ca0dd71271b597548e380266a964ffc0068e0e4349828a132e204274987767b8e6e0db479e7b73b44cda4df3195ca37d56d734a72e7718ac85238af77e9b673b8ec5e23a7b2f0ecef66975037b6ed8c8c1ff6ddf8d9e16d946cf8d1c3c3ad71d0767be5a4ad69c65be4dc6dbb410bc2d5ad00367640d763b7250432b6ffcfa30e5d5249536dcfabc6eb22667e7a6754b5911c0834ed3399b391cbbbbdb6e23ece71482673637d798b7557b0329dc93566db31cabf3be96ebbe5caf9816ccc648e6f9aacc8c3743d3d1c060b960c4e05c3160162699677b2963036d831ba3312ff6f9548f511ecd5952eaa5f41b6d63e479e909903c94e54e55ebeeeede64e743d7716f3d357b61ec3e657276616fe9dbaa4d6debcdb2f5729c7ae7486b5bee6e93b02edb69aece3b6a6d71c3ababc1e9c3d9e2080c9667ed856a1ba9450c627c8060488b2a30262d98c0202d7688e1e386212d6480e123c994abe9f3f1812b303468f9300263f5f9b001ca470d434d34412c192e005e52a9c2b2c580c43683aa111c5125c3466445172c18aecc4b2a5654e171b9b19754ac68a2a3c10a275cd585f1928a153a38163c3419390e0cca71dcba75a84a2945d203162c7f8a594283154348d1a0c40d5d704029759c302220c1cc1433b8ca54fb75fa7618921d8a8ebe5d631d5a97583df59ed64aab8ccf87d20d3e9fc91eb8f21de5db639f4fdbeeee6e2eae7c77fb3416d95d32a37e67f040134f5d9ca189a70ec3993f9f524a298dc2ea0aa5f97c6807edb75d72f1ed303e9f66c271505c61a25064a84106183c7518d10c4fdd89a89ebad881239eba4e4f0e5486599616d078aa64367ef0d40675f974f5d42975db82a70e7b41cb53f721239eba48c353c78101064fbd4786a75231503d95e2020b98cca8df1898b55f6e98b99f4fcfd0f8a0831f6dfc2084444aa84b0b4d2ee4f054ca05131ca9e2a9bf3e1f0a45bfca38e3ea8999140b53a48e1c3d75d7e7437f7e68dfddcd81a4a42aaa7ca962052798350c586ca932da6208a425b3ae3e7c57a1c3b7ebbbbfcfa7a9157a85060db0b05203284fbf10c1d32fbc3c950a727a2ab5420f4fbd8523038d1f67c2e040a5cb531aa8e029cc0a92d9e8256006414c8581e1a9c3a82bcd192f9a784afd5e51980d5eacf094091f2a9198547458aa4fa9aca1f599dc4515f1dbadc58167ba28c153a796521f565184808a2b559e5e90012c2b84e02a8a071fea121810b1680cdd3b3fceb057555c595dcdcacc148a285e4035a7ced461cfe151cac511dfde3e7528e586c284162e4cf0e5ca145600d9001543541758987461eae10610dce7c0e98e9e57bf9b91b445145b70d9a204df2ea5bd79428a6a48078c162a84b82cd9b02a9a8d022e425c9420f145690b962d56395d9a7451e23a4017a22d4db640e1f282252d4f616cae78d2de3518801a5c7e1935c5d54befd6b333e74871a564092a2921ae582c70dd43487553a63c21a8b6cd264c17523ef07082239c88d02425882a133cc18089cac3085e2800000ce6d395d0ecb86d7b42882cb46de3b60d69dbbabb5b860ba23a509ce4550f102aa720aaa6fb448ccd7236be50a5e0c75ba35cee65145510544daa65cde864f8328a2a062abcf85184ea218b14414e5154044d0c48fd94b3009f423bffdc51bfc31398be8e5ccf7a61a62c599e605c8662d365d4161abc8cdad2e56333048159fffa29515bb0300e2c5db214b1175ac2708c95eb39acbdd7a969373fb5a884246fa6f42876d3a6f777023ff506bb1f227718e904296312489be9a208823264bc5e72863cd59e0738dc16a77f960600303a002feec8483974ca86b4cd44ea9656ef3f3252bdc24a5632bb0d9d166352ca1f2d2b40139012567801ccda87b4a7207503d53700bea570b8fa761ee259bb9c3da64c2869876fe7198ba365707bfa8ef7d3cb4f3935a7df3903ea07f3d06f2701c8a449c460b9c972a5b3d3388a9112e374a58f1e0eca5573d62af31c401777bc7fa74ca7abbfb498dba6b5bcfa66bb0a6e2d2453766b34f22dea321b95e9f07857eeb47c7e1d6d8557de4c1de679c91ad3bdb00b75eecb2619793369cdd43cc04513668025ee0c0da4706c18cc451cd8f4ee19e3857bd687b1cf98f98ef172e7e8efd535ef993d1d9b2ea482b1e9263c0563330461862fa5eb3fa49d483b07b5f3507bcf94c99036eda0938d019a880730dc7166460bfa316577060321a1c5760f8670aeb8d57f4c6bef85e168ee533d3cf872c719f663aa5cfe018404f7a2e9042fb53859094793981adc11a789cf5513e66f252df3e99d4426bda6a0a02017ec6c3a63590243d5e5a7139943b829284826673a3fb80431959555101738b8206836bd67ca8e8c8a825a6a8683335d677acff41c93dbfb4a1bb09f7493f74e503838e2ea7cd0a2072b341313d34cd3c07ec2ede5360d675adcbae9498b734e25d613abe7a84f1b2d721fb40d67c3753151eee628d0ef7a497b30e3aacb788fbcf41ce73151dcda72ce59091ff11246e2269cd398e14ee738aec3b9e21a49fa990ec38d50a77123d3613877d4ebbca7d9a86d38c7c1e21a497ab9111a368af9a071ea3f344ec3d8e645927e62b80c8739f557f803c36718db4226ed32c22231bca785c2cb4f00815f7319efe94e7e33ded33050ce18206cda704ea3733ee7fc83ceb1ceb94ee774ceb98dce6139e73d5cd24f0c87392c2c92e4798c302906c7e59e6f607df9ed8871966f207d967fdf5db08962c07681bda445ce67409f1e6a917319d0a75fa04f2b616fe66540fe18909b8282fe05f25fd0be0b943f05ea42717ea738bf5a38bf559cb7c00fa41694d4b6b831cbedeb88159f13bd9734a09cc1800132d3b4e1bae9d2bb672779c3390bec5e1a716eedbd3098bb28fe90379ccf67719cb3382bafbb2f3a5933bab4bc6680e7ef58a6896da389af7dd03fcc34c7691b50ac75cf37f1ad7597b2e9f6be9419e037d003ade6726a1a0e169786313bc3980d99b44fe728b7a96635cdb7d0031c6ef551746999746a536b4a25c3269dac69e194524a6bcfaa6974d36a0771bbada32d4982695952ba35d54029a5a452d23ae79c734e09ce397b9b93d2704ed740396d6aada10760da19f4e6d039e9942e213aa9b194d255b9723b9f0059ce772e2927b85ded3b692717cb513a29a5464c2aeb473fd9a22cceb28c30a28255ab3e35ea73d3344da3d45a238ca8dc951c9745c72d65959be57856b9bd74593ffac956abe5ea1e1147e79d13697c353506902245c0d31d3f41cf004f45983a40d7e733b750b2a411f7e9a892f37275a5b75e464d61059729b4fc8863914c3105658a27cbc265bd8c9a220929d7bdaf28c1b2ba8a4190eb3275de54eb4a52d785f0c5e8f3bed2038b1534d436f2477b6df8aeaebce00a210b282b5cdc10627064058bcf8a14de9515276e083050b292847724822921c820c84a10af10bc4c5959f285d0e54a0a0f3d654dee872f3578465c9a9754be044db97a769ceea29797186c95e3a1974e50490d79a1e2a58a1dbc70f194b8ac9754bc4c6d5abc30c13abaf625152f49b0c06471d22d0598e767b754dca29e42e9998bb8f295e28bafd5ef9556f4ab9672494280143efccc62f5735e0074c087244741b3be3dddd3b405b7edb0fe5283ef1966dd3dbdbb3d6befd4cf4903c532e34a1548ccdab130c972e4fd892b2b90f16d2f5d52a9d61a55e88273d2da15e3e552a4e995bec630b1a202a8d42c978545ec14a201000000006315000028100c060422814028a0e98aa07b14800b7ba442745698c9635114c3280842c6006200000000620c2180500d51198a0ce69ed854c2b6e92b7bd86949ac7cd2e0fa0d1214e54a98642bbf8450dac2fe7148338f4546c42e904596bba45cf97236dde5c1d911d121f008e567ea63285db5c10775e33f80263178f7e821b6042354e7307a20d00e9d6c47d9d786b3eb4cc6e5e4d54076769c1369596d173dcec8e587394c88db642539ec1a748404b8e296c6748eaa29c2c30a8e82f9779a5c3acf866057051844fdaa375f100e899a704a09ec90bf24eb1256e4ad9fba2983f42a6081c91b4915b2c3be0585be99e09738e721ca32b70480ff75ee2602dbd4c9fe43f46f9c5b1d7af584f650a621301bf4d36f5af482995bca400d3008659a2b264190dee3ff6bdf9f37b4082b46645407691e0feb6b4b1a667f407b011e4739c300a4d6074cbe5e00bf3cf3395897e37892b9723504eae116216311330cbd4dedf11de09671be04c5659cef00ab2fb0bf738fbb55e658e89da0e3df9aeb4b727641f0a3a97e5a53cb90e192d707c55a66ae7ad3b3cd6e8e48f2c297f53b5d68f0f4a1cc929c3e7d665adbd11194f3d74a528c4625feac1bf752fe0aec92449ebbe7a0a193f27a3a29f0010f044918a207346c859baed0b16835ae1a5dcfa8ebfbec18bd52e9130fa535f9d8928d1c5a1d4b5a86a8c659beefa092d45a99bfd4f8e9a9d610a1c84badf3c0e4c2f3064d61244df7dae75822e35803d7d1e365827c15d092696b963c554d61d57722b5fa772f028f09163488a726430d42a0436998c48a76f3f7b5d6fa2e4183fdf6e5dca3a57ae912aa226b30602e661b18bbad357a8a47028122bd04be3dfc88650f8d06986d51ea4d239f6608b047c0ee8081f21906b3aac158a01f0875d99056a0a645c01386fc96fc576b93c97a54ed63d917065e844498321f5089a7d0e8c69440892dde3909051d3c505705f14228bc77163ced64704c6f64e724368d4c14a19b071e132867719ba5d2b9347108d40f65c51a686f6fe42a25206e45875f89a2804f29b01a81119b62d42c099d38ee4fe668ad03e46ccaca2b01cd3ce337a6ddf879ca23eb56b96c94b18db359145078ac477a123caee41efa01d288ad6b0097f95fcb6b8d51f6192a1f288849e2704c6c95b497561f60b388df3848da6d1679f498915263efd2015137237fb9911d1043d39e13013766abe42e94f37028d8f4a0c3cf49781e2f60cc5c2bb1d3baf1c3b6d919bbb8097070a512ce3bab80c300080f0503a8c37f17120e2e647c1151ffb58acaf0712745b6031b0f4cc43648d1d64ed6fc3ff8b998eff948c7c922e00b1c05d557674a7153c8bb85b2b33864725a2ae3874999d51797fb3012e85933f864379a746327d2e5a71f3c5b28bb59729894bfea8189832272b002cab3813fd3af91d960b3dc9bc438dced42ab5e186b1a04a24f9917c0fcc997d5782032944737e3dda15547340b908a01d59d4f87ebb1b6b8064a3e4c5f8a048ca710af74c0b541d7671981b2ec2a40c163be29999a9c851ffd0632393fd1136469c32947a625c79f2b000212f931904f68fa32d9a753856954eec8970339a48c14378a7d194a1cc0085c458d7ec7c96e75cefa818477db4923323e9a20c915e05f3186168a1cadc4d85fd992204f876a8818ec29cd324a393f841b573f8dcb4b86aa59d0487ebd29b9b43a9e9be59b925bdb4cccb41d83905d234f495c0150706d97879f450027f9512690eeba00a083910a07f75b29664fcd2feacb624ce54585f7d34908de319aeb76179d7fff5c8f78e15e8c4e6bce0f502da8132c463fbcb835d8caf0a29c212e50c56484065f19b5e2bf1e98c9c3f73133d1aa5c759713ef52e53c459d33e8e55719d655f9b774cc62e63dd8264acd205f72e70b1074c9c4c134c1a7ba3ce8a3da96d1f89ec464d14f83819e1b5b51cb40b397eef4a1088d4b275dc9e8a1e15e5e22692b5e8c0112a0689737b9dbca1849200acdf04994b7cac6195a1cff28c1b40448b725a6d6a8a3e4485294bbcba4ee0c3576cde7cc127af649dea8431aff8d6a830110da59fae21090fa432bc790216968baf1480a4944d8726b3c6a073124a5526411264e27577374358e8568c891768ec232e9e116cb86c3278bbcd6389af0dae3ba41906a374c628f3da98a184c4025e133c5c0225d1e97eade337c79aebda4cb394cc94ca8ca77b8463439f13675b11380dfbad91bd71c8bb8c62490be48c7cdf03a8901d448e388aea413645df14b5814ce2112763401489e444e489546548a23b97b090578838e3c3d08d7604385f5e0860d1fcbbc650c5340124caa9136421cb8d51e64fc78bc510a5bfe157adf1eacf340c7a463153f1057c637d0e5af7c8e3bc8288b93f995e3b5aef811b8d397f7e28101ac87636e42917094ce0cb67a6506b7aea20025bfa8d0959dc2636b564f4c4f98139f9e146238b308d800e6092f2a7b394033e3dd1cb400e7a985c5785dddb2e100586358e1adfc8ae1f00408e7c48328f22cbb8bfe41355da3593aedd2684851215e803e791d49241b377b2de9868a76be97eb63ea8417832c7b40d5f5b8675559769ac9a96e0e347d39ece21a66164d15c0c48948167e05bd8ef14e7fecce4ac4f07e6c3f538b8f85b45975468d04ee8b30258be90e8e57d0f492f744ee29c99ab497cce9180acc4c85b10f9c71f82a70cb85f4bbaa411846f7995f3cf27120bca3eea66061bce94b0ac4360d145b51d8fcfe77dfdd5728e789c509065d4e8c89e3046b62d435cb3bc2977c3a9036b4722fe20711e462fd32e907434c91769b92b1a0117ad185450c7fffd1dbd5d71c60d468721f45b829ecbb04460c51b7964a7483e5c9752d82d62944ed275ff4a33da36ff16308aa45ae7baac66db27f5dd60e70b84cd6ec8c6bb9af8bee3f065d30305a9721868fa7c36f0c8956cca60c2aba5824290528ba3e4a6848e32325422e6a5e942dd279f934d999b912fe9a95f29f8da14053053250f8f92d3a58d79c7b1639fb08a023bef83f99e2badc85922ed936fd949ee9665c7f2cd4adcb13d267218b5b09e791ed152da924658a1350f205586cbbbb332969a729c0e41d99c1870a8c6f2b14a40cd25a5d2ae38a7b889a28076883339eee37cdb4b54eb66b8415b367975d1fc14724dceb1d0bd57c2ca1d5cb271faa224a0ea68564910ae511cb1f63ba012d60667fe69a4548460acd81d1934aedfbc445f31e2ee0d57211f007c89cf33dbb3c9f0f2ffd8fc9dc3caa000ddef1d840d7cdf833f39a6dbbca00cb47320df8ab28e447f923ea2d7900364a7f96b62bddfaed9bede23f97a3e579029511eef862a1587fbbb36ec616ff4e66dbca963ce9260e559475c055cc657f3e4413664b5f7ff5e336e48535c0a926a6a8eb71accbe0a2f18010153ce04b0281b150212138f64c75f2bc1342a907cb202e4c539201be3cda5784f1f6694dc4954d10488d1bb8e54173b40ee70e1586a4ae3c6f903c51232a6a3639e0a238823fa54c60e8ec84544c05c90114243eb77b72affa221e5979d018faa8928d06da0ac4da58ec12e5914145b4f16af041d269c68a7e6ae59beea5b13d862090588f81c090440c6546df7e6b8c88308092a6ddc32b9ebe459b404d5b78662131834db136220e3722c5ce8a31432a297544f89c7155590709d6292c24a51017150868447f251ead8708c15641c2b0cd25a1046b08988d8fa04b30e1f2c5b71a46216adf624be3e8713c10c38293260fcd592315ab94952841651beea7f80abb0a57d1151727c20200ea2a470054234eb36afd278c6a758c7b227888770815f02b86fa70bb0af466661c63047891a4effa3ae2f72d8a0ebf8f71d2e99d62ad3fc0bb1341b9de599531af54464047771400f003220c132b77e81169665f4cabae6cde9bfad211ff1681086656e968062556018bb5053f5867de191ac6d20a006ae16c1e42e0f74360d827acc181cfef487e3cf2cbf6f0ad1e4809a8aeebf03006ca96744356d203de4876291df2d0f386245da4b098eac0dec57b7baa2a79260e2a075a514aa8a06221e013f30f21cfb28c7f4a0dc26bcb2d0877ae04cf9fffa9e2b3e4529eb26944d6d3013d86b475b74146a857af5616c8c94cc6e2e17d1a471188915b0c4375581243b97c323f24d72efe4628d446f9c0b00e33a0a558a0b579c29b605602ae87dcf9227e328aa15ffafe36c91be1d9eb5584a06dd5867f8445474a11aa2a686c87e13c5c3e2043683a44b61a670332ce2ac2ecde57c1345efcd686643515a53822b462580be43dec8f92662b8c763a6289789a5bb23801eb2b6aa554bae26d27a60a9756c5eb411122c019bc67541445f7507aeccfa902a12a3b8efe43e44837677f00ca837ee04cda87d056b3a12239ed5ad6828f9bd624468812552b12652b8abc15b2105ee024a2494e877dc78f34b3b59494b58331c620201622d749895851790571165df922225898685264d89cc17a4cbdb99a5e7fa14a0255d12780db0b2c0d981bf3395dada9049980447cc759d5d5a6d3dc80af55609f29dfbae57a81e8134741172e9dfd533ac6a1bb0047bab2b9aa0a69ed7a9fcb796e69626f87d13ea38f7f614d28d6da161f980295f2dc636bc5f6dd2e4f0283b14c8b012e51527a3efa8fec41738cac2bf328fcfb3b604d9a46f5f91558e1bac04a3a857715d55af09d1e4280eab0dc0968f65ac93d8c087d02878eff80d37ed49a63622e0510035037ba43297d2c580dedd057b23eb2ab0c1ef37e7b0e3834576066c92d69f8eac090e3f1402884c2e14931181d4d1db0ff3ad73a242a76b0a74e3dcf5e5ec3728db7493b33e1d00ff60226228debd87a5d43a392fd493bf01b2ac1e15abb088aaed871484d0320d1cbc525a149015307a3ea725c49fc00f6c2a3bb282721423f9de5fc6f52f48ee0c31a34076c8c77650f4ee720781c1d2ad4b0e0e49c4a8334736ba6f6e03bf007897676dcc4cea9718c60c0fac2fa538ea6e40cd33fc75507f206ffa58578bdc4ca07cd1c5fe697bf22eee3d0aff047a352519308bc186d533525941a3f646192503e9e57724fc7631c6ea7bddc5e17c289661b52b2913656bdcf2a6920732ee3b841ba065c040a99e368c5f377caa28b813410c3533418a99778a61612005de92d861e762de1551b96c84154c96f95543783db1bde737d8797909730e47d6c9c0765cdac705e2dfabff61dbb45e0ef9c4d8c774052b0216886b930ee1a43079f32088a80b3a7f4c7266b58d3ecc199025dac781f67ecfe17b0beed077b8594ac6f4f38d863bfd05559235c997f9522946220fb617b6e66cfe187ad8544867802ee5dab6629205b2203dfe65171450f2006852619c0865c693082955e61ea04613517306538c04c98ea86eaf1b4406c87705e06d88ed71300dfa550005084568970ffedd003fd42f361bb37f8598c5dbc8ef49dcd0a1d28d56c82d447051909d9ace41f72085ce014117b0d4f66d8e330e1b7beb3af3d1e204aa0e360cd7822b4162512815084d26c3c1df11990b18069b7d6d6d9044e1054846e88c9968d200cf263f6ed98bec0714407ca9ee09e9ceac8de9d94bc8bd030ed1a57e20f4cab156d2462ec64ed1b66099b098dfa03f12f1407a5a3dcf0925a1d31e3488a170a95047c58831f038993e338486b53413cd33ef4b0841e01c8051df9736474d2acf4781b9950920c2b7f4a8343aeb88e80dcd4310251d7f853712715d3503f3d35c134366a4a2238541c581cf138148b7e0a91aedd3540cfdff28d968cb8b5735dc016e223aea8617bc5dbd8d44f0f457f1fc2bea8ef764aff17f794a4a35109b6bf6ae01bfb39c025014104a658ef5dcc8a587181ef8a39aa67304656849fed523b1117a5312e4796a64e0a0080e874ae2bf119d39c2bd7abb9caf15a01bb9414ec0c9eb449a9013d064ce62a666e606ce8941f915953fa9c4d36cc96ffa0c157b2c4cac5435569ff828c417f118bba9ca25d2a3870925c030200c68f4fbb4cde75e1b987133a31d18c39539e140c707eaae8f4c850de89a4a03a668c70a4810485f8504b5d5244d61e61960ae90f3586b42fda6224e8eaf11d88848f09a51670b034a90f1de386b3f997e3d5935651ae8bec052388da9fa4a39448960c439f0d095eb084f56fada2a105bcf0191a5f2aedceb89634d2e76fd39e1852cb037cf50e3a968a23b2c47d6d86bcab6eabdb903ad8ceaf4a71fb51f1fcc441dbe5b91752c5c023b4f5f1d7218452befe899b4c486e055313d50497b234c96cac261f5518fd26c5a108ece350f698002e2c31a7db308b8ce75b75bd10fd0e8eb61cf17b4ffc725bc515296db94a7c5ad83bdb645b1cb11304d452fbef3d3ac2464ff2aabd50cfdc82e2390d318d206a722b48e03c199c17b5cc8ec5dd63e35bb1c37d76821fb4d6153bfbd1fb537d7ff6e723684fca93ef6fe53f736b5460051bd75ed1ddbad11a9508cbe23d8c668d95fd81e41915a581f93f51d3d13d1230c37b09b90d286cf9ab3574db52fe152c3055d83e0ab13c5f7ae8e62c351fc469ab7f63fb99c694585cb35b0ef6a639a0f6f980413207394008a68ba1da87f171234001a50d02971d73ae2262c3cc74f3dfae5c9e6685cd1e822b585944f9fdab1fb4637dd69f9db37f593e9f54b685c49872860b2a5099d3fa04f0b48ee169c72b9e52514ee522d3a0f1e35fa3ddf0e65ea6b216434168155230057d15d5646bd27699eb52864a7077e83833a8a83201e8294b6cf2db92244e4be04c1ec2f4109e8d1599882407d3f39625b24ae26a487ba14c31597216618ce624c211d7239c84295a3f6be15d97739428e87340c7fd3782b4104491b3afae20aff5c9177a28b95be1a0d54be0ab132f4feb4546bde8c731be4c5d185514ae9e558165a737853ede31bad26975108b7e362dcad77b8e6331c42810633fa239201c05028131f78e02182e2857cacf9e8c510001fe7816425629b825b3a4c5766236543fde0f582ae85d9ac1a5a0e1f85d5d21b7b388ffb7e39af471cbdcc65e91d70ff238b9185cefbdc3c18638c4d90ddecba2ae8a266fe8547a1519682a531b7f0337add52bf05d56062ca429ff4946c28959441d40b31ccf57c059aef912689727f028331080574ce048300c802b607d01e8e5643c09860074f38101820a7e9fd9257da47d81714c6f1ed5b3899faf4abb845be774f702189cad981e2720ae0858d5eef202d2369a723719057cf71e0a19281836d220ddfe0533351581b1059235808d5df5a47f622fc606f392843de47d652eb85a3defc58e53a4d527f6775b321a99ac0fd04bdafe0b78bb80396e34763f470bc8eccb7a7dd4b92dd6738c56e8c543b48d497d2b60111c24a22a231348237406a5570b38307b2b78a05ef2f033efe679bd1fde0a4107b2c80ba5239e7592d53b50576bf97c2cd5a297152026f649660bca4f0cec70515e98d90e4b3213a1705df202a53a61456b072273f6dc50e35e33a908ffcaf0fe2ac918d31624de2789528ac36e67b76e0594cd30ab3ea8b0c6553a724ffc65813c89fc63c68a998094a0021513ffd974ac70eb062f0dbebb3cbfbf9b61346314e02d49714f7f10d38540db5cf804068748c02d4975e5cdda8355a47a064acc39231329e1599fec6a05b8c49c9efee13106e28dd904fadaf6651fd1d04b498509c2477bcc058715f9a8a32c31656200a5602b52e626ee1dfeaa625d4b000f2b17219af2734970a345c63f0515a620bb52482189c39ecfc31bc28613839288659fd60abecef35dc10a8e6520cf23f99852e57f535352a346088785b8c732c272f3f280c77585a84479d2451b5af71660890e816fcd686d1e7ae232f963b98d30239830d2202688a983884c0b31919331c484fd39c4c43a1131115a7e25790e091306c0b38e0012f3dad593877a5327b9dc040c7755b3d5e325c75006368a5cac935b3e724ece9666990fae85e69c0d98d6dcec1b66c9514454a891eaee418eedeba6739b4667829f421d7f4ccdd0f55f02fb33cb08cde9fc158df3f521716122be6956b7a45b00203593a007758d8e4eb8435738feb008cddd47b27aec2b02c1696a09f3e67a8f7d130a83b7d1b704d5991a1a3611b3a269f38bc0efc62ab23abd8cbb1845aea22f7f2746c49574a56fc611b59666c9fdf1e2acd0967917b7285b0ca21e7abddbb0adde6a3d77cb0480c3cb3b70b981bc81687008a0169afa836332070655cb3db2bf3806a4668e3746f49d3b48e4477f66395b1e19876db9c69038037104c5809b860aa6a09ebb73b71bcf6cdb0a6af124e321a818d77183b43305d39a25699289ec6bc21a48363a466239ed05634c994ec1d886fb4f5b1dd5927cc9daa9c9ab7030eb1bb606a693c8e53248da1076776ad7b0a4b10dbd6b28e61346b928dd920a6099f1117a6c8b364b84e114c0f4b96328de35484ebb2c6cd2dbcaf637e7bee4d68b8b0606c288834e2d04b7ca2e42a0c03d62623f70b7afc24250e54a952ba9a28701048bf7125285406b46b7fdfd703268aa0cf082f2f2bf34ef3631fe8199acc846c7aa20f4882099a05359a7562f8b3114dba492027115b52653e1ecee20b3a75c7864ad15d6b6a9e0daf2abedd10b0d31d9cd8ca4f34ef6a54893e79b82e30916c57623608293b7e77bede8ce4f295dc66744673220b44d90b934b6bde4f4aa3fe79c697010724ee8351b61a62b6ae858e3556137137cf12927eb399e1ee08888bb50a63c17f0c56c3cfc46476a0434206b9a968cf54f4dc30b144e43d6ce96ab3614f29ee0e1a65ede59e5e5eeea64ca3a1c381be24e91801e670fc2a32bc2ed0e7134563a9a547c30814a8f57d4bea56b6bfd2503185d4dcc08a7530eb88249c8aa33aa9dbd015e8a7530d38d64427b457362bfa1da019b3e6205aaddb1e7c26bd706f0a23aec10ac902b6e4c805627fa051c3d9d69e6a9e69b53e724cb49b601faac13b0ab6370bea1596f46ef265db8a29d9e586f1241cb8927bd258aa5745b6783f63806a5cdc8a101fc28306de8ad312684c660f48e0c6cc1e977308ff8879b3020e7504cad2c93211d7aaf973c129da6967a7d2bfc8c22575c0c23d6f9223a54cdbf306e1486576315e36a665c1ed0b8cc30eebaaf1c1eb379a8a33da2c13f622bf800b99d93c030c766947a38b231d036384940484440966e4ec7ba4eb458c2eb5054657fa7eac9efc1f9c238d471d056a6f6381e5c1e78b654eef937e3fded285fc4602919c4a8fc5554efe0abe900f23a4d2b1fd7642b00720d25b7072e2f714239b1e795501b5b22e28b32c34c4289465a2670c9ef3a1e142e5b27bcf056c71785b98480f84d3c847085cfd5cf393a1ee111c9a951e83f1aea17e0df9a87e12af7aa4ba781a3c60e35f57a675a2d2a18b8bb6b0e5b95d460379dddf05abaf502f1c52f4bf49a616a682d3acce64f882f68ff9b8a0284b428fb57635fab113e5bc47a7b1b8a1a48868829fa2f9d2265794f63c82f9de66785f8d01b615974eae7d92e3b85754b1087f85bc2e48323bea0a7a61fee995d2e38a9c2d1d0e888a35caf18729d07c6de8cf64cc8b7f81047bf570eb4d04d311d25495a7fe95041335621ee58b2d4b4cd7c56cb1720c1225a19f2707dffe8eed5dcc9ff1fe34288d8adc9579c31487d1cb0f16be6134d1353f6af4a96e9f2ebecfbd4d2d29ff8df9f642c350770a9d76f2afe7e62f4a0e8fba919c335236f9767cbada480b8a8ae8f1b379f870ea18bf037fd6afef9d3d7dfed427a9e9ce90022a62e6733536255430f979b0f1db93e8c4e01e4b9909f6b745064e698a463449f12d744bbeaf47b71a2bf528515eb2f4d78841439f0805b9d465aacdfd7306ceb2d59dee22ceda99f7a91d4b9548207c346d0f1d13cb31c6d001904aedae0dd4b4940c0899b8aeafdc5ef79a438bd6350053f5b6f9b37f6d3fe14118a7fee2a7c8b56cd2b908fd729e4340e770e50edf9a7738ca93ed7d594dc8e600084e7c7386a6865b1d810ebc67f4c7a1f9fdc2021c701087ac21aa219af2fe76c13bde40398e3f1c8d3778335327cbe09373b8aace3d74c028c24f9e5cc48b980290b73eab350e3cf180747cb100a6c6320923dfd511c9232d3c04df705f19bad4c70a9b636bf5dda0c699a73a4fcea51516c625c7f64c168f01b008974ecb9312db12d26bcc2a9478825cb776ad6f20cc367ced839fface8bda53594a15106d4d64eced1a897eac17ba5ab0a8e71b7e397d9dc3c902e21a2a5b7c057ccdcfde4681e45a18eb64a14022f2efaf02c540573c87dde229a2c8565cb062cafa3323e1020e0dbf8483f51a90c772420ef1b13765109cde96c9b20465bc7a3e9f28f8fe3fab042087a32d3bb728790abe49a65222150be4c9227f17d44db9a151962e537c9f53be853aa32e85866282b72c988fd6afebb6e18180f3a0c05cad85f9cbc58113680ac255ed83de852904c6064c3ba534fb26157895b1aa23304824a54c61ca857ce3ade052b2c6104042415d1ce690ecc4b873f9623b7337db77303436d05b49815035d01caabaf00981796cd31037a2ffe78244fb920f46aa5d7bee22fc2e33cb8c3c9942abb0916a233944c093d9e89884229c347282196ac2b23c42c4f5cdca9d831a0f2b8ff91c5a56122f7a9ac24c1744c6dfe7741fe972c2ae898febb8cf4813b178722fd37c4454321892f912f2efee351eea46320694529a2340429add9e8574612b1993f241e19aa19275dda3f22d667cda3838db79a92cfde907f00baafc7288acfa1b0e7411176dfce410fc7f5481edef787e72e86bc2fc0eae4b503eabc00d578fea5f8a5f09eee0e9b7a409d6ba77e71bcda19331b2369ad695c39ad8a6a94e8866de8c062e28f44b3947093f6c16d37d3d0b0df4ec7f1c62d29faeed0792e37bb03ed021d6a4a5202d5ff0f40f526b0a47f144d124b3d92c4d1c242343be0c781819d453e5e6f3533f79330b8e9e957a9e3ea0a954ac905e0902b217e70e58c17e9e3c54dc7a4b6187f80b4f71a8c26258242ec859265aa9143dbba0740a66620340e242c47ce770eb20566ce77ca3e35ee00e921ba5bd2c9c406a4a440369bd934b6d72c9c0b9365a8017478e05d2e4f8a288b3cec494afae3f36b164e0e7152272a530e79fed3b75838f6ef37e30752ab17e1053acff743ef420a2940240b83372c45c553fe8845f8b90a8d53c783a8eab3fa9bc5ea57f825e2b730b9d7d4a8ec8939124e1aa490aa82d45217db16a943ed9b6b29b4212bb13fe8d60bea3a4b1afd5e8c25461da1fa0b409892076fc48a227508c881e8b5fb97336f9cb134e15845d2b51465c27db44f7ebc2b918f9c42f3ba9410d97e2800e25c870d55af7ce68eed7f3534293f4a0773a3d89fdb64c337d0cdd7ba9b4cdae5b5d8937e4569669f740706b9c58223e9fd3ad6b74336a964d625b21689c3d9a43b7c669de0018d41fede612e5f82aef2007d4cd82d1613a20e94eb1e42158029c7cb120ad18c3084ff8f92048b3dc867db8ec39663f3dd9a49259ca16e9c28dc35426312b25618a02e640ab0361459de71f638ec3b6d9d0b403f1857c57994ec78a6727946b9bca684305bf9be0f06827d601710b84423cec7917535458109d8f3dd6d56298174bd1003bd47487ef846ddbb2b3252845906992525e5ed1ece6033d26a897ae1e12eaa99649b10575a44de12744c8f1479fc40c4713d21d8c489117f5df5e241bef2aa973d9de4081a05084f0c24baadac88818805ae0aab5c0de25034240ef0d501a5e0238250be1330ba0e20e59775781955674ca1207829b817a9c1d332e40343c9ebaa2dc111dfc344800c4eb27de643a78457e3cb181b9c6be3cab24651b1c063146009892f040948613f35aeca1f04026be8c430a8ca005c1e727e80ecb8c3db6024f9ae2a8e37551857a1ef2a1fe3037cb18a0a8deccf0bdf55160e89b8ad483d86d8301e9cbc30755b3500aff28b4134363069d46adcefe8f45809765b95ad2b54b36d6495109a6f9390e958508e2c323af361bc5ccd316019ae8758a4e0ac89cc053bc4ad08da4cc2a73c08bd57759c0ccaa9db795ed02c58060562ba5ecea0832b29711774e27b7380fe6f21fbd4c38466e94330b7a4e264a2ccc32e33021b06af5d8c90f2b83f53751c755c88b59f12b3aa03db26418c88320efb06c678d1dcb70dbcb1e0fc184a9b585f8a4cd4a643e38a1cae7e2f7f18c03ecd81087e93c5153a3c7874d13bd4e905e93d066ed5e122e5949f9f54eafc21d5384dff6f184b811230f87d030806d1c3c52e0cf8e767165163a8ba8330f6130227a8064e248d1d0ce2db1a7c70a59b4a2b8f07f9769b6fe803294fc6698ee26ea086cbb842342dc101d2e5013da237665756d36dc5275f3b512a983a03f0cec0e4d8371d458bf35693cd62609d8de2e73857038b1e1267724421696b9f442ee3c2457dca928162b87dbee43a64d716b83a3b8381614f5e046c75abb285054a554d6f7725f1b70a02c7a2d89c9f1e8ae0a8a7a7463986b9e90b3d07fb35b4d633714c4d30d7b6526f651cdca38f369aa40d5d10f31e26af2749fb03b806ff3277643cecb6a998f53109196a916ec6b4d94c89d6d4a41b42c52c75fcdd34d763ed6b4431819f4ef4feb4c0b505c2043d309096206bb01d2b9df60b77566628fc99f9338c8308858dc765121e4da127e80eacd58103dcf1cfcfe4548d20de71a03cdf9904f4ce7085f6d63eecb603e7ad1097fbe74f25441b99294c5cc0eac2a11cc91a9356eba438aed6aef311684aa7cf687a0a555b4f068b55b04be3b870ffcbcc0fa8ee92cd323e116785055efc84ec640d0b76bfd459cdd1bc56146b0c6eaf16c4ae87c711f06d36254846d849d79b6cd68aad5b0299749a41ad0f709ba4d8a5e9f8ee21c753d32472aa5d3523732c3282d293af98de6208eedd02f1244e1746b5057a1aaa6c447dc7ae1019942503269002cc16aac8f0219fa5cc09177e776723acac1151382539441a106cba68fab2748e7db14598b2918be93c23422c8cbdf4c26fdf0bd20daf51bf43c527476b483d45e99ae4935d47d89439b497ddc27117e4d9cfef76d383bfa378ed94c3b94af3ce53b1cceb0986119bf987d1edf866587540eba58810b334faf22021a238ae93a8ff81ec4b86c6e3dbd5ee7f9c05f565d5104eff73bdf3de67cc7ee3e61f7c1e6f9facdcc54458a4c8eb7f8e2dbce52272d3a6f1e9e99c42ba79f10e427996bd20704fa83f5fda1fbc7b0a94f218d78f950eddb45b2852934f6edfb82542f025905ec46c8b64bce9d022068e6c5372e99a2445a35adc2d4b06154a4035ec82c68b8ffbc3018d79398fbc9b2f7a3938dd6dea09bcc21b8c73326423aa22b575e85d5ab4c2c73e1cf062d26fe4bcda8f991b39a93b2f7d65fcd8a419740611fe5545b478bf79047f4b885772772451e36d336eebb242dea033cff0f2949ea8703ba4d6fac585e192c191754b6b9f07ab80a181da1950674a519158c52df0ed7645376a301eb92c5084e0513d0507d3928036e30bba55c5e30d5a96f0f39bfe5292157610979c3501f7895d4c71df235053fb24c6e1c10b340d97379ff97ba7ad55c0e5e11b60ec45c3ed1d8b06425874d544e11ae11744b3685f868557cdd9d2cc95832534497327d4d5149df2f1424b36da158610a81ab4d7cacdfef5a0c64592d9ccf82b232ec54eb9e90a39a88a90b755039489c933cc780a2b8fc9c8dc8b9a43e138de7153f12486402c011590321e0a550e248c65a9cdd0655998b6e9c3a2592a7a4888ae469fe8b406b624254742735cc1b6c98ff48463e0b652103fb845e35dee2453a1048e31d67200b946384bc14225e3f8b73410448663a0514687ecc22cc95237c8bf24fefca004154fa128743286539c23679060d87b0f4c8e29556a6f3c55b4782a3a280c97aff0549064724ca52399000ed32b807b1468730c3b4ca30ed1724c755b78200df5926374db5ecede198a746d43781c630e15e78cbc5003810799868794f910fcc18036b805b44b12392ba94947daa95fa3c931fe803415814674b2cbcd177a9c9081fa68009770bc33387c1af4aab6a1ffaad24ef2385cc64590feaf931891ee9d124fe7916f46af89d5eafab06981a26d589c459ba3d13118581999e55630719aea7afb4a362689cbfc49d7800c170826b72891e33506f5520fdaf15ed3ad9cd58a95b5762a5f456cdf512a84f84cc9aebda543bedce3be5364ea239eba64abc6e84cbd0ad5394587451eb8f3f94c2a8b78cf955de9dc3ac927157755d697f7abf1d4a6b1634e6200bdbcf32d2c97657c09d8e539fedd1b760b9b419ddc661b07bc590e65417bbab5a2dffdbe9f1c0b3652f8f4aa28567eab373d95d0f4b87943b604bc7340b94291bac5b0c4911997f0e02d3d837b48c24459156b70787224f932ae9727a478933e1010089d5c53f3335b5251cc11fb535281385014736c59df11d9697505f6c55981bdda3f9d160c088034703efabe68e014310b25099db0af3e23af5991c8bd92d7a68066ddf4ede395d8519b139a82e2e821b5e4e305d1652d8524e9507fce0e788b30d85cd32137778e3a2d65494d0eae7cf275fa45787f77e5bfc1296bd29c8a4d127cb1fd34aa574560f34782740e937385379a33626a0704476cb6500efd9aec7d1fba7613a7ade99541fa088652f20d0003c9fb8c18683406268676c7564e7e7ca015cd1df76bc54ef37f0517032f8bd680ccd963816bef0481cce01c6d7421c59430f3eb7ff131115db2d4f8ab8ff940bef7975890b3512b0dba68ebe9311e070b9e11a570b2348d3aff985702f6eb827c79e7e67e766e71da2a243b79f3f1548da1282e8228b5d7a9123d00587e6148d1425680302473b5c81a5361bce326975b56c63be1972102ba4a8d201dc211ec3648d8d27b8cdaa01c4a458cb95521d632ab61005f581789b386926a7cdba4ae2f140d9c3d2a8a2f15bf9c622589b70711d011accecb368268edadb6045322e6dc00924c2d91c22dc88ed96e0256b4047680dc3a955975bb1957065ae2e545222dd2834c72a7167bfd807eefb078c6a44243b95515d2d818955ec45541353623169924f9b9e0e4f6d689fe115bda1f6e20c5b6a606673b2b7060fa00bd19881b8138fb0b03a14020f9afe416bfb07f1d67a0b4cd477cee51a5c0895f4f41e98df09e7953fa5d16a0a2b6b81d4a46715ac192d99d646a83d50fb9af912435dccf3447a4cb8f7254a60593a5a22c520612e9fadb1a1d82b506d46f0f0a7c895652bbf5328e6f41d2c2760fb792f38c91328202f624cfca1e208932246b037f3f47542ec054c2d5fda7a76597760702bfb463c8e8a4cccf8a1ac2c998e82ade937889fb00e1947602589ffa7a08aa8183f55364aac58340eae2f123984c01d66701b71f9a59291130b7ac2ee902a4043f72bf542e67249e50a9fb90537e857f9b95cfdde5c08a565b325983cbc55924198446d491c5b165b8a9d030b4bddb69c8d9f66c3ec4cdeed05d5e5a046b8c4a429f019ffe450601a108ba77f11e796248ff994d261101a07e98d1474a15f16d851286727a738a99b210446be30aa9e1babb17d9c7f6eda9b761a11653ed8929e813313ae33ad0ca4b38d90a1508d9ae069013e8f9b317458f262331f6b06e08bad6a8bc35893631a877c30391968996479226e73fe56e3505dac266e4a598326d25b23d9a1484b73c0dd969e7e8956125ce3c56f9ad3f53e6fb4f142cda71b4bdc2a319d8d4c14cfc2f27cefc41c6604861cf9f20db87f631a6b2da202c815a9cb7cfa7d966f3c2b54db3217d6eb07578c9df4c0382c164816b3bdcf69ff80f39551eeff69f4cf4222b1609391128c9c9b1514037b051f1d3056f2c204b5a6be6f5dd5e61785d97f014b1c16b21e47d308f1b134b1e23a772c0243ac98f6b5f88366453f04bbd823c2b8cddcdb7f19f98baa598d91823cff6490ec68fb21a441a81007c51a576c740da193444ac2e51d4a59dade6c3cfaa69465950e174e9af3722359b881f84bfc2fb7277c823ad2fee64ace4ed4dc66ab79720c78e1024e9754fd32fb02130e0f607cb7e616510de05e8e28415146cd26b183a165afee4551d01276659cad8936e1823085ffb18cf6526b66fada67660695d2dabcfe1fb83fa0c4004a2a0d07e9f305e0657459c02fa297a70792088344359d57c2ac0308fbd72c43f123ca8024d392b6f22bc63b6e92ab0e2727777bfdd5fd24dbf2c8f5251c3042e6434f02045ce46a0adeb2958ee49851101b3869b2f126dc18ffb931762306d89a9a7a1f0fffd758835aac97d55ca840522627c32369f2460925548f5e0b60795d85cd2c8c81eaa48c2e3508567f68527adac97e9e3ff99ce79d505a1ba1e56b3eb57b58f60e018a9bac9c5a3b252c143d07ba2fe2a33faaaccdba9339775fd224f35dcf12cafed814ad210b42c216ec5a1ec3d9a956bca2048a0d23580dc156aaa2f6347a5d56fa8a4acd4a7378faad0e72d7eadbd1aed1874b95474185f02f59e2e246cc7bc08a5faaa68140a96dc14088d93f6606c6755b4c22eb25d097a0018e8dfc78f98ecb212a41d1bb069d9deffcbff38f52cb84eec2d67adff7290d7252acae829582ab8fe9d36045017e87473fd8b2c063f7bc0ddbef025bc4ee58aae6f3c4a718ed0579a1b44a6114e4ade7d6b0b53876931f455659dc28b2d70cad43a233eccaca82ac68274dde173edab2783a1e631b8c7353ce7d32f388437eb91578e004687aa8162541ba51046baf9b2df9ca4e8028452b67bef449f866be138b8e6f6fb805a604641d25d6446579539afe363dc5493ef3c4ecf865dc10c968ba082c631099632cba8c7711e1988a9a08429d80cc1bb1f5ce876ca388d016de44a5d959ff74a21d41cc94f4e014dea2852b4d2891e432365624084c8822892a4555b9840ed8142cf81d8262a0442cfe78001ec1805bc362ad14d9155b508d29dcac3990ea95cfde30fc266298147dd41de31056d9537f511e74a3190849825035c9058e29d6be201ba79c44d5987292334706d3c811d9374b4448e6a4ccb55c12cfa54e794d4239363c39042f78a0612779718e91e99db44f5ae18bb22a5b522280c3c85788fdb2ef0299a5898823d591866d110117b527dc72aac6c7640c8f830c6a93de9110dd07e440af03c9090c4b4c69ec85a7b3693a10e35c6415e27b1274c397bdb8f0c17af2124ee788989ab99b69f8bb9e7bbd89612a20ed2502e4a85714c4def2a3b9c47c87474d9d76c79d28d2d0e33feab577699ab39e2a4633ff7c82f0924108f9eb2400b1d17931629c6cbcefef84ebc9c47a079c093e06455579789d3ac6227a91438ef2eab3376d174c6eb6ef99aab8033661bf9f4a50a91455e5e2eb7f5f93661873e35e31049f3e6a4e9030f2226d02d6045b8a018c945d64597b425b9ca59ef40bf41fe70f7b4ebf21e52e7570571fff1df8e8aa14638cee2230764bcfe10148b1c761658aaed5e7d1e9b88f4892a2c88d1df3a4c212d66190b1ecbc8ef180d00416d64f8aacd64a51934db6c18fe779c939495561e84ed6dc945c5994114ffad301cdc3830241bfe864f5785ddcc143b84892c0de88a915835305f906fcd3cae780fc34749de15a529dcae42ab41144808d14fa46e960201eca8d000ad0d791a9822428d1502dc662e0c020190d1b8e10b1e2256bd408af18282f349ea25a399a6851edb2a9baa0e8056832c398e8f2b32f2a4b126fdf7099dc5ef7749d484830cd32f26b2e3457973e3ac5ca7bf44e3497f13a7601bf8b998f697ac896b97d90c97871eec07187a977c9afed5a2c6a7552c4a28ae271443b5fceab322f4428b57baafcf5312187d1de9c67076a24e91b2c2e12abcc7cd68a84c11d02b02abbd32e6b38861a603465a986128ec28b78bb193396a97816ea827d81c354cbb0de1e95a508bb0085b6feeb89e448516383826a8dbeee41ee88dd0caf2f093e19f7a3e19f634de6c3f231a4671b19e5eac62723411e3d832c34be02429a18fe766a2c823cd13e19f42cac5de47b00f2016295f35356a4dd6ce6c5ada344aff510353a65e73669b14b009ea417b64d3ceb2a2166cb2c96a1a47173d0320e9da69ee249b8cb65ebfce7c2c2063db3ed1890f11a47bc6550e154dc548b198600ce6883dbfb729ac46dad89d34ffa41f985ec7896a2dfd4a4b20b2a6c360f7b34b4c37bf608e2a6dc82ee6d8bd1142c9614792cb517353506b8283233f684987ef0a52e9ad5ae3f9fbbf2cb56f7165e9200e378f10e33df68c61ccc5377cab896aa9f2ebdb7ccedf50b46a5e3b0a221d2fe92837bd94f973f75730273a699a6582090b82275c7b46884a04bbb97f139c185986259c377fb439445417d9b4598c9c51e180702de72252afce7d9c4c5a1802a57644ee7d8597306d2e990e18cc02ee0a7a07f775e8fb82ba351c79315c657e18a469ce358258974df0fc4fdcc1a474a932b3116f4c2fb69c9a797eace3b8571de12f7bdbf843ba3e7631099036d80e76717eb31c170c6143309ac6c66ebeb888814d646522c3e30faa313c976357698167ba818c9420e0e99c99f5bfc9a57ee00548d352ed2da514eaaff1b8e6bc8a330ba0c7c1187033d292d0b86b6d10c0758f6be57161996e770787b10663c3119bd192fe8bd0acc00d492fcad2f4a7368018c46bf9a7193adb199b3aca84124c525944b629b329d235f86d119a6c1085b2bb96650fb5c46ca04a6ac7d522d82a003242dc210bb16f5c6663025db55c0231c6ad1ef226b99117bf9d95a6a1ae1ed21dfb8638868f4e0788af1b6dea8cb7b37f22daa0725bc3ca27e5a890183102a93a093e1342a9355b42d3b2c6a82d69e93348d90417596098c6fe0ae3deb9895e78b1fd6bee5130f4a2622489d1bc1d4090ef8b2f9364c885b1db70ac939cb58f2eb0ef9eeb4b9d04fa11ce052fd2478246e07125c8ac20138e81cbd4a2701f4b0f8cd82c6994d56c5eb9484ae5018c4e748c3570131f5d81e9072cd7434de27adef92b02f5087bcad58e672d7c8c3006062bbf418149617a8aaf05324b17cf1bd75f612851ac4f226b052a50d501b049289925a6a9e820977511df8278c9cd2f7149d0ac8a3453555be4885266a70c8f3eb525c3264d558afee408a51d82fa9aa4b2b046f47a732a3510beda4f690045479602a1ef4d0d7b20df77d330dbea3265fd1912760045ec82f8603088af05ea586e189cc298f3be6318439e041e6076b2877a0bb20998114365a14846437c219ae60e8d4f16a40a60452fed68c5751a0abe6626acc3668d39f648d7b9010329ac142022d1a87c2b18d22f8ebd4f90fd8cd851048053b0a7d3a43679473dc56d1abddceb667ac2d7803c45d3486c0926f1cbd240722c281e4656963cc8220bce096adda87147a079d9a3d315666074195cdc208cdc10fade44043807287704aa9f0879d23375a86950b5ead021909f5401fe165bbf4d17a1deeaa5ab3e5184b8caaad70b1b803286cfd4c3e0d5c5a073da225793fcde06fa466d2427309eb7b0cb418ea513127a167ed60285d8a8515df5d840bae75bba39b5ececd3578116e0c2b0245452c47fb0f176133cf5deea12af8f6802c9e872e882ae8b2f5816c07e82ffb00c535b07fc54678e96d7cda8dd0c7652ae606241e47b019c7c645ffe8bea9aa46f5f0087c54282d14c46811b069d2885d4965c2bb8c4933698d0eebbbd5eb459612431c38ca37023ccabb84a254461f179dbe353df6517a202e1d1d3c741aa074646b10a8003556d55fb62a2ea5f7426d2fa1ec253906798051284ca826e8fc9f4e163c94e18c7f4bc00ed44d548c56522fe1255286e559b7d14b138e30dcb8a4608c1ab8f6a0e3cd957f38bd2b2f977fe0b5dfd0cc648e4b035dd7b6f267fb271ca7984fe7a188d30a0bb1a131a8b308443d9ac52558c55940416eb70a305ec5d7474df0671e644a81f19a16afd01f7aa9a809b5881b729dd2a96987737739b76eee3856206baebdedd239e05cdf8005fa0548209e169dddf11109fc73eb520febffc9565525a115083abcc13217dafd002d44ead9e12228448807a6189430d9dc04e305ec9c343172451d4a710cc2ce1120a2444191a8883eedbdf348438bfdcf1a3edf74f0e066c508e09218b40965e0af32479612cb7986cd5dd6583550462004fc28201689b93e2e998e98395df8291364e84203aa3886d048e8e471884608b781c9c075888278a056e89e00b0758e2e1394d1547098a5832d0ffd4f9e0fba53a9d691424021e343af3e3a5012cc4d860a0adc6c2f30a7ac5fa5007a09341e73572c094a565bc0b952c97b1dd0e4cc021c00beabfbe7c4b6619734dcf319afaec6dfb589010bd1f978fca7f95e0ca370e7bf0d4107f7d948fc3f2710b93e4c6e77175dc3ce14b8936540e0c025cc8c155bb43698088c5442e6bce839c7c2e83f24fa84131fd5789dad6f8a772319576a28a77b77f5b8c41689b686ef7053c0965765265788c57b71af37f62b50cb6b93423f73286811c219a60515e5a7d7017f84e125d20367ae0b634f71f31fb3f7b782623b9211b07a54873241b4120b09e1489469c469d58b52aae6ea19180cbcfdfc509eb550c755fdad1ba0aa1c69881ed5410d2141f094844f9dd572d356def8af4a36141a0b3e5570d0986bba903a146c0193ad218b3724cd04cbe8f71df9997e2e6be65004e2a8b361203ab9e97f05926102020c62446085399a4bdbd0b498cc2ed4802b2595d996500090af7ee8ddd1f3949a4dc60673666f891a7827f95db62e70f8f33508f757f5b547726d80cab92508268d37d6007c424765faa2629700ef464a787cfe34bdbeabcf8a65cc32cc839aa9585a9f339e22a0809408bb71917775b13a27663d279658314eba7687687dbc409b8aaf455445e3cd302109a1aacd7a3dbc7584b7a087ef4b50e5a1ca54c01ca2ebf76e5518b44fa10e30896ae994d3533b3ddab16225ad9f836dea38770bccdaa44d95ce295d6cd29db106d65506bbb282f52323e39d8dffedc7156413f9fa6d6c557949253d5a8c4d1ef80ab381e6ae906c5c25e0012a76c55caa51b2e3d46c46121175633ab73bcdbb2113d7337ac385fc3e27357cad08375bb463a9dacaf64f2c1da7b6d3e5c64095d297bbd30a0046f4d068758396f880264ce38800e89bcd9663063dc835f209d2909c89ded9e27788b18ba46f90cfdb0b3ef5392b18224c65427dd31099e61af26fdb7a2ee296fb1a4628da8af42cd51994a79cf8f8c74578c80a8148d3e7a98224e98ac47f3a9629c00e49268d2a0db0ce9f2df91d0c7c92b5f7a46b79ce587d2d906f11c1a19af0765fe76801473d4c855b06cec22723c802869210f72e2b86d2282823488df88b6e56a255dc9d14f2770085afe84f372797322e0901d9a7161df9720e9dc13c515d5835f22205aad45095633ffe30786f8a5271f51175d4721c04aa53edacf70d64ae26096a3f0bfb28c04b8562733f43a082282e72af011fc16c05cb881fb21f0992b9072cc5b82295c6e50782fd0f6bb94baef4fe4a89d46aba8edc05b23f905b46d30a39ef76d4f53161f01f6d81d19dd7ac28a20d2d3c6e1a6eebe3d2402f6723cc1750dfecbb25a31d8a3a33dfbeb878846b46c3c17a34c88a17e58459945c2fed06730a281a0cca588f44ba86dba7e27a32bd0a0ac0df62189135d7d80020fa6b9dd462793d9cabc31e3aeda863db648e1f070b18bf3efdca556e7f094ce73eb888bd7bac2ccb3c983928532893f1f340c52147592f43ffe1e24ec7fe55f720a56b877bc447e335416720fc34cfb92039ffbc01bfa1f31065caae393444ec78a1287ea0dfe7c447f4c7cab5814c9b5882b294615eeadc918442a9349217a4004a777cfb69c85d4a402c9362b99dac80a3ab29bfd6e82f2c3f0e6c18b87a005ec525976d0eef785496bfdaec8fb4178efc368e39967aae6ca711ac5c55b80731c74ea1a469db383dff6ef695ae5c98f0961209a730ce4f8b29f774184b12036737a06324fd2ddd6c7b2348c4fbc64d6c4cc1a9f02dfb1f52698d928c92f485e34f4212bfe71c3e64ab03e8c8a8519ed349884b212db8a254ac1f8cf5126dba0470a6302657f8b1bf83f423413ae226224dffea932f7a69ce5e44933167174cfcd8da26f9bb4290c9af3ecb84d0542cea6da1aa2728f40c34eec6da0007639dbde0429a81b40ef889c83cb95f58d77e45fe243c96315a9c3a9d05991865d0a1667ba547b5402a20e9cc16626286eab68ab00eab38ff65f15c95788249ea2bccbaf28be86338f8cd21bd8850a1f61565169c4ed7d4cad214022072fa0ab61c5873c3ddced126cb63e50395fac91c0d7016204789c7bcbf94d25eeff37b67f3d9db24c27dce67f2487ca077a84293196e8a5124e24403084fc2d0b4e17f95c377d6fc9367855c70d80db8059002fcd1580e1bdcd1d6a4eaf3ee34a9f8f44737708b428df131915a1c6d7e0684f0d8e8729bbc1eec9f79a1db2b3f8c10bdc09d15b2847c310d23d9ba4f5c6b478ab69b9aa853debd54b814c188df18c256c16ba9ce63a2182ba2efa64ef14b7a2a61669281d21d3b95f6b7ab29e3814dcd321e1fc9d383085d221417f78c182e8bcb0a4ec48e1dc3b2fbbc76374103203f76c11dac6f98ad7f0e805ac8b72930e4db98f16d21cca92a8a03499d0ff840cc53b6971399151f34f390fa4db138608c184ac803ec9861ab54ddaadf1e3b76b1821423c67fe38aba49f27465d7b484557312d167caaea594e537c220e7770fc12960c57a8c2866ee75eb0563ebdd8a26df19ed42e4f4fac2f912a618652a8f7240037e50845f878dabd3fa755b6c3be41fd6aa6ecd8b24c431eb0b5f41f7ed425701ba1c255f2494fad2574d62f40c2c1436b28b3e9c0246b1bee77d905d818dff52d87709e65214209a00692da878b432339e509d7841ad1fffa4917ef428af93279785b574bef2db69e473129d0dad97b19dc3cf4dbad27a845d5b4f71ad1ebc87f165458f374667a63b5dcb6df9e59e2a0424de3c2523d9d7ba0b5fc172cfd516eb5cd62daab90fb86c898ab9b40d8beaa8a3e1fe9cc9626aea1671fe17e17bdc6f18f371ee3136a3b571c04b9850398a0b97d72482795397084aa79ca8808155774ff5b4c610dd289776ee9547aaa3023773b0109e1f126653684ea8718ac035a1b9567a14367b2edf086c4d89e5b58796a412165e06995d5b2e9ffae551012aafeee4cfc2b16bc8670bec7ee17878f11e8c4d8a8ffd2eb4d456e19d5713c705b538458863ad2fc5990276c9b1eb651bc39e862d800be780e38e8e8789307381ebc0567ccddf51f7e9c04dc9ac9ed2fbb6b6854e5bfc8a6bcde1663062f43cf878c824a9428717d136d1e98658b7fbc7d2a44322d9411d5b835783acc900f89a460c9bbfbd7cae34bb1b20e3b06542a8fcf61b6e9d842da2dbf9b98c45cc4eb242a23fa53870e4bcc356ab35938cd5763810d7ebd604df3ccac79c2e5039409476c6526b0f7382986ecd060473029c129533defc8744ffff430d3e1028a7f6bafaed29e04b5018aa99f16b5de82bc84d86477a25fb10089a37aefc6ece3dce3ca82748121b3c0f9f9b866ce92fdbc1294a6455314c2f6611efa0d7f6996cea58e806624e656606ce458429a9cf1716d97b1ece6164cbf8862793551a3f92950299d018625614d3f15b32760303d5e88035c0455df0189e3e0100e9f06643a22f80c19f30bb1eff54b2ef586c177463d3d90ff915a692b275371924baf0f6eba691387b30abbf8dc44c63c7783308e2d672eb3eda8584d1ddcb69a4c2c2314ca451febdfa9d80efa780c5412d6f32170db6d16093ef00baed5b5315473e1e1fac78b5339313c36ce8b84014af5ead49fdd0e24b25f25c13b287ee4cfcc4ef77ec7e5bcb4892fbd3291d9ff90d45e28260c3bef084e8ecb919bc6837e66408471344a6a031a018818c219ebe531187422dad8feccf30471162b0492e0ca7b7e2bbf710a9385792a9c763fd7dfe7faa8e7a59c695d4658278492808310c61404453e353b1ea72988f6586de207fd4d2dc7439cc5ec9308dabc6b1b24b4533d883db68adf9123f0596260f01a43884f22f2b3500e3b7830b4679ff634926984a0effc7b403300f24068206201809eadd43babf4ee32fe4733c8d2d52b3e73e7d7cfcb46fa81e3488f879cdc75d789453d02bd69d5cd423f4c6eaf73b41eaf9e688799dc6e71af2a7ae4861de75141ff43471eb9ab6377678b78074454fc7c15b8c31c1eb0cb697d33ebb478ff9850ced6aa1b9d77b9fdad91b8ad33fbb20cd7ecff4fe82b380c8866140b91fc1277354b41f0b475b8a52f8985f19ef3ada1b5d8bee010cd5ccbceeee27efa53768dfdf838a6eda25a9c92568f209820adc335b44e71ac055575241b7c4f4c232afa279ca2cdf79b686a33a85e9964ecba99e4467daa593c6c815b85a6fd7df35badf260690b8f516d1b31a8420c40069cb984e87636207324bb89dcdeed513b293186338e589e6f3be51ce66f0a8194c908a27fee8bb916870180b0a2250acac3baa825de1acec818c304c986eff615625a55cfc8fb3241ca02107eabfca55aaa416a81c35923b8fafce39343e61472012ce0238b5646a0513f80bdfafdd9466607c3b38a016573622cb8f82f011276d2343b19e20c5aaf408835722de5d3d0f66612e8cc1e6f8a4934f81bd6ca85af9819b29991b082d3a813c1a4f6c6880afc790fc8c25426b49fd3a5202dccea5fb47f916e06de7e18916e2fc652d9812dafd0ab8737c5943dd0230d5d7b92bbe903e5f899eb4a1119f530482ca0e6f380dd23234af0e8f0e7886c43e9462e1b7e4cb56d8eabee3d8604cb4834446a3e3b0f3c4db3c7e85d867c6c817a96af810bfc85e5211dc8cf4de23dee56a0e637cf97d84b08f3e8b6371cc616217d29fc50315d17b506e2c711acc6b7306a4e2de6b3968e5553ce33299d1f3a7078f21059accc9e20fea68620dc3dc24f1b95a67c8c8140ab68d6ac9212fb4dc81a62a5beb9334deb18000b7efcb6a6bc97e3770fe6f0e3c0578960675bf52779ab2d3cdf3c36eecd05357a28976e30cfbf678fecdcd28c805905e37512f7be7ee7c0a1015b043467cdec609ab7a7eb001e948bcff324e250beaab0b15306a605b6f3ba46ffb642d38fd4056a12bad83da47dc4b14c42c02110409ea6ac6ee3aa0dd9de073e5a3da0360177492953b9ea0ebd3305c08285c1bce6c36d459d8778f18b09a4489bfeb10650073cfa2f35c8743d6a548c112dc7164521d32b8924bac70e88194570fc39f56b9b480c628ccb7c99b07194727580e1b1ac4b3c8eeb07e6da4d23baec584fb8bd1a91d933ef445e366355baa046106b0dd2819b4244d579eb9d692cd1a6fab211a89cb8395cac8553509042acb75a8125c315fe9fec5cb9fc4903910b0d5bd6a684e7b1cc8ea801f4e7e8b59f3eb8bc8087b5e6f31e1aa094056528fe0f5e1189906ee311b2dba884741b0b71d2a562481cc4770334a607731d11e0c4fbaae40f995084b91019a1bb04953bd59ab4b3186a256f10cdb448e501475ad155b9891607e84c561d129051b402c2867a50393eebd8721691b77b4f6625985dddcc7af615481af5b40809fea34966af1170a9c9b7fd2f416402c788f20ec455750856d475456f6b093ac0594fd1c0049b39e59f34c0b11a7d93522b37a6f60fb458c7780975c5ffdb7396cc076989140082b2648299690c3944b8114202de52eccdeb670a5568aa3a4b73dd815348dfb52464fbf7adc66380b025158b863b528e196a85cf16c0e05bb7c73513ef4049c33880a4f5f62cafd85830d08f18562eca42a1c3194ed2ea103d409bb28679f935b5449783af4d8efe66fd9ce38613836a321bc70e3edc4645e7f60e7b74d695d6cfe48d5f1105b90f5331ca2a5275acb8462c334ea15029831abf31650fccf68e69de8a7481bee90d3eedf7209922818dcb2ba8aa6660761a953c0c42f301f6d304c8b89a473ecd4662e71a027809e4c66d000159d57deb13359fd99e20ef84201556d2c3d96a13eac32405b4d356a2183b9e04065dfd4389c9242440bf4ff05402f1dcb31d56b3c4137d09ed83da9b9e65dac16b4156d98ca8412b949954813665c060a4b36c6f14358c666f42184909a2be66b1b0eabc3788d9fc6000b1aae177669803753fe4d7b456efceca13cd0aac7050b2f8072b54f8c917dbe64f35201aa32edca5132e3cc3330fa807a45c761262b0ef0282942aa845dc6b325ea8e79e4872bd9ac4f90f9202068daccf7247a7268cba66c4db3c6c3726d1d7ef532071d396a8a67ec867fce284950267ce3daae84d9b0455a9dec07225640cbcc975e2df377ff1f95dd80b6a1431bc9c25edf6b03002f3572065a3a2723bec2e86592f798c054c2495fdf28f5c4179d116113737c6415f09416ee0c70f828f3ccdea92fc9cad0b5fc1e47703b2ae97546144fb389b3ca7ae1f3c78fbe684b80b1a7c06c8ead0352adb9e91a448ac00ff26c6cfb7348def7d6bb8e2af27935ed3726bf2546e6844a9c6fe4497273a61930d8df34977c731fc7f926aecad32b0cea38800c8781d7b1f3f20306c4b411b64d2a4b36972943008176b4e70c970afd07b4c4ceebf20805033c1347f9e0698d018df2ebaa29b5314680aa8c4bcc9593c0175d62cc79f3c694066e7bc6c82fae7ddab1b65227357f5bf0458fae828593e2e6bc824ee7df03f10919c9399afbcb69f55b609bc1c7f32f11dc8cb837dcc9ef9c68721ed7d3c0edfc7c58016a30c84272d65e079a450a35e4a236c7e9abb8807deac22448e32f89ea7adde7d75e210134a198cd011d5f57c210dec9db8cef9e52ac4433eca605fbe9aa0a01e6d63f009705fce002121298d4e9ec129841b0fdb35edb0cc7a0a27ae79a8a2fedca948b9b5d74c5bd299768bceb6d0970e4070271c76cfda9f04cc8970066951cb03a039bcf8bade7bdccea42306bd423be601f912655eb694e1a46212473c69e01ecbed4b014399a560c32b78b4440884f7e25f18b7aee657f83be4c3c36899635b2682aff4ad9d7a21b7a37dc1f3fe173ebd171b2d7ebbb52e09bce99bdbd909778b4d3fcbb96bed335e3bb37d47022f120303a575e5e6c93ecabbcd3e0162ef31f2c51402cc7dfb252a9dc80dcc7cbcb710fdb405cf82c50eee71c3402dd615b92a71b85b3ecf27fd8b58e5070e5cf221465fb1b51885e07867fb4e9081d19d39df27f800ed967470825bd6ab12c62ab2215f5d06b5f696c4e9748bc6b33d6abfcfce6822150697bc333922b193a8501438c5430bde500f688d57000ecf2b52c3d4ca5e80c304165df8f505f8012da15cd24283d7ee9e43f58fe2e869f738c917053e2444d4393f1430854526d5dd2b440d9f7464e07d65fced110d8cd1f29592fb11a5bc12ed4a8f43643b56472545a5f7d1fb93eec407958a51200d01da42e431d416241ee161b644bb4be28d276e697aa9357ded531341c91c9247dcd2ba35287deaa8aaa1cf29bb71d4fc6a0bdbfb7487247784f4048449f787c20eb48ab0504db365e1294d177c3b20d261847ca31007dfa3c15fec7360112152ed682a7f3d12cb8a6992fe0cdc14dce86d4afe0d113c6d64926aa1fff9e41846f980579900217a60e86eae4cdb45522960f3327ad9b1124bae73de41736525d2bf45f2830413d39efb6405411de62478fdcedea8fc85e797e571f482b485c1669a774044bca14ce636689714b0b5057e8ac1d759c6304d9955f0b84d27482ec7ff124764531b5fde45a6075779a0e4ffffc353a460d4c58b0872879e833b3c1c8298d2c2675d7b84c3f6aea9fa81e18b3510f8a23cd0cba403e52d081a0234bd18ea3bce98a7816a7505d4d9b1789fb47a03a09f214367ab98014672ae18876d55198483d92603f14bd610fa7aa54739a497e4df8ec0a643467745224319689ff235bc82781b7a5f5b4f2aaa84baf903c254aee43752e2105c54b87f0196e234e6d625e37b4469562cf97587d2e9c27a7b7e3023218bef38b7487b92f5c8fafe50363aa7b0cce49d718a927d8bc45a15a8a3be67c0cdf864ef676a5884ac61e41b0bbb4df20a833ac45f2e7d3914f5edff744e9a91944a57e04247d0bb6746b7048864c52234b562ad953e18754e8678f93a6be375902467892435303797854a693b18e9dc2bd86f058919031afcf83f5912d5b2a23c419573ba30f847054af757af663d0e32fbcc8feac88c45e603ff3dcb2c8dd7e65906cc600bd72479475179ee5912238a14dc04325198cb9512a4f4f77b723c69d26f732cf1ee565f01a0b87ee3df7b36fd55c0f55c70f674dd556a7e4aa1854b753f99e66739f71e7a9f4dfec9a798424631c219c79796cee9c72b50c0ae244919e308e4078fec625fa0bd654fe32c36a0b81b384c086ac47d02ddc80fae292b7a9e405ae2266b62e8e3367862c1399b5d3a469dac441f066452c80d1a4c93314d98653d81010b91a9feeda14b5cfa5fc671957abdf423b410cf98d2018bb5d339f4230f25d62a846b7181eebb3000eb219cf9c1b9220c963fb1c67d95337d1ce1a0520d9acdf5621903111e14570fa60807936edd299565db1da94d92c6a534be708005fa1cc8c666b3c1c4248e6a0c070b204deaa747a8c6c7ed8e0274186ed9f49e2b6357d9d3bedea6c50212526a48a473fc7fad3a4c0863b8fa3f7538c798fc74e4f1cf5d26375eec3857e33cbb4bd291c91c6945a92fb62086eb17f34329c4c977d1bd7278914afb44e0ce18b205fc575fde377109eec13ab2de984bc257db3542d5bbc3880d291291cfb5bee0f1a88b0a28b54150fd20eba5b20e437ec007ee6f5083b852f9ee04b60013d03ae0212d231b937d8eac88d34566141254c50af2c39b78d5beccad7f42ed931c8e6230e568756bdbba4f4b18c425440747f7bc8678db1894d4abe8b314e81d7c42e287cd7a97262a8003bc9cf8efcce6fabfdcc185de8a6a6698b58263b05aae64765d21a46b53fcdb4e817a76fea8e9954369b28a6cdf04d910d65f2f2d4f5576b2d5ddbcd5a0a0a6b543e58eaa8655e406dd5ddfe9b49a0e6251209ec92435c1cc1b7674b185d86a1ee430d2abab6bd5344caf6bb33f40ba64bf1046552ae5f373f008be11eb84fd768538f7945fac7bd3efb9f543e9e78f7e4dacafe30d25dd3bf452d741c5539263d1c09236515f24c965b56b6288e8f61e58fa0d1c996ac1b630dacdc7858a39afe5962b90ce0436b935c26ced12341eeb74b01c859863847a3c68b8a7d3a017e373aeec59365174416609693f14941a60cba9fb8928387cb9b5be5ebc77921817fa15839a367b57df9aea974c731dc53e3cc5b3380e4e4dd7e17ab2c7e707c8f7082ffad6f81c40e46fdd08a240cc319e8235d123fc91806e9bca2de9f174e372f30b661d94d128714a1b6938504cdbdcdbaeb5c2b5a90b6d9ba9239f1085decc5568aeadffa9fdc83d3184ba9269681ac76c58ef28225db13d6a50acc2473f9ce06c89bbf447030eaf7dc7927df237a8a1212bb15196cb272ebaa3e263c74f90ebac14740d64a97cb3097ce054a427154b7fa2a310d657e98343b3d429cbaa1f94ff1cc0c3e4e4957f0bef1bd5f3c4682f5c5a10f553cb91421bc006271b2239a4813268bafaf352c2b1b2c8c1a93f2482f913ae9d281677b0024de0d2483b91e6475e4089a797e8d1fd8caf7948325049877fe838dc36430c0a4bbc14a47e22022d3a63a60c5268952ac32f73a02e98c10262500737cd57a16b1924d7c49846566e0b59ebf42ecba01471fc8881a0b811028e0592490ee7d4ad3967108b9f70f959319b9e35dce850f1bafb234db273512885a778a4e4023a2f82785920ca69351da105cc0a3a36522f01ec069342dc341c26ef780e0422db49df277e8ae260793986ac7146a0886b7e1a2b373840db8578099665accbbe30d01a975854fed7b70909ec23dbf70f70a38ea6b664b7b5bdb794324919f6069b07ac071bbbbb3b5d2aa13ffa5aacdbb84b2016b4bbbbb542309eedfa50f91c853485c9d1699af0db2cfce4d3b271936a3eb229e197e101fec769f056e0ad5f155b6d3cb5711be30fdac21fd4c31fd485e7e872d7ec4efa4abb876934c89ddca91ae1ac6d388817c40bfaf520ab05ecaeafafb46da6abd126ed9f4a8eb330902368dfd5e764cdb65f676e2b4eefb53a60dae4a47bf2a917fa54ed6ada0294edb4ab9ee3c238ce7dab1af9dddda21db6c2a9e7dc04bc5160b2fd470f6e1dc79eeefa01b10e0357e0d18f4d0f42b825b90159cb8bfded7cbdf9a5e9c2764a6acb861322e444949ea58e5482b8f3bb4ddd0ab19e9e4b427e346ab76e11fefc848b0a4f1167a37ec60179234f0e7c935b9e64bff4d234dd617d67d2cb090bb3bd7a9a318953f0345a7b41e3898e43bd2153c8acb5e8defb334513b599e88d9d236ffc1b9cc8bbee322a68d7f59b9918ca71760313306ab74888c28582c78c101ce71fbe0c7f5cdad93dd1a57d437024c7e5f720032f8d56ad0e360801c5108d1ed1f871cca47b8c18325630d1166c1f91461a5b366a0411e2a351bbb565b76464499e36aa1a79790299139675454cb6568dfb6c467e328c697b27d268db657d8eeba26d9417f98fa3b6514159b4eda9d8514720722ba887b6bdd38659b191fcc5979951680ebf1b3c91ddb23d7fdb657ffe245cefcdc88fb786687cda292be538577144e32ac7591dcd4de0212bd152f94b295cdd277ff655f6472550a4d1fe472e559a295cc51e9bf5c6cc1c17c53bc4a757852e150483fe8de270474a35a9b2f1e107291af664d1b242ce5f464d6292125c22c317077a308206c50b1a25dafe4424696725ccc0cf81bd8d5f3e538db192e74dd79c0a3647bebf017ce89aabb9259b234f145a348acbbd0598f678ffce4a98819f346566cdd9d907f6c7d3022d948d72dc9495e3dca5a4fcbdcadf77fe8ee53c2352368f2ecb6ff07724bdb9140a42e72317f505fe5209c599fc76ca71f76b9846cb2eb1d60f5fcc35d75aab688a60a2473b2ba0dad8fc0f3be7fcb99e2a82e8f086082a80dcfc363cc9e2d9dd8840d299cb4f42cebf9481767ec169e7b74e9e547956e7f5ce3ef03d138075aa9fbf12651993dec62bbc60ad75c3915c80f9a1775768ad245b5aada5c3e82dad6543db7059261321831b74f9f7a4225f86dbb849e5b9c28bf06372856dc5f7d1a8750a4d9b091b8a1cb4fdaa29291b6531fe0a014fdf3845709c9390f04f74d135d717c16f073680a8d42efce2eba0a43ecc618ae00ac739390e5b5d0a9eb6eff4e474936a2feb5c3ae9edfbe1fb692ee95f329768bf44feec490d648cc55ef6636c344dc8b2cc9ae7ca9fad1ccdacb9147382dc37e1b85aed06db4daac0344da99062a2389a33213e310e7c8f67bd24fed2ac39d1444728b73fced17a21d3e82113b1d61c4b431fe26be692885faa7280f0a12b57fb6ba2251f4d03233e6d6b8319f4978e44e3bd9d3ded6b254534ed78e129456183d6163fe8eb6c066dcb71222dcd1669691c29a40999b49ee3c44f7145a334de161fa56d05bd962385e70d84d8871ffbf044c9177af1693c217334615805e1940b61d6dc8a2a8dd2b6fe26fe388aafc5b789ffe2d3b6ee587fb4d36db63d64d65ccdac39d2b4558e0b65263a8a6fe5382efc6c8e504e20bfd768bfd2b3564886e652284687283bfb98e883a25973aeb71339ee9691509db3094f72253b22dc0a0b9464006d7f0fb2b67f083532f62bc6dc3c61e580f079cb5fc98c89fe55dc4056a2208bc370c9939c855d9aa63b9c4efc160abf95c2401bfb8c3c6dfcd6ca91b0e00fed088e849f04fc3e410f5c5039f29632d35af9f9e9e5500cd1687d23c7b1b6d930051a8d562009395630d16895f3f5c6beffc54bb6c90ab14f271fada322dd205598f436fea50d66d07d946238927e54c9c33fed69ad4dcd25c761dbe4383c62e3571144a37a63cc0b8282a055ce2878923bf5ceb037fb02a5d9ddcf5e73e008a3da2591e3eed7fa1986efd8f5bf268d3f0651b8146c2782aa442b708e3b3f6b8fceff11d4a2fb46bd0bf6bd18ecfb44d5e886a70a20593310fc330a36132c689b2e39eea6b842e448e692e36e45a19e29bc34fab12435cdd5d5a6240b430f47d299f3cfe18f4258d4e9f4f424e4e9d6a3271de82c29821a3d3a72172102371ce72a8268b75706dabd327cd4b6ea238a8ee3985dc0f5bc1678692b8eda566f7833ae38df7bf5cd2e8e2346c2b7bcf7de7bc78d32ed7be2a846f5759ae68cf18d000e19598aa2288aa228e6b7618efd8d52ff64627e1bbb6fc5fc56bc6fefdbfc380cc3305fa86b67337b718833c6f95e3b9be58c537206d2fa75a41cfebd386cc6371c69fc7bfa0da5ead5abb57076786463092a2e7cf16fdc24fb435320e05c8068df66d33a6d40b6d9ea8738c45deb18e2186319dfd86cc6fd525b8bf11886a28cbc38ea0b12e3284dec458e2356469dd1f5f3ae3bf8727010aee8a2288a385fc763b15214453126bb5ba0b654cd88c566311959567bad346d2172c9b26e71da3551167605f89a0053e49055adb5d65a4f250c6254a31573fecb96dd905da8d2e641496d14c7c0a046b1b36b16e0112d4d109551b4366a3341b4517c64edd5435aeb17e7501c6332b29c9540b41b24142494660bcdacb5424354d6cd92daec5e7c1fdfda2c4469cd0eeaad61dc1809212284082d5ddc04113142c48870cbcccf08db085bb6020466236123115abd2941a28496a99c8136684adc4adc765c5a9cb440956559de4c6409b6a1a18d158d46a33d00010427203891e5ab24d58c26a2f8a88afc899ffda86215a56b686868e8cd284db836c72c43840811c23ca1ecc836673962c48811270a2b72463665489020410205115179bbdd6e4411e0980d6c7613483041961cd8489d3871e2c404b81157842bcaa2855d60e38402050a142954e09f9f0822882002152bb404f18ad2b2316261c4224b55162cac2c4f788a450b162db6b2fc18b75a1cb538d258472e8e5c90995387cc0f061714b8a0000b304b2a077ffd9e28a880820a309586faeda8c0820a2c18b174e96a2d5ab46861c10558b6c60b4a172e5cb8b800695ca306a9b4249924a524a5d893928a104f09004a00e861790280172fca24259620630f4bd30b182f48185abeb0a43611bbfaae98c90ab39dcc1a213062c08871c56aa32519355f30d5d78231308881c1152157a2aef4c071762d030c663683d256af4656e458e9e3b4d172fbeecb8acfca1b3457edfae5eeb7fdcb8ab3d7aec180010346061a88d8d2a0c400030c30d04046882b324a0d34d020a60196b14728501b2dcb1ac3e393930050c85a2fa0ed97102cd1d57115ef03547983e2aa84e521ddc069eaedfac15dcf1cbe2bc08285f5a46ba339dd15ab8619962069df562b05ca46e9a36456abf55d93b5d62f95b00ba78f4f4ad7ae3e296f586c015a49abf8767ddfd55725081f56ba6bd769df5d7d5be078cf9d903b6c80d783cf071d51132d9a9330afd3d5f1d1639dcd087a191ea2494a4a1683608fae3b603561358de2054e9e9ec2cca2c7d7179ea2f1d71db684d9f7676fde5b7edde138dacc9bae399bbee54521c752046a98c8d94e145cb4c60ae2699b659fcb1c32138522fa96bfe66c8f56e0bfcd3cb241ff0ee269cdcbd256586cacb693e08fc2d1912b3945a47e68c00fd30c62a4f8d0a74c0f3b4db9177a2cf4b8768326c1916adb3f87ad2ff40fd52c1b36b5af55c4d72ae26b15a124e2da6bafbdf6ed676bad25c18ea3d637aaeced8c03fc215ec61d610ebd35854498286a77a5895a20ea3adf85a88508f1c5cb953d1462e8495bd6864e1b660d1aa6b6aa46fe4a3668b4a6d1561598c346c091f28f8f04f4fedaaabee8209bb7fce5d7adb3f2596a1fee5bdfa0c51d5d37ea2eb068da6b2c47a2bd29c344ef8fafb31ce73fb335ccce12ec0e7fc5536c04cb66934f5a53f66c6eadb1b7263a8265b3f38ff89aa8d8b46d2a43f00a50ca576ef2b38197c316997dffcc66f33fe0ea583dd65a3bbe35639f4b58da249e213b35cf6e8d95a5f3e8df58fe2eae68194154a83270c64c12277e6078cab903905009fb81ed40a449ce9fc41aebe65c7b52282c0949027238397ffbd4c746854955692c9ed576a49b520cc7f90349702ada3e09b3e66c66cd552217e1a70674d8839bc4648fc417effe18cab42d3e71414770d517d5c48999a00d59ee4431f1d3a4c4c713336072f66b37841062e3138d3e0aa221041a356cd0a043a05123bf3d6538cea22fda1907e287f945337c6c671e8e80db594986e3eadf3306ee8ebbd45cb407346cd8bf616341f86270b2ab2f8628133bc6f3c52004ab075d980b32908687281eb068b0e4cb17cc206ab7c57aad666ad0ae3e2a1df8624d1f151aeebde2e844e56aa492848a102a3cc8d85933450f19ad1e53eef0507d53cef8a67cf14db93285aa360549882940449443434343224648d9d51c478ef063030223515ad377b566d7ac7935e6567a3171bbdd6e0f4000c1892fade9bb0a62f2394bd334cd13450f28ac3a406495c3ae5993ca8b043eab2c1394d6670505575ad367a52bb2edea9392424a1c15e3ae3b80a9b26b3820da1d0868fb76d712be04bd2ff6320444df5df1b518db09804d49784e3a7cad929407c2ed373146679cb304c0ca439226e31b65bb78dab8457efaa300a3959c054dc391ec0f01d1beff060e12a4421ec8d19170b5eeb562eb45c84a84cb8dad585fd40d01196d3fc7c64938941beb1209df5af8e8fd5cdd86a6cdb6c048185faf30eaa3d7f1c5784e0eb3d8238b4c72fe8bffe29c31fe59bf25b630b2589e5041db474713b736a4762b0e8b18d8d7af8e9b7178432cfac56e3110ca74d1944974b9ab0f899617746d571f9218a6c67c65c863e85a22e248690a6a4aca8bea46470df5146bb213bd76c079a1071c1f24ef873b46bb920133e25f38e0262241576bbfc9b7080ab8731eb36d89c359d6352e8d6a1d9e788cd51a541bbc31c29979c88286ce13225dec0073a50feacbc6f8f378b18763de64bdd9cac107d5646dad16efeaab3284b6ab6ff7e7eec0c66ad71c6745eceabb8ab2be2b196aae9f7328faa8a662bbfaaeaccc76f5edecec9ae3b6b8bbbd5dbfb712e9acb5d65a6b9560d9f6ad93d55dafd68e1dd810c1d65a6dad750116c6ed83fbe78f0d0bc3b7e560c5e953560a9b212b510718e3108b21665ae1763cb5bbc5618831d3cdf20bff6ec0b8dc88d9b25db9dc7851e11f08e269132648d31f1d724c3a0ef4eeac80c40e9a30e5f2c39b2b3f199ac858c97f98a27cb859210c0f3c3cec58197c84ee1edb8157c0d8695053665169c255e64b0d1622687220b4d0c2942c577450f22457835821933619a2bbcb6840121bc73186f1e7a892d656afcbc7673b171836bf72572e305b9bb62b17183955487f3793aa514595acf580460d1b3722300209396c6abd2a25c9f0b36f929b79d7dc17e602d2085fe1365d82dd6ec6aad17d09ba687f5b6fbd3a4b24c4b3f364a80e0d3ea4c11798839f0ab87268d2f3a395bf3b7b6c7786c801032b87d2366784d884e17345a00e355f1c15bec082c8e40f4b07125b7e73803d622f74401372be008142ca11ba2b5a4256b48050b1d8eec7028a3547f2c0206494e7ca18a2e7c39e146ef084c91093a558454d368001b5c6d1c905097a900186d93326b6ebcaa307a90b083d674a90bbb02b16402c4160d8c84217a49284c74f9f198b383b23385dee0099c14510873c758ed04ee8de5015b9c1027382677692e0ea58d18172675243bc8e58f802a28e151996c75f171e312cbac2d08475b5d1ea62a355276b06a4d30356c1d7949f3a60ca5327248ac50a53c11f7d7e84d5e19ad17e705c50f1030c75eab4213500faa14201d017ac33274b713501a2822b06a83a75f668113c3d5a1fec8505d142c020d72d4f0f6049487b03af07de092c65d23b4e6821c2e8d884c8b18325567190a263c38a39553b523b5d4a681d10791e000bd6b1636636a227064e113b6fb4549e113ea0531c3b72c672778603b532bc2f3b613926e5828819aae0d8d1230ed1a173064e10692d4de3c30e13a471e334072bcd99dd8f900d076c677872eeb010733d00e0dab3037344b4c90094b3242603ee69fa3b7bc2ee3cd1b6f4cd0b23aa64c5b9a365c4bd394d4e395740cc2074a727c231234a056b38f384c1e315eeeca423ea188973e76b1c533d422098a3a5ce1da088795748ece6a8b1b3444d9daa3b79641200c3ce2f20cc78799951f3db2164933a93076bc4991faae2749da1d32b32e69e1d3622e640c151220aa55aca74c02755860d540c4029189e213a411fa4e03859615446133d2f2d4d36af5d4f8ed795295e56b2b6c42c8de7f9ec70a9f9bee86cfb4a3ff8c0d6f8e800b7c5d7476b7f23cc40e234603f3030303e6041c47ad452888d4109c150c72b1e9361d4aa398c8d8da925ced831ac02fbcc8058da11ece44221ad6adee2b3ac5a82b133ae4ab6296773aa0e62c92423cd498d61b125bad49919fcc68e72729898863f622c54f1888d2dd14f462d556886dcaba21999971dbf682250b6eb973b79aad00e3b161195c462a8588a1da9e07aabffae5f8bead753577ba23adcf54b186f13d5730295678116b21279cec2b0bb0637b630dcd62febe72a1aad2fee1116d4141c9464211396b36167f89b17f9ade945a3783f5005736062e7b35abf4e391c87c2dd637f84ebb4f1d7b44db751bbb3568edb6947b2f79e35321ad5e32da2aa0f58b9ee4cec934044f2576fe7b04557076ef4300208019b1de07d528567085ee43f8e5adbb62709a016f9c762db6b18af613c4c08d5c81f8f06fa593aa10b42974bc1a2310226ce92e8954ba12625774f0b4407bae880e7d7cbb9797b935bb2bb247f9c72290c51e54abfc03e59b3edc2b5479773f30644a2836e91ad1a39e9570f1f1fb64e10548e930477230e5a35398f26186e35c2250baadcf072e1c994cb4a30123c7a724be2a760ed1cf191bbbacf94ebdd6a8823536efcf15cd2b7c8cd9bad1a7d56a271cd65f33eb6a6dde1cd62a6f8d771004b6a5e7b317564a948dcb1caaaf25465ca676df5c78f00fbf7c4a78eab43f6b102e0f75fc07d2b33af6a5c1df8fdcb90f5068239016b57f86adec2bfcf9473f3169eb702bc3d97ae2e7ea6dc28e6cf1f8e639873ce39e79cf36f308a615ebaaa713ff6f856007fd9d7f0979d4b57e1e37309bf7f78d6b01f3b97eedb7734e4fd5b4ba49c4b4fba016b9aa45b19afaeed8ff335390855331b78b3fd636c90f1adb58c57d66ee19e687dfbbd26b212a11968833729b4a23bf5c1a9e3ee0d76b1284e6ff016dddd83be6335f2d19ed8f67124f7a60c5412db5dddb66f7bd5c8b16e52769e7d2c8c71d071178739ee626035ba5d38accae7f8bb45378e46efd3bef7e942ddd80e8cb45fab7ff5ea5ead39c2dd6debb319d65edb032ad5396591518b6abd58be161de1aa8c95c8f27a5b38072b9585ac49e2e7a4f0d19a68dea845f843b3d6fb186321eb66b3ef5f26b73932823515a8065dbd67c115da9509128bac24adfac5ad38ca67c54cd87a1bb21291f68be8ebde7bbfacb9512bc593fafd88f0db6abf2c07acfd72b3de5b7b3d7c2033e365aa0b9f0f8b4ef54991daa8deb5fa7658366adb356857df4eebde7befad26941e2119146574c62a1e30c658b635eb0ac330949156b2ac711cc7b2eaa96aea56f120f30005f5402b67b3d9ccd22c558feaa7cb7b7d545c76505090bd970a0b29841ce2f2f425f5b5436d6f2700679c7d519e32942f28c1f2de7b43b127fe72cee2b8a3f14471268e63ac8452e5261422bbe6b8134d406cc96cc422b7e8588fc2b3b1b4f254ab9119b2be59015d7d4f824bbe363a42ed725772571f95d3b65f3e60dca495a75d7d56acac19b72e8577d65abf15cb096ad71cf7fec2ed400c57bb9b22e3e5c3fa0d673787b887776b6d28aeb9f75e71dc12bb72ce798ced780169baf3992fbe170f0c2d3c1d8c5f910d38a9492c219a57e1df13679bc3b1984c26cb7e71c87e6af82fce19fb1c8c1ff0249e76c1d877f5e1eb6e030eba9f1e438cc330c4a139e23307deb8241e6306d25e2ce27b75a405c1a6d6dd31c6ee5d30767c466310fe04bf5f248da4e509f89730c00fed5f37befee1ec0307c1c71c8be16b84c460f4fd1a9627cc40c0698f7d4d0833de1fe08acb39df2139e76cd3b9e63034019fa31cf1c5376bb7968ebbb51c593b0eef30b1ef9b18f17d5dab3547c644d781e002fb21a119cb49cb932c1758cfd5c8d0a446037dac1926236fc472a46a8649d3b63f6639d2d64cb7edb3c8a22b55f954e4e7acac559e24cfc90af4e82125babe8b3aba06a006ab38789e70c9c3e58543983c7efe18f979e175e007217cd8f8386325016bd26c80eb8635519ae4ec13a5d1f59e25d83f3b880a044d343ad2b48241f05889fad2838995ab26316892fce992b34f9e386874e4f222f65d63c8de0886dcaae18639cebe3814268665f11cc9eef1dac21c69e8ce7b15c92379248fe4dd222be555523729636da99ba4b174951e798eb37fcf31cb7129cc68f4022fd091c4d3dab1fe5923854b0f2a37f47a609aeac32587223c8c19622467bfce6e1d8c5b66b7b678a2798bf83a6ac5475d4ae47505f5b62dcaa38776e50203da74a363565150a3e4b55f33270be3befd5990fa42fcad8dba14efc2b95fb685fd1bac2f32563582aa2ff4d4a4cca516d9a0a01b74dae8e8db59d5c83e465293c62eb5c8fe18a66a5b0cc388e538ebd3d6662c97d24866428ce83652766c74c4d278d73651fcec9b748bd9bfc19b7413bfe6c8b71fb369261e73aa88f0e1b36b83050116c0e08ce161c78b92b32f9a8fb341026fe02829d2464e14152840468b8f0e5082f0f203d64d1ab9d422fb35f0c06cfb637a35c7db42736f63ddfbb2a735c963ce792bf73ef3429999b3ec8c5879c41a79e3d6d823f36c06767cef79fb407cd95f51bceee269778eb33f1beb2645f1bc7d705ff6e27dd9c738b82f3babe3c43fc1ee9819fe5877e6e52c9cb11c676bd0af9368748c72a47bfa4945beb5e4672cac6dc973d47df46f94e48d3c728becd524a62e7532b003ca903d4ef6e4ec935d356917e121d826cc1a325d33dd0d088bf189314e83bf9c00a669ba428c1f2d6ccc09a9344d5d800156ba914ad354f782cf0dbb43220800c2fc9050ea110352f6d234259224a4c4f30465fb2341c5a604192f804108ab944ad354890557463c3b385520430c4d4c97a629100ab4c637db632ec26439c0344d7d1c8d89e1a933b6385322d5a5691ac5226c8c7a32da01570099ddf04bd3b4888a23b432bd344d5f48e104cf29827281e83304674506d1a5697a64822d594a94206bb603a669fa14019852eb97a6291222ae999a5e9aa64f28da9079eaf0d2342572ce99f180327592502a4d532244b6ff07d152b22e4d53a81349c8e00d394dd3b408044e68c132c0344d5f68b2fd1fc032c7449712413fbc344da76e66667a60c025dee8d1e264fb9390a3c7cbfdd9c2b21edf153242cfef4a8948f5d0b9217e847afadcb4c6428c876ee888b8c705ffa5696a4497eed8fe424b627ba874414ff49e2dce4bd3144a6bd923c677b41984bc9200f5f604773333a20a434a2fd913d6a569ea02f9353ed9de820c98051893dd4064dc21c4c787534fd327db5f2c32d2d9fe650ba112918f9f1c436c055d04db1f4bc14ab67fb9c2a5323ed92e95a6690b3ede6b669960bbadbc6198cff21c33b8fad2c7cbbea727953909b67f2d191085a47d05fad923a07cdaa983f6e5cf4e1d5735f4d79c8e4780ecf5a903e8655f9e3aae6a00bdec75944f7ecdc9cc9bfdd933e54813e8695f03e8696fed49fbf2bcd9a5d9039d2429fbf25c027ad92f954f3e538e29576721aad1785523e881cea52b940ae8811ee84c41878cd71f74d2cc9bfdbf45f7997233f3664f136a007dd068abb9a50ac4941b6967bd5a9fda2f181fe8698f1ef9003aeba59d34ea8ed9974cb9d264cabd354f3041b8a64dcb9f9d4b4be56982016a0ec72dba5f82016a0ee80d5073b3f2519b965f7340b347ebaf04dfa695b23a2928299d9d7de0405f9ab427496cdaf3045b825bdecc841ab4073a9796801e0888f6b4af39a07fff9aabb9d2b4b93ab367ad1ac9b8e20de348b3e664f9bce11384f3c61d99441fa15c0df6ad38eca416b5e8be973f1a34aad1fd9a1c4d93a263345a7d71548d925cd4a2fb24480809d58ab6d84034297a6ca1cbe816fb3e0d1b6396112d347fbe90a192bb8fa32609408c951e3d317db4e4c95daba3eddb04bbeb7b598dec0f81e9d27195dcb51a05cb72825db99a60d9a50f6456ecca35e5636b33bca18bcb5a198ad9cbb26682ab099a0db4ab2f0ccc4689b698b1da76d421b333a519e880980d04576861c909611a50d2f403c9af4ef8634ad927efd8404d033b68e138f2d0ed5813f260a2c51d3cdc50852d246a308fadd26321c8f020f4f241f4a2c3e3f2c261c776e5f2f202dad198f382171ef6a45c64f0c12465ce911e6fb6b4c0e53b218d0d4d4a58f8f199cab99e2a2ffc0866002c4990a61f350e105352a078ede878a152f2a51b42442aec861e19d0a21b3283162b6480390f7928a113f674c812a4c3a4e70757d3a58d6b091d0b81312d68f192b384ce9e137ed8618d111e1b08c6c9f98eed019acca8f42b59ed5aebd0d008000000006316000020100a880422712009134d51730714800d609642684e2e19c943911c46710cc3200cc39000820000c418439831489b520100a0e32ca85a864e1322518d3e7cc7c50085b6d2c2e60f1cf867e1375b839e4fd8ac39083d359421e4d15bc803b8245c8019b8fe3aba4fcdd87b1ac83aa0514c68ac24376d93ebe0a4f99a566b7ff96d9a11834f74d2e9fa0a25619499cd83cb9359fbc59433829139ba2003f9112383e8f9ce1adf5d9bf0c3583dbd7147eb149894110f54b2e656cfac8f3996b10437cdc07ccff3aea2649458f424ad3911c7f0006467e6803d8533f569b1a9a28c01739f9f7c31a8a7850d2c1136cf669088e38d7180e37f1cf93703fa76286f9b25113ff1dc39ad06e4651fd1c178dcbaf1ec2212d3849b59c926db63d5e462cb57304863fa3925feb0920bcf0af773ce3e4829655b89806b2936a76c95b1401262fa863980e823bd239847c1459a8669487d4959f43ebea3f1b240391660c7926cafae12abf7687b298136a3ea4c19664e8322646bd1aaea4c2d810f5b4ba099fa68ea82435c60799696266acaa935e238f3030f90a3e38d0c8d10c12c92fc014607e91af35cf4e488911b071b21b93f0d89506b5b5c16f6be86f50582498d8125cf8db9fc5068e9956e3ce9594433b6af8394a37977115ec7584c7557f5ed88a645b79b2baa72cc8f52fb579e905e2b6ffd6c177e4e217e6c6666dcae221aa5ca288d56191ce4db243298b8ba785919b6c11c8f76f36f791544101c965934e61b3d51871ecfe078a3fa79489b32321c1e85e2c523a2eee8972583c6971a72b3394b15eec1c769e89860f5b8b53c222e438fea32e31e89a06cdd1d4d1475ccb59f685073edaf7648b2e8c80b87f6ef81d4ce8ed29cb484821fe9c22162c6391a9909cc0cc5fd9d17212c46f016f1b172f0e78d91bd789f20db26cad7efce8e9faaa6742b9f884c77623efc0951c8b78e738c7b0be268d7d03bb5eb7b19110977680617fa57a69656fa3cae0a42855b77e45a06d0828aa78e3f5624eab9a9dee9b65a8b481c91700a698e573fda92d5271797318f5aef88c48e72e54fa3aa5d58f9e8e7ea03accf1e72ef8eadc347406d12790000019364f4fd413afaccabc5a559b317793a6e78e41ce022942036922319554855dac7def8ea3a1c189f1dd1f9baeaa779a894f34d8c043b19765dd9ace43d762c57663e236469f84b258fce0e5ae1b6487b194e4cec89e2a487e82f9648c1bdede92a2cefb45f4e286e35df230c08c792e77204adc82f09247637415a2234c1a42df540505b8e36d8df62dd0825029e51a9a51947ccd3bbe0f1f4418f4b9bb11415a4267cf233aa474d183a6044ad6f275da2af32335dbcf25ac2a346623ec65963a35567f7421c13de57e80026b41c6613dbeea6572285642ff41f3bc80dfeb3b197a47dea38aed8de44072759c8d970e6cf726337c6e656a30b60bab9f42298962c43a62d40d5f02ebf9518f1f457bfab3f3df56a811056e251c30aa8db6269d4d32053abccb80e0a62db97364c0d8e9f73e4e9fe161920ee784f231fa6604bcae73621756ba94e102b5c1bee4da5331618b38eacbaf6d040f5b5c3087c6e81b398f53de06a1627bc6ae04fcdaae3606e889e669332c375a0b7293638e5c52f18c6de95f85f741913d0cc856a0c9e3c52eecd389ddbb2bd6435191ca78530cc0158bdfac3c081a36e2299583a0c653784aaa9f0a3f7dd542669c82f8485951163c32e8c37b832fa8c76a527c9e9df7a37e5436e8b949e3c5a15d2ed0b5bca90eae0ae8227ddfc99234db501e91135d9c8dab7bed6f8e57538fb625b6b64cc3921fc2482c3d312509e80ce9e03db95ca61716f293b811e2dc085bacbe8be1c88e8115e462d054cba1cbea2e547505fad125ca62813fcb1b831d2dcf73c7a939709df45f08870e9c8858a6ac0cdff735592f8c4538be987fec6d77223fd5a28cf4d1449b98387b06d300cfaf3a2502d86b89a5cc79285a5398a0ccedc95198a4ed306b62509b9bfe7228b47a9dc7898b5a50025ad56ed8b05a2ca91bcccbc2d50af48c4b4acd750f9f5ada676874895ab589dfb8ac76422aa72841271d22ad598ce624af076194930c9662fc580c617f40d578c27eaf4fa22a94e3cbe5600f8cee6c77444cd8f9df2fdac2f770ac205a63100af720b77820094cd90f377d0049725b41c0e0390dd5c22e7820073d783137e9a2d7b4eac78d6174264873479f631af3549fb9e8e41ab7164ebd4f100cb7c1f91ce42564d3d9aab5cd0f847fe81402884c68c22e641bb31caa98c5b5c7c4fbc75ff64a241f470f7a6b46eaf74c902dc9ccbf130cd8ed776770a8070ae305afa5657224b2cd596a97de7b024a1f89ebea09ba3794135bde081646a51d27a158b45d4dd930ea09a2497e9313d4729df8e5dd632a509633dfede70cfbbce9c5d3da748d63b1892648b4a2b610e36e51de08249b36a3654277d52c235b64005f6b2a2c363cc35f8b270382e3e06d1a40a83b99590b1737174308d2630d4212e4c41a2087335cef1d8730d316310c373e7a308ab316208f4e5c324e27e6a00531908a3433fe61d83ec2265d87804f80ccef8d76498a376f70387ba2fdb5161469c2586ae9d6138ff39a9c9dd33536420fa2426bce31218314cc432d017f8e1391f8cfc8313842d8605cb2093aecf481f88dd5a2e9341ec18fd07eb445b0c0b93ab4a8b01a4693ece824fa8301a97fc683955b58d11519474e3cd9002dfbe59ee0e4e8c0c0b93408d360352d0e4c2c32045967166600804944224c140301cba2bec467d9c0e203031eb47892ae74211430c59e387b66a5d74469ae5a2d107a3f19f62206e0eb81973fbe0dd25fe51ec8c8b4d3a18a833762195a16a1c061dc2020c1f9784f49784af997cce48c6ce38aa4c012b327695c6420d661c5cff68f70ff42d64402b18f6f3550f2367f5d3a1bf609991393f881984f0ba06c81db8b6396d60189793bc2667c2fd7fc695c7d9486653d2f319b4b20a688c196843b8cfe6840c84d363bf04a0224218eeb211de098c039bd72edc5d6094edd4fd9f5bdb8c9d30f157f48ddfbb46aad8ea8c5db4e44f31577828c4924b9c27e15fdccf6619c5c0ce5c809ca2a2b20ef5dc298334b1ef60b38d80833916068b267031e3b8658ada190617107ac77986c97809691d446c37e6e019aea3ed66d41bdc11e11537a2b3c9edf73eb933df3a4fb18b5ca8fb5b5ed94997c4a8a896982c075ea4ca58f250ea3fd759b8e387a8126ea5f51a218386609f4c311cef4883f7bacafeacf5fe6cb2125736234620addafb6918d060669cfdff2280b31d1beeec443adf612b35706071952e9aff0b4bb04f7f6fe53c22f491dce45263a00f6a6925486995eceb560a1018117ef5f8ad314e84510d96181154e15343d56df15482620382ebdca799ec95aa08fe2a5facce89cdfed5de0ff332dce3a0f3fda92fa4352cd94507ba25affb71ff188a8ad96e2785ef1915e1f7124b5cecb1936fb02b9fc7a3ee482c1919d0305330dcd43a464e164075c8adff8480fd0db3310b24e1b305902207c32c237465327c264a59e7032494d3a7995bf64946f9fe88ea0db61db87d0ab115092a3d676bea2b9db29ec843754bd9fe6ea67eb941b5130b269fbb6a20818c9dc9ddd9836e97a8787b45e5ee6ad22617bcd49d85616b4e47cea7d8ff392e58a0a6e0721799ddd39a2433a48e2fd7a13145a86b23edc3e60c3351258b4b8fff8fafee0ed212e25fc6ac756ac7fb56a4fd6dd90fe5f0400767b84f40ed69b0f17a731f87d5b30ffcce1a986e2cad313981a8a1f181b963f9d4383474a6a01b82c28d31d01c0412dca8db08ff1c141d9b4d1032ace614367c3c58397eb475b49150b0000380ad169b40d7de487dc53d3393ecae4eddc19a5cdce6d4fd575aed277d7e811ea3e91978f4c68100444f6ef83eb9b147d29b54302bf121d54d199a9360d97fc70a43b212bcb002f98cadf7db8e62a3995ea826ad41185b6c64ea93592c6c22e267267a38782a6ad8d9e06f553a340f6d84abdb690771404ab48f856a18dcedba76ba46d0b9dce7fd8890d25c5e8e458ad912733eea12c410fe92fc4da493ccf5a3eabe0fa576d7e1af91f556d32ab517f6b0455995ed350e9a879a2bba8f4a2f923f50744bb4ac965a13d30ee72af14c54beb8329b8c066a76a76dcdcd9509a335b37726551192fe9d7d0d8d613fba06a8a073f926ce43a868eecce59d0e110a7a4a29e87a92302cd62b023988bf6d763e6ea20372a200e0866eb0123a67076efc0bb3166b8842f28161302cffb5a9b85422f9244e9510e310e5e6d11630924fb0ae5ce6f3896508feccbe7ddb917c9ad886af3a2cc7625ad5394cc8c97acdfb9c9c53e539d13f917c927c08c51a4dbc4ba00e9862a1808c7e5d71b94c8480d912be149f4928777ddaab2e9f1cb5deb1284f42567288ef7558417be93c2e7f5829f3b9c8c7de8e2bcd8171336e208fbabd134707192324a417f7c4d254bc4c99e80d26ad6a2e9693dc206ae1be7c3231d68515013163e9c696d7f876c265d23acba6d8449c7a0e91f462623cbd86143e40b6a9709d755290208092ccb33633218def7cead57b34561334667dd3c649caea7fbae0208082a8f71d17e03860033e47c5d4966b8170d5b59374c5864bfe155a8bd65f4130ad0a1413be2f2fee4564e9de7417711c262e10c6650d13cb087ea52183ab1f86625ea19b8891ce98c80d4b0d07bf351b9818dec45a32623f2f8f57991e125362571aa25e8fbd0b96f990980aac77fb3ab9a0beb38c9aea24a09a12f71143b0aa87f00126c4e9a2d095f059a76c7e5cf12b4479923ea4d9e8179cdc65b787fe17dae01cd106ada9502a753966d899da265bb17ea590e36b60e94d51eafbf2b1dab288d61c274e3a5c1a3ef84e710da8c354115a10869550627a3c1993bcf3cbf862c416e40187a25b548c1f3581022d2aefcd20bee5c0d5448cd52a642edf141a8191e47626774e2be3ac0c811ffbba67111cd1b03368e82d371557169f0d65ff9333cd9e2bd67904c1de81ddb8f408346a43fee10ace409d2c1507b16c919843b96b80bd5a22bc8051b89a4590673496a80a0e7732c30c6542f5c749de9501e695448d52d922619a37930d3f5c6ec23ff9ef183a958d10f3e2955ce2665c9c3ea9251d00dac831c205cf83c9d60bcc8090519d1c311f53dd08722a8283c92d111797c1fd50282e7bd84992c00c2e0b2c8823b61029600da867f874a08f43b0f8f871ac142591463e251f5ce1981137291aa83264e0b3272834c115c5cc047cfb1f12c6cc9d1763459cfc1178c3fc3fd948322d740d6e38bd4be8ed37e4ae9b669400aebceac7e637a2a64be3669bdb78f938d62d5c6268c9186944c207a2c4233a87db1a2d433375623fabec069d36c1cd60d9c192c5c3962aa18d8e7cc35dd12aaf68ecc81d1c990a1f43be11d55307374447c4364663798d7d1ce2e8360e32223e9aa54a44b56cb362cb8eece150d5e098716e054597c0e976b6ad30cd5a608609d990345a035884233924f0c241d01bad0dd45f22405b891a8c60561f124354a64cb2de0d1d878a9b93fa55f8e0f8200056246f98ca0e8a532fb5e75ce420a5e70007657b03cd5412c770b53b2c41f8543e1a9a0741b82954e3a370d88e644a828b52a8838859ee831b96ce24be5ed53201a1471c91be712c9895aac89ba1c4c229f2d36e6ed87e39ee863245035750b53c0ace491cb1c27fed2dda4259c504353291dc4edac603e574ef7d21c7588391104dc05000f9d89d8a7323040d1867660bdfaec31f1edf4b9192e0dce05bc072e358432d8936eae8f8fc551b33c499140dcc76b7e7221c604a9100350e0751a843e685c24a8004ac7e50b436108e559960e17e765b97e8798aa4e610e705c0e62a026742c80e4b2bac8195d0f1e7497dc6abf31b5b3dbf19f684c2464404b0ae48f773a5084b59e7a46649f6166581a462821a99486e322280abd5c28bc9314296441b46a85ffe373219eabc94b31f10ff613888d54a9206409912d9c4e9e418fb249e044a21813642d2b87c851787a4c4846678e4031a645a5c366dbd390284deec28c578f8cf1e097920aff2f5bb040acd76b2567491503fa9aa8d9b2bab4bffb3d1ea314b4bd0a47b41ddcd25fe51064045d328c02aa6afe3d4de92f06108f52581c60da2db5b1a021a978ed65a92a879d02e8b249a659348106098160118b3220043bc188017175bf0e2600b5e1c6cc18a8f0df8c917e133005b3836440d2fc1cd233073688a4d324db148a229164934c52299b65824d1169b44028493aa6213565c36c18ac72678f1d8002f1e1be0c5611bac786c812b5fa625008bf0183ab086295390243b9fc0cd91fc39b4752bb9b6ac24082218c4c3205871d802533e4c4b0096f032042f1cb6e085c37611a5c017c71698e2d82054bc04c71c4d5990a4290b92b006ab7e80bf6e9e627e014642cc5bad1e90bb58ce2884f702e0c08b2c0e0e5c1e66a5303d658b5e7de6fe3447ad9d0931c215175b43ff59d4dacb87476d5656b7d4beacdcfb18a05a4ab3a06708d6e8a6cfe0dd3f6d45d68522232438917b624c82ed0086b317df69f5b69236a4e9b470439dd18a17f4ea1b95e00d9dea0e6d83b5c731c53201964e21f7c7f097c662b25b8420c02806f9222fea7bf8b7bc74b74d997daa3bc3e92342da168320c3686ccc9357bf76d1509c6a8b9ccae21fe50e18bc3224380fddc1cc7b5c106e2e2b5ac7e5deb38be212990bffc7cc329e5718f9c8a89305e4ae3ce2668aa0e36fe3d0d6ad163cc27c9d89a513f78f95540abddca0fc1e83027430f2c8764a264c9355241edae6283af3cde8905ee60d271aee7f38df1ecf8155089c0f7ca1b0cd8080a7a29473bd4be60dfcfce7c20a7e8b5eb8b6a95b524295f4cd15fc139275c9198e3382154b3310e2fa56b9f3c547176144a20ddaaa6d718a004fff50d303799e3b02c95fef304be97f94d4f7b4dea7fbeb37877d909fc82dc557142602d82dba033f7ced119406eece16b47301d000a5cd8f74b21b80f3d4fbb232a74ae2f6e2f9b6105c8824b3cb5d7fe3325f344cb3639876bf70c177e98a857adfbce0d8f749c16a9f8c49a03d0701763d0c6388e47f1147368b5531b679dcf07dd11b941f592cb6f3af9ca6cd6b66bb0a1aa20dcf57084e4fc147aec82e76e5d4bda99f3186c5090bfa98260c2a9cc22190da3099693d9872537c47d93c7928805862da90cb1f70c9227475568b94eba886e432543f49b769efd660cae507096cd4ae245a33a2e7cd1c2cd78d4e5abcf95301a2eae6684e9edbd497d0ee3b2af5138fbb9e06d3f978eada1b45e6ca70e05f4151b20d6d1eec8dac0c339b298d0aa8293c956b92dcd3cb895dc9b30e4e0304336a084bfa54fa86b63ec62b36cc489e9c2f809e3d50583ecda82944bc3d0575e2729708803dae34ffae17a8043707753d242a1ef7c4e8d4409b0f4bd13094016aebc5bfdc5b03f46ac7a177acc415ef7df81b831faa4b2523773a54c1457655b0d9da7aaf8d59c9e320265cd85f572094e2980136772baf520ecfff52d6f66b34774f0ac772abf5a30725841dd631a52adcca64a0a644ed0060625406e3828b0d463c74d452a918d8e0868f64c195ba9ed5d96c67c7a8a0897d398e71e6c1964da725aef319439945e1cb6a92d25a23ea33a76b160231286df4eb2d8371ef6a2c236af6134a715d786274e14f42e62cb83a78d6ef26747979318585a1f46fe365f118a9ad978491544a028ac36de49ed7d38865fa75612cf7887796f925c9bc6caee85cc195eb272e6ccf0a99e502a84cddcb2c81dc20e0bef47a6f12ebf067fadedd0848a04716bba608dbd81325d550b0c1917da5b1040103d3b11e0b45f7965d5e1894f6d65df0fddfaf916d8a927b06a0f9c19b287fbc241d6a4495a5a22c7cdbdd5b74aba9de200253f7f8e4e3a0e1d2a6faa31dd650d56d12d2628d885f56422d094d46af4eeb46c4d0c7ee2de3b156f2f12e5c6bbef07864eb82ccb1d62a6ef24da1c86a9c1f816d5f833c78de55173b9e4f7a8634b48c18491095fd3ef9be1428e35b1372bbbbd9b2c78b7890f7096251d6e08be4f50a3ece610e6455faddfe3fdb3320742ce9e82cbf31861dd35d8cc3868dbc83f2d19608fc386cec68b0c1e564a9a134b3176255f5ee7f262c66740111a9d1083cf202f3fd92f7d398c8dda18ba2980d712b0561c0d03b33c8e22667167b82b385e309728102c680e01a0f04cc6670591366a7048972f7194a28c108f4409286c41db2405ced739c86d2e8a36232fa349edd67aea66d7f0365a4fb33ee0dc834224d0f70924b9947f45284bae0146076fe1b58918d2a2a07a6e8d8603c9cd63c588c860b6699ded6fcff6d6d122a85ec68a6dfe055ecb2c089b20f6cd53e940d2a59372c9eb3236e415e3aa28637b76e0b4b5cc3ac3463f39175a512ac13e586c8fae66ca3fc1c100f9dad0d44da27a63a6dceff0793815e28e1365f8a4566a0cab2e53a68bc514be368f13702249ceec56d46466a8f6ee22672125bb97ecf49b06a2db118064cd43e0aabda5945d7848163fa697aad702440d4b0df20e6dd50dd203554d2d3bbc0092c7f6b33acd8284f31070a31aad9557fc7e5c75c99cc4614019e6740952e90dd264e945c521565e10736d9d1bdf36174a11687468e7342567f0a3f900569280cfe63fdd5964fdce62559df8fbdfa10c64797ec115c8e9c5e1d4d02bb1f9abf0ffa841cfdba6e7ebeba0c78295ebf5c96b90b1a0c31f92e70cabbe211457f6b7a00e7755e91ec7d6e96c22da148d02d2818572e2b95cd7aac3a40dbfa7e07b9c369c8448131634300036f88f0d7384b6b48cd76bbaf567bd110d6365b5e189433f7a41c8ac2ceb9eba6c0e0cafd3eb2e0324ed406541339dd738eb12bb1dca8253b9a507905d24dd5cb88c1993c9e196939986582a3d2c94e4bdd8c8c2f47f8b20cce32db44804962b847e8897fa816e2d79018d06fc8c44a1224d54981336b5051c81676090616be43d797edf0f720b041ae726a33884e1b1a820cc84f90cd530f2d5f092a232a1f8f9f6cfb671c333e4a1bb686883f1087ce60a406192e799c940241e6a3137973e157c1371f4301d4e9d7d160f0e185eecc702c20ac10180a1b75385e69a44cbb2eb3d9bcd8823532b589291cc780426c3e64e3f7f081454660317c6ea5e40b019fe28100e3e4b3b16dd46fc91f0bc0bbb035ddf938323de8fbbf34770385aec8d5b40e2991ce7e4113f01df5df72d5ee8924e8f443b58b5e87ad90c9736ffe768b0966ed071518aa8d770e5aa43a23e45c4ac7da093ccc930498eb13070876641d3a838728e0b6d9d51ccce0cee5e4123b441e3e760ea41ff7e4096b377e7d88db9b5fc3a4e38623de1202f8f07da99814d0c9b8e9206d092315dc4b50557b06a703ba5cecfdd4628e17d5a37fc9e142f9cee2ed641c2b9eb027a6bb8262f79816f08b4ab12fc95f97fcafc8641c1a1c5620a00401c5440fb05587c44b8c85139602c7568c10692a3c23223090a2599561c239e9ec451f065bb727e4ec2d6d07a26c40d10c7003a99181d61d8ec0d27f9edc91f2899a9b3c25cec9f7d19327e189a17d881754dd67166cc143ad3dbba71f080eb64dad067c142dd6d99a4aa0ddf0c097e828f0ef378f134ecbf3eafb15eb7d125a09c369c581aa23e0fa83845b2c300a9700104890d1f945a5ad1e96d87f15e88296a6c314689a71e4c535f15df639b72757bec8888ff514428924db94b4f9190e739e357decf83668ffcd1ca13e79f54dcca1ac0dc3f5d2c3a22e3dc34ca5fae42d56bb1882a2bfca491bbd3bda6c6c647217aaf80086503373b5ee39fc58fe06c6262a7dd199ca80ee85b63526d23e8f0d7733fd45963796c5a0e4b0f517c9ac96533cdf1b60e843e1c8c1a3efacfd27ac5c83f0166563b37595794c3fbf7e9c1e8ce76a48734a3f69ca4aefe5985ceffab2eb281908352e0463e143e0ca27e43fce3b97fa985b0884d5110a8d9cb25064ccf331fafab508c336474018ee656471259936c99ceba986496142858786131a1a52180b7f15d63ce4463e308738bf4b100161106de00d1ab6b63380bc7718e1855ee446c497bbd8c8b185c667b917ba90c7663b5758f4b3b63087cb72b4dbaffb4426df9cdc36ee9400129f7517d009310b41a1de12f20379e2099e86d37a2c4ed9548028cd18ccd481102c3b56413212d00dd42bc2bbce2ac31376d6477c09dba9e0eb2bb28d52f087f36deb9dac93cde00cdfc6d67926279be018ae156cf5dc965bedd9e485f4267b72588cc19999697ef4805c8bef1047b80bf38f1d12977b536bacf019e225049a9127e38363aed755206c50909b6fbcdd89692d094331fa10174c8a5104d09ed665c91f91a2d918d6de252f2131bce6699d6a5084d61bd2e2d07471424801b493d0947c1f3f29ab40648ae36b6045392ae820beb4e75f9b8101dc6d10da0e3339307468cdd2848409052ab42771cf477e89e22812e2c59832d7a801ad630c0f60256d3e26eb46c07a1507cad31a0424bae35799600fb08128138fd1da15b0fe67d0aa8d12192f5234e464ba33265fb37033d2191f9cf818ec96528cd7d2fdbad24264ad0814300c210dd01c45c998f42134fb4e5ea2242b94bc3960581111133b849a0a0d99141d34f201ab67ae520e48e9373626de7c32df6e36cc5b4cf083d59d6aee60aba39d331937fc294981f7a84e0b5caa1b64f2a20b3082ab64524b730b9064fa325a5bc1d67bd993c58163e1046563e867035dc3056c3c24f7013cff9f61d83bb27371c902cd5d612495a45b1adb487a6b3d226116994644750554311e258f080e1ce16554fd1f9be80ea4371fcf2e6460d9eb6f6256b4ca8f0da550e3f3c1ea478a89e4c160a5c98498d9eb4528ecf925d0a04327d936a12a8c71c9a026e03af0fac974f633e79b21d43985400a5ab2e2ddd3ef4fa121950eeaf33547412c83920d9b8eaa2526a2937f7445701b966d70baa2049231ec46461180f869eb82b674a8b64fc9b099d4e4d14a70741851f56226b324ca0cc47256299a25179bc2d7e5f38dd0fd823513581596cfe8c3dcfa03af1d617dc004334f4112674498548dc4171c0c8fc03a54188227b88bd8d03bb058995f97377f1c50c479bfb9b8438acf89e192391ea90ad45b1a5dc3dfa1b7fbafd7bf11a157dab6108b691ead59aa2358ddb9e720ab907d808e74bc6712a508f5490c4427a1d55233995ceb532d6d211a65ab48645c3a8a0433f896cae401fd8cb11472b5a0545e04df31bef819d5fe1f934acdefc54550ab55bb6438b3883832af2426a84b7c2839666694c28eaa2321a39b720e08fc55b28ec0a24d4900801d3528b0eaff267c6619b74e5db5b5631d7eb93ea10ce516cffd05103e6f6a4c005dc506daf0a4a7671da5c035b9c0b64da1fe2e8dfd878d4aca83c818f32b316b00ff62445d8e96841f4158afbcede1ff77dd3ec7c0d5db434ee7e2114b6d2d02bffca77fb796f770f0a7df7d3c59e57a41ec58545c55fd492429553732061e192090a8e210c6997d011c9a99cb7c4a2362f22baf32ddc3102f1cd108c76c41452a2f113e1a50c025601a12dc2c741d3919ddf905088739e8523de3dbc9d0d43c1977ede917fa2ec77834872462273152637b83107c979b7c7d8bf432c1946ee6a6244d93565e9bc439e84a08d1efec5e762662a8fcb69b25d1c88d2a1b3e05b322c037ce175fbda9fbb3df0da21268cfa5aff9614bdee89155e45f67a81f799295ac002ed57cb3091255b8c16445f642777e98fa1958981554da44a5cc42e19040c9bf0408ffc53b82614a04c88d60c2a626c5142304f1448d0252af4d79cd4095ad0a6a8a2f8cafee195c156e8bb11228261d7595cd5a6a01639e9b2b382cff4afdfa2b473772d0982833ed8284f0cdc8479e12a5a9e46133038667cac7a000faece54f263f95f6a1eacac1f267c2e5332cec4577945a23fc624c3ba82e057bc0e4af718f773f71d120e6ed005cba2e3b29c7ae1105a323ad78753f37cd5fbb53c5d9d80df94989313fd564e6b79edca07f14d3794f26cc68954de1fcccccba091e7a081ec084cb60b293bd9d55a4f92a89ced36085e399d63c583b1d980fd0bd2f8bd31818c6b1313516256ec8623b2676fd718af6d6c9e190ce56b2e55017e595d3064c56190e1c337a04a4cb89a9dd24a08c007d036af62f491d2b07f729810ff0d0be7d57252c7b07b2164e81212c94f65d266938aa5be6b3522dba833be229757f71fed14d9c6e2e6a6fb6cfaa9da0e7f8473063e855bd74cab78b92f3c09aa32e2fd350d831e301cc7914f1f8b6652ac03f2fcd4ac605d14ad44f3cb34551721ef2cb21e8a7f3d07424daa696f39c622583c9967fdb8019f58ee903dab74eedc73c255d89c613f43e03211847d2c7c799aa7cc875ee83b80bbfae7f16f7ffa90d918a380b6b6a007a7076a93a857a7b5389f28d5cb624d8d0fd520e8b2209974b337a59068c17a9fdf13ebc723154bdc89575b84852ef09039384b91b9d270bfb0bb38f7d2eae751378651ab59c21eb604cf4a0edd8197fb0a2e4cf6407636beaa35aa54d011574dc5bb00b15476a01f18f8792f8d351b9ab41d31ced98431df9523183233a032056d940208bafc56d3a8e1f24119d489467918f6f9efa4232b18f4c0c07c8e7f08b24ad76b791de8dae51f22ca9aec99366bcba0c9c0b7657179085bfea039b66d2dba1f0a3f9f92e01fe7492a2f2a2aa824cf940ec8f152ed95c8544747efaf7a3f12330922d31fa35eaf76c4ad8656b5a6120445d791b462c00e6c6921917ccacda90e5b3d35c103511b7f1c0510fb79452ce182a3da6c0d03f3901e94db6fbaf2f966709db8ef196b4cc75481109b1fdad8469e3bb1c7ed1d8c89164dab82066d68b70ce47eee728260af8bc99a39783bcd2b77b0bd6bb80c7b88cf5b24401ed52f6113be770293694c5b4485c67ce0acc93a2454aa59ea4e9953f9b644ece039d48397e220e547103c7dc86993675d3260459a765e828dee56af436fd708d1f09ad524600ed498055161b881901e7019a39ba6996fe73e98f99762682a79658af228c85dd3759075782a81ee4c303b50960b48503f97aa1455b803a1b65bcd29613727d43566d9b066ca30c2afe9bb995bb561b540df13f8b9d3738973c0b95b77109875483b015230ecaf720cbbacc7509ec11f298415156228c0fe1484b95ca2a1a7bb6ce533847c13917d3c5c78483973203ee8219ea7e7016381f7f302dd3724399b6637d0f3a3a24cea3bfa994617aa8f48c14cbd84067f54116c0501da419b2caea9c16fa4872b73962dacdcea227df8470929791baa2e0a5441efd144079e7c495b9a5660aee54a270c502006191c0c0f8ea83a331db3d40716a7be8e28101d169363d7753ee0458363f80766619059b7a22dc7477458bace55ace30eaaa1f7c03bfda9428e350d9c308591e07e4e0897b045b798ceaf624f4bbdc17f4c046123c74ca2d988031d7c86c760261bd4fd4f4fe6539925fd2a6e6917d74e93b163e53f50a4f8005c0891a1c0be5f62ba805fc7a707baaaca6ae6832744b92c020baa047a3d80462bc43f406a870c1191f9b71bff77cf81f4dba3c6e20e6058515fcb026ae587187421de31b8b2d3448fbfe273df68b0e7fdc6c7902cfef4a37f01c1625c0114ea24c266b8716ddb51e09894e7e8bfb3640a891e8e96ea0b2e02a616e23096ec6d4582fc05df11689860657ce6482a709638fff2f31d44057167c9512e89893298872b3557112131ef4f07abee1bc5228815054508a2913a8f6108974a0ff56a9eb46e2a568514db204697cb563ca4cd92481ce61eca1714885501c777e6ea7e1b485ef45de3b94aeb49a9e98b8e8d4a297cc3062aa651701787875d9f45faec9540a1f3e0712766f8395469c3fc87af582f4d8312dab82f928cb7868cf9f3fc0f1f93b5ef0b3a519ba40ba7721e3240ecbd351a88ba046506972ddc0086d9b5eb6e56c5006c1abb350c7e1b38789604daabfee0a2eb3b05f691f9536c0eb4da202ebc5736682cfe9da2176b6269fba8a8cd5923897a6f379894a6c8ca2d0f6e596dcef10b4e2e8d82b60fd570cc42905f4558ab80b1b63a7d8db635dadae41fa193ce51c653064d2cd10ac498f2398d26f294bb43752221f93b48c927693893fb837fb9a3aaad46e680cfa4bbbd948254789e54b09268c0a743b1d9e55f51afd9f85c8b95598a18fe0c9a19aae839214ffb5ca2a6ae5e51861747b0264c9c81fc8f28b486d4432ea246bf170194a37b76ae2f2798e0f177f0d3ea89ef9848bf05db8c2777386efd63db76065ef30fe3484e09c24cf3b4188bb90f3e92ede3f590425e097200aa650e7d49ccad35b5c700cb63c0daac3a5957ff93fdf83c88df9d6f69e8e907aff6a4d94156bb13c8a494f2f6a2ab47bb492eaefa4ab01ad00783a12e951ed1d318173a9df77f48901c9503afd4fc20a92415c817360f6c78f2751970dae18f70925d225b6168d431645e45e2ef435eef09ae04adffe66b0d00ef9fa413de7320bf74cf26a5d7c5777ea61d387e9e248348fc746636511e7e1b2cd05c30588cc981335a23a7e50995ca9874b11564731e7770832c41ee6404726a2aef89ea122ab9461200f7cd8283100ae1c931e288a52093d6ea6d63d1c897b02c01cbf3d63501e13384c0dfe1b465c0697bbb3b3f90a345bc43f70c9c6fad3a75ed7dffcd15eba625c5f697d1984696aa1db35274218014c3ddbf8c965109d580996425f4b863141a3a15d5001e18d832b48c55111d3d1af7641bd8dd63f9eadb5d7b94802ebc1318403a2a8ae499adc0110d1c6c83bfd4b4cdbfaf9d7b999b80acaf88c7aabd8af0c174a9c04859d42c50bea7047d3027e53241ca9dfa11c40c1329da7fac8ce31fc578e70171def8988e8547d296a02229075fd0699c5e983bd9a68fc36d020de3085f5dfdfd8ada979b613f41de06461287437c5e13dcb3f7bdd11818b011682cc8f051ce33bbded19763284a48bcf15cef06121e899ef3daa79c5521a6708d00622ba0d4a8f44539ea7c328ea5829b5d2e7b82c6b286fc0594a600ae3c59c860a0f8b2781610b1a03d7fe32e5394118f531a9cc3f477aa69d4df7711384a67cb2782146314734db8991cf7d2c4152f1fa0532326c3050ff5eaacf097c39719113dccf3692807793ab2a2269652431cb31b8892214bdc77e123f6f89977a559bdaf06a377c9771bd2d8a77e877eddc938188a7fee2d47cc38f430621388e33ee9d8deda6058d0f84391b371298ef536100fafa5052269fe96d8e7fe5d46c2db26c1f3b151ce19c46fe03344780fdd0f9140beb725fd8dc2febc326f61f7c6fe1a5567ae8cc1737b446b8407086a524c5c2466f57938546d3ddddd4b21b617fae6592229c25fdceafbe3ae5cc366437be18c6ec1f8674b1a5de7f98ef55736807fbdd85c94ff0bcc169e5e3137ea092e7ab3182980fa53e72909efc841423f738bcb6ae5af83bcff3020ce94951453016406141be0aee943f441bb474550b603a2ae200e9a1cea2c8fb404b132ca94e5c1b2ba6f809a4671636391f6395cccf8cd792f420b790f6c163ec72530ee61c6a30253d0d65589f4b7aa2e25f6b016ac34ee989f8fff6afeb153f08628cb0cd0f8f1e442309dff90a1018bf918d73f6685efa16acc49071af92783fd380b676c9bcc073e0332f1a013a27999e53a218ffc56fa208e365300dfddf9393279d0d0104252ea5d2d07510aa1b4689b3486e3468a63f7dfb231871ade567e0225e7b2a309d8a33976db0451ca0d3810c6d3f80bf52fbf83927ccf79f35027f49858dd40bc7e1dbc6a25d81cadfa97cf15705e9cca30f8a070bd922527062449671393bc8663b87cf2208011ded2433c7c03b2e9438dcf59cf5244bcd062448b0c53efce5de5f2d206e251ac207efc6cca5a88f3d3054e2180555a89f1c5e290638721841893d668762ae4fb4abb3da7790aa0aadec64fb57265c71259cf5e3a05c626e63cbe475154d08c9b0128c997c5005f80f21b9aff44dfabdf749cde343ba953e453c8464ac3f6f77be52293d628f7ac0baa22c4417811409212dd37611fae3fef6f41181bbb218657ae64d6b14b4989065142195515bc43f55198f8fd9884b2e42a32ba742163b0fdcec949d6cca829ea0aa2e716d3e2b2d140872fffdde2ec8b09f93b0189dff1d339ffd314451363e71b392937b26618422e302110c989940d346ef170e6ae09ee33eaabca088a9d1db12b10287cb344ca74613cf37030a17fa9d92ae8a097dd5bd0a7704a4c43c0bab22d9492b482a3d92fa323a45f8037b8d80165971e7563e4cbb7514562e6d9f5a6354a18198ac7295f6ef2db71820ec37ab2adaa7799f2a05d87fdca9902c34a24ea9f3eef54ce0de430116b6bee2c136400f7513bd7efc3813a65a99912093f4cab248e649c90da1cb6819063a4032a794abe09a0143a7acc6f7f048863406052e116dc6726076f6f1d605cb6275c8467ff12208eb4a63bc8b52f6dd33935550777210c9b36bc6c5fb9d013ea64a0ccd1b3b432cf2bdcac5f562f0d997ed31055009de42d352592e807820dec3985172e669f97d448b742004fd1486b306f63b7d3f3d85b95506c9d42d7350ffa41544af287e67028d3af7b53f9cd2304ee04874be058b1fbd5d38dd5052a434d823a460a02e93c3e13744db4cb0a3feadc4ee06b23163efb2c619c53a76d606636183d1d3ffca118df2a0f9fceaca940293b87d16bfc9f59900eeaa77ae1f6f3c75469365ee2ba19c0f8a125bb71ca1d976b9b38fdd86d9c4a0425b6e58302ad88e6ae43d96e6322b466a7155acc965b42765b9096c2c65a6052ebdc6201ad5dc460fa6cc27a34628d10451c2f6682a0d7b11c8f4bf824cb9ebe5779dc05408b31da42f2d7fd358a4033c0511ce79095e93680d89f9b1015046672f0b2d0040c5d9d8c591f06018fb2e8495f493bb0f8087a90d51fdc29d0f48dad3d0bfd23e78e138bfd87be7303c8682c8cb6968cd1666c89d76d17a4e0fc2eea03da4c217583669c77706f7ea3970410d7710318aa9a24c8c53b546a032988550e3f03cc180252ed1ba9706e4ae583ffa5aec6001e1f93ae34a7e3b0ad7f8221994ef370c4452f1a5fc5e54106521e9b27990648734cc0e522f494df366b6311d7c3acad413f80eba7c8088eeb6b39204f843b7b3f73283eef82b7532816711154b1a173d45d12b44054674e11354a919ddf4c1f5b8d49f1c678006016b18f557cf662439db6f4181fec00eb824b46651faa09e301e4d846637688bc3ced7a30356a535af0311d3a181e2e582518611b558570330e7da8742544c79deb9ab8ad5582ca734fdc7af3b1aa846f1d38f462fa408892ad680ebe1af282930ff358a9e7b21eda5f0d4ec77a09e8a98a0a03802560821010343ccde76400397d3764f425072d9d0d0cfb84d846c760839d1cc47846b40ad4ab85bfc62f5b42ad5618645a5d3168f6ca0071c4a3721d8f9c932bfcba1240e9c80ea462958eb7b6115ff9e82c30c0366eb32e61f5a9e7d1c997d4a7852c19d2cd0fa669c051a288891250b2b4a9ed9f590df839aab8906ebc7c49e50740fbb7b56ecd7260e60418e0f67ff07cf506446a437b2d17cc7aeccf6d79e33015a89a15b8c7162933b0c611c00b3e951410d633fcfec7886f61506e55dd1828946a247ede91e43a1545adc013a5a68b2ebcce3cebda261d7622835a31d47612a30bad8c76ab8c9ab71fa46d4b9eda249b4751183d937694b6ee80e02c4a6b3fec16e378584e8ea31b0aad902d784f362cbae1464be1ad8b8d8219bd3c0ced5cc257662871892174000e2b0434b5cedb5a3005c465078f83c0188db82dc264086eb25a2940ba2f1e35aab6d09c39072efe71b7e882eeca3a1c575087b8cb2557834b6a47862cb938ad3bed234dc87d7ed423e8dfbc20592608c62456dcbc4f92a4a003b20dcd0cbfde32bfcdfeea41d98834e51983436b144c92a298ccb264f5219ad3b45684b3b84aa41cd033b0d05b674d0032e4879c13aa9348141b2825f2da26a9372733e9be3c2d11ecff34c14f69a33cd7c98aaa133e20ab399152812a57b90599186c82b29e688447a5326ec2df9c508f777cf17bfdc3ddc9f9ca40bb529a73114de49bd42c9e7ee63b0deae68f0e3c79a2c87e7672e2a42911044cde28d64b2e6ea7534477f3fe2dba80e458007d15494da26b4131007119e834169eda0df1d365f51b5e384a2769c30d38e5b93761c59ddac52698665cc4d3a93b7d74692b7d671418ebeb76a8b1937c6688d82b7644ea6bc3491b164aecb77fdcedf44aec8f4575d755726d681193a4e5ce7e8e5a57c3058d34cc2a4c9cb4eab3a151549d33d0c66bbce1938a809107edcda784040e430daa29adb8ade08f41392c3e698baf9156388f3b92c49c05cdc0013cd3b3cbcd843f30855b2ee19b47a5c803a9261e42e952c7eb98468237156b98c1a37947ece1c7550c1b9b2cf051458ed8991c3d0662da98c0b80540d50d314d2bb12abb5866801f3eaa0acfd63af87361ba426040d93ff561a8cd690547a6a57c6e6767f933a52cc7d2670500624748ef5815da050c168165b5a0eb099992d69b47e60aaace630298de6601f67922898ce3acf73b3b8d0b9bb6f4a52e19eff5d9c082ae5767a8221fa38e005e032ac5497549e90435dd835d3630e2fc34f73834f2e0b782381d87b92615d0cc6481af0489a1d24cda964a9588feab587b34aa13c9f8f0223902c240b4d523a5098b503f0d2e2dc279b1943ce16e855fceb286379dbcb7c5766fe21a82bef855573b76f3ce8678691e06e1b527e37914e996d697361d94d795c0f3058636dbbd92d04f307f1c302aef04e9091171a618d95b42365e9e9d5e1ac56a99e473d0988e88c42ddc5630a9a88c536792d15cc7ad4ad7aebfeea68434f72f70c0fb4713e0394422fa7f9bb5893825abddf7de0eb14aa29dbf65fa9bf3078a6805df6dd6a32ef1e1064bf6f64f3e0e5727b45dab9fc07cd40b361d4e26939bfc4bf008a0d0b7db311b651f5ad64f75825159654a332116827870f018a8ff1bc502bd3c8b509eb66cfcb1e9613f6b4bc7c710cbad39a27ad7ac252ca4f7b60935ec20189c35720b9c9ad18b63d60451061c5be89ca0480966bd622dea45760dd5477c1b93319ec42534c81f98a12cb6c89e92371f651fafd15641f590f54a1b57d535c8ef0cd4c716efe464cafc0535ce548cece2fa04737d638923daef47c0660540fab15ad3d6b46865a56b088a96cb5e400fa35ef58a918ee5c7ef086972594835c6caf223c7dd1342d77d8df07845693790db672d8a2e9db3de8f33c535efd8040d2ccba8cf2099ca4f6b6883c0b4433535137f6792373de021314e0abd9149e2de16b2d64d00d778d02b109bc1188c52aeb9a9e6ec4bd9f2ffb7c825c7bdff3eead9d4f046c9763858a5009f4f21f6c30e7219a6b8b78a3278ec141e349d5f6ef9588c43480a81977e4171b1a62cf831bfad744963fcd25de0049fd200b77f32b989a493533ce6037040d1b8eb61d3011cfa1e3437e4aa404a5c1c5260eee55b51b63a7bb2601ff4a32a73e7d8d9459e00513df50259a9a220ff85f95373129b48a635d0f3b66cd90cb32e1fe5948376e21cb6b65ba74a4678acdfd17e9db07cd6fb542ab864196f6a00dfc8aa095da86f1be00205f2be7ca837589ecefff9782399b01b05ea3dee63e497d9fa729850e93a290ab588c1c158379b167e39ee35f41b1d35d537adafe35c9ac9d530734242879310ed994ee397dc889d8f75cc12184c5e0a96b0d200d6f05a0a03eb0fee38fa5c66e42a86e19cf12a2b69c283e626d4cc51364dba6243250dbddea4156b93a9c678fc92033fb6145928305736df1a9423e48bf1b0a5e364b3b149ce52f77ebd19814166c2276dea97f133391fa34f1170d05159220d0e5fcf45e80b1de5435caed35daafb4a982e7e830a85dc63ed7c02a2b8e4c00b8e056af4b67d28fb08a961907baac7710acda3061b3d003badc622425cb52ce3b181e910221c2cd322bf079450c17e90f72971233068275ca019bbf32f66026dc2a139b8e92f4d9ee0102d39165de7fc4e935032cc7f51641b6e625b49f3778818007783df692c05adfadd6005bb092a13e3a8e118decbc0dfeb593371c1d24267214bf764f12176d3b0516b737edb0d7ee2ba7b9832545dff29c2beaa268239a8d3ab9d9da96db8ec7f1948b91f9e4a4798fe998bea4aaf951bd4ca5a2ca5b0fb5a2e3b8365580500a331ba59cdf5bc35de62718691af8f60aabd97df40ee241e02f668bc8d2878852ae7b17439c400dbe3247425839004515ee56795724b0b55bd9b8e776207005b8f2f58fe982d635024969a9934c7daefaf019aa43f1ec1d6dd33ad9331700b5c736e89b935c35995a515603455ad24a6d4ec54d6ad4e76863198a38a4b96dae9e138b1aa394fd415e75fd83c0860a80631c6cadb18aa55af37f0803721f4d72bf4785344173c135793074d69cfaf90c224bdeae690edab34ed5a26a7e32cdd2ea338f9b4cd0d1e37e8c83853a85b125fcca4ffd37c9fc6654bce192fd0966582c7f0a4ca201614e74c094819f1a05af8c31d8dd095cbc34f0589a12c473ae9d06a6378044c692b188bc71c04b0befc78b12ba52447156bc949498f0519c7280673d2ee3339de5ca0cc7a6f468b99be185ca93225c713cd594a4c6cc7cdad1af8542a43e79cbaf2ee6cbb9a601a0ba281d4ddb5ff26b8a08c5472cf1f83e6d9fd69f7ebd82fedb1897f8a201fc2c76ac9725e84a6f039dab79de70e4d2a919d65502957743c16bef68ea49fd2e6e54f9c50ab7621697193b25c44dcacb4eb71dc40eef51ec741e646fca375be30d1fa140374504a8776656e56721fa165276a81000732d4c62ba5e57ec9b8bd43734798610274ef43a6ca0b68486868fd82a7338bc67cc93d687559ac35404f0aa3d06b853987b5498962b0bf9692d216c0dfd06881cf0555d20fd9cc3b397532b18f40ee1bf0d3c552a26b5d2171829085244e78624a68f83d4124dc96663629856c8b6cd9186cc08d088552af0cd7244d1b2813fcd46e5b860b2e699c9d28e3b152638b7f1ed233efb43a0e269a82bb3167bc8a560cd83f0094c5809dec362a701ccc098edefb6eec0df81ab6afe972876de4330e42ae7b77e8c80885657acb6e4c4032e55e56cb60dda03059387e7c2b655009dfb8a75d7fd791bc6b0a467434716ebdf19cbc678d0323ec17c7d723ffc7e9aa26a12315d405b056ad61f647b1a4253d77f1de28ecf019ffc7d071ed624abe1d04ad7cddf010fc3f45a08bd5d977febe0af740248ba4501f2e98b38070cee7f90898f60465b632a177b3da2ae7ef00faadc56541104da8830b590af144bcc04948a69e1de7524648e5efae782a620f4fd85f3e68bc32dfcc7d08c1440d547cce10856052c30298a321b14da74cc6ec6c3e15dca50bf461712835c366a69cc87db882222a2888adee1d6ac9f8fc36d362b403979cf0ae482cdc03f98394b7b12204d49c23bdf955ffd88527342b7c9d86a63803a769ca2fd8534c4d5c9871c84eb071cf67c20b208ca702d8b02e2d46ff685ef8dfdfd893531c35124f4aa7b9fe30b35b10b20d24dbe702f9f2b3a9c710e8335de43a18670b8d34c4b52401b01ac636045c8a12f46ffaf8c9a0421fded4107560fa921e22f0b767f7927475da86f33815382c83188164b1ecaa0663777b7fa9f3891c98a67bd8606802e1667a7aabac1cc705e42907eaac89443a672969479f19a1f0c3ee1860669af113538da50abe7c519ce9b148850d72492abe18cbc1e1487b73512bc2888a69e9737025ec5473e96afe4e2ae1b726e6d0a0d392cca0b24178e753a9f62561a2712268ab1023b3d0693c980669210c84c04171d01708c15deb1be81ece95a0600a79e84bb86c8ba16a5b1585e1d275113f2e2a0c9c19e32a1e7029373d06d5d003cad86fb0037d45319b038590db634503c25fb09f5c37755de271794d15492c13cb0df088706a3a08757b0d7192182fed6e964aa119ed00bc94401e277a10524fbd7c38e7d5859054527937aeebe99a2749a6e3206e0583c7d7782f35827003ec19783e81a3c7c40d8e648ed1c62aa21a91253d886768953e83bb5dad0f68698a06d7735853bd008c52db8c676496d3b21dde7deeaf99cf28170e34d1e6ca4500c4d2d82c585df58557f445bc543a0bd09a0b101fd8ca992013773514b74b29592890a0c96847ee0720e5dfa367c755b90564ff405b3620f24b2fd65df5564b59fb4f9d82509f47a64f209d5d09b9ede7ef191984e2f322f668a581411e89063e9df85d7295c3c4f52ab5795d01f3cd0942accbba0c81b2e55a9c16fc78033a2998645c9b6d09e691b61a6a6a6105f6bc8111a8d2d88ed4c03acc703ea113ba15b30ceb29a0e911f2f6c536fdc804f68dca648fcee38900b1c8153f39baf5076e340ec8154f15a8f14304c8673baf4b5d06101a481d08e111786728977657a69ab46e73a5551a019702b16ad974a416590496b7b77db72ef2d5392322a0ae2097c0963e4fa374241e45ac3604112990e2872bf5592450993dc3f73671a5e2411c2a109491a43cc336028a1498cdb0c94aaa880860bc66f4949900b46b93f164616a099c4bda8645bec8610650b465a407201090aa2c8f561dddd5a927203b58c98e336cc7515bbf144564a324590935cff8364c0c2193323c6a0c2857954294bcc71ea44675bccae70456e169c28adf0c213004b1360484144195930f12922c2b2c4480cbef0e28cee481834a8f01d23e638ad328f904c812449ee5fdd281ce41d2a3c91abedee1774c9fdd3b7d61b4adb8d0e6c3b72b54d2a34a46043aeef4a818b5cff8f3839e2840a45546022859f5cff258c2daa14d096dcfdaa5a6b75bae5ca427bb5371473fa8194b2bf28e678752d727d3a2157213aeda54b28b491fbc16e2d46b96bff04864a54eeb6b7fc1503b20d07074da880896c9b43e4ca4359ff7e91ebff8f53ae3ff321d7af31818c5cff668ad2096a28a15044aeff51b9f4a786db67a441840ab5daeb6e6f3020f7db191ce5be97d219007060828aa3246ba8f102091041461735a83046162acadaa5902bf8e47230e380ae561cdc709069ad378cb7563078c8f508502543779691a0dcf6cec668ca136905a1dbed3642f17e961f0ed5e140074450829bd78034013905cd27a11b509010076e5bdc80806e25b0ff59bb05073a208212ccbe660b0e74400425a01e1437362337da8c1ce9c1f378cd4495f3b17459ca13294f2c5d56c820bdb1b7a53cc9c8134b97a65c431eaf59173df00c244904426c4cb992c60f372c517ae63173d0bf2db8a10fd220af7960d2e8972134d5c8f48b644a8328118fca86202a4487e853222a4495f4ac7b4bf68cae771a7d7a9d463db28796ddbb7cca8e1c67354ea33c4286d05b91659a5396031244e58432eed40c70e438ad8f3bf5b9e7c81e5459dfa75ce276f7ffe84af68cdffeb3acddfd3f6af08dd3babb991ae9a2bcf6fd2ccfe9fdaccd80d10791917b5af6d0727e88afd3e67373a867730af56c9a309ffe4ca149e4b50e72da840eb9e60f1951a120af51269336df499e9f439eef439e41b3839a880a713fbfbecd1d1e9d9c5965c3fddc43f39b28a885ae191d04bece3b6d8278ec414bef2ee19a8fd3d439ae56ae921cee5b03396d3e25b241562078e9912b1dae8d0a75df41dc4fefaf38c8ca6b7a86a367d3cb297e30bb4bf7b3d0acd92a621879d1258c299894f369d1ace5c0a14a09303cc1b0061ae5fc298250cbd9fc9af937f371bac8eb308d2ea434c9738d3cbb8842430655fd3ebe72f45189705fc9719654dca9cf913de32d5de41429aa9ce5d897fe0ffa3dfb1f13d7dc1ce1f0d0f9315745b7db99281571ca7305792a15819241551f750ad38626f58c7bee7beefbe60d7465cec8242e5df2da475226af59b28f9aa68e2bd3664eae573067dc73e48b0e519c8a9a9260e20405156cb6301224861319941154720f92555c1b35ca6de434eead35e21ae9b6a08d261551b66c096249072b62f0228c36982c5102062ca494dc3ff58c43a3673de3b86f22a64d1b71d0c49db9669fb3512e5c2bc91c2d6a42ea388d9b494aba6993a64f5ac9938ea241149794e2924b97cce2ca68b924d89c6dd46936512e5883a50bf2788d963169dc3b15c9dc770ab7cc51278b7b68695f65c375020aea2e535cb1020a2fac7029b9a743b3e641124f928e62f0050e4b94dc53b1874f6949204ee39ed4e2daa81345e389a3405eb3a006435c1b7562ca5e0ffbe32c479def3fb28796d6691cf740bc66c91baa1c7dd8f1f68cfbfab3b43fcbeb5344183c8cf10220275808a3e4a60b8050038a232c18318445c97dc57f97780e6a7ac6753b3dd3f13aa5282ad2040c43ccdc542aa2a489bc36f7cd7d73afe3b507bc54cfabe755cfeb0c64709a40a572b3a3314ebf703f76ddd49db956d053db70e9066a24ada4491375b4db9892392d4de2e8e0228905059c1d90c0662e8739f3b8d07b79c13d14c4592aef7975a8695e1ff5cc3ba267de876453e999ede2e8723defb9204ec87b17d37bdf58dae6baf76dd4478e3475d0ec6159c3c9235751aef738dd3510eabfb7371c43d283ce21f73dd43558510b6aafd2bf8db0c8b5772c5cacb48d987d6261034bd252c80189a4cd27cc61cda9548abca957a9fe3ea8c2f4af8aaac2afa207dcf71c08060951b8de9ef5aa7b7ff98eba1fc1d5ead5ab57af5ebd7af5ea5fad2820885b9fabf5bd7af5ead5ab57af5ebdfabfd4fa5ebd7aa5403345048e309f7e77cb138fe1779e990421a208523100fd9eb546a38bbc045aeb1f28ad1f85828181c14872000338c001f24df65b17d10d9ae299850c21012bb5714426a133ea276a82947b540edba967ed3724b7b6f16c6cdba0504fe99cf4ed9c734e14eaf31e85b9a7b8662adacffb2061f670cd53f4265023e9999216ead9a44cde489e887a28243d492c02f6afa2dcee5d3d9b40dd77500704daf87f9f0a5f4c3d28e2fe94d89956fbfe554bde9e4dd573a407d521db74cafd4cdd353ac435e95a0f5d4a423222baf95921895125d58a0282b8fdb63a949dbaa693d4b59a49ebaf8593d6dfd4c4c4b4b484348f6e6e56ab58ee3aa4a24d4d4e4ef9e929db7a08a8bba5da3a41bb5b1cc1e5f15af7d3767524c14d5a15731d41e56c3eb976d1f9cf1b407a46bf26d31a0f8127883b4b52cb25af5c5b0deb844bbffffbafc341709ee2873b234e494cebe134ced3e777ed05c1b99f85c21a2f40210d28908cd0a0c3b442c3912f9c6449818a166c7e3cf304238d262670f9c24985243e49ecf0c3c3962859aed850d267a1c07d7ddaa20428d0ad30945f80606db14510300c85010454d2e799b50c50d18395a5198eb43145495fc8101b64896a4da329cf69338b2206a71f9800820d280a58c348092de0f0c4052c28a9125b5c98f2c3921280aab85760a185921b9288410d257d01dce0fa59f3f1210a2aa84052050a13354afab3591b0203932f6248b20311430bb0810b0fb4706adaf4408b27d2cabd16a4fd6eafcd956b1335504184458725479a286b752d7766dbe550a05402953cb13c0965db06b97f52c953a9845b563272532ae129c7a4b86414d71676dfad3094ff3b2e3b473d8868af19f7fb57fdb1fe1bd51bca5eeb236f22af754e4ef39fb5a963729adba0ecfdf8dcc070dbfb213d20efd63327af759153be69cafe1d93d7fac869fedd31fd64dbcd94ec242c9d74c44d0a9be6ef2eafd149ebdebb59f6d52b57dbcb976b7d3a6b2ed216642e815c038edc9b497397dfb86c37b69b72871b7612939a77739a7f27f97bb7b984c609d9dfbb796d9696b4598fb45d57b67937d1031cd9e643946ddc07994bb93f28dfdfae7ddf3423e5f4863e264b67cc90e787419f50034d1a7dcf0380c6fddab3e6d234f289045aa9a52d44458229cb8e271da471801d2964d96143ccde8e0067b728817b33e24640a93b4e5875606547113338f1451d5cb1b56b3f52eacff699397f8e040185ebfea304ea074609701f78d2a54603edc8e12b62a187238ff3aa2f31c215c40e216e074dacb2d417ec18c2a93725a38a950f9ec755afbabb30c5ed0caa7c4794cb7195d6ba5b91a21b51486ba85b11a79bd16d85d27f456bf766c4e9f6745b52fac7a80d05ba39c9fe93da7c0539774a39774a032e9d9f1f19b245feb0c85fa562f02c45318cc1147c9897bfaa4f891f56c7409ce69fc217d31ba6412ad0ab3b8c8f6dd514b03e98ba99482f17676437440d605f579f22c7b7514ad43c429a0cc2f511323cf6e39f250b8ffdffb3ec7038a30e24f17d0db0ea1d83304b99bf31daf7c17ad9fb687dec06a6a50678f45e839f2589654fbe0fd9931a90b29f65877db41e934466bef51cf6c1faffc63d58ffad2742f3ac07698862b164f5854c1d37d71fe2b599af15c76ba37f8a87d74627c71ead56ec532491998fcd7c2cf64468be45b67e96ad18b697ca065d5c9a9fc133982c0024d7d464a90130349a11a464e807101c4dab473870e0e0bad7cc519fba5c22783f7e1e18c2c2365993192892a7a98947080943e82d4889d090fb3fe641a13094d6371ed27a99ec5932a716c9c3d3c4711df71fccdcd1e0d15ff6ac9fc1a37fec5b9f121fa7392c82cecff8b01fedff60bdec7fb43ef68e474bf6903deb7762df7ab07bc9f0fd1856fd88611e865fde85c35fe198a7d97be159caf02c637896239e252d3b3cb34b86c411426f41434f1448888887c7037a565f3eb6618a78ede7fb9f136c49ff845bb6fe07a8a66cfd09b764b158dd6afd1cbf3e10afc17c7d215e537d7d7af3daeb5d5fefc35ee6e98f9e554a0016a29840cbd58f505fe787d3b810a71e068bdf188459feb0bef54a4a47796691a71216a64cc511bc1f7bf8942f0f824ff942f6f8943d52765afff2acdfc9c016494645ca17b227035b2419ddcad68f989621663d0c6e7de311bc1f2dab8567e942b5401c4adce6909a02fd0012028f10127a606810e7cd43a726286663b1facd1c9689dbdfdd8f160333476de10c505a7dd6a408b0a568026cb38b8ffc461044dd928084b0829a4c595fc811b93e093d4659bfa76da61216a35c9fde94ae4cc9f5291088fabe9fa2cef8388d1af10fa73de9597d54bfad068712b7a1a4be314fcf6c997a1606ba25eb5bf8e7849a92454e07ba658afc91ca3f668efa04a0e1f60822f8f7f78f96d461fdcc3badc769f0e2597ab374acf303fbd7831c065b0687efc2310fc330ffc22fbfc2b4f430cd3d7452ef0300433d54e9528a33c3f02c6796f931c12706e65feeab522f7e0bb3f00acf52c440b010a7d57fc13406d320a7d54fe126771a9e250c9ee50b9ee5c5b3f4b94d3147e787d3eae3f40d073dab7fa35e1fdb2a221c325c9bbd16a9e66656f333d7db9eb906b88a47c8d1e14278697283f0108085eb2a10d281c4e42ac7b582ba0680b2bfa69f83fe1dfd380fe8d7b1b773679702d47082a876b595e7cf6ac5a5b69a3d7bd885def5ee7693c9918070199c35aeb70e7b27f5d352ee7ed6c49db2cd5d17669498d35ffd9adb6bad370c904c72e7dba63cdf9bdfcde7aa276932c99cd3f302046735a24ded42de48f589a3445d4892b56774fa17d5ddabab50af50420557a60ce1c40ed52b5839e7aa23b9f47b56728645952421a8381a9d5277074011959c3347f5b2f8929c6618ed25dce40a977e3b39cbe2d2ff7267fa54fda98946e26a1f35d213421d1724848437799d33799311d5c87ab5a81a2dc17da1e3b1fe976d06b95b05ca15004c5cfa38cd75def7a59c9c33c98b01ecee39e7fc9ed1e2d2b7e13cbbbb559343417501bccbf5edb5e600f3c959abc19c8ed778d7f8ebd8cb91aad9c3569d24aed3a919acce35ad2927756692ced431b353670468a394d290827dbbd259b1ab67dd5ecc273690a1ad8b3e018220b5715de6dc46e6ce2dd5f4dc4f3b832a1757b9a0bc1b6d436be755cccd8fe3acd8cf3b0f5585388e0343aeeb3aafb66c2da754a8d65add23e9ccc1751f0a44815c505c3ad103d491104e5c61267f4633479321d2bd35386633a4eb5ad140838385e5f64f51029f5b48ad266eab0a0bcbca0a1c61ab4aab4a0484baf006e7cd2e3a00f2f3c88639dc5bf183cedfb7e5303767dd7bf89be29c750ff2689b97396359690f3715146ea47ac403889d4999dc00f99174e6e8bebd704e1d9e976593359bb572676b911b20379855727f1f4d26662d842c0d45eef7109098cd66330890964465d0864f5cff39f1bb5cd4a284a03a2e95448c3bdff354aac18892371d4439e8440d1b59e3840c545ff1b9b064e4a2f25472f2c51597695a274b208eb96c9dd35e2740649b8b6b414ca8fa42252744208f169c9c0c7d37d670c984ae1bae3cbcae5be3434fa8fa2551d2b4c923c993a6b986ae57060dd7cb5369488c6c0b3da2cbca53694829db2db7e6a9344445b685e16a766375c3305cc5ccc0e14609960c2c6ad30a8ce8182aa26d03386fd868b0e8992ff5cc7f0583db514a80329a545b48e03225d5b836555312cd11d99fe6089fdca915e652176a5c81420669141d99494d76784ac3880f3c0c51faab965458a898da86aa9a460fbcb37face77b30b84d45af3d4cb3516ebf5a6c8b054b574ca0e2053b74810121440c46343962840ba5af7ae6aa265593ca49f5746f341c1560aa3d4c1971e7837426a42b30a73001930b9458514425062cca6e328511433869a10228871bc58c5b11483835b932d930e38722525044919430ca9e5d272b307308a0c8b5d11ce6490609f3f511026d0bb2ca437a3667a5955692369965274708f8dbfc83ac9c4e8fc93e95ba0b60adee1cf7ceb5bfad72dd4e335831a88a71ef2ae6ccaf18f442ff0edbbaec5dba206005977ed33ada1d8173eab035eb751c59bbdb118074e9576befe538d26b776a80d32977a64c36dae4942aa1dd24f793d38ddc4f33c871eeee5d13ffe919d0f45b953bdf72d37fd227eee9e9693ad531bc72dc537fca55ee69f5a75ce59e567f5a6b731dd7558ee3e67477e726c77173babb7393eb6aadb5d6ea75ab242ef72de6709d28e4ee5ced1b8ed9f36750986d38723fd7b320276ecf7eb4edbaeefb56d4dcfc5c99923033471703825c51930613825c7bd23a1409668eae3bcee3eaa4b47aa574ce49ddebbcef3aef2aeea06ea006aa369f232efdb6d69b769ff2a2c85d72c5b5b9b2d2d0912e8d953792238ea9d5d522510e6a6a6eac120d452e0bd04064af8bcb53898622d9f6768dafaded96b830792acd408677c58de5a934c3151085198e2c3083514c9e58c88881920c62b4cd4f1d32a56fcdb0401ec68b19968b21d314a55568a51dfda11ea54f89b2c894524aef12c5825a21cadff7b65a2b7eb6de6c25b3f7f329c7abdc2a73b1cc7de5dec6f094b9bf4764ee5d29682373ff4d94c85c0c43e459019cca9a91726d9b0eb2bf65d224fb5f265d64ffc945aea12c53fea89d21bc695c7942e989179e50812268882598b45041a9c9124f3ca08d168ed02205133086285b8c1666f0410b0e6b4821940488ae11a54a911044b400050b4fae8821831060704972c2024032380121440a8888a18925650c91244a152ce4b00200f254f2c20906502abd7436b3f45224fad65a6b8f8eaab596f61749309db1050f4c5c5c995454a9e2c8174538a4a04a87c486dcff00d74d0eb37e31a76735a19528b2141cec5832c3134b9a727dd70b3fb9febf9094ebcf60900186eeb5abde753ee4f6832448c95087e308c7110e1cdccbe5a2f9ce0343446c4b3599c1c333e4f683244889d0d0f7383c53783ca0e908f68d87c04418c9c3d3c48d1e0d397ae213992147ef650f9bf91992488c84fd8e8c1c65b0df89fdf83172f4c811449000cdde0839f675623f7ee4287b99388ec02777afff9179d5571c1e3a851a8d30b0755b2f3c4b15474b567577772021221ef73bf4754c178b7abd605536c2622f6bed673ffbd92fe66155363333f3aa99944c957ac1be9fdff7cdbc0c65bfff2aaac2acf7791eca437d1f0d8ae643d929fb8a61b07fc164d6cebcecf532ac52a55e8f427db666e665377666af75d90f7c2f7c79effd14ad08d3c3b5671e697be6fdf7c2e3375ff6fb60f88565b287c160327244cd503ff3b0978d2872ec21fbd7fb9881bdecf538fea13e8bfaec2c61967cc150cd62817bad52d96e76a95c5f0aa7665e2c954c77d7ae5dbbbefc0cbeffb51ea3dec77fec7dd0fc58cee0b17fe66729c3b197bd8ff1674822343f3ecd8f4fe43ff65595ea2ab595d24a6deddaebbe4b7555a5bcf00b433004bf4f06ca3e10cafd8a79faaa52774e4be27445913dfe63ffe363ff83869cd66b3d5276687ee62dd933f3346f1fa462d8b3b1c73ffe9d7f4cf648f9be47f6ff913b34df33f396b4d333e8ba2f0cc3c22b176d913faa4fb18008b9d120545f33be544a454333e392c9622fbeac5244aaa779d93fcd8b58964ac93ef53429d9ff0b26127bd55f4c44ca4eec554f64e6c7d17b1fac1fdf47eb55389d5275b2e752aa7f99ec55aa4fa964df375a52878646a6337aff83f5e3ff68bdea41191efdff7d4a1a3cfa4eea65ef2f237ba438b923fe933db1179fc63f5bbfaf7ed66b2a4dec654f93faff9dd43fd923c53e0dd933438efeac1f77c497913d3172ecc1faf1775aaffad6ab5e74a9467c5d63474b19968f6d982b2f412e1917a9e33264d2cd9da149bd0fd7ab5c9f224233edb556f5ef4ca9f729fd2990ccbbbedfe5fa14d9f3ef22c7ef215f46e67d4a193c7b24d5bbde84d4cb7c93cb75619e47e691bca641eafdf53ebecb7e893e3510454aa248b54985c152eabfe0b1feffcc5f3cd6279fe6bb16ea641e3f48c318ec7a99d740855d9fc232a9942b25f31a605aeab85c328fd358a7c783405d90512fb7242c4b4c59b638a1d1a87eb9bd004d99729b3273b8134a87e8d010a7337558ba828f225124f02952129625a62c5b9cd078ba81f8711ac49822390da4371daf512424244b912c0af51fcceccd6022a997791a4c04ff3f8989d0fccc573cdaffbeeab40d90d3bc56f308b57b14d6f9f9893dec7fc67f3dc65276643ef58f89b85ef53458ca4eea657e061351bdeb3fecc3f5aab7b887eb555fb10f994f51a4a6a4a9c3fd2992cc3b812c4ccb57165f86571fc3312f7cdffbc1a38e4ba68e3a2a55ea57dfc2310ff35364e159629ac4e4b414839f6c221205fa417a0942b58c09452890a2403aa46d6e5605a17e0744bd3c0af53d310f9223f541d1f9349f62fec5593130ff22830a53f79dc888a92b909e65eb6d7309e665f02c598fc2302008f3e0b340989759b5da0433879f80d2fc6160e6534d2687a04c50abe5acf5acc7713f459dd6e3b4e7439c46c5abf1da90a75bc107318f575bfc80e611ea730ff3137c106609a256246b3eb9977d082d7af90e43a01d345076f059bf033e8bec91c2fd8aec89019f2377500f43f6bc801ff8405061ea82a2eafb6e91caa7eb4bc30824dcdc1f760dfcf0e640ce821157af181828a37a095b17d56da5eb6da4aeb9580fe2d7c3302d55b806a725be0b4b793dacf53220cc177965b0ab31083b1a68da7cca627bcc1c3a609f806ee03f244b083c418490701bd203d4c98420d305e1c9d2d3f4a769fe1493c092e0e64a0ee999b5cf9ae2c8913a61083e4eb7f0a537a0e934ee7f6a9ce6ff3ff753ffa3aa71baf56ff62042daf5d291ce91b61bd5bbf7e4ca7e9351337cf082a2ea254c5dd410d7eae926bdf8789d2a92348ea9a358ec6db3bc92892f99d6bb50cf93152ea9723a15899bb9cbf02c632fa652a98fa564b07fdd6891d967b2d76ad300181acd187a52c4f108f1da8f14dfd13b7674acd55c712698397cc427483dd112863c8120486f32630c3d212a0251a89fa28eec71fa93e121284ca97cf66d336952a054eac714bd0db1d35ad2be8dc546e0e37ad883b3a92315c3a91fb1f8b6d9cccbfec7587f4ca77964ea65ef23f53292089158ec63249151fc09ae385a76b3bc0f137e0bc73c15753a4c3327b2aa4ecfdc5f35547461c2213f767a9694f4f58b1396ac71afe99a7b5ff5736c72ec217eea7d84af0a3f15864fe45f24c79ea5889d46e56ed085a8f3f33ff3608732db4d8e51ec7a6f25796d458d6c748905976ee90aa49b62cd009ab7cd2510a4210d9602c22c5b0441c4b20f71ec2915757e4c185f7c13601f3ec6b404a9d8c3f5fe0638407d1dd9ef12200d65aa5ccf042374470ea931c0ac5126f3aba4075dff4933901078820821ca4294e6711a08cde78faa6f9b4c355ea34242dda1e8795efd4ace11461b9bc1ffdebffea7f52e23779f3a6cf6107ae63ce00b1997cb23d410ba36a469fe5bb203a1e1412abf90717bec21fb99ff117b9a6f51e79f22a199a14a681015a248eca82386b2076196329288941dd8874f64fc184904f642c6f53c42cde38b9f81f1330023c367bdb0ea5d2d7c3f0683bfc2303f552c19d60acf9f9f97ff51bdf83ff77f523e37207488161d25212d39d34d92f1b11d03c5c10f061b675535a38a8dad2b8381201882211882210caf7eac3378962050918646f5347f69545ff1cc339896b28ffd14c75a61ee61edb076d70e6bf8cd1c96891b7e48ce9e79557d1506825ee8795e18fe87e0ec594399f9facdc066407282d8b91fd9c37e06ffc47e7cf0c111d0dcfd5849d87b5e08d6d0fccccd8333f0822e90849abfb7d7fe144111e6f7164f31e7236bcfece334f8e1d3fcf8303c86d3560c865ff18861b869c6697cd8fb9821c7efff697e249368c8f17b1a18397ee4d863e661ef83861c7f86843d8e8b30bb74e9c225870fd28ac51ff12cab080d10f1087ef836733082e48b0bf71b00d29d3db316e663f8e547bc7a188e79174e7d0bb37e8a3d70fa5e55c7a59eb5baaf6aa95e625817669562a5627cc06e2981f3867dbdc6d72c661c3df6fe40bc16beafde59ef2e7acb65dce5eeeede75aa5fe1d4cbe01717061f86615e3f7e0ccff2f5211e9f8a39a238bef82f71fc18a665f798e54feb573fc5d143b9d7aefa7bd7b9bbbbbbbb77d5ddddddddab9d395c84d123755ee377fef21fdd2d89b2230af5b9bbbbbbbba33e6b7f8a3ab1c7e92f86adffe7ee394ecf2c8622baf8e3f8afd145f727000dd723717ad618a7d6f7ea7ba4f71e89a3f37a8db8264fc6ae07232b14723c784a46a4a0aa45419d2d228d18ffa404d578112d90458912e549d366b65d9712b01d7e7640a25444918a072b3c6099474510ddf81b5abb22e2ae102a5d579e58c4804195fb52804ddc17242c13f7250aca0c274ec458120e5d304f2c621c096f57264f2c5aceb0425c9b27162d63a06e379527162d59704cb7cb138b162b56441401da3e83fded6a6c9b4a5c9e1aa4b8a3d83338bdbb2b9d5eea0a9e39e6779cc7598eb31ef9a29dfb9c73d2f234006e97cbda5abd72edee73cec9d1669f02aaeeff9a39a88e1a6677772f8c016daf61d3e7f4a4c3ff4673578edaefbebc2ced1ac0a5803c1fd71bd7d5ce0be77c793da54034c841cf7e61126a64ba7e467321f7042650339be1dc5849e50958f150f33575d49a470fa8935e1bdd01da70cd07bd14a57f9b3a660e6f48cab36f1dd4426de47e5b37b1b5ad89a4645b1751692bb91d891d6654d1e1c80b145a984100b8e8e186215200430b2a5d93b022e1644875d7a32fb049aea801082dacc8c20a203d3899418b111b8eb67429b8f6a32f78ad8393922cb2a02183140d440b81429877e8a28d3094c0a10a227ad812450b47e470841436b01143b714612cdb6ee4f0a70c39d4a10cff1a55c9e1bb96e490082e72f837295b9418ce3a98ed72c520a31ef59f9883120010aea7a6cd7c030a126adaf4608ba1a60db143fefe7b4fccf96af6e7acd9e7c41c7b958440caf1accddf72ba3a00215cc8dc573187b3d3a6de6eb7224eb75b1936152a5738c8fe5d53ba3617fdcac64dca49e1d30b1fc501a4d68a3144ad6b03288ef2cd53098aa22573f6ae4bfb6d61adb67b5bf53c6fe6346bdf6994668ee35c4ea35d776906ddbd7ef5ab2db0f4daa41b6a8f3a20da10234989139328346cf04213495fac51c409104cc430f2b23475741037647f0fbf68228aa3168a68a204a62b6284f1f3c418485ce884cee08105989853691046b2ff68cd5043e886e18ac2f8db32a6c490fd5fb70c294b68eb0a1055b2bfccf441411619c830a50d14b4400623d8c0e104a3234d415ec0b0450530334a3f9891fdab3f8beb50a8f0fabb5a89ec3ff3da064a088a410b1566100aa2ac289ca0c61a3bb0c1821a65f7820b84900039aee360c41caff5636ee8c6d25434115d050f48d81e4ec8fdae1e76c8fddf4397dc3f2b4acaed430ab97dd822f70f3fe4fe9598d35b848efc509b5b794892e376e78797dddd4130b260438a122c4881a9f4145019a20da723ba78c2a1f425d9c3d021bbf3f09a8bba32d5c00f57757957e9290d05074772bf2b0a15b97f66426e2949b977e822f7abc49cbea1d469016248620117496c51c269c543171c903099a10b20943459e926d0c475e19077647f510330763812cbab316270c20fb541d5257440cafe20520e6a7c624e4b91c395dc5f615045d00dc35527e6d4a41c8c647faf6d6cd4298f0dd6d0f2851a30206389119f24c0a021053de8e02409315cb0228ca233ae8b527a44c405d74d6f69080551a719655f81412577f70dc35501888e64bbc4b585b187d2363a723369a00394a33c95a0fc641bb845a68f234f25284a40a64cf37cfbd3d57499504fd9ae2e0a29539d59433d4d1a0d670d85e434fab3862883433db303d0726d1ce892fd4bc8fe5c967a36f353a6df010e77f47eda505b327dd02367e58c96ee1bf9a390bc669de4804af201b544048a0985844a422da1988640c0c30f5980a0210a138e4c608a34a0787a2106404694960ed107e98f15ac1514ea1a650287dae6091158044ee9da3ca20f1ed136aa4c1fa4d23653098726993e88d43662d7c2927ef51fa0a246c265fad4080547dd42a68f426a172c7d1453e592e9db266e884cdfc9cbd2020d277c29a50097fedfff3e3b84e465691bafc973f29abc26afc96bf29cbc277bf39a6c101de286a8c1a939ea88ba22cec8a872691b1b17c4ddb81b77bb010509dd38a229a0a0f24edf4a1409421126dacc52ced2a2de92a38efdef6739451d14397653d94e958d6beb244b84ed90d3e82b691b6a89868684a890d7663944547494876e1b43f4b924178490e0d4c2d4d11f823e92401f8d437afc43106466c9d569a4b79f9925379e59f20d091012a01714179ca043144bae209a6450b18189105c909cb104284849904f111dc040c10b13645004891286a84b0a4c2f6021a988928e5428d3264376c812d92290c96b1a2d4cf96dae8ee4c87e5b8c6dccfd5c9791701fb131abb9e9c7e907717ac544ff6c963b4fa51ba0648aa7388b21e356b2aa98ba8d7e01e480a3e9f790b6a1e4386db4bf435a64d670d036ba42e4e47623a0834cb30336985772ff9cb506e4fee63822da06530a72873d935ae90624b99f7029aade68e4eee74141be01056900a42efaf233c77c993a68f73273f0789f52c7696e6ba2dc74b261c79defed7fa47dcf23afd348f07c8bbe2070f6db6c3f9de5c61ce476a499c3951bdfc87569e698edd52bd779b3d8bd331ac6a8981273e613d755d7ba54a2075f8eb9ae98b3a2726dab17316775f3639b65572ce65acd8e89a1315c7fe7266d175859716d37c38839f446cf56565cdb2a4f3026a67a4c4c4c4cd3d97265116897266d1cb0351fd86c677f153df01c4efca0c50f68c6d991c12ef4c40fa8a5d6dac9a52cdd8085654a9ebfb2e2da38a21493277ee0652be6f45b91c727e6548bf250a80ec5a12aca514d5113a76c26c8a20ce0ac51fad3bed8b800f56c669f4cf367dbada9a9718110123535793e8f39e7fc020815d4f085131b39dccaf93c66ed0259b058026887135238a25c020427054750ed707b6c1284a0cbe5e904165532b5de31fc331c1d86c0026ce822df78c065176b6ee032d9bb0f38f206a00a241ef5e6356832d142104e58d9a28a2aa6bc200517282083053262782a43304a72420d3da88165890f0c3ed490440a2d47609044e93fbb7b3a69e5d28f45b9efcfe371f008959eac20d7a0b84f7cc8fe1c788d0072b89f6b6e70782429e124a644f22675f3a02abbece869dea7ec7e517c1ab247d633f329726c9f52c4d76ed045d2ec26ebb444172c66b4d4445444a350222ef489c869fe3a5ea39191f24ff3ad7f11d3a4fe69bef5b3ac3abcf7d7b1c4131dd165e2b825a2a229464754ac2461a14c5c77996e531355a26436296952a2a4a3456ef476bb51c00d111125222a9a7244c54a129625a60f85e2a144687c4d375ea344948888c85222db75dd4ddb04d9d13521b3e9757e7e60ef7a9006e39fc1ad9761997f8c9f2442ea8aa60eafbbd488b4a9d7e07752af01d923a57b92ec697dea3b72477c4cf6c8bc987a1a2cba5a5d17aaa69315e6efffbcbcea2b4f113d4a625a6a221212e43ab97cbe5ec5c06b8b74a6d5af98289359a5602e16a5d5565b6db5209561d5bf3e36f3227ea552af4ffd4cea259b799ca629d1528e721ce5a8adb6694aac15044130165baaa914f3b4287e4a64faf163c95afb1ea933f37ad91b0027850f20d6e8c83533c7ccc7fec7eb69ded319fd1603baf13ab0f185898c2ffe0c2622e57b22b14fe5ecc0fe157bd85b7267fcd70c4efdeb15fbd4efc452ff913bd633ad2ee416b4f2f91a868915c5940b19426f4755f5329248ec552a18ec670953d5a6d8cb6660ad4af334b1d155ee2f7739cbdddd3bf7ce7d6c181efbc79fa5d779630fd88fef03f62349440a91994b12f9b1c7cca7de47ecc54f61d98b98e62915c71e339ffa1fb117ff6756793f8305a24da8348cd829835422c4680000000002e315003020140c070422b16816667132b90714800d6c9c4a764e9c8cc35994c3300a52081903802180000063464666689c00c08149ca3ed8567865433b09451cddb60ce199b0a17487d837d1f06e01a25e2df5c1fb02f4dbe8b7513ee1f85fb81535e713bc072f5105c8b6b5ceac7505d36b26daf9cee016f54254bef926755baf5a4f4cedffd42ac650a74eb4da2e908f87e42a6baa1130166681b0b45fbcdfeab79b596c6ebe3da019b8fca009ea98ab324d00ddab54a2ae39bdb00782f44eec7c2002855f728b7d20041d960224c5e6b3c01a7f9f2f903515dd6d1517fd861c1eb6c132968830fb8e819a510ada33ca096f9513bcf76d0f0a00724a1785c2960ba962eaf7da17f029fd854cb9c2851c5de0003a3ebd311d7d2851c4abf42f8094008af12c256047885f1e089763a75cd1e010a645afd29364fa7f9f83b285e1227ae3288e4dabfe0bfaaa2157cda52de0e1c4c644d81d8262e4dc4531c95322026f826186c020e3a181a876cf9268ab5f9ed75f003260ebbd0cefa7c3e837385a879b7d94b122c8795a6e1f037daa5d9ca680ac8aec9d49d2f8b9da4b6bbafb7ae11cc8159fc0de7a287c3ce3d51c4df4993ab41bb3df26bde48ff55cebc78e7ccb885ff6aaa0da51785822e52e317fbdf014d947a4c4882e9c92edf3b14e79d0775f630162a4d929337cf17360b2d551464fff68460de4fd37b66ca7578a5d36140e6a76a4ba7c655416e96ab1280d13197b4e9d0ed869fed73c9dd2083bb2454efd5055967d14fc1a42d4951369ee1afa2ac754ba64ee610c24fdf2c8105f4df67c0326825342d3300e56d00e84dc144fa606f99341be63033cc015b54fbaf871373b375c7c5af17921c673bf0bc96a54678155d85c159ea1c5b7d98e68deb2bfe04cb40e13255898a38f97e5871b666e0312fa913014adb816965a42975886e2210595aee07f003dffe531e6e012690e06c440ba54dbce2a045236f8601fb05e1a635688ebf28c01f7ae85ef35189f9c683c4feac9cca2090bdc08de8240a8591a013833256d28ec1d4468498a877cea7e85d12e57848358b1b42204eef7f075608423597f3d80de44e345df76a533e584b81fa2c27cd3017e3595e0cf712d96bd8131a3fdbaae876a245f070f785ed7c5151d973d3b4fc4637cb8407101244e3a2ba3742694883eca54752e666fbf126666425092bb2f3eeba7d194397af45d03049926e34aeccd2ab7e112c64e1fc8002c6f1277681500b81e5287828d441f8a1e0d50010aa29eca3322425c42b495e689d72b654bf68bc59bf892513387210150cbfd536bfde5d6dc86c65035366330e167c5cc28be1945d2197ed919e961cd1f0c5532c4f7d6060d5411c6ef20c17511139f7b78339367c3cd21cd86700769fbbaad4f54edbbe3424601c3ef20857c791ca9041e2429baab38e92779abb2b13530ce52c183cd9a18978c2bbbc5a15e4059d7b0d97e4d64341771d03ce519d0d3319f19c0ea718d173d56735c2d18a1c6cad94ddfa9aa19c42f82edd7f5590dd1ee18713c5384024bbcfb0ff29438b34398cd8afded6b090c432aee8f1dc7f98fe9463a5f5ac7ff1da7f655351ab2aac3c83125d9629792d0d2a77eeb74d76608a77f212b4b1e49a6e6004db9a66614422d3b4cd43789d6cee28eb18a277ead559172f894b2aaa6d2cb36c7678eac7e144e8d218cf12ba466ec72776e5157a2802110f5a8ecc2a04a99052a4f21d89478e92e7556629a7e0a8d2977e5788e50b6fa6b798c715c70240ed28d5db8d1ee8784430f86c652721bdc139a77bc0d4f5472c4e7d392d09efc1ba0cb0fab5f11aadf22eec3028509ff0e674a42e022e3491e860987134edfb3708d2dfbab9a475fdb34afa714d4042ee73826023dfa970e37872395b668deb2c5d7de00e68bc119a20e7d4d161113b1a888818ba5e58e709d016e14394a0b70dc210a4193ca0de3eeb712f3a88a964b07ffd619c0b4fa5bc319c4dad9fc4115b32acc1ebc9278c4cedc47dc99e4e31842180a1109f2007be314b31bfb46cbc80957f54c07b5ea0f96f31da2d2b0d4a1dfef4f90e98433120ff32254f451dd7edb314a283d3e14dc55cd4dc7704902ac2a61e2dc8dd9af895f25a161ebc9aa73080fc68ef26aa3946dc01c4cc77b7fc0f0019804e8b4d479c57e49ff5c9266162d2cd9a9674108f210449aba61c66f47b440f5dc65fa7e6b03aa314ecdb62c5440730bfb5e8b04b5bb6ca6b54c12d9d947a0c9d171361f6eabd43baa6a6d63e0a84abd6f1278d3f53aeb469f21fd25d090a4a35698d1fa8440724032f9af7d7a5ca99cc07b08ade6e9cf07ca17fef97bcfb2fb3a3e5588a1c6199f922d83b5334b1bbb366dd104f3b6834bb1a37be2e3dfbcd5cbf34ac9ee730a9863376d895153dd23218039584ad7e33efb00a73797219e0a4c364cd5650865e2252eda12c63ba015e76405781f4140563acd22dd1c3d4963591d632ffce38639a0143e5a3df20dc80ef5823abd841170d96ce2960a803273a031b14c6108338c68c8a408c756460a1826b0522b277f9202a5c8d13eb3058b44b31c6e895cc8a7e7ae61b177b5b079faf0103c657c9454834cdeb2936ca78985c4d85b4ef0305a7a22c79110d1782ac145745cd9355ca349c4ce72214446644756853e0e1f340ca902e8a9608d33a16624f69647b37fd99201557921be28302ece871377cf0e3a70a0ee476244ad9534722e1a62f559061c861872ea867a93e99a53beff7cf018d8343ed3527067695a22b5340c90eb8994ae44d7c633d8f3ed8640fdf4da7610be37b26ba02a73e24e6e0224b94f92129f61664113472235ce87c46b9f821e74319fe66caa8ccc14892670735bcdc4a3b45ecc078b5c2d36cc8c5779fc5945a738a418247b4ba8423ad671504d3ea28fd69185cafc9ef5230b554936a31c59282cb1450c5e00a964ea90926a7dd8d666d9e542f5ec7110c7cea85451cb0958921ce68a3cadf2095bf06dd15e9725bdc8678c985b669fe45d736de5b33824500fccecfd66a18c6a415dbfe4382d4447ab8a1bb3f25ceb5cbc2fbe5ac941831066d7314e75b8b416f1037cea182fd3850d0169a2a424e528038c91854e9c8ea3def0b5aec01eab9f836e8082293725f13ef2a44d0ac5597fd11211f146bea806c53e173485e3d38b39b9d01394bc163a78a6e29d8566391a34e0629058798c4751e8e0032f65b2995436b9a97dde1bbea63d33db1806fc135a261c11106cc25c3c16c91b50dc5d4889179e4ce32e3d6ebc00ceaf42c184f1ade9d20b50ddc2f3f066748e45a7f8395394c5de949cea58180fd251c283a6de33394fbbd83468d79966a899b42fc83e6838019127a0c13ae706bc1147a4ab6cb84168dfbb668eb727ebb7898fecbd6bd62820b55e876f897d0076de3afe24d48a772ec8118e4ab027bd20472c41ef431c04c42d67562404460e60cfb4f79b56061a8232fd7687a1f3c96da391e47d5c94fc495376ca18b92ef6e5250d0c5a2b766707dcab2978dafaa1c270168d07f486ff6ec59b2f70e6efbf2e7ba7f383fd8f835eaa291d1f589b94cda0ebe77db733b23d1f596a37bd0c73fe4814fd89a61c558447c259ceb302ba328a3dc859105680de33e717673e4812a77fb2fc8da8ed085f70afa880c5023dd5107cf1df88ff6cbe45ee2186a2bb15c44a3e85bb27b0b4a0c4d2b579b043f8650e2bb1c98477e2a9004f7f649b8e126e8867b220ba9edd14ccb07ab54ed0a3e4c9720fe0e292a5c5c6f51c20e1b11932dc7ee67556a2baa01a715b541e335f80bd24999a8761d04a8a468996103b0d5a891774b3b1611d102c41a93401c6e309a0b79051c89673a3f1d9670ff9e8d9c0d68f3a54cda743492fec5841c22ba7bcaba8e6953fa6d7f34dd663ed0f94b382e0040367944a41b3ca207705ed7538b54586f4df752966d4f9427283007809bf00796bba2b0f78dc544faf687e2174c606fbd7a25d28f8aee0ac8a2a937b2de9ae3e2aea2054642f96b6b1f3c7ca399dd6f0993758c98e8f67cab0b4fde10c8702cf0f4eb241f65172d4889a9d8bd84c8d656c9c13dd4d48825565c373a0411150bb59c67aafcf4b835bb2c644047903b9a574353e1662efa1d7579a6a1e1e24b29ec711ef15154e4e0918f1b0b1383604d9368fcefb22c98ee53ada194ae406762aa238073dc42a7c8d95bcb653e2fbc72a0d6f948c5d05e6e23f7bc4697dcba456e6e4faa82630ee92d944c2b164063f04af3a4a971be2bce28382157505a50809bb7ad9f45b9bc0b94dfc90036529980ed4308dae61e878265d5ba47966a59d11490b5a672eeca20f409254e3028fe5f99a4e994e35f20d3d385cabae2037ba5a1fddf7b7291eb1147f6634d591ae42d7e775089fbf048246f0248e5e6f8b669323f2575f26c4935cd0fc4a79404f7ab9288126a00d58bc13b47c7328cb62c5f570d44b76d2f099ffbb63cb363012a0db85f756bba25cae6570bc9550799be84f0e9dc8dbecfcf866190b21c3d95f43be52cee64a2477969b5f1f5da2bca3324b25a27e44a763320418ea7ee94949dc1c1afe569ec39d7789f1a4af5d6e245e021b2bc3661d883c177eb0ff4807b12b09ae4f293ed8285d67b41fb4207f78e0e15f51cc5fb22c9f82417cf313422b95eb0a211d7d3197a6946984c9930eea143ded0a7802345edb95696773e8812a8b51c633f2464b6b4cf2b30608df7094a81015d1e8b0f121ed1e3aa8661211fbc9b6644c9813b74d2ad5792e5ce20ab041482b0be279099e80229a424890be80d748c8e0186fe25bd842a94fb8775ddfde1f324469e852bc276ca01322f947efb008de96e144c4e13384b9715d0875a744310fd3890c40e7e4e636bb0090f359ee3d4c633222b0e50dabb2b7e2d6b28217af9411f3ba937c87ef4a3b96561d8d27bd91b4f483515e301a535002aec901f8cda3f5ece3a5d918fb2c7661d37c5ce83155a31534593fde09c6e1ad06b27aa191fa714ef14f1bb97c4e1454b446c0d2745542b1c7d8191b3f1200d5b3b5e631f5854f9bfa7acf8d5c798ef6f5817ba01ff4549afaf9cc8690cfd1a6f22e8a72a3b1b9d5ae86abdc29d33405ae2abf28532427f4620464d97c477a321dee89e7f2b5a8b28cffe9ce26f48df3ecd4da72b8f5f35261eabaca6c445d3acf2441069d30c92cebcbd927212f7202b0db938851adb953920d97bfcd2c9a9a329fadbafb03c04d324e8c19b88a9501428350ae0d5959de2cb5826ecb03b33f60055a2652acb216789205fcfb0a19a3d2895f02109c885034e94f4ae5a0f7ed9654ddaf9f95a02c5b3b3b63e8b1cd26e5558c7a75096e1c400fd64f2fb0a50ac557fef57d7c600c414657442878c28fe78e3e05eb01cb460e6ded4f86928c387d029ef9d78b4916e8808eaaf1e1cee081eccb8aaab29f6b321bbf846b71ee2498e77e89ec87d243fce09282dd3786d7f4287e9cd8b645759546bc45349a74e0cbd714421ecc9f6756ace4f3cff43510e0306f762e707ba9f0ea18b27b204122aa8185061349672da17de20d551db363bdc9bac4f3af9509cabe23f16b02a48703314f1b63a8ee6c32ccb7ef6c53c29b389a7ebd45b8d6c858fab086556efc992db6cfe7312d70c82319e0f3ba3bea4b788ffbb32f179922b7ceb555cd1e9cb0f4006b25c3c8430a04cb93f61d56d3883c5647b27c1d69fcf2d16b2329e65260d95a39d89762cf65972f029e3980d4d15679d649226c3ec426c97100f8ad20ed1fa5adba60e59d92bae4c5aa8e5bb73eb9f50848d5d73455376416b96e79409b655a391f7a239b768e48f023f836c4e916a0a870db1edd18bb6f5feafdcd9b04eb867b9592971b9123ec96cdfb4ebcc226db9de75a269600f3992f5f05147672a5d9aee8174586cb2e97b0c952156319690793bbfee455a8b3c48d6aff4c2df6f6c93c76d46e7d9f96d981ec570ed796c0eb9e0e448d381cf2333a9d8f07659fb9ec422e3a6c2dd4a7fb8fdd94b766c59043577dda201ebb17d227b5e89cd3e79a1924258cda7479debc43f6c823cce3e9cfd9326ff5fbd1ce666ca300bab36173a186eddbc4cccf7bf2b3b957f399ac5f1b569757b0c8ff59647dd20462da5f95cdba9dbb40b3a6ffbd24b3dd4f7217463745c5b34da4610506e3882cc4d62f707cc8fc351db6e33995d920359e3d3beef71482799e40dd57a808f1ad254462c1d7e6bb67cffe16bb4175cf66905ed43fc22b8cd218b3738dd2e7c834fdfd653663eb72059fd9b774bc5343dc41d1a1261eb07627481526bd04a401a2a17660ba4c0c571a665c81ae3bdd003db8bdaf65fcf2d637f2f40f030859b35336f2d5ada9338edcb55154044b3888370362aab075c074a4ae3d5723260702aaf63a2ed5f4156ba79022c4cbc142741d7f734f5b9b2d6dab228bc8b16ccb7ba6eccd0fa06e9af139f221acd96630e4f8750584d3037085d0ef250374449bb2356a0315049d7b96c6f22a75131514226866dfc2810d7c52d8dfec94bcb5967f91b1075e016fe44403941467dae7edeb5b76df7dd7359cc14c981c121e225f4afcc7b9dbb7ea05926aed0ddaafd7a53a2a1f499db997cfea37c2712e0c7666eead09abe1f1c1385792ba6f6f9e19e920730605dedf369436932e191a370ce57dfc7f334800912b1aecd4bc891ed533ab051b8134e0050dc4316a3ba40df61a9416a4649ab797750cae89e7c958a50bb8b1b57057fd412bbb62c0ff8855ee245a14c567237adf68fca330669a267b64dce0be1d590fbb24f555eb82401e7b3267f086699b9276f23d4caa3921e8f7fbd6f8b8e24be8a8f9e307ef093650d31b5075ec0f7656eb34f31a6f67cc411f5767a34df976f3dcfd2cc68fe4c9c90dabad19e3163fecb03a8fc5972295d5c6782cee6bd6a80290a80ed1d780d830ba6b84072978991eaead1b4a4a87c83a94cd6e07f1cf4eb24db985ad0858e0beb71ac82ba38a7be234b380fcc47697143ce1f50f261702fac7b3bfbbf79f0a62e6162dfca5efc5db4a0c481d831765f3bc3a35b9c4ca04e12d32d2c0be4f838d7208f5cd524713026e14f8007cb831abaf321817c84329687e2f2c0641773f34f7bc58ddd1d7881494d24f9232895eab2bbb998ece7acac1e5bc019621da4ac567ca97947499d4197d7a4d2c3b76396aacd885d9f8870ab730b70c4cdea74afc62cd1becf05a36f6905bbab1cfa584256798ceb212e0e3686786713f19116eeb082535d6fa0c66b00831ac6a765207b73c3f518a1a2a416cf311713b2fe94cf9b0f10979e78e4d040035dea1859e8cbc1e142043f58adaf94dcd2aadb5cffce44b0c168014e536dbbc1377c8d4c469c8380cae965e86fec10218016218f8d8522f1004ba314869f2049880549cd2851fdfc9250e50f708d4ad5a655880040a27a0986d1d7e6084b4b992478e0c03760f09ec2e238c5690726436cb276d77a57d44024d10a8406a36fc80728d03b35e4c58d01ba5585b619311095bc7061dd33701f01821ad0f98f440fa87105000690c4c198e2c084c29be7f7ac3360f174e20579f9ae2196c33b55085a3ba9adcd2e976783f33d1efe7dbe1a194d50ef122393be1e4420df0b8cd8422d907581aca3cff174f7f3901652d71a38cb1d8fc3197ed4d56d29900e0528204014ea008a7ba81781a36b53462efb9d91385e54d5e26190c5cc731183b19409ff3de26a566a424ba86dc5294c0b738dfdb416e91a06ff0e50a8373a3f5f1f52a91bb2b534ed997dbbc09be479bd3a8a19e80ea833769bbba5139c85da9fae3543936f8679caaf03439971fd653fd83d8f85ea902417f3d0cc74b523f3533d4db5ac36934c29bd493e05f843f840c278ec94049da3b7865653b6f52ac29f9316fa2988df64c1a5e864686309ce44d2ad7dea2f65970eab8c2cfcb20036f1228be760611217813306725f6b44699652c7ca816782659d8436ba40673f6773bc68dd3b4fdfb3879c52b03e9c2dd349b099f75a2a021b67b1a1e4d42a07803c6430ee534eba4596002a875b24da239d907347c9a6cc13cce477049562cbacd62ebc49346a676d2e2bba7ff811aef6493f2d2cfa97f8bcbaa918eb9904648d569dd01f79afc2805ced29f3abed6c6ce40edab80e6b8d04a845b76d49fe278f88d3c98d7ce3f1f74cb35c3f87aa38d00fe353ceedf682366cbdef011c0821cc1fcb53fcda32f04243a41d30fd6e3a9f00110623cdc69637ce4095fcac11fc129c06ea5c194e0dffa19d81ba3da2b7cb3bc2124e3cb3f73178a88354c2d0c5a573eee4dc1333d44d934a5d034aa45b311802110a2bd29406e8ca589cd4117f9f700a7a4e55e78594feee07e3238bb2743106c016c72743ab89f707d496af6dffaa1443328f75ea40b31fae98c611d6c3f351246eff8e39360ee7807cd080ce453c91b58d1352528fc73005341103dc69e5846329ef2f4b34dea24f52bb1911ef2f1a440a060aad5998432e7251d2e0726976693606d02f37c4905c64217deae649b6c1d04268d3d5688124a5bd070be687f80a05979d63de4917ffad8f149c7e4246e745647a49048252433add62073c0bdbba38622558e91e5cb08697003427ef0d8fcd9eeaf4d2fcceba74c75c57bb124c13a9fbb64ef7047e8bb5eff07193af96e613997a4a24e12d62da2737b6bcc298a983891d1e47906ce6b1933abdf3d6e33db7d2089f4d550beef8ee9900be26e2531756ed4781fc1ad21a0a10058a8631420c5923af71ea431400c727332ed8ca9f263053394f5776f3ebec3293f3001faad1bd7f27b2bc6f2488255528083413e06deac24bbc5e8e81634aebf8c342118764fc4004448533c379e78c4f26356ebfa6b36b42ee13106a1b51b96ff20914b05b7400109add58d11c1912e755a38af118604d7dc1862b52a190e28795309f70bbc9e058001abad0ca45c0378a482a0046c7018d452fbda112a3a70f7a02eff4f583050d1cb3fc5293a8feb957b6c281af3daad520a16d03db2f56bae212db54ec1c8090eeb27cf012e7d2cc036a1cc3ba84810b6e2301aa1f90c6f1b7d656cd8a4c611644d74623606c65374c290a95362aa13e88c42d7d606fda1c54976d285d6b4aaf719f992b738f309b9d93332ff169d42e8b3611ec0be0219565012fa28f0757769b3352089207e5d46511b8b220d600d728673af025417493149287aa7a95d2e184b639cea3d2de2374078cee76469ec17562acb9d52d156418c012c5b6f6c155811baadbd1a585784290c2ce7c990870a8b6ce68b62f46b84daba728ec9cd0978459b4b36c507cb428e0fb839702a949dc36f59e08a8a5c68b02cc7631f4fc64e31ef5fe2c9475374691439a2fbb083a2c59b566d8ae29df61e857dd0ed806c3870327c03e3f151cc0aa73ba8002d20c8d42416247f2189562343d019149914f446a7e2d38d63514f3a851548469c308acbc2934627a26d45fa1f88791aa5df2c62c56d801f7d6d45386f198dcdf4bb609ed44f902280b2945e1c49df4bf50ef18c48065c309e437302d7ad78d8d056b7053ee44627ad3ca6af5b4b3eb43bb880d581d69b29f921c6ce930bef8e3b8d3c2fd93186c8cbd321da0f3ce8c56dea16f640f3c44afc8ca0f538366b239a14865383f716036df02e7520da0980497acf672de19319afaf88449727a9369d4a948180b9d08c1e57b48f50c126a7b028d642ba119a591223691a1fba3f7776554bff06cd5c4f213fd50407980f825d84e65ef40215e0da49b0d17dba931b519e9676d45463e9d938576fc620a04ac3675a2a06eb94bdd812ab4e9b8b1eedd5e9fb50da83ebbcdeb06b868fff57c677a115dd9b0262862d5a66a0742a87e6fb1564ea6e3cbc91a5385b2aad30545f4647f82bf003ded79a4459d907bc9d4baf1570f8c6cf4536a9283796177f0c85e3ecf302f5f7714cf37377ec003889a37535fe40b663958104d7868771816db6dd2e4c3dee663ff8797700534d8a5fb6cdff683607cafde94ab142fce8b4590f0c5007e20448069b89439bddb588ad075a42d003986907288ecd916e39fb64274f02381e609623402f28504d47e1c694e263c2bdc579437a754e0fe769037449ec3bf00806bf8f6d83d3ec450cba23063957bdc8c18e1af991f6ef056b3baa14fb3bb109e652b064572c3f6f4c005507b7f8976774eb5b96f58e908c5b2b62d1dedc066d743c4ac47b93e374c47b6446fa46a2029f5cf28ac2a853d50a4b3ec7760688a7bd924546b62963d5e9c4e32b5e5da03cb16deaa115df24b1422c6ad07623ab81dd1217d55e8b0d9e6f9e202ece1f2e0494de06119a49a114232b40ebb071979d69df5b8e5c4f5180e172777342c7dfa7abcd01e9af84395049e53b319b0c2c47dcf357de2a780ef40f318983fc74eb60566b61e609dcbbeb605993f4cc58d0c18b20e7327e06f3576b2d78ee43ee39762b413cba0a3266414a3cc3387a4f96ebc00b895b34229c6d6728f67716e0bc047577cfdd68664a1bcc244ca481b459d2dd7f07c856e66dcdde3df2381d0ec927eb923b4be9becff514f326f76c6fc891c9f80e808764f86e87bdb275e3d9d90a9db798209725dce74c52ee6b3e19d53ffd186544826c8cad062b60c7298144568fea58b6f77aee0e75e0e21d17749eca7400e9cd9ccd73820e459412310fe31ad752109b735f741d9377d853fc2d84181edbb64e8d6ab06828e9332a21e8ebe251bd106fdfb51bc3bc691b64d08b972190c65879ef46a065aa25426f32c583c72b48e36b2549cce949a02e4b70684bce94efe995aec0d11bc1afb75ce12cdfeb37c17ba0a2aa9adec53db869551cd147e97d3063c0e4ff665e172af7b395c3f2981b111421e82a9a6a56fbbd8770e94d8b1dc3cb10dff5fcf0a6f6ae4b4ea81e95c60e709ba5414bac4ab8e6da2f1fbec90fa45df3d9e5bd3fe514b088795ee554cdfdf653ea83125cccc2057fc8f870097b29e3009cd8713c708e298b4623502cd7819702a08cba89fb1a76c268126b5ab25a7415fa9f3e7e025fb5dcc84e6f1176b3d82f2a0e8a846fce4c3511f1e62cedd2d180413ba6a7517f1f71292cec995c9b524598a11a258087ee1de64695da52d327a4861e462b07a55466cace33f1a987ceaefae19342ec3758c706e60f19c38b225f6bf93d8f65dc5ebd5fd530cb7d5dd699a798be2ff779ad6303f542d97953e1d84561ff9cbe5b0969b3ff861f86b58eeae8b4d7d4d9476d29bf027f9f2ba88d9a5aec7261410c504ec8321a9128218eb48e2e2b674d9c924bb303488feadf2feb989355cb2509678a8eccde2402fccef993d1aa0cff67fc6cc1d8ad827f7424942b4cb1ceeeb276ac05278bf65110d6c721be4d514b89c82bffa70b42d6039fdf57acdfcb0ad626438496c4c3c3849c49d29457bf25706c560278d51a871469403fb1bb9a9a51d1c5cbd56c8ca9e642b37d834a086a972ce8ef68e3ea2c1d985661834af57756b5485ad399d5d906d47a3dbd6ad04e7305e4ea51edbb87dc27620ab6d3dc371bbcce050edf6425e4f558af4d04c148ce7d367a525036b56eef7dedddaa65b41ca0435bd7f6a96070a442b55ee4041004163201ce2ae876c58a2a0cb52f9e35e9314f95875603cf0e2d47ecda5b681cef9a1e73489afcb41ee5b587a0b9c75b658ea367ed7d35d074f9890298e8c9884c6ba0c67b161d8db208229288af9bd101df6662602f73696bea26e8ae02626a5d951664b5fe4b643c9ab1dbd7a1d8f7ca8a6f390d95052b380267e5debe2fded9c75c94529fe7c975fc6cf0bf4b9b7fe234a9412e9a929d08e5d1ecaaed38de8be5f9d69c054b1b5abe7a4d7808b81d88e7b9c46c4119f99a6d431d5c30241ba8a0545cd6408290ef6df4edc596863b59f12ff6a72dfd11d61c0ce17c0b6c38a7f953606aece390e3357fa89921968483b2020d36244d91367554ce68a3fa27b440d37592be702fc8ef0905b70ba6466985cb9bab1249c095a60c528322ea176db6e8c6b4999d1f2a0cbbc2ec1826cd30886aa00f757a8a7c0772d3735c0b16cfe1fe6b0c04654d5de4a60ed81705e82df58290f05a8c599b0acfb5c82d3a326c7d7778574f3134e7f2a09188d4c2ce028ca4e2c1a931a8e6f061410e3c3549cd39e540c28d4c11dd58634dd80a532e31452a9f90a2395dea58ccfec8309e38d482ce7f417a52130c337984badc9e2324aabf29505164098e3bb630840d69b4bade6ce1fd9adaaf6f33b3ebebb30364867bf6d97694aa04168809522024d8ebf7aadf62345b40af526aa56462c55ce2c05672e20b988f2b868a0948cebac817f2bb5131bb71df312c3ecdbd6ec37e69920ed03fe2e5892d22d9098292f0df852c18191f84159231072826f8c21177be57e506311a69983e43ee533f32db4ff96db2f84d378a7f80f65ddb703a10a468f363a4eb7a401f099aeee0059839b81c8e0e5a5c974a515c95c5bb17427dc984ed8fcf5894fcc0fa719c13159065c1c9c60104ec1d1858c20fcd7baac37f27f0b1ec63a6b353023808d122d48b35c57f27eff298b27ba3a9c950f397d9e930f5baaac776bd9632dea006dd7510f8f7bc61a0866375b4b404c464e98ef10a3246bc46312b4dcc459482aee18c591491072b2890188a332eae3521e327d8c2d4636d009333431a2f258f0f31b26ef318e16cac25131c0364b4fb580599f7a6912d4a432ee204382e20e3f8a05e32051af76fdb949a4c906434b2ad69d300ce01e822c47c8254987303571eb2e368d1bbd1ed389c2fba02f146299598b05dfcb99437589dae6c8400378481e95639b35bba84432eb5abd8d403de297f13839dc00d33a80a5af5d0a4fe69447785baf01c4c7759e5a696a37f5b51380470d90ae5467a928783fa62c54ba04fb5fb67828fc29ca8170fe4fe54031c79d8e59ae259f2dfced709af8dc5fc247f1fbfc9cdeb8cdb982cecc574085a9e167debc0868749cf7ed0c36c68331b85e0335e956da0b6f268a0f24f314d2cff0b3c3eba88d122ba6e3669f2e0c3f45baf2630e78e1ae751ee693b4bff1fd63c406a58f1289434b76c710f65c4fb310f119f333de196161a776e5d1f87cb2a1be40588cc83fd547201603c879d1e70a52770d9c8d673bf6240c35e982ad5e370633a7083acb22a242d555960b98c227e7bc71ad4f7062ae140954c961ea0316e3e3b8f190d47f58f01e64061ce1a1914e4fd69bf9e6310b9102122c4ca8ee8ef8208c80fe686b1dfa2882115ec2b658ccc52f31fab72b2b054f8eeec3ab9a775213006a9102de697bce3bbf3bb84c42815f0ddb17956ae7898cec9fd176143257aa1086edfbb07721f110f116767da4ba41084d5c0c47b5d9327cd623d513526699969a1db7fda8545559613dceb5ec9b0ca8b0e393dd4bb906d0411564094f468bddb85ea45d0b809804a79456188178225a17b82b43c63fb15716dff3561115d32c439acad50e6ced98117f8e581e99505d6446d2b93ffedca1fe26429d73258961551bb064b41f30374d7bec241f6a7834d0ba0b459af5f98f8f90aebe7a531b6573016ec7f6ce5bed8ddfcf2409535c705eea9e056b0a5ff2ca7c25248f0653351d77e005a04170f1b76bd578fd540baa66b324b05e05296a22165900a686aae3cd7ad7d2ab8f303042910494a057a57e9f0dd67bae2c133053eaf3fb863b18b5016aa26c40358e817de849fd1598e9082acdc3ed785d4b316ad79b1fad2297e2d51a5e444106f32ed911351e92858b5ef232277d4ec6510e22fdf9ec07afd3a02dc8210810809689d3a8117be22896a12889241d4c2152cd48f10d0eed752d4da66a0e86420f9adddc073993e082c61f9887c40060b5c12cd07b4e008fa83f36360ac94b0029be0bef622162c20337911cc83953b3a0a5e9f5c6c2620bd7eddc5cb57c813e82023f76ae2ed236acd3ffb3ac03c816dc7d1c926f64f6a78d1c7d4ff0de69c0134215af5ebe02e2c6d44b5c420787d8411c2a90c62ca204a746200322d9ba62d9cdbe00212622905dc9c25dc1a13ebbff2f5b05625835fff0fe4b7f419d6934bf0b6f6415d5bcafba46e5db793265208e3183d726c6fde9b07aed1fb9715d5035f378fb45db7848715f782c9a784d8ad7fcfc5616e91256324a88e6c7a10a11812bcf7a088c480f82cfd486c55fa57ee846e85300ab4c653fe5fe48a36069c9882dea7936ee0fb7432b72cec99f4e9d893ffa143fcb992217363f494e3b8b77cc4a0d6ef1733482e02209e3a1ffb9999fb6fbff155b7c1222ce3a4b9aaef364b89dd641a1a6f1e5c4f6d482afa7bcd6f96a6b9e537e5129c6600382cd0956684e2977264ea8e7b5ae7daf0b5d63bd182f1980210586db2e0821b921bd8f3e14ff67c4b15fbc0720f64186f8217e0bc2707b867508fbbbbac40d99a8712bb276182fe9ef7770011bb832e8bbc3ef1bf3a0bf15f67d2ba633d4a7c3d6a4cf0dfd4e68230719d49bd73f875b9f2a81bd3bd548a60a8028ac131de8540a2c4eabdd8cfcfa00d98022700302e903417d98c22cdd302d8c3754629632a1375040baa8bfef0020a465b1ef223812abfc3a10d80f043d1fb054fe662ef20dbd416611e0eaee8c4fba5124bdd80c176312c6a5eee6a1ee99b0facf46615ea1401b7aabf68f4e75ab8af388467c28a6b46428019b2f83cdbdc6e0f2f472d5e6223b83a5ecf568d90d20ebed408a7eecf807655620ba915b93ee859e802b9bfb1cc0e307348294b0ce1d0b8e4ee022aa3a2f34a93e9b52098c0e57909572ab3b371b4c1e5bc0403cfe620d8bcc4a25bf3df959f9d97734528bb0dd95ef26e8bb97a70a5443d70afc7f8cc60affd2e7aed8a6adf03f01cbfdf298d929e9bb890cbd839a5cf90eeb93d7a1a6a75f1b980a288ea49771ae790c1c0c61e07ccd61b30b164ffc37550e201d60f287189fbb53b57c5571a98b410a73a3a6aca613d75988d754af906866b5e62ff7eb80f3ad58de6c725387e7a3423f1d8aca1e13af6303fec8308621e18b5e12a70daafb9d47f3c038e1eaf6183bf80cb46bae7102712e9b8a4b1616f5ae9800b496c131d0b0b1f039e1c3dca44b380163114066d4773e349a27b33f3f412dc923c4e97e45fe1be53f6ab10fcd7fb85ec5e707a31f0e26827fe7eca645b0eeac0d91f18cec7ddc7428e4006338e21ba181d261e96ad84833177d8d506b67506810f84f22831bd885ef2122a2b4cb1d977b01e3d2328e0488d5c6b329885ac7c46d17c56847864204fe9b45a0aefc770b1ba69cc3acafea3028dfb8f71bd1aea3931194856568f02466b60e9f793b64361ef00c8f1ac9c37e694f71db2effba44bd5a136c305554849d45e9ad438fe4618802a329f1e229e76a5d16c84f77c533905ac8b39dbe83cf09cf7d143fca8486f80b296dfef6ca55e3c647b2fddfac9df0f21f302895b93a4ad497c6ad40c08493cc160685ac442cdb06e47e83e0cecfb70c5851f3ae0c45fc9961f26de5b491597e3ee81e107bc4a94bd9a8d6aceb8cf4ed188c8143c8dfe56bf81eee0b12289447d444ca5ab49ec77c74cbde83ff55613357d1a838328101f6ba8cb8cdb3ca19931c1e9556442afdf53f012714ff688706a39c649fd9e648d0e9dad921765389c6f351eb9e396321b20d24577f9e6663f812d9c97698f7521072f14bd7627a6c3262a5f290773e86d3cdd620dfac047653bd49285ba9fe685d3c104bf75f11e7cecadf2115981d2dbdb64e386de461b6a27aa888ee4452517b7dc6049b0a97651c019a80649dc04df78b66204d627b3a412819d5d706e391fb3426b81b96e2be0e411f8a9d8d6adcedeecf2132c9dafc3dc39b8e6ef99b5b29a88dac092deb2ee3e7f95e4371dd1ee717ee81ac8998ae1311d8b5aeb80ca9186369f80bf8674533f734a299052c01a92600ad9969cb7c825d809e87c3f642ee127727431b4705e2233dd1f0340518256b189e2d047a89a1e280cc62a5d36197968583b6f971ba275e5e04a9707a7ccaacff7c9ad1e0af2d7642c869961193416ba14c624bbe432bc8ad7eff6a7d70c45ab871d66f1328212cdc2100d3c66060c99625b6bf320e40b091979c5ec4166263f8270d80c4cd1ceca84bc221d7b55228a15b89bebb4033911cf58f931bfecef839d186704d86a4b95867ede161238ce9303fbf3266c1eb471b5815f7e3d535e12b9dbf2e9eb577a4c0778bab9587df6aa0624aa64c7374ec2391fdc44df62939e49d677f3879ed1f408f6a0c86f9915540f992dbd361c4b8c35ed8ab945d0c6ec77c10d84975161cf116c5670ef4267ce77de878ec7d959aba0a6703bd03d621dee27fac7c4de1dededa7eabb451f11918d7ecb6d8b457f0895c56b81c26071d09cd8c2bb248fee68d706556a41a1a17ee703f9489d0d04bfed63542f8b16f818b16461beda6f2b11a69a5c036b5d7f0374e9cbb869e1c21d114e93788d9f122edc11c334a9d7f8e9e1c21d3148937a8c33152edd119986760876107025a03cb5d1915389f20b51df716152d4a611acf84213a035c6d8181306004a8a9b949fa2f253d279c1bf30f1a15257eb9136efcdd81db9bc9f9b488d693de32b776b0f04cad835801af665bae1a800d33ee8bd3eefb841e3f69c41635ca556fcd23ddceae93f46aa3fb29af346a6d7ff3fb33905075cffb7edf39f4ca0efcf363bafc8dcfae1779796867e578889866d96ea3846192b316a377c50f8f92b96ba162e3a2df16e4ee2ceeb0822f850c39a8660f01ebc0e37639d3d30dd9b40501f4681775d88810ee4153e3c82b13d5b2de25c332465130136caf720679208a42e4af015e27a3ef6dc561a6778424e2058626419d1073fdbebf5a442c967093156bdc79aa1d743324146732eb91760d1dfdc485cd823ccd0ad3405113fa171b15315ac32ee5d803cbb9872a36724535422def84005a3cf84d1506912b0892ca8d29fdbcb427e660f9af83531461728a430c0f2bf02470cca86d7af09044c6219db5d2de17fa579c27e43b314d12cca0911cb11298526247fbcbc5c1507b5ae8a56ce7c377e51fd53473cdd18ed49c9983a4b0d9e307e7cbcf3c4704713f274d16d10099fdd79c971c985c5f354e59e29bcdcfc2b9e27a8338d79b2ccd3f8e679924f7d1d411addef2a20f8f1f4832ea0ace6f783c5f15e0a713803404c6786ac9e8782d08995e43065a39da652ae9350b6c68a2a5ba5ac0b06ee1a845ae283ee08c02d1e3a630b0d54a1484387e8a650100a7d2f571995653e4c62af92c1bce94613c11d2de466306797801193f49f721430fe66407c5ab51552e266dccdc88613edce0aa387351a81e691bb012bcede08e40d727e4c2694962e3d9c87a2f17a3b0960dcda5b9699b784685d2299434a62e65a9b9ae3220b24d296e884209f3064395c3650222020a48704c1f015906f0e73ef19a2b1483496a4470cdd179d64215afa054dba7d201a584f2bbf865a6adf611b9ef23f327c6a11956f4963e62694b7e581f33935aae2d6140ed313880059a0dfa0cf0d55d3a2a8f28b58ec6ca87dd7474868288fe933754e2d61bce49cd0c4c7cc80c5bd40f78a837d2975bb0642eb025e59bf91e160a0167c6b36e5df9b61a71472af534248cb4d1d39c6c2079583a6fb79788c1a29aa4b56f4d205a2319a19cec07dcd98db70e4aa4680ea4528ff22b7b200fe4eacb9335813e9e8e0d43e0699978c0f5a2038d583947f3189e6a0be7781cd2e6174ccf000ec31abd2e7cf34d03c263a6eb3f91452f24c1a9a2fa2efc09c43cf758b6ff021c6b7167d00c02e8b8732082f49b0d5ee95510d82f8273f07d4ae14bc1f80317dafa043df76c4d72c09eb2afbd24b1cad7db60f3cbcc9903060301b974ee1312859eca72e05b6844af12bac338ad142d3798d5bfbe252bbb0abd0c66278ced50829a3366f3c4de1d59cf859254a888d0d02ffba28223b76cb2d787fc71f363b5bec12193907eda80572263ee84691cc1cf7c9a04cceab9ed4d00b5199b3f9fb78fc97f6925aa1453505d90bf658698ce601a85e803e0e974dff756aec46fe8d875c0e02f541d52cbb26f86e554d1afaa6f0ee4850d2e4f0b631c1745635eb0d2c7a447514ca3e9e84f597f5c5924b52ee3fb1a29b11b0f8589ffb2592bb84c05773ee6fa40a5d291d5bac45d1279b564ca030dbd79d4cd9401b04ef9540a96d23621535c86e2773e1a2fafd52725bc682da2bb1216f0acda8293b99ad9696a9877db651a9b1de755b19eda36596ee9e3d11c3ab97980b414d00ac87188dfe4fff8a7e9c609bf7c2ba9e7c19d9c480faa54e684d50e83f17cbe083294c2a7e78cc0a2ae04c4ea49cd301052286335a85d30b00e4683f1e74e22c8805e63c447b9ea69a5870e8244267d2b704fa0d683a0c0b55b7091aa251a4d339e94063cc1e36d6df6f92be64f2294755e2a54c702c5f5396b514bbc87da8e341d6e4b919b89a2092f5820c9be3cb0eaeedb6da908b64e54935362d92109250d0c1e6c74b05eb52f098f4b3dfed8c8f73383bdd87a499e36b921bcb9014ac188af87219665a80afba5aebc94149376f7ccd49727f1ee9b19da9f4576f9574ac8adaa2eeb5652fb6cda0251765f1eb18d371c251cfe8d7b66afd9e2f69bf164642ac02a225d783b662443446ddc6d5e8c6d10e8b738fd9297b93561fabfee9265171ee9e3034de1b998659c5cc32e3ace65da3915c9ce01a73c0f9f90c909aa640aae32eb276638aec0e40fa797971a5677ae5881d7f0fe6dffbf4e8ca5118a061cb8c6f7e85462d4a3b669e6d0228846815fffe4f4fd904fecb3052cb9ad2d7302754535dfa40daa178478e542a54669a3777e7ba0089e07f627402269eb8c0e8df9ab3d2a2240ef4c35c0c4112d241415ba2e683564a0059a0a612fef3b4b4464cae9f3759edde7021905dd828f77cc0da3f90e897411b87c02d05f0e7207bdf40465024c2f82547d99ba60f24033d0f446bf010fc22b596ad7a7d7670d59a24eb2757769e4bf89a2658e09f58374d66f40b31d190de6b5461767bd1a486cc4ddeda0c2548ae2475010d991eb74d90b7e8be7e9fd5c5bde90db85aa0bff7caf76015c2d80c2acba83fa921bcdc7650d7a840564c075ed1847b1ba80c09b37cd01d50234698cb7867674a69d73116f29e97735d88d783d5323484e0dbf2845ca10edd74e9f6b56e7702cf5c0945a3da69794966dc9b98b2170cb8e9ed7fe4001cff1299934ebc568ab05cd622a20d225bfbe6325434c68adfb25d7af3dbbd2e9d33aae608d278d17c00f7f01058d84fe0faf0cccfd83f0e00cd05548afa0c8131fa3dbfb8fecc1e669d6709b1f422fef08c9dc2cbc449cbd8d62ba51ddf29c55cb5332edd6214fdb46c6b522e4838ffa6c8bc3d0f9355d7629e9be6840ae65b2ca7fbdd2bbbec718ffd9ae1ab4717fdb7d2a3e07d7667641f3aac984a59996e883a87e437828f1b1028eac28f1ef10a9e4714d99f05e1f26144753ce2116910205c802b2aa07b0ee6cb3aa5afe1fe1622a5d6c04fe72b8bcfe8db8ec34c79c7941d2f005bebbbda170fcfb83d50099a3f243d6e9a748de89b3fb4d744806d1ae5be7e76d8beb6023a92925c2d42ca85f03413ba611f3a5f95f48173b1db030123a701bd40b29d5987d39ba64cf8b663cecbcd0c2d99defbddcebe959c39045ec09c1545d8f7f0099b3777675a83c11f02f1e5b1abe749d9a375529e6787cdcf47fa5100b3f029704905756d5b6c50cbd74748e05732080caaf282f9efe2121208fde86d42374aca1e9115a20ed39c50b9555c1b3b269c48fff483350984885b361e0b35376aa85120ecfdcae609229ee858281916b754758ab87c1a90156f4b9fdeec58a837547d925a13de0fb9c0a279c5b1502532335964b303c57a4a7f16773f08d0ba943d4f08aa34c92eb7368aa541494280be7d858dbd285f8e3e016ba462775c64213963198b68be9f14a846ec501882bd8754e3c742c9f399646f2befc2c0991f0199754941c52d60d47948929d834cb893ba84205319c701fe77f7a23504a1b5c6cfba8450fbf2ecef56a04b50d1a1d214c20f5775bcfe6e6757b994cc7bd05ba8b0de0178f2b3f50ca656af280ccd2e247da83f9ed221096b272f8aab11575471ee419e3c8f8cc1b300f49d1b20dee0295dfe4386cb047a4fe922cf186d12789abb1ef62c6b06f65eb8beb604265341f2c341e5e8a51d322878b139ce7e13a81c968f93bc4ba4409c4d58999b0bc9f87c8b7d26fba5fdb6864d06708f092fdd40afe1dfe32b6bd1ccaf1b5b39be3de8ae5fa554021b30f5d367df82d7d23e90a06a39a45a0fe4cbfa8690ac0121021ea2a7506a211982eb17bbd18ca03fdf011f9a13ab68bb216e0133e80a713784a3489c8961c6a11c01579b95d96f89f64046509c9a219ab7a3f05a6e603900c917cb3d50056ee7dd851cba43e39834070b45fcbfc04797093d26a26585cd14011718ae946cd1ab0ba694166d7422d7c424fe02e7318b6639a2305b0d73a29a41c72c1a29d4f4f4a118304744f3cb2f6d4a857b3873849c4fe1d42eff3fa0b346fc79cf0169c5daf25dda4973756970a41ba91bb30223f1f32051d16eefe73b02e5a644816a0f807a8435838f78fd09949d5f5aeb2048925b71105b879ab82702df660e24c08eda69d4c4f79827928b35996a71b04c2d51a594024934f17b03504c0c9f1ac829ce297b8f9204638d6b86eb0f859c98c3c8b151c7c1f0671b15fb06dd62300442653b6123aade573fa38dd31744fafc66e1444924886f367bc765c12c70784de84213999e39a814995d8fa7a377e791e2fa49416b58af667f1343741bff8293eb8784f61bfbdc29ad40999149e2f81062e016ba343cfdfaac786eabb40d01cde6872f98040d2894896bec43a9604c3e6c2030d9f3c22cd195e4d08ebfb0cfc41c29fdb1151f4ed901eac62ad837293aa448c8a94c1f5445ca3e8588e970736ebc7a65de707618b6844d9a07c67a645a6217765675f06d0c161f38771b2a03cd6d139e997f6fb5d5daf406f4e2e0d70902b570ab18bb110580dea6f9c5bd21a7c9337d70141e232a01c3d18eed004f9ea9a2cba589027d340b8620b812e538fdde341078268f40e5106c11fbf2823a8f35f98e0055142cdfbc79422fe0a9cff504c46e0c9259267e1522b6213b3e6d0f6daad9680138d154cc9487e6a6c1eb63ff6b457bd7e0e7eca75c3de92c51d680e68435007bc278244aa3e583431f29129eeddb7a0a939a51711d00f654fa1f0c637689893a0b4fc179e30d5b6e35ada391fce032688baa9c0d7d128271e4f2416f14f191444758459699282a865886b2298ea3d7bce3c32a5fadb4115e51d69495fa03c4d731b6f02956589a752066d37a03f10e3b3a520e3e655ac181422ce843f5ff347307b4c4d87b78b2b2847e2f7cb83e47543db1c7a8ea18b09ff4b61efb00c8991fc29d1ed1b93463ca94dc779bd08ee9e5032508b6d24bea13c5a230e22bea606cd24b58dded6603d24b90d950aef6265f1cb244a082a09818acb1d1d8fab4879f4eeed20b8617bd27942f4e1587609c4cc4c411a788312741013d227e3925839f0eb9f87907193d2b0640833071b09eb8bf514fdf0c6ede6e887bc51c0a72a016893c175ae0895ea61d632b7423b19786975d92c48e281a2af84b7feb6f5104b111d3a6104ed745b94c5c9768ac0d7eaf345f223f525823c79dd368d75c86e2f4eb2b53d84cec85fcbce33a1d60cf57594f521cc546b884cae3efa2f87ed586d50fe1eea27e94fc0e8af7ed25d0159436a1036e3b94177385fa48917c5fa43e6e397dfbdf0bff024669bffa6525a30eb1bc93dbd47e29f75dcc5deb9fdeaaad1ad7c7d1251032cb33d7ecb57ea965618009725b616741bc97e2660651aa14ac8693f44eec2d79712aedac52390061bf8b26cb56b4904beec7279956e2dcbe7c69eb7adbf3d4ed4318529062efcf004df013fe9216cbd31d26a78e0e62e920b12df4d83917c3acbc9c10857de9f8016c0746698425b19f3665011bf9dc1d3eab98037c1814da2b4aaa6c5407a7b25d933730c42334e54d32c8f817b422dd8c737abf21b1529f780830411406bb153d19e2b7cb170cffa357c85e00fac5c410b66fc30a24bc3d30505c609ac08a6992540e3169827c1f859af7eb7c6f4977e64eda53a50553cb9f2865c5943d4d2f9a2e470d1dbfe24684feb2ebb3a39541541c8d4bc56815d06712d4cffb065788af01808f3f795a0198c89690b0cb5d65e15fe13462820ef85eee0376b10f1007beb8a4beb14fbb1b2efbc45669c21dea4904db4198fe3abc5e90771be12cdf1ffb589f069925e9e34a0c02de04a106279ec8f417a89c984dd018cf11bcfc3b324e82ff0e281908ca54ca5b839d39396c536075282396e7e8bebcd206a4c8ba954e7b44bbee152b15d54c98a7cb5976bd52c1b594bb9599ff98a594a0b4c365ef3db7f3a884275e2105d346369c889860964c20cb4adc373d8c2b73066fba3b28387be66bd6ba94adb2ca0c0c881df6bcdfa0be2d9b0149d31d989cb5366a8092f0c03a81d6aacb1bf4e49f5685d878eac19db3ec24227d560f32f013e38788d49c9e3ae0ac1dceb600ebb9e9fe38215b802206d8ac153c7dcbdb445f59af60f304d492af029b7a93dbf08ac996ae271e5be08e1ea96ee8f3110cd8e6b7ae5849b4a08ff2c39751e63d15ddccfa194ad2e8a2916eaabea5bcc8192446619097382dc7b4cb9dcddc084a62808a753cab3874b80b32ecd192d940bdf2cf487d44e2b588cf4bce21b01666fc18e04875a41f779a21a41e2844d01ce92ea3bd966c7430b2cf8080f2d9ccd17e104f4644aa9360358c0a96f01a3815b5feb48108d82d0513dc558e6654213933b57c30f61015a2d40c9ad196b09999b4cd87d3a55a5544cd783733a99aaba02a2d3b51f509f24dad46908c5549f6f26da357ffd99e8220754a138806a3f0bd4bc27f8d38abeb9cc5b6205efb0ddc7d2086744af06845b78407e7639a065291f38b347d43812220204dd27b02ba57b65ec53468b9584bec86c8e7975387a9bf620c223fc56b9b09f6475840af4c9118155f50e7a95ca31ffd6c00cf208334ec8a72dda25623926559835698b3b9bc90e4c6d24e7c87157134828f2a6557300e7e455a02333f83c590871c3a0bd17c6191f94a588f32b2cff158fb3144279d7e5174c3b72df11287eb77a1fe184e046e431f2f32862873f45b7a4dc925761ff1de986c32ac5beb34ab438ddaa59e6d7765996bb9918adabad87b8b6c059b94dde19a4253283dafff58dac3164e26e69e684769da6ddcc963631eba3b556393fb0cefb44e092898e25a928f44f8931ffb9917fe907e7f4025947e68449cc46994b0f030e53e1b42cf23ee6f509fdca15d3989e308c36bd8d2d63d8b437427e136d9ac2978c037f214c7d8bff6a62bf0367591917501968ad302a769ed03e084bccd12f00b17390b0ca9977d98898841654fe11404b485d05089d9ce14c444064414c2750bb509a3dd109bc236711caff5171b8438e5af790f66cac4f420010b0a1c33e23ac7b1a9371f1c2f2f7eb79ce772892051085e3fc08ad792b330e8e18a26f94a2c8251fb7655049f702d105fe4a770525d70c54ed7ebebd6867725687c8e6b347c9362a5059506da1a6c6dffd5f0a415821b3deca8d681e3766e0f39f314140b3c40130872f245ccd801e73e84008f14d3556924a1157751e9cb7fd6fabf590762b0de94ecf0281c042b4f9d717470576e5fdfe768748b90000789dba0a42ed1e267e2889f0e7b1fad77a2cd4c91464844874da03c06e7436a2b152dbfbe9820cfae2936f9b946febb2ddb279f863423f2aa41a15d87fe6ea3073aeebe5a46f0a8c96c8a220d22d256bb9b932984ee957316db844bf106911fbc905636a6c5dac3920de60e5fb57b9d6f4be197326a8ce9759b53948f25a8330d4a94a9d682e83063686f147a6e8a06cef2569072d6406dcfe13040c57d812327493a10a57641ac812130b088d97d9f7ab75bc41dfc0e4869af126343cf1af1e9593f61b0d2a60f68f52f100170f6dba6e370158d3898147cb5ec7c49a700ad8c80c8592c6fe1425d6f73615999948097696d339b0829eaaa3b1903af7520684d3c1b1a9841cbd4d430b970ea3367fe147d014c512116e7d2f2c31c04313bb6c04c50f0b691f0a625fa1e62d7a713129d258dd3e2d1521d9e8b4af550a53be13e997aa48555176f85f2e0927f2c31f8cb8bdf46abf4174b32505e02ed43109dcad8d77c86c11819cb6b6e12f7b7b7d1f76e7340191964dea087621b423cff66d4c6e16ecdb18f788b8e26712b6e5accfd591b334b71ebea1f543b845644f59f440fb8939e9e7d63eaa5566470b5a2f80631539e5223f73a4fcb77e0bf169e59e3c91501ddf7fca401a0409c1eab66dfc99f2ecf02d655137feddc8a0071bdb4074e6a8f1efc23fa5c571fd6690999835a42f9a8d65d4b88dd9d84972325f8a463e1395c423ec82594c6568c33285aa272a6a2b3e16e344a049258dab7106abe5dd4edfd8288cacabbac94bde2e59ae06de1f73bb4bfbce44b8cac92587179cf57755826f5dc2e6c3da825f9b6141e7be8813b9d0afee960530869927703a6356fbc2dd3f4b403e450a1202b0fe1a455953ca07a56d4179925d525b622f0fd0e4e23773bbec671de8bae99c951d0d62bf9aec424e8e5e1f62d6b05c6ca5afbb08f8df6616d00e9c87f8d3cc0455a70530368115b7d4a0bacfbd5532afc9cb8f6e8859070e3253eca98fcb733c430fed81af3fb4bc7b8d048a991e159348c8ec5c28018091dd082b73c1a3999663ed0d7a77418c3b12ab70af704dc74698b367591d45195ab5c23528c8edc85083bb2456d2e17fd244782fe119f0b6c4d6956914dc9cbeb88f2ac7bc4b9ae900c9c286cacec2a5c3b82a0d0e0dd689c60de2a7cf61838feb23293124e240f79dd08230712d23b787e91926480a384264b1c8fce10e5356481d4e40bf8bad6e94c6874d07adddeb6d9000684ce8ee24ff819865948edb0e932a98f11c5d9c9cd7fb2613a77c3a11db1b744b9cafbcd56575f52cf69aa3dbc0801f642a8eb699883359064f70ec0e55977cf3d5644072d0bb51fcc6ea08f72c18cbf4e812517e8dc7bf1a155d27fcbb88eb8a68848814f52208055c52083946e524dd7dbb22bf5c43dac1f3f06dd99e961b494c7f040157ceddb3f0b9e112ec848ac7c12b281b4fce071054b381bf2eb50ab24af936f4771377614de137bd8bbb5e05baa0fc4b62a23b437b6a9062159b770bb382ffebf8a8140038d5a6c0071553eff706b418d555b781dab050d4fb520610a3eca6a66da7d81639e16948d4b73507e7131ab4233aef0b89e7b9241d4b21b84727d40c88f16f4db118370fca75e2d42d7ff8c2cf8633742d99e5a28cf0a3b17716e1571b6c28740a87cc47080b81445d548a2e446f5f5428d0acf505927d7dcd87edc16fafbd50221c1b4234bd45939325a48e06f297ada39a410e0a043e5b9244309726af4fcbd75cb2959ccfa818ab1f5ce82115fe8c9fa4902182ff428bd380de62ae810a4faede4738fc00a62a558295099320e100d13c4eb3d392f1089d088404559ce17993d68ad41d1275ea2d9332ef1daa6147adcf72348e3470ad56d0fd2a560dea7e283709fdb6a0275538242d480b8cf740b1d48057d4ce3029394d2ed2a4a7b87b9ab81155922bfc508142e49b21aa6b468ce9a8b4f361e052ba2a7ae1229652c8d284299e8e8292daad35f5285c16dbe215bcd19d9ab5d2dd9a6152e84c94b7273d051b3bf590f0ddd37e1c05c6b023e20d58a1cc93f82e0d1366715871ad2f55999eafaf0a1fab6e5199e8e48f2b0cab94c10658b728c2235b87f206c25e725615e1bfe6d127ba3d5a58e5243374c29e818fe4d6eba530c1ad9aae5aa6a0b81e1f847a0ded7f26c371d0a16655b108f740318359016f1cb3dc13075952d54b21175301a79c274158844a95df1c1beafb3e2be3e997c318802f6cbb4c4f79979308569d31afbc7e770d7d69fd3456ab5502b2ed2dba2879f60ba89d24b3448854c0255b91147c6a8f990b0596304931eac4ad422bc8e008d56cd07ecd9b5db42109122953c5a2c68a51696295ac430ff5d097f5601a457eea2a8456e27d410fd91aced6f4944859115ce60e25fa8e49f0b2e83f299b0a6c862f1bd2910d51b1dad1162f1f0afe065828446d409e5fdb891a45679404b0e4c54714d1df8d3a25fab0c4299a9deca2eda4caab8a635fec06811f87d4014399b3e0d6e70e948bb7ea78875b9ccf827981e2c9478e5d7c3f62cc465bd71b3288326ff1082272471d06ed05f6f9898c6c0e789274c4917155cf21ba673ce97399181fd2f6054e690358186d5ec79905d1762819ffa61477f2fbc1a65c14991d49e0bfd07452e0402ea83a10940020ef608d363f6aab1cbc0f0758f6bf1ef9b00937272dfd030fe68190ece913e4aef88561226839823ccccb100ef74dff32bcbc9b3ece221a836d39d4d247f434c45b789a678d8ee9a7353eef7d2c1f63659e28bea16b76da9cb013354da494274683c513163590bfd6456866d3074d167cff080d3bfd37d36d1134534973386fb34c841ceb83014c19043931210f638ef135ec5892ce1feabbaa06feab8a620ba49173658ba97499ea30e7e8353de4e41988bb64bd8912f123a88795e635a26823d7b011454ac72acf6591c918a27fe0580fd64c2907fa46e9a2b9bed846eca312e141368bc2debb96bca39f4e358c019c31ce33711101ba02cfc32b81f734e033c38e6d467ee79471e000cc9eb522902e5389d7dda3df1522c0c62d9d0a5afcf6106c07998d89a86e48bba190d15c9686b481af7102172d2dda4bd1536135a21390b170777e48c6e44b447295e76c8ce46bd95197c7441964a33bafff9cd8a9582a834fedd15460ada764e9ac4bebf9b2684cfeaf5323bc5ee98bf58d8e9f4abbfb0a10a79647d10e140a8ad90005ae56f4b40f1eadbcd906414ac90ae46f000c4058b185f234f1a7057d8872f7fa6cffdc8effc9678bbd8f1462f464aee57bded26acd2ec778c57c2a66f10a2fd2d43f200d9d621bc9c75e3eb0f9446e21bfd28b4606749db4f08fdd8721de057beb198294ecdac66b09817199495380e3bdc322472cc6bc774853e92b4ea3e74a7f5897510fc2227c6a58488af3f80000e0daee46fd4909b883f20fb5d058129b6f094459f65fca5f0e5f43b89393f15980598bc5efad90f2c8d8f1b194505c4fce6ff908d9fa0712aac93e622e8098120de65d0838c22822b8db3104e2143685b703d14f0b1b18d1add72921ed3f280c9040613738b93622386c7c6562b6bdf1238a077344ce2941b092c482cf27e61fa142db175791a9aca80911b22bc1691a061106d55d039b7c6a63249e8828ba78c8ac1e531c30db3dbbb06e5e79a3d8b9283ccbe84fda6c5248a707fbe30e3697c2bfc6499c00815d9f01cd09dda6b4907b88eaf1dbe2adb241ae9db51e07ca36327850da70c7bd350c385d29d9a2a55fa26011b7d1c77ee4ef88ad5134432fa53b379f2d63dcf296e3d498f89fd6290157471acc020f92611a710a487ad6664dcf861ed6f06eda98427b7ea5acfe462f64b179d6b5fdaf891d8da51c7ea36a7c3ff047f1705b304f26b5a4ba5323779170bcec313a67e1a885d96303532760db033adeefb97c2229b854cf9f1a0ae25242a03f548151e5270630d6c3e52a53edcf6ec78c74eae3733ba9ebf32c198e76056836c9a69e743ef298858c35e907578c66053480d4c4ac42a8d415262292d0ce0fbcc060133eeedc0b103fe62da66a025de74b5ab5f131094cbcdb25608340291c7792b10aa0e1dbcf98e5dcf05862788df9c59770e438ecd322ec6014d1a4e7b09503b391a7453e88674690bdbf133616e6f9c44cd56b21249246d76e9f36b32109d3ed366dc31a4bf309e6aa3eda39b482d68ac17e704b974e6aaaed5f8f3a2ec8242120cb7020d24b728d6f251038f56d60543c6b1302359389d1f62325fb75c4c7e31a00911b92fa7cddb59dae2fa6e4864c44f1d2031a483db7bf6feeb1124dc8d83902c04e936fb91f25bee0c2f5abc909bc1dfdf13a8c74f59ab7fcf3d644533fcdfe31ae11de2713d58a607ce76d80f4016a49bb2be01e8921d94bf8d44e4a9330507eba23e196446993bb3105b7aeaec2ea134982c8566454b64bccc88cf74414e81a547eda8e0918292ceaef3a39e81a1cc1eab6e718757c474625d59fd479cb14087a8b56269f7dfd9f8e4540f802995e27952ebeebb63f95bd296eed83d18691303542e250880644dffc021c131adfea7c629d83f56fa0ca4dabd817e7449421ab9bff0bfae771e88d08ed1444a6b5cbcc1831852966250fc26a18670bd199567bfe46b123bdef16bffa83d01bdb656543b047f768d74c648cf7481b2b8ef99b93e278ff03786e8d49d759a4f1640af4c6d1bbde240e60f8402ef491fdb775cff719b5f2a9069632ff5a48f053bae112637450ffe370a02971bbe130f7aa13d4fc89b624637131fb43c7a07ffafc12d410d84249690984d159451034a03237fc100d1db9f38ebf7cbdc15e9e5cb07644af8df50b9b721c4622a5dbd430bb3613909ee0d71edf5e2c90e6e9870eb5dfacb6d6ed9a5acf3f518502ba2c4c52fae2dd23c4c055e30fd3f0de604008d9acfa0c80a641b3814a1f8264f36adcf0e9c11c78707e8793db3f395bf2c8ac47af356257ddc873ff2b75b8132adc64f1d276e9c63fbe55e564dc06365dbec2ff142866aa391ccc58fdc131bdfffc609d21be6ca8034ef0d5642263339febdd18822c9fd3062cb6410a063ab8568356300e1889fe745dfc8816eda5340e7d7367aef3a0cbeabac6e1ed50d1aba786fe4b9a1883b7a458aed6836dc4b1f07765cbdde9be26d434062d1992d943a67485db7844e9a714e741d82f2d01b39b04f1f6a49faf1c0ceabc03745296954759ad95d2a0baf9d15df3677524e6d9303389d87708064d51103eccb05da1b38def19d8eff15d9ea0ed7fba257d5c7c5a310973420afb7950bb46ef249854eedd6f48c70bf97574666f923c6b714674131293213a426031a56fe7759308c334a07656945a723edf3e7596bdb0aa57f3db74e3b75a59e1281d1e0483c1ac5f2daf09117317339bd2d3d683e396ee75550100cc1786bdfdaa990b8c7a917162614cc52ccfb729486ea326dd21ad97b6f29a59429c91459071107d0073b60274a65902686947cb5e3e1c3a59eede1f793ec351a085d1068062681dfc4897cf8b0478d763d0a35638af7ebd791ee5711d747edf5eb08cbff75e554f6dc39cc99f69c697d54ef2c6aaffbd5af76b5ab5ded52a35ffdea57bf5e5f90bc1cf9104d676634d0cc7fd0caf6d075610b9ebe3ecc7e7608023f9d56f5af58f0549fbe20b75f9eeaff174d97b4e3b7eefbb6da33d74c837066539bd3b71d3596666633695d9c59b57fb3ff600eb7f90c21eef4d841acfb9a9999198bf079e8d6874b3ed3a1b6ae7217ebf8797070c9533e5cf790d03c632c01d5f4f66ad149e7dc28a5944ee984d5a8ac980eb3552306c21536fecf13274d9c401e1d66cb5bdb3418e5a4a68ddd9d5d803f95253f841042e82ec0f0a1185efe68dba394523aa58d076c7cf8dbc614484b27c9f26f978db200026107fb55ac6ed366b1010cb00c117d090086c587888b2994889e98a245d46553816684cde072111814c82fac05978bc08c41afb037978bc00ccd51046689352ccde5223043cc226c002e178189018e36c2744941103f10015d714690d1963246586c3122fa808cdfa61162fce00a2a4c80f184087670630812a03104c685892f464899c3092660ebc45df8ed2814841042ef2dca28a377158d8a52ade0ca56638c187795c301dcefb4d2e2ba22062bc6a0be0d88278404ac65753fe69285ccad44d71f3574c6f57f2a9ab8fe1e0dd75f5585d1f5d79172fd4db0220a77a7b96ee5768b01e33a0ebe9d620d401628b7bf4f28148381420b235030c5104c20b15c88eb981734d4106a228b953258de591b60169eed940d69d5533717bea7d239d53461ffbea7d2e92b9225d0798c31761f3333334b286317bd86203ad86fbb443e5ead372e3ca9148cc8f0b996d54f817e16c0b0fa5be86762e445c97b242472e4f6779b46984f64721ff76d770407fcd893773ae290fba20a75dae1ae6c2e1ec5c26ec9765d46db1e845bcc8e59722f234f8e7709f7d35d3f71420136a5f083e5136fe273cb77ae7fda93bf811356fbda87637bb27d5a40d5d616da932f77440082314a52c4e022e889154528f186961e3288aeb40f026e48fa72573bc41ce1a004191208b1044b3e54e21523d500821f327e7043071b7668e889010a3241186174850a5340e1e15587ab8c0d2c694383fd38c949b3b677754efceefe36c56e05259c0a33c01e1b19ac94ad86d2401cc7fe993dd69dd5e66efd262cf84a7bf92d30a9dd91f6a4945ae704b2b6eea6511af7f26d66b07fdb477eb7e4c32025be3221498c118c1fa4c8445d92f8393748e60d403abef25ceba0bb62a317df29aeac3696fc0692df46244dc112d4534cb9f27b480671e543f930a95527b0fd6d97b6adab779f945e238df0bf23bc1ee3a9732aad9e9200777dce396d7bdd5c7f2fe1ae3c6dc0fe389d4ef324d9e7fb74f76e09c7b0d9d3f02cd8f399f6204fb9b59c922068ab932f33335d931298744e86c4603f975faedfccb75ff3fefea57fe63fd590afdce7258df3b0e0cc8a625c7ff84489cfac06a024d43957d8b8fe3ed42b0b58fe4ed4c6f5772e6358fe5ed4396c84c5cbf5f723f7e2489ed4330d6d36605fbeaa42beaaf999ec3f380485b6cf833ef7f1153b92af54556008f1fd9dc8bd744ed374dffbccee53397cec3f7e110de988b91fa4820a32edb9823621af81499eda006c8511861966acb1c698312c078fbf7cd5c49f80ab08c094ca5f4f34e4cdccdccf836e8ffbf5b89f732a38ec94b4e77d02944aa63675d11808cf75ee06fbbe1a071fb058e7dcd4475de8636f6a4702bcfd422e8402a1f40a857a210057194cc1cfb21d3b2cb0a0eb36d8a0830e3e3e8238f02bcf758e6f8f27ac09220c614ff1a18455b20cfb2f5e4dd3ba0ffbf9264efb6de3fc4d9b9b3697fe9a4f4ae592ed4aa902e432dd774382ea42a0fbf1d11dba9cc18e094e2d3a32ec1cd4b44c43b36d71dbe216210d6c5d6fa149e76839f65dfb1c2514cdfb931d3a0991c831b97e4c1de460209203786c7dd36b2653add91f69d312ef665def00000e2aa136ae7f9ee6b76ccb328c89bcd8b34fed9ef69018c247f5e8fddcf826aed6d68cdb9f999999f1fa53fbca245a279aa6753c6e1aa172df76ab63d9db7777afd14442f633f3338e671e7b0de3e28526dbcdfccc5cb2d9d9d9f6e029562ba6ffa0100c4a12bf6e16f53dbec7479a1f223eaaa3777a6805a260cbd4a1b097ecf1d23482844f668f1e3d3af8d31e0843dc7e1b1f5c133f75dff3e83e54efe89aeeaba66b7a53f755138661d9334ef626aeb697697fc4378e7e65122fc50c50471d75601c9318af6d8ff3668671e683e1f6cba67d54d198854b51cd945b829251ce6e8f2d9f3aa5d4bda3b641dfda629b94989c7183d9141acc244fa6cc744ac79c4e2631c6e82e290b2b2b5023f0b347eab57ecd98d935bb863b1638e784734ee8f11dba63c1e24ec5bd0d772cee58a48ceeee8e653302726b91c6ce9831ec428eb33e2dd28ab4ce2a1593209c8165a78c35a8c5b86d5aa434ddc9a46d19b6cd300f89affde0da8fadb96c74258b3984ad978dae504173b0a6cb4657aa347125897b65088d091756c6d25c36baf25387b5978daef048b174b232395051da6bab5486b22c35740a1106039d134cfb1d16e568779302dd7e87c5a371746904f6a34bd73fe3ea4ff539c27ed587d6daca907c555b9cf2af35436ac9eeb3b5957d01716a4b7ee5d2395f8674e3d756af7e08c888cef1afae5e9d58fed5bf56e995cabf5ef1af439dd3e3fa572d9dc3454b449de3d7bfbe643cb221fbe23ad0f5cf8e7c665fc010f8ce9ff26f05aa50baabadf63cdb72fdb32d19172cca31ab04bef3798b172c6e96d49e084598713330ed79f6a5bd1bbb0cc98ea075ddbfb62a5075f9d720ff931b56e3b99c010c1decc4868077c718a31fc0091b4f179e38059f790033d8f6e00acb7f6aa33b109cb02ebea95507eaa074bcb3a7cfb2e9df53e978141a036927b37312bf5d4ae4c3ee2605f8decd39f791272b32e4b87a8a5ba8878898fff9eba0202e6251fcff4a63f3b98dc923644bb6dcffab4b343497bfb948ad4133f724c67eb225e4ab0ae4a97e0aa686c1abba94e22a448f967848ff932118425582384bbe6a39386505af1a0dae6ff090ae425f1f6135dc4e2df1e07154df5082213412c4b1f1bf0a34743f54abbd9640124a7bbdc112f6866d374d15822178d747b046c14560d762f0907ed99240d2d52f83fadbe42f81b01ff401ba2de4a986a8d6fdbc2ae4ab3ef2547f3daa4247ddf592a77ac714fb61391cdd3e712f90f0e3fa9310affbd7eb97660af67383c69781d4ee39e78c1d6db2d8af5eaef05b72fb07e41cf9b1d247a11084fd4e27dafda0102e39dd3eb9162d572ca5524ad91c85b09b52fa2f12f8f0bc7c25fa3397cf589a723fd5a5f616a006cb465c10dd0ffac0e7dba5e8d5733fe8f3e34382324f5af4c7d68f257c7fe5cb9cbd5a34956022c154427d664f6319b3bfcc6d179a4a601e523feb50d8c2d6eea31f7d89f195dcc9d539dd41577bd03bd4698ce5f186edb781c20641c2420821841a84afd95cb13970c55e00554163d4c50b9820a32e9624f57992031b75a1746db89084582302a00b21d4a6aca211173eb491c2f2111d4f6e74b50650ec0b4cec851de000e3c077b24473a10f0f816f1385fd6073fe54722db427e553ee839ffbdcf662e9c29fd22bc882465e2819e1f3fdb835de5abfdecacdb96cc2a43dde7c05a3700a3e122826ac5cf81642f8b3c11a568805365662905581c640bece00095ba42f84ff7cabf61ac4b4d720cfd4dc3c20c33e7b66dd3c60abbf3db396ae64d25756402229c04522c2ed17e14857807e773748fa2706fa5620fe0d094564c878111932d739116e0b22dc3c6066cbb89b07d4aac4f458779302a63d56bb1652b26d5fbb9b14ea679f754eb2af335da3ee639ca7e236ee88a7e09b38133c856256e59865e968a246a22d7138c3f2d3cb465d7e9ab0da65a32e33b4b8a860d3814b18548dccd53641b9a481c516173134252e4612494f10972ed5c5a50a0dc90c47ddc38c4cca529828409e84f9c0d6011b2f1785c94187303564365879b9284c0c3dcca81585ead7e24f7f96dddd1ee38c71fab415cacab20877ef29df931146f708a3fce7223c244593527ef1ebe0edaec1d0620e2cd2dd1e73fa19b29463785631889a2acc9f3b07b2e713a5a23fa84aa254d47baa9a937ab462188d9e55ea906b869d6286f169c61e739ea47bccb0da9253ca29b1587da3a2b98cd15442dfec37ef3b805c044555d11f4e8a52d51f552551aaea7d554d4a51aaea7d55552cab2ea79c313effe58869219c204ed5f844638f49758c5422276aeb09cbbca18c34c2a12d0b2dc6182384ccbc0589889be7f277431fc8df2a4e070b9f5b8cc6403e4662a97ce5ef65fecb70261c71c453fd1d945192a4bd667550e68534bba377385c84e9a0038787340b0707898d38b5d879d9688b2f465b20c5e846543adbe9c716609881bafc287e94ad1655008dab45f1579b1d3ef0c510577839020b32702085c0888d3344e0057fe5b7fc28feca6ff951fc7ca98c51e559dca5fbf74b97dd0d8487b03377b56998734aafaa74501f638c41c0d81efb06b9f6be41b2c4bbbd437bf0bd7be17499c8db3e9027420ec28e49bc70e776c76fdcee98c46bdb835ddcb93442f983361d841ba5bbbb943246199f74773744e27a7777f7ca8b3b6c2bdcb72a0f7d20dc961f575ebabb776cd1300cc3e09062deb873c227ed6118866137c679a3f40f7283851886618cea5394fc92fe37bf7ecbd768ad4fabec8fe3b8b37f721fc3c129b8f3617f4ce6cede38cc9d0f7bd2ffe6d65e4bceef11afdcc724d2ffe667ab775b7bd1af06b7e6a2a40ddd3b4a496775a269d9e664b396a686c776328d207f72df699bdc274ff03aead06c3629a3d703a4d93a8fa66b2ce30e5208215f4ad9f336ce33a243c493816215a35b300a821ada4f2d663fb17ea93167bfbe88a1c940674c19a66db5b38c52a694524ccb209cdacce674ca3433a62ccbfeb4651d6b981813cbb48d8abb759ce56e4f29a594c6f628d5326c7212e0516917db9b1d8ba1a4d19e9027ca195bb53338a934cd9866369a1e2c0f8d66352ba79cb28687564dec1c2833b023e391f19053b29c724ae99894524a9b5f9401e3ca918fd11733a82c187da152fd62f31970c87044145ee63081162c18d55025081bc248410a26113758c1a18b1ea888838a0facd84507389e9459424c0e2160c528377ed144951b1f019d83ddbfa004f6f35698e17a1b293110befcd6a2de8351fa351a972e51fdaf80fe0254612163351c3b4846e3ce895a05647723ff83370960493b07fc5826f26200defe8e0f63d018c8e7e375abc6a68ce34ba4fdf7441c6beab26a557de054c54c23cc7013be42cb1165dc25138c195b149a5bbf92c12b25286037388d8b85573a1ebb3a8132b25daed0a42bf3faaf222ee2f3eb57230e0103f5fad7bf968b600005c6ad6fb3c57ef556530933b73b151b96764ea8a4407fbe130946091a5a3cacfaf0616b0b201e16b364f03a34ba6d443d581f00c19add8dbf8fa73f9eaabfc3eac1dda4d0c3c98d770d68d67cfa3e3aeae3a9fa3d3a27543e9e43088934ee924986cb0d1615fb3b2ccdb79316d68fdaabef84ca27420f31007197442a745cec61d0ca6051b11f0081f1603d41f04aba3855bf86caadd5895b1f8b2b48f6d62519eb5025aaaf5b758e9460d9c4ad520a69c5ad7f5364bfdaaab1ee3f3572f2da5c6179fce74436a7aefb5047dcecf8f9b4a33c9eaa7fb2c2d6207855798aea05b77e85c245bce650a7f048b9f56b90af98eb523df29f5b319f5b319e5babd2ad4917e9565879e8d64a746b8b87d4af3cbea23ed01c2e8d72ebf3ece8e692a7eacc8d29b01fadf2cda55b5f4ab11f2da3caad4fcbe02248bcd2f154fd24ab44976e55ad61bde5a99f5bff668c9316d6645242ebb3e901f36bcb53f58178f9915637686a3fea9cfada490bfbd516036afedbf1ac754dda23e242097c55edd54752d3c5b7d1625f5c5497a6ab3bb4577f9a4ad83affe1b4abd14de3b2cb2626aa2f5dd60aabd5476d61bfdaaa4abeba8373008f855cea3739f254fd6aed565fabadf6aa7475aa7eadd6b61fddbad96eeb344ebadaab1fb5d8bef27d2e627a7e21bd9acf0fa457724aa7eaf34f4e56e954558287d4ff32b8fc1c872091609cfa96e3eb47be8a9c92bf219d923e57ba55db346de360ccc2ca2f81d3a95fb5fa42ca58e9ea1c36327addfa724ae798bebe0c92556008fdf5693859a5bdfa264e064953275d3ca4fe91aec2d6af2dcb5ee3fdfed68cb1f29a90f0978b4946b98fd74c630085c61c58262309e8c69fafd13843096301aab048e6f3180b4d24c0ee7b8cfb1e7b6d72f4b2a92e00dedacdcb2614766ef6f583f22713e93f18c9d16324c70e75e8c6d7b85f4a10c70b2ed25dbfa1411a2aacff2783580bbb83470ef1100984edee833caf18bddb2f5fb592955df49ae5c6d7aab41783a4d014db7f6ac37e32e846a556ea9c2883649014924392a80e79472e4190c8903240c27e19121217695fd16eebfe821f163caac769877ddacd3ced6e52c8ba8d338658d9d755e6eab04ee33008c00d007cd8f0a831bde96956ad12ca535c5878ab0bc853b5d5f289ed384f05a403840ccbffe99890e4832d4a56a8c2420b0460a209e481c3f27fbc74fdfe0651ec575bd007fef0e059c2b22be800547840118244f02587e55390cd3878040f30c5f2a90ddb1f444a06c63f43f22ce92641259c2bf68349d1cb8ea110f050c34b74252de8f0408b1e39c420d114f9210e315e72f840185a2e185362904283103928c1da905070e000468c980d2e358f0660d80f2e51a52ea72499c1efb004f03bac20bfc34afd0e6b00bfc31af23b2c9cdf6171f03b2c0f7e87f5c1efb056407e87a5c1efb0bcdf616df03b2c21bfc322c0efb054bfc3eae07758447e8795f33b2c1d7f1dae575c1f71d9af73b8fe806ba02aec47846b97075c071de1c17eedbafe1d702dc401d743405815d744385cbf68acb05f135d7f02707d34846b240fc2d8af8faebf10ae9306c0b59210f6eba4ebbf01d74b29ce793ce5bf0114fbf5d2f5f738f7e1fc270aab01e72d01700e540310ce5d19701e3483fddc755dc88782f8d8cf859cc85f1e28d9cf89fcc8913c5081fdfcc8935ca983623f4ff2a5c8132406fbf952f4893f42dab05ff489ad0894c57eb175a32b0605a1c17ed11585e2900765ec178522517c0961c37e91281e452431f68b4731292a85c07e31490215c1810110d11a637776284a820b338488a2e588171a4540f9228a26dc7882c5d6861e437268f9a5171923227ab0c15a80033fe84007167120753182102800811064ca7892042b2e491e1c2aec1797a48ffcb954d84ffac89604128103f6932de99241f70afb499714924322d8603f292489e40b67c87e9228c3320cde182d501c3eda9803898be4f8722b1961a45841e20c0f2491a123698d2d5d6481c2f384258f24920760d84f1ec924a93443c57e32492e4d1e1c2af6934bd3677ae086fda6cf9dad09f483fd66ab5f2018cd11940535fd0eeb77583c7e8765f33b00f81dd6cdefb002f03b2c0c7e87c555fb3bac1dbfc33afd0eabc7efb050bfc3b2e077583f7e8775c1efb0fe77581d7ba104972a7ec4a841072c58cc088cd81022a28b2842c0f2efb8c971932604f69bcf4d0cb829020ef69b17703300dc7c65b13fb879e413e98228f69b47d7df026e2601809b4a49d86f26cd251f1ce59962bfb974fd7b70d486a322dc603fea73fd4f1c6d512011d88f52170dda623feaa24274c853fe4694ec4785aeff0c474d1c7d79cabff3c17e94e81e21e164b11f3da240c8d71b66f470a3c506109456ee26855a0d00820fd82083144e9ce0871d0f84c143142a9ca8a202286892d2052dfbd1a40ccbb0a8c40c0f8f304b6a2811b1c702fe935bb26dbeddaea29bc29fd0fd637497d1bb5a2572df7b0761f7b97b94d1a3371194156ac230914c244796cc5a6f3f577a7496df12f9838512d516cf932568b0863d758ef3474f1df1f852b6bce0ffe4330d2c6c008442f594b9f2ff8a3291cbdcc8be81e8267000854eec2a7c63cafab2fbe84f4a295695dc690384fdb6231e698c9476dfe9ce6e897765575f0aede7575e4929bb53b7d12b363f442e9eee12d672bd0b1b1358d8c292f6a253a0bd18631214bc21c451034b084939fe16d6ea46b670e93f7c8cb1d255ad943df503e4c7697bef3e8fd65abfd65a6bf7c5a75df72df1bc07cddddd9d9999b9da22592cfc66c1530ebd68f2638410c2a8c511dab3d7fe5331a7b0e7985168af1f9a48b8ecf1d04d02d93dce58568a1d93b41a519e627777eba95a69b38ddd8cd1a3d31cbe9b0faebc3749383862e28084befd37ddc1a39bdd24f1e7e042102eec6e9074ab90e48509c1b4c7350d1ec21f2f10f88587f0c7d8398181e55dbc30f44eb78340466f0e4a6cd25e8c31880f161e918f030fe1ff8008c88385fc5cb434b015e59c534a197db58485ab11f0c7f8fd04e2c4d80d43774606b647397dc503eb278d0317d99e773cac4156083544045d484b4b4d8ee08f1f35f115ea76e46f008790023ffcd25fc15832b6cce5eee92a254bdb241111111191a66d19b699a2cbe572b9b24cc3aa69c6dba77ddaa77dda07c3b2ea2b4a431fe5d94faaf94a645fa8a3cb47b8939e4c0d07593b380d38253f022425e55c99007b63e46e943c44328b3b674a2a3320352c498e2d0ac121282404853e8892045dcdddd0a4df56944d7a6fdde6d13d991ddad768afc4579de4a97efb1faa6a0f51b8f561f69db46d6f3b697b9a6efb998e35156e7de869dd17afe6044342bbda4a60da6b329d8221f41a8cd3dffe04e53d3a5da60d1ed25cd475120f61c2f6576b3ba993b658e852f68ddba4720261d0e58733b078a08a1b5348e003c4855052155fb42cb1348d20e2babbc588fdf5899e29648f15520a176fdc2004116c70c0891d22baa0a3872a4aa0c4039659840c626a1c17d423a80b50d1431b3ed0a12508250fc3c6509441c71964d831030f373d7360b38be8e101eb11e2b414a6a6204e2e329c61722a3d23903d50d05ac6d1a927ebb1f3b251195e48a1c50d16a3c2092b3fb65e362a8389fbf1d0ec52461298ad9f4a87b510bdf80b6df8035bf283ae0f063d713f28a485e87544f34125b854460c4ea50ca320d800eae1f6c3a13280b0a827733fef8509b19d26758cab11958eca1b8b1af4b211172988b41a4b643c909058f874d1544bb8cf5c36328195e9b3659084fad1640c4921238ddb9f811a908c96576d17a125b939c143791505c67ef138855e5567622b7c78638c319ac0d92ef0e312124ec1efe242f826f0f8704ca2640509c7098c22a0ebaf816085e5082ba733834e4f065eb7fe11af9c0bacc50d9a4a985fbb4fb6e0c5dea6c8629504ee62433cc47f01646cff972d000516ebbeacc5808717ebbe09dc38c4436afc6f896c5df9d124238d088c6ccd65232f41dc4f05a40e2f375029d65e361a838e23c678c3471c5bac8ac81869984c6de587e60b9aad8ad28c153c342197690c2766322788b62434ec8996562b14d91844541a0511a61a23071ef3042b48750e1b79429520aa4ada114f104202e304287cc4d85213c5921850d09cf0c44b8c23ec0951f8b48f387ab8a08c09ba9fca046380b42b635ab486313d3ee270f739e79c2ec018d9cb8d467ceac8382791f6628ca7d85a80dc39230bedcdae630ab4e71132155e2b0ad5edeeeef1ba00eb70a1660ad81ee5a415cbb41d1856b586ddfd64c0f0abb03ac24846208a881502e4623f21cd8f3a2c7cc8e3750546a2731e191ada4c412a53a073a84519b1442e100d9581bda95c6c1102780581808026d094a82929048a4040403c6840e02005315b83020067c15df0df6a81ee3f47c813bf561e975f8b75c88714ed05025cee98c80be1c718a307217cf8c2d4e076f7c20d6422af4e7ff1e13784b0def4bb941d7b2a22e9773bef0b4ce4fdd11e377783a4b7da1d849d110fa3f54fdb7ff3edc1d7dabf7229b0f0e36eaa6ace9fbcdeed1fbdfefe499d11627314933fb6adb5f68e4940084f31277a7b3ce39d733eacb1211188e3410ca8ea9c11163ed52142b9cfc86513dab6c7cf19617fa0426818392110074a19638cdd17ffe7c367930230b81598353afbfbfd76ae77464c62687bfba435d34c33f4674c23441a08218c74d3a684fe1383b509a6614e34b726cc65a435d3b6374c98ffdf4dcb320dab94c6bdc665a435dbb43704f085851a86bd6fd8530d7ba735c3b05a24715c035acd26678c3c7834c7282747d9114d58c0adbd7dd29a69dbcc6637941020275eb1d48818f19444f62ad7d884393a39dafcd66ccc3326bc5444743a673361d426e117aa76d9c315aef6577bcdc4c14bb15b314ddb4c35ebb60cabf6a4859d3442ae4bead11c798a83637602e862e1cd6ad538c85efd5a335031863d83750c8f4698459371e28eed8d74cee4b1e534470e16c12309d9b0d088161d68eb6dc9fdc8a5a16119898787e76786d185090dfbe362f81086092e454595b5f44bcc4286e173d4040ab6b6006a1bc51dc8df4fc8175f8c119d6ca824ad7765392ad1d00804004000d3150000280c0a87432271388e26caa26c0f14000d739246665e2e948883610ea3280682103106184008208418448ca1a1311304869525128da752fbcf8dc1679b2d8a6ed93d684f584d94b8a95314fbff2438c0c9d1f3c7ce08adaec6da244dd34532d124baf5245bb6e1de1a0a7d64d787e00880074801d55d989cc31a7640f8310ae1a93128207b2c7217fc8497c79a6e82adfee5010c838c8c22f3801affbb5a9f18cec50e852298c31ad8a7227ecdbcc5d358cef98d9d006773e8362ef4269ec904ca896da5c34ab66c49d68b271305b7e877fb19e2047b7ab2486e0d67160dc72021eca47a6a036691e2dd82c996a79fc5fc2e12049a9882b32306751768927fc828ce69686bbcbe193a6ebe622a6aa11508e516ed152b76b23e935d8b8365966a9c87905be57c9de43c2d82545e5ed86a224d2b73671cb19b412e3a7aba2c8ac20aeee7fc7f8d1fc3b21ab3817dc60201c302733b989dabe3beb2f0926edcd7c83e00a4671398070274ce1acffe4c0a0c2d572b2853a7cd57eacf2d63a09da12d14163a1046dd958fb835b652af5b2a3e1a288825808237c4d4cf5336f3126832ac6308e21c54a55e67f212e24ca1da3e02065a7832bd3fe76b407ec6a4fdf88a40d4d62a05c54fb1fda2de9bf40a32023593b1ab22cdb1a5b22a6462d88f717ebd9a73d5547d4389abb4507b41fdecf8fd0e89041c95feb359d288409da09adb377dd015123366921ec94068148b3af18fedc6d1494aeced71ece3640dbb1a608c1ddf15c8c4158d1101ec473edf94377565581769d219aae97fd14920d699158ebae30ed3552a36ca2999465d3f09a97e0ecec1bbff0f33e92485fa5eb73d3ff04e1ddcd5006670f8f51ff470e0955c15b262e6ef09a273e771a94e8454efa0d02352c165e00f4b9c9ccef61cec60ad57e89c5779df6de0b4745ddb27ba0ef3880eda12602e34c9133fffc7b430b3470bd88ab1621ec2e8a274e0746a17c7eb23365c9edeeb275da2bc24ea6b452c81f155fcd266b1c722dd85e6e7cf1a19f4c8b7cbc160bca7aa2b53c11ecee98a8cd1df2260a16a1aa25ac7ecf14b69d851cfb0955845e92a0702e23fab20eebf24403065ce5c0da4cd25efc07c874279ef8fd4fd77ea4111279fc70ac121cde17a7f42b1a47cdebcbe6d1a07e9c353c5d559e21487f0fc39f89ff89bb849ce0798607c98eb1e5a65574de3318a331b4b3b8bb62c9a097a089f4d2184bce9dc496c23556d4faba40902e8f270e41e0be7849d6626357fbe93753b0b4320b7b7ad3b37bdb1395b782346cb11c6b7fd2307cc40877dc9de2bf2f7349760d27ea87b518c4669136b4ec3e99aa8783de0a25940676164e43ff10daf6376fd450c2570aa498a40391ab94873bf828f117e383e5c4b120c73dc0e3e9df8f22d74044362b7788511abe7eeb1d1d9c0c26a600d40480e892716587f243d6d9718f86cf1ebf39cb55a1d62860840c7402916fa12c317b5905d0569eb77996478eadbdb9b4ef5e04600ceb98fc564df1f1e8769c67b85fb7e978f69ca1b74c1c33b694c45a1628ad14e80cde9f2b4f758d363640f1615f4c5a47b3ef4e23a2888f4243d7808e30c1e0df4c8385e763924aaa7e71da413c4c9527b23889b91ea80751562c79319ea16ce3ea01083ddf2d0e50a5de76fb0cdadc84f51c6e98dcd5ec07090e52a22132dd09e45d7613d952bebe66667b5f9135edccd6a62ed9efbac9a07a8ad06342c2db2981411324f1c844560e722dfb1a5618acacd132507e507d66ddd25f5087a185564da93b3d61de387b4e8bfc482b62509744c4049fbee8c3593233091bc82791f9ebfb9c7554ddfcef4975d4b88058cbf31212a24e8860724527547aaae0d90d639d7e6c3f0e56863855f352f0ecb3d2f23bceed3c503e7a39cc24828c5b2e99800d1e7bc1dd6c1b3c873bb8957ee435cb8cc911c2e07c5dd543692c1f905dcda8c013ffa44409cac371fb4411efa0023b4eeeaad3db3d0f6457cf9a7540c79ceb0a3760c3c074f20849aedbb2a54a17393bfaefb3acef29ee26b50a3fe5eea455a236c462e0c310c93fe9ca40d1e0cfbd294e03e68e527c9f9893d74807631329c78df2e37521a25483fb2d13524c8a39ae1ed9bd990ff677d1b403568f22dd3862ee51a3c5a39762fc14617d9ebd62c2a8a6ee084a55f5c25a7b9f7b421b21848aebe78880925e2cee62f942d95e8532671831ae1b3c9ac8ef7bd397d30abdb2f0f71034cf1f48bc8cfc10f7a4593feef182e2b0bae3c19806ff895435ee68c8b583d78bf8a0abac03c1f697bb1f6652e13db6b1f1db96939f06d2aea6060ba1b31b7d2ae5677c6bdb467e2ce0dbd95c9be0171814e647405ff4b4a6f066d86e1b378c2e174df3687875a8fbba950cac896597b5f65200a54ab2dba40b48e7da4e2adc7c376872303d0b1ef04349b03878ff5ac4acdac968d6c6c2721db44629fedcea0489c34f847caca079430c846cbc6de84b67fa242baa99841eecce6c22b72e377332f9ca431fcdb467a02f325e2b551095d7159dbecb9888ac067eb68aa8cc99ccd6e382eb3bb02feb2a21e00362de6cf8906942420c1f7f7d400fb39787be71f1e7df3e100d5710cc94b9891bbb39cffd283a67c197dffb849fbfee96a7215f9eff05f617e80a2d7467f0970cdaa885f17c18d9a87426fb195579ca3d0c7c50da234b6ae3909cb87e609fae6455758590ea21f860b68d1dcb6cb53edfc4d5208e5536cf427c6d238bef1cb3c700400fbf39b19de92e9f6b78012678a9dbda146a75d3d2813b8c132c29833df3aa75f4056d4ccced863264845cd545034ff4f9bb949c59b26e8db23209687177efb35e420e78ff8dd00b295d91496cc1976b34540bc998a182526b95aee8c73c0991ec53e63c5ec0613a4f2ded59142535f0a5bc98bbee11be5c28e9b6c9af5babb134d211a4d150a4075420aa38f16300fa98b30c61a707a91830dc91b95f7fc0eaf849d0099efd7c82ca590f3c4f6aed8f674fdc831656fcf947acc8347289c67d5ca2d5eff74f08885ce226cd1db8d8f40528261f4cdb011dfc6c2d44296417c0e16a6aa2aa889e575ebb509af6207c54bf6fea6d258b9316868b4c2985f41b32e4b17d06437da52f5ac93ba095c22b9ea622503dedd9b0a0b747742b24e304fa246463d21a30b713ae83887b6beed7b4df6bcfc78bbb2f311ed1e62a8ea587fbb0d37b89a84098db77a32364e422657384f649ee38a4d451ba796a9758e8a15e473d2901798122ec19143a0fc7f793065a1468d560214ca1d7d194164fd8e701c34697fbde05c9034ae266711f4ac3f0694915723bca309691934b07a898abe69e49c207fc5ca8294cb905292b35c2c483cb150e23c77fb5112ded059f7f4c326e8edd0e7e1a88162c5912a02621bc5db0fef462e321e99ad8b6f5e9d2a72c4d0883e5ae8e4c582f6facc7847ca9c3a3ad8505e7102478807b94f509a87d56ca21f6b79909eced9978b4c81517a2dca925e218c40c9ab6ccc9316e1d277e6c145b65a4d2dda43657f680a6722300fe9c8d6ba1807436ece94340ff4ced162eac1e7cfaec345e3670a549222a98eeb52e04e09e44a694999ffea4c8125301b55331e6f7ebeeb36c3cba57072e5b7eed88d9051f2ff34f05fc249e46d472e9a5efa6e72db05aae790e34849da06813a69f08afef2d36b5d781a701ff39cbf624748aefd0d9870da3e822953457769fe24989fd07617e3d34fe629379d05e5325a499918887a1a4079f5912994723ef88f3c739f61d9858950bb8ca1aa4cf0a9332222d4666d3aebf34dddbd18182c1648b19d910aa4cc25de156507a85cebaf294065e44b958e15f92154e0ce0bba8c5c6128568af76ec10a03f71ff67a8bbcbcda39ef059d7096e1bd7016f21873d2255fd0be11161443280eb5c4cdab89c1e545955af67c361c5b97cbb1431b1a899723668564971f2c7ce387cfaa23e38130155b35d3e0691f2cf3784c3cc79cde914ccd4f9c73d599afdac0dc374cf303477255540f38ee23d4054e5b9d77e70a9fb00899a0acbf4d39e602809c19910eea470e2dffc14a388450c372287ef8cbd9fe9c2d2c519d745abde1419a6579c85a32061fa6a44ee0cf3b180ee66718d8d0d3ca25aad3705e75f358ca4232926c5501601a60ae165b7681530e9301eb45e4b88f9203119d030c217475226a395f7767b1d743b02c610a4bad0273af4ad5701f43d1d11d9a1f2d50f027a6d2f3e0c9c2e2e193db12d8b16dab7f647a2000a133d0778f80fe0097ce21258991b1f44e34b77cbb0d3658638dd5917fb7826124a6c65bd5a24281a6d202cbf998d583487526b105f9c032a4bbe67855102f7963d87b80ecaa2fc763aee2d6c737cf42376638d569f2c317dc44a94ca5ea21e5d6bde9cf96053a0dd2be17299ada516eb9609ca93bd7d7d2859ab53ab016851c357258edb47b047ea24580fa159918f80cf3a1fadc591f1baa37fb1d589950106180a9e7c7dc7eb57676cee37dd7b33d9e745e04e766214bb78709dbc3fdfbdc33db01e8fc410639e0432a84ee29078b9caf9266a1aca54ed7d0e67b711acae69d6055e1b7d04dff867747f7f60b25e674e577868b9660f58a296c5c2a552f587ea0863e4f071304a43d9781b24f55158a308a23c5290c97ab65cccb84c1c4749a212be0f2809a653a56d78e3b31548d179a8ae99a0f3d5ca3f299aa0bca14edd0896f27f02f63614060a1fc914f202d8f046f274b8f56655a59e747ee6e2bdba52fd0c28732d98ef85f5154b67b5b53949a0b7fde32f9eceaeaff430949d26cd4d7bb3b67cefb75a00e7356237e403b8ac8d1774095a2c2df0ae98fc3cc6d3895a0cc66f6ae69e748a3dba0e9ff8855d838e59e236bb7a1d3df11a4b419f6810587421407a52e29cabc2f9bdb50d421a6532b8a7a42953a4fd67d9beb857a03ec14edc388e2d1e1d3eb0deea0e138f86a14be9fa046105282d4f500ce67b6a785aebdbb5ff77a796a2598f394da9177c94f021d98c9fedb1c31d58f0927835d206bffd743ab9706812b26190df7c4562f02ed01fbfc6e3ffa680448e7d7dde3efb428c23b834489a5f8456ae788933bf46180cfebd6055a6f5f50863bf004d05b0a47833dae6e4d2f6945fe302a6b052c11159c6d71b55e1abc285c5345b659953acb06a22c02d0ac5b51058bf58ca172605b5a0586abfe4402622cd72fe62a4d4c5f33f27a050325541b90dfaa0f87f13ca4a1491bdd488bccb0fd7e1204e1bffd4b1ddcb238fcea2d46826624cd592e3904b942849b4499cc81212e4bd821d1f55f5008a1ea4f50bbbaa0e33a06b28066aa525fd73cc408ec81aef73812190ad19bd42b94462e62c0c5d395b0ea623bee0b425f9ba98f1e1970129adacfe8500d7c6f19eba83dcac7ce246297b5f5646b05cc6f74dc6fdbb645a7f8c5c43dabc2e40701c768298b83dba4fd713e9bbfa33deb7ae0ff3aded79d2c4f74c9db3fdc8b9caf38446b50aa52af7f89ce1503c04aa3af46f5670b5d81e90a8de63105c1581ca02b2c3733e82523f60a755f71ceb0f5855980e332621c8ac3ec2ce5b446a7044e9ec84a6a62849e03634e9ce732b5c0caef80210f69741ab95617950cf7cff2ef1774be18d992af052725ee72ac04beecabb503d9ebed7a90be38ffb7d4d8a9d76804645c65417d6a2e5b5909fe0748f17f75480f9e2668e19e5d53cfcf8532ac2900b6f0e00b18ca26913d4f5c8cc4b70ae1dcf946ffa3897135f8b32ce03698387a187646c2f253837419a3cecb7f1ff8b546ca0aed739fd67952bd3fa237471611f0f2e5aa8c1d4a4edb36dc086fc10e472ac6062a56517a7903b497e5a91a5ceef0aa43fb81e4c4f3a040565047ddc03af494c809796a81f3d1d198bf9d30c983942215020db1d350ba3185266266e7de7bf5ba6ec9dcadf5bdc918132e451e3bf02ac67ed00dee59d9ef1ff0133c941aa03c13bc38ba4558b4dd34ec9c50fc07bf0330fc8e85f45d20fa2ca562cb6bddd88a130a1a72ff7340bb923d4bbeb608c0d9944a57e159cd0534b09bb3e68069762defa6d2ca9aae72c46dbaf8d2a5f3eae939dc5ce3b26a02682ec34482a4cfc0371718ed3ce8d018ea0bd05f4b08db3b2c354668ad993a18251c268d46a0fd3596320fb1d4fe0db660aaed461467e383e0056d7543972de0606584aed0c0068d620e4cddc47705c2f200bae8dc881381b4b348dbafa85e1635d247c823445384e5b9f226ac79eeb47852c21e16dc5ce9a51a47ca8ab338d1e1ad3ce5a2292c199ee04b52c4674b10bbdb1b2f47200d01c51da6a27299c4f00a26bd6179cfe4a7e5252c698a8287e4a7953a8be24c194cc05a5664d01e61b6ea6b23b176625d496a1502dc65f7fcac2e1bc2254ab63f4b022aeb4acb81b7fbd5a9b41a5385c518dfd890fa51967048248f03cf7ce5d953311cdf44c018c9165d4e7f5d1a5aadb429c0af1bc1686801f403d50028e7d2a7947175f06ad872e35e6e0336c7389f2759f5b4c5d87b40fe042c9876e1a68cf896000a314c5cecfc0a3c2d26dd49cceaaa8dc3bd9840f8807a1bb15b2e43f89f3f82dcf32447fc2245c281617b2ce6482b0bf00cb8a2bd9f2a50e869c0413c23c0aaaffedc6a5450f2136068be84264931b3db82619af939aaf74646fb2306a7886c246983042ac943099b8ea3761c057c84559939ff08379d73c2ac331535f650195288157e1ba34ca19c3888c82a6aa66d3abed8ceeab196bdfcb40ca132b6ad73a7e61be9fd35a90f688214d9064c0116bc9e95b121f14988d8f4ad642dccfd5eb0e16946e1748cd6819944bfb1c24263cdb2b4d4205c99f1a06897d5d46e089507ac5676d0c9dc43edb1b44973b6d0a68ce5f4cb5aeb519c53b51e25277fb79584b1f939f9cb8360af296678ff5487022a8d7c8c3de16c7cdcc485189351859fe9b70179ba76bd87bdeebce256423a6d97927928959f28ba4eb9906bb0f3003585c9d4556b76e740761b296e8d5b86b3a322bbc8650b33c663a491517387065e3b3b93c2872a15b6e30065e707952ae39f319f1dfc5569a746380ab26c3c249607625d93149853a26193c4daaa3918424748d28a9e06a1ce1f9ba40174e804c5ca2e841d41bb05623afbbc7180b40bbb0183b3abf40665836d7fa8325dd912240ea1be310deeff528a6b5e66e5065707103465a8e93f5483e640f1c1971c9acacd328b0922913d910827241a7889c6b48afedbd853354ab2103cbba445c1e73ba9745b12fe681171f5342e606fdb1f515148c292fc38bab284ff724008c67788099b305cd2bd38c658aba42c6ef52ee5c62ad38ff267aab8ad3c89492a00913890bc73f6cd4968cb1098c90a22b293398f2932e11971489bdc79905e82e84dd25d80dd2bbfdd28b790bc4293bb85bd7eed629868da777e2aa5a23b8bafe7b992016bd4e1ac6fe66c6324cca967762e37acc0ab12ff6103235c8471b6216f2636830c677d856fc88af213e1a9089ba83ec79033d92688226ae0402c68485946e8e335a53abf03e7b10cd86a02aba9b6d046128c500bce382bbf9c578d6fdb91afead756aafa81674c8b76be9211304236a45c87ff105a2bf0eb5021f32c9ae3f65e109497ae9d9afc22cbe8d89520e0d85dfa96d17cda532e602cb86bbf75e16467c6bc23a730f796032181cabdefd710a14278897bb6ded280678b2ab86056194a25de6ed21116c4c8a0faa0161f46b0e76b88026c0caf9a6dbd7d64f45bfe44ef15c7466ef856f22a64a279b61a703e3f1f5feb10d921de2cde9c1eb2eb687aa5b4c797a94ca1f09a74c3cac797368eca579866f8c2d5a0026b091813c2f0efccdb0700ebf21d50284850a5daf16ba5506dac32991ebfb0cd95a2ad22fd230181cdb3f8c272ebe9f3ad420468b92330c9810ba9870e90f882626f0c5c24d0c393a6aeff7ddacd23017f953eeb2a5e1adac9a30de961b6fa5247b5ba81ea57a507d569d1be662c82772201f333803e25cd74faf37680d213d9aa814736ebd5d41b57cf69b7b8741339bf0660c755191de04b00008ce56a7445273c75babcd2dbfdbbd83cf3d7597ace2bfe1f4cb87edeb19335c08a630b6ef72c695e597f3a645b17762b6bf20cd1ef02ad94a154fc58669b24c2ce408e4527150cf3c800442f6c22b0b5cea45528d7320e26027c13b70acd1379eb5250f6102605d3e2e83c31ca762105fd24ea4f81af54c85b66aa953488c5ddc352cc6a853693956070f59f7e234e8107f8d66aade2ba3497c6f08d45503a870d566730ecb42a9fae68a153a6b253b6a255ea7ee0deb8c19698d9ff21f42eb41bd6b41927c06d7b42e14f3ff9160a26e145935f4fd5e8cf9ff994dcc56789b77de8a34479016ab2c016438648f9bf4217cfaf288e0c9d05a1ef951668a9cbb3a9b433a44d8ebfd586acaf26015fdabe61e6052e654b234cb6e836c5af0aa0fd51773ec9e63817d079ecd37bd2f1efb6f828510cd0fcb61f2bd11029b3f2d8ba7554027a5a2b0e581e658b1cae1f602a89b99fe613e62ff659e562c608dcc1746a2dc58fb05bb235a679d618ba602e07bf3fc6dc181293771695ee2268a878a1616cd0b2d4a519819ae661bcd4d8b7ab9616f8d3da62cd711f7bf125add35c85eeb0b6fcf04a8a11e9cff1f682640ed0cbf88584c3973429b88b1055a7e20c81decad1394c4300946a71130c6f1dd8cbe12635d36790f733acd26013672e0077135e9c5a48d85a950f73fe020c587e4d31d0dc3f8c570a14c5d95117136d0372483e14051ab4d2f0b899438875791d8b1282975756f2a321eee2280e9e98bea11521ae27d65c3ad796367e0e2fb5e147db8725dbed92afffc9880d4014b28b2d0c008d38b640ee10f5dbd41650e9eade6d9b88bc3dd63e69de6f2d1e5786567e79e1d54550878341b1299f0cba64995039e60980476b7e5df397ddfb8f1bb134b7bff2d22639db5a0e67bddc96b378521716cf36464c8315075d013e83387982a9db63b08871e698c24bb92640c3936e29ede1bdaeed48e8d7c3deeb438de79f98ce643fada48d2835a2c05450f65632e0522f03b85537a6951cc0912b47074f845855b7ab2b7f5bf45fa7518e86fdf9fae89295433d5ce83c831eb0f52fb0d0f9b50c788309c1db9d24f17f4be6c1e56640f5b90e65ecdeec7c25c53f5c515df70d7fb9464e97307b83dd42fcfc1a4aed7a77dc0a386761cbd0120fd69603aa0d656c40bc1b42e4422c59e8367e4ea5e1e3d6e7969d330bf741d36f8fd9af86b64c846bf89383c44e373097aeb085f58641dd36e03a1e3ddf02dc2ff26d9e8e1a3467c7ffec34991ce677dc303a6ec03f81d6ea22ab047011c8a63f50bd23a7acf9aaa68a970726f6d409f394c8e12fa9f9d8bb20f684d68507daea39185e0d455e1ad1470e5ae0e3db785142ae5644bf9d96becc21c7e1a1feb2cab9693b9a2a84ad094caaeb726a86178cf0d7c17155df10b4e681e25939a8e09a58f26559a24da20014e412fe7e2eb7f1304004824e9376e898365fc4811ada4c6a8ee1ee0089fa0d82201d46292a6a6444a44678801724840c2338f76f98fcfeebd27f9f02d09da1c2996475b4fc9222966ce0a8a7573a8cde9eb7895fd26d6e79c146c762228c6da76261503c237c61e1443058b3267332a5ec84cbdf3294f31d1ea18626be504bd26f4f4bae382322f7b6d4e78c02d22254e7cb4936b4b7839f7239e04abbbe71d87f3866966674bb52b865336a95c64e94da34622564a42c9262f86a3b29cf1bdb25eaa9021bbca5a37f27c330abbcedc7496af186818f5bc9d7a1fb88c80fd23020861682903fc51c46629163a46c461d47e8f867fb6f749940fe32fda9f22d5180927af62af4561eb0609b4a7eddacbf9df4c802eb9240612ab6b8de3298f168d5973f8da6593a11eb1e70090b8e8fbed45d93a284d14f6df22d836fe1c596eaf52f36fb794f8048a8c55db99ea0aed50ad9aa4da3c7cae53dccdfdd3846ff0bbbebe4f639ce0cfae4208c21dae2a75f839d8aeccb257a5320d03f7ab1f18cc414b2ebd98502abc99cb54719b13cc0fd0b93d9d59d218a83d3633f9bb3a5e1b4171e2aac1012ce00ef71e4b56e451c005538f98b431950964938f59e5b7b88195cfd26c56817eff9ef825957eac7dc08a722cc6b939a38ac83c0386017a68f2dff18ee6c1c66fdc1f5c1f1b6503c0e4f9f42f91ff72ddca1786ca27dc2a7a60e37801293521b09a82581247e599636db4c170783ab2dbcb98b7e232443f77e98227a5af0e0e110f0f1dffcdcdee50e23e72320ffcd874997afe880f6f4f001c256584c091377a004719dc15bb4d7c8df9cb340b439763f81cef96a7636492af500fbfd3c803d5f3955ea7546bdbace32bd6d387e14e06ec0420f4d318525fd608821b69227d1b23f5a61db3f7ff7a208d187f21038e46510b1ef6be06cbb15bbb5b5dd9a255b7050452ca75b2f28f9d41f5896e0eb48a5099e066b20024e10c4d8ca3cb1ce9fd59e92e0885c03238cbe9b237bea62e1b94fbfea1206fdd355690668a07a934c06cf005d264f55e7d500933700c99ff8060d90d5068875b9a306b0ef0678a3b2b5d000736d0c0742fbcbcbc4e064329f2da80d490d4b412024a710ff59dfeb06c3035eea443765abe1e4f0aae16571bb66f43f86041aae8a89cd6cbb320ae92ab63137ce06ccd088baa5d1fe200a4f21280319e1049e929818ea2e57f04da92e4389b417ef559d5e3c09d4db88f6c74ee2d5c52026ad45f08c8d75ab7d8b6be4a6c57066eec03085198739d208efefdf018d6d456ae8b3126585094049d40dd17a6e5520e508e974bba3a53d618b7f1ab8623580f92bc757c549e8592dfe9bfe3eb81217e0d407892d6ecd1049ddbadbbf4bf356ebf61006e2a67d8f57d21dabe4875e583e9e38ad5ca811ac7a04a813447bd4b33841d74004e8ca0156027a428f61733d41f26a149b44b75342ff24a4193f105b2f5ddf05e93f6aa14d2674f1e2a3223d68d4fa82468eff3f4013403af44534db5f1ff1f1b0c800762d445ceaaabb9ea7cd05372f767cfcdafffdad1d97cf76faf1633d6537bacb8b3b3c1edff7f9679fe7cbf697a01d9c34315fded1b5812652d54164ce4db59b6f155c8d97d4f67392c472eccfecac0a6b1883d4a3ff97f92332bd3d65a1194177ee561b2ee9987ced48ec981e74f9bf1f2da81f987873e76604f4c081bc1eaf4597530a868e31da43d37d284375c370833a6c8bd6340457f8ccc4b45db1aadfa49335c77c235c03a2f5e84d6d30d0f3aa4e51a0659de2d6b3557589598b5a26664b4e372a4d07008c706b2638ce6cc3bdc2c8a5b9f595be6ab7d3545f749677ba23aeb931b65e5452e8c7d1cec0062a48ba6d8058b280eb5e7cab78351e54404493b7dcbbec9766e8ad4018a2a8124d79e3a628034bba3196fd8202bd770073726f32dd71b3b5e77ed97ef4c08ffc89bdc5085f72c097c280c1e7d3d9f2f4733bb3f1aa7eae31bd23a17f5f516a12d2f5a7f04d450ebdea66b898d6f2e0b814dd5e52e796d2adee5a9a1bdc9f28ca79007adbab97e1ad55a9004f4a35f580c48f2cd2ef67cdc634ac3d56c4016e3a73bb517f905205c915b430b113bb24bc87282d03ea8e1c1bd81319dd152e1afb4d4e757bb024e68e7de050e73189faf6a33a86255b18ee1c7ee77a53deba4ca221ff89c7e379eb3f2c72eb1ab0c4b1c83b6626e2fabb57570c6efbc2f76af7080cc3effa95b4dd218a0f75cf672db4cd04ef132acf3a4e6552cb15d60c8a616980943e2c076fd4e584a6e3947589158e75e19c923e6d16d540ace7f8c3fff74dd12eaf77ebf88b4b3d81c77a149a1faf38295ac06a5ecf473109366ba1d761a2cf972e49f6aafc16e47d5bad037eabfc6316b68848bb6738e6383c2dcf0b0e07aa0cc59ac2a1f335600cc7e62d0a8e2bab56747658baeccf9cc95d50f513c7da99f7585a9639ccfcabcf779a86288273a2d325d843d3a9510cfa5cdb47c3701fe52db5c35062b652cb45eb93b9910c9cd34876c2dd2af804fa2756f0cff9327fea24d2ae95466057ec1675a1aeec51ed64cd8866d9076fc4a98588f0e09b220fdb601620acbc8399f4349b48ae9395849e780b5a27df2af1cd3f961a69692b095a7a435aee2df230ebf26782c126f95d53377cb68ef19c6f862252bf8015c30c9ac3a9f8d05cc5392a4f28e41e6b913814e391c57a416044940a95d5662edb9a1beda719a12e06a6f1025a65b3025549d26226bad86b24d1606307b7aafbf2499755fb0661ea23543d1ab36ede1bb4eb961f8dbb5fae9607ddb63c611cb962c4d7a5b45f45ce6f11d31bc3adf5b66480823bd429b01d5adf7d3fc855c855fef471b2736f4869643a02b8fcda52d613d64f7781abd0868a55873a833ab8a90c7cb1c8ffb73c99b0d433209b4cdb87c2575ed5b8c7dbdeec2e7554b51089fecef41aa39d689d9b55c2bf2e049140bf1cfb62eaaa9643a4b335b36667d5eaf5098045c1d91e9ebeeba147bafa96a314a03a6c8ce989250d3037ce3bcaffabddc9752cafe84875e7d3161c135a13fbc6fc342ec63c2634b4e5d53b98888b3ee0085d3582e1c7eff24eb2101154277779a0373fa900067050924e9d5d5f323d3f476c945f86b179ebf93c2f9216800b5b8ba662962d87dc6c42ad655d5db2eb7039a95b3e3d598ce4b484380c030b118c7bf9876f950934b66cad93bb98b4186abb572b55e0516e670ff7bec511a830e31dca41a7ec0a0fdde7142da69952baeed1d939b5b7dde71b5d850a6ae383e100e0c542e336d311d0132fb4115f3de6d0ea81331684d440d6754cf3b0aed4c3e8e802f340fb8662c5817eb77cacc22442d33628c9ecca83adfc811c2456e23e8b9f035138061ab12495cf5929c5b578a94b23d89d88ed15a934849baf0a35260884938df4def4b2c7c91f962ff9d3abdb0adc46fd970425bdb715086449b83be57ccd7a85c460661e96a5146433d9f534e561a09ee9b72a2b44dba54cee5cb39c88f6552f8b8c29c04ed4d09c192e7653aed5b74d898cf9e96ee58eb781452c0c260de084673bac0d835ddf9159de90906a9ae5b445760720d6c1701626e73c2a147bbfb182f6d315cc59b01a4b5d204ea82cb6fe58f563a48936260dce8c2d779d041be5adb7856d8f955edc6231118ab11b5e454909ad4a82524ae3d40a969fcdcf1459cbc0907674d8e587e628bffda6325668eb23feae1315b31b52cee8b7e585df38b8bcf7f14b9d389471b753c2d231e6c1734922c52d16c2369841c24c27e51e03eb46648a7476511f2d57c0b683531abe93ee4a414b46680b106e6a53d42e9b881faae3f2f8448108cc5298b4cdf386602067998f1498fecc3cfdfb21304e0a54a3bb8f929d74c27777304ae6f4a7d66f69f424b899723b3d653c0d33bec1cdb467fe360cdff0200e14dddf83d2376827e1f5e0b9340a1322952536e9a8a554d31f125331578f23aaaf5136f639fa4b38944efa30f556e7f06ccdc72d42f270e8ae79b9445ed40f7c60df4fed3bf35d77e5e0195e3ebde1b033619914857fa4e41937f73156b82643dc9d54b9a640e13592ac90be2cc9229e689c32070ee645728e01bf654b994f7373a4b408e134455a7d59d81783645292e895189a9a9cd405cbd380213c1deb89781dbf078a15d1153a6c649ec548724fdbc9f121c68c2efe17a9c7f9687725177394124f1c8ec12295e0287a0f1d811e5b3a55d373017d0ca48ea333eba760cdc188cf50a85ca17ae4ded99bd1680211d713689b2817ef9af51c08733b0550b80455cc545e3e3dd64c8aed0c8dbadecf8df1a42708a706d4a46c9b67dec08169925de9e5da52b4ffe325782f3a8a97f298d02ae3783078a1d4154e245d6ee1e875ccb04c01db99060ab256c45aa83e15f92a09368399d66475b846f07d29bdbb61d6d6c268d517b0ff6c3d04f1e0c6c345723d1278bc3fe72b6abd46079fee3a6a959969772af0d0fad14a4d25b69c61f4acab6caec5c183ba68035d025a422e63d5a8871a69aa59b250440b623b6660482bc2c5c81fb4f8fd64fa037ad5c65cceabcfd371988f121ad879e23aeea9a38b4b317fa6a33c6414f9228915d086d9fa751c3b5312c70878243dbfb7d07044aac6f7e10f98b65d2cc8d2ae5850f626a5f4fe38d20db81616a0322ffeb698f8d5fa6f6a6835b11f177e090af0d301939ec836b16ac3af85e53e2c82d2aca132245f8f2ae7de1b95eb6a4b75b1053d63c6fef0e028f876df53ca7c76430061e6b69d735d954bae6f08f3b5adc1aa380b3d200616fbb70327637242c0897f1c156cce9f0d88b270022e4b63d4e301395c4cac951f44e6494c722a1c68838b091acca9b16765296c301cf355538db7066c1a044aa9825bc91cd384b0326fe73231f8a1bc39d3bb6181da18c42289037f7438ffb82c73e4cb95e6832e971ae62ca261687963312b06ead34d421c485bccbbe844a549fd8a00acac05f9161a50a3b8a2a25438bed1f0816a49d91860fb922091bc357883c9f604bee0304fa47ad35e08c7afeb72d4c030a319c18486f4618e3afe695eb97aa3b6770eab508bf15ff3693be2e9de1c294c4360d0d109bde9b4c7404f2d1ac3169761848e6aa48223115cdb5ff4130256b1ee0bd2527c6499d8e608cd233ea4b2c6ddeb23422836cb0be64005cc3f50168822b9a3ccef9a9599f430761d75261420648ccadecd41ea0a80e6b5a1d87002a0ef4345529f61772a9435dfc2e3533878fbdf37ef326ad7a97f3ede41cb643c2122aee7954d8fc4044f10bc50841222cc907c8b760aad6d89d30e5e9ea96c40878e109f1d1903d598347300565225671c18b37e12af5bd1d1275972463887eb12040ed3f0fbb0afc9cdcac91fc37ce3d1937bf80b4bc2e10421f0ab45874b55848152d70eee44580f41bf87e95d0cf3aa23005fb8dffd35c53124d74dd3cf8067c846452b04b52cb43bcf7f82e9715aa7ac65c17bd44a7e968f5ce16d207c1640c2d2188eb01ec55473e1febc27cc47467582123b4061b097a41df15cd9892f0d8e9512111be5aba695969ee82d7928c8d9625f3fd8828f6f69062a054910d9207d8394a706d201b87a3a68a84c738ef6d9f4ab34d1ff5ca8a6250ef5859160418a8c34362370b7cdad092fcd9f9440956d829f34c3ff272ae01b422d2bca2da5a7f537df2ea5761ba8a951a3d18c86642d6b916f2709a4c5e7f23a2a9b1b9e8dba3ffb15e238c828fae3a24e685e5a32b59a5f43a41fd39bd9a8b1ed8755adc2dedb7f9a3314646fc67105c26ac632702cb11aafd9cce9d1d56c6de5361eaa1d9a40948af8593ef815a624bb1b53db9e929c04556e587dc7b94d2bf9b5986e4c3205a4e61a78b55c5ac14a9da4842af381aaabeb5c6841287933e88c93f114b494df7292cf3c1d11716b452fd375e7a3053635495277cea58fb8ce14f6b40f89ec7bf80938363994552ea5f9cd00fd44a09d56d50a913935a268a9914b9347e93bd7d03b16946aefeaafced0540e018b383c0927fa2a18f02777ee038100937df87d9a3bef80500000794abf2e7e45e5cb89ad17fc8d615a27c2e19ef7a00350abc7f6e285b9e24b43bf2d71fb00bb425bf9adf265ab4b270de7721f85e69482208a2cacc6e04f600cd1dcb922f99b275aec86dde7467f98e8d493755149a71c122836148a233f2450786d16fc23aceb322fcbbd81d0f558e9f6f86d061529b280f8000a26d8028290e038e0fd474c21815a6395b9b73c587018abf0682f49e0c2e5d24739bcd506e32301f9c6d1bf898984cecd856f183c171e5db4a0f7100f5cbfd0963d320fb21c8656f100adae5e5ed52fe8324606fc374f996d496ac22e9138d23eabd6441414785a3647ac3405ac19465abf42cc89df6892891a36b9569ed417ac23786386b2af3acc3b55799f6342c9a89dbeb20adc3ef4d0be84e00386d111b4438e9b846d78a2053be05e00eb806143f8876a37369ef08af53bfe1d601f662e34441b55674cdeb967cbc5325507a63477ed33ee1e9cd8256f52fa740bca57b0a8cdb0968259a55f1cacadd1f3dd497c3c30b2eb0e371ade125cecee62748d81239097a5a4a91b8c1a1490c2ed9a52b22ba5c4d4f82858eb8541c8d17dea31bd3ceff09efdb5ee9dc97db0428413e652771feba90c6d52dc25cdfc67269081dfe3baedc8b45f3cf1a1f220e1e8637233ca413cbd0ef4d9e6198313f7f79a16d8792466b96be9508c8297c97dd0afa54c65d9e7804c319f7cc77015a65516031cff2dcbe269d1753be1721c0a17afe1c63a30d5f0bdaae19985e1304637caacea1612121597785e712141cb63ee89428fb96317a16e9a61216c1a6316948d314c0200c3b800304c3e7961acf5161e0e2c8aca210bfc11e5a43596c862350ffd5dcb191194428d08b16f44c05b3a1e463539c118554838c1868443f021e185652a3531b5816fec304b8e98dac7560a803b91be487205868595fa7b920c7697a3143a4c376936a0b03f7433a47991c01a20a1ef35603c3758d0cec62764d043b0e43c28fe2eba2aaf24d23361b9b165d6db1dd349f86f67e72a0819398656959a84344b4a26e736bd35119dd073c0469242f3b194519755cad3d8cd60af346931d1cb683b4c055b43391d68331e68273012dd9c2062f719b3124c183d03bbef1f0b05afc9010b144022bc98fa5cca9674ada95bb05a2ab1eb4a6f44c0bbd9b1a399c1a14137531c7a300834ccf6211491d4c4cc75b479fa1e42bc67b9afdcf534cf4c8e8700488d2c68d7343028961fcc37fed75bd04a1d5149a75880ac5d20aa1674c4217fd17f0cc2c8ba28483534013257c90522e8bee59895d274ee04343cfe2564548cb17783d0edf4923b823ecb748b466f136d3ef84ae959003d3d6cc4b201ed8e2bc18d29f9c6d5c0e078e334a767e768eed20007a8ddc72b2a15635ce0c34055b4d09cb3f51c747e575435326257e78f33fff5006832c219991a837a95a287442dbd0631a1e9d114e4f3fceafd0f34f84bd0f7aaf017fb000a4470f3ceedfc73bf22f7f0bee36e05ee905be6e44f9e267596e8c4bd633de2bb2add536a45ff3fd11e673c73ce36534ff2645e2238e1d81aa9157c61bc131f32357c7007758207f5d2cb71947e7dde3d8eb86be61400f18bda65917ff73c2253b5dde7b8f604b18bd0d72a0b9fbf2afa3bd8138327b5e58a0b560c481ecf660618f5d698c6af3285904e798dbd86a8113ed574ee712b46ed0844cb40f4af407ed72ad332c24250104868d089c795b7a64e915f2d10a4b6eadb5552d1550a0ff398f3d7324f1d4fe24909c45f5a1af54f9510226a96f62475c0aecc503b6d940ee3632db1b0ea755c36abff80870476dafdd2d97ef5340af75d74531f454f066b56d8e344f16b6c485bc6d70b3d202dd65bc5cf778314139535951da451beb8588520210916f34c86335916c6a139db3d6ee3896667bb9473e1dcdb3f6067deeb3d0e6340e3aff8f93cb426fe82162e74240b9c388e46fd659f8e7d31705def4936d43dd7f92bc4ebd3bf8b98410182a106ac339057a9516528b09ec52eb8b48c38a43bb83aed2af25cc7e7dd3d082998cbb9bbf2641735c7d248a0d0936b7459d17a23c1763d3b7170c9d57eef11a6a568e9afd8fab011efe645ffdba0d23c5575113697869aad7b3b629694cc00520d08b6235e30418a9fa128e5d26b4ebff118c1cf64f2514f8a2418af4729926dc1a19129cd0d5092239ffc6aa891a22902fd6ac096cbda22dcb5c823fd6f492f6468a443e8375fc35b56b9b7441726edcb77af7a46e54b67fb5604f69589c95e72bfdab9937e037fe99092dfcb81393bc15c8aa1346e288aed502cb85b3d1ca6e5b4731efb6dca6ae02ecbee648cdd89829ecb01547fb3cdc1fafa3b19200fa060aa3e98392a58a08fcd8818e9f240e441d1a7a591c0d4bacec78285030d91375a83e2d6ebe8fcc519a146cbe5a2ab09fb38576f13d2e6e3486cef974c7174428c4e74fc32495ef25364bace407adffc9df3b73b21a9c61c39a6d4a3f1e9084221599a8ce827a470b4234830bf6efcdd691317e6c8aaed0388ef1f2600216d631cca49906f186111c730baef44d7d515f242ed9633555ac4f7bd65149151e329db18c3540be1a087b42f6c7bf58f882e4432d4f53d5dc08c647a69e245646b428908ef3143b785f57e4fd635e2fe2105d9b3a4988057e22edaf63f286e8ff8e3d028d4b5e3c1599744c4c7da3ed46b2d7c4daa0f69a972404a937dbe078c278eb471f7f042ab8082f736748d47813fb7afac97f541b87283448b097841372d22d26bd107023131781e597dde32b0daaea7fd83780d8d3972d6c289e27701123bb23d7bb388abc5f7979e5418008577d2c7eb4aebe1ad68f0b5575ad731287780170f9acc6dc1548027389a0486aee91ba1e762640b1e79f1fe805af3ecb65c09263683a5eecfa07f2b6f22c7c004f23705cee422d3c656db160b800731089c6b265c9bdff91d9c7b7cfbc978f49c00a11e8a86fe754af744cd32242d6de26a5ccd202e5a60221a91ef096aa35609b2ff3ae2b4443f2c09c7a1ca4af1e10648d0675adcf37e5b62d72ee328341b493d9e03e376d2f12b1d71a41fb9c26cf8500555e05269a1f4570e48703596ffa450cc54abb9f4762f826fe3a9af9e21910913ceaaeb107c5a0f911f15d982dace3104eb19376e08f32faac6442facb55f13b48f300e1d46c3376db2a0756b9ddbf60f5ddd2d22d83daba85f0557b67acd645f4abc2743c03eac3cde4a63d46418b634e08529849dc09c2484ec91b684312e09a8f339bc17feeaae4e15ca8100c2e0a576f2408a2c57e1b54739696c040388be2cb60c0b398fbc2fef97ac2248e33067894295da898d0c5b5a4657f4199cb9a8ee1d52fc293bbacb17f1e9bf1ea7ac25eca613f57f76dd420b04b92e390f0042f48720d1ad5e82707b2c340c7bead8256194de487f43b03479fb30a2350c2b8aa0a220a0515f6fe78466e869f271f4a8b5c36231b11c29924904c60cb52c5a1fe54553722e5849a978d129869b292ec4fce4bb6833b2a1f6ac6e8750cacd151114c4e6636a9cd3f3dd57460c543dd0574d83b290fef2d2af7e4ab6ee85e415b42de18dda3d63a8b588f7f5f6924bcd99420863db857ee77080d29c86d4810da1080a654cc136434ace6f9161604311056848144b01cea16013b10cb7c513d871866bcb67999cad4e7151c0cf0623284333c9c0514441de420afb2af6076dbc360f2a548ae335fe6e3206493328e2e951748f631f8984a0f9d4681362b412b7e9e89be3b8252a2d155f19c3826fdb133e487cd61168946dd5b2d0a8fdd89b77622992f667b51153d726b7145d4b89370a06d993b39307dbc3ffde0b72165b934a0d0b05816e5e2d971c8471970bc1dc233a5ec24db3d070a64e20e4e599257dfa3e67a93f414ec9a6051eb93370267f8515e055bc796b65d4196736bb9059499e7d7277a874e48d6efed211659c1c58582a482e2c58f1be24e3849c5ea0dc8f83079886407b765763e309c60a204a25ec71762dee5fc389d5f9807e3b71d7464d8d82e25eca80a21daed00cf681b7a60d29bc2b167e3a795ff397f160903cb8dbcfc35f5ea96889a5885e1604b531bcc979b0a106e2c459a95ea03f605443edffed83bc9a0a1050082cb44edb58af4c7d495645576ebecfaa023b7bcdb7cd0c8667a2ca5bacdeda8b89a5634b28b38c9f7eb88562783e7d2cfb06ba0347e980e30d44ef04de27f49b80aef72d44844cdf0ebd3c3ad8b85a76a087bd3201426df9f73685208dd000550883afe664f8d2ecfa8b94d6ee77aeafe8ab1293382e659d9983ebbc3666c1247757c61f55bf39a7489d83490ccaf48db319ecbec044001f82ef9aa05b9c336025fe1828f6ffe04ea8582471360517c59c5e7ee713665930e375ef90ed8a329d966fb49d919faeac5be597edbf0f54d099bccc237011be2bf3f4e736ef9d65928a5d33b12765495d9c26dc326862b059f2966725ecb046966fd44a6e05bdb8ce889126c08cf3d812ffae17bf5efb96c44415f41277eb7195906cbad5f33991613ed7b5c92d023b3e945d04361d86d165c15e368c6147625aa8de0df8d78162a80033e516894848e6a6f32ae5f61b1db6714f3c9a0e536c5280e727526ef438cac992548668cebb80487dc5cf254cf42344288501496180499664f3ebf6f655efeac85c920d11976b26919aca8f2a22130fd16c461ec642848147db24c4fd39f0765224e14e3fa02268d18b9f0ae24c1ead760ebaf3b5f26163a420ad68a603115d3cdbb254066ad5feefa33279614631dcbc4b39703179e95eeb894ce184ef2b12eeadea13d5880796ed8c08216797682af4473f1e395f34deb6cd2450ad7be1f1365518406e19dc55fd4c4404e4d7de698d2fe6c27791c98948cb654c20cec50bf60de7e4aaa479390db6fe0d4dafafec65b925f6002e5e56002e357c484ae23f88d63b4fa117fe9099ba188db0eb204333237af58a46310a05aba7a88c509e124833dfada60dea28a48d2c2cb8db1904769356fc4188d6940b4ce5b840244010b82c597f9154769455861eacc246e70195cf2049207e4af986803458ee0d5bff3a6ad5ba93384794da0edfdd082ca7b4a9e91373e82c919577bad0735af922259980596ad716409b9d5e8901220a72d4fe43b2236047be1305cc2daefbfc13bda774c41869064f4a90a12f0f25f4a8b6d939f022b160202bd9c0ab313bd74f950324daec371e5dd05b1c35458268ebab8bf8524dcecde8ec77095bc5d830cd118466ffe94cfe9f04c3e751bca5fef6d38e36e15d367fe5967e1dbe45fbd243b8184660ac64a5986ccc18b741fed4030f94fc3d98ed612afd493ca29830db8f45298508153376eb4c51ed490c3f86253afe761d03d7277b3bf079f351b1d0108e9cb1142e85a4e2c291a012d0728bb4d56da3f1f6dbb699ae68ba1dcd611517b8a37e7e2d1aac49c6ecffbc14d702512f6232ef4c2da4f055eec4ec1abb9769dc45b7868d23210dcd25241484f473bbce055ea14143bd7dae9dea04f72a1720934aa1a7cd287e45debc4a216d7329cf6da21b9c4b88c3c24c73faf0d539af513b0606b031223d0a8f5a321a47851963c0ec24a920cf5c0e2e3bb9bb4f5d9bcff07715f91ca03160c2d53281992668a09eebcbf2dad599fe8cc9c59853178d2410772ef6306206eab37f022cf4a2bf4cf21f76df171dc1bc38fdb6c2a78c5e7594a41cc000d6589c60788cbd50552339cec5849218711c8f0e195e2844332e432ad73f95058c18097cc467d053046fd524acb203b4dc5730cc53328097c28a62b16550ff3a7f404eb77bd8b8cf4faa736fb6f6801ea3011aad54119d58c722ff6fcf7e83d4360f20dc0622bf5df61e722a98b4fac463728ecd458056c1efc75250e6953e1ec3b4a675d0734c071bc8e31259112ccb28d0100ab703331c8337986c336a397ef557a52498c77cf7672361f547a310321ea64669d56e06e240290b0a9fc3ee1ec148b9804aeaf1e8fa2b5098d443c6c23a3b136be2b46f99cd4a6cffc550e939d5dc0dc92caa86a02fd4dfd1337a05f8a203a8cd3140f0dbfe05947f9a316de52dcb16f778f7310033f8e4e28dbdf40ff554be885836d4fa4557ac2cd2fae5137c8b7aeb07e36f659d9279f1af486bae1164ae2d71d86150e1f9e2e416c7bb243964813c47d34035aa3f95fc80f6439ce79a020e46b8737cf86e58bee91e3f130e118cdfa91779f060c4e36b6efc3be3b9f09cd370bbc4e0bedbc7c32c943cbfa8cbeb2b40128ba7ace38f7003f854fb8a0d3140573804215210a5e5953015109a64c7f58d5c92629d5342007a779c37b9140ffd31c18771de21d95e0f29606f2e005379091cc6b5a0f76ddf0afd7cba40269cec00dabc0ba4f05a2bc0658ad26d53124e46ff2e5af1229923cb4babeaf36170f7baae73e8c7fa0261d292daa091f2c6e6b6d5f51da01fa8be160966fb6d0bf24cf907d49370131c8a46664adf5bb6f55e274f16bb3a37b78fecc8e10cd8d525a0322c699ae211a33ef05fc9ecd124841ea61ba440a0e70c6d1a385f5c77bb7a45c1c7d96976c946792d91634ed0d716f5690760a875c89ff997f7096e3d6fa2ada12dee1dd94ff7d66e4779900da87aef7dd3193057b88fdb7f436b1fc509ca0caa3b28b0b98b6765857960bb2b3ba8106c43903f46c83dc423bebdd862464b7cf943daacb3650e820da3619b6f91fa5f585c2fde5b5a6694b6cd2c5419b89cb6379541720410b5fa4acd56c223c4356b8b5abf8c5046bf997a6125ff7d1147444388fdb5ae80809a0cf5523cb5897c3567f68ae480ebd0793a3c98ac8373fb6ceb199f33f694c7a3486f206cb2eff2f436c6c84a4e310610dcde0504c91c964485a4799ed4773e0b8b5b93c4a1ba080638b07bb6848555e0382aadb6c5e3091e57e05cd8bab80cae42b728b582197c1d76c6cab501fcfc96871e2c23647cee34e8099ebfbc0f0ccb43ff6836ad5d4eb77617a1d1c8ec06645da6d7b5ef0c4d3367143b3e5c7ca99413be8308bdea8feb90b5ccf5dabc450412fe5557167298d91d5c2d5cd7fe09b29ac139bc92f2595677835ee0ca83349c2393b5fe03441d87bbb7d0691bcb3ebc67d10c8b58aaf72d3e94028d86de05a5f02d824bf1ad8a4eb7382fb8f7699a869e709805642ae2fea34a181925da66fed08aecb0ee55d8e58e84e895792a8a4712b00ffbd5b97e8bce94b01cd6bf815171271700d2cbc8f808156a5ec361d7a9cc340696f2d71047558c3e4514b4a489e67e5afca1b215033071cb96348be11ae9fec243b23209ed98483f1ce7808ba9acdb5a6f0e541105faf9b7a97ea5337996a6fabfc0aebaf8f0d8ed153ad10c12417c5747924e10c7b1c7c83c1945b45a5e807b163a326af090c9108be5b62dff0a0e8f9e79f3cebbde1a7420a93fa26538a9a085f55fc45fe411c743f92f5e9c8dd078407630fce341131e0851e3a3f6ce3d6fd0fcdd759f4342df17f1f5fb0177773a637c609f88fee3cae642ca237a75842f4c28f0560f080a797d95aee5dd6456bc3b4943fd9445a37c8e020b58e8b182ba294269588a00489d72ded52fdf301bfc087df7fdd07d315b62321129e2e9477b38980e18678d41df6546eb901020ad3293e91e4908176bd318897ff35f3a5fc6770565cb26449a71dd473b51638ebbd9c76a3451131bb41aa50878ecf5285c5db794d4662e76fe755e3d07a5d209843d90b29cf96d3a3b27bf70598afb863a344a506f3e9ab7ced0d136ad8898e180c6cb7f7aab819658a9f057c6cf3b4b147cee3f634dec258bcc98f42cda716c1ae2a028d47e4844d469098362b89e5986c79c8d1119e20a7e6372183380af5e548dab51f646f3ea24e98c5d802d7859df3e3dff099aa01cc2a4c348f70ef997da3ee5263778d6b471172ca1fcae6ed14bef0210d5abd9ea129e1c5d1e0300edcf463e7a79f21f5b2018acabe716c129de1c00604ab3f3b5aed300cd6822c6f5e09b74d8e3433d7e47fd6477e1180f97f3efb57810c8d99076166cf1dc7bd9befecfb942c7b8f377dc8813dd937dd1a01ffe4b0e7953e7bd69587fe49a5955b436f1d9001e5ee98e515bf9c03f186c309ac6dc762070fb56f4e0d491abfe67f2005bec0ef7dc7a94453ba55d36c57de2d5ffb5a81dd55f8c275d7b8e2917efbab1d106d965da8cc21701fd70650d78f0358a6ee374cc9a3319d993cca6cb4b916569d39ea63ae986be3d33c5094bc1ca622736e6cd1abd4fc29bdd23425b25dcff12a408ba0e3081d813521f300b437ce80f65b7864d6c0789f8a94c5a951e7662f55d913e296e26853b7fb21f174b9afa665f3fbdc6c151cb2e3b9395f934cd49e65819f97bb8b62695e43ec55d2ae37003f0f8f3bd20b5cc195d3635ef64e7af915ff1a7bc0c2c7a99a1e87dd561f0731574ccf1a788642393d32bd9a09002b87869abe3ca801e5b4c864660d2878bc6bdd0c1f2b048889a192ca1c23438a85572d9edb8fa8e3d9bf8af3b0982e8c9d20abf7a6a92cb682ccced83089b4623b7c734fad6d82fc8c9b2474d6e92c9010f2232db9ce5b83265dcd0d9716632e8686f2d64eb838047050f5c124580ee3aa0c20b3770e08ef180d93cddf425631f1bdb38c751d46b4bf987e986a9d305e6f2674ec7df40b76cc4d0ff05c38cdd9527fd3737549147b279d3dd27d3cb9cb9921d99780681982cd64e467cd474218147b1d4f3d1094dc51c675a21f6d600cf9092ee2670e4e2f5172897f04d23b65c51a4f0df983f3e35d656cc78454a7e1cf863da9519d6c33c6790a17badd9ce2b12db45e790295c89d7bf25a5c0197e73e4289ae1d92f02d75dbfebc0eef2a17e2074ba24efec47e6f738e2ec0401f4a81cb895de3a799846f9053f4af8796f778bac2aecd9ddc17acb506c0342209b3bc89a886915f5177ebd4f432be112127e5eab3c3f1fdc9ba43c9a31e391007c85c970d005c21f9245dd40e0d67e53266bac326d7565144a3a405e19bb4a02f0ab10de80923c2048d21100f13292fdbc61c65cd3f0668eaa9d032221f3c7b81089cbb252634f3a73a30d646d9aa8b64135c4e78744dd56796c56f0e186c5bf5d70c736e2ddd2a6fa7e0e13e59096d33fae389b8db22d4060fe4aac83143365c27a73a80470c310f1de2830f209162c231134809fb573819beb186e10138f22f27cca62b7036247bffb62fef341abc58c8d04913120027ccdcd641b469c8405af03b9c09be431fa3d098c4bcdbbcd6078cfc3d307912dbe9011be9e2783281eac91fd725087059af937b78d1f62bdc2f3e278b6eb1239c1a704a8749c08d1e744877376d4c3545d01fa7b48e7cfe7833c81d4b8a19f90fa6526162013361a74c97d53144cd1fe702ac00babed54c107b0b9800f54b05a4562fb7fc856fb97da606316a38edf01d1120e2eee623bf3834036e54f4d322f3713139484774ac85d093a9d6099486a244e3d801ca0cce0ad35cd462760228f27da248f9d244d24cdafa549001f1716a50902edc834a4c1aa313ee423c7c812a8c00d404bf1919fcdfa24174ff6c2f7181846deb7085579de8f35e4264f10755e87c2fe7721a9430d09cea1a2f935d3a8378210b72482b9ee8c6c61f5f6ef0a63f7e2b19a9a16802641a1c978c96b4c274d19539dd586cbe9e007601e26dc0bbdb0293282fabe59bbd61f2e6b2c841bd47ac66003c59cb7bb97f5cd607a02ef3dcab01e99a79fee1e75f2373aaa7414ee0b7d27ffad2bb475986e082f0dd8d2cbfd4e6bd3f419fb4939ae9257a379ea17d797d50408e486df3f300ead7260d3c9b7518dd496736e34f296fcea21c031d688b82ed130cd3d5b3bd3a4e8bda8fea144008bff7597313ef4b5bba4345114ec8cb845e2379de0de98ad1441fe73a37b237093b8fa0aae79f609b995adf035e174c9676454d16b432692fbe7d331b6e3668f469aec5d5d174f21d86792ceaa2be0d31e5318d4e5024a8fc6875b308c4a6ac6f76b1723668e491800433d84bfa4c5710bd22682c69823acffb96c49301a103132c7b81ea214c935e101cfddddbf2a77745f771a44d19b39592aee6fabc0a7258267573213b2ad1b356a224269bd5cc3a5255b4a290351095708c5073a4f2ff09ec6d8e98da9f41450dbf0e97c65d81b568af1b4b7a717ec948cedc04a18b67d64bae836368d572ebabd0237391d993e514cd6d9b548e7b2dbb318866def4e32b69d8c6d374d978e8d4c7b7bbaed54f4b2b7a7e4d20e328661ab2217dd5649564817dd9e92b1bdbd022c395d15d9db6d6cdbb66d5b7541eecd44ae981d3e9c70ecde0d500775064e3ba70eea8e5a45cda28ec954f02c8d303945918e6c85698061f7da2817bdb74f365185dde77bad867aeb13fb66b1a446bb67a32e4cabf866d3c625d97b1a6272da69c0e9f4c6be6bdad2d6b2286d271b4761acbbee1e48f6ee57f3c8f9a781e0e7d8a83a238a9c1dbfdec0d7b28b44c30bd2c7643231e9fc3b0f9d7fd975b4a781e0eb68fbd431e16c9bcc9d84eeb04cb6c95eb14258ab731d9d963be7bc310cc356082b649d54ab4d1155da288b0493b9943d6ba36ef8c44c0ea3844a366a774facb5b6ab5ad56aa805c1f753e2d59f142f89c9d66edd0e754676972e0c4f795cfe45ba47f60d973c4276a5a0b0503e97a3e3dda8cb647778f15248b0fbd541cef64054cfb79ac7ce772c1c8b92a3a6d38cb318b93d8d316a4f271035113bcac2b142f7425d1bd0189fc02c776aa7ec3db2f15107eeb84b5c7291505f260c037baae4ba4d90c263e7e14d503ddf849d8797f2ea40f5fc0f761e964a393f3c54f626df636045ae3b3fbc9d0aa1c2f0bb2b726d8a93b3bb460a1f5d275c31eceafb06899c5a222c11b6882a34a4c4c6368a8dad151b67da669736ad714d34c4dca5a92d05b5f1932826e35ddde4644b17c5b7022c4cd5ea4b05cc40b5317093d3da7477d870c577a9cec0df6109ffb0f11d62e3ab052f7937bbf1b2ec7a0bea4920affea462d3d6eec16e5c2d7b3d9a92ba4130b6f63b8585300ecd2a995972d3d698b6a661258b6402be8e0952b89b90dd7b0762e094ebb6bb32d190b259700c0be16b55a79847f6281ef83afa4265b15256c8d3b789c9eab4b342de7d9a62451dea0c1b948af70a5d20357583dee0a32bf4c2a11d23e124da31139c8461c8b2b563a56bc5259149d4616b49883ad41b5db787aecd60f29dd277cd452d9252d72969b7489ab66b76ef1fe01c1d9d5260a7ddb7e74ea7a6fd76ef7eb7e66b6bbf5a47923d2f9325f93669da2b80224b61210a745cde6017edaa765b060818ce204183855d29ed1aa7d36e9312c5e46dd7d72cd74d4e51a9a93558728a6e0db0d0dda2c2b47357aaced01ea34dd68e624dab21a757ea6e5185ea95aa37ecd62e9bad61215bc328884d58f287b5185dba0cdf7baf4f15d9be66f7f25cf4de7befd5e072519a769c1d6f2009dba9e56080cb489065daa6719a8983c8b46ceb9c7cfa5e9c6f10185ea0c8e6724012367e0e06322ddb1549b6bf59db866c1c97719d8e876ba6e590dc66d6bc016de31c23192795bdee1333f575174e93ce981dee4d530e970da913e3f4695f3c71628a00b306c461dac4f8a0c20d8073a4fd8a71b2ba0d703375746175a75d16d381b0016fa6c41ced34e08ba51da832f9b5eb96305aec14e889ccda754b98263a15f2b9eb9630529cf277dd1246856e89ecda758b165c4cc93dbb6ed1628a00ecba25892fa23a4c45aea08e9cb43e6dee365ac81cc7755dfde9a424200825a478c10611bc80a4a58725285c14b1c3922323319018424392286fa6348569028222440c494a21b66561635bb86a2e966d7b8785b014b95eed078d27d4a48992c2102f7041224b82ca0c448498b226052b82c062891025aa18c28a0b6cb0a28a344f380115e7881049085e606209962a60300206365724753972e50d1b1f1d88c06186a5158838a30113648c80a2c2a9051e8a386205134a541cf18314255a88a84d3f904903050a1265c2e033958b262a54d470b1e28933437444a0f912c59a2852d012839b2f5fd04cb93981098a2b4ec000674c9822559a9076920013450c423c55a161045eb06441e4490a15581c11644a0d4fac198383133280d1e1a8cc9732436c7021092190ba8841c10916decc50031441b460054e9138525f4411a286b1b266cd0c5c44e9820bcf132d71d030a1848a2f5790b67892c2910b471c8183950d68398a22045c7c0049cad58a1c798012923050dc4cc59c80e81962491c0f38018416575422a45062899aa7156e0022e6a44b0a2cece006045a7e3821dbe10368ae04aeb81981154684f9814d092d2009c28a25a060a186c9c8b6460b1dd85c4105103c8880cc1326a4901c71210a249f234d3071e4cb941c8a004106245dbeb02288159eb62a47b016f604db03124684a890c60911f85082132957d4a0847445984cc9912c4b669a5a6012a28a142a182811c507d8f4d0f4840b0c02993043e4f00129925cd14305c440c10314223e4431a4890e58ceb4a0c5122b500a40268a09044db8d1210a1e8e0489618b17255ba4b12243956d071c4500010215d218d1e60c1565be6892c6034ba652d089e1cc0c488828228e114b5718814ae269cd17295f740812c3952a6aa6d800c50d3b5490660727483c2cd1850b8e9b851269867822b5c30a2f6c53dcdc3b14f3a24a0f44cea490c226458b152c50816648cca90b234c4adc90c30c6b98080282187a5072c393158eac6c5114804254174c2479e2cb0d5b0e5250aac081c99017dc3875c1a2a40627e0248903a755454815477a7001ce900d8713384dcb38ecc5bd48970a9656939731609c08230231503050440f3e40a125061590b039dd12709be1dbbaee5e2e9ec8217b42878c09911ebabb80210dee65b2531b47347d99e18b92343e4a0022b593a3ed6b3ecd0bbb98e3344dd33a2c8573b008766b17cc80bca1ab30ef9ff7fb9cf3eb7ddae331c9f4b36b2e6a3f059e3e30ac0420ded5c66c4a954b0e425cc1048520d670004589264270460a267cd8943a2b4248b0416df7ddbd609caca8b4804e2a5c0056303bad4f6ef6fdbdcfd7ca17213bbb6ef16206ca854dd7a084174ab432ba0040363e9227dc758b172b76fad382a669db969dda770f4dbb55a0ee3b1b9ca822c7092f39f776f7debbdde044103a4e6011ebd3172a4471421a14da28e1b84d4240d04311514abac80157238a34a125ea0826614410048e083cb9120516a62e80288223ad4e36ecb43e7981c2db758b172c1d0e66dc14b1a489154a64c002c7adc1090f642dc4d880892048f085165f9240736d9297116c5e8e2877dde2058ae6c35da28923543a4e10c919f6228327eebac54b92fdedbac5cb51924dd374ba6ddbd6711e6c746f5f7d60db30de362db3f8caa0d36c5bfb9c669bb49fd5b27bf9cb39ef7c83340da73c5bd31fba5190589317bd5a8c314559088cf6b60020029e07aa9a9c5416abecce67f1962ea26ce9e2cace962e94baaa5ab24744b409f3cd44454867c43daab6439365a7df96620bf1b67cd9a128df5db770c1e4d5d79f02dca014c7306eca6a92f6d015b217e3189e81896d8528d812041921170e7ba5ccb6ffb1b72048b5b788daf63686ecb38ba564d4daa73aa309c36cb561fac54e14fbdb84c97a2b65a764b5d61e6d2d29690fddbb5d0e38cab8da10ff1eeda17ba6e6aeb88d7747c8819f55f10048c771712540aedb0dddbdaca21596a1d9bb93acb0aca2d9efb3f6db651238edd66e56c20ddd333047b733d800b6c8372bd2c5a6e44d750be6d8f9ce947c4f43494eb199ecb4d65a1939ac0816ea32ea0c7c7c849138ec748376ae3a761d1faf508534c0b17a237c8d93656a08a91fa27680828269d818bbb0f1730e9873504707effbddefda5d65c472ca45752770713a225237ea065529d640d9f89c991bf48d5f53ce0b9cddef7e3787cdb8284eca0c7e14980373514a51347ec8750b97293bedb6a97a831b626353853822b826138a30890de49a4690532e898b538534ab4fd8f89c173588757cce4d0d32af4de13455488b53b924ce09a7c445b941e4f1b9a51b341e9fa3c23171576e90787c4fbbdffd6e0e9bd9d3e4a2b0d0864285e1af20e5c2c61b0dfbec9036a43a03ff8b232e6967e006f8cd45f186b4c5b6a4cdc991f6dd0e78ce4961981119bfb9e8008ec85a1416e29aa6b0d03615a7c270b78139be9316044150177936b3956bc2d8e39ab837179d8a531e7f9b5a1d839a8b62d2a6aeadb63c536eaff40876a75c54da1d6dfcec2c22b724013822a71b12d774519c8485b8311586bf85138e8dd216b231e74469e3252eaacec09cd51c008ce474a3d2b4f1d14eefd14d3a2f0ce77572de2717553a6f948b665936b5e6a2184b59fb79d65a6b2d08de7ee0876e06fe3b31f8b2bffb958119a8d120044506bf21c1dae42db6a5190d178222675103582267536ba6d6646fde643ad58e36be5b7bd2a0b0d0ebf8e77d9d534867b69445c1517506be0658088fa94ee2b8b071b6c2b9531c950961b331c65beccc8094648b6d4c365c25dfef4c51e9344896853b3bd9bd873bcf5e3eedc31ce6eca2e02fa82353e53cf33e9d4f4727c9b548d8c2b0b116e5f95196c352d88c0fb9a5edc5e9cb6a1d166c0fad42b6c2ea8dec393961d84a656c0c444e656cfc2e565e195abcac167df9bba67d5976efbdf64a4f60b868bd49494c2e5aad13ab54afe9d4c84b354dd3348d03fb5af4a235678a97bf25d094d929101a30394e68b874004d141dbad3793a9d0a0d96cf4b02d1fca0d269faba1c720400046403c9c9038a41d5e528342c743b8a28a141e15b4223a43b1275860bd58e13a03aa7aeebce78d95dd719317361754d67e44d2e7261f548920bab3b7d8e8b022561deafeb72ecc26a77e68a6a070a516778d0d9819424051b23c8255ead42399da6699a96d3699aa6d57bf596dad8157737710bf6e24cdbf0c65daeb35d4ead36cc7a146828df63213d34d4546f54559a7bcd14b12d0482d0010e9b29324c0d010016943435f1a206244bdb121d92dd7266867186146d78a0014a962b8ab429622633a3c4d6a4e8b2ce8b941f33336c8cbb0e875183241b204b992ff67d66002c4f649e4021c344991acea4d13093efd1758285c063eff6dad3a768d694da105a9d7c8e4eb199718df84655244cb233938d9358a195ee986418f09350632a1b5fd9181bb1b17582a3f8d891765fb7b5180c2742783882418813214e59d5625ad25de2c10a612416867fa3bb406cdce117ee92167b7519931b94dea55def0552d8cc0daa53602185a7de6445f03324fc2c097e96d465f55e2db6b1121b6bb17ac36660f7ab03fb7b6f7566afa343d836d0638ca130ce30928def52a6c52e8ab5248dc945717daac5b42f0877bf229bb552d7cc8569d7ee9a37dad28569c7008e760c4a502fda26a7f6487ba5a23169d7aedc20736bd7c65cd9572a76a7c650d9391a5ea319c1ef306c4c762dadd196b49ba64682ad6545b6a669dfb6289bd24531d4f6646bc750180a4369da52a994b36bbf51586808c3b4775dce5a4acae22829334d34b2c8696d0a010bdd315050517586f6214d6b8aba63a2b6b86c846c4b3a4b38ededf7d4a860ec71d6c9c9495bdab4256de906c1b038b66b5258688713be8994b7a33dd53d65282d6a57a78b9db01396023f612e186a89bd694c495a539411fbbb60eed3e562c408bec694fd66c1422660f02664ffb6d33093a5a4ee53d684b38bb546e566da954e3362e8d220839db2a5cc49c6942939eded1e97e3d541769df3c0778d90ed143b39d9dbb5a58b6ea75126a7f70933d9a3eca9ced88ec154d6ae2d0165d7f907f8debd593820a5bbe56fc75358a1506b4c1f7602b1533e9a1d338cb684bb80dad27dfa34a8fbb4435b22cd906b48296da93a99d9db5ddbbd7343d2d9627bbb0f2cb4256df7e93e6121200cdb809e80eebd4fd88934739f306cfb3562898b6ebf7a95e5a2db66c4debec3c909080b693b54d8f69c6eabda529db15dab61bbb643d59636ed87bd6943ec4dd3e2945d7105affea4abd8deb81ca1ee391a47b9b0ed1ba67265846c63a51b04636f17c7761c85856c0c67c1423ef0cdec6893ca4f7b3379c89e0939d7b9779ae0bdbb674ec99f141e39d779779ad0dd3b19c3429fb6412661a1210cbae44ebfecbb7bcfd11a8814ef3cbaeba443bc4839c2d1dd0215ccbea1d3269818b65de739bac3b06deb348a619b038478d7798ae67434bce4d4c67012163241e7e0377b13bc7ff7fe9d87f70f3c0d33994654f6ae936d596c6f76697bb53b25639bb8b7282e7bfb85e106997bfb25c3646f27936e508a95b0d276bc34066aabbe1d339149b2551ac9de4ec27085308eed642c696f2799dc20bcb791090be97cfbd884853cbdedc0b0ed3b6708db31a0623b56aa37ecf70fb27ffa037c50e3240cdbba7c7fb72e9bdb6f132bb4a3f112866d0f99754614cb33a511fec4f123c9b2741d48ab7c8d33a528966f9de63d4ff5b264815f3d677d855a2f2fbe750ee1b26e11fcea2ab06ed35b81aa9d41d6c9137ce928cf3a517996ce27220fbe748c2f4f546a22d2751eb55ae3f5be4445993163c64c98304146c28b0fb987ab8761f995e7c2300ccfd4c70e7f411d1ce4f2e2ea69b7c357a9897c6c1f9b7bf8211c9246d90e397d5f622bc848901192ecd16a91e368b28cb22023a28f9d1a659bec61946d32cb3967a3ec3ea080b960beedac4659266402229c6cfb098870f20318922449922449120c18309e0c5ebc50a9910597ac9d2c6b6451665196648d2c489224a1c09064599224a9ba2007395d79f21cbf3ad36caf46ede3a2e5bbd587f08ac887f671d1b1bb2c404155093ab2f3ef04b30a04c5d3eef04c81ecf01e7745d62e061d59ad4e061d29cb93e3872ed943fc378a3a5d95ba5e345481d7493d50c5f3f16829dfa5a4df7fd8bd736f27e84818fe3bfcce4ef8eee18e38be2c83841f73b46e95e4ba250ba9edd50c4a9dde5ddef5f04cbb1da6d90e8dee4e49c0e5cdb3c2211c9e3b23eb2ef31ba8c36ef3e55977eb14c16ef31eebec6174b7a97fd82deedccbf9c4d3ee0ecc413e0724eac27bdefde0839cce3ced6685778b3ab5e3b93a06cbf21d57ea1d17cdf6f8213ce678e14592e73c7ac6f388e71102868d0f01c3c451efd8790539e0ba8b8a7ac745b38bee88671886bac7779b1addfdbdea0dbe6f15c8a540b6ce9906d9d99b2e5d177c3b21b50d0a4755b4d0420b2db870b91244248848109120222420018e7df13365f5ef5cb9ca73dfb9f3559e13cf14688ba1188aa1188ae8162f8a6077d624d83d7ae34914de27d4a40ff9309f0a08b249f244e3c3871fba758ff7b62f3cb9e7ba2d9823bf823c67bee876d6997efbdbdcf834732cee64fec8739a3e274ff8d4fc58dfc92f3c2db8e8ebf57a79ee4c776ceed3240429c3efe3d0fd3d45bf73bc67c106e47f27d1f7096e411d9fceee651f0635a8bbfce1b34b9ef7b088c897b7a00ef2e53790f5ef0c9f7d78c6f13ce359e3f3c951a73bf6779f7382f3f544be523d9a670bcfca7a7b69c10e75ba6397e1c7b4fc4b3be02897ba0868737f9517ffe9b4a8d444e1c7871f3fd7176911d00ebf0843d7e7d2e9187eaba73fab2940e781fc0ba01d5eb4c0821da2e8cf16ff7fc74e8b808080320002d261e35ca024030101ed38cfa31fc75c7724f2b4e5a9822d386c01aa53e83441b2ed759a20b142a6fc77962bf164910fc78bf9e2bf33fde93a2efd2b93e1c7124fd608c2cff8c367e78f61183e3577fa50bf48ad80203b6bf1e3c58fe73e9e29087b0cc5e7a7e359a32efa19474d243e5f5c91f9d92219515cadc4b2fc2153ea34c82e1f9ea218f2f0902669a6e40e592e178bfceaac1725753ec5932e10ca93f7c8332dfad93dca9f6bef051510a42c31583eebf4679765a6c1d39f1dbee8e707840f0453d42da6b0b1c5172c3f550d9845c9b607b328b1820516586021851465c67f1fc7711c9fc7711cc7b1359619cb8ce3489265845cab55e7ea5869d775170d9f75a4a080820a1b5114c5f1df395e0cc97fe74e9e2c4e93e299765b24b98bac7bf723cb0f5dd6bf934678f54f7fff4e7e089367eb15e4807cfed04dbfb3b4038ef2a78df02efffa2e9ed3a57e7d9a887c3ef9856cc88b6c48f2a2d823fc42f21b47f1f5ad3315b5117e1d888b0df9acde589d7cbd41c4afceacce105f9ef5a2627ea8ca3abd3bdfbc789267ea63935f59a624d87cd6c1d72be4baf85a6f884fb34d92779df5c2c84d9e69093b35c29b75f0e629028bf5a19b45b09b758f75da3d9e7783670f23bc59a911c617dfae3ca9cb53041b67935a9d41ea5a67a49f11264b3872b9c8eb31396547a5d3f66c5750dbac11ce8418a048d3b6374091262a63582dd33429609a14a080699aac31e61816ab659a634c0a6cf1e2595fb174daf5e8f475560c2bf3592f5a649aa6699aa6094401dc040e4d74399839905158d8f66414166e55dd3bc3874fb30d3e0dbdf0fc36b09bfc77920f4fbb3dee1cc16e97038e720feee2b9f0dce9baf95087e239eedf9992fbfbbecc3dfce7720d5dd7c573675af43de4a05c5d1cc7a7dda85f2b4d54eaaceb45c58b3ad469d10ecf7a0539189f3f7453f12efd12ff3dd457bf444d343e7f7c0e8dec6eddb35ffebf5b120eb08dec9ec008768fc7bf1ffffd43f76bdd1b817bf8964eb31ef50fbb439d667b3b4804bed61929995e257bfb1036cf347c3deb4cc39cef43f7860c18b9941e3f2c07780ee4a5a57897927aff61b7ea9ef81a69b2867f2fea17d1b7f86ff1e18dec7e1189ef2e7e04bb8dec1e499d06d9e443f1f506955f7da5d3bcc3e797798ba2f8307cbd42af97a54ebb2d3eff75d61b7e088b675a445ebc279e6911b97b90fa87dde3eb4e8bc83d3ebc77bff1b47b5cfd8244ddc77be329def32ec881873ff2b45b3c537287af6006e3793318756af778f1e4593e9f29b9f3314844bed4f5a2f9ee7ca6f93acf401d778b1f579aa85e343ca9c98b8617b7f8a1db5dd43dbcdb34eb22727baf7a03efd66ef0ab9bcb39d3a2f345549b36f7dab439dde3c77fd89dfee06e6fc4e91f76f798c00876db7fdb5d41a20bd9f647af0341401c1c2f2de5aeae0e9aa38def954be47ba23ac4b6cfbeddbe3e0bd3830b4c6c5b446ecbc4ce884c1f8e7ed8fda32b38cbecd670863f84b166ed091eb644c82432264f2c1ab0721d53166baded729e50c118632f624e344dd3de789184e338cefba2a67272723e500a309e17f5c24a9d66db958d765af479e2d743fcc0f223df63f5f2e4eae55724a835a8fb55bec7f8d55f44e3571f7598bf1b116125dd2daca4cce2f0dd29d0271cb63dfa84c3951294a0042560356135a932353535c56252038ee7f1783c3c3c3c29907304bb6b90206be779781e38add6d3220bf6eb219cd7eb61cf876ed8c3a3d3967ef57098d3f17e203e35e070258f4e836c9e871c8afefcf0f470afb75a3d7ff5703d2aeea10a7de934fbfca57bee73d60beb4979ecb4c802ae078ffe6177f99a81447797e772acae8144dddd26d02630cf0ccc417e75f29c7697e7dddc995ab0c32d5c286d9e73175fea0efcc0e7e757dae9f9642e978f6b1c5d699105bb7cf8d5dd19f86d60061c0f9f9ff7bceaf47cce63585a640365dd821cf0e8eea2acb7eebdbef3f24cf1e773561c7176cfbd9e9e675077cf836c9e33fde679eb4cb3ddfaabe754bd82b8345e6231d879eb4c2fd4def910367576d1f1ac5375a6362c9801a7c55b90f3f3c8c7a775c92f4bae5872c111515758d0c54b02c4b6f792001134641cc7711cc7a02141438286e01591460e89c5a87c699924b9bf91e35aadd60f9f9d47912bda61ebcb972f6549922e1749766447eeb2ec764a6ef215c552c2527225e828e828e828e888958495448d1a356a58485848848cdf6d328e35acc8dac9d5c72021453636f99590d5ea4c8b6c7c62498a4142c61d52146decf0e3996ab0c791c765eeac7c7eb70978c6f1e6f81d1f9d02edf1ab097a785eae96c9d2298a02ed70088fe977f287dde4c98b3956efc47babd36e0f830cc06079af9481eacb380f0a8ec2881143ff467e60e89f07d91a3d29b88c535bbbc9f35eab4f19a7e044ff33c67f4e181fcfd4c61eef65e006f5a24ef69841599e32ae6f043d05cfc0570732aecf033d05fff9cfa382c37ec6df4805e361bae2b1d4af57077f8cf3f8398c7f6a8f37f273187a44cff132cebb37096e0074d1f0e11864ebc7b8110a0ee3167c75a01fe33cf463e88a613c28380c7d0c0b0fe331ce03bd0c1831747823a8ce18165e46f820af570731fef380f19fc7d0d7e18dc0d03fda0686850fb22908afcf8a615f918dafc9de3478cc0be2baaa372c242d2ca41f2d4b6ab09144c705856ddf7141614d2bbb6e9e13c997a97988a228e68be2073d7f9d7b3eb3299a3d9acbd9746592bc79f2668d35a659638d4986ab3524998d32951996ac9c5d3741d07cab655eb47583cce7564bbc99555f9da55295a708ab33cd3b5465e4f1abe7f51eeda5d12f09eb08eb481b926bd3a64dbd71832e5a675c7beb8cf0d906561156112a5c70c10517ac21ac216e56e578712c45e8f60f9e9dcb8b9e69099b33c3951b37ab15cb74d36a99aa56f9568b9559abce03ac23d651545454141c2ff22ad440fbe33eae2cc50f7cdef3f122c985218f71c7de6192251010f9f1a41724397a318e40e49895b04ca0090ea4c78b9c817638bda5fa8aa7f552b540d58a47af7e9d5e2ea7966982a54e8fe6dc731fa09ed3e7f94c817aeed3a381300c08eaa8a7e7887541a4376f3a2b5c9c4cc9aaf5520c5bad971a90d280148b6ce54c7e1c17272dd2627156a4f88da3168b935e272de6a40129520cdf83d462598b69483a495a6c474903521c940d6d70079a38418b552c42b0ed2b1621e8f235315114354dd30314f5c0039789b2ba8c5dc691c51a49b2e5ea4292ad836609aac0b254b540b34451144551d449045353566abc114551145de4c5f0ad73e4c5f2f97bb54451242f8ae4d922c9fcf229f9503be02893da28dbe25fe4bffb2235517ef9fc52acf1a62c738d37398b6299c571649da9286aa3ec4d7e9d1d192433550f61932f5daed22c53126a9c3871e0b0be7aeb145b24f9d5c1b3320bb49be5c36bd3c5eda2db30540d2f5f1352e42e9e6616c596c9fad0fd3e78bdf55d3c5f59f378b5f4c781a9cd5d5c8926ebafefe1399d16ddd7f7915e2c9217f223bf712c5716c94b2a3e4cef93987b648bb4c787e407d922bd9ecfd422f168fda52b86f168698b846116e9c63830d5c250e3d5e940b90667f88422b228b2485bd3af0d80363ed0c6fab54176fc4cbf8894c0b2ed710c1fa1f99a98288a7a80a21e78d0425134281af46b12a23c3c68c4279375d2d532592e4dfe3eb5b44a6b50a779a53dd869118aa2288aa2a807f868494d18355d005c58420c5ac57c2f346dfbef85262b625863eb67344d8e1bc7710481837275f1613882b0c58f3a05e18725460c8b258624cbb22ccbf2f52acb9f9f9f9f9f9f8bd62c3c1f1429292b4145828a0415092a82064d0d29cfe33c8ee34e103ccb73de0a3ce79df3f4057580e7be45511443ed9de338f0dc9986b0c97b07cf5484ef1fae1d1e1cc7a7e6186aefe03df04c43d8e0bd330d617be141501b699bfb0bbc784f8ba0261acf799e9457436a1c39edf3ce857ae44a550972dc735edebf9714b7b3c39da28fcf0413f4f4f0f0bc5e2e57ab659a2c5659ae5624398ea2188639efeca85420f87d9ea7a39393b3d261a8d38e7cca6df13b4fb51babb37674ba6df1aa9b2a9d6e9b3bc96deeb512a0560c587506a9436d871743d8a991d6c348dbe3b9300c75fa90e33ecd7b08aef00a33d68c4580667768a021d6c31639e79cc7ec85ad97ad7ff9dc2a3cd36c872d4d14b65af9e22fa823fcc7c177eeab67a2efdcf306dfb97f40f6774e03d9595cb5b4038e72d6affcf09fce9a48fceae257df58638b708b301cbf95f8e5d79bd7e5caafb145ceffce0755f9ddb32a14f34590658a675ac216df6ae5af3eaab2984f10c856dd2c4b56794f55826138e67bde0539284fbb5560be5ba7563c57274f0c12895fe97a519dfc70d444a2ce2e0a9e39e7d4e876405c69c890a972a62ccbb2647965b812bb5d8e5c1986af600eff7d1c4b12ec16c5bf44fdd2912f9e288ba618e6b20c993ea8448b98ec829a544aa2010001003316003028100e068422b12c8dd33cf0e50114800a789c44604a1789e39124867118045114c32006190000314421631052686e07c0d2d20d540e9b5fe8b9acf586371f296a9cf8d8a051c0ac47fd92b6d1bb67956933e22bfbaa4d2009c5813de4a55dae13618288f79f148858da1767e9969973b5ebdf8fac2cee7b2ff704ea00d2979946bde3a6c90ae1c2b2ee638401e934fc09e4b7a336bc873d77ba97b59e3b35dfa830fc2dd9a5640ceb2a7defee45cdd3959c127c80e1371add7c8829801ddb0cf43182434195848c1b8073254da1540eaf96b809e4e44a2c8c32481ecfc94d90b304b28d030022997e2f9cd88a0614239f6088dd80bf7c131d8b090e795a51ff7c29690f1447c0763109106e3b718f140b0927ebd44d31d7f48cd6c8072477224029ee90100048d2d3b3147ab83cf7274efa822110f15b3f35007a2b51ebb3c12343bd7db0713eb1400f6892af9f81ad1f601b0cfac816e41df50a6383b50b74dc07bd19557ccbe948312a3f588704042035aa565567923f335dc29c6fe3b52536b1569c31a4fb0017addb0b8a5e11e5454caf6423022d39bb0229edf1fcdd9bb08249ec250523b0a4fb6bfe2c4fac6557ada476a2f93d37317036e63a4a88c348601869210f0e9ac6a32bb8024f9498919b66fcdd9720f01b2d6e356b909c45833018ea039ab3e27e7f12e111c318533c7f8eda8d99252498949a1287dbca5a72b959d5b5376e0d38d2dfca77fe53ad3a6d2bf23ad503e3be0d5a2a1d0689241d65f5cd3b9c487d1f19f13daef3e10a8c2b5dd1569a39c30694dedbc274ddf53df29e88b686e51e9e58999aa787b368e8db5966dd5e9dd07ed3f00334e231d79a92e1bf758f77499d130773c55ba6b3649573e203c7c6bdd041ec069d3c1c72670820e7c48db8f9cae5ea734fd1f281badfc30c35dd87c59bf5d216c1d58435dd33f08af0c54b2b1a1af622e3b71adb74bbc17e636f4ef7a5e9604c1df22f48b919354d7b97169c2ce89991f706a7c251ca9ba63bdd61c7a6b457d196e1e9a6bdd78675db6721135b4c464ee54c573c2066d709d15a105fbd8d562509dbb0da4d1344924304a4c01202673bb7d36df551f06521fed719f38d14f7fe6e7740c79a9e399b7d035ce52b7cbba1bd01c14f87ec4319ed0ca3c7626649a2e44ca0b38a4b4b7f66e2a8bbc1aa0e5e5dcab32c40dc83cc96576fedfb416c5a11e726f8efd0f959051be850726c3b6fcded89eb9c1c5e64f09ce2fb67d5bc753cc08a62877047ad51efa84c95ad59f3897e401131d293cb590bf96214ded2f6783d76ab8c40918aafedcdedab1ba1d7f2987953f2ba6405f72799c86b2a531a281058a1918869c261993c50c958179939c48569d97d82c2d0633dd5b3c62cb7571c35bf880aa33b024d689465fb5f8b45948fa5921198537535b49031f2846853ff9890a4b80ae810f9a07a1034775c8690bb1fa839bb322d0a3a3005f9409535e13c8a38f6044290092d4e4248bbb795c429021dc55b7c20a62a61384344229639f9dc0890230df1f6ca4851a03805739eb8d868ab4538588e608c77ef1947b497b6e713796337b4bd24722c14327a932fc987a047894416f443493d5b918e57858a3f6150bde630f220fda2fd058b478c6e21080ae48f1c5758567723dcef3dbc35ff53515c87571731203e67adc0dbcbf49305480ba762cd02c0b3888dc164469f88f4850722ea0f1ac8aa974919a6a37a1781c8cf4224e17cedf00aec160e0fc94f7ff03bc06b620d65b067358c5099cfc114613d5499d133d866c614535c6b1dd8347c1b71de30e5f269c33018e994d2df9487a9438ea301d24cff60649f4986c14494c87359221a31144f8310603e7f6f79167fd9e76337c03fb2877bd7e06795eee40ebfd98c74e673c47ccabd19c160ac0c2214208b714eeb9f0027159ab7a0cfff9707a1114a329fd687c3426325e74dbcf2645ced1748fbbdeb23fd86ec49e7a6affa7d5466ac36d6d3adccc371ead23e9247e8d5dcbb7156335e7db26a94807c96e10551a27310a107b61a7b6c7fc027eb964238bb5abaf5481258ee2a8bd54aa8c6f56813b1eb16731844d0030ba21582e8b0d13dc90b55ffadb4c3ffaeecad23717e45afe89f4b5fca2a1d56078e54d03dadde9566559524c1955e0f1493ec98e2152be71e5a23bf9d9bdee8bcfcafd9390addea73c7de9917611e1dfdfbec9f763e0a16c38a3006f295f35b0c093d009f4d9150c2312ae9b7651f1383b9793a1c414347f69954dd8518d282d372253c62e368699e3ede1262524c591a80efe611c24c5343b06f57481040f580550958811090e8062320f2e926e80bfc647a1e260315af1a872ff02372afd0e7d13d43037c0d72d005527f7a55d204bf182344bb0a2c60069e034330e5be17fe81530459bb874ac46a4a76f786f669a5549a2f3e016995a0fb49b4d7c00f6db1cfb9ea0f18a8df2b10d26d9d5f6b65164350f4af1c45e8438d0dd423dc1a9b3c973324913fe35468c3daf6b8ccd90c79e69d74e6949cbabb0d7cc4b469f9f36837e00cbcc1c6fa67a279eb353770fddbd2eb517e7e940983dfe88c7cb3297f5434beee8989a908d2a0d01b22b0dffd83dcc9314076ac67755cde0a508811a14561ac41d50a5c9aee9d833673ca8edcb61e3f021b22f032d38facb9944d4e3deaf936c53040882b19c217f87120614b23c403bcebf6c5931ee045794bd2907b92f4d4180a704934abff923d5f110b933a4ce332cb6c07784a7d5ab586ba25c27326b7f82effa91307b8c60e3d5c4a58a509563614e8526278366573c734046761fc955d29094f9d8a97a2cee30f7bb5768a8c750d08f5b831e2a86bbad9436fa6533e225132fb1d448c222eb9339ff42c52a10322ab063c573e545968981cfa0814ebb37f23360a3321e23f4b1a550d78f80c834c24a004f95f24e420d6358bf548f43e1532f5b9a73328578cb454cdea710b5182b43177fa4624c6a19c3c2fa17153c98b4b141af71400235eb0050d937654902f1564c1ac5cf5158ce6581c8c2e5d32c4c1cca455f138cd16cafb8b16001e6a1c140464cc6972dc89a86aee831db447bf1a1a98c7d30d02ff5c6db9cbdce6776a132f1841c66035531da36e31a14898043af768c68eab86eaa11bbf8613daf6d4d95a81876f47eac8279774a7c488ad54c8b927ca50934e4812f9bc784afc4e8e152f5ac73db12ef9dbd19c3864f64456108d1de627c5d67ace8f9fbad61576bf381748a4b1db394c331619c3f34de43cac41d46449f5355c8958d4013f1b65f9f1b76e15d7f33b29eb53c78cef01f27c275604650709f6faf18b232d91b17e04e271c37da2e3c2ab7b9322fc118f78aef8768bbd1fbfe4671a8975c3aa93e243f8f174d668b0d353b9bd05ee2c6c2324113af90dc1d42d348e14dfa50f8543e186c145e4f20b24f84f3e0ddeeb1b250580bee5a41f892e601526f808e1ed05c132a46248c2987dff9910eda2f67fc7f18b3ef3befb9dafd7dfd65636df7ec1d76bdd5adbfbec26f7a7890ac4b4910f24f1e35a66ddd712ec161258243939240ce67aa7729390d616011767c447aa6f050e4375845d286021c0d03022f8d4ac9c2cc9c652d8eda88941da6d1102cbc1ecdb2d34a1e9a9c708b066f89b4f6599b4616ba6a3f1406bdf85c48162972e68f19b1152deb2814cba2b21f6da0c5ae09fd1a6b20f769201350a44a15a2575ed63b94a7887b30889067c582021442b824f8623f5833f0de3ab6780e729ef1449d48550fd58b71532898ac6b3e46b25a59ee15a10133aa5bb30219a1853a1744836e15f6cc228955b3e9465b43bb8a6970e4ec59f1fd32db293edbb258e7fd87e8d9a9096d69d0491f8f088907a58df8263905b91164e9b3b7fe5653f4f90593f49a40436999154b194e0c98e279c9b38b4f52124019213d2c315f84495b469c5e0d19fc3f307c7702e136fe29b4b0d6a789c0c4dc1a8707ab66099241bd058ddcef7e2941907707d818fbe943737c6bb6385b217ec496a0b9ec56e173e2151a378c396bbe03878e47056dbb584cec37f128fa642dfeb3955e8903e5b85beafdf990d1c02255c0fa6477884dd858dd041b4050b85745b59f8cefa59f49f81db19105d33963c607981b215581828734aa04440a08282acaf5b8ec0a77cdd278fa88c550b8ddefb4b9ff5b4ad15e8f0c8d52ea7584ac56fd489e64e60ef348415d1af3e80ade018321586360bdf3610a9acc55fcc4d2f732bb20ebdc4bb4d0483a348b3e9655039fcc753adb3614c6290f2cc93ee556044e9c8b4dd72d1bb06b16ed33344a29715e482885f559f21b8a9b20213018a89752faa2940b925b7b6d080ad77acacf7d2c40e9818bd27c3f21c03c684fbd91bb1329cc4de8071fce5835c494fb41270ebe81a73f6702da240705d8652756cf49051cd7a1debf873c7f5522502163c005038160df035b1efcb91ba79b32d98fa053f26909c455545e70c187c25de45a0d5846f11a7166b05bef58923317e8a7855e04748a498190fb5b05678c25a4a85d0991d986fb1b155c444874e2f12467466df319ff1d8a75a1adfc2512a730697d75ef419cfa20d80a4768c9181780d00b4ee3f6555a5f1f8163e4df0033fc41666dcf0d6a5feb6cbaa2ee681d04302cfe23c083d24f254c883b067021ec53c117b26e4519807a1c7049e8a7910f74840fce2ab50af22cab63162ce935eeb15d5336f01eb68e613fc325d6002799acc8edf9408eccdd6240db58a5859b18a22a967a2385b196e169e88a1399439310865ddef08da037243285c2882a9277a03007448a766d11c0cef295ee583b47243b9f8581fdaa20c7403d70a977609d136429ebfb82c167cbc6a2a7cb1b7f85be82f43d69e1a5edb0ba27f86374c2f5c623b9ea60b0866a1d34602829642950b5b78439eb2725f2d23e30681fb043593052fa795c1c395d0514d6aee29019416c439ab48d557c9c6f4d62bfed2070f3310678efc280061d2ffa5ff6da3675ffa911f79c48bf083aad8a82e78886156840981924312ffc1c3fda5b00cb7eab71bac20823b02099c6627eacbb3c4bfdc81debc411c3736ea81ae919716248ccd51c8d38298069e5fd6bc719323f697ef75a0209e47609108741a259d9a611b70fb4df27d46ad7f7b1e5c843479462cf3d78b55416cbf17b97b8f947585d6edc6f353223a598ad8cb67d48afe4619da85fe9d044a5b9613486907c01e913b45fbcf15bec93bdc828ec5940e26409a9e41452c73b72ae204c1aed323e5034dcd6640d8b89d3c10a8f3712e43c3ee2af6eb2cfba1ec50fb51fa5c664139363e7e4a3cf4d742f0784ad319e3145213df702e881f5deaeae488408511b5aac2366f8a77e2e45c77bf733abf54d84fa3f561b83adc4996cf5a875369298a29d3acc9ec489859d5fa110d57483b484424bebfb693b9e69f6604b8249eac6c613f95df6c5e82db2188713b00749bf257e78b2409616ed44346f5522b9c818704ec105c9b4ab0f3b4749b278719b708ce1e11d951d52706e954c6e6a84d811dafd82b80e9f4111bbfee237c6fb7c915aa1b200d4ce2799a2cffb8526c7a7368bee157fce5112e775563b341703442717dd569db81f485cd86ca0a26d54915ea55e979d6fae8f15ea0dbbd21469f6dba761d11eca31c07ae99cf5e2e3bc5def0fe9c2dca77220e752268629d65cbce72ad782f0aced707ae4c113635bfb694b27603f014bcd06c0673e2dd3d8f336ed889f06f89970648297826bf6507f8acfd9887333a830af5019f8b8512de07ac46d00ae11d0b182e772a0b37584e65755240098c6abff35b2e52e1e2d0d62934826a299e67ec6741237fc9aa7754af09c895c308dc1697e284975053079566fd029dd306ffd55b657dca6695eb33fcd243d73f84784e743551ebac44dc1f11fea5a3c8112198a36e192936cac6674004cb81880e7bde17b1b1bc0988fbbb9c81d8d289348967c5b41f172ad417f8b30c22131210d62625e4b88cc0c11057f103e5fbcc6aac19b72dc9fd366e2c8861d6ccc5943029ca4d39faa846816450ee7b29320deadaa93ca03cb19dcf1bf1f70f3e714ad9437c6d1c2cbb147703e6be8c12fcda8815ed04c24e1cdf4357e893d05cbf3f1713a48ffaa67b43106c6261ff5dbe35c5642e1ec1b089d588e4fa996b8c2c570f46b7ce467cf26af3092d35d0e3fc47f12191812607ef618775ae8b07d93b62ac7b936607a1951c7c4ff07095ec3c365ba899cd2197ad056bdc98a424b2d86a2d040ae53dd403c6f73c14f09ec6e5f9518a8811a7103b0ea81188a18d3c7b36e264909e5e85b987eb60325fe317b547e331ee8b359799380d6fe3e46c0d0a6f6336c3c548336b1f6b3e7187835c9a388dcf5f3fad64b7e0c9e5ed254fd0fb5d4d34b32c3828371cb285a8e927b73732da56a4dd789e234e327b270383d4b0e2035bbcd4e4a6cb14fad15ef5f4ec6c76c33cf875cea766fda8100861edc1a89888f52bbfb984971b992c40b22b53520a6532bb06c22209d791e6a6cf9f0c8a04e13a20f57fe44e78eeb3483e864e4e352d614fe911c3d8d6139ea8602815c7ab5884093e631623d832ed8799176a6058e1c13a1603f68bbe2c6269ed57d0f89c7730b59664f0f85733ee5d6b381c0a5c17503e83e6148e6f5a4e67e8341b8cb20002d13f0df5def725a2840bed1a62b9631775b01f4235ac85311169d8e2360f82d482833687487d3bc16ae4ad6f29c8c26a4675e03fbe24698f44c7acc86e1a8f0e38feca5dcf979bbbde2b855a9d9ae119fdf3bd5d70739d7096f80eb10fd62cd90a876d84fb21cf3320808f5839e19ac076bc29562e13d7c2a18504e419763bfbfc06a75672ca7697c0b7d49ccaad7f306847deb7288d68c411aca7c6728d5f02500c5e54cf2b1ab8a9dc4b38a587506a29a86e9531a8d5c858c35cab1c4b21f40c51828573ea30a452bcc7c3fc71edd144ccd24531816593e09d10ce3cdd54bc5d4c52acfb9bba9264dee8b29ebbe6f5b3434219b95a9e3c03c8f7aa5b6ee369c2917b190bb5a935086a6e2ce586146d91e6a05d57733bc763dda9e0241c52669d371e63a2e880b7fae24825d03a693e30395e40275941e821b3b9ee1900c97c5998add9f79c4d6cdf0864dc8bbe32a7b2670f68f41708ad8ec29f6cab7dd05d32f9037aa426df7508c572e73f96479e3424b502bc128790f06ee9de9e79470b94b8ed3d124b1a625d71fd63d743bedb5f51f1a8d7e3efc1036249f9a3eb0a259730313d95e547174c302309d6b5f388dd46c588c8369de4262b3e147587fda48ac5f7a3e157444736b9d52363611bfffbf0ad4b59562d9236292cb7cd55a7d686ccd816c6727f1c03558a0536a5893459fe94c51ce37a9498f5f8b5fff8a0f10ed6c99eb1f4ecd8ecc65ff8cf7db4b25179b24408c799b64757dc048bcfaf4b5472d9962e8a8427c4483f1605bcde58f35d9e0785d06b98d7ccbe70fabc419692328e93b2bef1ecd347ef9b7a1a17e9c95dfa03630681248164b244722ff3d4ee943d04b763b99edc283a51268ea577b112d657bc9773e6fc49852fbd07b36a7a2f2415ca6cdcf86c34947609ec052917cd33927c17d9a97a6fa83537b150a77b3dec0a33f018844469cfb19ba25de441530fffa4b861e629c0cdc1d58ef6b59725a239594e7d353a01e0e0871453719a6c8a49957b2c6e51a2672b439527d8063322a5d097dac86c764ff1cc3a001637b8213ed85b782676a40bbe4cefe55c42db949c249d6ec727deddf3efaa9fe5452abd8930162f61d0de3200a393188d169c83e291dd850cbaa1e989206e310a8a22b8ca473d530ccbeb155bc2c0bcec27e7c9184b1fe58c4d85fcd1232ff88b65730bcad038e8e7d244758b7e49cc5d040607af61b299933b595d71f20920ce80c9e2a8c5324d196cd0297722aca094933327f6bb0f28c4688b91d43373014deafa4ac570988105382baaf4715a4d2b10a4ff74c9b6f2d47e1d0e80cda6ab61a03cf3188f349a3ba11a571678a71b9898fda54bb98151e80ab0c0d31cfd8e8bd250f2c123afeb16d20562c0fa178522be4fd697ad4b660f5799a40e7a2a788f4458f5d918cf0e85b41fe48fcce7673b765c01f7cd5cf4adeb546fe2ae117249169370e7eb44b1b2c63f89804b8ba1d0b05fb770519483ad835ccf90dc36100c7e048d0afff61c9dcf0ff99811c0dab9745f994d822bc067e4330ce1cbe48cac7bda9325a353b05a6684ee08cee51bc7a138ec12132f886938e7cb6319e99d213920e208045b2d9a82889e8b578eadc16e3873885e35de6118d665fa938b97a35d2db5503f7dd1c14fd5150a91745d3b3794c8cbb45daffb1fe7a36409caed01379425a4e64cda34d1d62ea5a634abcdadfba0bd07b666dbfe3e09bfc3651fa4ebe3d0a749fb9ef9d060262a82eee38021331fcbf20e9095aaddb51fc05a76e8e40795f94a2ec49d2689f2278886db96875b54dcf6e3554beef5d5c41cccaea2801f5f42baab2bcdd9aef99d99ca1512041ac81636b1ebe77acfffe2358a730fc7df9c8718ba06322751da1fd9aee8e1293f95dea8410874797723950c74a368fcbe4526c02197cdb0c99af1fa0c87272346f13031eb0e60d305f72e90355bf2b1bd04429d63d53979b2ec731a63dd4ab9b930b96530ed6f400793226ce4eff589ed6a22c835750d61efc843993ec3015af864b788e61a8b45409228bba0aa58cc854fe73fd7c667e4db40e2811706fcbb1c10f673bdbce1cddb73eaa50b259b15b904dc3b707d08d7171ef831929a1770e66351960ed3e2c481f4c75062a28ec32352d391e3ed13b8ba7dc5988b7bfc4d9200b535910b150bc818578295d64df6140b901b43ebee5c03545a578da9788da18d5d9c6099cb31b12526b0e6697f753f0556b3ae8e7d91ce18100e90e1bf07343e00b82ebdf939c335c7a347df48bd74b2e97ed859832f76eb140aeffeb006a2d8a0d07f0259a81f020d452096430e72aaf5534141e4dde504c6e2fe1b112c1d9c1a742a18b9bd32b041570787f85a89816a865e090be6b3630e32ae3a4b83a604eac0abb6c4e13f7cce9e4c62604c8af395331fc333f64501970c49a5563c436d24c9294401f65c602d06dd22f40638bedb8c1578dfefd1bab47bc5ae199c23d270140c083938418cbc82bf53446158b67b57a37461c610f08ceeca59ac89cd3a91045df223a79da9308d01c68c73c0172023f5d98cb106169afb8b99e06ea8e52336f3cec34c18f555ee2efc84c49f495e70d4fbdc9f73590aa71f620a3d3d660858c264742e313d4fe03a40993f8da7b2f7f389b53685d64f15955492424da19039e8238e1ad34ba6d897a7408c668d515e5aec3e8b6544966c15449f652e66ed86c55e430e22029ace076d078702f1303bd08424a04055fdfb09898a1067fbc49750a9584751dd9e5f8145fbf72f8503deb1a077882b542cb11af576b649543c91f03fc114103946c9e53750fe213393c0ca7cdfb4a8fcc20889e40bd4579019c8c96599ec2565aebc27272f06a10c78a9248c90fc10cc099b96d35286566830216fdac7d17f4e800711077b322e08ca6e724845c8049d738de568f4984a59c30bb87cfa5054647e81a991b2314efa8627570db1128f51a2af3ee9716acef8522aa157523c2d320233368ff66e91d676472b632e255c0ddc1a595067136cd1c7a735586dc4ee465336dabde4661eeb72a87b9f82828016f28c41ef37c3ec106006b697e92e138ffed78524c7d712bf040fc23f526666fe0fe1cac199e04669bc5da19451ffffc0918b8555cea980422ac7ba2637558e65e66d77ba55182ec763ecc4622801967ff004539e102c540eeb95ddf479b04d10c749024227f0cc8e9134d4d315dc4e147361f5104db4a43f016b8df9f5e6539cf2df7f727fae7a553de86e8abe8eceda4f6536ece1cd2c3f4873e03f3a8e467bb029da374352a96a4afaf96a6cade5092cbc05e0d2183bb271a9c419e22603a849c74dfd57c0cd9d6a5d4a85793038f2bfb82ce24c25eb73f75a370f7b22a0cb6edf9d74c3aa3d57c0a3619e8f4ed9c5a0ad37fe2ab5c43c29cba54f868cb03e38b6da4ef2a4f24aa8815753d7ee9b1490b9c117ed98d08e04c18edf6e68e2e753a8d70b6840f664db95eeda070b11bf14a68853a049b79fc2e9c37cc462b0ea1aec7491fb42c400a13b9a7bf2041586a1382747a922f4278186fc7d50f3ff0e672918be11990580dd4bd7907075d67ab4820835a6956b571e69a07d7f981d88a02a38cd9adb5f0f98b7db3d26b0bc901bd13f1b9a9b87820f91f49bfb1244b8ab2a111c442669302f000fdae6d9690b53e6e393a45cd94b8fe1a5887622877a93d6312c5ba2c26060c2a8de50c54296e8c62964329516b0cb82ac965d74899f0bd4f5430921f7802f7e22a4e24665a3c8ec327a0c3063c52629dfe3538412b6fc99cfdd5305e081e0cc635cc312d567ec48355d1edea788a9f8d8a46b932a2bc10caec4f45b3ec04f15a1e10ce13c7c326e1c2b7bb1908a51060cd2f16538192a74434f30ae22fb6fdd053220d8919518852129bf58e981f0331b9b2e157ec19e8856ed0c05d46fbc7fb6cf831a5dfdef003bbc9ec529e03893e92606e7311601bf9cac91e22a2ce35c901e05f2dd4831bd8f4ebf998401b26258490ec42e83cf3dc9dc7f3d957859c1c2ab0e0d84ff400cc0745b53bf731cd3ba0ce1e376cecf59ef1a60a4be8622c1d6dfbfd2e21d0379f0619a480c1025144edee21d163db65fb2201bdb9c737185c931ae2e1a842adcb6cc96d5782589dc0b85693a889908c765b63bb47919ab2651a339a222506d62c8259a8033979db7a839f5b6c8f9159d17bbe0df244006a118ae39f9f8a2843e5ec8d6e21e4246283e0f04b57e0b0ea8fefdb6a9a34601e4d6579ba0c6545ecae3c4f81104c41c6e7711d018c14d8ea6d98a1c2f42eacdaa32aebee01fbe58df8bdc9cf1434bb2b2b72f36623cefaafd60185797d45b1ae144ec0b3160c54ff28b455a96857b8e605887751a3d830ff14a3071d1615e6695cfe2569906f14b9bb52429a873e30f9db576d84855913897f0ce1ad8f5c2d04c198a0a0012745cc966c917985841a0734ffac283496e8010e2931946b977265c6add33243e7518b04f0035eea0597ca545b23b4c6ddb5dc4119e3c139fa2567ea4f71757db1e2a51a4d6936b9847cd9afc4db593fe2a146cf0293fe353e686d0f533de34c994a1bc97b426bb220cfe4c261ac2c3594bfd3d986ac35983e122a9956666d6c8b21902c1a9db61d944a9d3bb22670e0d0fc8b6ea6d657e1e72cca325ea1b332a27f4fa8bc63aded96be673421215ebdee668b8cfcd97d3cdde0a7bddc8d99c7cc4023fef5617f3caf24ce2a4b35c3a4d097eeb8bac5c349cf5e0b36549e4af7b782873af0b0737061cb9f5637a3363fb3998f20c9de8e6a28ead7c298b6c115a1e252658f1d5066afb03054957506b7d3651521d920e4eccb8847394cc6457fe8db318d726d07e608c63ee959c400fe55267da62b4c2305f7f1d0acac6cdf939a1ace6c877849b57c1760409e5981195151c069ec7cf46bd198da83b52472da9769cbcf19585790affe095dde1cceb0e8cda45e40c15ba938808b2868fbf2a22cca9f8ee42fa95ce50fd739b7909c25f1344acc290e6b9ddec8934c91a4883b229de023b1e0d914f8d56f9a735284a1994dadd0725a3aed983d548dd4ade4f276ac067cd0ce2e5f322b148830431b36e6c00eadb4189051170c1a9574817028116b8986aafd81a50e6c0906c99deef1f9ef123a787f9c8dc16b4335b42868c7b39b93bd0d3c4c537589e9c918f65e7828e628d03470e0ad3910369c1fce3a496f4dbd1d5a02533bd619c591c49172ff4d3ef8697c9bf000baf41b8b1a4e5d7125be9f3dfbe4509af19ec2cbd60506a059fea05c701990e96c9b36f9c8084d6b1f9e8fde7f69ea76063b94f96bfdeea98a190a84cbb0b9a9a49c1653f68aaa907d69826281288f6352b19537d527596beb2ed3f613cb456378b342028569afc30b7a9434e4346b59436ab5f476d1a38e97a9399d6579e31dd5f8663ca142f953ad17193c1ef4b383288ab5584df9695eb8930f760a6466f9fad03dc67c63e9ea9dd366b45457f65160fbf4eccba4fe7902665fb76e73f0c29952a22f8560e577dd7530e9ce6592a260733648873125826d966dc3621b71a2c8fdafe7c04479b47a5a91ee5b3334d44eb3f298364c1c4ae65efc1aa2b14fb4fe78899c5f74abbebcc62f7a871932e932b77d97c7fc47ef6f9743bd8123bf16df3613bc625963af5a0b4f527cf8381e4dc3feac441483b649626569fdb5607a149609218fda325b277226a58b309a76d1ecf77948906a1cb23e6c98877e3c944ebd73577b8c4651b22516b3e4d198bd00c5f4c6dcb04ad6f4a2a18747a297d88e18eb13d7b244a36d5ce86b2d0f6205f5fd9c59890971100efb918f9096a4ba0f56c400aefb98cc228afb7ab2d408cc489f823c770ae4a65107af78faa0cbd7ec7620120a889fd9e0c775baf3d95aa63d6408ec1fa44e1518dee99e5b8e4c85841eba34c203bef3fe760051932eb1f78425293f075e6cc9c5073da66c8d2b304bd1d26553e979b67ec0addc4c95aa82d38ecb011b6a799232b4b73c0c50cdfe615d9e4fbd5ec37ffc09498c4c5e0e07a4c8d4b85e656ad52cf9eaabcc693aa56817ba4b22a919cfecbbd425def103169ef37e9441fa1318c3ce6ab696cc2e548a8e47a4a90e2abed36916116b6bfa52512943a0861675e589008a9a24671986ad6c24bbea8f0b898457614b0f8a30b64321f61a5cb1f413fc356158ceec94f49020c29d17c227dbe2ac07066ceaff3b25ca8505fc9fa9ccb0b309c2cd55a9ae58431ef8cbb6534f0c6b781f5bf8081e3655f6551641a8097253a2be3ab38203af00e440ad145642a3a03571165090710489a185c653a2179d6474919cdbeaec58c02ed7df21ceced78971922ac90aa2a781bcc87549f4ba493401da17b9002824b05a265cbe38082575495aef2fbab9358e60994f50617c0df74105e9487b4d4ba8e090219d5b88aeed4a77e07dd4e7d3d74c28eb09c51f68c703b01b76144f0e395d1a82a915009bdfd0a4c7c18195e06a9ff50e84d1efba63bae5eaebfef5b95e4c2e2aa3426cce041113d97d54c07b0b15d03f43250d4418e1f4578fb9f810ca5da397ef520b10cd12bac0b89978204c520dd4ccb109f022cf3c9e7c11d47305c8671ffbfff216e34c138ef99d62a655314d277de336f51e4f11e8e058a330214a30da0fad68b02224834e2c5836ee53b5a0f08e4143dffacbf74a1ffeec81c1e2a492d1a68cd0a3d131c43f9aa3328cfd88719cc72994e27ae5b70306e72f84d37b2b094c28f08c56a4add2446281475d559e9086e70c653819b83c8fd9c017b8eb622cae26ca30dd4100aafc6bb3d9658caadb463cfec8d447cf586f8b751befa73fd4c1af7ae53e8e77404d957068590d011ab5ab20785e1c2caa3efc98564ae704a6bbdbacc930b5b95a96010ec151867602000a1302f05754d0cd178dabe84bdd0550363f4b87c2d22e638f32f40318b83947160c34a2f994c9270d53df8e340cfddc516bb1117e9c16e46b2ba4825ba89a189c739f72652a2992c1ba86825f9c7ab88b60e8a483bdd3e229bd1bc2b4d4cacb3abe019a72407ae04baba3fd9f4285dc90aca48110a56762a4bdce9205879caa8995812c8969373bfe791384f2a49c517de868172db4735749eca638090cf7b33021793b2a29216050eca375e5e4c165baf51b64b88d02afcfbd75c16668a24888a0c48700d5e23bd4a7f12ac7c14aa8e415453e6d56e734de2799090d57bff909ba97a5b5cf594b1ff872e43a990cd16d8b991490cdd54c243cd8c2a160da9eac5f90eec2ef0ab1f04022fb5dd93bc1cb88db60f9b96295c08c02e0ed1e13716d45761d69a5ed63e9cf450799277cd6f68c04f2aba64890d13a39edc72975509998830cdde7b2b851516149a16a42cfa87c511aa10d7f1237e197f41b19bdbeb52215980e7b0e4c5b24a6913f5d2aca445a50e7f2ada7aaf3ee911b63b942f57bbb399e781279325efb3d8e5214b9d0057e5014e8565a20f73a859032754f418c3ceea081868e01fa3359b55d3dc2cd7884bf76ef8f2b7306f137550cceaa8970137de03d3e85139bac4137e594ccc1a20c9abf52f3381869c0ec43f4293e30532e4a1fd9d34409b5a5a0fe1b5617183d1fcb144d6ec141b4ad3960ef30ae5523ddc6028c557c96963c4add2ad80d7f1b0c6f250e9be641adfd1eab0715f8095b3856022a068b95820cae1ae0dff4901eaf7f3e586158f7fe81f89982b93ad686831d6ad501dec14c241953bad63930b087c86e49389d21aad26b6288c67d713755ba38836564aa1d8545a82c0f67fcc764a0d9e709e455197fff8fedf2153dda02f83ad6559a0c3eab791ec65fb15c6321411243372751bb2509ba7b27f9a14c2289401b9553968e7dc704f2ddd08a926c0d8e53d44ab4ff5723dd03ffcd97c0d802fb4d1579f4d23c824f88c0bfe7a2421f685e5a531d302e0b31f377a3f484d68d2bc5a73f2263fa32292c7b210c9cc7b952a5d0f977146747762ff22ac3810eb7e2add07c764ee3d8cc2a9610d157f6af73e952dc21ca075d0aa546b41df441d8aac4cc54320042ad03759707fc7d5dd27d866a6121838aae10903751cdc53a24bd5fbdb51b3b141fd15111fbe5c592a92dc19399178425d1c8c23708c6d0f4f44d22e0b7179ef82c75c8c35ab0e032b98807b92d7e7896a7c6a47e700466fc4bd7bba970a02e3f07201007e804bbce9b87f32c8f996933f1de9e72b64bfff11aecfdbf496754683b1bddfa412cfaab561234e15b3bcc8d6e10ad022efe67dacf2904e8f1587d8b059cd69432af25eeadc70f8a08408dd606c033aeb9cc1da1c223b8c24b1e781e84df8ac98946011d6410fa7081f57c25b946ad86263fc6918e6605e4f0b27d371b9994727d466e393c4e8f8fd95b6cdc3a1651b9768e0bd51e62f3e5c82bd6349787e79036cc8edd4c8ac2f9b3af270f11438e29aa8e86099e4bbd0319d2d822a7b1559fba58bc510103c7051e6ba2148daf8deb0d99d2390ad247430c9fd25046f52fc53ccd723f36f72c3ec831852e157016fe7a71d77467657adfb7a3c1e5ab13e5f26af61556c3b147f17496bdb36202fcd662591545afc462ff4612990d2cf6a356f037576f5eb2de2ac077db9b9bcb670de1974b6387ef6857163a71abd92ce2f8c2041b34242fd822b00b184303e1d260d6c7ba3ea7bdfa078093fee416b6344925ef02516d6071a8223eb53cd368c832af55425fecae686e3cf646a5f9ae5e6d0fe383d6b7d18b1a7a0241b866c0e809a208c5a8e7ee009222ac220e8d2f3ce1059b305d23f4cee1cc5d010485545544fa61b2cca5c1b48fae34e4ba867229efbfc302cc600ac959cc37ac62683dc450111c5483d5bbf01eeb7b29020457e68c57c04954f98457028cb526c2fe25c7e143787fba4d61c0fcae3b4800d940d0e2a52032e8363fa345972f54bee23a0d9dd72fa89fe2733d0f58d48578215948014d1a6613029fbf811910048bd18b855e49725b490ea3ed34bceed033cb2cd635f8e2210d0714430539d1f31da2b1787a9e82a0129d7fcceb261ade83c4788d15ff9db66d929208da7e0ed7d9a5f3b25dcf4d21966a241dc1782aa534abf3104e901d3e0a1befe05d13a5acd714c50a3a45d28990490ecd833250c68e68100537f3d42915fd443e01bb19f028557d017c6d6f72f281802cd54479a6a1b07579d16ffb14dd7befcb0f57af7413eb3ee97fbb9cc4e159e18c2098b3383f2a38a3520c5243ea206cfdaf52820f977f2b124da10235e06d7d24e286087fca842f442fadeed5ae89c72734b164a863e1c8f52032f77b3614fe308875740150cd0cf03ff68569c7aef67d2e72438dc2386be9a65cd94648fdb7545c911b255ca921ec3a308ae7b47f9244f314ac86a4c53f5f8893e1dc13216060cb872ee45cebab5c2870051055d1480805c37f446bfde4985cda269241e2ef1acc99bcb03d4f542931210fceffe91b14985884a0ad044391255bc453cfbb7a11cbfcefc4249c2815147b9c7aa0b4a9eae7d3dc4212ac61ee6d8632506ad89755704a0c243de51ec04f4112d5bfb2a4f785ef1faa15715408339a3c0c51156f35b2c0827b0e24c7160ad6f02843ab16141fbb82c911305250969c9d8316f26a42d40ce8c540b6cf8a39791452670af3b8b41b05e9b491a9cb5df8f9f7ff939af8c749c261c5d94b828ad887a03197641a3691d3e47125fca108013b33f91a618de0e29eef911da7a0d5e61edc5a00779a8f35b6c93a43ddc7d215dc36d7b176e4c89c3bf961bc71482e15c5661a0cb71fa016a8afdad19a7aff84cb1495d3fd3e5dff395911a83e181298188d0d5db6abf7c052e33435fce7c7c6c768a3c1a70d9e0b5f39bef54b083d60c9fd9de8a870143846ffb9d8c1733e27b46a2cdc067ce2600286cece3ca94b6d15901a99b5bab25903d047d88f665c2af7eabe191272399e00400b35940894374aa82baae5a24bf0e1e1caec0881da4709cd9a0d82bc58962d9522f5fa158eeee459fab594906f5a58c6c861e544883c6010b4dbe5659c10430e0776377681502c1ecc0e226bb874123fd4ebb1d5fbf32f1ed83ada19df0d5089343a7e244e4a44338d1d1dc0991ebcd41538a9b5384aa88ec4952022b55cda4443f10d4d9d838ce621da4196f90f9d07d2bf8f02d731ddbcaf0881f0334139a9d85f9aeaa23d04ebcde4895e7c43a44500b27a7182668be0f6268b91495947d006b0d0c5faec86c183cb227d41c1c6e61d2df7875e1538a43d51cc62b4605e31c4dd1bca1bd3f028698d2293e8d04480d50ca38f820ac4b3b940b403fbe70e5b80662d66210577363d68c39411b0a511e7d68294cc55ec468ce299bda66df236f23bb67273666c133ba2a2275dbae1abaa4529cacc9b8f33ce55f37cdab3cbaf710ec9f6685deb810f49734feaeb22d23d64c38fad563e94d25aedd0efde1ce129f2ff0110b93303582dc2e2fd27ddf2a2312374607abf9f2f88deef9bf8039cbe548df01183629a1f9c60a761109e2b6dc89247243eb5a984b97e1513aa9134257eeb64d386ebb0dc5317b7d216156d49199656551541124b5c4e3bd68ca176f03ba225e9279c3d829393841c085af024e137191fe8517f3a1bb3c271476d1180705bc35017919c752c15b253076a8db92689eeebf16ec0424624d684e648412e4af7d6fd735accafc8788403471392d64eee7deca3256924c68a696d7e6b08ab81c1695ea176bbec961a1801c96c7a7168b33ac2491eb36b2c778ff620d3d460b94f7ddf750d821a0a8a9b6a622b0503b9c7e7f3f4234ab6cb3ad410f3103370253b5729dd5e0fe1129f96123eeaa34c74bd5887140a167dd3970497eabe45a272b03950ca922a1b604556d2a2ab8f6a52d44af085c7f02966a4b2588758f2fd89514c88452144e39026ac7ed9a97f8b66742554ae26c14cae471585b7133be2e7ac2a9a06ed6458a278307991d301cae7644145e76b24268783f44dbe9982c57cbbcb9b7a2122bb97640e095bedf96ae9f4578fce2d639d55b5fd8538139e5118ab00611c3ba434fe7ac323efb073b5a58a9ec8c91bdf066925df0b1243db1c5f7faf32bade33615dbe1ae09a1b3f935e780fd2875e163e066e05f22d58429f3c0c78e95a61c14c418453ba53be21e8d7352553cb8df480a5c3519ffab0b9cdb6de585dfac87f6116c40ad7648d0a85ea47ea00845fd597dcbed6c7ccf42c9c3e7ca97531b4e04bf40d3093a86e3009231120c55798888a468393ae8e485d8ccf9908f77d91b23ddd4c7f52514d48da006bfa1ef0ea6182883b0444b28ccd9456342d121191b1c7df55658f8119f8b39eb184e72c8a46417d466f8c7f8e817a344194b0df6e1cabea06e6aa5fe3e3912e83b86ee14d8bbb98db1de9b68b8ca39d60a3c7444c71d2d13de58cc67332afcce0bb1910c2ebc966b53e2b70365082230d2724b6c3ff941c1bede3ce25c81ae2ddf0063404699fa4869b91189e3c7914b3ea36b0342d488c1d26fc5d69e3529c34886fd2831fb3d32cb3ff39b8fa8867f0bff3ff0ed4751ff074a41ea44ff88f17f46a86652d77f416d6b48627021e52ee8ccc5a4be6772a5207afa075ab97863904651839006d97ffd745e36189071136821df52ea6a2197c823ae68da2f113f99b71ec93acc107d19c9c48e28f1508a50dad96a678ec040c87b3a514efda6d1862fb141488a87807c36d572722fea67e732a9a4ff1ac701bc75fd6503b7bc3ce5d9544870d8e542fc7659a5b97284916a981e7e542478110e532b15dac60048f7cc88734029ece2690738ed872ef320398541e4cf7162d49c165d485e7e429f09923bf58fa627ebfb4c951fefdc32d35a3d487ed997a98cd358a70ad3b39138989904f4f203ad06de74f193170e49b5bdfe2cc89a7a84ceaee9b275dc6c41a7fb480d0cb1fc7e588d1afb45110311d2c639e7fd1b761a9197cae0a584a17f9faa8f9f6b055b17cb678666ef96d6a7ea1e48885dd3df6264c251dba4b8a20475f56c6f1140c0a9e68f0c3c12523fd29a15977102248d3b3266ea862ba6d06dfc490d0f357af9b579dad5541571c619d344f637a53189d922ea02a9ea76da9ce5d108490b4f0bccaaaec3d60e17898dab7f6f131572b11da15418f14709b79b58d971ee7ccfe2ee2cfff4d246e2f5f4b3de2d59f4176db4d4283d1b13ed5afced438abcc743962783a1425bc10f1d40c6e57260bb4ce3977c6cf98a56edfa0ec7a396047d0f91076e9ca8d952e4c9eb2b7aaa042e5781bf5cec9db53063741bad9326df1b934b98c15abd56f9db30d892b76e8c70022ce004cc6e8daed286a6a31a4d22775fd4622725f2786b634cd738909733d16aafa7c63cc5252b507555b8b780e3e731e259e40a3e2df454b1387a590870d2bded71e5048ea15449fc728bed850f1b88044f48928b95c5e1a4fca292fa629e7b41d4cdd2c4489859a72dd23da8a8a20b97f3e486c329c69a5efdf5d040c1ed3a2d90d01d6fcd9d4dda5641acd0c3b2ea1a255ad7fc3d9ec9e8bc881af15746c4723b5ccf6fba315fa0efd6aa789517dc1cc7aa5c8c598e3d11717ff4a4688a3511ed96222a2b800ac462daf224729943a39585959c5f172b9d682c40ed127928530407623a4272fd041dc95777115c75c881c545831b192bcce3309a8fb68a2c979d71ce3cc5d4179ed1bb4275415da7ba88fd9aba285216f9926f7aaa413403df909fe8e50aa370536e45c5d2dc6721c5ca98cdba55e839e773b4a0480b66aed40bad93302bbe08a6b4451a0f7230ba943accf2446f31a6a65fdea24643a254644175137d145143514da23e4ed938605d813e47d17ebfaecb373f5bbd553cd220fccb20a1968b5063641f38c12e0d45741f97a458bb2870a1740d4f25cbfdecaf97a6db8e4b8b283e1d7f3dd30c7dec9c988aff48990e1103b9ebd2dc9aa724776b200b603a21ed741bc5e0167bf01a46de1aa363bbaaa837ab2c16025f10554e5830332e327e649cb03d49518b473c92e07460934d01146d915a541ee59a4bb4164552ec25e2325a8c85b74017e8e88672ed9fd534cfa4355665b27f6521a14c0c69114a96b587d8b712f781fd92edc91224a2eb1aa835ec307c90d0f5fccafa5a869029caf89be19e396d825d8d8d067b4ad1d2ac0226a47c342ecf08fb1992af6fff12163f8d59296af9d688d19962ace5dac378b73b461045b0cfeba3833bbbbfa05dab446732fb7496d6f26a20d9d0c7d2d7d234e0021ed46fd1b173332dc3a228eeaaeff57d65ef8e3ff5ce352f6d1b2b1df95241324edd6c424da8dc3a858f6bfabbb0c0d16a8a32478a580a7020adf2a8e859137e63d489546b24a21f4147144fbb8e2893bdf6bbd64f318264e92a54cb5a32598659a0c2af544607e9e8ea255544dcd976e9165539235068f5f1daec2383a4191b0cc324cc37473f88614b05652eb7a5b954257184391d4f305c5d700307af8728740c910de68fae1cc2e6196411893e98d9908ab5dc059b9a0b3274cd5c20fa02ffb85fe619717ad01cbd38169fffa1f00b76c5c5a4e8550749e80546d6294c16ef79f6814c69c2e90f062016ddfe279c1122af0220a68afcf638c7e6b787fdb1552fe27720437850767873623bca6e61257bd89c6b3e7b9333af217a3e530f8dd9bca514a27d4935cb0e9c705a47285eb65daee881c7556097b6cdcb5805eb188ab5a37d96a0c41ebc035b3a673d0c9ec131ccb1cdc5c6f182ac9dd53516426459ed7c4006db3329b16d341c4e3968781dbe4ada7f49a158778d4d88d6659a57f92e4b2ab4b46520921e452e6ec5a0d63a421753ca022e5249c68b2a19112700bd90ffb59dbd62c7f8ea5ecf6cb20c81c9de74cae678df48ad6f57450eea9b3e51976f017bc43fb31711d32c1cd433450ae97f6a9d2d5039f3a9f2f04309507ad53f9ffbcfd31f333198bea8a688e5057b539759f719c2f845bf1b38e24b16c32c3aad9eff57ecb7063c9d958ba60a723002bc2e27ff772db060c187b78403ec8b64779cbfeb5911c9d8691bac3940ce9560a96705e8e143cef85192b4f75c091f316e5686dea36dcbed3056cb5c0925abb8095a86eb48ba5276e51d48a9d4a70378f6dea0d1fd801d2867f2cc545c44e8a7201bc6d0f55f32b841cb748119e0fc3d3912ab2e4fabea4e562de2f33e0ee13b3b949256b101f36aa6486415d781f5990a290dd0d8e207221174d6abd6892cfa2986f257a035105942ae051d10daed18b48a9cf761cd1a4801892be064022edf62861dfd1698439d2625c896370814202c02785c6a3a959374bcc1e5ed7e5bb372dffd8aeeb260752529ea32c6292c17454bb55b0665eab5446c73a4740563d9b28a34243964890f4f7059aca8f5b2c8ab4e076e9d42c2be28f89cefb750d8be73ea3dc1263b608f31ce198e8bae09dfbc5beb9a5368147c8e30a90ec94f6103dd71cdc0217a3133969e5891b391d57b904fd6bb817cc65189ce0c987a45147ca404cfd171d50bb0b2f21716b4847b2d4660abb0b25a2a1606dca302cad4c95f5d4050b2d21c126f4238157b25ae0fe6de8aac5bcee7607aa02655764b867bafb0e7cb40bfe4cf2fca051a2e60fb7d1921f938d2b7c3627e6290bdb119a4b6cfb732a88152c50403153202dbefbd3af191d8f7b7b45eb2bd644b29539232ab0575069c054fd338b3a64d1f9e36f46b6842aedfb6bd76bd18c29dfc83e6fbcd0bc330ee35eea9773dce0bef5f256dd34a3d05f3aeeb7e6d70ea601f361a692cb36f6896655fa2b4418d4501b754a27466ad6e258f6655a86a5e2a955e67e6d20fc999173ed642f64deb63de904cbd1d5bff7a614fc9f573dc6e0dd28b7a129aadb5561913e0b026db1ab06ffceddbf7efa60da5d92b566fad4f80e1836138874c11180cb2f9557a4da3409e95bcb0276777cce1ce5f8fcb9e3ef64e7f6800fc33cf723da8d74003e08fbd1643a6efde7da01cbfc095ef85791ff6d1dc8e434ffd344f5c692257964d22d3b6f942ec4f2a54b18b5e40399c495e156a3049ebb8aeebb258bdae52a954c27492821aa8c706913ac9c5fe817182439ad43e378899590ceb81efbd772bcd6bce79cd56df6425dc02d342914dc71f973bad502c50ad6a81c15f258dc8eede75975726aa25de5709b0445d5251ad83e4818423394e251dc9911cc98822922449b2924d8a524c504564d114961d5755556ba9d45c8f9236ef9da5cd71647e3ecb0a5a3ea4432e53a871183067fc00d131e80a6631d1a198a3ec0ef3a55c3c9c57b2ffe679e9505a870b752cdf37e44edc0914d9df851ca756d4771dc68f3fa44718d34c2b5dd7a55da5eb6acc62da4a33b8d27769594555b18a55aca23ba1ac8aaaa88aaaa88a8af12aaa3aa1ac3a549bd41465b18cfa86fe8c1d66733daed916a3d4c7f46101f2e3fce0aa9d65e42a268fb65a072d894a5f883fa3069d62ddb6bbfbb6bdf70a31729c49a911be3e233a814ca9516df0fa8450a456832e642786be2939d166e8cf1cb6478d7c722960d9a9518343b2f5c955aa0291855d5456aca0f982f5c513566c80bdbb5b6c9bf9943eee1f9ad193b4591356528916255a94c0d6e788431ffa1c147e3ca54d9b36ad91fde9d31a1387bf0f79598592f4cd4f05aaa3333171ba249a3c4a7da58aad308cbc60655154852a8a2672020340aeb740b00d871ed8e760181312fc0385067d48c900ee73fac72767e2f0dc57dc8b2c72151f45c744762afa12d19738ca9978ca9bf8887d73bfe000152c3e8903d18961b345097c5d8638ed6bd4a851a386e803549281adf3efdb7aefbd15c3783b9ded77afebf1e4ebee748bc04e1bce39bf9d9aebbf306d4562a79d735a3be79c75da69e774a29de4bcbbbd65949214058d16f7459177770733e699d344bcfb96b2ef9ca6f733ef023d94055ab7006cc006187178f5d0e481e440d6f4eedf498d13a46d5630716cacf8cc6e856016d96d7208869d9a60eed4043b95ea0a34e836156453b6891db24e2ace6c0fea52a1a368490b77aacbc7b381d93afa0b85e4b0f43b35f7b3fca4b9fe549ffa2344699665d9c7c2f25ae5ba3f7beabdd0df0c0b2ceff2fd219d7900cbbb5cae012ceff2f597a897d0a0ff770466f1c4d269e601a60d7c4460d3cf53977040f64d7fd50a75c0cb6398c74fbdece531e700dc00986f79ea6576ab5c035ebee5378f03c2857340cb4fb76920583ea72b124cf6e25da14bbad49f2be43664835e811af46e3fb17c3f8ae0ec43ebd337fef6c7e9b43f41605cc8f3240dfa1226a854e943bb24fbdb21dbc4fa8436c98a7d13de224ade6c0505e59b90b22a52a3b06bf2c8aeebbab2d16b1128e8b6e040cbbc991432ec6de574fcb1ef85f9d86b74d2377918477dabd5ffa6d039e3be10bbbcd26f9ee9b5b01f7bea852bccc72e8a5dd8d77eccebdfbc8bb9cd0bf3c32015c83348977bea10ac3d8a7673e486580cb55ed7ce067dfe0d79b2bdbdd3d5526e054bb3bdfe7a614dc1fffaa687580a18f51fb41b20dc3f338b76dddb3fbbf4d70bb1907c699eddebdd9bdfdeccf74bd8638f7d30d01d4bff522e0253e77e180bfe35c72fe7a39b85e9d8d5d3eda82baeb8e20a99243249500006186080b1c30e4d583031319ecc5fdf8c9818979997192f31312edb06438dfcf2312e9f0286e497cfe55f5cfee55dae989d9d7c7531ff1264cb2e2e31fff23130ac2dc7b06262b697980d631adda683151313b585eccdf5a06faf6f6f66fba3c1ba03772181893384861507a868b16049120e4ef55da81fa4fe4eb580e71920df8cfd9c06f3090dd6a7f9da6f07c6027fc641389c5372254d22c5268fd93f53937490bee9115828fc50810508b4e04205762a7530c7d58177f7fc99d2660d9dfef6cab5daab4760d55aab5ff7c3ebba2ebfa9d57b8a24459250c248664355c135eac76ef4a3450ffd98a8e445298a284dc826922072c30c4da8c05218c13a908db5876a44916b643681447d628405194a859c1f742e81c30d539434210a010eea0c3e58d92d98d2e2c095c2a4f818350823d9930c87ea025a444bd5388208265df8b8000a2554062ab32ad24549a848956ed2a890f3030233c0400a223818c183246f15d1a2052688a450f1e0040b7a5042c49016279822082a4de80cab225be0ee91c037cf55112a9603433c18918513474920517284ca1856b658f243173e40b18512fe029619573071892c181d85091c8af01a604e8296bdfada60688278c8614d0de57811e921536222a20577081a63f895652ae4fc5879808b6c85c392d5cf0fd994e70a071dc8a058092e19b8cc5cadad902091c36e8615922272d875dd0a09098e20d9e15a61963c57488e0091c1c16c81b71d60718556028cf35c01ad2c1196c97305d48232804e90cd0048c9d5016f79ae807028a5006b79ae807ebc10a3eb56475a345df754ac8ec02087ddeac809342a3096e7ea4810d71086c973754487218ed0805981b9a44b0778c6153826cf550d4ee49b05e6f25cd50025875dee563510a1750fae6a58d5a0246b79ae6a58410e73a834213a6b2c4a6eef272f496ca83ae4108c810f122489c593274e56e428fd391c6786c1a40a315a48001961b5183ca0a0a254478eb8340cac81c15bb732420aad37189a95114564973c57463091c32e87db11131af413769c94542130ecdb3e7fd6f0b5fdb51bc3b87e4e3bdfb0157dedbd36c86bbb1b9b58da3571d0c7a6fbb441ceb8784f0c5f99e620d39a5921d0c29d9be7573127d3214e6aed314b083b2a81121aa7463461c70928fc60000b1070a1bf3aed3ef7ad22f74f076245b422b2b2225a11ad88564460aca270b18a62c52aca1434584581b28a925a45e96115e5865514225fac5c30658564055844b15a8289d51247ac962862b50409564b24592d51c48bd50b70a03a62f50222562f50b27a410d2b2864aca0e8600545062b28e50acad0ca8993d4aaa8c4b17a22c6ea49eb8ad59329cad513d592d59326ab2740ab274956650f56e5d1aaa482685516ad4a2456a50956659255c964d6d4a0383994013613a1abf1c729010e3b9a9a10fbeb6916a65c93afeb2a6ae16650da9e705a0ab612932c4b12818625dd802f325eae959235aa5260d894cda5904166c9345d9743f3bd1e374e3d41c9d775d1dc209d258c1843f9bafebaae8f26b3d5bb26a77bb000f9e6f9841827c0415a4b1554fc40868f48ad28428b1f7698418509886421f6087cbe68a2ac22c90e5422a5bd99fc061aa514a7a90da593872d01eee9ef3574e2a021c78579d8c7b3a307199a9c7a1c8c063336b3bf3e9e134f8fc6c514a8d355faec4b1fcf0174988187134f8f868313f63d7588314ed7671fcf89a76713c109fb9e5ba50a1dfdb509bc611d3c9c9c672e118323349c7aac0abc3861ad8362434e97f76ef380ebb1bf3e9e1398d08117a79efac30a4ed7631fcf8462650c1e9c7aae24c4385ddf8ed6417fc8a95ef7281398d2b40e4aab66b7ea5126b0fbb7496959c92196c312723f86cafd5b0eb489caf4e77c820c55a6df8ee7394ba03f1f0b40a3434130297b9e6600a050423c599e2b0314b287ee43a04dc7a9debe44890d53189ddcd3ba184011208c4eeef1780a64284f3d9c0fa7ad75548fa79b0081ead433802565b44ef5dde3993438f5cc254ef51ba2498082d6a907b441a482872ef980ead403f28084e43e8c8087244827eddaaac7437d18823cf5f416d7bd349bda94620637a04eee693238b547734f0fa1dd22d066cdc54710193a69f403518c6a3abfdc0d2c203addfbf6edc7a37171ba1fae261495913a594fe3e2d44db4cf95ca697e0db8d5ecdddeef1d440e109684a18099b3ec9bd19939fb2119f3ac17e2e9852d604f273624cfeb53589c85e6c95129f4eb8860219e79e69997de4beeeda5ac9495b252f6a552a9542ad51f3842b677df3e6c42f66fced7345a6aaa699aa6e592e685d9d7d77a2b79d763256c33429b07c05548bb7fbf8e080ebb5c7fb68a846018c675fbc2138ac236daeef61b6e56e3fc701b1da80168debe6e42f9a2c9f57f78098d63fa1ab4bddabb552fec5c61306bbb6c9b9969268552f6a7d8b799f9d7eb75fd7ebdd705b3f52ca38cd3fd049caeadfe759e35cae97cdffce9d5b302bc34e79c597d9a6b6d1632344dc68b5635d96ab25b5e8e93e5c97881e9cff994ba1094526bdd29f56aafbd72c55eb962af5cb157ec3729c5b20bcb4a1ab75dee8ae9062c1936b1b5da46a9535a2dad95564b5d88330da00c13cb57164ab1b51683090283f19cb825e906b68552176badf5fab4d21bd88a713d58b8fb5a4bc540b5d6ba702958176e853ac1172e85bb42a5b55adbd3c2f5409275c07dba4ff7e93ee7749feed37dbacf39dda7fb749fee734ef7e93edda7fb9ceed37dba4ff7396be93edda7fb749f534c39cb7dba4ff7e93ee7749feed37dbacf79747474747474747474747474747474747474747434dda7fb749fee731e1d1d1d1d4df7e93edda7fb9c47474747d37dba4ff7e93ee7d1d1d1749feed37dbacf7974749483bfd7409bb4bdf93fb90578765bfb696e4abf2891e0b8b7da7b6d13c9cc4ad9bf0cf4f007cad5df621e0b0c504900029e310f851c159afb4164428e1c27ecb825540e046fbd9506ed6e98f55c180012b61e8fe8b854725b3a92a7d7c6c92610d935ba77c66845cbc6173aa0c175bd2564a7a9786340da321a3a0288f8274f93c9c4f5a82cdb6f46f2fc8ac10481616161e17a385624973ad3dcbd3177810c60ae47fd8980692d10d96b5af578381f314481291743f7f43071f661a03d03707fa7cbb6a527786fbe2e5c0a770597cd29edc12e482e7d497229dd9cd3a99c8ecea59b733a17a7835d4e87d3f1adc4e9685bdd366fba4129a194a54a555a695969b55a25ba6d9c0ec7e9703a2cb862ec4db166da4c9c4e0ba7c3e9bcc05418186f0a63a565a5d5b2a2155bdacbf6c2e9f8889c0ea72376e348a3d2a0e14d69884d5265992acb94537196b3bce52d67058d4123498e24395228cd0171af555555b7deeb4d6f2d1b6c4d860b1cd6c64c206c21689aa6959a4475d92acbb22ccb542a954aa54495288aa2d845cd6aa36e3552964aa552a994288aa228d668696969b111d442127f7a2c895445acb22ccbb21cc7711c4767a59a4ca5522954aa87ca26c2bc2ccbb21cc7711c59a9542a954afd8c4d860b6c03879212515511cba82ccbb21cc7711c4767b558482df64f8f2d748de3388ea3b39ce5cd80b0d1703e6842d840e07c801002e723841adbd7f0aae77953cf032415222949521499225b28cbb22ccbb11cc7711c2991aa88655496655996e338d6d1eb58e3391fff6d1ee7c3fb381f5f8d0836aa0d1bded4c60d2d20d5d60882ff5d873115a2248a0eb5cab22ccb5a8af089c0f910a186f3516383f361e3065841d09b82630e6c072e3ba296db80e07fd7618c19e1967d117f6d5db5756bcbd656ad2dafad9a9acdbd1b3638203ec20d0e8883f347e080789e64b6e1743820599e5f06bcd0a648a82490e04d49a0966cb0df86ec00115b324708dace443d8b2ce93876fb420ce3eeab8acc6d55a1b5d1019f9d83732291a9a2dd4092e76b236cadea9bacd6211a85018a4929a5550777d38bef867146400eb52b92366bbef9a5cbfa755dd775e1cba31fbe56391fbe6994ce365d9fd3dae5cddc5d57ad156b8f61f4621d1decafeb37cf624f3fcdc4d5ea6d7585cf2f54ca9934dfac471fc39ee67a7f34781ff35468f0be9d99a2d0e0a55fce774283f79a6082e959708be93193b799fe05d357f15f93e9f11762d3b378e167edabe76ff234cbf9c85efb8bebb13de574eafb633340b8afcf5587a1a1351e78b3518a654abf3efd2e86755d88590f6bf0def9f7b7facdd4dfb153b551ce09f262525669ff407008160d4b7275c736293f3012ac90e1022b3c908394231480c28b2ab0004214428bd30c8669b03ea6f7adc74283f5594692f4d7605f3f47cab3d0627fc6bbbeed5c5f028d438b207fc0319d8c30c9f563d0e247875c9ffaac7ea8e0d0537d6fdb37331dcd0ec7f119e28a5cdf8444022ed40fb2e35c0a0135073cd49ab443ad94e20e8040e8033ae410848307ba1bbae8464aaf7436741de8907440dd915a292daa95d2224a69ad94166533d4ea15e8683a9a138a1a6c29d45513471212920f5d372287345c75a21c86a5727889aa0c49094c3fbcc452aa886aed03ee54019ac0a1a7b2bda2754995d4449405ddf296b7bce52d6fe9d9784baf515a542ad5bd77894aa552a954a42aebae3342e1be43303d2f5113c58028067d136630c8605051938727354e9684084584224211a1885044a84c8808d521a154574949e7acb5d6dab5ed65725142b7c96de2b7c92d7d0a6dd6845b12176ab0ddddbd3a698d1aeca0ec28210ca34eb2d2c911474c1e1996d4385b50565e54565e54565e54565e54565ed4ddc62197da7bbd76dd7add7aeb75550c09b5951fd0664de703f69fb3d65ac13cbdddb4855ba32b3479f868ab54b162c526f900e51994e7e89e9db5760f0c7dd5abf2ac502778d949ab6357fdcaf5f05a289b8846f22a713b1ff096c18b39eafa780af414e82910f494a768fdaee8a9efba54100dcdd3d0d0e04c1eb343623a51abed7cc04039acb947d4924b2ee99bf02ab94a6cff1d278ffbfd964ae36053a650a152a5ca257dbc3eac75c90c9531c996f8b824f7bde425ed164ece3927a573523adfd2389d3ca8344e4f699b7e2a55ac54c9219614622136ff03fa75d1160ee463833f58505010119854010da5a194d239299d60a6970e4db65f7acdc3e69c60cdbc1d277828fc50c1c707d97e39a71ceaecb6de07d969f2e5d5800dfe0ec7f1d1cf83084c3f2c21d306fbb1cd663a1adc71ac0502bbcdcfe42173cd60a182c38c891664a832267d13664264424c1eb33382e9c3744530fd8e03987ee783e9774430fd6e064cbf9301d3ef444c5fa68c161a17bf288be4f2b2c99001431383243306a69f24b3c98881e9cf1e60bac984f1c14ccfd0648d7ab366e2d86ffb39aa04d445bd386a4e1e34343334a62ce59d19e9821ed1668d2a07992dbc7af5a66d29b517b3b7e6eb420b2ccfd753e14787d1f9ee4021c7841c61e4c0becb0b528130f0e5edc4601252d462a947b01ac24d084c510bcbbe731b3230452264e2a0a55209896fb3629889246a736a1bc6c6d8b81efedc055323c46d1e88ec854c242ae6ba23a4a82564e2684cc8e431a95785b484d0eb5eaddb7b399695a4a8582c158ba5a2edd537ce845b5ca4a8a4a8582c158ba50a1a6382c61924293392e408a5845296ae7255e956bc258a2d515c42d625644dd5ea644da5c8bbf9882d333e689272cfc7c50171292a8cf3817140dc0705e22516ab5455325ce0cd659837d904fbe98e1ce077589c3c9c65d412fd27457a3952e9711cc7b10a6605dba4eb738168fdb20f5fed1b672acbb22c59c6711c47115a5c5e5e6260669866ccf0a6333a850de1b2237a954892244992de2a59655996651b75ab915cf41f971798182fbdf4d24b2f6b647c686c1de7a3e380f8488386f8c136f3411d471a130d8d37a569f167141245511445d25b9df256abd56a712591aa8b3a1a244992e407def296b7bce52d1b34208450c344555811667546df029130144e75435525922449fe8c42240821d4204992246f789f08366a6e986edcf0a63728894a0d95a2288aa258552a954a458b58462da44f14455114a1aaaaaaaa5455d53f828d1b374618013409c1b0d8fde4388e15292982e28b9d2862289cea861ebb2162e2255ed18aa0cd0682d5362161b3e17cd87040bc24a13e09350580ad84fa00a86589c384038737c56143ca6dc05b8a3f741462fddbe4388eb52c16cbb24a3093c0e201eb32b1ac6559d61d7784a8d4e79c139381ce39718a7096718a30b6e114e12be314e19b718ab0cd3845b8669c22ec990032cc6fac83c930ac6fa8df5a0940c462f3278ef9b556189817bc61b5d64a801930fd709b73d65a6b0733b30db15aafaf4ebbced09cb61f93a4f96361ab64beb8aeaddedd325f60fa4d4ee0410ac5428ba7fbd8fceacdf8df19ffe6e97e3f3b72cc79b1ebde1fec74ffbaf8bdd755eb5f1ef6f77e8ed75abf17ec0783672066eaf3ccf2a481eb35701f67adbdda5cbb7eb5d6da6d62779bb5c1199afea8f4ccd98a5aa8860600004040002317000020100a868322410ee3501c4bb20714000c5e923a644e3496c8c3c1408e02390ce2288e2286186310400819046666ca2a08b21703bdc04275cfded2260529845571915b7c2a20c1fd6ea2572f55a3f2006a1c62e28445d1d9587f52ad22f8c599470a2d48ce8464627855818e64afab202fd92a060e72c4f4e48018bae93c047ab23a2a31f4cabbc67dc0b0a94eda3ca63672d35ad4a66e8e9bd37c41a8b8bfbd8734880f2ece84dfa925bea1b2d8e31371350759b92b6b30eb04a1b02ba1bc9d798ee43ed897dcbc2b09a2417100bc31ef609db1e5618faf3daefc23c5284c41df6e74f115adf46a2597b8d44d34d74c5ca677e902f27e2c9bc1368154a13a276933a1ae37a2c27486ede9046f45fdb14df4466cf2686a5beedca863245a456e5be0c15b8f4102298603ae85eff0bc4112d145953951a3ce1bd5e4ada0a45dfe6549d1dd647e2452e87c51d1ef4d7e848a4a0da9244507edb421018b8675316dccfd9e91b911667e0087f248e17211627dea15a169279c98d3462034e837ebd55552de6c7491eba7986470f85189ef1f95cb8dc85d501334a865951cd4f657044239604836234ef40f8ffe82e209a8fb3e7f50cba36a4868839e8a5ef823e010e41a1c6170db117df59130e83da0996a8f7516d5acc7f98dd7560dd55876a38d15a91ea6164f515cbe9e87354478815b7ae1ca33cd6be7ba9ce9a66123c33363c284030427793be67f829c8feab5be81b5c04fee762931fdf28d97c4f687bc6056cee0d53eeb9c88f83940380288869d72ae15e854d388c3153d0b6cee59326518423234e174ded7c2550d0b441afd79a031b631191f3da7b0b0f0b2c78d4c515080a109941f744c5a73f6018a07991bb0f986072058366fa316e339a01f9efa737e56ad57364151751883654a9ff6f422720585f94975f3270b3aca090c1ceb3d3d68d633d53d188dfd3f9a00220b698808c64e8632fa0c7ac5ee81eb3cdb7f99ccf00abf49e6a613982e756721de70b94d05b99083965ec8063d4d0206c5cae50b96f14e05794b90274a13711305005e5b2238b550997466fd9a0cb6fd2997238386555b2c1f1869af4808f78ab3d3e2067507bf2fd4dd02d58775d4f882377e2782dbcdc232010f2a8e0e788d271ada1701fec524c790f9e586e16086cd41785375c73c8e478f029ffc9a411446dc875d1125cef62a03ea93655801b2267ff8a7ec9562afeb14a66df5f60a1e03cbc393e39820fda538b9c212902a2d61b7cd5d6af1f4b81545d7aa914294a864f446a07575f06c2739984518b3640b9fd4265bf535fb4f9603f01d4ee055123dedd3b6db151f2b63576c7dfc0884d24efc86ba483c30654a684d979c8b6e335e43eda8123930d6927f271017fb517f965e1ca8651ea8fd27d246aee042ad8bee9a3c394ce7b1c1feb926d191a7abae90aecb8de8a29bc5fd196caf30240618073b9d1366e9ca817f7ce103f5225abaccd529cf7a366c2cd9b45ab4aa044a03b804ca3e2d6d245506134a33d49cb5e800903018277fa33a4ac950c33878b9e977eb0b6ef2294e23420c62e8278ca18805729df78007397cc4d01f9fc8cae74a39c999e8d931f3f954529f5aba0d6fa715f705ace1510ace0e091509fe5e414696e6f1ffb38e241429cd70d0bd0cbaef124222022657a257a1fb097156b9e8efa815788af4794a345d72455fd1e636291c70d120778d490cc122b1f8bfbdbf14315cffcc884458889aef3c35e9a328d10f5639cdaf9b236566ceb522e8864aa20ac9f32f2313580e9c1814a50dd595548a7bb51b09a484e9980e8cdb1b6a95bbfbfd01729df97a7bfe4e7fbfc6555a37b3076d093c518584c490134a304b73078444897ae28649bb435c096534e4750e11e5251342ea5d39eab755bf3c6d24f93dcad2ab27cb143e38c85e95c519407a82a2b8f83b39de8e7df876dab67e3a856eb0407efe3187a48a108078bde43fdf4c254efb6f76b1334e674423e782bc405604909b4eee2331ea3a0593333c3f4b0dece968fdf055ed1fd2baa14aac918db7ba515220aadc0355adae278fd7d3870087b2d7a84ea5c2a65aa094340326d2228654e849f4c59b7e2d2b3bb02385a7a70593925797b08e164bc0647d57bf93b45148fd6070108c447b48d14f58a1c70a04c4b116965917139e4908f14127cb3a15f44d9866ecf4f2eb1a6d78d75b4c0f732a263c625067a3ffc29b9e29adf588701697923f809ad3f778094ab98be27881289ba1527548fd4fad00b2a03992e0cca7061d247da4cb01f6f68cbc5b89481cb90de0002be166fb718bd5b0d3f94d82f3f3503254de8a0a2e707b35b7e0383c650a6daa006336b9ea597127280c92e11da1e81fbc0c99e1f37365b0ed03c0a3d546608c7669c8e378ed023dcdafd4794836cfb270333ec7f18fa68251198dfe689879285e6243d6b40d30c3d6e2b203a244eb031c049428fb38520dd8a961279b1e871cd05390f74807ce2c3cf546edd2d3de7edf4a936cfb11f5e16f17b90cf7d3ae4e7bcb047a548e8d549cab54cf85c280da5aca8a9351a452b37b68c9e8ebc17193c6570374a3ee98440995331a33b998070b5ac443b34b96242c6c767af85fb11d93968faa3488f2135da59db8c582f684a0e04167f60621656b18bc3d271cb39b60ca610a439f614332f4ea324d9f740d7e849e14f45fd8c56015b3563dc5a676c28b7f01b221e6ef72882180fda2e4460c41f6477f18c8a981089e6aeda98ac8fad3d631c3fc9a49d3da16de1805915e80fbde4f2bb96c97f717ddd420d168cbe75f57e82134ace43b39153585aeb5bd79e5d5804f3ec8be57a1ce2135e45801a1bb43959a0dfc96969deb10f117929ba167d7ed2ee7affcf41e5658a9f88700d9e2e7a9fe45cf21814ae90058588cf8bec56d3d0a6828c340d051ad78ca5b8e5e40b9a74b2e426882023c9f96733fb4b6ff7050339a6630d0cc6ef4b186753724d0cc0fe161e9953b9c53ecec8fd6d00e814ae7cbce847719ffd3c23e0b34020a30b8a3e3dad96883f8624fae16480013f660ef5bf30d8dacb7323bebaae88d8ce874403bf053e67518fe1c81be4f84003f0834acbe426d4a2adfc38840da847cfb5511e2012599d9e9caed0b75c9f8e0426fb2c8111f9719e4e8d5395e96a13e1f6d9fb68c4f04567eccaf8456d2f62f28623710d35f563328caad1f36926486c287453d3b27b1c6142287efb4106eb4fda3f66e58a496af59ca65619bfc0b9f410041b287b42b4396494054b97ff8d355a80319d051d60ae504706baa075d56b4ca65314fa7de2202c319486fe72a7b4b82979ca63462b7b3bb5d770a0bd174a41732c00cc42e1eba5fd2af53775d6b16089cc33188e508213ef8fad93db1ffa02b34f13073c2d824769b3534d942a0228b9baf635a259bb83f14c138ae56c67a196075b2991b422ffc43cf358ab02693acc836371d0aee40d217ff7b40f9b97ad35186f9f0bb9417967244e401f942835a4a343a52679fdde93a5e49116b32c3ca6cd3dea5e00e9427eceb17e82d19b29a6c7375da731b4a01edec65616edf62311f1c4ec9b7ef245b63c1e2281ce303c8de195444b27b7e29fdc12fecaed5d758c9fd57eca936068f6a9336a7fb97724830591fc4fdccef775442e25354c9d11c917e95d56b821750f9266ac6d3f7d027f1246146c8812cd7b476a5f2536488ed39ad87e42a22f32dbbf1730d3778e0eaa985a2fc178e1e1fc582a6248222fe6950970486e50c80a662f9333162d66511eff206b034162d3dade446132cb73718c96c5024c3696495b802c52c25fad75f241ae29f0f5f5f27584afaf87572579ecd26a2e76b545833533b838ab76d0f8eb1fb52d11db63a801065c9faf6c974269781ea6cd90cbc24b4ea296ca1bb0d37195f7c72f96f2f8bf24292d5dad49bd90be7bacb4b49943d3fb061fb8c42d9a27865b10e88e4ea8e12e93f9e93ad509cbb695e617d43fc317e182ec0aabe58faaf047d55df4c1a5a082ae00505367aa25069a54ffe5c4bbb36a8f9ce699d35ea4ee690854aeb0756a5209752e00c53a81d6b4abc4744a55404f4241924abf78a39187d398d2490e0b441c41f3fc1a3b09f9617bcde8285bcb4e45e1dc5d073c23603d80c07a8ece7a8ec0df90c4a54b1a9b7f1f5321f1615997ab978f25eee307598eb298181a9bad32bc95c11fe9665c32f3c963d05079add6e99df5886e79d74f9842313a793ec8dff1b1ef193d9bb7cbe526d56d8f42cf9f39e4307c8a7475c97cf14e038e1e6f1d28c0d7c1f3027256b5bc6dc96e1d052d63dee027cc33df700315c7d370fe6f6fcd1dedc944c84155731328989183f3814498854d21304db1a0542979a1c7ba322a35077d4a05a1f556973e2577fb91520c924996412cb6208421124123da7ee7a1eae352c3f3b848f3b58bb2f9f3836e96c07a66e999f8dc349a5390bb11db9018fa6a7b67fdb532964ebe9ac4293e4d6468e368422d12bdada8d6fd3b11b6f53eb13fb953c4be3877c3441230d41431a8f35c8724ba9651e28c63af817ecba5d17e2cf8f6038ee3bc40bd4838da71159e25f0fc83d12d9a441af4b9a0bc985d3286a6220938bbe33824ed1e490c1cddc8c99ab31c815c68c43395d5ece7ba6b8a1ac991847db2b29f01f519aec57801abba38157eb6fd02f0e99a8dcab48123901928bc1b11890a1c1a79eaba1a3b3a6011a8500e39fc3296c23a1f04d45f62e651c0ee2d687f53f17be0117bc4a44be80ee3cd8ecf9af3c73678868f55af6b601eb63e7d6dd5807233ff77704a388bf6d514ee0cb218353d2c671c590910a42a32d76d1c463d07bb640914282094fed914cf10d1d05f2d451d311b79e899a72de1405d6771385d814242a5682fcc85419ec136af2900f735fe9db8d927ff8a3400a2ec958d090a37713e48fa4361e31f2f19901830e843b6da3e9439f779328cf70bac9fe5c71e9a5c3b1a9c861b0ea4c8257194d31f80665842438adeb6ea0c579b1051f1ecfbaf7e1898acc301fee4e4206407f8678782fcc75d6889c8476616c66ba55735a309215998289bf83191c02eff3091881ac7a81133b0107f94bcc54853fcfdd73b920b674c0d00285f0d53fa2aed856aebb09508f7ae2c48645f95a0ea76057511f4e8d3dff6d1eb11bc22883d2cf456f81b716c0a983cd86b47fd305565ed862a9e6476ab9083a399af330d744e60bcb354696257d60da683eff280534ea73b2035df67fc0d6f50733ba7c332c6d89c13df077bb560c2e3a6d8e32403c008766b23ad5e0486bbf5951d36f2306e7ff2815889e8a89b098d4aea4a85bd65a1ce91e826c970eaca55e419027b469ed8d1fcd0b85a7b56e068d5aaa86ac8e958e19d28dbf46edd3a337ed8cefb18589e86bc1aece4f39b831f858d92927b5d57c52757fa7cdb40500b742a0ce08d2cc6a02c54d454d18bfb71751332500a22c677f636cfa9f1cf04d885e9c79c4ef6ce37a6db4ea9b18858ac0a21c2ad6240c64e5aa45fa8ea042681726fcaeefd95038168c85b79663fc97fad79d8577275147428ad51902c66a3681e8641bca2cbbc16e629494a0e996fe3d54a249880538eaab3c0ceb6497e2c82c0768eb47ba5c24fae780493d452a4408c3c1832e2e906e18427eccef16cfdf6fc052cfd0c25dfb8f5fb659cab5f18ced7d55fb2639047db9c03c46d4b2472e8c18b0e1425bf8e1900aba0ea9d553a130105cd47ff15160a0f87ac89ec401c59107a265cf55f714357e468ceaa2aa753574120dd7ce2b238b7e1590c8b467f4569988210e27b76adcc0f04082a8a90263918134c52373e4131403efe03d28254df89ee4b6013bddc619d605b42eabfcd2591bba30437e647b38bc23aba6f406460a2b29f69a01b1d85b7bfb262c91d7a008b347b5ad433fa160bc0eeae64ef81e34979b2a3f914252c8d43821df33dbc4f4ab25eafb63060a311f3f86c0eeebc6a37006fa9004e1afcd2ad33eb50b9064ed89924bd92dd2059186d05c6459910cb1490ae5451c638e5fcb6c49fbe67981adb4a59d1d1ad760f8a61bb38908c9344747198c3b0768526dfd8ec44318e573c1ad6b8c84339a3638c8fba2c04a450871c078306f1cc8be2e4a3c187216a825001485a9af23ed40eaa83c4eb274a3a821b2d78c1fc7f3946d361bb24267880b62e95196aa9b9c8528c55546e3b743476350d52f4800c937ce462442a433876912bdce5643834ba137a1aee52c6f1ad46683ac421b19c422855a4c937068baedeccfbca4f693bd7a5784c3409e818449493f1c4d7a718604505d6942000f0d42a44e4973c97cf11e89e157dc8756912f2485401d3ddd50275337af60e4c0acf4db4a5c5f51a69d8192d5b9b85be4b32ff5c08d0c913d0e51af4e32d6a26001a67ea1a7ea087f4b1bbc332bd05d7fdd86dab6d9aafee7481a89e5d187389e0d269c18b111f6dabc6d31d1b1bafe1f9f34e06b142d15085ebf844d75723c5739dbdf3d6421cc71d610f5aca0df1be9314876119f33472ee6328d91016112f7adf985fcc8eea53a64f0d9b463a28107b4818dddd26e93d4413c1b084a2e339acf2b8639c45e239b1c3d495ae56a8e6218f4998d80b961a2842f6d55a75ca78099d2a0f5bc2f89752223b9927eda212169d03c41f992cb914a4abcad8b2295e0d32cc3bb04cec311625092707d4a41554315352cc9f1d6de0de1dafed5cb443c9589aee5196c966327f62f11f4d2d1bb1257844d2cb66d048c01ffa08a232d5d4a7c65b987cd446bbff4b92f2b1ab199089e3f648960ba37a0bcec32980ce413c224dd47a1e4897cc5e937d535571e208ee21414327751101832c2fd8e32fb94f972c523b08e5e3ced6fe6b59779427d6f4e18e38c751c95201fdd8631eae741af3e821fea588a88dad3da417095176e9c6ac8a550cb1d8653ebb9bffa7c7298b813d4dd0545221496fc1231446ac93600c1a1f111a4de9ab622cd004769f1af98e0751ae92ee228db410bca61447f5c14227cc2412f3a55f1a0ee8250d56a9e310091db13acb842bf1209a08c433ba20ebd90b31bac438d998fd6c7893a98d87785029756c40b4100ee003a3626d2c89c94804f7109326b3e8c6a9a2fd0668fea720f2f97a67b5e44925eb27c1cc479d9f87e1a2790bbf73e8a1d3a94ef77074b3c28020e7ee5bcb8bc2e64ed74821ae61dd0f01a819889d94b2be63eaf019ca1043495f2a8df88973b4002db208e301372bad6b7b175b8070931c995490255b66eda3f07222091d1208f800977bac6b7b125fc830931cb9541822e0b3764ecaf47a86e94ee3638a51a45b3fb01451e63208fb95c1924e82fab5ea84d0460f37ba8f3feb9691e9014bc2cd17c7270d93f339600835cf924505c5ebd209b0bcf657ae8b3467a285881fc64e688ef125fa9e1c9f87948f4ad26f37755fd17e6b3e40d74bc41797226c07455dfb6e5c9fc3f20f0559fc5b7ca28c29acff67966a6cd664d4dfb3acc79d99c33379d61e69ca9e2ffd063c13bf45987f224a680e9aabe41b92520724124520df2939943be6b7cf8837e97d55bcc44898cdbd43dfb34899db79e3b3713b7ec6b123bcf305959de5ed76eb38f694c96d96465817ed8341648022e96293739b80fda2bcf65e2967f99c4b640ff465382a4407f99b2928b1bd92d6c6c3ed364c532a8e6b652dc054f5a4d69666f26bd5ccca4d4e157a53bd1b8078ec44669cafe77370cba875f512f84c1f85633b8beaf6a267611361ede8b133345b879d432219d2a1dbd8d358dd5d938234205127592eda842cb5f3d1c2d3daff3b978d21c1f5e2150223c4520c2e0b85fc56131b1f1f046e56a8d44f87b2473d6d9371f98d57ce2838b5d96198c097dcbf2d3202a35b807155aafc7a3ac59312f600f2ff434f79b392c71ea04ef2951e2daf985f8f057a72cce392cb0d06f0bf8014155116010801d656b6068c4cf2739a709840fe3ffb1fc82ebf17bc239f0575d90b1b11234300a44b9304db92a77f20e854b6651f493d5c853ccd1f8ad004f419badf5f713fedce4d8bd8d79126a7b204d78f824dba2d9bc8ce79abd112189294b31eddedcc2c6845c435151b97ffbac3ca5f2fdd65328a89125a691784864fb21faf4a3360050a7290479d44894001da6b3aa215ea39e49b0b7faac8e928daff412e4f1d619fc8c68512f5825530bbffba28be1a65dd8828517fe728bf98cb9f889cc5d02dcd3d7984b76f8b4edefe8c65ce76b1206b7bf1b724a98b5db25f531cf4c93d0025051ad3269e6b4b4c443faaf3c7b10caeda63fb34e7dacd429a489d0ebb314377659bc1b3f3f397674634528c7bc7011c50b89659023f8cb0fe01e02b7f63a41ba54486026130810843dca8bb825101effcbe0b5b0078b645ded853082b6cce0bf6657587689208b1ef3317d28747e69a0d1ef2c420f2db9e8d04ede52ecae12781071d4fe94ffab52c93cc862ae4e0ca3e526ad372132e39481d8fec30ef9bd7b1a3eb5da2af992018571702c8d48389434e7eeb23e71e14064537d65b061d7dc035a942f76ce85c2d621c336a4bc1581decd4fa5b25bd1ac98cdf96697441f550222104c4e13ce53ac7d0a6a459d2c7aa2b61f3f7c5d0b1af7aa2678229ad00a5d828d2adc8ca373f1affd1a1863b66288af3cd83ec09bd866b5f6f7ac1f192fa7e8fd02cb2e165202af44963f0073daf68a18b63fe78849a5f6ce3221aada81f2d6b5aa7bc6c5161c0bad09dab82f863b0f1be15451f9e684835ad8abec9901f5e9dca98713c925cdae42d9ffaa681509f85dab0a558dff67ce6635c990fe3f8f84ccbf25a4485a8d674513486f77db7135bb47b848c4b863d5396f6d13812565e6857cbb0c02ae17339a1591d7d72eff82ea8e54f7a8125e3c76f727e576a8e6b502e4b1d9a5e9a6c8f5b7201583a27ad3a05179afb0b98676237ed41f09c4baf23568cbc2db9878884edca740b4fa2a8d7f095f912ae16b8a4e119c8ceb1f367bc7cf5bbc77858a2a3ddf5854e3757ab188c0273451bee7f6b6c8f54fc1a3d21c1c35d26d026b78de28c0a4bfe49d2850163229613ca3229a3431de00dc54b724f0bb5403fc831fd76654f9b918ea1387880fbb84a71d0934d333046edcdd8839d366fa5f9997ecb9bde928c57cf8bbbe0766e4e4e08cdc06acec58ed258c23b8db4ec9e92e6a5fa841da370e88eb87852809158d91bae361e3a6e424879db434613172bd289c896ce0c540d36d012256d7343df9c690fed7016b12671cc867cedafdc0c69aefb7064b111cda72aa4a485aeb8363c4b47701a80d5bfc6dab190283cddd50cfd2c1e7e1da8e4d1c3fd264a19a4d3bebdb70a62c0731ea96f5d9e84fe3e0ac25350490a69f2d123ed622f4bde2ed0ffc4ede1835a6ab07053e0fbbf00bcc2642738717ba537e438b37052d084476190bde6f61e30a360b16a5f256597af86425d718d663be6189c3f45b712118970de744a9ecab19ced423644af06b3d758a162ab0ca00db4cd1e2ea8e3d30059bc55534ccd226b9ea0cedda4c2841bc041e8512532a99a8c4f794c0225ce831891743c1213f9ea469897be2c765d42f79e6b41f5478f600052f084466d905de6d6361ad766632cfee736fbcebcb25d59bb5252a3b421e5f66b1575bd8b8c2fcf825c5c2e5103239204868c6b3d397a8c5b7e3595a33aa7484355cba23dc06cbfcd08a57fe6c50cd14c6f709075b1c8b69da3b120d69f2006a0e21c4cc64305caaac42a9294a9f02ec699fc2bb07cf434c31669785665592295aa62e2d420ccf4d8bee0b2f28141945023c3949121667148311dc4dfe51e470b2b2e311a7628895de5b14db268f7a0a4b25d0a6c8b54f4505df8a290d799feb93dd77d5195cfaac9b215fc3cf1ea84bbd1b885264bcb1e926685d6824c6ea101219f588204e1df17a94c4ef6a13edd82dc31038fb979a3628004b249471a385db42975610cb915a7e81bddb40573ba0fe1bdd323a7dec6c32e278c0d3ae8859e92e53f20d305f870eca86226e352ba1283298cdefc29e08c82a629fb001697832d2f9e3132b319374c46817e3db480e0831f10ecff969e77fb41bfa00e5c001cc81fc8f1d05bfdf9ffb86a45fbc78f734d1dbb11228fec442ffcee92d2ed7c17ac149d0d9488b0482351b956c2baf61692bb3e70a7898fc77023646918d1342ddf0e9153360c4794a03d98843700b1b57fe068730fc382dca8a7b2d5c8c023b3650d838647410ef54666dd6764db1689c4ac2c608ba35fb247005676a1b079edcee8334c3ead49ce373435d34bc1885b1a59541a6bf39618676616d0fbd8e39c948040a556875883d833311ae975659d23012d9ab8ee4e03f28ae9443d9e7905b5fcbf246c744591020d19244121e270fdbcd0c7b8a80fceca37297facf2859a681621fae22f5203271ffbdb09b5b38022d96415332c19c849553e31b371d15ae8d85f4addf72d67760b081d995dfc84f5d552083b4977aa68b618efc252ea17969d09a4b4abdcaa70b1d20b09381f661b1abdf29f32136a70bbd7ee29af247666cdec28e4cd4d98791c8c7d718142cc10ac3d35d7f57de50cc19b928e32f4b44be91fc6b9e2368f8ee81b4a207a3594460f2469a1ed3043169f1fce78130abac9928fa276c66949b7d6d1c3e6d27c9f2bcd04996ab73cb411bd2f2802e0f91ce351cf3c30d0928a553513c770c7a0f9e5e7151e0af67c6acec747ee77a672aac62d9517d2a69170a04b366ad5bd6b61b793fd4fb0a3f573de7536f380fcab9163a799f029a9ced92145a14b20766914ead3013d95b9c74df6b7c8b3f65c1152cd0063d696884e7169de5e870288f0d11f59d7330f5a405424e391cf1149d585b4e9cecab6904dd39d8973cb1eb2913d900119a440f4ae1730e5c39397a3d3027471b1ab01f70e02d438abef82f3f939a8d9e50f0327b6561d6685f8c1e1259604ceeb417cc1aca0006af34b9430822597b110885364fda4f024690ff32abe5816c36320ad71b3c17c0697aa0b4602aa231c634feb98afef2568f6142a72e712c9623395ed830a61cd612fccd6c1901c88aa99abe1ddb6b73aa9f64c6457ee16ddaac935106328f70c04730b266a95af2c860aa8d4932cecbc50009aa112a3f6dd72cf2181b2a7b61c2d44de75801ce55a9bcc3747fc568b491dab41bde55b814820f2d585b6b807e6fc76be1ee0851152b3cee902a5a95de27408ce60f6c02eea0a3b161501a00bb74fba5ee9a37ae37e5441753a6bab17fc6b054ba191e80a13a0b2042d97a6a096d69c992555978ca2ddefd81c6c60fd451dad3e080145fe9698ae0e5b948ea4d18e5931b14ab275857f4be192e94a218780cc2c81e8e03e71d9cf4c4eebda328cbef2a905a360a0f657be6f33728f37645e47af686f889bb92cad980d3017c0f7b7faa19edf5604509a4d7451b190b8da05a10d051b82ffe5a70dbdbf5c5a1fc45dd9893e42b905e653d6549849ebfec79831efc9d779360dcf64763795824478fa65eb6d53de5e08a53512053a59e20ede4d3d614985bade0a4ae0d872e1837315d6996544aa851187934cbf71e5bb12f6b79569ce13834979e51db7bb500fdac84fd899490361837d243970b80e64b360f0a1af782d2383d21b47fb0421c1afe5878ca6f6acbdb22f264d7f7f51203858258a795edf95bb0cfa917f0141ed3bd0051eaf8465230bd9220290487ad0df5e680c3b33f84650e49a28e62269a9decc0d82a45c34c9523ae6f64cdcb402595c82b68a90492913a482a848e889c536ac3aa0c4d8620809f0247734afa1a8966528d532d246a7bebf53bfeb03dc4704895f43953c1e641a0d79e89df15d0946a4184f879458495821bca5a322a4e431c7e94fc191361d85e006df98ab81545c8dd3f1de14e3e9823b824c942d6376551013062a838643c3b552b138d25114ec4c8e5f45f03b5d2c745a3feb5024ad7c8e04bfea504c01657ee2b2d2967e0d6791a6a03726dc1e538c1ae6264168865851af6c9f0670516ea3cd52cd452b7e2ff447ba2cb8cc1c0fe943181608e56c57fe8ba0760bb27a1125685123e5417f618876ffdda2df14c8ea2ceb03cded318cbe33d96e5f1069dcffb03d0ade9af824425a32159c4286cc8629fd3290ffcb8952066a0a007eddc10a28b640fcb160eb64d8ba3a74592f38bf92867e1880909abc0e08fe0507d323a6d0bc3b47a43b6dd1e734fa2f62ae35d5f539039572340d99a09672025df8f40fa0610617871bc3a50083d5278adc0147ee3a9cd043e7c6fb128a1834deaaaacc4571c0fb04e16e914d29a1bc8fa62c0639b683219db176be8c5c417253bd34a7c3b8df50f06c5006f14b29d89c8f89c46082573423abb7ba5b144e6cc1f54475338ded931aff0fb0f35cf74dc808d0d4df4757a5717ec991849e0edaf67340e1f6141bd3f77223cbfb5c6c774c42fd9cdb668e58c788e9cce55900fbf44716380d3e04ca80df0237907d14422bac7dab0b5cb9815d1f5a14aabc28573a282b0ecd9f17bd9226f7b31f026b9c858a3008d7a1bcc8c91ee49e018b11731a8c0a789e0782b621c72f942d6471a512f83438b5c3ea78cd19ff3621aa75488443eebae6cb61ecb8851507c1da57148612618f8eeabe8c8ca1b7966096c31fe766bb1d3d8b37add1a0f23b2a6fb7c0e94fef2559c276e8ca3158189c1a702e9b2789e45d8450aa30d27b36094a7248a5b0d6531fd1c86d2376af00981923e88703d19cf5479e4150d62a9b2eb4e123fc461dfd14d32f2dc42e418837b8c53a2d71e71a905dc03f5b36aedcb25aa151530a9609989256aaccec486283252cfc6fe90eb8baa07a908179ae786d2f8d2b01638fd8ffb1ebd9e887a1b600a97184d0fc522f076bff3300a31b0d1baf222859045ab5b2496b77c66c2f1977be60fd4e0230268c2f35c97503966478b4f8e6db42d9108e7cb21ac21b705ead76eeab7a274cadfdb7614c955f6904dddcffda2ff53b8bab14580d87740f9d1f17685a1f26825f2aadc6a0318fde32b4365716cb1d547ddc36f9933db89156adf56ecd8f486d821a9d773d5c29a77a322b6fee1d631883d78e0bdf716352ccb0a2f6c04ca893510b719f775bea396a9d4215320ab16d3bca4a6af2799d7d4c5602fc187bf7a20794beff539523c407ecab5a14861245a644be76dfa149b8f80cf128d36de7ea0d44accfa5305479285693a9baa3bc80e877eb868b16720be0c2bfa0c6ebf65953e1714d01b7d8ec05b15a3c8abf25c50fb931e5089e5ab4061b9714f8760b882dd09e440130f274933406a31d8252d18276051c326a72dec9a26da1ce009879cddb31e07593f49bf1a8217261d359e5e8f5355326d27baacc7ed1297b693e54ac535f438f47fdfe62b3517d08a97366799085f0d36c6fef17065dce8dad7ee1eb2e028bf8854617230b86c3ead36429c50e809839d3baa12d19f761a9d6203bfc8f21f953baaa27b4bc2f6935bdfa33f6c5866c881068960ae82d8248caac75bc32c5a1f597ca497c7b4f6d65e06e8f38508751d684437e067af5f91b2a32a6d11d60bb117bac1b1e2df0412bfc6cd311a4491de18490c3874cdac14c945238a2c27c87726c6e2e801d7e76424f989a32a9f28363e87a9d05e3c503a80889e8c78ab898a6627c6695a6e03c83a2054ab0a1941a8f1630acc17804a8c2319722a0b7e2e6bf7927cc08dbabb40d18d861e2afdff4cf57ca3b6cc1cd28e53396a2fb7fb538da14dfea420108d5e16bd0b94fbf99c833e4e192649762c5faa730eea97495035fb2e1fd36caf3aa7df49aec93506ae3a07a93c9178864be340f6c62c2aba61a50beb454e9033a4291d8142d986349b29c633edf71a6b87f8b8d40ca34b9d83b69f186e36c31758690d201339fa291e035d3978356d028d28b80d7fdd9b2b09836c6f3a68490bafc1280837c496852f2afca1c01e1e7ae330615be802417be8e28e334b368df0aafa7f3459863336679b5b98ccfe830401cc08eae53b491b097b30a3e6bb25fe59b9979627df07447e2a8ea52733f9abb931825b45e725efcd1d5da053b638f4409d7279cdce839a205bb70e489e6de5b196a5b99b7ccf064674a0d3f6a8f527473c21af7992d80e50bd83c699a18333c6e03764a9f8761e7f077bb590325ffe92b9d470cd52961ce5b92bc5d567c61593520dff0e0c5d41622ba64701a2faab7b84acf92bd06ac0a208a2b102d4329fd5ad7249e5d535a7aa2e24de618bdd29b073646f5c9f103349bfdcfa34ed0ac3be11b40d5b2e368784919fe8db041f542c0c342b1359ef1af382e6a9ffb8331b6c276733a1bc358f9b8e68120400a63049814a11c61df2cf957cac11977807596c9814a1241afe95244548badbb5acb1414319b1afb80b54e47cd89974c1b8964a2afc097488e2278bfe7ef5b427b7df274782090d59267433d5e030a678a932019bd05bc68d2961a1a4c788493be702bbe84d7bc3a26753b6f149a94b559ee042e5702c293889e43a60cf10dd5380bfab16ce584572dce1fa4cba451d7b8e214ec97a91c15d1e6a6dfbb17a45978c1302148257e3d6e12e14f3084bef8494005e7da3b0189e0006cb0c77c99605bb4237df055f6d31191837fe45f82fa263f19bbef5a43fb6ab6e29f34e5b3d764e1f014e059f3171297d7a6631248b14e3358014ed6e052ef1024a97df2af0180f5798990636d5f6c0c0ad7f9f529b1052c13e2bf1c63ddcafa94ba99e6b0b17fb76ed1e2958e645e7feb0d96f32ed4582b54d03fb3db3ac1562c21cccf3e61aa3d1993fdca334b568995a0b06ee12ba116a7a1857bb664a947aa4a1c6f6331fc8d617fad81dcfa3b251a71155ef90c2a937a83e19b2fd6f51a6fea8f0ceccfae20629f67bd6969b05db4d4e5be6176cdba0b7657907cb2fbc0d6f3dc05a18a5f6eb8bbb03b896a69eda10957b6d49006e1cd5246b67486b06882cdd7bacae1d41fe04f0c8df081d2a78cc68bdf1633cd659dbb525f5f93a58df6bfd0995397489d300126d40846cdf1cfde6cb8167f05f28443be30d984c339850d72d99f2d8c875429202d6dfc40ed88e7f8a02e4f70c8a1dd17d208cbc845be5a0a2bad9c741b67c01623303eb2ec817c9a11c4544c58a4c461c2e369483d9a8e5d7a5b562d4e3f4043a5dd141cb1b3f5a2ed62fa346ddf86412e0db61c815f3d7be960a0a38008bfe4a1c8630e950fe5c9032a7749025dfa3b15a3a9087ef514113dbb17594dfcf433825a203a99891bef43ffeff754313c1e9df0958445dab62dc21a1c5522aac82a3d7650f3b833ccd6137b7a8888a17c72e265785df923d4a9382e3b929c85ef6f967ce0fa909463b90f068712276f0217d47b81823c1c53905d494fe083fa6506b961d6e7523a347f2dd626eb85b3f5c7d7f90f5e66c42446eecf618f0a850301ad731e75f7f80f007d021382a6fbd3a4a6bbb13531f5c4b57105bf9b5b9ee86239b837721479b7e269ecf9c98a7c755ed457995bd607358263812467fb95fc2e690f822d1af40b87e4e76198ef6e783f1d1fd8bb80893ba72c737cc665ed1122e73e3d502c0d6a40700e317a542542c2038b81cd754c2bc67b012dc7fb5a6887aae71468e536837496ee86b60c39e1a6a80e14c45f11f4c7ad9de206a31dbf9e5623489030c6a41f9a78c1bf4007911224ba2add1dba70b33b9123ca608bf2cac888b8568a1705ce544fba62dcdf754dd5bcc72c4a67714eea3c13fd257c68ec3f06f83cf2180ec9848048d062f0875be6daa6f730eded7e22ad3b02a1d7fc1f3ce0b6cf343c49c8aa16b73c5a7770d52bd76f0fecf02fe5909547c27cc7464ed50a5475eb0cc5b60ebe69b6878329e4266363bc00a0e5ec3fd0e7f4b3736bf72137c4c2710f9b4d0ed5d469edf9bbd881f9c02b4d9d234d95056140f49dcfc6b7ed5d3c65be439a5068b6a1d990a6a83a1723bd6ff88b3a2c96ea590b3c25a13eb3dee20ca0a190fed8eb86bc191fb0ee9eec4d81821fb13ce6c636b6821726822e62fc0f292ee453574606677315f750b8d61c73ff97b6ce60dc90e3f853a49945da85770c93541c14cffefcb0b97de46c0b0b6f0870dfd78d1c28cd874e347b0490c0d8a51fa49c7553c90fb058fb2739cb601fecdef0a9265b66f08ff85cb6ab2f8b2ad48f3ebfef0d067de95972062823a2f7f5f70853df373c14be9166ccf3e58c7acc9d607af62404577aa42aa1a0b3353303f0a93feab288496878ee0e1b7c8a523283dad9d456183d8aa5f2cf8aadae4e543b9879bc37f5a22d8c2e55ae5e112806aa05a16b7a59597850baeb9c04262e3cdb2de08e95b1628d215d3ae57eb09afc6e11ea6c74147b24bbfc9fd13a8b046f7b32c15834f0955239fd4c253e4ea818f7ba3d795c667b27d4f7033f750b29aa3a7052eba99dadf0004050792c606552504493714758c61d266454e282b4dd3146a080639560636045b9b49e9394167e2faa2a83ddc4e7b0668ee687143369ce2bc5972626618f0d31abce8183c9d89de76e5be02e82648ba68334be38ed5a28b8a5d9315cac98c9590cb4aad3a8092d72a468033bd90f7957270e8a7eae853bce49e88c4a49746cb731e37e539a9c22f68e508963ee97c1cacef074df72c48139a2d861445f6c9ba63795eac7fcc80e8947acf452e1ab11f7db8ee287dea32c2cd4ed682f17e097b5ea23552c284d88ae4963904945890fbf1e380eacb0fe70282f2780024804369278a5b8d408a0e85437e891201961b57cac3ade41f83e90639bc79268b9219193e37c6c759d39028fab992cda37964b667868ffaaa9d274b9b22c5e1c1d27978efe9a327169b12db230a99a417d8f8c9ac69b580fb7b7adc458f0e38e2fe855e9fea59262cb83c9bef28f73b130d15c79274468b7f31cf3adb12b5ca2f197cc3f2711d20bca9a98ffb051eb3235b95875a05551db118967605b135d53e254d1b21779158e0609d01f3cef4d6f63f498b3a24e2e9f82d80507bbca694c63e241e0bb5000c783b93566dfc110310a6fa2762d8005db107101c7076e998f9a001e4c656790531853502ad99dfb110cad8e3e34416ae8982c4315934d9396d620bb2004facc5db5fa24177603142aa6c65c9ca0413597a1db7be8ab4f9dda88d43e935cab840dd3af61a6a9ed51efecbec46f6be67c13f70c31ebdd46e63cc7367cd7bb5deedd896df45215ceec8be70924d1432770810959e2b4376feb0ec233a422d2a813e5996855d292f42155bca3be9c755dc134d9f13574ad8d4a2f337e0d9707364f73cec4549af6e627a217a8433b572723591d6146f4b3aa135779d75789f1d104c1549832d4c33271af1518902bda431a99cd64c8e5ed3394ab927f8df277a4516d19dc255a4a150c51286af5516fd3db87bb6a5ceaa20fe177f3ec861dae49a54602409b93bd06ab0881ebc90156b327690f61b84a8b08624857e8dc10d79723dc63d3913f6e09d82f0e4e0a9d96c86588644cc0606a0979832f8ecb926dca991811f3a53008f5401367a27d84bdeea46e30cf695e817afa022fd5aa0ff09249dcafc938a70af265a97e670031a2897a3e41d0e01b450d92ddd45871fd0183b9d6ef7db164fa07d79739140fe8196db9252f748d34161d227b38202e1983055bf310ea1ec2b2079f5f8041e5b3615bf4caec4173ed860b3bb2804b2130a9b6e56b7e4d5c5030c53bce4cdd3352d98d5c83250594f53ca2eac687d3d6c78967d68b63ccbea165ceb049986528cad030d1514b7405fa75e02a2cadbae3d7942960141a1c86fbb4cbc840b829e63f18c48fd61116f410737618ad73abb55902a180550f2326040636f0834ea1aeba427acc86c0c9e68a5c681dc28f2af5d1cdb8bf7c3188309a269e05ad090964749dc63836d56f1c99f6d0204d88bd1e27264eb817fe728f10c74a9d2c9495c14611fd154265482203d45f26f0882b07daf009f6ac98fc494cff04002697b9d7db4e78e33fd3d991065d76805cec5df756f08452d01a8a026e02a419cb8ad91931f8614a82e9aa400f48f7bf3c51c7abece5938e0b45ba4b4c7b518f2e21cc84e3cb19cf318d2e3738ebad02e7d8bc59b9c9e6f392e7accc7ce208d27d10694b048540b8924b8eaf3315af044727dedc949fed7eab899b5446ef0b52ba3df5e4c9dcfff580c7c1434c8d8b2912f3bb3216e3ad6af98489468076182b6e340092c036a6088c78435b234b80b555ef6506f3faaa0962e20cded8cc6a1a5d50c983b3365593075a53dcdb154355b93084ebc9c7ae70748702fd3e4319a2a152226f29358b04093481438900d171e2c9ef9fe70ac613b53c04987b67c3ab815d219554057b9b2c82e44556666df7e16b26c83d14db026bc50ff6539606c35273589cb96bc7fa647f3feda5d658851de2e809ead06b13f77d53581f67654f7bfc15dbc4a50349f88d917c48714238cfedffd68fbab53ab4fc5ab25176faecd7b3289348ff97a7cdbdc74cdb87d75e3e9ba7481871b9dac6af5d3c7f0b0a3309bc018040cfd420123e8ba0066efd7a6210a33c58d0dff898efec9c6edeba7026ac0af88094716117e0367146c7d4e24b488b3ef97df140879e17ca3cc46ad28dc1352d6622a66666f62516365e7b4aa4409c80f82be41a8dd46ab207f6aaae44ad1cb6908ebe35cfa3a68e889a9418e9abd6d7a1a8be2a352aa5224f2acc5ece24c4cbe409da4132f29496a8570465bc156594c49a9205a55076cc3d2e07490203272a5294bc46c984a07e74746220c151ef76c07f44378ec09334e1acd8dfca40af5b642eb65b46e2dd679d7dcb22dab0b9c07894678f32fa3a6acc6725e0e1290a801b67bd6a88f9b0a0a592bec06e18e44c0027badbc1cefce9122806521222bc50cfc065044954e04bcff7b8a2a1545e77c3b025ecb0f5f60016c42c15b8af323708dc6e47179145a74a66d194196035ab652514732b2633e15f4e5abd2b60c9895452c5a4580cb6db222287278c2d99609f38df1d710efcb4fab73f02925a527eaa56c9995078b2ca1531ae718f7b9d0df14574d8e0afabfb99628ac33ba8298d8fc5f5bc26d6f713b06dd32405b96ddf6be5d644c9ae49a9116b83896cc0a9c2db81cfc627ea6a0250079d5bf9db1cbf180fc7fff536811277eef74adb8541036053975e1b58f8c49bdb68d3d3a5b3987e2ce3cfe0c8c38abea3f42705c43f3c87438ed9c5aa31683d89439a79fb4f9f88d9e48a9fb35b3913a0831b5bbe337eaa10adf3ea066b1a61cf61c8da919a781a3983cbd48d4637fbe5d4e40082c31337dc86c78a893ed67384839fd2e8b3bc2567b594b7b0445a7f8069c81ea2e0919d423212c590ba94ba2ec9ed1115e52377798ced097140d4bfe2fe84b32a998f498443098944769f3b481342fbd54928f7405e962d65a18c935dbcce8255f52fc6b8df94c4431401cbbdeebdf2a9244bf4596e6f99587240af69c1a21d1ac0c8f41a471cd061100acc9684de3a0223c927492d1862090569756474c9110da66ba8097174e1f4abb95a1616a1d20b89cf1f1494dbf7f844b1f7a516a70ce0383e5fe76a7a78ac701f99933997530e2c34ff9d7a7c413a1ae4dc1cf6210efa51ba51b9dce3163d2db74d1b9cb5b287208248355e83c7ef5783162020aacfc0fb9c8bddcd41b1a295650f600538563b2b80cda93cb2205ab840c0b20c1b52406dd2013a2933bddb9b1b873cc159e738aaff5f0820edcc0b00a1f6630800f180b1370ffd5ba50e8d58510e98e85c074fdd7fa816841aa330f404e32050ec35a1912396ee37b8214722ed47846cc6d3c3a75ccb772eb22d45ad491821ea44df50927db3c3bf8f2878d79391e2f25fcafd94bbfc6ab648cefca60cc4d4cc87b90ccaa959615d960c31f17a96d50b43c0b07d202792f8dc65eec6f9a59f25a78557e3442c72604d8b7934eef21629013c8adea21662a110ea34e5ecbe874ea876fb56f25876c311cc476f908ccb2d7de9da5f07ee9a25304d0569753b9e1ae8169565f323a937254606274989172454cd77c5d45e74e4e4752d18bc6d2bf1e81327094b5ed60daaec763998baa5ffd8b686632552752f2dc21209017624a61f1fe881dd8c49fc09195dcafeab0723a94023dd449958e98642d48e7904736dbc14ee5ebc9e937622a5b01e5c60e968f24dcf84377089e0364c790e53e9ed63ba2082c7484bf435dc32e6007a08c9d45208c4b9f6eb3f410bc033f93f59c6f9e51d95cd0516fe8457206c3b2a0a2f097eb52ac3f230b1323821000ca0cc212738ae7b0ad58a786235921e814c4aec91bd88e48cfe403c983adae0b278627606dc6a8e3726788873b697bdc71d106ad7f2b8759fac015082c3adc871dab471a03f90fa09a62a6c054d1c9838774c3728860ddf29e3347dd2c5be814f70f1add9f9fc41b30c38aaec719785a1105faa57718806829d60466e8688901cee13ba788e38f771271842acc2879c85dec81945878d85a531bbe5448b770781ff35b2b5ffdf2e37c965e24544d07732cff2797461f39ba3d313135749fb19695372a70b11c77ff8f9150caa7a0a3b0a7698f1c1fc34b0416b64da321833cee68f8153755318ec743f4ff5bc55c92d97355a037112421bdb82e778af8f80ab9cbadc68e71ab9af18f572ae3180306823169244dff7958a33dbba3d56d1148295ce748f59a826836c65e06d808bf108d68f3ca52d1258296e27c49b0ee4d50f3afab2f8a9ce99017eaf4273717073018fb91cda32d4a51a9f5417355d32b99b3a76f7ea22a414341f58f32505bf48aeee8b785a44930aac0f02606d935e810c18f8bdd08728305f3cbe3f2d4dcbfb9f4db0d72d1f90b06f76a774383a8ad97899533449756a62bb71c9db2c3f4f8b6529344e6c45f878bdbb2c78ed5a0938f74b441dfd936ca881f58005f488f7c9414214154d5a360f381c85aeb35990e01f8d77105e88c777e902741ada481e127822bd4489d91cfb0176916dbf5bdf0d373430634bf0bebd4730e12cbe4616b54c673a15275f0de78784c7d961dd70d907c9b077c763a54ca1dc9bbb8ae0374efe02c8ef5036b1417ed69a4052e568dc160d3f9eb74dc2c8a95dea5a47e66559844a1226cc9812932318b1bdfe58ab54260f83b93942ebe2ef496d489b4fc0bbde9d18211bacf6f3c782210daeacb0df0ab2f06c8f04a4357b376a2a037f95b84c5fb631daba902abca28dc0045fb69a5d30c7c734b2fc44b6f16127a300861f6e3088048e6e0dd0f7568ed79c9b309c23c12685d528e8507028b456e0ce30189d82a0d7b8af7fdce5712b4e59c4f29dc12bd7f57e0d58f6d48c0d66202ce312ebe60e868d52ac38f94004597c9ef6a191b4d38145d2b4ff418440740e353c3e9dc1b012f619cbdc833be8d20921b6eb4c784f48d910fe9b92350d9dc1b8dfeb7e18d0df1f23d4ea384a07b5dd1b5f8f4f56983ddc93c12740aaf656564628a21608f9ec0613cc06423c3fa934a84049d30ff712484519884e12e1b2d323f0f37310381890b3ca52920c05b347b974607a4d9962b6711a804bbb027ef9a57b638fd891d0c6dc9873388b1e97fd3b42bd312a4eb45e0f83fee4366e5200191527f06a27fcce9bee4e537a55e7ffe8114d79556de0ffea6e2b22fdeea52aca8cb4a4c00d59ffea2286b9f7feb15308dddc69240c2cfaca80833c25ef744084118e956e74b936d314f1c6ccb2cce8e914ede298b79eb69eb4130068bcb4a7071ce48abd36e263ca27d31d06192a344b5c84d50394a87c081ab403bc892b1d11cf58572f80ed0f349f7dc37517694ebb141618114e9f09b48bf95c6053f80bb6186fb48db00b844184259243003fa2f8a715a20165a4d07ca892b1c2fe5fc5cf794dfa018c383bd87d27ca4dcffff496b11c38943665abe82b7cec569b03f2fe9172a3ec011669c83fb891e0174b4d474eeb3054aa6ac87b105c49b78850777f76c64b6edb696644b99524a01f7060807f706715bfd305750d0f33ccff33c4f69097fa1643cfa739a6abf8fa6583f5163aa2b3ca1042cb59fa7c7975bf86b24e8e9651b688b26a3ba314631bbd157b5bc8c83aabb3720d8203fd80d9e5ec2a69a42dd2794f0534130aa7f8d04dd4820abdcd4a9c3a4440203d4cfd3dfd36f437f917e2340431196d30d0e80ca2a3f95551e7bc31f10ae2dabaeeddbd44bd814bfc104f440a9ac6e8db29ad3502c1392fee1c0beb8ef9fcbd2000bd5e6207ee0e6f68532ea9cf3e73651a99fdfb6b110cd0bb59febe952ba4e83fdd1a3330b4555100cac209789667ba90a8281ed5ba18685f88765ae4d158467dbeae7b1a982f8f804891f129a1716470858e3a2e19f6dc97c84f00a2dd07cfcc2ada276158c23c44726843fdc2a902c520d7bc33fdbba892f9fee17cf1cb038cc01042c0e0614b0371af8e4b719e0573306f6c6976999966999902c13b7f8c0ed73f5189dd7c9e9f4cd66f14fdafc7b93e2170caee99aaee9da96e7f4c2c0af06a45c9be4fa6ab8492fac8634c8915d9565ec6e9f06f06b39036cf331b8ef2d8189509985ba1fb25019c0b32d7ec902bafede6a46efee7e341f6a0a4d1034dce7a5a568c41eb4d43441781013933b1353d32213314915107fa9a209822631114d107453d1044193ea4905c41f88cffa2ebd15c12d0daaee739e122d6bd9deb04bbaad97cb0e3c6c36aadf4581cb871d44a5326a0c3949f56d315ec1454ee21dbd15862de4b63887cea16b1883c44f6e4b090ac316346c2568d8332f09da40dbea8f41a982f07ac7167e5510d5d7b26d1141c3de1bfefe97c5a9e11da1cb1653c3f2f4852ed4bec285da8c53c33bfafba7c15ed23f34103c04e599b3fa6391cf8a7c56b484811a64c2381c8410b53f74a1f63b7171f938a959fd33a49cf40790019dd598dab1fefee1241934a0e12af5d840c4484f601fb038bd0304f6a679d856bf4ca965abb4c3deb84e0d4a62fc279d1a9216098bdacf7593b6e16f97b37e581c1fbc4309e3b47cabbebf676db3646fe47ff7bb37f314e3df56ad8477f4ab56fd33db56ff8f4dc6066a1f8cd33fec8e1eeaa0daf30b1b888542492a05034383862ca6728c5faa7e7052fc5ad602ea1fb6cca3dc3e6e32c6b82d7e55ab2002976e1b5abb1fc4d1011a4efe7d17241bbada0ef3ec6fbf00f9fce9c02f7fe397f297a78748cbef9de5c473ed20fd8e7fc762bb5bd13a3b73a9ce0e4f0f8e2668c840cc31c68fcf1e08c4413cc4441f6cc7e5acfe1d58b40e0d32f8a1db7f41fefd74d8e797fbac037ffc64fc9b1bebeeeeee5ffe46929fa47f48fccfc788fd86f8cbcfc727c9151c8e2668f832fb0dfa4b663f1904c497bf00fffe74e8f7979f0e460ce9771d621be3241c00e2084c445144cbc1133b60f0040650ece0881e04d186b27c0106113e00f281ac0816688144141adce04aecc71b08cc38a822c50868a02e48753e27b3d5b06d483caaa8fcb07ee100c194ca50887115206a50f977aa80a049e5e7e9d976ff8878fa2affaf12b4a8d2630b42d47f6beaba20d503800d6e4d8802246107284c3021084c4c4b35a200460fb4c82207464fa040c59e66c7479060841723c062090f92b623d04830450d1c23a0284104a2268440490f17ac8b99f1ba553c2034c58d68839b52993a571df099991b5ed3b48d4cdd1b3276139c3871775ee22b9f0bd6638c05d118638c34aa7c29a5c718f76328c718638c4054829351e24a220daa64d7a31765ec6e9b8c71da3615aafbee2a613faa7b8396265c29c4a0446e1b0c977ae9b86e0ea97eec53971615ed36a26d11792d5b0c3bb44811babb7bd02a76ee4b78814921c6dd7de56f323c16c490b1048f2ea393b1048f31c6e8ee753128f18a884189747777492b8d192d4363660ae57719d58ffd75ff88bc264d86b6dde38a045550fe9a06f72350e57228aeeb3c29dddddd5dd505d1976687d9a47b4c8c262c23febac718638c715733220d1aeb52babbbbbbcc4caa866a88fbeeeeee4eee46e4ef673abf3f556ff09f9f7ad44a467e1b9bdf0cd62e07e3c766eadd8bcdd4cf156afa9ccdd87c6ef5b13b8e8daed0c2d6028801a4ada8c6f788a0fc710359aa1c39ba6d1b3f722387499735485d5e5e74c4504146cd0c8f868c1a6599ae352353a36b6aa3c68d1bf1fd8b5f6cc101e5b8c2b1421757a1aff04227a306430c3c6490be0ab71abfb5a38b3b3a5f855e63fc60e85e31c0c0e3612a773e6dd29db3e956caa05a80871186cfcf69eed5cd8883d3c37bd0e0e32d506c72e3c84ec3d60018a249962865506c622a5cb20c31b485a4818cc2320fb648818782a6268f82204a199ba60d9a074d51343db16d4d9090909090908690a23041962ea230419328a4949e4576e1d15d465965f4531421d8b62d6e405c6c8e31d62dc66d7b8e1ca390d2d485cbd53701819a3929b50d7b41b189abc8d245132374d104ca3c9de6a9e352a8d9947ad48aa6c6c543a6ca6fd501ca73d52307f63ebaa7bc8f26943fdc2901bcd44db4585687bce472b158ab19dd5ed059c399a1e62bacd4a03705b5527bce9a261af2d2923f16c6598eb506b9f858852768e8aa483aaa08b059485501b82eef38e1f005efc03e18e1a53a4f4b4b4b4bdb6a69e965c865094f98004007e852c9d2248b0f17180c06cbf1a1b333a4861e1b881869a909d85e364c85216808ab32176a31de9e73dfb94443aa06f8c8308ac9afe2825a0eac6db68a0b967863f27b671dc00849583841c4a4091524990118420ce56089289cf881ed6bbd40020998683a81103dd462fd39fbf2e103d211434ed0a2084888f5ebeceb02481401456888082266b045280aaa1d118426a0d0030b4c3484c11a0683c1504270d969c94c08b714b5590ab6a236ffa0360f81c6480d76cfd3d741cebae1f721f605ae136bd34ec06abb98162e6d8a9a03e7c09549d31aa9a90059fb6a1ab8374c0369200db5afae79b5596b2b9d6d0d40084b66b46d49a1d4c30fac90a2c6389001d6760832aea0edc0994983e08b8cba6a3e4029dd17d2362aa66dabdf27ed7ea001a8f39b935276204e0b46e2239b2d6112243444e47210fcefb8f26ad78e318c61524a1e5f2699110fd078a3869b047bb142b99a3a4d99f8a8d8cd470c248380f9a71f62c4f63e32f14f32f1e790d4a33e1f9998fa64e2b7c37dea37c62a2052a0a0fdfb3223eeca88b35e84a87f2339d2607f8e2c74b7d55fab016bb55acd484d769745113c8e921df191fdcc8022bb036d6a5d3e2a655f084a1985ac133e98a296a308ed3204882fff8bf59333f993a346631c6318082501d4534889f5bb743861fb1a1f288c07a8fc918980ce5e6636d82e67124806f5f234d83dce6242c3a5f1c8a68eef48d90b0a720421c9a3fe5aaf37f82733800fb9ca29bfd0df025c79552c7c41379e245aff93784e402e401c9051bf4edbe98be9ed5b010dc1b6893246e98ae97a06d604aa4444b44c5414c5e8680a154854929478d7dd2975517fb5cb453ff4a8bfe65cdacaab448af4cbe569f3a0042b94622eab191cc43866a227cdeaa7ab28fc64c545ce6a2336f2177d9777d9a103ca956b109777c24ef6a6652e2b9f1982622e4f573e3b454604a698cf0626183197cf88f81b78410a2d90622ddf464cd4362ec689b244f666eb124d2ae6c847bacaaa8f9fa46eea25ccb2f4710784b32435b835f5ed7cc9ab225d28019751fddb2c44504565d50064545e9825eaaa1d55a8cb479f7e3e528b1e961892c55c3e8eb57c464497edcaab71057ef555571def618e5246e666a2bd91626d56cb2dd89066194aed6f76a236119152d72f4fa0fcc4fd2ce959cd173464a09ff82b99fe547f3208e05ef50b487d469ce58ffafe73d44a669baa9fbf00ee51affaf9dc7e3e49621c775cea93c454aae77e88ea391f23b66f08c7bd4ff7aa4f12db56c853fbbbd5aac788abd6d0a0f7e438cb9bcaccdac9f42f529d5caffcb9f6b4cdd69b9323cd20b332d3b69c46e517658e68bfec5311912348643f4b8098040db9af5a2ae73202e5b8db510495a9a89f5834f102f56d8d100df7e84a8ece113d7db84b36dcb014d80aeceb9d08e3f4e01dfdad28740d7789c16d452923cd5cce7dc57539ee1291a5eea5d34a886b55036e8b470fc661ed0efe29955f47e50f7b89c884a2ebba2ec69ba1015d3c607bc449463ecdead8e4b3ad7e19842857197ef91b93e16f27b60df268b0a93603c5a424208e939cc5528c1ad401021a325012cbeaa7c1bc41e7c027cab6fa9338c94beabaa289050c9207f50b256be2445ee4515c8a4f71da4c0648cb6c6ee6996c5bed2ffff11fff9933da5243ba6d425ce07e3b0d527ff51221265bcfbc3dc88718676bbfaf8071bc09e81dd5eeaff1a1d636dd36fdb2081a5292525daafdb1c85f2b0c1d419385d18869ceea9f41fdbe84149bfad5dd495efb69b9a436131821a8cc00b6ce89ac6e9fc4936afb74525ba1499dd4493344a161cc2126f50ff6c54ada249ef98b6943d957fbb07b737af55051cf521f3fe1f4f56c5bddf24382ca150e279469feeafad57dbc7492feb305dd58c84bfdbd44b494524dded19f82151ab26c7b573bd8331add9be6e4caa9ac6a5bd1f07354e5ca917abbc549f7bea402cab58fb96830ec59cffcc55a563f0aa8e37a4bfcc06db50fdbb3d9b39e750b3f34e4a09d66f527cd200fda9aec3dcf833c0806c96b329a426324a6c25656e025aeed18edf8cbf3a8f752a3d2db1b1413464614e688760dbdea2f14bbbb477777c5747b73fafe19fbe2122c077190b7372db59f861c70506cf03b0295397d927afa6a88a02df5f47190eb0add1a140405a1a1a22f09eaaa202d15f5b11111a80e46a05e87d473af43f7aaef9a6aee87a4be21dda7fa5c43a0e122c190041a54050a53ed467d3f4a22f197eafb55df360bf5a90ff56cd44f43153047d40bb057ea64237af4b1941c32a0db20bfd4e8b6adb33654b7f2cab1aa002c93d5d8dfae1d24d88a47cc34aa71233692b9e040c9f33cef6940178f1e393e74764e2f4ee5b2ba9d460d14eacf5f38fce827db8a9f8f0671f8311f08572a0d32125b61a506af5869a506d96732f46a348c44443021a87f8e7b4c11348c35963fa4593d63a87464743ca3731a5d94e9e44cb7d5e8f7d50cea9d07098afa1a50af427900a4a039ce3d382b6420444515d9a48acaa9db116a3fefab0702cbf31b12a2eac75684e30bba35f47adac623eac8ce144ab3039dffa3084d4fa3bec8d460d7b034d8247f5055eed088fca3cc3fb5accecfa5d299d1318dae653a9fe9628d4edae8b61bf3e5d76cab9fab3c5295a3a1d2e1bed1c9efb693ca005b25c7cfb5adaea7f77afac20ba08866801246a2aeca8fa6411fd453ea9145300dc403fccf01fdfb6bced971dbe294e1df7ed6cda17fd2e6deb4b4c04ca1f1618440b926408706c80381eee8e8008daa671d1a8df634275c86b4e327a4d329f53b3c35f41029e2239b9d52eefdbbed9f7058edeeeeeeeeee16b7b8ed7e3d52a9d4693fb5a7542a059b8991a98feca5e29f38957a774f31b30f12f7d4cfd3bbbbbba77c157a75a67c583663050269a9fec55862c74edc76eccd22edf82ba659fc4a4b35dc6531d2ce0c38ce85dbe3766a971960d09952fde098e3b895dced3ec30da89452fa20f19145299754f99bea07cfa29c2719a737e5479bb79630498d3135a0ab067435b85f03d2af0bfa04f562668031e3094ae329c1a53cd43c6d9ed7d222334415e3be45a5fa1133d3a2fa31e3c6b850ee3966178fbe707f1598fbe2cd2f2f5b4bd85fec7e043935c3c0c0c0c0ec9ebae9712e31055590ad7698a4f657e407d8e0b64c4a57cd3633b9ee2f2c824a0191554a94777f9cbfcdd3d3c6526b2e966ab752edb602f300ed67e77ef88f4e1504ac3fa80a5d8c18326478337a6a08d295675bfb3d603cbc18ca233304c6c3b5ad5def474c90ae51c3c63cd9d86cd8b0216d446fb6b1315a429f189d8b8c8eaa8054eea5f3eab68332ba17955c0f0bf58fce589eb1b1254c52b96feef3d9406ca6a00212d3cd5005e91a432b478369d05815e48c4e051a5d0c151019ddceccf4cc0ccf78937381d5b02123333353a3860d1b376efce3c03163e369d8e8646e743335bab7f133b51bffdd1f8f5711806b5c7537beee5540ba76b372ab0e872a482f4dd330cd0a687b4a784a702e3f70d030cdfa6c108747c93206870a88d7d8208dea073f8d8b8f06f75750fde85f21878516c026a80e1975b80e1d3a5a870ed6c1020b2d80208b9523870e1d35352d16ba1658cc0241909543870e1d359d0bde2eb00b3a6a5a2eec70bd00430c31c430536bb57ea6465d11c7b76afd0d1b355aad99964cabd5a231a3d5f25aade8cd2eb4f4cfda7c002962d35032242a494a57b8a861917db006f9a394b139be527e3af969a2fe849a272eb5e2a36649316a3089ddd1cf4b4c917951b39e1035b82de6299f93ae322a7455a4c145d2d956b7d42440b3ae5dd030066d0d991687fad5444428589ca0bd29ea571b358b71e4d72cd81db1046bd3430c05d52feca116f22168d8b4ed63d9b67c96968e34e8799f91065b67e62d41c3a671d136fc3d3444eb211f1aa279111ed070ea7c2f6dce39bf90d2d0f3b6cff90b614d6bdacb0e389a0e4da75fa81d86f0f4d850c4c81124b2971f76955739e0c06154e7550e2df5c8dc5925596056fe8434b8e30aba75eb11aeee9a5e0b34d6696e6ea6e9006d5730d26c369b0131091a6af2a4288ad1d1324f779ffe72b94090674fff55d739793679f6d45971dba2c7b32428c7a8cadf74f1c11650a0ed52b85cd41a330f95072245906cdf7ff2317950afbfce6649b0b3fbfa3203c1bc7cdd4bf75d15ba2f0ff31c132237d5c3ac5e56eb2eb1eb66d7cd1eefe9348b9f7e2daa958f0679d8053b4de619726954112f473947394276786ab08148913d5a66f73ccf287afe8aed048d1f4629e34ddd16bf62ccea6f1898d4deb47c39db623a6a2bf6b531ba4c5042e807277851fd557b7a01e21f572ff554a397d384142a3f86042abfcd515de51de51c1d1d1ded514e2ba1a48821db686db3499bd27665e362ab6d5836a6930cb63018cc5feb0e832d8c133447edef6ddbe846db686d83a3f66f487ba3aafd1b95241a82a0611fd50e616dd4606fb45813346e342f89181268f437ca413a414fb5372951a839c8e8c446c5b6fca352e83665cbd1447d86f6604cdb681b6da36db418b2d4103366a7411afb0d699087f9791aecdf3e74dff6afdbfbb9d38aa7db7fc7a39f9ce79be9ba7584f85677f7eec9e3efde2712fcdc767a084f373f4f8cfc7f43fc1d9eb6893edf7b9e210dface101e973b3cf19be16e5bc5d8e8089979778c44d070916251e4f81b182f434b4b4b4b58985ad63fbda49974d0d0cccc8b17b4377f3196ef1773516371588b1b7bc3337bd3dbb6c574dba6fab13d99594ac2bed868513f9b503b4b6d0e54f6c1121bb59fb9d81b98da3bcbea6f1a9d33880ecd605fd306748aeef7a8a0739d85e4c3f9a4c17ff1829e507555418e34d8461a6cae329191bd09cd0119f98b65cdea9719c9f6f317072dab7f6812291529c518652c8410582a779d0d8e9890302191fdcc8098080d35212aea38eed6b9addbb6ddd369b7554456bebe4c474a1ad8246b33bf1709e3cc3031cd6c9da8d30b20080172768ff62888b3f00512ea19d969163fcf6dcd304e017450f99990a4b220cd39278df19ea6c6c50396f3358913283c61032a40d03cc02436030a2f78e0832c989810c647e1093ce8810821004db1831510410a11fcc0e8a787588cacfad1020f349c73ce39e7945638100441170f588e0f213b43787a68c774ccde7403c16021a53c55182868fc10c481c390d5559304da1f4f3f509897b99a269ebbe79e7bfcbb37b33ec95105ddbee78b09a8fcb8e8e32739aaa0a9dcd360c71c98096808cba1b1c9e9950d441adc3e5c2519912ca7613b2f40547e39704039d56395d3e0f6dd73dce458f7f1e0b2ce9af3e3a2273da0ce44fd30188ce8063643036a80c16073c27a9880122bbfb03d3c8312edc2f3bca7015d3c7ae4f8d0d9e15df991b5ea9edb31effbc17e178fda3f13f3049ddb912c9246528a3c92344985a42293a415a924977c5dc9958ce6e4227fa53e576a567f77bb2c72572a52f2f6f69e316e253324f5dc739f0f177d216529e693fa36c0b92096fa24b16e253384fbeebbcfa7c614311feeeba0cf08f949621b9bd93882c25c49c9953c2aaee29946be8018f6cc95f666087b1389c02f994ac1c0d0904a72ce3967d7f0eb14350759435752bab2ad246aa5c10e6551b4010d4f3fa79fb6093da9cefaf5b2e94b0daefccae74ab2a8fbf35f0fe60534d6f095d8971abcd260bf0e211aca2259c49d94a2aa324b144a3233946d5169507e45db9a6187ac085a299c40825f37f3fb2594bdd981a44243168529de3157b1b20a070ea3c69713859a92594e170dcf9cc6cc65518c29dcd649ef44d379210dee9c4efd3bccfc3a3bbe344bb33434cbf28fcfcdd58e101a47669d1dfebea7330d3a4d67ca94294d04d5699b213c5562e0a4863caad3549753143193ec6706c44468a80951511fc1c4d4365f9b2b3b1023581b21f6c5738477f417a149920a9c50bbdf5f3a0899c9dd9b7d58567f500882c48afa7da9516f99bf607be34cdeea4382f60bb689d876b236db0ab53b06362ba0c9babc818a7a5142e3e70181f2fba4b0a1f615afd8cabe90acb315376c341b12a2531d9be63ce4af951fba34d9160b96d5ef52a711515c608e2857aefe210fd5a6a92f9c4c35da35e426b53f66da16175750c6526b300715741bf48e300e0f150f87f5b76042618287989889898969a741f678781e8fdaccc44c2f4529cc80abd56a5d6ba66e92cd963009121a72a2c9ef51a1fe31d0f457d76a35c93f644708b78c51ba1c414f31080189a8d98859fd73328b93e616753841c3ae856d63e31f12b47f870a2837ed0d7ff7fd9c65713c88eeebda735fe8a91ef5b5d042b366ad564b55fe3c862050239e4113488c186702cc012323251839b7b718397282b551c13211fb1ad2ac20c6198095292a07f1112345761aece9ac2364a741a2aecd59abd5986ab554531470fcbc5c65cacf1426231001aa8e403a23f1f9992d010a62e91e2353ac811c6bfe9ab3c6dda1f7a8a7ef5d8b4f4ea350289747712aee551c6a954305b8a29ecbe9cd23536c9232b924d6689460f930d6b8de9942c328f3216b1bee27ce96b47cd3efe94dfcf2f3c3224dce14bf6be8586af780c52f074bdb3453db34b54d777508eccb977ca983824e38baa03d469ef88bbf10bd7cdea4c166ee05861f898f0735d85b6d20d26091c602d6d3d74323040d3d7069a030a11e7fc52b5764fc7412723622b4bae1a7a76d5aa8899f7846e69353b17345039e3e5ca59e7ec5f8fe2874859910892922e36364765478ae3f1df898f72a7c7f1cda1b16faa1f67b2b58cbe0afc28a47cbe02f63e56a19fc6356352d83c77c73508cd5364b4a83fd312b8fd2acfeb814836a314a90510ad18ad2950da394da91eb2bc6b6ca114d35a6f0302fdfef4829c0bcacc0a179f228b57fbad19c4720f977030f43ceecab1b78181a22f2208f44d347cfca062245564656477697e8cad1d194539ca7c9315e8957249124aafd453f2d9caa6b51751c133ecda5f8ddc003932bcc4b91091326421e14df830a10060d57a9bfc706227352ea1171ff6058a509a2e12a21b1616de20b16b489440dee4df7cd7d13f1970a3f6366cc2abec0731677648a59ad77df6e4ba5a33240772fb28bd93a15627073f5c5242ca2d42cb4c052378ba5a318ea66b184547b94a852acd13c0da8048d8c836255252808b330de22dfab7c91b2c645a4c546edaaaa725cbcc24ec5a970ec5492b878a5f673bc727434252e452e68dc3c81330d725d87001a0dfda89e7e46a128143a9530d63ca96dfa678bda1f8b82863ac9a6d9269ca956da66ab0861a9edf2fd114bdb30b54dcbceac68c01f5dc77d323cd4af98664da1ae02e5a78a5011955593bf1b7898cd6640dbda7ac34f5094cd32ca538b0d2e956be95885fa029db3a854cd373539ec148d0000000000e314000020100a068422d160389ac891b0f714000c7196487a4e1d4c835110c3408a621032461902000000184280868664382000c32b2220fd246fc4a4b3175ca64a1abad0f74d1697f6efdfba161d91a53c01e0abd5e7a4da887da018970080f4e150d9361e04b1c700afc01618aded5ffd88818bd7532c85fd6dfc60315e1571f304f9d290a0845166b692310ac28183bd8a1b676a651e15cb7b9db00a33c5f94af8398a1298efaffd11c0d4b4fa24c56c29a7af32540a297dcaee09849595479b3eadb050a06d89df066174dbe3b44d1ef2ed8bcba7bbb32374b4d901cd69556856dbb68356ff6b3a5278400797f57af870cf414493c4322bf1ed982cdf75682696a4d8d5c20072274ede2cae88dfa852f9c13e96158d572b663894fd3aa0b1310cc1e8f001f98c52e082b3ac103b194376c6098cdec910ab9daa23508c127b5d1c26a71882922b771346a6a0b891dda57f1cafa7de8eab5f7512e4ad065247c23f65ccacaafdc1c701af61154a39227835c200727f4ea056588a528a475f31bea24d9a69d5f77508570b9c9a26e840a834c3866754c35bb4af9c5d3977a768f68f8e5fb818514073502abb65f65195353054b6f8b1196b5eab7669b833e0c7a3d72ea9cafe31082670b0ed34b3186bef702201c5e10bbee55855aa2f2792cac528f3f59fe8d5d27b6d5dab8d2a4c8a1a8e145dccff8103dc532439c93a2ad262791d8019063f0554c263eef732f6e7eeb489cc24735b740c9b17d83edde6fb669a958ca91782aa2a9df3c9aa2a92f2fd50b2f2ad5276bcdfdfafd00a9d3da71f4e76c0e3af6e8b4e8a4a36b792f3002ae00ebf4115465c67737893ca90c0f3709862489e81a8bf485eb893b78850e6f06eaa7cbdfe714e0036aaf1ece8f142cdb9301eedaf3aebe32d2b09aeb9b704a1e725c4eb6824bb43dd26251558431b728aec7f1eb52c0fda1778666935be1949b15cd22441e6ec6ac7ce822132fa757e30210f9c57340b310a59f116e0a5b3da7d553f172e7435491e4cfacf32ab5cee1037bb15c115dab17a92b2ee6622cc104a481e4c520a548fb11f5702d5463ebe77482fe62369908f22115134c3103c23744d3bdb9ec30c4bf1bd62059953011ebb11ea8311b19e7fa25176d707edff9a14404c986cdc7a20027be5dd9a2dcd229a36af325de95a0bc8c199afef7aef8faa194788fc120f7424a16ec8bf009f43e09e895b5c7aec2eb452a46fc60c5451ac119b025474c2825e1f325b1164651caa912796fa45b6c557a83c1a45b084290f725921c26f76064ffca7bd61e9f6912cc6915045677690c4cd3ce6cd44e8773bc903e8d26739880864d5308f3941d13988789725c810b91383ff4d3b72270930c7e11902a38d58f7ecaf8ede5b861f427c4e48801afffe3afef2201f3793df83f22d0ab5b0c303c4f724365b5ed9f8dfe2e44aa3eca88534b7835d8c9294d63fa2167b1c26a63a82ed4e0624489e1c1dffdcab09394565e78560387b711947d8622e9d1993e9750035e77b87bd7ef60710d7b7aea3fadd1d76de53e8d663b3ced6a27d895b07d8461c20960c1c5c883dc87fd876b4a29f32eb9f7b16580c9045070880345ba13fa6caedf89562e9542f0843e40c9e1ee7c506033efc0fc1826dee0d4fe3fce228b706f021277749f0921cf5a9c2a5df5adaaae78babcdeddd8072e1c347ad509b3866128d3b9cb0803c3f0a1a49c933774c5064353606f973de3181197fda816e301fd8c77ff090ffcafdd034f7671e5d2741611e52f00ae9541c7aefac556eb6674ea3748423f5f6f6aa68cc82ebfadde7ec04a8c52fe7b7a91b4650c2f229bc67616e53c223f1614b6b06fe743f5b5aee0bcf69d2dc268e369218b964f0074ae19dcd28d3bcff874dc570063aeeedac9a54db519535665cc7a3eb3cd43bdd70ef1c25d8e2ae4174a48585b9b9ced11df78b12dae6309a4cbb708a8f2f3340fee5df9bf4259e7e1cee4d78bb9e9eb751ab217f358d3e407aa4773f5da4a7d9de62ae4e81ae5de0ec28dc10a70fb67c69a84610103411f3032796e7b55c7cc7bf8842853d7c073761f71d7615c07836afc12263f22bda9055b5cc99132d86254599c5d79197b7b92573659e083b6776ac8380cfaad11f14407588be996f32b1a257b202507bbf29139d50e39c12383a61b52889a1b5fa6f9a9776b625c3f666cb7342d602448dbdef756cdbd8960ce691f81e099cba1d27beed6d67c94c4908fe1908931b165121edaafcfd0d6ab2416f694819a89151090cf19b5adc6fad2ac045f6aa862295c7cd483ab5b534abcd5e02c36a00a54f1bca5916b2d8f29bd09694abfc8f6f7c512254adefe3b400b2931c067f5f451509017ce1df5fe22d3196290095fdc700c75e615a83121648cbc3951b34222a153d28a7f9a9c0fe95224f06841c89bcd50c62235588c7b7dd809ce802a8b4d24cec409e0abb643871e8e3e55bbdac35c18460c8fe1174bca8ab1cad4f76de050b1e05eb9d45b99f875e1b21aec299cc69302390a51e4334b5f1ecedf39b3c29d965e60b4a2530fcded66c0ce5d397fe1912b63dab00f6b0706aaa802e3e0cf8a9780cf31a3c69e78f5d8b5c9dc5764589b4154fb783c57f3b6879f559cb174de571da7f1e872f49f0d37f614bd4dd80f1de96196a57a50440207c990fadc595f570498edb134214315cbc7610af358065d6a844f0e2f632b990bdbbd1600eea1476760260013e7fddfa35147062459ae29bf31f9da2709ab6de8b56842c3f590a4d814b918f9bbbfbe45470726e5bbd7a413e3227a0687b9a30759e78f2deacd5509a0351a36912686bf7975cf99dd18ddfaf8622c1a104f04399c8554936f4b5f0312777f094f353f1d8dece438ed0e80733f8162f8ca110c38ea9a318949e2f9b3b29a01710eeaa1f5264f443ed93277110cb13d6de17ba60d87e91f27b7cf04af8146ad029985b9f49c9349669ea680221e7906b8a3d18b8a5f7b3bb7f69dbce0fcebd3bea6d2e6ef7248cc50bd3d729b5de2c482788d70922e2ecfae4259b50463aa5cce94f39cbc6cd5a6b2936adf82ba167b0b6a9434d58ca197ce4aaa3c808c36c7d2c5914258f7cec2bb65ad97f8397122864e9156800894cb71aef0756134977ad1ebcfd7e33e8acf1143736bfd4a900cc5276d4bab9980b22720a6ac154e9a4e946906356ca7d2f9dcfbcddc303e0ef4fefc6f6a5c0853ad3b23779b9adc5ac2e48db33a978ec5e7f92aeefc71347ffd5da2eecb6d5f13d381058acf131410bf37a248030b2f80aa3bce4e52254a4cc9764c7d8eb276f4694ff0713303cb40f09348d00b7f688e505c3951000084bc0a806110ceac64633ca93f8190d95d3264abd3015ec4c9d5ba9b6e183ebd9d8f703f3002761c55cb36ec83739accffd8d1e9aaaff54383fd536d1de899d347421110c159308041d29aef0177b8ff8d638751cad14455f853016a38e7069bc216a6f8fb655fa8bdfe2fbb19edb28d4f2b5b4ea637b11273dce59083101ddcb34c3287ea8b3e00494d4a81eb8f9dce952822b19c2ef787236dc469be280e34ae205833c0fd9b5ea6f223ba0019a70e880bf35f919ad4f8b1bb16629baae4a64d2ea5b439684dc7ee08aaab598d2e9a4b01e445555761a86ad7f84f9ff1a78ca0a8db60485c93eea9cab1c562384cb6e2fa654cb96234158c5274444db3a0edaa812035f0837d213a8e7ea5da21316e8267f4991fe6d3439c549b7c61113e34eda067e0d4d7eea8c9f8d840d02e9ae828d0353c8b97a49ebc2d9a75018b4d4e8997c7d96aca5477d4a860cd65c66635939407681a8d1be22efbee723909a4ac62c41b011fc61f1ba362396495e1c364110d3d563c4d314f7b222115e06d1459fee776286cf94b28c0201aa169ecf4337ff7368a9e8f4e00b2e675e341c9cf1f62c06ca5633c5b88f815e6d792f65c8c6a6586291fce50b8ccd8ccca92bc3c5562f3085a7209ce479557ab112589ee903e2a61cf03c7ac44be05d2b56cbd5044ccde98c70a4ad47bfb6705e563e5ae92bb6b63ed25864ebfc76e2ce4f50ff02ec191485ee7027f6097a8eece4241abf1ca47f493d1e480575a903ddec68ffdd14b880dfc53cd0fec113477962f5c4d344a591599611cca2b70336fe1bbe944516ed55ac1342a40a386b5e75a0bdd476db7bd34830f02a59a597c68de8eb6724c872e1bf32ff4f2f4b9e3123a565854c8ea4471a9fe02f36edd656d1e7e3f3f444ca8a1b62b47e102e0ad416bbf216a0066b521f7c1477fb93d0cc2a717221a362fb418d8ed6b10f3462ac1cb8a4d8506c097dff411fe796f043ae2244f5f53128d02921f8f39a176bd9f36d091dbbc37fe8cef8e5ff06922fc24b9c3431d448144c9b9a83b7033d35e28b4bac090a8ddaa618a40c970a815134f0ea1ac8899d1aeed70cfc100899c9dc74b42d91b7c71623f84e10187fdf7b2583f19280340352c5baa4d2f558dcb7af218f9a005c33f3229c5270d3f98a20b314d6cbe5fa1b6d99b7263393a73fd4dbadf9295a733fef5ef6a5608c363bb5b661f5770544385fc0b3f5e6707f503702f2d8d05a8bf65ae372e677f043db576186e7333c476aa69e1be070437495027fac1dcf36070f061bcf2e56c9930b9eb6dce19c88c8d1ce5c96148436b9758d51ac79c72e2c6cc7348ba4600243ebd163b22ca632c85cd287af092110ab0bc0ec6a026f3a24911b60447f6fd66441dbee8a86dd1b9f3dbf4d8bdd945d8636bdeb76900302ef7907f72b8ac50ce891ac663c091f63bc7e488265df1d2b056e06ac5b56449a46e335ab51328f812849fe4d618cdf638bec4dd3e7d20eb6307481d4bb96252d346e6e0c1597cb944588db9fa2d17e94e3cfcf323dc1d06c4b695f86916e87579c396bbd7bac3fba2b36d8fcc0e9eee2f389e9df0898e172aae481f75139e2089ed16fbd21a4d5494cad2abdf54c3403a85290174bd4b81b6188e9a852c47a0ea88456f97d8f0f15169157005b3100b8c124b586070edf66d00a7b114cee4279e537bfcd17e6dde62a2078979701ea303f240a38bb7f6bb47fef23920145482ed91ed834b66c75459342b4c6e44c3da7db23889ee445f9e160c409196d1d6907506c3b944bb71c899ffe84b9d005d33bd64f7202389fd8a5b9d120c8e6f5e4188821353d0f3de8c4eba8a61455376fb9c25604092ba1aacd9e1e19b738cf736c4a531959aadee61ad5f62b24384e1610871b0f17ccabc3fcb3d089d07c749fc3a0450f3bc9e6327c39f0da06b17bfec97fb357021fe91bfce8d796902a8f4b3474cfc77a934611a66f21c3e215c865ccf33ab13de8fecf9552370c0c5d65c176761a0cccbb591ab1f33eaa969b416113f72cfb1c898e3e0d7355208583ee3e5fd82326022faa7c9d0a9839767b2b90cb1c2ec3a6ac162a7d35ca88b8821b3d1e67177ddec7afc5562c23ac4659b70e292a89e64ac744bb02360b31f4ec346842276d3597b8b707c0e2511d619c48d37c551768fc699d9a80bb3395478a16b7956c7d46f050ee93a9085b74194c815ee78bf7e744d954cf2742bab6226c7819e7c139a31c986c70519331d09eb3bf75a39216890113f70193b3edcef4047360de8ba6b40427db2eb1a2ea516cf74a032d38f907a123c6c260bcba4a4ca6d10fde74c5dd99753a8914beef4d07e75f0833b920e84948a6ec6d0affdafb89fdcccb8f868989933edd3719189074dd2af4a9d6109a219b463248ea85b0f1d77fe5b3f3c75363497e5608605774d3cd133733d06770166a15eaef57ab794663f60703524f6ab645fdaa8b87786281e75e16a6fc29b62ea91d6f7a8316a42bcf51f090cb56771ba7ccd8eb07bedfacf0e1c7017b50585c261219f8d6bb331e12f6d522660cbbbc310066ef309d974c1fa1fed1e8672e8ca543ff8e169fd10dbff2179ca4f8eb809d7237a6de99299202782fb21e76451ca8609fd0b65f42817253aa1f39747c4a62a7aac9f86d458f4514ef2e62326361f3f258ac08f714bb6c5a605ca9506180f334564c39998b463753439cf483cf2dbca37bb1db827906f4e5c2a92083ad3518ab3770cd59bc96e22dc5d3fa11e1f53c155de7ae65f85ad04bf0e998d3b6a8869911732a23105b30a744b9c257f5e534b1c757787597d340660f02ea861a0a67f2c05db584507e75bb1a2180c6b3bcda07404a52a1b08944e71644b422e846de0bf7008456034b925d84f7b18a0e725f10894fd7f8d5d515a47fdbf323350f14a126da249d8c4e30418d00593a9bcef54ecace8262b1d3955db622259dcf0f2374756603db2c9b1cd4379abb24797e5464d0597ea23682edc11ddc7f91b80ea49df3a27f05b9b72b7293db86ee7936a4f0cc4a478f373f5eae046d8a7c4744562e78c4623eadee85203bb1cd10a2ea1904737c6bef656bd41b8f3fcc23c49bc55385f5fb2dac17b1af15a897f7aa9c11cce803330df9dae91d872966ca2c55efc9586c557c506d75208393b1aa35c338b02158940bb6aa14dbee3c462a2a7587bfbf8bafa182cc0511a68a65862118cb929cda2dbb1f83b1295e2351ac1ed98d7374bdee0cc0cdc8269d2e2c3ff7252784236c6612b942afd2c1126d5c3a2870dc17e0a17bc40aa1472e13aa63628b267bd6cb2b2eddb2c709eb6b13e98f159c84e7e896c7d290905a4195c3e3deb550847e5d82dd203566690b49f1c3f454091482ea85b62691857dc5116752f4350bc558c4590dde250a37d361ce4a2001f89c12a47b64142b1e0432455908e0cace98ac416c785c48e8e0134fd0d3fbfa76e8d2b86809c15af578e5426b9c1dd0d3ede4dd42e0044f80400a3c443524189de44bb4e654459f3fa595f724c351db7d781df08bf1b9d3ec9468bf5299a0f2a7f7ba1145232682bb8136e2d20faa04875b8e8c25a521bd845efae55848e994ec54ae93572468f39cf1b5a95c41d0e0b8a12b9d3d9dbb7e805fe6708060a958dfe10c2085ea8bce5ef92255dbab3921515352f964d75d4fc5e0c8aec13f1f4a200d6eba1db76601544bd998c17116eafcd5a6aca30cb2b03923ced9845133f6bf9448ec5733038a91c8d4486bb3237d5043fa568b52cf0770d45b1f3118e150686edb9bb7371b277e49af3e833ce4fcfb4080e8238817010690d4b9194257a28094fb4127a5cbe804d5d3e884506572162f7759bbcd268864b111f816b32c805bc4d197644a728f218cc87103dd1fc53e25ad57e44d142b607c9d30b842ddb353ffe505bd7f0b2e74dd436ea1939e2eeb49fc113134e914e0649115692c43c983d70cff96b5c2f42596697fa88669801eece2ca47edaa1c92b30dc8134eac21fcf8ac17a87c699b8510b10e83ae24ebfec1fd7278d82882f9e220ccf903064054a9e44747803267b1018d9c9cda1fe4e8c5b7917799804703fcf73055c97fa11cca9c6ce02cdfcba41234e39e6447ef361243429ca66c4833f3722a8a429f5aa3e33f3253e5c5a58365274a4cd3e25bbea0245b049483e788919313726920816792516d2972c2737daa8e65fc14815cd31fdc60ef3ec45ec7a4f83daef6ef0aa1846053c8590a9e79274d6377a4cfceaa4c2a0063ddef4bc843153b4cc815ba3bfa3b40f1b8e04d139120c3c809ee3d5696386e8ab35c2a0f5354fcb7c27e2240b2ae2ef42020e9c747c661c07280ede8cdcf6c2b7e825d1475c729413e283349705c27503fa099b4a0af0ba1d9c4c9583e8686d89439b8394d1d83be3366286c7f55443327bb2ff73a3fe9ee71b789a81fe39bce86696c9d75129e6aeb60c08a08dff670e43fcba4a1811b14cd52861db7f371d1235ef7eb58cf07e4bdeb5b0b57653bb3ae8717ddde3f5fd9a3ebb58ff43069065f71bb6d9c335254a9a7346052eff3840bd0a0ec11624ea38c3e3750704f9d3d7c268469409c095833ee3685008b7d04f88522e825a1e6720d68546c3f60f029e5586601ddf5f4492a93fd6b03e50ba1d6d2a605086dd5eee8efc282489f4278945f5f41d24b86cda0bb793b217656e1cf5f5ccd57976bf0a066379dce3c7f578b0717f1ac8e75f6d22ab534ffb7eda44c7a0d6db91bc5435c7a13e989d9150edc8dd178e091a35a00337df555a6939822b67b97bb326a0f0f751aed0ef59f0e592692a5ff687769ad16f807ffcbecbb0f6cffbecf7827b896d50495469959d87ec3b88b69c26be99b6a8fc9f0299d5f8ec989c87c9211ff3c3ee198c5b870fff49246771506524bda4b2e3908a9535005e4335e5e93c1107804f93c12191b758c4195287d1250c0bcff849edba53db25aea3c7e91c032f886e07b86e7cdaa444d06430b27b48d2d19bc7291c850dd65b759f6fe5fbc934e36523ac128f80e3990493947890fdc2ada6f686ea08276372d12a41dd0f85ff8abac612b274fc105cd5d159b5a7bae1dda47e643371970bb14d353f5b23bcf77506bd05304b8eb1bbcff59c5d206f7ce76bc8315e1e37485220bc0221c2625fe425f40c477ecad9a182682dc7e3f46115d855fb606004f1241954fd7480937d1a20da73c24594440a4dc8e4574a8d9020d3fb19f6e260e16978763e13732b3e286b8899dbebb894e6513b5636d6cb3837c1a5f162d27d91e60b73ca0500b1a7085404de2984ec229b4841c3dba43d0c2ab18651727e9da22f6b23f0d002c584ecbe0fa3dfe00ffc7cc632319d14f8ca4ae4c3dd653a15478404155419c2039163fa0ab9df209c92cd2dc861e78c134461955ea518b1aace27c71e90846cc2a8f9d96ecb19bf148f89b8012e77a3ec7808677c7b65590ffcd23b44504e368d4a10205f32ef9e6637af9db3f688eec55e5af5ab1f583a09567ecea03c65d1438e6316ea3a3b208674041b5f9f56f2af0146aaf7b6dd2b611c6f8f15b01a1fb1cf197c0553cd84c9d21e92b7ee907a7fba7f160298fbb0b44f5efa55839378ff3442d172f9b2f382b790aca98087ad6f37afe982c82fb9d30dd2d18bb6b1c2f53bacc240702efa29294ae455b1ed162e3b923ec08248f4df8fd54b9a64c3fccdb3c0e73a6a9868a3f550a89325e489a557e9d7b1f12b95a164b7e415546fbd5ba5a2df2b6d32a08e1df549a1272dc664a40a8714f46f03e9f96e1f06bdda77ab0834e2cb78afc7acef7e53e29d788d528f1dff34e3b16bd3277b998a94af9c255ef00eb27270dbbc88539e5a212d43c1328fe93479ad4046dcd34d6399f69eb438229e2049576845b1b300b1ea75765d39f62a110ea1c1db4c2d322083ff55c677b463f30eff29ae1f238e903ef35393cfa31c07c45975efde789f96827b72ae559304185d02dff777e14771286871b1a06d548e1268adc93d83199ab76979254f64f8be702ddc9482caf8e776367ad583993fcf37db0e4b1c49909ce499c58c017906c14ba54c0eda54d0f48f1ce9604b993421d9f3d87fa6efa45958df02d0cbe553afec151bebc45d11ae51e09474a6fbb47096f64c66c7a1fc98625cb9c51a542a5ad0c877b789179c793bcde06eceeab1cb7ee49f6c4e8fa26c78b9eeaedacb28b14c124caddc0344079261bd4c6a0d9af08827942d36a0d27dd7bb01c089cdcfd8e42bb04763478382422b75d6dee8c9886d0b961de46c37383975affbef1be77b67af28fdb0f58fcf5c33f2f18430717391d0efe23d82f4fd1d7a822433c7fe182f251ec42dc8b5a5984e32959d4e6fd9664e77ea8c7990b410d39a54822dfd4892c65ea45e96aaaff3c3a2f5405e13b50ba924cd029c197e2ad9c2592e458f88dd17cc937475b6baa9f4fa477fb5309c343c7a1ee7b1cc5714bfa45323403ad9fd6b73ad20e4838ce7630d3eed5202eed1074b43ea67fd980de69bc77beabc8385513da6005a67d5d28858f985ef3f3fad73f68fca2ff8504dde328e6a0de26a0feebe8bbb530d0a903a5ee51e30aa43069817ba10542758ce354b88cdeb6c38da380e8b56bef50030c4396eae949fd102bc546b3c02b22ec58ee70f8be017fce047f8efceba1e2a4fa3e061d53da30f104f89ea1280932791fcd49bba56ff04fd565f631735fbde98deef976e573793c4a9ff2e7a4c547d1ef0902e326cbeaa34307b0a1c5f07f83acbdce706d8306eee58e4c984de5f3795dadb095b953054de38891c491edbe240dd6e01d820001029f5c29d6a13b230dca8c752af40c2a44a39af178ebe25a2d052f3b4b7783363cfb0deb9901928f46e70f859129a10efc40910b58f85ed4745fe7daed6e1e86362273a10dbbb788785828b250667581417c3d70b274dd7f2101c5af2b77c5b6d6843c489b8630f94684d646b1346eba0e2960085362e8fb8f9aef6ecfd4c4ae06599aa83c310873077d9024303728638375d033dd6f1a51c8134132e57c21ebf78f929ddbc2f37a3821c144a38c4dc9a6419e77b564d4cc11cdf68e70a46ec408a56c7370024ef5ab8070c583608f7a746f64a50f7137f7003fd02fc61aae404edf8bc14a28a1727cfe1fc0a282aa4414ca63503f168a17178382da2acf5471ec687cd3ed432cc4198a104c03f0c96de69ae6a29c8b1d0b90c2058c8289acf5245007ff39a9e9505275b502515a758ab0a1020494132ba89e06618f40aa07f3cf884c0897131277eba11a0517823079c1891527717aad7e71dec9bcb3afa8acd3a26612fbe8c9f25503366c1c8d588693418707130b80d4d3689ea02515876c35008315280f183f459261d57ee35d23c72b7437e9dd28b25f87e932d07c54d74cb04a13461931906c904d5a7637666beff90ada806987a6bca8f543c1787591355593049059451e70a835105d181ac30209b836623edc70aba1de230d200842dc7c7075632f5204b4cdc97365a8ba84ece3866a0537d3c04b24f17db6adca93faa2be059b6eae2bf4e98ceb58335c627de218065c59fe74e6e3716358c30e9af6c59748cc4a3f8e2a9db8bb3c2d1c477bf3981ea4f33e4ad1f5d0116b5c0ff3b10ff608e6233dad1792778c97e9b1f9d013fc7b60a160f63e5f3c53b1636f26eac5ee7f320248d7d3c7dae42a3256c931b6b3f5c27cb10c9ec4b3e73a80b40f2c2a6cd2d10101fda5254a9d8d9cc6f820a88c36352117d80b56d9a438e406e2b6c5dda5008af388c1588c0d9c193906f2cae2a7d688d4276a11b56e053be7ab5015a9452c8d69196ce0af28894a80e9efd3b0ac878426f3d3e8f842dd128318a90859d6d33a43162f7a35305261b79808fd569aa2740692b68e950f6aac6464f6d40efab8c4a1b16164c1524c00c14a0150ff7803503f64ef40ad5952eb949f625dd1afa21d5c25976af2c188d84781ca386758fd8fb654c2146658337f60eece36b0b688e60daa0acfc90746a535a33a9e17ef27cad44c25c9d003673acb3a1f2de9ff31d650cb6bf5f2afa5b49026fa28109d4d2d38f4e92f4d3e4dc45234a81002437bf2723971c60e96bed28e566dcb028be384d86abc80c6cfa4a4714c2db51fd621a7108e36e944e023b8c02c950ab6daf7973b2c829ee813d2d34f1d9542f75eacea1300b0b5cd9cf4617cea3bf01beb4bd034e41afcdb4a4d118322162a220770a8d700d351186b7750accc76a0e870ce6916decbb89fec9d46b4349ef45ce38f32588a09fa6fe1ce314f6f1f4939e2d428481e91b8ebc887126b8353c2aeb1c7543c14980dac1c33465b9e96c4216e3b102dd2fcb883c424c586f56657bcb1725ae29833cd0106934d7c0a523e7d379f88354a9e33393f135314674299e9dc41f053f5aac1048c0085304d4601aca925f3b72b6bf13338e477f0fd8f9f05c35c244d7c009ddbf9a976f23a755282ee202a90acad954856df49e527b6d557e13df616c51b0043218479166fe7615325086bf39aec4d26a063f3bc62973f96f63f9bc65e70327ac7393fe259af25d7e2c5f755e4367133059ab3019a8dc11a99810964faa836e270d141012ff8c72b63ad0423071138770504e2a2ea449abbe54acaae2897e7a7263195464e808e6d174d160b14fa46c9a584a19b7b5cd05437b2945c4169c2e8edd2ce1a0dd94c98d4d2b30c71a677c341ba5840b60f73c81ae5e11ac294d4e7bc3336ebc428a8ad45de3e5099a1e72a46ef1319638f196e8664852c8bf6c1651ac327887bad1a99b5f82931b7b4c0fd69eecea20413bb05323e25e8d95a537203800715e280ed7e19e946ea4321b56a2f8b3880b9935cf92e8020b02f384784f86258422dc2aee44091575a3b902e167c52a95534c2344bb1953b756714e2a9ceaa8fc4f737df8a8853cb57f67a6f8fd2cd2d4eb853de4664cb2c04908dcabeee810151a8f76113e72b1f5d9ae2800e1f042867166f626b9508e37dc629e1b0e31ca109b59b52f0a6f3bb9fe3ccc1e3bc07d35af251868e471917447cfab9cb69f22c3cc2436ab2f979c5e34ac935e16f6f3835d54c0c2b24cc1e9bcfcd73f3ff22a2fe54a429945602776b1b91237d7820ad08557ee58adcca4119468dad9e5c6780336fb286a653a4e399e7b193f28a6b5c825daf94acd10458fe808f8c4cc311c76c22de30380ac7fccb12db0e0ef226c33af0285986fb0278204aa3d796502097832bee339ee57a82c96f5bc38d7a9b89cee0b024880122d750c8ec2425dc05f7026a61abd5f4c687d329c596b6617ecbf2dfe629c3ebe04d02bac04713c95cc809b31073bf2ba6c9b7d9b71b2ca7530cb81f8c95929ac6ad0ea344d1c1d181f81be213931bb55fef024b0982654b1b0c860588f12071ce937fe89d306ad9b8744673f74367ac0d60e7607eb539e6f9f96f9939482ed37e35e538ce458ef2474683c128e1d6fa3a06565087da5d98d57ae503bd7725caf03b61cc4b4c69a0f4eb6c668832f0d96a82118be7fd2a13c6c6b3f720e58439b911bf7313663071c89670917513e353fed39913c63ed9dde083cd49b8743396d5572ff692700f5e8ae2e82f3a3fd17683c8369f6ee19a4935c2f69b13537e2343cf7b2e99b357c01a5b3a5d4d7579329ae5f9b3bfa1de5a4cd2b665a8cc47f2fac4e92da73c05de5628710a7caaac8b4c73f16a396eb80c022623df8914b468c587492e203de5da21233258e613b4412acfbb87ee9720145f7d1fb107111be0b1a2f84912c7bea2fb87033dc27a1b543c43c5e368e072af3116bf33f0720392708c7cc7e1d7f0b5d48331ebbbfe2cdcb0b7ca43fb03ded91d867d84d57f511f1887c09228cd88be175bd4dd2a4d952d3fca05a91f76ab8903b6efaa025862441094449370b53a87a85d96b450eb31074632eaba606cd291cc0d962eaf7a6270f28205aec1c6c5d629a01ad2a4b9e92ea75ef2ac39a9ce06fb92081655d01c7fc1f5e3249220aaf576189181da51c12991b04998d1f690b61a53cb32dc1fcec5d8cd39d25f1d77aa5663af1913fc7a9c454cbe835a468d33feaa38abe87670e0e82b1ef79a7b4bf427b6eb8c8961f00645dd9a759fce3358b837f5885b4ba3a33ae401f93ac9926cd67bcbd8c09dc1676fe91cdbb942a6bc47f6cfae71939885364547b189fc0b9ccd086b5f19fb92fb000f0ebc343309092d295aca026034284476d45c3c961a6b88a50542c06c52a5c045a96a05b95e53512f2541ba963fd6b402a2095d5e69ebf2420e35af3a99a981131e9c767476843963a4a83741c2b5d7308507f8de6e69987d4cf6ed20352f25aa8568a7c8d76abfbced21ea887d35870705cbe3dd1d2372bdb6c25ba26836cd7d025bd7e9969c907527cadf697184e7d8c74175e6b14d8e1d990a6b9f42363185ac7192258aa9b26a52f9b3aab7d7467a9f05bd4d3026e2ae23ca851d0e05b54fd4d60b248cbd570789542ff6539464251e010c21f0f9d5984d4c57ba628ca85ca80365adc2026ac3ae2d0a7c5bdbb530ac17241e829bbece31756d779d1de08f36d4ac6a6c2e6a66d87af4b54d49e4d375d8e0657d233337fd349672745af1ba4983f398cfc791e121090eaec499712878fdc4771bc7bbe4142fa5bd09bfe3050dff39118118b2267a81f608ba52677c4e6cd2037dba6f2b4679e2748eddd60d8c6f909e469e12737e3e44b18c547b3e97daf79835f2af89990a3ed55b2c542b52233c4089c1ce5b6d823c74379d62f0efd73b631445b009442b7369485aaebde00ea42119525d0fce3770d47da229dc1118273671a6f4a8b65aac113413a2860a49add10227c099302198d968ff6f673353a708b70135b52a193d4e7a8d5ea06a534c3e366d0e7202182934e54a00cc9ed938597f8bcf4269930511e7e3ac3c8cece75b2a738a6273bb23ad53487fcc4087ac12d88f1d010c6e607e79a026d4ffa860e5a2d834d6a98477dbc987e0c04c17a02810aa19de5cc190ae89c258323b0fed6de33f51a4ad57c49779d0786b156d98112eaa5b35a22eb5113f3b75749c6ad3b05c7d3ab94dd5ba5653dcb8ee963211ee29b3b1e76246cfc47bda392be40f47bd0156f1d4ad8e9504d39f2062c9a129b2e3b709814cb57f02b959c401239063800eb448745deb9ce6e083084f36c4e3b3fd4a5b20ab0b08ae9842a55bc44cf0d83dee36bc5b8c0c23538153f24774f21485c0623e85e71380c3c4ae70cacbe0acec810221e77ce0aef33aff34422bed490dae72f5057b177dcd2feaa8bdacbe87018665ad6921d258d76a7d33299a24fd9945c6b1d52ba0e077915399cf5695414e47147ff662a4fb55709f4ed5dbb207be662d4ed4b550c1c55c5210513970a84055815e1b61691aebdc162545f28cea84691749c2480544b8e14ef6792f0b4923b1a4ff756c019b62d2ea8301ed3481b888d10c7de169baeaecfaca191f873914c35af065d01ca14f3130f438e9d0811f5960bcaf7f74ffa93543099fc67cb6aa5fd861cd077094976ba5cd0431aaa1780a50b819cff9203a2c793f362a9265607ccd1dbdaafe7e5fdddda61c04c089b71a7a9374f799b1d776ccc17988b0ba6a370e768820a190c115072a4b6595cb3fa6723c07e5f0281df38bb4e15266475fc6930467814457b72eaaa7910e65841df58b528d71896df9da1da32f3f1626bd63c3888d19b45c58eb685ea9f8acde8d6dee4adfc4df8e83e1ef7de2efb267f9fd259912476d92df77d2521e6f0a609f09c7d28bcb15b4ba9c0df6be023061042763be2ca212f8f0d1a29f064ec7df9175b24cace83f261d0c758ae8f55482fd94e0a93905142fd0f9b958862fb1c785ba5765073826ee6ef57fd923bc2fd57e9bddde5e455a02321856e819619ef16980582e44e5e8f3b17000f0331a32ab20c368675458803507b37196188f2726f4b5fc517899079df2a48f575016d98e62f4d59e0bc524ca238cbdf49d458abbce9a6fb4238e5614c351558f5d04405a41cc16e97fb1d15714460479cc38d1fe7ffedd282e9e71a261ff9d9740b119eed988be85a213ddb73dd86861cbfcbbe32110b34f39b596a88f782bbb563e46f09971b73e978b60a62684569f08e0b3369e125f19f6f5583c30b21765eace0bc1db414bc478abade0b5dd1022b4da2e677d21b4ec13d6ba2296b0699493a2ffbcc856c843da4311ceff595a86cbd9571d7430af8a9b3f052f6de780cd31244c179a63b4929da56ad639cea05e455b1e0f85fe992b57c7820f1d8ac123334b2050a153fbd12277263b3a8ea1ed52eb82b7229e6345b56f177840d706c315561d83f5406dbf98d75c90a89fa604e3c11631a78fe7967c0ccaf02d98990bebd83e8ca7416d59c7d4865a809242383e1c72f5248b4fbe01b495a28c0d8c41b9b635570700bad2a2fc229e360a763a3bf1a074b02523f51a3d2468cd4e1b8d556b7ceb270a34cb03a853c8dec2de18ac3f7f1180cd6615d8858db5dbe5c4b8b06bc3888de83219d22e40bf8de548d39eaa11fb4a1a8ce4e412393beb5c034da6d6594a6a500e44a3fc2666a03c48d09bb13a458439bff9fee9d2922d12b228f51d5981b6763038a6dd8ce793966ba34889f9f0fd56bc81d555e153b947a13febb81d5d1979db9216d71d8bdafca37ecc340e60a472959047e8fd298294cd24c1e59869c4e40aa0751f3dc11fcd324bf6f5955a0a070b2788e165c463dd7d1868dd279b0eb5e4a5b2af4ae53369abd855941302a417348e81c43fb7ec1d6250283ddc4d3f4326cfd9183586bdb7b8294a59cd4cbce40f08a1fb7f6048ff53fb540128dc54cd8b05b7280d580c88571766e1e43830c00a247061709217efc13016aa00eb1e1d9087f85880b80d1e43edc31e17a5a4b90fcb85e0176a65dae5fbf745f7dc4586b481863d30334ae87cf661ad2845ddb15561e84fbd59c164935b588c457663968959a1da4b98c9db2204ba75b04745129c32dc36b968671470c53e37d25e591daae810ce9f5a68d53023042776baf16f80408ca5424436782eaa3079d8f023f9b73394c1c2ad6dd0c13616cc07b3e48af32f6f4b374c04792345b5d194ae6090722659ec8c39ec3aab4ccf6ab8622f9b0a15e66b48e02eadb30707609f269aa6a3ddef891253015abd7703aa0956a9443b75aa88ba1401bd040577de02400f15ae596b9b3774a99b35158fc8e6430e23d68858cf85b1f7ba574325713216d6202c7b9614e357ecbe6e831b5b3e44e277f66b1d3a6763dc04993cc3ce9902f0baa2fa62da9b4d14e0201c910dd82d336b10694e0458bbb9b6f6a000c1a652a1905a2009415c940b2336f0f5b39a3848bfe36e75ed8a14ed63e6c16b73f6887d081d86b73b96a6be92d228171e58a94e0c6a7632ada27c3a432ccdf7b739518dce662ca321bddd38b6f11af2937189003c2ba8cc4254905df0e29876d27e4ce4d4ec0d359f667d69557001df0bd717396ad1fe40283e3028cd4727f6045b99c1c724422456070d6f8697a1910ac49998cb0a03a80625b35c89110adaad8c98ddc73710340cd30eea834765d4bca53886048b5a77fdd580acca546742916a0ceb77485c3801d31624083c6a7c57d43dec105c8adcdfe7f24bc7d7cbdeff885b103612658eb559c26984e344ed62c54aa00836239d980690055753f3023a7816b8c469ede037c09b2af6c6f043b6e55aa2a36b3a39bd7fe4fea63c436c727bda4a24bcf44d0d04d44325d8a8c65108bf964b431e084903a34a1c1e4855e2b6038f7525d44b280be1916a3eccb9525fcb2b4ed75a4539d4ca1c6f2a1cceaa0d97d8f50713a18a0d03d59b2b387fa6f7dba3ad23047fb2f205ed1b959a5cd9edcd15183f639b74b0d0444382ae28574bf2390741ef18dad8afb514055bc363a0a82348481ab4ad797170ce446deccd1e70ce8b71a10a1506742d661517d96e5780b26a665c3d46fd82182635d0d0d023b9126110ebffb4b3a21c4f8e855ad6cf9c0d5921c6ac858cc4f13a832ee55f73b0f38ef6e96c0cc85f1f6ef4fa13100850f842b331a8fbba06fefdc6b2412cdcfadf2c34cb4f2a51e1f2df18c8eafa0f899b1225ac3ed6f9e9ad84a04e87d574942aebab6ba49f51b8b1c6fa0078525aee8dcd429099708022d9183f706b0d2099f4688b9511d26fbeccf4465299fc6bbd4c1acf4dda0070637c72c359a57725571d0c11c5e6a20b769465d9208c3ed69600c40ec59000b1978778013c1287f8ec7401d7189f0423f30b2fc66bb0f0a504c6805a887c1a80697dda5f8e584e933935d3c9e84c07698ea545db04ec1fa6031dc8656ce21fb3dda51171a7e4dd380cde986d66bf9b1446f39792ec7a2c72e78ba30ed8bb8ba467d3b22e8aa4b72b7628493212c340e16da95821c5dfec33d5b388c1d28b41a5fe4b9f884865fa7252d97a25f9e26897d765bb393895746c244402d6d142439f09c2c09369db31ea4fff35a43ad333e7ce56be0e355ca45c4906f958ee72dc5e150058c16ac6778307d7ad9ae1262cdde1310336236ca1fa90cdbfc2d462184dcb1c70f6317546a2004bd97348b256b46e712b370837f32f77400fd5fdde6bcca618778fd4d47b1b8df79dae585af814c6fb0792ef0d098b3a70e9821c2d2a03a11c6e900513f5643e6681d46c5d1ea885b628f16d7ffbb8fa2511c61b290d90cc5032e5df91f3e18120c4df285881f34c4726df41311b6bf4551980baafc780f5305874707e45287a4dc085e3d296ae9ac8afa0e1753b641d941bf784da9f53e7a3ff379176e994c8c44ec6584e1e021a0fb1bb7209f52aa1997c01abe6c8d298ec61e641cca493d42e45e125f28f62aeda9910b70f33ac6321ca1cc393ddf3cf08d3d71a4fa2e0f99215cc182e62348f24527b4a3181481188c3215c7422af82b590cc05a8a3f7783b5ef164f13c187a71734d1e62b27605965c4c03d42d23d4a70004d263196d4ad92d042b95c461f4e51740dadadf34f4edab4088c235ea9763ac6233e7ab86aab25e00b8498b62052a9033fd13f02ec05a9ed4a0e78c750c3ce372570153f406814f2cc16a2967f18c4a6fb52dfd175c9a35dcde1c9989a49d031dfa0db6e8d7e7346dc6df6d940fe411d00a3a2bba71c074778961263f71392bdabd9cb8dde28b7eb8a6e9b12c72834986a9e016314deaf34fff61db9a3d7e4643289e4a58c03f59110c206289e64ea0b4068ccd4b25dd5b8360eb341ae71af86e83e50a8c656e378b867badad98b873940080dfecb2dc4715e2fafc218a8eeb086474452f009d50fd43f207e902b63b68585146676da16adc0e0751ede75943bb492f9aa6d970056aaf01d581ae7c8d14015a9045054b424b4540c75852bde134c738409cc33af41ea2bdcf4e6c207377195609d00f1201c43d0dd3fa46c771e126fa8870a0670c87a0cb52f4544fcc081d2528660722952a603b86ca375167c05625866210797c824cd660e0b2dac3f08a9bb35547edb87cd620c13e5218bfa3987543a73224e001e0766164360fad9d3c67c15e3a4a0136d1e51c40ebca8e47082e79719a25039a2fdc3a8720fc3427ad5a18ce99357e4e60b335dc1cc15d42de7c07e45d25e461fa6bb356a7fa275d31ad4af14f341d9f4cd9aaf047b7f6e4c945a358dcce9526f3e78a18f7a728ad91df56e4041a06cc542dc02370626fedefd3e0961438469921aa129b29d2cc97a37f2c7f2478499c69a5ccc5f008f8ea89974b91f21e77e2f381d4e985b12c3e48effb1356404cf7ecc44e8633c6d94b04f278d8c2f3c0a7ea1412230ab3dedbc76243f5288e6a8f4d5127a3429b5071c880ac3a109c0617810a1ea07895f1c43e274f412b90cf85abe5d36fea2d5a65e9a94b3e12d976e2a026d249eae434cf312c7e83587ca9a67d34026c0b0232c2fec47bbb76164254ab8e4ec6d55a7ffcfe2cd911aa020ace147198811ad1fb1a11038ba91020a6a0dc9446de313ae52a450fbb63a43c172e50343178bcabc9cdf6b1fd13016db4905a9086ee90c7d0269bde4bd619b8cdb8e8d6ec2a28f4c9e2f2b8e3105a293f22b50ef96cc49c75a9b365a0c90ffa3e1211e2126be686b04c1bd00d8fe6790972984ddfbee7e920c554ed991a56e177cb150a6659dcf9581974ae0c31b20efcb50ef00aff389b884eb6f2ff6e7de2cb3e8acd20f93b81b728de9e6a149ea635ac4e46c24f555b592eb272a5b30d6184fe8b070d776e4207585e5cd4946247bf68d687ca1168d24601748cb6f481512a10f6bb3c493b6a4734169ac46064d18383540178077b71a619f6a02a8a24a09473eae334674a0acb39592b02f8256113cca68d3beafd80d4617ad7a4820cf803f7b4a8cd648a2c2d25b078a6fdb67880ca5d66a1e7ece25bf0b8d00a3909143fe3b53ebaa3a0f20273286d4b51eedf19a4700fd3286fe1c2c3e58e989e3aeaa5d5100c453ba551b13e0ea46a5820bc03354e2ccc9cfa5afefd7515b5e097a2004088334c1a6782340d85c067cced5ad67619a8831921fa1b8414c3a965100f2e1aa141b464205a0a6fc239f132ec601f3e87d76432f3838b83bb62fa2aaf73e0b254d13b06c1341cb69f6616b3bc240806f8eb0ba448fb4f68c69ba8056f60bec2998c223de8615ce05ecf6838da5be95c32882038625455d01c348005ee203bd313679425c5f43690335e04c16c109641dd21440ba6354c569780c99440872f16307d95e09ffea36dcb2888cb17d611e8df9069d737f8471f6c8f85236e094266eb3ed2fc44549b29c7c49e67567ef0d31fb8bdee5aa6be1fcd0d24cf5790f06819115edeaa5f32b1d41d28b4411827e7b2262777b91da61b814a7798267db2d9973fa0055d864e8b4a2efc64dc394059ab1f115bd5de5faf9acd7244f86115d2423bc5cf9af073aaed17c8718a4783784ecd5cbb48566ef565238baa1c90a61b2e6609e2ca7b0258b8eeff96305382cd07a2a8ac7bc0b819309aafcbede9a737e46a995b31275de533ac8e1e9f8da8390a9b1829baaf2ba1b61055dd5a33bd85a8cc6a4c9cc06a3a54e907c64e7952bfbfab5a0acd389ce279f23ca5e1f60f91466382b162fd8de93d219819c9797d2712fe2836e00541f9ccf10b3dbd344e0cb0513cf92f36e64f2c150726dd494955a7977d50c9c6e75294238dd0d73e553025ce950462e7bc99a2602dc4eb4f4ea5bf3337990e76fad03b30fc4c1ed82f4b677eb581e03bab97ae314a2dd80646807cf56b544803709c3f67f897002c4f1ce8f8a8514a61f46ec0e93d6f0718c509f06d82c473dfb463c3d9d75dda66ba80e14d596e1bd327fa6759934c0e456828038d9060f13949d6a7d75506dc2e04060d891c9d2cedd391edc7810aebc17d7ed07834161e35c005390882c415c3a39e76bbc126633fea5a9855e3f8154483f9e2e0e031fba761e0bf6dd254aa76b93b9c3995fd0f46e0774ff070ac1910c806c94cb4e1cc70159d5b6678fa92c03a85d022b3520500025254254fbea3686d7af190261efe26752a8bbd9a21e83010c759f8140ba536f43094e3999fa3e053cb04e8196622c1f0af0875ccde0714c1505dbe2b2b147680c37bd102d825bf04a3330440a91d8a1f38bb3f62424f4ce04e25095923900fec0f72a70d9ce0af81af7b7f8c6985c49664b1ef06db39d861fbc717eccf0a11fb6f711fe39e7ad0860750a0c26fa17152353d8a0e12075834208418700739a3168b9f871c7ce0dd7cf2c4771236809cf7e1cf29c3b7474ac47ac8e33f4837a24386647a84ded75322a11f4d4107680adba5a1c09bed010c8ceb9cae4ea011baf1ac51d3b64dd58f88b5c44582b05767f48fe0219532ab2cb35e0ae72cbdd6911a40aa8f2e6d5b8e4a5aa514ef4031a9e20a50022c6267e3c2340625f78c512c414484e8e9f735a1d22fa683e00fcb3f4b467000382f46cb898002d9d405acba2205f6e0107e4d803da8c7e1849319b0aa980ff0dcecc0005605ffd071657912eee75d860416d2f4e7bb1995623fb011669c6233ba31fd4cc26842ef69b8748a6d5f1da0c63b22a248ad46ea7252f577bfaa065464e2d78fc425d880b6353df08fc1fc0ec13587987e5592fd055507937cb055ddb69d4ea3a6460b1cc52703f62c24a51250edf838423a1c76f1dd705ec17378228f90a4860dbeda61fc82ace4bda446a30bf85489187a6c5062bd27bc1097494ffdd034ccee47a708d145505f07ecbe61b0a42200c3868ac69e8764aaf384e1f5a518f0141d829393b69d88b0cb5f117a40c7c04369390a34af8b72994cd5acf7648e7afe9b3ec72952fe9a8457b5651d6fc0dc50148d2a0945ad74f5d4c21601dd5357259b65cb7cfc7c55d9abc1e049123dec7acb3a6e261e82437e65ebdbe0f504e0bda317d07ebee248b257786852ed9096e1e16bcddd47a3ea56abf0ac7f69de170b2d62b41200d3d6fa6d2f5e807c484d0f9d6931a838faf49408f6a766b41cbddea367f96f9dafe343fd0ab2e2627191ce479163768003c9788df17538ebee3162b723080f48361289393d98864edd72e9bf181de4ccbb94727f0ae2fb1c753880237c101e7cca554b2576d64c0c350125a3f3689fbfe2d70304c5ba65494a33740807047b87b5cafb566142692908a70730aafb0ba388cb6956fe8f809ea671363f145a0a34faff1765831293eedc468e9582ae897cb40ab851f7be9da79c04e798b5b4044ab7de61ecfb6019492f718a91a8c57dd32e81fe72dcb11764a79c32bebc034291cebee5a1c922925c3e4f7b518a3a9bb9e2688818be97d18ac028f74dcb1a2b233637901420d14726842f51a28b77b1ba409bf3440ac6e9aa49b1a42148c44f1aba483484d0744afb94d0147eb397bcf5f6cdff0819594d4a31c8a1c1a14e5624063bb35d42e86e75a0588b4ecfc79b0704e1990f377fe003820c37450b3148f46bd5413b2d117527d8255688c434ace9a0423cad09346df922c677858232bb2a976813b54b7eb7c74f72b4f5aa087560cb3500e8cdad3cba7c1ad8ae0232e57ff127cd3aac153cf125bc7063a7ee64803c49d0ef3ed4934500cb7903f8fb18204bbb20b822ed991c9edccf4fa818adf182b8d34550049713ac62bbd8ddad4562a6ff6aee0b6e35656f683a07b67e52a91563810b64a2aecf06a06f3fcc83c50db0f56306ca5fd2c3f78e0ebeb1e07c6f6e8617853746ccb942bd0847706ec6c35137fcd7c0a52568b4b1ed452024c03d3998c00aed08f7b518cd6c7ccabb340443bcfd6085c1e68d3de2ae5972bd2ab4cc653194d8a909b9a82cd2081cbcc454f2182a32b40e6997c966aa3a02a43431ce87394daab99d63dca69e994504e6e1ad19acb79f250b678acd9e6a00ec9a4fc0d413fb31249ada3c3c08a47fc00025887e1d646cfd67c1790d439778a14f6174d18b087711ffb7fb7063f990361bf4423477018a7f561bd043070aca82a293b8586f635e4c26d541239a732cc8c7015a07dfea2f6ca1901fcdd4bbe944abe2585e9e4c817892278f6d51b3c631dd4ce15d68ceb4eaa1fa4460b8205325852ccb8171801ae733064a46288ce2d61fcb1c52b19d14be1dfa43ab47ed4bbe6450c07d1c79d2fd5904582697cb367bbd400d0a0a849a10e61debe7d59f63f7dc7fbe109a18609e931ec53a1fa22373a2c2b066ef75b08ef21755ce6b4075c1642bc30dbbba871842b35f35c2518f7ba6d952972c1472b76086e052c34108f4c5bf7b2d734dd8b396340d219c47c6187fb78020abd61f2e3c0d4a36b15a0f632932b2ca5f8d457b48d2f2a777e425225e16b647d6ba707978c9c35de6b1a76d25bfbcdc8f1fca844fe1afb70e7db97d3f52d1155c4f797ce34c582ca08cb0dc80eff42f1490813145acf4bc5fa317f9d850a5c3d8aed18dfff38b10b8b7bb91dcc8efedee67e944121af01f27e77a849f6a44764c0179f565f57d7ae3ba2795d57a5746691f9307b804aa22ff9fe2498c38a681bc9089ea893c806af34832836d7403d513a061021da19fa36ea103db5f3685e3c8d5cdf8a1b824413b3cb814834f4e7bc30428a4bf7b6b481f3d0d202620999940da4af23e97c69ba1a3a55a933acce3871dc138d20898a3fef15cb1ff15a7a2a38a45ea9251ed761acfffa3855dab0d3a889409d7e63c71eb7884b20ca62e54d780c6ce29411219697fc8d651d4f87a0dcb58043240c9de46a221713b63af1dc9c1d53e7ce3a39e609068d800c06cba526dca2ea5b68489e693ddf17d51571c1dcb45cfa9c80172e3c9ae7613eda29b32345d5bb737ef8d327ad16dfe3ac5b7c35bb501a6dbf54b278c17b122eb0fcd7db1246d670e3daaef6606f91167d47521cddcd5d6a02b34c857faddd43f78e9e26c4a98db94d8536b32c8da8876503441c41c028e8862dec93047968a828671a3328bb5942fa6c8ff87aa99f66f2f88bc7ae612d541eef9b863883f416e74c7d9b0a101fa840a95dc1dae00b33765537f7f6d2db93c2f34542958bd9574201d1343463273f806703676baaf6ce780b9656d6ec0465e87dbd3cf2fbea54f0879489a232f894878645c3e93dbae6defefeac27e17f3a89d488a451a7c5303823f48605d99932c17424d92661c927a35a14c758685bcae6815f7a850136f948198ad32e38576d2828a915a4456ac835b42225fa839ba4664076d9287c9ed652833e75b2d0bb33a27694262b284d736a17dbff6c0b017eefdac3b9fa303a12223c7f8df46f93f93142d145e3a77f2a2ea6030d2b7e01300122a7816efdb8537f304aa0835e05937da9a75621fece7829dd2b3c872013808cde992255326d6a8d3aab9caeed08fdb7feea440ca8930ab61e35335215c5979a38b78b23ee8a2c51ac3771ad3f5b7df12b14ef5d4488aa92aec7eadc3f71a50130d8d11982a9728d11837ec052a8563fe31042e4e96df33a1e1cf8d3f5bfe11c9dc693ecdc6b5af1e225d6080c1ddd4d96e1028c4024f64baf169005bf52e7f1c3d0ad00aa80d39401e1b8bf499c0cc806e0812fde576941ef870d75d71f5bc4201c083834596d2de50f16bdd8b4e7a76a8b4c668e9675ea3128b774adfd207a1d038876bb36004ed9b5b07e39aeacc7f74533d2302b54c5bbe00877c97b4db6e6e76477161218b78469babf0b2a50ca230dfc5b3878944288bc6d3742981740946c80a0277d45773bd5e9ff007937a439638f8afc34a919fda47ada30c755be1c71ddd12e48a0037d2c473067880a944e0dd9fa1c3b2ca8f7769c90ffe36277c9d0c609a70f63caf34a1268f0689b1942cab087a1aebc7a102194382698b0243623b9b95c4086f4d3a70501cac9180eb38e396e71e40029cd18af6f98903837070fb93ee80d7a5c45323c4cc0fc02f0f9ef2e843e21d0e190ccd5e4e1ffe2ddcfabc591323ac3fcd4cbf20616e68cf8e3b51632f42b7f5980841b9281329d6eea480c87bfcc295ecad835bbc620c2b88779d0825c2326d0211439138c6db8f10ea2921d9e21cae4be5c2d6824b05e326a1fedc034bd6cb5372fc10ddfd94bb4c439028b410f6d2418d191305497b316648423c280db7ab448e5dbd556a8394657c9e36c2e122a7809041717a86724657b658fe3dd8c2e86bf436494fb322a60b224d79f323c0fd5ecaed831e4f1145795e4dbf3d3b1e61d02b66f2ca2a8465c88b06b90ac4571e2d0178652ad869697d413e11992b9b417a2ae8747fb18e0070f1ba6722ed7db66716824b39ba6dd7c96058167d5fadab75dc198e8356920260f328642674173922ab8e1def585fe743778ce0ef4fdffe913bfeec15e525bce5bdd29de1b70d7e7cad1dec86dfe4bb077782fe3204bd10f48685e58e509c88e134cdc5a97231db1efb09ecb467e7a9cf3ccef737643df4ecbebc603408bbfd555bd00af6328e6a42e3bd367f89881271b5b02d23812e1d730eaf9f08bf0885a223745d45212dc9a1d79139a3becb819b8acdacb1f8098acf9b902faadb380b623d916dfcb482b92b4c8acde37ae47b1e8f8e0baa1c779f65324bffbc6ee1df0b541acf451812f0820acd170a49d690f1932192861fc7452bb2602d1ca4e70f93bd921eefd08f6baceb13a0d23e70043191f4853e3a1f4e9e61b23505f06d20d4d7339d7d6a219f96381f0c68ff6a216c79ecdbf0a5963a21c44dcf1e7981669222c81d8a61c0e02ed31470b32068d92e56a461bc6bb9d0bad7a6c7ce405588ef84ecc0569f01a0756e1dddea24832acb2b8b580d4e35b17b3b12fe6409b8e3e2f8ed140ed16556c469427a718cea3a9adb80d448daedba22cbbc8621bdd470bacd6ff563e4af9c41e081c6dfe171efb88e84047aa08e4ed7adf51b80c1318712634b4891441cf3d5ca4d508ce337dd04f8febf3d55f5bee944626834029510cfc25427344ba15046ab513477164583b1cbba279508ad3204b196bb3b205cfd7587502afed13ba7c80199c26c91d22069b02f50399f2d5604c1ad7b02ad5ea9f6ef12522605f50647c01ddefb3f48129e9b62e437454c86f7e2842886cfd615299f5a9509c223f4cd77e4bfd440d44fad60fbb9438d1999b33cd6381086f67a0abe35be6a0529cc2ca308e9a6da6ba81734ee3974209b9670d671151244f2862d5af507c5ba9f1de208dbfdd7cfdc82d877a6905780f0aa679137f85645a7fc75cf2f420bc35c6eb21fa1311a6ab8468bce675b3e966f29ed10edbd688f8f56c6f447d6d50d4611492f2b75401fe1da6c78a510bdb49a4d665a3460870a97efa538a2bd452ccbfd46d7e0d65297c7147946d54d008074b5b46455fa6085adf17fd59132c1350b7838d22451ac2fc36f098ddcc7399d80e29a44393c5042591555914d811a7c8ce82676bc2740bcbe9c2d99f522b54ed4aa9e026ac1629fe362a48ef76c9d6695b63e6cb9a5062291fe184bee5a63040265aed59fd5397d92ac850de4cb37ce2b1c21217c392d6051b5683390e38496d04db1ef00b467ffb5b361722d1b45555e29f463ad0470c0a2ee8d0e373367f761d2bad6545b7bcba0606d09a7a5eb8f447c6bea29124c260c61b39f00178aae299fece2c84589275743864787e5105653dae20b9b276e480c58ca3ee841dfdd9640ae1ee77f56400efbe65687782823e22f72bec8152e9825b942ce93b99d659897fd5875b9c04b9b3001bc1532b91136a4c093bf72a3f2b74e9d1b1d2e99bcf525679e1eaeb06b3788e1b2a7c08ba36a4533f0faa7720823e84fb4ef39d7a1a0cd00b2a544277f1765c762ae91554e6000f05d53c0600723b8a9c4a7d63cb6038a818e825b2018daa8036d93d316f1cef91ed2d53cab2c08f84a720e4594ba0202ba1810e06c1ae941348b0f28ee006033185e5a2a3deed8ef7ad00b06a0a10b522e1429dee7943d87e013cc575076cf0b39ab3efecb136e235beebda54c29052908ed071408312ec671b1728a6ce6538586a566e366f774bf619b1b1ca55c839fe31d9b2930acee31f7180c16ce633375c36ff08a74c34e18ae99716d76b01d96c8b8b9025ccf025f016058fb1b7cdb8d9f9c492906b6077732e733b7d3bc1d38d8fa30df85d491e8144cd848f4c9df92482f356adc3e8d00b82300eee8b11b3123aa1cd1a93ea263b18ec53a16eb58ccf3462cccf738ca7594e3381b19f006163be38e373eaea9363bd8fa3645b0a2ae32019a6ac98a0a0166d5aecd44b715a3071b894ef5ab99e828ae5b3184c57147e14c3fe9470f86331d0e7979f05f1e0cebb315f2767924c4888baff99a91a1ef911f79cb0b068bbd71c71b77c68b6966be69668642ec934a3676b05e925a56f6c46ae8398e472ccc25971b99a8ad9b2d592265c8e8c17009f8a37046f4cc5a32fa1991f5be93fd84313c0eb6a882872d54604b02ab43cf71cc027b720df2a87fe6d298f7ccccb0cb1e1775cc6c1d75accb9e1a6ec0452e16eb3a23aac49cc62bfa2531bee0a257d3085e511fb48fae0a15d77970bd97b040f7f0d9cd6ece89c335fea3026e9115b8c663b1900380062292244918149e58cf141995d90f0ab6e2b8330395eb64ae82c6a1a2a07345ca93c938e0011064a08b31ba9873d29c99d2009ffcc3a84960c228035ce34f3a4986b288a2589982e7c26cf15db632850f2e5b9982bcfc504c51def12b40bb6c4507b318036696ad2c01bb635de275ade8e076d98a0e6c5fdc26674a88bb7d2149928441e189f54c91516119173b5fe45c6c871ce7a6f6415b32e0d513bc0abd7fd8851d9bb4a5176d4832664b184ca80042879c51190fc904116050c60d581e9af17154c8645dec198fd182e2030f967f2bd182ebdf3d6c4507ad9bc2752b4b0481a2d08ea37ae7ba3f912e0ccb3fd6e647752b03ae58bf7304845d1ce2a290245892536c450b24904d1c41072cb6b05c034b4cd184144a34014410cb99084c88c2c605185dbad080e52424a434b141ab0a278860b91021ec7cb6520ad14dda9024499224697f5e70b0b0964e93d70e099b279f39b0debfb9ce94076c28843b82b06c9b2cc503b1308f092be3c97376334fb699a2f82f1235ed9c55e2d253976ba6f8a7d56af1b026ad15c96cf54feee9d31f3b9fc60acb85156456cb0ad16265ae0b2f3fd6063bb6cbe572b95c56066ee9a1a5e37aed3c8141e189cd664182cc144edf98ebc2413c8828721cc7e1b440bf3b8ae014455e912ee55add450bcb3db5d199ea7dfdea8560177a4bc7123798d3ce7ed74de07bf02710fa9169a6139966bab7cf2cd1cb8bdef35e88cecb8b62f8de7e04beb7e109a49ce005fcef23107a5278025138d38533358ce17bf0877ce14c07fe901f7d289ce96cbeb027fe6958d70aeac2d6729bd9664b70cee6231760781a7777d278821b64863f725ce4429cdbec76bbdd6eb75ba5c1f31730fa8a5e82386eb68964ead40f3f3159010210e9cee72e9947974a33d5a49f9ccce2967845e295836143e10a57d8d15fd7bfbba4772c793b4c0d960b890c2979ce20215df8e3d5d076933411f17d123ff9ebdc2ef352922c3b920bbb04722db6923a92a0b2dcc2e64695f3030621438814e1eeea7d39dd07e11af1e40233131b82eeb2b45ed50a2c0d39ce3335eb33792b28a2c51a41c0593514e7890141d83a4fe28b5e13dd4cab4dee5e008be69c3ea23294312ea0e32875146d9f8e4d1a44b391b08b3f2e967ec0c3c3c3c3c3471cd5df3aadc3adc3adc3defe63eb54fba3d871220f0ff8448d5877fb5a28cee1ed784f3c9807c5e389e1f09e74b799aaa1d36837f7991646d1da2bbca2ae45a7ba2538adbb39cd69ddcd691c077b22f21e8fc2354cec48a96da63a56f55cde4bf4e257f8e45c9062dc9c4643afd575717147cbceff5a1349ad314eec4c358be5b56073d6dd28adbb9bd76a1fe09ca90ea2e1cd51a596474e97079bdd6d7a95eee12f8ad1c18e4e739a16dbcf3ded9d183825d67e9e71b9e38d3b3a8d673138ab86a5eee635aee1824ffe1ee45ff4ed6e5606b624e3a20e28ecb4f43acd695e5786f7a4bb718d0b9c12e7890bd5151b2cba2574b7ae0ccf07ef4977eb6edd4d14c5dbad468d2c93c32ad6dd6b1391f592a67db88b86574e4323a2e19ad21d69baaea3b1aa17bed8180206ba47e67fe008031d99610818e8f67748c2a1d634018212050ba278a2030660904515648c71832936d6ac3560e6c993a394ebd0e52a5ecd55a7fa863ef987423121733ce774b9e8fde08fbe8e4caf9a2951686be8478e70356058958af3e69cde4c3aca34b58b8138c0a9d28abe0d37618cebbce5864e31131ab40faf5dedf2e6f4bc393b274911e4a597322ab39f2a586a40b6209b91979199aad34692b6d6aeab55364fd54ba7e2281a01eeca6fc86b3bb8d886bd30088e423f0afd280c9935430278e901b8c28aa697fd258ce87d5c742f3d8bfd3b110084ed3e1c0189f1c24e4014cef4041ad6a190697af1285ebacc7b3cd6028f729d8a8bde80fe107090ec76e8d5965d6aa024808852841e7680842054f77da7c9fab8e8329fb1c04bb64de19a182fece765df7e60bdd5c5c51d3bd89111aef12fd956966559fadc28cb20180feaeeeeeeeeee6e18ec457298858157ce711c85a1c74e182c96fed8500a30c5e2b86cc506afdb9d4e7d89303161798af3e42bbcecd8b319b3a53f4ddce8eb6cbeb0850e6794d8119bdb3cdc30178bb07f7b00d9b1673ba4d8db2d5ea1805120b99d302702bfa40c3ad553f0c9ffa341c3f411d786efd0d1aff02b7eae80b9a2c77677649f1f2eba2cc565e838e10b2270d1628a3158fefdc32986828c18124c80f8e1062960f9378d5300c8011742fc0801042f70c0291e420d4b2cf183114cf081e55f4489d96c369bcd665e9bb403cc41101c4017962fcf82cc04cc28a594826f7b2343b4ca36ec833d4675a1aa7bf883d5d45a82c8b0df83398eb09fbbe7b8f282276c80822c3360c2721a709004246e599451523902cbf98a2932b82108371082a70b96d360841842f8647162832a64c0faf6a1fa2657ab8e0274f0abf5f3264122db4c894224f513797b8f482f572c94eba33002e0f3bc41664af4206852220a421244922449c2e8e755f7afd6afc9286e4bc11d05afbc2100a1af203f58ad5f28f4d5ca9e909f59572a9b0d46c30898eeeeeeeeee6e2f695e3434344ec3711cc7d1542600af7674b1637b8feaff9ee4244c04daa8ba47a00949917e62b2e1ff994dd92ce76caa66382e7adeac7f7c54b3673c632cb3d96c369b5517f15044109a87878727d653caa8f8fc54a1d52677bf6c18fc2bd651ada0b5a25229f4ff8922cf0e2b6cc74329c7d1cadccd3997d4261109a49c46731a8da33ad535f4c93f148a8949210cd99b73a2004ab7f8e7aba185021f1e9456cbf33c954ad5f9cb1598178d36bbbb7ed36a40b6202edd2587bbbace396538da5d6b57dab5d62eb36933150a6be872d1683382b0a4510dc7196ead5e6d2d9ad6b4a685dd9cf5bd3ae79cb372e1cbb372f5b8d62a03ba647845a2d11c65ba5ebbe015df9a2de804ec8304f572415adc2fe115f71ef4a5173e0e9c118415dd51a6728d11b6d26a364e958009521c21bbc1c9962b9c1a7fd0c30f4be8c008b315b058b8c235deb4246e27c12bfa3f2cd382766509ede3fb8a0430485d10a07b8c6aedefeb5a497deaaf010001805cd34f4d23ae691a0de645e307986558137af69cdcd269f2da2161a14fc4811cc77134640af2d1f047ce0718d58dc0c80dea755c4ef53a8e6fb8ad63df0db36777d7d269f2da2161ddcde9ce3173b4e38e72d77537642a53afeb09d67933695018827bfa3355bb07c2abbe393ea66129a4a0e98c04dd5a95413f899c74b7c7715e8374ce39a5587f51774aa9eb00a1d775fdd779ae57932a6c7b1ef53c8f022efab34cc52befa3dcd0a1508c8b09d7b817b6ab6f37572bd7fd18681dcf548449bb3a06dd4306305043fba83a5ce39ae7d5ea79b3542a955c2e6b95f8a9b5562b537a1a1e3637aa9c100b15c0b466b3d9eca70aad06a42588cbcd715c9477e7735dc769e9d9fc29b0a0cd9ab0ddf7ac3e11214cd89f7abb95bac53c7d681f1ec72921c2868898125ed199a281e59ed7363636302df08aa86c954ad5f39bd2aeeb3a2c78d5df3fc1f6416df0247885c21571475832ae2b614e938e8bc2ed424f823ae1dd2d2804d5d2515c67f5a756a9586aad02555b0d6ae6ee7eb9629cb09d125ce3ef3aa67f5df7d9885d2dcb5a7eb5ac6595f14a74fd2b1547cdbe5493b16dc045daaee9aa2513769459a1073b02527359542c4b6683e689a6508457a7420eacef08c2584bcfc60ac3b28bb449d7b55a96774ad919e9e17abbca72a670fce44fa5fad82ab59c9556e57a59a21004fa3cecd210a594e342d7f9d0f32883851ca774899fe887bee98b6272b0a3b7c67a69cb51b489a3aabb8e29c8e8e938021aaeffa8fb6a6da9f42f8a735451d2a57eeb0bdfcfb8f07d7f6de11b93745e358dde4da3e7f8878b34888bd4bb48b886a2d8bbb4455f7cfae08796b848fdb917d17e8542d2bd498ee3be5f21add5daefeb8b3efa95d6af2faaf533f58b0b29fdcee42d9207ea94bef3d03efce9cfc0d21dfa4d528e721cc771fde2137d4aebeb8adb2f879198b4749abc7648984c9653522a823467a640d046cb3aac7b780bace88ee00a6cbf0c13d52b6e2cae8014344d93770f9b91eac47f5c2e97cb535fcb9d84418912eb2965200882fc5590577e5d4912171b09d7307f1f738c13d69980ac2db67ff4a41f1be67267810f9cd07ff646162c5eb00f0a54205e755fa4d6b2dad832fa28ce09f6b1a47bc848a386cd099bb019f2d8d15d5ef0c97f4b6d4203718dbfab815c2e97bbfafb759adc362551e262cb900424b5da0dc042679125dcc5e57291935cd0dddcec3173adb3566666ae5ead959999ebd7cacc5dbbbb7a5e37e9d79c5fa8bffa59173d8f3daf8cd9cfe46e142ccbe4778ae873bcc99912853ee4370c0de0157d0774aa7d20d987641f927dc82cb04c23ece00b26ac19be2cc0608225fa2505b8c29aa1c360899e65fd9dc7715e751e92ec42fadc9b9a3561c0c2965cc32c1b851d22c4451d48b03f1cd55cd88d80d00b03fb8442b487292493a1844bc02bfafd621fc81e96681fa12924190addd8fc93e414af5aadfdb799b3d6d27f0cce6a970e9639da81e6e1a71ad64f0c2f411a771a9a9e3fd24c1a5e913c8f526f06cce7380c163b73471a1adfe2653de608d4ccf5772daf1c7c8bd464f97b149debf3ba6fc1ab115bf181cb555dff1b171e373814d777e039b8ee77f6348f6a9e5c85679fb1f1ec283c0dfb303de38dccef9eb986b88d50f9ab10de08c79a42385a1be1e83ba51a6107b51653117cf2b7cd9e826de1d8588c625fb94ddeae4d9e28515c0aa73cc027ff28b628366f9ee67e1e1e1e1e1e9e1b6da9b0b25aadec22b356982b2ce5b8fa7294b3bc489ffc6d4f3aca8e18580d7007f803456e49708eeb383a31f085186514e9383a71443380418912eb2965af175211d0c19a4d15766c174e8f9e67ea79a644479cbb5cae6a80aaba07ce0a9cc2009ffc3f1c1c1c4abd5abd5ac4d5a3d07d7ed553e1f81d552e572805227f36f18d17587a9bc651bccaf11ca704c0a7fe156ea06eff48a37f1cdd7e510e4e49807fac1911709b4d7d6dc47a88f588866bfa6decd8912bf014e015572fec16f7148d6e2b2f80e2760d565be181767b0babbf5b3aaedea1d38308b1c2c3cf25c2f3f4d3a78e2698fcfa06c21d38584f8cd98a052d255cc32b0e9966868844e192ee072f0062cd3095c092321f0c891431324f4ab033879903affa77fa455261c7a63e27df296c7f8ef3e862670eaf9df6d1d7ffc98eead53de702035d0a23866fa96334a1e4402f50e675e345f3e2f1ea5e3306630373b7749abc764898115bb5555bb5555bb5d569a43527db6c22db5e985274c0e209f74d9788ee7934812e6c49a13f8394f973d2e6388ef3eed8ae8a824b7f06b65e1a562036885ae896a185162ce5e8748ee39ae33844f2bfce02901648330442da41e92b73e4f86c5f507ff9429a2f93447308c18eae13861d69f7f2a4b05330cf3feab8fca3012ec384467c74c8dd63b4e14b08f67b31cd70ff423f47183694430876e4c821a47f0997c83ce9a969c8cbdb70090d122c1a24587d5958ecf895aedbb4566b39aeec628e9af103db97ea5c7f71e574b938fa8b3d4a23d9be20d15393b73821b8213824381bbc3ca9e3ac8959a41a861dbfda71a2157ee051c52ee184c881075cb06668207c60b123c0fb155c606b53545b81b41dade477a4d779f91c673d61c7aed56af7e315f5968bb66f3653f6fd3fda4cc17c41df2dd4ea44ae46145238433fe6496fc3191acec410f3a41f02c5f33cafb4e90106178eb5ceb0c32e79b499fe98a7814532cdb4fd216fc325523a1c623f265c42e3ed2f8979d2d3c08231cdcc9ff134b0609e0696888629473652f2d2ac3061bba209e69081a51ffaf12b85e8d08831b1a4b0343ee63b8710968663f770bf8446f8f25c3804e667844b62c231098579d15347390a7c5117ce11c7d9ba8e9be176a0963b26e90745b5be5cc7bae81e3314bd284481c7d266eec9a838eac751551c45438e143271a48b3a42a150e55be88e5fc9a3093b529fbe5f972dec487d3cd13c826764a6bc25fae4ef795ec935eef5b8d92671e44c7da54ff2fa0fa0b4ae830abd92593d76f4170dbf92a503d8965a13184bf481d4f4955f37b2e1831dbdd2093b803b7a25a7c335267f828a2f622c161796eff8952ba6304a5292fa80fa501f0a06ed82fa7061bde5af1d5ecdeaf9eb333253df12fd51f1f1c0876bfcd961fa3f2d8e1abdf2b339ca3d4580a08fca37f3d4cc57e5c3f2017d4174b6577a329f6e8b0f109fcffb3e5ac391fa1471916b9fec9bf97f3f336ccc8fa55b63a25333c2cf2bbd32e6adc094acb0d68bc23fdbe8afaf9c27eae3c4d22af4e7d3427d585aecf8952deb937fad6309c53daa079c6a59fbe827ddc37128fd80fb6f04c44110e41107fa244d77d2c3f5927fe5577ee5577ee55772ad7ed2ea27df570a029d00574c994c2693cd7c7e685880727450df2677f7ebf59ae56ba6707070705834472cd09918480ffe90971fbd68d67831559b841d6b87831ba5d28ea50fa5d8f1c329763cf2fd0b06f8c2efbff0c80c3f7084816e0d4350c31b173dbc811d6d60b0d81a77c4b93b463b62b67f9a12c0352ec5ca86a48007414ca101114a54c15ff8400930c8a2a3041917168e0d0b6cbfa86553870a3b9bb46cf6aca9904e70ca6b415890a1023278701c15700ac9c4e1fadce1fa040287577e7932331db13075b866da00041953a7052d6bdb9c3373f2506e347ff2cc283a2de301afe613d1571ad63e682aea4c888ba3c619ab26eb6207718d068a097d75c646f591cc94c7a088202348ae79b56e4ec85e3219179d843769d9d4992ae0a9c32bae9f85b1e1e4f5f3ea57cb5a2693c96432990c859848d4dc75dc3be5b89fdf755dd7755c679acec5f2e47eef19dafd061a41655996b28ecacc53393a2c393a5b17e45ab41cf1194158fa236bd9627320c18ed33627adff4889cb8c202c7747d6e21d294b4799da87f3a023c213b507f607d7b7b8fe3447b06357ce5a6dc9c5d69f1abb4e8174a5d76a39bd236b4961c605ef68c4b063c3688c60bbda3032366dbcc08eb455a209c2ce14b3f8722c8740cbf6ed2b8fa33ae8d63f9bfdfcd068cd001fdbe23c31c08a38819c79f209a89e9abccbf5588f0140b05c485d54c745ffeff288b69260ffce10b91470d15f2e09075a0e266871c30b9c5002093ab00f5cf00452095340010209565b236c5776b26ed6fd50145026b4d595b4d5955dd9955dd995654903c60a917f4fffe9eeeecda30776a4332ead8acfac0e71d1bbb27bd8632dbbbffb3bd623a3d3dd89700dfbeb089d56bf5cf49c2654da67e6e27bce0c6c901faf030bebdfdf849936463f3fb85c2ed76b8784418992639653565af0452925515e75385d1caf269379c3744d5737bd87c162fb5dbc22d9d8018ba72a90d5e2b3cb7591eadcd94dd74cb56d9efc6bb5b6546a9bab6dce2bef535e8d50e2fa10786c65d838d54e3ce8c6c06f5cc4f78dd8445574e4597c085970d466ac08610a1d794fc99deb4f6f16aef1e9ca329dcc1eee8cc1f5de67e928bf291a3f3355c37f4689cd9e29fbaaf71af54b09d7c44ffe3d629487527a62552a1b1b51fc2f9554b6d6896232e1d4e8fd134d57e8471ba330017cf257a954d335e79cd3355d1446a38b0d2acbb2945199fd54c15203b205f19ccd82dcdccc6e663737b39bd90dd7f8773c79def06a668674fd7ad751daf58b543a76c4196f6ecb8c5af89b1ef16a5effde01af98e015fb8f4cfd5cf77fbcaadfef8c127dffecaeec8ae5fee31a304ce2a28ba127dc26c38e37b7bb5c6ed249e7fc1b16e6c70c61e7f7d3a7d733cdf47bcfb7cb990e5b5012a57b60766ccb74f4c07e6517226961f156f53a8e56afe3a84d59daa0182fc43b6747bb8e1bb9e0573c5dfa04bf390882ee2008f28a4429e5383a0262430d2c0b184573601d38f50deb1fda452905418e4e9c6f08d75b3a4d5e3b242c280889e5da6d504707c9243577bf5f01a3ba4f35d93e3a8aeee1a4eb50c31521f96afb7862268453ccea676e03dcb05307089fe3f4cec6825f584220d1cd2d9d26af1d1256822f07418ee37890dd532333f56fb385f54e23144978c4c5c7e28a8cab2d7dac2ee1654bdbcf76923e61ed7dfd48d3355d8e22c075eefa4fd374cdd76ce2e293fe222ed3c52566ead4eee8b5ebb6d92be5a89e1eef99f53c71ebb95f68eb3cd910c1328b5963dfac919b1b2f6ccc1d6f84e89c5af6a28bae494e57473917a574ba9af4cd7419b1c5c86c93723a734debb8e833a5e4e6b71e58efeb8f252554f8bbe6e9c82bb199c28e5c43cdeede499ee7cdce864f117020de9a83e3a2dff930596c035129a181edd6121d42d8b17473958ecd66b30571b9b9bbbb7beff8b1284f0b198ce298c0a82778135fc15540dbfc86be2f04825f68ce9e3e49f4dbd4e068047ea1090379e6270a8942df179a52cc565f8df63343a12912cd50a84733e44fc8cfcf0f476db6d88b0dedc254a954f506112491c163ae21c1bc1e8efe32cc82ee68ef14457ae7db18e1cec749396b0661a673e7a42109e6ed9f5f9fe0e1e1e189f594322a3e3f556835511445512cbd45bd1367aa088ba2385914a78d4d3fe12eb41a6cac0e630b1e2b1045511445f1fb3cefeb6c2461e915713cc4203f72a6eaa64813ecd83ca315c5761e171d4a173b368fe8cf2354c2864fb0f379ccec7cea85388460bdb78184fdfec61d676858bae01dc590e84eefef47517414af3a4a0da75a0a9ffc69685450e18ee2d83ca378473bb2d8224ab6d86f4cc2351416769e7ca1504fe911b966fae0840d561ee08533de77cff70b69462f7c2e7ce1cf789c69c6bb241cfe848220b47480e28a1d72e0dfa41b589e9ba53c3c3c3c324ce69cfc53054b0dc816c4dd3932994c2693756ffa1c225dd7751d9672a66a585d6613fa2e6cd6c74cc841074ab096d4d046c1aa4fc33703c4fa421aba9c08f0a7b552ce4c31ab5a90244beeba4475fff10875aa43a15a56ae0a73d73177ddd5da755dd7b912583a53975cc33387255a092db074d965975d7754492966cad4a0ebbad9713d6544a2069fc6c516c44b4513148563902bfa0018c18eb534aa6ee845d3047e8fc41b1dca6540be37de45256cfd6fac22d311d5f53e64a22e76ff99ea68ef0c293589574441ced45d1e01f9ae7571d6fa0376a7c44badb55a99d2d3f0b0b951e57094723632a0dbc494d13dd3d2977123537a1ef54596050fb09e3d272f69e9b85e365f58eebbefaf3cda6b64eed862c79bd15e474085a28a1b224ca3d168446034e86ee9b85e3b4f6050786293d9facb96b5da5ab35cedba1c7719af484a7210d002a05b698e66d84a8f93cb567240bb7304a4a5b84de552181f6c901f56d80d006dc0df047cf267626ba8d9a9c4666183fc70514713767c2cae34df948876e0041cb6e5a9afe57214bf3c95c33eb1502c8f8d6263b66c66994c2693d9ccb2566b4ba56fda5f42e22554bb2157e88ea2c837645d3b9e60472bcb11791ea55e8c8e15f1f0b1fda2390222dee92f7052ec685d2f17dbb6fada96d5b12d97d571f147db729f4d49760136b05c18649e20d02cee453d7ae1a54bb3b89675d99725735e92b8e37747dbb22e0facaf63fbdad63ce1a05284c5e1836366816c8738a8e4d8d6b5ad966dd9966db56c0b07e90930f0d975ddece6641e8e1283c43061bbef172f1796a6d8ee4b944701a8d949c352896b56ba99bbc9b248113f79adc8c7351cc715e115a9f6c08ecc25c7cad82df66daab6050ca2b460881a8d0626c8b081105b0c91a5ca1596ff1c25e11a7f929cf5ce4b6511a594069ffc5f76f040860687a30ad7abc8a8542a95aa6b62c7f2f7d9cc58a6aafd39e14592240983c213ebf129397cf673833367fdbe3a67cc4f5184200267c6357eea7273910bd7748f81d36424d9c02ca79b721ced5602658b1da76d56ce204ff52de5adb965da52ee6a2d3dc6fc82512dc6b4054d5b07b5960e2293907c9b21298f944a662a67de64b21be9533ac84ffe6410d9be811c994c2693c94892da29a2d70fb67f8a30e866b63a6e9672dd7116a4fcdc1264547c7eaad06a2f1a32ad99a221c3332306c67e37f1d40db0857a21f9c0e91ea2f7bf408848f7c0c2582815318b44ee23165ede45df8c902726b4e17c217de8ab383944dac78969a224444c33f24fadb55a99d2d3f0b0b951e50460c7d6b7f3df997b327be5b88af3256ecedbe10894e478b536aaca5e0d5d8341e189f54c915199fd70f79256c249182fd60c740b142c29dc8f2fe678c21ac512e538daa46867d63a3e96b60e4c16cbe980624706ea00a3682a48fb289245e9fa738d81dcfd6f9b383addddbde3689022383592ecda0c5c2e97ebb543c2a04489f594326ee2983135ab4d7e719898d5753870b8542e95bd33a625932ce28735431b51030a62cd3c8e1416d64c28a5baa3622ecc9704c91dfd3491c0bb1f18b530fa50c7cdf9958184fac19817206f63073bc3fba982a506805781c4cc3335f3a3eaaaaecac63cf70d93c42f0c07d3a669423d37df7b1ca614667c9b647ea66c0a5e0a29cc48c174a474674880fb6d8463a9bf148eb646786998644c3f4c416260ac090026154c36f3d47fc3d41306927fdfe098c4bb1dca7cab21d8b07e8723c8b1d0350c1429438c2fe6f4bc396d780d1c58d0cdb59f5732f415010bfdf3f93dc035ce4c29b38d0c78846b40c027ff318cc8c0ce74c857044de507d7853f988a3395ffe117868b1dd906cad86ed8686c3c6c466a0d6c4b1445d1e64695f303062143881411632800a7aa0dafbad9730043d8bfe34beda5f6627b097ab971e8bd00f5bb704cc0f50e4776e286cc2daf87d8ebf57a914f603c517aca29b259adb644a3894a9b2f5122b3566b5f9ca97e4d9403b9e85e1616fd6bbd71b16540ce4bf5131a4ff58e9bd8473bd121009f893d8b8f84804f4d23973176a3dca8240d9915bd6433230200400153150000200c0a0583e1905044281bd7181f14800c668c4a7a5c3e1a08a324c87120851032c618000000001001219ad23670b701ec86fa6a727a9371bbee565fb5fd9692783447a53aeaa9316fb9ba45e79b747676e3c94af5f5960be67060ff2d17493a521917bb5295593afa40bc54ef45f717e07e5ffe643274e3d70cf4bcede4b0718b6bb0c28502308e6c0b0ad82343ddf338ca9c572c3dec87bb9f13785790b42693dfd761205b69d90f2e66e4cd97e863aa0ffad9c388a63035e5de7921fa01ad416881e6592c3ee40b6f662e8bc4dab612e8c446ee555db8215a07b74538838a0a54a63f0bdd89f5b59c422cf2d22be3020e9eeed8860f23e341747379405f0da0b96de3130f29eee6691a4b4dcf26b4e588c58362559601a281fa173238e9a03585b96441f3e4ce8b5f2e5fe138e6cc84e22b44ece364841a61add51be0ae9d6a958ddf0ef23f3b673f7eb5a85fe65fbf4ff688b668d7f25b1628982f4da3bd1e45bf85dac660af069abbaae1a4c45aa8cd71dd3c3b76d5c63a16e88ce17b79b6a2d06898cc847962314acd9212cd4376e84fe2a0eb7235b62b85203b270265141f5ad1c58eac9aa284d332fbd9d6eb1e28f729166bda8234883ad9be5143f27c85ca16423d3492f23c73182d17b8eec91babec5b95b5010f83776d11199b55ac282287164b0805bcbc2b0d9e185688b75816c2ee235b2b814e6155148b9403d367a43f61059bc1edbe7f0e7ddd647fde114d50747341dc4ed43cacf1800571ecbc0247721c4af9565b6dfa6fda5b3c573cf138c7c3b81ec505f1e8fbf7f285fc89f720eeca962247c8f394a96713674054744f4d3cdf0483933b7af4bcf7339ca174a08d1d2705fbda532eba82ddb3802db628bfaa08b78af910159a1661abb2b8342e516279f60ffb5ad5fdbd3554130daec7ba80b405aaabec3d8bf7fa002ba9dc68808277663ff5162dfd0fd2743898a2fa8de7dd3f31a535de0dea88f76b48808c34c95b26b49b1cf6058ce1172431eb301bd9badb6b0ed8179eef71737dfed863228e159e6cf0bbec91a865351a7d80055634d8afeb65828a2f1f34c8a9c47d093c61068ba56039e2e3d1a151614075243337b1989a24b8ef7f3fca115a52add1546cb621c746f34c1846fd5492e7942e5ba403a175fa2fa473a4b6c8eaebf20a695d525fd6791a589ef9741bc7f4b02b327397f6ec3eb6cad45049f5cfac0b6e2a6368a0ffd45c45220e3497ff8a38cf091d81a11bd057aed7832ed7d760a1f3e65ab070f3ca470658cc1b89b599bfea2012e21229d35d548cec494cfb54ad93d4bc0df2c4de4c999ef9a4c9893deb79e365a5794f3a122a8c62f3d70a6b5a9b2a6ab5534d22814d22ec757fb94926d6115a5ac909d4b4e69998eb9645d2ee8724086b06beae320e2e11027b3d7b4b4378b6a55df5167fbc3bcf65b9ff51ce1dd66795ecd9ff6aaca2f33940cd0e6f920958c32eff06a53e8bcbba8d0919d361c4e86419279611a2edf92e4f21d4cbca8cef6eada62f1928ca5307aa870a1ac973f881ce36eaf5ec9420142b3372b25d391a96526d3d8ce9fa59a42682fbda48db447b99087e5c10b05bc8394917f98b26d86b182d60f53de00acd7ccb8b6752f3c0ca0a8ffc9bb6668ddc25fb01bc1babddef8c308d5a1f4e0f932d7f3cc3229f97fd1aabdda2d888b67288ead630d2425dd6e7a8c8a108caac0e38a938c42d36d31aa361f5c117b800fb97afa0eb9b18f6726c745c01a6f2017865e743aebab90e8068a084fba7ed61bd458425e93037c6f0efcfc4146e1d1e5e1365381f3032ae87240d93ce91fcc76db04eb14b1a35c0014166029df32ea7f57e721b14b1108bec492c00df80b763d62863aa87e57d88243fa5eaadbd3449dcb419ed68edeb5e115e351f025df2c501f5a4caf06a199bc2a0181408aa4f608f9eb60650e2b2743f9e13c81acbee16d6e8028b651c2017793e70e793f657ca08a2f9a98dd17f92782434883347fd3e8106db20f973eb6fe2db4534fcb2444e2e23aff5e3c19e3752131b9cbd1ddd41a07b8d3084de5e209078911d67f9cc3e24289c6d5ca22985c96fb7de9d27480c34175b2b07226a0e8274349b89b715a8d11d64bb625174ac36acbd2d6aef5743060fc9813d4ad021aa5af1d782a0fa98ba43d8626ebf69bf8e3198e7453213ab593f79b50395259a358b090ea3e68f88ad744bb17598fde0a9795c50350e8056fc12a54ca86da41dbc2b4715b3d2039f85f961dc3f7943b34fed125661704b50b3a621d110614c5344ddbdc70ed894a6aff7e84b8d7831f818f69281e56fee9dee81c2ef65ecb97d3aa4fdcfd9734226cbd3cef572e06fa0f29f9c3f49e617d695e9ae08d2a8bb9779466d93e344e324bb53bb961e830e944fbadc816ca17b9ff76478f4778cc6d4c1002ef414d328461b2a00db74ac3f0da3c4295673a243857d6645c7e60f3742f3263b7a335b1c71c151412c9601e433173aa85c60235a51bb93a27263391ae3631622c7a4a73a96f749bf2e25afa564f7b5cdc1330326616c6b8c66e26ed90d798003962f44f6187a4c7f1a29aeb4a3b8761b741fa07164e954ae75f0871b43648932aa63588f4c6301b2b36f8060ca509b5dec0972adcfe7dc15eab5df3ac4147a50f44d90fcfc26579623f03f53351ca8cb6efa04c6349a2adb30e14014310de28dfcfb794af4a2bb4981187e74456ebc10b2161969299dd8dd22dc2ba8ddb5a258f5c0edcd18bc8652ab92d95d3616eb7773d35274611d32010b3e3806e49f84659bd72ade83cc2d9c94a0624c138d03cc25f8dca72d819c95c7c31353a01d178a2c0dc80e8874da8e85eb02e59eea32148b9e47a12b292e6a9dc270b2217e9bba91e3dc8925bb0f4ec079ea3698c503bbaacf893efc03a451eeaf5bc1d7e51d96057cd75eea17559b18e6ad917b37fd634f06b79fd7c0b90a1a9fc259e5a42e0b8ec304187e55dcd831242f042a4cb31e299cbff88e80cc39274537eb0c560f0931b21cecfffb9e4a0ac73ffbe841712f926c7c4f195220aa64aec17e683a26bec0c7c396b00aa1749fac8e8b67c5479c60a8b496df4ffd57756dbae45bdb921019d728e54998d97dc8c1372be89b40b1c5ee038d5c824ac55a224b06a36e628307a81c30e726b3b181e32d38ec5ce1961771d3f9415fbe09fb348af95e6d6f9b5fdce95a0663cf47e2a9500c2a9e62dfa773e51a39ad2b630b97eb233355439c3336127f29b58ee2a4b5ba51400dacd5fa54cdd7b172481c36ac95c1788e48a10bd021bcc905765a2df3c0d2e9c338843cc8edf5fc7748d1d281d0f46e1f27883b3bf4f71788a35500bc7a63446e045ba39e2d7fe7cf1c042460c8ae347ff79bd84299f00c1a4c76429fb1ec982d25e5ddf3581c417309ed810404f3f0831d33e986f30e11588d3c26e5d8a9e13a76ef009ee4668fc0e174404c90459784d32847f02f89b0377d5579e5f72094d58fdac79f930e3cdc4a9f529e24812944e9c1ca041d6e7d1f7ee5508a968f1bbb275e5b51e59559eeca70b51c4365ff396c7ef831cd079fc83e6fd8f45fcce085930414652ca5b18beec027babb4f1e377cd25ae5c568e559284546ec97417715e9b430b8e75ede06bedcf2a12d6bd50da6e5989ff2255fc0dd4122c04f387077d3acf48ec13dd3abf04f6ab9478f65076ab467b32a806e601ec7184a812d737bac1c6120ba0493041e81f2f6e1dd494e7c69e9230892aeb4d76edc1fd3e9132c9e786ab178992392a3a893ccbc9d5934b2fbe32ca6e69f64a16f7f4f3251f48304369aaa822993319651056b6a1307a86afbdd881ba8571b77ce116ed3b7f2cf12fc2f65a5a1d790f459db4eec755c73730405df48fcd08359fa14e8619c6872f2d8519ee00a288e6af18b0f9eeac1dd15982a9c8b4376998030daab188e25197dc1682de78f595dccbc29454b5d041a0d378e696db7f590ccb41be6cd2eb850386c8e16530d98b1d9d3cd41237bcef3964982f957ab95c402a3b3b7cac5ff30d659a15bd17b9080fba529552eef1c86ec1135512349437f816469d41cae8582887dba4253a3669bf5275d8fdf36cc05de3ba58dd2718e9608518b657a7d6f827a99b290d3ecb74e4357a497af56ca98b7f7088a35ac62de2233e8efb42173ae857e699159845d34167eb8ebe91397adffc05a23dad3bf792aa05141427f31cc60eedcd169ba6e202b9cac051d0165ed41bf2a29e3c95fbb9c0d9220452880ec62a7a1d4850ad266cec11be0f22e4fa67eb5e43b37ed9e699c96631a8cc0e09883a284707b0c12a710200de750f5f85aabf26a67d5e5a27279bdc1048b0a65740801d9523d857e336c7b727737b1af24cf7b86945976d709dc189ca8463d9112fa8a5456a61a0a38d89f472b68adabea3902211dcaa42faa045bafb00edc38ba8c5ad5e078a545cb2c9b27cc85ffb0ac23a85833522f0b5f5590ce665e93b819a195f49e088733beb18914d0d45caa6e8ea879189bb85008fa51d438a46fae77d8197153ffc07f4aa13c67b856849723cb232f93d5013c7aa5444b2cc108723af2230408cbc5a257ad4b2265a5aa2bd2a025fd0c7249e2fafb6736a0e7ed85dbadc09d5334f35b9190aa250126fb2e1ee6f33d822a3ecf3a3243b6ec3ed84be64b4974b524dfc7db2c9315c207b65f3995775ed7e4b0800373b3fd733022149968cc2e1aca346d868fb1e48b7ac3b8d459d7fb65a9a136ee859645fff5e8da86f129d4911698e99534db489f09851e3d73c449d3d22e1e40fcc69e8ab94582fdf8697a58dd9c19bb9af7805a93e9c181ee3b65a7a8231a8442d9398253aa5e09b4519ddfe622bb80421cbe68aee477ec6499b2ab5d9a40ff7a29e54129440656a98d3e03f148b7a6025bf5fd2635b5fac6446122ff52399aff07bec54feb75350c7699cdaf83fdf7d7db95f19f796754c6f20db181a1a032d8b2913136d2acb1f650ce22c9c035dcf2b856a0d10192fa4d6054eb879e7f29936e913c8520477c2df59ebdcc57e808436d9dde6ff254570ec9b8df587fc8093f04f74ddfb877f892fcb6052fb8301382e9750b4a7aea90106105d935466179f5a65678541c2a9f9ad6c892964a2a48b754507a8f7bb6f2818651cb3dcd65ac1a813254fc492b4345acbfe9a772e25ca55ada1e192cccbc33f1ae714c0022607cb41cb12f6deb0a87b797646ae3774939bfe8ab642b9b9466b4c08ad9b7d4a676ab2492c3c90c233214a795f643438edfa3a799d0af10f17993b54a84fd4193c32c7358d0a381fea9f1c786030a8dba1a901048650e842223022cabe1cdbfa12c2a157c06f21b5ec9b6a311b729f9062059703dcbc637c01e0a9e2b4d37eadb99076e13ccdc685f52f8c5fd81e5f774d7390c372630bc28ed618e7385452171fe049c2be30089a349500e62d50ebc3c99f74c601c9168e1dac945719cc08895fdcae611180d3be88fa20beb3fed4aa31802e51041058f024392684eab9c5b54412b6e4f45c9314cc3470a0c297fa6f4d0adc7ad326156df467ae45ef7c24e81117c2a307afd50c2b161a597ab95f7acef0a0ca2628e84c202c3549f4cbd6f2a2ecc5845b03c38c0ed528a666999e2364bf31c39ba3fadcad50223cb40bba9899da826560fc489440dd3183c665c0dc35720ae34da97296660c41acff7d80c0c8f863643ec0a731a188db572f2fcd72b5490616dcdcd65553afd1fea8f5ebcbe65e976b24e8f0e6844208cf9e19758e4e003396c7d077fe55c0146e3ae57ee93eedd7f363565f63e9376a97457e2a892449e503a8eebf4eb4a6bd5dd3b488ad880e53effcebccbfc38435ab8518a44cfffa889e77f5f34142b38070736171ac699d5af91624fa2a5197d40e6aaa39e3b9eb48031d3062e25f2f0bf224954501ede35e05a8508446f02c168d76cd4532a9c1b4e441f3dda956a7ce5a86b3bf79bc106d01e28bb4f5c5c2507abe0d1bdc713690843041d7e6fa94512f96fac0c4a1c9ade5a3459947cd0399d2cf94991a2fc3e61cb65f6246ca3178d514bec857369ef579cf481ef166306c879d8787d06d5581b3684af42b2d9e277e5c0f55504bf751a850db5f0c8157489c78a8add284bc28661463c443605a8d6c43758b6ae910b1d6059b376e2c9457da15db013df69e620d0d5a0ae796e5ccf9695ddb844c4adb834aac02c785181a82f3f97aa665f02fd0c8a248c776c0ec7c6c86d384f49c11280ecc2610a1d442c7933be0dae0b546883da3bd980dff427e392ffc7ad2d2034c3fa6d5f8b2584f58a8381c16fa08ee945f0035c16840757da55bf832c7e6243562633ec6614b60b6461c90c528c04409b632f90c5e21ce21c19fbc7fddcbcc2a7be9a3543a75c6dead50c12d65735a766a8001767f47a6519c61ecd264489ca6741b4f5199b673d1f61945bc662a54bd0285abea395be58fca6d16c331c1c7b169d2f1d7c4b17baa46dd578fe741c0edc02b7393d31f00e809b88667369e5bcd06570727f2a5a31a629846aa052c548c2684f6a4055e45904e0ee7b43b28945e21b49c0f1200dba88c83764fc7770d56fa1f9ba5d680d7d764e42962e8854303175e83c38f110a1083273597610c660b8711019e4351dab105c072874d42beb6032dae46b4bde2e8fce4b53ea93407c4ff8fa6e0eb2295d962bd1eb19b7af2400fe339259fe71f0d03e8c38c7333636ddb57c9dff838c9e3fc721d0df8aced06f6a39436c6812005df748cec69a878c86b9983a5e0f8f6a9040d95b89710b5252b51c0693fa1f0cb13ecf12e8b1c81dfa844084cd07e8a0038fe0d121bd0c6007d1dfc28acbac32b39717ee505008b3c4881d922e28203f22a14832ebfdb1f8223ecdd764dff8491424066110063faada59bb7156e7f2b39b4051d09aaa6883c63f20d6115037b3565a90ed98b43210b012622c8585e64f0f511aeaeddbbd6d83f9b6e1204db2faf55eb02b1ca0a0a5fa150e31ec6f96929007407c2f9755ffd171f0e12de1b0734ad71a2b5bdd64a7a55bae0807ca26d5c5e402b488338e01716150efbbdbc6e53c42913d64f279b41c5a571e999ac8916a13c9d6be2a158bb925bffc52262e968fc3e8d2691adff8c264f2030bfa58e47cae15721b94acc5bf6b6c973032c78a9e672058d6c4d17d412a84d979e7bdff26ff47fa45b0670079378d34a9fac43b249277960afb8679c5dc5beb1e224454afa7fbae8b64dab4bace55b1ba09b0f9b52cd7022e4a4d624ea76080df957c066771fb3615f69a43cc0dfc0a8614d28e5396f93af7c2573616c3a06e1523acc23ae72d5ccf1dc9003b5a576923c11c23051ac7b01bc7daf97a039989b5d0f28db7fc201203d5804fec713370a1f51853bf320d7721148ee2b2d6ad8f3ee357b715d91b1b636406af9c9d1163d4cae8b034dfc6ebb74d6a1296b02178ec49e7cd7c157a4e9f4234682212f0c31be3c4e78cb3a1d998e007f18192ae347f50e00a5b784fdfe9dc6ac8f36a4155a1f1ca206dd39969ac36f727ab0d0750151a65db83c567618b8b3950158fef3cfaf709921477cf9ff1bd4054bc42578c1137a96f41754d7f86ff741ea448851e4f52aa14bb9270651fa41efbdb2abc5e583c50929bfa96669359950f41dccf3b7098a085b9d3d329c0ca51b3bc30395be978f4b03138576c875e9b294ed88173b6b3a45d071d4e587479da88dc7115c08b2d9fe02186b338b87317676d70d6724238907fab979a1b77a070384b3c072842df6ad8bd26eae07228aaba29dd8518f3afe5e9f99d6d2f2fd507bdf2fe07fedfcc148c58fcb0652acbf416ce42b7bbd01cd818df349a7f34b739b972a1cbb7d5451ec1dc2d82e7a637cdb80f1ad5a005fdd10a396d655753b51e320cd4b8b12a8c35218ff50cc8f6d4a98878063bc29649b34fa227d39dad4ba395f227684bd960d725defdc9d6bb7d99d418b9d2dbf6944d9ab888120927aaa49d7a5d270a2741682017212ec7551b16649f7a4db1ca9c247d5201265502ce8b406f0170891f34fa97dd07d6d2ee3ae7da8f7060dcac4274855a0d8b77adb72caf5abf0b2abe0c3631b6fe27b755fb0bbf4271c512f5eb54827100558d299faac9b8d4c1a0853ac020fe37d16beeedd616aea763685bace034ed97ebd97e326d1bee6c5d97ed71af9c2da692b4dc74e36bc7dd4a508c5654b7c6fa071638a372c40650e126d5c33de68c071e11dcd9875bfc5f468b25061f01148f8f02494e92123099f21250c5ccbcd9bcca98600662b8a544ae6b3b5ed222a991af044dd3aab55f5dd162203e7b9f2384ae97334b5092ca4febed23e429fdf909b2dd463d7a90841476749695224e7779abeb52b620869f833693fa4c0f0c2b8c72ce5792fa4aa2c699744c4f2c4af20f942f8570e0d8849d21aa9bd90dc592d76fa8b8a1c1168ff1b7240326d57cf7d5def1362468885cadd2d662f0114cc19512ddf0e54178c8627f9ae943a1d67e7178832eea6f66815b14f184f4df0a118f6007e3c00d057d87966423fea8c05aa6224eb98fa3de6c6b0b887cd980158bd397ec66a3746b9bb3b385aef92b0782c29b05ab5847944f9179d12d6fcc3962353760925de565c58ccd2ff39f3a4d0bfddc51899d9a9fbdf04376260be551e2544ddfa8ebd870b8bb12514b8830db6760a49d91c0a56cd01bd24e3744b952933285071c52ba34a590325c1dda1c1c5d095c068f426c52d8f0891131d7e80c796fe8fdfa4bb62f107a60726c6b14c5980e5cd97ed77a894b806e4ea5698eb8c81ad38b86d5c0cf8008383e4449a0214ba004b950585831791d3403638fbd9256f692b9b7d9e8f3c9ed3265e3125b4ebcd994b444843fe8ae960d6ec191074e0adc781cd4217e8c9601578d9c2b9cbc68e8ceef68886e02efbf00ff962d98cbd60c5e7318f98189961300d26277439e5ad51e5f6af31db54d85d8e860efc2cd33ba3e414648df03c03857021fc3c085bffca3d7baa4ca4c6f02eca4cf1f9b00d7698c824666d85591e94b127b5f95b154d733b4856499e2e22829aa7ba7f54a54f078453fb6f481996f40dc6ba9ae1044ff22a29a5977cd1532221f5408788203b32e247f4049719f6aeff985c434e68c3f7ce95ec75200b2324b802501ba91bb047f67b3d561fd84fea5c19aa2f05f5440fe1609ecf8993a8bf6a1675657a43889cbf88f588c6bf96e040b198fa7b239e667d70435f882eff738ff2c094db9ca12b7abe4ef3cfb002eaa0db8db7d86648a08844e8a6d07c29d3044170663d5967487036439e2be26c25b9d276a8932216f5b2329fbdde395ec31ec936dd141772579fd451d3a22aaf35b01be17be6220a0d49ca610951a12bd51b9bd71c37caf11452e2e4eeb2e21d4643f275df91a497c06b7f4176c5c574d6890800897cfb2dc9624ec6ca218faa08fa0a02dcfb5f0f6f8b88bbbfd51b6c6888ba2fb30a4964b6bfef00d2d40456b815f0f20cb126b7eb37358234daaf473bd0faf31c1b3c4ca24411cabbc97c70209a1e4810a3706e3f276e347845e9904987210b5fed1e6bfad8af735c9ace3404a5ab5e0075ccc02ee53bd57c700fa0ab9ea3c9c25cadf555d88db277a235b64dd31576c9e29b2e756eca71f8b889ad22687fca354228af7aef04756e2d18f7ecfb74144305d471cc1963af35add00c9a470356afd24ef5bdd2c0770f1419b239b95aa76136872ffe70690317c5b547069b14744215a9795928abf878507a7c1b70d9e449a146ff4d4930cb925f2fd7c7933556ac2b9bc4f50cae43075d12bfc14ccb4b5e1c33171f7e52a58962430188a173104ed6d8242b2a9d426639c077c50227b9f599f98cf61778c1980046a06f04b5a0117afbb923c430f7efdb4b925e3a05468870783bac9768110bdc3af0a3caa334ea5633c63287623675449ff8ac691ad31a98fb0bd6c5a3188907028eacf4e414119e95d3e82fd59c43905897254549de588836b46fedd583b624a210296bc8718af939b0f3da28e14adab855a9e7359519f9e7baf0029802b1da580e80bfa7d54cf7a57b05f2fdf9bc6a7bdc04fcbdb5374528180e98a1c3997b238881ef7f7e49f999c5195d098917a02f759de93c8429a24e387e497de81cd65224f3edfb1382fb0deb6ce91d37fe450628e73c67750b4d742cea08f4fba2206c153a6e7b2aa7301f7e9e70a08d43a34fc74562046078bc912656b404386bb56522a620a172f13432a46c695b0730716b9c21996b54a1882f0fe2f3390e0ab5aee8a4afa43423eaf8a4bf6e63a59d2dac678385b8705f21ad8c384cd241c8355562cdc8a1b162e9d8b0c5d46fb72306512cf5db21196c6ba631ddacc80420de2a3e09630297c6ef7e3a327b1c56f7a29fd07b609fccb4aeffb9449c0cb4939da927e90c4d96930a5f2e668d8ebbbeb2aa65a1f0d32b91f85f09802d7a2630844b7fbbf42f5bc5ef6adea0803b6a147ebae7cf813196cd79af3bf6ac411598060c8ac811208fa3e2b5b26222c752140371330132dc2e003d3b97083f2c6a1482e97bdb4870fe47c1b81ac00b24296c36c134f0bc5f2683e8e3eeb5c93fad09a5028d6dd1b1a1de23fd836321cd9b8819aeca95b7934e2bc2a59128c27e3e0c5a3ce2b1b918a49da2286d508b259abc6f048bb9c3d6c96e40c8b7809454873f80d8ea611ae81f5dc284da926c2cc8dc19bd17f51a4ad1723a18888f4f1e5d24f50efa5bd21487def4bd2f9ac44f9085d390ab628191cb088126cf0c6f7b198631b763a2a5c58d0d42ba54fa291e3e2a5047cdac9b2885d8b0a63b58c30fe7d1fdeb37ab246a8e743af4a0d6ab676a22b5f1a20efac39e1b919ad270a7495b170ae320e20a63836aa676948e8a7ed8a5f01d9ad8c4cd5c09acbded46028381ec4544be6b44815a3079d31ea0deed5000681bda4b48b44a54250e350082d04852ee154dcc4368755277fe70ec8f81b5087efe1950b9ce800100f8b3e4a9d8e12d858dd4dfb63b0425d8d1f39ad1b65e2bae3297712268277faef2ead4deb3f03ec42ccb060bb21c677637f6a03a1f76b5365f707992e3d9cbabfe8c95d4e1b50623610e9f0ac754ca20ab40e57c9a4ea367722ac52f69a151cc1f2d1d06c2f525d4b4c04d35b21db1e9bc383a0c8a9637064d9fe082a81e2d5544f7f92038cfd3d5758bc5266b930bb62d6325541bc3fcb3db0c5be91a2d55b3d56c208c65ef2cd32a9ff091fd2cdf97d52ce151e366fa49000938ba83428e4d2a0a618a4a42890c4a168fedfa12689fe4fb6ab1899343626944516c1627fe2330b194f77991201929eeaef374845f0f46bf302d013651f3b1096e360c1bbe1749bc58541291ce8814da49a1bfb9b216b96659acf010070c08ec04a67538abd3d01f4bc23e5e9979b29c17f346b925e8241d5377bba173d7a112d4fb2928fd5d3e1c9250a7bc218332acf98dd589ed1854b1100ab092ec7fc45ff3e0753df48d339d8a1de529fb60cb56a44626e72dabc8efb7bae3f4c49e64b311ff1f7ac34bea9511e522f232fdfb1b8392a4f4489372d0b0be40a43c12e19b015fb5ae7186687107b1926ef88fcce85c6b3ae9e5b8b9a97a94b890014528881c7a3a35ed1846f7d0ae9c693feb20682af5af54d5caeca34e7023a2baadcc4a042f4e0518cd14bc9ef01bb4fd7d2abff33fe4a41947f8f5ea9b81b407efa89b4327b88e352438d1994b263b6ddfdd2e597e043bc50d4f0290e06b946b64df86fa10d1340d63a243ffb4b65fa3aa6643c25bdcc952741220c116921a78a7363289060787a3f77e169c5246291635eeb29c9b4999acce273cc984d0432060e81b20d4cc298632e643dc97758cf311767bc359e9714fb3b44371e3ce9cc053618e1d6fbdd30bc0c82d03137e59cbcca25479e9ffebc4842d1d24722569ad7c18288bbb1f362a0d2759440ceb5d06a3aa0751ba0e3cf428b19d7a0a471707eb910c7e102d7009bf126bd357a2a079c646b2f93676df6da6502ad62fe42575acb66a95455b5cea329155d43e33a8f78a0ce80001c1a2823626e1498e50a22cfb13827f97d45b3c07e3971bac4f2e551a7450d54791e1ebc9b489cbd7aca33d72190e6c844e69b4918921ee80d732145829b992bcf6ffdec2cca2fc114aeda1ee29dbe5b6dd7e0538650914671bbaebf759d4571fe9e06d87ff362fc33eebe15dabec374a421ec9af91b79e1bafc152753bc565e0097c262e0d97ff0850a1d082d3426363954c6e703869a5cf19afce5a6e21723223cb3c3ae68713b61b59c2d504ee6716354de03da6628d00d11cb0f71375855479c7303c9f62119a291804781b4cfa456cba1c41cd3cd69cd6147820d00cf1bcaa6f64d98463887e1919e93c3040fe0a567190ac7418f837c42e2d4f107e8d2b0c76365812b24cd97f68f210a531595323051070d7030700026b79b4edc2c55bd21ede91a3e8b79c4df97be2de3cb108e270b8f6ade75db054e42aa6411b534c92e16a79358e9eaf45fa070e483365b1860b1fda794e5108cd8b69683986d9aedae46f6ab2ba2720d410294488de70ccb87ef508d1b8e4e4aea7cdbc3b5060603486668f67d6eab67c5289da605e3ba868c2da298c914740e0e732b0a8d80fa325743a2c3dbd2756bcd5df1b399d4dedfa8819ddcd8359ad2256c475e7443c1ebb24a3f98f7c370a04abaf88a64fd4ec674807e8e60582c87333a139c31a9b3058b6f3ff83bce195b8e901bca293a1df22f09f2322d63f805efda2f892947e5037526d734946481d1945b9cdf9ca3d33243578f02bf2a5e54b0aab4e812428df25443fbf14835b4d25d6e7dede2edcb9da087ce6de0b977b75516f8617787c9c760e3fa03f844213f82f179f771a3ca2fe9e9a9ec281a8485619f24a34d7b824826db8260077d15eeba2dd050b04880dce47d0ef40174ee4c0f44cd0699a1224ee2fd48cc35ccd4977248ed70b6a9b24bafc8e3ae239de61d1b04a2ce844286a12bd8139d1157ec5a14784d7b83be3bb1ceb894cf3b6feaea3c181843445309855ead1527fb7c360b33a08c643964db870365f82b107983e4d1099b252c03fa51bf021c239b8ba92246f6ef1b941f36f8cc64a74bb2baaf9d2a6833c93899c2b724cb20e98106748cbe7334475201b7cd3345828e918c970f4674ac53b0ab4a9fc830200ade36bfc26845b239bb3dc420799773c2d841533a30cbc0307cdffcd8cb1459a4106d7bbb289f9d95bbfaeb1bf23607034bb9f2865930c3eee7c854c87de82b96498fff5ea8f2fdbe56645d08fa9b282ebfafa1186aab6a50a8642c947a480522c43284935a76918e034e2e08297c7d6303886fec499f118ed4a9a7689c4912f68c6dcc8ef98926263caae79bbd8a39c28b8a5ff16212137ed8c9e4f63b68cb0649dc274d0594122d6e800801c798089e77df0aa7190fcc86f5c635ab04cb98946919067a789469fefeebbca37385d5d0df019f7d114704bb3190898d47d6249c0e25ce1b6cecae81fe0bce788b62abead88290f166ff855640595e34359296a29ee8fa1d1e484d949f60510283b7596a26fb7e46184d28864755f00c14e7fa7005c60893cf4a08bf90d4d6486a80b79e8666e632d719d6a24c9b55f3a9709a8fedbc6c22e4556406989ef9156801936723ffca43531e91f8693905e75eaf50519914895719b919567d6ab96587189a877aa37a985ed28f933a480b7de79dde07d6affa53cc5b4faad29d3031ff5da6b64e8ea40df91df09ee7f512e90c4683c154daa940e75a7395f773edca3ad203199f76e4c61e78fa2dc4bd6833c84564c630a54db7ec7053792d31c18d812409d697da46a0913f6c1b66bebcad2b9b0985445d97ccd4b6d106d5554c6ed3c45c5b44cc9a4654b8a84225ab2952e377fa0cf53313eb9bf921bf48d3525f36a81842a520316af5dd033408f590dd43b481506bc14a4eab49c414fdb3d0f94c546b44beac41edcc84af555035ca84f341ed72678cda2de04532bb0364948c66f7116144df29b48dc9934f51efa5d99f1a86b06de58f6878d8d30ec32e450bf6afb85a254f2f95b9ed8eb83e28cc1abe6d9d129b49fae7227189c752ad0a5a9dd9d413bc23618cb14ee71066271458714ef7a81c1cd6c930ad28ab2ee5aaa51a52ff153ce5d964795fea9fe54e3199d045878d6214967dd5cf753b4a5e0f361047ac0ff7a29892d03ddc7b93cfd021c96df3956f35afb0de4a97524ca6de776029d539f9a9c579b328d77af4732a901ed72954cb452c2b3f994672c65be9b88910fe084917040828cf32d58fcdf0fc040191bfe230d1e2f75b697bee1f8b15733eaad36163d0747a302e6a4405ec0960b10d9934b7d08b2f5966a883e6ca5e41b38e835a93db9e79f6737b628b2702eba98679289cf6555d0b71b64f704d1e766747101660375d28861de9fe7c257af85293c053149ca965e79680dcae02037ad8cacb2c1972db9c12db4a30dd10fb235d3b10aa4029ed52a85d83aa18647861b7e962d90d4cf90cd5e7e3a41f353f3009a5dffef13f237cbc56b768180fc2fea50c62e18014d9b883049c9bb4184237b88102de8a53c095c0f29407e36ad4bc94080f9668040187243a251506a2d2548b75ba05680c983e0bf7afb0a317269aef100096c264b927eccbc5df60c2023f48ed9988aecd2d38f6352cb7d69f116a69488469f004cd119e2ad5c2bae009eb2adf6dd7b42c44b1d8032e6cea6895cae8303e4b38443bac80402138f99ee1d3ea9744d73c500fcb1c144d3ef07393df6277b44428bc71c3d1b7721707b008583b2d1122860561591409d156e104a8ce9d2b8d4034ba693cce1962779826092c35023ae8d975b421b17cdc35b36ca74c7f2b2e517034e46fdf064d6619b198e05049635968a90ce57bfaa07b8c4de836089340107a6aea11ad5cc9d48e7835e2ccd9071c2f6298cd16924551106fd2adf18c602c6d57b7865c16e062d31a38102ac97af52123b5081f0d626cf80b79b348242b51e825650f98d1ce5b4f58a5185135681085b39720228e7aaf7305e5365e1f9ae59bf7e21ad773333fe0b6b474b075f96ce7053d8f04bf69cf395a62dc0138f8f27b33372fb4bc5e2c9380691bcf8e5e03c856701a9d21bccd85b495c7b71b58bd9274f5f713e2f8f05d29273bf159150598059db4a27298f1f1a11a56d88e9b81d90c8ca810357edd5671a446c46e510664ede7b9e3db5992fe178f15ab9665f8bf8fc42a59b4c01ac74ea975c0aec0b929085e6371381704797a94d3aae92a37ddb7d033c8ffa2c7393e0355da399fba00d73c52c9700c84c11d030b2577235704b5a3e17dff44366f1eab0b41e57f925e330c48d20d1c762018688fd67b7f47d34d64020e1912e01ed8b7171b9413b224da5c51a4ef05ffc9ff92c190ae353dfdf1bf0a4123f347613c85c925e1ec0e9ebbe66be7cc0bcbbb442dfdfc7e016550c5e7ddaa72ffbc41f919300b14153eef9c3179dd43c363923e49b9653e37c2db0829d1e45cfd289b8a8277359b1e241850a3a3be48aa7a01593020617ac449b8c5da923d043a39e39278286a43d8997e15493c367dc46b2f3d59a1535a1c0d1acb52e86c37e727616b521fa6137967902e22c8ac96a50a0498b7b16c51e36bcda1aabee6834a103c6af53cb006e68f6a2fd83f2d5ce9ba0177d1fbc16a2ebad7461b494e931f25d3f7cf55441cdafb22ad708f2d63ead119621141a2f10496e4728f267e210fa9ccdbf86c6205ddc8f9175b69127d583992e0bd6ffff217485c37f76cd5a4b432ff4e63bccba8768143959d3fb30ac417201a96a5ca1dc009edc24045e0db889b845cfde49bb19005330c8800b9544943f38a9f3816c11d66eaeaa172de551dd3c9134e7820765f0f319340727a26748efe4d7dff631e8568be20299780c27c6d8a68e8739d0b2024265e4e321a93f59d6a0da4ea70b42af1ade3a2ef39592d7346494715be29dc1107ea5e01e56fa2c900930fcccb4301b896a6b70116685ee7b297f1f58db03a4c900b678ae2c05d48666100598d158701382e4946296b7917578ac0f49e8c00d8070c47c6a0d1fb158558b02c8336a86a659194331d56564116303af9465180eafd050343b420abc6c0ce549959ffcb3024a7271b9b0b3c922b1fb0c0a0294ea59d2fc797358732c595f5c1cd83485512d6e93457b66b051261e89f9ee2e1608e525eef5e0c417500cd61897935b32754af498eeeac01d40ecd64489790ccdcbc4a7eddac04ef1a7374dafe38dd4cebb1e29e5035db951de13aacd2d21aa9f928a85274d79aa1b014a1d96b03a34db5fb6cfec22f98b47eada251b779668f8dc8ec7a0bf6accb8bada7669c05d30bb431e14b8c9e8db3c1a626557e4edf03d9c940328d9a7b2419cb204f56568c7f1041ab061d20259f7ffb648a606d7ddcf70d154e10d24ea78dbb158e4cdd928bc5c3d48eb20478d02c9a188623847d38f74880762f8e5c4bb2f48ed0596a918ba3187a7f8e434da357b33a9ed801317b7fc2c02727e74a78bd0f3a7e0c332db81a81545f8ab9e5d1b0e522aad25945363cdfd1847b0cfd8182eb54a65d7e9d42a6c2e0dd8b0d2224e83556c6402331c46ad19bbad76f4ae223ba5357365ee83caa186ba9cbc563332a3e34bd3678714e813b74a5f17d7c995317987c73aed1821b7a5aa86d66411ec4c998d07cd623a17cc713798500c1a00e7408c17b7d54cb008c02ed93c69be7bd0cd06a03af976bd26a5b7d516c2ec714bc5940985f204239e5d4f071eb1609c7a673ce777984c73196d4f05f2986a4d4dc544bd0e877b2653a07bb6e204131badee0eec4abd0de50c928e442df5f867948a350d6006aa2a94c7f9e610cf9ff8490b6feecf727c4f2ce17e913821c0426190245044c145a3136fc142f87a0bbd996527f233208f9b9a534437bcb7621c7f36fa5d3ccece43f29af34b614b2d3d31b891d34fac45858e303664f0946b50a240fcccda1edeed2fc8a934fdab38ac992c5eadb89f79d937464296e2500bacf017d9f73ecba2df536f55b8342fc95132f44ebd4b7abac7d7fdab97e64f2a63de9a3151e056cad4ac7f8ff1bcbc621bcfaf87104da20135bbce14887ada89f9f487805b7a48a128b890479181e0c27cde42435b8ad442960521ce4513b667fe3b91e3851f27ed900fdfb512a6fdb7bbbbfc15adadd89f79fa61d755fb0527c24ec7910be6d3750e0b9378a0600dc827745753f6dd1e37e9d31c67bddeed35be5229d7dc1bbe95c16eb642bd09b246bebfcf7a56262a22c0140af1d020268f6f57a1953e8899bfa77c8824ba04ba5b83903f8f0064edf79e0e801f82deb3cff8ef4c82c4b3374cdc2e6af33f0a0dae796c1402645f73c1cd2ccc512e7c63aaffd47168b1172d6a1caa30f9d6b43aefc646956a1e04e45d03b58198fbea279edeaccade9da95c062216094cb2c160d08452834b9dc6f6014d03126c6144ae20e53bfedb7431e3e9cb7665e3eee44fc0ac384ecbba333028f7e00ab63c4daf6fac134ede5d97316c22da4a9e83e230acb05fcd224de8b23f7922cb66efc9a42080e4df26b147649e23e276f0f2a02d780e7e925e4dae6a91a4e265d6768af0f05193f5d51b816b698072f666707368ff72ede7dcf7510c3cea419cc374da9dc5e94d0f40b5bb5d848d6cdaf86b1292ac2ffebc8bec0ac5c861019bf08d20e5207339237872675d29156eec0d8a8014101ca6a6a0e00090b49dccf8d153fedb118a2f211c6d11b4a274d82cd0c61951a82009e5f09fae5a7851284b3838bbfc744306cdf6cb1bfb470359c1150296433bc569ef9f4ae8199f5f7b42f3494b73b88d8e8ae1ca0483ce820cc5e24c92710afabdab0ff105f2064a15b35411b3fa6e75034a53fdadac8b1671f9b16363914bcf6323132dbd6484e15992fc65d04301b0144760da9efb8b643eb00a39874635c88ba846341ce4c466f3d7d390ce85c2f14f3027090ac983dbc4658293a202290bc7dda31044bf68496ff60629adf789da6bded41eea3f9495c170d7bf26349f25ebb96da5970fc1311311363165f0ca488b4852df9cc4248108d787b216d24aaafef516de4e7dbeab772a61fbcada74c78a4e731188b44c2e7e21b124c233f47f67666e85764fcfa657d87f9ec779a05976803dd49ab976c68e5bb5ee943f2cb8dee5c2fba642f38a7e4f18fcb74422f55d750c7feb8b874764b8b4d4ffe03e2abf7c2e58fe598424a9b03b5e440ca890dd17013464182e435e59558b9ba166f556289b642f32931bcf6cfd3c48e2a31baae8ed7e8d8285a55827997f5cc29bc0c0124ea8d258691f62549206956dfecaec3c6f1b38062add574e27a555ef0181469f7c3ce9be7ade546dd9a6678e39ebcba329cbed9c432f2b2155fc02b799e70687deb18540bac4ce0fb21c86c4f7458f27b90c461dec77c3caa62e061ac741594b0457dd37077ee82f25c005ec2b445056510747e8aefa94c283cd696eb08d41f44171fd8cb95b5b3ba14335821979b8df832154de9595ef3a1017f33e4e3854dc26d206780f7ac7a80f551b007d5a00ef9f6aa058ccdcf5dfa9237b52b9b298d7dfcbfe6717d6b09fb4c932fcbe88fa33a2e58b9418fcdbaabc68ac2ecdaeeadeebb78ac9200e16115258da19c8b53e6e472568a8321ffb0cc4ecf0ba43c39ed40c8ad2e64c6ce8fcbbb23fb3dab8dd00abc733b478956d98b020947938a8e68fd5db7bcfc6c67ce991fd740832e5c2ab915bda66c45bc6ed176515976d6ea6da2938c4eba7247456a118af4655a8065ab4316fe260368d77fc68634d476a30b575d14d5081bdd00d8cc9099de28ae9e3cd1af45f7d56ceedcd8b86d21da67b7bce791721481ea2a412761fa769fc2706416cc4bbcca010c4d131892d56085745480f283b3de7d70b2be01d93f2a2eecab5b34617e0f0947aa09a79893c2bd1818be15b4028142b8554038753b0d90bfd5adc105f591bd0fb76ff00b8e2638bac1dd96a49f980ff6b5e2a4e8f7c35bc8e119f211397aac873302b31e9fcb072a937fdb560ddd995b2c40a447b1d1444b8982a75d9721b23b8f3ef3a20a6ff427b4b66a77db45751049a215703689b9784337ce6a17ccc0ea6624a516a79b54df0e2bcc11b7cff1e07fc2fb1564ed73924ab27cae5abc05a0d52915ca4efea0381bf5cffc3700c4c7c97b63351e94981bab8de1fbcece1497775eac966a89482102429127c5022b6843a1812348b10d4ccafd4c22b6a14f99a52807a8ce7c4d2b02635181b32e5ffd8e7349ac43322c093b77645c81103efaa9456dac68759fb14b5a2a07d0d69b38a24bc268fc3079acc3c02949cd13b5536049f1fdb90b2210866e95caa87d4ea6d566560101bd6d2d64d468bde615bdaff6c44d656b5a236493d10f874a4d83a1c8c12e4c1ff56822fef35e2974004fc8505b3a8e1c6e7d7fd89a2a4de172d0f8013618c4154445fb57d899246e55ce5da590c09c2960ae7cbecc521a16457e571583ca80e192ad85866c7c70230970747a352d31a5e7adf1282a9a513491497421a41de740f81142e76d19110b16d884a838d87eddd5be5ff720875fab02339514372edec3e7bda926369d493966074b2737204c4c932df75c93eddb7918d8135539ee9c0d98dabe08ad91f9da1a95ec610b19c8ddf614d28d1786a3b1768480557dba6f28807e04692f1bd8a796f24b72badd7a8c875ec4cb0dd74fc27e2553abea9d845562b42bf365254c61746778aac9aa0c4f8d763baf5178e3295475c6458ec963c0be9ed72df953be1fbc3b55f302da74c282e565ba8229caa265d3dfabe6b92eaa5c3551f5d379ea396adf01f044fea1d6fa3b6506f7abdf4ed7f8c0193524071a3a84de80236fc768b8fddea1dd63910b69931ad170a968d8de3f92a3aa1b43e55991a105bc5017b41aa92d3d6372171e372030915a4a7e90a75ccda5aa68f80b14381374bcbfa5a1f60e61663a8e4def9a91df6bde37ded748039b055a31b0a519329080bc9382efe08c91c782166267918e3dd1db678844fc2ee6b8665ea2669a7ab13ff12a5c002fb65b8f5d1709d8f8fe7d2728025632a49d3c68ae30346e56224cd1f71f7686da119d2300e206a0ce63bd2e487b92ec61970161d857c382ac9ca61e8d67e5427774c9f0cd8c3bf046b1b434bb36394a43a4fe7e6ad37814400605d71422e6eea36f955ae2f66b844a655c4e3d6d6fc4a8ad49932f509d105cbcfedc2c1ebe93b4f2579a1df3deeef9abbd00e4aa83d9fbf3e5d45de840031aa505e5e963818236c57f84379c00dca65ca8cc27b21d800d46b23adeab267d5be0144705889c18ede602e14157a3710a9969f55c8bbeaebbd4dbf6641b46c2409a4cf5f62eb4664606e6cfe08284689ba73c4a687507b259272aa8c32a03c997797c1d3f9fd35b11caada8c8c38f4e0604e1ff0bc6119a33bd779e3e2a8f99f7a3cac63835fec6cc4a76ec7809389894638fd8d847d3b0456a76451b4a3b7d1566582339484fa02ed04b57fd34cc9e9d8f4770cb8a05cd5881fa49f22a72cac31d2c9e180f4a24d4f96b176fd602a4feb1a34915dbdac74750e23100ad5f70ae7efb776b2b4be35e1ba3a75d915652607cc4138f3a1d9e4cd72049732c1b0681ba785c5c1d951b3956f306b1969c6dd11467bafe5551adc65dca9f5580dcc9d9512054f760dee030afabb4612aa89e86015015bbc1148f88f583d3067b733d320788bbbd1282890f417cdd0eb3eac36c8e5bb8eda3907066b22b31886fbd39f9564e402e7db82b19d15dccc39dcd3895c3c06979f53b75dffbd86bdd060d8db40732566af2adca03ccd1aa2133aca287831a0afba67bd5eeeddc128e8512182f75906af34d3ebde5a0877defac83202b53a13a3420bdf0e44df834783a06240391b82947ec099ccae72fcd77a6b26c374d992d210f5cd20fbc9ad9255be038cd15de731d87c164c402e36a6d45d17566753b8f4b77dca736e7462e397cbf9ad16d142678b9c85471cadbcba49721808c450b18ecf7b51c010efb7e00b89068cd2328b2ca5ca0640b9d4b23056be0660d04c51099233cd9a2472145307663515dedc1874a6b46d36ed51b192783e7d3ba48223e40eb739b22c0ec09c027559d80ac66936a03dcb63d51ef730aeee64f80e86603e83d63b83e995f87b717b6b8c1239f2138f7ee583e754cc05edd6aecab5dc77a646b9744f63f1c488bbd3b88938e1fc7d110c8a988ef41897f641921821d2770a23bab3945efe5e01965a880b6ef295dbb4cc4449e220b739e0a8f1aec3d36602d834caabbfa22f1c20ec54d462273b215da18fd45a74cc24d4b4dc55210a1a0429b1e914b36267ca052ad87e6716bf9e2c325283b03a1ae95c6c21388ce81e6463803be23b4a1c9a19ef919e48f25fe5c5a2320aad4edfe0434044568dfc112591c34873e9b88cc0c3ee4587c1fb886ac3acdae126ee0ae410dc9ee4f58b9850ee9bf018199d1d4f07b0499b6c89966af301f25ae8bc06d86d8a840ce44e3732b1ee9a7313d0905fa15439fd6bb48ef4a6876cbb0867381e59f051e55dfe683d2eae8d7c1364dac181aab4cfb639d75e201380c944747e2f835989a6acdcefabfa8eb96da664e238c7cd02f32db842dc5d1467bb29e8b209cba2b8adcdd21f4eb0ab704064dd5203bfc28d53cb25d1b1787e5f49a2320584098c9fe48d5b3582f83f59251ae30d018157c53c3ed32723dbd1dac99be977833d5d64c5da6c87b82dc8cdb69658b198d6c67f6feb2c360b78e8457bdb43836e255d1008c5eddedd86e0a3215cd7c3f49a652e17cc3932070127c420901e466b0b4ef57d8922576578977522279b48bb17bd43864643f773235533c264f7ca69e961dae67f246f3e8f3ea11ac4dac48b065fb30167c926d6966f257848f4f3fc9dcbfc2758cd427752e4543bc3e1c902af2187594a4449dc3ad5861676520c162f1bd84b81ccfbc0374b653bed97ed21ab78882f4cabceca88b26dc07256de6bdf7445b90d11d7817edc17eb79571f7fc30d12bddcea8b8836ed20d7ed03b5497564431acf0a7de42c3e4b1097448d4d2027b9988cc250f1d2c11e4b947a7f2eec456274d24608e0d616dccdd80071c62034cb24ebde9c304581c7db00f8a02a96bbf4a36e345c4e2d5554bf827d965bd1d6426bd93178a0c1c9b28798c183eb0ad0f77bed843d6960a769cd74b0b3bd5259a3fc196f0aefeaf2e968e840e49915f36d746ede65f18ad836d7a2ce258dde5f50a77c4ae268f348eebd2c5c59a43ae92a76eba9a1765660555eb32f891529538c8c8c485d4b4777f879b15e7b020b00c6b5700b2fbb5ed5b63b06e904f717e194e64d6cf813aac11720f5a41c4cb1ce747896bae8893f4223e71482bd90770239b31f7158eea69d1ab00424a4d50894792af5afa062108d21e571dd4424f2f694e609083118f0d462774db07097ece74be375446245c027d414de77b493709884816642a0acceafddc7bbb5db7d0e2485ff7b2b1b2e5a8681271081be961e2529bbae402b911b86a040ad38d5a20eabcb5d967a4bde17e3b9628a96513db5ae44b8fe60ef7bfd61946c23d2362ae56f85f2fc5cc16a367d41d8163bb87474bb612bfbf46e84123d1dd279f33a628fb86a05ebd5ba82c9f6f8513eed02877d47823e626ab9e6ea2d68dfb3277a1bd154102c888ae304100fe8368ac8e09436da18d815aa82444fea6e08a055d6c005fb0e227b6975f25bfe118f7013e159bbf4a4c9814bc62b26dcf0a23e6dfe556b17c3380b4a7307e9d860b202318fa345c9b5df13e0facc8c8aa647097b987350d3bfd0033de26dca433b4b7c02905e06bc08ac81e7ec9ee3b4a36a5033470af54871463e2296b8ff16021081ca079dc3cd33b67dca1e81542f6f25174843ed1547423347f04d2301085199917f10d0521e5aa151984bc6441e20e64e2a5629214bbe6459353704bbad41abc2a6989b740efbcf00c6c12d2d970b4242bbd40f95b85ecc4b7bcb025fb03171248b76d46bcc4169a6d2f29216824761e5583909f5218d32dcfe9ca9d2f43a34a0b0559ab7fa2100a48ebae3569294e6a6dba96881915e6d36c65e8408f301edc5123d69edcd66383c677f752d1d26a09c98be12e1a741065dfb9d794eb87e6b65a22f80615e5698a16d1a0f7970fc1ece4dded01e82fdb6c64933df63223b2d2e48ec3558d1164b4ab24ddfe2011e6521f86242dae8e743523afd56efd7020442953c3f5ea37e52250c75ada4cc83e3f6c191513e8b9be1f7f9a0f0f4e2b5bb9f5cc8ee8a8bed21b4e3c754c2c17385413ee6febd28c408aa67cc5552dd619715ee80c83c9c336305a95933423585ce788dddb09e0d3b8c7706e8f8d9e1e5648abd3fcaeed32361353c193a567711b6534aea9159131b2cd1bdfaa73fc403c76e97c05fe100163cbc61fda9ef6234ee1c0b42292c3efe53281029fe7e0f7d9574fa504fcfe3a9ab5a2bdd72968b7c026e3504323bf87e7627720f8d8186d5c9914af96514455346682f8753c4e52dfd05ad1f6ccfe674a6ec07e5a8632a27c514557b06143ef49776033aebe9551890b649be547488aa649a86bf288f50b74509b0f8580839f0de405f922d1ce225313868f5f352661aba9322128bf4ac5615a826798b08c610bac27ffa0d22f14922f2c5ef909a5bbc4fb907ae7bc8f733ec5765345ed0da2082c6258d9d1472ce32e5a26a08b9ab988b8389efa4918723d94d525df406d963ebd1ce8a788c46501b4fabbfbccbfb6eafa5eb8e50e65e10c43fe83658dc42683e086ee23a8488e0294862e7af84971b26b4bec5dbbf66a41393b6e08e2cd74788fddaba8b1311a909a8b2e8360c80fe9dccf9ae0c842adc8a575d024dd885104785b51196221cbdeeca0a0fe64bc65935090c83ddec229c22845d1989db6dc2032d3f92778b441352c406469faad39e69624099baf3aac4b47b367290a6bb98ca704924daede84db3431d1e24278718f18acab656fa18fca0885abdcce116c438707922575b6ad5bfc6441482ca9ca96a1515c0a05460dddde3ef8ebe20a5abec41bc7c2f75b82fd4d89b8945210c1bf30525685eb1350cc3218107eb40754c357cf11e4e7f1d9397012a6253f279787d856d9357fd42bffd1c87d3cfb844c9ee97e5dc610dd772b8555a32b8af1476943a07d33a7c4ad72467a93e39475d6200fdb642d3092b02cd4420070909b43ff3e035b9659a2d593973e6d7167beab14035943bd43ffec604459546ad6b34985973e51f244a303377bd1b54f371652f3421362124ff70805370847d593d4cfd63876867a163225792babb5d3815707724d585d16cbe0b7b702f951cb1e382c45f537882274230d82912ca91f4b23970a3896a113be932a2d94363604bd5dba8af4b8aab636cb5b028a84c986e3052e3af96cef9c8f1c236401e7cd6594513e0571cfadce695f2b01eceac53b90371c59f0bd4a72169438525f736f3f5e9e588302123de4314b71ba490efb0c76637bb297119d035e92839ae0ca96242e8437e281a33efd7ba834544221273f3af394544fb0cdabfd1c19747389cd3b1b7d61e12111b071987e10abbd57e8be965b484e44af56ef06182480cfaaf23036ed73fc735094839481b719e026da5495163599480d8807dbd4995f00a6d26466012d6ed02f9e755ef281fd6e0824ddb481e5b8e98dc90452318ab2d35f5d31f431bd851a3e347439c7f92734b2f97495c7e5718537a8336b9c67bb143402e596947aa5a2136508895a57dda39c61c827c03bbb50dbff63b9300e6cf744078ae3656edb6ca062cab16f15341cda4f52ec8facf924d58326520cb785e6a45313d8bfd809dd51f147508f36294605786bd51abb552471533f8d4d8fdada46d4b6dfdefd2178f42fc159771e4b794f478c8352743e5c87e6dc211ea82df0abc53e92cd1fa6f105025d8d1a3008b9edb865972bc3e8a5be895b7398d822c1e80d7d6a0916bf3df0c5af57ca946b081e4faec54a941a449cb94220f9bf13b94c7c8db812faff2ca565674bb86f7fd6823c237cb48f3ca6322b2df6071c6a64235e1a0bf4437b0e9193db691b3cd6f8bf113a72024af7410fd7f182b498a73ee8400ecc1b000d9ce3885ca1b311600d124241004a9070556787fa209101582ad0946c6c6a0d492c680916029153ecaaec208e20ec8f21af377047d1b2004b3be8b84290e342ee6d2fba12b48990a61c1a22cf17d115868ecceebc9e7207638c6a4bb0b8277408bfcf70957b025518529ba5971894990735897a13de4fcabc7007c60148ce58ef5f2cee395df86630a14abbfa7baa2e2a4502f5b3bc8e68cb0f7ab760c94ca3b6e1f94bc2c36a09d75e85df8613e60809bbdcba015606e1c29a19eeaa03874f560fc5aa2e24bf5ebdd8ec68cd86e366a52350b6445c91ad0f6ea048a3a26cc2e7b786cc003478bfa5bee47e9aeee4eca947b53b8784799f7717b36feffeb3a955455f34790ff917a48b1dea3908714c19b3ae27ab75e2c4d34f50a1754c75da3bc65f61a3f63a6ffb8be7e3532078130e7c020ffe6e3210ce37e97cd2529617d3c26e080c7a21bf239fb803825c4ca9c8f8fdb55e3143247fbb9a687203f87b7a1dd2c7fedf903e993b6323ffae1cff4ad056af3fd6a3ae56fe7710b5916cdd154c50f6d573c0f1b00b5e68c92f4e6c626a25e7dc08e2f458e39c29ecdb25bcb4e494d9df416630d5f242f02db64c58baa168ce8f87d9d08f1472a71e0e4acb951adc31be60648c5b436d09cf225f5ef02e953c354e4dad81e209906afc1a40664aaf3f7f15409be2419413a44f8f249a8d7c1c46510ec191cd019f2e447b89b066254cbb5c7836f648ffd82d2c0af2144aa055dd33f6f5675ec05406bed8e55411664bb92b5fd42071a7930c361e432f170506c95f5b8fdf8ae4f57b54f551ddcd7ad4de6cedff58fca67be8cbe01b62e573f601e014b732b91ffec184fa912d3817faf15fe378aefc600e7d253223cef6802ff45a664586c5d465fc99ec6a3b6a4e268617db127d9fffe11d6db15c785af8277ebef4fdc7869107f5610161d83ea98234df3660a18dbd431c5e141c9c84580f3c7049e4a1600a91115a1dbb3948ce4ef4a5bd7456e5c2f98ac45505d9fa8d8dc257d28369e567f7e1cc1395323bcd567b77751ceaa2b0a3f78dd11a4374423797c36f2c566b5b0cb9d0b0a323a05b5b445cbe2b3c808595ac5d8d76af206992f142c3431ff730a2e07a74e6863b37a2ce1b5fd254f62ad3107d0257e60a720d81e42678b315f80fe3b18b7e69f8aae433eb90ba0b962300b2fd9ec55e5e54587ba50c590741f819c15c5aa8b57f5f72fd47faaa5b69120bbd8c3a0806842f5d4ac90ff2bbd1a15a3efa4313c8aa424ac22b5892883aac3368a4dca2bc17001bc99e60259d54ee029ac11462903ce187ca042259006b7782e53dd89c8c18dd572a328d9c7b0ee5abd12f0a47c75e7bbaaa368ead0868a4151cb92e53a372046b8d3fed703e810bd22478426b71c3aed035d89917b2cf395ea416903cea9a01c839f7f4292a94e0db1143ea35d77c9b16c1db761103924ea230035380d810a68a0808037cbf26279dbd2cf67077bd6f7703d94b95939a69450ceda562eb5122ce228467262621ba20845a85083f6d22abdb06ddcad68648136319494dcb1900fd4bf630aa5c4a9e8ca89d4d29926abd3e1483bdf85da62256aa7fb762f34711385c24ce7b7e23ca788806737b7cf6fb07457b0cdf8f3912a96aaedfeaf8955592c86ebf1e82395e7cea9b8e74a60576c120ce530da14f7a89668ce7c50801bc4813a946d2fc930702ca5076f28581d577cf5b0b235325522508cfa37f16372683486594229b3da3008a46e1f17f2979110d51dcb88b5fa94643b0e59753a96e5cb29617ffd761e9db96fc67b3c13071e9a7de60e6458a4de9736c77c903a8e03495b0e98f5d985fdd1d5191ef3920fe4c0401ffaf42697e60c820b8a91be138b5351385e5af1c5145654cf9889f96f2c9d8455cc70734bc04968b9ea64092ae9e18cd7045f21d145300f1284b2f3f0bbec503f9c0106bb9212deda701ed22052c06129fe5f0ab3b8cd29e7d829814f31726b2ffe7d56b2cce28a39da07cda6efd3ed7104308da46f1ad9386d0b384ca2e5747acf2f43953a3fa168eda7d3e0dbbb03af472cfa7f9644f3ae7600c36da517c62d9ce6361a57c93a32e016320f27939ab0316f3e7b34e9c45e0690899de6c463c7cdc1b2e350e1100fd9d8edff7176fbae9b3bdaf91019bd13775b352bece431a44cb9a10795a2ca90c8f7fb799fd3bd7759d4a83f5a80d2709a61026bf8e338fe348fda885bd9314005a846532d602cb7772167296803a188709e1d8503e6a33c738dbe2681db1f1dc8a61cae7bf51871cb76c751d587b276a38730819823d74e6b07f41b032de11d0b6173648ffdf5c74a76eaad7d9dc29ca9eadd0c00cf52b01de20811eb9144a669d25ccecb1d22e108f77fafe91101a169808ddebfdc88627096a7b7b7f8c27a126ccb153880378e639ec5ec65ca539cf16e4b8f5e2516d8786dc674dd68366b75310987773dc5be97e4a830820c8c1e4ac02e952df56816a729f06da54f9dd4a9b5635d1778f3f1d77d86cf833842595a9cce812c1d3a47a9097e79b1f94fba1ece62458c974d7567b5a83d48ab3780ef4d3358c8a39515146481b7a06749bd4af45e35125d50cf8898f97ad0a4856901dc2e1b37e58502ee078fc3d40bf4b7608bb95bab3a55c569c4122387c631a9fd6dc2e26bb3ba6f9eb62ce8f7467d437f7152370a4dd303f22c84c970cfffcefe2ed89ec4e9e2e807ec2813c9a1d6b5acdebc5fe944ed2d858c1bc34a400725c4f9438bd91385375471144b234ff94350db2c3c915294e267b6ae80fb0593967521ea03e67b92aea52a22895c8dac707ef0dd8630e1d8ac404a098151cb9bac353b725a1d5acbae7a1b5cc5a5063bd7d55b7bceff9ca7d704f8eb2e6cca853f22309d8723797ca2416c5c5a0cf4c2aedbd2e2837a96b80f5bd8823d1f6d80719f42ca76fa9f2d316aaeb0b469f74c0f499e5f4d3df49dae1489e6e04ecfe23821c092ca13e42442ff3870b9eead4bebb80c5c68d7b089768f8038943ad2e1cc9dd4e1ef1342fed5845b936d2c6c3a72dbd9612c7d1ab4b99904a57f889d059af1aeaa35b457fac492cbb34e2b1d0f33da3cabd64fae142c014e7008e43c13c15cbb0d7ef4b27c1b79db8d59cdd48078da274015a142e60b2bb1350c4a2399da72469dac8e1690f481a3f72bf39e7d915422720046fc81207f08e8c209f398a58c5f0080126e85ed0757f0cbed0820f0b450fd10b401cc11775fd325c1950455318e645142724d9cd08a1496373fc4fc6bc84b8fbe462f09c51027187695b20f7a0cb210dd835a0e9e76667f369898977b865304cf77d6d59bd43862f5b7aff8ce165bea5dba83b15efd34f83f6f6f1ea3dd9de584681c05d1b800fa0ee7dc2396d4e5887177ecc17db23b997b114a274941526259f57e8499e0099f0f93cff986f78e1a1e70839ea01a545eef9a0743ebf11fa29ebc203c84b588c620413a6158c308b36df30b04ac0512b07b8f7c835101e7b860b50cdbec6cfb8cd156a6f1c2e23dd01276e4032784ac6e6c0aeee0792c7df23b6459b88775b1d8f48cd68fb6e96eec69128bdd62c91cdaa95a4915486b43f4ee3f0b2bdc65fe2e37bab5d3e1efb60d9d72a5c56cccdc24c4a65b9592ccc1762cb67331f2787f91e3eaa1efdba561adef047adf38bdab2403d7fe86507f978cbe15ef8f75a4173945e886622cc5ecb191525cc80587036654a9c71c1c8cd0c7cb54450f0549290c90a53e6a2ca6913866fc9a983a5dd0e42093ce7321691893bc06680e2422ff3db139c7af9b151b19bdb8bce6b559145e9202ab508aa504a851bb38d67390a2bf34b6785f2daa1d81d952d87b1b3798200b2434713bc027a89846edcf054c05ed9c5c337be56de7d039cce825a71cdd9bdb5ed7fd206369fd38a21233b4bcf55c0a8ae79a8d46a52da08af97cec2ce0ffa4910709389089c98873564077063172194474abec95e9f41759f0f7d9065f0ae30bcae4026d096302500b5b262a31010057228bd5577e0928ac9cb02def98ad3d1daaa6eac50136b1f527f9eed2baafcf485b5e1475504db0dc4ec7a2cf32649ef06cbf6cfc86f30343710937fe3516a2256fe49d8d64443742321e25a4effaa181c49d24eae9374484d5e6eb8c2e25a581dc350e98fd23615260aed4a7003a916e04124431cc411a8f3a883e97387f8ba66938da1c476faee0cc968b0b0a088bec14bbf6f2cc046ff67211bbdf4edace8a96b28f0fb6d3c8164bb2a6b979e1f5008f983beaccc5486f9b3a212f1d8dbd17e05345552de8090565645702ddacaefd67ff4955ea9cd23fd7a5db84c9e90fa8c0bcfdb31ae5d8e8ac44fb76122687d64b318986e65c30459becd963668632564dc83e76d38605f29063ce452fe47a15c76df26c7733db321441e75a044b64060ec1438b49ce4d63d3732fdf1b6c011ade2da9ffdc4c11b7de01b8ca2b13417cbb5a964673624d438324ec1ff0e83847f7a4e32f0938a90e35b36253874a39bdc34886ec0c94d96e88623e3048003d1fdfd8f88e0c0afb066427de49c1d803b7ad0263077ce02edcc53b5eedfd6ae70372b2d954683addbc274583d4d0083ca0a5b925500d90a594f705653e460a1aa4cd81ee80b65d2e9357124d82cb5669cd86f126ebf7f3113cb1ccf26f09badcb3913beb005fb75caef26e4d65ab554a0284b4322c4d8ccc724aa1fb755a499a6250017e4f5523afe01127a4cc9865a75f6622796cfaed7bc447ef6c547e2b367a0190d6e624977cca0772988ab0b219bfd2dd1c2345b2204c740d3d530967415623f79628a8fc3c70ef5d2381e20c9481b43f961f810cb99ad900093a7c8dabe1b5059f79a86a5f5e8dc4b92b967817c6d69af8d1e40baabf98c1e721c8ac74cb9b755cad7875ae3cda86e83f1a339a0f6101d5c8ebe7b7ba8539680c9b1ac119da97fd9b1ce994ba84fb6e4687843e6d84976f27d746fb55678f4be0fb1cb7f4633fb6b983a4db68134b97c1f79f935c6111bfe009c29617ce2f9a0b48d052a9da59d0a8ca6c277a62ee497ee91113bcde8f38d63ebdef6d243c34000b5118c4119fba1a7307d32b8f668444d2af708e0eaca93c5e14bd4dab1568500ac4884edc92b801cda89a9d8b8d9ddbf895bcdd2457f05b6558839e81f562b466e645b4fd5297a62e686e250cf37bd6058972db90fc71611fa9314db52fc48e641acf8bba30d113e3b7e3fa7b3b464bdc251f2398dc9b7e493a08e04754aba8297f9e5f9db3678a77032c752128d3ed296a5bf1804510d848f33d76e6ad1dc730ee184e2bf18f3d8c5e684d217758ba0c732adac76b6e890ee0c0c288487a255b75cf8709527e90346106ac55ef02fba15b3b531e403f97123a27aa08aadf15b7f900a51f31c4183b8662bc5a4dc6e81f49eaa74afcceac883e6f4e1fb77a6f095019c9028a1a3cea5938030fa09df3856adc1c89115eb47eb640182cbe70690e908197e871cdbb73f1f1945c0d748635c513444d82641f7e3b3875b9a5265124c7b0af893707b1de33c02f74a27b6c5b2148c7580b4999a56692855ca73caa90fdea8dae19c2d364913507622904d6ff1b2299f5e27cccb908b7093acaeb491bf76e95f60c42271d999c99406bfa955c073cc0b76b3f656951f4996bbd2137563a1908c5cc1d6033a608d681534d3ee28df48c4e60f47c4f622b0cb850e9ab69f3f48f961d5724d1a368469d78cd2f961998b36b0bdada0c425da0fc335c8cb3c72495678d9c004ab0056e50397df8519d8334d8aca7db356be2c1e03564d9deed03b4d7cfeac183535d13908eff72a54b376a85779cde189c9ccef1f0e7b85dffba804c65ebebec9f84d8e15dccaa3a1ec658324e3b57b83f727b0a9a56d53cc83b8b77af40e911494c07f71372ceb42ebf2388602cfb8f470ff8eda7541927f5748fe7d46c826c73f22c8dd737941fef75edd99f57aa9d98b7b6b482e2977079ddc42cc8c6503ea4c727a5b205232e21c5967bd957aa27a02661aae2f53349fa287d1ba421f74e7bbdf68ff563d696e8bea5a54d1c5b90bda216aeaa25a6418874154b58330b21716bb8bc2716dfdd9ed04f9d4c1274c43017fa01e85149f96b4d026522629038607a207c207ee5ef6be7ab956dcd511889773be3143ca5c7eec65eb8975679badbd3bee0d14b8c71db842a1ead85d82689b3750b881c20d146e24a9d96e4958435c8ec3989b09ef8e1efddbcc593405135db03043ca183af8c698a203135ad890e507a53f7769204bff531d3bce76596e5c40a2ddd45fad6f4893cc4ed280a24df292244d08d14834fa3e91080cc3d16814824a883e71890ae3dc3aa940fbc6659024499e7ca8820859a188917a2fc6b7ea7ca382999ab383f6c0d826694992244992ec82c44aa552a982082152c402495850d2c2a98b56fd40a1a23a1f9647026aaa744d39a6c02b0f8bf6b1d6fae984dad34d0971ff390909430be13821ee28bd49d8ee3df766b5a96e2abfc88a607d92c3179794b38916f8e0130128528ed0451851967841e90f8abe72effd91ee45a393fc5dfeee9d783636739fdf0897bbf7c626f9bb6fe25d1b8c674892286921dc417c8664c6fa6ed55a778c9d54734d49aa28f47d558dab52a9542a958a2ba3c6ca4bbd541634a371f1863c9be7c5bbe595ad35eb5d7a3266d43993b4862995c2ec42ad5858cdf107fa19da7aeb0d7aad9573658eecc6136ad0f66f9a3aaab4fd3d99fd61bd9a37bb2930f552d616455b6a8e8c0e3adde30c74929bb225f766de1c17c5537a74db3599a71469e4b06c1f392ba391a3d275e083a367c54dfe9e15cf0a107438dbf6c11a8445b6edb8a4dedc76731e1da0b7b5ef7d277ac08e362adccf360bb85d67f715872c8f537b11f083781225b44beb567e03478e7371af8b722e1004c1d14bafc9df8a87c543bd283c2b436423b82b23cee5a55e9aa669eaa55e5a6325721ae8bdb7bebbe76a6f6ccb6927b9cf4e728f9de4acc88d380419085264e7799eac9e962b0a1598153486aa720ec3cb1a85aa9b1a8dd84dfe301cb785ced9e2f31ee440f0074a386057371b48e53c41f0eb605c341e1af37ebcd49379419e9047f3b87835cf86316661178e0bc762b1f6e220b0cbe56171d2535ecc4b7172d49477c54371b61338611882254d9bd8e59d32efbcd73baf775eef3cb7ff015abacb59973acffb71948932215675ee4675414eda3cda4de5db6a7be81dcdf76adbdfbb63e984ee824a1be812ac68bb7348b922c6ae6bf2afe1037d020d742d3d34470ab4d90575b70d73cd5c37e5bd3cd4aba58eaa15c750d890221e6a5127bb010869ef456f539827faef8fe4f74627dee7ffbccfa3c3f28b5c099dbdb1bbb1ed38001ee8271eba8536af0c9bc8d143afe87a4de9b52ec336b1ab13a29afc893862091814dd1422db115b04dc760f75128b16daac370ff55026d6e48f828ac29cca48143755d00d04419caae33855c7e220aac97f886c84bee2f250ec799e87aa8c0009f23c1a5b6926f6a11ffac5be9f2ffd645fd027f4d13e2e5fedb3596b77b55a8fc2d036a21dee5118ba62eb30adfd43a9d08e42e24afd816379a05587d3b1c4768fb35275eeef38d51c118efd3180cac3dfdfd411de4ce657cd7127451b8fd5069af4a11bc716d16a8e88636311c33668c3d53649314cc3469262af9a8367356774820cdafc5012fdd00ffdd00ffdd099d8a7826bafb59dedeef5e123fbf0eac347d5b9290b64830a507fd82ca9aa63a7e03c5bb996179b932ba839f1a0cd9aead40d5475ee777ae3376d15dbdfe2a0fec0e394932cf3fb8f49e829f9af38e5fc328f16c84dae42ccee482250e6129c7d1fc87653fa960660a617a0f7fdae8eeec708e9ee4d1f4ee2ec204d9c5defc55dd7cd8477a482fdf108dd8935b64e53d908b4d8800996161866d002c60f961f72600d21861bca2eb57980e8f31f111d6192f74f5a4a6549f0c85c3013a30616b89012c4143418fa0283b2f3d98c46abd56cb75b0a29500a84839a5221054a81522022e9a591034cabd56ab57a5bedf0b07a5aaeeb79b7052c0070d338d5e49f73cdf3706a1ed77d0a767bdf10d1a760bd589b93a31d0aab6dbf7d9bd26a88ad0d79ea024240dd2414e4a9070a63abd50a4a762f56a2504163ab55a9453d58396d76adecdad4f41e1edf698189ff78041d864440718522a211afb9cd879cc4c95ef35aad56abd56a34294007c2591e84390e932cd53551d1de843751756a2c168bc5829ca183edf57abd6056d0d80f902c684643dd31c7e15c03208436edeb45c5fbd39afc5ffe2215a1f336c31cceb305f7f57abd5eaf6f8c0f310e8273e365b4d0ee1ccc094a3c16da5499ef75dce39448887d99d771179b6cc6010d5c2e97eb45058662c95163b35b9d255291604621f8895457f42212a030ab4dc5591edeb7e0369b0d0339cd84aa2248aa750509675c375c382e970bf4e1de5b6b8771e761988267efb45eee6c8d555a7e3b5240ad3649cdf13a0e5f0bc462a0100ccd5608f63c0fb3c085cb10214e3a0b322e98bb188f14906d386e6421c607bd44099722325ce40158b685b3417a05224350fddb7ece5a8f74dc6abee95be9f6a7982aa441cb0dbad07283208ee33acfbb81149506d5566bafbda8109ff13009cdddcb390b77236731b6b1242c2869c185263217db20616cff223bb6bb0f4779d502ebd9234e0f9afb2448ee5872b222c9b2b7eeee5e9d3cc2fe8e5a47320c51a8429bbf553e545b3c0c3d0c4096188fc7430b582f2b040b30c61c87dd437c56da799ee717e1f0b5a2db6a8787d5d372b9bbc790a1533737373737dbdfbc89f172a3c443020cd69b0207f5e734a456cc71b8566b44f5513710b12bd602b1eb4f0d03044244983df384fe49c1dbd88d49bdd5ca64b573b27a7c5c515eb06aefbdb7d67b61764d9100842ab2187106cb8b1ba42a155fa4d880e0825511a0a49a20838a2b5ca2b4208c32e5811a7a98d2051954a8cc507a45b2835616fb8e3f9bc41952e4d445dbd73521a9b7de7a2d8cc935f968b35432b26307da54edfcf5d49cd910b699b500a5dbccbb02d9806a7b668c6ad3a127bc7c51ad162886ccbca1c8c10e3634970bbb3cd78b0a0cc5f29302c9bc19be3b76ecd8e16eedbd3787a33d311eedceb3ae4f29099d8908b960755c315731c640be1486feecee388c02142ea0d88e1a038a91c504398a46c3c553f6453314bb29ebe3e331b08d45cc8ce6dc629bd8888d8bf05c31339ced8da00c0599b63c78b42e2b4eaa76b4496e8b5a2c61e83c5abc63668eaa5a66586dff18a1189a0c476cff182e31359b8be5c15e1d19dbdfebc6b03c5e801a1363a7bad2b5ec74561c657f6a8ea36c1495f4e71a80c3684fcff5aa6204a6e28822a870dc4ca775e8e5ec715dad3a6e77a4d41f31409687571dcc8d660c15dbdf04ad8efd18a1185acc0cc8fe88e122a60b2a7044ff34b39ae337be3b964a2e1bfb4629e0d89cade6c470ec4b43bb36ac98196d664673ae6266fbc78e36e66409d5a6e78abd3cd8bdaeeab93c970dadc647d354aa970bb32235c747f687ccda97181a3b59442693c95e40afd7ebe542113267adc71c8e117a1552acb517fb54d1c3bdf7628e8a2f55f0ec1927df34c13ec1be230db96aeda8fb886e37251aadeb7673ddaecb6583b03f44b859d7cdba6eb7f1fa0d9899b8bb18aa8e10550709b67f43fd617dac0bb6db6a9b76a3e65871b43bdc71b61b555bc6068a97954c363b790983ac83a91cc5e14f314004db9c11cbc35f08cf6a8edd627910da58b735d876a4f46a05c36ab56bb460a1c25d0be4b2403e38d9763ed9201e35d9b651c116c165dbb7fbd6128bd8c927fb8a4fb606f74ddfac6b48bef762336a8e0f77b3027f97cdc516225833aa8e0ff647bedd722ed9501445633fa92c4888c6a566d3ac9cb52e95fe49d2fedfc0f78e23e0386e9bbf89248962a3448952c5b428919bf2328bdec6408f59741303b44ad167b1898d41871a5a659317b2114ad1bfa0f5b56801f078da75c46142632731919bb2250846175709eaa0f44f52d37807105285e3e34f379ce47e87932527cd70e3cc4073a3121ab439bf489447b4f4c62ad68e185072d2679cf4d751e87f92440f125b78ca6001cf0f8c68b92204296400820f5bca1c3f7cc1810ca8d0608c970e72e00450cc0b16225a505a2114dd720575228b15d846430ac97ec51982ae6fadc53b52a0fd6badb5569cebbbcc2a4dd3a174285d92ded492a17428ad431cb7c476d166b541d45437fa594b5c75ac6796721eeb1537a21b7d8834f5747653de68c3bde8f3a364aa4e6757d7861b6d1ee07df74644e4e86977e2427b1a0020b44d912b64e300d870a300c08af4be15dfa63207b2ab2a19891ad8289ea6699a5a99150c1530b47f25a9545885554184102962c402495850d202beaa5b44f955992f3416bb9dbb8c319e09bd1d4a685365ceec1df789c7e2dd4facf61d6d5430abe561e67d3158470ac0a3196efca20c3e0ec70a8e26fe2e77cf7d9f582d8fab12f908676ee0ec20d944b7fc640722a0d0e1872e57a4c0a208183c8801091d74f18396995057124a98c93368bb65b2d024497a3b20c65f57a78f76a77b6ec683f2658d9098ff380af4b68e1a25fc8ee92f05d0dcf81ab5f4c4ba7588b55ca1e6e022331fc46570d0d8c6dff823a52fe16dfc8d77d16601fee1fb986e17fc7b1f6dea931dfe0a456ab69b0e7147fcff1ae2cecdeb781a7187e66bfc4814abe47f11ca9724fc8d5845f43a44285fd67c0d11ca97364f239e5fd63cc641dc063989f1c3fc8816b4f14e15fd50bed4f178cc525116e6645a75621ebfc37c1c457a6c65351e8b8f6f1e7fa9e363a8ec44d9232a89df742099bf89fa83c46ad0f72d8dc6e3b75c549def6988a29a437a2bbad06dfdf65db45b8b537090685e469c42338e36f7757c2dcf2f718c38afe38fe0bc0e13de898dc7f9232694de84af650d1d4ff347743ccde8a48a131caf63dcc941fa23355ec7eb189dd07c8daf25e85a8f534c7891e66b398e8fe38f884f333aa179f1718c4eaa18a179f19de0f8f16b7923daf89ff0b57cd1c6479b07fce7f823377fc2e8a4f4379f637452c548e96fde898dffafa58c3825c7e388e79738af03e7cf2f4df8ea3ece12454bbb11ad2d8758bd00a318237a1b47344174d7111686de94c3aceca6621b633c8ab514c55abe8c58778ce86d2dd66d6556b6f1d7b0230966b45446fbba1807cd8334228ed2c69768441bfc4f4a1ca28d8f223042f3356a8c4d4a4f4a08cca04b34632d6dbc59dad8c7205ec59f04b18ac59fe4a6661e7f0b374563564f741f27f187a2c740d17f444f6b0efe926869d7847f8646f4d535e12f4174d835e17711bf0dfc248837c429a51789536cbc2d8dce12cf2f4b5f238eaf8ddf5d4042f0e392b7457557afa5a79e98b74e7587317e61e6897699a15aed6ae7645d5b2b7967b6cb581e4d62bc90e2f4295f40009515b04aee9b702af0a17ca1e68a92fb5ae33130b3618605bc00fe20c618e35c2d20637f4ca0f2a8c00c929ae36fa30b6dd2d0d81fb6c6cda5b934343496c70c49ae41de39796cbe375ae8bbcd5087176d7aab7553fef2ac430b6dbaed44c06d6e5ce2057cf9f4fc17ebc50ed59da370094af222453d589d58f7bc2bfb83c55ad9fe224f2abbcd908bedc27dbbeb6801debefe729853f9d7ebf57abdfce5afd1e983a3b0df9fc1b16b03b89fa939f6ad738e6b0e77622194ace6ac393d255ab11cd5d3f2548e9a2835546a6035566ad09a186a552f386b8e7fb3a074557376acd0f6afd50368a7edbcc11b8a4435a768df9bfa6a54df68d4e3b6bf7defbda321353352b4e9a3858a6d54cc04644a9dc4d804349a644e9a520e63ee06eaa4df80ddb0d272948f0f978f288eea5a353d353c353527b6f8a67ad42e57a30256cd596bd8d6dacf48aa0e8f6ddfac42db561d9a6dad69b16c8bb7fd1a1b6a0a157393bf8fd39ed7643954ace644c54c402699a3ecee21c4e9cd714f7aaa87909bde1b0de170aac7ed9afc91549d70e3aff68713014b8176ebb44f34818a366b7c1c65a2622e4799a69ab386a78655d3e3a9ef513758db1f15ab3a35a7407f23226068470d18c184a42ed4638f1eb61e43e70cb4f9cd768fdb4dd59cb71444bbe64c429b524fe98b92a27b08790f2e3d6a37650a3209f5a89964a6f49aac28da353d35a70931d394ee9bdd63557386c0b44932a59b4423d5b67f0d0dfab6fd45a21103f093bc745b34528164db3567cd59c3aa69d5b8aa8ead61d51c9c3cd69ca6d4243301d59c5c4caa9ab3e6ac396bce9ab3e6ac3951b2520e3f74d1b55af985b65ff4ebf57ac1aca0b11f2059d08c763a9164a944e4a6ea7bf592f708066684f18fc426066895a34772534d2a14634c818dc2b7e2e848ac25cc6824dad715ab1503c03a02b998d0494be5c171cae82d95d723fd4534d6119be15e12c2c08c428e13c91d313558ed9cac1e1f579417cc67347a252b695a01003675026bf2ff3e92ace4bd1c7731c7812d3b6c01438dc755bf60b1c5862ab418021267e90f72b672600a30a13170b081e5431349ce1892214b0f6240430ddfa7012bac407790037a031859c6d01665c4a0872e5d884458668320a49881194f4c5102894c8c340b3286c0722b7306400ca8085d96f801952c0210ea81093164a8028a8fe779fffe2726306226c9307413f830a95848200cc3f0cb5fa6810129e631bbe3a5ed5f9bfb4ff61d4dbb75e973d6fa79fec4d2f82ef9a19b92c6d1a51b191de83bda64d9b6590049b6ed9364dbd2a88571850f7e7ae0a5892744a44378d1a289d51734944f6290620433ac78f1822382508222c030c50fc8d819e207a53b8e925aad56ab2989a272d41d4dd52e21a1bbf79e74f2fe2904f60875e3b10a917ec9c2139ee119b2c29e56e80aa38454422b610c5f1c1c1c1cdcdddb03bed8552dddf18031fe6eb43b1ec77d270ee1baee7616b5d2a1a330f4e7dd3be2b18811f40a4edabf21e2a415e2a47d5c71c51803f91267b7e57064402a1eb4ac0b02476168996de258f747010a2fb5978ae774b263c5f478aa0302f2a96d7b86e67194b944b5efe374589cf4ce8a93f6e5ada0c07cc84071a1ccf0dc272b64f984ad2e749de12bb6431e216cffb003f2b2fdc398c7e3ad68b90392590184c2959d58174597a5fef0569687bf0e8ea19322e40959365c41e5e1610e3178ce4c701c3b8c9981ad431d6fa7bb5251de0cdc383609cfce4b57c694ce8bfd618db0477465dc28d957a97bcde8f0d431a7b70a4f10e6ad6258de8a84987dc5b0f08b9b3171d2dbf156e1b93d3cef0d59612b74ddf054856778dec0e0a7d3bd5765ba9ce7795c09045d6df6afbd2d74b66ab3d6da18b00b55fed8d68283b799154e1d55f10cd3f090177ce356eece7274060599788ff35891e883b8ccb9c11bce781ec65eae0fb065c6387594ccfe089a6514bd82df09cf828aa1cd306b6c3b9a550c91685943a6e4b282ded55aab77a2afa2b1c90be44d654bc3c62496d59c5377db9cd95e99479ca21ec38253df8ec2a04d9ca238cd59eb5229c5294e674094c9cac330fcd0bb2eac29114709608bf67886c624ec7fcf5e177cdb744fda74e3ef181cf4f3e0a3c318592481d6c0876460018f1432308c483d6901f185972122ac645a5256082fd8a2062eb001684be91fb3eb6888683be9ff244e0d800eff44d2344d5322a2170d6b369b755dd7755d0eeff4582c94ebb674b31286a1e6946eaa9bcdcc92131adc6669c7364ba5d188e3468eea849cf45447eb6a239fcdf06ccb9cec666747b33f1c86ebb1badb0176d0dd1747d57a6f47eb4ee369b5fac48e5626a1ed168d68e66633bcea6678d5cd8cd06695551d2c026e8b80eb84ba19167ddfec9cd0a46facf7489dd5540d82173124aa88c1c50e8850d6d40953cc70c50d8a29426594fe5dada64a56f8c062228a1c7240444d55287cf04508ac9d1f2c6ee0be9b75b44ee8547e71baa9076c397171ea722ad2cd66b3d96cd6cdba190dcb8b2e3ee71a11d98c06ebcae86cb5da9a6fea3f5fd1579d8af1c55ce765d1078623181289a461ecefa8419bce5dae03ea7e4610f8be8e8ee0f21b9bbc5062da35f90b018a172d82d841acccbec417aceb850c580c9371c512342e1489d5cb1176661d0c600003cc0b45a29df28a6195bd4851516a468feba32106140c45623dc375c5accc2200bc28c13026036b148ac46a23428c5599459f024b09c2c06818fb3a3b53c0ca2c8e4694758467d8310dd330eda672175cab3ad67bb35465322e8aa78c00619aa93231cd5499988632552656f15005a939ef98866b5cd24bdbb2190d8f7498a16f678b6985eeb98665165a490ef2b1724807f16fea6de21aabc66d9cded4855d589aa6b96ebbdd76533ec58bb84e83264e185cd64d39146bf2c7a1b583bbe0e533c050cba5e66c4f595cf7e6b54287ed3da5dd89984b7397332773122873e9ce41d8b6e71aa5ea786e59b443bb56ab6b712fdbeb552aa569ad568399b965858dd2f138e9a0969ae3dfb56e0a1c02884535f91fa115d2d0b54215b4360f68183f786df10291a839604f7a536012d654bb2950876af2a7a264030d3291562949d9fe35f087daae43f85a9fcfd7eae9585f4b64691dcf761d6668f36b7d585a37955b5fabf5b55a5f2bb7be969d69b15a2d1bb27f9d7ca8820859a188112449aab59c58cbebce895e9e06503d8fa40d817199efecd2f47d0b8a7e4a7edb332a7193bf126e8c91a8c06cb5b5de2fab9d93556f45f3bd98e3b0fdf9f9c925f80fd566515349acc97424b68fdef42adb5d4a49077dc3f7a6f5028c6a673f51f48f4dccd7ad9fcbd075fb65c77962f4850947d3c236f8128dab3c56ef494580a302be6dbfd49cd968dec79b13979078afac90cd9dd1f414da9e76c7490030a1cd4abbf7660e5f0b4335f9f76057b3598cb6313e00efbdb5859c73ce39e70ca384c6dbc4f17ac726b4a942dd70d289a06e2a59a41b85c01ea14811ee83b8ea2492d764ff06c8b62803dc7bef55a9bc22c0af98235193db40dd4a62d1c789f44a96c49fb1556e8a0c666015df6eab9d93d5e3e38af282559cb3d6a5d2bf9ff73cef253dbcf89f94a6b7fe74f2d35dce72d05a8b39b2a5effdfc411c8b1fb0b2ed81fbf9f34dd91821bd7e3d36d14f7ac163d809a2acf2a4f4276d547fb122e0cc65ccfb570712f3b8359ab886039c6419f3660e20a7aa8c1931eb9ac0ae0c2cfb419b18c851dfe3dbed757bdd5e637741fc7d1557d16848a762e9cbe137ad6c8fa6956d7bbb39ea4bd5d1313646348dd7ffa424893646649ef44f4a9086786797764da28d9199a7f133e3a531e66bfa5e46b431325e99ef8b19afed9ab00cbfdce49f337ebdc52fd34f11f759917bafe446f645a208b458cb2b724f126b99457389956d1c9385d601111beb3003fc213a6edac4b7ed3e8eb237e5e7896f7e9ee7cd2b5de1dced36031b398d0cd6efbd959431c6b884df2c29a054ea4aa552a9542a7558f0f0f088563d3e360acc0a8ac5fedc7bed0dd5e4af838f1d89d03b49fd01720004d894c5c1f200b13c4036101e20301c6c6a03d6e4ff7d32323c5c2c8fbdc1f268e06481a7dec073b25248fbc35b1d36c08206a0d81fdec9858be779a552a9c4c333da01455134f693ca8284685c6a36f7eaee3244686efb3b9aa26cec5bded98d19437be3d5faa21dcbb66c0f8ade9fe9b8ee3e49d9989b7cebd8256a8ea38e722f40534adc5935568d5563994a3a90029e5aabb55af3aef34e54927a2bb238a1a4ebba7f1b29b5b6566bb168675c541f55e76e5b05929a33816af2af3515cce6a8cc8000a2ea582b44457528effd2d113555aad6de6d5a2076f74f826af23fc38bbd309c0b334f682f35cff4ac347bafe3663316182f19179a86622daf871eca6c89e4a69a58195ce101ab7ca17eb961cb1525a989b5a17cc1d6a0247dad66730bba93c426b6248547605eff91d187a393f047e18f468b8e1ee60c99077d6fba4cd4d92ab4e9b2d187a307c9461f3e6c0cc77b5e132ce7ceb431f3b2bcdaaea3146ecbc932080fdad4fb7643d8feda57dbbe6721b0d2ef1ce7799cb6bdf7a0e779b6212775cdf1ded4a30f9f02a3310c51184f246deb5ebb265b7843add49c0513e2665cf775735ebb26cfa2317bedbe7df744bd2d97bce3351f92f142bb5ed56a351957a94aebce66b3198d4bcde60595e39ed5dad3e9743a9d2e5aabfd9f94d8d39e5ced543b9db4db9ae779b5628ec3b57a8f9bbc474a0f26c017bafbba574eda33dbd86c1c4b249b22d97bc23c6d9fcdbc0bfec0eca5c2d1699ef778cff69fc1f6d163201a5f904fde3d659cd0330f923909746796e63686391716cba362f13ccfb7df93cf66b3d90cbbb0cc663355e02db3459336891b1ae946baad764e568f8f2bca4bc330c6ee1ce718e3bc4d7c2f8974237d71d4b5a4db8af4c549d24daf2c26dd2c1abbc1e2e40dea37424edec46ed09b2b374ad8148908a41b947483926e50d28df67114116c4a4745baa9483715e9a622dd4866dc917423ddbc7baf012ca022dd4866906e7a05ba060dc3f53caf54caa41be9462b63063472d0d5c92d6aadb7de8aebbd7707093e09c1dd380417630f07b082a4efbbb77aaa5a17de410e76a8f86253d6bdaccb4a59acd4b26cca71dff77d0f7edff77d9f7fdf674210eefd3e11ffedb88efb6cfa7d35ef3fd1ee2dfafc5eb3156d368bb23654d2ede9644afad947eed1b62e95a1ce054799f63fd1779fe8420bf67d7759e49fadc2a64968f745d9eb3826df8f563195fc1e1475cdf99e2496aee93367f6f75aac170c4744462008822410d4201803823220486344a46e10cc3567890a07010f89700d0701db426caba3219fc87d289a4f36d77df9fb2f1cbfefb615b1a0fa73252c8fef7b7b2dec2a61795c26fbfb2b7a2c7f2cc805ed27e610783b0fc9226b7b5c512c9a12f121c4c93475d6c84b4ef8cb5fd5d1d80f902c68460b2fc7ddd06d14d7189f93a864cd5706b1746866000000100033150000200c0805c3c17048302417e7b13d14000d63884a78563e9887435110e3408e410819630800000040880142686aa80ac09ed55e8cfc97736bd682c7e1413dee79b161f17644c797f78a97cac80d28a205136640660897810b464e69415c528f662294e00a9219651b0f48ae6e7e0aa0b3a99ee55c96a6999b5a78cd92b3b2bce5ac0b14fb50f179eb1ac74f91e4ba8eb314045a5dd7e92e05a96e7d8bbb49b9ec225380479b21499d75b00a0cbcf46dde76a986c2c84f8705b34ca94a8b838fdee80b7bd7378ae0c331cdd1e62c632f7936e9deb0291b8129daa271773a470497779c2e84cfa5627b41dae3c55547dbdd0b2a43ffb504eb800ded65fba3fb0f669ea0afabc0e16e43b3880439bee6ea1fe789130f810210a8a97f0a9d90925ce31db2ce7c3901005afab3e822895a393c6aa99cbeb995e3c945625350a160f610bdca6c1515739d7799a12bcb2aeaf8fdca2147e8084d0e07e53425a9e5aec86c5be1c85317a201fde41341424090d1921c7b345265334c8dc5e87c4cd1c7e017f981252d8df8f04e6a9fabc276d2e68ae8d0a52644188fc57c83d8747965e5809704fed9b5c31315c62c4ccf5c89d7a5a6dcf1a2052073f11da5497a11d7846f0bc4b983eb736f790803746ff5989ba956fd9fa683539f1292bb5254bbedbcbe4a26a9b207d25e64c1fb8e5581a88329ac0313cf1ba7bf9bd02b7896891c7462ee95ac860d998559569145b9bd5ace8fe00b926c835e5706571fb88ac5f222ebb39b9a841d3e601808eddd93fb1a63bcf577de841eb52bb65a0a5bbd72e65ca820c0568b79719fec798038561ee640dc29b903aec06f228a865eefe5e52e228ae3e0f3a0158528a4c8da470ab628658a00a810478f337fa55feac62e40f2e1928bd980350893e4bbae904b025b57e5218bba3a583ee0f360b61e6565fcd56dbc8de68dc94fd5f77afc1023766b206881bebfc3738eec0ccf02a132a6e5b60a6b21ecb45b5bc26873c49f0440d3cc51427fd1af3a16fb0d028bc09c8a1a1b05d6b26032eb6d58b55e3f2351d43be853459dd46970c7b5dce4557aa3c92ba93adf7ff8b4efc981773041c0bab6d0ab199219596aa2e4c86c60a9bc7310042953d5e576e2a9a51eee75d1ee04397170e633d50f8aec257b1804760c094dd9a6b2ffe287ff8bd9157495a6a0aca694a4722379f3844232fb7a7a7509bd9b7f63946f65be857f231f8d54c6c988f433efb2309c305a49dffb4809be0da8c3fb4452b96920e21aa84e9428a1268ffbdd87448500a020260a05e0a85a9bade25df25ad84e1026b874f746267a2b64b714f427cbdcca41392669585c79b68e34b049f9d70722b45dee309df1ee4232b38f2ed2953d90c0f3f137428c2d6cc4c04c1ff37528150ebb320c898582ac6f8e199f0d0bdbdeb8341872a2e73f98abd0122098c7cbecf04c04f695a3d5447beb224050852052205bac74ba7ac9b9ae5e4adb8f8e384194c6d79586bc40501c87b521ad95bf77584ccce0aee1eda7842f980444781ae649c061498143a4b29d5c6f59153619d89390c88aac43ed1c238976cc5b074febe6f363dc91c12e9a2f7624425cc2b7e9bd29779697217f1c9806f9edf084d1cfb1147292f2d73960602dc51af9f91cbb6ab1a805e41911107f417e99f2ca9001f0cbb3ea032cfbb921f999449fe93b636310fb18e62ad58111f87995b5237e25c22a04e1029699a105022ca041db41b4e03d699cd8d840838b7c75e853a890356804311a5362d7f96b080f29d7e820c89aa55a5c97e3d9bc741bd89df9e93e0039d51d5d6615c89992907d94a6e1d79622503ba39dbe56cfc58fa21f4b4ce07cb8e6e8b3b675b1a094c5b60c75a3e5b39765334a22bf6070d7261ee97a3168ec696dbccd50ef7ae154f13b8da4620371801fc0952cc82f61f6b0c2ad225f3e9ff96215acf033bd0aef87edfe409aeec668362a4d8cbae861db324eaff214675bf718659a4fcb4c3248933cce8a5510c506dcd960cae542ddc1582cc52c62bb43d7ccc32a5f86c99ce7abf54112f4ca4c33152b64639a1c05c0d43dcac1c633b81ceaf12f2041c5d507fdf5942440069fe05a7eb8ac2c25ceea34c7f1f92fe32ae3e0ddd05687178058aefa57a9bc2b72e9f66a3e25ca1e2acd5a1e0232467564bcee7bc79bbcbd3128e2dab950907bc7235fdfc567452088253ddd83a3360bb75e4ac5fe9302d3548c2769afc5e78850b19d92c0409148c9716fd78965fe5c7235cf8d7cc5b21b123228e5cd76033baa7d467a150f7b25ace83076ec6535b9dccb8868c0e7ee0613cfe8115aca4191bb2a5c0d2e05875d38276c2eb9b82336dc586bc3d9484dab304414976156a962c8073f5b422ae0ee4b1acb5150d9c2c0ab5544fb7cdc4a1a271e10aa3a1b401a0ae10ad020c253b6bd4b4b8106b8979c801544aff5a21e39d5a8a567682d8039acccbbbb4ec21f0ab56c0ec5a649a4fae940ad038e748ee86ad3361a326ebd53a2951d1ff3dbc61ae017f63c76f665650db0ba8abf6682d471cbbcc32372752b3744d9aa094870efb046263bdfa8450a20a204929a80276100eced16aa6507f20266906c1fea630df4d27a56b49368f9b34985462fe9d9598e78331dfa65a62fa27e7f50b40bfdd0639c7188a2c5432f7f575ee8b4608837ec044d733f60e56d43b0694f75717477e9d23db935a1d8c1aff5b131212d3f93cc06a7a4ccbd2c60dfff9741d9711a24d8cb380cbfa905e610a4397e2f32c4a0e86c0b1722da34a51ecd69cf9484345a6b786f4d9463e7c2e96bd2a50106483992638f25642ae5388b9c27667860a420f1a18c21652bb53a090ab981608f0cb20ac08001e6ef1e905b55db108d414d99bcf43c8dad11d646520bdaaffe1c20b8f88895cf08b3321ee887112590936a1be626ed3f8380ac26646bdbdb6025100ea86cb5b2a7b32256aa5674591b3fd2fd1d0094e346602dfae736b56eeaa180b6b2025a704ddaab89d108ddbec017b014b5ab70cc0fa910c67740ea768f28d84c7ff6a52e6805ec6fe630235b603344206677e7d0ec45754f5ddb6389e248e19badfeb2f938257e182d27700e407712e8b606ca6b66a9dea393bead303fb5395143c0c6fb3a70530da14e684ee9ebabe3045833c3ac146755338fc72c1753632caa9e69bf282939c5316cc697c60e131b7c37ddd232dd8484a0962c02e7741fbe651e5816881a60b9bee2881326c62a8a536bb4ea9d84515c97c4b3d658e63404ace2e1fb3c0bcbce22dc6b62d16f45641958c0ccafbca10ea05efd922387d92f49da897c535c4d7f4911b3ff7c061be36755534fa0b5c515428c46ccd14a722f499751acc4474a3f758ae314197cd0a7ded531afbaab21f297b107aed6227a5c1fef9670960d006de91395bbca18ad79d48cddb7f40338b1e6ccaaa72a6a46fa51a05b6d7171d3ec99b91fdb2879908fc88537d6fd42aa32d1c92c3786ae4327f3fcd57be01d381517ce8c8ef96700a7bab9eb4ecb621b29183368d5302f4c4a798a032a691bea68475fcb2c8c82aa8c468418b2b4f455d7aac943c8a746929d261ac46328802febc9e2d7589295c1eb5059dd0b32840166223e08c2285206dd7443edc792263f7cb27666170136146d4007a7881cfd65c732aaf897f695dd9d50419a855dccf829a1bad2e09c7069f93cb3476714af937797fbda26589d02ec422c8836efd3e03d7cdfd75c64629a68a46ab68f3afc822a16fba9a666a1eac53de4b6b1b3d6bfa3725702c7a9f0f98d0a319e34243eedea02671c7f9eb95333fd6afc62f66907033b667104b8b9c89ddb2211ac0c18f8a5a96c915bc12059496dab3c4b717ef2581d4b277d91c7471f0835ca63d0dfeb8613faccee94c2a3bc90366e4545815d3ed74e6296ceac0923db59bc44018ea296a3ab74f0535065d40ffb2bb13663db79fd34ee86e2fc46a4ed8b9ff32a19f96e71ab90816e6da7a44ee3959deea05e09c9f7842d0881d94d1e721ab7abf86789026e86a6def518ed332003c824bbccce6bcc2f6a3596f00530b60ac527471decc8eb5a5c53b531118b314b818e8e6c9dfee1726ff466deed1f86674d302b7baccaf72757bcda3e7986248065cf233bbc6112ca8b567c8209fba19275e31f5ed47732ae0b220b785d40319d5ea193441b3b0b36df68624305520e51ba05d9196c7d68b1c344cbccbac449f7d4a5456c43181e4f94f2cad90a5924099baa8d5abee4499d1ebffd1be627b7c50f98e2eae6fba48cb3812d3041878b05def9d61276e2bb3aa702ebdc64bf92a5f91e82c22549e019bddc90704d7e0abf9f84e95f824a17d757868bcc06375e4a4ff7705b36d30fbeeaa251e26f8a17b3aa910fdefb82e6dcc8c8f860990d8d51c285acf57f4eccc01c9703ee864b72ebc03e8fa2643b9825dece9da2311057d2f22089b5d3a50917ece35feac799dffe2d0b88bdd8cd71ec28438bb727c8bd2203020fdac5fc644726897504ff3a7c5caf5b2fb5d77cbc4ff630a06c77b35959bd9b5021995dd2d8eafb6a78e1a389a19d41d77fa2713aa43ec583f9708ebfa0eddf6f21e2965c93898f6b043daa66d805d92f34be835aca02a8a3e82a1fdc4d1aa2df97b3dce9e939bb10d8dc18e3235bf70fddd09bf3ee66908969419764b95c907952090154d9245e8d52eba3acd794c76a525b6f67fa06eec1ae32e39d1f003c3b243205360670d1d432ea443a17ad9585131c672c9a0245e7a8f160b3a46b46524cc1efc8f200273de9bc2941d7540a7f443403533ad780307ec490032671a6a1310733b147ffa6f07b1a7b2e8dfd6fd03fcbb18aa49b20a1cf44c7e2318d6deb8b633626ea73378711b009a5f7e322909fd840fe3a06f2ce68cb21c9dc0458a888c3145b513ceb8845d68952239204c059661bff028f622823afd64736e720a5a580d94def94f2c7c8e1b1fbd6d2714137623077473c2da7c41defabc73566c47c00c245a33c1931a7e1620df26bb584249288a7426cb337a8218fece96561590f23e6e9df819151c49c1f7e651f596f10f4039dae9738b85d15480955844c4e471ddd135d092fed4b3a2a5bcb32571a301bd15f9694fb26687b196b0fe762a20f785e2aad5fa76da3fdf96f34852bf1b23eb40b31238862565ad37746e14df8e86eb44100558b0db6185102c7f71de6e5ef7f1541675d4373b8b3e450e6390b2b0af1fb0d6b7fecb8336a8592f372632c3a61a86751af1747aa0b86b5c47db18696422fbc9364dc1fde38031359ff2e044b6b5c6cf669d728165d3033e1b07b3377a39e2885d467155802cbb1a6108210de3eb65686b0cd0ca9f44c1430ce24415be7e03a64a7b11247561609ac7f4b40f986b6d8586f93a4c48b4f3afc15214226ce269b45a4e10fc0e3b90f7b1c27f3eff9ae0c9857c20c2bd1fb584adbed5fb9e288425b61980bd15ac2f47881a8435eb9f001c062cc956eb7a88ea9a95fdce5ecfc87f37fc0d6cec81f641b6d532da333f9ac5a0f345813d0b66a861526f5973861461fa516cf3e8644d2f14470fb7b8290c3b3e4c157ca3f0083333931eec359c1c53a9f212f984ac624288543b6153989e1a8f913438ebe270580b09994fa0da71c560afd72cea6c62330b30dc4bf7d1382537f8b549b7776c8b76aa818686b7a6d25e44d19fe6c95f7aa0c57bf0ada9bd828fbc775a501e4aab57851289783b8c7570d66a42c0924722e3c6c40904150589ae9c9aecac53dd5084e222f7324c718591ea922de1a3264167e01238507e7570288bc3fb6278bd493b764511866314bafd495224ba62f7c5865458e2bb238c97d31a79ea9ddcd728bd96dfce5fc58602a708ff90bcd8f851da401dd4c9bfd0dcdab752db54dd3a2e0864438d10cea78c86252816a6bce370e7b6260d1fefa22cbf7301dd74b926d0ef7472a174d702f85ffff052c7973bf4809cb402b0a524385afbec18e00b943ef185083c4ec9e62e0f34bd3b8f5c62a9f2c82c69de2053ded46f776763f25f97e72c6e7226734818c6c50a8bf2a7e4c90480ad77bbd507f68dacd1295c68dfd4a7e723688a0f1bc001ff6238369fe90f9989cddd54a9682a064f275a44ae0d52c4efe149cca373e4e6b1eba1cc61c29c3ea8567db32c47bd07b67cb21a6f04cee943271298eb43749d914baf4c84306da96d2424a0cc2441ded9a07d51c158c605baddca071508e4229c1342d976ad01a59179b1faf60b19bdc8edcfe8a605ee76351932df88c2b6a987a46a8f811473a4e9c158ad5a8110b8bf0686a0c2350a4c1b5a6c760058a1dc3654e1c031e9fc57e64a648dcc269e4aae7535a552126e72935842056a939bd2a58d85978bcc8b80f0965a81aa29cc242b6bd88169b7965bb9e570ed2029f3a9b6931837af06deabd5ced6cccc4224bffd1af13f8b2531f411a796e00c117668e8a7c9cc56e0708868417bcf6755c11e998aa158aeb54abb71ecdb21eaf2c8ede21c1f8fff02ddbffc45cc87a90ada2f634553a7dc59d574f792427b448a2030e4be5d4e88a66ff4694ddd945cb1be4679e8bf9b5f68d0330e077ebcb29c1eb47bdd5686ff5519e80c8c20fc53314347aefb1667e74b57d8c6f487a67d98ff6c84739b324dbeb530ddd2c8ebf118dc19b7979d2dfa4faa60c8d8055bcce6d07e01a1788f41e642b0c334d773cd6d55956da5d4793828fb7c8c5dc2f48ad5151f6bc034069d70e6fe0243983afaa9a7e8df1ff048c635e9aeeb37e40808c0b04fcb434b4555af20368303913ad206527570c32349dceb7d396b4e678e57f1535e3682856cb215cd14ff6639b48c5c00c6e43b9a8597e6d7895d126629b31dc375d32c3fb9165a3b5c8fe1be40e69a46cefb8a8620d90e58a465efc95ed180154a417bc42d9e41789e5b022c1fdaf3dd45b8690e29c8063caaadc8ebfe3f5bb2ea34fdd90040926f7479d0736e7c4cca940e6a7efd694f9818236a261a57a807407c26400a92e444cd1306a466229c3a8757cf32fe1155ea9e9463647cb67344b798bec320be0757caf2450cbb90ead185dd7745d9fb4b06bc3a30f7dcb0d90adc044093b1dfa0e52ef444da811cf47081552f1157d970fd7a0a2dbc168dec4b34e6a5f8f50dc111e3dac79bcaff7f0924f228e944c47647319108a631bfb573f513ddd27c08948a4afe78dd1304d982118bc8a503ee66c5cd06e697ac1306987b9f7a2b220fb48e184ca65f12f32cb8c52dd7f1a446395e9798a99fada65b5b02d949b95cba5db0c4bd5c9a696154febe0ebf5f075ffe69f0b462460aefb920ece23797f143ab7865f91523d052ac78e7a840b2ce7fc086c44962684200e67804af792c52dbaf9227ec4e70fba04453fe18366273dd3e30bef1f66f41b4a9fd3d60290e6650cbf5bdf82fa65c4d96e70b0cfdcc5631d0beb3eaa0929973d640e3c7f07ed13d89977e2e336fb6fc090b23497616ecea145d7acb4278cf8209abdd38a5bc1c02d820dd7ea3e944701cd6520529565305d73eb79999be78efeadb8a3ad137572acd744aca17724496c385b1dc7215b08a8a213f3b1342b1acb79d75003cc1175c9fb072341918f12551038e9eda4214656ca9315299690e78e41cd7c76baa856e2de41a1de7d3664e32636989ff1a2d98163ce32632db1dfe412f99bb60b2215653b508a0643562f92d3e1b2b10170abe61541e07eaa495c9215ec1f1d2d6c0f2ac3d4bc752a1fed5a2360a703e280175d010c501db5c4316e9a65d3f77ccd8862e3116e035a1bb7c669cc3941c0dfed86722263b4f15bd5dd59b7aca028b9b834576badac1e6a22ccf63b03512399177b7e1435f0211c90e41a7e534e14351d5bac639ce7d1f4da1150d400edcbbe448b89ba41729f120058d45c355b933d10553749a30959d9f4e9a98cfc0a87d3a8816ca326e9c66100fbe71ae5a215ebdd460d906c9f31fbb1154ba9711fe4a8c997a4c24ac8dfbdee5103d3474d578815adeac4f267dbfd773f9adfd970ec2b1426ab19a6f01b8641896c8dd35e678dd5d26b16b2d652ae532d836faccdd8d93678b1d04e2bbc363a9ccffe1e2fc7b0e08ceae8fd2239a9eb458b424e74383a59849426c8ed07d2581ae3d8ba3efac5acc22a1a50db1759c758bb9b19308a1b3bd8b907762db697f2d3c2a0eb5aed26c078803bab10e857f8f3a94f27aef4f92c065086c0e91c2e765740005eb646c7d5d69818d1e3590d32d192c9dcc009716514134172507c661ba018fd8d2d6369ed74655cbb9a17214cbf9e1824e3f3307f3a2b075914269ddae5c3ab49405075d819df89bbbbcaaf0f2e62d572c1d626a44185cc031a56c39492946e6fb1d96470c89081e37ee30ae299f2df855bfcd990990e5cf64858b6733c831427777500b58a74f3b9842465e039d2bd1c47dec41c68014b6685cd3ef49b4b297a6bfb2f43d426efd4591eb2bf5d86ef4bc6197ba26b74217f98826a7499cfd47f71f1ff3d18a8d142b7954e9084421fcd308c920e36af2010ee99ce9ff278e6dece5b226adb3a1dff40a02af5e0ea1ff90f7308996528c85e728d5d20274a2c9c55db32353105e707a835773f798c699d425c853dd96dc058ecff0130cc3ad53ee9c8cc5c454d67c77cd28bce0b3b0d920d250b9138aa5f7043ddf3bbdb7b79e43b161bc0e1ae8d56aae8ab98c83c35ee2d587e605cd56237182783df42396a699ceab3d9d1cc225d5928bc20845841100a1f23b8a6215bfa0dab00852bee723de2ac708df281052ba34ba507a07689460711cb7ac598ed86df02c9c3138d6603a63defc508db191bd2ff47c998e834d65a54ae279809c9a1841232952d7a9c7d8b878a2989b8dc01d142692bb6730c34ea74b66745261e77a3ad7c25a23bf52e66b2fad2e6438b8e41eda809e9bd7ae9f403204a6caa43f17ed5fafed5d74704dee5d22f54565ac13f21863975eca964dd7e64076a6944c6218a7c04ae2698d051c0c90cf5ce65e7d884eefdad30e807836ae52bff4eea4a982bbd38399b588c2bc82024e43c038a5db876320876fd65874a6a940a4faa949d43442ad7899843ceb8c6fdad0959a4c8dd871e718ba0b1678e10bc87ba39bcd9a9e4fd2e07272325403b568cad3be5a8acd4565093f494180be9a2107dcd5e3862d09e7f4d6188bb766bcb7540ecc2aa893e93cf1d35287a87705a67983f90f3de0eb478653d7ca3d2ed91646a81d242cfeb9c8a78f4b194ec3480eefa4aeba681f95f69238bdd91c3c25ca69e0275d6a233b2504096e346d614e94cefc9783c274604d03e4fda225af8de3a70d6b75e4bc9ed95036a19816b2c0e97e93b2638978b14cd9461056f861e8860a6e9876728395f99a12c2ff3de53196c2361b65d4b6c26891047c8668d4aa1f8e1e796293f17cafd367e087f0c098dfa7238e3f206088c0ea7f9faa8817892bac150650d679947126fcd960d8420b414a991b1009d68942e739ebaed5136a4bb2206b1e502ff0c8c29688a0821b2cf3d32ab6961a503c81d8af02f1426b8d21331700201c99ad789e87e694e841bba107b82866039e0103470a7d9663441984b43cc320affa30d165e6879b24f8b914452261a82b5281b8fc19d4c3bb9a42b403fce32d6650c71e8fb64ab0a3b54ebf6a181f45c490ba2c19db972ca3d9f4328ac1c112d11de0167779008d5636858dff7f44828496922fd2555580a3498fd2af109806daf3b09c622c263327de6d582e6f81e20c700b62a9aa390ea4e064aa9ca68388858858a44c1e8aa824fe306e99caff513fbcaf68f08fbcd8d1812217a5fa314ebcb064d9451c22838fc86f37079a9f7d9c034b7397aad25606bde2c5decb4518936806bc95f30a262768971378e01cde6a44e151dae487a320f19f7e426a35d7cf76016cc0043f1fafe4d036e34fa342591d1a054af85f9c275148e989ece9318a1bc6eeae29da8217059cd38eec6a7f4d4e599fc7f551e26bae994d6fd16000a540fdbd14165c5238dce33373fa820537a2fa35936c0d4e7ad1efaf46a52cb9ccc39e859e36468479b99b1a9a4756cd4604997f4d9bb3316c3871e5396b3451a1ff960e0df383de7a930cbf7f95580ed080525c965b7cc280053336189935c7c5c10dfcc3e234c351d84f51514e9ed4cbb67db82bbcea215e2e5a06f7ac9de47294ebabced6c4e2da5e56a1a6d7e12b63aad4daacd54e83973bc19fd3903bab867eafde60014c642994c2db3ab2e8690eaa13f1e5da0693215ca2ae96d30eeb4c60a454a2e9bc6f8e0b42e3ab4c0f666cef6d0a46c066d4fc472baa59c2d25c46e12455d26761c52e8f2c5082952188a5182e301dbc678e3efaffc2be3eb558f4bbe3e261047e9c8bf0e5fb9cd86e50656965bbbb5dcc80cd553f09b6dd5d6d080b1980c5ae36e36542302432d00e9fb8d26ae44f9ac54f85541e569c2f449fd64296f3c47f96288ca48a9a99347dd8862aa33ab4dc9c76b83ba303149e3e634d7ba0feb69ac11a5d399ccb052da11915f136f016b5949175aa9e4c28ad7c2271f3ee2950916480d2b8df1844a6d6c860e3f215b9a714fcaa49a8ebd95df180d7affaf41a15ed780bc81c6cde6b5b017a616448596001af7a6fdda05f6f1e00b3f0af707561c90fd66c554a462ef0d287d71519cb9560be5f8649486a3be83e18290533b40bacc065ae2bee88629f1944486507b2d129e5c6a1dd318ded22a76af7f246d5e48770d0fa050d72898c3557dfdbb0822784749a8470627554c53be0a0c627c6819f891bf807f16e4c673705f44a8f403602dc2364330e6728037da512a70646c9631d481164c7b58542aa76871bfb1e42acc00e6d8c96c9f7e171bf57495f76e33b2474d7ffd44f26a54a0011b2f4ed19dd26f91a1e736165590153636551c25554b01a8eeac89bb517314e6338394be68dc6237a7ceb2f3095153ee1c8274a7a5bf930240585140c7a19b20ea93ea0e5882c03d22e69f44b823f1278bd8c11fa9a4a05937ecf22c580789d151c05ce2ea3c8260f55d2d3f59b01cb19b2d18c67a7e8279862dc71248a96b7ee0016af5d59742c4a93139c0516cd2daae1e827d076afd841c61204ae19d400589bcef9c1512b1b729dfeeff839a45623dbc623f88de0874df494778a9263d3ccca7017d6ed1e2a72e8fe678f3418d0f013b44044eed6bbb11dddf6fafc95cda9be5d5f134085ad4e3276f14a7f201cfd63f381d50f589980a878151d84a9f5f46b0ccd7008925eeb902170cb1ed13626366d1b089f2be9527ce1c335085972e51b7a9a2ee6bef7c45146abb85dd55ea267d8529545610a244a5a0fa971d5cb48cfd502b8f8da5b6e55e5d588424b8a71398964f36f84d3c9d714da59e70b6745676b87b493091e4401f56109d8c1007ac16cf0c481d23899475dbd17cc1af6635a43ca4a47022bd8f95c9a2146186847aa007e5e6d50b423cabe842d03975a0326b6d6255a90373f049161800a26a5bb529700a3b56667c14bfc983fa77d420233e91e9000eaa1245031a3a93c151cc5320a106c505bb49ee4040d9f21f35d033e8754f3cd68234c3b3ba466e9236d746dc84ce391835a8aa0a407dcfb9ef5ac76ff051031a76fe9f2700f29130f2f98e8f02cbd19f8e1a7271aa8fbc55957a2d4495849b0ab22454c6a7fcd31f86a5ad3064eaffb59a441b4023dc332c4f2a91c3ad53fb280380b3fbcd51e38e470378c2ab8107da6703464637746eece269dec92033561d84ea2fc9cdda273932944c506d4bf80acba5b1afb00bba27e3dff2e0043153b69d8f74e64108e655ff16223bf87f8d2e19c954786cd581e1e7bc6a20cbb7069c4aa5590e1e6c21648c083c50ee1345c7ffdaee204be05b00c10411b15de8e3259254909de6799abba54d48ce32206a0e5cd642b4c57c3253489b0e0af25f310bceeabbf174ee7f772e19f4314f276925768f00549d03c0b1274199af8672d706bea3495b069c12caa21e31e95968da7d58564c7a660a54ae8641d8cd008abadfeeb800c3ef2921c0846fc056d700b2832b1ce3d30894fa2ccbb57a459dae39d75a58a6d9f0462afaff51a7fbff730d8b999d6740ae89aef81c90b82238ef39acc7f928e6228c0dcb316097ee6c8a997fb746c87efacdcddd4b55ebbad4663bdb64cbd565ac4af47c6c522a3470e81759da704321c98d9c7a75774f61ae531c30d2746ba823210937e2683ab6545a510d62a52028c89b431829394ebe5978075b00d15974f2e05619b6a1ba21c8d017a156441d64c6a5cb1d43c8533672b5d8b10e3f460a3429a3c6495185bd724340203de87b38374cb71598dffd952883e54c1e7e208b853e6f072d2845be6551de3b60ccdc1e4dd21db7e9bd0a7ced3123204082d573ee385c49f8ba212b32a313b91e4bf48798e177b8872022e7fd57827918a0ca19271f3d82ab8a9e5525a162b64be5bd31678e76398e2612ee18c6b2c8c8da55b2b5366b10d818a252e7ec24648ffb76300afec42d1d8ae7626c70a2967760bf819813675bf2c8973535929809411396219456c913b4abc3b3b35da5f2ee0e114221a9533ad8a513cc7604a0feb562002856c8ed52a46a1fd009fa04664d48df977b8e41604bae1e616b651aef2cc58ecc9b3101e39dbb59e2cfce8dfe981a58124d55417aef77d8a7b648ce089ce1ac49f0f691e1126b9e4d2cdb6908bacd9deda405d49621026596cf4e9c262bdd66d6f8265cdf7e6303c9fc0fbff0d0836f7c09028544f039a06fab8836cfeea4b7c9438c36b9aeeac33456705027803627dc6d59fd8482240cde84233df48d56563691485564b79ba133fc12e5998012ffc491f666b1463f97d3638a7424d98a7548a912700b95f5cd030ad10aa81a3ad02076febd6a68e2f78f2b41993c492d35c4899a4406d4ad2ce7863d2f85166fd03c3e2f20f48404edf68e723a337c21fb00fc285a44056516cba3318628c474f8a1ae73a40474ce36ac47590550a66b4e5de0b46bff2441f744a5a6cab9331a929ca98401bb17909abbfe3000136b8db775e8454176b7425e085862178b161e44e7081e2f7187903c3ce2bc5c1faf5743a1c09280df08ced942e72b8820026023c8086e8d5dd45995d4993b054621eb43cace9b5506d33036831aeab91e6ce8e77280f3e503334013d96e331249a6b5aacae19da08548a3aa0a54346dc5a13ced88044e565c7f5b40fa2e23326d71eb229ba2cf1ccd0c4243eb3062a8deb8d663b3c2431558bfb315fa8ec099ba9098cf6327b214a23ea4a53c8ca98bcd484cef3b8a31d133234c0929f35ee4343d4d8411ce1d38a1bd03d14adea8d07831a34513aa95451eb646133b22b299a8437a6bd889c959a32e603b60d754532930e43716bf989a406c33f9ed0bff95fd866fdb09de165a570cb19b04228df6cb48894cacc79133573368a6775af0a0cde23dd09ed38d4e7c44d06b2f9f73465982d8c272bdfdd44a682d4d4e68cd5d20a40089e6e4800ab698a38aa010faf086c2c66bc6bf9899094a6572c26842b0987dbf1fe10701c5037dc46440d008794f335bbf05699adf8bbcba2e4e0c8748881a0e33c55d4051bdb2ade798df28d2affbe273ec7f53b71e545659946708f03fc8ac1114df49a59be048124f17f39d7a1bb5617f7f8d50653cbf97c76d42dcec1ff029daac7ed9136a80a45335f647d612fd816d1f265b7875363beb7eda98938f14b1c855ac30603dc95834470b9cad8d3fd7bd153756b8c78cf0fb0f276532cfaa4db299ec711eb109d94955ee5616e8f2a82d4eea641ca08ce6cab06c29e88304c58e160fb9230fafefca9cba656ec7dee039082cb9444f7fb9fd936ad2fd1c0fb2d9cf022d360f030a184dc14ddebaa8286b6f8d10d8512ebc5629ac98b8f22bd9f82a55c504acf77adadd3018fb86ef45fae66da9be45a4fe7f9513c622cdbd5145b1a6d218593778ed87a17d52a58327a74eb1c6a32e318e0acdd62d5f88bc021666116d186cd3a06206dc22250c68fc5b370e37212582ebf60109f32a809830c44e6ae2cae16b59701aa25e80ea8882244851b4de712a2d2bb31d9877906ae15842be2b6b5d847eb8462c73fab8d079a733971fb742ed96b66b08645eba649ec66ffae00567205b9301779ab767a3e63a2e278b9c7fe879869c858ceebe4486ed81a53b83e58fcf84836206d818979c0db7f639f76969c9d90653f4c0883a3f288dfe3114a49817f23d0e657a009d42285fa389e04ea57c0772ad8afb3ce5c9ad60340a29c2da4a8f3dca9d0626d311c319abcc8fce40f03a8587e2d6c56ad51e462e52160738daf5b3df3b416cdcb0806cce3990434eed56c20cb44525f68ee4dba11f6c6296a2090f47899f97244321d1ad3b2b76d57cfc880ee86173f36b3f4f8a9d030530f5a17eccfcdbd48751d925415c1f6ae1d1ef2214f38d9f5921316c154dc206bf4c1f8b6e21f322df902e5a9d168c41e8a81f08d863efa8afa2c6650e65d59c952befe15cc9aee069a8ade6affa0272fb0323dcc33d5617a640b84fedb79fb85bf08fa90de6f812ac7db59f670593e057edfc37fa6cff87e439bdf9807098ec53ea7b4724f6975d0305a9b291d2d8fff7d1dbf2f2cc1ab20714297d2b8cf262a471427c4e667efcabed49d2e36c7a1314eec9be0688b9638a8f9d94ce105f13e0558f9b2b497301195bce8591c13cb0ad15a720f4c35d80ecc05d716c202311681b419d2a670160a6e035d6bba7541330963fdb1f402d519e6c82d88f69b229722662c85269130ff794a5fc00879d0a76ff2d983a770601d3b6ea8a9d91e1fe6a7561634144e7d98c0403177380b78c35a4045a8c5816ed38ae995d6461b7935541c22ea877bb14478f0378c90e7af850bcb6f47de4f3fca51c8d79e7f00c14394d1752110eefd932be9576c2c3d1cad6504bc7c1ff5f7666aa04da746e996a8ff8bae2ffcb08d1a054e7d33b3e2416fe972d0d754017bc01968144df4ecb2a2f9d7c696c35d40f7fd71bae2776cee6a0329a9c494f599e4e2e01e80d2f0e0cbd9d8b95d2626cb260d6c13dbb2908359d67bb2310d3751300195037a86e54388149080b57f7e0aac8e06d5d1a36e0a3411c0c9acef9683b306816cb20645720507826dc06e371930c3840605105e7165403b281f0cb32787dd69a75317d2055f53cc1a023d20838aa23a9f1a81f5e82c616fd3b10b335b0bb2aa820711daf974e2d9954d3bbcbe10ed48298af4cd9085c0e64d14042bb3f8fdc3460de6208315078d60accc330f76397442237d831be590e6c814833f1b7012348dd49afc4c79cbc90f88daa33e29b887f31dc12f7554f3fc76fa7b9dc3e8f42813fc063690bc61039ac90bb92551bab5c53421a2626e166f0453e23cf8e6b4250c13c54c6e0418f30aabebd2f6c3fbd860b3ac395aa4dc430ab66730b86fe84fc084c6521e1dcec2ee1df8725d515c5152990ca21531bd28ad0ca99b98fb02b8bc8d92a5a5301dcd76d6d34008c09e7c10d2bc345c96e47983d04a31174e90f4a072a343b06be477ce1c56c2ccc0c9283685a42b492eb83cbdb94ed73d1deace10b4571f1b619855b418ae03af92faca841b8883be0cb176afb446499cdd97c2c89d169cea992e32a8174f00f41b6a6777763a6da31897ba49f75ad1c25d589f22090cebdab98b0d49066d009bd72ee0f853e57b7cc540e05904e532f7df596e5f04e6e6f22fc2e8837dbd0d0239c53e46c3277f61713e9f8591fc747fdb25447fef8d9307e0265b7a6d174f1f64b2413b3876a45c95e541bc0dcebcdcbbfc79fd07fc4d86f2b83690854447da314ff9ceb8c2b781d0b5e02dcdc574a298da0607845529045fc3033b96842d5ba7838b832cb21c8513328f8fbbcf4a3680d06ed86e68a00299ac1fcd44afb18018dd21ce4f67dd16e6d9c9349de87a2343d5bd563b3284d1162e0bd9f22fd375d7001302c28cdfad02d31884c97112f48f6c9d65f1310bbbe7a50a91ec5b6e407826bda71b05a4d8603964a4a8f0067c5d31bf1e963e0a9df77a85df358724da674d7f2a07e8dc6ed41d6428f81d1048ed94d748aa0ec8c859574e4b13f1a6b8a2f58879e717e05beb827717ba6f5f5f59a0fd429a1436d0b56e8767d7e7ba43b4ebc6e073d809ed116b6ca10ab3ee66a0dc838b3f2a8f0c8813bb3b6b4603c860c2c9e9a9c54f37e6930f530bfae2946a085b76438f8abb8040acf362be7d2b71ac5fbb744472cb48ae94dee983e25d3c8418ce7012bfa8bef13127103545d97eb5b48b66a2aa7dfe622112200d60e8533c68105af13ae834fde32f5131b793c5768b40e74aa903a46855fa859b5f1ace46c34ddd8c1144035792fde219cc0cc59d2f6cb5d4d453cbe5361ca6322fa551cca897eed605e681156a069464233ab5f1a9b47d392bc427bf11b43ec8cf90a1608a51e54c9336fb4feb1ca489ea95625882d4610684feb9b36bf0e30425e6153081df176f4a9071e7495f71cc35013a4eb7b9e71bd58de21ab2489cba935a4f4d1b76984884b40b5eb18a923ad91d411ba9ac31e1ffcd93ceff2ce12f9dfb51d695ed16481a1d09969c23c3e5c96d05091eb6babc982676eeb992fb80038bb9116fc71c3937305b4e5fd609e8107880ca6259292b8632d7d2645259ce0a51a3a6072ba2098c2dc4cf1d282200ab67fae0e5f427b12599f53d2d1c1c95054a812dcdcc4a5dad319bc06638d0d19c072b86b18d0a363fedcc84549e5446ff227d2e034d2cc8fd4255f54f81a6242027ca938886b48177a1e53fa95c04efe647c268dca202f53be0bd5a492b6373f3e86c71db2948c1d33d04d56661b161cecf347195b59aca7e54e64e26165e3cf43ac64cfc48bf91bfe9ae378d4410c4202cdf41cb27c8930c5067e464af463838bfa2e6cd715d8b32c01df1ae57883f0cde4941cf10c11defc8c97ac1120391299f4c9f65d24c7b29af4716510d151ef8b4c7e3e476a817b0627008cd4209ff451d68906bc29e2fa97f5785497ae10ff30f83c274960dfb420fbb01aa1a94475fe868a69639968805bb0f5e14224617e79a778fb7224a53722b8f5b993391368ccf76e172a86c29692f8e4a83b250fe90d5c0d7c49c1e5a4f51eb1b31e90811ce3076613e2058bb3491a82d0d79adc701706f183b0f9ed9d011184f59ba2eecd84f822820213660fec7062c166e5ec2886cc5721c296be139bdcc3bbe88f62b004c4e70318f3b4eeb94c2c28bdb78bfd53851faaec33819c17b467a6631040a57109e03e1a129173c259ceb32eb804391f4da08bcdd09d4f7658b2977674b52d56484343bd3d1af0e09cfa403b0bf5edaa47286822bd75b4a2f1dc8f413616b38d0d51ceffe1ed9d07bdc03da67cee144f780d8e93cd78b2be02802c69f01c4f94d2f0d061df3c4a3120fc19db4e84093958c71e8291df7d17c595a0259114a92da092f0e687fefc93e53a6a419fdbda25404a6ab225e75745aef85d430cdcc4b6057f7338cd43a3fa1e14a9e29324e5382477b9944e4d4a58c245ef86f14aa7aacdf6c7461c505a89be533359eb828e31a88c0a9beb59e9de7fd7515edd47a0d2811dbbd7584ca5d0f0fa08a41b1ba482c08515db1678221de1c509a1f3b97120a36b437fd095bf90d388535df1e7dc850abc1bd0337eccb68bc341d4169d147b30f513569302ab6aa1b40f497a393046005b1be8802a81a7e3c943708d401277621649bd5deae70b4af2ce7b00aa6eb911c52783c4f3e602466686addd5a8cbcc9901e5cddcd158d6a73c002ed7230592b61451155030c201dea88de863ad9fb1cecb8810e3671508904ba624261902865eb0bc65b9d848f20272eddf5390ad8f9f1bdf0cfbfc9af2df6d6ba6332474c7e622fd37feeed9ca61f952d913dcdc374f48c94ec3c4c3f1da8a8e2dd4e05177c8ff4cfa1708cbd015f719414aab07ad3c7e7823aa3401a761b9c962d51e84a6c57a0f44c8455ff486a08f7fab5e126a29b7b5d71f72d771e48416b63652b87b6eb551e4d370e0fa2cdf60b312eb4c0198983c47962f59a5c70c77308dda0a8a807d0e5f3df432f275983549b10c1180c3cfb38ce5e44c2999dc8fc5d169af04ccdae03bc5ec6da10a096e002537c2d8b0c5cfdd39596dc91ce3d34672d72f7447212c11480855267cbe3f9317ea932efaa7cfc3922902d7eac9f49c04b82fa0e7fdcb1017e0d4ebf2f2200ddb01dc5a1fa6220b8c4fa1532cddb8d2ad4b1798dfcffe9dc8132020b76cb3a7c18b8411125587d5004d3c2511b7bce66037580dbf6de9a421e88805c56ad69dc81e8804e157032022074853d39bb15364903530a56d81f4900ca4e8a742d380ce7305c7b4a2ae4785b8a8c15232321f050fc2a031da2dbf81c2992716885bd67c1029ff8564070b227c9ff4ab533b607b65096e4d5b01bc04aad7e56892de56e9bf41d507967f963f19edfacb864378db7c6e9e40f376a65199e391db8832cb3046ff9ca62d5799bd2dd9e508330171db177423bcf216bd28d6c88e66422d539f621aaf38dc7ada7633577352d47f8a0a3ce094fd4761d8f234a251d4a0dfe709f971afaf4daefb10189425fb4c2c62655345421895202f4895b605f0d84dd10848d453251ca6a8376f11c1a4625d6feed90e9f14a6a98c5ea22ccfc6e05f36031675930fa063e6fbe765f8e7224677fa0af37106669fec6ab0654da87e735481a313686b736d4b5a86f338a3b89172bb125d1f0d4aba25e9ce04f04eb1fcd381e702ca172d3eac342bd02a8906fecb173920c80195276f002889e57f7f543ebeba06d792a0ba35dfc0a29e33f1a82dcfe9da3eaeff0dd824adeef9fe23335c6bad7bd189e3ed62df5243f5789e0623d08ee1ec7f4f7d4559a75afb7fa6b0e5a05e7772e13b34a8891876d28f47bb9fcff7da993bc1d4069629eb48ff2cc5771a0c6e617225723848f1ee1806cf7c451b1a02d9cc7e82b5a83e184a0a47499eef3a18b45aceee2a7c7f64893ef487f7c92194cd76c66e9fab885d6ae1206eddf42da81627310eb6df474aa2766c544d12bb10ebe9c4491721c61b9c17dae12186c1e25153520243cd9d5f5d1895d367df763e77b20c9aa1fec713e43f149b87c235c54736613db2043bd4d1117bbc1ec46167af0db53f30564d91cd6e4894caae84d4a802457e046b79468050ea1dafcc208b01ed5698da05db2f1e675910cecc041cf4af7c62c4513b26adf3984c3ca5e3cdbb7de7b701415432103cc5ce82635dab45563a10a8f53e493f8d070f64e0dd3402bfb997834e8d2237f0c3fe9a2932f266b27556d13a71439898e99d45ed3ad10cf5f2012d3f6fbc62c24ad0dd7a2e1e9a2ac11a5578b3effc17f7e4346cd71b5682a1cba97bd72689ec8875a5ae959b5d58045dee205959c5ad4b50af2c4922cfa34a02a6a9b04db9515d6072fcea6df7fa6e948cc7e25ec078a2aff85a87db4a46e30a7280ce7dfc1d60629fee43bda65e46a2a42737dea655893c10812f46fc24890198500f834b9d6d27e73b334f11100a8e1aba55073b24fec1fb284c50629a677a1e831f47f9ba329609748fd36736c9aadcfdfb348283bf5e62dfdc1431f8ab89cd2f3b5d01e86581e54608c636d72d57250b765b8d0d8ccba9756371193b8a8541b12cf36c2cc28313368f7cf78ffbaf2a6d5311668407288db6fa725f17ee1178c54c0eb6feca852cf133807a39d31d29888985d1215af60940d13510f2d459a3d1dda5da85c2d3db89290621472b5f412a76f734fd2378ba1635cf8c6381f16b1f694055f60faa0e01591551a597660bead254a51fdfee66c1ce11c73f8001dcd2228c522aaecc999360e56c2e1236b6642656c0250f6e3c3c689fb9bb57ed680423bcff1486da73bb415ca59e4dfd4506e4eb2b211d5d4b199a43946178007132cb729a6df1183759d526c95eadf9c7f57342ec5d91ea35523d11d36927981d065305f1dd26d10e320e0b3db1371334e004da0681a8d4297c1704acf64a400f4b9083e84987fa0cd6fe4cb3b908d3445d380b37ebd28e2a80d1199dae308618f37b51752814d2154b678c6a026a08c5d3c4e85aa1c722717c97fa280fd6750793d7a57a79a356a50cab2fa1e9a1238cc2ea99ec6dd43c4ca75ae8d22edce1f13118f2aae85c2ea669e8e14fac454e443a089c9a980f5adae9293121ba6259b0bd815d62d883c172eab0a8e14513a41ea6c230624a5398e8b09787fe4f8fb64cdb3131ea2e01c38a46f330c45571f10a95fe603275df4dfc673df743fe7e392feb7c376f78e86a314a3ebcf2c1ee0f7486d5d756d3a973d15b631b86d59d5e450bd74dd224fb522307ee6418f5829cc0e07087c2ddebeee2f56cafeadf00b13c24e14feba9b5387039462f9bada45fb2eb1b466a23e307eb033e03e3bc7c24660fd3f52b423780351abf0ad891e19c07fcc5e168f1100b6b17d2247adc959ea0067d95d4c0a763dfe7b44f5ac5670eb26adb6bb0ef45f34bc78807c042e49b1ed907730f2a12333a0ee7a2b2cc29548671ca0a9e5c6a0f0ef53b48f935250ff0d86f66da3b872ce5f90e7f47842a69a3379ce5980cf59d8d05958e29906a04293f669ed5cb3fef68bebcc5242b41e4a08dc3fed3ef55d1a51d83867e3b1c051ff4b517ba01bc63a56fe95935b06e609f7027d99e2bcb16fa30c1d289aed3017f661b84e14f022319a1411a5e92187523b1951dc332544eb9e5bc738a06b12337788f3b990291193c54559ac8a3a49e0920d450977928bab7bd217873b19299239790d01f9a20040768f27b44d83c8249b2c3c95f1a78b591d02e74c387eeea44405a2e96f3f063863037e5d9c0abace198a61aed50220fbc208e25328819b24cfd774f08b8bdd13fd7b113f72aefe19fdaa1525bacc09782f17e01ac1afad4ff4036e470916a089ea060d1f956f0fdb203761b13cbf24e61752ef8e9263e6849b71dee7c7896488483ba4d24fa8c5f104567720429522958b53488333aa223f1a3ff178b426e246a59fe066107bd5248edde9c5c7446ec884fd0d463430a13fe94e684a931cba5d380fc50a3efa5a53e09daaa6563da9fe83b88acef2f88e908f0f471eb7bf23728272fbbbb2675501e02da94fe369a9d7b26d4807921a67130c7c17352c2d936c7270b30ed46ce9194bfcfa5f1c2aeeba2dd8f61edd50fc1f1f4e34256b122ac905420a6b322f44cf824ba50cc4cc88eb2f870b9fe1a377ff970ab194aa5ac4b895a0153b5290b1343bdfdc27fb01a766aeb2f9b23f7163b0b3187a1a675a23f389064ff61b5215d0d027b2b79acc3681a6b5e7aeae0e5992537aa15b9bbb4e1a8ba81e02b1fc80b35d3bb08bb306df9d16e00fd5332ba6308e1e9437791b5105cc8bdd40496079d61854d58e391e43d2805184c7752a2fb47bdd76ac019828bb77fa64514270587f6cdc29650fc620b5f8906c4e306c5d607f7870e824305187056e0085e6872940ffd2ca9ecd7bfec7de65b8a88cdd456739b6d16b4fbd5ef28777e0dfd7cc7ed087772b13ac7c37d5c4265ee99c5eea04e215645adb5901aac2aa1b82f0bf35bef96fe02a4ccc0047da4b19b2e33da1e41b75000a3e5b181c877ed7cc2badcf79f10500297c67d49efef867e44601ca993aa90fa72761354b775a25c410107d512eb222baa256a22e21f726370e5f340ee516d8c072fb9bde9b71b38c16c2dfbacf13e7142526886deb66b91a7d856dfb336a4f1dc080175cd18e19807a4565e8be83b7ca3ea5094186250b5e43722c805ef99e7539c150dac119bbfcf9745e47878a5a695b1054b75c304a6a0a3c6530081e4b5e1e45020d6fea2cb79e9b21a82691199f71c220e6d01454ceb54f1fbceb76b27a63db04a01c1a65209cd076629ed9d5287ef3462852ecae8220f751ca7958e376115944ca23c284f2b6ab0a06987960809f9c1291228c98fede40b2a34161b999ff86460c52e74810c026771ba030cccb2bae501a6059b1e8db4f48f19cfa6e5882c0e7e20875766f0a88980ae2c9b1e8a8a1e63d86bc8988fa374b1155c1c79ac7173ffc22e48612cb10cadb4818373f774c09d1f925222f89d8b828e90ee4892abfee966d5cc665b8b8fbdd4d39f818b9dc13719561e7ca111c087bb5c27be76b1e0c77cb06c0ec9ec7a75f32aabaa9510e4ad8e6a0542eb88626991e98e568e3c779b643362ca495c91bac6ddb9db360041bdd62a1dd34319267fab3057618c77f0253fdc36a0fac7504576493750236c52fa02f85b3a3f468e3ce44c057b24fbc0c5c9852558516e7eb9a8145325e9b14f40e4264e89f22505b28c3b9ef61a3d027a4b04ec2297b565ae5c61d3e59606390359431ee3ced26e96b59d2795c5b555fc57425cde16b816e180d4ef1ea8f26533542358fa7052b9bca4af1c1fc6684181a0ed1688561b8267dcda2c94c7a5a912eb5c7921b9847f4c7edeb32360a2b724a81cf16f113eaa9c3e38bf6a28d30f415e5b22f806043183b0add349792da84a57a25c4680d2a9cdc599132119a2b58b88e149430534be8b0a195222b04563c8e244f884911b21429a7851309fbd133c2d15e23d99478c31484d6fd9d85d478824645231e2667e1893ad2f726ddb97fae968234c72865efad2e97a4566783ba1f4970676784eee1af433e0cfac315e91c5fb23381b7e2e43e7316f50460ee8b6a9ec01c00dd7740670cdea83cc94141552c8918359c6191b3fdbc3505e22354599f8dbdad46e3438ac4f4574e85457b1248573f8f9f73bffc704a47ba5b1a58f36b449b1180eafbc1797c81bd5f1e40f01f4f22da0075af65d8f228e2aa4c1a7abdc6b369688302f0efaceb1deb27b9232dc6766358bbd2d272c028fa2ce6ece6464057f959861d2416a34a6d7fe35cc04a8feb0c212bfb380dfa7b479364c9d5203fdf7536d6c5fc7c9e09ce8b82a8ccb41773ac260a5b3213cff7302116cccbb015f9179e99ea7af6231fed713f7ec8b68ef1c6b2f88400126136bc50424041d1a53e505f9d1a38ebaf551dc9b9551e9be2c6b7e18a5743a4361b91844250ed6d459b516ce30bcbf7154a52809a6cdb13f0f73421e72a3148ad7a0a5d0dd5ee38a785cd588f3b06d566a93c0e1468a6e5fd862da39a22f9894650a5d19324e7c994d230a507a55a9e69df29b1164a93823932a23295aced6750290883cca7432806cda6e30c3de2707e73bd4039d1dc42bc6823520ebbb03e0a80243a824ea88131b0af0e878dc995f6a71535b4bd04c50fddab07406681308779c0c4fc79123ba43f0abb5aa0397b18e41b8d7476a653b205201528eae7126258752e581f136be11022a83105368a6dfd6e595cee5e6d990e86f4added22153e88b1a1dcf3e6b9fa1e5405ab3dd827f7cc6d9173d98c7253fda48028c07ceac64bb1ea4a1585180d11097e9228038b28c06c42351e996304e6a4370c8d8cf957ad81b7ca97c8e26495fbc147f2025ecb7f4d7e0a3290ab700738617159d9706eee72bbb0cdf383af1a8ef73f0705508d6a277c0105a75970567018abd34efd4ef5ddf9895682f984b13bc23b2667747d49ba098b263703b691eea924ea000ffc0d82ff78ecbab93887a78098cc16392c9d1b155aafda9dee0e295d9b611f446bc74496334fba5b59c303782eb12f6608c2cdb4e6b3bdb2eb216c498e6f12fb87ee9c21886dec1e50b07a62f7eb67e3f85bd8fe60271df6c58cd1059631aeaf079f61128b6d99fc7527805f3b9bee6be21386ae6879cfc8a26611b0778e5ff2c584f54b5c4eff3ba0ad2cb401cdffa1102cd390016ccec2ce7b76ff7db00cb7db17bb82704376ac1c333a273120e3191ef5ea2ab076dd8385c41e5dc90404475d5ad0085a6717d6b728b7bd7028016947ac9a170d3d9220dc418cabed03ba26dba0cd4e52bcb19874d4c4f50206e0ac7270247d320e64abe30ad368941abf83eed56602647019861fa36635abd1a2e2438acaed58cf2ef7271ce82014552b1276a67e05c33fd82c02452106cc284bfbe32329eec4dd33e28669d6d3a73800167c422b3fe788dc78c12f1ac61f752c4f0204f526182c2ee03994d5ec6679654fb27445049a268870d4bd8ff382759967a8da273d69d2f4d859092ff51febc3e1bbb36862103ebbfffc844c727fa62212353078e500ab254f5658a383aa3898b03465e9fe110c5ef9b7e468eb33aa71d9b5a7891a76638ab4e571220677b72722a84ab25e400e75085479434b52ae6d11b121cfdb9693f45a7a6aa47bea293e3fd86175b2f7bd83aee55de9a32df8080a5bf179882ce4734651a946e2ee18e44b698c4881c4191fcc7b4d6e86b93d59e17da493487df254c1155cfaa32f1f81879af0e067639472b1dc3c24d52c007e9c444d520e8e9f1f060681724398aeb935e3fdac9ca4b8ce366aed60e6967c5b6b457d8da00b2c319f8f9e85dc9653a881beaf54c5394d64d3378c6904847e730f00eee9982208a42008c0a0f329039684f55642bf3f716dfe8894b67e0e93f2520937db52813758034803d6b5808aeb68bd81aa7c8ba167b1ff233b691d9a92967b50524b2b31b17f336272a105bd0846504caf7103af7093771cc49160b5650fe32b3096e4336a89e03376ecb19d5e27139f127ce08e97738b981c8e5e16923bd42c6760e6009a1b26bfecd05641c8c6f04a8c054afd9e09552c59323e5c72f7b924d894671250afac0d78f28730245fc3f29eba8547d60809a52bd1e0297e26266347d66591d8eef1f6d8ca3db0edd8b7475ffb63329723931441c462444cd8964fba45f3d76845ff5c036e73d3e79b8023cb240722442cd664e6d25ab902c3bb2c8cc85ef15e29085805af5e980f6b0590dc6df5b39d8d7fbb2b66fb3a81977988e10430abad13bccded0f6d03f2b2acf492f466844986a372f8a9c2854350a29fc49526fbeeb651a5c9a21151374ed813c23d160e329c6be400c0d092277a496cdaa2b4660b799ffc43dfb81fed08656b88cf906e88d5766a273cd515c67ff52da20091775c280756b667cbd3b3a3720b5be93139b5b45f6ecaff3d5e1d8ef3847e5e98d6f014d810577bcc04ac1829ef1607193994bc4c937844ebaa20adb332116adb7e1fd96587e905d2ae8862fbf664d7358222186381864a6490af3acc2b6f0b0cbab0eae3ad91e8db31ace6fbec550757b0b3bb7034186f60588b842de591fbdfc46e4648ca19c89f24e062e6a95008db6f1c275aa15001a871bfdc1a1d1b82c8915bdd62be203b7ecc10cc53f1f628a4ec3e745708c87b0867721c4428d55d1f5f0f9bb508e1239c04eda59eaf75b99441c52a5e58e636d897a303f057465c2fc57b8e6df782f4c343e74e38e39be102c5134d787294c9b5839477bc784402cb181f8035e8449d21d7ba95a360e06f71186a1452a3964ae33f2f98538be977f66873359d365eae5708bd0adcfcfe366409506386df6ba31c8b1f70bb3ecefbb64fdc5e0554b0734ebd5dbc3d8dce8b9ebe6eea1f3dfb63fe132a9ab26a59ec5c4c65e97d0062c6bec15ddedafa01c7e5ce79ffeb7c9efc2788f091fbba6edae8edd42749718bf3f0e0ba9b1973bd4983c09fad806185fe1dc023a8ea1c45dd9d8eb0ab6b82a25f12e13bd3fc4a2e18b9b8abcf8049c161e5491a1a4514526dfb801a884efc5cf6d2e5ecea83f7f5e0444bb87ebbd0470a4137d050963c06d1f3d09455f4bf7005b4b5c925c725ec2382c7b789d2e10049c8274188f76f45e40a70a391206fc539545718f21337aa2bb9a9dbd7b11e527d3644828a9e6444bfb44b7d265d14630d242eb0885bf2ebf9e2ef449f580d233d00d240a790452f6917900593b335a5a7b087162c77c6e94ff3f0f60210e08fcb4310876c09662a75da1871f1c956571e1f80490937eac4d7a95ca607304c6a913f5fd3dee506d12780448e1e910a16029cdfa375ede543b521df63eac804c7feed6e8da1986b4d5939dd8989fbaa03fded193ca2e4d0c54a14053f95660cab711fc58c4d36ea84308c03a2e0c7e56506bcb434271cf57089d54e100474faadac8923b3e9a09c233a76c0367157b2e73e5a7f2a1af9a44dcce9cdb8846ccb7b39a0f78fc43be86867680683eb295a924618b77e7874c49f4c506fc888348b164acfb97d9c51670fac0eb482437f26bd62c58562320ac99c6d4e1b07bd4e585c6f825ffcd854a5476be29ad22d7dfbbf5a252885175204222f9c08f051bfcd4de556e6a659c759339a731d48b195d82caa9950e530ed2d86703901db32186948de5c348e1914d020eefb33a0048eb1d2d04e4dec4501f780750fa6c50dab7f636d84d671a0ae96704f0651cc90d67c19a9386de748537886e717b082e05bf7edd35b0d68dff0c9a584ff6e8df7c4c8b456b76ded99a7809cf9e1e2f21c0ff37276f8962b61fc7da2a16b5f6a08bc2d07367055c5cedfe3ef4ce01b7c2404311a06f5fa4baa6db7f431ff234e93b799ead0b9ca7f13d999c2b46a3fa49f0159ab74b4f5a2fc670972b620963d322a482a4e36c7eb73f4ece0591bd111ae85fee075483a4637137c16c37a8fe274f53e94493805745e62d5fac04b1358996278c0da0c97cd494ef2c2f45ff8ccbdc7b7132f2f0ee8fe9ea84619477ab0aefdfc85b966fbc008b2a69590137849088a5a395d8dbfbe50461e1725228a6e4090dd107b1cd435745afb8747447d0f40429b911d9a1bacfe6d918729a12589c9b2d919f6619157e7da6427b6f844c381086c570c884737b2774b93c3aae6bc1b1a5b04a36e5298e57012d7053591fcd5347837a6dd4c6f7ae3b95b657c2694288692559239e616c0f00f105dce2d3a57828c21b91969f91d116b9a61e804e845413e00806c9688ec52278796de0cea73419a200992e0cf78c2f240732072fb5ada90d15c19c7b90de20bf547987ad4eeade65cd7d1792af197961f7ef32d891f17edb1636a1c99ebd25cfcf2a642f98d6cb229f60621bb38e147dde43dc6c33acb5821f6b152a4d5430df2e095898ff6ec8fe63613ee5667a94f3aa86f635121dcaec263cc5acb6b716a885c6cfbb1aa7580e458af11e18468188e0d35fc5c7df7892b95511bfbf11198f3524ac7ac633c89d74a7cd13b5b8aed0bbe0b618b95af6375664c48efc63e0477682f8125300029908f59f98aa20ab5b1bddfa82d8ac5c103b45cc4c15bc36e7031b81714b1947c5a3db085bd53de55460c59fdc0cb74cf43254fdab25061ba35f3b339ca6985d5ed0b1037df566208cb8c1209cd6ecd7b69b9ac92415a2f256d9788c8d45f7b932cdccf73133ad99c45bdb4ac8ab0bc24064917d137b6c4ac85f7384e7c57c9c53e5d175ad1377b259111690d98210e82275da2709821487ae4cff89e9b0346b49d922c38333de90f0252725edb64e5f07a8a42e97c63d9265bbd642addfbc2120bf83141bc44bc6e1b0c19bfc6594635c5db2b982192c3399db5f30edbbd6abdb075898e62b4fd0ea54572c10ad8b83253c5d71d273326bce96851ecf3ae549962902c781d6ce935452e46f731d80e82a8b719a51616662359d263094c948e5224dfd378b4d14cfdc377ffaa90e90e2a3497063f9d02ebe4cd5aa709a7b54a79a55443aee5111026411cbb7704d4469a395dccc4a15fbca05c644c4351214c2732c8204fc586964a177aac665939c7ed14ce59a445102386c8041b3bd0a013a08f8b91ec50ae620f334453e5a26bbc8aecbf01911a0d423d7c3c45bcb92ba879e60d50828487ed81274a3f428f68a7e4bb953a40d8f2623482921ca64d700aab22c09cd73cf8bed6de81333754cf92015e356c9da9b51a59c5780ef4d46761e090004c2e8ffd95ac135083dd19bd74c3eeac42cbe6c1fa0cf0752e09b058e1606ddc8f645ba21581bd50ad902da58c66e66110559e08443370ce1646317bf8246d23ef90dff7a79206ff00b73a00d8927506047ae99f7ca814de3067c34e2fa478b20d70ee43cb132311a178b3e77138029837ebf599d217067018484dc0ab9f4399049f7531784e111b159d5d1a66f33a0f88db03fb25a13b79be8c2b6821495a57f001a4cccc32c2396d50c12f646aed3bfc74c98dd7a675ee945a70605a148c2955dbc2777051b90d888489cc6543722685b0b7ff04eeb1962c786cd50bd1a66a5845186f56af43586806f22a7242fd54c75a1e5f2cb07530c00611033a3597999b715065b36138175b58ef61baff6efa1af64154e0204ae02ea88c54f5b30542a520705877d89f4859e8f30f7e5f023456f8557f5ce7e610ac4bd4f3907dbc6c8f89e6e988adba0a62f3306bcec0ab93bc7770680c37686f382c2f3e21fc09bceb060ce014a4d3bf129b93dbe10c40877b795724b99524a01da04e704e7043a1860171e51ec8a7ba6664f9dc36f0fb7e0d4f3ff53d358f317bd05b8c56f18f50866f0d071b93a476bf3edc9da93cbb503fafeeee6ffca9399bf5f32f3bfd4e8fd7fd9547b94dfd4949595ea5b3a7195f5d8a6788675d7a1502814ea5356545a3279ac0d0868d75d509fcf47d32e258dc03fcdc381dee01c7e73e83e1676714ea3de0d36b90326f7bb1485e03fea75ec32bffbad3a1d8cfc80849c201c81754419acc60e8c78c1c2411031988c0d264b4051448ca70c26580851e4600829a0e0010d8ac8348b28394303ce77502165e03b06f0f9d7734312db6b1011eb9e524e14bf4629c961b3bb1d876a58e1b1f272f7a915d37c7a04c4a518b7375f5fe68b03648943f69552cafec1b2af0c50adb5beacd5860d552bc4b10fd40bfa1598b0ddb2e1569f00cb601ce1e49b55d6296baddafcb4100dd213dd4a5af5574720951f2cfb561fd85631328c48343fb83b4310686fb579575b7d0d71df4ade9576455e0e1e22b17c1c89a5afbcf523b174f5545e4c4a0d6cb7dae60bfbb9ab0645df4a7e0e603749e955d24a53d56dab5e2b0bc01f986818b6266870c4f6db77b70e37f5edbaae63594130c56d4821a7599452edd6c0fd71615728d06908bb62b19e8ab0db05dd3baf447994052058ed7eb72a15ac1a9bd610d72b0c6362c230260c6370825df1b8baf24da8fba90f8b254cb8983a3a08a246dcdcfdfd2c274fbeffb1b722c1c7923df6fc096bfaaa9b5858828eef6f0ff5a4130b668037a64fbe57ba5f0906567ebe20dd71fdf4c0cccfefce52320c4c0c2606c32e0e02350ca54d7c2f1750858511b7e8829570c12faddd1ddd42e016833b099fdf1310f66ab745fa42ef0bf528a577f5434ae0bd86ddc7f9541bf1166f2338389fe21066a49518d1bc0e8fb8c9af9c53c2a828614363b420869d1e4d0c8c81313006f234088aa0088aa048138bc562b158a5da94dd292952b0c11245f1c5d8ebbcec77dec9f3fceca370c8ea078560d51b3ed53d684099ce1afd7c256ef226bdd8add53092eaf7a2e83beef7df6f97bbe27639d88b1f4b21623f34e226d68be22b89c1126086e81f8b55a9f7b157d21a4bbddb65a91ecb04b80d7443208fa55e96e958aa67a9e7a00b36ac6f81504feccdb7f8c5a14ddc3d459ae7303a3df06237e1548f9a1bf198b768a30e5e956ace627123ece2cefa9453c12d7e9d353a92d7eb4596c872232fb6a0c4fa70939452d38ab80974d60e9f058bc50265d129ef81e82f3aec452c5ed4aea4f3ff9d07ecd2c44de263c1daedc6e067d2839e3ce0170d067adb8b2cacd040e7f0a975d35a69b7ea550bf89f9a36ff486f9eeadf7ee73bf810ac17791c0613dd61e28b2f6e40e5eeee2a51b4c1ba47ccc81023e5ed587661b9db755a37bbaeb36166e37faf950041b035c4f52ad2044e0e2cf40173f7ca3e767664c2b01f1ab3d3a00b3805360c302e3506efb583bc03822008822008891b3197cbe5da5e5b91ed66c3d972362304d862cf9dea22dee29799e955a9c2b62065b787e8ed222e34c14ed7e6eaef4b62579bcb851dd8d51cbff183c64708fc01835fb4bbc6b7aaae4e08bbf920aed131c126418ccfef478a4e7deb059c7a9c6f89e233845fe4edb8b057f8a073c2dae093c12ff9fc56d7b639f1941c8dc02f7554c3c7283ef27c7e3720706a82dfb259b1d1a05352fc16df66c02fdbd5a232f1f9dd5efc523b2230f845d78327be09d66aed6c82da07aae3a7bed51a03178bba848954c995d762441ca705dba101044177951cfbcf021539a7e7705c883f5c0c2e006398c330ac2f0aa631c11c33b02b0e3f54a2beee2beffc413d70830f179cb031df122c70502276073ad53f805cc619df0d508897367d8410620b493739d872bd38f0044a1a3e2e088238f609100ab8c52f0f6aecc8babb414244bbea1c7e67b9492693c964b16e8abe399e9393933343ab216b994cf632a2d572b65cba5e2c3c429713228d70421a3229e8338ae041c609d95d7ee1a780cb88ae1532ba213b62e19172ed4db12391a4e1631c4439108872d4eb06816e8c7324161edc155d91c81322baa1916834ba762422b1f0185dd11d8940de045ce64647eadc489d1ba97323753ebf5587de150ce5e66519c93d6daac2152daefc2903c840a14bcc93923a1c1d1024765562d9b7a307cb94fe7e0f994cd68326d9e9baaebb25134a074c8c0c33345e142cbff8c0e2f0aea9466299d74dadb656db5d53ada126845a6bb52bdd2d9d503a5431325e14ec0b01e5e314577776eed00c7587ff29e55ce14e0808c3fe9d72a401d08d71192776db2e08b48db89008b48d369028c481363985cfa5c02e1e4693fad164a59f4ab570c674702b384ad3c70e07064b8a3e1e9e32b9abd889e994636b0b9ce30553c320e794a5ca2cff45a102a431534ba5aa44ca19560a1e8ab1ef86b5b4a9cdaec99472dee001f9776c57e7ea5c9dab7375ed6a27ae243c7583bb24b84ba24be2f3eb6192caeaef7f7e6ee1a4f2ad4e2b84279def83c02f6070ea91e016bf9bce13d1d19101bb3c117619625f96708aeeac2693cf53769e42e114cbd09df756b4e7f30fcd200385d5e88ccdd894cd1dedd2ee6dc6bab25b0ae44dedae0e4064bb3df8744f784cbc8ee6f1b7e8cc18d5a14da8cc7f4075e6ebec4c49e4757466ec8bfccb4d4f642e994cc6b04f4233e66367c74765491f01718ad9bf28168b8583ff39bff2df7b5ff8c2fe6d910a115812c1feb38b563a80e64a072ae95f1524b6bf55d5b418987b61625c00fb524dd21818d0be47a56ad2c0ad7a777757817a08e2063b611886a29298ac89939167d6d3cc305045a1be822da5bb16ec5255bec9ca430f5d7c2d3e5ca9ffbd166f04ece55b6f53f3ac7e92e7f5bd436feb83169a605ffa5b1e76e861871e76e861871e76e86158f9855337b893c2300c430f3dfc9d911a48c0c981854794c474643bcf4d358d962a934aece2f4ae4a5e722fddbcc05dff10343fdc0d409723d98e399057bfe5889d5eb34a54a353a39452da4cdcdcdcdcdc56e23b3ad52a60ddb06e9a75d3ac9b256e6e2aa5b45937aa9818d2da2c954a453d85d5ddcc02fb9f6bd528a5b5d65a69a595d24a6ba5d4e98c86f5c528946e5fb677e78fc297e6da9cda0a57c312a2b2464f2aa47954e05609375173642606bcd584525959ac0891215df770b55df7f4740a0e14f51f885a3386edaf3fd70dd0e449c63319f6c9e8001917e65e980da7da95ee964e281d52566e0f7df70a146049375111c23ae6e767667e10f3a7728822ca214ab5f3c16ed988337e9b05bf43c49306f9eb4f861898aeebbad9e0c95b4051581c560dd81a42e455e406a7c56eea037c7fe7bd5fbf21543060d815f7041192c38f39a59c242ee55b711460198f09f233ef57638df9cea075934f102d46ebe9bfdc11ec0a04ee27bb186e0547e9674f108be34478448c71b7886b296dc092e8610b99143040063c63c86cdbe57b7b48c92ce794cc3ddcb4016f69182cc039fc0650d2d061e2051082c8794246e4b98d9b560eb69350bba40f21306ac4463f30c23aa68a89945c619286fee4e59d1a8cb02b1c9f8f2cf6f0410362d93812cb1622b16c37b4790e18c5be4949a39b781ad6624c446219da37e0c0513ae97819f39fb41f075561d3755d774b26940e98181966686e90aa69d441f9999fe49cb25499559f5b298965b696a1a4edf68092a117446a26ac007e0101ab16630c6ef1dbb327f47e3e570719d08714e473372fc8b7f46d56eda65e87dff2a2a8c3aebaa7a76f0fb776fb5a2bb8852bb04416dcc2dc395025e016bff3d52ff6f4f4d054db5d6dcaefe9f951cd0ee79d3a1dcb9e9c53962afbe350999324fae48d1237487a014aa4a4a4883eae5f6adba64262b17725045ac91b50fde40d33a5a2cb43e5ae784256aeca0d916cdc940b5ab1c1c24385bb7255f05ee6d56f095d1ba1902834f244a2d00de96ca11bba31aef23569de141ce6b7ad9e654029230740101dbe8adce0d4ea9d4ea7d3e9e4427380d3e9d43ab1c0568806f99d9a522296774c10a4044710e9e9e9a9b506e178aabd310539a72c55eed0ca0e56a552a9542a5514ccddcc0dfbda49f13a9fe43a296cbd33eea1e1b17f415c4834aa9c0dcd4cefc70d60fdc0ae035f7221d1c8a6a8f0d800109fb154bf341d362ca861abb7621dd159220032afecf9d4c6ba1f1208f52d3744c03b70b0c9dfc1ae7e361017128d666470538d137d7bb8321f199a7939b55004f8fbbe1d23e06f93fe32cde7535162ce6942e950c5c860030d8f1e3ee6ff4f4d9b244abb492c282456bb3a7c92a76b47ba995503b6e6cf0cc8506baca8b05209e0b2b2c2ade028f5c87a4021855f134a15c303880573775789c27e3e1f7d3369d85507731908dfc79d38d3a23f70a248ad95564a2b33333333d34a2ba594527a2bad3900c92108a5b5d65a49d534ea5e76c5b11c9df6b9396234b29d4f8c46f402bdc6711c67517a583536ad21aed76c3683b5ed76a2cd19cf8fac5d8da480af67fcc22d1e6ff11b450d59f3a39bb8b0f3ae7ed4e4f47ac6a717bbbc3e355da29e4c7ed1fc436334e3388e0fdb3ef5fa4c0379ab8ebb214feb520f036d9ccbfebbc24eeb00ef093b2f8fe3a7526c5aec2dd3bde5ad1f63e0020683cd0b02712e037d8e24767445ef8d9f62992a6b5e8d3951dfe2be2371e8579127f2d1f0add928bd1f42bd1f41da3bd971d337993c453d6317bfaba6e2f3db3c3dceba5d4e520f0b1b09f716dfc7be2048f9fa9c777deb8778223af5658cdf1abf357e6b94366574aacfe8d9d8b3b16763cfc627e3d85086f46c7c32ca1dd280d26734142286b040055068228084805da6a6cd26a21be31e90eacd66b31fe28d78d8cfe061bfc4c3be35dacc663fce7e9c0de1d98f3fda78714e00244010045b435caf224de0e4c042f93fea718505e9d45cf0ea7464a0874c9b7f83673dcb3965a972dfa4bab054acb5755cdea905bf30805d1c0baebf319ad41313b6de7769c05bdf5245ea354e13629d1fc8c70579be7ddebb11c5fef44dd7b4477135bca7a3b044511479d04cf90c10c527add8f7776badfdffbf735cbb908578eda738cf5f1a2987e9375e444a4dd334ed879bdcfbe5a6979bbc0b151676e55d7c7ee59d5df00bbbd63d7bddd77dddd77dddbe1fa55c0d2259bb2b5703cfebf57a91eeebbeeeebded70d0e2c64e93115206cca17dec5102d16ca50869f922e4329c3395b08ed77683c218acf91b8a49a764486d493a1124d7413bbc96fc82ab8c5039a2655fe4313150441103402ab066c8d2ab70b8fe56f6137cd2e00265400d8c56f007abca84d4a7777777777777bd7755dd7755d373f9fb35a4b05f0f51744c3d04b682e3a45026ef11e7a0a4f4043b445683490604485d1f6910ebb77c459461668048125a34d7e91b74d9f2469ae982be66a345e2842e78871531016d82201a3218aa2d8755d27e261de396597b6b0cd55558d5535a7549ca40720a5e424a112bb6a9a1ef9837213cb39e54bde9799ea3246d7d8aed135badca6cbe8545ba1b2c20ade1376f11ee79d52d36415ed843b1cfb657ab715725ead87d05e64d1829c5293549352d68f5de49c720890ffd9ffd32ce11ac3301cc7f0546d80d65a6badb5967eab92776157eca698191a8ac46703c22fff99da64ea96d88d7ae0ee0774b70b2408cb4381133c3e97bb2196be3cb8fbb93c402ced4d80bb9f7b01cebb00c8bb7302d97aa4f7c34d379c61378fa5ef46f3d93c96d168c92427c7549bdaaca55a7a816429af59941e568d4d6b88eb1586317e0a4fe1c9fd149ec2139f6a58a799bf741adf0e7e5144d81ab808bbe290d2ca294d2430af67c44a52f74d92649fa39cf128c1ae387cc05feec667861d7b2e40bd0b74df62673a406105173751280294222001883594804415463ce1064db44d8f1cf6c8618f1cf6c8e1c8e19833769297febe4f27e924499a5dd87df4d1c797a8879f3fa79cf249b01f3e1c1f89fd85bd3f08e62600ab996bb5b6ebee359954ad3a53a92c0808d872a700cb84ead581913821435dee53bb9fa43e7beff90fc0159665022ee3e2e7317689c106d245173f1f008eb0bf7290c45ed8cfddae7593db743696581cdfc65dd0fd8caee84e12904ff90fc105437664188913dde8769e72915d1ce4a3d10cd5204a21994628d30c2e18b12b950b3876a5faacc7f27724a2118db62bda2e0a402b6785bc1a90c7f2f7734197f34097c7e782eec601013f5f7b2d8a3ddd3f5da2288aa2288aa2e8e20f7151f5a9b85661b15842f298cb64c8c51d4a58d79179cc4d9e2b7193f8fd0f5a20c3aefae6b371b9a9c5c6626e5e2fa9d56b263d8638bd0362c7c93883a954aa964aa502595d84e583eed0e7352f45dfaa610c86a6690d83a96030af73344d35554d3cecc5b0ed0571130cd6040683c16044b650a99480a2f5f56ba595febb3333333333b32635a931574a29535a29a5b5d64a29a594d66eda4d3b6508277c7ff79c9f8d9afcfa05b94b0d87169aa1c37155352b6eb26e6a560dd8eaa4a0e1d16303d5f4e9d860e676e59c2418158ecdbbfe7d414eb0029c0f456007cb7d955f54f8fece7cf4b2b004d527ef7f3ed7e7763f21be83bfd9351b7f486dd30ab2b2df0fd5c732efcaae681f0d9fafc4364818b282bb7de81e292513998f3eb82c66573a603e45758fb57c0a994f2193c964b259ad3f0a614dcc35f7bfd2dddddd174686f6f6180f5a18522d45b530e4c246414ae9fee167057605c7359d503a60dc4936d8c04a7694dcdcb4b73a812dd7cb071f3e9752d21570ccf18c9452ce296360c2a278183f000211dcc08ac2c871535e987b61703e450c616362ecbb599b3f04bbd2f135eb5880533abac5db0c3ec24718d5c05e27a4188606a094cc39e75b200c1d1eec6285ceec50302e97dd9250c9b11a4a15230137c00a98bb99f9963ce5a93935dfd183e65b6ca0e9f12d3346d830640076f16b005114675a32952a2c0bdf8ad33e1f8ddd141a5d6b47af52e8017d39c548ce3082144f4011050d1d190e9b4ea8f40ddb64e96a0000e31500001808060442a160402c1e98adb37714800b52804a7a5a3c1848a4a128c7811c843114830c010400008c310020856cea0cee300b2788e6035bca2d343ad70f9f2585e73e34fbedb061330cc201ded0706be3cf72d3cb99c03fc5e1809def8b2998818e184f892339687ac89a2823af4ec28082c15440cb12cfc6943d5b1212d77fc89e3ed988e0a8b1eb6ed498396ad5ef4379017b0e01d14f7e8a99fbae262210917e147863071d9cfd652a0215c529f3cc8e2293d1d1ec3ebe9b22a4fc8b2ef90f7fe66f8e959762d32b465bebab1f45f254aa663f624ecd0f9c83543a9867be7b57bde59f551b821126febee335bf5fb7a50028fbe9a261f24037d80a444394efc5cd24e20f3a70a52c90876da22975bb323a5b77da9715c27926585e47dc1de52d93f4c07d4a515da33f552a249e31ec49311164f440b2b0706bfc6202c63b6cafa500221324d0bc260f7d9651b13b2a9d1875ca83c9a17882bdfa23f9d52972da3340e06e2a92e456be9d20255a52da35a410118689242108824de7595ecc244cb02fdd46cdd22a06748c35d72009cda37bbb784c5666c8aad1c5c2e3d41ffd43d34c068c76ddcf85979c17d336161492843b14b2d2cc47b8c4fa0ce8517ce737c65e71d7b00d080067334e0f626fec13ff86d96a03a601f61382ae7e5e1b0145d0da14973fde56040311e9212a1f6d0cfd38c9a7f919b5a45e95169be500e9e173bfbb715a76fc79d939ca676a8938f197e64a2b4535842a261a6832259371feeb4856fcae5d01c134bdd5e008528a7f9d684db7c8efc31de2449496b2785513485b6e2b4e0fc64b851be9ab8c18528febce750f0da64081230e8c63e79c8728d10871f96c88e11079e6552ccd3ee557c6990e9470dfab047d05e8fa906869b5ff5b9e5709e0f5926f87023f97262cb76fccaf5950f1347b80399748a35d2c0c490db41b0bc207c4ec255ba6c2bd960f222eaa46161d4c1b8da6d06c3bf4ac6ada16a160f4c309c0c100eb5be71763d0aa4e7560ac1fd4ced1ba344da407008cc9872d84d07a868777c03675cdf0c7b6d57a0ccdfbc91d82061fa85cccabbf203cf14734b79eaf7d2cb71590c153ef4b846e03fc3635505d0b6950dd430026a152d58e178cb87825654208672f72a77e3096e5ac3eba70f64f2c2c9ed415cedaf17b0571d8de2baeacd90a739874bd19dd6c5dda12496a9c4d1d41db54d4f3f540e361f3b903a29f09a5fd87d6791ac3da880fde478d7843080d035ac52dc235fe173f333c390c7828cd00434750b39a8176976a3bcbe183bb8df98bd0495dbc0cf2cd403ac40cdfdf0c34783c8008e6408daf5524d7b5cc71eca8b1c06d03c802d4d0dbae359140b7861f06cf8fe08322c7a7895322df320e70e91efc835d045008d735594ce45ced1abfb1fe5f44eac7237e66741dbb831e30ea2d6869b4c0ea4aac8b5a33289f4c1667e7c35cf0459d93fe02307b09dd0c0234f22084cbaae4c77612c022b741286cd5101f7ade161b16c2783d8b40d980c44724c835ffed6e5ac44b5a626d2c18c2c042091b12b0cd53e21d3b2d2b189d8647797f4804d0927b65dbb9b3edd71b3832891a90f41dab078b599875a24125cccf54a2fa62848a3c34a22882eee4ad8c4f9cee8767ef14f2eeef8846c3c50f6169f871de3515f98dcf3aee136c5249204d07b6bbe9a908d460b146ac2f4aed244246da4d0ad95aea3a632566019a23a08fecb7f6830b0d46c3f60f042a69552a596253f21ea8c41d854a0ec68f2a7c2777e083121b0f832bd00e7d331ed50e3041e03720744b83bec9e4aa2a113b010e10aa664b920a99f98fcae81847bbfc797ddce8b80c7b2966e43706023d740ff6055b8ae55e88d671daad54ba11fcbcab589598d8af98066429ad4d4d0725a682a448236cac2db37bdf2a11721ae034bb863f4a00f1a3434c5702df70960eca7a961d387975b051a01be6e4946e8b0e568b719f4dc7f6a4ca8df98815c7c8da4e9012ae1f2443ee095434a20c4e6e662f34a3e2073195527cb233bd4e689ba67599fe943583e580bd9e136523657665c41d9cea863b4c4272c05b32bf84165c863903f1a87ba4852af1640a0ab3c8c98fa766df4b6118400aaaa492521905c07a5d6b6c8ba5704ce2c9ff52a27fd335397545013bb7f50cbd4c7e4cb7a2ab7612451b0dffe312e4273826d1136cba07bcc3390240ff63011c2e8b45a44f79085c1b7a33fb1a0f37716412b585c7c804bb2318dfcad1b4efac694b7797587fd78eb62546dd90bcb98f3b1825f8373af9d641ecaf6003c1b0e6e8192ae5ea80bcadd856e99f90532e9e309512c833ea0d188b58c56a403fd7e2027df2802a4f2fbe0dac8df17726924c15975b2e6ecc4c3bc82b876e86ff71915a7578a8e45e9fc167db650f1d32f2280509ddffaf29ce22b1998fdc0a51c9e61b05105ed6d5479e50f5c485bab7f666afa4d6470ffa5700c84be93884405bcaa281b9f8f064c38441e781885f448509bf6725dd40b9f0e09af350369f434a298d04e1865406b1e5d231cde83aae6536f17a9c12314818e269178c994b798742b1d7676a5a0b7c4a4b1eacd63eb920c1f1011b5ca9ad4f2e03f60fb123bca26c55fc6f0e188bfac33da2cd7671b694f1fca4d2f4a0fb86570d1c1211d2840f85d220f4f252bb033b3d05b2b02a3f09a51bc1e2676d8c853e5403d86acdbf91facafd9e2b7f6d7202d53d2f3afd73a6af885ce370fe5d47c5c9b875902958d7592fee00462907bef0611bc3796c3693697d926567622bf7fb302f49ca285ccedeb46e0829c1f44406e7d4e85668e1b4b26182d5c0b87931c70e13e9221083bed0cdf957ddbfd98c1ef5cbd9bbe9816b06bb3505de9df7ce449106c8777524b5f699800979106128cfc9c4fdc75ba97ec38b93849d64d4b666cd39919406bc57412a7eb2a0f3e8f2910451496f938aed5395fbfd2cb916d5873fa1339da08f8108361c23fc8048685e131b79a3ae81de3250eefe876c25402a7d71ecc2abff61418853c571cabc727997bb75c35667ceacf1d1bcf3f533a0401f221e2245b5a5130137bc95baa214b21f9580100501fd19e51f45ff26948f912b35ef5c0cb7c6ae4c68a7851776a7518b1c4adf9a0de9b571c920c19735fbfd3f69a4acd3371759ce9451516a7b5607000af69596ae110994b49bc25b84e928e6646e6ecb78dea84b3072d20c9f70b5b9be35b06c8418cb0235ebb18293226fdd4217dad8e5fa520847da36c374ed2db63443e9b6808b500d27a196f7efc2fab611c5dda6504b5f5aa529b7e61e7b3649fc36fc8499cce17b6b1dd701861d5497ad9e5d152ceaa82f064f6f30781ebff67b1cf4763870f3369f48e02600bfdff9c4c404e7849a309122abc35985ac0eba76ec2280d9846710a4711a481513ca6a3fbbef074d13aabf90045a240abd400593d9529ebf64e703aa11d24cf58bb66258a8b39abd50008f235b2965a0df5319176f5ec65b01a4ad200decd87255dc375cc1316bc14ca0de062c18c46f110b64831c358237f4b1955e04c68a32ebf88a73788512721d784bfef3f07c3afbf84bc4bb5ad9e1fa09e34883b80cca6cb9022b89d383ffa6f2b623c64ce375d2f4b5a7692bef062cc58764e23a3507934166e46c9070457c7504f8981e26ea8f10427312150a0336b172c88e667d47a30ad290b2a3f5811377b4f166af778c8f03fa522a6b2fc8aaa426015ac54f3fab1dc6807c69d6d1a4284368f61914ee2cdbf4dcbd47172a6607c5d04931beba124980b63469b3322ad2f70017acfc428f4b6350146c8e90774abfb8ab4b37d1f475d189d8dab331872374c068e1a1430bff620923822b2bdb9b4b6c14dff1c47d6514bb7dfc6d584f3adda87eb2dc8a804a12ec703bd24b154c1123b1d03dfa171b7561bbacad8fc77732c35cd2ea2b60e762bbff494c228b2273fa653a4d87d9fdabc75bf89551b80eb00121d210b14345722e42926bab3dcc7fd64dbfefaf9a542a3ef3c11da12c90f330519b8de2272e006f89e3bca462a65f6ce5fec50d1b8dc58fb7e7ea5df348b7487aeb475daa0196b3e8d4398ed0def15aba8fc7495ba8568550a0714a78594b33d10f9b05329a68a8307cdfb50a717a52157947f3131ae75b8921f67e5336f05ff1c2569c674980d5b975b3a00e6dd19f9b320559b5ee85e96efd603277f3109085e205feac17749cd89f58b5de2c52be59947e0c8662b61e5e98fd7206636e31a04e7973edf902148b7874d8f9d49b99ff4505da1740bd3e46ebb6c58c35637025540718bf825971790bb4a9a563ec7cf3c68479060f59dc936639488a37afceedb8cad8d63b5ad7a5a0795529a236944d1d201fa4602fcc608f6cc671d85bf87bd7407bdad1085ea9978e37c3f82fab93a72ae26251df55c21afbaccdf07193403f414ef94226756c1b9722f6b1320c0e2d47ffce4e14b6589ef66aca15be4e061b39cd34fceab66c99acd429b3eef430de5cb4a994e9f655377543735d2c3ddb8e9a0bfaa41cf821ec6fe66b8910c03e3ff0fa894b1c98b737fadab3e60cf7d88c4a8690209c0cb9205e80a3399acccd0a2e2095115d2f507f43df35a1cc261dabd68e2f0018c138feaa4a006711ff039fd17ada8fdafa13b24f3afc579b0fc3faa82a6959610cb3433feb970748ffea1145b98e323570480c3046cf1238e485c1d39e688c35d93799ee1b1a7a2e600db4db778285c1d3dde013fa2c78f096c0e169e658a2cc6ef4437bd65b8755988c0fb047d534dd8064470ab60aeda5b3afb3cadf89522262a100230648a221d6b56b5696a000246277125a3d8d8432c9b61ce3de4b8a2488a25941ff0fe2f0e6eb9a0cb62b910694743c8c780312e899cdf11c8f22dad282121055898ef85299346f54c9a3c2ef3b2d08f02be63e14116197408111d8acdf9dae498789e038fae62f87e2ab6802e85012ebb4bd19f1d8dc8887971163f444f7294e6da43bfca5bbdd2a0a8d1565eaa1e546b4192e9a41462b99aa235b8c71ae70744874cfba7727705a85d42ea1ae1635e0e3c476f70b35b4ae1cca2b02e65f1bd7851702c7e136e62021ac3b1dac42566d7293c14b83386bf4f7903a817c1832e5c88cd55d9c393e845ef903e5e798ba50bbe26a9dc20a8c88a01f3ce13daf184451bbf3681be6ec1e5dbb1250e6004115fa961e7d3b6ef75570820eb1360a723ffc41f40eacf7c9a3131b7de7d1541ddcf1ee98497001240fc6a010960b72d660b6c6ef6b8e8a9975f45e76410786d77cb52af84525c21258d8202edb7e450f7718b561e25beaf02068befc762765efbc29322ff733f617a914776d263a29b29a72750f3f42b3bde5166fea664382536c9d5061db6161f4b8edc2029a764d8cce522ec6e0d34cbfa7621844667caf0e937e4f1b7fb2848a0c4e23035edddfd8a3e40940aa7b086f8a4406a2ed1495fbafdc00bc35065049e6fb9b01aca182aacab76ab3c226dba9d34802a177756e100f88a773830523cfda755493b9617c7001e3961c2eb22c900c60319466f4d4861d307a737fd395feafd55aeccf24178026228126e1044d9c8e1a9cecdcbd72a0a603b45a592ed94c78bd4396f8d83cef9a88b456d4b06a2813a48b47db6eae865f42b3e18b04525c931b2544162060cb182ef59a1444e0aa75f0d0c89d3410dc089c58b067e47747154534711d9662db539c97f22868b38b6b10f8f3681c9fd0d6ee6db02116bd694f7b1bbc3ee7365e570899a896148a0058f55ea365a97987995016be4d65c2c5aa3ce0bdb7a193361b8271722c5764edec5479604d0ae610eaa8d4a4df5ae5e6b46b9a45ecb3a12703fb23b4aba4dfab49242a4523d4f85d19988ac454d79c3fffc2249728d3e8289f9e56a11339f7d98b2ff7591e90fbd8b59eda19cc15469c6d04669101796a0e24522fb266c8a903d333a2037cc26c6389f8c303243a4b4d9d2095e9b2b754de02bfe776386a5804b0f51dfa1148cc39c403cdf61981c138ba06982be1ddcb59e7d95d3c77f73e6bc8baf81b77b0676cb584e401726520f431b35bbbeaa07db93cb34d66e5bb4ff372f3cf88de3b844d0eaefc962ff914e10a8d7e844813e707bbc55d3d2ad90441a3a31636b430f2b6a0a662a836448199c92d4a4c10fb6f2427dc5f711ce6b36572df0c8bb09a19c6c8a8412e6a4c94c74949e6427f7080546efaf3b8232ea03b1b2ed789d27166da3c4260b234f264ab0854fc750242d12556cdaa3548dacd2f424d63be04b8f98862db6069ef34d65864a908585ccca8e544014d93ff1c708e86c4085923dbf2b6aa2c8f6e848ce3cda0310dab009918edaac9edc1f6dcc599331100dbbe253127606e59ec90144b9c4878a224780457a7d6e103b72c1a34b4e399b0c924d6792ee059250be0406b257b989d1eaf2dfdf5666440fb54a3d96e82c6c66cdb480e2069b2f746c408e2ad6dfbad6e2475309590055a4f6bea17f563f0287abb84b0b429c566e88908e793f64bf25d06a42f5ddfa13bd8a66365f785039e811a16ad8714c65e147f4fd879089c97df2519e8d346daa8167aa79521f9aa21d1df4fba5e98fc394b4d26243069b41762cd2ce88a6b4984bde0a15f77830f88b9dd817f860d416da750c3dda468d903acbf5fa46004b1f38f82c31262ce469b4151cec05ac70f13a386393611b43da07dab142e66bdb39e5a0271c320943fa5e932fa5a58e0068fd55c1661d4dc995d4765b1bf05cb7d2611813b7db8934290bf531710e6791a804401598aa49b19798fd1570f81c6115ccfbc045c70bff819947b15745e3ff985625b2eef355ec1e0ccb56b163266bd21ab40e48e094aee05b0e831581e0ad73d14dd72891c8cc35f2a48f074fbc82753e36170a02e60ec0d83c46ce7cf526053ed022fb3b770162f7f775988aa250e779ccfa96c12349278920676c6caba1c3b48aa438113bb74675ab8196d0e1b0e1313a891013bb45b78101e41c63146c165eb4221c5e1fa7e059904a3977454e21804e540536fa77cb68c18d6e84c70087a8b482b2e955fe161db1c4333a8469aee2f9bf9e56fdf0c1790f84f338f73527f46a34d112173f5232e2a406642e64f6d40094621156631d2ba273b3c0203d0f1f42db20297889fb733090e355d3a6ec2e3a7436cadc704fa492b08ead4d6618ff11e9af40863657e9601d1fdefbda160e8ecd812f62a86efd84a4024c2723c3e0473b53ba919c2ba17315644aff4113ca122cd68125a7113f7952f5852d9489310d9281314526a980f86580a64f2b3a0351a2ba1306f21ac4219386a47416f55f0cbd0ba6da2777405beb40e25afc30befc992bbb59596b09715e2db03a78090e096d064740f082f7d7f1db9d221f277d7b57407927f04c85d8c9673c3eb82701cdf36abb6cf23535214371f31f5de9db56d529fa32e058f8119b56841d1620f7dc06b87873062488734bc8f9117aa84b002d9b648baf9234560077122300b6ff6c3d4218c29e5470e4780c0111c65a86f48074b84109ff14f9e51770f0afe60cb8dca57e21860313504c9f29502cee727241338b202223f087528640a15b482b349880fef83683fa50f08fa7df620f6013b107ed4122d504d796427771af5e003189e12178822b8f1424d55b84aa4a1b67425d88a016caf8e9511817a9af29a2c17f028f2e4fbbf2dbc91e9abab2b2c3711926611ccbac0901170796cd855812ad13a5f583065157062bb674a2b083ec46570348687b901ab829d2e189380cd9a9e8c41cc405da557c032d937cd469ae97fd3dc4167c7bd7144771b75d659869415edbb91b79278223116aa5f225b639397a165c7be90b090c9ba0e0dec3d71f43a1f4249e9fab7c8fda106d0ebf0f9787f4f3218aabf412ab9a8a1981ee1b5359305d349ea1be4b5b3da6d78beed1f94d0fc0bbe2914c060e3e7b9133676859243fc175883196e44ed2de5715eaf4b3d366f778cf704c3ce645002785e30085ecc0429e80c15a2e5063f600cd4312851b9288d9747bde94bc24453301a52322ed705b9fb110eff2a2ceb8227ba82d91ddfab523c9bdf7152811040c0c5bd6027e58f25b905ccce2733fab6680db729d06bb8bad0d870c68c9fed093f335d7104e70c11ca477e4b78a9b03e0302726e2d80edb749e15e7581b53c35e3e66b16b88d8f26bf713f0795a71044713c1bf57d35183d3bbb35996d3668b5a1ca00556c983dd32cb3cf9875d480ca6b95dc1eb260ca3991c6f4e1787761bdf9c1e7dd9a26ff8d0ea545fd06aaa6e8ca2462f245fa3689e633608f67df712a78427ea7ba68cc92a3920075b72b16741dac542a2a0275626922d96945cd7effb37797ae9ae493845184c95384454a4538e1a341b7c43a74ef237cd8f790a578accd36abce7d9fe91cb253f30cfefb058109536ff2a07bd59c6ad57dee42485cf00743a687ab4f41a498169ba1aa37f38cd9676b56ddce526a358c7f4f1b9c304ea923791bb456c38cbd69549a6389c060a4f95690b97defb53c59cfc2bfd640d7cc3757a02cd7526f799c695a26abf81c9a41394bd3c6bdf13805fe2e98eb0d07ef1a7e97b59750a58a39234e508e20a3b9b16f1add44630ffb6f60f2d66b6749c2a52306f2824faef5bb7f50b4af9a1b91944b0eb62094f915608227d146ed360985a2eae3127661128978fed65df28bf8b5f4c3c0ded94a1e0f5c62feb672a266e57ddb2885539804dedb74d769e3ab20172d2e0d0b463da9ad6a15053553bee340212e29af81b0fb83c805c68572a4f0d975266400f081e45fe65cf304ecba8b7063f5556b3fcff0c2dc7c8c4aa18b2834ff01d78cc1d0021f27299888cffe70125dfb0bd1ac4a0ed1ce206312fbf0a2c7d9d6d2f92631fd1883c281fb19d81e5cad2a7fbaf855ca53493a902d197a3c7161329dd5bdbcc644afed1589447d89f4352fda8b8431b66971b6786cde455480d80138c7cdf394fd0cffd45a317d452ebaf2c390204bd3ce0bd9c6e2e369d80bccde33bf49fcdfd76da9c4fc0f79ca52fab23311b4343fcedd4a7152ad18a9a8b553a680e3fdc20596d5a99bbf4e5d4b8a1e12f4d82e0c8362f44d53e03c4748f046ad15ecbe0b017c4c88104a5fb5e8faf0790e79c46e69a0b1d403c450e424017e03673f9d5700df7b967bc81afde915cedd06e361e99cc4fad30674e6a9a30fc5566e9b28284d02029669e23dba33fb44c3d591f15688f0a95a0a16d5d63f7133a0ed815915331572a4d380e3ae945524d86c601f74cfa66c573bf2b418c5ee62bbbbf56c0367b1419ab3588b5d7b04cad9aa1e20114c89cb09cc2fdfa156dce3eaf6be7f3a8b9df9ae5e4698124fcc7113afe730883782cca0c6f4531a1b98c904cf1f434c7f0f036f7966d8e047c139eab892c0b00f910e7520d5cc78c7d54dae9c0842ae35a368f8818d41f13031286b3795b1cc003fe16a2ad396cc3feb66d307620e0370f55770010115597396ab4fd9e5853eeee541f5142247545f4deb5944817c95d458525c486508a48e1be8b188ab213ed74c102f1e9031462ccb639c50f79ae19ecadd209b2006c472eadcbef3362a8c502c8184077100a173337843e3ab092682123c6b7ac3410738fe424211b3ffac206c6622b3c2e8de0042fec051b78f03522d9040abe6e63fa96fe3ae9d73338d7a9a886ed363178eac290c2132a0cb62f78e8d5e51d59bdc1b53cf6d2a8173b4aa9fbb2a199e93ba066607a8f791bb2d9e208d7ccf3f9c743d8d40cab4cdbf36d37966833d66104ca0743bcb08f7b8d614c4452974abaa9f32b187062037c90fd73f1cdc007b392e37587f38a83e7cedc4cf964da7db84f727b131cde7538388e0d173b5213d0e3c07547ca2c3f02a2330f49b4b117de4598d424013704204959e111da94f43865e031eee485d59c890ac478a32508841cf6e1373831ef58361056ba406873a58a174493142928925d042e603e27b1adc7e671d41d285d1b180181579eb28f8c2a7d3fbdfeeb998b212bed074b4329b0c88b74bd04e3e88b8a70a694635d153a49ddb99cbe85b0485ea3ca937be46717f764a8141c94a90f9d097ab36289ffba6cd7fb749419e0519cb875226392775b805789fe96a3ee903904f366257c006f24cb4d0f7ecd97916ac84aa3e2918a594603460ec1efe45112f7b9b6496cc9bfe45e18f735f54ef4d774c64333f583b1d89b84a1d97b8a4ba8866009ea83b96a5524eecfdbd106853277bc3ddb4a6f61e6ec0db89845a65a31046fecdecc8fd9623ea0626210891ace796066e69fe2ecdcc38d46af053d0ad95191078c0694fe6edef3f7d888eee66da7e3bb767e7854b30213df6f11b3835b2a8adc9aad724329809f069599c42716ef43f5a1a7bd727b2dfa992348a2f39233e01314e94f39e18fc61256becd7165c9b0fddd3632a6656118316791f83228dbd479892a55fe78d3ebe21a2eb8cfd00b6961e1c080382057fb2e9001d5e1132e2e92eb7bd5dbe046e7eab2b3e660e1086071495da5e1f27df67f2b507110185cbcfc727499f701aefdcdbb6fb1c4d7f53f540e0b148a156ea686dd3831da7094b7af8536500bd788156b285aa673455ad1eeb52bfc13f7a654ce0fe51a0356dc0fe115f640de8ef8fa0e7ca6a7f0731e5cc0f922c3f43058c4c00210255713d7523bb181247bcb174303ba9d93d9c496c4bb8241e6ebc49aa744b243b1a5b592364348f8a2d769fabffa1752935334969c556cefa6e427d78a11d17a3847070150e64e7e16a380380b926e0312ea97a99946a5cf8403f091dc97da2a813907ad8e0be1097f99427c9bb439502ccd4f0c2460d2035aa47bdd005251d1308fb1a1f92249616dae7d33dec5b816761048690709d89c33973ac6cfb6076cee2a55dc085e01954481407b78a61f4ecb5e8fca54ca79613fccbd83428a42a5b08296d2a0cd73223af7c6f4e1009eeeae8cc9716b6621ff95aafbbd8a4600b20c3291a2a4a8d6ec5a0a56a1932b31cbec8e4ef836840e0b7406c272ac41100c19b8f0b9f5f067849981b35a199df24d3c03b4d4dea09202ba7c0b84a1e1916ead1cc47e39e7b3c5e05bc7d90969d4903b4d307b05ad7eee8ad2efd53fddba58b44a5ec86fa91df9069ca8936fbf4f7a01b5573e43bc8160c9b306908884016659a8ba00e5cdddf98f1863e2c5790987e88958b284d61d94685755e4cb491c2a0d11fe96af463a0dec97a18496b1b8ad1c09cc770340a75579a925fdf971e8ef9685f5e7ff89561d25a8d46c2f84ba516bb077b39a7db31322862b9077d089b235c5fcc9d39d7f5a78a00a3d504046540e695c10ebca7b7cf04d8f37a0b4d2c28e401825f49e9187c76ba31bd85129cb5a3aaaa8f6a31017a120f467c45699c93e0cb9f873f13e092b7cea52b70ddbd1d7fc2eb0111d8cceda9763f2ea47881bb70e89a5c35596adc6b859cfb378dec0d1c3ee3a61bb6a8baaafe9bef18c1d121335163a1df91422166db926a39ca3accf08b68f4febf82c9f1247af5dcf13f5d12bb77555957668382b3a98b6982b815a6cd9d5de9b55a05b95867b85f906a8fbc1942fae12be038c22b7f863d94d1e2613f56142d0d1eb032004192ef69ad53b76edab48e7911931ee9787fe2a5ab5ce6f09a965f65bd3e2c3b2348b80ba6b20b2db3bbcba6915308c00ec016055c94b36ba728186b515642d2bc845dd20d98c145ad457c0697d697137f25d5dcd6a34c6257a723c249bc508ed850feb81599213de42ff2498ab637291823ecb353aeb5a4075949953980e31532fefdc4fbe6a5581ea785250b6fa766cc44512133663082e2ea70a7cce59a75be00592222275f8da6c5bcdbd92de47288492585ad2080ca6147317d9b27fe716f3bb298f662b6e42370507bfb52ac59a2f76a6cb663f86f8941a9b203ae7d33491ea132690f1a23293acb1dd7409d9572593a208bc7ccb10238f8891d218617996e16fa29cff426a85c9cd308cb73f65b3d18eea82c662fba94b24f1bcd91dee3f3ac8568417091b3955f665c16ef00d5e9b3bad4bd90c7be410accc00b20fec7182bdff70867969b854a6c3cf801d4f35e84374d809f4051ee238351c0ffa5470b030cf57006854ee673370eb6b993a1b9f29f25b0cd5c8a7b7d61226dfa0bde1f601ca2c330249a73b2d1dffc9e19e3eab7129ad15af89139984e98de8928e6bbbe55c0515360651620d605dff0527a3fc496c15902235527e947df80775986325af957fd07fedc337351de65d667665cff0a8aab962b460e00723261c499c2e8b3126731dc50eaae058d5f2bc38d949963e41901ee0200c5442057a554f65ab42ba4512d494a62bcfa41d6574894552a5e0f0500724d86d0b3db6b1f04e109e04d6f7ad56b439bb8e925fdc826d85ee844dcde426befd565eefde2d2293cc8ab05240205ef3cfc0224f96208888ded5205f409386fc6d7a6cb7801771d32be2e37808b54d9cb8b65b3a19b4c21438787ea1d30d892fbc64468d9e0d618239896cd8f54b144365859ee9814102e1b42fc90bd802e518ab2f93f45138a8ffaa77ae3be61e5197dbabf9a7190711b97cddafe58647a08d099a3613e3029d65990fb970ccd27a3cb066a488984afb6f24abd6ae26e6a3a8a3e436d0944510f7eaab0f8b2896af8b45a9d7cffe965f1623928ef2fbcf25f06b33185a9193f5fc478863a3fa985e8a73cb3a446d390f099308ad417581580faf99e52f1d051dd530ba4abbf005e3b5211f6e39ed79bfff7e1cac78d2b00bff96e947a68fc9966ebf184d41578f23c31e71fed0a4395f023b64a2021eb5c5c2d87c09725c19bb4fd7693a4fd2d6a3b0eea96b0dd11c73a52b016b8258c6997be6e5c236c01bb06dde58c28a29bae00438ead40c96018e610e997470634213c082ebb66e921360643121ac52b61176855bf87eaaf7fcc0bd976cbc1eb625a7a4f003551271b767b98b5d0c85bea26e34d3b8c130a2470cc0692902d04491879b4cf5acb7c41c180edeeed676175777325761367050a1bbea5dfc61688af840e386900c1e6a9877be87f32014a9e052cc73bf0dd46d2a46b4f76ee0013e2edd7cea1222f7d4c344451ca437783b9c56272f3170fb76436d0d50804f8ecca980428afc65133ba52c00f8c8320ffb1880db50602a1e8c620c39f785bdc4773463f6200fd00ec13bef5fb6148003d615d1d209d4e25e92493322b9d8d95f79da9c84f98cb0c411c5c0ce30416c994cbb82a335c069d0ec8329719c8fb20d7edcb4461f0105057e3efe3c360954735b5f2c2b305c811a45a08041678c09e132f7d6142b41008c3e4bf07c9ff7dc18204ad61c648d062439bfc69dac9b77469fe0bf3fe422c048637622292fc8dc0ef60b52040d55e3bfe69e8cef98493fd8a7c82c1303cc5c07882009c980f3d08e4fa4ab3c4bf583d6c77b908dede370884db781a51b4285de62df37a15245dac79238d74774626b449f976794a1948a0f326ac3bc3584a34c20b5bed599ca967c80f5e3949fe75731c72b6186996d083dbcdca8cf1503a7781eea8cd741192b8cd8a28b9d23653f892004a6c98b18242e0394ba936d04a068ed02db5833ee48d04ccc08f8cdfb348f6f3e7c5145d37038b969267d66669cec3a060b0ef79a60892762710fafe60f4021bcb2c95bcd6da3063746063bc61ce027ffed37ed5096a20f1f0e65fea1795ccebc47f09f98052e709704c55f79ae089b2aaa309320edaafec261eb659e95eedd9e95add9d0b378906ddfa87083b97567dc8cbc02eacc0bbbd2a27b11a5300673d282bb5bfbea0f153d38a6f4d19c9e6a22bbe4095f2875d43286cedef4ba613d79291b42cd0a4d3f4d0fbb558dcb8e82d0b445747eef4b355d355829ca3bffc279bb98a6f4c9aebdc0d6da917998bcf84c313776054cf251040b233ac9c08f5f1b2982a5778a4c02d751ff1fedc1b46ca06f841d6e33a523937525ea495729862e4da440b2bb56cd9aa56816d0acdcac42589489c9663351df3ae526edec331881db922d3ed520bf60078d96a6f9c73cbd2ac0d1bceec753e1c3389d3427b57241d4327a82e8f4046b75c1150dc284b16d017a5241b03d3ced86811fc08b50868107051716448481b543c47cfd928ab48f1a08bd9acd3f5dc67f4720c73f6375fb70dd05088f95303a1bce55abe5ab04cfe570109d2159978a2c78f62444eb516f9494fe5e65c7f1748129354ef7acca1a8530b5a3ed001a6104a95d28c17340a1f4d04547684eb7b5031b5d2c1ce7f18748df1cc61e96d2d92f0e0212ea5e4d873d78c5f2e5c869e7dbd1ca51a618a986d336d43f1c49858b81a9d417e351d8aa09f5b036ab60a6276ac9b80d4f7e5123c6b94768df3b82d5548497b4119ff9cfd6c353fa1a002e006dbe38c47df6eb4ed1515c0cc2e7b2a05368b81a64abde0b800644da93c5c020fa44a2f1d0ec9771718f34798259d9bc9c0e9c78b6d1beb02afcfc3f5af2a97e0f83284ca7df99f0766971e4ec72e6069e8a6d0be4f30538cd112478d65f65404be88128a9809c9aa40b8fe6b944f0140522a08fc07ec1cd3f50e3123b1e41fc7d7d0459d8b0649cc1ccf4f4e5c44aca9f804193bee5319439e26cb39275be1ebf7bc161721da31dba1e71933c68c2d4cd70d5856a72f8016f1d742d657a3856bb96b539082d766f06b5e1b01885e1bc3fd5a5ab9bac1346b6562294b0b312369f1ac79e1bcdb65247b36b9a50565259f6de5d28230483b73ff6b13c48a587d6a5784522cda3c3113b483522e24447781093906298567d604aa6493415a87393b79cbcf37a8cf63de227d4d6fad931821add493504c23bfeaff11734fa7bbd040304fed95c592b24268413ae159ce546c606c84c925b478657ed3842eb7e1f5ffebfbfcd08050292f9f4a13bf5f21f11e65e3a9a9e5729221fc5f86902eaa7cdd031452b6e8d897c57db310910005642a44b8086b2c4e7a191de335fd83219b985bda98fb030df840f3242537daa55f41f31548caca10559111ca5c93c5eb5faab8a6ad2f038f432117954126cfa033452c5225feec55da9786c24ae6bccedbcd055f5ec5887ce43913a7fd369283c50b70b00adc26fb6f416be6ff002f7d8ceabc7de1f21cf4d7a005b622542f14271e502da2c6268952f458b94371bee58181becf43f65839e957c0841d9caad984721f5ca15203f93655b2ae7cad77a2d7661ea200674ae07c8e5177ef2e34b3d0979d1103498ae53a0289bd477e83f944cac1425f9d97e315ac1be1b2febde1445f776f1906bec9ab825c459a0d3d3007eb0af0a6cc9106da3efcc646957fa21ee5f4dc2ab97b8ff3b113f5119ba6f425a9ddd7572cee476987b10c9cf540c3dc3ea03e32bfc320fe311f631c4ac5dede04b0bfd3c62a0f7a8aeba93fef66eac3860d637dd1662a247f69805c27e608cd33d33b929881bd205dcfaa47d4596be4f9a341503558d75fd55c9f27f4b1b4c5241adc2cb81ab8c04762efa8227c2f42b33beb9f30083947976e16922ee13f92328250fe67054ecc628bbcae4619316386eef363301924d88103a46742f7dac0d07d15c3a614ee2a9c8085d3535fb539fc7ab735e0d7b523214148266751dfa07c5d04a16384601aaa6227ef5f62ec1f942971a22db9cfaf8c3b196a1de3a2c417bcf0005ac677503fc7f3d9d74d764f3d6e45cb9ef817dccd96b0e8684255bc17d5706edd2d6b7300b3d0f7caae4d3fbb1e63a9f9bdfe38ffc89a1a125750347b8851826957d28118d06fc44aac3b03156b0a92f6441ee63960d45b5372967ed8ade4ed37064a7810da40d2ca8cd395c4e0f2a29edd5021b73187aabe6efc1880b4686f87ff87abc034ee2a1197ffe72c2f3c0924f4d95e7d075273239a01bd62bdf620d05940f979569bd84f8ed5c017ec3a1639f16bc84d027b0b4156aec420a4055487af218191c585a02867488c6528f67c41b400b330195ff6a5efae95ca6ab0189c976f5c141641d274da7a21e0da1e4a74397d21792747f86c40b107b9c4decef9d8efce237402c9fa3cf6189a685a19aff25d4d52410343f09c6d22b16e2554e9569ae4acb53924bd21d37f5c28cc9ab3c95dc5e69ef93e228c3d36151dde964c54b167e4140cc4c668f802e379468a358697af6c163823a89a49ccd15fa4b89dd99eada23f36be45d8c4ccc7aa4652b63cfee0a29f8dda3381b1b82d660bf5f40c20a94fa578d15a15d15ebaac2748206ae745e273b3ef880e90daf0ddba0183075e8a4373230688a00ffd6976a763ab3bb19b5e0f1eb2bc15ff05cee221600f94f05f333a3455567b3c0d024764bf78b81f3e5bba9518ab6870fbd41a32ddd7829c2c5707b30360093a6027b9b266f617b3494c9961b5266236015933ce65c4893d7692777750b9185c4db70168035882c284832c29b41d57f9eb35f31661b99f983dad6d2126dd1e14fa84d2c95639bef2e1c3bf726244a7445cb435623bf435511e4594e77742dcc19cc23b097e1f3e587592b005ef1550e62f996c1658f35412a78de0b97ab718c9039e11213ef3bfb344c3c1ee778e9a165c3246a1c676fede13155d3c6c85db220f67f6c6ee5ffc2ee067c12503ac72f7bf3bfbe5211414bb35e238862e59f00a1123b5f1b46aa9aae0944a289f95e1c5a03b1faf277bba8213cbe9f0e7c29b40310b3265abfaef60ac02b60716c751f293e24d4c090caa9499eca421d66715b02fe7f62dfbf3193653195f1c5eb21c07caa90e9aea90466b645c44ca34874a3578c0186cef00ed0dc543ce8e85ab7903b5ec47bfbf24747a65efb452daa8ca83cdc91fe04eedda8ec9e95a7e6edd1a9f0b73e8bc35256ad672c3c9e3307b39831f637377cd0c49ee7954ca973d530561def13f998bb0f1e4bb0043e381b26c6c2e44b1a46e0b8ead2956ed0568373b30b89c18226eebac3514e6cd57f0da6b3111ab60ce3a64fc75b2a92db1b450749c8e2f4c5823a0520c154b92839b9701655624f5d06139dbdd06c566c80a19d57e3b55a37a6e0149097390f55af50721995ca3da9cd3e470f3c75b4314dd9714e8119280accc9facba6f8c6b51a3914a4119cd9c743a7ef6b4461ce5c234045dd51b89c1076d4378f14802828c48cf33bc0471df718633754e5061f6a65f8f3837d70488b82134a0d52454fb9160aa02f36d2eea80b55cb7cd0c6debd837005716851b42c72a4373ead8ac8c43c0b35807efcb3c7157a275f3dd70c872ee092d6a42117a576b27fd8398a2a8db823a6bc0c150017408004eb5c88945f2175fc1344897ce2131575f1fa33fa2b0fdf1ff01e3220bb023479aa89e0245f69aafc9c055a4eb84505ee593fa57aec7653e6b2635a4836ac465ad5600de030fab17b35c09f01f077a48f2c7636c05eb4005e43f380a201654d0ea6cb933afd1dfe3a26f5e69b05fa21e553c495150c1b3151f8830878bda0e807e10ce4f3efef0dbed2ad23455929e601ccfce7487d42925cb83a8f29d47b0b7ca5aae047ee0018a82c05387921bee80f26ae62db70811212c1acd3c9ccd159bb39210ee0948f57793b44a131b7740370e47bdfa0478b69c12658b50b673486400f2e3703e0b291cac5958aa0b982579d2ba40715204aa8f93e57243d9b7ebd7789fbac839dbea62bc97a945445eedd7bada526f55141ba3a50c1a699fa452cb49f0c1ce3b5800ee5d0dfe676c2e7c3b1b6e4cd22346cbf54bcca2ec24e92fc4c0f5d20e6f65b5ef9998240b43636a55ad113f100263319c410a78680f08f4c3256e673432fdc9fac957e3e656492b66a9b07887eb059d9e9e93c061bc16762dfd8469f8ee60c02fc57539bd002ea3b87c8914ef48279e02c00fb967b4983b36230a43aacb272283bdc137c177c7a3f3a800bb9cf9bea44acbb1a2ee2142de4815c6c4de11ba23a45441321402ab48d954aa9c33e58c479de1a0df2611752112a653ca6607e9f59456848214cf6e0eb92e08710e8eff45555571c0b4f8171c37fc42c029a22ed0cdc857f156b2587fdb06bc09aad001ad7100bb79a1d65cb7280c02fae35c02a21a1ba6b39154b36fc737ff821f112be38d2e8d05609c77df897dd4358a7f7e7bafc7d518447b5341981a91d0728f12a987e956412dad200dda2f9b2a7fb57be5e58236006c550dcb04e722dd082454a5dfeba862d3a11037e404a63945d0328f6890d956d877ac275077338c8b89d886c7b92f3633afc202baebcd48a8bb7fb286194904cdf678ee7773710e817089bc1ab493c20bcfa853ee9c0eccf23f8a2ec82c217f2cd5d152ff9b9c61695a13020b862adbed24a062ca8dcd4170538126b34a4db5a817d0d4e94706a1443e98e08fc4eafb34de301a73111d3b391257c187bf387caef6566b35aedd47d02daee9d4510ae45a33aad8baabc87c24db733e62dedd9b9eb197d4157c1cd9e0d6f6de5f9cc773b8481c2715c76aa2b962991ab28dece831f52abe2adfae94bc11019a0c178d8bfce662a4716f4880dcdabb7c3f671c0d27b48b3d80e065da44afb940f7d4a30e4ad2620358b870cc75d36a92620558dc604e4c51f6cbe460d46a91fce3883c51ddd032d1715c949363d9ee7f13bcbb0cc8a1576e817142314e5bd54ae5eb462534b03ca01c060a8eddd105d93d38d89ae765f4ddb250793d7e210b82447dca10d6a451ebdbed4c8710fd1b4905a63e910408c35462749af16602528aeb2c2351da4d54809e98cfe8292801dc8ec364e581d8022cadf2ad8148e65fe1e1bea17b0063ecf6a3db481aec8a6de8daf25f24d13cce82d64f1463702e92b612bc70989f39a05dd1d750b1ae2cec382b85bb4bf84c60380985997611e87c840b5eae809e0cf8a0e274db2d0b2fe25d71c2100043283483744937cc400b44ea430818f4571a93a7cb1c80e5f8b24826fe521d992a46132d50eeae33c6b744225fb1c37c0d8ec8977c6cdbd59112c870843825c339f0d1b6c258f18871db239c322cd580f0bc322ce50f1430c8fac613010602de22cf282f3c5313dcba08ef87167aed4b63022b605dc530daef7cf6b8c697b98c5c67263c349025a145a2bfb164b79f571726901dd89250ddec45e57f7c6bff14700e496565358f3c77d1313a899a858ccd8175e382bd53b935fb2cf8b49cfc735ec6df0860ae8840c72276f069f9c30015c7818ff540c70b160cbe05f17e4447ae0d8901904f3cd7a0d611510440ac6c45ff4c6033d3da16d6fa03f550fc2f1f54fe817a3ef9fdce7e482730e8f604b80b8ca31f58b6953db3c8cce373a68f69ecf99ffeb12263c6ff78506e2f7910d33f0b41c16552265eb8c0c98396e18872397af14d4f7f4d150060c1a604f49a5dfd13ff4b5c02cec3e2c5f23dbe7e6d03840d73a922a1f0f73a66f1e2975b7c56f463d2b6b9ff3be8190bdd00fab8eb2d2c6803e00d6634caaf880eb13b8f0e50b80089cf6e98063d6aa9f937d280ea55c393f7c137979df516266c256f2ba2725dc408c0c8699e630f23256c8eabed3d61f0f387aac8885b7cf399ef51f785fc0133b17de853cd7709ca56c05413568ef30baa0886b3796109dada9213d122eb142dae0ccbc23810b435989903e13290ddd4da767e38370d016680e22e75412ba14e08fc081e9e5a8ac6b99f47bd31f1530690fd40ac417f3a91c6cbb93171f0dcbfab6921d23c2c445201f28baa935ea6867646c92e920d4f44311c1d86e0ec957806ae44406f33975beb27e2476546b2e571ad36f1d59b30276889de615ed4a06c786396777e6276103ab235b1495bd82b152eca231540cfdbdda08e96f85e3c709b2c23318d568f6eeccd7dc1413a6662b279693d1a610c24ff469b5b54e08907cc5941a65c6bf6ff2e22db88ef67c04bcf60147217b6e26dfa1a5c4da8893aec3af995da3c306c5e781382bcde24aafdca0801d46e7208b2b6cdeb101e4225ac49b1ae9875fe771ffa44775b23a5c95f681c8b96b9d8da7b524cb843b5f5facbd6466bb2e012caaccd5d552e0a4263e267a0f605815299a934aaf1fe8a45a943fd77ea9df0e31a368636686f6cdb2675b711b1757ab351eb284e87aece0192152107b90fe35f7792f83133c920aecdc49f40c7774aa1ed0d083271c655f8baf40845b04087b709d761d3ccfa90756974dc369a75b6ef9040c2bab1930a912161f0147e269aeddef0bbee3862b8ccaee4f1c61d3986b4fbcba9cc0c7567aaaae64f99108d30692dd54a7a0d6a121bc1cb99c7fe8aa7568fb6b5a9407e22bf7f6e6b2ce16c36f4c4f0a5223a5faa4ad5b236baf4c9fccf26b8ce84ddcc054818a2313b2e709527f25bb6806644a50a3b73d6a8938beaf14a8f7910fd20656f4a03805992818c8c750eca4243ccbf3779dee12c17ca35e9e1dc6211913aa81a282387710ee33022f194ccb1698de837a3782d3b86c553c8be5fef065e54a3c537818c8bc0557ec9f0a5b1bc9f92bac57f203b0c7b6f8beb0ec13c7716de3d4e24bbd17b518b52f4e3cadff286a0331cf5ed92f509fc2cf4a3e61c32648977c411c0ffbebc4202cb5b470728fa3fa00659af44d20042ed0e504d82996d33e97bc06515c8303b65302781591965379796f65d18cd7d1ef4cd134929c6e369cea887f599f8bd7ed5dba2f757a5262a2a382669ec52732c8876719bf30335a5f8958d7c1adb04041d342de0ea3278ff469919acb5dc46591873a0ae2fd85afa475d5ff9cc32a79cfae5776b52d5ca224814d813296917db1e0b51fc53da8280f79280b4eda6c9545ee6c034b2baf69a263535c8d4784e14376599fd22582bb5400010b9f01128393286836331cc012d5a00774d5f0780ec67ca840e288482af7ee79eba8f49bded07f1794b36103dae92b7b55f6b9f6fe3b19eaa83e2ace6cd4d0fc65977e0ba776fac193aa082192a171f398aca3272279bc3370bb1e25613cb4921789188f18bb4ed3e344e700f71205ee2b29666d0563e64fa11ae6dcaf1e236a139854da539cb47e003e0d94b8f85095756c177662e461f10ccbb5fd266ffc208a74781b23b653107fa3e9c362f23601283d71d91641736dd6ce97c978a6b72a436ad01d324301e5148212e250ab8bd9a15bf2420a195200667c5336321091263ac27062a46ca679e34c4968e464321489d1a0dd317893f7d49b2d4dbaeea663bce8a4c08de2aa27ec26320b11fc64e9ff100ffb69c17b18d587cc894d50daf9cf5513f7604d97e762695e0cfe5fe22cfcaf8637a40cced24b1e86eb177f1981d37921902473c5ebdae07ee623c4bfa2bb1e08198e49b1fd235b2ce65de7c18f3510cb6e47b057f69f2a8029caff24dc3a658276ac81a51dfed03caa7b001f01815f148fc188d38c1d1e9f8ab20463ccf3ec7e76bd0df13379bedebca601524621e29d9e36636346f2218a763f80f06bf46ccc52e627bdc54c4c19e18c4d30735b0aa3e3f2da994ce020549a8cc7778ed3535dfa7b23145cc4efa0483ee19bf678382490883831f7dcb00a58d7f51e851b7f024418be07b918edd72fffe169dd5c7d3aca158c37b2720ab4660cafe86ccce2233fd354f5754999ea290f6732061a00d70884a268d71884eeffbb6d662756a0f0cb8c4b03388ca70e96bac51150c6f302d1fd605354c513f994f70252070dafed5b9409a844900e38a6208b0636f362889a7e365683c949919668e3ddc326928a48a0ce48efd5066b66d14c99be1dff58e430f19d126f397ea596ba66f6e716c407e993911030db065f1c5216543edf2c348243d270fd67b102d5e20673f74c8c7f622070928e8fc005ced99ad2af73b97a2a0b86ec1ea63bc3100f591a13b5df7ad01290feaae59bf9f2ede42cce9a9c8bd10b7bf01ed5f382af85f2f2df2ba7b510488db05ea94921adfc16c7e693cf78f0c5a1180d4d176fdab67ad85767be8c56fc1bb01bb8ae852e59bdcf068aed83774d5ad71c58e7c7a939ddb5adee34c71282b01931cc0ff581133fe5c455224380c9148558a7d020a447fff0456586565518c00bba0bf8ab3dd8b956a2e15cf18d223d5ae7f8fa2a0e36db9364a3e50c0becc0305b112fac81897515262bbd99512116f57d9789ecf9bd20eb21a418b5ac1d6222fab2cc50ae3e8b26e101d2f96500ab9321785146007852c670d43e7375558391725b6298e28622d334d61ac0ef1448983ba6f9a3fab8d1c298a2c64aef81f6b95391d4509d1b9eb2bd18e374451821e80d1ed4e38cfb875283ec86a6a302a795166204409769ea8842771b867214a20e6e609f1c262b81a675a258b126d9d8a3b86cc94dd93e4b9e931e53645eb282255ecacb556bd70fc3a2dc1b6d84993458959debf7cfff069c00fefe2d4a719fb884784982af85f95e9ba75efe1dcf876828755b4743112f9ade06936bda39637b487e1ff48c556b39f96b09c087c10d8f3f6978144b1faa041c07988326bad49674b02ad0f700bb729525708b713de0e93d34d0276852b930ed0e79ea1cb53e70c99da283463b65a0cc868377c36c06bd734baea4448eedd2c31b640c0e32694bd8f5cfee1943fa84a846d9c62e954aa393a1f9c90f4ccddcb60a43a2e1506081371128e4b3ebed35fdb1b7e119ee81bf29a3f102707a3d113daebafe501381f2bba8aab9cf95e99930acf3490dd99a7cbe012c79c0dfd2ac2412ec006794cb8dedb255cbd8f8dd847d1564c0d2c03e4beb400b221fcaaafa3dbdc1d518856005172ac920ba7860e2eed6de70e8a6e26ede3e4d4b207d6afbddf82583d8ca3d7d47a137389c9c6a2391319f28c509e98c3ac440010726240ea603fc706b70aa9bb212dc6789e42e640c40139251d8559710c3253e19a7b0fa388e1e09b0dbe47579222151e2825e7d6c50f3208bf9c0b78217e84927dbd3655a325dc93ca2100df8ae88850783a424671358bd97e305838b22a9207e7bae05a78b85016fe113f4f9f5b5271d4545393b9b04da45982ba39d08512b53f80f679121e6306a4d13d73eeb90e17351997fc1a7ac038bb38d3a5b7d2b8aab8ca710e96b1ccd6aa49bdd3765cbc3e1978ffc621304c43653539f117a7f9fab5afc0df687faa92aac441bb4a0755708c26b534af34e93345095c1c3c28db112e23807d3fade4a87d567706dfb45e52e9c29612bd45d238e0b0f4fe1d730736bf6a89f7cd00c9c2665eca176826c8287bdacbaaeab098467e31174e8b9246eb75b42c7cb23c8c305f47fb49934cb97808431ef0022dcc0a3f214e74092b06b13e7bac2f490e79b86b96ea7130a2e826f4803746a39755f21cf78364ef5aa83f984e3fcde8b22ee03b8470e03fd11c78673638570fd60ae7119d796b8f2dc94f689b3caed1ad050bf54f702c89aa7a5cdc0e53022c4ff7cc856ddbdb09813ac7733447c45c684be65604b36ad049e441bff5eba0455c8448ab73f227437ed38cd8df9168c41c6814c97a5930df123383623fa8f28d36b4962d0d2fa23b6cc65abef60ace0bc157c9430bfdb3fe5a78b24e8df9cf4ba5252cd1270135e4aa7a1d356d8f0358dafdfe2b72521dde2fc57adad6dc28e9b6507a90c721ccaae4975ac4ca42910f9556742d7563a88cd205160f1e22878df9f4df919b96269101294a0ed3459dea67a318a424e6a79150d1803160e3b6ecc68c805e759d81a78ca58735d416ff8342185b031df56d1d4ae3a4294e70ba9ddf0edc13c2bbf0612feddd425101098281626c70941af4d931571ebc62b9fc1a0b690c7ec2ada2bcec514650414ff76ac97e5fcaf2f63ae0c5dd42e636f6c474dbb5ed5301ece802ba0d0e6d5c309a515107698c776bc93504396e0ea8607ea5b406d1532deea56ae2f4ae0fe899bd40fd2aba12023b873be6fb05336b0340bc0c1001078038381e56a10ada0810ab392909508d6ea7f6f79ea01c9b101f5140dbf6de7b4b29659232a206a5068306a5c7b08416e256e6ac912fd91e4bb3e1b36acefa3e5ba01bfc1872620a37152ca106563041034246a044910692a0ebf94151142e80c20a23d0235831c40f204eecc067f7d2d956b509dd7055c7b3c1913ea1525e65ea7423aee244adb5d65a6badb5d6ca43a911d367e50902e7b7d514541a8d46a3d1ea0bf5bf9ff99f09ada8bc301693f1f4d076f878ad56abddbc56d33a1deaca1f04b5d6d59dfa427d206a58566570186e23c22004fd3d6feb30050c667c955802d7048e06b81a8fc7e3f17837e0cbe379123caa6fd6de6b5542a0047d9ec0980fdbf4a171d7af99b396d51f5d73f69c73ce39e72fe7bc931b50830117d8d9ed76b8a215ccbe7dc26cbd49acd0759f305668df270c8c28c2c400b361dc85cda3d469f05b28a23f222187d9f741d1c4b2d2aa103568c20a9fd8eba439172d2bd067a509a0487f6059fad0214911741eed13c60695a94550176f5511d095ff1228c00209da133a7f0b30d0b99c11fef7f9fbd40376a03c5cca06f1c71fe9164bf05d8e6d084bf09edffe1eb401c7feacd0d60020add60ad3b4d84845320236758b38ea525f8678fb919b18a42eb84ca9a18778b32d71b7fb4a516757f5753bd3d69d6d8957178a412ea8212d6dc24dc5db0f177154c65f0c0a7256b8eb5847624e0c72114805718dbad42b64b14db45197fad4450644de95426badb5d65a6badb5ceb22c03c00e6f35866de19f335936a36934677dda47f3d0356dd326b8ed5f42a15bc8426b9a8a4e25880aceb646af92dbfe0788823e6bccc5ed2bef2d9dd063a595924ae50815fa541122d9d15646e95daeb2b32d92389ba132956447e39eedbfc2429f59b601b04770d4c5c9d47d1d2fd0a66ea9e345edaa862574ddf445e2fd4c018318cc62b117e94b4fedaa070a08fad4b42ca311a1c352d3ce2cb31f8ab3124922473c4221a173fe917ed5e561188638bc380c43fd43fb689a6d8de545ede86c43585dac20b6ebebd85fa65e6038a07d6ab69dbbc4ce35466576f4b56d72d7fc3834aaacc6346d6b9a6d6599a6614dcb324dcb324dcbb34c9351999c7d6459968930390c7396a90865d9f657a182b66aa8085199db5379024f4509442a45c8b23ccbb45014435b43d334ed63274898f5ecf0e151b38522ceeec64d1a357f2cb4802f0841d35dcb1b7553ea02fe8b6de1404511944003fc326ee9e1c03531c4cd67a47aebbdf796e70030be173b088edb927a844f5f6c0462d83740b0ee51b543f8f0a8d9807ee082723a4b6f20e82ea44727d96083cd228b1e7c860dd4c56b2d2560ff06b86750973baab69c414db7d4abbda508d86d4b9aa3bd100409465022084522e0410b8e08c2074618faa107bcd7f77ddff7d1683509abb3d4524aadb5a6f9ef44d0b656d38f524ab30d730e534e2517f21daf97b76f90479f5ee4638798d013db94ca886eebf6914799b7a2a24d8498970098ab27edb6a3b75f03b32d93b75f496fbf529d6984d1a3e44d5e42d31688c5d9514f9f16475d72392468a0129ace8f4a418d3d9a3c756cad65e03255c3f7a70bd9f875ec30b40f9e461ddbfa3e819fc9b3c606df6583dc1c4b8b73d369094ddb7dba902d2d10eae22fd3256f7a5d2b21cffcf681dc74f04ffba6b216f1720e5fff696df8240484ff00fb95a8f29c654b77ebd66d5125b23cb716db4ae42dcd0b4bebc3cd2474f8f6f39b27a16ba7057207b24074e57f6a22dc0ecb11d26fd6c3c7e52dbcb9ade6f37dc661fe10c36ad828a1e93a2a9dc6479f7a87e884c2bf33739aefd4b8794a51b56422225d89ab0c617fe082723a4b6bbd618b2bcdb6c41296cbe5723e1b45d8c9577e82cdd8a100b95c2e772ac919e36c553fd0198c71025ddf86919b1ee347d712960b434b819897f0078d1686a669ee4a36f84129b5d4668c732eb23df365d34cadb539e79c73ce395b92074010fc7476643c331af859eb4e5b6cca8e002944453c22dfae06114f0a4ad8a8a5d6c67664b39e1d3e3c6ab64aa969bebc8cb79a3308e61a4ec4fb5c388a9340fe08b8aafd1afe7d1cf7c3af25b54544dce63f64542219b527a31609bfba3109ee4b521ca046fdc80e3645c0886e5312b88303da246204620cce3cca01443d1b759fa730e69402fe9789506fbed84830f2f0e8a2f2d7f0d5e9af036923e7fa364e77baf3af61c359eeaaf2046de8b0b3e19fd7b0e1b9e25ba3a3e1ac1b2f6f80b969ed5f15e813dc7657c386b3ecebe0ac1da660816e9f1a0a1e6d9faa6d1fe43dc15a4b5da0ad0bee9d71567561fbb70460a3cc16e8a81720f4099a24183fe8fa7900ac3efce4299b67caf9e5342a0149ce33ddd1812008ea13ea552d2f30312e2a34b545f8b001dd7096d67ac3380ccb18778ff1188f713114c3185d059d3f23ef5a9bcd766b6db9f4627aefcdb66cbb395117bff1ef132ded117133260377d37082466d8dcb36163410ade339ebccb55d23a2c2f6cf3fb28d68fb672067d5bd83d72762cb988db9b36c8f20ad20ceae658edd5d02f1a3cf36dbc2447ce57f4bdb028608008489982372c48d3702c4409f980826e22ce7fd2056dfd9f5cfd30aed9a45fd7b7296fd5ac3afef3e501930afbe10cb650f60489251793fa7effc188354c6b4f1832419985765c044ea0bfe9808e6ed1d78b041c4a5b0470e522212135117bf362ce978bb5117cfa3b8cb36ac71f8c4d3b84d445d68d425df3250b69534dc2c72d6996de3cd5b95c72c88899cb7485efea3cec7f61f83788be2c62122b6ffb81b855ca067fb8f4423cfd66c1b1a72d361d15b80b3bc9581f278bbe5f186c7db1d6f6636b1794d1f6fe3cd04879ac284c3cdea4d46b24b7c4665c09b159f0e79abb2c256c57ff2dea2da7436b74d4117b1c772549ede82cc51f224254ff239465eff987376958b5be8e83ffd4dc99b4e23d39b7c8ed39bdec4e4e9c89b3e879237294d2549249148620e922ff91399e3f426fd23af00922ff91b922f79139943ffc8c89f1ea7e44d263235be8bd7f13a91a9b1fcf14da5ce8f0b93d7912a913c266ba59c07491d4fa737bd898bbfd1efa2d4f919df64a47f2c6f48de54ea9c44f04946ba05495f28f29252388c983e07ca8fbc7e059494394edef42435ecccfcb73b1bcacece761ff8b940f991cf01a54cd52f79fa1af91c4eca542d69bc4cd5847419e933596da103361702e266ce447acd9a35ac06e88e598408aa48c86cd623888ddaa8290a59f5198f579b4c2693e1488ef2c46957abd56a36a01b2e08882e88d0ce6abfe93a03ef1df14845d5ac10fb088bad0c97d8d6424c531a2b7271efebf978c4ec836bb6f57d09d76ace4255194af8565b80a8d95a8931e8a4528fef2929878a6b41f4497114f7e2b6615bfeed6c8a5bf7de96cdeead61a3d4c1edccfab87fdf57e21ade8179601f37e9cabe6d590d502bb3566665b856abe11aaee1da6957f2811abbdd6e375c504e176468278488773a9d4eeea753a9f2d87a7332f05bfabae4dd620d372962c8a0fab8f7627c475600fe59797e38ab7ef8f5b2708d81f29c4ed6068e9b35e36bd6cc04796c24527132994c36eba1f9f0f880bedb0d4725f418e78c3fd937fb84a03240cefa400545a03f24ea87826d2d0968cb7754263faa05fa67b7b3bbdd8e565baaef3fd841a8cb8eb1719c953fecc3b7332ef2c97cf87872f9c9be9d2fe66691ed8ff3c984643640d1c420937d32d909ce8711140a857a95f90233e3aa81d1a0f6de97d30885fa509f82f29718144a37046b2bd53e92089d4cd3344d937744fdcaca6288dace8e27a408d291c4133f539802113b0081aebe5097ef3f1d3120aa1881cf1186c0004d15850892c0410b90a80991f3b52f18bfdc7b516fbe8864685d1fdd0555124a5520edf5dcf67ad65a6badb5d6dad1f5976582081ff0c1cb02784810af9f940d0f104fd4a6e7eb9e8d09f55c885a20de22f2452821f6f6bd088628fac17dea5994d26b96a43c95d4aec65e2f6fafd995ccb64ee5699635939e25c900bf116df237246f529e5ea704e547489d9f1b1494d719f9931f2d39be488e8f7242e6f8b94179d4e738796a573707caa390a9f1514f5f27646a2c5338903ccae750f2a832c7481a8d24d2481a8d28648ed397fc0999e3e4514c9ee41570fa9213f2e7e6f4258f42e6307992a7a4140e247ff238258ff2646af42d46650a079347f91b9347f9d1a3943a3f2d4a9d933f3d6a7482db7bde4ad194dd41b22910a410b2eb2e91463a3f37278ff2a84fe160f22dfec6e45b943a3fa347953ad4ae6e69f2a3f2e6f428a5ce4949c7f2fb930c5b42929026b2678380435a4811915cd08f5bcdd66a5eb339baab24fcfb7acfc6bc887d9bf35ecf7b3deff5bcd7f35ecf7b41bd5e05c2de09f6bcd7ebf57aee3692bb50420a3e0ad60facf50329f8ede0be52f829c6b5172153f7398cb3f866b18d2866f72264ea7e8c7deee5de4beef57a2736932650702249617d6e96c7896c0b24229af912889c28678c73cdfdb801419f34e7c3e9aba57b8800a94576743534422c8673b3d5aa4fa5150de56034706a8c1896fb3eeb4ab03c4e74037a03df2dc189a88c95d94095e173222772a253153a1d494722e9848676444595084b4c4612adb5d65a3bb332db0265322bfbd108a53227880297a0eb3e4dd383b6652aabaeeaaa4ea7ab3a53e5667d512491482473acf7de94af621545124924e917354914c5ba63d71ed277bed7e2b0541a47d196e70e94688b5f47faadb59644a2af4775b463e9c11249b725594bb2d68e255269ad2e4ba56e68277e44dcf422014ce06dfc18083ffec1b371c9c68fafd8d9f871ce5b1487750e7e5906596d18d92efaa0a00a9b7eaeb8e61ce326c6d8b13b76ec38932ef78ab1c519bbfc26a15d330ee3d66f145052a8ca14130680d1e3a90559a8a0cf946d5942005aaf297fd0674a4a8bb3bceeb7197b266b50ed53f074838b6afa227d075de09ffe625903a31476babb8f6fa9adda461226923538174c1447d105a365ede16187141ed6ab4c77f794caf3d63e1677aeb374f69e54efe6f557dd6bba79ff2da9a9cbfd7b47fbfebdaf32dda2c81437ef8fd6772a0623675119fbe2c4db5aeb06c1a79484815f4929a594524a434a292dcf30a494d29052f0ab7407a3ea0aed18af7e70de940bbcbe4ea0a5b80da01545bf922d9d3e4fdb5217aa1ba94a2c41bbb235d0f5534c1e70dcc05171e0b8c1e301070c0c0c0c8e1b3c1e6ee0e001c78beafda6064f079e8d1d1680c34305e10187b3acbda9020caac6f28fa71cb0e08906ce9020ba2ce828c6c584b589c09323ea625f5341a76270eac1f5112e0d37adf53206423d43eea53b57fbd5af1b93f7c69cdfbbdcbc2078c18f6181e5052f78c1fb6079627ceffdeecfb84010832ef0bbf9de981967ddfb1746b5afeae2109c3a0563102cd889210bfc71e7a77e063325d1107cb2e298137c170988856118e2b0c438c4210ef187e599f1578c6b6cf0639c153efe191cd63087315688718cb330cc8cb33086d9f8619c551f33e1c43e551b9f36a63a5cbb33373f538f69878906bb4fc17dbf6280ca88ef3b54a6b4affb405bb508baba7f6f2f4b984afc11a822b410ad8bb2af63a19f60e6c622485f7a17ead9f7eb68da55f8a552a744a6eaebaf5f2abd2e75465f7a1d4d8e4a246857e1874f2235395692da968e5afa1bd2974820e949a50ee9f548c55aa670d0fa9a375aebf0b014431242370cc3300c471aa01880de8adce253da628bd5b47f68ab0a3d48651ee00fbe2882e78dbc6f8882169f926a80bdec5aaba9be89a4360c4312393ee9e94b1c499f83ce310ac3a72f31144b9f83ce41ed4a973994728c94a5f243d77685a2d4a5c6c0435721dbd2204a3faa3c6fe4f3c5cd8f54c37d920e6877913c696edf2c3648a94b18de300c6f1896e287368c5fdf3f3563fcfae287ef249bf146de6179faf7502bf82109be93743b4906787190780b691a386017673e787f04ba79afc9c7e486bbf73e169517fea8050b356e8e7f497f4d2425f9a9160fc4bf5cd4a0f2bd91a4031a3f4907747eb142a7b6ea57deb61c51c359252baaf2fe8a3dedd422b557fb807ef8cdcdfb267ffa162ceeddf9397920fef5c25f96bfef4a50569dd5a80ccadf4a1bf90be3ef8bbf2b2ffce9b29a0f8d66ab4443f84055a193ef0b42e32a4ed340973ef246de273fd6110bd9c2bf205d781519e35748974721bf13b287ea57e408cba3c81e2c65ca9fe575bc56ca54e9575ec74bf62f55992a95291c56bff237abd2eba87ef5a5f2c6fc955f297556de7c1d2f182c7ff3e275585a46decb1b18ff02c6eb3839297b98ffe2c5eb78b1b4f02c7fd3c2b3bc3f8b0bffa2d479f12ebc0ecbb7f03a5e2b64cabfe575bc54317ee56f62fccafbaf943a3f5edeb87c4ba9b3f22eafa3fa18afe385227bb4fc6af52fac5ef62ff36190956757f75d205dc816927a0c2d803148dcb757a4497a6c081fb3995dddbff7da50df3eb1c130292bcfa9ac325cc95f96172b2aba7bc1a2fa951764ea6321535f29811b967ff18285e5e96b85a5fca166f1fa2179fa529190a3155589855f21cba724fd2eff287529fd9fd474e5cf02a9420280f4f28e90b5c87d4d9a484f91756757f745b2070b5f227b293f227ba47e64a1bc1fa694156757f75db8f8162eca5459753ef6fdabc4374282bb44d24d1a5b7ca5d770381327f180bb7badb5be78f1e2058d7beff50a0585c2e61f042f0af52fb67d51e25d4167c4905d8d053423c620763ca677946362665c39c6e5aa31ac8aaaa88aaaa8ea9a89899971c5b84e37c65563cbc5c4b86a60259b4ec184d03e354a67040882e0f77d5f188621f89d369d628922fb6cc126d03af08473d5c0702e180c568373c1feff613538570dcc05d3a3192a3478aa399d5adb7baf3ed9740a16a06008910edfe8144c10b1034f3a1af56fdcb439e378d5d1c0f9ffc7b9d1d1b8c1a9b5d6ecf8d66a6bfdf3b480d3690a16cc6abaab71ae1a18ce0583c16a702e584a4a4a0aac06e7aa81b960a8919bd63e0c1fdaffd4a73e676aeccc4c15525286e43cc2a89a83dd40e3deebff807befbd97c60db94be3de7beb7d7ba90c79bb1c6f3a05134cd827ccb6aa8db1c011dbe199f5d07c2cadb5ce7ec70477ef8d85259bfea8472929d0f46440366bdcfe363323b6bf4d8f0dcd59740a217eec1f687ab9edb85d4ba512f5410e2787a90f72a06934926a184b30d963e727ffc9a3c89f04d0176a0708f3f583ffa404027cfddc1e82a0660f32b791699ade0d379658930909148a24e37b940bfa840f0d331a683364336634c466c4603d1811180f060302d3c182b8e9337c103204858f8dcc6666d303c58e0a133282a6f7f9800754861e64f5059d0c9d4d8cca84ef2f23c8d09010214545449e888d4410a05117c740bbfe49d3c336eca3075995012b91825da5b081ed7f42442b398d5228a8110046a928681515928cfc240d34c46268faa44fc4564a1a62b27f9988f639034d36d3e508d1f47442434240173e9f0d0f0a88c5f144c56673e1b3329ac9d02ba41aee4e51d1f484f639438de643d39b2126b32b9f6126a4b32b1fda4e05d0696927b40318a14f2d0371ce90589ad05cd0a84b1e594639dc8fdbac87b6230a1e403e8874424342c023cc6ccc6800fc4948945d557a84d908488e47cd0750d08f9e89d08ea8884888809e3ea90e72311dc0808142429f5448f7e2050c13322797a31be9d915ee066493f1cc7ac02f2165ff3219d160078fed5ae766cbe483b8b3be2113d286c746367e393a2ae30242d3f3219a5e114daf8aa52bd7c324f27834c468d8f19609e7374932f20f0007e628c7a78709261289a84b6e999434453c75572d940c09194b1c210ce813e770ae3e6e77db15db722d2db8d09611a53229da449690ef31bc4053a4d2f486becfd7cdf16584c91e266f22b55d559300984ce548924f53842483a647d3326c64d4c57f0610689c9db3328e10ce10fe3c92336cb8871e2a13c56de6ac194023003029811b7acf3082baf8cf20017dc1bf84fca166f12af9f12b05c0ffe752fe194550d35f6564226764f2db256414b45ccea0d110b3ad1cabb3d57828a0a78022b11d590f4100f5207356ce12363c3ba0e881426554e6f8d028703a7cf318ea9390186757951643ca450c8f863781d910da109f21b521b621b721b8214113980d990df119521b621b721b821b12e402861d0c4548c120040622188a60d8c5f060608d30d9e3e464b7cf197cc8196633d0ecca51489a9e5dcd10a3e9e5f8f068d8a121f6a3e913b1ed6f23b3e1b199b972ae1e9501e22dd8d0901021454534bd22343d0a850c159630a19e3e5d10824188baf0400b7d866a426c45371eae080f080f341e8d57e3d978371e8e97e3014185abdc2a8a306c113e08822b202bdd2ac82a87bfec82d0aa35c2640f92372173847274644e2e2728079743733367470e8f9c1ac9db1f680e0fa899e3431c7d6debac0fceae84c411c221e961665b3842848aa430dbfe28f9003b32cee1e12d08f8e4f8e4085199f1411f9a560174a355fcf8207a45ae0a2057e8681541e8154186b63f8e0e2788b720e0635bae2057f80cd984dc8a704472db71457441fb9c6127084d8f06e52b5d072042d3f4544dd04aeb2d8926d20645b241c015faa4e94121dbfe33ec38ebdc01db36f83d9a2233c49ca5fae1a6ab70aa20375d2c55b750ab6e2726a7d3c9092e85a50b1ff0d32a365acba9a4a4a50597be52cb46dbe4c433d9f61f654699bc328c3279c191cbcc28b6cc84e0ccb792f1b56e729aa195924a484c7a649452b2a5147c463c072146aa1aaf1095f91d75b1381b2ea032a253d9a711ddc86e8477aae008508536f1d918dbf639c28b3102ed5fc1918aae528172d6e7c3f677771d1a78c26e0442e85581c6f3aa3c40f80132031ffce821c263313131cebae60b08a29e543d0a53d456614c8388de852650299457dd9b80fb62f6de5b5d78410b461e6e521f4aa9d7fa81317585aeaf12684a29a59412a1e90e4ef4f17f9f3ffc73a68e3cec217e2ff529cdb4ec21c2d8d67f2a099afe09dea09640d7eb1ea3c773605281a69f4a82ae36b80c7edf574531ac6158eb5743b26e30c54d1ce21087ffa580ff8f3fff089229240a6354ca973ff04bf9b00b2ed0350548ecc75d26504f419da79c71ce399729a753cabdf89e526e8c0fe86ab2e9142960c13e5f7edb1678ad4f553074e4a38d617657e52c1dfe718442d1ff97964d83ac81b6d75a8b3148c3b6b4aff063a11189d3e708a4667512027e9f3a68de7963fbdb803b023aa3d10995a2325f6062666abe0bd21d364216fb7d5eacdff453bee2a87004237c08f1840fbcea6bda8a0942088e38a289996ee7551f455baa2140e10620f021095018f1aa4131b8c29604254480020cbc6af55ab1c0bdbcecc0996dd16ceb2b5f36a6d47c37556e8224ca0aa088fe30f652e526bebd10992d37e35bc6375c504e17646827848897abbdaf127117065770151446aa1a5d2eaae9d7784bfcef73e8f2157e2a6344488276851f243ff2ed0a7f2631caaef009b3f18963bbb576c65ba5590dec861b9c1a3ad8d8e186bd0e135363d56d13ace063106e5b21a52bd0fa285205d167e31fb5ad5eba362a436e2a7396bfde24a5a6a5913bccbd40823ec18dc1110f5b9f98b631a6794bf37c300ffcd8e62c5a839b00a874cc592c72e7d08c0800000100c3150000200c0805c3019140241848b2ba7614000d64964c70543c198823490c04390852c818630020000040000163866a881cd18ac2d17b8e36c4318a5adfbfaf2af56a01e6b592705bfb470212d0f682376ad4867e49015fd8290651a29a08587a22ff34fad391b5e7219c6fac311022922b571653e3bfd324193bc7e4ba404486c101190c0c4a18dfce7fa3fd4067f5e1f984d456d4b27f642435a1203405a4e3491e2e82073ef147838240b0fdba545a2a37779eb1c430eac5ef09456482dbf41a016d3930aaefef1f5e0dbec864f0be0df94ecc1cfdf940002af118d0b4610030b65bc85f8c63ef96b47194958e88bbf00b84fa8c47e7d6d792b5aa038d6a8dd07f714a231d67527525a35029c96c83e7343b90311f26e113453157767436c673e2dfff3ccee586eab6d8b783c244eaf6bad826d62e782bada4c62974675a13b1b4ff9ebfecfeed3f30dc3adee319e6ed87c2ad5d5b8ee4d00e29eafa82001b95e0f8c67566fef674f641c2e6307ca5a657782470ac6b93bcbe67dd3207661f83fdab779020e855bbcefad087ac1ff45db0ded27eabdc324d8127b2f3bbb8e2fab20f46532b8a9fbc680ad1642f896f874cb06192b9674c4230c0a402ab03094338ff7adb290e433d0aea613075290be77c3a0f46e7b1850ec55147b47fd3a914ea89244767ba44cdd9165bb98099669a74bdb309b25db6bdf4fda26b1c65bd5367083cf76108d749eeef2adf4c6f5de370103238351cc0c0ffdb68b39395080448a3396caa972575ce804858d008319f70c10584810c6a18da8d1b95d6bced90cec85c68ce021bc6e1963cfb74f710363ad5d429827b44e68432766c225101fc2396e391282c20391710ff88528b47b6affe2b9c098d667b25d5cffc6325e8687ef316ebb44c5061d8710d4d182676465b4a82d878c5dadd5d6d1bc6c0d32eb9f81635ff3847193730036eeea7a698849df7cb3648eb1c600cd6ee9660351819e827de3a9e005b1fabd7c6939145a2390ab0821cbc3e4720bc6a1595597663e2081f9fe0cac6a015eb6905d10a522b915d441312d507307c7d049a10a9b0756a0ad968cf09d65d797bf5b2e9406d1a43362ac5f16cbb38b5bd9a0aa650d5b27acdc8c78809d14b125953e0265fac316d44a74b0c5cc74a6b2fc629926911ceacdd1d59235994723c944d4986910ae1a46163aebdf43d270ffd36586dedd696a55d6df513bb6769a412b8c115138e3c3d60c75edbdbd793feae4efbc259b10fe116c38a89370c0541e26847684e996c0f430e69a3ee5ee305ba4baa52cecc40b43af1c11e3c4a4aa0d470dca91dce1a95104469a1e2f6da2834d4980c8939671e247aa58394e155bdad78882d0d2c842cc689c92177884ce8741d72ff96dae974b9ce90827e4ef11a62d72d8d4a7f6ed38d51a0644de889616326b2bd154d637c5fb01557bb4024504ad85f5bbe2f46848d14613807d5f7816be9c1c252c020c344571d3f5050d778b7496c6acb96f2993559fa5a5c184a660b66689f99f260fa300be7930500874abf038b39341d9f02af0d5c9e39b5cb0d183eebc6c6fbc522c99c90e71d0c3ad2f33fa3e3119826ac1149363c122696585f32ec87db2c14f15226f4d8d3b7f7b8214ab3b851ef21226b082accff8238cb8b52cf743faec5664a05be67316d34ca271dc3edca23b50bfd1f0f5820959b7b0f674fc847e81b0f5d2b6cf364b3431d09a3c2b652918f40a6a298ab870264524a3dde1e336b9c2533410516b050d17914c9c7461f3122854b8aea212d8be0c6bbf3a194b6d4087b3a012d2148065ff60bee79a212abbddb2ae6f0fcd34a100554200243b064b889fda38a313b5cd226e7a34d41160ad70f6d650a37dc160f1d81a5a5a608a68f33c56c5805432e3fc55037be58c1a4cb5551cee4fa630d7ffc33b524567451205e458a9044f4ff10c7466cb4a3612d52fdcb8a614404ad853607111d79b5c416438ab54308eb0892665e5434740015f42f8a32b259ea63e246ac3f94820ee95bb20f9dfa0592931f3c75d7c9298406003fdf4f518f7dabdc7524c3dcdb9da633cbea99b92c67448f4e468b5086bc118965b82bfde19b0098e1b4d99b3ebaba53c44734d071d8a047ea7139e7ed2ca3bc71e38f15cfec704993dcc73630bec9f2956ff98a23d10ff425090238e1066bae414330d4792fee47202ee08216fde3be77c78cda0f94dabe7011ae7ce78b1771497c0595b6c1d85bd9506c53df978107f4cc015c053a874b780346b4bfd1a0a1cdb71a8c9b52818584fd9dee55680f480b9550501860f9048a017200027eced408005ddde79f9fe32ab23d7cec09fe48a9d8fb7f3c1a6a06bc0d0ff57e6f8a8bcee76ced8d207bb4fad87e3e4cfe344d3ed6103267d4e0004fd8c01f5b96d6e839414021da8e3b5cb8b84d7371d65a718f0c742b2a8d4fe42779ebc574b5a86b7598871c0f2a6befbe42c146dead8880738cb8defa41df89ec1dcbf1d16a5e4a9c10b8dc89fc3aa9b0b3ae5952704fb435ed5f98f91d35d23ebfbebacbda2c61cbff75d024b2a02030b18b3393a8f697c084109f2d8b0757c35d43010e9a08778ce9e7865960377a258c5a113072592044ebac6f19ab5f34c53fed7c4c240de6cc9bcaecf5c529a3dfb4324dc556e4f5ae7b15fecddbaced12a88dde91a94e48b15ca1a6364415b3c1fd48396fe7a99a323a3187d9792e14b0f87ef2e26a833bc9c1038d11c15c1560b54ef25662d36969b1d3ea28400f2943d153f6b8a9c6628d94c947073a2b536708be719f94a2434dd4f2ff0ba5a1ad9a1528092f4f238d92329629545c4da10b889f84bdc7dbe350b5ff6f90927906bd2f610543913425e5b66a717993e76d8dccab404f9d23de5db2d46d5e767937e9b88b1ca806b8eef8953189ffa6f2148eb2c9d41a5f4cca7111cb140d76d6985054de60221719d246ca5eaa73199231a18bc852136c2a0d39003314f04a3e0cff4c7f8da6dc8da249b078142c60175310d6c26fa30c42b1b13b48c4b85805b4e0ebeac149e95dbbe47ff1e2646809f50ca9ee21fa2acd306b3e60af3320b8bc59ff3cb6629d9cf478cf1e8e82896a013c1320d06d2f503ccdc1c74050aed31082db580c73922168993610c9a439de9c4465039b25b610cc6dad5282028e06f7d5c37fe32c8e99ea7c5a9befb7341df30160d4557ff91a07f508952c958d6090f97a4dfea110b462db1877efb59d97c031f4438bac5454e912cc230b4b1ff0f0a00dcd0ba52401c13fdb6eb07facd3c7e3235a6c63463c279819a285a02c967ab2493550ad57032b374b08be9feff9f872f02cafdfddce58ab323f7022967b1079e9ad4d620c9a9e687782b936b6ce7cb659a737c46a04ba5519601b88e934ec4fc0862c8881efaa451083118743eff2c25a33e2ffb04dddc8944625eb8b4acdc9d83b4c32dda780e1a422253849561b1aaf9bb08239180c2e1d4e72cc844a68cab56fa49a409b24762e63fe65e9b756a2c8fc8ec2405318dd0c30f2d77f88e0fc76a67854a92562d2a76d8cf4b7770fd4587c0ea8bc79c410eeef3792dfd078cd81e9c74bc0066f496845fbbb1936640a96ab61ce80a6b56f9546d1ad0d5933888514a1655b989b51698336f2b3313616382f4d1b3534605d2db670093cde3b4dc0504a88c8e9985501c3885ab48198da70af7979ab91c2d96f6726bc79386572bf1055b1c5e2274a78d2e9a8d1695f4850fb2f49ee63820fcb46bce966c3e458df673b0f9e7aee06fe8402ac146b39475ca138628155442282b84967541a82e1b98b16e03f7e582df60408f5e0b9bfb980b8ec1806bb70695ccbdad6f4215df4ba415ea624574a61b18ca9c5dd95354f1d3f74abf0e720e10b52d24788a4f348a359d7747b32a815656ba0cd8901d119a157f4359af2c7fca267c57e24f56d03bad3d4dbc9f2fcaae314aae4c5d769a2b0d7614910f177fd8936dffca551a47e87ad2dced3e2b215b66b6891e250ffc6c34c57f37d6d53176f4b29542780b2951cc03884d84cd109ce35fc68afadc0764a8073f0c6fec0a0e2c309417d4933f36b15f00ed5db863a7ad5550461518f2be8d6e6d5961d736cfcd89aa1ccc057647ab75fae5fd33b7947d9a0b7b2d02dbbd85ead9f467a232f35f3f9d3ba0c7634ec83c3fbc3214e100f36966485f6bebb416d89ed5924f5fdec8e6141718373a25983da1d2c44845536e8f413e0f79fa1bfa41df552eec9bd61f990b31cc7a1d070c2e46a5aa803830ef1ad5c9a0828db9d68c5bf5c665e7d8665e6d61bb323f170863de75dbf4c16f3885bdf3994bf31cd68a16fd9335f207aeb3e4402987e078c5fd2484922524a9818ce0e0eff5515d4bc862f7d061dac2a2988e625a138dff0ad0844eb6cf29e38446aa78c3665e90cde88d9d34bcd734b4925353693daa8bc235704357b46c37fae664557f9485eff2fe048d0b1d45109202ee1764cb86d04b74eb8d813ee82c29d28bc76a62c66a7ab70144bc23d903a1d415bad026d394481d55d776b8cc481ced1921464c1a1b310d19b36630b22b31514f0c53889d4c5194daf26143817e34cca30050cce997c616387157d6f070d61c2eda0cc41295664bc844a3b4cac015fb8d3a6f7dddfd86e8f302281c3b531dba743b0895eb9399cf5cd77c74db1c2b5eb689a6f86d97a36c945f248392671400831d08c3f5bed5acf3c1ed5a8f8a04870dd8d56c049ce2b1d616caa8b10d8f897b8edc66eb790ae65ff31009ca83911179400c9dddbb7b2a1e1557b78a9cfe30d683ea90012c6738628ead0120f08ea611e15a341b95299d894cbe41bf5ebad2d075cd2d7e30d22804f841c26d4bbaaeb2a14906a7a165a37d4ae0d3cb9cdddb310b554d7c023afc6773781d7809e3368ef0bf7483892a58823d076e6adaa814bff3b1b8fb450b933709637b07f8189665bcd5ce409445666e61b4f0ed45e725163bbba80119ab15d216915c81fb2ffbf9b4acefef4058f04263cbcf4a9c0d404f7190129b18d3e750586a45c46b60fbb6c1d12ab24c5a4ee3da7cc1ed4a9a0baedfcf65e46f9de0cb201b225c84a476761bf1d3b7b64e627eebd0893513654a9b298172adfac0d78ae0be0423a5a8f48da5aefe5a2b443cf59d69efa7635ad064ab2610bf27042389405ec863b5f0db92c5d1aa0b9f165b21d81002b703571e927536d96ecdf5561faccada3d711a39cb1319173d208b34056f84807a63491c55a74a4a6a2df377c2f9fb5f0f7d114512c80eebb623aa131e869cc4cf9ed820f41e7934c49b0469c714bd7dbb943963b34e870edef364c173857cbb60cd3c559864461aef2983aa9a05862f47b93e1d66c38bb5cb7c14f9e86979ab273acccb303b6eb5f322775b334a731db8e72df0bd19ebad4fa41c45e38b43797bf764447d26c247d6214519704898f9266281eda4676da67079385fac6b98907bd1fb3269285281c93fdf65f69ef0fe85d00bbf27ea7806963e07de73a36d704babe46663c171b4094338fddb94e55a0f0acb6ca9c0b9377bef4c3fa1e1e8b0483b5f61b21aea30694eaa8a380ec07dd261b91f76443a4c75e153cc91a801979afca32bdb727b8a54d679b80e3153fe1b7fd54d3cd792381fbee0a5cb748e99caae41fc605cd538e2276c253b50b69330548fb360ccf0291a86902c365cb82935664b1ed3232991198f4989368cff63e3671941ba2dca2f0f5af4edfb2a2f09dfd7330198a288633dd8fefa5cdac11cc2c81e1e0b8f38746f9411d4a9be56dc11d241fd9a328bf3c0f927251d3e1ae7abbc7ae6fae922b630de59c756a646761cb8d2e10cf0818fbc4f11be55b65731b36ac99fa2dcc0c32f5c9bedfce1dcfff1ccb96b0fca987fe97cc5c77cef520bfd9c2b7fc1596886169b4f29085948d3a09b2fcc9dd443316b98dedf81e6a97dc135c8fe3a37cd7ccc4356ffaafa80c3f7f651bc935739827b7bf70e6716ce25b07358ba56871f7b023beae7a80e1cc2c50ac8cbffc68490b10213687978ba53192e2aaf0db2a6e7f6feb0f990801864c590b10778f3d87d9a8d617ae1aff2b5813f4dc8baf9923f4728d6aa5b078c6a12818c717ca6ddef00560e1ca0f888d528ad47224675a58a58a44d0f84c7d788c0e4b06306daa91a76fadc7d3442b8b3de78832aa9ffd5519432eb7730a3bf9699c78e2fa04fe92bc7842a70fb8d7502e29a81a29e24bf56da98825f45b60e78927a22e5cb8b9551cd0beacf35f707efd12216142297f6ed7db59b805eef7d18ad0093988a0fa97f8a6c38e13416970f1c43cd71bc29b8275eeb030ad839832fd527226793eca0d5258d5d2a4312e49463d618d1d24cebe3f5576977b390a1cec6463fc9aac6533a44cb1c8ecf480f31d8114d1085275aea75b8792a70b2e9c75f9cab1c53473397cd51051db4976f02320e1376db59cac6f0dde78883861e2ba6aa95f5bc49fcb921ec2aaca94e190b71eecd1470a60014f22005439fbc9aafaa74baca2b799d76379c4b7874cf62277149a8008244a3348afa62cc006a7a6724a6dcf4f30251b961b05cd14a98b1351f1eff64f34e3186f28cf8e52700284ddbd40a0175c0ad68c0b1eaa6e213333540ec6cb0c9cf5ed3a7af44f50fb4870391e81daa801ec6e917d5bce3f709e3b87560510581e6880e53283e8f7361f788de8ef2f902c38167d58346dfb35c06d5af4038cead0f622655ae8390043b1f3e2652569b0b435dc6c509b5c0519806f5ddada7a69bbf54b61761a00361f41a0db31b86800c684a02c0833f9b61c009e69f1b2624468fbec34646eafe68e6006419ce8443454caa6b98cd135cfe6ba25ad5277830ef2b3682c840e5d7785a3678e25a203135db56475853d75745acd690308814353209cedc85947d19d225e42ac1133a61d701da7af3d84bf0e720502a9a8af8f1052b600ececa2e56c240d0c068c0a9144360751a3424964075978dc622855e5398baf8f70e92c898b76950d1148d9ef1a2d7facabfe6e5a7cfdc28866c16331778755564e233a279a682c6170aafab507c5febe6836be057a2c06ad2f76056bac84d8041438cd5fc837a37c73397e9af28b9f9783ab4983d6148c369794b938af113d1e97dbcfc02a719e65646a3422b42c885d1ba7f5c4f04c238a2eebe435d93840cd44990feed13f33cf1c291d19d20bee089967d16564aedb0bf0f12ca14fe17e3f242b63e605af65481c35625110b6608b4f6add9a221a8400b354947400e7199fe61aa0f5da1cecdfc288a6ebb1b6cdd31b36b7848cc3d8a5f965fa9c128d5911ed89e3baa47dc06207c6a105a6c555adf78e06627caac0da828c35b3aec82cb481ac1ef44e3ff4c614e38e44a9673c03bd992c1d1ab7042be2c90f781d0ca21f1e747429badb2c2a0de93c7e11284d33842441398b0d8533401d1dea4c394ca821880ae59336ba0118ec62ea75d23128178d17fc83a90a66f5f7cd55b64e53841235cc2045dc3ed0f411b6440de85f32d7585eb5724db3012e17ad400e592c872509a8a0de9d07d61c6a0a9420bc96b0561c340d1db9cbf93ac4199956cb70e8e3d0a5cd1ec0a93a56f5d60a4ee5aaac7347958fa623947cf3729b7614ca4e3e4945dd66b6c63cb4f56c62be2497152ed9b6281247ff0312476093c411f95be238945bb54b1c8d1ddb1a85a534e91cc4d6536ce1b4845c1e6bab3b204a026691b86c2e6d806690cb755073593ff74827e3ffec441ecd8e08046c34faa4e291e253f9723eead8ca01399c2f57c4b01a95450349169337150703425e7605e0ade05a7093f5f4673838433ceb68d8973129e6ad0f11056726473f6ebddff397c743bb79c065adb0ee2f029c4386dc9023660f4f070a103a8b2cab2c335cfd564b41c9c2f15e30426315ec04ce65ea610900b55008e513adcb0020377f37c67abdf97ed6d545a77dbb693b18be119afadfb50321764502d703dcafad99bee7c73470d575d8736d20b3cd35bdd4a43c253b154ee3f501382da0cd0a54aa8b9dace79183b974215aaad98941a6ff828e60c7b5c2a7a9d07e75dfa68741c23c129f2e4f44386a41c41421b8510deef3d2307c65390a44c62e13a897666d8054d4ca46906b56ce23bf4a864028176c85a912343f71091d1bddb30e85c1a7ccbe7637c2b8fa21bfd90b2d418ab5d366d0a3b842ac7f6788aaf2fca0420d9ca59618ae738e61325b2e6501bcebf585c4f290984bf9d6e77a0d4e5101eb7d3c830f3aa1f54a63b6b39aaa57a3e4e9d7bf7a8edbd50ea7fb0bf67a6a62a250a86b62ae08acc9a04418d8b22cc4f26cd666bbb0f131bb68fbfa1fac3b15246f782ddacbd5b404bae37a53c3e86f516174de9e3cd1602dca7bc0030b4d8c2a91c9f67c9801ca7c57781887697eaf892fd4c1985ded80b4103c249530d4efc7bcfeb64b6275144cbb57b93ddb25ccc05d1208ac10e5886577e63a2268373ce97c77c157fc31b4a4e51b490c921924b33f09cb92bc455943859ae44bd9989a0bd6e3ba8b2c40fabb88000ac299899d0b4875cd222eb839bdf111995e3097ffbcd2b05523f8b07df3cb65ed45402ebd5cb87fb0fd4d38f5985e2eb96480839172bfa0ca4c5d7f17599380f4229825a671d6df45cdeb4b14aa51e64fc2b0c02ffd5de87bf55dc4825e12144dafd4bf7c12fcd8027c7d17217d1bebbecbec33296f748201fb2e0fa53f1bfc1a3159ff5b6bfc28db45acd0eb826dcf4225ac9e2375364e9fb92caedd22b25cdc1c0320b995975de5e2a5f595eebbec4f45e2688834fa24b29ea0b2f76ec09d35950a1d77591456ad853f30f3855c48e974dfc5258c10b03ac37f977ed9d9cff9319c5e6a8405ff5d88f93f5cb4ea999797464776e82c332ed71a809b0a7869883c6c32983f0d72c6923ba79b0a8e5c23e242b964258198806e401ee1967e452e772546f4a08f1ff43f6ea95ed6dde4905bf3a8ceeb9d6c06258d39ecca337519a622475923c99a0536d982436a41d4f27dd806f15d409a2e5feda7ce29401c5120765c2c967da8d7dda37791b8331e47caa5e4a74e9578a1d7915dfa456c43c86e92d719bbcbc87be622f8dda5bf9319de8505af820052091d08ff8ff328c2ee9fe7bd2ab16280134784585ac87cba7067e89eaf404a5fd89bc9d02abfa278d0aeaebeea4818e228a88e4dfc3ead343794f983ac3e026945c85f29f11c425ac7c917572c45f5cc2bf21130523ecf6d9ddb91e9d5c81feb697c402f30ca738b53b809b9532e5fb18a2459375b48fd22b138c9e5f67a96e62ff201876fda72d45b871dd3768deee26189232d6560ec628917f87b222078a4948ecb8ed6e9b2981f4fdf97d3809699737a85b2d00fc39d1dfd46c362a32bed772c16d618ddd90b64e21cb17e66af2af69457b20976796bda81754bc02df5f8d3d622511640e16d769f61b67387ed0f74cf86a8b3388e65ad59de1f1d23572a68604827ba15128381e3ae4b23bc7a2abfabf59e566471c7efcb5ccab074e462a7e7f05926c832340707c405f4f28b1c598d0b334e0a29e0b625e0da282fbb08f6f7aea859926952e78346af813a6dcc70af50ffab9c9408e2b8e97012a9f9bee1d1312366f0681145c0dc0adca777c971ecb69b76ed67235373b1f0f133533286a83361760ec5bb2ba35c2960bd25956d680cb69155b4bac18253a9469a1839e4c214d38d6828a470b01a088a5320aff33f58bbbf084e8531389b24cbc20fdfad687d4700b701d5af61e7ffa3874252b44582b4fcd2da7570d25bde299b6d45add3565cf1e099c6583712c19f852057a7873eff0189d07f26748a2bbabd1a3f1e3220255656e7d3beca4cb5af4620b866713f0ac4a7ffa29377bf6c5a40dccdfba89bb477958a9b21995a7a3de8bb0e4c52f377961d24ce276d010f5ec6101aec174bb128fb2318b088c3f0e60178fea0abf73d7db329861395119b872e0bc22f26219a92f209e41d1fafbef358a0cf1dc1b0652e153c4151621f8bbadfaf8a8079bf78d7c7d82ac48c46705890a8703fe54e608bdd27da1f2915c63b399a049e017f9ac51fdf4c34896f3b50eec6d8247f259eed13c31fc646bbc6d8b535f617de90843472c563cdb4e0946571a7c4aed1469ad687a32594938332430009c274ca161f7ee65b89eb447f3ad4ba31b088ac4eb7e8a59705caf627d68df247f210373532f03cf545744185e20a30a2730d0566e96852bc8088b6c756c1685b4f91de1a9c54a1ffac729f7c22bf4de071b10c49336664503e15f0f64dcba6a021762f5db3f9b03a8618427bbf814c1611c8aa2a1cc8b5214280819e4412158b572c1b3f3e45cb0b01f7dea8231501363b02dd57214e9aaa344f5153f509975686fb8d752c8020f400335d2222f02a9a355e20470429a24a400744f147d1909c6b324191042843b5ef42f0ffd73a2023887f3147b351de41bce87cc23bc4a8ab9b51922af8301da2c144267d15924d4b1a7f4f85e312ec3b3e1d1a1b45107e8a02a41e5367b29ec41619c27ab890f5def25e4ea45ab7dbf7696929918899724ee6c5e14266329db014dba0a4241bcf0d9f4fb7493d6e386f9c7132d17ed7fa9b4a0805c73c2dc7d64072c46918034912a0ff9bd37c607431cc7ddbff0fe5055226d830539622984bfb61389d5ae814e4491b238348639840f00dca6d3bc9c2f061a7df650e5499bb5151d854fda534610faff6c94a9f6a8c2516416073847836ee274de2daad865471feb6c1808c1bfa152f877396bf501aafff8edc0fba419fab64e322d7ca5d9e5c9f670f165dfdc486c398c546e798294cc3e124ced65ecfc6f860e5188361c060280b9029ffcc14ca8dd9b04def9edb155e0d7a94115a2fe5e61edd35826d655f0078886894c4fea5be8c92853ab9c31cb4e651f4ba65707c2945d5ba9e9440f8222efd6edfe75ee1383eff63f6e75e0e93ea339b09f830c24ed00a521f4658cea3cc85c2f86752baad4b5387ba10dd81e81608671db255b06988847dbb5c60323a984de0923d03e77f9026a00a5172eb0800f1ee218127118a788ba3dbeb5f6546a02731529963575b6546c5a5e7d4773e3d733df60a33026415c8bee17a6964a8c453dc0ffc4411852ab2168c197581a8482214e2ebd4f0f4f43fe62093d88ff64ff1ef4fcb15e64c71136e8443ace042caf13300e8caf04cf3a0feea4dcf8aabac218f43136dbfea775aa384ef58fa5752740287b40abd6f622e7649246076a0d61f536dde4e89f275822683d0c47db75e542c1f6e01f9c6fc7bc6ccb9783b8487947b15e8cfd7470ff5099f18b981d94277f56c59f7df9c0a56564f8d7a00bc2d187845e2183325264257594441f9d0907793df68b41727c888d156aa89d78a0e905e24ac54d3cf2dfbbb28289664148d18c43faeef3a11be7708f1539e0406bda5486bfeaf1339f12580ee56e3c3ed116501602b37ff5681905bd58845c087100106fefac5f835318f3692a0ee2589557af8f6a7afa3ebb4d8277234b999bc5e5f646f23f7540fc341afa3431dc75d5416b4a3d5664769428e94e843272122387ec21ecb4c9d4c0d9e541a4284f762e744b121448ae8fd54f91c9c20439f0d1e383ec96b8f904a900897a702154432330827bd4c3dd6f66a7d10deb1db46a95fc2925c2d82e5dbf9b49a03468dc1aad0d10d20a5a439ea05db431602c10422fecd17a6d74f3ac1b92efc6920324dc03abe09e73d1069db9f99fdd3e86e1c818859b51cf64e847720c250c91af5f40b8824432d2a0070b18c6f4d2e612f114066a0de26595ad29e42c800ed98543a56651ee07f402f90613caf4f96ba303476014a3f32b26385ed9a6290da7d8d117d382cef9d2cd09d7cb0f1c8dfc6cb102d18cea5e88a6b4918fe497e6076bc2217f51498e08a6f02325f67a498c95f989d05a45a8402c97231ae3d77c8273229799b292d6b54c4404c6bd44be3a9f2516d0ab7baaec95a1ed0945a474ca8c3c5e1d720328a59b08fe0ce9bb8be546d9e4b4b24c30b4feb5bca0741a7e6b744fcc2c5152cce4fc41d8fc0ed2dfcb2a9d4cecb05ae1e897cd47504494da4e14f2562c7ab68447097087bcc473def9508964ef9607e50afa6343a0dbe3a861006e06f4c1bf747b2867983ada1521a9229804fca6142768c6b18c99370c0eebabcbe4f73edbf1f500344d1fbe79396c6a3efcb73a3a0fecdaa5c1ca29cdf060467d15bb918206f1845d2aa460d4b368c7612e396916dc66e211286627c5bb0d9ef7c8afbd8125d40e0f5b287544d01d65b1b448bfa5cf686c93d769203a06700601d6400c4f5c317e4b4002c03ddb65df264909759c1ccc57d97b18697178ccf28b4d6e28af1015e0c1ce001f66e3961ec9774296d1a06ce09e0e00a4b59f8308275f7a447e2a4ac17f51dc9420ea6adb08ec146bc0b606e5aad7077263e6ede8320343022e1087c7976cc8687a19071c6b53abf9511cffd93e6234641a30444429fbebf512b5bb1065f7fc2b5ae50f6c6c7a7662a35ea3fac471c050262b70d9d9716a92c2da028eb0d6df62b7b7524305e072e850185dff105c41f527423c6c0a08969dc35c8bfeb6e4e28d26ed708f65f1409c7b4109fc3ee768da0e12aa3e610fa7e575c6acfcc44a0af1dec5b9ea1678b9bd0bb20d670066da960d553296eb2428937304d9e7d8875ac4d8b9c69e7abd82daaa490cc0898ab6d110499ab47769aa10bca86fe40eade1ed072ac2f1bc422dc0b7efcbed5a5da961c77d9565d7d5ced9a573b4543568fc108739b717992312d953b1c3f0a7f41db3a40868d4b0b930894281a1ec43820c87a99b576cdd885433c6d37034e003b2d08bfb148c8f3169bb70a38e9a0101044a6af524be7bba74d34e7b776ce4086697d0f1c8ad068015dfdb6bad2428a78d95ee7477eb3c0b247c66e3a56d4fdaf1b63dcff8402c60386e87b1f10cd76936d708febd75e8a60c72a87d316143e0a1fe5da4e461ac0b56cff1e022d5b39c6b4af0d502db40827d8b581f8accd7a52f6ea3364e022ddc0c4d5432507960ba77359d4770eebe1bac2918e52b02ce9c2eb511d5a13cff2e6500d1f62f9e95fcc9425a968f94f45b3991472ffa51c47718cf66d6698bc2365740a48f4bbfac80c3c3e0bcd85fe2570adff427afba0bf0b21b018e23464afa68672fb88bdfd7c11fb27c76e4d87c2f33517ba10a83fe1ec70437b8cd84e488c5c44cb1ca943f58b12fa0d26acdd6fd36784ade037bad654d3eb5034de77bb839592062a3ab8427fd6382c754889c2c033199b2fac13ab55daaa6e74f05d538139914f6356a3789b0e5074de7394d6b5b25a028d38bfbfdea9f3d48051951727f613b7e0f0a114858817686202f29c8f7eaa4f80da3a7dd083b956ec2da575e461088083f299325e7781b665e56f4cf0467ecb632352faf84a011bdf8e5c8fbcd07c46e7bd1677949cf371880d4a5811c56f344a89fd9f35cb7175fe81886f2fdfd05a5cd3e4f9450340e56e480ae4b50203b836c39b9741573bee7ba62627abc487c70afb429886621b9c1dc89ffd0dd680e1231807970e66b8b55349dfb33eff9236834a170fa758414ab077447177d63272714527518ad7d37661a41d80c99fdbc72ce1376f3fbf7660e23ac3b6e34a57f0ba931ebee506d9f5242f76753d5ee4bd1c409280ee3af89abb05817cfd01fe05644c422fe4e34848870e10ef1a596291c80fc6728e60b343d964c54b9d882de3f0f15229bb99477ed5b1d2ad3c9e148ea63104d47a91294a13ba40b9627689e32e3a1e1a370d25e64fba1eb0a02a1c07280601002a7ab618d07936221759bca39c519e0ef22fe208ad2e91dd30b2099c7a4b154fdb75a8d3d87f03b38d439d1bcabae1fb00ce392a841229e58266de8a16ed1604ec6a19600b209fce682cb217d9e294996ed0e663abd009b4a54683c0afedbb9f5803839b14a9773f73b82c1a22985eedc910cef384ba65d13743c614249897f7263a9f2380f1aea780a12439f1516014d8b5c5ca0b7dd39ee5584cd8fe410fdab834f931ac87623cad49e34c0f41567204bf9cafdff68f1622416e0836371b4cbc41e57a13c7374d71ba0d08c4d90d6a044a7b69ff9ffd46a0006a45ca00668ed0df511c344e3cbbe549093e9f79f6926b0a995c8b1133da8a1b81ff4a5fa67150aa21a63cbda54c4c2324a64b1a297d242a08511f58c7a867838ba260b828292a4d6a16b4efb364eba09c5e99763c04dce3616f50b2cb338d4bd69b01c784a40e31d933060f7d7760df90c10c0e594803e4c087db06f215ebd031c63ada8e620938ae77fe3b55256014476a1bbcae9c067d0b1910c7f8239a464a7c9735b89fb63e35ac071682375024a14929dac22218dc7a2c4592cb7b540b0ea6f2a4ec620be9b841ec84007294206ff4042bd0a7f3d0bbb7cbde39e970be2c41e4497ce0670532200ef846de3147185ff6a515586b1f2932ca7b0de9e78bc3f032a32214d6cc07369e8702504113b83b360791a497c2d70d20fa6b33f0f050db4dc7c5a5e141aa86e1c1487fcf4052711ac0f8de0fe8b61c69484c3280933879d4f803ecbd00e59f7b20ae6240b40257f3a392ee1fa980404c88d40ec64f2162332ce20d5c48e0c27efee99f6d1da3718530325009882fcea4b88600aa7abeccabcfec63273fb6514e41e911fbae260f4ec4be10842f411b250ff8495a081c3f268db90db28873d345dca7ec138375ef6cbb6c797bf79aa1b6a017007052995e1b63fdd4cf3332fe0bcbff4ca426e31bbcfe0b7606b33dcbcf03a4fd5078752fceaa21d65296b98107011344d84d3484f4b79d12a4783d19cabdbbe7f1030d281e38746ed80f1f19fcd460d0b097cd98bd976b9bc6e58d5089dac99987849f6e226df4e14d07938409fd1f6621f4291cf3403b0a2ce1c1e440add0e0e83df0807ec981fa151cce7fac3a83b3b75b19b372dea638384bd71693a0b9762be3d22432b792965b41cfad684bfbcf8b9bc087d0d0f3118feb4aebef410f06885ef446f2fc11d08f80b514f38508f375381d06f1daa15fc64720e5c1d7d66abb01d6200f3634d906e81de9d84ab731088c01a20bb0beed98ddff61aa9b46313267cb2dd7b2b3b55c8b804a010305c7bd538b31f68b8b656a078a3dad4e4feb2dbc848773e3de428cd0dbc2974c45e0f262110d4fab60a0ac76138bb2b493ae1b3fbcce6581a6cbb21c5e0a14bd1a0dc684414680fca78f0bff74cb11eb87899b533b003bfb2e0ce18240e607ed955c985814313f730768d47eeeac1e005715e2f618330f9dc1ae7ab4fefd184313718128575a4e06ce0ea4f7131e8827bbc32fa36e30dd53d5df361d3e636620b721c4dd70e34958e0f097855457d490cc58446390a1c9863fcda826870619cd8ee5859b6c8f17a4bf3caa0c53203e268e1772c0d10e7c12965ca84f4f6729a2a1d76d925cd8437ce363447312af8556881ebf7c88167d8c5e086a96e9cf2243dcac2041d33e1c9a0e8ca674a4792aee8781280016307ffda480ef3d3e28afcddb285a488dd46caa68a6a2f43770c2c95ff581ec77c906e1b40806267eca5db01274610990804cc73205461ec35b4d295d2053d5694b2fc083a1d65f468a386a3555f35b4dd30a068046c0b49a76af54fbb6b945d9310c0d03fdc8ada66e50682ce3538e6a5f28e696f4d169dab1ea2e9428ec7c760864be45c2c204220246141450637057795384699cd2123d0462605954c3f418bfe8e8d125595dcdef5c28cdc7fc61f01d35bd142d2223018f0e111d4181595ffad49a165c5c96bd575da19acbe40763711c14fa5a7706f45b39b1a0ff5e9fc6ff076ff7634344281b721d126962941a3dbe67e945ee21bd6604365a7f9e10e49456b21aaf47405298d8da5ab8ddee1cbc7f0f9d355b1890b41552f6d8d36736f74741b69db15fe7d05444a05e7c4511827d5a4d564f9f0fc335efbb74ea7833366aeea303181fe91c1fcf5464f9b7f0cfe9b367110281e2f8d8fc03b0310c171fec800136134fd9f3970490adbfe973e451f7b45cbd8632cecea1752b944c9073793ae47477f717818db7df02fcdf7c86b11162c98413702764d1edb87d14842ca612822487c4cea68d16e9dcd7863ff2d13c40e8b1ad35e2e00c2828722ca526c195f7cfe3d998e0b12c531816586c22fa2d020f29920ff6dc791c39860b62aecdd8a7af9b16fe9a62531c24de78772e35614f28a1ef50d3c31d25da57cc4751f8aff952888dd67f994a8f23bf2823c70639b624836528e0bb3f88e8d7881950eea05bc210d1d29c06fd7cf3a244f926306ef3aba0a0d509318fcd368c6f105b2cf40dd16b15f0ee5b5951157d24a033ca16249dff394e884b95b50dafecd79a21033e276b1401453f115454ec2caab647edbe90da39e69028acb268bc7e2598f42431f42b7b555cadb24603905e0a3326437e5caf211c7de6293e729c467327a28fe5df33981561e6ad4137057ef855f7bdb7cc8cfb3fe9f4af07e59053cec390ce18d602e4fd9eb2cef0753758f88dcd2f2f29a392d83cd380c9519d80e6b3e325432ed63c0b78425cb316f2e979e0c6ce580e335cf591c358e6efb607031d1a6c95d0ca81731bc692ad8de127f530555821f2474197076f41ac8fe9d2498725f190f75d38e2f846967d85c8b1ccf8eef80d4b22bc8ab61e9b48672c974d3a0160798fc2706c00f1fd2321d042ca970a9129cefdffd58ef74b92944e77456faa7d74df41b83cee59cf271139dafd7c5efddb4f6b2ea220bed8e3bc7b9b8d6546e4025f791a1a6531d76811d940e3aac39ba17297b4c92c87b0439bd2a5343a3bf25ecf2c872f6cbe92883b12d9bedc588efe630141e7a2f0b9a1cecf1128b56d43acaee5aa3676dc16a1c7cf47938943002bcd6e772a9a8512ea3c412043d11bbba28266ee44469599ba28ca83d73021fef894f5eda52c30578e3d5d6aa357a8227fc593d1ab03f969dbda342dbe8e3715fc36eba8c6d22451bd58a528fea8fb376a597c6e34b1d8ddf0d46d7c0ffb4653fe4cba26b7c3994a30b43a788fcb8ae5ddbe3db420326dd5b256d7ab15a810b70c5d97e50fb602b0d4f665ebe8280eb8cfe212c2def25c839cc8d6507ff5ec20e6433494e72ff5d2bc2c309d871235e146a95e92bc7d8fd2442c57823ce1d16097f3f19e89dc6bca648a272828ad4c16d88c425f235068cb69c0d1ecac70dc160251733bbaf93ad6fb46339056fc5b9fdc9eadd1ad7026560cc841efcf7a9ac80b375ebf5f1b9713941dc94264ec04e5763cf5d77d1b65b764e2b4e308709cce553e450c38ecdf6e840efcf0230ca8d039e1006942026be44c96fda4742b186c5c5901533a6bc89dd1e276e9006e08ce8ac26a6b19a4d7f87cfbe7422ce38a9502bc89b9209e12e6747c197257dd4f2ef18ab7d02695e40bd8a0549c65ddff06b792fdae20c448d548c72c4410ecd4a06694373cd5481f69aabd56b636b8f7a52d82c17a5e5b09fa3f67299a8955dfddb46f6e06ad53d01eae564ed6acecc93a27ab8a53c0b5491ec7f5afd4c600a496dbd2c1571387e525961192e9a984c9b03bc9663f4d2c7edddc3099179b66cfc88e3c62881f7190de4921784d523005b4287eaf5b991969b7c34ac66c132f88d1ba61195a185fbe69b7a223644b777fdb0dce56c88d733d63e67deb259574b0906a9240059e27f4ae3fc0926bd79bcc8a6045742023eed6dcc331809461f47457343495750207e9ab56e0154d6d2ab9a70223616db96a6c3c42d560c99c8609ace138ffbdeaf24a70c603b7e599e2bb8841bee5351b4fbeea891434383e28ce8b10d69deb09ea46d7205161a93d9e7c0b5daecc00233d5f9acdd8635c1feaf6078ecfca4d7d7d91be5036e49d1f407ec7d7320d5f581e20db7cd410abb159f113cfb01503589703331359adb6636d5fdbe980d839be01023ac0449bac437bba8972b3169328da0e354ae4d30ce111c695bd5bcc661d81b70ca9fb18de50e343b4b8807eb8d8abfc3ffd254c4b0b389b4c0536ff75a3b20256ddc0ed7608f656b7ce000647432a6b712258da011972259a3b726676db066c137ae1ec4685a44f5ac31654fc68ac973b9aa43ac9ad048eec4d6a2aac89911ad7ad9a07305f499b20d052e5bac5cf6dff465104eb44ad3993d03dc70fee12680463ee2bb8fdacc64256fbeeb74d91c195561fcd8bcd4501259e4d24835bb2038b94226b223012e6650b49698f6b17d156fe180c171fee84b54ba789f6df24568ff24422e217e2b7d2b8f5088bf7d8d6502a2f53320dcc17ca802ff4a32571008797a3a8124db00382016d189d3ba5591ff12e5772abc689c5675480f2cbe8728244b4d9991ea1f052d8663b2a7c60fccc37b2b80493a123259e2d04776921286a7a496834c3508e6ca053fc9f39138b2a2822284f85008621841de74200a737a7a84aa6f6863a012a04897135c3ae0f997e881b96ecc97502b51a0ef2ca7fbbf9a48b0ecedcbbbc0eb74e5a972bb56215fc25702eb113840021440211dc1e3bd7ad448ed62dc9b44454411c628fc7dd4a163e520aa549830a97618c2a1776024fa3cf43318de73cf02e8e076edc89398af18b454c4316dc210fff4fd4d6960615b85c043f5004ca1c55efa50b2d589d79092b6c1be7ffd38453dbb832cb029238b01f223b1d1c984b876636f806363731326911b4411b2bf4ce3fc7d9ca4bc3dfbb333dbcf0ec393b6f0f9f1bf6f2e0733bb5e65ed3499e6a2feb76f997d20bf7a17b36adcbab3d9378329ae89cfc7edb5576fc34d29b3a052a2e55014d2918050489734b05d75a530ea68366b80688201ef524e393411ccca72624408ad740e5012ce1c62e32d3765bcd1300431b9302204a0a4d079c4f8e516ca99b7a3d52864de09de09146014dbd041bb6a2a35c1ecc1127eacfe62a786ca6498f2eb1c92e52f1a4b9549cfe878441e7aa22f923d4d8bd509f99a5ea3480d1ea8f01da199f90defef544d2ad8e8a9913e0471e1c39e49b6e272cc648146c45d54c1fc0d22a28764decb6c76d89e3bc0f8baeb2bf7231902669154c123ab2784466861b371a5c232f5a5c94352cd3b851306d78ef82eae0211207bc3e87084442a59bdec77cef29278b9d6d99706b0e015a4d0efd7781188b80fbf69f3268918424a14409fe013f11e1660a2f03f693d55dfd4706f7cbd14748df9ba818cae621f9ec196069b3004cabfe600892771c0d40754c01038ffba366c55f36af3ca936827652acb792f0c54ad35224438fba8a08a118878333ce9776afdc620049a9c605ffb40f85e34953f19ed9ab98a2a24f6cd5586b42e17c19b3d77ef03dc71ac5799899c97666e8eff55b3e3a5b4367ecd8089d64e3ec4618182d0a83ec932f7ffb874803010633bd5eadab4310e7328f8f451853cdd24080eac39f2374c8989d5c8b75988a4b71aa439588beda5d26c4a26c2352401c83113faee5ab0496b0f0fd3042dc81a6d1a064e142f5607e1bc22a92bf5bf2fc0e9a78f2fbabb5a285c30d9b0a56edfe5890ad0ca54d231f99cdda490087084b816d6e3c579b39207ded448ac078064705b5800fc3c1fa5fa9fe425658617d30c16f87162c8acb0c5808a30f164ed6d524e3a7c8cae8e488f5a680159c5bfcb628c46abaa1e25cad796e6e8d735429a6578823fa8198b69531b9522a87955eb4c88ddfcdad2dbcef9daf61ec39952aebf07517305292194b89e41280cda64582709f145f59738c23ff82ce96662e620ce8e680d8f474c19edd42778c53d8702b69a402aef72ff6c56a950487fb3fce85b3eeda7e3bf860778edbf184ab2ba5aee49c763b85d5b6900388052eeb8a59c8c237a463e0a0b0e17f5f5e173214919b84b3699049affb045b2b74d2857cf51045afb427bca131917d50ec1aa4b8eb3a4a7719a085e34615d3a4f1a64034d207db6241dbeb14a0b4c6aad9d3bdff5193c6a6a47d2cdfdb3f8c6138fc8e65560eaa64103b8622044628f011df00d60deb44d9e0f95bad2f0a23ab49797181b3d5157651c00326ebc5debe948fa960366ebc200ca16bd4f75385cbd4bb013af0633567269aa9fbb9f352629dbdd081dd40249401e36fce214568402da8222450e448a0499439dbd4d7142dd879280de670dfe53e2389bb83b927ca188744bd0981c7c3f6a70e16cea18af6a2390137e84f41f10eafe7cf2ae800d2398ef71ee116fde93453ba36ffa4119415bfd548afc317cee8075532162899ef881b9ae443afbeea812210f9bb17c1c35c0c994ae4cdad355d1a52197d9a658b14e07b32c1a00dc54a822c0f498742dd30a62f808ed07c31e93fc8b0af31d269dafe9f7b13c8077e1e410848007f746e3c360d02ff36e5fe2f710ad2469b9a5d091436a9a82200572200f82544e29a4d0ed7a44cc73dcd4d1501e84ee13e4f0470cc4037c8693117508f9cad4a1365b4152029d901bacadcd063099a4f1bd61a371662b5c3aab90c2c0ae640e98effa668ee5ef9545370bcb595e760e0c74e516ccef6a6188e24cc336d7c322408dd11bc56b7d949869a3d12dd5e19a90672446014a1bbcf5ce88dc3ee276193008ce2857a1b20f00dd3830ca870c232b7e03020a1497bdcfc3a7d0fd32c984a9fcfcc5dd3d95b67cb2dab88957adb3fa1679bbf4200d9e00918bf3fa79176a03dc8af8f7cc19b57d2b485de2363f5bc4d12caa6d22248306d7b88539f3eea344b9fa3198054008a628344145b201af655364bc40a2880c413fdc841a397c735a1a668099bf76785fd8c8dbaf86212ffc7611e5ad65ba770a0e548b66cf2ada9e20900c80ae31163a2adaf4c403b866f20e7d914151b41ac2dfc9372b4baac37b7bc5c220aad26dd5866048a0b94479dd19328685c4835f0210b01e0e55cdfc4328d5d6858d307de44e20ba2f6795ccdb5ca0f54c234ee2e541ad5656bac7eeab79e5e2153df1c6d02e0468126b68aced0c166dbe908ed11123fe18a0d0ac1fa7392713b1989bb93c667762aeae34ad9fbdd0b2ba4b5e1392124b880da95c702ae02bf4385c0e6b7883922f69134c9ccd10540416a42d3ba78b810013fcdb2619f65910831d9f418b76fcfb65a15f84bf3f0290b061a78cba9c08c9d2a2119a33b82c9b47657a1ddbc4970f9b93932c2d500c15e73fc68556a7a920c0f72d0205b3cb3560becda4333383c3624571658a090bc303a0cb3743bfb413b05ab1fda020647631945b92b954271cd41826bdd58e09e60c23456f02206158e0d4f4db5cd4ebd02a37c76c858b9a2dd56142ad2a25c114e6c3620eee395c75373901a17ccf750b13ea21d9e6243c0738a92df15f8dd95518a57ca89041d24b6ffdf6281454d6f1afcfd14b725ecc33675b8dd8f4a764aa4de35d130df90b23baf41a80f30aa27c4a58a504409bbc36171eed7ee4c99f6c2300f4f8bc6688f8aa1776720924479585a37e1218860d6050c937c7bd1ec122916062504713a532d674474c6682e4fa0f6d85e5242e2993d193d2e6e0a4712208cdd68c9a5514b754dd04e88e327a400fbd4d738c12c9fa1814ca93dc1cf50bb8c3998e419da22b91f44673010f9ba9665fd6c2f7bdb16ac9f4568d9ecb726e8f4bd78e3855225a72970a9a1dd2052f7b381285b318b1cf550fa26b7857b3128a3457042999782f17e7456347adfb53fb57ee49c8a1d5ccf8a08873c04e697deb54d5967fdae27be13802179a1a55df5c220867a684a6d3dfc4ff0d6f2ed6177750a33a2e244a365ae0d0b72932b8847b64fc87744072e4dbfae147807419966d74709e068010f54e7edd19790a78372beedd838b7c0ec14d73612c9f9134b9d3fd476e36e818021432c621b88803234a1097a8accbe2aca80a20b53e511cf9533c0f740521d080ba9494a1ca1604b4314e1575b6206aa4735bac39463ca57b0c39199295f3c6d075d1e4c0da3a11c83834cad6ee10c8f118563cd6358925011d9f76191c40986e9ed78bf35d5b0930c734a97174bacc6c0a07ecbaa8d46693506017d8fd8e48be35f51562d39a085b1f09adbf651485911a4380fd1aadd2107d130f7e0079c121f3a7d60f19d7dfb7a6825e18043f4710fe9308a6230348d0bf15523642f420c8f756e13bc9c7a255c1cbe74954ef1808a515a277cd4ab082f6776a2a601ed1ef41ba72c11456365c005d8fcc53e22267f5048783767972e5db92be2c94720c32c546dadcea89863431cd0efcf15a84fe85c9a9fc2d2a0e969e0824aa7def21d4a44de7293c6d898776cd674a9fba4b7002d334ca6d9d02a0d5020a2f4aa9f00b7024377b47a446a9a003784becb91a81bf4ef6a1678a2a90978632dfe8ca2318c5f15562c45a7dbf8c03ccbca7e8671b5f094c0feedcf46f92b44711695c0c2ecd18f5157885d56b9569aaf3ca598da59585101ddf13338557e775d72647382c1cd02b8fda9504d26b4ce82b8d23a8b85dc8c0d775fcdcdc766390a5811ef577fc1fc621470b9832529e4c2e134da0137542609f9a2bad1a5be31607e3cdc9a2685793f882b930ed5e20a0bac64fb12c0b8022e3816c1bbb97ca28a364b1aba60540547d0dabc184c1e04cb5a0ada949b952c6a4b8e5243cbbcbb2a1da6fddf2c5a4ca06df97629b49a741933040059495f4a13fc5849cc0659a1c43d776f95b25b792f70bf7d8d600b4de22866761a6289d4dcd2bf11ed3526462fa7917ca4a5feeab5aec2e45aad08ca4020f1cedae7584fa2922b28eb8bfb2b47eceb1a10c1d0e9aba6ae013213bbf9ffb18d1f05301766b33b47330bad17a49369da40b7ee0da657487d2d4f3d1e0f8a83216d49e47e901147037e0e352e01fb83d99fb607176b681fb40dfb3f9833a7aed1d35d0763c283bc24a8cbd19b4506b0c326387cb9ae5c2c7e2f1653b347d7285855fe07b52530f131cccac7b8108a36610637edb1fd2320f1b6eccb05f047fba613aab284d701cbf4f24bf21726b4ecadc2b0ff6b1d0c4a8bd52f4efafbd246c9144284436b703b8ab4017da5a7e18c8ae1b72669a349dd70149443c580471a83d21e158b34a27cdce70c972f7f92bf8ac32e40da0c69d0e75840942eb3d2580c4acb89522150c8af79279861f37b9288f2f19b1885a7a3e3fed0621dd86af2f10d4665f10381a8d968e3234b41e3bfc219544f28e596762fa9a693763d06a172e91e11eb8a7ad81923b014e363418490b6c216468c58758fac1268350c82a57e34a64f0b492de02f5a1e2f6e78c9151f8d9172d8173786cc2c7c626b33bd63e046a6d366f6245b3275de47a27089a0f45a24810793b84b0e37e916864ac311b0d6125c7511d62db1436b1a0fae47652df967c6148f269645ba658240e47031818e20f50433830f14025ad703b8b8e98708f9e0dc7fdc31a4dc31b6b913dd8ce54a741f114c1181c1b2d84b2bd0414a6f742e3ba672b312b36c82128a6351d9344d288ea06ca674d04c54f3713656fa08d0b2d66874c0c31364605c9b507856c2017d739475d2cedf9f122ed293c9c5ea9faf28decf30b9959c2090162758b21f24efa5cbfb86c48f88a18f003ccac7bad86180287df4b071ad3ef50908642f299c9eb44a2957e1620bd572dce9d5d8b871c4fb939e3271c150a99cb186e3e741be89bee732fdd57ea169f9b43b28a0453be46f8b9402b81be7177f39f116906d426436ad8021d5fd443b131d0a49735107ac0e7df24ebcafd7bed3bdd25d25e4cf0c2cc71395d0eedcac219e3c812c5c17e3bf4b3403cedbef8a38c9f5ce4a6df68b4fc9c3459c0c26df7f01e458035a8872875c300a529b0e4d98c8c8fedfb275341674a177c446d46ada3a8324b66a806006d259b52be1c737d01b55b8fb74e7c89d7710a00c6815a0a8c42554958d9853de0af32165274ca4ce32d7fedcab4d84acf2afed46f6de5bee2d654a5206f907070883084f20509bd18d27229c8f4df037704c1bcef37dec53bcccac4ecef3fdcb1ee7cfeac423458e09cccae43cdf2781d94dcef37dcedf889915e73c1f130f995973cef3819083a4b69c0a2b9ba9517861f5c2d0a3626eb02314c8aa225a9e67fb3eac3fb46ad5b5ab5bfe1e7633016b297f0f33b5aa9ba39d938ffc7d7331e5af47fe2ad2f77ee4f3137fb0ffbe9b1c28f6df8b1aa0f035aea57aaa6165b5f5f762acac5ace33b4fbbe032824cdb08fbd7f3f56fefc614fe40f33691e517fcca479a6f745b08f9941443939260e9b5087e65973f862aca489b092268a1f8b7d8ef831d13cbd7ff13d0d9c12451558dffb92337def47be7725dfbbd3f70ef5bd477defb8effd7bc7d240d5f63d388a3a07c2f9efc387017be13812f8dffb52ffe0ff6c0e431cd913c352c6eb5fff32cf22ef69f8a7cdded3f069689eafc77f8e19fcb194e1e6e581c52f961cf08c41cffc5779be1e207e48b3376396f18be549e617340fbc53277b0fc2e85a7d14646983f9f72fd5fffebfefa39dcf94e1ba10c7d7b4adc7b285840d2aa419a2c6d633ac50068906291d2d7c3ca248fd55bab2eec227088c655ab504c36581477db1fe24216fb43ac076ae2ec49ab012e5c34a915b16153b64812982e351c5ea33629a4086005ce08d9420ba2c29c1c5cd00587042cd951c5ac88a62eb1d889421a2e542c9e84bb86e16226046a526b7c86d7c655ab574020ab44950bd0111f2701483a5437618b17522ebcb32e4881e2ca3a520668438e3035502cd1312656818628b179b0cf5b6b4c37383869aa11470eb5e08b405ece9fb645a43a03d1584db07d24c6b74c5b3ec858fc35849bdebf7ce9865c73060af5104fb3e1587c8e89b210eda970352580f3ceb7d1f28a5d4c2b09b2a92c8fab8bcb487f6cc688b19eda94e64cf3d57daa266da82e6d1f68f8a1b79ba693fef5a0bbb9f4541b6b79b52aef17dcd42fdbd1c4041feccf303d933499975932b986bc6a1eff01343890bcd62f652cc62a5d22286920eb487e61367307b0966da4414305baa8c6421b3830d672f71167da414288692130d622849a118d05c51f487d9cb30d73f42ba3ff5711efa5f49efbdf7babb7b414e64c514e87b6bdf7928b5d67ae635abb5267cf00e248623bd4dc99346c63f303e18ea9f0f04f1b7638402c0944f79aecf1099efcc495aed0bd6bbc628bd7e058a48698b9bdb33a5146414176893d21e7b33cd9e29a0dd7d614d6b0d16015d44fcccd2dabd3702b63daf5eafe79914c42665829da7ab2d831b59ff761fd1996828831c7ece986518ef65063b7c76489126761eb56908b405cd2f60f48ff5a144cd4394f344d79c28870a63923e93d96c36f3f1eaa66dab5463d85122d2a318f2cbb44a0948edae52cad15f03599b9bc6f54684899cc7d0299012b9caa70fd57d5cc4efe9ce2d3ba88fdf297d8cff96b4ec5dd0c4b4a499b442ea74cd8af4c1af973ef89803fae0bdefdd5a89be6710e98e7f38bebe3e78cbb328fc5b7adf2535bffbf2c6d066d07240ad90a0e9828603d95f41f32ccf9aaf637a4f59c64feffd5327e3a7fd731fff177265ef851a2c6da6af0f2c655c93e641fdf0ef6393e680fae11dc5fa2108823d444473bf1e50bbba7059a3b367b3e7bd868c869cc78a406d41f6fe09fef55684f7b1e9420804f10be1f0c51bde7bddbabd4236c8857d217befb5f6044d163b6590d68b7bbf6fdfd95db16204ca631fdb6b06d1ddc8e6f35c58912c7cde9a7fd6e87c473264a57d7866ad2381621164f37f6184cd7f882804113e6c674f9545faea00bf7d5c9ed6660f3bd08c4e917645b66344ba33f32017afb014c1cb1186405b486d159b18e89af56f4cc3bfa8cd17d6ad5b6ff777eb16e37a4479ec3b8c175db3f6fdbae717866dd346d7ac108c0f2c94bb93b5f6ab93252de8b313e4a23e155f2551081610721e4b6dd8ad9b91dac292e61f525b35aab7a2b1ac95412e66ce63adfdfa6195b80524c2f8d49ce1738e30032acb94515f043c03f4761504ab0547494b479a9454288f8603c1dec325cedf10cd08f2a45c3fd76f4961228c3043048c49928bfaf99952fac3446a91336853c8feeafdcdfdba9e03246812a6090e7231731ef717cbd2bfff1cc7cf8a681ffff736570ffcedd3b0c9c1d291fc9595c90a3933655da3e140d6a7f7bfb725cd21c56feb8b836bdaff30d05984ae59e02e1d610242d65faa4798a6d4a5219a8eacdffd9e45d6b8b93ebeb63190db02b94bc8e07779b2c818141ffcb03c3f872ffe2491f5db45a0d136ba66777584aed9d8cb5af3f4bc5ad2a8e4db17c9b2bead99868d2e429e2cf26e8abeccd1ad8b10ff58d69f13fcedb7085d731a36c26ad6b0617796860d1be29fdd4da9907bd7c6f52e0d1bd63f6804baab381b4550cd22abe28a700e44c37dfaa7864a2a8d06aa4d534730c07c3c31c2fd430f865146f1fe435544946414fe94030f80b5a96b4c0e84dbf40cbe90f696fb6927a6d140b49d8da27aab4715a92e5526ff7ac49d1aa8dafcbd6b318e7c7a57048a72e46ad66c9dc29112bf6b3ad65e3c7eb896176a83fb2474a23da138bec8d7cb8a4d5da31d585acbcb749792680f7d1df245768d9ee154ee0f52816caf14050e4ece6b831b75a332bdb81b75a570376a8209ea0417aa6bf4653209b04d21418a14296439382952a02053a448114b017ba548318a2188bf14038051da431f6b893416a3ee6eadbbb595ae61a2898917c5bd9be13c95e0e97b9303a5d84197327d1f427ffcc644e9f7d6f834f6147c0a7bfa3d7d3dfdd6f226a3a76bdf0349ced3e4bf36e0805805ab2bd7a05f737d396096a94969cf06e2f7e10a9cba56c1f7ddcfda0daee77d9f8847cf1b479d35c4aa75e73cad228ba5d8a5ad6ed23ec08923768b19c58ef017927e097748ee3f515c2cfaa235f0c51205e5017f2c29a03ce0c3761e824342ac1853cccb18d2ce816297562f217bef7fbd4a1b06fa90cf1c287708543e63372c15f93373a07a504b69cf7765b70f898a2f647de1a26bf4596c21ebfb78907f1fda43bfec42d6c7b6fbbba6f74fb769bb66fdbdda5b8e42099917d6ec703d926c578b4d4ec709bb3340f02024df376dda0081a4cb8f1c0892aec0ecbe1c8184e4842812141142d90ea7a6725f7a89fabae7fba40361a088902e45b84045c4cd76bba2987e00493241ca7683b45193268c972323516e6cf77d1c0886902626c45cc5008496ed43caf7855cf821f335cf19540510e4496a10f2c8fe4d5bdcec59a89b0aee1ffaeeee16dbef3371d7e8571ffcda3f3be37f9e17ca98323683809034b7a257c070201764fd513540a22d8056344fff3065b07fece3200a3e08bef87ddf67d2bc97f1bd7deffbef6d0d8b451cd945100ce9084205016081a4f95ce1b5ebac32e00c593301cb5aa7bb6b75aff6f32e1ebd0fc4367c7dd686e3673d18cd03efa3fd3a42a4b4e7fcdeebb525ac11b149eb80666cd2c09781bf1fc4df8fbf71645a9e63a65e79d6c040b257ce18f3356979dacef4e538be5ac15c758e5cbf7fe87a35c3633719c99245671cc95167467bfcfbc91ce4398eb20a688f7f7d6d40017dcd74e469b3cce20612a6ce28b9c28ca13e76f729cbddc1fff0f66340960f5773e7073ab5a5de7edc75eaf59ea8bdf7ccfab30608214f59a5d41c9a41b1729f9de93765fa8261e376bbe9c815c7914cbb3e2dcf1a956dcf7460345e0c29e46b74de50926c1e7fb26baf0d68a595d6b8353f49d202dae33ad9fdb5902726698bfe292df5739036d32a25aadc5f690b07214969870c42929293ec2f10924830d32a252ab9d21615044a79ea8bb73e9d5d5b67d75652d394507777ef3cca9fb435b2f849f6ff1ccae889b546464648b407abadaa93ee893339f914ae79fc6be35c0a57ab4ea7a5b545655577b83fdb9fd5395139e9ac91bbd1c2e1a470ed34f553771e06b18c5bd2e76eeccddd743b31c9b825c9b8251d714b9271636a7772eaadcee2eaacd6e2cab2968b8b6b671d26e376a33d34db6eac0e9cf4cf966ae5d43fb48a095650f66f8bb3587076ea83b24ecdd326adbb9db6b2b0b2b4b0b2b0b0b0b4acb076bbdd6ea763843c5da773a2b2ea237da4eab6fa48376d1db176ebecdada3abbd6ec76bbdd2e97ab3f8573a42e849d25809903678d6ccd59d3932d2dbf55c1f043f6ea23fbbbe7dcdb7acd355227e59072b99c0e37853149ce66ffee54ee6d2b162c94ab2b95ad5872d65251515dd11ecac45499986e13b29a2e8523c1a7688fbf963d22939eacec114eab6623977d48f6f77236e741799ecd59ab6aab5315f7673ffcb960d13cef38cf69d9dd1a2edf92fdaf5d3265755657586dcdb30b9bb4661104c5e2fb962c414141657174dd28358e2f194652b48766096c214f679a6afc59fcd91d09e4c81974eb9d4ed7b24876c9992c53277953589618e5d31ec9fedf8b835a3390cd29f1deef1a2e9d1dfc01c9baa466bc5e4ab648494965f17e1ec6e19ab8cb7e7661718c4972c681ff55429ef6c81e3990cd4279fcbde01f486bc66620d792cad11e772d13004190a76be55c477b68d65acbd53f9dfd3639ad7a22022400db0fad72c243f6b759cdc6e66f9fb8c9fe7647ab64a0cafeb7ab961240aeeb688b6a7eb4c75f49f6dfe99f6f49f6bfa30472a4fd76aa26add6276d9deeaddd53fde353399bb35b2c95c5b25653362bfbfb116faaf8b3f6ca5a1cfeace3cf62d1f3fcefdb5c0331f5cf694f3b955d17528d7fd53fb4a1d7d7dcd9df62c1fe086d31e50f2b5f258b4e40fdb1f4e904d40fcb159d80fa56ab81c2f7b73bbbc6dfde5b03551b8fbfc5f5cff9399daecb51feeedeed3485cbee6f9f58a8fe39751ab726fb3baea7be3772244bf9ecd7033af7b7936f69edd670d9a4b64747b67ea8fa47e756fd83dfdfaf1c0b2c75ec7729f13c93d6d7a4b5bfe71dc9b5f95d4a6a773dbb9418d1a5e4ec7ad2ef37a9e64822d2afb7b2bae95afd355dab3e4490554c5c59ac63fd8f82052187204f9f5c001cc873cc2bb2ac08437695ea0200213bca8d0f25fbe6f5adacb0b0b4b4763b2e9f5ca17c684fa5451557c94cd216150a0a0a54a3509efa596a57ea945cffa420579fa0292f05ef7ad7da976189ba36d4b5fbd6cc2087f573460639cceb93c10ebfd75a93e6c12cc3e8daa58f23d7e84cd4b5fb38320acf7ab46c2fc8c779ee0b35950102b561fc07b0b7db4ea699a8de6eb6ef6d6966faa2517308d788e85499fffe20babf5eb48756274ba40948762b323a4ac2a94a7c280426a48c81d88f5c802c920c8ad1ad0d2cf1864726299d412d894a6bb28c02a646e17b2c44848c99340f66d23c3306f931f3c6d30deae4c740318eef03a37f64e070c60819bf574b19de8b2fbee89567c5af0e868cc6cf9e68c2e8da381665fc312f2746ecddbce11ffb1c33f63770cc2592ec9af739391fa3ffdb8c91f3fd6ddef0cfb134f13bc75f7c378b9ec4368b3c077b39393926cc7bea26ce13c11ec7a4891f7b9c8f3d8ed9ef4f94f3381ffb9cb2ddffc6cc61e468ae56fbdecda05a8ed50d3743709eef73fe0c1ac12a479b3926d5f2fe457b61f59b17865ead0ef47d7b00a36ba2e90d19c13e363e8ec56812f0877d8cfe987923f6dd7f03e7fd3db3a1baf63de9daf760d94e3a9a3feff5ef40b08f91f39f63c6807dcee79837621e4e49f3bc8fc93ec72c8abdec8b70c2f771206aabf7615f01fb3298e98ff339d5bc11f3c77922ff7e9cefc7c9f9d813e13cacf4c729fb61311cb3a8286228faf025c9236383cc1064499675cdf33c6f7c055901638c5f301b04487d3d112363a497710d4e87950489824431c352f048040a1c143864154e0e4e4e96263245951c598eecbbe20507990432096c97d30c298904134830810f5ea2ac172578821413a4f0929465bba8bd48473939393929665cacb0135956c51d0515505001f88477e5c5070e990a6815d0c02772b4d074c624465208dd150551742cd07971a0767d61d25955e966d02de994e4fe1137b14085052a74463e6cd7cb505071818a0b7cc812d7647964ec054f2ff86b694f4845fa20b5a52a87ab2a1fa4603716586081055f4e40c405175c509a3fbc80a509802b5914b4f807165a0514cc7430f821d2af4dc5bc28754bc562f6359f203aa5abb5daebf385c5ced48addec6b3e41eefe008771bd0f56ece8bc78008c0f7459d66fb14c67879ced3ad0a524816ec93529d32f3970fa64da43a6258d2a2eb84c73d927ac155325f9a458aab844bd28b934f9e3ecad8b29c940ac95561c2eb56ba3906a6fb7219f385f39923dca1d3fb16eab602942af9c9065574ce81a353f2898cb2d57fd38f2c48c182c3362aecc8c698293690e5872302306cd10336366707273ca39fd40dba14027bb2cfbb862050b172f7c36b378c8efb7e9d335162b4c162b56f8b0786d60871ca867050a158642f8c0510d483c917933021dd541089deecd9ba51684d8827cffd07c72106986fc1c4b710105c221050516968c612385048dcd7f00140826a40b0b1b26463ca1c4e6ded4c77e35ada52ebad77c682ef63996fd7d8284fc617c6eef6ebae32210a918b3b4562f2cbff2985564f18e3855c45b6ffbb5f783b5562cd7b2b7bab6eb9a0d4531c888bc672d879ed435eb487e240025464b5bd4fb820101ebe3fd406ceddfd25ae5db00998eae6f5503af0ed4efaf4c81d876f852ae7c9ba03cf6cf9dbdf7835220ef0bb97dcf1229c9d6fde63cb6bd9445213b877f8e11e82c2334655db35f9b682bca631f6331e3ff5e1be0710c05aa588effec33d9feac869759b7348f7d5bb7f4080035b5825f6f7833a2f47b1157d7b24ffda99badd5f61d67dfa5ecfb947dc762df73675b65ab6f2cef35f65bab21a0c36acb03ba48fb122042b6566fe135d7ec8066fcf6db4dffdcdcc88ffa8786ff1da97fc0a42526d0ec80e626a7fe09dfbe3f01df52214f4ad55bbb5ed35c6eba661f2cfdd6352d9c2924cdb53e6930050ae4b83f3d49b64cb2b57ffa0cd9e2dcb15c6bb7649b55c30f418860d3dfeb33878c9ca8de30d040d4a6957b465b78d9febf039118e45b2d1df34d431d4b67b1ed9169132b0c71b3d5a69b8dfe8e4c46cfe4fa2110f8d524632e93756be075ee7c8e1cf83ec7badbdaf92ca1cec8dfd712288a3cc7af9c21dbc05f861f01f97b9bbd3c43364116abd3f67a61d814ea307bd782b38f499485918521eb53ef6e0ca090f5e92fc00759bfe9bb73a0a28fc8d1b9b56da96c76bde0c223dac2415c06b3844cb01c0e17ed81c2619325372c175a13878b0759ff84e560b986e572648ece3ad1334f7447d9a7f67dec07590bcbf65eeae335dbda147a0907923746ac74d95ab3b54481aa293b5a58926607a323564a61d4cd6934c1c18619580803a44b0d5b74e88226062a2aa8f98ca848a205c4151b2d47ca48d931e405326a84303959c10770059beeeef611420567ab05a0e64752152ea41678b0dd9f390d5b4818d9a169c98cd3121c495f90b0618d114daed0f0a920854990302a8d11213dac4001e20632288c786913664b142d5b3e2629280c9132557d29776982480c2afc5075fbc00d66902451039513625290024464910b729fdcedbe95841349ada4c45194be4b2024a972f2a4c5c9086cb05d1e90cca4d1e1f48589880f052ca5f0be0fe5410785f67d1fef4c94a9a4aef7de7b2f9a372ca8292202282e3ad86e963249dc7a5cd1d5d0a3c8045774505c9ea84a73020e2a4b50ae58b9998004937d8ad264822017c85316be0e5dadb5d85a2f559a8cb9a130c44a159bad6adaa5e0a40b8354e45bfa40171d4098c8d2a1438acd4e204b8c132a3895d92d61b316876c2d4eb617d7bb537b6bd67e45ee5fd1d9f62c742f4ebb66c8220585a52c4b94f92088244994fc48828605a57cbf76dfc7cb8a9284afc873eca85c73fd6e0faa68d04d89c2a60baa035a47241d598ac187088864000d143444e4c83a610b4c6bcbc9928e3649480dc9f75f2cd9ee7fe06d6b43d9d1429323c80e6992b8d9dacc9b37576b7e687599606b232bb99d2f69ebdbe245899f17393235284d39a2c1490e1627b4382153841312173e4115645af5c44486655af5a475d1648cc991cea69096aceec626e1a000d9baf089c08ea42f0e0a80031dfba79ae7673ebd6375a14e536b073503e56e3e691e788d9b57b89b353cff8c7147861d595cddcd167d6cb7b57693b0183ccff3645dabe199a7f7feedbdff397a1667efc7fb7b8ed97a3b0a14d70c74905dbb5e6a377090749e7abd0faff7b774cfc4ada51c41a986d25cadb560b626cd0373c6986733c62c561aa53df5691c7cd9d23ce86ccd4a7b7a09f1ac99f6eb728dcedf247670d6f545af9aa4f350cfa2532631da564dea3c25d46e2bd1da7a8026f2b419d39cfb2d7d4180669b2d70df4d9a07315cb6efb724c1cb335e74ad72e0433a52c84a9dc773f40b643ffd7a5e53b4b5d637673259987a6b3e4972860114f22417e083bcedb25978447bee51b666cfdade27e1cea0ba6ccdb3e632db6cdd04715705fc7ddf9f947a4fff1c2989f1f799340fbec78f3f93049b67f8642ccb424d9bac1dbbd624edb16dbd7a9e7df2b6ac2d0960ae71b39bd86fb0d6bebb6790c3e9ddf13695fad308b829837e90234f923cefffe9d5d12b6d89cbb124dddc6186ec4966ad956524460f93fa96b66b345c0a93986cbd60c85abff028df1b6d61ff5ef0ab494b15f962cd662409dadba0adedd85a989530e99ab0a93009c465afbc208b760471b4c505f73f295300e000ab5745bc1fbb8d4728c01b727d10475b7c50f728d7bf37dac2fbfaa18592eb5b28da827ee31277ca826108148640a109223d141981ce85204af4b03b9089ac3771881d322641f2e669470f3622c082a347113a9478a1c8142b5749d849082b516aa0925a41c9ca921e92a010e9c189266e8ec30ef00b06373430198c3042e489132f3cbcc9aa32e2c30e35b8287ec3bdac9626a2ec162e302f2c06c9cc6b88a4a91db87cd181e449041b7ea469220ac98f2a76892c533148b81c662a06494d78a6a805a62d23459e4431f3e4a3851f393c31d5c3992b914d3b81b594a2e8d0c2141586e8b6c2441942831148f880d2315e79d28161787164e507902d6c9acc80b5c6099aa3a5315a395cd0f191e9801a2a49b2284922cb2d0142a2b258605a3284132bc4e3b100284aba045146c90c576cad66aa891d2fb480c48d6bc9f1215181283a44513d895286498b2727b4b04497ee26a4f2c881b1a808b1e4e5061b5c400203d4931b9478a3849a2e2b3cd9012641ca9225070e546ab8926868b1a2c3ceca0c6396983276a1618a0f20744d9c7420b135d2150d6d944ee0a1421b0fa9ca99305fb6787063c3171d3bdac4da806973630aa24a93268c7093825592343833368d0e708d92304e55bae05ee81281ad7598a0431123d45c31c166f19620612908315a4a96e050840d4e537450f3420b5fb2a0c140380d3a441c4c3432f4a0a4a4650c1142e820a60a122e332c740d3a700ff028471806c7514eaba98b852a4220c97293c526eb05306598f8931d5f6e092272505a01890e4c5460a208a41b966002c94a0c3e767c67689b9049160f4790800a9344105e6a63803c0de941030c52f68b0e5085a734564e7072430c4fe8804091303c7cf932c58834377c384001020a105fb660d0b27594181d4e903142a68c2fa143eca18693325b4f35bc60c4358679826a614712334808e115619718718365073539d23095a1cac1c8842fba335e840eb00c0f9f980430f9c0a149852e4fa4e03de818f383862f60d05824eff6e285118ce06a4c1313a50348e5b003540fbb5c9adc179591942092a588365a5d5e902a1890b2d23c79e34fe4085bc061c29a1e304c75b9e9f2048e2237265553a67ce086b05e6a509a2b4e00d9b2c4041a6c38a0b4314345061178812262a342ec64fa4321040901399198562249506048160c4288287204169c15a6d0f8a075b4060b45429c62812eac2d37d8c0c528ca19a3a6271ebefcb004a588908b3d41473e4910633006f2cb540c9522610f32cc540c1520e0074230a8dc4472f6af4cc54829e10393b17ad97144cc19d14415232544353315233595c94cc5489df17c80a01924f249a78048336972e736656448a75e7c2004c3cc56eeb7983443443e6b77879b3148596280d8f9506f6bedb5f7699f77df7e9fbdf7defb2c841e06d1e7d97bb5e46b99d429621591eed8f1d3f9a07fda00bbda0a1641422f6010554f93fd35c30a23e467d3a77e507da1fa30ea6bf044d61fcd0ee80ad9ec77ccae6cc418a67825b5058318531fdc3e83488b51548d80b2850f7e8d9a2b40ab9f02672b4a81b3890f7ecd542c3139fb1aa53cb46b77cc55ae655a35262a8bb41e2169d5d5934cabc66ce59e4cabc6b8c928e84f8c314f6a0aaa01c5dae57e52831863a02a06349f1238e0cb354bc4e778561092c8aa314f72a5b5ace1d933ab1052ac59449d1022821b6c9d80fe6b8b6859168b249dc779aa694b109bd8ece3b0794923f222d22cb2408bcd9ab613501f878d720d218395edc441b9b2287164f3929665bb8998c6e4e86de13309cd12e86ecaf6e4ffb28f4b165e19a453801e586767c55463b95efd7a752bd7ab5faf6ee57af5ebd5addceb4ec5dda4de97a9529fda3da46bbff4a73e756bd2e63131ee1a154bad6cacf45aa7943608bb4a6266a8625610d3a38d1a21be2a31dff761b04a4b15ae0a049605a6aa232e2dab1cce290c536e2bcc51962d2e2d2aab1e90aa60c951e17258e3c44475c4a56505269773837302c394c509cc1116a72f5c395c6959e5bee074396a51d4aabe3865fa1288b023b27677f7ac7677ad44c8da492a96208650341d9b41cdd3413e42b0b2ca4131b4372c282888ee7c080af3411b368e637d1269e541d2aa2e5b598c514ae9d74c028d7ecd340f62997e2c53f3c4919984a0bf86cd4c6efea49bb4181774d9faabed68b4b589298e5a4277053342e54a496ae219a6b5d7d0bd9efd3ec67dcfbce1fdfdcffb5bbb6f4d5aeda4fbd4fe356fdcb7ffddb742f6bda05c2735533775bd6608afa1a1fb5eddfd50cd2c600a00aa9014fc189f356fd8c76f1fd3c023d872b9aaab5fad2a1636eb91f3540cc8745225c9a45c7354d5cd5a6b37fe8fd66fbbe8a94d22efad5904bef745f6afb516b4d6666f7ceffd2d6f3c117d26ad1f7cefbdbf814d5a9b34097c7f9f083469fdb5d666e76509332f1c71c5e69140f43d7e10a8ad36394ffdfacd83181e4264f8c1c295edfe7d107260b3a832dd3f2b93ce466ddecfeaec5eb347b53d81506d97b6cd7b6c23d6276bf4fd4392db762685289f1ae20c5282ab3153f96a4c139dda69314677446ad69b6d93278a2cc37bda90f83413f5cd36ba8b1f96463d826ca209fe11b68de67714640b7f2c8d7a605bf8474136f16d840fe20f4b9003b3fce1dc8158f65e8667d62fa2533610e00701f864b6ded565bfbe05bf8218dffad4c7ca20deebf6044b9c7139669b7189732d3d7f251e3b7f9e7f9ee7f467d4f715680e4f392ce9ee76fb442a07175a6b4a698a87fd9eb898094f3ce213a2ca0fdff77d6088850a04c150ac22255671fa7419531c54d7fad5c433429b27c6e4ccdbf9d7e5cbf50fd5e56abf9f6ae56c7403352b8ef6044136521f758d003790b65be65759352ccd41d69f354f54ffd8af504264e52e2910b5d59fd193a4c2659bc5187dba23da73c668621fe4687772f569209de6a93fd65035a899e232137fa1d6e9da3c18e7dadd43f8accd0eb4104d2071ed23b27e900fb23e932c6ebedc74392e7eabe2a255b9926ad7ee01a9879a5a6b7b16ea54b5dd5e7b9d726fb1b285a95dc06d41f2c6ee6eefabf2648b0e6badfd701627263ccff330a8c54acb82211852d93147866228f6df282789412d4aa838da11a43dade5965b8b0bf9b4b9875da65a8c640c6a491a455114c7570f45f8d7ecb02951a708aff4d5fe19a9f555b1dbd18d7de1310724777f39b6b7bc52c63c3590f135736584d2205c3088412c0507a1d2dd0d86d8de10069d7da8f42cd77539ca1042331000000073150000200c0a068442a14028cef434917d14800c7ca44e684a174a644910c3200aa218438c41c41040002086003233436305616ee280bbdabd4ca5a7a05e518b734d2786ca9b02f7a49f910da64fc86555efd1f3096e9fac782a4fb56e20423affeb4ade66a6f4b2a2c796bff4b408a1c0c6232bc3fe557980ca628c779bead6fc2c57d0236e8e8894fcf84b315d6a2443a7201e4b2a265ca988818482f9955a3ef55fe861b51e2cc45119420224a07a53f0bdcc9266abe24144b56f3609a586df2c448181694d8fe80a1c47eb5cba7104a47d34ade8a3d1834c451182a06fb9addf2d1e9c8beb6f54d17b393044d2db5f11e0406daef4e83e0e166274fcdf76667a5ce1080c515a99da61528bab7add0282cb183450cd1e32c221e8d67aac3831a8f00d4260e8d91abea7fb0b6064ece54a3d981023f467ecc76face9171a1f41e3ef6d1c0de65554f7ae832d2a564f95f5141c920a6ab85bc569d1ce441f57ef012649b1fbc863676b66a4bf5a9fa5cb1c545ca94caf9e42a6c46d066e6bad1e74ea01521a51acce861bfaef561118fa77fd9f1a03cbba3eda82d4d6fc6de9e7cddfceec4f457af40bbddb215fdd1cd9e55626f47ea5227850a06b48c625aaa1af97435cb6846f502976835967a2b5a41f7d1c14baafd2a9e2b61c40c8dca5e46d2f56067aab0aa6c21cff90df6f3b54dfc603bbb37e4c554f3c506e7c3c9da196f5064d3dd0767def89cabe12377a6eb3038fc5983f97eb8c0acbba43f2c46bf4102e98878e710284e0042f06d774a7a0bf34b557545ac793e67fb45d4ee627f473fe1eb8bcaf44755bce169d78dacb2e08b281eead97eeffa04cf9d5dbb47c18ef5056e929ba3efcad2863750eb1a289bf5605909e893aa75996d77a66c4a656bca29c227f3f972027d39079ef422564dbb29fdec444cdec39acf727d33847184231cc6191ad2829fe933eb6c863e3f8d4c8f161a9da0fe89003de0da6aa8b7714146b1563a3c632391b7c54ae3ef305955ae642e066368a1b738af383b64abcf48135d02f92f581cbf63082c6209ec9f115a4f6ce74da752aebe06a7d7510f0fcf28b25abd04c1bce16092dab2105caaf981116cce29191a1eeac580b32c01ff373cd7cef3cc4510c5a126deaf1c3b9385799f95e75170c8a878c7ad9bd3d3e1e57518679f91205e48e3f9b8a0a82ee9b7b470c803b497509766cf05ba7b45f991376ac2ba930f5381c224d78122c8fa66a38399e269c0935e1650acfb09d0fff9142a21afecaec638c3c68897c7a18c83c64d5784f8e5fa6ebec3ab8fd24ee4b5ef1146964827d73dfb1e3ecda546d1628da3283d66afdf01cf1780e602c0a7ac093790e59910aaf6cfe26e12617fb4d0e2a9c5cbd7172abc8c9453955c37963fbe07f0e3ed533102910092c0adac9dc39501183786d3cf2d395a6021b988309f6b7b3dde5f0b65d7c6f89e2413ee926b1be8fd818a9c3a3d0e96e53ad07ddb61e895050a44931fc58d8d14c048038026b349174f128a5b8aae66fc99be44529375f63a041a9dda059ec50c2a3625fd9c4048fa0bcd481e9fa566973375b16f7d847edf8b38a85d1471d176bc3f7692ed340f9407ca598aa1f44248a103b63419299c8839c0cd85ae7f2b94ec81395e5aea9430d09f8b34af85a0da80ce82d9c5ff84d7befaf6ec2d80e10f4c89565c90c7826092f2aed5501256cb98f94334b5ac5aad42a851443fe284e668e4a139ccf1b6112a352f0f91c8890cde9988872b1bcc223fed39aae99899d42787fb7de7ca08c43a49963013b77905ac57a9e7fc776a19cb43a2c2575aa7bd41d173188c5f6af0bab5541510fd4ce115565ca5c49b631f82dd874bc2269d66edafaf2bf1a447face64f6e8cc7a44a049a7044b75c9ed0fefcbc2e21f06b959bcb416de6594a2f596e817e2df279e3e074bc3da154faf11683ebe7d0e6147c6584836519681a723cf75514ca7ede021dc556551a1abfc86ecb6bcdc319c1aa14d1fa855916199a3c1fe778b555914c9b670eba2a6643a0c2d39cf24bf8b3353dfbcea5d59d09d9bf3fffa017bd09ff1738ba08f6cc978c26efc3bc5fb841bfb949e7697e711cb2d4697029f7425dbade9d130993fe4ba45a90fb6ea5e4814e2e564e4e3a86c5d7eb6f93fbdd9877a448a781cb4a7f8e3b63016408bf38d66a54d522aaf88c6d88b4236f024c1169261a6dc5f0a9522012a0c0a0e4e2fd0a8c6f3d54ecc229b9b5971b1937929581bdc9676946280fcbc811f098e910a8d43e0e187773b163e48603aae000ca5de0d2a89e48abcefb32f84daeb9dff003653cc040c709d6be8d8c7c614334a20efd20f4b059b81df9a8ce7d7e78cadde08544e6e9950183800b4a529b474aa02a1a0a36eba7c4bb155d495bc2d2d191676f2e9d94c24c7eebadb5b4750b5a17029325e422d3e2d68660641aba7a9c22b25b6bb550ea9e3deb4e25992db4468826b710456e219adcd65ad8ea10c369a558e0cb16fc3990cfcdea6787a7578fed072c3026f2723f6ae051ab90b1b6212467c8949ab25a2d4b6ecff9d24f13d202936d34e7f67b07ae8f7f790772d3a05347db7494d807cf07eb2f226ee8b3f66009c11f7863b93eb24072c826e6527589475f6421bf214a82981ecf902f78f46ea858ff05b2d2320dca06d6f3b93008ffe7168aea5ad9bca8de00da9391e7b9015ab5815f6c081977e8db717b881af080bb41444fb4be98a5cd21eb933eb5f540b7e91a1b1ce9d290a18b1e265dee6ec41b9199dec54a3f308d4af0ead6345395bd33aa43833fac581ef5d77066ee50491e3750b391a01caaa86c66245a299d44bdc4c38f689c83fb54ed846c2d4cca2d6ae64423b0d66291f14e68c383c270cd69b635702d280bc2b4377fec09cf0407a1cb1226feba089f6cc78667c76cd60b56bf7729e300079b2fac6cde6f54c5cf2658299e5d43df6e71ae40c37f21057e0082e1289611ab717eabcc10ed88e9162b23432b2bf2ebd8484bf91f2a1b5efee05a85905dd0239734000208df6c68de0e98dc8dc5b64ec8bb22602b4445e6b1c027baaa5a65bdf5f64dbe5f6a9bb603ef9bb8180edd010eac33a969ab971047b6bedc4da2d3e2aea85a55f1f96c29ce0033147e51db57031478f21a0dcc2686a29d5dd1a0a667adb0c814e3954c7e5bc4c2dbf6904c5f4541c908bfc27b4a3563f4c1e9d15e480dd4da950f47ae6fdbb67184da8b540990e5fa5e421be355db4bc28d9f178be1f5e25576382609c60150bcea85584c15c39378555113f1aa80040526effaded361aa3aa1b670c0894ecbbd8da741ba61191dfb621d32aa40fa707d8b8b31a3519f16858854aa54d050d04e11d6ea6a436a8f60cc578b81111a9bf3aaac2a20fd0f456cb1a19b52cbb6cb989e3c50fe3be0951ce9adc4cb0683f3ea16c9db837aead47e0f9f1ebae52cf59eb2b9fb2bcfe8da0f58a38402a1c7cb642021d8b92b26e6808ac2bdcaab213191318a6c9935eecb35cc258933fb5b4c5763d22b07b241937cc66add87a4cdb2e30d977be3f884b441f837318e4cb4da06ac1d0b6a1f82719902a4a094261941e60038793f6dbea0ce068fe545bc55407ad2188ce5e9c0242cd40508b7d34adb6d787fa3e42cb83bc17d376dbc9baec43b78998245955042fce54a5476edb81a8dfb3d18218a82e6332c60aa75aea11a431c263b694019f1fe50ca7f3174a5d683ce858e58a88e9f4e8584800a3d5962469da61b6c0741f12985d125b20f3a62bf20a2ef89df17c06c2258941ed527c458ebaeb01dd25ee1853bf148bb600e98da09150c0f24d61e6959a60f00e53d83c47d3cd7f0e396651a376a20d66c59684a3391945e17b011fd23875c024e9e2519643970d0a8ff0f65ccbd01063c908dfe214ca41cacc6ee8fd01c901225c01c74ee2c84de457c1036e8b3e0a6717f355aad71c4ecd6d14ebc4a75f8c9580192718a68c94a427eca076170d0c2fc04977e73492f84d47f701fc1f694c806c90947174880d8a337696cbe641ee969d613c19ae5b68719c19b6f1bf1085c969470aff1cc3564db5113d9180e18a00e6a426ac56e1a448bbdc201d9294acad16d1da7fd6a9706fbac72bfc2a42c97996701b505bafc89d8acda9a8cb6f0e3e668d0155f7aca1cdeb2e54a7b80ca9b5f53a90e5ffda2225058af7f94f9999a1ee8ecf681904bd60181af24b56982f2a7f96e3715584243cbf4e604292dda3042929c0cf8c97660cc6bfa368f678342b4f4525f0b0478349279220101bc866f8570ff15d763ee175cc6d2f0896c2ed495335d014e6ea6a3810dafd07b0f64c36fde9322d384f52fa34b0d39ac91a40ad20599f563db68a27a25b82a0824a91e41c9f89db304cb5c11389344e381b2c9682118a13a8fdb088aae78e73e47915f655fc985018c83bac7bad39d96b65631181c758aaa4093b60b7eec67f90c719b8bf4b5ef056fa93af85a835c6741b1ba153b5124045b390287bb9b59ac1baa00d78458c32f6cc79704dc62756fdaf2d64ca44c86ae69cd244fec152a675baaa4f664582498124fd786910c9fd498911f64544d3ccd6fca38c0726422fb96f0823d19934f5a4640b6f2c5259b76ffb8a552842d072112be7a25b7538a64c0a7d82f740ade74590e4ef8d8d0506f9f484581c83f39f0b9e1c25225e1e43ac0e62a76269010bc366dd21abde0dce46a570af5839bd8940035b3360457062a645e350751bea2fa84905205b66cb8d0b7abbd64194e65b070bdef8007779e447629f677ddf2ff7ebfb246e396b03a33a18bd9ce9adac3d500c627c7fc16f5b4ba3fcba1cb394188ff9f3760ba6795ae3faba72e6ae9d901d0b41ac76948e748fed8c881c46862aae189dca0f5d81a539bded7ebfd01cb1a47296932f36751d4a81f502b8861320018269b11ac62074a923f89c798bb919552133f936d1b97d9b5204a7d1272ccca19930b3452b5d5d8bde16b951630fe31639ab8a3916c8c3125f926fc496f0ace90b7c80c5739ac65af454ad375cd94c4312f0e441b2a3e7c9c3496a5271da8c1505a3317348df8fa491541ccbd7fbb095815ab683a2e3b511fde4493f6fa97b4033b87b50c568ad953ee8890e4d160ce3268f2d69050c2ca34eddd37aa9cfb123557270f766b39193879e6ca02fef463d761352ff68dfdb645ec6b667123fc8d9290bb6cb7e87fc8a8519d6d92b5490cec9f57928d16405a6055d46fd0f748b97bf442229d5fcbe7677d8d591ed5fde3a922abbdced3f7079996eac8244d40c2c917e77116cbf50cc7284c07540ae861b249b030b43845ea954c24625cae09e21364dde9212d5729f891d840a867463e6985e0513658db602b454f569dcbcaf0cca633781610183842501c0c72d44f7616d8ff280731768a0624f2a787a1a207fe8409af7d08b9b48fe228bc3db03806c33891370532b3c23880140bf2f5ecd289daf0d5abb10e34222a3e90c3de9d548f1dbb47779d2b226f398ac7affc0ef67181cc8f3b9990a5c1e7ee1d0a119727a316784980dfb9a1ccb8f0c6c448fe1077685680450fca446edc0e1489fa8c252685a52173487b33e89edad23f6c0782a908c292bc71b671b1bff9db9208566cd516f90b04329daa461f199c8b2de5ebd9125ec33ae77d8186b3a29e196a3a0b3630e9db44a58acc53906b7188e996b424aebeed0955089191946598a128189777337178b644d808225a147d3dbda3b296e5691dbb3351663e03039e0230a13288a12913cfbc19d855780a93c648a1431b262f07f7fa24cfc4be8e2a9fb7ec85c742128291f41d416e9af8d380b24acc4729002379a5574bca8bda13abeab79c42fc892a5c8a87e7a761b08917f5485e22250a54e7c159198f243c99279547ff6f28ca0ca6faa35cb329c008c8f56f6d13610f06c29242efc23ae7b2aa70533bc8d029818bb7b81bbc675f32890d11e1dfea28128e79175b92dc1e7c1dbd1f3507b2a61e464fe5c00dfeaa648c7f7640c6ea41329fe9dceac9517367b3474897aa0b6a07952b18589ebc50bd683040f98e9e640fbfc2d844b3f73f869841ebf6b2481e15f5f248ff108c5a3cf044aa5f4f39439d418971bcb732fa9119903ac6e524b190965b24540f901ab5629770d1eeb1011701e3531da643dca54b4703b20ef5169d84d36be08845178c02a9fdd9220d26e53f07406aa80f34f576840b75604eb177f01868f360fba674f3a63cb333d416430022e1f9ec9ee4d953fcad6d1626a7f928489cf5a5a969c0af710eda5874dd196dd0fb04ce4be00879586d68dfdaa189f205d058f26452a2714ca5fd581166b0116effdc2e2f2c0985018a33ef02608cfc6f5c84ebd4821c7c69d9e1ab7aefdceef3ca76fb5afcddc3d8c01337862f44ad8e443a04730270b1144f222296b0b25a53923c8f5ff84699cee1002a674c0a1e73efdc8194e9851df7dcf30c192817b86d56a24b37757121fcfdd575e44ad4285943978038026f4cace8fb1bda4818ad7ddabde6d17bbd124a15cfc06f7ef8d217205c23024abbe479c344f164220e447109feb9cd1e9250bee4a0893861aabd12f517b84e0cd5dd673a2f91246a08e92750959c9d4b9e631a242ac965c6b9d184ceb0bb7cc3e00f180205cf4b96c894486d446c196806efd062f612b83ec8c1377875fa83fbf3c503a179eb617ded442b6e01919bb05bf19514f343028cf92516b8558dbb168089948b69bdf9b7cecfdf4aa95f234ac12d6f8abddadafafae328ce566b8b02d0fed40137fe7ffe360f740d56f37a7cb60f748d6a32af423cb890e615c89213cbb545874cd7b461da77ba3be2467f3636b4ddb1e14d6e36bcdfe4595ce6fb13f57047cb8602181f3b6dc522351b9ebdd906ed24945a019143fcb661073021019a5b13081f7123746b85631cc1d830b7f5c5ad69b950f81113b440c3cc426e6613f36e98f63f0930b91202d8707ec0c981c72ac309c1ab32c41d50d004c6495da6651d69dc60c45104e492f400639747d3ae62a85a251ecdba9a7d3a33db2e61e014ea6aab8c6cb2c27dd6158e2658a38edd53c44e60733844d887da9dc0576252a0249e14a84428057a31df8ed7885dad8fd610d5a16b1cf43b0da27bd40ee1ac39535ba42ae943283535ecc454102989f649d1f03f64eebcc21a588cc155bc5cec77679c0795588ad9cda3609808187b510ade42d2e2065208b107f4b9be2884a5831548825094c850a58da4f89af43d6fb762139b4a9b45f90d9058c20a862943e977e97d1cc1d8415d091182ab556c89b2fca156a85a7628adca90d22d72ccacab63afc083e14885730b12efa5833077cc9bbff67af74f39cab4a62e187786b4f9bd69e6264db3208dcc29d300f5d42eb741760df9502431fbc76f26c0bfc9212c681bc8e9cdfaade11655001c44550068bbc0aed2fb719e724dcebcdfecd235a38f11523d0f041e533cf7290dce2f2c61f5121ad42762622a3ad16c74d08e613be196cf1fb8fb8363e5d25f64cde0c86e5a380b59256671880dd5d15a45adac8ad21f0c7a4ce0321458e32b6e5810a696b0addfe07804d57abbb3e2099f8a6f04b5ee3e418f29326de3b2fc9ae96f5548bbc5ee4f9f371137ad0012c49dbd920ee093488b6051f3bf1009013cbac960aa15bbcf8ba4d4ac07c29eb3f718bb605b35bb0a904219cf1e0b32f01a8bacdbb1dd0b9d2e7c0e8c5e7c31b39a50ad895ec24157e6262caca0346cda2a6709572f697ec6c8793a4e51c79372a46bb9f028c94ecc0949e6cbdf28a34cf26b819d692bd39480dfddc99624cfa1ba6acd38a49e1ae434c7ca47167a283302f6f662cc928a18ac32659430ca82fe48abded3d08319f758fee00e1e049647066c98a4f9195bf82660b64b95d9deb4ebc13ad6819ccd69bd951d15b423929a0a2ff0d42199f0bf5e14053abba1db18fd4a6dc3e8890e259e0074da495bba5355e49f22f0376d52324edb73734d74ab1c952e27713f5a4470db859fb268dd44e94bf651a8f0234275e60de5b57eeef47525497bf5e32db174c20b1fdba0775c00c4d62d8353e57ceec19a3e63ace6f176262bb8fed212d65219b8465edf62329e6ace37056c036fa5b91b45fd03baca553765bc2b412ba51ebe99f29bad6a84d302c63541b7441da247104e0189baca4e5271a6eec23967662d142a37708f0b346f1a589fe3f98bebef9f5491aadbf5fd621247afaf3103b8084648d9a9b71a2455bcddaa8dc9c14f2036fabd4b93b527c4921e8772aa8b6463168e74b2e2313a47819828423de9a0cf717cf96ecef9e46cc528d33fb9b298f562c2049107a4caa2cc43455be0e46b4a89560095981453c493a7e59a603a745025b6c35736482a1a56517169aba2b40b27eebeb2312d5a4630da269bea2b61bec1920bade83ea05a3992a676432b923ab5b2ccd8834c5cf2a8c20fd8f1049859e64173289a92216635a36b79d6fcaf470374aa64857a3dc1142a7d68249e838b019b7500fce5d72f42f5662045d9e0b8e765a8f48a76b651ca89e8d3302e60b54f44016d1c2b1f42194b62e8aa6f25818c59ad5e0815d6cc600ca3caac1d077979d3b7715af8106f36a143c0b3a1658589078c0ae3a57ca4b0963f3050ada5a1c03ef86c44c5e765a07d5666936a2b9513816f3c3b0e75e2f98ad4f7064822405f64a6c7204a106f0f7eae1475131bbe5f449a72ef06f4ad6c3d21607948a585b22bb33378e5ea72f9e2ee3c1c1b117ac21e0e28c665594edb8a8553574954ad952316ee679176eca18af17cdaa67e1d2c1bdc0638c28fa280ff61b43ebee63a2d87efc8540c4b5c1cac1bb9cda54193a378a384e42dbc69914a6db0367d2432a9520022500310fa36f2179e313ce737e5d35499d860c3c288c19c53c607e873011508a2e4305fbe4db28931653080669e3b7b9463e1242767eeb41f9b7080c0f10993759733bf70613db6fd45157ff92c3c1bcbe6bc0871143c49b89a771e5cec1b40747fe70718413112d09576240ac6918e45a53c1da0f3b6fc600212654ef6b268d7036a39097fd88f14126ac92b096ae8b615f73b88658a434a39900bd23321cc345ffa55278eadd451f9481022f9e6a16ec450c5e4e408cc1b3335f9fa32a6fe086c2d453f529a0f5093b176f7adfc14bc231cdce19634e4604237faf9404ffc1e810ae6b682e5ff1ede233fdb189109e1071348c983c2faab88cd09628d451e86334244d719f308d9651e1b3f585af41dfe2631d3dd1629ddd5454748cdd276cbde80c6653c2a0988372d7ad358f56cf16c76f0c83de1b27e22ea5d31a4d290f69ff2038e80c454b069a3850f9c1664d949e0682bfb39e6aa599ee8668779fdd840d44f738480c10de2c0dc0b86270e62493e24a3dc37c060a1076eb63a356b78100029caa452030e1bda207c4d0ec2a0a5857cab6d2b933a755fb211b50594445656cbd47a0e7e892ed9d8e1e6e1b6d4e9776ff34f13ceaf10160a4d45974d6247d8cc5cb1b1fa906a570cf771731610dd20070600ea31d0e61a62dd2fcd61a2a4b6d7b2924883ffbba33e65bc7f9b2ba78ff0162832511bcc9a45eac1019aefa528c2450fc1cab3e403d8b90b1ea48ad053b2af0208fa0791f8574a538e73f4f85903c6eae48d4188493cdda17fddcc4bdf92528f5170b61b63488215e0ff14c20fd1e223d86c70f05f2284d212adbfa33b72b2f6ebe1caa41536fe1fc0eb95dbd6287d1e405420c7426224a624dde1788009486afc3616781e2c02887d451f70f3c88486411fc8b8c04fb1731cec26705488cd1358f4cde35b4d336f264d3aa3c1013d3a65b42aa702fb88f8530678df91a304c8e62718469a6388f28bc7d99f27df7c58625350390aaec283f7e13fa245da35d17c5a3f3a8a5c7089e6ed1be162e4b8be0c98f406229ad027a38f001d7633a49208a180c8d68833c1afa05325dee7398c27b04c6cf122d139db0b4cf5c73e8c8fa2d0a60fcaff3c9b46c80c8ef6d069be770efedcbb26b496707e6cd21e3857bd527f88e310643f1cea4cdb508fca35dfc3bb40123cfc912e1f476cc0b7c7ebaea54f680a09cbff2a0b7ea23a089cbe48fe2ce77e2a6861f88642d23a0882d14a6829615d1d68e0752cb6177b6a3a409906200d22d131418b4d67c09dbe27d893cf0f2d616f640c3b355e4bfcf2ef2e4f42d718e5cf2f0ba113ae7d961823b4233519a34a58958597b40c9f9d8fc104f0c490642cd3788a0345c09e918896af8ccaeab4f6263e202b072562caf76c58ee93f7a9c1ea80fcb08ecd4c74d6bd664bc15ca9b6cbf847792f1bcc84adfc3259dda12c176882a7d4ae4013c80f6d091b63ba948c87b011cf75b6ee411a2208a8ae925e86b8a0394effcbb30640809eb8c9d810e52d7ad8777853bd085261753245370ee61cb56105b66a74c5adb4b31f2c55aea035b2f76833b5e39eb8a01f1e7aaa23efac743b8f961cb3260caa8fe5e4c780492f40ce21ff7e23e52be057c4af64014536c8aea576482a0d2c7a648ade3f1f3ba2238d3ad3c6952fda3e0aeefe7a4b850493c3408fa5d0ade0618119b2966b2c0072d28042ed58626f6b55f7d7611082f7a079212e4c415011c31844a302c2a9c66e1e200602d3cc9ea04de69f4784895adc60d2cc7f6a87a117812ed5743387ae70a277779f6281629a530691114bdc8805c4e3ad163dc987535305ec75de91fcbad3079df9f285ec9983ec82cad7de5f5a8639e3b49719c795ea7b7add3dda97f1be24d25bf4f4dd25cd7e95497649da26c9107a90be483dbb1b8e325010423560597c3d276fa58d18a70a64ca481244887f60c8951331951fb9568d11db653e25b87e6c29a3a73bf96b9260e2fff013d4c0ccc2a413c45a672437767658ba536f89550c6023b1ed781b04855fb22ac3c8227969ce56ee802d9ec97b15e076306fc80e76ae7e78ff41c3938275ec7b02757e4e8493b0217f538c8bb4174e6e7b49fe54cf2b7014b2a3135283b3c1dbdd3578194dabda4ead8e821cb670c287021e268af97742380dec544999e76c8733ed97791603a02489c8492e287542e412300f10d3b039a9fe55a2c1b19d1550f1bb9a78eba648b5c44ac94ece82404e723fd9976f7d110840b4160b2b960a7d3f392b3b00b31766a12b8d5b2c10b754295ed5888fca0a6ed877e69616a37282f6dcb57e2428d92ef71407a23bd3b9c038650ad7635658786622b6b99a13977fdbc191cf630c72dee073c6ca502526effcc2dad24d6394fb8fcc92a3f1f47ee6c4a1191415635eb9a29e480fea9708e880ef32a0ab9363d2f8fab059c08a2fe789a405c16fdeb3dce2f2ea92f087e2bad986d0275091c444c4806b3703dad945f0de05e2ec22738d94abc510dbd50867f96d3a44e9d025d793c090e9a56f11354aa83fd2f05c383732e885e434f82099c6d5ad75632d22dd52fa5950fda3c13fcac3104e030986af282ddf8f423c890d85790981ec3ae0e9c0661d89759f77c60d599b0feacd709b670f5393ea578060395624d0866d2b625b82fe92c7409ad0a1cd8f0d6f463d4a311b67cb51f2e9590d261ab981b352958b67af3419315401f1d87959cc560e0b8b639b00db0f4c4078010294f6124c2775e4964c2b7d70a49aede8947cc8ce06fad10d0929e64b8892ef98caa08f59d15b56362d609e8c965884485d7cf0605611e88ca971f061a9fd5e4046db6fd74d5e8bdfa570549169595c9a942004edae9df62c22966a932a2817d5b627734c6c12abd9bfd2b62da5fd12a0d9d6ee2c23f226f9f55dfd2645fca44c7575c24a399b3381c550981dce1bb22e9449803703afe4845cb0a994b3bb6dc09fd51d223caa87466af481045818c16cb5230986a540016d7624c6e521af13e2ae1f5735018f33ca79662051b3c822e067dbab5474fadde078d179d7deffed899c450059511654f0516248cf07ba1a26307f98ead264313c72a5d5e55fa002fce37304ba7a45356e0c535f64ded045a2afb1dd3194d21a168c7b28de8dca496bf34f4fb21ac99641e87f1601f89a4d84a853ffecfe0272429c061759af9790aac268766ad0e3d54eff8b5cefc8d87908362fe6fea74195b82166074afab101ef3902059853412b0082da48b7921912f6043266ef5bd6b16fee886960bf6e33b5283b249431d19fd12415e4b21bb6e6168582305700522961587966ddfe5c65fd05ab817e638048b7716e2e1db766e7281797444784ac932615addab58c37c1da4d123f20e230f5c95c158c825c3ccc11057014245ef22848a2068ce017a88d5a01b4bd2589882c68c43fbec3daba9d2d05c184bbb48b8ab56693362bbbf39e2d241750b2ac461abce870ba13d292b3d7a41d9b014530133449d9151e9e2eae38ce36344be058160f81d2bf8ea55d511ca40048cf4f63bb99c35b28f849d26b02db5046bc2a1ae8400572f2125ee9c636d81fa64c57f6361891693b3ae6815b23ec7ebc3b34af3a7d669007534b00100fcc473ca78fe8cf1bba506cfc90723862c92978e0ee9c1e6a752b7ef3e815020504d460d79f1cbb6285c843950225fd06050fc96d3c686fffd0c061ce49549b8907f4f007ea448a5b0d670f79f581c1500df19c87df5a59324d618e36b29b945728e3adc138b058faf4ffd835ec8308941f0f053db6001f05c0490624c29d9e51412d89d557a138747dade8e18691f5a3bca1f684584798a77472285a21c9c4cc93afdbcb9dd6b5e6f2fc29f36af768eefe1842b5a3a4790bfdedabdf7c10b89789054765a693987c895d0b8a95e5c7657d5de3fbb61df9428e8421ca87f12962c2b190df5d4387389be3b52b49c5034c79ed9ee5b404b71186bef3d637d9931cd738d55244b8eee0588780999dc2fcc2bec6e8cad229bd5816562bea44b09265f6fe3842612fa88d6fa6e96facd9e99a541a3835ff3a8b3ba0e80fadb7435572b68072a9a8ad20597716c92e6ea949d9e2eecfbff323c18a4b995f8e9ee9c2ee06aca2ba189e2b111b91b23081ed6186f83603340fbb8883a6d030809ac89035140476a7bfbfc09032c7cfa15276a5dbf1000dcea1c340fcb3860e02074156dfd5aaa0bf633b0ffcd401f1896320950e095cb4beb7df38f0043dd622f112c400169c136d36ffe7283e2404f89b3770170eb678288425a4650037b0e1337014dfbf20f941f4eb5137ebd09024057c9266b6c34731539ee8c237c4b2a19709d557f62850cf2b74348c9dc09e0dbd3db36c1191f565362a3cb0b9d4a60a0d81056f50bd100ff2dbef99461e2f44b78efae9f18e071fb21c3820e719cd5946c930fdff06bf4a22879d224c420628150ce6b083559c126fbedbc018f13d35cb0b9522fce7c01a586de13d3e499b63e93573777b368777e1c7851b67f420511f0a0d8be4bfdb5792761a161a61a29ba9ce11372f10d0239db4e33a298ba7426bf85c9b858aa8fd3a1891c1ae8f92dd92d4cac469401bec7e1d360228443c02b4c1b4591afeec03c0349f195677b3bbb4fa13c9dbc918042e5ffeaa03bf6298a3a24ba09728a46b668e580c07193b5c612a62bd30b0bdda2e5776b5d45c18f3c6aee935c869af4766277cba68cf09048570fbd4704b318ea80d28d43f0b406ddfefdbe2a6461adef128b713b146a4897aee3d5b33564259980023626272a92d3c68a2683844d9db1b4af91bc0fddcdcf7921dc256d660a4ae2c27dd1a577c78debdf6bd5223b38b738ea47c184d3e5dc27c84cbd6aa4738b0de47b2745b227e46767e3584bfbf36e79f2dd48be01e503845cbac6e9b5390d6cd39706b5ca39d2454b0763d505d94c89100689ec2a4a9a3977f6d21a16a648a949ae9f0c7d8e71f27295375f0840f306de9bb49b3fdee7c3b0ff7dae024cb0684d12c9c26dc409e6263892955f7b2f442f02b242bb32731b607eadea090fdadf84a6e27875b2514fa76aa4cf48d7bf37d3cc5c86a66f9911d4c99307239f29c54bc2a3e5495cfce96d26c533ea4a85975d40f2aa8ebde74faef0d48ebc8d23e8e265ca656c6d4fa599d138172c51c2b5cdc1fc944af80d365c57a84ab9dfd8ebc13e2fe4dc8177ea62dea2ccec5fd78c7abdf77f4a0ac567349d9472ea8061e3da833b9151a0660718b9fe094111f64daee486d78c942089aa5bd02f853c0f26cd02fe659f915f768b4e239d5029caa05ec100fd1026de507d20f3546e679f72bd6192552c995a65fe49518bd44742e2ecaa2e03a78112c5f34a8a1cc3a21ed25b72ec255be2d1deb8753207f7df7d07b4f2c68ff9a1dc5a3ef86414f903ef36d38c33710ffe060b54e642cfb9b6ee03c7f5e11a3f0b5df99855bb6d40eec6da8585c4b8e854b7f6b15baab2794b8234e4037e80565f2c6dd0ef68371a1cc954ba6897944316bc005ba6b4e8c5e91b791340352db6a9622cc9a5abc745d17e832b088814dd273f208acd09c3f00ed4041d5bb51c0839e6de5043c00b59f4b8c3bfc09330bbdbc7e3c01ad2df4a54e0f6c2c20f6ce4c0510a0aa4e7829818be57d7f48cef16235f4ebced579f58e485f769ba4d240f0beba14f41134d3fb5521ac637ed284ce78f9d72a095c986390065f74d8aa1196a79873289f0bc46468b1a4b9c4df84abf511043a25e26000d2d29a733aba5ec45c2a464fb23c4896a6cdb68c03ef31a196c71dcde869902ce824d0a2af11cc7491cfdb7057c56084b01841a3a4f20427b84d5fe807df52b423107dcede9b1d002815cd64d6a1fa45ba4401096bc4802d0d3fa2f2220a2c29a6210ad1e448caa54927183ce0f340e386f8d572175eefe456aaf99c3b3403da19b080145a6176ca38d7702a729bfa1d23a267948715798ca9d4e597c31e7674a706490833248e732354ddeff66f69034c9f0cd0596711700dfd7302f19bcbe3447915c2b4e1ad65499b7a673921da835dd243cf8808386c79f8c33ce19013ba199cbd959ea0f928f463a90a126c541f1fd50bb6ef920fa0c803745b732d1d285c7d806ea239d9b27bb1a728c0ad12a1c2bfde7a4a17f2eab5f8c5af8154882d12cd5c2c2ac2494210f0e2f66119c00d36ca6df594f949312165e354055a947fe92f4d32f4be5b7c07dff0734eecc652242180e75bfcc5be2e68d7802a93b054ff6317ef90c25545f3e36e2d2b5a431d55cf8d854dfab29514f34faf61f70893fb9e1378233476e8b873d6acc754159a7c8ab35bce23772e6926c7585ae2552822b674e9dbe1abbce2ad54997bbfe4a2b2a0a70d79b21d4012cd8e6617d3a849639306977bfba19432b3e699fc21ab56436e0db88be6185384cea89715afb1998df9fd6dc2109ff2d72705276a7eab6dc771c30e9d8db360f693731f99cb039a4992a4943ffc66ec9ef9fd7489f4813a73aced3e5b7543f57f3932773dd91f48fa0f4d6a26efc9eb034fc603232b446f0877034037fcff134372b6f33dacff8ca435523c1768fde139a232102968f66fca731e896b3013f8de53f1348f242fdfb1e0c7c8cb60585477e0bf25f94feded3af328a322635858c15e9a04edfff3b490621d5ad6cacec4a38e440072a131e6f8955ec341016684ea78e36f19cd3976c92e5cdc4a4c1c7df93ab0db20b0012bb54e5c3ca0947ba49eba69a261ca29d1f41d98f0dddecb03a3fe331ec9b400e1924901ec1513ff150064c48d4f370dcf440277a29b6d728b2442630262dc392ea3d2bde5f7df55a40e8649b173944a3fcdc011a237ff638c631aff0020effe64c70470cf0f62e6d09f9bf0017adf38e84d38fe7ce553f8346a9447d257cbdffc3a4d81ca7f922cb14cf011e55aad735b4fed80440becee6b8164294876109795e0293969c52151f8041a772ae53a82d2b2d25088f4ee87b48651aaccc7c565d36d50463769c85d053ac83b489e84674c0835afdb86c28652447f4aa7a961bde647794de4a3d9a35c37c56518867ca189aed54880a0e84bce641f8af9fcb9bd99f1717f1a28120c492544471d03d12fff2e06d28d01dfbae2292cf44a7b788ea444877f7b21b845b39be0b7c9e61b7166b94cee1c2ca7c02586f3d88a2aade0868c8f6a1e8d588285138e791b55ae3c129d27f72cbfbcc13767519e710d71c0d670f579722bc40daca618a2b6a6ea4c544486c71934004d0d597d970b4ece1b276a5333eca0f8bf43906d7cd02eb8e0dabcb46040802ced1c5c65ed8e15ea234fe9ea021b17590732b5afcc1a88f73fc71ce69dfbbc6626a2cb970d10456cfd0338594ac02002939336795ef0ae89ac251bb2c722f893aef550ba69855570c99310b0d8580d989066a56ca99cd00ef1751e49346e86b04010a60b9789ad49cd817bf522d917318693d5618e6754932c3e70670672ab98c01ad2b0103da24c4753e1a42a700fc13856394c7956f803c4732e7ff98ac91454e93eb028075b8ad29193da2cdb8d67654185347f5a328206108eafea57928438aac8e08742402f7e258eba7998c5dda67828c445b333e5b675812f7949d1036c4f4950d30b591fe060ce73a8f6c64e42aa134c1a0929bc9749f2db3511773457cfab62cdb388b3cd825ac25023223ce767fb973ea2b3e654f93f66e4f21f769d4d2ee5833001ec8f1f3520a470adc626d7727cf22d4a199d9ad3b340ac2cc723b35f542f17c0d26bb9ef30a35668d7951797619a08bc2cf1f4f2a85e78e709af3a2cc8ee9fdb50725ed1e04ff72d9a2b237584953d3f695ae95b30d01c89e339505d09adb7c6c08ea0aa61ad4d13261963592678079dc912eeef177f3e6c500244e582616c95c741eefdccc81e801765bce512b7bc678d2ec0c95bbd61917b8e86594852a7c72a0064f4b79fabdc88af5828db43cc707fa2aa8c8a1f9fe73da2f95483d6d5ce2f43a99a95e2d5b2f57131ba9f1b8bd20c562b70425c9a0508a4285b096fffb40b100648a7f34b65d6b1755d97a375692a3278de6226cb7bee6eb31b66ef4e5a3bd978297932b622bfbfdfd46c1af5e838cbe0ca23382dfc5695b91dbfbb928c3304ed056ad632a7bce53603719945969481caa456e4f97d4525c259d1645ad085364a0d01aeb828fb5444ef7f777d546c41f65c24c954cd14ab257817a3df465a36b360f8fb592caab1d2746e2631c2feb36d8c64008c3600e0592c98b35c704605ac5c7b5a81d725fca09c3eaab69bb583b4d3b23ddf50c3e10a2a732f8cf08b8a55f289aa471de66b2fb9f0926644997c9aea0c1d216fa79f4c85d917e9089812bd5d8a33ca1f054d0949647a304d1815fac21af380e92fb309527b1c161b61eaf024a12dfaae42a1d90f0b46e9c1013e3fa705f5c3c27a15f2659ac6ecc4569e91e028e065c3ca083476db8ef6c1882860851b6636b5c3c622a8fd624f35c40d27d3e65b8abf281791b8806b14dd6b264c390a3beb462eb39bdeab2425ac4d1e1977f181ec02bbb30fc48b3657b83325499b6423e549f3ad482bdd7d75e75c1db4c65b011ad678061a4464d9565c3078a2df76f80a30de03d4208cb297d8c3e0e06f58146d7b4d0a69ad344fe38845e78da54e58f020a9f826965d00d21e0e5b568010f4e9a4e2f3a196b228612fc47f3d21c238a1e65e99bb7cd3d5ab3892f6fbfe8e14051484a0b0d0ce235ab454fff44082e79743d8b7c476f0707d6a3f1884345028d4667e812cfd83a8996325fcb14cc3ced05fd5d43045360b2b127f951d703ae2a402e04a216add4fca2a3096e7edf379d20ef37bf734b8546720ce30a0d09ce7b747ab716e7be14f8160f3e771a649d8ad00d258fe33f7b08d56f94bc022583e3f64b3a8eb66c59095161d4c02ed86d63507069bee24fda88756b26ec85da2eba9a53e6826fcff49111c237c1b26465dee1e62bef2e8a7e927f5a370541781f4fa49c88f8f6ba6f56888f608446d6496c662e02d5828a7408b30f0cb71bf177a0c698cea9bd26ef4189fc73d41e54e0a5ddd6e7b856c20dec71ac8d9b23df13a75dfe25d0c58b52dbed3635ef6bf20eeeff41ccec6b0432ec8d4f707790e39e596d3d570977ff8dadcda20ad26523bbcd79ba63c5a5456f8f23939c8866c9c38b039420beaa0d8a8a4bbe66f1e2959bd149b203e113cb8f675063f8eaab7979cbac3b3234f3b927f1165ead81082ac9303d0709e3648e2bdc883461ae58de6085e8fbe1878fbd80dcb4394cf3f1f3dbb0202cdcb265636b5fbc5060958c5c5a054713df91c52ab3275dc04edd9c3ffbe14f073561891609642c3140055c57ec927ba6c6223c02c179435e92f10b0576aaaef6cf92acf89cdec6fb9fc5ba636d049aa29dea6764b4289b201058bb909a66d4318e62a98bb3e175f06ea8729c5ef5a20cf3df19040152e01caf97d3b61fae8c964100fa4276b252b4c20b9662ba9c10632a324d86f478a57c314222169295f5c86671d7ccd55875f742e6b222f63697814e999331aaa54e53355c0e3c3ecc98112bd4dc5332f795968bcd3d923901973b4704974204b88451fd0e562e07ad0f301b282e2b37482648f50a1383e7d8626c592e0ac03843afb81ee5334312d0bcc84b5a0de4c1b1cc9735e24c96029a730c107094261429c5768c5be27ef0a920640fac0cb509fd8cced16078042ad0add2cee705ecfbe2929425a6908204c0ff23c9c2c5860d8c68cdcf6aad121c9d9889caa206cd290f535735135f7ab3e99fca85e7e32e02555cc6054202f643e4b795cc6e97b06b0ed791660746046a618badf89c3cfb57afe6cff209679d9e0917222360568520e96f37005ffe380a11dee966e501d73869b06ede0496c2459eb866b66d16c2809f5886440fff5ac567f02911cd5f0262cfa5d6998e1b3ab53f302453e7b7c748fdc63121a92a20787c0a58644a8d30abf25935b752378baddc87934d9822c36fbf38ce7b12402436c551ad1559470d723c27dd539472dd0c42af5cf523a134143d0f8f1c4174687cc714eb207bbe2a291e74aae84316f742d1ff2bbc4e5c98b36e77d2db12595c90cad0d2285b6b377437ee8018fead9568f30298821847520187d8ef8561dde9122f408bb90e3e3fa53cad83b249e0b4b3c06874ecc3ab1a3d9b6bfbba587b611db2e199627a35b37a2a7dec61d8a12ee3d21730afa08f786b30893fda642993f805eb052aa97093256300f31408917f5dc13a92f27092903dd62c3f184ef6c9852da061d4529ce97703d197ea37ac2c7199c2db9c3397b6739e783ee5358cd203a57f902519cf0e7f8dbea9418de66f112f716de0c18a9a7a50c8d56a0f0f80e5af1757147d17f1ee67447e17c9d024d7a94fc109b8f78a2e01aef92e087c0358f1590f76435e4cdc7108d030ac0d7f7b0f09ca3b843d5efa5cbfde6eec66e0e33a100df93982e4b202f6999c619cadb3da541c1a8b4438b865b0d98268e1c5b26cecd4c3e9cc7375a3abddbeef4ef5e94ad31c8ab0224907adad35242a1b5353065b95add6fa275260947463e1150741672631c85c91a10237f2b8fea2822e3901b97d622a1e5c7bd5fb886d099ad953d521f226fb7b559d08bacc36f842730cff4b92ac79fca56ba4c0d69068375fdf26268b086abeeebdd7eaad07d54f6b746802580c3b236e6c6129ab208d7211528ea8eb8e5d21bf0ba7408f294c353a583ce5908c7fcba5711c0ddaee4b0c6a64631b67abccf1be1922a45aa6ba943bcdd02a3815a64daca8601c241cd403c775a8aa43321147fd4c76b99f35c4de993622a483d27df7c35e7bc12e67fcad9522ac60af2ced1d2ebf8734652428c9d84cbfb7c844d09e42aeb7016a0adea472a3bd5b2c5fac440e8dc222a31ee7cb889c17e26f41bf022a13f65e011bb3eef3a04a38463d8cfc46c9a549d8aa49309f958c6f601fc36ee8d7e0a22b354f84b386844374b67a2d4ff5065753d1a1667bdadceb6fda186079e92d72018a832dce5bc5ba5d743829ead95a8e9d628cdf2474593d75a398ed855286e4e5d78580db602481232c44e6bbb7097830deb637c3f24e881e6a7b51c1ba133a08af14276067e53ea86c99edb44b0437532d58d57bbd16675b16f4d9fbbdd21c3e51e1a2b9169deff674e35af4765de7ec722ab6b64a85f8cc8d8a44664cada3e408c50889dbf9953468c7846929f92d571fa775484f81b52265e5c0b7d944282d35c7df8bd502325232488775d8ec88689afaae21715a87f6f11163cf588b6ce8d438182142333655cea044f280f1108fac48d13c2e71b691f27a452c62e18c957aad95f251ca2553e25c2f44d98e7a005e4123371013f0480e2e6a01ab4fe4dc0939fb4ea7b0dd204ce38ae8ebbc61f0ef079dfb3be66a8d17175a39311304b0c5fad1ee144cd94a334e7e902bb3d388fa5522bb2d82c1b57878f5f814f2cfbe26dd489d3afee9ca518ae55c1870ec4312b3f8f4d7d0e0a1255e06291e7986a19af044430da49688704e3e8b846074ba5527a2009414f3ede1eb6c605179c69c92456ef6b53dbc19fd0848c89775bce255614aac585b02e73c320cb172058507edc01f51ef4b9d0edd4b30ff8bffeaf4cb5d1ff3d43cabd259ad37e9e5c853a36339cbc9987f1470666301e8432886b81bfc0c3093efa9d824b1bc22c4e068546fd65eb84a34ba51c2281650397c814c75df58df94db837b657dc757bf72f206d4779a8ed85fca070703c97a159eefe056983d2f2e39b27cf03bae0cfe3f24a8170ac2e4582713bc8c402f77bb41d79c122db1cf7b226a23beb25cfc3b5a3464fa07e9f3281310eb4f81237bf5f6095c57791e72234fc805e662f6949c0eb525c5191942d9b06516d648da456dc6af366edc2bb9542d155cddc8802527cd8b4920af42fec56caf90959e5a93d377da03acc96fd42ec8541955a89f20f924c18e3453aec136c011cd26184c7b9f9c7928253f39b18923c3141ab74816af875f090d0a4fedba47c0620fa5bf5df4b7660c8d638fc4213dc5c293618a54646996b92e862acc7c055bffb6c3b3b45be67f2d0d572053aece8143c3d6535adf2dd0da48218165a5462c0c986da3311feaeccfa3f52a395c76b40ac61cbe03cd0cdd8da88619351214cc631a1cefc87aed3f549ce2483ef7529f022c0297ffd9589ece5bb6151af093eeb2986c7882617afd6bcf73120d4addfc6db879b07e3465cd34f562dd1113dcaa1110882ce7da28bead727d470ce920e88d4fc5df90d3463102936d827112a9f47efa9766731e26abd94944c4699e1cbe9d8e22fbfdb98fa7c01a44991acbf1480f658d62821517afb80bd6442b18a20c6df9c480e0055d858a7b028bcd64a67b3f17b4147c3415c904a2ebdc0c17c383c3d9309654ae4b565f54d9d24fa801e822487aedc86049155e32fe7c26c7ab88fd583a1e6038446ea362e2d810f7667520e9381204a6a890c2f8c95233fa46557c46957f264ae54423e0c890c15018f160d02e9204d81ee8075ea8d790c4003e945971074a26e1eda37db50e484a121ad2d3ce24ece1d757c9b2cd669141b4e1ec5de827236a37ba5cb19b45455feb03338a268ee92474f9afa47ed171182663cf5467210ec18dbcc41d4d8638955725f01aff0044ba8c84148bbe6c440b8b28de47012517e313191e1c7a7d5395d3b53d83e2aca30b192977879f7bb0e101e3ad8b052b300e582d90e2b01f332a942eb9ebdc6c02aecab0cceb0b04715c91348146860725bfdc1eaab34a6df56219038c1075177f04425e4c8db403a48dd08c7c13577e90965afcb15478053eb9e25d18214c1a1e997a5ab62e389346922c922e975b25e4126d2079a3d06f6c10cbf5d230a71210407c9c00a81117f8fdc2dff022d0bccdad36781b33560122e676e77f206b9c8566199e12221b210838b89ffe03d86676c48c3bb0866e6afdc9825f7f9e86abfceb0244529c57324629c595a07f922224809278becf2d5704612c6e42e23b4332a60719fa1a75a6131146fd1a897618591c4dc2b1b8452076ba88aa72b5a1982478edc3ec5419a0d652860ae33a81de81500b4a4150cb2df2104123130cc524d65d1606f3242609f3cc6a92ac9ce3219d01e0d6045469103221375a0112dd2bee826ce3e877655a1b52dc5142ef16e476f6b692d9edd7330aa1223eb41f4f3fedaa20e1027ebc51cb4d01e958d8979b83c8ca262751570f930446e87983989dea0564078b24c01cc666ce25abc22f63a58e448757d7af8112a7679357fa8abdae52859226947ac46e815ea74ab592b5de8cead243dddbe0bc0b66bbfde1e73ca2daaea8fbf9650e9194380eff097c268b4560db9bfd9158d8739a9c061b9f85749d6d9dcdc7d446ddce05a1e21c3d452267370d4864f261f11e4103154d0a5ba8ddac37ec265faac21dc8d7ebf5dd8e36b4f8ebd171a67b5f8d05a66ff8179dc9a9f8faac84071d0b99be395e51855602dc9faddd0afe12dd09533e2720f7fc7cdd43300d85ac10b03b5c8ee2440df7da35f6555838211923d4f9516c7722740dff5cff2dcb60c715b2b48ca861e4ea5f53161345782be6887df22513246b3d0434ca2d5131081eb083a0680dc043222ef3675dce664cb02e4fa2231f31bdbd9d78255c4a5b6b33e951daaf717f23e10abe07d364cb1437c826130c68ae40d4f41cb019aa340d586ae690c0cfaf365ca2bf314d3385962492e280182513b2308b096db34bb47491bdd58804f2d0d2f37db3811161c260d056168d2acf3873e99ece528e388d0102cb00ee7829857128df4246469cd12e2fd68b0fd7734c34907e3af2e3f6a2d9dd8a1e47f9b792211535bc7555443dd7e0767199071f6b51c5e9c1d38160332eb82d9c72818ffed59984e7e4e0ac1456a0fcef7ce991a289aee9e74dca8279aad28c91ba11ea95ae3c0b658ffea65c35ebd80a4758856d24e43a6ff091189019208cc897fea503c8055db31e58547ec489d98cc07ae66e46b4b50c749fa93ef308a39259690de767db47af1af6cede416e828894c6e41b5e54c42bb9a1411ff493edd4a6f69d6e20033d4bb075c093eecae949099bbd37d51c8147b26ece8162709ec5ecfd4827ef57f0ac035f5520e607d367f7ac644645302d167f660ef07c850c23c395f8aca528dd6a3a18fbf935602c43a3e3637619130ce4f2fd12a6341789cc0144f331be019b9aee29e8a93936b9aaee2343527537cf9a73b54a34a9804200441dd4459d3550108baaa9c7435cc5af65dbc3ec446fae49552ae44ddc83c0a0b3eb3eb567a6d9b801a3baea87bd260ee45cf25e51486668bb6410869ece4c5c27c76e37a230ecd6d6c64fde0e832a43dd53b3c69b33eb5566b34b9e9019f14a9829913602ca3968b213bedb80dec3fc17038f9ffc1e59f6987e9c1fea985ff4c2b5c72819523a568f98051491ecac24feccb39fb7ff4455243d4e5047b69c3855aeace6b8d88a18ee105f4849a6faab8e1818d37d3eb3b1aad0b5240109740b0400888ad6f6c91df13138109460740065d09605baab747248d5acbf76e02afdbc92ed4d10bf7c669fa55a3dceb819b506a13fc4982c035dbea23c1409c70f4ad3ee4bfda6540ba3969b5d0a3eae16293bf5679e146b37d145204d2f8dfdec513299fad4c9e9fb3cf56587c90b228cd564aaa1a52978d2443bcac000b0ff55530fd35bf23b65c40016827ab1f6ed467b65f7058ef8cdc99945381e31191e386d73c120a6c378cb873e1e28c659e9db322b09fbcf8b1465246d18b0600b3dfbdcd609cfc73a560896bcdafdb10eb3f2081d5d4aae327a136ee9dda0610aacf1137f6840c4097deb42e0c30782776fe049c39e935f960c5584d9a426bbc10d30f5d20c29f9a287e2c3c29f37bdaee03ed3f5bde7169c3827e7426efeeeccc43098b5f6d2394d650a1acea8fd93b4061ce6815bd4a7e3b231513e994a0d359dcce6cc8eb2bc1c9e57758b07682fe4fcc036612e0de3c57f4bcdcbc3869c459c515f091095015e5a44da82755a4438d208b97e68634e4cb2f9d452862edeea4c349a1db049d75a6520b0cad3bb7efc9f38570afb5dea905d6135112fb079b6f27dd6105d8f6823d077e1eeeed28bf60a1e3cd0f006264c96f73b95c82b01c91e5427e07fc70dcc1f7cf4c90b54fb3ac506b64411520f0b96d2c14ba7f306b8d0e8354d5c07add662e79e98be594386a5621170a1fd6b3853312488a2178e4793c9d2b675b0b141c1fea1f91abd458fb95a5426592f1624cebd469d1d515b93b875b14f8149398ce52496e3d4ddd9728435f534c365076bdfd1ac6a5da7ad9162efdce6348b5a741fca3c4add7387819e290a72caeb054a8bb1e2099a84d580ce82e97df0cb09035f64a666749700f88eea3462bfeb7abe06ce5a287d4160a5bbefbce37c606767a8c8c25002da7cd9930c397abf93e0340212f35c4ba01c4b63012c7963addb82df3d62569670b405b06c2e7eb88da8c10f02bda5d35316bbb049e6b676793ad48e27e848e1848e17c71882f6da7db1bd1db0c2f0bc7c51a45fe59971192dc0c574c9e2d292935ce73ea292a76414aba199a4f2f00f230ac09cd478698eac3a69f1f022fb2b42517d0113c5ae94b037a2e9f050a876888a91dc97c2a78ec52c8df605901a099dd76335bdd8336df0da31fc6e31561518164a806bdc593f742c00afa8e3889aaf36c106b2465ec4361719b91221db322c73080a590beab9001dcd7966592191798eabbbd61f3c2cec45154baa758e7188f259393258f423848c56b0bb1a8205b12da1daafa0c037dce5278e542e0e38a04965c5c5c583c0894ad2a9e084f5fd2ec4663e073f6297f804b8b533b38f18593447d09672c7f9baca22196839091eb102204ecee41a0cfe5ed1c9b231978624e0c38ee8e0fd7f12a85dfa71ddf5b80c150d0fa7c4524653ae955e938c7758f964c3b5a90d777b4a658e5878d279987ed7bd57eabf2790be3b57da12f63c8361dddf80546b056f37441211845f01629bea494dcd50fa9f0c14f9152054a91dc6fa74b106d7c2c61dba1dfb6aba2375d32351588dea5656cdb6cb0338743209ed404c6751bbb067d21325a6031b615b2120e3480eb64406ce5fae990f4b62ceb8d3368db81cc42651799d83d531628746c3f8bbc2d88791a6cb442d3d8e60ad8f9cc872ea3aba0232ad2d2dcb3d63c85422827a5091ccc3cfa056d133c71c04945b692cadd5c8440c72be5077caad60c59dfe45dfb254712193f838bf1ab71c95c112eaf738dc884f5a99eb98337922945148b67a454b3e79402369e6598555932d2e365166e70a601ce0e3351af33d8e11b6c1e28f190bb0ea34623e8970b5fb9898553e8abbcd06b0aaefa3b556ea2d96b0abe85c46e22aa6ddd4267cb8796e04f3e5856c6dbd739d4314ee6eda30665e3b7b04439c029f55dc9ea5f3c58ca86f16f2aa3d79b6fa226891ed4fb248233794a8a760eed9e3871435cb3b3786cc1f89c14e32b498a81136f6920c2746d7d8577f65a8a0c44c02e31067d96c5124d443ed88028e83ba89ce472a508ade713f0ad6b35a1b8f41d2669c2b1c4bec32d9589d6114fb4c289ba483fcff7dbbf4eaf362bef8328903b48d6cc6a351ed6d5604361b7b5aa2b17d4a8fe07a2ea779799f2d8c30a932cf22a33c3240b60aa0fa476f91edc24ec74aacf53fc01d202723004f7fa84f431c68bed618e4fa2ed974f2b8c48488aed542bfd582e6087b0e65180b19698b31129155b86b0ef2a7a13cf5a85d3bb71cc3007aa1c0f1cdbb120bd955552b28781be74f35f8de369b63482b4c756d5c302f34f4a9ba8d740fcbad361b1506533979341b0977e37dc4bc4e963fc038c6da592a64396b3b7a0381b22b73e52408c6696d46ffa4864147bf27bef2ab94a359aaf3b8f32707f077b844032e68d3088b5fb45bc2b416699f14d11c92068eaeeca8fc9e4bf552f29abdb8047da102f3715824de26d14792394373acbf063da552481d932e8d701753c30a0f424b4e5c841dcda35b110678a39a2fa7e5d857c4517ae84283a87616bbd8c6e238eb9f80cbdfff2d6c7f78c3814ac32843e12312cff92280c5c82755370b5df1a4aadba5fd44da55fb812d13d96aeac53a0a0eaae6f44c0ae0a9ffb8c6193443cb7da6316bc7ebd8af0f7b27fffde3e8ec32386d0ba452f3c2634e86ea7b4dfe383aee290d5e68a277a3ab7cbf5a554b558994b2010326cd56cdf041d7042d2c0a1818224f789abe2ad7dee798ccc273dc6e4d3c9a8b5a431f35a2b639c1e1d0e868a2c8399003946dea10878f06ae044eb7c14b8b6c813a4e6a05c2f724d3b07035dcf201509bd80cf06a5aad40dd4a126388d8ade50192ac2150f51232dc4d53a21561cf5a3c0fd9dcab822890183cce39cef1cc7c6cfb5cbfea5ffa2a4cdc9a043e8e09f152601fc28d41d7f97381dd3f33c01d90b63f548891ed802bc4afdaa273cfb53ac334c81fd99f07b44babafb216b52523e2291ad10147899bb4f7e55045f93d1a7e22d168a3adabef2a6ac47f54d966c7961fbfcb0fcada811a98e01e699c620c329b4b903ca449bae57208c4a930ef5d6cac3fabf796d07da286b235f95a715a7a12fc5df920f6d3dae7ab6ae76359bf6eed9ceef0a3137bcc269938c36d0914321810241958ff2cc35e11b1dc9db140da0935f8208fb93bd37d9724b29a59432e50a4e0a690b375c32807f4e03bbad00f736e846b6e79e953ddac959d9239e2f9528bb911149bad76ae24eceb3faceea73d9713dadea73762023d9bbab6eca1ef95cb144d9bbabab0078a937f0523cd24d7df622497658a6ee1c60f4b9628fc2ae4a948ff85ca91b8c3e5702e073c5040370b034cbc1643fc7284307d97f34cf1a2b9dfc3856b9f8dfcc74da188f51881f18e8fc473b00600003cf179e2078ae2a2efbd7814962ff515d244907c2f7a41aeb22d2a44105170009bb3e7b49abb2ff413ea0412430034faa3b397bb453a5267a8d743236b593fb9cc1184631f2f1fd4761473eb45890344409e6d56824d0bc9f206d879e0f94edc8a8883becead1fd47c35963658f139876d8a563876642343f3b641366ea23c44aeca9eae962a4eb4bad3f0c99ea2b008c4960091a105b2449b2f0f5e083aecb41075c0dd8526157ada001eec196aae24a0d1843339528fb14579ab5829206eeb00c0f7d82fac27952c520d8dd242157f4c73f8d2fe0e42544c8cf0fce4788e7203873d071b804ce3611234284b810f7f172620911f2e3131302de7658a6878e56b1524588df6c678d7c18c56eb7db2d47a5680e0463b1b1ccc00bb9390882b7dbcd6fb87443ba00f49bdffce63c5e2281fb06fa0d0463a0f3cc76d855c91bc8b3c1b00c0ff40a962b335d3beb37c7a17f1ad3a94a663ae5854edf0b6737eddadb248e9b976478bbc1bcec5158a612e5d0cc672f79be3ef7844c9ff7793cb4aa4b95140ff31873c4b95585cdcf2d28b09ee6ae8a34f1d3966a0ba5d29fd3d761119fffc632030ff36c2d08041d04c16bf1c478ce5bccf3a40a7adb4b6dcb04323f4bf19f27551c7e0922d7174a8158865c7786b392e152b743bff25c5f9dcf9f45318f6058336dc5e7359f7d4e0b26d551ceda7c761956c5e9787659988ad3c0b3cbb2ecd1033cbb0c4dc5fd7876199b8ae3c0b3cbbc2a4e876797b9a93823cf2efbaab8057876999c8a133dfb2c57714d9e7d265571453cfbac4ac5c93cfbcc4ac511f1ecb3a98a33e2d9672a54dc8e679f5da9380c3cfb0c4bc51df1ec33aa8aa379f6d9968a0380679f55551c12cf3eeb52713d9e7d6655713f3cfbcc4bc511c0b3cfbe545cccb3cf82a8b81e9e7d765571a0679f81a9b89a679f61551c0fcf3e0b537105f0ecb3ac8a3380679f3d3181c8f0ecb331d3820478f6d9d6c421c0b3cbb8ec91079ebd94757d7699977a0443237e55dce8d94539157700cf2ecb55dcccb3cba42a2e88679755a9b800787699958a4bf2ecb2a98a7bcf2e53a1e236f0ecb22b15c7e3d965582a0e8867975155dc003cbb6c4bc559e0d96555157781679775a9380178769955c5e57030a52c88cf5f4ef4aa381f9e5dc74dc555e0d93bf08cf3ec62aee28e3cbb28557148fee954f9ec3ab98af3f1ec3a5215b784658f402e2b7b144e81a9b8249e3d765571ee465fa497a3a975895c2057d6d497cf1e72555ce8d9c32e7b1452c5ae549c92678f61a9b80c3c7b8caae214e0d9635b2a6e88678f55551c93678f75a938219e3d2c53719e97b1a9e7e2e2e2e21af280483ddcf5e947c321453488cc70864b4340108481a07f5dd775b00c94707c529019d30d0c666803009e54bf192e59008487749e1f339ce11292cf90c9d2918f269d33d5f701c11a3e43261e9f0d75f80c67fcd89af584cefaecdf57417b0b3d17659f1608ee84202da603f688606c3603d461b4009bfbd831ac4a66af60c7c254327b073b9655c9ecb81d7ba292d98f768c6bc7ca5452c8bf10e4f1f2f2f2f2f2fa62204f1590672017b2635d76acaa92d987ecd8964a6657c08e5155327b063b86a592d99576ecca1721cf5aac3929e45fc007ecf0cb1265d760876e78a6823cc8831c680794b143286651f604ec900cd5911d01b59c90e75aad9613f29c034621af51b9151b098a9e03d73f1c047d41a0b70f400b87d41f0f40c38f90e7c3b8bd6d009fe11235c0a643641782854cf4b77f3d208fed7901c05a0c608c1edb7330e67920e678069f25077d965610f7b7937812971a1a1d08fcb13d27c0acc7a9663278e8e10902816ccf0760c10502e029e1e66de721c6a67fe3f98440006ccf91f8d0aa883e3430d89e1ff9d971147e6aecd400670e06d99e0760875d3b3453c9ecbf433495ccbec10ed9788e034982e1ae3b7c160ea91f8e21d78e1d96f181e823fa4690019b2a79b0c32e4b94bd013ba9ee2f34844226fa5c18e0df0812d99e1b8921eb21c60d59d3f6bcc80ebb78d81f0e11d4d9decee13c3a639863875c95ccbe779845a0b73d3793ea7703bdbdbd88dab5eba14dbf28f488be498bd5609845d96de08cda964ad6a866d11731ecf2b246f5d97d42a6fa21572d53c9ec4c5e227598d32a4e7f3619c50a83f5d9bf201edb65e6d63584864ce37ffe09815c567c31400dfc73504767c606817e91eb0d02fd195e6383407ff46e8340dffddb20d097e1e406817e0e27da20d027ddc606813e91dfd820d0d78e638340bff326223ec325997f5a4c5ec3a5217ad669dd75ceb4d4750e73adf5f769fd7d4e5e8897677221fe4b9b097d219e5433507a9fe15252901906df978295ff2ae8355cb2c0733001f1a4fafdf83e9d9f5b64a6be08e7be84e43564b274e44cf471ee7bfeb8992af0192ef9f0a4faf5d05a6bad4bdaf7e0e1c3176d8a047a7b474f55eeb3a3f9d2e7ca672f3fafcf0e72d9231e2f1b4ed9239e2a4b945d6b51acd5dc49d2eb33c85535f5d9432a7bc4f3c5a2b1473c5395287b7618963daae526517623239274afd5be8454f64b48f559ac3c5368b4166759fbb296fbec467ec3251d5eb4e793e0654001821fa6faa37f18bc3fb7c874f922efe71619abed339c517310ffdc4a6186980e7f6e91d1e253dffd83813cf4785285f1f8078264aac4f0a4ca55e68bc0d9cf2d28de7cd11249f319128d4c2e825b7cd19e8150a0f9a22a864b5c18e01f4d6ffa449b3eb9e9e7d8f4656cfabee98f9bfe8c4df5cf2d2b5dbee826f3a4faf180b73d1fc79e7f63cfb7b1e713edf9640d135ca0217a52e5d1f1cf07e8ed1872c4fc730b8aac9fb1e70f7952fd7ce82b3057a0e8794b5e97f38c8de6a3e0ed7673ea36edf46dfa76f38abb01cda4fafd80b7ad9d864ce8df660afef3ef08bc765a3be72d666f7bbe8c5d7fdcf5f79eefbb7e8c3d7f68cfe7a1edcc18b0a792d02e7550c8f5d96dbb8c757d76a05dc6ac7e76fd9acfaedfc343db99c9449dd80e9b40af3e5871a07b1eb8a995ded48b9528cef08857a3aa38ea79162e31a1731ef4da04027a7b0805716e8d99fab246c47f3e43a619c57f3450ac38d0f56bd7343b98c7d2a9d7f6b47b4ea320389619f84f7b07fe08def2a8a476c5411dc1896f0240a4fd857d4f54b20af550da5ba62c445b1375ebda62a75fc3223e8fc732033f675149dd2b596f545f62232c2447a44e9d7aee615e23c04f3889a2072f259439c2cc9535576010c20b96aa11d81bbc3148801f984b309105143e5481c12ae3c4141fde5465e952a28d1651b40951285c59620d152fcc202147863958bcc040a2cc0c66b07c298081d209d186cb0c3070d1f2840890b885f185092a5ad852c2ca95f2be0430250c301ea00223061b96a640e2052c119c008594eac5d644626b8e54111d5833c507b09298a3450f571c018354c5f2bc5028dacb00409490450f2a5891429505541df012c6d4177296b839c09030a10b15576b4ed0a5e50c0f5bba7c600c1517345c51b4079ae8010d1b1982c8218a2d3fc8c082115b27e842839aabe593228a2daa28f145171a9ca84223cb07d83c1163849b2a2e503e3358435421a60d97276e38d382095fa4d9c2e2852954dc34513a284421a2642bac0d4ff4160bd4a0a5050b5f5d3001841a28a45698e2852eae0b8337c5b4024a08683e1c91250c1cb86491a29a79f20116e69ed7b9537eaf36f1dc291ff1e0354cbbd7757a9c1347473d57af39caab3b86980d91850c239b1ade0c31aba00b2f8ad082c21439cc2b351c603382ac2e4fe27c337c51297db42e0184949cd2672fdec24be9cb330c57155e4a9ff6c0bb6b9c19730556030c5d4adf07de0da40513545de594ec9e4a1f08de3d95f8429553fa26ed419c5a5c84f9f26a4111e6c12f168379bacbf8c6acad314a63464ae4e0812e25bb41344ab4d633df9d40e63ff1389f0ee4f3e97ad28a2bc1bf567bdd65fdeae077ef6ee274ffc2dc8645603e96481e3636f1f7ca281aa80fe2d4da02cc671a6e80a3b4c09e8e4dfc61e39c45b7a80b8f642fe9d7ea3504fad96906711e6dd72b5352952e53c7fc3975d0a747ea57f13ef1afb5d65bb137317a3c8670bf5a7cbbdc79ce39775d062fceb81e517cefcd375f7b31c6588318dbf17ec118fb7c0ba3dec4e8e9c844e7a997d7d644a99e7a39b7be7a13a3af6308f7edd2a53e0445ac4ca6572ef74eb3cf6ead1338c32317f8da844990afb388ba537e5dee26da9d7291067c6512e3abebcd24c8d359448d447d1de7c4413da996d5a96b30cf2fab3b51dbe59b47e28f535ac5fd8c25fd1f1f2f7f3cc8bfa02dfecf8f97f46deeb3837cbcbad10e1e3e9db4473d7cf8741fc7f984aab8a09acf1f9f4edd549ccd670c9fee73e3469f327cde7c060d9f357c3a0d5371a413d9f079c3a73f39555c8f4fbf40c5f1f874fa850641afc020b1473a7c4ef7c01ee5c061dbd40dcea782ed637b0f1e3b369225a2fe39cca7d32ed48a7aa1f9746aa5e2767cce7c3a55a1e2648e137d3ac542a9e8165af5b3c18a8324439f31c8673399b3c8c7677e252b93398b6cee033424e4b61db4dde649f581f6d02ef50b8db65dd33221b7b98ffff81013fd1fefd2bcd0eeb0781b93b67977e6bb2b7e863e2eb43b333fc31fdf42fe51d0b69bd8dcc9fe926d64d2bd927003dba8c4c7f503b9b66d9f9fa0a01f0ffa19cb21f399742fe421d8171a4b9f9149f735071a43b05f1b69eec6a65895a46e6313edbb69984db32a499dc6a64f5492fa8c4db9646cda5549ea23f5bd291abaa12a496d6319f536ffd9a5f83f3e2790219f1527e4d31e1979a9dfc77bfcdbefe31534daf6625068fb048d7316f98ce58fd73ca9864c3fb6cde340fa67d8f3e3c3e349d5673bdde7e9e1199f689b56996d3ab5a90a9b5ea924759d4db16c4a55b58918d9b44b25ada897bce95525a95bea3a36124b443dc7f6c012512fc2b1bf281b15fca1cd0962c85cfd78f172e60a285cb6a8a29e80d921ce074cb0d25203e5a3945a6ab7c484d91253460dc538e3a0206a410d0a9a5d41d48ea5f865d0cfa80eeab3ca6ad79151cf532d2dc2d8a79e84daea81153f917013c3533ba3165cf7bb0730258a5fcb5aa9c3680e0a1b2c944d94356fd658812f5ee365cd1a306b5e5033a7cbd39eed080fe6c1d4f030678c9f5a6a4070611fec534325e8a7569a351ff881b59f5a694e9066073004c33458b64a50f52ec7da0bae74180b63a017342ec474623a68489873e8a716166bae8ea82362e125fca985c514588079dac6628beda716162400fdd43ab3c54eccd6b4f3d6636fc77204d99319a5345d549a4e8abada3addd5aee69cb3e79cb397363ec7723fbd8ab9e69c6bb655be26d3bb77d28fbfce6d4ce81c2bccfcd4ba6204436cb9cb786e590ba238ba4f0bbca9e3faf5711e7dd3f6d74b1e7f77fe7a69e3af9ef7823922d920429c5efaf81b85038f040decc0da054648317e6ea520829ffdd4b2c209cb440f1569d9afb5d76deeb1f34aa1ebd5a0c6533cb5a0db73c1145c8b459a68f3c4a3db2a25d779a95871d6527bfdda3bef9d9347accc404d43452bdad108eb1fa67ef36ae4034f2195b4d6830fecdf105bbc696e53a94a9400d0bf11aa868ec294a6d2e7596ffadf86aaa1732730a5cffb6e2c91fcb4343c22fbec9de75d4635cd86dcf89975d6797a3596ad5425f514e7c730ece65d0bc29efdc2fc13715062c854df89c94b9c56e6853dfab6fd6f3f5522eb783bed4c1ab5a0e678ba9eefad7f3e20de431c10a733a911ab4f20b05c0bb13f395572d32a96c87a0e69ce4a843d14695d1c9212e7173d7eeb4ff887889189754587bdebdac03a1f363e54f800215d8074c58f173f5dfc881507c6c2254c4ecfc9b7fe65bf4ebb7ab415c99dc31cc6c6b3b690c9f3ec7a7b713dbdb377dd075af0036325037258431ada10ef581935c377e3f58ca76438e4a65871f45e8bab75da11583e621d87f161a755bf75ceadeb0671b57eedb495d617a87fb48abb343c64459cd9695d76bcbbbc4becd8afd7c7d573ceb9e2ade9778b78e1914b2b0d373872dd0877e01b92a25ddf4f27db89cbeca092ecd833f5f2cdf9302942fc0043c054fac6116030d212596d7f90f646e843258830cfd8611bca094c09e645f000669804e6304c2567ea1dc194e33d4faa772c91bc07db2592d76e6dd7e4694faa9f57b5c5a586692a1f78f3c2a52129e2fca954c54b29c5bb761d3b08dbb6ea4a5730cd237234c1f2e85d1e62f4baa31aca374465688a789d6affe657c15cc4d338e30d7c432788d9910c4d113b22389cb7c35d172e759a6af7ba6d0381c8f5ce3598afbd73103010e3bb5189ceeeb9dee5e74b606191eebf333ab010c6c83ca3030b4abcf60fd61d81bd1e61235849da559c9e9582f49d56497c77f861abde4237ef03a2bc58e8c618b4df7bb30cda3ba7a106517f6f94938a2faedec97ef62243141561da4859834525a4f31a6a10e58039a790aeeef07954921d843c6220c60f16aa46d56ab17ce1bcfef9acb8ef5bfac2cfb58395a4de79d3501551c9e777688aa8447b79bd2b616e3754e84e604ad6699fe7b0081e000b4ad667c8c14f98333ab010e68c0e5794ec1095a129e2471d54f281e5f7c13e368e2592073ff7be927abbec5c8f228d265e153cb4220dfb753a2fbe3ec7d26fbdd629b6b8883ef21d9eb75abf7be88948bd09e67888d17723980576b1e2a66307c379a98bde5daff4521b1ee94611fb101411635cab7fb4d6fa97de696365013e8f0ed22128b4ae4f5b9fa3def52a2c833cb1f7bd9e49f721cc421dfb6108f99bd0ae0f01fc09a409cd3d93204fbd49cc3d75b089091d3b1445a4decd2bbe8987229ed867fe3088ad27d91b1ec17e7d088ad87989e4bb8c5d775d90275d3824c711df5df1ddf58c4771b469be496752bd5b577282955481e9ea5a2fc860105fc618e24b0a5add56cb25fb77d98853cb0a2cd5b54dc2a4469c5a445479d1fec0fe372885a251d656127cf77ab1a9e4f43a31c618639f68ae994ace59ab2a39eb96cb759fc80a63c1d8ab3058f7ea06f1c54b972a7a311e912cb117e35a31ae155fea85da245eacaa2a39b75432d7ae3efb57873820d2dad4a005b57fde06290882e012e89d02c0ee2b8a79d44d59a26c8f3a2b4b940f502449d60f0c00e06dbaa96eeaea83e59061000e96423de3b9c5747a883bb29e231f460df0a0bb721f214c3a703f359a054943948c745c449a34a8e002201acbfb20192079d79797e55929c043c3d5817b2885cf9bdfedfab70dde62bc11cb9eaa1eaec3936a8f2d731da7b92ca97eb4edc38724d58de49f0f9fe1d29127d50f692701e23364b2748133d1afc0936a9327d52fc9c6c03f9fe152114faa3f86103f0cb63b00b60cff2e88b483f80703c12dc42f071ed7a9127a456cc75a25efbddf6d11635cbb2c7c3db4da8b73a73dd80786311d5136dba1f1f4d47e806c414243317c8f326e3368d420896ce098e138c2a51d8e2364b2c4c399e8cff87280b3e2807cfad5a048f3e003092ca9380ff6811ec664331acfc554413e857c0e5979d93ec72b1f221b377014e5d06154834dc5913e6c4f6d864fe7a0e278f8f40e2a6e470fa75eabc04b7fa4232f8d1ec88fe93ef69c648f7156b2470f1e3b6e844b338aa4c87d9b2449725063bb8d5b07463b88c83dd0b16b64d0073936ad464d02455ba4b104c706675ce0c6d637271ba4cba8413e11913ed6206b8c25d4cf70ea349aeecf18ef6d9c32361832d5071a634cf131492020223fdb68c8879171e3103242b2373949200fc29104c8ae4d2220ffb181dc467200143689ffe33f3ed226095493c04f2d3c62cbac51e1c9c718c549022d19da60ed02425bfb38050179cf0fd0930dc8797e802ed4fb38f5da0eaae47d9ff1ee9a1d693788f8ca5b0f76cc60e1d91d4c12fbac8b8ab63998247659992d489bc89118365dae2adc469a44d82bd87312e9844d515f76b68f58d8242211996da3d08711d9c6011a211137f9e148a2b36f309283d876d8ad83b7419e7b00ee9a0efa80d6d524f056ccb4256f1d8b17d05b5fd0e9ed9d24c64f6fe724f19ddea3f23ce1b545258b5bcfcf2d2a5b54b00e40e56a8b0a962d2a537aa6b291ee82668d20f10593a9d5dc5542875655a2f95a6bba35e5cb8e081a49024d259adaca45506bb1867f6e4d31e1af6055b022c41a3fb5ba768089117f7e6a75617922fafcd4ea9292bb88b19f5a28802346e8de7bafa645aad45a4b3b8cbbac2b1eb9d89254a5ea55a98e50236427b4662d68b5471cd4b2aeb416c55acdbd3e09e5446ab9e8d7d3d797fdb258c92a8935fcddea56388a6be9bc19775863acbb5cab955a8b679edd9c5dc677a4d7da32ea350ab7e64eebaecdbd4e33c61857aa35a682d26a6fd6b45997cb27cdd2bb8b3dc9198fdd2ae0afdbce695656d668bfae6aba69cef9bb1db0fa32f4abe27ede3ed923edb60a9d323222f5d4a3be6fc44ab17c895844ea1ddd5249ebdd0d2c6249bfb0685166c502568ecdcb7e62e5b8bcaa615e88f6e7d6942ab7034cc91d5589538b54f0f0f7e796941ebeacfd9dc239e338d8d60c7c17ef5dc390f94ab536a1b48afe123c81e59a5abc9541c946e9c0db2866de6e49f1f0560a0a6f915eeb1a5a239f2f4ab5d2a45aa3d0ee519ff5ba58efdd5203e62f094ad78d20b1f7debff7e211a4636aad2e626d4179e189071ec4828a28d6aaf95af57d620900a4ae9ecb084e3a344ad9b1cf5c8746e9e6b82223b2c961cd72574fddc89c36ad240605dda8e3a0ee63892f471562b539aa10ad2bb13551af75547247ed7589dfdc5bf7199dec28419a2ca51a64eee3bae69c73f62550fbcc2d992b589feb559de1ce28b3b66b1251a78db3ece3d5d04f3257cc7c1e4bb183721a6bbb02d5ab8e5836739f6dcb5ef328a5bb4373a6243e4c2c21022b251fb725f1f19ad746a809478739584a3e1ea574e30bd11ed9ab4a4479bcd461c2d82b168ba5ca799a61a3b5911149668a74415276224690cc7a54d18ce512bbe595d89a7a3c7b0f2d6d984a52b739b888f6aa529ef1ead1dc58235a5ab77cc5a2a085d1b6166995ac05edd8ae68eaf6d953a9eecec15dea8d85f5d43bf7a9bea47a7d1ddd821244aa2aead64bc5f953b75f2aae53f3d46d1013087d6aad6c57a96dd7b45db6cb6b1e290db1c54b0f6bb44811831275fb358fe615666648e18b2b9448228bd298db53756c00bfd67b2b0de295821b78787d85c126055ecf45162175f07a7d4d764e185f467109e227125e3f50f09589aa51a18b345fcf04f1d551a0658a3867809865ba4031c557313ecc2598f8198689af62be4c01c6c4ca3d19cba81fa6f8faa3048cbb58d904830e314563be3a0e99c82e703fa69861c48c550049f92ae6abd51548b3c42c22f7e49daad3be8ea5059e90adf0b1b946b1f20244d80b8b9518c8c2809caf7e81d0e05b238e80e4e2abd677567c75dc42182b3500a7abe2abfd62efb5f65a7bafb5f6de6bedad6762e56316be7a60be5af0756462e7ccf9f951966a2bdf9cae77bc40450b2c5e94a083962fbecca4412207822f7298aea7d7e6a547a04f183d02c70b2a11c5697036a905301d2f67312fc707815022eb224cd499d562401e8e24d25b2f8d90a80eeb3ab4e9f2538b0b375fce396ffde8a75617527f01a7fd04644b447a1c1765dedf3a3981d823246ac1fc09c4c804323fc90432ff83251d541cc55ee4bef0a5d354ce7302e6750e9faf7cb8810b9513169c70c00915274f5ed3be1c418b11b8c48c90c408428ce065842eb52f47b842f5b909a8206278ddc2ed4ba82a593e8b406603591ba8da0055bed28010529fbfbae0e1b5d5eb29379f736e745606b6e8372110f13aeb615a9f431042961056f0be4098020413665cff2dd951c265023bf49491000f11f0e1c70410e0e1832d42653e3bc004dcd5d2134b59b32f97c02ce130e34b2157bcc6f2a510325f2a75f57ca9944343e3cbeffa2f1864fdf7f53054f0e5e7924cf0ba88a41f82643d2c49043b5f26c9908442520949b9d7655e13b1c4150f9f89f0218a082b5144e4b6c87dae71606f30165daf85d012a28928219608e261420091e5f59a045d5d46b4608498cf60ba00d144141029bc76f319ccd7e723c0785da5cbc38ee87ad80f2bbc2ee1cba81ea84660854bce67ad2fa362c8bdb6585e27bcd142a54bce155935684565e1f29a8a329fa3b290f0ba8c7a8189d8975158b488c29223bf8c72a12bc797512edcf03a7775f565540b5775092c2358a1f09a89afcf5a651eb6b5e5cb11aa72287c098542ce84355180f912ca042d355f429950422e0b12a808bf8422410b8a04ac37572408c1e64b28127e78bde64ba82a35bcf6124a8a15ee4b28292da0a4a6a0a278bdbe4cc07a78e26130bcc62247cde72853afa97c0915a5842773e2a0f019e615460b4fcc007d09f5848830cc7c867ad242d197504f3890e53354ae6b886732e7cc796303542e04764e1754ce05a81c0844f09a63e34b11bcbe10c14b4c0c367c86620711b48eb823f8e1b31431bcfef2a9cc11afbf7ce2ca25f1e5d3960868c8f2592b0aad2df0cb272d27b48c785dc4974f5a407ca1dba809faf2694c15638e187335868727be7c1a63c30fd7104e6c71424a8d099ab06a622aebcdcf974f595aaf9fb282e0f1e553560e187cf9444456ee61b6381505b02d2f0fb33adcf0dae7930c5a5878fd24830a65dc3c4cce6b7f92818a0c392f6240c1eb2f9f6288e2b5974f318cf9be7cca928be1e5592facf0ba7cc292c3f1e5930b5eafcb2717ae983a33599f472673ce9c305e974f55a65e6bab2a45d43e8fa506acbc0e877c544226b327ef948b7c9fc792025b43807cbd1e52b5d2784eca0f1294f084a9b3628aa9bbc108adb5ee74d76905c4ca2719ca7437d0d0dd40c26bdfc206266ea862c30e367c204e678398ae8628ba1a8a78ed2240a2a30188d77ed5d110430e5f2e0d43d0f043570318dd0d245862a27352bab088ecf3588a30c519cff33ccfb359c44a2829a94b8310f6cd105e182ba148b06289092d27e59df2ecf3584299e0f5dadf60a962bccc6479b09a8b955154b9aa85c6c68933644ad1e6b5eb90694aa1e5b593d9624c1929b23c61a5046aa27cd81a13c56b4f7b9ef6b4d6da6b40ac8c0242ce6b47a2ca88256c984690000b122ba38408631a51054c9459445553fd32c90898e7c1603018ccf3604e626514115be4708909cf3b8545eee7b17c2edf0783c13e0c62651318418220c1131d0ed972983c04300f06f3601988950e1062c89015211d5e3b2c640ad2c146e6e7aa861594838f0a3d58affd0b996853bc1eb28382d7607863a592256852d4921822c1063b9fc7b2c9d5eb21da071c2b3350c36bf0fb3ef00377ac7ca2f24db9e106409fc7d249d76b9fa106ddd7ce143829af35982898f3da6d4cda43f83c9ad9c2eb9d6a39a98e729aa1228877a2cfa58a2b39e95a50aa01843c2eb12548c92104af7d8906b890a28d0faf5dfb9c7376799926185842b6a0f2b273aa8f5d6299abec91ce55d5e57c79bb50fd1888114bad2b5969171b65e5ab44497de9a4ca53394ebe9e8e25ad534dd86725a9feaf4fc7fb39e770b565cad6dcd34be9a53e55c9d15a99a51167998a2b2f950e593260fd53a56aa9a8b4a8b9aa1ed11da672b9dc932a8e6cd423af9ec384f9ea39abe27ae6560c6072d7b5f42d953dba562a51f5aa3555cf5f2bf55af9ea355a55711988402c6b5f4d052b52540e7543d9503360b09409c301d516244f2282840ca28ba6a2d255da4a7fa96f9bdc2f73551e72412c9d54f9d229577df5698fead494ce5589fe65aeca55f9cb3cea7a9822c50a2e13a039c13c4a12c1569c19b2d8014e1c7d25f3fa4afad456bd82ffb12b48ef83e27fda762b393f4fc3ba8caf85c160b05ae9f4a22aa54cf87873f474e22a9e4515581fb707e6917774771a596badb5fba8cbe9fef439823a074c571c9edd388b708037421bb11a3a33c49b6c9ced1da7c598433d423e4135dbcf0f50cde613d423c433448bb1e3b3ad33c664dcc20b5030033ce212e783333e1a5e0d4d7644d906be7171d8a29a63e2e634b2d6088aefd399732ce755599665157f4ea76bc33ccebacb8af54ed576db3299b93aee81bc957de1d2ad1f08d67bbd2a93cdc834c2a55b471ee3769f1e1edae451a97786d25b9f387163a9e01c3817e50e47a76f586aed0d17634b2976bae75f7bf1bd44f8de4ba7584ba7dcfbf3e69b15a7034f2096525aeb3853f866c5658c678df28962ade64e9246464848a21722add628869448710e9c8b7287a3d337b00858db9864f66044320bc876d46e2581a8f0d578ecd19c697c8dd15994ddee303623a673d3116588b25136dbb31ddfa1c5d83134c9ec138b70797a847aa6ce3ebdf33ecb2c20fad46cb51fa01fa01f205bcd16e41324d42334c433148316c3777ccff6281b6588326e3ab7193150efd015476d8c28228d1a600df223896044363c1b37f40d1c1d8ea25c9403e7d071751859a31de00e7056dc8e9ffe19edd091a308c70d1b44640d1a336e328c8c46a3ed46318684826c403f35239f1e1edace4c261a1919c13ca4181eb37ee2e4c4e95b483a9f4fbd7b2f0d3718d6e888201226aa80346f93379a0882202de806274b0a5cc860a4e08915395cc0dec8e1f24e2027092e3930d420470a28250e9a2c268e1346883b3fb5e21081260e97a93826784d88b79f5a6060c105c618f08948e3a716183778468041059442dc67b209c41a4420f10515d51751a4bed2804a883e3fb5be9cd0327cf9909b10c99f5a5f1dc85ac079f3021c28b210e2cf4f2d3857de1622d04f2d3821b0024e095ace1b581b71e8a7d61b2efc8548fba9f506ccb7c21b1dc488453fb5de4cf1a0883337b88d38ab42c3116d497c4e88b59f5a5edce091e08507c02962d01b989628040517e2eca7969b24b4b4dce0f075e10686dc25ca7e6ab99962a10d9cee0362d04fad36516835628c9f5a6d82e0f1532b0537c072a04f45a3b0d65ab758e1eb0a4ad58d3c51aa40bee86ec13004d519db7534cb0d20c0ea8186128491b302c6571b38497891eab2c8828b1819e454cb0a97962c596831420b13bf45c5258b9847927145162c3c2e98d1fc6061cb8418ee186d34fb497d6b0d0d6fad083ebdc169b523a5322da4c0e5012b2a3328d98ecd5baf1c1e4c0c695408010b583c5ce1068b151917872d17c0fcdc7261cb97419ebaf873cb052fbfe5821cbae5829ba76f7d66a881f548aa865c249f40f5f5da6b6bb9ebb613fe8cbfd2642780d46f9ae22aecf5d27a6fbdb4d24411fb07f78a95d64a2b0b5869401c248f97e86f047b12ec1dcca3242a6cd03285cc17286194b07f308fa274d8818c5516145cc4744029a81261c733cc63b7954873421949c241071f48e0024e4f546ada8b04e6b16fb580c363afc7f90418fe46a60c724aa957e69b9403e2dc3ac1eaabd3ab4f54829d526b6f58a416d9c0533bc97bc7925e25947a1d7535c1d684a783510f4e59a769a775a76907ebb608765eea4eecdc7ade5876ae47d0de57d28de29d40e6586a11b667cd6393adc8cde5febe57958eae41f9e60cc476339e58f40ec45fea52048befed36fea6fab5eafb6a15676baa6eeb686bb2257eebb4a8af254c3a25cead13a8bef3179564afa3682b52a3bedea7456a910d94f87aec8ee59d58c91d6d4dd58eb551d7127c1889c5d8561b57b5569a52ddc2cc572fa58a85afa57beb842bb8e65c8158d53ae6ebccd70ac7cd57474ab2faea42c634f1f5d593e0ab9bb022c261f325844d37f7e4ed5325525634dca014e1277967111da7cf5189b57e75909a2ff4bb6fafed919e44d867cc837db18ee60cd6686292ddce7725051e3b8de930a161388bba5893c76087f52441276fdfee49e72e633cdea007abdd32010c4bd82ebe8a08b1404084fd51c2174b9019410f5f6829550e54d1e50b1262a4885041a9766ba6c42faaad841036604fca7a5f62f017154f889124221e1711f32a6b8a091c704882cb9c2026e8618b383f28210704f70a1c135c38626a24d5bcb85ae39b54a35f7cd7860ece97d8f5c2c041e2eaae36afac84b99ef5f5aae6a4152f5f1ac1ca0479424af739fb1fbd6ea5f094e978a4e86ab5d5d65a6db5b55210ccf7da045095b2cf9e3cfda47a821dc6da9a57515b8c2fee6eb737eac66989ac560649e0aa2f0897b5d642215228338a58b190a2905a6bdd5deb25b6368b88d6de886489acc7c3ceb077cbb02312cf488fa4251a3b11a3606484a8252887932019edc0373ce26d04caa7efbdf75227829409228508a3324189c9e6ed78c37127179fd5b4b7f7de7be7bd25f86afad2460dda2a86d20b6611f51d5539b040ba1af74ef9ca7da29f5c9d1de37b2b79afb5c1071910c4389cd448287c3328a2bdb3282295a234eb608d567118638cdd62cf5e5a6badce395b8f7a7dc1f8665185526bbd57de3a8d34b479941d8f948e34ea7609be12e76af03ae9f9614fff0a754ba958d57579775d67694e4b8f30b52ebb063a9c71c623924e67cb64a1589bbb6e8bbaa39546da5add8af572a7bd11d4b8c3192f617b999eda15e08811efbd7709ed7d20c1e3b44495861cf089b5d82d5849fa44a454504a290eaaf96745b778bcf782e008d22e0d146b38cd8f6972c1dbd1097f1212a54b0c392196e0901362ce39d36a39679d3d8351b405a52a6ca343d017f69736a859447dff2ce24b1b537deb363b0a9945d4eb8f4fbfb45d50da8cbc2f6da4edbacf5b80828f2e9ad0f42fa9594f838e2d1c54d28d9ec867ad4592e59bf1ae992291a2756754cb2cea8eb44434e7ecdd08e6ec18539c2d36f278d3f7f1b792560add658d1360cffb7ab7a9dbed3664badeb9d37c77b9c46eb94aba0dba51891d95d89ab0778e7dbe675a3787805dfe2576cbdf119c2ef898a2452c3c6180e0d5fb45ad459c1adf7befbdd65afa5509a7a76ef75011a2052d761a782369a5d1441a6dd225e0fd8083a5b5d65e11de82a277317d8ca160bd36aac2576b83de8e4ef58d2a492f2092a4924bacd4575b71d0dada6a6dadd509d3ae6d82df92f0695aa79e73d62a880c198184f4d4cf7cf7de7baf9d98da2c5f1ee71e2a422cc1244be26e41b5dc7519fc3c6adb45c7ada5200d7bce197b5692bbcebbaeebeeddf4c7f27ebefae69138cb7dbef9c3d146a4156773be782cef2cf7f6ce725f79f86863c4f27eb431a25fa7d43a78ad57a7e512dac4be17f3ea512ba9f7f1ede2b2636b29f63bea8bdd8ef85af0820f561c083e762c0a3dd107557204f78e9706febd54a439e12ea75fefbdf75efad43578412419449d6ff63c96b6c77fc726f79dec8bb30a4a03a04ba8840b18ab8b16558a9901000000000813164030281810888422912c8aa24458d20714000f71964e68549ecb63498ec3288a828c2186186208000018840812901a7100d9d143fe01e9975ecd1f3bea81104fda69da6aaa0fe8f73b82b84433835a2029200aaa5f7b38e9cf5ebef5d5832b4ca48ab3d46a38a22f8263721bc93e949e0d2f203a5e46e19a63972aa01759a4893a13e1c75e731d5ec5a0ac0e2f2980fe5294787942d65032424c60bc0ccc58102cf362e8605787604048c84e372545406d9ebbacc7d868a99d31726c434819b27cfd21e1ec152c09bf19e2411205394fb17141ad37964cd9936435380c37025b63d3584c1caca29ab495d71d68ae3b49e89189a2a2befc7cf048ab128350c72d8f8b226ef991fc6204db4e3d9c2f5393af6b5d39bd3807b655c43974889ee5a1ed21ddbd4dcc7b60fcca102ba303ffe3df51b1f54ca94288eb0e2626e4d63bcaab9cbca1586847ddc6afb0c87318821c506f2f1103ffa5eb661d5e5b576b89da7e1dc4b4faf7cbbdf0045f2676afd34b9012d4d971e64e2a93497536d21154c899a0b2750be3f929243f621edc114ea415a634b8eb2e4d8ecb1c4ccea22a62bfb8c4d029730398049805eddc7f1789b0b4cddc3070f9d538d6dee0768f43eaf6aebbc7c0a313e591502e9ed5ca0a3c7c0e4d824324821b62b60d9170ba22439b9dc1eeed1d0a857fb21d1cf659345f37c587142b31a256f81eaba42205ea16d15c9d48b097ae5ef9a4955400e83164f4647b6b7c1176863c52dec228ea74d3a541656eed217e2043e61a71988f6c2529daad7530444942ea484e33763687be92782ba9027495fab68256ad70affe4404c85088a26c1b9225d44854f3c507318c2ecf2ebb45593e3cea6639258391750487a6321bf514c05254bd63effaba9428b748ec0cc0bd8a7150c714126c3ad0a1156655e8e5044809842b8e314cfb538baad2e0284e91495d6ff179610483c649a6a12365cde249bdc5add4b61094e56869510c28ab97d88a6476078b8c4dcead9ac8ff7693ac1ac036fa6c22084073fe3e5cb51716db6b5b72f17d4b4390c9928ce3ccca13bd416a7fa76c48ffdb8df38c284499be72a2036e5116fa8a5d6689045c4511e8f10c92acea31cb2b89c803c44d2ba11c928fa253c3e5ddd480c0dfd9211ea826e3848846e770d4ea30fbee13768d833915b00567e92b38a42bab0408f43b386f1cf7a089d02634653199f79c1e40b6c959f6427ae23e1a8436ca09c5eae795d545c8727e8666a2d06df4136a9ec075ba33ce00b396d4d368ea842ff5aa7bc64f04b493220185dae20db5c502b58a0b6d1317fa1217942d2ea82d96855e819db14434504b8ad1c17614d8e2547a0142541e48c7263d18f280331b0f7a62736795e32a6ccd045cc5815ea201b5c40bbd8a0a7d1317ea1215f4162ba82d12e84da4d09ba80c2d2e2cca88c34966dc2f94db8e0ce147c7764126760d6c3ce10f3b859ed2e35fac0df7722717672a6f8e52de1c51de3855b671ab74714b797396d2e6ca2ac3dfb8112260599706b556e4d720aea25e9fb4abeb98cb80a27abdd62096c7567bbd7eca244f83eb1bd8b5171cf2ac838a21433d09028bb62b0376e0e1da5daa3d68b8b66f36c51a4dcf9f2c813748c56b3e165c8b95f4aeae12d5ee6b3887f65ab8c31f7d7324575de1843d756a837cea4f96dfd5065cab7b24c5f601fd93defa420c5f11b6361782de203c888314f2bd0a6b02d1988ec871abdd8e2178e239f746591a983d3278df8467b886c9776cd0db04515e1efcea2ad54bd343649717792753b674407c72038ebe76c0bed069d4118a77676bc7eef168f5c45757d149a36d0e6e7f9140ca768ca822b02220e058304c7de381a2cf9eca678821ae098565625c45a05c5b3d380fd6d43eab784514f6b5c54db00906ddfd8e0a2f33c1b4f0b351103ace500674994ff13be79d108f58ea0b994185bb0c05df64e89aa7c5e4d3da9f59fb2afcae65abeab8afa7130e91b32754693d29c338c0dcee52aa30f9d3af9bb814e2f56b826b7d2dda575db89ea66eadee4bd5f18cb5420d0f7be39dd322b965cd0afbe4fa1618382222fb58ed5eb95bb1797d2d449db89f52bd6c314a7e8d70aca745fbab0bd7d3d4add5fda989cb69d56fa1bdeac16da787a65f37ea6d107a06cd41fd2b962c9373ffdbf55bb0a77a713bdd7aadb45fbd709f425d2ddc4b9db8f6e9bed16b2bbc443299a0de413cde48c72a9cc2516e6901ea8467c5c5c76938bb9d524eb13bcaf1a5670010b1322b61a1f7a8534193ac43837bcb0d575fb815a8f22dc6e507263193af45372e9884325fe50a14db35e727bbfed195f6fb0f0ce5d683a01a501586bb183037dc4ae135dd9c3f44b7dbe78e45f14530f683a04426ca1a877bea838eda3b877bb97649c7db35664d63d110df5fc3fde4a4e2dbc8c511ab6559aeb06847e01a020f2670faef28094ced50c35aee237a2e7fdc92a03b4ad72460e3006beaa9983a34892b68fbd434d94ee416e83d575d3c96cce814aa9e16c1d19b9084afcbb8255ab26205e8023183e2cef20ce5b7c57d10996e4adf0f9b002b5da07b257a8025d358774aab39f63ecd6270fdbbdd58c6185a7685e6f5dabf816aab9523542b2151fd9d90f07a92e47d82cc7f12d97922daa74fe8890a1a091f81adb1fb7eb900db08286992ecc980186c4546e7842be4638046bc182101d70600deb9898b627d274c18516eb0dcae61d0dd60d0df62b2ba63a1bac45279c3507b87c57687c9ea168bd27d302cdcbe1dbb13129ac27d0670135a8864ea23d155b888f920dd15b68930b43f1bd12a5f382e5f305b5e685c5dd25875e55476e15c7dc15c7d4963754563d1953ce4ab62cf7c0e9ee42d87c94205bb36ccefb2eca64bd685af6368664cd89f8036c8f2205d426309e99736ba840ffc7bc8982adc267e6ce32d708c6c09ecb13f3302f0a613c7f8f1bd8fe1262728e99138f5772ae8f0b4cc5ccf14aa689935c73770fce68f137430eddee079c4a051a41ad3dd52fb2bf3104a34298bb405ceac1e3d94a073e378d38c4f0f645fc314e4730492a6c4772c9b0ab8bcd4c32d2310074881979ca716325a5eccf7009f7972f2baa91f367e996777608a00cf67c71cce34547c20e16df09f0241d39869642d007f06bba5b6e01b1e8d483ab9971675445850c501160dca78aeab8e21571418a2c5de9eaaeab3b74f1900954e1feb091892a37a4aecc6c2a02ab65eb2a7a7956df11cf742dc30034e81163a7e67ffca85a461cc15060de70d3563a8158d78763ab3c6e7d2002912b23098ca057f372d9f70fe26a3cbc5f87c581ce58089a19cfc42bb2730b136c7935174110ccdd763fba49685f63ec0c03a61a9177f7e3664bc0ad571fbbb8f02e9a97a6765fa1b6720c924d0eb7bf540d7a07ca54883fbcbcb6d4dc3eee01a6d6c08ed1a07218996f46d23ff2c3281f82110e6f1182e2340cfbc6b7ad5caabe6e4b923e9746a3e9d35648d7531fbc0751ee1da73e54819117aa8d20f8b65bafa9cf03cf07a8f82079903987ad1efc1b30e9432c641c9c42b85babbfa1e7494890308dc0dd355621564e4688c02ee09896993896ff0cbd072ba85c690349cbcd1f5fd10cc4948d63a86cbf5f5be76a775137ec5250ada13e455836f0414ab6d685038ed8b4b39d844dde4026f0015808e402a243adf34e5ee0c8d833b54004961849cd0b4bc2122851f53105767bfc8a0166c596834c254adf8e0034e6f0580c4710ebfb1d13b755ff65a8d01ade817a421381aac8c293717fe69cea8637c08a2e6c2522872ab122118b9bbd18bc38ccdb46952e13679bbeb23ed285ab0aff36cd5bed0dd326222b707c5943bb80aaa3eb55343774e559a80651e2d6dc1cf02640c77ee20866d2f84cf0cfe000b5210822c77d73a23f6ed646fca5a0b071671e78267e8dbb45c416d3377b6a93ac94354bf5ee222e61f13aa57613659cd5fed20cc0cc8b635fefc83ac2596a5dc296f08c18040c5103e4c4b1c0764b76402a107c1cfe474d4b74b26157471d00c5bec74378189185ccace6fe9a9226c4d096e21d7a0b7f0e6d905a9ef44e76854a0a367973a6d3659f8314a9990a7c0afb3f137a2fa00de5cab405cdd12e5efa4595dcfef0cab43aaacd72dd929c0ca9770c3d2b40709fb532acdf945eefb738f6013610bb6fd205c87d485a89671d0835be82c3607f559c5a4298600ec79e3365e096962145044a6ed3f0ea74a0aad63fa717b6ecf437d5e9694c67b999e55a22d2dc01dcd84fe8cea1632efc845d0f507c4e2ac756f7ff96761cb73c40f61a86212c0aa3a0855968e66810c78d2b925b17bf04210e0a4937669164a9d97de5b644e9afa4c8d8b7ab7b69c3603f3138c848b5da6fa1be85874065e5e2f51901badc004dbf17ba62c9cf8ecd1cac677f0435490f0646707a0472a5760b41751b9a84e6de92eaddf600486201bbb58e06fe23c0480edf767170551904e484e594608857c440159b4115306517fd0542b857582b6a5b1f6cc12b091b4ff309aca416bcb29e823a1a5fece04ac6e207c21e8b2285c2cf0281950fb640670eb9051e97766cc4fb794e50893611f88fcfdc14b8c70cc5cda13aa665e963f8d6166d0179040e0d7200481de26a48d352f7d0458bb3f613ef9972595a7a1f7f5ad0612817dc59e16298c7b0562af3d40a34a12d75a51f4f7d3679a18a804cd1742aee2cf8057898364320a02a5f885e6ffbf707f88843fe9ffdf8736ec2cfea735dba6275405109de200bf7f9f7fe6f68b0cbaef111f2b49ed88951a1cb096694a413a0c17afd438dcc49d80e2d54c8ad1b4958a98ec664910f69f1f3d83539c22162e60c81f6315f5f92b200011c9cad551a927383446a298d47d7567fd9fe4e5b2b0f01ff0fb3e63cd7c07f45764298c19248a8b7cc333ba2d942b0f80a2d9909868ed6f3868bf73429a09e3eec96eb5d22d5cc7a202a6f84b793811f0a837dcd2a569963af2922a0f202d0f1b655f48085d53eb850aa06ecd98ed1acad2ca6110f64442ec4ed8af01782abe75e33db6135cf5b7431e1c7a622596338c7820bde8b1305ea8a46e2766f9953de5f938ff826eb4248f22e15f1e086acb67c8a0d3f8e803fd6ca0b53b3142e8dc526d833b965d2356830bcf92b7a1948addbebbee676e3af07390256e4a992de0d2420ef111ff3d3601c031df5c193d5c379aae5270f4b9aeafc5650a7024084a798b5a95150864af799c602b048979c7ac2d693bd6ae03224df780540854740574a4069c5615e3f537ba286e2d3bb60ae4814b45942f95da7d43fad2df5c102c3c544bf0ee020abd76a9a0cadbf5746841f263f664108017d455e804d22807611c523ee908a5d1def2f7bc8f00db095e041a9a0c5600b92614ae76066358c33fea6ee4688abc34374e6c3babc53d80677239a64d3ff7d787c56560acc5cf1379a9b4396abe6853001bfb3b632980ca2546598d2bec6b21d1e3d55e6bd02e86e743ff75ec162e6f2000befa535b83b2fd080e457eb08d2c8f47f0b051d33324e70119c66adbd513c9848aaa95d4697943cb29d0cc539b6e0345b0a5a9fc49042f2cf373db33bbe873ed5336d73e13657827da5c39b6bb9ffa556e1c049a21440cab77863d6082a27178fd0dc7b949662381b5aa85727daced13da5e739e4cc5b8fddc9ad7131ccbdc30e40b66a5f9e6d4a4a9ba3987c4a0283431f96416702b9d135dcc4c8ac59e6cebc41a0d7b2404ae74b125ef65a0758a86e5370a6b9bdadee8de610fa4c7d717f3bc6cd48e0fbd212c9069421488ea41cf1e429666f1bc2ee79eaed085bdb19aca65ae09adde800a1592173d63562dd93c981f8900b00553a8b1cca8fde9811c05f710ee1364a8613587733b2e101d6a856714315f6084f5bc9705f3167c811675784f870b69a14eec0a1722ae6b470695d2ef1739f3f29fbf8f1dc7af944352368aef4f6b9e281789baf5e7623a226b4af4cea8309393a50639dafcc9125409fa4391e0301641c013bc11006fe9101886d13b16cdd75bf8520a82d02a5fb7645b99279a00a57efaa984cebde85506830e78378e092d356aa0d05aae81cbdb90bc84db81b7aa950d0a5782207d39f243cc412b6726c0f509c957f14eebd1523e9e7dbf4f173a0fdd2a336715d632fec6eafab07025a0be95cd067dc522879e30b73c63af03d454f3429d86dc0afa2c31714950517a19611efc544227652e3c0d8b378159528073c5e27ff04842b2a72a4bbcd0758cc34a9285604f6a999857b1dd976d841fb00533768356eace6edba6a7f10b9810fb308ccc01eea233b9e7fcf71051acb42ba3105701d108ef5e850b1cae7c11280e050bb6bb91087ed781e77e55bd0ccc42c02b750da3ef518d554b4eb7f8b0910adc50a4fd8432725a42ae60642e26951c57280fd9585c8fe62d616cdb2ce75fa6dcb9a5b5266c097a341113b27130db7bce993776bdd07631a9ce5c37665dc3ac94b3552388fd8dc57e5fbd0ee5e7bafb1aed5bca189ed36fe22a64b4a4a099359624342e95ad07841268f96320c51ea6b5174986f42aa2377deace0c27bb07d21f0f29503bf06c47191a9bddad6ddf95c07fae7ed5b9d860b66752e9920f72fa63bd07eaa7eae94e7dfd9b96d3f44ca88afed5c0ef1f2449b822637f041ed38b823f2085068600bdf60f5fe21599a452cabbcb51c8a493c11608ea7a4f30824188b31d4475d1a00f6bde116a65826453561966503b9ac10996217997929e1029cc617c120cb43746d2ee4f0f069aa31216a033da4ab0ebc8d53745c1bc7cdaf1ab61d670a41eccaabe66248531520941fbbc2e698d22e6a098809f2a21171832896b24628e46a469b11e21af68b4aa0a35726fd4298c700eebaacfb0ce5f99ec8537bfcff85fbbe9039920117c9fa02a2c7dd3f726b248963f4113bdc77fc47ea91c737fb0c8bbc1e84e5221934eb48d4e120bb43a43ba644b8ecfb26403306e0cc5c0a19985289578382b82fc7cb3f8a25a605f5dea239d33200091882b21412ba9cf9fe60b2f5ebd85305a4a0300417b75218b46200f645ff1cc820c4b656bddfa605e3c8c6f36813615dbc24e3a71528e6b3c8e1965bb470c1130d6115e165e649bbcd4c885474fcfb21154babf442a6f4759395f20be237ffce207c72ea7014f1b3de6b3911be5b0582200bc314371f43e38ed96068a9006e432d0435c2e59a013cb9221cb58d42ba612c058a8bc80921a4c67601de0045d9b90f2f682246f7eb06763b5a46fd5ada6bbd7243f601b5d1b116cba9f58bff16804bba4d28dfaa6e7b8d5435e01a59ec43f727c8e715e6572acbf7e258e9e5d7a7710352c123ddb56e9bcde1409f91dc88f1a4192239e7d5e148775e4ed368a6622b21c85ed7e46d1b83c8c9fcdc74028a51c7a03c845ca54c406bb6611d6236ca0f8f2c3d0539f1c2c0a090a5af2f763c0cf5c485eae867033b111acf395ab8820fd8c82dd9959179ce011d49b95eb9be9707a03a3947e87e5cede2206c90f91dacf127ce893d982e4b651458048552bee7c5c80da8012d72a83dec0993a0d2d70fbe97d41635710cca4f1aca0a2955865ab854249bfc0ea2f8738f5dd3b2bc9cf7701b89ffb38f4a637631815315d0bcd2b1c1d8057727fb206172557ae88537c03ace4431554825064c6299dc66662dabbda92ec3a62245c5d3b34093b1d95fa4b72d9955b5a5979432211c7ac40e3ea581f412a69c6da13f681385130e6e65f44758a32ade203f065d1b6a9ec612494dfc0860316a1ab600deec28aee7e9bf11a07327c6f6509d6c6256fa814dc95864a70b3a689d8eb9dc949fadf45e6a8cb66b688e18d4b6c66452707ac576d5bdedd7188fe9487424efe979448198152dbc5f9f4a693b17d6a08cfe31366ff7eb936b5373764a3e7c716ed13a2a013d4e4282c4ea3e7dd1b260ff9b3196934c5f05cd49c303a95e16f5e255336c89c3996b8f487f77a4b44510a5e2d253723a8e39090771f99b5360c5b9305f3908b446c664460dfbb7bd698cb70ef1128bf0e505e2156de6404b3133d39303359e396463be6cfea548b87d7f4b29b12cc6b04d1342cc191d032b189041d01818874987e92250bdcf8b1076edb2ce20cb2903e40cab03bd27247884681459da32761c6756b37c8a8d3078908abcf5705d450d7c1220f1fe269ae40e9d605223d3b03fb7863b96b8c262ed52e202cdeb0e876a62df0c6d83e8f11346e8c4a34ee1d826fb671a05407903704166f0bee66e5fa6c387424e0608d10421b2ad661e499a1408e1763a78a0b89d9a1b2b42c654c296901d45913a464790b27d1fb3856b95bf74347af6c46065451fd7fab83b084f568f54a1c929e7a037f06f279968ab51129f53e8c9f861944e8b4f1b67040b63799057b6729369e94ecb17b54c7589ded47b3a307c642ad30909e8ed62cdb1ac85ca456364a848d7656ffa14119ddd1bc13868c2181dc1d5949b8f32f324ba54c4ee0ba9e7aad4f39bbbbd0e55617408e214247a2b81d0a203b8302a092f52f6b5d7f71acff212493d850b9eb77f7227cc9348ad6f412aebf448802d2659c26080bf8918b33f887cbeb2fcba78d91905908ed44a36b90619c3a0d70b4e31a564f97c45fb35226165c65e04de98a653245b33260c0f5ce542af824d83001f0bb282923411391666e648573e239dab7937d32a54a07e644018c49f9c21fb760cd7f90399fefacebba32a046b665153a7251be5aca4d50fa732911bf902c9d59260ad3495bbd4e1d3d67ee22812ba384c7fa7dfebac5e32244e849fc6fe5045289a8973d329cceae1030c63bfe1cae033e2167eac151492245ed6a265a89d9a2125fdbde55bd3cc58cb23a23607636bfd059e9ed629d92322ce42965546127cf43029025906a975ba0e6afa4978656fee0a5098c62ee8966843a52452c7cce466736b3f5402d60baa8c2f226a2c2156c1dc1908216c94bed2d3ff5a779e47219807c0327bffe858b09c1225beabe3d1bf7b96e6a72ce3480eb39b766dc159ec3bb18c4935dbde50e48b15ab3a9eb6a5454b1620de7abc9523de178c1e7c5b50614f12091329099d6859bcf10ba2dcbc30b33e90e578fb982d72f0c911d1d3f0ddd00869732ad7e4d8ef9271d268487549a70304805c7f30eccd13f3dc3d43ffd2a8a3c4a464ab2f2f7d95870d284ae75683b4fe34c27bd8a97744a090b8565614cbef1b59bf5a981ea833ede8c0b266079077fc4c01d852e93abce4a62f0da52aa89a14893dcdd6f7a52a46ff353a856b9224574c99b940e1b683045e75fde45f6a104ba034a6610ccd04151a94b5be5a6c187ce05554a31d740728b8d7fab6c493e0c6516b8e2a86222da9c415a91323b4a72fbd2525cf9d4f7ecd88c0915ead32e6ec31930038e6a7a089b158a6d116e439d8739222b6851cea791612d3a4df8c022166f49eb05606285c58817c55ab5ac742cb8fd31eadc5bf7af5df011cf33980866f28089998a0c4a8755fd11acb7998b8d13eca8a897a37af48983c5b8d1fd6e520fe4ab5426cec4e2664b8a51a7547480a4c64e21ea2fec37446ce8d4006141a5962b8cb09447c2a26faddf0440400b96f0eb9caf610b411d6a06331f59726521200c37d9e532091cd39a2d01ae0f40d41d1424a4d90478d9af1b9583bb7313b6a56a3a9d3828eb0061ac89992a8d03cf2e535a93b62f91a674cad21a8602b37de620aedcc1bb9387faa83611c75f6a4af2df14acf1b6cac9f4d9300344857c2f3d3c994601838ed03ef8b11b5f64847f2361b99c6485ee5f87e02aa8a2917c741d3d05e749effba5a09d8c904a113952c96f647fb7891778b1cd321c715d494ef7810d399297b3ae4dc286d04c5d19a925f52e6737420ba9e84ec5d7bfcfabedb542e41867bc1f68b6b38d7cee85d9df7d3800f7a1a634f4e71c6f16a9b527b28dba312377050052047b2c8176cd296a2d5471a5986cd653f1d6e52c3daa3f3d4d61136ffb2153cf924286fbf09c534c231a3c9cd409bd1e3bf31b158757880247a68fd0dca879e059a936f9f7a208c5976c5946302ad23c3fa422d62093873739b090b26823e5a2f6cb85ae59d8e87413bf574d53a89a65956b56250b8e745b0e663510785b7563f700c242c19075008621eb93eeb8276245502d2d46b38d7417d75434f4a7361df5a66331b7bbf12dfb47a26f174dd716c1d13dd0ae5bd3d58fed367f6c37e8cddf23280e80c5b27a988b51ce4b92f65c1683ac89e10dbb5cd776f8c6417c4ff443e0997a5555fa7574eac047c3d088b63e56de4788490574c306d126acf5e49de3e82aacb16d7e1ad5f4dac80f810bcd317d0f19863885314509ff49027480b7dcf8f810bebffd9c074cc11401cbd4b509e4df61c76e9b443a2bc743096411ddfe5cc4a33a62c813a4384ab5b5805e8ed15eac41e462cb5aec3e4912031ff52128a8c6408987ec1384ae942a1ca4ec50a2e1077cac8883c985a0091e968a508924e5e408475b89a03cc27d4b4ae326186d176ff911c9c8d4aebaf54f157e6623343755744afd356d58b387265c799157bafe5867f872e76d89d14e42b5f35a2926eca036dca73345d505b3ee82aa1083d3ab430ee3b02d79d03664f8d9034378ce602e30a898b2e08dee6d02124ccf85db56a1154afb0fbdd70558512c57d7a745ef6f66893f29a7ebaedfe7fa391962007374ffd4f2fe6671fef8e1fbb5e8fad9e1f9fdeaf8c1f1fb8aa20cafaf93d49a8ce7dbccebfe40a8c97b6dc59e4597de12c9380df57951a6e8afcbe1a34125b75b0963457d0bde8c10a6aac9d7d12fb80309ada387828a74d0288f12bdc259bff30c2c95e22d3b67b2f65175a0646c1a6373145d3dea9edd6321058395af59c04208ac9fae29db40b706a9a5d7629a2cdc2f3dca50fb4b35d84a4fd8f8d1649a4718576224d0ed57329e83b5e2885baffb11cb5d516d7e84d22cbf769c8f84874bcadeb079a812974ccdd239a5f6add6e8a9405239a43ea46d3bce58263411d0fcd00853553d6796433f5b47f17caf95b2130f49b985648f4e8be6cb8386b1d2db03f80ec822a81ceaa9c100f247cf6011559aa28067b5996b9b6e229c9265f30e8a5fb6d5b9fbb1a8fefa718ed0c15d6cc0de1b251456a2807c3cb8b778a8b8b1651c9f007ccfb4b9d405e6fb9c896d6969dea5e50f6e26e7624ee252bf500a5c49565fd60cb7e871fa70aa92cde3d4f9467b850e3f322845206058bf2832fe617ffdfe7ae47537bc3b3ecc8c3f581ac58d23b4b84a47dc7265cbe8e12a221591d7a3d9be748e0fdf7cb7c91cd832866c350935437878928f7fd14f8a892966d205c1254dda6b027163e84b0165c45114e0c4d3bca8f6c051e3c27c13f69b5d6b7c134e0bd3abca8661464be37ddbcce1300c236cdfeed46d6331a2bb5362db5d47a9d79714ccd311da470175b27f3893a458f12ab4fdd052b9eb77550b637a90ba5e341d7045869204c2a1b7f613c7110187249d026d6cdb80c3587cdf37a9aaf2bac45bd1d94e776be42096c337e76c799e40df0a451cc13aba1a281a58fecc4ca8771e71888de804cdff48999508502c09fe32c451844436986402eb49112f61dc5def114ebf168507c36680f146710ed3d1fc3cbf0b2179e6cc5603172e17679c30453537344693c6521a953e153354c26a7a473ca4f2e418a3520a380b646e0e0a721ccc403afbc1f34275df2c1485104f80de08157a6fc9c53603df4411ceeb9bfacba920c15178333456740718a9fb6f3901406da227dd7cf1049c2957b3ccfd08d0abf0f22fef039973e2b6debf995d7a55e4ffb6998df690253a948917b55c333337036d66f6c682dd60312b40c51b45f06378e001b2bfd070cd5108fc275b4f025573eeabe114c377cd6cf71981518800ac280db1818aa3189d61012685a848c632c0fa144a9817364e4c53a42ed3218d7af2285ce5d075a07ae8843aef9fa030ad2153287d02e089ac27c4bd09d290a560f4a60f140a910487870f2e2055c1a1fb910de0bd1df4ee830c2653634d216606cc12e1d637b7df277fde3c84ee056a18d944bcc2d83263c2ad56ecb404ae97c21a2823d233862def8ecb327333115023d9ce2ade996c47bae1ac87db4aa6047877d100e664220fa9d942f0bd62d31a28f4cd2976ddf0fa1467fa611298da2253eca4a6214368b4b8abe55f977036d2cb0552f1fb0e446c9572a2915171fd173db14752f92f416541866bad2d821629569dc2291a9418e413fc3b0eb5f20f6ec145aac2c16525a8dc8f29edc242a42346ffcb804f1a5955528b2c1c5a44a16a1aba658261c2daafc5b798d85ac1c3fde54439551a41ad020e9b1e0cf144fba3170e3147078cbcaf12286463e11179b920abc88210893ea8a2817e8eef5fc2114d512e852dc28c7fcfb4ab6521d3f56d9877a30b2dd78dccb2719950014c47dc5cd369aefacde6776c01b2757c0bc8b49719fcaae05267e09cb26862e50ebac3ed341ead620d91ba4c320bd1feb971c04e690eb0f473406b7023f539779a2133e98cdcd2c9ac7362a858825aa0850446abc4e6953439787d7015fd611c577597f7202e9f85c688eee02d3a5ac9d4586d2161522a2c2864448c429632652b5514c0e746b17bf3465b37f304dd0b0b7447db3480ce89d1d21065b9591d2cf1b83a3e02b43164b73347a5c957bbe240a6acfc4e858aff342531f7642d160277f083c60f7ddef5a5b2e7a920120f47790de4627a06f6845cc46e5dcd73a412391b69eed3cfbfcda745f38499053a144ce6c6cdbfcc07799864988293b54346c19141f0db0a495b81054d0870a5c50099692f79da27377572b8b0cfcb21e95b532c46a1d7ceeaf3d62aa3c9dd7291830946377eaa9089ae89c6aa0ce713e288ac6bdf1bc2ce89df8371a423b2ebd9e67b69570310570b769997d157f3b4f899a9769daca75100a3d14ebe3cb5875361219942d38b5ec5b76cef0b8a0420f601dd7d6fa0b0ca80641b72130e20c058792c994a93141ca3615b5220f8002a417d8c4b47a1f41abc39ef9b300ce14c99b84b963164eccd8bb500bfae06af20527babe6abfe150e000df146997d414d1b75b9b767723e17686683d05401c045e754498f7a0e912c3bf8ab2770543f2c466cc06db95d7c5a44f3ed80a6b2dc3e243b77d5e605c2898bf0b35ce80b23b1c5c26cfb3ae5bb759363a1a4b40bf39470425f0689c993a456a3be2a72700be82f54ae3065fe3177154fff41544976f277577a533b6b6c3070b2640aed205aa0bf94a241a49b6c8f248f412242d78162240ff11e1931310e3dbc5b522ba766242636d17d5d1ea1841cc99cdaef43711554f87e2b82087d0e05fac0c60199eec0dd9a02eb1e7fdfee10da5039d91b42837cf77690bc63211f7bc93e7912c21a652f20c164084fba36f7fa01462e414b520c791527517a92a993b47d55e5371bb7577e52345722d70efafbe64389144c8247c91a1d6d6ba6c426b1e62d39d3869e0a930b7cccd3cb4c4dcb4e53b4df7542e6da5cf845bb8d250322b287702252fd544d1e5ceac43239e26490a41ced0bfb8ad45823107fdc0d0dd2a1da153c550857e63bb659be38073a5447681c3daf8f8ec715433f2aa60c75aa5d03239c22ca1466aa0d082d604c0eafa4b08df501de2feb4e76f552775bdb64422715c9a4cf4023231d5b30a5afe69035b3353cf9cd38e2949de422500a4a367d72baf40e300b98d11f775bb67b258bfccf7209612d037c89294b7e890dbb68b4f6bf47bb33a24bbffb60c28558ac73d1891a3a57c096fd9d38ae9606b8a9b848542aa2552417902d482e9444509d4124c24a1dc7ff1035f19f3a826c1bb9678336bd3dd8814c1afef6275db0bb75c864362096e2c9317e9fbe5909836a64981637804389fbb4f7ac84b963e111866c9b5f2b6e9f3d0e0a105c306e50600c519c08e1e9bfddea79a8c933185e3d82f81f6ebc5ecd903ee66cc9484828863398780a857dc0ee705a8fcb3e9cb44f3581aa0466c3338dac39e391c69b044c0a304e945fe7597fcb6c20e4392edebc0ccac67c869c3554813c052c0b4bb0b22dc036106e8bcb2f0cc19df490630a03d2d336b5ef5540b212ba95bb016848a8c53ef7705f7f6a8ed5237fc03ce126a6f26a5c654a8070d5c978aa398ed78211570096446375205289151fde48c1c5d1722420fd09993f4ffe86a22a26027c86703e0c8094651cfbd22b198794dd5d2321dbb4a92fb3ab60fa894b8d62eefabb7a86f80c7d6fcc2886815a8d794192332f0e97815cd7937be04b70a2fb03a8726cf66cfe6f662a3422dea29d86d689da5b289a9b445c6e2b9f03bcb4c2b541b5d1fc1fe8b1f60ab74f2fc4c2861d2c5a6aacf45f23185ddc0bb034d12df6226e1c2bb13094cf5a93e88b9b1288f121f04b43f7d28f9f600bd39107b2cac45ce065d6f2d7630a7b96cb730675b04ae82e6d10841c7665d2294fb5a33f68ef9f29029b0ba0e39cdc4287b1b2383680b5d7a928e6d4c32e5a0e4769915250dddcdf3c21b36088a9e01f1eb4036b765aa71fb14981565b6aa8140873d9eb142392cd698474912e77d5cd366521346f5f8c905cd752dace9efe934dd93cf8de44055677392e139f4e9cd8f8c70abdd8856dfec97acd02c56126a3d8318ae62c345f1da21ebb61fe11751accfdfc92387bd05287e36b5a03dd7c895ac50b7e1838d46a5ba6b5c5e9269e630cbed061a93216380eeae67e2ce15a8807d7c47d9b09e1bd5040325751fa21e0fc29cce06da412a052c60d1ed7166643d2e4b1337b761b64876af15c40cf63742c674cb1c03e936eb9bcda36561bf69842fead9b5c34328a46d2d6491c5fa9b351f7ecf78536377726f4eca29824c6c55ff46324c4235116a7d90be4fb0b6c4a800e3a9da3d91ce0047ff19a206a8f3addcdbaa96da20886b008317aa970e0498595e39b352dea813eef44ae266faf901c2bc18b958e3366a5b9a0be147aca26af03636c68637eb1917f015845cdc1cb21ee0f1105b85b3a084e72c84370fc8387131acc097a82656d060f33ecbfae87722f7c33996936f078051649754267639653aea43e0803c815325b9f5ca8674bec803dc738e0a2565e6a641b6b09154930c738ef38ab0124b0967300f5a172bb5104f228c3271423a04412cf24e78cde874ba20cfe0fc72d954fc851dd058a0af125bd78b585c570124ca5ebaa34bd2dd0e99751d3bc961117a09ff788110a75f117a3e05a2e208c682e28a51f828ff54c9b513e40d598753a1dbb73d176b6734a3a14dbfc7bc0370ee88b907b97a99bc1a1821667d516c786d3b881ffc1c0a080cc44a86e27223a1b695215909dc41faccc46303a2dd3342e03350b9b10f8351ae1050aaa089254663e1ccaf35b259193bcff12357d5603e21027d9b312592c7e551d55e456ea955d38d44cc0658bc510cfb8431f4e483b4de7661e0b3c6c30a69f54921fa0a2bd62606723aa2d2a40dca60becdb956854193f29d5a85b799b24ab96027f963549673dc72aad53fd73d7cd3dba8e82c3c35f6ab1c048c2fbdaf46131bc90677811e2e4face6880d5234045971b881838aacb3fec570f16e63b3f70c75dd6085bc9bdd8eb3b499cb391b968f00ca9c085c2214ce401c31209f483421d36297eec431c3307692efd0250e59dac97dcf11541e199c59dd3379e0020d03f050a832709638202f662f732007429abadfd10eb99b6b06fe42699688b3e052280133f416718aa593fee9e8a3768eb4181a8642c6bf8f1706401c60f0ca54d3ec1e8c00fd9e6eb25d1ab0ed050d455bcee8176445b79cd3019ad77056fa3dd98183162de7fc2d5d4ca2841cbbfd63f91881cfd4042ec49e8142aab76d8cad0a9269681cac200ead5db28cba2aeedd0a81d6c40ac28d39a91a0a53c5081346aa86a76fe4699f55fb933e1e941513aa37e079ed03e35d9dfbfa6a2311bc8157824ed410a53b27137aed1e3a45c6ae5f70c6db3ce3c6e8e58c25466e333fbf2979e05aca50bfc9746370942de6a590d39005e6ca83e459b0828e6a8029078211faed5c3e536dc3f6854a4cd2cef081490db178405829516ee432700d0fec85b5a2c68a97b4ded9d6231749c26d66dc98019f2f6555dc102bbf5a5857cb12541b89d7cfc84182db8664600fe705620d8bb83333ae32f9b598180a6e65ea778b6ccb3d13fd5d8d49476ccabaa999bed1fd6e82111d12e2f877dff66d6608d47f688299eb40598e3965986fd57434f8dea0fdbea0716fbc809f9d6c7d07a0a8aebd578c9c34d030d1fcfcb72d88c7d2d4a45d798c4fee61325e0318fb06bfa5d82cfa584227cc39a235ac29858d6c9100d522b8fe33ca6677d810ac63bf7b5dc4e659e96d863e6f905c490b4be665254402b3e86327ec13b02b0db279c5a1dc7056ad230e45cd21d9499f53845b7fcdc813e7a0587418b51869c7cfe173cfb86a40f7818a6057f6ed49d367fc321c05ac0727082954cfda3b4e8d5fdd96404ed1a8daf0b50d0c4ab3dd0da8a154c13ac1a7047ce8e32f446b15aff10a006602020ca510c4d18b2a30a5c9edf0a9357044e54191aa32df2d657d6fa7f1a86cc8524d908f210614cdfefbff61192f893e502fe97afd76393fc570797d3337ae21d63e848cf3d5aeaf5d4d862eae1b069530a9aaa844ea9497ac21da4f4bb75d748beadc33af6183c12edb3697fa71caa124fff988af4c0c40a4833275ef14804cc3985910275dd4cdaa8af1064fb08fe1340bb7b66aee4bd6bd4bd06a330c93504e999ac1fe6ab4e77b56d67028f0205f91fad96f51ad2b73e740fe09e1940a95263c6ce1f37642ace50916d53bdf2c08bc240e86807dfb93ce71b673d448bcd403e4be7171af48bbd4c9bb92bbbebccfa0b450e6800b431c246540eb3eea44f15a01fe3b5d466df7f77736ce8ddcc8cbe48ca3a47e5baab582067d118bb778a7e6065039d00f9ca92deee9ce7df2ff72b8a9ea8424a97d821fc91d8eddfa8af2541797926abcef8c0d01704389d798ef84515b32410a402c2a2d805b5c8fcf757db730911e5e11dde16894d338d7f021c815d4101511052f00f9cbf0d7b851a9cc5dc15f1da835dae918729ae13f02705dfd8a88a949ae52c6ece3a446fc9e1abbbbbb93dec21cd6e236620e312ff005cfb306d0d1f5e76dd478b81b7efe8904d8016dc673ddf0641ee061f11d48ee2c456f765d41be68d1dd0bcb1fb26996d2fe2ca5e51888143c3191b0207d4ea52deaac9860686b6e511623e51607cb312b265b8037b28d8a3803f2fa73ff297dfd3f099cac302ed858aea006c13c59b0a2c7497b4fe8f69c8d8d680e530a80013c9ec1e28d822e3ca0c547c1ea1206c249334fa0f0f7a6b1cd4e9e25af4a2c94215a02c2a1065611749167968e08671a5892d8f7c880878d64a75e250f437d537bac1c04cad6de5c6f34d5223e3fd8400dde58f170fd47b20b193c93bb39a4f97e7ee91489b70575a7d2b34da070ae36a8f4d3b43d4e921fc7b57cdca31f33fbfbcdea6c50c1be58e440601a1ee85fe908ea6a46a84632d446d8ca917c320429cf4f7b3756abee837502c3a9581dfca17b98141614a7662a68eb794958046cbdc9589a20da23b8fe6ebf3f26214fae9f5812728cdfcdbe4869b40a68ee72386b4040e672d356f31f8c4e4ee8063c8187ef2f7a20085558c818a6ace9fb775823495baaf41237a3e98a6679bd445478759394f7bc43dec13d34526a86a295da452f1dca2a36455e3ffee3079685944cae564b3d44aa846c042bba5c414f06c624f7967a6c2d92ce5b81735bafdcffd02409b64e624a99d1a59012d303a076e4e40754cd594d71e3bcfa77e8991e66e96d2653c57ff5fa966058fb84f5622c7c80e26c42ec21ecf75b6e9cc73053ccaf0ccda343c1ff8c923e0971b8e176f6073961d3aa641e3a97c23eaeea3ea96f51cf7626eee94086dae4928a38113fd6c12c05c11814156e665e85d1868c636cbb9c58d7c8d3a3dd51120a7a86e459098f4aa922b7ec638a55741e6352892230317c9be301a18204bfd6a2c813b71941d11d87928682b0f023ab759aff2c96a3671975f33786fd47d19a64509209e07a27d9e63ef0fe4f8058ed549f764588e00211f242898bb6e58dbc06696cb2421ed2dd34063e9346567b2d155117d830b15c4002426daf26f3c3357c265fe2b00cbadd410093df4e565cba5a15de390962487a799c0d6526afed2d437760ad2a216b8ad48b216f81c1c5edb425bd49c1752a33180f29aa7a42524371e1afaaca8c5f78594982dac73902c217e7125e08a0eb550f3df064c45e53c15ce86302cc4e879abd432e34307ac76776ec2a9afe854cbdcce3c8d3d0ea60bd4759cad1621d7ebcb817255eab2e3222a4c1456f2bed6f24952a343c54a3aecb20959e9f523c6af5b742903c18bc586696fb5ea6c3b648786efc91cd070fc13a62d722c8c656214ee34fbeb4035c246a5fa495457fe93fb94a9dd242009e507cf2f2ff2ffa29b71b25d1a4fe65973e3360bb5d9f41e707302bc2e672f9b75fc92f2cbe5918000edca17d927357ad81b0d3db81e54f3e78b8e4f1a425d5993a3b7ee1141e384bdc877d11dab59cead07cc6597701f30bb906fca7c384e8f111d38ef66474b6ee06335136f4fca4fbab52f196b8ce4ed3e18086a768014f667ccc4b01333fc323f5cf4051ca4742ec16b49bbe7b04d4c248a18ed18771e94e57940081522af282608de19e495680c76054caee43b3803e58219381b6475d3c6381face422d16d61e8b88351f280e01a8c4a971415a8d1c07faf9ee14eb96c2288693118976fc8b621ac6fc7cb38bade1b329419573e63cc3a22db3b553056bd644107aff3612a737ebc0ef15f3363974a5761e6c605c114aa70846eca7a9972ea2b4c9049a6aab08fc052b98aa7f8c4b8bea29878db31f211b65d1a765f86039b366ef0817a5a37100939d3dd8d25688655910a4f07d018db5a70b5dc5ebeea61c897d2061699de5fc999ddc799fa5d2800ba99fd9d75eef4a21344b358c2a04516d37ed7139f0e4335137530731534751f44dd341dcd3614ea1549df821a89499cec2ac68fa21d6280ac3b135be24592ffe63d0e1131c2455eedf2b0083ef4edcd2d64ec91e9a56115df45ed8f5da9c67d328761dfa68814215dcfe3f7c9120a5df99fb9fc9d24774f85684b20d3015673a532093056fc13b618bf72bdc5c85d792c7e870d189b6b850199fb16adc91ad620295a131060ab471342a9a5656cc2d3658dd760b5f54c2538eec1778d368130ab6eddb62bfb9fa680f3b3c6e13c60710a2edc080a4cadb52e5face568796652b3c14cb8dea27879e6296631f81f451730aa80160eecac82719afdf320096065092db19c860c86f05d3c20ec171f784c011784fbae1bd57daea8399a52acde20fa1a33fb0664569576d1449192f4d2df0c50794117ba230cc97f50d97e22457722372be5620a31200bb633c8ae2afa0d10a5fb106f3a948129bb348ba3f8086083c47c989de00f54940a41e27155f0ca9cbdb4f2cabb430e849f7c6c1095db225346138f95118e261a37d3a92c027a8492b05e475cc47e520ae6a0498738796f74cc00cc5b7385290b980df404766624f9980ca069da6e22d14322a91d6f391c574d6bdc7e13c219fc38b0999a8354855ad3f85688941b87816371d70557481afa6a0b5a157e93d550811291a7d2c10e9fbaf26e4742078132c612ad0e89bdcd78b69940eed678f7e9e098275261ad6040bbaf41a123463358409649dd738174144eb807b3a9d89c3b354c127fb0749356f63ff46b7dfcdb6304a9f5d96453bad01411759dbcb45eaa72766d4110cba85840781603635ad55d9e48ee401b344848181921503c16a88d6fc9f964ac81cb6c326cf48b20870ba813b03bfe824014e09f15dede19b8db659ac73b5714cb7fa6acceb42ae5e2b1c2f4ce2587c783840a203e730303fab74b1240278284c0c0176c436346ed85804b81f4a3902c7410ccae2114c41c5e55a47507669016059c5f649edc2f6de38d98389ad6d20d06078853aa8b4d80f7efd85e1d264fd558fdbfb52103cf1b48ee414ac01383ba6b26ef16b989f01c614a47d492bdf20385c32a1ce1511696570739610e77b1733f74c216b4f5c943be463b512d950bd33dba685f5c4e8752b83424463eb2bcb667ac4bfcc99d79b1eb4ca4a5c1626499930fa32970b9f53a957ea9c392ac377a4411f22c694423c5e319a8569526aaa4efeedc3619930779e5f848f6da732db70c10ee338d2ce905c96990606bcbe5933acaf1907074cd0102c4ca1853a20d3325c9403eac973d048c16a51d864a255e96e777e7c290a425ee3a55af794874c8c53a74de22007b3087540158d914828c9964ce003b4be1882670543c0b33c8f25816d9209e79a1b66a2c92314281a2bd12d86c63f3457960284b175f590738dccf21de7b2fa1440568d8816547298a19b9c88b5ac03b83c09711a418607b1905d51d1b73df6b79df3c7fc7f3bd8760b33ad585f2f5b7c4faf7517b35adac7860d970fa550d3bd253316ed53b1ab720b0606e8acec962b889bdbee11df9902254f93cc251adf550dc31776661b17b34562d1436fe6f9f0e5864032c1010c361fa2d0af07624fe476a1060161fab03bccae27ed04a45d3452b1a266111e542884cd7391d29e9b40827e193957faa992ad30abc4e51331055ce9fd375dd1d3428b6313c67f93094163d4830d713acdb10a7a7b29b36bd732d04ca6df16195bfa68284e320cce77f39f2a8f8c6b9ecb5383c8128482c9e55a874cc441434bfff573b970f3fbb23c6bd7159f455b9a940857638993002abb4160e64c4af4388242b0773b48699efcd1d56a8c1752c78cea6ffd4c25d1a98cb99d5935703e73c12bbe630990f1690bf9fb73e36ea83a6904645d9ef3dffd25eab100c43c5ae5ae58ed0250555791b2a7fb6a81ff0ac6d03732b5264e8e6461e31f93126712c8216e911ea1fb2b724cd49f4e2812d8c50a0a697dc96dd49c97d61a59d9bd8899c1c81b9fb2949ab7263996d13b616d90ef0e94346966d833bfe329feb4709f9966919893d5530fcc4e393ed17e902c863cf388259ba9ea0b8df408bfe3f68d3f918e12ffc82ac833f0f2ac8a877b34e0f7580fd7880b860de3b1e882aa086f6c0ef87bc9f856067371b183ccc98849c2cc65c89fefc273030801f819a02fa7042ce4bf4c46a2973bcace6f364727cae71a7fa865b5b7632ae0e56306500da29604c121fd4c69fe32ec485ccb5ee943be36cf4216d4c753b4d20336075b8410625b6443d839037754678130c06b4c3de1cee07cadf5ab1ebcf470420d8c9c198da788c3046cbfcc5062c42a4b99963dc37e5b21087cc91d75f775a29e91740db00e583ebe1be4fe282be2f90652dd14c42d7b6baad937a330f23d37ae5a08e7dbeafb3f7f99522f97fa695b8c43909ee48db6d647a6aa353623e8ebc56f26f3c1f56df91944a15621e91c10ed83d32b13f9b629fecd94d198bb56699e8a1ef21901a19c456cc054a6bc4ce4ea161d354df511e6482f9490e01a816225182b1ac3682de1a8fa09f5290de324eca470d89f9d1a380d671a71afc03083e6cf786b6563a14a3f6ac5939ded8c1e6926a7b825f295f8f211c95189484a59aa41dc9c6277e04f4185fe4bb7b10268a0e29962e38fb6d232023a1ecab9b4a746c73a678356a6bb82bfd51fc3752c9a6a3399de7967e7dfd0ab47d80088089171c5da3c167905b3c61058bd1ee1f833f4da3d9640dc0da047df18dd294d0728bc6c2c0d9c43a596e0f5a7b5dd1567ffb8e2346d08a8ed86beed427dc0be2487b858dfc0a3bf06fadd981a720f5dc44d2f95d101ca639bc3f0a3cdeae32ae3b4f0ebf996022a295dbfe62eb6929bbb112588ed167d8c29eea076d027c303a870a6e5a0c08a85447c8545abde616c055a0b17147c8deac0464e51c8b8c044d9f396790c5eda6ab2f6ca026deab41d3a3689555a7e505282f2f4cbe5276f40e05577051798ddec10393f719fa52b579c16ec2c09599f5cb780e3f3e3b84b4c28494f5c52e4f4457ac75a315a38d31a48c888828b12619750cc38d7309df502166ee2582d94cf1e615f9225e1bcf4c563448a8c556605f2a9c2a15f43cde150f62b64da9682d3d53306816b08e06c7af1f1d9e7fa34b3acbb5f0c166fc697f933487cf642d7486aeb2aabaeaee4687137be066123b1b3dadb22714338dc7f4db9ba3248fa15ef000850023d2ef43a0b05c91c70a42b24401719c05e1234d096d66ca25e182c05fbabe81ed5f2995cd18a7434addbbb080307c3f74e0ec9586cf063fdf1b2bbdb2645c5a343dd94d1ad55418d51abbe60b306d63832b103960dd082e8feb3e70ba662a50a25c6b12f3114e57f66d33cf0d3bfd846dbfd519f059cb51ab4ecb9db7708e37e8126945fb2f7d001fd19d89167daa376f3e27cad192f20726ea6ff7cc7d0c1ec26dd54cef25051d8b06f123cd1bf1d198553d2baf205b229ef02620979d7f1ea2b8bf747b0f865ac7691843d1a8496b500576efe5581750efe79a2eaab1bd4ae8e1a66892dea1117af40ac03b69255f8052e2e258cbc17f018a14c5e2a69757b075671b91c2a972629cc93e33b8b53555ba76d47463044eb925ac095815e2e8d1c468e64183f247dba87497d516607862af32f8084e9bd14704990168869d294061905203a4f2ac69f1c1a70575af083b2c229bddcfeae211293b564c5e80d53d48b6ea4bca83160eec7a75f0a4557a8ab2e31a72b6c27e3d73c30ed2cca1fa17db640608601c065bb47e6ad971fe0718125b827ea0d8c5df1fe4267d2dfbf896e0f5b180c18adf6877a91e82fbd184a88c112fdb8522acb58c235df1726d5fb9fc7821b4019bdf8b196c6396aab27463dad685b3d14e5d705e39ab592dce5004ce02b19a8d29487996d2fe8a0df10cd34b53bf18f3c31766f9839bf3c0f78aac3e181b6d1982af343beaac3dcf740a8a2c6413f3d254c7a5470d9b1a2ba47caa6259db71b5820a93f2fa2543094f9d5578362bf1242100bba5888737f0830d8a05d8d7cca637b463e3d207b23ed921474bb96ed67db05cf2285a9d65b9cfdbb0676b69d45c78202d2d858407b5f86cb4d14dc1651878e0ce444290c1f687809ce3fc3c482a23f20518ee3eb9d0b96bc2af5d88d7402f0e7f53540d98defe9e5c0228114f9a5b52fe835881e3855798e383152886531dde097da4c54980fe0b5d80e07442897e37b89cce9e306c05a656eff6c3806dae57b9e9bb80b9c11a64f378fa6dc08909b1acc286e1c7064c453cbe3242d5936d2fe07493be0171a39569404e09aa6854e42d8c94c247dc2eb5028ccfdde465282efb1a5e66648875932c93c69962cc8d03c00e0ccd10f280509b0278cc8db89f177de1a9d2f54831f7ce83113658602c01b6a2940b93762bc7d5d4122c31b8f5c716d608770d900a1bdaeff7dc0505267a5d427726873307e833b15987fd0ae64622aa306a41b9fedb01a729deeab6d8e57b522f14dc53207dd4e40e1fddc26a7e3b4e649e94e96576e6a3ceac23954a5698853c024047593d7be3ce2e811f30753273babc76d89c1528e6a0c435a0dc86aece9c4ef4d4c985dda895ad65112f2b8d08aaa4bd1b0d4afb197713b59c6bdbd2bdbddd3359322d9b22167a9063871e286f1fdfc824fb86794618e08f76f48fb964746aded3d3f64c320a7036b327088489dfe703dec942d7e984645fe719c79b8e4b7aaa766edbb6bf3536e574e9f61667908d9f93b12540558b1bd44d9ec66c377c48ff0634b20218e9558a0e131b70bd0585a5ada97b7d992505196e8d4ff4e75bb0b4a9eed5c86d5a58b4496884bd5e2087b8c55b2e3f5d90dccde85340b84d372fdb818c1923479574be6e69fecf54d4a59e9e24f9dadcec0f53b9271b3cf142da0e480e61e5733dd73937bca0ab5f82ccc3dcaa8d9ad8f8d0bf8014317bab9f94f3854d639a73ee423df38b27a9ca4f36649b727f259936384736a40e5dc57c31b47e7fc5c0f3948366c331ea53952f6cc68a11025be92f5cf4f7b0e16baf709cf37a9cfa62bde90e8c23d0e5bb8e1ee1252ef31896ed2f117f93eaab562cad2be100f39901bfc1175d5485d29716e76ff8306f7ea5aad7837c1b27e46af1bcfcb2be49e8a9e040d9fd100f62b619990063dc588a0663429daeaffc28d800623c241eb9094e2c12cab813af8a774380e78fe2b190e16f2c08971c15d30d2ae7d5d917fc9718c111f06d35c8f87f39cf8e63ee336763403ef626e301b5793e4d99693c3b45a2f2b4e122de22a40ecbfe04155d79a8d2ff206da53941b172116806202704c699be96ceebe7032bf50851123f6008efbdc05a14ca08bc34d808f2967111848546702ba56c0f8d607a42a2539f65d8d3c500180e339eb33ed2039399f1d388bd8bbde63ecc197385c78a11e11fc94e33194825aa91258e9cd0f16a155a93963e5768fcd64745bb9015b30f3fe79b42e8366c4efb8c1e727dc90c99ec2e9efd1decd16303ac98675c7a8c4ce16e61a23f48d2f861fa46c59006e24b3310fbb7b5e36a8266c6443fec54fd3298f2c5ec05706e40dec3c44db0589531862993b33f3aaab40f414977d2f47b3f0490ada3cc8ec7c7c822ad219bf5db57317fb5da32a0bdb73854c13cc870aa07242f58eaea353488fa852f5060474b0ca8baa0a50715140a73637789b0b1013c3421c225004901256236ebed151c819c542182807c03aab9da002095ab38c1c69bec4a91666f11b434117128bc5a33fd0c1a18439d07528306983dd1c68bd8a900f6607af8b29aeb013e7b9229b1e9c1cf250f86610331862f08085646886e28629bb404d8004f300821ee184265f5ace5f8ea28ac3f3c1bba4d829b1df3cd335a9411a8098f3171e5463ee9dc596724761821253976dcb8f0bd262399bb846e2bb87827518837012ea3e90318e901addc7e9bc66ed13278f368218aa7eb13ad4e36ccd4280fca3529c55ba40fe45fca970c1851de65a2d50e7e9385653a3622409990bfb8bfdd285908043a385a020b8e54375b7cacdbfe12d9a6760e90418e0c2761f9147ca3749b91d4186560bb9bebf4ce522ef321fa90084fb4fd36b0e25d2f3b17102d3609235e1cb9e64f4f3958e149046c77013655a31c6cb71650c7c8bb629b0e8ddda32b529d9f4ea9144bb031fb4dd20bf6619c5020c38fd63ae2dd4da329942b3e1d103a1f0a02f0681e4294088a6e9a3ce57b68b54c656d29ec363a9c0f22a975a1c11feaf21135bab6ffa5bf4e466553ac2fa87ac97894d246a45129720aef7ace5106aa9093f0ac224ecab013d7c2d5654aab9d898d2e1e1da55899ef37c3276835422dfeacf4f0515e911c08ce0c3e0af782febc65e29908ef5aeec27565bef25113a62cd93de2dad391dc58df529da575f1ab13d69ed28beaf538cebaf803d3ac3c1a3c1c803df39954cea2f2964490ac799c5ddfb3dc15526647b5ed9f75ef942e9b11d837168c4a1a31916c6eee4a89d2534d4bf8c98451225e3d9d208c9be4a52714e42a03c0f2b30d7dc69372e293c7dd7d6fccc883cfd11d7cea92c3c98554fc4f7c7981eea58298b2fbb536d6eef30eac04cc4a0bc06d145e833816bbbe80850a23887fb6a00661a7d70948f4ce8d67e49844f5c3e5d7244fd050c0162de8a9e65fa224f96d515ad909b5b2ca6642385cf9809bae5aab034be68f3372b7df7caed1c8e39cb8250351c181f0a4f8831b0b19f2708eb527dc53b8384bcfb6ec2954ef141628681b08e4f1336c0dc6e395449fcda739c434560c8830d86536303ed43a08c601dccd2715f4cdccaaf7ba6aef1563a0de877a96f4c90483f513b734968c2b67b3166517af701b630a47da12a8a49940ff00b4b4caa8743ec5d9539485ed0c06cc99db84f675e54d501258bf137ad617935ef4156bdb3bdbe98b6631ae57127f977862a2ae938195786b604649a88e6d31feed059382c7951df8b122c244d0e16fce63d679a8283b618bb47967aabe36486f107a651723da8c316aa16d29ff19c4661dc3877847a69cde3293ae79429231a872bc2dd0eb7d5ff5143ca4a23ff75d84500f3a8603620642b73d3fcd4155a2ec2eeb48316f4e063b75e8bf6e12cb6721e70228b8a970f66165caf37050bc84a802a6d446797f2e4026f3dd26ad04541f4092dd9c1d7399e2e66932463c3d9b718d8780f48c6e8996389412dabc5107b7b98d2b2c18518067b32ab89bf82cfac817c81ead974e1db44f95de519c919983e3ebd7cb499e1755ad7c37e614dc6e254cb33747a61d0f6868425d4788a434aa894503205d19869ce30931643534a7c96748b7e5c8a9249c728819a81539ebd27c0a62ce6538655d326fbd8f61069d2d51ec86f8da90699011a716c3ba95b3a9f215de542c845de7cd07976c33b775bfde17d92da1e004a448b989ae490cb8c0fe2879f2857fcbbc0ce3ba3c536471bef48845b351399371d47543ea8268c78894bdc4349b3a6c24d458631dcc7f68f6b8834da91bc0c9a1c539ad640b3303c34ab1c7199988a697e786e5581bf6db6ab18c2da2cc3e5eeafebe84b270e83118fca1d53dca7d9f8d335334e3175e7a1565482d7d2306a03149522129a7aed2edab6798e730902154c50c31d40df8b23124aa989de5eaa0d3531dadac78439e4e5faf9a5065944b112c0dcc208e02472e057c7c91da873f9a26782578aae95ad5c471e89abd491528e7c8956a7ed01cb7b6757b38295117f5b6b11a4f52a7b215555ac606750d6ac885260ee1e8e2329d15f94975fbecba92d18592bce7df78506b1bcaee36f677afefc6beddcf60afbfe6e2ade3cf68c7c2a0aec5b98f4c34c23ae31a9458a02a3c1ad0e197bc4b9ca6828e8b3ae5deb51f6f9930b2b28556dd3b63df75d05bc202b497f4dd440e4cdd46e89ffda8e855a0714e0cb1bc2793a9f62e1cb4be4988cacd402fbd9bb003fbae709baae951d0926a283eb82f59d7cc6665f5dd8c08a431857e27848adeeac196ba2554a517eb80be1959fd3d0e3df5dde829ddef6e75d4e24037fd1be2a0c67e2584aaf55611dabeacf80a725f6b56aeffc68cb04bb4ea4575f43008af4bee063d6605f5de4410b25d534ba4ce40773db951b0d0def84a8df37d30e8af4f370c2254c3fed27d9c9b231bf4ebe3cdff60a1503700f397fda868af82433a3ff1901cce406cafdcbb51e01a74f5b7790ca1b367ac8478e6631c84010a71c9475d7014554d3a99be2cfff278eb4cd9e80a298644bf46e67d86332d096cd046a94af5a39158795a13f9ad40b4312d90570645a5646da032c1a6b004f69d7892ff01bcc0ec07776cab69bcfabd981eab7cfd64cd1269d236219b76db726f125d04540458043fa8eca8032c026b1a36c07d9ca39a3a998fe8cd6736b3565b1aa76056720f4ef14b4c313f5fe6a9a536c4d200d3e51b3072a64103dcc7357ace7929dbc02a86550c8b3ade07380cbbf6cc4220faf40a76ed3e2d5b3b764b3970f40c6d010142d515864457462f7bc97eb4b3571bb290ddafa5bf1e429d65f5253b1289449456d2b3b3e815e3b06f58c55e3904c38a1ec6d991fd42d6b6ddaf8750d7531c709fec1963cf17793a7bd499cf1e73224af46c4596f9f4759ebece5dbebe459c153d2fb231277ad72dcc5ed7ecd743f4e9692df9907bdac1d4dd7497144be3814f724f3b8c3ce4217746c8474c9626abc7b0ecfe446f7e1e061f701fff78583d5661cf6716fe44d42906acb1e7abfc01ca542103322934d5a7b177f6b443c73f3186f9ee2e29303481fbf8a7e7b187885ce4ce9891030f1c8146ca8c908bdc25857f224ac4cea84484000733293f8cd078c20f52ac18c317791ac38e12452cecc00e62e083460a0a77f498bde895f27211c51538200681180402814e64a0cc0d02179bc697be27ff3806720c841c135310881999948a14c7356cc33b6eb8074f04c006d9130b92a141dfc241f78b2f0d9a1c236df0013741364037a2176d747c016564509c1c85b5be16dafc934319d08d88b2fa8449b48d88847425d2e816772b360f6e07ad690b47cab3accf20d14e25d60f8f4987c3a13ebce3104dd8fb9738891126d833540da538b1a779c29e663559992375e48e14b132c4ca1e2b57d247fe581904f402823959095362250d2963a54df4e48e980287faa03c688d29081c1d2f6d74bc09cb362ccb58be615987e51a12232cefb07c639987e51eecc3f28fe8c5a7b03cc32938054e4c111fe4c5e73d269e8ed65a252c6c1216f6086bb589b5fa64699758abad1e811d62adeeacd5256b35c9c61ec1deacc5d3223b5bb3f0e6e5a54316d4d58a80b8c04b67d6a2c20892f0d298b57c10d3296c0e9cb24c1c4c109ff879568aa93f8fc6667b9a97db010765600ea843e606c7c8f00ce768218a14f1b3b3fab17a591d4001363e563210d1b3ca59f1d4007d5088a0b1d2a9f967e5b490c16b71cf7412144ec4cd8e95844c4201ce8a0144f058a9ac1e3d407820d3266d01e911a4a1654da2c7120117c8311db164b6204bec1374e883655908b0ee0a3c6d96165e0637bc5f76be2cb0882262c0cb930ef2d7afbbc297b7855bde2a59c0057610e41d3d203a5075bd407610d331c67557248ddefc9477457ececbe09e77453ea264865d19dcf47e7ca5750b4ed05d71e9e8430b373ccbd57c8befb5c3cc3e6079c578451963b4a2170f239d1c2f2f23f3277fdaf0e70dbfca387544d417636266a20cc511436722aa66e69841449496001992315e315e31c6c8418ecc9199e5e3754566666666e64b46e628af784966666666fecc993b978c32466666666666f641deb22c1170999f0ceed8c272b15c7d1d764c444939036f701fb411ef75415c9999999999999999999999999999999999999999999959324b969299999999b9d3c003e00a2688550e44d408a263b503111320bde058751bb66dd7ce1602d68f5ed9ae1dc3a45491b0724c999a3226628763418fb5a99c6868c4c26e61e18de8d1925b1a0bff450c51610647d3437a989dd4d74a3aec1cd60c9066f6839d5d5acb62917d2eb51482329da6026d448fc2981d28e8888131541b204e017f7a3d430841df899ba83501d12443738be637737c7ac999af7c67830feee3b86b8a1ea501f7b5809ae4f39fd71425c21da6d3d34b4e3f19be1624fe7925fefdff4cf61fd721f71fed905b31a5004e411ff2ba456127c7aa294b6e717ad8300ce0945b81ce35801c5c8ceb24af504b00c95bdcd254466e4414c9e9554e27df34182088025ee5f442c541af2fbc3e5bf1ec2a541c00cf0eb2a810703eb470b3b80baf972c5eb89f0b97850f2ddc2b2a0e3acbd52bee070015f714e30dfa1b7465b03cbd9a448f46e074be8f1e7de5fa1457853b4a448180bba2d017149a7bfde9f02cf95e57ba372279f614833677918f48b5922ac9c299e8d1d7c8e3e6267af496262fac813b2c16f496c542c2e851991dbb1531ec998535d1a39716da582c28d4113d4a4ffce4a62a4fa4e413f2e46ce57d60e69bb8a52180efca89d336d1c28d41d99e383985f0049e9cb82c579f6e427e70a6e96996e988296bb5da410f6fe8610f7ae823a6ac1ff410879e9a5a405850439f99383d9ce194004e0f73702a0007f50b135706f7e928f1de8fdafb71bf9f895fe27ee793b89f37e27e2dacfbc9407fb225a6bbd9bb1d85371bfac84987cc0708b3bb320ab11f478fd177d6a24fe818560d83850900113d000b43f3c11b02b03001b8b4449297c12def37ba2c5773e72b839b839a0af6cd862eb2d6177a0e1105bac9c47116d397b001c732b8ebc5b2d39b6856750829010622e8c1fa0129bd7582de95087249115308216f7a9284d81328c49e30fe8929e60ef2dd31bb033fa4da1923970fb1334c672cc3b00cc330ac524902ee63991f1cd8641b195ca0daa9c930904dc16cbda8665916459f6cac3e9336e46c3bac62180f25efee69077ef78e49a4bc4b4a0602f9f8f8802e76bd661906d234519659d1a36595e855744d13adac942d256a27b1141839bfc452c074f9aad5f82ccb2ed2b25ab3ec59ad5ac69a8a8b1e30aae8d17011fb299341e46059865dcef34f4c594cf8216154c0849e9734620a0029f33246d5f3d2061652e6a50a7ef4bc9c89a853cf4b1c1165010142474cc59409c272e63ccf738f88a29255dc1351a04fccf2cf0bbd22fbc916bd62afd7cd8edd6f4663afcf40d8b38baa281b2901f7c91b8434c641a237315a81a440d5d941110402815ef0c01fb917e8ba446e875910085442624be829aba237cf71d513bd890d71b36ad1bcd70541da0bd145462e5f226ab6c486e72046f8912fd19b3c88d0f8446ffaf4fcc13e1165b56cecd7a5bd107dbb3cf069879292bba4a0b008bd664bac9522129dbe8a2cffc01e6267b8a484fcbaae538b3e6a08b82e10349ed25d74d612203a0644777fa0f15ec0811e72ec73e916075cbf2e102134a28b2effc082c897496543eda234bb48ac9502b2b2316b754816d94ef466a6332d8b7fa6ead3626869e553b20b78e15ee97dc99a44ef7a67b5cd8674a23755d78d889a5d3755310553b09aabe9337fae970be6aa71c55c366290a3e72f996b66a33f9c9a41d2e014ca258e35436808168bf9f91c8bc53c4a4481c37df3f153357b228a4614dc4e212cbde6500bbbea549c88f2315f79c4d4eb8ef95a335f83c870628aa6ccd71c22b7a288c96432bdd2c866220ad4f3992aa2e04df6c2298e5330653e8be1148684974c661e5b714a2281a64f2525252527b91549485e42a29a972ff392c63cb4a5979c7080eb8eed704ab339713f3a62e27edcbd1fd71fb663ef676a92adbc6ddb6158bddda5eb5649afd6a56154027c4146affbc896b0ddc47634c085723efe1939ebe09a163115ca8929e6eb21b409e584765847cf4a2ab1aa25acd536a32fd4dd47a3914bc38c74826ba247225dd661b5970a70d73fcda6493ca48742a16dbb271deab7c3a8dfe4c77569b356f4a8cdd8a5b30b91005f207d2d4d3a0a87ac66c3e4971613bd97881a713f397f596872ade86da74098816a081b8e2b71dc21843f7427b25673db29ecb6434bbfc177aca9d00be1b70e4211b4d0867697e56a9128c4c2deb877167eb3222e84fbbc2eb95f96a3e749ec97f5f4bcc97eb546cf8f603b5fa6d3f33358981b5ec369b03036dcc5512c0c013e85bec1a6e76b9042db60693eedc5a70960693ec6e979d631ba9f4b8f68b7d1aea331dd4667a0dd3f6c27c43db31151dfec42a1eed84e4c4113ec602aac07fbc182c41497c1cc6734228ad4f3598d88b280d0d8e8f92c663e93990f719d8a532e3e3f579caae1f3f3875334bc277a33ce931170dca7aae9b7eec45d6001f71de3c154d19b17db716186a3ffb01d09e4c6c6049abe645138964aa7947e3f3457dad17d7be550c96eafd6d2b8eddda9ddde5958035fa0e7ec079b3b6b2adbb5b8c2d066a90ce00bf4dd76bf09f4766a2bddece7d21b7759aeaeb5835d3a67e93b5b493cb2d84936e4256b3515dd85ad01063cdac569b030343358181a0b48cd4bbbd0b00bc38561356c1113513257adb4565a6badf5d8613d560f6d3ded4e1f821a94016e87f07697d1a3dda5d1a3d7240adc87edf4c6ad228a7ec5613d11453f5f2b0c71d086fbc87e2e3d7a84dd6b774f3a6cef0e637b77bbbb34b5b6b31f3c477ac9a54bb62536e94219c017b8a3304a1cd916d1c37622ea5bc163717745f4a60c105e830fc51c781486f3a1694d51e7328008715a2065cfe0430bcbd5a0c3ceee27016ed0fdee75f207905f115331450ed103c6441efb4c32b841075d1bfc884154165859ae1b1baa862f4f712bf025b6756343090d1bbeb4752d2bc3c6e0da8a91b5fc670169791f5ab4bc2c5b11fdf1630c40a816ace1ac218480a3374b16a1bbe8c96b590e5a97e5ea97401c9c3504126e9a05b68cf8c9e066813fcdf73b0a83e0e5bcc57235e4e633bc1e3fba88d01d101ee0c0052770407870d3b0bb883ae960ad80ee6de1b66e757cc8a6290f7274bc752dd903143ca1091e9873b670336ce1666e918497a62a27a277131ada366c0b222222974800ec8b530c92abf847b2bd85e5bade4f865eb02ed8af65f6761677855d01c06d997d8aa1e224577157b6bb728a41adde2e8dde5b6693d0705da15d581802fcb242d7d0d3f32e6e6867a3cf74b29d2c85ad3fa297c2c6c676e6cf892670da8d0a0c701fb603ef54c550831315271fcae114e38829e6c914b8d2b743ee74db6c9001d77debbeb2952c677b883fdd5df631990257391ffa1faed65a4723ce11bda9da1847f426f3446ff28a7dea46e951782bbdc372a237319ce84dec07d603e3315f62b41a3ed19befb8203fd19b5315bdb985b6eddc66ade6b6d9c3aca968af3178814f4dd7b6800891a3a58e1f3a78488e312369086a30485de9ec137b883fab25701ff7f4f8f489093856d519f3821a1c72a8c14c0b7e60a870afa19850c8063a82e811c3291d3eafc970ca00c7e145ab89a8d08bedcae0de1ebada8db603da2c81eba237df8205b80f7628c83f0e6a2f348869814dcf6baa88626e7be1d48bcf6b3438a512ca3951046edeca99986613c2892878351e9bd576446fde14c1c1d66c38ad27a2be500ec7692acd26a6a01037da8dc643eba1fdd07062cabad174b41d8d47a7e7b555e4b6500ea772b83a4a4727d90f7ef492fd2850a3e185d9e7b7d7ccd26ff4f6107f1aeaf898b1baca6dbb646a76ee821c07f804514d457b88441afda3408dee21fa34a9a3f4a7e106e10621c7412cfe1141e91fe3800d7da66aaa80639569d59fecd17fe046e1b64116ecd0f46c146a3634dcf0f90944081921603a8e7e5a039d35185cb5a9a552a83991a8be9eb3df89ae47e150dd28dc36b8821f1c69a310a5861dd6e189a8d2659ce8cd03d82ab40e1686e6d36a7a3ee506b030363ce5312c8c0dcf01bb8181f3d32f2c0c0d76bf6ba7e70bf01b2ccc0d4f390a0d4fcfbbb88a85e9d7701c42391663812b80a542a7d8b6349f16b3d5d8ecd82e0ccbc7f679c601835dd1227a130420b03c0dbb8a44a4d168340a916ca954eba88e6aada33a825be821584faaa37afeb1b0b03ac1e065a331a74977f17952946d454eafc97eb04d1f59d36588ce150c309c6a7e5e9a0ae4e99939d3df3c0e37e048378886afa13b381e261fc769f816745a04d1f0594db623e391e10801dd0801d9a8d1f02120189320263e3d0d6f722bc28fc019217546f034fc667d34e4516247899a12b7227c091c25f24689b451a3a1290847e256842741fa0836255dc4b2f06de8a4d047d6ea52e9a3d1a8ebb0d23bac74142ed9eb233b12430538d20dd508a116b5a8514dd36e69dc77c5b4182161bf2bc7d5e3bb543d3fc27e9446cf9bd88fe6e8f910fbd11e54f5be309cf470274de03ed64153c349e7b8775cc7456f7ba9544b554e9f919d2b0eddd97365b80fdbc1d1538502aeba6debdeddd2b6cb7275d70285a5cdd2fd6097b6d813bd2daa76a28e89693bc1855ae43b8edb20aca4ee10d68e0536dc6ee95ac95aadd188b2347a1aed403c0d413b0d3b904e43104e43d08f86dbcd2ea3a79dda15784aaf1d6a31b42ce6042fa71a9c48830a845ec9c6b41723fcfd5f412118a189898989343141613fd82d3c3eb327b73418247edd2ffab477afa3c4162c8a67b685a3300a0b4f2c0b9b3c6a30e389de0c8c43a8740ad8cb6345ea94229a1100200013150000281008080482d1583c46117d567b14000d98b6525ea14af42c8731c810428c0106100000000600000032332403eb4602a3f657d5d351a8e91310d5b9b41529802eecd480965831bc53f1b07d147f38474dfb968ee8933a02816d601f02b2f71ba578d7b09894c88f6398a72e3ff0ec12216b50c36cd4bf39bd32b2c4672369f36d68f889ed727dc84f60d4403b027f7ddaee5960a6b47775c8c37c2633218d677edca4eabe73cc05c8ee2759353b63dcbb53e7ca61e5edb49c8ea53f283b7c668dc59e5f1eeed5665fdafb51f8242f5910bb1051e9824a6815cc8f8cbda7aa03ebde42c420631c974e8e35a59ee98296dcdc88068599aa24f720ee56b0b3eabff58b27a8ced326c662e13bdd7dc6a3d2eb47f20d4ce76012eb8ef7450774f38252c5a897b4555d129da92735fb4cd5a41c10a6476f415d58e1bd6d2646c324a57e0abe3e35762f3269cb5681469f248a6601142af592aebbfb168198f8fc2962c16482345c8cae861d8fd75314ad621b2b7633f53200c77e7f5744648d17991aa835ebb50c152cd330e19c4a5980f814c2718b59eb20f617bdaec40db187e8e8c1c39e014c2ee5fb103df1f815684ab1641412c6f30c8804413a2d73a874fe677e7294e261253762b5e651dea1906eb99a3796ac6001d7a405a5e8a84fc455d36ada5ef4f5840a14bc59ef9466ee63f9a5ff66c03ee41e1ccfd5cee3fa83e94924e9701a31f3ebf366fd847779f1e117b8cad6211e00f43ff744838b8cd94a0c483198fd747aaa41f54b058090b498799918305fb4ed62c01ac26026b530638ac07c72c8cbd6901281d830beee0720f62149266a39850db6a630f182fd1edf0fa503c94ac5338b2ce4b6db60a4fd294f596d4fd39b49dd4830b14be4d956c859f419d44a3df308ac581f11b8ea21653a00494f993ad976010e9bb7b8bc079323a6e2b06d961559f0229e86abc0bc0a9b4a0a86cde85a6835a265086081281f8efe86370d32fba841fe7132bf918f6a61bd632aa2fc05860d5460284af3f81ed45cf6c8d6ebbe80456882b23d1ba6d206db3776f4f26ca552b95ee1261400a8c9334556412403c68866013862872bd2c273c324c9b8ad7f6d1adc4b3fee3f64f3ffc8b7c72583f42182154fe0dd8a119d6aac1313a092222d8af16fddfc8b8c6f612ce1123be81ee3ce1ac20c51c0bf2c758683d58af7c6b0bc48cbc50dffa5959e0dc92b742e3d325175524ec09c5ba2dbcfd9350fad55145244baea5110640e189135b391d6dc06ed987324cdd95091c27f62b9c06dec6a357b2fc137bc4bee68faa2a40f108ce50792c186053176f3deed4e09b1dc93a114a535634a8dce98d838e1126cb1290b9e69401a0823c5234d42743b808ba827ae62165de0de30ac23ad1be504c82766376a8e050e67a8f7db32cd00eccbb6d9563adf1c742040abd3a89fa9cd63a43925db1da773fb09e53cc4db35b451a53e4c82cf94e0c653e59afea4754a8db4e3511ba1b0705f42ff7fda6a4d852c579607e898618f04496b498cea6c088e4a9e082cd98add6119ddd2cff812b8584fb4d6c9bec6ded9a26d2d1a11eb528fcdc681f5defcda7c22b2ef6928c25ae6e63896837236ee9ec3e84d329384ed62d639d6e5a338b26802344a1fc1403875a98467a2c387c85b1bb3e23735a8ccb9ade6895d2b8fb505a20020ffb6e7a51352e3b8e4400633742933d2fed1134e63d48b00ca3f352105566e4b82d10e7d5560fe070e6007e0eeba4de749ac0a014efee50a06a6eaa43e3e23df3a188bd3f2943847168f7919200fa2aecca4b7233aa5198cf5d071ab494a27e67ead0219fcb8345d9911ca94cdb5357657321531d127a036859dd915de36153fff19fb7e03ab59574aa9d81cd1e18c0c298de71560e0d4c64982887faf1e8c289c4b1cc4abdfdb2f94d1641ec3c3cf11c4af473de6878e13bd3d0147ab144528da14785542d3093328d80ad9cfeea4ac55e713746b474c203286dffa698564258294f0bbd9b03a3e108efbb848f1b05f2fad6e1e33c67f80ec81473f33b10a73c09c9a55a7fd4cac5a227f8e86c4ccea05bf07120db21c13041d6553963841800c9b2412bee40192141c49b420091832b6c40b252e54b9193aa5d71d1a357fd47a88058ef0d5d6a70ff4b712859767796a770d720cd8b26031f5a961b0d44cb604ae7275a75a936e1e5045264d6038b53281dd147439a783cb300650dda3df25af56d24bcc030e18e81e3c634c8e9a79dc4953d0588ce3cbd3444d899e305531170a34cc209182c6d538d0b2d95794aafa08ae58212814c887100691160f4bfb9a932a06aa27853c6b3c5f653fef8f899cff2a1933ce0856b4fec9c4185a895d5825d309c3eaf5862a34508f326f799fe0677d41409a25bf76811985213dac078278a2da653b4fd4a023fb038374366ac18f27631961ccdbf75eb443aa3373c0c4ae28be4759dff646951bcfa8700a9b72490fc15c37f06e8589138431f17de95626fdd0332ec170271b9786fff857ee1af2577b43b4995be5f2acffef8e472463c6ef61404b5368477b372c3a8ab2504d8bf073ad817d0c2944ba3086beeca1539ab00aab0c8465d8dffacc4a85bc9444dd0ac10e0e4935ee0f4f6e4d6cbea3465f05328c78bede97b8d207ad0748043be01ae1afb1aa895a3531cd173fcae24cb5bbe75c57b0c641a680795f29313059a9300f99184f81d001585d23154538b9d3182b9ad050e15eac3f800f2c3154a70207fda0ba0d01135909d2cfdb23e6abb101474c58930f24eb02477de7320dbcc22fe530c2038cbf9a3b65d2106d25adc114d141451bc2931a242427228773a2cb0912f937927cfdba49226e1528a204417f2c01329ae08b139936455ac819795ba4c48c8a573463dd8bb00c14dcf35a60c387b809edb63dbac8989fca0c3416b8c89a098fbaaecf4a6c683da906a42148878ac5ebae0c27c05b6c7a78c60d1ea31f894985a8777608d43f9fc44c9f3b7219cb792b71847161793ab3d0b206d833541d187c6d241a08b3285f7d3a1edd6c953f464c576305d7e26a8d87d857309b3c6fcfef87b74f059d9a6d145fb22e8fac95a3b157482ea098acde0743fbbfa248272f5ab4abeead9748e175bcb4d1af47b512934c01706c55411387e2f009e3b00b1f486bc296dbc5c785870449b0182c1f5703ebef769755e8ffb268fcaf743d769bd8018c82e468e2714e4f9f4f01200f005257309ee07337e83e292cd1ac6685260aa849979357a00d131ad9f65d3164a70050544a5c3e6e29f3370529ef7a0883b23294aa3ab0504ca12b4ba8e10a783a97f4e6aa871e1b8ba9f95ab7fcd00abcb0b4b9a6d8c030c71dac157feb5784d97fff6909b12a4b43112783ef5174680bd752cac2590f2f3b9bc31377665fef588b55bc1e4bb5725d79e7b47d20f6c0d0b6618509865be1f387f8ff953b681f354fb2905a8db390d1796fe2ed728716272ba78261ef15fad27b5242e77ff01683b89e914f7d9ad5ab2daca0c43f9082a5908211bc67fc45ce85cb2e1896caa8cad4f9c87d62fdd5a62885143749de8f58d84fc6c933945d5acb48ae786eb18395d28849306dd2f04ea4718b95ee2cdbf90b15e66d21d60aa7d57c5c916b553a7f179e0db7f5b9951ddc85d25fa2ab6dee5f62d92b2d33ce3fbd90510e0dca392c04739c241e56fb8dd11573e4be04a59cfd0430910c6053c8711c066a457cd568257c28bd2593a1042cb46ba83b9fda204a69a32fc184a283a6021cc5ab86bce6afbf2e0ce46bfc713f553db4d36c9df835fb9ac63fd0ee3c5c8b3f951092724dbb8f2547881982cacac67ccfdb7f18946ba022cd14e93670572cc26b6ed13cba0ffd398a40e71e8c826bb8c9381d060abeb8558455e0f27c34380a37949a6fa596e4fde16e92498d2c248a85c682dc751de256b648119dfa0fff1a5f2af3a363f07f52d603c41bd6877185b779895043cf27f614cc990f552c64b358eef61a2d7cf69759806c2fa5a34f1ca4c3df19d673ea534a47d1e38c03f094cb96a040b4d996268e6d01813741c9c03c845188f2ad44f3e648d566c0d65255e93d07c0acfcb1c3a68efb4ff0449dc0582b65bd39d346dd30916965f38a623dffd58760dba380192665c8e63ca075c1ed06920dd68d8ce302d300a25c89d8177ae73bfaeaf5e3583304d6e3f74e62ea33c4dbbf3f3590541fd9bbfc424e82417d206d3f520f63ac1e26a87c24df26e9f6a54b66a057512606f369a357f778bd5807a1734773ebe15f8152ee16645ad956cd0d26edb51b9c9f51d7a5b4a88c0de2dfa6e424fad6551cb0a26649d66aa41288b2354932ed9ef10f7b78dbe3f39cc4d0075dd139cd2ae80a918a5a8a31ca43896d66c01ac1c63a10148485a4947c790633d3fe7531a307cde57dbb4e7e4487f51315f1ae5aea1bcf633d05cff26d0ceac1a2eed245470ef0bf4012ead01ce277a3954340d7e96c1d2a9b34b3939115793a9a3d7ba8171a1a1c2ac2ad661e946f343774ba82538054679ed7597f0486ed49c8f92303b1b58f0733b83c7a1c4c18f256926c918697828544d6ce3512300cb8894fc6cf0ff638819ee82c6e68135a6250d871033d4f51670604d68423c31c6d448581762d62aefd9ea7cf1bb8f1a857a0742602311bf66b58d4f218be548102a7b2529f3cbaed55c12f70b5a4d2d34ccae6a6341ae602d2002ff3a6af1051dcbef18c90b439537a60ca136e36f5614c2e1225b2428d069ad13d4ec27bf08e2914281caf8c8c4ef2b6d2dc57ad1ee103eb24ce7d70f11297e06d496ca0336e7d75c08e9dbf4e7c203d2d2b93aca0c989ee4dd5bcd7ffa1172597bde271699e304f771d9d23d2d8e6646f33fa6dad858d2955c47c8f7e1831c16874ee613b2a0651a2e443f33b8747191e635811ac336c1d99da8c4baead4a671adb72bd7a2bbacd28004d898b871a647d8194791a3c85da92597ef867b13a930c34ed3f11b8eb94a6a22c394acc8f965c08cc474aa240b3238bd9417e5bfc7c3867c0e9ef0b931f887ef112b4590ad07030435b0bd2408ad504b211bd0cd6ee39e79d0d089465b130923ef0f72f810b88fa0277f0c9a87cd67fae489ce46713156ebdc1d63d00ab6b8b3a783f7e4d3c93652c0784074ad82b721ea462c52d89cf2754bc738dab1e02b5102067d9c4a80ac2a64dcf8eccc95b98f6d9f386434a755f9f0ffcc5173cbc30cc957747d0c66c080abd61409cd8348ca4251ec68321984ffa4f3e999cf209bd9508a14193180d406a1a15b06463fbdc344fc58acbd5e9c6b12d178f40d44fcdc5ef27b2a1b32cb78c02510d75e406387891e808ad65a424d8248f0ab48b8efa5d71b2e3e9eb0f2fe9c1d8783966aa721d88881c84da86c7a71be6fae6f8198b15aa41016a7a810e79c087168008dcc43269a7c22a52bd58c487589a19b613a370667c32afea6201dac9964fabc3056691918e482f23ca632a5e964a0a7370139a1c3e5b30a94581e40cd9c164a359d796931188a5758a04fa96151ba2f3af1a5839c04202755a883f92eb9ca126fc5b6fb3dc5f5893cb1c8dff9728a1af1bf073ebde86960866cff94fcfc3df499f101167820fea8a5cb5772394b5f39a9f932f524537b6ee19ccf27762b02a57647a16598606e95e114d38306b78ad6288640208179ca3594fdfc47623139f2abf2addc5000ddc6df764c034152cb408dc70050448debb8e793257a90fcc7e073c4642f9312cee3dd5ca48fb9275e7861a1ffd62422e11b8c8d7efea33a534073fa624d1f56e117186ffe2a92ad13cbe6cd68b110dcaeef3586a82eec825b1a2033343484b2614c42c899f5f5be68fde71dbc9721a508d25449f7b144fc105a10aaee5e3da8e824d5530830e82d603db74138e6a9f9fab6f000ec81f2864bcdf5dfc3521f9fe430250b6492f2d240b3bec4812a923227f0d6476c85ce69a56779bf4a8c30fa0db13ad8a19a5c26b60f2808afeceecce33b7168c5ba4f095a80299b2e9fb118b1da5715a2e5b6ef103ea9dee9b9ca7099ac161ef082d9fec86e98fa1f1df04e303e5a1d7bf619dd924d2057f617cc8c772b7b5df03957f9f8e8ba3e07af8ec1d936331167c8e13aba2bf20f0f5fa97e54cd72b6ea5c625a98d4cd629aa5b59c943b52b1850676885514d1d709e675c2ef7e77fcef7cabeb9e8bda224e69c61e3ac028c12aa183ccf1bf9a98c910a1f2e0b179a69370ca9f290a06dad8ee05c572c0ab6ac18969c1ae757822eb3726e13a1a520a938e744568ae7a4766bb0fe506f645e75a00bb64134ad1ebce947c0a2ca8a11a2a956543d8c3a845450bf5904344bb863c57c1de1cc00ef5c26258ac54ad1ad0729c7c42840fdedf47038f6e2c3ac89f9d67c9bfd1ec57e729c5867c5048f2641727f73b8c08d13f9f6ac13aa317d143ead8b40c5f84e0b7500e34a75d2dc640177c915e907a20660462da3438995eb384d6acf0ad168f97367412054329ae5ee2111004819f620452fc535ad517012fe1874a42f2e8f654abe97e95e91db9ac75e93997461d0e39c71c5516154f3b21e5cc7f9163e340d45cf02812e70eb6e14428ede50390a59fc9b03be84cfc11e73b16d72b1ef03f54f9fce947c61386424d10424caae9bd7b526fd4890f57a16638e0e15ca36400b32f8128f24f4cd302db90fe740e976ae144c8c65f96f9c5eb005d7b2801471cfc51c15c4838d8e6dd2e9d6da4a21cf60a17764e7559ec01d1bc2edbdbed788fa0ae0dc74b551b2fea6334a7c44d5bea222a42816f6d591bfc2f88a5ffc58ba7100d78547116739615ca34ef92733c3b03aaa6279152909c7b98845ab78ca60a0886e080d4f132ea186c2e849cee7e60a797d57500ecc975ef5bd726283f62f41c5027e2f44d7cb3e4b9004a9b5814b65807cc76522039bbd750448a07910b77fce80236f75f9a6d702383d0d3143c584450cb131cd5063a9014b2ef9aeabec26d07eadc15f63e456cd433613f076ed9c80b078612cdf9809b79984265529354f8e6be2fcbe5f188d5465b552a6d6ee97630490d3c2bef52895442c0cf48af1167b530c622f02545b65bf5e9de7df9049942825cbaa7abfe0fb2abae266b13a4e79ac05e3c72080aa36957768a7ea7d5321aa678b2474063c84697b3e631b74e59f460b591d8cd0190d5f28c9b42dc84820ecabd8f3c1aebbc16a5ccd8e077a242fedb9fc7da103caa290d3d2c0cba7a64b16366de94ef7220829d2024f6c434600f94ceef43d3e751390be24851bd24db2cd74a45d5d327b5e2a74de3a41b599e450468f1d92c050cea24d1f60e4049c62c3ec08e54335419c7b6cf711931e87d0d8b61c4c4d4e9b087750415f9451c064d52cb9a7f4cbe7ccdbb63352aa2e089060c7736cd19bff51cdce6b1ec4512ccc3ad2b888f3e052f5f9add0c8839335e11bfb8b1b79d7b4b9f1387ef5ffd5e0402cf90b8ca4096c24a7259bfffc1fb0de627493ea4ff559c82858417b43880ff1c09a01e1c4f6904ed1346847fe8ea8367c6f74d975d0e0adf70917578f0270b0beac0a9ce1412e9ffaccf9abf6ce9875ad83ba96fd7e8220d7453e2268bede7ecbe97771d6f336cc22b125497b6b05a99fbd3a831776c38ed3ce493db8ee29bc0fb9cf9bda1229c1b0084a10454a4138766de3fdd9437c2c86531e755aac907b5b1c25ec80ad537756fe8b5a1a15f194d3e9d1785aebb1346c7b30e3f0e8d36ae1444f85e10c81ab873b25ee9bde9956511133983ac990b48ab9cbad686503c5a246bce80f30b6168290cab3ae59eb60ae46f6aa5305de71bc439f85217b5426ed6ab453abbe5d947b6d8eca12dd585cc30416ace212798edc9ee54a3d2c2be29ee90e0385085cdc984be48a0a65a7eeb697c5692ccb81bbe44897ee54e22a4c101ff4cf0f606b1a582101c3200497e3c8459fab21d3c491b93c1ac6ca7c1318df096b58d1349e1842c4072b02e9444741a999d154c5f9602f697071884dad8c8822b89ccdd4629f328bd7269bf64b27319a28d90275007e9e5b55cdd152bc9269fe2970f88ea0d329ac1fe28cb30a2cf636b15211c22ed9fd2694f78b37634c061f1c4dc60c619b2f194f024cdba2a47c17aeb4f87e8ecac829467fc70f4c09a0294c25e458fb0d825ca238fd5d77795f1c3681932109669ddc87e7c73247ac454cdb1a1969b22f9706d4eaefe80dc68962017777560bb8173b25d47569448bac39caa1b9a25ecdccfd971e3639829f7b3f2668684ba67ee23cf28cef2192c44dd0bc6541a9a612cc8699254dcc03c0a818bbdcdf796b27cf530a7e8a37375f3c61d0b27e58bef7242c46e4ce4769e93432ddda89a10f06d402dc3283bdeded40148625e8cba0e25d7b0d9888e6d2e239216e12004728afb6ff295490633c1a9fb46e4d8d81612511da496ee53c7e96a0996888f7837001bdbfa47de57b594d868e45a0be482630ab7b4c3b0b55dd914ea029b3ac01b1a253ce88cc82f845009c523383bd3db581ca727d7059db8803b4a809c81625de406ca3541211f9a8499ad541ca1403099fc14093a5501f334f4bf50a02f0a9ac71063cd37d99e7464c4684f9629086840ad5ee144d8bb16a812a6763b9b72eb03753ca01208e20478ea2181452290940a02a69c4088234815351b6452faa3d5aa47d5953987bcf6a8043f67412d5d33950161ff2f02385965a01d41c4bdd4a55835f4da2bd5444caa4db154af14ef28ad3d6b8e00fd33f311ac75a66c3682f31e2b3bad356fa136ae195ed3d42b7314387a1782d98792b14def790e3fb0c7af0c70b0230ad8509c0e8a0f96ac8820467a6fad43e7669e626ab53a2641348b9539107ab0940ea406506b827b7b6456247f0863c82a2e325f4a6135d1bec37ce74cbadf947a95b4f8cb849eac4d5a78028ed57026fa462e5286e30c520c19f2bcc1c466a9051c55878eae8147b6279c76e4c75cdbd4d62fe98ac94126569e67e50e60fc7315b3b3ae4c8932b936c23192e6f2d2f880931e1eda4a0fe333909964b16b3f49c87e110a2ed1285bfb6c2e02b8312faa91d0e7fe5a9159e20241f64cbaf4a429e2a654789053caa946cfecb8432579226a894a35029d79eef425b510e50c9a2abcdf54f6942e560695e5c8deb0c18f5f0dcc28e2bc402853e111ab122519dfa2eb0e2a63ff89c35efd585991dbc99ed26d9eedc204586b4352e2496aec50c1899224054bf9cacf46b54d62570017482fd0ff291cadc89f35bc71d0b0359c2f650977e21362019c1c923c03169d61dfee19fb9019a420eda216a058f5414593f8126147ae3ab0121dbbf8ecde1409b6c31ee5bacddd248531cbcaa53428b6380b19c411f811534f6015830e31032e3c9834e30c5edbe2ecd589b7b117ac18f37e53858f5bac1c45e27e8853da897d48d128114b6d4951f27aa199f17c00fa0b6a421ddfae663c246ca43b9419d78aa6b1bab3252dd41a72d56e80ad003979c66c23b4d085778495748ac50420d6576bf82baab4ecfdcbaa31e5fc94309bf46931e6b2536a0b89ade118d7ec03fd0a39bda418f2e9298a44c87bdd5818da00be6ed749887de01e5277af47013b089a7578fe802d2c7f4b0955b40c5a6977e3be8bd7650af769847bd019b8fe99153bc07447c7ae9bba35eeda07b73e54305d5f179130207172c06fc63098d7908c2d8cd82a37a3a5a8d0e4cf3f909bdeb9da1c1cfd5f4968ec07af0915e9b86a4e1d7ea469b9ee3c292fc32e237f702856b8a8462a403758ea4adaabdd276a3221406cad4daf3293dd8b5a6c1afd5f2969857e5718f0e7ad43ba0cff4a4fb43f14f1f25d31bdc03813a0f04bad0e4dcf8a339c8f1a506382a0a6d31e1cd8fe1c828bfca28c76cfc337a154ec42fe2284c077fe1cb0413bc885e7864623c94cc4df96a5705e563861de154c6aec5a34a65c3c98b188a57ae61eeeaafaabbf6dcca800973c3d4a1aefd1574772e2a66ab4a3963e43e47b5c6ad3b8771f04625cc1128e782d0c7fb74efd27d7e3050f0d4b08471155c169a0cbd3e9aaa200c8272f7a4b89a4d195c2256097b20b3dcbb9a6414e817fd44e6cd194163d093a7d0e3b38a02f593937394f831cc7870756fd07a250fca1e91ab94e6d2ee26239b2b9490e7401b0193eeea6d2e5ca0af11b6e816149bec911346ce8a00f3c8e62e88e013dce7b9c4cb9f91213048b50009db7e419b7d50864dbc73de69c86857d5c00049882f67e86b4264e8d81916849c3356c46cd260b34158b2a6b0384c0154ef7d25177bc1bd9799021f6ac3d37a4d3473f8755e4d211eecd7bde70242b141582b6fb3251b84e109dca69f1b72fb5ffc7cd0ea493791a2c4b5374a37611a1a6b5f6283c88e90edbd1c3a224c89318829e9e80f53e2571d1547fd6683b0000cca85ab35ce2905dc28c2f8566bde34979da8ee36aaf0022e626ea3b88842c4e9d870929170b94bdba84cd44da855fb1acaf58e1011f84a6877c65e7afa16b12cc8a07764fde30964f28372630a5c0f7cb1f9a52da0f6bceb7f19df583e9355dbf27ad2be6484a39781736a137ff648a1426f92d06a08007957f878c51943af7f28f28c5fa32890aac80fe9df13b31ff59ec6d861ea1fcfd773d0df5b108c61f58fd769070802b31280fbba6b09386e0d05575073518a24118d953b1cee976799f8895a4ea5bfe6f80233fc1894e77c8afe5b5f8af71512c72b4a1e6354c65a485665817686a45a958599254f1f2f6fa220e6b6889b8bc29d3bebad3d3d1ec6a474f78ba5e21be7037373d30cac38bc53bce4dfde86360c5ab3551ac4eba3de119e2305a91b177bf16c6f06017cc1f5abd2d323d114007e3e1b7b36357d0fda88e2521d614dbc53cfca1798073c8163381b35c4aab2a2472c6b84fe4983df246449d1d32d30d0a787ad18cb1dca63fd8057123d7ae00e18daef26cac84fe7bb037b04d6e37d4a0f5dbd0524f1e8d123fa80fa89de7ddc558f6c6982a2d6093dbb97af4ad3c3565c038abe2900570c72035a7e027e5620181ea503e672b91c584a882a1529b4b4fd504793653b12b26fe1ee7d653b9a169983ce234366fc8c1659f4c01e800170014d9e6dd12dcd5bbef43fae62fb726e85cc2d5595a206f46c9648b2b7947b4bb9a59429c9f407b8079a075a3062820cc460c1c20bf385972f47d081142528c3e40923b628f3250c094210c4cf3571fda9fe9e7e9fdb1707f5f594fb8c74e0243fa31c5c913b19727f0cf919e5a08b5c4936f04da65247c69a4e28115417bcdceed4f0871632a45f47f7cae48eff721f3165f9bed9d0f78f3b4f56ed3558c108b27cc8449636747b1cf386c4ed38aec7874df52d379b6ac3e1078e4d87ef88e9420891238f87c90f49847932041725c050f1d39fe4f1c88085264f6e90040b9428fae97fc109f70531ae8dfcce5c2a72fda9fe9e7e1f2144863ce17eee382e35048c2c90d0e5091c18613180149e1082168c80e80934d0a2bef0e5dac0ef6cf36b5389cafdfcfd5c7faabf875a2ed5638297e3c550e57637064472c135dd8761880bbfb35071f0b1c3e7f5bcf750f64dd7d4ef887577f77ee9eeb1093833e6c27f375638173f862a37e789dbd907a1150d7ced8a3dc48280b269934936f7fb6326ddad860e42b7a528b17d858f6cdb0e8ee34f830bae3fdc22bb906b85eb635c8c7302f8e2762621e7d196f8ce8c9751f33d5713935d73cdfde6dd6dbcfbf7174cdf67de4453b2da3b8df76f2f15eeec923f62f3bd35bec25d8a3b5d21fee76d5dbc414b327d5fa28407cf466c3ce96fe0249e6f3caa08379807cf376f83356c447bfa34b0111a6f69a64be3b361c3c657b8daf867c3868d27611b36369b1a5f7dcc37d8c8e9496fa3c60d1723848d2e35bedaba7fbe43aaee29df2755d6b9ea544fff7c87f4a7aff0e9649d3bdd27e1d3d7c041ef147375ce5d8c4d65b3799831f986b92db42d714e0032b8ddeb82868695507171e71e254fc7610063868c17c6edf7afc13024e1f66b1db704135e0283136e091bb1b1a1fafbd5dfcd6deee581123188ba78710531b4f8e00824b4508221316af0c39322fcf85f4ced1ba3446888a8565fc088e9314dc68ae2526c156998303e46c8f44e8382fa509d1f651b1ddecf8538722b65d567cfe4c7f4d8761fdb6c8060d833f9a1f9f73383247e5013f0ab3b74cebefc19cce126faabc53cc05cb9cefd4383dfcf0cd6208efc1d506467995efa8b73128b73f22d0cd45338273f62a0bec239093b5bb82395ef45f27d0af9be45be77915fc23d1047fec53e10277ed7d3c47c1f4f4bf681038be8de3f0fabde87efb48faa92ef4c7cf80cf2311b52e6c37748fd93f9517e00e88132a13ea95cd667f07faf63cbed6c57186184f1aa7fd19f73ce392dabaaaa0a03aae6a455555555955152a990077e3c226790af43085093fffe590138e276eda48b16458aef743a88c817e23bfd728b43aaac2fad4d3e6e2be68855cb3a920272ab7b5d7ae8487e4791df52e4771255e4b715f97d457e6339caf25b8bfccb722ecb215a960f373259e229a79cdfb833c43640e09225d20920e0400a3f3dccb0c21363fcc487cfe4a7be657db568e976ddba21b95a18905bef58f7fbb8b4dedfdadcf4ecc3c1d46768481b039a5b921d9c935f4311577e0ff94e67caf2e59154a6bec5e7f6b1e7200fb6d98dc29b20dc7ef8f24d0f797acb05869115469950aede052f2efcd705569418b704634a60baf75edb85a9b3479992beeb377d2d516aa2949668689e661a9a2f6df4bee992686868b6fbd86318e32f5e8eba6c31a6073fc53df86b9ba8e9816a09b2907a4cb63e010f005ce351587b2e5e5cc91fe6badff5d37c25e199a7c1904cac41caedaa2f18ee5c7d217d45e2e1266b8009cd334ff3cc667303f6338f6d335b92cea4efc1249348df04b8cf084b964cbfff56419d67782f35edee29425892c861fdebc138be84f520c06f1f00bcf316debe0707e067c0adf9380d89e62f1b1b70bec6e37c8d772fce21297d1298db7a2872a70126f941914d6fdaba230f8adcef47ce590fb105f4d3cdbd3490c9749f22e941286b8049c4fe3d9d998f18d04c6dec3ec51dcd46babb0559629e4ef556783ad5d3b7c2cc60abf1cc463acb094fa7fa22b902fd34c8fa621db5c954ba484c26d39b68e91b97e8fbc019842ef72e5826aff987055d1b50f63c3ad7645ff3fea6d2f7d6d159c908fd6e25dc5d5f53d200935cf3171bb9fff25573f99b3e7b9aafd0de7befbdf7e65bfa5bba2512bebe747dcd756517cd95651b241385301c33c6c5b05c37484f43fafede6c6e6823346472f51891ef90b68ee76fbefada588fffd8588f197ffa9af837b8eb7cf3d837469224a8cbe49aef200ed47c0ff93d1d0c07cdcf7c9665f7ebdd6c6e28fdfd1ea5bfcf2493300d0dc9068d8d8d002dc3cc937017f30c96053fe72e2c271c346f708dbff08d58f3d8fbc00edb68fecef89abfb0f637f865d207cd4cdaba1a5fb305cd4cb3753c4133931e8e21d1bc46fabbf5ff7cf5d58f7554bde5c506d266a49ff446faada3682fb6bcdc50e36b63ab86a24bfa9749359e07986bb8500d2bbe5303025bf0e2382f5710d8021829453898025f781a520dfc02e9ef6b5fe7ed7bfb04566ef085d417776d7921458901f5bf80638e984622bd90c4f30bf865ed854bf334b8025355252ad73a7a3c2f0b2e4e18e2880465b888f2785e154518910511a8c00b2a5c1e4f0a095ba8c20221b23003133c9e0900b1a58813d4c0871114e167a39e3b19de088defef68ee12842bb229bf2e4178223fcc061a1850ebfcc5394fb11c68bc007cf27d12e9bb4931fcc5307c0fe07d7c06fcac23c8a3c47aebad4f7dcdc48409430ab2c03c9deadfd321913a93ee93fed5fa175b5e9cfbf2742aebe8d2a7d9acdfa9975e7c497d2909df47422291be44722013a59d7f69b3320db68eb0c5610b4c992bdffa99ad005f050000af61d4cf805fc68183ba00b88b04c0dd5bf81f66c273de39af0cfcf2a42f43460ed6c2b2a73483fd03c883d5d2c62cc5f7dd74af8ce60826388355d295c50cc5a4d256c4de5251e956b66673027ba14bb1946c70ffc8d0326bf375e608b53476803815cd3fac88733ab88dd10ce3d159091a5f5f9575089e4ef519c53dd4e4c789bbc385f1f05cc4b9f7a566a5f681439d8254038308a9af8bb55f6fa5426329ae79abf4a57f79cefcccbf5cb18de95fb6d826fb97abc9d2229650c2e695a0f1d5447d76d4c82144de91f5ff94da5aebb4b5d66abfceb0d533ecd906bf1f1adcbd31ef876239584f6b49d619aa597cd2b2c59e65aa34f39d4bd80d33f2cc76bd7d1fbf18500f3d9dea2b946161cf96624094cbb99e5e7f7de93beeba2a94d57e09c3479a3481c9784dc607f13f347e066ed244d5be86f641fccf8ceb5e6c9dbb5b37897392a0651d71ce33cf11e30173b61571aefa9f01268346ef8093384ef5331e995c7d9db194284a7ed96297d100ff91b1158138d57f0e6ed74d72557d37e9a197a3b3897239ca5d1721a9d544d74f5640ffffffffff77aec995553ea496f688d35f94efda499b3d23f7d67120cf4d46cb31a0f874a6f51d0c48de5b7d85db2cc22597c3b9cf8e22f8034894438838d7d586f8d3fa17db82d774ad7d6e9b5a52a59d347f7f547f2440667bd0c06ea091adade340ce213a184e1ae3f1b490dffbdb82baccccaf9fb88f8b12c87c51855c6d0a4797c230b7fb962bc51dfdab9a530b588f77845ad9eafa2a2dc5f1a38d9617b02dab1b051f52eb27a68f7bffb0b5ddeb3b6febd0330bd70bf3ed061177f6e870cb06b80575aede88470cc8371e53b8f24dbe3353e448a5420626fb22a30922a4cbc478bc2594aa509a4209c8e16bfa93d2603cac772699d2587fcb717cdfe69bbc9a707a9cb3b22ada4d69b70b59c7816cf590e9d6f94f6c24fecb3eb0b399be1b44b799d4aef1f283247e10058a2efeaed91e2a94e1a3b42b3b6eeaa1c254fc32397e8f433174b385abc518c1e4186351163cc2b85dccfd35521d846e85f075ace1b677a9fd375bb8dac9a8e84a767f4b81fa80eacb377eb8b54208269b9cdbe1f5000979eb1ab685af07598c7a70c5fb7b3a56bcf7defbf8de7bf7042753c350fb67e8928391de6218c1ed4d89f8429cf3b8692854464d81ea1f1b0e6ef3c4f5effee1f4dbf79a8a5ae4f63f2e52e82253dfe9fcfba37335145d238db9e39799787709ea91ebf919f5000bd109b458e921854a8d4c9d9342cb91501429887a70eff57b613670fb6daa12865065cb3746bbdb484bd19fa01a119139da12c55113a8c8261ab37218a594739ab0ea8de9e32c8e1c9be464abadd7f763b6da7a5d5bf42bb65ce15ba670c72174fb5142626f318c4c41f5af8e7bbc8ce4f50725099ad9fb6dbc9e99c0ce40956f7383f5f2658c2fbe2729a5744a0a91cc39bf9a1595dfb8ebf17227ab9373afbf36eefa2d1074722e5f2f3b5b603ea43143ef3af77716784fa7b76ecaa025b95f10ccad5dd80241f3065dfa46ac49e5b41423a1947ea49b11f9344728dfc21880d9e6867e7962f93fb5e082eb0d21dc6cbab7a6420d17a0dcfe8e130011b78bf04f9a0ddc78c0cd5422c1fddcfdfb73fe29ff1e6f3015c26abab46f5aeb3bb04271313eaed2e6eac37a595ba451a7c96d08034d3b21c10453c21481891e8831e2c7c3908115546861421354986334f1a16a22821b771808a1668155b420080b84179a5fd1c48a0d43630244962d4d4411822340b1c10f93108c49a28a152b86ac144dcd376d467e463c989203cdd4c597df524a5900eb111e5179137e00539560cd2dfc70052c0b209a68385f50d18213c8f8208411194862091a14e900892624b0424485df63058c2bf273cec23184327cc2b5a800b71e3097949f11115e1aeba1c27d6ff33322a24b14b26112c9c9236e3fd45062dc2ee2704ebe7cc72977875751962ab0738071bb5396dfe5e42e89ccf1e43b555795635bb8e02da260b483288c747045e53cfc351aa8dc2e2727250012dc6afbce425240b851b926cd7b6ce894f7cd866e4ee45c14d4e6524e394e7443677f1fe79c480c24c5b99ee21ca5d2ef56fa1d4b5baa69cfa5b4a8fd3cb26cd272fddf7ca7ef11571ce7dc8c51fea41f638c51cea754d29c9373a61c57e073be93133fe610734c4991e31cccb921c28d394fdc9cce712e057332dcc28478e97b2ee43811c9fc206abd8fbbd0759fb877b3cec56e22715f015202d443402f0ab9507c1f8aef44f15d4a7c2a928b2b8490a19422c3ef74e4f750381e8fe4c1c3819fea7f5896a64e9c2725afb864c28ba65c710e66d92216e7e0c3006b0af20c81f0c88a4b712a958a5fe2979c276e2787ba89865ce198989b13e7dcc771f0e07672480e419e78c571e0537aafa6fd735dbc72e58608b7bb72c8397825c3bf90473a7108a3dc0ce176722843795469501faa6b2bb9bb6bb3be62ecab5b1486afad4b223b0b1bb9fefec31670fd7d1fc76af617f66c6123f73b635bf7197b0b779fad79dfe3e1be561d886ef6d7d60dc95746b99bea7aea779febd65d9f59cfc1c67e6e1c86bddd14c0240fc9d863d963b8fb9ca9e076ed44eebf9f5de7fa6e286ceb3a633fab5a6badb0e2eaafa01e72ad975ad95f4964ce9e5e57f6570ed966e4da50cee53847a270e220428670307cb918866de4bf67a17ca7bb1e7bebbb9f1875c4bd7e7ec683ccd866a47eb675d6d78aad8ade7bb7ae425f26f5fbf4e95194defbb6ae7695477dfb3e104b22f3b4aed955fac4a57a7c24ad11841e7021052b3cd122849b310294c6d300fa7f1284fc3025503466901f76b3e567f4c4497ed80d2d3f2323c4e487d9781f37e208f961279baf33d8082af2c36a607c43e66aefe311039af175865a4a83317ec780b090734d84aecbaab4d6bcd7b5945c3d0abf9f38aff935d87e0000f02ee02641fccf7651ecd952020501ff416d3d0471aa8ee238d56ff8f90c9f036a9a34d58c2cc5fa6c3f98d1ad87ee4682d3bb87b2c62a284df2cbd4be8f5bd5abe0769d440f255125cbb80893bb76c2bbad9593df182109279ce832822e4ec6d04079c2654b0b6c3083191ce10a4e8e700520261747546cd0473bdaac354a081fe21b5024cc553a218ae2c499d898e82a3c7c78261ae03fd9d64510c7ffaff4132fc787116b9acbc137655eaed58cd7c4a352f9a89fd382dfd982725af23467a7cdaf334638fb062f4767e11121845442a00804e19418fbaeb0fa01a4fa17398c8c61f9b4f10b1d2d21d7ab3ad6a3c8392d4dd46933dc3fa41fd937d64558ec85a1b8deb10fe33616b91c75912d0c28bef562c486e2e9f8b796a2a7a382db25392bab060611527599f363106ed745d9932866db8b97a3915031eab323933e84c8515555b3aaaa2a561e51f3e50bbf1f6bce99c291ca6615a54899a9598201c5af795c8ec2e4ee7d99b32a124437b16ee3889cec4048a09a5adaf345eda4f535dd12d41831a097fd8610b72d1730a6e4eeb3a3a4ad341b635c8f3784b84fca86d185caa11698769a72e1779a5fd3e572b847fd50ede711c6757f9efcb84ca1497e18d09153f61d94ef7c865007a10823842f762711751092dbc964921eb720a291e737f6a8a8d177aa0fdc67b4454b8e6ffa145c1df9196dd922d7d73cb8cf68cb951cff75190d2eb4139f93f275e6c391f2bb48c37b32c81ea62cf1a3e0d6f08a7c7aa80fd97f0890ecdff3c3b9c6807cc8cd678cdbbd2d807042826cfe458ebc1c4f8b900f467060e283ec2fa7fa8749ec61ace4f764a83eca2052ee74ec51df34bc19eda485b996a862a4ded27a5b664a9784fdeb48bfeba22e0a41a2f81de316e7d44e35c61863e75572fc12ffdd786279c6fe911e28fb99148e94bc6417d9c591f422bf4830ced5efa2d01730606efc325fc8c2e6d72b1a4139caf4e7cb748b5f2298599a344e6b7ec480268d731ae59225f2285425bbf535a32892759f1d4572ce39e7c4d14e5bcab88bb89361b25f76ceb7b0e7bea69b6533337ef1d84dab529b7e702a395c36c185df715008ad2d8c7162f99d0595dc2120fb3795524a291f6211a31ea3e67f0d5d6e77caa70de59ccf0ee4b871afc5f58133c30d499f3abfeae78bfed5671523965ac91c541426308bceafcfc2e66c8ff6a985d9c0c2b0b7e69c139b246badb5d6e2ce9449d8c498f5b04787cd14b3301b58f627c630f66d6db125cfb7f62dfcf2b4d6770a87f5d06747552b46fa5a299753015915fbc0c15a6badadd66636abd65a5b2d66adad9865e9b442238327d042685526ebf560b2af466e1e1ba718c4dc965500419ef1ad07c18342a620686b499e5b07bfaa82cbcba0ad98bed7f60805dbff0184d64a5115add65a5b2da95efa16d71e1df3ea9ce120ce559562d2c3ed079026b650fb42b5fea3d6e2fa4db54022896cdfd2020929d97a5ab3dd82fc70ae0292d1ef148e8a3ef4d99155d6563cc41499f41493e8fbace61459967dff9c5996611996cd5aada7553b695565b984c9dd4b02a5945a7a5974562320810daa476dd33ae79c16bffcba7fdf2f87f5efbd69c0b06ae21b4f60e472681ff17486649af6fc897a4a952f4484934cebd7ca450b86b27d0af3e3a20540646aab9ed2547a0a2d554bab0553382ac5a4215d44c228add5d27b6f472384d17a7d8b6f40a1b8a974f6a9bea2dd9d8d44cb507dddfa88a72304793a09c7a9bab3749a76a73c9dea8bb8dd3bea29b9fa2144aada4528779d8417fb68a64aa772721e8dfc70ee72def3e8bc9ca7e3e4ca97398ffaa6210a3d7ab32ffdcc5b0e85e2d275fd0c8f9a0a032ad9d284daa9a7b49655b369d152a9547a94f5d6b2ac9d4a9cb3ae6d072c034a4493fcb29d3e3b62959665fdc364d5584627066459ab7a854d6fc6b89e9f174eaa64fbf467300c623db2929530f42f562283db6f29a603d1adf2ebe20b30667e5e3841e2f240b69b921d92d492d73884c811adb1260c7b5a354b318c3a2d1539f265ce4adacc621da699a2dcbd3242349ee43877396e882b5f5ed37dd46b27cd8a186334dd19e33bd6a3d2f60885fe8585d0218af2cb3d9e17a6f8a89f18d0c428566140f42156e3c31e1df5b211d787580f20ffe5f6776f8b48237ea149f1fc47f1fc2af1cd18b7f333229a2a5842154fc8ef71916e42800471ce9f4798db5ffd15bf5338a68d0f7d76484aff86cc25613dead76a63cce1f2cff89d67a4d775c5ca5e385ad25e385a5f618c74b6477ad2aaaadfc648abd09c1f638cb665c4f263a474fac0aae484a28696a855b5be639fb676d2b27d0d9fc0140e9a7a24dcd83b06e4b3a38a36b3b747c794db33c3e8f63fdca6c9cf0b1f8ac8f42b06df949f173eb420d3ef2e90ab21448e2e6be1576a2ec7070e5358a229d9c2cf898c919ee2fb973eea7f00d942635fceac87f62306646de7ce1826e29cb54744883818baa9a00a2244ba1151ee5e142cab2f16ce39df690e1504cafd79aa72a2bd6bbab4c6779cf65d8ffdcb224dacfe9bf1ef539047065006c5e2ec2fad17d6f4a3bed21e1d5996bd8f571ad60594d299ffe978f14ea9a5efaba59d348c5ed38d524929a5acdc5329c82381c6f15742f6ef7a9c90fd4d217b046290d8654aee5e19eda43deaaba86d73949eceb551e6765cccdcec11b326b3e844ab2d770b49cc1d87244aa939709e4e0ef759702e87a88cef748ba3dcdde4a6949a2ead78d05751fae6534a29743aabad83ef7d20628a8e588ba3e90214fc408bd923e6097fce875807221ef498596e27e73c62116ea6182115afb2faf7402fc77cac06fb9d253ac00c3af9fdb3e28215fa4dd45634edde2f44798b95ecb95efd0348056310d9bd2e9625a5659ddb7e08b7bfb118baba4747ad34e8038729a47439444627d2f22247ae8f0f738d7f81c9f561963ce6fccbe7aca4fbec28aa2e0416d79a936237d06828e4eb6b5238e6ac5b27dfba36ced04c2e879352c99231d6f59dad4bd22be00c19774812635bdf5f9e8449410b84aaad08228ba7b47d1fb79b0fe5c087681cff27d9bdb9ce5340e34260980f9de0763d45f6194e72e74e68da49ab81120e39196a78a15e0e98619316722b36b0c849f5cc3961fb9825ceb5921f8e86f812c668880c4685182a0f5a0f6f4a7e8565942fd74a28057982a462d34d09c4c9c1f540e3f8ff408768eda64c079458717f00915cca64c95dafa0d24eda355d6ae97c91cbe1eea3deee8047e7e100c560850bfd9a6ed3703dea1b66b2aaaaaaaa2285b57a7b74795366870e2d19be104ce4ee0d21fbc3d7bca5842d3bc6d97e4d17523b610a478a52d9f03a97c3c97a541fea0b230031c5a88a2c99263f232ab464f948ac70929f51155754d1457e31ae65cdcd48fc0a6236f457d5d6f100b72025b9da9418b2f163bd12d68695b02eb5ac886d3c9d3e9d9e4edf9079d88d97e3c6d3894ca8dd981626fce04a7e3ff8e2075bb884e2f67738f27b1c85a706eeee1d90e284d7b27ba715b95dcc9e0222fbf798b2bb4711c494ec6f27012120f3b897bb2be6e1bcdcd1048400ccc3799b35e5979f9668fd06f5c8a5fdef02a14b7e4652146518f23392624b3ec9e7bc06faf273bc86a1ffa1db3b8e7c295f63a72c776e9ae3eb9c946f002b6e7cc873bbfa6aeb68ee9bc2625dc2289f5896b3a46d8c6217c5b6b11e3a105d9bfcbc1012d3c32667a58cd6c41e1d994d7e464264c9d85b543b613b6811a5246b5dd226f965ebb242a6e8514fa4b5b5d4b2346a8298fd9276b2646c85f05152a670a4acceb116c5b6c7db82b5f8f1a050a8c8a41926dc2032ca57755575a332c772b0b408a36ff1ab97ed248cc99616496842b66d6d0f1a37d0c8b4dac76a678a813847df0f1558461525ada0078f7aa22a8b30b47a315a578c51ca18a58c0faf644b5a15ad90b0ba8a224b9822dd307b1411e7ae0652ffaadb8538b3fee5da7398750f88403612c0fe7a20f6ab7dba01c1feda9634411fdb7a9000b9de6e4bae4d87f793a257ff5cd6023e77ec8f985a5fdfbc3cebed48912af68d1f2ef537f9c0c139afbc0876a408027cb8ddf392aa72e821c72752b3204298d81f40e296b831d9ba888dc87ff932824be9807bd44f71d84c409ef94c647f00939f287d20a5da86316617e2f846775ac2aea08c2922f40f967f513b69f49a6e93f90f55e7345da869a7f8b067339f6e379edcf7733e4a5e0f690e7733468f739287e7148f30f7bd4583c6bc01e56a2fc7f56fcef78f287708c8f2df757dfdf9d33a276745ffbd7bbd2cd36cea43ecbf818cd452292316a3c402c52eb4d602a1d6961e3667b52cc5de8d276f7960920b2a98a0a48c5a45e4d2fd0764098c56d3e6c7051554e806a8d517ac3358462a3946adf735dd2c9b99e1624bb43d3326d5e5e438772535c301a4a8e13158e1be1d488c945d878e919ef64c29235568592d5e7025dba7b784b387580f52666782f4125d7b38e005541ef7f27b1c7d5abc20894cbfd28765dd12cb6b2c5bfa9b9f111130c87586c5254a2d7b25b56cad33d0c29891b2cfb0f5179332ccfa5b6bfbe1dccb8072117a473447d0c0744dda49b3814ea94721eda439214218163411b11642b99321fb777ce74ef1e482dbd734a78c5e96b84bd4d7f049fd9882396440b0ed47c4ea7683e866f9190de18422a1085eb27d9ae58784227091e9d7acd65a7b74f4602f574ba9cf8ea239ab4c6624cfb502a930d3edc70c2a1f38c82db21ac09cc8c5006a272dca0c18bf5dc09a45d4228da2c081511455aaaa9ad4280a21a328885ccc0f9ef05a86f762eaeb5cbd69f07f8d0513997ed3e0b9e2d169414ccbf01cc35c2b1b9a0c58bdf9ef63d320ff7d63375e70abaff4c9f064f087e30fbb13acf1ad9b3a105dba75fe0be84c371d56b8be21f93c3f7e8723861cf4ca8c91abf71edd36910475998c84872ad34f4273100232dde606b49c44cb10b3c1b3dc520f3e4f191c3d465784c972075df4ae80af0029318462c464ff217b37d9a1777e34e7ef3a3407815640d390c393c11f0ad91f0b2c5e160c80c1eda1ee6121d4045a35a358a80fd5b5853c2e68a7477139291c3dbe53f301c0d87e6316be01a5aaf0d769250664bdc516a534628cf5e898d1433bcff84a81ac75598c3398e11d9dab96696c3d84db09c570b578467e4646d420531a95624c7a0ae403871a536035ac45048c6f8501fd0062b325b3c1328b7169624041849cba904e19c9623c4331a0213398888da36b83b439b916631a0b032a72e4c697d28d4b6306a60b03da21c9cdcc4d0985fb2700b85dc00fe2c8a05102f5423416e39ac780523870e79f72db6431b60f649f5ab566fd82a7533dc65dc5b92a89a753fd0c3fdc26aa171d7232e41863fc50c9923129c89408b9664f8a90039f92a8346df873410b15cd8c00000000d314000018100c07c421a17038268b91323d14800c7ea03a66489ac983912888911044518618648c218610c20c119299a175005a19631f24be8af45ff9ff647bb3b1c19db8bc2f2ffad87e6b5c1a84e7e1057fb21f02e8db591cb35b63d55754bcecf511443dc47c0898a3cb834d985629f338acc6b918603590532bef9cce7efe48a7c729128bae8e24a9aa35fb9c8db9c763962618b10c9a179f4557ea8b423688f0b07e5ed848498733ebe040c16eefdc6939f615df3e5d3750e57ba13e32a148dcb77434fd7097f0b800317fe19d0d8ee2380489a4e3383e5888817d44d1d4857c0a94da877a45f411b6148ca3ae3657e2365f4045a83540b7815d8cb332585258fb8c8da11ebf3a86364ec2e65268307f8a324d8c1627996ee32c5e648c634a20ca6f47e1e0fec529a7969cfcc5bea4d8cddcf166223c49d20d07491cac8beaecfc7e3785d1b48d414abd11eff712a7f779d5314b06b0f573dc995d48cfaa6c5ab960af2575b7196c63153a85c746d0ecbc5a0b41d2f971b6da6b29ee70c378bec158b40a25313638d6700b89df0ff51536506b507a1d9b997a5683c5424c2846e3e8f3cb03c6a7888ad72bc4078d4a85a7f21544de355672df6851ce70e5470fbe892b0c3947b7084c846df25df9fa82fe90b5dd374703234e191afa69afbda44132480110f8dad4f88828dfd5de6b7ec0c63307117f3a8e7ca46cf367badf20aef1c5ece2eb49c06066c27ce89bc7a142809102173c8088c4c8974b26e83ba1ff071068671a0340401c5c282ae32c998a9a04c4a03f33c1a6d58131e8cdd55beb08f23d0eb52fbbf3e7479ed19410c29f3a8fa1749c9e7ac38851a33b0b3ae7adb7515626bcf9c4cffc87785bac7379d512d5b00da68b49aada0e2fde1cbb5101430c54f07044c8bcd0d366a3440045651dd51214e2394d948ba4ef69c078651ce82c9350b019b16256ce3df5e6c041fc928395abb8684055573adb1292427d89e0d1bc2758a3f5a318e7e23db676b84ca968ce45eee6488648081af37549ef69693c0d1f679041e76b122e5abc285553ffd269e263623446b32e88b37b4546e4b38a41668ee810de227ba116743d230f9b2fef698d949996ec2ca1089ed4d5c3988aff1cb861f50aa41ba0ec1b16801e65c49f70c04a25938182a92d5a49a7f1c8fc1f1f2ce3065d2c68c369ce24042dabc652db2539e7e91bc6c86249e3c4489de4467818d831f070156ff4eac203d5970522036b8af062ccf5a2c4124b0a171d54a58dfb55606871a009babfe08e809372e7830a4bb67d21fadd2c96b66d690c059fde2451daf1e7310723ecd6b66827a80d6c22d8b68d62d181f8c91b995b85b43a2d228d3bd8ce632d934f2eacd0d73f29fdf3204a77d1e238816dfa4a2c066332c2a69b3cde7f3ca49be861b346d2e2f9720e73c6bb21150f695c65e1e080a225d061feec1ab72ce71bd8295362344808cded7dd157f1bccd7457b5880a91f396a9bd857244ef197ae16dc75d75a08d7df06f9b237cb17c8f887cbf12ddca199755b9d578551a462437f283927242ea4795fab671f91204e852f73e4906337d47f2fc9a6ac69b79122ed407c83a465e111d5e75653a0224151094a1bd8fa4d46fb50c04f26134d019680b779761b527a73acde2da847e67e379093e676b7c76f1e6e55891c56ea9947a7cc4544e31759d15eacaff6a30d688c5bcb6420dc45756242e1b83354c18dfa4cdbe4956935eec9e33c0026bbd008059ee3143dca4ff02bfb33f359bea4c122ae604cbef44310bffc914be0a2bb31b5957aa6e227b4cf8e75d141b63e092600e9130124042d608a7698e7eaa649aa060b995cd28f45b0699b3c726510d24d7c9f5666db48496af7faa721416c8f3227f398234df7a907d10721854b33271483f8abffc71a3b10de6edb64c51702e12878a79e27ce3c970383509ead16913ad4a853207f06efc8da2292235be0de75f97452f08dbb7e086a34372fb3d333e0e68fbf387fa66aacd9eb588a1f8b4fdb4e9b49ca403d36c94ee7c10c7cce859b350de2ce02f3b5a86332f964347cc4db450c26e49a21b00d4bdf1c2872d9d74149375e1a600f4ff1df48ef5e54347b568db18ca97db0e33a0ac0117d88e6484f750847761ed6fa9e5d10a53223c35e988ee7fa614b9f4e2b91b31bf136c7d55c12bac5abcc750dd44e2162eecb9d0dc1c04c5c8922051a05fd6bd9f28a10e333fe27308a51bb370fcc727dd94bd2d110a56521e7de4b273c4a50d1369ee8e9f618e9b0334e54509bf74c165d203d3760081158b9506d9d6553f30ebec608343a96f4726cebc3234f89272e716729d5e6f762a913726e3c820446b94721294d8858ff7b833f04ae09614f6de90f04359497c808700c10c07c05e52636b88396ea5304c3a6bf73c79518e29e4bb63b4d0414c7060f81004a327611bd0d401f51b0e7c29026b181e16706361a8778b5774f0089ec23c57cab3a905a0bb7d794283f1431d474018091e51514b9b05c34bec0df3c8235dc22182949ea2e6e9879b273ad6f601d2acf64c4718e9132d983b94abfce89d6bed6b4131086ea44f40f66c00b76828c40130bbe3eca0e68dc9484b46bb761e9a583e06aaa8c50710b0504fb4fc29a1b5b30806d65fcfc52a087daaaac624bd05e9149ee54f5249a2f7d5243d5eb49900b7b2bbf1c5aba7f0e4c627d7b3e626d459c01659897fa48df12eddfc26539f2a1f4952f2b72efba13ce225d3de5154a6981234c6f45abcd44ce916a02f591a763c03c8f1d76b3073c357bb932f76f65b369eb53b4cf7ec90f21841bb9402c828c653ca4a2ccdecda349fa066062283eff17b6397f01c131f2f76cdea4b0bb6568b61b93a464ca6807c0f28095c9190215c22455aee9e4468f28a6855345d0a75107a00e2d54c09d9b81966ad38121e459304150c2e30f7e8dfd3556861174fd8a60e7aeb8281fb8cfcfc5c319ba02b549791686b2dab6518841b0ee11789f393067fe14ca71225900205c628d4fd5dea2ac50a6461ddc03aa6451180d15f54f8c8965aa406b773339487881dc94975a9005d7c0f6de81c834a05c2ceaddcfeecc544a1002b464f557b50c134bffa2480c8f212127237f81a3712ae15d3f6a9ef9191f0220bcc6f86b642287f878257fa6fce9ccc4c756520d993a4e30c9e588d235e7b77d7a860c0637c68bf0c2f3a8fa482c25df560183010196cc7ce291ba2cba840b148ff7c979121e8af0dea7011b748c6535be99fa4bb1690e13b8b725eac7badc79df8b175826d4392dc4307df7dd58fd87a7ea42af6a58486e4651f4e178747a762235ca0e29c419bff1cf08ca16476171d6fcbb411ffd3cca36b0b9af1c53daa869190ce35a3b35c037b1f2db2d7cef681a85b60310d4189f205a67f031d08e393681f0832dfe418489a7722b2c76c2ffb71aec8dee47c256db205af8e753d6098cea914237328656bff0a64a9f6a373fde1388c5d762a1a03d28bcdd097791aad0a057c47bf40910fe44f47a7e60503abac066209cab8070a18e151bd2f8ac7b27e53e4dff8b6d44f3f56f1325a0a53a4516754d983abbadba2af5a8444e1c3ec03f9a994fd2cbae2b73f7b32f916bb6d54223a4ff1ab16aad00ce9e24e2a6758fd2314a73321d50768ee8a2ac0523dca0ab746c9efd293a3251a53d158d024b3641af5297293f8efb9861d271acddeb0f1301abd63ff71b7179bcc1f651bb807d705f20afa741be3346268c8a7ae066b5312c1985eed72e5be7712a06531ad5a2691c3f8e4dd455d69958e383d2e14b82a2e8dddd4e82652230dbb4b6f8777702429a6ffdeaeeb3f44d21deb9cc28c5c817d906a2bc91249547a8016a31b0a505373d0b7bb285fa8ba5e492c7226058509680f5eb0466f1b74b5689bd387dad58b96d1170cda09a7b6787aa2da4e9462177805fc8fb67af2aac128bd592553919b3b85ef1a8e66bfbfeda4c2f8fdd65d60faa80ff83e7da19020e6a40df2932bcddc8a6073122fa345fe8a418560932067463db5f47d38dceeaaae8bd41cda6d5f5a9142a1569b4f735a59cb73ab7bf6f96687ad6070515f4dd964483bfaafcb9ece7a4c43493f4f81f0b987cb55dcf558e3ec391edc3d62ba0fafc1c270b9b6f1526bbbbfc30e1b9e5eb30ad32d166b38e8d7b3474ddab0ffe79ce597a200bae7e2e3afde0ed3be23606005b043ba36431094284663574c69cf64c8936fc55bf6939d75ff38afdac2dc8e376ed3883bd0dfff4f596d1f817498fcb91541264354e71c84c90eb64ffeccbb83d5870316874481d752040ad247f707c7536166a94974c55051469191f06071aae2a7059edbb3853c38558e02be70a694aa4ea5dbc1a90bf5a37488e622a1bc8dc4aad303ea7dd8b2d17309c460192f083cc69a3704e773b76cc54b695ae46cdfd4d375cccd593f3619d6647320738a101dffeef97216b9b8b12aea05ae8257fa57d984a0b99c22a24f05a7b7b7f09cb19aec52d8c1c37d29ce06788a8345d30d5687c647ccaa336fd0ecf663c058f241c1f56fb4f66d39ba7621111d7af8ca1bd6bccb538ab3cb4303b221eb371248607332e8cc7627c08eccda8d42aae9d6ccdc49f352cdb4475c7fb49afe56400c0af56d19034a007eebadff20da41e757aa6dd8275ab47de6ccfc59f89f49f080660654b0c44dd7bb1aa847fb8e6c1e277cda96a4e33c2c152675758dea557809dd2fda2c91e8edcc0df55a9aeb4d015260b5986bc1f51638b79bd687c6dd42f40678181ab41d940b3f4aa861521ab232c032712523fd87d0f09daf05c5816f08bdcc6d5d173878157d62262c9a422b41738f5fdb42be639adb8d19e9aaf3513140fe90dde49264091bfb4b15481619c7fa2111a2956d1b5e411149131d78b2d6262ada2c2824555969c2d14811e2e69a2b74ebdc620ea6d7dcc4a02e4a6689a8a2c6b7a0f8c842ee181e8b1f1adc37aa1d87070f2bca53cffbb0bdb193102a8f312bc9cc1be038ceea54d506690c6c793f425579760311f9ba22b8078425af7d69573ec8fe44390ad4ebd4a15d484f11fd08fd53dfacd98bc1363a2e22701c7ff03ce07f0895ef14c2dd8d0a7d3c391bbe6e94e8762a4bb129eaf7659fb1735d6c8d731c268e5f979fe0c20638138b090b4bee6e03b56313e665a27723a698f2510fd0bb1061b03d2e555100980c5ede4abfcba7c7489e7bbcacb8aeb226589122d6915a4ae1e03b244ad12a9a4ed4949e40b84e18b03e82d0b8b9e5c4c605016f662f2115eb606bd6d51b84dbdaf9a64917759ef9f551abaaece4edcf5e624b15e22890f14e39ef2e9c4e27945c72811e11084c7576c8458882f4cb468fa6982c2eeb41440334cdd780f4dccd30870459645839a70362904858c4897cb0c7fa95a716220561eb7a21b19962e5d829d0e40869f569a6875ac7260463e0b662350706cf765815403e1c720b39e16733a504d17bb42b27c810a23d91ae99e35614c284ad98df94657522f1f678a6b26f9a2c4fe235208ffd2341aac5e7986fe5696d3937410f879e2f6106590c55fcb91e6a2515cc62771ce2079ac185b946bace502289ce1b2619f9d59a08875d8c94da0d3f8da91b20b9daea580f060b48168d706880ccd5f5138a96444a3da59f4ad1234f15db7252a6e3600636580c1e5c3b2cc48536a32717f000baab305b9aea6089620a2bde53934c70044e63116b2d7a0d4d1fd84aa9bbe21bec73c65360ee742338a4dfdb7d43c471d18ffb902994284386843c0ef67d8f266c07e99c424de45525203b77520e3d23c8f55c5bb33411e8ef393790bae634eb605152136396a8807f642848178d7e526a438d42f40f9e4e7a9d4fcac4fd65dbf3a046c921d9e5b4efd10c0d805c496120de42f38d19827c6020f355fa10d2cdbc36c83e1308213da3a11bf0d6a2f381f80aa1cad69c02c880106c66088c8741c42c57dee9d7b9c3b7e599a0688d61cf0b6081dc02e88d1f24005a2bf07ede708c8a84633f655ea74f1423718116b3142b8de5f609d21e712e58f7007f738900cda4521ad2d36e46c32a48d80778ff5801d74478a2a080c3591c359f060f06b23864aed3112985e2229e06b6662c2ed005ecb2581943e68b2820056b3d1e9f77b35de9ef9a65053d4bfd4082a079b4c23afdad8dcb8a9d6ae7b26328fedb6bfd975eccd1760e57dc623147ad3e60e11f942d1310d5abbf1ca99666cb25bc3534d9dfd2020d70c184f00547ef519eaee528be7978193a654e5f70cc5a1438a80b68d77691780e9862d10620bc8f5ba633008b902f7bbb2788df1191c0cb778dcb883a27659c3a13edf434ce1350be1c67ced72dba541f43bccca5cd16e77e7a5ee6e216eb527dd8650b377ada86d0be535f56d4e615f7311634c54ba67a070230456179f3a7edb622dc28cd6e7f020c664f68a41b4c7e1449723ca200162e46bc0c45590d4291979bba2bcd2c6d5a62e9b8d4df2c196666648fce55f5b5d1dfed3fe59ea23d3aecb96ed09ee826ecdd8589903771aa7fb507fd4054884fe1130f1bea4f3d877e2dced7a2f6e2f6bed85e381041cdeb649f909e1baf380d9351653b84874d2fe6146e19dae8972871a01211e94dfd27c414da8cdefb1850218881607c0f9ff1787bb073a4762d58678c2f1bf2d54179bc471f03d868584367eeb6264ed81b2c6afbaac5f64a6cc4ae795f970dda5e8a70ea124350ff824cc5011b84e0442efe2d732d3cf2c606cb11f626f3026426ec809a56e67eecc2e39bd65382b68482693918ba9a368fcae96cda9b72ddc1bf8cbf5e4778bc32aa239ce091a3cfbe9b429e19dcdd2bccecf8669e878948d8e9b7be67baecea44ef6d14c2b7762db2ab2dfa3fe912c5ce734190531f9f1df3f602c8639f76c67dba35f7cb1e19dff8539ed601af1b8e381eccbb5356d6cb005c985aaffae1d26cba313760615fb6b1309983645873c6a89c5fb236b49986d79a6f4cd4944d4e93f1bafa5cb7294341c45623ff3292791338af848e7d5f6dd6ea1eea2746bfdbecce7fb8d5f95be1c4801d771461a6772726265721248437ee23aeb58f7d488c6df06a03bc7928dcade42ac5111ef7275c3c298234674efb6b954cfd44d679aed0435fdcac9add4c1a9b74abcd7a896699ff4923254120dbecfc9011f5d74567368a711c4b203119a95e1840b512dd433cc99e39ee24fec4563c00d4ae7e02685077466fc002cff2aae533f52bc94a881b1b16285f5c620ea54f25de1fed0fbeb60f79c05256a2198c01f68745a254ad44afd4b24df29c650ca750b7c28a32b7439b56ecab02ca029c392847ff30df825295f30cbb1907fa64752a140465b06603fdea91b14abf2a4e03d2a9d217323d37748122729cec06dd6ef1988c8c30872b0338adc3f41090a2492ba9a87a4094f0a9315b047e7cab11b20eb06f6c8f19ba08f8b36b84be36454c27e9d22a93b45512e9068341b5774ec125bc5eb40f8da9b9030b0a09bed7bf1b8880710f099fadf72f597a98b9120492b32a79992d9b641e7cbfecced8db0f7580fa106c752ff6ec7b88a5a4d60ed6763a687bae0044317bdf491045d80773a92cdc0ef72e24ab5f2c2173702231b93a5835730c3488a104a1fbdbdcc5e8e2fe4fdd9f92213a064346cfdaf7038ed7df5ef201926e28defdc12d234d83aea3ed07e7558257e9ad2241bee09270f92538a593f02b52fa19be5402ba2f3d188a38d0b78b2ce39bd9dd2911a599332895a56a01eab5095201f0aee12e3236a7eab5b8cf25d1b65e07071455d0c8d27feefb839b42ae7d8a0e6beaec715f4bf78d56faf2a6c818a5ad24e5263429caeed28e5146a2a152b7d0b1a53628c5c22100ffa973cacc0c60fed8ddd5f0e4cfd019ac3fa26809757ba880f553e3846ff983846fa64fdfdf5cab59f63fa27642b63315d35b5ecbe4028db358bad1477482dade3f29c32a488294aa1690d47139e83418e07f58c2db69f7c2a50134cc3c923d94496810c4303bed0a8522b1988b7ba320766581382fe914b295dbf80cf0ebb70f409a129137927d073795ca8a4efe635f23472b250a421c59300400dfe99614fde672c3f853b517338ce686b476627b8064680140fcb3b5afa28ce93539b587220cf321000ea14d56a1a30a6cb57dbce7d503ac547e57c03b0015a253b4112cf55eb39b9aa24f68d96522e77ca0c84297b0507d3695942d5e80464c25e4b4124b24254e6af2f50195c2ad75847bf40e1731ef191741bdea72c2f497d84b52ba56e973b08b16065c926d4ca70e9107f012702e57ded2434276660558d1ba24f441573c7284a82588302a82715a81b1e5e0428c036ae0d1a9bbac2dc8406d22d1c3cd60613c3846bca15f36d2090a9c6d273e583d817d6af15ca2241bc69e905e4721a593e82d9e6d735f136ea4438a42eeef037d1fcffdf9e0fd3111184e7e8d1e64210c7162865a5e7d0f1b810d3b3f062d218510dfeb92159d04a3394b40335d5a12d26149b4925612ca988fa6f3bec000e389689c6cf639215424dff8d56f8116b9b84900950e9c87be77c7822f4448179f32118402ad19bbb5b481d1e70ea13c45eb2b84c6f986064708248b987cb97e119f3017aed705431cfcfcc7cfd56a0eff0011fe4fd98d8c7fde9a0132622c0f0885ec55f5b014bd9a8653971475e71c04e80b31f1c036e0abdd8f3c8ab82eddc0c8bc7a4bdaa1324a6b035d5c5328c95ebc965b5931c94e7e12c2d100d5f906d7b936f9046c7e3de370f8883e76ab0d8a463e32306468affba7242fb585f43f0f981b882c93ffe65e1935e08dd9f67d49525f760c97d5e3362f1e2136b77e0d193dc32c3378795dccc326193af02354fd9a63694f000b701a4554d71ae9e24220c1117bb2b13315cb0cf86cb458cdf6a338bbc4b015495d9bcbd926582eaf3550497515b6ed76fd88c449c70b99082f5afbedf22ca316841d1c6fe53e9379296d1d24efb09831821459e40a0b3157b622ee6587a137efd4a507b5da892be2f94947f6d90461c8a405d45b05157e8aaffcbaef2c3174025b17f7741c3ad433d72004c6700875569f1e93f800b70033e848c1638059c3630dda9c32bb5b87269275dbf1d2b3c329211ff9d456f3d390836e13385e74905dfaf2022dea4f4a9dae5aadb05f7bbb08af7a7e9b4c67af675dc94542c1a0f5e138af862b2536f3787530dbbe871bac32bdcf93257731f8dafa3a79315b7407e00190672590a6d74080fc8107ca7f3384eae4d9dea3ad643f3512a5ba2baf46f890fdbf750fbf678ff98eb9506ce326fd792a3375b7b3663ba819eae9bb53fc9ce245ec85178e0cf3b5399832b44c0b2d0fcf47ec21f94312c1f0a3e4d3006f4379387cbef1b63225f6a0cbd99411a55aebdfd5f2464f58eab423a28fb5b869ee500a0e11c577266870cde9c45dd4e9819926ba1590e95196d7e27f957afdd693ee31650e25f4eb3c82aaffbfbfdbc30f51c6ffb9abb768c7eba3b48a5e7fe9ddb2893d43837ab44216f6db3fae5576fdaeecffb9d7a5509c29322ef953a979fae5dd9ae0cd69784639741965eccbaa90b8eb0b0fc6b48cac2b5ea50b6bfedde3ee14314bfd88f88ec44a5bde8ab64a458a01fb6fb5af039dc793fa92f5700520803616ddf855c14423942c1e0626a4d77ce31b37beb02033a1438f802eb7d36cc81fc264bc224c77e4aaf4725aeb7f0963a9ea82fe4d5cbbd813060187f55923080dfe01ca9a78f3546e2c77d7096cef16a01ff79d2095ed3a5494d593050b4441208620c4373399d5f71bc2ea4c5961cf67c504c64bd0b85ff86285c457402575fe65cf98e6238272f012caba43436fb4169509a3bc3916de7aac2994156c5deca0ac14eff913b948b3e6832b93a3128762d65dd2945cbdf48c3bf85c9e1b3b04d85857bd3278e9f2e5dd978487f8c7292343c305fc0e074a7081c7b45b3ef3231d3f9025300d125b81accef47802a8f2a35771a65ddf637b486f3fa93601e544d9e364ff5cdbeb237329799b52e494f75573f9da25f9fcba2fee73c3fd936fd46b7a9f229cf7f40b0f6382b251b2e90d3dfb888d721d0bb56dc3c3e8f932df94e6f7e1dd079e6c3fd1ea9f6d4035f48fc4abad261f9864422e1f40cb577c5c5f793c060bb072dc34e612719831537801590c9459ef32ec24a969aa7952c4ad08b153764707896abd130c0ccd7803acb05e53f6a0ed61afa74f687136ab1d85c54399b85dba9aac95aefe5582b555b0659f6630399f583ff5a3edf54c98bb1141bc4211a6271b506faf4d4897b9c32690d5dd93ddd2b885d9c81bb88b276f148907b70ab402312c5b52801f44ce26eb3b1b70d0b262c9b39a6127ea1cef6f902a68acf7be327e1524c345cf65805c8f0132115313fe186fb4b6b2c753a3b7417ce5c26a2460ed614ce2e09e95828af6e459bc5c138a7c84e5ed757f1347fd611c2cf7b5f7dd500e71dd43fefdf8f416789a0ee95d72857c996f6b38667a06505a12ae23324fbaf48b8c911303c02892a65ce3b59aa8fe90adbeacfc5a477b9033571d8adb4aefab2befb0e72213bc89f9c93e286ec5ef82ef4c9a8bf784d0f46ae2c3afc80dbea495e9f4b80a7fc8533d65c9ece08c37f24f2df0a6bddfb9edac03f2ee90d5b58034caa5c6b1c6040039d72ad072364581e2b3d886e94a19c67933067b94210f4c8eca06da47200b02c15e03671261b74551f7bf1957707aee5951c7d7b869bf41041a2b56404da4ae308eaf2eb02973d9282403533000d8bb34e2f808273ad7e9dc5bc560b13551b6411276a0c003d1680e2699b94bf60d9ab4a5e1b0239b6f3f264e7079228bbfa513a9b6840743468147f82cdc181acbba332149b49a072f95a7df5a02201bc6348f20e9fc8520386150b78caa3f42188dce87aaa76b5111e788c0d3cc41176b88a3d7782ec310a81babb2040b2ddadb44a0eff74797d6b040bd7d2d392dae6b30f88f44689f6224d7d4d4ebbf07ceb7415a3c2ee0b98a506c570ec22af06b7fe5f086ad78a5c22ca07c670d84cea8993644dab8735a487bad7aa8fdc1704ec24e2a6d217ff5744fec1e916c84d46d6b4d8c3c96c3f29aa0664d71912efe7feffd60b8733c7b4ed19c30273b3407c36e7d2ca4a64df91a9d2a60f40852a7c0fb13bfbad52414128212347d4762ac7c69a534d9a9d7dea28443f1407e3dc9872fa2839c19f2b77ee2af3d4505a5697d959d364e22a59451fef076cdebd518e147fdc2e187d7b048e4ad570f6166ea7a8e03d33d4e64e2496ff638c61d4610eeb0e11c50e4bc2349239d0d95d8247cbe8e02edd6a865f61fa09d6e7af5c06af29aec4cf72da36c225e7e33b75dc259a5abd863e55d475aa40294356adba2071514572309a5150152aa00b80f9842a5f2221456eaf4ebac23ac52c9ecdd000e96bc8e3666a7520e8c2fdfaf2938340e061fd6d3d781c9b7a419d5169362c53157e5447a07e34ece5698f0168a3ce91912468eecd4ab1eb947b630a8e6252e9abe37548285091bce4ffc0bfc786478fad78ffcfdd997b4be970e68ba3b864e0493a23383a02d3811d4e872532039a81069e4b30ad6fd718534d412977c733fe254f66620426fafb9313b41386e86fca01563adfa92dc1c60474f64471f425c27a10b563efa9e1cc98a404c5d76cdb83fa4c96dc7ab48b23232ee92b50348d127e5e2dcd1028991598f2337d62618156a05426d0ad4e068164b8b5d640c670eefb0530648cd94df2e096f956fde95f510ced279cc9e81e15f4245b1bebb4781a288f4019ae4c153f572b866cf6113e94da0808496441561779e65073187c521d72295893f26b8015620e8ada81153e06a9805bb0c584359c0436d02c31ba3f4dc20701381c1585bd4edea6a8455aab07188f5704d32e93ec01438c3617b19f77f492ed5d1ba602836f382ef2305021bcc49eb4b225216801ec534d3949c45d64a780c17e132761afadac45114a084d0682c4352f5947f6512fc2779dedcf4befb30fba603e082e0452604f56983a675b537143f9f053f8582462fb59ee70cc11cccd17e7aaa8adaa0a0d7e73d83e63e3d4f97a090ce3b1378eb442c0b6b33802f18bbbd994e3d62429cc0aee824b6e689f09564861fbe0a340fe0791b18346347ce62636ae46993e099996f9665b93896aa2a33763feb230c781994a2c195c8b8e56ca84c40ff1e615608cb06fc113188a44f960558c8d382bc022654597584e385b55c4a8f657e33581a02960d1c1b314992d96b1e13890a341fcb2437679941d9241aa201dda53323ea078a22c0b6b8ebbdd82c7537a5fae56b53046f8df7d71c282dd40cef2387c5750464063645a0b70c6bd8ef08345e1c4dd34138960eede086285a82b2fb889be1dc6a8670b83f20b93d8718910e89be552f4d25a4c35588b963de4f67eb83806a36a57381775cee89bf27a2fc8f8f7fcdfc6dfc117c71a1a0a10f9769f40a81988fcab1095edc6f1e569334a9e751f1240f8904b77635cc58020d05c0a1628fbc188214f60f4f08e525aa5ba0e2595e69aa3ac4e450a11b4ce51a40ebe610ba512003146c34956bc4a331726bb021cdca12463e3d5bbc9e882383ea4f7c3c129e28a90ab27030a1aa016b331f47542309e97f688bf4b992c3d3480989cf8174224b1589f14b40180f38a45bacef03cf97dbfdc89adb28c626240621aa3503d4570be9085a8f633ec594d99b9e4cd70cd132ed123257f0ec613f0c4508d38cad7ba135a780dd2a1d30e02e016ace20bfbc934449c027051c761148f76c7875574f298907c6790f611e12415ee3ad9d023003b39c11fb83b9906add685a3718d4f763220abd6f030a155e0f8e384e4e5244fd522e57e6d78e233e014d0e66e5b56086880ad595bc14213a124fdec1d9d233b2a79480b435550e75cf239bcd8936ebf7756056ba72ba50c7d63104787bc3e16708dc762da21bef7ab7d5bc6b4123fefbca0a1386b58081cc085b7b6c10bdc6f1edd36be128cddcd4a97945287ba7bb90f45a127e58a0db5b4bf21522c6bc1646dd2cc4d506dbd3360eaeb6161f0514db3bd682ad6577c2f1fc11c20b412399be999591cc9c1cbdd1ae1e0488c8f3cdf1ecb899b903562e71552a75cdec372032e109e03e8665e83f294f7ed277dbd5ca840d3ca523702805e2ff503739745922c3c88d24cc6be569e666d05b2856b6b5b85fa5d24d7c58d5f298906c522e9dc8311370d83c2242b154b005bb35ccceaf5279b1a00f4628e8c1da69f42d0dfa44d7f9a42ea2a72a3d3d54f48ae19cc4a84e6bcc3dd9a311ee605265493ef635870d7ce82dad6b502b7d9d2409e15726039142ec1ed5c4385e6d1d52b1a666275d0a31a114c53c8a40dcfa6b52c122678770aa69c90b454f6c582c3ad2284875be570ec078e5391d64888d805f08b53dc6ec0411891b8a1ac26292391da0e004a3bf908428067ca27c166b4b4ba7180d3624490227e68b02ef5099d3c5d011b5432a1c9290a9438499b9a2d0bf5ba177daba4e19855224445c8ef9f4893f96171a208d1bb25dbed8151fd26f6cac0eec5618f12c5b1d1acb949200f70b8fc480ce0da1a81964d859537df6c973014899159e63b86fc6fa5420f8bde825d8b604f5999e6e7c48a385ec561c5bb667194445e612058a0b5d95ec305b0d647132f6a24a8ac0730eb669ae7c62a0f5c73c19a448cf0e094c9fd8440629a3627b61a3da598062ec52cba06d96f72b193449b3815ec744ccc920264d8fe4f0f9ec382e484f8b60f12d16becc66256756a4eb9c10beb94dfc179fc6a0d1c0f9e813a8df625046fcf19c55b2be70f6c5a03a90f4ee043cf4faa3d0e41824cf6f3e4103678400f263d00e6be0b80e7afac61c1538fff26b92121a324ebc0100a1d420913b8d9ab9ab318017fa86a5827d2f9f0cc720226175c2265a720175ce780aecb3c76ac48735568c12f8710a045040e656be04c0866c3530c2c04d9fc7a07359afe262f72c05ed3f880ccc0b9da4ea238808dab2c7bdb6cd433084434543aff39ea44e44128ba55e0b13530e7967ca887c3b42ce31a89dd20a151ebb5074e28d01b72778aeed3a094ded6745c07a972de380dade32a686d89f9f83e271f997d033ee691ada11c119decfa69115c0590f129d5642dbed27fdd5d42ef41f0b2825df015e4ebd35de2314e0a8567f2c3cec6e9c9636b8bbda21b81d1cc6bca900ddec5eaa3d843a27d007357feafbcd10b7381be88cb5f41cfc9c38bd9215732c48a10ce843f3acbe690c6321caa9872a54dbddf562ebb45c7ca3d6b3fbdaca71f83e301b95de55002b9247bb865e3020c4f3c05e7124d0e23c0a78a6a0a4c8ce699c01541c30a23c32d706d0aabe053892d02e03a203aaef7972d40f6a76d929598e51f77785170e23799a4fba45c2141e0f3497a2275c1847c64d89e2ed121f1038b3cd3398f7050603ab4c2aca298f9070554fb2e29a6ba7c831949e57e1317912f4f81e63867de0cf85620c01a0ea3f037e90472dc87a9ab8c2c4e450d7cc4f67a751aca5df3d335c4da2f2dfe13fa49fa508d7f7b01f31fa5062d60a34c844528ea828c4b55893342ae2bf940c7d7d1f55e444cc9ae44e3d089ef777220051a2f6e5dc18d5e678be87ed38285de49c7cc747213ee23d0e890db6fd5b5e0a9db9e15a83a0bdf4df66019bcc3ecb2f46927247219918ebefb137d1c6959bc2aa9fa031f007d439294e42907d71bf9870d5fd4a110a0013eecc7da516e316362557b7257f9d85937d7b47e74b4a766c4e48fdc714c51be8ea3bc8f8bc8a3bb96ab646d6ffce048c43738a3a669cdda41c963aaa060ba38013de84d9b805281f5efd098e00cffab9f823ff87d28d088c034780a36fda60f74e0a36471db0e6628f936479357b4147a0d53324c3f129c4303f0bc61af6626b1ae19036280c1bda1f9b563427b8b62ecb70eab9daabd061fc7a0705be349e61cb1baf04c65c8920270d0ce4618c2558ecce1ad4fc03efc92719147069d9df74ba9bb0e362c8a015f96a34a249e2d9cf3f9e0d52b725069603696ea874cf0f99fe062e3601bd2e019a4896ccbe2dd4e016647d91c14c29aa0c3b027e938eee403ac3acea72c9cf7f8c732979f2d0b26d82d72ed9f84b458ffdf215023ca04046847b15100c921f0e77bb539940a76d205e109a904adae7b4e8f9ebce0d50bdb9ec7b08893bf6335550d20b8f7ec1a065361f53dad56cd3be463da0e78887e7aedb07c5ebda066896c3e5c3ac860801c4ee2bdaa33759bce2386321aa80831eaa0c56913cc01433c87f15b6b848bb2210c5a6b9af40286c79c909c542163e94627bf464d73f944fca9bafc2d690f10e99d902f01bcb6c98cc3cf2442b2299c71d5641fb12c2b8415f600938233f4c04660e24f4de65479c2018349e2956e4e734915a9412723a516ee309b8708298b19a013fd0b40319dabd6eaadf4553d1ba2469ff2df19729414f3459f389a6cd1d1b39900b6d5ef752f191e6247ba6c09ffe07ce1decafbc9ca05fd65848904c85270e6c6cca3b3ab3f88558a1542099e0df89deb1acd1d1814363331260fb9d408e1af2f1325f79490bdfc93d8e2901ab4be9ebe2dd02e70920a69fbdc85505f7d896e2e9ddad9668d5df2e83be900a995bc250606eaf250de92d6a57eb8703ee04fcd9892f41182f7c5e1e598f1d39fc4723c1820b6d401a39528d19772899ef249220b7c5896bcbac7f82d3f719df175cdcf8648fd10aaac1d3f73a7d34c083892ef623c717d9c2ab4bd42cd41a8ea7535221c30ed3c6b233a53b3e243a58ef1f672600c82d6237451c847b763c598a8a8bc613c253d5330c2c85ae76acb3605c5fc5df087ab6b709367bb54e70a5ce86013febf1ca9f0cab42bf88a18098f6ae502f3098bd737bcf31f9f6dd6694f98cc242058e4a203298a03db939824cdd695a1984efb80700ce6c20628f6bb6a4e9a61fcf9c0de2682139cee7b8ca72b720c041a7d1aacf928c5f0513d2a34df8b7c091a43e2a5235dd60c4b80ee3a72a15d9c7a93c5023bfa81252a9055477f648de3e464721531f617a5d28fbc1481f301ccde435c930bea10adab7518af5e9ebaba99e7ea191bf3961b91d733687029bb3e40b3d1920518c4766f9629c638e38f64927b36ea52fd295320e279dfd481f3d33a1039d654146d3e0b772cc44435a1b183b24ac7854d66ee11e2f2e5a32231f10d6429d16d281a1681dd069ad109bedc25e739f8dec40c87de38df5394f237de3eef7258c5bd1cd7bbb6fcec9916dc1300f7e727e548321648b685aaa3687a48543e903164d1880c169be29ee8661d6c07070ce6c834e1324cc56a022f60391d5665dce96665b42b5a312943cf113778bb5965fdf52b5309d5480133905232c09687ac4cc18c11ea6ffd4d4f8014bbfc9328f329d99bef1a5c9d07422215f0e2803084b66b42b76eb980aec0b9803fe36353c82815f2553e3de0b92d1459fd95b5eb5b77ccf65e57827ea91e61bd21ba137d5b0022798878b2ec712d906e43c2389abae756eb9930ff63ce28f15a2e96f8d3657b63346ee4686b5a2e1b0517c79cd634d810c34f44c9b877731a449005da62f0011d397bd300312ee93c207905c4eed604694c7ff10e59fc7f66abc149835f88f525adc59be8693388719522292b967e38fce6a3971deceb1b9cd266b663bd4a5bd4b5bf09c6ae77a4ff718894bdde5dd037cfb4e4fef0d6e3e5630f9a80123f4b59ea0665185cd6f047f706ba70f13608e83f09c2809642fc498d3abb94582b0d03ad992fc367e7907455f73b46ff1962c3f049513e0c513895949420a3c3a178530b906cdfe295e40f20b345d582c4f34b43031b2bd270eebaca064609274898648b08825d78650704522abfe77790579d4f3f5e3049aa5b83417bce493e350ddd4869bffb795f60b1e8636195a8da2154310859a1d646b23fc03ac7fbeb7b7440da23abf5168287ef769a4a61fbde935c6ff6d9539592c435b7fa4d010273ea0c12c7a8039f1b2a06a3da7c982fc45f5f26443687d15c4724455389c9ae345b8906f5688ec70a8b9d4e1543508447922eaf2845d913294723f23f2906b0710b9aa656a254a1a7ec9bf714571e1295008c0633188b172c4dafdacc6081c1a7af13863aead043a8e9dbcf8b96a2374c720aad2dfbbddc80b063b56899ecbc850435c5423e2e4eaea88b254b38d869eca0ea14110acfd45eb7f0ac0f85371302b0364dfe35f4b49c3265ac7c905c730ce90d26519504a1c4e61a89fdc6c3ce0b2c4dfecdea959eaffec265cc858fbcbd1cb044f2377f0ef0654723ddd0984d39f0906a66c3379a163221dcb9a0dc42d31a6c871103352411c25c2f28e16c467d527512af5899e6211be40784a314dcc83f7ce6a94ec696d81a57a0a342fb3cb5d2e3ceca3e4c77d37e8b3fc4cc5cdcb7c16b276dcce6d17b19b5d217155fca1019f55f8af25d3fcbc458496797a8b81065e26a520527afd1e4a33a8991648eaf6f416d4aace37bcdb05b2a6b7186c195c7c04844d0a4769c47f3fab2a22b8efd5081b4e09c7db6ac3c9d3037cb334839bb0705c865a7944de476137d00ce50cab314cd0f8c41b62c7098b63712f4ee2f4c589f7c0590977e26b1c481717d3067219da708de71b189efc8baa8b0f5ab81691a0d13203322e6a6474c78d1ff4449a50a53ce166bd7b575c902584765c28f46c7218aa8b197c36554b1bb6056e4c4d0d06f525379985c7f4477e284652d8d4d360b96bb678428cd612a17c949fcce046b041b04d65c041ac8ae7be478383edf86387dc202bd566cfce8268733f642c36640e2060e86f5037435e35fedf60ca53b350aebf01291cd52ccc7348ce00054367b1a606fbce46f929b9e44e459503b8d5e7ad3bb76fba7ba11c99725bf95d5caee8d3bd9d4a39dbc6abf561d895d77d496fde2ec528b56a89f813d7e56cc4bc23a38f9d03bae7b872a8cb5ce9d60dc01f60cc6264c215d7ccb0c5d6f70e8451f2afebfdf43b2988d331db5e74823322dc06f5ec4b370666700cef0ced7ae69ac0f93f03c584f2fb19e6d7fbfee69a08354f7d6985488a48041427582e0d00762fe77f7ea9ec2f17fa2380bf8e9f7c7ee6e919085a11038e349195b852169fc9c720a9689801f49e0d70c9e4c1283c33192470955618bb9e6aae05c11de7b78b266000608dc6fbc78240e0d25c55baa537346e50940b90e7979be76f47201d6f973cd4c498a6dc19cff087bc3cba58d8411ffcfd662a680879b623b1f32da73136b0b042cc3eea31089e57be326e73f1944be8f30a273c3f90979c82120c12e84720f18496888ff157b1787ce06648f8ed33e47b23cc86a264075ba3fe059e96c02d35fd51ee76743eb32df7d2234f98e529d5ab3909783fc1d70c003950a8b34d7f6279f9b895ea6b626b9348c654876c20ed85f18186f32d835020d3599b17fa56d381c4399d9f755ba1ec217fd65fa6c4eba116a1d408e01caef3d8fb41cb35e3ed9c76b0d8a99806b95740d05e5fd79eae29d8d0431347671306fadac1ee73c2bd4dc4305b65a970298eaab10d60a420ffe2cb647f5458c29fde8ece725bf05fd52053969f079c5cca10178c79b010408b7bbf37397deaa5be79e20433796c5ec6dc662771a578fa6327b224a4f6a5d2ef9034489848d6246544890dd597eebca94f499d3726035fc54321913a83e0d1e5f55b21829560683cf908f1e9b0efc8f03cff0ec5bf1125ce2b90acffd592125eda6afa1c77481fa5fcedfd2723f6448b0ab657826053533b7aa67930e6138c49a0507a664d717e623ccc129ca902a1c677532387018f64cbf7946c0e34d3fabc6666332e5949c5f80e7593c6dffe0f98e9a5ffc9d8adb1fdb560ebe3ebfd067cf764e4958fc35a6fb8e37bcbd52643fbb885a6c95e5200faa77bef39d29f6d6e5134af93b06eec91570e7df4ab2ce6300d4457a3d81484ef1b12de1e4ba1d195adbd9db5d6c529a764ffdfb6246cfedb703100c96120005d7a09cd2af79d56a0743440838b38f6528c0fef3eb4d10a72573add093c49705ce934cd8253d135e268bbb14fc29419c10e484ffb74c98a206c84af242038acb2b0cba6a82cd1137ddeb6beea2e34b57b0898a6a87a8172d1a72d66b7462b71ac285af65dd16331917a48f0b8391f1fab16eb1c1db7a43b63c0ed50a7e77a7899748a56f0431c206cb08dea812021f42f14b3c687ee1a2e1e9f577afe7e0abeacdee692975be1300fc273412dddce0e05ce58f8e265a3137ee7927497fbc50b49f811d53c4d7b210be391f44ee1b5b4ebe4117a5a5e7b77759e2f02123bc00fc299ff5279424902c8421805579e3ac59946012742530867d229249aedf179ddc5ff9bda2e49f4e31337e8b1648306e1199aec5480722f7ba572e1859fcd2dd5d61ebf463c5f8e3e7b304b9683aa9929a332ec93acb3a01a4634fd1be79e424184562d1429c40abaca0551815fc047756f740a2a4bceda95558027a31d3b878fd7653eaa048a9be9e627a9bea6c39657448f4de7edb77a13b8ac6ead0d0a5904a4e6331f0c0200cadc79c4ba3337811746fb339daf61aa03730aa4f164fe21b2f6f03aaa9c49dd3028f10b5d3caf40cd01ecb9804a50e880d8ee0198d9d37fbfe77255c6f8a11cb3fdd91f0ef8d40ed16c6d9218139e755242cadb69ae918b34e7894aac4068872bad7d8f70b31aea6f5d093584bf06ef089e36f43f4c8f878a84f45c21ce7dc44a90fd965166d01bf8c5bd7b57478038504c6b85e1b5d37d96745e3bc08b198695366075f432d7077a962e2177d3cbeb53702e52108a216ee3572baabf7ab417fb526ec65ecaed1f044e48d2904578cc74981787a13f897be29766254c2456e88c8c0bfc5e22e2cfe5df181c9d1b87e5c50939fdc2613d6fb36e6e788dd40e5b60116a27edfff04ca5fcc04dea01a11a920352b054d3e70a5ba7b1861cb7c035353b28d2147503e0e84fa592f9251ec04ead1a925b5fb498ba76291915bb4c0ad593104c1b05957eaea684881d3cb6516e31244e3fc30ee172ae23bffbe4d21235989bd5b7aac252dd0a4cc1fd9c0b1d9372471eef9379f59deefb7258c0b9384c05291405ee81d0c7974e0bc8b592708880ba33394c591d252932a7f176c5cd1138d8b3fb60914ea95fdccc93da534e46ea898911fe806cef28efa15ef26b829f2e08564de7ce7c753cfdce38ba78a969199f606f4014ab4c79fbd6b445122b546f249798f600386fc466aa1b602eeadb3fb492ce32ca51984850205c4010c3990360f812ee58f23e92e7ae11d6f259cde7830f3aa7f8a0929ed56814ae7c57d69c6229165ea89813474b6ba337fab6899b710303445a1a787e7264c1136995cbb77713abe2e76d6a4ad37b88b140601feefa2ce07092c9cccd21ba7681a5d5c55d98a34768920f2bde2164559e8adb239ab46045b182afdbc4237def0baf79e643602109259f2fd40375cb64b925b38c7a544330c872855a2eb7d4a4807df5fdc68ceb0d26a88c030fb1abbfe82287e01e8177a8c7dd29308e7ac40655f8f067c6696c4a0b60c21ac9f552e554b7676dd2d200cb08527ac7f870ed2a853aea02434d6284270be7f427160fb9307e5029569a26ba9dfbc3b9b899284392e6c5cccbea93a072675d60e2582832cb00b1c91462a42d87ba245f5e8b145be84856d6a53d69b5efe52f2395d1e43cf5ffb89f611d03a7613a751c11b278095ef15056f15876e1cde0c38526480a3abafa89f33b02f02eec9ebd02de2474fcf2cc7bc47ea5d14ee8bd50b7f11f54e38124a8ffa49a2bbdac9039d4c330258bce9758dc285cf964d2ac358be81886ed40022286b6526aa56fabb060dcd5c6845b73c17160037f0a82d2bcf1b9aa2463d075d7fc784d307e479b5d3e847ec1c52447323220b9f25acd83380b8c6bc09198788c638fc7688ec7ae241d1d7fe848216c643577a8c850b4a31ad5311bea28e6e414853b475258665ef45e15a4ea259d25f7ac71516c654a53700c3788d8ba1a64c9deb325b09c843287d5c5d944f43ec0ad36778b8fc1f5e6532452fac14da4673084d55d16e62f0ce644c940445195e16e4524a1b58c95568c93699db2a278a7a016b9371120c9025bee908c71183286e54d37983690d6518d49c7f7e065703c274109bc4df23d3f4d79c974c5249ae9e028cd8a90b05de916f53b7c881b7a8a317b7852e1bbefeec5667ff9c543ca2f8b865c48798138a28fc89a66376b0d29f6858f5adeda2ca0d3406bf4acd37a4fd0f44b719bc0e91f0a72c5dbf02ab750f615afd3d7696fd886c28ab0713e77840c8fd2c1c4ff4c6e0cdb49b50ce004692b1f5dd1de3428e6e254a02ef9e475f6d2e1b2d26468a4241c7afe7fb11db0b57703b575240b0b86b4f6861446f744ff8c192fd0ba558693ee97c2d956c196dcebf721e81c0bc235cd7b47d78a716bc17f8cf6f5e273a9041dd902dbd6ccdaca0f6863eca0e40ef86c66b994e294a6aceb1f081c0fb42e3533ea71a96a160ef6bf92f58d25c766996ab9b7f24b2e68149fa3abdd9eb87098320c3dba1ce8dd130e0daedfa51d05e0b891435b10128045cb62d28555fb537b152e56d88ce426ea3cadff2ec26e756a9154a56608b5635fd65d73999672af99ce4e10619d36c8139f997c799271727a7bbce10479963e6bd9106240fc862a3d527334ba69e4caadd10a061c310f742bb508a6a205101819af7ea15a9f7f4c740fbec73c8f25a0ef5e97ceb3accea46571ebcdaaa698cf05af1631098d1bb0d048d0eb9a77018808ab45fd84c5aa8d5f43da16b760e3e284c1e44745e95c67890b304039e27b412142c90f30605dcc08e694af56271434487327d962de6c1341a7674230f6e554f078157065d7ec6e64f3d7cc6cca54f6973b2512f6dc8cc3840d636819c2ffaa577d93d77a4dec047bd5912b2c9289f6af62d376dcc29a670c15ab6f7e6695045966bad6b2cf9f895672933c40c1a935dab427158c316166f216fb5ef20aae8c0094a1e66d4216f98c43d2a019588ea10ea2d9bdf60a7c013074ada3d02a346f156b56a10cfa2faa7374db0c5a45518d142bf24f52a630044165a5de491a11bf7e4623d35511fe914b6e20504caf2231df050f9589271cbe425918aa384f70c54ddeedd456dca92d608383b2da6a0a7b4b265518cdd2c86a31e3708f72681f76d6f4c8ec6a06fad9f5de360e2760a4219cddba47f7959a4707037156e769b8638ea8dc6d5003c767e1541d130f2e243bd77588975390ea0d4cf1000d7997e24869ff995af367a5745b754b5ebc1cd4ba1cbc2dc6176a96c624b954a94134c77b4c7ab1aa2957f14891ce789287821594fb035b9d549f43810340214cea7bc9776aa1247700c20237a19373f907489fa9af1c9abb6dc4a0afd0220a8a08e24a09329bdab28161f866465eedc583c510c4bb97db780c1c37b39d3d899ee1847e788e6ac836aa95baf9019aaeb096a80dafa2fd7331420de2bb32844b423e6ce799a8e0e933d99479d5c49cae3040136f42f91195b64296a9e2dd742897e5ca4734c88b7a58d48acbbc71ec011a841aeea44fd37c3cca7b2c2648ae5ea819a4c3c58e379468ca285a6a130c679a9eef85c637dff677b07d3b7817f0784de0ece3716f07d3534f0206906d989ee18152049c267d5f24dbc978841af7451d76858120c846f6a827cde98c2ad157dc50ce662f4ea5303d8a7c737c64d60d9a85208d67badd8d3fc05916b50ae6c3580df15b398efc97a73975cbf70e8cfab2ff66f3babfabd1daea525686dfc4729c40f417fbcd696a0582816cbc2f0ab813ab6d89f72ab1a200240eaa3d00b4066c1caae8566c7b6a9189c92f17a469affd520934eca834ad072ef5f3c8b32450286e1dc1b6e9c8f6820aaa927977e8c035d88f5c4edb5b39246f6c1128e15b9da5f343dd5c74dd8f7b717c6d8399652e5529d0a5e1e7ba543089d12ca6096aa3113f5b1dab83b8162c89a8f0767f6901d2d03a04b6ff6d9b38422bc7c03b7279ab3f8b700e3736586ad3014b300da865289f0d88fbfcf5401524126b4a9a9e83e06e4ef771790d95f44d602ce11497e6318f4ac5e9c32c25f326ac07a9c51d192934977f40eab285954b093bf9de15d051d19926d4fcc41ed081fb64ad7609cd02d4c2553e43d6d6c3861c8d8933ac78b27fc2dbc4179e0dd332f392405c2a9d0a3d1285bda06152c59f04355603fd5238950cd714245f6c0fb6a028d3e20fe8a1edf9cc0f5e302f48cd37941a31cb03e6b73c3c8a135dd2cf79e79ec99006a870a170dd7f1c3f61667c093064630ce90e0e899562415ed227bf0603dd35b3eedb97cf26360323d76b32a1322890aff3257808552c48ba116145d1fcec217febf85fca0568ca1247c6fdd98f40395bcf12dd1d29257bbb15c303a79789454ccc364bd4c4f685a4c20bdcb0a658a45c81076dc1c29ef2410d7bb81c4a618c263dbfc3aa15c9c96d39e073e84d2b3a8e1c0db2a21554e0441fdb2fa8bc5cd2c3d2f92c8cd63ea1e3a8463b306dfdaec0d06afa497abc9019db5354417c87ea0fd685918598c83f8a17eaabe7cb5889a281e9058df3a6aa1d7508f160ce52ee67335d5982f83fa3059e797c56becf951e94637970f67ed05cc0e89d174e38439faf0bf4a9c104236118e8b10d2064054115762ca1dcf68483f4d6509d7430b4a5ab5b3dd66955142c9c11d22f27cda8f563beb3ad85f79cee1ba6140233908ed1037e23e9994e3a4805448e6264efb38c9c55eceb00765e57efcbbcd4f199d4d6cee02141045a93cc82a30878a2b044d7805e13d48048abdabd1dafcd4a14cfe9f061a722f7619dcebd35963b8592dd91e36b42d4f249b0c636b3d0a51327dfde1ecc621c0151d34c92b9360ccff1c6cd0e46424e1d24460974398540e3b7a78a9a35359380523554b36eb7b9d05bf5a9741b6c9dd0bd5555a7cf97fc18fa4ebf629413ce4670cf5e20ad167099466aa4a9ca026fee3d69e6c56a2ced6912395046e53c7392cadff65aa8fd1145042eafbdb96131aa18fefb6a703f231bb81af3c456a85e891bc638f59c7c25234cb58a09a4e829a38a38bd9b74bb55e81fa3841952289d3630346ca7a5809c6ae482fc8a856fbd5191f58d67b9df4809700c6b539fd2ede355bba7ad4d03ec0d8a14ec9e2b53240d36b8640cb7097fbfce2cc215a60e7411096324944978d7bea69990db814599ab566d60c3de3d11e46054c3f41698ad47a7a20a18bb892d8fa114833df8f7057266a05e8e685c0c70830899a469f3719e7809b901d1721cf608fd452fd09093a514583892cf1c31e487d17cd412ef36777d2a690e3550b3839bb6ed3e041ca52228a47ed7102b9744b349e396a6576c5c5219dc0c5d5de42b045ebef1b4217ba8b5548e2d8310229c7a1bffd242d7d060e3474d5d692a56485b3ed99acd7d154eb71e4aeea4c13516c3426297211ccbe431497bdac00aedb12b4c1f8021f9a6f907072f7213d68eb3a6e22876a3bc0c1ec6a3490d693278c96c540654f557a71515e32a8943589e1c7f7d0ecc12a09a5d97f3e015d82c968b64b37c41461faedc2295065ffd19ecb4a352921b331aa4cd00d7015c73537a97cba26e8059642ae1c287283aecc05e00edbb70b6e9ea6c3da47008e05145360fb61bf8dab7979dfb17e3353ca178917555dbcabc693679959cd0614b168d21738d2d4f3d307bf5ebb0791dd0974463f90ff3a006c769d5e303085e3d20b583060a2ca00e07a6997755f7413b503152f15767095bb935bb8848a01483bb50be3987d7437b2ddba366165c1dde0204f66031c656c1b9c9d00dba59e727c7ba52c8480a9a95d157e1b959f4161417f8b252f00bfc63e981658ff5df3e5c2058a90289ef2575f22e609aad9220b608945d544518319ee2436d0d2d10d1e728145f3c34cdc562fa28ac5762df3ab15800c1706a89b8d10695fbb9826c8b4b94efd3570fdaa81196d2227cf6ee41c6c72aaf5789a99ebe52293fe9f0c5acc8741d5353ef49b8b3ab01347f1c16458a712102b68bebf739e603d4454d9958f34b46b88849d180d6a0a4bc1d0438bc957c37700dd285bb053095951cf6ae8fb394ad9ae4a763a0a6b42330de92e59ba4d63168abd1fe7aa135ddc18ec1d3cc8e51355f125a12c4f21c1aa938fe4057b2b21c841867eb25134c14bc2732d8b1cbab9d61f6d7706f7c48b61854182113470011f1c6bf668d6f4c52ac9fcee2193931f116765768c47e8d9c9195e25d566c8e2b7ba7e641c5e1f7b2c9957d047350f99a51ea9e5dda22abb43e62c35ec589a9d4a99e623804902b1262115ad19b4e5a914de2478dbe3a7261b88b1aba4a2fee426b48c78d62e48b1342a944288849708357806dbabc8661310258d60b6d6f65770d5b239ee1291e03378eb3c07cf0f6b3ecd7d7bf6db8f9b615ff2a68f62e925b1125e4c9a4d64f615938952bf57374ec70283fff63e0e46bc642e0facddc65457db6c593341a5a7a867aedc8513a8d7b566893ea828749c063668dcf2b4c0907b6cf17e176f7d0f69cd0b22ea32e9e6b7545378b9e20ec5a86a83467466d7c72215774c906ee0e6cf1fe5afbf887b4102b9608e8925de019f57bdadc12f87a449650b1ee38754c0896dd8b59e80aa1622f1927b20813c2fb2f417774bcf9a24a2d2af8d2395307d77f44254da9847430401dccce21db5c2827251a0ae0287b71928b662c9f510204cd6d27c1d696ea66b9959c24e5feff51b17b27c99dd0feafe860185dc53b498a12aeb49c2ca5e9ab42db7a103c09c2237642f149c849b4b0c6102a56f34f94d05429086117af8e2ee4402478b61994ab3dcc9b99d6107b0426985be360462dc3664181e1450eef213bdaaa9942c6b3fdd8ca1dcbee932aa1aca0843c57b366f64bac3fa06a5abae56d24b4189daf29b3a64172f0e542830a618db958bf145ed6ae8ce504a57bbd569a48e7cd388afe8f013e8d552fe5c7869e1c0646375e9a23e34a9d1211d4167ca7e89cdd26dff2baee2898402fc31dd8cb449431011fce1e36d140537a3542ddda5514ece33261ef06e41c9018a9bb37324e2444f592ef6a6b7416cdc691d005a367e76684b4d80f8a0b5d10f0987ef2bca9c2eb4eea53f63e5371ec34b30e8866703796421e6e1f0f43a810db059ba0a9f57ca4f078837d278d3d113495e5de2ec8759700eab49aa749999787cdd4d21c88e31c8d9c9428247cee6ad9d18f07302c2114175e9c64930347b2dcace841684812470b1c6e4b8caa5af8a3ed91840eff0754ca0f3263d246ad059d9ad93d33a1155a03f3a1fe796299751149eddfb7accdf386b63ec1abad58e6776fe5e50dba37eab3ab4874406fdab5d9644ce8013f85aa96826268cb90fe559b304285cdeec945dbc9e5702fc9c66003e4464b2219f01f59810f363f4754e6641b9b4b24575695994be82a510cd27746d5d70566f3a1b87409294c4683bab193a1400f079d291932e210de47981d1c0c994f42010c71cdaa6f37f4af78a6335c2838774a20516fd6332c746ed7e3a68f2fa96293e485c3b1440f9635af7a284bee24639e1401be5b7163416ce9bd92fd8fc2a1c021f86e05ed54c8c972a1618b1685e13d91f45eb2d224f1ff16dae421a84f71a4b6337bc692872e1bfd70905af2a3b933447256f8ae12043373bc2c6202688517c3e2c18816c45920e7323137c4c409e80627353fb45489557ef5121b9ca1152e913d9e910467faf55a0a70ad0dc6328c788d48cf3546d9829b6c40cc0dba81d9c2065e4a0737827ca5948a8b6d9b40b5588c85522885ed963eb098ccbef58217c16888577a0d396f97b536286b28c153c2de8ce60e9e1c2fb362fc390452486599d0b52a565017d7c19db9557d4948d35472740ba608e4c5eba26fada27c9ba3da45eca24f809d7df588bcf42cc689053a407578d37e74dcdd515c65246657eb045b8dc57bcb3a2ecc6f31a2cea719ad0759a9c32fb9b06499a1cadf122ceaa2a405bc9db17567c6aa50ad963b6e78f0bb6935091e95cb057ac65bf8eacd413ebd55125e8e5589e00eecadbf2368cc98ea12b9c6cc57f9683f702dd825b86e8efa27a43617830ee420d57c75302a9d4d691a42f2071a1204bba1570bee4a99550fcfd20d1343aa87902b19164cec59f16c864a1aba99c465cebd189f7b41c9ab67cfeb8d1afed79d1773600de4fc3c871e957a594091e0c1547c150a3aab9a0046d1b41ee56c3e0ef8f8bbd669c00e17693ffdec8c47a39300998d8ee8d8745efb716a83bc18620cb2b383a5129d6c2e10023bfc2dc239667010a69cdd5cdfffc0cc60c2da89e4f20b1124679d474ce7045139a4c2af4dafbf05edf933254d0be3d9a9d3e437d6ef5a5f4c33ca672ad7c8c614b9286f981d38d4e4de3b2065fe59ca382e62f3ecd1f30f54f8865b0ddd580c5a4145b40259c959f833ba7bf84e1cd3bf3ea27638dfb926317bd622769339a2816c32d1e1d747e46a83da2f15903308de5116f1c78c27a7fb3f9c47d84208f659fbf8fb7326d88e7dab18b07a1762a967ae857e62d1a808920b74a8d72288399425dc58b9dca62cffe9f41fe0002a4b3a3751e1926061257293a800a102ddc47db79bb970946476376ff3b2ae14e99ba550c15dd0df2e3303c763537dfd6d4f692e4c7265e0280dd7617b6db0fdc005626dc35f427e97e4d0fc790aa09cad32784643a755a6f6cbedc887b9d10d727eee07d93495c1d7cef234b565212799d0e906702bb3b509acbb372d8031fc6266546d361a621e7fd79aaf6af2315b7d5b7d074ea36544a01ea21eb1ac3e038f0b40967ad4f49416b0ce8f657f214a48d6b549c9e5a1bc49e760868d19824f4a9c61e984e413958c78d57027cadbe882507a130e427758ab84cfc3ddb76ab24b72453c101986d01d61b8c5ed2dc959658321373dca0fad66d464a824ec1fd2fcf4546fbebff9dd00c79a4601881c5bc70dd24936fd1fd5f2d425f264c2c9d95e96e3981c3e04c14a5b09c33f653ea60509dcd712deff17f3f61a10ca8d2c663bd23ccffb08dcb5e400d3e73bb9b5f8f45072247207c3d58821523dbc5ec44c8ce519a4e960ba4ae899b1138fb1b8b4f12e181fda5218a85fef433fc94020fb6122b86420300b7fe88d978180b8bc7fcfdfd055c1bb79e907006b0dd7cb0f685e1c81a74c469904e1f28934a935dc2c07d6b86ef016ca45abc7ec2310e1f74c789ee90c62a9f8afae17be17757f97bfa7a0ef30680c45eb320bccd4e89630f623513432c9af575e9977883d042bb2c1fc07ac5a77b1947f35959d4dfd5dbca4a96009a706954b1f5442d6a1aed7af7e5fc73ea5c5b138d6405f5d81fad52783b6c4fcd7864d332114dc460c2939ae0ae762bb5b65bf727ad54efbd411b8294021e459f73d10138f0a9d1f922a02b45803da550e79582092b29a0e16891933edd8bf3e2aec431b91ff91b4164e319011acdb97f4dd053fdb881c3820c28855c49d8b62721e1cd510448b2ea57793ab7ea2df09e68e7fc01ca79c89de8a43c7d80d18a897b4bdb26d29a59452a6145c07c9073907cec52063339e067060799a12cc99afc29a9296c4dd50e9be1e72ea3f982b0783f1359996a429a5b0a685cbcbaf895fc3a51e422bace7b0d6b4618d499b69499a127c4d4d065ff3b524a869d196b42df035ff08184da65aba9144031568c94d031564c923e4665ac329df7620baeea265e6d973b4793975fc5674df4fdec1f317737cbde07fde6198dd067f88df05cff048103a7fea5e84d26bb1e8773ab42cef00730ece8637900e3bd83c9f09cd30532028df33c529e4e9e5d056dc767d5acc5a1bad1fb58f0f2175bf97a08724d13d36dfdeb71fc51c7a44e4430f59f5ecf87ee74003e9f01898fe08349d754c47dac79f1ad01068209cef5f400fc1df9f7b48ccf7abd0461ae87ecb7ae8a787fac8070ee11ed27dff8ef6d140dac3a3984387a8be3f36506a28fa4038f4346487e251cca15129e650fa47f1e848e9293edddce0ceb203dd63dfca6407fa455f0ed527f8446d6c6888526b3b1a8f327d1a8b1d6dcd598402955a5d179fe8f3b0f1609cd9b91becd9f278c8a5cea28fe5e119cd36afeed0d159e02ada62118bc5eceb60a6e2d0986fadf2f503ffd5e60f911f0dbf670de3f0404d9e203cfee3c1f679a0b0ada25ff42fb658b40e7d1e4f936093cd62f4d19e29ddea3f9b65c6df35296a090dd6cea5a9346513cb44c23bb4f28ed781776865ef2fdea195753c0edea195715ec33bb472cdcf66dd74a27b763c753d95d2a54b3fcaf46714dde33dfd89a581b8a73fade89945f7e8782a9162ce53f4914bb206faa73f951ae8e6919490949094726bc99fe8cf19744fcdd38743d1477eb179faf088b6ba6ec8da49348982883830f9e259bba87bef76e786037bae4646461cccc6e4c09e79b876cc66b3d9ce9318c9e520d3c29e579c2793c96432f471f0e3b05896cb61868bb9d1516335d6336506c5e5e01bf6dcd9d4602b9b459f862d3a83d487d7d0c86fdcd4c6c29ea92cfad8ff5a32cfc6682c0d7e223a143a7a047b7a3c7d7a851ad1a755608f7b8f7581bfe8d3a7a2ab681dfa34d8cafc45dfc6645a5d67b34c8c1ee130a25528eb525b82d6b1d687ce26adb82230db2c567663b608dc203313796872c1d048a2e853652d91a24f356ab9147daa8cc808c95a5a63997e893e94caec2cfad459e7d06f75b34c69abeba86c12e56a67d5ceea2cd359a63fa5e4a0c193960a08385238b821cd98b12c0b5b56db68ba3f9b7be0274d7c9329538a82f97635b66c5a732651b2147353dc6c52cd26d606350e66b5fb5f2bad5077b5fa9537996234466397c632fdae6af78959f4b146da9c5917f80efd14b6329bd43a4c5bb2a5a2758ca28f7d811523d3d7bcafc5658b2cad43ff95e8bec99425d39f4cb369669be5cf86d1620f550043a5900ff1ef5f01f6d4bf1d80dc4072e7e0555e12737ae8f792e82399620efce141791fcfeb7bfdb75a4c5c6408b5f8ceec41fb403031076af121500ddf81dfea40377d683043c8503241c904255386504b9ce253e46f5289532611bd03bfe26944178951e43393675e5b5f3f381895322935cdc22d700ba5b45a874bd167221163623e11897c1ed1af5982866af8905984efc08fe28b134f7989599e028360e72c82f116e58f8e91e1bbde61c7eab6244a963a38517e23094dbb136e53dac82d4b74bb559367fca007275e30408b3419b26a9acf8f67f4e0c416d1bc1a16e66bb60906b284614657a53e274564fb524a399b5c20576f6e3608d9e2ec8b4bf7fa8fe57d0bf62079d1ad9429d4ca27c6ce9fb1796d95b73a278486e74a73321a089ca11180af27982fadd2bd0607ccb86d4e67e26284d019e7a10998d5af9c4e47fdad1307265fac45addcae5694ca884ad14d83522577b6d687e00b8a456d31f849cccbfca51bbda820ba8a5be84abcfa15960f39d88c3a4437aa328d3e035d7d27c36735a8aa8d2be2b395fc14a61f465751f5fdd2ef2e1ef8c1d4381988e45f54c79afa28e0dde48ac84024a7e74ef5b595174dd95033f1e8ca769421c7fdbd1b9d7862cf34a6c8aa5b7d111d8fdc5db840234f8cc34637b349dc7d0c6e42f532f88717d2800b35712d5194184fdd6ddbe6e4b6ed373ce7c6fd656d1ccc5a0c6e21187b12e3388af2afdf71304aebd7bf325b7da34aa794955294cb1fee4dd7d239b539654932148aba3735b50e9c8e65ce39e9ac6fa733c117c409e3ce14c168838dfc791a9c0f3ef810f361c6a52dbee483921657f22f1d2cc10b28509480d2fe94e1970cff0b92952c715950f4b97fa5fce68e409fe2b2961a9d17272699cc3af5bca88baeced78f9775add277fda43f447e50288d53a229a19047c6e917538f9504be20ea832044795ee445780e7c24327cc289bc087f39093c073e0bbea0204313f44c23c28b922899923f0fa3ea585d7529ed662f8dadd41407ad208bcd50914917eabf1f3ffdd4b56aa03f31a5b286e8e3b1188456fe45e116b2975ab95fb157197a21d473a81f7aa10bdd68d33a081e21f9d150febc0a0e9644d33c3732ca7248fe10f971972fedcceb47a44178a2dbea137b15eda2eabb7e1e6941895269ad576ab9264d600d5a417a95f291702686fc890c515e82d691d27d0d8687265b53febc0aaee5121a9894f492acc21b4e5b783b4fb4d8f758ccb9d2822b4f5cc901616460c8884cf66dfeb7656f4aa907d7b8edfa24f7d75bddd2c8c8e868c90170b4de04ac03a48494aa5bc5c8b0666e340d1458b2c8923c178f1e3e5e390018e1c70e12a051cca13c3b0678043cd6fe766b9aa66990093241264d080eef786e0726e1ef0cdf5c0e302b33cc12380c33ec69358a3ed1daae6bb5fe5f2f230e027920d8fe85dc0603f2cee964f8ae4f6d24e09dbfd3be7e049941fe6a2aa8eaa93da8ee3b1feb735772f5a3fd6c313101400580b3588672b0244a8080521e172cd6906d886a66860847a4bbf11aee1b4e386185e3ef8602f6dcfa4185424c8ecf914297824c0e2a341b07a3c14d825641339bc5351c07f3983fc91e9367649a6ecc805dc8004b6466b88163d39e0c00bb1002f00130918cb1ac0c0087cdc37cc8063b14a119a1560d09726c16eb58713027f2282adc5021c78e2868368b6f62a6ac8063059a9acd621c190ee646d0abc0e8b7606f02b6364abf8d07f323bf5284a6880ece08cc46b81474344718b9499dc085838339920b3b14476c8ee058cca3c5c11c8b6741a203c97365e0cde21e393898cb7a604f12c08d00b0b759ec838683b9926b610187056fc766f1ab8683f9d20bfb9616be851d1d11aecde21c1b0ee64cdee4820baed6123c368b01a08383f90c00d89d5e7881478fcde2116e38983f8d80dd0b0c3b60e8e163b3f8070e07f32f3fb0ab9184be2b898f992e5e9bc53b9e8339186723061e319480a50e07d3f18090a0d3e180e80060b398048f8341123094017b7e19f42cc31695840851122244889290ff5e42fe8eb0edbcb783e593afe283b31a8f87ba1b975275ab1819d6cc0d1cad1c3435363a6e701e7b3b52f205ad435f2ac11755814a27876452a632269fc8d8ca5b36b77567e2101438a45dd5f6ff4150ca09f2759d770e5602902fe25987080ee49a2d1259db75add64722236fe43bc3bfb2a807b939198a9c7466ba882149ca0a188a9678a188081768c2b4d0a5c18294320440737277911245d6f091d7a40c650dab86f03a727719a209b623779721a258610812a830c406846ea43100d6089ab286677061c923a012b4e506e3098a1446e001144ea8f942c4e362888b09a028420460a68d1f219e7c3e086a3d41feb2acd61942a2289068db2e0a870ee6c130cb803bc7803b27c19d61c09d5fc09d5dc09d5bc09d59c09d05803b23c19d8fe0ce4630cc45706718eebc02eeac02ee2c843b0f00b750c69d8370e71470671470e713706722b8f310dc1908770e00eefc833bfbe0ce3db8739019700b09c19f1cd2497538d73701730f045b99e14b982106f9cf9af05f57c27f2d20ff3d0f7d04e0274d6805f80314e07f782102bc01f09326ac925fa2e47f78a10190e065d905f13edb32c1fbba2fc1fb5a2f20def728ef7b29f1783b38098f698f2919c355cc80e510ccf9acf3cdc174f01138373f748c6003809a1c9a570e1fad1e38781871c365c44cbe2ed330f5f59037afa260072bdf96f18e294f0ec1974cbe3ef342c4e0ac6e3a1d2a9b94a6158000ff51705666e0b0fd193c198b397248428139f407801b0ad1bc4f46d96a2e0d2a871c92d1388c6303f6469da1ac292363e20a76aee28890e5cedb8c774c6d9e8c7138e5c92732492649258e8b51fe6417d65a0b8be0145894e9cb25cd890bd08527873d4f44f70541e1c8129e168256e0f19ece5ff053a95486aa4eb50e3c025fa90cbf83664bc09e1b10c88a65d5a0a6793861ba06238c16fb41d07a2d560379cbbdd64aa70b2eac554a5977b0b9ce39e794dce4e64b3ce3eb877ccd582df68c92b1d6163424ad038ffc0c9490b40efcbbc91f74beadfc5df4b99918277d41be2b2f97090bf5c6a034c9852c37170457b66553b72e4ec9aa50562f4c6c962f3d0114412349f4817fa481ac2b09a075204e18244796ba067254172da6e4afc798d3658466cc000909138af0658b51120c8a9c80d81412a6be0a58b12446cc298604c4b6744e8e18b1a62c6da66c89f9e47c9e3a9b8dd562755fc8f2c79a968a2f9062ee2631be64ae080d62d0a05fed37c8f2d6ad490c31b2b434ce39a7a4a9af49a553d6e0929046d75c64c93197282626465544065d912cbaeb2c263aa34ef449e55926a7ee834543b00812d13ef2e808964062814b48197422cf87506014380489608f7d98c5469f989f3fcb32947b364553fe60519e4f937b3685970c8ba20f6d72caf3a9973cadc47c0a5f68b5206dc1d224935ab4c8d0512cd02eb594f294492d190907baff28d3aaadc43c3c8a561e7d304b9eafc5a28f6d8239f39df2fccefbac973c5fe57d9d55c34b66aa929f646256de67531ef4be56ee308dc1740673e653dac451269a29136da233eab4820e2853ccc73c87a91af40b05439be88c32d126ea449fa817ca7489703c512de56969e421a24184285927371a43f040be92859f342153b2c6bf97bb9ca6691aea2f0ac2fbd7b78872ffe07395ce1cbd0fc2bae550f3b645afd22923f4066aee9b4362b37b508c98cba1666ebb1eb5e48f25655189761e67d43a930433baaf6e31aa5b1a884bfb68b1983363550c9b89cec8532bda419eaf55b90167fa46da11ecb12fabe4f993280aece97efe2c823daa9f3fa7409f99af5be2d2fcd8047d583fadb03e85697e88bb9fc12c2d36dfda5845e292e2920cafaa48d147338a39f33f1bf35fb7faaff5c5252e29cf979d93d17d9a51529eaf194519efb35d472bac5f794679c6a20f5705e6ccbf3204459eff69447966c99f16cb134afe6ed17d82af0a5f28f0357f065f229833afe4af95e7b3b0b6047302f95180fa8a2dea316cbfa9d991a080395088f572d07c1d364c7d53ccece383200dde7c787e14732812143cb2483fa2c13a3cec578e6c8070fb43e48726e64babe46034ef72cb138447bb1755351a1a9a9f1c8ce6f5e365831de9b5fffc68c65b36aec4255142398bb5af5c6f13556bada8db1cccd6b7343596065714ea39cebe73456ed42a6a9319e25246a42c6e8bbbe21bad75d3b1c8c8b6553187e252502b0896b29dc1d8857cf468198aff72db6317e2e17296fdbfa92d077624cf8ffc4a169a1c38d8857660478a91f3a397e206572fcedf4ec73707d381fd8917f17ce3ef6a9bc1be04e747ad43df068896cd4c0dae6f831da93bea743cab62d577131d45589b4cc5a954bd7d5137e59d04e4059d23bdca8f2af62b7e24b3f21a1c7067ac993804c587663eb0946dcddfd62633e46db7f5adef6c710d8eef7ce546f3167ba6d1344dcbf19666cbf1cdc1727c10acf6af2c3b670577171020e5e6ac7c5da282c0082b387f0304b16c73f030f5033fc8f50336c89625f3b7c66a76c3442894666f369871087d9ec1b25bd90de61b1cc77138b68efb4d72304ea9d542dd3ac3b9d20d57a2e138ee2d07e3ac5f8161d3de6a9ae7499ec27ee5c6c685a0481e2565fa9e047b1cc7db383088f2e75ddcb87b0e18048ddbb1bab6160be139a57a4ef5d735dc5d0737ee8be846c85d8614a4bc09ddabfad42be1befbea2951a9bc9f98439dd34149ea39fa294f8616e2497530765652cf71afe27ee88552cf61ce6bc51c7a7fdbb84f3dfe1e066c35fc3941e27d9e47b871c6b961fb5a5398d23c1f6adb3389926ddbb68ddbdee26db58406abc5588303e6c48149b511b8c1bab6dd6d86872645ec6bdf89802853cebee63aa2f321bb6d1aedeab5ba5f8bbf88ce39dc31c763f065644ae7431072f6b56bad6582d284cacd0465099535cf6336b56ddba6c1aa141383943fa7623463c5952b4d4064898106209eb060183df104972d8ab86c4154bbb8eeb6b53a86c204fab5ea1e1ce08b763cc49c6b7175bf1e182222ba426c165abc3d8bf5ee01777232b634156d33f3f56376ac6ebeebede5aa66b78d859d090a59da729de82e2552375a7f02dde349340eb0c78dc0d4aa612bac56037dbe8a49942cc529524ffb957afa2e533d7d15878a9c91983bcf67ad435f06fb129602552486fa926fc14eb86f5c8c8cf276f3e639932fadac76b719b98486b95ac5bc2781251bc11ec7d22ffab2a3d517b9b3b30607cc6462e67490997eb51b4f109e7b53b2fc791a2d4fc19a35b8c48ca294524a292584334e2a538bddec1744f9eb2edea6f5ae3cdf26a9fb5aadb769bdaa17ddd7b95adfb196b67821cb5f8789950905021843c890f297c2bfa0fb6c6ca4e77a9b1fd27bc197d2275b86f4c5287f9d46ac3f6968f9523530b39bf582287f3d86eb6d5caf3cffcfe83e1b1bd7dbf0bc98ba8ff572b15a333366f9eb345eaf1a6bacb1d61f4cc8c90085ec3717830b598f27e6c880064166e4b18ed511e5afc3fc78b97e9c90e5770bd1c9f2bfd5e2d13eddae069a2f63ce0dad94e3bfc6e83e97ebe5e2999e922dbacf86072757ef6b2e19be6bca5aafb89255c4a96b0ee64302f88e42f7f3639f6428d4a58b2c19ee30f38151ce4195252ba948522c96519075afdcff2a63e908287208506273fe74ce7e733eb3865fad1c71ebb8e02b0601d3f9db1cb1943bd73ce79c33be17b36eced9c538e7b4b565adad734e1929b5b51a5ddb2fbdc7c1a267ac75221897c505c861d4f2964afb8c201f629c317aeed9000e810e7dc7777011f3e99c744ed93a6e83abe5dbd0bdbd69eab321f707c1f6ac13e82cdc1b2f3afffea4ed7223a423e8d831fe70bbbb5bd6c5f6183d77776be05ad83ad0bd757ac20ec0d9ed4908e107bf29d27ea176c8b0c218dd0b0ba48c010554ad035fa54aa55250fc6067b5764eaf9d8bdb2ed9eaea7d36778e836b614fcdac12e7c8ad8cc3dec833b962da3931a50365c9e498bcca5d56e554ae5cbedc26f1966fbeaa4d6254d66cbe315786b5493cf39db9b1e1d85a9ba4a149496fb64efc8fe668810cdf614190a62608596c450d7ef41ec6f80d0461d0a50653b296db53a19c486f427d70bf8d65e323a17b5d84ce5fbe7272ba052fd883fb45bf29ad3e6395409eab3c69ec214217c29c5f4ca94515089b6862ca6dd737630d14cb12a981fca374227a37d9bd139e74fead53bfce77a41c314e8e791637460a64f8de324a08618c5abf2437811cdfa9fcd65e7266f9ae34d770778ff22375fa517e947448ad94d28ff2a39c9e5781734e7c7451b6dbbda0f4a38642c9d82ddd1aaf263ebc5d5324770f11664fc6ec44ba4bb91d7d84ba7f4a2030bca20fee1cf94d5b05bde5432127b207874e86ea857bb523013bdc93d24a2bada7004f52b95a17618e18e67717cc6049d2c810ebda8a2c1f0b2a1a0b873f3f3cf9b3d2f61579baa0afa0324a191d8cee5afdca36b7a0f3872f0b7b7262f42bb657f70ce957cbf6fc386db50040008b61e77cae8fca73871c3f6a9d337f486c459f55e74c383fca1823ec9b929eb70ebcdbd6ad335f52e1b90981acc310e34bfe7666f6b7f918690c52c2598c225b42210262c88180e2501c0a14f974c30ffc02d5883cf0029f78f0457ee97225910bbd78f2b76cb79ce2324a9444720859248b84c08002859d9eca9895e1e404154083026aa8418d2b5b421f2d7fdf30673a14ed2c702c4bf89028df773e9b3f26314657a4d277e04b19e5f7c708552d7f4a903cbe034b08126f90205672fe747960cf9481f9f9f23d93a66cc2602a4d252fb7618fe6481d64920526412c8e04a580328a82db02fda2ea5a618c0f2365434679e753357c07d22f3408be03e58d5146292d8c82a160a2b7410fc2290488e5871a2cd9b4bc051b108251b74121107e84de0f14e2df431028c4ffc648539f932ca5d74ebc0708bd8bca86fef8dddddded376e36e6f47f5ab6e1003026247fd648af88d0f4867e204f7cc9179ab12534eb4f4ceb9c435668be8c61c2c0dcf035237c4def670c3613326003508422b0c146eca4958e4225ace180d99c3e9ee8be56924d7c224132fce1eae9b52bdb68ffb1b2944f515e7b3d5dd395e3dbf43c7cb9e29247f9ea87167a28b0e141aae83ed6b36c7b9fe67d2d9b3f966c491bd863b3943c513a5d0b7ba03b6c7714d4a29512a84638299d55daa84194374afba085105a235ac7dae87a296badb5b6dac6d85cae0a56c4b0a04716b38917bedcf061860d69c50b607ae800862862907243033015cc8479610d18124a31f64efe6959864470c04511daa022074c1421049f47e9e9f608d3f577856d008b249448628b1b187185d118436460ca183980e2011e6b30a1e4a405e98915435480a0415218269c6081b5c2c7142a53d8c08c1ab44184ccc9125a7429e2035a7a20254cc740892a2e9045ec8b247e60c4501344787edcab90b08131d018829416ac81860b3a8c156c210551184f3c11822c6764408b12b000075a10d5e4808b1117571c356d800a6885097a8c1b784104112940220444c8c2002b3988e243184a61b440a20557a088628a0f8eac38a1028435c290c00c182c418429ac4829e3c32a4a30118228b010220549084129f2b70cf648f1a4c50b2ab0ac612404bd1350d0f5e4b0baad5d9f8d227f3f4d486d7cd14114582021a5404a7781c50c9c4e2005114558227ed1a5c9898d65d374943f579e4adc7618e554d1babda6749533e20d5f360597cc38cadda50ca70c24779732d4b854eb2175872e574f07261dfcf85aefb40ef4be9b35f9f72219b9916b681df92c303aefa6d72ec08fbfe920b1e48ffe0dbd94a7cd35483c27b9751cc6aa905b5330d95abca59b7fb78f8f5f98a2bb3f5f90a2e33ecf8942a15e72301487effdc8c12e53a69121d6d90d6fe93e5b44cbf88b0ef5f72377c4b917e8c6d52dd59e347279649457838427a39e6694d5de392436532c1d4ca69b6729d147e385521a299d5f4d95fc31811117f98e7fa479aa29a2c608be1c3ecca16698b5fd32089e0cbd0ddaafd556889df2c784c6393f621a7c07c2e65480ef40d9f94acb430d137f4ef28cb25f16d1dd2d352c1f47a7a7254ed3094db3b0c735efeb47fdedeeb7f73fed51dab78c0d5fdb7d4d4af97db145fd275ff36e370a0a99b56f7f722f3e73247ff2a7d9849014e8048ba6c4a2398b66f4ec115d40e96914caad7f37ca93f0d59ae659f8faa0139329e54fd44f1ca3482b6d5bed25eed7e45b3ce55759ff4aa97939d45cab95141be96ecae03a5284b9176b35fbf590e9945feb47fc39ad2f7f629ff9ce9438ce8f9da9d7fa734627b9d6e97d4eb28456732a650b1bdbd258daa6597c430ba033aec8a0fb6c3291168f7b1036cee2a56aa039e71a3068c1f95994a74d1ab8700029068f97c46f19bbe95b56397bc8133ee58f493f9c74ced9128ae1cb39a59c44b28dc545f7b15a1b943f2cd6d62df132dc89c5b2ceca8ef2be1be0e792d5ceef863c7fb258383ed07ddb9782946da974d0a50cf00b3a9c14eb9495ca265056592b5dbaf736076752ce297150944c39769cdf384681af9645b9fb2391efb407674134d7dec743ee771ca3c018a525964edc0cb27c253670067b82f0219dfda378941c045d9f0bda64ffdb1c12f99bf7d190b7bf2fdf9d4876efdb5ed6ffe82361ce7c88d268c8f3efd772e5f8b9b24c232299618d21bd1b12a5fbfee708f015dd2733dc64c456745f171ba899d8ec906609e705260c32d3184770fb2d7cb9843df1a87bffd858621ba4b785e145952c2fdc70b4e8220bd006fa30c0a7dfc9c7d1a2931f14a96783fcf9d0b3417a5f7ceb123aa90e9becac74d63a6f66954e2b2ed42e093bd042b3d259ebac744a190b925207cb06fe8b27c80f911564ac72fd250b5e679f9a2fac5653966f037d6a84e4bb98b2fc977c1ef9417ee4135961763f1b5d03c9eede7baff304e181b1c2968d9daf1f2f1477ab66abb53c34812feb434e316805d9bdf7de5bf1f66d6f82d8de2dd38d95c339e0d03af44d6863db30131e620efd0e7b8cc3018dada6cc5822725ceea6363e90b7bfb03f27796eda2a89926dc6c6d051b6386ed88aea35d5d0125c861ccc4aeaaf6adb366bbb696da53131a7e266edbddc06862c7f1e026b378be307772532fdaf71e0b97a3ca087b812bd43835638d24212254b68a8c1010d34f33b78f8805972309f1c8cc3da5b4ed368fe86e6564dd3b47a6f6a30f73ef0932650ff3dfe7f7821fc3c70de85f33fbc90eb77e0274d6cffc30bf5780ff3b8a87c83027b8371787e450b9fcca8a4cdd7243decd0900008000050007315400020100c884442c1501426aaa4b80714800e6c964a6a4c9c4ae3b12088611005510c210a21631021841144086668d601d944b03e4beec055165fa08e27fe171c74029f77cd5c8763c346a48ba7fc813b39ba290a27bc8d9f6487d93c7392c231b112003aa16d4df81f9000155fba0113e6ee7fc5b6a3c2d57e724cae265bf67fcb2ec18a6d71b410e942397327c275c441dbbe2d172330a59a6c34a3941c6bca4baf4edf8d10ae409660b7f65632a812d0753df17714e0d681f07b15ed2256cae1c0aa26a27ebb795cca4cc132335d255cfb621cdb099efcb39664cb898c54f31a446672f85afae5e5a5b61b8e6f1415dd644ef35b802c94ab1cfd0fa313d53a71eed50b8675f0560290ce3f816fba321201600c7f12586ad5651810985f4dc86c48a6b0e45eea9ab38ebb6171a5577e8b815a1e18b911afd453bc917851358a4246d4e5be71c8f4947343c4db64cda4880b6cf22dfa1f94003dbeba8198b0c4de310565b305c84c6e6010b1891e7398a2fddf954460a0433817eb062922e2346d9ddb2425e09d974791e5cfd5772930dbd2e2f91d8a27e346f5eef483537f24f8ef491975d503d70522fb72bef20c24b1fddc95299d773b3bc6ffcab87a350a5e38a2192f77ed5ab3962166461264d426c9090f3ed41937bc6740bc3da382cbc85ccec0c9ff81a5bde3bf223132fbd420dc4d1de15ea642e2cbb32cda893ef99176e4972cc1b6dc7c1ccb9346179da892d1dc26f1ff7655227573e5e5440af8a029306974840346e5aed971351960939476f2e160bbe2ff99083231564af3dee6a44d89d576c7968dafdd9f84f82ba440fc1ee9692129530d5e6b37d7d485363645386cdc86015400c7c4cf0521fb5ce8f9d9222503238c8a3d8c7d5d2aacd8d7d0765b091956a442ec606162bbfc52f1fff3ac044ce2e9af496c5d746c67e7fbfaa160326b75025d91988ac43ba44c0a4ec9a3b699384084b2b03d0867af246aced10b22d9446772c6c8ac19a179ce33586a3b7e4d0221995261ad2ac7f99cd9761c216af1a65d153a77f9886152cde354489062c1eb3f4edda7eaa643bd163e280166aa13e54cbefb05f0e119cce808199a8264e69c914b3b352d96ee96e5e55bd92d8a9651b4c28266cec9d08ac7dfacd74d5b03965d0804c781ceb9941c9dc573bd99c1cc4a8219d54972178dc0052da1ea2d4128e54339032377ab2c317e76aede6a77ac8b42f36ae7b320f093eb1e0d2451a701e10b0bf49d18486ddce55c26b24f227c86a63754a349432fb89dbb8e88e1462604c170c960a4a421de0978cf895bd8035126691720297626802c93139cc2d2501c30609967f04d29cdbc2f9a369658ecf48a4ea168e5879f39ace5700889b508b746a07ddb4db297afa28595410b8d761659f1a8be375c7077401feb559059fba045e8f18d7b31878c2c429bb625372eec062f9a5bf378ae185282afb579e4821ee405615008daeb18c9d342f6d3f7e5ab526ab3a0a063a53fd860989a85058758e0bd846f47571756bbc17b1dde3311b7c606e318110be706dbb796743f1133657259ba5441bda517a12a71a0d8aed67900804903ccb2f16c1bcd4bfc5538a2a6b3a17864fdcae5c21351d0596ee16de24742701151f3e38a011208356fdae5f13337ae7512e0920a0744d8b2d59d4397a8147484c03c46ea32986456f789702166733ca90e4f263f38a797583734e75ac6b77695528545e7be6ea231a1d2509d1e8c5aa4ac478903d3b579cdb6dc0709b960db605188aed3cc4cf73a2014c4ca7ce23d00b5fb1b4ef343b4402774541814a54083369c4609089b7599f573fc2dfcaaa620f6b494695f2157b4fa3746de97c8f8a6177c1fd7c4a9f2e3cb2fccdcaac4120981d3ab20fa909f8b89b72ccc4aa3a78a0591e03e9a3cd5283949dbb351623e32464f366583753212c5b90af1237cfa29431babef8f98ec8cd9a519b97a82849a29a187dacc9650bc630db581c808c5a7368f09aeb3d9af9200c2f191910602ce83134f2dfa9a31429fc2fb3aa8a6fdddb5cd3666b8a6e0fcc1f4dd75d195e1b1bcddc0870091c413d9cb7b75a6e9aa07608f3b5b3bd4dae165b2953aefd76eaa903073f2c22c5a437796df7edb64a5d20da59bc9f1ba31f0a57159e741e77d15c473c3114f43d80c45a5ed919627192673c79e90edfdd96cb33b891876954c230aae7c7923e1d60fb1425731d4325598d84ae12a0a53369c66a175e312a00399d2da5b9428c662cce3ff2b3db38c5826e3ac0de068d79941a2454b729d052a87c40f45a48176ef8ae5e584efe0552e369265da1bb05c0c81f39e20fa5164bc347f118c20d8e5ff216c7e516756078d1c83275c08494638d68336bd98e0d7514df8bfc5aa50804c0f091870424653ad804ea32122d79e8e4563babb467dee92f8f2f5702ed636179f2d2f0e3e58d36e3ed8b5735cd441ce5599a0f20c642471460a1a49382325cd92447db423e0de2d80f26467124c1bb30776677067b638c03e50b22222b496b4986d4f2cb4f5afae1ca161e2dc948608ca9d471a559e1feed20146dc001bc631b8cdc3ff6138e1d61db7a272c62bcdcea78e029aa43a55b5af153ef3102e3e43ab6196b36365a1a3dfb3d5bd874d2ab8d99dff350dac68ba2cd2076e8fdfd2f64bbf1ee88f8582d0253dc3dd97b246ce8a3c7ab4f0e0509b4bb840d0c7b50092216c18f57dd46d0c66b9775221c22c42aa6b9968a8974cf68fab898f585169694c9d43e534b4e8ff6fc7ec986fa4092398e4351a06906ffc87f140eca37352c9e97d6abb26e34d3a4af303d57dcd7111df603154559f5ae9cdde37d8712fe21aa209fd585179775f626aeeb3f5a7d266923df7fa8a392962a5fa3fff7ee74f504b9dc02b4f3e55d00ae2a72ab85e6786de2af4d125d1b19a0da6427c11582de5a38356795c0b2b312e564aefaa671edf5125f479959c90b02e7ba2fe42e5fca68e2518ea5ecf1a73008b96ccaa652e23f8c223cedad096ca9b0d76629397a217d4c1dd557c5007326e8959c555eab1e4c0a1dc253f76bd172d28df38a514e9badf5e6824f6c921e6c80f1cf6ee55969565951407bc03b09e3dcf42e9f620230d2252b3d8dacb50e67e63749a5f0bd8f9d67da8aea250617f20ecf2d1966b7f4d2b6b264b8bb140d88f4d25ca5ffcb8bc5865d4467cc0477012f96e678d6f3b7fbb609918d73f8de56ef72e63bd0a5ee1b4cce05b8866f46342b9958afafe94d4f971f4aca6b6d685a6c85ffb110d25b474f44915ba277a5c6d623100ca91211f22863256a095de606b700a53dbc5eec641a8cab850b852dd3e6f0b4d95220f1e6036c802c33c61fed21c8930acc621e8439af00ea98ff580d4f28a39b67462cea70e14d805639f6b6b211d77b98a6bf653e819aff94c7d93dde62e5f65355ec15fa4e9ac7ab1c4c66701d8042382b03c92a7f04597e5c67c905447b851791e0fe2e0fe6f44d5c98f86fc454cb2d80977563bfb0ca34402b675507df5972fb40e9197751fce6f29b620648a79c83a158860e42fc503c7d580b14163befd0fb9e4dce73f7814ff8a286cd171817aaf310ee480ace3c9be502addc0752520c25fc543b89d94b6d0ad9b03fff7d034399fdfa9fc15b125d848c80031a89c1845ace54d3597f118e697959ec167b450803719f4a7aa40708ecae78a169fec4b2119a0892db51d07727c51fb9604634c46b86e82a30ae1ee97130543ce22c957dd6c0dd3a741cd2d055c44dafad118ba693a8816a4b0364d708af9c43c08304d4e86ea742f28972f58ec614068188ee4523c2e345199710464cfe80d589d9c45d14c43f65f7060d876ce6d2b7e0a888cb8b9fa1784b61368ab31d474be6ea9a1bafec7bdfd14f508b9a30ad07781cf80c403491210c7c4f0ae5c92fc0cc3c5d709cf483eb491c0dc0691851e1cc7ba1c7301d8056e2ae31810e92235f7b69246f9b9c9f305a78ae55687e90472e1e3094e7e2635b94ae2b0df5d5351332a228bef665ef50766a3e05657f3cc12c2ef4644e7e9da55919ad8e079eaa2ecaf832378fb84da84782fe95b3be4108073b0e4fb5020fca654a93d4fde37b048dbd6f37ec870d4e70332d2e13b85d4929b4d1099243f536a56fd167e14c82a3383d86197817ace5ab8d423d547be69c80e4d6fc09a09afb8343098d2fb549b5fa3847d131e94d8f929893ad7077b1e54894d2958a7b4728ba41422facf0252e64081c869f7e53ef76188de5c7e85e82d7067277db620567d2799d0df77076bd74d0afc69d1b6b48ea3b52a3493606f8d25f793338073fd658b691b7d4a4d03f98a3596bda681a607c117904a1379dc3e705cccad7ccd0968f4ebdc85dcb39e31ab7235e55442af22b7b5ffbced6728a59ededf8a766f8fc777156abece5e669c29e539260bd2dd48b8f33168bea154e776923b777a26ab2373abeaa79c5250a15192d7e9b7b5acdb8e0f85905ec3f60b13bd69b4e73dda87681b8d984ce1519d9f078409b30f0594b9981c1789a8a66ebf3c9f1db3928d73f23e03013a840cf58ebe7e778b895a22f0ccab141d309689e00a914920cbb391dbd1acec99056c3771b6650e0a5ac540cf2db2044412c1f999140a5272a8d1d9808ac8c0988ea9ac7e2cdd57e7493c973affeb8b5305a4529f5a237c2160c1a630ce17dbbc1b2889add458d2b99d98dee85b8f4103fac6ecd26223a8a3a42b49021e1b9d3ee6e93a46af726dcbb0bba400a5147afc1179b46e252b82a0ed6cb6054e1e907152c7405249e4045ffea9296b896708a0778526916ae639d82caaaa33ea55a2bb3c4c42eda7a664d81144da5586032dfcce13cde482a6668dd32f54429f9b14c8924840c5a51d51161c3629ee6a495eb4e824bdd676b2e8c32534e6bb7224261ab8362befc7cdae20ccf4ae2c88ae211d6c468222ae7f204c3ff36e8143b94e9410bc88ca334748623b131634584e14bd6a9dd75e52afbe363222875ab445d44f4c9517168a05ff571cf6570736178ed79dd4ca765b644b0da469ae9c5ecb598308471de23f8518fa1fb35e7e52fe45f4c03ccda6c5fe4f6b018c95b6ab1c7440a903c4b435df91822244f3b63d5a81413f817ac4ccec33015b6d8d1c6ecc4a4046536d6bfb7e23443033005681c6a535322ef3083d89869dfdaa086b2d21d2fc6749f72774eb13bd0ed982d465202903402519381cc06701e1454252f3160ed9a979075ad0b1394ce6d80f77c8fe178b1d2fc9f5d4b0dd10424cbf11b6c6a4ed186847c9aa84f1bac74e1f0c9497c221ba7cc64531558790840d5e16df8d08ccbf30c20ab3849fe368285b62dcd32a163e7128123d366394777c4d796a4c32fe513a4ec6b58d605bf5a1e254628a1a034836ce09e5ba84068f176c63b4b1f463f851666283dfefd4ce519cd4872a3a0a80ca8ff08e015bad2993cd92568ea7e2f2dd4c6224c735a9fab77482fecc268e8c51ff12b9f6c2706de70b29cbe249511f21e3f846e1112bb17aae44e55b59c26d7fe6d821d8ec805755795cad221b5637b02a11e54ca89faafa9fa97b12bebe2c2239351c02af31143f84e130a451bb15cecf8c130257ab6684d5213e37c25321f4065aff8f4347dd3deb86b7062e0ed136ed59a53cbb0c37453128c158fb6f6498dd76a631add412edbe7a35647fe575757d39e89bb7a7cca7db4dd28d74545fe434b1727da973b42bf4e8ea11563a6e0b3807ecb34fdb460ac2c718502f1a4647107ec70e8a73ee6746517a848bba8a5882937528bde36221710d178fdb3203405d5d138ec8004d027b6062db1607515845fc1b8a1e0afa212bb57cc237e6ec91f53b38996ad0ac9ea312aaa6440d1085da288b3a5942417d316c596a9de33e59ade21a30a5821ad5a94c0e28ed1ef58cc945aa4c88b5953166f1939119ca516e88d32f2b4d0e65e4e2465535c425c84afd0b9947ab090d38a1870627c079cc13113841a022fc8e1eda723dbf97f541ce390bb60ffec8a67fece7deb39145e4fc819cdba3e8464809fb17fbbfd20e1b8862669af22239864f81ae32a97b2b7aa5c53d20bbedea94e2ed3d9fbca8057c19dab4d1d1a2063c2f42d43a6493012f494e1bd6bd485f9cd238f8bf71adb3f69d7f38f2c1e725a76a4d709caf4b978db800da48edc0551cdc5d61722dab78629ea9189d668511e5d3fb4f16b1a5e243354f9c08419eac8e0ef5f465018ab207bbeaf909a5fec4d31767fcddbbb343072600f15c7e391d5f43e5daaf212c1ef3d2a641719ca55743002200cdf02d393fa9ab429c46b71879c8a8c7c121fa01f0f9e14f691a5980a79d26abc4e3623eea605848db36a3aa3384971abd792f085a94c87ef9de4e37b7cbff79339e01f004c30eb387a07980c48c47b2f3f1e3efe8bdfe15d3fd771446e230c91b4104d15357c5fea925d229b65c3ed49187baab9b43f8e96d27b8eb975e00147d815915b4fd491bcfa30dcc4b5aff6ade82c37ee3f06e1e9fdc515d6a8b3864e9d04312e1179d5033161231c49d2576c8a9ba8dce4a50ad3176e4b5ea3e9d1576e43c10cd65ae106d051f9cb4543052484fee96ec626277f2006847eabe1bfe2ae75ad004288fc337cd848d22e1302e14e41f0b921a96887c1f63a3b14a781049a2b8c1daab5b04c49156aa0534f42441b579a3479651fc05f94c915de64e4f4665522bfbaa7f90cd05b0cbbba313c166728c7194bcb381bf4b9d0f4a8ba25a59722475a46f1ddf97d7552b0cf4425fc758e2805fdf0f1f68887868dd76df2450e7ea385a3bd65cff5f3ae263eb2cf47f031f3edb84a4585d02dd5ec776d10f1fa5b4355984818497e91b55851146bfcf58008b07e41729645112eb4971dd574d2bae1723277b9ac16e94b4066de56207fdb164367d4461b1c848a3f7ba1bd703bac94320e881a89d57cb80b4953571bffc3220a70e2c5543f6951f71bc240eab239bf78321c01ac1e12048c87db076ffdae45b0ad7d4269894de54d8a3416820c05c6dd16e32b3c9bb26a1d1a0279c66d0c30e1a6dc87e8f9df551aaccbb1e72596995581b3d5972027613c6049b2e4a8dc25142ddc9668151be06e9692b055ddee326c80279701c72441d47574ede5efc40baeb6f5c5ef2e9fa62a184e6e08aa437eef90ec082ac4528878d329b824a47882b02004737303d7f45ea53b24cf337d8c21bc842a90105ed9080e755acba03e50066963a37820fe31ffc01569484a21fe2b668a328d44ffbffcca37dbb3fd7b4c6cb58e113a017b6cbc9291f15139ecf7e1c16d595f05d6a384e6b2d01250180ad36c03458da70c69640e2144bd0211682c0c03700495d50cec842109cbae0753db2d0619b578cdc2ad50d322040e7f73035a146376a5ae50140805bbf3b7e49c5825abd24715e8a33eedae0119041fc49cd909ba07c001d941c4f50791364f71e7df321305dbc3add5b0e3f3dc143f2a96077037876444088910b37a6a3990ef53da10f35b4cb85b7269cfecedf8849a7c186a61837b97bffe5948e44757b306a128b9c826a9f4aab5512575650cc88e872094df925241758d87d11eff2b6e4834a4615e3e629691b3280e114309415bbcb87d541965f4831fe2639b12856d5178efb79596a94e14aa5b0351684ee762416e35e7cae16f36dc6a2dc092f9936a31f92e9078dea4308886b77663b388ef1b12029763bbd3d823afe12735cf9d41e81ffb011d22f356b62fa16acc0b81ab20d13716cbfdfab6a12464ee035799ab78bc4194d681a2339cdc5eb94522d9a5494ced3cbf051eb8af76f475706e46c728174c8b5302a293b8f73cd241784d9fc1dd9fa93b08cfdc0613e0a736e5ad4ced21aea5a182ca197bd89c6941e051b0208faff298c4b17b58c46a802bd0a9020f2066bd7f490b7f251fccc45312c711c61673841075a7026e9fb61a9c289a4b2a13e6a769b30bc0c20e86faa4cccc4a43791580b0a301edec1420d117607186799c2bd61439d20027bdedb790eaf8de8786b32b9a4274440760b5a0f646dadea4036337868e8898b3546b9dfb30884602dd9fdcdb43dfce93304313d207eac4270f72f9dc446fd45c53f57a3a4f8f8669e7d5347eacaec19cbcf3ef8b6dcf6f3344c0a34d383ca8456aae1b17e2cb3c02d6574f7470ed3c1322c1304d90cfc2828152045909928bf892eb284407bdcdadb9c2db8fcaa87a1e4690792576bd073f04af4f39dda7141e850861c8e0476d1ec8b1e40becbd6370406e7d0e1427687b50e0696dadb40e8027684fd12a48388d109c000518711598715f3de82d60ca3f9c2ca55ca2f86351976c0054134f5c6b3c859461453edde5b7171a0e27a67ccded5ae6da9abc17b13d393be2aefd540d07bc58a79c4a1a5145261968047233d47a41f7e21ba868cf2ec4df6ddd2ff60b42007f7a3dbb6a8a6b37e387ada9788b495766f41f936c072df779ea6560ad92bceb09abbe62c922df2d1fd4dbc8b6e092f207269ddcd34a41b5f976bdc0c9a7090e454c16c728eb61bfd0434e46ae32992ec7da9f0b6d9e60d3b1f6cd023165ed16817f11c7d91c2220705a2183a079b7e37726a4a65cc22acbe7aedb8c67d928dc133e6d927d34e1d20dcc9a899c2f0d9d9f4a9b38c4a464b210cdbc8abbea4f6d02a94d1ed6c11861f8c03c4fe01bd347b14e43af2d1b599c41a3e67cff024a02e702f20d10187a2d22bd6d39274bf1ca421d6edc19e6b0dd957a3f6b9abd0ed9dc6a739797d52c2db07c6dc53e434b1508f558e17cedcd970c4bb1259c3f7fe3906e41d2c3ed8e2da69b4a0bb57c3f6dc131355a40b205bcc4d8fe87b4d4d32814afe0e44fd09eebe7034bf7f44090e062de921eb4a21b8a8f39461a31d72670f6d068c18b6ea2720af4d961155433d2e4a7213f34db16d3a6e5a99d75d97f83b8f7a4e061e152f46bac5f307454b4062059b96237b234c8d90ca1267c4ae56d674d6f2fe301bb9d6635b082802a0fd02e191918181517a6fb210bbe27c4a884e20b23070d9de5d589a869bc016878d5b6949b952b23315498b2564c975d52024f8aa89d852f246a6b0a1b9a6e648bce1923013237694bfab99fd558aa8076e73815e12aaaba34ae23147b49c989427fdb8acea6d2f5ac0d4851deeede4e42222c70abe3b1c3c6202eb906be90b9c0b6e324e3068e5fb9779cbd278f9c0c8c14ea3d64a80f57a53c5cbefaa18241c82f357dad2ff50dd4000fd77bae25470f1d839640c3b2a1d749d2a437b547e052a0c567899429c307c120a4432c5c2763bb6a6126595f0a6722d4a6cf81aa67a427a3501b9088c1e322bdb4404d0b528c58404e598ed69082f55288421942022859f33c953102644bbbd3cdea581e8e9e53cfec7c5fdd3854c083aaba0ab94e58a0f8e444a4ac07217eb554b439841d835590beeef4d2763ffee4c013944351df31ffeafd8f4bd242e96c26eec9820d607dec1b5ee1553ca0b6ea209c104962d631ac1075c76c6c7e831388c9baa9c5029dde55df2d13130fd7eeb2718e4208014f2d7d82a3fc1346ff9cf8e5aa550634f75e064b14a29762d74327f89c44a72fec1ad6b43308b9451fbbc71495f61e6d26712525d32c19512665d159229c4ba02af4f5cd94bf12d37f0ef95c82f31fa86e9b4b56b184f5c56053eb5ae6b88fd5a82ce21cc95ec54d6543f50efebea5b57822d4b8e2b8f5242a998acf164103828a1732b00f016ae215f94de42c63eff32a4426cd6dfbba1085633f323ba79b4d888101784874c91a5c094c725c28797efb2b48810de2ca3aa36aa0b31f2752c6578f56f23dd22030821c8b6a2bad731fdd1e045d65e9faa5aab9065958b726595ae361647626394fef294b1c40e2872080cdd88a1fd55f725f088ca342397ffd4840f43df352c4fc7a7686512804995e682a11da2bc9fa05210ea954865be55545eb9242e56c864703909e652ac0405ce5656ff3a1003dea4be2628c74ba66409921202ee100c5612fa5f02988c45d81f859c7f2224de8c9cfe2a60ffc67e65af7d3af35b15efe437ae44044ae40111aa2b33bf120dc1f2855a019f07cf4ec710ba477ee30e353faa0e445753ce78a8607b6d1d69ed31292d4e4667c20b9e6317c78a8f25cd0abe482f88bdb263259a2141bc6768f3b6208b34dc9048a3359a3beae605ca521c53077e095fe54939ba37eb0566f98309209200abc5a6129ba5f38dc9ee512ec95f10e84588d92d229136f5b044709a7fb5e4259322c2ea52943c093b8a09385d8acec9d5a9284e1fb52bb2868726d6ba06bd6a1b724cb01efb4f3e63301e9d1a074584f08506c930a7bf2b9e05abfac5fb96fe3d8068bdb1119caa109701c6c52c5c0213720aabc20b6843dcbcebe94ee0e40bd17c0b9eeaf6e8e0a1fd338175c9435c632743242ce524584545b0d6c36d3049b3dcd627f9d7f1c0ca76e2129c33d8a1e682603036dff165d32f7640e5c02251a3ae3583b185b791c506f787f83297157c6d28a1c5247eb57494afccaa42b3e02b8e5920ddf7345145bc907ae8b7ad8641024034128866a775f2cd55b64266b364beaf9302dfda32ef42c73d88b9ea312f28f60e0a8c69a658ffed4f59735a5911a19b036eb94af7ca34cb6f53a1f2ec600f6422db0fe13165a689036f6ccbae24fe9ec57abce2bc8571ac2a7affdd939f9fc3e33044a57f8ac4dc3f1f5e07a87b345c1a57c6fe372481de55f5fca6e7aa2983f7b5d031f1e6c63e136074460f838032f3e7112167458d0229409f64713b742429d5bb49b3ac79cf0288ebaba503e9c003c4e0ecff2431362f8f5eb89683db9467c0011ad7a3bf4c300f13d063e4b7f08574935de5b3d8f36e823e90a89172d9726ee13f020a889d73f6890e4c276e88455ca355e264720d312b599fe74bd6eaca143825b6241d2a29d7fe8b6c5b2ef594088436eb0a6091067b8aaa1274480e55abc2d465ec67ac5932e6d94df2f6229f35d62d0955224331bf8764fa2210710198dafe7b2f79ba935dd533ec6b9dfd8449e101b7cc4afa7f96e7147203f242cd3d16c62d2482b46ec4f3d69a105ecd845c00dd88c5542c027da36438839b0370288a40d77eca6b91a549c0fc20509c76ed04097ca5dce51916abcc90e965cf6fc55de696868d031a242db9b50b1627746f490c199f3e6efb2ffee127ce1896f4eea05cbf81b74f8da12596c61cc59476053910f9814cffe130375f2e29b8b87dc8379e54fccaebdb66d78b103eae6d3654aaaacfcff091393a33b8758d5e7cb25b70aa5c7ffa604252cafcd744b8cbeb805b6a7ad0bb457829f1051a1e9364f65c045a5c9ae613f4960129a98a96f0fb64b1f3c327226d439e1d36590d0b8e91dd8c88ebd049aaafa2621d19b57e7fb46f375c40b90ddcd590196d01850dbfc7d2709f606be9aa2d462a9f737899b7642118cfbbaa034c95daee2871364119c0498923eac7c1968e2ab18f3f4ddffea4865bbcb0054a1b8cdc39416e8f7b321c273293712f27b37e019a82e979096aac9a9be612b762ab2cac8675fb3af271d94746840398d482169821b3ba43ae537c93248fd2e62124b503359009c8900c38645c34ec4d5a7c291f2875c2cdd0952861121543f91bc482d14bd9a5b6df49c256127715e7ec334a17aee444aca4db71ff852bf6a0f0a0fbd35d488ffd8dd8f18d6017526755415a63fe76c09d0362a9044e12a973d4a67e571a65a4bc5c92023c695af5913386ac23f15e95304602d7be920d424108bd807cddbe2e016a69f644d3847fcc0938acd95ac152c6676481afd69e25613a7d320507495b2c01230d4d0e40322fb266ed906914e24540471849f02a19a51be8af9688a671df353d2ebda0725fe580b73de546baad3f07d00532bddaec490442c3522febc996c3c30dd842f0c534f4c0fea36b77f3ec7a07726a887c5f90053417ce12131508d16d2a735ae51b43968a0f4c4cfa83582dc6f33040726f88c2a570eb0242237ac647a038bac4452eaacfb92d21f62324425dd2ede695dfae516a91c2a0912d37610752b02ab8c52c0c6d8641afca365e7dd505def3a41a6faaa20adc1b6727126964257602a134ecfe19f6d382e1bd96cdd2cbde3f3036149e27b66575037ce8047348377611944a30a2521d236a5a2b4b58e9e1ee5ceb1629258ef4993ff0af2ce6def5df49da6d04c46fbcb85efabd31c96c300cb449c7168c9ceee7cdf8b43848820b9175c12238bf8518be696ba9da5e30d885ae4e301d198240378ab542297b7315ca489c3ac6db4a90a1cb3e0da401b80a32ed467e81fb3184c0f0b53c10228ce23a07d1e20dbb5463f4f0d3b3d47d5d3f81dff256ec1c44edf12af716bdda133a2b231704e56d3a085de31ce347182a22b0cd7f4c59c0bdc4515afde57e05a57c1a97bf53fcac70ccf81afc7112dea0ff4fcac95cc2f2f38fa28c160a1c61d9739c90b08f91c64344b00c679ad26f3712040583a53de20b9f1db6930acc098f84d0cdfa011558e41233deed2bc0423a9175d40ad94de9c857ba452e03555fa30d5e9b07420baf4aba73e0100f7c1b8e08f2901040c207b0aded1686b0e5f74942c48400e5743aa67f44b9f75f17235d372939504c399620515e6f36bd3b14ee5d4b702ce5d2a275ff1cd76b772ec5b05a778fbdda4bbc0b59e594632be9d34f61e3373d288f0a278343bdfe1a239d5fd12f198183d3528e8bf2bb3a0e0a9e21106a9b45d7a51f93735215fe63cd3f68467001482400ba915491d305c66e8cd1dd6c4520edafcde6b7f969c4249dbe962b43e7eef5da910fa2032caca1ce9861830fc1df317ddb3add66eeda4875800aa73c4643dbdfc45ae047859292b5f3785d2f28d8ff446ff5642ffbf2fd1e84630919972145ae09d2c4510451f14f3188b8913e30770fc422cf171a17742a34679616b28d83ef843d0f689cb6247f7e4459b33a3c1181318690bc036f9b15d0640a53f510068ce400f4748ce968c4aec18a95f3a4ea7fa6c4686a41227194078aa70054417fa8f17bf06b61c7dded530dbd59414b0f7e0266e25693984e132037df3daa38f483003527f59358b6a85010a59e3c8b204e905e607b428274bc787e1878d2a7352c941df5d7c4f64e037d461df3afe4708128d877a366a82ec1bf472d72d6e3a26ded17478fa538030d30c75def43cdba235445841bc6434363d5f951b616394155560ad265a42b311363125bae48cbfae29be8ca8dab261888fb5cb04831b322101d26eface4365e83a865231563c7e5a5d49480dd1ef826088c9f1406606bef255dcea7d5229d3a011e8a5e8a534e4fc07569a18718ff7258363433f9a891d99cf5f52cd29a51f88c241c779e97714adc9fee3e789cb3e4805c69b572ac1b74241369d8cc030a6d3db7d0049aedf225f7469421597a32a959326c3ec556c5b9bc9bdc67ae9b44cc769c06a5de99775d4ba02878db455c412ef4c955313190115d60a10892280bb067a10d596dfa5a3bc9ac1aa6a0e191497241f4d080cd34da2ae863b8ada328556c23c4873248bfa7fc59b2d50c12b52500dc2463ed4c3cd8a031396b546fbc717b21c31202bef462aabe1529b8582255d2cbae21ee78493fb755f8dae06ea43b4cc88c7eef2cd65a2e720a160a03e952dfaefae0b0849061fcf58fb027f079c15b946f23921314d948432b2598a2cd115e0996b2f0df1ada50b5c6fedb825d1cc048aad4c50f83a3c1c155a0429d7ef1a5d0e3f2dcd802829d1e63283fc17c275697afafc0c7e17ecde8f4b46d7449faa789522668cde5e30d0e570d8b5cbe95a81a5944bcdc9edb5036f25dd64a6038f33079c7bd4e33281efabcf779235eda4eebb4f4e8881c5d4fa6bc2852686e67fcf38bbb140a560714d46bb829f211da444c674a55761d6efbef8967e4d3b6609810a19e25f6cd63645f2f7949f72e5a43943f2bb6fce0e0e6c5fb3024c1075675cf172174084d37ef8d0e7b26053b08a3e105d82beaa9d463bd2f79109a5c88dfa3c486127ede1d7a525296fe98d0be74fa1576c14fcb8c0caa25e9a20c718d85c13183f1b6527431ca7a9f1c16172c41de9b77e0c011ff8925bc625bbfd4fa8e0220fc5a0aea80682f1c802ac1bc3a21f75653fb4d4e6bb90c06be995332631d237cc9c35f5840c31a32bec7fe4191c8ad5e257349fdf56a663ee5593f180ed6f21416628bfa5f113ed1a16f44775affe0ff6567803212a19c4e161c39c6e51f06e7d174caa10d7c6ced3cbcac126e0593e2e91347a12b041eaade46e95e3073806fad34975fed946803722e9a401d3e4d268756a389b857e1316068cdfcc3b3a4be4d1ec4ac9debef300b287ee8a0f9bbe60a04af59349409cd4c79c1eb5bca245716f107b3300496654a48b105f63708216a6ef4b262188ede01aa8a9f73bac16a313e5eb8452a133875634c948937b1806d5f025f7831f0a626b949185b9259e11a8ff3bcdc5f2af5589ae9b87c7e1096375f6772c5763cd6363de13ffef3996081e24d7fd897c136b111324cbea8f897be93cad29457a314b4352d95ec37fbd6e78c2f49160589cb1428beb8dd6eb73737ef6465ec20393283771fb9172607be8a11be90beaf720ad04ca9ddfb6a497eb18355cc0ec1f4c15e18621ba52028a9ca9e94499118c79e46cb8049d1be5214ee475a81dec0442fec89c7a8e22b5a5938e1ebe5840728458de28f979e714fb4e56dbee070af9a5fab6f2c94a00cfd97c0f56a3194aea94dd10260203072c377b9866d501f045d3088e1faa44fad2870168b2c43fc55516164065866e58be8172ee0945e3256a541fdf40e68120613a4feb09886f534f58d1bcb99aca9eb35cce13156b8a4498275db3824d1154f44b14101da2fdcb5c039a50d100db6b12dc7dcc64f50143a1f276a8d1b23904b4836832b11414a6277ac78a5d6f9ad30872aaa4ef1137f8fd4fdabf1a384c7abc7711ea59d01af24da2a9622cce3bbfc67ab26297240bca776440ca2607efd9193e50cf6bd9900f1ae0ae49407452f188f37da4c5302b2fb92555c25fc5a6f9c29831934051d30ccee5f7039e2ca770700499064d535a6e2ea1d46903466ab94014661ba86b617c12b1e094e1400be8f3528c0932cdc42413088a2a2fa2c2686c0c86bbfc8672360a668e1030ed00c0533cfd40f1311cad80bf31d4f724559ea527028842dd1700ec180c241c73a31a996c55dbc78e25b74d7ba0842465bda902213801847c19c74eacca7031f699af39043ee4428d092ce4fcc33ba141521621f008482f09dcf57d8e564ee026d2b42e38db3aa2cdf1c6c55445db4641f5f1a248182452122fe1e74cd24fc8860c91d610f1e04584d182fbfd74d1bdf67c344afe430d0af0077801afb337bdd2c560b1fc7ea841e1640d3d1e208c58a35c00ed13a8856739a8ad9c2847ec2810422a22d896207951d3cc0ed526bdf13ac4e35ac73c81029f45af2122bf2081be940838d8e4a26e0b12e0647add00305b9f3618ceee44092812bc3175558a0191543703addcb8b7b0616746b9dec22d0cd83512f53ba1fe87dcc0e4cfd70fb703f87a8d3ed453a9de854a7534012071363665811fe6d19338b1f51f34aac6e51047e2ad87552538ce902d8ba65c823ff198a47d8d22f4f29127248244f154e463f9887a1176a66ada0cf63f9c2138c4a2c51ab6e0ca54de267ff5ac62462d5aa73d33b33ed26d522273e2e53be2168d60321e9ba2470a7002e913cb8996ac411d79547603c1a2a3f9155cd4c32c3d36512d75f274241668e9da07d3228dcfa20c40c70fdbd58b8d3873f31c467cd61c002cf26c675d833794eb4c1a4d77f3779ec3bc55fc6bb611e7e7fa578cadecf25316de4008ecadedfb7a6043092ba6f7d19b9693a018791bbf36f16627868833263f972a65d8da5cb8475265632d31fe9b0a93832d36d1000f396ee26bedf532a3c2907df0ad3b0d8259fcc162735d8003e73fcd02615eb80a2a76721642ee6791345b6762a1a5b180a309c1a0d46b2aa302342b39d000b0df984b843ced5dc725ed1e8184cb71cd5edf2926b1eae32f988c394a991f18bf2139bf6b20cc123a873d23302d410ca5b15fe9ee9eb1b3e143ae86611a4dc789ce74c7a3a3779d591fb26aa2fd2eccfe2e6fbd3946a82986762705a1c4836cec108778b1c932593b13387113ce892085b97b773b018932534c2c059148fbd08a4074f10508dd8752190d3fefec0047b840b298d24a99bcc4e995b9784886c003ac39413065a16da9674d87b7c4b4b0edc292cda563f09a34964bafa28dd1ec7e8badafe458b45400040e00f500dd75390300bdd24619a041b68fd90a985deeb9fd42473d88e421526c30d3ce4ecf2858d80c8e63c22d23ae785255f39aa545b8674193200dc5908f5f1851020ce4adc6eb8bc6d14863d34dcc87e387a34377183a00f0a21b6c71bc8633782a2566a056fbc23a40956e10ea850f37c07577f95673e87698592281ea8a76fd2073bc5e186ed02f88280384873a56659ff27f1756e76e2e9620cf76222c2179d63bc5e7a6a1833f72b80616c1c6a1c71db3596bec27c1335063c7ccacf15929f47913f591f7d1e1ad2b742418bf8864cb0a17b66d1938d6ba19ebcbc9fa64c205cdd75c099e9e71cf05a255f90295a34336d3d921eeea10c2184d33a0124f6c9390113431f113b4b7da289f167e90fae712a5b5d92c11eb20063b37a2bfed73db6ce880679f48718540175b31ec6eb3662bd3d8807fd3aed0dfdefb88fb01ae21d44ac47dfdb9e1deab368081400c382af3a38e84cde631d558dfa0f3effbd2f0089ce753e77e29a60c72ea3dc138f240a938ed65bbe87d90431983779e701934214f37b0e66c7d1b8182ddf4cfef400be8a6f18ff5053015b55c84f7b1125de79ea90775eed6ba61331e691a73209dc79b2ed4b73c307b54cd15c41ffde1bb2a9ccea9e578b7892735c4ae691665d9ed571b2678bac9d5008a34da913f206dcbe1c93d58dab37b74c8fa37a523947a41d8fb6869a10c80f43390f5f3181f1604e9c992e289872aa6b0538ab272e2ebd8afee03701b96e8fb920bb6a800327572b5b4ccfa4fa7ff93b104cb02eb33c1fd2bf081b58a4c44fc40496d92251ab3a979a71fddcf4242af93af25382001af2c94a10bbd09e7544e0a7937b166cac053025c564d3d85fd1c92b8504e422d90310c01bbeef8b8fe7ca5539fa004fa44f00808904252b014d6e6a3a9288ee2a517f1b9a35ab252e4c74f0afe21400f7bdfe815d490ff409e5b188c684d553c72a60869c3bebe108634d5cbebd69d4652e0a186857ae65803d0fa6dccf579f48ac89d543230cd1d3f337437b0c0626c9f3aeb5c73339a295986cf34e82ef79faf7432d51d4c5775349ef84310fa263d18ecf97a9a1b0c594c424a62d2a4391c0d19f9a4b50642f7c29012d831e4b1373e8da764f84c6ffd4d97f8c24d2fafd8bd6056220b98b937d98d5939ea47cc1512077cc89c37394d8e53a42e3620b3ef954fbd0c0a09751b16a2551ef01feb4d649d01c4a6d080478e0675c23a3bd675906b71ef96e326d8f9dc4e00a45971d6cd62b648bd38f88c16e62641e45faf4dda4130ce22507790c3564f848a76915c6bc153f706eaab18464858e5973892e26100cccdf50078cee8198335af977e607d3bcb7d8fd5206f073483ee688f1b4bc85ec99cabba40ec52cee7341f9e0ab4528f797a66270084f001d56d5d32ff6c8c8aea58462029450f8973aac7b337dd8f983420fd6a7e47a94ebd84df788ddd7fa4431d3b1570f449d0dd19af483dbe96ca84c554034540b466525919d8015624b426932d88a156d304832859affe0e5740b6b2b6cad8b8f99fa3df1aa377fa0434817620d546c302684e59ba42566ef2945c6ec94c97cf003832eb40000e9fa55f6fdf8335b8fa2d2c194a89e696e361ef4a27bfda0fa15cca5a56889732aaf63635102080f9b77ad822a7921e4b846323fd53011c4356bcdf7151eb074b450458633edc0e58d415ff6700ee3fab9971d26c85e1bec8dd1920a1bc826a4cf756b0984abb1f743cde7b0fa7a2455ca96582616cec4bad69d48c2fe41cebae8bd308dc4940429486ca95cd093c445364b528e1a6aff88ab6343bb38abd4001eac68318609fba9f440f810cb9cbaf8b43a9b64119ddc3250b7875fa7c8373f0b2ae3d8934cc4a66af26214f8e1537d0f4d696ec69c753908c44b5a089e22e9d67d78a3b6903e73d5e40232af8091cc49bb3c8e2112172cbd32f8569ca2705869edb7246e6c8836dda2c6a9f94a20fa6c301c1bdf5783c56d4c7c0c3e0ee3e76be08f04c78cf3290da6227991acf80aa450d0195d064cdd443431334ef7dc24a1da0a12052eb42626124fd80a6fe21e10a59be10c4b3ea71a2e64504a6cdba0318da0514b71130463e627cb8cfe5f3264af2c0fcd608f226026cce9f2b495a778333812eba0012f01cfd272e476b88e02896c9c1acbde4651577e05a90073899f899a409f060729365bdc70c6478bef99355c70ef63cbf6383b0e1cce0174842d9dd0c7f82c465bb510932d2f2e2013186710cfaa2212e13127780a4c0f77717b83247c083579c4820749b994454785473a02cc0b01a91e4a4a28899e2acc6bf7f3d7dcfe0b1f0be9885055156403b1d26ee0a2afa4591f272befb2d2ea54d9d7a9eab353796fa78a380b484cedbe3a0a3c4a36c5450da8dbefd5bca18ce648cf80134960af4f7f3fb7d806d98a219e649c082b084a02de6351f64d34d6433028e759ea2ea17acc45aabc409fd61f841f89e8655844481eaa6d3da8a82cd18332147d8b033df727650fa7136f5fb350f518edd3d8ea46e0bcc04ecf001bd7c2861c175933c20f0381c0b40f72c70f8253de41942b2520e230202e160594cf51f24cdbb41c0f2ff3ed89055c08587c225c5c3d5e69d4b78ee82d1a0b0b586212824ef68b58ef53a536db6d3a217f0c4ae67f03293e3c09d8fcbf30a53bf796ff87210aa5684010751198fc2d3c7fa6abb075ca1d6bfb0d1e6b296925808da253966bb6d311b0e7f44e97cbd4d4ae9498760edab5afe73a8e14e2511bf454e02ff727f17fdcb5ee1b59b6346635e227bc62096866643fdd8266a99ea1e100abb584c19c92ad374409b41ba0062a50989688535e8275f80f6c2eac7603d43b24f0ed94c0bfbf9c01231005f5400df88b91b02f85115f5f9f060c22ff99854fe59722ea3aec8b6e21bcb0dabe105013fbecf4a6aab7c851400bc2d9851180c80c784a68be647dc2a13c1e3cea2ff0d5630a9ec4fc712638fcc3ccd436bcdd04cb95e5fdee9420b9ebfb62ebb9ff4c9f4e67bbab41576137a17c3b3b964d02189d55c73b15faa826293286b26245b742a1513f8ee2b062e0e8990b68cc5517761af11a4a937f9075caf58dc2450f1a8b31b4fb2e6508da55ddc7e3851d82ea79ff72fbedff96f3d62a9e4d57103ad0a4ac59907976f112103fc10f06c734d9b1c288f385eb7fe0c5ce9a85fa8f13460c420d53d8c46c175415e03064cabad2ddf75e4d4bc29d3b48ecad4983c9dd0a5accd83340f726779b9b795ad9d8178375b61d4a6ff082b02a8b355b021cf7981d908ff5131741a5a21b4a0330d48dd28b981f8bb82b40ab3075a7a4fbbd62a5401bb5fc2c805b0a6eb9187d93a8873074ee636dfd9275feca97e46bee4669ac0cbf4879a6682ecd577f157a71c8f8de30fc8ebc6b86b3c1896232664c46755fa4121e6132edffb26ab63acb7e6b1acffb7bfd26724eca3a85c61ca10457040eba3a3a00d81366078505b729eb20561c419a42e08e37d739c9713dd3478d8d4e6b4a1c7e900ba79d124cb2603e886568b6620dd1b1e83e295509b464daa15beef72a6da0b24ba0e4591a0ffeb3c64659eb0e7819f40e6b033171d8ab03b9e72b4f8ed35d8893f69670f0e95fbad08c9a797b167755deca0ffabf76b75d97d62909a85c136e5922c04931f441d01bff3a44bc79b3c526dbaa86a8ceb747ca1975088450dedaaa70b3f5ad8696d2f4595cc6db8b0a1201a01c1d068bdc772f232d4af9e6b51bd2492a0474550a2920ef13492625656612f77ed6d5cc4d53280431c35e772863732203f2794685d2cb841128c59530c879a08938955c40218024d644427be1e33b47e07804f22258b47304087d80dbee9b8f44ec3904b44ad2b4c4f7959061db5ab409c968bf3622f3bcdc00d6f6a56283a6457c1923aab4098ddae6c364e457d0ecc2b64f51ff832b041e34b8c558d66215016d7244cf1b5a78ce56f8abe1521078c23f5f5664c1d5413ad51a4174a946ec6ad2c87472925c7787706955041d621d85ca88fd553b3df32f69d2114560b6e3537c3866b956d7b303e590aaea68d36403ba8bfd89ac859651358e31a18a45f12225fd951b6534ea39bf068f250ec09a4e808194900edb6ed07e9b7d72e321d05f1687d50ca64f30170d517717e88df98f94438a4bdfddb7afe8a905c9da3ff3ad47011e750653ed1493f9e0b5eb10368084844c1ceeef440a19092cc03cbcfe9c374d855b8d2233f58645c02c65af3794399d4da2ce3e62d252b02b8f726e9f8ca5ba44eaa304a947fc114f6ff4c8e7f1769ddd0ac463d40a26edeb121994392d65667593f5c9383c78d9c9b70fd5c9f0b4f8e602103b4e11349d65be69e7e6c4bf7bfe5680922d95ed8c5717442641c5ff885efc5f8b35ca3c62cd4a8283dfa69c49c8b53c3826b8890662aea9ea43e5c27bb41773d907ee69839e98ce7c657b2d9388b2504001c0742289ec97637701074ecd0d7813f4294ff8fa5004598e0ac51547d0b571a8c0e7b9e12e5090012639be1c476e32fcb778fb1793f826f101a2822964ff0a38998628e9bb092a26dc4e06317e02412969cd3eaa60ec2789d43894ad50f5321f43622b6415ce22239254c9b8adf9e8adfee722b83097c045732fda19fc9ee08c584ae13d5ec36a14681588c97c3fdd5b0ec54e3c0d41d02d73ca600f9f6b8a460d8f75f2a6d8cd40b8c6ff381a73246cac51a7a23d0239def20eab00a2b0273099878e515ee98630f0c4c155a2e1fa076b5cc14b67601d1c70e733601cc131517a336296fbf64ff85ce6663a61dd24a74ebdcfc5a6464ab4c94836331f2582942732566c224f9bc85e4f5bb04b646cfb829a220d7678b6af67b3520690504f7f6a3a3d0826ac573fd2787f83f15cb8a7bd3984eeab6301faa94ee408679635ef07b3205c91fb1d8a158d752b1323716b9161311bc3927e4e7a6d63f0c724898623bea8452eb9b6aaa9ad75c2d02018c188395b1d44ca7dc95d4dc4832221aee7bc99d80083ca8fad373dc3e9e5cb1c0f9ae00b61718b5187cb25cb7ab7848e4c94592f89b9ae4ea6c48ec56c2d1848e0b19ee989042f05b947b58af60a05f1906fdccda14151e1c1ea6357bfc99a23bf339f466f80379e89e94be67cae6047a3dbe4bc4c3ecffc96f3d81479b893166a623510cad8374225e78068133a4252132c96cc663ccffb573c9f08202a7567b06f93d9f78db69bd8108b305da7a9d02e0f94219d921d3a228436ebbc5004077081e8d84690a771154ce3f46267459056d5dcdbfe56f9be42d21391b705a8622af1ced0960ec6e4973fadf2f039dece00773243b673bc5ffb4ec104dcff018515ebf9a23a41fdd9d494d05c077628f3208f390d44db7bc457d39b954366761f082082e0d9f7b2e14f60b6f56d6b9a256b01466b65684c71019ebfe08ba74bf2c6a7ed606d7bda8bd12a066be489057d049b151eab62275898fdfb1c29ffa54b12a260951b9602b2aab5d9b0caa811b200d0a93708246311cb76f16cad339000b1446ca426bc58fb9ac9238c4aa1df7364a19e9d42009f0bf5f04c6b6a6af4816661da236a8b3d0ef8005025eaebb0a9ff6f25893ebadc21cc38e0356c66f29083c32ec0d63fe3d7ef63cc8038b90c0b41a23ef83993d9050f3111ea60227d0d6e55891b2cb58dd5b847dc3adce47b89b8910e4d2d7f62e450e69176e06940a0fd5d6254325bca0f64cba95704ef13576ff1a1d7368830d327ea52941a804dbbc7f092ee13aff617580cb7562979e22f3544499c1a8285f1ee33927f8544a3df183131cd6537a42771695eb4ed19d7d0c5ebb270de3ce1428ae56dd3e2129e8b4ef7602befe584be2773340b7cc351ad047cc90e16490366bfdaf52412a4e890f3ebd963a608b4e4158774bc0f45c02d701042bd986aa7dd96819aa2eaf8a3b8884e3401bc6f609bdc462d23935bbc7abf541ff477847ee16f5b1ba52fec6168ccec8a1239c7afe5152b4185bd5d3e30e73f2918a614752288de8dc5b3519a1e348ae523e54b8cc6ab150ac1bf4322c568a1921390bcbe42111c8f6a4a6756858c07523c36e12e031291d3e8f73023aa8e937a91fd6c5b5b9d830ca12447da74c4e528a0d1d656c708c650cdad39f5eb95888b8de000d1e3175251c213116ddd189456fa2c4c05835b3ab1c6e22f7b57c1a4baa714c51538a68e668216f9b8f55b5ab1770eef02cad9f774c6c72b1de5bb64b6d1ec913926b6e8e653a45505b45b7204831e8c0c15237931a469158a8805c39639f7339d28a469a2cbd8c70ed228261e84970401beb6f38dd6c5b2b7098cdfe81a26eca001ac809603c6c55a6a3a78e60c6ad59d3ffdb6912e0bff9875049367b418a71ebf70d32c4c899f78b26a1ae973cf18823e56ba89219a3907d9c40bcd323c639dbf0f14ef9094cadd663ac87331c59e4fad5a320e7486203657ecccab4cc378e541f5f4b996338c4b659217fb5a8d99f094df70abb982394b4b31fa53603765fe599f52a243f78a9b93f805e6c04621c952af0a08eafc498adc885da520fc08127c670b8a58ce0730d882c51e59f0e87c3ba61f560a3e38e2b65faf1b88ddc66b62f355af225a4dca70309c2f920155a18932cb1ef8bfcc46b883e75ea9e6e44947430dfa7ae79cae0a4e821e3dd04ee313518ce923328853cbfa34ee106e0c8f5281e23b4c14e794e8a412e280f0802f9dd32d096f9149d7c043dc15fd5487c7d02e01e29ac3608d2124b44f905c0ef71e47af5ed87d25cd9eefc33f71b87b05942f5791f5290756ac2e74655fe50e91252bc34f2b5d82893d0cd3826cfd71d09db56a199af79d9d2a68aa4a0c5b5bea22082488b5fb2adae4fd7c1d0a10afaccc01df10c514ff01841c3334b4b528588e91b7bac765036e88e50b822d1e7ec8b2f39e6dd33ded7d6c99a557a24543dfa52f03fbf42e2268a1d071b2007d4d09348c0b175d08b7ccb411e282200d37de172fe68c1b58dbb75c8f471eb5efbe2c16631432e18bbe7bc3e276118d1a31f93da5cba6abd3aee289f04e260fc3ab58fc08f28e22aee1633d12b45b6ae328c85d1a2982ebcc6df3adfd3aba05a3e5502d6840e461ea5a9a066326cdf770d2e27ba8d1a7459e77534cfafaf995dc035ac1d5f51ee8ebc770a22c9c875ac1096567d35d7506f8621cd39ae94cddfa41975b3f3448ecddc634b1ba9cc9ad5f9967300a268dcc4d183adc8c68ded27891fb3d98ce7ae1c16bc28a9c4c67ebc775240b4d47c480162aaa6c58ba7eac3721eab196b36712825fb0bd598518417151356561a8df8a803515cf1c9146856f5648908ee8d8753ef7a798abfd29d22bf3beab5315fb48812c9fde99702693ae26fff54baf1c32a31350466c234929df4862794f85af9b3c43f14aeedadb83b63fdd464271615aa2546192199de71deaf521aba0980342d9cfb6e9dd3b9ca481b96f4aa02aac908802f613886387d96fa513e4fa81da71b88291f4e74a8bd346930aed4105e06a38e59b71ec6206ee4fd665086ecd706d3af6ba3181485a06c820f6afd2fedc23d70aa4c299b2a297c9fa9e32f1b4d4cae29519060eacd65d4c62c601c8bcc0fa2bf223cfad424f9c06f9ef16e1c439228260f886c791a68ff2b443962be0f19824627af5bb0b1fc366983dd826e70b71d9f94f05275e1bb7b3942038c9ea7347992a92ed535c03e3f57af6bf8e430470e136bb812e4f8f9a056e87124d6b6f5d30925c5152eefd3adf2dd6e8605c0a16bcf19eeef81f462e70b986fb6adbfe726db38f0a0b259872434a12cf3e87391a82564d239297c91d0ca08cfe4f9bb10c1100a06d8cab5af9760917e2fee2f0372b24fd59c9017f71a35a9f36b12b9963e021a9a2ba3cd7b655d8754c88053d9f3620c2629296fcdd7ab4b9e3eb27e14e22c5d603c96c8bd227daf1b3bda249f01875266f038e1a268ba193eef02482874c72aea60930966c5f7b7f8ca5fd1546a8d72d23e6a8095de682b7042a9353f401d3acddf9f3e9092b89cfb6956640a4da32a947c1d308383bb1376036746f9c24317b03eaa039a03c03c797f189b3f43538276194327a49254948a1f0d450bc3d3103a28882c49efba1343e8b5ff7868264cde096fd508199559bdf02b1a3bd6b3a258762610d8929b117e368cc4da9d7048bb9269e2ffbbaa0f8882f8c19a6149f53edd0288c171466548c866c7a2a797c81118a777e4c0f0be31b5d22bc66b48a46dcee6fcdf350f31b4c419767b6086f58814fa366347a660d0174812cc19f2652a0057a39dc4160a07beeb897d4523fa3847a8e3e257b4993bc8c76ea0513a51d4d44f72608ef240bb5e30dc3017dfa5f6fb0f67aa50852bb8946839718b2c1241f976fec70a38232823a2ca43da193c4128b819107fc93f4732b3ce93d052b4444bb0b1d7f74e212f16e06d51c0630a79e7078a223d3c8ef94217d20eb43ae88ba1c80ec3396463be33d616477a8110cc2a1569ede4229e22ef8de5a5ceb1943e2eee6e562ffd51aa621faf0004f50852c91ee3f591a6059a8ace3f1a8a4fd996c62dcf55a8e39be931a4ac5dee9bd40eed874d05f0128283f9c9eb6be62f9a5617a480a9f76a63de75a3928f6ec80c177ef143118a41af381b7739082e114365d92c681d3af38b53af4c079530594dba31b372fa4844680afeb3bc316ba6ae426404b0cfdbc4c514950798c726262683f0ce6e7ef290126904211bb6e714dcbea430bd0f358efca7c205f79e6ad2bb4429cc658cf7ed6bb54d81bb032c7c8d7c61d6a88ba52e23ab75afee1632016324325ce598978b63207b4fda4d7a3c4454e844dd8e919c4b2c2dc35bf32146f25c7d9fec4a12686bbd33261a6304109083be1d7c67dd3d9d6a0ba703b0cbf631f87c8e99b2c3153c7cfc23e02785f586e77ef5eb7c3713ee44a86cd7c8f5c6579a648eef5c6ca3ce447ee9d13283dc094517c985bb68f144ee081380927acf6992d0baaf0f70d502137694080acb8cbdf77d3fe275c5416c1c64728ea4f9e643b1c9b0175568c783b0706734851831a097992accbae33ee70443a20e3b332f472a4bc1a9a2289c9c69dfc02a80aede9ec4737c1f04258b87107069fd8801e2f030440f69a48e12a8acb8e94e99fcb80f37d7b803bd757d1870e44340f392b1d501536e2e54feead0d530f5467335852785f6de02915e2ef12077cd10090d2f5b771ae9be739f81c62238928b3f5c17d974eabf251e9f78242ba00dc8053809b8dcb18b01a35048200a20a3c06be406e3fb1d0538b000a047477970c0071a0040ca4a8025cbe58d839d5a7876ea3acaa3708f092b01422938b933caaa99d624aa1668999c4e90228079e8b906778806379da5d829d99989e48b1110dd9661e2bb33a4842229c2d701a65a9406ac303a610aa428cc603463adf3d79e37da043f7537eee19673176f875387a6d1efc0df0fe8082eb9ebadd8fe02ac7d6f162709d102a65203d3beb65217516d20d67421bbca55affa69e2536f34350db10b1fc6ce9a1e69e3bb0335f0fc4416dcc822d9e098433aebbad6fd4a26460720a09c08bcff155a81ce81c4e236d23a50ec1a1d47d80245b5e26e12d24828d8b551845e094ecba47686a300cc757bfc2546ddfa5a0c8d62952a73c761a0f58dfa519bf0174c0901618acf20e8c7ba5d23597f989da2a81e3498a288c4bb96cabe69bc9269faff723abcdcec37e69a7f05ca23f68b160f828a4245af59ccba43de58c208681ce138ce0914905a19443393dcb5202a518f44cb00e2167a24590836663e6ae6e1d8d6275476e88c41a284efa033a2b3d6ea91a92ca00c0954d1058836ba9412edec33b50a7834a37008d1438ecd3109e75bdf89ce01fe31ce67bb23b72f217a2f31533c784e498cf32b69f4b03f64d64e4b4961a23bf30e38a6ebe4cb4ae7b61cab06924a751dc5fa38e93936d1884b74e7e55ae9187c78bbbf1915dae86e74557d8e687a6a91b71efbfe70fd074a501ad9d8286e53a5dbb1a584356219770b06794af259721916d32b4e2a1af8a758c9db3533350726406625cc73232be6518fd57ddfd50cddcb804ca82d15cc9e0639e7a2dba7919e3ff05f4bd95296cdfcee2efd6fdb062ea3abad1e0f652727b5c10a98c6b49808bfe9a36e2056a8ff2aae808acbe9f2edd4ab33f51bfc866b7832888ca4621a018483e08c59b88cc8d7ec1eca4a96a9821684573f6f647b5dd210d5cc07036acc26e9d8310a182b10d954891223060191885def7df53a37f68504468a4f60bc09292df861822a753a9e53c2f19e525850900f301805a16e3d00398d18a0ae4fcb12a87bea9f071b55f57535d4fdc91b1e5c283240fd833ca06eaa4ad661590e10efbacd0c9887743d92339c158277f944b7642422ecab88aff4c2d305b894372e44f2c73dfba797cd3d4a76ae863a4bf4b4ac85db1eedfba1e46acc0ad3a32cde4c94715460d165f091b31b84390b298c0c70f649941f20606c8674028cd269225a89340b13fbb2fbc8bfff7eddde77bd8a66aa4a134c6b9c58857df296000108303726b35d0a112d70a5a018659f3ecad4b5ac24735e6588c24c1d80ae03b02ec5a518359c4738d570b630f51721c1e974370343ea093f2d5c0565783b11f54009ad2cf108bfd1b26c7f563e6bb3f5a3127fa4719ae5ef697dc8ecfdb5109b05006a10f0784c9f9b275de6905acfde4ddb0a8bcc36afaf69b714e9b00d4648826b7a750b9f7f6385a9f503bac83d7de3578282bf8617dd82e90c5e53287a183f4162ad8e1fd503bad0162cddd77c7581a05485f6682d9e8085fdd5853456981cbc22a520e89a37f09c2859ace718ff68e2a38f52df14eb73cf805047714ce40102080e9bb50a7ef35730e163aab056d08dcc85af22584a25729caa8a8feb59dfd150b884e968629c740b3f2eaf992ed201b3d5dc19813bfa654ac9a18238b2233d7366d1231396c39f648f2f06b5457e67f26a1b2080405bd7f8ab183de6bbbdda51fbfffc06295c3ea862bdc1e4bb9950c876a1951243ebd08ffc69016c657e8af29829ff0031a7cfbda1ed214c9b02f9f6e8df82a6be9f94789b0c2f1a6e81d749973130875e010cef4ba4ae45d80efc0964520808bc16558d66ea6a47e908e65a171415bc247fc2021a801526e3382ee2e8bb474f03f62f9b1a96f85e765710c90ccf2501d196c420c0fa591b169d134d1431295aa7775478b23da9797baee08db19e809af025c8bd283e79508fa2039ada5d2a71d8a2a827821844accd78eaaed0d20c7fa0f42455f59f0f2128097f9012101090c88b3e66c1961e1e41b3571012f60ab27f4f831378810b523aaf36cbe7f5bf2d1c4b3362656cb388a7d169f3f10c64acb66fef512e034dbf3af899f4413f6137414c261a0676cfce3e9221247f8454df7d51f261f685d62e511db3f4dec521201cc17042a01439f59208ec2d21c3d9969b8bfd6831fbc99a8df9c3d523d1e78f0a710668f1e5e789f46e080eb770ca41e1b5c2b549f6e470cbc2254aa6711580e2b4032f79b556a64668b52a9fc2373a2114a8e445dabe3e5ef2622222244ca9452ab09230a1a0a46dce6478ee45068800dd56a644ca3d168504a483d4145a5b0622ba8d488979634c6e15f1ab1fd278d265e5a0d451a8d739c1fbaa3f5a9e771a649a3d168e0f781340a7c1fa56bd474779717e038021471b49b69c7f1cd4bc88beb6a56edb830b8ae667577d78ea3b4b9ae7e1657725e44de39dd46a3690b95ebbc6fc67593020ca320fb04f964a649f33c9a47f368e0e77d208d021e3b3113ad5ca571457003fc4d456761d94b5ca6cb4f471860787b298d5d621ab556723c6dcb35368bd09e027bd935d268d7d030b451c3372f21afcfeb2a7763471a9d816ff23c09abf1c91a86eb6d98cd5c7f908dd7558ea260fef8ebff7d16f6f56c2a1ee3ede7c2dad165717072469c9c9c1c9b33328b402374bd9ec2063f66021061663e3b8eebaa47993f66d0deeff3284f531a3ea5ee1f0e62c8ccccccce1ce528e7b4f34e9e4b562a62087e1f9d751dbfc8b0b7df7d22ce5bd89b62088a2e2bab3a88bc736ac0ec74bb00308dd659e9ac484545ddeea973eabe5be2c29d7b72cf3d2f3927aec94da730b4c2c49c95b0e46e6ef275b736b451d8bff75e52acbdf6daebf62a15c3272a865c7745c5b07a9e47bd1b594c201338f5410837c2a530a928647ac2ba5d2a5a79a2e0921a58ed3da5472a5a75172529b20adbf33a24838aacacb0429bfb70476e86366e47f3a70024eb1fe3015eefbd0c6fb5cbfaf0bd243af36cced379a29724f4428f0c3262f2c21adeac34414d258d54b41aa9c881532315eb4843f32bc11b217cf00108e17f107e0861e8dd08df23412c2be7c9f2989eba25afc983fa464adba0b9a76745aac8e89e9e9317e579df483df7be25944dd1963657b7fbeafd37d2ff4672472c9af2402b0fbc0acbef6b73f3c232a868eabd17bdf03d2f0cbda22937f94e55dd6e27028e6372b38b80072d705894a7e3c85804cc1638f3b9069362b9afe1cd7dec15e1e6d6b285fa3ccff17c0bdcdff83384badd7790c48dce78ca98ff074f446737ca9897310770cff340dcf3bc3f4f3914c54ba0fa1f9443b58cf91057c6bcabb6c97e78e3a8284ff795b4badd7770c6fad23ddbc99fa6e347a4464208a1a4454f54a3a23396a237c8ce8656427a755555e5a695cb1532512a37bbffeec3ee69f74fd22937a9949bddcdcd7b52789be1e16dc6cd79ba9ff1ec349e9dc6b3d378272b5291ad2806c4f337fe4639548f284ff73c2525aa75348bb6278a247844db039380364abbbbb33ccb698b5e371559c7ac54b4e170779f52959278494a53ac846105f4bed1fb6aa532d5db94db7df5c06f343da84aabd2ed5eac4b55a9d62d612429822a82f26e2f822a92b271bf53da2c9f75596407efd126b9b6438a25097659afefac7d7dbfc9c436083aebd20e5ea46325a3ec062f72231a373b2c3459dee859b97d556e761d4846d9b3de44711c5dae9b9b7a23a36c8d177146d88b2d83656c605565759593f3e4f404d52443c693d31354d30bead5da519fa0a23460b2c2d4749b3135a3b5a34a4d51d1185f1cc90cdecbd88b3d764e4f505ed6a60c44588db1032c9bc1d7a84e4b3488d2a0b5a342b1540e354a8a8c726a727ad201c0eb6099b1220000b0c1061c58d9516f6e76e358adb8d97d6572b323a3acce7f8b07782bd48f35b298b06ab011000892e15298e43cddff1826854affa38f3ebafb8350b703a19a9cb0c0f12399ac6adc08a1a946169d81f0dd87e0fe37dcc79104abc029e7396b602529d5c0a2b30faeeef5c15ab25116b94f008cdc67c7888df10330fecef8dfda518e6510111b3982532348054e9124d448c4367e10119b9bece3e8b62b72a50d1b36489224df860d0e3600808e8d9806356cd8b001b391010d1b366cd8b03182e08afd905dffee7a3982a3185065a23c1d10f73ccf530e854e3b8084b79bc59ee18d88c81198446720684b02c1241ee6056d6e763731b05ca668c93d41dbb834de92ca3f0a3f2fe4e0cf7aabba34deb3d15957398f3f9aa53b96de7f499a573cfdff2979a6c0c8f55248ff7b9ed86585497426ebeea6940c8bc02ce7897959318f0d11a32cefcfb03dcf0bbd0e3defc8639aa2e2d84d5171e498a838d6efa3e2589a6e966008dfbd97d5f10ce0796e10e06f7cf75ecf774f00ef6f783f00ef793c9e0e816cb243d35d816c4211848aaa95ca7d6e5e4a06a627a9aaa5a65fb7bee9e7264cb90f4e8ff4ab91d5c57880b783ee60a45f69ba29bef894dc71536cb10c22625496b1bebadd8365acb1a464586a224641448cdaf39ae42a29ac103122728424693abca42af39ef556b16e1a9022a835ce7abbddea3dc39b2bddee5f2029827a3f009398b8b20e0401d4c091d5431a45e1ca1cf2a42795a248140d8bf0e43ee0ed9e3ec107086f0d42f71d234dd12a5a44a5ccdbfd49a1b8ddee6ca7a356d955de3d756211bc26f7712316818a45f0befb9e6a2966721f28ea537ed533fed96c6e773a1b3457b7f3aa968f71ecd6092dd78d05715a3ef882604ecb0783e52b4ceab2baac5797d5b169eab25eaf70a9adc2300cc3309c0aadc2300cc3109ca226f8e8799ee7cdf8c630c92a54b20a939cf4922eab635344bf7bd003ad6a64755751201315387555d1dcb356856174cf8a650293fb9c4ca594b434e57673d292d8c023700988646b8060188638605c799ee779a197d3da41677c484b66cc0083a9a9a9e98aadb105bafac35b1fc0010c42f75d0c422a401847f74e963096f5c592e7c392796a6c85be2a308eeecced9ebc243aa35949342bc9015d8de25859f33df8712cb78080a56e90f7eda3b77684a3f82109bce58ade0b61a9eb250858ea8a2ffe8f77d6adb79f16d833bcbd17fa082ab0a77ff8e2ffd0f76a5bc2c81d3beb8ed723bfdb1acb5bf72153f7a113cf38cc19ab224863e8b04317b5ee43289e752fc8c204946da94a915af728d09999029dc9288f930cda6e74062639e8b91298e479dd795727f739419b934146375a9fdca7c324475961188661e81486a1187a6118769e4d0c3d135c0cbd2a86deb30ece19dec29bcf78be7bd0e63e279874afdce704b36ec7c4357df04fee130352bf2f94cf8c5ef8da0d30099805da6ef734dcee6f9095ccf10129e3c81e299f5155751f5a61f1903cdd596f4aeee3d9dce7346fee7386362bee73b653d394fb9c5ed2ed3e4c72eab2a2baaf4c45b77b2fc953721ff7a650db3deb135207c6d23d6bd5edde4f1a07504841880a6192fb9cece4ee3356a36aa46b289fd55ab7658d5412f7f1ef3eb48547e19210c9fb9034ddf4afb5833b9c9877ff01755bd6446d5923c4ed967719547473eff6a2db8dc9078d76a60724539eefbed3a045447a1f51f17594edffbeef693058ffcfd259288e250cf44d980f3ae32f02dcd70fc3d2a43cdf8b25539ef3b3f40b4d3a0322fbfea3dfd33ee716101f94c7998aa2f9ee07d1b208ee397558f714a2b73ee745794f9e93178507e54175928f67e0b338563a9294529b539901ed0110f4b3b0e6d2fd29313ff07f83a6072e4c58a0a02109aa863452ce60bd40550567e14412a4344c2c0113c5c408a81c9c0c4145912a59fa75fa77ecc83a4bfddf02926ea07ab2010a364596dc00c5972db078c19326db2bcd18566dca30e1d0056749c3022354b4988286cb37a935b1b037bfcf21a3be420ab81cb41a939c2dcac4808507a3232725f77f1fbe5dd70224616c47285953e6566bd6428911535b8e304903a6d6354c11e1210b25463c39431445ca0919acd8a209205ef0a472b572b5d65a03e2fba25d07ad8664cff1a5b3d3d3c4dd8bf07f3f0c8a1bca9437b0aa1748fdd6e5eef8ead7692dfac7ee7e6a9e55e7011b270a244578012207178c88907e08430d1b2454343501c5fb7f1b78711b3203112944c0e8a28c104c8090d2822a27bed6a7e560af15fb386e490431c391305c64d53a8d931925384011d343133e50ca946b38d05a6901ae017a62ec269742f59a607c4d89e10aa61a9e7cb1e106a602569e28b1c488224cac40864394ab1520c140458c1168b0fdb0feef373b05377b2effb973b9dce181faae9742dd1dc757bf4e0b3efaf97ffe1686d4ffead7e9df09817b337f5fcedd99fa75b660ca94f6843aa50078e10a2b78a822c38648adcbf0ff674bd092068a2c1cbe3052050b0ece67614b3d66bfac5ffa9cc831a59432a5b43bc2d25a29c7952330415191e85c8965c78cfde09ed272ecbe2b4feebeca18033ec6a396ccdd8fe8d6f1a5d3140a2dcd3b83ca9e3b97d607d05afd9d32e6005aabefba7deb78573026eb8a27305348a980bce0ed706e57e376df641863ffab5fa77f4704dd20305a82228c97a828c030a1c4922e4580e062cc122e55b266a8a2861f8e9688982c81466aca1650ce10d141746fef8f015b62403204122688503382354f9270a212450bab23aefbdbdd8b95bbcd3e97f3eec6f2fc0b5042a9cc173f1ca1868a2f579ed488d1e606aa2698c90a2d8e8411a60897173c39a5ffd7bfb24f3f7dfad16f06192d4f4811c336064bcdffb3b01e44b6514a3570972e7dea33ccd8bffd5f2f65f981ca10a5262c1938f2c10b1558a42009a2a37270c0cec9f101e3828d0c1335676c4688bce3ff2270cb71f8b33029fc3096a28b2340c4c0039324c09812a60a242cae14a151435444963452545088b96d91f4248d125da831c22606f1ab47b51f86813467c82cc1c6062c234af042062a92a0e0408648ffe06c9a6c8e30667bb32fa311600b134ba238214165c902484fb85c5114c58bad5624f28ef85df17755147f3fb190cfbe5ad3e529562e333333333377f9db88fb3c1d62caba0a0bab88ff2bfa8a8cd88e1c895ed16ff6d36a384f7862a354e696839a2d5c449ecc8839920312451b4cb93161c962a207a71e318ea0e108872d2f6023d4acc4142d4fa45a8083116b8886c0c24b9322822053e4a804b03759c8204a912455484588207363048c245358b1a2079c17ba506234049122a85058b3839719ac8892451309c4a62e1aac857dbf19546bf22dec4d1644dea131b74dfffd66bfac9f661363fd3b6cf9613315988a602db13af2248b9a0a466cd145061a6c6b6e357edee132482664c79d7762bf47760edda0fecfda7acff17abdcde3e3eb91ddab29b77a6cb17f4f998cf6c33312b830e48a1b12969b955a0c3f9ca102050b9a281144cd6b9a1d19adcc91a38a3d9fe9e9ec2b3fea6f833d6574f6e34ff9fad30258614f18ed3c92922357963e7c5460cf2fa8fbca3d464b6732996c08930f203ce32f546a6841942e4d86e050f30fc233a2214fcc74d9c20b2d3f70a9f9180d04c44d9fb1c6724088d090f7f4704088d05043a14ffb68d9e3e68d26d66996c2fe3f0a04678a7da22a386461c4e6e556c41035ff8f67443e101155c4122f788287206afe966744b61868811ac248cb98196afe309e31184e591c6106e949d553cdd6ce6d31faa2da0b5f8be2674fcf0fa9c5988b314c44443913860b18b5fe57bf4eff8eacb3acd5f91d330810a0fa65a0c49ed682f9be3a9ab1d65a6b2fcd56b193c1107bbe5ee3f8599a13d6da24da82b2e78b3e10eabd1c09a74cf7bbdc72cad4e60d5fb4ee94877a7906b994a98c06632acfeebdffa10fa36279da1356cbf3835cf0c1508809fa19ee0778c48376eb8ff4a9ebe9acf5dd5bfa1df8deb7c807bf3fb03cfd821f7e47425d53463b99c9895d371d7943f67b38c60fda3d7d807db977cf51a0e4098ba45b8598970301edd632a8dfbf20ae54faded7706c71dcc871d50b008e6008be15b593aef75defe4ce10061bc7b13cf9769ba0eeb9b28ace15510109c284dde981e97c102040036062e210c280c90206fb374d998c8a89275a263da2472d53044311369aadf20c725b3f36ed769bad16e93d4c0cc19d2097fb5124ff9aa61a7b8e23980338e18cb8e2f56bb542574743da75d445562f40ebb9d58056cb6b790c38ea72ef24b7bc53c8af676f07a33aa3f5d7777eb7f5adf2f43e1c3b8fdbf8e5289bcb09f5e5649d2d8b8f9f11c62ef664a69f03f0f07f0505054dc7cf083086c1e82c849d295cb03c4191fc280f978210182c4badfc95b15fbd61f6e3e38a3dd9c96f05df7f46f8f1cef3664651be7fe16b21089667fd2af8fdb57a01b8e7560384e847638c3d61276bb1767c7161619f857de5a17affb59cec397eef7c2fd007a0bae02836fdb0bdf2ece74676f334c11d7f04bfa76dec6939a4bf1d08d7df43923c3f217a39f13df2eca2eb7d8f6379721f7ade0ff5e8732b28a04d1b36f7fbf170057abf9205ce2b59f04bab55bdecc499273c626e66ce3ca9fda10b584cc0252a1a3a0083831a2c2640551cf1c51517c8e86085d414121733a019526ef1629566cb972f5bc6487d4d6886e46850c68c0d645c5892948435ba6191322225aa4bd7d86762155b5f3efa51fadf8f4fc5b2f54435faae27aa815f197380f8ae0712c3f2fc80c492a8069695fcca5348fc3cafba1fb5894e25521b4451fc1f2a8aa07743c2d419f8f503cb97b7c4d81384ef1aa494e3384ae9771dd9531a840a052ca209401f2c8d7c0dfca160dd41c7e0eabbbe6b4c6720f8ae177ba9afe803f4f59e6b5f7562cf7ab973e772e3bfde76e377ffb5ca1809feadefe1df6a3dd105bb7a234974bb074937adee77bbe559dd8ea35170edb3b39cff6639a58cf2f87fb06f55d993b59ccc34820ffeca9ac4e2bcfdefc3f7f155ab77258524eab2140d492e022e4bd1e0e4c2dce7b36f8a62d7ef6fbec7f7374f7441d245d2bf21451f5dd425e4b755f6150d82f82079f6942b863ffeb29b3824534b32e5016b0996a7907b9fd8dc9a405fd104a86f4b236fff875ad2d6f8babc539ac2088c01330eda4420086aadb5ea68a323cbd65a6bf59869adb5569271d45a6bad04708199f9fb5aebeb2583d65d6b29833d69b57eb2cba50ccd3dc771dcd8a64340513bad9c77affa2238da5a56cfa3df0bac5fd81cc3e7cf31d87ee6cab11f61570f6f5434f869341a8d062a8067debbc75b58cb75be721d0ba9914cf1aac0384a234eff85afe6bd026807e0d9f7952a30c158482a8061fb3df205582d0a5581d943172db9e695460e133b3194e77d9f6769dfcdd29213d416da8bb3bee43767722787f22d46706c358e4847e27128348fc5f0220fff5998330e6e077e2681837d2084e53f6d2dc71dd5869180153ebc30460d4ec820446d4a1543a88c71f5c58d035208110591248cbe68c360a438026b0b0bc0308286fe2e635c3d5085c403992161a2a8a10a1bae686942d28393279892a936427c9912441b012c4144185cc6b87054450c1af084c8971daa58f1c40e1c80a9b2851250ec704507cf0320ea7bffa68ce699325a8fa1cb9d0cf5324f1d240cdd2027cf57fd2e88bef775057ab9efc1724f7f7065107d8602d2b28c29a3714522373f577ac0843ded65fbf2b1f3afb60c3f8cfff94da722ea87fa707ffa2df873cd747212e3440a8a2166f0a1d63a64b1c28bd314262084b0827e50476f4f167bdadb44972b4fa2fb99f03dbb49ff2399492be185ff65011e8c6e888285872a72184375864b114e748105c66340e8d372a86b5e12d5280fbf5d0206e3ff1a52be6092c5941526446a444fba407181928109317ea89252d3c5869b96242e524345445079b132030392ef1380943d3f5b7f74d3865c9e3d85fcaa50bddf915de566178a61d8f583e4d961533508956bede8b297c06fb23e0836087add8764ad5ed7e777fd1b6dbd425e9796df7b615a32e77bf07f46701ff075dc6c7b3b5062cf51e71bc1efce2163def32be773deba8feb739e7d6606c5f8daf2b4cf6ee290a400bcd89c935b464f14db62be25f868fde89bf3628f1e2861cfefec7b034583d2a43c0dfbeeeb45015059d767f0345ec6f3a5519e7d33f8192f002a9bf3aea7f1335ec6b3fbb8fad2789c7795e708886ecedbef1aae8795d64d57066550ec878c77bd0c5779e63c8d196503ece79c1f5f76f3559ee3e59baa9b77b95cad7f7d8fd6bf9ee85a92c91cf21cba392f8bf3dcca21ba39573408375354b83737e4f72e127c913c5f577ce66f912317f27336e695a629a3fd7c0c55c343272f56b6eb75dff5bdf0b36e368bf07d60c59ef5eb199642f476df91415d47822f92e0df77859348885ecfab5d6552af48a04a17344b9461820a1a1663cb17311489411b334a35a6f204d40b4dd228e1020696354a60a2b2b0b962055ed3fa835e2e47c09c10a31912328147b60f1e2b5f7f8ee812edf093aff083de5adbf4ff41afbb4cc7b9d3e2e1e50e470155800342bcf662107fdcec177bc8440354010e08a14da9e98118dbcfdddddddddddd5daffaa5b39385af90f24293a3285da849929345175b88913584d49a2e04d8024c95266ab8287571c17401660c274f65a4bc8aea6c85c48632518441a58b1817b862d202841130b490f14205258bf17f103aa3cf3d50f7d1d27bae8c71197300f7f4819ed672889631ae3fc4d17e7cc0dca44d32da0f045e78d2468c1927559ad4fa2b4949770a03b13f0f8000ff7b17599f32dfdcd0ea6aeda85fbb91b6c2176f6c73ad3f1d892755ce6d2f47a2c3b9cd6ddc4d7d99cfaafd5acd1bec69daf721f6e7a0c990f1afd70be7459c3246827d9cef611f0767bc37cfe489439ef565cca0f144970629e47746d945340832fe863c77ae8cffa12fb2bad9ddaae93e9dfd7e998cb2e69475ac3f0a795dfbdfdfe4b8e7cdf3dbf2c685e3227fdc74591c6b5ddcc4fcd4de5852d6dac1f5c6feb0abace48f8bdef475bd25ebdf90aeb3deb386640fbe35c65c96a68cf6c3968a46df5039fb3aff8b5f87a7b0a1cd519a279cf050444b2103082c524451264bd20b6ec684f9a108a7216e4e58b103ebc9a163070af86049d66f4a79f07f1fc426745fb2d0d7eb6c2dc72db60714f041da34c2ce4e4f0e1d4a6c8592b8edc6e4a6cfb819e9b2e8ccc7f7594b799cb24421f769366efacc8bc62bc422b8b2fa83fb399227c17a948cd88a5383fde00b4b3f889bde49dcbc72d3ad7ca872f6ca96920a9fa8469fbd0f1fc8ab3fd4bd570279ef11d5a8e873d9535258fa5652d7a5e8ac8bac94b2acb2d4c810c41a263a049194341b62cc5113179ac69ca9f98370c57a1af40871ab9d7503893dfbd6b7ef46dd935cf723d729f5229be52614961947dbba449383049a42105f193a58bf1c843e512d08539e5af69132464b20469d6584f2b811966be2ff501420efc31f8a02d4bdf7435180401ea0efc572e8030aff1b1afacc3fbf3fcde7da5732f54a1fb5aef4408c85d27d1ba1b3aef4e1ff7dd66665054121051f406c7d84b324630b33fd501ffeb41cf232c6f487eafb13d52ced3765fd34b2dd977448d98eb42d6a803385f5b7ec3788cf7abbfaf40b07711923c12b633f7878250b7dc70cb2b0e777e9ecd5dd56095346e32c6a8f18f6eb7feed3657d809115a237889ffb36819fa1482683ba8cfda8df7bcf2cf46592fbe6fe7bf17d31f1c1a10b1552b81c31c505580e646c5e8ea8210ba49a7f25990b08c6403284882daa38820502a8d802062b2facda3ce91163873f4706797e0ad11be43df8757c4a7e1f927dc7dbe2d13d283e479e431cf93da517fcfab563d20116b439d346aa0b12314d7428620b171cc1854d87b1699b97ce8e17916796bbfd1508e2660e202b7b7254351fe86f0bc6308e39c06b968b1c39f875f08fc05f025594d8f3457d7a8e80e823810ceaca980ff6ca1803987b80ed63a17ed7de63a993407d71b2a18821a84c51338116b725cc186559410fb57e014b0c46207184192dc6d49a4e21f24e8c047ffab7ba398efc2f7e1d9ef5d88e6e46a48182c18c032c627c790203d593105beaf5ea757cf5ebc89eec98dff8d2e92038ebface2dc1c9eef8701dbd95fcdc2bcdd15e32e318bf2b646e62da64a145098e1fae10c9212b0730d0d4dacd884d6e3213fb9fd69fdacba3799dcc712916e3e0ef3af9bab5d563830b42310e7ed87572e772ad1efcd64dae95e3ba8ee3bacef3be0f94f1006f0752a2acd81ac928d7efdc586b002c96be8883d3dac16ed26e988e7dddc769f100af19db2fca80996e72778fcc4dd69931a3d2193366cc70621cfca7dd416bf5f8ae651cddd515f2ebc176bcdcf46b1907f7e8eb83d47145904110ec38976d10b8032956b472995bbaecb2621cdc230c5b3bfcc3960f2f47711cbfd11bc78e1beb38d2d17b64d2759ee0c67ef05cfff0fa2845e49d120ccbcf1cce1946969b6cd2590e1b62d833478e1cb76f9cdce4e796b05260927c16d6ff4dc41e3b4c1f8a7f0e1d9796ef5e32cf10031316575fc8e084941a7399020a178ed6dccacc50632e6670f8d2c5054a3c51e3189e88a18a23265f6c606addd4ad157ed4eb5f7b622d8c47caad0925315e08f154eba2208078d2f4022e6a6afd7c0312fcd97ed8f78c2f2224a6d070737a727342cc082a20820a0d4a503fd050732dccdcd3caf1337365c167616d7448b18044154fb8c08b29a6707921767841a9c8119119be4b86999999692d9b0abfff67617fa465a494e446d7893b5172e23e49b45b3e3866af017a2e97b11ffcf469339742f57691d191244bf87d898a91e308fea624d9b0866083e4c89319b080d264868ba83251531b54f9ac7030a2c54b11311c99e1060c92b0e20adb150c8e7013a854a0c50e4550a280aab1d0b4c317355e381911a2e65e9478b184260915e070a6e62e8081c1122e6809c3c51219cbb8efaab776f0774526882d54784883c3163b90a6cc2065030d613451eb87511e7e8e34298fcb8074bb531164b4109d7e094e9dbb53ab4e59c47e8c8396957198c0c6ee784bc638e87bab47777d3aac516a7529e52ae5385aa9d88cf141cd3f079aeb4f13630b9b33ad2d615471955aaac375ae33bceca8809b9c02e3e0208c839f8cb267653a5ed7e2ba9dd9fad487d9d41979f6f37f450b9b5c9dd8f3053bc7fbb2ba4e9f5816d385ea9eaf11c638fa19aa83988c4b5fe41b3736d0c50af3f0a54c50daa23d6e6edca8b55ca1dbdc8f71f86037d02506cc07d840972d0c02dfb35e4abfeb5d9071f4bb982e31b8f6d2aee5c7383a29e207c26a50efdb220a5838aceb5fc21395920a4279fc046f9d405b27d4d6095ceb84ae75c209deea31d6a0dee25eac230a15985581c50bd7bf023b7234d993a54637c1e013aa58fa9cd7fd7583dd61b7d83d76b7ba5ddee73a894af8627d84a353aef35a27f0ed8e715fd8e2315eb0b583fb9c568fbecd338fa76b5ceb667862092caeddbadbd075a6e076dfae2b856e8f2e5b5322f8bcc3554e0449be4f5b3cc08f8d3e8e427cd655a0aa28a59a94d0385d775dff3e721f966a6289fb74d7fcc7cf4b01056eedb08f530eddbcc5213fca339a4e85783a8cc307db2a85ca1b31d81336c26c3964ffe69beb53c7458ae4097e480681df7df79ff72048af10ed9cbb1222449746f7ac783985fd1df7f1e79a9376e497f1d3a2702a8e73b6a1c45287d9ae8c29a3f11a91ebcb099b23b0ac608c14486e980214416666fb383f6e9999ed0a29b839cfe4c91db5721e278765c8282dacab2d792c7fdc5ab6a57dd70dce3333e7e430734e4ec98cc385e36a716b7c10f67d21e87565ad392ec260d282a843aabb28729d288a565764f1e39823c5f21422bbf53d99c8eca24f0df6758cff8d65589e9fd7de414f6fba62939b62790a71a81bbe877445b185a52bb6a074c57085149cdcd1f5c2919dd8efffe9f7d10f846717f09264c81aa530594fd4fa83f08cc8071560610b02092c2634233886cbf3c7f3c7a0b0fc1c7bb2fc1c7bc2f2f3652e63ef66df1d170db6a73fc7931d6c4b5481f272d5038b89c24b13573074514413dcd73a16b1fe967a9ee789957adffd70ef7befbbf78ee973943f4b5f4abc9ed0220ba522ab1e66880289882e8418a3c817556d2a188efbbfe7fbc4eaf773ffa68cc6efa4cef39bfc327eda981d5998a4b9d225cb12234058c2099b2e98b840c2a2e70bfbd9aeebbaafef5dd4ca71a71057fdab7ffde8cc5e9c255346eb2cd1078fdd87e344af05be4782cfde8f5e39042472c93112be20b0fcca7b762f54bfdafffd26c522031f7474dca77e7dee81ea73dcd7b2eb4aeef2fc987a702b59b16a9607247870a1d4d23a0f3fd3e77f7e935fc64fabced12052ed00f51705d3d9317bba5fec51a2b9d934c7e8e6075f58ee76cc9e10d421ba2109925ccba16384129444a0058e400b6c295d3252ba919bdd6d8406a551524aa913aae48426c5625f806b80b38706d3a07132d6a5510ad54be352237a8426a14b1cca7d5edfef51ee23caf8ce799cef772bbf729f7e47c3c68bdc87c6f767521e239ff998f11d7e7f4f5f53c394ac135fd246dae63eb1ef207dc47d00f0adf3fd9de43e1a7c7f2b7567f0cdd44dedc4c1f715acca4e6de0501ee53248cf217148af22ddcaafdcecbf211dcbd1b899d55ee43637bbdf93384f1b394fffd3d7f459f994604e7c891fb91d23db0600b28f909d84eca41a30b297ac30357140f611e5e9df80ec27e7e9475374f555b0291b75bbfbd620fbc2c8f6be397c5b5c7545b2bb21d94cdcfdbc8e83eeeeeeeeeeeebe1b905cab5cb6117b45ea767f10145250812e01c05d57b08e29fafc6eea24d953c6e4bb0f7f65ffd3cbee690f3288fe775fc937410c4b2c8bede77bca84e8fd1ff43bef4dc09e10ed4cf052c7cd8ed381fabe7eb9b3d350ec5f1a0d224c52baf892550319e652050cc804d1e6cb9529282786a200955c059827544fca8ca9b28428072559574b348982860858c3992a6286b08581869da2687383911b16334cacc09fd6c9784abfc77d5cf6e98b9604dfe5851eac74d5fb8deec391e3eb739f73bc2dffef8370fea671fefbcadaeffd224976a40c72741ed75706c57ee0bc2eb748688e6429a7263b3a48c8cb849c17855c7bfbc5631c492685bc6eec47ce8b9ff3e2bb703e48c8eb8ecf2d1eb11fe2e79441aebff9537cd7dfbcab0c1acbd88f9bb77f53b29badd657b63c08e3b6489e4457146b6d5992ddfcba6fc6778ddf22e9487a2f92e157cf6b4882e4d82307972359eacad4ad3a3af477e8f7d0cf611d8c817a7be97248d4174a5a20b164cc132d507c18c303152bb0c2cc9617d39759da8f0fda8f0f1f1bacd3998e6fb26ed672c7f97b19edc7470d038b0a053ae39e2bd97dfd087ccf9525fb03a1945fc7ecfe1cb4fe9ffe11fa7df49700d44f9d51e816b8ffbe922d80efd5ef7e02dc4701e2fefb482ed9eadc9d9e1c5cc5a25e93bed7b925cccd7eb9bfe9e54e074aecf97a4b47379dd2079f3e5ff023470178b10e963a68ecd973dd2707ed7b1d955649a00f7e0ffaa09327d9bd4774bd2b6b09c5a2e9e9c9a16304efaa746da86bfe9c85451259542d39e922c39099306baa4011d5a5c9941491f6e8a0b5c09ea6ac9b36d5c171650bd5db522d46870a3d632998dcc3605d176b4ec5e67a1635df1246ccf5e7400a55975e7f215346674651da470d1e60644f15ae50753197c5dc2e2d50145a9aee3afc47f02fc11fc8bd1bc41bf1c520a380e1d307bdaebbb183ed31c23e3dbd528872cfbd0892b53c3f10f4bea79e10bd9c58bddf0cbdfa20eac0683dd83f3f6ecb5f9e42746efd9a8034b6c767dcff85d2512cfacd3ea2050c99343b20f1610c0da25042831544345102e39a10ebcb3ad1e1fec7399a92ed8f89efbf29eba7f533adc2ba5d4e614fd89541b9b929a9ebbbaf1dbd41adefdec59d3219077241b11ffcb5fc4cee62fb3bda2a5946c7f2a4c94612ca4d0983c16040fbf1c1f51bbd2638ef896a5ff745886a95a8167340f7de0375ef01d5e7caa1ba749b999943a570294c72b33f8326963b0a93b8530867bbae00231d48b1b1d2c8ed408aa5fd21d291092ce652cbd92e9fa0c6ba10ce1626d130e9bbdc61d21afbdc1187c425714b374b5d961873b561ec0cf4fb7dd059f71dc9b58fceba6f816b214a0bde4fc02b27c0955cc6bce49abb232176d5c9d864d0f74c0671eb0b029f2f9367ed61c23ecc7d3e2c83baefbeca5be8d255122df0a289363ed43a033fb0a08813d5121a5bad551045d212669260b1a588234f4664f00244115f14a975fd64558ac83def9ce1d2ed8e01e9be2b87bac63d51ada7065bc6eaab5f06fd7e0e89b2084e20148bf0b7b9a4db5fbf25facdd15fb070a9aadf1c3bc992b28f5e5ed8f34b72fd8586daa88fd0ace8d7f203e286ea7325118cfccc9a853d806b342b860da439a8c40dd6a439ea143a1a00001404b314000018100c064402c16840206a6ae67d14800b859250624217ccc4611ac430c818648831000002008088800ca5040101bec07e8a2fed0bfaf6099461dd0f93cb3a1984d7b00f0f050fae10d25798f50e19f2641266873bb4ed8b30ede3de81a066fe2384f2722c24be4f013ef126b6074e08a30e2d11dbbb68eafe7ec3c06ba6860f6e7b0d0935f5fc645eb7b4260707930e6cbba9c2406bec305c22d916c63dd0623a78d197544d082a3c62dcbb4c4ec7069ccc7e858a446817d41ce46dd9e0dc15faa76525505cd89d5983cceef6036e56dd9e348ebbe3bbf39d0f2bb71fc453fa8934716f4889c816f9d907757052b6bac8607f0ecaa43e836c30e3606b06d9924c1f12e143e0e54bb9122437cb7a51d3313c08344ee242a2acb6677b25a792a630c66e6ea6bee237e8d612ab675224625fe68ce3cca3ae203060e1e2cb051a910f02cb61c947a3f4428371df2663a45f8a14fa148234c20293cf7d6a1bc6d80339e4e37d60253c39cf0177d3c9597ea1266606ab94cf70af994ffbc9a7ba68805b50a51d081639e8645a714fd8335acb7a5dbb1843c2e093795009e4e069f5a6107271e197f0da14dacdbcbe8d9c5eac6dbc68be0ace982238cd88a378772e1e1f0bd0e165338b31365ee1533ec74edb4b2dfab6ee46cfef99e70cf06bfb4ccda1572d9f35a78a88f171e01e1efe4929e80d86899fa66ce9333349b83962670d633de71636f2ca5482af2e506a452e8c4cd0ac639365ce91d4c2ec907904814382d9d38c430c3a28d3d90b59264765ee06b5d3cf654806baf3f8079767dced8d17439226d2edabbe47ec3ad81b28e1ee0519e97ca45c3428a4b178955a359abdf2ef5d8de9a47c3df4e418c57dd288943c79b1cd19c3ec4c451b0e121540e8b78b6ba915af32a4cd529e4f56aba537dc49ebeae55168f5039bed1d08695fc314244d72486c42c8829b31f445a67d8c615aff0126816efc95af014c804d00b132033b43c59acc01e6d8067ac5172589724767ae5c24237b38e452e3e5b91b09a2f21c11a92a694eea328b3d5fcc1cf4d5806c1247f618aae06664c6a1aaef463fdb2282ff68cefebb3b2d66ea7d767367c3430f0eabfae24ebc8fcbf92a97d0c78e34746b62ee4bd572c6e540b1defeba8a1700cea6a5daf8e07800de12a6312b179a4b805d0e3bb8617b8e0f8aeb83183967566d466799487501bbbb51f5fce1f0e7c47471cbb12e021eeab2a256a032dfa34076f4934f7e31e97b0aa6f62edcafb71e2b7ec827012a5916fb0489ec4f32bf418481103ae00b297e740dbe545a9ce31c17870de26776e8fc639e62221b595a37ddf12a4d275ad78482a46f02e97d6eb22d149437e094bafe81ceb2844ecfcc5a86f5a13075a9fd04928aaf36a6767df351facfbcecde07c83626ccddd744df4339b49818f2c4af4af0ffa57eb563f7476ef372443f798e449bc8b8ec59128bcea40eac773c1dbf485558d1afb684bd9c5dd88afd1e804ca1c5b5b0b6b6d74eed9e457eac0e39acc087ae210a3b06f62656f838737ae6ac69e2458ba5335ea57ba548cec7bfcb3c4637748a44e48b6a1ad8f06be974025cb0785eaaadbd6c0183bc2e0847e3a9c0026d1c906bdb1ccebbb3a2aa395bcd9e25319d501ce86cabd554014351f09e87821737706d78c69a67320b3db14aefa30059b9b6001390311ff39eb9ed802a7cef53828c8cc0d91eccc720ac0290338f1a1e18d0c2454d89a3a9562fbb1c21608deaae4722a01da10fe0910ee77493e8902e34897788d8247c132633b3d36e9d7324f19540f975415b45a6d9d6e3a097d811cd93930e1f22cb7d700bbe196a627f2b6928fb387c9c77623e9c9e048f83fc48a6355d35cbce39b97b9b1dd5544b9f0e5407e83309ad5690497ba773d95993024e199dc3bceff08af16910ae7d8b066ef390e51e6eb4a77545481cb856b5b793aa0a75263f5e6ffc9ab4a4a1d343b649b7b71bc4ba0e4268a196f3c7b92ec05bea3cf2cafe34292794c2e3b9391b1a6906680b3afade9855d2f7263603d6d42f83477a8cf44889421db7a56f97106e374fce169673bafe6c6f1322913c76d2545b0ba3ec344af3a2642a903965a78dc3860671c90ad6ea0b7533c0f444c1e053e30606537c2c6f08d13f561ac6d70fd269bfb8c0e0167b8775974f0633fdaa960245bfb021643a99f81b7149b4ca04281ab456054ab99fbac2c4b84f0b64a5e6474be45307fd5fd47d5cf4ec6e5bee1c65c9eaa2746755301d734a9024122c968beefb62660874f2f95e790eed29e142bd145b53a029bd88b508c9d48da7c8e163db1b686d49f1de7e6bc14919c9cea7f15f323d39585073e769daa314b315f512d838b6f8c4e0a22b59187fbc47851ecae3a7257881241804170c279ca06a9007bcc99fbafd628ab5ea407739a07eec5daba1f7556b0e980c20b9b0d660675113dbf92e4a41b6580dccb73699c091430755d5d04d2d409b1d9617cabe801d956fcf6e2c051af10605e2409e1238483e9d90c1801d9772c5998a69a74e73cafa1385e2757da97a1cd4e72e8c25d15fd46afee9a08803f5b71267166782816e66945bc164b6458649ecd32ff442ccf405b22b6f5d5d6711d1dae8c7ff9cfc1485b0040bf5171d5a176fb52900fab0b11b88bf66a6d0e83688ef43916ca661aa65da770fecbd2905a3e9f62d8ae19aa169118b559f63ed4d1307bb811428be57f821910f209096886aa98c3d6b5571fc801229c078f459d0fb83448baad7cccea75bc7445764475ecb86c5e56dd2e32998457f6fa5f2238ea776e567fbdd9b449499572a241583c52a9848e180247e2c76017b1b626d1b5a408daed7897c1edae4dc807f120de8347c7512e814832bebd766b09224113734b562243e4e4f69e3e62d381dea7f8b5f33a1dbab6ea4d4080aea0e8bb48ac397bcf75727ab554cc701332a63600a3f18779704b8882c00aefa6935b53af2f476a09112ccd8810b4ff20bde994337cfb65378fc744590db9a8ead6bb9c879851032e48a0dfe67fc30b47e02057c77acf1bd7022b5f243cdc593eb77702063ef6fb2f6b0faf78f15564bae3473343bc077fd318bba1811bc942b7290bac4da44868e6e45df123a89a48aebe84b0e6b234cc02af74258656720dbab8cb6e73289528aa853da3dfd561c16eeda06b32ad31de4b75a81c6c118ec9fae24fc3232deb486feda0463330380f19a4c9f832aff0008479af4ec3f16a389d691cdbfef409c8e5c94cc50f65b8375b06fd10e9bdca773dfe2cd4aaeca1e20552e3e349be507109be6410eae85982e85417160132cbbab2a320b7cb8221f56e20df304f1b7017e9668ba1dfe22f0b7e236073eab34dd18e24ed8546bc4ff1e6beaf67da8542e52c441068d6ccdb9ac9a62082196ab9d3eecc5e48f296a44bb004921abff10ae6b1338bd2028208edf8834af9ea989b738e5ef4058ee9dad888f8f50afb45d2e49fd5641e6dd121fbcc54057d98fde3a38ef42035b7f4bdc5cb712f65b35a3bddad30df0e85b017deb9cbdf69868a6881e2be89c816f5688df67d9b289134c75c473e0b9f333aa25f597f3d3889dcb7010803642e099bf2064da19caf167694eec332f04624972ec1ace263912f94c2ca45336952bb6e7d31fe535b1cec013f1d08e584a9ea7647ddc4031c9f37fc7aa33715b28c015ab3579752cd63f914465e01fa94bff7018119804291e7012a07f143dc09e34900597c2ef78a6db275a16615abf0b3c4b1d3425247eff794905a3ae87f63bd1040d83546bde2004e0cce55787ef089f333b0db9b86d3fddf382b99e843a0c0b521066ed167a7714614c4d012814881045be82b722fbe42e77ac062b362b8aa51e9622862e230e62927751c67f8fae6b76c89238065de96d19a3698de62262435bed65cfafbee2a18130d29b7eeb77e1a58532fd1e79ae108d12426e6d69e05bc0429e4e58e887584873c08f88cf9015620b6e6a82cf7ef7f08ba3b69380462d2a62c4f8c27b3dd01470be069208a08a776235229eba935de053a86b85585e296bb9358e4968ac1dd2dba4722b9484facaf680a06b27f4f018925ac56d109aaa9e46364a38dd3ea10e399c6a36e385df845be97d874308069587f7a35087763d4ad2f62d7f8604f6b0574df5a678930ad2f8e0afdc011081c68fdf0e6385c8e65603172f1ab1fdbd6f91a3d0598807bc8735d7210617debbad6563e75198f478c50a3c4ea8fe1f8798db83eb4159b4f091731984d6e1227f5f93fdd96fe8caf9e8fa74c9869ff1612576f5f2f19f9de6f5076be17110e40145a93fa08e2952bea545b12c4fc235f8a520fb87227a025c35600ec3c5d15b13e2878c7710732bd8ae960652307c9357ead533662513da96ed6744b3b74dd3017dae04a4ef8e16559f00d4ebd9c96ce8c0e640c2ee3f72c899a2e3a938f1ec2106cfcb4a762bdc4fbd385548d4b542b5a343211c52f849de1a60e21542e2904c71a871e2a50c42720a9b2508065d3fb9659839bff040257ab170e7749c17b8443ba730a4c5d752e5357a963c762c01d6b1919e7c87e927aa1d7c1b486b0681f47605c609404cc8191db6c8233e246bf9aee328711822a1ebda15280e567a45f87f228df7540537e85ab339ec4a208fbeeba659a18a16c0d01ddd098aea3061dc078b09cff3466f406ee2d1f32035800453b444a5dfdfbbd74908f552a882508850789cf656ec62aa70032884c775992e1afad0623f88749ecfcd4a68bd725021947d6d8c237308f8d41a427b2b48ea0e0bcc6260c01344f98863a0e5934fb72b3a6bbbfa54cd238695925e95303ab58a3f019fbb620b426a044068edea645b603144877c511210e0ff5abf225f9121fb46c05694fd56191c0a4b9821d824c985a841cab6f4a4bb2df7e62cf7cd5dbcf78a54ea7fbe3767e69662a7ed8f511a5f879b987f3056b320512d0361f18cdb2e31e038512d14245489a6fe30d61fb5cb005259d1622add71772f840d5c2297beecfb3438c93c45e2e706f47c879614488bf7a68d6262e821a7fca73163e721bb8a98eec02d549d3603a29ff2a8f77ab27b4efb395f888e568fca7456f50efbf1f2e8cec8eacf6e7899c4b560fca70430759ee20f9c5e6e71b119ed93b4e050d68fc077708b0022d32fb9e99b2768f954f9727bbac189643308303e57c0c916833f1674b302e0b98178368c910a6729c28f05787150bc9c9fe2d161b336915780bb8a1a26bf87f48aa3fbfe1a68f363b275860520727739d91cf5588b8c594b93c2d836c82fc8b1d053e0b81b90e6668f5e697e2288792a864b2cfd5ba1e893b124191fadff6ba8df0fd73ad96ef00fb5184093cc4c3ef37e02c56050821ab08cbe66ee9dc08d29d270125d8106467d660c1050bd30b10646b2a6fb60e4f1ee0eee9c3be16b22f8554672a1b1d3a671ae6cfc704213996682ff3264be809320c13fa0de789b5243225deb2686688f2c2fa68b6e4e7314a6a1f08b8924991386c904a30a196372feb399bd17d3761dc71b3f8e044602378191424091c2706f07b2cc847b691f1b248e2f0e5d0641703eeee68fbebed342bbd414cbaa84d572e6207066d0538500fa544d635b5d0d14875915cc3b9b2bfdbda31314fedc1f6cc502be5b6a2c730d8ae70717e0ca4ec3383a34d10186d3fe52b222070e5f7d59d0c778a10643a72fd6a36c9891350be75dcf2762a23e8a19d168533c21f259c4473feddbb3f0097c7c5e8c5a1339c5a0a4f575602a33d74cc5fc52279f2f51670634814f329b3cc963eb316c8c75f444d4611d1bf6d85e0ee48c3f656b4427fdbb9d423c993d200da126d91783093e46a8fdd58c9d071cae3e538a9fd4d624c033d1a13b1155c9452f419866852b3f1dfdb44d62b2336e825e4660c09ce424b4fec6fdfd40373a458e0fe3ff76b28f65781b3db2c75f79cb9aa5cf0c4115d608315abcb8aaf7edf126ad385d4658cf48a0ed0fff63944113b63a9490f81c00b8a861cdec53190db89a9f5999ebec1deaf34087ac8186b0fd8cbe72cea9493221b6c00d419c95395f34e0e9e9dcf242ecf53b184958275dd13f25c58f662e3714bfd17a8652f55677fef91c0ee555018676d8b905aff9c9561b0d915fcd3fe8a9989f44856c9e09304cd18c64f0480b7512adc6489b95246bc8212e9d8c052117038a4f68b98a7b7d411cd8372f132e664df6d10f3aef0dd65bbba56cc1a7f48fe8d8d6012dcc519d5e6b54ccbb9bc5465f679a88faa743855ad201abd55bd3d79d72ac30b916207094d8be9638bcd6a71cf4e096a6672d40f6faafc8e148b6ffdb4062bd410b61022f7fc45d51a5b860d818394435cf5ffb3724606e113889019f37e42118c99c0f1251f55f359e3b881bcec82177ae900027233cbe90393adecbc55588e879f90a2a69034dad84a71f09c0a0a69c92bd88375fbad36aa56fb42b8a928fb3567889454fd3e02c5d8ffeab05ecb93aceca5a1476a8d3d9df5988686d433c483aa50619e59fff5ee8e8e2eda1132dff614a6235d425e897a26790ba5d701c634882c1ffb3864cc47f850c17257e51b360f7f5c4db336e9a07a3210b1130bb85310a19aedd1a7a5bcd708c7eac010ea8961929ecc32fbcd0abf894b58026ea038ac9f31a95407beb685559b4b2c9b1bd9f1e10e5ee8064b791f09354dbafe19accfd6f25a8ebf5691084b37d235993c2a03cbeda4993628a6304893cf594f7b380d2a1dfbbc237aed05b6f01220978c109603e82e86bc0f68de7309f0f1030168f32fa9a292d02f9d362ceac2e285c8ff58066b76614852f96b324905340c6d3724242723a1d1c02e19998c1ebf608d783ece2c3fb7e5daf6c5332d06e4bd2b5c9029b3aa49695142d898137dbc99a62362964113fc57b73bc80d8ec0960fea1d6a22d4b32a45d64c441859111c383f064ee002eab455896982b49d0d6f8e4106ef4055fd32fcff0f5ddbd990fd42071dd7b6d2b29b628d6b19c6a47f2865467c09f4b39e9c4d763bea1d3bd385acf94bf2d11558fc92e27cfd6fd6022a4aa876ebb579e37dce11c9a0fc39d1620f113f2d9c228e6355325146e1c2d332ab1ae63a8d3baf00b5fca6d0cb74f230e90b96f769711ca92bb56231ad31ab4b4f36facd36e5b26e9c240d7e42afce864c476ca3cd3a46137d597ec6ad8dcaac98429b6e4815a0ce986b32ab7ef01e86ba2ae13745419414fc76596c3592cfd46fffdacea5a605c39ae570f5aaa721cf047fa4066961ac2229c000ff0a637aabb5e36ed182ef132ca83d5e33f08f340095a37c18020ba75ac87858e432c70633444cecb0091dffcaa1cc8c6c0203764a2139d277b329299691f76ec2e05add615d9bec48035036023bc47fa0f2c833797fc0822841e0e8b6bedbeb856090804113bd6c0fde9178c24ca33b8450d58c01113ef67483e315c8500847a4e57c0c76541b0c0366cfdbabd104955b4948c343a6731cbfa649983f0ec0ce2d5023b48c9891a5848e7a7b445fd39237b3086771e71573746c8fb1332ad853545509f8980b151965c76251bc24d1b87c9206980dba39d71123d76bfaa2ba49cef6aeb42edf9bb2c4e56f956ce911f1a7368d48ae296e16295230b26b9d72935b3fc579512d232d05333ce8e42e5478d4355b91f442c5597afe5c0d213ec3b13b2fe946599fe4cc5b9648163a71230000200598f5e3b7c376836da1d73158f208211aa57aa14ac02c14c5780543f2cea6ae4f4759da7ff61cad769739e8e135492926bd550162344e83b98caf015127a3c62e48bb4ca02dfd2ba218c8b0ce915507c8ef0fb8a8fd27945d734287fc31236d622584a158afb38ea63342c2589ff94e68baf4191631c2c7e000a7ce25ad012df36776a69a09afedf31c65838b1df010a61711338a1fe2a07150c52b100b399e2e56b2353dba245513451fe3319103091c935857e1a5c5f7d69194e9184866b99d494f10ed7f779892a44abf998aee5ba6427fbde0d51583977ce935862d663552c4b26ffac38d028ad986f007aa3a7d505d232aae2bb51e26653cc1a526fd0ff23d619b384ce7a003dbed4332b7912c58a61a6eccf94fb7a3fd13a806434247ede36afdf1c5bc3caf61ce9ca548fd49a7ca6c64724b94fda0765254cb12bae0c1709eaf576a171e3d7708b8310ca6438cc060109b1a5d4842e156a17eb2d9816d7c7d465b287d94fc0758839cec928f7ceeb8562f5eb67bc88f41f2d585e1e0b870e54c4eeccdc4928e402ae50a260d1addd4e04e921895c7d2b4af7b31188426364a146e7c1f9fa4933a0f9dc2e3e0ad653c8d4c79b30d04e9474d93b67d5ec6412d5bfc20d9cec618fcce263bfb1293884c971943ce73120e313ad0e27ff31fffc312a0165f4a7a5ff46da102dd30691bd7bbc3528b18c2e79c46fd4589b42a50ef1fd0b4b771c81e7dadc42bebfd0be441b83fafb75f73571602046a6f5827ee228b84c641c8f510cbdd0390a13bbd3538e48c93ecaf43085380546881ae510e17f481a7779c33022f71770215128b4b1b5b69ffac9f3659b50a8c935682a08e4b495d240cc46136134d9b6af74ea9d823fe6f3ef51de704289482e2eac8d2ecb519be28ed60dab5184e3cc6c1c59bc5cdb1f63ddde134a17ac5f35e6e25de4e86a2ba32760311eb4040afa857e1c9d1df641fdee7aa487734581e30c5a4bd2c9cde541d674a622c44ca422ed9b643f2ea4c8cc301ac654535731ea6d7dbb65428cc0fa89275553e1ccb6268f7affdc30f19d71e4763726eff611255f27dfac6f18c01359fb60abdda9eb1b1434d2f646ad1e07958275f64d42607cd845916eb8fd79aad908545dbb4ef0a07ac2b62e85304f0396f41a54694d5e38452d80a356777101c67171b64d2fff3596067dbaccace21e2ae1486237983488a54447617a5fe7fd3eca4a98e9074b4757ebe5a964b7e3d1307ec9d9cb27d104b8f05b5da0e97e5a2353f581563d9e967e23e8edbac615096fe0bcb355a115cccdc043092c8c245764518f306af90e6fc811a48ff9cba012db40408d014dbfc2d23bc5caced1f52553d74819a610b30a53ab024a94734cc6b187b4a9a985b842bfc9409d5a1167dfbf72796ea023557d07cfcc202f6cf413e295cf1527798112eab09ae2cfc5fd3d9a38d10e048ddf6d3964fa5d94bc9110d22f5c0eebff2f24779b3cebdda6cf9cc374172dd4a00ea553f5f1ca158d307b00909d41e6ee74013746b114c20a2fef0ebd1fa6a95a4e40fa51a6566c65576b42489fa8d6710a5a75689c665bbeb7f0e3844612dc1906e43ccb02497f928213bf29bff15a20b185067f2efa58b2b465ea7f767c9078efa2824394131f11357531d419bf2f759f7a0e6e2415142910b2abdcf8d0ef319276b246c4c9ee7be6d57fa9d54c2100b04adb4d4297047513e6fecab17522b8f8ace474737e276b143a8f9a9dbafe367a2f99c513e7690ea249dfff8340b0f226492dcf382e8ce3e248af8ac29f58e956e28db9feb83071c587bc89d7278739864843d2616083bda7d2b417c4f1a35fd0e0f9b2a5301e54afe44719f25046c507d3affb09215d3f54804bc89cf5b362af0515aa64bcf6a24c7811031c0b22fde979e6c2f3b21f10c0af745ef19773072e9c0f7a4534599146918c1e71620749f439dd46f055388081133608376a4018c202174d32ced82084ccbd38556146d32bfb9e5d5f4b4b45929efd785d63a7b828b97154f25b9ea685435abbfbf808be5aaf85e4337e360966530b16014e7f632a36357ea1122b0bd2329bd15c20757c21382979e7d6359e0d388cb0269b6e0637ff21d128688d2119acd8b899004cbb245dc3fd95f2d944fef29b8aa733adf6e1acd86600341961a0dea3de5d57da6dc58188a1aa4cb416eba8dfe950a715d6c375ac1094cab76e77e6a8a0fadfdfdc03bb80df7382892efda85f34656748ecb1bdc8e056f3fa02b4b1d604aa736ea2b30b15211b2b8bdf78be83dcb4ef7f8545e67c3d3c33cd389ce4159ecc151b24a53fbc93360590cdbc7667111fc41168e4054240b9623c941a1d08a10c92aab8e31afd518f2f0dbe7f03a2d82c721d9b6b1d6cad2e4f338568da95b8090c75b7c8a8d947de9cedcb16c611e1d75109053f6f62a23006ed0da7b01f8a45470d31c7a20c80782be1361caae5a844acda74337c2bf06731d11c281b6add66aea4ebe3fefcc7c16703745c443b672786c64a48a9001cb656330b7bf3330cdb4a474fada44da98d16907d74d6a0d43b37fe9d1a0bd0f7d347b04113067957f76f34e98e815c122b2689a7c89cf94ded89d302cfe5bf4ebb214a748055a94388b6e569cc8c9b3a2d691a221857f2334bb6b9fa0f4514d697f2358230a18bb84fbddb50d70ee4a1ccc7639ff28b3fdb6513b396de0692f7f86d10998076bfa531b8e95c56def0b43679550cdf7b94c82c54f07e7d7644dc291ae12318675ec4752a9205c630e11cff7a3e2352dca93b7a3cb8e695e20b584ba40db0339da5994dcf20a13e8187d3b8d866372b4f441d4f9c393992e8a8d67319d6e199e7cb929f13cad3d4d703355a1235a590c770d8208f10956ac6275ca487ab360f94d5bffef61d2daa54758714cb1e7562bb4a9b96a9b39bbbae99230c83bd28739cc7018304ca2a485f935b3da07d19699df9c5e5be952995123725abdbdd303ce228dab64563dc09dc7c42a6518d27445fca9e1d8ca6156b71a60f2d92132773512259c607bc41a14abd29566991a5efdcd37e36b0d2dc10c57c0579f5617d834ad943563eaca30544ea7298cceb1b9c3fff564e77ed38fbb16793d638c8c957c2ccc98f80ecfcd07c3e48c23a08e65c80120195f115bf97e3119de8972f203115ac8c176a047fc353226cb4e29ab46dbea845e28dd6f67b3215d876933395716e8f11f125a5ebed3d2d058abea7f769ae4324be76e201538cecc88c70d66258d17c7c34c0a04502c141389e488013b241ed819d7004243cd1e4835c22d9dab426da1cc853d343de0d0b531f30153f3dd485241a570127e958262359530bc664cd11389a840e2b1a9317e4b4fcce2f13b3dfc708e5a6b4acacd9d486b350e72992721e1ed568077318a3879794b6cb73aacacd6cf6e72060c23aa2c6e6c4baf6cd5400e949b18e3bbfd00f13c0d47f9d3e4c940e7cdeddda2e81df6f4059d5d9d92ea552ea750e24dfd814b68f3a8f6a0125c72b6adbe5fb56e93a9812a2dacd935c0ddd507c87d73c44925ae52ce3584e10dc932a34c6325b90db4dc956aaf5fb1f0f0c77c98df13f5fd5b0e92f8b655c2ee1322959281bb27ce3fa2c68c28ca0e2bbc1b9280b2fb8f9f3dbbcb39571e26389ed1f073883f45cf9df55d86af4744fc367924b032e462d981311ad4aaca3752fc6d159963835f9c5f30d18edf06868ceef79fc2cca51012108a3e3531d138b687a5b2a668911b8f9aa7107f6bae94a6e3e464bae95a6fc24e904a5977700c43e902cc5832587cd2a2412c7c6a493634d69bf2ced75510ce4226ae6293215a8dcfe954008d101720c126fd2644dfa12df15f4ee3075823168e87fd11529335ffe75230b8f614787a31d149520ec9a08dddffce57e084bd2c92cf8e3bdebfffb5c984cb5a4c20fe214be0f1ee62b91bbd028bcf41b0b134fb6a0f5f579148f10d494123e2a79420125a153b215f5e1b73c3399d09d09a7e2c24691a3780ca629a6b0cd6d1b0d30a0d62dda7495d55f8863d28baa16f593b58e2d4b0b013cf586dbb7410801746305e3fded0990437a5c46ccd4cc1cfff44a7e4824770809129a6c51b1dcacf272c9ec91c6cd360ccae8bd1faddb73be48c932fa3b27b85809657cb9ad8c8c3d175c6d30cd416ebca36b018680da2a4df7628b79f4f673564bcb41ebdc8dbcf7582ccdd00f49f20f4d275a58229911bd5324b7c0ff127e3f2b8cb1dd187ad887e8c846c4ac4ba1e725856302b98ef8726b884553f39daad247e9026de6564e61c569c29de79a73bc5ec7e6c1f23b6447b7e2634058211d7351b998b3246606fd01ee20d10e4551f4d41ccec9b0a16ec218000e5abb8022c80265b72d1ad06e62902c400c6a00a861f25e70987336db2e10e2739ef3e015e2d97214414d44d5c738d046036ab1385c7931864ad5c8bde2fecf1d21275a2219225f98728c12069b183c9e11c4fe6c685da9250047514b7952c741a6d5c9434882e69572495a8690d450726f59314d1b82e7b2dcff62e2dc266f2e997684b0874244486ddca069190ba742d29b08c419ba00e102d66b3941561ba3750331f2e327870a4280ef9e26d7eba373869e9254900bb7848c623a2a8635c540d7ac61066cada7262b05c0e5d7e0fdb408cd04874cab1ea17ada9a295e187c683979adabcfe2d0a13ea860b40d51809c54573554fe346de9907832f60d4b1f7e410f9c3427b4d28c40550076389d0b2dab38a117b1761a223aa7a4933e8e8c44e8e58a8f65bd08834c05839d66fd85909e39ac17259d0c389183503ec3c08e197e24b45e444ef2969d4e3e909071eab93b2a1029a394e24aacb756d8fedd4e2a1e4420342cacb60f035385387e6f0589486af41abd8bd87a5f5c7c55a9941c5d592e7de81fdb53205d93fd1f2101845f5c5660f4a90f045e183b5a91fc19d717eb75a3e9fd3fa2870ee66f5848b65fa38ba5f62955252649018f9278e830ca449793ab06ba633a08d9929276e60a9482ee426fab179a8684840a5cc8e4b69fd3e1ea5415c6e240b3513ee99f0508c8e92d1318bca9d85996232eb807ed9905f500275925e1918bbd1b781f81947097f67a570657918f7486364e8c082ca457db6ca9740bf276ebf5a4ac0d483bbf67553769bc9208379ab44a2192c91a3595f77320d700d668ed068e1d742f300a6289bfea5580d53156cec8ca54d6fea6e1e32b25c2e515bb10a22216c02ca31767d10088180610c2e21cd4fc55078055afd695d7086611887046596bed0547851e30163ab6929ad9a64a42aea65245ed5d2df3e55729d345e20a0a0226edca8bf1c0aa312529c826c16dbc75b1776a27e7c16d94d9930330b6f9c6441ba77a13e4dfe00ae708d53b21ec91d2c8a549f696796322fc2200b10d2f06167fd1cdffce9d72852fd5e207634f1bae624d80492c46b7b21237806e74ea6ed4340017ccb51e99bd6bf0c0a6ce730fcc1b2a7e1b86c6cdf36318432fb803424c4feb5ac08cf76a195021de58379a92a285f84ccfe9f51b33bd5e6601d2770a5f55054d367758002a9c6170aa5a7307c11b611b8e2a691a610b7b4baeaffdad1aaca9d4d42cb17f390b4d45effff8d3df667c8114209dc18c8513284c8cd3f7a505c64c55b7b4aa5e6c3768785a578c5a96481cf33ef904f16733d46cf6a223db90a235324796583743b9b8503c290c04c2f1bbea6065bfb64a2f3bebe774820d2a5f6dd6e9bdcf63bec3c5097bacc719935a5d4377b12bc541eb3b53ea07d084d31884090caf8b7e3ec5bf2bc7c554ce41eef2a05bc01db44037657fd1d03d1207ab136a0e1b3483dac25f92c0160601a598a01cfba54942fd9a62733120d3d7fb841707dbb965be70e51b715a9a5f166b87609340b5db2219816c2b15e7447614a01455d3ca9fee3ecf6984996c10d0b30417e470e3fbe4a021141b6fd16b8ad83c4a64767580f5e28e03f0e96f35f0e5b41bda41951ca7571206b0515914e600298942816fd0d190158ca8f4404aa24659d05daf83a0e139cea1a52883c8a0b28707034358a4e8f1be75429f0aad24678292896f5aabf78a50dad060b42fa431cba3bb3831a86fd445f36962547d83a9526b2d280277d77f4dcbb3f73e83be5f065d6be26087e1c6ca75222bc607722df5ed8a4255b637de70cb3f887bf324547e0c26c2ede0843b7844483d6040780c5bcc3822234ed1a2461b6d48f4a9f43dc2f247ac22f020b4f53521d6dd508911a3b638a7027cff6b7aa489b338ad0af2169ab01c7f8f863df51d8396dd8f362a28f05a3cd49ef0e39a15a9a476ad726903fe0a526d9d5b450714b9bced826a49103d7409812e287003df392b83165c22d53397b5bb0565c1a1f900711e7dfa3cf269356cda1d096f3487b161b0863393d7e45d7454cadc3be0c6ac21d0cfda549e35754912353ff9c8744c510625ebff1facdd4dc33582f2b096d9c45a9713e54b6129864ed30deb62b460e7bfba05d2c08e39abfa5b4f2d9d2609e86dab052a76b78c810b916ef229cfe5ed83f84ce6a00ecc7266fc7c4120f0ae16f1cd0be0bb6116262bf4c46304abecd5683e75a170f334256228dc2a7a10998eec476af56c2dc5f492865479fe892d743364d6e3404c57740ef83a9c9807c3228b2d3dd329561d4f618d64769c22128fd45f4531c266c710eb0a9403746d084e68943fb6af14957d816bbfe86b38cd9366dbd89bb28d331042c0e8b9f194f0bc13aeaa825309ae20efe7ab2216d6752547efdfd5253ed0b11ccfe45257811699cfe3f83464141b3156b5820ae4bb8c6d62f29fa61fbac9c90edb6e598e2f542db211c6dc63a2e014f5213184e969992af5842c42df913d91bcceeb2ff3a8e1d0aefdb21e8d163296f4cb8aa5a90bedd3dd8945ec13e532aa9ffb56b9471ad5366f2b32dd6e2de668b3b7dc5cb40bdec1142e4ac76f30abc79519bb2f0a16fb3220ba3939e78a41ab037144255ff7a350d74250004d67fbf9db2414ffc6cad9beda8823a57bd4c5faaad0133a256c96088ad8740f9d806ddc6dc0e38043b7322a442b13ba469d53a65693a6c78b56759241c4932b4c9d6f67113561a44c7c941c17b9e0cb6484b08c9b6e2442d08cdf48cb1543b519826cac91a57da3c9ca19584c64bc25870f510cf5a38b363e9e73a2787614ff1fb5b1b2add638f2463d7f04e4aa07ec0c9dc040e083ac465e8f5fd4cb269e7114b67b4da21165419b4196a69e8789c14681a2f1afda4d7131bdc5016095ab9e4f68f160958996d629af8320693ba24d76ac62be7b29465325c3dec20ffe67a9cc0c5b903585e846d0a28b8cc47bd85956225126604eff5fdc08668ddacd0c14401ec9610b91f0140e9e6a3922f4ba209c2e43046bc49889ad656aeaeb156abbe489cb0560852d064b2ab51d7ce1c359968089d90a98bd4dcac0a69459a85af7ec37bb11b2f6768e6a66b1e65bde3b2a5fe05f4f52008fa57a99c79219e13b325132173fcb6ab21a218a201eb8fa19b5ba5cfd8cfd092974b614f1a6f31112103c96eca63fa07c7dc174f48f184d6e2811bb2e88a376924463fc3f4c63ec7527ae4b0e399825e4a9fa3ba4ba728d20130638a8f5da1dba22daba6ef2f4ad4795c8a7637f96fdae98d2f303f0e615aa036c78f4ba11e85d152fd5c9c5858a56ebe6ecd58f1dc23ee600a641cfa93b926df7f2a93accee6500d1091698b769cfd2d02473709b08dcb9678f6e6da6b104c26b24f74990396b0e07ac9c6aabbcf68a6c67edcfa4bbb2ec0fcce93e99337743924fb50014064354eb84cdc54c83dc6379c8abb4298196118d1957e07e0d6eeaeb99e45dd13b09ccd79dc0a77c7287374d79d6e919d1901d0c0213726d3e44bec9074944b0de99a0ccba4827f6c9e50de57d8e43fa3d46d03b07eada99d34bad9feb5c4f0596475991ad90e54ea28e9340c0e9c43b168454eabe0b50dd89fa4e891fc12bd5ae53a21e221681afd7da3403f3dd3a1d8f9b25652898f7b0101a122684450ae145db5066e1e73f966019cb861945b104f36a4aa4285788068e65c8205eaced0af645b2542dfb05ba195e860fce4f55768522903c672e35f103f87d2f8d5f999ba721515e1de69b2fd87daa1ccbcee7942c57e756332c5167640a7df2211305dd4bd2049c4fa7fc31435375ce60ede0b05c903f8099f769bb72d065ba57562af350e3abdec4ee1412e8cb51b5c8b362ce048edca38cbef9b0e8660bcdadc1893142f26222af996111147ffe70047d6fe52340268f9da85c0dece206640e022d8636e8d3c706e686c101ebf79f69b241b0bafdf59f909973f072da2c6b11cb4238f0879f4ae8cb211da16158606a206912dd39a09ebb23a66bb2eee69e50d0eaea4994a8873295b1b5ab7da92f2cde2c1c82795c6fb457d36c2cc5fe95b56e3284f67fe97b4d0aeb07be27093c495feb0a6ad0d438da45ea3a1d331c064546da6fce49b34df559afc4ea691e2d9443af77efbcf534664703fb31e95bc61cdd63a6d1fc35a8a4eb35c5c9074696492c553f5a002fc4161391ec47edd1662f671356c90b213bacb534a346630a559f56001b229c8f9c229b59904d5b56da11cfd64da2f80d121938a22a19ea659b986549e634dcc7b28bb9722605801cf4b9621d4e3453e812d48905a1e699db34ee08fe572abc527e21ad432402d868051a3be912032d5b1f756d24d0bea5aad26481b48cb79a81091c45cc38fdd82cdcc271ab8c1b07272e39e0ca91af7410886457bf149ac02e2b10d23b8cd48a51f80b6da26d36f209d25415d0980e18e2cda9642d2a2861688121c8e30d28f8659126d15b4668c6a6f3ffcb811dbdf02b5e6c98866cbbc5582b779295bfc32d3a2ea212c036cfb9253557d3dab06babd77fae1893c0ece80a47b441fbd2ece7f0e04666ac4c1547634c5b982528691d7379f0e50452c5a84b90ac68d7fc78603a078181e7a70803bde21ba1b546c0dd5e51fc05a333120fa1fce8b679b2e97b1bc8b1868049df564055b306c19362295ecdaacfe3527be1c7960b9729a58ac178bf5030e9730bce098db88a4e9c7c182b12bb10884805699c889d799f8aa0e699bee8de1350fa8feafff647280e0990778947797b8f5ce4d2d2d8b42bef04f50ba337853eee5ab2547aadbb5137b6bd17e87a2590d6ea02e316d1d80c88a9602256c1192726acd0a3d4688b7670580a44030e784d04d09b00ba136d924da6fce10472c1d1d202be8c5140ab03136b5821b89b7af3ff94f8265893a90efa94d3d6b43e2e56c2053d8bc5b9757bcf4b5f9fe2d02b7503bea09d52798a25bc0406a79f99a0ef83414c7ce02fad78b7c5f6474ed433b9a005a8e7458cf6be13af49492f91e6f37ab736de27f3e065b221a566e96e552fc0831977259856b1721a0c4c0c9f8cce241ccc260b56c71a5cf355281e24092850bccdc6c11c97f6ea0a1c1ed4c5860db78b6e88db451b9c8bb1fb95292e0e8701834b4e07951a31221b696a65024afad5642802ee09781f40254702746e437ff043e79a3492cdaf876ab90c02a653741dd3290a04aa91425b92e8bb5ec6af6770eea7d093040affdfc0ad94721351f70768d63abd201052b0d163d7e67c19f411c43bbf1fc306b3927c1e408bfc11006a3306344e26325138598fb63732bb03b13b93df0fcf29fa918f0ad15084307be9ff0bc9dc87bc4d999da2b455cd823ab1b4ea0257c6a93bd86ba08a8180672060463f8de3eaf56ecf7853051941aa00c02227d80425938f0ed062b91507b91ab7495e22714007625a405fbc1547b79638a0efc933958d2e0a79835ee9282ddd6f46ad908304b13a5eee35085b29a5303e41635a86f8248ff08c9937352d859b58098389c4216ac1fbfd163a451e41a2707526f48546c1adeb06d0fc766ec2daa941239fa0fb9b53b39304df5a13234fbfcd55a0ec8b27dc970abcd98986fcd45f9c06560539f4b150bbc8b11189a3a4106eca2b84c1312ca28502e4e927e7d60ac58d2bc43ce19b7950da3ca596f60483db27c5869b5ecea0114add8fc6b870aa0dc5fe34e88513affbc985f4ea441d85d8db7c308f1513154c8727dc75b8b40be91eb5808147e861b136d71aefdff8db739f04fd0d8a5299d88cf6716a7e3ca809262a22fc51c4b0ba97ca155373e837e5d43c87616be1a1a268639de2f2e9f62bbd05d19605f8880644887408b0ac8011f11fe079a995d641d52c422b6af8f56dc3d39176860cc6591beff003564a1fe5da423b540df7c48e8a0acecd450edd5c188c3e15c202b4eb762e38dfc7fb0f0fd1409a6d80e3671be0edecad7d64437970281c70318848bce3315c9574adfe79d9dfe519a824e148c14d4563da9b360893869f9cf7902e557a9e2e551a04478407719a60416a18550a77cc78a1ec06a276851f892676ec8f7c2e7f76c9bb5cebf6b984a9d21bd9ede6ff55ab65425d8b9514909f3950d4f353f4a498c97aee1d9872747933c2a1f04ffe69caded8ddb673ece1066899b5d2f9d4c8838217b36c90736837229c21fe68fe3fee8708dcb15497ff1e5a612a09d88be65327563b4550a171ea5ec59a136d7340f20688df7dae9a5f95bbcace718c0e4c35e25e0aa16d25fc0084dca2eb921dd040944205afa1d9dcb9ba3cfe6c57124f42ce93a497a379aeed6a6983eb3bfef1c9f557e4f5ba1fd966146cfe73c69b1aa47677faffbc7caa223d9d7edb969f899545397c0378661faa3d58a474e12698b19abdb2f6261d00db2b33ddbe5845b1d38a313a71406e5a17e1ca3ccf63b02041eb88f4e5ecb231f5215637321074a33020171c534c1dea2db16bae7c7d5115e7e0ccc7fe0d7c2cd6daf1c6d0fe9008a5b432ed870debf9944c23a2685e8d3bab8db89f36a801731178ecf9879e359223e2e24beb0af60c3e8922d212456a863aa593fa1a96d6cf099474227cb250c7026422216cc7806baea4d10309007c8836d0dde1325aab2aa0c7e3d4a6545d79704eb12bafd2f1d50709d797278966953e8af81cdd2a3b449bb3c7f1fc5636279199eae24f290e13410a2a2e12c2a6553c3ee0476b138886e9e2a858f1fce53b900cd071626b6a129c4284e2d4838f4e9fa8257d9e03ac7cd5fcc127d23eb61fba6be7a16446306e3d0d4b3db05cda2101ca65aed77c3525d62a76d6af1da44508a12f70976e112da51fd4159b328c84968ff9b7978d2692e1746500975c99ae06687885aeabec019b1822a021058dfcac9446d8717956c532e03e23f11e8f7e2a6e667d7c721a32dc1fee830688fba708e27e89e96c5192fd4be53834ce65efe694ddf52d79be901af8c165ccc370fe676606b68a72f84fefb48f63341204395d10b4aa0cb925665694de4a5fb0a2e306235e1dabda0bdeb690dcbcd431adb08604d1c63b00584a5c84065d0effd36ef7e2b41e3a3da1811e8e4d2d4f166d5b1ff53e38329d7bc6ef7abd19eb1b491deb8b4802b4028ae74d95d8c84ebf3103b58b95ba1fe30d526ef2269af64e34ceab4fcbae75d02e2642696a1285294a564e323be2f1e2d87be56b450aca3c2a48e3a997f0a6a6dfa9989dce0fd819a0266a185d41e255ecb452da179367519fe39c2f4e2a96dd14d1ac3a1a7bf0d8ae873754a3ea7c09940db5a6dbe7e8287563621b666b26a630ae9d03f0eec6a0805f850dc973a64ae9c434059718d89087872008a2a1c70c047149c5b2511f4443ad40b450ad53b8f3e83a7f25fbfd50f0a5b10c0215cc4d65b3460dd93eb1723fb6918a184909881a6060e3221c027974fcc98bca6486aea70ff7d43ad18904e72a58e01b834a88925959feb85d946c04b6519c61f6d9fa87a3ba7c270ff04be677827a539daf90aa44e84f3c3951a734e2866210d59943315ca01224c8e00aee5df1470f50d8ebd1db973e15836f47232b782b499236e95e8b60a3b517c9a8af1bd4373493be6977c1a2d072fe2ac787f9bb338ed4fe88b1316916dd6d1269981d09d827b66a77f823b704f230449bc22d30cdc1258d4c0a9f95a4198d6642a09fa1cf464509fae0dff17efac8c03d79747ec919507d0c1112b590e8ba31b2919535986675085965669b636559bb77bad930b2732dafaef862503e3c31d18767debc86b2ea90e478d16b24b2c855983eb832ff74627cb4985ac4465433f8f5dd67449969bd1cb6b47efa1a5d81aab55e85f4e6608ee8e1f527816a6b6a11801f9c6c68049ed2724a459339be8f2e2a6170502413182897be1ab5fcf0322d05c82c6e62a08a2218db714d08db2911768ec9518a648933ef0fabd2b5d06b236e87b51539ce5873d659de3fcdba25324c240faacc2076a742d2466f1b41a23c4edcc7e23283de7ad18d9945e2e40a32245b2e5205ae5751c5e1786fa9e270f987bf9992760a6c8645685247fa3872dcf56aaf2dd29df916b5c6e14c0b5af6fe909f2cf535baa856fbb289b7f72e12d4ae521ba934b9ce9f0d9c474da1d4e73b3c892af78ab462a59961da33d09dcd05069408c5ccfc1689a34feec99885d5edff1bc4da1c14502953d3ce3d4bc62a368aeb0ef2b7d68e324a1c92a4dbc5816e3cea58d2b26090d09237aab7c21e659820aefd1b37d86b309e2136be306d9c51091d6dbad69b652d10036a8ee9ebc4925cec7d6b48e575aba8cc465756e6cc1b9b0bc367e51c15a042abac83f7382eab96df161c4d24098797490e6e9c2291f774aa4a4eda616e20c5fe744f88dacf5950b9b4bce2adae46a95ead2ba9b93e7c4c6c11c35545169ee6ee5cf8094405622604dee936e29d72938dfc139224610d6bf96e1d33223535da83d9cc9fc80ac00d1699ff98ea4edee9f44606ec3e354bdbdccf075ad710b1e69853131754294aeb822b2a641ad2b42344f1f37479041a4c63906350f8d59d803d49484b81986a276faf7297d03de5e4c8030c5797176a215fe913f1b8ec6a08b0c3b14e34b5a2e44ca3722a3d08375daefadb82a1488bd7920028bfb0dec966af19d31450d714ddc10c2d05c9e981623120fa75cd0782faa65ac0177fc6cc39cc15246b10313dc3f5eacc265083700215abea37b2be2696b22233eb76d7114228b83af327dc3c9870f53013c5f1914953b52ccd7e10a00fff46d6258af8f7ed40fa6d72de0e89f675c7180ed842baa4f45c9e856df5585f1f21a39a1359c17bcbfd448fb746ed08c95eeb8b19fe6679c524ac5588479639a9dba0a24644e11b7acd280b0b338557a441e6b0e9dff16acce92380e6da28c7e4d8503cce917086be7114ecd2336caccb269b7b0ec5f5f89a2b4c01b1d02cf134dce2adde7820c0ce3ca91765dd4f4163763af6e4f95c7174cce883eb33148bcec04bfb6868782c0a6e31c4b7230af05e65875f6573e5c1da46800c270149996ec01269e8331296ed4b4a340cc8f18b06768012787fe718a787a3d2eacb8daf5b2781aea431d98d5de19c62b1d014fc5d84f54dba94e56ab422bdc89c865b0944966f148aa7998ea7120e9218adae594c6b02f5a80e4359cce7f04bfeb80d0894e569e0aee8a20120948c2817c419cd960c89cc0c7959366ee675b8b1d01f81b3d623fa27f5d6f6036805c1022c08326cb49d7f113657b17cc4e8842da6b4f254f6f76928bfcc0f2f47cdf75dd5dca19104c23b9532ee2187d821f270271b5585e1e1d04899e324aa35f77e24a453aeaded1f368a6fdd66371378d92b1a3cc2ac678af82f3f584e261245d7c3849ed5708c5793dd1df52c631d7e8ea898ea109cdc92dc31c9bdaab50aacd8256a4a26591be0813270b7c6a406dbe7b8221c0467c020de9134c1eaf1c304914015ed179536281d8ed3e78b0946770a10be2428ba8c18b40030376cf287207bc8c74c38d8126de117317f6314c4883b088580efcf640993a3e9f46645690da3a08d0ae75ffcba03aa6e0270075a0f98b49ee8dad8df42cc454b1c208e0f7d949c5e6696923696b1e69e409fee095d6012ed9503e8b355a5c7cb831058ab1c9572187750f734c4c4382a447cbc3a4ca898076f01c8d3f2dae30a45863cbc128328c4c3db18f48035a9383e7876f6d910cdb27e42410c20dde225a86e1f94bb9141a306f85088d693423c41b0f5202fb2a4afbeeae15efd09ef0f4b8853076e9013cb408124c3d8604e01618161ca2cf37bb08eef2253620ea3632febfc4c096709d3d9c5d870c4ab3d37b15630c8480f6ce94a0723770de8a4085fde38a0d3ec3e3af8048bd20e68446c72564db97292039b219645961cce92cad8480cb57094d62a6725d7e6746315f5982fa12ce0c043ee6ee4d62c58011365b04c86844d51d9ff13b9800d1790af41b3973197fab6aa2539f020dc7525ae20361899794caffd9996c148669be87c881c1cbbd23ce0e64aeb27e8551d997723dc40d75cbc4f002462009e1af091f848298159a29f72eabae13a0e67b285e481864b89ea5367545bb3dda4e6270dccf0b64d62e94d78c02538e601b404f930869021c145c9bcb9f09656d451848c094c34e7cad2bcb8b582f948ffc8395ae5b8d7f24c8197c1503d6feef4b3c3d3d31c58c4070127f5a7a6876fa29ec6cb2f7e3e4eb4f012dd2d2d120c8878f0a2cad478801c8fbd41a62a4719ce146b28e0a2e6a382498cd2634125b358fe27ee267a3144215e2c701fc20e8af4074654ad11e10caaf188364192cad37f82a55062970e01c9044f28016f0c352b710102f50e29b417a3bfa8dee341e78aa1650dbb1bdf25b7448a19bd93478347a89118159a3099c111af823a31b249a16b5486cae3867e8d958f956bbfc2f6cfef55a1c5a7e8990a721ee5eeceb7b27a0ecc7746069ada82deba9eb29860633935d9d6280293c5420432f3c42dba6e1c188e7630edc1649e159dbc5ea8c97b8adbe039d81dbb0e6fc93273f04b23faf1080683d49d16aa42be01883ebe170c09a7730707c56d1cf1b958e8cc08ec81693114bedfc75242d4ad053f3747d19f735c4fdb2272d4f01e7a558d517e181580ccce9f9c38ba52d2f82077e14f21c93ec148e6063310794ed8df9473c38e93701a1108ae19f2630dd588b293144844a9429ffbecec0161e00a71edd6fab162d22b3af50ef7b409c335577eeef2b156b3731bc2c1b32b19e8dac518bd06978537fbfc33687b59eaa90eff8f141d8cf3e835548a3998d6631613c09e87f9da20ca2e83df6787f0fb1ab87d447da05e17dd30f26d008e3e785fd1dceae3a52fd4ca45c362d55b6a62c0ec6fff020bb0d7cb56294e913a13eee35d660151950fc94e6f072afd8bbeb460f63525fe061dcb1afb255ec7c0c6dbee10abdea546428e079c878d865925db4aa2b073e1b6ec4398e5e8363345e6535ff6d1e1efc512a5d42cc06fc8fe9ee6ac8301cf7daee0eebad4b77f94e379f7104395e0bb296951a490cb43e8401980d71af091d44ccf3a8f9e8ed1a426d6ccd5ebbe540421b91289b9068e3e4daf7db1189464ff0650b4b2923f2f29400941f00f03b593c93693d07abd2f70ab747033305456a780b040bc4fec48709fc30166b56fc02473156a70c32aec73c1812e66277dc910efc32b5bc81814ae04b3f4de3eb78db4d60ec51efcf667390182140ed8b4e581fa80afcb9d59efd148e9b9007330c32cfcb009da9021f7c11c6fd195d3991905124b518678a5a962734d155476f34ee0989795906a9f82dcbef17fdc60480dd06cd2d9a29a609390fe64d5526dc9c1afe7b07fdde09ca9b406b66ec54ef17c145d67943b634b6658642b18d4044659eb5a1276ab2931f3608312d8952f4318bb06c85e56735f3e2eab690a237468a9bc2d4de8c501374832712b0443c8a6b8325ba3c9c401b878c49a7a87abfe32b46d024f582e860eb29761b221999ef6f433a1ffdcf30e6cae1d568dac317d0c82466821881c8b8094eab77f8c258900a9935f8be62653da87eddf887ef34b89125f88fb61fa248884867e41b14111a5a62db4e3992f7ef3b637cd0bfc1f5e3432286447f5ca271038d26e176ac0aed8a98a9e1e8693ec70cf634f634196dc21954da8ee50173ea2a88f007148c6a78b76a3a17513196dc7776aabbd3e1c3a5e1d87e13c6f86540e34181251750e61c884469249cd11187ee29efffa3198d41477adcb73c457392635aaa47539507a1298f79b9c1fc384335790ad8089416f35fc262f291610f1213dd50f910a84d41f598370267434efbb669afddca5339d274e143c1d3d54be3dcc14509dba76cb18bb29a8b65c8dd24e302897098dd8a89d26d2d333378d911050991560089e47dc3c16a7249d2168f62b387f4d6945a0047d290abb4b5b0a28dde8a702240d5ccac392beba4e154d17ab759db392de84f8045d8ed40d656af1f6337913340a86088edc9d71432eb1a90964c8ef64ac8daf9b20c3f64fdb9c20708dc8aa4824923b98fa89b113155d56db02e4d6736f1656aff52c412862dddfab96facb23381425dd41439e4cc6b35cd2318057981d8849fc95f68225a84793920fcdbe3767fee8b45054992d8907ed30e605605f4bd4651edb211bc257d929cbcda3d616fab6cc15e9f78608f32b303727f5ead3e1d3e302841beadceeba63e835ad02c919a0d8c539a2eed48359588fb02567cc39291219969783b0dea6decd41066d6d69e4de4fd4aeaa736627401cdfa757fb0283b7ad283e16c16cb44cf31b83ede9c131842878e83aa0a8ab037dec647fa2fa77e53d555d7edfe8da9baad9037940f0bc9a79f744e08cdd2bd3b616c818a3105f8cfbc0bee8a2497d18b9969315a9a4373a32e956765be43ec6c4f39fee8ddc14d2f442140cade3909b06ca0ede538344d61a41fa63ee058c060ad935a4ed9676dbe2a9c7371b8c6f541dba0e89384fd5ea590e3d033661d6da5c15c35a3fa0fc3889f18c0bf1cd1fbd8b90929b2f848471aedc12afb749d086d869f251fe310eb4d9ff5a05459f49a06f05774ae50d728d0fee6d7c26ef9274a7cc6764595057f38cf52d4d16d4d532acfb1c529fa42b4809a14e0e23312cee98e8e21192fd1f84d226c71c7d9437152194431c3f28540d39f46938b18641e919c039d1a8b216729084c6cac8d66631c81c2f472adb4e979210d7a5b61f3c1f7485ab60bb5061602dd4a573e22a5ee09e171b07261b6f8136f2cf36a6606e6c894083a2e9e5229f93e573b3884eb171e854b62ef9e4a19f2e8500cf61811a29d90bb4ad6467067844baf1b78721cc2589060936ac4abce7fd4c0834486a28a9ca44910649d88c155bcf2c8cc9143c4ff7d40e950201f0cae9993416fa3bc39efaea878f1011e0c967c1d3ff9ab72d19dc422b9d5db3ad7d567039938ca72ac06442b4508963e446e7fb8353d749ca1aadb8e5566251d8367e15f5026e781475c5eb748a959e627935e2fc412c9d4571d340d01a8e6e0ff6c0539bb5b7e6554d0eb612eda9fcdb01e8e9cbcfda25f8c4928c243293c2b3df17d273e0fd05ca8f06b7b16c3baa0f4ba6bd7768979dc8915a1a02fed04c216576708bcad61e23a67809694c9dbebda6e873bfbeb602def2e1071e421d8a9b1b79c3a1c49cf789404bc39da60fcb56e16e90f8cd2baf5c11be4ffb8f567dc1991e6f0c7b159250754f29a8c34d3d745c145d6a317956e855a8d7afd00bea4b19837e2c5717e4f86aa1575a08e581d87d31d36220e8d66af64de1eef787a506db01856cfcff3880c5d3248a0679e08294fc572c42c0b15ac424e687949e66773969231c7cb99e2ac88b190b9436fb6396cb6538114ced7faf2fa6f7f5d6794f578084156425b4394bcdcc820420e2c7340a5fb2fa9b0400a9d1680f1c02639b93a69844cc3dcb9979a2f37a784ca888f3ec2db672d362026885d93359965b140e29249dbc8515b8d332515ee6abb1b8c79d20719e533382bbcc914c1b07a0d7d7ed63ffccd213b37fc0330054b098cc0d6431c9872e4a54cedbccc8054546a69161f90a003b7c134c5c2314d7964cf4a93c4ec63e0ec004f7dc3f70a2e9980960029d65728a91f112664a7ac22d6e4ca8abf7088150ea58a50e75d6c4d1b82cc29dd96b6b21634bbcfd4a6448c82c1e26c0cad42d7107f62da51ee0ceb8562a01c60b6a1d4b0b513d619383a78548d624101f19a2213629db5b49f18f452e2664e5214d94f2a19473df1579c73c989eea475483836bb5a83810d48fc617d71cee85e37cac3360f8786792440dfa928d4414924d0a9719c36b6f3784b57772cb2a55ffd1641dd35b410130424d1e9f1c416eb320729eace44cc0c212fbf453491a44ce05fc90d3680c39d91f86e8c1787c9ff282c825df531b9e513621c5e3ee20baeb3b55aeb501e18401e1496747a545ace9685644c0b4aea7727e380b23d6b6f1aaa078b47d427e30f948aa3ddcd0306920414ee78636efa8d21e76d31333d29076fc1596f814cd1eddd0916144949c28bd4847e201b2a9c097aca1a8c26227be980c740dee94abf7e3711ab6d693fb063ae2c1d6c09072e0314e184976beb192e524f16edc61f3b52f84f906b2d7351ebe30aad3e3bec819d172c4dbe6d23751095c7f1fca9e81308df08dc1c997f7623349380a11ec2a35847fe1266ee0863baebcd2a0a013118bce93f3feddafbd0f0baa29f5b8e5111a2e17a3f9f66d8cb08f03e4e70c95c3b68e04dc8183557c4a75aa575cf1b078512e46b1d44669744c6f16030e35c6ff8a1b2ee082b847d481645c577c780a297806ceea206a819adbcb11079fc5c36d659c1d2b8e5af2649ee01648b304b0af88e4c114ec57201b2d8de5232f4f8a03324d450f970465ba5ef349d85026d37e8d5aa80b60abed97c997532ec10c3fa71a551847f8e3268cc3a4480777251131e661f6d79bb1e2bfc206ed173ecf83776995354344c11930405c91206690fd3c1de3e63dcb2b33d5262c975690e8de0e195bc1439f03f7f340ffa8dc3a08536f06169b490893a90df95f450ae39fb095712554d7d3cbc7d8871107a324df46ed77309e07d24ffcddc501e6e405385c00079701f8ed573c82a9abe91d65ce15194af689654d35bafbcc4873683264ab6be4cb950f4281d1c47b2fc345cc35f5bc393dca51ccbb58d4b1dc4605179143710e84fd0e60a7b9f396f0a37b80687d3886685a745c1ff10f9b4309606bdaafc110c87fcbd1780f69d9431ab6344e0ec001d6c68beadfc804c9e9332103c8f195bfd2eb0f08ca521e8fb8af178c01aafb4f115132c7220b3472a2e846dbe250409d601005a8a708177a94da00c8597141b5c52e95c2540e2bb4f86725f5398558740bca097c8007286deaeac90acd215074210a11101e82f1b654796085774c5dbebeb49029063b38a62af7ec6ba71bead6649737e21d25c373522b0547cf5237b818ebdf43637d182f1a53fc6029f18e1f30610b6761d48c2cdc0ccf8280a7a948f96e0ea28b54fa4a3489e13da531a68e31c1e7580d8eb04d585aa2f49a2160db1f17f2f497b63aacb2fe1765d0587b5f8c7a9c32206b0ff469d88f8fd0256b3547bcb392d84d87cbba11ad44ca1b43a9c7300c52455786145b5799fb812ef53315f2fb8b329355795f90923d14086fb9efa38f1f71a444ec324da5c64c008279432f278dbe0baedf68257cf54523cf66bdfe74a1f1a6e36894b6dcd93294b1d6fc7f827bd3d950f66e6ac24af901ed5cbabb86a6c703f1572cd772a5e4d29f8d5da257c88e0294755b151cd01cfebd71bf6eb109074929a4070d6c99539da342d8ce752b1b4e7a010119d921a5be6480a30a873492eb96d49cc1371a73264cb679726f615e1d4ab0d12d026b3e07a4835664fc02c818b25c05406cf72d6bd30a5c46a7790cd13dd1728666125c60e6e74c82b17fb013e108e933391460af9a842e4338518271babe2165c4da657e3129a91c7ee06e0658d8ce6756901c24a175792744d5d22d1ca54282d7a1585f54a169b4714d313dc22028d6bf0e2ebfa25226156ad1532c422ea177f68132fdf32042f143786f60c073f9c512e487c835e9b1d437d526a3fc8f5e0f09618d094b06f3592f0f2d9f25d864721ad6d1ea39e0a297e3b4980b1da0acbf8b0d28b1408e8e997fbdf4f988d20d7c7bc4c0ab039eec79bd3c358719dc03db03a996cea8dd6a22d3e0686c8a20052900464211f03245b85f15615f7d9f545a3818812c99efe15677aadf28530fdc28ecc98c8183b584b4adedfe2399362ea56ae8470f679e517c058ca7d4198a4fc67159c0dc551e3cd88b1051512fd10eb11335770cb859dc79a4068268722a6b20eb35cf0792e11d11639a8b69b5c5f1b835eb7693b23202dc9ede25470a2dddc9ce09ce5973d5555bb59b482e75e8c237ce15d3abcdb915b04a8c4d3cdf3c09ed34e2e3c88eea064824c15ce650c6a04899e7dc28e2367b6a5841294091cd2a48147075451c30cb90a8dd59dada1150f2c5b700630bb2602cfddd42c341cc12712a84adf6a3de76e1de51a1fbf64b6c731a75bd502f9246256fa5f8de79dc4fd8fa5ea4d9fc1f4c1246d6e00a1e05d8cdac65889c95a8ca9a1e4c860138ae906181273014153ccb353ff238d771aa64795631a43f04fb068885d0dfab3bd17cae50e918a27a13f54ed82b4685d8a1db5385560bd78731db863b2147f153f5fe978c601dea40c69cca0bf1071ce369d180f4a52a76f42144cda96c9224b84924fcce30629c1ebbf3c8699e809e63b90b56e5d6b0a0de0275090fc73ed92b0146b9b2960d4f8d027ff99bd04b59fab8336950d28be2d6a6d7244edb2c58ba49c0f27ae82088081ca9343241619bb84e57a22f91af112d1d958f177e0814bd8dd5042dc84a44e7e017dd509a3ce6da170085011fe31691f0b496fed8dc200fc520ad2984802ab325f82be673145f658f205c33d6527636828f3289c7c9c695b9c24611bb971c0916c82d28a821aac9d24e1184713fa81d44ce44b0ed00e78db969565db719849783edcc93e53404a84a3e4b2ea910091483e9b1bf32d39e2166e36283a3fa101ddc6277c69020defdf8126ae738bc5cd1adce78f546292f2a8b4010ea8db827d95bafba244d9dd62eec6ccdcd535beb977caa40f2a3883138b7fb101b39caea99204f0c01a87b4f1395a1967efb0c9b573b7410053732a6f735201e0b318e3bf956396e1fddfaec1c1998ebf428d67c53eeb29301449542babe3925dc4a313d23bebb20914697425866aa503fe229ffc2fa80461b082bf9108936d36a74757553aac7d13f5262a2ec28d96b9f98901862890782e0b74bda5e20fa2d0fd7594ba7eb61f4589d28d96160e7a56779514a3c32bf98d71b3f7979c146f9cbcb4794d84940e3842ca0d6be07626c101c39bc2134c8c3857872967b42fadafa8988616a120842c926e89c0421cc3c06e857bd72bfdf833d9f23940a5949f6d43290a2ac7fe1de445b8feb58a107669c5d0fbf18284020619f4bd1ed7ce45fb50c135cc0bf272ac15696c85d5be0f615326ebe70562f11e1c48c15bcff1cc11f55b09cb20dc078d8c99b531a899c16778048db916ecc34a6a439f8381e63f0258cd10ac80601fb56a301836701281c209e181f42123fa689ae3d107e437d2afbb7ab15b9a61ef041dede0217ceb5c670677778a35d842005579fcd83fefa61d5dd80cc30d3d19956bb1892cc7849a848a28802f8eab2e40173407c14efdb17a49324088622f3d176716f1226b584914090c35bd4a0e5f05a9f1c9ba57dc1ebe2203d7983b4080618f6420f270e3fadbab60ac78f0e0b6a1e0e918470e53ee39e8131aec342a3754565ab7a743cfe7756e129008b8a2433a2f79a08b852c486380f313bf517657ff95a61883d00208853091764f867470e4bd9356be30e94ae04cea4fae52b6c6621dcc314607dca54711856e51bac44799ed2734a8dd68f2b6f79c8b8529d67826e3fd905861a480468fc391d57e6555d7dae3690900e595ce20bae505752a3424ca1939e7d70db0466bee5fab6820315cdf0cda241ef72eb6877b0dea30f98151a5ee709cc0eccaa4a4290d21b863123defbd3bcd1b7995f443f3fff06c8dd9d57c26fbaf933c9f7101bc63f72323d0d0c2c1f1848cd135f38031dfb893a4ed9f0cdfeab044ec8222f4407407bb1fa26c71a736d851bb301e38b2083ddcfcd48c77e97681f492f044f518495d627ccc90d13e84f128cf4c2ee7d512ad60f009420ee12a8d0437b17a3086185249e2e0420cfa50e28e71839756815fa8aa368112dad4111eb225d1b77894a3717a38ac2bc8083f78c88254305e2e66b2c18b1fbd8901d88f1bd97a264f742eba07102fcbbbec897619656724943eb4b282c39712cc84944afdf2a91031723619a1903c0137607b88dc9f2e659ff9d349c7b66539c54286f6e6a1e9822222743cb2ae48e79d69392da34933466777bc7be2e9678154b10a92a1c4dcbb9f0242574677ab91bac40b3005e1b3d300ad43975a68b9700f8dd95eeac1f30e5841ffb14f560895ae14635e6af504be0e44d5174687892e20c0fcdb298c2430282c51730accff3524cb77ed3045c8d36d39b2b84f60d83335c812b9d1214e1c0923de10d2c528b812bd08ec7d46cd718617626a5368a592f4a18782f8c1a6c26df239c7ade46d2039908132860bd084c44c81a18428166d319a045d93d4d85051baaf4f3341bff60c9559c8835daa26b50654543dd0404b48aca629d5f00bb086a5a428d1d5df45c2a1fb67a8bab51c13d7d92ff21350fd3caad528877cfd0b6bcd6d040e60113e967c9617a9395db4752818f5f8d42ad035a3290e0dafc98b125991c1f56ba7748ae03798c07a9d63da0af4f196b9c72a9e1ddb1a6a45a4dbe9fdad4df4c2dd38982b2084d5a84f3745f2dbb4c1dae02d210670c7a836d6dc4dd0de8a9959620d53b7437576167d32cc5ba068a4e650c299e485a43be1ade2b10e86f340b644a9c87e974bb56653f042fc3830c8b62c7aae4d6ca56e47279fb2b6b810b8696982099a1d0ddf5d9eb4a2d02be8fa443f909bd7278e3216e2a14d25396c1360196a010fb28a42641741d702c5ff395c1377c328749082377dbcbc1ebc636c63178f94c8a5b83ac77ceb840097d46e27a7cffc5cf781782500d00188ab0164a8e5e5c12afce6056dab696268837acb32e66817f1d8a8a1d2ac2a81afe56b3c8dc91c83185d0768338888cd532e49e9129385ba0317e22ad4d25871657a6e0665600dd606f24ff0b43f5e25d431f1c0eae0067ec99f8a95795908a1305e36e8f852d69cf672f3e1df26f2f99dd8e5503ff36d12412d313fea145e910c4b2d63a9258d63fe3239635aedcb23f02388858d67d14810975ea2cc263c68eb229f47c240111e46b35430eea64eeda4a850eb7e369d240900f628bce41ee30a2c64fc76b36a7ec742d7f3ed97a063738b52c6c528d4639920ce77e7b9aaef153ee2c0470b8984dacd14060e3a458519d0e950366e3437bad946404af46c04acd5d062a0106f105fc9765a7935a2a80eaec5c967e10e063f157d97698b5b0acf121afc35e02a10b66715c9b2cf9f0f13639493e2be35ab7abf561ccd586048b75675a2939ad82a1bbb27a1310df27e9698a8b878dc4d3f9430bb04b507aae409e87eba00278547ffdbbb489eec135280ff0193ded8e3dcd2b3054254c120684e29628956300373362ae5b6a9d386a3329b86f05f9c2e0c0a63e18167b403c73634a1e439bc620548f1468134b8cc1db21f8778e2d23650efe14346344ae4dccd5d82a40bd4b38b49297f46891140cb1c87343303f90004b1d4ff64ac36e6d1a90b52d58a1e69d13ef4391b9df481894be65f99e764e5bf9983c54316d6a8943489120d04228ba2c046e60de209d8bf7fba5629368c8f1bac89c1c97fc925a331ed745fc33637ea83ba6f022deb795384d1dae73bbf29078d7fc18cb8cb9f85447850147c72103c260585067916879d33ae362c39c318116b4b14efb2479a1bcd37ab37b572a2cbc9a976f720085f8088c80843c3888f607a5cc2cf8de7b18dfabcdccbd47816b444509b880dd29d0e51f987732605743c7ea5cb0c8c3b834f268f0f553f34831f7fafeaab25a8adae00df277520ccb079638409fed9cfa7ba28041bd53c57b54f7342f4774bd2c0c0ec7325dfe41cc58e6524eae0441096f21754d03210fd9e1ff223d31a26b9abded58d89c02f243e8e46f4ee6a180511e4d236a8b04ac3846386ca83778e9159d9c6ee70354f0510da9a6090911132949882b76b89a1ef388af49c38559268ce62abab18992b8c059085166a429e2474b5232c2d5b790770aefef4e4fd45ee3e7ef8780f967a20980334469d2e54af9305b05c244b4ce25430ab884a84cd365743855c5aed696699610191103402d3ed7def26c9227aec481929838c39f8538ccc47abca6e18544529b83099fd9c0d60f7edfb69eadf81d36350454b22e5ec42bccf5900e0f1884e3468706a735d0167d0fec9b19627b59519af0a204eb2613c525e32fa8cd0f288698a7d3a46fb538bed889cec430697f69969efa21490a0278581fc0596a35c0e52fcd52a21ca1fb711601e323d2a73b3095aa4a9cd798f37c463d105677077ae89b90d021c1b044f4f18cac6a9e42c2bcd60cf1b632d41cbc051d7086e9a692dd2f4d376abd4b688f409814de7a494e7a20551120a69590e68ea7a9cec20efb0e91e87c0984c28304d3947c5c5aa23e18f19b663861f017f871e0f06dcd73c0b3f894227e4baced4bbfb8470244422200d6a6eb3d1062ea42a7f1077545a99a0bed1ff3b0cb5e9c090ae9e0808959fdc58e0d59d0b933d0f95aa68ef2ddc032f23c494630d037a90507f65ed82c07b2faadc749494e9a0a77cff074812ccfe398da43e61968a059c9859ad9e54e79ff97a52762b6bf0637494533c9f40721eb5ed99b6baec8713c4ed8dd08cd9a788a75d319f4015b8199ecea83847b8d80d70fdd293b9fe2d8f623cd6732b5ab84ea9b80e2181f4fc6ca678b926a82146f1ca6f7caf8827d318d66b4283b15e945beab6dffbf2c774cfebcd0d5629aec828d5c81df50a24ecb4f4c50589152f0f4c10cee898883694e76a8983970b9f251cdfe3fb75cbcebf7f1fedc3e7f1dfe5c049e13e737e5c3aaa4c871cfc256af95a658d3624837c484c46618034e5e6ce6966b0a6dbc931e31ee9227857399b2c13c5cce731826a0ca38c13c45e3e40687f8a1811b6b441aecb6feb4b156d7f6c88c0b9650ed33fecdc5fe3c0eacdc09bafdec5c03bc5d041a3db7a458305c554d07c985d6089b7ad9d2af73ccb345b7b126097efc2852ffa6e95358d9f284a12f7db9956650a89fdaf9fdf247c210a01bf37dea627d0f20ee8eb5c0fa001cb9f91bda8ba8bc54b1a8f1d2dadeddb6dc52ca94920c8a0a3b0add0975d46a1fb8f883bbdce53aee6a500c96833ac5325f2a2c5f9c3cade2bec3f952f94c8dda7ee07ee87a8c5a0dfa9ca39b067d84136fdc8d39948c1cbcb812109cc76381e876d02e029eb0fd389ee54f76d06ef6f1aac01c06009746f53b0e8fc5035fae72facd4fc5fb00086084d3326a8d5a1c101d0b840abb33613974f3539d8f1c7207c7309e36c0c7296ab0f3f35783fe5c806e07ed5a97bb10c0e3be2440c68c131d7aece003e5070f0aa051c3c602deebc1871fbe14204e4048a38edb7008c0e884871627c5ae33cc55a39fd1cffc4ee6e8678e9650f7397d3a15926213e62a7e99a4582c46f299956692d29ac9eaa19c4099e1787f52ac53e1e8e7fa7b98c5aec7547a565e4509cb0f009ee5fd493d598c140380e7d239cc67f172740ef357bc96ce61be8ab7d2394c95773ad4ab96c1e1454fc5e356a3fc474b46de85f375fd3d1cb55c9deacf5c23207f7f8d5a379d9238395c24e686ceb3d329d87c0d5dff19ebd45027345a8d6246329d12699208927a2325111e2248b63927a5930812224888d4f8dce886814d9b5853abb2e7efe1e9a9bec6dfc25f841151075ffe21f8455aa52eada2cfcf4307fe1f405ac52f25b62e2426a7dd9b5fa21018962361f3050ce1db360df28377c68d3f6d83ae629b9964763ee69d734e974e85b66f6e76705c423b42ac03bbfe25d3cb5fd668557a102140beb96915f7ce42d773367e79cce8fd4b429634ea36e6f161ce511e82a04f0e6f9bcbef1dba5c6f99ac1d4d20e97c309204129d5a710c1145c49a3872fd8f9822adbe48be26bfca159d2827f351fc298dc9fc4c98d56fdd73f66a2573a44196e955ed6e8624b51b391e12b40a92480c59adb8d511cbc3314f4952eec94c79f4e409ba79c91839c28abd78686c92b4704a5ca3fc9138a20a283aa79e245e23a2089823375cb9fef2470f3a04c9d1e2b2830777fddb7273720ed54a9b1c74993ea0c14e1d1ae54f75d0e1155d6952d6326cfed1027133398fc7263124e3d0f5efef44aef8469692592c132b710c45529ecd3c74f8e19dbc8da94cabb6f7300ec178e60823611aee893a9863524af96cd3dce21bc661977ce61512e1bbb810c780da1143725c972ffe3d18b93b5c5cab2dc4d3c43df2130223d452324b1818a105c85bbd87f9dd83fffb7f32cf2ea594ecd34181bab16d730011856d71d58981c8810d4de1e9b674cb0f3bb0fdceccda6d31c8f7210b1b5f471636acd5c7839d5a993dbc2dfd89b31c4a0b0f2e7b20575843d3a61a570ad228898521803cc14af952fe10441461c4e7230e412289984e75f41777fefc29e7141c2bbb7b0c41ad3b9630bf345fb6b7c89f8c334574d22c4766ccb3879c3fe79cb2ceacfa8877722da5fc86c8eb1426071336ac379a12664dab959927cf6f013333d7a0944a82ae9c5fe5a4bd1ebf59e3675efc040cc1b65cff8faa66813326991ba55044c5974132e8da1f48b642649759ac0a3477485faec13b654a48580740c4fa875cfc19ce39a77c213d7b631784bb6bb9d03acc05f1b2cc2c24cc94d2907fb859cde3082232c9839919f65a852bb73d44619a36e288a6947e83f4130253435f2774a79b884e8d644a19a6a626c9d633d660f96715039451e999f47605f1ea7757714e13c941a2c30f118a48caef84734ed845f9c688ccc88ec2b098296521302cd6dd441c101d66318bc5359ce4155f41baca30181a20e61512c34ac182d9b3bea1363819dfce92a4e857c3481aa47ee2bdbac145530383039bd60ac94d4e8beb84554cc39c72af5a86a3eb03f7c7552c98016effcb08ace867af56ab1940a660c3661941c251328829094410894dd4c1ae1afd8b8808f65f8e2d90fd907ab9eef906c7075c001eb1ebf2af3a15af2abec421bc22ba596ab0dcaced59408a60c366f1ea32bd3aafa823731573dc3fba1f3f7e502eeb7efca01f59fa398f491071e8df3c13dc7e2981157da11db12e909851f7d5d2edece50fe119a51c1302638479249554d2121dc287b050588da46b5a9d63737bfac6b5896627699cd6b9fd34029b684e2136d194db8eceb26635ab4b3b9da2e9ba3f01327aee96c98f9e7dfa4d46b66b9c56752e9d6692473db0c146c91ba210c103141bbab1a788e6643ab5bde8db63107d2168100b35fd203c7ef400a4695a255f605edc268a28a749e72704c6083da1a786a9a1304626a55946618cc01881391232cee5d7e58f2f1c0e30cc51fcddc7ae97ad578a00636dcb0ad802634d2522b6c5878d95941bd87ed9026d80b1f163c488c1752312c95a6fb6b6eb46239289898989893569d1c245e7a3547af102068c184344c047ef70c9612ad908f410c247df209125be4b8e969313520f4ba36634280d1a34260d1a2f60c490912546d7a39bb9bb7bf69ca72e6c329a6544390a95b8dbf7e6a8d8c2056792c13264c492892bc13839e993133e8921a3ebe1824263c68c931314141a346ad4b061e3fb4e68d89041839b51833b41e16cbc373f0d1b36ac6ad8b0b100beb2c11a369efb523a8553482937b0fd793cdf97c229df9792723ad97003889a52c55554545a4585556cb0e1861b374010855251c18163c506ee861b2083376edc00512a2a2a2b1c8b370bb3a8e0586101000e2d011080000460c36a65c586150e2b6fa3068d9515949593959595193256564c2b2bd29b01303ae10187db5f1570b36d60c73518dd4ba5d8a0942ce7e884077abff00197d7207f8c7091417289fc915848a02b36f6644bca6e6fc9cc37373482736f1cc6815f72ab5d0f852dabdd103ef28470947fe70171949454528fc77aca156c685d52b01082b7ede58f4e49c9bd7b0f4022951f10ae87080ce1dd0f1fd878fd79f834c2e5665ff979ec8f067d87d2ad9165f2b784f58f77c65ce7182335b278add69a4cffe0cb7ac632c30a6a8b1333dd565f2ca04d700206307a48108328b000c9196e58865e6bb899e2035908c2d6a203192b420fb8124aca8db12294e0ceb831460421171366dc41451792b006d64d0d161b0896cc40086af88219aca8462803135ccc798a37f40757be130a66c39316c84045499340445182181364c8a1f951c209235798010a1518018a1c0079c109cb71ced5988ade044df6145b10695a29d362fcaa29a7e4ee8fe22ea8e2f20fe11ee40a2c7ab600c54d922abcf8db56f530018d100d7cf0dac24c2d02cd75eeba3c72a4535cc5ed6f5657717974777777777777777777777777777777cf263ac6d815435cb8e20aeeee59bdc27505ac5e4103ed0a1688ae30c17605139cb6864e1434a25890463e76bbc2a42484162e6ae082e705259e233c312e5cb8700123460c168bf1acb6185c90490b312b9c10b3e27562454ecc0a1c9c9c9c9cd0a861850c6a70ecc5ac30c11a5a2cf1a6e0799ef7a5c4aac0a9e215536255c8e014ab420536c4aa20c10d2f866e7040a08c27a04c53a87438c0c1711366704b111c91c030734319634d88e286f53661754330d604286e58fdfbbb7963ac0934b794eadf38d61b80a23701972b447ea1cb95eff158ed641385dcbafebe6dec6a95a5d939c175efc59f63acebcf3dad8a307fcec2c875eda6e213d6b0bafe0cd429df44937198e55fabab5afcc0f287f2881fae7aeb28d7eee8b3ae5ae9f7ee93d6f417bc9659d7492f22d0cc0b8d70b9f3ab9ff4e7e4cb67064354fd7094bfbf19b26826aefff0f979ecb92ecfd003245844f18494550ab128b8aa108302cf0d6b2c0ab15814606660f7be25ecf38d0f361863fc224b29975cc9cccc63fda5949145c6283f867f3915e02612753d78fbadebc1bff95001cee262c05efbddcbb81570ee49bf3de9671cbde847df25ed63a762dc688de058830ee309830d19666a50e449cf7aa50637209fab8a0902a4c108ebec74021b6e40dddd1b50b7ba9435e2a89c933ef56a5cee6ecd49afbb9b6f30582cd6aabb95ec6e255bfea6753bb0b88ea6b399543a6d9a8dfaa547ba5b73cba08273a954bea98ad709358abb61b792ddea4e9e0983d102db5cadd64a91774342b11a40e079e2257ecdbe2188e8810db920d0bf88063dfe5c7f2ea85547386a28eac880849a73bd4cf64d21e772ddaed5c53a9849f7ea5e5dab6b79f77295ebd4eec57186142cf791eb39adb2acaec5ea5a5dcbb2ae7f5b96a5e14e1275a8e21597ad125406e8df1175f0ddd1e25d508fc7825f142acfa319c6a556cb55ee72b55ebc7097ebf8aba75ff47097c788d1f5902e313d260d6b5bae2ba5f79ab11b37763e64cc60abc1d5a033050c36d2979309ec96026443771d6971e36f36702713d890617ec3c281937e95c761c302805779952f891307a83ccbb37c1c38e92f0a9657f99557f966eb05002bde8c390ae6cd57e7e0bff5f49c4a20d32b8904894caf18486648321aa00c8994313d4040404219556950c5ebbc93f9bcba1f0f0c73fb1bad1a6c81031bce9fca9d4860430beb4cd24c52edc6c22ccc55998dcd926c09e90727279b5a5dc27543d292eb9f7127847367f6ca7632181dd2329b2cc95066a3694bb0868686465d0f1c6bfa66974562e6cb55b55a6b32fdcf57196cab566bdf5da7191b66ae1b9f3772736161d7bf7ee672d5ccc96e2c8c67fa2cb97e63796c2c93b47b627664b6a453e1b4b9fead922f3116a37363e69329e9d4cf9c2ef83be9e9aa9f10224a668e0b1731465a8912254b84e0d7c7ce01ec7a1b57a97cb3e52a96b9021bba6b674766115538de6374422c5f386ad918371c8d608a9b1d17810db39e4cd2e9ca322416e6b2309dd790074d114909e9a76313094d0cc99c3bb158cc67f44392197121aa58fe7fa2c99d3f8d62f9668c1b7642f25b5d3789d11f8a1396a7882c249fa8a3df716e6c4e64f15789a95458707443ad52c1618d8c62aeff2904272336468a914899a499a499a4598cce9946f967aeac27f3e96e6a5526e786239deb2f67919bf903143412eaee39d3f3c80c2d7264bafa851071351157f72784c84b274451f96edd11cefd5a285f7f7314849b4ee1ec4c1808ac2906c514dacb53441d0c14593e2ee59401b9f8c30a74d9fff459add69a4c40dcc672e1b4b8d56ab158ac96abe64eab05beae03fdf8549fd7eb557d7c2a8e2a44c35ae1666666aa57a1385f9ba9fe1b005c4ceda3d7e83f71e0acada29a46b9a8a64535a722b67f6be14e456c15bdaee8257a35f801d1ab27cc55bcf97254bc3f1419b5aa6d39357183a3d12ab5da5c102f4b4539a29c51f63c636c099f8dab284754248928877909589124f385144932bd5024c99c9f902237cd46a28ef99c7d4c834cbd1dbec47f5c80228bff49c6866ca475fd4f4cd8fe4435d7555c5571e04097abfc75dd63d7df5d38c47c8eccccc47c5a5a5af8c7552ccf2add340d72236990fb0b1bc9e51f9c9320387ee557be2418c851fc383e76b1781c73944f0002d0f598af1b38003f3e02e010d0b2fd2acff23806f0e3333dab320530000e0136b0cd8984ae03511e1232ad7a1b00a73380ae87bb5cc75f302ec36ab5d66402bf16202046b0a1bb72e4c071f72d6199e74b3115e843bbdda8ae3970b153290e3c79c0ce0fe3cf103b804534c8af92e2628c91075185e39b3047f9680a95cfc708a725ecf6d21ce6dd429df27e34d84383fefd324596f9da5edb6b7b6d2a17cee7fa4725ad8a49c2a753484421172e764ae4d1bbe9e062a76cdcf85b01b81d9cc763e78f5a920be02d47a30e3970fb7357b7a4a555d901c5744b3ac5abd5a8a57dd5ca8f00239aebbfc5b0de1871b0a8f04cf59e06e03c1edba458923b0448186c385f3f5fad629929736bb53c337554e66bbe4a2969b061e6f2a843be5c59d3dffe462d50c5438df257f9b22ffc975f68c2c1b01d39e66ba5561c5f74d4cfe84768c886992be62a52cc511e534c4504851053ec6ad0a30ef90e1475b4ab589ec51bad1ce5bfb96a34e3a8ee0c11a422a6baa108fa3bcbe7aa785f2714597c8e6a681a74fff6463691c53feb69550c27e91c54d8a6c1185bb231c50030bbae7f2754abb59dd077429d505b6b32fd833b701e8fdd629a8966722a624d5a58eb627a293e36cc62a8184e4504fd3dbf31a646bf49ee54c4869aeb6a3f5acc51fe51bace8ecf751e6e515ac3dbbec514f365adc9e43faece5d2ef2f9aa21f2e2f51f1753d8d00817945c6d9d8db2964b1887aea35190e7f168341a753dbc1b6e786f7bef6afc7c4da04e054da1a8c36eda65d80caed3e3bb35c9b36b25bd2673de16545e1799df52e5f8bea0dc73bf699a3662cb55e6fa53e31e8e99398f54495c9f36f3f4287d12c366784c298952d2932a905d92a6cdf842256e8d1a7d27d09cf11be544df3da767c3f7a7fc7bcafb9c94c64f1927324e64683157cda9e4e7ce9ed875ede4475ecab327e3a927e333ef51de0c19273364d4f0fe53bc37d2a94fb9e1e7eb4424ec84e6abebbe55d431dfbf9bdd8f9eb2eb7c8097b600828df121c3b6ee1de55fabb56988a0bf8d8f31d509bd26d246f4cb62998f97a9a2b0e168f4735dd877e1a2c5fb8f809e701dc656441529763b2685ebbf753d9a5b3e64617564d1b3fbf331e737771a74233cf39bb1786324828d2ad05350d810745733ac654fcaffdb70f2327ed4f590e12e7fd17814c799b470517a012386a9a31c8cd277de8defd260e3f4e2c58b172f48a417f2c50bf0054822c1f0b2e760946e9864cc3841a151c3c68d128ceffbbeef7b1e3dfa46231823ced348de0dffc24b013def617835fef34e66bc8d13caf3a15d118cce63a106fd5ffdfe2246cfd636d1171b4479d5930dc65471e456cec68d4779e03b1531152368f22ffd8b18a6f9272fde4d7a12a84f1be54e5206d1d3b6f5e9f4753ff54ef2fb2de3384ebb9b0dd17367835ed1df78ff5e451da0ab547eb226e29a719cd38e9373c44d49e2a8db9e37fec6cf07e7dfc0e154bce8a84adf86a6b96a5633142f5e6dce47c9e67c5a69d763d65a9f56945ab3e9a15ceac58bd2f520f515795a5f16ea3c8df4377c27fff1daf09dbc946fc61a7ce97d3ee2fdcf8657e33b91f1f1d2f8268a77f2cd1d19afcdf87cc42be39b2f2ff43bfac286b9fe313c185e089a682e57cd97b6d32f3ecd55d278187664beac07baf04e2dbc37c9629a8d861303c68c0f6831adb246848c080919b9fe6de488ebc0558fc6adb58e462492d7fda8079782c568c4fda8b326bd3f03754ff2f8328f14f1924872b98a795eb09aa2063ba5375f7367c21ae499316ff6743eb43b81bc664837adb235249b9aeb1f92729a6453d3b6c626e9ae4753145389345349332827a6270ca9bc4f938905bc21c8f275428e72956ff4e3281fb57cd452c2d32abb7aad5e2fbbbafe9a5d59195127e4aa076f0bfd8c9e9bde8d6ba3f381baf39b33a0b0ee7294ff74174c450aaa2c5731ac51fea4a052655dffed0463798614343f521069e8c8696539a6fbc1c9ebf1d8f99aaff902af67859d36f4fc240f0a58c0027a9891851e7c9041021b42be92e1d58f48fba64d455aa50c82992b638abee8651569dea97a20856989baef849ed09648f481a0569d730a8169c1b460707a4cd1f4a6e67d4b58fe78455fc96432fd34797c4b1f5a56a75a5c936bafb33a651d89d3b8caf420abfbc1956b8d73b97193e3689749ce5f6492dea8bb1be5a8c7dded8a2ef5b49b3de5f7ae1f2053df25c66a2f6a40049d67620a4883e04a4bd4313f360008c7ad56da1259fa5d6ebd5bc63154c69c488ea173d2742ae4666a2c172b496d563adfff470f4e3db092de59486a6c4c2c7326232bbbf7d92a7e7953584f3b602d6c64c588ade752f7267876fce8c1e5926c9a4e26ca1253963591648994734a9825304b6082349ba2809c0f8453fea7a6404cdde8bc1b3115a3fb8959d69a4c9199e7d759f6e04a4bd4c19f652fbb1e59c7b5933869b969c2d1165cf6f2571a6cf9da4864e16f9994cb2f06cf163792fc6dcef9fc85a21f7de8b249aeeb21e3b71b80ec9c80cb0d7f5c215ef8e38afe45ecca9e4649fa718c633360bc7c9ef1cd391fc657fafc0bfb474fbf17e1cae893e1893c235c6e7f5c77f49e9e1e771c79a55b59c4105626d63230c6913e44e00cd129c983943d383845708ab8228b49c743dff95bd7415dd0c9140aeabaee9ee994ab8f482386ccac2977465952f6c051abbc971c74e5cbb05f57cad830d2aa181b2fbf8f7cb352fe5ffe1151c76bc94df9cf46d3b4cac677b770daf362a356363c248464502ce6ca9732c995cf439d0a517c58341aefdc90975c89c32d9d2b9f5d304a2f6194b888ce2889d188099ad699b37bb227a4884e119dbb651cd7a9306c39f91044f9f04df6ca6f29af0fc91f07d22fac353e10e50bffe483f1852d3704afb43fb0dcfb8776868c97df2bf9f5c517566be22f34b5a41041f92e620dca6f5164673eed76a8cfc130d95e78dd9a2f63743fba1f2477323914cad1c8b89ef13360c8f0664cfe9ee1c578199ee9378f3e4bc185cb97d634af04eac02579f17afd249168ca258cc3943f0dce3927699248a4acfb2de344a2bfdbe6d17fe1c178ee367a258c97315e7eb7a20ed3cb6f1957d978f95d0306d7e73af338a71f27670a37e589a36e433f0cafafd6313e8606c3d34c31fa0b8d781bda572ac128955ed3280caadd127fd37e7ecdc3611c34da724d7b7e4db3ddd68e3c2e3db525ed8edae645bc99df165fd83758a5c02bdf7ad2fa8857fbcef311da13ed8bd98bbc93f97173b6a83942096af6d57bd22d25d8368fc7c6dff89d65fbe096d8fab71d5a5a9cbfa9a441b8b8489fa51b6db8818d52ca8db4030389596209f6220bbf17596c68d9505eadf35112753e4c22c86f125b899b753eec1784a863c0df50e3388ee338d6ce478d2c35b2a85d4e9a55d168be0ffa7d4a4c9e45b618dbbd633c793c914bb06d294036c27200010d0d29510274a5942fa77cdacc9253768342625cfc22650ddb84f127e74756ba8970e44b3eb289a66f224929d75cf975f4f2232b269374adeee50910fb7c73ec4b19238594f42d7d12a5cf3aadea5e3eef304cf68cbce8953856b803e5c42b967de5d0912b9f91308de4189661b972e5c7991bba5c998411451c31040919448856c91719634286c78e97ffa3073977a856e553bab343b38c12d9d9e161206e271633b9f16f74746e6e3c80e4e6e62687888b88ab83f877e22e840cc22c59b2943e244441f93fe570413981937f7b7ec9478a1019c10de990b019759c48f4fc2cc346586cb28d6230dc7159255f38e68123979f07872811d0e8bb681eca4912b19125dbbd04902462e32ea513b1216243a4c52dad35998cce0f6df681f49b9f49085ff9971158e92eaf3a4ad6ae2992645e2e92640786745a59128fad7f6b2f88d831200847c56f1fb541e9b2254b296544198519b8fe3c9a2f9f88d8d054abb526d33f0872564af9a07cf9927b29ff5d257a2937af4657655bf580dcd80c0c369b13e5d2a78fd2aa208da2401aa426570d19d2208d3fa64ba9a9419ad12188a04da976e58a7a608b9d626e97937ae69e79cca8a6b11a36eea2b88c97bbbc22e37dc91376a7f47666666f743b75b9db8dee265d36cb28b3d14cd2e0245de9cd568337598bcfba1e5a57811edcefc0d94cd2a83965e65936ca9e3dd2dd7c0ee1a8e9a2f4e26364991c0b30847198d326b2cc077f6067f6ed2ed26b7b4eee744afbf912d6a9163f5ff274cae42d7df94d9b06e79f9cb061c3641ae6b3566a32fd83e00b4f622182f34b9eac8227a510e58e34f1248f8caba490a3a6dc42c44014867001648c71983f57d30c774e30045dfb851ebbee729de9b006791a9cef7369c31ad6e0fccc6b9e0663dd730390056a707e120d4e241a9cdd4934382712ee0c34e7cffa48b86a1e397233fa9d64ac7924cb62ad2cd3a9f9f333245cc52fb561280d6b9eeee99f0e9a34b1f6e9e9252d74e7778cdb682b69a0f93402dc46a710dc46e59f50bc53157dd8b086b52ac63c72633a154e9a3b63307a60fc3c0122e3f9feb42a46c6cf979366fe0ccfa573a82fc3cbd139d437792d9d437d18de4ae750bf81ba8586e6fbaa53f36378b151f5330f86c7356afe3c32e59d3f91ccc9402b338c24029d92ef92891db9f3e39ccf2b9b9964b6e64da7703ae53337642377ce8f3437e49a3b5f0af143871e8004e954fbd0b292c365c7e420f9329f8164eefc5ecdf97f023b6ecb5641a2ef243bc966ac8925f513b20aca6acd84ac825641aba1f909993093363de12e81268dcdb277a1d1974bb800222afa1129871c72c8218716d244f4cdce07a54510d1a0bf115f6bad2d4ca4ede1c21dd78324d09d9f75ef2f7fe412209adb7955c2584e02498905e3c02f5b1e65f2eeb6c9edb5a89211e5bf6d9b112e58482c188749695871dcedbac442fe482c804c98c342cd75770d2db92d375661831ca05babb04192fb3756610323265fc8d724a45faa9f79217733ed1bc6cf9fdfc6b57891d5be906707c476e7d73e601cb6979d8ff9a3df5a763dda4b1ecac706bdeec70f9d6d937691b5c89ecb9e879b643aedbadb67a3dfde37deb66ea03bf2ba1efdd595edda552b0f1eb77de110296bd4a13df71c0df902b1ddeddbb8ee0737897369c2cd161ccdbeeaf10de75cf601e3d08a77ca8f276fd12228b84672b9ae93ba9b8f747f3c6344ca8c657ae4c7310db24846ff582c13a6d1085060ddc55aad57e5aa442c964e4b83391af496f912b19ca741a7eea29febf88ec3ae6063f3670d3b73f2ec380c0b366418cc87819e203424a9a4d35f1d0341820d473f3f1a9006a40169401ad04d0983e52fa253e0e539336ed4aa9c5b044861fbc351ab2357aaae8af1e78b61b5d28c6674f664339bd25d3adc566bd7836a306a831c0f7d4325ee9c9f48d4f520c57852c060c36d35bb39997f51f9d8f520808eab583eaa7c1cb5c0b9d3281e6939dbf520f596e35b4ea75c3aa6e8b22edbaab79b6df53858be9fa36a9322a2bc15695a1bce759aebefa3560a1a2c8f067568d05d329d62b9fe9b91edc88ae72e7f39cc515108b7bd8e70462d972a6cc8b0a6f31bbc1eeb71f614921c75847ff9fbc8d2df36ba4fe953caf916d881effc5eb6dca69442d842bed6c4df174a23b86b6a307a353ec7d8df9be4d8dba29c7d9568ee2fd0eb544affd0e795927a217de9bf85f3b9cee44f80bb6e0477a7773e6c83d9a592f3febc50bbeef9e442f961cb963d7a7ae1bc9e4516596431bdd0af7b8cef31eee061f7bbb82d9a148eaef4a4bfa42c82b10da2c836959866737255ca692ab19432cbbedd3f2458fe285d72342853d2d9dd734174ff48304b2575cfbc939473ad739ff3a91705f7ccfc65d9b3bbbb26e9d4e894824ea9c9f8cc5334259d9c0e29565a72f8ec620437cedd5d760bf04b79db9e8a36518ad22f8aae3342a9fb17db4837b2801641fadd05aefc08d2a96580e79cdbc63c27a5eff4994afa9c49cd1637e6222b9daa11d486f856e254f125de086a1fb52ad2aa5629e5245784722e33deaa8c52085b6fed72522ee3becadc28b7f71985ccbf88442e3bba538f42f49b7bb25463f97dd4dc9ccec4ccb23ab39f73d63951b4670f486d6619adceb2dc63324beacfcccc2cdf7d8ba07fa42f7d87265a3a45e5e9c67a5a04e78ce07c2aa79c73031d0ff3ca4e65554e1106a606aed3eb1c59a6dc3a6ea35d16b61d3612d7ce87022ad0a302d9edff114550637026cb9598b3a69a2cd4cea4a0f9c06654e0b827b4685c098509373cb9e88ea537c66a72445f4d142fa4146cac363f8d8af788cd6e8cd5d05424d87a63ac865533b34d2854972b4975bb2c72514b5cb55506b6146ad55e81d33e234eb75d60d91164482050b4e8142287cdef7a031b8395e415507dfba5286e15ddcab7b6b8246954bca93956c7b4f33c8dea9a9e4675bbc460c0220189818d103098a9d6f4022fdcf02fbb381ac413b8d20328dcb085f2d81737c65ea083065bba31f68296165ed08210587b63ec0522d8742c8c1b634f0809f104d08e169758adbc31f6840c6e68fa89d67abdd2e5db6fb9f2dd8b3172ac574a898315f6c3eccacf48ae1f54b1c5dce883e4c66f48df1857e2975ab6780a493e97bf4405d8a996eb973f005107096c71e1c156884eb52a02b5e470e1117bc2088dcb1f64e8f20fd1aa3e25e1f29b2e23e1b6b8f0e8418a3a483e4ca061c2e59795dfb21162e44a786ac24bb802bbe10ed74b1875769070c3c8137bc21894e386714800316423d78f848cc48927ae4bf1e26f9d58c2f537398186ebff2af0c1f507573073fd5d566085ebcf03c90d9084e1fa0bc182215a10821648d10225ac5c0023e3821cb8c00b2e50835cc998d086ca144fa28a47a3b8466aa2d9bc1b268314682e8d5085139e11a1935a480107a3814157c3c607093836c8e9c1ce0b124f7001176e4093640a15a86cac0e3df0f8d1a607bb1b633543b8618bc632f1e8f235717e852e2461c5c98213c4cab9fd914797b2f002124480832b9200a4c40bc2ce176c0085143cf0849f2dfce0faebf001bf934b3a603191822a6e9bae944aa020a7c78a20e0b0c0066590562892b25c162e5829e10c45aa7063ead4e8f20bc1a3cba35b76ec5c0e4fa92edd1c6e8882021cdc7ed96f515084db29600157aa21d8a8945266d47d4eea2ebf38e5165eb28fd1156bb4d1a455fbd1ff5d15e7bf8b60f357c30d591ec065bfda20275d6236be672edbe2c6180a68844001cb0c5408baf3c6d809c41085cba6cb510935680109867005099e2085177e53a75a1ab65aad605e702594eb06b8e16905f612e6d8410ae30e0c5ec2c8d3733d8c4a746e18975cff3006459e1bb2911bf2919808945c7fe95f7d70fd4d2320c2f57f27ae3f38e384ebdf2283ebcf830467b8fe3f64ae3f901f5c8f950076fd8f3872fd9120828c098e30c3822341d76327d8b9fe3657deeedce6ea989795709e1fb097e35b2582f084cb480f17841004849730024140043b5900210758b8c20a5ec228548f70b100c18d22780939c9f590715e42765d7ec9cd0035aa88051888b0840756100318d078163f38aa5eb9cabe785684143481042ee8a0891fbc78bb1052802cff16639e06f9619185a3a4b456255eb6ea51af6a947efd20f4ebf7d7fa5aa5547e36b27857b791c529037a0596df3d075b3c857466baaabbbfdc6b5eadf5a7cf6834fa2846df049a3e3f68fd907f6eed3c93a3ea532fe499cb3327f49578f19777423f203138a8fa4abce01820c6f5125fa4e03e092982f46b9f8414413654f725f1c351f54541b8177d49b8709ff625111dd55f1260fdd07140971791f6f145f49dd0af8806eb1fe1a85ae34f7d7f459510112c610563a0c250cf142ff51d1655110083176cb60045122c60e1a5bee6f1ca7301644f8268dff58401f125a6d63f3901227a06c417d1e700a67154fdfabec305e05b5fb23a85e3aef7c1031b5f24148a5801f6125ff8064db0c1124b6ce28be64d98a3eacb34d8d0716efdd8513a53896c403e767d7a3c1ce59fbd122f49d096ef1de59f447454e8a2c48b122fd105d647bc16304516fff8125f3e34c5976d7a2741e8cfa7df0582e5f7972f2cb0a1c974f256b2f56fcda2946c451d9e6c7d774bf139952e67238b7fd401840e527c6cbfd7bc5e303c303c9452e70de7cadfea67d9a493ce2ccbea36b39ad5acceca652c0f020436e418ed182dc2554128cd68103b36ec588cb556a756a756b522621094931011e0b24d34d98dbcae7cb7c9b8060a925d0f8df6f86446647ce80b81f1a1303e947e42607e5ead8acd6def43b94eedf94d2eed6a2a220b7d7a9b63dcd3a0fcf9f539a741b0029c45cd2865a659967196c59f9ff1c637732199bf86f54e83b26e5bebb4ab0219820d5be6ca891375549397f2b964529979dbb68f5dddb676b54ebf1a94315799badb4f57b6cb513288a9166a50fe566da20e6ec93478922b1f459a6cb555f145fe4aa74c9d86983ae15c1c99eb7e703333333333f3564f2b9871b10a5c2694e7e656b9ad8eb8d82917cef25aad3539cb240404d44a845c2e21f9a240412fa01ffae21702f36a90bf577495c9476f953cb771947c13cf694a5c10af8d8778a80867b17c97cffda8931d0f71af7886ba2e26ea260f33f3f0f4b4ab55eff2a15d202f1b4ddc95ef431672f431a6844470822b2d51c726e4a8982aa241a9a32bfdfcaceb31855ce52c47c956d24262aab7104139fa84362641047b0b31c5476824cd7cc49f1018586489374bc18219e7b972b53a8b85b375dfbd7cbfa1d93caf69b0fb1c4983f29df33c4983f2479eb73a67f9c0669f7dc8336de2d15cf9ddc73328dd0f1a1cd7e0da06e7d2e3e6c7d19439b98f711a94cfaec822bf7a9cd349220b7f2b71d6f6f59de5aa76b5ab5d530726a75dccceaad56da6b3dc9314a144486868c98aab5b739b50ff14d14a6ead1ef3f04ea37456f575ed4bd2c892bc13d860ed0acbe19d6e10e0d49c6dce5a274c4e8e0e8b6790c4545311412762aa5d0dcaa84354b5d2e39894bcada988d2e4127d31b2d0e7ee871f5c566e8a44a2fab578947e529b1d8b69ddd3314d9b74d24969acce4212c69f96921c7fcd74cadf6d62fc467e741a4fe238eed548162323e3434f915645dd73efac56b578f9d167aea431a971f1262fdf9394bcf5e24b3152bc28b930719c5699bca4b06e61d2b19e36c9972d7465d8aeeb0fe690b952feb7ab755e9215ba80c04646980ff2d24e728702a92aa8c46c1796352b158d000000004315000028100a068482d170380f044d8c0f14800c80b05668469789c328c85118a510428818420800000c00ccc80c1a005ec257570dffaa7b6061b138227120fca53381b57022a990b574c34e43797acefea92080e8d908d36a8b4ce24feb0a69a97704012a6fc58b0aa7dd6b3b457f7fe2d895ad503991201bf708372018fbde0f8d0463846d8022abb930a5d0cd7b18b1bbee489d2c5e0274273ca2691c8f85f5b1796aedcd718da4656c119ca98101b8779a5510c384a9ead48c58f47e826500af6c57aaadd2c030d9703034b8228bd3a7338075d6d26455e21348092bc9ace8a01eb9095f90ea9ff6adc19d3503f5d54cf34fa98b80b60169df810a253212a44118759549f4bc5b9ea570954821df0e86437b67cee9af4c588b82e2bd3908f7b01df270020fdba9bddcdeb67dda6d60fd9fd9b7eaee8b2d8ba92bd20ed0dc5833bb16d342a522008c66ba314806074938e38a7d12f9195b2b2bedf1144570895d7334aa229dd7de6285186b1d2c74ec1989df1a05ca2b8ff15b5e8c5d9bf29b47669c756fd2b7f29a656cf9d1c06be09d77be2d3b43a9ea27000335749f00a05da135448c455125065763ec5be339b8a476640289dc61ff16a0a74b0e56a68fae144dae8f86ae50a9121d1736a4dc9f320d633818046ad319efda7d7a2bc58c47305f134f248450e01ff5a9f2f6b826effcb48a65d2ab81582bb08ab3ac007f2506311c3ddc8d7c9d464888bdc12779afac16e8a48bd44255b5a51e42fb776b1529e2bec1571fa7e41490dffda347c7ac4afd05ef7cc5e39213d8836c2c3041e442f75cff90c93eae7df24d1772c9e23d72304ff5aac199c94a1854a82ef4adf3373064816c7e3b937a92921b145ba46481715a9b1811edd075071c32cbd6963e871e7620a40a78724511cd336887421706faac6f17c7f11f16edf31d56eac05debdb9fda7a380d70ebd0216c8b7449b40f271a545e2f80730fce02629556a97e45b0503eb399e65178586b8a63a06df9bc9bc458b275ad07848473974e9cdc26a1b7109575a927de5ff144ab6adaee49977919ac3bb59dc4b6faff8746a296592be390458d7b506e354d11ce8a47d633e52dea9d567387a2d14ea684db3a6c8cd0877722d41fc84ceebbf97fb6b635cf1928089b93ced5290417f6b3a1123098895d8f1654a2923bc44cb879cd1e65dd96155d804a5fe55fc0f2fedeab0afc48b624d9ae8b7065075734ac982b4c24fb4ad28b5fb4ae959ab377832929cf778dc504925425a5ae024c0149ac244b9b4ac369af42ac38f8cd48d9b793e05a1f7eefe298916eaf38f4c8ad02f05c1bde0f5e8aa15110f3682b003e6bb6bb6d49ebe7d96bd0fe4c5fac65410c7d2342926ba8981f0eb21b01f1256f3d41f3d0cce76302fe2d26d959c2bc16e84d72d4ef46961c1dec72475b1d82eb67d5316a5752357e184b64a9e60fb147e57dfd0130c20271779a28ae35abf1b638b056d64a31bd8c6d35e62035b824782bcccf3d2056bb3f1f1c72687e25ce5b5f36fddadf0e469d658e04b8b6cb3d81fd45c97b0770ce3d9e3cebe8c16e78f5e210caaddd6ab06b31089ec0549a17ce00abbb47db1fc8be150d636d11565be0b3b23bb4354c0caf35f4b992b2af13bb60e4251c4c14dfac2f529ab8db3a2f8045400a3051138021fa01fe25f37399c8f4055d2112827e631f57355096b182f725ddc1481fb0a5d34db646edbf93778b24415b3972fc6143af61ccb1a46b91595122e3258c082ceadff2627e05f170dbc9e1fd60c8eacadf24941cefec8ae5e261ff4ee6d181b77bb9bca84760f30494bbc1739b69ac72b8c7c25a323d8c65dc8fc996520366c7beb5e403b64807dc95e59b87f0baa83a754869280e9b072f002fd332b364ee1b231d9e081143a2c9857c4e3b86f64609152590a19a87cd6a81a71d230b0dcb2824c0691b0391ad18990085d19817f4ff53ab2d15714a52d8548d07a57f52727168430181e967f6837ef4bf9dfa8c901d6c209b46c6171ea67466914f43962fa1aaf99ecb83023091655a2f9a71b601990b2c5ecec01910a85ef165b02c3dce332ab3115894b561efe1d547b63377bed6c3e363686d0c8850bf89a7f7d817135dbaebb19422fce65e3d21f6c1e653c11e6a24f9eb0d4dbe47c0050a60fe3095b3b43868e17191f74d32c04b825012142373fd68cc138c4d6bc2dc0caba0ea583a22b6418a4e7c8a99a2ef6b9e4752b0e5b6a7ceff6ab8b3777645ce125363506e16709e2abcb2b5c25766807bd9b890a6b33fa890f36a49838f11a42ab9d46deac227ab5c45c903da046b06a7049964a1b53f2edf18b1046d8f098f7d446e3824f898c5626e8bcbaf10209be1a35748188f0720611e4c247929ef2dfc860f39681bc8a72af01b4f91f31382c56f22c1c6946f8472bf6a3d8b80300ca15fd08f3e3540f3e2e969a3eb83faef52e1b2e220424749a6d5cf7a365865d3863ba308aaa940129847044257f52648095ec0a0713bd4cef2216425921081aa36b8af6507355eb2101411c1a7e20d918e9721642c68304a37c203027e2c4c1ee872a0705dadbb0ff78caa5eed6b71b5f1dfd516c7b0b6968f92ed6c3441e1df4fe4aec5f08701b67ddf214e85485324c5653ce0f0bbfb13f9039127e784331508da30c18ecd68a3fd04414ca5eb09bd11cf166ba20800d4be65e3e9be302df924fc802930bcb861513e70c0d71324dcf71d023cd9eca7aff0fb6f75e7042e9526a2077b8bf878c6609471418f29d7011e8af5f9391eb2a561b606bef6d1427f30275a33720278d87ce2e749b0740b868e8472fbe5f1523e8b5ce2f59b36190622488ec4109954d0ee902adda4624c92dd0709fa05c05293cc05c8f04eaa385036cc5a383a1f72dba5c6df0afbc0e2ddc29eac374400d151601d3a9675f794d4a6a16cb28a4f127205eeb31f1c21fb45b6ac60c86168b648b644ff658b8c612b0222df6469058d0b5b234197d2052e09af685946c000546e38a2b0f1d5f9b14b0539f494a9ac4e3081da2ecf19adb54d1fbd00f1188ac0b2bf8517fd5b16ea5bcbef46e3055932ab003c2ba65f988cd10881592fdce38e944fae5fbb941d017aadcefd538361cd150e52c79d3498dff764c64c49b6633d8036f3f4c48962d381538b505f296287304d9a40ca81d648582cc294996b66afd708a3824345f41a85d2ac5cc95565cea700adc42da69d68b38e49de38fb925a8800970f929f2a68cf06d34aa3a3ff232570a48fdd442b9e88b87c4fdc9555cebd591b8ea75ac28e715dbee95062b130fb7914f4576e1ac9e5c0b47fbfe368bcd7ae8ac09e5817ca24fe55a7fbefb71053ea398ca54b4c4c08e569dc13432f03b7810610373c06fa0a1a3b8380ab480d5942676392587a17fdc618df41eaf877e8db257010522816a12567a567a94b12bf223d56bd007de60b60d9367b14a447fb7ee2580296dc3a170532f31d1a2174f083cf7a561cf5834f7dacfc0a9422281f569759ccb9f66ee74a46cf81fcd12942c08d405fae7f7c967aa861614e9e453d463423d955e48b2ae95faf3791ddc95c3d23222011bfc643fa8a2ed01e1d278cce1851bc140c482df3cfa1b6b20a441bd229b3848eef4b3ef163dff21c4c4cfacdc6b57617708fc44bd9f0b88d10a070125b84299a46f4e7bada69c7cf84ddb5805bbc037c5304b35a10ffc10b19fa8d9a21ca7833cc132174b5e98448f5181f9fcfe484ec7c345d6d5b1b576641756e0d29ac8ed2697ad2eeedd74e48c64a0be78dc1261b6a7fc80aff938655c40a26550bad5b2b63a5a99040ca7ae34bd9f1d2aeb6dcd1c8fbde6c66ee61df6f9e4df928fff827a68695049ce495742d8f2927d47eb5dbe42f05923ec2e30dd1a8c66ae5181a9f1cdb3285df703869d92f367cca399f51eeab9b3d28dca9a21e30a8fd718284eb9762a1bbe44051cc05a408a788d3326ca8db469cde9aaaa4574882e381020105b94fa61f1cb4b5336acc1fc1a3326bc4ab6718312afc65b6f414ac4eb0ed4dc93cf0e91cac5fb22db7ad7ebf6e89c7ea936131989bf996156da491bdaacab35f5c1adb0686bffad5a8d9c9af5199d5309b299b7275c21500d9721f7b1fb471d2ea9975371719660fc25c2afb78f13f092ca9ff50d8e59700de97c104437d2147df1a3c0f8a32200d35f8373900d8aeef667e14e91dc8bc46fa725ea48cba317c02653a2f941f5693647c2a740bbbf0a082ade8977c51a6b749c1e6579259c9242932386c126568947e3ebf5ea0397d6f798560b12f5efcdbf6bd0542b1b948f3a6c28025fd6032091b73c6ae3af1573c2cdfeb5d2a8616ddf627517915ddb2546d092f11d528ff31ad2b0cd46b71f0f651942b9def7e0cb990b515ce2bb69980b54a013ac48665862ebece28d03ce6cb85dddc45eebc32238cf9784aa5435be87827320c650875b0052949549dabb2d2e05d3ff7dfdc8b019b5acad7845705818cbe39bf654475e725fb04f0a16ee870cc6cfcc2cbe2b653b4b17fb01eab58d0026de9a0fd14272c141f1d7d12c1e9486b115906256bc60c12bbc81845e0fb4854d0f0f8f7d2fd77e0557c2a44ec4e498506972a59abfe47594d9b7f6480991c6e11deba3b00525673655e1b2fed23f5ce72be7bb573720ffb3a94a5203422a77b33fbacc1237db9d1afc82f7990b3e74d1f758e4551778f90c216f8fd8075d5f5c4ccf2ff0c13948b9f7ebf2e95d59f0cd9b3308db6126e293a56e39f11c2b9849faf422fb5395d563f605f8288a7a354f0cef6adbb412b1955461d2f2f4db13fa8ae5f4dc9ae6d8eade7d505912cd4cd2540057bc30defc4bb8324abcc8b78dcfbe82023b85bc7f63811ff9572fdfe6fde10e6111dfc6e28adc98cadaddc1960a445382b9c49bac384ca70eed857280c184c354fd2e07c07e1a7d47f3bd94fce708425422bf666a1bd6449083beef8148643b2cccc23530a16d30ad970655f5af62ed47a2cda9a75374c564de8eccc161abeb9c6b0dc7a2c114fc97822b43c6f12b578bb95cebd375bf302b999d7545d58a39807162839ab8ffe57405abc5b5c0175958c975dc22eb5813aae592d0597154d5f697b5e51f24d2bf520178dee66d9ea6254b14419173b251dc35921fff4591e5ec31321742c321b5367b17f088557f06f346a9664cf00324618a26b1f44917e788771753728b37a548365953b838d31b90a2ad9ac4530f80aaa534b187560e658a9e253000a73aca1aa44d6c60e13313b280f39c6ce2540fdec47f8f5c843267d3c1eac6ad98482dd795cbedaee3f21011bd58e996502fc9ef30457304fac1a85c41d21dfc4f35f880a1d521335883a88d0fd5139b462c1338a5e59fca349cf89ee04507f6f7a81e1b0a737c71cb943325a9d31e84a52e193fb50ae635699c4a076bc441bd4523ad647eb7995f68879ead6458f50931d4f61a989717a391c9e15743d709ca94863348c5fa8318763d9c3716bec5dd62fa2be1396aeb1aeb00084a42b37f5a6f467a128c7434558e8cee7e344c07c6b3746101fb954260e8bdf052aa9f3f76ed34106f656e67bd51628ebf082a694858e0470e790b8608add77189daeaf24e1e6a5db4dc286772091256bb5f409943868b5f02a1d42a97c1256c32295d83b3fe452439849b7c7337561ca20aff75505d09c0c200a094251ebaba808956117410faad16c59c72a5723daad1137996e410a122d409e5e2fc77bd176d71542964a459f491adbac325b1779e9bb394119ece8aee66ccf1ee450785f3246b31b1040667b9c846dc3f852714aa9ea69de768b68ba3b2a4204a8e9a334a065432db2162fa4fa47ae61cac0bec5ea89be0e62b04f85f5d4a8661515ca52c5463fdb211390d6bf21c3eaade2d930850d923f172d0fb00008db57dfa9d39059976f0ff45f4e03929d373a9d3c047e9c1d1e0cd70503252cd57933d4cc7a94541f019bf4a4fc3e25a4bcb5105e564076c01cdb1f40b67fa72a27ed9b993069430334283a870c16a40d65972c22e934756b0274fbc6e7ec3344768c0efa430468e9bbff0ecc16a777f721f88ea0ca3a0fde4d9a2fd93ea96c54efc1a5f7a4e6c9fa924a41598d759df39a5cc9c82fce189b6ab8fa635be81bb9b109adab7ee37c892af41a91de78d6e57762b331f0c899034411dbb3ce3dc2e3c9b4ec7150925aad45041f35c71a9c1b4c4d50e1e7c0ec2b9c2002a33d945e5cd670980f008307a5174f8281ad4abc82cd5045a6396b61ba551155e374359cc6d418e0768dbc11e0b23d0a83346b110a1603ac98b01d3ccbf5dfa0ee478b518b31fc34cfe0cc7ae192096bc60fb45b68de78078963320c505a94a38bb2de0d42746c066fddecaddce308992f4c6d56acb0f970f0a37643b399814fc0e3e25c499304acc8c0540debc7f193409a830a432742a14b78d091571f3152f31265c7a45c0ea072d6c6c6a929276e373b2d79a6006edc2ee4e4d105487ebdb5d44b34780383f1144c7be1a4fae0a4ee4a7fbdea6f23efe5af2d9ba1e43f582e42c876d0caf51dff7e13c3b8878f95d74bfd101d28e69dd1146b992c4bc1c27731efce4bf997a08b93553fbee704ce4cdcfee927d7de3fefa62facaa6ae6c73b66430ca38aa9f37e9714bbd6a2b2ad36a692a42f6c78c89ef2d04f1ccc5fe5822a6a5ac20d27473177ad90f8c64b1f728589d4dfe5947012d7425810ce9d769a37f598fa4eb9699af3256fa830b8a24b9015dbc9b81431c80cbf9d0e83ff0b71949ec56f372fc8b0788ebf07f8672c00f6bb34e4da37bb0a809d09be1f237be2c15f2bfee44cebcb8308c658468761d8b03799d12edaeae7c84103716346982d36270ef90a6bae9050d10c0c2e0719901c82c1bc944bca324ed24ec9110cdf106a5a94187a1f1a05900f0cdafe476ed216fe4c785e466f3aec67b68309f93587795f45201663b95da81d3e2c7f492ad17d705fe8cb1320a053106118037d11c4ceeb8ade31c209b5bc5fbae84c387c319db0de321dc77857a5db97c726f5199395ce9002bc4e6fbc3553b37b6c034d592fdabd71bd96a04afb0a82d2fd302c771a7a96ce1d345962935c452b634fc695020cb2e3ba8abdb84c7a24a867286497500574152e7f31f4a1fef40d45e0946126e708e1143cfe2918b18d7a4be19caac7c4bced827b2d58c185d8d1991f0480b2036f61033f8e637eb711cc383d8e5d990cfc877d3da5147a8940db0e74d558ae7a10f1c238436cef58e06585aa98c63216cf4a928987134fde94a4fe222b244045a91bbd03bdad64cab554a405657fe8140cc2735107ac7c82e50fec02a9ae7335288c3fc94bc7e301c9499d2de1496bcc4fba3c23642f3aa390b4c2b165f384ece580f62a4eeda1313c96dab3fa8417abc4b032ebf8b166c4c43961c846e37cf2414388dd18e47a30ca6ec3bc031eca43485c1bc63ac28265ec864cb9109e76fecc28f5d67880a096d99d105aa680c866e2805c03776471d9478ecc7b90c9339075834fb7048f0095003e1ea2b20ff1e0e53e061956eb306c599aba109c216074afa3f04bd88df1d81dd3118eff7081fae757b18dfbd7da66cae90ae060c38a88924c9caeb37fb28356168371b155fefdc72b23639c0bc1109d537fb74158929c7aa89ec8ed922e2a04d7fc635d91e4e294acb36285a06ef1e939c9c4aa0c026916f054bdc585bc982c7a174f31019b358e42c19a9e9a2ac9dafeb1a82e3e6580b009f3eb44a27cde192be6152c5759be1f9b85ffd8f9914d9219b26ee7a2dc605bd43f83d823f7b11051170daf48c5d49fc4e3d5743584fde199c352af6b54bacda87a4968ff58ad6c6da99c179cf0581a309e2978ce0e6d4a9d5447aaddf13bc16bb47ca4c1a1652326c69e5d8f1350ddd58291b02af266a1450fb250f609a1d61547481966c45083305b105a44945546a367fe908afcd02327156f06ea658ce12d024ac46600252d395b005301570bf2f830f3214a7a66206fbfc98cca2fe72da71ed8f458ab3862aaf46dc691a80efde1ae509c577e2d8ae4ce8b0bfdc36fb4ef9010f221834fcdb53a87f23b60dcbd3b571b303a6ebe75589ab7d14400ee1687eac69ad9884b153e184a1ec53da8a90d71a9353156b6248e2c2f187559207034ec893edbb69b0062fa0e5bc15b6074d9838382e17b86233f2d72b5ce5495a714337c12d266ce0ee500940fbbfd2a37e65cbf2975325fd647cc17c94448297362ef2117651a33f7b00c2cf85c064e358d864f17e8bec165cf966bb9ea0102d59e9ee6d3d18c2c5af310f32217854a063b79fc6a0b32aa1ccffe0a9b98d206daa8b854853211a0e89a1ccf826f4e23cd6579c5731d82d05b34942bc7af65d2c3e9513198a014c28c615c046a94b5443d2bff5989a19c92885881d12395fe48e7bd89c3260d3d7821e042bff18afb321a27d2f4851a8c281021b39fba428f2e21d2782876fb114b07bc630895a718fdba9027e233070f7580cb73b18d2423d2683f8726a421bef07d22db3d587162185d8f7c0d737e030c1ee5ae5f9fb33fcaecaa86b4bb297c4c0899a154eb66cac3f3ee2a46c8970498915f6257fb3c4a3e0f023a21e54e32d96f4bdb887869aff500dda7bf7b55dde5ec4695256e4c2f28798317365ea8646c5cfe45f923954e2d14d0710f5f4a3f625e9e8ee066f3b2d5f7fbe4a5f24158017b55c5d90133656bfd5ac2273ae1c6e327a1b4d9131141dda543682672a856b4b031bea3dae2de5ac1f395490feb79325f18fbbace663f6890812c26313f0feeb67ec6ee27fa8cdd163d579691e6fe29a46d2c4199e2f97a8083321341d6c23c0d5afd9e0e565494f767b3f0194571e985a86ecf2d99c11222461aba16d90ea7fe3dc91acb44de0b10753be8d49f028979b2dea3d4c80cae2b2b437c737d1654a6ccb8a4216d7178d8dc2fd223e89251a64db03f051d208a950909ba5f2129226bcdece072687121d4ecfd924b3191c58885a35f216393657c53d792e2b00269c0e25b48b269f086b8d327518eae51a41e3759acd8b9f0e383ae8769387edb854b145b81e8d7ad338e5e29013fc54ef6631f5ca89f80d383f78205867cab94f43d49ac9c978bd45fce81606ddd5f4608de863c09af3ba7af2fe4c3b03ba3797017d452096affc5870f2ffd5683facbdaca7e5f2813abffd4f49029d8d4678d39586c1882c72e32464d78174689ab97cfa51f9714f54f23896e80486e863a8856f0f4dd97020dd8eb9ae9cd6b5ad32330d22f9750908aec5b7948c15ad83fa29d11144f51034a42a438271ebd0c1e016f1731fc3721fc954112ed8c853dceeae732d87965627f2b11950594cb97402c4792389cc98986a2a59192a0ac420004a9abbf9b68f6cf0146827c8eb5c373993a7f5e0665436670fabc23a3d032ede2d6b087b09926659cecb14ea943f0189ec29eb6db7078eab092dc32da142f40fe2437b3215f4589cb586ba872ab990aa9a97d68a1d5dd34002a520f98e5844bc38edcec22a081ce747d1400165961f294f52c43dfe5f20b8646838d23cb5c6a056d0e2ff4b510da24fcce570ce731d82ce154fef0c7fff12b811bcec0df724ffcb95a722f76004ca3de2c7afd3c7ffc5b99a3e220d9236125461748bcacb6769693dbb9498bed00085f415ca76da0f69167fcbac7db17967be4817bb1e71779c0d7ad430703783ff5505e4ad01da4c832601ce2f3109a87cdf45fd43037bae631a0db7cc8352759558512103d6ed502c5cacdad30b7890c330f3dda41f998eca58f6b176b6c2dc506c0df9aa882dbe22bdf50c15133c36f34874ca3e75a1b8e4d2225ec1524ac09de80ffc61023c7cf237a837f46679354b57f3fd0f3db0147fb09cc9452b529312226bed2eb809106a4ed6fef7f08638983ecc48b51fd4cb782b0eaa4b0a2d18f69dd7d57df24e358a128c7ce529b3db3c4697acf1e9a240c5d9c7e3f54111ba1ae167780609aa3102eeff08fbb6ecc0bc0f9858882c059c60b68f4779bf6f4acba5d1c3ebd1dcc94f7b431659d7eda34fe978778436af3d878d05086d9f46f5b284b2f97918b7d76b205789a49b947490d34b88fdf95a72593fddff629acea524e6fa93e50294bbf9b89359cc7228fbc3f2e395b0ac0e9b95203fa6344b5d8c1527862ca543e2bff4f6ade7a70b5952334360ed1b18e712300178931952b72e873aba19ae3ae4beda001fd46c825652e7f5827a394c2ce0e2c57595a762ba91ef9114010d6a4453b29e1013f368f8ccaa0729ca0fae841f2b7001008d872a8c5109c2656aaae75890272be25a6d2115eaa02b1dc658728935aaf119c074e266d333a7617e140e8d9897592444752985f5d089dac8cc2c2b6094c062da074d36650bceb5a3532d91da1769948eb6bc6e576aab49d36100258ea75bb44e17e27550bd0e0156a1e503af709e3d1cb5554212053080d5472ad48ac9546442948340ec8d085102f5299477b2170f7cc7bd019bd57fb5fde1334c2567045acbf1074bd3c436f80be6dffa91e01aabb7de2e2cdf64cb6aa5b961714e458e1f0d0178841ec3f0fc429b5157a93dee84541ea88d9a5278a585d909621683328a0d5b8360cdd0878892d2da108f9575a2ab2e680498c9b4daf8a3f48f264abe8b95acef2d5c55b66d1b52a89030676cfe2ac5b8f2076487d3a33b2329cc5905c3fd6d3e6dca277298a2e081d1c54d86e487e62bffabdbff0b66889034b3fb643e7c67fc16b3598acbd22de7517bd6d437aae405a9b581db424dd52acf42af01c808dac477a94ad7ebfdacdb67bb0e510bae06c20b097144ab3b290dcd8033c97124bf1ced0d0924aa117790018d8774a5c0fc8ff1f5b07533015a78ca22afd8b2e47f4497b85745336177316d653512e8e3f61b043461797ddad01221940862510b7d98c2fc790b4e731c9928eb8073c8ac4a7d19bc3e069ab9d16d392748a0d9463783888477199743e9431c97b7784754990bc66487962deee26dafaabc6cddb78e20d7942f89f3224e32897adb4f4eb85fa31b320d022ce294d6accab1f83d10a1d383276956bf5489646d8161263782fd0a5593d261b6db67ca13521724cae7bc0e319e1cba494cf34c23f2ed37e6c8957426efe35b154a8d778f998beb526bf32b79119eea5420015576974a1f4e9a053cbac317ee83707ee5a8ae7dceab6bd430ad73184484bb423a5f6ced816d606ad471cd78565bf7bc04e31c1884613cdac029a687927e572895565cecc67db5762261c6b6053e46ed51d448805137c2cfa8d977a7d1cabb6d532308f3eae7718137d3012b7fba3a86565dc8f4c7d7d921fe963769bfba8e8bf7d01ea680fc57914a601082a9ce85c16ef0c4b00efe527bb479237ecddf6b7229b5dd6d19cfc01c361c3249bad9716b370aacd4f4a5b78d89a0eec4c0881e39da344cc454a555a15fcfb518737c59d3a9d1e6adb70e5f970c2c42ff6e4c0cf8348aa1800bf662ef123992ffff68dd37aac63586149ab42310ab126d708051711411c3f554f9bda36fa7aaae4bbd66b3ddab6f36d4703b242de1336c08fcff66c4389afe2104055ff771247d112ee88fbfb18eadeb9be83b57bbe904bd33295b6ed850d13665e2388e059f5eb7229a315409bf4156a78ad15b89bc9339026d8c8da685644961e28bffc0fa16db36a98b97acd92d6994fae535257ef2bfeb830d5e1a16d13ac85673f02ce6af1bcd881e9a712e04bd2df4cdb969326cdd2d713d2253f9a9e1a129dd083c2db7a1bfa0ab5a6ae9f807a9da43554761de71334317125152371bda17bd7ed6b46f82bba7bb34f62050627f70f3536e88ad53646b1f5fa57a6a96b8432595aebc9d64b7c5617276ebda0433cd190d5bfbf6fb97464f87308d53229b8a1247308ef1c09d7271021f98014e46892b942b0f4027b5008f62c00826c3bb1d89ae7ab37cec7c5caa86ae7d33d9a37ce673e73d940e20c39a0b4d06394e3674efcbe10f3b1682c6592112c50bcac22efa593c814ce8766933f720dca0146a99ea6c889d48f67e295bb7cf31e98435a5b003e195556310c23e97e849bb6aa970dcc2c83a05200e56c47c986734b0e85719d201e0599728ceaaa8142af6db3d5c00fdfd506a2eebf9db6bf6842ef197e562d66ac36761717269f03b325c2836e659dd8bc6bd83d2b62f986cc1cf1254a237d0ef891364c2ca5f0907561b2a59e5b40f38273d51d865c20c9d47f9905871ba208d630ee9fdda730969494de0ab78ec4e0d4a7dc6499e66a72a8f4fbd5ab8577d8b4f105a75734d0a896e066350caacb5a3b16d077dd00ba899a1c7d1ba808410f2f9d33df21aba517f727ca9cae08f0e5c3bb56fb264b842e252e6d067b96a337da3a6760cfb27a15817564b467797adb9d4907cde595f35e36d45581a3bc5f1ead1d81f713c252b362f5e11b87d190c8b0898dd5f85fb7f19fd03ceab5e48b009dea57e98b2be860fb91d53c79500e218cc4d47c00aa659485c2fe84d1a2172eeabf0496daa0d0e2ac7740c62725da210951aaa56471a4051c438f26342cac4fcc991f885b61ff15d26ca90a02456d072dd3658ae3b4b688f849e7395c65ed477a3ef30ac37d3a0ea2491b6fede9d9487ce4a8461d7342bd4071a43fed0c0163b221175e51342428e92fba1ea233ecc4564cf90a55c018b794d37102369a82449bfa4b8a847039fb12b58dea7ea59bee4fe9ec6c7dca1edd0fd53f1de616fb73892c7a1b190920f134b27b38c06333f858fb2d8d36167d8a00bef41013e5a0495844fde12239f66ea6b24c084b7fc88041c77fef9c80562f5ad876da1b941211a72218e714275136cf58fda74b02d055c50930b975efe801c269c2212bd6c0402b34a66cde0547a3fb7e5ab17a336d179d66956a4a5c606f769936faf8a22f7677dd8cedb798deb465c9a95d6a408f12bda2655f7b63496fe08f18c3cdb18bd9963e3006f6abac9ec079d3f6779723202ff5095372cbb449351719c1aeab1c61d56b5dd1229fa13ae3869e1c38af19f049608cee7da4f9ca1f17a33abe2711ebc639c8ec3a67b054be4c84550de237d4efa7478d7159b47f0b31f7a010a255227b292feb58b2b5931d9bb3d2b210a9fb15fa9156f4adc8841f90069fb3e862e4ce186cfe2fe4ddefa500b2e76a7ac73b66bf88795b719d1cc9a9576b95ab617348ac1ec4cae0ae96c35c179bd939a25eef68ca7c110a000bae674909f3ab0c1d9a02cb6bdd212935b78bbb2e15a975317590cf9db2b94424e836e1e35c919aad3c7ebd9e25b30fcb20ecc4acea75a7e7b73fc385b438f4f0ec3a5ec0ce67b7f4fa412c985715ca183c59ffcbc9aeac43d827e197543ec08a4e625aa465d1038258872f4e7d9c4892e86a52ede34cc6e1d4535581872fba0981b56a77ad70b9330bc7ee918e3e5fb3ab5e1c81579ad4ac3361895ad5874d629664ab32bd3b1c4fcebad9ffe2f1f0a2fe951c185fa8996437c3c499f5354428d97a712405fbae9bfd0a2991094d380e31b71d32d504290d16b3e5fba896fa03def78e5b2918645e33b6e22904a806d50333c69b160588436baf4e78929dc92583997dd6b0bab9e6376c869e66ceee3259519ee64ad9a8a2158afa1e7a79a8bc0bf289053ee9ac3808b9a2287cf0b9858cde196f7ad0eecc7879e47b07359a0c0e8a3684f5b947f488ba252bee84761fed934e4591e786735d7f20c5b76cfafe02871d3261354ae9e9a33ed2b85f3ef2c12bd6a57829596dd6b1a7e427d5dfaa498a47a3356e946aeeb642bab1832e10813e97132afcf797abeaa5857421bad16a6f400a9655d6071976ca48c090ae961fccc67e9ef9c374a94b8fb2db15abdd229317c3fdf3ca310a1f581646d49e0c8b2c4697d8edf27f27fdba4e7d51dc51ee54c3faa432bc04d96058d2e24267a354160672f8994740498bc7a4c953d6c49a5aa35f683a0e03156c43c3f0ec6e794afe9f5500d876d1409026feadd4c5a9b4c40f8cedb5fe8fccd65f47943c4b0b7d707085e6a5032f4f4fd7d9448ce6f927627c0a2411e305522562a4cca93ade7e2fc1f27bff1ac2f22c8eee7db840a4f7b4c5efd4867c1fbb3199c9e66d1c13f57d56a10cbbb66d27964cc1f4cf1a6f219ae9ff8bab75018ade70bfb572393b2063c1bc8d67a7b5a1fc6ac4866d91e632ad220fa35f7f24159ed4342f19ab323ce93436e1103c0a9909058f7470b44998270e3e0cdb136a64e76fc72b42c41c457fc5309b5951a90fb428d64427972012ab47d3ba43660271e9ea746a2a62e847a7c18b965230fcca223a564d3255fc537e10cc9f0ac5bd8a7de1385e525cbc8c1e2ec91707c99428fb2b7aed3475801949fac859f3a67c41df8b8e384def0b188ac2818d5a832bb19bbc771d3dc3b21876e9f236ead353a33aa044e54492f1108d8e5ec40f16263de8823a78dc48db9afd4a32463e27a8e95235522e010004dc261af15b642f64a24a0f415c2fc94912f86a0d56056deb96090945e33d3a4cb279a9a48e6be55d27c8264f66c0a4982821e2fca5b5d6413ddeb595a0ea2430ee478028430f85696d643115e47e142c1275ff86381413bfe3da5d47591b0816db6a0098384ba0ae599e0b1267c1c31474eb0d1f257a46835039ef39e07804be1cb8cd62652d720fed06bf5057a8e0da7013f8d28183af27239e5d45b79f087dac19d43973322c6cecafdc1dc2b4ee9e094542da2e88ed008d89758d2a5c02987d72467de438caea7600232d2d87abad4cc339ca2188326182a050ad8cd9ff1c9d36af27409760c9cb20f13869d61104ce56a3731d807cf82c1e79c8972f3e666789e8f0e1e41d4f7f0a20a6389820d399ebe126261c3cf82de1283dc42fe50009e23885dbeb71534b15dd903a89e85a1ec9d5a98a96f0822d77e1988f85103a1d1154a325ff816881ac0166ce504537a0970f0fd53bf3e465b8fa5f0e3db391cd696142c204098a11a71f56b59de13b398715c462477cef4ca8ee2412b5a72566cb29bed0d3a72b3fd96a8ba6f11c9b5b12ae88444da7b49752b0b16878f464a865c5aa3c51a650269730898886e7fbf781eb23fe283ff4b145dc950781b673890f67e668500d57f0fef85711e41e3ddbb8e72f0734b1d8256379a5253748f0a9a61e5c0d1ace3d8105365e3d9d6d75fa452c98e5c2a618955e4c1fc2fd4e1ac10f3e4eb12455c9f07e531255cb8a144a1087d47eee88b473b906a088fe9efbf19f8e4895ddca53871761c029ba1584ebdeecf614aae43ad684c83cd194b37817daf8012eb8dc7d220b0c2d34b78662e8f9073eee851466b3e4cbf2b1e07dec3f6ec8f57a16bbec5d75fb6eebf076eb50cb33170ec4bb029a8217f14cbee0483f9003a0330b046b9580c7b03383b2a30894ca49246dcd3d34790e6a30367e7e0984bf446ec854f0c21c1017e91d59dd4c8d0eb8a4b6bd8528764a1cbb67147cd240da26d0bde31dbcbfa411531e8700c65e15063358762f4940e1ee3253dd53962977a770bee48546e26be27c670fc27d19181de4f33acfff081135e29c9dd6d805302b642a8f0ceff4bd9b5434571e4d29b532f237b8948706f95af87c99d39a6a57a22b0fdbf1f19659c0000dd5741bb9e38dff25b0e850fc86ccd31ca8e606ef631edb966286a6c5f962a938d40a5681a85907356976073597ee74cce57c62d54fea0df8d6ad90def06a60b15cbe8f709479f72541a0df6eddc1b877c359da5aa7c1d715fa4f50688d83eb6c7dceafac4061ba2393f6045482555451dfca2d23d8ece120c125219f50d96d535bb47a0b2a41339089866b94cd168f0d5bb403c5365b0d09318ed10a156b8a8ab49cff6ff69fedb4c698886dd51a0f2b4cabba7cd01efc971164b9093e408f4b9262bc74d5be95dd34791d9b118ca11be7790de4766eff8d992f1958332508cf26ef70cd2da9a061a6635e3fe67c9a6e1fd3d8c9149547df7c6a683d8693fb9032c4c7cac1f571b65685586869f8d101fe909d849352c91d6d3767513b20d58f57008255cf24c78cdaddb07176613ebc82b1810190a3d16576c74adbfb4f23578a99fc30da3520b8f7ba58004eb03bf4896487e52cabae466249e2c75d9305aefe4b16540a5e912e1377bd17dd2184ff4202ade7029f6ba52bd93c684872182246c8ca711dd4880b5236475ace94f5a51297de8ab64dfb200bf302bcbb0e64d1e8db16732c2792b92ecdf82466124a7d8f9873521a2ed4aacb905edf0584863ced96b186bbac9c4794470f3f8a6fa6b187c555286d4157697df4897ca98a7929c7bee238467dedf0b15ea1db1a428aa3cbd8d49f58196a132c08d491a1b58aeeff37e91e8dfa9e7e28946abc0c8ffe703ed4678e69aef9c326334b52da8adfbd1438ab155cc93f74aeab4bbf2dfba0f21c1f7d779b12cfa8e18ff324b3cbff204e1807c65cf20dbe2a199bf3a83950130c9ab4fa97768b9b138b56d968d59219cae856d9d6fd0725805be442c2b30e75b9892c69ccdffe28ce31d56eeedfadf03e217f777ce3b2131c0bfffbf29d80fce97192b3bad67b39c29e3eb1fdd618207cb420c8773debde4be0afd0456cdb368f8c9e9954723be401c63289efd2987b16412a394799bc00c6eb699d4a826d2affef5f41dc83009ddf6102fdb901447d1f57e91b893c9df552fe344e6cf7a971c8ee4613e3efe3e1e77356857d91265b9c771419eac11d543b24904bf5b1c81d84dcf03b28501126410d2221627424c03ddca3949182b23ee7e4c3ee369b0788c8debd22c5b4f4bd5db77b72b5c0e50c23724d4da0dc6f19a205c700fa5596fbf75c3c669f0554d19bfb015ffd820d273ae8185413689a4b72861e48970dad41dbe3dc2bd7d07649162acc36b42a79aff03dccffc22ad169447f84f3bf7d1c9f0e207a74bd83228343b11d21fc0f96879fa8132be0f39d5861213b162c5fefaa366092015e45fe60f24fd00a51addaa4f7edc976fc39f69e2d71a3f63a15dab2588922aa06fd021580cc68e5e27d2301603b775be9f47bdfaa5bb8cd82be2768a1c54460838b87ed684ca3681b919d68630f11bae28ef9f545fa8137f4f7c432580402d3fc906e8323b89b1b94393a63bb292d72502019cdaf638626c6c2809c6a22415750a4b8400c42bfdeb81207bb4b0ccf9f9030c128e71b6863322d79f6920fc9f2405e5790801a53d6e0494360f250d7c0008a838852fc0677dfb5a942aee4519731b04ccf603bb78dcff38427ec418e8e1205120f9960e7dca0abd9838e8a0c891d59764ae6b6836c3e43a27780c14133dc9ea4375178ef27bc0d6322a8684f33396a3cb15d498884ea1554f749a9a517e55351cfd0633faaf17d4d997e7ba5bb768a14f9d85401cc6596227004d07ced4995b126f0f84b7394bb102e62577c5d73a7bde8b28cbc19cb9d86835c12ed58fbdde26589aab404f1368a40f245531d39f46982ba81c56fd68dd47b826f5cf5662a02af91fa7be62b98170914b1233fde1c4614928980033e76dcca66a5518e22848102de05d86f93e0705ff1a64aa6c5afbf8c96c998840d3e34c7ba189719a08a65478c4a476c326e684950bb8965d5572f7f36765bed00fea89f96572f9428d314a0d0eefc6205173961760a1c31b0710e1886a2fdf564004c0121a6b09541601271642a8817729bd0de5978c75078df4ee12c8e960b88a3e2ca2d8e20b8f305e5c84924c97b1b83c705445a2279cea8d64da72c34cab90682cac59ccb4477f86f84c0efc20fd289bdd7974a93ff98d3198a0651f8bcd4f2c3bb5c307b529e2e5fe119a055f762da970c6cddf1c1b544418821aa332487e3c6da58d6bd73bd36384af4b3212c6fbb6310c02994b3cdfe93d77ac505d1f7b3f729a2fe0e31b24779dfa89564172c77a03514f84db1a7028e96721dccb155192baf8f35a25ff6e80cc372e50674aa6d5ffb57c657ca13117043a54ab90bc378ac478cd53828d88ca5eb37357e7af47dd5d44476917098dc8524575e482acf0ad17af3462297ab8d18337957e0bf11a1a59922610e60eb3fb18787201abdc1da13cd217ca6786d37eaf2c878049014a60f386cf8e67eebcf7fff016f9b866021ee01881c8d6702dc6242ca1b54481d98935077c103416f91c66b677d5a406e42407c5792f4f8e80c9e013921d316826e35ac7d07517b853c347f5c0da976a6849ab9a51d1e1b2270bca3c0a435022a3c87fb2670a641397404a3bcf0697a1a54a58c8190a056bd87137ad2b31c558b2d53d5cd4cdff46ffeec8a9c9b12b55ec42ff1e1926a64494bfea3a4f902855cd9b4b61e1f5a91644c5c53a3c0f3d939adb318f8312c92ad3957984556dbdf713c2621e0b116457572a0c42dd3f48eb23a3016ed073343072479a6a264b269b0ce9b7e87a2038ab1ea547c60a48265731015671de8f363d7e57e6add86bf44a333153d5bcef9ee59195f632a0b11a88a83528368fed473a025a5ad60c88604e07d26c03924ed9d17a49a613d8f24c86b2980e40e206f7261e7786958e1a8b6667cb04eff40f4f6ea3c9fdbc9aade2a56a5621fc0bafa0071302052291bfb08299eb64afb9859455cb6beca2570c05f384f8cd343fbfc162196735e9947bc97390585384e768b330b1693071b1adffeb3e49cbc04c6d1426104b76a0f941548018fa3c73c745e2e57b454565d630ee0decbd5aa8e87874c78dbac25aed57e7062b2df517add16cf6dc557cc0e8e64f56bf2b30ce7666e3781f5f9aa10a43ef022f71ab703ee8496a6235e75ff39467a9c678e133f3ab2d68ec96d5acf5d17f2b1c81dc6000df254bde981a251bf40d7b6cf7a54d859ec54d18a9db6a93ef2a252839206d93a11f8aa34891c11d82ef92d5f5fd0357d485d7402732eca031512b5e763852cc82557730357f36101ef1e24fb0f2e03d0e7514d4c873ddf6cbd9e4d8fe6c16c51704bbba3121d04fced56fba2c5c38e36dbc1a4854ccfb554629feb684f5cdb7c2a3cd48f4982606fb89a2771ae03de7222eacc511132afbcb29a36812b3b91e939be48d020fd1b6fefb7c32cf0deb0cbb780577e96b9a8f2242ce83a1d126d656563d6a35242fce80ab35af43d7adeacee05dbff3f2f6ee8556da219bb1ace0ab263704e640a71b38154902b25bf5a90ed188c2ace888080a67224eece22a78d7ecbd902e1c99d546a580dbcd4341927608091d9952f516fffe1af11898781c0e4709eee05417910224b972fe5d52fe854732de9a053d207dc7ce00354d9222c8ef594463c929c195e9caa66d7648d389fe110fff8a1afd48e00769f584dcd76495b6c26a011084f761cb7e2b6d59354b5f8a3d4af04dae6b8c93efd72488807e5270acc9d2a1da3fbbe79548d7d85034537480ba452f417e0b20e321e01e032d925c400b6cf401020b351617fbce40c0c9c4d329ece927201e4035f51ab80615ed8bd0f50148622badcd87634a32386d4f56370ce1fb09be2466ab8e109a664e70eb476ae357bffd74836eec19b234b164cad0119d3f8f6d3b01968e624c97db3a57a4a56c1a0f68ade74390178105b23952dfec9a555d8207307fe1170fa5b5f4af770f6da716a1c4d87b9da6e81532fed29774398ec352ac61194e3d348d2c0d4bc92141347891f83f8701679ffe69c8ee135b2d69a388a2a54a76c8a8d7e995cad3323bd95e0c5cdff40f0e16937168fb7a93f37429b0025682040cd6534b737079fb9b6e04be49058118cc6918920ceb8925dfef0d44607e2368ab6d504e72f820bf568da24a3a3460e2fcd17ff56d07b247e6a90fd80c42a0deaf5c1df02fea14a97322580fb45a6a4dbe5863f0193f4b871ed0248f16d0e81ee3c5237c45feed8927c93825bbfe010173a285c6205d4bb0c7016c229bf297c28ff5a3c8b0ace8c2c4f669062f5da6ca2abfe520c719d14cd967057714fc94a110d95a527511caa39e3d7c22e79be238fb39706c64a6b72b75b0408fbe1ceff54da250ada081d752559e0a6a57500a59576919ecfef265bbf851a11dd541d1fe51a125465aa89436e862c15c5c1b01f096b8967609fc0c719689ed3dc94115e2e937d4aa313183ee0a4223aa6e22ae00cc4a5637fcd94455f770ff9c5da386d2e3ab8351d29d00c5f2b823ca76aed18ed950e3e9a388ee3ced4ed07b74dfaa4cdc074bac9924926228a439ccdc3e00460a7bd2d3c0aa76100523d15716cb75ff606c017c82ab363d4beb3a54b20e7c242204385a55fed22fca4ea25c1b31a07d045827041425e8c55f9e5aa4328678e83b8ed94e1c5493f57b5046e77973a90d8ab4065a3ec80928c427aa946bbedbd4f1614d41b5054a1b1ed65cbccad3a07659f2c14bc222a59a36c914a9fa9427e189e6190c21d87551d869393ec240a625d0e319d2c2412868a05b3caf8e6eaff5f5d7e83bb680534e533c200208cb437e9017813547cd91862919cffe8a7d99683ab185fa55ebc7aa55570cad208d53696077a911dfca704b4584bb20bba938c091345d317525e3892f27dbd7d9e3a854dbb8c58d21455167097204dd02bc21b0e2625df448b13f01fb5d56e872a3a33c6b009ab14962131beba33fb4cd17ea67a0c27a46bc2fed3393aba9a67e8a3c3449978c6a4be28021cb215ca1ae37d07746541aa8d5fe70ded3f315232f50c171d38bc428939c739213b4d734862cec10250c0cdc4b7d24a0516b827c6ce15c11f2e77dfcc05e67be6850ccda0d77c00997599f6442460dc7d09d5a6faf93adc447598c30430d601c852e796c0439984e292390c12f503639793b4c20141ebc8ba8059f883afd0efb51abeceb0003afd5def1d1053592c21fe7458461bc643056122e69d20bc21237cba169c7fea1a5cf3cd2774c0643a8c5c4ea0e45721271ae1a7e9f717cb676cae7d3a187780042f2a30e4bcd044f7e747eb53214b8837b53eff9867534eb28545f769d3995f2507f1fb14970686fec6f9d3d3b3766291e1bde7597ff8fe0c409d5072909c3673d86b9a54e803793ed88cef01276e2e10a4af79c162af86f528d580cdcb9cf8c611da4b1400248361f6726e4ed9b574eb423ec38a628ff438b71af0dec34611b999270231beb9a39930611a2d759540385a16402944a08e229bb8621a9b38820ec96df6e29ac5a3283db44af37a061029b0fd364a97d79224e7a3090955268a566e9d9cb649283ac0103233ad1a4ae0449006544e2e251f5c352d0e48e508c94c55708976bac1ca3d8bfd357b13f03ffd235c8771b8cb8a86d0d32558d9e04e90ce2c0515de552329798e1c5eb72519440e098871608ef4436b5b589322c790d021ee2cf35e1b7f4f2e66ce3bf597b244ad83d8cd2b46c9db0a22daa00e4192b0ecd74f9ee9fe93787db088948ffa01c3199351bb178a82447ec5b466ccb8807fbe5b5692c94208715be9289438f2cf428366e645ab8a3b1892b4296ea2982d441ddd94304068acec46d2d4fdd0ffe38be08e1a795336507b4dcfa41be990b21126651861a651e9738182408140a36ef1cdb281904417e1a066518e564bb7aa3c37f7c948b81defa8d8a42e89068d18c6fd8fe2b02c0abd895bc0a5361b5fbd501ea022d34e72024ac70ecd61c6359a456daa5a93eb6aa09ae3991054173487a5f19bc40c4844976a493cce751334c4f9c5868ac08eabea11af529de72873f8958cbc5954a0795f7f4b38c0057df5be763a3206aaa5977c1fa8a0169c738f5508b6dd258b60d0d581027e5f87bea2479da7408fbd4b68e9d45093ed5f4b70d2c721910f428e65779d403d75cc1486d50d84143557fb6420c8fda2712244b3ed28839d9cb8750e20b81a2f5984a37ea5045db9bd5b0f4232c2cccad4d62b1433f05844a2595dc7842c0032ccc32d748e9b32189270fae4938cfd8a2a58ecf5a6c8c7554bc2d73557d21ea91a4e18d81f5e3def3b7f360057a60bd7933cedacd6d53380a5e73c33ba45a5d25ce62fa8936fb067524a5cc64d0b13d143fef0f78bfe7f6634083c0c1fe6d2d0aedb33f9834a51a1bff76987254c949fe27cb9897193237fb6c273f62e190ea55e3c9122344534f076f8691f45db9f3e69d37e01d15f33a2119538818eef9503a47b049a276aac81df21c259e5d9309daa40efbb3ecfd26b3323564d1acbeaf047d705b0368dcba66b1bffd2ae4a9f6cba4e1995055e874b36f14a9c2170b2ef3b1a7012c8b7c6d629d89a2a41fb85966b940aeabf319b702e8e19935195fd941ffb283fe141f339f9b0047268dc3881eed72457076de533f3b94edd2059413489ba7f59d9a6a318d473c5c34db63f7d24c3b85500917d32d3430a7c6129cdebe94f29649cc08fae9b1d70b4737cc4a645f19f96da5544641adcc3e188ba9fb8a0cc0b5a6a42ba541f72b775d1847dee0b8aeddad1c2359e5262b322d7684a41963cc6156a82cdae6e631e3d3f848493248cc6817f3389fcd96d26c355d087b4c33c378ebfea49bbd66b66576b500651b149d6435bd0f217f5ade8dbf85746992955cc2a817bb52f08abda0907230a6b3a2832ab3e657b2c0d7caed719411b696ca5004dd1aa68646b67f4e98ce6d6da1237125c2f9f0df90a42842921300dca2899034a7749320e1bd006935e43ec82bfcf5657122b839f49911e08b14c372e214e5e8d6eb60e9e8e3d73ebc327ef8a8b0b7baddc183202cba60065c0f7da6d6d207fcc21cf56114737c41dbaa5d9b1a725c4911dd072d499944ae2225be36008b2a92e605d645602d9d5799bd684ca24d142f43c0d4bf806f02a588ee77abdd65aa727dae03fce3645c601b3f97dd4a76f5469d580c8cf189d06e51c1ed73b81e77ff88396ad7ebb8d6112d936f2453fc2cf0b930c8509e74bbef86c222da7a26d8a6ec1af7877b22e0b15f86207e6baafd7427e4749dc88057bd3af6907960de7694c46ea5c6a94dde356bd045a8773e33c3c7f13637481cfe64b7c3a3ae32bf7fb4a4c19e13daee142ecac7389b155f3f678d7b5740331c3166b09eeb1892dda98b1bf55c071ffbb5131d9b3f27e795eec4033b479773dcb4fd9304093e06711fb5609ea378802ca73a0375d6044ebdd3b51c56e93df11bca61e4332ccc5b75155bc0428f47a5b0e0dfb8c1b1e8c4ea1b469c1eb5c34681d51ba0e81cefd8aa3f89519167dd8dd4ba7cb4c01ad9ca98a8ac21589c22339cf92e8a4d8f09ac0b0e7be51255298c5884eafffc14f1451d92bc6cbe00340e6df54c7d04140028224ceeaf6a10c485d96a9178f19a8d28c1903d879a65de1beb5f7a94405d2214c733db672e1a6c952db3727c90cd3b7f40ac375d708b1c628fa8117627976934537cdc0d609896b2d08f7050d8be64875c2e5aa0e1b79513c94d7cc9ab132a098d785155d32b3a60de1f94c8bee0d077665aae438416103e15b27826533d57855bf9249f9ad263161753ac6f5715081936b59c422c3b26a8916fc0f2d3b1ca3e3e26150e80ca3b7fb5320b1e01cc634c95ade6a34b4bc7a53f0aa82d358398c387af3cabe1123876c6bb5385b3e8afe759d2f60e5a3e6c348b3355030a329605905a748c3392ae5aff69eb508afa7311be59ebca1d753300590b29593eba3d753115743ef5f23a039d55384db5a1cff9b047e2959a6163036cc940cb19d9154fc32f58167bef7558914c7a87827f948d2d482bc690e42e231d9328c0ae93365429ab2012e4a064f534a3017c7389bb680688a84617444c4b8129101bb3005972e0fd7bd71b0d578c1c778909a826f21b9447974b2fb6b09efb5528791c74b5445be71921ac8c122748f43b0fc7ce22cfc3a35fa8240b5ca8caec5cdf1c5b5e8cb274639fb45a77c81d186d2d7f18bc2056a3a10e0865f936b5d5bbb701dffe085f354984f4926f188c11cedafa42654a130369f4eb9dee7b12b0871c81128712a005904c26e417abe79d84699b6fb96ead92cae69987e09ae727db6e5d8e18a55c7ee04b42a257374cb0c2a856d50d63d11b260e66e4205b3e6b3b944b381434aaa2d249b6fe1ab4c6da46878bd3eef489236d775ba66ea2ca7a36052124bf88660ef032822310f162287f1393731f59ee142eaca69eaad3562c590f61acbf4cc50750e70227c84a4df1746dd9b131ea0729940451a0aa28426ae8835935a066ec03ee18209f7cf948e4bc653d3cebc9302cad4222ca386d415cded90dd81b3bc1e02ae1990aa71e3713e6b9c7eee5dea20efc7b475991e8f3bee0524ef750137073b96eaaf5f7c9a2d036bb38209165ec2019c4cbc28b8075dc9fb0ee931e8fa1ee75209ad21abae3fc1199a03c3cb3368642e2e61d1639b07ef691939121ea4ca964feb5cc009954aa86880d1149b3b64f95d9e897ad11cec340fc55524c29384e03109c111cdb24c351b7cbb0d79a65aaa5920747daebc4e4e55e9919cbb122d339e9e9dffaf4c4d4963ec2a55cdbea9e7844700461197c0cd992a2429bdc75fff753a7f6c7d6348e95c974dddf37fbc62cdf8647d20bed917b8beef276e3ad4595dce619ab86f97e76fbf3c3793171e93785c908579b8e9d165ee13d111e589df1bc1bb4ae1bcc2fe4b4ebdd77302dcd9bc809311c3cda8363dce0800c4066120d41216423d6120d40813428d3005f326c60b7f7848b13e37dc68825e55a7e2790ad3366108c18bac77b8f286d3bfeb179733a154e17f8fbe4b110562e3faefe6951f1d33f43d67e90888c6333077ea074fcf3ff829ccf73e6f49dd7a998c4883778acb618535449b243081f4027e09be942e0d676ffa25e7cfb735e3375f6965a3aa34f987365ebdbbcdbb1da07275b54a5d81ea07f1cf914482d069c80d7e0e8b612cb8a58494f26e0153c998e6425cc77654ff89451b1095af33267b6a4205887521238ff801e47bd10f40fa341dae2ce65430548187139ddb3bc818d708a38a402fee002273552e34ea55704ea1c3f3d6e1d64af0a2845c9915dd8eab9ad7e8c79884925700d1d3abd90e836c93f7245d593a3d81a8d8818da1ecd930ae2ed9965cba817a7165b53ace1450f5ff5fdd1b97f4630634e15573e821ec348a7209658a9dc0cdd340ee08ebe057a8e1b556e0669aa8d0048d3fc3700c14b1b1f040c5b074a05364eec7ff1bbb4a16c3a401708946f4bb5b01f619dc0c31b3a5110e361d4c421c68b6f70cc80ecfc6535c6c5082acacae89b06c76ffb8804a01897a84f72122300105389c6061de08fc754250568102babbbc003c0be0b45641d6020cae88122b204cd74c2e8c8da58d4f05031070cdcb76d31d26135bbd13bd496892627260e15ede4945d93035f09350eef0930bf30eeacd6b1436b1d4a708884016263d1c545a4f18674c74e2d9ec4b478d841a1fcbecf484245c8debe6243b53556c847c3fba007a761607e788f78d9729f14fa331f73e737f05ab63a1b2292b973f6c32c2c82a65abd51f374706e027bac023659ef69c9ea700bdc3388906dbae60170f8fcbe2b15016fb6e5c40b3b45d711a036ba5884b28903d1a77d6201e47e6feb805855aedbf4245601311d1b3ecd2ba4c86831a3dd3109b11e2e2400389638169ffc38765a5d44e4ecd8dc8e39bd914ea1f8ecc8cf14f1913e403ab1f5ae7aff912f84663fb3fa7ca984712fa778600dd64283686f56efabed3e51d7bf9c6c54b98e556fd6f9a1aa30b97c2886bb9c88a8045fd198b13c017d88aa973282d7e23872454849f5f43675b8541cb533cbac0a7f195a27980727f1ebb7a05eff2572d23b2837faee0ff960b12cfc99532fbe5910b7ef2977165a5e705d09b99ba9f40ad73bc5107bcbe88170029042e849a132d917bb140b10322219d53c413cf720d8dcb43a391ca72dbb2be90964c68eb4f3cd79b4a7e11492e09e724f607dfa337f3f9d67684d7ca52ed4520f29e6b7af8576e85b2bb4646d43cdd21cd92a9334551de5c7eaaea565a86570e13a1f5388c6878879f0d285840e41248c81f317ca2b797a0858e579163c4ddc48542c78c76293d4ef080b125f4b67e4149975364bde20503e947ca101a16151981a6fd5fb06b85ccf0361faca9af42858d6599fb79d3dc014b30dd95430a0aeafa3ebc4451561d91e08c03047c5f429fc286ae218d69da791d57884fedb803402714fefa843f93b8247befe20017c6a81d183919cdd9108587d4a9b2a55c4b7102eaafa0cb2d919991e2732965984b2ac10e53008d5eae0d07f5fc00d39f928e3b92c91f1c6b5e75436b814419a1d69371c65a13c80e1739ca1027a60082ed3512b0c87bea2e6444f845de0805fb04eed3978753246f33c186704a2d86aee42e6427680821461b705435ee04b46ec18f8f1ae6ca3813fc2151e069af067d23c0f6466ea46798389b5ff4042d4b7ecab24b72c724a5824022ac7c022698ff17fa8935471a976dd0f1a7860ce13a809492d047904d77409c991381cd765ce165f3ce90fe6f20613b4c67a4322a348180e57047b432667e63e40366a0153d64ae0d8106fd27b2497ab71dd67d316abf5bac95744db3ecc77ff75e214e5cb624ee8f887ece1c93a351b213f7a4a3070c9ba0235219eb8f23871a19322c7bd95199198025610257a0b61d16066c873c5ffb3bca0a74810c0601d0088d8a588341ceb73c441cd4aceffd93b2b91598ff2de2893c4ec2129e056ce03f27d679e283fa45b51caecf51b3942431bc630779abdb1e222322135235575f830216b1230f46266cc30e25196b54da78981e9ea071d66891628a2822a736349a4f393a7d8d18ea92b81c8f729658d70b37f537d79c275667844380da64ddb3ce64517528e1031ca5c6ec8d5da5dc046fadcacc0130ff5cd83f6dadc07a938b8645a7ea3c1c39b8301742917a5822bd58b5f17fa561b898b68effde8e484fc7992a02e97c74d2fa4be7d16488f69c451fc8e0ac6f251a80cf4fc968e5fd458e53dd8ef5ffda62f589aa9add1139475efd334d1ff8029cf693e6ef2a8291a31ee472a86dd5cdb8cadb6c0d7a2182a15dfa9c3898efcc283fc3d444717507d8780401dcef0f35950e00ad02b124a10a655f93750a95a927b3a054aa3823016a54bc3ec216112ca393e56312c99c935364153c2882503eb0a04df0360ebe0e9e08f34f821a4d640e82999d5c6d635e825a00cc1e593e1d4b4704897795847ad32fbece99a3a0f983c66b355922bd94772a6f60d16383f6e42d8d988551acd34d0e4bd8e50443a917964b038ed9e96c2e1c4d7c394d473e497f44a63cbf8e732b3711b4fb6ca233eb9d2a534cd13ff3304e572314e3062fd527470c18f9671d66ba5e7638428afb53b91ef7f540264ba99070cc7d56a84f149978e7d485a886232b807a9f63faceaa807183a60715dcb07a20006a0fe54dcc903ec1925646b29e51e737cbab85dca7806c61e85e90390e7774979352498b804793b05ac69991b8da620d6928271fd48e7cbd9fda148e3bc931f601c41d2b22ce646e2e660e4097a7a06eb52f3d7e01b647ba78d47790ca2436599c3bbf9431ec981d96e44ac21361ed1da3a225b724e878c640492621fec3f0a62ea7ea20b87dda3d9eb848aee2b18c33dd3c8ef1a416ae047118c764e22cbf5803c365128134c4fe9b81efbe4cc938081a0fa2d2888584cd2f947fa00363d8ee20de9b58c1b144c3b2ca5dda65a0708a4a0de55ebdbaff24e28565244d174d0a2ed5bb1f65aea7e16a4a0e3bb5890d9d9d698f79138c0822fb6ac3ad0dd0dfca66842a94e12a3057d008e80d0f6d742c6b8e33ff0e154b0cbc076eb86e7f783ad548d6d4db5ea775bcc09179da701473435e2c36521cdae4d8b37c3428f2ce8873cd452dd51c76ea0f37514b9bc5591ee0bd1a99b130a07352270fee23e6852e2192fdc231688512922f15b5c81909cfc28994a214c2176055fbc634e7c0e1c5228664ebd7d5ae5de435763d3d04d760ff0015edd499ecd49937cd63035d5dfb16566d2ce799cba3fd84ca579c36ccef033bcf8c979d575c36d9c2afe269f9b2ba4fadde73f99894f3c9b86380e6d08130cd006b9988de5a31da9de768d551cfbb9b64d5e2762633894c6e029231202da13ef5f21ceb19428688391ad64db64575cfff5267b64e63987c0eabbeef59fae58bb6784c73bdcc2e11e3bc22db820cafaf3677a7ade75b1f93ebe53769ac74c94329709eaf32c80e7ac2ddef9e71e516146f49ee01ed0477c3e491772d3264db0853052aa33983cfcada92c8902fdec115a3a3ea8bc15d90bdf696d7e8ea6bf3e21762d732da34fcc0ef1e70de562464bd2783ac6e3b9952634b251f41c0380e26cc1ce094afad4905e00e9ca8f9090c65c997bf7fd410f53d0e2faa96d76b579bb7c43961d699f18060b95d3de55ae9c82599c44a48ac663a1b505fa9ff6963f7f6bb9d654fd9c4a1c49400ff4422c896552e499db4da5416401bd7d20e92b6888ccdd56fe526045c7b059df760af31d5b0ec2a1661d87be301deab455a9a85553345d02871d3c2a7b75881822ad0dcbc9550514569456a7cc17dd36e72ff4cd098a0a3cefc340279f2c0157f25e34be0f0cb529ae190a40fe5f68bd48c630ec42fce98f5c502ed77e3ac7988977c9d4c29d3ffd69e0e17be93725d5ad709c19567f1d10cbb1d1b0b9be73a21c8f4e03e3cd455b6e2106371c46642676c262f2cf1cf4650c6dc91b2a07fc333ac516f0fd1fae38bab18079e4d335d46d185e70bc5afa9d4b15298f5821ed1b17e34f57355b1764aa728c7087c15256d15b0f3e599eb4287c6725b6fad69c1ec3f8ad2c1cd608957f867afd071b47550a4d2b49a09a82ff23190a3403e1edcdf619feb1d1159d32e352346b19652528e06ee97990d61785588c1e3db369b402b0c470198b9e485df1213922eb112df37932aecf35ecf301c7dbf90552c05e246e024e06d15f2dde685e59803462c55db0123fba73e2c43150d45d2fe5555de9a8f5dc50af6d1397457b16ebcf42850998705eea277aaf5ff785618050c74fe44999e095bea3b20dc0305dce3318c21494d4da4fc0ed46edb88b6debc76d5bd631041c21324d8eca42f8c76bb9dc5d62e880fb1832c780772d501a73466b152ddfbdf7e38ba4ddcefd362ed49cdb469b6ed0bea60560469f2bca7074de64ec4c83a680d41b73db6f11a8b0fb45abc0508c7803834ddfcada9d03d55560ddd00a71747818374febe4b5a788d22fac329cf4659e0718d153b202d6c18c4f57bdd54295ff3809e7c0edfc75ea3230ebdc7489bd01656b37f6af99945a138b1ecc310a2ff65e23453e2f63bc15775ddc6b2e3a6a3ecfdacf903440fce130ae2a546dc265d9c283df8aefc6d7e6ec555b964e6da57b400c61c7dfceec9b6789238bee75af95d04752b24d015eb65c4f7a9ab4391060b733965e54cf0c8cc39181763b8314761396a164f8fb7aa371efb6a3f018c34699de3af70a8b306afc9396ca903b9a549b9e2a55c83982caca9639468946699c5680c364c8e15430107a0c939631dea6a8e1bd247508da6be5552520e20c1d156618267bf3873a60baa9bf6e6e81078f2a4a01442607fa0036e17202d2467db27c2e854ecf327135e5537baef9058d98ab987a622806db27697b8e84b176d8b10a84f4e150c828df2eb9f9e967b088930c1333ae058c65487090ffd1672334103c2cbb5b9798e32b9cb4c0b187645ed73d20c21e7bff42f4dce2107f51fc25ec904e0e0bb3f1f4b8e26205b42c6a08e831d31faa1f61f9ba5bdc56effa11be6b5993fc25b79f61fe19ce80712269343855dd1130a37c7ec911558d87feca9844ac253e2cd40d265668e2c19731b3be092c184dd36f06fd2331d41659da1341d47b9d965141d1ebfbc8102a4983d465ce8e128fcbb1154c53890adb0163b480efbead8aca2a75792c6890392806ab210328c3e8e1e9bb39e7c22cd91d6914a874077b979d9a766c2e7f0dc4799e2c8b5f893d035b65b9368305994e69bc3b13b572417ae868f7884386a069e66b270f6c498c559ae5602c8640cf2957c61dad605dd5812375bf76450eb2bc941ac44d0ee28d0938a6988411b9d39d88c28adcb0cbef7e2f50215c357c4ca9e36795dd3f05c1e9eddc7b60c187d422b45e6faa0cc0808df88d36980d4dd6f4422ebaf7333e96dd3d989e6b441d159fabc000f6c9e5ff5a2a4215f4c7947ac2f8ae53368c296c1b3d5c55367cd4a84ed106559f59d144aa79a83a31e605b5ccdf9ae33d219b49281dbe2d03bc757e2ece9ea40b90ac65d67e59d6bec0e884b7902673689f428674b597b5179db61300e24000eddedfd8f3f5ed141fe61122945c44a5766c3b0f83949d052afa8e45a453301f2db5a875323e592cf2d86039db9180298719208786da41dc305cab22814168d4d4530fda19487b8f04b53e2111f76b562c81d2013a427ea2be2096113c6e57f868c73c447acfe92119609989eaedb8de36a9c514fa158e46c5426fb5df2ce31549f12df696b5d72188f64f8ee30b86d3082b80ddaab2a9f66db71b913641c6a632b14c3c29b0022ad5f26f044145653eb781799e0c5f9a4a3498e22b3ac33ae8968f4d3f7515482575ca8ff6591b9f102c72b1a54384ecb5e651891c6a18d259a3561b912a07256e839f9873af220943be8746fe64ff41612ddf373704aa0178b91778be807e0bd1e4c85a4d60161fe62544615d32edaa9669b13bd1bc61491dd7f363066c0449d0196a976b7ed23c0ee31855d961d2e1b80837a4f274d2da0972a671126a6572c06bb490444c24f7d73dbef8c3ca6632c2adbe1612c942d93b23469944b9dab71f06954ffc7799d11f04700445cd017c33d69c673e1451d11a244becc7350cce91faf05806f687e9371490ecba7bf031d012105bd2027c5bd90625410b362dac7b5d5d6f602f0a0d907420ee9328f10446c86fd6a0ed3505e09a0c525cf9d0c360e64d79832f520341bf9eedeef309b1333d9311fb03eca41a87b423ed0b7c2e0cbab5e910f9f7e4f3ddc650231c33c2cceadba6a7690dfa3dd8e3d8bf5c3abcac0920e9e3d943ad996cd0dcf25eaeda464e158fba76f3a0a2b4bae3f8982700059ca297cb803880b6e6e0fbfef1448ce8840d02fc6b1e0caff01208ab2a11220141d0fea60c9f07c20da21373c61226da7d46c327c26d9bec471b060259c1e089269723ef0acaff49664bf70b0542d889cba0f734e5b41fc2732b416073a12e9d9af884f22abe637f9b5a3b5ace254837f31af52310ac24f2ccc39dabf4f27359d0986c04ec00b68d727d9ad14da8e5c897075da441f585d14d87daf324cc8da812664352f9d8c90a25d59f1db954d20870c8704fa584a965b91a79ca22e0816002c3bf17345e292478fdc2351840925ca12503e41c55ca1e4403707e340dcb4e59023d38db0834825354fa202daa25fc1fe0412c1c9ad0a17ca345945f41b2834aab9ece48160229154c3a4d6a7ef056baf92bfd69c39128985053f022236452e7eddd5029be63d5f237fba5140587ac531e98ffe07d183cc5bcd56ee3cf27e00307f9e98af5b2c502dd37eda711a6c5fe8e5b1f856be5114cd7f197bff10a8633ce97963028ba776b719257d2d99b873ffd44961f8b544461554fa6814253489f3713baed51cafa9eff61b80b1b0c972601983046b526d754f13ac6eca203a3c87d68b56973c0c968f93b113008e8a3380d520b19262f4866131c5a744067eda0b1907842a0ed21ce7d5bad01b809894827abc91864a11ac258c73928bfcab9489ac22d27524e7765a87e39723e5600a117b318910a382f6a44b2dd192f7bfe020009029410e0b5cbee722c925854002608a40e6b79b1266fe5577b57cfa40b7682b659bf34b7c9844c8d6af2ffdd1d0653afefc348670225eec1090d32f58be7539444c2bfb2b9cc1ffc615ed9628f694fa3ca628b4f1192fcfae60b23d6305286709d11416449e41a7d40ba3cf5cc193135954d2e022cd80683f40647f6147f752873ca73ee1a71ea0b51b15b12a0954a1536638eaddcff15d109ec4aa73bdf4548c69a5a73d0b19df127461435c5651f2c5053ff7807bbd8ef81855c05378428d79197968db7c42f121b09e9e34aa8e9111953486848c7687291655c0a8fed29428646b21b2bbb520cafe6e4fec5e0b7c28bdf04da962a215da4e0e136215d18b9f924183031de0c9ae17b39a3cfad58368def58c0830cdf994e9fa9fe3aee71216f89dab437db7fa3d47c22b2009a80504668d259acb870aacaf000d048f714a37ce80b984fffe0a50cad7983ad70bf1b7808d0d027dc260d354d07e22e1f023a23d42648d6a6d1f0a791be549474de426b5418829b79706272a42c9bff9d1633bb3fe32d67ac13d52d6bf52a132212cc399d4d434c212935c9c52aec4ed0a0b53c6daf9940ceaea65aceb71995664c444a3ec7701abf050d2f0bd2c7dc2be391d5a1e7ed0b27896d25222ace98606695737ec6a0be41d592cf3a03fd70adb7a885adef821bf91f7ab587e3f115702ca2dfba76bb85437e0886797da1d4e88bf74f5b2e27b0c1b661104e3d20fc0241b12bd3b32b621f611a7a15b81f18f78fba59efcd0e420d633600228e1fa734cf37081f9244a6c704cb0e6ffd36ed638de3fabe851d47bc7c720e6126d47e79e1774eda2b94692e3e730fc079c89ca107f49af7dbe8c7dd2fd74d4e031690715c471d7ecbb29e4212be10dd3a852b84d58974389394c2345f5ede8e25ec3aec91e77a95ae0c826dbbf066c7bbbb9c85326096961d9409633faa53ad5e3e45dfdd2bd99fc165547701281b2d968d9ec1424ff88b0524f7f44b4cadf7a2296650a712c49b90eeeb3599c12fd6261c66f852c8e97a85b5b58007c5f37fa9512c9e489052ac49584a63f5c02bde813a66d95de72f54bb1829d62cc314aa02368bf040bd110fcab5f8a94d6feb673411220ee5ec2533ad3288198a4130be9590d8c3b6738fca567826efbd68548b5ae632588e6977a10518250ec22bbedb1f938683bf427021a3dfe23ce86c458ed2fad23214093b09cc220fb95d61dc24415f4956cde40f66725335f8f27d2ebfdf4b5e708b4993851ec05985574692fba1287bfd4e8fc7820908a9241149c352d909cf84bf11a6fd6ec190ea965503050b54c6201048f07b5e6b65bf576c92cb43d62923fed869ce5f783b66b04c49fe2dcade276cf989a98c33e282844028090f7f153ea1e782e68b3b7ac801f6419c0ca44cfe799165a6bff357bd308bd2c2cf2f7568ad71b3ce570df80e2b8e0d18bc71ca076c92de7863be90672b3b5cd19a8de329671f8c300d11ef1622b7bcbdb739a3ffee0fa16054ad2e44604f3b40b6c0e08eed908cc338be7640c63a9c84c38ec19dc86d0368b83b0f643af52d2826d98214aa215c73299bf3321e69f8b83806f7e5d9ce1f72e0e5705bbd85caadd8b339e0bb064c0ecc8356fc6f0e3f7518443261e486f12b674f03b065a814d297344ab8aa61cfa7e1ed75b4c1c4875427b8cb10c70a2a59e6e79a34b9f5eab8aa3cd924601ac42c100eb76d461ec6fb240f4fc0b51fa1d0c9cb08c19882aa0b3ba3f5936291229badcb206cdd82d03398a9c225663600d14908c6ddf4889d708d6fe3313c2712829026f8ca97a2d07c34ebb8ab302856fba7e659d66f575bccf37847d83392ca0e920cbe27851a0778b6a5d1f2a5586ed1584d4bda2f3f349deccc5d955f7c71331b4c25439328a0514face588a750658c2697933119988d9d3d1048b913e6e4ba7dbeae4cacaa220c8b85a6da77d55527537335f80e73020c8a241da47eca646a174285c1c216290f28015bfa9bc1aa9bf65adc0911b8803b00cdb72a51c296aeb502cf5b7e1ec9199450a131805ea3dd230a06d3ff8f34c49a71526a92b75855e63d4656e951edc66f5b3584cd9faefacd9f8bbbb50ee85ba6d3343455ec4b70a415b072f6f8a3fb6a23c92ac1e0a357bdc8f9d1ab48372494502c2156d344f438d525902d3e0852292c2b30a9d53e5d63e74280fd943fbd6ec9bbcff45928a5c82179323d1c533ac8f8be57ed7073a3aacd0ae27c799efa201f6660d9098e54d084650b5f308e18143eb78cb35c1905f7f03fd6f3f5f82528cd05cf614f7f64e48d6285c25c89a9bd276820ff582f36fded081742fbef1e454c3100d01c5dc4a6386683edebc780c58d417ca0d00ba8565a4b50aa95c2488f4e3328af499524ce324b5a3bb0ee7c9aad6c06ee90b42f135654d77cc00f40e08491228d70b82927b27dbb5a89f00a32091f6c1b9bce364cd80884c39a9e837b8f89f985f22bdf48a6c775e137a05ed43f33ec3da8b72245d0712c1f9bda0c1204f5311b18f96dd968f0837183f4dc451645db79012f916089795cef75fcd97157c5d3b3152496bca408479c5a7605847cc66275b98b3c270bbeaffa5e4aec9b190391a2497161e842542fa0fcd544270f9e02ead3fda2c9c1fd92bbe43a74f408f7d6293785989776161a9d486ca0dd0bfac5f459c638ae5455b4fc31cac1bd78ff87664235bbfb4f125d90086d12fb94e6ee596592032703f2af62a7db9e62f026cde92e76b64b5d2ed7781ad7c8470bc318166ae7c86f6ae6db9791ce90f847c8cc0c085c6f3684442f512011aa1f05a93ae2bccc405dcb6842fd14c249b3f973f3ab4c954213f3333c5f2606e3e29be4f355e4174569ecd6085754baae7e27489466ee6e2ffac49b9adf2183e2a76d8c5e48c6d735f8f1840cf234bec17198d3a692233723d5c1977c146ed21cf5d5f2cc56a2819dbf27c6cb4b12e660453f0b51fb9165cdab108ff948d6fab0961b1184bab2283742e9b5e018f3aea42438006c310c5e6d7088454e502142af28550980ded5188764354e85e8a862a5544f0f799a0f81b77bd030e50623ba91987aeb52fad93e437574b047f0a17923a723930c265cf484d34014a706e05c10472c644a9715eb18caf8af8aca39e2a9ed653b4102701b0d56c2bd2f38259dfcba67f5e55177f5c7ca8cbf5d01f84f55b7cf110cc7ba8063a41783d8357ff68a9551c44585f3972c468255cfa270ec4f56b1f18ac8a9cdd6ecfe1f69b4f74788fecfce4939b2b1e8fdea64e18d6e54420604f576bf5c8aa479929c7a8ab94efd6d058fb40ddff6659811c628ae9d122075ac2d109a8cd1b97b2eefd82556ce57a445724a2db7c49359f937bc6137684aaeb87de4b74f4d9a44fc3bae64883a44fc6b226961ce08eca49ea9bdda528595199a4594cda00bb74ede9fc52b58c07d3f88f3a57cb98e93f8e0e477153c1dbfa230ca4bead8c8747a15f88e850b8836085799bb1124b2886e5201d82e1fa7561c47615c4e774e93655214d204850f3c71caec9a5909ad6aec826cb6338b488adb06d0a8489ee585999e07bfeec036e2cefbd43ce549fed622644666a660ec4ab1f37bf6a75a93f0d882ebdf347426aef81f80eda65cc913ff955a31e1e946fb02dd14bb044880fc181a23c4e55256b58900b9308184b26670b68cf2e8d31683a8d00e348c1593700258c18a75e4faaef906f04255c149c7110bb3899c5656d650f57e5bc9f8799aed9fb32aee3b50bcd1b041f7ac2324bccdde4fd0479a8147663ac377c350c14799bc3c272923596d618a5c4c8450ad91c193478fc265664239c38447262a4fe2e8b1b6b1c9af4625bdc378eb007ec48059e3344340d56205c59493a7158e20c398f8787d0c109273878059533b4ba2ed99e54c5c12b5ce032c10f188baeec85970558012084a84ab243d0bbe0ed093381ae470d1509d9285bbfeee5a9cdd81dc8b0bb354208219b90bdb7dc3b7a0d250db90c12c379e79c3976d7845488cdbde4970bffb477447ba9fe8c24b6ffd949823903850dd72ed86fc21d297d640df8cd64f809cfc1b7c0c3c0224235a6c8edfab5551a1c80dce1e3100b6de4b0d75e9c7204132319429121d31192f20663102c643a82519ea74c6c7d8d16d4534704c7a073ef6e1c726309c49163d771d7c6d36081fd52534e1daae52c7fe1aee2b015730be3b0113c504b793b0fd45286dad6711c2e2256b92b1db0decc18ec10d4bd71717264712712692f9ec3a9edc3c9157e47e44f48241283da8b43eec5afe271846c6b5bd866102c38a0fcc049cbcf4d0f68d0d4fa6979125d842525e8418c3285126968e1d071a1f5c3825f826039b5414616926829829f61b23356b02f41b4fc605860f28193d64fcb7f928823d0011bd0d0727912710439501284d6ca85b458ee4b102c577115f807660cad1f9627d15282d6cf0a56f2528f95bcd4f6e6e785b466e4c0f6bf6a6720b1fd192ad8f6e9fb7363890a522b091dd65084265a389ce5fe742c6825c11286160e5889dc7c6ac504804d79ce6fa7db437bf32b29ecca559c85a53996b77c669a760855947ec29bd3293dd50bfbe9b6dc1ea99a67b950aa34ea3304a4c147402598b4d37da29eddcf660d631beaaad77b7af81082003d50f3d9b9577aea24a53d3d3a1e9f9fd97de69f4c5fafdba777fb29fb76b5ace21d33f7f4f0993e47fc40c17ebea7870f2154dc95db3507c58667a060bf1b3b3df09253e28f7ef64b6267fb625f170fc45f7fca4f48fd75ddbfece823781c91e1fc0e78791e10c3f620c5b02b18ec07a190e3a94ba6c73dedc51c29ecc7657998afaef8c95a67863b2b24b0f24a62e18ddb434f7bf1fd997748601bcb194516febb4183033b3d3d78c1c278b4c1996b462efb062595944a29e5a58cf27ea97cfd68fcc24362ef76489f89017add97ceee4b5f2f9d6a6f5e1810d81a17f698ec377300f9d8de690476b6c4ce87be8c2ad8e0cc06e13651b708883130f3867f60a73bb053eca7930b6a169144469d502eb788985118e705b181e24fc79163de1af5d3c603eaa84fccd5a33e5128fc1ec203128ec21f11f9f3991d3463500349164c0a0a02818d4649da9bc1643b148b1667f118e4e2f298c4e5462397bbe06854d4de06ec178bde44e64dfd8ac7a2be7179af70f98a6f2b560ce920173c85642e679716423812b9cb59dc18b4c47e3128471c2cde38b2cbed21b783da831afe8bdf88e3e210be1cc2d459ac60b15f39eb09f68b45b128a6525cc45c9f63b122c715ec3c6a88d410bf5fccffbddffc7d8bf6027f9db563fcf5bdbfd189f6fa29d9c791c15f2a6f8fc15fca0586c19f7dc12df05753f8ab38e0cfb6e0b0601578055b7c8a5144211a2cb01fc7d98a7d4762dfcc1ff7c5261f8e9ee2054a9f99e78c464831a97154f1860dce5cb1635f8f715e3262da6cecc21cd7857505b8aec164dd8ef92cfbcc986fb4477da8b8467bb43dea43c5ab9a03d2d008b447810cd11e3d0d163cc98f3812cda85849618704e1b4ba6fe73ea403b14a4b09bd12b5d5fdf356a7d937396298d308acc433bc603fb8d4a36f5e638a8fccf57af7ad8fb73620c369a1e0cdafe671e677e6af393d0fd2cc77570555f3dc8510c797439e1f2b4f1d3e1c79a571cf6c00f6d1de8c33589be57f356602f90dc68b5311c56e1946276aa7a3497b92497bb2a9244d515a7282c9c993284d5224104d9a4ea06429652a31496242e9546242a912c58ee118299e4d66926465b8959492a048562b55284a494a5755ba92949a282549514a62a214a54ca1c2e4c448969f4ffa8605466926f54d935e6a2fcea41b4cd8a9c4440a78e3b50705e62c01ca79253cd151c83460942cbf6149ad924990467e1506ab292949d6761963d57034922a8a6138fc520ff3f5da1ef7721d66fad3086c2f61b89bd0e080fd60e80c24f68369a526cda497f4110bb6911e91099507a4214976912ca514628a8208e9e3082e00050921a5949265942c95da93494953692e4da656ea282d05f4e47b09d089129e888296e17143d9a48f2094b2fc120cd00850357260618d195878d85e0d2358f89514961eab71e89a2d85bd5eff45a0081483240bb6a2508eb0dbc301ea891b0069a2c43188060b2c249267d8e83718a3d86944763ae2507bb4089d69628d504cc576911a41d6c8892e8299124956767a1a67b01f97a750abe88e539e4290867e15069bbdfeeba19a33b4b6da634886a154553c8454d1777c2bcbb00986697cc17e5c7b337260b12634b260bfae192261740ecd3883fd5a28535ae4ca51b447e9e4211f9764864394524a29a594524a29a594524a29a594524a29a5ab4ca7d0149a4393681675865bc0328689da487bf433c660bf54a69446b131b7f4cdbc06864aa43d19874809a7508edd445aa859b78df4914ed248dd307e72ca04caf2bdcd3b87661109e110845bbc7308d2eff435e7c440209e4628468261b8818024ab817a023550ee21b2eb744c2c08cd21233a62034da12cffcd23790a15198a9ff548df2481393067c6296fc8b2cb72888c515ad109c9aa2df978d444a47c0f0f477e473e259318016a4fcadbd42567630592ef20f91692efa1d94030c7dc41fd78515908493d12ec3d84489615d7c670cfa159a4bd195db0f2df14eadc47a7bc69c1464c83055676197613ef88879fd3c82e6121c79c23ca1881c428d20858c8f20468d66dc90761e58558ea8c9094e57dbaa58e1852ec67b70d67c81a31f3f74f4bcaf3382cb0f33b72deab5bce3ed5ef34a5d73482e60b03718291643972e4889105fbe5c002cc7161215fb2ac57e3429973b427df01fb5dfe331e7703071e4104792503d51fd4789433c2606bc0c0ee5d0decdea8d15ee4ba6310831dce3b196d6035fa26e6bcea9b186384d88df6fa37704e2740df7027f8eb06fbd5d8b06e3bc19be309f68354304885480f816f7892d7c70896e3de6231098b8843b45763091b2310bac98d072458d4fbf6746b2dea43b417010c44bb5f77edb0f3016676a7a3089b390821841056a952e50d189899c31f11f987cfdce9985dbe0142c08e074a4cb51abf99eb988e2bfeceebf0c69923d02c98f49225de91651f717d88f88195338c603fe844103e7a5c37d81ebdba8193a36f24e68119be445ca309fbc11c1559d270454e366d39e59472c2a6dc94f192105ed8e934832db69cf4c26aa66d5c7775274ab9b96927d4d4b28ab2b2da15b9a222662a58e4a41957398ec3b8bc61278e9bb17661ab7d03b59835ac52cac6665fdd8d2f0a9b5e1393dddd5f5fdd574fd9d9eceee61a767f42b20d420cb60cb30c68194e99d9bee9562c90fb917617c84db559b92ca373d368960199e167dfc49b6cd22c03f39c9c72ce4f89b51680c1c27f958b3a0d949b09db2243a6224cf103bbe20b94091687a5ec88ed8ea002a33514e105458a0082154caa4ea8868a43d2186058ba4a93cb163815558a5a8c20b3e2862296a4a216768a8aa40f5cd4144e56a0c89ca62c5927bc746f4842118107305c1b8a4e444041ccb686a2ee0c579b0288ab024c4665691b0213950d4ada105c2083b9014a5605e6a222549f8841d5b08409a18998d963ca109310865e4c99e2a5471b96b220d3e30d424c4b96e0b2861a637050c9605d64c8b42409b764c90a9a90062845587a4313481a0cec8a0c999a90013783264ca0b980892a5913369521131360d0909888822a432b3c41c2c49634399a1aec30236726770d2084010a24264853e47e2a084882b0052696e43e943c53c74971ddaa04fd713ff8028ddcaf403041ee6fb6bbbbbb1b0a18386145ee23f39a59a7435e5d67e553f297f7e457f208142e5042cabb74d880cd113d49e59cc73cd05252428b73a2631a7e1f7cd203254b8020f7534b9020f7bf4415727f75f482dcc739ba41eeef1c4d91fb3d3e70416e1f9021f70f88e4fe41131d0d45081b16f2d7c2031ad0f06029f76991397384314a414dee57a323f0e04d6280590286e5a8d4fab8dc2d3033356ee8c00c3b7042eea7bc95c4c1c115a890c40b55491172dfeac048ee370d919445c0411a6a0e9e90fb36c991dc8f70a92722a04a9128b6f044d2099a1c010329d040b4b4448424b42a14727fa78997dcf288a401b230cf4cd3c47edc9573bc510b0a3758927b07adbebd811872e3c005b97160835576d9c0161f210dbcc43532fc06022f432d00cdd429301966418adc45f1711966c10a39cec042a62c30c9300b4edc305861e908f9ab194a865110210aa319279c53c6e8454d62e59a505b0190461e46082f6487c09882b1021352510130e75bc318f105b84e08b6bfb50e261b90a109dbcf105f60c29bcef212dd2009b42d359e6065c45e8dbe8987b8063dc433f000abbf3d1efd8861da6b2c24af56fa2fb0639a2230843c10791f164c928f402e8a8a10290263dfbc3ce3306529bff3842cdf239d906503220044de47d6e81bf848747ac1e40e5bcaa7eecb6f8b9c2de794349c20399a2da39c2de7942a27b3251227dcfb263bc58781d156be29a0e01d9c43636ac148bac7c35c24dd3b6e56bcd3d23747646cd6956f0a27316f33d2cf793861c763c50bfd0b3d645998191cd82bcb8f027945a66f8a67174ef084dc1d8f1579f6d6da0b908e9896883e53ad8af4b6e400971a2044046a3094e389683a6ff4cd4be57ec36b69927170767a7a6cc78ee10f7be3a770da8b1846a2bde21cede148d64fd4c72e12eda9660db9f6285ffab3db0668a7879e1e4134208aac0232d9a0498e27a2efd706262762b241528e972d305f24da1b4996611ca98adf2eee76bef04e0ba5b5c90669a4c40e51d86dfb2c7b93496578cd39a70d2f206b85e7921acc24cb7f34ea35c2c766ace359d5dc9984a45e24415eab064f26ad5add21365ffdba487478bd486ce87083deaab98d1be4cd258dc3e62af1d64c6a1cf2c2d6ea764b763c13a9e3519647edc91b97348e9a311c3d24379f8fcc3309ca44eac105b60f946bdeb6d51d6295a4a4d828f95a7ac2ba96726afc7a8f64adeefdba8f0643526a079b4356e58b09c9ba7c0055f2b76586aa5935bf1ea1ce44baa20e7d126d24522b49d6440234ba7c0059d2095025ef844a052c403064f989c4e45a922c9a2455561ad5989981f926522af5d50b284ba5948c1a971e5d0a2455f2dea541ed09b55773614b3e292929cbd7dcc9a455f2aa3b936693563d893a3308d0465e525949c9f232f0e7457912856c02d248ac610b76b7807e0e459a751dc19cedb2865e502e2717d344cab29515c8824544b23605bd154ecd865d4b3832f0b7e2f0b5742d5d4cb2622e877ee4bee14fd3beb5805255afd760b5b6000268fb929892b7d7e03b85fda2516e2c06b7ca1b980d863d832c0cc3b66dca7f37f20c0254c9cb22cccf26cbcf38b1ad146388fda211441dc332ea35f70352b98a1d610b4d40625046fd3a767fa07e6514977deb62aeb9b035bb5af389ab3065a58ac71ec6af0be3a8fbb2fd8b197528e3b08b51f311222c26a9c15e7fd5644146a2efb4ea5be4ea6117848dd7e0971affd1e1387e2326e99b89149463d0a49d8eba55ae763a22517bdd04c9c55513b07a4d10abd75cdd0ff5325eb3bdde6d765e0fecf5dae9a0118d2ed8f23030319739843af328dac8cb3c5eff2795ba09928bcbcfa38b216579e7d1855ba9e62ace440a4996cde5e59077994a19b5b45c462df75af18f42b956ac58b1e272717171c1c1854271a1505c2814171bef32c201071c2ea3cbe832c28186062309b27acd7dd4fc47495dad6a58becdcec7cd7fbaf5a3c4ea49b46abead6e0702d0b259ad56b7b9415e8258dde6abc396cd77a4cdadf9ea062151f3554d026a7e53d437d7b9c33c23898c0171e333b3f79a9afba3c35f6a601f68a8fe23a485e34170602594a8deadd8ba71e306fe892d1dbed357853436ae8387e39119f8c70b0fee33cee148d41e8e4555c6a2cdbb2adb5ce7b0cff8765d24abeb5add202f3587add577e4eadabce60621616373d5eb1dfbbccfd8bc2be3d831ce4a56cd6bf08c2830f96a6f63b5120733a82395a28d64d9f8f50a73ea2f3ce3750b8009ec372bfe5cf2e2f25269e6f2c55dccfc6b6ec648626d5cc5bf8904b3ec0a00ab54a952256fdb11cc0192acd5a550dfa82e53296b730a362bf5994ff9ede55f2b652b2c5ea0eafacbafdb9a627116cf2c5a89452bb160f1192beefe409aebaa065c2dae162d52565e6f7179d83d8c2448cd6dfcf261e33f4a6a86c8d76db05c3fd838942a19e76ecd5bc5fe5d985ea7ffaecbf88edc6ecdb09371e11f30cbb815efa0c7bed33fae67978dbeae95dbb8504ad4e933d788f8e27e15dfaf25df6b44fcfd5a64ee97c1b8b830f7b3f73b8b9b9a48d7d25d2ecb0592caf67e2df65e47cd2513a9d61cea96c36152dee9d8f5c8a18180ad1cbe7df5bad7fd62cd0f1bfe7c640dde7abb3fb0cbbcd55b832f2d48d6f0873d7b7707c8deb9de1f4040a9aaf458c5dbeaab5d103578450fbbabe6fab5801a0ca56a8577fa35af7881fdb018d0aca62e3b1d3d20dcf1436ce500a1647826d5d4d47c9b497d73611bfc53739b7f3e727583d47cf58d5ea49aaf56b76f7361abe606d55c486b22cd25493518893eccf3f6e8634499101abd8302c96ddc562546a239b1994d6dcefa8961f4d2ae6775bece59b1795110cccd8898bf68d44b749376a2893c7518f500faa2515092c803c86aec5f34ea965e422b1121cfc3569250a0cc29a378c25433cbb7396409527b334e8ad43489487bd3058777a7494698923c1f04ea604aa0cd6461463f30a775fa1ec92280004eefa36f7af80ac75bdd939fc5749c3e429d5a24da4c2c63a74bda9b1f4542a2493a2ecbe38d195b2a1275aea368338f2d614b45720fb79e0097e702b82b6f5d6c49b24e46f5135b5a3a7dd8529e3f35d125a99a4f9d62be545e91fa67f38ad4bf9a57a4529891519e2b0e3b97cb28ba89e5cebc6d2d84f2874aa214d3a20ca332a8c37ae618f63e9d479e057640f038942afcd1c71711abe4d3e5b933174814aa48edcd2262954cc37307f0959b5fefcee90d006d92ac0be9526aaaf54292ac0b8a544d0c07f6df2a739cfd77ce5a28dcb16ec711a2a3f674fc5f74f1afe6977f5e8ff66c9054cdcb0ec687ec78ec1248330f3b96b3bc3b20781c3b3d26bb1f789ce7d9ad4992248bc7e7ad12cc59c15fcc5a0e50493087e5324731e91b178730e7ebfc43a8a37d66acf3c1832b8f5b278a246b25494b1275569a60f8ebcce3feecb80fdfa6d4925827f2fc4a92646d432b4da2ce7624daac24e59526790ee066f96653ae061480ab1d5152f11cff2a0078489215419af90b0aaa854ece0e38ac1b1c37b615ce765992481fe929490d1496284916a3076c6c1d59763d0fe4007bc440b263ff119f45fc03ab44b426696f62af17ab3f58bec10d725917af37c462ffb6a2249a320b061285f20b0f79fc833e7e2bea9b3a94e7a578665bd36ca3d8ca5c42b10ccb9a04e1f98ebea04816cf7970e5b6214c4b0265cb38ee484b92e7b721c9ea88b62351a74b126de6b7a16c3b9227cf571e83604efd0a7e3de2810bf6ab46d50857242d0790662bea88248b8b9828cffb8f3b3a7145319fef92e0cf9863b8284ffcac4b92270b3e19ad58828555f28b2d54a23c8f3292ac1d9f4721c19c537632eaa105b6e73caf9d0e23af4980a40ac34c4c4892235df992c8590f8e4052f5e385478479e5f53cf867c779bed32c77e62d763c7a4e4fe7b93f425a3e6025949cde2d1ef8670097e7f9eaf09d9bc3037057bf94e4573f5b7329e5f90b0a8683f8e17cabcffbfea53e3b311cc81dd77200734e9fd78ec09cd5e7b326c9e2f9d4e1d3c6670e36ff3ab338843a7549b4996751731ef097a23900f067b38a1acf81bf9a6b9254cdab60f97c5644e33af8c399f11cfcad54df017f9e771cfc5dc659f84bc5f80dfe6c46c1380efcd58c9af90dfc756ee144aae6518750273b126de65b9ce7f64815bd0e366e0ed7477bf4abfb0369e877dc082455f4a71b83200d7decea92a81304dad024c96a4057c9f43675490dfe5234b826758d9ac4726b51dfac60ec11d7589d4856cd8e449d086de8e76b92be919806fe7066e06fa5c29fe7e1ef9781bf540c0c03630cd7a28aeb0cfe3a7fd9913cbf238d9a158190faa668e5f3f5821d0f0be5818144a19c21e9e1396cf57c47f65c1e3c78602855d8bd9e01b9b04a7dc048600429af6040a2505ee1a14cb6eb52a5c929b54799b497dd98796e0fa9babe727d08d1deb5245911685593be8151aa143bcf72b9da2459f63a8a4a38ab8b365d4f7929da74fdebfc5d4799e750aae60aa64d72dc60e93fca24cf3924e9077d86750b8841193bcf4f4793c8299344baeed8fd929892239e41edb5fcc53522e26b44bcf76bf93522b6c4dcaf6698fbc1285eeee7e51659918afbc1286af071df0525cfa76e539e5f715b5c2e4d428dda9b744952cc22f5c1e8517bb3e61e5c6077fca349f2bcce0aec378586e45965b2204f1e984387a891be21a24782aa649e8bdd0a6968e36e4977d45e87d41939b1dfa9333a1d9d909664a7a41393bef980c4209c23d84f4a8922cf4f2029532210101488d8daf1a03884c35182fd2291cf07cb7348334263921d90ec6bde1a4256cf610e20ab07cf22cd338de4f92f5b224f6844cc53c3b8e9f568afa70342c8c70fa491ff8134f3b1a3ef8e07421a09595996e5d9921549d634019ccff0970161ce083559c2ee959262a3143dd98aa46afe1fa4c2433fb894296452c2b96f2723c97263ceea0acb8519c28cdef356abce28bb0a9e0ba56a0552c9f4f666faad68a28ea22829a928163ec9742bca9086e20f7b77ba8ebadff3d7197d58fe4e4679fe5433ec38dac10cbb026055aa54c9970f962f2c63ddf54d72dc75daf15c1ad6e2f93687a690160ffcc3731eefb94178def32dbbb3487bf33db0600a05c1f39eef34cf0de2b990d6149a45e6d0d6e9c8b08fcc18fe81840723d17398947bf4e09454f95072f138cf0d8a2d9ed39b80d8e279cf0df2420f5b3cef398f3b4409c50be079cf95882d1edf913c2e6cf5dc1de7b94148ece8b103af2cb5da006bd8e0cc3785726f872d02c8da701f6169b889500063969f3c22b3dc41d825e681095794231042d487ca5f63b889204d7fc512ac3c1681f2e783e5eb3222e6af895a5a488aa1460e2fc10e2159d67e10ca0fcc135ad8ebfdb9b1021034b5ae6f51a78156cd819febf51b8462845216140351ff8866bd60adfa9108939294dc74de74bfc7cb883802a865bd49d437b4307cdd249478db0c0eeccc10acfcacb5fbd6b336f5be9792d89601ca10441cd18f40962813c27cbcbc0048b2f815277e27be27b6121baad67f2db55efb6b76f8b8c5ebc6ec078dd90f9fab00dbe94ee69e655d7daefcc2633bcdee87d16ff807cdf08f171edab36b38c31552ccd5285150ebcc1a2aa2b60bf599238c9f71e603f69bc1c9e47645a40b751e2924df6fc66fef7e8a42f2e90771664b49560f2979fb8388d3d8b3eb33d303017a6614d99953ac3bd8eafcc9f39ca669b81ea1b91f397eecb4e7f3738485517230979ca49b866911fbfb26fb53331ed12a4d3b02e6c44f2420cc3e3805b2c8f983539e82819d0e96eff46c39ccb66d46e8d85e25005fe42845c701d046081728edc57c9ca9d4db9b573bb9b8db51f7f417374a00b27040d55cf9449d1e9868317787d222ea4614767b638e2b1cdaa907265aa783e51cbdd7dc4109f69bd1ee767ab7c79fb68d6b8f665b21a4d12ef778b3955c001479a2bed96a6bad07a83fdd850ce642c6c5b55abc8667c4ee919e3339c6d780896f49655027468936321e5f57b1281e8949225114f68b4491282699471a753b9f361f3397f1c824591d14a3449d3662b191de64dc1fef313a48b2629391a8d343e6903652b9eefedcbd3d720151c605bc2e292591922a060c4fe5c1881127a4590751ddcbb2accb96daeb269d92d53e61fcab32204bf59743a883bd058d1937832a9b4f95e35537c7cbb8302e84aaebf49878ed248dae4c228be67bc88a4f1c56f4903cdf9268859205b2ca3f62fee35d0503c695f11837080919aa185809255506fe892def1cc77131e73a1d14e3aa56840ff6c7e9f63073dd01ec4f8f59c19a6014ec079055feeab10359e5ed312bf8c78e13fe41afddfeb3a7f807865f78683f5d3bcca7773aac0eebbd8ffcf37ebe9b08e6a03e5dfcebec92740875a213d166dee515df7b5becf5204dfc09ffa8784e98e844d4c92c96c13169c331064717f8ebd9e9c04e478ca276948b1c38da1b56f9eb91ed5ddc2262de1e2bb0ca16ff40e1781497f8c01e45fc4920224b629448a546343a3a01599dee4c7b5e7b376654add7e24db557bfaa9fefa1c25a99cc54ec6158470433475659fb8c24ca405619fb86f5c8db0c0ccc7724cc55f197fba5722a7516f7c339852551cb4a8b8a14cc312033593b0c9219ba90712d2a92ce7225918a2b8f689b2c82817f621cc6cc0d12e333f288249244313e03e3c2568c1b14e3425ada8c819198394ccada8d2a6ecdd89dc933af7d936df8e7881c354cfb97d230ecb0fb61bb5f12f9477780ed5f674deb91230172fc7a34ec428472dcc91136e58ab755de5eefe6c5538c88bf1e597b0c9c1ca5528e11d36ebd24da7edabe42b4dd126d47e1ef3df2f618f55b65ecc61c6386cd430c1832645c285533178b71b1191cdc60bf56fa241466be821123468cc38871188f71d882f11d19e306210103c66a06c88c5c7af7600128cfbee9b82c296648b136f9508afd2c4ad7b7e62aa56f360c68489eaf68e8b86a06a87301459bee742d77b97a71206b77de799b3bc11b0a6f50f066a344b23ae786a22722d8e7d7313b7d465cbf0b08abdde9937bcddbb73875407bfd849988d042e8a49a83658f319fb6d38db99d48566c28ddd46080acda24a1fc409e5f57919987b0cb906709f2942bc853c6a0936ad6a389b6c05f4a06e39c703614b17dcd35abb88b9894942858c8f341a04ec402b499ace8e407e6e078001edf03dedc3cde07bcb9f10893523bd81c54b99540d5fcc7e2425617b11e998836133fe2afc5e69962ddedf8c6cc44d4f98936f3cd44006ece6fee3d8e1b7fe3fe98e5f35dd44a20ab0093858585e59f4cfe1aa8c7898b8b4b2a159d784eb6d815117b0a40e74fb6dd99755ca7577bcc8db947b26aad4db5a9363500aae8bdda24592d504567327d4c93851e85e1ee732e6da16f39edb44b732e0fbf5787ffda78bc391cbbddebe52e734f8fb9d18b5e2492aa19a15879de9f4a594b348d6492c849a49923e69106c91cebd0a06883b547edf2c848bb1249269149f2d4b0448ab95fcc313e709ee33b5d874c2341518752a1329fe3fee83cc789bc354764489ea754a20e9d126d26953c9bf0246f94eb6e8c7357c64fd73b0f37e73adcd56ddc9ae770691e81649550c4cf2f42212fac27cd8200e03a554a9d52a9644070c5122c0604733416a7dd8e8ef87b1123fe6296f99268f9478964954a7bf5562953269d92e7636d8234f3f4ae5882a5df344ebb9db73b33ed7e90793dcc327ff11f9dc3f80e314f40dce1e678ce0d4222070072b0124a6272e09fd8d2f97667d674c038ec80c0b9ce77faa20273683e733e7f2df5cdeaf397137d63f3f98ba96f6a6afceb8cc321d4914b7038ec946d99740db982fa26c6e72f227d23e3f39750df789fbf80608e06f36f35f32f75ff755e910d459bf915cfb93d5215bfba3d82a8b934f13a4132d69034e40c19afc2d7c68832f8874ca2e1d9d2730806cc4b8bf819ece4e2cf5e460dcba317581ae13924b7e3cfc7dc27d194a3107e95f9bd9fcc65bed3db3793b246348d3449248724912ceaa1266a214dd39e138334ed3931d72e3e263394b598631766995b84ac40125372c48f5bdcbec5dcb7177363ceb93da42ae6f7fa682fe6bf42b417f378e3104813732f06c6dc93b9a9f6625e636262aedd0a6962de235930fd1375326813f3099bacbc1cbf918a89790ca40204cea154c5e0b737371c9f01c563710138b52937f50d950c4862d8ad2eae8bef4817d71ee67eabfc49272cae11316717d015c535459e77b95f4b6eb95f4b66b95f9d22cf6fb77d732cc37cb0acfdea7cd0aebded986f6daa52da9b9ab6d5297d13e30ef827e73bfcf391383748ce71a434e51c67870b5b393728e7425ab5a96fa4f4cd9489651afe8124072381b3029463cdda8df95148d6b0244ea72cfe90e143a9fa80d46bf7c7e9d9e9fed02ef3d6f9f4c3097f2d94230a853fed59f613fea169154f98b3ec159f4edf5a34e5685a8ccf8951d3f0176b7d4ec5b8d38db9bb18c072d48e71b18b3c1a2e428806049bc7bedab40205f6c380f27c75c9b56655f2fc8cb9e29ce6b8c3b79c9cc79cef90f31d9e73d8dae13b32e70621b143dc41cbae01a9f342ab01dde82cb4c1998f3665c9c51cde1ad55399431a902583bbc975c8c1ca32429607318c46e1c97fac2ca593cbfa73583df9603c4eaf3fbd9e36d45bfc745f4e8799eb6a92a2fae3502b0e3ab6d73be951dff451ad9faf9f6fa3a2fbe39797ffe0cffc451fb5f74116b591eaf63a8f6aa5746e11cfdffe6ba5bea975c28021f35f46e6b1fb21c6bbf80f3b1d3ff82f2fd887acce3cc80c56424926735ffc370889172ff04f6ce1ef748534f5b1fbe11ebbc09dc4a86f22fef1c2833e3bc55d94b336daa68bbf7c7ba52ebedd2f7ebe7e8593ba673f9b53f5174a958bcfad7ecabce1eaa2be7cabb79bfcc7a1561c918a28948f7d24dac86f5b5cf12f22e55884c3e5fb482a16a5fa4896aff3de1ee6e933a3cce6e23295b25645cae5df449ad5a5ba54977a9759cf52592a4b65696199482c138905e7f668af5ee6f6dc1f4853efe2fa00aab5a5b6d4964a812a05aa14a8bea5c250188c24c87f7f4ff13744aedbc5d56b33ed7eb8875295bdde9aafc7d7fa8aff553c3fffd59ad55a6bde314fb558af7dbbb5efeba5dae7ebbdf47e47e489e75773c52dbe234f17e616b73b8b9b5272a144cf2aee278fd4afe5d44d28dd7aa96f6abdf8e7bf3237c82ff30dbbdd4429885f46e6c63ce817d2a24bd845f10f24c748c4ec748d3d626cc750fc09a9174b22539add1f14bb3fe8ebeb96e11ff49d771abb3f687d9dd7af0d6799ccb14cad3fad0b38865225336919b2fc3c9d58ad1789ccb7dfa0d87aeb97b9415e82f865fec396cc77e46f10123255067b0f085534e64bb4e9a5639c6193472c35437a74036a949b26c94d8f40551f26b1b5ccf408942e80ac0dcb2d6ff1313ec247fa18143424ab9443d2a887687c53ec83e5d831c72079184bff59d91946f2401ab1c450a5118d7248b2363c8da491916475c43df404db3d84e4238dda3b92324679248da4519446471269ca9e17d156832965361997884de4862ced9005b2341c9b6c2fb9b78b6bb1119b4d9032112291121151ee9bce9d65548a4c12472548d339fdd90d4ba43e42d41e1252cd124b26267632c92f392199faa62ab5d7e406c5d6d6dabec5a5e6f0cf768e5ebb41b66b4ddaebf7c002abb45de382b60b6945a5be69d2374b8d7f20d93012da6152de302e8a3ed22c8924554c600e7d6ff1665e2646a197e4fea292112d9f90cfb29515c8828574226f6d2af5792b1cc9d4a3e7fe5c1f48f22d89565eaa654b49e9371923ec13124de3a6936e0bb1b5620f6f2d4b1ae10f482af3e0843492acd92c879f4b40160b96472e78491359763d3ac07297abb82e2bf727b656ce716d0495651924bb37e681091ce66490644dd409cb36e2e67b1a754280f2e783e5fecb673f697462b91cbae0ede472e9823151c632646a3294bbeb5b98c3bdbb3cec530705f550b4919b342292aaa1a8438d441b79f9a12c39ecdd95479268bb3c3532df982853239da3348234f22c31d896d37fd2e8f3c13257000efff87c6246a2e24870805d025af04f6c0571c14ac4968aaf1c071537b656ae7ddb9629a5519648ece9ed82b0df609780d872b98a1bc4e52d5fb941b1e572963b4449e305b8e095b760155722b658be23ed576e1012b6b9153b2325ea5a936283331f4694e526fb2687c3a7be9a2dcd1ad2819a0f51e2adeb4a782d25f5b0b7d51da204dbbe6d371e45a456c92641792543a62648c950070b999684f2c541d6eaf0013768ccb2ec3cf35916af2bae61a3cf819046c35f2492bfed484e1fca33cbbca53a11d82f95a5b723394f522925a544600e1d9a9475bafc6f0fad92f4f6d0b37333e750adf5baae0bc994523a4f67c5ae39a12c825d295a2f9bb7ec72bbddaeec50b2ae2ccb9ecd29ec37338661d8b113763a86bdda3aa46928140a955dd4fdb257ee1d57bfdd4f885c677bb1cbe4508d18feb19a2dd8ac6d1214b534096084dc7061d776ecc21af9c34e577df3001c4027b556795dd779fa1786610f88362eb8b8b08127960b443c7922850f40e1466a1d0aec97ca734eed539b5acf962395b25693ef74d498b3ebee5ed7c5711cc73d6b5a7da5c7688c40f4041884acbe6a86bfd4856118f604bb3c41d489d906b556d94f300cc33079022132c52e1ae7f4c11575a24e7cee8cf459efb7f4cd354d3b0f760d6b5acd7c62aef88a36b208f977bfe19a92a78c0008ec125244922c1fad6a35407bafa618af29d107fd780473e21b081fe78345df8fc03655b9272e7562b03d0910750a006de2a1d024c713c92a43b96e5bad15a75a60a7934f08bad18df670a71cfe7228a552d67287923539ce8964c973dc1cba6ac03485aa3e610b55cd3a9d3e85a2286e0e6118d6755dd7bd2f2477f7db7e713c78aa20da5caff7eba57cc108b46483331fbc2eee4850875f9221cc49b9c1eecc79c164d84cc423a325bf58a8cf487b68d5ecd1b1d303ed25f45996755dd7e197d37f74c77eea8ebdc3d8e9f2c9db2585e4ed02e1b2869b89a34c27844b540adb3c9cf95674421b930db69bce9aa5fc25e3b3f3c467d9e5c4b08d68236347c7d0504aa02404d6934309cbb02ccbfa0b5127e6eced24cb1a4a86616987d08b13aa2207bdf8c6cdd28e65439112032174795139a5209267de50f5a9ce035e7f477a1f0c9cf5b06f88d8d355e22d2592886c1e9839fcd2fd0777fa0e0321645f7870a7e7303c6caffbe593b5779c76817039c33104d146caf9cd898459eb6a5ed74c81fd52f35bb411891ee338ee3c7d0e73dc75bf799d66db15922f9fce198e3fd891d8457113e0d09c434642100443303434690936fa8d0aa9b59e47ce9f0c3b5ff17efd4488216cf3dbbc30cb2b2f2463f77b1622c3d78b3d4221195e798268d34e724f2c46a4f864081c20daa495b04e232752a8939a965ac4231662a10b4df9e33228a280986441cb21b93514605f18a38cbdc48ba6ce812c1942089f74140d4f80d6b123ead4c355ee4edde81a960846d648aae81575282c430e271e3c0d645927b206cca1c764064f3f03d30203d2f4cd8d5ab3127413a7e4fec7c30a92144a0a3122cb4e912a1830bd32845aa2439295c195213b45b262c41520b912c483100c48b332b442b482a45e11ce13d54143ea96952c7bcf8badbc05fb59d84ae52dd8efdc4ab28628b9e461fd761b197ea7079893bdb6b60b5bd7d5aa1789b6d303a4e1348c83e4f47a9170c7ee4e4bea84571d2082c3382f41c8d676a8012d072a14802c6c9cf6a556580ebd48ba6f57db70d05b1db652156506696684f384cd66cdb6a9c9f0384c60bf4a9352929ebc4cd9dff6b456b27a958a17c44e12a3b82f292571f03851d2ce7adc0aa76fbd191a35cbcb49dbdd92ea4b384f7466796b7ba9cb583b0e250516ecf45ffd77c9ecce5f7766cae56d7252fee232766d9e53f6152176aa78d64cefccd3b333d6da73ce594f134751a302184c4c4b4b38389eb723bfb170f21285034a8e32509c652cb77433c6ebd3716e3870f4d68034d68964d1e428030e27b9577484929e2a4ebd80d202161c9438b8b6525295aa52155b5b0b0eae04e084170e4a9cd5b11b9c944c4955fcbd8eb0e709db60361969a3ddeebce4755d1d2f786d2778229a854aeae91642b236ecf0c68ac683e102bac02ec3e3e4d8912c4d5a2554926411a1f459a5dcb5f60b7c913f1a5949b268b7d46285948a2c84546117080dc8f2a02abeae74c8cd92f34ba3f206610e1f7c82a367896947aae2e9cd81235930e00d965c7532c239f3c45f1119868be1e2d581dd9e2519c59315c8820171e4f8efe68eff56f257b30e4843135fef8e68134fef755544568c688d00a0bac9f11fce5d93e3bf16b90fe30cb75923c9ca562c528a08b9a50c07610e865a03547593d4a9d1669ea48abc9265d3d6929bdc4ca1d6d044a1cda74dd991c28b6623327698bf0b640ccf7350e2c8d50d6a0ad0cbf0472d6d87a82940ee72a96f32e869b76357b7cbfda994b54a2d5830d525599584a41512da0192aab64252555b565981240bca8aa34dd9b2429265a52abedb12e516cafd6e6df827484bc32f522a6630b3c20900a4b05fcd305048cf4e6c8c0b8b9ea7c979ecdabdac9f32c7daf9c0a2c91796c8d7bd7c61d74b0fcc1f9e72f64d4b86347b1d951e476fcc2a863083fb638dc7912b70e506fbd51a1c0c4a56f9ae51d2702e5cb8e4f8cf25c3f8af83a79045a12a1ec26f35dcec5b2ed57218af46c6b99123672a363194623582cdc9f030b2a0547d3632442db1981159550573e4514b15e64c158cff64726c2ca196246a49b232a88a5f6162e1e442c9a7c88251352382610a90c57965b8426e982ee4b6026459a88a4f6921a3c040a76c2c42ec3455a7171eaa2cafad18312049763ba0bc10b577cd79cd29e5a3945222f5924e6252b3db91bef8d0a7e7e9537a2199566ddbb47a78c968816029a6436624c1f6e18c9c5e60cd1b7483b0ad69852c6fc42a4b5c042a239952d515f1226cac82fc06213c80cdf3f2626042283ff83eccc109b8f2811d84722e1d818207934e0a45112894e46f4231247f96098a234f4cc12eec0929f99b37c327c85033edc99c733e81a454b327869e28ca2d31d3328d694aee278a3c1104e1574f5cc0817066a30c99ae5033a625b86ddbc6754c487c6e8d6c336cb0f190dbe0af05609021131453324c41666aba42508e38b6e19b4b6ac85f854b64907209cab442b4421d8507e4d686492765cafd7a861a067a3db9b2905bae6085285c6109b9656615d23025e5be9621d3158890bfb9a474852572cdaea0e4dde9a842b7714c4c573882bda00a42552882b00af10a1b9127f5b3596ec0c229edc92351a41651fa669efea5055107635154603f2c4a964059be02491626a5553228cb6354b4a6be9952a6649bc478e631ec42f275bf46cad7b1fbd1774232bd30775c10a59617a2fc4264dbdb6c28d50fd012e43b23069b4f912894be99afd6a65297d4c94c186c1fe650030b95a4e75559677b56e2482badb4d6f90a04a70c3ea0f295448d2a45a24954a90a65446801857e401ae965a8059417a20dc4cf34d9f8db024a7bda77e4b669ddb78e2db9696bacc0624b5e48b118132ca9bd98c13712cddc39fc0169a4ec6a52cb6496b59723dcb977f7cbb66e0165bb5dbf3b3cdd98fbbe10b5d7dcedbe45d8695da73dbb7dfafbc6e21d1971aae3f04ba7ba7e76fb7d6196659cd6ef7474763ab3a66c0acea424c16affb2a630586edbb8c3b7743a36dc42bf29056b02d24458ff614bb229ed45ac891ce3b126604e911176d471ef7e3a9d7cd0be9d47fbb65d48e6b87728fb16922daafb8e3c416d66dd8dde7a7b773ab64c3bf74d4aeedafb72df364d5e9839eeddbd49adfbda95ff322a46cc1c279e690fc2c4bb4861e3e3b3a66c8a06a40571492a985e666a3c4efc06bba56505f15efc2a1ea706724e786fc0086fe0f49cdd3720a4711e61660c565ae8d319282292f4051e88c14811c80522268cd08622264560d0ea43600242920c4d81073ea8c213b82082563f0390d5c30a90f006117cc1480b515afd8dfbcc5d873fecdcb1ed3f9814f6835532c472a8d8afe57acbcc0b3dc516b7f880a9e105fbe1e4266c1000f6469e794214193239a1c88d0c999c70245320c982d2a8be566b53291e04e59ba1148c9e64392910102c0da2437a46122cf68fc26036a24ecc7dacd3d13772630ac406fb51201a44a91050df0ce99b204a44d3a6562f1bd1a6d6187fe82685e4b6116dea29070393630b28f885a83d3adf042139d547dd24880bf6eb26e439ff51a03cdf4d8039106949df6834fbf5427415b1e1171fb0cbf360972da264792199de2f5edb6bfb74def04b0ba2cdf51da9d978f5e5dd2843fb6033bdbc3839beda034a957c4720387ddd68efc21fc5d8d2a664433a4a524464a488101cf2730411402220848f20607bd083f0375630c90667becacd84c1f650176120806c0f6520806c9c72234e91ac1e92aabe9110915c5224a7c8192459dd1bf5069a42a7a37e23f54dc7193fda74d4b4829e940440c99f64cb05f6a34d3ec8558fee5a2ea55d491f296664e401acde558f21c94aa5a010cf12d7a6ab2f1d38a9303b7cb1f385252ab6936a347480034a70c110259c3081273cd00111b43006130ca146210a56f00217852fc0c00556d88526aca008e30012d64250e2401aa4d20684b2ea446250186281136550c20826687d50e9074148499e18030d96f0426b293335a1722778c0094472d7c890a9c952b61932354912c20667b65bf38439da61a769daaded350f7d11b18a4603562b49d5eca89401d469a268339764975ec396abb2ca964c6d7bdc9b28ea44ee1cb4e1b877b7b6c79de3fef50cf2e4b20cb76c10b6cc4748d5bc3cd9b61cd7228d5045571e4183b6e7643848b262bcce4c19557bcb67fed999db80ace10fc84c3ecab7730b67b113d58a88b9d6196955aae1cdd45903adf9a8142df5b5496c95a2110100002000d313000028100e87c482f1704024a8aa603b14000d93b24a704e1bc8619053c8186308000204000000400048128600ffa4b15f50bf6582712782f64a23983f95dd03a9bac8a4799ef80250cd369c2ba428bc6ce5d213fc7625b8e02c2b95083e9cdeaed4bb5072e168eed1623b87905a6e595877e5e941ce2c44138b186367fcae168899f942a1a17cf2be51b4f4ef57fbd9827c539c28adcf8aa1bddba4c0e01e7fe4d385f5336728f9d0cc6a69f1b96be73d568548bdd7fab57ea5caef3bcf082f044754c707bec13c43adbf45cde0ae398158d212a234332a2d6873f102f895eb4c45104a68834984f8e5aab428569a0ac2bde42d5d231f87cd7497cb99bc3f3494c981a7a1a432caadaebc3afb1dcfb30d0b86d6f2485a12a2e2d61a40a5371d4642a1c29ecf3b984572162cc1ad1d14b769181dcb0797e5b6c5b97a2281e343918146c53846b493946fd11d6b1155cc422e08246309bc80906c58e273ec59711ace36d7555120429616b84741e166f8e7e002b0b2e47d0e2edec753a482836b1dfea9205b4e2ef0c7725d37822938ce49fc2ac87b22d85b9782a3cefd047c99a4f78567634a1fe8a64424af013acb41415e4a579980762d006068e04f53c6df984bf81858405089b8c1183c92470270a17bcbfe127008dc50b97d23043033da98f0a2a3d1a09ed36839223e47fe780c484314f121038cf101ebb1f25c628dac18ac73e9994c46effd274bc52ec06662f01cfe726303e63ba3ec35de87b220a12e124dafbfff3f4272d87995c3cc43cb0c466c444cfe537a853a5b58c31202f840a30a6e2c70a8e17ce6584ddb9a802c08d6cc1ba760ac8144fe5480bb8181d60c2d932d5ee4351907b7919dbb800fa1084a6999020fd715aa716c3635bb4c9b2893b0f1ee339523e51eafa270f49c7b02dbb71e84b57c2e15cf7dba2b172ac6968a2b5924c5ad17829658a92b9d63709c9fb3d3ed9978a325bbbb7835d9b35f8f49bbc75f5288ab410acb6791734915f9dd19e2ca0d6902570322da71f26a822f342e4d3b04791b82c4f38c8700e96acae32339e528c13fa3044ba9c5d07a0f3678188376a408a66aa4cebaeb7df673e959a57471f01cb040d882e07d29dde0b2e52a2bcb59c38c23f787e4a3d8d4e839c81e7eabc5c805a38114e76b3eb992a283db5e1c181e2776764014b7918313e8c46e0224f3392a13c917d80a19554568994c901094914ce8a4e1996d191258713e5960c6ef853d2ce88aac13791566c4471a360b7931406cf318fc85b219fbd932aa2e4965d4abe13eab8b57791c282b2b45caaa8d860ab2693d155413e99835c9cb9c0708ec93c4c5bb0a7b356e00518eab8c02a522ea13b3b488a59512c1af1cf923e4d1499200c2e6ee359ec68ba19f22af7f3b2ca6d6c8aad2891ca315d4b550c1707243914145e5a832c5baa61cd1b3da9b9f8c0d22197d9ffa7ca2184781617099c4ed4d5565572b7b373661bd16c2fc0a3a3b0007379ec752467f37a9064a26c9a623a2a42acc39ea4c56170d8bc3e78de278adb956264d61c2f96ab51a5b2c7133299723713e5b7cbc606967e7980355185997e81c0ff141fc3edc1b065b59bfb10377bf2a075a9c10de99d908665ac50b2b2b58bf07018432f661b32ad4b9849f9edc004e350d8332c0740132074e2b8f27aabec51a0594ef284d0e09de25d9415ed39d512c66d2962b8a27416415343abe1c50d33f5fed133be180ed4f64c5049e1f408688dc68c6963a9c02a649ced8b68dcc8b1974c4a19772ba0e965e0fb84e093bf29a752010bffd541a26c595c859094cf2359cd8f8cedb624577e26352c02d9995489d60dfe58a6fa924a64ed3f278c775ff42c41e2baad81c4dc4e8c67c07d832816fdbacaceea5f768659451cebe70ec0713b36d93d1a4529df39b35c7e178fcc852524fe5a089cecda0a6cd8337382a734188895be42e70186d238f65a29af841e8d9b274ef267d5f65455a07f288100f68b7619cc5b7caca0b5b775e580b5195f50ac32340bb4fb9e23c9e46a87cd76b2ee4ccf63820cb453fb2ad8aed8dd9c01f415a3093c8f4b3d8b061d057650150550ec53f84b86df1d3fcf2f9f8f4a593578e8be19db4790e0e8e8466ea90585e420a40d7f2e564fc0301acfa43a886c3423434055436e75775cc2a4745e2fceab066a87b3c6206705dd7adccb3acd24db9060a9f4549ea7f2d5d52435f129f69dac279a90a2fcea02fa1285deda64c4fe994493086b8871b016dcde1408d384b976570c0ae78738fa692fd9ba611a56a87f7100348f95543fcc6e84345dec8c430d78c3284a2fcd648b5fd5fc3a916939c97c3ac6a0db854c97d0fbaf322bf3cd812d3df31fb5a02fec31891137836f06e08af05d158694694e9e974a1f20c410331685e884dca2e7526296f21320154034f5fb9cc1d0c7777ca422a2388731e303e578d6d800d6a7904bf4077e1c309cdb0d94b0da404de42ceb671f0e1deceb3eea2430fa6d0c01946b799b145a29dd971f22097a3ef18b4cc057c34115796298f238cf96c625be57f673de48be41993f11dc7511adc0e880133b74e52c1d5b6c1d178a0399473205d65653fe1d0ab3e7d67f3a8f69e86acdada0295615b59e0c4fc345cde6468aae3d7e0014b978accf106cd0d4bcdf6e35895496b5f4de6aa7c5f7008508d2d1aaeb146058d802ce4a4e7cc2752bed0bfd947d9acba01c8b4d94e3de1e5db0303d43aab27e924b7d8c2e25665d578b99a26c6022cf6bbb7e5debe5c83be807fade1b5dc388914bd5ffbfc4f62bd039cb97971a7e348129bbd06dad2cbf7e6cc386e6ee491ab8d1730fe30f1c2a7e788b2ce677b060b6eaa9cb092cccf53484f72404fe3ff390d9add6b37ea0694a9f0ad2fec64d2f410886063dbfb6c5ed818f47a2dc674f61cd783cfe691817e42823afa409bb1dc6fb30ae9b9c1f1a7611ea9420462b96efa9d22ebd96a8a4f062d1e694c20b6348825691caf0a2edd85d44dd51ab99a36be4b938d87052d431332e7e1a54d5ac7fc7bcb4473b6720295bcb8b8b2893d99b6b184606505711c19d9dfc45fdd93281c33348e27d941ef234d01d0c1448c7cc6bf5893dce1e9f37d8456930c5a631af2c6086962bc31c15aa3d6189c32b76725d4fbfb234d90c68a9358ab3d60bba0ddbc5c8a5bd27f78f3fb833a76146b44224dbc51ffbf9ff9803541325bfdefa70ac8bb2dff1bc996ecebce30a867ea0e8d55aa4a4f1620bd2f3bbe608a012dfa71312d1a501bddafc9ed100287562b0e87cca9a39e2ff872976adba3c08062081c7bfc05a47aae9c17ffc5528c900dd0e5091e5bd90579290a45aeadf58c414f1e3f66a883c349f681aae51d5562aa3c67e9361d052ea9aac58db510bb84c081d8e9dce8557b7d28bb8187eb313b5b2f3fd80d67e9c525c2cdb0c36a3b0752ba041143c8589cbacf537219dffe3ff65ffc15ffdbbf68843dfd08e3286a84dcfa5c9be8a48a5ada1e1837da431b0729b4deb546596570f6be85624d278e05a562fca1c7f3e42132c59e7ed3cbf13e953c72dea8443c75d5ff74b1147216f16fbcf9adae1e5b44a0d3b209fe7f5547d04c4aeb9c7b9c382396a6be56ffb489888f14e423f37e22187f721612a5147f736754f0372c4e6641bd91b6575fd90ad378c365bacd558b618cfdb94165c3a9a385ef57e1904dbe9b4a1865a2d41c2c043a8619e3445220837be23dc56ebc0b54fd7abb44a8c097ea007c51a5936c3e1c0ca00f3371c15dd6b6ff55323505c32b679a1c6f3d7891b25f5cd39ceedbec3b40bbf5e05fdb25a2a5391b4c3f05848a6f53ff6f87c968142d7820c69ca9420b6c5cfec497992fed7a3bdb2e18eb15c59f2725fa82904c3d7ed5809802f73a553759d3b2bf786c7919f904321038654f315782230b48351ca3f45a635c2cdacc5a725f9039c2b707a702a0ec68b43304477d8d30d4b2798d8e94d12ec6e27cd9c9f44d2578f4f192b65c391acd51fb7160265e33d98cf1860affde44e9f21168c20d6175026eebca0e40a54d4dc4efb8f81dd7d5d247dcb70d88881d6b70cbf46f54d17ca73bd8c2036a1cec6da05208b68e77f26e592647514283d9947845bae9bc5ee7f8d6e8e197f45834bf1d8f03af0377a787fb6855d941a2372f1ce09c5f375cc701e1612559e331b2cca0011c7884b6feafb5fb6942d8318ce64bf8f5bd45d946c2187a6921fd2ef450d426f7b1e4aeb9e8f58e4dcc2ddfd6990f09903fbeebfbc1bdd0db828655c697aa232a3fec7f1ed85436aa7e666f35f5e0bc141939108f04c512b43446d0e5c5d659335502262a40464645b5b5c01d29df8aece7c1d96cad2605a3e72c2474bc671c5eeaa9abf881e352aad673325ab8991fbc61e8a0dbbcbc9be23bb068262824ddb7f35db799bcd5619f3d5ef916c6197cc620dd3307b50f6957c7c45d9924ea8734adc256544608f6d03e2f387dfabcb91bf905c57a4ee04202769e47c0f29e981b9242210fc8f61c4ea716409b48d913aa37628688c8dd8d4f61c01f8b388ac02ffb27801eff3cfc9467a54ab0ac24011659b511f74993ca8f6e05ac3f942c3f296e5510aad5ce47bcccee32f413a0904b839599f850089eac5077b28ff5a3bcd8c0dca676b0af1ecaa10106fb5ab31bf8c7e752c34408daa796c60c3a25c55280d3e59a67c54234de0d524263c16b4814b12b1b59235e80d354c69cef134862b0187264b889d62508dcc460b4cd8a1d7144fa0268d0bcd69cdac16e05c44c3c9dfe1be2c26d403b03293366984b952499b6c475ba246935a507692a4249494ca4207127289f1709d5d76ceb1a15b5c07fe2b32e06db40c6e1c90750a4cd81b21664024c6fce25ace8fb9041302054a7baf4ce97dd74eb7d46f3375facc1d6ada90c8b93b55fc67f814124488f12cecda03b7738a7616c9b1529cf6466f43759036d14b97954d11c0a0355d008c669762e1acf0cb139d74ca456416a589356e50232f2646419994608c35ab48686adee524cbaeafb8740cd9d69b741a560745f803fe99ddfe1b188d81d72b12e52b702b06e69e3dca5979b55db3b8f371c4e9c8ffa39493bb31e4b152ab069097e82be41d0e73ea23171956c9fd3e8d90efc7f086339f5841bf65cd8b03cf5c68a62b680ad05c88180d784c78f7628c70c02e57719ecb197eb08521d02c1106193c38707a60782160d10430ce1da6e6c273ddd4a2a137a4afda192e48826a0333c8ea72fa364db273e401ecc1ebce1755f23f523184f19e455cf98bb6e99bec8e3a7d69543862ec840cd46531a66839e3e247810ae13032bbc959a2abfd548a28e0c60e2d66ca3783ea8f69e64e588eaa68f75f47488e22cf0e600038abd1b8ffdd31617777d95fa0932934f318c62342c8a14b2c1b416ebe0084d6894f9195bbb5b20915e3b9a51ed835727598aff65ea1f8a5ee1abbc47594f534528cd148a851752f5e936fdc367df3379e5f67a365021810682e5ca9ff0b3693a554052909b83fe578f88013afaa9550d062c71882eb5d7622b905e42673286d239d2c319f795718e608d3f5b81b70dbf0965a6c644b6beae609b48f0a9ec5b485b068095f7cdc932a1303be7d4452335dc9d3efb31b72f39f0048a5580520db33959f73b8177a96fc974139d384e2517ac028a812d2a3d0e0f60533f233906190cd57d10aba912c51cd2343c07e4529a765d5486650422c970fb61efb5798a808af7305b27f59d2ab035a372b2bbacf23cccd8a241ca283b7bb82f32b441e6554382169ad03b2a436a38120d8011709dae331af190360c021a3a9baa2297d50fc073141b9e7928617d0efa30d49a7facf839b4f412f7f0a6f58d06a99535210be1bfa44f4a4227eb72ee2f4ad7a4808d027e288e806ea468efc22e5d2197e7cc19228d98ebeb404dac6123bde8220414847bb3f4c80469519d8a30f44ab5c05b30e921d576a13c2d3ffad31bea063ccf0ba9f7c2271464f04651d0f19477df5433ab82467083bf43a4a3f141c57d6139a770d9655a4c8aee31cb2dc7011f8e6c84ee2219ad14d2d39014f960a4b777dd8255b1ad646e234e856ee5586968a85ec455dce808c85110b2dac92c323f172b610bbd9d691af5900f6efd16d0eea0dd3ea80ba15916cf5e66b38750863e7f060f41104bc248b0052d5a4e979bae7e801c8e279fbfda06f352dd745820106eeea18be5d5a9a4cf39e7dac358041b6ccc24acbeec249f5931df2de9b9858472fb6314206bae2b29a3e8741b89ccd5ae51ac00f18cd2335d991f54d494d11d95cbda0895e8967c1e9c530ba55a64583fe80b48de0028ff0ccdc1673ecbc4149da5508d47f08335a626ad0c89e512328aaeb941f0af30f5de1a0efcd545b0edfacc72ba34f63b1478b277327319fe7149db34ab4d33cc63c0c5d60ec5b3386e01b85694bc0faab5e9c8a21181bf14238fe4b29008e2c76d0f0a3355df636acea93e282609b5ef1476d9250e89e22038c90ed8464e290cfd16297acb2ae375e8d428a2b905556cd88673d4104ce8bbd76d55239e1a7c1a7ef65fbcc259b5d00290de77a6a8227da169339f3e53697f9afe5f59a0ea6e2f539c7c1e4ebdc1ff876c5b6bb340e929cf1e119b6625afb7466deb90ca729095b46e56b4227a11459773f73c76df3fda99484080bb50200429c49351a28927005274ad1281aa0d078fd6192d19c6840d9c601d08dd202f1a3f9add2fed7674bcd6126e81bdb2febc9e1c3a7c42be16fece97c46ee6f00cfd3e4af69128ed34006e8b5a4777652973341652887a1f668d26d9d371cd3a336b8ead4fd335acdaac3eb1d0a0cd43f95bafad0c5e7b6b53b549327228d056f98584008efea1897a689343a446ef66c8072c39b32c073bde9744ea43116a4f6a6005fb90259ee1a5d0d01a85831dc2f49fb0f3cea5f249912a117a6db0566bf0f8bc8131e8443fbc2cf67c552b9a3fadf2075ac02dbba54e631700bf10a4723a25156a4ec404d71b053c0d3742f146a343ff6e2a579e794fa457bb92caf34cc6fc5b26aa6a2d837acd8bcd752557ce34c77558ec3f854f5927b537b767d4f0b56909b240a089b73e42fe2b6bcdb48b594afcf61acc1140660a815b1810ac085c93522e44a321b171567580368c58317775a9e28fc105210a123c4ab27c091a04f6d8f1e7d6ee4a584a0b8bbb3a7404fb7d0ed498f61ac1851590ddf141dae6011ba65704e05cfaa7f6d7f538309ea6c3aa4795016d794e6da3e62f8039197c27f09c5d349955b053188fbd9ca43da48028840c283d55abdc702c261d1dfc07f2381dac08c2388098f56e70c6079eb4ce0996c8f02cb4a9f923e36b75e7e6c8800ba5b65cf6fa58645e9eb20b19839e481a86fee77368082754f8e8fb2b11d6e8ed336d0c1915d2e130c827c10f1ddc52ee1ca1d8224283a1e78256ce4e44625eb6749dc7b503c1562740ad30a2b52f6d6bcf021eb81c8ec509666caf1a51cb149805269dbc810d27fcbd01c815dda48bceb3491120fe477b6fab4ab69f3add839633e91bdd2f4086f4d5ed2d24a1aa7f97f01e1338ae542a8c3bb535a622b9da7dc698b292d86f975fad234006117745998ca59510cb0f475f9483d067acf8e76fa7e3877d5e31049af4e1b29b0a1ea78c79c271dd72a6d3fde3e27d61f51f4f85a4c471b4518f57000932247151980d96ff725d1684efb8320bd82f7cc1618b9627833da9af22718966ffa8f1df4d65b329bd2a3948baf4d0436b13d1df0244bf4b27bff920dae1d2fdf8c73a353d081b84e3d42221cc3c5036122bc30f18b0412366eeb006835dec5a0a5b1f7dbd4bf2f3d57eb74ccc110675b897265c1f79b6afb8f523a1c1590d9dbf5bd5aeb715e90241ebdb1d48804fecae9365346c9e1ec93fedf9502558baf7c882c5449eab2a6895a7872bd0085de1ce0d9f14d2fc67a8e4e961736cd8d367dd730fa494c6ead2ccd05b6e8b2d477c52f8f11a73ec16b1a4c10ea7919591b1e72b4863be4a45cdd23c32fcee3d409ff505ff3083b4eb240ff4075a32dea4edfd2ff7ae381e5da09501b6dc93a70e3c36dbf1cfb070e33e002d11c0658750b2ff9a876300e888ce34fe1b539c276e89470c5e8c7ba296c5e8d9f03b276d4961817e008820593550defa35341a7cee9ddc1cd7f3c83e6991f1bd8abef871cf2486fbc247baef46bb41f1e0470ccd9dbdb87c625a46db8551e1f76d5ce6598e6b6d168ba9cf799d67db9d5f210a831273a17f26e4290f86fac2e373e2ee3a167b04e2b16e33d6da23b16e0e68fd1d1f6887b823267cfbee5114da6d2d5711c7e4ab3eb3fe4c05a30157c625e505a4800698aa7264cca43ecb5d23557a6f92ab07a8aa7964a23297d8afd6c1f7570e2b0563b2f33d0d7e4f168f411c8ded71e11f4f6d45ca50cbe150453f43887ccd0e4a04ea0ac458dc7eab2571354fb2658b3214f2fca889af6ea7e4075a9af1a3663fb44905c335ff852c431671a7a9d1ceafddb78394b647522f0e406df03de26a1e61e31aaef966b70e851074857ae21cd136dfb2ae6b1fdc8a6b86f16cd9610e49b76b55f68ac1f34b0d793f036e8914949e9ea5b6917ce328a8638972c854550c3dbd99a8edb843ac96c4bc34701e5037a2160cf232e389707dbccad3899358463299034a99cfc5a7d46147fd58b0c70f1280925587cfa75e285627056e7cd17f8392022f69225f84195bb29dae37407c2211cd3514362093358e577f5e8636bcf4cfe671a09bf6fb09a3520c457386c5a4b3755e6329313aab8b5bad3229be3386e7320874bb4cde1ffb5f4244eff8d4ad4077e5b9576991a3b063fb24bc36cb2abc52acd27294575a4726b4fb90d59ed45690335080bcdbbb302d601164bdebcdc06770a38f7fc7e615ab1e5d58711c3314b6daedf69587f003413c8ad9d2b9c6c709d827755dd28ff2ce70da2dc83b7eac503cea8f225f4cff91c1922cc5e3a80b27fe0cb088b245e86fb3da3b70a1f1dd05b45feb19abe2f17b580067a0db019d8455c0d0ad51b28557c89b7410951cdb659936565de2c9a01344c3a1055e17ef496ffdea335a32c860e0ac1c375ace56d7f31c3da8e70c4ea7c7fb004e7ee02dbef809b28e975f70e8cd6148932869cfeed8ee8d6d877406079b287af55e7e193c44118a0ae027b591eb68125d90266b50681be974e2eb7e949c93ccd2ad500bb10bb0822f2e2a270d0712edc8716b8328309823c36caf38943c8f6393772924793734122d7edeb0df2201c2ef0c2e58e9a630bfa9cea989d7cdd318dd04fb23a6d45b9120e4e7ad31535c4772d4487b40c704e74794e8d5bb2ba078bb1f61cc9ce92febbf0650bca7d1d6caa40b0e10c38ab6191a2613a7eea59134a9321ff615b7efdcfca19082efb63aa44864753916dd80b25fbef5b4c8878060b73394bc1bb71aac8c396c6dd1dd726a206c248d86db8285c59051e332c341ad811d1757387b771cf5201d9824f150aafd6929ac0f852ea685e7c083ccdbe0b810c924419cb1da9b000af52a76a1eac1be25c5019a5af7020e42147b53eaa5d59539f6bd3e1b5db8adac78fa3699c3edd8a7b1e013203d9923567f0c31555e0eb9a4c149129261b0e6864d8877fff87b7d42ca0e406108d8b6086c26e43310fda383fdb7dd4b16ea81d74b6198eee79529a953448433e2b53b06040119bb0b504a0d8f732cc066782fe5b38be1f6e624a17cba4942098591ce0f418ec38e024252ae7b3e07b944b45511394b4eb72318940649fbc45e032f36192e7f8307d76f2a76536b9ae9839ffb6d036d20f7f61f4106a115aac618c53748b1fc87cf3ce29d72cc573f7b11e8232b7e9d2e7131c37a006ab2a946aee270450a0dc6a9e915b4297a47f8c91c7543a62b084e92f625d76dca9614a5def7d99c0690b4918172f4d6ee2f2a72ecf6862a6ff6b0603a4c3c97c648d6ba97a56cbaa95972381d3a4d5cccfef4447b1a9b57b2e9a8d1886324f573da82a94544e4b77296d65ac86aa7c0ed070feefc476a39d3d576c3dcee6102fe7054d70f9f8f30a61ad671045e37cd8ec70df72412f7fbec12f99254f566344c66541add8ed80dffafb124177a7e5b1bec3a7e92f374519717ad6198a349bd3a9db3e6a61591caede525ee8d14e03a535d97e1df1d0e1a19e252feb874f61e68b935a15b770c99d134db1d476c4be5bc876c2252adcd6883c1b588e3b2caa8eb390922826876fcb2f661f429690f64aceb8b3bf4289b65940b1565ed27ffef3996b6e546423a6948ea54379bedc998555731295649d4ef60ac4a2e9478e40aa1ec99d559aeaf18109a800f102d43393e4665a983ee1e06ae9d2b860f558feb28d5cf51a1bc57b2569d57b656655a23e70d1ec188cf8716112f36553acfcd1045b69cd7fe554a3ef0a6381e9c6143c29bd2f1fdd59c47e71a7732e8d89c57b1dd9c77a6619cdf2557543330f3ce79e22bce48c9e14fc6a3fa63da4f371d498718d179d8ac47c480c113f184e95a5bb1386f12eaf56b150b59328631a053a3376c744503f99950d2b3bdbf269695149e5b8f19edf1a98dfa40461f38623b2c32e370f2205586b64c16b78cd1911a67f9ee6af24105f3b7edebd61ebce3d41c79753de117dcc85f13eb31ccb2aca86960b215c7f0d916cf7398005aa5c20e37b468edb497b65e68934fcaba6d753918560d3a00534086eac49bd262875ecf829a9738ec446786f6fe0758fd6085e17e3e9993c951adbdf7905a9a597ad8bb5fe620ef74ddf84ca55ccf31c74acdac7a3396d81b7d416230b26261f27cc39767a7cfe938ae7c0a3fead0e53d94d8fe10895b7ade1fa2b691ebd4660a56e44eaa2b41a6056c0f57297c27eaf8cba2b37e3d21ec4a0d6b990af53e1e0599d550dd43b68b593e882f82157d2465960758836294a4a19653790c8b8e320aaf9321e7887d1e79a8390289da816b309a94b99406dfe52df3f71122f9ebc98aa09e5c20413c22ccb203c29dd960daf3180761be9bcb323602e5c4a0f68081c60fcbafa68efff7c5edea6258557e14192a6620e6bdae3c6989656f1262c40fe08ccacdf88428371129679a333da355a084155ebb8ae231b4b6dd5cb9693e609509b34406cf3bebacc99172211486600ac71c9775f3a143557c0ec3c575fd76506bf813828c89a23190274adec37d7e04ecb2be3037f4fe7a5855b72b33aecd107a484fcbe96a23d8eb355c253cac72e2eec5f4f277e6fc91341ed759492e42847c6c36c5862a9f8564a45ae0ab62db8449b35a48850bc29fbde5995c741276d6d202e33808fcec775dd4a27d19dfa5f8b5821100dd12ba4360cbfb0f52c9e59d6dfd5a897e2dd69bc664b826e04f7328c2978b98276f20328eec35a6a389332c77220f916381a078f826e4bdb6cd8405a39deded75b7d3d55608b883f777d02e5a628d92a7150a7a4ebbc915302e7888bb09438fd97ef4dc04f8b5f42a4d9803205c9d63f09db387dbdd5c28f70ef40c685c110a791ebadaf3de8b13f5b654670a715d7bc56d243abde704d23f2a590c373142d922600f1dab359e4666859d70414692ff387179e870352edb611ad6dc37da81f7fc0d539d1363d65b2679a737b797eb699e3d2ca21c4c423b72ce33074e5fcfc9287c330ad37868c14e3e07c3f29f9701c0c515a50c14e2d4916b55b4b7e9f3883e66c301e77a2e51bab52319d1f0a54ca61cd891209558027167cc7ab503c57bd5c5387f4cdd12835a44f902d1ba54b2444c46e76c8fe78977db28d54ef3873f50152891bf666ecf16797957d44d77b5eabe1854ea144b9c5ef9927e41ba0930aec1c0cfb2999c3f4ca8921de18ea4eaba31e499aa1a2daa83693671cfafd98f336f18545cf24650320fcf2df2df25a06379ec893fc6a0176f2ee5ef5609961413af5b195ac12d062dfbbffb598b020998ec1008294a7c4a84d9ba9fbbbcbe4f98ab443e8546302a6fcf6a9e8cd58c6387ab46522611459622c527389d42fb8883b656edae87bdfb4dcf29342c99861f9a7a6a76a444c11524baa3217add383327f0418d452c46276c250457e6b9ce113f20e9e38006f4062319c3b2f27f82224f740fdb534b8460fad989117fe46f250144b09c4d59442390bceb9838432cd5634842f0219799086f0017255c8852ba9c85a72bfac3c5284bd05e85ae8e22decd198e1d537775abbe0ad866e07d93b81c0de38e45d4034c117220643c6e8d180575c4e307590f2781e32c80250068c4e38c9c5add718abdb6fe6f84967d399e1e7fc202dd870f75b4c07755163cc41583c6e3a652bb3be78884dca4c67803e6ca01f0c16bc6564e3aa8a97b4d42d3d94a49fb80b34aea489e62a3d142cd099eb40ae059546e3fd673e620e78c748bbf0881c275f7567e548cdce05db4878cceae61dae05eaec41296e807d709ffc29c8d4488d2d2db896c2a79acae25d8cb20eda0e4520b870733a636271fe91608bf0d5221d4df74dd7ee2dc9cd867d8795e1228cefd8d21adcecd88efcee33440c5e69def5d2e5d22faa2bfc6e6e419607badca9ed05b221f17e1d8c0200bf345014e9b916e0b14410269ee0e1a81a9dc9cdeec084144240e6eea70fb3f8a1f72fa160a49e4dc63a887884b33c314f1fdd9122fd37e8a790f0d558e0d6949ca0e739e7c9f24cf3ec7d483670958b660a59e618029e3a0448e014e64db26778265381f6ab75f8b3735509161b82aae222005e9af0c7f6d175288967e9791b63805c25fb1cff16f0eacfa5413bba65e99d7b48c90555c806d4f8153b40dbe1add5ba53f0c516b4414dc2c0dbd0005d0fa529387161d1d268d4904b0fecee5fa6776df4924231adbc6b8103ef271ec5f2d83d7a1e5b100f702378755c296c9c742786326424a07ac2156c9f1955f6c1d2eede724291e7f34644e18b39267cabf556fef6a172b908852164c5f50a91205cf8a82b9b4512085de19a072ea7a7209af27b76b677a42f1952a91b819cf4812ee13139bdf5b4cf808b79eddc9348b8510ed0d7f15ea7ecfd10cffa8aea5a709d721b86ad8f70abc8c159e8097366e088c0d247c917d47102b167d401dc1bf31f5c91e9610a94cbbd7d010c0540f94fd9509a1eeb6147deeef6f383fc7c4e5d6de52be4e9e7837c209e65e01fe997b89ae90e4d2a406947dd0a6f2ec328530fa4b9f012ce5eb6d28b3f328db895ddbe5fa805eff733db39405909f5ba1b64c168671f3ad5a669062d02889983ec8140055ce7f4231d524e0a433d0b669f831e9744d47bbf4cc9e5ba6985f24b455c67c8a7a26d75fa0610ef927d6e5573593960f224edb4b8e2442306236ce7a68fac971c14d6224fc254f04ef5ac3c1ee85ee263d9551359a872618cbd75226664d5011d0436401364903c1c1c40fd1f28e8575e8d1b9b0d21f520465b69c70bc268faed3bd935f96958abd23c8acd0cd9375a06b74375bc4ad5aa163bacf9d7d1c35ea63394e1cd444cdbe17b1b897a102ab18ac53baf952cc8615c640591d0cccf232f7b8050cadb0b648972518deaaf6d3ab55295b280bc4674e39fe97670b2b4038b4488d63bc81eee3ea15491e2db5e63a6e826e5b2b109d37753412f66a40676f2f03116c9aafa7e5416506fe1ed1acfd493ec5350b58a0977d01e1833bb3e57707d37f0946423aebbc6e834d8f92df4e04a5c6ecabea74cdca57c039a8eff0460eb6f594c8432cc7972828079004301a3dc4faa382a8611fb130cf85dcff5da06687702963075d210e34bbadba835f729db7d5401556f9f466f64b57f76ba50c51da80dbe3eaec440b0a31da31de8023bc3ac78035432a54ebd2a6203bc81ba8493e18f7e284a85848c2b5639ed64a1c86f3aad712cff830653d4040c5d95f6d11789c322902059f1160324f0621641682a89572e0da93a0dbdd2b41a2b8a4d230405c33f11026018e204d665c3db11eb8b5aefbc170dae870948bfb7c4b5849ca9e1426dfc024999a2da08602607a983a3baca18976dcbfd20509c0d0c62d97342a623c3118274c1d5764cf4dfda3b2c9a40311ca3599ca7d55c4693bb6891d90c01ff114c67817293ab62128e8c000e26d0c3e37ff4ecee3d792c21cae44474732f0cb5ba625881ee7ede1e37134bbda9190348e8bd6989b31b612f461b172512e85e22000c7edff1465ec540863dcda31a509ea80930e0eced89fedc54d2d8109cbc6a2706b9f5278c9e5ca96864954e1902b3236e994e47bdb87803596af00274b9dafe870fb082cbdd9a921654d11a7295c23b9fd12fe00353c60c99fbff9905f9534cc1023d923136bce038543dadeb2243cbf73846c005af53cd04439e0b95686efeddc48af8d148484501728338447032f4a84aab864f94ded0c88358290bf3c4d82e67dd7fcb13695fb2515b2e0ffd1c5baf6d16f1688aa5c905d4692128c969a928366b3e0ff3e0be66cd3b70f69eb2656ebdf0dd182c417844e0b747fbcc0b1aee32a18e295015a1568dd752ad8cb801b14b4d2cb3403c1e56cdf3c0ff94e5486d0b33bce85388426a964a3bb2cdaef5c550bd4250c74de6bfa67179f957209cba89e6dcf0a2e34b6286168d98632b483e244b7a1eacaf44d18f6373ad8a59bf9b988f03011433635b2a42966e02fb20a6b1d991b87ed79eea51eee102b08be7c86924406076fd474af0480709d2b0e5701552859406779c28f00955d91d66fb0b272b7f26cdcbeab483dacdee778b801ca28a75d05a55698cfd454a367bb4c10e50abbb4d071564a58b360c67815c40846a07c672f8ff87a851b5e5ee4041b6c581e966dddb6423b4ee82c13b97c107bc968abc5af5642104d5f304c811f9305055f02b6e6834680789244b105dab02014c973c895f44999c4c181803e197b38bceb7698400d3d08d0b752de417dc7dcbce59779a54cd67fa3671c3c549fddc55be1fc1301214329dca1a4c7440f36a0e97a0f3748b486eacd36cba1a4bcb57165595f99878c09f8896589b2acecd54ea47016fc8682ff47105eee9f58a44f762efcf4914b85cd876d5adec18142a89940132741075e0988ba7251ef757769916d36b4dc1290959400c22e6e73952042fe05f303190fa08ed401d123e3ef0efc78e521b74269710c5438079f3a08a91dd5d28b61b59d3c724241655b8d0e7334fc172774a2070fe7579cd2036145fb5693145e6b2376123c63524a69ae00ed9a17b5921b4844d976f87cc1dd749d4bc5ed3426c3a2c7c29fe248469d48622f349c6df09092f1a77f844ffae2c65f8357173cc6c71729472018463b94746a9659283a303706f3866f11477c6c67339f4708afdc49420d32e1a83cca68913c1f05d29e9b245ab44efdb341c3df63f501207ab3094a5186c86425f6ae1d1084f63643ea43c2a8f59c4064a4d93a0c373b73ff7b717f7fd7ff812e55963bf8d69b59913cd26174ca1cc3c968b07393e00ac4bef4a271de163da5a4c062d57e8cc9230ffdfc617d1a46a3bb93787f67c0c62f66db1a534d412540e10faefa315048c4c330b836f4c72ecc168838d8a64929748a1bcf89143432413eba8e876323e1995968dbb5198c432a171de01ae9603f43b74aa921520f9660e2e948877167d41987acb02fc00edbede9b8270798ee90e30f443964727bf61d5decf60f1f7ccf3d73bc07f0ef563583e911b486d93a8273e7fdb5c6d495e3e7cb341c6ca430675013d3f2448363581ca73af064bb7b5d2b3c1b6f5ccda1c4f364de893e53edc8f7be65ade27ac561c5030198ff55e82b87b64bd752a4bac4c8aef1c8c23da05b3250eae51dc01c4c3270ef865db9855f4ab0083ed522129bbe3a3dd335c48abdf37216ff1b63d961e82a1eb60bd02129bd11ac864a5b61b7424a729eca383891a7ae276fadc623aad901e4734a5c875fd81a42530a3384ad36b1743df4eaf21d16dc2b1312dd392aa13e16be2b1c18f8fcc004692a2d7753f6c837e3a77016b23281878ff8ba41e9ef50fd323778b12c26a371ba8b61d92f7aa35dbceb4debf62618687b329077e0e81895cab75316ec8971bf3416d03a9f9f6de7d36773f0f3278f2fdc46256b274b96e2052f6c5fe8ebccb3885e419cf9f02195a668541102f36073d1731eedf2e9f4cc01386f0111e1dcb4b7ef73803259275cd5713b0a11e70775585dddc5e04ebbeb91b6dc08d8aa9572f4383d9997b63e72c5febd9407a1cc4d32b70b08f1c7d9b20f4f343c588b00020904de5dccbb1da89a8de9fc3bb1c5ecfaedcd8a75b244d299a5cd4d0be32108aeee972abc45f33ea97fb4851a440b05285494c2820704aa3ec4104a64b2ba1a69e3d887262d22dbbe5bc5fd06a934a33e66fba146520ce0a7b4a633d8000ccb6cf46bee5fc2d65e88a75adc76b3226fc7898c6c10dc04861572edc9ffc9b6a824bfe93fbb13711f7c5048ad93feb28a195a4f5ec37ed5203480071e7ddacb6b787ed9f0cca89340471fc889b463ced976ccf1fef72bd53be77fa6ff141e698ca51aead957e4e9ea3c3fe7c0ab194f6a1811a44e380baf921441fd1509f0bfa32049dc46478a76944f56067257fffca1dced946eaa37cb7d5663ca10a6c96f4f9c35c3e9cec257fcc917f06735dc2aea7cf9a69557a613c02b27c97c384c84ddbc1b666382481d76c5a016ab1acd5c87786527b635020a7e2536c222298e3a7212d1efee1fe6124b2f13bc40194ed8563096ef7109e0242751310ece64484f5ad547780b8e984445d762ea94817bdd76640bba7beaf15aa188b310e4320692a34f5aa0b86dd5c57b0cb94062240a6cf76d54f95774c11761959365cd8506ee3856ef3d4a41f964772e2536f2b27a2067dcd9408f58d9a4722c9695ce6a56c538e71e6fc2775eb1d722e256ac5a14bf8dde4f41ab6640076ad525d1c1da0b0cbf3135567f316cc3fb6b98fffb1a1bed7c89d0590d7dcedb4f7d8b165d64441df112114902950b9b131040ca6338b3d4b2ab8471afe236e9b4959c79d3804c68e0b14899b6257820dbe44c70276403105cc8b7c3bdb24a2ae827071a982470e968c7215af5a3c77ac07f229a524c894a134a02e518aded7aad9d43a4612bea7835ca5c96be327a627dfb47f4e01409d0b7cbe57085056f0cef7012c5c819ab1a5a7016052bddc800501429ace2afc08cbb31db10971caa1b0d009955886574609a8b074c2195d94823ea975e1b66964b96379a3e2a4c64e9f5e0efefd7322a01a9b67736803f622135ada6ee8ab88324b1a44449cf5eb5cab966c76bc96329ff9b46e7cb4fd59ac141382d8a21cc01067effb3c2055fa0ae801a83320d59b3dddd59506edbe3eb9005c6f86370152b52b419decf4d65e5f314a8c32a7964cd9ef092c56a4454e459657053bcda0c15d4d498e1b30a7b76eacf0a6ae193964cde1288db1328e47cebfb1f87b1d6165fae01861b0781c55b9127dd19f6c85fb52abe7bf4224e72db8900b820c1aab31e312198e566576a006e8cc937eb2b59d61cc5d5ffd517a460a51bb30efd4ae10e9560d05bd30e40e5cfeda33a4f4a8ce6fdd51437b337b02d3e9b2f4f969216efcabe776a9595fa011c83c68bef6171a5d4915ec364707dfdf5aa330c7d9cd73b9021f11569560c1a4649645ff9fd57ab544573d56f0863aeccfb244f6855dedc5d29d9fe4a15384b64231d946d574e4d4d51a16cae88ad0f7251bf63fac5afb285e0702abba83b105a56462ee816c0472dd523233fb8d0e91e82defc3c41916c115d67957ba474c51fc137117a0b2c213db45558406c46d7dbc7094e9cdbece9cf37dac96d5172adeeced9b19deea1b8e39cccfe9f14dd9361fc6bf7178689464ca055e01da89e78a36e12b2eb54e0c54734162959ae60c9ca386d6cb8901d2928104421d3a22f5c604e4ffef4dc69cb1a4474964bcf5e5d2fec7386ccdb3d9e1991d69264b7a5fc6f032ea8c6e34f9390c732a06aa3847bfc92e724bbc7dd2f3e25145c2bf2a35fb52143fdbc8b56d0c3b2492593811ececa58a8a254ed000379cffe9560a2ead5282d45efcbf82114e4b2b13da6456bad2228eed2f253b822771de1449c7dab22f876f35563b86006b0f7915aedb168400a5533f109324b6dc7769e512b00cdf80878ad4ca92670294e6a4796832fed406e6eb6ab7af5d0adde0ec184441bb80a5e1ddfdd10c08975fd61b27278c48c5c0b640eab54d94ee0c9923d483679c140ece55825f1f31c1d5dda8a2e8e30fcfe3ce585cb07a22e5006a69e849d4ff15ea4c2871f0913b11e0cde6701b89a795ef70f0aca066c0751608d1cf35374df03d1eff0db4a75222fa00d2070dafd77acc2c66351034443dad36f085b3eff57cb82acbab056da09a3dc3b198786cc541ebbfdd340932b4297e08d90b5076991ebdc6109126a6d4dd814e23bb7b2fa757ac30bf7ac94fc0813727f140d32521d179dc3a3998da4cd19a7d419c88a76822e4e69f4936a0a6e6f7f659aa0cc7946cab48d6492dcc9bd89b29f07f739d0fdc2361f705aa58b4a9f36039b6fa1656b04c9036737d092a43533b0d5b65a952c988e3b62fa88a7d330178ca9575f15bf146faff97e8db831b05d7b1b132f874abc12598a19cef01bca4f2641f4618484b8a1b8486ab32477095aea742076992d25599d05add6bb450b5ec3b152d2222c2f8a5527e1075b1d401016acb28e76b9233d9fba9b01d70bd2f34872300c99960a858f492bd891470fe8e055049535afe6431619e64324f9726e1bbc5c8a82c7b9da2e8e1d0b46fc52cc9b1aab007d00e24309916e41f06811f9064e49e4df1546382f100c6c2ab8a714788a90dbb0addebd77d06969c2e690d864415438ef3b45dffc7b14f365cc4b288f57958867a69bd6a82d5d63c033d5c847dc4547fa90feca6cfcb34a679aaeac614ce91ef4cca9ee4d5d245e3e75e97db8f2125f0f182a09e74e241dc44909c2be8bbf6d87e0651b8fb74e5202a0ca3e40c6bd4f5382dbe923489fa73f767374466a2deae9353953896246c853ab4831a3f5c80ee96022acacc107a4486203f7cb76e965aa29bc81b03e12abeed3bf7f1d4d28d768fec150ce35000989a46fa21c9c0228513242890fc8a41d72d2aad1ba0329db952df1754a29858b44e725bb64b143174d4bb3220bddc795e14e6593592bab3741ac5153595caa51af29f5251651eef20b1787122b6c89749c97f7561fe622d293cfac17894c55aec140fb6d1d33aae6abf3b0d468a8c924cf2a28dcb4e85a0780c681259410184cb243e71f713aca1a95d295a76cd0ae08283dccb829ec005963c14011499b26de15d5441c607cd3a2df833331c36190d190cfe17204fb59f16dd9b5db29eda0cebc0feb7ca511bb05916154d3d80d3f096f26c8b0711e16f59bb244a26a86dfc88386e0a65e839d61e0a05414cff62e01400e33cf9b8a52b5b0107ea669028d90cd1da72f8e5a2e2469bbc7e6efa4d20151b0f97a0adff8d8bdfab8475ae2c0898c1291f06a3533bb06120a1300abdd47f1ad31f52773c6a6b275676cec7a2cd201016e93dfa723024e523fe8cd06d67a303bc6c5f4870366fe5fc12b575b2f6e728b65df9731bac8b513b162611bb5d9918c1b2fadf54042feeef517410b6a5fb82a923ef39da847273314049960186af1c5aa451fed63b5358f165791b8e9d56e89b4ad35eb7e33c5d68f8562f1ba6e22eadd9dfef6132e023ac027c1459be4d66ba99b2d3436a36270d1cb54de0335902f250fa12a558cdce851b38ca6ed7a1126754463d170031cf762a8feea510416e433627368bc039939d62262c9854dd6be57c78376813b15b5db98bb7522c933bf012dd6a8af114a46bbf8ba537050e2a24e26118aa530f330f5b6384efcf9d720696ec31cea172c3863b69b36ab3766fe8e8557acd1e1e5efd3ea334656629769be0a9948d72bbcbc2fda88569188cdb691254c441fc5437e597a451176562166bd76f3021a2acd5cf78008d6a9a88fd0f8592f7d2b11440b941c94e3605d47863c9c4a73a8430460f37b5fe20f6214795e341cba56289060f5745816b45695488c2254b00f20e93d8e8dccad7cd5c439568159398f4ab7e72ebf116a25c89020bcb06ca3a27d911d39d7fd6f752c1b770a415963912d892679b331938359670a7334a8da1b00daabc9558cc669c95102ddd08143e18914200846557e259edcb3c171b81ad1e985e26433af8f855ef4e1622a705064f1c724c6e4e45b7047e94cb0ec0ae933aafc2045c4022c0be42d071f09a05ad31f8a66b05adf2ec3b45c3e1075ee1e9210e5220c2d2aad5cf86e2d0d4d3afd10cd1d1c74755de397e16a00a3656148b35c6875f1aa816b4ac5b9baf5b451b5d126a573c107333e1d14a7ae5a041dcc24f5f279c8225493f65dcc229d55bd2e8ed6b59c7ed3850d0d833a17667dc90cea5683908aa8b418ca056776f6e22ccaf30ab96084258fca29f7afd05be30a6e0bc4f2656e599b08a8346916acf3721541e807f0893e1c87a91eb4f8c0e46331ae24e36cafcd625a19fac381fbe4b685890449ef317d9090fe55feac4b2bc28c800183c5638ca24fac40af56c246de6d0d477a2477a33fbed811005f3d6ce130983ba7ecf1c8196d17a1c172a3e7545676b35665aa580b52ca75b4ec4d6cd27a1eb492b61fe8bbfd30d4940fa7d034bffae343eba66823c01e4571be5e0e9bc5fa021526361b6c204a6966013d5acefa017b212360575b3bf66de09374a8216a347ceb5a16a16d7489324f0d5bf5dab075d89f589d23d28e8c5d1acea07d65db201f6b3527c22efc0a40bb1590453af6449148512045c24d655d773f04cae908c47b8f20891d300a15344a95ba2551b8cba2baec71b52ea947a14f4663df764c6bd1e6d01dcb18f3e655681e6ff8dfdcafafb618aad9b71bf5665c5f34052bbca2614e9c6865eef619abcb7f0a38a7a1960781516259da4fdae820a02d8110066c097ae4c9dcf5c372252e2e6bcd7c6a3a3e25f0f3d109e12c96be0039517a3e932fbb6f918ba06205fa849e4cab7a3e0f51e622924fe1d1dbe63ef8bd0b3aa1689d6e1c27ed5bdf52e98fcfefb59dcabcc2a36ca6c4450099471f0756d81bf47ce364e01d7e17b99ff35e477c2e259f9685946a1ec82bd203a77f5a1bba333c99cf4f654863691a552a7a2ddfe793e045623cbece01fc8ca7028c863b16724aafe05d7a371ec1fa1162838ff5f92c80fc0049f0fac6e9e732e9dd758061b55e2cb1fae9795a2931d94162bbdece13e36f8339bf2b4a04e733c743574e4bb2a324c492e8d3a2376c43fb0f5c10bf49e53b063ded76b089afce4c5848fc556d6475158297323d128e09c71fc4d29abdd9bbe7b7af42237939008065158fd25c129490765b9969a93b53b2a657fb463571311cd5ce46f97c0f0e77bf5515eae34245d293d343f629006ef0cde4a30fe9b381248c50620e188319d804fb1a4ffbe186720f7963d46389ef7c82ea0d4661294153c46dab162809c333bdc30cc4b8a8d7d5c682294ef80e5c644f8acf7e764db2b118c70e06b0c33e6fd0f9d0f052292704f7c892dfab92695e89378e2812b115d7f8d5a6f12559411a3c004e6b82ace2b4cbfbb50fbb7bf09240101b43da7f3422a03011af8199d894d557139089f5efcb44f47b70a00d6465b44649e4ce1f882106e9f59bbbab797e09a5a65978e2205e6e312260c6bd294f40ab80fa3f5fbd7e068809cef90907fe9bfd26abff9c16204cd5ff588676a75a6a6c023decc00ef5d6c66e9aef78a295be4e238feefd3f64918cfd4b1a459ee23d308b1356410f1add5a90fe906100e0f4bd777356148884f41d9cc9cb7b5e68c777a20712e0bc30a0b327bb0f1214fb0731be3a17cf34c008d783f3b9674d1855a17ffa6bca91f434c07164c1c47ef8ecc950dc32a969985fb87446e1248e579584a67b8c71411b3054df73b443d2076e92febf913bdee597a3575e268f8b52b7a50331a170b24f15e0d7ba00de8bbf3f13e2537b9c9c4fe8aa489d234b42bf9e6286a743719a2b420cf0d8114528f8cb55b0fed76593a794d6fd376445beae91e6e744ff72b466637670d4ece90e800e13dc4da88a24f333f03e868c4fa173e46a6bdf4800d2f247d86fda4fdf3287a909840ab9f202326ebe40d413a5e9e8a2f5d49a8d8462188c019111847f3059f4ae540ea5a7dc9454706284b2d64e0072098f5272a4d5ca8ae120a01ce228d3dc9389a024e7904a9e3cb5d3bdf581a9ba2d77f4128f277b4424e0fb4a8592476b61a429a62f86dd47fb8fa1af19be2d2409ded1f00759cc976087812b13e280a6296c8c02f4adf8b20664821d68622d0149d3e24b3dc706439e2758ba20b64a18f2df0274f0c78f570cf567bafac55a37b6f1ab698d7c31f2f4dc5032c25994dad981395be7d8525c45ae2d1c29ab010c10a8cadf8faf5017593fc8ba1240f79c910b71ede4b0a2910133250e2b56ab087c6e58d1f3e3ae7ee0fb4b8a0bba556c19494062fd81a492d0351c644d5ad39d638ef55ae5b9a2ab3a7acea5ab3dce323207e2936802a9910231838843516a3581c769d08b3627e6c298e31a570dcf29cd032ea09f674bee12945e151fb0e80ca8336dd15438970466c938c0a3ec9117ccad9f68816f81e4dee5cd33f65fb7e1648d01bdf019fcf70289d3f0bfb78aa43681195b30fc6dca0a4d4593b4cc83190ea12db2ee712f8cf38a1019ed31bdf7cb30a7193233d4ca50afbbd8641fdf9e49eedff6befa5069a7583edb751e2330f6afc8b7fd5da5a5ca7a0e67e389057d9d4715ce4c92e58b29854ba05532005d9e70c60db00738758dfcf658345423b257ddad60f19d082edf7ee3d74e8415c0b4333fbd81085bd276b0d58e04678808810c77fa0d67f1c946b0bef0ef03bc6ebbff29b779c485c92751479bc8340175925c9d0440ddb0ca8b30cd2acded73f58df89d0eb7032840705758abd3f5da72f1d32a20e34864fbd076b713ca45e00f80a2081274fcc694d7a90a83938ca3ce05f9e58d06a3e13bdeef050a1d98058db9d932230913ec8cde83350bdd041197ec675302bae1bd173d77f82522f36fec63eb3eefb68d7977712ced1affe5399488f7eb477b6d66d6fbf689665d0e80c01bd621ef02db4511101d2575bda3f6a8eb47ad6e981db4a3aa32851cda9d78be01e83d7006a84836fe6c6a660bde2b8596b2c1dfa148cd6a48e7cd84173d1b54d8d62e5a4ea0dbf77b75348e4ba09e8c3d01e4ffcd651ad36e6321fa5ed514b47c748b1b30b00c07142f5f9dd5176a0845a274fc7f205b8c9768c23dbf336bc409d25a47cf88c62115e4871bea19edc7a47847555b588ce33f4cf62adb365da4f7302cb526b86e02089e8eb70ef34e0d6c98bd083f12e2c5d9f6fd9af9bddbedc322dfa5de9ff0a670ff01f61d1d9ee22909eb7a5365ceea7f45f2e3d7670624d2afd7f5801699e605c37fb673e7cc6f11e440a11c117bd6092f78f5ffc444e2aa1bc1019b586d3bc59eec80478406a6e0b318c780780f55c7039443ffc4f774375046fbb789c763cd04860155dbf8e42371650d6b6b448525640234ef17d654c3e36a4d21009a569861e4a9bd3debd0fc309fd674435c0c6b78f69e57d5847c8802c2ee1464ebaab014116ad521451a427e75a4b17cae03756c2add244c0f5720f3f22891a78729bc3cd67959758fd051ce0d5549c0752f9537a66697e25bb3231071f6df2ec424983b74cbbcc48a08dd2697a3ac72f8c79d8c380c3a636c887d0925fe7106afa624e5dcd1ab10f323301735ed173f7288a28d00ff23da56afb93f188847fc26ec9eb88795fcd79cf981afd5f94198c4f89689240d3878647c0de27c072b358a78efdfa48407516609ac78503865565a4bfdf279d6c29ea538e80696e018e865f12a0258ce35816dcca5a0f7d17230a6467b1f64739b80bda85bd8343fa007ecec7a59e9ff0840439414fce6927ce5d49f6f156b60ee96ef39de922cdaab4ea2d034129d5ef00fa9c161679c2c76380f765c2b56276adb4ba5e97f4c2273394fda2bfbd2fabd550ef2d47927d84486c5c5f9630306599115df1690d10b6e36be9aa3c85c11bc7d950046d15d3b2d03010e59d0bac6cbe6a6697521802de61888a5df5ddbd61077e2b82a0de70e6d1e324d41f1491f9d0408cb931d3393962bb42dc8c866746903ecf555321be773abb8a4427c5f311f523abd00fef8dc0522c408bfe6a5beffd92ec884ac096819a65eff7d16324cefe2e6e0ffcabea70c9f543476d8731bc2dfa99d83c7f48938b704f42cd01b8a945e4a9218a3f4c18658ccc8b608bc3c23371275fdb14a033bac4397cfb48e119c3a3592b02f80d7d363e27ef2a6194450bbd5cf6ea8431b85b3d6dc60fff907dfe6b11e6d8923dc58d5a07484b5df21e9f5f4423374552c1037bdf2f43774f42c669723a55610a9e0683e8b990aad5866310bce62fbca41b7a21c7cf6575ceb312c655b90f1769ac45ec0889940fb2f1303d9e356420ad782d23a328e52e57b9980f0261fd9c05f08557da4e129f3d6861bd3974afe9b0e41da638f93edafade4274a14ae88fca246d32e028de30632727d875aac8a3ad2edcb7f6824aeec09b9408f327f7caabc0bc5e95bba94a45e4f9037e2945ace972717367f4d00ed0a18824b002e426dd1b81f02ee19e482bc66c72979d9841a0ba4488a77a338a0864b7e809fc2be95b5a079be23acba28e44974683cbfc20e554f97ea8e0173928378093f8142c26ede84c87c2da81b00703b4ab7b7348969e5116e89dc205a406970d153b9190988da07bc8524df0e1888b462a92c24abbeadad147ef2a713b9568726fda0b108c92c76e8236b520d545d061e03b33b06b9df3a5b3333e688069c86a226e691a1f500e8868e518da8a3235765b078c31215b70b800a10e7aac45c5390a39adf497a28cead7a20b39daaa45616cc8e9aa4492c29b4f1050026e5631405886012bc091074ed2461dc9a97f31826257d4861c32488c9488d1837b69337ed95eced8057a3ec234b8a460514cb1c9312218d933f6f51b7f2c602040b42d6c32391f487c952cc040bc4a58d34145ab1bef145985ddfb5ffc4c2ebdb676d9e6aaeb18c7e48a626120304caeb32bf46a0b2528481f4e588713b613b5ba70cd1ae048c9eb664c15bf5d561e1c6bb6e695a0a702c674d732d052b8b352dac6213a739eb8a91e66c2f55fee8a44ac60a39b12a41a15d651e16ac311b922e9deabc30b4c225488c762e60c0d34e5b922ae8644b0f15731fdc0bca6085432f9c7cb885961772c9e3450719d753e14a64e22133c4a2e3c4762ec0bf08da0cb303e5f810bf858df84760fd1e02625d9cd0089d9fd4e4f4ef0105ef2d6069da7531fa6d9f257e6b3253633b578af602df6b76a9578102a8965abc5d18429fc9ae27587082061386ac090f97e92ff9b4d57cc71aad202ce75253a14e377f148573d9c21450a65748ee9847162c94d0bf064c0931b26dd70e2dba083098aff7b487454227557060125deb2d9dbe80040941b79f32987e14998e90d770652433a04f4ec9086192aadb506423dd4c144d6cddcd09304725b1c67600bd64edf3dc95de4fc5b3083be09c291c9b178705a8989b5a1c6958b052c96cc8bf6239e421ed22f97635dbf1e601225da7c64bf7c9a3c41b0f0b1a23c24d024d3d492c5446153b2034b770eec377fc39d93366023a83504f31a2e6856d69f9f54f30bb772a3d63f5705c53dbbee9e73a786c02e1c461c956ce0980451071860f294b83a2c26a0de652f71834bc0b63efc03169d7b68253baa9b06c95d490a3df696c705b91f27d90718592c1a0493c829a08e78c175638f3e30fed63dbe405c7d6893e74dc8775cde2d5d5c3e6e134619b2c3498c1b7f02e7fae22273f0c9dca31bdc419aaf9ddf7c6d394dc63a7d263e3472187a71d0aec4ca8747862b94becc4ac1d4a863290b67298839383d62849d3e77e00c63011ac51a9fdece2fdf9f140ae094a02dcb56e9cac1f0dc7c895fcbcc9c97a16ea1dde59639d08f69023c8bf4f4047e72b4cb56d250c89996dbebf1c7258de2bda84c1828de37235874197f4e91b2c4a6ad2a52ac705d6cbf47990cae88458a4350483301b8bd10a488f3dff1204d22c9158b424c928c7494baff9a212ac5a7482eb501c3bb40b64c2caaecbb704937534726e1caea302a35309eb1731f58cdfc1e13de4a303dd46e0c00ee84634bae0754af7e053b0735cfe0b425ca65dada6c55a5b283fd629191f84727a467c9c572dcb53434a3ddcd56bed42f6315f8d54ce524c059e5c102ea9c2a770cc2e13491317576bace94ac69481dac83dd824a17879a36e4a600fc2c4ce7bfb03d9584943f5d946588b59c4a5fbb8c15875a9ef7d8b57d068d6c3c4e6c14e784b4c441232647a453f8d3808493e3d5a05c77554a021cf4798f4fb5872ba9823e5561309797e50ec1f8486e2015ce80ff409d053fffaeb5b7f3deb55310c3528099825d8d759f4b8cbc662042796d73368da12bd28443f41b6fa6b2fcfe0a75f087a72d40c821c71d60abaf427d1e9cad7d382a2d59c1fccf12b8fff72cd1f64380ed025613f17cd39df9c2515bb3ccf4a2ed0531cc3b6a33b66f19f61dd7ccbaf4661128a1c8ce2f44b449447b8aac2937feb751ab0d5591124e96f3565599cd2a137cc23b14268dc5927bc6a8c6f2b234a6b55096261a695a47df3ab004212a82e700b11777951078bc64cfaf0b4877bc7bf3f40af60af317f713fb8d4277e7cef1d46cc24296a940b07080a2f2c61fcdb75d87b47e053be3fa9ac85ddcb0e4aa5e7f4e6ea5a157bf4ad17a091f5166423d810c9a72efc9dc98482d8fb2820eb034e54dea6bf0306fdf55267d2fa5f2e86f999abb29c803bb3e44d16a48e946de568f8fcf9dc20ecd7c0fb16967fa85754f45a1f66a36544001b5d3f063a9fb0628cb488b0d1f573ecec91dccba5a210867052aab25d14a237d24155a437146d68e4bb1c0a9ea8062830145f9e0ae107358c73fb4fbb98e31c61b662f26b61ea5d79efc86debae18ed0f3b00be606cb04119cc6aea7e21afd55af9ee1bad0f9d7828381c1163fb89bf84c63a6b207911f75870f797539745f9b3712cb4ecde907299816522c7950828117ee457f241daf676d156fed051d76de5d69be0a2ab3283e554d16debbd77409be330111eaf342d1f245b818d5a7321828941e85bd415e8b7b9e4e8e92346698f7e533d5b085f9e65fc85be4f9433cddbb6c94982f01824f215f772b70433cdb59f6b7067b118b86d81dbd70140104f69406ea169b241e33c7a85e18aa55d368301decb831dc02606dd89398897450abf7c958eff14a176c0505c44c7f577fb1b4020da9e416b8e9a463f3dfe1a1621f460139c7926ab724d1e2f61686bb3a7b4bcaea105a6aa712912c2caf430424bf892d5747d720fc596724477bb0b683af4d0adfa235c2824d389f138f2b90ecfbaf21f389ce908419fa90ed930135229c15168fc6b0949d13d47d06030add10c211dc0a17ca1baf860056ff088b0464c1eaccfb1ff9bcb9568ebe3fe199b8801fe25db7ba89eda3e64ac84b9b87db3637b083793611b6f9ea3f2cae6ca99a6b51371a8ce21043914577fb5c96fceca56a4bb8bc941d3cede83583ca626d14711fab0a576b3f35422b1676b40d36538c4810fa23c6894118762ccde000336caa0c5c9a4781e8f784344d8f8d517c08a0cd28988c6b8a38188a133ffcc04c1141003b7b0cc2d460fd54d1489642df7a24598b1e8b370181248f17b9c017b15449c4c8098c0e22cdacb4deb6a98b4f615489256983a35ea022521f068595533c052264501f641f10d11354f35f01c5c42c20527c37eae922db72f1a27835f3402ed9b4260d9af9318cc9edb5b5110263d6213fe381607de9f2efb864f0329550690982f1c84510de932fee0d50322553637b9d098fe9d6db4ec7d7032653ae344a7c3c50ebf07886ba3735e43111a3c70fca8df4f64062d3a819fd3d1c06e4605c5541f2b0a65f602c936fc5c7058487ae4bc986a6c3e78afe8b3a796588a11e3b3906087fd858351385f8e9a51a25c759eb36ae7f5c21021b02439334067606bc90e26baf0407c1a39db43afb939ab4e1602c72754b75318805dca6151f824a8211bf89fa54c0ea82b446205a50539aeba47f138ad6e7e3554b41ccad3e577935b518d1e0e42dd09130642f5429d6fabd2d5b3f876b729408a5d6922e9d8a2a080706b0c5d2ddbc27b9513a7007b08799a5024176db7bd9f8665a05dd0c58c7e34086a82578fcf5f9c5d5157293c572d69c9754160e48af75afa8fc81fed1951d3d7fb644e06382074b8ceb780357f55502bcade8c135bc40901fd13619d530ea003528794a01a200b848cb17358234b209ae3fada9e6187c70f65de20da0aacec26d129c00444480d774192c50c2195fcf55add394330622fd1200b8e1af56d29c7a83e08767e665526fd7f041394beb3d3c6e33a304995b4b12344e0f802d8166b05ab0e1b7d20b2d316c0928ca2f931c41862c1f42739c6781bc3cbe58eda7efefabe80504eb0d75e4f428f82c92e7110f76ccfe825fd1a4f9717c310e504eae2068927670b176f0f3c51b543e394e85cb363a53b95c639c30aa790b24ac02cde24ee988b50c99b55702ec86cc911491e162e354c0704364e37d8da2474b7afe626417107b918a9fe9e0fdb4fe8e6c7c81db400dba8ac4fe80ccd0d4bdf0c32d45d6aacf0b565591e001f65d581d12909750d726d1a9d5dc0494a219188ca8312756e0de574b76022ca91f594c47f8034205d340ecd216eacf6769895becf8d514e374b08007f45b0813365e772f438404067954560822c35aa80180ffe048270b3c56ff7b279d2ba5d54bf0b29434d7d406fc685657d791c5f62b9b5c87643a9b002bb996cbfb5973be53f68cb879d292ecb669edc1d275bad87ddcfc17d5467fa019fb416facede94c5022607cebcb52c26cecc633b3b4ebf1fd8f5b42b1b0b2a6c6431a043eb58e5ac4dc7589fa57c54360e2f0450f18a81db48e3879012d093009ce12f7511c66e4d01118d0a0e44d604ea2bd5c48db876a2479603c701dbf781c8dd2954861dbafdb462283237f8cbab8e3d1e33f0e5be48422eee5521f36206024243f779ad45b0e0d777e3f9f76bc8441608d586a0aa9ae80e26aa9e537e8fb6eac0c39aed60edc79472bb14b35536f1f1a8ed75f39efd571f9df14b7dd4f653d7b934afe39dee818466b82aa3e557a388df9ca27d9f67bc2cf74103f140bb429385a6d4fbdc0236ddf5c237ca5d7f6c249040e2d781e80df695c934c85a381460a2450ed7f735b568c436f7a9ac0a72d06e1689f008e93defe4e6f8cb1f1ffd287493941414346fc0477e7983f4f2820a18370d5d0c85730c41713274d5477c16ae7309473748d2bf764e475fe2347fa936701311a21f57c8ed8dbc490c9566e42e8de5c0da3c2f13d6c27be6f862c27bf0dec7fded835fe6c9ac1d83ce81da998191de69b5d59ced72ab72039d8dc15e5a12a6386193e99f29126dd10fc2a43b6d20d5b8fe96a073ce7be4fa1caa705b105a6491f80d6d6e2e136560b492e1507005687371b9a5f99b8c9c5dfe1540681b782719970b3326859d39d4e1c4abab38380be3f0c91fd4fdea22cb9d62e57b843b9780f36aee681fe642c77577814589b2903dc83de09d2604bef611f84ef1685a6a114d10fb1b456dada4e1b36bbad3ec46c8be2092f0595d1380e97bc31375c4b145e86dc8fec4236bbf397880e2902edbf7b23e020c7b304b818e02c04f5d08dc7f923394974d992c0fbf45a4847f532878528ca78ff3dc51d271c8c4ac7c83e4c43002988c1be288285f03a8443eb1bcc29772e9ab8ca0ee33a379b812e232d56ec2d2fe0e57a9e400cbd87cdf181b52be5e0a0eafcce07f66096f0963c487de45a12e7e546896378045ef7a348b7872e8593657e60aa0c4ca5d19b5f5cd97e35d1075dfe63f4f9e8d158685079190d91a1990abca07305060fbe8918c7d9d60a11f6f42bde2bb9ac3ef8e9ec6a1d5aba95c6866b30b057380d8e99064e95ce348c589021bb76f5015dcbe0ac1c1948869f00324b2c91eb13391cc3b33cbc0522641efd3e4f005c1e5abebe99fa4194e324a2b798d3582c2108740d6167bbe9d4b5bdc11755506629bc15c69bc50e9631251fa52b9d31dfe0c137bb5ebe4a3c6a66ba4f6f858098d8c4297d985506a718d1371ce127c27f5a1d8798ee7f3cec39e6aae49ca66bd55d4ea5fcc5f86dd7063d80e26cde1c39cba58e08f1285173c1cb9e27319095f4498e6e63e1ed2022186ae840429ef46deb89855dc444f75860f60321ec5e0d01bc3a9fb85c715f389132dabaa079eae93ce8e5cc3c9182a1f1e11812858bb95802a82d78cd9c75a24393fc178f0226dff13f8a54c811599539db0ed7ec584d9d98eec3b92d5b654b66df7f58faec733621ce9d657bf7ac6d9706c1dd499fb4737a137fdb3ef2d1cb10c5b0b016813643433c7dfba4a9ff31b04747c6e918f4d1904b77195788ab14a21bd9c934c786fcd7c5153cb5b2b54cf6406a15621f88c315ccc3ce9412619dfec4028bb4cc7bd06f48ac4f24b91e5787245d8b5a1a64ddcb359385dc29d70e89c52fc76da0edfbbc58caf46b17d2418ca26847dd2cc535dab82154f1238b176d0a58e01135254123d955f3fa55f3b13d8cf3a96592cb2ebe26c44a4669abd422fb2cd06f49f949f853405e141050e3917d4d8908833e018ebeb0fb7e151853663ef8e0f6c7f852c3ef16aeb09f917b8105512d16f199428a028cfa14940d3597bc52fca87ecffb10ce42e76cb1e788340782b40945fb89fc09f0663288e105907f0adcde79b6f2a9f6afff9b50e6ade2d83b3d243a10dd2e4d37d2a51bc1a0be7ab18992a3779e368f507e89afa03583956b774f2c19906805a67fc14bf1a0b031accd0310406502a5de1d6dcf80224a51f4286801f8e338b38915ffd30d7945fa6a74e1f799c0d514f092ec0f5986f6a0e7fda742d1581a6e7e13f0dd5c8855aeb322c2efcbfaee70f5928e007b35f4069a3ffe4806faa93ce1df823386ca33d7e53eb9f574a1f05cc2b4494176d9d229d2b81fb87158dc5792719ac563aeaad81e5acfd265677cffb203a53ff5160d94ef961c4d6b137bf8e6ade1ae56372981c852ae871e0fc978cbfa03b9f039a941427b58c6eac16e3be1355e78fef410ae601628c8aecdecfd3e2d444da447b819752267efe167fc5260171cf0dc01e1120dc505adec2387564cc1b7d4d0c5218024e0590eaeca56a7738d285936a2366d3e17ef76be11783f4dce967ec57dafcfe615d97e8abd5c5eb9923c0c4877523692cde0efc119b637f19598e32a35c89634fdbb17a480171dc813ec5ffce08ed166857f3a25e3ac92672b38eacf2ab04d7a3c65bb7b6708c61300b572b4b55db13a424b515e5699b515a91f9d1da8911e792f7aa491cff73da5980edbd872f23d0ceb6c85294695d00d8c3a6192179bb6073128e963d520f88e843c262920c9ff6efc3958d0dfe241c53c053b631228fac37d4bc1d73a51cd85e8c0281e4d9ff0e294393f2aed4646e93d2025b34c5df38d6d879bf6058612818360143b0396bb1bd11f3b775d761da3a55fd6e49e87b3bcacf2f11c99ac5c1db94416df57d05f17eed3efd6e6e1c5a2505bde5b15591f001ad546e3bbc9cfe300cb385256da180d4954dc8ec9176a63b64594bb2ae973f931feb849ecee110ef5e071bf17e2e86a614a13e0d629da0dea202a1c56a8882edbc563cd5ade801d6bcccaadc5d402e6af70d9c0a0665fe980a549f13e8de6931f821f931012d6641744a49fb2266c7340e3328500acae1cf56ae72ca115850717d8dd7de2327b7428584db94963c6fa13c08d0682c7bddfe448ee80904c4ed403811a663a93de8baf61a5cca00c0d69596475ccd31b8bcd9f1ecd97cca6ff6e7a196c5d9c9de26e16d925a7f1ec0b98b7616305f4801d838c47fc99121688f5cb8dcc99b6baa8b6551407835ab14021b1cd4d042980842b2d069149085524e2c4a00527a29c6b45b175c323cb4b3aeabbdb3312a92de64c35c7b82386a81c483e0c94f041399ee1001e909d5eff14c54a0b5c071947a4beb023550c08e02fe3492b71da4e9fb0a3bc584fc1b5268b84449632a843149e0a1e90b7681282c84491583f2b9cba80c009124a805e59879f69e8f59c92ea63be9ea94ed2efa30d6004ab52648f555cdb8c0957b7249ac0ba6f9c0cdc356c4c31db6291a4e46dc493a4e0a36ecd7a59f9d51d2840415c2e10da2becf465557ea8142138237c4565de19995b25ed3125f9d940611496d598826b3c6637e90fcab3754069a9a06eaea8ba652cb76d2f1ea6027f905d46e5c91ee6aa2151283c75bf2455b5bca9b38638f5614a30de601f3cbdc10ace212ca56c664df5db63d9d9a539fa9d559bc75dc47e1528f30c79bad4e71da3ec3cf5d352a74ed98b9e6d6be4e3f5ed519fb0f79beaf19080a0ca7e00adc6e0b095317627d5e6172ee1c439bd488eea98cbcdb03be635b417e3164e8c1b581ab2794e0d0c327080c389de0c072884759699de66f54103252b063e32df024bd5187d19572bf748159bf548b36a53f1b16b47d051e28d260cd8de180a3d9d77604e6e6b79c7e49bbc773c56afcda162b2c86421b4a50f1b9e7d9dbef22a255d502a77ae6a52cd9e81f1e48d080c6c2ffde761725056412c4dbad35c8ac48ccc30f97d1f23f4052cc6d043cb4715889a0028422f2e574473dac98a353a74e92f92d14374cb1b7c9bba6f5d597a61a2483ee30b10d4caf54951c45110e945cb468bf6340d902873335cdfc72b64aeab6a26897366aec803b3b8721d1220c8c815e3c66d3b6db1ef6a5ec3b27809f2ecadcdb90d03444b893090b60ceff44f23df68c22eaf1a809ebf408006ca833da1c6250788fa1a2ad088ad93655e9e7061a1b0536b2c895300868ebf321013982e5e204d9101692130725f373e2c0ad22806bb55007fb2b45ecad20228c68b0422afeedf154918f5f90e2a9df89bd993a3efa7d555e86790d8406ed30c63f5628c442f2a61c2dc3445d717a938a09dc882d3b0a8bd650028df4ea2c7c31beb3d25f291ece9bb0f6e9743dd4c40c4ab8addb8d551acbcd7257c516621e01378de825fa9d3338b83f58edbd1734f6d9441e1774e3112821412f1bc8c745d20a9f492c77a47d27e38f2c7b6cc931ecaa778b2841bfe2576f35bb4ffd8024b69b1d92649a6ee4ea6abb989232fd30e6b78507d4eed0451f1b3304b57ae4d01034b7b97dd6d5852c213989f8463a20d1ade6ee38537332a805879b7c871f03ad61bb5487c58789820d8edb0cf0b61f2fa45a03553a70076151f5fe17065caa22c6e28138b93a0375762e6eb05f5d7030475ff5ee9af7e3263c8ff339e80d349e254ed3996c61dc0dc4a5863c523d2cc342fa2087e2407caaab261b8f2543b776968f5ff851926d828c515a3475d03d86d75321ba5e9e8bb343033493ccdfeeac01f1af5c65dbf482f388534693cd30065e21b1f46934ce6012cb7f132dd8507727a186fae54100c992b2de2e6a504867fe7a1eeb1f8fa2fe1140490f50ec1e6a5422da42c07d848d8c25d51b42ebdddf5b753874cc5de1d6f5d759c3cc4fb7317c9a4934eda667a2ad79d77f28609f1ff0eed9914bd53ec6e00fe470b3e23f68cf8724a5be13afc1fff7940f2d7de2309d6051559c7b8f4128608edd64d6c8301c9323397824cd3442d495399986b042304306640aa13ecd047dbe3b6e9168cedd66f7ed3881c6093719337a3bad3b71aad2982ab046200985b49113d9041fe1a3b7f985029d832827de0a93b53a298ed0c04899cbd3ac0f240d4615d6558c539bd7d3b11af2b1a21b3d3320c2d99d52a2da2f417ce2692b7366c4f1826fa51dd59dc8b84106f29e7c636eaaedba24c3c5edee54e91982bcc15e114a949112178e52586d80616d32a034f141623f5c97002a1376dd03820068b880f62dbc12466b4d3e23f5cb989215b6f62a730ff76f6e23e31bb89bc5b15cd849ccbe5c1e918de6dd9abb19b6ae1d3c13cc8f85d9b7165cc072503acec761371b8350e40ae57dd50ace3935fa353498b3718a817ed34ec5c466f60f7971329dd9f462b88d64124411fe2698edcd7207b9bc23e6ae7970106c5ff81a75b7eb519e70bcb4e7c1fdda8c08aff422ef4e7cdb6ea2045c7d76251116ea3beec259ab593a1f6bdbd31d5768b128c048482ba30fbc58305b72aa3d4173124b4a8681828d78af94b1449840168d1a1176ecd0152458b7b6287be401591f5a32d89bce08bde186c26f770843fb7ff2f165580050121db0e87a5d21d48c086585130f23c40ffba8e21dc0db26dc06bff6d154c7c5508c0880831e77dd0fac79eb72e273ce5b8e47dc1acbdfa205cbf241fc2baaf4d971201debd844bcc5a0a00cb69ead8a4b7cd990c1b11f4648906eac003e57ce60b5fd420287a5b3480c3555b0436b059f9a527c1f8125d2e74c4cf2f80a6027938c462c33804ef21c29f8aa96739897dd50b453eef1ba380414169c005353e4b5077cae9323a165e0b24ce6ca02809b5da0a7b78788d080a6affef8d1457997db0dbf51c6c47203c705ae28106ef0020e6207f0a18898eae4c3ff9b952d78333fe3515d13162ce17adfb0b7058afadec09c6b2a1d20bafb50411153988850f4dc468634b69969073a6044cfcb2ede9878f4d098576f2f8d3ea126a9feba89ab3bb1f4a5f77ade214311b6f958691c8b7d9357295c37e576608886bbb44a85f7f3f9adac275bc03f60bbb93c81b1accfce5f11eb4529c031f8ec01be4c4d12df4f82d41b5e2f4c927750bf3a7d5dbef0624b1e1796ca5f0c0dda7fe1acd55f434d6fa3265b1ea70c2088030a9038c2237e033ad5b0d25d9e490243d09873e0cf5dc7e16f9bd18f9d81a98b59a5d642a41635529777883112aa1534af46eb7ff69187680ef9b51f08b0a34f6245bc174af1845ad130fd0cd443dc735615f70d1de4f25014abd69a16aad63d177963af57c1855d9846743067c6d3d8572e2e4503bd803bd7aa74f1e6c21590f74fc25f3d359f5e94e21c09dbc0284425c645426913c2df670e228f118e1f08a3f729240224d83b2a81298027a838b7bca5bb6c15ed8c62b1880e93a4d4015dcb7ecebae6ca7326f6f1c6e60559c97ba25bb896a00ecdb2035a5e48f61fb86eeb7a30d3966b4e378340582ec2ceda3205abc53a9c39788dace8304a1555f5e7446bca7981082fcdf40b0d7dc96ef6ac34901626964e6ca8cfe2df3a6bd98a7c9210bf2f35e88fc33025f425e95a81306461574065c47731c844be13a7b3350aa646c84d68053c43a208abcdd3f9e98ae0d69a738c094b4494f8814e5e20b70ba215ad0a3c5b356849c23252cdf48c59f9c8f637c5f252621ac804e3bb65973662c71ad88f65d6de60609b66bd498742c345a3fdfbefcca3ea17fea08b523434832cc0af596943f753575dcbdd72424b2c161469df895d1a3c108044b31a17b3fbd7fe6649b37acb5d14f7ef74a72033fa8de86d8ab6356f3582094262ed22b8058c2956d08281fa2de07913ce4cef4e63643c7fab3e698e85afdadda95e2d642d12db2b6cd383696cc08242745887ec1e96abd458e88c37b7c2a0967170afca35e8d71b46193833ac6096221485eff68ef2fec55697e76c0268e6963fe2fb98c6df8aa13fc0b77d3974d870dc1ccde350690e65e20a533f621085bca0639235eee34dd5eee15b6c0f677255e08a3a43cbaa7f0808561b271dc2d9e5fd8aec00e8845aa58a31d6f64ab5be210754f15baab3b9ed808aaf626106ce9279b9d7d101386f743e9397e8f825ae23a4ec37126c5914453fb37b18917fd8c5ff05ff1eb4765d8aab59ddff1b622e095bbf33958e9aac8f2719f97c735160887f9a6e2bff17f237fe64c9d6cd45c857339a01bdb58b4788ddba83f0c7cb8d8135a0d3ac99cbd27f5fbb6660cd5f4e5abc9312cbdcf43533f6d28e6cbd5cbc7c3b2a7fd6a5bad6ae1cb799075cbc1839f69e373a4b3410b6a68dd31ec0b2f774b7179cd0f554bbc92390022aaa8d79425018e1b3363e181a98718f1f24db0fdfb1995b9ac7a4cdbbf19ffaeaf4bfc1d7750d8d25761153291d942f376b2f8032d45425e44da1977af90508c73123f206ef87ad13202e6426458ba6e5e53b6d51794bd5b131f4b2dc1420d7847e9df849808acc8f581736490608f18438c5fc5668f8a6f3eb1b4697cb319c0910fe9c9771efdce5c8bb69396008c4bac089530ef3914ab529d3834ddc49f1d7e2c55ae76752981465da27406efec95603461725a8c01e2f533057344e9c5bcba8c3b86a42b52f931bde2ee303e7560ad6c3953c5bba5bfe292a9500c9b2c554361fbad27dfd5e020c9df9ff5d2ef2ee4884527636647b1af8a93989b1d1bad3547aab61191e2048717c242f64bea6890ad691dc93bd9e0ca43ecd720244a9061207acb3a1a5f7a117126f155b461c80e10b9bc028b137e31d005c72e544d61bd36357c99be48979d1d5f695429cb8d18b57cf23874e9fc04baa203ef704d1960393cc3ec89533bafd4e355f5802a85b459a4bd95f745c9a4b4106d55246df1f7284c5ee6468391251da3d2ee3debb42dd73514418116b48e756a19ebb5987b50d7742871ed56b9f61152705bdfb74f7ce76af1ce990ef22f06eb01d6631315378cb79a25eafdcdfa407c966220e869c290bd9121e83963f9459431e39af896eb465a64d06795fbc2da28961078609299d578683ba40923a72ac120faec180253b15662d4eff3c26f4dba162deaa30461f80f995ccf875af039d7c39b799dc5807dec407827b65e471f2fe119726ede38360f6468fe590de98425c9504467fc5e9b95efd4c3d020f386f639b6d169e83505aa700221463658dd39cb28156b15bb68f2fca0873e988e6d6c59fcb5bd257f6290f0487f8f72ce51029a94958d66ec33233f68e0300c20bd2efa85641d948aa606b08e4a08680eb3103c1b81008817e86d377a3ab4963c2a27f8fc975064aee72c336115768aeb38688ba375f298982e7f81d650d739303cc9106c6a8d2c5bb50d9b967455ff958752e122210556d10112813d7de1ca7f2ab8c98be2d8708b54186e98690fc4c3c82e3038d78e8e7504efef9eae272ac0ccefd6a8d0a77796797b4de942ed2407c878f62785ac0e47c7a1c7bd563ffade7de557f0c1c8d556c714cf040daf8ce9baf59bec8a0df08f6942efd42cb6b960073b21910542aefff2f95ed1344f393819a6541dce364755d96a448ea39860370b11eceac64725c5d963e635bc5c6cc78c238d409112eda03b4941788767452a40b8a24224a40044b883fa18990f59fc919191685bc022ebdc6ce27c2cb6bdf451bca54c28e02baf958676f27d793688477ff23cf67396effda4b25177e4787b7614e91a3490e8d112e8b6386f1a42904bd6e82e6c420e5a7a8a47f00814333891d15ba50907d44dfd07e5948ca83497fd72a35c59677ba6377523a069f3dde1634777720f63be7e64e05a7099e0e5df4b2e0b9b6ba12ecfee3051ae49b9444587a40f9a1906e6b6b5662cddaf4628e71e8b243bfd0374515a1f813ae11e9f90e5f8af4e6471cb8865fbb235cdb6419fff83b87aa872b20a2954302109c22c5dea547946c4aecd10921a5994afa90745402ac7566a6dcb4a6bea7d0cd8037e759f3ae73a3c1d7790af50a66ea1a3e30db1a97cd006d3eb7533ca8247e56c959779f8af90d96c08248c6b402021450aa0811a0070abc130e42f2e550554a1a2b19359127358ed977d3ab2f60d8f83f5b25cf37bb69b29061fca02c4404b751210df809ec01bb00c2e5757d10316408079bc4e85bf17ebd9a4e12c18f463ae5621f27fca6ae5b7f7cf51238b0b5f89c406c14105d154e075aed1c1b7a55d3d1108d778356b865c699f2295ce269f95c03d646dcb7baebd8f57b191577e18bd15708b026550eeacbf832f779968fa784725abf8598afa911e38e311475ea87281e04783594ee944090d4bbf05eda1be6b0d5a4d78cd617b8704d59e6559831ce0a03e8c9d02f2c718348cfe05928c6ad48798a52dc781a6ff4d0f77cb29e7c29e06ce1b77331f9a3700227f17c49ef28a5e5a645294137c6b8fcbc94e2b9e4e37c24d47b7212587df7dca4d025b8e5e1b4dc3d01cda64b8e768515447dc1a13f444a09ee9462048c7cff465341a7b6342abc002c8dacdf87ded672af9996a5b7e1cc167ade9f00ff3c14d44735a5b199aca4974c5602e4a349565349114a3f91bc569bc0f025a270cc1e917ee97d2a4a7c88d6f4c3147143ed8ca3fa83399d3036e29b2a04bed81cf34d20179130d32d552ecf9390a5b97bfd43fc87ae7ac006db80be7f3c14c864e2bfe96617e1dce36f0b9e81e73151971ab8570635bdaecff71ae9ed207633820f210e96b78b31107a7dde5c737a9bcbfe770865a45455f68862622df633937f320c297185090c878308aca4143fcb443589cf432ce545818c307ae40ec54bb88049aaf1ef1c0a516a207fb45441897ae5cecd7025450b603402e9230da5dd46a403707d89f6899667b8b54e4d3f4fa3c897aa1a5dd78837210ccf883901d908ee393ad5c85d50634b2d3970801c9a47009e60c9942ae5aa8aa1b1032110e7e6f6045870d848655ed30200a084e4289cb6d88cd72d331e7f980d49e9eea9571cb87fc4eaa6e8d3828dd5088a31aeb00f9b54a1e30808c7cfff43e2913d2db4e95fe35e9dc2a7bd12ca456dd4be2f1bdfab42b481c3f68277a25c8c88227751aaa6b579b695af5ccc64e7d99fe3fa3828c77941f509cb0d00386be34d604ff4ed6e66bcb240e8e6dad87fc2631fbeacd17e704a4539f46823b6f006a2493ede2d0e342bbe17723c01026baa38f661ae49fb7666ffb04dc849f2091693e4e86abd3885a401d14f3ad6ee2d2aa47bb794c4d526ffe57cbb465723797213dfd29d4c7c3b7f472e47ae6817150beefd3677fe0b711013a96ff815c17913da54c813dffaa9b3e350273e19a9171bf1cf16a771b2902c50fc0157c61339f19f5a4d2970086a40d58b8abccc335674e71f58a7a03d0bb842824fe8efe0cb87f6bc3c15fc56f21c92cf3c65ddd36ecbf84aac59bd5e15fd32c00d72e02f18534dd76dbea2e59a2e6d4a45cbcc7469736bcb9b49d526555a4ed3ba4d54b4bc26659bad6c3999acdb4c45cbcd7469f32b2daf49d9a6575a4ed3ba4d54b4fc4c3fbe6ba454d9330d5f33a5da671ba6764ab4cf1b5e4d4a994dd610e1258ef92e5ba65b347a7bb1279d2ee77133f3f215ef72f8b9c94ad7b5463bc6c37dcb0ee332a3eef524049f7446e1980d532afa68c7fcb2cd543ccd451e38218c371e4ea84408269492ebbf8deb8d47f4bf56cae64fea8f97accfa29706b958a548256cad34398a03a23ce7a0e7326282259c59c0ac39aa9f29dccea70440c83c867f5d4d188c306bd0633aad4e236dd6c5e496534b1fea17ded36008670fb145bf124ebba4c7ac5c1240ec7558b00220050c058b62382a445f830a853dc83032d4f7bcd648660d660d54e16292bb74e3775a58629c4c5f0ae79e68c807702604127de6a36386ed4e08dc2c194ccf8fbb5cc2d6e47b1b16fe764109b619b826a1d7e9de982ae1f437cc38a14c8b5b96e2464733c71c37ef3f323ab5d989ea6202084e0c2be7d2836d96bb035e0885eb6240cd5d8cbf6c8d7f8765ea00d7561c923f57891367236595d42531f6e8ef1ae74ac5fecd55645ecfc66ad32f6fee812e269c1ad8b1262621986fbd386c5933900ebf767882ca3d32ba7a8a6be82885ad1b5add9f21cd0ac8d39a8559e75993b0428ac8ffece91a4fbbbc44c9044e928b463898026f804353318068b56f02f168bddadc8e9de91fd460651e2f430d1b4eb0cce2840d1c46f01d0178af535de6f5d9896660870cee164d64cbc90922cead852ef325ff35d362cce692060625931e168aa4152691f75a39aa09d614c9ba486da9a3c5bace5a236e9402c1063b9823d0a778112946880cbb1fdd64d3702495f02574c23aabc380f86a0214b3fc1d2df17cc543f255670f24190774734c49f3ce9f6e134610abc4d2708d762b88ebb00441b88b0a1c0a80ba2816fe64d08b2c451b0e1b858cd8d42ee33eb58c0c3877c33e637a574d50b2f7b18cbd942f2d775f2e1d29b5cc4aa8e38deae42481f5b30f79d3b0dc820411924134edeb7c52ead07f3883fdfbc5a7c540fcbe09ca813f5e1dc6cc1d50c586dd5c72306e1c19ad81b2b4ccaf1a7c07b2b919def564eb1b8ed7263983dc8eb76068503bcb00413e7d5e7126015ec82b590aacc9fc26004a25827ad3ae424468da5fc503fc664550a216b8aeb20d6f788c206911c8843048a7875a6ae58bf677bcae60ea4016e0691a876d2bd71032419b1fe58c983838c81cd196700d61a9bec3790333d7d1c5f001170c06efed0d7af770f2cdc3cc4f21fff68e4f1913a69bc06007fd5755106be7152a87c345dfb89bc6146b56f924ade0e3005463004200d48fca9cd50464e4ba68e241e6b8e43395694fcc7ed979b50e0c1a7e4c36bce05d4e92b402cd7d20b4c38825b60af236c058570fb9642fb215fc827d5be994348df0345066263089a66fd000e3f486b8afa5cd3234301349a80284b59c5b4735483352491a952c52ab9fea136b8020a56b3ace154ad19fb40b9fdb2c573b2fb3ea677ddf055b416e2aa98ed03c9fc544d66ea038c29cd031c8ec9f2a7a66e4b7ece233166530868969a29a3df50b20b15a0992bb40e8fa378f64c68657f693338018f743868f035e727d89b71f5c0e515d188323c613585c90058dff844114822b31d9ca5d6f60bad52a298842e2f232a00b8f090dd0c5807a41032311998520df6d36a421ee12c4968e98b857af435c9ca82ed574cc6793b49b84b551b4abe9441d4fb61f744e42c8217bd0c8c29280a280c9d0716d34a3a3ed994cce7367f454cea40779e925ed75f3a88411ef81c9004e26519caf0549d4b92ffbb82e9512dcfd7264dde576628dc9836391a5451acebffb7fa8452ee07126e68dbdbbec69a5b2e43daa4a86fe100220636bed72b1c2b41177f28bc8d53db148984380672df0325c1259d4895c3577872d1659b332d3ae318f7e25697461ff43cb3c403bcbeb140bf13eb0bdab0293c1c8d0ec2abb96d3f0c07333c62c902725939dd61163762aa869b231a22c67f99037a0fc761e0dac595a1efd9a03dfb284d22c5dad1085b2df63fcaad628ad5a9c888fd17c893de0a1d366338b96038551fed608ad75ee3f8c36cb07ba44796c39e373aeec87280a7c9a4044d918fa5cfd0dbf0d6da603a5da082c48870546c239aa99697bb9476b5429964d8298b167f19697b07c86bc98a952f683286fdc2452f2d0c93eaa6822ca1d07f8251bb28695dd03427b9c375edcfbdc3c0ca4fe97274ef9de9dbb0da69f1f37f6a620bf46251b36f57fc0e65159139293fb43b0e54455536f87cdbe151f67286a52db791f198d4a361bc7d942ca7d166c8b2bbb92498aaa67e14e79ea0ed684c7b7438b1c2527ff6bd8d6992f64696fc90c0861a5e6acd11bf360015751be81d03a51c4ef8f180bfbc49176c785f1793e13f291cd030e6b3805ea9cbe3662d04f9ac326c0fa626690abfe85af056ba6b48e9c66549d6d7964c2b0110d09d3303869b70fd7d86033cca454e597b7556f69fef55e06f970bb3750f72bf1f0659cb8353929b4305904b6632bc479a9beb75c9ef770556989e71491db31f534443443a01234187e4c206760999fa3757b33528ebefa6a6d0834040b9cf2a92c66050c37db86cac34480c28ca6a756673a1506db492eadae2c18935749be34f20a8aafc6018ecd122d2d37748de0e58440a3b9cd9477495178b16d3c391152272b66ec9dd221f86f813c1f7c86e6439960c7ce16344637ae716b5cf0f345e8bf0805542a04ba3b5fa65820d0ba4a07008d334dd29bb79fb3d1cd1c769fd1f292da4c8bb7e3dff13a57e3f878e1c0c3d524994cebeb8b349d574021b4eb9aac44c22f7893724730201dae91f9e63f81dbaa832e2bdc2c918490bdc9de7b6f99524a01250a260a320a74ebce7f0efea05b45a01d84c9e87c90470185779510146030d80f011fb643c759775e878e5c75441d2a820e25aa2b4290e720bf43471a6a900ff22054f628501ee16665bbd2a22cdcaa20b5d8cdd4df4dfdedd4ff392802f5ba63c708ffeda0b01f01f63a3b768cb063c70e1d18ecbb0a0b5f2ce83cec7542d88e1d3b4451149febb84fc27f22d579126873e9a416fbbb757ee7419184177feb0e6d1242bd00515775beab3ae18b05f17544517c181db9c29e6987794f250400efa99408e97915b8fe78117e554202f0ab5222c4c7abc015e8572544001fd43e3fb213f8657f336528a080028f0f47203ab0dfdd054295d8508330d72003f8d115546130180c0613ff074c84c160224c47a7870491041106eb799db089d79e314e6194b498ed6956b2db23fe54a95ea41da69bc417e9762df1f9f777bc083f3693b84314795fa41c99baaa1de212667ed87e57611fd43e46d8f123ec10bf8957311c3754c2551f0f0b4da0da1828322df677dd9ca3ab4ed777dd9cad1c5f93a326474d8e1f5db546878d0e1b1d3f7655c7dbb85ce3ac37af1fbbfafa9b9cc7f99c9c9c0d0984ef0f3ee81b1484e701e1c37f518c81f023901615c287f0351cbb103e281ce7004237422108ed26da614ea02da32d00da50403fb4cdd08e6ab15f04ea4501a07ef483fa14470200f52a6ea54513a896856a5b6274f53e6887a1dd445b0c6d27da6368436d71b9e664bdab848c304216f36987a66a42dda71d78a8cc232481cb047f7f6ca63ab3ccd732fb0dc97f9a6979fa3bfacf138e33fc5fad35b681a5ee1467c8604665f3700fdbf1b0d7a12351d5794d2544e73f17c5f0c502f8e20f015f0cb745718748c7237507ddd9b11342807dc09ee9d8a3c23ec875a86c31f552250426029575433aba281dbba7e3ac573ea0237bc9a1a3bc52fb5f74945faa1c53fb73d051ae51fb5d74d4ae34d57e1c3a2ed4cdb821d57e1b5a4347aea9f6b7e8c8458d1d52ed67ade8e846b59b69de502f0457764941ed63e9abfc2e80affa067cbf7a1e5f2ecc57bd919a5ffdd7f3552f54f3abdf4a545f2f1740f0035ff5397cbf6ad91deb552f64f32bd6ab3e079b5f3d515d951023acf0a53deb7736c357f7ad279a19b1095f1aeb8d80cf0a9d741162fdf74ee6836fe4fb7e6735e1ab0b5f2e80df7a21f05b43f3c1ef42a1ef5bdf0a8758ff3dd1ac88d10c87ba08390f2b1cea326a61fd0b3b73624358c47a56688393ef59bfce0ab70390fad5abbeff851c54e13b4f33e1eadfd111a88efb63f74c240d2dee3391a97dadd0fdf65d380317cad0e27e9216f7c77aad69f9ae9b3327a789c6448bf5e8c1b198d60cb5bb4cb82e1dc1efc225f29978553dff17822df6834f960bc7215b9570753e18eef7834f4e60a96357bbb54f5ea6d4d693172f4dbcce4997cc67e27586698019ce20bbba06e0aaa70a9b78f5c0d507f59cf387a87e3e519592f5abda9574942bd1c18f6bd2758666b52604276b83375a057292e41069cc49ec52e5ba678f530caa80f02a26becbe369b231d93822ad3bcab7e38fca793fca14d8fdd8a3723872fd2abacd0352ee770b2bf0a3ceb0cf497e54ff5d1b34a2adf94c43359457394322c92a1209b6c9edbf8963e2c438178663e262e05cd31967b4a58eaa23134d5bd2a6d0988640820402304000c915db4bba6ddeb2a5a669727bf76d7b4df36d7367b96d72db34a949a935c1a25649e94b4bd94f28b54a48acd3b4e536dec2cd053032b684247c42c76242cc04c7e258a050d2a9c17c42494a29251919d45c66d3b48d072b56aef8e048ee835bd9a2782a178e49b6695b638bdad06c688c508a558f93f2b9b0cb7c50633684814ce4df4c55c771aae73695f41e7c30f5a950e9cb135e9e505a714a8cdde5fda4fc6fe9b6691bd5b45f5517d2addbb6401a7f8c7dec4bd798b5a53f98e9b64940a52f4f78e12794b64d69f39ae8b048a969dd968e4b97a5c3d221d16de9b6f491d49e7f9793ea8623136fa49ed2474dec1429f968790a4fb1222512244b060230400009988e6e2f37b9f506c4c3ec3ec83550e34d25c45f2544722a21de699dd64929b58ebd709ea769298f49f792e33aa9adec364ad45f5adcba8edbb4addd37b969d2c36f71bb16e87c3147b0e674b27fe9b211926ca83a329152569148f207e9832b2d8151817f712557812ff9527312333314972963068c260346972943464a4d6ba4ae52574e691e1aa991bc5832559aa052b1bed398b4097c8216721c8be6fcb6d8ad5aa8dd0834fe3061633f960c0da617fed8de84ae0b4de046294d601f266828602ed35656a14af573fb6a5af247269b4cb11734e73916ada12dba528165c0f6f1ef5c3e9791d24a4d753a5b4c8fcba4e4902e1c99bbb7916b23e0ab1db2172cd90bb9abde98f816e632c183ddec77b50f1f67b9018b58f018a7da544cf12d433177c9055eea08fec8d92eb9804bedfe1cf7d4f67453a02753e350766ffd56c64f21c0e29205de44088ce01aa4489122450a96c92f644a133058028a81327fe6384e42e1fda4609fa6b3a2fce5a97201dccb5dca70748084a1b628c31daa9d14462e81bf4b646574f761ab7770157e15958322457552bf3c955bc0f6fb52816b07db1e4ec70155fbee5dae8e83a16abf22d76d52fa869164b8c9b1302f986d722c517ab7c1907243d90de5fb477e7b4bdfd9e119082a54a8502142b5e388c9bf4744cc43849022458a142952a44831830a152a13f47043de1677b6f0e728a850a142858a9bb15f7a498a142952968e7030384a8a14291cc551bd715c185c18da6ea1dc4e42ea19b44735175567dc8cc679f83bbab30ac6dcefb687a35e439147351754a850a142854a14ad48264169453208ed2885c44c54eda516caaa451d3d1354ed48055a3dfc9d32737fd48e44a89fe46d97546a472e3d4c21350a58fd2cde51c4e4df676e266a6e22931c2aa97e41723965ca9429e194b9cf482c745df4edd3fed48f02a81dab6ff32d6d42f16b85ac0a777b563fbe17d523a26ebfde4bcf7bcdd35ec5c22ed5cefb5538fee802475abd6e9f45c58d633f34e8556b4438d47f8ed44b518c65742973fb46dd50cadc67a81ad451623737ae1ca96261bfa8fdddcf8da35281d900e112ff254cba8ab33ef899b82a8eed09715664c1db6f7a53ad718d24adfa172e7cddca7f7bfabfa6cbdd10a9ad84f8bcbb227cd583d30e4e37689146195adc80e3b82ec55a40799ee7a5017d590b252d98dca9165eb42bbee56c50fb452e8bd6e2ca7e65a71990115b849a8197198039c00e443107e801f3720d8e6a60a5e64c8365c640d59b16235065d2f68891e5abbb3db0118caafe9f9452facc93aafc56f21f6f6551f6c7bd872a3d886a4495a1c7346e504dd58af3f80695a44ddfa48c9a9d528bde7969d1bba4edf1be6ae126c6dba0aa83589cc7bf35c61c3731d57ff4ca304b2966198c8a815c766e638ea5cb84965293725550efc5c46ea4165b13fdc785c3a33dfc27560687ecc0f939d8b49b07f6213fc85beee0df077eab9071742baaa231ffa82a8c39e2a8fea3c4213b70ba0f3bdb269982afffe354c84aa1cdf6b8543798fe362b65b3f6a91fa21155cf4b498f721e273be61fe0f7d91f2d6e08dbd3bfafe2628e2184b0b2dd2beb2ba256d64d67acacadc8c1ca3a0668acac617066651d46072beb17ec6065ed823456d655a0595933f160654d450f56d653a8b1b26ec11a2b6b306cacac59d0c6ca5a8aede9342beb28b6a76865bda402d3e43af6d20a50e6c8588c08c11159448084962d234882045cba28b14412132568c28b134f40b175ebd6ad5b5700b53cfe4040b19828febba02643f9106272ffc850d51dc4b2322342b0b2d5112bcbb2b2f9fe2c8295b5de9f915859cdfbb39695d9acece6fd79042bc3797f4e626537de9f49b0321cefcf5c56e67a7feeb2b21cefcf4aac4cc7fbf3122b7bbd3f27ad2ce7fd9989957df0fe5c829581f0fedcc4ca4278fff767275646df9f9f5859f8fe0cc5ca44787f565a19ecfdd9042bd3797f3ec1ca7650b0b21d2b13df9f53b0329ef76715ac8cc7fbf30a5636c2fb237113c2b1eb4a08c73963e1e872f908c77f12c251147bc23116eb118e40ebf6f4f3a0b3ede9e7a104d89e7e91a6b03dfd3ba890ede9dfa12ae8d021dbd30fa32284b4009485ede9ff10a801b6a71f047a80ede9ff802280bea80bf485ede9cf4113b03dfd2e2a4415b03dfd37a891ede9c7a10bd89efe1b7a84328036803a80c2b03dfd2cfa80ede95f51086c4fbf8a46607bfabb9e8e97c753a1178e1dad5d289f83c68da2f67b8c5d6cd0d477e3775683e35d6f04e76f844e6e3ccebb42275d846e3cce3b713d8edfd9cd763e5fc70b46d3e65d8fe38db8c29bd0c80d9c709da7261cffc951916a63f3ee3536742c52e9c8f2f9bdb7e65cbdea93c4ea07babb7fd2a6a50c5da61e0cbdd50cc556383443a2d92a2c425359dfadc2b1485dc53c161d552f5bec9e157660f5c231498f0afe17abdd6b9a373be4daf1d4c2aedd8bd66f2b1c93a8421c6ebab909777b54dfa25b716c3666e6ef0f052be6d60a3ba6626ed3fcfe22edb3fa7e964b7b97902b7c09b9866ebc2bec3a95108ef02584e35def0a87b425a680e28cd9108eb00b8ba7ebd2fa6fcb549b6fdde08423928a73f32d6eb57e53096905390e65a2559cff6ee8c8d5d627414d2504e76fe8e8b5f59f06ded071abad972a161c878eb2b6707042b0459b0f6a9bff36f0868e616dbd0ddbb00ddb3c77ddf176da8a7fecdafa55a9a0551b9b31c996a9ac577dbd417566ac627d8bead4afc1167dadc0af1524eb79aa5877581fd41f33edd122f8a55eb27cec6a8f2e09de3498c3b74f8c9e2071a9bb459153ed9049f77f93ae2ae1d2b45154f98998977cccade22ee3625ad5b5834e38d57e55073e39b1e4564075df962ded0363b13495ef32699e7eae778aa5a2a2a227494f5094fae7b56454fb198c19b3dea71cd0a8fddcd43e38b5f7c9c80c43f58fcfdae7359fd5257c9921d47d325a0207f3c6e3fcb84b3e763047deb2e5e6fb91f80f4e4deb3d1c5dbbf4cee3a1d784a9709c5ecc2b13596aabd1465d9d61a34e28b0b91a3c2515d5ef53ffb196fed3b932b7d7993247b18a5cdf740f52b93da9ffc2aec52eecc0a5a6e26bed9d6affd97ceb8dd884ebad3752f31f833a3e34f51749c914fb9cf3876c9d5f590fd2d56ab25834f52b4a545d957a302563fee375612c14a98351ac9627b88225d75badc61c3b44d51ced5f16eb271d89ea949ee7791af564eb57a5b1de2951d55a2cd9226b7d05be6cf1ebb81eee5b152ae19a304877bd1559b53ddbb36279c57757abffb8bd53ab4f51a2eadfea835c35c11f3bf0c17064a2d5edfdbb16b7254a6aa83330f1dadf3d8f18f0ca0ac7ef9bfbd4f317607e78a67ad63bf8ed2a255c9b28619510d62af5bd37f1eae07f351cbfb089d74e0907b6e8f381d9bdb71d4c6a484dc06acb2688aef3ac1e5c52a96c543535353f646bcd13d5161dbfb67e45e7ac694dca027fb24257413ba9b6451b6d04dfc2c6ff9c8e3daabb83551b41efbbcef380bccc11f4d1928415fcefe6b5a7c187b467a3f6016a5103127443df79c62440f57bd9e22abca13bab79d53b78c3faa0b6b1b1f9215b6d261d659dffbd0df55aaaafa144f56ba97eaa3ec8592bfacd80ba6e4e97ebd37ad42fdc7e04eb0822c5e09334f51bedbeca6d5349c2ca5fd72d3f9fc03fb1b0a61e05a8b9612724d4a2fa55b98c789a34335588c4689da788f3f80f816282ffbdeae77711627579b9b07ad50bad5eb5fad5cf706815b2425f799a34b39da97efc970be0afde08f8463ee969d2d4984b77e92ebd8811f8c9ae370ff05233bd3ec879fa55abe3f747d1f51b8e49f615b251331b09d182e383ba489dafe3f544b31b375ec70bdd781dcfaf43c7bfc2a19cd7f143afbff14433177df17ff044b31c34c783f042391e84e707211ceac2a190eb3f088772def543afcf31a57d5afd4108ef3f39cf1f025de7b1f90f280874bbf535ffd5503e42a373e88bff5ff4c5e112a19c0761c90b3b53f2c2ce3ef81776f67a10c2a1a1493403e17796f3e3e7fcce3e085ffc0d42f8e2f0e502cf4078234e661f3ccf62b3d7bff064ee8c680642f80192ffe0846377138eb38e8c64138eae9cf015ae8bab67bd8beeec7d58cfac39c324b1ba37e8ce74b068575d55cb8d0f6a4e1572ae7f51c411aef38cb11be14c11ddb407c6cb9bd9815672ace44870cebf01cc5265d1eeb10b66c16cdd4600fdf8118b010169cd677cf8d062ff1cfd67d07efb1edae701c4dc1f7bd49e218967a9493c0b02bea131230f209a741d872a934ee259b8df987fb7e7c271d392d2e23dac7ddc07d8cd5700960476821e3051ecd1636b86fa7ad3b46186a7a439ea65b131c71c31da68aa2358c7d7abbd66e15e7b14473a30b34b3439b8bbe752a37cc4dca7a532d5939d931938ac973590ea3aa921a68e6bc61c67b34267ef471106effbbc1f9bd80f26aa3f50909533d6498d28d5d7a90747d51f49cae31e7c77b1eb767698a34b1c87eaf66ed4658dbab489ac3350356ad36ebd0d209593e04d0eacc70f20a01fb58100d988b6ee23d1e314c360ffa22889b4e6309fc645ae33d34c6f5373fdbe456f7539e6f26ed446a5408f8d3a67e276f7c76e39c947494a7cce34a8be3d8fc5a215f07e86d4f7af5442babd0739e5f2c04f51253654d57f507b4ab8aa9e92906aabbc5775b7b0f87f2a7c75dd24c282469a21a2cea0228a2bb35906992ca288d8818b1033ffcfa3e2508b46426a10c29b7775ebbc8bb070553aef9e0bc79bca99f0fbcd143e52ff6c484044f8ddf15b7fc8747c70ac84df8fa17d60bfe198c4b9d46f89613aff310df23a543ba3a1d1ce6851411e85dfaa6c48eda3f3fd9b95f66166148204f9ae06095f2ca0f0411e8530086f200922093fc2082fc447b7a5a33cbee58351b9b3f3b01dd8f7070912642735c60430699ea2b020c7d3d197a2203b2b2c0e93c7f778180c060b3b0c0c06837185ed3c6c07b6b3b3f3b0dfe71fa1043a06f99fe74147ae25fcb7c33b3bb01dca91a941e8eb8417c0c7fe83d19d253018ec83c082c0745887777682f8f8e1d90fcf7ec828cbe8d61f54b608fb5521a03ed822ec3f0661e198e4a68206007fb342bb32ddaac886cc319ac700820610f40df2a0fbe3c7001e051ac463000be35781eb7e51aab4d12c8c7a98162bddda484c4856fab7fe1328b83ddf0b80ca16bfffa1d405736c26a71fdfff8569e2f12dfbe60184ca16777eeb863bbff3220451fe63138e4049a338beeb716677138be2b23dfe5d11adc1799ca7348f8fb1d8183b73c64c528fb123a9f7620f726c65a9f72f61655e1b7549d7255dc75833b13dfedb49369851ed039e691f3429f7bcc9db3596a9fb75a2a2df0bc754927b9ed79ce779dcc639e75ce77d8df7927aff79ef4ddebbb779db199719ef9bbc704cfd4a85d44ff0376eb252e007b5130ed43c149ed584de712a979f130eb41e0acf5abc3f38bf62856317d5f410e5098e1803aaa99a96e73d0ebda1fb1e5d699ec752792b4fc584abaaef2aa80a5ddefedcf8b191b68947c0467010dc838704947a1b3ad29b1f7354af75e347af7aefdda09df3a41e87ded01aed3dda819ff60810c5ea85e3919a44ac9be779db7bdb779583b5569d83869b0ac651f7498aa42729ac4821a594da06463d4951b4b56cc0ad9abc05b6e8aafb14c513f566bb950f92b7b7144d8188944832e01bb7687cdb7ce3bc8634a0bc1b3280c47f8a348f9463cae3dcdd3df51ba769edbaf122db235fcc5fda6704e2faa87f02d054453e6391cf59e43317092ef1c601c90f92b2c8ca34ad7e31832a7fa87d48a852687be4b34a0b87741516c68cb27c2439882ad9882a1fc87f542f9d70007c283c03fffb999f0456b74ffd64ad544102d0a333c2c4588eeaadea3f7af347d64ae5bdd3548fec7de1a8b96b0fab9aaba33756cc116c309439edd33e5c28bfc78fd9c4d2f26dbfb07156972a90991fb717f3b597bfb1ea8788d9759dbe105347b9c91fbb32e1ca300f234106c398d8a3c57d980cc72e95925dbf94b0da7df4ebbc707242f6c695f31f7b1450786942ebbaffb8077fa3a08cb5a8a510d424284def531f7bad9be32ead76e947516b9eedb566859bb6ad85db22188e3deaa67db78e040f507cac0dc3b4258b5111d4982f4a56aa9c896a0ac365cb911119a8a52f57acd4c044a848ac8719ad0a77d81486cb1679248dc8402d7df12b6e05cd19314d495c7a4a1f9521036689b1f095a11a8e086dcf8e13b3c31f616cc789b9a15844f4c074d510ae443d40d1031daeb67aadb0d57e1b544cdf47a5901d2f73ffeb765f297bd9dd57af1564ed674e22a68aaafd9f386b7ec99fff745fe226ffd9dec2b113df75a5cafa491e73a5067595ba3466c9c1882b9823fbd2983a769d0f1c66088f637d455f577195ae8ad278fb40ea276c9430f6c11cb7e3c4e4a0005367ddfee3e67eeb76c7cbe4fe63e6be3997abd70a5a4dbd73303e8108fbe0e7ae8efd852d6c0f17797e22def377ddecbaae3b4dcce6ae4bb8a3e06bcad7c28049722c1caafbc859d8aa876dd4aec3f6f4fb95a6f619fde84aff04a0298b6f712eeec5957cc9c138938b713e721d9ed4d66165db568beac8450bca85f2323eb0b51fa3d4b2abeecee40a25d48dfb154ad8b4ad350494b03dfbe84fd11b5b42bf47716c09fd12696e2fc18d4e0fdbc1f8388e7699815f9b7dbb32cd352d0990fe09401391226a6bd62f0455fb8fb0314b1355fb6368a3a9f6337116430041fd10be7d360b173881020238ecf13cdbd3354accd7ece5bf530a20fd29f4b7d02fd4ef4080a4d0825027b5f816c6fbc3fa05ebfeb0c21898a77f65c65385cb3c4be132cfb86b2c006a8f505b84e5a9cbd37f45edd698895359be91ecc1e429211ff118638e4b864312e45ab5c0fe7469d46619f88426dd0cebb37d7f0c7cc2d764c5a8fd14e80a2e0f9ff085bc3ee4e3d4bea99297db65d7a284698ca429b17c85c0d0a2cbad7df84c8bfe516ca645ef8aa44537a36a729212288deacf453b46fe5c314746538dfcfbc8dfdb0a90cb79e407e43fcc83e5f1f7284c3d2c35d1d0a2bf0c93b4c80307f3b582d4f212ea97e18b0539839697108b0b3be7f94a34a510414b154538a8e24997271f90a9c19433868842228a99ff0da361345dd43d36348c66470f530b6ad181b408245b231b5b5af48fd511c8ffb5f9b67d513e6b831fd7ccbfc93055ffaef2a4c8679d6ec054fd46f52726b874d2a649195c1c08aa3f0def1555ff1ab4252aab82271c2163b43eb61e2103657bb68ede0fd61ad42bb031fbdd8b64ab3c6965dc686a110edbd3fc647df4cb9652761a95093f570ed7291b2179c845dbd3bfc385c7acc14cdc947aa8336ca6765197296a1cf07b5eabb53972443177992ed365ba8c468b1019a247d80b8bba708c39179e7199613164c1432d4ec0fffec8f7435d18044319d879b6e8495d0fdfca4ea35c77db3626ea9869b0f461eda37a9b56cdbb6f387ff342387ff34afdcdef0c478638e150eb6fde48eb6f42275d8470dee69ddce0781ca193d98d706fbef54770429b0f6a214b8470fe467b9c70675dbf8acc7fbdb0b3f932c2b39ae759cdefec46bb09bbbc5890cf7a5638c3ea65ddd97ced3f66fdd75d451bba352bfa2d6eafa2303a5d5f8a82ac75445fcb2abed54b85ef7f455fdcb77ef52afae2c2d6ea67f8356faf8f7fceaa215e3fd7f6b0b6f7f5f9c06f453be7e15e35fb8cef542f4c20ca093ad0051b3d843962b659d8208721a44873c4134cb394f36cdfd1e93c1bb7d9e044ddbca57d1aec9b8681e07394b54c956a0e8162ce6775116abdea55e150974ff58542aaaf51b55ec861672bd6af7eb256aa546f37f009cc3aea7ec827c8df6ffe897d547e91ef39196a61812023b142c6229124abf55d84e6830f8220087e0b9c8c04822cd5b3424f93a616a1416011d7bf28c66252934b5e6f1df83e6edb1efc9dc954f87261f5e01b593d183ae92204beea9d7cbf025f15eeacdbb607bfe536339f6fefaf9c2adf3fc7fab8b8aa84d3cc7fa5b6ffed73adccabe7ad8fcdbada67beff6cd3667d56bfe558911325756d0fe73cdcabb81dbb3147f552ed45b4942f7983fa675fdbafd15137ebde7b8e1e75331bea16cdbaf72814a019670405c88cfb2339ebdec3d71616e17eabd09c759aa6753f12d50f722eaa1ddd09682d5bb0fdca57a7e3458938cff63a680ebacea372187733870cceb3bdf79f0eca56dc4a8bfb57cdf65c4d0df7ccd43fcb54b48939ea9f576c7b36b33d476dcf67a028d5ed19cdf65db47d8de4c06cdbe3fccd6f36bffd8a0a336dcf4ddbb3d3f60cb5393331d3acdbb3d3f6bcc57f5edc7ff03bdb5e5cf87201c7e7bc11d77f103a79bdeb7342275d845eef72bd931b8f237c71bf331cbf33177539cff61c9d60a60f2fe6c84c458c6e84af508c853173bc8e1fb78c909a9774943ed298f2c72d3354b9e7da59c9f1db4b2a838e777d2b1c3b1cac707455b112f19fd76fe1187b511df49d87fb1cd415e2087f7b1c6ad4e5861a75b1495357a542c7b53e22557b61be2e5eba5c7306ad8cfbef4c9825b862ef4324a1a7c7abe08259fd06c7c18d3c0787e23af89147f11d5c8a4f712ace8377c091bc07f7c13de055fc03fe8303e1563c0817c287f02b0e0227a2885f5a1effaeeb257fe237380e6ee4393814d7c18f3c8aefe0527c8a53711ebc038ee43db80fee01afe21ff01f1c08b7e241b8103e845f711038115ec4ca7874dd9c2e972876b17d8306a3c3e8328d8316a3c768334d4697d16674549fd1396834fa4ceba077d069349ae641f7a0d5e8359a8d6ea3d3785177b1b2e6c28b95b50dbe5859d780ccca7acc0d56d634006365bd45182beba7ed69a7d6428c95f50cc65859cbc0ccca5a0c192beb2cca58596361469e942624149f0bba2017171d155148e049d12d1543c840631a620bad852022df24c28c131ef0a20357aac8a106152056b005940e583c29685ca1a13103d78b68b4008d13f4e0c74edb65a2d56531b1c070315bd3344ddbdd7cb595574c5f295b38c15c003ca9f23ccdedee9d836f77bbc6d3513bac9d621e67de9e21b2b226b5f7ba6d1f8db9b9b959cb166e7777bddbc35b7c4b86ec92213d444ae952935b48c4fe4e422d1cb7dbd55e2aebd7de3e8fb48e5d0e638440a7c322b872eebf69ce711dc63794236506c567daefdac038dcc06576e8f2436f74c8068e12c44c0bbb88e10c95c13853460766da905817d44fc493f8b67e3d4a40837f0d458cd6796870f0bfef22947aef3defc117f21e0c87bab4d7a190f79f978af2deebf88b25c44042081c68282a9ac57e675d9aa4aafc6ec295f640628e1b4583ff20711eff1e51cc71a190bc38e7a268a8818bf8e8d3b60aeccfa2a2a2ba47788c60d2d03efc1b7252a771d1ba3576428388badf3d77f718820e38eae6a0faef8f446379dc47aab1a24cb33cfe1bc53e9c73334ec6dda945df393347494696816ad1ebb713359b891bd3504e2dfa2b7de92533a095ba73de2031a7bf7f333912185fd093ae839e4cfefdd1dddddddd8f5426661e7573e64d500afde3df5f83ff7888c479fa66049d070a0954bbfcc75ffe92588306c0c62e895ade799e8d1134c9869bc046fb8c209b7d655be5956e7aa272c54e14e6d45210bbeb0484bbffdcdcec6c314758b7d3a78257ed45184e400af399f1850ba7a82172389981a4d735bd07a354995a0aa27bb4c874040262eec6af85fba016fd870b452d749131bb1ea20da6b72fd16a8749b678b2a532e9d796488d40db22d54450916421f9ae0b89dd5d2266eee2bb91412783e8a015398e1cfc176d0f77f773ed7094808f000b0e0ae79aa6699aa6f1181bd77d501b5dd16d0e3ccfccb93dfd736a567c0b1be5fb38277737795193699efe3163c89031d367ce549e6b54e6c286c25186afdc1e4ed23ccd377677174293d458d3344dbe4b8622b7ed9ddbb450db58eec01c42ddd7b6a7bba8559bb5e710848ac45d2ed961148da485ded2a8216d492bfb14520e5ff70d6280b81b8a19e4484bea9e62f2186b1147d407d625cb218854f94e793cb991c174edc7dddd4d02b481261f4e684943be02e32c3df0ed018af6041dd4b906b0c11c61fc3f18480f533ebf0cc116c7ee27a7fb0020983020464c39c24ce0c1e4eff7fa496fc9723512d5d8f6742c96c526319a1eb4ec0e20cdcaedc03eb3f78efe6188b6ac1313ebe44396efb3e1a87a6134dc18586255492db5069ab6a4eaef3a62f27b924d8eaf1578ab5af55ee7e6623ea9811857accc9091e13a31add8983cf0b295a728b68ce175a730430d9b2d6a9cba0883c6c90b305ebc236ffe9476c3f77ddcae71e006dafcf65cf735bf0f137bc47eacac698bee8addac221a22e9091a3f4cd145065ccc9aaac2149316e5dae35012b0d6d8d450b06aa0009e26ed5654a95252aa52cf2a50150ed5d47327ad4c4d8c6f7f26585976dfb3fe7db5ba072b3ff7db4b36b0ec0f83556500ef5f8c011d49fdea688d6c28c9e5e9bad0d5a21c876af7ab5a414a2eec9c049f927fd7e5025cf99dc7bf5d2b7a4c6744fc47fa9cffa2c854241433b7ff1a8c55ade33c1b9cd739950a876c98a5fe05f348915448002cbae671e9da0ebad9fec7b39b73bae64f71c6a60bdc6c3a4f7f5013008b392e1391163b6eb6cf493f1670142509327e989284972854a8e08723ba10024c18b33e8114a9302b143cd96283dab8b053828b80c480bc9f2556b08618557409430722252ad880411456bea0e005b386a28e406410b16d64a099c1972e66b23cc182891c741193831a2158010ac8c802dee4e8a8eb448651d5ea3a99495347d8d276c576520451250843cb9522ac383565592e604004103e3c0141254d4f61c59317a5a69b0809304a74a1c1172ca8e28c990a68ccc0a28c0a62a0031d66ad431a43b0c2a491c4ca8312832cb83031d8826b2188c87a50a0b451bb5233aca812c4175cdc208a59a781410e4c425c118221c4785074c8e1090a179555f7094a137783306878e1ec720571534c81e35e0e47574cf125b53910c10f6988a182894c9999911959b030c38a174aae54dda725ba18828a3352564cadeed3126a3c2d91466afe9cae27a1ae930eaca860dda725c6a8a3d88125570e0bbcec304608daf8a2090b06c67802441b5460c00325e416494daa30665c91eadec16413d8308991069bc1b9926a50e3eaba1b2070628927198cc0082f39acb1451538449185ca996681991e7c39dcccfa7bf48f9c7517e4aa5ba061e20364a0f1940451d1135534418234a24cb1e21905913ae2c69014ac21022d56e8408a12f2072ad2849161c8d842e55984c0071966071ef05c1dac852022fcf4c309f8698732ae1777ea3efd50a5e6d47dfa009a3ac6564cf06be668dcac37393f5a6420201ed0a18e73eb626e5eccb9b385202265a0f95acef855f852c698fad5752a234c05eb3a9561a68e621318bf21075dfd58fb5d44e4430ca028ddd08408aac062e6e15047b11229f143115d8ed8810cda9062d6bf5dcc0c35bcebb2902f581d6abfec9f5ac2c841edefbedb8767e7400b1c2451fb53e061e647b367b0ab53f6008306558431e68d2b078c16dca85db908c632692967735a20c2dc42919c864222c3918d4ed832fdfbfbc79c23ce231fe8cb1c178a8f3a096309f98a952258179383fcc70907b887c233eee51ff11f2eecf72fd2b89b9d2bc725338086cb961a8a8c8e90aa5cc19225298808540690c4d0610a35e8c58ffd8801b5285fd6c0457cb4a44241913fbfcc9da5333b4b4780b357972e93f8b6b9a54b9903137bfce8eeeeede67d277aa884882dcaae3b26430cededb4478bf263df774be4ca3a6e8705b306f90f0cdd5c20aadf778d3d72d6078615656b7d18b0e392a9f28fc42083cc067364c2551a5a94495a5c27198ec06e30c75df2c059a9a8f285ac0f1994420a410b206297b8882ac7d5a24af0c197bf80ae7ee1a8d171566d2807a2d90656ef8403ab87c2b35538c4b3eebe29f8de077e4ebfef534a384d4797f433e9ea1226f3fdc70907540f8567aa97433ceb3283f6fef2458fb58f4775d687fc6e47950fdb9e6f51d60e834e10c11cd7497ed0ca52557e7311feed7e240619686032546484e45a3f17212eb16a05594490fc14da07852a43588b926e8f94f25fda94e2887c24f265904fc36c7a33a91c41225f06f934606129f1f52f8cdb9e2e004dfc3dfaa735e3ffc10fc41fc49f42fb80959f08bf90f4e62af34fe656a669f58b5c572737668ea1b20dab84e614751198e6c895623f1d13da41c5c1a9ca54c94e14938b8a906a73dfcbff1aa8c5ee2323e6d0b5b8929bd952a67dfa079625304c4d50d3c7389493f1a82dae2549cbcaba361b1511e1222f4a5cc4473c8591380b7361a56525265fdac244b634096cb43d5d8581314757e222d9136e950a45db03fb628eb302298d49164dbfd091ee8f4186244c7a487eebfb818004ddfc6a7b27d7b00ddfb018cb51b955b9322f9d54f54c57cfeccc1abb8aba6ec06e5ba1130ecc87c2b3f9fd225321d67eeca2918b3477ed3ba98b7a4aabaf7496ded25c5a69d3c4700bad4cd3aa1318546a03a91ad04586614e9169647291eb04dfc260cf2bf3d8dd3dc9bdf3e92e26304b51dd64babbbbbbbb3b6a296ac97fbcc9935a742b5e5a9c153147206f6ad19f8b3976d2ca4026b6f35a9ba4d4a297542af4248f7ad3f6f8bf400741a8f669ffd2f267310efa83292fcadfd124dda069d593fca7bd78cdfb6cedc3656532a4a1a804ed5566452b15a2190010002000a314002020100a868302b1503c1e12a6493d14000e8ca24a6c4a16c9c31cc6618c31c618839021841842c80cc0108dc402cff5ca2f9443a6aeb4e37b7e841c0d54a1070bfa40b40c876c2dd0943103d8ab7efc6c582bcc59a7791a0292aea832ba5287304a6b2ee999e819ba7f75bad90ab1aae1a716007e4ee3b3e513878e4d4d1157fce97c84b8119e69c72ee13907827ed8c76c8c5bf5537862dd95974a2babf9f3525cb3373e9f717d0311a8a8e2162ea5da03f0f7812179c95851172b6ab790919d86e337792823151fadb13eaf9d280ad7a0b53498c68ae13de9996247e9f0e4edbba74211b17f88ad46d049cef47ffbd3b6312d92f4ea1179610eef4d3d13d598b78278f48b0974ca539f557c434e0b816e51b83e54c7a4f9e14fa3f158fc3c3d3da41fa67fa02df8edfcf3027ad7f128f08387f7c0e511820a3276651118a8253e3d2fc86b1e7f66b875d5625fe870871dd10e131de96570f9decd1401cab167b0cd51da65a7082532d7c9f4d47919e6c7d05394f607b52e02342c38df0592d4ce3481db077b0652aa863e5e89e3164a03696df6116348d9ae1860d3660952b4bffe70b4c47fc43ac41bec564eab402a0f58e30bc944ccfe103a07fbb671618b1a61bd7a07b88174b9325c1f1fb4896f517c0f06a1c3d077767134c32c3aa5df145373d3be098a9f4f52956e281ed9e8559c3dae31efd5cefa43782f87dc4737793d89420a6189c5bce93ab61c98ea5e29c72070aa98aba12381d86a4eb5501104beb90c24e65c6aee3ec2d4b2cc81e70368055000d87774bd85171a4a082ef8e91afe9269ea2ebd7c478e2fb78c88c135c2936716597ba06d0eedef74e48f23bcb748895b3b9890c1f961f9a98fe0f3329c8058f31941783ca767d5cda5efb002a249789ead16e583c83a33a11630e05a82ffc984b1b98541b8e4260872fab99678c2624a902f421e9c90eba79785dd48b22366eb565c084b0a019172c7cb66182b5b1dc3787e196bcb6018f7f22e33eed510bf9f64d31be56ba27288d9e8815e844ddb41867dd7da5e9e947dee04452a542076c750feb7da48e49f436b008b8d1ba6e30f3c943e202527274d175851cd004541e0eba3654431ae8664e537e283633ccf42836e9b52120e95803d5aa6d8b54d2b208344cd14d23247b453b76d69b09b0e4b1e08861193b3cccbe52280a4d0243087c0026691c0bdcb833aa6363cc0cabc9f55b62bb5b15438c15735ee64ed515264f03d68407238e1538a69929c3bc8859f892cfab3f9a5d59aa4792bc6cdce3d42080f84318ad7496ac71dad9d8dc81440b8422329a9e4c5f8c48a9e51d99113ef395939b6fd6168186d6f8c3b3c7195323e1fdc8df245f411ad951a82fbac62fb9756651877c960c47ba78d6824864e9947c406a1c39f4aa8f0d64c7f17b1d71c21d2075b3e978a17c7c4bbed6186a3f96b8777baa3433723119c79a743c8818b1f9d775f022d80c177c6de003c9695f5928bbbabbf2b1951fb2addb1e0852a9d54a84619194d951db7f9999726bf4d4a440af69bce8907681c0e2d993b8ae543fc2c06dffab707239ac01a257ed92572655211f34125c1b8d5d3909305c436ac86e028db7edf667573620875f19467bfb078809e4ac69492f2d0dbabfe4509a1190494a23bc3bab675f3f37bf2e4bd887bc74b866c00bb86222749dea3aed95cfc267f1658a73ad2afeb6ccd8ab4a2a1d98ad41b4d67d1365e07a32bcc00b0379c0a1c80a6609dfca7feab320cb4bd44dd9f7fa8050e43ed9ef09b5feb514809acdb84e6d4043448bdd4a3c98235f9702d91cef7c51deb8d4c2a6a86884fc56ebeaaf0a432a87aab04a8e0f7dd32798e46495a17dd97d8b04692f3fa275c0c3eac110c8c7a8fc6ae957614a44cd715609358864964bb9a7e8b94ace301e213e06a5210891acc29e47b3f6af2e6fa1fcf240738d4179715fff5c942d0ed911deeb63e59b687c8a91207126d04072be768df5a4e47158e38b7c9808df427346fbd52b17da8c1eb5406dde9be409e22952b0a0a589769be523b85b7a816b759032623faa4dace23ae375520e2daf6a35a252bcf669506c210b26abe353664c5d808f58dd53f921ba7c5eaf5ebdc5634e7d478b1818ce83c30f8e954a2c612e828410ca332e857c4b4b0c916173fe0efab73e90ebc90ccca38c7246e3082daa85ddc0d2e21ed0d004b9e9f237bbe3d470622c7740bad27a5587301199221f0690c6e9435579cda95bff295788369099c6f1cd0b18db20f387328e07ec0af821d67d05b6de8ca433f2a7b8bdc0ccfa94efde4db3471296e7ccadd830cb2d504613d6840870ce63975473b74254335ef1e7f0b8ad5094157be785b9053d2185f3c0feea0b93bbdbaadf94146dbcb0061c7b5c615c64c5ea1dadf13ad176f36c96cdd72d49d7049679438202b898bfc71d38aabb4a0a6585fc9238246dd93baeb8b43150a201cc455b9f685f487435aecfda164215b909a32574b31a45e3e16c034e323155baf3001ba2eb22f0a8931a2a56a924292ebfddc2d71ebd6f979ea97ccf2e5350601baefd8a8c725de4d60e061905ecf3800008cdb406638fa9104af08f33784a848d67e638330f3f8d6ea75ffa4a492bda2dfa9a7fcbbee70069f1b620782968f6457da8f93b51fb0fa468276014328eaa07e2a09be6edfc26ebf900f175f6d665869ee32097503aa88633c62bf80fbf714ae8e2ac6897be56264c4516ccbe07be46302c8144edf7a9834af949e0184c35eb8b55da2bc86a0526c99a31118501a2d56b7e20d55a40f6cf16d663c014de5cfa1a3e03ed04a506926182309d7537ce36bb4293e1500031a63aff8e868c5e886e7b65011874572b6676ff6d99da58bd637314aadf367d60aeeaade0ef35bd5884af23d702b535d237f406dd682c1722ca23447463b60d4ef12f0f33a179162320a065fe3e24f473f40047bf3f52c7f446f96a0c173626d37dbb4e0f8fa996b3a0128ccfe44bf1f76a8e629569e33ddcb28e4c787a5069e417c898f62cd01d2872a13890f4824a686bc72852564a479e0ed6c1d8050e96c3e39b81297170464c289fb0cfdc5d2876294b394471255ce47b07f34c95463504912d1ec2c7403951d2561e610a4a17b8fd26c394fc45fd922d918c5c8adf5edbdba82764388cd1882ac17d397a6f27072fe47d106476d4a9f90ae51aa411071c158dc7282b2a2fc78a6e1de4a149a73d5c7832cfac53ee0a097fa7b433ac5b63d7860f7a2d60ffc2d68de577cb7b85435171f0dc7b778f1741f300fbbcc1ecf07204bfa080ca7c3684b3ca87e708e95946a400f8e4ea72ab0e391bbd30a49c3de6db2bda39d52c222a1928c221a24be544eebd68dfe9f2449f64434436aa96f4e4ba80f39240749692d26663def59c544ef301d81776d3e0676fc227ffc89fbf124e2d94ff93c7fbe30cfc6bb268e05f9196175d8e01c5263d1c6cacf65fdd547e654990bf310d712068c2c7bdb09b857754a1ca891f342addd26bc57a5006d5a1ab18578140554f0ccba4d5b414eff993c7a47cac065c4690399cd700ca7c2fb040861ab798de29a94036f8fb68368191c39a0767077bd69749b2c6d16cafa65caace9a25aa814db5d5d802ae34652b6040756b79494ac0149926d1a2ea755c7b803baa460d0eece838f7b970bb9aff02afa7c865a92f5dd6815eb942a9338469f0d2389a5091e00a7bd79d2db80fbc44345ccacdbab36d683a0e1f9338a4bd003f80fa66b1759a8a7808639a532f2ac73444f62776d3e0302ae77808b26370b797efce0177c19387f5d8089ac392a2247d06626734c8251772b7a3f61259d233a04a91b72f24022a9e1a3d5fcb57b8c6631e2a8d8b2381b9153e50e2c69c789753a0083ae16d2a1b96d7116f25f889e439f62d542e95849c6c089e35ceeafdfbb98b22beedb6f191cb0e71888e403b6781df784ef15895667d6f17459670fde2bef9561f5301ba5f013e22405990b17647f0ab9bfc97408f33fde4e0ff47159ea63ba7d39ca4ce36d12b860084f8d1ac20983390e73f5728ba1a65e628da0ebb6983a578ee3064d26307d4c46c4e1a1ba8c424dac127ab36e2c12a990713fe81f0b1a2f546368433da66def26d230caf82ee939f955a4ab8c7df23aec43c7f0507aaa49b10f12cfb9cafcc3ae79be7819099b89304b055602e78ad8b5db520a3ffa415706a2a62792f47f79cbc673986fd4716b3b2d5e1b6ae32d42661c55a97cd1ef071d3346974b4ea8b069b0d20c0118b49c5adcaef5d0a24d4cabb1c9d708a68c472f03b46d533e6654140f617852fdebe84cc161a00f24eae120a800f38acf846d4e2684bf4215f956c06253ba9fb833066f2b924e507cd6f42ef86775f211cc799f07f0475281aea5c12f962bb61a121261fc93bf98b0c0f4df3c70db61760ceb2e2e0fe006ed05a1d05010ca5154102a4e871c53236e0a9fb023fe75e2d0e96b9facf7c56de5b7d48fdbcdf146456b617bc4bda38dd6bddb60c6461dc9fec58bbe28c4f48c93a8504fd3895f877894917fd8198652da6b53c7c5cb528758e19a17137e7020d2d1eb0c9e6d301c1525ec17df7639fd546fbd777c9b26d1fd039ee25e2312f0ce3a709bc8dc795e386a9bc606283b134b757b8174dd490bee14530ad0bd4552646ff937add7c19d0f345c42f55b0ef3b2cbdf452d3cf0a9c5401b0a6d30c59f491941be0f538411a7f50525f5b0403f9a3ad48397a805c10f767a229a47608b8529d45d6570d598bee0a45f4abab4c8408fbacfe6998d2b2346aed8650f51840f895fc4115d9607aaa1ea617b37c645daa6266f90c555491595c72328701266533cc66567c1946c3ccaa59cccc8f0577a2dde45a92648ac853b2f87b12bac529339bc6fae5295cbd58dfab685d8ed1bcdf27b2ed07bd6544afedfa824493002e6cda816ec51126f8d75672fe42858e7aa84e40cc43098d6241f902a95d4f90f653b46c452ad8cd4a26a08440cd874a8ab546a32ed0de7da3ac50b92542fc0bc932fb88e831477aa49f5f09840e365139e8d1f4973820c918ad6b210c3d09d7406137a7941696cade5a4db89be7dde0d29a473e7b7bf41c30ee8893df31a72e23655c2d24f86a45b3082468337d5151f3f2afcf00379ca0063d36bcbc2c63f45476fed86ea8e54b940243c4b616c465b7cbb0b201ff44bce3422f262964d90b761c3074775b0e74f7d9601848d2359b67e07d43eb4a80ef794c9e246ca0dc69b96b742f3572032dfd4906c15662d351bdbb6ab42de81913dac9780d275f393dc95e3b4f464334579749f46f7df0809c3b4474e10517a96572ef096e3b1a14efad290edc4874eb7e79cf7c4cf00dcd24edd67f773cb0a3ee02f32e04e95bc3b63826742c316b73e509aadde6b0d1f630b6f8ce4e1eb1557abba427d8f033e460fb0b18589e274fa45a5a233329c5aff2ffaa63d0f16da332708cb22bddcb73ec893f6787cf6477ffe1e93275367be6f4473ea51cefcca07e3582ed7a7cb42bb5815202cb4f15a0ce6fa91ae2c166918d2e345bd7e1d78fcca7538c16d8467ccb4ffcac56f74c96e5217cc66a75b60934931cf0a220d85f00193b541ca89c8bed33eada4a053038e81b61d45e3d0177fe94f4c0c665ef38d957a7c99077412dddc03a978a615990fe2f0305bf85e381fa52fa73195b9b02425a050c106f200fbb242a1ff8617ff036202422032dc724db6405ac16d1766e0fb0e029e63e10de5f1a2cfb45489bd28fcf7bfe8593d2265da87dad646cf7da0216b0c1cc2c94e6ef345956ad1ffc6e52ff172e78dc98aef02cd6e830ae5448e0ddaf809ab238d90befd90ebf54073b066eca35cf8081d711d9070294d7ab852060badff4aa5c18456cb2d1f6834271c7ad5b5f577f7aac3177fd091436105a82c34f035cc914ba39965ebd0e79504420e2212ad8dc894b059682065483cdf90dc73a20b72874751a7a5cbafe926c18e637a7cbff10530a01520ecb549f854b09f57bd68e14e66b0e74a671b257e8dafc4575fad4d126bf1ee43e9417784f0088df0257c22f5037049f80fbb7eed23bb70ccd363a326ae5f4b7ed9dd85e941158bde381e430fc7f090ad22bd54e220b912fcbb23fff903106a8198ac09a8c212abf458d6596d03e002929f4c0aafdbb305f1f001a878edf3690cc771f82f8a674ccc30799d444f14515396ae557af707e9792ec592492b5db3755def487540ae4db790c482e7c3c1962447b22d2a3354bc65746098c4fd42f1f9cf2fa19ba5a6445f57abc9c1e4f42a9f5ca9a8032cd1e28c5f90312d1791884f9ec97427cd867c6de2c75daad3a5dc7018a148ffdf436117c9ce2d1b424b09d09ce9057d61a07194ab70870c506c5986d15ec7a54e6513ba0f4b97153fdbb61c75edb4b9def4f804ac0edbe9e1a3cef65c5b8bd336935080717e10a4453f44d496b9a83cbd3af3ebdc08a42b0a5f643de411a9f8c585ba5089a6a671534fab503bdf90d1e81f4b0e7b4665ed7d75a87f2518e8b96a0b653540d83c5ca99a8f07fccc154fb6e6947f9da110c894138da8d5344876712ceb3f6adff13d9a722b169c14c378aa56af9e3f4f06b768665fbd71de0393198c22bb78e870d7bc62b5bb8892e71a8079215ca1d140c6675baa060ff28e9e2994056ebc836a919463143a656f204b5fe091ebb86c6d73dfe2cb981d8c3442971899fb7e49067d6852c05a67232dc6587bea6260f292a65bb9e05816c25f0231309f507ca22c4599b2b6ee1d8c1ba3185dc641d98b2cda5ec144131f82b5e3ada1fe52dbc399b54406f9f9df59f9a55edb91654dfab6c8ca9626fb98a0505c1efb398840c75a851921c73e09d28c6240a4656e199b72be5d79c236f8e9de84194365612c858bcd1f6c4ddd62bd98c78ae10eb3183292b5b0f4f8791362b22825c200d29d2c04e6e08654a88b5d24517b131c25435a81924c820f6687056e321850b99a121ca47aa843c909c210c8d01914098625212094c75a1d3fa111f42d286782b52ad92a47e3f6d78db4bd3ab1afd325740d5d9bb92d1db58ef6a915356847ae276c3b91cb4c778c4646c2fe8f9c2d8f1d3d67d649a2fd05bcd2227dc3d4c41c65e831f78bfd8b70ea8f89b32d66a2e6392a59648399386469a9d90fb6e0ebee5fd6d60856c770a3add693b86d57e094b18660b9e280c8161e287dada689edf0ffb4373db6f51beeca1eb36993f0523509d5a237eb0856ffb06a7f929c0f097c9a1fb1c6810a79a515c79b8c14219c3c908670394161b02306c880119d7324d2f0706c38479c3e3cb909bd72de8d227c93d6b40981ece4ba2e87eb25525f2868a2ae399f3848b330459d3071d3db1e4f2bad27abf7558ffb9393fb47a87ef28e6362690308377e2c9b8f2dc3c87247363b15731ab5a478a6a5738fd7920abfdcf98db38ac5285ddc9fc9328aab1fc662a4b18e3cc667818be447930ba32cca2f7706268abc9cf1a46216bfbab0c8bfc492ea6311a489502673eefc3f8ddcb7c7fda21feefa793a0964c1c353726f1ff31db86783010296a53b70db0b180dbeb9908cf66845cce72a0c9e919d8086b2ee0bb2e049bc11e5615053f0e425fb9ef41869e1019ecbba85dae6b181e585d4fe1861596a9a17d9f07a33c23a2314a311d9d248f6207eaa9f777b17f305a246246fdcba4dbf95b87016d0c5851033de46463dbf81b7c879ab92232456cde1b2a943e04a25e994a304450841ac99100d17f8d818c785ff7126213061e8682046ba4f53becac079dd9a419cd969e3ab696b3d6018f26461ca0b7449630e4d9d9881cf8d0466e7c1076321c72aa61ff2da02720212c6336d742dd7d3bde4932e76f29014bda0779cf05b01ffeeb3cdc8b85b82bd59e8749061bb0a05ba1ec70955eb1c7c218604e40eab7a83ab350b92453f3017b6d0292af6b8999415d9917972d05bdd6de0bb8b210a44900a5032b6b288c2ccc548d62c9d232640c3efc096a1bcb6f9be7d41c3a095e8ec488b4093ea4b98fe547c20a47b93f471eb0591474d5d81ca540024888532fd62e88bb344d956708b2c9a8081cb5d71c649ce30f6e11fe2b9b297a775e7c4abf2b7c4524fe3bbacf88db194077428a0983bbae549973ce5b1fbd47c7962de2e89d3c9c99c73700e5e0065bebf5aee6f1c223d8f8693100e7347a4de12844060720d94a53cdf2a649fea61f01afa43450fce381eecb4e268de559f0fd033106b03499943365c6d68a530bf73e803796d093e362de1f5816d58493067579e4741f8c8990aed8ff940d1f3436c3d88610b227c189c694a851e7fc2d2ead84ccc84dc4b73bcaf65819d8f38626157acec7ee8f4ae2659638e65aab22086c340d41fa2c4c4d89f994cc29dbabba73c859b2bcfaf007eeaa3354361823245907bb05f46f75237c04f51ca4421b541a93386e89bebfc488f2c655fd15df624fa93a7d9f17b0171bfe69da857a547760b801e5f97be24e1d7a99220c8737197c2e48a9c94c42244fabe8fb2fe276b39c9c95258034754cbd0e0a92160c45d8f875e017e2cda9d119e096ebe68ff802da2f108fd60d812dc64630cdce026fb6e2b4b70f41f41d32967dcc3b6de6802f1eeea7bfbe435621271e68fbe08607a4dcd5f9129a4db9633f30596365af29c1fa47f62f574d66780a09b37abea5fb66c3424b8a8936c0be1b518817fe1bf70fe25b0f66e5c32fa6446d4e478bc495b621e17ce78dd3976617e43f36da3f19f36f37935274d9d3ae0be0921feaf9682422a1619589dc82c992eff5bcdbda0a058524e1d7f7099ec05c60fb1e0c5a821415aa456ebfbda18afd0fd4fcfa969c21d637cfe39d8346de9195b7675ee5b4140d9ed8662c3ba7c06fba098af5e37ec31af6d8a4dc4a60b52630805c655ff1ba885cd84c0b58265c76ac229586c2c61f5c0d92683d5c9a73ae41fabde4aa74b5e550f4a14251753f53567899a9aea12154e2abc73d42ee7aa6cacb3c7699142bb0141a1f1a684068b146090abcc3003dd5a66b9e624d93abff5e01324dba11758d36a63d7238e6e1275676e96a6b98934c9bec7825706ad93346a7ee85b3bfe15d3f57277b54694af5a5f02ea15272dbd94b630311503e0bfa8661944ac8c08c0ec08ccc029fefd7b1af342e3c611428d5301c2aee7bb44d8d85fc7b34aea74b310ca41e8f07d8ca7612f061dd220f56a7753b7b6e7ecf9f34fad9d9358fb68cad87991804347b129616e0438f1724109eb72edbf9c7ed0557d1c68abed3d24e0bb062bac019ea1d5be13c64245800788f01a99af224285a34348376b805247e738961571c4467c03f48d52bd29eac0cb0fff52f95c8ff01545aca952ba1d02811b1f3ca915887bab47ecb7659ce00290f456151037e2b15dcb59de7da21e8aa8792ef9519221e9a506fc9195635772aa3e7d6e59514d44c290a2e038881e3a3e4986e7f01b71e1e9c5c92d8b306172a2f69d051366359f6c71c88eb65ffcd337efddc49546d2755755db165f33ae118e029ef193ec01713761692997f04d55268dcac366369588dae2ddaf03dbc89d106bcd64ca1c1a9c25b143be6f7596bef979131500c0700a0c7d08404fb79e3580274ad9a82756d0f8a9e699699958dd7a7cef18220930b731569c3abb3bd0d968c926e05504ec07a2ea0351a83482b386c8b2823ed5098ebf3c7335339d4c89d832e3f1c1f57c512d7936f4a4be9473bc996bf1d3328b099dff2c8dd2dd64f9ccdb3bdb0b25b4fc5a86f9bc26487218794cbf1d516f483f9f0da47a6c9e8b1da65b74cdca51cde3a5d9595ab464dc161613f630be098c0963386083cfa30df83e1cc0b9264cb734bc38c37e244dd672cbb3b6c677111e8b9b5886c422a21665e44b7065870a533d3a7e48628f7c0ca9e6f40bb9ceccf7c3550cf12ea46a6bce3f4d805324d87c411d5c2ac8ad4e7c6292061078ac62d8abf28c98d50cb72e16c75282463aed0dd47e600c6de2c8c39296d46caa0b668b37c61c2a9f18d44cae81918cf90ad59467dd9610e061cc5b220e42de82f35d4cfddf05d925ed9de59bdccbd1736ce29a8ff11a2c5c822411c3c07463a616345d61ac3e9107d798da0f9f6db1c58843c811d2fc5f5b24c01bb1a5e8e9c4844772a6f4531f6d5e7608e9340c09fc00e8c28b83711220967218109d83bca0f1de96920a6541332246f63f1b274b44d43062b0be846bf1eeb02f44e8c20668d31ec8cd7b794979ae0d4cb9c86d2adcb6dd36806d436dfd3760bdd7de706e81c4afda42ca624625d62a799d7f0fa18de48c2671c12fcee8b291ac03c728aa2a0a9dd5c2deba10d67b2128a3fb68724e8ae82c1cc8b9e0ec39e094b9db09dcdd19cb007bc671b80a7183b652758cf99d7794e5b052446e115e9b6be9170e1e1b91acb03df640208ebb0fe7047c1579e29f6876541812f5c8af50b8c96a3bb80e8655a87880677acdc970e6d50e57a21ddcbd987bc9919654f709e67cd1764abda2675154d7c7e72ca6204ab162c4767a39d8137dbc0362fb57a08a157be0d8db67b946a8820f45a5c63c1a0f8bb4dff84f8db00b626f909e870d36a6df3a4c8e85fabf08dfa003f06f2aec5dc46c44dba41e5308893c74d621dbb773afcb20c70ca738fa6d323080080852128dbf0bae058c0ec4533dba25d65894310e370a97c9ede35e6515efac583d675feedd18a81bf1012e71e17367ee769306d1422a1a378c1f94f21f548afd88fdea87a21d22d972ac31a051da36c11f5b5ffc57c7f3fab071513cfb9f404ba84a9fe1b54f35b4e01b1f07514b3d6511afdd70b35345dc201317b58e79ae9a275a0511bcd921890dbf3ab314b17584cdb46dd875a4fe4b1acb921347f73a2ce27bc52fddd284de34c4f900c5f2dfff52ce47f43b2821cdbc5fd09de3b59d63f9da3b51ba1219fed9bb3828d7bbfbd378111a1dd889da77efa3057650248bf8f414e461ac7bcb9a117ce57d6a9af015003ebcd79115c29fe57db43fdd900dcdeee8d18c53c742f53b783508dc5182ebdf95fde1fb0eb7210fc846acdbabe080793cd8c519f7f4f4141e63548e81daa7ca63128ecfda4c229ce53c4fd4e5161bae1c29c391500d3e8d5bd986ceda74bc1d0ba8295a2118f91cb11f70e7d06ab681bc8622901ee6caea601abe1df3a0b50f84a9b6ac9c7380d5def709d3d9a595d1b7d9410cf6186df043b14d269fd2f52f1c8ed6e11164e07f21c686754065ec47395051487bb47a11d4aed55d222e3d71b25202823d762225f88477850f1cf73de69043ecb56a45c333bb359cf7f1a74da6d53fee896260856cb5f0a02d6c70d869fd8c0a07f4eb1019172c15a17f6747e6fa936d0ea6496109ec1cb5774ca10cf4e01fa23a95cf45c3c8b4e3dd39ce88b7db22a6b75ba126eb55a275dd1a4dc9afbcc68dce49c802e3ab5c655fcad64d73c46e5a2c83e02a32a96b83beb275ee9b373c8a6b7b71ba7169a74b896a0b7e13b2e36fccdb508e6cc420f46bd6547dd8d2866bc35067d9a529d2a5d53c99a4d6a3663588f13344fbd68f5efd583f03e4e77588aec02cd262486e77bcb47ca965a4dc999df234d8149b7afd9c3ab0b96cd509b8cd3e00b412975cbef13ff6c8995fe7f974e2eb29e77ec472e5ccdc5e2f2ba3b4474b6fdac7034d56a1142dadc0f1b280d4c88166486eb0c2ed55b6940ed199f8fb85750c0d4147f4f9270c56ef8edda8d426f6ee66d4f3d98e281d2e08181fac5f9c88f647fa0f8017ba6c0b7072fdfbaf55f97df06a71f2d4560a2799109824e876ec2c2a53bc524a574669a514ac3cc58a525879ca2aa6b0a214574ad94a295f1185155cd6f8880f76d978c37ec03ddd61999650c50f69e52b552ba69c122867aed3f658ea18cb43e460a3dd7cd44d7689c6ee0ccb0eb1d4315647c88146bf398e7ecda60e904598c6437c107dc1a6faeb25e0bf62d46ff0d5577bf69c90766d541800e232c1ae68d29c805f833f2713c45b146e704c5459280eab28db5f3fe82faf7308a01fa138a5ea163ccf1bf44cdc544dd89098bcfa442bccec9bf5629be2a89cf1161dad8707b66d54c91c02c9d0bbbbc27695a8415fee713eb63c664709791ba7a31c38b5a5ea5fee85badf4b2c9592d7664543a257514c44b9dee5b8a819ae8747fac2c4cd9511227ba3fec489eb85044b0e0997b9854c9e0e87aa341f95dea37032ac782814f0bad4bc52ba2f3a1a80548abbacd652393a666dba9adf12588a956c30590bab42413f004d97bda168fcac89147251386209c6e540d47f3e2bc0e9bd86a4d7fe5475e91f948401fd3de3fd82a5057705ee31d0c1ba21cbefa8e245bf96f1741ac41263d340aae5c4aced6d27cb9c46b9edb08f6b13e8d4e7281e7b745e436cae88363f7acfbfe716ae70596e38eefbf5c4e8359a748464728dc814c27fae5e049a0cfc7fdd8880b616c8330f862ddc1b92d5e6b5e98ccfb42eb9a890824436eed76efe157a647e4ed49251efc4f11415acc463b17c919faa25e45126495d19910876bf93dccaf538faa828dc65e02cfdbd5a1be7ccebadda0f78cdae3aa9b6be6967adcad216ef589e1360502d8702adfcd7d989f12646a1652e2dc93c6182178af86bb610caff526abd296e4fe6a570f7c51e8f9d3b563c8f27816e3eb8480a4e19c4585004058ef7207273ed47887247b033a38e40cf3414d7380c7e824aeb214a590d2a248bc2fdfe26f7f652c5e52e3c05859e240ac137aa18a70e52e3de0b4d4ade33b9f121605214abe378ce6cce54b617bdaeb6dd30e9f07b3dc2fe4a780b74efd46eaf9a81a167a22ca2897d1edc14977519e07deff647e2810b3d1f6efeaf7b1df0532e8d34269a5c52d58f490451d96b66367fdf03dc3702c89aeacb5e711f2fa877dc3162b0c0ff8ea21cb463a1708f08bfdc6040149c5f814734e0dafe9abedfd7f535ce03c2edb638d0c3bd82ec680b9615165654c293ace3a75d903bfbcd399ebbd96d99b979431dd643c056885ffaf06400dd8085be929360fe8f504df647fd4f6cf9bb88a2322fca90ad0e7be31a5d35abbae68c17cc16a845bbd71b0ce19ad7c194b4e8639d62c9011ea2fd34d02334f179c30bdae92a5411c2d0422d9174ad85f4d33558b7200420433b032ed6c60bbd850027f68b5d6a204829db46e27e2b0185984c7897145b974291302974215ccb0bd97913cd1c93e6e05ce833a302126de45a1fd57faeca102fd9bde5381b0cdb1d0cf1c9149215a2a2fdfa6a05134267dab70ee4a3a3c3e94435a6ebf50db0d0752de461266a9891ecea5c0e0dc939cc22a2792f25df47c5705d56e99acdbb236e1a17442011e4bbdf8b573d456fcaeb09db2d25099c2c2f48cf6d63aa052a4f716aec68f385990ca7db03c8699932e18af26132ab7e3b04d129e9a5ac8d6eb4b57c429d8545395c2665cca3ca58f3cae8b7489e2cf4a280fb7a5ead89e5b46d154ddc0f0a66453b8587c74a2b2d2ed59942428d2259a91b6e9a23ac4b3aba4799d6eaa6a8957e530ad5a3c05b44a64c774d83e13a2771f67fe7fa04014b7e7e772d351328deb07d4d23ea80f68cc15a4cb4f85cded4fe237eed2e00c2c92978743bc54050cfc874d1dce4823e13d13c0ed0332ab25b4ea6b6efe515291fe2e045a5a6d8b5cbfd3a62768d6866fd497236a4c8ea97ed08fa8b46074edbb943fa7e254aebf4b24067b4fa2495dd1c58190f419ee87d9f3b05a2ab8997883b2a4b98e5c118011761c2281b7eadbfaf35e6a2f8170f70894a4a2bc6cb062ffe28b2dd33302d0d53b332e5524c218bbef4348142379cfb38c0308838ba442fc00b0157dcc3482784f71484f98dd710879affa2ee177684ccf40218e7533aedce6cc618177531ff888a61293917998e5c895d102501791915c0c1cf171548b1a365f67a9608a6ac71bd51d5bfc91fe76099b04e69a3ed6c674541ac64b1705f8bda3828ea5efc58814a2e18636a17bbd10f6ab2c6b9b7bc935bb4d1884bf049cb6074e368df2e027325b752080fbc40c77371a1f0a8615cef3c1f8a46f6bcdaac9abb99fed2e35043e8488dccb1f74cb65b0b2a381fe7d9dc1c84042bb9d158b92f2a5871956e731e7f9bbe4be5484c1c2e2a47e56ec34cdc88b02ea0310670a2f6a240ef11141bc1190ae643d43951917e5736f80ea1adb9b168aca3d1c95711349bd12e8ad1313340bd4a45256371e05c11b876271ba950a0641e962b30367a430245651f4152bb12fe09861051a7d3db10a3671d9563cfa94db38c84dfc6822e8050ea8fe205845cc3ef313e280b5e0b60d66c0eb0844daec43471ea54200fc8279d7a3424dd208eb77c46c9269af9bbc2054c81c72e3122b3b9a2edd42502aa0908aac06311cccc6368a282809a56e743554a0a614eda83cb838d7f481c2643804e2e0ba3ba3e8c058445bad1e8ba1121aeef0e565cb5378496a4a41fe8b5924ee36f730d49cde53a5351c01ef64b98c1f0fb03e0454209915f7cbaec17e18e603df2349575af5f52efa67a8d4332f4ad2c5bbdbac972baa59cd663a4b02a16c1aaa9ed3fb8ffcb4e555a9a2c9ca645d8b872ec3aae984a739d4242c7eef755467ebe41bc38229c22ce0a62dd738c8e88400201efedbfea289f8391d6a2c8a54adc5621e50d1aebad0fe8b0c120a90ed375e9a043ecee974fe7bcdb6b4568d675b4068c8b0285c6862633dcd2c7315dea763b3ea83afe236127f23b0c6582c93d322dc2389d6ea5e878dae081d8b82ff8b54548399af0e7db9f6d747ecef14b85c1fe21d8e4751215c264d94fce63fcf21eb29103dc2dcec25a6324cb5930bdb281ed794175876549d7b9932075c98aa3232a25c210dada8235497200be42a46405a885097d9b440fb3b27392cb29af0b152ec20ee4c06ae8c206b45789a7501f60c89ec40bd5c3216c9a4af51950dbd6791ec640e6d0e6469a998bb47b6f3290efb2e15560613e5eae5b0222dc38e9e5482883ff7a86589285e1dd377b22658dafd3b8b2d126b8cb5087df1513973c067f243017dbc80c5d044ebca4f9387860557a7ee085d86ba0398429eb81144a25cad93905849628dc493a2c57a05b9fc3d8101f5f5160e6c4e1c5f03d4e090aafa765e3545a7e30c1a5a657f6ec818e5090b1a966badd65e42382a7738aaf92df6cf8f3d7b4583a41d13c05d93ab7d5ac8fe95b19338301a5c62097608f376ded09c813d6bf6ccdbc6ad5d56a4e71974cd1b060113038113892eb17d769119b20b20c34bec42aac6b94ccbeb31d8821e82d48e98a825d1b9d110ca34fb029470c7c07728e92be42f7b449062663a221061179454fcb51c100b8945c0288e749c15a9dd874da54e59c092897b8b8b2801b11155cc6b7b2f128ec9dcc9751427ed7c406019b17f6fc8f003075bd84b8f48a9b20a8ebe858e066df66d09900c2bdaa9b080e46eff304ec84ac86806e83837dd533d03dc23334f4a0685861e5d9219a037392214227afe186edfec514f10c7e8b63f3aa2905d97358ee1baccb867f337788a91e790ce30181c57267f994676191578a6fb0ab4e455c332a67f517e3072abb0256a4e95c85f3883cc05705a1a99ca5a6bca29a2e4d50529f37f0baef0064d91b48887787d4375616b2fdb847d8c7cd217c11da52aa40fe3726b564f42678a85f81d7c19bbbe59b58f417cda8c1b6263191b0ea4b79ab9a24d841fc5b22c1aa1aff1b86d797c20d40666bcadca8d41aaaba016c4f62dce22409433653e5cde6839595263cfc58868e46deaf767be914366e17024427b1d3e9bfd35b499dee194b24e8b4d8bf1209d8af2cfbf41fe38216b3fde80181cb600b17f314a8054fc4bfcf42491aada7704529a8c2714cbb56d24ac57efabe5b4a74b912f21e5cd0f3fb03e4e2687950f93873f60198219788078d7483bca1c31be18e949eb1c5c3c28c7b47ef1c8add93ac87ce1bd1384bc6f9379046359570950403e476ab303325b27faae6a6227e6310120edbfde7d68e7552bf1f39643c9a38a2aa44919746cca55eced96c932c0876d316995d668b54776a1b1f441b6b15574c0c7e871a03106eb5127a70900e66a8e2be689d8c82c35f67265d05f01ebb5db52553182f4a3647ea9cecba8469dce8f9e35d375f66dfd05bcba7661dc7ee122709768b8f60f66bcd77b334a8ce984929916b646813697b3cf067a52174b419e9d87f4e8c868f11315aaa3c0422a7057e42ab5711601f583a3ee4fec719b5ff9303cca573bc7f56c1f2f9fc98efeca812f0b76891d85cc93f5bc76c27b1b04c3eaf3cb8357df93a259e958e6ac5d82d8a79a2a6ddd7fa860f4f3d3e00296b1f598eaebb11e0311f728a96326b55f3ce02711595e828e85ada80802db4cef15aa705203fd482bb55b7805689599ba85c4bc375248b851cdfad78ee3dbfa2280c88bbe100bf184e65168db121426950c033588b2812d5f800f33e2ec5863acb9103f495889db3daba066fdca3f40939af00aba258f57c326ed24ff71e08e7304bb3c8b5256df7b2698f1bc825ffe3e481f914383d2862c7d9c44cd879702a9ec75d7213ac175a6d1c6b2319ceb16d261b480be6f3d64744818f15b59bdf8636e232616ff97dcfab3a462f9c085968210aac0ef2b2f3731d363fb5b15bb8155f9aacf0be21580cdd3f639698c9b3e5f72ff33539e3f0ce1f1617ff9167473b422fd0c759bb164690d5f49b3fdd8e573b0c7737211142b2cf183442be994ac7f17601e4f481554840e7a0073b88cc43d588693d0daa7b2c6923ebeaa7e672bdd5700210d07786841965bc033debe7e4069f17a7dba3e2b3de3643edb05d5e8038213b38330703aa0d04aa39e2fa902f831038e198183543fb8d1079774fc687471a0894eeafb4916615746277be277be6cbfe6b54f371515a26697483fffefca9489903014df0c09316aa4cce4ede9635dd26779f956abf7fed8f9cdcc74846fab229dbcf7e2a7c20481bf9f1ff7255c6d6a35b06d22a3a2ed109c85581396ee1c963fd3394ed679f9dd1739be8b458377c5dfbe96fe7ecdc3c8ee49da7447f7eed8c442ab39b3bd81114b3bbc8cea6067b1cfbd8d76fa06b15748cb1b393d4d85f92c15c49d3fc5c6bc92d664debdc7727eefc16953ae68e5f6da5d6629f5f0beddf44a383ff18f621b80b5a1a55b2cb827f89dea8ac55f15de45add6bc95f0dde213bd5bd97fcaaf01af253dbbb64dfab7fb09ee5f010c3a63f685496e9008c696bbbf7c82f4405e6dbfa193c38bad7afb0f1b1597a098e4ea775bcb6525e53e42a4a0779c8c3d850256543a073dc54e423cee1c5d30ba42b494ad29e56a94cfdfd61bc69aa33cc815af70dd29fe837dc2d1386f0746f50538d3acc57a6576c70478956f62632dc446e65d66f2689b47a16b9339d04ae680b78c2b8620a4d17a084a9d1deefae1221f4e3b0a3aae93a7e3db4a50ac15032d7060fa4d101d29ebd1f2473d3d2c5557b7f1fb8785951aacdfe61bb86e934c0064e77b50f21b769ef2f17a387520c41470f895ceef54a86c5cb327c14ac0499ad0e2bcf0e2013cd7bb915c24ea2db5af3a6111d64f7e60785514393fd55f3f910d891af60b9bdcc7bf02319300339fff98003ed5882f8817c4a57d2f6c69eaba2cfa1ba66f86753b6342d816e1658b0762ca71c0e276873631d8a08176b1500bc0e65d72be3497899236c1ff8063146699bc6f96484950df4eeb32d130966f0da04fdc5495f414e0fa45b8e76dba0e86befe324285a5b56159cd16cf6e306647a6547ac5bc7143638a4f7f86139dbed56a0feb71f3efb81d4b482f5f71f06fd0860d8add0de8ab883cb69884e0c38f782cc64167fa93ad2e0ae6f1dfc742346ba23fbc7a1c7d5833281c2cafa471bbe755545d2a246f384872b58ce20e8a6bc5434c8339b4d96233ca8a479eda3e6d66ac6219dd5421c9ba45287e2048b8f5ca6cfdba1999d76dad705a120d2e6ca224b5158203003e49107b3002e4cf366cec9cefbd18bf19060e2bb6ad2b73916935de717b24bcba5f675e2629583d99b2f74819eb266e334eb872b032106e9b4bed539d73f907f90f27389d2a2722be35139c39ca2182de73d12e780ccea6868070b34a7a27c2d618b7f9e76e0fc4db82c2fdb9815f1c9e7dab4a6ebc3b5ccf11252b09e417e2f2cac0a5683bc8e1d7bc9a08c2bd75a140f88e2b7e332fbbf7c8a56da7cb253d6c5d6487c877ffd2cd04a801e851e8b35f78390138a5c1df2a9f43bd580cd87b0705b834df026e89205b4dc52a2b6703f916f9d63cb236ee40b04f79dd9004c0f571b5821547ecafda19b26cd51f0ba3b6805a80d9635493234f2abf8f0993b6d71cce714f470019dbe390f2043071d8d1c87e92932c909e9bdd3161e276dc658982a23edec47ab8460f75f02a4ae85089a11f314e73f575c2d373d22c4f3972d9ac2ad3dfd57c7695abe5d85d02f3566733138681bd8c543f9ca23ab87f8bfa9cf88f94b3b2693c4743ee65831d166fa995fd40b0113309be1826a0699b6a898adbb26f8f7e31c1338b37c485af77a400dc80d1c24a2950dc57b099947f4b4e4be6ce72d277d017c88cd320cd04fbd501f8dae086ad9db581c8949f189e85897338b68231b5114f1f0e97cbf21af40eaa58a90dd4212214e96777490a3d71a8e3ba4ca07375f0d94bb48cab3e73179260704fbd016e596a5c975936f98406e5e6b9056942397efbf91fa98a37057c6f37633786d2586fd51f474c48c6939df601e9d3953273896a2f5b7d1e8993fd267edffa7e3cb97b3353c2798b7c4e51ebf1c3b3cbbb050cd896694fe211a41b37b39a893ebb602e6cba97c4f56107bd4560810de57d8d4e3c82c034440fedcb8af7588251789e01d21404e417ba44ba3206f96e475efe41713445bfcff0091c2687f090bd66f7c11a4f4dbda0e2b8db096fead1abf9f3ee71a7b95120d64fb1d064a6867899877bd30b4dc1fceb794382378723f90bbd31301b58412e9f0a3534ea32ae72aac1eaa96c6c45bdc214a66e716c463bf0a36995356ba2de492df874e9dabd5ba494e84bf59d0951cdd46062e59246277e2694421e7a3784144e3748cd49778740c0b098e620c0322a85bd7a81a5ae237f014ef81263c4561becaa51008efeea1ea1a15fb57751bdabd011770ef77d445ad43e5116d24a4417e0f45323921d3b210e029be1fcde4fd3bd0e776e91a436cd33a09504486850083b9c745e9c21d3bba56437c325ade8365529b6c10421f3d15d50a19cd49d172599476c3cbc467b4585be6cbdd6d96ee2763f4dbf0742ba3f40e4dc66492c041c820abda3213870aa8f89982450c836307492b18d78038e533ba931f46f678eee18dddc2c147f6bcdb223aa5e0da087c3bbb4f3655179b6a40b9c244983d79e92df43f220a1cf0f3366fc882a648447bb7878f8b183b12b7a0abcb15937aa7b74f2da2a2d6e5f335badbdb827bf221627a862a9e254077465aa0e97cf90bdee70c6b3f350899826bf2811306ae6d048d8806b38138831e0ac602ff893b8e87e5015965f169c095b2f0e33327efa4e5bc11feea04adf399a685f983271ed7f0394fbea83e885d9766408c2cbf35f1f873d1bfa27e0591d9492122db89c38d06d8ca0c5e9316032bfdc7bf74651cab0008268d00a755715b67e9ce5d4720fdaf0371a6a3581106f9af11347f5fb99ebf51379871479514f20f5b143338fa5a4c8f8d3174486effa68d1c03bba3b7071f14b1e2cd68a7d1201d13d78695ebf426dc597de46d998c099dd19cdb8dcdf28b70c265eb1413da4b6ba3f777432c58bb41cb235e9b567312af977eaf05acfb3ea068571e88094bfae9fb08aa42f269fcb8a28cf32e3111099a84bfe7749838cc6f2b77d649f30aa3537e6cd05b7c5c393f1466173e405e21e6b58b6507945825a1653c2a71a7dc3a8dc18cd44b681941b77d44f2a30d3c30dde08a1438f8c0f43978408e9fa737fddd6d5d598ce00485d363a0c182af86ee5a3f59c912f7522f1f5fa793b6d3d09fd4114663cfbf9859640f9c46eb174eb63a4ba74525d5eee3d5b439d24a90ce19272db0cab8373d850bb7dea2b7d4c9c703601ed627afa142235c68c6e79be03b684b2153f9b769ac658a38ff0714466d3d3c5ba0c421ee60533161e947c5b955e1b9ad3cf8265ce73a2cf37d1ea814eaf2189b943aa212898c7ae84fc8f516e675e2aa2f027751bac3df57cd1696eeb599ac8137cea46cfaf3339afc146fb0459f62325296d08f9d7c3080128792841acef6ba675dd3e4f7735517ac0bd16843b140bee50ad0125fe8451fc669fd095748dce096fb7a1ed1bc20788a9ef014061fb47c3931c6439523db231056f5606685349c7e75a311f53c9aaf1729900eaa93cb73fbb6479684d6146b4494a47cedfb0d14bc3cce1a270cd28061d8a8550c7611a1aeb3a18249f69a59b9460b86376a2151804121c119ed63ac1b4ea57f1e8539e1630b002c5b1499be6a3721cac64ae5ec12a809a1c7564a475eb14e75b91a98b3f463af5af3c4a5b472c905ab46d1962548e70485091a78c405bd0c60690eb5026bde85a1f6a863d47598cbba78dbdaff96e15ca79020cb112b681a79ec5c8d0227e61bd860b0312007cae0630487e657055e56cdfcc794cf5b557cbda8d99c0f663f77f9b5a3cdf821c522c16435eead8a93db2ede2ada9d0c2e9ce6093fcabd2322438306af545648f91767fd2e5e260103e485f39b4aaab60f92c3dcd8b5f21c12547ec7c2a3d1b755ac0314f42b198219e65b74f2ce09265dd2f26d214cdda2f3aea03d35a8750653618e849457b48b49066c65a74f5b19766ad6a993b5f614854607371ed5ba8d1aee25cca1a71af426e3a4b889fb291ac701d48dd5b561c110ddf278709193e89c78e1a1b8d91b983ee6316072ebe989939c16a291103a60ac0f301083d81931ac67f0a720140080b93da87d95b6d6489c00223570bcc9b375f7d43c08c40ba54326944d13eafcd7afded92e7b6edc64dda560e60e1f940e8e975890e68690861a86c3a0d7c018d32869f35797af67ac5a65d997b135d68e8a89e89fc09ea99500703e98cd20a1be36d545c48a172582dbafabc070e974680c5d2d32be3ee354aeb65bdaf42d208e82f7819d33be936c6822d6ef6401127a5debda224ddb787c8776221cea97a46d8d1b69a4d262aee806192c4a3b8c0b987ed310f4e3b12f76699d0198a55dfcbde490de7b50dd256ffd11725d7d0b5cea59038fed2e79e2502d5ef36d756315b24a11e1dde755bd3955fd77d6fbf2e9069d7a3144940ab03f20e3e0a75c0c6375e357069aee39c03f443acf7b03f4fdb96802f408eeda09801128b1df3fba6bf511e8061624415170358f49234dea0156173b9113cb92b85217e1027f5317d3d28091a613fa06fd607133f8b7f2496262009cab720e403d86d1275d0fd23655b716950fec7ccb40a9e8b192eb939e8640e57ea08446627ec4f52d13710947215f35ded8cd8ef7b92fa3055cc1371d9c4c4b8ba09f67bfe29e9fd5e5bc81be5e7d405ae12f4f89571d25a8a259e53978199eb9dd58a8540c7fd0a983b86a91f2d36bf51661406c6721ee4c3fdc618e307493563a1e21d08630a5dd925269d2c86af472033731414d29f09442dd6cd2a8d21dbfd5dca9e3e1875554dedf19c15948d03d3d6af49486ebb75f5deb45288395a956f084664852253da0966938cbb9a70b1982773eebd87f50658b5cdb08f15c1a958c7cbb5ca84a81faaff0f52a9091c48758f4a07a7cc5ba78d65af838fb10b3c6c007f3689eb894c3763318f8acd5cfd39d30f2163e039f89d0e3ee9d3cb15004c2869546a566914e6a8d9a815762630a812002892c48c594794115674abc72b1f10939cc8b0fcd6f26e5a24d04623708b8d3929c7710e950ed88d2b817495e0852d6c4b764b8ab526bdffaa4adfe679f82a827c0ad4609faca33b443fbaa26d2ce902e9d468f9809a1f626ca73209638bb25d5c26fdca17ac05eb105a346ee69e874f9c773ee99421f3e76b51fb6c3e9cd8fa0d8b8027b9fc72654eeef4ad2ec5938ef61b816a9231740841a7220601300bf791e00c7e1284382db17d25deddf7e81e9117672f70dbf0719fefb06e585f7d8072dfdf3c2f1d3cae81d9f15bcb6bd67b95e16fcb9476cb20719661251209521b725588eec60c0269597ff282147dd55c1b0511a32870b54b1f51a73b82bcdee8688b1fc5542064dfec0a36d3ec8281900653b758413fbd07334816f662a4795ed21e18c8cc086e58f38e12afb9a8db0100a8b53888573dae1f509b1d97e88d881fd86b416d1840dfe2d35038b046dde1592eaf0281f48432c93ea6e2bab7662f25c9f03632890eb986bb210a385a1428adeec13fdba2e62599609d8ae94293044a868fc998a38e2dee9675a5042424beb9bcd9aa56f69dec6229766f8052eee9c66d73da7deb938678444b206296a940b19d707f655b8471d811bc9e0a333947c184f91b9561139e8a726cb22c335f22ed2eb1c7574ec6de77c3a20fddb198d76014b9a0acc4ebccd427a8f49046cede2b5afe14884bcff0cea8e99415556c3195380d6c7d9cc078432720ff2449286c5a2d19a583c96f337dde05f38368ef8e9a63128cbae9bd0d7c60e3232fa9f33b1b21936646945b921cb9d1c868867adbf23399773b4a457700383963fb77cc1fd2f6b9bb94e58473be91311d356ac90094f830a0cd1b453be9c8352cf45ed72d2374bec9d95ef5e3941279740595477af9ad79688b23cdfd2bbff674207cd68f63ad9248ac85f47a8977c124639d4d837832050a7a6c0754cdd1835cb1961100a2c4f0822b6366a26e6d532e8dad494002671826eb4df04732f7b9e004bce7f2ec3cddc90121144844aab483cea110dc9531b350ca9ea46ae0a81d4871e7fd3527075a477c698ae0c9b2f2660273db87e388a5439c7415d65d00d69c656eab45324a2b30d49350ac0c8c0684931de0d0c5f203bf5131eea9bbe40fb986d09ffde148b0ca67d9a715fcd9bfb260b64b606e65d7ecb1883ce09f7c404ce7c624683915c30e409315988600bbd336acdf4cf762be6246fd1383f3ff0d6a3a2640c03c3b15b2b2bbaf8584f4c4fafc246773730a4c4e2d04d50ff8e85aacff43d17f5df01c2ca42b9d60f24f742a7f0980c3c9c1ee4a32f8a5c336491c1c759e8ad049539c96ea201c74999c7fc39033d052ab03246236de9aa125900475b225518e100e5b79fe6629081380c69000bccbace641348c00c2ce234355b0236d286a4301af0c92aaa1a5ad632c0cecc89867eafd52c05dbc7761306b62d6f1cb0f7cf8a97ce691aad668f8bfb5e233efcd2bd5f66c8fc75c192a86dbc9b59208e0366d8e00cc92f4f50fc6ef37927f44e3f4a33a80455f376d73ae88d91add05b617378ee3a603659fca8c9dc0b11e5380a2347fedd2355f2eb76bc5b47de14bba6221ad202a358486625962e53538b0cfeee66bd3489fc2c156d93f6e1d161668cc7218f1b905e472136ea57648ef1e49533143ae060e13c2c89e26fe13819b579c459339cd3a733cf8a150bc95376d7f4988d8f477d5bd423b382b25a391887acc11ac8005241533c801953e1684be6a0a0741fd212ab4a5448fa4e32324dd5e9e69c8cb39212ef11140ce9d3a6db7d62b1ed9cd16d87f72ed136eea8c53a3aff70420f67c3b634d0c9c2c710f5e7fb3222e85b5d9ce36d8e4e9f749a65631f8f288384c4409ac6f1dec2f6a4fd460999628b6675924624967132c4c69d74492b2468469b697ac766feab1385853fa39a0705ccbfea0d2224dbda34ed68a322b54930f4843ef711238a887d7df5769dbe8e49050b1ad90c0ee5d3bf230e160eb933a3ba8913038602a0877bda2f377a2d9f6c9e45252a85ba743d8d059c6f5835619aae0a39bde8e2c744d7c6f5f479c7eab4a8a62b78050f4f13de55697a174ec0a4b3e22427fdef459c2f9f8e5a3e920d85084a14fa42b5ed1ee8dc5d5111870f617c45f706d9c908f4536bce362bed1682604c180c681523201b9096f83030464217cae92d1a0a980b5d9e50feed403f2f83114e46c74fe5ba221a7feae75828bfb47ff9d996487bd5bf9e38b365350666e7eb2ceddba429beab26922ab50fcc9a5a77cf7f4fdd7067c6d0f8274fe4c77855566519856bf52a6586bfe2d68b283c92d88afd940e148fd75b58aaec55716bcf79ba6474459e8d063160b55c874f4b002adc748bb287b4e3a38c6e5c86c9b4e952aa3be58f6621251b22301af80d31c49c69a7471ddb1ae08fa491291a624767b0518866d5f8512e26a4595a49db030d3a6a7530cb307ed087908ae6fc6c177e1d75d31b339a71ff48d4673aa38a635c532c25f8b5deb4ddf9335b469395d2cc50ce81707792f8f03a27516aefd4d343f50d0a30c74094fb48b6cb6ab44fe61be2acb9fa86b83d4b0656a5777e4fe51cc2a24bde24b6882e74a1a44620dcca11ba2a591356423eb88c42789bed63412c03ee17634b5b44ebef31b272a57da24c6a586c1f236c0bc8405b3cb1af6de7f2393af041fa479b221fedb8895b05e42686ea45a64e66f4c9fb5a2527cb2127e6947b45f87c530992a33f274d7439e1020aca67f70da4b70ecc47f504a9fca17275b83f61a354fbc828883b0fd61cc45409c5b373e95b5522defca069f24324c2ce6906b4e0052f1af85e77890bcde0ed109829857b3093f953b03dce8dc3606028c401929b7b30b7c9ccbe75f1ac67a783ad3e8e6d27e0b17db17358d0f4a30105e3acbdaae81d737792464933a004c852334554f7965a6bc201faa3fe3c67a070be1064c67fbad8197c5fbfe900b12546951f43bfe4cc887693ee2b7672b1fa8e557a6d5aebaca666229bde3a3be2207bb31bf81a043bc5487049777261616bfd684794048f763a5d5a506fbac5ec4d2f29d9b00fc8049ce884010b46d6f86902cd0e6c124ce8bb11ecd8c1dbc2e2830072ee20fa80b54cc32a6afbff60d362ebc3fb3947f7874a31dcf06f8df57fca02edfe770fd9e9cf2d831c52d5540bd2a73a7763cbd4ac4f11e40f474ba384c3e010c73ebf22e83e8f722e3c7db844fa4054227bf714403879110ee056bf1239a215b43182be22d70823427d021dd26dac68be057e18084e1f43ce9f45fe121784062292d680e640353c919736e10cfbc84cc416b0d803e67680d4ef7fa0a16461b6707c0efcf871e199785421e2fc6c46057eb26fc58d6d0f3992a9580287249081ececb35b2793d010b174735ab514219b6433b1aacf569fe7a149cfbf51f0111befd679e73e9ecf1ef89129a36a4dcd397f23919f61a6a666f29dbc5a73acf84b18ad5206fba445c7be4b878bf80bfb88a6edb7605be3f1aadc012d9f6f8a872eca5cfd2b1fdc0de3d93d9579347c65a3cfc8ba53e31e6525c0d1e81eb4e9a1885fb35cd3e90ec69a5cbdfe4909ac28d795eec81c6dabe900c23e2dd85284b3c06621ed6ecb3f2f85fa7082be9410b0a512b1986582b91531e7f6fdd844e5a5e619361522e2b231b2c0b697ea285efeba7542fa3ba7e74b97324c4918c6d07f0b14aec684c057119212f23b998ff004abc022079b4055bbf2688b18e277e3e0efc04e662960abce343029ffc9f08572a1d2a73ab520f7d353cb2788a8fa3f7dc83805e0aa202e344302ac6122c8f3202b8504c203939c1642c8731f6710f355a3867e99dd94fa209b4d4392a221885d94594c59a29d396bd0f7edfaf77c2c6effd37d6253b8bc3b4712c3821c05b540ba30295e9c47034923d9c3484aa5b0fa9c9adcd2d0bd3c1f8e044b7d28219a01b3f65fbabbf7b3230e46429298a07a501d1ba0a847544f1dc241849e41371567c0a879c4c8de4f7552228ece8fdb76060f55a9e67b82e234ebb9c8049583ead80048bd422c54f93f7c1e8304f762c4eb5f2032b90577c761c494da2077f41ae5ea28dfdb20d7963b29dfbe618f73b2a680bb13743ea88f65becb31dc7b0eba6974cf52cef4db7c82f04ee6180728484e0fad02e44c0db10613b6a14c1f174a3cd0c90686e3b5cd671edbb1d20699a863f18b2616c560e9f277cefc62799aafb941e6e36f460b697eed6f38481b9e1e2544a9a20176f59418e2f29802691edc7195b367eb65e6b88acbb10a6ef751a5d56480776b48975e247569f9a891889b16831ab09646b8c1403e92d1ee1ef71166b1a95153eda24a183d1ee3c26c6dc4eb2e96eb37201186d11943e6b08a5b7d2d41425fc791d42416fba405408bc004fa54b3ed57ff0a24847e0474d4efb33616603719716f3edb0e91e10dbabafecbdd827625d9e2097a8079f868ee55aba87068387070a89fabf1ebee0ad6f49f25ceeab07ca69b77fa5b25619d7a95cc7be5e360607ac4258b3ba20b7fa2472656710bb43addc2cbdc40d390ed0fbd07beec3a74667c39f226274d54f05d228ba08ac33eee2f81787b938cf27e9a7b5d704e078656cbb42682a7285bb908ed47c82a534bbccea620cbf092aae1747fc7b890f7987a6a45d1f6aad526df8fd7dd0919678ef62fb55d27ad17dc907465d85478b0a9940004df9621da887b97e2e088605779fe13c9adda8eef3a0d3ba5d236377842a19f1baf2aa57d0f9f596564956f22d7401adaee04608dff94abef4ad0e57ecc8ad616f1c69cfd34eb40ef260d7a0798eff62b102e4c5536f812eb0a132d46f6a37244054c58132e010d554ab6645cf62d453018fe594d4edd0819a08f74ea2cee30824f2df8894c6808f9fee9f717edfa2234b7d11364da587611a0609015b8015a693771640614e9878961dcd5631741a2413b0dc4f27aafe82aad8f1ea36742fc337a50a900e63ce90797d12c68b16e4bd3cc29833f507c1e5320f59c1979bd9c604c830baec7c8fe3075cc4bdcea4de31a6bb2841b27ffb5c2cd8146f3739b38075298e2e1875186cee2a8a8ee8f9a54d27ddf780231ec761abf85693a7484666e5c9e557853a8824c422641731aee6292234368a0516f6691fa7043747ad4919d166d730e262a70f1c31a72d1ee0ad48005903e4c502c01a5168bc471e8ebb00381230c0565a9d8d55205d570750f7455b1c4d6bb4a758cfc8ddc138c02fa35f937216e41eb8f79c051dbd9f6f6f77f489f0c0485974468c76d8f4fe8b641f06eb90c7bffe400d708d2a05c86a0902fd196a70c42f0f371a0084d6ab39efd006c1e80f23f995000d05dcd87c71925a12e53a709c3d6ddd564a0e3d64e9a576aa2b7bb69dd5e1baec489b7dd0d928b806c4222e72f9c746effaea29f42d90056ef475ba9e4936f6b7aecf6f5661c69a3cb515d4e46141e0fe51ddc05bf974cf05c3c2965c715ef3930e861c8cb9289436c6a8c88e9a8cbd3b6491954851b4b8b460da2524a6c221c72d82f8464200aff5b6268b402580650f5477a40756b65e554de96f7581064bf4bdd375aa647ac4a73cb2b318384ad54a7e982f4e1a68ac4d0078ff2c41f95885c7283808feda6a7b1a96aadd01a7241cbef43b28d46e93eb8b52600447c378e4cce60e537896b54560db85d4ea81e0bee1ccb5fda8785fc5224723023f23edebcfe081b5960a8937f5f5bc951bbf7b39b3392b1b0772d4677a29085c6afd846c008801262422cd0617164692280eb41d1840e4b66e80dc6d0eedf0bef8c26944260c1999eb51d71a3d4590809574c1f6cf8cc601ff2a6620d1a91f0be41682af5ec5c5171984d6aac6833bb2597a2bc4903a98f896eecd47b5bd5dce363413c4d0899dcfad2748a730bdc87e94a2ccd2474e5ea08416b0efd4b34464fd3f27ad0947d295ac01b9865f4ffe25ee789f5ceab27f66738b0537a9b0c3138878ed54af241a744ef77d71a3405d8b74401d7c77770140fb024e206cdd7de4d19197fc790767927aa19444fb44fdd72026a93004c8002c1446ee8ca10a9ad6ac2156184d503bd3b0507f06e1c91d536de6cd1803ea63947a3de334f4e9dec835de00ac2ec00ffdce8ef7fc3d5c44621013482e717cd71cf5ab41443fee783407ae7902dbe4706abbd5017b1f09f22b690ea5a73c83661e456a0ba239d46ba6ef99f2c7f40daf0dc9974c65fa9d4d134b067b56cc7fb561a7bf2ac7751ef586bf56d0a70feebdd0de3e5c3b31bd07c0abc62495359738ad4ef091771e7bee9a6df46aff07edb39d8a8e77fd984071fedae4867d347de0f68b8086334096b9d84eb8592506e6d4922858afa22f2c4773905502c1804c33785f23e69a2eaca78c2ce8362535d581fd368c501c31d7347d63cf0829c29eeb37e5a9a64c6ba8c17e641b1d08134e3326a858051cd61b01b246d5d3826c82c47b2e2f28731cda4292bbe89b8460b9e997f99f69cb272ac7fac3fc86a9d8daf33f678d61ad7998ef053d09dfb858aaa56b2db3e0f574c8b51d5597be3268dc5520f76906fd095b830d0088de9b74adaae61a0e87c8826dce1433dd849844c9d55de043e46ce746c64582aba39ff11f3a2feaf5eafdac2bed8707ed71496bb2d52d8caec3c9f1d30719b46d1b73209b01f0a7b044607159afbe37ad108feece72adcb60e7df3b0fa6f36c202c21094d6264558e906b0cecabbb27ced86eb5d89d1452bc5b0847d01a5c9efca7a37772ba77f3393d01c27b28a480c341842acc4ce7ee5b61e6bd11a6e8dcea155ead6d6aacd5565bb354af5e786ad52c9ea3e9d468819fbff24bf07a88e564916b6d8c653f92f678043711a8173f9b502533a39137c023727141444b700950d32ff8d64df03962159691450473eb92dc06ff9de25bed72e1f2f4d34ccc773b31f47e2660e2f34f5ced21c125ecb08e87e946bd13f4a45d4691c6ecb82937f6f8ae4f516cfc1231a61d178144fe1a384347e48cb1ff583e16990325879a6ae39095876a516e0caa6041d64d4c2e1686e915218502ca0cfc37774e8b7ae07471e3bc8b8a77afea89c180c2ae9d1d321a522ba5eceecd3524ae3d8cd8bd309fb0f9c8b9fafc0a34f5f12e81678f99ed28ea8180a950529fe4ebeadd0402a1d2f6059284b765280359853552972f1ad3079855afa949e0c03be72b77e8819a8a5d2386b1b17cac8164c05c42a05493cb70e872caa7b0a8d9c52894bdb078bd4d7401be55887b5ba6cad6026695a903f2e7c21afba41952f8bc3b9786a36048a253e90ab4d9bb65cd33321d0b34d120de8a9f57fdb4a54edc66cfe515a789e7205a6d03afd1d1476917ec5157925d93183ef3d7650d843cc0b55a7a9daa60d8fc2926dcaef22e901affa4029d0c589963b0dd0d2b1b9d07fe5bec64a0b7bf59bb4e45c2e15e2d464ded2cdd92eed551d3f4284301e5599980260ec8e87fd0c1f6db300269913daa582591751bc7705156482f99f1e0b84644b8ef6ce91d2d295c0e497129acb9255742450331fa39ab9890e6f0823a45309ac3d23529728bd40be97d338a744a58f95cf7a271c2b0cd780b4037cfc33f1af8c6ac1e34fa61c57f695e670095c33bf4a6c006d5fa1fbcad50fb53413a5f45fcd1b54134b31ae9c722a44b6ef5dbe5e6c0c9331c2f9635b692d9d9976822bc3d173a10e9796a3e8e740f1ee65828db65566b840ae4ad28827f2792cf95f08925f57be16e4923ca33be52f432c362af76591d93887cb4cdd7ba02e86a9dc09438875896e08c3172a73a2cc99e4de3e0a7828aa98b366428e04cf3503f2998d4e35a6bdacb3134195d8af74213ba56c003f2035a9723e06a15f54940f8aa9f20e17b25331e22454485d59327bc4613dd24578c1f987eef0a56f8035c3e57aac28868008e9aa8879b9f3672013b374c0b88b0956b12f3d7cfa7c01c51a59c7b6b96848e92577dae262f916b22d0574ed9d7ef3359d277f91992383e23d2c1fd08a3c7b0fa983d8080f79ab9f77a7381e8ba0d610112d66f20b406691221d59d88830ded36b5f8e82288a351e421077d7b2abddacc6011925e3e318470079856c63b8309411bc38b5f5360227b2d273421a57cf443ffd0e2bc691903ce0ff34ed90822447628676026a1835157e0c8e9f77a022f481a61ca44984279fd756e5e48e74b1322b1410a3c4a155148ab46e1098b0608c45e661871de2ae8e5b3bdd98f646c7fd9e1d6bd428370be5d2bec5801fe8e3f9b305824e7c54a6702bddf8d0db5a477469081d6c1ff096f818534f41845c6ac78a59fb89a13f4b51131775b6d89f8996a4b1ba4d2c4bbd6132914a5f301db8263a76077efcddb948df6ef371cb64fdfa8028ce8ab1fe13dffa4d78eb9d18fa43eac79fb5805fdf15d71a9a5be89089e6581cb20a97625a3b8f1573070dab7dd0b5dafc89377b3e2db64c4942b8a0c568ac1133f139a8a26a147fc50c81583036d7a0fec6899372c1d33b629aaad0bb1fec5498bedfbe319c8d9cb7deff1a2ff45b856c9432250126987bad3cb4dbc73a38968dab8b052ffa99c66363990efbf4f98588d83678e86f1d718434101e9f852ec2c98057eadf71d6d98e49ff05e7a01ac2fae30f1926f184c4a7f1410b3f74562e31a4d17b57635c5881e4e34ebf4f1eaa09def2f6d774e74c3ddf92aea5084b7158ce78c7ebadd104ef67e55b1271ab1a753b016b1daef2aa8a95429e3a058e16f80007fa1932a2f387fbeea390d7dba1715a26ff8e9df05c9e9115cd876b8cd444afed1728d5d642b5ed9d9e0c9427f7d8130b6d2c4e2a1ec4c61c09b3369e386259878120bb796afa30b3355724d93dcb5afbb01fb4606fdcd9275a00e8ec093c0a72f25c79d63f71adee049c0f7b866fd2c330649bf0344207326c856d7b7f222a5409bb3eeac642e9ef9eb07debdabae9502ebf2305806cca409776e105bc20a502da7edf7d293c097ccf4ddb04d76c7d005438c408744632ffae5600bbbc3cd4f0dc31509ae266b877db5bd6a59ea10e19caf38bae7f039138338313214b5695e3fe88fe39fb63e07d5d03ab15a81248a69892bf1080e8b97a5a49ab8f1039fb3459060d56c69b01d4509e5701274dd7d0f11c9f80cea7da4706b6e8ff005c6c049528e417e412b05241f7a61cf82eca44420cb9724afa948ed54f7cb5862da18ed4b17b3535faf168a0f46ce5e6254fcc8110b5e9a0b82017b19b721f1e9d3eed280e5f686dfa29199185a050966e58a1b9dd1f440aeaaa7b293f422c94ef2c91643596a0a0801c9f8565f3db1a5336dd45b80d03a85761c8d7fb56c9d7b17b20bfef656212c73459e1af5c0fbefb4f3d1faf0c69c53b12891f2d365101916ed521183077a6a90ea23678e85cc4645026bbaa86f9c37a5ca48cdb959c6fc36b2a641217f80e4fed40f91f314565f9841957419c05ba36468395c30a7ec35c47ab095884e7a4d335ab31c81a50ff0aadcd3d7922000031c084a5568d343ec455bf10468394aad999869b4685cd502881849be04a5ecaf112b4b5b6fac45637bbf38e00a730bf2e81069a186fe3bac8400d01257ab70332e5f53c79c8664116fca784df6aee686b52e9190ad12d6e2e754fd34caee019551d58f60874256df7261716eb0ba11c6f1ec35625468c65373848af0566c425492a6b45831037e1d9d2cc930d8a670bf785e0e03fdb17bdb49422db4abc354eb53c8b31ca7e79049e67e0a0e88ce6c3adcb67b763b497a681c3e7e4e1eeaf2b9712efae208ff2c864997caf4fe29dacd91739a000df67457f7449328f79755f73f7c22dd7f8a789e8f3f236673ab797d2f1eb99ac3383c910a670437aaf7fb0a8b0a634e1e889cf2fe9915821dfd5503834a26771cd0dc76deb5906dffb64fc55dc325a06696410249e6feb7a1f2c362fdf1622f2b43297a57e6fb845e074a478ba1d969eafe238a839b9affc3e9a5ad677fa040099b8855423dbc5d2fa1fd835d46153a0bf975f53c6288a3d6c525f10a9667247710fc23128e8080d8a71ffd7c78808d113f4fbf89ffcf70eb60281a3a0283919932760a2af4fc5b2e4455fab154bbdafb1212483a44a5ffb65b617a71dd854586bd59372f6d0d0977a758aa5f21c2d43ca62104c92de9f4ce3bae4150b91a6c90687aa95412fa9596f40776763570c4b2608a2d56fe51a40d976c5df7dd1ae54d4c7d4b29b6f7759478404b9948c364971d8130a9ee018ed5f43693e38ce2c3e5a3c20efce913605175462de4be3340377658c0fa6e52d322c266ab34db758c233d366c451ead0060ac0cfa18a31ba14274af8c7d8c76e436a983c0b46177980e70d1dbef8752c930a4e4cd522741df9c617f4e70a9c0da698cb34b40a23e108a1becded4f056f477374b687d6ab52c83b1dc1d11e3c9c93d64f59564a38c44b397a40e5f206f5bc2a9b6ce0d1765e98a4ba02b121236b4ea8dc4af19a494b6ac88056a505516d88537c0482e8b9e53eff02b4f71e6f61ad2ec1d272fc5a07187c51d0985f3be0a34b65e85c1f6a9da41f1345d5a85b83afd8930a66481a4a985438491400c061299403bdf9906d9a9483d80bf753d04c3c058fcfaeec1b04d39c869afb762f53482c60f33afe63bb58bf44ce19382d201d26781ce265459d552faaca596f55ecd8f04d61cb17b1261cb4acc86a01caa2f4b9141a058013daf4413c2798a6b689afa39a9dc59bbd68b268c530967745d228fd6f0522d5d6bc73dfc31edd9787d914a8478fc94234abd151d100acaa5956f56f3ed28a40c98a90a88f1f9a72abe609c462c71d127541fc9b1ed1b96d022c2312b3d22541788b90937b3d301742ea028110b7c7d120bfafe3fc737246b101a80ab9b30d7c8fb6a0b1c448c242e9d912484fd7f15faab281e99d8f39e4275da3580457bc3298a31d36bb28eaf8c53260c559e963e182deb2d96fd18ad2efbfb11e2853e5857ea6c1662423b562da8dc420b414f3f673be4dd1e17230b49b38f4d37460d9a50b13b75892c70d6cfb38b37ece9a3e3010790b78ca40bbdfe4a767456900421e81ccad5ac31d5c86d2224ea37b8cc1b020f96a115d807c437c5d51eebb465c2498726f6b9d930c8d0b916e10c466fcabf10309862414e011604a94ad4882727e25cf304ad25bc8cf94017cca96bbfdf88123004432829bba1e692eb6253a077148aebb39c914680e59d86c8e31c5da8f8821827ea25709404c1561977c61919ababd1115edddedaf1ce76306c0b3676f7b561b5e157d9eca778410047a21cba258200e33930ea5652cb3edf7aad87055961f7d0895cd8eb72cf9d678780d0f9f7c29e23f90a1a99667d0a2cb8da13d570617a9a165fa62d8adab6ac09dcea6814fa5af82476b5a7e706026bfe02349c8de9b6cb9b79432c914db095d0a020af3fd75703fceafdf18f6daea56479a6bcd733d34a5b44e6eda3931a5db5637bcd199e322a593d6ad32c9a398a98bf506292a93c60814db961971b1654152794a650fc2a58df4e1405cbea48ffe2799fe0c67525cf9d3891a3c5030e7c44e945e5bdc914e4ae7477d1c3167978806993ead3e3e205389b35b31c956a482b35367c3fe6ddfcb6517bf06b6edb6d9f0e5e2e6d36ef6ad98399c835b78e58a9fd4efc187b82fc77f997125951e96d0822b49709a2da7d393675de6ee411a57bedfd0c303997be740a1feedbd0e856896cdf56c6d1fe49cccb55bced686bb76ceb4e2f56c7e0659dc713645bf381b3bb2c5363c5298fbe0d1dadf382badd9494eb62e565d4b9df5f63d56f8cd59370e7f16dbe6b6963407f9f438e857fc5d97359eafe39b4d1adff9920539ad04685a9de8e1745f8e5f961fd51256b974e228b4e2f4176b176528f30b3c4ab74a6ba841a65ad46ddbb6ad6edbf63dbf27adb5adbb56a22abc5a376e0b5f7274e32add64d836ae5234386e2bc3ab95a34a79ec290d720d69e3f6165be47e86ace6e19ec99cb55a877baf7d78065f32b0c91c180737e74795ba4e4a71e7d4dcacb2bd25619892e32abdc29b73767d59bba8f60db595e8532166dbbb94526ec3fcf5f2970fb7ff0389d8f932e276fdb9e4d1ef6c3b29454aef22a5ba2adfe36a7ff36c9bd0ec23ce56aed2c69c54ff5889baebf6cd22e2c6d0a07f14e553f914cf3b75bca5cc3585a7983bf4c9f44bf374f8ca1efd6408cb1de6e40d2c9241eec2344fdd368edb368eb3b6eb5844baec7ddd926047b9be1f9f9f20f782423b3232a0d04e1577dc99e9ee71d17d5c7411c6c3eace8044ba1cc4459aafc70f9787d51d7bb2bb9443acae676343a78d8d8d8dcbb6698d51322cb320c73420534cab9ac7c52542498ad82c721f77e55ba09903894c2bb4e32704c93de1973d4f7a9ed7b5254a1ffe3d78b8f23dceebf101995ac92ed99f8795bb889aa70827d4ef81463e502807b42007821b58410a8220e812ec67b9a662b81e00386eff685d4f99c88fec9a8a622abb6b8abaa626c5aea9e6f197d935a5c1916b09199d734edbaed33fce39a784c3b37436b7ddf97e6bc5d6a35018dc3d068f56dffc29fd8245548f723f856a8fa19dc89dda9992c420f5517bd19c470dc4f9531c391a0815237df8d640f53bfc4c432a37dc32332a1c618bb213715231742dfbbb95d24e60928e2cee9c88646654c8207bd19c715d5cc71f8c232f8ec481f124ee8a498c53357aaa442ed65cac456224904a43fbf09a813838a94a24d33cdc4ce654c875e39e9b4066711b14d115af8b779952b5aaea5dc9c9c993aeaeaeaeacacb66cd9b2454a0a4a4a0a4a56a193ce298f289d944e4a27a573523a299d944e4ae77c1f5aabec5a5b7647bb6ebaec36ae656f9fb51d88647a5fd71d792005c1e91264819f071269d92eea724d97ae0f242202c196edfa5a2d252517e86a4fca3232eee444436968a64b1abfbababab2722227b2dab2454a0a4a4a0a4a56a9d2354926c92389829715acba6a05ab137c7c3c48faa45bf53929ad9ba5d64e97b67eb472dfb67196d579d4f3a64b8fb31dcb03bf166db5a6cb16cbfb5a1f08b65c32544666ba94697d20484486f773b9a6bc53cad0cc4cf9925d53032299375f0d48447ad859620adcdcc89ef9644022f2bd996f86af8f860644121279814866cde761ff04093033c514f06cbe1b1b104997e98451186cba8475d95f8ae1369b1564895dcac57e5a10aea3ec3d78701e563e3e204ff90520bab528d7a306eadeab150ad540f3eb971c5ac61db9e8c5671cd23caae2a8cc2a9983327a9a35278ec9b9242e2a7b8e06c232923e5e3770d26e30d016531e41a42fe051f3545101abe423978139b4e8ef0f25c629c9276ed5ba4a39a439fbc0245d6577314ed9c11a68c4416dc923eb4a14eb88558585642481b0acb40f960fd95946d97f52fcb13cea92b6ebc88ee1ed358f4f21cfab3985fe9c12c54a3fac1012f0ecec703f7f897f1297d5a6b5d2cad58f922b7d9878453a6f6671b5d65a29fdea02cd2cdc647ea61be5388eab7d35f695cb73792eafd5fdb1e6731f2ba4d9b30e725fe5152497094bc4ed04abff02db44f91d28c415798149492655c9fe3249fa0daf8b7586e3d34fd2409c6452722deeb893c4edb06e66c132cb63b1582c168b63b1aaf2f6a4668e487dcbb94033c59f532b0daf733c1d05a8ddd1fef8a4627bbd7eb716666dcb043911ee8970bfbd6ddbd606b5ce7cdb41d1d111f6d52aeff70d5d2df0f3b667f967b76d6e1ca5b452dab48a73ce0caf73646cc39a86af49bf7b3d61a9c062f641ebfcf4a07247490486d72fa2b2832695f9be14bb20f3c431fa5132c5a394b96524101f4a6df794524a5990e393dc6115be4c7193f99d2becec0d9565ee9e769df2290de78300c57518ccda67b91e74fde77acf760d5def719f0da9ab53e8135ac7dfc7e5a475fcc5b87c4022565edcdf776f427585a3cc1b8847fbe1f17a7884b1f0f8628ffd2edc6cc7e182cc161c021c93fb2fd040c0f6e10fbbba60fa4df0212373c6aa1dd5ee41944e4fd83323de33755c7643a40f7f6a5b6c91fe100f1b90e77f1344f279ca2fa1671eb40efd0fbac861e42e54d20768913e924e23d3f7bf638bf41580cdc8540c9e16757a8e25e4391a40cca305fc02216db8b921a69cb3a1a6acf705d98b98309a0a01162c5d6a4271b8a18124662892caa2b3a15ac1c5edacb572f1e0c45401ab8b23cb52541163aa154874dd4612ab039d91155a3e2e5644b59a3c91a54a880f048185179a048830a30b0c7c49a206222c2c0e2799dce59e8a43034030c9f5c5ec72d27014ad13317b4da6ef3299be8f3399fa9c63cdf49ba3cf895f53cc7c1acea8b8f2a91391be9d3a4d69f7b2592cea755d672d4729ec456bc061d9fad2d2afb5d626f57e770cafe74ca220082fa06815871e68fd6de3f59cd13b67fe3954e91245d3a1a806229ae7679c20054e68c880c313cd432f81169a57a7d72a9bd67a9b3643f945961444d11c8629a5919518001c85f9c0cc8d1788b11203f69625d2702aa3881e3a3045476e29acbc8039bd01878c05704821b2f24207094298c18311575cd410812824baf0a2041750c450a5b8165be5c615575f5cc161c586165066978ec7eb395d3501c02a0b1c55615490adaeb29d94d28f0d4f4a29a70c727b2f0c36657b9388db330ea4cefc00e4391b8a3cb34ef3ccb778de8a29a6b46e5ba53a0d44f37c31cf2dcaeb7777a7d37d84e65e3696a29cb5c45286a5d80fd371254b5222ae7c1df1890f3cc8b2bb3d0d368a00abdae84164038b1a6c1411e5480d1c8c28620b126aa480269fd5b32f8d25de58c30a1c4a2b902e67ab2b42b394944e1a6ef1f948a22a455077e24aadb381cb79ddaf3ffabd7060b9a756a0461e6179fcacfc2d6dfab2a9b1b94f2a71d42b31c80de90a8e8f0c125801a5c3084880812a2dce28a356051a4654a43b0146bee0c8c20a2b58a08104160e586a83092b2e50815308269534c4b0012e1bad33390cca9fb66ddbb66ddbb66ddbb66ddbb64d62099aa291244cb6efd9b6a2bc6d5679dbb69fbc6ddb8b3ddbff68d040dbb63d3daa52789676e39152cbc97184515aab7395ce9e7178d2a76cb1610f9b3a13f423ae9d0dd41307cfba8cfa16529f2650c273999adca4ca9e13c82e237fba67b121b85f6eaa21a2d8ceb834b9a986188269080c5c9acf75f3c1eef7a2df857daf7721548023b74429d922753f214ed02921019298f3badfe7df0b276743c223e2dae4a612628afc79716f725309e1d473d5a434e70c34f28af3e8a78c576ea9b1c1a8d1c6aecad22595104c0c60e20371c061c406c23c411b3b4c073bdc00a5813788a8c189364aa2cc2517c924a9944759250817648e7b4bed0672761bbf1fb9bebd22d7207ac8f52b2854af8c0a20cf67ca9cac645858a656eacabad31e4698a10212e4c082296e683330b0a4b4812dc4b4806a03d9bb48634a762e3bbd0290d25c24bd429eb4439e21e4399b90128828b2679183b85089d14416422c49114311454755c230c10bc4f8a10d2a7c96b868e4297f88c06143193e88e9824b123e8b42430d566828f2c2831b29b892bd0b37acb27bd929ad81e3fe48d0aa898b112c719425cff2e4a9e28e74f6a0bae205d50f49506dc086ecdf9d95ae54d62a67d2881c71c68336df67fe4f974aa585ddce877cc5cb92a578bef7deebd1c575afd99b47d7fba6f705f3fe93b2f7495cb6420fd97b149650f55094bd1fc16533ffccd98eeb78efed64f7f63c7b588e90ac5afeec4459c9deefd0ecbdf5bc99bd7699efbdee147c263b5095bd7fe2fd0b3ee341f35e123965ef65cd670de5bd34f266b24765854bf65e22c9249fc9cf88e77d12cf7b261e52f6fee77aef71798245b62fdc724e1697f55dde71d1fb9c2ed7fee7a2f7de75d17b001471b9fff95fd8a24efd73d0f5dfd7fabeeffbbed6fbf721697d31faada7d915c6680a2e7a318ab11117bd4fd20a4770d1fb6b755770d17b103b71d1f39e830edc5b3fe63d07455cef5370990491c8229ada95ff512317bbb3e77de778b88974fa4ee075ce38a1727509844a095214830c436b7a32b37c2e8a27a4aaaa14c540ebfaf388e6b1a772fd274fb9fe0b2e9bc9f5875c5679e48ac494eb9fe0b23a9bb4fa4c5cd6543c20e5fa26b8cc8d5c7f32d55c7f3a753ce4fa3fa45c9a8006925f25eeb1c5f5a163ce94980909c7c52981fcfc20ff069245344ffdfa61cf64075aa7fe133f23c8f5470f720541ae3feae4cad4011977abf55b02b19192bf13b2ac245fbde262fd2e742577aed64fd23367b268ead4aff58b24938bb5cea4c9349de6537d0fb1b84efd2c56cb955b24904f8a641a2553aebfb5cefc23d878a7952c1c66d29539918cb8d8bf021f36ae9ad209664912ea83f7fdeb7e5bab35bbf533640186395d57e689c8ec7acf69ddbe0d14a2f90d6441e8f544649ef91f97b9643233afef1fc16534482e837ddb7cff4c6aabb66ae17c8ea894c79c1b18187bb3c426a4372fe49a970f0bbbc51b9b1b9b9a9a57e85ca466b047d5ae94b92e30b874f1298fd559ceafc264ff597dcc18a2f546b2c2f09ab6b85520fbcb23f441a1495dfee049f9c5a6b8f2291025733fdaa65b76f088b5d9ab048ff4cb2e2f5429e53b922791e15d99eb628cf6145544352a663e684f444474050b0679bedc41294f282a1b880b365fb1817a47a7651eb438ff1f069b8e441b6dee908deb33f1052cdeb303834d282673d629acd054559cc84d55452acf7fe2b298bf4ca6c9f383e62c0a6dd28c348fe31f515c7f896565baf172e5778fb5be713fd2dfda48f3ccafb5d65a29eddaaec6c6cd2a659573e29edcd654eb34c18c42632072ebcdefdba69472ceedb91228b7759616e753bcc115575e5d6bab30dd4c71558e60481b1517d47c8048c9078a2a95325e4638512a5d689438454d2a2a5a60fe568911450d154647c4c5c94d452529470154609676db3bcb3437950e5588016dd0a188d04ad0e23ca1c3941c277227b903c4edf79fd6ca222389d436cb501e1d39d30e13777cbd8e28828b1cba7890fd7f1c749e1d603839797ce100e53167c707071da8c0e10b1cc61cfd90a98ebaa0ca0188fcc37303ce0d28f0995414b92f18ce630904fc50852f37e9f0d85560a0402a8bb1a5f801da0100ce3ddab45e86a3eb3b29591288953efabb0fbb77852d6b3ffbb55a78a4b9f5ae2729b4f4319a90fbedb824f78f2f88e9be2559985962159c7cd9be953ebaeee7d19ddf99e6f93800982fee4ce5499b2f90928532dfb07b3074cf4124fddf17d2fbeac0ea56ec48fa6fe8de6393b85c15afea5d406d3d572ee1a29fb5770ba81efbee813b7d7a7a7eb850c2e23a9def0f2defa2681e81928b29a7ba81e87e56013684b1f6c264797c4f045e0b7921aefedb52d287d17f6a430bba782308229ab8e18b2844a4400922329868eac1080df45073654a7b284d2f6c988cc4b061092325243da18164085d5c35317114860b66a0f51b67a481841622233c10068dee90430063a54ad318351085a1d1ef99b303acc04a162c3c700584158d56c9d48b2b2ac8f487b80ccc42946e0658dc110767be7cf288e303cdff76201b4dc9000ed99d7e1b17de8e29eef882ed4871715e2d78f23b870acdafb9288d88fabda8df8ffa1da9bf731a37f124b985b7a3c49552dca6df92011288b78fee9b0ebd24904a7d74d52bf66ce44db0bcd97d27316dd1d66c2d2059b8a338d00df70a37a82cc11b37549901a219a2ec80012dbe909245182bd28041aa8c31c8f822861f80a03995293e2d5e3a7461aa4d3aba2f3bac51c519422461c61a4a20603a620b1704a146909e9f566eaa1adaa041c90e463300518223cac001888723ba84d143194368a17997c31a74059f9d4d63660a3830bb234faa0b067888e162839525bae072c60d344fe289318228aac2ca0764e8badc54359861b931c08eeb3acecbc062cf18a3e3388e96408b2c9e94164eece058a8e10d2b50286d618204466a61dc18c19623a876a039c681cd249185bde04bb6b9a96aa8e280f05ac8fd32dd19c18d7d8f73d68a72ec63f465ce5010658aadee288bf24deb652e9baf79bdd3bcbf837119f7332ff32e06f6fe7e6473bcbbbbc3b0b8927825c7de5f72f11993a9e3db7bf81afc3361c179d7f10ee57def3b3e0c189817ef92f18fb09bd0a55aa177097d2a743042af0add8b7f7130a15b85095d8c981ca113f9112c7427cfe2559c8bdd62b5582c3025bfe246d2481e651062104a9c50c64299453e8552cb962f945112bbbbbbbbbbbb0661e70c4299310865c609a5e79bb0e517d6ecb1ba1deeeeeeeeeeee6e31b7796572420a2b14151d21c9a477708c470199e97732e30b8eeeb43fd2af983e95b809c5574a297128a554f63407f96bc8d37d4d3530953bdaa039dffbf92f98bbfc2265a5b7e7063fdcedeb8bf3a3e4a1ec755307e983fb8e93128e180ac27c6184972fb29000879926c610e9000691185f94a08ab3b5522e8a10483e10b143d40c703cd1dd800512ad281a684153186134d184963538bbd5aae90217480db1451353339891023955c3226b4dd93fa86644d5f7c2a9c910c31b79ccb1c276f77cdadddd3d351833268ebc5d6d4d1543d54de672b8634ef6cddaad72b5a58820a15344b9bab0e58a9bf4a0e081a44ff3d4fa74f349a98b23bd6f77ea4f5c7da4d937b96d944e3b7f9b6f7fdcb6ed6793cd8e1ff77dd80599ed7fefd5cf16f19e9600943ddccd03e29145eb237125d3773c46c9fef3593124d4beace136151258327d0b3e2bf41e0c8f006596f7a325629f0ab11cf446efbdd1fef4bcb08913a0ccc22a0065d6b3700bac7f627337cffc39bf1b7c2bab191e096bf49c3c781b4c218105f3674df3b87c2101268f38d91f0930706a1a48be729c066f839a0c1bcc409544980d8aee0c53eef7d742ca30041e8f267c724721839606c38232a66853d624d1c4434f7650b9f369b8828b338c53b9fe53d80bdb1175a914ad907ea090eb5978b4b9a70e2b68f626a5d442c5c5f9250c70c20689b89e85418edf5ee60ee70887a6489a7c6a0fe8e7780f8724cd7ff3e222fd386e7e7b07f3a5ba5591cf6250f36856994833692a4d2c36599c9e268dbead1f2683a7b368161d59d8559869e4b29ba7b3c845fa3b69dcd1ad32fdd1bdcc2317a7918b9b159db3274be9c742a7f9139519c56c5fbf6816cdd0b550718be6ecc7dacbfdf813fd0dbb965954f3a33f6de137a8248c8592e68161e87d2c6c1a18fb200f431defc92f0c75d06236f42748c4f3f63fcdd3cdbc4dd882ac09b9b0e8c35a93064f996610d69a46f792294d388361732695681dfa4f88996291e98f3db01ef9e41ae227c808fd24f431087142093575a25c729152a1ece222fd187d1da1ac9a3af45ba1fc22c148ab2b2bee907f53fd02f85fc002395e0649cb81b7d0b37c828a92da7e944fdd388b327dfa5b47c1c393cf68882494cb2df46594142230be4ca9404094a99577dcf6a394e9ff5859146b9fa60efded3df9d459f9040afdb84883701017e9d380b8e30f7e5273b5d6c559e3353958c9188ec838a2c100c40a1040d1bcc75feee853310b7cef3199b3efe764f22350716b84b80a681905c10e354091fd99d4c470473945d5339f9a53627c916664772bca518e4e4defa9d1a72847599039e24341656f28bb4da789653279710021f382a938a41ce90426a406923f4c3d153acd88c1250c5376c9643205e1b1ce39e79c731b3289c48471d127931d2792b5738ac929cb13d496c9654acd2eb30a29c9c3f89c4930a6888cec378864cb76aed13c452eca296be4b2713259eb339fa42a2f5facae7c76c51cd96dae51b44603cd9ca791cf6651d2fc3c3a61d5dfb66ddbb62732abd093bbdfc231c811581e93641560b9c3630ab98e294ca439936078120d88fa5f9864ea78119b2d96536cdc7132710fcbdb73e11017dd88cb9828a0a73255f3f84f358fe71c2f77fcc930eb3fb00f9633c61de554be80872de0bd0cb267ce3c1c9bfe3f6bb6b8e185424ec929f9455a59e92062032f573e46e38e30a49b23c2e637cdde98481b15711b932324afe2e20bf6620f5ebaa315a7f51c9c1d3fca3c443dfe3e3e6ba8205019e4a6727acafe4692543a8fba21b2533b677e7474d178b18783231c73bd20b98586b8d8aef9e07fb7f367bde3d176a3ed3c64bd173a71b157a04b5cd6cbbce0b2274373cab0586fbb7f22f3b4c0485d7fc3b17bd77b28b84cfee8efbde7210a2798a00505cf7a0fcaf7279ee7d7b2161c480b323ff11c7a9626b4e7eadc5ba0b9c34cbe164eb283899b64ce9e749229e58278840f1bc972e78fbdc57b0e14ea3e8577d64b99510c1192707a610c891ca348167ec1c57ee262bf0c0ed7e2159cb8d8cf811bd7bd85e9f4b9d0e7c7c5ee09c75ce9b08fedf4f848d1c5beca4dbffe573f8e249a915f1b544b98d4e075cee861154c521821c9a3c0b5e03d0b4464905f995fa37fa3f4768ce09af043f35be6471949c2e484897dc01266be5d7477a8d1e211926c907461de0646a02478a4f5133b1717a15cdc40e98e3e7ef336365f138e51724dcd07790cc9ebe91779cd70a4321c25857d832d61588e217dd864c9367f138e43d9e683a64dd87d4d28e3e3b2d74b7eff4c184322b3eb6576c5ecbbc215c2175c2c925ae41621f92424a3842417175d6699bfccaa46a0a2a0a2a4a67c8b8bcec5c5a8ab7b420f28ae27bf0dd8b81b80714771229963c6b8e0b93d8ad94f1bb7309f681e89fd8976282349989c601d6a879143cdbc3b4365ff9faad60c5fb2e73ad26405fb3124acef6fdca41b6b537adb3687633dcaeeb717f63b43422f08094919dab983d75286db27c84098ecb95af0678188cc95fb262b741f43d284f55bf7def77f0df47d7fdb1e685c2fbcb6c7976bb1bdb0dfc29d59b950e8050fa594524af9c9e9e4d158cbfff9177b7ec0dfbe85d3dd5d5747d63be1debe8336ec7c64e68ee39e153a79af3dff286da4dc3bf972d7b089fdfadedb6f510bfe0c47d70cc7ebeee29c74dffdd77df7fd1647e6f1858cc7f93010a2b8e3ebe5a2b4b98993fa1c56a1fe8683afeef812dc3045daa1742b8e21795741ec1a510f28ae4bb296aadd38eba2ac59224b547484e4ee2e85476737edeeeefefa9edd5e829c25801c233d4b4ecaaf884cd2fd0c7b7fd1c528d299c6b6ef5cbfe90bc7b67f9c39639d93578e7513c73adab4f0bb922f4e8b06ece58b199874faf6dde210dd2ab06d5bff60b990fdfb077da715d8dce5d4fd8c9e1f979416b0dbe7bc080873850c43f0900314525554a154450232b8e0a246f34e88ec691865f7b08abbd33bac5cb1cbabe904793e9d462091e70766c873daf9d7e7c3261815e4f94372b0aab533c5618b292e7cbce8401bd91fe60129d9ff3dc045f617b11891fd7b9a6a1df8d9b628326491e18a2866c0a14a18b4e945176f501125058a2946d06610799ec1469e32790a51a23f673b3be397a594540b2dcb3ec863ce0ed315a6a9226e28628a252821efe1f2fc138cb4da6892ba925424458b2ec9ea0617076064a0c1882a57821882363195ff13c4f5f9b277165ef82869c9fed4df12c143f6bf44b4c101a2ec2f72208becdfb384e5a7adf702af73c619ffd25e253f386a250d647f0fe3331efed37f1a85c99e41f69f4320cd249f499a7fcf2a0f230391ddc368a0f9af28eee85f644c7e141acb4ae2249515c27e2c08133dd17bcbeaf9c3ba53a77f8a7d8fe6fd94ee5938466b2c89e7e118029ee65f983afe79ac8f6a62f2204e01871962e121236ebd280b60bdf7f341d67b78280aedc34b5ecffa39f1929af7f0d0f7353f04fecbf3704cc9eb598f809af7f005beaf7956cd5f00fcd737ad5bcffa05b8ee7b201e6a4af23d48fbbec15892bc440a6d164d1d7730cc4544709b16abfa02cb150b92888868e0d37cd39299f9453d75245ef23d0d1e921f964c48a32cfa98e4d4d4f19f290a8146f320bec143370f8278e806cb283cf52483a4d1c828f09b06fe289fc0a8ef9bf6f9cdfb10cd833fd4b4c4e6bf9fc1434d4b66fe060fc999a7c14378c88b689086649821f9a5e89b66e317685a42f3337f8118f7e0b33eb6fdf7ac6f5a8e1fbde89b668363f3a3d064981a7c011a0ce218f75168e0b37e09cd7b4f83631c4e52b3b979ef67706cc331251f8e6d1f8536f3ac4700a6f99a8f427be5f81266eac06e6cc059f3a20967fefb12bac256584404a0637f9a3afefec5a3a68e6f5fa487dbb426fa4d6baa3f416c88a4c9e326339433335136a791428ff2b6c92bdbf641be63863b3a9227b96cd440c965236cfc2b0145d97f0bc72e370b720c0783bb73f1dac5f1c93bd18ecba47c99040344290708859f2703180abf651602fccdf7cbcff12db15fb9725992a7f91e1d2f153d4de86bbeffee7cffab83ef8771f0fd3802189780debf973e78f95d3f67f4e0777cbb93eb7c7f929eef5fe2e3fb9900e07be92705978d4bb297df4b03789cef7f41c7f7c8bdf8bd7d8fef97483c7e83ef7169f6e3d28f25023cecfbe593cb46fb36df2387bde87bdcb01b7d53ec47df137b95aa20efd891c625202fb1272d25f9d7f7cb302e1b2d5e12fa99ef6ffb0d3162bf7f848e8855f38a3e23f07b6c8daeef97512e1beff74b2e2e1b65bedf99e66c88d28a7cbf07a163e93712ee782261ad0923096b4d3847c25a930e12c25a136c84b0d664a324a4f912c25ad30c2dac35ed10f91cd69a02f001ae358d1e8c1d7c4edec90940ce1c7880c700fc0e86723bc0e34eee2087031d0c851300110100edf8007f8005f081cf07d2830fee07d8034e0001780ff2ce7780a1d8ec81bfcc3e789478942f808ca7e4af3505008f4b1fbc07403b1f7c0740780a91af35391e97f2bbcc2f9f031a073a9f43dbf11843b13994c6010d4fa12d017d8e911d408f8de02946bed644f1b8447b3a693f3f28ac35f51cf1f12084b526007020c3b5a65167dcf13820e4e07000020858078f1c7c0e867277e03107841d3838c450389e231dfcc4643a643a3a90edc83a1dd995e9d0e1ba0e38781d10727e07866241d0b1df81b083c70e8fdd7700029e02c2d79a38c0e392ec757e7264bfe3c7e2710984b71d08dffd91c741387c9ca0d8ebc0506c10ce16c43d0ec25382967e1e0749ece77520d9f0b814f41b17f4dc23f910c25a9338428f1712d69a78e01fb8d6348663ec614270605888101d211ef1e360283786471c2131988e1c180ab7c1083b66373f6c7ed8ecf891f3030c7fdc1f362107eec01f0ac1f91886628584df834272f008e211fc1d42f014215f6bc2785cfaf1e10ce7c7c7661f1e9784fc070a79f047781d21e8c8f1b0106ede0643b121c0582178af23043c2584a5d9c348b899bd0d092c3c2e85f02c2f84f79e841f12d69abe040d5e84b0d694810e20b8d634e6f81a0cc58e37b0970e116c6abed694038f3a1e86a1dc1b3cc244b879d560281c0625c482e05ad358f33440469a9f013213038203442607900b6426072713d3f1394480fd0d86626b4d396efebe8c08387894c1a3ccc744c05344f85a930e3c2e01f91c416040fe26089e526bba785c12e1af8c082ff325bc0d86c2e5a51b9b1a9b9786d0fc0c86626b4daf996ffdcd10d7db60285fc653867cada9068f4b41fe85a1dcbca48426c8cf602857099e526b6ae17169c8b75c785c2a7ada9077bd920f9a4ac2247868d28a7c09a1d0931012000f39adc88f100a3d9270007848d28afc9150e88d844530915008bbd3d4e91f1286f02284429e1686f03914f2416108d88ba64e3f08a110ec4753a73f48387b20e18f070a67ff41f8e37fc21976a4a9d32f0b7f604f9a3afd32d7d5023f8fd5596eab212bd370cbc0135664e4194e2b52a2d4c81e722528f2020459861b95942aae32860183283e1e8a80dbaa6f21c5a8476890010638311d39603736352f9a19196b833767b7ab057e1eabb3dc56e97431a42813f6da9612b62546e3d00fea8e62109719ca045f6ec9e506e35287c20b1204bb2f76de476dcb050af50cb7a1767a767a7c665ef705fb685ef705fb5e2e360eb5d47edd52e6f0b0fa5e57ba8874fd73b8171d5276fffdf9e9c720030da484c1aa5cec9f89c3d556e4a475e368b03434968ea979fa595edfe6a9571aa9d5028bd05c8f9a07e9ca7781f932c2f29d73cad04829a53b4dd5f254b3d4d4c89aea44f372d5d8d4d8d8d8bc68666c6c64ae8d8d8dcba605dad8d87839789e8bfee4fefa3862a62cefbb2d174dd3b866666884e8ebbe70605788e6bcee0b0776a9cd13d3cf5e0e21980e50e8f2007be1489c1e3fdc51cc1864a00128e4eed645abfb20912ed30fc350830c30c08985a18e1cb09bd0a6e61586214d382313866118faa0999aa1f966c09ac5c576d7529f5cecd1eaa03c6f2bf393737e4a788d7f8848b771c3441f5e3b62cf8eb8235af570612f1fae4b89c51eeebb48a54ff9e2d1e58a567af070fddbf9442ba215962751c3f3442ad2e5942eb10a9e47af880933d5258bd33c9a4660be446d51f224271203c6d4531659451e59393192c3230457b69c7509af73be27f45ff7d54e3ed8fd5890964e2cbc118c0c09fa8180e78d5e63ea44a2648989782ddd316d9efe9d233a79894f914a6f5191caad9bf49634c1c5fe56ec081dca123bd1794a8c2bae693b580ee9a2d53a13eeeef4317629dde5cf2c7984e0766e59d4854b6f81f9f80c36abd3579d5ed529877a3097c91741973cffb7ef7360382ca4170b89ee587a75a918a25a2332ca4c55723f05e3b3cabac242ca82a50b4b698a85c44aba535dae947251127123b852dcf722ec3b2bd7f15a9dbceeaab36219b16a9d18c9a5b3f2d9f63e7fecc264ff4d490baec4f2a7a450796c285103b312b998c41dabd358479a456ec94f44412834906720c722d540de409e81b43490d798b84cab2a60349067a7233ab94eb9e84f1be8ab93ebf83ff5dc1f1854d7a9f93923977988e08e37771f4ebf728a7c9eb84b516e2f5a70c963436901467e9a59a0ac75ce6fd855b2823b523abd656d41c96cc009a4dc50e4a66aa24bf67864b91c5157a43cd23c4a2f385cf1863ba7f26827965e7cc47039a21672b9a75045577243c96005350351f61286536e2f28a8e50e727b414195ec6a9ca6bf095116b8d1cb921b33668c1b2344c9309cd7e7456e754c675022e928774fbf20caddd3ced64dcce384aa50dd84a2a0107dd1894ba47ed5715e9facba5573567d2ed61fe56f3f5233e897d03dada28da47bda853474a15dfc5ce4f036852766e076d23f1f36dce75e88be8dd197ff511aee08b36a21fa38dfdbaf56cf0e4eb9e18a0426fbc8c01d615484127d1cdd18a51fa3d8e7c7330b324fdcd3402d85249dd5656fadd8918de21106286a45398ebaffeb3af795f6d722cfb6318f19eef6dc73b049bb27348774a6e1fdf47e7a3fb9f7aeb8f227f779ddf6928b813fdf7e0cc448c43cfd9fb39613ad73ace7e673dc7c168e2111fb2b4880f99e9431d64b39dfc33116eb5952ba2033abb3754e256ddc8da3e2b55442a94afedecb096aaecef1ae006572e7c84ad6b8f5452beef8798bb55e7ef7b1164622e6f7fe2788476bf178332ccb50b432382e76db8b0de48532eb34100bd22a77f38cf21dc70820ff8b1d91ffe198879188d97bcf0599bd56d206873b674ba24853ead4a953a74e9dcaecef794801216bc524490a6064eaf41b69266091a1e6e96f7036ee6ea2a923adf03aa7e3bae79e93dc772fdb02b7a99eb6e4ee3f7bf4a3f6c7d78fdf2c85a9639fe3b814a665bd2739094ac9d95fe1c90b433efb993af6a16a5146d94a656b4f085170d1be9be0a2fda6325db5ffc3bdb5dcecc20916e13ed9c94fc165f69dacf0fd8ecb386bed8b2eab6fdfced987bdc3326973c3b31904628c3250f6dea39e87c7910251b207fe0c3d21163cdbc7306470a4000c1dc5a3f7f3bf0f8fe0736066359101a451a8c44c1785452b95aa118100004000e314000020140e8844228140341eeab2a61e14800d889a487a4819cac324c9510821630c3106203002002000033383060069699503c93a0d259ba1299651bf449d5b8f79c88b2e81bdbc4226588931a2e0c4a4d4cfbd2ba693d460eaa24447659befe84f45c4b2eb1b3893df3959482b70e3c33c4338bf621da72adfa857282b5ea87a3724301614099122b16c8d6e6e68224cf9505a3735312a999f10c606f7641f905ee8112b762660631cfb402ccf17831a3999e4d2070c45d9934b46502a0ed869e92cc6a1f674c20453a39af0072d628cf06d98fa10ed010c76e9d21e48ef0b4a1652277f0f3228d21319c20a5e43262416ed2835ea42e238a17a92b5d916307a8b5dfd7772c0ee616280fdf7e20aa7e0f9c4326d499f10b85a69f5cb57b66b56172111a83f2e18d9e8d10baa6bb6523a69f70aa26b2be753e155c132d0801f43a44267b58d932cfcd9ec791ac1b90053b554a5a4a7285ae4462917f2d3922bdc22582803636af15a8a9cda41b7c147650184fc8c216d3f75859036c8d94e124b58b10f0d1e1c1ff574e2d23cdd1468d5c28d0abcbf2b5e1f662190769dba087cdbde64a7d438f462661be0a25bdc35eca2b6bd8ed309204204f637bbbdd433b6e4f186012e75ff92c67309dc208c621f447ba0bd54a3724ffebb227e907562358fd90b9410f80da08f56f0a3c3f2b60814cad1c028de4a91a93b9cf585c132026103a32bdbcf4b21a00d562627c43256ecc08307c047093db9fc45630a4896b95081db778ed7b0610aa45ea73e02a9f16ceec4761c2d0be4be51008768f14f2fc86e4b6ff1adafca6d2b1b70e5cf70807e73f5b34a62a38bf7c68186b9ccd845cea55520d9c5069143a63aeb71e252ec19d99f809ced6a8efcac0551519ed57f11a814b9b1a3ea87434a1d84fe8fc96f3f2d859036d8d99c104b58b10f0f1e0c1f7574e6d21f9d291095ca8d0adcbe2b5edf6629907e9dba08bcd6b24927d979b42b90fb8d0a1c42c637bda0bbadbcc5b6fe2ab7ac7c4415fcc219e2cd95cf2e898b2e7e49330d53bd918b1c4b0b40b28a0d1a874c73d6c1cd95d8f3643e0139d7551db9590ba2a3188bff1601def17d3007b443de17c4967d865768ffbf288d602ea9b6c4e6f94c011ce8834df2b976a90b5732d4554f240cf55bd5b14f435ea1d412787ef55081530afeecdcfb12a7228872bb47433ea427b81fee5672a3c2428bdc8efe195b328f5daaa9cc62051eedb940335960bc3c4e86880aa964520f6f90561a4d27df187564bfa57af5059fda9f4c0fbf03901688f0fcb4233b3f8c1f3cfb0379c0bb2cbc12e22e8badccb5bc2f6e1a6b683ef280c94816630dbd367fbf2ca0f7c5baff7ca667c6aa616868009a0d436f63e86f08ba4643a731824a80811fb8e2c7804b632310126122a0cb3f5e05d5a3f406a0b3017437023d0da1bd41681b4dd00044ecd167ead49e5f5d63efb578b6fe219249ba73cd48472a073befccf60a04770cd733f756a8ee668800deb0bff90862794c32fee828534fe2f8d5beea75ad551c9891a379279634bd976f49248bf802494265e3dd3dc91e0f4eacb33b555f8f77861a0af15c4f18aa6892495976f8b5a39aec864730d186af8d2ba69a08ee08568b164eb0df24a5ce44fa7202dda0927c14917dfedb8330833e2d46ffa208c72bfe3ecc4c749e90f72a3c65005517bff2d58e73eca5dac3e9c13e76214d69783d6bb5a2d93760e200f6b8667f89cde3b82a6f02dc7e425f34ac55243e3dd126af98ea52453d1ea2492043bd2c51c231b1b04f06b31d763d44f0b39041fa04d41e5c434b86ba7bc6bb0bdabd052fed7911c2c2b953532e20c4c2758bcdb808c3fa5da937d79345651f8d51ef3bbdb99bbe128a62810ccd5215a1195ab09dbadd9ed8d98e4fbb9946d21a7d5228d1e180ad7ffb1a7b941318400a026f497c1564b78de59a829c15a34978a243c6371a4ec7554657c974d16d7ab86805fdeb77e35df3d89a8786f3a02d213fbc30e4873f4a7ade08c67889d4409b10f794487f2da7890724f247b130953d5834208e38fdda51b052eeec7757164125fd2e4a727b37ae780c937da6702450b9f75070a525c2bbd22a6a444006e10f75efa3fd384ae60c2965d9f2ff80f7ea72eff3709e6b608d2a4a3bc0a350e78776cc032ff7dd3617c3acd4125af67fcdcf09320998c3616e42fe191ab7e6dc0f8e12bcaf73e850085e28b2c0d9ebb84bebda07f0bfc7161b80603979bfa02ef1f659a6022750e2f3400d0da8c47262a4305bf3d5c246e9166c352d7974746c93fda57c7f56aeb366434d21a8e28c0a401a1e27d1877c585606e8c765b5a72c6630a9b3ff7809ccf7f9bc7f24bb2dadd524c85fd8338dfc69ad4f0154e13601a8470fdf0afd33d6729d134b7ac02bd858bb18ebcf757b37b58cccefa7e517fcf40242e88e88e00cabd5835caaa27a4f69c72b6311597d1a286122de2d3f7daa022100743802c3310cb088cc97a87686e6d50d3ee9bc16151901fe37c062047fa728615e7d53ad375c68a2670c20ed9d3838b2152cfdab4457e3294bf441c5e11268b2a4fa24196873f6ad65cbc5be8227cb6251907aa5add06e5a7a6f64eb9e1f22e077f21cef37b5a328fd9e96c82d1737f3bedc7f3d1dcedacfbd44f878dfcfb4896e72d14275d9c5226ebe25899a3411c7e56729e7eaacd8fdcf4d794ccb124acfd623770d86afafda4280a1c45438a0169cb27e84408ec5f71f477b16520a501ab933b9a009118418eabf9738580593cebf05a22594941011bff48135bb10fd619623114aaaa0266f0a3ec348d518a7c9913eb6a2ed2ddefbd09bdf50aff48a589827a6fe07ed8bc846648dbe4950cc5ccaa780ba03e25a300b4d62f6503bcf1359ccda310f61f4dfe29b5aa39b32d822c64f85a23bddbbd1651cc202b3bccf9dbeb92328d3df1bd77325b84e19725a203cfd7b0fe7fa09fc33a42684aa8f47784791661cfffded7d34df00326a09dcdcdb28c20762e5444bd701f1ee3d3dfec696e6f88a3ed7b7799917de0c77c23678f5107bd8d944cee2df08bf2f6f475d24aa44f5692cf8eca61c7aa056ae1760683ea207d82bc522ecd5d6c452ac5151aa3bb5171842e2a559327ad13ab383479c7ec1a8f32879c81d39a64064ceaadbb8f36edb815c690f4a2b325710f290b0b2641067e0e3b6b7bd8f62d266c3c72c05cd044ea00c6004e1acbe81a90aa498d01490f69c5bf24c0f69bf20d998af7181f93e9e6b269c520b9c8f277622f1725add7cee1008e488d77797410b09a8dd97d904b127a7f6c18de8fada3ede65766e8972b33aa1ecaeeef7822e176953a223edf93102be308cd98b98d49061294f970baec3507fc16a7bbeafe0f02b3b26d01b6650d4486643b834987ac9116a4941c3ed68a71fb5860bdfa7a6c7b7722c39560bc8117fd84931d359915544a7cb5a4d4db457907e0516cec90d157b2df3ed9cf52ff9ff24e7df5a6cb0f9ff9ef74f390f1b26eccdffafd9ff9bac1e069541c2ba992f35eee098cdce27be79adac1ed304d2eed67180f66d6f4a5981eb11e2370cf2bbe92d7a4f068d372e58b57c86ccfb9f1ff68434a9392a04a09c7c66fdcf3d585ed22a5edbd5de67c3c64cb9335d224da58e11c5851502458b60cf37d8a4b660088fdc733757498b24eb4c76961b2bc5461dc06210109400a2d2303a9f0e6c20b70f47fb15df52d2ff014adea092441137d36f923622f30033cb925b45b748860ecd2266482a8b947fbd52f27c7c94d35bf6c4d27eef501856c05c91dc6ebe5d993c03f226222952d874ed9dc1e6bfd4846931b348a0ed4071122d9a67a7251204bb2c2b949084b5345f591e497dad66afea651a603a8f46e0986b96454013a32771f400b449280a46f80d3549ca03739718a662287df60e732fcf5bd63147944b49dc56521286bcab4dc4a5578fef294400598b750569dbea87e5eff669c13cad121a7ade71733a4018bf34684492363506dfeb2c290a5e248d388168e4ba9ff1845f4751e6cb631728d31d5f322aef4c00322bd7b1d549c1bdde70a6324e5c743b7a835f02ed8dbc4a7eb44dabc5489ec8b4ca3cbc99b73f5aa98f0864540aa0e5ea3e5d5bbef3fb500ce9690f1e8e974b381867105138b62e9f0cec7fa097a75a255d52dc9d69a08f10789b39c79e7ad716c3882507b4491194396044ba9a14072a920d45161daee91feca5d39ce8896c8632ceac393144c89b3de14e0f519736e4cf556e975a23838d7041b67223858720743b2501d64c277f4d3b518add066e3408f61e9b6790a04744eb14488f07a1cf0cc2e80a420c41b8795689c0d604e1138ae6fcb4e960ad0c0151b671c85faa744900315df2aa15f4a372ac55f807d8de7c07525011cc163ed434fc4a210bdd8ed867ae82467fe583ef6c8f9eae4275930ff49fe1f478031e86159c3af90dd41e0900eeaca2e17444a9e5cae9414ab15851bc66317a658e71913ca6c7319c3381132ac78cbb1fd2fc428eafd5139f2b91f10d0504aee3334a03242af7eb333cde002bc1f6738fda14c081c025eefc24886dcd55235bc625bef5af1894f1b493054f36fb57cf4022683912503dc91dee9a92d42c5d9edb190e03e78927770b4342ac04bc8657eedea25e4128f7d9441a32516e981455c6c46d14e5024f7f59e344996ef3aa915335431320626825de5eac21c67ec99abc945636c32fef28706051372c52b54e93e75eaf8c89679dc4f6a0bdc0c3a60f142c795d4b3c954159c099702e5888375596eae0643f2b08d8df7196ee0f10910523a745699e256d7cdd5ef3144c52f57ad8f6225eac25b2b84bcdaaaafccab7a37cbd2ddf0f8e397a58dd8289405ffb1cbcb8a8ee21b91870422792b6ed8beb92454e830912badace72d149ad20a9a08c1e17233a73eb255c1660fc0af033ef320431148c2521c7d38a739686b7894079ebde0329df7cea9c3494e71e5a49b3c2bb6493f020d912e561dd97599e502314c6fa93612c7a907d326d8bbe6c530b86ed6267c7bfec0dc0da4e427a88ac896f2ba153c53210e4e4169a98001ee904a138d6869a2e8978c08dbaf26f2070bffde40eb943c6f41c730125dacfa8422fe220affede5389e58ef8e2bb84b60f22c71a7511c7e32908008a543f4deb3b84abe9bb7ded9a3e17fb0e6884c8b7b8b507aacbfa4807a45d1f8b09169afddb4d9b913973d2a1af47504b9ff43d4b360b160c70543a44f885c2211b162d1a983145de24a8217cd6beb9564d8c2d4806fe1eb7dc458f33e316f93065e6ae3a4720840740b6e80cab6f8a556a97d8ca79acb8024ebb51ecbf4e503b3b1715121de2b14e0ec0f5681bc41d4532f78bc5af3eb881a7d20c65ce4df0b986a55ab175573b296767056005f81979b6b511767c611b2388153ebb3662aec570941b9a482974345cb1688e6acbfc405201795a1ab23ce556f1e6cb28253465e67cf2b82ad914458c5ee5d4ffb2417b4eeac1f0fe3574a01de36d45a29258ee62a1f566aa0de32c7c9d890a575b7d3288bee2dae6a7df5eb0af7d458ec0012684c7c5cc603d433b32842ec067518cd7612b0d44a88f4674f0a5480396828f7b6170433b9c8105a46d74444db7916ebf4dd2c12187d1c78b5f740778b622d15ff0ba932dedd1f489885eca73ee9ddf2bdf3fe367fa7c3096e3dee7914ec788b5aecf427203f253f91630b6021aecf4b55df601b267ff1e637e68ec7d0c992b0418b01155e622e55f5f3590051ea755697ffc4d898b146026b70bf4a9f5fea413b92d1a41b3a996c364cdcfd4b7551064b22560e53424bc56ede8863d26223cf7e3a68b4a4e907b85d24d3e4ac90c2a3f0310c267100b4036f13ab4285ab5f24b91e0af507318086ed38f4fd2ee056b4a54083290208492805afb84aa3e2e588e8075f1619a30a68815feb15f1bfc54e578846328664bb312a39dc4163dd63985b416c3bcf365186f98f0780c8c6a0e29a89d79af4e5991c9cb345226f215276b1817df24d16692148475d25cac25384e51143f43180459d4a70a980173ff1ac856aca961e67ef40f3e9dfd409c1305098d3756e83ba5277938ee808eb2118ca488d2b283db35e3966444de0ef251ad8a3bc7c289563d40a239c4263af00f59c5ba70b5a3c465ece367884327d98ab4435f31aa5d6700285d47522fece99d1f0cf6707ea21cdbc98d1dcbd809e185655bc6db3d88536f62597e5bc65918c59421b2e4c8e04d8e3161690a3eadbfc41fd2247645d6fb99ffcfea242083e581729cef5e5c1e98b3896e92a8d373a94f606fc9e5b7ec5906760a6348460d518631b9b49334568e16fb8c3a76d72b171d28f42c4a88f800a3136fd7a7346d4c7c28c62910dacf3842b09932b5968093be00c9b8359c4d4b8161f3222a8d373db7d3d5d80cc887c4f11b5d57bd64fae801a6811fa0d93384134b19e19168d2ae2a3c7471b54b46ae98acc90841188f61c589a45bfa654865b4614a09ec05013f046c8d326d0dfab06e154b487a7c144270fb461961a0a6ea9fca6e97d48f9d26455498f0362de9166f3c075b4948ba9d82fcdbdfeac1406eac9c708d0f8c60a4b3d06d4e5e826d8f4d1eb2d202bd2e1a3ce36662e6a6d001eee0d194943e94bbd9be94cf627542da8c0173f5cceb9eb813a61921d05965aade3610685516f9a6ad6a5ead2bec26c3f4fbb270b19fbec15a1713f1c21ccf6c4bb53d4410b4dc7650a705ae7f5364d38ae1c3a701c51c6a5674f65bac7f4d818aafc573f0c638e07215f924adc0f088ebe6c3f85446074bb2bd6a664054c83251a860ae6f9ab7302db3dfd10657709a78c2b1795c466f03761c618a09c2b0fce58a67367bc09b632a6262660d5bc14a5c1599d4f71c0b828dcb7463469a1b3b111ec6ab2638b214734b0e9ec2a51c565bcfdff1326ae9d52bb18f099eb7d2335aa7612e876f7df0ba43d427f91ee797813f2b2476a421daf693962d8e363d2f322ac1ec8589b305259fa2e9add71cf0068e0cc5ad8a15109aa1cf3e963d84df76e46039005e311cd3b8a26cabc20c17a5ff3f7c96fd82cd9c7a0d3e4985455e761ba319eaedfb28107f204f450bb9e93c378ca24136797e4708c60b91e87e2934a23c425554104dc17a63dd47692921af06d6e377ec803fe764dff618c0cbc0bb8ed10ecad5d74e284e5c34b9b4a656f864addfd2e92c8309a23e9701e0172f85fd0908fd6c2220525899a330b03fa22bc2bf3521a332f20b09488d836153b7c06d9f9927d99dde92344a962e11e10f8da2489ede6affeb9b4a7b317009f5bd28ba53e8a3b223251420443d3cf4a01dfc56471e631179cb3c7aba6a10817776148ff379d2916549bd1cecc2d1f9e5917f047564f05784cda26c8d001c417e3f4f72a1a130f89de7e083626cdf3f5b30abfd033a7b9331c54eb29b83423334b02e5f9ec93785e72e53e4ba61fab41e01fe7c629913e285995fc2f1c56cbce8c79e65ebf9514fc6973ebae2e0871d5ba83ad31db31d94c1af6ada798dabdb2d10bd930c7375290f0480e65148cdc3c9367d897753234e244320ce4cb3aaf0b8d618fd4f6caae9b361e473fec7767d39e3520d38bd225a6066cc92ad99b0682805e1398a773ecbb1c80eaaec55d8c51431cc22530b09ad57ac68a8afbf8793b7b5657ef7f9b9ff19c74e6f7df77fd48615044a20280d64910e786b501638a34a598dd54d76972201a62a93ff2de8593de827cdc208f61eda589a01d558aa82282a4fae4472dff7f57ff1aa2c2e2100a4ffc4e042c6e4b4927101a3a42ad38cbbf1fcfb7699d5954b4ea5004e4ccfd2ff61a38bbe0a705f90f2c559ba17a7f7d2a47b01d18a740ecb1ce3a8eb090f42702b3ce1f4156e210439fd01a5891261c8df9215a51271cbd56274141cac61153102a12f19d20e3403d87199d16c48c05f1981cba461e9b872e61f3c1266890d887cf26b70d8bac966d7264f9071976f5a2db2c6ea4929e642ab5740208fb6eadbc6657d21a1aeb78c86322f99b98511c94abca3a952b368a8c0e698b78006d1537e42ade453c9f78c32b6313a35ba0e728e6c91f71c19712d342ee058ac67d9cf2bbf44f139531620a7d8c6265c45cc90dcc33dd039749694f349b31a04532234875c4f8dca12471a7e96543fbac805be6347edc86b4b56c428b579ae7704952ada00a6d6e43bfd2d07a9d54599eac37015672b72dcf04148c99ee571a70d8fd5c061e816769b9b6e66ef0bd5a2e241bc8285c82b2e7f420e476220f94bef06ad43dd255e1696d5ad03873aba86c38c3d6cd262d32be4469a6b2fe6dcc8aeab5b5501f78b0ebae8a4f57a08d8f6209ce7e81656f448c40b9f913700c769952f368e50aa7b7bb44df674959e9bd95f52f14abc255135e5d87a831995dee3b3abefca48afeef908b3db071ebe9577587eed64a5f0ac6637fffa4d599025636868460f55720122bdd472196d0fe7c94dd82b6861eac8a0eaaf261c9002f88f2fe99c1f663eae60c70eccca35282b473f602ce87c940ce65670a3d02a0616b1c3e6ac4335fa9372bda6e93ad248201f79dc9c77b9aaf6540a0ec29c0750ad77ec83a616c3a728ab86d40d9aa235648a48c08f25861a0e8ed16ca4547a46e76faf813112e7c632857ce700aa6931516396258e3d7c129092e5c5ef83684324ad655d8bb8292136ef4392e7d8050b839013122310514ac3184fa3edbf0e2dae0bbd3d3558145d808ab5f27800b8eb31dc7236181715ce13ed9b205b84655b3a04ab1c6140fc5cad5136879646416716133d518f2171ebf4aacda339aee58be94d01cbf703365ba320cde08262b5f8004097c915dce12231471e7821ddb73ec202fb32b40980bcf13f3cbf5a39b080d1a94fd202a78ceee5cfd5a75e3a2924eb172cdacbac44739e51e46bfcc8a256c9880c048def12910016ec885f4239d5044d8a7b7b7c1881b5af3e327400a4dadcf001e708584659d838490e2a61a3461a821bed8cf2330be655e521630167f0e319ce0b79e994a5515cfe98899909e268693a5993ff865b174937b1ef9f4565c72c8fde4d9dd351f701ac8a89dae410de6eb1e25d4c09f6af78a9835c946333bf30c0ad185b2c1ca8ca5ea6b258e8f58e341de8865bbc81035a728b007a81a7c417e30d526bbe4014a1f98a089a41a000f5820da98e2638eedc8ba23337af604d55e8809cda821e123fe00c7c94601cdbce39297e6a1fd358ffe30df7239fa22e690792cbe0a7d6e264030eac2f36ae69c27c84226412d46c15dd83430c39a80835880108d2ac76f15669ba62fe2ad987b795efa59af00fc8d42bc9d49f45c6e1327eefe0d13eac8e0e062c2539d4a4139d969d5383b79484289497ad0f8fa7a662c6729a0a7dfa4a058dfc148e86410cea0e51f51491043d0000b47f1e515c4d62a0faaa186a428e6244ed3cab9907540e5994e75218ca51d41483cb0c9fa8b648dbbe54b2cacf41e4a2bb9e510b05a8b121f628386212bfd55260b062583c3259c1b79cc64ed304f5c2605870fe781c972d43c69bc44a9a85d82e1753dc75afc9ae7a3603756ce0bb081fbb8fd76645571d1815be387e37414ce098872eec267a9261d771e5aeadb4666ad4f7cca9a8cc34654033b5fc6de34e0ac1ece0dfb61c3387cdb1ce4c544d8cd50ae6bab295f7ccdc79985e054290bd0363df2794b62252b2d2b4f87d7d2ab9199c061da64360cd62547aa8e315368105735300f66858795da2878e7554a68635029ba4f5f39bf5cd7b7d4b870356d9be07519a03d49be8287ef83dfd1045962e019fa907caf040cab93753ce9ca002a3969de0d52860a7a550ca7fa413be1ad281bc70c233aae762609fc22fadfe0e3b737c7268617dc13969c7ccb742029d2de44fd76744fbc9c73e755b6c7c9a1c8b500d7ab5b3148358f330580409b812768dd57e877b8b8d458a14f59622f5983a4d868536e55e81c28dcfab24ea48343a5d9465217837a8f951fc96019bef6ed089782e19a78ab047e07d2af75d135a5519d471643e37d99a3069b8978069ed801f56f941a47cacb2c31b1d5707b54a4663be0b4c805821a450de1c8edae109446a0590aceabfc074d98c6edcb214d9dc181add6d08105c638f1c392e964453931a97f365933852241662f3fb1b42b8e22850397f2bbf94045f5fef2f7f0131113262d87face1ff97265b103c954ef09cd3dc5147ac746311a5fd309c80226d0e7f6e9a624399ccbf689798f4632268d4000259852c07c22456aad27f1ccff842ff002c1a2ab005bd91c7d1b6e07f7251cd8eae558042e42969f0d2e03237004206a0e4c90da2148a7894e4314a709f5256c0e09281fd19e030c0fe4a510f266f09d6b245c6af4941a5957c357e36a50cbaaa63bccdea33441bf25986e46a2ac11d8d2753c0d0a54cb54648a4d035465aa77b273471f51b78e0966796e18b2c920bf0456f0329303ba657fda65c24e9a054ddab1bfc1d573e2411ec963f7346c4642e5950814fbc251e2f94d0d292e2b1d1e8cea14adfedd62442dac063ad1d83a3768c73b33a34e15db0630a17de7d3cc17c4a8bdd68245d563aa98b4e487492beb8c8826275f4ceef05733078d00ac55f57910bf5b3e31e3219e6693cdc5854c37d8344b93fdd769e04360157d7b613ee3b479773482e86dd76e051ec6a2f3a36752e9499aca2887876d43be869592198d74c2d5b5a54bd348c4c71faf2058caf7da60dc735561558282a6164361bcef265c204ebabcd8ec8bf319c6a54e63b92fec8682b11dad343ead2d3fef033da07c5b0885c8419ca03dc9619da05f2be9fe7432cf79af508f5fafabcf344a4ce3cfadd69ec601fb601f617df90e11a80c3d5c720f40923f1c7212251c529707d5391429da8a2c01b86cca16464aa50ac9808d92f160cafde49ce9e1fde2b5d96b1271055a388247821c73cb4ffd4428e98d90d573cb3d3b89911a4a46fb425cb79ae0e74a69a9354f55123c21577612241931dbca26812d738f079fa4bbff0ecb712005e4ce5ed15b846e269c2d6076bc21c4f8a393061cc2143f015ac22f1e56d3846b3ead29eb5f816baed2f3969da153b08f43f40f8b55bfa8381a50d25f9aa334c23f43418b330f37bbcefb13ce0674f4970a3962214b59e82aa3ac09450ac609db17b640850c440ab7fbad170ffb2c91706c495b876b78aa514ec1b5655c585000fbfd04b63610268b501c9cce22954f12ccb3fd0425c920900abd06b74e44dcc4b26dab7a9471a8b65ac98c7d0b05dc24c2378a5f0535e953c3e3bc471be1143e635d2ad6c82a0dcdcd0c94d31578ea93db6301ac96c3b9c80d1612d8ec1b7656467bff094bc7e8a8d13c0611321e7a35bd37db0f133045b33f9976a5b52841e765da7f90eef137b860a750d65601d8c599ea7991386dd4495bc386f2942549be3846dd30bbb291ac26e2210258e2a3e2adb29a3121d6eb54b4317954b6ccbb90b7693e6b00ad0513cdb138bdabc9b5af6cab1b133a005481b5069889036707438136a1f3eec267ab870ac0374fb97059141401f020a2e6278e51d1ab548f33f2ebfefb6b7a39e5d6abde5482010d702b138844fa70c1751367cdc6cdc905a4e0686594e38a16af5cbaf8a9a033794d7bbe18d407da07fcc0108929b30fc4c3a735acde0517535dcb8083589c98fa87de39415111d746ec6869b4e92f0b0f3cf61e31d703523f40cf632670a98db043c82a7739385f2fff2f8493c089757fa5cef9d306d87126503007d620a75c5f159e7bc52626ada1407a85c2262f8f822ac693ead1fd1eec99abc3e92151968860cb24012924be81069703e9d567aec1e1c6130221a6846739ff42268ae1827942871b6416638f17ffec97f79ee5a93fb1b1a0fc03f2127ba6e9144d75f6aa34bbade40661f3f73b9a0283d66816292440dbda1b4515f8ef9a6bf75030fc32e4b9654873c45eea05bb2a6ac0c3ab688ee9f415f31b887bb362e491beb573be9cf4ae7991cae6bb128afca22cbd275f35db31aa26f5df821aedb43c9cd8cfeeb06f30d4e1c86b9d31204bb0a7255651d21554a8e42045d71cabb7ea78fdf0adc88ae51c382309a2bc7059476a6af5014d8dcc4e47d3f1318a64c8982c8c59a7af24a1b77ca0c01b6eb9f0c41155089d745050a3540a43beb99c4d5d6841bcf7e60038eed1a3b32571aa1cec3122383085d4cf8b5984e3c8139b2206c60d9f51fb8162f32fbddcda0e01024d7d7a9661a13a8024a08a429392a88442cf0b2ce40bb326071ba30eed87c1bd84685ccde367710d2293d771e6ce311c3f2a4645ae87f00476477b39b052b9ba189b98ffa644564907217b5f61c21b255810394071a71a0e81d9623d6fc52578a648641fbfc2142b8ed83c4fc138f8f5eb20b9af2bed5a0454f2f48f906a147279866405ac553427416cd5f72e2abc924fd37fa1d8f93f75ef7f683993fea945310e1a793c83fbe150320143cb2e4b6dbe4e6497c65341aeaa0f82fbe5b5187ba323b9ff3d75d57a453e0948fee4ffabab6dfb1267b0313b508071f1617d2f3a029a7003bf8dd154b663eeaec85bc575698ad65ec6553a6ffd32c0bde29eb2b25803edad33e6f6db106a4dca809ef07333cda8dac9790bb243cc235d12aba71a86f5cf308771748e544d8797adf6dc5b757737ad158bcac7d70ecc3546cfc7c1162d434d55c4d9a099f2af32a59ca99ec7566a7bc05ad92d74e75842ab5443b96f047526b4dc02ba388c0904697706656a79cfae57804de880740755ddadbc710b26f904c6008c9e81b15da2e2ca398874cdf2f75649295a31dd2319d83269dea678f6cea9cca8e24bdfdc9d5ac153439e8d20a609eac5dc937b2c3a9a94107d8c4885f83e7042ab4980652c679910e464a43780c76613d6be633f580e187e5e572cb89b6ef44f0cd09cfbc9d529a9f071cd271cd01577636917f680ac6a7d597324c4fff483295e90ed4018dbf3621e35443712c4679cf32102c070ebb2124e6e2b6d56a7867e719416f8315eaf770b31a5e63c05c3b13c3340f18bf0652035c50f6c08a3d10a07a5af8f3eb3899eb8841ea75c83131193154821c8a63eea8e5ac015608e4271b0418b32d6d3629c30f2b09eb0272a85f4bb2a2362173ceab51e58edd01a2103716a3e33c880253c8f344792d4895cd9e7266eabcc21f063f0a074f460118835e3a08a450b31fd493c1203b2837eb33f4e8dd35ce8fea70427a90190114b345bda6fd327072c6e51ae3d999a7a78f181af44381fa43e9320c9c66208d658022098396d57f9260db137f0f3c148f70ffa959b47a4f7e6d64c307f7f83a8559575dbb3956c7acc968d8662a6963cc46c52b98fff8e6ac71d24e1709d195061cdf086809bc2715ad3f280daa3ccbd33368202a779b32a0cfdd892307c8001305efb5b18d8c88a36eb94610c438187ace6d4fe23550d7e25301aec434869765d497a55306144e41aef192ed52b1c9a0e49aa94194619cff8b5d3cd8c0e82114dc33f0888f464f542c5c6ba372e84a91da1e22adff2d1e98190a80e10c5b4f08dedda93318ea5c667dc3b55731667f0632d6ce1034f5978cd0a4796ceb71d8c0512670ae09d8fd841f2d5dadf45c0561dadb60b1febab15f5b0d6236f06cc0f6c252923c6316fb723d129fb01e72fc6b17aaaffb044342b8dc7ea958809681401c7af3ce5e899f92d18e83010482b040e88a598d3338836c7329d659f50dbc56f0ba464193bd6f9c4162a6c57a8bd5802199f6e844f13269971673fc76da6d7eeb57ce534aa90d6e100e55f24ece3aab639ffe50dd65c50c19540173b12838fc87fb5f2c3e61ef12a372c202302cf8dc5bd773c55e289f4637abf8ac35747c685b7a78657f2d427fee40b2d82a7d4f699404e9afcfbff77da2a803afab29df8ce663aebc60d2523e30145c4fe10f5e9fe161e01cb0a3f6403099590ec0c13653a3cb3bdbe471b4a677862c5510d11d97ed7265934b2cfe1094f90dfcb3296f4a8de776ecdfd719625a48cefa5b11715e4b3e4e6fd64dfdda2eabbd80ca9f5d572c1861cc989cbb69c4e239bb618979abcd58a84623ddaaae016437148f09be2b07f4855fd5861233c0c4f7b82f3f0e65d1d57bdf65f3a11537646d8fa099b7a0ff580b0622216b5aebd9aad46f5fc52abc4eeaf2d010a59979095ba912b725896269c9976a354c78d8d7db3f852d29bc099db5c17d28f3b5282bcd940f289858e3bf36c099939515367a52b329808fb0ff78462aeb6c62318416c94bbb8d7993b9a6e40be035999467d35b53cef46eca7920d7b1264463daacdb9231991ec5939d4a814229d646cb465ccc50d0853919f44aa34af59e6c0f2e7db0f2a44427013c657e004b04c1f21802ad6984fe734422968e3c82d0497bcfaaffc7becad8e2a82a52db81e17991e24a2f88de3d3e239642681b1e48cccc6fd376c774903d642e9c911ef45ab97239a140f4b0b515aa7e307e1eedc79834e00a1a99a47c2fd368840a6cb14bec36d128b9d2f18f7d127da584c40c6229fdcf029751341be64d56cd2f51bbd91355d33d2d02f47fa2ba046f80aad5d2da5879ad05ec4f056831e0722e653eafb3127da7eb3681db22f2854db555b204c6b8dc850bd730462a38871b648d16935d51ed2d46fa41f9de50efbd39c0860303d92405bdb5a2ce897dcea5548de1b77ce2380c1d07188778e086f9cb1355a0a8d5eb1fd721bcb2efc0ee9649aa23bd7686ba45aea95b0891cd1891b857d3bc0090241320a001b16690a2d07823515537fe144279e88d848553fa5abe96ff47a0e32f0564c498c68308cf03283e494eb699d9794a9a0660740668fb8a2f92e09959b7413965fa633888b4d01f629bded027bea3966891ecc08aab04fb11a322e32bbed14d7c99a7f3820bf41a11435ea525cade3fdd8a4ea15441f8d2e884c1d0c04d5da0404e21b1dca6f4546457c978b9d992b3b6c0a595df5ff51412b7bdd058f184cfd76775a639200713ba62ce94fe5da537d2d0449ca30d1f14c9f541f9094e045ec3a83e54d808d4bb289dd9083039abd44114a91be1ceb515254fa17e5f304688d11ba94cd8e18e16d70c4c5ff46d426abfbd4408dfdfe82687908d7865717158826b3c9b77aec31f72c4b95e3d878b943c1320a81f501d8b39e2d8dba7d9d59496ece3762143125f94bc4ec1eda2bc4602b8e7b8cbf0b0e563d33adc87a4939870878d4134cd14b799a194e77e72b78905300c7a9860c1a7e91746020243bb3d0e2f195153c206638a797953322c00a60075bb94e2b058036a22357fe88534184a5332a1fca095c8d2ee0ec3c437a3c526b297e1b41f68cf8ec0489b84384f5bcf320f385b1b5fbfdea4f674ea107e1093eb63bd9dff23ddc9ce0feca7f763417174593a22f1dbd05ae6f4cfcc6105003621ab379c2418385a4c4e1c135ffe2088c65a9214ac6252e1cb61b36140fda05af71dd9807cbd08d429ebe5157c4589ab2e3a1e6dd6d5bae89fa5209b8aff932362730d05d46a450e8652648d335622318347c0c4f654d5a3fbd0eb06c4b9159b49b8ba7519d5fc834354cee747a49accac6e44e8a2d53a719576419b9b4894ebae66cbf6040c22e37ad31478e74d950d81c3ac327fc956106a978e9a591a7da92ee23c12c83a64954a85113edabbdf53ee5faaa0734f6c9b8ffc75effee7a7d7d5063c8ada7af7acafc01a130f47392941610b5e6974eaed99cff04066abba8691669e69384e4536ebed62142dacd4d5a354b2c64b70082183f77029ff01c6a13b6e29e6540a79562c63cccdf78b5b4e8a26423ca0cbfc0d3cd68c5533c21fe2f6211fd648819e60d57f3486763abe577dccf08628c38ee1ece735727c89ebb6a216212e0497a9e73fa919950bf70d17b9743a3da59c032f7f87b2996983ad92a6f97d1603fe54910e5bdbfd572d607c77be83ed28a6ad1b2e62b52ae3b57fc97db482c073af8c7d6175377d7aec5a17a8fc308ef38a650add8ecc375e8f5fcf52739670ca7cd098d0e71707394bb0c87d9fb4fa99171f38698f567ec036c4ba212783c8d6cf808d1f1ace9205cdc40f88e84393823c8d9c336938483fd63c06bc95f1d91bf7be2ec126e0304e17b4bc0e6e3876bcd408f3574a89adb36786fc2a5453f0baedee24aa67ba59791306ad8d3a66ded33639b559f52f2450317da113c5c57b847f3089454cb2385e526f9c41c521c4a878f5968ceb20ba1881c2ceff9646b6c8017dd3c54bb575e4fa575c8a869450e42c9bdb56c40cdf27ea7620d4c5554d0935e82d3e6432aedcd9e2a151f00de80063f07bef145778f1394db703579e88f9347002db7c09c13cc6c83780aba9482d149e7095ccd5657cf006277d04348e0c8cb013405915ee27abf3e4c16af8cd981d416a1c8be63c9349f6681978cb29f364f2a9d8be87ddeb183036f6bc661be4d1da13a5134f53db7300b7400e01c01657d8330f5de9e4eef126a86764e75b2ee823b4532b13b96c43d7ac0b236dcdbfd7f5f36bd4f063c841f20a63dce479274e789beedc0d69eceff8cf122e6de4b15af2ab42ae4fcd9e01fe7c118d6b731866b7743811357be452a79861b0f888952752223ef743be21b503d1046481ea579e6c77168036519af5118de2d2abdc21bac93962464be39c712e605f5f8bbf902a9de10c1e5b13ffecebb5a863d8076cc215f91240303c59b72ec96f603aa42fcd208c189d720ca9c995f5f6192e0c779ba9093ba8f6bb4fe8a32481514d2b0159119dc41b17183d6acc50efd827f6d3b4c9cbccc8d35f2de8ed8f9ee8368cd036f4c8df99e72527e19e7d14e35da5f873a0a0e838d0736cd46aca877ecd7ba92b5da908cb87cf83ff793131e09a2411ba77673c7abc6aca3f1c9c4f2bbe262c6a78a3db080e2cfb02c215eca06b9b714d42867d334148a21955825a8c47940ddd3209c76cf10a225ec0990d179fd8af371c4e92e615849313e090eb7f0c7d7a79f6c98e3562b04d32823881576f53e44feaef00ec48f3596c08fc55f9c2d68acf19b5de4fe391185e866caeb5af41d2c6b4df380d71740e8640492a061722cdaded1327af608fe1f69cfe492b54fb1d279de0ff25ff984ce8b9b63925cd4a4c956f391107175171aaaf3802b2eea6c58b117446cc7b11fcde07a1005a8be9498149438a9ecc1c2379530ae020c0f47f5c9385a3eb00b9447091cb011f6497ca375ee46713bd3180d999cd1570f6aa9b0f7723d14aeba7dafaa02ea6f86a7bc2a10ac05311ec9e2024d64ad950a68f7962b4f0a86cf91f19f1405e7d4453d7127be557ddce1d4d108b2d9bc28a1ec38546af885e30beb215e113174c11b0636c59e74978e012d412458fb8764d7dbb8335b0a99e2e88de622fbd4cd2e6838b65750e207fa5c91b51a9fce9dc79e1c665183fd241f7cca4e19e1bf41dc8af231c35a33d07ad7d299b71b4d182c0741cd31b59a51039f9ac75676e319ba7d8d6298020cf3a85963176052e35977daa7160c38804617ab40d6456347a6b4e3d925ffb52815f8c95fed94c4ebd31b848b9d3351abd894433e229674f64f41c4805d2f129aa53057e682f39b5af6d4427924843b90d84e997fba6bd70d80562a609a5295a6708884ed89ed4f0c0ecb620d3666e6035d6adcf97fbee598acee9aeb1f47af8b360751f24306436115998545fc8f46d883dc20b6476aa27bfd44a95a394b6af81d7b7f680348761524ca7fc1b15b030736509baffd07820c326fad45cf6c763e01f2ebd396c6f67fed8aa71ccf86d01c5049096a1f5244d3ea0e18f0f36a509a8366e2bed56dcd3aa95b8f0dafa89e38eabbdc1bce06795374ab322a81a61de48722503f731b3ccfb614d98ed9f7bffb29f77d6233f958291ee5eefa5e297642740825dd09ff4589bd82d5cad334e06ac866832c0e4c1b2ad69dfe8584ce6bfe68c9c5b87346ffea65805a7b781bfb50941de65fd8aafca7f74c075e98f2a9df54471803e4b0bdbfaf330dcc9eec1a53d9c89bf2d10f505bf8f10011f0fedc65e75b6c1cab3b4c6757ad7ac031ba409377e88268399460e828f4e6873e1889c56b1ee7b80f148f19148163d6d1759b2c66fbeda508d73cd5d04498b776b52a50b0b645f37868be6b93971dff26550194d8a571a9cd47155f48de604a9314f8297af2d879b80eb6b9d60298ca51f878f16709b3fe08a0dd592c64f0c14f8c994cb690a9aa62368eb812012e940197dde986bc80f3a23a232682158f4903714992eb76da0cf4792792a244b2c722228be37db2f26a3dc64094de2c94d3ee07c992a6e66ba531e3a46c74002e5dabf438040e5126f89ff02c272ce2b5aea478908cf11cf84297480a5e6500400442b3184039ce3b9c8e286fe0e86d8843509fe8c6d107627088a90d1f53091e76804f29fd5e1f9f89ee7eaff34951fa9c5dc0e4de316903699b5c84ac657f616f6a8e590a37a46bca79069b5e89d3973a312d9acce0d64d6ed4497e43884f5916224dc8aa325da9c2b8116da85cab187e6db13f0855455b94680f09d9449fe87f740d860031423b3a335d1ef7d2ea267fdf2696ade5ff9dade4c16fcf0f08f6853b9c0881b0ac95cbb7b49bd5993718bcc5f26719942e2f5d85f971999b6f1cd46059521a9cb94092b09f88253c794fc41263781276e2d5b0b49847d1aae81c0a7f81a3b817173edbd38e829507bdc2dbdf02750006023023c66e344c40c3156566c05a24b06407f93bfe9137531e27c98fde46731a82c7f5e6de2d41b9d446515e8eb219a387eb59d114daa85cd7cc51fc89fb9c541a7b49a490ebffff9f122e0bf465427aac6f4085b4f361b78e1d8509c3b0bce25ddcf3e92728e0acf9327a12e019eb343fe0b0c16763b9d8c20caa750da986ee9c50fe48b3f739033830e28ed7b15e362ea42820e84a5eb1c18e4e778a203b28aa604dda2136449be55af04fd8a2ff8d92be3cb691ef9d9672ce18155e72a7d9e09f3ec7d4fc863306ce995a6c7096cb3f8f301641641d41ddab075ef52b7b557e3d1c679c006b3465df4360b21155168abcbc6e9311dd9eb0546d99affa62e8d56dd45a787f2022e6ddddba224e6f6e7f3b789e4410412220a21d1be072683c72c69057b495d702482b20cb7c08853cf02f010f134417205d9d45e27cce6a414680dde3fca7bbd9f909867ea877431df4c8a9e4fa63bb160ab1e8fd34432e184805e2548a432614f97c15bfb7357b7dfc37b90c4db1cf25ecc152c6e9a833bb97e698b142d8d912f4223e2682914d5e8dd85f1221cbf231a0a5f8774b084aaf5dd00c81a23c11257fd721be2874f03ada3120bd63f552b501d34c98b31ffff77294eb690547283a8ee278516d36f41f6338c63d8b87e95492dd4a633a46929c5eb01e565003d0bfa7aa34a4c7c6481f7c242c032cd383447c8614b8b2b9d2fbd1dac9b1262aec235d5ed41aaf40ec467ca9f6e0c31903486d7e19b1e4413078d35f643865d94d44c3a812b7db9e5a29fdff804a792df9f83ac9d0cfd50658326e29b4d379490dc37edba2542cc353fff1e034a56086878ef9267cb6a676f7bb7bd7f06bef94b1a561cf074b15423a270a492f8108717737b919a40de958ab0a942bb40184a4713761e729cbc51d3cf401a1256e236621f3bfd4e4a83b116c7e051ccc7a3e6e7dc0dfe90a76ff33b852eac34588677addf29fab1aac893806889fa6e74685024a2362c29e339f0a17ba1606c99a09edad8a2684b6b3fffc736bc81ae2b6e42cd9cca0fa8b21ba62d0fb2c68ac79479514065c0851f981096669c7a8ec16979c7ff5527f22a6e2b4e5cbca932d25171375148c76d65ad96f167d54e4f31837cc32114f8ad68f431933e0807fe9b8b16883a7075e25e655e22c76ce8c9cfc2111614a8ff44a09f2663458f7cab2f6daf837495804718fb54b15819cfea6ccefe8899111b9c2e914133ec18c5f815b1db2ecbeb1e66dcb6c2e2798d4b7095038632910505546214ca4e6e02aa0b1a5f51492103a547bca0f03495e341967f29b79c4cb21ecc1d9d05890483354c9f9aab03655392a773e2a2c0c99439f3559596e7bdbdf8b9bde3774fd15765b4a85ef594a1345194e15d98ba76da29f7e287dd0e3ccab6a726c0f58ae5c8ead67bbfee243f7497269a3ba0e072f7de53973b42e32191c013cd64968283e0445486bc23eb05be90515295f7f244f6a5e34df7ebbf633f243c25fffe6000bbe49b9248b2fa3995aebe560183211868af72d9c7e517da60d98757a8f071118ef89086f084bc423ac151023632b9c0f205ab35cc68689e38cb6dcd0f6da560f401f9d2c05532a02b7e9eca480dc60cd020b293a88257a04c4090bea7dda318a4ab0529fa7d0a4d3bd421a73d69e915ec2001e4b561d69addce460dfad7fa87c692dce11c47b91c40799ff1ae3db2583a290381be31d787a29cf1738257f203c8f0de8dc73e25bd52f9a413ac13f8b865269c539a25dfd46239cab96cbe3fc317ba871e80adb9ed90bcbf99df53d1dc0a58b18735fb43591255d488f82c07128e7cf6db0d5b586e85237bfc5bd17bf84f16cae4918593e94f6bd0925c6aaff18d543938829bbdd21ac4eb437c1a7a92a19ace3ace3e5d6fb84de9dbc770a096373c0088fb1844f29639d2c6342c0d95fcadb114a950938e9e690dc40d94f0fdce7e8b37e0cbfa3fdd612245f18bb2a46addcb667bc35bb40f3be4b02e6e5a4296a550e147aace8924c0ba489c1861087dfce1dd6280f0694b538920be67456106d6431aed89d1362388452027448c1d6a784f39c8c2999bf6885b2d8accccad78a8de42ccc9a46e3d0da7d63915ca8f63cdf46fcd09653dd42f15c019ad5159507905f6f53f3b6124a8a1a6aa8f78b84cf899b36f6b8733583f7cb247abfba01b803ca408c0fa58a9cf159e2a2be63b9908ce5e28785f6053af8c5ef6fb75cd8b30eb8c49b1a460eb90e085f5bb1bea63d673654ff29afdddb3f0125e8f7fd8822d0af6691203a86c9d02ff3e00ecb9aab4caf3365be3315f4903f8e0aa6cfa4829ff6971a13edfbba7a8c23577468d9f9026ea2d72422fa23854752ca808e3211c5c32e226745bef266525c5e91cd53a890ee281c4bed1414793653cd7ecc68385e4e6a9e4ea6d8914715c0505e786a98ab06237ae6bad0fbcf4fa192183f5f4b5365287c2711769255cc9335d4ab05addf79f00f512227ffd0e778a8bbf26ccc8267bb12d6dafb6747acd6e03dd072e7ca6b5484de8fffa25d444382d177c784ef065d8db9ca724f67b3ec61e1fe2a63de81aff1801746aa09cbe2609f19f32eb8b081936f0b281088ab569022f98508d7f19e3317aa605460f6edd13894dc4615e1d770b5d15f8cf595aabb7a8cb9c852a326a978177d9adf70783c5251b80ac4a5f5d24f6d55dc2af1ed5d13674273aef8309e911f21c3ce1be9c23ff11bd61c9dbc1fd578485059301ce2ed224b67fe2654a3e37d7963486c6c14896016bbc05ff32123b0daff845f88d30b373c92d41333c89e2bbecc2a94a848178c4ab5805b5ee2035bdee44f6c5ee0cb67ea35266ea747ed451a3dcb2376d033105ff113e0f1c7ff6f9fb0c308a3a31d6c4fa3000442a3c7dbcf985225325e76baac0c359f4481f671a896c451b1642733cd7ec624250d84f222d78a6bdb9ac60d3ccc7cdf4435c943590858ba3244c8d6420a22bdb119fabf3b04ea8f72ff8c639e1d96b04813f9ef18601436892fc192ec4307c2198766070f694c8ec9b2b70a8e6d55428baf115df3d9715e584298f9be662303468411105a0ad880de5fa359b2034cb1728b4ecabf45c07ebb8e4bfcc3bd878925f0fb80cc214b25ee2c056111308a6ae9e3da501b1c54388776a1e1a0dd613130d77c7ee8db2da10a58cd2ba57e19d65249d18d28c2efee7bd59f34e1570e0846eaedbc911e1afbf01144a442e52d0992bc830991f8592528e5ce214702a4436ea9c58423f00c437d3f0f287ecee1ec408b239d567200ecab8c8f8453a00d1144f1d05a9474978df607dd5ebf9038d4abc41253bf155fa5c63f1ce7a76f9a41a013053ca4fcae3cc9ed48107e74d5f42d50859a96f13a0cce61a71246461031c629b2f2b5a3daf12f35cb3fae5589c20dd0104570a705adcbb77306977dfb3cab1d73ecf05d2d6ccbd095bf4b8ade1cfec1c6d39d0e04873cb5a69aa200f6bd8b8f186f8d8f02f7cce7b136c7a3766579ca1dd84507629bc5cde896ff6ed3b34aac1f23d435911bc1968bd4cecce30e166ddb665c91156f155b53af2594e795909c24f7208e8c6092d6b429dce2363b9f4deeb1695febcf7dc3bff1dfd48562f45ea289b07496b2ae2f1b21187f8fa98ea9efa64f6a798a042afe2878fd659488f770c323de2b9356c96e7c6b7897466c91df2911dfafb8e596f501ddeaab43e9020ee6b6de41ada0095fc63db7fcb4d64d32e59b3dbfe0119699c1ab905eff155933dbd9d1f913707fba654f55d4a5c662d04992ef86c81b2d7ceb2d48b95d0bac8183aedb9e198e477fc7c722f8048c98fed052f8bbaef3268331a669fac151bf1b88f26e9490a7c1429cb346e0da72234e81b375cd4b7cb8bc351ea8ccf7a8ecda2bb887354b7df1fcf733611046993c5925db2ecf135bfb28d01162baed6425d1457cbc879954713aa0f30082026c4a35a99851040a5200e90a1f05e4863d59b88e01d8428bdf45f3c2f21e29daf5b359ea8c24ab2958c75ef7dc5105daa08c18b0b0614c6872ffbf7305bedd79e3a97d352009e830ee2777b5b92859a3ebdaf3026be2efccd4a7a08b560de6196a4bf63980775d8b673fb0396d4c2e044bea4a2062b4f4e83330d13e8bf6152b372b288ea91c0f04011ed90ecb6143002a8cbc6b2e0fc8596d0ac650365ad0b8934c2ac4e821a898c4b3e4e4c8a8e75c57bd16a3cd84040086d9e0f29fe21444b7e80160dc31fdf20952354df08e9027934ee948ef72361dccb7cd66483eaadbeeebb938af289d28da38147778bdbea91369138fecc3dd448cdd7c0e4bb13506731fd3eab57c39c0ac3bb7dd2d671dc0ac0f0b608bf8d79180aeb02a5064425be7cef2417f0bcc91d9440dd7bd6820b0feedb1d13ff9093e61161d70ec8748b47497c1d30ca358bc08efd809a44b9d579639d6cb52c613551307fa0ce24ce13bbcbe97653569b8b64b715b28e2fa1965b9bd8f5ee89db9d8c9fa372d625f3e7619580bd80171444b7c515c77fbf71ea66932133db5e49bb1f110580b2c820786d26503d93e35ad391496b5ae1e93d90c64b75b4da622092c1b359d05719bb5da18fad8a1f7a71aaa435d35e36ca721159d515f377ad5abda155344e5b97bc941ba4a22403dec86c62b77b3e1548a9f0fea9065ca0d33bd172a10771a8c472b4d22a599b13df2d7bdb83973c03c9086fe7718ff6b120f81c17a8dad5747fa2608927b1924e9d85a09a3e57850d6c5a46201d7ad426d5f387002a7407be1137d1ad17ab61aced417952c0884810839815a87b5ae9ee8f4156442eb4282d7ee883648fa3b578668ff74e4fa02e7cdaffbf9bcdcb95064e26a311b933f19ccfba0956ab45e8b945bff143b6e72a0d1a15a17eb3f68ca9135451469611815a922811ced7b4db152231640b2f589cd3452f22beff692d9334f029cf40d3f45218915ac822e38845589dc35505cc2fb9bcfca7d2f56e4abceec72f18718d6a7148c031df7f14b2b9249fdb784b837d68f0f17d5fb8321c0ce169740df131dc5def8c33f7b74c453d1043529835b82f51e536ba3784e4e10a49c231404d210f893de21a92bda6657907f9cb7e905322aedda82bc418a900908a639faabdcd71fcdedb3524604429b946a40f546ac5db71242216c9a46eb06082c4641b515fb0632e8ac49b5d961dc1ff641c3beb9035abc88b9ce5bd31cb2e137c9fde5086aa7922de3a87dceb56a220b269cd6cb95db97eaa110972f973cba355d74ccc448626e68fabb2e5195fd2c587d05c8e996271a20e7649452c2504d7246b905ff1d3ce12832b0f12d7f30f8b9cf038e8b26d42c83349539c1b5e124cea430bda5369de4de2c3ecce3895085e1f5a36a34b689e29f9c1b7ec9abf3ef0a8a48af581a7ee96e7b62ef1555943cffa6837e83d76ceb9842af1b3339cc1e30be644d1f697d0a5a84862d4142560237d032d8f011b215518e2daba705ba2b4c03332c5a7950f096f74daac39410ad629eb7272d78aa295565cbbd85bd7de44a28b500f98fec8334bfc3537b16d83539c272dccd1dc79255cdec9a4e2966989eb125cbb9bf5592247b861f0ec46cbab0b339a50c4646920dd3243ccad18d23f35bbff6eae23a913c597bfea25b34fe890c19f4cc3b60680c4739c345cf9772a65b312f85913eb56efff391b478eda9e9139af35ca88a33ccb82333c9bd12c09dcf1b92b8e856fb9b5bbfeecb592a4b5fc8c14b3b4840cae9b8794e2c0c40f0de649d51a407db62beff587d8635e77789ed6a1667786ed2354ccbdd05fb26b2ff0b4af858ccab64285f9180fb1437bcf7a832f5391b9eb2916c2d2ca1f9c573f14d98419c0b6c5f10dfd4a3bbed109c861acb5114cf0c21b62dae8656e32d8c6b0c8de8d02a2b2c92dfd0864dd6d4bec70b7e6d5d153a855414c7236fd82154da6ad77ec161dd2ddfc88977de9db4bef95975213acce97f58d50ce3e359b4deb0746b440d95129c03d2ed82de1d3cdbed57c692b49d2ccb88a0e5a870aff29ab322e0532df49eab78c8ce3f70834eea9fb73a3d3923d398cbef631c7355d8286b742f194058d3bb226cf92e45e2b53d0adbf73e0d864583754bfb6e559b791090df101b358934f14305a67b335512959e2a78afa62f2c948694ebe3b946b4adde395e6263b2c2c56c48cbb03af63181f22da10477f7cbf56b79ed2a08335e2f564b71db1645719bed052aa6adf52e81419ce9cd4ea5b5095bfd34f0b637b3361ab1ee1909702a9ff2b497affd6b83ace748944ac9d7223265956fe52bfc1ab4bf5047f4d1259382dac360e93410b93e982f7075c5240e27fc0349c39eda69c0616211fc22a376407a732db45221dd1903d98619972ca3fe962d2a3d2063a8ed76f1a3a7f614438f2b733d5fe2a064a7a15d151f14225fbce47c6945aa66a4d4a200f874d19ee368c081b5ee2ad39c2114beffc6e4cb66430fa9921c72955b502c1f6521d8f50f0d9ba5207d7294bb941315c57f3c96af39d526f3ed016d7914c95e74987e7274a6e5cd77c25e98093113681cdd8fbb652e2b0114663768c2d95922909161ca8a4bd5038a2d86561a0a52ecb8c87bbcdcf02a7b0876f74cf39168915892dc7412d2fb3c7197bf628a715edef76b9676c54e8e027994e77de1c1b311c0ee8fb280c3082fbc184c41ac1f3e1c89824d9d07b65580de833d80ff7242cbafb985cc3ef2bed04308ced3a37517b62fd0f4ba61b49cadaf7d0044298ab27a56950be095cb9a163d72208834eaf92b568244e82c0d61afe7005e74c298181220cd08aaea0ead4e8a974cad63e323bee8b5cfca060a564bbfd4076fe6ef6f215da94c832691ee840c8abbafa6f54d5b6bb7825d3d335509ab54e5cdcc05408bda9f3faba139425a76b2fc9c853df8e7246933037f63755f9497eea5d212fccbfa091480bfd90bef9557d4dacd950abb7891d7129f863c595952383c2a38b45f144b795851d878679c6d11c0c71b23906fe3a8e35bb7535d053443028fd641919e1fbee9f6589845c2313dfcc61591f5a2edaac6a772fd8dc2d2e8cce41ac6b1073b8fd55299f7d634fece7bcdd1725481f5959e5170fa2550fcfea7c476b32432bdc7e944221db3864d642bab2c9192405dd4303df4229072e9b4058d0875efe6aee2bcce164b86b125800096a324a0e3fa679a3fe4090df175550aacc5d25c27c8d681ce54fd49669018ffdb0bdea3209d1c5d6a4a27b1ac233388889ea66cd6b4c4ef760f5ce825e9dad5c1c2b674fa3f6c335852d9b6379b5569afe497c9df9c9f8a89c42cdceb939c56e357e84001581e251a37e4c8611f15837548d299e18cda6ba410638683c0237f739ae44f2bd8024e65890f1abb611f57ef8a4e791022c4c06eae88c55ed24977e2528af5035568583d9dc041e5f20af5b08ecd2cb56905b5e9405422a7da7160e6480e29797c08195b6048b6a63cfe4d81cf7301f6160012dde804484b209db66b0f965551c951422b3ee855baf4b5505545e842e89721582526e854a4de2c1ecaaf1116df0af05d4c7885e4b71a059d09e2c3dd98fa766172138eefa9cc31456bcc50fdeec9a14496d583c8e1176335fdf62d1ea40a8109708c82b271f25f855e367cb2ed987ec341a6cd0741cd557637ce0c3af5f3fa4c3970c024912072588e951f68021171c5cf06f7347708c6a092ed11f91540c98396a1688353a30680f0c160b08f20bec102a84fd60404ac86f1993f8ce012f09acd348d80818d2e435670b0fa86f1d676575bbf9191a49ff2896fec545e3fad885122e1a578961f05366f564d0d87627525dfb667812e7469a8c41a97da05f6610540468c23d7faae9d8f8581f16973206b10e0a7e991274f6ab3f5409b7bb4c4f69a8eaf11c7c39d007834eca6fdd4bfc987bcd1393980272b79f78f8bc3b71f9ebb8bce5f854be357c001886115f20e632e7a2b22b0cad3f11095bacb759db4ac6ca4c3a03210dc065a6fb983ca44c2c9e5905c526cae87492ef1c58f4263eb2ca2f5cf24d14794025e86bfcd3ca92291262f774da92305a291218951d06c33758a29209e12a527d71d146b89722623472611c4884626196fdf8d1eecfc5dafe5c7a660615bf430367f4b2a7bb07d01535ad0d3a36afa7d4cfe0067c1e77571dcf6ecdf6173e60c17df61a725922d3832c2b71363c93414f042275cb44d451b3c04272ff995ba5f85398d78db7dec0baec2e579eba8decb4e524db22c32a49ed651b46ba33ea3657bbb2d54cfc37bb6799aae80ab5919f35217112932b8bd97c107ac49749602c919c8ac45a36b0ea263e24b040d34039a8634ea2a97484db471669a833ffde01cfa0bfb19d38077915347e1f8202e9df1e36ddbac987e695d5c107019a8feb3b0f35a9b12c5ac9f9be339371857339d87fdcc1aa89e1ca02b22da8615f3ae8bbfe7251e72efec9db58abbd924c38ce9d59ee64a5f8cfbcfa3dfac777dfb176c82fbbd2f2dfaa9787f7ebd846d94e4ee354b2af5abc4353475bb3adbe647891f5c2ff6aa2e883697f80929782c4383e88718acc6b30a1dcaa9c154825a57de9952e92683ee9abf50f7ca3482538e394032826875ec06c445d35868653c55c73f0cfcee16cf2e6c34a45555f29790db561d75dd3bf138e05559da7a3db001158bff0e56fe1c6ff86514c82e2fd670b45cccc3f31d133c07291fc233450342aa0c8f43bf9cf6c51f818b4f9e2cb19036906502cd664985f57c42d7e990c28b3565c9fa1838f558c2c5f58ba835f4b537656da50b5f361f8e7136b3d4dc5ad7e6b1490480e398c3b53efa2b705fc20559ff548a9debefd8ca20fc098d6ec65c368089e775b6aada393f08c902cc3f01927483fe12012c76dc42ce604563a85a12494aa4e71e28010ac7b532234509458c3293b071a64b4a0032813aa507a90baf157f65b74b4c8f6514577c0b7e18d48fff5fc58522eaa685beb070d6c0b5f96943815e062276233416c47f08d54d71c44eb1e832b4261cac0417ebd4e42295eb91a89326edea3720c85b868ad9d349a1cbfd0e7e8d00deb2c3b0ca6c2f6a1341e1eb52be88c430750422a351577bff4af237b2a436ec31122f2f39ee6bd9b68a93f0e8da8cd56cc0978d33a34681fd581d2565eed12d7f9cf8f74484b725231b9afd281e62143198c6dfadbd07e67a18420d38b3a54d2ae856788f2c319009dc744d6bf44d710928ba51c5e4cd81115a21c330b291cdcd3af13cf2e440a973231ab0f4b655b4c1405e60ca52e9330652b08db1daaf0eff890b2dcbdab63a840ee2e8163b0442b2fea656c072165cf87f2ccdd64c464e98a45387b908e2e76b9e2309f95b2ca73a8c1f451a3c00c584e0a54e8700cf73a5b9f9209e33f7855c89a625d0b9772365193bcaeab00cc72d7dab79d31af1a51b877b2160243f39866ad0dcf10be03e9abb9c954d3c5fed4aea5bfc7da7ddd42dcffa7328f9373f903b302fe47f42938821d9c8cc3cdce3fa1f4d2e67dbdacea3fbb75c8ecc8da397567ff78274a56ac591397d85038b4fcf80de8693bd0db634d4ba278099092d06248760407bd5fe6bee3aad179bf64443317fc8255c3840c11f3e517b3249dbe6ae35ac5c69102cdfb855785171324eaacadfda7b62ff7342a9e88050f3b6e0d3c35b5b64490921b6ad7acd7aa2da9b3c4adb50d08270c1b4c11a796cac249df85a6cde17ca636d89b825159b1507a2386dca5f742a172a33530b74cb3a4bdb076bf585e7e0748792245a9ce989bba47288b5bbbf297b1b3ab683f1ab2c93b3b30483597b88332604377d7d3de4bde35a077a6d2d5a02be2cec6eac54084adf25e76b35e4e93121aab3dbf4a96307bebd8af69f33a93824bcdfbd7f1b949c0b40395eef6238fe04ebe339d9c5bbfd41960b7ba28c5c1842637bf7ac94ce54b18cb6f5ea594e513ef610885ec8952212aabab3466562cf34da2b6c3a272e4d371ec292d818a8bfaab4d9faca09eea8df988634669ae562add20e99fb821e80e012963b3e263cef3c8b04a1211de5693a0ba47684ca08a72502a2675cbf07c4de003e85a9bb333f42036d258518bc67084b78624925a14ef7ed2b43a0555ee5ad621bd613570590b66178f5a6cbc8a3e85b79c71c12a6e1bd0c4e3d43849033431af0f1894ab871df7dc5c437a32cb4c4ac0da628c8d6538cfed54d1ea914be100ebaf8c4b2bc3d683faa8fa9226844d51ff93093218c5592ce29ceb4c53e4720075b61ef0b308528f49aa532b601b37ba4a9580e3dc23702d7fa340bd5ba2c554b32452b9c416d90b3dd024137593300930de984d0ab6b62dd3637d3c6ac9549f1678655193c37bf949c039cea79ccd27328cca21a511a1d7a0ef3c7d576d52d000af62553090419b361065585ecf6e3e83cf045fb1ec306a465f5754f24791bd0b1396d89c5fb1d2f8bdb6c4619439b66a2cad19193bcd30d6027beb6731bfb4d0651a2851ddc538e45353cd7bf2ecb046828550091d3c6df555670696410dbe2f8ced2dbb626f1a6bdbdd878fe1ce01a9de115baafd17a12cfe296c6a391109e2bf1565759d12e61db5af13c831f4b300316dda90dd643214a044f0609e935def30c7b13fbf43aae8ef1e43f7944fab453729d58add18691258b88bc85c8af465330f69c4f8a3770d64681e579fa1a8bd208302cd2d44666bbb024d4c6889acad76b6b7d3186849225afeba16c7218fe9df5675ed305d459179371a4d8a60362055ba706f958339c1261162e0e7cde8faebc11321176f3b25f6aef5bec061e67e4f15a7b65a0dbc375bf2b2b456684c364041ddd5d447a88969229e27d9841e4f3dc8bb0360f3c10db207f12ac24b4e8a889ab862c916088faee99b381c6de19b1d1cbbfc443b5861d4c825666c85a28db8f493d0c0223b000730984058807b42fb9a9c4b6150b85397ae7e0bd5c4a900d450b883714ac15a1956cad49959daf78a711a68daf3b43e83814380d67ed2562122f87d0c4aa3c9e29f28839653e7198dd2e764101c47e5808240af8da9d7e15b45b6e37bd6ac5b37c88cb0f8047d2ed66a2420028257ea76cb8700a04f2d08a206705efa78ab66e2beb804bb8102eff547d425cef9a44153df92462217b610cbc5a511f4f8de7c4db057d61fade3d1e69cba87b2c48458284ca36007b15979c3802684317f06eb2970a18376fca5c71e11cbb726299ad3c097ea7030b24e459e2057bc3b331d1781b31b89fe089dd4f15ae3fb4c4095d2151e9c9250c31ce85ea5194213173f4376de27c5df078d2dc676688e1fe7da86afbc856b4f6833cc6063078b808a7a91054a16648921d0d29ae0562189bb6baaeb2b160c910e609fd9c559c3df7fa9d0b874d71e90ffaf1411499cc3c1351e425fce4a3ba1ea3ab278c0c76847a5f093e833c6b761874e99671082077158e36b70f1a6a7ed34c70b7e22963b64527b86cf3fef116c37ba2ba2d26a101d61550c5ec481de49723bdf84e11e3535ec475e5ce0d90fe17f0139b4a4753d71774c0174df0c8f03e7afb54775c21753adab33b7aa0a423c5ee684c9bfe7ad56bb386b0bf6f7bd025637e7d96412f2384d2ef59ec1a7eb159cc20985d0d59585f207d4f13279e53d7d1c7529ebb2d35828f22bd8da072c017e803bc96bb21ea9e43c54b1bdc588a07e8a0305ac84b41ae914264aace2ee184c74be7d57ca28a428da34788912da2adc1916f45e9a32d8093c2cae3fb50cc7bb053d5c3a2f0effad05fda290b54415c30a589ba8896e4512a7238b4000e54b0ad1d35ab968135de38ffb0308ad24fc05f8668cf4767395e088c08eee24db2f820905d7592687d5607d1ec915d7636f9ff665f7658322a86730739321d9865ad0d8fb76400a474a35ac31ea0abe5c74a2f848dc31b29c2976511de102e89a62b203995803972e7842e1e5080d1e001fa614002af77b3bb980fba8fd7f3cf4ed507bb677526789ba8037a3c3d1c0b23062d08bb853ee6da47745ab52cd28c837cdddd851478b3e8882600f4fe563f8037ff65596fb3932d525dff5344d6a995fbe4263a72073efa364108d2b5f00b44942b2e1723e91e6fca21552ceca4467203579ff34cd4418d93364a58ba521a1c795e71201252421847df0322a7f8ca2e84efc18d7922cf0da04761da075384acadae149fe590ac623af800cc8ac5dfc7eda83261cb86fc3bad59b8350134b6ba077f047162dc026ee92d6088b0af64110132d7f2526a5180dd5ec9a33aa1937e13d6d5161e14098071cfe822fc29c211a10e5d48b95d006f142f31ee37dc72d5d8dcf2c1b243cbe2235538d3787c106a9d12c3911a33b21bdcffb791ead7d263786b8803d2ec8b738b7c50401108ba28cca5b90322ef0b538f1db162a3afa268a7b7869eec2b8e43ad7476c3fa4da47d7eb11ed1eb4503a99e9d7a03d5ebe0d1f3744fa4f6e3cd6a7041a66524d5bd1b3a7084831da4274a2ab976772db639f3ad835b8b35dfd89fb402ae84121703988fd23f8ee2d7a67d68e4e9a44a6b1242a94fa2629ef5e8ae9f2e00a43d1df03d6570791fb3463d21fb8c33a3d83f789b2662fa6c34bf705f4d7d6ae9d10da1b788f9992a29da0aec69ec6076e76c63922e10faa58ea6cba08d6727bfe1bba5839cfcd9e07b44eca1a06096edc95252ff59960b30e7061322f82d19ed4af3951555c095aa49719c53294ec327a51e587ae495904f714ac2bffdc58eaebd89734804451570db891aad1408ba3303d61190d5c7e8dde3588a5583259bfe9bf3a8d1455a55967532c3f9c225c85762dc55b4f02832d6506979b80a059a756b92b24113e23937b6eb7dd2d3b7c184885a706c2787d947f4684110e81cc0ee27478169b1b63da4ca33719569a21014d81489a49d35f680ebb4c7f100907c8ab522a0e7310a5181a3609ff97766fb70101d7a3b86d92fb98fdd61f3d5a15eeb7a07c5d368e8599948beb5cde68258bdaa92e86d6014df4ef727241c579ec73363ef5fdd3d4ca31be7a67059538d3bb76d8b4d2166014cffab270b800a571fc099699325a00ad709e651138e5925a0cad2287745d7280eeab076a3f41f5018347bdf3970927c188085edd906db6cbf39657d1e545f15ce89357ab005ce889bf7e3b743c0b41d53d0b8502dd1cc1d8396b7ed89470af4679019fc04c2c44fccd2868b9ed2682e144ed034152752a2d005c670622a72cc8e6922903e9c5802e0f968024fbbe5114097a993d1f6802a3b050873ae8e2988de2328b4f64332899e11409291af80d21f9bed7eca37250726f19fe8a923536599dd55dcd7605f75d6a24060b1c99146180ca1a9b8846a4b152cab82b458e8994ecba0aaa0cc885f446fe6e342291807929441cec8bb704e40cc429c0aacf01991342be4f82bc5326185c0ae9358c070db7a103a1fbc59f022bf5e7624c3f03dde47d3f5089fe48878eedd74eb4498f25a0de3acc6de8231207f4ebe9378b3d9d5554ac3c06a47dd0e4b2819ede8b7d277b175e70398b3aa054f722b6a7909700c903bcde8750ef7a44083ab9bdd5ee3023b8ff3c3de9ac3a773f2c43147a042a8c7fb25a309a5151076934951277dd04c90b13a62cb6445711fb96a6664ec38acbf09b40cc952e992e49e4f0fdf9fde484f1002f58c2dd221fbe2faf2b0f1107db31b9968a3e106f3a815a6c45f124619d76b562c9de4db6dc5bca94a40cef0a2b0ba70aa4ce8593ebcf3071255beb664ab636b2b55a3793eb93c0d85ed899152ad9d9c8ceeccc0ae5fa271116b78298f413c6038359d81072fd1389440a6f80d8feb52e8b635dd6655d3606b9be0c6bad75ecef71353bc3d5b81a57b31dc8f56354e7b81927c4cdb81977855c7f84d240c2de9047c4c7ebf911f280c428ee47d32c95af1fcb347baaaf319727880348b338174e1eb984e8e451f8a3a726902f1c0e0e45411e3db5912e283f7ada6ad646a351191a75d5910c5dc817aed502c39074c13fcdda6231a098508c884faf4c8e205fb69f9f24e4d17b8f74f91f6daf57ec251bcd40be6c3a3a54e4d13b4cba94fc681bb5808cde5dbd9af1a37728e4cb66e31ec8a3f719e992aa35abd26843346f8d5054902fb548112ef288e4473516eb89fd8c6260215feacfcf0ff2e87b47ba9c7e545f2fd82b6724e347df29902f554767057934f2a3ef9866d556ab675a4d33fa6ef5ea4518e44bb5a9366328225d4cb466511a2d88561bc118225f6891224bc8a3ef473f759a4563b1b913e319917ef4b306f285fecc95fa73833c2afde8f59aafd7cd0b9647f7754090473fa3902f54c747b368cb55f58bcc509b5c472f01f9426da64bbacc1f7d11bdf27ef43da48b075ddae87534cb69aeaa45829047df837cf12273a5bedc89d9186be4d1a734cb633ef4cafee879902edc8f7e72fd91863cfa3c7a8d46ae93eb8fee99867cf11f14e9427ff4b659fe1afd942fae3357ea8f7e14cb379a73e1702ecec5b9389c5cdf84429281c6b5421a8dc6b5727d18786412fb89c5623fb9fe8b074fb6d7a663b2bdb6d74b27d72f957c33b6d666b3b5b6d6d6da6c72fd9bf250b4223368345a7d12892846ec27168bfde4faa35327a3beaa4e8cfaaaaf974eae0f8ed817b5556d7e545bf53f13078356e4050da48d425a7defdb48b19f582cf693eb8b4af5523a0a47af76fac21729a43ab97eb773691eb9188fb6a80d6dd1166dd113e4fadd0cc71ab9d668b1bea515a1d16862c8f5adfbd7efec514cbf8bfdc462b126e4fa5c0a00600faaecbd357900f81a6f79c3a79bf29ecb599fcb55f56baa55b57472b9522e4caad42b5e719dc69bb5b4589f84afa9c50e3da4a1cb69eabb4dafb6548b9583713c1c8c837143c8f549ace8eb4f59b3546afdeaafe009d4aafa14d3b738e5f5b4e8f9b8ce7cf1b4902bf5ab573bf9ab1a41aad41f5d07b9d2d09b5d71e97f2e6bef959f2bd7ff5a5f2bc7f46abcdc4caf2a27d32bdca57ce5bc1a3e9722f71be660cef2a44a563d2bb81fbd9c5cc7aedf6d29e03755be6f6ebfd568557d0fb3b478477b81d8e28e53a48c77a5d2d3a54a1df9d757a99f92eb8f53c8d462fd147c6a557d8b9fdb685edf9b9d6838d23cde5cbd59ae1ed2bcc2c4bdab0f464343400bb306570eb901903c23cb213770224b49e90cbfeb2c0973c527eeec9b2a6840058d287cee96ca8fd6e76438812fcf9087ff9c618f2fd380c244395ae7f491671175e231952711b6b33eb2fd69abfd6a14bc2e401553ea98fc6554e18eff5eab2836820dd441d6dc7e8ffb38e92382f0b3d347e312b929135a5c47ab66f8989457911163c4244b3444ffe2e52bd1ab7ed99d6470647849f2cd78894a95989cbcfc9738dc58aa972dd3335d0300a6107f1d20d7a635692ccfedc972cab2d73ef5ebd0bd77a369164d7047f72a8800f169784fc41390e16fabd59281064c5d28fbfbf63964781a4e9f1665706710baa3f3384f4fb3a64ff57c83893bca9f959f34d41163c3b3fc0f18d56fd9a525b3e0395bb1014b57a9f0ca07d9a17a1bde86702554c2baca552f61567eb436bcea250c6a86530480e5fd59f00d5722c80e1b5e152a313dd0840f5a303684a2abeece9d3eb30b77fb598b4e7fcecf33b83d269e423567b35ea17a98b4b33f25c15ee3363e033b9016fd51d86fb097603739c19ee33a187b885d053351840d9f82897096c7b4cadf67b23f4df647c15da48770c75adc69194f8b33dc60ff103901657f1bfc67c0b367d6f0089e263c8bb4e80f03778b845b067709b70b4f1a6e1a1d9990c739b9bb0a96302958c2d0c032cb1ce29931eefcb8f309ee6c82e5cc33f094d9ce9a2f6984e5105cb9f1dcb2872550ae01d3270469c110e12c0923ddad08dbec0f00ff2e9c33d5fdc17d1eeff11f0762a9de5f08d50e53a89838a9a9a82aa4adaa597a6d86364de1cd22a8b42758a57277cf40e48eb3489eefe21c0281d7fd5e6314141ca2084a9539daae81f79ef4e677bd93f4a157def3d02b1d3b8210a2592757790fe48d9248f638ce56d193a55096437282ec04698bd6ab9f7d6adfab3ebbcacaf5276d697b3924a7278f36b2776ff46a3c1d8007293bb9179e3c10dcf194bd6fd9970799bb50d43d0fdefbe085d4e3de6b6d42b5bcbda48e6911ce8af1dbe7bd74d1c7c053aadc84ddf194947ebfa48b7bf2c57bf6a3749bdd8ec3bffd2be8c38fecfe373ca757b3532059b75db08955e4eda97ba793e7dd6a49d13f53cba4da8552632ded9f5ed749182ffefe30fa17211233c308c7fe5ad3a23f8f7ece52a1e91afd7c4f24a21f47a3d16852749ab3aecfa0bcd13edbfd48d0ec6f04298f2c79f4334462e67eee1d4f1711e18e163d91c80a7714afb3587c9b3a2d6ecfe293b72ddc36b18afba5df58a6df240eac85f4f6adc3ad46169e9dd19f80eecfd83d797b13d631c22db2a545b72155fe3db09d170f724a4f82405ce18e94364447480ed181e5ed1ba7fbd52b394407e8fbbc9bb0bf7ddf787b28849c957acfa77986e312799c199c2fbe5f4e2291e60c85b0d2964a2f87e0c067fb6ddba62bcb5ece2a82744f34bd024d780ad393f0cbc7cca3f0012d6e3f5d4538cbba0cb7dfba36ea9418e87bbd3261e197ef616cf29e08823b7acbe4e75f93bfef5d938b6596f99afcc426d804bb0c104fb8def6510904d0f5ec477b05ea404ba3f3c88080c21d5b32bd77621b2d96308ef997faf063076fb1e11890fe442edd497d9c75a355f49bd6727d5ab00db18a0b7e676ad11b5b660c6b4ad5c953d9cdf4c9c9e72d8fe9d50ca9c9b7b571208e93e973e0113de06cf227132cb67852fa896f29dc61fefd1b8e4fc7994f7e823bfcc85f88d2e2c97bfecdfe4ede0427d1eabe097acb6372aef71a535a27a1f4d2f7272ca78fdcbf4f78662af3c933672069f43ed993138a2b87d82028fb4fffe96f2da843ea3d2945d7b4253f411d523f5bf345f4f46706a4cbf7f427137265f214ff6859e18f378fc8f9236f825dca95f9174ba912624cca2a2c3801ad7b7ffef7def7dd7b3fdfef964494c5c74fe2a53ef6f4ad3071efcf121e4b2f7ad17b1b673ffc0faf3411894224663609c7f9f779dc4da43373baa77d64d01cfa8fbb869b48abe8b76862f249f48ae24096bfbf3c22996cca5aa44f81a84faf4e9e3efda1404142d2a54689d0215aa457a31927d487fad01f4a33411931f37c2468fede0852feee17d1e20fdfdf10899967f8853e5aa4dec281097925d1ab51f449b4482d0fd9e2c90f105cdc1b4d7d4cfe24a43e1df5691f26ee0cffa6df85c91c8fedccf81d4a0f0417779435190e1e3e66f6d122fd52c8a3f43e66a63c54e62c7a13dec868bf3f159d608c3ba855f494d3a210faf4e626d3bfe1285138bfe4c1ef7eb45aad0cc0d0121c13090c921724242598feb448bf5b42bd5cf572d66c955ead54487dc6f9ca94fa64fade74c10f600eff9639fc67a9244712fc7a4d9d2f067e1dc15953385a18e1788b70560aa54f04cb3a7d1ba56f50f429bd62a9d1abaf14da1bcef0314a573f2c4a99bbf1f4c304ded58f0952595d620664288e9fc553686701328ff9331ce9fcafc71edf0dc71e524a29a5ec77e9f259b2873cfa6763c0d341fa94b3cc23e6eb399df0a82892bdad26807eb5f55bacb51a31c720bf87d0e12af9221c44f767096e56aacc97013cbcfe6f71c7540e536da2b32c655862fef8fa5b9ef448a629298d214994505ee7b6b771a37ff8d07dc5519fd21db6f78164c379db0290b79794be37673775cff56787bd90d2b146a6618de9cd49ae7b9a3b6b1ab2839b3c4ad9767d38b9cbf1d4c3d4757fca5b839df5afb3f4e546644e6f7eb4ef87709625f919a7182fdd547ad48f344632a8e22f4e5e10200b3fc20f68d147a30a82efe0dff0217a0586a3139c80d67df1e09b8cde33c12f7e64f2e2c5dfe8d144c930478b9784a34d85e3fd1e15e22f573cd29bab7f3672c5638dfc3dfddeab5562206a77acff0965317beed3653b4833d00f5076c912e8e746fc6af46a9c47c89752a58ea81aa2ea8f60f7125b209c70e58bbe932fe6fa602843168a84cda46f50871a0ed12aff19e16849c2d19ec2f1ca08c71b231c094de1f8194638bae8c5d71f3df860887a11e610732d85a358b1f85da972c3ef3d54fdedef9330ea88ce323462895626e1233a1bb1442b93ea93f0113383efbdc423dcad0c3ab8c3f6df2fd1ca3e6cdedebec4630d7ba07cdbdfbc593c0a9139b9d19e92d292f965c1ab54823ae8d0c9706cc9927bdaa294e2d7764f42da7b4fa77f39c4e2bd63ee4578ecd192e57b350877944376879056d5b7f6ded3c9a71031b380dc11257ae9e128e6710ad19142632cc97224d700252b08b75f38f668c9fe9f853ba652218a070414ee8ffa13e390ef92b6f4af9226a075458ff21f45291265947ba84306e1d65ae973734fa714d4c1b18ddc78acb1f9ec4d6ee1b844b6f43febf8cba69b3a8d55d647a16fadb5d6caf72cab2d995ae45e0ed1412c27517b6ce1a481356aadb5524a29adb57eadb53eadb53a716badb5d65aa5d0014c0ee9e0867e4b0a7d168f44df733c737f6e3cb69ce1b4205c05ce209c55a58a3ee8332283322d91352a55e88b4d5cfa3237b5e2a7e8a00e8249299556a0f4f39ac5aa34b935e133cf153357fca927493467c1d862e68b7d2ba0f2f43c7fdc9ab0b47e27f1e6d41c57f9d3fa33579c04438af36b8eb36448d5cf7cf9e48a44c1e22496474df8e866ad209245b55e59219445445a14e42f12ca1b485f889a40b2aaabba280baa8b06a92e5a83eac25d48160d0aa21808a24f04d12882b62348168dc598108b42cc0ab11216ada1355e05ad711e7816b466f62cafd55c8a9a9ba0c6821a091524cb65b22cc8ba90390652fe5608b78fc084ec2fa091ef1e1a72c1d00c86aa188a9dc220593d9bb506660dc5aca59895de3ae152216721df9884808515ac6eb9ca7d603e2ef0992918010bbc33b0a9015818605cf0a09313ee102dbcfbef25ed34808b834aeeb1253b896c69e9a7d15fababcaa0ded457ada1322adb82aa13b53554030244aaccceb884c6b6f09951196dd1d6d31a7a030aa337f4f5f3f3b87309498d7a80b6863cc773522e9b02cd67e6344e93c29d4946fce53bf01c87f94dad761a7211b8cb65784eb8f308eeec95665808a2f9dcdc986e7e10cb81754cc748955cea56a38046932ad3c70bb5209a8e8e54999d41dcd9eb604490cdd8cc9935b3e69b32738a59335d447c7cb87337c418866a413aa4ca14054915a782279384eccd445d88b290fd7f70fbc79414db5d50100e7d896262b277f8ddc9ba3b59f6feef0ea803cadedddddc00dd08dd10c9fdeed3753bd9dbe4bbebee64b277eabb0302247bb70d0a729b202041385d4c1793bd677c5b996c48e62d210b6481b277db9b9b9e9b9f9becdf32bb6377b2778c6f2bd36d65b2b7e9c502b140b2777341413d13d434413636c6fbc537279305c96ab2210e8803cadecddd747337d91bfce676b89dec3dfae664ba3999ecfd7d7340b2370764aef816d4bd05656fef97807ce16248df5f440fe9220aba34d926db80b2f7f7205f36b97363e326fb8f3558db8dfbc0c30e0db9ff6e32bdedcc15e9b27dcbb84abe6c40e68a7f7b210e438cc3c738c418e5c3470931c6333a0b7216ed11c5cc172a0421510b68e8a746045113282821e591e131fec7ff18e3c78fff6578fc32e0ffa73832e0991f531c99b3280c68be5017c86834e6437366140652c038a43732e0cea149c97f49c97fc9ffff977c4909fe7ffc2525255486cab4386776e60bd5805c990f2466d3e5509a0e469de87cf01fd218a932532525a954c9a74a4a4a5225a9d47fc97f492a95023ac133a7b0037532cef22020f3c59d405bafa1aea6d6b9a0d0829292d06924a9140949ea4952a9d4a748522424259ffa9214090989c76626c11e0b7296ef7431f3c5ad902bf37fba56cf50b6be832e950a5d07752221399d48fe444242f2242792d329f5249f22399d4e6e83c2339fb0db5899b3fc6581e68b8fc073acc3acdf582f81252109bd46aaccce33628c9c4e2323a71f399d4e7f1a398d8c90fce9494e232323433d646f9cd54576e64b738126966d8ec758587bc1fae0740a9b880cd3c888c934f2a69191911f318d984ca71ff9d388c964ea91816736e1eeb132ce6a1f20f3a5b5a8bd826c0dcdba8cd0829191b0673270e718b8b3f7a26432954aa62f994ca637954ca5d2c89b7ec4542a95600d0b72560bb131f3a583f0d8d6ce50f65acbc0366132858d03e3964af796fe964aa52fddd2bda62fbda974efed19183d237356bb80e64b3f7143eb974fd7cc9a03522895c296912ab3f30bdcd91b81f782e07df05ef08260e9ef972e08824133e8c659536867becc28744cac480e11d8147c706f3881a4cafc40f0fbc0ff40f003bfef3ef817fcbe6f8734775a9c530664be4c1ed0b8970f573373e52b5a007ecc1375dfd775df77dff7755fd781ff3df8755d375f1d9eaf20674d205ccc7c9926d0e15a4286706a13055c13df174e1bcf769db5dddbaeeb6c676d67ad55c253a2c5395b40f3a5023534974f769959068314b22721553a8b70676fa3d6526a9f5a6bdf524ba9a5940641711037ce126267be2840aecc271213cac9de1b2c27c107d9774815ae525a2ba595d64a6bad35b81a9b8cb35a3620f325007265be9cbd64359b2bfb0d79feb8b5203b8b54997fa3b9cedef77dcd1205b9cadf9a50b2dc4076166b632c2299b6adf25a67d79f120ab9fbdb760d4d279a888bec2ffae0f68b824432eeb55243d96bd93720554ee29511c9786e11675b6eec247b5150763b57fc254b14d42a7f910590719601a49d2f2d72658aa4c81e84ec2e14b7803cc84c29104177a441351c97f0c2298119e814b16226dffbfdbb6cf13b9d42ca92bb7bc032695276d7aebf3d1d4f26323557e8f49f4df00ae0c4f597200e19abc9f3e737ca97f9237ee08e3e3aef607d7056ec150f99fbd42bf7c9283ff305cb15fa3248153a7f32ade14b951e5cffa79b4b717bb93dfdd47c9127a7edc79bb754a69582dd8f4239247c271ecf63d9709ff4231997a5e7c15c55bf2a5f3cd95ca90fbefc295f3c9eb952f308c432cff8bef79cd68db39dc8fbc011e9965ec0308dc490712299814a95989c3c0ebf8dc637bd99abea5fec0dfdf8f44895fa4d3b825ce1f1623928d724649e6f85866fbe0dd823e2d55aacdeac55ae218a4385008054c393689048a25aad5623e127793324920c4f12cd66b319297c924848884412c1603018a9e449221e1ed2c993442e128944327992084784432275b55a8d44f224d18c6886847a52379bcd66a46f52272444227530180c461a7952c7c34392f1a4ce45229148319ed4e1e09048b656abd5483f49dd0c8904e349763623d9d98cf4e2495668ae542192e8493f6b9a65613018e927c9f2902c0fc9ba482e12c945b238248b43029ff445f4ea3ee97b48175babd5485c8d6467487666469a9148dc8ce43dc99fc43d891322c1482412c743fae68448240e4622713c24d28f48350020e45462c8d13043c8d108431412ae7933b856ab7933b93e966114ce84f06c3613caf5ffc112118ca7440413c144309e5cffe4e43311b94438252297c855df24e591d4443324b55aad7e094a34632644329bcd8472fdd4a91b81f1c060309e5c1f25c3c6e85c38239d6b1445623eb29cf95ecf7a00b971c8fd292ae0178408843b4e223f7a8ee7f829f49c066a5a8ba3e738cb004cf0b4ca004cf4b428f38ef0932e4467563a70477a23ad880af5aad62b1fe9773ce8d7d80e16ddd31f6aa595f3704c90261ec66b8dc3bcb9a1413535f3e97c4a9b4fe937a62f5a6333694dcdb6496ef3912834628ec1c3b425d42cef270d53a056cd17b3b8e3e7395f3bf7aab3554a174a4ffe44526a9aae86dfdefb8f3bcb0b737272786c2e04e6415336cc73286d67f398035deb8dbed9ef75900bcdb43883a4cae421dfc7cc1ca5f1f0a756902edd1bfdeecdad4eaf3af61473ef4dafb5e8421476d314e773e3233a8f1e5485c9a234575141ba4c9a81e95fc8930669215341aad09c45ab90aaf93cc8f3b3c8b496a916990ed11ca9325f74e21b694e9e5f637a35d29b4c932e9de753a0ad57321ee43a5c88ea30879863303ad32b5790b39a0ba99abf05db60b84c9c9c25df81f2fc1e3d87c7237dfdd3abb9029a5396e7d8372e44c6829c35a590aaf99d2d5d27399db024cc04620b93082a65faccdef7a55429e510bd05ad52a6aa94120b797ac13a41813088167db6d377cc921dd481081aa93261d0a69286285894344c892c2d4a1a55b8a3e778289496276d8aef276a0b738879fb2d9cc27b53d07cb13157e60e1d2d7e615f17695a35dfce399ee6cf983479d208215586eee83979eac476643c3dbdf219e201bd920f68516621aa4bd434ba3889a2bfe71d4a9f4183e6d2f761d27fb7e265e9a174fbda43bbe56c3aaa74ba147ad5a877d4bbfdfed4cbf74e2e73777777777777777777777777a7f401cdea98abb8e77c3237bf51339ee44f3262fcfc37fd84f1f3c5cff9355a7a451aadc0f75ef4f37dd0b1a357f5e707d12cfcf387e8d5479d3afd12eaee4750dc7dc5256f7115e10d04bfb1c9c5a42fe1fb2f70e961e0176fc2307e049b3e061e791938c69fb08c27c1a79f81491e85677c6a89d6eb9e38934fc50429994183e6ee7033d205f5dc3714d2e5e487e37e5ac57deaad639bfb27d53fa997dd3fa9ff51a4a57eec9f0f47317ff83d149ef9041b51444e7d057f40bd3f0573a0de51a81ca8ef3329c12e24a755dcd307cc9874b142b99be38e98292c690aebe08fc23d837b12dc422d722f03770cdc23b84dd85b2d720f03fb0bee4bdc5fec2e12761aafe11c48fb8de338c62ea455dc7fd875c01d7e70d366dcb74daf80c89d19a35be471726fed776f3b9b0ac516bbdbf64fbffa061693d9c150b6d67e83e0723ee87e9cb119e35a16ebcef6dce9ecf78f74e99efba6fdcc1d26c897c903b9c23df7bd857499574815eeb92e9c31a9c2cd9773dccbbd6fc6668cfb29ebb8a7f50dfa3890b63877b89f2c9ca9c51d9c8e097628b7d2a9c51e2d4e225a9c03b0357a65a7fcc17ed768b1215d640e1b5a3fb9f5d88c462da1a55976c855dccb5c99eb6a7c50c6940b127764a2759b2fe0773bf9e2b34111a55ed7d57aba166a16671344f333278fb95c13c99cf87f3a59aefbbf1f399bcc3db7d321125344b9ff3c246806df085206bf3dcfabb15bcd6e35bbd5ec56b35bcd362c25db7ec2f613b69fb0fd84fd2ab9b76fadf5acf722cf5a6bc48c6d1aae81702de4fb7edc6a997bae06fc3cf007efc1ee47dfdddddddddddddddd3f74cd15579f9e194c54a9a833e0f11739df79b7a975317fa0396abd2292837e574931ed2a5d72a407823b08ca00c872c80e74b237b2017b5065eefb11751f7da2f9bef97ba88fe2fb156f3fc2f43d29b367b1e739ade78dba5977b2ee62dde5747737ddb482effe1f28fafeb1bbc9dc77b35ee16f5188c4f49e037ff00743246627a4c26a5c323a4054e17636f4d03e1234db3782e49d3eefafedebd5af7e25417c4c92bb943b579864f1378da7ecfea34a85e47250afc85c0d42e68c90b92564ee250a0f3d5c427c6691d74e07cdc07a7c88da7c26600faa4c6d4411dc9e52856211fee8e556fae9edf9f5e76c03734ca7dd7c6fdb362242403f96c7f278dbb6799fb7599eccbd25d2abcd037bf0dec3b17bd07fc4bdf5de4521f85efd4cdda4970f04156ed74d9c1904e749484a13a79b385df791de8ed61b855ff7b745eebb2a5e2eefedf6b68a97cbfbae4f1ffc06dffe905af6b71eae7f491d4884abb8b7f65ef13d182f5e8844a4d9d9ce769604e6f0b71e9578ec9e0867753dade2de725d4f90773d5fd0687ff463d793b9afebf1c097f6058883c7fd5e8038be9007184e9fd933c273d6d5887436245c6369997901f8ba23689e4e64d2648e9332f41a0dc067319727f69a13f121eaa234b4a645ceb79005b9e2455ac53d9d89c91ce79de65beb6f43a3f199c99c8dc91c118e48abb877cf32d3fa2c35ac5bb72eb638b3b7bd87922392b9b7361f98630ba9f76211eee835f9e7e8c1f73c05fd3e25f883f75dd32bc93d08e6f0c2b633902b544815ee3f2ce2e07a4daa705f61f34566eeab909c5ef5549f5ead3e29b91c68649983cc41e6908354712fdf866449e9c2652966cb598ee39e93d4718569611a91ac294dd2c5fb27212995babd3782642df6fe0bef8dc6237516fd6aa6564ac6456b585aec0febd03021399d1d723be4d7eb7b57c3d983c40c3f8bb73c2b4c48cd6991d3f9a9e97175323badccbd77ead5383d6fdc683ccfc52a5ceffbc78d26734f634667b4a77beee950af3a8e0a65aee3e84fe69e16695685c5dc19aeda54206038569f390b9198d993e1ebb8afb8d2ea4f8bdc8f70f5c13547a7c65ae46a0e32f7b50ab9c27d63246cb60f62246eb66f879c5583ea8e2b733f762f99df5aa7213b54cbdc8f157679b89f01dca1b3c555c8cc6bd285cb9c7dee9d8874f1cc79ae3057719fd7e60a12348bde089237c2327ba7f1e67b6a71f67feff557f3e18266a76671b25671df4128a7923be25964eeab64791652c5995aecafff5146fffd284ce54fec9c87e33a8efbdc71e0df1ffb2ff75ccd8239c02fac306749afcd17ee74fb6b99e3e13d0985871e2e213eb3c86ba78366603d3ed4d95afb379cb31fc0b72112337b4f03dcc1e39e14fa9819b4d8fbae42a40af71eae302dba9f9c8783870da74f87b3279ccd66cf14a5e77efa34015ed81a67bd08451687cd68f8660077e890c728ec9816b9f731ffc3b308105c70607804751b940d7384bed3624cafbca645ce3f6bbaa91397927bceb88e5dd989e3debbe1fb5e5473e71cf7ddeb670e0fbf1089996dd8cf3d276a893a02334fce2a80d0c4e4edbd76d3ddfd81eb758926d1b3b322107c666d7ae57dc79a43aea2cf0dcd213abfbfef5a13a9dd453f0822c07fabf5037bf0dfaa5753b78d952cbf71d8bd74f41b272e8ff93ffa4dbf5aa4336c2072f422d466c503b7c111eb3e7dffa954484eaf7858aac3836f6611f883bb7592a5307a83837dd6d3aa9b950ddcd167f2a90f799156c93c6471bf77a637bdfa429c5e8116d62ba7277f2229c923661e674d570bbff3bcefab7ac3ae756d65e68e3efbe48f5408104277a43b96f2b8f0e0ca2156d8e422dfafea900dcdb51ef711017b5065b711417004cdd38bb44847149b16a90f4915fa2b515c1efd3699521ef5dda7573fd2056442057ff0096299775aaca128bba3cb76327dfa74a7269b33a436f4d530902afa54d81cdc2b32fd0e0211b7c9947691b69933a37ac8d6df65bd1a4d3cbd1aef94cd9d58dffc09c9a974a987bda6c5da90b39ac8cf9c6e913984dda645fa4064e17a91fa3cdc87debb308294a554192df843ff7c2025d072ff740f250ae5610a16b3d7b3e5ec5a2355e8b3e494166b4e9fda4bbbef1c62ee9fef2fd6d0745ba4a79a4c4f34cfd96f3a21a05f143b3730186c07426e706224b82385ddc09cd535af1c999b8b1383c1133d7802111a087561a6b643c70388c8e29aa8a83d21884d965fc8f2093828c807e0c1061780e4fe1bb32db8839e3eb4aeea29ee6823378b8d9116dc182242e88e207e70eb086e0ab6a001a02988760b3c35f7ba0ac6acc560b530d49236756bee98ca2bd0c28cc9107b695264c1e604b2c6bdf5d086746b69f9fecb5f6e56f77ea33b2c6296165b5a9c256162300968982b841616dcb18546bb983926092ce4e47e2540703ea8837b218a86f31b86132c254dfa5694426344f9e417ba8f24237c7e79f426f0650fb9b7dcbc2d7610fd437728656d0e4128e6b6d0d182851d3c14c9fd3e5059f3973844216a0751e759457047293bb9aa6dbbf4b139c02ead094dd8156494fbcf4a29a594944be5dcd1da4fba70a368c390a582eb393a41ec98a107778816db593a5a089c3bb6b4d8e0389067be024deeffe9424d51734649a9b18568859bdc9fa2ea4f55715d64bfbb2855482bb89f478e23f5cbe83fe997200b847672ff67a7e7cdaf060e72e552ec1a52856586630b0e52eca721c81d2dca0c58dc6a7bb55529ca773c29a6998e16e899d7ebd532c079097508eeec394f2e682e70a4b83068faca2f19e0bc7c602e93e68ef4e5acbed9e124e30592c2325085181558a9924f8514407842e6f9938d1a2a2b935400c2880c8d0cf2d9b09c5d70ced0880be4120c465e1d04af5253ab6282c8afdfb2816b6ae2614e8d434b19843bde1efd7345b10053a8e57e93a4df0c3fcb853b5e51cc2c19eb2e882d2df5049e5017ee68f3c91152a68033a720851d10bc290ab3dc7fa295e75253fdc01d6d0c2450900f70c80107de0485a1dc7f9a14db28ee68a380c17630a120fde7cdc41122081d3eb4746371c7ef240b3a7b9ef0b3baeeec42be4491273d779c30d62808e9c27dbdfda7d99559db9a2d27d0ee3dd9bc438f15779c40eefc0645e1f52dc434b605e4d9284aa59d2f04fd6ff604724329cdbe58680dd109afdc9f22379bc22252515629a5a4382565833b8af9de5ee118400aee28768db6d17267566fe06d748b09527fc33db8fe37bc6e283ee41ad93f757347538d4aab91272b057734a180ee68ca429e7db94591dcd64a19a53ec21e279ba22917dcd1549fe21e52964d2d35f229f5c9f20c592bb8a3a96bc1e754bf88627293c9748317ee68da76585bd4588b9b7898205272e11ce94923f7d3106cb96360a931f12755fa84e78e2c148b26fca488a104bb21d89143321da1dc3f631346a2c0c8c07d23e4cb27a24711d2c5ff0576c34d0daf71d6a04e306e96324c40ebca2bf2387566272bc94864920a79fedc8164a9a44a7e003c183c4065218316350cc9f2c71bf238759c90e58f2f799c3a342496a21c17c0001a794ac7dda2894cc0c9fd4f41ce7dbef7b9bbd7ead5fb6b6a9fe5f99bbbbbfb56eda310e1f69780a4ba70c794d75b0e68eafec472bf29663a51bf35b857cadb821f4aa3a6ea97c10b284ab84f7cca1262b9ffdb6ca51c959bb5310454be01033f276a0bbf76ef0780175c0b442e61264fc7a6538b5d048b76c7eb83a658ea2e6f343ea2661f347bcb996b2882773167b9ff93d2c60dcb39e18eb686207b04afb3d1c504e1be0bc71e1d6ee2613afb8ec79a939b967f32aa87ce9227f72cd7fa5def0240f2ec9f2bee686fc040bf0fbdea557dbf03305925d8e4fe6ff64faee1016ebce0da903c55dcd1868dcfed3fb2fda0b130a4e675f541df7465dfe88d939236500749e18e3477bf0d30b8528a12471652f64d3e42b9ffc4f2d9933d01c21d4d93093e39b9ff5228864a40448f2192b093fb1f6043909b4aa1a4d4703c84b3b088e2bff7db50853b9a4ca719f804318699042ac41041b8233dd1e206216b6298b2dc7ffd003c24e18edf8911aebf94a2ac1c876fab3a26c8f69cbbf70f9cdbc4c3981a07257a72c5c9fe357ae08e04993cbddddb1d27cfd09e0ce19a401e81dae6388a433fabe78ef6440877b46e831e9cdc7f2b6d1cfa6bc42e6aa2663892c1fd3c7e3770e18e5f9e30233a30c20ef5d9649b6cc3026b0e31828b7347f916fbdd657d398d9828a1f8bee3b2c6a13f25e48e772476c74de62390aafe14cc5c90bb67409389d5489596d198e28e36dbaf360469b21f6ae852255096dcd6a6d860e9c9fd3530ca1fa523860757f54f215a647155a7f87f26144a03e249d6ff4a11646c753345e5208d45dc114cd874a19cb4a0e5fe54d30044e18e73662dece43a9d4e0d44474c4639698193fb53ae4a6934e1d21edcf7d3ec343bcd64b37aa2313332a7990e6beff57f1785c2fc642df753f913c308dd7e29ff87b062b2339cdcffb9cb9c13c370714990f2af0de53f5d1b46790803f3847bfbdb47c27c1477ba6af8c0b5ef93e54b0fab09a60c88803361d80a090353711237005cdc71ca08808beb2ff3782f9db0121400e54424f7a762175b98a06bea1f744d0da5495d9ddc6fa22f0f0607977e75d114c947d03cdeab73a90dad0140912b432945f923a5c9fd1553a9924fb1294ffaea82488421c4e47e9466a1244a86536c2f61ea5f57b90a260a77fc7729e7cf3c04dee66a1a9c56f56322dcd16f60fd13c77df4e1d9bfc7973d6c9bea814b33674c35a3dfdc9858b3c66bee8ca1b9615520dfe8376dc257cc1a0aabaf9ba6301cf5e536d5c65fdfdd5c1ccdabefb94cf66f715df7e9c92ea54a4ef61733b8336c096bb4d88fb1b8309870ed1021d8602cee375a8bafb8230b4b0d5a82223c40b99f6e2f51bc5a6ba51b4ea271e8bf018b3b62c56c3514b61a97e95060e31aea5e1b4dabfa5337b8a3cb8ce0e0cab295398b3e75199709724797a1fdb4d8d447aa74cc554d5d060887b132577171fb7748dabd68073ed3e90bc24eeebf38f44b794d33fcbedc2828b3e66e82d3e99b992d9fdc3f63688c4ce3d06ff2833b7efee5cf7138914f3d78e1ced6fc137831414694d15bb993e8010ad3d843b9bf9568c9214078e53cebcffb65e08ea68d035a00c10ab9dfd4df4317ee28876a07bc468ab9b396fba5bb94321ca9e28e92889c4f9598402d1f59e8e4fe2428f599448b3e2650ae5078136624e75ed374d5b060481631b93b072b6e0e58dce96a0a52ecae165937072ceee82e1c2cb863cff4bdc10777ec999ee9d5b75093b6681694062aae1cf2039d2c9be5f9330979662c6272bfdd89cd981ac4dfff2456282eac575e691483cceb182dcb3c7e61a757f2095c90e51d660671f088c1e915aa8368014483f901533be0920b1bb43af0c4134fec044541a3d1683315a42088565a39ee2dad5cea09188aa7109a2045cecc2946c1a49e80f1a4d75f0b6a873f8cff0f1814e7b645dfc22ff5048ce30268417bc1fce825bca710b88d520ea37670df34353d33981f30dcff80d930ca864aa02a0c2761361ac556c716d48eed25186640a8c1fc80d9b8e7422550944548c51266ab1ec51560e88216c50582e090d92d5003f303a6ce78f46577c5a81df5e54e13432d981f30f57fc0508cda4195407978846c31f504cc0f18fa3f606e38c5128646f192b6d6e7b8ceda70a41df7f5bb50baaa07fd8ac729b30547814b17eefcae22871edcd154533d6a4d8f5a93ef07835b5f9e6c7e81c11d3f658b3b7e9e2d24a0e43a838607ae83ef9daada5e55c7d4eb084082bb7df7b3931340c93c6a48c3cfbb055040e11ef5f107f5193ac57cbdac9c21391072e0956ff4176a6abeafc75dceaefda6cc1de957f3966b8de9ad16eb97a2754b6da9e76add28f7712693e944b337a954ea834e990611d4cfdaf7fafbece7232e725bd129d7f73c9b3f2013a8c36db17e4bcdfdd14783082e4924813aa088292d561ca9fcb7547af1bda873cec97173729c147928cf51ccd87e2dd617304a17060703060c185b25e9b1c136989da82d78f26968edecbad9755dd77d6fba5df7bde82402e7ecdce26adbf104becca3431a364b8bdb275536f1ff74badb97c2d2ab205adc5ed4e2ce98b9fd8ce995cc9c71400f11db6fff8006c8971d434817eeb7df5a9c5563c77c51912bf3379ed9b6ade4f9a34402c79232835afb341a6739cb559f2e2fc82b6efdde26067287160a97fe8c046c5c0d3d1aea50bf860970dd2b9808ca9dfb6fa945a8242c7796452d191a02000000051315000030100c068462c168384e3459950f14800d89a2466a501c4ac334c6810829420c020200000040000040209000da3cadac067a0a4746737188621074259532b431483b070f6c86da3260aaf5f36ed1e96eac54972b2a0eb8dda571fbb19cb2af46e3265be1969fe38d40d184bdb5d53a03e638b015e836db695903e8fa12114f2d6b036fa0aa2b5abbbcd2da1a8647aeba81e2b82e97cbe23889096e85fd4b8745f45b5a37a5653908f09533b3f00e42a95a2feb6f5f76e43977341b9275a8c68f66094bea1f1268aa4d1fb7c01add184b27291cbf2db5bee43a8117d11c2ddf5388dfff0d791437770682b957922b7de37b5aed1463df8e8c6a1c6cf62c7c94682ad5c2e0ebda68540b6e3713f142372e2f35bb770230453cbce1b42f6c257429f283a17dbd714a218cdf37fcb4bb75f9e4e09be1422ff7f6322e8122de832cedf88e037820454607fe0f04d66981fb726b80c926f40d6f1df742b2aac226869c8046f330c8e251b3dd56470d64bdcfec942d15743dddadacbeea9c26d698ed07560ff5c62ac22c42d685a7059a3e7178816034f27c79c7d459587ca4cd7b16716a88e44d274a0c40c50a31bbfdbdec51db08b2650878c7ce558ef68a6768b01162e9dd1726a73e83b14af861295b427e0520981d01052ae82aa22d1e388d045cd9fbeccb3198794bfcadc327ebf97aa2e318ada9120be9d999074166be4d12a9c02e221228d8ecd83a69e97d46d67974f884edf54f44a8217609ba34e87e455a5bf17317989c5c305a45ea25807cc3d7021fa1e9b9196e701b04165ff8317b9574c7818f3fb1838c591e9e98c22fee828d9d39e795c12ee28218acee14c41c80486b59e2781a00d1e4076cf42a47ed0bd2f397d201fcce1185b6b5ae8662454e203e1a586e35243663c78732d0430ec9ba1ed5373783950022951e9a4d381dbe9950475c50fdac0fe43823d969b674a1602afafa449a9aa7a445c77a63d34d2c5ea42e2731dbebd90a574856018f7ac9a12b8a479cfeff09f62d3617b703f6565860a1cbf32cfda7d1c0e9b636785b0b5e45c68a17702610ec414b6c46920c6b86a6122c1bfb9ddadd9f167a84b0df332162360805f31bcfd5da8cb5c9b55ae507284fd542ef521e3d6efa5ee1aca520bb1b60183e12c5a0419d8cc1ef79bea0cd930b60d5ca66dafcd12bb13b855b6454b2cee3cfe2805bcf8459f46ccc47d32441a8ccf831d5ecebbc5cb278f70321f29d5df16e3d0184527836cd574682a29a610b7c347f8f1590f05668558e42270ef2ad7b81e93da7c44b8568c9fe6cb4722f6ccb8c67f61eb4029cec1cca9ae06778129facae8608bb8874064d7644269454511c4f5637fb551d90a4727f20dedc252bd8049c5e3bf20ec8337920c2540f5d06ab13a91bf911fadcb82138b60726b2188391ef14cb823bfb1673e947dc0f3f8b16bc1cd4593c85600d4fb524600fe186515735ceaa1b8cdf1c9a61c5c9864390e8c1e5cea0dc8e8cf040d9190096fbdedd65eefa7e743dc9c88e2ad70b724288ab44863eabb695aeb1cfbc6324c14f59e61b44aa6f9d0fca414fb7a7028f74d754ed23a84478d8f7004b5617eb5b29fab2a8f3e4e230e229558f8fc746fa781a4018cc530a1970e3a65b88f45fa453e611e62c3c3e7a7838e11c8c46c3662a3d7dfde6a75e8eb0a9a0353daff0b92096183299b39ddf663ab05752e4656562514e002184af4277208a421f9a0b2ec5c03199cec59caba91abf0a72880cb0d04342cea8ee7e74fdd9c28340fe424ce6f2213ff99fe5c3594526f8b39b0607db8e352c0b5acf236ad8d0206fb9bd574ee142b9599b3c91a874bbdaebc9422dd5475fa0b32b151407a376ab7cf0974cc8099e827e16fa42825c105ded0e262cabf093b3276bb8a1b69217ff585447d261ea59a13757bd31b67c710d4ddf5b0d1885b97bc743acb9497596176b947541a27786209000aeb0096774b4d328356b42e356463d649e3e1ee7aafc14e5f3e860f5f0bfceb07e6603215e9530baa2cf12dffd843c016afaf6d1aece2117c42dd280fe0cc9533d97c8350be673ee0f2af59984c0429d354016b202d2244aef64296719eb5fcec9fb8a9f9aaeb9a831ebc24504f846124011fc6ccb74821641d6987c4119f3c21704ae21c6e137fad6035381e403911ab95f74979794e80742b8dd7d8e28170feecdba2bb305cd78c684b8896b01f39827ab783d3025962ff0c2959f768b2c4f9409e8315651711015fac612c188b43dfd029e34a1987113d69456cc9ce7b74123c459633bbe2a0e8ceaccf4f8fbd9d4b3c46b1180bf7f59cb87ed31cff95da53991f7366904b98e6b492a3bd1e9c3454e86761d2be11ad2e8a2948b58101ab980ffce46816adb51f5fb60dea8f7f32bda63721463555c565dcbd36904fbd4af741133751a56e9af9bb785a0fc61ed8680a15246a308231989ccc736fe8144719f99dce64200bcb8a2a1c26da6be64e18331ce6f01fe6c3612d96192e2b1a6934c3ba837a885944e00a290700f0c66a2376194b5a78a7e809d4cae6a1b5f6396b59bbc7ae823daf4aa1d28f13c04a269b14b84dec53895ed1d7da0ba172171e62e37bd6c58de5bccb17c950a36459c2bd69fb76ea739c37e201b39ac3c223fe08c26751b87819e77bc65fdf87acbf4948dd8e11e94eb0c126bfa8ee2adb9d65cad14a3f11460e45e45e8007bac30ed0e38e794a525762845975a3b92982fa9346b2d9728fa5b8bb74205ec1dd8b028c04d14e97b2774c9411a697ef6d499400986b53fe90d7c2f2c50fbb90ce8a04b945dd9667dd5142df0bc85f84fda75688c652e832d047fc0279b70bc01aa35cb7e2ac0665537ad38f1d93cb5633b1195f2604d0878bd2a11bac6924f699f3494fa9764b11ba996ec93a828bb9e254de53338fe1188de2895c1bccd763c8bbe17719d7b14353016dfbf0e3e3b594185ed336ae461a985f9bce361e57934b2cffa040ddb8a819ed5c07b88502a2d6ac8ce407c3262248450fb99bf09b2d20ca5cb4a2179d877a9a65d80057ec1ce1a5825ba7df199c4af8d11a65487969c050806bae6fadaef9abb9199a52336e9c22676c0fdb5c46aa34e802bb2beabb2db896086810e43f3809598d2375473c9416564647afb297e14105c0e62a818e90d7e6fd279a44b1a2293264c8c7a444b50bb91a1cb094c31918df0ed5e5476202adff4641c88b1d3b603ccadf4538f1400823a7c44af41d2a66528f64989ef96f79b59308af62ebfa0e69b957b3bd64039539e3749d7182a1692624f99c81c074c6626f4681611cd8ef81d2c74e60058530ff9fe576ef94eecb141143015182c8c5c44724210c196805ac8b75d43cdca2defcb9f0409963db0d49091fc318050639ce1729e188fa105c851eefb36647a5367279d99265bd03053c216ac21345b179ab2cd6a994292c42ee1aa7a6a29341c4f2aa1b3d4897ef55a6ad899687127f50840d1d545ab3760a0e396096fd36fecdd527f8ccb2563d89349ac7db4661975306baa80d6c2cfc848928288069c93adb00e08ce67043faa1080e09db988fa6e2a7979af0f5b5f1689b0b11efb125bedfb0257bdd5c8c781e1bb80199817dd55f81a6ede03f6e67bb5e41843bae77905427ad7d9820764cf80483c74a121bd3cffeadfdcf04fe0e10cc2976d9e29d416ddf046bfb4282812d2468174466896507050115398631fab3b0a9ec4564917feb3415346e2ec0a3f80e047387a5ab02f7ab046349ca69c7425e0eb3715073cc5062e551f1d947a8ab70cd6ef628e348ca3b8e89533083db9b069c8e32d3201cfced16964801139bf63543e42f53cf267b9bfef306c2abad8c13f08ebdccbe20161508b8895d945cb0ed7c28069bf981f7860448cd9d5a6f53465dd54f1dc38daf19288335f658e0cc495f5a25845456bcc1573067c61ee1a973c92fde02b31a591cc0015de134cf586864febe54d635308873f83a650c7db72dfbd211e10a006fdf4585917e9b58992d7838d90530177e2619da42a3401e325763470701bfd78031971b371fada8785ced1befa357b50c04f7154c6f4914a7362219ecdc74ac8bc6eb4525caae089617343667558c099bd3409af93f72aad49760b0cd982a3802a0c880f216b79a354adab4931266d27743a65050aba2bf164910230b3e104353109db03a7951431eff4c1337c463635c09ac496ebf1c4bd368985a27b4f7bb41de341cccfceb41d0ec8c8e0c0ed88e9a4d4b141b2e12bf402e0df98cc7b96304cc28af8e2b28654ebd241f987e6f9c276d8fe371417dcfa9000a8dfcba10d4089cd6079596993ba5f6545be735c2f66c0bd661586c4c18ded6791cf39ee54c56eed59b085456ab5cd5ffcb37d431a1d1cdb9180401a9d94aca888694c661b5ce6a5329e191684e4aa7accf1f26eeff133bb502e5a6712bcdeab889634575b1c887fd5b3f73f6d5868f4262d6ea2f4f75f1fc4e9f14b2e1fb25dc4ed1559da13be8e4ba554ada668e82d658525283fe0b044dba83b7342253fffa2b1424eb456c06f32f8f2f3b2eb26a3910567bd99b2383ed66158dae855506c82b0f77dc4b46fd3930071fbc0e519edd3c8dd4c82d0257e0036345dc844f2ac2b37da55bbbb97b2a9b3c8468ecad16ced78975d8ac9baa3bbe7a7ec2f5ac5ef0855ec2148e405fec568473c25d5019f97cfacc46f00a83e92e4f93547f634cf3e89ac64d9fda1c694c8a8fc2d003d4881b703f8cd8dd49bd4a094a7729cc490cf960a9063844263ad1788c16ef189a33e819edce4cf01e9d53aff143991e80d20b13e8691813214163a390455eb20e18f71f027547cf92cac94673d25378f42986392f6c215da5c9a72be46fb3f277be0b330e0242ca0af0eab66d68cb14f1495f37805a2ee2546ddc72734acf8766b727a643f46d4b99673d774c65333629cf8290ca6ebd4fa529c267fb6f2ef4b8450438bc5369cdbd29b400900ad78eb6e420246a6eff2456eedfb4340d78c813cfc6b831f735c4605226efcd379f95e60ea3787ef912d6382a5ebf6405691745327220173b507ff1fb598ee0368691817f0cb3aa9669135f6af23958da5009bdc30a463876bc3c051a4a6847aaf0d11544b630230bfe6722856c99817914b0beaf0bec1680e82cad8a7b1b163c6751ef5000ea8b1b27bfc14c63597d498dcf590fe8fcad5bae10c638f4defcf7a72e6365dda9493daed49dde362e125f9141839232f39daf02601d5bbde0b064a89cdb229fc112f9e7056790aba4345b4e1de7c5781ba0976ec240dcb7b4a36dc4890968eda03ac16ec9014488f1015b4b526e49457a2c566c4ef738381da1ccbca26ab271a480e6a0aebccffef6f459f49ae618b8a37316326c6abe563f7d1def9aee5ab0b770c232ea6d0f1645043534df1f5f531a8ac6ae4f71c1ac42dd5bc274257e7df7c4d34ca5846c407a8d16071aa0ac6057518d8926464006e5e98c6945acaab315b5d43121d886815ca94995ee8cb063b5f17ab5c148593a6488a45924e6338779f1942c175153b437fae66eac104f731b00d603b39493203a880a587f0710ba4d1f300257538be99bba14538471e008859b7614f86104bfb2ec093aab3e013fc1452546d472e2bb86635e6c56ae56eadec7b17fb0cb6bd87d7cf5c866a7ad7cce23661749527300d866df6cc3575a94cafa8e760c99e0451414c32d9e7c5ca1ca83276c67a7a2f2dcf6d7ac9953f06cd54634a2f595e6830830a21b50d06c71bef3061e2d29cbcc1c34b3d76dde1847f26161ab789abc6cc0d56e232366e0be34d71064ee54aa7acbc29b143634174509150a26517f71219029973b2653ac17888a8d57f05a6ac44b54f3ac08e42201b20818d563cf5cadf2ade07baa2da5ae9bde35c66948b8eed54354119cdbdf1250fdd85099cd28a12df668a55da344dcf8e24457d54552477ba24c721f746d0719c648cbbe32e07f6264e0ba60d5e4e0b1d789dabd62e00ce380a6dbb54206454d3f315dce74e4214884c34d0d684ff6bb48b135ce84c2af3fe262ce7aabd460eb60745060ed10d51c1eaa6bf775b83daed66ac4e551c3392402a1fc74ad532cfa26d68673cccd5260bf73a8109433eff5403dc819f80f4796abaf9bd5490b2cf5b56c2bb52363457f5efc498091018500549c8eb70f00e75bfc922d26587720bfbbcaba754483e1794ff9d4696935b44019356ab66d005458fb0d8d06050be7a69cce866128a68e5835738f2ba672ab13f20a343acb708877c2adedc4435cd24593eba3d9a5969c66b299a7e1fe86f0a60965e449e2ed368377ada77e92c253d5c907c4656bf0c493672f2b3fad557c5402bd6cf138147948da9d7221e6f5670141064d428fe69e3bb2c7215c94706fac5165eb4aee736fc084754eb54a683845c6ce9e80f552c3802298d93bd5073610e3dd68b24967be7beba500d05c78bce1dd886080bdeca93fe9b0cf119205620911d687e7c502d0b4420861ef0b92bdd024945eef0c649529179c06ec6b1a0f2402b07f57145166471d519a9027a3274d0cd7b4d8588add5fd7e93f569934758c5e88f7abf4766a4b6d5ac3d6b996d9ec7e893988e0ae758c9179c25494fade989b38a72a2cad984b69f25a955c061151e35ee39c704af628f54abbc06dccd225d6d0947d0edff84c0d5a6b132ca05b1ec5a8f885e38868876f3e88a15a6f56dd0c0433f0b11a23b1cbbb9d1a5db20270b2498f3b207682ca7733b2ac20588df64491e1b1fc303f76dde66a06ff70b589a290c96bd3814a7196586a281d18ecedf356e23ab080c450597b5b38a378ca2f2aa6448c2bb4e5f55ac914f915692fb17a1ded9b3ab15966361e0a4a5d571bc61abbde477566488b42d764bcd6b2ae1236f36aa26defc60fda7a640a8a53d017800d279fe1c319b9826eca35ca461f0e9f836e0995b869c7043fe14a5a40ed38ef5534b3e08e8f5eba52804d418aff03fcc451cc0d1a350529afef867b55c68de3c8ae4ce0c520b9cc7aaeb6cc038485f66248461f2b4a542b3b09f3172659d7f4f893eb85d2381cd4452327c0c75040f0d6cab23c7952dc6d2f031c2b52dcf5a6c9590721996c271c91159c17513b9a9d48f6a5e69f3a2a510042ee1757af80e827ced5c9e3c6d8e36c0f5fa4520cca826bce1f21a5254a0ad86ec3f0c127bba40ff7a6aef967a7e7573868646c5350b7c2534eb981cec687bd05e2dbcb181f2aef2bc8c8ce0200ce4967223806971c0c112d70399e19ff8a4e28d12d3a79584bd2989d1aa56e56000dae265feceb1b5e6daa462938c5e4bf75318625b42263041c908fc3778a25185fae9fce3641f50cef94ad3af5a00bdaa8803830130f66a8b564f0ef3c0cb2210b7257021e07d567191d4a18ad4190ad6d22a6d411c2541775c7b60f39c74f40c59b8a70d62ed53a7e27907c5a6b9c151b5575f3753103feeb1442912ee74b40406871cb712a57e37ea118090ed52fb85358b718ee8430c33e25eb1a128ce9296df1b2ad2518d523a3c9d299f2dbacfa23c73542a2007bcacf7bb893287a0893500172fa17643c1a23697a0701a7f31852720fb132267a53baf3ada13e5082718a88b381f00e9ffef3f6b86d9d4b24bef3ad03ea9f6810f53ead8860a9f89be22d417f2b606cd7f88708e81b5d114393a318229fa71c30392b3077d8a73e5e3c76d7c044e131cca7ad0ba632c6648f326b8ccc9dd81cf53222b12f1e37ec60748651c34269c09f3ff78c1ec9593a64683723569c87c16573a6a4c4b9341c53e81f46e5a73111069c7c94d77d51330550904b30e1941ec0673830266a7a36f4f7fe38883be8bd614dc2b64062aa6aee06033eaa54e474759ead39f18ab604ce81d445810f53763ae5493f9ff90308d8e3b3d04575bd6f40c828b5a7a86ab92b5d94656e53a57458771d8958da59209407020811e95f106282d533d3624dccf9df78cbe5ebe78692de0dc2fe9b2b34a14626358f8fc41b9e094c2f6338e13b0e3e933ca43ba52b096237b80dcfc6afeb91b58a537bab1dd5484575dea044f9ae806211e11798360f794b38acc414cd17d96f2b7a2d68ec5785481dcc5cde4eec53a93dde185af888a232850c7bb633b5e0cc5074aa0faf88a166c5f8eccc898d38c495a557dd2729cd8af6c3ed996a37779cd3fa9a07a86e2d4c1027eb2cf2d2a84d7c6701cca13eb21391b28ac768ec923ce8108a76b31129afdc9dcfc5891e924f0efbe22c76b90d1a3bb7853792a5c9458de4caf8c25078e779867cffea06d02ee93cfe2f06dcb3540962395cf22a5d2e4c8617496afe33788e692883a25ade3af05a8ff100c87ce7afefa682dea635b866237895c7f0cd6da05505db9451bdfabe25dec0af5827369cc9897932749130d89e43ed4b9753bf0d046eab1538f844a5c0c869b193aa578754334fc4049d7a2356002521b52a62e03947ed93d3890283553013a1a1a7a8e82fcc6e05c176ad8dc6ba9982aa808b9bdffe25398a731c310de72c05362d12e70e912a3382451b664098088928112c33de910733614d604bc53162eba2c043ac1663b683be912ff98d4162df869a2ab9c2aa07083c4878da5e86a6844cf2b22f559599c0f7a62c519b4406c00018d014a8f4a80f11af0f5c56bd6f95e6e9502418f0a3f166d9e7dd3b5eca432ab2870a8c8ff4e6d0def927a6e4686a08ab0f46620e91561e34920a7d1becdc6dd176b9c25db0b1196238b9d5a43b228da055e0f0317213999bb2eb3cac9709d56e9f7cba8af67f2d20d81bb5d06f1aa66cc604dc74ad054937cea5a8f8fa8b6a69c445bb3611ce229c901099387a32396e520a00ce3a12cde52bcb948c2a546c05f928a8fa7da282196aef2a25e29b82a5786bb956d75c2928e57013487c58f5c628439afcdbe0cca862f44750798d033317902305b52773974da01df95e5675c48133c111619c39bee0e2a001d007ec55778bd94a915382336befa794863d150a2d00b731cf4116b77c1f6c46fb3d7d3a2bb15a35b30d57972bf556cea6810351af186b53b39f4b842b48ca432d3315af6d7c86491593f070295ca205bd24c51c1490569e8e4ef2bfe021dc12c27a4b8aca09ff5f134bafea1e92671a183e447b021200542c053b74ad2e9f5c61d25df43de0fad6d71114017f1e981b08682458cd1bd429aca37a6a6ec4ab4cf184cf72110c8f13b62697a9e7cd7d7b4c724327a4a7dd963608de39296b09a3392de1d43e7036048b91eed41a7cf8f7db3c89a6121e7a081b39aac231b06e056bf0a843d7994ff38913397ad5616b481b44b99776d861deecc63d818c61b985e06a3997f575e250aab4ca7686d1de32f2bd44bc35e838114fb5959beed5b76d21564cd16c5e3667424e8d107d25759f128b361f807988fe94597eece64030e6fd4b9eb1f5b8433034a92534eb6978d98ed445525a996f348b8d1fa29db7734842f4cdaf9fda086f6eadf9c95838aa3b29968c0f87450786d60e70156cc94d4f5c360ca099880af007a47865c5d10dcf8dd8f815edbddfef4f9e4e2e152ab059253ebde9eccbfe4f09052ab0512538aead55edb96d330a18e956f91e6cff1c2dfd7b1532cad0b5940767c052ff229c0b46fe778a9acb58c502a40f03de6405f47a0f90ace5594e569a9f666dbc5e36460dff3657b679fb38fbb45dba74bb2535f717797ef253f4f86bdc5cb73ff9be5ae8b06f44bd7cfb2a5bf6328cf0818d81198111f4c235ab7a5282b8e560bc2993b68ac3fab59f9fe6f5601ec5ec434e48f44fac4a03f72f1b2d212a6cdc04a9795c9d28879af6e54dec4b02768d2ea21ff80c9429c8b43938117bdb93b38c3ebf52f131d54e73e9a56e7867be08b758e794e24634e41afdd3e0ffc21538fb66241fa6500e154811a243bffc360e92359f7e29c206064817042e63158e53ca73602160c32d045baf49177a18b6a0760c1ca91175c7a74070847d0bf9cc4970ab79139c304bccfdf5f46dc426aa3ec3e01894bc82f08bba36870a3f66392846f1ddb88cca3e778f5615741fd28ad4dc12c39469e42aec8b137619025a0630bbe4bcdcb3bceec9f294187438a7b6e84330c9cace1436ce462ca2175be1dc1fec699eb308b01a2dd5f001069dc501e2e7eaafaf4aa774b2a89855dd757addb09637a0281048291ffe761afea4e61f526541818fe9713e20a2635e880203558a9b83bcb5f8f24b7cb945832c530a16e26cdbbdaa405fee6168333b96402623117d571a5567aa1742f7334a45e35e81bc57236b0d43d75d7ad7eb99c56ceb6bda5c758d89abc2fac724e3fe161cbb2e4891b4958b4997f6033d0a22c2df26fc0ca4f94b77ba88420ced0c23b259008a67f8317658be69a8d3c03406196aa4ffbff532971bc0d2514666f4afbdb09393f789056a4c3071335fcd3c456ff6f44fc300773cdcf3d995ed37baa3d7fd6ef403ba44d3a86a20661c1a99ef89dda33ee113f87af8f856a6c7a7947144293a8ce7600b6f16020512214233cb73b2389823bfe6ebd7d2b51463862e10294f622b8ae3980d2935deedae26f45be2acc20643ce7d0cf7f2271b1997ecd223913423f521dec40df4c5e44fca003923257dce6a1db61e95dac134b8d81c8ee1dc46fe29bfc6f4ca4cb433c934a17aa75a9f28423f022490bff4967b26a0307c99b2d213a15cf026c3aabe67e1d86de71caa8763511f2c4b3ff16bb1ebacd189605c5f0e709e395e37ac2d8d86f2639974a4173c99cc9c095a92e0a543bf4e938aabe53fee0b33926d354e6162769eb61e7471976305073cbcbb3de3ea64e192f6b80b488ad599c2d2e4ed19221299603684f144510ee6e5ebde996dfe31db2e4e06cf9ad4760b888b9a2533f170ab4f114f895e636162786a6ca90ccd15b0a3341af6ba975e2a53715e7e60bddb723180914c09a292342938273ed714307dd96d3ebfca72bbbbf80d1262471f2f7adda90d9dc085d09f28ac69159ab4e8a589ad3933a1f529f82fd827ff8bbf0cf4cf26eff6b277f4fb09b551044599f9fb78528242f8d5be3748a8ddf80dd5a30b3dd66ff87aa4177d6f12c1aae181741b2213773a321529ede447b1e1a8b8b7ef9ca7dfa72c101c861b5c3530272547ed044882f959fefdcf541eabb0ddecd9b810618f3bbd4963830c59115a7a68597a191fe061d6259e3329cca2987dc4262b24866c9eed1488c734d090deace6eb388a523cefad5f5d601d81f432d0050ab8c70004ed4d674398ba264a1021fd209061c90d635619c25d7357695939ee90e17f6198b68c0872debf070055bf7169f6bc4fad8ad38bd18d17ee90422bfc5f90c40c8d183799ccaa6d28391edb7127e3b9b3963d3617dcd380805feada2d8e17f837577f921dc2e7c06ecabe03619406d33ed7576e8a60a700bac9c778c31774762e7e3ec4c13b0a0191d732028f1fbf581a983b91e51ed0e9c885fe15b36a830febbf3f745d11e83905a02a226b04f81a29000720585c08bec46d2a803f10f46ae841ed1b0e0b3714a9f5ad889bc7e87ea038a30ccd89400b0cd45170052d361e9ffe7930e763034945b9b9eb6d0a366c350aee7833658925c6fc38672bf1b053ad87ecb52f35556fdc29cce12d7f0311060447be29201ec0937b8203351d22932bcbb2cf5660bd504a9ffbb2204788edd40982cc3fc2684317041b079aca026af78c7d6e52110d94a73fc6b64b6fc2dd9668adc9fc09bf91aad8c66e436ed7a6d0e2e479f3c794aeedb4fe6d41180fad3b560f252bc247058c09e42bdccfbde33c772869d9900c8c964db539f19b9d86f321e56d2f0a9922ada9ebc386b79bdc02584d925cfab3c2cb6858d8525726c505851ddcacbca28f10a3eeb52dc6a9632b51e6563f5e127011fa84d9b4bf40bffc205aa5074b029088a016f6544dee4e870c2ada9acf44c2e81433f123dc846dfff13730d163755e1a6caf590bf981bac95753d226434726268edeaa2b1c43ffff2a977543c1f481729240950c8a3593ac4cfdb94d11877d23c065a60e86e2540526876637a83246925562571e49b9513931b8f70281e9b1811bc45fbee0f81d08881854fa8b871b21e8641aed80ea4be20a987345563379352d865d124642a8b82e3b3a0d3933694bd9746c6f425ba74dbc89fc7670da35fa74f4423d361f97b800715235d29e6069f55ffc0d8a76590c8eb20274b346e412c062a4eea8c3d4eb3d1da59f5491b9da346e8fb5ae725458900523b4bda42fd2b7eb876ed297af5f175cce014b23c80b802c17643f9dca797e837657fdbc2d8033e6b436c1c001786b2448a9ea95c6fa4abe431e8820fbcd4eb2854422d423420909a34d83c03775e9eb551e366397c48b6b0c660cf78de8e466bc47abca33f5f5ca75693883c4bca28429f51e2e49969ecf0247832e7a031f456b02b3557963c7bd5423d92a862c4586f01ddeb5993f34188178e57d4a5aa40c9db95957e8a98d08761202b9a5f2b950054d3df9b1c8da212513143e44be52f475a912fa3c0b22c4aba51dcdb7b465e544406ad4c577af63e6795e7c9ede654959d78ba4ea943a690d21214bf23b0889fa6a37bb156f01766e0885494842af15a778dca0218df5f0983fff176b8f980327b0c25936b66fe6704ac2544c69cb69cb1b563350419a4c3bf95e8600e1ea14ddd88b0ca141a45045ef32239c5e19e990c5bee94cd9c417a304829166db4e942792635df1838a2c9fd148d5c35dd95aec5695e068461b137b5b18c54eaa110e93f7f0ab55f4307cfd6e09819b7678303991c9baa980d67de5adc621bc039561199b6fa6c5632be340dc6cc820864b25aa8899f859171466e3fa30d1019447069c051a2b096b62b2281317944db0327e74a1c8e3de45f23977b60624ec2c6efaa3a44c54a232324f58efbc8c5ff3099f59a561cd333d5db0cf4e10d46c04add8ff2adad697d0bbc40d565b50367dc86143b98bc4dc6aded8acda9a03cb9fc83d937bb59254c735bb5a892c4ada64fe0c56df74019f3a9db83e457a19a81aa068ca7914cc8450150bdb0dd7ef1b1c0bdd762f2dfeda380e5cc1129c717421c5ac71e63ed7b4218eae776fc27f518ce7d60635079419268a8a478570237354d6a55720025bec6148560ce46786993aac963d1714c06d1651caf2df7ffa4feea7126e7ea45021822cf3a5215b8d9fd62742b9b31a4d48c024d7f2f62b9e9d834e620965595c007bec0a32e976a36deb844db66be5f23afde76dfc1ef8d97ad77cac0a034fa63b701cc72713995e24e266655ff482900218ed3e5820c01ac8f26b7c2312153df3fb7db090891d31d34cc8c0a185ca95e8a7059ed78505af06f3077f01a1cc2b4740c15b3c60e32a60536d142cc9591e6c35798c3820011e477993ef7d0d9a79efaa95f90e2f298f0c4738e08322d1c6a59e0b9469db045d2e1f8d02d72203c7d071f1eb28eb67bdcbee1d143bfac90dfc0851843ab8c6d6fed876057485b298fe4b9c31dd2ce80e6265bd1167b654f984799ab56f087865e97c94fccb0f34d472132e0fa481875faedc1d6eb4745fbbec758c221218fd615138c25e6f8030fde2360320a8905238561fa4bb0632439912041f7904f2cc3c02cb74ad1b4e61c48ad5a019951312bb859c422ed3a7990e374920f0cee767ee103d00a5234d2ccb0cdd1b2853f992269de7089af0daeebda59d403ab08d731dd00ac02c1823e4a74549b49e4269a021cf12a50e2f74eb97100406a7edacd96c9e06d6a96901809765e9ce015bc5ff5ff5d6164752d70e1632f67a3bd02f8a97aa90dedd86b732adc749291605072739071421eb750b77c5a7a016f5ea0a9c800af0b555540741664307cc77784af4ea22b769901ba45580a0f0d7cc4ee706122158f43c3e40a3ab45212dc405d521966cbe476a70ea57738b98a3f86f397f9c38ccb74f1ab1b49aadad89d8b6e1c4d9e1a583cac316a34b09c03b42acd9dd058be9a72eca04dd5bf36392bc6e607e76b8711e696f46be8e3d7a6b332e586876e007e3a94641631b4b2109786135980b25b9afd8fb7ff73414edae2d8bd29bc6a6caa5b695c93a86231e95c31c3d5eae3311aaee828f7f2751877bd42e2e569adf8286fe2ed3f6acb608c9ef1303eb1b7b3076133aefb9564d09c0934dfa9b474e7ca6a4a3ab83dcc64c0c6a8d79d5c3233604e577e038bedef2f14c9be6b97bb0e0be443c85d9c11e37962f281dc75f3a6bbb88f6da2ca2588f4c4b61e1844bad3dd3cedf9d806c86c4ce5bb15d506c78b058210dc720d4fae5d90f423494ddaa5cbf0ea546133ab9b46d45138825aa94e111c88a99d44f7f22cf5d61ef0b97231a10b8114294434ef30f4cdd9d8b9484405b021a35a4e88641768dc45af0fc3838a580d7c2086fd4bc20e781b61120f36ca61821f2a9b906d6d4e52f9364b18cb04080f035ae3230a74058c9bc95d7d387685605e0d8448ed7c463573b2d5c8d516df3c00944c146072e54935cc90bb2c034cb7b61a86cfb029ab10d1780bf4706afa073052473d55a6358165f121513f76f6eeed04fb286b4e63827dcedf8cac1afce8eb8e85ea1e71cbee29000613793f8a544c6cce4302806af6fe82615c307c02ef6e39f659d71f4c57c9b8f491433991b27c1e392026eb92333018f4460f941344ed09a366d28dc3370c87f68845aba087fdd7b7ebc734e35d4ec4e7636bedbc580562e52d86a367a4d17d0505158e9eaf38b90b16fcfc43b482258461c63fbd9552441269b6c53cfa34e97f59ab1baef9cf811876748ac8c7937676fc32c4a9c230cbf725c8815c19e070bcb4e82f0cfe2d5374f159db0625e8dfa3187cacfdd690982ebad41bc16a29e1f55f3ef0623ac25471418d3e6db40b7c58f865919560d0696d0b80eccd27e77eac9206c4d7960cddc16094614eab262b5c0d14e6433cb47434d77fcf3377cdc09472646057d41a1665f0d7a5cea616970c30cf3770b98155ee8615d770bca118e59cd28d5a1c0ce898dc004269a9bff0f839c7530398f16b89f94aa9e3dd25227559a08f50219909ebf20115289d8467307faabcad5db483713c0b63f6659eee7a5abebca02c3a01f9fd5c2396931ed98f11f33cee23de1102fedd7fca8785b97d51dd1fc1a3eed0b2be6fcbdec45ae4d58b039d7bd5269f8a803bae49e2932c283deee7b37a1ea89aeb93c8cfef22af57caad5efce27b1bf05e68ea9c88482d0870d8932c9e7920d606e07d0c83a2ce3aa1387c0d380ee0234391e1287f8ca33f7f1fe58c3567fad8665fc4388b9fa2937382980a2bd0bb17a004d4e68d498c70a5ad59d5978ac0f3a64a4cd5af10b254992be3a56ec35897b28d8140c0215a66c43ba5e76ccc7c05f08ecba957af7dee33c133e9a4a8c07997075681a1d074dd1afafcd17f44a60e84b509f93a76eb4ca24b24791b0736b106796d03410ba0c2b3c4ef89299051a42bacd85d0e00fb1db904540bd98dc3343fd13a2194aa0a317b1b64d19749065700eaf65903972319ec2bd962a2b1cc42acc26fce65ab0bb5d926ff9a5cf1eae14d7f72d78d2d4fab3f01567d3ebeb4da77c26ca803563f4ea4300636535a92086176c3dbfc0e36c9923c29b77d7e5b4c89e86589447d41b660fc48d2a36868fd4bb36ddb601160c50c98b57600f4a6b71c629f3e750528a81d49857b57d6239c8a488751a72a6f7e39a641acb0679428341a318e923ed7779e46d8df7e62cd17fe60bef0cb50280a087450d5d674b7eec010723ffaed9b39c186ca48de83aab953892e1f7fa390a45fa1b182ce595b801b75aea3e297a680452a26134ba1627ef6f799aef8b84a4514944e55ab8a2db8c7c0eb5ddcd694bc85fa36f99d49d043ff1769ee304c00b68fb65551cd61f2e6583adea3a524345243cf1561fb4ebf6486f87cd5ed86e413a409c821d3745bb3625853f361905c1d2396269500cde6167307bbbf690ed072b8d86b62a7e325af9845543846b280a53b8c202380b42486d3a8291019ddd4194607a29e7449182cfea1941d55dc476b71b2a8cb28a1d6cd9596d005cedf637f83dd05aa6e9d794a1441cb37a2f543d041eb77fe2fdcdc28a378c59e1b56adf2c46844e0a64550d70162110d19410dc0660d0388d072b69d3e281e9d34878eca46d40330f17bd29c7168fd8f1d0de9c29b4c61a932faf866814972ac9b1cfd576d360a19f8d74b4c3bc0f6a175d40da3643facd20df5f6ffe8cd1258cf1fdee361a946e3a710d248d6098b42944b3b74baca6fa33c665cdc5e81b4bc7ab547d5ceaed0fb2a2029c03e4d12305eb41a08fe32f10a913f7824ed907f308548bbd6fb8525473498666b2a1bb62406463be370e70a87f90de6e383935e2a8540746e5c32102d518bad6ccfa69a9f0dfe8fbebcc94a4e1f9dfafa7803d143df574ab423dfc7456e5aef368ca853ba605d42d362ecb8353cfed376af406e4deeb8bf33c8caf74e4e4008e7c4aa5c36328f74c12f54b65b22ff1a44483352df8a97e089df5c7349a0ea00ca924b80d7b23d066c7afb278eee0576b353931eb0a8d22ca80317a71b31dd1bf9d0ec4af70c49c47151c39820fe58afe864917e42173ae394453b1b4e379e030e2e81ef23b8013eaa77fdd01c6393762843601d2b7a0cc74636c91e4e4f3e8ae4b4385e0efb89b47f7404e842af627bd70783776550b41085ac02d68a61e19d3e83748f60ae185cc063f4c3cda2a72df7525f95604c06098f25394e9073b832e1d65f132fae451fcf11f871dcd89526aa0731baeba2fda9ba4fce345ec51c88932717bfe91cd900e79722be33429ac4433ae2633c05310b2925de97492c3d9bf752df1545761f24b438e4ff4231539c22d28aaf4dca445a9a8a9553788caa6c5a5d2051c096e4254d1c5b6f87359d6dfb219dce448a17c4d87e75fc0c2426dd5000656b11d2ac4d8186c89eee80178858edaaad7f1131c2d51caaadda2a6434b36a2dbfe8bcaa95814bd3418acf7a11294d71a0b7008048b9aab4ceb202d9cbfad8e4e9768d64ce8ed206ecff11f9e5340f1e05d4d79b6982a2a32536664521fa8e0c17de27455324dd031d950e6b3802931d0d9a6435cc998451e187378dba880ba771c6c93a526c2b40e95c354e8d8aeb542a06aa626f31c60997142c345a5b969c10d687d7d66dd61687ea16dfe9708697f08797c3e18d03a809fd51d2b294c63e1e376037713af1de1cd8fe7911070bd320ad26b0872881f7253592fd0c28d4972a2167d21cf6453d02073b4569375931586b7002dff1d95736de9a6afcf24c3b34aa70df0ccd641f33a2515d34384c77da6cc8ed8d28ab9fe030b52c976b6ceae8179b030bf4d860b28d3ebce7bde2628cdbffa07904b05370b1d498b6578af6d74906fa4e4c0a79024a04e3c2149d78ddfa64fda873168acff9cf909d758e8ad0b82aeeb5c8abe23ea9b5184f27fb8ad56200e1b92b517322e70a6e586c4c884f973108d5de6aa5ef5dea19594ce16f73d72af1ce32b25ac6499bd1ac04138cfb769266076e0f0c5133863db8485e304efaac2bc886b350a59ae62ad3261a9fe450c22bf33e6878a545de8c5a9582854f391f3c0964af12cf2860be5d21f3b48e694303dc9d854023631e76b95b98f783d76bf8e6a0fda42cc08be430037c77bd4d154ede04a56ef3efa81d748d8082aae1c9ed140ddf38af2df73a32c05a21dc6ae1258c0a91c438c52fc58554c7f05f38cdd447de9eb19b5493de79d1c55f7f4a20d689225bbf51607599481bf9167793935a880e749ff5add049ff51d5307d54e04c78eb3350d406a8bb3e620c9c075977f75c0a2625c7c140829d0008f41f6bb9bd5c523e00bc87d861e933c35cc5e7d086e00f2d984a87c0106ad64d84e47cf350f3ea1abb52d3035be15390e2f91947c02ae0da79097a53d5b5e023036902904d1f356a67ed87741e139ed53662b5eabe3696a930eb1c5f0b0b11824a0dfdda10db9a24fc6cfb007d1d344c44c6041a09ed1dced7bcab44eb5d366b54ca95288a8b40396411ebee7342360ee667d677be321e99bc5d28c8ed0f9055d163831ef79454648a1c35f8d45cf3dde77d45b44fb9ee09f025bb1abbf7a83703ab9a902792145d83c5040490db61173ee6e5a5dac3717655d73c867cf2614f7f12de64cb3ff074b6e01f5fcc47c1868509e763b56af874190eb11a1b0d15ae442d0bde3e428006e87075351421866f32b8c8d5c66479d401e7c203312b6b085b7c96def00a83616014b24dee4fb4bf0c7523564ed69d8a4870eedfc67ec725db11d1725120ce0544f2682697d731f9d5158258b6a01ab509c87a41a7d8fbb6d505bd7811291fba9c81677d62700c6327ba51eb3e78822e61ef3db79042020c06620e9515d1cee1728095e9292d90c8d796e98dbb80e655f22673d5f9e49d8cd7aaa29f22ac24abd2e50f755d5ab033edf237e590496d6b5313c61dfeba5673bfd973ca3d0f825ef854f5b6e59be3b3be03523f2ca9167d9c0e4460bcb0b701db1e9d3cfa8563e7d8a381ea21f9d54370ba2aaaae67ee612d99a37c6292a67f40ad6a12096566f81770dda60c9e2c657a65da3d1b50446012dbecd17497a957650013f5383fa4016576ab85b8bdc1275d2b68ae1a05c277496f697bdb1b82e06c661202c73664e743e74b6da04955237564b3269b3658986807dcf5e090411de0eca2cbf1e568b57e3cabfa1797c5d7bc87cf421a1a34314da2f65d3910419309bd60ce3221d3d081482c3f121ac68ad3fc6b0ccb9e3997933222404c300cfd609eb47dede4ddef403bb24c26b06957c25eb6bc85d13e40d32e99b072c257d2100753865a4032fb80aa2d74d1d75362c93d1fdaa822b13813a7c73746c4a80910c42c99ace7423212d323f529b161842925854f0acd2548707b4e83f81e57e42051e6a85c963c9b191db03f309e64a962c89762bdf5dd3c5e22fcd241c5c21c6e7a00c1b6399bbe806af1182b46649d1e87a745db54a0df9a7f0f770af8961472f69cbdc7ad6ea91298667516798a1b7198167f61f59414431a1393de582d2ef833f1b17425333c70a2297ed6a542bc3404998be0de73b7e9924ec68ed9a1c1296f89b6fff7c518271986b61cb3a0b11f55c3cdda3c0c6d0b23552a1bb3c5560b7bbc106c382e58a8af4c86ef4b1d2a6b94aaa7efe1b17809a6cb454a8afca7341aa488a62232615661b4ff14bdf9d616608b3415e1baaae92441463d97c5a1625340160a60b94a8b695ab2f68129f7c7344af0908afb4d7f12bc73e77d1b0c7ac126e3814a5f6ac1e519099243f443a69fc33edc39ed92718eaaefc6113b29f9c5b45a76b334b591da467224491bb95e460270091726454474be19497daf365216e594c9a9c29f22ba4e0d28befc0feeb9926b7fb3a1f47cbafc1d9fcf7897998bf496c2810311511edeca2c1d6a0cac2f1c557ab9fee90de733859b66b7c75d663789154ee0a43350fdd0be85bc16e43f5b70c522ec1e97172f382ec5e4c4a7d8e893a5ac6607d8cade4edc842b2a5a8bb03d29b542467fcdb88e91f40ca9acee4340013a2f7f0c6dbe8ed6c0d215b6b78c695e0ebb0670a86495f818e4bb075c490900e0b44e5bc516ac650eaf5789d1cced39bcc54bd4f89210f2d9bb08f91182c62cfa7956d265194433624a25c9c950a41572ef2888615e0bead6564edf094a2e9e9de11846a6d0a5153022e18bd922799daf2c66e7d826d41f740746723b20d254864b537af48bd14e28c34b53f6c791f3b11b8c75ddbc5ed28eb1cd733f8cb6e236c40160f0041f8111a402b8319f2a55b9ca7e9d48c20a147478973f4b188049e15d41e7c963085aceaf12a55190316e8d5eff55cbbd29c0bb52b526127dd29b6f984307c1191532a2355eeb563ea403705a658ed033b3acca947c662622551143e8c54cc6e4b6fca78d278fe8e92c575007a369ae1e25d2c8d63aa8360e23e6753f8e4dd83745977317d79a4a4ff506390558db4e5709e50ca49349fd70272a3b17b9727a4d7f6d3e3eb3d1f500f362b0b32b7f0f9240331c7c9cd1e4b608952c74366a42769ea8d14e23002c980f3aa247bca5cda8c66833d60c99a75c9ac8017ea6015d66338181064a8a3bbafea93545afc8c9ec5032aae2060b5dd96fbedb5509c4c8f43b9ad022c97a20bb04a544733ed287d255cf729761706ab0f77f48631944be0f013de76d55fad99473d75dfecceb1c7771f3f5fd17bc79a88bf1d08286d45a0c0e02d1eade6c5c56522f1b9beee1353a79158d7c15f410031defd02f0b25de0d2ae49d1b42c6e92fc863bb14779fd15cccb29296af14a8da7f2588c799d923fbc033859b6d9750c271ea020985c8ff5c985fe147aaaa188e0852de8971e85a6d8f36eb37af1dda6061518f880ae8e19da70cc2bebd8d2fc14c5862c39561dba7a7399f89081ae27d924c9c7a7e2686429cde7252965a2a91a486a292143146b1c33d00c51f76a13380975a18a1d0768fd1d23b0ce5cdf03fa24e1e6ca70c544e27c0ac8053b4778af0dc6ba1534be1b9490f048591e1904d17e6d9d049255779d36d0ab35788875d513f04d51084235c2610fbc9bb50959292fc9bac272e37d98c248aa349322e679fb8fd52c7cf4495d21b268a8dc9a9a131f7db9be4afc51082f60571c4e21d6c201b44b9bd9e602e0730fb17f7396a22c8f800ef37bcdc42c29161a01d697482c3f46e33a2420a0648082fe92921e5cd70035c622310d22aac32847a779b4af465d1a4ed27760a3e9e0903143c12c903509a5bfdbaa1c175624423eea98a6912138af9684539c464e3f2236624aaf2d5d4d8b827626dd169720fe58c6605a36b9447d9b3be4df1e885a4c7a24db522ba667427b1a90091d28885d9c5467fdb6a18172dec1d8e24608548920c2ac37a67a091145fc591a4f31c49445b23499facfc7316913cdd40596030a0a25eaa01dc9951d99c83c0abb3bdce0809034f7e6b42b19dc9f8a0b55eab48ba1cc996fc9d4a82a86f49bbe229d8c104166368997c4deb545543b1b0f162910140de9a5e307fac3059d5b0ff888c41f3462041c1bd29e307bf4c21cfb2ee62dfeb09e9540ef7a3e24b2584effb862febdc4ef8cab2e7493d2bdf1171e2fd49c9c4d04588f6586f50b49475efd555140b374c30347bf2b7ac44d7fc5da0a155323bbfeb04e0b5511906f159cd05e9dc1a636a1b850b197ad96507f5edae4c1f69684bb4f69eb377ff618486ebc4c69983471805ac8c05bfff7567ee808738f520ea21b8cc4bcc2c5b64cc4d18d50701254dd0b18f51b2aac6c748e7612701b8165bf6cf0d4362f3c0de5c69edc5d43e5801e67db4aeb04fc4e4ed1d2158a2ec770845b1d9aa89000fdc9dd4c231fd9fd0cf4bfb510046872f5906a30d0eca4465920c68248120463a9d7b1466790ef8b7a524c0f1ab6e6ac7b7ceebae07acc2577eecea3124055ca4ad9014961e8adbd1f3cebcdde8a2cee498bc1d32b7cff413ab1cf8d00aaa63e710587a36667aab67abdec7d658ed1e0ce59df6d45d115f5032d37b44ba0bb982cc78ec223efda8cf4a2d84c824e48eab313c5a8ece0b6fcc460a46674eaf5f3e87e69edfc9be62de5574744c528561d289d75f50eb4463264bf9bb642739f040d60645639a4ee1081c4aeadde66a90903b65b0df0e828d1d626cf87f5d891b3e721bf3c0504fe7485b58b89cc0ee041287973185aad45cc948b82dc713fbabc092cb11fe327c13a6c161ddabd4cec7b05b88f3b49d40733d3c87bbe3a1d9f9870b2a3edb47eff18350fcee1ccd78965e01ef75ddd0be01e286e2555b931868b4ca7696f9c80d67e907355f0cacca21f8d3cebf16c2b45efec2649ca94b50dbf5599bcec6dce1647470bcbd6c7de5f67e21cbdbe2121482f7052b9ef040c6eb4afe520d79c1371135d4076b9de10c8f613e477cbf8827593a2cb48af58097e6778a431a969e64b851f9c4d6d200cc9dd5d6a2f593e4477b2ae67f787f6f90af5203b0d553ad4d0c14cc1ef48db07c96cc78659a5140e1000915ba5141754bfb50986e9fc22212f378aa8bb10875472016d52390837ec6cd0a9cced54d50a74c9484c8be7ce2a1ca143d692d86d180e38ad0229f9144cd356f479b6e07162b6e46f4626a3ae097c319302d4468bb21ec0a27dff4b560dbadebf497527aa04be3c9754c283265a146b6a7a59ca986ef8e2148e7b15ca6215382b29c6845515d022719e8b5fa6adf066386d94e9f8e4dbcab0c19ef58c6e0992389e9cd1492aeabaf3aebc07fa51b5186507087b41b120f44bd14043eac35a3a246792198a930b4a2ff3b319cbb0d73ebc9732c7e39a11a52f064d7ed92b56982c03807fe5f4a4a9228a279c7b45f9c4058b3d3fda9954e9136505ecd34313897905fdac62efde13fe79830d1ee9444797ec4ac76ed0e1685ed54ab6970c6e6156af0397608fa308db3724239da99c5dd8995566dabc7f3d92d83756fcf652a0b96037f9cacc48854e2048757cdc7afff2bd950207c7b9b816da0a8464af94b38620fcad4b030eb2298135b18ab41a0425206f691fa5614ff0f561913d3924a8cd9e99b8538e35ee37ad0d60d2f232d5bcd76561c9d5b2a7de0a69a99748ab0bee1f43a3b85431915913671a4ec0c787c4ec1b267932837f9311899cbcc49c0a984a0ffc62293cc50f298a37e689e9bd8f9fda746e9f60fd6529f4ba15f8aebf3a1a5744b7f98be990d2a448e435e2d993e66d580079253bf85365c82897acad4066498b293cc6263944ef249c2c590a01b8bc51b325774f3e7a2dbf429984b52eb4df50f86bdc484a1fb61b35953f50349a4418220b663833f2d89359b1cd2f5172935d3dada3c8508a107874aa3692445935d2ae0eb3824113221f872b9c105d1bd4d695365c0b09987bccad4f96466ee3bbc275fb089fa79fb10b0c324e6bc71997e54efdaa9fa810f6854235a0482c8e0a94c165a102062663ec0f6d44eb4aa9f01e46de4918cc40a58e9a555e9c9658a37e6835349a0f1dc72998cc427e569424b50582eb3073b501c1e73d6e5343758d36c3c9c7f750fb3212d7da78e338f10a76932e786cfb0496f0ef9ba7acf8a9c132c5668d5afe63bcdbaf0472bb013e92fbcc3f3f0ef367ca05eb035eb9decc849ccbe2e1f4f0814b41089ff34d7856fadc69ee8ec83f7fd36ee3cdebae0b2d5d92742471f9df81622cb795df241ac5042b869ac90f308d7a9c340617304bbe554eba78de3c1bd4a8bbee1e29620f32bd6c161a250411d68550a87a7a0e716ec1b51bf7e25b50c0131362ee6a164cef41ee1e528e2c14d9fb3860964cc745cad2e659fc7ba4afdb30f338af04b9419ddd94a00587c5fc8faf580e10bddfac2477101ced20bbfdd66c7e75c801db716ab2e9c5ae5fc80e550425e1eea17cc8f77c5da172e1f1541f04527ec9b67edfc2a8dc488691d2c16b5c521a8608a7e5f50f400b9ea24e980f94a618e2490312ceccd65f56f7baf3ff8b5227abda8c1f76364c499ca8872b29da7e8081ef2ecfffdde13e9bcf318abde704325ac05de92666872b7eb63a185b628165c5a8414c38eaff8590756842f0747e403e5ae7dfefd9b8eb1320a7c6bb1f8669ea4e3a921da9e1405bb937378faffb1eb0ce08c81ed08bd24ac7111577a570c15c0a7acbee91432363b5dc323703961050a04bfb28ecf2f7ac50e205d20b83f2b3cbc33163cf05ef77181fd6d15f2aba391a4ba7843570c81e887ea3f7dbb5e121aedfb7bec1f3f803105402cab721e24041fc640f3e1a8908989ce6f79347639b5ac7d0513521b72526a876abbd67e0c9fe2e88e4ce5326cf71a592c1f30e094b2959cbee11d85afa60e8a58738b9560951b3b8f3bfefefcf7b699846747172ab4199a8996dd2196f91e483a66f03b60c332170c6139f6f6765bd93e413c0eddf7ff3ef19f169a2197e326eda3eb8d3fea8fcef4f6cde538a9b56aa72d4764cf3f3c75a382bcec33b3d372a44cfb2b5197a3977da2f72a055e6d7e8a54cfa3a1ba48bde8e5483295ccca2c47e0620fbddffbfb590b4fa76f5ecd915ef4728437568e4a97a397b2c0feeaffa62bf39b811a9e78399a419fac9f96a3eb1d02b9f28fc8c7b7d5f6097075043c6fff17b7622ec75efb04dedbd49eecc8bf02d87f20f12875d16a5a8e8eff5a0542163b00b31c7fc90559affc1146b718748257272f6c9f80ea511e6f2dc7febfcab4ae5ee8db6b597f5b8eaefec9c31cfc2e4707fbc5ea2625f28019ed9cc47e779ff89d7c12bc70762de53fa4edf98d8da9861bef138983de5e8e781f88d2f9ad3a1a29f26b2cd2cad691992dd6b263b977d92742b9a9412b4da959f3d747923312522b726e48a569a8bb9d7461aa3e12fa241211eec99a903e4b18925cf7259bb1be42f39ea71a0004678fcb639f80f97a55217744e829c625f3c2313a6ebd30f4a04add27867a365e5759faa49562d4d9fa746d3a80d4fdfe9aab5c95c8d675e9ff8b44f5957c504fd4409d18a74fc03670225e162547107b4e040c7d7a067e959b902b36eeadec7522df643a38a6560a843c5fdb0f07562c19646d941fb09a0c4144a9783b794211ef3125e591253c192239e6a60a7575dfe7417f80ac25ee4c9a462d6a5cb61f74967919837214d7e1a4fd10b13687bf70d961500f45aaa554abacb9da0fa98233d1c99476dfac1f8bddb7ed070c2b960cb236ca0f584d8620a254178596e7ac51d36a4169961b1ca34ae737f5a3e5e0e81ff5318c702a4925649d99ae575f31c3aca032184cf57bb4ae376d870322aaa7143fa8ff8b63c9fde337ac4ce7e315e8444006295f30f2cc091bbcf7c17e51896cc19246a290930afa820fe3d53c9551ae11eacfc09c1fec0fbdf12d684f401588445d76391320ee2c891476f7877f7509c5b8de46662b17d8ef6dbfa7b57099498bead3b6f101b39a914eabdaeaf9c989e1ea2851080b7e354aff8e445d5d22133f8a0d03f2b5aaa619f295196c80059288c9aecf1d0e7c1b89002f7df02ff8f793e1bde084e18cc663c2993e69db4ae1cebca5e1d27196bcba361c7a165379a0e83f3317fd9ca0ecc502443c4a35edb20524df2783a6ed8fb04753051699cf8b3109735a361c505632f9a935e4268cae4eedd38c03312dd3948314f966302831c4f8fec894c7e787fe7f247d501cab6329ee4d65025d4ae63cac233d160d0d39dab02ca94a6c3d9ffa22667a09150f65a8cb25fcc4d5713c4406c2acd322ef971f1153d9f08ff5617240143b62eed1d853880282b8ca5064ffff1effa40c255f8b2e9763cdfa0fed9dc7c482968297ece88a1d6294f52d6e75836bd91456895ffcf5aa351cb35cf78d87de526029149a1ee7a21dc8c44606295f30f2cc890f481b1efd3d0c7efa3e0df758da5f33b2be3ca3dfba6cd9b4bc2269c50e3409f5cf668c239e3d35fcf35a9824955474f6fa2cda7c51e536d81baa1adba496542ad935a17fe9781f42a4c3caaa44503afe4756ca789557ae0829723dd4215f9497ad087c5e50bb39e34587c27bb4627c3b8b57311dc705db23b0cc921ed89e9d7b4990264856e69ead681aaa8ff7c224a56df695099538602001ebff04d78fbc8e02e8d69f2a1626d8d6f26f89f88911847a35b896308a979ad98fca8ee7421311c181821e15db92f84723a797bb8e656c576c73f6d7940747f97b8e6bde81202c47fd64afee990e0b813a851d08b04da1dd647bb167cff9b818a11fef2077a0a0654d03eebc46771890c4449a24eb60aabbf126b9ee518e1dae2385b925920684182fcc5b37bbb79af0d1e3b1911ecfbcb4e9bfdf4773c39ea6c40c2c4f3b795f84593bb5182c508391057f9c02329542507d59168c92bd77df5476c7680cb00cd3e80309fe330414cca53a4c2a07be16226fa72b03bc48c56f898f1427e3aeef90234261111d6fb5ed85226d79f7a534ea2f47f9916da08557c26eb08ff04a149b94931ee5461ba23cd775493ad809cb304e49e9f01a630fac5de23b173471042618c256078a16928e1f92301f22a1638858a4a3d587b27c5326533b60dbdc603252aa3e0e83cefc7723989f4600f6f23de955d1d2ecaa3d86e0a6058fe0f7941244ee5d238947b1969e70398a5d9f6fc078d3503267f40b63a66a72c595ded1f602974dedf40446a18f45be0146929fd64e32834ce347689f7d0b9c60e9183de7ca8d39982e96e2d45b313476a5ca589259399fe47c5f856740d1fd32d1473acf05299e9353d1380bbcd31c80a8631b4fd5d6c6f99fa1ce92203d2811701a15d5793aeca621cd450d4c3b1b35977c7a2451550c37fe4486864274315c50d98a829f7a25d121a3f1693dcf2bcfc902cf4c21153dd378046a93476799c00fe7330f9b7bb9c440bd48088752bd2ca36a5012e8dd4749bce916abb871cb8f4b406e6584fb54fb4ac17f8afcec09f1c0b10bf336d6cb62c0e4e7f9aafdea79edb1767324eaebfc48c6112589d2e85d2b32c011c165bca4e1a59714809c744e4989515054e8b60f226a3237c92958fecd2a64c3e26bdf2c40df1de326685e0f135df7e295bd3a58fa880f11c1bd91a71de060539a2089fb00cc38238f380159f87aaec40fe23c242657a872ccdac70cec2147aa84ab1348d0f729c0efc4c9df47468d75f56e3c4165f9999ea98dd1d701ebf6d5f404ed69509d060e01a62d417b42d53a8d12d6f4e393aa3559a116a362b935260e512a7b784614d5a1045a3cc5bedaf5f811d733ff343799f88cab4c7e904b667fcc75e63fc225731f719bb91fb89ee94fb9cf940fdca24c327f9e0dca4bf33997059756ffa8c1e56868ac331ac88c59e48538772490ebe6568b21250743fb8f2f3724658a89801a7656bab374c6128bced17a2327308b574ea1fcdf78fc56a5fd47905d6678ec82908c2738f041867ea9c3eafd60112cbef4794c4fee228c258c27179c7be043f7c5aae1efd38ae5fc62d4d84976cbb3316951a4cdd9aa2a57c07d2c6363e2f0547b66268adf93c7df18ccffd66e4c02aad6ff99bd726676cbdf32ea6f1cfe3f622ac7cca8a89f42493533c7eecf56d55f32de2fbe88dfcc34f4bfaa81b42b2aeca18cf562029bbcb503a05a1233b35a10321f9f19effdd3cc4c6b9451252b5d6df6fd6fed473433d5e502475c33d34affa3e8fd4012fcbe383367c3a63d3383957edb3cc2cc34e6ff56487f215d7ffb3fde9969b2ff439bd8a2d43b46d9d081094c7f631ac84ee967e658fb3197723333bdfe9e3cfeed60fc57cfcc90229ac452127c3782a378d4ccc0adf2e398ce0fff2937f1cc8cba9e6de4e1cc90db518a6dfccc5336240fdb3fcdcc31930ed1b10cfb744e4cc671e3f8429e313dcdcc1a82fe566cc75f0abcb866c64bb760fdb41d03633d5f067c4ab486ff0edac9cc1c66230d9724bd92fc7081737bdf8b03cf0c7d467c60662800c28cd940450bc22ce52f846a8b561773cbffd73433eac52ed89323b695818dd1a358fcd835fbf040929c341b329708ac761069acf83c73fd85660a142c696850accebfe64594fd3f7f88cdf3972ecf7cf35305786ed0c409a08559a872eafd794e9e42d1637cf0ace627c4ac096e122ccaeecd1e9cd8b33ce39af6d2fccaff13c228d20defffb431ee0d73d518e95b2baefb0c880fb71f3f4f9051c4f0872cc489eafa9c440b91611138180aefea1704659f902af084ebfad19065e94bae60ae05091a5b583a9f5e9d0b7f242602507e45827d17223eda132fa8fd9716ddade6a3e2fe4db111ba87e6ca43180e47957967e7c2626237f40f31a7ab128ac60b2c9510ff7a73f9648689b08e186da663700f20a1e243ea2020275030d57593ac40cbbd48da147467dcd37df7aebac5a502d7bb0810a1b096810ba0cfd5b2335f0dcea6dbd682c10a228a7413fa0393ff54159de72bbedb974c18a3fdfc8e755f52ac3400359138fbdb69ae2a1d56a13ed923dc6b8ad4a8d4c8681c61b9589736a1f8ef1ec7a6bef94f4fd1bfe2c5b21f432ef0dc5beafd236fdf84f56e9aaf267c08aaffcaa0ecbd9e309f76d852a0d64c4c59c36c72eac73600048c80522c66045836e1f6efbd9eabf0d36902d394ff0915ac4df8fce38745135bd411887b19f7c169ff4767412e44903e0f806fdafcd4f92cf7e99334fb9cd1efdf750eba82515c0b46c0b5fe14933da05d8bafb6a2ea57a165df787602fe8b90822ed0756d9f9f6ddd5239796f2022fe0bfc8286bd2869deac434bfe570e3ba959c13eb5f4443dc8e1e1e1f3eb6a089e0f42de4c59d8e7a422d6486c813b78018aaebd92c127f5804dba4836b1a2b775004d284486248ed10d903a76618e332c7ab0c8be0feac533e06731f329766beddda820efb0188b8102c4e1311100e27094118db059c6914f66274c8fbaf7eab45d6a2cb79e09c94fe93207e6277709ae5cd84ee2aeac6717bd40bb042856782074a9f3ebad99ef496d5771802fc9780974df300790f8a9b2e911adda3f47e7e40850d0e528c06853fcefaa98aff16c23ac9a0ea59723c066873f4adc422e573bdce36d3a3d267310044f8506e4fc593a0e0e73dd752a8b92fe2f245554357f9258d47bd0991a0f8a96210e46cf3ff2dc87aeaf1dc41d226e7fd2e3f9e780040fc398a1a9908c5e6742d91462df098dd57ff83cd7598782483b0aa99c031680e071fb3ac63df61362da746a03054846f75645aa4da6c55fee71028384b650b3da5b92689efd40300cb9c14d6c51a2d296737f51c8af5d051126d0353b3c198b5804dd41925a0f413d52ddb80733725e21fc86e4045c9c3f263a310b6fa8cc0323053b5a156a85afa3e024d5443b02edff044f1d551b59998d2ac9f0baff2922bfe5221141e3442395111a98331cbabe1b2e70a43290794ad8601d7859f87bb6e91c3aa43c8d61c9a8108a9c5e5ebf62fbcfcf269b5eb28ec736d19357337ef3b125145563e2baf4649566394960a76a5f2d2c3991cd7b137fa26d1cdabaa7dac443031db332a65c9295c9db8e018f1d01212dd8a8d72fa80b19abdcb601e68184b026b92755338207bf931e74e523bbadf55462033a2d145e7023ba2359ef9668f3c943520c5944ada60a8737bf5390ae1c6531a3d5d6b041ce7db931aba78dd82b6096613624a74fbc76b3bc7c98a2d308e71ae5827e74a7f25fb45f7d8f83ea3eaf309e1d47909774bb7a502731b69f0357ad527368f39e915b6347b92cc3a2e2af87ae96a45b28b0c3bcd83c570d10f97e40b9825db6ac513ed3d1262fdc1253df7ac41d934c8a0ab5369b741a7b9f2e6f1aa22628060e349bf8b5d03959d1d02a14794f29184f58dcd71a12060c0dc85ff40296b9be87671448feed92ea5895f58955ad8e967967b1231328b0fe014e9c6a1deddef27109318f951c404fc0d157d62b3a3c4de0f60e89cd35c3ecfd78710441e8b4d49456e9d6df5a588364d9d25bc5d1280d8d66d758282ecf8fdf271b260ffdfa238cd340dd10dd7ae8acf0cca31642a9a7fa74fd5e74184af4b9fe76871884472d565a03a6a0e235eeee222b1c203bbe871d314d96adcc5747b6d4fa399cf1f28f0066e53aa1658ee6a41c4e11398a422a228ad63bcb38a8d3ecd7ded9a481900ba28594d30dca37e125ab368127ecbb6e5dee33c293d5b95283d5300c1217d91a0b20a3ea3461b69cdcef02f7e2e9bd39cf3a7c6a074ef2fba8cf17c25325547713f3cc38bf33dabe723ecf01bb7cd1f2bad731c368ff6151d798d0e48c7d40cb5413354c46c3a6483d302d8234ca83a78492cef52998b95ee5fd5a64427a1c22bdc0f836dd40f24cc7f5da69f229dd94b6685bb328d08f287df199b13188f5ef92e007de4df8cede3cd39518153547f4ea52e8ec3341caa1f92de30a1f035fe46700da9d81cddee0cdb7dd74c5d6810c7d8d6cae553bdec8da5fc21bd9c7c4eba3a19df7ca98d0bb7baa9f12b8fd6d2affb19564ab8cc1df3baa08bc224155c117327f82b4f66d2f1e6194c06241460aac64c4e5c3c51185f74e2a26894250ad00ace885627de8bb657902bf9b903611a01560fcf12a7f7855a7c15b3baab38813d7d6460c559f02283431127298814339c587b0f04951c2582506728e45d1346764cc0b1bc36290b3462906fc71d816285d8fe2096736d57031cbc984ea02a270064660b9240a0594d1da5cbf6a76791e6c69402eb050e2a585edbc9db5b8f72f80a5590941fd40f7f8dcb85758dff2148e7e04b0ec22b64e750818a745f878f9761ce087faabb5622d8e97bafeb97138ee81c6696ceeb64bc7ee6a9a5daf00dee577011fc4c6b97eb6bbd5d65c5715e24076f1c95d3e71be15323a0e0013313957157d3bd29e616ca5d5c9d845328a51674f45a0f1abb0c1b37d96c42d3291abfdff4062840039dac0026a1f7164ab688847cb4ff2ad49a103b07212f4dd7eaa8c22e0061101a33bd18c198c7057957765e73d875051f2c854430b0d6c3332a437c3bcb54e022e8b8a37f814ae244018751b802e4b99cdbc4bfad22c1dfd69a614c0c050929f36983a94201957900ae63c1c3736373490dade771a468cc8adeae3bfd75bfa254d4c13edfb2c88060e8b11c139ecf5e3a275bd5ff171aa4e7c170475e5c40e6e2ba9bdf1b09305da24d45a56b4b696f86141e94a46b2432dde090e5a5961068e5595e7e26bbf4231cb6cd65d08899d3292eef52c902ce2ef94a315894045f87ba1b1ce09abbd906ee605a73088e8b361610553221559f6983263424290ee4fde8b8c5f16844a08d42de0b1199298751305a7c8168fbb552a37a5369e9161a0dd1c7eaefdcf4a546c9140be7608f528e41b9fc9fa9989692beff841d27ca285176023f47826434fa825c9286d1ba1ae779426373d42a9926759b4f0e15536faa4fad6bba919da3fa48f1f099bd0bb2accefd822017c0f5bcc730293193a629baad02cca0b5d719c78c34d61fc7cf33bfb19af5d2d2a4717b41c123df9e5b9fd60e3916216d340a6795bb33ebd7adae93c3b6785315d24d0ac7e29861c16e54e8a7d13b23caa1e7662d1dbc63f906d48c1db61ebdca3a0cf7f7f94201cc442fe13e5c7cd38cfadebcb6d504845706eedbc9471d4245c70d00dbd5e834fb1235f5ced78061bd289684434fdedbcef02bd781ce2b9e120899b72c11264365662820faf62d586d36e5d3a5a0a15d9b089e6a82b41fe9b1876e27c48e3684454345ac8edd8e6cb7e5b3666b63ae5741f86084aeab0be4de2ec5e775dd0e99991a598370d8fb2473a88b0c90a1ccda100cec9ec7a61e666534580d39e87981c4a6091fb7cd4ff616acfe78fccd289ea2b8dd58d7189296b2e8358072db75d724e7618c57afc45b6e4d1e78791c238485542dffaf9eac6a09e69c8179c0aa6f2a52bfafd679919f2bc4716db1fb93870eccf818e8e9a2c6936ac8ba122f22da00a8d941b7b52a39b51fdf11c4e89706014a770dea182286f0630b947456548868ee7164ce4e8e61d5e4ab872e1bde4aa57119e85577cdf21f2486c4e6629e0d07ab136a033eb928e6da61428650c982f3dafa847d0e63561774b4b80260f2f2e42b188d4c1c4a2d67e5175ba4bcae027f9380bbf0d4904ae8a9688079d6147d005d2db9cbd39b5ab3558c16a0fd40b5e7f5826aaefca9daee784e5518727e03adcbbbd8fc77c354e5e724b01eeaa3be8b31d1912907bc4520a5e054abc15c3215f79c7a230ca5c0a5451a3d68ccee74945f679b1e668b6513329d0a9cd9b1c803a1dc2304cd6740d80e3ae18ad6e9cf6bdf4ac47a708121972caa358a52c5e5f0bd6ca1a509a2c81f7f5a9150eb243834279327ea8b15336d919b34efd36184da4c11ff658f41bd9d346ad2d788f8a40df6cab6b7cd29347828fe6167f510d0d97724690b3d313a08b5c104d6cce168c01fe3b396bf03789aed6997c40e03112fbffa21c441ce7ca8f1696324b12a101515891a66ddbd7df0edfa6728e4cde5d9ce3f0534baee6a3c905c837afb0a7fae59c96a3a3242a7e7a0158122ad9260987dc548a7cb932c4840d4e02e62a508ecaf2fbd78670b541f503820990675014043026a7032f04a0a2d3dc7e0c826b61db49ad7f82db073dd089f54d73423fb54d44c924679572a24ea6c1223ca636eb136d39e3a81d1269775c9eb4a56d09363b4e8baa850d433ae4944e612cffc595c6984ef9d99ef05c743da7f7a1c67bb57ee32b6c0f3e8a3df55eb0d25734f006af987630ed83d0ceb835772677a6948a5a0e0458a2b3337b98897fd01f99f334b7ca98f0b8ccd9db0a68b1f3818c061e37be31f2136f30a3694abbdfab6ccd625ac925f150fd26769a2287c586decc6430b71023917a2bba36f419e36d01c43b0b88cd29512d519a5499197bac9685569e6d4c09d02b3c02fdc0a75d2ac074dab2e0f8c53fce5fb2f55c7fe6ffd7d34838beccdac42841d9676b31030867a8625a2d2680aa12fa75be42c8ced38c95d8a5566159a00df184b80a5f0edb3d35fe1b638229ba02c4de23fd90129a458e29dace684aa6126dc0458b98aa1f23286ac682f18a31554a889cc98989731c23c9b5a7312f0875760e4fdc5d38f7b8776d4c76a48715b515f9a64f2b91672c8de438a126e085451fe8fce4d906bdddb55bb469f71d10d4c086dfec542823a0b8204f48b24cf053413d75f09ef162318ad95262d57073a09cca218b9b359dfb2b64ff48b8d56c6270b04068f37fa258c547bbc6a950784755e0849a5cad1c0175c3aa31171ffbe8e289837baad555fee92c1b0b10b8caeff8da5597244264ea68c30a0250d362e66b9b35f5e1050294b1ad32db82cc8b9f36e446f85c1154afcadf04c145de08dc08580794233b6009bc8eeac6d26eed11e388307abe9357f47bfa179349473bc898e784ae3735680a0c399c8e8f236c5d47ea3bb702d5a5e9dac141e4f77fc6bb2a4c30c372c9b2b01a52e25a61710078f0b31bf8104d5c1e7fa5de999ae18f91c0354f4cb1b43b6776f9fc0b80997f6cb957258da12acf17b5d818aa851501d5dc1c0c45a5121d0f2d85e3a35f086e26669181e4f1313158a1601aef04e44a20ca9c6277ba929a544326ab7d3495361b5cea894b5dabffba76106f2795ca85e1d53a3d044b34ad2140cd72837c9cf4247bd248fcaaf9430eb41e22609a087721f15c22372f178944dc8fcc47eda42d6ac5ba93b392d9536d3ba6787f6ae55e69ab890f48e9e65f949dfa50734340578fc5bd720b05bfed0430c594769a9cd955120e6e4b74d9a716b49b791f54494bb0711ce2d297c262094ad4961682844e704bc4d44a5f06c48519bdad222649f505956fc7bfa5945085a97fec459d8672cfc6f94201a7ced138546cbb45eae138561bc1a5e2d345cab8c58a252c88f13281020c9ae66d334502a8612995cf349e939beb6da02ae3fe4151aceb7fda32e6802bdeaa79bd8f003c5758b20bdb2831f3c9b69519b47b5f9e53c3b2ac263e179a85dd1b07c9ba081484768a0e015196e02e5652aafec214122833d33f7964627b130ac4ca35135e47ea45d569867c93c363b5a025538ebb293be935c2b44609cc01ca1c70c9b08ccb59dfdf92537e3d1aa04180461d168696e75ed67bee550c539d03fed84fba662e0d64302dc815554d80a68494e0b247381df1048fb5d33ae9114b2f65739150df9c623b4623fd85800aefb0925b13472120e1be64cf89a30fc33f256f2c760997cf96f74956bd913587ac085cf94e24d7b1dce68cc79001df567dae3af6e9f6746eac391f29751475f531952c525149fcf9945c9a64f4308101c118f707ede543c6b50d0bbba2d7145910e0860b6f92324083f3459ffcfd2c9b307557d20e3491f42d8a376ebb53bfaaf1b53e0e596346e1d5e1fc4603d14d396e3446a0f23b819bf1d9462a4ce73277a7e8efb359ef49ef6b1a82122cdd48211e97cd3addf7bc401ffc675a83ab2f845376e828092034072abb1138c29143f77876739e7898e12652c5a812910fbf5c0bc8d981208a4d77eba9578c5a0a293a22e761600e5253e50073ed5b1f90d7f11c6dff557cabff679d99c5f7df3f5c17b158856119201263b28a23fec81a68f1e69784d4364baf9d28f8ef140a4d8211c7814361211a5a1c741b3c52a441b8a384aec1d6fd97abbd703524c87250cb951c747e7bacbffcc5bb2bb92940bd1e64cb43fe59e5332b26784731c9eec3d36a7468358f6d429a1faef3bf57aa829bdc7cf5b474bc584c6550df58d74454c0194940193122014faf4e013e9cc1127d484c5a897bfabfab2b04471377f699b8a22fba1d08e3e05044f7665eb9a629739eb917c0e9951656217a04c0315986bf4fe49679a132c85589e1d4ee8b85a0e0f579c8281680a9560280353dd91ea8cf0df49da05241f18f93951473dfa642e522cb8f01a5cf6cc6a53e5fc8cbea6f55deade370f7066c7866bf529626dc8844494fe00cb65ad5c3f848c39168f12cfce0577f977073b30e9b56eb22e788795c086d17cb080510c49c5a01a9802eab3033164c1308ee891c82f3b62a6f2e5974dd73c1f8a0c0711a8547d45c8de7196aaeb40157f1f32903e98a43517581edaf806409caa40fa629461430044160d0219e313cf60c810c458623f19af923e217118ccd4a8424594d2a0d5079a90a8e94a8f5eb15647caa1feb1464bb04a1b7c5cc16de8565cd07ad35554f6c37ee8285b0c19b9b0453021243e5ab58ca125e5f64c92235a7ebd6b5880f2c81917fc526e3b88e7601aee56bd205d744f3c3d1880cea170d43943f43cb102161ffd8013590ee0686166bacc55e26f39912c4f75b2d02a06e9c1565a78c3b6045a8481edfba45cf6ce356187c7a4fdd17823a6fca52bd298b9d3d2430f8b9a894131e39d6d8c24fb94efaceea691abcf47ca7eb126bf665eb6201d25833a379b234f406edd50613b483f49f39fe7281085b4c8d58eb4c16e11b8a643d8e7b365e867595585ba90e358e85affb72819552989c156a70c0446d110925bf58bbf89060184f301e94f12916aebfa93cb2c2985cb6c25208670166d474525f9570714aa1f75ae5a3b878e504d126a71199db6865a8e5b995ee874161a5f63ca6058ac8921db9409f7452b20a8908dfc774374246c1048ca0690b353c128b19f290ac12aa5b42d4593be76e1a7f5f825516408b30468662b809397569154c98cfa829d49f02678fd3dfcc7434a38c4a98802ce8fdff623c20dc688a02c05c9970d8695c7d089ca5c3665e2f1b9b43988304168aec7e24cd82b90c078505b4d4e62c8e48e24226d68638ace1078ab8c6f5eaf7fb7af38e20ab4444ce742912069eac5d3a24221656804bba18acc728cf4a9be4c83daef7452698f2c152ebc3d89e4b1c63281f7eb5c647619b92c568973c1109456063583c088ff682a6e4c995c2c923116c90ff1000f79f9d7a2dd19fa9bc2530d31528b7ad10791acec0bdf6368d5682962ca029f40a95ade8c9075f1b75bb8fe60b5d57ac547c143b4db838098c05b7b53cc287fa344bec07e8db1d92d258c44f60994e068318ab439135392536eda57109928196193c3ede493a87a1c8762215add13d83c19db1903b834f68c69e2ad78f30deefb9315d365cb76f189ec7dbed7a28d62502cea1b1cb8eae82eec88382a94757ad3101fca502fada79615d404e424e07b6de484237bf6afbfbbfde7fe097577288d242826bde047122cc0885bbe480260078a9e3078831184b3f55b8010fc1ba237b08ecc982a5b0fca4024a58ba961fa1d5369ae6216aaf85c54f38642784c8eeb6e59652a624653a060d06980527e8a18a918fd94f14489069828620493a2a24b01285c00269088a222ff004d1a180089c186209206a400110dd0f2fe0a860881c4640650c165b92706edd40a48c0e3808d962e5cb952f85a4729d0f2aa0a25550455b5a733154e978c60c922522a22c2de18080110c2193a4440e3f08f9806d315cc1b42fb5b2c56003b638da62800167d61100a802092f4a5490945842cb133224e86204135234218958e97eb9ca001d49e1a4089432b307e71696c00c34e830e64a10162322a3f70aa870be5875397872fd6dffaa73dc0a3c6160afead546653c1bffc657c58fb90c2674e5e7583444568efe9cd3eb0e98206a1802080b298a74535a42ac48c962e404172ac056bb6abc623616a6dcce05dc3616a2e0cc6282c8f4492988138b91002fe9413763e42688e33878bd3a15715b335eab940a011747cabab3a62eccf3a5ed3e4f3c6104b9398417dcfc5ec49ae2e6895d60bc062fc6ce8bd1b6acc98bc73bc8bd17c14969eb157b37518f7eb48611660ab3cae773df271cfe5f9779d40eccb64eea33b4912ab1f104e17e3bfd6b03f403c005b7bff49053d83f32f145c807cf0baa9f7994253dc616afe24aecc112961f71be10024bb53404f7afae0cbfd55fb9f92b40d2f77dd3d2966886228d397d864c2822cfe2df1186127297a439c58f120497c41bcaa44a161e88280e8d436872f30786cee20d13377f603e309de34791060d8a374ac41cea24b6da433a23e1cacdaa691469fca8b011954aa552819f3d4c853a27a3845042291d68945998999cb5690605f7d3592dd2709352a64b62ce374b6ad827e4ae1977fb9a7cb5335f983fa3242fcc1fad8c29cc74d685f91bc29de90ccc0c4a0401f5330b0a33ea08ce74e6282025a00c99945c08b5506a1265d6392ea0d488d0867af8f13083231490900b39acc5192043438888d0808c826a53c0084519fa9120a076e8e1a785120a4808f74b14106a961a4235e1019112752cc086cc460e1c03c0aa6ed1226a64e586c04316412e5cf9417a645c62a66886f8520c92240001216e8e6172d83062c346911c0b681411f68fd9704b30c15d1da58778b8d986f0c3cd2dc4f3e271184f7e756b3a419ff0804899299a9431c6c8b594911569113572e21acd5ec51be973d61dac6ef519ac0aa1e8d25034545137aa0ba6d15034962a0634dcbf1232d18cc8133d2a4269143aeb567b46a94c83703f9d515a50c35045dd9446692238f61045eb569b682622aac0fdddcdfb31c2fd564bccf968dd22d2b0cfc85db448c3a773e28f20b6fab32dc2372c4853c444390ac2fdd52cd0a744898820a0b0480f68b46806d154d64ca778065510e1c2c8fb714173e13302174598d6392eb4c45b1431b50c6ef1a61f012d7031f067e4301740b5a0a3282ea6206117586eb8519f128a862a4219a1b048105044a0b8a0b0b8f0c9740a2afe95df7e53744a6aa6682d84fcc7a007f7e3b07cb8f91502d1cdffb75b1c4cf10191e24fc5d00f7c685d4cbafc16b8f10be8667a44dfd41369487a448f68971aaf1aeec70173a5bf7c39ec1669780cb3294815471e7230861ee1fe6adf5db44b97cec9ad5a6b8649cc24e355ef8c0f955e0cc8f5217aba111fdc801296b407fb7310c5cd57823b680f8e914a297b662c889bef0c5fb9fb477da03e454634231acdc8885614654dc3cdd33fa4d28d22b9341aed96b25d70ff67a73da2d99b1c43bbd168fd028ffbc8e2c094440ac0edd63d9186fc1caf820f9ddc3c980363eeeab7ef4347851a0f6b18c0fdfc12b89f6f43155a2a2ee4aebb5a86f4871a09a94f4875680feef81209063eb83f7574f3c55d700a7e74b344c21d43dad3adaee128c34c7bbc870eb15f774d824518dcbf6a2b6f03e14a1620c32208f7db98b4cea9a9d151bf0151a786d15d0f402d2d3da9fd254810a42c47f7110c6ac4538b0030b839d2643662357c36b3e43aabb32c413f65f2c5951665e840dd92329f3902b2cc5a609ff9fc71a01a1df3a316dc0207e076b3ffdcca20b194dc3a146ffaeb0ef1a6d6998cd67eeaeca7d2e850f61fffd1218acfa6d4a1a076f52320889b2d66cdaefb74cbd2dc95819759874860ed154070ff0c9e9c7942b7fa0760bbd95a6b6d9319a354c3fdacfa91353f7eea465ae3cbcdcf7d482b7d499dbae3b02eb3b85996d1823358c652165edeba55460437abb05c451f9cac401e1029f3e3772f2b064a3f589efcce7e87fd9c74851784b9f921a31603f21be4be86405fe278e29a034b4b4b353c79d00abcf00c77e4f7db1fbe4f45377f797eb7e3c3528804811b823dcc5ffef0f71ef7d37a5e4dad5ce6c1815cfe3057637f877bf95c18bb25c36e651e79c7874ddf75456ef600f79b5e9ec1dc3c8df099c20a7c980b77ea73de06ddf7e946f79d023c3c3fdc5167604bf3dccb9c03eb376b1877ccc04ec344ff31ffc69bf829135cf9948292524a7fce395f4e65ac64b27f04e737876b6ec751ee88e118bb66048a1df7cb18dae82ba8b827f639abba8d252bdeb4b37c58a72b38f089fd6a9f3a96320c5b2c1f162bdef464b558aa16cb238b9505a54a73ce19a8927cf729299da156eafea3be67715d7167a461bd393fd71537a74e376cb673ce3929f5e91e3ec5175cf9266cc127dd73dd7c3a25ac0b59ed0a65e05a463a6964bca1dfe1f640e554299e542a9573a24f87a28b6e79aad1d17dc425348f8ee97738b0c7ea746f41202dc474ba90fb1eab630a6db5df813d311d6b75ecf7c474bad700760e8c3a1d58df821c0a2aec2712388c01d40e0d7b387e52e3177b1dba8b69a275729373aee3ac89ff00f79c7b0f1b1075b8f00121c4af5178f15f06b5f1ce39ade55cc656fcf9d19033561af7b0dc02b06063c51e4ee15cf5ca65c15547f94b9f132eb5930059b4e48934a2e4893747481e9efac3b9ea95e3ea09b17bbe4f792f80679c33ce5a6b01783c6c24b8175c5774f84d7057bf0efa3116d968577fc4f2a403880def136b8178820362ce4e6c99e0305984fb8cc23922e110cf083c3ea1a78f70fb3bc1611d5da61e16d7f7fc3ba1733ab6e6f71c617ed1724b3494d369a4e13566188bd524de8d347aa0c02d2d29e1ac011cc58c88860dcff44480488b63bfefe98bf03d7d1fd807aedcf4ec77535dd775ddac75520abee694f8bb7dfa39eb6cf0debf614f4dc11dfadd7bf1244217eee08e527aeaee8b989e4e7ffa885b0d933a5147d693b316dce9fe7b1f16c47113b88302874d2f3f9e50e0b00c77ba8ff82d58ed079a4e376a18bf9779c87d05ad85491d96878a34a71b35ac19617e7d116618431f988279e298fafb39e7d7271308d2efbeefb9d30d4abbd68c576bc68bd2eefbbaafeb5edd8a11a7d52dcf74bad1618e6e9940eeaded7ce074cbd28e623b7fe2dafdd393b57e77d706bfcbea9085fb24696406397871cc0d4b5b143d58863c3c7ee0510a1a0920bae67b5083cd9939c0f37344e220decc18f0600e70ae110f795e94ed93d612789195b9298b220d97676a53e0f8328a08eb9a1c22c21a09c9081c95f08c91767473e5a13587459d23242ae49467d6aee8b0a8438dba49894c2104bed0da152704be10b52b4e087c196a57c410f822d4ae88f3cbde3c8fa4119408ebe93be0f61ecec3cac385f5478b08e33e779d87b3977a709e4978ce97e00c136f2613d1357fce32dd049e330a3c9fc6f9606aed76f73c8f4c70f33c4ae2ba0d37d27cc0b5c7e78747680857a25a4f7f87a3ad9684fdb959a7831759465886996289239658c264cdaddb701fd76a32acc9e7b83c965f71b4b130049eef355cff9eef446e87a38d052cf2d636b8c09491e1872c4b4d3ec0312922c906a5279c78994a08c9a902850c537838c1520b3a918525a022283e608e28224b8c87234fc400060a0f667624513302056260b052822084c498d3420bbe78c98202187e74e2b71c56c28d890b86486205a01a743a2086b4c422ed35456c053c38471a8f252f0cd996c400e4a70c122e78e108296c2c0c29f11f38475a0296c270099ae1889b0e648a7c044144440317278e3c61a44a0311b984f122c505472d308207cfa1a53ca101e9070b165cc94015276eb0e2073030e08a58c1c1821c9c64d952040a1b1a0648509254a1c1e88a901f2f38a2992172451157987458c6c4100310564cb95111c5a5dc686186238e6e606a08c195d682c5c70e6580a4c0414808aaf0a1bb82c3072c7e7ce08a233ec085c3f9764bdc0f471b159b1297e268a362029c238d2ba26204ce1777f7aaaeeaa9e8803d1c6d5482706ed5c6ac8c0881113dd070021abe74563200c3121e25532c114509ac4421b44449b2829f2d58247555a2cd09102e3bb810821f74c0a2c50a918d2ba0d22587323fb8b0044da79974e9c2022d22204a820cd19707c202d16ffb6fbfea0a16333d4ecc049d13852073c3fedd14323afe1d9621d8bfa375459d1385980208f6ef8cba9a6ca9008e66c649a1820186146941c7035d159deea367a4e3014fa70ba54810248e29709cb5511c59cbd19af91fb5f7e83e567d7f2b8a17c1b9639f7bd9d1847907a6f906b30fdc5f4d59f0f41df8d92f9c9906dcd991c2dc7fef35b863bf7fd25889fd3f0cf8c83bf069a6b087c37ebf89e67beebfe7deeb7e67470a9b7e470a4feebf70c77bfa997befe97be18e29fcf875ab46ebc9196408ab5e7e1b68202346d8616c562b1b9bd5cac67d647c1fc6b0b159d57cabd7e06b6a6a64d4c8f818ab075fe636a0063636bf5a7d8c183136f88ff13264fcbf270394ff325ec62ac6aae6656e03bef855cd063535351b80136b004eacaab5cfd18f981992d06da8958878e8cf4c48a90b52119623a0a02832090c16cfeed3a5a30c7d5fa4e81bbcfc3ee33c9d13e365ad650ff58b9a17304218a847c980b13c9303c1b176f671c8138d8b0c5c7ceaba800103c6c7d30d1852a6409b9752a6dee6c58b97754441f62d764bf52d345ba8013c17f5f7250a85f26480dfb3beef9338beac658011b401f3c536abcfe6c35fad562b108c361f00181f41176f03461c0018a184f1b296303ec27870c6b001f3876d3e829fa70c19618e5ff32028e3ff1f7cef41f9e04bf06d7e76cbe6e50947fcd5cb3c06f8e26dc0d44730e255cdea572f56e08e0fbf7859d780136fa001e83fb5393495684f9799484593d63f7dfce6b528532868ce66cfe439e34ab96fb96f3ed4b7dc37a7dd6eb79bfff8cc8d1ca6a35df28fac988b6494026dcc00fc5c80b705a80251e07fe08c170e28b391030cdbc592eb0af9b276ef7edaae7bd3bbbbbb9bdedd34bfe358d84f1f9d933567d7cdcecee9a96cf79ea9fb1d13754a69dea3b15d673bdad91e1bdb15f177bb376593d7993a89bdce646d67bbce76a6ae33a1be0b9fa0dcab539f7e6aaf043098ba485fce6ead565da8a22fff6bedea7ebf489f86369c1477547e3ea73b9892e05d3d8b4a3a3fb7b0a57485e7e339e5a4734a395975d297f7f44265451c571cf7745299f30a3f969fafa494fad397272a59580039dcdc9a73c657122be7baaec3c1323e0ab28ee1f7ffd7ad7696bb73ee2b2c55b75b2dbf8e04fb3bdd4fd69cd17ac5b81eee0476cb7eb90baf29fc68516253c775cfbdcd852ed885a3cd8519672dd74d5e33ec776f87c2273daf43f3367c4213ce76c9e7a42a7c55073478441cc7bd5bcc8940c155e7fc37a3d539315ca1c08a37fe1485186fbaa73176e0eae38de7ebde55aed68e56ee6b0a5dd7754dffbb29ee7b38eef709a52757b94b6fe7bd8bcf0096fa287d06fa4fbbe4c78e6364090d2ba15dd23f47ab03196eac5bf233005fed926f021bc0733a9d4ea7ef965cb90081486900cff5be7b936946c7026fbed8643f6badf5c0ef044e1ca66ff132ffc0fbf274835e133871eafbb03763e7785f1f757a9a7fd47b3460f7281a148d499e70786fb9f7aaddf1616ee2e8301eedea240be40e511179a0202c65b7188735989e22bf8cd2985b18242c462d8988744bcaa476394c8269977c39e4a781f89c913d6594c6dcc22075c1f28bfaf6c7842cc70cd5b35a396436be19bddcfba5c65c7bbb278fbbfb5ffb1100a771ba979e35e5faed55d3e7894d5ead416ef6a0ce69fa1acaaebfcfda3cb1c90b737f53cc71f3278ea73ae99ce14e155de6f45a4a09568e3375d6f33ccfd4594ae6e6e8a5857bebeedadd52cac7544a29c35c7fd6d8ab283535b5b5b395eb4155d9761cc512fc6edd70ad4ad5b0fb3d28e6c21d2af1d21035bcecbd6dbf1a668ffa0c3bdacdefbccaa32b9867100e0098e3406ebe7faa5bdc4bcba3e591cb7df4c7a986459a24a187ecd1b8863bf47d9ae4f4523b79b939953fffef1cca718dc548d18dd48f6dc7ee3073fdaa2e43fbf9f10b37472fd89f3ef7f2340277c3f1c2b34da6bce385ebcb8e96258f145292b39b8f18313424a31b367d8e47af8fb55e46b136752fc2e951212bded0bc8f1a117c6eded1fa1e1277cfc9fa27d3174653d83ac13b8f4821cefdf11bda9f895f31f7cbe5d27046ab83206aa73e39f13d57238c75cb71aedcdc52f90da54b63dd92fe3932dcac9af16a8538dcacc2c1c169f1e3ce30d5c114cfe245d69c73ce4979748e1cd2ad86499f9fef03f91f61351ccddf7f00cdb7083bd0e2517fc30e4829a1c5a3be03f7693eeabcead7eaae9e17d295fedea79f7f800853719df72730166fe6a368920e106b1ee0d9cdb7619db38c27bdefcc558106ab106ffcbd165e2e55e1a5827b7a9aefa79e0c47d8576bfa0f94c51b7f1a5002482dbc5c892fe030ecf188572402fb0ca58f17498a45b698e26639e5e6d81cee6bf5e7cca99cbdeeeaeeefd1fddbeaf999491f7719d1dd88aebeb88632a85b580ac5a37b247b2806ba1e7e038061d26837ecf303ec4e8379c41bff165e923e98124b1d99828ec6079847a44183fdbdd4082e51e75cec460ef3ee471da779d43fe0f437ec80f727ef4f618decc0f73421cd471d1a30ba4b8245441e3c71c377977bffbdec698a654fa4617a7f1924c2bc6ba132819228def87fee9248f14687c364951853805d1211613fba345c4007b5ebf766bb3e21248c12273a10b0c0cbac091310319f8e1a6b3a4c50a9542a0e34a1846e75ade638a7c3844a6539161b93552d28b999c19975e50c9233359c6f0d33639204885413289a48f242a5a9c2007d89d5e8a1d51ff736916489525962041333dd11b32158412edca43893840c1c6d3794994e9240c199b574c313d48bd89bf5e7a7666889bc28a5bb94eed2dd655276b08444069c5b49cc2249c8844182c50816b1542a95a29fc5f9610267967bbb37f5f676777797d2fb53aa95cb156d871571fd9704c1f9851dcb0a70be9d91a526483009724311304c66404470669d5102e6cc0c0b8b8424074a650643182454d0e0683ba204ceac252644d45a3be6441022ae5b706ee12db721522c0c47acd4e06803c2a1b634cb62e687a52555e0dc82d224e96482304bb2289982332bb5f4e2c58b17393927e7e4048133072fce78369c09f2a1546ee0829a537efb7ce9f377a44bb7f6def7dce7cb6ce4f0ba6bcb727493fbea1c9c58d778cf8939fd7382c07b0052c29995e40767569208e264e12825cb2302e75b850db8bf05b447810e489ac04ba018b132a3829390e0fcad80840767d61250135a6aa54aa556ffff2b554ab5a24e2b4dada85cedf0a209ce2f16707e5a0e4b86b063aec099954485e2e0e098c212c7da54cfcf168e2df94daab060c66af4d08086b84934e07c9bb02599c10a2161665cac00224ae92e6539beeffb72d88834998d1cb6c68c9e19d1b624076ce6069cbfb9829115b4e0ccb2d6b63df204e7d684d238da8e38b11929025404ced78c0b488cd024254b504e5238da905ce1841563704e5197d4a9d34aa934f2c48a24ced89454c1f969ff9ded9c92badb9a18e17c6f3fb8dfb3d88e14e11db135f1c19975c3394527addcbdf7721cf7d9f97ad968338204ce4f4516385f97d4a9d34aa99c91c98252f9ffef8ac42d564c09c362b19e156d4c9090e273a7ee2a954a556335643159ea7e321b434637e8802f8e5bcc846086b131a162c2718b1914d8968ca9386e49a2f999e9240a0070b4fd0839141c3ee651cf311993a552a9944bead469a554e2441b1212f89210a5f42b0d53e00e00c2a4353c406c759d334c813bc09c1494b8725c189b34e21ab8a78d65598d1cc3f563ddfa5a53d125ab11a3d563b21ade2f865363661c1838da92189182a19629755a8d359e469000f697c997329ef09beeeeeeb6254470be1c8e5bccf0e07c6713f153802f2df5683cc314eaa7c0c3620d6ae24d6b105bdd548378d324507912413695aa78d37f8a3f2fd88193aeed0431f2040a3351a27c40277e0cc18bf6624a6bf548bf567fd90305a9847938be3d4808c1f2e6d5c4af91b21b47162adec8de0197608b4c3c442e204250412bb2f24db627c4d89eb8d12e7666eb99810324786e3617ced84050a375a10068a208204c14c530c30a4850a2ca0e41468e245103cd0cfb7bf3e8e828d2e88f760acedffc4953a93a9f76793e11a104f60e4f1c407173e7e3d31d91ec630a8e5db0e428c755aed21b0ddaa0396c155df2594633b0741cff3901d932f3c0fdedf2bb9f86d1f8ccba20a18665a0e3df0d05984ea8846d9745390ad1982420000033150000180c0885042291603c9e87c2ee1e14000e74903a7048180d84c12487711c86410631430c00040060080032232353373e97f2bd21628ee31c3a3d85c108740c566eee625121cca8795389af6774e57f202a1acaa2af3f8e5666daa960013e811180827b94e3d53d8ace5a6376b0057370befdb4822411c1754da0756285d4b5914d48687013183c48319ddaae093c0adf63d42dea1b36cdf59d65c0ed80db4aac32fc61e28fca5c6e10a0870611b1a4771ff9f4eb709f5deca4a8b4a999d3a94cb027191269230bd5756565b21c2e303d656e8c833359b4182b448a6ddb15ba7233614010146a6e095d903867ac19b96845a76314a6e1f2f3b9e618c182c45d9ae4c30dc8bfdbdbd2001447d61a642ee8893d58a3a065908233eaa55ea37e76fb550419f5a4581e0a9ff8c5f978790a0ca5448a557beb4f4cab1ed6f719caab284065884a10a1a114cbec6b86db02da70cd8855622b9edfd415a7473d14cee4cf6b3cd4eef5a4614c90823bb15d598f0c1e93789a8df84485812b5dd94f51ed6d2ebd49be1b1491a96908e42a1fc0485986aaad01fe4e6685bfd2eeb4def78be5a889e436dda669fd16e91db7d65c382287dbd5a310cbc5523dda56bdd3f8db3339c23a2134f241598f7d4fa5ab281c242ed783e444c2f2ce4d37950c6309dad22129be4e38a8cb144fa5d896d0dee054c01837b4b7e650dcd84f51591acf377f552f51933c9433c8a372f7f24ae91fb260a749d7a1f03339d882e9fc36010e80a4c1823cdd48b958b1d5a34fee9a3b9bf3966f5f31fa3759600b5671f7d1489e4464ce33b6e8638bfe679284c1880b97ae4abae7dc6a1100426405db4fd3cf73fe382aa18980911dade9f5ee6fd3336d6bf126fde999978a086dca31d76f52a2971176ec56e81886e7ac75fbe36de7572d7167e516003b69235d072cf4b46103426207b74ffa6edb7266970fc540e238a944f9736a95512c26cafd31b7a398a31d6d37be486e6e9c28667ad589dba754d893468e79b0f408ec09e2fbe4441bd01025ace7baa8771ce735de33cfc2278f8bac3b3785248bd8c22dcae269abc8775ffa3601457bd416ff999e09eb8a087a7385a2826c86964333bb60f589687ee4b6186052eb2707ddc435287132da44c51d5cf7af8f30c81f72ff1eaf4d22b73fbe24675c295cb50707f36d3d9417f11e270bada191d641f2f4bc13c6fd5b80985dcaaa77a5ab6da880a5e4e310efc3365afdb6b4f3cfa199fda9d20462b6112a8ecb7058ecbc3a09cd75bc810d24d6f3aad5a4407a7a5a0230a4a094f9bf40cf2361cb741a36a0198cdb5a0a2e81064677aa43e4e150c0e2590ee1e04623034b44baa7a56d1ac626c2e21afad7efca690342a18f802c14e1f7b4edc74c30938ba2275a998457992dcd072ae7894a26a6e777bf827ca10f32136449b793e3111e60fcaaf549d46bfd833b33d1d78457209f2623d2419665fad1b28d0da552b2b1c714aa0dd068d994980402e1e4b8fd6b5b068d41d5fe6bd9e03e0af0f02d09d0bfb8de0b97d1e5c8cd352a226f8978896f7912de1fb868c981e0a6e17c8d10632e77073b8a711278827f1c85c3d5c20c767128d0a5736286889b418bfb172ff12d0b6151d343c2ab276b4667846dce8f30929e0f8774457472bab3ef8ac8f21d8bf6b9ffd080ddf046e906e5c5c8856a786ab19332c386d4c834c314022ccc047b1beba016b53faca61db71c95c9037459ab54e204effcbc165686e521378a321bd0bdf34d8796a81b456459a879b11e3110651575b8deb1121b93b72fc2f6dfa433a506d61da5fbe9da6445cd4a02673ba6774c1d81fbb1cf099a549ab1be8cc8d8e310b6cbc8b01880f753143c71a26d9fa30227ad59ced491430a481a6ecb0848ca0e91ac37fe7b31cb4f14e537766babc87c9a6a30cb6e27d76160a249a8473e6dc43df656c1644e4966b3bbd02ccb374c585a66968c686037108d8ed61338be92d210da60e2ccfaff7ef0aa9787ead92a3fa663dcff5e3526cc2375d6a867033c276f558256d61a0ade8fe40a8a71e3795eddb6ccf7bdf4960fa3c1aea2ffbb6150375736c4396359a6bd7b26fa7ad3720066697d5e92bc9b60ab56c393a134e1a383bb20e3bd7c3c4c512e08e89695b23bb11d21477a518f62c0cc9bf79dc35352a786d3cd92619da10186483a77c25f35b0fd6678c5dbfede953b47a5316df0d848f707fb4822c89cc10325651f24f693db08e77898e8369582b1e5eb674c371858281ff9d074d43f92bafbb1d5cf38bfb2b688364189ee8018127d4259f4774c8fb503e864ff1fad05bae3c4267305230902bed8a57980b6aaebabe78c1e57fc4deb52c8b554d7c0a453aba4a9924d299d58df087b0de5b42ef1b2f2bf3e9896bf96366c0db1313a23e2b4b868bee44a564102217a16889dee9e370965297a763a269e03be060ba2fa792da10d660a477adcb038e7139cf539f534bc21362cd90382ea9c5c46a43370d219a4d56bb4dbef1d65161fc939a62b5e542c2fadf20b446993695163a3d4d111b09d477a703fc852a6305fe7595c98814fd0feef42b6be4d021951f87b412729f2adcf46532251de7c4a8919615b2260c16beaa2915305f78dc23a3cbddeff721f72ed905d73978440986634077c9c72568884ee313e8d43fcb0159796e435aff9730b0e9df161c8d98afc03ca21b0bcb5f9296d2bcdae082f021914bc65f829dc497834d84b13d667c04998aa1d6821e087780f8a3b453fcaaa84bd697a09bab16ee8218c111171b81086ff675414f7bd1b43ba88e0e2cb5197a88214d46f5708f61f85589a6229b571a588742b10f10f72db7f42c5f2c2faa621806f0c4352fa448a60c8f0f87b1b653224cb24efdbd9e4e40c1e976f5f066e1ca2b93da35aee3e5a478feab80da01d01cbbf0965d520e0536ef1c18221a79ea1a08e7203b7bd2e0a247c1164d77ae0b8be5693e100d4cc75530ab59925c80bf72b0dafcccf94b7708b9edf1827bfa3964ff01ef21e233e69253e1a46b00596c31da603257876e4abf053134a8feb4a2b46c8bb82368c3ebf8168db1e3422afb8cf97b633ded64bced8ee88c54bf82efd04c1652f828c2b4588ebc837edaad1f89c25e16e588eac28e3ef11743c161f40fd627d3abc6ef582904d48b1a4d08e00dd11bcf0effad1fdcb974632bfb4fedc8808ed4671ae62727fa7dd39582ab2c29cb49e226227b4d009fb95263c0ceca19c244c3daee10a6bc0781189942db7fe8a12d080e49c1117819bbce297188e5080e305e88720c4a2932cb1cc113c6bbb5d779b8d1599fdef36dc93339a02561e3dcfafb5db2ad70a0d904b823fd4b8845e886e75777db6ebe36d8a6b59515399d7504d41f7400235899bcaf0277860f3aaa9429a1c0379c540697076e42c5f05815709a23522da767f6cc9385830e022b7a2381a21997cc94b07530cef8cb837f6924aa1688d6eeb45e4d443095ebaa208be0c42a305ce05020653dfefeff2eef4c2e2b0ca722b58d7dafa98e243b7e87b275f7b390ccc64663130ea1ab063e63f500233c7178b88f4a16193a400a3e791dd75888c4dcb91ea6093f788405880e6860bdaaf67a2343c28421fad2c0ce4844dbc66d08fcb1057d7f6099df9171527e116467aa9593cac46a913cc1baabda73b0de79360a7298be71d80ec9e2b906c59716584514107845b260bbb7e23c015b2c4641a1ee0b1841d7ae527a177780c019c7f353d277bc84d2ec7307968dfd3cbb60d5a86e97cd9feb47497b8a51f2b2eb802eba3fda5db8cb1eceb623dcb422da71d0ab39ed0935d3c4ad7ffb5cca119ce6467e3a820bdbb193706d289d105b47728f27ab1e159313aa82bdbd57613dc7763543724d00578e8c6078161ad1b41766346b2367dca25874d06fed0a1a0a84e4f8f0011f0ac9e3eb6d50a8acb91c335bb9df0d04e740a234f4bacc85c0bf09e95bf3e5ba275b2d49812f60847097c721bc9ed496a7cfe05419b8145bc959d2fcc5c278b0c615c21c65ae47eedb04df2416295c1e4a8651967042346d0b00f199048fc4e77b13d23829a778c1bd3ddfb6572e791265cb193237f11eb0cc2f658faeae55cd98fb7da93ebc304aad5941c4963cf532f99f2d6b03df490574423ec792389d8f22e25fae4a9b0145b699bd08f890bcf8e9124f467850d692edb48d84a262a1c2857a7cf89b9c5188643f9d2ad5cae03eb288c46dea0e0212f2aff05b7ee59286a633c4e02470a48433596ad75ca0c9c60c367bb4d3c37c81a8513a233609f10e2f044179470937402fd20691a4081942ffdc0c21d47ad4c3f2b601fcd00c49a247e5b09dbd29e177d8fbe50c81ce415bd37234269f708fcaeb036b84ee933bd633721940608658c175a06abbcce33f5d5084b406ab5d09bada0b43c7cd8612b0988f12be04242078ab7a3dc413a0a0f570df4810f1281b4fa025de893ce0aa2fb03a30af4e2e28ecdf8a0323e70bb30b5ec30fb478cada3b51b61ad922c7426823d735f1eab04f44025b1aa8fd31ca1d517c1dd967a2ac391d49c3f0096b2924c78edb19c2617e2d72bfa9280af44846b1a44af042498ec8b2acb483a7d9135a698bdd92358b68cff8a2fb30c34ac911ecb3cb903c096cdb94632c142e1dd08b71aed5f4b367381c73e2349297e352f449007781de24db1954b58f67b82388610557323913924382c3792cbe0475926c1107e4cdd715120066995c388996d51bf815b62c368dbfb0df8cf39bf4a0f46498b2f9cca614bf3cbfd3e4c525b1da05e1c906f6a8bca14d5be0642a84a5f7a0d36d2814bbab7f3abe56c2eef5cc85c299604bd437850fa53bcf88c2d05fd4de38401900049b2d7713e2fcd13964a07cd5f208e853532b023ae0028943c9c2ba93354b98d4d70150c46f35b9f08d2245b036a13d046498d06c40bec657dd0a81bd44408ecd80df42569f42836daa6ff31f51a6298f13aa06b6de5228a269bcad354d61a5f53ec0d9de2823e4003f4604376e84e4498a876767d48761ad9c009973bf1a9f76da900ecdef6465ba178024ce9ca6e9379e62af48bc0a6d150a256c7b236067f9d67dc8a05e4e77f9fa074c8541ec5e30d9bc86e8a4da31c4f796819e02d676f17e8d6538697c9b3f9b1587731e7e4182750467b54512ac0d0fc773ffdc2aaca1f8e7aa7dfd1de82898af4ac2ec7fef0f00eb362ccf5eb6b54311d607986737eac52a7772c86d01a8d497595dda3984f52e091e1e23c6835f7880a568cf1434f0d7aa85b211a64316071388beacb8d7294bf2ea3fe21e30074c6ea469fa9d20d4565c919a37b87b3323754dcaa5dc63d226a33f68b06f40156d21faae9e44806cb18da9568366309e3ff8c0e343b336101027c48dfb3b764518d09f208698c80a22dd002043254bd444d737dfc8d2607187968ca16f475cf27a25b903835ad56b8a0a41406fd9113f40ba5b8620803ac0dde5570870e44840764366e36de58ecf00e67846687a8081740e5063cdce9a7eb0497939e30db7bb6c8cf281f4f58c37f2f9f8c12ca8f2aa5eb645dc340dc4379cccf5f5d95a9bdddc5e4a2d582216a9eccdc03caf3caa8f4caf3710ae34e7fa00b2f0ea3d7fc8c8e5e80c0eba31bf560be08fba38be9dfad1ee359d119c6aedfd6f652bd80e041949aecc53af6727da4e8a7b3c27e279d5f5653de6558196d2eab1fa7cdea39d220232378ee4aa78a56fb31eb4e7caac1dc4ca43be3896275a0f1bb803e22c228ad272a2b3996f129920037a42171dec0d48275304e8a9852a8d66b5b1e9a8f9471d6c90bdbc2be4ce4a573c8ba209ea8023c4f88a6c6e7a14d7f9446e480a842bd305062b446fd9fc69bc52c326ec8a77b36ae37bb44af71234f90a44faf6f8d4dcc5babad3ab4de19acb157ac5be506951718d6b716511fbd2d48926605b4d6a51791a18d41e3852e8a48c6ef7e3bb3ee486f4a612a526c10145adf64694e1eab3b933c945c540077008310a4f9815682cd4db35c94ecb4527e958742e00fc00cda7970e71c630d0fb822dbd25f7091c0075622d0653639ecef2f2db698916906ca62203342f7a29403eef35e3d1e5851bc743ddfb961a917ebeaedbd9761bae12cd18dd157c2a025f95e18deccedc2ebef6cb1b139d91afcd20d940dccb76e70138fd7a4d150739b363d53491ddc646ee23f0f210087cd3e95d17c6b4121afc91717286ab53ad29d07adda28a9bb4d216d6f438295d835b06e06e4ca5cff7a0ecb111022fa5ba81e813e5ab3d9a29838da03bfe21d40da4318935b8cd9eb21c51d78ed81d5fa30cd3ea9959df29ba94ee5b92a9c1afa20e6fd66fc695857a92426c5b175387df444b9e80d2082959e2609c84ccb0f90912e92a11eff44d0f8b0159348649fc7d1e404366002805f35b4e356c572fa654c73506e0b42cf5db92bad3e18f9d69aad99074e7059b15c2f5d8645a540158e725599788101932c86eea0c8256323a4d2defb42c8fb301b2bfe75f08f9e4a81c69a04c2b18860178188af92d438bab2cd6aa219be16ffce7fe2156a02fd184c39e4716c4cf9e3e28df0f81bbd4001d26ee7fbe0bb2a33ac3c374c7ee4217ed4a4e2d19f8d407f5ac94d234d6d9f0fd58df7aacd4dd0c66c748acb2111a7edef167d532430095124783d181116b5bdb3353476ead38a8c946c7ef5a1bde3e9b8c28a0c0b402bfe1ca708d3f9c4fad7497327bedb1201be1f9bd19f098fbaddf823d2e7f4419d5657757babfdc5ef442f37540d439f474f69ec100ae29d6e2b2ac1cf117cd118f5f3931bdd8a25468b392d35dfa755cdd042d7fb3cf7870b2ce6edbe241e87877ea7368167cdcad8137daf2412aadad24560ed60fd242abcd67d9249bb0ddd0e7a4a804a98368833b443e097c1651859f5950f8678375c9470e93465f3306807c74dbc386872805f480ba4131e29e15251f2b60331628b7c548980ffd916683ade0faee676ef5741aba8fd6730da1a484c25b158a43a6190e6962c155478a471ee67aa9b14597ab77f8db4d2136b44b0e8ad015a9800cf5651b62dcd436e0e9f08d38dbd657023ca50b123a38c7d829c4fac955066e17cf237279b31200ba8e0ebc3b6ab6d29fb6b601503e3989d906543b5c04242c2976c027196704dd959601d367cb12dac6f17a679c62d9e0dd18bccdb218c24f8aaa62340378288422b15d11f24579bd824b6db6c7824b61d5d422c91967502b04997bd25c4c860f116c4014d87a507a4ea66458cd729758dabc0ea0e62a048429cdcc7006a67153cc6b6c4f7492608ffe02540b4beeb00f21b19f8fb743d4257c45c2ebc458f6ac398fe50c9cd82b65aa18b8a84e66c7fc94fe128c69e87c451319a305aa31cfd3306f1a94fa4e0792d473a7a978605484b0b065e7cd236ec30be56a4f486cebb38f6f306f6089ace1e60216bbc3f7ea68b7d0de7aa7a0e712174196e1409cf955b5d5e31d2a8e73060eb13641fd90d6e418a66953e5dd40bceb4c01f617134e1b8779d05bc4d488ebae44417ffb262fda3ba5d289504f89f4f09f18b1824cf4a7276b1eb396d0b3949e0178356ad0acf2b352296171e12345f9f734355d6fa97a680cd92ef24f531d87165bb6e343fe0bf91f9b38922e0d2347207b2e552aa1ca8be24280189a4bf8a4a781ce32aca183c179f872088094a7fe5b8757d93ca490efb8caa82b54f8029d950093fa4a83c580962a3fac37263a82072bc0e2dbe7a9f5c456e0bb93d25811f554e4395cfef0c6815b826b09befa1f9a3a4dc14f820da9854d4c8434a0ef3895700e4d54ac99678a1266450a295b20245376cfa705868a59d87cc5fc1138c9377451098556e457d3031c859411cc98ac9c60aec386f49976aae234b349f4068b5ddbe933dba7699917749ad8c94228b1499e5c9495ea1948fa2657fdf67d47036fc3cf5403f9007c5a440d5dc8e3a1bde8feca7a004a0356265b219bdeb103108c2993cda6e3165c08bdc241595541f492c501608c832c03a9e595dfbaa0b7bdef2d8b2b508353a433853498d9744bd54542467d899a91b51744f3eba0bfc0081e4d896cdb13bd04d8d8fe678b3d86ee360884acb03eef83365525e1f690c1c7d1034f1bb6774c077cf3074a6bc3f6547087a5a075342ffa3213d7762e56187ae25273e8cf0ac720f7475a63b5769628eff39ac8ee7205b523bd59d2913ed8bdad54e58699d478358e3e4a63ae43b794ef64138251332ecf021b30ca5500e2514a1148fdef1d87133da883467caa0634af299a22e654d5c19a5e2c2848d948f9d61d710878002e26b211564434e70a6daafaed638e9f8a7b390aaeb54e12508ebde2fcca62ec14c24cd76365954d3ec10dc3c5f7a92b4d856c955c5bff4a71b5f6a2473e6c04107f167e33dd3ab875f031a2ceb137b6756b59b00149cc36c7698cc8ccc2532966cbf80ce540491e0d244f99c6abec852e8f0fa1e37364977febe38f6dfb6153345ea59cc3f5dd582183a3dfa3021274244bf843dbe601fc9b2cacf20e5b04eeebc6e6bdce2663e6a49b46c8bf213a81823d324a235f80155e2209854bd30ead16d586c127251b4ab7cfc29bf7cd2bf2905696cdb63ce72140bf3067fba3ea224b99202f3764a9ea10107352281a05a11c6776e3394f11b3ec1210a09fea6f11d43daea6e88e5693f860d7c6909bf855509f68208812387f4968c33d73c0649497d8acff3227e88a2e1fb09b617db7ef96b514f42b3cfe360da091fce933753e8aad50ac536dcb5c09fd8c0a15001b08f058a29a90003ac16f5634665dc91cb9c5f73043776c499744468485ce78ef015af0164169aa7010cd1cff34066f14137216935cb966fd191b50a85b0e80bb126eb95fe4b3baa17fad47cc2487a74c0798b25c908ad18798372533a7f0a4e12847245ba24a7aef017dda378a73dc2f45d8b6d22c9d554b552cb492344fbe351bef88f5a1140a82d599a111e97f120456d8370af2a15cfb12a7874d021884c8898be8dd9b1d05d07dc5254a74b7d6dc591837b54cda1348f54219350e724b25f1f683f5835ec00d17e3837909839eedabd00c5c61a8e49c440fa1d46a85be41e5e43e017dbb4eacede009c9d095d687ec6fed54e1f6ecd16425ad400e04db4f3e3232c1cef4b76a12d4fc06a4726e31f3e0eee5d9a6433331366572f259180efd06ff32a4883f41866d3a4d3b1411c1315b537556c74c51889c441c18668a24ca00bc521735e36abc18c845ddc6f331666ba38c9aa5e35c4b723b877ffcc2d130042f390f07ebbb2641f1011bd071222cd039596b68f067cd8bdfee2d6460dec42d7be70630e8a88b1a16c14436a157f3b2d5f1a12e0d6c987c208ca40c6cf2dc71d50139b873d31d23c8dec114ae7838c70db5220ff41ae7ade201411ce89c5ce5d741e602824fe4ab4c8993b8bb97735e30027add349a9bfc29046013a587f5d72b2022b8385e99250e5d5876e5c110ab1550b83f38702fb2bbb237c8bd3635d64404cdb3c77bc64e799a3ac53a0a44cb9a11b08a460b36e80b8ea9750b86f58d24eb4fe70e1e2dec79ef6e8b7a3313990e263cc256f630722660f23d8bfbd4d09c2d3d019d35d480d070f3ca4a80d4ef51acb0ce8a52e2a03a43956f0f661c60f0d6eac50ad6b2fc99520e82456eb93b8dd86da19d25d1520cf95301888115752c1f4aaa042be722d683218d8e389066ed617e34e678be0a2dbf3fff7a2e8e6551629d6a33113ac057a81e1c4471bfbe359cabc8d56c97d55ac7e25978221c3792302ec48374667edd5eaccc246ff9476a906a24f81cd295e26a07ef93cc12640c008c43fcfd8b2fa4f5aa84629ac34e1eb44af8565adf0bafe76f3cccb3ca5c7616377e6ab8ad457c268c1378bf5a2e00d387dbdb6b1d7eaab600cf380485a6ce666a6686016c699e5b89cdb41cd643ac1d3a46396863f0605988908cbff451a342a5fd4876c051d3e5c54b20ec00230d1cfdc3e854d229fdbde02f6e7c951011b0c5f6948e309e6a02ac963f1ee3184aa45203aa5904a903ff3fe2bbf1758514edcacf0f54edbd61746df9490e7471157777ab05f26649588a4e51988291a69d621bb48d2d600d80e3c595ea63e47929b940f894100afe65c88f4179b05161560f2720b0a4420f84bba7a3c061533b7bf2922f1961d87fcd36b037ee9af0e84f22c542cddcecefa984acf62741ba7fc973f3c0e285c3622e09b544e6c797707f1ec44755290e5af69f9ce397ae8138248598ffd7c0ccb61533a2fd1ee81f57ed45bc30a6e6771f733871dd29056e892ce21e1a3b8f865bd97bdfb1461d8115f9406adcb57203e6b48fbb9d07cd77c0d8a976d274aa7a6e012c8fd2ca4714619dfa8b934738a5e2a2a1ad54eddbb27723bfcf2ac863cb489faeba0544aec750e0cbdb21ffd6548d88286a4ec73bc32aabe480889753e49372b2d393324b7268b643b78ab7852ce2b6c18227d48ad8efcb2f6ac5e98393e1277d0ca4b44a7cc5806ac902f916fe79155653ed232929d18df51d0c1a3c0bb0736129d353cf4d296bc47a999fe493691ce68c2c47caf47a108df8bf3c9193032ec665eb7502764e8cfaa3943037581aa06031b9a8a0127e80daa6cc9f528b0fef78aebac0a9a6cc98ea3524ec25c4030995d0dfc2358dfcdc96f1c29c8c50bc780c25e6da1dc1dae1b7e0cf34d197945425a544b07a370c0200faf967c1d934b3ee48a46f4885572e5ae74780c8e53ecc4eb740797652681a1fdd0c30162bcefb60415ef589dda24fd8410b09b372d1f0c213f6038b79ba8c28d422d9c6d8faa5f8d9eaf01496db6c881e5124011451e477a6bbb7b6934c608f6340b932bd3ad6665b0134d73764e8c1dfd560e8eba58c40ad577e081aae92a0f2a059c161bb588236f22100b939483fc1b630c8d5db33e504d6fb70c3d044631f60e32c7c104e52e145376366a7dffb6ca3c1abbb7a5b833a6373579485b9f529350691ac7f37997eadfa409b6038cc631795b92e145460ce8a1d580e982710639d533f6fa876d738ed6195d1f2b22737bde098b2799c160db9e4246b56dd002a5801281a780b447287f9c52acfcd79cff1eb85385c894623821aae44ec819d425d00b346d8a45bf4d98eb2c81f9a27af9783f85e72ea1f20639c9a16973acf72afa8a8efaa9e3914760d752a5200b183a06fe43d3144eb3b336c55ca2243e146647b3b06d28abdf3b9a385f5e310285e4a60d4145426b96d575e46223fa46fe359a4ce468ff5facde2c9c16adcd90578b188dd3dec0fd8fdd86c2df637a5314cd6fd6bfa156de9037b30e22e2a05ee8ca2c63cb78ba3a5a343c4142cb69dc547dfab77ed61697daef9e6a2c3c21e329924ba1078aa4b80476d153715847795f7631257e4d6db72f96ac02e33169591f68f66710d3fbd57a09476f4beabbdd3e8c7205e17fcd581b39435664484ad38f3dcc3a0e80769bd2aec7343406e71b04a3de25f866d1a1987e7d0c7afb1645b3d23e63a0959efd6c5e3276abcdb5e3fd09c07b61aab97dc6187de1415cd2d84728f32931f42ec11cd1021f67ee020cd2e02dcdf0388dc3352c28efc79947af2f550d82399515d4edf3fc1ed43d785fd6800d81db0524fce805a03bab82dfd3b2eebe254f608e678c3c0d064f34d0fb1c685ba8c3576a90aa51ad2cf2a8638dd370cb057d08f47be12454b0214f8e2179fd3ba9166d852a719b96fec411fec1087a6595addbb6facac4999e70c0aaf7ccb69ea3cb0091861d64f711f84f95cf71be4e98c34451f7db2cbcbc85c1e5100c51ba5bf1e79eddadba6437cb0c04f442e9b788f0652bbc3d492e73ec5f6ff6a18183e8f6b17d57f3c41f9ce4b691ad049868b6b0d823d8d0e157515b275a93e067a74299c48c36958d2532fae5156784a23482a15af1c29db0e608c2081c8b798109c92048601aa92626be321cbbb94e880272bf63a238caa5264afaa0ba5080acf042b4027a0badd66abcd000bb6ad55eea251eb232c8af478627bf435e7b18e810c6174b7260aa853daaa44a678e0a5e0cf276df0237b548ee311c590ba557ca1e75afc6d787df94996f6f87339523575f53447865765aefb4de37572878ee0927ebec51676e0a389c1524e53c832b0045b8194143a8fa32c35b1c747346cc763e70d8b681b8dd4640fe5922309adf8b8fddf3af88958ed73b69e4606435752626348bdd416bdb50a19e1d8954d9a73bf96a38d77daf5ccf121acb467c38f5585a612b27789175a991b9016f501c4052c31ee759454b909269a200c806a6c9c579baef0ee727275d9921109b241f72515903311d15cabb1b935936f5cde2cae6ceecbc55682a03bac22fda8dcb5c7fbbc944f50b1194b843d8188b10b6b9cfa7e581fde47ddbf53a9bbc4af4c505de0668c0ce46ff4a6b4ecde1da495a3134b8f1424e1f611e442e34216f0d8689560c238f6273a86b62cb9f727abf105b82d3aba07bed162311fca1036f87156a68b8d16488d3ebafe8ab120ac1d634434bf2be5cc7d631a46f95a662ef08cc1a8122075032dc79b59fa268626655006e2547d146886543f417dc5ebddab24e52435ccbf67a534df2da393333efcf030424b3394e97d160c4c6bcd4d77d6decd9104c80dfc76daccbc436e714b5fb773d52d59fd92e8389f23dcb6f741901eb223ed810164c313b0c1ca21495f8b5219a0cd3261acd610dee45683080023fd4612c2af5993204b1ba912abb8290f3805a945151a9671ebaa99a0841e972474997157fe4cad90cd988e1776b6f8d19a46c11d842d2766ad125c370511a5ba697ee685d10fd9f59bed596bfe2d699d1e2672a49973b572a08a176b8d63ac350b3527fe832a7f5faad128b0c11fd771192effaa9e034279399fe6915316f4f32bb1eb85cdc07c9e47dcdfff64515b64bcb1288f574aaa1d4f14b36b74704ad4e330c5c1585676cd02b0373e9544f813301e3c58b93333474d1154cdfb988ed77b9a1e21faf2ed5c2a7511db01970aa31c50a93cd715e0863cac4e840e41ecf64b66e96898767a3d6be8880664cd128f808f632752687b0c79c596c6f6a6a263333f0f1c3010531c65a7434af131e7ca7b211c2ed368a283e3cb4af54660521508614866729188c023e7e31470ee95943a02dc07f09c1b9025d9bc2bdcf96d681b9c3d0f93a35fe9234e215274ea6a7abb993ec58a8d7807d016c34c9ebbe96a3a50dc35ea5a0ad864d9f3e62c9d3ac5b84118b10ea76f3b2ef609cbceb88b442d0c4934a0c31fde387735be0824969bf7debc6a708b129089e0c15d4132f4d5ce4fa0daac23f99428ee71d6de9ab44ae58c09dbda715db31fba1fa44663e5034ea702add0982660e973de35c6967b875a2f1e4316e615cc18fd30082a21551e5e38c40c8b30017c46c65266a5a2b107c2b28c6913433ef05ae4c10dc9da0449c353317146d7a6e0485d541199848644b168c75e420b82c45b846f7a8194263d7237d4e82ad132543413f9291889c7155b2a15c46624e327f0fe73b11fc77b1142db61ddeae433e84e284c910055c515bfcf449843a0404ce3c6beed8a52dfc78bc08820c2324e632c0aa66ccad95045ad797f26919b04041b33e4cb91a8e6783a704d08ef81e80d3c5689dbecc03452f491ac6128b75275ecb40a353efc20d0e46db4812a76ef55ad636f8e5821b2b6ad80004a776e05d2cdace2d521e58c088da7ebfafba069dfa7544c92cd71d14b9329f25eaeea456622c8aa49d4927e9ab7f85f64245a031f89a53ef5d691f342b11b7e34ffc9b6deb11ba091fee13099a6c664ef0e375bdde3f6dbb51a2464b075945d699522ba4199ff44fa4f61879954d0d1a82815c078bf392c58379c6c9f4bcaaaa327b21ab8c98d1f1994b4539d64bc2b908088b9d21504684df6c75eea030978dcfdd79369620cb3acda1f6f5a476b2cdf228e3276a3427d705d916c3579b01686a964e2fc81fd38d0310781b74e618d0f262c0a9b225b80834395a7f171bafcf597f5345350cc826f43501f86b8695f5290eae1feea2d2553f4b2dd7477a88c9303728fca03eb43fa866b3a2057497a4398f9535bcb745b88915d2a1dc8495c5003c3f5dbe46a6d2e7eeefba275a304b8097ae69caa413e2c458e052e343f17b29f73ba8daba3888e864d6dba04ddcf6b6c382432ce8fab7a027cb28766302203830fdd5c37069281e2420cd0276c14c33cf00aaf3dd1bc3d8fc2576d1aed6231185ecad3fefcc291fc49b8b3e589f9615f6c1a188ae539ae88a721180fa5a73f076e2c9d61e4a433e5d209ee6b25584a95a7df11668064b08f7348343c3babe7a1491020d3d3a6711043e48eca40754568503272acca70a58dff4c910cf53b3dc007c73f9b0d1060b3c39b73823a04c3d29c6c0c42ecf0ad60a5f54b76b792f446e8d52e8f6f4fed7ecd9c19a74f557adc4f0c9b8fa4201bbd7f49c27a83a349c7654b624849aacdfcb6622ff14f19507e6f4370f67ea055d6d9d7c50a277dc4f30b4dfca6b22ebc606ba581e172b05206012d059a987054ecdfb53f73e726aae16c1a62a1ec48b31d0b242fd298208c3847b544950cec38a58cfafba2f44b8f5c63497ea79fb34c2498e2ad8b1c643a0255bd6d9d4aa57cb13475f870cb6051b0019c1b2f57fd720abd6056ce8f1733df6e386931ceeaaf4052ffdffe24a998f185821ad9cc4f82851d21c7610c21744081713e6b02c03f5abbe98b2d9b8315ff2117ee2c31d4eeca39a5c71ffa2934e27c6cbec9b97304f7c44b003efe88c9ccc62d6bcb3c569686b80d8a602818ceca8f49d0638cdb5045dc86b602796ab91a6692a0b8d4e48b9f6fe1cfddd2081ebe2067025f48d68fcdf86daa6bfd96ad03a0f6127f6a8aaa8f14fee3183b22e0cd21e6fc0a32f16d1c19d73a895b6a4d730a1a04c5689d3b5cdc9e94bc46b2c3adf06fec3310419d51c6f692c2af5e33e9c8d6e94071a89bc8388335cec9e0a22f6fe1e76330d25c946682c6cfc5cead6719a84db0ebf2663f5db611e6e7175dc447f41cbf81877c9722f1de0e85e2429b89520da8bde7b11050e0e1da643f5f68c98a5c0110fc90467c09125ff0ed3dc243a06d8214cd74ea9d7566b1d3cd1d6b88c3081c6d18f61e37cbb5a8fd91038c2f559a5825ee46cd666ab5bd32fbcca00fb9b1cbdab3550a012a321d7f05bf3f99c743ff3726bd29cab14b4d27eaa256341a9e56a4412164d3915961ad080b494af051113467c62af4135bdeab10d9d037f626f4b6d9c34aefc3d51d028bb0c91db4483b5ea12027b60b5597a26c8cdffeeb307b53fce56005ba086f769f954beb9ca100fc036117b932a92a4fb25c2ba08b1373edb29b68c3369b6e7ec81a9a772a22dd40d8ce96ec79c4a9e53a581e9c06d5ad15f39514a05768c5a135913fbad60524daba84fa41f04a94b2bacd120095f08ba908916e2eaf1c8dee6372ef2cf41d1b3aed719722ac58c69a711b2d7b4d858c415203834226a9a99cc684ea0efcadac4ac0b6a87b076d6b11e2b65aca01f3161cedd5915844a56cb21510210520c7a6f338176d8d95cae4a8f02c29caaf5b82fe7265dfc58962a658c1ffcd87d7f908c808df24695236f7ab409d477b40f9bc767fd4ff152d3956815c6b6e77a2ca23f8201df814fbaee2dda069eceb06f60fb700a29bfd025d1614afbf2723ea3069bb3d0cc9c6086ebe82027d65ef9b959e92a9be4b73dc1f88ba729983ce905094c05c5f9c5f65ac835fce08d31b6e7040753224263be2f79737bca8dc1fdd003a73917ccda86b356968cc933ba8e98092c27cc5c44b5a71127933e4f0cdd1ab48545c496daea1cb99523e51e5552b89910c695ea8e3bbcf20b208611d9971b697a5152af1f27cbb154d2b9c2f4a695927273681f9de48e65de147e980e14dd2e65427ad56e0fc08808a55ab173c9ee2660d74f1112502bb91c3b1c66faa40502b1b1ab0bcdd6cdd95624accd452c94d9fd6e31df98993cdffe2b112dc943526d23a975904d9167895209bb6bb5e22baec174135df1950834b58fe28c0a7542ddf6b84fc770f3f82123f2e44546a3edb91d4a58c4c949334d1179abc8c63f96d9c9b65a27a08e47190915ead20f5479b42f7c3735a5d4147980104dbf0eb1d55d3ac3ddaa0e32c5c9850782b81419af08d6b8751cffe08326ea880be6ab99b3e2f0f40b8b2606210bbd8d22d435d7f169021b33838e741047e65109abf92c38f14581826adf30a805c5528d225d72d6cd3dd9779bc8290e4871aac9893d01c070f4962235017d3b6726a7f7acdd6ab805eb70977be3bd4d09ff2d0234f67371ac548ca9713b0b4b8e21a6bcc98b1a95b068633fb8dea428c709bc0fa6fab7aed826b02b4fd1cfded0090cb18b7a3ee63b3144bd9a0d2130b2bef7033f2559c9fb97e47281e95a50e2a2823f4c421ffafaa7975e8f3eb883bcab3e41b8f90784601b0c5c8311c09b0092f6e25ef5df56a910481fd8ef9dd2e21eb35282ba3f5092c07bae3f71d467d951587d9f6285f61c1d913b9d674c83d68ead2f6e3a8be9b775ce8cb042514a1e3f50024bf2f447e0258282a79203204e90dda6e586c04dd64b9784051e0350ac6f592f3567b3ade8861ec443d590e4577c372c2ea1c0f975b787e1965683f94647e5be88eafe7496263af974721e3fe1046237631694f13990dabe65c9b0e7bd907364224616ac763e898edfb6a2269683256936241d90a9bf39fbde7123c9ca42fd14ec8b2731f8ccd1df915caae6a447649e1bf090e0396b4db871898d17ee52fdd4101460d64e8d2e434ecb1910888304997ad3964180172b0813c30f337d4ea547658d2cba291f4e4092ec331fe5f99124473818c258072390c8d0279eecf2e62e76ea14e2f876be690f2c60c3ae9e907a0789038dc6af2dd3825747de3cb902e2cd77f050571f360a8304c27b39cd8dbcef43a0f64c1bec5ec997df7ec087a93dcb2ac9156dda9cf4cce32edbe40c08ad3ed7e7c5fd79a5743ac12a50867670f0e4d8e42a711aaffd8ee4b050e42cfd292e178a42474b8119972674339e5617260e1340f0e12a72a0a9279ef398fb4a120247387eab52f8564f37b7c481e9577b3a28dc18142536891977a20d23545b56036b50f09f959c318b5ccc7010b5c8a2d842d94adbfbd9861450000782e573e409da59b1b65e129b32f7b18e49e4ed4b552979ed2f42e2ca0928e9759718644d0e2364d1ea680c52d4a143e3ea4723f4733891a51c94c1e198651c7a99da250e4c0a68eecd9b98804cb930ad2eacf01ae7c2044512c264e9135c0ac8749a414b4d33b9fd554fee07218111544f3ae3c876c450007fe1f0f42abef901b53e24cab3bdd0d4c5c4f47cb205266c58813dcfeb84e352da46ffe793d66a758e2f97e92ddb64b43a088270a424f449246f3cd3d9468fc719755b4fc630a94b9ff4e9a14491c8bcfcb32cc96584b393768186d128999691b9b42a230e8dcadaef8cff1a0f0fddeac8f6c7d2959eac0bfd688ceb821cf3f5cb44cedc2375f859053758ebdfcfaf86df36d2174918b6d64444fd5ff7c343b34c1a44067d14efb36ff88acffe3c8bc3e40eb886c902dc0b3444890bd007be7239adc360b1d475384df9de4fcc2f2de39a7f0c06c6455a9f30fa460d915494387a01c31468cee67f28a066ba37f2f860a0101f27e1f8e87dccf2832802f76f7a44c5de0918b49a151ecb3156a0192b6e9b05532896eeb06777226608d1ef20171d02c4ccfa404b41f8be7466858adbb1b321756aa52a06f8ce5cd0dc281625f8caab50640eaf4b4bd0b23d54d244b3d832528947a82133beb49661d68a82d8e106a3ba927f23b715d992e5a750cb1c4287bf7bec718010a176b2dc09d3a91e26cb3fb5840763cf066209af66cf968635358361a92541a3df3fdcc7bca3f5a43a7137f9d247825f6ab28081f57957fcacf446254c8e76d1296733212215b88f65002371d908567f4c30972aca3eaef7c14e939252ab8591fc0d8c349aadcbbccfb12ec7f9648354dd40eadb2ba900fce6e2f26c8d1182589785443ae290d6f0b4580a094085eae35d96ad3e505aa6566d1d5064c52f8750ae30feae2177787c80d77d48cfd0622a4a18ad2515aea5d01899c9ccadf526649a4fbfc8382b76ef283522979332321328deb10bee4cfa7ac1bcf749794142fa3380b1946611a0cc576fe5c716a8e4a05b21a174e812bcaccd9a338299b780f52a90974a52ecb6187266537f5be32ae65bb66526a0b79e1c5dc971d8d45b439c962b6909efd2fd673f0476a6823c7275bb68879447c4a6568db0830bb2dde1da87959310b881c4795e4621a5e38201c021581ede769662396def245ffeeb53fa7382c229315e9faba9c2bc5fa315ac11dc97bf870086d95a0855d95e28e736dfc1b348c969e38b9e06f014ba0413ac561e244e76cd6679327b7bb84d08c37a8dfc75d1f4beb6d884b9eb91549c68b7a11cc32c9600e113b56a25dbe35bb865d0218138c12a135a403b68084927d3722b18da40bd7405c257e0b5e0d802ce0b482f08c3804f0cc2ec09e737e3440ce7936bc032824d86ecc498bc7cc7b9d8c5c7a70180dd81122d02652c5bbccb9e0d3ca7987b6e2f1218d2195f56a457bdb8c30be02aec2ae2bb09c4ac1e37b461f69409efe4a9aa10e8eb893bfb283e4db824e86bf0def5c03311e2cd4a366e7a40f3ef1193e18b01aa53a9da62644514335170527f4b2fbcd78b527bdc35bf0683629450eb970a6ba75183c210efac328cf50e68702cc7a95c80a94e8221b3c7c17bbcde5a76cb924c09a1f1a3cfbe72e73298bfad3783dfff1a61a0d8ee381cd3116f87c0097453ad451fcaf609047ac66b1bcf66b260a6aec4022006ac36f89a810182ad72d007f01f97e678cb566c0d92a068adb13cea4d7363673ba37a9922177e58bf6e7a076fbc3496ec34ad9e1a5fa385e7b260300f85d0381a2854ce74c2eb186262b11482114b9907eea6872a9c9a02b6e732f7fb37155a7b9e63a2673f1c4928c285af1c83f16bd8206af88658bed4017f53fb88fa138c1a9143ec17e863ed5454bf1ae795a88183c6f49e9ef41ca5c88f3ce79259bea6c7ff1919b08f6ff09e1fe1e427598975a5d5f6a73ad0847e0ad85c3034b13714d8d36d02ac94816bf7c520196411ff6912457fd790ee81a5736e2c83f66c9c3794f600b1333c36da3dfe5e23664bd8d2550d667897e189e7c7626d13b0b89e7d9c61e0b1eefbbc079442ef39ca96bc8c44de8ec21031d9daec6cb8f30a87451d3a2ecc6fc784f918b820c0b66d314cf97e353df3882654988c5600c59c053ac208d39cd1dc837820e3d54d066056bf992d4d594a89a3245759f8aef910503f9df20b57d8d44601d76df7d687bf3198eba38a875fdf345c92ee11d8531b6dd1da7b694be70f995e9cd533bb5be4ff46027dc87f4df5fb13f794e8499e95599382f943519dfae6ff82b57fb449c4d98e7237db8736db518c1cf2408f143ad806f7d8e3bb0f4e31d15f753e020f40188bc1d7bf5f054eeddd9ba73049946696bddb52d1c929491250b4eac7cdb21028a056192222ebd605e94984ebee7d531d13ead504479fe4b76206916b4d64feadac8e5033f2959326ac0ac622ef84b8dabe791d816cfd6ab81c4c3b3d623da39fee2cbfcfe62617bc638106f7712c8d059bea08183bcb4bbc211c52139af75c3e7d81bf2641e72b1b476145e0152e1205ebaf5b59df921b8d96f64a3332912af03dd98ecb0f7430f40c7286244c2ef6053c3e8d45d47edaeede8dd5f4afe28c9dc2c5ba0632913a0b87f2719c61648e12cf80ad9d6284664ee5bf4c27b48385f684b25b51d401a4eca71d3ce613e039618bdbae0e07ba14bdecd45a9db9d9e0aed83fdfa74162633087efd09e63546b1eabed15019f7b9a6a49e5b73f0e8632441671d1e402840cd56ad86e516c36be29fd6e85fe9518e22ea9e4f026cebb1825bf4229366d6d4d20079e53813c8765e1e561d1503e3ef2c17c7fe899b9eb997dfbc40648c41072a35109a16706906acf5a98a427da093f368a0e6d0e1e4d8a4de9ab62f8b4c1e983cc35eaa969cccc088e54944765698206a712d54912b195666877177395ff4e790f991d95d7332fde6ad4c921f1c3cd6d1d456271431571d146ad6635c937589fee0f337fa75db6675251ddab4e027ddd1cb2c2e23f0b50d9e2559d0c90fb2c86bf853e473fca21a4af63b9f465b558f6fe3708b9e23c504899af800a08a25686d5ce68500e983386a4decff9d4db1ac19eb536b5a22da3f9bed670628640d6179d8033002ecdf8b00b52c49e298e4c5f65408c1e149d7918c8d24e43eecea74e8e41e457fee1de0101125ff67a8ed4923ddd852113922b5953b23eb936fb48c05a2063b88c0d2b035c8851032352b77888ad5605a1902f9b329a6fd4fa0cc6625fd05fc39235312ee217359d30372c68408204d5a8494a0983f155d23c7b2cdfc7e1cbbf5c2d7b942989e461fbce739bfff73d365551edcd47359c97e16129ac0c01177517c28afc055f523bd9a1c227893e693c7012e5211a97286e1fcba7c42aec1e89f69a305034fe1f4a7a4df1f729c1f98ecc006a9b4995c735ba1d573273a19d71f09aeca127c23156b093d74a912420ae78b545010f4754d43ce4c4feab2f910ed8987ae7d33a43106cc8a838795beeb0b3c6ec786a0b093dbad5609f91c854b39a503f754eba5dcf00107d4d3d011ae08b203d3fb2229a13eb84630d3278df5f9d618ab744e2c9c07702fe5828ab9c4976bd8407877b94a5c7d0aafc354bb80caaf11c55e43f4e80493e6dfbf0b195518b9dfb8b0ee5dd10f202ac03e88f5dc05c56f5eae9979f910e68c3a8c4c692bc4244ee2084eed669a9f3e38ad9e4355f1cc3453b32a1d16510267c99dad3cb2ed029414ef7fa24d07b435593d2dd3c52341ec1939ca1e77fad1450a828628d721b23c4aca45bd532535a4b7ad80b7367ba56610bded17f31a66e0670adf659248fe24a73cef9792055c2717571c4c3a6fcbb9c8e8092e4e7bfcd43b74fc2e9d4a9698550a8d6f850b6fc5eaf07c3ec4bc9ea159bf7ec09d9c5ceb0f7cf94777f3e3baa154a9d5e36528e6f6b843becdc11003718ceb66b4c59f08cc13ecad7ad27179a1e829f1e26685479edef43b31d779fa312d2fdbce10847303b3f62ab89d3851860c2ddeec5fa770333320fce2e6654fe7479d6c0820b1fa741e328a79ff72738cda71810eb89ddbdcb5e884e69de908c7765aee87dd67926a12dfb0a92ad4e3732e349fbd49339a63c063596cc87035cd5d7034c9b4020c74bff792ff4359221a41eb702f7768a6252a55e3228fece596a4071c3016649212c37787fa28e93654fa550c7369f149492424131208d4a21af693e3937ed70feeb2cc45431597e8ed5abe96cab941e00c00040eaabeb6b3a862eaa7594c14618aabed535c23183cb44bf6f791129797d54cab14f05bde4daa24486844e03b2e5c5613254500d731a3657d4dd0f95c21f84468c419a2df3c0743f303b69379d79ce8fbe7e6a8a7005a0b7f990181868b8e900eecc6ba805697243cf88b0c3e05c680870439fddc44d662a22a78fca70a3b47c37f990d106e1c79bace575d5396f52a30fd2cf7a4b7dd3a3f2898f7ae03a80cb82b09d886b20c52fc9ce9650b4b83570c7661005875a96d2f023d1385732f574505d5aa0195231311c77de3420d830d9ec80b0af5877ab37d3f3c12d78e286ea6e20bc2556727cde84b79ceda4558442d9f25c6727960a57f09f32c12b97c6565a1d2634f3033ab44a895a30d6594d07d5caa84d1b3aacf812b65b87fef95ac754c47d126e98a1e6b68f420e32ccf33ebfd2a1010b908f825b71068100dd00d1bc747e1df0b8e401182a3a01c18a95fc2ad3112c57b69350772db65023bbaded2db74c29a5750849085d081a6b92254b97524b52e4ed01d8bcc28455fee5b83927cf25f35f54993898e2cc49d10f769987239779fd0257b9ff9091922a2b71edd5bd7798ea5ff5966f2f9dd3f3e8288a4a2a647adc93c884067a69a2c2c40436315161ae3f3ea2beb4df1c973112b8c98ff37c899998899b7c8a2035233158399523c6da756a7bee4355669a2d6e622a731b5ca6eaaf517063f8c3fea581ac6062ce8b33274545b32227fdda7654a090c151ac89f61d7ddd78f4d534e7f4deef8d4d777b17394cf7715351103715b50cea62554c4edaa42dbaac6ff639264c4082e9e665899bfd5f1a5b54c475469e7296862c2aea3cefbb2f0a2a0a2a0a2a6aa3a286d24fb4c9a1285317cd9cc813aa86cf798ccd52c56ddd33da4e969832fcba1a8bc99bb11055771f2b4d4dcb404ba377e01a32904f33c7699e0e5c4fde2995e3439d34297d785e07755353cf44976def329c6872187f8d86737a93b71f71233312092220c215de120ec0471af4efc1a3a99bdcc78b38501553c861402eead59c376a9ab6a934ca401bc39f997f885255e8c0554a1bf84fff82c4dc3e76abbd4d4b9a9e39d16d70696834ce2a73fbf8dcdbb07cc9eeee6ee35e13e526a38d64d73c7afce83f5829b9168cc5bcb860862038038795ed823dc352bdba767083ea526cb855a03a1733f551ff0675f1684c9f981a9d1e8ca0b91f722ba5ad231044d53fba2c4ded37998b8bdfa659cfac4eef9f01213d439686a704122a10e207aaaaab6fbba626214286b07ceb87b47c8b8f0db6fc90d6b3fc9016dfb27a1d966fbd4ecbb7f84dbd561407966ffd0e966fb9a02edfc2a51556804855cd9f5da75a7db7fa54ef291cddb356ac5fbd8ac552a9ba67cddf148bc59a2c166baa54ab8f7bcea3e0723948369168d5272684e2fee89954f5df7969f073314d5783be4955edbabbbbbb9910ab1cd38f8d51534f321be3f4a7d3a39645059388197ab5470ed48714f305f44f4a29a594fd3431142a561b459574afc394e66562ac1c8d3578644a1a03c6e48730d7115f7aaf41234c8d722f9426ff143a49a1e4f1111bf18c67be6cd49a730ff5a5675e3ae8cbabb5e723244f7dd85335eae227543a984e8e4c2c26b31de5e8fcf0d1a38794d896a3e39a936b812c4767013b33430c49c6e6281603c66049b000c99cd89392aaaf1ec8a788ab6ada0b1a845da48b6cdf00ef532f4df5bdb44ec61473eb4bbe24fd4957bf630e695962b961f9d5f368a12f4995b47e6f5a7ebe4e27da521adce13debe5b703f5aad73e1c50af6a7d2d1fc7a2fa8630d199f4a5bdf7a9f77ec88abe34fada280ea8ef5ec7a32fed572f8de64ca3d94a2d058691d9a8f7921c46c9611aa98764b862869de4518e28517db3980112272839c1bfc098a44e525a622ae2b21fee4d458af86c69c9c6d12cc440b5a9a17922c302b435ea035d0b697046d10cb917b37c1d4dcadf688fa43e9ec88d6b5a319db6e60b27e6be375fe11aaaba1b6f5bcf883e80646b4e01f9218a4537f0a4a8ee83ea3bb8c133ca4e3a5e31bd9d913e76867f67b65ff9fdc332b95cc637cca91b3ba0b6178ae2e85ad432ae01d0cc28a8ba77e31ba50342d59fa15471e3cf523a507d553d8a07a4547f5e6226d469db8da339fcd8591712183f6c3facdc853a765083fef507bdef3427a8833a6828a8675ea8fe2dd433a8ea5a90e6dfad136e0f40e093f3f2f4714141423dd4449c543be8445f3bfe445f393d2f9d3fd11e26a192227c73fa1d2e342174a38102fccc6e32e042134237273ae41f45a7c374900b4d08dd748ffa7076144579e02387f1d7ea4aba03138b6932775485436a4ee4174f5848b2b71fc4bccb125af6c3443ad2cef7a341ff717ad40fe1befb21a7477dd3f40cf7f0d1600e0d0e19d23df743bae77e07ea4fdf71f73bb8ef680f9375981da74775d4e5308efaf6a6352a9198e12efd58eae103023b538005fd574acdc6f03f7d380ee391cac4627cb4d6a26ccbc58ae9bf1f002266c75e0f3173744ab419591c984e3dcae1e08b406aca47f1eb0f66c846fc848fa8549ef6548e0e87aab29866d73542e5140c3098fd2ef93295435597c534635dafcbfdf63c388ec73a0c4cc421aba4ae28ae2748de24c756ad956caf44be8d7d22db68c3b015a1980d0e8e0d1b1c8ee3381cb6b18163834323b3b10ae2dc002e7f4b2185174d581d5105461025e886581d210521fad4440ad30331464e8b1c393233f7466db739528e9965aa103082a607b677bb77bbb7bbb7bbbb5b0addfe0b2be67e1813b03ae2b73d8e31c6a799899423478edadb7c350d324d8d0dc78d5adcd86a906978777797abb88a55cc7a5e3d6bcfac7a667e2295e74ac56af9d4ba3bb350d6c74b3e4eb26a49a9faa9bbc2f9ae8d469fb15adb003baabbbbbbbdbaeafe728efab8a8417f2b95c39aca32955d98c045eef544851a6af5f4715fdc18a72f8a1e372bea2bb54f38a292ee6d9ab7617a67ad54eeb9a8a8a808268b09c4f4757af95bb93ffdf65bf97b9d280e20e73806622098cbef8f4c8db6a0f0943615ccf068ba3f3ec8c950dfdede4e4343431363c2dc1b2a389802c9e59ce6a8d3f7c3e5ee8aeeee31065db7b384a9bdfce132a9b33454b2a140d1699d8de10f45a76798fee0d1b21dcfab9dc2a1aa3f7cc8f6a71ff2ead739fdf63adcab290ea7df7e470f139dede57372e3af97986208a31d991aa26025f27fb8a44b46358c4c0318454c96571cf62e4b1ca464d298c3f8cf9c20a59e59b681110c80a5e1d59f8b104275e641751da81889eabfac44f5f91e6bd067cec6700ec2a1f28f31610e6132644850ac8a398489cefc961fc27a961f32bfe5f95fdcebb03ceb755a7e3ebf388a03cbb37e078bf630d161fdfcf51d2dd4a647ab82c913457c6e58743a8cbf4d73114ca2901c09aa7f1843e51e86adc141ac0cfff921c762f9d0555b9e7bd8d2403df72d1fb37cac2f6807ac40f8e573f277c0ca35e8c07fe502a4950ba656391d2f54f9e35daee7fef401e1e7bef3140eefb47aee8583afd415afe837a87a1b52bf0a4d7db65adc0f0c6dcf9894914eed7b247d39e5e213b9591a031a99fb212c7e4f64f01a6508c11acd4395cf712e96a123c5d918ec9a2d984e5b3086e826184270dc7132431a1dd75c2e1a178dab47834de3ea8e54070673696b2e31093a6d77fbed9de9bfd426000f337c8981bdf06a3c5ddb9ad6aa2107dc2f7da11cd38cfe52fb5f3ca1cad7c46416ca4d98088a193251dd5996ef58d68630561af26895a990069be5dbfaa367b87f6c8cfed9a9df8e5323989ba47b998883bcdde59a93f91d08ae21db9b2355f536cd467a46f5bdb5f5fd3f765ae6e2fb795ae67269f1a8777d36340ed382b68ba752016179d5736af5b4e58954d5b39e8954966f885065a9dec6579fab41958ab664385738ad70bbb443bcf12388a9ed344cfff41fd19780e6229dae1035092ee84d9bbe1400349f865cc396ea330853a3fe828936a25b7ea91e75d1d687b3e739c9fdb6cf3deab7ebfef4fe1d5d8edbd560477f26dc9bbdddbdb9b959090a05a2defb8ef48503eabddf817a8feee87ee96fb37bee9b863baeeadabcdde969590653ee7bc7b5812e03ca2ccb681f8d686e57351df0c7a226444cd4846364e6293529d4931c8a4371290e45bed4a4d458a33deb191103cd22e525dc3f81309d46111c21c847168f4002a1da9f4390d6da87cb34facae1b87fed70194783384cfff850ed400826564822898fcf0df7db33d1914c74b4df680fe7a06b95b40f398dbee2ef8deb15a90dd8e30516931bc891d0b1f7bbb084926da3ae961f69c8e3b51f8634c3afae64fb58cf6d9858b33e30170611dbfe82d946e6225026c4615c1e7b246e4e97ebd77ddcc77ddc878b00050db95c16c461ba417067e0971f8d16846e619e169f868605b326721f39c7914a5157e45ef5de775f2ae57dea775c95a3adf4dafe4b799e2ab57ad57b3f50afa2afed55281ae6a4befb1daacdb9e596ea4907af1ca580ab02e1f7d377df8d179fe31aa8ae0628d13fd600622e14287cea4271e283fa2810ee4f3b3f52399665f82fcb40edb8aaffe6bf75cd6be357aed46519fb7272796499604a4d86c8eb4e55ba85b1165b515b9eae61ac3c5d6323d1c51822e46fddd6bb3cfd4284e902c2f465c3d2970effd3ef9f3817e7e81fa6169398818f9a8f60b2a728b1142733642995a7cc50fd596986a5d1ef2f848f00629f1e18b96a3063509949752195f7abeff4f3ebbe634d46397fc8e9573fa4fbc97a670d59fde987ccef3e5ca620282939f592afb3fad3ebcc97a438acfef43b5674c7a4b12a548ffa21a9f7a60fc747549ca46c94a5a05ef543bc4fbd7f1021be7ddc99bdb1dd786dafa37a8fe2a07ad4ef60b162b2ea11f770fa1e727e7a5051d4f790a21e27d918fe5f10f671187fd4f71db1302e63208761a31ed4c01503264273166172cc5482ed63d95e13736d61fe606acfbbbbbbcbcb2ee6a2aea8c99221212447baed11126427071f3c746ec0b1a9918981305f222353e33fb8efd1e3c6a8c9a8c5e84966f86e6b63bcaf5cb9cb6ddaeeeeeeeeeeee127194cca355251840689ac6ef0211a6d45e12e6c50c9660ad566c6364621862c6c0eac61877777737460e745db78af1992157bf1a8b36c66a40753b464d63cdbbdddddd53395e2a471a8c66f8a2edbf6c1b6fccc517c4004d8e52930648d2a401a49824e0236cf2379e51e327438df117abe0afec9dbe3819ea8c6ad3db8cea1f8c21e62261fef8cb32fa995d8ac94fc4bfbfc7174948a05bb94f23b5dd5d1bb9d2258d8dd4b89aee14c48d715f7c70798dcff58b5278c2432707260b9eb23158011b585db972e5ca8e7823694f066ed6615ca4ecee52172a26efdbe0fb5858979d69353843e337c6f7220a4ecc7fe1e9c26cc64ee2465e5ed7ba0f139d4b49c308841840aa71b62e57449b229cd4703a61777797a1e021c04084c91fa316c50c5bb00a0b57b6be71e3d29d568da92fac6826fc42d3ac7280ae5b713777f37673f4766e0e12c407777b373777b3b63537777377773377ea9a515d77373777776faf4d7373777737152a54a830b54ffb3019192121cd909066478e30100bb11003e5302508d32a05616a969171f7d82c363d982ce63e8ba5a5d5c2c5db4574e1c29b5db8e875b9523abc05cfd52c6cb790c2c1b5bf85de97f8f2e2cd2f9f0baf458b940eaf4e2bb02e523adce5f1b7efa903780b2c78f32bbe5edefc6a16f8b9ca8dd4e03ecb42e91616e333439450e59770d62316a2297327d0b5660d94197ad59bb21f4608e67e147e67755bbbbbbb3756a3914623380620742fbfd8291c1b73fcc21dedb7ed351afa4b209a468148caf1b66931526f0a1b77e3c6ddb8fb36eedf4b87dc5e7ef7648ddc615461c793d44fc74681f8cb770ae46583f61a2f8c2a93ffc50de6462378796710a179f395237f86aad5174d0a879ea1be80c24b485e801a4c7f712d4d92d5765c2fa8a0d2bbdb343536ee36b3dbc686b7fbb61536b472445d91c505336cad16be70f8062a6ba0ae11962acff76363308c20f88abd5132bddae3e53b57b568b3eebbeeebeeeefe4135a8da0c6612e6ce6a8c310e35b81589127e4a945aa744cee872ca476a6c636c0b869e178a181e3e1a6c1f3d9278f8a0a1a1a1f1d12389470f1f3c7c74acc14de2b1d463c9470e4b34ab817f9612734f304551d0140fb8d69a0c54c0224245347b39b77b20980e701b4c7e776f26ac5210852603f65e30b5e7a8791e17a30783c16031725ef4623cf238a479d451204141223135a9b12659b2742935103099dc6ca408304ab084142b5e38c13b3f9a7df0bebbbb447c6e6c3ce629eefa7b7a1cd7606bbd4cda3205991ec779939b3b3f9a6324dc32695596f0048ca075d48983c962b284c58030584c2c168bc580301818b3c1625e5c3b8bc51f34f6180abe482203cdb1d99d991d0adbaf92d3ef0df7bbce4da376e534d8f20827070683c1726e38c2b921871d27e75f8e708c8c6cc08e98a564ca34dfcc0b75bf5bfaa23d4cf67b9c521dd477df692fe368362bc9523f6b88b5a4679492dc87666934f7434ecfbd5c87591af2d03a4c034e9485683646ff8c32372a137b32576a1e8bc804b3e9ad0f7192ede5fbc74242ab34d4832bffe0314545435855bdcbb5427284479250912342424242458abcfc7c9bee619f9fd4b78c85162e1ef52c7c3187e9777da0c3b8687134e7b358fbd3e5f3e714abd56ab55a1f82fbb9b73e96966d61996fe3acef27d82a4f153f05265901abe126d51d98bb5cd663cabb603c36da9a495aab4f471acf76190f6618abbedcac9962720d36941934703708dd63dbefc3623432dbc67173e35918ff8d262643e3db6eb2b9c54898f31116723e728485ba51865882f65da1790f1eccbb8439c91573567e0ff5cb5b03ea771928c89f9bd3e5fae78e0748393ade0dbf0ffe1cf877f883f4ccaaf2f30455669fde24a796f2110ee29c9999997d6f98999939183f3091aca269bb2db060ca9fbbb34975df03c20c398e86639f99822937e9ae494df3d55c734d6ada4a263afe8f7be738cfe398bf78d23e6ee572c813b76ddba6b93f79df02e1dfb6fedebe35b78d5309e0df2817bd0d74fcdd1e8d2653b3a7d376a2b10695a050dd33efb82a907df9fb6b002017269821916d9b52a58e9d5297f7757a1dd4a738fa7a9d280ea84ffd8e9c9f1e509fea21dc71ad4ccb2c578b985aa4c239ae352bddc2b4ce85bbbb3b0315e5827ad7a70357144d1153bec622d3332cef82a231972fe6035df6d2300e76cc5b7d775dd7751d33a354cf132b8ed57bdf6d17bd4de5f07ea5eabaae45c3585bee28992c662ae528171b2e2edfe20b89dc68e13a50cff23950cf42f90b99e50bfb5d5cbceb6d9a48757d3c5d5d50195886cbdb788b76a1db608bf52ddfb33ec6f2fe3d59cff2310d3a0836e8cf82a2fb714c63386bd315c73df8c5c46ea0aa01ae5cb9c2139b26d617984c83ac0e4ca9c9244d6ec1a82cba568b896c3a86242cc4498896862ad5acb43425c54abc35355c8d7bffb4912ec2413fd55d560602a07ace0daa0fb2ab1a82af25ad82b88c7b58187f10704756cd6251565262a5a09f8de12c4d985a0df9a7ba6c9b97bad53b7bdfab8fc3e1380e5ab192e7559f214ad2547d003db3516c3085079f1b8f020492ca325baafe8c34579e92088a421065a6e42fb5548eae2a9afab026954aa552a954ea63ea462a95f23e7523e59dbc53ea46f72c4d9892b25044c279a74f7a0c4333ac71d1cc9812c871dddd4adc9fbe79a8c6e686de4ef2e3507b410d7ad775cd7566560ae29a1a8fb45df0c08b91a9a191a1c194c9a16934003590e17878d1648999e2380a14274f360a14256aab47d0f1d4c971d837e82e2c31c33dd2e1c14c84d98fd3335cbd761448eabb577deabbdf3e9c1b72e86bf6cc89d33256022847870795def8fb7852fd73a072b35182f48caa7a941b18557f213de333b7ad559838eeee1bc3379af3620a1b1b75f5ed0f93f0a5fae90655f5851ee5f190c72b3f37041b0cd5eef9bb14539b4ebdf75ceae3948ef895bb5fcae306f72d6e144752570be6dc0eba85852da22a9fe59ba55b58dea65bdf7269bd4d7327d6f3c7bc71cf626d2c29a564c962ee33aafb6d33ea99a35695f2e7f66443daa0f4cca6009fb97df7de6fbc6d1b57181066d8493028e6fc2657c18df7ab973fe3687acfe375f5a9548af68cb4624523151a53cc70c7abace79e93311ccdd577d295b9f2351fad88263f2aa55eaa5e7ab10853e36167c20b786d3dcbcbd77a581a3a6cb545c3d65fc06bcbcbd77c96468beab0d5161aadf40c0b5d6eea259f12a54428f149cb3e1a45271d9bb4cc9bf9f8f8f8b024457e3c22dd8a25489210f99033399596ed8d7c2fe23cdcc8f72017625a525aeaa56824fe5469a5cad814c6a666ea26f791cffa389958ccbfb8963df90da567b6972f648309f9b1c965344d2eeb1987e492ad0dcdbac85103b57c99e4b20e2a721937c920977192e43036f510d3520335372b0d2d1131c9dfbe4e6a72191725b98c8384c819176122a62126a125a0a422b189c3d8d4226271d22d2c9433d6eedc9d3b77e72ec7bd942b29577225e54a7e40e4cf495f3a380a443eebb597cff223a306d99fb00d9b06194695197a0d8b2a7171990b7575fb8c89d9c556314accd6b37ccb4b2297d9603d51e597422e934295a59c5f65acced6e7429f0735f8855c8d2a0b2bd6d47d1fd57e2afced9686405e36cc0fd7b57ad42a8c81de17babe86353235749fcaa1cf38c6182cf20b23c859ab514766ec4bc7ba7bc6be4def118ecb4ef2bdef47c7246463f8e370b429ec91e67ef41947576bce9604f2e23e3e907eada98d8d51f3d93428bbb13050a28822073928c09c732e49ea71b3049188ae9dc8cd26e92b764fe330fedfd3c34407f5dbf7300139dac34487a35c0f0db99b93a42fed511f825b03b63fbd8ed45ebe4675b63ffd89f6dc70f495e3304c771af477c942de1e05a682d2f48e8c6633f639ea99197111213dc33f428498f243d0e572d24448d36ca8c96c369b0d0dbd3c12a124427a5ae62207e7c7d21efd8b0d0ed7d4aae1362169720911624a1ab66a08eed060cfbb60425ab3c9534215a101391b29327fe64fed9f46b6869f1a8afccdf6fcb3c88cc47120976def3a3d378f8e3a29e5c715079c1c6eee95a2f60edae7d8cd27c7d6cd71983e72f9b7957b30567b86e3307dc34232a3c3f86102c9222e72ccae10b4a6c015a1a34c83116c30be94312499e14251723a71dc9cae8f4162764c833740ba82192e528eabb641d975465469a81b85092ab55bf6616e1426a65414d778d9e04d34e1539bbe6cf0906319f251cf3542aecf3262021ec5359abe74346519f19ba25886fcadd275807efee71a4d83f43fc7a0830623e881b9333086a0d3f8eef17586f8a9b157699b7931344aba4ef6c3847b1f9ec765b82d0e7ed4eb00c27f00eeb7c196f4025c4f1d7b725ffe467f230d25e5f1baff328419babaefa84c1b0022915b07cd0411272468c2080b983c21052ba090084213b0c82205469c707a8208402fd0dea5fd6b0f3af103231a77850d243d618a1e1459a2a7091f92d840043e78c208d43eb64898310d96ae07b58f750d96f081697093c84aaa368238133b099ebc4eac13514aa081209c46e4267219b785d8442f1df1f97964ede7e13a4a50509551378a1056aa964a407ca63c6e837ca661eb78e1ca952bb55f03d2ff29c067f66b2fbfeb770570a06de8eeaed1fd025dfb7907199fc7e5558b554bd91079c1a861404b69495146afc18e316e5ca41da594ee5ff5af40dc6702667c109dcbc571fdef73f3d95fab238fd796227fdbb88da5dcda39772d6a3a35a67e13cf712dcd35d7dc39badd6d022878d835fed6d0e2730512df6319dc6a7777ff165d6f5179b4261d2f1ba1ee6b1ad0e4b6fd26e90e1ba12eb1f88bebc5555bc209bcc4afa5b22c0d1975a98b87e97a49b230db80234b16666bc8d568c091262b63ab4db71a74d7080085abc1979996c6f1a85b58f8d29d865293bcab6423430d1150b5980c325450ca9fc15ad9e495c9f0e3d466ab5d0b3dc96d92c630cd56cfcc063bba94aebda42f1c5bd5e82aa1ee4043e59135529b4f92df7cce732818f97e4b3fdcfdfb94cdc6702b58616a708daaf6a1bbbb3bff576dd677f67567cc71eee18b1657767aed6556e6d21eb6b23086fbb60933a319559ba682377bdc4700286618a5273f2e3a899be7d1f38dbe6c8831469a98c3302bfaf8c4dfaac3dad7754f74abcece6e38fad188a53e6ad46683514a79e2d1aacba08b0c0a61c61a4a9f72462753feb6bd44ee4fdf715f2b76f1672b72df71278ef3bc5845c7f5cc2e185b97cba37bbb771bd1f9a8ae69bbff0778a1028935b8310daec718e7107165f2597eee7aee5eaf61bf16bbbb5d91b91abb77e88db1cfb3d51c5b79b787d8dd8ddd9bd4a277e7ee4424370aba8589cd4840ede7ed7462e17b406d5e98c8c27f0fa8fdcc5a9818637447d5d8df0b139fc605b6aad19055521df64ad5286f8cd8eeaadd18914d1035f7cdf5f1f7e3ef0da736ed52743321a8003578437e7f40472814260d4acc60d3dd40fa6766becb31f361fb1ce919b9211be92187e1672b28f790ad50f194f9212bb13ee4a4960f190a003e6424173ee4272f38cfe887ec24001f7211ec436e02c3874c24800f79490c1ff210f8212781f9909154ff9083623ec6870c34e3432eb6bd0cdfc2e585a6850f6b58f87067ae0fd7c8c5877b24e307e0b20fbfe6c34daaf1e12ad1781a3e5c26a761fc06aa8107d308910e1a22004d92e19bf16d83b16f1b94f10de0db0663c4c0780103c620001860466a7f00be6d907edbe0f73d92daff820b007859b20db6f015b57069b5b0b056aa29b53fe55951fb3ba6da8fa2d254fb6b6a7c343e1abe6d189a6f1be6db68fc19dec667f8992fe4e1aad3979c81bea4ccfb73b58db48c7d8ec87c3dd44b9a48cafc1aceb761c110aa70c41531a042156814a66cb9fc632719d47735dea76ca87e790054f97156bf541822093e95ff86f9fc39acd72a3f0f961e2d412d242e422d92b818722d6181a885df26afa2976f270098b960f4c2d13ff990289400fc26c15e0a0c2f2b3f2b09e077ca94189e97402b60985e5081f1db14c356620ce0bbf2b78ce7cacf465a5680d8efcf8ce7665efd32fcd6fa349edf478ddf1bfe2035bf371ff28fecf72674d124d1f005a04b80485fbd42b0c2945af3d5f8408761193e1f0df2cf887d32bef6f9d84a83fc313e8ef998cac74c1f5bc14b5362f85849001f4b81e1e324d8c74401f87809fd78e8fb38c97f2c84a4417e173e0e3af2fad8c8c745f8877dbe1e213c4160fff1d14ac54da020f193d60b0d319a4f96c34aa99c7fb3ffd552ba935e506a22a5f22ba9f2b7d10aa1084f54fe46ea1996a3cadf4ade4220829316e25ff736b283caafcacf3a627e0d7ba88b667c45edfc67cb50ae17217e2affb78cc60d3f7864a9f2c7f0e0c30dbf4c104ea8fc34354a95df06277af34c036006852529a11f881003c112165058d2f1a336c041a04046900ce003498e1c093acd82b084229f159020a803524ab080272851c40320a61842161698fcdcec16d6b17c3f4c54ab4f6daf621729ccd5ab84b88c873751dc770d3ccc18c4ec72212e031746f5ac7a4fa57a2ea66e9c9e390fb5499ce7712e401e8a6bb978fe1f2e6b110b79d4d57b9ca7026a69420b9187e2741052573d1ae4ed53376e68f0d4c54ea716a4991f242a0b20044d547e3ee263e5869f91f0b350cfb0547e4ef253999feb4e311a97b9c85a9edf852266e86d14207c6a8c32822275f55f399580afab777938270f9691b97ad5879bb4a24a58684fc3f0b3a7c99e065948eac36daadaa74e5fb7ef2b775a394f1b152289f4d04405164baa600154c40df7e083075a108521109144146e98fbc2af2ebe1f261b65043eb5f52dbe1f262ceff235d5166df97e98b0d01dd48531ab553fccedead023e34b4acdf502036332343536a4165b0447305c1083a01f238848010c94e0049327464b51cce0867fab287d2f377739ad15441097eb61604ca6c6c6064e4ee456c951e0c42ac18811e08069f683120988d440084e20a2093968810f92aa4083053ac0820a1e90c20a135848210506271c91450f68f083109eb8e1df2cbaa5016986d16bb95e60604c86a6c6c61639a41c3040c888a49f18244183150c818a2442a00413203112c40dff56719fd8331b7b66ada861ab6a2f28cd6eb55aa6027a79584c8ca6c6c6c60d9b37dd6706600f8c368b2710f1012a4a3829f2c48c0a1e70c0822a3d4ce186adfc2fb820731bf328846f3c1550cbf502036332343536f866919080832dc2144c3031a1a2084bece08a26f83461822a9e202971c3bf5e171554390304616a1f72736166d54108c7345bae87691fa37dac675aaaf632dad34494502fd144fd17223078410764b00325a26852e586918c00022af48085d1932a741c0e0c80c20b2ee01c37a9983d78cc60f204e21258bc5002103f8400469105c247636e308829916d6ce0e0781c334d4d91d99c4ddd3048a0038bd95e41476fdba66dffd2b13d3f6fed3a6eb2d5a087a05f4c61f273abd56a50fb174db37b62504210826ef6b520984b617060ee46232c912c228ed1584b5843acfa83a54da27d4b9601a553a8f44dd7243dea148d0800000001e3140020200c0806c30191603824cf94697d14000e829c3e7850970ba42cca719852ca186408880808800000200d930275b30da9a7a57f2310d57a43326c18e5127ba5d946feb0477b19846dcf144e61956462ba35e6d9a76b9b1bfa9bd871a87cab71df0891cd57baee02e2a19cff14353d2f364acce69864d45e932c49cb537c2c9b2f8110cd775388ded7f17da23c6a30d8fc17b255d3a3d2735ed534268989c245ce98684f09e3d449ffb406d98ebfdfe9a3361aeced2cb2339281edc9b8a8ca767c5fe236ca19c0ff62754a4134bf31808927e4fdf996e207fad1bb489248448fc52b4d0bb99d83b94be1c6d70ec4604d43d03a9ca556273e0b190a30015f8bdd581abd629704f4d3c877125563142ed9ed598f7a0196e6416bf7d064f802856bb8dfc94a69c3888d670e715267e4f5acd3896972d93e9995b9682c7d18f92680ac1373aede9caa3a78f41c0272eb93c3202a02b562bbdd45ea2f4b5767a2e628b3a09a29d54057e0c22ac78725b7eb062ada17a07932a53bc3d27bda6146ab5b3e06fdaf46a07a9a92f022396fe3b9765c5f9837805a51016c03ca6c3222051e8b3c6be1e7247c6aa03ead4fb368d2f23df0499e10dc33e1006e45ff04fcf54809f2c83b5e836fab7d2c419a17a5e4acd441735c8ddbc74f48292b053687dc785a964c26d68723ecb88c3cf7cfd676e81591ca27f37e19d63ada6bd754c4ff471fb93706b741c0a704810de12f879ed05d8aca49471b6707c3620e2aa96f45c1690714069deac1a04c26e4e13562e40aa31aa6314bf9470ef870c952f175e2ea53613aea3e273aaf4c0e5fd85a75f5c29b57e04fd84487fc33e876aa2a758329e0eebe07378e8ee89c879e5191cc14ff893eb9656aed54863ae40f5a4025df1724c9ab2b92ba6892662bbb4f20d2b85e4680b4f340f3cbea20240ee9485029c94ef70fbb00b94301074ad882801049eaca1b34a7baadbe7988ddc8e62b454fd9597c097ed656cfbed8f9d36a487792f21d4e8fce0ff85d3633ecab6a5eb1caca5a21a1d31b814a5dee6e5573eb470932c64a851695931fc7d97b9bc2b05f387c02f164d979d401752d3006a5f1de7f7355f7d5ae212bcba0b35b3a69883584a063e89bfc6fd4b705ae9b5c6e03f683defd6d2f0c76b24d6224c2e56f500665ba5a6b50ac1c73065e70a861eb402f1faa552912aef086201daa63806992a1cb791434de4f789c4236295838b4da079843486f93a146eaeb9693ca02dc683dbbf719a0bbb2a2d045143586a75f938560cb9454b291c938382974d98b8186083cee1e5699a9ca7baa35bf121e531f3e15c74916a1c376a81520ac3c615e307e38cc9886ebfa348ce7d5d1921df288e7414376c04a0d7a5fd221e2f60f7faefed61aeeaee44822c47a40c4199b9da989df9bc17bcfb6671d87e2c8a53a7d2c511a12c0f8aa2c7ddfecf1cda4d8bab528088443900666c4400a297b776afecbf8c5587bed64d15ede32070f4654ffec8286cf1d0c5324195b96f05430fc08eda430f9df96cb9f5504cca65989e7ab62907aa340090f2472825ed587c082d54a2755e798cff1fe767b3011f239a269fa319990195dd4e79c8c4bc82794f15834fb33d18ff376042e7e9737c59d87722dc89c0f6a2dadea6029256cbe3465c2d9ab5a8bbc2009fc6d311b572c9fd4e3b2f19c69a830941e9909334dbe7611415002e7cb34eb9da321a9c74df24504160d02e7f6e7a78d5edad31da40c0819311f956dbcdbd8454e872273345fd181a1931be959c2e37cf0a2569a32442f42b72e275bfae5c20ae8c5c0ca78966bc32159d46295cc8a5e1a523357c7214efed72d8377b2c7c8d4efad6eb70373cac708e0e4d16ef4f9a5edaed87eaa69e6a63e539176231cbcae85e374e4b627e93a6779c6f32e405d1cd9b2ab94230a6ce35e5b3c79c839a6e0a0fba0a64a19b8dcfb0bcc44c5f496802811b6a1c2a941b335d34b86982da088cea1800552fff667d2fd80e8f850bc99da9ae5e3306d96aedba5c067e0c79fe0787cdedcff44e06d57ad119ae3ac9f2fea20fcdc0dc39036748d4b70f5aee84019482b6e5e6fb58c5c747b89811de1b0053b154447f9346f2c69e192c800706775144140a08f6b1594e0aa1158d50a15b5bb89f036d934883433685ddb07a955c1c5be47e5ac509d233ab0b4a2d6657a8f82db2a96d047015fefc66236067441d2340610b69bfa585c43e3915bd14b0204a42fb10052c6ee89d71f736d163036345d101c3a95cd6c648d28318e6059044a7001492259cb3cb700f769b86c3bb0b286683dd87720dde87f2fa08580741654ea8d8a45a3d1baa95c696e3873e00bfc4b1db928e21b4abf54a62b0f930d84c36436a156695855581075062a7b22f27c56d95e04eaaa1cdd8a6f902928928c2b752bcd9c82c564945d5f418c13243efad6f74a30a04a6ec2ba385e27af4d344b7ee7de1e09fc1123215dd32c5703a8ca73078e5beedf6a8d206ac2d1ae45e7fc8c58b25d87822793225609d77751713cd6b3f5258b7ae2d309bd973fad9aa0a55854b546b6767292f39f45505301894cee29dd37be3538a7ff6cce5a4c4b6c0b842abfb30eebc12377d5d61bc6c1c78561be535fbbcc9d755eab0266408aeb7471b9e50ae4670f73752deefc7bded4531cd104047fc82f4558696a60af235380158f66d59d3774a4047d2de4b6abd28dfe11d8d7233ad657b1e0441008b4c5b8c865dc68346c0139cc0d7a5da9d9c596facf6c49ca47e69616bc296ea3d15566e93a165735fefc9e881fe46b64f1486a0e201dde8da5bc37acf265708952fd8f655c0662fe339d8930b35af6e334d46ee8cad81e8385498d9dcb831e273ac58a88635c9b61b9263cea5a09b940a59bcc874cc73294e0bb5642e6da3445c256ec62fa9597c425fd96e6e615b33781dc38d3613cd1a4143447ee026d260db9c490ca116d1a701cea0f0685a90726aba3634f8580e00be612f3a4fce73a05d907811c2419857f84160ac84f07a538af2844964fc63856a519acdfe8406aef49c122a5331dd9b61461f21083bc0081f661a8e309d2b63fe28656787133cc62e6b111c1935252623e7dfcd9fe222531dcf74e0aac5bc31aa24b85c8c2c2f87a392c2fdc9d98e4cc94d7829b65a4aa68ed17b77d426efc7209cf7cb979890bc600c00c18ea26d08944a364f6eb7b3571b47196176fda20d62bdc301a49c5d1c6106dd367dba21e9aa182fe28f3a6367bb6e9ae846ed7811c5d5be969c8c4d6efef0b5b15b5fd76c2b464cdf901eb3fccee1ffc7b4e625f6d1f815d6fd38e45b3979da0ddb0ec69478a6de0bc570a35a8e82e52dbb99b0d6061879439c7cc70e91dcd300580070d3ad827574f1106b0bf96b63279e07a594391d1316a16131fe5567b132f6f23b9223cba0cd8f809027070069605a410bfe564f2f1c75b22cfb5f18a4d1a9718259e888cad194af29441d8b49b7a226783f7500ac652c57593dc8a429a537db8a1952a7ace0fd093e245babea7865574de2e5cd7105f078764ba58abce441ac4cc90398a9d65ad0f25bc0c1bbd2c2b4625f674151d5ba9fcbd8dceb5495b1af0089221e08d07123470e02c8cc264d72c1b09a93a14439419abd53ef4570eb901f2118f32d3984758ca714f01c79eeaa0fe37669dd6219679513d6649fb6b57884be9838aa0a8ec74279197829fb6895da827fecff4c7cfa90e72d062c69e06ee9ca3699431b21d5ef0c7fca5855f2f69098fb93c0fd2a4ab91e1e56ca94f7749ac686fc82b811e0afa1e0b5416e555eecd3796f72c2263ff8c63f176edc2b01b06332e91d3e782691fbec9f3d47877bc36c151545c7d08993b0fd70f33e721f97f72657a37d14f15a4d883074b0b286e4a8be15fa747b553f8deec347092e86121f788663e590ed91201513772145c5807fb08b37757a268dc02674e1a9da810899f7771283f3832a426418bab99bbca9e6b6959225b3f518c90b84348d37c20a9369bf7f15c44d4241ddc15ee0170859a095ac8ce26f2697fc6220228a16500464bb7a60caa4b8b5c2216422934a05401b15388974b08446d6aa4be6d30b6a20a4f018955cb1cd3001339cd31a26061b350d60545b8cb87c01a9e084efb265f850064eb74656693a0e009ffe97fb1f35a6fdbcfa9a7b65ae353622d3513d3c2f06e0d86da3247038048382cb5d32cfbc2bd28bebba83fbecc24da5ba681c02169dbeb5c7e867d660a0e50e128323bfc2e52c70bc2d193a4a98bbeb10b4d0350427355e31f6d9c66e1592215a977a3c24ca0384463c5607750e90eb8208a1c64a9883352a1d4e98e6fc54f4b45ca34d943e58f76328c51d9a7931ae7c5811c0504f02e1da9b6d9f2684c35adccc3b74b3dbdb8e7efc17c024ef2c49a2aa8e773ebc622becc924a14a0031f63111a4445cc8fc6d6393fc6503750d29180185811438192161d631faa9f0125e5a54ca87f23458c8db53b88819074b1816da7487b1f1f4d1df73197bee591ed484671c023c9a16b73cfd057d335baae77e2585b05b07b070ac4738ea1368f352193680978ff67aa4d13ddb8a51b52c7e8b39fa22cc429ed4d690c17b2c758424f2fb5b371ad8569ed1efa921e346da422dbb3f7d651f259d8c2e8fa2b18311e5ea042612181382ddc225a3788339225201a6e0c4c1f50cc88268256baf3136cf36ce8a4c07ea8715edd3f18d0f251e36af924c07ee88fa671b77b480c19adfc13c0e00f9a3947f4770ed37721690d175b5cf29b3f660b0bd47ef140f397012b05b614f637b91f8956f5561f65222b54d2aca468f5e7e91accc63e59ac6c71dc0487b58e59e9a3bdac2bf5f2c790db79b8d5965a091a103fd826d0eef280741c91dad7d7f2838b5ef0b7e1e8c1b7e19af9999dc68348c38b199ad68eff1598bef928f074be629417cf314fc34872af1e75218cf11ec0ebdc1434941aaa7e946067999cffe1c8c654af34f814f42d5ec60b55cf172f236c8c8d61c7008f2a22f440bf51c932d61e1b4c166c271b23f0b41d2ce35008fca051ecafb6b8aaa7c1dd6a7e5076b5851ecd8b2ed1d3325dc0c639027154395fe618dabeb436a35035fbe9aa739b770bc3363b2058cd698a365fda7140d3d01fcc2c448f678d3e41d5916ead64c055f0cf839c2bb63551207a71a80961c1b0cdf24c6c7ad4b0f37ba0ed48b26656da1a281ffe4808949fed03a79ff6e567f1a4b8f3fd6dbe4c2d155ef0e81a0fb3713ee8e38df9ae31406a84c230f772feaa5f71cfe062021fad80765250e26f1a383603c6b8833473695d4272c9eca2bb99e9d51144d69ea17763b55d84dfb0a1c3a3ef12d61a126b9c7e4b7d4178c7b68b15a1231e6d3c0d2c354c6d95b488c20da1286c3eea49372e3134b0da936eab36d7d7d5c28a10e438cd91cd8dcd97ab44f1d34a79207e3a0a2a9d3da4348dce8d076c4e1efc409690cd6daf60838c2b3c2c79b2ba86dfd05ad2241b9c68adea61cff10453a38ffa29a2e2962232f76288e346bb2201dbdc08cf2c48f29a4d2fa9a33cddf3bb50db1389970f8ae381a949467312d4f1b426a691504d44b1bfabc31072412ddad720171068f59c42dbc3fa18348c571684edd5141481c06188607ebe45457948608302502f674d8f37ae85aaa039ec6098cd4e286bebdc07a5ee1db6608e83d7442f97d4e583ebf49ec72ddbe09759a2b33685428ba0ef9b8eaf36c53fd31c6ecff127791064512e6f2cc0af27364f9b64d42d8a037c8961e8a672999bcb625b8a884b171ed14ad17f020daf1a339a7d273c951b9dac50d0c4d2b6898b4c1946a9d998a64ac33ca86c70ed41514951137e6be4bad444ccd44cd883320fc3655c4ce3baba459672588db2e696b35a2dc10a57e02db612cfc4061a4bbf95ff61b3148f965b43a68c9d5f36603e12e1b14e3f8e0bad9cf54ca8df762d8d6f1b62c7eb097e58a8fcd07e75f96a9a4f663aa2921402c44e939bfabfdfe0d03b50c1921f5e3a21707eba37dda6ffc421d4e63a0866e17da59d61e1701ff2741bf6b1f39f0231d590586a0b037368dac4416b43d13f38c2633053b9cf7684115f723bb3c7ca5d98639408cea59665025e3123057ab5b773d88b8b148f9fa5e1585f03657dd99df5a54ad1975dad2f295b5fa634879da32d9ce4f2e23c4a67bd4d922cb55e89c7d235e1ac71c4f6c66db0478d36235ebe4d488807011761e071488ceee34cada92c294085aaa4aba55019da134bf672d7973f9f7990c7c0a9cd178f2ed9307252bd63a4a7a0f8985583b09026049614b1f03d9646f7f65be7073622d1bd84c671fa957f35eb953e87590b8b15ca7e23af27a1f0baa3560a96ecbc6e3c19149c161e1fd276b80b15f98e4f3489ddbe40a512f6bdc4a459be585817fb4e5b053a60d3dd4ae27a09f8e183c0d87e1bd08694731d3ffc2d01aeb44978d4af4c2e9d9acb6a4e7014bdc633fdd2dc88110568d665dec3b320655535bf70d2c6bed0dd138b64af18c1af9d1333a3b5b7a75699f2c743dd7bc9d0c362d3dfb6c3c67b732fbb73991d039512a74016480397c67bbbb1bf1b34c35cb4acce1a4b7a9e04908ed50be53dd9e4028aeaa6278feee030369f0bb9cfc6a486906939d59211639c3085314976865d814b9642016639944c00d4efee698c159515d698624f5566b9fafd953f2221bb5e101f006d453a8caff3fd670e6369efb312678ca656240fac74a9b2c3d57a7730b2265552110f8f9d915fa9152ceb71e7ecdbd94659df7a2033aad7f35953655d31297d8a424907f72428b3a1bf7d06d3cfe313b75eba9defcb7a65bb49eb955073bdb21f8bbc1edac63dfaa037b3435776c3ed9d84308d3b88f77feb552559e101e5d2cedcad125a53bbfa321cd9fb2951a67ee78c3c4bc6d98db9821ed39cc2c6df972f579567edff471b4db86eb4e5c6943cd3e3c07aa219fa625c9b7b196aebc4055b7169fdfd60429e0afb45ee330cb6bab0fd488347e6a156fe1256db4c9eea0b553121b06c42009be628a6e6e378027a63d8e84c72206419ee923b81983a8fdea904fa61c0f67aeda00f1f87f88872c54b310706f5ea3b589c7dcfe903374a113083fee9d141e98fd5c18fab1f2c3fe694eb122aedc7b686d30fdc09ed010f16505275826a196feb76943329d9c4fb403986f5ee1e49e971101cf682aa094dd1789756cfa65432b4656205d00b922681d2f192c690d5430def80a9fccd72ec51c9eb5b9a9e6e8c69ab8f084abac12803c3fb699972272c7b0c703aa8234892d4be0ab07340aa3926578d5c4a3cd13849fa6c99587ef1951e67180b01d85606644f833c943aaf1bee219673362af5fcf142099bb6b634fae65585fcafb5d96f553afae7a809f8b03dd20f9afdf612693267525b7e3445b2c172e06ea24454e1297a237504a302bc6a179ffa90325aedc7fddf8d407c0ce5fb2a4eb368da889c444ef5802591b1f36c20c93248ebc81b9b41951b9f0b205f87cc355e4a8f66d4aaa77671ac223b434334317a75f80752767c16893bc83d2563beab671963f14209346432e1ad8328ae7a58deba2cea8c15a46b21c8675fd5fd00926b4a7eeea177018e3c5aac52908e56119e7c0bd5cc40b5b28ed6e8ab653e87b4403bc2237e50374e630a269e2ec09ca2b50a33f8dbd0db6aa0703c3fadd35e3ff4b17c62fb249e06dd85299cfb24916a81cf9c805dbb8b7076fed55899417360822eb70a826180a287266f2f30f9403bd296498534c058a37f49a4ca14ca4f971d2237c08214c2d783b1713e651a31a2f7882582d5a8446ea049e94c6f61e95a80a8610c283cf34273821370a53be7d9de416bfa69c99655cfa4066248a099743dd79d29baafb8ab20996934fd363e5219543841e4cb99e8588bd8147f7138b9bb0aef43d4087e2d22b6e5eb3b4fc2be4ddd76eb6a0d4a0139aa548c26098c986d638aa231ca604542f41663ba3e769278fc00f124db57619ac9510cd2af01435022385c95e875e71caec629e25be7b28d8037792a909d7bad1d2f0e0cffec1ba5905e7010f8410dbb0e51df5ba29b24d52fd792976dac1c11a0ea84b559cae6eaaec346b50cbd25f8869cdbf9dd4a9d1caaf74e45b2efbaa25aaa27f1aeb3b9794539dfa59cb26fe5f68ff7d1771da6c22e30f8135a8a0fcb41f1c1bea4284dea997bba0533c793f28bd4fea907c5e90232c07ebaa50a5995225b473f18c5804168fdab74cb1f5a3ace3dc8c06714dca152937128b8a38c2c74080658121f06b78add69abd3e6e688f5ad23130e7d02afb27037016bfec26959889c038d2b36bc1d91bc1bef5fb520845b888a932345e19addecf213a1cdd337e57e37794f70110ecc9de12765e3672858dda8be3a43bcc2130c6320cda61e028226e9744ac07b98f9ef3bf9b71b5b6560204b4049ad62d50267b9a3807b4fb844b0a7fa91f6db4e36015ab3ce3bc87b4ffc19b9c23a20cfea36668e2b7fdaeb9eceb85ae0558484c7224c9e8ace0f88c66d0d63df91f8bfb1813f6a4a42f46d1a296accee8faa293084099ff7cb4d25908a1f6fe73fa608ec4f545037e081c72e47840adaab272078badc353ef0bd494c9a20f9b057ac9d483a720cdb619506df68b2aa89b6d903f6b0d2e0c27ddc30e4204ac4270d285fd80627a52d6c8c19e79b25d868aefb6963f78077f1c1fea604ae3a3975cf8fb527b8dfebff80fe06561bcf2e036929eb5a03aac90c4672716e34c096d822886030c45a7d4ecbe3aaaea16d39a658f4d612f1335df80d090285238e3a3852604f43629b1db314f8ee5590210b71eeea4915bae0e15de12921427f05725f2cbe50a6f8a6607e038b6c0f9c72ace01424efc229506ba6080e2f5b5336a417125d310a57ea3812b0551fea78d653959b08ef13b43f2c7afe6ba25f7ae7c4942f5ec1d4e2cc5202f9ed0880ac1a181ac525384c84fa5165624e01515ec13e41222bfff90a808a27d16d3801800d53a08ff089de04a1db9db5833aab6f3991ddf51c49f1208294db861bf46d4d110419c6c58dd9eb11a7cb0051755e1725406220f6f0ceaaf2a69ba2b06d24eae900c6187b7cfa7b4561ded51127ffa327699d1345d3d5b1bf39367bbadf08d99a906cc06f38d026d737526c270fe6a663bd9915d0f3570d6a62ac6c1ce19973b3ed62fa2a2e8c4647825157e6817709a9998a60aa9ae0f7591cf53038e29562a9eb7a33027c2dad7f64d22021af9448f4b882bb732ee9fbbf3d1e14a778710a837056776de0d954e2bfb6ffe8dd62e9876d59ef6f8a969063cc3d21f8fc71424b506c92ceed184948d337b2961872a3e534ed22eb73c6daab38fc46d5b41cdabec01ce60710c319fce7837cf6b91b2c9ea5b045c0aa22671dfad37401f7ac6ed95581111addb4ab1540744e95c11c074096be460c4f8183e1dfa73da8eefe8bfcd4ec6290ea7e03c514d78f12446665b3dc675b969a1e3faa27c65a20470a0deb6860e891824d960caa605f13a00e61e4d0a598923de48c4bdf52330fe1acc597741eb6d985b9e4a214d0231a2e8dd5786a49128359112e2c6625bbf1b72a0f644eb8424c1b82119aefc0eea3ac135922a4ffc6e4527bab3eecc3e3de093c3505eab2d085ec4e66cfec43789b8b461ee113164082cc3544a84dbf571803a1912cb326e6b35ed0ea2a0022b5f02ebc4a8b07a761eb27b4ec6e8933058a43692b730bab98e6f82270247fc6737806b01b3897c0d85897b15fa897d6799ad078474325440db80942b7cb2f7ca9e14345a5affd3a6308b904f70dff90e25714593355e629e19b7c16c90452266e1f93a2a88e15db460eaee21e157204a9266d80505d0314b30afa53b0f2bd64b258a583553f24e2cfd6d590c22abb5890c08100442e5c7b1691223552d4620b77405cf7048716c09e5a40f8e80ef33830093a4c352e3595120780b4e7dcc6cc5afbb2cfd4121d06b44049a2f65e586bc64203721ed5df581f5bac17deac1c3811e5de92f742c604bfd93ecc18d42a0ac71fa7ed0ea9861b23ebae21b07ded15c8733fb957873e104cdf8c3177c62a3b38ced29389f90915f614c8d41b11164b31c9c5e66f243ee11212ca90842e80fcc48fa5421f397b8c68f8cb1004465ca7f880f47a70b0c487d864ec5f67e065370b86de23156a1628e5eeb4d366f10537183bf41c0c4f0e3d213002f058abc37a91eb4a83ff41ccfb9f5846c8b2fab1fe95ca8ed2b2698923c0de9411ea300e4e279b5908a632ee928985bf4c59f3104545d9347072fe28dcb1b06f5669cd512c337a214b6c2104c56af0afc02d411dc206b9d22df256a7fd2deaa376751d2ea50cc669aa9c14f19cb8660f12745bb7371ac1f88ad7109cd84fd40847411a3cce893ac08d7c246e3a49b70efb60c19655bbfcdb21fd637c39aaa5b2cc810a47d5e8b21e488f3ebc08b4f3ca8a17973559c82be87237671c24ffe8f55e6c4ec20e9b87b0200f9b1a14e4b7792d8b055d032302c7bcd00bb4ea92c26edd3b719d301f7276fd4d3f4455e4bde765a7d62f1ff65abc6caee6d413ca5a77aab80aa2d4d70ceee910b666f44104a72c9b84298f49084a4331b44762e750a39eef060cf28685d4f4f373443dbca322e2b986ce347dbb7b56cedb1ef0a077f1202fae2178704a2466f7348d2da0d4d509c9ba60ef1b9d2c1aa7b07c9ee763db7a0a85fee34de6f5b43d342d82e9be0f3157b3af9e54f38db9290d6b626b2d546bf845f2a02ab24ac933f94080db64ba67e2ae97f6e34d960e202f8a45200e70f4e553366abf082ad116c099616bb8ea3e464c338c926439e64d04305c5983aa991a8900c7da609f54424df0341ae8977d80e4747c4c9e24ffd39b63db306b0ee95cff94a0661a826d2662050b22a5da48efb8b1e22d2f0c0a1200306097350bd07e219f1ea9b4093129f40e5009d3311192f67773c45b3126fca4537173a3cea73669f0fb2488585b17df23ce8a0e0f8b64f4c7624a14a79452f20a768bff6bb1385d620ecff124032410bf8e272c077587a898c123dfd97eb4a07b01c143a16d70896eb21ac67d4952e56acbb1c4465fddc6b064d8d197046071bf34618e7a9bd63eac6a07d4f75c4c9594b8d1fd64b395f1a94c286645dc0612a36a39efdaf9e3cfeb5f0a868ff9e8df373c577581bf17e7e9711062a560e0c4ba69fe35204f13c5cd567613013c3be30bd51d4550262d82532117de8f3cda848eb9231601cc6b11496efe946ebaa74534a85be4b5ab524e9555918f49ab50310c8e533693bcbafe68346d51aa44312a27a78e54821f8a87bc315342cdaa0c106579df3ba321aeaf65ee86bec4c9eba24f91450e1417617df57e4a25617557af4e0aa43ebb4c22526727d2634267daf092cce65615cf25799da3cd567c4ab093b2fe4ac709853855faecf90ac973016cbe2461172b12fd974519883b9888324a3902d13daaaf0ca8de6a9261f7529f17438ab69da1c73b99902eceaaed76e3e7069b718102953e5977bbd19e476ceaef27cd3ffc3e930c839078c499836c9304704d473590bb4d5638a1720cb2908e6afda14ac774b1b48c7399c20215aa707c10ab9262e1f83befc21094ce2f76382cbb13322d606d08ccb3838a5676ff8ca5467f9831176d41fc5d8fce8f8e343b4e19186ef5a6b9a11cde376d311706d514316c36dd81815e1e8dd856d7c1d128f1ce48ec56c3e651cd106706d8a7954c9f3b29294da1f95df87fc70c629ef3b9f5b71a60d518179946aebed42648b6b0a57f03f9a05917e2154c0cf88ea05d2caf9e94f0360ee3dd044edc50143998c1fdc0d2829a11f70b00b2163382ce001677f88963b231bcb4338ee5532911d523b86315bfe03798772200c796d4032e16487aff8afb38e0ad19556cbdc67b5e35334e5d32d53dedbbbf4b7fb376463700985988efea6e0102ec34a57fe4e848bc4c6ded27e64586d341b800113388319f8f2f7dbe68c844483d32358c4c8f8cf947d94de7323e8a92158b43e9f5314089e8a0128037e56e46e3308bd0ecfed9549c76cc8f1e0c046e3d375c60c164efef118ffc418e903db32fae5159c467368234245d3524da3c4cc3cd483d762e4b25dd9d0d66236356f1199efd37e4764c28b5608e61a98fadd338637a59f4c42fad014464a0130ae454dad54d50d7848baafa236f441d5a8fc7c37bb6bb9a9f02828c7c440b4e5056eccf34726bcb895a0edc65dc2b71be7c6cecc5664df207be38c3c01b42e93e7a5547e387b05cebc9176a4d03204623b4760bb5dc72de8978fb69bc65ca041e10068391e46dfb80822d0d0e8c42326d33fd0896c4b343b7a19daa591bf02b91dfb775b3691942a2992589110e9498090aac463858fbd145224ab8d0dfcf4ceaa68911ada870d0f5bf968b05540005fd0d64132621f491893bbfaf12f108d81682abf2fdbfaf0eaaf3953323630c67757e53603319c8db9a3b9aa39ca26348751342d6d03b7c859f9910739508463e2f74996f4e3c1c22688ef4478018eb065da6d7defc3cf539734cd3c1cf569b2b9a3956ae570d5accbd4a555f1c66dc09e75d4b3633ccb1cab2c50e0058f04e820bf782390e22d8c3a15974c2a707cc912cfe728cab7e397a4c41ce43e8d30c849c41c28248768783527f5a306c26e1a397ce87f51eb6cffb6dd2e7ca55160146bdbad45b2f173682afecbf8c947d1a2c744fcce016484378ac70528549e350feb1c2b9395a46fdd2e819db17f0cbfea6588d889c9e302256f66b55882fb3eb98e303eac687e06720cc3f55a5083a1375f103d07b0ecac088204f13aa4ae2998e22343ffb1830c4d549aabafe017d144da2dfbee446815e88b6e99e66c4aa7c6f49475dc8fc2a7e921e438e94fea791fc9478c75166709f8f9dad1a81f2a0601320e077519087c3c5d6693c630648a141020eafb1e703d0ea8ff2fb3bd709fba38c1bdfd6b7ce67dcb60c73eb2d92dc9af666d77dcf636ba0811ee08b6378a278c31a4bba8ee67b96f6aac9ac395ca2edaf51491b24386269a67488c996f2ada491d6a31a6158098856b773cb01f7d662d15cfb3c585198978af48ad1db30389f152a32204c0e72fcba0644ef99ca21981702f6a969973b6072e1c261ec67fd9f09cd862f5161da2df495627e2ea4ab62bc9d38a4d44e302db493fb9856adf6c02ad3207a2ab0f76995d889b3bd167018d8cc8a85313e206f193c27224b2daf857a7a290a6a2c2c8642fb26543a652b201aeeb2794243407869ffd5dae741eaed3db1e415a41902cb06b4745f43b622f1dd29e593f7c97047185831bf7400dfc4883ef14b5e31123f3a2c379c27f5abc568cac17ec0b52a373fceaed3bb78ff27b2451f8e3e9a2b42eb7b172acbcca7b0928c863e317487ebb2234f31d8748ba167315e6a21599c98188d01633d20fbc9a737eb9a8d9b801f8cf0d4af3d4825c234104c711a0225af4569a8a4789b5653c0228118cbdb9498d8c91ad29fe531dd8198bb1203e4c882a3db83ac835df3f6ec5ed32ca6755b596b81b3927c08f41d3a450a21d9e91ba8d3f8be99f900da390ed2b643f58f8e47241e5340f2e5f76bbc2c836ab7772b9b7ce2787a4fe6ae9ddae2331e12881e9f0baf2960daf5516dd628fd2dc7adebcc012e1973e083cc39c0e5cc6f92c8d6aa34a7dd3329754d72c5a8390d47f8d40c08a28bd3ea7b6cdcd3fe919a22bde6c0be46ba43936c779d988d44ee1476cd69045cd1db2889f24dea8015972419b250dd38befe7521f96bd5a9b8044bb889808e14caf6647bd2e013106910098861b713bc907e902623a63ebe81c6111da82c27e7ed4aebf81e6267d28fdda96b1b4dbf8abc8d0dffee889dd4685e643ff949964a71c156c22481d16f7533709b60c8e246ac55a2d0e45ec8931af180ed78bd8c2bad78d450b6a3c9576428dc928c4aefc18be408c81986da99d9392f4e0ce1dfb110a5bfda14afc6b7e48fc2cb7f98901dc073619b0f7b23e20f0cf9577be3fcec95009ffa1139e6d55d6a52915885e25858bb82945a565239daa21b0eb926bf81e9a314641f8d4aa95ff24d52c99c9cbd64de3ccd2742bb903ace85e8be533d4da37872469d6bea9a3c5bbff087bb96d63dde465e3f8f7a59c0160d294d2d3874106889fef111ea0b7b4bc90b7219fcf366b6f3c2eda3ec62977db80b699c1fecca856eb2313d8e986a0bc7edbf90018216a6dd2b1f4a73852222ce8dc466dd63a2565c0b9b555ba26ccc63045444037349f8e4cc654fb93c89384c461c1bf759f96046f29ea2f634e8d5abe319dd3bb153875db832ff6f99c40321f83c496ac610c1e7b7f028679a25117cdcfa3f5e352e21c4e9beb0aaf9dfb1b24753421cf416cb281547abcdcbcdad72f360fc8838cb6d50f1db6a5156d7a2c056e38e88e407b8e150ed5cc9151b3cfd5f5857becd9d5c08525bb682470dbdccfbd605a360e960515bb575c63b23c7e586300890034d143375cc9e5b6f4be9caa7f98573fdc1663c399920c002e191eff4976d3b12d273f0f2de91fc7c948aade306ca9b165b0b28a07c38f7c88fa32a1a0131a9464aacdc791afcdf31044b9eaeb816e2c572945a473512af2f3982f7afe023c4852577e60ce143b48f68fe8e01aad066f8a87bb945f17b13ec399398d270cb4b3da430ca36262d5bccf08d47835946d8a16b52c0bdeb0b4c53dab8e52112d5743dc443d6c38a33395ceb2c7088e98899de4b8b9f0f30d24a2862ab4014d22a22ab000b19ebd818c9c9e164589c557e2e486bac4a4dfe98fd33c016bb6976bb561bfbc1147b2b8895c052e30ba1c948849d6182d62e5fc42799b1c43d8b4b81a6e082f0f998f7a03bb0173bd34a0e0f3963fdfdc64526fa46f910fe1e433b3ce36c6424414f725f3895cac3326cde98d64e26beb14cbe14c84854320ef7b144c8dab0aec6836b88b2b6a5268ea88a5f5a6b97c577cbfb802f4c9ae70e110850a99aa5e5a250b861e5ab4bccd3f585f16039734f143ecd29fa26796f7c5386fe0355e62b8f4eb14d0cf2f6c1a7979e686fc3e587239a22b078f9c9c7b8d1463d550d262f7394eeb1a33629d4222ebd92d370f1a770620a8ca9cfabc2f36702d45e0a0fffec72e74c05cfdf2f41010fc1b1b818e8a23e4a03729232d01815f906f34b932fb922bbbc79af64fc428fff092bf59305b16fcecf435d28fe82af1a560c3c3170510acb0d716992c38c75540e576ef7251acef61f61973dc396dda1d0563aaac30960c052496ab75f2224be85b133691c40939bb37e856ca38b1c34e10c8226fbff54fe668ed1a7b2b6dacbd3b56291dbf5dcb32d8708207b4960165a7682d04dc0f8b3377233efeb517b9d37e3c341c8db756d4356c718fceee7698c48c9c51cb88c4981687ff0a12f093ce48d39eb26646b1f79d00a9d0b0327e9713aae9b40db007fbc53d311414acfea4a1d0ee9c6967fdfe87842417a3cf68f1eadcde3d7e25e3aaff92c24a158ad1ba0ff8d787e50352c577cc1ec0cb400fcc0f8c50f5066041f81a42558ef7facaa62d009517da6794635b12ca24cc5000503acfc99342f0a20103c3c509856645040a943e0d20ff61dcc6322bb5ea0af91b5a1f7373d5900086df6f4099bd58010e525b066757da7badb5cb045f2f6ae3f0d1621d5f0f4d564e49cc9103d7ba7f491f8fdcf386331bd06cf0a09128adaee939b57a65c5865e90157703918a8d9ff0dd58a99e2706d3a5e97dd1062db7d1c6c5f1e0010da0d8d4e87f244bb50785233c31f9533a261b847c4ee9dd49c6cafb2b9499f9320ca20572d0b88ad1b0040448ac06982fc88b28a469354a8cf11c9e4ca17ab52b1134aae88dcaf4176730880723ef46279dab1ae5d1fd088720058d5905a4bd534605d2d1dcd340069aedc0b658fb6d495127ed592eb852ea0716819881ca32baa355c256c138010d50c499007a3a3443e6905ec7b0110eb0e768957a162ec90c7531665d038a628bc1b5110b3efba192c49fc52a0cda67704594446eb254d5f524209c2d7bc21ee8738f0c32b98cac431b4dceac24b6dfb7f4e138e353cc55d0501f30d1e2e77a7293bf62f2f810ed622d0035db42796390521ec5b5bdf95fcec43dacb07362156b94432abe4fefa98ed6aa189165226d3e761c91e0e5a65a437646e9c46da1aeb1386f47fdc076c4c60a80a057eff2c6f6b7a22a4b73cf850661519fb64ea72920f1c789db928eea039b4d546a78b686dbdeee1d06f6841bdfeb8b9a359252c2244f2cde334ade4b8cad39db26b1d3c2f8546f9c7a8b2605f0021fc5511fd7a3f2479babd8c0e30a4dc11bcb6037beeed204705d303bd665033e3b35daed3a550883c8763cb1b54f66439d8a13a5ee1542b07537dae1c200f83327a4e88e0ba6e873ce164c8214307d403a48d858fefb450d56b7275555068c7215c14e5223d9721e2d472206c23ccada4e6d542d0b6ce99bc0e7822f33923a480b7e35404a625f07cfeaf3c663e382bef68464b17b3fb71d7a26a1a10fcb1e66cbc9d3e86c607dab286ae92b303b52f98984570a803bc71e6f1073c61050f17c9eb2d9f206c8e4512ca597033520d9e99d4d770092d1a5d1c139488625b9206200a276b91c3375115526eda4364482c09fe754a8b2cf73e463ce921ac2eb69fb1885f67f5a73234e5f5752a525a176ffde9dfc93794586ca081cd005ba9d57429236ff535e286a4e14360b01e1030a226cd59b10c29e88e1258403809a7d3841cf6d2925eb25234bc194bc31da32370a02116aec0bc81ec4d72ab34bfae704c6730644443e1d9992f10ede4b8cb00fb894de45ca9260e063dedd55fac4efcf19d665731787489f1f40d6571246a67af2fb9371761415c7775f62cbe990c10438f577664e1cdbcca9349067d0ee6dd7b3a989dad136ddd9ceeb0eaa9b63b06ad5e85da824b5f741c94091373ef3812d35ab24567f071e47f1b8f54c03d61cf610e078127713bf375a27347ba07e8e25efa1a489a9e59b4726f8d3184c4f4aecb64c1357fe7a0fbc83078b561c62294698b7085f1304f02658efc86a963135e4460cc344a4d74e55ac4c701aa3c048acba134a25a2154c56c6cec6f12a87eccd827d39710d85c1eaf93c568b722c38ac6581dfe12ea139f63cdca603a5ec68ae1acd24322dcb76bedaa89f7c80d0abc0b6823c2391480ec1b3c77f6c48dccd099a9caf0ae0748121b5adec2a749db4615b26cb93f2c40998db6747f18a040b1c2a413150962bdb418b40da7a3e901015d3413d359a2fd9e068743b1eba6ddcfbdada2be34a80b7abe543d552e3fa615e2af34a6121ad5dc6d67da8d7e9c22a22c21c10369559dde505fb710d5939b51e8ca1c10d597045122d37fc6eab89541b4b71ed9b74182a9c7497cd20fc83440c94a0539e2343e894dcf03fb33193fa52503ba0353a504d49c08c3d971069d93c68b7ee601edfa494492c93d820ccfe3ee09ebc6bd7c626eddbcaad6eda27ca200119c702c73018ba0c7636b7683018b5a4737d06ff00c78ef4f975cff2c59b61bcabc64497cc07dceaf9a7680b0f2f96b719aeb6267e133a7f730dd7726b48cbf1affe1d7bc7ab2c478038c1714e29247c995f3a2ef771bbfd71cb853d9f818bc5f6c661476214e29164c2cac7598d69b27c0e0ead5c449f46d468723d2d2191ace1eb6ae0d84d1aa70722ac15c02ca7828929c049f90322e932e00a5d746b44d166dcc97f62c012db2a25b210858d6860afd87d00680754ff9bfcae4f8043342c9372c21f1959008574a0cbe9daeed0d9135230c0bcd27f3dd71f5b2d453453d56c5bc6bab8118396bec2d3bf178696213e07f3541b24b3bf5e79d75f1d3ea9fb12486e1224c1ddd70cddd217ad567f0852b1d12d90776511cfd197c0d24536953aafe0c5a4bfaf4cf30a120b4bd50d0021ab3203300c5d9f0b4e2e2af485be56d22450cb3c168acd7d0e310121060ecc2802dcb8745575e55cd85b765270eec008868b8a1888cd39e886df22d739938efa1a5aed23ac5e1994e76ffdea6b66980bce8642865b9150521537341ede9a9fa65d6f1bea314fa0b625eef33344035b70ba1eaab6240f6c48c7ae4b29783365a8bc2e4a73b7a3956f0241ce47e100955ed6fe6ef5a04d2e0573c589ab26406701b8c1350dd08daf2c886c6167d7d26236492060420643775008568aa4876f38463ea5108b1be6c5344288c5b6b43a90588ccc407923f9ba6746b84a20611ea740a2d50925e9d3dc3cfadf8d3a6ba8b255ccd3071772e12f7c841e0dd85223980497ee19882c0807ecccf7dacbcc02cb7259aa606e595101b85b5cb0a622677c9566ca2af0f12e56ea835fb143cee337d3f3c53f4bb5c361fa775d65072b49849d6869d15f18389e30ba67f22be19d2e934a068d3311b4eee10e00a15a9eac27cfec737f1d63bb2bcadbf4903af6205803bcf31ce55cefb507f857d31c4b3730b30bc800d8ef54491cc5b873af47a4464a85aced49885b326b46f3d665cc781b4d2236d155f9125502bfba093b860b3ef764af5c4bccd2570e15a2d2f7cd13dd22233f431a94b72bae9e2135f003d8ad4bee5fefb143828558fa1d68bb3dd4ed613fb0dff6b8a5e0225345c1a01ef7618ef4c097be235d93af45e4104693606966fdf1f6b0d7c84963b3479c247fa2e7382620a3c925b4e3c8a3b098da360c37aa180e836d478ae5c530159772f01b5391a503d0cb1bf06200e01510fc6a36d10e2db41ba75e9d14739bad6f9119525b3c8208c3271b23e1afc3142aa5de037818c706064867a7a369f8892bf9ad7504382b6b34921277b5d468a985f154aa3de95734a3d3eb40bdf257b5fdf5d1e051de236b2f77b2cd130d4857542731f0792f5cdf9d7032cfd7f2663c658e2fc1ed5762acdb462c2a61ec606e2af366065c4d4dc191bbc89fdd1b09b3786a7fdf4630961e50b2d7c1310953c1dc4122fb37f92d05f4020cc9472eb39e5e403c231e2df1c43b3c14548dca48f6d61dd0afdcc340b3102e8e7ea59b9513337c410bca8950aaeccbfa19b5742a5e324a3715243b373ae8c6303fda477323e3a2d304b94f3168860f30ba520660962dc7feef554df832f3a10195e239aa892334735b8ab41e70713bcb287535e8ce9a9307e4a23440b7d46d6259b17e4076c24f17d57c14a7ebe82af1f81adcca08152028f5d39b9c286691da181e03fdffb89fa894ea05df0c3b09dfd9bf3545f445dbcd6185e98807b108649c292897b342fdd99f691f099acfa697a499b7de2efee0b33c304caa49ad0608de362844df60f6c0b2b72d2417ef08fd93108ffdef018ab0046062d6acad972f12a48785719f348ef4f5ed3348ec6767902fcfbc3feb73b1dab3b538cb90f2def801357d6bdadd0616e6dfbbb6de6afed7c183412522d00c213950afd99ce5d260f3f1750fced211f316f48bfb8001f4d11d679a8ff010047b945a2f359e2cee737fa38bfc0dc6d10ea03d75c1cd50bc261513bf4c4e9e726defa89d7b42fc3bfa8ee54099d15b1d7e703ccc41bc7e6e4f4976e088668ceccc9a0006d3f0b263d86cf7ea8ba5ef4e8646172dcfd0f0b4970520edc71a7ba389dd470a3d64900420452f8f174193293950900f01cbda745f7386929eac40efe41d16aefd95a1a362502cf5f25d3f122ec3e0ca3ce47455e37247d72acc47d2074428aa7212c3aca21c4656a9e5c8dc07c26bde7a62fdbf5224d933718f0ccbe4a4f5496a223e4baccd889903451d0f584d03efdc7e9194a7e4aea8d0a2790788393fccfb1d30a1fff6222754fed210f5c5246b3cb2b38780690eff5c5f9a05e8a5db06a0324f9d29b7159434a3387fea43f1fee41ff0c89ae99e16cdd440828adbf2e8ed2310ac4a3d940b03b363ff9f5a30e44326908e2f3d14f6a15fe5338a791625b42b21f5a4907eacb1559c78e904ca8c6dbec7f1bed1b01f58cc4e0ce06c0331109b43c2dba0acf6c002743219a03a488e71847bc1814c6306cbfc3e1ffab9955c75bccbf11f267b2be8ea6cd29e8349316a855db27038434c3cc93531418b4344fe4b72287d425c61a8becb30866c4986fc8b09f29cc1b76886e55bff97032c07d998d6b41cc98aa4c273b1c1853be934eb15228c902d626edd263614b653b9ae5bb2ae741783b82e985d9d640ef7daa098a844e4d80abd2e46a52003d47273e861f3f075c1b0d418369e96995f60d4f8bc02c22922c972990d10180a45f1e7f05d403b0b51545526e14c80ab6dd9e52d57a8094c02b5f6a3c527b8009f597d7884b7783e3c29ad9e68b43c1f3b372a61ddc22ab569b8d57fb692cc065bb7945d7dbb41cb09bf33f1d92a6f6f40a9e11a4a1b8ff817d2c963d51f8fdfb0f5b00dcd93875b5c2a24cbd561fef2e4e26f2e9e2263e78db18b45879bb59fe48be3a4c351a17fdbe89e4225d7f7ad99cbf8a804c8f4d92c81f881259d283cdf9653eb78cc7bc775b2ac22eff3d5290926645924f302dca92644ea8e2a1f342437e5108956e462a0f4d5d9719703187e7c6635d0396695104af7aef1896e27ea9c3a9fa5f26d10cbba6adfc1df35e4b73b3dd4015b3472bebfd5fa9a1f7621f58d2a4a488cd06452f006b6b0a18509179b48e108667e7edabae8e911767b710e73fc5a7742e48ac61c815dd619d479ecb85113f21b05127fb818569d413930bb2ca5c2252431326bb812fcf1ff1202edd75348cd7fe66e991e5951b1c1f5ebbaecebd01a245ecd69fbb4a3dfe18425da373d71946a7f3a53194b17ed3dd7e1201c2a06070dd8e186f8eb267b58829f82e0ca3e122671ceb790dc84b6d0698fa30715e96b83b16cfe5188a11985899b883677b1a3f3a8807582c4cdb596e70d73ca4a11f2f15f87571e2d7b8f2099edb9cc787fbf327a02ae41d896095c659145693501c38009acf4e099d63697feb06c0ca83c502911b5e48d272743e00f1e207d06576a85e531a3fb3f0c792b2d7b8fa6f3911d897f5d019399a62ad350a2c177512e00eda9092c5417f3068454d34199bf5fefe61838d569b64c44bb1d2c535b6b7c4e46e23e5e40d8233c0508efdff282971949f783a3c200b0123bca64885839775f4484a2aa846428abdde0a21bab41a11140f1cfc7f4ccc0cd43f2ba841f6241fb29a28cc661b4c92288888d43cad077eccb37bce6707b8380c6c1c2f6ede8f5c92f882676e5366d6e7cdee5a512ae670ad95649ee9d61837f852a2918bd21630686fa7e585173c1413ba1dcc5102345ccca863a01a490d441f72a064fde55d89c5e4dda2e0c68df9e5f87825e5dd402b234400bd28864b161e1b5fe4bfea9ad1970e4fc12323c24b35c9c10e3bf8426a210369f56b9648a0ee00fe052583b8fa4111f8714e9397d1594b5d4096afbb207e699412061880ba7de85288d48b051fecca876df7055ca5bc09822cf948713e0c55465a455eb6e53ef41a17b600bef241325e30b88f71ff84e141cf6cecdbd190676e77adf9715a2fb02b9a5d1e081f380e02c027f9e0087214e0cc10f067ec3c6771fe712a04eb2f42a9c1f33c7fe38516cf0481b9e539c867f314362d9f4e58d33d19c6fc80b4cf7526d0df715f7018d2605993bd39cb4603148f78468088bdcdea55fc7cd1dda5e4d40714c15b6e28e4630426feb98b4540ac48be51b8191ce6a7d150a0f2d6cdd3654ec18bf24ea448f732ce27e7ce33a51e8b1353426873cce61d24010d1ec89711b07456a7daa2de0b1eb39ef06836500ffe4db4d3a9b820c2ed484113823872ce6247ce43d0d7071d3b46686b2a8ce1b3030cab1e34c7fb1599115b9d89ad5528f39d17c703ef97887a28c8329da7b161820d033d05faae6cc2a334abffabf5ec5e2ec71b314b76e07290bd10cb7ce47d46f073db593c7ff6e93cab606c4fd7cdec3905d4e06ec87c1a7cdc3fcfa73a88fdec73e4379ab7b1fe4f6c0c22763b225ff65cf7afbe3afb03a7f06dbe0f9faf9fdedd3458aa17424b39e26f7c95a9c90af76798971d3ae4777cfb61317edcc26ffc60d491a6900f55b5736c4fcd1e048d44c59defa51b24d900a0606a93979cacfa6f5353c2168c80f4cce2df59aa0b962c95e4d642c7334ea46a211315c1b9f14436179266d429f6f25f6f6e39be44c7df21c7c4f52bdace4d06bf0b1586f8b37b12f4282266819fda9ca571933b7b437e936c566c336799f96a2a8fc183fd74d0e2398915dfb5e4a2e34eecbcb7523d6532b66c32c48c2fe204a2249060b00fd49e3ab1dc42ec0da576ace73ca5ee6dca8a2cd4953df4ff84dd329916e64e47c6231474a79f8ec9b815568047846a623791c42c02534bdb19bc25f4d44122df51940767a134a8bc4818bc9c9ce3fde35869f27cc4109e16e0c18654879082be9cc51c02ec770328d0c8df4295cd79527c3d7ce256ee68e81994e5dcae264df32c44e76821b28bb521ff82eb735c84dad5095ac7424aaa37c2b86011c24e7fce712ed9f0c1ca214797013161991571171e7195cdf5a5c4aa1431d06fe1b61f890a60366f53dabffa223ba99b1d5d6ba8dbef081f7f38d4a72b20d37abbae81fdad0e671a5f047d1ed6f10c5acd0250c30e23ff3a488da5f8e312ebdcf847fd528afa693ca65a2e85fec7d3b592a9b8d23d9df64072fce75d16015608d3034acf87263dfe56159f9b59bab84bbe06659fb46f087db052153d2d3cfb44276cd8e82d00ee6e16b53d60fa3c76ff97bb8d950a91d3255ed84afaf33c1e9176c2afdbf834b502f8685ebdf0a3e08040a29705b5a5ef72aaebc667c5504334a206739c89a8f8eec6475ed20fc3202ab834abc6eb2e2c185be7c003f3fefd874aadb4bb49a1d888e7b863bf91f8721d7b4ef60ade6d54f1d704a59866a9ed183b3f07c8597ef52ae7bf413f95bab4d859a0359b7c8f9faab796cf658b3ecd53432c97b96ddd566c64ff2557aece8de1f72fe0f6e05fc70b4b36c70697013dd19294dd42443fd2f20b990721ab2e189b4dd16f33e17da9a1645d2b067f12e3e91a74527a475fce4ae43cfa1afe71408a01d39dc1253b3db9add82afa711df40d5062bca28e7e71369b36b799fc89aa5aaec8df3ecceb479176d172b8b55e9d724b431930d5c6e2184fade35a7bff54b16c2de5841760c2283f6824b4070a0c389d99aed79544570699a8cf75a40882fd1905ee52e7818bb53bcf2ff72ce7c34b8a07d15133acec834ec93488ac31d6d99f059c8189f2dc89ad2161fbd84bc37860525710656ca2d5bcbf917d903062c505ef75e05f8fe2e98e0d0e6db331a0e6611c993c127305d6330829fd7ec89e899521546be4279895351706f6bf646abecc85de21571d406b6f253409fbc884ac6de3a9b8a55f2e9b772e0b78076eb672ce8531c50079721741b1d797d89733aaaeac376e09ac07e6b7db9ced38fec323c784ce091e3f1143bffd2402dcd45ab5306c688d62eb85a74ae68b6bae44d236b97a56e2b416532120745929d5b39a9483d22f27c0046eeae24cbfb20fdfa2bda00666f9008c580ef7263012f1018fc0e31f4d6a46e24a5fec2879462814ac2aa376f4758320159c6ef79388e1e6b976d4d1537248e4d16830c30891decb83a399660e83204f4f55527cb1fdd6194a33e326db06321440d00ee4e5f02b9dfdda4eb12f1b69d685634c2d23445314ba101ac0dcd7570b39741a77fc25b00d6207729a468e26921dcfab7211aa0d3372a48f9357838a2f999b66c0318052fd2986a132002447e638c63741a43c972dea467927f2be88a484d181c0081f5a30029e8a2fb726570c221f98fd84740b517810ac89835681dd81a44e5297220d1c5aa3be92e15b6d480e2cf1765a236c62e3045ddcc74d0e99c4745f0e55d5a81a1feabda1b7b368b77545b4d1e5d8b8968d1ff00f974b5f4a58ca947fe1a48208e3e11c2060324821ba2b79d6b7d2c2da9bc426a6ad78d31662b9678951260caa9598a8c89ed9201b124f8458065e518ff0d555bcbea97e80a523511b2d6ebe35ece2e465b92e7fbd32047859a1edbc574f9f0aae24344aafa1ecb5d1b132c03adb1e01f9bed1b13d169365f88b0c02ef08f75f29ab6aa9795b233aa7204675fdd6f8a102cae8e76c04f77fb8ef2ba6b8cf2b5d99b31cb8ef5dc8297004fc469d5bb4d10a441eed8e286c91243769e0f1b51be1d3d2c7808969eb48aae4fd75e7ee4084f193facc4a428ddfa883d0d68b173cadc61fc48cfb25e4f62a238871e0ebf7fc1732e28bb640d7129b31085eb673f405bc978129313e081e18d9d6dc5c5ebd14c44553d0375b24a731ea273f65daece17d4a1d724b7855a739cfdcf2aeec34436233ba1e937aef8d8d4f7c58873ae785ba70e6404f8fab67131bf19caf97e849260628ca422f5269d9114de4a7c54259a4e0b04756c05fab523115cfab9c1df32e6d3d42a2b80601bc6644d7dbc893e954ef23bb3a0c0f54f6d2849d4a54ac05192dba23864537e0f4c8d059c11d7315ecc98ef14ee40c85f0fbaa77e57e35ea54f25b23b1335b24f8467821b9ada491074e66ee26edf15c8e9ce4d8dac2a2ed87d538f496fabb9c51f0491e2f52e9447c7738518f745cdb0cfa2d5cae55cbab79e2f3f40bce09f99f1f2b25eaa9f2fdfdd50f0b9183aa772f25a4b44170dd8c6ca559cd20fdbd551def434ecb4865d780cbc150a1210750acf6d166f316dc73b1b35d4069b580136b6142ad056af9ba4b72dee0589f647540a33394615610fd2df1e9a43a1d9814b3689dcac5b39bc3948b019948293327eb0d24f80c3a6defe01543807d425228f19647e343481c2c792f2e2dfd5f8287e6cd1039031b690b5625864ae51f8a0df533d638dfed3dfc0fb223248cb1c95786c248bfe7078dcf8d2cf246817bcfcd552265ccdffdfe89bbf5469178eab255a4d45c4f474708e8031030d0e3cd823cead6839d11aadff5ca3e455e05da59410a3d526f15b1507835c7f92c50464d37d3935f0ee4650c0dea147e73493fff1a436f5f35813aa7e5d789bfbe11f510b6464627d721d01080bbbe09abf58dc8a643913db5a2cb178870490d6b6803d6209d2f9e6e3dc5b4d38cd2003b1b626e9eb41258a66ecd8d9fed2557c0c3b4eda74f82b2a5670f1d48022540dea72ab1d3bb5ec995c63884dc8c6adde0a6d1a3f8f988c89237e99437431c7574686560ba8c9afffd88e326f331c099ed13c957fb695f96be65e52e73cefd08bf7263625eda35939b8c814ec70679d37fccf6eaae70e4d84cc8d030bd0f2ab8e7de9e5b12044860ca0962eafae6f2ae3fb91914b62834e5bc6f7b9377de3f8a8ea737e548014fe050fe968fc6a6d359ce8b670856c0916a54928ec0110470f605556104fd652e404535ff40c4a61a38c59453fa3f1b44e4cfef67c4748f22f0a9cdcfeec404f09dcad35b8c20e3f5b5a15ddbc49223ad39e384e9fa92400b55a7d9746455c0a73d0dda7a0e52fb55863c118fcbf16f8144d3153fa2a3302ed22cafde65230fbccf9e54079b3c7073e8f872b4d5164fee3f8ed536c78d8c871e2566c3f33278cdaa7b60a1cb16e9091e060a1f4379989a6c6c728fb635aeea612a1f5e6b27d7c9ed2c1b6a6d583ede9a0ccf883813039ab6a82619c497833460fb7d25ad96243028139dadf57ed4a64c924dcd1ff53e681cfbee8f1af724a23c43181bab67b98def5ec048aeca1484cef87a804e9d444a15dbb52177331ec0ee978947c2484e3f2a5885ad6c6910504547b2d7453891ef0c6b4b8a7960b0659eac8272752680dfe4eb917844801f15a06e5255d8370c27a3a823fcd02e8fd25818e2e804d97f6af0fd70f495fc28b126ae3ee38ab13e8ff55c2534355907a43331c6da079419b7a930db3b0eb1d541d1380dee75b53ea0e387c4301333a6fa303004092cccc120b5bdcd9fc791c089de021e03072581fc6ac17245452b58866790f79d0a0295b2554adc8f9e159c75be8be2b5103a4a8bfe5e8c67c55b240ffe399a7eb18cb0fbaade5714c173af0b7ea0bd6e455b4a150205e7ca74193847a60946349324c7b6c124d361d3e56072e485cce561331a99d217cb28b58b672c58b52546540eae6a51b957962c52fe315ed2b8d262f6320dc1ddd888397326707392bce107a04d59820dc8c3edfc9d1ea981c29076eb6b948d70b367926d238298fa888bd626cb9c64b5fd8c5553410e2468a9b28c418eba379f5d68195576bfebaa86c88a209053e9b724aa86644c03b401b83bfccf4e283b0239602d026cae7666ab502538778df674fc0a4fac408a9eeb5d9109deb15b6895e5b0152b5c051273c3342424ce3b0ca2f06a1e07994d0407ea37f7049b6b181d3f661ccdf4adb8085ef85c9581d9a72b265f02eb24b7ef010dda7557f12d258a79af5db2c51e06e8fdb581dea31b26a2f4a49a130361c8f049a7a9c1fecb279599a091621b302a8a073bba41c425485eeed41002291b5ebe1b2a1dc0dad0de07b9ca1476ce74d979263d76c77ccb780bfa1512dcf4ce5c255cb9cdd5c5bbd8fd01790c4dd4a8d4e48ddf09816939d810c545eefa798bade0cfe98eb104a3cf1bc88ea74de74a0a3463b76dc0d57617c39f559fe490adbecdf492b4a1de11523381a0807afeb8f03e2d3a4b12fbf6e86615d2e8bd9747d099a2ca6e86a4f7d6c22011950dedae9edd15a38108d2fbc87f4594cf0c64ac678406bc0b37ab2d3a2fdaef908a2530b420715d507f41286e9f9e069ce85421f57529b52b28a0bd347090743bc8de663f81c52125667056e17fb226bcef4d01a6718e1589edf4e2aec323ff75601a0df3e65eea42c24d497b90cf4a4fc8ec8f139b9b687c7b466f1b36070492f04c2c69232bc87fae32f95960e26f85a809a2f0b77a9dcac790c41f2e3b651dd76aa55480e81efbdafacdd9b51fa10570697759ff15b45ec41b106aff7e3b605e95e7be3879ce17b85b35e11ed927034264050ed5dd70c8feefa11505a47ad0cbf5718e4c99c7c44e65cb3205c738f9121f257809dae26e565c262b4b7db6b613478260e6bd270c98f8f19719f0a3beb71117dc650ca28747b3d301a479a48686213c33e0ae60d4f300276c30a7e2fc6701e262102ca081511b6519b95f660c3cb418c6b2f357aa71f19f53af572f9fcf5591e117d1ba6d8d7337a5f36ce4441eac50431d50db68ac09009b010947aab1f2a60463f6c089ab83521623cac086205461435169618569b767e6ece418ecf29aaf044b7dbd4e80336f8aa525cb928d7d68462eed7851f5bbc50d1b14ed6d81a71804de8a71e3c1a2bd09ac9682e94b7c0eedf39bb6d3081e39bb77751cdf91056d7e87f3f84e6580c1b5ed847468a140f2f31d2a32cfc7eb6df552c14a2e2554312538f085d396e60daa88c9bc3797b2eb5ed7593b43bc2e6d2a8cc96f9445f7b58ba5092adeb8a863b063af983d0856817958361cceebd88a18326645219be34631d914669297affac89f57601552907228830f6c479878a1aef68633ebf5783a42ce5ba4310a5f1fc86c81adf65c83822cdc74ed2410e18e47b838a240328192e5338154c2bdbc4dd77fe242bd85030f0207ff1976d6dfeb5c834a7c477c991e60cf4c02e860363289801a65a861dbc188bf71931c8dcc3f9dd1381801259e35d47cd2d9486b308a73182117505f967ae1e3520b5731c9d6e32adc5a215a2b8128bac39ee8fe4fa3469cb94aa233a3eb77f8419237feafb03faa7b1582fa921715e588272e9f50f623de27436c14b6ee73bbd3c891e6a62d0069bc1b1028a13fad6b6a73d6c4f12400d4b4a3705e0761fa0de8c189cdee588ecf4e5508c34823fa40cf94dec3e0025b2abd9775c2ac82a6929eacfc5d02e16b53155822f24adec70501f145cd4e77064bf57ef284d7a3eb8c1d096662cb4da4813a4927d78474d889f945180093bac871155750d85f9679a3f31e56c63e4e18ff7ef038a97b9619901c5dcc5ba324bc70e2f349e73cb21392997386513c45ad70ac791e0f859bf475d6c13831ca29ffdff4108c76662585077d25041de4680ff84ccfd0704454512c2c10c62d18fb289db32251b3c2be110108f987088719f8f63b97c51bbadd136466439b8c1874d8d9b12a97c9c194c1d42f1bb0664b5843ba081d62cd8196140c2e8ad19de9e5b1e686b9e65b40d1578750744eeb4e3f270af3a08e56ae2b21ec661edd99fef8527a0d1a85f4806783b5491c9f13f24ec888aa251b085df98686ad03e27daf96ac37f25bd926d6ae475756128ce7748d1e949c466d82808e63d252b6fea3a167321dcef24b8e226d352691717c9cbb64a559ee1553b0c080df259521cbc416efee7660d713693c3f1a1a2919802d15f2a89da65ce8c14d863b0d509f0818742b05949c7ce2155bdd26cb3a5dcbd25eb762cff4a531628410ce94b23a2a7354659a4015412cc0c427ebcfd09a0e5a5795296282ad44195f79e583da7b638911b0509355405fa20fb3c9c000f239e6e173d2dbdb277697322cb0a1803307de5d8c9a270bcb18abea320b25eb1238a60ac4dda0b89cdae5f71e50201c712df8bc02f90b687f0161b5ca8379eab381b27f0ee443231daaa358d103e5658740c1a433857b0c6c4b3a6a2e919fb70faa9ad152b72a2551e02000f3ae75559f4b6e4dc4661ae1caa4062751cd1cdc93b70230591c6f9aabd89ffef66ac715048eec08bdc30f749512f5026866d479bf0f382156d18e30fe94c6bdc59ec54bedf56781bd01c3a9da4f5376092d64871485b586ca8574b2d9f0745a841bae9537bd0603893a520d967bd48b09b3b73b2ce0a75b99519fb918157428287279cae2d11c3755f9602118ec1cc325cca385553431760c4e5d7525f87942a3928d3eec4f36a5e8751bd842aa60b3aacfd157a3cd58c24be4e0fe9d41353f94eabc54242eb1a0f4e31ab5715643d85ae91c1e56c852502166fea091db85d3c051b43459de4f73db6226cb712af41448f2702d5561be54a7769519d27614862d6d9d2ecc8c12ea52c58040b6d253076134f47e87ac5564acb01f378ad90f9fe8cdc03cfac4d7b6cc4a56b4fe6121b6a244afdd49bcfd20ecd249c6ff5e880fd4c1ae35cc3f7f6a8c1cca1e2cf7896cdf400f0339abdc2b3102ee5145c6bdbc8ae350c02f112ebfcb2fee50045c67c070cab302ceb5447050f0ccae0ecbfe671ac99df8d363d8e055ed5054762147ff7601cdafb7f6311b01716d0f78b445ef002db74593fa9d88d2d276ffd83bdf4a3c9ad7aa941b2473b95e32f69816d80c364991431ac6c6d9465c24c8fa5984229b3b74b0ff01f683023cae793ce4e445179bcebaf8696582327ac2fabd622c524d21b5003fb79b9c3309af3e402a80086e07394c2503dcc0d5e2722f369e0c90f6dd4a585ff68ba0cb6c1a40cc4c0b1fa812d074f99fba4af7b15f3433c7c8e28d059ddb55456e1d50685294cce34c0d80b548443964e339aa6bb0f19da3b41026a313cb09c124ec525760a52755908016c6d0436a1c85606877ae78b4ba4b188aa0225d82c9de1447531bcac8ffd52289d57a7b3c5d72e31d908de22197082d194c0bae865d794501e623f73db8b4fc15fefb666152ed821c27263c973f790fe83171596aed4d3260510570ac4c001240e522437b119978522eb85f29b3a903b96d344711651087c745a6ee84a3149eb6058f797be766d9dfc855bcc74c8d0128fced9c3d6fe0c7e72c90c849eb856b7af27289a7bcb658ac4901248cd31354a4ff2e79e6911d11c8276fd32fa71d0bb6c7b79895a480892fec4ba86ea6c2a376da4e2271080c5a5b4d7e97ce81b90d0b958284b16b400db7aa822442d9e395239b162cb64af4a529422f730325d1a441430b8e17eb163c1f6dc0e557ce5886b8a8446fbbd4f249f651eca558c61cdcdd19a78efb4576c0cf7b9ab00fcc5b02139888468978d05f7b10ebb43376d1a8cb6068ec6f39a5f71564c01461cb7ccb28ffea0afcc45501fd4c7260997a46914c7df3521929cc49cead2a4200838053ebb1ce2887ba47337828a06d67458752565433bcff62f65b825c914b9224652058e2f7e0eb721290b9459da460a018d3eafd97dff9ac87a3d8d380fc60e910ce1960cbe6dc041f3a9ee0b21b9e0b5d4bf8b03f62c7ff7f66597bf1af0dd81f1882ac02d92709a2646734e8284c35a3357b092fbd836872cffac0c3da57a01b4df30cb2ed0d8ccb50cb6c6ec12c49bd62b8bacc139a2cb11ea334bfa4e73ed4b83ee3a0649cf0155bb3ef9350da3a17b9baf8e0fada4e3e1ff8957dcb3e179e543288eadfde83886f8aaba669947d2cbd8e41f883e23805c2caae6d792ff8fbec80169269a58c873f9bae69770d35715af5125f03f0f0102e48c533d72574d11571f0efeeb87c699189dcc1fbd70092dfc0a1e56c723725b86e6b16046c640fd3a3910361631aeefff382995ec12f9dbf94ba2b24ab1aa8d5fc03982ba6a13de93b91bfbf2ec4873da48097022afb88b61916dc4cd2e31ba8c34984b222279b0b9170277424b7341b9d1e4da18c02cf6da349af027fb0515fa56043e6e7d820372d926576a82b71d5776faa4ad1f365b93e40aa9e57e5af05edd9a9e70cfd4d564fb29671317336ca9d923d8687067de0b92720c67c4b452b05387a87660ddcea73125e7464d90561fb8a632ea0fb964bb24adf1e5a199ba9471444976da751490a8ace1a9ea53338652fcfb5f9dfe13ae24fd750ac58bfbd71bee0dece840ed4f1eb0619eb94ab9d4123cff14698e4e43a601733d09b5870810c7fc36356388d483231908c450be6b7b5d20285f416c1fa00a99658fd5ca33303002500820d2102a36262426c9a18288508c42aa062cc52d7f4c504d7c81ac3e2841b119fddd9a3762d0b5cd78b742397259e25ab33eae57bd417545e2911e8b5942a73612566a984be89a0eb7ab7c71fb364cefe1541805ef2aaaeb7bc68a359dcaaded2055177fa9545c3e716487c6f8a55ba5a22d0aaa97e4ae5f1c930df0034062aea9bdc68ba0183525629296833a0777e8cd2f449ca19e1f08f19bb7da1ee4b5bfe20bc348419b55668447444cd58bc4c4a2bbe36b9e4ee76c81c1300e57ac6acdb615cea0ddb4f3a2b524e8db0857697656d43377cbc832fd58639d8b5783e002401ad13db21c763b7b3111b91a77ba34ccbe55b37a66cd7a428b8c83ef1e44a8d247ab6375002fcd023d91e685ae57492d71fdc8431a3df8a27cf5f51b57527d666dd6aa6fb3f8c19c7a3c3c5e2bf336f7a3e378f18bc47299a4f8d87957d83d7af2d8fe89054a302f7a13d10c0214d0490d0e522a83ec5bda9747e032cf3bc3e6a661c09df7d4469cde85e5748a2e4eed021b13d03be92959221911ee17df413b8de75e60f3c30367fc6776250af6a6f5738f0f4c7660296a010436645e4b8d916db98c42cea3f43686c03403cf68e278522f158c8df086162aac18c3b8d799acf8bf0c6815a165b5ba3e4c6a269b6c8101e8bf3160fd0953f37e90a5dd052459e4fdfa4e12c3a761efc813471aba063091efe50b3b3a065ba8b39520c0a35338951d43e6bf8a96e87362f39d9f8162acbb2ed1f81307f5c7f72f931e94f47e2811ad43446f81d111d5d95710134d60e0b2b3c6e310c29b4af7c27221733e05bfa6c6e019439a3a06be0e5ce41a672528277924e87293f4ba2c572e4aebc634c88b5ca3ec035f2326270f187b2e27159b765b11c2e8f0bca76017b31b359f562909882b63d407f289665cfadad07f520560bdd3b027e129f4cbd4d2fbbda216273d8433e0cd35e35d59e9f2ec3be0d2db8973157de7d99ba1513998442a7ab4e1aafb60e1a02276c0f0313b39a62975b025374a24ec82e7bcad46788282c6239b0885aac56c08d7623e6cc587e00b4500541415a076a23f662444923e66c0fc316f9eae3f0d721457d43fc7f495b516690ccd261aac652f87b57ab5b5a02c9fac12f505cb86184a7c84b8f439ec775fb1619cdd6d0b8746fcb26c9c6c63bc84057a2407fa0d6de6741cd0af4bdb1ea4d4586506a6ba6b8e0f92a2508f8db4ed0bf0afc0d53c7ae7f7d5cd1d0430585380310597079433a0919fc4d23247127d67e00d6a0d01f9f483e0b9e7a76804003f27990b84a485bf04ef481085e61022d5d5cb4e80098e2ac3c7e834e9526874b7cdcf1eb5679c8e765438889d9e9fafa7a93088c54b2ed447151d564ac6f11a3700fd1aa5b5df7f2db4893a1345b3f250cd6903deb17efdc2713467acce6c41b4aede4049aa16a1ad53a8821b9a01fc2316e24cc69517f5c94a3bdd73c23aaa1a6596bbb85cbf6b6cf5ebb8580c503fa763bfacc27e24e69f50bae8d6fb2a0d902b8269a115afe1c6618b6a2f66f20d038b41a7987d7df4008b4650ec09e4077bdd1e2520d9df7bdcb21d461c8d39e239e87cddafee3459dd4ed416c6a8abc816286f84d7716f6a347afb07bc7c4095655086c4cda3cf791b87759d745ebf2faa1aafe2a58525ad84608313524133f89fbf7c08a841bafa496d84306adb71b2a07de4bc038ebe6b17b1252b8fa7908b625a90e7526b4a86eb2a4476838403e257b53a84c66950530df8444e99fa1d03b066151a2ee14b3a6c32810fbcd902db8dbd5e8845f0e209dc8d2f092f457ec3d5559671a8bac6ef52b233785d0d3439361cc9f2516e2e0e45b14ef5683ad37f25fb9b74d74e6cadbe7c688eda3c83942764ed421e5a503689f0fa432b1de158c5b4dc86ddf4c43b655e430bdd88d10320637f8d5210e0d36f7a4553d6e51beb37092b0739cd34786e12e7746fffb62555d59665d5ae5fb652fd6ab1640451e8cb0840f2fc873695f71ddab5fd8905042bd45d99d629244848dcac7f6a6c703bfd7fa85a87f407f0060aee8c16a3bf2e498536b86e5caca60161f82587b9380114a6061893dbde688567daac28dae4080df0b5f4c01be2419276064479fd69824c4732b9456cf33113091621c00c17de9307836d3d0a256d51ee01f3a0f1fa0167e7582fe5c460d2d7448af0d840d3a8227a9713eb974e736277868c7035c672df734f2bf3797e76e5e94f5c42af1823e303dd4081b6b9d36ed631bd53f345bc7b2b1101dd3612f9383d99e392ec5059faf6a2df9eec138a8361998f025741a129db7625b5b4ea2331848e15a18f68d76078e4ee19c5bdad6193f5e4c396f452f89b771f2a08e40e2d9459b618caa829e0eb077b99d9b6b40c6db0cd195c818e3ee25dee27a2db6363dc5b3fa13207bb30b386a4ee2cb06a80cde5842c7735b6e37c98985714701ceedf10da129a5c9442c54048ac8efc7541038ed2a1d9324b180e2baa340ce44c12c4d44634b26d84ce3ef4df744d9823d086b526c8540637b99525f31a1795c6c9af306e69f1c8bc25d61165a00fc97b1244b3ada0dc3da0809642364efbd25d952ca2465a10d310cd30b1aca082e789cdcb037f68b5919686f67419905af34228acbb910d62a01d61f3e3e3f4b2deb438447416baf9721cec726cd1f3e3e3f49ce138d98010d1b1c26429c81c3c4cbd415ed2f68adbd331ea7ef1c74c16c82d76762a9e1e51704653f24394f64f20393f35826eed4910acb0cda16dd4f472a2c57f41328dbe171a23d592b6d292d420560d313e8e381325a7ec48a594344545279db32894acb2dbd6cc9a4a59396524acb2aad5bcfb98cb4284d735f5d46385ac5dceadfa62cba7e2ce20a5dab2c4601660d0563a581bc25b929be18c2d534d4f406cace19a1b0a18454145554982c6992cc38411546b8b184c40692190cd2f09b9c320b191159b43f752a22c6d04e05c608edce0961e9428d33477071258c1237aa81272e654c40451825d6dc68b786a694d21fb2d094fe08ae29e5b82a5ff6054c44687fce65c441ff997381758576ff119ad01a2dd514a4324d773465e246ff0e6184a63f734153aa145069fa869119e5e28d2534a53f429369bbd2ba9e53832f52da3fc2923c32be48db362b6dff43a2adf19af7b8e2b5faf67b104d1bf7f7778fa44dbb9af530d2f67d58b95fa7234d8dc863a7b6394d1efbb1b74837a9c7924f9a2bcbb39f3c7696c68d19c1ae2cec0a76d513c7ddb62a6d7f471a96d7ecdbaabce67afb36a769b3214d1efb76db6d7372d2d686346db18973bd87e56d71f2be376f1b92b61fbabc8ff548a25d79ad47dba76579cdb5fd1e43d396e3edf7309ab69cb73d96b4edc1a46d0f276d7b2069fb3e8a6eec73decbb4abd863dfa78c2bcb297cb99f82ec6352f6b17f22cb3a38b1ace37dece3ede62739b20e4ef6b9fd4c1efb3959c7cb25b43e96b94f41f6ad2f814b21f6dc1677d77cb4fdda957d9b91d7fcadbdc9fbdeda95b61fc349268f7d998e93d6c7be01ad8fe538791ac0bdcf2b3799c261b9b0a1080372d8501412670f1cf7fb0dbb22c16fb4abc963bf032ceef79b7645c38a3d9676e521cc89ce0513e37230316ed5518cdb5a525d4cbc03783ff356e2bd8b89f7f3bfe92201e7a3eb00f35faf64fecde3601def71de6a17d6f1fe7ed4ae2b0f2d0c07c3b0605741f3bdbfc13a4beabffe9583bcacb3643efd9975a6f7f47a7169591eda77651a96871db870fd37ed4a3fc084a9efc328c89850304f7ae620efa7122fc3b2b28ef7514fe94d2bfb1d86617908bbf2d03eec8aeaa8a3010fed470dc56957dadaa75dd9a765d9ef3164bf079115e34e1dfd6d56b03435895d5baf054191e999519069f978ea897709aa78d212cc939679e6d7b30fb5f886fc70a37c9a8ecc340048507eb4cefcac337d66ff4164e69f4b630ed4c37bf3ad90524aef6cd239e7e4289d3ef226d62c3e094e7a5bdecf7d8a7fb9482357a9753911f4fda13eeb35973ee99c73d2ab29f5e9eefe19bc90e658a0744e4aa76ccd82c490ce7ee24ffa1c0612c32048f4ec4139cacdfadec3012d5a395ae79c33e897f8e69cee1324043d450012c32048b4bfe4993d7a52204bb4bf7480f68fe19c5eb54f3a271b2d372ea723d5172bb4dc978e545f9ebe38517dd162afa4faf282c7a4052be78996ca4b160e13178cae3c1cd26417dca006653b545ec8e84de394ceb8373a52b55046cbaf57dcab23550b62f4f6d16edc4f47aa1688f0698097a799a591058ff65211d5a0a98e5442bc01c6ddcb47afa8f9a21a2190b8d256dbaa298d6de8f9d35e3d69f72b5de5a492433ed126f54d32c7c43388e21053450bac80214416661859cd3045531a2dd4487a821b801519eed44c25289be2b677683ebcdcf60f22505f6e3b969192d23b567171db518d762c9b8e4a54687ffac4cdff9a008df60f4f0046fbfbc0a0fd81ba1ca1fd93c8a0fd4d585242fb9f3003150ac888544130a1dd873818bed647dabeb9d2dc779cc6c08957f6e12117ba94a9e0ee1f0f4c5bfcf19a0fcd3dd0739fc46bb4c9b4c19efb13a6cddfc62c3914e3b8ff605037fec41eee5bb19cc297d6a780f3f3613905d9fed14e707efe139c9c9fc8e2ade78b2b3f0a7db2df56f61fc5f9fdb0dfb358eb7718c33838c656deaff711c2101c87e47eeba36b49eb6ff6f9eabf7010941f26bbfe5745bbfe8537d52f2bdd6ab596746b831f44dffee7c241ae8fba15a76dba7010fd0dbefd2853fbf0f190fb10ce5cd783d2e5fa1776e520f0bf0f023ffcb8e772386dd2070cb24fff7a71bd4cf390fb2e77e0c292eb21f751a310af9eb4cc43cef52b86fb3f40499adc5c7dde99f93c8bbdffbe0eebb43c6cdffb12beeffec33a2d8b755af6cacf48933879b6095a7e120de54747be959904a38fb73be36ef63d1c6f1d8e37e92ac16f564752ac23af8eccd48b3bbb3e54892fd2b64f74e2d256f71a8c1838a1f31da96fb5c4b4b0c33e6cfe56dec1341fa117974e177c8ea051ba84ab0f56b1764eba4ba0a99eef2e25d4df5d4aaab6f65b78fb5641890fe92cc53a15d756da1c5bb2d90e2df4f9f143a408ad677c5b74fc38ffbe9e577afececf0dc6e48002297a704118a2d99495441a64a051028d9bfc2885b8c100c71b454d3815f98002931569583143162790e8d2502a7a597fd61d71640b334c623c89e144968f317c7062cc13670091050d252cf485ffa8a8935650c41665a8000c256248621386a90aa3325bba338eb078039ce8a2c59926ae1c9d7940961994d634a9608d0e9d1a20c6684959bf12882c68b82a00820c0cb446393094524abf40e104971688d126294d049edaacd1c60c4a5d86300308263c251f1dd600224c0b1c18a12f4454f1d0d4e50c23aed858d044c6d10f5b7c319583ae1fce36400071838f01849116227cd8d400c6c7c7fcc04696daf4de0f5274566aad20e0e2052a5a4043c699206e95851b5a38c113474351d41c7e40a2062206d0740319588c98f0828bac852437e008420c1c6994f143120e4233c8608220ce08620d343fdcea0d4b59e24081164f4891e6071c5e7802cd0b453658b50122b7110353d50d66a4608a0ecd0f2fc8c0450d294446fa3eee022e675c0b48c11b2ee000461861b8605346982830c830c2061790c1c58b17382e55c8508b10627a011b66ca588387a41b6e9a18564046111211485d0bb83c415489883ec434824b132e38117409a1a21d685853247586cb0be2d4134e556421c20b19c2b0800b0aaa47554a7d70618302347a309262e346d5b060a50b2b5c28432acb8d9ed1b46501f778c635409b5c778f64a6a43070d941861b8662e17284850333c213540f57dae861a88a3723051c3a4409f184c6185cacd81378adb5ae808724336e9ea8b506208a8b982c69c40147125149627ce962051c5be4d089014651053373238c33d4ac60023657646529e28c2c2d98913a0a838aa34a440d862c6130c1a0646402213e6c69010e4353574374564810b90f1a4f6fb00004171ed64c2a927eb081638ab5d64a01a6a7336ee842840c4ddc6a1b5aa086a0428d36886e002387178860009416584631b80186cd06b034a1830b3440bd91a5fb22e98a1422ebfb50ac354445c8386b228c19a89c5f7c908a81d66894c2864c16395c3d497d11a58218228b29ac9c21c3158ae4c3187bb486d09112635a601487162f5ea020e30a2b055dc2f832d499f1210cd1125cb4d45acda449638b36b29cb1c5ad9a4105d49a35659cc006ab2a1f6ec832c6c7a1dacc40801658e0860c6ec4b0031b3c6bb048c38c195edc30c38b1ee0e06aad274841c68ba81db04882875bf56108a732c09809e24c935ca10733a410697dec14689439e2628a14c850e646b980e34b192b0891445213543d2c51ebd334d53452fb3e330839d13892a20d2f594c40d1b4e58b28dca8228d342c74d10312ce1b77cb5420bdcbd243168b253ef9445bbcf95c8107353ed01a2d42c65a7910030627824af9e26a8a0d1a332e10e2041cc8c0224d0b6c48c15137c5430a5c341a2da4519b1cd2815ee10107242944d622a60e19d8785a3222091882c8a18d1a7024d105961427e08207185c6d44c52e9220a2cc959a2ee258e346b128830d174c98400d335b6cc982512ac7f450f580068d35417c09e3c81b69a479c30a365ddcd069c1460bf5caaae5de6e181fdac396295ee0c0d08f4b68ca8020ce8499a185a118cab8d1258eaebcd182195956d2486d79a2fa0d548ed912c40eb4468ba0455b80c0c231c918003460306a22ab884b14425e8c7840c2090a0623aaa611f12988a224e06041123ab001001f94d4889a010d1043dd0ab6c480c5c1ec14a114264b521245492db401040d6a386961034497c50e701c4df72224a5340d8ff6b1c79fea5a14126714a594f361871ad258810b305914588ac2a92a0b135e88d161b10318574bf43a46280b982236bc4862a269a8f3f265a90b0e658460eaa2761842062a1d6a872419688d72b2d609c70abee8a20d133324ad7113b2d2c392983096a0e24073abdd15bad696ae94e6c471f7d58e0503d4c401870ba8a8c240a2014bec8005d5992fb29ca0b38206a21d866878af5afa3f94eed0d4f36ab676d6cadb72795f4a656ebb2c78145dc80026d294c0e18ba826b6b0d2c2060f4a672ca911864c1ab40929177201092d3b9849838d1a2f9051a308232c532801875257c5152d34e930450bb50849c6141638b4a882051c6cf060e804605001c31969aaa8433a2461e4453ca08815583d75c1ea62286a0b24ae9001a60b14546146d30fed123a7489558e524a29a5947e386d0cc83a13260568ca60030537ca2606aa32d430a30d0c37ea458d7e11afe5685aebb481db6a4d35a55cbe18c24df428a2d0414b0d9509b461056cde70422283872816c4d14693102b44d19589030629448289f589dba22799b3feacfee7285e507aa10713ece074ab6500410511679272c8e18c8e0a34400c9290cd196b2891d76439e8fbeefd9b0cd12b5efb947cdfe5261eba978172329130eefea17dc470647377a8e56b5a6b32d768ade9d0a867311c35a5eef482959e4ff592d216a4ef93619d255ef79ef79dec73e4a0525249a5a4524a49a994944a2aa5a4b43e8853ebeb784a290575501cfaa0a432c7c772e0a8632fc341f46bcd3a4bba1c44b7f714c8a38eaf38c783b8bec4f47360f07560f992f6d8e1bedef5fb7e1294399a1c2ffb18de423af6b097373afed3f148a2d6f1425ae21cb8621d182707cef9e8aab2cf9193bd05f203fb31dc7a8af754da52bf1e0783b8823f5d47c0973fe5c5f26f707de22195ff7d05bffc000fdd7b4fe6201d25d193de09d8841eeea64848952e79a14cfeb4a9524a296de5f01e387c9116a59d73d6295d2aca7d4a2ae6d288bd4c7d27e3619df1c7952b5b587c9fa41c6d513ba7b51d99325152ad9d966b36e3bace939cecdeea8146e69799d5d5d062d43e8e187141aa374d0d2d8d0f8c5ea3b5a878e3e6d0916a0a17f4f6e9766883878ba323951467bc2929b480e2de1b7b8f6286eb486c41420976ddd87143c413ce18b1d71143978a992b89a81b288ec8018b20f382e286ffb25c6b787861a640345e1d91f3582f62b6882c6f0a9c1618a7ce270c0e075a7bc3188541b2f709a59c7aa5a8759fb0e1861e91c43d61652631547da0d4b8de397122a2506664d289114fce13ad8582da814494b596c716b2d279c486822be35a3804a98ab6507d91b6a995d4947432656875978a722827e3b6d647ec64a2a6e69c1cadd5a73c94fe045a9a2b49bf4f11ea49c7328e264af955742f649aa2a64d9eb19a3609e53cf2b71c698984652435af1cea69daa492bc3287c44c354591713a622a5ac29a46dad5105199982f86a085abd6183631660c332ea4f962861828ccac10c30f5a5e68e3021d4ce065bca673a3372d0a1fa27843fb5f323568ff199932b4ff4b01c5183e3cfb3d90fbd0f5e9db588b7f1479e216ab744f78a229f244ed43cb2279b4e4a1172392c88844c246a88d93cb5d749eb86a3577d17972d3a64d9b3637f0a52c9275b71b1d29495f021d0a2bf244a8359127ea2b91279ef04451043928be48db350aa194524a297d598c3dde7bb0af586aef41af7999cab42324a11263cf73dfe2d1c3e8fa7f74fec0f9afc21e893fec85b4d7750ff3ee4757d7e129ae6f1680fce0658287f28974198922db48713d18c595a7c8cf9fca5422696de1a39d713710919ff8c3c743e9c3c7c76d3eb4275148940f08e9a8a824f2f3f9b1ba9b88f62275c80bd7041f5aee28a5773cd3c4e7678ca41a8546a19afe67dd169fae90acbbff8558c97ce7040fa5110b86053400c56d3d6efe53bc687f11b071732a281f7a688f542a50d2feb2e8a8c555e9aa1ec535cd1ec070e54fec81d8e3968c1932577a467ddcc19feb2f9b53ca388227893d2a688ed26f711c8d3db85c1a022a53476969ee00f33395a9b9e73048d9aca19a2ae2a8b890d25ce6628df607e59c32b150aaa74c6984caa732b564e27e468422f283d268fd5815e327f1f82778ad87175282168002fa700e68b8dc0b79def5bc07c19b1ca5a5c1ad82be71e1a83decbdebbd773d88bd77611ff901e8611074e1a83def4117883dbc85b4f740b3a55d2e2cb5f737d89bad7761fb48a2eede33d2720f8c2e95a93d80e1724d5f8cf15b8f44cb363abab04e92a8e39360745f484749f7f391743f5f484b97fcd8bd94d5071637d274f4f865361025c61efb3bbfa3dc00dddcd7e91b88b147e61d356dd9c97193526b71e4b79e93b24525575b3988beb57a23899acad495cad42fa5f549892f3fb63e1d25f2e94ba13a462956e6a097e24b6246616a9d2599ca6c7dec2cf62086eb410c2dec410c976bedd8bfe17671e80e0e6df3ccc39a671cd070a7f3e0359ff58364713705398ee3a4eb4f1382efa3b4ca87c40412341f1da964f8c228da7ebc7c54534a29a5d41e91a60b28a4c8a18a216e14092c33b25062210b0c276eb4cbd2146b48d31c9ace39e9a45cd8eedef1d1fb87f62d6efe578c14da7fb64492f60f97f8a2fd7d98c0a2041b402e5748e384a65fc46dd78a8d510aaa2abd7dfc2042c6898d306292b8218935b42b71859310da9d73637ecb4b6ba9a5b4c543a4eaa52ad5a4a832501ece276b15c342db6253a6cfc70a6efc20162b48b65741a8d17383a8bb2305902ed765cbbb8ab68100c58dd8be6d4dd6951a0f27919f208efbf921794b3de44748522448901f0f837c418204a15df065f70679200f12c4f63d6cb617f231c61863c43dde86a3161235ed81a987413eba8c04c9439e36644321f23f3828be2dbe2deb2ce172507c8f394847897f8cb9432282bb230f67b7a533eae16eaba648cfb76aec95d76c3fdf62d935dd90d7bed6bda1e77744369bcd16b3196f8cf1a2882bba1cdda21a506e5081c41566b4b0748b1f63b467ec06696256eea64c567abe9d4a9ab69f3c659c9896b4949e4f99bc56fbf9b4c9898aa151548a4ed12aaf7d40cf5034540dbda258348baea9495e0bc0cfaf4a5eebf1f36bf5e2350dbc967fe29f5f9daa98fa54a12a995aa64655a93a55abaa553d53d15435f5aa62d5acba861be2ae70445c1167c41d7148dc162e8953bafdfc3a346dfa8166950888982b7fdba74f0ad5b57732d376e3e0e73b96d73af8e9e3e7bb1aaff5fcf4e0e7073f7d7e82f002f801fc8f07f2f3e9cb057e3f9f22d12d34892a796da916e0b747c966d65c4387c2da063f7f9e51339f2694d732f8f9938cd730f8f9b38cd700f0f36794d7767efe949a533b7ece88a64d4f1b100142780e68b8f935f8b934bd4c26afd13e48de423ac8474ce4a3d7867c9c36113e462142de963f0912c1daf60e8a8027ade0101c6d2f24c7d863cb3b7e8f9f079a4130ed7fac8e2e6a7b20b73ded81dc86a750fd587a735ef4c4dc520d5326209836fdc0d46900988a1100a65120602ae583e9d40798567980a915f5816907987280290fa621a6596b02806b0f5c95ea9287f335c0d54bc69509e3daf4b83a6580ab180c707daa503bb892d1c1b50c0f5ca376e02a55a76a55b5aa672a9aaaa65e55ac9ae5e1fc1b5cd7606e88bbc21171459c1177c421715bb8244e09538deb10ae05c0314e9e10709c3c1924713500e26e80c6fd69a34c94c96acab4930513507a53a65a9724c43f8d0655a6ab8d46f3e0ca9d394ffd3a1bc2c21016aebfd4b1bafad4ffa90f146d2994a19262b212869a356ef593441b0690c0018d0f4c63e058738bd24103dc9fe0b5e90302c58f5fe8fa17971079eaec5ba0ab0e9a9210c303dc6c1184a6b7c853ff85a7a0590ca1a900224f15a26b744288094d5f76200800015cd7751d084c34fdc853dfc3dc471c5d394a5bbafb1dfed0dd08ba7a202df2743f3fba3e86ddbb96dc68fbb17b800bdfc8d33d883b7b42d779a045e5962b3f53fdad1724dd5894adfde97d653bf7c70f11246e7cf26eb8b39867be49f50c9aab2ca413e450d29d3d6702bd432e8a0cdc656e6c4154afd822065b4b8b0c4b359cd1461246542b3a14e1c396286e60430ed1cfa7ab65697f20a723ed7f82130f4e315829ac8c86c002c68621644022c11816aab47889c3cb9836ced4341900b9100c60b059a3091610994983858c1dc6e8614c0f5345745844889101cda0b0d132e4658c1474b1ba090db100756505962c2bbaa06da2aed082cab3d6ba0e3d70dd1855a8408a56cb667fdbed50bbcf17e57445fb0359cd3ef4e2d0dbc78b62ced073ce4e1be70427fd7ae9ccf15225a5561444557c2d1f2a24d2f81c94ed20d102256e60625cfab347d39f79cc95594749ad59c70a69b71a30713fe95ae21f863e3f403b378c70becffc9ff94037377c52c7f833bb8ec490066d212d19f03917fdfaeb59639c4da731ce668cd5ddddbf5ef71deae9d13dc6e937602657a9b4e1ece5a4b1d259e96c51cdcdcacd0fa3f5f9799a73e63be7b75a56da561767f7b1c72518f56da9e57f92ab3f022ec6ca5579b7ff7c4a6906e79c53caaaa9548c7176c12a2b28bdefaf7f0caa44f6e67d87afb8f073f3b27d227bfbb287f11517ecadfb4f049d7da04929a5577f129c76bab4f667d74125f1a9d29f9a5aa9395d27f5ea5c0c744a6eca9f7256f95372939bf2e7a474769c67bd8ecba25973b66aabb6e6a4d5d239802a4929e5eaa41e43ee25a55e2d1b9f68a9701c475d4ca88c21f75532a1baca9f522af752b664ed9929d0da025f77deb2b74b74d76c46fbf9b2c73b6fba8bfb8fb668a555640c6b55c284464927cd31f6d4af3e420f6b49d7e97f1f08ce2ca5e5f183fa5366ba32a131ac1f3912b8de353f978503bc3a82cb27c31137b470613a521d71c55e713d1da98c88038c116bc8705d3a5219c182d6d2eead676db6967bc9e54b6555565c98785869eaf2e2361fce43ff277e4dd416e4bbbc3d4b775fc33feffe31e07b23267c49d3a5e6aa3ab90bcb95e55ae3352761087ca66f8b93d492bb58d23b3a527551a4bf28b7dc48c505948e545b2c0d4047aa2d9cb435f21ae7bd93a7efa03be8ad2caf39cef77c7e241fe53df03fbe03302c8f820bcf81161eca950f62e1f70abf81dbc7acbc06863e03428f01fd409fa3c25f2085b74095afc03b099e0223f80988e04f28c0e778097c041e02ff0f78077c037ef61f7820ffdc4177d04177d05d6749cbc9b75aefc47ad67ad6b3d6b3f681a60571907df0a3eb88759283ecb7dee66fe953caf509011f02023e04a92569daa4966c879c877ecfdb22afd9aa93f31009b9bafb4b7a89f15a099efea7c66bded3ffaebc66c2d3ffb0bc96e5b5294ffff544ff0545ff458672508484af15697232f2f4bf27afd97ff2f43f325f992f8afe3745ffaba233edc147f7c06a0f1af0d16ddfcc1679484bf00a78ffb9c56b377fe4fdc992dfb18ac81731e17d8aed1b2af2247c9137f2438c3c790fdd26b5bc9ce1a50cef4a94e4ade42dd11525d816590fba5c25d916d9a169f388e4ea64807792f74cc9b7f2929f2e25ad77cf3a4b9cf83bc9dc7f5bbcd652e23d91bca33879cf6a6868483bf198bc262b777f4316c7c9734e3c274e3877e24971f244fee3f02785e3b86f7139c8dfea9609ef7ddb846f652a539b2067c03e1e762f6578824918ba44f014ab17f04e9e789ee7d9fc3b528bbfb53e3cecc2231de804047fc83b71e2c489053db46fc1276284eae81a42e481fc7ad83d112353a83692651eda4db5e73d09ff71dc7fff71d8ffe33c5bcf4911272438f97752c4098602ea224548c0540fc1545727214f63c8db6a21ff15e57db590779225ef99169280bc5f0b791c18f20eb5904fc00b79fb6821ef4494f78f1692f78f088f256f6b5dc8fb6a117e5fbda385bc675a84bcdd497757f29ee9dbef996621efab6fbfafe6b142de56df7e5b7dcbdb9174f73cace43d9bc9a1bcef15cadb6afddb6a9db7ccd2ddeb00fd8e0a795b0df4dbea9d148076aae43dd34079cb29dd95800479cf6623c8fb5e11e46d75017e5b0d8002740f8010e43d9b51c9fb5e10e46d350108d03d0607f83d1be1f74d9241ed33782f6ada92502506f829d78d8b800f817e007f49db1f04c1df5f927f10b8e435907ebfad93dfd7296fef43f8cfc3dfd2a714029662a5bc9407ff9382ed8352ac142cf59764913ca46f8f80b8fb4bb246f8ffa9c7e4b52f29f2d0a73d9fdf099227216f0bbe9737110fe9cf0f9087d4c322fea0b4e1c16cdfe78dbb7d6824b549832fd2c4ed7e3bd6b4fdc4d97d4ff7f963f748ba8fd2bd077e74df81bc7fbc7b14f2b66474f71cc8fb760f25ef99867df4ee83f29e2de9ee77deb7fb0de46d75cc6346ba7b0de43deb3e0379dfee3190b7d559ced3bdec63f7dd5f206fdbbd05f2be3ae7a3775f81bc673ae76dd73d05f29e753f81bc6ff727e46d750e26ddbd04f29e751f811cbd7b08e46db58e03e43dd3b57f40deb311f2bebaf60ec8fbea5992bcadae7d03f2b67af6d16dd2c979bacff1d1bbd751cbb3e761dfc6b98cb87c749dbf775dd775de816e1fc43e3f6a0fe49d5423d174599ea99af23096c37d02fe07da40076df93dec768ea8f190a26100fe883c261bb0d7e43c747b515e148f2a6fca0ed92b5ea33d7d3b64b7b8cded5199353a031da9ca50e98fca02fc931f82771ca387b80ec07d08ef6579585eabf21a4745f81dc28fdf406ebf7bf4ef1e00c8bf73b47f8c5fd217796fbdd7d4e63265cfc943ea6a62ec19f2ee62e257ff250d793ae445c8fb67c8fff8217fcb3b1cf23aef210f94877c1ef23d4f5d4708f043fefb38503a26f2f61ddbe7b4d7fa187bf0a6325be0fb140f015399da842f008ed2d226642a563fc9dfd08612c768ef873c11bca97c43b187be09780158ca94ab3f16acc40fe883d6e60d7a4c5e93d74a78fa9e93d7e2136cf147f45df1907e431e52db2de15bff9580b9e92a014a24b3e4b5c5490d0dea6f822560ea410cd7be730f3ef760f6ab27b8d3d1659f604fff6073c1dfd5c9dffb21dbd1d823afbd9ebe45f2da7dfa20f62b0ffb190fbb0762e57e493fdadcf95df754c77ef7243819b2f8ca62b83c56cc0c6979e20a1b8cf09808d3056a8c326a4073a3ef81d1bd14b4bf054c52e2ea532553a3d444219f52ecf1f93df5073eff0119f748def1502ae9cb9029f324257d825b9a2a205731581e76ff04d730b127f66c2075f787e6fb2161e8febc90f79ff7ffdc7f7ede7f8e3c0de129019edade4811116e4ff5d3023c057afa6e85e42991a72fab92bc01f29ecd94e41e56f7f848bfc7ec5ea3007ca41f8025d9c747b7793e5e034d10c0e4e9019ebe2cf2da084f973c35c053254f3d6ec8d3a3a709c83b0cf5064f42deb39993bc41de40cbef59a4bfc17f4730180206d560f0ca43fa360c627948df0806b330b84604ec1a725df190fe0dbb88b0ab00d865845d47e09187f49360108908069160904c54f8f4ad117d8f8983a7e1871f3ee6799ee7790ebe09fe943ca48f00fc2d79489f09febc7848ff00f81b017f4bf047c643fa06c09f12fc457d521ed2af0a7f5647f863d282ab5307df4175eae07166b37b3bf86d5dea11b0d44bb0b461a98d60e95a63d74058ea0260d704c0f18c0e01739a08964f43437a08aeba85391cdfd0810543dac347d8639ab608b4e1e44559a3698b373a809f5d178091d57b2680975a70bcc52fc9436ae95bfa96bea50fc4caede80bc1b60dc5b3b4ff0fb6483fb8f6d1e520b6471eead84fca6bd4da2fc96d31ea6ac96bd18bd72215154c6e0b8018b75dfa1f1419afc134fdaf8cd722550d51df9477d569da640d4fbf3e4d9ba4e1a9347afab296ad910749b7fb6d8d34fd22f48160a0298100f9ae03720f041c351029466f20d81f04f0fded77b8497ed03d88b7d460f71684efb0748ad2d2203c903b080fe416c883207c7419013281e0a87fe0ed3300bc432d80bc290898eefa01ded503bc63550fded607de714d077847280ef08e6b78f0964521ded2cb067847a800e02d8b7ae02dbde84dc3d2f435c0fbe967bc2fc6f41f6f4a3f03bc630400de7247874775f2a119def1295ae5c05b0ee5e02d93e4530c6f6905db5fd26b59030d549cd146505df4c53ae00dd6697df7e07b2fb50beb80b9cb53a6f6e135504b1788eb5315437fba5084a42b148fd2fa9582ea14d1e0e1072c2f6859a3c4e546bf859ff62525d1ff96e87f4cf43f276a8b377a8b3cac64919b2005d531232d7dba4f9f1eb3c3701df68ee55879cb5ea6823ba7a6ed8786864e7093cf29719f178ec9f3fef5fef297bfe7799126aeff9ce2aedca2598e9c8fd362697f7b6516a901cf805552da1f2c0325c6ffbae378c179cfbda8f32bdd9acebf5373537553660675c5d835d27bcffa02cbcbeee1e779bb1e16750ebce990969f833725dad448cb6f618a449db49cba7857a4ea54a7b47c99f4351e7bd8b754f5ae9b9b9b1baab304d67a18ec5bae9b9b9b1bfaae16ec37ecdd3d4fabaff2d0a1669949e6bfef208efb42d245c7d4b4e9c8b369364195f11ab72fde42face298df3387983efcde7b0635733e6de9f8ea6fb9beee677f7387f9367d3c4c9dbc943ff7ab1ebeb84f29a74b972107deea94c9412fa5c9e4fb3e99527539e5e3c94722acda9e4b5b9c5b3de03eb6ec79a48f21dcbb37ccd1048348b8ebca6e3d9ab3cb4f2303e5da191f266c91704fbefa386e164100441100441f0822fbbd7e777eeeeddf528523b983794d703f9cbc341fe73669d25b01ce4fb7bf7bc1e3b5c9c7fbd8c2e24aec7f9f91dbe8f738ddc2cd9a2c177895d7ff1bbf07d10774f5d47ee77dee19bc7c142e0dffc74fdcddfee6fb2afc1fb7b90fb0e07f97f9e8340cf7beebf2fcf2b736809fded9ee5a19c535a4a59ec913fa7ace4cf2bf9132b0a8973ce39ddddbd76a68cbb6dcca80328a848d2dd7f2fff09059a0ee29ecaaaf4be6aa03d28342d7bef2be674e45da54aeb50a2e1440767d6e4f1a7f4c3a3bb69c4c97b96232b69c93dc59c1aedaf23c67d0f2c194681a6bd0c652ae9ff79d97fbdde7a1eddafa7394847491735cd34698b879e3594e79acff90ee298595d6648d336cb3eb386bcd6451d93bdd441f31a528e8f5ec3f918ae9f43c78fb93abefede415293f4a61a3c123d04717e839fe3717211308ff049620f34815c0796c9d8cc9a0157bed4d1816421c6982d3be2687a7f6b9337b7e2b204249ef0e9c4b7fad33a31c7d8435595e4c117a5cf1923ad4a4d52caca99296a6d99734eae8565e64aadb565abaa3835764e5714d9064994b36ee1545555c4d833bb1bbe18b1076ea4fac248537d31a4e3cb74a4fa2249cb2cc2d2e714d59464638fd41aae080accb9b2175c7a5551d5162fb0a8aaae4c2ea41a567a531b4ea9abfcc627af94ae692795165ba8b4f022d1781cf09ed14a1a08d94e94591cf07a12950fe493aea0484a492b8f35e69c95cb51556be55a125365d134d3912a0ba84d5b475f9237e4776053ed5e28e948e50551a4928af202c9a5943ea9a2a4a8a85e20757c8a22ea290a2cb46cba28283b1b7ba8d068977a834a2a4aaa0dbd691785d4ac3b75a4a23a43a97e88fc087f66f015bc68d7b606aa1588744c9b412343f0490d4829469476d984f2c5e834aff9c4d0278a0874ad955ef922edf3fc9be11d5b28a9103677bfa6a0a63bf6348f4521b47eabd5fabeefc3fb04aeab9d05e90d525fa481b3665b2e6069ac23550b5ee8d66c4dead4fecc5d6c28a5a420a512c4e28b341e39ebee7870258c1f290dca8e9652de16dc8ff6ce34f0e14a3492b4c76438de5a4f8421c32d86ab7c4bcc704596ab5bec61b028180c0673b55ee60f06834dc1aa6056d396f36eedbd918345c51e7f9f322e921e30aefd59613838ff4d3bf1fd8f6b4d7cd38113dffce77d2038f1cb054efc7a8113bffebbb9383070e22f064efcc9c089bfff72acfe72b4f4a783d3df0c9cd8fb7680137b3cc0a93f1dd06eefbbff3adce2f4e760077698ea8f821d9e5f8bcb153fcd000300cc1d1d1e3b7ca623478e4cc66038f7e6153568d15edd7b6fb16b9b83ff084d77f947ec917152f039bc61579cf61e07efaabdbf37784fed69ef3ff960adca43af49d5a6a8b8db5693d2be6951b6a2f9fe36a2d9c4243b9219615d49453531c58e62465857521efa9452ca9c74cd4810dd6449fb35c7661b9a3c2eb30d4d5bcd2a6f9bc1ee6b67e2b8bb66553b23fb56375f8623f7e01f814647aa2398421da98e78d236db15afd5ceb89b9023cb2674b4eb280876728a8e931c9ff325e4c87156f9f224e7655fa5843b79e6cb72157720ddfb4c9eaea39dcdd6372c4a66bf742ffb9cdf6f73b04f0b8ab42cef299c9eb97626f6f8cb5cb3f2d0c93c35312d25c98e64463222d91096159a2b0d9bf25a948a22f3d4c4b4143b4a8a196d18566ce8bfbc6156daff4a8d875e3be3a15b1969e293e60e4d1edb90b5b6a11d23d2fe126fdb04163579b6dc5db39ab626cee35fdb33a9fd7d505d984b972e8d00ed35441ec6265d8e39e62871b2f4a64ddd70b264991625a594a9e04679ad4773da9f5645b3f29acc28c8b4072898273d4224438ba25ded6481a437cd36b38e92f9f66dde36dbd017c343bcb021bac13060e2c26034eea78e13bf35993c51b4299a94871cc471615131fb311c8362e9ea66678769511edaa74d79d8d1a26851535eeb322c0ad665da144dca43a745d96e76b58bea9e44af4d796dd7aca46c43b42aaf6daf5969ff6d1bd2fe352baf711905192c6ada685191c7df46dd192c4acf1cb58482694253d85437c691d32dba605151b4299a150d8d2d09c73788faa28eb4ed236764e2e9a0987d40259e8e91fe9679aba0695cf2011763dae8a86510947846b79efbad82aef1831da9aca8d253a46e6514e2191d65b669a3b91c04255a61a46946215a61b4b1a7a315463ae6e8b3e80b80189c2fd2e28783ab502a8080c1e986f31757c940cc0d26050757c1f9fb305c05f6b1771506e084021a6ef771b00a310d0ab6d872c3f9185621f674bb0fc32ae4d870c3c9451c88ff77f117f0fb6051dce821f59740b9c8941e0cea460fbd0b7a33eb2c79fdb4d97e9727fd0e7b3a600beb805f9fea4fe22218e8fbd7ebf3ac37ffbd9ff9f5afd694972795e468f95a7a188833e189b5a12cb2a77c718b78e84da24f9a9bc217ef53c0f9fb29c41ef6f79fe0e49be3e479bd979fc460b9e78bbb63d69e89a095f7bf5c3279e87f93a597efbe0317aefd2d9748b872a1fce8d7fe11c1b4b9f20ec1bcffe504bb3c45035078b83b92f111c62552440455863c944b1787eb43cf2028f1ea49cf8c42bcba5d1c6f562f075f40db1d93a6df238dbb7770fe50e781fc0800a8a74367494e10f839390fc2fef59a32d9944d996cca6432d99c32d99cb22993c9e6e4b123f673ce39797c5541cf1d388ad4f379c864f946c7c370d09c600e9a3be7679eaf63624d3ab36ccae031986832780c3eba9074d12043896b34dd324a18feeb7f51d270239515655c4884b4e72d84b1ce13fc1abc06b98a068f5fe896b1ce93fcb4a7e52ab4cf2f74f371c4d5f1b2df9d5197046bd25b32d1b006d84e1e0dae684f7fae292aa2e52289fdeb79d82b260a76efe3b51b59cedcf13e3ca461d8254d5b91ce68da7eecd5b485ddd0b4cd9c677e9924ddf980dd90a64a9cd1fc9cbcef4db62f2ca335994833a98b06393acf94bd6cbe07aa782da8ca21fdfe42daa5f6e832328bb93ef613e7f88a655f0c6f20caccf290eef8b981b965ff92651e3ff1f49ab7ec5fb5ce287303512656eca1571b8832af62cf54f38abd8cc7c76a2c3663f5b543ef88cde781ebcc515a3af63b3295a96315ef88c564b11d3baa97b790f6bed61a93c96aad3b76e02dfb1d5ff1d4b2df817de407f5bdfe8e1d38ea3977d4bae3817ce21d7a4e235ef540eb9ac1f216d2b04f5299ffe3e1cd4717132a53cb32110f6f7e660ae41f0f1e311e3c7eced88cbd0e1c350ffc322c63b27ffdc4b27f611ff9c16cb98cc8729c3a5e86e77c1d3a64b29f53c77c994c86750e8f8f611e2e23390f3461d87b1d78470e4612757519f1beeebcec694c96df43ba4326f650351ed2df81e7d5a4d1dec5823bd148c9249ba4d36b07de427ac75b97911dffc9582ceb2c917dec91c83e16a3f35f3a9e8790e6a1e3f54073870c37f1f0e639979157deb9783e0eae9f03dfbfc1382f5d47eee3bc7419c1c1f51f68ce702cc73b76e17c0ebc715e8f933df0faaff35f38287680580eaa79ca3f908be025c351679035e0217d0cb2053ca4ef21479f3e00b0ce5b1cc47dc6f18689ec601dfc93c3ddf1c904af752fd0f4818a24a1ffc46bafe93f200a899ad65aeb37a973ce397d3acfab9e573defed4f0fc471fd113979f430baf7757c3bf0ded981a5d38ce1c69e2343f1cecb1f69e43cf46bec6b75d234f6f4e795d772783cfd99e5b51d4fffe321c19c1d9ff33972e4e0f11f8facb324f63c1e49ec79bc9096611d78835ac7efc05bea1d3c70f45086671f5d750716d2f508f941cecbf0a63ae775e04dd3486efe8504f6f365515afab5a94cd97ca0f99bcad4f5c19b7f691c0c4669e99af78bcad4ae4c3d0473c4b9f51f46a369acd952fffa35764c00700fc220630b194e475a3a8a6cd3810bae6f91474544eee46aa29e11cd953f39d47c2733dfa3e6bb94dbe2d37caff22aae686cf225f7618d9e3fdd872864cfb491d78ebe39e79c73ce39e79c73cef933adcc4fd2249cb6492487b2ae6c3fddc9c3399b7de85383b85b46995a4e5dabe5eede7dcbf3bed57277efbed5f26a35bafbfb6e5729d2df7fdeb7f0d7aa52a5a5f53cfc1dfe5a78732fe95b4ecac9411877cacae68bb6278e7bbd5e2fcee5e2b8d7ebf5e25c39a8d5fabc2fd6c53817f7cab1e578ed395c9884a1cb7dd1f6dd7b2fe7ca793df7aed7bf5c2f97eb2539f9c2fbeeab5d20e8faee4110045f8f410f5f7f31f5f0258bc9a6cb48f7c21774e158ec5d46625976b341ed7a517defcd307c1f07e761ffe160ee6138301cd7831fe8812e097e5040fd654b7587a97e4ffa397ada424649fa923349451ef94df128f2c8578374a6aa4c16d49518345bc868a5a8a3a469935852ca7962944e31caa5aa325950572ddf91cd0f69e053cc6fb8f8226dfbccd9755d57dfced9755d3771909454d289e4e19c32ef78287bc560af902e3a69b2bac217692deee3db69fbe25fba8f533447bbf7aca3c48534752d992f3b50d337a2dfbd90e68195b8ade79e49eb395b9fc33bd6439a877e8bb8446cfee100cddd3f74adad2cb748367a04ba75c11f95127d6cb5a4e4a4e424272527e503cd1823074657e61ca4a3647e95d27fcb7af822b5d2c5647e907c9a837290bf0c22801737bec4c1650d5fa4b6f3a210fa422e49f8a2d736e87a4521564f89d2d2530be9e83252b16ca385a4a4c0278b42748ed8ff80909e12a525a4f75321ed1f3f4714d2e4b31283cfde747ca034627e71fdb3b6ebbaee2d905bdb755d57df06a3efa864cb168c5335cb144404010000001315003028140c86c3219150301a8892b47d14800e81b4486e48978ab324486118428610600021841000848800cd0c110b2b65b46d7ceb2efd715551f6ea0e1af61961fe35f91bc916e6d6b24bd7d386a22f7e890da4f4ee408651a81d9b05996414bcdac6cde273606f3e7ed636b8d4a6ab47698f08cea3b3379a6f6a9132c4ff4cf8997c5b1c143f92bd8144997c67df6754384f90ec74be11b62f8da950de2e27217bcf27017bed4728202db9e64558e7fc79b0b21f340c8c28ac6e227f8c3c2024b634b0f01e0e3d26f6eaff19baa75657f568dede0aa9cb073554c5c9fcd2d8130f16de1f55126e8bf810844751f7abacb63b8dc1fbe4732e702ae7b2052ace357bd735093580cf71cb99642bcc739fa8f03cc582a0460f0a029660ef6e7eb36b10f8b8f93a1369eaa11000eb67e152e9c34d3e9211d6c35348b312c6e2cacf967642697de1e3fcfd4c3f92f5940c39f7afe7c92b5c7372ce4dd9affdeab82b7984e49c90d18fcef25d8e0bc1e67b5588aa60aa94b24fd6527006fa5780f4e5c2482ae17f0cff7cf569339e747aae8b61e81b0e23eac18760cf72864589b74435f698f1ba174380cc42ef5900bb84e54c5c4e909bc963b1337a1e4f17602b7a3537768e900df3ad3226445983c06ab9bb15cc30acbf4c5872ea43d710860533c9a6e277e02c42a95c4060013bbabf51e091f4e3caff873059016f2167f1a553911e3e0214fe857776b3ffff8997ca909a71dd7ce69bfdfff8d4834749ace6b8375e3926e50fa37e18e07737c38b1f2bb837fc8cb6f1b96c1540a83dd84b6513de53812048f508a9e2a4e8f74025c4222f95f82d39103044ccb094634772802253d51f3b4a3ff00dfc1d4f4eb35b71e3f543ed2fa5046ad9859307d8de508dbc39f0a2fa0187efd5435854aaf7fab6ca598d7c127a9c471398d40a71a4d8e9a2c78957dcbae578a2db627a3ea4cda75d56774e92ca74495174a3354f9acd068415c0a9fc214520cd92d610403ef6c845b3e2f1a5f2441f6bb00fb325bce1c40bef89f846ecea7180ec23d431742fea4e192af06db0e25376cd7e874ee8e25b24a12b0f694dbcbae3e6821d6ac2d42d810939267e69e99a111d73b7d622f3393e2403fa729981dffe846f553a1485a0ae9a5a024635e20ca12fe44b82b8e16b10e370421f36b9b1038dd6c6c49d289fe2f2d6a519cf4422181461283e84510ca8605c1524d671a7986c158e1cb8c9757d4d554946020c4d535f830fcd3c369c96cb2d02790129bbc579e4bdd6ebe7f4c13471f55479f8b2aa094329a67fcb022ec7a95c137840952f394892298ba15792ab02f9060eee174d44510e66efe3858c5daf013c9588ef96e5774642f7bcdc7f4cf1bd3873dae22b3225a666eb4a9d5bf23f978b441d7c2f92a813b3fcac21a966c018d2163864f633549b96eb1e48ee8cbf50c6b81d6190ccc61aa4eaa9ff4a665b6f9a350d580df0a213e6ba2c5ef6059f8168283d49c8538082ff539382b912b31131503a1eaa20fd9ebb2455d4487c28237928187f8062420f248a7967232405308c3460b98d42f4f8f0065eef40a3a3f2e1bc79e729b47316455c447fe871e7f33f3a65168b02f37aa14d92c27b8472b57073537e065cb946a34bf011097c6d3d357f52dd340570111c9aca8185fbce8e06810bbb1b81671ba84d61a8bf04743a535b61dea9e67aecb21fe72de6b3a2b812b330209122b82f028d798aaccea37b23161195f247e3dd9b940cfb1e76899082102e3da459c39c4e40d0d4d7d682a8cfcc461b26343eb4bc845258be5477c0cbdd385c47e8c800ffd86650eb25cd4b66359f03319ad9f435a4e776787a29c425d656b6ff58e2af1c1a416ed33fc33e0ba49255f6bd18c0fcb0607682813b4f382820b6f5cce9c92550a6eeb74eb203dfa3a4511d4134438c656cc6a7f6143f0d23a836a36b916bf4d625ab027563d77e0c2b17ead684308e62f844b3f79dda6fe7ce47fc9d7e01a211d7cf4296f44dca3b8fa27af0e05d5d1a868438515570cb43446253d05ebbf46aec46c504008246a6258164836f2a137108faf66b521cdb1110a103aa8d99f188f608e9643e84eaa4fe95c2cbd77835c54ac9683d3328c97120829958f2435fbd9b9d75eb49de121182fcd558585712fa2581cbc8d634e2722de186bd9e619a6d9b5182ebde5fcfa6f7d897e141838df6cbd745521e4115ba82a4f8073967d4224c5c6013538fd29eab895107e1efd45706f9b105edbedc808c087f49096f6d8e625e7dcd816a69489035386a6427a00516723a1f4e73ef6f682bd606d88c9c4d89629500876c964626cbe137242ecdb17f54654e61dd16d0ce0daf1e9b8a7a082774cf5c36b8b832cd38c9c2a4741e4ac02550cae63c717d4046ae218c78648b5528dbf70548df8c757e6175de01d36ac4580fa9257d2a232eb9e9b8c54bdccddc700f832a518205ef41c2908dbaba6c349380d59a8817adf64f40f58355feaa4d53aa1d92abacf2a28fcd2c7dc042a05dc1a69fc065b89a76c0dcc0d4b6f2a14d7168872ab9cfc30ec98a005a94270d73d2f8aa602538ca3b8978e97929ad40c9255acf49613e6a713dca976614dc887f89325b4c449a0d660066950bb4f06dc3e79bce3a2503b3692e7fd100ea236f842750eba8fc4b92220b1f82f58491e74eebe447ff1b67194603352473cf40d40f38b755badfa2e222657c651f191fd0cbb26c7b8a5f87ccac1054dc04d4c4c0ecb91f9f340a6b5da4621dc6f3f23c10d9a886f4e1d9293eee6989a96006c66dde1260a2c2db9fd3888ecfac30b2f34c78acbb692feb1485cc2201ea980f0e0ef4ac66e8b1251b31152e71ddd3a13767226ec6e9d4650c396049cc8dccdc6f99a66d157970bb507ea8b053b590746cf3df9632ec366999e05fa74ff95fb2358f660700a6f0edd91f25961443afa136da8346c691371bcd276ebecb78f65846c3cedb4b83af2351611571e601c1e9134fe989f4e4c14e4430659597442c760c654a18c7320c2c3854e93f556975dd5a946767a5519b5f41b7d7a3bbde4a70cf6a6972c41109cd8dedddc420246cc41e51fecc27830e45b20c03f7e6935df3e4ca4629f496eb537a687db3aa6c3cfe59df8a67e14ed7cef018c5611ef1e10ac84f3adf9e7121e52c87f8545d4c368e4b8e162932aa760da462f2a2da40eb8f7be5dd478068c85c6f89e03840b4f1ace6c3a548a43ae8abe955ca5fb37f9f73736195c29d26f7bf2852d43a94944e1493f98df129aba149ede15e4675786c854b783924325b7d6cef24e85a8942ce72b610fdd0689df325ca41516cc84c5f4761871dff2d6990a10599632cca6472a63d24668a78d47fc49fda26c61e6a126dd2569769b9354a097604edd56de581e136c8d72328255bf9f69e86d9d859f7bbafa7779950d24c03ae47f6dbac8bb8c95095ffde2b6a840431534ef9ef2021418afb97396b6a9dbcf698e2e9d6940acf21cc37de38a06a390cda394f416528c2c44d8ab38ea268d699479875fcbeac937ccf8b800005dcf00da1c439b84034ec9d9873e925b6922566169424f4e24bd805ab795c75a4f09a24d48a94f11010317a1111868150cf9d8c63c2bcc08f208fcf64d9488542bf284416d0711d177b081ff1c5cd85c5762fc2372cb917c78e602cc004415dae42f70e54496299d42840617e071fb5e99872dd44a35ab70631651fa3530895882087ac788cf355ca64ea51e4581b48d9be987c1a0d5e06139018bc1af855cb23298c2e70723939f0c1bdc8f0079e8dab926e97498c9969fceaf224ea4dc0369e26c662b0a79b1252a8f2bd6a6964b83384135fcb0187a906965b6e11a7d4021144e01f8e8fb9e6b8860365634ea2aa85d6c6b4e3358f411eaf8d971d906892be1eca948a8a94f2fb74c00b9971ee108ba362319a9de1f61d8096d2226016f67df9dac06c562de5014de7347c640b8c135682c38277b65967b691ef7f08482126892e79191af37224314521002c9a9550684489607d8f37f095899bafed6c4a5aba039568920034ec64f6a372f7763154d93763c842ced5b00d50f6ecbc629193a83cd0b41f855b16d529d4f66ae9bcd85604c5ae379ff750139b8bebc73f0bc26fdc74f1292e28309bb5e592a02cfc2617097fe246e5b2d136902fe3ad1dbe598b889f35e3da92f8453ba5f6fd86f6f2026a875694a8b7f5068489f1d43556ddee6465a10374e57d8141ae7b0248e5314cebd8fb00a2816d9ed7d8491f9365bb0908e2709502b64bd359c51257d1b72e8faa007cda25130f9078358d5fd4388a137a36e99f5adc13188b23e2661eb7a08261910d4ac8e5b910d35075bdf086e5b67a468fc9be9ffc187781e30959695b11237f74feb35e395943c6aaac3dd79667e27f235d18dee391dd6a9587a838a4c45b05a37fe056a24bbf7763f5b427fe633ccf94cc03e240b01a1b4b08eb00a2339b0265247eb279d8fb3cfa99c15004e800017979c6db6f47de951fe182b028642dd97cb1f3c7f4a854641608ec1f168f19aec000917e9dab627e3c19d56af454aac68e3cf69841d2397e74ce6a5b134a436556d6332fe1bb916f8f6920db6b48443e39c481c715d47e41840539fe9e34d8bf016795d9a5c47b481cfc58dbd3f812ca7be10326e679495d4bca944f26da7b494f57ea990a6e241c2b0f78030b27354fc3640bbfd3dc2071a8351e82af20f843cf2892a4e5214c5ce4704d1f175126785f91b75f6f2946f3900c88cc7334198baa11e5843933f43849dd2c960c37a34e23a2b7f74c1d9cb18d675551f0fef32d1bae72dd1facb9334a9c3e9d5b6b94041c0d31d7a96e6815d6d9721bcc642e302cc7f01598d7f180484c7a49f6229dcb7777be1b457bd7dccf82d6bbcc285ca11046a660e4c879fbaf15034ff623350ce713424f3a8040a53864384e3183d146bacc3fa64aa31211656a6694979ad75a7df4694a8feb37726152832776631402b968ad27e46e53f46913d6382f07f471a6725b40fd327f568c1822be23dbbb17f60fd6e1c4c70e4f2330c455f4797505a0878b592925d34699503a05b807391719a348440410717f2ae1252edefa24a4bc74b81c2a30e1e850b3b93c88cf87ace041b6fd21466f7951b6ba2e2dfd007283e3527ef74da0b9105530e8809188bdd99cca8049855cf565abd27c5d84497641aa0093244c03e78c74bf3c2e40ac2e968ece642bedae63f9e709012a7d94f2ef4d94c4d937397a4f0869b348bb18660b29c1ce51f443ad72a86077db3ff1569e4d3e9ed9415fa7f5e9414f4470b1991d0816e638a86d56d88519885d5ea53ed8ebc1cf41c3af5a39ebcee291781587a733be26ea7ff6d09cfdca01bb4c5922f1c63062faf6e2fb1eb22162932cd8bb3ac484a5abe997c1177d82d4c09231fe5eea47a23916d7a90d85e91eb2e3c0c4180d7d36e2c03f6d883995ae3d1c5e980c9185eb7adcebc6d870f42127d4719eb899f842e8a0d0f2c8eadf18a3522e6bf6572a6db79ed22315bba603e02cddc3e8dde6414e50a922432969df2744133036c900f2be22714b63b9377d090ff5e20004fe32fdc8398d86127d79c08467021960bb947ac1fc16c7dc026fad717f2dbb0dbf04774eb163e3dfd05a8b85e218cc51c414b50b02939b6a0cc8a419dbad272488b9482fc30e67c3acde92afaa5db1b8af1492d37fe558a145940675949fdb52a1aad11f7599117c46300e7f170760aa48c41f5c23cc10fa827100205f43fc1d3ff0aecf2408f1879a885b1d115041c4268dcb11e932937f20785e78fb7b52af0925ff50863decbb7c45969b9863fe551ff6a17cce8e72bd368ccc07c4373efa4221d484f6537ab530baa3a7623fb07c7279d6a56c75f57a905222a031ea614a5342361a394c7a2533dcc0f155e3391487b903e75085a2b6033e8deca6948aec5c4cb86964e4d6e7f3edebcf054ad130d4a5b43f15518e600d4e96532dbe5a9d91630b7137fe31d223a935bc6b12acca60f978798240d3d8b94fde1c6d2387471453f0b18c5625cb2c4b6652a6542406e77d63ab7fca8278bc65c2529246cbc5f57a35c5b6c466bef7c77efd4a4cb102eb7e450c7a065f278916764133e36a314dcdc2072d5368ede93ffd83c7c0d9f578fc6648e0f23fe396adf69e4757c047a8c0490ae2b3a34f02ed7651c166326a8690ee18e77db24136ecc1d987edaae866423416f1e82b53c44914d21a4b90b7a973961e516d26c729f1e3574b5d5276a863df4f54618d095dbb91406bde4fe15b79f75a81aba7e5a3a0ec7b62ae82602021ecc1ce4ad56c5bf8a716c1ea4d2e3a1b18256f412746d07cc6d76145cf08c0f671cc5ea43369a48a748fd7be4d8e1047a193bca0b8b0d9c22157d0ea668566b274a7373f4526c0157df7bf3acfb7604306c585bafe3ba904c5cd41df6578ed2cb4dd88082314e6ce6975114e0ffe25b909661ca29f22e22d058b6b50881ea58e0406c4e3c185f5cd96443abdec9784c18330e84053bfaa67bc4ed16119be86ffa6b50106db37611b9c72874565b5ac349398097aedd9ff998c3cca139811359b0aa8ba18699214f25262be4ab2eb15e43a1f2048682e73390dc8c6bc692504980b917a9e217b69b8855ad3492001ab1411711239568b80b06d91d790001a1da05ec1eba04162521bf5ace8f40a83fb625e86ad58e2986ed7331c4c7498d0a854e8b7451585cb20b541d5a2b7c0a6f9676320b0f764947cc6238c0a9161263dfe6fe50849f95e46aebbc79dc88c19b726c6ff273675ba4b74de4631bd0ab423f486673dcbb4a884e1dd651df2ba4c2de07862b4316c294ceea97316069240834b4f0df3968474ce6d2b5c6e910af453d85fbfe50fd86ff12638ef000ae75d96222e59a97967255f9edb5c5840f08483222c89b84a017cd7d99781a82513687d6f5a8f174a5d220bb19896a14c41e7fdcf9d0b65e9f717f5e685781b112fb61145b6dbf374c2fd94a8e936502bcad5a65d9f67f1bca889078a441ef14ede088f0cdf3cb486b2ede68b7e02fd32048f7934137a56971fa7cf58ea10e5e79ffca9403a1715d520e79fc56ec7754df5d3616166ea4a1ad9f89e05d087bbc1f23d6413c54dbd7d04ef3c45d31ee9670a74b33a547e68d2f36c0b17ef3ea5b991993c3bdb947f3d3154079629e87fef6f9730fa6719651274ff2e1867f6b2b68560a528373674303ad70d040d1bbaeb27e703bde6b05c2e29e4d5de22929341673605f3cf39cc7cf88a640bf29248867e12a768fe73ce23cfeca73280350ee20c892dcc959d31a8966a7e5039280a697d7a814f22475f55d805ccef338f2d401a3f8e03d6115f0bec099818d3035d69fc45476fbb776daf19df464ae359627709ab056c98d0b8027c9f612156514d3b595b57dee5943ea5068c7dd5e3365811bbb09e4da4c76dfc892f6ef6a6c86c91a74191ae5d137af398d371b9540625287f9176a5a1150d51b36c83033b662a4dc13330725c11e3d93297acc41a86a9348f61f4208d885de8331c6860af769790ce1e1b1dd6fd863e1236769230e25cd81288680ea762bae69cd950a032589f92f837eef094d00d813eda11a94f58e68fe498956196f834fa7913c8e269842cc08a16f90effe91977ef03402543c804295c32971985733a2833541c729dcacaad51a4108c6aa23bd91b2c9f7bb459e46477f132149661d273e5359dde2025e5b6ebad3a880cd92845d7417d086fa3bedf8e123c4d7561294eafb48075eaaed0ad609a9ae71c5006a0fff7c1470a8e8f4fbfe35e17cd533c43514b26d0a9efa47f782a2d61846d724dd1a2db3bae225eb0427129707213d36de2556c368c7fed19baa1a6023e782c4f59d81e4fd7ff6df6f882c495f0854317619206f8a169be30fdb3273cd20421d9285cfbaf001d503b476e8aba499901d54709415c3625c1119b82e365a23f08cc1dfa5721cd50a1c87922f57cb31f2d0f5326794a6ca7d3506c93041f5ba34d960988ab9fbc38a9d06b125e2e24c94d7992fb118f9ec7c804b777a1d057611d82e70727e80c761aa5d7840bd1f8a4c40515445ce49ebe8c6904849f520767645799390a8927d35bd470a3add67666da7a4fd6fc093606c1dfa4ee392334278da5242bb58052c95b29d7a524a6bd95d202c09819f970579e5142b30f36a63942aed5b06adff3dfe8371e6640bc8bd66cbbadc299b48ef83830e00c533153876801f7041af5edd96204da861653e64fe50ff4a4199d090e74c50f2417685db901a471286b58e3864c0943a528a98ac4a9fe82672cb56d0b64043eeacf2261c802db300075a2aceae6c2552013289b694271825d7877b3feb714a447890402a089c8dbe4bb89706338c72901959b4c90cfab542a6037bc26f9587329c93668b7b246940e144e48a5fb5ce3fd0750ef261455ac709c60adcea6bbd9c02daf45e04d83b274645b03c2b8f8c7805f6e33a4e5445e29d30cda8961783ea5872129160a4d496cba97304670b3600161a7da7cade07bba82127497bf613b405bdbe3eb7a555fc1afef7aba748f81174bdb5b513edfb5f7f56b1f2eee79d3d45a19530dfe9a2b2138e1f99a4dbc8883973168fed6b08d7ad46f8d9d9469d3e66b376a651ab4ef6d8e72a2c7b45921d3666ff012ace668bb84cf03fdfc7438549f15af0c753cbdd6a0e8a723a071716faf71f2a62c97e2df6f5ff1e828cb6d4b177720265e308e6feb28b1fdbaa1370040a665bdf70328dda7052f79b6daba16022abbe809b67eb7028a7c29a39db3a0572f5bfd5d02a7469313eb4d81766163243e5648dc42e6e0915026d765004280917f0012a054836ec007c7350f195795492e1f2f216de570de6b4bfcb31d7db0c9788aed94e8c6f8e340e3ea4fe6595cdfe64ff6260caee18d7df72b2b14588667d25e28a7a423f8077b666cbda800f855a1965e916823f16f93f3579483ec65fc9d654f629295f5e6bddd65e5a15ae953556ee78574b2275040d68f4bd6372aebb5977514cd3a3d67bda468fd5aadbf47253e7e5d3d9590576965a167aac47eaabd3a60bad7ea5897036342d97925d927af762221ea46ecbb62fa5d08ffae25e0e50146ba2986942863e0d30663dfeb5cbee892c6c1a8c8f5918495c4a340577e116e9cdce028c3a6b43dcd0d9616ce947d553f454f66935fc44e829681319f7d99df219199d9ff3a2b84d65c20bbf02d3dd979322967276bb88f9142189aacd839c4be646dac78bf1571cefca2805526c2452b5348ae55c420689829bcc9861d45f1096e0e72a8b94a1e23a58b2dc9d324098901235e76bbdf16f8166667417917c89035cbd0d87b1342cdafa0d6aad97836af725faf05295d815ea20a77a9d84ce190640349fc29fa02dec1cc24d0547d4a5cf67054c599123f4e26c8a4aa7f2fca07f98aa8c57432910920332b528e8ef19e29aef40a217d4120189d8cc9a9d74ec8c2a026005011c639aca519ce2a54ff9d173290c89fa8ffee3dcf30a47941f8f5dc1e06b75b7cd3c80fb90f88380aa01e1dbb282a78f8cf14de0e2c950411b9971e38720d1608f3d5e5cd1562f6bbeb4725cf9994051f6f347b68ea50251671673bf1d0aa82b1ad4bf3ff1de24680cd9a3af1471c249b834e3ab93d7698699286a5713e60c401f95a4feae4aaff40e8a91169652b9e9cf84b66808d33d3085213930fae7a1411a366dc1167c6b2a5fb88f52bd6451d9ccee759c46638886bda2174b0e0726742a1039089eda55ed6321581a0605fb49e8a330da8e44b45e2786d51e10c39f11ee095fec166ac8c5dd7fcf608e06f348f7929527a881e44a610b7e0ad11d4d0d7b2e163f4938d8404bd23db8b7680cedb15aa64276a8419bae57100a07edb070a82927c76464f59b012a33f6d621a3a60352ec6fc1f123f9d479457289e01065d835538bdbc75caa4199bc9db216f460ad1316a7fa4802c7d27a95d3b7225bca06fbef750fcc4fece59e3a4d13a69a93841ee0f0d294bdcacba36b4909950c19155bfe95224109d0f80fe74b491dab7a746073adf4102b94cd84b94f355a9bfe64cba49ad46998c440bf75dc398f5b09eda742ce746984e3ec51b9433bdb14a6fb9cc3a3edf74a3cd5bdfb332b8934d450705ae067d56f1f8ef95f96732f1a43c14f60e5e1fcc9a59ed91138d80d73f3865cb62f2eb8b0c5e7babe5c0980f7d6b836f97ae106e2b4d738b6f966a7624ca3044a3a05c772bf1847ddd45236e0290bacee45254467e0aa30b89b8b56f63470ef05357d082f211260c8488d2502e64857f57a850eea73db80a4252981cb41d18f02bf9ec9a3801239390376a6dba67307519204f1236e4047844b426ad2dda1b02bdbb9fcbb15a0453f84daad3e67e351bd05a07051c6e9d5b3b12a9b38b33c242bbf020e3c66ef4894c782650e5ba9da8177c640cd331ba90623bbee85493ed633ea6b823eaa759b81306d02106c0c581566ac7f749b3589b2bb533b4ab3f09b6783fb2ce2438265f6774e0a89f3e20896e0208d156f56814d3a1255e6386fa5f866cd40b11d55eef8998ac4a1ae05c3c87baec44b90f33d1b329378d1759da664afa57d8311e53e673b48ef1008e5f790121b39b28d21316ace8c03f219578724325298ed164d45aee73398691768fe1ee1e364b843ec682cad5493ca1773d86316317dc63bce3f35406a48514673bc6d1c61b7ac7f8e985c7c0b0ac886263b7124e0e0232e60a5a20832ad334de1fc8f8df84081a610519bcc1b5defba4d70dc708716c316564e2d56575514bea159c3b360a4d924cc8d6aa2dd703fabb1f86ada638117ef4ed397118de6dacaa71bf29ce54377f02d82ac5813781958e2d00547a7bcb801e48320f7097b17cb5405ef7a287502109db958f8c59b048449d5761133ebc80de7d847b934b1c7e92808e10970d535e380e5ac292b63fbe4ee4a8e8423418a3075e585db07116d53b3a4c08febbc0b1cb088dc5a513770bf6a92af9d8aad4b2e2dda42a5d532569939d913026f08be02aae392a4d77bb2cdfd0622ac1490a6e278a8ab794d91a216e431621692ee31366ef1e0ad7c1bd72bb8597695bba1d256952080c623e465d79e8648722c9e45c711ab90da8c5249ce3a1420dd1ba36b934cad2009a404571a0046bfa4764d98702074a9b6fdb4360292a0fb1f84a555bdfdc05c31424c704297bc3a0eced0b5670718621bd1156c32c074513fc368f3588e2a64fefcc61b994dca93b5e1c5ddda7c31241fe8daa8c8250443f1622363513f78033bdc32ab4004073f1a1ac0438db003fbb07706604952838f59d98ad75c03e1ec2fcdc9440866b1883b1f209a301dc211100ec74ff252a76e446d79fc2ee7b063567fb3d56d25cc5eae41a2c8a0302a321b74cbfc64d99c823d942180753c5e3c90f823b9f26958dfc02319d44ea0edbb104b630c6ff4e5321e0abd0a4e5a8bf61abd88548763408bda1f1a6acb20a124f9d4ad3401ddadd4a44b4f30f0eed01f66e83c2a6f4b9c0c4ac37d1b40550a554a2f93c1b1acee141bd85cd5f968f67a2d95f417c264dea76df9524362a8f265ef898e0076e09d969661793b592613b44908f9fb572798e5acd7bcbf08132578544644b7bcf85d7096c95f7951f90477aadc64efa238d859b82f72b2a3172f9736c6530125a938374e4e2187776f9d0c671525f8463f7b89abd6603a6571577029a330fbf802e80395315f7b820c7f6875273382fc8d7b0248cd6dbb0a08cc3afa6d5e9a4a086b943330fc7e318ed38eca51954bc3217cbb37729994d8f90432ca9105556cdee1b3bbe1f694879190cb3732e59e30ec0854ef72dc426da7c2dae089b2a20eb35583b592f5ffb24c2c9c2867ffc8bd5ed2eb05a07e42bbb6fda7bf9a5554e90f3bcfc93d0849e28a6ed15ce4e7e70a99c42984231e2b10743f9571816a4f0b7a2509a0142c245b105f6881281d19ed20331d44ab48760725e251e278494a4a1e7e46006bde916dd83158c2fd52f54607875078a1d86d5cd770b80eb2d65014e52da840fd80ec3b7bc275fc1511dbaaf90fdf8c6de43532595113551a922bec7f614061e034b90a97fb1ed24185f75591338f28b82962127ede051bd67ea5c9705fca6e2d4355541f8d859eb52c3a88b186be059582c5a5ee96e60c2f24a6f4f740a7d71aaf70252675eb367d57fe37a7970e0e0dbb73c05604cc985dc2a0b494c8a80520178cbd3772747024636406b2b94523fe11765474f104f1086ac74bb83adb522ba9f7b01884937dde4df8144c4e7ea0a0b198383e0b5e86f050d4c7b4dc1b7844214452c64ffcf2ec1ed8a37e8ee40dd206e8e8a0aa04b8312794afd88cc50f4d37b7afad12db1370b165606a0f48a60b80260d2ab0b33cf61a77e04a114a9b91f01746a9869c7ea98c771b299dedcaaf001f9e3f12e8166c9c62ec624fe36676b0ba087feabc3f2e37fe6e7c4489286e052821e4c9cc5236407b02c2ca5bae15f525b5f3d3050612b2c87cb84c1c05e8e8c8f0fe8dbe9c50470c15e505d2fa26b0d21b2532a6c27783f1468f77f2394cdca2ce2eeb89572a2859dfebbbe1ac216c64ecdf9813a9cd5cbfa1d0b068a88b0b479c0085a50bfbc2f2d5a2de0943cdfe2e11719363985fb1790cf5cbdeef02c04feb5e63f173f75e5fe0a4d6b229c3283f1f27e9d715e62566625607a383399f7331adf8f2efd03be16448aab250fbe9e34d158d44605b118f153e3c17db426846a0a76788587c0db1e821a2b0577db1b667ac8f3a631f697ee208dbcd801ea120399c48176df25472087acc906d254b3a2cc31890914a6b9f236eeb63e0a1dedf74fe7cfdf6ba8723a873530da9de35552d4fdc1b9280167cac5267bbaa496e913ecf820101cf10abcacd189780302512af633204ad10b6fd9e017dc0463548813e4479bd6641c42c360961d87301d4253b510183f65af8ccaad26492c74158596add0ae9d11c2ab750d1759a3b74ca50d2b652424f1489871a54e01f675fcafd05288c08a349e3c141e0a3c0091c577ae8c080e372de1897e8fe926e16dddb19b6e56b1eb81496b2079417f7c10829177d87f63b93d25c41d6188dade65cd60a4ab9fad9dd756046f8bbc4796dbc151de4c84b7d9dbee16702e56130e505f749fb33915f3254a0bdbc990f990263035dfefbf512fb4ac27d1feb2bbef452a22acd99d59597316435a13300de6960d489700823e42957a1e79dca9dc0d4401bf44dcaee2dbe87e1b81f74cdfd1b60fd80de1820be7b87a867cc038a85409d3ac0eb458ecf30ef0d49f3826778c33b88a82b1df8d2f51160445b398b53f73e12c2f5b24f5c525a146b9ae7c7cb42008bea0058cba573331c004470979502017411f7bd6b44b42718fe03249bcd4f36ffec9d01377dc092c64ac0c1a83a7ab83b57e7dc2292be5eaf3c50d1e396a0f7aa418c213b563003dc8aa8f92ac71f3171b0280153692d8aaa81245ee8b61c73f700f8deb51fba0275a0bb4dc6e7496cc9b5ecd6810f176b8697a8945a6ab0bcccea77727393a6c120d1cd0199704147cd5cb719f5676dcf068425824e4a3357ff7ba630da59cd832656a7808d100c8a14edd7db76065eca7cf8e3b0674ad330afab3859014d285ae9788d1287aa480d28ab96947c680a23f2fa30f45d8c9d39da0236cd233a8e73a1d59d19296ff1faf3fb1202a653a72a75d7dd4350a1df3a41f8444f78395bf6333d499be048e27420d9cd76ab23977209f12b295243e1a9002cef7cc93598d1cc01e36c2388c5f5bc25e1b19978225b10797b16b96214ca865043123b5e3b945cf8c000e4e2883d46db3c6a89c355e1575b169b96833a2d14e6aff4570f684a1b66fb59eb51f17e195ea239a13203d69a26995f55a295f5ae9051971f261d707ebc4c64690d519fe07f377f1a038b85e3c74c2340eada450eb2a6944e88743c54135aa2da2be8c2070c132228b64e140687ac8b60b60e355eddf4da1394f457905d60b1c0b93249900d4d38f20092b83c7990b1c7a98173aabb307ef1d8d73f257f20038cf8294a545af2c37a9e8f75db38ea2d8cb5d070c266309df4e3a553736ed9715b3dfb7f6c9cc241a267197e0bb04d6d37cb997b1f091d19576758711b64400f9cee9d8f0e51f0e1840ac417834a7a150aa0c8b4124918f7450484098a109254a2f5b0784be344f4d8871be2018a24a4740578662506bbbd84892f1d48e276f4a87b7b6c823db6878d52d71f525259820bc2d18cacc682f800032818b88a9dfe815496e16577b59d602901ebebdefb1ebd3fbb962c274ccc9a9fe71502327c8560952df031ce3071c432b516aead207b9e5891f57b2f34a5ea5e67e2e2ec3fa93397b46b10059a7d8ef23e590158ddf539272313667286259a3b8584b959950786a3e5e61d7ae589234629bd8641ecca060ac043e334866c27fb69eb24d8bfde179eac1a73076928af11c9e239118eeb733f22996f06c24d2b84fb8b5b537faab4a51f55dad7017f4700a50b0e6e160df4ea23d3727a1308a58d8b73cc22782047643740c3ab46216e71a5a2b0251fd51a87f5e9bc5eb91c49401ca5adaa52ae467124694cb19fb90935119794f487a000cb6d5c52c35365d1afe6fae43234227f50e54291f3a395022c73e8632acd7b4818bd76f6688d989ffe189e2b3191ba217a6448b6a30a1f1c41294591036aad7c66a57ee0201029a88cbcd97b0fbfe3b827180752384042b00b189694e2000e474264b89a50ec0b28dc39c65e8b1e14592a435eca3d8b05e5d1916f81d20b869e060d663de681d424124ed10ca912241c50ceb3d2bb3fcb4f9a22d0603248bbc73dcddbd534b0e0760bfcf8f220c61c12e9fa59ad419a77e231e52bfd01e20ae72877661e9b329327d2158d438b61f44fa8aa0cd567d3d0be7612881953b22fba03c869234a62a0ec4ff812dba008cf7e5ed03135c8d95b8458d6e7f4d2a3e5cb031844d096a8fbfabac664d610418185361837f8fea537e3342c945d60099808dc1a1acd70e2b45ae9174682a72090de0389b90152873e18f837a863d606b06a9b06a19b6d791f19670878aaf2660a8afa2446a5d3447509aa4fbfe158c41653d3b8f54e5a7d9a3fb6bd4f9ef2f9269540b13d83a8a592677e1782e9a86118cd952ac2ef1d4c73e173bb7b941f59d4dbe58ac39f2167c1363ba30d922a53f40be336729b8dadc7694ab2eef6f78ec9cefb481bb856a2a821fb33dbf2040913dca4531fffc0c55eef45668b0cab31e6d639f1497a6eab702ac1cdd58f5433da54c6788c72d86b5e2b55d1a2a02deddc781cbd1ae71bec18c38791f722f05fcea4a11c83fa61febd1ae106454f8e4fa1b2a898ec02474835446c5ea2f486db30c15cb519e721b39d2c8790bb22eecea434f86eaf14193f31f6a5d09b817dc00d8f8ce017862b49306530336403748b23ceed5c0bab201de6ae532076b6426a03bc89718dc195f865c61bb32e90d3bed4f901309f48907291f1d8b995e3e702db7372dcb83ec17362dd27a46406f1e0260de9d1ad40a5c0a120e071ebb3c00d23b5d749eb92d329321789ec453ab13836211bf7c841b2496c44a2910bf1cab0c94e9c22f976e2dfca841992c57071332e31aff45d75ecd5ae6d4087055efc8c272485d29e7f76b441d30d6d015507d94c1b882a60bbec134c41e620d3e7b28bde6b7e88e058ea2b17d992e8d88fb898067f9575e3c6de09f27bf5e25f6e2b4261ab88617f263546b966f3b6a2ee3e20a029c72cc954c00a66e4b11e0d248581a9b465924c5d95d496a277556256f0eb3aae8757347e821b702f14b46fb81ef32e6ea2dfc8423f84f940d3ccd291310a29ead2804700a325c56c318a1087dfceb255e820301924b85242e4fa372f4422f4bf69be634f60171fee18d3390b98d0cffff5567074812b8f7532830993d933e003e9dfea777145f89a970939e6384caa69eb4ad37ec0613043301e99a274dcbe0fe82710d80d20b13f0ef15d2a999ac026e982ab5fe88b2f7963070511d775cf36982af858afb7b3d6b615a97269e4c8ebc62c40c2ec70750f34371c75aacc905ab29045edc69aa26b8d087c66a93bc9c289c78b2874cf20784cde988209338bc7a849dc1ade5b1acd5908a7bb68a588f406e7a5689c65661fbca079389b2ea76d36ebedc5a579f5721ecb1ee8458cde5b977edef7d3d617cba5e704f085161d14406e34fde731c224124c3d0440af8ea79c6ad13040ac334b116317fdf832171b7c20fb63bba0260898655fc4a4dc3cc24a47e6f1777125135c323be20b4fcd7a4a5b858518be12f30c9ddf439bf5a187f49094e0a287e45a47f76c54805f4ae8b76a4b89a80a0097cd96f1d473dbebfc7fdd7a8faa2bff003be429061a0fa22cc4b52b705bda01abf074410f4996430feee78b5e7e59aed1de6089431c099d887cdf5552d25be77117cf69cd67ad0a874fbde3d73b358ff1c5e2672a5e58ed20a7c5fcd0da9d2c0a280f7a702985f806e8017f507f0e15f1eaf0326c8c3a93a7d31f2021855ea58e9fe1fce6ff0c1224fb047a706c604d8437cb6b34a281fae53ea25f60379e3d36f544367324bb913b743bd235c10c33aad541b0eb343cb291739b50a3268b53ed902d4ca3289550e68fa0e0443e42c77dcf8e9994dbb40ac499ba10fa01595627688c0371355d7b6d5dc84bb2c249314a6a2c5f2e1f535cb74f184c4adfad62bb160e0afcd4f3dce16872ab35a256b4ec0fce0d593e47fa95ffd9103b94743b8aa12412e1d22c45577489c9f73abcc051109f5e3f9afe81adb93acd13a48b19d539cd74d961d8b2dc03adb20848c8157bb71c90ae2567fef27a0ff019a339f2a29f2d57b60e058620d8710a07669e83ac1e339c386a30af0dd1e0836ec59d33f2844646b0da24b7b76b306b77f5e83dc98b625d660c839d59faf9b811e36665682d661b788f53a86e89f2f7d98ba301f6a3254f679dd83ac151ffc647462374f3ad330149ad4f84e2c4aec473b4ba788a483aef81e2b4466043982ac7870daf5fbddc7ef730157b44ce4f29f4cb95c7ecce60b054fc1f10ae0b265270985717e1e76bfb564ffe0d1e0aadf72b5e4b712fff186411597ee3b426cc3049fe38abfed8306739ac59c2aaace2cf7b631606c7ddb8406719ddbb117edc7313ec12d41098b5314b9dde06c41cc5307b8a7a7e8edeeb906ed34918a767959b6cc2cb4977831f2786a007ada59f871f15f1a968fd17a938ba42cacd2e7cb4b01f91dbb25e04f405022c34f749f26c1a45eb3fb0f7f140226fc3f91eedde69a7d3ed19f197cec836165feebc10b68531a00c55564136b3a6e208b56cda5e495dc2fc22533f65b34127e33aa16d465151a068ddc24d324887c0507358813a9d99b9e7654462680d94aa18288db649c764414db9a6e62606cb7516f9ee4bb511838998e59f7229071f9b97da1514f0a682638546b9e5b69f98a4bba0ef6c51d3ab0122c252b6e2149bbe4bba3d63616b7edf1cc56103fa3d1b797f4c4a866f2ef40b369e107a61c30f70c4aebdbcabb710251c850394fa8072c5dc183ce41d0c0577e5b13dbb8246c611dfc5e1566e9f0b6506b39d4e1e91e2d7f853cabea68083e17304e4e80a5128174a9d2c291b07288783dcaad9986940f6ee4a51a298581f00192308860b3e92822cf6492084d5adf706d80fc15040af8c73413acc85c423cbe2eebbc3a4f4da2fba6a0dc69a1f28ef4b3fee507bb74429f0d4d3d1e6f5e8a16d4e452781ce237b892e1bef939b5c985f73b88c2c744d8bf1238fdc5ea7e5ec94780bfc6e5424fcf81997ad8f6435e305b00409c6db019671fe1d50a29c17845626c0b370ec46ef9cf83ae75456134d762676a989122e8d76bd5c6e3483766e72294ca1978ef1531fed96e2c60933a5ee8b05ea0d582a73a2b89f6150fb78c0ecd3e4f24ba190e31496cbb5de41d6948fcc89785a589d6d896d793c57c9a00aa724c98947023a1d6c8ccbb9a495d6a8c0333163f91b04b5d36be6fd980bbdf6181f4b0518810c3528458d0b555eb4c1c0d3a3d09cd2d2c1408be5b4914d9ab8408f6790f20222a1b447f0aaa4ec3a79bba106932265faa5aa1f6795d2086991395346e1a5514b1af7c16ab0ee3485159f8d7ea79f62b0433afc162558ffc9d90e85ac510e516f3accebcff1dfd2063d0a1ee64b668aa24393a1b3876bad0f86be6d6c9b9a2e1eeb4a33a49e92cc1b010d6da27a326ba437d4e53512faba14129c5a4ec0343c31508e841194b9b1831cbd608e5f06dc2529aa4d3023db2980b9a69a6183d345fef993bcadddd6cf4df339366876e865ef40f07ca4cc371eed14bb0c25aecd9ec957b46a96d26c3fca3d67b0dcc17cdf6d48c9a5a0d6e61031fd759e59847f3d35b022126ab3a10ad8ad2b96019ffeea7889d639d1464570f1ad6b35c193c73c254a90140d0993d52e8232e6db74c65f5a6e033776e0f61dbf9b3e47deb6f19d9f5381725b135172c76d0792ad1946ea75a78df1a06629fff4f0b8ac1ee7211e8bb08c2f8ea1b33cdcc81bb88ab30c11261990d9e15b86824fe61c338245eb74633d6539811dc739c23314eb9a789abd76ebb16b371bd88571e014b19b78c201da81e9944ce40a02da7eae1be84904b19909bbf1020d1ce7008fd495244d527f4e7c39405796c157af7b4a65af38c276e3900c71391d177063d7d88b3c309d19a578af8e5002e4ae229e8e602da80821dfe01e821d1cc4b35548b288cee3a103be15c7c9367cec754e04806677ec08fe013b03311975211cf30df59ae07d47170719a3fce4c0a1c1980f543e5eebb26349e46d6487f30c106d0fb5088516504e4aa1c1822035406e45a887abc1983c7b33ec7b7a3aa6f5bfdf9b5b4247665aca8fdcb1b18b3b2768d0c19b4a4f6121f2cbf92d961ecf687a3a62b61ee4f804f1d6315e364500bfe043f5f01601547f692a76d069dabe0c2ce449963f41afcfe027ea28c531fe28f649252ed20c20af185c7ca0036ed9a99ed1853c244d9cce7a48b2d96f7566322bf9cde9fbce31f8404d93cbe887fa4da2551a51639809f2ec080ce167791a36e921079bbf12f44309b36be5c69d9d1e18c1b477a3950a20b1609ef34ff04e7755f05b8a315fce388d53bde65f991db9e2f81827dbaa4e2f2e51a46936881d2164851158ddb8b139aee71a5979d696fc760ebca5014c6e762ec7a392834a0dfa813201a932b3560e8a68342abaa53a0fbf127872a9a2ee08f4490ca84e9ebf394f92059f37644e441ca79095118cc642f4a5054066a252873ab8ccde544581d5f8cfc14d988f854654e9896b661d94888ceaac8f69fcf55be070bd3bceebee01201bfa765479327d9e02688705e163e822bdee5dba0c813e7c4c8e46a242df2bcd5bac232e46ec5c02fa246302610982d3e9be67b779ae7b028abbc2f9486f1107382e346020258a5ddf101425965c63a442006d4750478eff23c7994e62fd015f51720f81b0f7cf8162de02719d6d95e78a900a79d7993306f1821d5e2417a874179f3d61b53750b8b22e0a4f8bfe9af1f5541d7742b4933a3b65ea892444d77b5d6a4c745dfc5ff0128f4c3b53b007bcb55552638f58c3da6b84bc9a481e0a868b5ebf6b6a8823dd9e08617907fb17f39b591281d2b8a265e3456494afc53e25db2265ec34c168e94e04b3c3ad79103c30b50314338ce6854a3152a019007a47a9a9bf980a1a0c36e83f64b3503e3805fb99522a5c336061480bada6dc9e442008359d5311b6cc11a55aca7fe90aa0b1c81dc54d200291a187c65947c6b32a4c3710723e164865483485d6f26fffd5b327fa9570a1b01fcf7483fa776a6e2779705f266a2dd09525244eb678942440299e7dc29e2e50d03d51e2fa9846aaa0ec6a32c7689638fbde95607d93e43e0e47eb657fc0375e4aac14cd65ded2c170ad253a394283856d92e50a90082d8fc11d3334e077ba275e4b18e9b20015f9d365f62cd2f838bb2f7ac57c154338c58a6b7dd2b9b76b3ae2f926f479cd2d44b37ac998998f7bd61be6002c7c2d12c0d828204157638d3c251d65e7f127fa7cd7cd2fa5ddc8a216199dd64080d9a6d6b300b5e441d3832d6c9547122ee9fab0a41fc9550621c452e074182cbfd62d856eecc0d12ad9a312f4ced986e4ec1632d0a95636c2bd87832a4d41bd35789171f61926ce61199d10ebef0741aaf1b6aaea3e7b8141ae4c60f855ac941b62f6647ae0c3dc891098b1e709c641307ac245585a792274af75fe93b925a5dae6413b801a56710f1daa5889c018b10e71da2ead43c4d75258531b5568c4699584e8f84d0700481c267c040725f8ecdf86c808edfd86c42c633a58781f8fdc227a9e72d5e14da6c3a3242db79fa512dc54ff99fd79ec9198f36e84bea5911b34c63fa9bcc5f6dd6a8c4072a0d05b873c0731c6afcd14c94573ec120a6b9d6f4b1925c06a91cad8fa0773b86b4a7f0fcee32efa099c106cc87b040a2eb5ee8ebfbc61322eec1daace28c9175917d8138c9b8b823ab783c4208c7a313f054b1ad7f580329254a8308770fc418959782dbdb60e96d218f002e56b245843dc080a3bc3941e4cd451f6fae28de5cdaa280395a328897d91c69aab75c227764bf6cae1a49bb3236d6d35cc0d39c895bd23745fc1bc91d9194d5cd0fd3e6591a3bd697ddebe6f391e25c180509a64284e19a8a9bf6c5395b7cc3a31052e5d10fddfb18d8cd9b7554187170256f7084e4bda8d14b56f232db0b07f048388254481612e6bae471526458e51b7d6e77842c995dd335233b3d72e3f7ecfd4d4bd4c0a5c4c284bdc11760ae267729889f75188966eb9d4d3b50182fe6aa5d328a04475f14a1715dc8f1bec498fdb15c2fd32ae08d73a58567917ea340a1ac73ddc2c6b906ab18e7aac14c148c4170952ae7123464c2503797e297e2f026021f8eabfd272b9d76ca4267bc683e72f61cc7880b7cb36f0c8dafee02346a2bd6addfd985d8e465c25f26fd95600b90765b133f67450c0b246f9aedcaf9d864f3f745e78a88be75422e32854c3c11c62828ddbc4cc64a04c32a0618a7d39d94c4f269345b442ded06fb178fa8e0704a0febfae19dcd3708a28544dcec258128b92416d66568bfeeceef73d611cd59f6921c4a7486622e4a72566da52a0ed99b878152e44157fba04fb4157184a8a5c487963633254624c69a7e51a961a18b3596ee076580b2a3390326d8111d6e88e0f83f60bf242dc7baf6807f980286dceb943e9244d7975d4b20bb05b82d583659c9d4481c144873c8b51b5383b5680780b65acc80bc0bec3ffb8e65f891f921ab4c795e25295a58fc2ad1596c02b6ac6c865a41b356478f3da84f409579d78a6217de6143a3ec287a1333672dace88b21a69a301f181d7863b807701864bacb44359faf4604324a3f69f306aa825613de0a8046e383b0c2832b59b876cf335b462d9aeca7f9fafe903c09d4efac2f8b25bec846cd7fc98c16f16142dcde02322f366006d47e8443753aa09c99a8d5e7d0985a238442f87f93b3f4d6d1542b2111857fe92daf7f627781278cd69f4a51665788e06da783c6e44b61b3a044533b11080a01faca0a514621b6f5f08d2297d5104961f316b0c0d292ee11932b1873fdcff4317fcdf8c842d25f15c2b84f2e1bd6f8a6f4c463019d25eee069f495af43c1818b66d2bf519c409217d536b620454ce7612a48560c6206d9b513f951d282b01d0270d06250cfa8aa3565ff48b1d6f4e8d68a509b7a6fc156966577104789e2c64e1253ebff01265895170d17652a7718cd674ce3214c7d1dd6d0fdde89b871de664f036ebdb244958848cd7c4692130abd348186b49c170c3339b6f76cc40660c49610b66b43daa22e0449d86ba9128bea69583fe2a7e894a7b06050299d37a285f1a270242c468d710b38e5f612e353d746d601322d54859b55103f256570bfe4813ad8e9e18de191dbc34df512128aade99fcc6b8c4d3d04d69570f0ef083285ac7e1d5d0c636c801d3bd563901116095175e18c736044a76e7edb690fc7927a78f95459e08d33b70d5134be4703db9ee30dd14214ac205d8765e05bf04ba514945c041e2a5bdc533398d3f0808d782a87c188c9a050629381800151434ecf5828065c389317074cc802c4f72e5e879b0102121406107ded577c8a0c6e2aaaf5b178011db6c55476ef6eca3cbb7e3c903fbc554c6186b235262842d65d8f1e00fdcbea322ee6813be0e46b10d0d306e955836228002796ac155dc0cd9c4ae115b6733009dd20221a9b479b101e364837bb922a462b94ea07b8f4567bc05bdd203912ce1d0555f1c89630c7b34e09263c851ea97fb1fd055121046ce86b042781c2c020ffe01be26d7e606817698ebef46e7b02a6f6449e23bfbde9be7d8ee6bb353161ee786de49d9a5f7e2bc8d96716d4f3c66bac7330e92f3dee9db8685410ba75a550bc1a7d4471f0689d23b10ad48e9552792e18d707565585ba9cd9eda5de312d4dca34ae9811d9b43383d72ea3a4823d85216c551b02c7cf61e600f4a6c692d3a6ba4377a06022cc113091455368a7440643668071103fe830c7861d2cae5169a9f2ca78e5407310ad700a4bc3a51325f491c6e9b1f8ef1d18e8bb0f9af0737617d46794228886d21a276cf0e83538ce3f756b085e9041cdaf32943d9ecfb26a5f55c916ab3cf679997af6005d84d08ac05e9e8e7a3ca1e03519f96d709c4cfb1566efdfecb1c6bc646de3f546b1872bd75ea91f3a07e49177beeaa0756a835e97aa8bcb3df597cf032ada31cb3c67ca81d0f12009d97d496e3bae7dc1a5d59187be30b9f7ef5749b2eda350546c2acb1ec088e170e5e3329669afe7eb68b4e3973b9c8b24057c350be015b6d06faf9a17c0bba2df53ac375c5a1dfc05a1043e9c176c2079139f177b3a36d5ebaec7e5822a11e6d90be70e88a46c445e61297380a9a49d667ca9ed03285b4ab3ba8eda68cd628e1b62bfa814e14d31c7322aacbf32267e6ac533388a2ea59026dd4286d4c75d33465ae315ba15d34b66484c3f1d95d960aa33fec501f8c30b4974d3160ac162e5cbfe9a34d4407752979e13bae0dcb218fd8fb3f4a6a32d96328ff1fd67a6a8fa16c4f3590ba3a9b52ef8a00827208c51128e03a32eac2323f15471fd30c0a14560a7c67ad1fdea23c3a1871e7c246b8c832253836aef5cbd67f137d19ca9feddc0bc85c078ca8b9d514d8442706b2ac0e47ad0f3712fede78c435d0f7bbfbc552b494efb0102a788b5080c64b337bb9a005c07c11ae8b6d1c97b032dab8e6bc99f6f32c1e71be142077507a77ab054185497b3d68928092e293c417c9e394b4ad358ac9842e190d28b1963bdee423a569d04a885ce1c8829448f29385c800d9cf6d1260841b43bbd44039abcc47909865e92b13b749d7f2a53583ffd948708cc033c2368a538b2bce63a25db8e98829953b596aa73f141aace64164461e81b67ccf08801ed0033490533bd5b62e0947c0107f9e2b1b436bd5649bac16be06503c4a6896c098361ac04f4ee5900d855a480d603e592075078633900b665b322dd41fcbccb864c78a1477e1f2002dacb42d7080c941e17249ecf69473d0bf160d52847211fa4195041f7923607f740320e6aeb597800d867c9e3cbbda8c21ce43ef952a433842287bc478404e5d481904548d0a7ba824f845883e80166231e070e10c896a157d57b2893da5c8d0b47ea238d78c94f5b8cc89e8f27079175d054d447a295df856e1af121fa2022fbf1f53b0f7b1f6c5c6c3fb2201cb037e8e7ff2d920781f4d494e8103beceabf49c8561d04fe547fa16bca191e64a66723220711114906d570f554c6acbb3bc846d483805c581e6062fa510ec7013caa2de097c391094d647dc3830886159b0a291d15b3d0a0477fcce222af49af4cb3004317a2d80b4fe3c4c4d49f2cf55caee018705b6c3d72e0ab3fa0fa5dc49d5bd44aff87570214f8c376c4d4def4bab871fe36af82d015616cf8a89d24fc1d799b2fd3f8267a3319ea0ac33850718afdba21421e1b8ec0503c0c54bebe3642279005bb10b92d4d196f9a03a76acd7477b3d2ea00dc9d0e8a548fd88d487c8da4523a0a5ff3632f65fc9118a1bd9a4de2c3ab7e9e5b219bec16dfb00e12dc46045897621a69c0754c251cfa099d208dac5f201761b1add6b6d21eeacec0d00dfb33563e7ce0313beed131b53717190fe0624bc13200df358496abae72e897ebae66921acd92c5e6519ea47c5fb190ef87a01dfa530bf16fbc25ad3063bcd7a17b8329ea44f408ddfe8fe441778ecf28389024fe835c0fe6ff2307e5b32ed5f36d500eeb0934c8413ebd4b85d7fd85d12b18a50b237152a3052b8c770ae8ad9b0ad750f8dbc60873cbe7af39fcf1ff7c651e8222d104680e6bdb18558c6fa26fa7a33fc52a029e26fadd3ded7b14bb668f06505ed5fd515da4c8f4cc3e072beb76bb2f0daa6691ae8cfd3f1049b1920360dd57d26456be3d3bf9e6f545f020559c37a8feb5631bea46f262ce1f15e159be5253f7cff2603ca5bb422f7692112e1caf191cfcd7e13a85d79e9e4a5c35af9028877288a5e73157576e5023340b9ed07fb89939214fae0448683a1818718aa8865b2f849f3ff3161f445c0f27f61335da3901502dc10851d9e23f52fdcc21d2759574453f5d7b850301543f91a07ffbf7687fdf356dda71bd7a1cb223658915c5d2cbe47a1a3ad32705e098e7146e4dc649e7a779eb8f22585a5de7b7db7740e866b92285b3c0c8e46ef8221ebc2f2d77c951adf5dfafe48f66810f22142c42f4999d811838bba3693b5eb97c29f492afc5aea3d71b1c8afcc38276cfbfde3ca974b3972087a352120629cc97c4f1a95c9d0c5ea521b5387b660310cb0a143bc086b74cf44cc3d5691d377886e018d1490c67bc685a306d47b197e50a91ed3140f1c0d5db2c2399f3d455217fccb355266716c1b7fe1f86cf3d66d11c6964347f2e86704878326e87dc738a9bedeff9bdc1ed31604a83a8801ba65361821ef8afd75b1df0d1399c3673a01085cfb5f7be6a57f5e0dad45bc8ffe9c29e71abe56f066efe452d27db076a22eed38b481cf546d2bd0e190d131962cae220dbb95820818e479c39f78f5a46f4c90d270b93f9ff0c58ece575c4c71627b104fd95f1a782820daaa7319e7e0e44cd64602c42ce4ff26284360941a9a12e2490467c0d9cd5e30fb2be2cbeb115908ccc820eea6262e9602c59974929b46984f73561691dc45fa9fa32fe7a22c2f5eeaa09b6f84a9d1e36d343a6dd326521cf22ee2bd9ec67a3138aaac11e0463ebf728100ae7a5078379c737aa750772c3fefd39887ac7bce0ce740bfd648866e92252c1644f700d243a3533674796b7f6c3aebb72bdce35bc053cc0782a09dfc3814b3ec16635875946d8fb5666394ae895613a8e6f63c440949617176544e6cc50407a22de22f7bbc8072a002e930470670ac9710ab400ffa70079641c7261f70c9aece49048a03aa891914e6a7cd672c5d8ab3d72c661dd179ff24b7e4aed0f4935513cca995e664516a11ed1d1fefbdb71ea807b5446eec973b01642bc13cafa26f90179c658b1abfc5b3cbe22aaf4470fb054a3c7cd480e4bea9a7308e5c29f2d4ea385ff3720351c2e5e67609eaf890b47c4f8e4e65642e43b30d09f490901c569848b94140d4e9c350c619a4346ac3512360c97b9d78af4f1dcfb581b2ecd122e6da0f9022ea37510afe47dfa86c3a19a09ccde090581ccc774be86e5266fee970d6088d20118c39c063bfd470b15c6037de99530907662d6e78408ec55578157f32b17a7715a5a0cb48a27f427e45ece79c6f624d23d8a1b1636df26c96adb20279e4eddf2dc879daabadee8ae8dfe225e61bad0c926334897b95098ec891c2ecae06f190423b3cd2fda2328e28d8b0f6a7e6b94e58c8f4e29562cb6c534d12591ba61b390f0ca17c9e8830709cf3127c3536b4604c75cbc9ebe2f17bc0cd0cb2d0f48bb57348c531a9950f50ff983e2889c250eb84e497efd30d810d047c0267fea0814fcf3c54190fc6b8bf1fcfa03822930b3c3e86b8040abf55d017a105639a0ce0139eb060ab32ddae5641b6b4dcc86099f7314a0b23ae43205276f72980f19ce72f90a04b38b7c603676021458adc0e0be888673da8f2f9a8ed0476067138ade8465353f36c7c31bb1a04a214826d6808835e5f23bf3998cd715a37bbfe11143f7e6aee3f07ff7a875b7ccbe45cc2f91283e365c494cf5d12ef8c085d493f7f8b76869c71b852a6886530e81587b3ae4e613f4780b7822b8e78fa39072fe723d94ae2cf9203e0686e5c08a1897fe038f96ce3e02e1d3cd733fba7ba6ac8e4beab04e4cba41d24770a211c70e1ad323ebbb8a9046d0c6c2c85d85c0f64dba72451b80de59b359918a6e87695152d7dbe3e10a465301fd3fca8d1da0ff622ba761ad71a6b7a2d3e276f138e8efc562ac6f9369ff7e4d9158ddfdb7db91b5cc00e8e7e69b3f8e6befbf40967861ea5f3e5bfc63ee51857ccb9a842634ea2728d540c5a788af875de01e14000e0a8129e4547e65999519486114009b326d0c1d73b67a58c84f4204381c26fdf6cd538fc43ccd0461d5fc3048ff8960be510a420817bf2938b3b5dbcef3b21cceb08db0026004a3a130f7795da8462efc95b74890bdbdc5df28e09fe8efa3593a30f24093c733ba837cfa36f81c505de4f9f6c7d2667a578488d680f5e157261b7522e0cf059a10a609c2f01101df4a7d6073fadaa98b06d17eacceb0373099122b82a5b8a5b9a33186ba4623389cc820938003e49e582e4376c5e4bfb952bee19fa450f0f587aebc5b6006b6c8c6e7ddd9dfb3bce751d69eb31b9b06abce53bde1578097ba139e7bc6284455eb51b697d62b582424ed250a3d9ed317d000722f694600d630d678a16673d62f78574d11a1237ab8ecfc82311411d1a9f64014f01f80a92f7cf42b68748ce11f1a456283e5d42304e383662b7270f4daa0dd55eee82217c22a29fd678dc04d316aa3f8373678700b4454eb76b5e4ce3d03403a17d6b66b1279689158572def58935b0adce350187a53d3f5a9635d540e35586e62dad0cc57a160c7331309c691b56cf53f63301c31d8c2b06a9ee6ff851223b6782f2b8432dd17980b807c3838a4d3912cd20bb99b16ea854fbd5c6c034ce15f9e1b289db8f77fb816e3cb11232f51da455ebd801fbae6be46fad1ad2f797bb446a6d715f708b8a78c18c02086013d34ee4b8b79c95b6839f505b1538dee93b7de92e0b89c4584cb23dcc789e276f07ab0e0fff746281ba8fcaadf5f652f4d70457a0166b1e7a9a5fd6f7b9cfed3db3cee1e62e0ee2d6b6c43f2d3814e0e026268ba4bc78d20b5f66012342d8e5ce27380b03bd58eff200f9d717562585e5183eb4368cf5e317907f5f751de5f9ecd9b0864c83b4a830786fae83ddca45464325a0c9f029a40e773871e80c6c1fd9c0db6be44bf9fb5ccd9c06eff8dae86d936abb631bcac3d5b7b9c9306530628479f02ff65ab9a3679733c912d47488ecb55f191ec927576db70c12d57a7ef07eddccb0c05fbd0da6fbebc8555dc998d65e82cd852c1b4cc59f25c65664a6321be67ed825e08e8421cbb2281cf78162f85c54f545ce65c2ec432e6bc8375d90fa225ca93c4be8c352badefb61f422a232b7dc237895f6856b4cc99b5e368d0452dfd079e0a567f29d8e89eda27dc402b1661359b5ab0154e52546845fbd6f13a02792097c88ef35067530428494698d05f87e3c6000e03edc28cdba6b18a2dcd30902d1bb363b6ed654e21c177272388a00498698027807155eea5b03c0b235b0d67663bc3e5abea229cdac8921007e566f279b8476ab451c0ab8c5cef80a36af98a231383f00301f1862a833a38fb24872e15d90273f4ad595aa25c8c1c4daa5ad80a356881355d97b22da7d86dc0b58f35aa15368f48e5086cf01709cb3043bc15298349cd1ceab9a2840e7084970bfdfd558cf830029407c622bbfeaa074e5e928d0bc04e25dbe5555d24f24a30aab013d21f1ef0eebe8067a7e11609f1ae3d54a97108f26f3ef13227ad8c130f609347b4e2dd570da124e15e0ee3a0c71208217d4b06889531b8fb124990b2f4d12a0b97fa0f388cb033ac64cce2500e197d5ebc9e0d963c3806e9d997c6bb845ca78b2119da4c909880d05c49f7a4231002419095010b2ed05b7327eeb4c3fd688439cdc79230778485267bbd9b5854c8762d2104e59e8789d7f8fbe9c62443b464183d00ae815f53ac2d2c4d99b12dbea98c12fa2ec886cecd087e4a701a27c403df3e05248bbee2caa11d90f40381e4727853900388d32ada0fc71051b6900456f605a3e8b9b7cd0aac37eab27d3314595a159c7e2c4205c323822dc1c7fb4237ce5a16c2ed0f018ef645f22691af83efc69ac3ca8154b21cb81abe09d714642be556b0f18cd6d0de52a43f3714a3e6bb29ca03011c1fcaa249f72b3d5c7dae9d9f17ea22c4716349460dd71983ab03d069c9fc35127916beecdcc2691ce0fc6f90c99603ebc16ec4b59273d7f504cac432bf6b10c1dc8eb11f89e82fc3fa02258c6a00fee0dfcbbaf40382a0ec71073de9031f9709713d2079bde02282e473a149955800ef7021674fb9c03404e5f2b7e25a237d45ef969f0336d81b0f4f4422269820e15ba4ff131ee4f2a902a13d2ade7ddf8268d3f00035b10d6944f0c3786917966e463ec9c5420c082fee35cb8db2a4172a8821d8f9e03c1e31e2b6b2cbde121a3b9fb8b986b0bb33118941e48b5b5632efe72301c53895f9b3da4bc5b7501ad9bd44c9429c880024c4ffe1b469c496716154548c7d434a58beefb575a1a4ebdbc4fd9ba47be412d920d082bc617402fd6f14014f3421ca559f8f20fc86d006c53915a4257008811ac08dc5958adfa75fef6d30cfd8f27ea1865a8acbec4d885d00123a391c1c33c668c4c39f1f2177edd90b28e4f295ce7426e7459ba5534ba83d86c8140201e8d0ef0d7608f716ad3785cc1303009a92656d2beee85508fbb5ce6f894465378e08c99600b17a945966be4676398d82f22f2e58727bae9f212b7a2ad256267ea4bca3b53786697371254bbe63635e8333c58668829c34d73855e9eea1f3bb6757099c9a4a4c0cdc482f1a4a5c7a95f7932b8e0dcadb8e79bb5a9246953997bbdc9677849e05ddf84371474f8b3aa3df2dca5eb9a7a72b25f67d2633ed27ef75292cd561b42ad834dc845d32bb84098e8c34daf6c751b4c49be03a056bcafb261c65d787cf5b132094314a09d1717a5f58c76eee8ae13ecb3c07a7a182f1e8c842189d9032561677b7e936a614558f380779ee6a810e6398407768abeba57745612c5a891a85fb1d4ddce804158424c4c83db67e93eb2a2de28d36281ff78e2dba90dca1cb1e05c2cc955a394ebab3e64a0b308e61422fe4b6ae94e48ae992b9accf54ae97561bdc372990b55d8500aace8e6a04f631c498c129374b359d373e3fcaffacab515c950035e7d2b16e2177fcb397d988ee3a96a4b51b9e04492ffad80d0387b6cab2f5a5024417e56e968ed95811a5e0a7d8ffbe17211010a18b1abdc9ef431ced4ecc4fa7fdd2e125d766e0d1949ad74f3ddf327667778169a25fd7f8a68ce604123235f04002d98e3e24c30491895e3f7003267648deed22e4e1e922d7b5f4dcce10f59295b964b8ced489d658ded33d9b0adeb67f3c3a34ce533b837aa4e108021b62be1d89992b8400b9f17c62f3c5c7060f4fd14628acec172fa74098142db6b2d31456cbcaff4b856af796970e59c22478175b650c1de07c31326824b3f7418294f8c1dac732b0f85b4290e6fbcc29516a95ceadc2ba61ed011f5843eec8b4caea8ef42f32b9b8f08e9c33a9ab6cb8b389d831b9078dc9d5474c8e180d68a3877ae2919566663c187cda5f21e20687776fadb5fded43c27fab8cb384a2fe4f470f908994d456eae8e1ed6db8a0f3dc72bd056998ec8c2c543a4d309e9529a28d117e99a4bdd2eb4b3fc4693eacc0ee694b719deab014f339c5375de2a991f5c364283ae5ee0a800cfa51fdb3f292132b821065ed72e77edac4c6460af7fc63997fb368f9b197bc0e9ae6c6c70a3468a2a477ae5dc2686fc5307b9fe7110632a7f89aefde38618fb6086855485357900183bbf8ab3619dc1bbb3f2812b107a07f0d7c1bb029cff70bb400a0f415d3cc9ac3ae9dcc524243e0818843d5ba4064aa5e4880871e9a605d1339e1143d69d02a9658131f56dc13bd19d2767dc3cdb01a1d3a157f772b989b8656ad9f83dde226481731f057e3811b72f656372396e4748625bcbe23c67a5462f194a24f86d13efd86f6bf29c4070b706b94515086f1d43d9eb64fbbe53e87c9b8ff42d04763b595c8389c20e81ca6ef9559d935b9e4afb6aa0c379e79da4bd75cdafb98e5e028363cc1fd635cee80f291766c616f63eb22f61f69e5eb1b4cbab284485bf683de91c5181ae50b9b7e23ebb4d36100e774c97b9459bb4e81f21d949546f1728ff6f9c78fd14343d80e83ee4ed693cf1c87c9c0856c817d423db2205ece9e2135ba15b3cdad440c35adfca5348b0a674f4068d23859227b731c9cb967a038cac2891fa77a8955a16cdc8700ae9ce8fc4e132c499a72aa0e22596d4a453d3e8d54e6ceda5431af84233e47f94e658cfeb24c2cde838cdbe16f052019f9de203100604ce8f9e40aefd474028c668cde87ac24aafb101ce55f4f92e54a20d36828e63b1dbabfc0f950590c2f135703f2a47c67b992f08c7bfa2f250c71eadf655da3956ff7b3294002999099fd00938ca3f70b9fd4bdb112a47e89dec695c881df28fd7ab93da5721eec99875474b05a230568c77f2dadfb0606df630442c2a152dac7a84b586b629647bd307365d6d089fb33df9a24aa42a25fe468b73551719b89cd9c99d0413c439d2eb764a3e8fa1248a5744bfafeb480a5e261679953c9f64ad4e045beee083bb1d9f6685dea6e9f67936857f2f5e5c7dc117ae47a6c0daffae2070a6350042c7982f9a6b78dc449c13918c4267eb3cb354dd8e504ab499d8a170a9a6b141a126cde13a85a088395bbbcd0087aa3d4306bf7d11c284a5565581da969b14109fbcb74b3606bec6dc077630d5144541d2faa00f89da57c3c5ee004f1f2fe1481cd953ac0b73853c1baedc5ff207b4d68f9589a1c5c99eecfb24f4fd710da385c3cd560196f3cfdae110c7442eb2b3f5bd68faf360e861170a7d817028ab278c1ad77ee5dcc540b560098931141746554b798af4fdbcdbac8ffb78d7dddda35b3fff1c835905102375b154832ac4049bf029e99e77f5b98de12116b270c61ad75ab4a1c8ea31e2606d709d52b0283f48dee9ee8a778cd5377bcf918ffee3868136d932150881427e4b0349b16410e467e4bc2498c15fc541064fee3c99777471707e1ba949a0625db1293aa07d804877a795d611976e406d2d78b1c113df4c680d0355259da0ad0b931ad7b8160d30a4e87f4827f3aa592503a4ccf9c9ba80cffa37d59395e86c9b2e0c6df8074ff6c75e8a7fe565af4ac68914cd6c3c83fb65c6e6ea4ce6aa3d4d779643060bc66e28b498a493a71b0587f2653a669a5439f4f697984ae562dda76fe05b41ffe449bee3495fd24a23c013bc36093f834fc64cce38ec4026fdefb1e4032c70120bf0d0f26a28110d284b4efbf8815c8b74c05ef963172229eec80cfd97832322089c8c360b84ba9199deb6d25aa34830bd222f6a96956a5b5e9ac47d85745d0a836cfa5991c34fde3e934a8f434879fc9ce43b3545d276738c3375c578bdc197a6f4356b2595f02abe4f434fc743e0287229d5e43d3815e40fd0136488f7d583e30e49ec7183c6f96724ef8a13c294459b034e1d5d3d30b8ccffb373fa9516aab3d744d87197c7f7b5d7e3934f892f8770b113f2868a44361e01924e604de0344ca0c5c3052b2927466715b3203583260c4f162aac854b529356c8019337079ac343ef3ba694da6936c429deef7383bcc9c3043f21888c71151080a42ed5e542a7a39c8034e8ab31b9cd53ea1ba891b51dd8e48f4b6ad11d2082164ef2de50e610c7f0dfc0bdaa60a816e8c361ca760c1d111d8df8d1b4026cd9c94d4f4a447b7ec962dbb65b7c7fc2925a594c68e71da18e2e5a38d569bd20339c8c1a59cd2c6f99026ac386fdbdd9f52b45b1a1c9a7b29c528a59763d4c0853cc71df528f7373ba5dae539ea6028aba1ce3187d9b04606251cf2c7e7b4c6a1526697326a7184a618f0ddec3b92565a69a5ab5b1f9670657d482384b9f232e26497310f3be6f2599436dc28dde94b8e52253b05445e69bb3e1fc12053dfb9110acc1ce6d9bd19db02ebce7cc6f66896ea3238f4329f966559ccb2872560f21a867d47ce782403dfb083b19d96d23aabcdef0047157b0cdc23873d86b6036852e977289671366c4c6b1ccca2a2d59ac58ced748b7ed3c941e5534ab5739a86615a964d8c7663f0bb2d4f6e770e067b96d94eb5c0efcea9167ebe0cf427439f66e7c2122e0d695c7a1898471cd5e9634c41852cba56b2859d5aec2a1cc6aabe1959b27338056cb32b4ba913cf2b959ee9698e6dd71e55e01472a28f9cbb922e1abb13ae640b26c6a20e830b896c61df5e6da8c1d8b046a9b2e1eada485923cda22906fc527ba459d891485704b14d63dd5029df0eb5f9ec58d6619d3d86aebf4e48f6187a00481a07c334adb361675ae58e71ef10d0a4869a666bb398e545126a5747a9f255d8527738856e72b1af804449e36cc7b62c8b19608ceb54145b82a494d207586e17b3f8e0ca9d06a8918fb426c61a5d556a51d64ed28227370edb24866d1826354cbe57373c204443e35ad1d0342b11fbf135eda46952b904db16aa626adcf87d3e5e575c0842edf76857505197bafcea06c7e2989b370573744379d485857a311b72d8e1b0f09b7a36b54ed969e59554949d3c8a42698b93f422f484888a152c495a6697c681f9828a30edf24a07fad8d0968b9d534076cd86f67257d10e53695aeac776d5d777461f21d7c2cfe52eaff4e5304ee3e2d55a90569a45633b55c590571a876b01b3d28a0d33c037ecc2318b0faab87d2aa45294a59fbcb2756cc6a84afb4e27991da354853f57b3f228dac818441b79157c504359a54ae35891571a87be84c012e50170a073546338358061dd583786d9205fdcb8f3188661587f36a0389859cb301a1907c70c8cb51e5954ec3b4db52cfcbcbc54c6e883da9ce883865f8e161041e5462c88781131c4c21330912586c94ed5a9ba54cccc3915d72d1ba8b95b4ad9524a29a5942d5b7214cda29c14055791c453b80a229e22bd4c22a2cb4acda24a8d33f3c5db124a102f35ec2efdecd89295229869365c4da2ac9f2a18150b1e385d22e99aaf507a8112a58bb56ca1acc58b10a17aedce7c7cb3984b1b7e572ac516fd6a4595a8f47267d0c482a9e9d2cf57e3a428a554b2d4e8633e9e222323234365666666c6282626e64a5637e6540619a408e580349722c402696060accc39e71566e6a36e1964c8c0eaca6740bb328954b2ba441cc4b45286d8090bc1587a8ed238f2540acd633e19aca4658b164e5db054fa9095a494560acd9b9bba45b90b9541c3cd4c341f3351d64253ac844956622dccd42c262a2bd19ce6aa8fbbb0133fb116666225d6c25bb889b560a57974834b72cdbcbf383598ab549c6ae33629a5945d273b295995eaa49452d20371a2d273dcaf97147232c4c27ccd289388e8c2866611463493c0a6cc175c7a4c0bb645a971b2d3634c8da37d4689319739bdec348e5371aaa7bb6ddb863a87e2ce25c9a44c655877c87647f2929b7a92eca652e7b80ca35336479dd85d7555a7e201d38d5978508507586e10d3a54f9a2e7d94fb5d963273feb829b5e8167d1728d8940dcb8645a65e3867d42ba47a147256362c37d5af98b65266cef37259870d49d716a55bf4f5a15687322b97d26f51da9541e116bd566db851a93036dcaa4c1b6e572e5d5989f97aa8594d33f348699df9b25407a5fa855d1c43d4be5ac7d7522dc8db9cfad12ffe5ad20bb1a1fe861994ec88e8c2948688ae4c48021171e4b3155c9a49e9a0c8a242d2d5423183c2297493e883be8f5856beaa9d095d2ab31fa20dbd0b4a54af1faf27df7ddef3e4bdd455290658da2ffa3262cce8d2cf242a3d07d8073d7d334e07cd60574361570bb5110076b00d8fe3d26eb5555dfa4ef58b7dd0e32041e5373b19dd187df4a5081d9c913273d5d7417c0da5fb9ae8eba066d1a3be166a56bf9a451fd44e7aa89ff42b49d55e12162a88e2462c544084850a8c8208614a971b4a358da0ee0662c6c01192b8b595ec2b973e82504f0011d4d8acd6b42371428f2c5c5fd8050000a3066996eaeeac108f8c88b931cb920f9694e692134b5728a514cb96a8843ee10f111cab38400d59b7838ac29a317ad4700ad8fb3b38851e5cb9a8f7e52637a780b1ab3bf75075e323cf0849b89d654996a47143168d1b6af272b4fbd1238baa31aac7c7f6ec93d1c7769674d1d8dabe3d44c06d1977e318b067475922d815c017651f10e48b8a59197eb76737a65800c04d12bf8c71351642cb6d5987d25096a30d7ffb5ab329217d33cbc31ce48be4b37ab0b0242eea7073eaf08d258c51fbc6a31b8cee3cd28f1786b43071791e8853c82d855bc92ae7bc51161e3865617a6931fd0c0837fb8116e36559dcace97216841b533fbabbbba5139c9452028193972cb68936b447b48162e38aa01bd6273703f2f6156d85966b8516ac1e368d5d1aa9985dd1ac1a277c10fa04b06e8eee73e8337ba35eb9f4522b90b8b45bee80eb2b033f0352862499f484f0e985745b6e81bf7c01e22dcf3506ecf186d8eb461bf22bcb302ccb32ec2d031331f6c9a05d7a4af90b6ea24e5339954a45bb53b1bbbb5367e6894d9ae28e53f5e82fe7e3ef376a5837720539841a7691359b3bc69c70fc55efb4eb064c40d4612b9edc7ec731f640821c254b1551b254f1244b153778c942051759a860c2302cd3b25061250b15484764a1a28822c4f89c2935ba98cf674d5bade617b17711c7a5e69436ad2b7b9870e517de1cc9e12f5f24c79a203dbca8fd98739908176b429a74e7fb15759a34077a86a813147568e81ada8616ea1bba03ed8176d238f4073a871e6a10b40ebd43d4b9d13c740fed4343e910f40f0d4407d12268217a88a8c3ba6c5dda733acc78e38d37de78a351d4d121eab43e3f77883aaccfcf275187c7e7270f5167c7e7670f5147c7e7a70f51a726c7e76708a28efdfcfc21ea7c9f9f40449d7f96f0f92982a883e3f35388a843c2e7e71051e7c6e72751d4f13e3f4710756c7c7e9220ead4f8fc2cc18c1275687c7e121175667c7e161175647c7e4a893a349f9f53a2cecce7a7115147e6f3d3045127e6f3f3045187ca2c8a3a28883afdf97944d461ec26ccdfb01ef650d84344d7899fa847590cdd701a7153b4996f7d2d146de6595fdbc0e3eb1aa2cdfc8eaf698836f33abe0e8a36f3355fcf106de6737ccd8168336fbf6e126de6bfaf5fd166fe1f7f8936f3257c3c46b499c7f1f111a28d9768337fe36323449b79ef6331a2cdbc8d8fc38836f3353e7e8a36f3ab8fc18836f3343efe22dacccff8b808d1665ec6c7341f738936f3331f7b116de6653eee22daccc77cec146db8e02da2cdbcea6322449bf9fe588b68338468338f7d2c84689345b49937225d3c25b6e673726e6e58ff6a5535a21a4ea3d9457469b235bfba216a4dc29846d21580cf1c003cd47c3cac370f57273cbccd8da65100eccd6ae5a35600689a8d8db1878d3164dd9c9c1bb2ee09f6b1c53c45b6e635ad561a3431032c4cc82006474bc0e005575cd0021658598112495441420529303a020545544e600223a24ebc409ea82eaca062e762c849b0bbb0820a24461b06825479cef314e9622943a6493c5aa688eb41d4b2a85ddc18c68d974c51871f7214ed523daa2c1d927cd438546e2883ee64924130346b1a69ee419d53934ca8b30dbfcb2b2ae4861a52a2f9791ab1c872742777e777a4ebdad199db91ddc7dd76afd8e20b6943978f41b94ca91454caec8f324aeccb28f2362886fd85a0caf652cef39c72b295725ecafe9c74dad875dc976103204b8d5d11ee08cd0b41557bf6783e6bf6084d94d606c53eff42506dfb7e8c41da233430dca49fef540bd113322f93babb7b074aa692a964da8086868686e60048476e8edc1cb9397273e406013328c1ae124c0976e9432598120c0a1d7888872ee5212c342c93aa2cc6f7e8765608d238f39b8abf75971ff7d4d76dfd0ccc4bada6b1906d999df49b8dd4a604c03eb0ece3ced90ec3e8d6c59400d847c71dfbba195dcd57861f9b00d887bc8f9577c6d4f723bbf679d9b34ccb8e7d21909d1d6b4e7018cd8d757652ce29e79c339453ce19511ba5193667168fd084f374d288c449a9e570807bc415cfc95a5a4a5982ca21109fa0045c2f80c3e17670ad30ea0d8e9e83e1cb712cb9318ce7e55998979aa6c5ccf2b7232355808c5696e0ee103f98ed23d56e22603227ed85a30ba7ec8a1628a2d002c5142d5058a94194ad39032e1e80861a9738e0e47ab91c0872c5232c41546eec72e3d20c56ae921312e90a9231c394a3764d7069062218163ce9f1d97ad50039d4c8745bd88cb89962417589d498825f0fb5d5ea0ff905733e0745bbaaa16da9ab720c70e30d016eb4b931c6c72dc6af43c17ca737be305d2ac2fc48cd85994488a89c656228c57b55aa5b0a6ae2d89f51475e8e4b414941fc840816212e9f9bcd53aa3c217de3fb467b8115ba4653c5c25b5e972f5b1a573f1c1053ef80182f9e8feae745cbc356648b5f5988839a25ef71ec811373184e2ee300b3104109574c622d5b2ed7cb4b1cc07279a2b6f81934e71999f37762d28d74edc896eca17d9915caaf2019b6288c4a3ef438417823822bf30571e7171e894c3cb6e70257340183a12b9ad07005d0ab862520887cb0030d509090c114538cb0832e7600041cbe0c41881884e00b29546ee2154a38491242a98b1b8810535f20c1165e40f0fa4012328847d8a2948315044108252745aa74c59ccf42d255cf8c05114824818223ac4c91928589ca15523c218326901ff3592c15866813dfe349fd06050cb2c0411844786105ca0b293cc060071e7022082003f51044e5083e8881104954017a81951cf4c08497237c30c1039a15f965858f1829ba6c9c6c89d284079a08620790cf49d1258121ac90028c221c71a509e4f747a48760dac6163a434f4e37b468c2c9c949c7dc0f324e4f56786000818b1fb8ae8b4923a90642d861a909152fb648a0082168406232ea32c4c58a080c2b594ce9b24397e58b959b2f46978fc2ce5293206ece52932797afc7737b74101d81f402b9f97d972d6ce955e54621dc98e50bd2e5ebd0014fa75850dd55b4e1cb10418d2fc29db10864a3c711353ebefbceb1b41b9b2e370b7d9a1b2a7d7cd8c977f21128bce97ee4e6d2a38bbdfb30cd87b33edc3beb83c20e4464439e8b3dfb92f818dd4823d84f222fc8c9efc8cdc51219503330efb449e417f6c103b882d3ec573b395e0ff6ec99f5f15e882066bd1722c8922db6a967dcb303811a1018732050663b76ccfa6cd6ebc1ba63d6ebc18ec2b60381300702eb65be20b2c59f61aa614462a58f99826ac84a970f12517faf1315e62bf211912dfe0a4f6a18959018912d3e024250c3d814aeb687393c8060051430825a047d18d41eb2b629ea36455de243842938ed6324d9e29b307453c393eca4a42a24234997668bfa2ce994f24da535546940a25326495750510efca3d9ca8b084ddc90ada460ae100f1940881ab250f6a445d01317a72cd5a9ae13c7564061221c526ac850ac78dac20a0ec55ebc1e4d3b1078bd700addc53e36922d7e0f2d6ac83246374f514c098437277b69170d91909376d558a2014a7701f2520d4e5c7e47699c298d1397c0d0e232bdfcae32252bb115667ac24d4b60f47035fb8374051535d105112ea72ecb671810ee2609324ae214dad628ec25b6f8ec25ac5e5889bda48068d700213bbbd88c32c7ed29633480906459c5e56813cfad569a6629a594524a0d6083d0a4f294d239270b731b83a2b48d52ed09c3e6ccb22c9bcd4d89651c6b4f148542f1a6699a06016c8342cbb253da99a552021151bccd6044a7cea63dbe060b6e9c97a3b232538a6118d628896128ee9b7d1d96d2e808b66dc371e9137da24f392e85c02fa6cac108705ccdaa94a2a8fc1035a5a30dbdfcb9f20776ad396653352d471b7a265ac7d40b55c00e6a889a3245bae8137deaa70f54be66a47559ad34cd5e4a29956829259d126dae52b48940925b0a2ce350198afbc2a1220c0cd2b6518d6a946a946a285466798b71621886f10c629e536498dc34a96d9b469928126542d2b455675fad5ed825673530a1d405f4885a41821a7d2ac900dcceacc663d420b69a1a350e456a161211874211596d45ba2818917eb90d0323ef449f78560c49a3488d4399b05983e8ca581407b79f7d5fad28138ecb2fe9a24c1a9f2900b76f83a951434c4d99a24ea44cd1a62913658a82ebeeb6a1947d1aa78539101c492f1c771a19d970b24bb8b4a360465ebc6874c1c310bebcc608ba5c9a341c2b82a892c410173758014444183708c1e00723289c70d29244454bd29519a22db698914508630821cb164a598ea0052a045c5e19133108628906136cf1832064e85e579eb5d873ba3026fe8a7f7e0dbf07ff868f4297cbdf89941fdb889e087d4c0dc1ac16fbe31a6d226b9d343ba6d0bdeeaa997b43413e475e8515e483f0c8f710a972e561e0d92b09e5ca8fd62bdb7a71caafc07abd5e4d9c5e2fb09d72b0408d5a929e3623b81bb5d840881bb52435452d368072eb8d5a6c207419025c5f7a9625f2a2a5b97158f781481123f44868c7f09bd6661d158181de48bb7680f448e895b42b26d1fbc05c7a0e727287b0a6a81e2e3dc792ae224a5489c5a294886c5116fd0d7d4e7445267448a289287870c5155540fa1d9aa3093028fbf6ccfe68cfbe597a0ef56d3dd9b567d76c95addeacf6654c9451e164b812ed4a26ac6f9443563aa1e152c356fa7c0d29596a3081143c2c4d895c6029410894f0e2840b0f605b1f546a7c2b4957944aad14b6920c22a1298c5d3954fbf1ce2b85608676dcbe84a234c1b824947439456447b6e8901cd9a25ca78874126ba5c5d4907b282010081cc23aa7865cb6280f170001b00f2a83b8ddf112ed003b663182958e59bc80e036ccedb87483503caa42f2eda8f56c4701819251d607f5cda67ab46f96ebc773235b947e5ecfe6f3f00608447d457ccd7a3dda5147599f671f3f5decebd7a51f135dece329b725d2c5be9874e917de6837b76fc29bee6ed68d0c4206d19751241559657e28dc449b3e41e54b5ba34d54b980a337afbadd07c382c8163d66c3f92dd1a20691ae1a6a355256b4a19bcd00bd281bc37ca76449e3bc7694a06e7f78b3820a739e5e49b3a8b71d89b7fd88763123313b549f254daca8e325b97d230debe59b578d81c98d47ac9bdd641886d91894d0bb7d7b217e31cca3509a96c518b64f17626c451b2ab98c611ef59d9e18ca05ee586ca13eeffadcb9246687bab22620559b84bff004c9f769c6db50184a612489d174c3d51583e9b218536ecc1286d3dd716316315e97a58f222a7653cf1246d3ed940fa11aae2ef373e85f6892f27852d6dbe2ede16c91d702f73beb6da90fe99eb23f453d5c174199e209ea9e3a97fabced07bbcfdb2ccf12aba4595c830aebcd651d89760695efeb8b392fa59452524a299d447a9ab55a699a7d5ff1e2e1895f218874a5de3d4e1e9e02082169c9e7d304e8dfc8ece66237b7ad9266f57586a8dc7111256515aee4ec01012ea841082a50e08505402608c308532445c942e404b6fc8108b6198a48a1784042439ac1059a961545f9800b8630020d50402263505185871d90800a16281eb6d0b87cc165e9aa6eccc2458a1a44ed850806d1403f4f4346e463c9564e4f0eda500e5088a61875b711176b4276d177b5d35273a24d6b2ecc458f5922d432719d63e30947ba304a440dd90aebb420ba50b1d547a16464d8ca166d5a4bed1b6b3ca9614e01624eec30e7f66c211ab46aa2866c8505518b4175a2cf4f95e713754e27aa4cc1ecba251b863a9a1b5e88b8c8e086354735a0b9b4d2cc4c96613ca594524a638c911ea373ce8919412965799694522a99a1d48891674a026eca884106a577c6ccd248abf382ca356804847c77d2cb611dc5549895c2c5ee41953ed4780445c4a1517e720d6893fc3431e2a73d31358e6684c89a9f5c831b664674cbcd8c7ca8bf5a1237dc5e2824d41351277e22dd707bdd1fa20d14f6314f89a40b46458952948812c15849541fd6b63096bf135d328f0f63d28d595274c9d8ed65a5ab877ad50ef8bc440d6993111335dc68d346c5f6eab3b6173b71434e5a6266462a1be6dc9cb392687bcd1787922833ca8ce48ab5c7d65937cc8c6e6e9819d1cc28e9cec798c58b13dc79f9a4d2dc98c50b1f5049db94476d1addfeaab338a2c117ae5bfb62cb9ea8e284654d83252fc4f0c112971edcb87169894b0b322cb4cbc1d0f050c0821bd6eea86e4659529545a81fb84cb9613cda906adf98854b11b76e5d13b222086e7f6ab55fc0e587baba17617841849b7405176ba69c2cc6143e34815c4331220964c22960dae2e4d2a2444315234c0c2d36709901945f0cc3072d604b053278c2b02c318312283f4f0990cbbaf9c91e7430c14bebe6d7216881124d5b373f1f16941f1801322100162430ca1105c884460e5043ec000a0e8220824b02882220314ba004cecf870a65c1220790891c411345a4bef801922a0a28a6d4808219b0603ae9d372c2c8089049a4220a588be0c4941e5ff820d3cdaf65d4012ba0fc22c8cd74f363291cd86204ca0f012d00399a6e7e110a1b842124c369072e46a0fc6e9a406e861c9a011439804c3aa31d4ec06446099cb6d2e8e6d739c0c20622507e39a200b955373f1f3ac5061b4e0032613581c508e0bcfc7c6e9ac01a1a9c56abd1cd6f668721b46008a0fc22183c809c8d6e7e52890f1c4104ca2fcea008dc624a77674174dbb351634563068d6dbb11aff27a4a00e971dc90af146a7d9880dc8592108440f9e908023c96430188d0022b6063f16a82850771064e333c8145181a82224613104705381ac211c8655dfb3013331c210bc884da00c6b80d810925985ae0828e5e37849526506686a123b00b0c8ec0fe2288801c8248027d3622d42004322940172e4880f2fdf9643b0099d09c0094b66b02f05538a28a24304a81851098c08824e58823b049932b5e607f3755404ecbb0bfb9d13413be88c3daf0c63712be786fccb0c6c617ce5b43ca2719f886f4ca9d618d0c3cb12732b0cc17ce1bd2a6b0ab5f587343da2471b082db4f7da1f4a157b082b0bb4dbfcdceec484cba1134a221ea54b96204492f69d704a9344e5cc221e836e370fb31320fb759044b374c7173727272f80e452bc078e286abdbf226b13a070e517891020c6d76b30946d8393ae2662cf28cbde706cc78ce4f754bed177b31420d3ba9933ae98b60362995524a29a594cfd9e9298bc89694525e4a29a59424b8524a29a594524a2965920d49b73b894938a2717960fffd9abe82074fdcfe0d145bee0e27c904a1621749277552527de15563d2659b24c60d398a5327713f0a89d449586e9ff925936ac0c52c6b92d3ad3e47371b32b9db999999b72f0993dbe5621686d9e960aae16f673074912815c6877df8824b10924026720b252590e6dd041544f3192ea3dc290c4c57b47d86d348502338f3500b7b5ceddccc94473131314077fbc22277a8ca3ca67803ba0c03f6318f7d3b3246e31410d535cbf5eba9408f948d81a3f98ae8766c46a59b1e1bf64c488f1bf66415e871a58d01b3301c7952f91c53ed1b188c1c39d2e366e7fafd499939ea53c1ee74eb060515d430326d9cbd7b58226a7824e7d2cf6fd65b35abdf45fa46fa48fa4bfa398ca8e10d53bbfa46da1594811105d665e5f0c71ce4f20a9729a52f02c30c35ac37a759ddac1b0ed498963102176bd8a5cdd5e5787acf67d6662d09d2ae99c4d33811272e7940c84502385f24e8ce3a973af074e7912cddd025c3e8ce10773e3ea05bf3412611970b6a78738342e3cc2328519a55e3f0d0d48156570888357eb5c345adaeeeb6a1407b73f623ea4f5f037f8ab09085d1209f9d061a26e66aaeb4ec433ad4b32cc712134b1d26653dec2715595f65598665c76c8fa63108538587fdd98aa50546690553050c936cca03d093d67381c3ec0f76d433fb53f493793c59866118c32089f40471472579817982b8a3ce492dfb3c798f62d7ec8fadbfd9b249e4b980baf61e54cf768f6d7779b63dcdbd2908c6145ff5612065a61e8ffc0b1194369581604cfd50a95432ff91797db53f2a0fbbc70373ef8508c2dc1ba2baea990c2df0cd662e03f3c13ce64354af36c6fe14f5d4abfe1373186cce39e79c73c9aa8b46e76f7650a829c198fa41ef510b9e75d301cdceb688b7e31e3732677661fd22f6203739d2258f61acc6a931097bf69551cd595dacfb8feaf5cc5dd69dda1e95f5b2285b8f976a5e9669cc9f34eaa0b8fba4de594fbbaaa7bb4f7d879a6d4376515fdf4ed573f307aa3baadeec63982dcd4a7d9ef61bd9c234cbc3922dec9816304dcdc260b65cec33459f7dd586cb65dd6c1c940d42db6c1ccd068a659a2abb3eb4d47959b1ce9ac8b8bf25b295d52c3b92a8c3ddec4ba44b3ecb32eca9cdfec8a3505adb6ec9c59a63896a8443924a75e7ec0ff76e3efb4ff794f5a65d4530fbaab34b523cab94916665d2fe14cdffc8738fb41ed696b33ddcb773f646b6b21aa559d991b411d9ca9e552acd9ad2acec59df01d27a5a5b8f3a60b39e663dd47bfa9b47ed4eb3b263a9cfb21bc98e24fb92ecfccaceb13cea0e900ee86f96886cf9d041b736c5eb7673dd11c9d9893aa8be6c72ca010251efe98e3aa5b607f508fa6cefac47ad0604ce6bf41cd53ea4bba6d91fee3f1ab732aa51b682ecc8d6cca9a276d386dba15a487bf71eed9df5e16c11a516a60bfd0eb53c3912c60bcc530e4c976d7b8f769fb67c2b96fa9c9d203c2fec092ed668ad5d7e08ea6da5fd29ea69fb73d4b765b93f453d7dd47fe4b5fff4511e6b9fc73d1a0a75697d50f7010239a5e5a0fe14f5a07e506f14c5be59cc5aaa459c53beb33fdde54feaf311ec54d6630b4405c23cf6a854d6e3eeb24375cc47adf828eec8ca436d944e9a672d77e0e2e7c30631d523af590febe96bdf3e44fb667f8a7eb69f6ca7b3cf8bcf1e419e8c48b3266a0b4ac3e6aba6adb22f8273c69a29bb618061574eedeb189b4ffd476ea9f7cc7b5aea6c7ba4f5e8e5539fefe154285587dade75dde7b185a159187694ed9a85a99eb299ed49dd27e629eb69afaac73ccea79ed91e95ea3b9d61972d96a7bd82a9cfd3b063cf300c9bd109cb819be7324a44b6a67c4cd9251b106a729f84bfd0a3198f522e34d8672b93898976a48b4730d9883baf34e374bad3ca12d99a2c245bf3dbc743d2495a24b2354fd383aa1db195d594df3ea4afd9cdf67fb64b249e0c2df06da166cdff6850c336241e763e92ad796c7e2a69e9b4f180eada555d313758538aca775ea2b8eb36ebf176ce7abcad7c5451e7b7ffc8779aa6e23ebfbd677e7b667be4bbec72a9cfe32cf57940f81a6916e5771e6b59667922a8f1a0ce1dea5b7d1cfb17f59e7994f5b21e792fe33e04758efb4f77d487704f3d657f362f0910befc1722b83d82197f19ea5c7690b57d11ccb0d95a52c692da8d08c64779ed43647feb1f10c51d657f50e7bc8c7b67bd0c6559b275d9a23eaaa8f2dae569d8de3cd27a53f66c3ed997655d366df07864cbf76897d6a728bb8fbcf6ccf66c6febd3dfe6b661d9c7b3d2b02e14059c3cbdfc680c57d7c80f96577e5ebb54f3d80281e188111daa0937a8fc5093f393e10711d91b17a58b6e5cf30f29505fcac70d5436ccaefbe8d7d1dc4d8b361bbdcc7fe667de4775d6c34eef7597f9b41ef6f9194d662682332a86517d1e6b303e6c50e5519c0266c38d33321e41b63d32f7a1b98cf5bac7f0ccd0ccbc47e6333ef43267db33731aeb33f9b2255b5b0459d24f4e21bbf19cf25ca08fb903e62bbdcc7be667bcee35e6f43df5d37add67a895397dcfcce7654ebdee9f8ccb7c08cd67eccfcc692e633f83e63f9e76afa3314446e63464fe43e3338f6037e3abb2b57dbbcc47e393b17de68be08c2f82dbf6ce1a69d6968ae95ebb0e86bfb053c17c4954df91d58539f779aa73d7aea7b21686666d3f723b23cdda1ea343adcddab6ad66b33144270e494be558a286abeb698fb974795ad71dc67ada23f893baca7a9a8d6004e96a457f7a16fd0dca861b2f5d5d6ad5d55c7a1f53d49f22fe4f0ae67d4cfb613df9d43d4d75b63d9d85f9848141b1c7937b4f7798ee295577d553da6162aefa907a18fb03f30a633d99fa1f6f1ee6331fa2ba8cfd91b9ea33f6a7a847e6aaffcc1c26e6115422f3bd7e373b5f0c5dc916f559926d3772a38df6d417c18efb62b4595deed9e7a19e5dbb2b0fb5653adc805f1a50d69b08684cfd70514a650c6145cfa339a9241355d64bcf1375e29d9567765f0e9d76255b3ba87d16ea976cd13ab444ba601e73244a7d8a7ae463de3d62efac4ff718eb23dfc57051b74ab51a758eac6e5705e514b41bbf1ff9eef3fb29c2fe337be655c76c8fe414a39efdc8c77c7e3ff593e3b46ddb502894f601c13ed4c737bb51a67ef004cdcb58bfa21eeb71ff7e3cb61ef69e1e8fb31e665d988ff910f9faf99879ec31f5337263b4c1be70156240b024fca55bddccd666514a258dd1a1f224a059b4886cd1c37cfc922d7ad597faea8b9e873e82f55587a42b82af4bebd0a5f47bb3e84ff840ed87ab4a9475ca09176b26a7d0423746e9f2b6ab1e416f537dc8bccafe14f5a42eff2353976f9a1b7d4c51e73117549f1f92babcb75daa549fdf36db93bab43ef2a9fbccab0e0446d41765ca86466ed5be703b17c1140bdbbbec4bc25f8eac2e778db3406edc6dd52cec313a54ad59980937a8fd8903a533e32cb8d8daf12bd330aac24d4ecd96be01e94edcfece13b75f048adbe75714443c6e5cba610437e6c6a51b8690e6dc6916b642b7b0d612ee1175ed43b273f6677b766db31e8fb63db31e3f8251562c7109bf58888778433d7e91b76b18863a1719ca122c3bf624b36f27c593f1c816f6ed23d29f1199d91cd962aa617cba984fe8bad8319c251c8481cd922e79ecd85d385167be1a75c1c50872303554fa98d338f562df09225d1af61c562addae65a7fc9eec123b8bfe477b1f63eb827cf61ef953446d4f5ffb8f7ca6d9fa9359067d40513b0749b77236ca960a6aa849295fbf1c28a8a19605f519d4a48b9fc460cc1c4b18d9904897c7f443b4631f42bfd99fecb427b31e0f76af4707d11134f80266a7d6638ee0ac58eaaf917924f34be6f935ff4c3bcb0a6a42d2089225d245afb1648e94ad201f11d99a2cd99aa711420d63d31123486cdccca0f2a54b7e56226eda816aa546ad5e98fb1c3554ed52fa6dbdf81a182cf2e87b3006d97af13fd68bd6a3d6853ef69efe298ab6879ffda78ffda768da9ecc06a973f3e35be38b97ef099f34e16b7d3e453d38ceb23e35c761a50f8e0f5dba5a71f4359f3c922d7a1c1fea86a5b971e9d2f1ad29bb67a576ee005c6a952b3a3e99f42549179da1b961a38ed7f8914cea249386d1382799a4ab8584b416924c67a2219966aacc5c99b132633453e5d2cf1861425b0b61b17dbea48efb78de23d5617d3ccf4a69d59c7ecb5a1fcf47e44bf2b6ef7804797c3acee3436abec3feec78cd79d89fa29e1daff98f4f510f8fbf765826acef380feb53d4a3e335d6a76887fdd9711db6ca16fd7c792fa8da653c944f382aeb3a74d8285b3576e746fb8e2425e98ae00a45d951df919babfd0046557ba411d42492acf922d8481d45e3a0aa689c1a4a364ebb245925de1ba11aca271bef23a91f36be3e6a16fdcd0db5e63b5ec3b6952149d4612b4bc3b6500f396162c2b60d4bb3e8e7b61dabb13e453d35d1b5c3fa148552769cc76bbe3d461ced9b17a14a430d9b4a94a823030bf1ce28d1865e12a1669f4149cda28d23a5ced03ceca6c69177bbe6d4385dfaa971bc344ea8a4af141cc7acf4a2592935a7d3cea0ed34944c57e822c9d65010b1c646d9922d24e9eaa6268d866a49373654a954853c4abaf4f2e8c915a7134d33018b2a5ba887989a32ebf1c8a797f622d4766a8f05557ec6757c351f12d9a293869fa2694329351fc25b24f1c4aba6e63546b245afe3f43bbe17131cffa9398fef78c8443c76583e32d2612f5b14872dd2bee33a1e46271a76581d965f6852636f644b5e124d199250a42b82144545b374b3fda299e52d8da571622ea4f2b938bf17868a6c3297dae319b394bf23b9bb32beb0a3a7f9c23af385343924930d22ba5fbffed1e378095f5051d856e65342afa7c57c5ef6abf8d620d073fdead40fd4fb953a9ddf6cb8648976cd2a91d743bd9d52d64375b69bb4b8554a37d15f83e16a96b76c9493aa68d6dcacf4c258aa4635cb4fdc54b7688a501871032d4d48b181184840366489c116288440410f8a00e9b30fab44a8f2897ebee8a710fd1c9a5101d56813a4e03c1e7920703ed684cc74e30b4deab45e942e30283fe4079c67b0b6fc8c42467889cb6ff979fd08827cb444d4891a5292d2654ece4e101e66924c709e90e809093d294207e9a550eb01e99b84bff0105fbe7cf90204ba6ced81ee0df839fdd5a4a0c6b36ab0d4cacfb9f1b36ef839532a086840e75131c66447d578193307985e4142434fda75c34130d15208866e679495dce47441b2e42534f4b444ba7c22118c00c3086492caa18a133843ba7c3c2566d8a286b97d0ee20e7319f29beb11359e03c86086a421a5657d34be195f4c01a9691e1936d4ea69ec4c2f912febf3d45d46e6f384d0cb5cc68632a79f2724a61410a910045cbecce70991a737d215532d4c8f25d12646f5acebbe4e095f8dd68f66a9d6b0680b9a127a354f08cdac87d9f8b48485fa3cd4af462538bafd0304d5ac67529e944e2f4637150a12e5f9809819efc7ccf062b3fa32064a0d660202a28b27ae608184125d8811bb5c0104173714a1450d4ee430c2876f20840d842004fa3069f9e0250638e34c0850c3952690c6fbdc245d3ede10904026de16a00f0d5ba409d09f61616802f4fb9af67435acfb542f52644606866f0cdf23952af5940d531c1799861a7da00395cb75c7a9163a1591f848ba98692563c30ad35a8d31cc24c334c3546db8baa91f31325775bb7bf7d1c0d0385e3dd0ad36e4db51d65b2f5d335ecf6a9c98d7f7681c99d7d747e9aaa9133900173d4c245d4664d816b6d37c34af07ba5ce5b857eed27c9e902ef45af08484ac5bad127a670e74816e77a0cbd1ae9e8a4154657c70ba2d650c14e9baf17e0c917479efc74c912e1befd3d48f547d0c6f1902d6bdc6e7f5d4f88cd7f88c736ac6f2131e72c2c44d2740a9ccd471aa0ad14edfa51880dd53a5de4f1a278c8152eb7b888b53136be122813b48a871eaed2ff5d04595aa4e48785f8583d633acc713650be8852695c6677c751c0febed201ad6ab33ac57ade70283333ee407a471065f6852230804ce388d87ff2288e3e3d48f1aa5594dd4ac6e23666a2a315062a0948063f57035e3bb2dc1c2d850c361552bcb4cd1a6afc20faa767ab0fbe26526ad8b8172fb247c4e6edff8bccf87261bad7d4af8d6f880c06c07415adcec0d601b644f77a7a7dcd90453130c45b408ceb87c94b27a0469fcbb99f16161a63e37f5d9a9cf4f98763935690b32519cd0e162df69ecd10bc2147344d35e95d938757516c35c3e0cbf7209a4e45232f627f5aefb0f77d412e9f2a87ccc4da58e4a3d82da904763caa376c8909465d9950a32bca8484d7d9c3e2371ea551b9246902c912e549451eef0a0783e22289b4313841a7f6489cfe591288967ddac2e658e9435270515c9911372a89133d22ebe010c2b3486f07463c270da30aa00f6b69045b7cd48bb660c21b1c2074e577e49bb7480f2fcd272e5a3153fa8c1cdacd812c5dd309ac393d39571fb0a19c0ed63db379d55b4a136c43edf7d1acdde19a5182de1cb972f95284505df581d41d36e5e3506ecdd216b8b524a29b1cf905ff86298cfb2de362cce6b323b73d9915892a287251a9ab8803b12f3302d6607139096e8395b230b8d6f60a149279df412b03c92882cc2ca91ae3eea610ce3d2307621698cadece12a461ba396231375308db5ca9143ece40835cbbe1c45d4983a614a7dc5d2387c168a36f43b7dc210952f2f092f0c552c591415a9599485b05c7a4d13124ae2420b155ab454a1a5073f6aa9bd44b4916f16dad14405af209a10d166212bbe3c0df512576ab144d4a1fc06410e3957be5f5e7a74a06e5147ca184399da0e871ab29191977e49979212135353939353c846505c19b8873f2ddac80bddc02118c1955a2a09373e7235e1085588262a558c963a73e339c6e93971dac54248eae7f477fa2b2480e9f6797a86926ebf487f4a7e129786b0dc13aca8fd709e70822a6d5043568c311a11a3a5867366ff81b371c48307abd547f1c078dcc66ef3c8a24d63d1a691fa421a29ea5c802ff350b3a09ce0811a7215ae127592882e8d6770390a1702624bd24002b1259f85d6c5958f61c81a10912df99db6d15479e80ef110eb101904610d19d4e58f9388365289c85524572981abd478221b1089449da8f5208b1895a80e1c76223f301b4da18244e4872d2abf658601c17ee4e6b2956675bc51b3be238b8ca0f63da6ca6ffe810d2c6a7843e4019408be38455415729a3597a8b5591dde60c1838d570d6b12d038f344d4c9718bb933895f18c528c5546022814be501e9cac33031d6aa470f14545841aeba7593438d37ae6e3e5019c092e3f480cc9b84bfd41bd45ff91524ce8d4b3a78b9f48b13878a8209582a4db3a4ecd1431e051556c042d0cc2e29b89f0c0501e546c1513d263cc2d38d4b3838ddfe50b86996cc41c16be1ada307b24a10b5afb06d2b261c51f96157c1ce4752ca87ecc4375bd4b0e6caefc846fdc866c379514fbdbfb08f6e0b3df5cbe9a9c98989e8680a929115a5a42bb1227faa14f643a5846e97efd138d8e58ccd5388b65c29b54ee362aa7bde68d50ba38637dd6fa44be6529542c9d8184dabb5ee48dede7d6106e80d8bdcb6dce74dd447d3ac0e41144020ba4ae8e5cebe7dda8d2996026342973198f0810e3c54e10179988f9d0875a9f1e6868580f470822dbe50f922e568025898a0045f14814311940065dfb48ba5240d7941c2d207a45c798ec20594672a4b3a105d793e9aedad828ae4735868080a91ec2afd1c47d4f097fba8ebd50db8ec3b4c5ddda6e5685aad48642b6328ddca1e5967881ac62d4f2a4ad3b68f255bd9b54f8a00be5424323b0cab5594568a965925ddca9428696666e66e47a6586824cdcace5a419d37876fa45931b2a4688fa91ecd1ae956c6160624ac15d4255649b33213bed4909fdcecfc24880ed2382c449ec6a1cf7288344edf2cfb03b470c6858b35610a3454d67472cb4128f4d0e1812a54c355d0a53daefceac68dc8cf48b39a451f3d50430e72614e7c1a272ac13e25dda23722e9a4948817352ee18044e99014810f2e8ec40717d1045cac09b1a4dbe7948c7a8574249f6e284d9212be7c19e38990249cc46cf9c68d639784b30c8ef35771d8683127b6896ad1386c3128d4a971b020be87ab1bd3381ef69d79ec189acfe8e841455d87102a43612743d2b2958e5ca58faa761615dc131e0a8fc4243a89808ca85c964af8568089b6dc987443264cb20231e986404677da186e00b97179c54a08e4c3a94e2a366ef4c14595524a392fef946c2df6e48b1a6258b0281a070b52e384d8d13d6a9cb63272dce6b0b7560bcca7a4aa2295d4b18cfffe97701c515cee1c6b87ba83f51ddf0c968dcde2711e40f8f2f88e4fc6238f1d16b3d2acdeb1e33b8d3d893a3bcec3d2a366f5a90efbd97055f31c25d850bbd3dab02f8de3b0615ffa49e3348f2920f3eeb0f44ab4e9f7e8d246577a05f749e3442d542059691c1cefcf2b8d53820967a71c0f57350feb5de978a8ddd510eb96c7bf1d7f0c6e8d33a77ee0784cc9a7d693292ad6b2d80933d4909d9eb0938db78db36ca8f1b061b5f11d365cdd1ef2aec3869af71a3b94c386abcb487d6b434dfb90be7af807a91ca8e44c54c64d4d32a56606000000000314003028140c884422a15834205565d57d14000c97b24e704c16e8490ea41442c61843000000000088008808830600554ba42538a77930bdc585dd39396f52baeeb13056d46755af97c5a2ec1dd86aa1e2e2945448570d6ce650266a69c434cfd14d1ea12188dfb81a261ff5356124fad0e54451b1ffb43428b20a2f83f25474c07d8f9237f6ea0227f8657cdf49404675fa22ed0996d3ae34e5d4ffbc2a5f85ff66b56e0489e03a068357fc2d3fe20bb4dd86637d037f0394c067a1ba5493533c3e04940f4cea6808f59413aa95acc67d32fca6aa4effdeace97ca4faa70172c20652c590f4fca1ca11602a5619d04036911840437ee32f507a4487e6030860cc07939bfdd3c9aea03ecd6b76cab3664c478bc57eb5af36b2b452ac24c7f334b982ac0f58d2323365901dddcb0b362a464337df43f030287f6908ec7200164d40114b805204b45fc252ebf820cd6034041efef3ab7e9c2a5db1aa6118dbf30781a1db2da1e8cf76d50689741895a4e10cb1f570dc0cf695bf18864674453c5815a50a3858e819640e27b25bbb39452d95245b70ac09c757c0afb9c8c9a87f1671fd36ac7bd9dc4be899e46b417e0ebbd69690bb19dd06ba136cdbb17a326aadfbc8656661f83e8e847522dd92cd91b95953ff388f12a449d010175898b664ed6d8d5a67727c0c6eab8802d4e929880d7a1974937ab36cadb331b35608c28dc7a5bca4cd5e24e9253524f6edc70f853b6ce384bd62108d173a8dd9fbdbdb93c013642603c32c7a7a1bee8036dedb7347a051e29fa68ba3f0a29a0fcce8c2a630ab98343fe9310ad6c31e0d543709033926b14056b708e24623f3bd5b215793419dc3ee8461610603559951f05b47d15bea98d6fcbf9160e09616fa65314af7ad8d9d1cc0b81de35b84afa301c830a202ed867e293655eda5b8a540e1a4e4349b972275e0176b643ad01726c73ce4af9aa870d7ad17d6111eeeea06603b8b8e8a67b40e3070b118a5f02c826121d61c886e372358e5eb91c72fce3b74496e215879360846ebc5eae2cdd5736aa2f93703ab07bd2a808b3e25768f1cbac8edb59cc32dfde230159137d089a3daaa7923acf42df11a0fd14a1769a35a73a99ae93ae4f30a6821abfdaf591aaa373984995c6c32bd4807bc752472fc46c76df3b1fc7a726b555f2db810bb56d431f29365a8ddcabe3441d41396936b3f786a7738c7865b632c43b99f6ef0037baea64214d6e648a7870f9dc156cce43cd47a2489edad46971ab5100ff13e1c445896c53cbbc24bce931441f808f7ec741b45797c95749e9dc400b9844f9d788575f772e471b2020231d82de02dca1021c8c996ebd5c0707db744c41c4333a1f524ac516f064b11acc8690e5f84c4996d728bf077d33abf7ce576ce933719cdb469d4eb5aa3dbaa844a1e7c1ccb239b6161a9b1b86bc4b6305c5493b655f999ea545d6db8f8edc7467949a0ee08a962544774c9ad6a447584787e11d64d9b7666e18798c455601f233204dbb279b15b7a1a3895b42cc158612fb35b1e84c48ab6501d4e5a0f869c0f1a2ba86ea6d5879495f287641919248a7a9f7bc53647ba1c5a76ca2900bb94ecc4a93d28e7ae45b6f2212c31d874b7b044641ab34055d2fde60b7165693f56b24a65662968f79bb8466d8fde7556e1c20caa9e09a9c35511890fa43a733ab0d9f566a5adc659cebe43833e040f22b686bfa633be0c270268195ffbc46f1caf41f819abf268a83429a28c434f762ad497fee2397ec1d2694d4b62d59b1c580f631c0df90fa94f8d93d35b572b96c70999a948a2d1aafd6e97d76145436017989a46ef2c59018145a085e7f64c4d21458861cac4280368840e227369f74a39059d974e9e177bc65d919528da9b06a545ba1370e0d388e0dd23c71173909146080f5ea00823e11f03763936bb91b1c1ca9e99a4a50d40eb4d31164ab185c7f799566516cbdea15fb2a67a062e4bd43fbd8a7f716f4b7e517dabe673813c1a6f5b80c92984ee08e665629b1ddfa2c06334ca6796bb463f75cd459fb7b15c651f468706d70132b7453b64a25d590f63b4505690e6405f2283cd8cbcfcd9c8152ab11407e47b9dc25cb23de8927e6b6d929c61731db42214f03899b94d1c2edd28799535468a588203371d9550441d924aa71c2c6fab479b6ea8e1d12edc69557342729f578ad2cd39a50bd0fda9933238991d1ae04140253f3432f0148982637f6e7fa18613ae52bc6379023f1ab7b06419ab042d955d7be812766020436ed0e0a2bb5c92f66c7a7b6e7c3b5220fc2c6bde020bb20d023c32537aa34445e5e4599a426f39ac79437bec5fbc39c80b28a0b3e702647d714c60162e04e47b5a191316d1ae3f1f3797069ebd94da511c716a3314f43cb1bbade11e6f0e388f8012e6ae51394df9349f40845d68e33c364428ceebbd225943526a5814fc581da0b950a25f1977bd575bb0487f595235dbf3e50e3f724852dabd37d32ac87e89e23bc616dd94ec8df04f023ec328c7c5c9c98faf9a3fa30b6002f1f85ef2007fe22da531cd965dfc7ecd8e9bf869ce62a3e9c495a95b490106f81c01b4af13e1f46fbd82adbe39ec3c4ef7a870e718501436b95efa150d401421dccb170b9208e2bcb070e8317b3161eeaac1aff9133475caa64e90dc47dbc16ee2d8462a6445a82a4452ddc6ec09052dbd78dc7ecb173b29d0defb3e4bbd7656a1db98603b41b4eb7d29675e9eea3f8c4fcd86fd6e5e8742bb5bb7035a089658cd7abf1c61561c8676a73118aa2bdead47f454acd4ded9163195a31ef1e7ca84714fde344ef4d59c494574e5ff9d1102339ced4013326931442930585b200e6b1786cdc378766b8cedf0e8071946d05a9a08d1ed256b73761e2edfc623508171c3629fde9f2441b0e344637114e3f509a80618012505edb59b08fbbc9651c111f6ed70ae532689c6b51a7cca06bd8b0cbe94a9340a722528003a0cffb249e9767a89c3ed6e1b15a945a71442dcc80b9642b5d26c40c01f151092806183903eb86a8faeb107914ce510cd3fb322d6cb2e076323ab1716d1bc4930fc795dc158a260c27c24ae172f10fb0f39351cb26268ab4da715ad7b5f992bab1fa1d9e08c51d0019956e65df26edef1877db52a09065a3ff12db67bda29ce0e806cfcc39bc15120cad1ab78299bb9941a73b7ae32bd87efd431c50cc7424b0a4f590448ec4e7bd3dc609879a7ae4be2cb9146acfb68e9641d596d56f19834ca149d4824b68e4e015a8666aa8aff4cbf7045d9956d2904d2bc76ed4e28a943b338f0e7b6a1996cbbf9af0f056b6872e238636d3e536ab103379ddaf4d176c053485b8d53357dfed64f53dd01552f595dfe40145237f1166bddaf45649ab00b63dab6173de606934553cbe8a02a8c53686d7b9fdb48f6e202045b61b227ddf02ec8258d75e3e446d41bc80fcb6f48881402cb4a1bf22468492491c70fb3b286d1ae97493212cee2bc193fa338a38e969756889dafb2186283cb3a5eb7a84d8c7b0cae9f5377ccd64a83ecfc42bef86ac2b7e8ea4fd5b70477e4a9116ffe0a1b5af7b52ca958088ec53f3b581b03c65725522e4eb5ed6e4394f884c95c9d5ca8af0f09ae808d6384091867a63cbf5774b05a19645665fc450fa028469a39f16cccca20c6311b607a8119afbdcc10acafe00c5928cca4e055c8594a655203a6f4e65f9f41a7da98e6363fc2ca17ddf410360765093d3bf11c740ea1e4044a30d5ac328e94bebdadc4b11c1edc23840d40fad250a2af7d4a29ddf3e7eb0a1840dad31a769b0988573ca0623554b4a642d0eedccd6373dc36123c6688eb996adc7e82a145098f229bb75087135a8bee4d752881244dea1356e9f6be0a8969a9f13e2436e5878b410461f5437e215f381168cf04916e29bb23c849043065f0cb231809414000c70c463cb383d7468a3ce907218f28aa7b04e69c68889f86993e9f74e0a372f1e9283e1394a820f8e945a4d06ebe25ffc505793400eb28454461974feeabb8609a3cc56d50a97195721553f04da468f642958a4f3c3ffd5f1ce69809c4efe9e2a5445d8439aafc7bb6155967773bcb30ec8a841db2d69a130374ae557b9e45c347ab21240c7345a7a4d41b41e8d662882bfc6f7a37ff370c4bfff04b5ae1114362f98dbe45d8d481861e61766361e6c5ccfe276fc3fef69f42a9e50814a2332ac955f49c2ac3cc5b3a0e594a6ece25b047f329dfd0f04d8c79360041021ea5df9342e723e5466f2608f30b48a8c72c0f4bbaf13d8a8417af7112cda36ccbc050dd17c831170fd67114d80205559d79104680b9721c57b7a9a9f22769688a507e550fa01eb7a1cdedcc225fae55e1f9a3412377b6b4c82abc2d65f05a3200227a8b1037649ff40435903b1f0581565e20cc513e2cb0e95a6cb44c221c1280a19c2b3748b53a88d88358aa96ce776faf134a5408b1e7e33fd79bf151cc8c02103d85a23d2cff6f5574201d98f4f33a1f310d3d0824d130f7460cf1e396d0bc849964139c110683cc18759cd35b39407e3d93b21a1bb7a2dfe8296c3711e2adce7ddc8bd611c5cbc61cbd88bf9739feb82408189dde19c85cb2b5825abd0bbfe7be2587a9c30a140824c8a744f8f76b937dc42c0ad5ef3e463204b9c970ff6ea8dcece6749e467a64fd5100e5420a9df23ce19e62508eaf235b94014b25696f1eba52921684276b0ae328fc3c4aaf648ad051386ffb1bb21f3ed69e65143208d896833209c26414063d7f406a15d5720034a591425c70e9f74045a000ee4346410f471630183de4fcd1b88a82afb817756314466de3272f468c0148785a85d7c34a1241310a71247bd3b052ee6a3ac4f1b2a604801f81cc2b3bd334df99988fff37e58a237afc3aba9b333992503207b5db575257f829223cfa389a97c98070b0ed3e4b7832d5b424117a8a3652cd6dc82f7674cc0e6d5e0d116c3979217a372fcfc31ebca597113c45e15d0a48c257b64d77c54fdd56141ac3c963e3c17a4d10a1d731d46dfb4e96352e8827cc42064ef6c789841b2d362d8c04028e199360ed9f49acdeafe791236e3a99b66512dc6322c708b14f3e857fa0cb0c82021d64f7fa6478885964ade8646fd9982fe3a2a392117783e25b005a3b43c8bf410e70d53d72018957e837f6d8017d8073e4364ac7f3c50687baee75dcc6ecd290e00411594c00ab4dfa954d6048e6f23babdf57ff63ff80f62b2e07c243a71cf117385b77102d535b4601d743ce727efafb21e6da24106364f809455c9bf9a5af345f6ed11ed9a78e1ce6c57372e9bf4d2ca9938d44c2b06ab2af42d4bdfcc21a1188f8ffd92cc8171137e9b8ee72694bb5ca9f0f3fb188a231346c10d3406446b28725a1e6ebfa66f18a65fa044074b84df9879cd4fb77c1ba1157c69b2881fa44e1c48d4447ec81e206b3990ae20da57e66b1e272de413c1295671240fff9d961634fdfe044c394fcd53ebce3bd38b57c390481c9e4297318e413f232b75ceef5c51a97a8d00f9f9cc46929c627999a6c818b0d3c886ae3a822409e910ac29f959db8f51a66e60f928ab401c114a50bffe2a41c588e8f5d799e446f94ddc1b4139a33e36ccb30a108b11e0e6ee2b0c44535942e4cdf4f265fa1fd8b1dec578d0b194608a6c2273a3f8b0cb3e75021dc8da3b2f013eab7d45c290ed9bcd8d0970b900be4fd7d4266953e7b2ce1a71bf34f429cd66557d84dbc60970918e18d5909c31829af55df10fe344b9fcaf81a80916ded078fc10a173ade29d31b79d1c92b3a210aa6b90b8577c62ae2f7c8a021c1fb7ea3e011273c7dcbedebb8a3fa678bc27717abcc4f475ceb15b8c8e53483f8e9958e87f78bc003fbd540437f3df90aeb92a6d182a3d5465be3497da5646c1dead784234c157e738e3411ac38b2c9563a6beea61e1a12205d2018eb132184243e6a44da0d1811fdbd25050c169e98d586f1f0b8003c2bd370a3c0626377a90c876b83d334c50703faccc1feabf9624b36ba8378841c0da7f6c8bc6d774c7fc326347636d2ee7b57ba76aa57306ef4216e8211430b8a0417ac52cded90e12c59eab260ca5b20abec6b33dd20a17d425eb59c824e205621f8c47de6f5624ce4317ea816822fe818f761a5e8c67319c2e02422c6b20c8126623ee3b866c710fc66073f0ff13c5943f0971c128adbfb49b25b4855fcaa72754a4366073ee5d53ed7f80715b6d21a478583ffcbe32e5e6ffb2354b1fd84fbfd016d2ebce171e0728ddb8a28fa2590e4e64149f4107a582024c0ffbdda741e5bf76b7e3c92f3f6da7cb775353bd83314bbc5c266ffc06171d5804338404c07fc9c226c5bb15147f488215068088fa1d999471fcfd65deb593ccd94095e65d5d9464d0ea45c264e0582e9b33ca15ef54e12613d4719ad90f2ba9305d0d024eb2d1098fdf76a299fd21ec4fa7351ea57012577ec58336d1390e96a05b48825025b4eaee1e0fd386a23b31e8e4e0bf0eec9719130d910163c55429621c98dafc8ae6b418492c4425f134ada201d9c39c8677b8cd6559940275464fe15502e949e08cb7df664fefee1e57d31b9a183f442618ebffd2f18c1bdd848ad35e9abf909f2d8ce01fcae867f67f2a3c630e3bef27ebb4bb20a6eac79e9e19ed9baaddcd22c211aefd32ec65e874f585c927a48e49eb45da042140449a0bca0fccafa16c0abd4803305c75823779128a91cc818bac568b09d13830f648d71d62601effcb34bee3eff00fbe041a3b884a012ac136493e00b778b5a302e7a91332ee50c69165deb913f8d375f7840e037dc1f9b864fe1c22868ba386193d659fb0f1a378951363ae22f500ed6b09437473cd3913de88c8cdf82462dced3d87fbc07d55e805f1ccf4da855e23573054c102ddd8b9678a8ddd462e0c89511a50c9129d1dc63284490123414e1755b40b32e9c3f314809520c8f792f0cb5a36872e4e3a7e89cf0e1c094a318fe74693809d19310c098e4730e52c79002b525cfcb68cdd94633d56383c77086a5374eba5dac0748f1dc181c31424d8ce4ef6aa0216d382872d21f3b787616a5e3d14a5dfb7c78e2217e9595f882906030228625f2d477112f784241bc928f03c39dbdd050cb029fd6e751574b43f21f5d232e7f572aa59dffb906211044e1a141413d50a72ed5af9365785054081de31cc052b1a19e96f7b74aa571b73f22839253e06b8d602107004cdd8db89fe14f14059cc43be85d048e6b201532cb03ae9a9a56030a194c641be2d9a720a7bcc49de8f874bd0899dbd4d3d9ac401b45128b9e934cf535cbbd8d076c8aa2be74326b21101a9ddf5bdcdfac4051f2931ce0a77e3704e0f421f0c9fcd4eb1e12c5978efda63280a70ae0359cddc4f929b10113c54c7c3b36bc0957074387670e70f25949108c5a49f06f4c368097a5de906541484f2f0182b86612410980bf6ba6394830685f33cd152454dfe56d766747ed19d3bd8fa02b5bacef7660b725aa6457b33d66c25acaacf8621910814481b6b1d0969f01115b19c39eac2de88d034cc1031511115cafcc8e254ce33849e9dc7287a0e1f70d9fb1e3d1c4088e15a08997964325f84ab744ec202d22feec335ca8c47854257d3a4e65a5c4fdbf44c4fdced88a3e0eeae2dd208f612a31e855c247c72c2f5ba2ff2ebe3767b1de69ce74c0ae2712a0ca7e050cf7c9c374959e009c9dca8603cae613145e0e15149c458d1994b27c381606cbd97c45c655af4faa9882549752d42ce7dee009c0f288576c8b5221b607429f06025505afba980175b380086a2cd04b1d05bbaab49662063ddc35dd7b169e05de5f8243e39bc047c9f302b287e51d672ff93763f1dc78fc457eb207622653b602cc80982396881eb31fcd07c02e5bd27cc855ca80e0dd0c004e2225b362827b3bafdaf66873f9fd503f45fbac069d16c6c8fcf22b5927f9f8d9c1fd3051a196319b730350e666544e5ee8ff7593a6a92dd947ae93bdc8a8c09ce48234821f1bbebbd6a0d51add7b6b412aef29f36e04de4e069533304e722e08d01e61aad9da2ff51308a7a619ec549bf82ae0ff11b32477d8e2bc507ca1b34ed96d90b8be1f269f141ce2b98c698f4716f5746cab4002f9d663d3b1fd2e58596b2e76ef019871ba015ccc687a89404d2248e450aacdc5918057a11912d794a80683d8741da950d31c2c5299d95bab6b6a6c73bed9da0028a9305ed76ec046a4377d80183e71d5fff0e6f0c894d53b4c404b4bb34102404780fb70b11e224bb393186e557fb5e15bd3cf65aef4dbfd8929092a48e90f067907259483b5d70a31151d4dd6cb1358b86c007d598d1aaf4c8f2d9f294fd37bdf33ee1fbefec74f51ee3d7dfb792873c66a1b515f065ec3347edc8243e0c4894ceaacf89254f9a4df55cc218ba51aa357b48907079f7e6f5a8c7c27821dd968689ab40726d4d676ada2638b0ca90109d83a2bbe88f39bd31f917756f90a866f27e9302ae422ac80822ce55e9dade5486e594473147ab63e34af97ef2e8642297a67ca3d16039f4779811efe7606364d5aff8ac567d60e3312326302e3bfdbb0d3248e809c98d98083920de62b0385d71cd418dc2403dbbc91a7075bafa9ef1d373e6702ece7fae63d8479ca381eaa48f1f72d7b68a049fa3196b595140058ed9c7463f4dfa477fcca8256a7ae2630b26b13ebe5cf86acc56c5713db7a5e3e5dc2978fa87286c7094316c851bb2309e9b1962e1e5730458eb53e69dbe618550b71e9335cf21c74fdd64f04c4e13d2bc996c64dae356c3143351564466c89ff0400e73e8b85424c86f84341a2ae5a50555253bc06ed9fb08094acf27d1e90df6ab06ab523ce825314c11099eef4a28f6a80823c2cd38f67ea96e868c84717024f21f5aa276e03b8908ee0448d09117310bb014d1d301549b6b90aab98cff3abf11787cd6de1da885bad28433df58181b2146a26ca475a3aa6cb191f071f5b3bc9da9d130e6b83b3761be6e9c4d67bfd1442a7a40d5e53d3f07ad5f4df36c2f179be2115eefcd0f9e75182704d88aa43d47322ecf3229e3b426193a367aa0c4bf562091eab80074b4cdb1f65e266fb0e36dc3c70dcb1d9ba4cc95925a9066377bd2e4d997bc1143a928f25ec7177fb9eb677c735e003ddc1e08c55f2674c484b13489d237a548f606ec6dc9adf23a8329375d96ac39f8b2c99a8040762c31c0c934bed80c14536f0c79bae4d149f492cb3b7bbd70bc2879455e61effc0e9961b4a266b1e899dc91bce842fa9927f446740e754c27c2f9cf3208c219779329811b8734148c93c8c87bfda4917a8fe97cf94e36c95e61a618597418eb2b2ab13699c74bf834b25fc18be21e348db5b59e2b0b998620ac5a9fb4aea670932363f1a25927bd7158c3f1dfb1426ce378c513795f59f320852e37e0a26df2be45ad82b8700601d115cf79316c0be1a13c0e299028b018a258fcaf71440725e84925860ee370ef4262af2c8c837986913225ca80d1043542525e58a49422965ce5173b8803a68a8a344755db9955e373d52b206bbdbb73087ff30d4c6caff3ae6747fae99aab2a7972482176460758ced365f75d694785717e6c005c12f3f291724087ec2b66a16bbe5378ac09031e69005ab41d858eb6dabcb8c441cdd59e77eab5b72c1e652478c9d652e40b40c99a652babf50f16a6737b39d81c0ed4c0cdaed745d893e04e329470349a54bffbe4c5610f2929ca4cf2336cd45551c1c66245b0951f0cb1f81878e9723e29e4c9d660307a70ab96c362c47c560aaaee85190d1928b3a9ec16bb6e424433a634be4e2d36ecbeaeee0e8831b3576e8ea4b3a6a903adea053db0761e8f1fded284dacc3acda652ee62743a55f7829d73c95a5413a47bd943c19cee2b2c1a183cc3abbe0e5d5603af2fc952c132d4752bb53298c4d6c263c4b82c704ebae2d2394c5c5df9966102f28d6e432384a364d8889140517f1b22a26cae0f6ae5ee7cce4826a4311ad7663b1ef372777fffbf913cff18e016d667dc251257575713e914405c099fc824140b3bf14603f6599e1baa51c734643cec292fa409b5f2a232888891a85c4809a189c4538388036c577d0c72283ae18614c4766d0399f414f2a4983d18368e2a2b0ece51a42a1223156548bd79041cfcffda502a771f4966e8d555493563baaea956b0074bda3028ce28f95332218b1d91d1f5b146c4f95eca31ff2e54a353681792c0ef912b0357060098117c265ce5a2281efce50fd748f75b6467032a0281738b84f96740ca8a4143b419d292215e3a3abfc510f03ce513281cd621357bf7136417429fd66bc37415b95e39b62762dc2e8a245e643a382ef3b84a417218d06eb6d45769fabaa5df3cd10d67efc45f517e898ff80508129b6a168c9cc5292a707ac95b854fdf7a5874da615c6665269b402557a54e5e6419f2e9953cb1e43430709874db302c8c8fd48a8a272445b717062418eed3963d45069e2655db4de060e0370571f5e8e2d9bbe50886ebb326a8db1b13710291dd5a0a36f9de69d4956bc73608bcee7e82d4045b90010b9887627010cd18ab8654587098c70ebedf7e5410b412a47955d53e52de3f207f8ee4f72ad9cbfe2e4f857acb91078f1a57990c205f08e6151b05242cef8dc41f416fd89598131b8ca35f16b5fe04e991dc1c0fad04d40b8a364a0c01104fc5daa848dc2578d6b7ac5d65ef086d4504700aafb985f62b316db4b8c046b7a169e6a9840ca92019774274767bd7b388f82b4516d9dda2328af5e01c85d1cb312349590ccc7ff64963292a51a4f9694523633ce4b211b1eb0df090692bbfdaa6eba5954347dc54fb4cfa6881a61dd64776453b425406a44b56543879c419871a2452fd3831d04dd96524656c733e9079105c3e4a0ff756c9b6e9f969b117aca22597ee19c216d885d180e5388c6ade44812ac6530caa93dc7701eea5340048ab1e354e7143c63ad1aca7d01f1e0fd8dd36043365a4d80dbf344ac0c526a1635c26bb4da740103c020952d1e738d329056596d3f4cb6e6d7a279b7b209d644fd003743107489454b2db048de97ceb58ae8c04248dcd8a9213e7974a1e44cb313216eeb57ca41ff332790a90cfccd849d612bc7646b73ec881179b0e16a2fa374cb074abc70f4f40875e5d5e5d3da7034c68a4c6ac9cc206e40ddb1ca00902cfcf6149bdceab873fb2906e261a3a1b1df674628d496805829fa5cbf40dd422e833b4cc9831c912fa0996e842e0674965ba16148e795071a6bfd5ab59f806d41aee36ccf20dbf34b48025ee6da6e86d7ebbd8250cd67229aa74d4172f9b351a98cf963c00480d9f249c81b2dcde2327584021780b9e61fb6eba8bc3f1eca5e7ecd3dd5604f909915d8e67e3504129142b454875a4cfdca2cf64e1249295b12895348d3e8f8aacc7d44fcf344f8fbd946a300af9d8e79b976cf4a2dd2d9e2844f7f22d4b64f2bb5d0e7e0a39b51c0584d80f8f5818dab48622f8d74567a6bca54be18caab668325786b726362a0817706c5abdf38fca1041f93de8f03abd13c384079ed4cf2ab450d3bd1517560692be9cd06addbc0a71b3226a687b9121365811fab3fc00c972951ab9c67388efee93505e5ebc34f7220fd7a23005c01b615a7c49d2cb8654fabb75adf12932158b11b0abf3911af855692e331de4634237ccd9fa256b1ab86e3df2e44254e0aad85843e48a11c8ce22215c9544ec7bbda62d764a3fe4218c706b24d4aa06a48774e6c52860be7eed7300ad86a90382e0448a25a7d609c43c573b9621a34b706ea1df4122a5f62a0da864d7941ff6dd6a72053ea5e51418f6176034f3e734ebba24773a0ea7e32d18a29d490d4045fd352c415803361903425a705efb85305ee3e5bebed3b4ff015e1c7400e6782f87b20283ccaeb13d981d12f45b5fac07016204d3f25f629470cacf3db36242674f15f5018ce0f1ab5b63cacd16b4800eb29cb8990a742d467feb8beb4f00cd2ea4a3150710cbd22f9af673188fe0275adb3d0d1100fde774a87473b75b569dd0f4cf5ab6b310fcb2d591e881d5429db2dcd5eeec8994d8cf5c39b6f67032bdbd5d87112a8e112cff0a805390304f55b2c6182923ed7021408086b4d57d850ab89a16f47ae71a8fcd922c719a41275ccc50ddb174a0dde45696cda2a1f446729359c3509f812ff8de8952f7d99fa914a87e2d85a09a90a586affc56b083da0c6f98d10f7fe4f5f2080f49412aedbc2fd019acc26b9d97a2b0a05b7838ad939b2bcf1521d76397b044ccbba9a80820bb734ddbadad8eb5aaf2e73c6b685fc93cfdcbd0293e101fb91b7d6cfc9cfa57b66f72be6ea72363689ef480c410f7d851b6f6e0a5796331a530473ba412cc22523a82a8367809e427563e3f05a2b8e6079e24f51d9e384d49ba4381fd87479531fe71f15b45dc57aab3ce8706eb169479e7c4c59ad438dc03aac2b88578bddd43ba9e17f09b98979864e93c56d4c21794e9d88d653846fbbada8465219a74a01a9145f6de596617e631bfd69e4d3fc5a97a8b01bebc8f7ed4d3efdb0ce7490e8d7f18f3cc4193b0868325b64c7f9b41f2e8723f5bc5de58b7836733df903a548e9612a070e190f5bfe2e825c5b12735e52a9836b118b6142b2f7a1f666ef253581bb55fcd482b76a91ed51b867be7d8dd9a12b01e5dbdd56585ecd42047a5a8a7ebb8007c961b62f2a7c5898d0c84642331b5658d8d79ce37e1505e695617d1e8a19c3554282cbeb892505ad92e970e756938baf6139b1e82d8032aa8d80d99fa676459653f6700028a015bd6bf29c7957dae2c520c52e83e8dd7479f9db5b686f83b8a1129023b5100038cfc7fce094939c7ae50e829ac4622b94d5fd2a4b4c1045cc8bda2fbe2f008c49e3117745888c71dc15eecf165da4586d6fd4da3465d9d4e2a4bb2d3414ec67f2b1f888e469331bc83766c5fc2b8af4453d034b4f28bfebeee3ae8b83492b8d6bdf78158bf6baad28c011240b3b105d53a843b315b79e56bbfb645cd186173e566aaa1723b09c0173bcf56037cf1c1a3420d65a7949c3a5342782b68e9b3776f87920ca9f47cd729f4a1ac1d186e11a00249562c42ae7fb75892b33f5302f13d960c174fabf610badd31e9d0119883101c8edc9318e83d09eec42654846648851f594fe2a027911aeb506091f160b704f864631b2502e458124e9a7c2399e165f01d329fc450ba97f9b7bb4ab072fdea7b697c5515b10496bfe794116e56a57069d85b2d427959452ff80a49b83fd73c21c6975036f0f240a2534256771d06537df663a11a00ed16a973c28f9ff49de84a5b604392fb52c7dcec626b5003e0040e2b94958816620709fb1fda406c11faefeabefd56cee7bc9607d4537d6785fd4fd6701c6a9952ef4b7c647c92a4b2217661ba7effd1c81865e414b996065501c377711af4d045d88039aa82bcf67c07dafbcf5e54670e626bc36e18ce2607560bd8ec6f5dd77e87f9746539be9929b9ce475bfeae932c46bf4d0cd3a4ef7094d3cbb9afda8d8fe460245ca4b94a2cbe8b599e9530ab794f349c0fc91d359392a40fe4a3594e55af747faa695f92000ea07196676d2f2d13fac237cc5d1fca56ebabccf74706554b30f4f3d1a0f8679371e253bba9152d3590394693619bcd1d2a6fce27b16f80259652b081c86b792dab56de6f427e96e18019adf3f631af59f35f86652c523950fd61f977e1ffddffc001bc2c9729d89b8d1f8b81b30f1f4da9021db2080f8b7aab1944b25a26091e82d8c0de1914c7eab225e2d859ba792de9991f6cae3b9148f1d7a43c9a59d87eec544b9dcaf02f08fb3fdc50154c15ab273539d674f69505f5bd3311a76fae9ca2b9530410ff0b4ec810f3011b1387239f4a84d1e58f4aa1cbd0405e654a0c7e57fab03efaa7919bca2d8997e60cba31a0742140e6209ac9ce0c9e9c8adf3302730c5257664e03a15de2a987c0ee380c2ddf72d628aae0595120b55ab035bbd510e0ce00ae44ea6f871216c5f8515882969abfa82ee81b953211e0d79c325324b0ca03c3911121df6a758a43c611f33196e2bb88effd0757081c9294d21af2790e48b70fc3195d20e83df99022bf3f46ac79d61b911eac558461d651cf0f569eb02a170fd2d62aedd066204d1d28a2d8ae4e75a994ea3a9f71973306fce1df22a5451ebf673b06d030e0f1dcb933a724c8ea25d325e4080d7f8fed9074df2c5402732704b7330809b8ac918733ba0be608f3c8ac500986d019e779db68fa3484d3a122ec124ece6076f0141ff805965046c90f83307cffc845edd24791097758df265bce9e45700ebad9c167a02231318369fe1a3667524789394b340a8076c3967953522013000bab61d7b4cc166a70e9f2932d035154ecc4380d63bd18c56a979293c7bb017428ee360d0275aa12b8dee4b4125c40d18985acd622ac5236005c4598a948a84def88cf2c06c2b9af840abe4c3f1b45cbf528ef63251aa10833c5de13f444c45297e3f373c564549b0449c3d876f9b41f2104658e0781f002c7f289fa9135f0bd920da6e36306fd051abafd40143d3c7a26fbd00a5a2ac6691e4f1fc99981a23199e875dffac07301dfc3f9426fc7225f54a8fc8b6b36630e21c32213cd2182a836f07e50fd3e9a73b2f3a545fb7bb128c870fc929beac03114421a33d90eb9813d0247919b72f855c4541cf1db0179f78253e52e26515f9d68ab0eb3b4fabd3da5e34f35a329a6b655a7abec31045b335835f67528b9e2c2a440565aab523bbed62657f68294ba3a0bea2a3113ecc07aa6a1e10e0de18c39347beab2b141de90636a6b1b3d4ddb98b742dd217561b4c181988d83f94bc8b1b3869da9acb3945789495629ac8b2e21f1b168fa1586e229ab5855e24a70ca0d1e5a0fb6623afcf808019e019a187f0b91a691359810c6d8148494a1337f8feb659e7b768e5727588432604c287501a05ab0588a08a9d1f43360747c3275499b8bbd2ef1ae6af7cf4c9e785edec31e979b5aabce103958be3f690f4c21f82c553c33a65e75bbc0a0a5d5c378b974e5aec2b371142616d4ce69e25a79e89374d9db02aee6a838d56756b5a5c6ed6f39c5d5d4b2d289306762e766d02e9bb675f68468ef1bcbf9fd7072f36b98870d5c466962e185a900ea3d486994188ddb98ff4ad8912eeb2f811c903263420c4a7c212f4288a4459ce0f2aff3ecc119578211a79a46b35a0dbba173311a15a241b342ca17b04084aa80a90dbc6c4098aecb0edf18926c2927ec108c4cc3f559af230cbf902d0c5067411a7292c21c4cfde0a402826e583955fd007a81bdce40d60f691659f03e79ce6ef42b8f29fcd8b046c89803f6abba4673ad85f38df4409430a42dd43d4436125184a9325e5a2c33c74bcb7ed7dc73b8b872ce97f62e170eab1cf3d95a64df9ba7ea04ac4808b565ac431813be4faaf99ceb94f6c7b68942a74ccb805b79b3c06440666091d8340c968c3d33546086a6d7e1306813745202720b04803708d2ef3af0f9f15d5b922d71557f74342612b6b71a560d1b19be6d10fe8267b71f781831b56ba1c6653f2037107fbdde7808f9f9a1cd86efc062223efef88b668faff8e7c83c8809b50a41866d4c8e87713ee2e5b981483eb8dc8bb59b963ed75ae1d5380ddc62a320db272a078adc942049bbd843031c3306b709aa3e0012332d665474d0ad30148ab40b30f9dc5c9646170f46c8baaa5912efc9f4593eb144e8ae76291f26049c9ef5236e2f0b50ac327d825dc285f1d974380b4b1d41bf6e44d90541380979925c5ea029052c89e132401dd7995bba0b5fea0499947ee22a62494d013fb7cb2a8164a0045934d2cbaf208ef7f380aaa499fe28c6123bd6f3ea86470ca857d49122f9faceb951ab42bf8a891c46f3b82dcd633794c55bd4d94a7c113f2bd76b642cc31a9677785f2f2744c522733207c3adccaa2d497efd10199da1cf0c821582379e5670ab7b4baebf96e0e16d433502785e5893bc7ab5e1521844589ab2780d0519a4b3b6a8c423226d6e9e243eda22264aea1faf6aa0a88c921087fa4aa01ce9c9574fa0f6ae05137d0aa9ca7157aee91dec414c87779dc9d539e1011f57c2b482f30f50644f0357f2d87fdfca1c55cac26f45bb4331e37a04f26c8cf083cbbcbf3232b2a7cd9042c270a9342a0f58d4a213780ba30bb2441f5eeedbd9ef34dc00f2927d083d2059306f2773792341417aee22e5e22b4d6e83bc7a074206325dc6fe81f3f21293636807d52d8abca2dcb29c10442ab94517177ce4e0165acb5f478a904ca34e344a12293e30a8af09f23c6941ea54f5bd918205ae4ea5c930cfd845e980d30db1143e59ab79cc0926490aa101991fcbc546ea07a5063e9183d33954ce1107092842226ecd9bf20d5cae3acf73d34a93411d06d75cda4a2d77ba132223f72b3f30a6a6e9c60acc238f1a6461abd3bc642ed693edd29e5fc352c025257373a06f64277a641fd22bc94b00f4a66dc66c95f4eafbca3bcccb1f3633df1ab594f64c83566f39440dcd9dfd505e9733e82586455641f27ee39d00831f34a147919bbcceeec4de919ec009966047b1076d067b99387a35b63b95181e6777a5cd6c749397f15ce2390b2af7268d340cffce011e9e7b01e6f7975d6549fcd36d0c19b3da734b5054a88e06bb1a3b45233a9f28b1c388e11045c76805f254c59b753f7ceda4bfe9bcdbe465e60e80267d714988fda5d43f044b594d221834513e2b940840826d60d633b7c5b4e2355fd07bbe8a98644c28f8ccd82c354bfa8df34cc8fbcbec53f90764ad3fa80faa12bf698af8a7be8e1141c8d6b3b2f11d052ac4774c9334a57e05bdf59f3193a033117c30db42299f539b700bb1a8a540ffbce0df7d03422dc3d7db80e1e145429c74f4841fac8ec5005376d67a7181eba35d666b964f63acb0eb0e103d45d53660f12230999dfd09aa77fc7f4eafbf90d1fa8be7dbccadf027a908b9e52fc9d4032e7903d4ced412a4ea0682301072e82b83d2fc1846b78bcc4914e1a01f129daf6045fd996802590ad62ea0d36f74cc2dbd75c6b03f6c17b550cc5bf199beb10e9a1b8119f0b0ec2bc336d6a1b4d67d221dd6d2fbfd6ab1e6fbda013debffa71dac0dc68810a31c30fdca07da6775308718eee8a141e024261f31f4c0fdf5c60c645caa37fa17333bc9cee837cfa0cbf35063d6efe052df280f85fe7af43b3b8895a539e12c6e762fb8dfdef6e8a197a0e06249ce009c8bf44aaa506a60a034a15ba283a09694db84e0848f1199f2a66281faa3628b19555580df87307428440bc755bfd65173a009923edd04c2a3cff2c8cb3a3d0507c8499644b1aa6b6a46551a899b68c90136301ac026b8331920434fd1db60ceb8b8d2352024bc38df6c3f2e32e9f89b0f67ffe307f7b5d139d7d3585396e0d33a2b2885e4c31b9badeed73f3242966077718e58893720863226aa00b094f17054985cf55ddd3462a2641e08da087d96f6ebb099379f7c37eb672a6a3bab4226027e66b892a3bfd6398110f0f620da3d4b327a29f3140e06fa380c5da31750beb26638902ce8dc6e3581bfa57e3d482a9f38cdf74d6a1dd6871f6da79c9e1658a0d651d0837a6fe6c38923b507a318c3f430d3abdbd51273dcbba808f22ad56e02eed426779ad49c9160716aa342730df6f2fe6c7b1c3a25f6e050e1f91480c3b8e4f8e7720e804eacf02ab46b688cf970d7eab0ca5e8a87db10c1476cf11e24495f0e9a42883942ddfd4d6a5d6abf2f5c467e1ed480a5a8de6a92ace009c765d41b985282e1861696b0e829542b7cfe16a5a8dbe23e70d491065f56b2b8ae2e082b0abf0ae37535904ed80a2b34808cbb232f55c8a9f680ce902757071ad8ad5ebefc6496c42c6051d7f500d28c4895c2398688ed522f34b682742001cb2e2f748a1bdbf7558fc565a19e37136d74c3bb068ffb331e264ded4cd835032f05841a80a00564a4782fa93a10c2cb29ccf0e4a64fc6b28c73022076fd08d0e04e0a51c9f97d57b0dc41662b3c495a3e71e4826f899bfe42c694378e860210b04eeca9e3b9e2c48e00a975b96c6dbed23f7ed3a49924be02d36400b3229819f02ae7f8fbf56f159fb1185cf91c6a6d0973f419a2c7cbb4e6d2f99fc0914db10280bd0187c93356cb4b32e205aaa71cc693ac5e9e2304a729c55ffc327d79e0c2f0b03f8b23214dcc9503d98d985cb8d0624fd0ac2f40be109ab6a98425abc14365fb08a614e545228ef7e01f07f136a626ea0a2dab1a33be0c097e450dc824f9ed8328764f7ab9de22eeab94480748e68b3eedd0fb40e066f76380e96b241a57ce035142927f04c0595ab02b1dbcc97f2b86e1c724be75655f13a954e07fba3192a83e0509554251003d98816c4906c82f39265119d5f107594610f2a20b58c9a28d6d68788c091c2045ae85560dfc4e715812ae5205bb13a5f58b2a17db5bbb0ae86f3ae0f12bd911fc51079feb928f77c0e6ca5b29edcda8221bfaee2c2aae38a7c142d810ff561021688088904ffb3fd34eda0a54d1eb1e8a34de876160c4b5c0355b93ac8a2c4de7563802836aaa1fa49d487b27f4954c995d608b746390311fd5860b817b80c0667b61e78ec5eed55aa0f5d07e885117dc83ae4ff517df311804e0d12e8ef4eb45b47cf1e330bf5012dba985af8ff431a2b9802f888ff6cbcebe75a3f45e3790783420b34670a1227dcc682934f97ef710f4b80672245361f17011c419b431268bde304567cf15b5d283ed726ed8e8fe31f6e165b41f825b7c8ddc7e09734749ca93bb040d58bbf00eb885f957265421bdff477998e8642ef62548ccceb8311d0a7d3712d9337f7fc442ac30cc460bf23a155d7a4f539a47ec150ad67308a60e2243009771dcb5c99dd11c6045d33d4f105b4107c8488da67f8776d77583a74d92db5017015032631687fc53ec4e13a8e47939cc435727f6efbcbe23010db4850023cfe480b84cfd8c84a43266719cb36b2d000a8f2e8f3957f730aa0818352d437eba18bbc3808fc31cfc800a0ae4295a1570a5774b8790d208180d66c3d018745cdb5e9cabcee56966ab155c3470997d435844670474c43209a0c491a73e589c9ba92de59f2cfc6cb2f743d2279a07541e516aed261d165316a4a11a48707c3e6b40ca4f00cc2ec81c949fd6d985254c77dd816c9afee21c964da6382eadacb8d346062e30ac2b8ee2bed71e3334c234d67e033beba3dab5d2b80f35305cd18a50763a172d009d06e01ed4a66f04f071557306c62da472e76b95c66a8ac278d3f048d3892e66cc49cb84445bef2453d9df47883c478f685f3c500c745de91acc34a0c84e33c1edf23fc65e2892e17454b94fb142aa4daa351108399fca4634cbdd1338a5f93d60d990043bed157997483822e69b73e85de88f60d43a464ec8b9bb7763fe0fd4385122ed237eca32eea0a9b99ec88b930d96dfcaf1134ba2597a414f0d03f77c0eeafb812335575bca1772ead5f3afa04eb8236c80313ddfeb42ac5a193b26a3a69d0040dc1985f9162e0337a92b4bc5e9649c2c7c544cbec4f0905a48e2efe58a435a39d72c3404e05f0e38bb17a9da603cbc382887ae0f5ae2865437cbdfebb0a0299f879b9c9a69a6c67fde4ce89fd4bbab2fa41d5674b8ec33490469eb8ec36d36e73e4573be26fe8e81fefaeebb02b923c2a015b5f82072034dad00b68d7120505b06ee8b7c74fb4106a5a5a329028eacca736be9f6e532b1107e0d744a94cfb3f9fa2bf36330675f4443043b50124f8358e0851aee6a99573e7a1aff7909bbbe3da2b8b6db9cdc764e65843a82a2ffd97eaa52b885b03d1b5c748da45ba86d7c656df3534643a8855da113a910d52e8371c3b78ceb0539bfaa23d501523c4c4e36c07e8f4729c18328a4dd21d32642264a861d46067207654dfe2ef5facfd4e2b622abd466ee2a7cb44017d1da88809dd2c452e74b8c34f5098419d99b41e4c3c763d5dd8c1ba117d06a0839edeb8d8e32c8c4a4110f37e72eec52b37110c9ad3ab15a7777acd1ac4164d28a089afe7450638ce9eab58d312d815e603802fef4f193bdc8e44759985ad264fa4a243b7f169e61c319b9f9a4a268eea05c169d88ca6cdb19162922b2a8672c4bc176590bc87c9d678770a033b3a855ef0e999fc821ddf10586ed218d07725d0e65b641029310838d9e10ac8a7a95d42075e47e95047ec73d15aaa80e5118fbea05d3aadd7a6c90008c712a42a0be5623d11c204501c41de5a50d4e1394436a51239daebc210a0634bb6934180bac7bd97ae2ad7fb13c926b46cbd8e425637e8178587296f0a0f224a84025c8ea25362c659672320762eab728a6f257a4231598ab3eed7ac142815fef81a061519a46df19e5f034efb1bccece841fabb5f98ecb5e555561521faf84a887a85b655e26b5292fd150bbf72be51bc9359b795c553b9314dce6b3b20780adee59bcacddeb6b47a15f3e32213d567b67f224bfa3daaf763eab8679771d373bdc786376852ad4286b119cba6e249d6952ec9e643b6687871954097f73c1458e5ece42ea90c1e1b2a7f9a4c98db9c40db6aeaa71650be6353bad6f0152b6c4ac0a34c01640c6bc812a134c7d13ef12c717f8597a3a31d8dbbb4ace9146d71248f5615e35d7598e0821de3120e218b75d3567e28acee3277a6d26f02dd918f2377f5fda931027b6a37761b8898b763856ea9044976ee96a8cddaa5537b24ad2ba553024489e6427e462955beaee90382c3df9962bb3e80b0a01ac007538a5b2db0bb0f4f0baa7c9a0edafff7d079a1d8f7cb73726316bc89e3956088e01e875187df0fe3095a7a32a3a8d92e7d09d74c0f36112a488c2d898b48d17a3a48714f9095607415bf291e9affe5095a7a6446b1f271378d552ad3d4ad1fa5f8adfe258298715c7b2557ac5064ac82a2f25670eeccf7d3b43cce68b5c524618798f3ddfc4b8cf50c1f231da91937db4a8686845d9c0187602e78184d6b580385fb02e0a8073e1a118d6ef6d31cc726d73e891867192ec11910c0b0b821380df4bf2da37ba146a9359d8803b71bbc2f8bb057c2275c3450ab6f3ace67468522447efe39437f935f6296de094dc51f231f1ac128417b65b5a909d2519a86e500a4ad0a9944bdc61a98023d32cbd2b420fe47d4c8282e7d2a7a12361e2c2376c2d51eae6d49a7bca8903b78416b3a02f7a708d6f68fe5d08ed60f34bbc13cef8eaf5d481a3b2ae9defa05d5ff7aa6541bb0247731194e99326ce4bf63820618452238ac89529d1ac2fc6d610ae173f988371e63425e83d6633c238654c625717553b39db80e608abfc4246b32c0738ee83a82c260e6486ba4b594a89f230faaf94c188dd1f39e1b791bd0d30e4f72961b1ef483ab59998aa409f805e6e0b528021d0210836c8a206f302a622d0f931ebd87f32b1ea887393ec1dcf9629986ca61a829c8b0337f201cb152377c1289159a7e41846ca71dea217dc1972c2030668632b38bbf3063048ddca95faf9837d3754eae50940b187001e731b8937b5985bb01917e5e89b1716a96a79ea0273bd3a8e619a7dd46664a00d4739cd8a64ea206911d0f1ce2412424a6ccb45825853936015750c2cd9430259e7432d95cbe64c4cd5b83597ff6a9a98f5043bf3aad3e8f88d44586e7ad1c22875196ccd87c233616d913496ca5fc0fa117bb01897c48dd71d2643d4674665d4fb944e6abb469ed8107f2fd83bc30628497c0dead0bdd094250357407fb85fa5128502480b3f0d73f43ec790d3f80d816e9a1ae69ba9e1fd2683bfe307779e8fdf838ed86431dca8c3c97e23ec79be8b4c8e34aa082089c9e08ffdb07f468b688aa4c5d9c6f7fe5a2456d0b860b44e41dbd1632fe469cbb3bfad460f541937456b9caeda119ab9eebd73b549b5a9a33dd02cf47e1d9d256de5f70daa25f30e11abbaeb7bf998aa029e5de1b355866ff03afeda81e73ec5c5ae1225ad6c4c3a13814938f292917d855ea9a1c68a27d96ede377eeb7942883501f02c8b2c372ca679ae0c926b01ab699765abdd8e6fd0ac564bbee9bd8184abd72e57cf8df2700bc5b063455815995d25e9a887a7b9c58f1ff4d76216ef6afc95fc70e7fd7ad9436762c0dab3d601691245c4efb06bdb91f093a2eefaa6128e1ec64758f05a748483dc2783cc6258e8d4e1115b43eb857568690a128416a8bc38c77e6ab0bc6796573f83cbe40615a57e9dd89e6afd95a0559537c354904a31afafd5ca4c07ecd5b23bd9139c4bba9254f404216728e1c99746caca9e9e4dc4d5b11d512ee50d4cd7f3f8c1c6d391c1d9880409e080f1db9708a02e2180b5dc8883910f12393fc6f66180008da0ae45563015976c366f89b194401a40ffcf682f59b898682ea1e74f64ffc668e6a844f7639f0f8caa4a86c21ec387fc9c0a72c93500b6044601a94c1c56c25083165c869af1571a623aa0926df590f31146df8aedebf8b359aadc2f823c08b6763d1ffeff009c1189ca616930937778895f7eebc3de64d8e72cdda3a95c79a035850a5128d655c14092b6684d3c520f857010321e93121891e165c3ea52b54039096253cfbea2cd4132c8b7e0916e093cbcea68522603679877eb9e277a5026839e8977e79bfc0af24fafc12d55dcb3264cac5d069fe3ff9024c0b415c2688e035f0f200624864c03142a1aaf8ee9d1a33753de2ced1fd08077fed0308fdc620a326c8e399e3624e2fcf97872732f9bf8596b722edca5805356b334ce7bbec7b244f449b478f90645ceb826c0bd24bb6cbc3bb61a529c39c739aebc517f0f66a0217f0e83d266a44d8451b574e6eb9e0fcdafb537af852a7a4a9e71657357c090c8e0ac43e85fd6245be2532866544e25a145b54519b90950fe9a37475b2f7d2b4dcba66c94fb49db84a00f748e12f8a57af0f978d45618ff58044b514638be4eececa8d5fe7011cfa0ce147f4ac1ab8d7dd982c1afa25c573964a4181eeb87b391951200f4d6014ed7e90b3539efd4ce582ca3350468b070576edea7015ee4ee68e4ad4323a1cabbb9717b1eb8c1796f4c502216eb724c84dd81b566aca202b6200c7db4da17f507b193da03f0c9f0402be558eda56e21e1e3e573c51edde9605a57cde9242a03cf884722cb652fc461e10d36a7a7aec785a8200be333560d52465a24cbc59dca356c44324861e307dc07e8f7d309cbf9efcf18eeff7540712ab61f8e716c64ce1749fff79dcc9730559d8a7283a451d3e419c3304c96c2fd1c7e81e9aa793de8b6d20653bbcdb1229513d0b0d08f40122e9bd1327ac60b0d4052f367c7bd2653f4d5da189e165269c8cd78451aa641833f73e8fac8121cccb8fb131ca291069fd59e78540517b33c23f471f4084094098408470b2f64bf08d0ba856bed8f6226f0a56cb44b62d43b7e4556c0e77dd482cd2efb4d911dc324a884556e9abf336163e31732f87df7c6cf0acd361ee7b518fa1527d36963e70f10a62dd7e3637c3450f7e63b4b9755e00c9109f2f02766ccab6ecab742440056394b71813a6207de7a271158ae31a4d29eb85c06390cc6d29d930ab8f958d9b88a206a3e197d6d896f5246be04e6c36de5f0d6d4d238f7cc6f46bee24730145f204698ee9fe76ff8e0ea7baa8b7d08797a64e4a285588dbac1a108f450771e8b6f8fb3c6886e51e8b58fde5f363d7408f68f6caebe4052b3eb3ffe2b4e10be0b036cbd28292450d5afb2b802c6604916f558d729045a760c69c284316b13247e2f2cd66edcd496456e4b11061e7186f295d5ab7a672a8783bb200f4cdd3e93ed2f720d765a2d4551b12c747df284c342244318a01f72b021c4ca806552696be63a3e9a8637d914e0eff412daa7628b84e4993b9d6d927e30b1a500dd70579471da6414c8f69a6e7d92ed65916e249ec575547494b213e37b44af889060a1a0a5f8ea00782e3f36d769d5757fd3a2493ef59b804d47ff397ded83aa90058e29fa6bcdeeac0d8285ef12df38a394eb398e6cffb9f9938c5294ed1bc63e45e50c87bbc84742930e011d340968a8e065003a0b57a662ff9caa8782346d7d4e256f7c50dc2b8e38ec50dd03be80c9445c96e5d683c3053a0c7bffc73c243574a42950a5a40d50f48534c3a2d037344d0e78009dd714eb2da1232883bdfe4936b6e460953086e645cfdee042a14eb1fa4e09630016cf084f0a9f2edfd11b91bc2bebc2c72786e84953302a60436657d173bacb367e49456bc8e823d384951ea656cc4455d4cec57f4f00848deb68a01f09291c925580343fac78ed8452a0b9840957a6b13d51b6fe7529cc3bb0fb1caee6b9616ff62fd6625e804c110be2d292188106c18b7b77849f1f9a1650dab2d7ecdf5f325b69f733da1aab9f9df2f54ecd298a1fda39fbb3f9037f0e2e33b9fed4946eecac19d1b403c578546084478084db7d12c9ef419aafcd8b1e70707f808e0dd6d75ac456e8e7a7de46e81e0f7e7705d4448c55cc2023602cc88cec78822a320ff4d3241ba5d15e7edc41313614d297a2f3970ac9d3e9d0b031e53eda43e98a28ab600c936496ff1083dfdd1aac62ff58f22569cd8041964a13a14f1f30444296b00a9da87ba38d964b8d69044ab3f7639ba46855cddf8dc7407054d2c85d3cfe72cede69885a125f77e3e764e5bf636433f821c3c44bbfc26d742921328b78f1962bb0fa88e19801f191b4b221112eff8d36e5b3730c419c7c7b52861f8a6567c710ac0dc1d2b03b5626855a7936438676a8d7b5bb40485a8330bee451a7ddecf84bafa38cd1832312956af39d99ac06b35ee0b017d4a4343dd9ef6ee17e67d81a23b891e4ad0e4b4962060a8558b1b3f4edbcd002b78c93f42dd87b4c7027eceabf2831113f30faba74c485041564584b57f1fa880a3709a1ba018ba079441ee7fc6af509bc513a17acaa0220eab29d48d0875b2e88a46982503e9fcc295b0578fbdeffa26d0a217100ca959a35f69e4bae2d6636f1bbadac638c44f69aac6d4d8f1cc05b271f9c0bcef07af8a019ca034708e8598d0499d1e5619a91040b61161b1cecc5cec7cbf642dec5f6f9431df35d24da82d61af876723bf9026aa00c20a22d825bd6cbdeb07ab46cfdddec3e5c8ad0513a11e652094f28fa50d8b8667aeb6f7a00c8991ae603e2922967d8a94a617d98c6df10a4b43d1a29976961173e2d3d76e699e1554c09e2e3735f967f64ff1622525ee61983a598e02e51bb98284105c53313600606b21fb54b256e50aeb10644a80b3c3c77df677bcd6d06c6924d93252c029eae9f368abdfa5279e5f8fb924fd89cdf9f16ff7394593df493dc6b067e18f404f171d7fd3905dbb5b186000105f6547ebd5c03fb3db6c0db4f59d2bac0c366e3713b8958b8b6d55fe6e254e3a71980dcf7d56efa7dec8f2ad792264e4a6eca886ab74692fd7de7ef007e8bbbabea80984be22097604b5f977b74c75bdc645556a1a44e129f90670c91c64c3f7f1a5cdd0c97027f180509ba83883ea7be1774135404bc15a277ed1741aa34396c95412e561b9636355c2223d5acf1928cf077721802305f9fc8800210e6dc4b8c27f64aae21f86c6a28441f893d46b6fedb37877334dae7cff985477f4127bad394b994c20ed23e8be75664c472fd77186ca323200f99568d983ffe6d08fa621cb694a6f5db95f4b236463efb5d9d66eae1364c6e2cc1001461dd196185d477e0389722ffdcf691864a4b085c3d423d01dc0e97b79b80969dc89a71d3a5b76289c42a1b6d6011a569d367547c515cdb6e08ca51c50b0fc65dd098a0cfe12606b84709c53abc73d1911b9a730331f13888509d0c57f372825c09b8d71f8d464dada39a36ca68fe0a14490ec8ed110b78e769a0c6217722c4523c921ecdd4251470316291f9bae509bd81ca84b13fd90612e53ebd4b6cea57d6ded79ac4085a2f2e4dc18343b13c917a70575c340dbcdc00229569aedc52d583eb6d19152a29981131f4df9a53ef437e6b00aaa0c0ac5a739b62f3a991e2ce90b229b7a6c19839068ceb307e5df499baa3d38015535916cd891bd4db466071611b79954f4bf802a6e21f1a3e954e29a08a0ecf6ffd1d9c09906a63501e6f8ca5fc07a2a867344e2bbaedc88601f4762a9a81c1e71bdae795abd46182ff64cf294bdeb3c4fb168ee8ac18e7ad925e0956c917c01ade5833d6774f00a78838805b75d5f3960d5ea3c9d9f936655585808290da92327f961b1bb333eddabf06f884db9af5af2a94beefba4ab91f05a972b2de2b0a42205af9fc44340a76014667148bc8778fcf2c5b9722a912d435be358fc3994a43644a17022571086181dbfc6137f57f0d89f3eea02cd5b03fdb2e8e2c3857af9d8439161991af3b9d7cc080a4b8dfecce0b9cec8c82b45a9141d99bf3d1802428d8d6405d47974eaaf0fca9ec121a169931d3bd66dd93f5460fe93d35c3e8a6e73af726d20b8c38699907f8a8b2a2f384b6519b5ff02d5f82bc8722db35098a403b542ec4c1d4ebc2bfbcace41aa38352806214ffd0e48c4afcb5efd4402f1e52ca6b7c54082a59019c9785dcde0f741c61410da1b76ba7874342e38b079a8db426f727eb38b773e36d0a08ade8c714e72107d939b6dd8fb26489092df26286b1a7f449bf0423b816d041170697c1cdb8019bf4d327a8e416788904cc0f04c744e464a70575e82554d86e29af7b6de946804b521537dcf7542af999124bad195ce65ef4b30d94f89a0b727f4369713cee37ff76161b46dbc9bedb37ef5dc4e6eb0785f5d0abb81dacf7c604f2b9d41fa711526cfa0c431e22f65d12e15c715abe60a04b72eb342f3ccb9e3b41bf179debfff655673cbb288de5e24b73eeed27e93287aedc2ed88010d1220dfee1947eb8ea23f188e167d7df7fc4dc1af4b938136e74a9d68f7e8cf6c4742ca8491eb38a12a94edf7d26f8756d2bf9c5e4e380eb3c1cd16e2531a372a30ff6071b196ba1fa5444e6f8e58a548eb08373523c35ec4ad70d4f0aeceb92da89870f38c3e57e93e0d6726f65194c83235fc75948c365a2f641abb11496438b1265789009903193fce96c7df5bcd8fedeb9295b0db627a3defbcaccbe39c4f319d06a9e2dcff0453d5b648d1cb8e09ec169b2c0ed4d447fe1cea041b9636d18fde028e9c00e9002d4c3819933bc11f017dd2342a3f53633b3086c9ca4e25485ca4103132d3cde9be89f135695471a87e68e05afa5e51146f3740f05209f60f17cc8f6f9d2f200f06f1e02e5f06abae5ddc40032b7462345231ae74dce05ffa32dd06802e3ada7a18c0d25ab1f2102340b4a627b87138ac7c8e57cab330940547c22f16a7f5976c4e26ce9fe71b7d5432139bdcd0f2da08e49899ae0df56a39552a59759dcbec84f04175d4e502fed9a14cb50b383f536c41c282f1f7e2d822278118ad0dcc0b6b04510c2f10baa8ed0946e3a0c26bda987806b3d98367f894f5aa431d7f501c2955620d321cb115d9ef78dca7a888af4f096b4d2f69960a984336cab21bcd8cf7677ded5a92c3a6860ef786e5d0b4240d1d274dd477a68fa1fcf851934133d21d8324e2bd0dff6b8db23b5964a2dd3b7b21195bd6ad76537e9bd9b738e13cc0c88c0fdca9b94fa67369180b11534a28f68e08fd5cb0b87fe3ee853f42699c689e736436606feacb75f37a3e38c37794e6acfcdb8c9a0c7c2b61bdaa75c85824aae51570884f3dea7cd47b5ba478266325da65f97a59ab2ecb65f735ab87d1504d599771e358abe1b024e66d1419f95335dbe40f4d0f095d25e69fefe4c6c9082cb39a13e2e0af63736b8d8ea38471e391cb0e6af2962d473667d46cb4bc753e84c0712a732af63ea5e33450c7d1dccb696fa7df231be0235aeeafc8aff3fe1a839bcede5f820d4188c3b5621ebaa44083453d85fcf2a85cb2be6179f18e940930dd04dd2bd2e5deaf9d67fe408b9d404f2149fb92398594fa522fa74efff99a5c82080260f01cd8e3692e013b8a0e049416cb1869dba409b4dca8393514d1a36ec8cfd8752a20d6d5d0da0e3d2ef61290833e64300d6f0f19c56baa8f12b2a41ec0834288c8292eecf52db1e80fa297fb63a8671986f1dbb80015fa8808cfe0d7ebec4410033f55898784289f1708f894f808f476ba23f06048e4deb0e905a0e39a03bfb5fa591b4dab26b470e9666816190386d3155ce5a4fb81d998e27dbaaceb896093be2504e4807016034d0b9cd03b3b24f7c5f726d45f410bcda6be09d8982584f9e2132d2f576a9633f312afa56a8576c3df35b998c86a1bb570a65bba864908de0ce3bcd92a9ec598a31b69b6a7cf5dded7f5bbd57729571f2452cc0dfbf0a61bfddb445f1ddbe22934585471e6e1f15413f4514e3eedbf07ac7fda1c6ef74f9a8864697ae1c851a65763fee880e5d7ff4b9f77a9afdda80036c4e8feef0e1b14370f825509bb34a144c7013788983193914f517ad0d4fb51f4a60cc830285d0371ddc6c339d842035618d0ff4277f750f3d0a5d6b9a2d122b6ac2f394db02f310f873e6c91799eb2e6eecd66c40ece11181773dc9b8bc618b82966c637e9ee717ee195403e73d12112c689ac840002ae7c8320e09158c06d10d6b9bdc428156748e8bb6f53bbb1efd1fdf852aeec55d256786221fa1946977e9de7f847c4c2d72faa67e24c00e5fe46ba8963c0d34940e439e811f8a2e236e80676e6461e441ee458f0076458c2bf279b289969bb7370086b43763c08c507c5902d05f07ff26b6584cae48d540feaabdb70ac762a55968c468144cf6a1834c51f8df20c400eedf2cc45f4a6a2b791a47739a15538398408ef5ee5a46f94e0fb305057fc91e9f232afe7889fedc9358da3f7cf41e71dcd5359c57cd538b809c63c302c0acc01eb83d12d9afc5004193ca0c526a9a3737bf4206fb568527a2b5561099cb08a68164db02c8b1eeb3456413a945256c553872cbd972c42d04e4a8bbb455a6d163b801139e8e1a9a47da7a636b03f1cf120448101eb7cc871cb77eb12527cdb7f2e58a0b36b5296c734b0f3fd2d5ed7114bb913ce0fb8c01396837bc1b367a3b7f68dafe56d4ee2058bbeaef98abc3b79b8fa967e9498c865f92a2b1942d7051c3dc0fd44394167ad7e1f62bd53ab68bdbb114f7f9ea09744c2bfbb3e7582e7c884777a628b7e58834c85f4fc9bea84400e60358d273a2de9f75590afa4c2c5f2e0c522471355890352be3f2a8624f9b74c8427f11e352ab44bae69a62919af46dcc758a9a85bb5514116bebf3212813abbbb4a0186a564f2d90237667656144ff50d4913d2991d1dbf996b2acb59ea39dbfc5af20bec5949989f997f0c0b6b066d5e3a6308e8bf4de76c69cab8891a6bb9b303a391ea892ca98aef349161e369f685ec7a7de8e4dc7ddde03881299d5f0dfcccda358e93a06351c2910e8dc8e1801d871877b48a090d8fed3d90354c6249f11a9684f4e7d701b4510af6345857c890e443fa1eeb5e7e1b94cc33a82b69b26108a9521b4e0c55afd63c4fbdd342ebacf372cd50d2cc79bfe90e37b9d90eb16eb239869270d408f65a1ac2a057c40b04e44d0e06cc047bbb72d1f02f3ca124349de4f484408f083f9ec060cdd299c360a6575872ea39f4673d653d9d54750d1c4cd02f43cd32ffc2ee4104a525902cafbb8e5678f548915d9b3d6616cd3139484150f96c86090deb73cdb012411b7332f561c301c25d99528ee007c44865031fd3d22a9aae19137a6d244b25ba1b4dd0e569d0ddff3444753a1d7d9e430d55699fb6b61e57b8ad90296f7ec27550bec75b0ba4bb3938f86ff3cc86b8ae12b3d4dce78144248bef2579153440810e953b98f82e8cfdcaaab1f77b2f20473b2e121707be28080000d138963c0fbe26d7a1ed71046f20c2036b898c412e433165c8174dabfa9a6e186eb3dfd8a80a3f26381908df51dceb1152a88cdd6c7b3adf49f0b00ca65a2eb39074e35152d2b0dae7f8deaea89a10dc8954c8dd38cf84babda5fd57e739c08d49610c26ec6d7d39bb439a805ff4e63378a3aecfaba39b7d0e48d18687c2bb0d987c6a6c6b276544688f585862d1730a2d8158a6c266044d371dbb3325ee6341f976ff22e810733b2b5e7a4b213072cefa2df408fbac38da4aa39660de6808428c09b2425f69f274070d3308c5b75779a6bef3a797afb957e51299bc6503566d8a8c840a2b3248d65ef2803c1de2d3f35f519cd9f318a8b0a8c586c66d03413bd8fb235e7a8d5f67713bba924085315bbf29194f7bfd22ea05a313ef12952993e57c694bf709b529324500d5923c8b3f24799acaebf4601bb01268f988673bfb41cccc2c6d88bd234e153d32d80b296504ea81342a782221229ff7b72a3a36890994f7d7c7be558d863856f30a02fc90638c37468c46f69d17d41bcadad3e6f62a6b1b4952de5405f55bad90759338ac0e391bad7912efc2fad0e0829d37af7f0d3580e15afbdcf7f52b10be7e34fa48cd52849dc77cc87147d7c56c16e21e1fa00d88c948efd7f77e1178859d19408e45f7482856a9b861385dee5e3891358fd61bc107111c08d84b5c3c4b4d93b30a266fffbe54dec71380d1ac1e7d67e96a43ebc481e738a3a8945188abf6d3dbaa3df877061d4bfa7885c3db4225c6f2c51bbabc12a64188634f48a4c48c92d107e1ef8e53a3e01793187412e9a3b93ebea1da2bbf1423b05e6921130d67976970d07d0715122de4fd4bd27eba39037c23913203b3d7e9f91d4ea58209bec350623ba2aeb89c59aa96fb3ed7c00b288a9215f0d194585c46e4e5f942d0ecfaee1f0d399e831db6615282eebfcd595ed0e15aff6a22d8f4d83b076901e10576c9151fe7abe980c5bd07815644e7eaea3dffdedd2833d04ee22381f67b799cd9e3767428d4cb3ea232ebf3927a4c1ffd1ee7be33cd385c0d76b9120e6cc7816df1ac1b4fded1660098a68917b25ef7d531ceda538a25e0777447295b1fd30d8e022b821bec67db3864e2a80574d6e5438cb38a8e11e99dfbf5af2bf1fe6d66b0a229dfa3a723056228d4db8a32f0b18b3cb23e2420c28109a25e915417616b66cc075944006613cf2912d368670c149546971d283c25ed873d0c2a2811d15567849eba12999f000de648aa8d6ae9d2cbb72287352ca9b72e4895211b7811accd55b75608b637939c84ed35502584376774d1a11681166ba1ffe780d36bc6db7720b08e005f6a7bbc5e6cda9468a6861d478107045fae7c8ab15734692cb380e38cf7fffed57b35f46a14939d3a95aa5ef0a8e837975e12042a9994397d280e37c8335f4137a5c618933ba5cf1be4f756d28f36fc1e575781d8d38a0a0060b2ca51e21ec9f3760c58efa534e19eb68e10a9d5265f2cc9ff27e7bbc7c3f56e6656047d4e4ec4df85bf0895d10188b8990f1f1025d348e7cd0bf72cda8eef6628606c3ac186a94832eb338678b596331098e9bb8b14173d927549e4fead85bbab8e120214091476eef9ece8cfcf252a4342ae2e30de3e7ee2e5872fbe0bbb6169c37a3633192ea97f878cff1a2814fc1e76be3bdb1f78e674bdaf6354180ab8e9ccdfd35c1692d87aa1ca613b257f5a4abbc26e8a0bb28f777062ef4eeaeb69bba5328de8f3773ae4c2545676a5e3f21af25ca175c3b45fbcebf7d02fd23b2f218ff6238e46f277a5d3af9b02ff7e7c86c03e011054a5e67c9daa044746e30fe4a5fd8c356702d33964508f9604fb229bef1093612f5e670b855a03da5823bc5211928b800e72f659e48136575c269c4d1698cb88088ddcba595f8055caf193d8069c7a9c7089928d2e9f3fc974b60ecb152c55be660b8deb5d58450af52298e388e6f876f210c6c5b389aa3618a761c108443821aab8a4a5bb3ac095bce394e8c626d89adba6298ca5f61e1206d9767c48e7cc79c3d7e3f5f8eeefbd7490129ab8eb77eaede179465bc1ecc5dd6a6ca4ed6859f4714c85926e12e480b3032c55987855bbf9c01450c4457e0831c6c3d061acf039bdaab0d4a75b3b019737b1a9b49b890916f98a23c3b1934a7c2a00d7c779a1cf20444235b4df8090f218a0007e8bb85dcc1c82a164773db295b90901f8a1e04f1328463a4c0faf3baa456afe61b80a17280e83e7ce41acbe6b1107c93c7436b99e53a8cef1e31beb57b94b37f34256a23e4c38aacc9a392fd3b5c7f722545dcaff425584a6a072953b5411d77cb48317a1755e5c8852cce69abea9211fff0e748844b24215c73e65f6bddf872f33904b9c1b094bad477fe5599f1ff264ac8bf821b8244c6acf249ae7fffff9a79f79fd6d6feb3f2ef94fce838704e20f792f772d50b5b1587c668fd417b871e7957486f2a106c48830df546c80cd19fdd4f2077cb7d8a50f6d06659b79428287ed5b7a7ac6f1eefbd6ec40c27714588cda56b03ad561fd985c79cf25ce75fb2e2561bf624588160580d8b03c88027a000ef081b79e162f29a9093e7a3f2be55c08db007e9e705c69282c7f38090b9ba631b8b215fab5c82b87ad53060fee2724bf75e9bacfe381882233e68d5f79cdff2b99e533f02aada8f61dba5d59b1131f1c732c5600ea364c4df9446d9033130de4e21b434af70adf790d024cf48bec75541f9dcdd3e0c54f94df61e6a13a2db7382d6b05d364c69490862b793d79bfee3937914f147f0b6ce4d418948a23a12d392c2e417752b1b9231cbacc49ba88ccb01eed96a18abc623fad9fcd851f63c4d7e10d870e4e03ebe9f3185883d4e3b7bac7fee582771a1d5e8f36590f42e663f04951f3d937347aadef952ff349f18bfc40da459534bdb0231d9d8a1abb67194572786c062c02cf316a7716df4be8f7343f349aa1e123b502fbfbe747ec0b3d92f459e5451d52f28485db3744fadbfa2d792ef00e79337dc713ef66ea05a5dbb8419b9fa7fb70dd95766e5dbb6740cede5a9380f9acb43d28b4a29b840519e830a8aecf0e3357bcc68f1f1beea6f178a82f31735771c0f180885869f5f801f0fd7a270c5fd96827d8f47a5103cb171ee47320941d863242c74393f3aed0e7f7715749a5222bcf2e6f76a2cc4a5b7837db54c9c5d2e4e61d3a55c2f205c01e5ac800da9ded17a847cdef0092e2834603905c3a39d11d77aea8069502fc9840faa37856839945a805538cd50d59dc6039cc39f6d03fef6b3d598a522726524ed6ff578723234eddf30720c85e0ac997dcb14accf993e985c82bf96170367e8eb3a299575fbe48c3337f8a0a14c1569abf587616c2bdd4ce7221786ca0b9ef6d049f38f8bb4faccfe6f9faa6896b05f9eedf876f1d63786f1ac27385eec2fbc012fb7c35f8dc0cf5b525c43592b572cff84d5f1603b2e9518c10eb4946f307511a5d1a14ab2d4fec71e5596d14f24fda97161ae711ca1ad8db8ccb43913f0e6c83f14e2107316058d3288a34a9d5668bb94b94fe65860ae87803d325d68b252b19b4584a137b466d3c5df37fac34b21c3ffffdf8d6f945f81b9fda56af3d4deca431379d66001234e58821fbd8548071cde87a2510360c9a1974543690c56ac73f912b89d0be1c3a02b5251732d48ad7caf2a3191d7ff7794b9fe797f8ae2bc5c18facc8f8ec078937c8d56b7ff27860698a174748c3586aabf91fa475d610a502781623697643712d3ec2a0de03b06c808dc3c7079aa1de1437bd51a5aa77055046e51c46404acb17421818ad793d17b99e6e665d0cb631c2afb169295c3059e7097ee7b593c5639b312c8ea6c8f94aad6b9cd385653b7ecae217dd301616c3ee8faacc1ff765f561faaa7b0fd31f5a6d94b6978e271f8026bed1420f755e2439fe90bbba2f278a5ce53ca3c139418216f03c39be3d7b0690c872dfe12a99f38437480cf753cffbd1c16351a7c9dd8f41d344632cd737170637608f195d76221350fc2c9a96d2f6872886f83072407b49e117746f00a906769d654ed7e65bdd659639fd3bee12a21cecef18835f781f0258e49cf50969f639f1b9db55015db3fe26276b647224bbfea8f2d46a5d638853894bceab544c057a4747dc407611e9a7285ac00d5abfb2bdaf05413def9bdee85c3fda0ddf24e8170d9195b9c4abc6fac8e12be23b3bb310b12c9d425c5af5e4773d106eb4c2560c6662f87e80cfd7fb2ecf762db719084256cd7971088e46860c94aeda11b9a8dbb779b683a3dbb86890ff71dc047ba201df054da357631ac9ba495eeb2dbfa46a07b72df8ce44701ce7b725d259cbd7abd99bc81e9c6e7d3669ccba3516459fe4fb7e7e37a8f41178ba38428299b1ea6966268460734ae2ade5581f26e9f622082951916c6b8f4755d9c2b3a0cd45011a0005b64eadab4ffdbce86f5e3e62c9f8b05feddf7ceef88d1cc06b1c1da7e8b0103afab42957a8e522c2e742e71b9f8746d49c1ccc0038d681976b1f754f2534886b48d348ddb74d00f2a3c8f7426df456bfbda905608f6a7c885b096da2ee26f0e73ceded478e54b493cacedf471e5ab8a7d0c449ccc962f00bbb78050569339f2132a5a3691c32e2a0c617aa0117c4514207cd34623877c830c73defdebaceebd4dbef10393973caf973c36333240564ca74c669a1bfb5309fa5f97916d253be9bd9930c667be6c8678a073fd948e5856ca0b0e08c059bfb0c51c9814efd430835084ca03db95f9070dd6dba0e1dbaa50df5daa8d766decd5eafd5b4cc36d7c1acd0e6601ddfc4bb403f0fffc310bcc287191af784607dc0e95d9fb7f57e897943959db814f3e1e5bb09076a1e62e48e93bc17f97363842d6e962176fcc8eca5bae97b281571c598cb7aeca9b760c2465e89ec53f3f579e8e2cb58cad1e8c36a95c4b138857b75a8bd2e9ec339934ca2945db369e9e4e36297c4c7cc5ee98e96b84092b55ad37a369cc7663fa356ae6c684db6948f0aeb013618733c29bb182d63bf6bd9200e6b90da5aeb24a2f77e09698a564c45ba40e284da6731d855af07ca5e0f80af87b869470c094b54c3266955532bcb7e8e935058e214826919a0129d7ce7756f7314a040e54af70430f8708b0c72695ddd0e18ff42f2e059c08e88db53fe5c493e66d14d2509314fc963b35904b6fdad70f77c94f0cf347a2cbbeeca9d8308883857593c9711f705565fd76da322908f84387173fb4ffdc0d84bccfd1fc1ffa3344d037d8db49089b4866bf55e6d954c834d1e833ea2e4f171c97f1da5a9ebb3df2dfd495a62ae3efa0ff2e6a72f3fcb7018d61740a3dc4f4581da8d29413e0cdc0f48527ae47517903a9d4416c35162e54b94115f72f9ca36cbf1015bc6c09310fee5c6746e33936c5b4635f4cde341df0810cb338942f480ebb3dd489d74b0c73decbd871dacd8bfba93a9d9bdd029a9633a06316c05ee81c8a0e5188f702dcc32cc209962a0f54fd817ea26a09cb666409adf0a2b2078b57680bb42ebd5c2f41d7159c5f1fca7712008a4aee321801d6ef846a79ccaa84745fcba7a3b5e45391df09d9daf4e107c42a9ef5c442196951ceef80930143f961b43d2c10dc16339d161f15c81a0e76fb106cf1d07ed8b88ce0ac78db44f247f8b5985e2b64d6fc56446d1492392f8c469d88b08880dd50c540bb212f2c9fb6dbd118118e19ac04a6126512eb9bfbd17311013521ba82cc82622f744fbebf48ec53df0d16b28b8fe953e453bd5bfc5ac377efb8738a3cf45bf16487d00b4cba589989d14db4b6381b60ca0bfa50d0b5b30dfeb1711c8a784308b3a3556f2786b37e8027449595c27a96296522218316dcce99b674ead6a318b562d7c0f31e6b4016ae0151a69b049f63bf17ce01c1869be9724faba77bc913c0843ff50023cbd4b60bcba033c275f4c9182c80c3ff44e9e02285c7ce45f7800a343e02f53c903be9a90d779e28fa39703e7268f49473b703a450fbbb526cf4f902f5ccb26d4ca00d7f2ca581abcb901f42f762f585a7c1d5c649587ba9f8f9954029437f6986fdc31f0ec6f00acb14b32757986f889162b557a3f0db541bf88daf9b8f0bee1d9874d36e8123b04a8cbae3baed2841ef971b9efd04af66191181314cd8702a7912060d804362a9e9409c22286537851ec143e5e59739d34a9554480108099a78df06c025e27f2454b011d12292f54b5f757783e0192ef5e4d455f9240a866092f30fd53d48d52a5888237b74664c932d4dd052230727ee8b30da34c4d7bda0e3538400bcbc197b7cc9267a6663c933713780c64b22996132c829a4d8fd48eb3498a64563c420b02c010729adf87f68333d6454502d7296eb942fae649b4113a3d61f4c8f671348e3f0a4d7140ab1a28b6e313e170ffecd0074266fc22bfdb30d8174ece8a0e0d01c2699f140ad300026929482565811726bc48c9794c458bef0ba71acf1cd51c1e2ce98702098793babe7002a6d6068a3dd5c7b0022d769181759a8f8d80df582c9396205e5d1f2c40662b22f4aa047b4295d6654ef21360e907bc6a3c7f1b89b125bc648855d2416094b004eada91e22602c376c1be8c2714295054b64fbdb26c632704048cfb5c889a018322240b44235025c0200065acd5c5252ef3dc46c9d10bf4911ca7774cb563ca4b13a793f7ca10c043936a2cfb91da11594733dc942ca3f11942a267e10f739d756d605a76a3763cf76d3da25911a52af7de7c1edb6aefd642c673f1bf8db02400ddacee28ae4fa1b30743fac1f7d23ef7c9407334f9f0df8072b8fe58f81d511287759020083149ad0dbc2e5e7c5e24d82263ac74fcbe4f1115f6e4c144e55821ed324cec1235822fc0e5b42ece6d70cd8ea02150519b7cb4df59af6d8a3bbbe9020d62a6a4a4cb2cc5adcee08f97ab99541f0a98ccd447bcef20287c049ec78e10f83286d8de31b96ae5bbcc2f05b0b73c99a7864c81edbacf9cba84f016e86b911e1f4ac90964a987b35d9f456c28e0c5312d3ccba242022aa979e29f29b8abbf275b3d7f16c2e1a78e23a49bcfa5d5c73b484bddf3f81da0b93fde49423df5aa70c949be067a970eab31a987a84c795e4e946bb134e364e726ef8c9e0b955a798d283b7bac5e80f8293f388c4c96dc984985161ce7414496d4e17284f366becad7a439c229c889a5deef795f80aabb72d6329885976bca08549979738f62a5c7c7c6a4718f8971cc0db1cd5ed97dbdaaf39b01085a70df8dc7104bb7fc0ee815a00e9261d2bc8f7fe46328a47a144b4a8361c850c49fdd18955bcf766dbacc8293e406fdec64cb505439b079f52d3b5d13393efabc23ccf33a12f32b2a689b498cdb425077f7a9cd04067077f686ef3d38dd346d32c5276695926a4809e2c7e9dad06116b9b655bc3a685f93848a240d3dde8c8be722005eba5cc95dbbc355e28dd2569f22888b6b238fd49bf5b4df5ba72dd4df51894cc39d40c3ad209c07cddd202f29edc214fff032df8e4951394e039cc655259072563dc82afe3fcd90eca372ca3ae9be60b1b0552d568f7ddde71db1a65bc9b288e9f9c788a68c454c30aaa995fe77d0fc6e94abce79fa5c6e5660ce05bbfe9804d7289939d50b8c82a0fb27975d817a8e9d460ae2fdce1134a08a411f843555149ce7f5e9d066ce0c893e30bcf225befd9d62a12c0a57449b648ca2d9fd022a2913341bc42c1185578137c87ddfce73c90ce2a4df3a4577dcae58ac8429e2f3febf7f0ebdcf0969f58a9863a8f1c5c90526212f6e356d719d4eae728329c9c939cf9ebd0f5050419d0e5db849146e5e4de362b3f61c9b142e3bfac98f3c7928bb4a5b7e3093cbdfb1880a82cf39c355681509d1be24604ebedab0b09978b72dbdb571922d80f4c45cec1324be6731e553072a8e990a125768bfba8e6750ad5262d67cfcce0824cd9d74b2ed298cf4bbbced6ee3cb8407170ec834a4d529141034fbfbafcf7f2e8eaf447f8d116696806805aa123a51110b5285992d3b54ad67d2dea2f940b752b512127d0a6b0423e98b7359716809bb22774b74e2d4fd7b19878f57ca5dbf2ce5938a2356bd36d8a0d5fbf93328f358f9f05d84d910a806d0a2419589e25a2595df9bea5a4ea9cf95a237f56834fd4b132eb7b4db90008c1ff2cf80b9232c1bfcd7b82d5c26c95927fa260992d29f30c38a153368f172c57b5142aa5398c1142a62754801c6f2083a41f9f868fb2905b0a25d02e1de6539c1fea63f16bc755681f9cae1792f34cbb2c859fe26135d2eedb536c00332287be11f8a8be3ad9e69973ea43c042a499fa85b309032930e4d35d7e8de09e1f959ffd65665639582b1deb068220e75bf07ff8fe2be18845d28ced3f57e640c73d664fde03ebe0fef3280d38bb2015ac1f1281551e01651666fb735fb60e6b1c00fd0279290bdf7de724b295392324e0a040b7c0a4db4c8c207d80c920c1ac096f44faf6506c6a1063e9d9ceaf257ccbb8d15d18ac869668c07774edbe6e2e434ddf2ed3dc00a65fb15c4408b32794d0020812b93ec2b2651ba665c219193ba665cb5de6b3039ea1a272ba4aea9bf42c205a771eb6108c3b3335b1ebb84e3cd2de12a0cc311e7d02bc8d3a2d375828aea9f1658c3c6efc53f94a452936c72924ed309db103be1e9149b3e2049929b58eda940064732cbe90f5352ccdd69657a4113d30ba0e4c8810e64bf21082311c0f09733b36566c41c3b6c704ee8b1d372ce2965df3cffce990e3f494e7d693ffb09f5f465ef59e66ed20122229dc67b22b37bfbf98516e78f1d4107dc48a40ef99a46489afe13b49ee811e4fe7480bcefde2577965e0de790d4d1ffaa23f0083be079b3acf6e4f9e34e1ad266bfc7fb8fb39b4b3bfa3c749afb59e63dc0b3d54002ea50f6d5505c01812711122d0e652ca84c9f63a55c59aec2977b5918b7b45aa97f9528c6267e1502641760742815e84e4d5e4e4f699126753d334c2db8b8e205acc64b1701136c861b2a80d5f81614187fcb7335c025db37d8027e1783f8557f6fb8d3f2a9b027f52ddfa37afc426029cd5a6be79c2995ab08ce5c5ef5a9503a8dab449aa6dd6fa3fdb9d5895c6190e9ccb4e5ed8f131206b39e20d35a45a6f589948a83b1769169ad92bd896687923a5c4570cf921dd5a7543d4b76601e7fcbfbe8bc2aecc118e3c7e10c36de25f471c184efb14a44d4352df9a6cbd46f0bfff4a4969e9e96877997b0c7e5f17f1ff32326f285d263c21f4943623ef5a36cb2112e791961d6bf7ccbbb7ceb573ffe2ac4710d499a494ee33205c7843d4b765a9ffa542a15fea47e62be150679554c389bba00f45b9ffaef054dadd410d5ab54ef63167deb53e11cf258d7749156b864feea533fce2122ab3015ce23a7616148ea5535c025562f3d09e055f8b3a4fe0c4b260c08b464f51ced1eb4027b8f5b21e080bd70a456321da10bda549dea0b5889c0ea025623a7a1df026230a9327501685582aa4d593e1ea081fdc598bffa7ac73cd69528cbe880c78e01b1bf3d9de1e6b0660fa42590fe6d3610fbdd809b7dcddada6d36d84db6fba99252539393131454c7328d922955d222fda1f8a984ad98f0cc13e64ef41d8ace49df4ab39e584e2d52cab292e9d3267fd58bb1b44829a5016da237c8945ee91ab48535a81594a91c71b704ae44d309aa1675584590dffff57f3a40489986d6292d56a22f09cf1fbda9c973402bc99501fd9576fdd322fd4ad43ff46b11fd6a44bf1ed17e16d4d6af04e772fce93282e9f7bb83b4459e1d55fecec0aea4d4d4e4e40435832e0cd3bb873cf3cbbe3222f902250d125963e325bfe4b17bc8fe148c913afc3370056a92c6278ce9888b1a5c044ce28a09b777bbc82ae1e48c942101fe50068c6f410a96de084678944c2d7cf6f6f819d1b58307ce093a96d68bbd057953dfabbb3bad590e30049e2f5b5585ae19efcccfcff48baefe1d3cfa714ee8d7a99ee5eeac95c02e22dda2dff22228a536d3feeb6e6bb0007f2b344c863c0f3002ec228267543b3d4012783e0d5b66e01985c93c42e280bca94f57fef29e8a58fec90a8dc2380c597dcb8fb368c5846f96af0abdc7deb7422a85bb7007bf17f6f463d5ef78ddb7acc29e7ed5730d7e9d835f17beff4e4be8a3fa96efee7dbc5f7d2b78bffa1def57df853baa6fe1ba16785a9cd23d4e735dd8d322dd8e5a9c462aea457140d2504aa9767d75c574d2227d19a40e39857e0476e41439250cadb51eb4e0d00996cf4977f95434e79cf34fe8976bbe0a3a3b5179e239bf95e711f35d3638b3c97958113194e59210d44d964b4358c9d3c85fdeccdb12946b8828d97da80843714fc3b1dffecdb137cc620ed1afff27033c8d5c3ba48e79c4c4952bd8de2ad6a21bad8c802ba1fb4542601cf8d51dee53df7d8ff79981c7552c05ae6273a84e23478015312817c57f5fc524d71d1699412df6e79e696bd5c0ec09e74f0e1d968828caab58d7c82521cec8724908a23c4e23b92484519e46fdc2589ac67fca8f914c3154d77cb78b22fb6a684584a1eebd41784691daa1d51e033a7b39332d1abdd1115212a533dbcc4e3be7ccec0c3252d26277b7084e8ce0c924867348c1fdd3c88913a52bf8f934cb9056317f6b544323232dca55ec6bc202dce12884897c3f8bac031e279192ec37042106d87f12f94b06afdfcc210f77f7ec76671aedee6e6abfc1701e65fe263c814719254300a2a03fc66073fd96b01e9f0d716047fe5c772f80416268d1bfc60af05303b4a2ec3f8f5af65cc5a40c8500099e1656b195d01432424936c6024582131ea711d4cb1947487209ee2bb844d0bfb8f77f01c451184b8b2df966cb3e8dbc56098326bf318569e98895ec3f69ffb8408b42417368154392dde808296915f317865ac53054f6552cfb632805a8008f18ca85558e349a768d8bfe76dfbe0f6d0b7d6ef8e964f7be0dbfaa855fa5d95f8d5e9cb6d63e4e6bb733b7a1c8aac1fbcbbf16fd64fa9cbfa6d3ed23d6d29aa41bb64ea7860a62283340d2d0d7ee0a23e5f430e2344e277042454da716eb7b1fe99a7122bd007084e583d1ef1fa02e126b233d945924fa33298d4ce94f25a74c69a7216fe653a7ae914b468448689981c7e934915a4c721adad3e3affd2836edf1df7eb469217f75614f3ff7f45d3bc8e0828d1614150505e5e4d4d4a4a49434ce713ab9d3160bb0938084fdfb619879fc2c9bd4bb2e71bf87a4a17f2fc6adef700fa923083c4ea77903399de8bc92e9dc41a63d2453575199cfb19ae0a9650e8c59e5214df80b6139554794ba5e210ccdc7adf932f367e68bf373ccb771d5910a898a3ca78a0a0f0f9004cbc7e9e9feaaa316e7a83acaaf3a927ee97c55521449a9c07348132308e149b316ba26cba887309494fd7f6497de5617b9256fe8fb0192e04929084160e9e58c6084fd2fbd60d0504608cfc7697f6ec5845b2a7defb9d7be57b857ab5e814080941c39f91a907d2dab564b8bd8af0fcab5c306e704157476787eb4acb0cb03e9cf5ea2405f85e32a3086cef45b2ee00840d8efa7ba70c45ba889ae1c2dde7047e87a2b52c79d2a8393337636962fede75ff9a2ff34a15aac39e4cd06f62cd9e15e0b7bb4e7be67fbaea77b990a7bb8f7ba94ea7bfc7db8a7df21ebb27a3c2f7c9c0abfcc47eabdf7d93e15f62cd949bdf7d269bc57bdcaf33cefbd70069d4f85ae1f72a4438e0e5017f67034ccc0853e419c26fce1349e6cf27e7e24d4902e7c8ee39e0b67f099fede77e1f442b10b30bf7b225d58348b8686d0d70122c23d7d22ddb702f7f47d703ebaf0cbba6d3a398dd3fc70536b1ee03ed2422dce23ee2bd23c1afbc748aef5e73ca36bc639a1269619d53537a45988bbee21dadc13ce75036eb53845e802d31f31e733b401c2f3a54b49c3961878e673d0ee28760cf1cfc72db2eacb07d410880c29a5d4d2ac019ab3ae45e936df16abcb51ae2a2e870a3003646e7cfdbe3e3dea1a99af4f9d740d52d7d8285dd309f96b84af4f89fc257ebdad1a3fb644a0f1a84ba992ae19dbe9def7a87ecda318d0eb467d6aa45ff2a83e3d82bb462e010195eb53a2ae29ea5785d5a75afd86f257f815f4d77ffde03f49697d1a73c1f1f3fdeded4f0f85eb6037b3f42c4e6f0ee8ba2ee409729a6a230c6a791408a8a57fa4e701299ee7913732ffd858e2a49cf383a1e6175a196786e3a7e3bfca337f27481df2c12cabc8425e7c166080e17e2bac66baae9b61c048f10c0c34c750e71d697e6126b33cb3fae5e505c6fbe474fa1cf0a64d3bd4714c5baa979bbdbcd81a302ff5857aaba77ca134ec9901e62148f30c2da4fbdec03d08049ee0108e2d70adb5b66e78cbf8cd97698e6aa37a8c6dcde9b5c64b8a186c2688d2a3c597145274a40e1c2e78d888dfa27c29e1ce3cb6c0f3a584677e29619927cca67939f2fd65abacccb974d5dd3dfff9f21f204320d557a94eca1bac12a7d31655ab0ea7569d9437de4de7227570acad84215a9637b746d6b299b3d1494f860e9210023ce5c77839f265b5214b1842a5ac91325d9750c39d383a191bf02ca18696f7036bc39e19600050e23e143cb7a6b4efb5564a29b59586402c6da759e64fb3ec713c03b52cfb201b580d471932edb35a1d8857ed76d266fa1cd7753259b0ec3c14c6ef844f27fb1232089952af3505aa68705db5802e9d8bb7809959903ae4f768b1ea481d8d83c2cc362dd6cfab3c7e2b4c58e716d6cb0b4caa468d1aad4ecadfb296619b636c8490d3993e07d34970ac99fe0b57a393e0e899a69186cc8d89a3bba66bc20f05cf378319844ecace25485f9aa3b6761ec12ca9ac29f9c24ca6cf85e0e5cc9052a7216e517a08dd589f560004000451ac21c8afb252b1abe058bfea4fdf874c230d9856c1b1b357ac852e8214e1deb067065816b6acc81bcf5f03a4956c67f6dc72baa76a7883c66db7765d7589f20a4eb9ca40b63f6bf69acf2ccbb2fa938aec3f6ff812ccb502cd48b18e62ae3c2fc5da42765a6b104dad3c9c5d6dab5ca7a246b80ea9d5ce2e9c524773b4a714b5d0d29e52ac1ea814830d6bb1bfb2d53aa512e69e074e980a9c7295eb2a3b8c6bcb040c4b8913f152ac7f650bd786b30a01d280f226a8e1460966751b590c4c5a696b145064f7664f38513467e83fe99c66cc69061113b698b30717b37b3302a4d1842706b7b5b4c059b420bbc49c13e44df6f25b363c7a9e00023c9f52d8a6ad3270ab0dadb5b6524affc727192103a3ad77774aa9a41090375cab05eb5e555fca3fa1870a3a2bb0206fe6a7404deaf03c43971458b6b8819d9d090c2343446edbb66ddb362b9aa7eedf7b7366adb5d65a6ba514690fa5a1943a5460c3266c855530580af4401cc4a715b2755604c37281c967dd14e1f9237539e4af154c4ab15f36958e71385e3afef8f96433809126cb117c6fb5a4cf396bca86b2dbe70b7e2e718a836504bd513b97123cb34efaeb83c9f76c66e376d25f370626e5679905619cd6b998c093abe11a019ede0b8f8e4cf23a579254e722c29df4570b4c3e873bd71278b6e01b242d9df4970a269f73e9a4bf5230f91ceba593fef260d24af6907b81e954e80153a3e360f21d3c01a74502441dd5d85a31308905e3a7175e903a6480623a1b1f96175e48019edcd739cc8687d411e3646e741776030715ff71741a78bb849f0f3a9712204c3ef7c17f00a6629e0e9c70ff2aa760d3033c3fcb72498c22d3cb91325932254191c9fd386d7305cf239c7c29a5ca041ef07c972c97c200433a8095bdca184fd7091258be5c12030ad7111967b9240610f9083cca2859be1178c43dc82e2478944d26f820ffd6e00cec51992f592e8551451e6f6883064e65b91406143cc823028edcb5b026e87ce82c4d4bec52db1fb067b914c608b2ab5b4ae47e19b9d4519f38f2cd72298c22b8b047ccc7f35b33472c2c52782e59f941253489bcb8c1545264747467d238959a84b0329d26d48c6aa0a2a03c3bd66114c9631fc9b38772137511106ceca33c7f6ca43cf3d851da28cfb199e4e9f1e07933d9cbb1237b3cb2e7792f9564efa9778330b2f718074d640f0753640f073cc81e1829c81e186764ef4905d97b4a237b4f33fda14c3b295f999469ee3c2f2977bf79391de58ac04699cc498edb91f1c8837b8e7bc983cc3de51edb6089cc7dcb06573267033432f7c50a32f7364e3b64ce49049973222373cf79399c54dafe7a399bd6248facacc9644db34283ac798144d6ac20c9da6b5e8ef69f09399b414e26932d95a94113b97ef572eaccd45956e451a60a29203001014e38f114b8afc0bdc65fca30b21f01f3c7b1ecdf628292fdbf48f617b56841f6771591fd714a90fd7b6c2146f6d75192fd7f70a145f6770149f697a189e90749100d9e6246645feae28bec53727752f6e66a8769d3ba4f31a6ad8b5be2fc693afa77659abf75319ed97c3283071e5e8e4f2a506e9516e47ebc74c40c7690bb7778bafb5b7d25f79fd02678394dab64b19403471e77502923d7c73248caf55b4a49cce067064bb9521122d7bff172aacd15395012c4cbcb71daa1208b2972bfcca286dc6fe3e5746b06dd029862c30b72fd3b258b5cbf06cf4901a5283ee0840d42529618e20913598650a2e98a124760f170e0bfc3cbf119831ae40621f717c0cb699916ccb914031d727d5abf042fa7ca6021038322729592eb5f18e420d72700a6b40234c486d8428722844a406fb061075998e0010f3bb01f3862737939951280842752a6909283dc2f93b0e4fe017839fd44cca42603c8f549f0722a194580f8d6e1e53836401ebb9b14f48226b95f00f82906b90201346b46a0d2847efc821c5c1025f7e768092962880db2708110094e60c3084e94200a22107881030dd40561c020e67249c382dc7f5d6043eec72e40d282a3dc2f426b0156f4404416225f8851834b13413b8841134d9ebc0639f02208cf1980d9022672bfe8e5f4ade28a2843378a955c1f005e4ec53a967487c51179071632c8f543f072aa0e29ee230b4a0c0b587d0c6529d79ff1722a15b53e89e204561f3f0862942a3c9480b4440a242b4f54102a612d53096672b0408a22587dcc822f72fdd6154dae88caf541992718cf20870879dc912b8f2960a3745242d219556c91ab12b06a0550ae56344992ebbb9aa4e1248913a85c5f67054b72fd1f2c00caf55d90e1bd9cdaa4ebb498c991eb0e1e4cc046e9a48451324d610609549044aedfa26208155b1c19e5fa36384735c8f57578aae021d7ffa0498605f72ac19260638e1d3c52104511b0fa380530603202265ae43ac5925c1f8797537510a194471e654e804516b0fa180543b97e0b0551b9fe8d9f01164444e480c8155548e131299a811757985144d09644184f70f8a88c6002232827189279198041038d99c183400a22a4c0220550eeb781658a1a26f072ba6585b5797e95998192c71c5010e5fa04ac3e86a24a145294a00462e4fa305e4e751d60052e2e797e00265d9047995c6772ad4c75a91ed5aa54972a11154b2501acc834922b135272d522d7bf24c8f55b4a9ce4fabf448b5cdf3524d7b72141955c1fa70913e4fa3d7cc8f5798aa4e4fa3f9c4892ebbb2002b9f444965c7fc65ebc9c2ad49241195fb878393e3b0a1321188194dccf6a1d00ca087ea4e4d4161049ae38c16a284f4aa57be0690b229e1081831c88680d62d8200a04494750362486584a71dce002533559377994914254b494648725b8c8fdf8b770c28622453840f1440e3aa66479024912242d80b25c39b283cb3dda2880f5632a962092fb532d2c597ee09c285145eeefae70a161a4247690fb371bc4621d0b2325e144eebf5e4edf80c7cebf6b3ccfdf91a7c8f5694523d7b75e4e656517f2fab8ebb7bac6bd9001960f783e85fcd5129a3f954c225a6b0cf2c8ba416e2ab9978ea022f763247ec8fdb5a503264174921142e47e6775ad622cc9b5d6fa3387e30bb8630520f712923172f76c800c5632877e2f5f3e87e303aef1ad9fef14e5af56e813f3ad0e72bfb935429f253b31df7a1f1b5fc369daf81aef23864a10425952316294c7d594ec2f5b90251523487935a56b584a4c5d537dfb91e6e8387d2ff3854ba693d49103ee9701433802fbc09e19dc9dc26ad66a75b3f566767ca1efd57d0a5b01d07bd2fa2961a5f572ecdb2811487aab6d46c324a1359b712e3cd18cb32e4c1a6e14d49d34d0ec764dd53640332f87fbccd33aa47ee9d048035c6092d03f8eb092ff23c8c6bd14dd46a67a6f63334d854b69a5b45690ca2b45d7e91a2c45d6941720d9ad5b4ae374bcff025df76367b740a63f7fe3bc5086d5669a8d0a1c0f4a33cddaa8c0c9234e46a161f6cb514df372b2d75c624dee1efe6e7fca23577603ec9824d8882d2b9aeb0facaa41a414ab27bb6625c59719981126a354bebf5672c77db0fbeed0b694d6db8d172fcb0c667c01b326226790ec6f17f24ed62c9cb3b35edb609250f8361957e4f9f4d600c7c850729156f27ca23764ec90dde52b84a126903014f37fae0c63080c15ac2048c80734627ee0c18b261310597a625b420c1d72ff09fd2ab887e30bddbd35c4334a1e592fec58aac88ec588ecae24a383a79a9e2e05272faed40505bfdcf5048f39b2cf40167ef06736cb5e103dc4e1d162db5cdcd95cf7a2917a340dcd9ed2979f81482ab4d863094bb1c717b8698b540424f0784b90af4e9c0698234812644d9de214e78f2d656d17fa57d6d4a7af9235f6635a2c9739a79cde53eae85f7d51f3dc42ec9fce0d33cf4d55c9dd5fd7bdde09058b2efabaefee7a82471bda34ebac3b6b1e2d3a9ed493fc895bc949931dfbf52dbbaffd36c3288f7e145d5c0defad16080b402c0af5b53b3bca510ec8959b7ded390bde5bb5b7160447b4004a193029696cfdaeca4914ab4202028f2a27f776cd97fd31f6b1d53fa5a703d43fdf7ad12ec023cdcd1203cbb492c04dff46cf30e8ea0b4cf348a7a4ad97cf5110036206223a12a5495392e8fcecb35e08ac06f8d99d1adf7afbadb067890d775acf0a7bbefecffeaaf53d5ffb787956e8b37a975588e54b8d1702c3f6adb52f6fedff4cd7706f670288600a7e3aac10c7695afed369f98f850963fde7634a00ff8af538fceeb35ac2255998bd167e0dd09e05f336de47ccf7dd7f79213097f0bb2fbfc3fa97b06789f73d5ff7dff62ee1c7fd779fe5853b2d5d08c3ceea55cf8284d9388dbfcbfb7879975015f6acc2241f2ebffa55e883431d9796f0e34218765a1ebfff7759af7a1f1cf6bcb7843f84c04679c4fad17523fbfe969730fc322f612de192af01adbd6ceab8ee38ed5920fe1630f52fe0ea5d40d54fefd3817916240ce67de0f898bfa18e8de7c1112ee9ff625e080c060606c7c7843d318f235c923dcc0b817130604cccbbbccfcbfbc484415c1ee6713c0b44708430e1fc711ad6dff89777f971febc3ceb25e0f237c24f87c5fa096b69f9096bf9eee37821301be077c34fc7c6df781c618f8dbf112ed1fe7b21b00fec59b2f3bd8db067090b1206e4b364c7c6abdec7c7463863aafffec6b340e446f88573c8691cbfccaf5ea57a99f0d3c11866039cb01870c22e38bbc8d210036206727f326981b329091e3b767f9c50465d333650f6f70eca2ed43f39a86b9ab0d80b9b4c5df3cda3169de498d010d17dfaf529bd99dedc5e7d56c6b9b460f0675aacaf02a5e317c45c9f6a2f88d97e163ec0ca9510ae5dbce0e40c27fd45a7c9665accba5b7d819ba670f6367361811d0a9ebdd335d75b324d93bdeb091e79e4ac078faea9d93ecb7eb3af695addb6c7fea2bf6d62bed9730920927df9fef5578fa6c93efb2ccb7ab498fdcd5ea6c52ce36cb7faa2d280f3b51b3861e0e73bdca7befbcd1fc769da431d1ba7e9b7e101fc34f0d352bfb37deab54fa5b61702e352e0a77da9f7523e2a87c10b5990b02b272c95fa094b85d225cc5bf23500086c0bbd03258cb37fc1ae3636383d74fa2d5873d88c00e3f0c891fb4548a23e11012130faf33fd3c89b9409790099b584df45178e8ebfb89f502fe670d9f038a1870a3c2ea1a2946a4c49fa9c5d37c2125872f2d3d9b6ff7c682aa903c69198c365c363fe09ab3c5f85ae914b5994f27c1e974ab373da61c809d2e27c97f6ebcb0c4888070109a32a258e4e213fef3453d5a4627a9552c63fb728db6fc9dd8f63b366d3bdc9e9092aea8c06eaa02e62bf63429ed521fb526848d798d03203d7ccdb421f9bf75ba8bd57b35abf87abe14ed771dc4ac869ec6a284f287f7df5535ab6ef037f0abf0abf8f36b630b81212827d3a29d54bfcf3a7eaadc54d7ebc7b2b9bdc7aaceb8854e02c9a47e04c12395053eac219731aeb84a753d35bfb6eadf5c07eae81b6d71ea8d3f11ea73dfb1d389dc019657fb2fdd5113c857a9c4df3edaf84fcd56fdfbd9a4d11d0c0126886323fe0fa1236efdb22a7b1afa4d4d4e4e4040565b9d93991316b3f98fd49647f2ab13fa3b06f7f32b10db39f55b91a5a3591adfdb96a42decca66f25d6fef42166ad4db22aba42bc310ea694d2da07226d78474b59f6b3bf933acd92ca94f6523a47d0b184b859b6c3e56a97bf3a237ec8b25b838e25b334461779cb72690ca53cb6f2d8edc06df48200c764b934061554c6908206f8cb72698c23d768690c1a9cc0ab2b625cb1e274458becc2f30ad2cb46e50d01927b397707567024c05a964b574e7089b8e2046704b6592e5d6102cf2b2148d52288b0601b592e5da92123037b65643fe460097cb35c82faa23b01ceb25c826aba4a1c28d3ba54ca8b8bf2d8ba5be07b31bead1b5e8cc469fb406b208680200231921a3880687a244d52376c50fa0009d1278303140e2441b87c446237900c61d98825c90c95c1c518f9f9866c805b3e18d9b859d4d8e172d904312585209862b0eb7bc8c90a0617494aa188522b0afca2c34f0d2634d60f3198a110a45c62412f4341dc161c8c5869c0ac8820b9e0e0050715b570c1a9562290924aed408445d0e245a95c49d8e8ba7b712c2a05440b37e45d11dcd06d360475593ccd8813a3bb2904356dd7e55be06c87cb65d38393a6915152e8618ad66ac1cae670a948d51ba0e8745022851d9284f0523072e4c34dc106a2a52280bc1474409a0014d1c5ad9ae512d44f1e5f003b40827282ca3493ce7554de6c7eff4cdf608612190dcc10ea60806df4400301eec6d8788061989ae0162854b08d224e08cc25d12161971f362acae0218d3280b228327a50a5e0549655c88072828ca51bc63432ae6061a42c9fe82096fb2d929603f6b2ac42060aa6202389cb6f8a8c239ee7b2118a92fb6b9247460f5ee794e5931714c9fdd46933825fb2d824b8d5051ad8e5054da92a52172acb27690ce5d6a0c06294e51cdaaa6081a25af9648c9fdc34e0cbc413be5956c172842b08bccab20a961f9ab0cdb20a9622da11161aa4609a65151df440de09e4204aa675a96c7931cd72290745796ca582e0eacb1e4e336db46cad9b19ce979c34bd798bdb98cfa95653de4ca903ab5a9ca2d4e1fdb75adddc4c3061d2e4f923cd8c01a5d46e66552a166b94a1b36b17c5f92bd992da887877dceeeeee29772a4a1df29b8eeeeed5477777eb9e6dd7a504a7a6b5ee26652be3a4949282b4c5ce5517dfdb6a51dab893524af9b307a534a4e194b2f599757f1575d992927932bbc5e98a563b431ea9a367a6a2d94d5d4dd4563c606d93b6de974d7493533641c99b984b8307904713b27c50be78deabd3ead44b5d5a9d564fa9324cabd3ea2a6c572d2d3cf259471d4f8b4de90d153cbfab53976ec9eb52c24fabb35a5e7adc8ce02a0be50bbb08593a01f278932576f98be74aa51ab67828d4cc2375f4cbd480274fafbe8652e9456a777b0de4a112e6200f4fd7c8dc2d593ed7e2d2129c774ea953af935d23a594294ea5a24e9d524abd525779b8dde299853a2fa0ef6810a63ee7ee4e694855ab5e4d17a5141ceb67d9baa4524b8d42326d1b4f685b8635558aa654aa54a5b5d65ae9a536a5b2f46eaa14bd9bd293c604935de949736ad29ebabb7954e949736ad29e522aabd1546aceed66d9dd3497bc9b7634c53ab153a8b76957c85aea59a5dac64d6ed3ac6da24c8967b34c85b96c53a954389da7c294ba976d1aa74a39b59ee8f5697d5b6b57bb797f5e6a5da876b57f54f739dce5dce7368d6bc2620586725b131628272c37a4dbcd52aaec6e9a2a753724261b856eda1562b2364ca932da7500a468a88d6ba754de681b9e189c41de12f367fef8eb06f19670a1dd392eeb949ac4c8b2aa714a4f2a8d537ada98388dab4a4f5b3b75d3d64faa2d1c5bda2c8f9847a408e44bf5ad0aa792b9446e255709e7795e1ff5d1d19449423f95a971dbd194cc4936a54ea9f5684a12d29454cacbe13ed5bd9437aa365281ecb82d2362324968c96d191193ab44ebbc2cd544cde4b65117dd66a2c2dddd542a15ee582be11d6b24706c6c6c3a66a4f3b694d6b146a2875aa89150e14dd5a9bc1cfa2a6f019d5336fd9a51dddcd6bdaa29eb2293844e356151fdd39b815d9437cfb0da4bd69e9b9e96a56894bf7017f1be835afde37591dc165069cfe194178e33dbcdcbd19ee3b6ae098b1598ade39ab0403961d1c2d5cacbd17ee52da0f3459a9949325b68936992d02af06a1c125316a5e3c039349138d2484cd9549a495905522aada5dbb6c9355400927680e5df2c9972782296bd66dfa2cf348dd3f06c3ffcf5357d1fdadbf7417f0bada5a1167e1d4af7ffe14210b732ccfb3cee4af4af68e34ad99d5e30036d6db59870ffc4b1d99508a5585a6a80e7cfcd72e90a389733e540b44d261c92b2f6547b7ad494af766f963581654c38d0d022001dbb5cc13840ae414d72ad2f836cc8b512803a1557722a7e843bf5c73e64ff16912fb2ffdb4045f61783904c371865af026b53bbc11fe3d8777c9b2ae736383dfc45df6ddca9e5f45d741be0c9437607e54fa40e194c201184997eeb8f32c5d7a34d28131050a69952e11d0d394802a38f6b10caf46d0b099d4f606397291879070164ca3424059932d10094e933d1caf35b34073a9323531bf2b8c32910a52f29c592238ff28c1bf4c759c448a6472612944e269926656a058c3e7ed19545a66f83a383461799fe8f1f32fd2047327d19ce48f2d38325829662686c31d40327444299fe2cea1ab994860e327da69f29327d7a4429a5632091698c762ff18087dc7d31a55fac20d31d6234eca453eeee06ce7ff2f7ad30bffb67f84997d9b3f43e9d9eefdf0ad9f7ef64dfbd737f863df3afc7e0721a9b4f4a97f777b2bf3dfd59b8937dcff4f721bc3ee1fbf58640b2bf1f037a013257eaee9d13f8ce2819ab663ef76bad13c4a1fed625d3975fdf4796f9d4bf1e76d387f7cd70851bfac84271841e607ffcf4838cd0039edfddc7e98a73336bc3456bc42e88ae56d7b0bac66767503839c3b99eb0121eef6db1b6eba969b621901868de3efbec63402f40de2dfcec865dce4c0eb1875c5dc0bd54681a4a65b8b19910c73309b4fdfa3efc33fffae9d4eef7f09b36fca653f7acedad2061f6dd090b39e1388d4e05a7873637c0e38c38648bc02df4a159b3bfbd8fecaf766df8e95c6b7ffbaa7d99d9d8d075dab6ad07cf7571f322c88d0a72b26840654bdb1b0157052aa764fb3c8d00ededebf86bfba02e80fd0bca60bf06bf0efdb5d0df47eb0ebf15b4dfdec7bdbf85d769a4bb6e80b5bff5875115f2c6025287fd1b9bedf7ec625a313b86c780412b0b0ea064fb7256f9d1697f535d675b2d8a2d9bfa0ea7a791bfb6f7c1bd2adc36cec6d5a285d96974849464b7151ae6bdedfe36a56cbfb5967bdb505cd0101706711afbac2e708f928b6cdf5a263ffc75c32ffbcd057f69e17dfa3b9b76c32f0bb7d7b6ec3b1fedbdf771bfbbefd9202ddacd2a3959196230d22c206fea63a86ecfb9282dd31bfaf4677fc3ec7d28a52d4d02d6fed524e6bcdb5a4e439f6a5914515454c6d3a00bdae65ae0b10594bd7d20edef064a982883d3d0d8ea08768545dd1708aeb5ecef6bf2c89f864062a839fbfae364a1a240ff3e9765eeeed9d7d7b44aef7359e6e9adb05550dbbe2c0b6f053b20b04cebfe1852ca4dcbaedcb44c5e222ce5cdbe7b6f56691314c4dd2de1af7e67f93367070e042ab00cdabd176bb725c3fc994131795fbac742c3fcb979872c96b5c82b68f343c7ba5c4ec3b242bfa76b7e7e76cd3a4bfbfe3eeadfc7e9ec5d4e936559966550938893333af502dd7308083be09e019833042d3097a368763227c89f3de79c73ce3967cf39fb6750cdd761cf39e79c3d7bf69c73ce39e79cb3e79c3de7ec39e79d13a7870e4f6cca6b81c70994041ea5cc04da79c96e9b165b749aeea1d3cfd32f42113c8a4031d4fcc99f45dcc34ffe0c6ab15de104eac75fe0cf38fd3dfa75fa795e2c1a03a541baa6f3074d3d54d0e169e1022ebcd02f838b2e261630a9d991fb25ce17b8870c4fa08259593818fa27cb4d060d3cdabc7c341b9d4dfbee7deed3e7f1971676bfad609ffe4efdeeedd37c5f086c7b1cabbd7c2dec5922c31ded6fd8e373e5f63dd9dbf093e115727db2bf4fc1fb3ede6bda7b2f01edbd27723f7b1897b19af06cbf3d8ebcc9f2f63dfc95fdf6d2b797be417961263d9b16b78fd3fceffbdccf3e0b7d5cfe68a30304a4fad403ad1e73de6ddcc685df0ad9dbf791696f35d169b6f7d13e0b3f2efc16b7973009db7eb3d91e67fb1edbeb6cef9e0e904ef63247c7fb0c94306eb3719aed57208ed36c8f411da7d95e95da7e7b6edbe4f6ee83bee681129665bf8540f04f76c57d4eb29ad0f0db9eda780d535fdf87aa863e4b76e8abdea76af7de7b9ffbb6bbad7c601c7edbdff7c1ef127edbfdd6fdbf2fde77dd7bc7566eb5789f8429b8863e4bb6f7a99f7a1afad057fd846de10e7d9dae6af43f4d9552859f4eea3f1634952a547dea7da83ee523e5835beebdf75eed76600bbcafdd7b554d9b106f9b06e5024b336ac842eb2e09c6592e95a183259cca72a90c2f342470763b3ccb487aa18dc58f2dc3a8e5581cd5329ad01aca0f2d63889719c5290a54d3c83c5e5719b10d77508a2e2e23688b62d37c0303dfc8b2ca53921e9e86b0683c11b94c80518615309eaa80e1a485743e1413c80d26cb2a62886103ee369d2d6d2865e636fcfa1f783771373d279da22bdb74bb7c31032df8ffffffdfee4a9475ef4c9661ffe4ba77748360e6bc9be0c70021999beded53fa4be66a37c131eb6cca0ccc5ced2c1c275957cbcd4df9eede93524afbb906c7eebadb9d360c38cac75927c131d4644d51a9a376c14959d34fe5adb4bb83fc70d291defd3d5ab4711a592956d1ee6e29a50b6ea6dd6ca39c67b7db5edaa7db6553584ddbb46a9dbedb493beb397cda647753419bb5863808ee28a5dc941720d9edec1494a356687dafb4decd46858e470def964d613b6bbb4ab5aed6ee6efff4765ccb8a4a99bd67d77e679fb356b35a46dfb32ea83ba8648c580a8b942a220100000000d315002020100c08442291481228c2aac60714000e76a64274529c89a36112e428841032c6104000000080012821151508b8b158ab59670008e063dafd8f26f0c82e78c07a16ce71b6b787290a83d1358ae4d68f066514204382da33f3fbdd53036bcedc640ee875cba29aff5c76a1878dbd45dd817dcca4be698df1879dcc3e1ecaa072584a8a62e2967439baa92cfdb7264bc038d3f54fa0e5308906b572c98a6a40dc130b5a8d08db22e609a503d627635d50550790fe116a0f1145b25a9027ae165dd0d8e5358b842dc6024c37218b2d5ea1ed32fcab57700f00eb260de9544331ac1ee4276879075e0df533febe4f0bdb09269b26646757ca242de79d8f1959c1b99ab2f2cfedce587500fe3cec5e8638416c82e1f51111de1f0ac5bbab43aa05e0e571382098e009d52da062662d80f2da44c94e4e0994150c0f4dc49a5ff5a82309ae492d33c8eeeffb3be4114b330da8063c9390bf89b8c1d36d3cf2329bfdcc539cac83a759679eb6c24e4de54a704a8f2671d1c80273fba0fc167ea2cee0ef052c87b124c841ea839634117dfa4ad015be0771e00d548824839bab9b9bab260d3d5f2506663b8affe21de54b0896f58ccf8f1b4f1be263d8e00347f739fa50db0d3e6e355588b9afcb0358e72b4ebc8c72c78f13729388135957e29efcb705c915848a7c8e67e37bb303dfea30ed5ebb9e9c4672de32c75ee140fb4a405565904aee72d7031180a74f3d3a5284b6d140ec9bffcee54edc0e21566f6f12ef49eed071bb65992bbad078c347f67239f26c485bca59062a307fd4ceb6266a1b45e2cf7b6b2e0f87822346736c6b0046ae72a43464795ef17493e3160836a1637144cc9a2ce891d48136254944a8183a8220d13a3afa3c782be560714388caa5efadc984ee6696484c500dd86d41a80a8dfb0a275c3421c366cf05f360b23cb2278c38a39e3f77605a0a996288d9802b461e85023d0f16c14b572c0dbf7cebd41903af96477d6df0dfee9da48bd520af750c38480e2fdebf84d19ce732cc1c73057abadcc16b7bbce5f15d0068588c7cfa4dcd326229f278d22c798ca0eb3019e42912a1879e23affbec5792fbb1abe79b23eb433a0e8ca0b2bb1ed7d1c585424a013fdaeb6321ab366683e6bde2ec3f8903ccdf2bbd945d2299ff23c2231584227fbcbe8b39ee6cb851252ef8bb612e0d7307817b9afe64c7dfe77199650c46a2fe19155c6378a09c6e3f904230a0c24561b07356349cc7404fb6070f04d7b606dd592f51cec715ccde8dd3443d253732e0018b973d49cf235e55d98f0dccf27c6e19b9f2c83f6172835e3ce89a71b0438962e1a43ed3e6c884d175bd6573e9041d51d30696ec0accefb68217a608f34bae8f468a968cbf66d8732e38d52c5c99f16b2e9d21c6a3004de6e8ca71a080f7db3b162428c86465f71d12ed619f4e13d99b4a4dfec71c3c675faa502fc872f933640210252975d21632e2773392f953058654a91226240454af5a7455398a6a53cdec2844c551714eade9d1346f91ea6d1883d2e63ff9e75f458292fec5242a10109f9a5ead59af77aeff60a04ef9c786dcf9a66ebe26669707c6afb016b45ca7c06b53a11ebdc22b30f4e4f48d9d552705c99c5b59fe83e571513650e6d39b9230d5443ebc535db11fe354a4aa053a4dd86bef7377a3832d78e0ee13b7a9ad30c549128b3f099304a649493f53d6826027f5c8de816bb9c66b35c7c18dc944debfdfacba31777566a08654790917facf47ac30b5565e265792cae138e1fc997efccfd0931c873045df6f5eed1b01454269018eab5e1f60fad07e315fc9c8e2de0b7fa807180075d13bddb3bb556b0188dfcb2a001a85ca5a3f9d77dba8c92d72e786e05f57435d7b29737695af78ae42a8f237f012c1467557d19f493280c42316d9980ee8d139468745b09d422c361157c2322c89ff2c7f717530df84067bd33f3b49c229662529578fca67136522580cbde806f8febd2931d1da4855888724454347774c774146984ac6806b13c8cedab3206f26cb83fb254f3200b943778e78a181c5e556d8aeb120ea92f6619c6fdd50009dd7d78aa2c13cd141f029139677424cc1661ad8efb72fab2712ccd282f434628840a4358d8eb934668e2c8e624050f5d3429fcd54030b96015ca3508e2e62a720bddec73948dbd12bbb034e749ddfc0e9eb44560b56cee0e2dd00d7ac7f60ad1ab87b60dfc6cb9a53cca8efc2c1abef9cf76d9b568841768ef20745cfb838e5d9bba58a4f52721ec0ec030930d9a003832cf53bd0d7e8d7f98ebfedc2e498a77740ff3d9460488822acd674dc0750ecfb005f2e2ee963bd6389f02c9495b82b8040cb2b1142aa00fe3439846d3f00b0badc5323c702dc20157a73b3a6b15aa80b56e13658e5f94e7828442fc276902c4f1822a4c2e17a54e182f3c5ccb787275115e23e196101a5c87d1d6e0477646b1861140b91fb233e6ec87c9596262d6ea380daa555f80b23867eebd25a4de78133850397be8197b6c18e3b7d3a54de64ccaa5c58e95c3980bb65218920219eb9657768af395a62f0c61fbb03fef1b096734584f3f6e7d4dbb5e519c60808848ef2a30f5e674c07bbe3f3e4e31dda04eb00c7e20e996a54c721b39dcb3c5f742cab8467bb8f5f8f2507cbab87866d634bd7cd821817274beccf346708454822bc8e7c9fbe874969f58a3a93eef2142b771e91428b2768074070adf68c53be6a9546f41a18e8e04284ebd934753da8daf4b8e6fa4ba4a0f1b7a0c8a0743b84cba6aae8fea45a46c5d93cb1d533a75096d2ffe3fe0042dd88560994c554d8c6cb5671b62bccd92dce2c2b06e73ef09f41e004c6c845f010a6d8e96f422bdd561b44b5f6b6976c107f1cb8c06114cc9f16453ad69687ee0d9dd5de7c56cf0b04b6e0d7a82c84c7cddeea47598198428db6e07d064cd475e8d0dfa7e17dbcf292d7f5ef04fe475c0207e305dcdf9928074b2a69c722c17a6412aa704beff1c6fa645d8eea2a44c2a88fd15b758aabd222e46947e8ea87cdcaa9020e5364a3e3f0b8fc1fa78e8b116c3b1369cfdba30b422872b9e64f41644496750c44f66a8afcf131718aeaa28a7344e6c979393e64e44e3b3d00cfff3e634783f46b0d07cf319476ad1d4cd167419852aee5eb22b517da2d5e869e5dfd26be1cffcdc5437f52f0e90c313b56c8c32449eef6a41fbd6ab3ff963ed38c858a6eb8d399744b4435a85924c08efd7bc56c405d1440896fea9c5f3325b94d9139348d2d9aaaab443b213c0387a4623ad42b117c46966732b7367c7d03d2e1db24f1b7426d43e84e107b92b057b39724305476d6b8b4a878fbab572b5c46bf9b23064dee89294d45d6c906dc9d1e8a3ea386923b4d504b7ade665809b4d93bcd2a6f5e7545a32ab2261dce3461e399d3cd18b8f035ab1c3f9ba352483329d35e494727382ae1ca0d620f184284053b034e647028bea488110ad3e95e08afa07f7f8141315f3bab61ced3925b385b829fcd550ac6fb31c4aa2046ef8a75aabde94868e9de41d42892268b1f66cc2234e08c9a8f6d16b8e69b1ae1ff5a6f73e6d22d2177c4889f8df248e0b3c02da291723933365967e1d7ca4a08b832d16072c58cb3ebe52f696a23f892badf29989cbd29056741e7287c9b1a351e9996667fe35fe7587e9152b8f7e76cf48d3c8a652ba5d68aae7671fbeefd12edac1e76a767f98cb7e9d64d8890d70cfc590fcf39fda91d74064fd39f7856b19ed22102b603293958f628ef2a23ef075827c7086be7eab44823e18a1091d5cfd407d9aa4202ace30003e356b49d9b5a2db22b1a3b4355d895443083d524c4642813f3c111aaebd18c063175e17f99a5fac03829631f6127132935ffeb778055439c426d1d647bfaae2dd404581f920909e90bf9431b0f6baf11ab28db583b574ab2a0d52cbc4b85932341906797321e14b92b0b89825e97b2d8071681ffc8b1ef8aacd174b91a3e11efa7a03fcae4c917cd0648f7f029f677377af0291e6ac80a7a2ba9f0d8cb45fa8ba68d44a5436cfd781a70924aab331d5b6a55d6db90bd5f520b13769320a77018c1e97f741e581de42e6e1bd12b7f9cc8828617a5da1a427375f630db65877b23fd0263c9f6fd90ea00b69e2eb31c9099062ca53c210da6bc7cc16ae6b3b5a6c8509742c00e7855ecb98b4742ae7bba834c6a39bc10b4f643a00a6241bf2e735cea660cd0fcbd1ff68cc592a76c36b920d6f5f3cf8544266cc0eeaf321d4191c40cfb6e52984d646d36a1265998d2ac5d6dad1f9cb4cddcba81978883ccb3852352fb00a6435262a6cc8940537baf73446fd755523627496c7448f231d30d2f588dadb70569aebad46b0998ba7ac7d8907871fde3860e4b3cae29a92139fd8a4fde686bdcc4b210734b6e96e3f81949c9f808bfc9d8dc24d53a3998f87ee539bc74f2234a94bb203d16d581569753dfe406fcc4f02ed7007304cbf69a7707838e6ce092c92458e024867e620ff86434c1b792cfae173230243ca545b707937c9cac7a0afc0532db49810a01dcbcc802c02812aa7c0a44a9f2a978d69a54522604a2dd29270f0d08891455a98ad8865676cebb7157dfbba4325c7ec3908f3c199977878660b44335f07d5d21305b9e454932938a26cbf49c71f05458e99c4ca9d10fdb47f05ab262a7d9c2430212b7eed38ccf267d74f46b27390f7f609d1f4051c99319de5d6928c98d4e79eb434ee4e3976b0f0381a4999bec039a79c055385516a2941cc4679cecdcfc7b5216b7473ba55e9e62c218efa03d8774d6e901cb315733313ec3a3e34cc87f418aed88b825efb2ccf1acd7931362c288ba7d02063f6c9c10db789057159f5458dab6b5ee020f12c69f086d4b1967f362c7292da5851a362b654aadf94892f88e03d6a5bea5d151d25dfdf12b55c44f568681639a6c7cdb6a36c82fb38462a7e2288726f0f9d205a00800f2d1fbd0d8e8b92c488e20a29670f94a5b7e89dc64ac40ce4dbbd48742d91e04abf7ec6d4181aa78e8da1a2d80d2acf5c3a989143949f4e25858ee14c9eb0db9b97f2cb8584484beeb38bceff266fe4e25d2c6c11308eb6540b05d797a14e9dad6dc0ae8f4068ce1407066709d402ec0dfcb9b71fdbb3abd1f3182be03127517419835188912a7fd3d8e58afe3ac4a990c766ccb3acd6b8eeb80859c49a3135d4f3c02e100a6f66282b275365a5ebaa06384ae6b86f9dd760e17181a4fcf14d702fccd2f87556f859c682df827564f1bc8477498e4c23ffbd0c6865c177ae64e33aa866886138987487fc7603778cd08af9b3e370966a822879e25e9314e55113e8e315644d9fc03d9af6192f360ffbb18880444912715117ea011889ebd19639035195b37b59bd056fa6bfb451815df04ccb1a20fb5c2d01a8f0d8a7bd8c854ef713cdec5b9a8c41063883c171572d007b625eb610d0a1517a7cbe7851735683d342a1221571ad3cc41b9705c8a1c66c6c0bae9c8c841f75d0501d4e19db5cd9b3fe841c3ba8d4d59198488e30cb40a714941e92fc1d4c63dd61b5054b2a1d9dc1463bfa2f1321f05b52c269052217e000bc32cf712ac86443a1626c087394b969b01bb5cdfb18e2a5872d752a0a3a577328ee217c5ccd4484393568816494438c2fd34a71c0c1644dcd32966f48f5d580c0e355daf40380be528d494c8e832c1c3aa21be03f5a31830cb49cb5bfdae3e51b05408a18ace3d03556a52ce314720da9c0d0831c0ee18692a860ded2f7e41de6572f00a342ac783c6b39e01a76764c5a41145385565e013bfa3826d76cbcbc0321a97d08f28087ce49a201d754e4571daba981999d149768ea5de3efe4f2632c66380b7e210cbd48e2ab7a25198a0fffe116ec5d976d0a67e40987557fc1970dc9c75f865a701e37ccf720f8e48a9cdc287b76ab379601217cec8d34f2455fcdbb4e8f743ecfafa4f1894a149f34d367590acd641041ca5243730b3c665866a66c62a72c303dee7d28d5c304cf2575bc119c4de85324c884e66711a1e31cb3d8f4546384d011a9ca695edd880d3ec660675e589687e8da255540e9421f50210c144af6924f355bbb9b6a12fb3838a23d0880df81ec8453220da26c5fb90f15366d34724b3917d288c247d99f890a1d93a19dc269678724d230832287a32688b352c5097d226acb6abd48b229ae6df4339cfbb63b917bd9e0a0e0a7732675fc562898fc1bc2c1923960b0d4feb23d798be73ee5cf963e928f51882051583298cca959cdd9cbe02e93d52942085e8cb5702f3a368cfed067f14a5d35c509518c3a8613ea8bf0f928a0964f078da22bf3c07215f97041c380082bb455b4fc6ce0f4065349615c42527d43dcbbb32ab8fcb34524c0e0a06602178921e84425fc97ead4ed65689ebd259faa0858bd2010917a012840efe8e7379fa3133de7775e71a53f9039af6463b4981a8f3dd808f43180fc1cd15b2fd62cbd5497ae8dfddb27400009b153b9b85344261b32d3bf4ce398b58883206a285aea75024732d31db4fecdfb1c4ab63f2770c5e844297efe935db589ec5c6825abbd85509e6966e1aa47bfa6d434209f9d59554ff5d8e5c1e80ae58083dceed52535bc4968eac6d418535cdb31170fb379af81f6794b9ce5e52641cf5c275ed176e4a4873751957730d65879cdc440f53cb7683e0ba062af5408256e1b6344506df0c0008a56138a5eb628815a5ffb4253840492a13d670c8b399812ead4995235d0fde1a9887d8c706b76e9a77133b21ec01576cebdd29c5b3b816c2d140f4e096d80c76a709bcf5c4d5a5a6374983d9c12d86c44628debbf5e1dcb52be6d85641cb3741d5ead84a7c4c0ec9250b00f838050f8e009e39b0fe44c2ff309619019978c26183c2e24797bc6b82c5d48c440f46986f78a62b56bcf654f84d8c5c6240a912e7b05913acdb59985f32540a03dca5b17ea5cf9516bd9f9c11410edd3f68e99ea0ec681067d647415d64f83a33e10950069084447429acbe06abd7335afe18b32ebb4645de5cfd16499682023a86527502a82e7705a2e2edd391af7771ffa031a523235aca6f2ea3b9c4c307ef5f8785a9993938c88ce5b868bb0068e97ca59543b5420fdaa10da45ae166b5ebc33f8823224a1a4812bbcdd8b8470bb3398d3d4c580cffa0425c43b5713bfd16973bd70058b04fc05b34e6322ec8a6cc4be0cfc4e7af60362f1d8f09ebb13d14889b765cf824c29ef1a2c323a6c030052d98068236afbdcec3dc0f08daf19e11c2dff50927dc6b61f4e7b0604e127ca1c816ad8891063f04a02616c4795c706318fa70d39f98c17080dc80d920c2c0c61671a7e5d2c4b80efc88181cbc43840b3d74b5900c77c306bff72b487223660872c23f5944b2df4da68d0556f2af70927ac2e06d4b819d51e886942d0bf280d08f49aab40da898bf1d0d18e93246f25c39c7641b4272cd687206914e2e1ca40015e51788e721c32385709038718f062bcb61e4ce9605240b1db54821328024e094d11c4a6f64d5ec7f421ea9baf4bb0be83cdb7a6e3313c275469f99144ef2cb801742de803041dc401dbe91ea0776f4828efb830b8e5ebc4b26cbd3c182a70336cb135d7b73b3c69c8129f04eb8c218b2c2d5a430232086d2c5562dc98ef5d7f7ff016f7d2fe9e6cc27a7f1b6a33310828163471c21f7df8c5ec916b6e0a8cfaa1cc9ee65db3d2c8dae1c53c6371df3449dcd9d391751069d84cf0cd85d8cdf6931728ead06b76609241a9396305557e9820ae1ae97c1bc2da57a914a6c1c9a349e516e662528dafb1bc3b4b8eee86e1eb41e74eb76200c7cbffe3e592f0e32683ad489668a05a0a56b3bcab8812c7c39d19e16b4edd734f796a6ed8b8aaa06fd713ac3a0630dda36f099da35b40d557f2ede9809702b397912d1990d56b6dcc44a51aa75bffca4605474728b36e6581c195aac8173cb30d596aa329607a7dd822bbbad4993111c57011a4127454aab6970a25531cca2dee49aa056d4227a950ba30e0f30dff9dc1aa912f90e150d003ec708e09e4e838d506e682545c0f9ace7a8ebdf28ff67d8424cf14a7f5aa711ae0c04dbf26b92fda308be3609c6bc4c3c2dcb702e41900835df953ddf4e72e19d3930ec5f3980063d5b58fc8431fd18903407c5500ebac2ae2b9060cc890261584e2e800a33e950e6f1d251aebfe9a0301785fafd0f06f724f81ac2ffd9d27118a48e733b54da883b96988cf2ed16575c66adf82bf78f58628885dfe248f7c123d37d9aa5d31e6a9d3862e6122faf62925a6f36f485296b275d7c598039f9952ef2a298f29beabffd63f6d64a09f33670ea430f62cde8dbd77660080c52d63ce1f3d4872d59f3ca22632f3903ce558ac99fa6759d13d43773e2cad80559a157b8a077fce739b9007db522e8ade9945b04d1f4a59e0ae8181901e28220fa8fe309323877633845a858c3a8ecde3b5e0ee2ff9a3bc13f2f145fc32d0fb70f739c0ab4b3afd0a7926dbdd447505539c6e175c4de203a1c4195a01005027b93dbceb3d5bd8cbd06d08a2c796258aa1c5eba21905bf2f3e52afa91cf3c025c73c491b7df0b2a93bc3b26b757f1fafbed3e0b691e5ef4d3e357967a8c1fb380916d8365f015c72b669666e20760252575bb25ab82c1b1dbca2d24877b1a918b70811205130a0f87b8bbc52f035820c53e9759c80da6660f912b8255fdb90824d62c09686fcb793bd8f5a7ec35178b25c6ebbeae45844f381a558750f6ed14cbfdfcd5ec838f94815f137a52a012a150cc5c78b7cd3ff77a2edaad1f3021be197565948c523c11a40899a325f36a535cb203d2d790c2be36f516fb477eb537f711974563e98be8247ab5c4f9783712a382775f548be97c1361b428161e939e6baffa5bc1a02c42dbf65677625679646c2e5be3876eeb62d615530caef0336e5a22266cb7956c405176a6bd130e21cd5c74bfdf20e5b11487cff24173e1cbff690a37b3afb13c34cb548b6ee82961f9c67d00957a9a7989378295bcea23b9a6eb931dc793f0a614b47d89edac576385515706a2cec3ce4d23185bf2d8335f968a6b6a1b4e196d06f1b65f3e39e50c51ea21144cad11cdfb609cadd0726618c1a8e4939a236358e28a74f0e57eea15117a171e8c950045275840591e5a68c6fa7165c350313ac9fcc38740d7fb81bd8eb67ea5c60595e0872faa1ea433233cdf48c1e57a5ff1bf91c6316f9f346c9f04494c1b6a18b73b00c406ebaf78a36f3b1900931c86c213eb0b0e5d0a704a5983ed49ac7dd64a1c1c375771cf9a2332127f83b892dfa8182895dea8598f089fba81a7ff979fba59170d2903111751e0b9e6f1d4d19995bcd1f8ece482b4fc3af0cb9c21092115a61a697394836b5692d741dda807f5d0153d05e7adee64073dd6d16987fa280e81b1d40742e9650de94a0b36ebf61bb5d3bef17eb9c8086b3966d5c88c995157902796c70c0490ae188488febcf473974b2896e21a7ffd63cd796921ccdebd73bb50fb9024fa5e37d76e5d640549ba8445b1c6135c80b2093accb44685b0b43eca7a2a35a0e5a5f60af4b41be17a4b81e41d8744a15595eea3745c3acf3a187db87267f9b77e092ec189b7596e17d8bf355fa0ad8f80999cb12c08b4aaf7dd3f187fa74f869bfd11be02a6c607dae9c2aed75122379c4f966a0d6b884de449889d4328bda7d5f2662435ad8cc9af2f02149328291ad16ccbde757b79f34c0a9c3412e035af92ba5d54ec375feb8f6d31ad55f26e74636aacaf5fdcbc9ecbadcb698c97b58df7b09ffac9635b579072c12162206e0e7b48c0480338e3b3495e402badf8f5032f1a8cf49d3680f34bedda39481ab93a665e240d721380068185e93196403b86c0ddd61dc9c04844fe4f68fb6fa16332e4f20411b3e524e14a56646e54cf9902a72441649de36dad2cf196b83568e0daac844bcd06269c8b323f6e48f027f6b65c078f8e4737b76f705b0fe9259f0155b18d56a217eaa318c796e5aec5fe8722d9cc4d0d3b1446f0e6f000928349acca7099c6d51c3451c5338832dd0f60445500c56dc4cb54a0aa5588d88a9554bc21ce62d00c1e1d14b0e82cf7e873186ea98b14f17f3d7cf6d7eabe913d2f30fafa451ba6c86859cbce74bc1c09b9d6bfc00162c07ab506db37439c27139f3248414200dcd2c5604b0abaf3cfa7b563832fd37cfbede7b28601f10c82e28431b8b9fe4a8d6eb65616cfb542743757f37964e707a478f9d9f74ed1ecdeb03e35fa2a39569c0f0d96768b219e75a4d0708d354aa5d272fb87bddbb4a89ac375ea681b64d46f4fb57ae8fd40989e10f10b0805e5f1811897255a5997c496a7c188206d9946cdf3c40a29b3ae185b38b90c5c7ea3328f04cdfd32e44cd600fcea664ba100ca85b7c972f244b23c5a561550b13aae31873f4f6d739f526b918a7a6196603965fe7a06bb6d6e27f6850b8ac1b4a89e0a800d70fb3275c40220cee46407b643385a67165b936be04fa3c2c794728db67db16fa37fd190839620807d310f6cc6a205dfaa5128676bb36a141a94a5d725a537b2f964240061946c4f633647f174d424e96c76bae22230677f844d550598c0e830fe56aad126adb317144499cea182a9ed2ee187871590c1554fef170512664dac1c34860173a2f28621577ed7bf34c5d21a314f5555e322987924139fe64858746af42fb9c70ef8645bfda656f0f514f86a424c9c2143577bee8a9329905d994dbc6a2c1b91d0dc114900a577ad3f0943cc7b1fd19b94a9d374cb74b82d50145dbf309061417ca0a6ee8f5e46b56f10a1c4ecf219557496338d0566c96285ccb9b21998044d34018709a9362adf7ccc8f5edeb1dadb23618f62b38cae6f2cd1a2765f9e3037cd9a253f96112ae426fee840a8ecda3050e78573c85872b82cf0f70d7a9c959a952ef439b581a679ddaed496ee446cba43789feaa61e9a23aad90e847b8127c67439a304425cca502796fb8c1eda945ef27fbbb3a5f6419cab792ff475e039c6b4feafe5b434872200a034688f41a8b890afa310b9fa036178339ed5e02318e8d508f8df7342dcbb3e4b53cdfba7a3b517aa060b88e2c06108eb3cf79f6280b0a28599cd3c2d7ee53061138058e8865da4b5937348630af6cb590fb443fb588bead5ad4b9a890cd4de5cc0ec18aca200a661ccd0b3ea933eb18f0fda38984cfe7104196aad96d29b18aee82d435493fcacea7900648c4d79e4ee9de4f44c46bc8959bf519f189d172e948392e4ea710714008d8a498a7584158c34d2b7517e38cebe4ae20736f268063b2227385964013d5e25566599ee43a9786e8d08f0139f4a0c65e54036c5b2ca41394fc464e3ecd8bb8f9c90a29d6e1399fbb2f760be4e2479946a570254d73810ed21490e061fd01489212c13dd789dc061b89851ecc71a971348a158d8f174472740cf8ea5a8ea32930f35e40cbc305bcbba43d32dae838b93f4e3c53cdb563cc4edce47492a1b93cfa9c0fbc23b3786ced409f1a026f3f967694e125624e744f0240ae857c9a863dca0f105554eb8f5118dbcd89dd5ef51853dc7db27d6fd50d6af731434999e025dee24e553a7763148c1bc08aa61b3cf901524b5f77fdfb714d32063b4b204c93a304ef505843066482a3d40c326ca9f90221e10cac204eac0e58c51fa4f8a87fc7087c8137f150f6b9e6706d7d03b2ce3f2daed6ea9e4622294cd5185b581a1bb767c20c60624bd4a6bb14459163fe7264703d07f801a54dcbf0dff8a588960e2ef8f526d7b79d14538202b1e94f3fc847a7ac240e1c992bc4f7a0830ab092465e15e6000ab058c0aec90adb728748a548b10a77b20372c4adff0eb21ea9899e802125ebf9cde84e9fe20625111d6d9c8a48dd778fad1f5d450933d87e31d5018e1b936cdf6f609e6e00bd9237ecb8d4e8c3c9869707f72853218714e18dcd53494af58128f73cfe265e122e9f5048cbce6ed47a4cb4aa17fc97f0e95eed0f4e9ea000ac9c7e91d6c53d16a5e46b665322c432376a4ab6dc59ef3ba38b65b2f09c4ed8a8084653ab430e0339460ab3f777a44cb8ae1b81b4f2f0cec07fd577cc9dcb6958ac5e2baa344911646677a75bfbd7d0271f10e226f88477cd2c1e7e1d25816cdfa032f73124c88c10b212e8c0d8365ef29767cca545c71d998d1b6c45ee7686da6006f1ce66396e80553b40cbcae02f48a33c845088e17d1e01bc94ed47ce4b84fd4170d4445c9e135bc9a019cf3804367dd574f157238f0b4c70c1784af3fbf425c78adff9fd7d0e59bf17bbbf05d179129e6ac874a311772631a54ddf6484d16b83de694b1fdc91f1b75ad92e26ad4fa5b523ffe85b52ffcd9d878c77bd2f4de6fc0e251e0b4da2161736f95adfc878ccd3ebc1d84a06fa2258324ddc044f6eb1fd39ff9be3c5227b1266e7033240631f10fce9a286bfe258903dc1a27b933afde10a19d968d9a04ec33d8a6e5f4790f094942be8852b08394fe1d2f1bca3c06b95075fb3546b7a1c6c4a204f65e30be9f1d36d7cccca0919621b6ab567e38763083ac007ba8b2823167ded3e4face466e98cd7987bac3527b1360f721db5958ed7730f80e7651ff7d3cdda5199083f0f0d11cf24aff5129c31d2656dd658935af078d47903fe4dc36985b6a301b9633ad3c7e5e80cb613078a2ae43e9c2cdbdc972901b0856175af604ee90df477735f1cc5074500646c9fa0688f0b9d4520e80d4576f7a8ef751a7bef30d99ec33ba81b4744eb00d9bb2126a1ac42ab003707b35859ea86edd15fe0ef20d6b15dc01627de33d39a9de1e7f44f567730d51a39f04271ee98b41e0638e4ef2096b7ed8820232c33269f5ff9732fa7548b73350fca01718fa694b72626ce20489c54dd9be93bcdc1dac2d0544d2fa69d3cef26236fa9f48a95b97d0550cba24920de484a38e99d2c6070b0217de0c825235bb76b69c6eaa5d5ccb50f0ad6f492ce6cbd4d9c06709831c362fff33bf5fcde66577fc14b39a632d30bfd1f5e13f8473322281666f433340913a112d9758422efe61c99812519e7c51c4037250b4da9aef4099e098769a6ce36252771133c249cf85c2bd4c72ddc47cb4d832360c7bdeffd50023b356b7ffe013748ebf9d90da75ae9dc5abb72b2ffa657565e912267b7f8a8c861a0c0007d3197cc4b6753f181c79864abe6debec0961ef354da10768ddc1179b8073c6d62864cb38e57656a9b1799e898835c1988992cddea40639f3979fdff6d9d3a2f766c05bc442feb83a9d7e17401e770bd9c99cc3fb8b8ee91344d6823ba55c9d22dcc8bd2c3b4d64efe00604d765884fce4170eb59e03f57811fa79d55051dd632ac180d30405c8ec396bc4e1bd0073c98ff17ad8468ae15200a1b7de9bca4ef381dfff05d2c47f695bccf6cc0acb81662fc8bdfa552f7d16e2bd9bb2de2c2db0213b442c41244b0c397089d1b57b94d6fad2d8a3d10856034eb56b3778a6040e49ca192b5518df16ac78ed46a60332075cd6dd4514fac0b374c5b65da0a18a0123aa697b0c788bbe3a1acd2b3a700193136377cd0c22331b11dfa95a97948aee0c226281b0fe183c768c9d7886145acc5964a04cfcefd6a826b63a264421d1d24ad5d46ed3bd7e53a29eefb6f33db2e50afcf9f5bfcb03446b94ab9291d08bfd612d511f5e925d098f45172bff7062bc87ba9f239d5d9b2b5c7595829e3e89d01f1f0c448965d8a7381a91552cd22d490a10b0691028345894a2f17e8299c3c742eba1198a3be92d8398f9b538f5bd2b778c67c238ce04e9c55bed1294e7c5d10944d1e590ef5b8d4dd86fed2bc38536ac29ca395da7fccca0033f187d84bfe8e29ee7c1d6e0146e40c97fa6680d13c56a871e1a7a4930a6a30cdb1e768c1604d6fcd01f90cb13259774a3206454f866fb1d2bce3478dada2b6af0fe8ec14862c15d0fb60feb5c02a50ad9e9d75a9e26b2db42e6270add0ca1234dfebba302861faeaea026d6c840345f0c976991916a11fa82f849cf680e22593ad3d7b79bd04e49908f2e9a248d7f7fa42947ae682ebdfa72f24a162718ad13408fc7169cc5a584a25b1eb50697eea507dc784efbe61074ad1e099d37f93b712494cbea61c71bed4e31c8867eb1317a530b7ecba1fb66e936a3339726b70e3f4440d5b3abc669361fe120fda32a38e16f7f40034388c85b27f87919dda8205399ae1f90c96b5005e164664f750b5887852487655b5ffe284567d6637d2f36444d89be1b57d9425a73fa433838a690276b2735b26f249585bff2818ec3bd53272ec88d7602bbf5dd7d4907a28b91782608b3d5c3527f0555f63fb7cca96d69103a6fc09785dbdc638b37eb19755c17b647fd45cfce2e729e5e21eff329d0b1ecb0d893b3356da4bb4751b9a8460b2605061df22a019a0c327ec02751c14778d566308e9a699af979768c6bcd6642ac816de9e665e604a792524debf1252c3093b774bc88fa70e46ed5d9894be64963154cfd734ccb4c81affc49590cc464c46532e0c1388ffff3bd8e13e5b3b9ae22428a5074984326d862392012641c9b5a35f0270110d7fdf6dc764967dbae7447b08a57f0cd3399cc1050a4151925baf8d76cef586d9f42dbb0e2153451840af50030d09c39e35e5f8b5bcbda411451b805b405b52888ada90d93f5516b7ccce98bdfad0ca066d983d5ec0ec91fdb2c71654c28c2e7b05f14b04525f98ac114d0d38c679ebefb64e20632334d3423e06355d03d730b1aa59073078464f3ecc75454c47df28849ad5f2e0481b2c1b9ee454568250d192f4765857e4db5526fc3fe8e37c0b10de686d283f92019ef33cbfd646ee7252758a2c806d5f5243a5496fe2787f24d3b00be3b9f0a11d9b99910d5b81e490a71146ddd52fe9169718443dde8a19c655227abe8b262879b52c62dd1531901837e1770bb9768c9b2bc4d5ad63602e93e9fe977ec3cd9091263e7bcd08ccce2385fe7f91f563830e9b43a29dbcb325acef8274241c498b1898b5a372cecad6d14c0e20416e97e7b42bf7311ee7c077b77f73d84dc2cf6c7a704beec77a1445e1d41a1b70d09b934b5d97c5158e2456fcbde3966398f039a4914cb5bf8ae04c991ac5f58a12573840ccf2b7a6c0e77c7fd1594f82db7cf2fcd5cefa219aa2b98a56ff0b0fdf0cb0b11dbe2e13ba88d11e39d8cbeec97622819bdcbe83672ac5f3bab86989ae9e66617ffc38b34b019af235fe952491acdb07431670cd90d2cafa5f0b195e5e26ffec30fee73e8513ba4b7018be2fc673e1d0715bbfb3b1c98955968e479fe55a27e1c03353af4d55f1b55803bcd1ad85b9f7693db68d142d7c074d79347a8e42afbfbfdbc537bde384b1cd99798f5021fba499939b66fce7bf9d3cab5912212357d83e397239c8f2f8c64820bf07a164d64aad33f93985eef3712997ca2db25888ebd16c273cfc40f890a53beb384b2e68a7475b2e29e39b8e79a2cee6ce9c8b28213b25fbb9768daf9df15459cc35a935b24561d54653f0fe65d778d96986cf94967e44d2fe817f3f70d8908c7c0b2e81e2fb9322bd9323a75c56a8fdfccb51d0f09dc4f86a5da7648eb996ca9b88020a7b3ce610d09fbf1bce6afff342d4091453ae8f3ee21dddbb6e60ff6aa7848e8c9cec75b6558b386b016c9224cc35838fb356935c27d9cce05b337353a0a691b5e22282735b4bc3a5ccf257a9837aa4749d49b90be40bd16b6c04bb1d1828568782f49e594663c5d490d74b7d42db2f013419e1bdd308607ac29ec7f034a6e2b3479aa88833de3b792e81f45211cdc6f0bc3ee7620ad7c55ea2af4929df5d534ded1faab87bba43f139aeef5d8232301f0cd6573c074cd10f4dbf908d45cd17f1e5f0404920b41f4a751fdb5d704dae02649c824666df5d02e0edbb3bf44c796ee1b2f17d75eaa01165168d7d0a262733af7db86f7ee3a23484660de32097412a22a2f8760a98d1e77fe94010e393a01d8f63932ae497f8f97c7b21e59babc77d32a873807be402aec52fc25eec4d1fc9e864fb268eed07a2a08adc4a3ea529a6fe9df599f24a863ee2fe84af7077e429860a44927781baf65a69ec09ad18ab966f3dbf2e30f19d8b1919f87a814a8fac2d3cc8f4bcae77b9befe74dc2d2f29c689de74f98b5053c092230808a541a36772b8b8ee914c9e3d84a258687b260ebf24722594dc2ac4c5c78b6e80622014726281f5ad4bd0e290c19c6d065b56516a326635cda00cfba87ae0a1e03c46ac5e97a1456d4c8b19787a288e1874b7a9608e768e677cdc7d334f34b13f9d0beadaf069f6b20b6c6cc0e65c2ebd9cecfc1b745f7563ea3d0c2f85246a3d8b0030d31db9942323cbeea96b80720b8a26768f61485b26cf82d4375eb660f2aabeda44f19eaebf5d9e76ed7d23d186a7b821ac963df90af540f60b0fbc5642c2c9b2bc092d3f0c8150b202552aef3b94cb49b30a1b2d72293dbb0b516cce42d8e028cc3b117634836c9403deb79d1983a2a5883bc5281d97b85f69ee2ce2c1d609f02a4e25ca1577ba72080ba3bedc9cce26b9101902e30415fdb946e10f6002829fc6433b7f89e4641d965576297ad9e7e7290bd83e00bfbd06c46742c08acc49304adcb2454352b8c73d619dc06cdbf7c7190f902a13e389f4647b6c18fb5b74caeec95487e839bc9c546a5ab6ded5d039750a9f2ca02e7a8e046219034f45b2296f1b53424e86c09218c2e3e6c3aa8d7fa17ad5643e51bd0203ca4ad056b6bc2b40145fa7af8f268143249908fda5f904e9114c2905488e76af2f6d49a364f779272b58af75ae29aa4772fac4f9c98273752c305262ed57070b1b07231d9c388403b5e3aed21a8a02b5ddbfa797d8208062991406ef22ceb71b6da1c409ce50ad547aca3753e35fef724c2936ee672bb5645bda2785290ce84a88d75c3697399572a94581da1a5a85f2b8d440af838c202ee4b4e56fc823db05a2348a00928d15eca11a684018d850288689231446598f32cd87261930c7c778c24b071e295b03d9cc753e15dec77f545a749c01978da1aea9451bdb8db6fcfa4c6ea01c0aa1524ec8dafb1456f2c50a67e800374f2ba59a85d582ef9c79757d3960fa6558894bdf45a496df0e6fde25535cd494015fe58cd7a1fe91b7e991075e40e47c1a0b30ba78eec2400e1ce7ee23762b48293bb64d9a62b181bd5e4ab3ccd21aab661ce16387545f96413e9f721a82d85974ad5c328b0f2cc58c561cab765be15494255cf8d91a053451409669e4c0eeb37160a223231a4c90715213d77d4994a5f605f2af7c821f1b1457c6337d6ab853535143ce4b7e0f267395e831e5526c978022f991a4b511984aba82317cf0fbc09504627bc19ea53443e8fafa9174f8f38bed3a442eca62f0ce9f836cc0bb469004f4f5565b6c47d673ee57990068899200befeb2852446ba672ca27089a84802a20449021eceb165e0cd36bcea269afdedc07a90f45f8e0ce10a0c27e8c5727f312730df4ef3306ea3a50be8782000f57660c83ce011e08630556cde4c794d80c5c30c5e96bd4d0e85492c214aa9542771a03ba04fece5e7745dfc13f9af9a5268d44cd214f65818bfd19b02885b7664b11d6dbf02007964cf938526115b6b8d55b32685a237ff4ced1929a58d239c33b3bb471900bcb31bbadcd7439f780d0ef01e1fbecac84fac4890f7c71a8433edc34b0a8ba8fad63eaacb3349cb84c132d1a27f47424847e867ecac3d99c042281c10db62456c53be394a5068db1852b8c12576de7f0992a730a26590ce439a78c264a124ca49dd4ed9c1cd33172a153c8d263294990c05f9e88453de9519754d8abcf27c18d75530f460da61c1255608cb73525a0b2f3423e4380989cbabcf725874e60f7b3873c3ebcceab97e31cf1d19a1a2b5266daf3bea3487f5b81a0aa40ea575da7b697060dedead699f439c40670a3147154e13ca5ab42ce4698ca2fab907c530c7f6864b684474b4e723788376eaa585171b8277e25e339b23441d2ffa633805f3e58cf2ffeca1bc59c51185b4a6445e45c8fee160ea82b93013c0860986d2c1cb8fa72841d09c696c14c3c052d9511f50c5e8fdd0cf2ecac088fd24be38fdcc19fcd911d5333dd4ec0439501ef5109527335e4e65520401569162f65e44ba28ace1072d1c7f7c53e6bbecf09ad4ef4cf4ab2a19a651541ab51eec711bb1e26cdf1e49fc561384ea627c04e7a73e2f900ae7d67ba42e2f68001de6832189415d0e15793552395bed1dc4669301e8b0c454cffe75553b3c31840bda7585646bbfe6794284aee4879bd03c40f6d41a5445a900d36bda3e038410f822eb926fa07ca26ec1c8dc1e6bd2118f4c907d53e9c45943748eafc54558a5c2ec6697c1befab6d88249fb1641fba700ff9f7d522efffaf1d78c85f8b7205cfe3bfce7ee3fdee3e8d857d9a93771aa3f98b94b847cdeb2986c05ae351257bb2fae20fddce6969b365de90a312fa262bda7f40707d1183a6009f5a3dc7a5d28b34e53c78ee03a2f964e4a84c6a1d062ed4c06586c787a8f1ff94a597190ed483a3d0ddde18e79f007d2ca7c0866e86b1f6619b73a2c6f5d3c6b068b0a55e091a9cea9645796a222789c7a96b751414e21df8f94f74162e5a3e1b735ee776c71a88d489c2e6472da73bbd1c944e32c6ecfce441cd37048c4c6a190b13bf9e761043509336cbe9269f7af87a64edaed8bb8fe62b21cad98b8d3ed7345a67897377770f8034b54e735fb54525ddedf868a3503c92438a21189f44f73591bc8f94c2f053ea45161f1213368822366db91e6960d61dd81ab19e83fd5c97de16c3a4333ebe17619e8fce63c9bff33453c66b502a771bd5fa3a047899514eb5c9367a05f82f572b0c7470a8ed9cc9c791f72ab6f669a7d5ebbfa0b591ea83e8b621323179544916c8a3b61daff9ea9efd39cc91f413d77bff7435a1c53da7d38912e6507cad21021f2cf03f9ca9d56eeb28841ffe7bf776706fcbd6ceccbb9bea40a178444edff5b4cfd716b106b8e414b825abfb646255aed77349543408992d331c720cb805ee85a4014541d67530fce7ec03ae9f54cfd6ef9a839fd3b752fc4f8df09bd008f95c7df47e18164971e0b5d2d57737bf470fe2433c03420379b73ca8597675044426411cbc8389eca4fe1228557ddeeb45e917ac02dff4aaf52e315d830e8910db9799db1c0cfd4072cb1502d4f237b09d4a81a9c9c63422a79922b168875f48ff40329c28b2bb0ea63394eb8d41d9a2e769e054d4be535371335c556469ca7a8acbd8054580806c293e02a56c24f5a43f4681e7d8d63ab72831bb84c41b174e5189b43c1968f75dee7c92032f525817e35a4e2c324efbf8b488b57758e12958948a34660c4aa7fba4dbeccca6d5bc414ea10ae8af5c4588a6b78b4b252894c5d214b6cbce2ca0278ea351fc06a42f2d950af2a5cdee1a8b41c45d091dbd0e5099c81661d2be6ac9f6691600c283cd97cc09e5404f10f4f99fdf0c4aa8cbd4d4710da369420fa2ecd3a617d8c87654790b8480fcb8e41c639146057cd5067b67ded16e4267ac386ecbb5dad04bb0e2218d7622f49dafff5643f2e3b6ffb5879d481c7724d53681e03d5b105e0dc69c65c2602bab78ca2930d217d8f0fd3d8bd135e97e998fd749d96b4c88c7937f02234d85350cce2b0644ace3133f26d98147e051d47f80972e86b74f993444e992d82dc2d69cd02194d60c0e4bb2a482641501e62b3d8737540a476040ed9ceeb37ab13de793b71179d3385f74824db2f72f79f4ba270ab4709fc4028b137007ecaa1f1fbff517010f328eb4ca0d91c34e4cb5781617e9dee0431313addae391630dc133663a04b83fc7c3561afb58981c3823bab386cc84d0e2b9e9e601f9fd8b75067c0b081a4a56871372239a1902fb09499c71325058b9ced327a8973b6d51ec78a030430e0b68f7b8c00864be68b51f523c6a6ffeb99ad6c72887bb47f41e1382b05915f8f323a9c8ae683c69cf6f978f905224fb7f5bd81948b9cc9d19c9134923f33e752449057f01210793a70b8c39d3e163ac6943b8c105fc69610a6e64c545f5c90192ff3f8e65da6a0a397dfddd6af25dfde49711303a720f1ec2cea71541844fd1a8c69cc1292878ef1d40ea928100081cf5a98d618f502ae3b79ddff1ad4ae2753a58f0f73729092b3150dafeb01ce03786f30e4af1ce35019eaf84be260c4d852dad312b15836d9ef69c82c789911f909c0890d18659c635acba297814ada868b5b63f3ac9dd14849bb89ee44f93191bce0afa77358c6a2b417a7150f1095e918144e072dfd0e6ceabd2f30f1cfcb6ce43efadd0ad5502591614def3de21efc520b1436755f06961ed670c77c1090eaf0febd396593a0aada52bae2319d14bc4c0bde68d6d9f3c0639ab1e87f58f9a5f095e7178f184bfde9bd488dac49e6697741dd2add2c03543c2b0c637dcb1a1e04e9af8ea529c9c1a5db611d498d666123e05ffb657a37bbc199e7fa9b509ef2d027fdcbfec7cf8d23faddb8e8418fea6a7fddd0e734643ee877cc7d000cefd4622d5a24fb3a1b0399ad60966e0b7d09f7358c59d76a832190bf7d49fa4c4822f31dda17c6b9d0828ea8aeeaf3843c9e516ba2c9d7e0baa35739a2d24fb3778fe5859377d77dbbbc80f5e44c3f621769f87976e99b6f762347df68bd629c5a86dc8e6d5cf486cfbd1a1a6c85b55443b1dd69840422d06b64c642910d1b8885e39763758c3131331bb69d8886e7f1c71837eaa5a8a0fe5f79a10639f0948855d74a86f9804d793c29fcfe9da752cbe91c2faf91d7f08bf3124a2e90fdd80ea75dd8bc1696e59599d283f0372b74d7b4db8334d8918b4ad27f7c57f114f66950e03bb8251df2e574eefebdbcf8c79b4bf2b0b086c3b934b8d0d2ece31dcf9e5972ca0b143f93357e4ab0302922f9c24588d825d40aedc25746f85c2525c2f86e6fc2ece2178e5a80369283ada5969ae3c0b1a5d700f3902d045c99ccc534fd9e730b74b90d53dd509fe34b224b355a991dbbf1bdf37b779243e0e2fa12ca7cb11d8ee43fecd2bff87d09434f719e30e4e251e4dfbc0529fc52a9c78c40d97d88fe46f2f759d4aacb54272b86ac0f06d6a3b1fcce75a14bb7023db75e81ce4df30d44c8b1826032fc4cee12abfbc6d2aacd3c49de72bc56068c55ecae77de5987667685f6a0f15def09ea85fc7c797db39cf6efe3a9032d723eebb6b6bb76e36aba3e22642c19c31d0264cf26a37d79cf4913ccbdc194bcf7278138bf9e3149f8c76df193329a75be0a27fe25e4e523586f3414b09b4c13ca48a81166e3fb99653a93ac5192f82cecb0c244616d1ed27c2275792e499c5fcef1c6987b563dafa636457fbb9f072b520ac5c4a8c9f85a80237fd56b804528f0d73058dbc43a0a815707393cc5750aadbbc650f9b7e1c3658bbe38aefb32bc161784eab13782c1c5c1aff6b1f588dac11c977f19b57d8516e47029981e5b4a563b7dca7dbd75b083a7a6d9f028a414f4f87ccedb8b1e5dd236646d7ce9902cf78fc9b8928d5a821bcd1992eb5b27e006323f077834357c38563dee6ef0575204f4197b6abcb41bf311d6fa5cfa09e8bc860c272ef6c40753e213f621d5d11eb9929aaaa7e3462a1ff6447f38823d849071de037deb92877f47448ff58940b08e134d203f56ab57789d59e1531d7518e6040a5fed079e23408dc48a32c0852e9084df026737fcdb034be2a79ee2627a2386521b30e6d1e4117ab8b1d44b3eabdd84374b4aa712f36f8a4ac26bc9d5736a9433e8e75b08c12bb878e60ea84783a19d39e089592fb0dc5e1c689ee150fd6a2ce6306ef71c013adcef333ecae821a98b8ace60193fc165da14c33da26eb432a231bd35e3872d4e4d67365b2a128e9553bea3bbdfd68a9319a0fda2e44040c5947a2a91f9bb7380009dd00bc9d92a643407512b5499135e68715ff50c60f1a3d7ec33df073dd3c62e077378ee6d372b26b31054acee76dba7109f7ca9b284f8cb0010817d88787c00c07eca15e8186601355e9a8b515787e7a615999b0f4cb24fa71eab41d31c6b0db65be19eaab3b11409a80744a86f49d6060c035619c9cd054a757d7af442649ffb9aabbebf9efd86a8d7a5b3c5fab8ff14eacb493a7f750141ed84b4750772f43670eb732b96225d174ec343cf44b1491f3eb6712b297e1c3b9f26d4fa4d4d09f17b9b3bac26d28fa1b2706a03e8c139e89ab25db522988368f3b8415ca91563eb0a182057a75c4d7d9fda847f2fbaa5f14a4541d21367a677a75a71be2b9576a75cb788e6c37145d9c6e4ffcadcb965e473e5be16cb8a2347137f35192831641db9b3024c165aae98fc97a08ec8070530dd44631651458ddcd991c8e6b700ee5ff63ba8cace4dbe76717ed15c7da712d8258c1ef9c88fa1226ff63cc74f646d45c503662d6c59c7563e75f0b361562c292f0f3f2a6ccf38e7a5afc9186738dd4189c72e1da2d6b184fb0cf71766716d9a7a998876eabab1c4c25f8b7d1d26d1b182857f9c6c91c3976256079da91473e8d7a8383bf5405d8f1c77a96e7c12fef15d5d73c58a25b9803b77a6c9d8608f882f83ad99eddee3bedc57bad2c1c7802f3c35396c5ef90bf042d58cf7557ed4151e38083cf779163e663315df5e50b48cc1375a9ed25c60e09c20b38d54aac7e90c256a0c42b23ce4d2f56cd112d152f2a9e7e31ec3052a83ed89f334736af216bed24897bb7bd0e4a2a0fd833dd948bf3a2f286134a5ce996de9e91d822cb302c73538b164f690e9610ec07d757a9f6a4dc31429f8204a725c723574b97e4134c0539569d3954e714192ae2d07a4fcb49ee616036b150d3918d6d5f95ae6033141a7ef033b56e265868a04b2343ee9966aa6d05e70f368c9e8516826e6035b954115a20a01bab1aa35d26e44a4774de6ec773e5e8d3bf63dc3468eb66103280ebc5588db4baea618d3e474f40efe51eafd93465259f3f1e2350a6604e425a8498e03f28a108c2ee0a857422f83a1b0dd238a8de7160bc7096a5bbdd1ba7246811305cdcf57bd40c9fefc7cd23514991e46a070971aa0dd73060a137aaa09a49106ae81192191549f2802a3032ff971cdf9d04d925a2a38fa83966bb552d2b384ce9d2f5c5521b422a3e5eed4165979ee7c095699daaf8f610046867295dd70fc3e2ed6801ad55dfdb4a8e0909254e45211a2bfbb67756f471c2a45f209a1ba6220f0a2bfff9aa780ea913ca2bd10ea585d8e7fd7e52d821b1723fa29639135c22e1d4f8b0c3bdedd835cc11c4cc91de9c1c0b1a093c67230a856619824eea5e218f51f48c5e8341dbb9dde464ac4272a9369ce087442d498113aea7e997e4894c65b7e0486eb19c81d49cb1c76309dfa950788cf37618e2388101714276791541ad9518156851446cdd16c5d16ccda4138eaf08cab503d2f4331e49f6d1ea7505846048952a385f6823ce681507f8de170488c6d02fbed9447284cd7e5da9472e89eaa0e9a6602e41cb907b0f2376d0d9a59bbe7a2e5817833910300eb2d3f1d5901382880c6d58c67a9efe68087224c4198a2cf1a23686525c2d0a2f31eec60ed26d886901a2b2c9e500d49aaa8e0db8c289b8367e33293a6015e6844974b4e3c9f6bd641a77c4c34450680ea7ba8c1bf1d2477c9eee9d3095f12e713d5e2a06fecf104fc6d5942c169afed147f06475376b0d768f9fb2a0ea113862a152182128048221497489967a60beaa0b6d6ee282ff891fb0708f3d9947c0f4196bfebb3542cf4673ad554ec8fbe3338c2a015f75795dfccd3cc6236629d2b47cf1c0af3b51ec909b8314dbe943489bd9a08096375439617915b2a5795e56bd704e06b53520ae8fd7b79dae7a56d0e16fc8a8e79df2dd7bc3c609712c029754e19875b8e758a017d0c691a47ceb3c286f49711dae3b394e94d94061b06ef6f59c2ddd7e64d61eae76c363b0b9e6962e4f62891814e003fc28d44dab324ca437aba6798c1087ef6c15a4ec2d0283793031dd71cac7b333123ca5df63338c899a3e186531f59c062b529ae28bfe373d6dfe95ddaa51d437859576a926423ced8c6714f40a926021580229af4e25b9c76c509f834b15983c09c2ce020253595f6bde5dedddf9447d8cbe01428b588bb001fb70ea815c9ca96837f6a6b98394ea06cf02f70236fda9b65c9ed32d1eb01a1547e30e6f51794c787d867c8e6d7afb3ac4839c7d85229bc3963a2246768627df7693d4f119ac7f16ddf9ee5e91832ac829597ed083ba52c58205e68ab97a6eaa1665bda782f94d7d19f22f8fe158e629f4c19ea0dd1c3fe410f04ba118fcbc192943508d8526dab30ce1e2a44a0d055cbff17705f07f26fbe526b9686b1f47f7cf5980907d4eac3d64abbfdc2f141f123d22b0e93116b46cacd760b077d892c08dc6fb426a4b9ce41ce7e6ac9d4ad5e4217528c9bb6d84016b2de3848e62cf28603a76f193d3b1bf6752aae4f86ca09a1198d32bc7d95585da9f1fa2766115502ab410f07033dccf12cb533def8b789a993f083e6082c0e296f4fbae014e05d4e42a1c71bceeac98c8fd5e16c10bf21c16f863202bc0b6dac7f5f497ea69deb66e74c2078fcebb86ded8f779686f76b31096032cd532d4e618e68a7ff71979d37be69ef14d3833f55d897123a60ac5b46df549edd5b6337e9244697471116d28889fd742d5a4246a304d928f8d52e2e2b942fcb65f44254eee825dd3c3e4acf69b8ac34a3cfb80df4c764f46e812826608a477d38f3a40451d19febb62e359b7a9eb1b0bbc904ed144e12f69d80a9f275883d3fb7d7190fcb9443d9efd7eb1965f3061b51e9989d3b0fa48e2284879f615e31312b1f255965777f741e9321f72bc9e90cf40ebd27934aca7248cfeb51525551a424f06690b900d954784f18babb456c03027406ca4880ec3a51386d76f1191480bc5da747dd3f761698f430038ddf8c4b897ce074142c453310337312444d4dc9a29fc27dbf3fa4ea0af176b9313f20e9b95c6201637e55490a5ea03807e209788e0d09ce78df28724c66ce33ee43c7e068bdf654a2a3bac29ff66561eb2d1fc5483b786636945121168d4137697f5ddfbe1afd1c0c1ff6cccaed364ef7613c8e97e6f053906a27cc8007b946a746cb31a3fefbc6873ac1791abe7377c055d5f61987d23c95e6a922ab7ddc2e3dc373447aa10e88cef944b6ffe0a58e5dc09c0e9d13774e47c7bae0d9cdc5712e7f93cd1f57178c827ba115a9582819a9c9b65509d9dd2b2e8c4bed4e1508835358488775275cd7a894301e27e4a0e9661182d1c0123e6e08c36439952caa47899c2ce384a114af48d52b35970d19525d71c009cc4a1547d79fd6c032c24d00ae1d9d09e0b3d9fcc401b5c3f2b51ed30b888e6dde8b9ba09c7e35d8ab012b1b9624967287b48a28b614331d1fe02ed4b42f573dd259410b30d96630fc750558c1a80e03e29eb420ec79cc33fe4f315b268eef473fecfcfae46de9e91390b061d3f7502b9f6557c5ac57ce6175d89d459632ca3c3a8325531fd154a8aae0077dce93f18df3a0d67b6fc127100b4b17ca8d225dd95ac35ec7e34d60505203205568ad97bb0358b04f5728a139f99dcc2c9bb3f86b6a9d41f9ec3238376b69c7d30be17082f2da96c6966496449c70dda1d4917f0e5067f2c382a39dd2e98a5a5d789e998c01189ca61b8ceac52b258c811187b1dab3656b636056e54f54c4139564a4d6f5f8cf64803f6b93a4085f9773d3540448d7d52675f7e5c962cd88fea1e3872070f4e91263bb1c99bdb31146df6d947d99c9bc777dfd931f10a878c4e46d2a0a455294b58fe1914fa050831bfd9783da28da1f0fab1dca99fd94fdf5f843c70b6e7f312b3da2adb8dc814fafdee3afe3a98f26e21017a466c3add0f31cde04a03926338273143ecc71b50ed287e214cdd3314f61250fca6b0504a7aad29a1db1048386d7c19dac3f91f2a784c9652182c47b597c766b5a9ef36a269e45769c1750e72507fb23e122bf5ef0ed470b86b107762e12b78d5b462e9e117b3c114ffb61cc45ea1b0947f89eb9f5d47d352e3a3395dfb24374d01b393207d4a589b6cc98266e1d405c03e6ae29de6f7d68b9d871bee55ff8c6d5c264481f8567b6d297bcb76c7e8fec298d7a30cc7513695785e3cf402c2a5408ba5afce9026b23e19a80760a14847eda33a1c1dcb39de29a1bfb7f2d42ecc004ae31fc955626e03d571bf05883d5466b7d6b59ddae1a3e32e61c9f98cd3b2b83a50eb13a10b1e87fa080b2fabeeb97d68208c6cc7fb96510a403d8055e57290621959662f067683fff3c0d1cad38bc76397e550de23ee861146546095a603d398eadcfbd7c3af742b98270af52d51da86324b414d8581658633c84b6c6fdb1920841a206e6045fdba2024c920585729fc6b0f3798f2a9269f03a1475ed65e15db69f4180e9cbb62dcd90cd11f10e572ff1becb7d5a3879ddf30545a546175be462fb94a814a1dba83a28d7c72d65a5f3d8c1fe94cfdb723a4785118425c7e42744ade894feaaaadc524bb8c7ce28705ada376c2a2a137d802c09812bcf5f176a4515585b382018926764d63998ab9e0caba958042925e784ee9f64d8aced41f877780fa388055e3c9fa2c7ae7af8f444cbcc30faa81f8d6908ec37a87062cf8ad54f40ce7bc56217bbd380f03be3965be427400699cb7d1fe580c4a5eaa947a7f1d8295b21c7264fa3c809cbbe3aca43b07d5a9dd77468294215228d0030edc3a76a7aa9a1c6e99ef0c180099d09bf5b224ce44ea44f2090abdb59cf695f7048b610907240a902402b85877764a0ce7e73ca8559ca94e12d084408203cb934c76bfab9d8870369c3bdd0aefe8492c7d1e026d8e175cc0243a9e1336356e6adad84067444a7a2f5627895b9711b3da8a243780bdba11095ceb16771c1a0588f724ed78c9a123acbbd959a64be78593bd328401c67cada4dc8329d91d825b6c0ed5c57a61e860a146a38b200829c18e004e710570a474e846dca896ac2f4e71a2475ecee31ee2793b452b487a5f9670d8427b9533531bcc49f0a039f5db9895cf9272ab73e89acd6f6ba82a709c6cd603675ecb1679df59593fcbda41a85b228c83d7f48e2ff0fe6e4dd76050459bf5af88ef0bdc6ea9021028e996e2ddc37f78bfba4f30909edd4abcb40355a8464d999b6869060b46f222c5f264aa9fa8e9d19ea0eb1b8749c94823291fda74f188ac3d668921ac5d88f080e06d49c1073dcd3ecd2c78b5e79f01961775b1b8dc107bb582df5e6d87eec9070a970de32176446080e4bc4b6af9e63c27e0ebb3fb76f85eaed6a8ec19fcdb62d73e5fbaa99b563c8480afe0293d96d0e5196e0d84cc2d746c5f8a87a1a717f35cceeaa2604b54edad04cd1a42a291d834d39702257fc7e98ce0eaf83a23ffe6691bc040190335dfa66a5c544ce88e10655024d6dc31f50ff125faee8c7c501ef1c8d720fda2ba1bb9098a1b42210f635c6e3a1691773f8e478dc18164b01a6ed8f301ad39d4b3117c43425aa66d6814929d9b65392ef4a44776c2df41ade245170886235c373136cb8d1b52127d53ee61a3c5d23a48173eb7f1cfa0a410e199d9998cb1e43c6fdd83739b3c412684553515c69e2d75a27b8ad13d8d182dead18516863d641d6356e99598944188cd5c9882a58cee2c03e24649a572344d7384c5a43c62040d8eddc1a20c906a4e8dbac9380eff9ea4ec5ec87f7e5977ea22ab96301bc82a55d298a26a892f132e9ce483d54cdbd3afeb9f20c2f2ab16978f95a2b973d9916b68c073a3798459e3a7c5be732e6b2b2374cd1a3fd8c5aa19481380aed49e2f3af4c300e33677446ccda4b2904962c13450a3c7ea80ac2dec3c2beb6c6cfc4491716123aad947836b243611f77d49094a33e093299122ea9959022e448f293447da400ced024ece2209720e403491a0736dd4580a4b812d185536eba46fa421761af32fc781f65663edc6828d62da114fc2628ecf6a44ced4125f12bbf2f89730fe2847f6cd5efdae6059edf0c5380569a35846ce2c1506bf615c6dfb89e7047fc6a1a7fbcc61395bdbe42313116ea8fdb51f06f471a77cab0df3f9a6975d034d6e4e0a22e1205e6da6c32ec5a71533c3aaba2d32056c81089abeea3681f1af282141947d39b2302326a77075e6fbbe081e340c09de8cd8d99e3b726f45b5b8f93c873c68ae6ef5e8f33c6e7a39dd00cb6794d2dd147382da25c6395074a5db6dd6827a6403abbf6a4383d299b011a2f0c952b9b424d48282243160663fb210611097fe3281cd968273c999259c0bbccee3b20c99c4910b9e6651700344ec419fbdeaae870fdb47efcd31000029bfc61647dcf705d1854f840d99670c0d0004a170e34819cb8d0c324f01e23ee54504a0c1421246a6d866122483ab72e3c53195faf8808acd3d2b97e5fcf5c7e17541e97dbba6cc96b9a61ea3546a113cdb996819ef5577f424ea029148e15c25ba52ca7c0a1ef6c3c1e77f13f4669986f36749117bd4dd4bc139a3af2e3cd03332e9c8ebbb2e1251e461c2ede91688e697f0d1c93a12f12cb3e94464e31c2fd2bc02458c402453c466de7d8b63f96b8f38f75dfdf8ff336f2fdbe02ab21677c35624e69af3fa9e9d8423ed3562f10fe66a7f62d7a0137a068b305c0847e56911b3d9cf829e6389d79d1ff038c2b47d5aa0e2e0ef2dab388dd19d466b53dad88157a8207ad2e842c0e2d23cc7c745c2b8634ad696dac6c6d239c2a77052d11968c76fac57daf1d814bde186e9fa2629d97cc7bb1183115dca767d9d7285623cdb819566307d5d6f2c2cdea9151f7adf121d38ae8918e95afdfcb53f8deb9e0ccb401278902bcdbaefe5ad554c47d8a6d0cbee6de8639006916beaf1b684519ba4516f006b18a870a0838cf87870e622b6d9277e7b303c2c603029a2f3f0773a2f33703dee077350966a70608f21936691ea173c3a6a9278cd3377821ac8d337608c4b245204c16185a06ff6ed0596ec276d06c250be7652140d45708a72d15df9042a086cce12aef9d5fba7da55df1d23d2e29726e9e39c8ac702c9a9b152af56350f4fbf435bf64bb3585abfbcb1c8c1ed878cc32b7730007120e347284d024d90eb3877463ec324aee33b7ac994113888474cf7dd1175fb4f0f46b771e4608311ea60a850f28b2d39d05c81b60bd5e1b4696ca8e00a67c7ba44458110f904ac4e7677012cc9d7c9bbc46c7a7b80edd3fd0137b8b041dc9d1977235f801dac99dc4420e40c8358b29495fb6c0c80f25cc2085eb24aeb21bfa73766b9fdd0a992eb3b0e9159c5e5c7683210dacd4f5cdd1555b80adb836850e101ab6d0ce601c7481027f949420d6317cea5ecb655b1140b55cca7c7c666841fc801e8f02eba898c43b6bc3b7064f66892f6cc159d77f142d5bd600db1adc86e2860852e2df34ccc7887a4dd6581ffb94a04d4b5f985115671473452c8a07a43dcdc5edfc83174c16a5560feb9187cdf258d00668dcdd5535941e9f97601937c50191e56a22a375342730221d74340f8e2812a1cb7ee1810da65d033c8223fdf31996b525b8d932d0423dd6dd3813ba2b8d3fc7b3455b515437105f658ceae1702543514eae09fdbb188f8bc356c61717924bd66b0e88410dea419c1bab393e77560c1d3f59bae593792107e533af041f299d17e2cd0852650461997d37067be579e78f43ff4c53645dacb341d47c606c5545fe07ba4a441323841cc4155e5123df665b8803d17175e381245818ff6ce75de7631a32e6d6223c0a63a73504cd923a2048b12abdade0d67d48533c4a1f7083a0a0d8b5a2ea2e1c01409450de25e638e7c88cb0287bc1246e3259314133ebef29bd490a800076d7cf0c23bcb3a17a3d2caa3fa46ff568d723c79b42f7eaf75dea743bd14f85a5f02666d4ee4ebe2ccbc1eb61987441549ad03c01b11b9e6f10e0314a5a63b221df9b97064da6ab120649833bb52d6c27cb9556eea60d07f693b01e5ba178888449cbc7f2005c06c4fe2d745b0e53b2ba947be145371d4902c19588130a7fb598d408d351c606cea5c10f129bbfcdfb6be85d94d97020f3df5f608be67aba5ce03bbcd9cca58826f8841b5a3917e529c742b5092015deaddea5c1396b69b2b4797d9e90ce2856591b3579a7670309286adfc657c85153870e941711c17a71219bacac02fe398bed94f20b99c49633325d06a281ed7c94ffe4ff0dec69f18ec07b86caaa4c29e68b79b482569f5f0cd6675202762875a81747b952d51d7db752170d30c6be2165fae877f8a9d465e1034680f903ef372c35d7fa037cbfe1711772a952898cb5c12ceb7b235d98e0d1dd7f9fd1267e9257e9c214e3a4a0c1e9dc0f100c35e1c2f59cb0c484af7d9d08a10f4a48480a0f8674fff81ef4dd5084750899be3f36dd03b6a28739ec9145b2191850cbe16519c2d1719b53fd2c5aa0a563f80ec44b151cdf085063788ad75c863c2df9a41de5bd4ebc9792b360c15f187719c5629f28cd851296122138144264e1b03d12a3aa30cb42293bdc1ef62fd04f6af73a4c39afae5412231da4dd8bdc94cb0017610f73db7b18af3e8cf991669a139ba820d7362b80856d8955737af8c67e14a60c52db9514fc03e8a3470930b1820bb0dd7befbd90a598b55e356121de26921c4d6c75ac7858aaa88af0b45fb0d065b4f145e732a0e58c2e7cc7a7932bffe1cc958190759a98c1235cf51a631c439a3188534e008e31d64e620a79bc207f56140f6916dd0c382e6c9a67611318cdd15cf10a0d2a8a682467b443b13f4573d93e70889205e6db4133ec10fe0219440a0bfe9963f7f80b5b1ab2d12f0d513e215006268d4f781d6d757daa09beaf5d74ad93a219d60541577517be3e0f412e708ba3b9ac1480d1b9b5858752bd192d01a2818c352e37e3cb1f7d63a304c74ac2dc450ee0d9abf0c8e1470346a0d358930ddc105a824dba01e9115209910554426cdc94f2c4e26b0587ecf5952cbd21330a46144e0e60da0691ce486564afe265c873f3eac63745041e0830ca76a813c684614fa3cdc372385a84009cba4d323ffa3adb9c419c90e84030fd2096f799843f4efc4e7c1a0ee85c1728fe477b5a4c988f1a0643716e59f3830bf4bf4192c25c38116efae72795d1d4909440f79d30a0518da168b1c9abc064abbed325138eeaf8d577222397bee8726e7b81977409292b2106f94c9c654e9ee0b812b09f4a9c052290a7af269496e82dd5b25aaaa9beac2a9a8981c91639627dc3f5d0acf2ef026004ba0df16d22900d4fe02c22240b70b964789065be391ac682bd94d7fcc989859fa635033feb1ffe000cd47074bc1d1a59840bf2114da634c16241567886e1fcdd042109e7651eb3f535f0ff9a00f5239e877cf9c95561b71783d3ca516c9d8f2b19f8fad82f966f3b807186133f458f0306c241789be73be5f949e9362adc4caed843cf8fd02c5c35b586be1a2b28052b55b386000a2ac969a017b9a42d21557ca2463c52ec3344d3dc853a0b79e454a8c360530e9c17eb3aeb45297dde1973e239eb25e2b2454f08feed52cdf39de29ccaa1652ee61035b014010c628871a384f1f8677a854e515e6002a3ed8f9d61371760c08d614736a735f9aab205d961a10346103b30926e0bce70d6ba9ef241466af5c280ef6a451c142a1d295207964b6b453e564c6c18c524264892cafcd956eb77c5bf05ee69fb6a1f437b087c6f9f72d95a464249eefb8a62d3707d83c834212445e6beb9018966776c49d7ddecf6dc6bccf89156d58105ca1d3e09f228820907a41c37fbdd0cac8ef1f056fd716c73c5db579d0b86b444aa3c2d1434888632f16a4bff9d267f2cd2dd36a5ad87f839277fcc3801c00fb908691b24f02eb28545e3bc0e9790a7e147d747855d8eca63851009ee41c915d60d3d55e2330350a6a5fc355e0071823dc22ede35921d28fdb09c8203004ba2f881d5056d963ce1bcfaff2b28e97ad3f112eb2cde44219f089b28fd5100c31c075916c4bde8fd8f195a418aab4d263b43556d51458ff4c22134e110196522d1c301f335cab8754eb2b00ee8fd021cd60ea4bc019ea043bca8c56aea7b7eec0d44106889b5b6f0f733b7e5acaf7c630075a73a0ef409cb2d15b8b45f31952af9f1dc12da12c9c7426f7e9af91f1e4a9d29670e9dcbf813dce619df3d88cc25cf3c4e09dd5585c8ee65213439bf55434109ae28b37b25582887136766a8537561854ac736f6ef8b65facb5217acf69bab738801316651102e53dbf11070c4f11043e4a5d74fa77fa1320a7c95788f7e08c040ce611b4e48c6d8c07e43ef11a98dd210744dbd65acfb8883df2a626a1e9f5f5703fa0ccc9ba6c822818a00f85ebbc1dd6bb76e48cbfe915db4ad9583ae104788bf53054cda965f09c58c5f96e730a507f3ad0cf5700b54953c9e7217ee75a5c276b75a404146d63947e24b99b1e6815cc0c39586975000e35135fc30ba6c148002f712af40680d458a5f8d4e765954ba176e6082c6bdabfcdce365c6ec2d1917caa5a2dff0148b98662824211c641ecc19f732d666b516ab96516b3f05f940244f3583636c78e3705c9d61fdb06d916169f29055464668bf7f3c220c6737ca444579e9df543f6e5852ee9f584561b2dc25ced85e5040da8253ca18c580862d68fac83f33ce5f2996d05c0b83c1dbe26ca004144cabe08c8819b15d58b2e918031b55664c93203242bb47f466b5d41b7c8ddf171dd83a6efd1fb9e9520aeefa577074d87bb9b0f62a48a5887f1fddf4d585c156d2d61ed83d3eb073c98a0867c2b1e04721e8f6bec86ddf7f832b5baadcf2723f80ea7944701946d9a7ae00efc11189eada08ca4632b6cd924bc40883fc00362ecebdf1002c03bf428e51a6ba2efc4c0dc36421e4e0b1cb2979c9991b34f8b28d21807829efcc4b8e292170853bbe89c3612845540d7471f7f8b098076d9a57859786f7e57a1bee2531a3be1b940d3da67e11a10cafc2c984cabfab7e96f8ca9eec6b400a25ffe3065a045b4219db0da2c2827553b412b8c7bd5ba9dc00bac4747cc68acf2c7adff0e36281aa4ad6257cce16f828026261e28ff4adf830749435b918d9753e9025c316a838c21d7a3a9b3f01f5d02f055b653a564676a5e4b02b1ecc9ffc3a11f91b0597b02d3c0df07de0c598217dcf973e24342391197d366e1491ed91e4041524f5f6ca9d3f48cc89cb23050e5b618946fabd259f9e01cc7d507fd967c34181a8bdf0a26084f22d941ed83b6caba001c9ae9f50f099ed2f1214787462cd021f8d1660bd5407e1b35af8e7bdf1a9cd492e72941f9579dd05502a93999d3141d555ad6060de6ed4a0c61516f384ca41cf744751c48be90de162578d96e5915f35ff2eaaf40c509b8b48875c98c4cc3ec5232e967a154047361fdaf82f064f5a3168fc466b5f6b15bb1cafb75b5d65be0eab81a6ad0e66076c33541b4e2f31f89eb49974d0f3789e408000b6ae537f2aef322301423173c3dc848e324910cfd86c8f14ad66b6c5542705bbc54afc0d026db771dcce947c8ea1c72ffbbfc24c213a00c0bc20e3c7b6c6b4a11010e9ba21f34a32015f0051da5425256448d495dee0f7510e2694f027e2154e5b0c943d5a6dc13f9d69c6227b7b9b4df0ff071eff04467961ece08095320beb4d89ee47d27e95f1d65ad03d10f45a7606509e3b1906bc923f21747f83f52a04d2b187f36254ef31e0307ce8753a191742da63655e7a641460fd0e9f4f479558027430048a6b7baf5b30d4556d3a058d3df9b0a20ab623fa40a90ab51592ba7d740f589dfce0d3a4f07c0cbeb6c2eea05d544f5df99ad35940fc05607cdca713c8f6e3288e04be5e398b80b563c272fa1e7a2f42b56e532cfeffef7f37193511215bee1d400bc50a5e0a19566bd7dab3b6b2e08597b131437ad924314ccb303663c0300c6c55c330e4ec188695342020578dce18b252780b33c324b30f4047aea7ae56ce66d8e136aeaffaf560db623301143cdc074cd0828f07d6cb33c80429a0acd65c497426e0b1e14b790699c00319cc33a80460e492041ac1a45cb5a5d9436ad8b6635c78a6f1b43103cb759d356637c1cb19c230968f2db1bb94008a8c1dc3ce611c864d91038927d8200b0f3081829f229ea00528a6d82122c592510b7ab8b009c1960f82663c42b98f7d18ad5c7059c6f968dc4bae9dc4b76ddf97444392c160df97cbd7ac9b4889a6b5d6ee42621b8da5c770f9926b8b098f463b0e12ef235dea5dfe99cdd1e957721ec62ab59452184ab17b1f13a88e68edc25aa0ceb14d6ce80390b5d63601b240d6aa62526cca0d4f5a1e36ae19999f942472e0ac4f0ef7c3f178220c537006529e722f258501d6fa90380eb4d65a6b2d89c4713f3e3d8433914a265b228160c9f2e1542a1b9e439d5052a22a255c89ab304555a3034a0a75f229b50a0b40b97eb696b2a677b7b3e7cdaeebbaaeebe84887a7d6f7ce90da3db347933d3afd2ec67d361596acfc7db8c4ce6da3ee8e3bc23fb17a37fad17984e564207c782fbc14b40971ce91eefb047574ffb08f9a473e34d9fd4dac499e21427486c8b9d1e921b95ea7d3f9fe5997afeb863e2e7bf5bb810a4bba977d200d7883f5335bf5e1a883ba09939f6e0913d38f6949aeef261dd442dfd77d337dbbdf4c7fb348a7a453da11f2a3234487fee4fa26d2303a2da47792746b6606f020e9d6cc1fd6e91355926b27e3d53a8bec4b190c24eb099b64ac4c498624395cbedaefb6c6c834f7556f08126b0e41ba3b2da44806492e5be7cbdd9753de9d9b30e03baec926533338e48072ac7495ae3c3ee52517beb4ab97a1f892ccdf3f3caec29b7247e7b6d19d59e3401d28aebc715975515217d52620db2924d866aa6673ab15fb916d5cd56a9dd8b16bcf5c1826e3aaad0944056a7e62d47523b2c3afadec34b9ee19e5b68b75f6846616193c974449c7b08e4ad22c9cea8ad0111d15615de78e3a8895dc36c2b8cfa6c292d59debb630c2084328e7e0324a882da3bcfba351d8469315cbe095e95a5350349aacff5922d36329126a640e75921f9624a9afe1095bfec8b24d93383ce9336d9ff2ec9ebab0c9736a5bf3d43459bf4f10870e364dd6d3a2d9aa0f8baa90aa034693b5c8f4648623ac090c5351935567a7614caf9ea74defa877b8f43e3a056f78e74cf7ee6736d1225ea7994a307860f0c296b4c88b6162cb4e52d29ed99a39f5396318c05364a64c4fb44ee289d73abb7ac9897836a9999e989eacbc91b7799e6702c3f4c454d4309ee78d47f15e7fb0e14b57cd525e411aed1eee9e65599665dda9cb5a878148b97d056fa4e09869d2fb4ca778e7516370e896f7fa1fc626a05857d8fb0897cf1baede1c4a79874b99991a92aebaa6a3dc927691eb531775b126719064ef9c934cbabda5877d903eec72313f54308329f215e956fd778f7e3a748cb5691b03db3e630d82787a7ea8b5e33c5c8ef06c92db2c96f928c932cc76ab090085ed97d82967d52a4d8ec093844b0dac29cf209e9c2d0a5baa82b663494ee8842ca9081d0aac80c20d3c1a5830cf20121cc9be4082132021c1111e179694679012615c9125c196386f8402b94f092b80a3f651428aa7089d8e10fc70ef1f70a3e172c92c61d2ad994bce2aa183918e248694806247092224212586581d3b3b4ae87c3a44f0330230bea11108b1742091e4a40551158830623f2c289182a705a22d9c5c917981688aaf0a444894343105a22157d43aeab85ab939b739b5acbbc35a315bb1da9d611946bbbbbbdb2395aa40bb6299b68db28debb88ed3bad136f234efcb3e0f0c67ad1848aa9c2595ba3dba556b9a9e37ea3cd2ecaa20e3eaeec6eced2ccb344dab58731c37bb6e761fd75d63ccf3becf0badb605c9cd39676d2dc3e69c73d6ac0a8008ac4b6cabb5daa982afc3b0ce6ad38c61d9c6cdee1bcd5aeb9c93c3b48cdb3adb6626e3cab29ad59acab80cd75ab10edbb00c0b376cb306abd8b2aa6dd9a665b8721db6795f4669b6c4466996512ccb4eeb69966559c5bad1c8f3c01d300cdbb0ed1e48c22aad2f813b6014c3362c3b65a70c9561aa9494300c31ed9ef8d1918e94c5627d14d3eeadb0642cf515d32895c096c5e84966d846378ca706b42b88a373bd4ba6db5e7a5896c3a86d6a9ae4d1ad7e3f075ac301a60cfd4e26ef3063e857ac711de67d19a964356b43266496759831f46538c176426d282a1aae3ada15084b656659a67d99b68396655b37ca918db40b789a0766f7405286812c934aa55206964c5f3d9d50df0985426d1b67527d29554a4a4a18862af10bc1ed9ef8d5918eac6fac2c56a57413573e16c8dd5bf934968d05cc81b168bfb66ddc8acb87c1ed9e8b04680c3007966368da05648039b21db04cefc9a8d445c68c4f071d9870b7eb4844294aba0e890e9828125e8496ee3071b23489a0b006a023322802d20216465e254582a3831c5cc1e70b46b2f0b9c2a848087a409dd0a11698203074852a78610a20e841169e40852b50c1881f5c416407afb28b8420978dc494440389c0089d453769a11ea2ef275d547a5973747caa9059569e4c69598bd897d5485991645ad6245549a6412308425d527f2a506d528732ad44f549a6b43a41a13eb1c8a8265ea8214f32ea1867ca94e36a51e64e202aa43939f9740bd29c30d35036dd04d29864d0828a9c97b5278134d6b272490437c8a597409a124722fd036948160c8116193c08d2805f3fa922094039afcf84799f4fb82e8f4e674c0d13fca0884fce6b6412420f5edded1672978415b98be22b54f48c413b45cc2b8ec8c18c80040f0882606b514651530d30ce0a4e380ca332708210582083202c208ae1510512454082892c8060c516a42805250c0b0241086a38a573124141064a92e04011139030bf9022043988c1174f20c2138ca709269c56acc856c87d0ca4698e0796759723b258c9d89bb3c2078c70051d41848bc14eceae3569d2302c40b451bae8ec30e0c0722f691326bd3d6bf26a81a54214c3c0c472ff8126a931deb34aed2cca194592b3ac27671f3bdac4c5851d8d3c7c83b9daca4219b4a0627bc9d126d9a950763a34637088d8c20e8250a1041cb882135ed929d18c01c2094239288206827461c82bd3f2c4de433fa922095784f1aa6f13111179d34c3b9a0ab659bb268245e519744412b974b90431e2dbc1111ce084e0852daca6852878d1c5500984b42e58ae09b7c476577441ace68325582dcf20215514f97060391c7046ec268586c49e9af090e0191141c8cef7013bca334848111df8c2480996cb33c8882c6c3976cb33c8882f4a50e2bc51e9e5922341a1f31a0a3b201150a328087d3c207552c8f16cf071506832724169e3024967840a3c8d0b21ce089d946c0868eb028849018976aa5228ca86503d051d8c0828340a3cdd9a1c0f48433b8dca02e7935941b4e3c2851db1c0a5c09a9c70587c914514bee0c1c784fdf244c2173698e20b16c4e00b1ecf0936952712be08e2d34bb490c4c7065e0e18ad91e9cb1a3464fa920618327d09c3e894e9cb9398e94b11d3166d4a656a8c4ca971b78dc2e31a66cef0b5a2a450a76a6adba55a6b773709fcbc51871dd7db73a8ad09845bcb1aeb2a537bce90d66e1569be208176c550c21f8b65a94c4369db69e34c5c6755b3ed8fca23cdfc34f13ef0033f90e4914aa392ed32ac5a139761d574da545a0e610d1af2b9116e185460a909ab192a953dc36a0a05435155d53763b8dbd0f6359f99593b75ac6629213df67a9f191fcca7fa84aad5e4b69fccae3c3333e383f9f8cc7b292a9414ea64529166660c2d2483106fce79caf4669952ac76f6fab323d6488b6d35f4dc47afd758bd05b0c65cb52fb5d8dcb82e67949dce18bae6b05a354ab1ada42bc3b4bab500364034699b6ad54cf344b74e1b61a33aaa9ea77d1b485337cde36ac573ce19aba7aee9962f36b94b1e79f5be3e5eb268bae996a6a3a05c1aba4373539026057e85b122f9b4848239440ffbee154fc1f09e48697e5679a68b6366d3bdfa890878469dbe3aca457da6de89ba3879757f6859c41c0ba80ca7ab6e99f5e413763ae1a9e2b8e39263a13bb54b611be68e3e88372ead8b75152e39ce844b6bc38e245d2ed64b19d61dbf724b95eb6a92b2449c8cf2544aa66150b8a41975baea13e92a656a2bf5f1de786934497f0310aa90ead4642ab915567d53fd84cbd0744e3cca0dafeadba7ee0f6d87d259b8a4b9714db978cb672b83ba538adcff2898827f68d9f4558eae00cd8d7d945e7aca0d9a4b2693c964327da69a52b7a99f502a5cd29cac7acaa74d6d6a9390c93489da7419d2c7357f644cd364c2a5eaf6333575baeace8c92934da9d2c954fa91d9f648d8c74bfe76e84fc86a42429912c994c3805cba7503af3f5d6278614b8c665cd27c4a494969516c3a739c52525252caf993288a628ccf8b6366d55b5a5c5a84a061e4191eaa5421ee25e16d9fa35c25a2e69ca347c1d4c78b1ac7fec68b42a91c03c77b931ef104054eb2c77d1db87295bb42a3f2991e7d2a37f50986e597274e4e5d03c77b1e88c303575444958b675911c56b2a7836a9928d38c414f63896954f3035b2ac844f85357c779fca2788635e45fcb2a8baca55dd97a3dcf247cdf32f00b8fdd393935b768472cb5b887cf28c9734ab006515f4e4199fa10224347be07622a5be14384a792d2e2da7b9a5a5e533ed91bed5ea9eca9ce94681345405afa852a9a7c6f1134ca5c6715eafa94741cad1d4368e632ae4c01b2a47f910459fe7b210a3600dbca1f219575df22a77e65107cd334e67c47057f95026892b09396713f19f3134c98c11450a4e10070d97a127fbe41e2479e5b347a80728af7cde5839cb5397c5438139cc6bbc06015235d01b9c9818af636262626e700890aa71992bc40d9a03f0981aaf356aa0630e1a9efacc2cf75436bcc60900448f3ad630e251b8fc51f3f866d224ed9ffcd324fd881b08a419c7019c04d288228d5350e67d67b8e30dd54b9fe133730d338ab7711b3ed31ea501c0cc716c6cdc86d7701bf0cd911ab08d0d9fc13737dc86df14e0368ef3f2fab3e18e353c7fbe6cdcb1063cf260e333df61c3330672c36df80c0672c4e686db702005b80d00bcccdaaa81efac2d02b428aabcacc93e5c19f5916b72fc04c3975f1e55cf64ae103401780cbe21c3530f6f69ca2857b9a529c3fce50a41730ae6190c9e4d0e0097023836535f790a05e52c180a8dd405f0992a80941034bb3ec3a599865be2d07071f20c2bae5b06e032bc7f52dea57c0617d80ec459ad56338d2343860c97182d2d2e2d139cad1933c84f9066c6675ac9ca8a8a8a8a8a8aeaaa2af20cea21ca1e0501f009d200e0495eb9ca9b60228bbc72f14c386182092986e49967500a82f4642ca7c01b2b1f1fde71b2b0b0b0501baf00d7c66fb8365c861b3e0034d326358686a1b5a9261c8772949721b5f1029c870d3c6b01cec38620b2ea37dc9ba0cac5abc2a52b8b628d7867932a9fd7872babecd8972c5e75556ef96293c59b5de56a9fd794554e8b54546891ca399517a52e4a45e5a8a7c01d56ae127ee5e187104f4571168926513cea277087958b78ccf1f2f0338fef9f793a2d684712d7a488519fa900b83317e0e2bc50b77d9aa40fefcc375c9cd7cb2d71f24a501344f2cc337b299f0aa411ef7261800186a780e2e7a5190694948a8a4aa552a18ca1281e2775c7d463bc75d41d536f3d461886e1c3900472e188c7d4c9bba08ca90fa4519928d4512ad5278842a9ae524d0ea451a97049272eb12ce210e5e31d75a87c5e25abe031c78cb77cc65bc614d631e32d7739790fe52bc0c579dd70715e145cc15d038f6d25a38e198fe1316020583e43470bcb5b4af2943c2d5d4eefcbbd09aa707993550fafca2d6fb2cabdbe21a6c26b670ce2c5a72e4a144f1ac5f1f3e088b9264595af94aaa3a8ccfc525bce7285a82bb7bcc9e455ee8fce33aeba3f3ab71ce59637d9e513a469f94cb3dc990170679ea7a0781860b8cab533061917af29c3f0d29465c0f0110c32dec9f8046fc020a345ce581581d1393d430b6cca5520cbbdf1fb1a66f594a7dc9b33e5339d92f2f0def889e2c51114c511a499f86b7275ae6170f2ea1ac8ad52ceb2f2995edd8befbd47bfd6b4d0626a31b5500006d24c1af8d2395bde6ca1cc566ab6505875afaaf78eee55a9f20469a62954ca4d0169e6a7b744c9c4208f2de991f40fc7591b9ebe9134922caa1c5379165914451b593c0df1a278f115a4117bb2caa5454dd253305c210ccc6cd15b5ad430250646c3a84e7ffa0ed230acd3b70e4b66b161c30d33a6002f00be01cfda22d9c02c976615f6b17e59f7b0ef2ad5536e8943b3ba259657a350f550a5a245a3d168748fe5ceecb1be7a784b9c1cdeab1f4b7807dc3b019a27887bd8c9f39e28ce5bd2c8ab7b2b97660a86b90159545151398e99558e9359b7a49975f196378b9fb774409e5711ffddeb8f75c74f70b22e4e9ed7c7cd23a681cab0ba78cb01e495eae14d51290066d698f9237da60f05971c469d8e3569efcd6c3fd3f6d49e646fc2d4969e1d9cb9f4c1647a4f8b4c4b5a54c4236718bb3e5e72c5886ae80594c09b73d62cf98114d99b14047606a56048f62696d16a69a5ff707096d6195c60cb2f84c9667081d53e41ec347314c421040d6374ec724d725b778a85a529d763f747675693fd65ef30b21b38ac4aebc354eae3521d337d381a789c36fb13979a46692b415f1efdb89074cdda9af31946933044cf912d565044670b28bca2e801078838e28b2b6af06a6d064c821086c6815b943111020b4a5f8ab5c40bf29667d0124472e9f2018f7eba4ced060d23e7396398b44993c6ab3d67b51f11b5e46a0ef527656a6a0c78d233b23ecff46b8b9e746d6d516abbd31a5eb0275f6466c6a1614c637f66ec25d3ec2773de47386c181415994da6bfc6a46ec2a9943b674b75bfa3dc39ad4dddd7d608c44ca91f31fd86cca3a3f0ac36a89bd7d6e828affc91650a36614b321705e1b81d6e6788fad92ecadd4361686d378f9af580d640f3cc7e32f8990e8207864d64057f8a4189511dd5aaeb4299ddeade5df663f2ea57bfd335e19819c33dec583257d32d6936996ec95e1c9bf580ca007ea6924633f5f3412db731f1f1f251dba3117c324260cbd4bc4be9c395b1d77736b706b715243a50c58633d6ad699af69b6fabf7e1ca1a0e0d97d876c1adc6c36377f038afcdbbcd77ef60b7fdd338ec5bd530acebec08e73c92e77160c93b57635c64cd439c1e3bc2650688b2770b7ebb11a2666eccf1bdff81248c3599719f129de1d8ccddbba58b7369a73e496428128ea439a5cddeadc79de36eaf36eab04d5ba2b357ba57b53bb3f66ea469b93b96bb970dc85aee5ee228c95a8963823cea8ac8b4dbc61c23ae0615b6861146d967e1748973771f38671bd675b408cd49d626159af6ec26f78669f807cdfd7e0583013c6428c1d2635486cad4e8a042447522e3c91986c950c20f2c9321054b9f953e321b4dce07f193316c09a524197335392fc30a967e06071966420e47e703492461822fe860c8079860c20ba0206041074e703032f29385ee278c700b6b0591b883261071840a4de870d1430459002148902d84bc304d812b721d4e9c44a1882df46c0134af00041b3c21021c14018a222fb08115322060071da0c1ce1329b082132f1c2139445570c1c707064378f5c8051f20f18c9cf0d384fd81626bc00f422005232e60a2892f66173a4c6061093a4520424198042224597872850515b9746d4bac60516b2581a5b5ca34694b9b2bb8a7058ad11025d2d9a9f5d22e9a06163b2d5263e629cf1aede1b17a1e770f8ff51e90ad6c24f9fbf60f97f53a68a83e9e006285a061e86c8086f13a52f1e89a31d04f2779861903a5ef81031f7e6d4d27af0e8ff5dd715e1cdede71df5e71571e71c1842182224196a802084b9ca8e28816b4a0c41523007ad18fba9b436d51992dd8ed631d2be6f1ea513bbb04005958ecde76c76dce3912ed0ce1e92142e91c02b2d9d4dc1cb1e1de9d1ee7d5e19b2311b021884fa63c98e66c43aff9a23bb405b6a43bb4496d512010470f25d264497b4a9a9fd8806a0c4db2e1d2d224b545ad1749a4a043dd31b4054876aca03281e8db88cd4f327dfb74c38cb40809a4c8f4a4238a48a1536badb566d80b176c499374865b2607f4f4493d6dd22485c1f0584fb3a04414a849fad6e99de6e91e9ac4e4a3750a0724497568109a93359a4382d4f552b52a04cda4debc5bbe648f1669d2e3ea4e33a0c449921b6748ed6afdbefdeb3be2e84e8d2a6c49897ca367df6bfb784f5a7e4bba7bdfd1e94dfebe3aeafc7d36896179036f94ee812fddd2c74b266117885f646e60cb9905156810aa638df07049471eea53cea3affa0ded1c7755ca57dfa17af894af322f3b38c2a338de846d58a3d1c5d39bcefaec4cb89c3facd1c53b6a2009e51f38228d5247b919e2070e256c103e6a3cb1201ee12c88090894646f521ad819f484914c3f9067100b7a58b0536489fc4417d99b9ef78d2009143f62108ff8663c6b84c71438a67ae03105640ea548a47b11cf968f3d10b172fcec9d07de18ddd63489ef48cff2f95ab9e359df219e050361b98803e499c5798d78a4362b1f4f3faa5ce537e2577adcc325cda4cf57cba6813b744f8c233d0dfd8e9f7516bec1f1bcfe288803c42596c1dbf18ea3b3461f7dc4374746d8663c0bdfe08fbfb9178ff39a20ebf3b543e5e3683ceb40c4b31ce7b583f596b760202396800deb2cf886857b98af99daca66faf385718fda1a1d1fa19fafbb95e00bbc338fdec428289e37413cda742078cea3241097f41fbd289fe002c4d1473c6b6b013d6a6bf41ed808d73449c2a9570fa3dc9953df16b69c4fbecf1f9682783609923c121e791045d6c703b9e8ed1881b0f04c6d9146dca3b6684d93a3ac746f66230ff5ab2fa07e85c705f443f1e36dc48fa38f9f2f118ff4acb35cbc886fc6111e7958f9f81d2b1f31902336e2550e64fc0a56f9ca573010f12af82c78a4f8ac95b358f00ed659ce82818067e1f9c2797920eb2bdfc15af98e099250587785e57ef4111e47b75939eb363fcb388e300fe0c15b3a09089452e92b97f55f1652a97494d3370094c7910796b3be83e53b4e71f9033bdd7ba3904e3f821fdd3bcb1d49ac3b9258f008fe67f90a6be5acef3866f90a0e22d3b34e4f0181fae8741282e5b24e475d216618f4747b3499adee0a0eaf0aa620c53e3499bd0624ace95f76cf9e9e034fcfba3d6a0b3c886b9a9ca9a4d247d7e21f9dbb7f3fc04829a594ceb478c74bba8847f0ace3bc463c8278e461bc789bf1e24110db8867e19b99da022ffe06c4f3e39d2f7a3f6cd3e4cbbb4274f315def9aa31647934c99d9efb4c9df7314d3d0a6109254b0451a28cb1285d85218b75ab884b9ac57164b178f8e0c48d9a3cf19653288ba751a17766d66a2cfdc729e1918796ff362d3fbe3952fa4d0b9e2f619bcbcdd092fdfd7c85168f3ce0dfefc0bf18c8111b97df12c6e1ea3beef13106e282579faff1bf1a188ee00dd629ae19afcac15bfec0b2e9c6a8c282e9ce10d3a53c4a58da051d6ab2c613cbc23c1a668581181f5ebc27ae7049f3ea214e913c9e75ca3a05553eaacc74e923fceaf4b6c7c2254e66e11253f96abc34af82c82b7115d223b258421386ac91c5facd48df7216b6b9ff8f6f2eee515bf43fce8aab312d5fcd2659ff1de948535cb7f3e24b7b317d8fbc128ff3fac579c5105bee7cfd076561955bca64f12b9b26c587d7c76c32de994371898a89e2e59e724b5ae4dc0a82e42368604996228337b4ab56f75661f88b61f8991a13febec68c2c1f571ee3f3d57296153cf2f0bb7c47cb636020f72d77c1408ed8dcb71c08fe499714ec0affbb2a6572389eb24eaf4d9321e6d11f6f69f32ae51727ff9835e8f899f6c6eb4d90c5baca5baef8b0fc786793e3eade71f5d2f11d57f806c501852dbda43b3b2ec7e88fc538161e3b768f9df6d4187c0cf559634e8f715d2e7766d69896bac277a6b656bfd7555babb7acfebb3aeb56a0b3f849bf0cbc019ef5f0de64f1f4fe9831ac3ed3e10acf540f07e9232ea7501e59b8c42992595fadce854eb247bf50fc18bee538af5fe5ae1a338ab82608fefd18e29187bfe5367f0bbe3922fe06e3313cce6bd6960a16b1cd2f1e435c13a4851d07fb8ff33a76e1a8818d7197cff86f8ed8b41cffe688cddff29b233632fe5f7c73c4e67e06beb9c7f8e6880dfec5373d700bbe39be9929e9cecbe9f3720a7dbe2e1e5f4ea016ecaaadf1f375fcda1a5f4ea2182eb8863ebc38d9a6c9f1aceb6336c9741c2ff7f07617ef777a435cdee4f01c9e3ff9b69c1279923dfafde2bc2ebe3d106131ceabe5e28bf3ba17e7d572e96b623c6bebe29adabaf3d5e08f1903a57875bb87d7bbea9634a760d5676aeafa1429b95cba257937ecbdfb77cb9bece11f9db38ed370c66a16b5483a3b9139451684abc9cc871f1a862442247b190dd9645629edeca5494c4837f6cd26ae9753eda72ff66293eb6760c2ce2631ddf1f19229a64386607b348c0d0f0660f97bdfaffb393aba43104dd607d164d530563f53b1d725f4e914397b713599fd06236c49cee09043cd0c32b06193d85b98149996bd33244d669f01892dc31a43da98970adb323cc85ed29022f3214389608c1ab90c135b5221397b49737256ce279947bbe6e329a9589669cd655dbba66aca64daec4fa713c7e1e4bee57bf4b03342d96ba86da6532596c14c6b8ee3b41b81177c9204d94b56f892b9348c4b23ca34ad6aefcffb4cd72f26c8913a3fb109d2d4d24bf750f7b555fa9021c126413bc476e311c7ac3db29c25953e411a4b2a69278137d51178c91e06427b37eababdbb36ed1b81177c1922b0f4da351b92c7308cdda5d41a1530a04c1f230a96d2fcd9d54d2992b195b358f7a8500a6c4985ca0a54a4b170240984519bf9cc9846f2ec2703ca9d35919171b948f21c0bb89e22f9f4996e2435c6aa1a2339fd9ea65e92e57316e6ce90542ad4304e9ad6a1daa2dbe986c2e5bb31a5444dd2ec4c5a033b839ce0c94335c8899d4c5f67a5e754982bd2a409f712660c1414b2655d425dc2ac31333d85a72296bdec4be5e81505457c83e556201dd80d13eea7506ecde247e72a43054f808a1aa6fc98fc2c9191025b56a12ad430a52deb0e5175d2302ad3617c4e4db82aa1d9643251a0189f3346c6675c1937468337bae636994c34b7e99619c84c4c3f4b96309900cda6579f572549729209d46cc242d02aa43269989fbaa40a59c2a426a93e358c80beeca29e8629ab904c8b10a9481aa69c42461a468a229c17bdf7bbb460f1ae18a7291411e3165c7e565cda2c6296cf4aaedeb8b3c8422873d9c3be0adee89c7a4dee270d93c274c64b8eac31ad18af31326e7aeb9233eeeadeea36d1156cd95d74f1999671635c30e5c3954dc776e8eea2891a6675fa7eb2027174eec6dda446136cd94199be9c4443420d53d2c654f5d457b77cc901b3074442beeff373090c8890022e64e1c91336f08aa942115348a1034a2c818917364292b11a582062849c1f24a6e8c00bf3b1859da025b4a8c10fbe786131c89811a29842c6b28c655916358c38906bae011638154a010919c3ae83b5df97a232d4c0098ece600fb1155080890b8c587185067e9cd4e044175840f284093030c2080625e8c197431ad2804800dc063c3a6b7c53d3dee0e81cf60cf3b029dd642fe11eb5a51de7158021b6b3d7b4d322a7463420c0d366a2d3cdd343a408122994f82cd1803a86beb437e9d3c0d3bb5c1b923c3d3cb4c9912290dd3b52fb88042a052f88745ed9c54e8083d78da7ed602a845e9a0306c7598b4308e488f70c87e38eec06e795615b5bdaca16ac06de2de751edce7264358ff00c40b0384dca2c8fbe26b56bf987206a4c760dfc77bf9c650ad248806209ecd01d479f1ea4f8de4b0c6033861138a7e7d10b043df8ee8e39ba934ec2e587cb2cd30673503c27393a884b0ce8a0199b318cdee00d2cd39a67eae872f76eb5a12d61c38ca128982ded1a0b050504290fe5d1a4c6594dd3344d93a249ad07039ad4348d0a8160bce44e335c934389892d5f32f6c905177ef24bc3344c2943963366783235e6e6e6044b8620796d313717f882132fee32b5564a454f8ae854b54c66860643d88e8c88a04f0ada64446cf1e24e419bea040753007a05e1307709ece8f0a89d476de1f1b5a3fbf69a9a578dade19109b1b6c6500ceb020d997bd1000cb1f4a4abc67cdfb8639d372a09759ed779a34ea802c19dc33635b990db8e7d4589add82d39290d35091efc7680ff30575b2186d5510736eae032772e733802e51099fbf401737499c3a30e20461ddd47ef70aa491cd290e901d46bf7a5c9ce332b0d959c3459a3b0fd19589afb5849883c0e4dd6d250c9c99050aedc1030136cc9cafd8a4393373ad353ac430edd6178d2754aefd18ffabc388b6fa68f12b428f2da7c98e2c561aeb6401e38533051448bd786676db5175e77ee5e77ebf6e24e87e8b9ed323bb4bbfaeb2e9d8fb9e91677299eb868902f77095936557e99f4efe5e7bd4c8d5eb24a97171ab99c60c490c0d03539f21c37c2dc6c715ccf3935d2131f965355d86f870664c4d19039edc59d1681316bfc70e7388efbac1c77eedaa7bd3e4ce62758ee1837cf9d269935beccb970dd232a74a30230c4d667d8b3cdeb3bfa080331f24c249329c968056a227d408c728c30f972b7ebea24fd1525497cf8a149ccd41bed6deb11006db4c70f46b2539a19acb0a8cb3499d1a061a3c98c07050f403149bee8a0da1d73682f5d3b4ee6ceb9b253eaf50fd807ee9426d999c9b2508711eab40b8e48ce08c5f5a831abf059056974c0c9db4a16ec811ce18e82bf03e5aaabf00dce0b0563a8952cd899cbe983815bed4ab78c24040d236f78cc916520a33e5363a80e077699c94475c229448df4207da31edf884a812912233300c162bfe936b761ca2785a992a350d7871f9ae4ae09739d57b0c085b5d52748028c222f948d47069c78b1012d524d967488e9d1adec24dc232c3472b40b8ea3192d41969dfe64a740d96916d969d029eb57766ea33a3566f52ce5d9698f2df319a3a0d80970f0529dc214b1859c17ca29b803034e96bc545944e164478e2d1471008a49fcd2648f303bc7591b8634cbb254ce32d5437c337fd08497ea13dc61f10dc562890a725e289fe00e9c19a0e0a5c25cdd91812338100ae38582698e6df1896e6220b0cad56d1b89ee42ba689cb4ca61a7353c495d194603ab5078d3250043ac4a9ca7de36f23ec4d894befadbc803629e6aaa2bea5021e2d4e8b461ca6eb3afcd397d526193254edef08a16acf6ed17c45fc64cb0e547639b9c1a0edd270d99efddbd77e810ca035e9be18658b1812dad7671f84a91d53ed3edd33e3efdcd3671dfa911ce64e2bae063fab8991ab36ad3d4ba3973cf2df4a44e5a37fb323526e57d0c87656269ce4d936314d6fbc187263d1f24970c09d300efb982f8d164172876e664fa502897f2c484333e3e32284c63884be580715851627d685c99267986a831f6844bcef6fb2b0d51d4991bf24d273e340cf66ab9e8d39c3ed5e9d39d9e1f6d54172faa6ac48bf886bec4e3bcbc99fb5d545d9a73a9ce0ee5b9748926fbc3f4ce6ba3b05c87330023ab9e124403245935c11b19feb01bf6e0654e290045d145aeb7d131a9573d0ef539109d3a9c41527491a9d71f766253208ef90f87e5c23e972f2ff534ea6dd4e350fff284edbff8d8d2e69ae7eb2b15e85794d8d2fee0a3496f062becd7e4cb7da8311c476d9aa43ef00f4df68c8d215b7e272a824759be60bd3c93e04593dca7ef4679be4d4b4c516c79de894c3f4550c11e762c6a0a19f8854cbf69600f93093648c288114ee0032540e1e5953acf6f600f3b5430c2c6554ecbb89e1cc771142b914a0be47e6d22e50bed97aa9f0d83a200b10e0a3c5f44d1b301fbe51914c5905c7e1c125f11cbe5191485905c7ea926a44bca7edf9762b9644e38170d28be40caba0939db153ccc093a1a175d25caa00822b50e4d4882598e5e01765d926e4dae06015d44dd9a4e28e2747092d3ad994b1b7a5eec00658c1b611d91ddf20c82e227bbbaa73b41a18311c7753b7932d90228f7eb4e961183a068014aed01ca93c9118800e539eaa2226842c0b05a6b3d56819815eb5aeba68594a4e3325db0ea8399d51a6c66584f2d6a6602668c760d7f3309edfa78605f7e33cbe8a69135b5d5d7aead1956332cfb4a1a39c68c095d668dfaae5db5d53586879e3372e78a6b3a60e96b660c7d52a6353519760ec35a565343b4f97818567bce1e6284e775ae39c3ba5f315a44b70b17e6b0ff3e39635666c0841500ad408b2744f1eabb66cc5c82066e708313c8a00b267835ad93d64a07e0f3459d5488141b59635eedfc64d093b92de47a6b2b6d9e92154ce07dfdb0a18045ee209cfdbe144cc58290cb54ae445e252bd7172d524ec0600a314892ebc91804e57a179219c840080c7e72ad36eca0d6233f4072840bb9daf060408f1a00225411060c605082228c78d523b96a518516e423747454008512467250e4555792604b32c80850ee0e3a9293bbbf9496c49bb306cdab3c4d79721da6b8d481c71c66864703ccacfdf6b0637f60b9d6639509ae4c37603b9c18c618877178a6ac59866118aee1f076f374691e0fa3d1e42c358a69da373c5d4d6218d5349b65d8dad2c4c932d05d9b18c2e5ecb0be6029e9034d29f5fa871ad32f2c724982429eef3c9722a2eed16fea535b7d1b9468a74207399b54d0ee6f081919978b24ff30b43bc8d81439f3b0a6b362d7ba8b71a3fbf5d89ce4b8972ef9c17c7c7ad418fb639b44db7c72e74e37454fa6af37a2090b8bbdef8fce93874dcd0e72b4eed93702b3490682fbb671ef5982ee944ea797c0131ee74fc799a7db947ec23747e66fc2976e3a90d4ed273ee19b94973010d44dc7797d658f9c7281949ef2f002097fba6793d8d127b5b946a9a5083b1a2fae3ed3476c4a404e0f57786cd26d563f1d3b7dd153a03e10f1a55312e661f5d377882f5d3c90d35762e94056f87410cbf0634f78eca33c7c098f8d471e501ede46f594ab9ef2799a7aca455d756d6df51c994fe1d251786c1bd34f37fd34248315d6de743a34c2211daab8e45edd046b82d8cf20257cc2f6b66b89ad9f9fa97de9101ed7125bf1a8633e20cfcf5cd22241d416109d2f1d96289d02d5d456631db27fb724733981747ebe9c7dbba58f0cab330a3e28e822d38ad5aee1f1d383094df29a4bbbb894e8d2d43797e71d32396127e661d3243d0c44b0e564a243c3e0d0b2c4b25a72ec4c82123b99823be0a043e47da144989664dfebd164cd101051518e8da1ba44ad33861621a239418484a0a7f66c98d145a3e6c7c61025a24539361a66ded443ea14167c269f4cef55400746f0c10bae80851448f0b01d19acb0dcb7d6b13af43d84d2bad91217a4b6a8242cd84993562aa56644200000003315003020140c874442914824cc5371950f14800d82aa486e52184aa42048611432c618020c000010004040808686c60aecc717e81b6b84e5d0cf0f2afea4e859a4f4f604dc45ba0d58b15f1d69d3e704f2a37e56a76792a1d0d4c1e5d08fab7f42afdea8615edf09c5faad6c7c69c460a00bb4148ad060e9d3c2a4f4592ae0633282bd129b35133fa0fb0dd030ef8410019f885ba65b318a6caeb5884453aa84e0ebc4f0bfbaab8df20063f241897d18de3cc496a5a06654fc83db1a6324fef49ed9fc4432442bc03b80e0257d008b4c98256762c6547459826140fb1dad43ef2dae6fbb866e65a1d70264a8e76ca0bfcfa337b28c42d4d2633c1d0d87b8e4c7a60d97203219b85ba1625109e5c2200715ba74a3b82a32c01f4c8b1b7445b48aee5ea76081e54a2a9749eb27fa35189205ed6003eb650b78840f7b7aa9870fc3b586c287857a22559a13d93236119aa10f8eee87d09f0032435c528df47bd06415303954b06352938c0af3043897c9b49b7de6658cc29e4e16cffe8690f6ad3f86da1c2c6149341ed7572a58791d86f82f5245d6629684a9be0fc17087e9930b9b1e48159c62240d33722a5c50ecac8a7e9a5839fee9c488c4787f7d3712863d799192e33b7211c8bbfc2f381cda886fec5e7f090cf9be62d21bdadab12201bed4e699259f4135ff6a3913c9455419e771d20f2470a31d13da69d14321075534555fedc3b9e35522220ad6becd54034dfbf5844de907ec7f24e6ebd821f6ddf6ed222bdc32fee45ea566be5e8032625ebe8ef31b40922a04ef092445a7a7be147fb2b2d5137be418e4dc7727bc8d8287fc4de997fcd2f23f91a389b242d9bb8fc824bf660a5f6a1a75fe5881fbff2ea897ac509394332579034ccd3db85f7b1351fdd86534e9cd616fc16c08c1b78acbfd0b7ef5ddd75315f58eb3f682b837db966f8c11bd77451242a01e4bb911bf7d388e186eafa922bd0ae21cbcd87cb03d3d870ad533b7972190fabe347760607339965ed6ae1104876291dbb4caa2e2f05849da960ac646fc3cfa7d430e0781b52e5a6bab81fba75e0b2dc80d93995d29127f06173d63d23f82a26ecf10a2f5a83d56a58c052bc0e080ac3cf1134788262aa7675265b9d3b66897632b4df1a1924f1cfc50f8fe486b6df50441419ea80e0e809bc3348872a58e006a2413f52757fa2d3f6d6b7e601032183b8e476ce98d8130881a985a2f839ce0b3c91c8c0018b34c8b9ccfcceafee460c735797cb68a5ce8ef6ee9602e979111f7b15a6fd8ccc4f142a22efb634ddc5ffaf0729a6af167ca41bca53cbf968be2a7f82d1c3405b037b15a6e0aacd74137c779aebc20dc7b47e5c5a753b204050c8867f8b26eb1d86fa1e2c4066a5ce3b19ef315a2ba6fc80d7720b901e13b9bc3e4ae1582b48e9d5cfc0ebba951460fe6bd818f403b2d517f2e604e03a4e87b7b116841cee4e43f376bc093f030f08a932389b833afee352353f05e238e1ac08a3594d7cff9bc6678d8e310624a96aa9e1adfdc42b93633902779c8806b95ac996675210f920fd61de30ee7c7a19f76e81ee578a86e450fb6d113b9cf0023a5d9b19078e6365afd85634be2d734d4729fa8a4843f402cc3179ca93288b04178799c8ef99f214c87554a371ca691bd282cc4052213eed0347c11505a545248fc2f6337d29f83a15f6eef211cb7c41701896a8b3ebb2661a38bebcc160a6c5a1b284f5e244338105be65152a9569ad1874d794f46e74b98c67bb63d723c233f06f6aa6c9236f3155ce069978c7f6f1dff9622ffc648fead7618f9ddecd9317f3984452e761fd84402d020ae7b62ffb86cf90b5c9d211515a05e96babbd15078001ddb587345bf5f7044c21a68d129434f7f45fed889b72cccae6d43dc15429342965abc9659f63b2e9777a6d96b3de9b03fba6174c542b054350e81e396429c0c2e875d5f99cb97f2f04cb00e645e6028d85e839812e0c746b087f04a3ca138f81f6d68aa2964fa0cc03c9568ae7f65fc578bd3a3c09e3c35240aaaeb64560ff40e05da90a147b37540dbdfc9bc6b6f76593d3bf4a9472fa4277fd4120c35f0498a0a046fbebc2354fc21c82a074e9fe689aa8b19f095864c5e01ee6969ccbb4a4b470f211a0b93e7a0bb89c62ff3836803d0c6ebd972800ea30e78f36cea6d9af2bde8c619cfa46894df0ce02f5517d08e2eb8a73a85ca069d41b4510109c4982d582a1c7f42642350db399f41064eb708f28edd9931d34f5be64c0f2be627008a2c564b0649600cd921bdd50145fc6e2fd8c3f0b005f01a3eb97a6d4f1646cab7168b1419bdd953cbb21cdb5bf3086044a341c9c72016e30ead4044545c786c1edf5c35e89f0629353a86f78e59474fd96d2435d8fc4d418a16d999a610c5071b02c5f42efc4cd089971319b3de0f2b32714c7b881b2d83b3c986719e40087500abe0dce2533bcb537c157fd00878e9bbdae9f05e73c1062aa031d7f1cfbda749e0716a8608015c22e080fd496e7e85b0a9ac3577a249dc5d30ad9aceeca0bda9ae20c8ace12afe232c0bdbc39a18a9833fbb6238bb6bcf340f4e1590bf2cdcf00f0431bdf44bccb252752f5188a374e3ce18129528931f754064a30b659367a403f036861438df703f68b7811bfc75beb6296da878380d2c76c5073c2d5dba8422ceefdf9bd2690d2272dfff439f08173b653a42518c1b67b53badd0596c8a3e9e0ef674a1f89fcf3fd2a7b78de0f88aac326b457f213316dd4ad8712265cede435ca6fc50c23199438e4a989d7e4b22db0a1528fe352b371fd176456c27b234ceace050b7d5cf9146190108ffdcc91672f7cb2aec55f6c39dfdd5484144e84b4d66aa7b464f7a8706d19bcf40c502897b3a117c6919a15308fabf883e89644fbda4bcb29251e12cf7e4d8f38434ecc3ec4fb6d71321009da05fa58e7a5104dcba81aa40fc4edbc7c53c7620709b6f0fe22a61e7dfc6634ea25ce85ec808b9578531e21d83562404db84797762b65e98ab618825c159914364ddaf9bbb49e7934d66fbdf01b8aae94743bb905e57fdc20886f8a9386e5aa3b7881472225e23a6bd183c6260953e622dfe86dd9fa721a73f6a71010f51a5f1710d3bd979278aa1a019ecd6c9e27d22e4b513ac42eee745ac1dc8cdb7b70a6669204b318a2a6a12377706b4c06e6f05d18a001c5b1e0c93f12b3f3cbc412122a96b29a9658085e98cc14a96c5781332cb232c729e41642603fbc4dd01ba58a7212bbb26da9a457d9ab9c9d08e99d984f444126857f3cab477ca29a10f8ea17c47e7328791ca61ba4485f28e2dae1d5e06b00cf3a0576c21130813a7f5ebba6bec8345bd197b6ed0a871c01931662611760c38555c5763cffadc48e661f37fa830412c74c1f4285bb4e9b7e1a4207585e54732daaf06a19001048d2432a2c55550bd40f626f0b6a74a5150b62e174abe2dab544296cd863e9c3ba2bf2c017c92a403075b470594aee095acb9377a1324a002a392f1d8eef1de35f6307ed6de6a7ae778b1bffb706fd719f93062c9e0dfaf3b047a44ca10d11870473fe02ea5ed9da4dea830fbd5e1ea6c383df9146727b9929af9a60a5d7f3eca0c8a690846d5cdaa5d199ddf34601ea8302030d56f14c099c9311238c886acd5498bcd2a948d095bda211c3f1204ffd9c2ff2ef5029f95269ef49097153f9d020acd64b2f4b3f08c9d54a0d1c69fc02124c90b80e39363011606dbbf66777727f472b9334c0656c2dd4f54237560ffce5dbf9221855a32f6d3e2b59831311c3e0eaccc81fad16b8e7ed684d43cffcb4a7112b0ee5455cfccab7c6ac78275bae1812149decf4b5a4478e7750ecbadd0e2bbb3c1e364d246da9ba4b69cb572db10637e43b259f14c75759a187b58e5b1bb71ccc7651d77349001d76479ce4d1c56d122f777d0182edb68b547205ad9c9d0e1a8e076fe6498a50db75cb2af78b9b78a6c2a51075d8f1d8df6fcce449d4efcdbc545cee8691edcf049a0f4abc5b28335f8668488da971b670541922325b9cba882363b8b0f7d8e723ffe9c124ed8cf8654d57d1354dd7fa70274e8ed371585e6cd0402526df2a107cbf1c5610a05de363514fd6b736bdc8597c0344575c6f882e234fc9fd5ac9b427a00f559db00d59ba3bf673c366ddb3c69b9ca80998ebe67a9353ffb09ceb2a5fe8331d387ca8b0ddb9ce3761eab0ebbc6bc276bff3bd66d9639aaae4a3d13e4f4bdb7f5ea10c226e92a4316b25ab639818467f5f841c8cac21c485f23fa5c6c92b54f78fd509fe1449f7602675ffc7233e697017efdc45fc6b5056710791fb08f247c9ac18fb1fa4941e1774b77e96fef1228f52309da048844d5113690a8e21bb6390c500f78ab21f30a106b245a953341fbf17e9d215f804ae989d37a79c784235a619bf51d822757e9dca363c70bc208e45ec1c92f98406ee9ba7a8513e04f4b7d8343f1edac9856a1d5d2c998336d72aa169c4a1edf1dd8de6352cd7855f77d199dfa72c6f36571298688047d4a510d47e79202a42ba5754ce60a70ed9cda9857c612f90afdff5267886472e53c82cc2133545f4521abc5801313456320497621ad54ba43c9abfed949b05833685af3096c16f16e3c697c0d435232a38f87e3b2aa382ebc0f08ce91e4ea15e63bddf11011836c329fe9d60b5151d9aea4e05ef165cbbdb115c624c8a1fc0e2bf680ad624fb26f5d47d49aa890a37121dad0a2572bf6046fe7b26d8366fa1bd3609fc16d02d43fe9895ee57160b48455da7d56d977b4823823ae8e4cdb7434968b07b834a59e38c93a7441c096d368cf421d870720314d302531a40b9c4304b6d83ab3b2f0a91a34dfc24598b41cc1095865279f4d2707a34942b62cae59ad983402b5e48ad83ea5a297e123c01fe8a3f3f303465c57c3bf4abf21a98697f152300bc079c174c300f6f72a9b834414900cc05f05e6cbb47c02791474b5e7d4d4fd23ead0c4229a4e6b883738b2a944ef16326e95eae8cfbf1097d6c21d02ae1994bb3ac03e9e9df9b1f8389c81b1709df74c255a7f23cb4ec28c08b89c5d3b42b8631ffe259d9fd90f5d72f972b53c26e9762c19270d79966b47d2790adb7d448dbdf1c2f279432011790fdd6aa026cbc68cb964a8b13f4dcec9498f3f1d6f4b5724dcb50c29f7e3e2573c209d648fabfbbf851a796173e872734b4d44bd5e90f776d93728431c28a9cd87a1405e861a7ad40ee2d0700a3e31d030b1590e87a97e213b8d0f74ab09ad95d4be90432b0f4fe4853958d577ceba313ddc2aca606c0533245a40984fa70f7529fa56876c235d0134f30949b3ce510c0dbfbb28940372d21aab4af2408b28b24e901d48c0a2a11247f94b2295d3f17e09f485795dcee6b52652810aac6e1b320aefe7ff5f9371703f163222e0d66ea831c52c0064add4569e31f88d72e26b6acb9a7d564020479f14c98452376c33f4bf46a2037c74a862ae33b8611e3c9682c8c08f207a3e3ce89a2687a6d1331b909153396cd02a8b00bc31018f51294af55bc4233296de05fecb63dc1f416bad3ebaad77b8449ccf137650b7859e16b1e2779d5c2a5d7355fa29ca65c503a7c1f926d4cc47c122e56a95db1cffcbb4ea9a814e3d30785382e13370b535c32f8fe32389fcdf348998fdb2f510100b823f28ac99d5fcd9168fb5fa680c65b3c72fc781597285edb6b04a38912428777c208fcc5d9cf4f447ad657fc664f203da5142403400f80d3292612b4cf8c6d1c1a1992595abd818b283f500236f47f2d8fac277cc11269b1964d1fa2dfe3447f1b4af421aa35c1e2c4136abe6c35d43fe27e955bd6c496ce2964a655720fb5d36317d87756f4382ae97ac5fb8a5db292a1b90384313fd294988e82c38fd690e5eb5076171bb41d71f965b36cd9310faa208354ad44c80449d4364ab8c37d57d55bca5f336c800fb63dab9a43680c628870c0d3d3e4d73eeb32692a25bbf349834675e8f4624b6d8739b953d8cd68818c601d59b1d1f22525c6896736f1f467b734ef9a5698e638d122d9a8045a54f67ba09b0906ca89050184e25e80f0e15e118c8ce774140e2d223aec77863042129937a842dc7250882fda0e5a3628d6eb3430c8a122e6e8ba80fa368c2c06c1aeb939ea78a37219ef8d569fc0a1d63bcb2a8a4a98eeb0692cc86f2fdb246b4897cc90bba327f9093f1adde82ccea5befb3e9828bb2f8f6695ada3b3960be5ef41c2a36eccaf29ca4caae18c6edf4b2e53c51bbb22ec72ba5f9c5ee14791f923f17edc866adad9b6517804a07c406b1aa3f5b1d89db3c7c904c619f4fda6991544ce244bbd0d347e8b05aed23e1d69071642a8df821b6e0203de5c81ca3bd9d0c354560ab172094d3966a76125fe996c9f98aed9826c38c23d3ac5230ec00872bb35f78ab71ef49c68fc983491289d48dd63a245840ef488a8a29e50001822bd2d77549d6b89a74019e0b3a199271d26f6d1c7582c4395e96f2c5342bc676fa39b01784ac1316a1927848e89932a05250fac7a1b30c51d6c9dfeb910944e83650aeb403c4c53aa10caac99d9b0d7cfc54925165d71d0163dc7ce620bb8103e0c1173d17799b9a9aaa76403935168c25839430e5d5a1fced89eaf3300fbd3e77efc0291b93e262e345eee33de76179231c050bead215e22e93dc1c90b4b829b614902f7a8dcafc0e7981c6dcf69d932b4e6cc95979b53b22ddb248dab035c0ccba0442c289ae26353377bcf7a714dac6d43b0fe5617c4e2247ba52fd4e4596bd1070f0ec5d389e80666f26e0fccf9b178a22890825affd7efd8a247286c8a15ffaf51e95d7aa7a447678124fc461d1b0ac0e9ca124a2362729c5fa09178e01975b932dd91070054ac876e2fb3bd9c63f309cef8389e76e6ee78639e68ac50f57d4d818fad4cab8a7e0808323f29ac0641f9a6811c54d07c394888dc2d367e2f9587b63f05579ce472e09012f0ffc5d6aa8d59d77d53ed7e4e53a551b858a40f9b25ef8767b710bfedcbc2bf50db9eaa73a243d925fa6d83836ee661eb1109ff1787ddf3c69eb1b574b6c3eb23f34b122870643a49d18a636a7b7b023ad5ebe5332e5e0939fa4606a42f407bb1669689754b92a0b76e8a3131f3b02facc5ce218ae8d03c923e7b3569126bdbe33134900135c5597c31e8f83a84825572e3930f5f55865145e6d7410774f0feb284e3721138b07b03404f97ee31132200d6a683b446007c16ddc7bdf89719d174af6e59e4b0f746449319250fc46fad057903f7cebbe2d8901af1ab8ab221974f91e0b3273d78dcabb9963f1dc274a58bea322314e483e23fabbd9eb68a459b81a3e4e9f492ed07e69086ed06e6016bf3ae84c2f45f82ca5230bc66a60dd5c15741869e4268eb290776b31a80e5fc7821ae5db50ec1e8399e12da671e4270ff2b915e7ef9e79a97d104a74f00a2005a2975b617c006eac6a72579a574f8bbd5c422fdf77afd7a6e85e2b36f2ff00e943b85489d0b3914565e4d0933ee5f4da462a8b7af5264b4aef06c6fe0908961157ea9f39cfc03ddbd286addee4e5e76996b1093523071b723c4a2303c39a9c6d097871341686335bad66935b1a69859c7d166f61317bac9ef0cbbf782d97afcd5c44e48de13a9418b0ba202ea2f2c3775921f957932682041f539eafbd055a5b82e533bde7057e6eb173f98c74d9001ac779cf9dcf3f9d485375b424c987732badb011ed115bec01a7fe72c5c504486fec12cbcd4982fd3b637707fba2fe34b2f3a0a3fe37f81b94ea65b50736166a6154efe6278ace492230347bd84ce1d08c2e70ae650165b0fab277ee8566b16482c56322f9f40ff072c078d9c832da8765b04536a8fe60fa3f93a8b6384e128ee753d74f1eb0968856a69bcb7eb2ae8df4a2505779f0f265199209e290a0069abc9c3abf020909314e3fd18e0b7b94f0228079c794eb587c19be080ecc083e76dcea4d268c5d24d06032268fb8db314cafe98e2f878ba88591b158dbc99ec29de5f88a7cff8a68ca08e5f21db7f60bb9cd781c0499a09cb0000da3296972c7186dfc0af39374dc4729197438786074bac3b0b591163234bfa73339c189dc1a465d97d8cb4b29ab49bf46dbfbc8c94b8edd0ac4ca8e135635509c4a6ae6b1531f55278f160f6a8a11e01254b2450bd983a6f378cf1d94bf4c313f5c81631a2a0a07437f86ea329121d1cb842a8942baa14bbc6ea39e5c1376c1d18f468a039df4846a8d6b82cfaf80f0ad394f8e9dae94644607c80175be7c6a1bdccbefbbcc7eb5e3ea1b4a0112ea71e19c8d7cc6d253a2368edf19c502f6ce9bab85f083253bc8e13909977f40b05573f73b29792c23262d65c37c381be09fc9f392be670a88ddc237301bb09d1871b762eee757084af24468b50fd928a92fa5edb0c9316277fe1ce6f4e887ee8e94958bebf7d2cc99d930be7ece463280561b8ced164c3db670f5e05a4edb010558c4a473e71161e5a5aa9fe58875868242f4c1de976bbda118b05e106ff2bc6b4dbb1abccec52ceb9ad3fbff29aec34a3da04b1f4f28e0f3fbf2444532f97a1bf2edb7064cd0d31bae282447e1084f0a063d35309529de2b2100d00e333a4e84219ca23d8157f1798201490e7968bfd3102288f76b70987f25b7e50185df519a065680fd2df1ca4a1eb54209def6cdedc514ead369a95a44e764dae4ec6994219d27e9b4a52ab23e7123c08506025dd80f174a4f134d053d1ac24a040ea96109fa73a4645b8f28dbab5337ed71be7a57f22bf7acb84c25539c0e5a32eac6d221ba67afda226e2ca78d77892fcad07f3bc5205184cc98cca369f345c10bae64d88221ef7583fdc6edad9eabae281a4d2babe9de58fabd464bbcfc67a24f1c02a821451dcaf6f6231012b2a5beb3ced77b3ee31a2ef5948635249a249a77fe583e1ba579025b2f9d62e3b0c7c9f1d86fcd91eb5c6a1d84894ef88c19420c77da5d314ce4a7edd2ea2288a14dfdd3c585159871c46164316b6e7c6736cfb1cb2af8a1d0c058a942f51b7086746b7a541713894d95e75e81edb831f34ab50cdd4d4a414a7e47d81078897a7443456ba76d77d2d77bd6e8278116919d41627834eb7d33abb6f8ff11c5a8c5d79984c10569ddc276eca00377a9532003e280c6ee7d4260c2a49a79e3edc56e33eacb61efa4197d4cc4f05668c0e1a08f504c57558b605eee5f2e001d2ca090cd8019ff5b78ce883170b18ed6cbbbfa2b71a313f26dc5c77a3848f975c0dab390490397c0aeb236750561fd751dfcf418ce31138590058edc9e80b4949bc1e1ce19bdcc02ccf7818c9803fb18625cdacf778fc7df5ef88e9c964a6c1ea91bbb81900cc6b6b6dbe559dbbbb84a5b6d073be0996abbb5c3d0a031f0d7b46ad2a627d3be341ad6356ae05cd0e806447df546a495be153c613c22e1b891fd5385b3c72832e947a845b8fe1b103bc52badc964a5930ef991e66635a679ba4c21251512f9b1a9478492324c6665a796fd55e9bfacae9cab06840732cc6df3a174b3ae78c10af5d821859185a4e1cedb8279095e7c0ed4e8244d861563a1df794f282f0e3a6ce61e9b88939a35684ff4e8f1c6c6b6bfca3322cd1fc3644c82e79dad7bfed5bf0c490c86031de5736b5dd9657ec1986ad1d51af3fdd59de7295f15d83db4a2aaf53f8c6a5d2b985ae7414c21933074cfe4f12b8f3a4b22b94189a49293a4f27889fcba51229f3c897cfa90f7d6db95e1d8074420713b109fb54f1545e91f6288afef45b0ecee41a1ba8379247dc814c45538e85aac3e81880549466f579f68bc94cb66bab2505e1e43a79fec578a50250187d0c31cc89acedcf98a1c76ea6a9b998a99cc323465d30a5da03ef3011cfe3930b1687517b2373bde64fa5269fca1dfc8e3af6def73ca347ba6e27795fb0abba844ab133c21916cb4bbdd76ca4c9cc6346d8504218d0ca1bc23c1503299df55c5d518c8440261f33bded4cfc38ebf55ce8909aece45d6f72e706b0f7a6eada699b57287cebdcd97bf17440c96976172362bb35cd7e1a69d72f74388d212e83a8d3fbe88f46f2121fdf2ee306cb107b967407bb066fa1af746b1d2f6d95386072fee36ebb4198593c68009464ff90f30e01fe0e90f90bf0df803f9038c9d4b3fc05200d2760c21613e3773956a010874426451d59a3532f1ec16fad44171b4b96647a64a7f0c70471279de2cebfb35da20ee5247cd6f4d1813a3b7bb4a2fdde33f5c75dafd240c12eb834ba7dde150c8bff3d55b07f786bef2a2f7e6c056168278e85dad04a83a77a51447ae2968d255c4cb2f230ce8b7a4afea311ff6a1096afb82309cad1f53419aa43bf66067cc9ec49e5c381704fb2292605bb41da4127dac5a84996b92c13ce1d1a03a9f014f9e415c9ac9dc267c216f310978a41625f0a0019cacdde7d87029c2867e8675c93ae4339dbba289c4b41da6870ec43d41596474bafa46ed3757ceb983715a028e73b6e0d3c11070a4b43fbba35a3a7038bd74f6fe97a622fd2d20429e59400d5efa757ead4b21942a2817a556f85747f138c8f669df6a0b7530cd0c1a0929abe4c2f7091fe4259a76fddc51621134340ac0c71490c0f88d229696f82c695c9f094b46de608e86abb014cc645075f91f6e750ee7fe93e3febcf22c2606f6a8d90a556b821e295658065688fd50f86ff0924f30d9a79aab4db70c674c06422e7cbec90567f34196640233eed7c20f4715c01fe1f4b4546ecd7fe37a677897eae10da7ee8db09b6dcdffa3c8985861eedb3bf5a557489a4d321c1030779867076220a05c631508885a0c5a6ba2795b1fc4c6b3287c6b9e684fd608980b2064f3c8c90be40a9c4e0cd448fa6522aa4bb3ae00a93f45c6a96e03ab9c1878a621d1f63254241bdb9ba803f430cf8470ae299d2b1803c857d3cf07136bada023950d12db6cbe3b79a8dcb1b8d09f92fba02d9c402068d28587abd69a63fa8a5fcf0832735388e2387f56d85640bdb15b71036a219e145e942fd0494616fe9e2c351cac44c866726b45b8d102889d5fe193bcec269d23f76f0de759bd66b518d5c66dadc1edf88820915009aec53b9aa04ebc83c5f3fb47166c99b3bf1ad94bd9f5fae034ce3abd5322ce1d1c4d85085717524e0c149c6998a681abf0e478dfa2bbf1530675b7e04692df6fa2c875a8aac9b13a7106ce617421d9cf44ae01b4236cad9e30932019750b6ada4a037d0772033da2da1aee3dc716db6741f33518924050131559c5932a23a8528c058d395164bbf143dd6f7868f053d2cbe314a883dfc9fe9a1c103a46ffeafdf832a620348d97dc410b5f70fe131fc30fff1e684cffac0170dc376f78e026b058e060702bce173c7aa5ae3179a076e29e54d24fb845d843e13a03ade9e5ca6b7b9c379e7f7a29ea7945905d044fea139e631a71331bae95c3f6bc71caf8e9798c44129397a440753aea5e85e4aec4603e35826c881d8b635899753d60fabcbb7a1e7ec74bd9f6429d20deb75d30dc007a4daebd20cddfe764c03951a51b37511f4f3d30833a9adc2cc803ea0bf2e7e8b23e931f3e66d5dad0e8b14baf9c2159d01fcc4c0b15d17259ef63018f42c5499aaed390e884ee7a6f312a60ffd86bf38463e229bdc2e4f47580bfaef018cef76b719e648d1b3f198b2aac8274fed5a86091fabe5797eb38869639f0b29fe7d3373aece94edf9490460a5dadf99d73e3ce64a9c84c6f515690dbb7327d40f4d37a18caccf32e54931e2b34eed61306e5859ad473307debdfdd43774565908025ad995d6018924db5dac60ac3edf3f7c8afed42d584688ab54b08dadce1ecd866810020822c58ea36fd09850290ef5705726bcd214891210d0343ad8832741ed1f8f02df2b8651b11cbb9eb1cb15f8070887815304fdab3c341936310f0543ce5d800d8997a368906858166f6a3e04817f4342101d3bc54e34341d463f22d3c0df060c19448e0d7ec5404afa25a4f318edd1951a2911248f78b243cacba99f3a9b3120241bcccc1fae15588f9f16a47c1c2fc2328f5626dfed1790ec4a7fc086fa96f491078feabc9fcc4181275ea2774a132edeca75fbc62923f3d23c40ab3df4486227679c4fb6fe1cfd0e9fea89917f6e79812c7c05831b7a17a01b3efb55962194ef9f7f243c16395cd58ebc53c01f942b1ace607a493bc6360876a3a916d3f1e88e9e73eaea412d7c389ea5e4069150e655ea7139272f745c5e392939ef7b0bbe86339dab9ab84d35ae9531b2c42be13819c70359d58e5637432e6a5944a914f12840099f7ff46f1a52498223b85e11d4c06e4d6472d933d4c2905626bdfe95ae51c19ab7362e53246132677fd4362403c2e6fbd55f519dd015f52ff47707decb7c6cf19fcfb383666dc229ccd3b7108c9fe64a1b43b6b3acbe2489bf69e6bb506adb58795e33abfec3e77fec13370f458db5ae32c85782c4b35ef50d2bb38552483079b709d86ae258e0b932ab6c4b4b93f2f57710329c52a32f18369584edf1ac00850f19636edb5ad94e304dad1cd74aadb0f5e8c7cd43e4054635ade9805bc71326529861ccd6107cb8f4bcc903409ab3ba2e45fa708c932a5460304d1bade99556f8deddf21fd5b2fbf5ee33deb70eb8cd886a0c7eea1d83710871220de8377dae7d088ac0c32fe1d83841b8d9149683c95199bc93b4ca35c46ac44cdf9aacb8a5733d229c2c2d77dfa345ecac846d41ec3b9b3bf8563fa20b8e471536e387d64c90ef1955e68311931d26e9b72feaf2be13225259e18f743b4dabd22cc9c4b89362a15bd8752f409c80732c2640fff8aa237aeb51175d8f39d2aa4f73990ec7909c494251efe499596a31c48499bdee23352e32237da2995aba0d1ed941716d0fa10a3aad28b13edeb873bc6e8c615e3441015d6781299f02938fc596ae402fd89e823b312b6013de37da9f42e82611049d326834bcb6856fe7cf6bee41321a168ed16c7550db94d36b6f7aecbcabcb19e4b740968b36d27242c76360af1f72f1644be824e56e1edd8948b75349934f3b45ede436a9c2005d45bd749f9533d4233f5496107bafdb6cf70e6e23502a5cd6c0d18afb6eea92c32b18c325384b0f4e3bfb9b8c60a8f41b50a89549e118b9e5e50c0634e9f08bf78de0fd5eed4f82313da1b7624570c12ed471494302a5845b62e006bef6b78cc1a8bf520f32b919e1a430ca788314a4bfa7e3444f5d15e815a0df222c6bb765d3d17b9d01a534a09b77cb5043a02be4c86d08e187449a70c989fda64a5269c982ede47f904f471494d93b521c8d799d52fcd99d63ba68e04709db572cc6928fd0a3f1cdafaedfc5c3b1f010cde98cabf31bf58486bb9dedb84daf41110c0d4aaa9d994ae6afa9a2168324b6d52674f72ea59eefc375f15e26b0f9b31c9b13e66e04446e770ec4ad668e01108da020ecc9b7d2f70fcbe34e16478901a5391907de412341c5525ff717c290a8671a02b19a19086720a5abdcfc33d7eebb7c37413b0403151c530c5567638be2ba6058ccbda2532027a1fce909c6a7b955582cde1ca22cf1aa9ab3027c6789b267fe875a159a9fb1b5038d7f05b5496becb79e6e591f33673cf4cf4b09d931088428918ce74d213ea1e31dfdd863098db3b487628955b4fb7b04c3726e840ab81bf6efdb1de3fe1a87b6808b72f6615699858eed2c20da4a40202dd7901404005d2dc96403f951c80b4ebc45f547c83cda8f1673132be78984d5ddef1d9593d07a77eda0840052e2f5e91ec983a9dc84d7a95014841644f7e405d28a1a8b55f97edb9cd14056f2f0da892b63fe0a986ff594f15446bd3b62d248062de0e4a33ba42db5edf75568f5d0bd143720b4e5f65adf11b9a1fa44b0739b1fc3cc4909c8e7f9ce2e55a900e8d6379c198bae6fdd9b0606978b7a71b8ad0d753161dc76b9ec1338e0ba5be19549a4e4ae84f6feba3b3961340d62ba20e457ce01a7806e42e16a4adb1f82a2f4a609b4e7271e6a1ce50f7fcc4b47c0a36d471f2a193329d5374203b1cdd00e5413d2033586ec9188131f4fba340e0868f3ca8ab4da7bdff0abbdab9077559a0df1f3f84261ed44dbab271a0dd08f52d318db5bd1106cbd20515a667d54ce4c4ab097531aec995e7f6bae1289c34c4493a860716af21aa2a80194b0cda338db2623e4a36d5b33d296bd341caa04ec39ac3218835b56f9caa7ba8ef164a8fc4788f24dcdee4c296c0d0533b524990f3b4c35d96164b3c34f82fd5d1e04bae2a9e0ee10b443982e0d43028409407c5e0395d6cf170cb68992f369d4806d6b0bbec7b0abc4452640431ca419ded6438ac35ec20417a67d53629651ed88ae238280db0dc347b353a00a85a4b96535b8c52b73fb51a19509711340ce7832fccefa5a3c3d505a4675435836f53e1df15b5ae419c239c054b2a887aa48e4f1c4f23fbc9166d6385f127c0651ce4f465a658d5a4a769dc659820017b8a2de2f8e18def0f73c61400cb28cca210797444ee07982299dbbbf46df76c33175cf9e4639b5a97692284e2bf71d5857bfe66e36c4e6c05d49949d3654b6cd8b54da0c527e315690336d608be78d53bef2f1b5c42f05403df103edebbaea94d95c54e3bc86ce314ef429eec7ec0c49dc7c345225dfb0eddfce5bb6d1d5eb47232da6e266cce258c6eda3913c63a01a8456b9f574d207db3f179732d7d8b7cfb5ea4546e809ae7cfa7e13a23906bb697d040e347c638e3818dafd822887978465458afb9aa92cc1368d9a0e6c5871113318e08c9ff4c869711f7aacd825f61940501927e618ec3e4c8edce5351d22bae1e922e9563d236c51120e62362c7bbd3f77bcdfb62edbd37a8cad7d3424d31cf398c6beb474dc8da5472e016b6a435b55ffb368793d54fd8556effc86141a5b0761fcc70cd55f6543a1bfba454d9e9be6001f2c603c30a9f7de2fbf3fdb3ab6c6d5f592097a4f6ab35e36f0f84416e3a0464ff16d96f0688e2b1cf59f8225764a411fdeeba200829bcb0231cc29c60e8a9d1af89dedf284b531dca2af0f5d1f22f1778bca16d0696f14a7ad9fd3c44817579565ee3bce7ee5baa2f516ead6aac2f8c3c477bfe082327f61e27ab5a768ab0e7c8caae9eb710cbd20bb07f1fcc722929a9e2fd545bbdfb8d8a331fb00c07794a916acb9c88eda2ffa15f1441f17569b707537f9d0647167f50782ddc802d8eaf120e22a0d2ed6209701911dc3c0f6982016e1639693d1054bba9fb844683dd27b445ca26a54781341b379a77c0078e0114a5c9e30be59f428e76ed78b58b4c4734b22fcd22babcaf967c569b44c7282f916ab0faae841499026c7078f70d5dc79c8029a199262e22a10ff5f0ed3015ddd6aa6a7647e990f3c1cd44177916560484f5c7706d45072fca7f3995e8b059e57f142842efff48790faf6eeba8433b289e50756e55aa033bf06660ff45ae7adcc1b294c0033cdbdc98b49b9236ea45a6146e70c8872a7653403c965c64355ae3c3b97da4427f024c89a2fc79c9f94766c2cace27183665f00f6d5a9c108fc25a4469c42b9fff9bddfc5ce9daf34300a954057a4663268b36590aa1a5963c9b2c5ee4f2e879c37414e5742efaa3d93fbf08e983733a5ccc54250ac831de41983c9a2aefbbc349502b7558196d8da22a59b1b9d9f09f3ddd039a0c8e92cc380d850b71f01c99d94b345d9a59309a7b5c6675995d69610327000bb4f29b2bf340539fd39125245b6ec9752345970d948a89a395fb99c34057c68ce36a6065336e6ac381782910d18e9d150ccc721e1769e39ecd6467bbbb68c5e78b367d05c2e736ca2dc41078e68159cdbe4602261849d2f3248a0409b1b13082af1e7f9ca1ef429c005601131c28a014aef52997f52b5fced5cccba5e0848a80a6bd3b29ebb20f8d53debc7db91be68a2d814a0c2ed0bc27a7318475cfb6d7e8a36fb3bdb85448b8b7f6432cc4b573a0bcbec3998551b4a6e704700cbec601727bcf3cb76f5d96d72b15ee01723eb332a254dd90a9b8f53b3d3995857412319622fa522f6e8055cbeea6e2f2e9c3c7844238a117d67e8a59f3f4cf4c1bc88a7e5cb49f8aacb8e02054a4cdd9ef9a49f585884c0748d77336f80a9c75de1a3493ca18ce711379803543c11593630306ac92b35bdcd79150a273717706388641548197989d17c5487896ec4bc71e814629d4ac403dc745a402c556839827ea3ce2033a902ce42f202308f361d2813a2db6aa0513ac11837f1b3ed7c3827f7602761fc14013e29776089e1596aa893d08e9323247459a3cd69f37dcebabe5383cfd6d3fc6d3033115af0f6dc6a5cde16cd84effedf43e1eb547fe0630ad2781f8c443a3ea7c8d82de2145f41cee250d3a01b12f063d9a99b0a4c4fc79604d30636f608ebb737e4c92be380ef184214f52c9ce4541e85b62de9a220924b2865526100d7a2ef745f90eec0a920fa08ee0dbd8f348a45392685c1530751bed7227c62b886db9281738a415d565fcfbdf58c62011b7a82ec3c6926ed541fe06d5d28b913112eb814c8287a18b74383651a2a2b65e5f8b01c4d58754569825fa85920639a696a7983d4e3e2735bc2149031f718435b005db4476de477b280944d3daa4f559137e8bf6cdaa91e82b5c9e1214ce4e254165eeecf5ed7912dcfe355167fa42aa273ac19b823b4c008a4682ae66edf12284a77c10cfd758bd7091764e1d2bd00c6279618489e10e852fcb39b9e6cd5959da763681986449ec59dd427cf233172c8b90c6eaf261282bb8a40ddee152617a56a19c5c4247ee97e649d331eca245ff1fa182c1550c2322974676b4cd73b9ea3cc8e369e1de44cf522eadec5f5389b0f95bec2e14f59dfa4edc0fb8022b14674f515d6acdea50ee59ba10f51094886c2d00e2d4f4af66c1a897facd4ad0594eb109dfd0dc891c91a020239a3aac5fee6692bab74469e5c225ea639f4d3679b3441b6d16ebf376ce32b2e54f0f05a9dbe0bfdeb6ed834b9183ed9c1a2f7b997bc5f8c7d1b2f6226a5aacf842514ed91cb0c425e300b6e0df53fbad615d7f956694720485125e7bbb0c3a539a7ed6a134156dd1838b082ececc9180210c327fa5f17aee5cad2bbbd48c7f971052598034d008e8daffb709aaa523c4a523848b50179f22140813301d6d09d5049057c68bc2219e2fae3767b871fb359e5348ae3a0b6b49c7bbad009ad55f3f47bda66a65423de019bc73008d75b59d6484eec64f774aeef68f72272d0f60d94859f4b56117b35336e1535c89e854b9b2a3e24ebe6c5b6b3f1020d46040f1b82aba007d4023d62e6407e861d7a50bf9ead533d79d136956a9ee156d227ab2338e8e8ae487f7641635104facb9549062ce185e1d75c42d96c7dc5c641b86e48921401dec818c857e549a783c06a5a1b263d1c16d30c1717577638184aed67ca5f408178bb291d59d202f930730792124ec8f54a6f6a2a40310e784839b3522f165160a4283d1b780961b6c0caa0cf08d43725948545397f9fadb8196c3c9f13e5bdce39b8d679afec1f3385e0a535d984c197e57636edb17eac0859dbe6aa599d2f10c3e8ac511ae32eb892202a68302c81d741113d18280dfcef3c770b1f1f285cd180fb77b85f51b982cb7ce3c0d2050d8ed39cef78460b6891bdb8a5670ed5f5856bc1f98033d4b901272e7e2fc92c83cb75ab7981414b1161f100028ef8bcbb9daf1c7c0903415471f7c2fc2a2d64f1f691b97d1009ebb420f7892e64ca1d991c563f4b99ff910036576a5d435f1c7fe0c5568a6ae85cc7528e296376ece2fb35111933ee04fe91b90bc878d1f227f0869eb0f2c8d32dc4722c5e62c00073c4af0bf63199d74c9d6e86ec3a1721053879acdaa91274e578d57b100b21e5c34a131cfc31e47223e782cbd0759dddf3a54fff09bc63028ca395527cccd09cd6792d2fdeb52090d4e2f8954605af94ed1c575b33889c00070acdf83002bdedcae63ce5b82dc0804c58534eb5618b9154d613d081cc8aa123c21dd93745232fd7b99ed0ddec0c58904999b8f7a91bce04096306d3b584c321907830629702506b42e8850e60c97854547496afc736369ed60bcacf43f4a5e1691219aae25680fd4ace46ad289779d4df09ceba3601124b8f8f3e177e72ba1e78441d9370f80345bc6b25b0058c1138828d5aadc4119cd6e6a9186e1cf6f83a78894cd0c9258098bb0697b00fe535db586510a0e8a3aefd4469067aac0ef3be34d18a6f02ffdcd3271246a836f05e2671d6f776e6679bff2775c48123516528e18996e2a7f3b6fa0fa949c0b9d6bccb0adbf915740d1a42c462e3ab6be8231329a3576353672b197a756008b48866022f1b4cab8af3c7a5890e47aba78cfd902ea0139b773da3a6824a2235ff414f909854ec78d1904e5163bb302814a47947f845e6ded882bee56f0f419c3e454d4438d7b19207be9c6ce3a680a51bbcd6cf1f8e1a17038ce44339d32b9991dd9ffe2cdf1c6ed7392cea9ef2d21c6a9cd94d6dd43f2f9ca8fbde4509b675d9e06fe7345340434f559430a1eba45084f3125fae25d1d9e0e6da51a43339785e06df4abdd2d948d6dbc353a771e80737adde4bd12c3e530f70808474bb83d9ee6c16d71c0ad26d5efdcbdf90952c1376af6b681413dcf37a372ec14f6f89b5b7a1b6fe80192b71735c9412903a74f60f27543ebf3176a6ea3702f2347ca7420e573eb0a4b0832651df6f77d5f226f32011cee5b09c89c4bc417a3bbe5af15455b2e534c58a789479f3260978dcedd5c22534d8af178f5c42c6158e9073eefb7180664c3f23baf79428dc4088a47624fdf34492d131aa241eacf82a93188bbd544c03c8a23433d7d837d2863ae1a5f1f3da786665e4e7dd4378e45c086fb28cb3d9ad629f8b638fae06a7d4c871871291f13c029b8a7806e57c6db5d24a1099ed33fa1e6f157a46d0d1b282f3fabe72537719d984946725efcb04cd6e5ff6f4888640b389e7a9bdc30d50490b4c42502372cc0556b6e9d0226960e714dde3a69918266a04e0a1ff0b7db56647610457366a86448d1fe1324be42b3f19e477b89eabf965448e91899df53b800f226fc82b536a85635dce16f1221d745f146dafee6e20aa8beaa3da8067068242f6ba81eb9a7b3d468ae0e05e5d04460277fbc72cd45899487d36fc7bd581e75e0594f0a3d23488e9fd268fead1c32e5d425ec196efe696074fc271a7cb750cb46488a6afdb1a328fd529c57a2db732fd0c591ab155f3e8e9413b69216ddc27905c2dc509fe02901e7ddc062ae206aa99217cbc1f5e3eeb356a1a637558b439363610bc21ca1180b05361df92256639a07f618c6ea16623d92c7c43d4e13462e93c122ed393b4ba74d1461bae74b731749f7e9e904fefbbaf69cea169631918e1978902a9eea43471fff0b14f29d07caa54f00b261c0a21a14846f3fbfd72a4fb5fae6c6a9442d88cb90f700cbc775604a4a8d09a74053626d7256c351a239784fd97d8fe7baf61cbca82838be0e0a7c6431aa8c2a2d34445dcdf865c726c9ffb4693f334d8071aa3ac4979c9f80dbaf2cff5ee014011e7b29f8cf1f3702a5599a740c78b918daa9852f29784372be313c3056068a50e23b64aad1bfc085f805086a2f702f90734e3fc14b714ed18873587c9e16e23203488128bb450a7755ac169ea42512f669f9128b664f29a2889c19b3d7dbde0b1bad8a403c6f1179e149299ab5a23d32295e05c60412fb437c18535d398a1f253db1d58ae968fbb911547f2b665f6736da81afd87d64ba98910ba84ba27e09865959362f2059d602c86cf043705e0078643f176f8df46e127cf329b05e7128a7c619b5269072e9e73352b405f5091703084222ff735d5859f58ee35656e15b3a4fa6d0034f251c8deb1c53ce09438166e02d1f1c30419f4a056566ac37201dcfe9207500c311683b3b71e1f4460d4886c07d1ee722f1f7a8d67295fd17ecc3fad9744b6f75868f3f4c19a2df66bbc7188fd1e7937e84668dd134fb81de17ffcd235f70ba0f747eb4b45ca8de7dad980a2a8bf6a682bb95bd6d5dd052ff32dcb1bb74af1a9b27087d9164dd5d2fb14d8dd06e23c0a14105858682dbac1be4359ae251885bd595c025ac580032d2dfbefcccf0f8953f7f164c74fddbff037cfaff6c4b71dc9a8a3a6dc26379256a78311f7f52bb6693b47940b5ea3e36343a6f79da9c1cd56558760f603c94fd8ffd5fbcf27db07fb17ce8780c796561b3b5123679553bd4745bc00e767c0cc1164fd8ccfd4f279a19b6e2bc038bbcfe9eba1cd4927cb1586655dbf64a46bdf882176d972ebefe55a8611332d1bf0c683101931941b595e9b13b4f84618a0a87c95f8959b9b7f99369dbe510daeb2c93dd695475b43cfdfe1ae982e92abaf0d35c4a7790d5cb6eb148bd52fc4f563a5b7fe04c5b7a7fa766c5f35d254d5046db1d9290e09cf6a7143e2027a4fdfded39306d6cda9b9aea95b5239a5a453b275cbb5240ca1da54c1fb3482f9e3792cc6ac06fc9838cb30b4e5a6d07671a5ecbf0bf70e366eb79f68f42f1579e19aa5bf6eab4a3a9938bcedbca161b3f9c39852f469cb06a04d1ee5ae1864ab7cf52f3af092b73b368b5a557729cd5cf0813b13b44212e55e9d8fc440a133dd8848a39c0004d96e3b5e92593d06e5ee97b2be765d95c51d2dc3e265aa79e50240510e66e6f3ff9c688ceab9f17223e22cee6018115f1b6f80ba1b64243b7ab0b339ec8b4c57f383aa02245e15561ccc371374ab1cf80b40d3666d83875221ae8ab6c2ff6d5f63fb25577df86fca52821d5c952574a323de2fd7dc0ba1fe428a99cafd22d1f43e8f1d9560cd8b4c6e8f29dfa7d723ac4b410d59b2ead0bdab86443769f8c4649ec9169a2836f96bff0dddaad1d6d7122d3fbdecb433a19081c7008e2d0b28240143d32047abcab5c30c8d103bf403029b5eb21d1e4bfe871268cd3dc708815b1c80dfe1e2f9c24dd85d0ff671178c44c7400103db2a8ac080a6d7c3ebc58ca75679009118287f56a5ea78609ea6cf5a924ba3bfb81326e28012daa7d2698827e52a650f81957c7242f5666ee9f4e2960c239db317e9031b9d5eab7388d7d6cb4502981e2258339df2d5c68258f654d21b889d8db908b2ea597254d93f592498d0850918f60912606e0fc34684e1bc988ac1a33390172734db79872694eec4b4f10171aeadcb73e46e5091c98af5e8ec9b9af13fb929c5370ce8b1c37574f106144aeac36fdef9413b0bf9aaf496ae0512127e14765172163257f7b871daee6db5862acb48bafc7979069edd5ca146c487003d94cba8e7aa6b7c538b2d96e0dc9010afc0376b7d7567087771e8c4dbdfbfba7e958c055c1ab19adda5a96627c8373e75179a46539f8a04ddbb628c678516d4bdbb0a3ed97ab129698dc38e7dea23447060a5da6b996176448311798fdbcde33089bdc1cdd2a3e2c27af9f90a773e28022d3a05282538900268c99f27c410de08037e334103987eb45e56c87869530b44ab22a146c62d392539b5b3d9d6645affed00e69a126ccd07ff3302597df1a985dcedda83585030516cc97fa1a44558e8a5b63c46fd6298ad91253b942172f79b0ecfefaa0c05fa9ee8e2bd6fe6621c4d458ba6bfb49c87e68aef10cfc30212d1dd9957b85c613b12b0042837615e2c46c35b2382b3cac55c284788e113c0cf0cf7e7cb85bb6b4e637f3d920c96cea8a8a56256dacadc08f75f3e38b83fa8a13803dcaf622d1cd30f53a0a6807db59c078157dd4193b19a1bfe5ce6354e6e80415f27c997e21b1e5b3ae1a1c6109622d252b5d37ddc1e9fc4219e5dd50eda7231c37484990997efca59614638edf3ec7d83d88a7c48bf48724b0d0d1c34921301a5d343ef4475501b82c7f41dd9943b26fe108eb62f12002a74a97463f6ae8bef59c96a4f6d93a61b73a04502c3b6ef0557003cb0b425ffeaf45305689062b7dec462768d6bda4a226ee66121469ce2c99a8aa0e16cc5af5e0daf9d64c0867ef9b577906e2d830f2deab3579db5b74adf52af0cc64f502496cffde736f5af4536680fc7fb7932ef2588c0b2dfca171b482f84622e6ee1cc082f44b4fbf41436ee0ea04960b6c37f151859e8847e89e0e6208ecd24676fb4bcc996fb36351c3431efa6bb8596a9c2e93c2fdf787a08ff81745729e4c0a9a746eafc84d5415f9397338b20e74fbd8572bf16bfc180486d3b3b961de916c8a9ca982bebdab34bde317e687b54cfcc4e69a007467c42a65f2aa8d715c74336556ef1188b7b64ee2ad057a2b8eabe9b41c992cdcf974b5a6b58df1379b8d1dc5edf0aeb6f363d409a251483cbc6cc0f4669d1e565369d6657e4a4fb3263fe071b5f2a17c034d250d94d9a44104a9f5784bc96cd268dc3f10828ee01c230b66e235db239c7f8686c24cda15d2ceae685f1c47b09d18338cfffac4d844ea991f430f2cd27fc946e5d511c9a40d6e70c42083847078a564078fe0100c200159281e8695383090aa65fe859338d96d7777d4274ce7b252d013e61b2905a660af2b6e4e5c116f05bb632ffcb78cabf37cc59d4110fd806bbf096cf5c04fa9180b80bc2232e026ca0c83a3e04b64362d5df93989a49a4870f48703ce141b4b2ef8d851462f63e38a3b02831c63ada02f7a7c9eaaefe7062901bfbf68368fadacc7a81719527039fe70d4b7af49a1c9742f126e3c3e33c7e7e4e04ab1449ae058c1ac64d5a31c6238d5a468686346a60ecf1a1a038cc1cdd52084449c3a1914834d451380961e12f6250b83e06334259393f0020c824b629d884536e122f1fe6861a8b3a8cc62068d572aae2866921a2ce40233812746a10359c0a77cd9c2039a3f6401a70fa45f45825bf23597833e350729554795ee7f82c41c40124adde9c79688ea76ec97566f448cd7269d54f97c0d7306664243769b86f07ade46db8dc48c34a2c6facb0ed85fee3fbcf430b431b287ed98b5584ad14d1910228120417cd205ce8da307f40f00190cc8828f84b68c86a22bdc506312d55e4ab1c293b400907312ff8b4d63ee999ff824d3aba4a1e7aa36cf14000de9c698cbe37573531fb285fa6211433a2562afb28b3521d8966450422ee206902b7cfbc91351d50ef41ad916c01e79005cb000e5e2e9290e351c53623f781bf20d04b84822959bcce515771980424667e51c21894317b6482c48f0823a60572e382507e8b89e2e73a1dd8e8420201cd7b5cf4ec0c382790e01f950b598e3c0baa88667436b4e0a6c2ed873649b27d3f5d9c7c4c671b8951e062930050f18370a6509356a8205d310b3c82a5aaa8347a8fca37c00daf465c75df5017cc1d383ef92bae89c68452fbf5e2c53e32a4920510040647b78d2b8fda30d21f3f83105c43b09aab5a8cc1fcfc3d209ddb246173bbb281dafe812364287593603fe00e9a857cd5c654f740f6a10816923cfec5eefdd7b0fb267a709c5858f6396c93c922008c2c09397c4c97f21beaf2cf40379fb2a6b367568b3a49fbc91d18c9adf2985f3373e818d5b866db1d2b06795e162a30404083e2b04504b65b02e52b8319497897b94c9804e776f54948f387dd6c246036ec442e42f1fb4754870cd41d70bb9a2f4c41604cc5afb51d326d2434341470cea73b67eaec15fe0a686b3578bd2cfe2c60f35163ceb55f719fd38068663d0144801e2a83f37f73ef41307f3ff04ee644fc17c805e551726a25f88d515f74856d20fe9f66e027479a6c57a333972c7147a9771dc4bc72d3b6b696ce283fa5f472cb3d8865b655dbc2200ea911a8c9b11acf1d0f7e70f70b722ec41e0cc4f4372821f01bc0559bc338fbfeb799f116c71ac275e80dd92b7b91cc788a731eaaa7272ffb1de94c132c7c0ecc77406e8469043c77a733f8b084f0465ac9ceb95195e3e07ee01d573eeb1d66bf7f91a6f8decf0fe469d1665a342274d209ca2abbcd2a62d50ae750b855ff64d882864fe9c65e050705bc838efec227e1bd1f91b4b1229bab01f0e9ddbc0ec0bf502631d5191e8cfe2f80664c3934e87b903765d291f170582256afcdc2445ec00efd27567714a381079b8e83a60351fe99e63dc54678bfb0b4fd4706de880f5f831fcfdb375d339b27b57874f2beedc8704b06f1bbdeef669d53cb300075fe685d316fd3fd1feed50de843a3013eeba56619cac1db80e63a8c17eb63cad13115eacd7399c51ef0b196b66d610a79ead697b8f0ee0c5bd738dad3804e0b1ba285c50f4b6b4ebdc05530de9b4ded01cc4d540e52a02c8f333bb0a068313516b88453ffac335a89d6215b1a0f5cbe2f80e57bdf2441eb9722073a436c374485834062e4908867f5c9657326092a816fc0d5c4f5cc9cb0d4888d4a2b0a789c1e6d0a8457d3f5080c9ec1b50370a35b4348091b81b20d00d6c0026b2cc3b4cd162637d03db74835450184734c64f8f34603b572710589d8de2603227185b2829f321e24b580a035ac2883a6f4b94fe9fab1149c496766b3dede73642471c06685c8577d0a487fb8c020809f59be2a27d94eb8d74b5bf93bfe949807920f768a328136484fa4e9bc882277f594ac43739d383e4ce512111c163ee564f73178fda172483c4587fe06f59b4be5f955970b87d20ed41a9bbbbe4275caeddfddfb2d68b0f19e04810b63b04d4487a85b3fa57c28026f0dce86752edd773e82feae8026e685c1070b0228bc9d67d68d20516443528fc0a49fbcb2b2ab98e1d50300a0768632d580661c97fd262cd89d50f6a215220cd6e912800dd624036aff702f2340cc2628ded9e60fb066d4a85fe48157118cb2c0202093966ad0d82a7134ec3ddd8418a7f04756e11e0fb3dea7280c4a86ccd5ab60ae3d57e5ec9047dbb29435fc8efb36c44f7d67939d39330be0b2ad1cdb209ea7d26ac199d6568fad0410de80dc3ec7ceb21a57cc2aceb530d6bb717749751dfbf084583f5b8193b1ca1b70aa703becd84de060a43f6826c35789f7b4ccf365197908d59bc9b4d6db5e8fcf5d315d557c29558ec18cab977d2c092a3eb3592852a90c9d3cb0dceea4f7cc8624b05898d24156724ba2d18eca551ce1712a105a17759af8ad3fb812cff0041b03e43912dabc7f5970d1020a9900b1bb3b27fc5e2ec8bab3dfb99767bc8a844035f360bde1478adc44e6ec16829c5fdb93ac7b2aa5ade14491aaf5930cf7ac15d6b41e8c2ed7afd2a6964e2e0829ded31a6b7ba366e36c04abed6b2e153e0fac29e33bfb5af80198167440113b47fd05378b87191bc72d28672e79f4d135af2c19e3d281c468230ba7538cae8875c4bdc6b921473bda28775dcb4c64e122244e4a8e34ccaef6f5759c4a6b7f693dcc4bb0d6ffe5f8ee368bdbdc7f9bdc1099902e6a79117bacb11e7bae5d5459132fc1bd6a0a521eb9bb7ef5faf3e5efb0441c164b153b2d04b3e5d3961ea038b7d44048367f3a000ea808db2ed578ea1941864de4fa07f58838375d879e6a4e20df1965279c11664ab229d5059eeee224d580fa54ec162ac4880b0c61963d25c3fedbb6073b49e5f66e3fc059270b320e86bf1ec5f5e1837ff2097ec021ccd4a1e4cb636e27d283203d96e9c2a44ab7d1956230bfaefc1870df38665981e584b8489d2f94b43bf863c25a0ee9e64cd8c700d07e9733047c339b572c145a0f57d233f9c1cec52b834743177db8c7b77d186cc055b321702a9b5c29e78000596cd681f0f33d048540f52de6f3943590356cc38479a62511b94bac2ba86a459f071fed7aa57fbd75e0eedbf195064e402a4d08d41cb0bcd14f24e32f74bd354729db79ac764602b086ee5ae779fd0c671e7af8683b10dcb89a557d9288eae7c4bb00d50e9b52379724b9d8bbd10b91f3e9f2973311da600286f4067c07c15609d5aa7326d194efb67c2139d7b6e42809f0319bc32459c1419834950a06acd2c75158dcb32b20182a33df6b17c7a4191bfd3d7b1e5367e6e3db765c99e2182f29aa42798d3777368dd827d0f7c95e33ddc6e79d678ef7026f042edbd66467317516085e387f6cb1856c56a19f04cc1535fe6fdeb02268584a95c7c0781ee0cceac6c15648ff57dd0f6978be7650d7f0745fb10fddc0471a5f75c686781f10aa2a5514aa310e322b4b5aa040afb075a1a7dfb66d9dad7357933c5ad1b73cf787675087029449309af01a3b83823b504760ca16a393ea1a25f64202f4489201966c96069ac5894aa3d8f764a4f35599fc690629a4ca19d931faee8200dc7e2db44bd989e6dace4aac8e265ca4ae66fd3c02a853887273a03b1f2a0577c2551f469efe2f6caca68dc02a9672184fa2ca61056ac9d23496ee51c35cf426cec359098b6e1befb0a776413185c0037140169fde6cb602c2ba9f754e92179f8b2c9b003b594807eb409f3dd088caf7063d30e283ad8e2c5291baaafd5fdfd49ac52c907294bcbb66106c750409748014e29b402899dceb9ed16d362e5d8f33ae48b4f75e0320bf73da2233117f69feddd84bca837a78c7049c0ebfefe3e080ab6c75ebb6fc082083b0c4cf9100cec60d9c417086c474af532856280469e3e5063b429a1579d2ccb51fad50dbff7ab19425fcbf6e6320c85a025bae5c1faefa310a696a186162c5f000cbecbb1ac9cc6c80b260e9b62e2dbab12dbb75cd700379b41b22ef5571ea698b2fb01c985f43c2b8f3853196c0a549fd8597c944a4a681301943088232eecf0d1802af161dd35d428b052850ebeaaef5c06e227629f5fd646381063ba3299741de6dd711d30198f454c03f0540a2f51fc0789d83f7ba2e36737179cc10004f3abf57e6a68298dc617400ebbb02c187ce0d68da98621e34b3c628d8b5622a7f75ed68634aa252a57028e3b6870afd38fe1fb2fe98982f1614d1cb039178309a21bf8ab1c464d821190c27ebc75689356b270561e392d402dd545a36ea50920c2d5cf1f4661fde45d47f1cc2e7f0e613e29bdd81a7961fb977e42d912a687fa1034a409b7493b196859cb950ad259634a091256b094f023d6a321861201bf346ece7375c5fe065f1d353610ad6fadb827cd92ad0cff82c690e11433dc8ac05a53ca293ddf40a696470361768fc7dd15dc52b5d022f6f4a1bcd078bb142483df8bbfd4eb56376b31843d1adfdd338cc81013a6ed8d1af2534d02f6b7c6d5812a49d983349858b8085c08d7edecf4eedf4242b564c847331ee827256f810798dcfab99feb141a9500b7a385f34db4fbee57dc86e9fef47fd8320ebb4cb3c5dcec19c54a3ab4c28f6b05bea8b280164b11b6ce5ebaf2f4cc861d7838ca6694e9fe09ddbb3f53b205d739b40bb7f665a89698f08ff8bbae1c31d11cd25f26b3c8f701b79e273cecfca989b056aaeaf623e41c09abf14eab685161ee44307667f0f9a87085f2327ae0a3658a65a94c767d46b92b1bf039a7bad6af775b5de27b29b3e3c7cb4107cf0e69d274e17c368b4a726d9dba667e6b9dd78ad10b4cb882fccaaf2e1a5746d4af09d570a096d1769addd25da76b578e4848ca532491b277345624ef733a84e3aed0e906848a6bb778465d663f560fd58141574c015746e4ea8c3b8922448c33f3dde36b9f7103118a39fdfb0e5b22c67e3f107b397db91695ebe01bfe3e51767f243a69f73547b835a322e4d7221c5a87a6b510aca4018bec8f6e3cf36a85fed67f149dab96bd4b31e54808b7397e6253609bbd39714b6e3946a9cef095c0c52ad191a31ccdaac366f4c722112ca8f75305b81c5728f28d283c5779423c05f062c40e5b29461bf290779b2929c5f6b1913b1ff90bfa3d2e61413bf4b7a7d51716193399eba36a8a91dc468e4fc23611f6889c4cb0d81118c9f590557d68586d74233d3640fb0b6674481dc1b27e0eedac2d5658dd9d84e3821159fa7b746b0f7ddffc20fe11d38397829c2e8cda51facc41dff83fe5bd6458c902f0290910ec5d8a9a981e2f03453d80b4399955cf58f7bd0bc1f5b8e30c7703dd39356d961eaa025e8175edfa03fbdc178332af15bf38acce633adaa3698dd8f3055d59838680ed5f8f5fd1864e767efc9c695d1d91eddb3758aec389b5be3c5ace23b847b5aed7c277074ddc0f96dabe2e7851a68e3b275112517625020e9d12824cbb58b5dfff5f355cb84367290fb840cac49fae30f5e38d8ddd8231e61af86746f14ca8f67f2025f36546638c0760725411c0ac7f84ba6d46a9392a4d46ac10e7df2624901682ab0804022c0520632464d7e261a86cc1b56188c238d680e9f6ae7629d5f277d7fcac4d0c141402b58d1c24414d39fe43013509ef03ac5e0596b485a0fdd0385943125d3ed9c4a5a1857756e4ecfdd89f7d9f1527d33a7d0d86b8791d3d3ec13be9863de3be3ffae557cfe45d62159c64f65e4fc48ee4a850a7847fdec9461bc821287c8f460e0c9b3132db73debd6d488a52542555a543df89774f1dee980a32a916d23826bcb36723ce30008df8ab2350a75781bc73fe33048ada7f57a3188233bc1b74b88a6ec10e7eb81798777c4b7ed8212ab1948d5799ed9177c268c8415891e092f6000887040e87fd35ef24db5044b0319253f05995311a0a9f2bef98b13d6d4285102b6fe6e41d83d170e8cb8bd3780f332679671212739d4cde3140d470b82d85b16b17307ae45d5ec38a7d820c38ef679f5bb5aef54e10efc6bf8819756f044f91872b4171253967ce047e5994c64305bf5212ef873356b2aaded7cfa10f4dd2b8d953563c9a0475351802f73a9a87716c8c71df5959ae2cf6b1da85d36f0c5c6178b764eba4bd545245b951a2f305f9de770f41b61e9a4f2949a8b9e0917496756787ad7dc42e30bc7c8063ee3649ac43549ff0d578039d6bdf3f896a41dd6bc412344530700d919a1c4c7a4c537f59f8930773d7cdc3cb58b0aa6a53d7fe2be655cb7eba80153aca2470713059385cc7a96e5cb5b88c76c4691a635237f2e99bb08e3c1be6e6cc3fd9996a3ac3f8e76730368d9f3a331184616388f06146d1420e5b9c026e10dd03a19a385a385d2c8f83e87fa3366b9db44567d89962b031846f0fd02d6035b4a1f856e1e752639fa09bc81c79f190755a86327449872ddeee170387a0497ed7adab6b52c23ea85f3f022a0291ace06ee07ec440f713645021e74c476ef9fc424bbab4160ccdb05d52e3ed31431d1c0387b6036fb7334ce93579974aea4b2ac8368f22fcc01cdc1d2dd62dcd9e0279b245dbccaff74f8f988f58b3f1af253574642fec20de8a775016893d990296995e8593a6214020b7e399a86ceed214fae2e12baf1dde1a804131849aebdfb9d891b13915c1fa9dadafd5a86f24572d8f3d6de564ed1e4188e55a6841093db4d1ddfe0dd1f20d643ce07877854c61c0b47de7cd4a37281293bd01c3077f45d87962f9af0e980ebef182718c7a01f62663d19df6a121419e2b94b3baa3cf9db6372ecb211ca29750d19dce5912e616f45fa78dbea7535dc009e9b4460b5262443ad07bc88241dc8744d986c68bb15ed1a0d3ce03ed566a165c61d69bef4152d568f74fd029a05f3214e807480a2a7965b83e99fdb16d08b8df3661cc2b1641eda90ee047d6dcef12a8a3599ba9034d55eb97638ed281a1b2ed9e68f02ddbb44431543c3cd93a2348487f98f439ea8d6e356880970f5848bd048797641f46a293ca6aca618814722098cf9c7b4a9adacc87f165dac16a9a9f105bc78d8fe29e4a6feebadcb3b2364db7078245900a8e8c3635d67a71e8aec2f9e149e588d1d10db51ec425048926925e57d32d500a2086d685369d8b9ac148c3a899fe63a43d622d65d3dcc7759a298f9e18e9702fca9322d6267b915e0512b3e4b9cda4182c679b8e64b64930d5e13cdd4f07e01bde27cce7fcc4b1bf03fcc43f9def9c8672af43b4e8533aee895f7367cd20864526fb27c2c282b281193294a852b2e23f0adc3c523d8ae5d2145095a178e2c8a2a5b3928636250b84bb8018782431c8360030aab620734c51a70d8b5f282a3047bfbdcc08340796b755993ca0b883155e4bb13151edd2cc0a5b166c23b9102a002289eb83d77e28378a18ef21e47b67c0eb39d5ec6251bba4a0b42b126dcfa6873b0d6e648a01b2ea37e920db258e23263fd4f1771ffd3b3bb0fcec93a411ba068541b36d8cd644cc59f2b85d86e4f6646c4c7570a18bc931862945221bead5b81fab89c8bec8b491a486f21ad52633f81a1e568232c0667c2791a2642ff2acda6842680f33d0014c8cd09fd977aa55c7f3f69e358b61ed04354a8a8030c9990d2537f4899b316d0fa4e96fa1828f65de57e38d707634aed1ae93b2de04c2bb0daf932c6e8273004fca0fee39ce928ca376c108ee115401d602e26f2d3505e1d849bfc4d3584829f194183774e4fe17f80545cb263ffecf067257737fa117b2e087678b4e1c618177848eec9309b8953ca30e983f16ea61ff90a1261a2adce497f518997bffa34c8c3e230fed85280561f5be00c562d5f0d191e3e9fd09260b1814566b1a159170eb1eb338a0e346d6a8126c9f0023c3ed2da6a4305381487ef35f7d582d6c298d8312aa3171b01db266f16806c5666e92deefc0b5b160dea2ef35023676b2aeca28439383528cc6ffbb2ac8024ef21a544f0e243d990a32804fb6465593834b4f260933804eb206a74a0e2c35c8d422a11d98e03594ebe97d7d29bf548dc48349f2aea523234b83937c7cfe29940b4aaf060fbe1549defaf7415fa959306a20805afdbc58b216c9b376e75514185230eae3eb324cfd517e5674bf121a701c677a7dd764b88a4ab9c938c7b1e8e6fa39d7b0abefb32f447fb49a2439099ca6051fb464cec8efae6e0e585b090472dd35781a65d1ad8f52edf56364bfc186ce9cd21502f9aef0effebba158ac59f5cbe0f98bba8aa7a554c91e67fae9e3eedad6087a53845bd374d5ca8ecb0de370da227e7a59b35e5097c472e689b87be9c91738538c59201669a4f63dcfab5d3e0892fe4ce476196e208827d3289a07352e09f820c3a934fda043728a8a767de5adb2491f26008b635bbc12dda461dcc82dbd65c66482d54455e6dac74e680dd1b14d548f1b3a7900bba0d57278d161e34a1b6661a5e5744284a7952a1efe48f86c69b207addcbfbf7afedffe1b5ddbdb647011c691f7c42de0a6da92b7a0ff05f8d19412782876faa8420e62f0588a4d2470687c9e8b7fe8fcd5fb77f3dff47082a2a64a8cbfffe32dfe7d4ad3f1ca74a450c814a0f35dc97f9dc93a2b5f2ac209a2a1b315b78bfd191d363836ed3136f6a367ddad7bdedb15e1c558192bbdba12304777a664b81ed9f8ecda9db236c263c9aff76758eeb1e12b53010dbb796351b78c13ef606887afd08c34a8c6899fa165c6c21d0e75e62029e67f5fb9f666353f65f8fbb23375639815d9e5dfc6fa18c6d81b6becc5b7cc01da2e63a2f24830d002786a601be289412d683d29e00ddbe30f91fc55d24f2795921653c344d55e6574025610d0da52a14302343db83312a2739a4522d95c719a662ba829b61e0312aacc0a55fd618b812db0a70ce8a19e36d883f7c4400b929e4e0efa7c78abaf1831d7f940f77b196cadc3818180fe9ac23f1433f4821ccc1fe392e4d3b6e65fd987b1cafc7e86b50c47a864d0231cc7ade0b089212dcc2f0e534088db81b40a5a174d715fa0e13868b96bd44a4912138daaad1d88abf9453ab682b4d80896ad061ac19e1a98d6bdfa438989526d9ea0f961c0fa718f27905d01d231936c159e148889f923f2fc3e63e410564e4df95f316024771022c061eec1ab93e0b7ca1d10d5d59264b5abfec04ab69d287b6a4b12583c25199312dd8fce1e95ee4f0df19e3908108736daccbaee8364892115a03d66f7d360601c38a45fbeccea5f3b3bd218f47e823291f5b4d10ce9e7d770026f6acf8000a28c89d9df56429f61b5da85827cc317e42271a08617eb92108de80229163f7ae30eef4c83b5735cc197a9b4e9464af1dcec1990b66c04c025cc89dc518430788464e2b07445d4046c7fafee8bb3bc82fbf0072e4ab62ffc7f079353f362cda02dce84bf9cc67ead02754b36b96b9d28817d1129aca416358b614c3622ec2882195812839df17103c5a08a47583089dc7bb538e90fe6bc38dab5469a4e49a86881f64c3e4a4c28d42d3ef6a9f8d44fa7042553a2689753136fa43b9332ac427409d50d3d2aa57600319b1cc9c0a1b72fe1bdc23ac2cf606733473ad879a68e6404bd385b4fac734b6d7ca03c82fdc99a635a0058ffdded0e25356f0d4087720f50578916f49c7d5f057624bd16f738842b89d10666609a1a4c02eb5ca4d3d0d834a913a075805e0b41123e390ff0ad0500f84e1cc01520faa33d8d0993426a71152251fba080c0290a9a019ef485dbdfd5015ded0aaa8cb1ae6795c7926ce28079250d3439602488989f13d5522dfdffc9a042bc724f4ae3febc54db1132a06e6df4cba7a735b8a317afe758402ca12a45a67303dd7a9fe83ca0e759ce858f4b4cb4b3c10c658d1de592f291cd450731caa5e802f03544f255bab97a8b97bfb7cbb832faf3f466c0c80346913d96c50540d5ba3e1e9127970bff3290fc427e97ae9f981bdf67c2646cc6a93726c752e5f7f9e2d29d4e8bf5e0829443cb964ff3c409154eb18c13ac38047a473ba056305ed9a4c52d5b26bf08aa1f2c27148f3f7be898d881b5dd073ba03c4a692af60db1f003f46c55e2d8e0dde1560cae0518221422eeb3dc3330a77f7240346d1440cacc261a66f4adbf6dad7593442297b6244422bb77040b5a0966094b2c41035e79f0dd3eab6a13b08efd549ffd655ce4caf0616c8f5fe4e383c6ce9ea751035eb9b24329720f7b11faec10eba04da03af61df4d9afdf9f4207fdd237a44133e74f2ef2d13b3bd34c35a67e703f2c6fe556dd7a11fa7a882f3778e5941dfbe85c24d359672983a5d6787836448a604d8bd86b67ff160b58c00269044ec156b082151079336fe6cd28a1841254a5a923478eac40052a50410a5290021f34e095021c91518002144479a24412492411a3c0272738c10960a6094c6082293a9611482081040f3cf952431e1e9e780422891092c06a3ee4351f276ae957821294c072329108913b31c20fd877fb36edda3b0f1f3c66f54a539596fa88238e7857942a08b320010948008dc87951881861841134141156f361d27c982aad4d53bfc3c7184196ef289df3aa7453ff907bcbc322027085181b8011e4eec6380fa9120ce804292310013827d609d9b18829e392a8a488324426a49c972265ca142a54aa54b1222330c40370080cc196100925b810239def3d795883ef5b22891d62411644367dbda5f837ca9090c6c25f864e1be0848951f8462874d2776c3ec721676821aded189de5a796d05b74489f441f691c52067fc706638c699dc8614d2337ffc93963b7d86bbc8d7d67e3adfbc6ff844238943d94fd4361c7f8d8c6034f3e562261b6f557ad5e8a5cdc6044d1f64fa449f44031625ff5b99183173901050a5d13aa297aaaa88294195862c97e3d56f0dcfd7aac40b2e127d601422c3709a12c61451129a77c3355549974f65831a40a30cc28507aa2180265c97e50cc00058b29e57bda0829a844e1494f15519438e9a982a7a70a246550d25345113434c10a3d4d80c21645ee9a8242fc6622134fec8eee24b6b55f4f1382f05e139a6c51133e40e533542d56b02edc7a9830c516c18d094eb6a85ec8841d68a62b4995281f15d4fd7aa43862bf9e255c2185077a9690c57bb0808737c238458f153d5634b1e208731ee9a1a209158f8a1d50a1040daf878a0234010b279ce039e1034d60430f154f7aa888d2b3042df450f18328f42859a27be4e7a70d24c98de6146d82ec40082184100b07a822bfad9da4768ad79732b2d48125f6b55f4f1441e889c2881dc50eaafd7aa258b24564b02fe64812790ba29d3e9fac21939880f9d0776c6c44e2cdf8e14d31ec39cfe3cd8049bc24cab0e73517f256a98eba0fd5adeb38f6da7c5841a67e5def61c91317fbf52c41b27f9033a016b4d0738323ecd76303366c19fbf5dcc0086bc43e801359efd7630329db4a6c72b13513d55dda87ef6c6ce361489ebbba69b12fedc3dc105baf289db8299e3ca3c02ba28c11ec8153a0ec6864c6b4993d365032b70c6a0a1e26110984a27790a30c7a530dd914064a9bd23cf0abbe4d2614000c32f50e1e61cfe3e377b0c9124a63e84490bce926ee8cd9530a600539897b8c9744197389f8a16845514a1da10a953d2b0a2ed1032641859d4579892883d23fe29e49bc273d6c90a90f318252322e2da50aa5e115169128836a1d38902177104914ec3e44193c2c219b9edaac65551e3a7187aab3773a5157174ef58ab2e875f37036ed06f361637f9bfa6069241892452d2b1aa941127b5294cdbc45ab1fa2f400224505437a9aec7968e441e1c19eda5f0f383e5073c7ad899c0344e18528fb9eba8537e6d00fa5343a59409439a7361f991083cdeca981137b8ef6ec59c2b3e7e3135ac9d0de34326f7db616351882121b4baf0ef611dfdb0d6a217254f08dcfbe1a624124472451061c129978384098a312c886384327cacc4f51e460f4fc1039ba86cd0dc008264cc93ad85072178de490d7727c828c887c1e7510900e228011d8088137c8028acde70fe7880fa2557f369f6b39467f567ab000061b2191ca93293ab0f95ca48308b149d4b0832cd87c7413f4211d447681082b30b10922047421ef0a3ad0c2143620dd04f5d963d389dc7cdd80446e5e2b45ce94377dde54dfa07f889c56fd95e63f35a0323fe7dc6a1692706293294a6b35919b9f9f467634321f79e6e391f988249ee2bc71d381a551869452ca39e79c724a19a58c2f722f52810148e4ee1bea0401a2842c367c0f36615245ce804ca4fc8b7c53d8300adca02ee46a77733fc8444626e292a824723132b1e3631143c45b3ae48c21e2f5c3862365ee27cd2709a31cce254daf4b4ad53826f570b0decc3c35abaa0073ce397f430ef3350fa0e09cafa4b01e0e30de7a7647464b0a18c5ba5e3d07bda52b5dfd8253c239618b2953422c764d42935dab5fdf61b3c3d2d7879055e3b8a8e6a8f91e288a2bdd4053f38008e038e9c0a1a6bcd7fefa0e7beda81a677b3616f766e283983fc41ce4008ae502fb626a9e946bc32165e0e94622e54ce929b96914fec5bfb8e65a3d84a5ac8ab22cea017106b499b72a6ad66d08fbfa1df2f43be2718690a73356511880449ef0177850ca201138e9e8c1871f7ae8002112218437427e0c68418e534ca928ea94fa10f4c1e0803cf130e28c1736f1377461c7d39cc126bee601366648091f35b2ebe33312a0ecaa45607dc78e4ad74c01431af0ad2169614479804249108a0c194318c860b3138225383883912bb03843176ca29cc113b24b295d0211975aba46a0c686ddafc7083d21a8a23081136e9422a250505030e496ee15c1bcd8afc70843d8d77e3d46e0c1ee62a82f40091265743440028004c749078e0f393d74864cf86ae2e58c1833b60960840c19b0445641ee1e141b7206a50f07111839c870da9838221039f8ee41994aecfba6037c2f6f83a44c7af2e8e3e1d9c81a1b523f200b0bb09ac9daefd67efabd19a8a715b91a6a518009102c2192059224aeb0894cc0c110b4f0832b3db0220b9b78eda02ac385966559561cc216ac2aa6c0c2b228a9c7084bacc8edd76304223d50b0c1a58a2883d6016c495d7e00167c33b2eb2e2766cf579a2f7bb83120013301d8315c89c605c3f7f0566fdbb0ab4f201ca03b07c07a485f13a39452ca01ec19790ba5bce9492963648d150be225d49732f352d7c4172b79d26c9a9a8e86460138bc19167832f3d70502b954e0cd4c9c37335f44c33bf7fe629e1035de14404106264031850d5044e1899cf7eb8142094998d9d20b4593108d3b14e1a1b206d6baa154a221e208444c41c415952427144890aa4b692e824a9479557628c2ca9028f34eaf80a81d3ce0e4893454489ef042de61089527a6d41d883c3185ea0a95f88415f6579a449977c5099af3921a8bc8a0fd7a9e18c2ee4ab70b4f34a91b0c89ce07b3e77e541003135789ebea8c53671e3fe44eb281f9bc1fb6fbe1ba1fde11f320ad6d5f94f38f0336523f2953801da5c86869c2a8384a67cce1cdbc9732e9146e2932fcab2825294ae9a35465d147e98eb4e5937997afee245507e1800d76054639a9caa255cea0363472f2bd77594b7ec25929a5945af65e2a794a656355f451fa70c824298363cb6256b87a74ca148a524a29cdab2caae9042a1b9cbd840c8f13b98943e1e04c993285be99784aef10223224111165a527a4d63b8aaaa69cf2b05ac2a22825430604b559d20ab1a7b43630048454655921a0b43600df4c15a91e3c4a5a314b99ad0cf6715406c4dea4156293104208a9ead228c37a1c6585b036b0e59ba1a4adee3f994c782456f10924700964e2e4c915f11dec0942931da5fc8b125fba8186063bbecb61c72733caf81e4ed8310d4ea6acc08834389982cd4e08b2e88115244138420948883ad81d34d241283bc2289715d715b3afbf29fbfabc4e8bf0837d3d3f01c1be9e40615f9f1727a90d6cbabbad6739c08a8265fde1605b9f96136dd8d6494350b2ad7f085dd8161188a083e5228adc91481b5e07ec4eb4ab2038b1abcfeaf404bb124217481435a11085235861339f9d1861cf9394d8b30708557e90c59e931b32644b194b54d8c7801c37a43202bfc7d674d0eb4d3ee8f9737c737deecdef5d5e4d2c6fc94e7ac642d29a49f47b91d64c17fdde937edf32d2dacd5b2efcd15bfca335d3e89f8f3897830e730c74eca0bbc8cef20c67bf9e1dbb1cdfe52c5a3385def290667979cb5fdef27a18518676f3e22efe02e4e2a235d35d0eba0b98e716b759d642744d6b372f6ff9cb5b8434d3436781b9a37f0ef3cfefeb76d037adddfc2ebfd66e5e1ce62fb476e3e22dee42df16305abbd1fe72ed45c744ae922ed221cd45aede7fb267118c57aa7b461934cab87986dd94a30cede6defe62d7b59fdb7f5e4da1bf860eb2ff5cbf37b7e5f72dff98ee920f0ad5c3840ed29ae9a27ceca3635a333d5f33e167c75a33e1d07d4b8bd64c2c1f9d4533b5fcd29ac9fe1a69cd441abdfe51867603bae820addd7ceef28f09f4ab35938bd66eb41b163dd2a4c8d58bf231addde0878e75486b37a07f0ed253c344ae66bfcff0315d7fb576a3b37ee4ea0e7457bf6eeeaedea909b421fc86f005fc9420ce7831ce7831ce78d1ba71bd52128ae9d24f5e96a52c65aa949e92d5baaebfaa4d9452b7b2d4da45e1d3a6eacdbf2a8f8aadb44669d3fdf5a2504fb4264d94fca3ba06c77122f7de23725252b1b43f4b919b740c3292dea4d3c86d6ec8c18a81b1df0c126e5c6a6ef929a5d4ae79bdaa44f23dcaf7584da899e8a3d66eec20fb1e4e6d59d7997623ff60a54dd6e7df75750713ab36e15f6bf3f655bbae9d9ada64b549abf3d73bad6a130966fe5e9ad2a21da968b2c7bf7e2bbed4ad6f1a75378df4d27d2386150de29bd59bc93eb15b6fe69de6cdbc9937f366decc9b7933f2efcd90decc9b9102b5d5be4e5bab8d37aacf92b523fbc7da813d5bfa94e98f36729bcf09d3466e833d6b23b7a9b479430e56cc143d4b07795b7977daf55e432b4d555bb27058abdefe51d12c7daa34a57754a7aed71edbb231bed71ea77c4ad30d9f3e4d2d757c3dd5f7d2daa5b54b9f268e9a7dbf5e355bafefd2ae7fdaa54f555bba2bede7d763c7cf5aab1a1f935abbb75e9f61f7556e586b579f34ab4fa5fdfd7eed98d79d46f5e9fb34f577ac9019ab15e45fc5e3691d39e794524ad27b1547519a07a57345593302899a47a5697563e924a057a04851d49450fedd247592fca7937c7e93c4c86d3e206dc9ec9fb965d6bb9b763debd54d967e5272729ade9fbc1ea7d66860c737dddbfa0afbd4aecb6f96d62e4949ad6acd44adf9bc493ee0aeb446a3babca9323d6d9a4442e40e8e1708e6b5102fb60ea9b2aceaf21c4569215e64aba2d49bd3c7ceaeb4102f76758a6a08ec6c2b4260674f1a08ecec4ad374a41d81f8fef1f262f8204bdd3d860f762a384d60ed832dc816621a1ddd14dd9d26e3dfa5365da47acb5dda54cd794a56d6e1b3d5a64aedebfd9ba1b51bd527756b03d9d7d5265bf593d7341ad5a64a27c93e7592cf69b6d449b05b3a497ebcfd47bf2843d399eef1e96bd6b8fadd2a6d5a5689c67a96eeae2f2b9e5ada74fdc6bfa8d15357abaed15bd7f6b44a9b4eda37a665a24c536b2a64eed858456149d5e5a9563dcec6db711e08ba7fc06c1f3b3bcaadd3e4493b6f4d6a1b6fe74ddaef5108b9205fad53f1f41bceddb61aafc9bf575a93568bf6842365a87aab7adf716fbf033bfe7ba555916a96b6fa84691c8d23652a7bc2913238223771446eeed448f9c0c298f1627591f6ec795caf4f6bd6dfa977f47afda535eb1ae534aa6dbcade9acae5933e7ee1f2fb68f9dcd43be7ab5755af5984deab44adb785bb3cea3aa4ebda26090767ce7762e28b3b851c6a3a6eb1af5f8ad6e956a8dba56fd51538fc85dafbf65bd1bb49277d768a2ba87ee11b9a83b8dd2a67df7bba4f74934d892142e0a093ec9d08912eb15b592e110123472c8c3c123258864c3f72849a1a1f8f6f594e64c223d8d5e3361c7d76a60f6b8e25b5c6db5c7d8565bb12d22f1abd3aa357cafd9ebf4d56f65dddb6b5556f57b2bcbba45a4756d9ac9be5eab61ab2e458eda2beac32ba42c65e85544ea1c9a4de351dd69f4afca864a760ecdae01afec5a751ad5d6a192fdaa6ccd548322d9ef169462dd5a518eecf713141e78053eb1ac40263da012cd64bdba56c3d2f224f5e11552944ccd9fe4e3a9a98b48fd24cd4e15322376c42e3913a425760793f81c12f91c5ec7944ca58a15ad811e2f7a07875cf129de1142ef72d8300423a435903ecd53173d1e3ecbb22ccb367b0b459bcba9ba65b791bdd9c6e2f2cf667f61d2e336ba6863b9bdf00efa1afae7f6de885bfeae0bff5d2f5f3beb7c79d15a1eb5467a76fbd15d368da4b5167d7a7696db4aaba5161ddd5ad57b567cf1bd672beabd2abef8deb3f7661bcba9eca2cdfe7375dae74fca8644f6bbf501475ba77d3424b259ecc4b8c218763d2d50931a8dec76a25efd6e1de4a964f5f9bc11d23467a0679448247a8d17daf2d6cd9d0fda3ab841ff6c1dcefe847e3fa12d3b68dbd91f9bb19ef6daf908a9228b17300cc36a7db186ac6b5916bce075ed34b9af6e5581a84ff5b1959e2f72d77c956652855577a70d0ff3b6519a73dc2129ea9486e8455d96ea70ac477c03d3d35eb5d6d7c4acfbc630fe9cd82b3cb19d3def757b5d1bf5ba513d23376f6da52b05d7569b76ad92afaed3539f506bf53ce4e1eb35eb3cece12d6d0f6fa755370da915e3885c7a57ec5408bf60314063aa2a5da2e02d2c723dd3673fd167107eb02256670a7e8efd04fafd1c7b11d0afac4ea3c6c4b3ca5ea43e3f621db40958cfbea33edf1eff247ae8566391ce15fe0974fb2902d2366fd9ac21357d91faeb10d75fa00ca43f596798c557bf532c98228dcc5821811042880118d63fb4aa7e6dddcebee8ad6e755c51b8bddb9135a29b1555d4a2ac3d8685b09b6db6c7f6d72f05eb27c437fbbdb5f635116f5946b30dfbc330db7636c47075bb5d7a52ebd120c7e74026b10916ed15e0ad1e913349dda347e46a20059bfd889bc73bf471b29a8f93d538559fa8c6d138b39a5d0e0c9c3122b1810d6c501d61a2341f264af7881c659aba87ee11b91ad4a00653942851a2d1a03e6fa2af6a6834a8cb9b2813a5312f6faaa89a98244912ea092558d9d909f4cfe93f96b5753bf6d8c296f51a6941d67ba097656fb387d8c749f4d147d5a86e564489ea09f4d06d68defb2c0b6538df7cefb5c7a0eb12df909f18c697144551d8abad83948d0fcf9d3d337c0ce3cdfaddac9ef395ea67632345d120573a2736d9f28fc98d560c3398c10c78986082094aa90c64208318c4200644240c60008311504636122448005045f48427d37cfc74d59f2e8d2325fda9ea93a571a4cca4a6c611391c917bc10b5e1093b8c0052e806ce069410b5aa0640a912502221149f49a38b7ee7be2cc6bc9b9b3e5a8fefa5cb485f48c5cb66fd99ecd47671bb6e1d3ce81b1e19f9cd372b2ab2ebb1c189baa87411f8349cea4eedc7ccc81b1a95f1b0fea549d545218bbca9944fa392e860ef29b8f3074905fe4e4df0f083728661f64d2b6c7f45e8de28bb70e3f6ef106f68ffdfd615fd20f9462faa37f69a64d573cb630d6dd0f3b8744fa6167b7f8878d4918ed7ea0c738fb68136df8867cb55aa44124d2c6d85a5c5918e33f1b18639a4d25c99ee21c122ded0765575209ca2ee5907694ee49d9979674f18b1cc53728949c7348a452bc48b8e2e5252dd031cd5b0764dbac4d208dab75d95d67dc587f91931474499924741ad21f1076bc81e8fee42b3b766516c37ef0036c6e123da697d6ac5f17266d0b5f4daffc68597b794a22ed5ca9c422a5020a289070596a855e555bb72cca0b093ce0011278c0031ef0205327a8a27a83d22adaf46d9d68bf1cd125c2a7af5bdcba1cd1be8f5242606763fd6e7cbd72768e68c3bf4a777057a29c7d43a02ac26cc5a7db0d8168ae3ea26db71c51f7f9abecb3449d8e9c5d2feae8a5a33d95c7e886c04ece969735674a734499685b391ce1766f8a520c16d9783bdb8cdd53acb5ab55d6d6d34b5e92db39f0c093a9288723d4293a9abd391a2fc262c6d5af4badd22ca5a2fde345cd6173fb556de36d6ee7f01ec6069a53a23728259138ce96b68dda5fae5b1cdbfe3d29a5949a7e792e24fda40c8ed205ff2810b675a58d1d5bee2d7206c99eee20a15b876353d1f5731c0e8bfddaf0497246d6a2bbcca2471ac79699bc34b7a50edd2bd29d2ced5009d4d14d7da888e36a8d31c60879e01188042a61722f653ef6044a25dd455e9c0b49bb525a29a52c411e79040954a2350c9d70460e8790ace42a5468704ab2526d87cb853c9be3a4fe757221e1489977c83365c7f72414434dd8c723690ebc411f2f1fdf8ed14517fedb42ac6c7ab975f7559f46227d9dead325c4cace814630febdb7207ad90d5165d7832eb74e8895ba09b1b26b27c4ca9607e9cc1eb35b75bc61ba93d0c8ceb6ebaa9f57af97cd81465eea459f8f5d549f40f9c25d769ab13c68d3b0bd76ebb55bb52ba5bc95af9347a826f5098451235bbbb14a1979fd49992a8fecc8b3dfaf1da183aa3e459e233c5b1ed90f1ad9a7104843233856244e2fedb3c7da8dcfb3bfad61f66feb72d763dfac354c9b3e37c3afebb12ba9bb1e5b67e25b7ce51e3bbb15d58bb3e57becbc2df6fb9a487b5cbb65b44792d16be248bf78d0a5be8ebd465e58dea08dda90c577d3994fe40e0e994f4c1aa9a4f4b7cf64063d5bfb8e62d56658fe759aadfae91c39d969569b1e3989699d59a2d2febabc9ad5dabd564faf7b791a317e1addcfd12a615f2966df53fade3ba6311be7c4eced3af698fd738fb74ecb7fbb878dffb62e266b53f679cfc61eb655736236fcbbb737c7eccfedd6f5b0ed2dcc6852c7f08e932d8fc56cfc1e363efdfc6ef659cab3647991ee4891eb7a48d2f29a48738b065dcfaa7fb64c77326683b64eea9c985d6f64add5d0abd37a431b0febf078cb89d995f54d22d5aeea9c983d774e166c8044301bf24db95556596595351f24a5d6ae2e7b3c687b91fb680dbb76fc7c691826f1e92526a5c4fac564fa3de72f8bc70648446bd7b1d3531837d8b831579baad6f0b5ebd46af8f5f4c6312c763c8924a3d41ad62693d5978e89dc33e540d90f8b088a9f12d04d6b5c59b5e93e5ed20d64d7d3bb69215eececd73efe65fa3e90a5920299f5de5e6e1d10ba693d905d435627115da45f9401d18d514a79543a3286934c9d64091fe59f0fa40f50605f4c97afdbeb655b176467a1138b1e9daae87a15ca97eeece5e77407cb68078e94a135318af48b1c0cfd451921aa3ba93368b3fed9b2ceb6b9b1edd17a6fd1577a5d6bc55042eee8e3e9be1ea30739460ff2a5bb6fa9841cbfd11ca307568c1ee44eca1ee4f8476521a6463721ae21df5d937c94356ed8daa4f536fa24a6afd705d95777b29392c2d7655d4a2ba5bcba93af72bbb4758cd27c6ceba4d4586b569f7a551365dc92874edc1fb84d1336dbe88e31846c1fdf59ad13630c214bb8b36d6e7a79ab5dacfe5ebbe4b34b2ca3f2b6febe6aecc29a6e2a75bcb197b75abbb7b77e5d5e6dbab762d5a67afc2a7fabb4ac0d6fb21f70c32e634897d867b388bdcbb1b433dde1d8197ec4216f8ca3d16b62c43a846ee36d7a2b2fdc4c1f1a9f835e13210efd6196d8e1d8f8f3f91a28fa93a16e67c9c68fff60dd657f67d9e8654206d54c91ae0eda72885cdc5a22ceaeb3ee68a631dd65acafee48daeaeefaca7bde7acbf6708daa3b1cdbba45b70e664f9d53823ba15859c13e9bd1d06cea96ca19f98690b5366a763c058142a017890fe517c9f40ecf8ec7208d8c32ca1863fda34eb752bc2172d5431b68dba17a29de7f5e043fbbfffc74ff39e1673afbe7a7ec9fec5324a43b1dbb3aa88ab448666357c7f08db1dbd9f1355108dda1b122c26ab46a8ddaeb3bb263df817fff3ee904b2633f65f584afc69132382227b9903d5ca3bb39f7de1df73ce563676f5a88177bcbb9dbfe4d0d023b9b6aed5e7a4a6b56436067f3a83cf0649a737576ce6581a5300debef3deab23eb72ec89ef75453f2ea74e2bcfaf5d03d2247ff22d5af0bb2a5fe21a308a2ac5745afeada3aba2f596d9fe7573b3aed940101727daa5b816c1d796d1d107bac6f76eab1af6740e8b50303b2b1dd3a1d49923346a2521d5df47298870e7390cb5beef279ced9e92caf394467b968f4cf28e7787e8bd7c3fce530f924ad9d4e7ad65cb4b75c3bf639f6cf5db667df4e2e1fdd05478bb3fc07b11c7496ebd05f1efa848e3df44f8b7fdee22f5acbafbde600c0f501c0d2a285d64e6f7196eb5fb49d36ade57871d25f682d878b6b77a1b5d3b79613e92d2fcf2e1ffd1f3dbfe608c0591e00ade588798bc7682d0700fe03406b39f4b76b4ddaaeb51c2eb40d29534b355a0ed25b4ed254e39032357fa4b51c9c8e872365b29c11fae7a1533dd51c20ec1f5d3bd51c2d67c93e7aa6b51cd8738e7cedf9da47a7510bd169e40c2dc7e924d1417739d5d3e7a1cf5bfe794bbea669edf47297bf685a3bb968ed047397c3dce595456b39466ff1d1296bed147a7ee8f92db49643cbf1a2395d9232f524ade5c8f139b5682d07cb47af1f691a29532fd25a8ed0738e8f266939305d23652469c7c60f12cf662f3c0cc9b746757b6bb7ce9e56b7b7c77f7087de6ef96e55dd3acd74bdaac75b908d5daf7ee9879932fd8eb7aaab7417643ffabad1579bf56ba3f15e3fa38cfbee61d3657f6b657557bddeb86eb6d5ab7ab7b3f1be51c62793b067bfa6cf33cb5b9e31d2e8a18f708f1545513724252ba9a45e7433426deaad8dc807686cea8d509bebea2111b065cc29a37c55c8c10cf9f55081c9eea182921dff361590ecf83bc486de08b5a17f0f8724f49d7cf5de8b9cd501d9f38f874edc53ff903bc906ac87b68c3965dcd25a800c026ea8137712eb0fe770808da59f949924b8bcd4f3c998534679e5ca02e2bbf70e79c027a1fc4015a7ec45519bd55506b6fc48eb9475f838aa034150b75725296daa578e6b9f83aab4fab511b99e89ec6ceabd035816456367531badf4f6c907df7b116355d744fa4ace4bd1ebd0aad2e1a214ee8a9aa7918aa2643d729306615932e6a83ac7e34104198867e551d93b363b36f144ac67291379f84006e259d93af2ef00f1f33bde208092affec71963a4b0f59f8ad411b2921bdc4dc0cb2d884b282b4da98e595d52ef20918abe03c4cb6eee5025a7acb62628051720638c93c2a6fe11b76ce247dc92d287c37b0211f6c9194d4c3b710e234d0041b379707bc7867e9aac6b22f41f6802089aad230f50cdcf4e88b44ef0c9540dd4ea730bc234870c1932c4561435b589da30c6f8284cea1f715b96dc9a985613d6941a04593801953fd37c1cbe1184daf2477ccf0030c6579669883d6fa867e10452b6fcce8eb8c6cea6d5bc415de21d283d2307b7dc3b16944458a95f948710471d64b983800f87f91f710778654f1da101e263107077f1e130b36cc7c39d29f103fb4c14659a5307513d3eca1f71c23777601f5c40840bb07ec41d447563af5cd95d90214336d433c88f0d6a20e4952b9b9a1bcf0a08b92b4d4ddd06fb9ed00305231b6a9d031cb14315582083f7172240c622da2b480b85494d2a56f15e12de9320c86d0a1e3421b72966b045f682760a16ec6eeed7334509a60881bdd7755dd6de2b619c62c8165d16b394a062458a28524c71b127933713c5be184af31fe5010419fe5973e30104598bfae6058feaedaed29ae9517733c7c7185fbaaa8aafe279545a4477756bf3a8445146a5a5bc252b516555952512ed18237b2c15659c9fef3e19f133cf6c042a3f6fc6b38179bf49bd8b9f0c79ea431d4ea9251c02c688dd89e80d4a701cc7719c0e1d9c0e1d9c28733ab6bd1db1b49098e8e074905a482c24928e24a4d7448edb202e7352ca12072472f8d9c891731c872372ef4022f73e4e62626262627a88898989e921a687186374d243cca655e61eb091a8878c448a89898989893146273dc4f410638c3dc4c448292515520e9732c7068d22650a15520e3132ca28e37fbc8871a25eb5d61ab7c78efe5ef2b8ba6a34f0ef4d58d36a4d4024c4b60ec8c666886eeeb70442415662bfb97412d1e5cdd5a26cfd4377ce6abd429605042058383be8a6d0f32fe983e33350e8739a3fa7566b266baaa737558db3a5a07f6ecacf22f6ed5dec32c3ae61add1b8b7375d4daf8b5e5aa3715d1a0d4a2d154a97e4ae1b17c7e9d8f2d4c78ead96bbb87d1fa594f2bdf71ee987d3b12fc63212719b5e8728c3682867dd81b86db7d0d6813ea02d87e324ee32bd7698e8d8174769ce24d2afe3ba24fe7dcea80eacfb73b81ceeaf241e2340a4e42954ba57e5509ed06c8ed29c2f25b7ad3f20d52b8e2954ba578546c6189fc3ed1f2facec17258a9528fb59e14a22221081084f9095523c343bbd752b07aaec4af15c1aa64dd7d2264a771f0e54d939140fa531beb517e84afacba2d51e74e59a48f1ec4a5514cfbe6e292394115106be916d3940655b1d07aa6c49f16cd971a0cab66e452c81584d1fa95f5b0ec573a33af5976dd5df63ab6a53f67cfc6bd94eb3b7327b5da3a8d49d66e529757a29e52f4a53eaea322617925dff22b5e91eeb289e5d350f4332c5b335eaf5125bad51555aa719937ddda0b7ae4cc97e77b2df2f243b639243f16c13b58eecf78adac1e02545fd58911382102227a959a713ae43d11f4787d2a174286bed49c7c1d93a543ecebe2351e8c2d9d7b39aaf6b240a61149465df7603e5571767d7effa709ec4bf1d0907df47d2a174a88c536595d24a2badac52ca4ab2524aad43e15821498942a2798f44faa57decbc29fb3de9de93fda6fcb3840bcb7094524a9961fa9a06bcb2af8601b96c5d69e3d8a4500bcb0b172fd75d697faedd6ef7de8a23b023123de2d1d401fbc33ae4d7c4a7fd3e6ff452d2452f2fa11696172e20b02372f11726fa9116458e12e517d945a8858534da6048a11696162faf912edb8bee601e4fda4a5b6bb1753020982da754daa1db1729cb4935577738f6bdadd72bb5b7316a3a06bb85d484fff9607f3853177e0f2ac328be7477396d83f1790ff930aa2351a17fb69cc851369eba16cb72fdb717656acb59b08ff05d7477d27b22011d4cf4a4434c83ea1b6ea7cb5f6eba685ca7dab5add4dd5dbb92eeeeb62df62ca35f9bd51d8e5dffd96822479db4e51039aaa69efa6ba967a91fe92730225773462bd6dd77ade7762d6dd163f5d096530259cec9999ce274d00827e55148504a1fae0047e4ecc2b486afd36bd75e560301af504ae55680fc5e7172159295219c94479131c618638c912bc01119d39abde8a5bb9cd2550308788546f7a6bc021c919f16b72bdc227a0c19e2812b36a137e38413f6efcdbc9937f366aa4affdeccf5f766de8c942480aecece6e65843e3a0f79eb231d7add3a9d5d6f1ee94ee7da32cbd2d9f221ad3bebd825bd39775b16b5ac9873374d42eeac26b9833cf5319ae44b776f4a12723ca53b46931ca349969a4ada24cb5b8fd1c4baa573ee075250d40aff6217a64d58dfcad2d8bd986ed5caa71a63dd6574db4d4766af2c656d1ddd56112fae7c2e9d4de3965477f2e11dae4f90cfb35647563caa225045a828eb4aaad2bfbb4530157563fd421689444f9ed86b0cf6d16c7b7a434a29e5c39466e36bb6e56fdbd8584a29a5942d2c34bb566c2db6185b6cb1c5b665cba1d92d67d958fede7baf546a61d140c02b77d34c2cbfd76ab0e812bd0b776aa12f65e85df4a5cc151229d3eb02a685cbcda1c15b6763d390066d1dcd063d6f9d8d9d6fa99c01f396172d2d2f4519a3b7fc862843f496966739e36fb967d93a1b9be576eb68b68ddd5283493b4ce095172ffee218cbbb7cfe700d4b69ce24d27f3b1bf2a0db2d7fb49544db0ddb8b7bf1cb5dbc88f616872e7e7ab90b7dd2dea2c55dfcd4e22e5a681745ae75ecfb17d7c5615adcc5858679911636f6bdcb77f60c18fde4d55787421fdd499a9dddaba9eaf85a2b8746fe34c6184ba5183bc8f4f23176d0d16c4b47ba238a20242e12894422514e8e2887e68844393bd39123cac9118944228cb1bc94226ee72012719193cf61731807b345221177afc8b5d61efb8a3b486fa197a45b3a7a62b92ed663e35fa7a34ae995bd6ef822205b86eef36b64ce3b34312bee2b0841a0b2e3ec8925a395651b690d6bd77e7449774829e57549ad5ddab583e5a3bfdb7a62d14fca1c2d12181bdf3ed2c71befbdf7e6e3b159611ad58e97b7fced9336fff6a93bedfb7befbd539f5ede726c596e1f7790ee7218957da95ef027bef8e28b8fe5ddba84422e2191e8736aebeef6896f4c4daf5a1fa871a8844d76b4490c952201000000000315002028140e0bc522c1704092233d7b0714000d918a467a521a89b3208b510e21630c21040000000008c0cc88a441008e9525572725f286b3d00e1a03c4e9fde5def582a96d276cbe8230f602fa8a5aa2b60d7de6e1eaebe047b443be240a82d69ee299a46864f1275e157721217b005887b7fba66aaed6f724eacb7e8e868a2ec62e962f979adc1aa932c56f8bbdb7d47a7b5c9e9252c0cb796a2a44ed37c6d98cfc37015d206dd0dffa98ab9f9c593d715d169dc232eb024547678fc7dbc4c14cc2a61d8fc743d82429aefc5a2b32149f7d59cff5fc255b5f745411f7929bdbc62327e3e8cda4948debcee051f8d3a8a5fe2b0f575ae1434a6686ba549448b84ff2b2287c9d6c91375226f335d9c8981b1063cfa3bda17b0b6858f4b6b8359824c257c181900c89fa1f91583ba46cf086ab7ba477674bd4803f53179ed182a1815ace73d2b1d0e6f58f0e1dba9cd90a3b17e3eaaae7420209bb68df2af91ec60a1f99bd09752caea584451ff9fa47cbbef5979039d19ca6d9d4158f75c9a5e4505d3eaeff7067a8ff02def874ab654234fc3ed151e42da2cc5eaf4211182eb3a0e235b869ed951207056c7d1a364af6085d1bba4e320dfa5b2f3808aef8e92631292c5b57ca66e6f2585de56cf267c2c178ac64e2e60306ce0c164f2274f35acc3a1b9a0e2adca1ea4e25ac620b4c620a425852d621ad057c61cdd704df46553c04593454f9d43b5d59a3f9a70b6569f5a8de7721aaed81327f5438d17f50e6ddf2a2ff3e088bc65e1ce4f6b01db4b34feacf4bfacdfa00dcec427bbaa282d7070811c731c124b3f60584c095486c9346a042aacc212c76d0be08f51062c2d007237558ad8da2b3abab722a21aa594896623470fa2528bf3040851466d2bdcb024eba9664fc8f76823cb04af88309329fa794dc05bd5ad6e38bce4aa5cfce040718983cf0a9469b4c280e74aee784593dc84e421e0ff7ccae90dc60e4e10282d3aeafb25e56830068a41b5da14ffe0bde14fd7d74d1abb9552191bda2525bdd66b5d8d759d58fc5de3f789dfdde7ef5ffbac7e96e36f06a196140d16f4dd06fda05bd833e310602fbb0de6f5fd94c067cf8bcf26d8520e8144d0e7472e34ac850be77e7ddc9561fd87ed19b0df8d8f38143e80d44ef82211660355fce27c465247777862c94d37566b75b4d2815ceb3a31e241d7613aecc99d96e0dc83050a2276087fa58833374cb4d40a0f065fc00d246ee00281d03e4fff653c9ee2f45bb826844f5a592a1fc7c86d7c8d6cbe4a485bef36c3ec526eb2809014d98c70de475e0a6899e77c2c536a3de6172ae48d5191b4b0e46e9908d1a9b6680b883de8799b9fb659bd6f1269a62d3f0e70c3ceb586f2952b984a2875a0091eec7da679dcf9617086850d05d5aa59f2d925db9d9fcfc0e16a4ea4b00a2bcdca059a9b0d8c768f2f752681ec9f1e3d389f3bba6ca7cbce399b08960cce69f2192c2ad411e9225f0f0ac7bbe75bb7b0749dc26986a6c82554ffc7d9711901940513ef58e8a14212ef1b58fedc5a23a5f88106715da0383aabe67e1e1206df1f6426c6039ed2d30106970e82319f5891d951e10d84515ea69b1e84e8a4acf0b325174bf8c5fd77c7b81e0a03405b09676a5ce1220f586f6c68356d7b934a6e23deb20d387bddb0d3b7a63a7a04af382c747609fa80be9f5f720240cbfeeb2dbdef3651dfad17fdc3ed3991fb8896caaaae11f1b6adc5e3e620232cc723d016019a95bc58e6cec5aa749becdb57e87ec1c408d95d94e1e8b79420fbac1dddc78ffaba1c8e0b0dde083cb4ae37129ca74903f5b0ee0cb062f249c7113baa4b9c792fbbf47f310481b9b1fc0ded1da76eeb937e0d90307a87ec74d8aca868cf86719484ddf3ffa68a4a0909f42e0d66f2f50ae2624873133ef8ce5275bca435d5ea773ec7aebdd1d1cd9e7db75d233a90ffca408136c972023cc8c25c041e5b5198015ce785ac6cf5130891602f7139f6299b0661a580a9ac5b14ddf9f58e7de11e9262e30b52f4e6f14819aec667fce66649e14ebfb3dcce137e2ec043c5bee2488df98effe235b511b2069f598dd8dc927c8d5cc2ee1cc94e1ffc767471d079e6fa9e4448869ecb156dcb7399f7925a31126f1f29b597f5e6bedcf82cf1b3368e9d6a617b72e7c5e9649f06a3eb070c5ff52b9b553f39462b20d0e867283b3a0b5b906069b0e6ea46db0700d846d93c9f7cf10c8baa5e3efb2fd26e51de319cc8fa67b4dc67ad85847099e7af5eed0bcec76e34379ce65db75324d09b6c27303182002f6276deb89531f7b314dac17f711ac1789ce934fe474263051c5ef5cdd87ef7bce66435d33f23982b0d61d1b478e38bdf1d23257e0057c2248f0f9da3bd13675732bdf467933ce5b0e3ce2ba58d09d510c46377e1f5094f5d31f14d1256c664f47d62ed8199b06a086a3efdb6f07c7791a1dbaa07dd7b557e67c3f60c007d5a396ee535c1ecfc6f4ec973de41d19b90e8650bd4970a43b9a3842de5704a24a36197298589ded75cc9c9734053226f7d3f28bc071d97f452094f3926c6c27d7136f0b0e44ea334816909d4f42eb04acb939065a10b37563972d892f1e6b2523e00bfe504421fcac6e5644352b661967ec7eb44a2b52ad80529e9a9c58c72d27d943d07f1040521f34e2c4d8449da3300d8aca484ee52b45744b0292c52061f17cd69020bd09a4c6866643c9d655164b976fecf1e174fd5e85a24022b5bc69e67c3f9433045f0a5b9c88c58df9766d4bedd94be15e6e049e60ce6d85be13d8d1c1450440c9d04cb55bdf24ab112b85c3520c41f961c8c2784570d3871a8016a75fc34836119459d929032aead6c74ffb01b597b084753ddcf4a9047d7ca6c391e0edb0d2a0a9d24cc6208425e7237c441497703b88cda3d7306ce4be413b69bd2ddae7f53e2dce26be475969f57946799f757017136e4831929178934d42628c13e24985eed135da8952f2e866fb7df522dbbf7e70694595d8fdc1d14849afaf8d96b12202ac3aa8937f448148cae9425f612ab8d46d9ddf96cb3ac1f5fe5c92aed36234214c22882116078432d3d11c561016251a158e1a949fe04c20071212a319b79e3ec135c418885b1868439a3945d4460168658c9ab0dd31bfba8dab10cbe0a31400ab090ea01a1f0535293a5eef98093e31b8ad89b417a272b34d97fccd53b4596bb126383979b29245111bb30418421538714e70222f6853e72f675a0246aa514814baf2951141e14645e225b8d0b93aee2c79e831ca85e446fba5d8370d4a70a164388f5d56a2add7e269a61dfd632e252eaac58f2a9f6a9bfa5843e5b9a2b75b96a66578a7060ee554d9b3fee007b2b474f3359fac3acafb29365cf6617ffa1ec0ebd139436fcdcae21ed3bd43ce2ca19cfcb407b883eb26bc6d87c24ddebc494d06df01e9c33316f663f909c8d35dd90d8573471fd6af14edb8688e848b33f4d14e2efcf1fe335f6fbf76d4035a537bae19422594981c4b241e861459c6da99715a3b6f4b185511fc4fa90ac317b6397aa596e80188cf46e1420f90e75cc708e1a4ba86b833a7f3602451ec29f4a4a13dc41e903685c2a531aba83cc03e12b9a226d73ee06285f1961c0ad7c17d404a2697a5eb007c4b723a56723a5276172fb832bcc435ae226b74fc61a0ac2c27d174802b7145832c8c176a0e573bf55b7a0cbb3569e10fb0d64c12784d64f9010bba19d61f90fde6f10f7083c2ddac66a597adef5616ffb69ee51929b0e10406785eaa258d2f35d5eb548ba4e1c29427c7a20d5886fb71400985f83f5049e909926f3d595d1004a0977fd80c1bb60e55be5bf356ffaf201ef6bf33bf0ab32fe43e3f6befc3bc5bff08b4f0dff8b2e600c063d16f75fcd8012101f9783c20be1edb09a0a56d82ab2b0b1b8a044486d3fb97a4d0a5a72277c0720c70064388184fd3644420533eb93d4babf00a23585a8dbbf70c24fbdc8f3fd8cc0f9888da4ad2cbff998d582f19705eecb5db842bc17fcac8fb5f66f6328911efddd197befd6cfdda0cf35ab09081a08d5bd2f86f9a3a27093dc4d547de01d55b5b4f40c98435a75b21132a07371379c2b8effbd2e460d290b90f0fabd18240fcccaf282222a75793f8e5070bef3c151088daed74fcf660d71537ed4a7550d7757a6380615492c6afd20a37257b528d5fa7a7c72a672b50baa111f40c379b702ed75402b885d15c322087b0e92d00b5d5bb66d077e6920d4ab80c0071cabe4eac26f855d19782470053d615f4278d7ac0640fcd270d6cc5c9cd362f2840f08cc90ef52081951e23ab47e664b05af735b31f8655e41a8956e0e832665a55b46ce218c05ceb538b79ffc03a7c30be7f907b32eb26ef433683068fa251d516f51e05d7371c762b54075249542da9d6a8d10b3a4368c275f777942567de009028ed9acf89c6fc5f28b3c6ba6ea16e9eb14da50a821c724ee3a85b075438845bddf19ed2c8a4c86660b88383e381b021060e81ff2f4316ad0dacd307a1d3c04a8b7c4aa3d6495fcc1f83df2769841ed120bb4438484e09475ccb65478f1574436c26ded78327668fbaad93b221b217f4d3276281a7987c65bd8b7f81a11c27ff04d6a42f28c8510d4b2b576eaf84757d1925cd747e8a154ef58618d31ab9385018bb6cc4645e4ef10480e4642f3d702312afa109468c13e915123facd8521e733280905148d192dc8a35aeec5ee4a754017856eac46c2ad9447528c3e1b6de197af626464504f0094bee1fb756a64aa0c16b3ca8c8ff8a12af3acbe73efa06781000fb26748c055f760d2c6de773c7869727802b39677d644b251f9824d126f67867858ca894c266c9a7a2d82241a4171b97efd5fcc7ac3baf23b721abedf15c90100747d57bb6a6b3b8e52dd1cea9da6ae27180f92a2db440831a9bc9219c79285130cb6a77de6415068f48bb13203cd37410c9e02192864a3454b6b62c88d749701428103883f543757026e32cbb401f0da0c457cf120339ec3a651996c5adb7216b34ceec2a72ad748855879743ac59be6fae2c2474cc4cd12c6d7466cd9a4238819512c654a77a0accf591fcc80994e8c70a92a4ed2f4ca24a3c2c94a31736442203541251ce761bf1944cbf44edb34ec24d2dc9d4074a3ad79e405a210908d55f9378797077eec1eae45ba60ec36da78c648ff35801543e0aa69f5ca9c1a05ad5f88eb93b073ecc483c2c7886fcb19b9f2dda2307a2c7cecbe61aaec19084bb2ccd937649c7e3c6091e71c9d05011c16226432b3c8f9553f44ace0867c9631586e5df789c06641002daebe6b1cd1534f151f9c3b19e8ba6042f778e414ac6f6d55d72e22d054993088ce1676c47a72d2a009f60a82a63a1075bb5946bb50c607838f0ea50570a7256b3fca783c3e5d6a4937fcf7d706804c71df5e36b35ae495f30c9ca598c7aa7ed7a6389b3429f63612bf08740fde134c29f5de8951a20db56199bf0fd699d851adab0d1d1a220878163fa2528eb0f71154857d6fa6795d17bd2d910d0e31e9c4e910880f066defd978c6704f992415af24de81ee7b6740f794119cfd461522fa50527beece874efb7b580b227648f466ce98e0402b1456e094b29905b0fb0a12bc4fba3285246c0aff7ec9195c77845005d726fd1fd380b31e4712ff13c7773924eefc3cdcf6276c6d46ced2d5ae5a47fe44ed51d8f9c6325dd0aec596fc10d0b5056173c73a662737967833ade4abe2f695ee2afd2911db9e5e1eee7cdc88c839376d877494be42466d060c79a35900f70f3d788aaca9c37be703ace4cad37dccf8ac7cc2976e207bc22248324e1fc794bcb85f41e3e7204c63af7e880373ee8e904a35eaa7d4ad955d0de4424b9097b41aabce4096799ef260f5a7c96b9a159027aceb2da73c0795ca676d0272500b1d59d1573bd43b3f77caa6b65301a99e430ca735a81c3fa8a8c4a57a642491811a88e9dbf88c0b1f3666b5356200401ba5d277d5f1538601dc53f9dd4ade61f96ac30f0beb0059c4438ac1751a608706330b73718d22ed6924ce660ee8787b074648dd76597fe8548e6971e36e9696c9377f272be6338fb67514ff9688ee7800c22cd49bbdd31a66979f1efc9bff8ec2c09bdb1cff3e0a62243b27bd0565bf4ecc29d954034510003ebc919d3999931076249d74864aa531f10ed5e8215a202a51dbd4c1660e9a6e91693849a9339bb37319362bfba8a2b9ea4034edfb88c2594ea548e619f833aa53d00f7926729b103cabcedf4702ef38072018fa74a666b2424c46012b96b83f83c904e2bfe4e88991356114cbe240e39ea3a77e829e3340cf0c3960751363f0ef5b3e3b362480870e317d160f150ba9f7698634a25fa787101102bd7aa4efcddb1c47c1019262aee49b7d0871f062abcbd84d9d0346f8d86c9583e4c6630e94b9715b4a7f619f5ca85e573fa87dfaacfcc5e05ec31b8283dcc29fa301f06cb705c1875135c016b91f3d381c570119701c56d24cac59e1ea43295b2fa603720a98add28edb8a6e76559a0b2743d9399838cd570fe54dacfb7a2027ccf58e5ae3aaf987264b6cbaf32fe41f58870f397c66e75f375a78c787daf169c8d066f3c36519222333303bf5edc62ca2a0db30679493de9c86cfdd0201355903a53181f2801d77077f476459fdc5af38f65d8bf9c47d311d700b7c321c18f29c188af0adb288567b8ae12e72ca3b599d3db96e65b6d0de49c4430b40c35dc8f9930b17aca18288333a7a7132bdbec72627c5bd3c31bc73f8708213890a73d2003153f57c3a8e173cc7e1a75bb894c2bc3cec2db47b12bfffd251deff7cf3889595271b35cc651a5c6c36db762a4c59ce186b930fe88da95a9fa4e2bbe1ec1e16b8f69dfaf56a5d19a215283a20080838c136712042a3440e5f5d33ca898e32648a521bedc16b3b3caac47fc74a9e212b22deeb398f6a89471ea7f4263c234cf710c6feb41e3d56e763216c40df1db4add99ea5f5dfeea9da2ef74156405f06315689bebd94a8dcad70c94406e1abe36b59a81336288ca43d15dcd6314498b3f8c2727613bf5c68386d7f1e0e16a6e85d267c37d24d0121c16defd407eb0db5720c1bf90ba37cf8ea76b48ad93169a068e5321874669fcc6ecfd93b90bee7435acb1a2d1beb1c42f519ae1641a4fd05c0151d7b7b8362a49a7e86c58fe1cf1cd497fc1c224fbfcf0ec6a42f0481041fa8e6affa926cb08051f10e47a9e7503a9743ff5e73b52969671286f68e425f117591cac7745854d3abedb05ce1861c0d8b88e7f766b4c3f9865942f0bdffeca36f85f272f1994b3204373117284165211e162c4852532444d0ffd7bb246c0d6808f5a029d21abfc627b318fa8c74c52f65ef6276df598af5bd19845a48c3692b642a1d1f4122daa2c91c47c8d0cab5a94d33965b181edb73ba8e23496232521d14870058c446a5e51e331304f14c28ed84a882821c9172876780481c1b60f918bfe38180f514e2d94808cc3b5e691e50ab124aa9b1e202564c85ab525a3c2e60fcbb7ca10a3ab666ea0a2f7210a107dca1426eaa5b18da836454237ef8838f36ced362ad97a280a55ce6644a3a987ff8462fad48b662b3dfa4a1e63478fc7228dd150003f9f3ca6e33c9e5bb21e1caa9e4523d85b1900fb9e5f85812dd48ecb993b36813c1b6109f5345d630f8358a8f1c661932904f55ab24c61cbe6de7e8001d48e5edf7a0f43211a7caa8cf6d0241e97c6bf012af936b12d41c77df381a73f2f8fd0c9f14bfe9ff8d39759068f6e133c0fa8da2240c5574397bc5160412ac4e2d2bc5246e89d1850e0cd4897d85ccd4804388900f57dc7f4e68bb538de1f6795848a15c599124a662974d6cc695482b6e5459f73abc9157b2608b5da3218955458c9351986c2041a61878ac31069cd8b040ea8ea292b6b4a6140833b191762128c10ded3cfdfe71a057381f0c44cf934af8b51202f9555baf40096cc2f8a6d42be744e30d6deb1cd1bc1fec69e5f45fa7d11cce53f0646ecdd18a66f3756b459b7892315234d03f3c6a6ddf489bec9260e753decdea440164bcf1f35ac2014bd29baba34586fc82abbf2e52a0e673c2959d935241ff39b4199409e444826276b5b97828271f2b16bea3cd325036462899ab3516b5897f86aa5154be395c93c2e479a062c088e345972a6d256d2d46477d6fae6b2e4e021304f9e344e5a477714acf6262feaba02a4528633ee1a3fae851f7504db95ed2918915e6ed8ea3ea1200ed8e87b2c05d26bf21ab9b1b56494e091ae3d4c093e6f540a40d650c70dad45a81e47085cac95c0147f067f33b85abffbb5ff71d40505ab46abae0e832d54bb6f69951b3ac5c56a3cad765e2fb587292b83d0e8cc307f56edcfcdfe703ce042c5474a27f9ac179f256dc632eb79338b27f6ff300e503f6965158e433c062a1e7ae540ddfbd0d4a0973d0506cb965974e5e8b2b7dc520ed14244352315ad3fd8ab4cc03bb11a5d78a293ea8ca735d9cad44fb0641c4a33f31e60bea449947cde9630e1de9119aea554853dbf9d6042d6649664b5c0f721e08924c6c766ad9f2aec9df2a444b3eee8b6161873b5142e47a1db48624ae1c7d5ef518acdcd339b2d67c921924d29320663d86662e6b5d6fdd7d256639c8f763e30fa3f92dd2e76b1e58e85930a54fa1de45e1683b1256419a1c47f463161ae345d44680548cd5d3027e807a97c1b1584967c31646d6af50099738d5898c183832aae5029bd1f1d5d039d9d8340564b942e8548f9d72897281266518df7029d044ecb6e4455029439f734e4a6523cdb13ded52d41a3887390773e671f2214297c3c3f769285bb2f46016f499073d1bc1552f564df04b7eb76e000f7432fdbe200fe5b4e7611d98df7c0ed4cd720c43556fbe8db46c3b4993cf2b8e32ee189d7723879e30cb04b2bf67f5bbe09e0fda713c4ebcd9c0b95d24842ed19c4dd7c7a1888a5965df83b2c3ee0197110e152fd249b8e0a35cd2534957b4660ad1f9c0e7a8ad0c346034c766af155c56d93eefc0dfbb5e2dc785ec3a72a129abe55f7c665faa1e2d1a161527097cb40562db2f0cfd19b46b91f5414dd3de829b994b2f7d0b81e5680ab9d866e7c592be19230a8eb2cb2a3c0dce6a1d7c5e26050c516f45e5bca06b6dbc373066baa410d564ef0bdf219ce525144c91f7448fbbc0eff13371be23565a90ab0bf0ddfe5f5e80c471ff39598387bf28f2d5ef27ba1e7d11762d3a9a9a1fdabe118d1526a41a6ef1744588cd299cc900040e5762a1a9b3da268f720daa1b9133ced7d5b0b4d50f74a935250d87a8b45e239a8853e7de8ebec792cfa6985bb072113d0d8e5b9825334668cd9eb39c728ea44849af8caf520c1584055362385347140a87810bfd0b4034dc948c4b1a48078f765381e951cef786efda00cfae940085936da09804d636af5cb109a2e5297f86d2b550f31735382237f0831818de14645831926284f370d925bcb22e404de1867ef8d9999aab29046db16c408f5da44c41ed53460b02c52d3903b924c8e53d591906352a7a8765a29c7de664f5750aa0c5019273a959906c1bf042511c19f9e5af4106a880375ee4073e9adbed9050fdab3689105d0f6b2fcfa677e092a8a89dba3fff6d04826c51a5b9d2aba46c8087551c5806c3b751ef509a8f0dc7da14550ad07bb9a1c0437114d839f521fa12447769fa981c83e071fc68f9fca9834b72f9cafbd61506b1883184a208a8acaf84774375ed4c7f34458e121d283ab1dcf5b093c47c49f859d039f7095667e2396f164181eaa1c7443bee778d74aad80cb5546a53e694e4350f8c1e60ae6ac6a703c576a8e0ddf19338d61d6a472a18bc670a5c65c584e4febd5810082bb3f9000f4bdcd1353d631eabdf731b3ca14a2853b7eb35d671a5d252ea4a1ee7d698a0b1569fc9932d4869d8ed45ac31abadc91fe89d1e1ff2b2f19ee18313e64cbfdf301b5876e83d114126358ad0014aac403a00be943f6d09c7087faefb08862560518cdec74fa81de6948c37a70d5d0e430c22382deef6055796a06a8afb80da5811abada8e56f8128064dec3db4e3f3333e5965109b76a91b5af38496c44b60f2159bb415c5200380c33adb963dbb7b538e1988f5520f1b210ae61466900f7d42e852d756f645193796a55385d906037aaaceb2836bb505851dc251fa6841ea5085bc288fe9ab42b7e38cff1a78358017d3306533d1e4db9808b966e45abcd8d0415955feaa5f3ca136cb3bc7024e4bc3a035efc6fd6adf3a429703a54898862067e36eeef1ce78dcac27586c947a8a2155a70323c54fd6dd187b47689ae93b11567dad2b9292501f87fa4d996eb35faa34f7911f2ad744b7548fe50755e8555087c98cda62a36cdeb02b7175fe2ef5da73430120d493d8e00b44465f3e180295b58e9178d2f243f29cc30bd87d4006424d5de04b5ba2f24bf3ec430cbe05f07d98b2851870bce2b4c24212fdb47cb7340f81d814eca55c5d77c6dbc9b871f297462e762a46532dea3568faf106dac5e04925682a58fbe32a4500fda4417e48c585aa171a36a6cb53aa6aad4d667775e45bd44fb8129ec9324e067fbbebbc72ba2e4b23faa71a4abfb6edac0f7b77f1194f4eba8bc2e315ab78fc72deb5de9b06c6d069daa6abe6f3c5ee3dad469dc31a1895f555ad11c3efd2c53cfec19878a7ea75e337096859c7cd85da60e79fca173cf2ae950637951512759b594c5382594c5bc6805ee2c3ed6150cabf9bb742a91302252587a88bfcc451bd22c5337b92ce939e6debc9afa39ab1154f06664a8ff5049c2900a9cd65522609603f5d6815833f4dc7e53acb68472dae16b3c4adbe1685d4c4737f96617ddaf40930035fe1c65df86d27447c387e3e0153fb681b0113071e6aee5324d08709a466751218697b1b5e55d6c85c68a206fe2ef6befa2a291335d033b70833d724bdb36e96426438ce0db9f0dff860660ae9d9ab50978cb548ada19f53575221557afa0e0c425f889bb8005c0374ed5b25b333d63b3ab69d24b1de9ded16a0cb0d212d51c816535d38c4a44e4dc36f7096fd7f7b46e4d81f15a13bfd0caa1eba1822f68591ed834037fcfa5b835f813b8d5f20cb37ee5ff2a02a4fceddbd99d0d175efad4a846160551511dcd740168e66ecc04ca73c4aa3729885351cee2c5b80a198293010fe318f1af82038bc71237a60c64442c51147bf6a79db7710ed8ee4d18904e4bf89e8035140931190773f2c1ab033b7e37312f02ec397ad0adf01ac2a775828a135029f48b0fe2e91ca6387aa153025be9c8c8f207b7ceaba7697131d096eefe09f99cc738d59cbc8f24bb47a4adb56bd5a02fecc7447c891da8b7bf69dc84414b2426f6f7270fd4b5eac4205fc306f0adb83f93b2e643f5c612ad258cc673da668317422d9fb0c234def37bf35b12e9149ffa233f5c6798057041715b9d00c30acac01dfa799f4843d1b542cafd4a81b22927a8cae722d64b026b89c0730d613fd30f76b9ebc142b720181a0813ee763fec9442cc598f3b4da4866ebc73868b424289a8669a5fe94d8379e5e7515476b084902f06e0e1bc1298bc2b9476bc99067e401a675f2f47ad429616e9fe6ea64732b8df7ed5eda6f08bfeddcf79ca3c95f26eb60b27e67b3ca38bbabfae4db63eb55843372f51f234f8dfefa07096753c9a0117c794047a333dc58ed7da091d0337e670c1d960386228098f7c57ae2cd56ad21a5bae42b970c4803b60890484884dcde3b1f020d73ce81e19993b86451092a70014ec4d9ad1d1a0782427cdcb6833b26bc17443e0987822dcfd35911e44f2209717699ac66bbae541164a86b1e09adfab51d820a0f1bf3a98833b64df036e238cad3cdb202f6af1bf5a5d5ab8e280da081cbaf48fc1f20e512d87d4208e32ef903088ccf34e87ed6235ae7ed19d6570f1ccd8a37a4670192e56c4c6b33da0601bf30f866f5a95cd7b80d346afb70dd5b21adfb668ba7aaeab3bf7313fc0ae19adf8c8ce9d49a45008f4e85480d6b27e1d6e5ff586dd3a9eefb98d561eb074a2ad6230142cb7af37c96522fdffec6459358e01f66c8e0210d9b90324d117e65969e003bcfa65fddc20cccec349d2bf4297f3b253bd6288ad9dc19823959ca5a40d0024c4bc30c8960697f4014453407f4fc6f043bbbd983ca622beb654b608fdd52ce40a31309f2fd7b86712b2292fc4fc780483517e270b39c94f273b1744aaeeb747a68f452032b7bc5824837d4fcbe2e77bf2e27f6dcfc27b9fb050d9948c1f658fbe6ebe2476720b6e76f69b6e43856689129fc331fe6923a946c9769ac8200d3733a3b06b48a6cee4c905eeb1d01d32ba92d30e6af8a083cf0d0b504eb90b62452047bafd8d9bb21b7038ad96c30469565fedbe52fdd6b8c8504a6a3dc32a7271cc2cbd67e127a5aa221b3a7685c09b443302561315cf348aa155edb553b9bf1a123a9ee205cfbf1952666b3d4fab568ecb29af9ff7b3a7c8a519641856bfaa13798e9c9d7b75006df507d3ff6e1bf5507b20210577161b6f828eb2ad7393c94741d97b658e514f051bc63fbd4e678aff5c5c76e17749fd637b30c45dd7238e4b3fe651cd6ddee13fb08a424b2cd34886b6f64fe8a1ab080a0ec1b9a3a0a3dd7a9f5b11ca39f6e88c0c35e926a90d484e49f3471565b12fc13c0ae2b02cbbfb0011c2815216dbb70aa94a6d24f0efedf5a132508f1ceef6a1fd4a84b03f35a59f0094f7d2190251bbcee8ced1eca0da7e9e47f46b4f15db57d38d3e1f681037ee812df72147dd751dbd7947c139c9ee713d50fd7dc91dd5ab00599dcf9641cc4d51c38b0c8037a7adb001daada859f76290f15d91c1bb114af14bc0e4850ca94c5b978c0bf3a0ba611c1a84e5fca1d75b95eb6943e5caf520ee58b9c73c3fd28c4b2e65aec1c6a457c64a0df52ad03b0493dcc93d0003f6f3f1f94bbb8988caf5f9e2995129896461dad1dc9c4a4a4260a5b9412c8413ac1e4f630f4c56a58a7876657c7612c0375661d4f0a8433e2be5ecf1add51ae164c90bf046e2ac5eca83068f62e27cd622f31d16f786f60675f08324430d023bf2932bac5f9d9451d4b20541bf09767fbf10151e799eb5e8082cb54cd41656743deab8e0cad86113902cb82886a82b61cfe9228a869ea59623ee8f4bede99a70a43b4f76c7576299ac7622dc5afc1eada16cb71e4b47210e218ff5062b4fa6bef9683f2c51bd470061d9a25f2d6d5818f981a7824e5d5c756dd7893e243cce3009658373f9c3126d8a0616416de21c24320d6c654ed17aa626c8dc5fee62514f79cc120cf192b0fba530be07b7acac1fe8b0bdffbe2f617299677e1a5d4d57006b577e23575c485dc66c3e8a6c9da380eed24cac7aeded41ce09c0827945c32db9357c7938a682b38b22772983fd6d7aca984f6a6537d2a328b9beb394e9b23113ba0e50cb3c70844b0cabc282373d3c81aff5427bbaf3faff60f3cd6228dfbba1e35aee483f9b4a5c8c0efa32ab879f4138e6bdb6f29b1bcd554cae68b97ff4b745fc10cc182067ef94f27740b5ae9ef8f12392d67045ea70744c4403727f2678311c9ebea03670ace68ab2b8e4b22a2c452eb97496002dc9537469aa129e8ee03b50a6ab4e43580dabe719a8a4c71b1d5626c1abe510eb5a3245fcbdcb44b9d8ba4bf2a54e211858d2e2d31b4caf543c160b636230432aac0cc9255549028daf3a4edfe20b0871d6a2a1cc3bd393bc749807b4a005ac37b299477a68812292d4af040af6ef4a41c737ba39034fd1946fcfe8e21a03045461fa4ea830fc2ec74b5b71bbd56e181de6c0fb51d4bd0415d1298cea89862860120feb623d362595ab0411da9ab5273cb0afd0f8b6319d4a261133c27bcfc11e9be82e4aed184fe10a046c76aa5528f0557b1ca61abfe26ef22404430cfb59554bca75473f46d14871a71aa22976281b51f83cd30c21ca8d80ff0554332c8f1708e8251b97060fafdf358354b997cb2467e2647f443d25d2b575252a050004a2a3af942e550931df372a72311f852915c9598ffd7c32a34607f66dce996bcd4e6b6ced3e1796050531afdfa0443d370b295981bed46457832e260af96d07772c97d1524349f67b26e73c068947a125d3a5d968a5521edbfa555ab8ff1da1a9814bcf6e6d9468560182d611099f06f8578ad095b4109640927b7e3672e8f057417a751c9d460989ca087774f31a6e8a165a572f4ab441b563ba832950f5199303618e9863ba705053459697ec669346b6286fd25b351746811b06e6cd1d7f5f122b326ed87204600223f291b9d0b0727d961fe0a806f36335d6366e39c51d38d3ada22b4d9f919cbad77ebfe61d80d3fff9276715a6fa35895f4fb7683a5ad7e59e879656c1d8ab209fc0958c82f1a46f987af05cc371374feac527464b5269c9752d1769d788be8084bc93915b0dbe51e243126bc36791d5992a7d8aceffdaafb30f4b8cc2fd7a9e41767568b4694f157cd43d0654a5fe9c8e2f9cfb2b782ff038728e2e545d5821b9aab9ae3ff1ca14a2fb47f28c202339b00c9638ec70550686b24a0fbdf31ad30f25580588da1c229e43a40d56c2d5edc692bbe7d4b599149d2b05b3d9c84a8f0589d9e71c990d86515679bf93655f3507832c54575b31ae6525321f03c2bdab212093849e41ba92e1e3011542bc0032b1989960ebf083cd874ced01e659c1c9f413e3c2580a2a30dda58615b0ca7abf1fa84e7bb6859a081dba8d6170717d1f76fd862214a3b598cc3a615ad09d16a911e9933c010878a987e6916daade8731c517d2216aac5a79188b119417d2630686eb76967ad730f0c69c809ed1e57e9b5925b81a49d79edc46066078450501a55e9c581e38200bf6c6061a36dafda7454c12a9138698ef5e235e632b301b4586bf1a15e5dab633576b08bbe6eaccd68976c6838aa468b98b972ae65515a5905b01f48b92c093527e45f47044f3081cc796eabf26150fad7a122a3a317ab63e0c18a31e94a28b6808feebdc531b14fce861edce49d152a63490a9673a0f50c7b0084568c2738fe93bec9f4f7436d1d48e8baf3a90f8a668a5344a046bd3f22c5174a91781f888061619484d16f038b3baebe3699ad4a7467b0240aa0d8cbd826c1b8a641775a1c9a756d7d613c1e2588fdc38796b49ac62886db5c4129f12cbb9c9afc850c5173c0a223ab6297fb78b13b0c8cdacd1dec4a2dbf78b2bc87993e16e5d8ca1aa23f2677556b74ca4260f465c042896e7c344ea9ca2c3136ae766fb1f49af3c95c7ede5b04413a60a9d738f8addccf92ee4dc4cad504b6ce4c8484fbca8253a264c5d726c6c10d32dcaa822f74facfcf5f671ac588781066d839b95e0e610ebe745c0a1989ecf156e8eeef826020a505d6c1e8912d045d8b3901f0055e3e9195c97cf5a1ccd1d14c53c59c1362c1af9278d0eab66d3d675cb88cadb7872a69238546eef605ed1f0f99fa7c946d4769e7102953dc4d059dc0352cb12d4eac7971b3a993db80a7ae092224d1c09212503c5031d9d1b8b232e8bab2db7f5403d4a424124f4bd523ce9bfd0a5b0cb44095df567a914151325eef1f55522ede083816bf62e42fa829f10f00161690517b671468f3d86b021356112c423e4c39df1990ebfc4d6399e36134ae54b344fdcf3bc5513c184f6373eb76b66fda814cdd327b3d4c402e6d6c4d813266a17d6181033039297b73a8490ceb52569c410c564b819c187f85e5b359d28b4d9984cd7fc7df6a2cf656eeace2b7096103fec3a464646744f972e5d2ad0a9945c81f81e9c958d9bcfa1b916c0bf6a2d4d9cc5f922770e77b869b98ded28146f2e0f3244c0c358b543105e091219d59890d10f914d1032af1b7e47189511c2955ce5f6041a175b9fe34e0521444e8a4697950804b68e5f3a52d9b5df37a2837ce9ccc173bd5237d27409498fc6d37846211992e54b8d3643258988483973fc8c60c9a004f792bb0fb0aac69f069fe43fdc67964a86132ecc30190c63996350dd07d2d731fa518b991414ff3f47dbc410059918d3c9366e288e0960ee6370773ea5b605dda114adc45e003032124bafca6024e70753e3390c70f3ad34763bd4d742d48ea5cd360dd3c0e42b0a9d7b807b5daf9ff1bad5fcc0321cb1e98be0170b0d41d2a22e15f453550579437578062b42e7f1e1b0c13572e560941396a659b00729494d380695aed4fbf72bdd44be4c56e94bb81407a1814243147ba4346aac8681f4cacac1e9ca5eaa4c607fc1c94bd90bcab93c45f267ae521c175a08ec6939bfe94204898e3e178ee632daf8ecd2880c168ece5b795756fd0e35906e36a02796841a59d0116a232535660f68be7e10e42e11143d6276c38df14ad6e02acef7023d3629ed6532c5367fc99316319508e043e3a090ef395aeac0211f6a78000f70627262cc2e4a78d923fd9c92adc09a6b7924de52f747ae421ebe12561ed3850824eb21849147ef41e9d3705cd3eb097d7ee8a726ae3db93f89b60b3380682002bebd015775020f24788fe310892ecce33f1aa1499411330c1e31b9326c697e3513c7961083c2815033da14f5e78aa8c91b4a398bc0e5e54e09842e4240c31091b244a149cc7f5e34e837c47e483cb475f93b5b2cafffa4f50dcffe0b105bc24ce7691afc52bba72342a860bfc1ec6167061b983749c725ae2f343017cdd2c689bcf025be78c645a0da47ed32f969633f8874fac3b2bf117f325aaab1e3601bbfc1bceb21a42c4324dac37e8c179fd5fa5a2a24da7d36b65555e38b837b71aacd893ad8dde68fa88ea343ecca8be43417779a4282dfac8bb9acc2a5238f44b9934c4b4d829d19e4d8126c23f0678ba5b75ef8e2387bfc69d2db71e720d6f720ff4b613b2687e891d10febbbfab9a235604c41977691eed6ef2daad546ecf76036b3e8ca2effa8901949c4d31ea2b7b794649f0106c233cf7eb88a344d3092be8209e3f3782c2f28cc9c9fca76eeef1f052772292b45947d9bc2e796c46246507d351d85144028346fd205a24504e83dd88bbf1aa30e7e2fd2e2b83674bcaebc8bf6000dce11586dc79f476493edad6d3d0423cbf46e8a731c884d05f54f1c104d74f02185ea0b6a24c1680ba88dfe079facd29be578ac3885d2b9e330174c4fe8e8139d1a816b98d4f216ad66514bd4834dcad2d6a2cf3907a3bdb237f9c2f4a1c618658920b5fd0fe878c595628762a796c58834aadc384d46a78501190ee026645ce3ca2166ea6a166827f2b8e31382fbc2c7da5226459c2f96a07b0cf9fce8b8345e526a96f0947601b7edb25eb09796c815af5969ecc6c9706d24ce35e9ec926709a69bdf428c757f1a4f4e2d52292bba811698f8a0f5b95e1002fa55f978a011e17070072c8d32ab282ea67c64089decce0d40d91111e8c549cd33db5c0ba7fe27ba00efdf75011a9229543e123de6546734da801e84eaba5e15e3996e41ba90e6584265468a97e50977d1b859e67ab137cf186e540a0d8cd8c760b69249bb884af900100df641e4b2b8592cca61f10d93736e4c972e303cdde1df38afb5c1fc58b90f5db9967449a008d7bcb121eba8559a059700b24452853d3e387180acfe78827abe4087ad91066b801f13e29a7f2238130491f2a0974f3aeb20bf507044b4fe0f99c2a2bf52405d20aa27b8bab1fe470674c5c465b6ca12c96f6d6afb64f470c72bf581c7bad52db114ce123205004c3247b9a031d1a86c0378bad4cd6884487160c911a77461e48093a03e5e2d461c20f224eea4b1472ca63a3f6459a31bdf70a7f66a84ec8ced786bb31bd71b4ad5ba0c3a08a02eef515d92b3423bc641b436377620726fe07d6a4949fa82debc5245a5c2f5a3219430574f2c64d9d9901ec76dbb2b11fd9604f875b49ecc8b34bb4c0c40e8b28ce1b4832017eb502209257a551f99dbf0c0ec1265778e4e32a51667ef6bd97a6f9610a5e11e78951e670a86399e5e3e57ffbe5d77357651a89787ad138a4e074443fd9897c3e02e8ae5773296f72a9cfb6a36359567be14cdc7c9bd0e12aca73bc5ace67a16a617e6d4a76fa694d4b885b38d6dc85d4c269090d23bf3561d6b1cf6c0f90a96ac9af77faa9fbf9cf58dcf28fe51d19756d7a32aa8ace0029ef0d7f306930f15dd596e43aee2d11d6933c596a2933ac38511bd599e4bfedb2de77aea74dbc1bb6eefad7d07f2dd533835f91f13c1547f034e3ff0fb653e12629cfd1109eb1e22f1b0a23b6be1c467a767deb88e0075e4498f964a50f169f742c9f9b7a6b647a8289f4a467a84b69198da5ce7229a6d085ae1a279a4fd5417e025d985bbf6250550c4a9ae9058862ac23fda6da6f640e681fe2ded7fa675e3449670a761603bc284cb5361a006745bf2642d9fd9eb741f289557150413e7e2a827776d25ee8d3c4ceeef987eb940ffba4870a325d604136171f3d0b57eaeded14673882620908b27eda945049fd6657ce38f095685989c3da0125f653b58b0499903500d4299f32908e60b22658368f9d39159f56b1b8e0b343793912ee2bca2cf672708568d6bac822ee66c981211bb10181a1fef2e9e860e55a1e83eb0eda5922d967c490248e7d1a46398b04a2b81688ec2d85a13336c9a4c4413931c513c81c7bf6c13e3eb0762c511bf04efea4f59f3b84ec6f17ba3a52cf00d20c7051b087159ca409b70a2e68137c16d5b752b3d46210043c9d19caccd776721b1f85fa1780cd75f3433562aea05bd0a96c754a55c7b11ef695291f4eaa7354e15e9e6a17197e1972336aace5b55f3421d4bb9b8e9bfdfb6e7420ecabffed98c405b0dda8ca75cab5331c064e8b265ebe22794df638a8ef610f537159d873e606c58342ad32c2f663f4093e68a0dbca9f23b058588ba428947146a068e9c9223633ea7b8785bdd516f6c3b460d67c363d1615040924135ab06beec5874029490dca0ec6c9f78427a5aa7f88f50cf402fddf63d88fca43066cacaa1d4c2033feb2768db8d82d313c5b5a2cd21ebeabb9d97cde5ed00524115304363240c6187bab1a9ee8a328db3bf5c1ee54f3ceca0bdf0add2600aab854e42c405df8228766bd345219470b402bdc01da941a68c0d7fc0222e587d0f378338503e4eeb2be522aa0fa2d292114752c3922c16da0ee812247d827784b0a16a5d32d5663ff80a1868c54b5d5742a7a6f8189314e26e9ae5a0f25229e27da1c8112ff16df6f9f62b061136ebcb09ad020f092a42dd3e12b3c5b7c05529469b06054c4c599bddc3f188821e28fd9c6ecac8cba350bec175ba4ed2f21f44cf788fb5f8d0cb325081fe146d688873deed8a192c88325d9df4d8e95c5dfd4a213c055e458a5ac43d2c8d9e138208c6cf4a3d8590b8e3a9a860f02005db2da0d6a3601ecc1c488802a60cca9c51931ed80db61200222fda2c4902b291bfc7a6a878bb1efe7d12e384dfa3306b2150c5d08927758a10f39f134677a80714bf798c63c41c9521af28a83552eacf574ccfb59efe8a9031a1e56f3ec4e5a8c35a81a3d536323143cf93dd29fc523621fc20a424872c1c6d882da887f208ab0f5c3a1c936b1380bc8721e57fd98313614938638e1c4d5881cce8b1c8c81d398d2abee73a712b2a5bc252bc4805536723043ced53c702facb511a0484b8b6716dd9677ec48f34258f945046b1756bc422ce5644acfab4f9866d1f19cedd20b19bf4cdf8fc32d86616fe8e4eb9330aef8d5fb7c3dbdf6917162672ce17d2333fee5f138cf441df50cc5565ac1e4eeccfbe4aa0c3a9d5269cf06467320b838f35bcddc2ecb8505479654556975220ba157b432b457ef564f777456f873d2ed54e472f64af5c2af60e42971ba229a070ccd9d0158e2fe00c7b2f74e69fc599a37f6b2ce1dc0f87846f38e225cb8a890f931a1b4abb7fbad768cfd96c8108b6ddb8178346c08f1c2e03bc139c70ed23ebe7b770474092abaf52b15e6e2c9b954b617606c6b9d3a0bedf298ee761d8286662c43ec3b4c39df6b4b52982f60412db1f06c0eefc61a635a527c609bb530f93f3c0a91d0703a8d95f0033811718528020c0626fa039268b7c81b844269d8f8c744883115b4ee16abd0fc6150210f92f6f36be7c2091b9c510da071476a54ff4ba7eddb373731cad54bcf186d0a3fe1e5678b128fac4ab0e4a254bcc4169bfbbe0046ed08f1c9ae22c8f09f92401d7ea7918b134e4e5b84dd4dfe82655ba02af19e713e918f12f35fe159e8fc8948e7522214760bb879edaf018ac6b8642d25fedcf9db091673ffc2fcc237be0b54baabdfedc93d990617d7d5e99082e22ba76336a72e8d526ad319d99216724a64ab6b330dc4553d918a4de9f1900d8333a355cea0015b479c4afdf4edea14895bfa231300662a5ee0f01e69d2559c5f8a22f8b030eb11ab9c882004ae41640c3c2617214286eb73e3204481a5df6bd70bc098d0f870058b484d637bff0f67ddf379c2f3fcb1da3cc71f521537e82e971e6074f84a4a9ac353a0840eb982f333a92d613556f8494df06606045c7d10e0e4c6c0280e3579a8704502b93c22661236b514d2635d4868599660bc651704b46d4c744b9b964b2731a59d99caf7741f5560858ad3269c3f574270ec0f1f0f54ad986eab0e5946f390387a04c476721fa247e7658fbbb775509e05648ed2b0daf686fa5936314bcc3f942bd47939db4d9ad0c51a3ec104c79d71a01906f54fcca818785366857bc1bd6c70734627b21486e6e008113b4e5278b3baa64768dd25099ab509652f7e3de5164d2a152bf5f550d2187e0caad8b566e275b4603bfb48def69c61ed2295c4704334590475493b613150b327c9eac4c2728553968adccfe1e74107d6e51cc2c5732835045d438082907aec1ac6f54822a0dcb120e279392e98af639376d9c1a57bcb6f36c81d707475ded605d73008438ca53585387c6f802837a01235e077f007e8f84db3781072d9c26f7aaaccf98d2ceb492cf71b94dc8f3555ba7993b26a15ad1447b2df000cdc24709ed657fcb50eebf5fe67a0d6bc953456d40cb024bfeb6926397dfc905e7295461355151f171af2b227d7d27270dbc88e6e88243d2e1c71ee3bc557892c424d6b1ab15064d87a18cea750a224c55b491e56386867f777c838947678afa4f4d5cfa2ed7927a9f8a8b11e0e2d581552365354fc8d4a1076ef2a1d5baca2a38c354d7375665fdec291b0c297e0a2e6fd94b9a88f7e31031307cbef3572003277065d79a67b3b223682644ec81410956da4bfb1b7bfa5e1ba7ae8d322cc6af93e6bdc0e9c3143eba8468d9021ad864035d055b4512f00d16e827e1624fc62776909d503fa520771649f53abf597d731c29d51fec2d654b90802030e916834bfeec9875a9c842b1ebbf267ad35544b73859fc347b575580dca1760912e04ee129699e18d1f22d6b0716754b68a4ac20724532333817451c566a7802ee8d780bc20d6923427a084eef809950ab7d387769785a0289362a519b2247891dec3a946751911a8a9e5b3a9e64f4f552bc643da9834118ff5d08aaa50a766df019766da6de4e80f63956fc177d51dfd40d598fe4dd3bf1e11be20c4a095c7855b6d607598a93b78955ebd052c61dbc20db48b34a2aaadf4d65620f3bd6cce77942f626d205ffd5dbc5a5ddc71bdc8b7ae9e0bc21bb06e0fc3373694e33dc38fbe0345d889dab9cce047d2e248a86cc247065f3a057663b0a00a58b2eae1607c73e01b3790c45f86edaa7a3b0f155feb93759aa74e176dee9c629132468cc64994bf50059f09ef73c04c1e4fd95d12b591781a57fb40e5a767bfe5db868ba2a1e886bb3fcf584ca8cb8817cd8f0c2dd081cb1a2010b67b796cbd2ec8f1c8eb9d94b3fd09389989af9e818555c7969586fa6e644d12c8e71f630bc7deca8f9b35eeb022851a520578d45a39f461610b565163205924df98eba2552560234f7cd5d3991a0268bc45bac442a40591e748c86d83136426bd8554939c6c07ab589574ea19a4d7f2421eb74b0474743830c56093331d52fb610b94145103609a0d972aca8a7deb7c468ae6004aab729f5be38d6416cd42ecaa1e884321a96240a5619006afd9d65e5f47bc4e9a4df75ff4b5fa4d8dfd6f38b80c524d68c6b1f2e32371cbd1e503a4ab48ca175a2d318f1d4eed1b4aea4b1d474835270ba6bc1aa1e67a99a14ce6125c583625a46c680e70a5c75bb23b78b206412a3fe58f4efa7fb6f1e7d10e6f1b23fe8c2fa5aadf971ef2a617bf3bdc7c75550eb013afe60a4706b639c7371f4b7acfa4bc9adc97f12ece10b628e05f0b3c0861f71de06a6d9e5d1f3b3490fe95028ceda89dc64c2f5db25fc2d255e510a2d26881b2b5daefa7daff220987cb1b1453d8d5ec9274b38aaa3f24d290ae7a52a2b0a150cf2c76acf645e619c37f5af49881345b0c4d1526e78034deabb6730c6736f120aea01319071f5237248fdeb56e66d2ee9593c9d30697dc7130461320657a97e8426aa9101ac4093d09667eb89d874f6084dde0d33d8c742f7eb46bcc8320a03a5993aef43a39039c171b87061ca7bc55225803e3ab86d38290d32fc0e298989193dfbf49b261d5794629981bbf4e8fe72e00666395134bec70489a0a0eac26430928fc94391f6af0f3ed4de69711b39fcf9aaf405fbed70c5da9e29dc8f494f9a8af1400101e3e85e47f3ef4248a739a89c4a658e96a52e8ba24b67780bacf6c8bac42757626a53433fd41166b40c39bf49a0c8204521276329b6d4354ae6d3f39a1c1c1ac782e0006658e9e531ac313cd4717b516bfaa7318f7dce7b641c89b50602f794c21c4616dc6042acba743217c8dc4f2da20f6f7241c84e2666b9c1b451290f256e3cf377d11a95bbf00803e7895f612339cba971c2a0f298242cf675bab324d5056b08bf82ff892027a05490b962a06d3afccfb88056118778d613e1da33a5eae17fa8cda2a4a031b0d3f769e62444a3b13435138ba045c705f9b3f267af02b224f767690c4e3cb94d689bef0c355df3bf560ec0e34821b05b267b1536302b57639ffa281a33eb53bc3701ebd5e51878a18e18ce775845a46935abd9ca60291240508c115b3785f770e4eb5bc37d0221df3f9e75adcc320a68c998a11e0b24bfb93d3571aed52460ff58a0417a7cb26a52de09b032e24ce2ddf2e950f60301ca830788e9a6208ce6dff968acdea48405a51fbe45f6c732659ac6ba580b42ec609486b986cb9f1eb16b36ccf30c2101d94deaf38701bd097a987b6976491fc8e9926c337fa0f0d0ffc106dec0dcb071d563ab72de9c12d2a55aabb8f1a31df6bca937abecc77491fece6782ed8fa94739b156808f4931e69b69f64f0ffe1a281c2e926a22a6df440041007b58712c78da6e2b4b284155988637fbd98a0cf860a0974197f7edeb8f7706f7c3d5c4b1391124c879a530a57fc7234f50bff8a94ce74bc28e532437a1e03d9f475d760d31eada7c9505c84d8db0e4062004496a58e0dec601837b66ba8a82696d2adb778748a4627f3e8ae608ff8295a379a54ff7ae93fc6d33b40ef9a399db2c8d7a611df2bbda1a07adea72571dc5ab4d55385ba809634c404561ce7b32811e52be66edf179b4b87ad63331346da18d3640712da963af3c60bb667a81740eac333226bd6c192d2af858efa339912202c7ed7b80345bc3c198796539ade7c42389f94b1ff1948c09f81c22ec3718e684024321e507ab93289eed24cf5478be74b8d7cccf7a819602d32b61dc4ce0a7aa99211e20b4b9c99fd21d38a2566e9b41be73a8cf40d021e733572be5fe28041d513e8e261328a455fcb454a13352f4c904296b0c33dce4460c7f16651a496bb80de897b6ac3e8ec6fb5e96bf5ab0530e65b46042caab545c454d7298111f4475120195de22d112279a0d2d6e4c46ccadf881d6037452d69c2fc37323270a6977f15a7b57285013497be3cc30db05f9cf7be62329f5c18e667742e09bd99bdb4c57f5110e605b510643085cac2755ccac9e034f75eaf666d275dad39bf509f01bcfc0d8658bdd1e0f2a6a64e9cb1fcd4d476ff2b11baa58f5df66e241e1142ecb992144d81587b831da27ab9997f71147713eed8f165758bbffc33b8bd1371c6fa949bb2355041d501b41caa69ff15c59cd310191172b8e4e4f9552179ed6159b1e2155709cef7e2a366155f7afc9111423365709f18c068c3d438f0888d8af323337aa102cd12d36bfc8a5c3d1ba3ae243cb17b1c6894d6842267062d3da2a83e34894726c8eed4c69f634d12634f61b707ced85b92178830a4ee919af95447bd9549b351b64cb45a7efa99feedd8a0891eb120633845e013bccdf89319d6ff57c5e4866a8382442fac6538c84c0e216e29a78b9ab85371615b5b9a9eb639ad20e8b7537c23184290f6077ad2f1541d5f3a0a788030864c913b3c03ebca812cbe8999747539b8407fec41e3bac32037f76165e158989d43810adb95ce73ec2d6b5a672a7be57e7223f88118aa84a640a040821e0a7039fa5198802c05385f4fbbc4c12e530999d628200fff034d5f0dd721b281df8b034e9204d081f7644dd2321d6a1eb65825a062a9a87dae1129415871f74c942e9a5d54ded57d4432321ca9d8f27ce80d24f8fbe320954372932775e37682398a3bb9376f2944ae06b44cd19bfaf772068037195beee314c15bdd00f00e674f3b98f3ef99c9a5effd9abaf6519a8b7f0faf0f3fd8a8dabf7290e2e260582305ba01c004c370887ebe87fbd6378765bc20b800ebc88c54c0ef7a5b6ea9e6feb96057627999def40c6bcce4cbeb8baa311ca141e53685db933c1a1c36f5dc814472cf3c60af8a8bd14ef85ea929adee83a567020e535ed66227b11afcf2d265e3a30b4ec47259e2d6f0a2cf566ea9c83df37a1ee3d1966e02032b8380a3036969535e80285325d65754bd44722ae5908314dde31b78aed618ea5d7f5932d470fb8e082ca568c05c97aadd06f06745450e22c3dcdd070630f7c4060bc6a0430c64375d2eb849a1ba8e2bccf7086ea3427f840e6a43edc1967ce51d0f5a456c32a4b4b9d06b0da030025a076f4402cc9c4c61ccebdad07d535c173a7b0e818c6171fd0f9919ae2f4cae42d291a0c9d2c485684db0bfb233bbf62882af95cbe648e95680679cdd4f948aa3096129640ab92f4c50c009da4f4ed46e9f54a655ec0f63bb7286580f2f8ad13ec84ce049415111ce3d85c2b68758826448a82138840deef63c4fdd9322aa06019009eb6cfe23789773363d52b1bcd3ea069cfb07689e019ef463ec4d0b62226239877a89b7a7d4334176dc8d2e1f4c4f6358d67485336635a89e12baf8f0aed21b18a23b7f8f94d6f551a11d536898292318186bc8072807a642915edbc4924a1fd32a0d23b82c75c049a707d958ccdba6dbdb17d1bb16bc230656e07c49f7dc1e18a75161620f557bbd86857ee2fb41c1ae4149a94309c6ffcb85f0df35a5eddb17d8ee3063299d3e2e6a9e0f2c1089fbd1e942c70f9af298b5949a521351b4affa828f7150c5fc1544cef33e0819aa03f1a1756e9a0a59e78981c3e8aad0859c0b85f3ac51e5b8cf54ddf17b0334899562b40cc9cf6918a6216b9c9413eccc7f310747c737951a5b77fbabbbd353d084fa78006ba9311400bb5180564f322eb45f9ab32a5472ee2b1a4ae44649c85895489d3095bfd6141b4405924dd2a001d785d2b04c838f4928936750a65dc833ededaa286d0772cee3760530b5014e4009e5205f6af443f352036e67a2652cd3ab1aca5c609227ded314ec94c01285a6a02ed82629428772bf463fceb47f747e31a71a03c5d3caf19538b450a30309411b6be92b6784e5ccddbdb6223fb3ef63eb7b40656fe38f72be926c575c51e8c3b1286cb98f166a1b17f399eebd2e8b21a17cddb803096c38c36360b453146427b0722d90c134c5c01112bebdc511773463ebb3b47310941d974187a9974a1d030f9ef47c83e99571ff66ddb4a9fec35e70123f10b586c44c5ce7f881a59aff0c5f0b56ba8e2500c74b6a5a7d2b287790dbb8f01abf67b852044e917ef22623c3de3ca9ed2e36bbd662e75c4271b73c93c22eba98ffa3e9aee13e945e03c8de8c3a83a87aeb1b611d6b7285d3dd118b090964b1ff24a0cee334f45d89974f44e4d3c4b861ee8e31ce99cfe516d2353b55f256f6bcda07aa65f67a165cfcab7c80a1da21546908632b978f96c4283f5dfe3cf03f2cff7444f64ac3c07f28c49875e10876886dc6480215ef2ded8eaf21dab0940fd8d3659f95227033eb491c50c45aeac6c5cd9ba1c83e1e027372431f2c4e54031d200fac9b34c7bc566f53a0176e84a57f07672a7b04e03979ce5732cf58ef6b4f4c78b81084ea04ca0c2800fca1e287d91c3768ac69e580606ccee8498a56ed1011abe670628ef995a15e558578e6fa8d7af935033487735bb8e1324c9aa19afb70b3af7f186a8142e454e4f649c6f7ff9486eaf58957a92755d31ce29eadadc6ae88543859026b09c2d9aa51f43fbfabec66e2850c1eeb499a2643935052e6690e06ac23b1c011901ea6826e980c0cfdaa082bb61a167ec3d4fd0546640c4fb27d399cac9bc859d3f2faeab3c6c2ddd9ca96224777c39ef65332d2cd9ab521564c8890ec2490525260eea10b1dd5cbabcca210f115deb9303fcf62e3c0014257681feb1f5a99915a083a1152a23a5d47411db84007312c0e93f126370f2bea9356d129d19b9c4e0010faf7251cc87c1d04f522f4b72001c7b2347312ed4884b8598fc31f151e6ea8e41baec874504fd23e61d3a6440850c241260d1dde0e1c120f4982807e05a81b78b34562f403b30025947a70ad6330350b21888891462f2a848e6656ca8dd019d2154a9154981b473896a32007a784057b25116fcf86b3443a94a10046e0fd1a8f29b389a602dc0c789748065e36530a27c4a7f4835d030a215bdb41e0d1d8bb8b2920e2d271aa642e7287df51eb437ad90b1bd0ac1f1c52050055216a64edc74818ce5d52605cdc2ff537017ba689dcdd42fe790d55240eec2c5d6013404df47afc78936142505c731d0ff8a6dc8dbd247738dd65c8ea07f41e0e91eed3b3f7f3327dccc6a0bb992985f6b5c27d411c485eb0a81b79e7a0779c77c2bcb06a90327a74134d9742701065788a7a4602f05c5208aff1c2de6f0444f2989e8b7d54b31af086a997d6ca7778dbff76a6d62c0b925e8867d4cd4cf5cbcb19f30a0dc6bd01b6f451fee4c812be09676e2e1c7c9d10d4f9e9eaa327b59650b64f8f30852329e911e83eb2a2d4fac8a800bb03fa31f717b358b79a2f73eeebf86e5f292d2a537174f22b2e30fe428459e24d364fa5644b630e4c0d732ab2e989a32b8fa3e361fe5ff46a2c0e28be254ae603cbcbeb41b3a5f9ed72fcc55c95595cadace7e922c89c945f655f8994035a6f1cc56462b4b4ad90e5a8350e68d1864fa99e0652f0c580775e9496b498ca29eb07c0ac107b18353f2f85274880f3a843e54ea0c57361cecb11334f343641a21bd02be63900780fdf0739ddda3a865e7af6cbfaac1f28b5ee28c0b25acc2c8248375c532d0654e182c1138a2a5dc06d0e7a514b6d48f1d92888047e246032649d10fad941a39630e6db3f5e6993148cfcf9960d31429fddd2e0f084bc48e3ed6a21cc70ca8bd0fe09b55be6298a9fd9fdfc331f70250ca3c007f2e571cfdec9a523925078de99f2d449a62d93f43ca4e731600a53560b4d856a9934a8375ef5015398c8a01145f050d6dc234b23315ccef4d4660d33b8db4fcec614f00c8828f5bd2740d7e12a1cc383919299d45899d1bc4cb8fc3fd6c9e87862b4d5fe7caadfaf8310ee24dd17d016813a67b51a4a4f09f021a80ab41992c58de3a86959c632d1a566627f9368dcc276625715e586e3375bad03072e07a856fcaedb50c1a536aef81a0de67cd7da864c2d5bba31072af38759a0c99046a1bd04bfc06629e112e1dbae28f36e7c188b6318d0e4075545d695932991ca30bf8322e4dd5ca1a369b9dabec13fc83f195c44ee8b4e9cf990cfb4abebbc2aac8219328aebbfe7c1ee7fef8e9b11567929dd349f05b8017c0d8a7d2648a8a19c1cd2d21778221186cf850f4cf881b46e9d682346031347b431869328ed43d980495f5e158d3a4682b0704d18de381a9186ddb0116dcb641018d245dd87ceee23640c2710a5b28e69334620c06771f2c0d118831457af4c3974da8ad53c14951b4e64983dfe4aeef8344b315a75029ca919660c40e7b669759a2f3da6ce9aeda230a3c18c6c38ed8bda4a733253bb4efef7ac7f9000205a35fbfc44a4026e1847c426018a0dbb5c759ec656ce2b6af54104cde6bae5ef7d9669f7f0fec690c3fb60bc52e34a7c7eaf6f07531b06418c563c132787db96c2d5e4b58622d97ba8a60648a32d27124c27e4cf4107f60f79d48133e98082e3b80ef65b4da771f0954b1524aa8cc013af0e7d10041c3317d3e7dff40c17251a805fb630faed91add3d7694620b46b6535c9d06f8823168bf3b193d8f267cb5f4c79209abeb4ea90c3e6504419cd700ddc546641ceffc56b085b25a7c14fbd65ec0d18baabd72ec561ef5e1451ac2cb1483824ecffa965b09b213864782515825bb70a8ef00a76b9f2dfd7f34d5ba6fcbd3a96de4e1580b51a0b7f8492cfdb17ae47f421420529be14dc83ff43f17828f62f22e965081c4197060e54c6dc9c0eaee240fe813c1d71937af56f762e109cb2aa915ca025e10abcbceaed88feb6de520564cfe98977222d2aab8e2075d3d4a09197d6e21524ee58efb47eaf40cc73bbee2ab19d7a9106f8479b2983ee6b2b343a21be8bf0271b863b265a9fb085174e7f445288a40d33d9b64f4ccfd06827932095209b1d09cc9464e26fda7485105e8b0801dd2ec9115ab30cb40b99bbf24c7081f1880427b6c2b4a62448acbf0a636adc559e1734b0b69888a93e173d37097e2166002fa28337614400fc14b5344d3ed1a1041aabdece323f6bc28ab0a53dbcf519ace8a9d7d47a56f978bfda9dcaf00b90a4e84d535b49c9287b6e30c6f37542e1f381f5af697c1640b9fe58dc8fef04630473787601cc4d206f0886919043a114724b5284618e0fd9bada18cc0d9672231289408f7bacf22333d4ca1f069efbee1ee8eeae0b4166edc84293bb7a8b9f71a89baa95a0b515514e690a85e336633750568c91d968d87dfc9959c2d4c14b1d000092a0e7f69df4ad26b27dd147ad9fbcc453c5ff01e3d9e0673a96b43895ad430f29e1420e75d91e7dc4e1f89348679082272d42a462f3ae9856560094c1a60fb07fbab757bce1e4802c0fbfcd733a58f0a186f4fea148dc25ffd91f8ae687208ecb2ad7bced214b42ccae9c73a0d3540d4ecab2b8974aaaf6a5a3e8b6ce6666c2f17e072336831927778651dde059db4ee36ba0f35cd1054e91f8478af21250b75a1e3f74db741c6e67b750d320cda3d8f64f59288005f7ba4c986eda5c0d592f75765173954fc8a9ca03091732a228778b1e12a7708499ec7e0feac6da0a20dca89c117d022e5f176408db131c496e76f301bb1d44cd5c48e24ebfd15d04014943df1b57eda8a07a99343a639ac0a810967821f5ecc65b696c7095e4b910405d6acc21fc406f5dd6d2a6177d797b958806c96d3dd1df817e111270603007ad1d98f88feaaf1d8a4f5c776a69e288d704435f02755367836683a2514a5c41e1357ef7fbe3e540f2f6394691210d23c82808d9a2c8cf88bdf66bd01dbfc1bc6d4d66252c28b4130dce87953ba4999a61ce68a1558db89c26858d331560afc2ba34d03a18b55083237a4e70a167a9d5cdfc8a95ba735e5503b7a55ff9a9f728883b185dc36ce633981cd4f5c2d78234f2e7f925ba2d3c378237976cab62c57f6e3193f22034c34997fb7c0da7763c909ffc5ec58e4d131354dbe06893d95ecf27374173ee9e701cb80000360be15541ea03d928f3948d18c52766301e9ffc0c831dc5842c11c572aa218bd079216b6130aab6755c1d1af3f8be1a40a84dabbf8ce1cb07aa72a61794a5cc542e1e538dfef54a927e6b2de031e7edb1a60b9bd876bd2e69a83db3ec109aaee7deb26f380b5a7788ac039d1a358e255fc2956830c429cff65ac56e769a9cbb712a0cb2db418491d573d229e3270f64fef1bca54eb1af142f7f2958b8e00420234ca80cbd885a21825e0ec30bca8d8fb1d12844954667ae5e0bc269b0e3baea87b2e38c71b04cc9244903d84e6108aa926aae7f9d462a256d2ce0e0a94b3a5bcbbb90b945fdbbc7d6a88452c6f858c024481220bafd3621d0a948a5594036009a359c450a80b1823591c4e66595c31327be453e4a516fbd20f577c121fe835c6d49181fed59549e219713bd0a6c6f62734085f7f45b7158dd6ce68d4f5f0282d8949e1bc00387416b489ed7db55913eed11ef5a4a0ace23567fe7aeb98c349fab669fa2c14b4b446e36737081faa2de9080b41ed4c54a902950c1b55b46984a8d8ee69b5ff5a539ef9610e2665179548298163ccce282aff461ccfd2d1f4e751232e0d1e932aa72bf467866870b275255848263b0810dbca8a98282f114e6966ef6c7103941e9c8ec38afd5ac6986bf455a67c55936a0c4809084722465b5809a3e26d74a9570af3f8fb13a32032772bb80ddec9497bd2d330e5633aa9f0457ee0b8cd96c48f2c6d8cfcdcfe1bf9518793a4c65e8eae044a59ecd4129baefc79ba8f2834f79a2ef221958f9aa9c868eb0dd4d70a542eb1fc1f2b541eac614bba73fc947238cddd474e7957351187ea3b0fee89bd3830e69fa37fb04b70e4483c3336d895194689bdb8d59a4034adc6993797303ace27a7cb98736b7e92a713565ad3e628aa61f25fbd8bc1b2504102283ff12224c0cb4ab8e0186cde058509f4313e053687dd3bf90c19794eafcf7afbb3b0aed3d933ccc5e4aa701b07f51e60f7cfaa00353cf3c04fd16f4840ffc78b31f0b0eea39f7c1e1f268ad307c59549cb021988d8ab85e724c07854240d6c1b3ffd8c8f81afee00128568761d72e704298126d3db84506c6ea298c3ddaa3910a6c873afb925c3dd6317ebbdedda75d92fcc10a1c0f383935c7f4a3f90184af44c596f00e1593f576811643df29294b5bc0bfd06b0c5ad3ddf6b79b4c81fa6c69627dca3493148485408c3b4581e7d2a564c84e106963fb03c0af0ff9bd32169f2831283b272011d5c7f63915540e9d3112b0b60fa0831c0da013974ec9773560d1a7a2e9203d21db03e50fa3757302ae218531b1a89c97e97889d79e729fb52071dcc81479129738bb780e07c787a2f28b941f190cca87eeb178a35e5445b210d74201c5eb7be285baad58d70d68d777bea777343bba8059ad5fb527cf50df743a0f2a11c64aa704401a4440a4d9bdcab0df7b73784b5a9cc13613525ab29feeaa403128cff675e088730ba717932a70d327f78cba2bd5ad4c4d0a904871cd0d36bdd0d4d3830b6d9b6fcd7d5da7be872b1b1e17b116b8bee3b7293d0909935bc024125595a8c2cf70d621d54152cca6911aa78c00b225dc816838e558e17bd536fa006c4b0d326645cc2119d90e8d9fcca8c9015b70301e98663360a28f69d5abdc8ce8145e7589951988e5261e4182159f8dd983de5d0606b1cae3ecc5c83dd57099162da5bd8805787b5a82a2ea83c373171e815076876abfde37b3b27dc7fec101a2447a36537fb9096170585f8f4e91aa194b1501da57b685c0436ab68027a3c53ea215ae961ec42f58e0eccb2329660d1acf5e07c83cfdb2ea1a02e0c6971bc28261d4311d08c9935c6bb649d3b53f5c11f1b426a3d87a99aaa853f360a8feb55b9f725e15ebb4c7537d5acc01ac91ae8330c68e62012df79774083cb8eac891b0c5d386e76b96f38ce896df767d8ac3b93de6b1c508b5e952698993fc30ac1ed544e0ce5bad419d15bba3ae166af0009220e4e6a33167eb6603c28a526fc09c87ad599e5fb3d4814402cb2aab36d8049e2464a90301e19760cfb87599d088b84946dc4c94061269102c95a1b58605a655bad8e6f62670b19be9f08755c5d9cb5d19da390319952fe64dea86151248636f0ceaae7e59bba09ad4614e132b6eb74d5eb1bb011aec6692745d1824b10b8e8167ea5c93d3d4f145a53797aaa4c1b42fc6241938fe2bfafb7b5ff0cf333a33768ec4a728841e51087210eae0ace64b55ea55fc6663e2b63689be46ff2955627068d24bc19728422452f8ef6208815529977b88f48732bc1da5d9e29978d69ddd781a0cdbb6c5b0761c811059160d67ebdc15d2ae29283117e66c3435c41e97628761d01aee5c13f084c8d446d001e889d0f083c21ea3f2cf4422c2ead0a4b8532878ffe46acebab1be773d019db07b7b7a31533c4a610637a50efb5151f04d22210e12ddc8ae6c2fbda5ff759452a834bf497263f72d68c4663e92a19e774b9db0309dae20c9fb9593386ae2fe75642e38e0ae863b00213674bf3959a02e7ddc1547e2e91dbd77934561308f5c82f6fa0f965279cbddc957595b6773b476a6f6dc5fd65ecf756ba39d9f015bf0e46a12005d475ab96df6e50566814d40c546737be913f5fe5251ef6f0a02338d36a78200a11e3bb1fd226cec9b32642dbeceb31a34037648dea620148ec4916da616b26e7b1b2c765ce847e7ee4eee5ceaa2df0bd57efc254290449f727888d37e94700128df7b4fb00c767b60c29e0e067c4bd68f6032cc6b0e35e22829c35181c1ded1b60df80ae44cca6f50571212907bf473c23b54c27c37cf424f69de368970254918e68fcaae6fba91919029736b257e39407067dcf00e6ae6b26b941b285eb244882e646242803b14555eb7320b380d89b4475566f36fe4a07e94d62b53ce662bdde2271fc100d69f32d6c45bb787cbbd763bd52fb74290d43ca1c57588213cbf75ab8a6b006abb4bc213e82738aca38a945746bb0c3caa381dc082941dedf1d6c9eefb5d6855b95afd9f7b1fbc0661e81e84898e063731a38601952cebd5675f4e0d5027007a7478159df26332041a5f8c8ac9654739b40353473173710960ecf50ce085b9dc615a748894555686a6744589ab2e8f0efd55599a7b9bf4e1f1132a4994b8a3d48537f244f4f342a364ef5e3aa57c6be7c15308df17fbb1b4505063b0e381f9cbc54ad2fe82861aba9d02a8a314c34fc243fbdf34cdc6a79df6f550791b467dadcae1e6944fa6c7cc415dfc624987ce4609054f1441b038211fb803866a612c396b6d9fd8b39fff89cc5aff8090ae9e7febe11e21d727cbcb7b8ca9824ef04a35b6721fdb02f9fec3eb3922138db70aa582dc1325acc63f438f07303384bb142a32a897d2aa6a115e6bbd284b8438f25606d0529824cce873481bbc6c2d0fa3650f79abb74d06bee4d43e4bf43d40b8e36c21a9000a564dce73d1f027b29706a4bb81458b24e870b00a105848ab2c243292b400b783740a323a78d9ac09a899c1390584cb348b5efd4c866d3d11f120c052126a9d91e66023bab06391a3564bacc322ab59a913e18b77876ebb0cd3bf634d838d6aa9f9fbf839c96d0800f4a74390a7ea9b35bdafef5a64ae993619521765b0eb634cb3e477b90120765a8cac343277fc92d9851d7e487e4b26ab7218bceee566d1d7865664043fecb42dbfe5d900a148f9f93ec3d4c329b391e92d8aa0e0487faee521dfa41513670a4881645b3ef3cd4678c22b81a80a4393067ab7a850db61e256d24ab3c960dff0a7545e329273367c7dbfe3cbdb77692004d2944d95e3455d77cd17b757881395028760808235c1602e7862aaec59904aa0b21488b05a2c505db9a88a0988cfcb1ea6ca83dd5f5a9a6890ab22940505770b412ec6d9cb3561b9924db422b9986b37a809c2dc4c3d3e7df21ba71af29aa093bfb627732fce6b2c6d043367799d4d1194c5b4cd8d7347486cb96cc710e3f09b91435573e2106eb70dd562dc4c5c895f30d451c18c1ca634dd76525b0336c1c8f992576b235adf8215a4614ad9816954daf271744796f0ba24f0d4aa22706601d7537e8aaef60a9a215f80e3ace784ddee0fb71ccd770e610a7cd96e11bc66fb3aea4966b560df152b2eb80ab95abf48640240d3e1f2a22f1512eeeaa8650bf26ff1b436374cae6af75edca75a33bd5a12dfc5df096d8575b59852cb7960298a5d024231a02d340ae84cfc55766651d710280382c6ba951aa4ddf7da21682b92d924d31d170ca2a5d1749c7ca286d3f422fd63aa9ed7c6ee5560cb46c2021cc9049d12951c9812c5bd40255392be3b435caef1621be71af01796d1992d0d4603715900d92e8741def780fc941a36e0cc91a70fbd93831ee0a4a613727541c033a3342755a204eca9a0e7d9979772b5357ee76d73b7efc7cfea1de4d7211ba24d03920f6a2fd23b385be9299eac652f9315e605e1850e0044de51403816c99aa184c905087c87ce34b582dd1b936bba65d77a08c116b6defbda594524a9952f507160709073842ef5e3349ae2ef84760b9ba200d23bc2347f42e7716b9f230835b4cd199dc628ef8619563942cef1af169d4707c8fffad2333fe8fc1ce801839a25c751023a4af0f0213c458068f4719ece574eec6d17172d8ae001b382406f7bbd00cf2fddaa2735065705ced109a01cfdc3728267238b3c723b2e71c0480c15052e408054608081454fb3410a828ba46e7f0721cd74155072b4c44c8d93ee3c71cc11010f1295a8dfcd760f6cb58bf12364b58c23cc102104d2ed0641326475c61eb62054e0d34d999d152bb1060071b837d39fc6e37a8e97983fdc31925e52332c93c001906e608febc72f7ed18a5132f849e2aaddc7dadbdb72b6dec02bbd2f61f3b69b53fedeb5a8ba78c55897392f31428a5347eb693567925157229cca7a496be57f93eefb42f4c09752ea9d83e9ac936d4ea917d1e883ef125075cc8516d3247b61cfc7fbe41b2adef35400c78ce555008f70240ae0f03028157c7ea07c00294721cf85da3beed9fb24fbe107aaa600fa195ebe4e8a59652ef294aca478c737a2008146c3527f31b46e2c7e9f25ead186777ebde9f3ca9cb9f39941f422bd722397b32e69f6cbb24007f79e63234fcb0188d28f0d3f01b1464b27c574f065e802cbf7d2836f619ab96fb23e6defe8cf97d7be229f72d8a863c63825eb273c9bdda613fbe64d6a1e3047bd0c3081cb65eb478044023cbf8f2d8e3da40092c630bc9f7c64167ed36c22e4b0ebcf7a7d503fb3ece57ab6bc8af2f9eae219fbe5e8403c8f26f38e1ce9e6fdcb124bf9eed137fba6cc90a8be4193d88d46ab52421915aad6624cf2b0616ca46b8b9412143708e5dc33fe649679ccfe518abbdf7b9576d18bec105f7f7cb241593e949529e73f6c00290fb5605544e43460d990bc416f4633f72019a53e3f53ad6e4ec276f3fee77f57f0c5a75400b9a3198498b918973431d0183830ce3de0da4080a50788183c29b272d10a2cbb830831b23b090c226860a0cd44e53635a92260e952b6264152058962049e2618b154974524754d0458b2c476a61bc744e3974c81cae66d2c286490c18b479e32e936063837746852bc2d10c309022040a2a3879b3c5853648c08082992eb09f245b96442e3a8a5a70020a5fde4ce181e651543a5051d4821352466694a6192d182da4c329170d72c021c08688a258c961cb43c23ab9a19420e5b095fd3f1d704e6e28252be4b065ebf9b12fd9fd8fb17243292921873f328ee72061b225a1926c91e5f738c16d7208f445816f6ea824683250dba4ec8171b9a1924491c3d8c4620d9594a725a4d0a1071ba61063c508063570ac58e962811cba743901aa4c16297630c109cb15296013650d112ea8828685197c5812228a2531534aa072c106344eb4acc3961aa6548003c412277043468915304ab0b002892e0aa0424b0b4f5e20460b19ba324a4a4f6051c4529518a0e096f4ac9f7beb458cdc5025fc30450911544b7479d212270e9927536cbec83005092dbcc8dee5a5bd2c998107265ad6642135a6055552a8a28a1caaac297251a5266acbd2539729a048000e4c599a486921031b77f9c58a2974aa349052861c5208f3a60570963042a3c00954b280a30216602943935d54165611ae89060d0cdc1734483d608eb082892b495c986e349984922b6d92668882c11aa82340e41c1cb06029128505547eb802454d120e5e8240d142135e60c0c20d69052ab4e1c1842e6158708a41942847c4d460848918a23c11a54310269c6942863752daa45193a5091658f0024515a80ae470c505282c383021059b2255504881156a806813c493db0f5dbc4025515265851e7cca604c29038a3197722a4b9aa5a552d2236ca451961c4d4a2a2588bf184c4a3259bab8becb7dbbf5907772df6e5f7208a357d498d241071ab05843a5e4840392965022890f2f403ad2589479fa9284459728579ab8216ac99529255c61019b360560e24d9c24b52e45d0c0048f161ee2a8e0041a263054445129449124872592a43cf540bd518109921daa6842156f4abc7172fb82040b628a60710306882d37196068c2a6b9255fcc50f9bc24118394f28a0b336e5c46179cc1c24bd292352088f0410737263039a2490e490c9d0a5ecc17beb0be58d1c44aba11aaa805cac81450465a907b72431d418173a1c80b5ab0f0b0664c0c43a859a28814234e4c58018d9921d6b4692a2e38bc80660527a82882160ee5092c292286304660c1c1a853c229876d93327b00c311386ca084590204ad0a064d542ed4e2b4794273f7c2e6e611dc8c3ca90a13c58637b4f0b35fc9612c4f97148ac0949827649c60e24b1534fff6bffed8bb7831909039e266b4a505226845923431e5c30e2c08e306065a87c9fd3efa87a450db72f4e80bf89d160031e69eb2be94b2004e9a92806288335aa65a3b6c710393186618e3436dc18814f54cad608fcb9543d29093c375c4844eca7abf5e5a2406384e4e4ed0b0e049069aa4c93086c9ca540ab4a88126a5972c998eb090a58c21cb4a93b2d6aa25cb77a9c9d2cb92c9489c2ca5acf2af74cd974cca798392a394b75b14d8ed6624d7dc3727b248e3dd3801f7b7751840d1c7df3b7703e9e8e1410cf22c34a5d5832580039c136ef041063555685d12796650021418c4b972449426da045b3be0107b8dba4fd8135e27ccf8a00225969082fa610527681da420053bacc007304f6ea0452d7a7808819d88ca614cbe7108d8aef3bce7de034321dedbe7e1813172af1a22164b66fd8e4248aa78dd7b96eb9e0339f0be8fdf8b9bc1a37bfb1cc85b152d18c920746f4108780f863378706f41fb0e68ff1f22730e49395088670b0ef1f9f39b3116672cc82362df48125d06acd57cf229298ff2a9ead56b73e2b8704e3627ae898973ba3627ae898973fab8ef5bedb0ff712b8eb3dd9794943444164a6df72565b9546e169a94e52e29dd2c94769f4d5aa2dca5abd58a75dde806294652bc165ee4692405e9480a98a71b49f11cc98f3c9772bd0fd638ee771ff7fdcd05280aa990e3870370266e43e71bebbcf0ab566bbb8f23c2c483c31161e215d53c676257acebd9fb75dcd48f549baf557e10dc72ad7a36c46de0e0be3bbb6dcc3865ad418694a1ea820c9992a2f2be2043a6a4a856ac8bbfe8b3da36eaf795d45d676767c7857c8a35f5e82780f40072fbcbedd603c85337dd5cb858ede8dec58a013173b6f81d171db55607678cd923f210f99edb3f998e0b24d331d45c5aadd58eee5b3c5f182b80bbbaef27004b607f8f3694124a59be8f20df1e917d0581ae464441b62fbb3c6de7fab93df787ba7e6eecefcfea7b79151c1695ebe7c6fa63b96b79bab88a3772f0a6756981660c67a65f633fb224aab0e47076717067e55b01e6926853950c99bba1ca288753a86d55f6f53d6ea072d8637b73df76a7bc9dacf66b058a313749e45a6bad65a4382f5e253375b17c748a23db0337992a0eb9d6a132364a43b5b6871448945a1872adff20904c66c1a1288ce8adf5e6c628579b6badb5471451d1a7dd14c19e46e5f05740c86ccba0f9edf27a3c88d46a423960fabf04e7e4be3d35c99c0ad8c516760a767186a2c1b70c8785139c15d8cb7d13d304146d94b5df8a4135db9b982dd9da7f700808880849f46926b7050cc525e533f54225fa740e636cf007444d414c951c02e58069ee9b9824206d9ea44fe7d9ad3c73dfdaa0904357a5e15e970b8c33684ea923c66494dd0d1281041359ba5cf7be3cc6fe30c618696e23ca07658c31e6c418639c31c61867e70ce1b53aab953a6250dfcf002fe774728cdc4420c144eecf4de7ade0fc281935a328cd67fe2e1cf8001bdc2ec70789225014b0370d425ffe8ceadcc257fa68800a3c052308cd9ef4185941ba46962f56ee8278101d2db55ee1036edbccfe43699c88c86023aa264aa7264ee751545560e4d0cb90c1534d508c4cc668e21500b8e4d50a682baa3779c5e688bc7a8c638ff1b75a7d0cc2092735da8793c8612b7bd35b13267b5436ac59d2614e0d95cc3db7dac14da23452dca0a709e08146af5093e994964cd3c070850b622e43153035dafcdb71b563621b1139ece182664a9668cc5821459642948a2a4514b550d3f00a0915bde166051602e0a3c894a3e4f833fe9935f8e61794b2fc76239d671029c4c1d315392ae62f569e6d702422853a76159d01c3ba46cb2741135901aff19f21a067ddae58e31e6a1cf3b1ac813ac87e93f6e93c819c71329be51cf175636ccee8f99a515929609cfb76e648a65f29c6aea71feb189b510acf573c9a95e78703c83d7ff6b98df9f163c45c403e8ba005bb9cc30396ee3320b731ff731bdd352408346ffc7e64fbfe0a632b1e40bac6fc5e49c0080fdd8bb1cbc5bd670a36549e39e2fd9927d11086c1064360b72978b2521350a747504e51fdf32e85538eff03f32a0fe0568c39c6b02484222d46a194e3ffc03e28af9ba0c254e93451911249abe2a07fcc21b8b87150404219c10465c49319faeaf7c067f1bd7d3cbcb12f718e9072bf400d150db711c3d8a76444ebb6844dead6c4d28bdb98a9ec4f420c9253ca685491fd9f2a7b7649c3679dfdbdf9acfc418cf9f08095dd9fd5422c21a03049cd706b7244f37fd1420040a28a2982a80d11031b9a04d672f5c420cfd7726fed7f078545b23fc7711c6c878d91037fee3b0896ef7f07f95b6bed0e7b3f0eb877b065eed5f5ec6387901f31563df79410ff2137d79fd141bffd98658eb972a01f7dfd0158a92f67f272a3182ba23f84480ce2baef7b317621dd73d5be8890f0f29a23891e903e7448fad0c7d725eb8ad49a524a413f8a311a65740ea8a359e097dbb17af443860ec5a13cada0a784e85203a344ae1fba51539d104e9587f4ad0c0a827d0e94ef521e04fb1d8d6cbf2add253cc40b1e5624b54f670ef4ba178d6cbf830c3208f63b97e279dc24419e20a2207745389879155a1164fdbbfaef1560c3ab9791438792576090ef05e4f503cafd2a2357a93bd53e9d433cbb805155dbe816ba805154fb74be32728e685f32f28eae7b71d0e5fb416cf7a17d20fdf4a37b0991651042e832077ea0cbf7ef8e0b863472487fd4af503bb71a503f488d6f7c90a456e85b3d20aca0c771dfb27fa5d0ce5bac8033f86b0d49a11ed147fef5c20a86321f31c85a18af17cfabe5af5ee735c3eebc66d8d77905ace9019250c53e09addf790b7ea0f33c20092e5ee75db265c1b0ae5eb41e31c8fef732cb9b7bf5e588af3bffbec2f9dc0b04fbf465d97ee7cebd7200cf1425a67c31c83ec1e4e3f6842d4bf93f6c95ab7a3bd0c0520b4208f103f16b0c1663ac68a1702f21055d0993a9845a8e8c236d15b531f2e4be3d6164b7d4180940ad8d232da555d456d8cf13453994d923f172bf028e417172fd39634cba3a5fbffeeca0d9b3186377ece8363a684e196773ce18e753d0f39c73c608b6db685986ebd97d2707d624a5a58844b91863918c46fd178cb539342493c562ff2e97949c73ef2070dc9cdc4f8e939aaa8a921c53d3932dba5c60d255cabd94fb919c8b968b33c6bf3448c7f8d196a3c49372ba8d3682c46b9fd15a2bad7684488b80de316a7f044b69a5314a3b4d8852a2565253ab0fbd2ac7d8b163c78e1dfb732647aa05b94958c9976e11363acab16b38462937d6236181e109e09481d2b60f0c5dca0d090ae0741928cda548962c6394c695b7f2cc5e4ef6e2c82925140eb11629e4f0b6105084fb3df74d0b2639bc53ca9aab3557e02647bbbb25ebbebc2fda35e24f81a3d36fd2a8e159e9942c3abb46fc9fc2d669c6eb38548d23cec87d8bb344f6d50e0918c5a992bd717806b96f71aef48cd37758e1901cdba1a4218265f4e68a1b5252e2a421e2cb79c122bd19c200555edca47921478697219448d3a60917301a6891851829a6502dbd91b72a5aa8651caa0f0658e17e3efdfaf32750c1193d7f025cb5e07dfb4da3f57f34add6fff1b41838a3bf69d6061438eca6fab2310687ddf4315b24c6f8a59b5a50e20c1140bc208a314d260a16b27c11e208a4285abfab47b0e5cc1369c2e080648606678914d0c0f024890ffdb8fff6e37e577f2fc06b58d84de5f814ec6c31163b2eb3fbd231755c72d84975529d2dc733397e778b424eeb5b1ca31cbf73ea6c31884ab9b106c7a74a38dea748940a95127de20429520659e0b06bca317ed714839cbaa7d94d39795062ac8fba3fea8780a095a75499186b2a31d63129c63a4a8950e2d193936c925fb8d8be30d9b2c825f90395240f26a5a08f103aaa3e7d51a44c3b825032ed5ce30fd9a308fe818f186b1d39fa9b2ac67aaa5e810a63038a41433106b5a585ecb5af003794114b4c1419c9404d38fc88622cf2a02b078590c8583183e6035f3f768820b5a889e05be4d8b95b398880231c0e99b68b5962cca220531b6d59fa92dbf05fed90a02b49eee52b06e136fcb9ce44a494d4ffae76dc1603ba71ace52125ecb96f4e5451897894c1d3454414ce27f2369225911265a8f290d2cd8933b246ef595931a0183444143d480a54181f825410ff831854832c280aa6b9a19aa4b21b5949c0087bb9a1c270ceb5648522c8f21fb6f22c58fefcb067dea84e09386772dfb250ca3672dfb2b0654aa546a3b2fc1b6b7078b3a437d4e08ffe1063f29f528931a91463920a65010ee92dcbcf11e92d0685944a965ecb413fd492a450db8e269214c2491449e3588a1d559365686e7424259214c26d9b9255b41683729ab2fc48250a61808d8c3f64796942944af4917f1d4e16242e26f44b96925281829f3c4a0a71636a5234cb31556a4cd295b27c104823b4592bf2252629e4b5a67b6b2c97a4b4c9c9257e89424d0322cfe01e5208fb90ae59248564949452524e358e98e5cb2a29e4b5daa412859a267469f2a952146a5a9628d434fad4c464a34b597e8cea4c992f597291f345a3ba12dc8402d4aa50aa6146883559504963c26a042e4f9e70b386a98887346372a2cc3421001535a44933c67ba1a44644e4b39889dac7ffba88b213b9224f938e1e536091fd3d88421bd0fc3f20c326fbffa0a2f90779913d0b28d97f08c6224a7ec11496ec3a7210390c505c500305c49210b478a684264cbc345961a536cbb46a5384190099222bd62ca9bd440c6c88b2a18a28b0402902430c5567b644a94275644976293d02c4c1e1bd1284895d3b66e7fa97019dedf7ddc008af150c3b88b94b8e7282d7c640d8d3b7037082c38fc1b2fbc76f8322f0e4ba6732620b178a968ab8c205347faf99e27c75af271248a8f2410792d0bd4f54fc8e93fff302e6befb9fdd8b7b4df9f325c16be38c787128fe748dfee851ce38bd67949346ea4da72cc6bc7ad719e5cb2f32a5ebfbaab7dc5e22f02cd2badcab0e2179a4ac99caa1f8fa8951c69f334a298bb361d2f39c5366e992df9ddfdd3d6714f69ff167f0e8b2778d8eefc59aa96cb99cac2b2ee737da4abbd64aa7c3ea0d23378ccc6a751cf39bc5e8d16dcca02abbbbedbdfecd22b0bfa4b4be95b5d25a699727e8dcb5ddce1457bd2b3feaf2aebeca59cf7b9d807dd25f51dadd78409877258f68179501d68a83574e73ab1df3adcde972b94e36a7dbc4749decbdde9d5cbdb772de1059e64cca62a9741e47459594654969b2a6c759cb7997d2ae9352908ea478973b9a1e672de75dcccaa1f8d5cdfa4b844907c7bbdc11ed3adb4d8fbb92725e77ddb48dfa2e830c2943d50519322545e5791d77442da52bd6a4dfd769a425e8e971b70710d903c8ede675dc510f20f6a9e9e6c2858bd627d351ab4c8705f23aee885a4aedf4b83b9df3ba1b003093520ad6f7d85d969cebc7f6d81fd78f8dbdfd59791d77f463ffa7d649bf7800305e7cafbd2827adf6725db7fae24fb28b41ac9fb2618bd9dea946cf7ceaa771acde6db6bbeef4d5fc42827d5ed6eb7b8a41b863de8d0784436406a13e7d116c7d203058885b70060799822348f95ee3e8ec533c904c4ad953031112d87b48a62f5fdd731f76df7537842fdb989a9668d7c5a3d9bdcf584c261b1aea9e82dd02ba8ed26ea8ebaa64172535f5146dbed45dbf9ded6ad7715c51ee4ae43a38a5ce93ae6d749c8bbc8373e887bb06a5745e4a7fca3e88bd0bcc8f24374af8f9ee374a9814946095d285a58fd34927bd0de5d1bf2d0fba865397eb5eead15aebdff72abe96de2b5df74388e98831d7b5dc875256e5cabd6ea620ed2e998221c4f2047bfc16af6160743ae57c3c27cf98ef8645f274771e287038ddbf295bb2e6e78839e2cb45f6d5033acfe040c8cc1296bf186b8f4db30a9fb7dc41396fa6f65b75e065f9f4d5d24a5b5f1f4f6eede86424295b3a35459f734eff12633532d939a3131012ec2f2d0bdd2f275f743be96b20e551ee9f48b2e8c6a958256b52766848268bc5625cc09cef4573363d453155a5255b52fb7474b9622c9a52b9df5a6bfb676492d25a6ba7aabce6812939f0418cf5fb9812c813ecdf1d630c4f90519023b8b3854fbbbdd7274bda5f003ae863cc415806597ec8b3cadccb8fbb1ed8811ce8ee93e38cee1a1ec49517b6641f1be5547c30ba3b682b5867adf5c6fafaeaacb3d66927ad93ce2139fcf291593dca687ac75d29eb6b503bee7a9cf2f53db52fc1966dc9191c8433cf2fcf3cdd7878ce7ea9805df613e39c7242f16ec6ad08e2cfc1af35e9a442669ee01019cd78f263afb2fc182de4e2e9a07f29f11af696844cc17066b7a0bbb7e64721600f249328f4b48ec0565cb10bd190a4e1bb38b422169991211772100d01c97e640ecfc495c1a3b489d2d89c4f6d53d0bdfaf5ca52c975dca5b44a1be5e4e8a5963aa595d666c9a75982fdd57e66bf9b18ec7b5c2dfc0125c1fe56f8df0fb75c1e61dfe3a2b628a021dc72f53c2cf62393397697bf03c9a26a164d3f32dc72f53c2ce63ef16f2ce68a4340b29f58161d435987fbc4bf176397eb3f769b8b6ca8b95451c51b83db0ed03343460c178c173c2d173b3a3887b56a6264e4e4e8280a12d294a4a41e949482585ab2cd70ef49fadf0fb75c3def3ef12f0692fdc4601f4788bbf74a9f3baf4cc17c467774700e6bf57912f0d154811f4f1b0812157a404ac7b9a228193887b5fabcee4ac04753057e3c5d26252a23860bc60b9e968b1d1d9cc35a1da9d54e282a6a6264e4e4e8280a12d294a424a518eeb5e08f5bee13ffb65cad99853fc62ed77f2c260302020202fa582c874044434045d21f63574fcfc53d31d8f7d02c3d3ea3acd5e775d7ce5bd479f776debdd5ebb82ba594524a5969a6af8ef38cc4dcd56a6bb5945e90daa2264a23839e193262b860bce069b9d8d13952ab9d5054d4c4c8c8c9d1511424a42949493d282905b1b4b4c5662b8289a9098ad7b0d0a3704c7b3bef5bb172b0ce8e8b16cf0b18ae183266f46440438320ee35a09141cf0c19315c305ef0b45cece8e01cd6eaf3b6d86c45303125d1d4d4c4d3539406fe45c95a3ea3ddb5d3164d11f98dc564b22122f7897f2fc62ea2f012c564b21c12118169fa71b9fe633f3f3f3faeff211a0292fd34551708a93f04677aaf11c8b55cece8e01cd6eaf3ba6ba70be798bc86b9bbc7150f9aedcb0f168364c7dbbddb08656edab469bb8662cd25d72c2ee7b4b19f086b1273c7ddaf2e1c8218981e9d95cadbf9bceeda6999dcff7e18df1e570b27f136a83e93d3decefb56ac1cacb3e3a2c5f302860bc60b9e968b1d1d9cc35a7d5e77ed742418de354dfdfd70cbd5f3b01048a8dd27febd18bb5cef43e1508e67a4ca44dd9e9c9abe3071691bd150101eccef755fcd3ae57cff596b5d7130ab4f29675ded80b9c360ed31faa18bc28680643fb11c8198609736ba85377de6b3eeeeeeeeeeb61f63b78c36cb2182a2b5364a6b2bf7def48ed416f92610931528a5b5144c1242521f89122c1f8992a79520b7d8825665be1219ad8a9ddfc4d4d4e1330afef80cc6f717c067aeef97f92cc6f71fc06732be1fc86733be3fc8673ddf3fe4b30cbe1f87cf687c3f91cf34f87e05f8ecbf3f87cf5ee0eb35a09141cf0c19315c305ef0b45c781323232747471e05c9917c4a520f4a4a1ec4d2926fb1bdbc0826264fa2a9c99b78f2a731515166a4a45ebe92d23ea3dfbf81cf5e7c779fcfe6f7b37c66eff7eff8cc67def7bff099cf56df2fc367acefeff159cef7d3f019fefef799cef7833edbf97e98cf5c7cbf007cd6fafe98cf783ab7f1e2b583b10c970bfcdf20b6f33a804c8663688896c3d6801e4c3e9a2af0e37b6d208807a4848060aa0444ba2a1fa9d54e701b456e23fe01dadc97d64a8f2bd9c96bdf765eedbe5e3b65adb576f7e3fc1162eeba7b5fcacad96b5fd6f97272d15ac9d9af1cc7e31d9339fbebcbbe7cdd7ff9ea9643a27d8543e29472827376d4a2bb9b88cb1720af7dafacb5d62bfb679d73ce9e49a8e4ec9a685aa7d0d4080040410123160000200c0a8803e27058288ce464740f14000e67943e6450341cc9235994c3288a6238ce20430021c0106308c0cc14550570fea126d760f9285428f5d27415b1150ea5e12aa58240c1fe9b7159cdc645b94dc80ffd767257c654149a1d4756f72a15463bb1d9e6fbfc969459da79bcb573081d50e4a73d9d5e9d7f5aadddcc52ed07dd3e9e16331f9502db04cf43ae06fdf51fc19c278e1f4a6686f1d260f1dfa67207709c1fb9cfd4f69e339429a2da0c95ff91c5904526bbf90c631cc540fd00cf8643a62946f708b18bc65026e7fc9633dc9d512d82cc5a977fdadecc5f929556ca55a5bf8431b12888218f702782b6993cda5209870df2ffd3b512a21bdb534fb42aed15488bf764f4a40d3b9e70374e44e76e862696e8192162191f835d47d433f31a5ef14744ac06c09c06f96caa837b51d9b9118e0fc6ac2ba6cdf7c035e6e4bf2ab0df0649a791fe508434cca2a8c0a7763d504b8855858858fb3f81f6eb031158233e9c706946392b3208da29d599e8fbc96186c0301099adbd172a666700ce1d0da45f908f6fa7856d7fafb454d2f2dbb71e72b8c5323c503d3837b50496a407c06ef4b23f82dc23992e11543839b92764379824de27ebb83b06adfc64b9244ed49f94a1146eb816f40024c7dfa2cf987aa84ec449f7886446246df8011b749725daf1647e205638e30ae4d25cffca0b5c0cde50909a64b5a22379ad30229e3e5df4cad89b5e4af9ea9b79e464b4374f48e6f3a303efcac16a01da93c51b4d5b2b99069e6a8ef7284773b5da731381ea652b5d5dff5bb10b2bfcdcb47c539f6bdd5608910f98843578b242a70a374d74d72a624790dd8d7b4f111d856794b64d50e2ca75529a8dcd58739dc48905171da1c1aa497abe9a5cd524ea966676e554adcc14a10633cc669e6cda82f4441be4a2ab77d2a16c6fe97e5344194b9342e7ef71b37faa116c0a6a6f4cf51552a549cf7afc629b0842b9f238503d05d6b65fdea25a32e2bbec8a06e54ee61aa50a59bcc767021b85befeb4ebd0b6f2439a902a3396052216cacd32d2e57b6a565008fbc53027c774bc89dde0f3c0dced64eb14ce3563813186223e552b3f9b2bb0dfa573894aee140850c8ea3888597abe81bacd5110a846b2a2aace9109f319c6a9ec7e6228e96c3361f174a31343b26699a3cb0d14844634d58b7a60d4580a81f39d3053086b6f274f5ded14701457cb3a02bcc8b6a6598ea05f740f8257a67a196ccbcb2d01e1f1bf24ea6a02038181c6e04383ba64db2bbec83c28dd559acccf85b8ea205d38bd03e1ad1b647175e07c836933142cb225707f18f85fb0ad37284cedc028ce5eca21fd96d1829ca978fdd290f61957ec47152700aa56bb5bfc3554204168d5fef1536cf1f5b7ea456de9a67ae1426582074aed1a7dd4ea947e0ed53bf6bbe32bec0f4ebe8032427fa2601be9bcc56a3ad7e7fe83249d4e637772418ad5506e38fafd00ff5ae496958b261c47bef7a5cda8f2df3f7986a6df5101513bf44f5f9ccbc18ee2e3b79920455c47c5f3236da38c0180a8fd70d5a90fd50eeacc7fad4fec75be972b5008eca608ea1f86d43431336bace0f72e303c2b7dcfa13f7f2e8290fb38a316f4a61dc830d40995c4c4d4597df8b13cfd830e642c24e782188d8a623169ef5db6adf89ccccca5821e11383b6ca3b3bf23a0be50595c2ae0e5243caa35e308c59d6a12593f53fb7d9c4e9712e3754442325367e00e7ae600ee93308ca236e8926283c5852347e6764040a7d530bc618a6033f4d0a2a42ddfd5ff22d204fe09fcba61e05642985ba0899702ec1d7bf53964abf63a72a945766c95c9c1e5f42189e0f286bf91a1db6d364bc606fdb6b47a745a0d520035df5265414ddd18c0065e15904a85e4408602bcbf1581fef6749f7e37ec5197783e7a6800ebfaf2b4de660e448dcd93306c33094d2d987f3aa187c8aaf9b1224bf39bfb9134568583f745a7eb82cdd48408abe05c03a7d34a0320393f45b3be8fd41397902bfc596b389bf96200d09962817d0a72f9ee5cd1270cd4f15565b410c4bd3ee4c169c9a6a98e20257e1b00b137e2f8782277f390a8850c9dcd826803b94f4a34575913a14f827959e3ad9622e0aca28f29d16ca02daebf1a06a227d7e0c08b875e6d0ed1493049f4a088be6bab302834f45c5bc84f05839a14ba59cd3048432c985a14b60c68a832c8b4a01d48cccb2e445cd028f9e075654c7999246d8bb7cfbbe804216044594783b03a64f97a144e44fedc365fd6a940c5e8055bb40557b18d6fd4b5281d123869c5a46ccab57afcca14050e51f18e2ef8171a96a21a7743b42f3df17c112763bea981aa9274bbc25bce83b28111d4e8fe51dc457bf3c0a87086ecc0deee6aa9131abb627e8946cfeea0d43735c92a41f12e884236ad4322c5888fac5a226e338b8daa107aa80658e6f0e1eee5ac7e9970728c545e259fb9ba9fda7dbb8eb97a4017c91b649f8533fb39430e428c65684c5bf2757585f53e95fd5a2ce835ea41e53e6dd47c39b605a06f21e94bf1ae3373716589d3179422f635a8151b70c86d8facd33127a7ea6c4f97f44258b4d55cf203591bf7c557cfee48ec8117a547db1159b88b8a95b67045c04736c59f7a22fa7df37a760cf05d8313037780641de6d237bd7c411d96e4f5895670cf62ba9b7eb5a94d776c3e2b8a39eff6a72a8b7b5fd0263a4c227db1b2edff6d0ea47d8eced6ee6e77734891482ff38e0a1ac94440d95800e9a6f68540a4fc07ede22aebe6936f84b265316fb16e43bf68187fc002d4407df304cc883bdd0da7377ce8af4ee36cf50ca37c90463daa12d23453324dbac324e57a4b4818ff27d6afed8d02465a604d83e0e8dcf7821d85e09fcf205db8571d5074778b72e8c05fc0305948bc67d3f05380bb419540060df7af147d36125bebda7707ba821444dc3f6fdafd58bdb39f5c94632a70c1fcb3840534dc68da89c4d7c1f8c2944e85bed478220600e3c0e1cc032ce091c40cbeac23f91b0605c319c1472c87797bd471a9d4710a1be531f70d76419b459c7e0a6e303a1136b43dcaf6f0dc6bfcf5ec4f2a4051b89b82a8702d6bed37a8721b6241797180ec46c4a14a56a61e0529e332cfa16157c4aaadff162d36dc4c063578534258f991d43509ca3aa1ad00339b4443eba6eb6075c85d26073e858c6f02794e18d43636acd1aad2b43a6dd42ea258d04340271aec5b7fdfa96eafda387f4960b88449ffc5b6f4a03980d98e9b21ba2113c957ab7777f2fe09072f4126de5488946e254a023f94ffb66dacc88fbbb0948c073593afd7e7112fd0ee17712a67900abfeae2c84cd453bd166130ce2a9e84586adaa31e4be4e4d94d2bb6eedc3bb0be8f3015a946f89807042874f1f54f6f0cd3544b2d0091586200805b5643a3a479b6ab27639809585355b913c8367856b82f693abc6342f6006e6d1e0cd315b970b4929779d518455b0dfd7b00997fa87f0d29869012331101ef1193cea9b69fea345db69ec9721f062254df15894fa4326a2ad89c131bd58329fdea6ace93b4cd19eaab14d48c48b96ac1592b9149a0d43194abd588c51cc7a155df036485a3d7bc431b8b8c53eafe0c8727a6535fae6955478c9a4557e63cdb4b6a90c49b39729767fb38309a7a04af3f2793a89b45c2cba91ea71332daf112f71e2ff21b789b20606b27399e242357883a319a6b6bdffd4ade2fffa29f7005080479fa24fa64f1b58dc66c8914b4af76a535c6d47fd2248b4374e616c819e59ddb4fda5e71208f34abf47f04802dc66fca819a74d3b1e875030514ef9eb0eb325d7361cc0fb9b4f76eb321632e6e627c867ca0d733da571c23d1deecda9a71f9b7c64091967fd47cc16790233c6a60bc61f3d32856a4515c0ffa2642498ab0fee9422f46786f05692875f09b9e0bd1d01971234517884318835939bbeab6ec460766e6ab5a786123a111331e8fa221d0b0adb89a263d90d34815c76ecaffe97347645d1bf369d9db513eca2c8f3f6d4ffe9996766b814e09c8ef5a15d04d355f9e21d543e5b6ea9407692afe9b17198c73a8d7b453cbd78f6667e41ffacd78b69017568da4b6855c78012999d5e8a6f8e06964b15bfe59d2b122d0da832f35742b071788e8c63f1ca3def7c35432ea8c44f0370280b448648c62d808b48b3aa5cebfab20a7f19883f2c8a29bc47e892cb1edca5bcbb2057183a3295bef8c3b021c0bc653936e7b96848ce37023caabadf25b38215ffe420e57b384c7d2184d0902d256bfca544a4c3f4b3754fd3b5b4e81f12de7706ab7a89e0ce3b3926c52c77b4b1cc4b1125f9a71dbc7262ac069a1efdc1134c743abb80b1ee2ebc84431ba04f1a5dddd326776ffdf1dc2d290212d38951f19a59ddb366628e1195319749e2177b5446f3e8b8a057eeef6e55cd41d1847923a935859ad8620dc3ab602c4b7efef90bc16fdc1cba017e36a6a0e3521fc4781e95bfd5749aa3d45aec669beb98ae65694bb889ce1ec1e273652fe086eb1879baf31ea659e38107d9dce9df08733da20474913ea0504a8c19a6c757059c6873c24a13164564368d324c56e0b3a1ad197eb663a9f3dcc1cd31b89ae74ef475e8edf2623e3183b99e3a81b0488bc74b5fa0d139e4610bc6a9f46ed39fe24c1ec3050582389590f5fc30b86b9a7a1fd0c38ed67e095a23f6afda658b11b2dddeaf285561366bbc084943510550ed6ea6aeb6b818aeded416bd43e13fcf67970b058534ef16c503d63d94213d86f539552a0e2cc817cc1cf01a6a2d2f00d4190e87d1da95a27c9d59dc49b4b714e0b7257b183adc211cc97ae1bde3977877fae794fb2f9d233fbbbb348aa3881ee6269324d4304aa78b23128a6d04fd0ebb3f71caa9e8480da2acb81f785b1db5f2a7d1b446a2f3626ba62961672bdc136ae0dfebe33855489b81168e488c457f9f2e062c65631ab4b6f0e64579b0fc59315b944e82d5823fd3c3c18e6da210b8d55991c554eb09434f897970ea32f01669cf678a586b855b89dc5a9ed9b41958e9e29252b346a330f5feb59f854bca8740560618efb79abda9ee4b093fbfca2183ac5252e2ceb2ed86b0d5a916dd3a38087021955a8682884a688519a93dca36e440e0a163bb9284c67ff3b86fc3f085844f32a79b9013e21d2a73360653448e6a1585a3c81c8b283ba5548a8033f9a20516e950bdcb2a665735019aa60f6a44f7a04d2421df6f0048fcbd2b48194a68471d1dfe1897db93863a9d719f41cf4e4a5e190c1f9ede64e9f39f26165707abb82b4da0992554ef3c8b160aec21ca9a83d65f92848a5ce0929bd57e57bf6a02b6ee46c9813b522cac5f4135f658e3bd00f0b574b66b2cd9653980aca6a62f3bbc89c0ed2be91cfec91fd6c70e9eb335e48d9768584fae9c8d54fe297b340ce227314e7cc018a51714cd9a8e248b00c0ca6feb0dc64ad1b1795f76519ecca936c25547bc4598f52204b7fd74850dd534aebc6c112be683f69d2c285e91ae9f7cc5a27899c5bad03c123d19dfc1838a7252214f98fa50bac93be09210b12c7b70ddad61ae02d2ced0dd18391e55e2317dbaecbfc6e1a27e47334d9a5e641e60d172795dd0a09ba6db452c1b760eb75373afb59dab0626ddb5b21ec62d195055d85d64ebed9e5f77221736038c7904b8b81bfbfd7df6a8534ce10706948542d51fa21c4fb35af915471928cea09797217caa1309716ed44a2025cc58376a1887938a9b8acf64a1bb1bfe20dc2c6121e31cf5e1032bcba6ff61b89275506feaddd2b3d17c0e79f869bd20a429e6399336982e0f8c10eac12ab6a5f8614a8c49bcb286c3fc23bc7683d1559c35f31ca51baaa918fb5354bec9620b00482f0e200130574c04cdc22487ba5efbe22bfabb61f4f6d4ce70ede096eaf80cdcc0a1c5bd289a6a163e9a827e88b7965133459accb9f4341114120a30a8fbf99a57366cd1e5cb7f62691a71d202fcf5518a8a9b3a02601edb64376189d7e613e1b3f28c28d6f691c5fc6e5614db89f8af5841bc5a1d08e01353b51b2d5b2265bf0b46c91275cea6bc4e02c25dee5d857193e49e277edb2232a0d5e098416a372e8d369b7eb24d54e461af54a8024448b7bbdcd34c2c8a4cc1805985ef242128a310fabc9e435b605e1a418c166234c49fdcd028848757d106bb2310992e3b2b9b0ff6de5c7e5e084e70628791b60c63409f39c2538e83eaddfbe39e40ad26a27495239cd23c782b90a735490b3031422ca73ec16681df8de81cd15f7f70dd7161b2790218a806b1c2e86c63b868e688efd90d8db552606791ace3504f56c65126ea2ca40d6f691c097b3090f5e4a9a36ccb603074c231bd1a9d55b69ef4a10f4d498a86f41951d0cde118f05e1ca0282eb01d51340ef28fc39321cbe9a36766f30348381362e44bf9c7d9f0b6844bc969180939c1a41783d90b26e7fc19d230405a37d2900caf37eb4c7dc5c7d6e875df172fbd5da4c797d387f486f66f99b535988c1fa88942296e52a9d2ba9f998cf2c979a9f63c91488ed6fee1622055fe1c3790bb62434ee39d59280a431c0ec892c086d3cdf87be5cef1c339eb4b0086e23bf7afe73d60f3985990fb717dcf51c08e464aeb29a9d1a4ab903a9d2bd9d4f4cf087dbd20387eec84394cda7ed1850f1ad6fec0edf9d7f2028895981a1a229e925231d066776b47a5c347c3580f414979a4f7deb04887070062210dbab4f4d8d830744a10762874e691ef087c869bee7198359531fe447015c64d230d4f5f0a5972ff99621f1f530fa7f4ec110366b933b1cad83839211b70a343211e2d1b263b42cbd79fa24936c5fde22f4a59173dc814b80251519a1696734198ee7f63df5080ae80d3e232453a36f68ea4eb3ca06693740fa3610dc3493b406657d5fc19a8bbf99b882a341d79b24d4426e360d2c1c8fe080fbca05ad686b55584d530b963693ab6c8757b02136addc3263966a42ab0fcce5b03e304d15f0440a89297c0db9aa13c9d59de0994b718e057217cb811daa4cdf49b9997393e32a3d4c932728a4b481aedec447e804a90dd91c3f694b8ab80fe846aa89caec9451dc313d88ca4269f4c456d45aad27fd44493c2a947363af165794c71551df7bd0e8057d03d20338223392dc0657eca90eae1c845a0220d80b8c82c40700c7ca0500e0b7243df45294fdc7a0b67630a0df12d87004f4cf6b9c0fc33c00485cf269f3eca6a0eca196a29c706671c479d0416ee72b4f6702787bc3b32430fde218f350b64e0d8436206c41ce749d251c19bb02682fe7386561d843528ffe088a68b3e76faa53e233b3a90b2cee6d3fe53a2791c481d928e2b5d6fc37603150d6c526539d88f94f17c59d152a0bfcadd2c1098562f81ff4f67af4cf9776ad861249536486704d9bccae78421f06425c1148c05c4d102688b8a555c0657199500bdc7903ee03a5239ba2b4e78dd008ddeb7d9cfa813d467eb445f9013a9d3e6a73d4d3cdf9012eb79c8a7eac0926fd16155ba812341c0f68989248b9729f733e279317287f1ef59601f37b1249dca2dea8a06c68c5b6b662ce2d33c06ee9a417053814437d91d0cad509d31080ef55ebac6669fb93d2d23825e221909a2c56acba8946d917b9a8ab3102b031bcbc6dee051c3a1db96b2741cc8df461b01ee33fe8facb5c714ef5b71be6ace02d537070ed6badc4115bc2b390a539a6a3361d5d08af9530ac395d7ae1e82066afaaf746ff3e88d1dd56a216d25c6d3d650907b1e0074ef928839328607bcc930c85098451dc27a3334ec52f6cf814d9660b4831e409eeb868449a8c9c418534105fccfe73187bad9074c393d73d5c6bfe592dcddcb7597b73abeb2b76a4376eb1631ea56a2e5e26a176a150257e1ba0dce186ec4517410f84b5aae1350f79c97cc5ecb3b4a7f7897a12bfc53c68746e31ef9e6b71a44eaac0f2a5b81e59554ce04242cdce7ab41fdb8377d3a91f41612884fd7900d9100549ba4c6afe40d1ecd2cb311d641548d2c845af30a319f6353c939e5079d614c298068fc937aec62f1ce252d1a254cf2b429ee1d80aaeaedaa1ad5a8b884e11125e4d019987c9ab33a9741937093bdb9b5e58981dfee388eaecbf9bba22b20ed43f46f2d080b193a47f335c462504f910b0e43a2b1eed3d2c5cade607d9e58f83843eebeb55d321ef1c6714ff4f3de6289cc330f689dfb6b5bd65b317d0e58a5459e4b0f372a74d4bf50a0893334262627c86fb85d46c1c163dbd2937184f692d7a42f81da12fd12037e8ee2d69631f38495c264a6960389a2f77f815d9e38e2865f9c1da9f07de0306522dc3fda3c049c5d2d8c01381d8ff73e8bd3e12c275b4526640bb3b5d7928fd4ae53544f3541ce24ea6cafc74e96625db9c59db03255442c805bb3b547301c3880dcc4ff0076a661684ad2a6f7797cb9b7bd91f4179e165ba5ff6e29a625259686948fb06656ec13388a4abba90f028c44f0c930c5ea14a0e9ff2751713c1fb7ab6a34215f980ac773e3ffe6e3ea75ac9000cc07291d70452e90b52d8156117e99041e7930c4fd80da66a91be8b97be6495854a9a1b94699b8f9b533222ea9d06aeb3fa51cc29116ebc703f11c17ce03cd4e9f809568783d081417fbb0b92da33b90aa6ee7858e7c3795ccce6d8b9d128d9e1bef18ca55574930f4bc0fdbbe960f7c30bbba190385fa1c83a6e5cbebf04b77cfb98264ba408d8cde360b30b1f641f1bbd335e48013581a4b39a9c135600494c520cb7d1e1ab32d3cb3f541663d0478c234d5d81633cd1ceec50391381a6262027a6b4ae9dd135afe1571ccb0e485695a150961da9f5113baa40f6b613bc63e4f179817d715f203d50412d159cd240e50e497a1ceedd333cbee3e44643c86d0dc89f5752126a87c42cd4e86f2d7f9d8991e4858fa9812b75e71fe2a9aac038259374c5c11918e166424b44a4e886305ebbc3ae336574a5b3f7455aa2573ce66b2426a84088038b47224984ba543e819e70d69dfd5e8e64edc3fdb8b75fba8e210a4aff42f2c0a1a9d4d3f46dd6f43073a145b2bd1b949339a5d2e431bc1966c0a108d8a8b98f07e2bdd04b0c5b807a8ce10c9ec11179c78724de836b21930bd19d18f2da5c95392466481008635cd0150da1a4a132ce156511d912829993673620e45ea1bb267fe36cea7795b19f438a52fbdab2fce33082c28e274bc7f3ec48efcec27c3dff1674191e175d7c5495c89d50e41df932cfaabc065867e6f972a86b5d43477c2a0753afd06c3257d9daa04cec48c250b32d8016290bc5896a6257653caf6db751019d6a353260cbf0d09917397fc1de49c4b19d2f7ffffdf5dfca077f31a41da31a9a4dccc5fb31f99eab61835263cd527d96d00734f3ddbd256bc6dabfefb014b3860c3d9d0863d9a817f12442560775b46552ea109df3a2b063d04fdbd78aa08224b034b342ae8559942c2f632bef3f9fb96e7ab2497fb1b2ae812db80adf50828dd5547106ef8b343ccd0c751cb9e9c1bfa1fdb37e74b2530e9e4c33cb98e41ad6761c481f2a07f7b4cfe295d942835fb8d34054d036766269a32cfc4e938117f5bc053b9e386f85f8a68f49469e09f7ea7930f1f8892e7a651ae51c19e232bc5ad95799c65ae7db10f496d802bfa17840fbfdf8d16ba27aa96d15d24e9c3603b2b90a1aecc02734535cc5f05d69643acfde6da06f57fc285eda2520e59a40bb2b9498bf04697d0d87679328a067e4ee97a847fa3630f6650b45cb4e347335b4f7471bc77fc13b0a9ffe91857159fd861e2df03f7411171fdbb626af7693b20e6b24f04c203da643a5797d3b2ea2c5acba4193e0a5a173039d8f9412173e2a30d9c7988f32278ff01e0748f0bd8decbb016b32417cc09addace226f7777d3cc92fb35d4c9e5b2d67ddcedbbe3175b546555a245fa09222385dcf1f5b35bda1ff1ace869b1d473b75bf1c94d97288258508b4d54a05fd30ea2742a8325888a4ce8012fe8651193a2f005f2c94499b065ddfb96202e57012bfa568d81850e30656920d187d9881c5cb91aafd53da07d5548716229e193c1fb75d2d26567ecdeeb8843824ca1b26e84bc28b58421b068e72728a5bfefcf8b95c4d49c11056f8cde554058545edfb21ab73a022b5feeb8f3dc957e248eeb694af3389661ce3733ba673fd418ea11fd667e4972b98da9c1a4c862308a7c6312a0ad067f64bf3cc4e773ac9c07ce0c8228bb48adf9e91626cd646ab2d4fee69a2a0c93ad6da2995d5728e692b85ba77912c32b49eb744f4c603ab3db7340d1c0cd81c09743b387cc8cb3bcbf338f1f81009ca78e39b5e305dabd209ae05871ebe93c7f8450d22465e8c6aadd1094fe9a993e16026b7b1be5155183b77686efaeefa259651692cd4ff1ccc118a2e2840aa74ecee3665de95a8f3e67cd5621dfe706a3b5fd9a80d043e919b6a51f6033e71b886e8d43fcacf6f38329b8c6300ab4aff34d955c0ab62c6c543acbe7fb75449ff4150804b611593cbdd0f97e753ce53a9284b0e80bde8dd8967a31c8862c53d4e69dbfc9efbe9407f5781a91404287d9e6f3e683e47a4d6961f4a03477b66d640a05781009869f21c56b82ba6f067276bd4fe729b50fdef4fee97263e72113f9a57fcc8438df95f9a7851a754ebc6177486763394b2d5e9d3f5e7c75fc6c347410a71c234ca61ce453b9a69563301916bf15a77d5fbc6e6ae6f9b9949e9eb93302713da7533d45d38520b5cc04992aae8f43252b85c9e47470030272bdd9cef9f4020304fec5b5c72f54762e6ba1e5b9f420a34d54c135b62494c881cfbfddb8994227dc421a5a9208722b435e8834cf390a0bf5e8c0d88198b312dcc5df6da677d619f42727f4ba8d75c8ec71de462c032f6a0c3cac4a0ad6648f1dba48a5edec1522859f265db604544bcdab851ecb542db3fe502a763e321904706788fb14edf1d6549bebd3eb1e4f8e35d2ae02dfe2c1542a9d82c4958b09718496f7baf43d5f956b31807064036fef9fddf8d7b5698d083d3414035dc0c3886e6933a7c30871bf64566a3add04318adcf58c8b5559400b814f370fd0ae65ef88b076357fab528b4fbd1e6645500612ecf71bcc562c4a57538b2a105605cd242d3fff731ffce61a80d22575bc14a3a1a45d1ad142c8879b80db2385f0c09c0d5d0b2033366b28fa9ab8ded6fabd651e38b2a149ba0de5b08040076498d3f8a11ff1a6b48e50422723f4da24fdec0ade4449a5aa9d06cf438cb360a5eaf47a4372f471f5029957f4a9f28c21ca3f45421e2352b328ce8991d98b53b741ebd6e2f5c75b0ae96a3cfc3b47303593d2585935a074c9d1561960989f1b78929d500961c1e9e86f2a4746633180af9a46231a152331590a1fe00d3303d818750006f0f547d692f62c60b56774251368c42db243b602e965712caedf225a125b80f7ab2d34eed2f7afa078afd4b048c9cde96ffb5b5cc7e9e296c746474727b4dafc54f5242bf70a608b2901722287ab84923d19a550428245b797305d38fd68015cd77b050b8bfb0730987922650bf896d68b7cb6f3f4b73c283a13d6fc1967a70e2d9ed95abd36d5e26cf94e766900df89f02ff7081b3b68e1f67b9777a84cbf05278dd774fa234ccc35949c787dabf650e05b4dea86c0458421c7e55ca4129fef0dbe6bb3a21196eb0260b90fd022d0ce1ffaa747fe2937d8270f4883e6bcaa52cc4af6b0d5d3bf3f2ce18e2675fb1f157d51ed0d9e34fe34864dd286d7c6efd0bbaa213f9d3c7680ca9fe11c534297078cf5b301b8f8867931feb69f2963593974fbd320d5e5e809b1b96b6d7849d918360eb750d9b335ae4b3c90e71d4e1799473a5ee477e02b27373d7d27dcf2b355f2787acae67dda8a07590b5ed22664de7d94401dc41da6b7d7136b1807c38ceb61d56be322e1a822a438510b2114e2dd58cc24fdc06466f86744a21b73442f960fdd6b588ae3c375554895ed15a8a3e8f40eb66c47cb5767d36a7d4b8fd5439f357af018f1a0331cd3d4252c2d4edde9fb0af8c561c2c358248d1ef044af40b970c43e8ad18826e62b980add5309bab4850a29dfdd9cdf5bff6bd06b0f40c9016a6e9b92d1b2c02eaee5aaffb64737d0dba3609215e0209165820e443691aa98c14fe3de9ca2a36645fd2526661aa0259d7e36d71ef385032600cedfdd429d845ee009f87f7a5870cba4305ed240cefd8f59119b59f67c68ed7fe199a0ea0bd6ce10480511bfdc88f553b4f6af4a79fc4362e3b8f69636ae6e37189cceeaa65555a26d32578e6c50f184cc8a2f587f900f98a2754109580861f6d3e7a320995f441fe6c923107a2d432afa990bad6885e1a69a46c9de415724dd3765dc50472737ddd5dfa60e3113441b7bcec43e8df387b65b659b235fc1c0f65a76850c732b35b8cb2c86b408a1a4d2fb51f361b817524866652fa53939a24a4038cc01ef90d3ae546bd3491cc60a9d15dabf3a95accad44ac5bc1af5a5234a0e6bf946ff26a75f0ef7998a62e495763a87f89549308036a9b14f8d000224b426670baed5f40bedc3a813e2f1602d559a89cf91e11b6a5c2563e95b03e1ee00b97095c67d0d811b8d8926fd746c11e69ab3e6f8740ac5783fe05c291e2289053b5195d0103b35b8f5c29eeb7427273dedb330f6c4164cb6e96ba48893ebfeaccfc3a0baea3f1c0e08f7418fc8dfbd43fe338249a9f23570fe934bd9973fb3172c3e31f54deccae6c465431789b43c908045150e8b508075f348521eef6aaaba4722a899519b79251689e03af9e3eac295364a62bd8d47000e49fbfa3d8ecdaf8750141647c7424b4cbd02bde1844a9dce2fc1276113cc15674aaa41a32c41c5bd28516fbc58b64e611520bef1f0d34fc6ccf1f33081f7ec0aa2822e095753a792892481bc45211befc15fddc09eaa017660f2f16ed70712b7613c722bac5cb07f08ced462c1824a6a308aba0ae5190bff45cb4de7f79490a301008bedb797eb304a9e995bc2818173f3bc782a6fc04fcfbb46cd35715a2127700c2898adeaa0f178d3ab251fa548c4242a47ea8ea0de71277cacd0fd7a8d049f4400962e39ffe97ed9bf0f122fbccd696daf7765f086b2e70e2c7694dac29e6dbde641896029e84fe226659038da2c5b8a9c7b18cb192768eb4b35f592c23709b37023b34a26bd0e9657b84e0c007306dfcac2223b58ee078ae82f217cb99dde40359063cd7971147f6a189fba67dfab46cdecc1143a3be86b60787fb6515271d9204d803e0e6e15887f995c1a5ea9f91d3d117c3a086e0bcc16afbbabb6bbb446b1cf129c822958cc60f757fa2ea3335dbd5032e91cff4e15bdca4b2f0410d246f132cf9e126a4e8305b9b7360e094686695d452a931f8ce246016d31c0c4172ddc0dd76528c22d8210fb1369076169b3f180d6c0de8774e9e34b1157eb3980af676f305eee8e5a2344d10a69381be829d4b78280d3460494dc67995fcefc3b8f36e8dbada7f53b0cee96b8b366509f6c6c4b212570aadd0b270ac91931cf082ce2d848ef4b5c36ef4445f3b0816933098dfa1c00768f38c0a88181bfb0ce1396092da0fc8d392b97189fc01bed912968d67da2b574e62d7f311a0e11fe5e7b0f5cd2289bd4a6efd1a20ac632319a8e5f953ebda474a1b0be29415be610903b5f8d41283240bcbfe9f70bcefe0b7450c00f3b9ce710f74485ad6a83775b171ea108b91fc44d38905d39099c2be9a3c61d8d364bfc08e2e388c86361c9c3fd5aa140b334bafacfb7aa2c4c0976ef8f6003368f18129f7e64ee85e76618a75516ba731a68ffef4b85a0faad345b9297bd2c79b1ed6cbcd7963d3864d3003c56b58ea3a76ae9c1b15d08bd6865c5010cf75cee4c6bd066c2869844c49ce53b87c3f972fe14b642ac948fdd5e8ce296c92399ea03630f30b9fd505a8510046bd6bd5629dd18378705596ad091a4fe2ad63d479e3da588e0072be51ea54f49f4985b934ed387196fc2c03645d839ab90f4eeec1e115bd36ee0ced3f45ce3fb399afc86d6cd70842563babb9f0e7c1d6841c2b5848a4262c161f96c267a25dab8389f804861507b6fd17c297f49328d254474137b9aed988c32108a7499a561b0a5ba92a1ca4000a66c1bd76617182457566fdf3110951aa44fd728aac1a8946fa96b09b4b7621070b0ae7afe9919aba7d99992213370589e72660665ee623b27b43b64b4358c6bed715f7df8736c15ffd8a7e9e5253ab68be09d785e1e231f45050baa6979a13ee38c1f44fa2e3cc7f04fb9bfa4e1dd51f855cd0e9197d3d9addd4e63bed38b476452bbb2c9188a4aec0fb4dd84b8f082f47314d4dfa85bad2467e7b0215011dce17740aa96f397a30676d4d51ce179a6205821561451e87f3656540a3ee72086559793fad9253d4ed1b5e1fa15548193c83b8b6034f0dbd1c8991a7b35be242ec9a13b1f6314e6d2495b6180afc784c5d29a4d1d8996f8715a9191488c403b6e3a6528a12052886b25737f576b114777c534a0c7b368ae8d3a9c93ed895c45cd11b4a46ef428c782323fd1085c9cb187fe0c215eb57a8a7318f23bf61e098085ca876543febfc4e23775adcd96e582ad937dc91c2aece42bf6c7a00c98e9aa3f83ad862c3bed705dcc150bcdc2e9c63ef96f0dda6d486e88edec3634073ec6aee2abaae6394a600ee97459f086bb6c5d4a38a21e42b0ea7af3d5c3411f30315adca2d778543096436a3ba4a68509878870b4d6b14873823af25b69071fc194103c4fddda0ecb3d79ed515aa0dcae2abd2b5a82ea9652190673655e1d96708a6a77b8c5f767eaefc387f8bc552271213dfcffa77e8f8278ee1945fe2af6089cc96db11093a36a2098edb459aca1ab47eafa1fe0367d56a750423b91954d6f7394e893378f0f5e893e6068204b783eb5e9506f5b953428de6eb1016c732a413400efebf4494aa5694686b07218184d9cb12ae40dd965b47b001c54bd6a34045cc3e263d8491ee61030018ad9af5e6f3b6c6851ed0e4a04026ae0ba7ba4dccf6dbdb1402ade668a5d95d8e9f34fb33a3608c9f4332987d9dbe6678d6a80d9f76c65e7143285bd38a4b80c920eecf8c295517bf10eba01c3c688b38dd57112a6152d6b921b0f78a3b93459e7cfb059d4cc2a5eeb52ba448d7e604319e4e8f759fb1388122e22d2a4a5142e96f71c580a422fc344debea2f939732ff22b48b3ca5256326b17a56c73b09844af0299bad65fc28331e481968c5a02d627aceca4c62b658e874e23a2c9eb245ef0a8241bc2443340f99f31f0198625b31911aacdbc49e8a1f4ec0f93951c6dc1184e2e08d698e469965d2bf0538912e8df6132d693f75a3fc4286fb7779a5941a2b3fd6aabb4885148fb9dd5e515e09b355522a74f65d6b815fa8c0af0c75f545ec01f3eb617c5942bc9d9302537ae65cc00842c5c4690b66a5afeab44d60c007e9cca53f11b9ea8226c78225a9350439f0a6112a43aa004b3965eb1c043fe39bec6afd6c45e44001f034bbfd073bdb225e7ca1cfc7be9c0d78c67eb28b366595421f17db13ad2c3ac7b420d4aa92fc1d9072f18236155c00271756b92f36400d66d89c65fca68f5bdf0b6c29d969867810dc30cbc247ab1ac4d25df919d371d3670242dcd97452173581960249a0dcbaabf0ba6c0676a72021fbb4e796bddb3c24f7c0a3ad0e60f9e24b51b9c8860efa6909e1ae34e59bf483edccd23cdaa03b196c5e75e0ce8d709ed0a23f6338901e40b745325bd68e668f8c243f0e086dacc8af68dc743ce381ea72e0085ba6b850f55b23a4f1309e0299d7bb3d3aeb28c1cf8c93df9da5b9309b8ce4f3b65624f0cdba65d8bf95a8cd7cfe699ff886ba6c6fcf9e6b1bc95c38f6020380602049a875c741108f3374d7530a68d0703e31a790cd98d1922613c45c818617c2482be38822b7ebf38df4d34d86b55953b0a9ea7a173c5e5af3f834184e84654fe9b180355fbc79a55f48156f61ed6f6a3520493c72929f13a9580bbdcc0a050c693c1058d9c96f292f354ad0d77c1cbb60e8bd5233c6b8618bf239d1c916c1f69f6097da9570f678a88f909e16ea2e39a741d35090dba58955a32c1eca270c540fc78515b064b9949ea96c40b562a3c676dcc295f82fbc37908d37d6392a7e45397c9c52edc6b757e43d30b063a6a415d35b8548a0ad3437524e40e7a7bd03331183268e4ba209be2bfe30c252237aede5fc1e4e64c123c1c6c99c6e7e2a343d82d6bd4fa2307bd132c3f5b2491a5e68793f901449cc6ed704ea552e546e4eb2ced97610bb2cd75268def9d74d999f3e3a29e2800722969a6fdf92aa58ff4558b6ba36845ee36dacba6cdd8636ec664e75d810884215e15fe9e6be5119dd2bff33970ce8be51e39013f027ba581926f3fb3fb4d742e7ffc56cd6739a48469f5523e435179451a8e0e4954632026dd1728c685f1714b72c503cf3199a96621ed17198d6ff0b29b4dab2f36224acdeb829543f0a6ef2babe7a08f8d5b7cd2069210d8ce3dc974591472baac91b0dea02a184c1dd147540f034690393dc7183c38636f081422a48bdcf4161180e26aa06a0dd9ce5557ca83df94093fed08e8a3b8f2bde5cb3e54b3b05a5da6726849841afa37dccfe8cc1afacbc94910d2e78e2502405a25eba05eb331175f0cc2e933621c896d46975a8ac9ef3caccac0ef1d01fbf9b75c59a5941bc6e2771cdbc0b3b275cb72087a8a8aea911e4ca44b28c0f40be97bb0cb1e3c1922b219005f1e6f94df469b2bb22fd4fd519cd8e7a22f38f360a76ff420f1314ec789bb9731941935f5ea48698b0c6f371e45b88b320c10947c1959444cbe3bfb65e28c594ed66d8fa88da48dcf6a2031e1a00f54e595e4066764c16faef6bfb4fcae7d63b0a84b5a2d4409f20795005c946582e4c7b59e3c2f3a6f5432c0ae10674a01138f2a9d25e60a025827bdb089eb99a25b4f17852f9cd01e55e18b23ff6d2cae954d2a580902e1c22955f65ca7a8bd82c61a3b85313e65e18c78a4b8b56c1c2d3baeb4755598fca8f8581addd8b8aa2f9b72abfd90197a0f9d66ccb0fbf8e26ea840d16e9fca2dcc39b00cd45d2f80fc439110aba492c11c5efde3919bab33f481078906738867194dc01055cc6633172ac8af4fb801397832cecde8ea6b0ebb15381968b48b97748029f7e3e1b9ce998fe1019f639b751fcf7207c6b6f9011996d8dc60f4eef3fd01150784a79839017b85243c7ad932e70f336dff8326fbbf22819a9eac816e96b8d32d1225c31c92c2395ecafd77e94e154b68713266caa95166ada68eb12912e6d075094d44a24ce1bfb59b6ccea8a0e8cdf9f6d142b20e5f8a2aced0fc27f07474bb984e6ffe9e87e62079136633f1b6132e1861c0b24903eabdf9c444be51fb286149f4d9e9ea0395adfe2be395ea0d47e4bdd92aca8b95df81272b9f7a0ff19ae77e77ab6c2bd1f64b41f773f9f27e4211a02e6472eb295083347e8e22255b198bb78c65ee22cbb8802c7b54878c43e462d8f47097b506099be42a43b5b3c4eed589b1c033385bd3d31d40fcc640d0cb5faf0ca1d21e2bf57f0421efde325e879c1e7e0545266728185beeb3625f7d13f9fa92f85f8b07609387ee5e89b46a04172045582dc7de684c157b57a2eaf993f73d6c6b68021719d2268172a82f6ca7b3f4548b1082a4fd1d96df196029427c1b63b63e4959d4064854c0ac207961a9b66d89bfdee1530e295bace7476883b6e609bbae7fb02837bdccb991da1f7159d4177db47fc0e4a97a13e0678a2ddd85d89869503b3dfb5f0655efe48af7de5ef4274a5a4539067b4115f1c50b8114d069aa7b5130b00aa88f7cdb3b8c04938755d00d8e99a32ae9ebb00feefaa934edda0eae3b6853930302cfc7f1bbb6f0d9e460152d63c04f8430d59bcc12326d4e74e9156bd51d486fcfe7c8eb98b1009e086672580ca43ccc6be94a4bfed819e98174a162475be2c2fdc9c1b32935b35b38e67ee91313a7c4de103911cad564dcb4481bcdc9ef35e33711861acc3150aa88eee8c5255c54d065685d9e54407d2bd92086370b4373221dbc20b05056f15efbfb3cc26a6e794c2c5c405da4e2fd69d31357dbaed4cdbd97bc6b4c1033e0def47a574ff2ada5ddb657e119165f69a0b52cb9c636a2151f70546861bb3c3c0a743a43af0e91834897048735859007cd40d41bc1d6eea42ec0a8ee8b9fdfc30d7e9a382c1a700cd073ccdb4edad84718f6a30e8ee2aebee3ab761a011384951110c4955d918c1ee0ee74368039879821840a2fd67cd21d3309ee31f3260bad346f764d373d6737ec5b9282b62abc2ce1832d2cd82ea09fa7ac3311bf97a7de931b87d861e62fb98092ce2be8f3ef0595b32414ad49f5c7901d9e6735e93d19c014f23ca5308c00b23183a875c04be010f6b202792603f10c2c9a2dd747aa6f1fdb03b0c1ae0f6ac3c964b797c3d8c5e65fde031c0e521146a9b243f7a0349b70d664efd7eac446e2708852a63147ef47eb00684d35f2513d8e62317a087b6d68912d9228cc556233cd3509d77ac1c18cb72f431e6dc167572a880b44d0c5219e3d84a0c113dac88e65698804b5e7e0e59ceb7546e132ead76739f7c7382440ace4842f0dc68a09a634466f45dedf4162826b3e05e4a0171b82127b49b5bbe8e5c8118b494ed6a35a80e7c4402ddc598ddc2f5bbf12ba22f0fb8fed20c34f833d289a75d0a627f4e29909bd158d0b463c4f737549436b19448cda14b23631c41e567a0742e31dcbf70f08eed49676d1337094adc7309d64281909443294c90f27384d603b28a9879549e14fd3643ac64375e561f1983f1c7f718e76304b21328c7656aa0f039fd1f26cd28c0546e3618e1deb3c415f13133034e3442c342c4d2e0effcd23dc7763109169b474183a76e439734b6b51cb5d9bce1c37e2ec3dfcbb43ce4835bcfffbef918310c90e7c4cb2da9c4a978820a9b3dca992502e5ccb062881f47e2fe9458c6eee033249a50bd3e33f4119dbe4a7bc04ce8a94b1e7e84beb2f44a1d54de2290d8c16254fffd27022b3c03b7a622defe2c7f9e091b499f92504fa0f0d7803d6b44707689bcdf3db81958ac519301c9421759c47490d709381b580e4573c3a30a952ccb00c952fd117ca3e1aa7b20336b2c430e627efc27eac7d30c05cb9f0df825ea551be4454691e58247b13e66f69cf9d447c919c18071c87861f7893b4d1c59aa1736b5d2e57006f39144f62a17df3cc4a458590141f6d0561eb29ad39612af9a84eb6fa029289066642e17938d38488e736f2895b2a8e9709c2ba79d612c028f0837530a308bb5c72ebb2ddd57cc814e2bbc9ab4c407002cfc9f61b6c99ad65c032fc25e10759813c35c33289b350cec89aeec3f68e89a31993604cfe27bda6193367b708d4ed01b237a8effe5cc4097b8d17e172ed5203d3cc8988f9130da100751172f4966dbb844c44f0e055be70e61236e67a818d1a2f1c3d5b985fe0fa7ef545273475e2aadd3b3358fb586bf2931cf181eb8325dac629b54b8099194baa516f37065c52aec354bccf9d23ece1710a07dcdfe0d1a9c189632c28eaab05edae4570c91c51e076338d607f4cbb672cfe8163cdfd0f0d60315925ee0b8663158d28048e2972445e65a0b8332c047b46ba0ccd8ba35834c36430e38d9ae98df80db890d52b1e0e40a92b9bb0e5b019efafd5b1bbbe4b9916d12c9e60c4da7631bebc9d8b15a4ce0661a4335d3b21170bad438f0d0e2604311e700e83698a8d396a09a19a1a3a38561258c5c888b328eb172603bd4931492b381dd09fcf8ae366e9cc8eabf23abee4bb34ec45e8baf1bb1e7b48c601fbb8330bbcd161dbba0e749b3b9d6758f7821f46c2b2e9f90d4114cb2c62e5f04ee707bd3e9637ef70004524b637ac7e834d33eeadcd963647564d23bce58120f8b3d386b297d9742c250ec1243d972ee4621cf2a9cb87ec04d11b3d7fe1dfadd24dc76cbb2bbf854167d38e6b4f321796f2084855f94c172b0f6573e41d9bb2efb2f4c8a16d7edcca264b092af22ef3e2acd3c9014a5e02dc7827d4edd2f1191b9db2db84b557336180611c6432c8a9e09f9abc4d47af74fe121e6d786a20d3c3d6575b996491f89cc057953bf8db096738a6d4c0d168a2d7923114d641542362dbc55e6134c194c652038f656a714f19866036933e38fcc4d71679aaec6460b82ca784e2125ff9e9b573bb0b33515683e8f7e0fc0812ac051806e650e46c6aac6d8ec462c57d80ac81684b856f83c1dfb4d45010d3524a810a78771218d8d91a7943e0d8a4693a8022bab29aea4d07398f406e70dea442f4255403f495f471c833a2f7f32bf01814295511735d1a0d435bb60adf2cfa6e8d8d7376aad985795c3c560df3cd2a2cac6fa0e8c13daa4e57dfce0a8a0c9a2c0ef3d3c28eaee3b3d4c4c169073dbcd5b353ef11dc4e6fe39cbe3023cabf224863e9d234e18c96b8fefe982990467d1d05a30caa355e37f1d3e710e958300028b21a9db23582c0b4e650bf977412cbaabae30ede496965f1aa481deeba127605f60894036921b2710fa13bceac903453a4e6754283596f57d0eccd859a9e085fe772547a82c8960b10d206067402f7c58161d6d446f5537758f1024f726a1b8230ee2a54183787b38f9abfd638b7843671c07bf9d9bfd035dba219952f04af422d995f7dfd4ad2cd339d43a621c8c578028b64b713ca4fa79a80a97ac81bdbdd603ae9509ca92f86e80c6db20cf1247a4906a8dbb761d04baaecc5fb06eaa0d58974c5d22829398cc1e5b51b5b078ff373a39f3da5ce8e263c9d22e80773e03095e5f128b0726f91e86148d844e06bd516a87acf4b37a4b7dce21b88dcead033c81415d8003427f217381078eeee7e68add889be9f72babbd5a784a6d19cafc3478137c4aabbf6696845eb36b1c09ce9da734d4ea7f914dc0ad2da5920a6c99dca4cf71b42a541dada1bf6b9c85d7ba60dd7aa825181831685ac79465afdf48ba57aa290fecffce9280b1a992e0c199f2c96418030954c420281bf2f4daa7fc2b0c8ac16b4e1f098615a27d8ef503c49fe75a608de637a4e33b0a64ec8089ad5f5232b3ff822f8b4e6ced5451cc6fda068d6d9654a3cd010b7e587e297da9f99524aa0603a7238ba17da05dbd27b0abe375c7589c55ee40020cfb4bc2d7e111981409553523405ac27bd7b1d2a4ff7fb6fc05e539c75631c19345ad78cdbea086cca5376231558675e567a4d52479b69385763bc0b5b3af1cd48585289a5a7e8b7c5b986a494d008c3ead31355957e66d78a061f9e6f3a976dd5022814a2110bac86cf74ca6babf36230c7b9ee951b1b76a0d3d62886029a0480be119f254f6ac53081a68c14c976f371537df82899cb1b7028fcd54b8cd9a66cc2499e6f85520b30c293df9d440f24174f1367a6e6773f462ba8b968efac13216673a722717c051530c610bc39b11a338abc23ba26bc86f0717ad1fc3af7c339ad4177c64af0e6dfeb7cf222a7fdb1695ce66d1880c8f5eccfc20e83db17520ad81cfda10b880a75cab859881b45f5d38fa075834798a8015040a578120d7e5daed7639af993b172cafe5d0a4143836408aaf8b222214014db01419e17d8b5e6940504adb471cf6a5a5f83c8fc4d9942ea0ed2733b110861e9069c6e34dc3577b334db664a104270fa0a82a0ae6f100897a31634971e39c02fcc813be4896f13353302db92f958994abb8a97ac89dc9d47cd17a20c46b89efebc468d666e96ddedb7a2c063982b29c9576ef4323c57f787658fe04a0c2da67429de230ce0f5ae5e1f070f54539f24dc3b3b822eeb903d21ec90a5f9e0e29c7a10f4871a33c1287d9efb50400d96638dd443f9606f4dacd013807e7518f2f850aa75931a534d9787b1552a61f6fb2b4be6c80feb8e1de921bee6d7664a0c3cdab7ec705e5d4ff0a4525c47acc9ecb591264426e6b438cf63c6ce4512efd51c8e6771a809889a44a46727e74b1b46dbe2ffa564b82bcefc3be6948c9b67e60ce6ec3065477d25b6e865ee1ed8d6d916171143c21a822c99ebdf6e395b9eb1f2c02f14f45048285b5a488bfbf98ba4c25e5943a31c7d675bc3a2cdb40ca3bc5e54c8d8590b6524234f2a84f23c0fbfd6c0cc5d1595306c99b70438cbef02af40f3bd78d57d947f1c6689c8709584206a3bd1d28f6cc22d1fce9c61638bc751d1101f5ee50642cebe64747634f8f4c7d131f836384762436b5f2abd2955404166b9c1166e3f934f4fa52e46562085e182df41390f5623e82e3d00d38a44ad5c9d255b5b616310221cb69086e0a31f6e517abf24986e8178b088bdc7aff7707615b694d0b5476478f2be50aeda9601ad054c65858ee6820f72e320cc1a54d3807ecc1e30de34508613c8de8759f7505be6a7fa528f17086e5d7b477485d88c3211b9258b0afa879b3431af08828ed3fa6ac750e3a1d2a7316738311ede46062f601ac37d6194a26b2a73bccadea3ac402273dc7979c3319e9073eeb13562183560c21817a973cfef61b92bbbb33232bf95a0251f7e9dacd261bc90d2ab6dcf2d0f692e3a0e989f8380b8cd76382187bf2083717bb43adf9e7a821764a1713876c04b8eddccd510ebed437742029e62a124bfc90a78a3113b451bf4d1d6cc9bcf8ea15c19be9edf771fda8e683ab2dcb8889cbf4b73ad31922ea12b2978076288d086679375e9c98d2efae0af4612bf854bd882a5c2fa0eb35dafb1c5d1b9d0519110c76ed0229a19976727c28a5517ab4a1085c32ebf592180b46aa908567860189721e313ccec1a62b19f30e7b4e7c40dec738936878bf16a7ec9efbb3aec0027a2554f50a005e33748e8467334df1088d4c84db42b61a5159b68acfc783d54bf8a520e5848c0f1166ca421457a13f5d2bf4a44516d4ec031e08ee4577b19be026722fba8b6e2237c1bde82e7013b11b4931693a5579d5ad540f35f5336a2f035fd0407368bddcef87fe950fcd0b9d3b1a913d44c1522f1da202ad5d026268622d3dab9e9317329c049d4568835c9d8483f5ab3afcd795bacb8a5dcfc9e0dab57aaeb140d76d4778b6d64dc87b2465914216b79298f0f715349734a6f18e3dce9c370a2ad847c667c48a3ddec072a34ab603f3245218ed5050cf98801b83364204b1d994eabcec7b09c564cabffa9aa3298dbba3a8944d0c940c8d4f42408a2ae7e59f30f57fbe982ebb8c6cd7792802db38ea1e33389d5464f63de76c72ab1f4f545069de8acc5aea0515bee2c97969dc01675457f607044a82d1cd891befe4cda4d0da1d41cd8bc733cdc0beb1a793149cc87d62e16fc23fd9b6271a4a64c00819e491458722b12033e307bf3c34304a3da7fc1ff053cd73ccc4ddc706e2363867de8a506d98e12c95912115048fdd662fef64eb656e05303b0587d273d80b19ad74ae0d894c580b94a2ffaed3590bf67cbc3df225aa68c66cb04794ebec5e4292644154153be313d4f514467a5ee70aa63f325365928027aaa550d92dee6d83af92acba9c1798790e49a59bf6ba57ac4ef42931afa50b732315d583c96a5702c214bfdfa0845b243a556ee4fb5ea7e703c58923d56f7115a2ac9adcaa369e1d40b8fec14afbf84835f5e7a60d9a86763afced0e26ec25643223152cb58a654f65ce1e19e8f37a44c530be9513e22dfa942fc3cfd026a5a27736c94e9375ddb04a5605ac22509da5b0663c8172f1c250abf0bc3deb419433947b4a710b22a8868571446c362a2283a9def659d7b84a0139e0e8e9c500a191e0cb0e9e2c83043d47e844430870ba65bd7088bbb4ae01bcddd7d11f4406952e3d5b8c5b69dc5c31fd9328c3db0ae80347217d8aa05e2bd3c74b1e36d2f3c20457ee64166427575a5357eecc7369a7d11a6e284eb2727ea9b3d13981ef2aabddab8802ee79eadb4a7fe8a972d8394b77760c5d14841553f431ccc5e8eeca322a9ca92f3dc5c0793d344dfa3a2452d593c5583417fbf3c980881ca6bc6704c2d64585afdee34e96364ed485e6fa368b7cda2372a9111c6dc3103ede968ac5c04061165509095b40050c776ab8364f3dd594e386f1c2aa601a98a53859e696dc1367893d09549ebbdbaad644c5b3ea7ec99d10907aaa51915b9cbb7122baf5e3e7b2206f41f50ea2c0d713b8a1e37af6baaf9eb6b5c483fe86e20e5f4fa5b46534e5d94942437e7182bebcf275bd196827377215534d2e364326f82f5a95348a3ae3e4eb29dda97f2e1ad9c95529d8b3f9713ddbead1084de3d13c6c4b825a5820d6b87cfbe2d6b8acf802b2361086e8bef4695415f7d37b2f306ec9d0fcb1af4e8afce6804d155dee7c5aff9973d930ff6921b65393c48d7908c41da7df9ec9320bc0414ea152dd65051887d18fbbfd0a0ce655aa8f0ca8e8401c1db5b0d70176291bbfcf90478f1cf4e31f11702cb0c126c36fca832190478f50f40a0680ff1a181bb2501921d1af4298b6d7912f90754b3a1c6b9b6e015a22c3d5e77810e8bc43ed1d032e0ed8870ad20ee70ee9ce9a38e7dcb68d3990273e11e93e6c4875a51e21a931407d670339f860ccc62251c4fde3cf88c3c687b48a52b27bcc366ac12ababcd7833f03a82b41d2b5f51ff637534f4baff3a70b16c3b715bbb43b2534b8dae56cceb597a64bbb45b43548f26e2d58a1ed19453c22935392478155cc205ec469076ba7bfd3c5626d325c008c405fdc6881a2741d6b7f082a82371a983253034d36e92c11215543723362a25a5be57ea0423f453189a4245b337f1408a601c63f7d947ff7498764d6a19b00e2ad6c820516eb760dcbd495abebf846a8cc00ca9f52aa80eb07e1d2ccaa9e6d5646d87b69d586984176839160038378ffb5f53b20a1712c6059aceb43bf580b4b590854088182d2232c2edf0f454532da5191502e8787783b48fb13891d50f49899dcb049bc595aef23868e70677db8768d9220d59239b3d6d0ed2a03984f4b199e03b4572f9ff355e764b9a585ca100f2b2db441d60b4b4aa13d8585a90a8034bd8fa9f57a3b6bcab48c5e179dcdc62eb425ab2b59a60c58853f597f412bb14a0dbcd9c1466fc86f6c119f3da240ce6c4a146b72e22b24d47bea56cdbe9c6fb6dc7eb9d3f19c19f6bfa8e5c548d1f141942257a6d3cfec5d83fb2376a0b91d350598b2ef3ef752ca461b006c50e866a9bbf1cd2cb5ace300f52862f9a3701901484bc2161405f0d3f9430133f68004f5aea13b6ee3652f0e3c8bf9fa2ad1799918cd6d046cef39e48a3e142c5af86ddc557b4a5df89d48f860fe9e612bc25340abc5ad7bfa6e2da05c09827da2d8403b429511c9a80c233377fc1708534517fe69d78e54b0c6b6c0357ffc1dc7cfa7429f74f500f41572a48b01340e045a2537a55c30cc329b0ed5434139483b32e482e88bba15a76c5cee23eb866a0d4409deda0968062fb931aa2e8e94b18cd9cc76dd3fba0303b3a30469f645e05b537f0252ebd418355c137eddf2d1d80b47612e0104813092bdf7967b4b999294018f0a030a3d0a4a3a6623c87b3a04257b5b82bc282227d99bc95e140b46d97b0ac5fbce56efb3e77deda182699191f933b30703030363f35ecb6bd988ab21f8ebf8b749198ff560129aaff92a7e6fc599b146a41185ba6ceb3796493ccfac3efccf2ac9483a770fe458bc3162158fd0241e8a425db6a0ff07fe8d499c2685597411659cb172326305776ffd9005141d70e1688522274460586385a82a55e44025c853f044464a0e34ca70f2caa0428788112b8cc086a329986633892724c86246822ac880b20214b9bfde1304d145ca152629c801892e6285249ca02266524a29edee76efa7ae3ca36454353528254388900b8f8c244ba360e520830a4c0e2d56985861a58b2ebcf0ce57d58bdac44dac05586badb5d61e1e1ea40e8e1360fab3715a76045ebd9100637cba9f3c88647fea59ae823df3d5fdecc8d5073023cd24bb960472b71ab21af1243b1a23a11876980450bc5c88247bb5b784aa243bcd9ee84db27a7def02b5044be95cb52502ec3ada755dc7391710841e2de60412c59c138b9d777a735a4fe6ddd1567d7cecf6bceea6da13ad91929466444547b2696baa01cd9a5cf9c0754cb4dc4d9b338f71347ff55f249c446b9ac738aeb9e69a6baeb9e65ae6316b232ab2d5239bc72c8d2645bbd1ec6cd634abf9536e2bb332242b4b52ca5d6dfea2b58e7051ae4e949b6af589a371348ec6d1388ee3644ff2c8f2a47963495ecee6369bcd46a3d1687636b3b28bb1953567b3555bb57136ced67291b37136ced6b0398be1a1a79a24dd3d991be24b003eb257cfbb757420e74aef2c6d7302d39f9d461d8f2079a12e57a77514ea729db97e8cb5d54eb55493d37e111226955c2e41c2c8a492ab97fd5d1fd0550ef397fdbbaccef128a90733bf972fd7f2f2e52c92da5d7cbd7cafc8d92c34cb251c47cb9a3977cb755eda2f6dd78dd7deb7d9bb2fb9f7ec839dd779f62705c27c472361ae9c58760fd99f13cb0e0152f6efcade21fba535d5946cad9556b94deaf6d45928a545b5845a617e00e79ce1d3e00e5b387429bcefe6abe4c35e0c4cccf8b561308f63c6da24cc383f233c233e6f9c3434b0a083679bc20dd5305bd750b9c9d22c4d0526db448b02d3bf5772d952b41e6fa85ffd4d6e465df5044a6e2f0ad9d3529e0c0c4cbf9b79cca37548b9cb2e29b7a579ccbb17e356eb9f24797868b9bf9379ecda6c1d91ad2bb27547368f5d1a4d8a76a355d13c7667b3a6596df694fbb999c7aecc5ffd17092771344ee6b1cee6afee9eba5aeeaea975848ba0bcf768e1e8d1c091e6d17ac8842f9e8f0f0f0f49fe7b9e2c77c7bd7bf5dd66b3d9289413a068341a8d0e9df0e5ceeeecceee6c66797265d65e99bd3259ee77af7adfd9bcd5c278769d4da7fe24ab6703694c14aeb7feb5d6729d779f06777f45a1133ca00ebfe7ea2a88f73d0dab939491a9b6bbafc323f313cbe0917e0ccc4abc5ee8b556eff33a3a5346e842d704b4de87c49f0653efc3d56a053acccf39c10f43219a43d0c1f0f3560dd53018fcf33b4b52aeb65b9ef529c8ce50b5c1fc10d153ea145493596e4d52d5aa26bf34296bd20e35a94f5b1a4a2e2bd494fad4647f8feca97ba1daca3555a653592a53da02a617fcc0d5581a89c14f29a5323254466684f929ce8c6356b7c9d50886e2cc9cbfbd382f2380154c2bf582e9df1f21309d3f1bc094931a03fb78210a8a34728c4f1ad891f002cf2ef0d8a575c52c6f4f9639cbdb01159eab20d7470a4f9f13caa494923e38afc383a787eb400d5cb672b723310596d2c3c4a8093c76e191e9b7ae2087a828010105a66f23cfa8a1a335f28c52414beeaf4fbc70e1a03b0a6e60752bdce8d0a0da626c42052e3a2f5db4bc3071c3c950c1d3f03cc9071eb640e9b0065414e51454c08045152860706a2d544dd87062e90b4815c48d9615a2274015a040159ec8314f40f7e67a2514e47e073473ffd9da821169fe40d05bc180e06a2c3590bd39497082dfa53b43f5ee0c351a473d3e4ca9db301ea18ed73b769cf5e94ece1def81d2254124c1449592122f4865319bf801aa062b7cd0c20819be33985c272df7a216a47c31eb80926d062f7698ba6284851a467c5563d8f0631c91dd4a9710744de4b042a882932a539cbadf6268d15b0a33327946a5b08513a25b8c30686c60ae58b9d72bc4a0c948f185d125cc21061633353c80548c11d0cf8c30d4a01103861a136400020521a274600449415e450a5c2881130ed8aaf0dc5618151e013a12afeeee2454afd548ad5e6bd74160040fbcebb5ba7bdf7b7d7a789038397291ce725d576bfd6947207976dfd5ce7391f0e99b5db9ee865dd8ad82e09f2f635b389479166b66d6236918cd246b7efeac91c0edbc077ff5313fb10cebe78bd0306bf3f321d0301b2dd88d9f4f42c3687e3e101a11d318b9218698849678432436c45a53828d38275943f3b386666686878c4872f8672906c6ae7c7009c1fa81ceaf0f2a4cc97bbb7b4710c9e93eb060daa21e0d5dd080a15e7e70b9971078d70253435a38712aa28a17685810c11110371f7498b5155da2cc7441c206852338c0b4c29214910b18783284530b58b2f00188af8c2e54cc387591627d6478218a71f23203cc921b8a6e3a287d6134a395a06809199c5011c528054a9367940a332c3a4a39967b0c5e3dc1932e9a64914494115190af6185082f5b3830440f545158e1dda2645a402d14c23a86935b6f48e0a81948610b29328040873470087226497051f464898614e45e6e52ee4d88ef16066d2a3734ba2d63f44c9e5129a0b162a1bfb87feedf97eeeedf577edff7f9fdde9f067be3edbebc7faf7fd74878bb3bbfbb35d73df875df67bd7a4dc9de8b71abf54f923c3c3e3e96f7de7bafe7ddf994e7ace30ce9a8de2aff3e9bd4ed69f45bbff73c8b8fbeefab5f5593fe5dced66facd767bee6bbcf7c51f2a5a70a1fca4e67f4090f3166add69f73b7ee961a553bbf0c3541628980404215798c81e957236176211c00f1a9958787110940a056114200a5709242458d272886747022c8a7a4e0840d528400634b9077018246090bc69892019cc20146013b4879018b95da19523c80ca0b3734c208e2692acc330a05a95abff545ae8fc3d9e4198502194d28e5a0c99f1f968caeb0420b099c2e2802072dc040820a13407db72fc6b0612147029e3869a129041de012034f0d4274c992440e538cf189b1658d2f60b8f1bfcd0486153460706181b146ccddd2c5cd120fdc9494a0b4d8a00413354039b941ca16a7224210c6161f64965e1cd7050da3345868a20a0b2743f8e0b445104c3c59a1c5c745ea8c700b931b402ddf423434fb010468d4a68061840d1853704f3794669ce39c58b9d3161b56a183b1830dea1d9867140a25601de193c69c3e2fe0aee19c15a0e0bd47da3f2bcf11174ea6324e9e5c38792283b4e6ae73a7270a30e923a479f0f4008d984e14aa574fd2cab4032e777063be668c47bffabb03779a3ca350c821f70f13380a050ee46c543b26fbc7d0e9fae0e6ceb3c996e523403a26f15e2c93b88b4790782e729fbe5097efc38e306c067cc49178bea3eb83a763123fe259e75e68927327fcf08134694bca89a5fdcf9bf3a7f4ccd1ccd9b7424a3267ddf581d5015fc867ee5470fcb953bf89270668c20846356001cf282664b99c4cb0196525cba4c56650f5c69e266bad3f4784ec0bcdb9c33377ea0be1cc9ddafd5c7d3c9aacb6e461adb5d6fa95e9de7baea4b95dc775b7b345b8bfdd2771a12e5780bee3867163120f5da7de241f72336dee670593f891e0d4e1eced8238d18a3468ae82dc6aad6e213a1b8445aa512ccfd5d109c3d2e0c5e619450314a5eeee5160c1a153eadca3a88288a79b2888a2a1890ce6194503123febacb3f57956aa010dd7ead5cbd501341c31776828c17ccdd05300bb100983dcd1dc7d1b1d75b88b51e1f273a733a6817b0c02dbf9b837305fdd4fef759aec2891d81948159856e5eebbae6c59eebefb6ef5ddd32f0deb3e4c9feccbc8c8bc92fa31bf24a87b1e1bae0f93edd8447387270be6be3ed89de7ac2ef04c9eef2b1e66e09212e5eefbbba7b6a6b598effcbbee7b032dcc58cf17d1fc81f99f9f010ce0820bc6f1e686c5fab2fdf28319e7dcb11d78f72bb143b19f34d93d28f65193ddcb884de4afee63c4e9dd637006a6b4d6b0ef63585d609b3cf30e18d8eb76b2c00398c2df77df44de1d404993dd5360de683418cc25b49aec7e669caeeb3a5617f8cb0b9019a7771ff30b9080bfbac70fd4d36331ff7d081ec32ff3314f44c67b25f565466f241213d3752ee423361fb1d913bbc9dce9eed8444d764f6b5360fad4fd8e1870b3bac097128103172d6b04b90c2d74c19bd569e9eeeeeeeeeeeeee44b8bceeee7edd2b57adf5cab977d7bdbabbbbbb3b6681b657af7ef6e32ef564fecfc0f4eb735dd77d77764cfe3530fd7a3deb7df5031d0c3b6c3dcffbff7fff7de03f284449bf36cd47c7dd6b9dd68ed92a91671299e69a100e74e431d3cc43dd6b25cb7eea6e9ffa080237cea65e147a6badb5d65abbd65a67adb5d65a6badb5d68669e1aa8069139d4c301ba0734ecf9487070aa40a0ef3043875ba7ead6316f3cc3c3c9cf4b8b7b5567777a1ceb9708af35d1f749ee34c224f2a7966b1b462e95ff63acc55b7f67b0740ae40c798ddab09e16055b3fdb0df1f26ac55078b612be75d2f9c19d50c6b8677bd3b0610a5b672def5c29951cdb06678778c6a39ae3ec8d57a42f523e71e04c3eaab5a2b576b6afc6d6cea0d7a83dedc545b6b44d572b5c39123478eda3da84387ab95e3b813745cc059cf861248dbabe568e51ca7d52279ba0f6c210de4d3ad602a9da1a9b1b1d19a372ae733a34822d17cad2142084f1018c16644024df60fa0aa047fb58c07125c1367e67090442e29d12d4738e7cf8773fe8c3ac23a7f74c2397f3a5a44892811a593746fd53d0886d686a1b5206bd53d4853436b6cc29a0fb85cdf6635c486d28e6615c466d53dd8ba416fdc84376e6e56432aa55dcb02329cf3877ae52891bf888040c451a23a3a2572e5e0c09123c49123478eaebb393a4271751fd4a1d3e95410ea545041055d7775ac82fc506ac3081bc5432e7b9e60f08909a26890610a0d2c7c431ca961bdf092cbdae5880b6e87a8a32b90388a8203474db68bef0dae88950df7c4ac75d403abe689271b474732344836f7a84938d33551ab99e10bab4a8d66862f5832569cac5c99c158c46028a458334411c644f124330312186609293cc3147055b3c5cc8014864b14c1cc00821558b48a9a8189cd37a45614a2e10d810209e4e1b2bae1bd9889a6ef5a41d30d8922498a3be4892a9acc10a7a620628634811425030dad2a355c4e1c75716348d32c862b32439cb8000d91a91b02c3e409a5a50a680315f00613dc27b80ae13921051c02733c8029d072c3530cb70b2d1cb8008d25749e2640d6726ffe5c191b75bcee3c60edace5fc360f4f9db7e33ccb44dd036a64ea00238050e38c1f6ca8a212441f734e97c8c7280d2028c0455562866268e223778f3146bab793ca35472ec39b4594d10a98081cb848dd50c2035d782087ec38cb103544f1820623badcee19b5e25b84b7a506275cbda02abb63a9269886f7e2da040c3fe4103af7bb8532a542eee7a056fa3c1a362bd9b5fadf2dd93b60941d43a1514568dce4eea89049cadeb3a75ffa86de5a3898a68583693a892a65a7416102f7f74d904284fbfb26d8effee27b8b6a79461511c5f28c2a3aa2355a6bc2b4a9497f7faae42fffd9cb415ad5be24c8556bf51e045fc917fe92209f2af254f18c42fcd5c4b2612ecf0f81c70a96299a3551f3fcee1b501bc0fd1d5d7524a1047f31e1cfb4cabf65fe4de4df4536dcdd03751591bf8a30136e19fd4205a6fe49dda10fb8569a5c31cd0ccff4e9d33fc71994529e5cce269f31d25f77ce4e04aab8499a5c4e1ad03710907f81230b1f15543abd67adeda20733d79f39d75104d0820f607777f7044c77ef6834d9fd6911f7dbb0923a9549cb45bc5a6b6d751f432dcce038aefb56cbb63a3f3aea386bad753254a8b53ee5acb59c3ff5fad49f72d65a5bbd1e41dbabe5baeb8554f27c1f7368a7479e21ce7c09993b9f0655eaa8d28b0134f97eeb72dea7424d881030bc09e1999a7d3f68b55a560c9954f5903c5ea785836984f4ab5d0403748c2a953c747068c28c85f87fc1f4819a2a79ece2d657aa5492995b21a0835afeea1751a8992ffb604eb66f6d574326ab3a6333f47072f7a54ee6225b1ba864fa42b8b1e98e3eae9870d65a198c125c70194635b1c1870a186a0b14d4300adce519558402d903a6311eea77e68631639fb27822f57d8250ead638093ca48611e02136c83ed01af244e9bf2d60eda87731b7480b935cd629ccadc10d79e125abe1c5962a5e64c169282d53c4f098a94fbe1dc501a32f8ddccfa387cca13b6e920647ae95521c79cc948eed9369185c0e4ce4ea44aef786164ed40b34f0e45a69ad9a69e883004eb7c917b93e9692ab132f7275328ec8f539e858cbea1ba041f0180eaa41219411135532c0b01fa40f7261d33cebbdf3a7a30f7e21b5ad2b42daf43d3a7f9cce9f951275dab6bbf7ce7befbddcc39426e4fe3266967a73daddb526fb7b86f06c585fa1334b6ea71a074874ad467b6a6a5bada56ab6ae9292ddbabb6b35c9637dd42ffa554ffda29fe45e4b2aeaaed51b17156565666528538147842a00d2dc62d9483c7b28600af39278befdd5f3bd62d9cf1db98fc473903b0a75b9c8bd63116e044521ee91d0867d73ee7862df9a9c3dd5303abebb0ae045fa7d9cb9eb837515a44ce2b9a499bee78537cff963ade58ed83979746f3dda4d1a4739ca71dc53ce729452ccd14a398ebb94738e8634a4d57a1f8a48ecd35c3d0b7a73ee70dd21f1825030871ed8a7f98890af82707614eafad63029f026012c60ef672ee957179ef28c6a61299737aa05a77cc3bcc450c65f7325a3aad4f26aa489aa42953ff0c622f47621f71ca661ef6991ef8bf87363c97d12cf5c11fadfe86312cf762c7bbc5ffb160e01cab4a79afca07b5ad2dc516bb9db1437b6148f95beb986998ae21124378f4532fd24496eae42f5a97884fe9c3bf6c1397760be040c8462a98152496942dba7e211fa73ee00b950777193423875b6e68e109e3bbe3ad27f655cf5bb2eb2ab7e2795bb2dd955dfd52337de4cc529d5245d15605ac975ea435aa17860d85a8842ededecbd968b6cd23670e576367c827aaacae0cc577152c9fde0f41ee4820069d2fb9a43106184ec456d80287b8fa461e56c12e27dc9de83e07d09466ed97b121ae6d9abd39329d3e060046ad2fb9282b4feac615ed7d1270debecbd918ecd316632990c8520ef9194d0b00fefef724d35cce763efae02d0f7f13ec622369efeccdec7d44d3e3196f8c1c40f2a1ce9cd0d05f8a6ea86aa491702f7187bc69247fe3e46fc08207e4ce22700f1abf5f77d593ea9eff65135e933e0cee5b55d307eb41d52f88aafe3e4bfbfdffbf71a4b3c3396b7e54f8ae5b5402c697279a9b23f00c4d2c594fd2b104bd795ecaf23969e2dfbeb108fd85194cafea258862f9661ce918394fd71dcdcca9acb8f66e4ef1420e290945945164b3fc42129250e54f6abd4b0a56a6ba5467432c511c1a41b2238055c6ad2ff4604692e11640a8b9a749c996f88374bbea972c95c44455d931f9e8188152946c35e76f4f054699519b92265ff1f1b008d6345f2d706a25893fc65abb5b786757658ed7b30aa3f80bc3ffdf173b500200fd4b65a3b5bb2190001715558111291061b6cb0c1061efbf14374d12a12017a201feda3aab5c78c07a8dab0aee896f3fbbb64d93bba9901119564f04023e9af0dfec7a84483df60e4290297558326d7027e3c9007329a90c1ff182bad243510bf277ff967207e357ff947f3cfb104ae4dfe7af9d32f6f6e347a73cb522e9a8f799a6b4417cd4a00b32f2b4b0fe041d088e00098c05293e97f343ad5f456f3e79e3828cec66569d827d53070eac651358cbe3f57e5b119d4c9b2ff4d0258c02dcb73466666eca0f30c8b0ed9c0c002452afbd7b0ecd0149bb4aa1996cc47657e55e6c7c4fc9e989f14f3a3627e564cd29f8a5fd424fd71a6c09f2796108422fdd2b2267d257613b18b9a346a922769071aadb54a6bf29814fa37377ff97b9337de916de61dcdbea359c34ad72dbb6e0d6b1a4d26cb2ea900ec207349dddcbe8f32addd54b9e81812cd327dcab5668756ab5aeb1806b3a70a556d1ddb51a72a55adaa5fa03251afecd3979c025c7eb4fa24d62b3040f895a7266bad4930602e1f20303efe492148ca004845f297f3987db9b9796c839af7641b5d521efbf1fede91c734a8481e5302645402e44fa04767b8701424c5fb0cde351895fc1895fc780d7e835188672002f9cb3f87155c52290d4429f6c1fb167c7005825f574e1fb4a0585a4aef35726714154b1949676b2bf87d20586bbde1ca5a6befaa5e9082f436e911eb0b0d441a4457de5bd1f6082234e9b5fe105d447e7cb4eee1ff238351898bbed0a4494a5190923b45045090824eb04134461441193c905f12d4c305971f8d968138bb47d9597e883308883883a868a4490722cea01f2480b5c863f516652f92cd6a0d1b51b9143d4599c18509891a6c48410c445c4690020c5604f9eb20012e6b0d56dedc3254c3cacef2d13c4691fae59f7495684f1de8464dea507fe9d85379968e8534994cb6c291376967f227504eb69943e956ea59c326cd9b3ce671d1b54672229755ddbca5bef4a5291ee5a3b9ea5ba9e2479b1fedabd59a747f3ad62b4d3a01aae07256d55a95c73e2af3e5cf844c8aec9f15d9ab5ad6445df4d16aedabb5fa546dfe556ac60c1045194e54c94006511141fed1b27f540d2b6b2dfbbbb51fad63167c4d9f93ff57f3ff9efc3fa82f8bff27f54d356c464141cafedfedabaa307a6bd26b2ea9a79b5bf6fff1fed57694fd7f8c37b78691e0926ad808954a79ace53a5521fd10fc0947914fd32052007a74d63171469168149ad4b11d748932d126ead4b019a5438d3e756cd2bf5e94e948f392fb3d4ac77604f5fb947e57ead8f73b8da961aedcef4d4edeef5dea451e1b92b246ee7feabf17e356eb9f2479662bf50802cf5c86fd3233f67d3f0bb95cad72198660bea0cc9d5e0df180ce7ab4f4fb93a6593ccf7b0f66f67e49be6209392a871db25391724103e06f4520771bed0b129a658a882d6bad15046badb5406a9836d7a41ddfdaefe182e9dbb2fac85d3b7acfbd5067dffb6a47a1aefe37ba3ec89ca5997b6b45fbd5e66a71199526571e6493f3917496292297d67affdedbf180c0a3054faeb5ba094d72ed09c34853d512ccae0b35ead1d26eb9da7925963967dda9bb8b9c3b75a7eeee9e8f25707f25c012983efe49c1bb9d8f2bb8d64f115e5926187739c04053b91987c318a24ff1048429a0588c8316ac06418a5bfdc6c169864ed5a8fa357379310e24b801c20992de7bc29be1f00301f2843a438c1d782e8d89306cd14a67abe9082ea0f0c2c31520bc58f20117ced882454b0d2b6c11b42537962f8c72b77b14b8d49945e5fab55e1a2d2f104d1b87c32b80e05144503f4e21f70d50396ae6820d21131bf65c81cb6a39cbe32d0d6924cc3e4de62519a8b308c0a93357421dd0bcfa20a10d1bd7a803024d52160b3f4d63fc35cf62b1582c1616676689345fd33422049aa4ac18173b3a609dd5030937d3d8b48e926968eb713e0735a247ded3efe9532846584f5f48c77480c43c7dda840746a3c3a22ccaa237ca5eba71637e2fcd76ea98f8d4b696eaa9a6ba31b1083f67e0b2a3644abfa324f514a586e1a79fa30a6c43e64b9d4c6f797e0ed1c5fa9c9f194774b11ec7d7dc125daccff133d788aed6e3fccc377818619fb1a7e67168b0e8c27fe367b6115df86f9e66568e076bc46f1237e9b261bdcb66eca0b34dcdf3746c5503528518445fc89597c964626029428919d8c4428453a63f8204e8dbd4b06a449a678d5f23d2fc8f175cf652d31a26d2bcccc3c6d155f3ac6f6a98ab46c7d84b4c342dd8a8976a1ebb1eacd9d1812a30387df0d8a305b39e1e80f5f86b445701588f1f8f45ead7fccc18dbbcf8731564b419cbce36afe3b158b632c661c618db88af03e3076a1b71e65114a2198f1210c5108818a0490a84f248e1c91a5d17e6b64516292c88a812c31a4b84e8c09535a46e2f305921a866ac4834a2abf5ac9f594674b51e7fcd2f36d38bb3a6257680f3188c11502045164f420c8145c9c7186030c9c14911184104d1cf8123476646df873e107d21f471308b0b1f20212eb1976e88cd24058f8f940c4451449560034d5c08a22f64c676188184155c144d196182206a33d3b2f12d1b33366c3c48431b6333e51991e66933f6920c0f0e28985583e764bdcce3b1643deb67627ee6ab519313e319852252a426e9af441a25e94b0f3549d44dc42e6a23189ac3c965176f5ee259629ab19d335680618b258af0a18720faed74c5653aa86b0a1962c29008b741862c80ec7fe9ad4e69174c804c5c540d44e4860ad27716f98b9e80c510535a80aa92e528c8b38071848311539e20f910e4405c71c30bd7e2d802b7ea13ade549d193a8dc6fddddbb64c91e4390bb3b0e439aa6458180875b299df98bbe67c0e506117c69a10729b320ffd4c87ea3657f0e1a4693fda70e55d22882081364e1039db566d4b1f8000eb93ff0a50a7402b4b57f0c03ff8c81fbe9eb58055cef5eefa3dfb7ea7baf7d13bae7c20b722648a97624f279dfd5b335188260f8dd88aff7dc9bb07a22deeabbb1fe2af440f1eb4c9042df84fb2678dfb53aef72df79f7bee7ddfb33a8bb5cc7d5eeca00fd9dd67fca91de7fa312eebdf1fb039bfbcb8d00c2d7522acf48e492feb24f847b4b84e33a5b7bdda8e49b1dc78df37e228f734fc76efce9af160f37de49ab8f2bf744ec73a31229f495746f473a12b176c4fe9abf12a26bcc2fc8457f49d01122dd5f25d89704715dd3e7c42b7a5f1c3cd6254fe60121dbf7f9eabe5bcfbdba7771d2b1d2a0257e8237952249b76229032957147a7a0d2d090908a9dc3f3b1044d16e3ecbb669fdb23fc732fc523a965df6dff7fcbd4e6ca626ed533a8a811b8afbbe0d65a5ecf794fda6b2df5533d9be13d9f726f7a32e523a765393b6ff070d5cb653b676747d4fdff5413f7da72b0d03df766fff41faa1a8644950d89e483fe89107a20f5afdc7c36a3c410a19040e5b2c97642411a04f471e42291d2d97e47b69a525d74b72f97ddf6277a65fda4cbbcbf4e992dc22f79e584488767f571ca52292ceb7891ad6451e0bdfaede7ecf3c06f3f61bc963316fbf936c2b651b23b6e6ab1f465c8977befad550e5ad50d73eb6dfb2fff67560817df685009c3ad3569005ff90e1b2f538dcf3e8d1c5554c053ffe000e3d2e1f3bbaea4866cc854e5bc1a36375da8a38ad1d79427d0183162017a08e2d403c91eb575c6bbd3c3c3a749061e803496850d1e287125466a0c0034b04f1012ea4ca98e1a9f96bb54205102bfc1044eeb764adb53eee7ea24a8a7bfdae3c7219e64e22ffc0448a1218d74ac60db97a20a8d6fa217c1dc3eb5152902ebe4660cf135566083ec5f315729dd7a36786210919c4197c3014bdd5ead14dda30ab9166eed89a6c8be049565b3dfbb5daead5d6ce7e575bb914c0a933e95093ad8424a1492cb85fca517793dcfd3da5911a36a3a2cc727f4769273346abe877cb62c8fd60f7d041e4fe566221d75507fe73046a9d1aae6fe9d84873a75f070a1cd61289122a3ad54fb3f45328ec8424ca10d3142140444dfe923c3eb8db2877f7df7edcdf9a316152214a89aa28256aadf56b5a3d7d21c7715c94282596eebd170c953052024a941229641ad00c18192f62c2d56ab58ac135ce86bd2a32a18b51499820d3342943a90c7d19999507f4cecc31092851494c99ab108481015900a74e1933a600d74c98b710840db54c9f86832370497aa6f495e9f3e069d81c472e1f9a90af0ff833499f87be0f7d204aa9ad561c27a8e1b7c21adaece539757c033120e8fe540c47a1ae3e27ba84e81af948f842dcf70b5d80fe09b9ff083722a16383a25097c1b2a4b9bbefee7707f12f897b12cffe20fd1204cb1364d91f76848fc066c0475a96fb6133e0faf3c5232dcb425d96b91212cfced3388ab2bf084dba536aa9085eabb5464612621e8ca1b56b42d435e98a62c4992f95b5ab2fd53bf2277615c48fdcc8a8c8a682287c5fe677bc2ef8f95fc1167cc5950d5aa6bf12ab58da98d134d14491a9c928c13cc1308136b076a52e94bd657a53c7ba2a633ea069b20918c24d65c5d288f760493305ba2adfb1348128c78c46ba2ad79baa255cff00ae175d432ea226bdf7ef819cde7cc9ee9a12d3c0e547c3421bfa9a7be5d1b6456192ef03f5ad1f53c36653a575f49e8494ec4a492bc829b8bc50b2ff0e99a77f81f812bb19b12b126b7d97f99bd4b03a42b9480d93196f156bbc543aae5490055b20062e5d5223145cdedce8aafce847bbb97d5730b001c7d4a2553feb81dae6f265fe3e2def576b3d2baebcd5aad2d5571a00ea20ad22a5ff3d50cf5c82922fa14af5fb5fd95f89f413bd27e1e8cdbca31c4c38e6739c24e0ac7136f98143534dfa272536816f2a90015f9af7b96e5277bcb9cd4aef28c729a77633bb99f5cb41aab4ba0fd43733a4fb5e28ae2e55ba6edf03b07aab12d000549d3c41f19335e98262ad6bd6b08e4d276ebeb8641ddbe16ad2b1597319b98e5c4f1a36a37cc892fd5d481d6b8f01f90c5c00ed27bbb4da64698426177115807efd91871f44f08f1f650d2b6956e2cdede64bbf4022f0a6ca6532f8645419883824a5bcb4aa3c6fa8327001774e167881cbce0936f3cc14a41f038a205312a16ea776d91e2026db110493e8b4600a735f76a30e1d2dfb7fb72cf3321758d6b3665e4f9f8e3838b5a9c8e5c3120551a838370c6ac0258e54c691c2b9590006def13222943a997e5efd622ed84308dcfd5c7d5084029ec3995723064e701dbfa7efcad7e4d464ed83820297373797d44dfd2697545dfa562e296a775429fa27970f442b5bbb230ae4c70fb13b022276b3bab275b5aa5389daa4896069652b1020b306cda74719fc7c8ae4310d7e3e4d9a552e7e4f17c80019bfa66ed61d79ecc7e822a24483f1a38ddd913f0640e0f2e666137ee13b1569ed6bf2a93e95a7b61a376e1f43e0fae003f9eafba878ab841420f4820434e4d0c8ac7d62bd5f722c616f74659baf4b55fef2775a5555084f3994c0af8fe9cb6e4af69f113f1a92c73ea7f29259e0f273cafe374a696caec6f2bb92fdbfaf89f60497dfec0227b8fc68655dcade1535e963d78466191f661715b430220915a2d8228c207f1d58ea920f13e0b22312ef94ab94f3df08de259cd7df3be54eb94be1cfbb44604429283b00cd458692e6cf18375de88f95fdd2b11fef2dd7cd774073eb811ae7817a4a937eb334f943bc53e3b5cd1dff50bc5bcc1d7f703a3535e9b4267da9491d2e58e77d584ff34dd583a078437573dbf1dd2a088f1d3b6c4c8d89d9c120003f5741781ea807f0407d01d4d39549ef16f3c7367f60b23fd843086c3bec31057f4d1fd3cd0da4bab9acc0650ed2cc45357f660e52c3fe3db6c198e3d42fff1cb11f77a0ba31aa6a987873746344756bd2cba694520a3efda8c6af4a2a0bd4d3f709a0092e715c52540dfb6c3947394f1ae69f33c391f2180e14eccb561ec79f73c4811a9faea0726a4de638fd888271a07299e394bda42e2a9c18c425bcc30a7cbfcc51caf7310db8cc713a6a7275e38b0737394e38640d2b739458ac9c2f394e1dcb61cbb992f394039593a561b38a2c9eb27f8e947fce2d87aa61acec9f53e58f6388e5e528e5d01ac7972ea98c03d5b01935440fd91fc7d6b00bb2ff0e297c6f9e34e9ffc305973733a3ec8f8115b8bc21ba80033744d9633d8c8e1ecc7ca5614f1fd4676b98cbfb997dde872e68e1c697cfa9c7d3a73defffcd3cf6c9c0b1c4b01ed16bf29c9aac79551e550fd1a3794b595cef4a83d47b3ab3377a533bb65c3233d3fce962fe544087cc5ffe3abe07cdeb317e4cae255c7eb22fffc97abcbff7a561f7bdc78363d9ead1e3eb27cbfe2e2a708feff90ab0c0acd1a3a2a377c3bb0ae24df15641bc240fc983e2cd6666c037d7f95bf6afddaabe4f0128e0d95500fb4b3c284782fcbc5010d8fbf03c96e7c3f2f17cf8f86860e9bd4f0f12602f29ca83ff23dedcea951a5315857079574c4df6a335e9f3cad4a75f59b552afb22af529e2fdcd3e3ec60f6e86797f73bba16a180882acfa1eec7d60de0c06834569d2939a741f91cb20152720f45d69d2eb57fa3cfd5aab07b29e8ade554849aeb97e4c3ee204843ea7afa9c93901a1af69ee3893377eb47965c07f0fac206829e8cdace859d617a17f33cb8af4ab587a3033f8acd1830203f68ea832175cc127454182327b425b52d2e18201f04d5c44ae21ea9235e9375f9abca99a9901979e91d0fcd1e6ce94ca9dbf2a73c71f030f601e68454432190a413a4d7e187000d3a7bac15ce07f4c0db3ef02c78ff6397d4db5caac504b807b7ccf9737460dabde9105b1d12545feec9877d42f7f0b7e76cc25d52f7f72f61801b60ffb5e0905617d0734dbd8cf9550109fef807e36aa865535ccf39e78b386c102a4d1a814ec572c8b1622a21900000000b315000020100a0744e28050308e434db51d14800e79a8406850980aa46190c330c620638c21c61002080084105088a8b801e6c2a6cc0147c82dc9d12036420c1a182e248280ef9d244ac8e993b11cc8f5920c5de86bdafd1c97a3177919e0ea177a501c6f401116e0bf45e40440e8d640dcae30864858c4f965bdd2b5b0291c0cc957d0f3696194cd9bfd047b3deac1193d0efac51431d5b6d0823008afa279415047e04bccda92c3830e13e4583ceba3b290747841690d46f5ac57c341ff94ecd8cc0e7c7d550334ec269a467a46b88cf4298764375655366a26bca7ac4916c40c1102d87064389c362a861a718b4744c87caa33500f9490b49f02c062eeeb444d84e893c90d7ecc5b09e020f2983f0e75dbb859fa00a89b3c6befc5f69034ec16a879965d9653d50386770bedb0fe8733c9d38670489e39f4bc7ce00809dca7bed449de499d7a139415563e04eb560e8bb9acca08a61e57c7453cb200b1479ea8b494a615322993c015c93699aa199bb7f8834835003b72b2f23290f17ef2b4ad3eeaa88001b74ff59493477bced0ae392d699656cd9904cc68c6326f39de98b1bf14c50e0f5979812caa28806869a7a0270e84e98263bc388e4447896c73caaf95917710fcc1645fdfe50f3e333f7b94e75f240dd0a685cc08f0d83353fa4e833dc98f760e1d71e3cabdc292ad32ee0124cd767dcb8dfd1d30b01f5b0affee7d1ad96cc1728b1fa9e0262cd4c720e228ca94219761a9efcca7b3596952cc640f6c87d7c8546fb29496aee306d56eb487d96815639af599a81a77d3c341f5a61dee068a56ac9f1dbb665f221efd6c5a7a94d9f581fd73620d306cd8014fc4c6a8ae646a8c96a82b3d977a7fe3b44b1bfba678c8ba36ecb1499655fbdcc4ebfd278af174ae23d0c8a434e02d2c70dd14b8ba908c59127ac04a097eb5e46097f41903451129758cb9c55b6415d0064ce10eb6bc1aa83138e0b39a59906328c03adb18f4fded1b42bcc3e1bde6c18a65dc54a0da9f86549d7756b58d22cae07e2901e2194a226734ae9fd58ae71339e10a7748422148a329e8107b8da8dd780de823e204fa04da93a2a1104a4ef6e04212a1c3df578a0d203c73ac62c709863201ff250a906d0e9de70ac0496fef38509941054a6319a8b41663ba010168d44793f14c9f397237718a5da1aeb872b497b0ec441f39fc01d7f47f50da570d5d0b5ccfc4057cd4913ea5a0a338095ec13bec34a39c0fb3c58865e96a45b27e52eda9b18940e479714b11fde541c1da100e7ed696012fbd954dbb74f91108e7138aa62d2a1ac20ce64bdfdaad32e99ab626d3b482c1b4951c8259cff3c4c0072314211c8a1147a846ab580c47edeac0f05d73349bb9ee9703802c0115956f5c046b31ec7b2c8041ef9836754327ddd2cc1ea09a37034c4e7a0506c3ea444547780b59020b561dcce94690a1f9475674f9c512a2ea9b81322eb9818687c02ac674698c81da61cab14d13e7c028ee91d0084c10788082f4df2865d0ee37a9255ec9fd0926649b60b936fb13e44c5eb0ad2a1fd335758cea6a74e5b5b10035d381fa81916f34b69b1ae4c64f49e369c4a29865410c028d6f2092b4355f36e82799a4772e909c1e8ae25320ab9f6b7026fc58a0e9b3642aae2923ce43ddd61b60092bf50356c64a4058a073ea80e99bef93873206c53b65f9003b62eb391ab7f78040f0344cb60ae8b16893f8cccdcf3d94170cea04d1c38c61e869779d11f343e075b811a3b95867447fb39f8e087e8b8d674437a64cd17cd80e3963d211423390ad6147b7efac3cb35932c464c9985f6131fc96f840a1248712fedb4fd9530f3842201b010bb07f8bcca57d768ae8b74cc9d22330daacf9f5193557fa9f0754f4ed9a0a9a7762011e104c6001dcb555e8c8807c0247b08d9005c802a5e124bc54e60b59845980f74d10b2ee6349b94b4cd9a94594ebd778135743d71030df62167b1157050c3f79ba2844fda4e494300d5157b4a1b5b959de5ccded1d80db53f1617d6e179775411e7e7cb118db757695fe9e63614297383ef63aa7f8ce3ee0187dc1affc83da247cd734628691d59b7633b7b93da2045e4c4e06992dd52b19b6b316850df8950dd03c698d844fe0d655ad4d7621fac8d34f9ab6ca0cfa68078f16821befd204ba4f2203be6901adf1753be8a75ad17a52259f3941d87db44f9648c473f807213e70543851f2c5289c09f58a5767800951dbae722f57f57a3b380dc32cd7691c7e277cbd96290632280284e8fa6ce1df0b7e56ccbcd08e6d1fc3f0d14e925f092a5730ab0adb1b0eb903fa597a96f5f7c3af05eb5fa2f034ca87a6a70adfa7d938adf22df26a4cc6a2a1acdacaaaaa03a2000078b9531316ef4f03eb15d052b324a9ca21eb3322583959389c73670fbd312491bfd3246b2939af15fdbe78c328c8f4fcddbeb1bb96464fab7270afaac02c1a89f0a7e51615f747caf02c85c28fa59e7b0c0ce7606bd33e9677fb83f70c09189c642f6cf36d1f55dfe831b8369dd5dbf2adb5bc102d0a7782d0f50e12df1fe2e0f2b6f711a2c92b93495e6991b745c9deb19241d0bd21c0957f4d1a28caed33595748171ed81ac127839a29a1f0191dceaf9edc020a1e00169285591a271037dcc75d766ad3aac047058a6efe1b6a5fd24c40edd0e6f6d8b5a469cf88e14701dce4b75e499175d35f5b5f225811e86a41a778e4c8ccb8cc68710bd1117525ff887a626530d6787ccd022cb2994fafe0b2c45b32b646a18b487635db55c48c5f024f830908d864026f330a5f534e5fe449f89ea19936d2ce703a1d7310b39ef2a1da0247a8754e1a72497fa9fb19b8ad7c7b948048aa3aec4bf63a79ab7a3787c0da543ab304d877a30cffcbac2a5ab2cb6e478bc10ca72213cb715be2ace2e981d38eaceb21e8fe5ea0c4e7eab4adf832f9f9445716562e4cc8adf2e98e2fe48369d444f5b514ec5b05d3b27ff62cc9494356a87fa1f6fd1dac447d6c0c432726ed50d0efd910b2314d2cbb2e37438e090b3aa347e1be8adb39ab54d191f26055c5848aa83ff3554ba1792610c6ffaf47101841f97e8098e6b203b9eccc532577a17e01117a202081555fdfe3ca4c83172726417336a2d177308cf7350df4a8b4b6bbd414cbedb1874c112bf32e5ce708ad987b2794d4e62c1cb1c8e43a1881bd4d84a9602d06587adf932b2c358dd987e8af8a97ea5bf5e2a837a6bf115ae842bbb99ee9f929889705964c57ffba48dac09839e698a34106afd03d2c5b7a6fd1734880015442db0f02b053029f8fb3fff066b6e4d1d16efb5f77db606823022e2708e657860c6d4d7b59285fae6660e7c2523c2822c8e1086de33cb959ed11f5bb03e7dbedafc34b187b1ea681b7cc19a2851a3d1811ae692a5b72e117afc7ff9539b3780a6182bdd1cd710cc6bec2353489a44b46cbe73aee9e538d0fc499a5d8c775b89f29bfd8233b4494c75a6f94c6b923118d42f430e2ef6dc83f0ff1c3a433002ccce4ade0d72c62f830d2053c1102479966cf73420bb95ddf7090c077479d74cff64feaf3c778641b309c0bc9e8c32112260eb9620ccf259eb73d4e1669782374ddc904f39215e9969c8c2c2bd3ce945be77fdd19f1a982035fa8029f70ddf6c6b82dbc874f23c92a5d21b595481abe5f4f68f68462921f66c35c10612835f2e0317b42eb1597fcbc18b07419425c561f4e9665fb32f0f4af52e293a2c032a8497d1bdd3fa11e17673ab7c5c361b9a1a18ebdbc249970a4348244f0da05c86dd9fceda46b34fdb81af74564f4b24f648b96cd62d985f384984a430dce94836f1aa910102ab019dd281df0aa128918e6e2384a956d3e01d6ba124d2097d0e7968c54d8582d366c05831f622d74dce78beb8f80b7167d13f99ffdd36eb662b8ec6a07000240fd6148e05d0e1d26be729d673264800e9ad1c8e4d602c5f483ba11dcb20884e44e09da07c2bafd452a0e4ff195bde7d026207fa32ea04c888dab898e2bf8a748658a2b88beb648d3a313c42a9a88840bb66f173e321b6c9e322c5e8b844a1388b134b407059b2be3d4f7ffbc29d2e3c5fa0c6181f5df27471b186a24b1905c8b9abde9cfc3da40c3f245291ea621e81d1ab450f0083f3c0627115fb264063f60e14c8e67a07c7ce5ced20e29eebf7c91c293244dbc1132ec492584d33ad3335647cefc163b43b530adc41ba9628d21518592eacf1935dcec0ee3a5036405b69bd986ca9d07177189bb3bb189399fd386891c14c06c2490cdc2bda73faab6c0d9721744884020362c85d9db86b855bd8982fc7882faaa61fe7207689cf7d5ff182a82731ae574baec8f0646392e5c9f810c564f1c8d6297f4fc5da90722a40b65cd3dc5ca9c6178ec92589178e83866f3748cea84074046d7399b152c0e50a323330ed462b6f3a8af4b37e89ef8db35ca7f080ab1ee48d2963fb9f963dca4fd17aed6a725f31d18097174582af38e9c12805fd0166886fcae009046133b2c13a885034f6ef40d8f142c7c0c94dc272cf8a4db81cb93e6de54260cde752f2feb406a7cec511d1fb321fa523060a3bf0f72fc356d43a1b517b51d7cf15e78172bb37e532ac92939352f10032c9a41b0c8394c2faaca33b0eccba509a0acad48d840b5772755fbf5c53c459946708e4c226729a266670062344a56fdee885dbe959d935aec9dc4c7db42ed114f783d11774a1de00d0241984e1e41add8316f0e258b42d85619a9ff159d637cd3d68582307d61458931aa36094b2b8a006a731107f7a5540d4d196fc526d4fc8e803d6418e4bbb4b2dcf8e0278f479dc71875967f1dc505e3395a493269c9441b0a7853490eb8a99625024a1556a5976d83e2b45b1e147dd0b0573953b014a0d5561806d864f15e1f6f2e965a70804baea3d02a60e30050b0519ce2bd3ffaf4bedd6534e36ed9789b464f311199b262d288fabff79fc6d004009cabea5c5b04833e5c5945bf4590083967a3e2332852e0e3efdfff8521e9f3c951b3c7b6d4302673a5d1233e6110bc17cc45ca5189c5d8936f74ce57ed7f935b8161f45d2eef5081989e6a0245991261f56e78e8c079ec9dad557ee7e4b1bca3b7a5fed02a4019f706991791fc2ff9311472fc58cc746299f9b65dafcd536c432e96b130a9d1e9bde0c65cb0d41bce6ac22ce2dbc3b17095bc38f4a36a2d43459b3809eec40462e16c22fa06fee12361f6360a5dfe0d0c667d01d59aae40de3c47b499ca81c95fa9b0187a000237e2d66d32fda4e4f4a41fbe3922b9950fa2af6cf5a84a087cb4465ec4ea1b9e976c0cf1d9d8ca1bc364790a79c95eb16ecdedf550e80bf5e2a52943f6e5c456e5b6c984d654210bcfedd67bc18e15f64882dfcdddb6d074530de1342ef1de357e5ffe020c5794793174dfc303748b9c9ae57901f3a7b82dcfc207a23327ec44832eeff0559fdd8e30df9b84f84f48c810cdbb30bde249e9725425c2b9c121f2a1d8d15367839264b10d56f73d6343a1a31b3f07505b5c4150ec1545629d9be1d24198273dbc2ec6f8925fea3907b957081bdc478e4c5452a78e77716fed8dfde98452ca61cc6cc4405c0cfcb96440753002d79208d5282c23763165c14f97180a92f83b2d06fcbd91eaddd7716f27effc1bb08c1c9c4cab6fe8cf36800927cb81ece46ad934b22c3f47d8d103335a763e3a4f777c97e3260655bcdea455030aaaa3b03ce1d174b105d16418e62667203648208a390d41bf6deac6460c87b8724c6e968884ac3ed5edd8c4b3f3583dbae05b477d57a0ebe07dbd9a2a7594ad3a3b3d47a403744006ae3ba80932bd9eda9351a93a05045fc3f4d61776ddbbbe2576b6c435cecb3fdc39a4221dcf19357bddc9f0bbeb7da4cfcbb9f45b9d40c290886dfa03b31f388e0e0755885bcd6bce7135450e16966a4151e47d560c32926d5d0dec20bc2d8e0265afe97c2d4ff05a9b9ed2d7dd22aab4028941b5de68ce8c5ef33864a899755b589ea8067e18946dec09394825b794b02cb44beee868a826e7f4ce2e452f2297996bb01315d20fb9e8e0a6b949fb84a44ccd6b561bdf106b80e294ec0354c6daef448c9950d5c8eaffa30dc61bc5e27ebc93680435af856e61839ce3ce5f9bbc897032330acd926375fc900384cf9ef0d18bbcc6ea0171fa810bcc503e8e27135b7f0ea24832fcd41edb644d40e200901a199349a7ceeaa40a14d8af095d6c8c96e2d7e4b89bfd429f4cc5422c1c65d90f1021646643322f6823e08bee4c87d271911f20639da7aadcfed2a23f39607ae2ca1ea8903071f262c0b2b097038ce6729a4dd295a25f855931109f343e34b381284b36de00846ebe6f4e05b7aa051e9062e5c57f6ac37290edbf230cadc1231c7e62dd76db597c18458f2bc0560d176fcb7e6a742e1c2cd0a443cda964e2d45d398491ee5c397b8fd23ca77e356f34d4a95475e6cf11c8226e18ac3de33008673a2162603faf57bdd393984a305fb5b174f4fa790dd8770f24992194d86659ca8716963c295a0d950050333480a1922f2933c309f936e6069c31c9ca11b35c72a8e8a8edc97b83098e3bec231e1cac015ac12196589d557b18c518e1463055685954facf03e440583f1a9b23bcb508cd7599cb780a5e5580c3e2c2298ef3a69c854b89d9b72c8ac7d50000f5b78ceaf3c3be91c7266db82fed127c98adf6bafc2959f4274d3d86d9e33042a311028b473334bb18ea5eb98f3653373e2070d906dfb9eb1cc5b20059a887fc7236c1c033b423de0b49effd49c80067ff864d7f188d7ad6f8325f28eda92769749a138d26aed667b720c55197f3f35a1691e7942d0550e13bf17b231c61a1d4a974b651bc059ba3ee6e72bdb5f1a20a2751bbbe9dbd0988fd546e56612dc1cec6c5a2df3ef90308754af5b70013ff17ee637bc2ab7f928d96f239c232ed7eadd35bcc97865db2c22d7f221ec9cc37523694eb035a01db92ba8af983d991e5d6ab26cac0e5f658e12fea556f190571f977050cf0dfaab18eb87bc27293e040bf6d3c1426e917f3ef57f4568f468937b1d2ef95d48dc5cd4524d47c27bd5ff18fc9f30620f32ce4dc99927c9795ec3ca53aeade62529663d58eb8a44f0a7487cb36ce7ce98e1a855215ae0f99af529b20da06161cec60bd68f4d66422b7160e54f9ff00bb480dc364a99b19048a04ccb05cc8868810d5ea179e9b7a26c5b84e80ca05019532fedac37a18dbd73bcd053a677acdf124de576fffd90b6924a5e3e6f56cb0bc49ec14195c909893ea402509c7ebd33bd636765400a034e8b5dc4fb8bd48ab934e557b4af53f18d00ec2196902201b89afa639081ab209586d89e5da52f52104d519c673b3405254145cc4b32a07d001de5fa6c8b795468625cad2b0277b84797d599b3e075db933aa5cfba579d8ecc5b6185bb141a285e2eec7ec44c95b9859accb63f676c889a5c9484bdcdc0ff918385fe319f01dc8927b587598f3c0ed874a4764472208f469f74990bcdafe05190478ed90b1a92ba8ab71f72cd127d4fabaef952f52fc07b4520e34e90f649121d9d88bee009d85a07ed6137d4e7b3782566ff9d36eec2b2a4cedfbc1805dd3adef6541d6d5a30482af8ade03f4c98b9d260ae943fdc27f60b1ab26a8d590bc5aa3d2be9b3288d90f5812dfd849522f291271088f1c7eecbc74d425d7d7c0c1e0c4c30a02219e9c12355306c5e576eeb23e3d63a95ae5669d3189023cacb3c8ef5b3182aff13e39218e1b48380198c668b2583d78de3772b590f1f2941c3d626c01b7e5fc056cb68600d0e173bf5499f2297429e6ad552a0547d5e583c6106f0e980d6ed20c90ec8d3550949ebb88a60c794f07b2660f6df5a50dea85faa24f2b334ab33950f01256e36512c7b7008168febd92980c13f2d6ee9203b01881b56eb54fe6cb230cbc9016a9353d3397dcb0922f8d6a606d94e4dd6b7a6451dfde5dbf610f5a48cb0c834c4459d17475dc7e2f0e12b985c21a5253368479498f33536aae2b3d6c450da83dad938aaab3efc1afe37556623cbe58d2db9cecd760e4328a584a4b40c0d34afa806857ee6ca35dbd4a8a39c0460fde934e23944595d7828ef2898b1f3c08915e531dfb34649231214890666355310ede2f9a2a74fbbc34ee6fc779099dafb575d2d78dd72b27cc9c62bffa573ea14c1ff89b40dab2de76c3cb40f444dc13b46e5d67d521b5da08028a89b8b2da69c70bef66ec71897c7d425eb6575d38208ab0c7e38d75840a8f37491203093a85b774305c0db235daf07d06838bdbd54d5155b99d3a84fae00a5484c7996f5107743f63d02a303711cce51cd1b65dc80c0b130b20596ca0ae336d74cfb48c6f08254efcfda58a62b57ef4a49ab3693b690c53e3afe08e10dd9cca0e7f04e7ff428ebbe2643e5684acbac9068e0f9c26785f79973876439ffcd6cf0b9cb6dc4e0a1f69e1349dce5ec6dfc3821511c3ffa4b3970f19cb4e5aff56644bfdd347c7e5cc62373c3391c1aca83242c016b6ca4b9d1939f75a8bdf2c7f1c421081a0c7213521a7db021fe962381dddcb11a51bd896c3b07f2c0c149af5125ea0b42bf213ba9a70fc3a1953a9ccb5b4341734ecce37ae537fd500dee5c71921aed00c726618aed0f9b15560a51feee56844017e64fe9b18d9ad7d9dcec9dc4f247f7697330ee6e299459effe0e1f16f60abfd3951f31abc911d5ae1b1d070c35f4e1053ffc161632ff9db98439a22051427d8abc45e529a0386747f3367ab7ca2fd1a4113d4d6f75814739f92d5de2bbece53b4a71d0ce30a89338e8cbc8e4b468ac36dee0779c59d995dccf415c971f6566541bf4e02d30dde199b98bb802bac8dcadc7d4f499d98e585f85f560322e8a88ca0adacfce45d31063d2ad3cb3547fe923b3405551e92dd2e0871e9e4c052e68a002968d2532fd9ffe356d803d56a21135e68c7e722a34a518b4e46b62db4c9d12898c83d128bd5921cfa5c72f9c018f11e30aea63c318a033e499672de94f68668d72257937252d44f1516d6916ca5dd2d43bf44ece02956207bb0418b1a1ad8a7cb4e7438de0a6532c66e132069850688a33fa9cd189b3604232a063daa7489d068f294f25a40c9174668a314fff727db907a43954778a1532aeb8f5a1e910da62d85e27db2004b945e1c74b8dc826345ed89467f00c695333a4593408a66c364a284c418d157ae7d74ea45573e4a06794300b54f798f8d08d85be79d52882676376e0ad3447fb5efda32ae510235d646321e3e8beaa90bf3f50c55341153df65e7c85b90c75dda8938e7a6b2a7a7771ee495b9f2432fea4f33bc9806d9be0f6f0129b116599dac2d42c149d2dd81f91cf0748f0f1a92939309c39af6caf9242821f474e01d56e130bf90d503ece015efa9826ca41d5c8cdcc69f59317571ad943164867e4540186e33b190af158962a209deb0209df5237119d725feeab95a0a10720bebd42a37ed78a25ad75b4631e212b63eb52221fa38bc14952ca37b9f3fbda6150acf672650b70615b7e2934c3d7046e2c34769e1167b8a7ae9b887a643b105c963c542d9eed269b90db81ca84d0d58ba9348481f13054d8e6bc99ddd5609cd028d13cb38b71a9640b43e55602463fb50ad54eaaa144c04000dab72b62a4fbcc47f6421daa552944fa65638c120570f8f51bfa0fe656c8badeac507204f9c302ce15fb28269c01549dbb81a8d56028b134a96716d903bed4fcd7d70b26824db697f841cf543c8996294b9fc1dea676a00cd7283c839950c187a43ddef9ca10d0fdee46c096cb3da51dfc00e6c8a276cdf8e0152998264bb142629f90087d7a047d6635e90a0390a50dd81ff656e1e52f2e57cff1a27a896530cb4f8813d228fc9ae8c4c768e417a494749f40d1e652e52806fa49182c8184a466e68d3601169c578659fc2c92ad9cb550c531779527067d926babd33c25883964eec4fe9ecc1f02df173c541df4c156889114eae61e43c276899fab703e8304e11e95ed440116d1e330758c1aa2c892ac1a56f90140c250a85059a51f84d5bfa0e661ef6ecbf059856060a7ee201f156f3ffa206cc2e78c0c23b519ad7c82bf373550441040a4c3daf3e96544e115cdacc5983bb1713b6a43ba7b41313adef4f7158225191d3dd5afe199d18f125859f60d170a0e0ca915b0043e92650d5591736efd6450a47140f0f7f38a5270203567b769e45a207eb493c3e415d0bfbd34b6ab4290657e42f817c81097f3350a60bf3b847ba68cea07520fc2e87024c4599a91fa881e919a05367ff981de05d93d45c6fd13378061a24aba2d3a2d97d05f09ed0c0d3d020ab546b56a85490109632a184063008b29df04de91882ae2042755e0320f9dba93184ea6314ffe4cff079527072adb7778091a6b1eff70b8ac12d704ea1e484ba0d948e09da1932c1b952b798a5927d2e595950734c650704fde73669dcaa93346fee13c9a90a65f985d63dc4d1835d52659b821c070a96dcd541b194d6fd0e1e771221a6e981a526aef8f42ff49ad7aa22861e6a0251c254610c80c89b0001ca0706bcfaa9d25744e7226c9919295bcad3e507c2bbd9935a5954baf8a0599aac526e74911eff7d39beebc2d2385c1e6d5c572272fb5566d25ada719f1570a55543389bf100b571498bb14ac807641cb5346182577d8fed4de2be5d288c14e0d0676d92cd091d7bf0d9a7f2e80171ddb3a7cb359ca802a4e8a36f44f3353f8f0d98fb27d0528201ea50ae066481d8a81aa5b9f87e39daa9ccec379802d6599d8af6225ef354ee0241e75bb4116bc011a48dfc94f2dd1c47d36282e64078f68d3b62b0206763ed4a7f353c8b20749954ca82e6441ec841e799e4b05600769504708b2e91b469cc8b537965ba3bd280b977ca47d899669363082a7630b2c9bdf1fd66fbe643d7e6555caddae823abb5cc496e8610f4cc3ab6ee472b362f198c1c62dcd4453878ab581342d79aa9dacb6a5c685675d18d37ccfaa97740e4fa05eb26b29e24d03ef53ff422551967cdb944039e21ab512614d19d8c7db290ceb92f1fa9ebdd8060aba56dbab91bdc8e2cfca33cbf2e68422f2c9c0ad290feb300098036e334a809a443523e49721e7aecac34d82cb181fe667974713cb74c4d1e7652f501b2af992ce60d364eb1b5b30e4e477b7fc3aa8ec27d8d9b327fbbe4ef1f1cee7b3d1b52313f0af322292d2756b633ad8ea0ba997076b0ff48c6a5e754f6611ce80e41aad2002500fa24f28efda1d1d67b3ca2527a64ca56baa412d064e1b065a1e86bbafd446db2e500d1d108f3eab6b5b297a34a162f50b22bd17867658c9a272262727a35413e9d428e01480a80772e6c1b577628f01b1bfa739d4418c726c6f2f0317635fad50be713bcb411af66ebdcb432e019bb79f2b5e81d1c13c62c6778a060a367636b7145da043a64f01f1a6679711bd7802335e89e64aba077d9c020e039ff9c40bf0d2817448f61471d66572c42f85120b43ee511bcb9c04838d9204da120899c54472cf15bb0146d77936a738a914302fca1d5d5127596c6749f6092b1c9cb69fa2bd30d3e669aa9dae0ae082a2f65d9fa4ad2291c68e10426557868281276c2e68154fe18ceeef0d18e6abe31d0310ab396341699971f7d9a8228586bba45da8cfb845af86c4ef6bed20d3c6228e3c288754da3d925483a372925609ec2595f5694eeefca2dfef3655780cc40962a5e21c521de283d41711f67a493870e47cf21afcc754a33a7db534982aab5bdc799cfc63b241d38f6401b40c3caea88ebdd288be72cce2462e1a607d2ca94046486385d76d0309e7abaadd3ad7bff72a388f32dd1406e87dcb2679df02deae967dc7ba60902f46f0ac4fd6def79b2b7c1297b1673cdf6b7382f3f9d8c81f4859e45ca35867b421e3928e7191d3818c667f5949e9632a07b5ad30fa5f8d52d08a9964865f9df059c393b5f0af7a5a39d90a386b313c8fd76ce16911363676b3395eeb526cd4da54963ccc7d5ba75865d4a06f7dff0ded336819d776fd0654e2018951c365cdbe66f08a5e6c025e2b9e6f356566ee87047d923b3b47c7d0adf525af95b64f628c4ee925482c8dacf31fa2bba313492c602e9d8656b1212b9ae19fa41dda6a05a47dc9ca54daf1ad309e1e40132975182f1472901b990291d1e59afbf7b7ac24849c96e7482b706ea7ed017201fd1d2eb3e27e2c90b3a4235e83e113908011700dc9b6527928a714b62c042ecd5eb6d44c8490e1732f410c2f8e0df88170161aa9bb2179adec6c52043f1471933459d521015a50a9d313a15bb99ee824493c3d37f67f2acd6190a9b43f71d95c37ef86b6df2cd15ba74cb061af03db7009f2284dcdb9fcbf35d36b94f7f309c3e0b83ba2d28f3d926a7deaaea179b82273a69622445a47774f62014dad4306af6f16e6c1f6c07cd3a43fafe8ab45dce77a20e18d3b05a1d2e4d8fcd128b2604d263a83e9183ba01df61e3d7cb4bf5feb85ebe7a316aa23f7c85956235b9e00425a44a92e873ea505279c78dfae35f4aeb9414c6740b8c9ef46b68cb3d342c89aabcd3a010a7e607270532b09afe2db01d63002215816e5869c6f05a725d6a42ba33a4f1ea8548b74d6a21c5ff3f71a78a79d3a3c5a09d707619f72b753de9c31f517698430dbf856be4e5d5b1e040893ca6147267ce1b5748206f067706c4f620225b80dbf756a25d6e54dc3c6e1cb0fe38d8171b7daa983a048cad774ee2b27f9cde32eb2d36bdca3293f62e330fc0d898359c7e9db205744c922cc26dcc6362a4fd8783db62c7a5bf4e8107333a8963affb32080bfb8254b1f86ac9ba51203da8b978b64ed8c94cbb6d62bbb36f7e3d1ad485ad18d0047106fe298c8fb8f3b8632f813e23f7c4f0a981dd19bc5fa279d087d78d1c973f01b05f34c9a22fa0428c030c0b4acac7d549606db94b0a168882744d970e5783412604168f1bce703f5f5929553a5603d7b9f1217b6364bd6a93649a86a2db82e36a78096428abaf9742c65e4ba68077128b3fd1bfe08824474930d5d4993d322eb5f4560d6ba06ac70507f038a5ca52b0241b64b56146c173695278ed590734b969e02a9b22d0e5f9e662a04fcf3843c4bcbe4e02265448d255c45097d34569449ab07c337be89e0212778d46f78f88efe8d711fdb7cbc6f342dd34dbc0099a135d7016ce6cab9d686245fd82a2917040e4706f36869c8182b7b815c9897ed3ebd6b80cc31493856c2affda61330f8d6d3a2db6c497d00073123b0e59bdb451765258b17af520b9d746ab40fb4420b8f507cd19e676cc4780ad1d26271ffe8f176ff4a90cefc1d28250420ca0ec67825afe4dc3b80a0f965bb19a8e72d92167bef9c1974ef36de0279f8945b8eaa3d4a04955808c04cf0fe39bee90bc97cf916545b0810e8e7e46cd057d2c20e77f77497b357ea01a18ec2710abbda67e56c380d6cbed29cbc3d58666708bf279a6898d42e2ed71c8ba4e817836dfb6de67e38541071a0f40db7be54c0e56b7f914d44dbecfbd543850f9cd855d0d002935b72e9ccdee540053f952581c6c55179ffd1f8882aedfbe2395b7048f0949a62128475c98ff581be342f3b4f98c26721c4b07044bd159938af5fa36e033158d06c6cfeecac70745c51035608c2ce912ac8dc340b1f4c14e16860c42ef865fb0bcc1ad72181526047f9b6733e880bb5f699183879cbf5b357e24bb00d3e0b88d57474e5dbf6b8ca29d265843a62e5fa21dbcfcc861063f5a07e0e06c710ad37d552af8fb18078819160f0030486578115ed2cf2f994dfee2ce74464c90dc12fbd368c9a8050fe8372899d30b94665ef603497bbfe8bc26438279840cbf3cd4049335f965d170db0477bd0470aba214307d0897be7e593d1cb38447447bc56f9a566cf5c68c79d602c60d5ff54ea9b272d061b45f02fe15cdf2d076a2aa64efe57209c638bb9f0da8faff6bc5d535e5f7b4bbe37f1a36dc52f59c581485032482029caaaea0d1041f34c110349860158523351de5d916272d888c3f08dd7a5a0ab4904e1087d1e2bab1893982b81dee1a8c2ba097847acfedd72df45ab3186b848553b01bbb88f50c05a43983cd6c5283dfd857b404c73447e43cfca1b5a1c7f1bad80afbda589df53f1e9edc2544e45a22a816ae91b7607af319a1bc80369c99f7106ed72f997938cdb99a5ed303d7b9056221f0dccad68e743c40ed4a6cb7a5ef1028e69b5e15031ef3999a4cd4f7104c89b4a8d0af5589cab2d1cf3c08923cbb6182971b2c141ec8a54a0e485c988d51efe5a45989e72fb09544757442291c78b1d1a8a2e16cf35b4b4490ba8e19a1579cbeca8fa042b46e8a47766ae7cf0d43c683630ec1ab1bf487ec54def7f0b4faf811bb012289a244ec40182cefd7659b59322d869c7caed1f5db69e3d7f71f79ea95b2545cdb71af1b5ddd59eefe9aa07c3c6deb5523718d9cc4270c8b550e72c9ed231ae6400e878548f1de6e0251247ce3e75a50d19f4e38bf5e5817cd205c777b41ab03a98b90b6ec3358307320eb953ac317afde51c335f59d58f98986baf3e6ed48f425281f292b481f1690050e5a64b6a965acfbd954d9f589ac098307d4bb681bea7f758c544062fb22e5c6034d39f3a94b9a27d9cd938cc140f1c9b88d16752684489cfb4c706f873a78b84c148f62651dc60907e9af564753c5321054a19c5da441a55fa938b1accc9ca9e37aa1cd4db4af74bef3bf6c99a19a61245129aa131e807c24ca8bfeaa9b022e6440179fd0395a693a334eeac9449ffb2bb7b6d84a3dc81c29eeeede87d2250b8e7e28098f18306f8c66a27d170beb435e0aff98569bba8921452804231656f894c864b5e599ffd7233009016385ecd261439b527df75181a0b1545cf9b90848feb050f7cb1f1ffb479e6ffdd0337ccd4707658f61c23e1a47e99d330afb066d62158479e1cb3183a904f0b80dd26aac1eec2ab219a0a953ad4bf94739bc6352b75a0946e8d0c70f383acb4cb9d40bf004b5836edb7fc43bb6a9d7bd6f5fec99bac815a367e35514292e5e139b9e4a18eda0c9919d5ca3b16c635e841c880301b3a195a1aa6e0dff6e4e5bdf41a2d148ea08a953c7915f9b6efad259ab7b78e26554b4d4bab19301c645bf4970fe07052c0971d9ba4f66478880f10a8ef582e1138122fc60c0082cfcb29c5ba7b209ec19b9e1f11bd534544cfb1307a2273487070185f904b839003afc5b4f0a04ebf9b21752d52aaa6e4d8c48eb1cf55335c17b947233e650db2e25da8e5384995365209e53e3090570a153a6224e6d93d3a4591ac677ada192fe6fa9694e8e39388a2ededc17872c65c185eca12aec3520d53d6a48056f0a117f3f8c1d9e6f9daf05465dc257a84b5e2280d6a7733ec7b57371925074a04f44114401d095bdafa06ad87dda7e3306ede9088487b04c217f43b6c082f33d0680f6d97e78f1efa9b1b146d663c729a3f68aa9367cb1686dfb527d7f3da377f621471f013887ef5c817a1fe848c1e25f6f04630e623a8e03dc3cf261c8b51c0c6741c7cd92ae52511cf31062424d1db9800cbf5f6e6de8dba0036a733be6d1f30b021a1c996d69fa563c3902c721f68349ad12938ea5dfccfdb99854f53d21462a5ded0a8dea527ecad696b012f91cfb868a175d888fc972c76a352346af970ba5a9b3703ad11d1c0fda2d5570f87431855e673e866a06b4418346b5ccd4af81d591eab091621d8f9c72e491d467d70e9046d826f24fe3d53a7e40e43b3f67dc38d398345cca07ef304a489587180414df355a97647c34111fe8b3c0f220a2ba373ec2e116e14e5dea5a6f6a1475ef43310a9e695dfc465898980094c943437399a504807acbc5736e79f46129fb59efc8ba45c5890a90a850f7eadd70ea5f9ce4593330fcf6c39bd43315f9f8236cb9327df97e9cc38a8c3dca7aa5f1a5b4cfd0a792f28e819a6b1b7df7224acea86af5b70f61c5354e0c09663e01f20910b5549e89c68f435075b3a62b64e84a3d947c71e3884a089bdd87da03ffdcafafedf7cf00ec9caa70c149c29e1c3e6afe800bf046918e65a2611363650eecd60f8ce00528e18ce822ab7b2b82a894c9460eb964736977949a2d686f44755487f2aa3317a627c81e1c89e81a63a89c89a81d60bdc9a88be93d6542497e670af38c93138f8214b11df260d024d8e45c4ed5ddf3b420a794011f2f99f346830b3c54a8eb538be45daeb7ab3271600ea970d6a8998fa44cb8a82ffdb452230b39e21fffb0107f25abbd9bd65173b9e522f444362c34ee9731afd91e73276670686926a6ff1f4f8be38784d6f143faefff7b87f04b07922437a8a1affc1c44aea78f3c549893469b10617ad748bdb1b62460be7342a5410f076ff60ee075fa5e9e4807eb600b9560410d8d47d90ac6c9cbb77b876b3e7258a34bef26bff187ba8d477a87354affa795097515d624584c10a5ffbd63f9ea384288eb5f31b7d213be7b650ef56a0bc405c003ad10ccd21caee47fc8615d17f7ee0bad56fd87558404e7dc5406dcb7eb1d63e177c18586c837adc3fec6ac55f1d43b1e3459cacb346db07d0290acf7e739c230fbc2333687f1d70de7bb5d671ad0f52fa2b82374ff3e297aa1c2c3138fafd90b246e7979a58154113a7b0f03dd71e02a28a4e04cc3749c23554127aeebf0aeb5abbd788d56c16240e1b81830ce09d390fc65168d2fb80060b304c9c5314e2149aefd00f5ebd6eec2b46c6fbe8e3afce7302320f19136a413da837247b925dd4ef28d145b48e04ac41c9d10ffbc057a63c9a77f2e8bc20fc03595c797b6885076f115bb54930c27b4b6a84adb56dc0ae7905b9e79b98191109b99a52b640d565e7f5e318912720358f6ab2203b33262a2d5a733bdad64d0fff1fc65447d6f6bf2cc286be6a6136e83aa297abb951c4e10b9c653c38cf949bbcbe00a36a24f1d9824551cacc1fffabe9878ca8b21d11da8b7801cbd02aa7c8c621264815a2f0debf8782d1add22106f090bd6be128cdf806279830c4eb41cce874ae4072f9eff53ffc4baba09b5f09bd9fc31183b9c32c8d88cf63e92da714cd14f216bcae9e2bd7c0e7340d6f69d1566b7c0426ffb8f8b21e4d34a807b3104003e65f061c9e5490c08044e528a689002b583b0d0d76fa8a1df2852754ff2db33dbe27478612316839b9b127957bb646d92c501422dc4e286449bc4f6bf44576613bd2bcac02ad4493d72455eee6f47feddbe1579f02c726e62e2e9fa3636ae2f25d6e0d6affc5f3f970ce086ade4f7c29b126c96c1b6700770e9553943527e27e06772535f539c5bca040b19ce0286407bd9d080bf987b1ce7ce805f4a448c08627107d8d7467ccb7dcd01d9ebf5be651b7aa941068673ce0f2025a8a673cb6de825f74bd1cb49bce6954cce4a130537c0de787e5c32e5eab9fd8a24c2d97b494c39cac9293391b7d9dd0273977c6a2fa9c09a9ccf16164460dea4d079b58c5c3325799d91136945c12ae05d967c7b6d72454ea1a6792736a760e2cdefb11db1bd73c6c21872f3eae005801603c842196dea1462633b7312d42135b6e1a493d38e6812d4a4386f4e89490d93ae9c3fa2bef911005b24f06ee3245727b0bc497db82a55742df80e484e280a069f22aa0855029e613857802a2486496e9eca52d04ddd3f9f30f0f10654696f3080b30e13b4f3662ab82ddb317c15b175b0958a2e5812620ec9281889720e79146385192cf91d181c39a89dd2a3f336695a011f95009cee3c102f3826bef7e91167d431e105a18cacd58ea971045f88dc91c2218362ed27d380861ddd45e546e56f262f44bf58e3cb74c38ad9b9236c29d597bb656bfee643042f61dc561cdae790f7b84970906f67fe06ab0056e352ee5e12a29c247dcc7f80b77ceed75ca2773895cff731c83906968523a7b19476e0f3e55ca43ee57ee1a2a1fd7ba984a84a11b341be76b6afc9285c9f3751650a9fee21aabeee563bbf63dba5a20a0f3f1dbba00c64686cf0ac0f2abe4c0ab869b7619d20b70920742fa54e0abf567297118b3a0ca340ea1411e087aead7201fd3748192677d005eec3a3e7831e2ab6e333286ae6f1573f9ef9e00e5bc41a5c5897247572b0cd98e9da8c2f51862539a7dbe2364738885bfe2cf94d1cd468a93b99e8dfc76971f4aaed31fc36956dd15947703c8864eaa692fcbc2f8c1d06527e9f9e29cddd4f23c52b514b0f715d7727e9d2159c74bfce4fd895b21140f2ce4fd2020474b9d930c6466f281927f8d660fb0502b5a536c03fd83098106bd61816164e34f0561de8ee1048668406cbe9d51209cc4bdfde42d6dece84e632e349c53f0ff8f3b46289532567a959ec7a7d8efbc93e961f4f9abe4a398806c0f42e68e9d7b8281c4311a6fe063270b8ad0468cfa525da698c63f8e3e4707652d1b4b460b1bf4c894c3b1353af3699031bd722e51521775af37147f284e3ede5013eda262821f92f31a2cfef60022883a5f739bfc8b6553571c1481513c92b41f0e0c13b2cf8eda349f453b7ab1c565388e848c941f3654e886e3208a2dfdecea481fe427fcea9cac60fb6a4b7aad0bf2d6e0060c33a2d0eeb18f22a86444557cd78b1a5d92290f2133d8efe185d12ca8f4ec139ed1406c26723d71be5e1534b37a546d2c76b1383f59e46f510ccd4e4af9fd6c5fc60008f678966f82f562644a47a5219c1e8fc051a36f4479daaccc44f36772cff3b539fa90ac6c164be0ebf201fe06dba545f2384d9f7ec88c11b9add5757ad4be157c3a6602da030d9d761fb584cf95935ef498994299a414933901b81134e2b5588260cb63a4ac7649d05e54857e6d425e3b0162562ce658e87f6c55a6e07dfb837fa2a4882fc07a8bbf64ec04d935929ed48942e8f89494bb007370d2746250a118a7765ddc47b27d71d7f08773c9a81f598bf664ed40b464d51fdfb16633f17c1d1a4714e8914876d8b06214c6dc9e85ec6db57301d2e32cb0934d1f90cad4da6ce433e4334d97381ffccb7557e3564f1b5fa87ef0b730c3cf6a468e1b92f9bcf4a21c0ca8df866d0c3d8e40daeef605d3e988287a3976899b0f17b5c4558af8082366a36712fa70a8dee6e1a499969388ca6060bc704bb2d05a3bfcf13b1c681dc401132e243f77ef877278398e712f49353529e173aac68c23231eb445875f24703014874459b2f412968203a87e45c9258513f21e5f9c483ed2efad02f6c8d52be1a4274113c2137a045cadc891e6f9df5b29ce12242b2b6c797c39ae2e0166541d4c196cc86629e4f06beb360208f062278e543dc5c23994b1a95fd77fcf8fb2e2058ad5378ee9e65840e3534c9381344d7f17c97d0b9d5ee412974eb53314954173fbbf6b0437cdb43983ef0e82bd9e943765b14918ace64309c6f32554c46a3d5f73dd29e143eb4afac958872e44ad67f0d48af359725130c2a185ddce1ec1a928ae156f04218c9ab68052a192f48d1f651f1386bd1013adf1e86a0a302200915f6404caac2e03e0b0f6d821f44d6289c81afd348cf6418d95b0d387ccbf8bce3b248c16381a72eb0b18314f54efbdd047e85c4792f118a48a587fd2f2484e66798264c69ebd87c6ce374677d71b6479bbc23252ae6cd74f1364a85578106f68720ed35e9ed301a25b8efd2f6d0be27b0fe8194203e46d9473fee26f48f18a2e4f2b0cba1f70457a897ff8cbb68d59ebac8b7bb19cfdf868e8ad6c772e5c8119154aceda3cdccc7a8ba0051f8a9f079716e2334d622f5bc4bc9fd15fa869c2a208a2096af048638e09744611ff9280238ba03c0d9c4af8cdf764e2052c870e8b03a35aa76087770a516b99156e2ee01652b002c93ba240d53b87d8c2782c0dcac2d812032c08ac13a0cc71956e18863f0c8fce0035bb2138039e7164f1a4a645e41c99b8dc730a4b7b45c32be6a1af1fe236f50f2632e86390bf8312e39de0932343b1d0314ed9cafdbdd01707dce054f4dd5170823601c672416bcb368d20a44b647b50a98622634de20edcf7428d42984160283eaf8d5c8b487eb5d29c6d90f962e3847cbfc69317a167f40fbc9bb6944890edab8b828b26a26cea56231508131a474a61c80fe161c619b7f064426e8e638dd8dfde965b23f9f4c63ef28c8cad91a506d6f30b798cb49706f8682de0f4c1ef5c669184e0f2e52760280a32aba46d9743ed944877225661c60662b2bb77682170abd0060828139788f2081fd85d5581ca03e89de4d1dcd626b611d37e6fe39ec290ac9f340fafc5683a86765ca809c735bbac8a7f61f9feb306700c801263f51ed1acf3d60bf0b22e7bf0e5aa164ff8737954f332fadfc7f9b07f41322b2356507d5c6bccfc73ffef93c5d998795688ec94bd756fffbf4d42af2cec76081962e51b5cc2691a3e07a8d7f527f83e858f23178adeec6079b176ca40d01e32e334907aad0feae23eb4d05dba11d6e12ed515fa6ee7ce19996643ed464d9a20d6ebf436ca1f578121a3a4dc4271d26ddfea689edc3cc3514a4c9c40a79ce989c5f4d0ad9ac3c2667838cee316462999bab12362ea29451b7594cd168502e293e080443b3d78f5b759bfd1142549d2f1157f86a55b632c8b4d7a8dce09318ae8b8c7e621387857b47e23e143a8420dff53cfcbb11f83b91a8f8ee893748cfd4019b542a2d94885223296e6a886440ac93de9d5de23ea515db05b18772e69352f7ce810f126149a80edcfeb0f7af5f2402a34e1a09f4157592cc902efa3a99d124c2120fa24fbc2ea441650698fdf58292884adc607543bcfac124834eda32aca9ccb056176f6a395f88ca0cbcde896d042fc3bed37825cd078cd86e231040650680368f8eade49e1bb339ca8ccf1245024dcc55329ec0007a60fd2fd0b5f20c6f2b576b9bc493484e689271816cf7882745cc3bb1a4da894b4df011f34e244885efe7a6da2490e8eefd65758127e71f198774f2c61f705b72ad55a23ab7a46686c0f74afb7d848272e27c9003a1481735dcd1364d97266fbdb09dbdac7ffb4659cb51c9ccae1af977444badbca29ec913e64d20639acdbee9b0fdfc12f184dfa91d4522828128d6b5a72f4045dcab9d02592b26f8746875855a482d636e0750032288970e23df03baf1c572f41f17f87d275246f2550e87a3eb1ddf6cc665d7a317070c3d6dfc28dee44d347eca2dbf8464af3dbf5ecede804523647a43a4e1e45b38b7e85e51fc2b83c55004f46be9c5370fed539f0e9b33cbd6e22ff3709b74c243a57e17166865713854234901ddbc71a8a86168fa8eb038cf7c1553f2eb21c7a096f477ba929f5175d21d5356779ee099e8afd1ac980c7af3681c04527c1d23e4cff662fd41e290a71e3247456ac1b1d57b4057a3a8f1b7a92f4c37d63ceabe9ddb1e9025ad88637bbdabd64ff9f22886907cb82cee78af9976d6fc1dc74720cc78b49aad1a18370ccddce644587cbd0670cd6cca2d5e5a01b95a91f93bd631cf74e088d3e7b26fc98b2368849909dd3d209093fac28ca455b8c4d75717aa25b03f8582203a662749dad558b12b5bd672aab61c03c1545c3dfa499b42740f7c76fb16a9a9499530777fdbcd8649a1f6aba3e0c2152d87898adf9f4eebfbacc44f6290ab6454ecce3bf9c885fd5815dea94c00e697185e50b9402413ea79e0619e54b4d99466070e5c5a6487b86d635f0c3d9ee3cc10c206df9f058a1c6251bed9bb308fd3451c5248c20e3f8e69157fb88c243d4e63da82e62bf8cca5a19d930a7d9f51b4d5807c7211817b25b42e18096f4ea74f022566daea48ba653640b863e6600173f255122b7e3c4f1fa15aed0390ec2e96232a83ee5722f02225fc5e4640219df401034b362fe358d3311de9b6be05a37c43cb6c538e238ffff421ee4bf225c5caf39de3cd20144fd4882e6a644588cc5bbadeb4f36a00606cc206d2729e45f8aade87e294b8a425bb008b0bd9b19e3e88d4a415fa5a7bb0a25c0adc4727875911633358d291609644d81996e924180b114260b17f074c3415c34891310a735df170159ad69bd5c05e109ab483cac1bb22e25f44f7e6cdab6effd7604077ab1af34ff6a01ebacf160c28200b1e5016c7db3002bac341c45d40f6cb30fddb9b78db508ce3d596aa18c9ba06a2edfaf2a7ea51c603503564b2da96e342b64df36d6dfb92a25a64a41366c63cbf7c32d57354e90a986c5611f8de02a4101d6d98289924973260be15364d1fd6ed6a3ea32c74f1122d3eb816c60d36d212ac345099e571a12c3190150c15d38b553c0952bd571b6559f54074394a2ac47859415fda397798cc4b9768dba85a2d722dda2a17f0576297b9691618f244e6622f6753567e2f42f94bd7699d122ccb1ef8da66642783ffc87ea788a022463b39bd52f7a6ebff22268724ca62a7984458c1e11af1e6275062482a7c1ef9598e0ccc3c8ce69a9344692806cc777531f6d50e4cbfa929d958341ac307b68d890b9b9fdcc0b0da5727b47cb1d12e6bacfb23564440ef85c71a1812ded6da8472df0cdece75fc60424417d637bf4e319cf9a6da31a28993464a848c0e78eae5e7adab127e077a9927bcfae51a76c02b5480feac847384cd0f1125dcde6255d215fb980456afbc5aa59d071fac6eeec19dace4443562d85c402a384fae2a2241cd08d22b038f15c8e5cf9f78d80a2bb475636468e0269d2c00139502e7bcda34ab99f62d3a4b029dbd3aa5ef9c36af0d21a5be4e66e25e3a63d3bdc15a95fdbb2befe45d7e78169c0e6058a5246caeba92b9463526a3f48dd030e96ae68d0fce71ec6b9932c2203862e3e4f016099167383c798a95397b61fb97d00508d9a223561697738a37545a66e71716f15eae094945f1a3aea3bc935ed5721423067df4e0953e4f7e3e87dc9eb69348ec51446e4b22aa8972f3db29b0d394cc4ce8f1c72ba8e12a6f3bd80ed53781e081adaa0ff4263736620a6af29c191b26719e1a3eb71ed50cfbe993911af2b84c6d13bbcfc76b7742d65743ef991a815cdc86b640e7968545c3f511ab4bb902bd75b59063493c17e72c1e30b73439b3f60df5c7183c9eac64f77b8d89d78b6974c81d5bfa99c086b128f9dbe17939bac3b06e7a74f44020edce617811bf20bdf5169c91256fc646f5c8912536e1580534a97ecac92409b9d700a31db91ce22bea4cea423d080786adc5d7c5e893456dda47f20d854a76271cfdc32e2adc8e58cadc43f5a0890c8195607c2579f4bbefa16884893da31feaaef01c9bc6a6e18240bf53032cbc027b734712c24c210b7a09c8206378fae9f4a33059dad84da453657eba4972c7cccdae324383ffd36ef6acd0eec885c8caccef18d3157033b6a8477e519852e9a37fe9d25e96a2267a8f45e542e2ff0c39e2b7867c46b3100231932b23130d481d773d511e91f74403b3da4cd489b452477501f60bb12a84829008816cdbe065633699e26c55e93a912486af3c79aa736a26c9519b474ce1ca0a74061e69781539bebcda3d61bf7b7235bc3c8dac91fe851cbc72ebd512cc4f122972f631f0c981454365ab64c51e8c6c33b4712910a311db81ec1cbd2e4fa13a9ca4232eea02d9419f0179cb59ed7d14755c668ab124e7909af43e017271b88b21d27236cb18f3817f25f84b07d92f3f76ec886044711ab2ce2da9bf01d84af8d6f0bb4afbcbbcded144f462000f7cff4d7f3d50818b04591af0c6930ac183670f84940782bad937b031f10f148675513cf68dbe81887aaa6fac7e1805b2b863685a2c80e95abf54925a5dfbb9d16aca8e9dc892daa8d71131ffd7cb9443650c42540ea6c90eaac630feebe25d0d066fbc67316ca38e0dc4663570e6cc8ac8b07aba3eb3329c1669428aa7f7ae5debc6f3041889e07188a907d4b18d7c3b60945356a47e15a775f476a2603d03792aafb7a35f3db05422314a52c6381dcabf6221be0eec6f1a862049b8beff6bdd7165a421782c0be4f6ff71e230a2ec6379a90d16305776dc4cbd99551bf1a8ca23206bf215ee232071ec09e7161127d5c683a7491ee737a62a0bb63399306f12ff095e8b75bd4346babb503219e51e2bec04073605f62127c66f66387d1c5ada6e18335f06f0039413bccd62fc28bc406b4573eaee7f62d2e937cb7e645cd3c3e4bb272942d16353a9f04020ef51b630f1f6e0e45002ee3c909c96e5caaa3c4bb5afe3ef088e2e7ef328086f39c33facb033d235029424db1d94e80c45e9f2e6c6fd464cb3e7d18fdafe7a880b15cb9e2f118071779d94e68bcf4a21b11a738bd1d212b77162466a095a0050108b6f8d668a3899d3e5a81b1f7da1f3f8b72779948e02ade41c1574f6af41cdb18187537d0c0fb209c75f4006852951f6852d2509d621f3fcad93367577ef871766cd7c9107bce2376f9d5ad2f7763004bbb068c644a227e127bbc87de6307787606cffec564243b040f5dc6900cb8e7a1bf46a8e1003488845ffef8a367f1c02cd8226c486bad95f22718acc3476a6c48ca5145bb8ccd66fce5c3db5c3c349fab7d996a67b3d97be91f58215b736ba463ca529d5b7af57236553e604ac3d507457002148218c5a3607ab8f63dbf4da84398991a972441209b61a0c75a01a32b8f1e3d86a2890c49c6abfcac96d2bdd3299bf60279a906b2a5acb0e1220121680fefa8dce76a268cb60fde166a0abc6d2ce21e9bb2a7e4a2dad164b1ddb15552548258953b05d411b88c59a517e33fd075d67cb95b4128327ad1ecfed1c9113639b83ed8264047e64201989b10515c20827723746947b578e535029492a8e3e43a0f79d1c18d6288372bc12fa32509ce13a1766f4e1c4a2bd0391857089501faf4de46c6890ddb7bce3570dab2faac2748794109465d74d4f0646a681304688827c6ed268b2beac324e74eedcb584a20c5ecc23873cdc6b8b45c3bd954377ad7b44348c89886c80343a23049cb403b005a3be1b6ac9e9d7c5171881ed20bcad8a118b6e4d0de067149360bcd0b36f584e2ce3a2838874106aa4b3290f08145d3d8678b2e5c43235c9d5644f6c23f35b40840e429991c0fbe958fd42bc103a675ee7c7a4fddd0d8d22d424c1c101fcdd9e7dd338202f936298efc9da7f9fe6fbe5eadd6667eee5ed2f69bf2ed17e4c5a50df1c7fdf2fd146be1404ff5c9b9cd72e81bf2a13ae89b4179ab4362d90cbf47bdbd8513d61bdfc4d0b5e8c9be0708bf117b1e08b9a8e187dd73c3fcc8b0ff22be1a8b862bdd223169432ae192efe95bafbacd0d632895e1811ff2ead807f03174d9a75006c1d6ae3eb27bc2067da7ead26be4aab4dabf3a4a971c3b59c92a4c340ba6a2c428f3f6060d299b054aa1da9ddbc0b25c9117ea1dc61602ff4975248088c3a965c31f5bbf90e3cf9ef964ac98a81ed1696f1b4c15c2b8847d58626da6f4012856d2544ed3130a2efda6e052ceed43da96a4390b49045e11ef170ddb8ab169bc07a1d33341500dcf7118f24dff63db3cf941b449338c976ee7398269c8fdd789770e3a9562f8e897cf8cc8be2cfc33bf88267deccc419172a9a1b63aaf7be7e3358bf398deb6aa0229edec0d72d153eb51662d5d45ab62fe131602ff110e0cf81f7114aabee39ef86bf70020a0a8639a63081b75aea5ab40e5ebb3249196afc320ad30e350cfd6a87832da1976e0471ca4fc4203a5064269b04b758300df8f60754395889d085413046421a6edee4f1cbe507f9d1988d3f00f5a25960103231c33e8d6d4f966ad8c74d467bcc453b1c53fec6127c688fe47fee7f80e4c85d70336545bdbb50f711f1c855a08adeb895e8a31949aadb0b000815648024b1c8a682ee3dcffb0e58d0cd20fdfb136e5d5b4bc610e00bbda661d4ebb74f66d0cf548cb16be4f395a5194221123b6d327c7cc24da4f227dd86ff941931fe3eb5b0ea2bbe8bdc4d9e969eb3d4c9d1bab80d9b2065857500a92244ce35b78b4338fccf69e85a4448cb141236a8fe3772e4a9c893012e70c358128a8a944be839dfd68953040a71c3ed56463b38d470f99dcb7d3b12b62aca9e1f0bfe4749a14bcc70f49a948e19ebec5df602034bdffb37f2c7a1cf3205c47a1d200b5fc6bf34246a13e30927e7853e62c64e72861c168ede80ce25826d19ed69a03e3dfa17a75f7e5fe4ff3edaa34e8c8e07e9d1fb60b5044d5d33084f793a1510b35f0604f3e2fc9d3266011364488a3d6430b08a4308e3cd87fe6f9c69f064039630fcde6552daa4be045f402e166cc1906e93756147a98e1d7d3e6b114575d569f5ee7f72e4544d68aa3a0c74bf480ecdb6da574248e0efb9ff2e0f333b4f269922f9caec88d42bc8d9f70f842242f4d0d9132007973ef8a049c7595fa74def971ee2952c1643d1dbcf9e56c8e61671de54d79e3bf705f77f435489027663305f54017266f1d655c28c3e35434e0a5b7032daf565feb97b5a2a0fc20e8ff24a978ecc549dc592ded00597cb0c3329a03aedccadf58030e50e92b4976a2e966f0d9fe8962d3d3e7418ec60147d376f7a43fdec4c6d135ac17e6c9b05437ae83393492d3bd43a64611d2c4c1cc270ee90a318ccc0c2e29cfce182ba53423125444f7a9e0127215e33cb3f5f019f88605eee1751e9b50f852e02bd5b018d199ca25f2d2fc7254ef0b039f1da821603fee21fc9e9843cba6939a62be3e532b93dac16298e84e6a47067e799a8837847f4eb6daf6d768f2e75f0dfd54c73c3a77007f4f50b22236eee35609e84848a5dc481324c4fd507c56c626eb75388d8cc6e31758c0be12ecfa3d8fc6b5dbe01e7fb39ceaffc175aca7e2e30ba2e3cff5b15868901ce9a3b25bece8c9e6e898c4a9de293c7a819817464fbd5e670800d135822ed045a8d39c57b23a5b3293cc572b774d116e85b9736325af65432d21de9c1f8a23707b2c49646a5ccabcb311763accb81bb84de596fe8d204b5882a665ec6950551ab18e4fc5a33405c914cfd5267bca822afd66bcfd34cb6e2e6cd415434500b14242c79099a35b6afae19e2070ae669e841d32f0e2ef5c7a18219d4acf5f49973a6f871b7a04b5bc3a62b2e996802359a59d260dc4ec55293e5d2a758d69270e097392804f55bf21695ad18012d275ab2b22a419fbc3d1ea4b83882cbf2337647b5af8d82a522d480978f99ebc2a16baac00aa6c5a5822ad1ca4e70acbd11aac69c24825b461b4c5621c5ab1cbceb43f1dd0ff9111b7f1897683ad2eba616927be681a4c54eb55c9f05975b90a32c7e08518e0f72bc47c4662c4f9cfffe8684eecd2f606f23e0a41975765d4efcaac17377ff3a8bc32f98d8eeb90c75fe9d14951c0fae25f7dd50f1345eee3888a0f684dede356ddc899ebe73c257ac047b558becc508fd64ee11cdcc03c46569808ec4a0c21403d23cc02393e2b264e0afc7c38e69e960bd54bdd871a1cb086a40f65fee4b97f78196ace63884f9a983e37dc1d11e4db16e39b32f78f07d0aba5f9105508dd833291e3692401b33c41020e403bb963c9a7e92118e3ba68a3e9f53c30fb87c3e3a43119c89e7bcd0d4085191720a061fa5caa5f1e9d88bb3860cfa084c4a24aa8463ea3e33eb102e2a5dd96ff4d64d152d5dd726ed021a164e6ac1b3179b1ab32e5a8184145830631744cec40c326a7997ef2f424d6ea029149c6acd51882d935cd16a47e6f281930a0602ed28aa0c2bfed16747723279fded07962ce53883c8924f7ab943aad6c69e72ae73c5a4b03b7c80066467f311c89dbf3af04a03d7bb7e951a7f2e95e861fd31910e7d483446f14ebae49c18a70073e13836acf06954484aaf65242a71b0cf613e0d50806261879705d476a4f141d64c287e652ccc5fb5522f9604c9ec9034774624491986d22c82962d53653f0d6cd1ae1928ac6cc4ee05aaa30a6130fd37104b7ea4dbedc618730e8ff7cab75405bcc4f2a57883b398277927317d6b925b7af07e18f8f8045c5924500221f452e1743658be4aa8a84be5ae5449e148e9ec68972216b9b9f93515fbb624f4cde8e2924fce31e0f32359d278bf1958104da7168fb7f6d6a921a904a255d7333c4d4f6e67b30e4f89afe8f3a817541df58cac5a370d75b6eb56dd75d1fb5c69f89a87ac8e086e8c2af4ef00a978687fc81ccd6951f2dc81f4c9448388de7bfe2f5def19efe94197d5091bccc649f00c3b7fd8c6db7bda830f32f0ae7415a22c9fd9e4dd2c9914e426aba4202053900f1a955f6346227375d0906e930747832ce4a06b2cdeb3dd7d9b0485899c408cd2ec09ccf46171d3a7783938f6291b47f299f4f62afc9a328f65a31ac2e21e5d67c4354cae2cae1e6a6781aeb4fa51afe08983189929d53b711485f2af35e54a72dcc5be03b9bab6d3a54f84e6aa9b7f94f126b76685d1fbecef6f8b384e4db6731388dedc86d9b6622936ac541936716235c97856f718dfa30f66e1513c1a5e48a9f5914c612454f91f52fb39d009671f5439061b103eb4cedf71423bfa31f9d9826408d8b3b9015929e38f6fac259a8f89326853bbe06cc1ab4e7af365f3e56d2988479e13c77d39057781de5bdb967ad9864b234fb468a5082657e6912a9c075f9766244fd5b10222a251b2717db5c4e483739f2df92709328c0c2a602786e8c887cd58908fb4d5c539314c6880be59b275f03af15e07e7a308970585c6d39b2d09717cfdab2bb41dad001536b9403bb3260395eaadd85c15584952c698a387915b1fe1aba2e1f92c53cae2ebc286c380737513dda29ec928b1f9c9b0970f719f4c04ca84dd06a0078e00c712731dfef8de1a943a166bddefc6a4da662492df18a3118d317e4cd2c6baeb507eb688a27991628b78df8e59eab12b2828cc82ef4c98b563cfac4be482ea284e1daeadeef87731688e09fd48761c3f092d709ff2a34bacc9ed4739cba6881eea7a5569579b683f37795d3dfafadbdbef501aa48a51d0c1063cf8dda467feb552b0647d815cca898c87fce86f74ba3c7340c662d5f5a4d0923e45444babec8acb904acbf432e1d057c7301fdba0728a196e2e5a150b5e65561072b99b53cc1448da74da7b9f86a8cc326b4da24f1c2044b8e2c6de91e350653180a64c53870c66b92889ba4eadd2075829ceaf9c9eb1d22ef361b96b9e1bd3ffd8038c37eb3ac9af3082cbc586dc8fc48cbb483642e797538741048e04b0c709f59fcd479c9c20a6f5b2b99d6ee41b7ee0b8e14dc8bb122c914a202449488449a7232927697667c3bad5a9f4cfac2f2eceae0caa11091346031403fdd2bc879ab373ddfb7baf5b6bb8f748e426863eec2ac3613bb9f9dd0d8e7a929d3d28df5d0e7ebd0af14329658df80aae5b870bcc016983dfb58688df98d34d52ddc8cf7055d77d4b6375c6d566e7e5e47c3bce01dccbc4c34f714595a3fbd1c8013e3c1f099440b36174f0207f0cf63b06d64a3559040ab06e2e1af522befb56b269130a54e5c0af427cc99394cef22d13e4c69f93d4e85ecfc4214333a3b3eaefa108e4da7fed6e7a3195c05fbdf86ae4396ea6d47dbf54fb2141797ac7431d456af8418f9cdcb619fa8598f09f6f890fe288ffe48780d32bf908fd76847c893d2f738fca6e28d645d7e277f25f3136233781d903f570082b5bc257dbc440002f1c37162a6454d26b02af9880fc16eede59cf7c6eb1b9fe69c01eb8d7d8b73ef5d34c279cb4b774f90e2a0ed149790a0efba3986486c6d60c311220b7c39fae952e8a004846c37ef2d91b1fa6d28af98444513bba5fc966c9678e8bec553b821c2b9d8da6ebd55be3c86bb0c0f4b35a6bc089f2260b2946927c5e01b26a9fbed13340f2fbac8de064f62a9ead79ded5abe4e6f28d56279cdd7ae776b4aca103f40f48aa09e0184ec1655786056464d54382380ac6be397d88cde77398e4d692113a374188e0bb3182aca5fc56329686f43651029e6655ef07db41eb2c9ffc1b77bcb020062cf286ea69bf0197aeae09440215bb1b65f25da01a8bb08d4175133eff45ebfb0f2892a6d6c79b72c2027f61bc7b7b7f4cb9d123cc3f91def73e5cd50f806b2d82bf479f9edc3e30afe3f388c083972ffc8448b8c4fe180f62fe00d8664b2a0a7a8e132113b19164ef2c56aa37e9473e30a3d884c22e035a851108a9f2736d88512a7ff51830f8c3f2a401d1b84cd4d735b15201036f0bd8541fa1400798eb3eaf44dd710bcafe6ad68d3a64e8fe7ae352db0b423b4892aa94de80f7d3202ee2a7b1a2e4a8853ade839296b90d3b33d6c94a22e0ef8b9a915b14207fa30fb4fbbc60ad275d0dad0a7420bb2443c11aa74d66f83f29fc63a9e41908d44aa9d423b343e783ddaf7b05609355b7bbf855d146faca705983a32acfe8031aea8df8ae9a44e465832f6fc4a43c9458523f886c82944a2674874ce80b60f179f142b8ae42fcb08f5079fd014391c0cd9a265e3f08dcbeb291806684908a9d0585508136599b38a05901ab622f09d2762b977d8609282f462734e6b28085188cbe23b90bd04ec1424c3ce5c710fd8b1dd1a5db9a6c2b64286d18e0c9ddc091d9208debfbccd98f6b8e8fbef28e48f508b44dd5ef995296e5116c7790c727eaf3ef16ca68baa3de93726c7f1829739dff98b7a775c99c03345d1d1611da2b039f97a7e95e29bdfbdcedc4a78a50b3b7ef5791ec13b4fe6f6de04862c0b7cb867f63e07d5a04fd856d3b05cd6970692e65bdce86f2709fcbfd1766d3bf3174b34721b7d8d5ed79774e95dbab509abe113d77309b3aac56cac0e03eeca8e0745243bff6f70e80e84d346550c9cf0471c80ab2dc573e63a4b8dd7fe7da207370d050bdad2378a1694c2044b62f61147fbb14633564c7ca320545c0d64d25aa4e7678468501fbb44ffb81a8c27bdb97cf67837db5dccacd96bc73c99a0dee4c2370543aaa1280087bc38c8878a922c2ac78e88706e1f7eaa65028fd1fbe5d8f0cba99ee13c58ba6d6f246760ab5bca812e91f717300bde89273a0708da43b9b5dee488f34ddd868fe3d2c75997e766a52e55b54c66674f8c7feb3a0e3d0ddd01b68af8836d123876efaf660b01b9dd62b10502d09fba910c854e786f8c1e1ba169072ed599fb94aa719e4d51a89070c7b16e462dadf762ee301efcc6c517d766479cf9e9763c60b5c3c0f865e2f8355a094da7dc3c2a967238df24ef84adc8969f43b2033fde0b85edec5adc30ad673444206a532a52138dfd687d97e49132337abc4ad122caeab0193aa10dc399ab86599c3c8bf24dfb91503f55e378d1f0c0028404725f5bc944da4f8987536558bc21294695d420156af789498cb975855fd7475ac1ad51a803165edcd5d8d1502ba258a0c50323bd2f7bc6821edee7310e0caf97a079f9068d58c3f857122a220fd17f34c06033d4d2df15b98d7aa00bc3ed6cbfa40ee840a038a63115d1bf0dc85446266b39df7b4657b81ab0df50450e4e74ddd101a27814879aa671188456a8debf5b6f0a4c4c36ccbba6ca6d5adf602c007965d680676544b4001816c58d12aa2c1a3d476389db105920d887a34ecea5e892def2815517df194d4c380ade69b184a08b90efd77b1409f8b928ab21200e7741bef66c988937e6af4026be30c81bbdf7f0e66ce71fdeb1e6b4b6e237b27a284fc89b35f7a0c5e2c969f2c0672eda1a1b23b1cdef546a4965a668ba08178f83a965ed33f11ce52d5dd40be384647be550446bf76a718b961a543c33cc030524d8d4ad8da2b42e873b5916f4e6cb3ec574d5374e81462ca6687b8535d94bbdbd601d6596c7891024fa7298ca8b6c7188c8599a86d2d7de2fe507321440d4751f38294b431e661b862fd5064a3b2581036cdf828cfb3e69c9bcb135a022e6996bf81bacf93000e8a6f821071ae6b42ae017c7b505f1b52f936715e9c882a808c976bac87601c6659d113f2aeda555e21d7209a6e89cbb6b1920af625a599a5cbf5720e12e9884a73a0750af9a3b7a349fd79b4b35259fb66e14a4e86d316d584f8372a9096fe5e9a673d6800111bb2a4e808ea4d269f7c362116b8850b8eeb07496248bc8f03ca0443a457208a71a539ec8eae3dfb17669366d917fdea0901918d28d55a574203e9d59554e8d2479e736061ce0b04c60e28050e77030acab184f3ecde5e28ffa9762c390612f94b33be14b36b63eb26a475132149424b4b9b48296589097609bb091da96af27c33c9453edffc0f1f25d595f6b333cf685c0af71d53ef93eada75f2bce16f19ca9d647f72f09371a60ceea794db277f76ca1e45f98aca587ce4bea152de0e531a779281d0c9388c7e3e61fb34cb20f6b297c5c88fa9e29faa89498f05c6916fb7936542d2c2ccbcf9c7cda620ec1c7aa25d6a3d3389b49e696d7e6d8dd5d6f4879ea8dc2a54f9f787521e45f6f2be4c2dd5f5f6726f2cd26ab5bdbf468e62a9aefbcbdbe60f98ea1b77e2f6b721fe80a95e963f5416edb2bc7df937a2a22274977fbbf1074cf5a12d8a3275c6d758f9b622dcfe5b4e91b5b7d5684faaabcd835ea2321ea3d73ef62569fbdaf9e1d3d25d5b879e284d89867814d937d949b22c879ee42b59d26ab592dfd287aa7df969edcbaf95b497f155aacb86f81a45ca5428dacb9ee42b8daf489df6e6a7ea7aa2a7bfd5b5fc1721faae957c25fa1721fad0df30b03d54f9fb6d2270276c447cbd110d0dfd1efafd43fb8b5290bf395ff7bf08d16f44fc56548476f23de8e5877de887f6df30b0fdc66fb78722faa1bf0d85bdc649bed2defc55aa977c4d5f66f2358a249f34c593ffbe950fb59ffc924fe0ea24c3518b5c0227e757c392728344bbb247319cf457f4677b9ba67d515d656fa665399bcd4ad9879f6abb9f098fb96b10f0b9357f327fe46679a6bf4b5397e9efbf99fc49afe5efbfa5fc49efbf95fcc9fef9fa355f43d0cfb77d9471a9bc55dbbb900435b8af47555c47a8f1631f96a2bafe8abe05d906f5f16552b9bb90892ffe36d516307afaa2baa23f7bbb3380d1a1eea8da5eaa2d724fd3995436c3f2b5c957a98c7efaba345794e9ebbf99dc69ffea411fd7f2f5df52eeb41fdf4aeeb45710fa88de32987df9255f43d0676ffbf9a354f6f6db5d427d41724b3e69bef8a5b9bfe44e5b022b296f89866605010db87b687d2978d3cd5edb27b5eb5f6537c769c1aea0e9f769567e6a96e59f7befbdcb9fa55fa21ffea9b688b1cadebea9b6b826482819b941bf9dc42649de367fd2a656677c45ef952d1d092b754de015ae0ebe885fc2fb49ff7d3b4e89fb6b1af7fde58be2561f49312f75d1458cbe5ff62b4e1445b1f63bf6e1976a8b18b7a6aee8a74f535bdc3e9ba950faefa7ea047227caa3705de3baf8b3f2453dde3677129fc44fe5eced8b33d57c5295f135c65fabb6df9d41de4f16e3ceb718079ee76aebe069f20de03a947df1ad7a73e154bef8fb6f2e9c4a4efee64ea4d6121c39458bb1baa83149fb737e7f7bb74197c0cef9fd93da6fec9638c072486e77f9adbbddbdb7cb01f9fa76f926f98a7c34bee62bf251174221acaecdfb4e97b36081719fd7c178f0fb402f77205f6174f0614861299c9568f0f1ed6c673bdbd9ce76b7ef767fbbe072248cc3afbb8d82e4cf3f1f153a73b7b90824d7e07739f36f8d5aeae0df0ee4578feacd2973f0f78bb05190fc160ac790af1bf4fc7a830e8ee51681e418803fd531e8e31ab524823c6a296a294637e561f00b8c6b48bf50d8f2557c6cadb5f67214a9f81604c5515d3b551c5fabe2db7d0107e9a37fd72811ddfb4c922449de3c8e227df4335f5174145d7c926b140465b24f7c9d76df7ebafc93c56299df2eb0575dff5b317bd97bea54ef66b2ff64cf944dd5625cf9a1aa2f99ee26a65caa6bd7f78771ea9a7fe413c89d99dfc0b72fdacfefd4dd12eb1134fef0474e9e5f48661d8a3f92dfa9e23a86bf3ffcad817efbe27672b4eac88bc631f76e016a507bd1ecedd02b02a08bb4b5d6f209c2563003f66510d818afbe761d8fe1614c9ddb46ce0eae0fddc66912c3addbb02667c2b050c5696242d8132a68b7605655c0acaa2230e3628aaa2acc85b9aa2b2cb5d3c2388bb9680730593001922db29d168cb6462576383f0ccf136361612c1baa415caccbe35e615cf6543cc47b0d925de7bd883defc3efbaaeeb3cf1c3d9ec99b0377b26ac49268cd2d02f517b263cf44c98022f141f65b4674f830f1ffe87ffa044d1b728a1820041649a37f3bb7d260822a21bc71444396dffaf3efe22f55e31d1d2c243bcb085f7dddee250c543b2c26e3dbbf937750dbbc9573c6425fa0ff70a6310bb44881045218a8af0878f310e3bac4200e3b0d97d68ebdec3ff2277cc57db9bfc45ee367e62f5fe31937f266cfb4e035df826be7d17be790b5be4eebd8ab5540db4c048c2c75936d5764f032d70961d9187609cf7dd133d88f740785e47e48178268cf33ee8baee3f741c8ae8c3fea153891e84ba12f1166057ff037f91bbca1d80b1ee15d6d5b6003aae5455bddd5c96165602407e2c057351e12400f4fc780b15ecf5a5de70091e4e10bfe2be27fa55caebf8cfc75559096311e9f0aff7aae86dba44d8b9a2fd6fbcc87ccc8d40a819dc6efb508deabcdbfd8aab701588f06dfff0f97115cc24bf92087c8475fb9c73468295c390880228a749810810451fdec4ed20d410ff266e579f09e32a4638e9c3e722f53f4407856f37150fc1591809d6c24cf01696e2718cd5ddeed5c5c2381e1847c4c35fef959aab52355ba16ae691b1f290aed354db5335eca87afbd5c5ba59570b7f0dc148300e6b6126a58ab7a4602eed8571615611fd0a27e18f8bc0b84be2ad229c741581915cc7f6b5a9c2b82decc8b26a8a714fa8c2154393f9a50a6300359a62d0ae9a4cbec2bdeaf761de25425c808efbf8f847e439cbbf8d66d8008e9cab1996715883f73b7b9fb449faef3d496daa2bc41dfec59c003dce319fa61d338603871f09ff92559ac22a82a74f9e1e725f699af03359a5ebe7089c2b26dc083343137e1dc18ed3ee0ff27750b0f4cba1f25f6edac138fcf749b334c36838cdb08e7f00279c279e22f1b73576128c0c926ec1c834b1466bdeead986e95d5fc3e7b4c2844479ebb255f3e545c9004df999b67a16d494c15a6092f4a1e74751e5aae7df604587bdcf6ff37e46cf7b8573c5fdb1237298bdb17590c9e45c7122b092c54cb823dd820926903bbb30a6258141defa72e80fc0175f54bf5c07d59bf8b86fc1382caa07c8dd0ac057925a919424b847f8c751262322e27c00039040027b97fa8a747348d700f8c35c07592820eb5cc9aba49cbb54b72a14bb3514dffbad9f2455f03709821f7e22f875b81b5eb4f0597a9ca7c7e62c5a91df57ed08fbe1e7f1350c39883fecdd2ebc1f9a8b2fce377724897e3371fbe56f47609b3b7c7347e80795335060007338cf6ec1a8441913869a8a1159f8695d8d5470cc4014b4c442e627812476c2297abc2a704a1b59b7e60bcf3c0112d292122c7c64a7681992000a5396d44030852af8c88653707c908096d7e3b28dd167848d9a3cb029b9ee79df886edde0d93acfafb1710d7bcad0e8ea2e1986e7b74b64bb80be166d8912a54bc949d102654fd1962ecd132f28407a771675e9c8de6d111240ef9e24e98a5e087fbbc0c66b65ed752d2d6bb5b2ac95537dc5f5326aa9fca55203248c1bbdf2ed36517e78118afef677f30f1c4511bff1cf47e393b6d32b3f7c7814457ffbc04528e27caa3f088220082e3541ea60ad0a83194014a73ee224e5b4ace2785b720a95bfce1e9da1e67e929cfd6ff4c512f5aecc0ff0c1e638fea93dac0ebe97e56179433cada9285a3a667520aceb8ff2ae6424a7bdb8cbd9a39f96251ae55dcdf68b7cf5aebc2b8b71e56fed5dddd33bb9c937e05d89fac52c34023e3d7c808f1c6f4b2cc13e81386320ce0f3675957df931b5c5edea5f28f5ef975122bafa21d415450ff1aabadeaee2bc9f5e55550e4284b0a1282a334d23db679b691a9925e7b13755d45654f4f4630815045f3fa8aaed45587ba4edaf6a7b0a08c97e2d3ff6c4d72811b7f4cd7346a3a1f930abdd725ab04e50e3317afab75f45f44da3d16834da6f9aba127df833992df6a7091b94ade45122baed83887e7e00f1275f45f4f36dea4a7bdbb9cf7deebdb7cde823f822bea2e845b1d8abea3ad5d5c7bb84faa52c268bc59e298778308489a22837f9cc3455de61dcbf4c5dc97e7e04af86502dc681f8f0f6cf0feaf845ea8daf443c4ac4690369bf5f7fe4dd282278a3d746b72cff3c8d4e59ac8c953f2b5f16c1c6fb89b6676904b199ba76ebed694d15d34d9bea1b9d95fb4db544a9b1c61a6bac355fa344f4914bb0c2f9fd7dab43b2b603459a224c4444bf212918f4e8afe9d348da53ec65b158ecd1d8cb62e4506c086a68085587d4f5f621bc57f2876e24bf00e5eb097dc1c8bb741cff02db47daebf182d8933fd5ef4e7fb47daa5a5aec8d62363524310e247f0d47b2dca82ae3eb39b4c109142b86fe1cfa9a6d68e8635a6bad87fefc15691c8aa143e9d3de86a2b49494c562b219394660480fa94ee3d7fe6e1323475f77e8bf08d1518dc921d569e8877e1c526f8fa977a3af3ff2448ffd5009341d3aa16db6a9b6a232e79f00c3144447d9ef8fa927d9cbbf17645c3e2e1f978fcbc7e57e17f67bac79932a612348f6e9eceddee3283349721ccb920c4312dde46cc6a53a938536d1933437924649d3ecb40ef7d7687b8f6359ee8f85b55326d332f5beb8b70c3d656f5fb45de8eba5b22c5124a63e3e46d1f2c7c7bf6fe8f8b82c65bf7fcbc4377f94ea747796377660c1a6e41226d097e603a6fa289e39cc209861999666999a3a2dcddfa48a950b4303ac076d8aaa2561478cbf1f88b7440502d84ea1cd4803747e7f3e8d2449efa1481e96294992b6ef7424b50942dfd824c7d7237f2a4dadaee46b1b8d2c5a718e4fe3d338fbf434cdd35bbbbe4ae5713c692fc6485226ca449928c6cea78d697acec8dfbb2cf9fabdfc735457f2471b8d2c5a71d66828f9183be95fcb3f7f05a1931cdb9e9e6fb793f82213def6b5d7e2163235efec08f1458ee4abcd974cfed4787c7d691ec62991a7e4deb3d96c369bc546bd49ad4f4c9ee769e327ba8e219d4b1d7ca6250b30c0e14ca4b053fca52824f33c6db67f1caed45a23757d02691cb58ddbf5443f919074de79e7fd7c03483c6e17fe1274e2eb0bcd0eb5207e7ca8e9b39f96a6e7c7ce599aa2e8f9b1343d55dbd3d949b248534c6a1d925ad3d2a51a0da7f94a7bfdb71ae740ff8dc639184932c65773d45362fab25aca57dcd3475f545774edc2a66f6ad9a7fb695fa36d2ed5f571a7290b1145d30e0afdf351bedaae8efefe99ba32f5d988942e31d56a34dc091a8dafb41fff565bd1d3c735be4ad1388a95454ff93afb13556d9fedb7db49c657a94e7c713f1326bbbd4a75b67fd1fd99956c2a7c960f0d166a4c273ad4667cc9a1849a8d2f6770c06587619c5ddc9aa730527cb2c0527d7cac4b0e0363bcb7d8a5e90c1d67e98b5cc33859a46628659625878131fed115dd817186fc43039f1db43c34ec0943e7063d1b67e36c9c8d33dc06381c6e033dbed6e338e27038dc0638dc06385cce39e37057396c4027481dd3a440cff96bec6b65993e942e4f1a8d967ef8a7599a662d268ee35886e66f53ff5327f2b31c6bfb34f769ee1d7bfd4fbb7cfd4ffa9f4cd154f56b1a5fd36d6a750dbb5ef5d77e545728cdd10ff9da8daaa83f1df5a784d650abb68b30faf935dd22f7f32f94f9f76b264dbdb4332cdf04a18b27eded8fb5d89be5e9b4c732769eefa4ffe427eac1c9d7f2cdbfc562efa43fc6b1f9b7b27c27fde5166b34dacf5e54d36caab67b3713fac77fd23f3eed9fed37df29a6ff6662bff84e9bdb778af1fd27bf99305f7c27d3a9e45b899d3a260b79eae0b13283a6863bb153f631d9a75b26fb52cfc6d9381b67e34cf6b1518f7ad4a31e65a5ec3c45bc674f92658a5114f5a8473dea518fe36b3d8ee3788e7ad4a31ef5688e4636dbffa7303212df667b23a3ff7f1304d1d2a4a8a1c492c106f2c4bdcde681cd66f3c0663b4f922449a42ee2de661bc971b4f5d166f3c066f3c06613c10f4f9b8d4898166d8c073210b143484c0d7b4f20c2450ca314464646298c8c8c8cbc4871b560822ebe082323bdb536eadaa88b46298c8c521819618c8d8c925c5d417c5288b182737e5fe7fcc4f3ed7e8a919f6e929ccd6633f2632f134fd27cfbfb843affbe35b994d7cf7daaebed27dea7bacefe3cc9174551ca3b712296c4bf7a6a9ccd66b68b69090977ba6040a14284faeccd5f3f0ccf53cfc499284a795d7c516bbda29f529e27bef04290b42029be0b1f60586dc80a38e49e35746632ad4551dc2616c55f8d8a662f8ae49669139ba8388a6369be7d71368e5ad4a2164badb7b8c5bda2e2388e23dac519da4551d463148a9e208a9e24d0dcac4132678e25d1d9113ae2cc2923471449929c7d6cf6e99ecdbe2449994c36fb184992e9cf54dbc9528bb3165714d12e6ebc672f6aadc5bfcdf803a6cab73f92a2ad08274e8d24f932dc06467d2cea33173156b48f353146c662680cede3c85754ff8b107d8645cec74ea2e37e121d55fbba7cb0e46b14da37df007a923f8e27d8af6b8523aa8cde22737e230571ceefcbd8afe8a7e3532c25f7cb643f9bc5647cf6b267ca32359ded513cdf3e3942e9539331fe684c6a7d9b710ec691fc185f75f9f70a2b754de5dfaab27cbc9fc6bf6fa7a26ab499bae2ab3e7badae21e0d3b58b185dfc73c6f54cadc962a318bb50634cf6225f6fd5ec47f1c7bfcd380abec6f8d3b52c46be56cf5b357260f3d17e9b8fca5bd549be815b8582e86d2ffecd050a223ef4224731c46ddce6a31c1d58a50f999b15c3e19c9094c00c0d1ded671a45634faaabf9682a93cd6633f257f3c34f770c555be4be774cc3e8a7463bd9eb5dee94a4c9647c95a5a4d6e9a37f93f127ad65e30de54f5b648171fbc19d0121dafe2dcef86aea2de3eb5497c13857daafe7cf9e5457a8934be150165f3455c4212dcdd0f46334bc418110552ed7b47eaaa2ea4cfdbe458c0e829fc39c33ce612a5c85c3c29ec3dee900658d9e3a379e6889d39475b5f44776dc659570579717eefa5a9365953aafce4babf3daeabcaa58259c85b37015cec25738ab77393b38c747e9868579857d7d7fb3ba0fb5ceadef8655dd67bbcf769fed3edb7db6fb6cf7755ff7755ff7dff7adb67da5af38ac7f6394bee2ae325a7dedbcca6ec1ca04e92b1ebb052b73d5574c760b5686aaaf37acf72423e747a8afb72b07eaebcdea78e8ebcd81dd827df1e94946bef474ffe55cffae4ccc24c8cbe93916d070ae239f9edfeceaf97659259dd3392f9dfbba6bbadd575a5b376795ccd0aeb0f9433b279f3fb63567ee5a42b24a4cf6283f6a8ff287e179b3b8f296300c3eb21c80a1c147b6dfbfb9cbbd30ab8479e0a3fc1809939ead147bb132a19cc6d257ba0a6f2f5748cc85824a4eb5c26ae6ccdcd6da591b2bec4ff8c7cb795e573eca542b8c9fffbbc249ddafa9f2b5d5b3e7a5d5c33f3c7a7eefed1c8ccb9f878f79463b18078af782d0f15fd5f64b8e7d30b01df391cf1f7c2f185e34fc93cb555657240773059873e65ecbb04a66ced435c27ea5a367130b48cfbf79e0a42138698d5293b070d2f7fb2a497c26615c55dd86b9e0a613751be6429eeee5b292d65e95f6ae6ed6cdca4a1e9567d5f37b3c9498afd5af6befeb53f50902a9b0bc09bcfef26025330ba4da12d4b3f9f5d154ba4a5be92b7c94dfdbda6984f3fb6a9a59798f4acc175f83a499cb4a641e7c94bf4f5517645ef59cde57567dbd5920153ecaab97ebc3e30a028750f52b7c64e55549a0cb9d3c0416e69b5959c9366dbe86a399259a595e95574595b7972b72ae31467254bb6e8571b90ae33255092f87e704ff66c2de2e9a4accc7aa92f34375ec63078f73463e59e9e41ed6f8a7e7b71e153ecaffa99e9577e561f0e70cfbf009f384737afe329c93cb4ad796cbe5302f0707ebdccd5a91956e183ecabf5a3b1e55f7720510a4abb8a6f2723a6772aa15d67dd5f397bfaff29f49464e0b502fd7b39775b33c2bac749b2cd8d71a9c84b1d9a5310ec85757b76064b6f4a26ec1c8a0e94859094be1ea397f57cfd7da7a2705e34c7839572416f8287fcef9ef9f9e737dc55290b6306e1057b78073c55b527a7e5c05e972f57cfbc5df95ab3c1078d7c3a333b8e0f77ddff7e4f59c9f3abcb3c57c2c89fcf663aacd8ec0af6f154258a488d08263c80147b67dc24421a1bb223cd9b2d5d4a922b434698f015a2e6035e9ef0e9ead260d2e008f921a9a7448ae61814d930e494fbda18061b744e183a5c9bba1806114a7c9e3a727e4ecec58ae53dd76ad5015a5a9538de23459238c31d6a3430023332429081818411de30f2c8cd587bf0fe3cb33e66bc76ddfbfaefe02f7165750c7dffdb5243e781176efa5be8efbd7fded9f7a7b8b4139cbad00bffd5b01ee81fa5c03588c3fe48f84d8c5e8eb9412aefe1189d06363fa970038261260a37faff36e61bd7497c1c478f5f071d71e99830d75b8faf7df3661e114e9dfbf09e486091c13ec0c6fc6b460c590b161c8f4efc36dc2c6c0c78a19e34683292b6ffaf706180396ab93911132e07230c1e318404c026ad818f6f40f6f0d366043ffbe440b9b2527a34be1bf1ddc19a01df3950368623e741e712cd70e7cf54f0c4511a95c5960e95fb82f08d3744050ff5edc4eb8af2f5ce8dfdbfd80d1c9b9a47f0fe034f4efdb178072faf7e036e105e9df6b1b82e12e570ff0d03f705f90ab74ace63ec1288ea3288aa3288ea3288ae3388ee288eb946b7f8007e401a10cfdfb713b55d0bf0f41cf168580c24b1817f225b030563d6f1f5fe47c59e3e50b97e779de07827d5943d033479273cef999c49c73fe007cdbdd1721b6245e9cd9927861b396844db2b633e56ba7d417e1876ff77d71b3ddc37fafe52fc2258ccb2a93035a60be6447e497ca13605cbef7de7befbd5ed775f94ff7bc256cd8a0e9abad632424aa159892bee319d698f7f10befa56eb67f1c8a5fbdc2f8402aecf7edcebc45ee20f89fe7003b02639c808e27c03824a42ef715bfc85ffa745fdfbe00fcfeaaf931f901fe162ea6fa17f37eff05b6632e65f5c62f8e3bfcb21643f0033ffbc5baffde7e398da74175f5e096b01954a1d20f70ae87bc054a16d911f96376447e0fbcc71e0f41d003bfb0f33eec1dfe3cc58a5beebdb9e3ca39779ee582048c8b94fcc78271b9e292cbda4f67674b9b2d613a6a6d7e3004db82046c8b9420605b74e43e5a6bbbbbd7f76602fc0ffccfa97b12bfcfdec0bf4ff6f2cb35e06bcee2e3efc31fdc7eb9d47d7163f4107fafad0a7eef710dc497cadd672c7e5b03fce1ebbb9da274b77fa3a032803f44b7199cb91efe7dcba14ce0f07bf0ad072e00c889bfcbffa938bfa776363c4183bacb3fe61f35c01d7f71bba7447f5695547d931ebb7d01eef92f5843d0f377523713dd879d065d78cb207ff79909e324afebf8e5a1cd61d64391bab73e6aade568910de3ec7bdee77dde17cab02878a2836fd509e09c2bd9ed7b1ff2d04bb23d19861ff20fbabe823c0aa97f1cfd20ec51f80b7bf1b2cd60cee0898010cefc2be9799eed14c3f780f8431ee98d1e3f2186211733a02da1d5feeff3f771b05f7bdae3dc7bd0038103f27526ffcb47e2c95714fa492e95411843be4a7d619839d0dccb28f6ebf7fee602c5e6f63d8e020ce22d8d90a73e0c06322580e1ecfe7e2ea6926e9cdd67fb7d60d6ff39852f52f5fb1e94c72f085abe3e61fc9ee771f57bef3d6db5d5f869fc30e3cf6a8ff4f8ea14fef87c85d1f5478a2ab976dd7aef81dcc32f7087b2efb9701adf731ab97df03f4f95e0c7e9fdf7e0e7994935541010762a0186eddd6718d8c654be9704bd39f8b88722776ff98abbfde0f67c7bbc90a7df37b5dd19dcce767cf7d3fdfb585d41e8ab7da9dc6f52d5f9e2f6fb31ee54c6370798725626d1406532ad359aa6b1582c4dcb2d93c94499bade2e93a19d6df39294a1361b49d25029ad438dbeec6fb45f4118ff86f29b0486bef61c7020963a0342b3f2cb2d2bf7de9b4be130d5fbcffde7b9353a6b913b8aceca8ef6242f6b9b831fad7c594a7bd9df4a9b8dc59792e9df68286ce5af525ec94f601c5afe4d0642774b51d4d21f923d0a1b5f918fd25f918f64bfc2c8274eec1285ad46ee5f918fc8b7dbe9c4098c5bf206cc89655dc62489600bc32512e32173c69049a2ba2129042b1a1b343dc29266588c9b7d87711867a4761526c10c49326c695a9b2a694f6e9b4c2693c96432dacfc8a7a9b6d76c664a1b1f4dd3bf8f8e3c6aa9a718741916d3d44c2f28476d8ee507118ac6da2e47534c972cc0c0fcfbd6c554297ba221da97ea6af9f4f26bea3a75d56b699996699996e997514b4b61789e36db3f0e677349f432d5f69acd2452874c336aa99ba5ba2ef5b22cf9bad4cb37d5d5f6b45c4342eab5af997fb3d55ec6570c744dbd39d9be166a0f3761c248d1e3a38c091398bc504386dc0969b2a400c0992c5ff2909133431a59150d1f6cb2e890254d578a05f4b04223499f1a8e80b1697408e34246480d74c46051b1e4420b408274a1d08311324c963b3d0649c101e88514368706e4b8aa62a78bd79c315fc88480c20d545cd873475f5161ffc45b285045844f142a425a08c2a5070e2ce4609206470a24bca0c21bae1f489e4871922bc18d0e3800fdd15c1d38950048891faf3634c0501102c5460e546ed8a15d9882626649a1415066083a1386c8122d195ed684b17272117283911a34acf070e3042a3f82c8f141c30cdd820a2b11aa8051b2a4481f3144a2e050824447ce858f49074c4e5418b2248f561225236e048a81cd0e2eb461e351a5f0e1a48b9e1f7476b890820577ec543932269093331f1415362c8981cb9413c8745df9d8e1070a603f6adcc1937374c0a648d80e677a30a2e52569c70e4b6290c10c179a2a345891d383861d31317c2d804e212f55eaa830230e2e64730929505c0902a74b90193f80bc9181029a2067027d718185b2c91d213b982c29d365d09c3442c884704315283937d659a1880d32a4d04684153dfc01d3838e1cbcf0a0a9a4b013a790144242b48ae899d26203c8cb0b5f7db8c24ce920053b5b6546381202142561a028797205054039b414251b7460b5897363900e1b488e0d62727845211428cad415113232e66c71f903a7026d7a80c12b091615d86828184b1714a2d430458f172f7bce78cd10b6e785373b3069b21d780086c609519c5cf5988202151b4eda7459e3e6cc9332398019c4a68c0a5c945c408d095390e400e392e4fe98620187ad3b54ae84f90184868a0f101d3bb0e4b6fc64b111a78611332ae4e06445e80a0dae3a2ef4708286860b2f0c4a2245860f0f10214302095fcc58a1a189fd13b360b3b22107ae246df054a113c8481a2d5f2ba0d12be8f046abcd8f385c7474e95124499a313f52d0f34733a9e3429f3e457460b2839b22245e0add2006871a395c2a4238d1a242912d1d5af46020e6ce9630355f3fa07c30e4b9d166900d204dd060e08a9a11cca869f223cf9214609e809911888b084eb2642c1f537ca809f2454505424ec8d8f9c32327c3eca2430c0c2d5c51a2d5e160724584852a5b6c4c7193a75840448719ac5408d483171e1a04e93921ac0d95243a851b084d90234fa69c50662a052d55590ac9e071c2ed91f535650c0c85b2dce02702b02b67d2e4d8d1e34cd6a3e202657250799387c80d3dbcb0e10c9c1e33c0fcc1f3c948d12449993e36a840c684394e7278e4e0998102902f2f74903468042d3498f838330215316caa0cda716505ada5c2c401d0953569a4c450046bd0923a69a608b2a18e569266042a2a67badcb1936305970caaad3f608cd880828a906b861e3dccf98365ccf7a349d894262aa4d047274931ce5191c16acc91a1090f1878c073820ba0205ba8e809238344050e64ffec6ee880482039726ef81368842a5c648610b2a10e1595afab0312415ac081c313377ef0684059518a94e9e24aa24fe042214c0972709861ab0699332ce0a05384081929fa480781ca54350964248b931d04e087500f4f7cc029e4c788fd33374981a2c81919c614d9410d16204afc94e1c146871c3574968a1034c688a121a7c91218529860e3cda0365774aca192a2cd15383b648099214b9b02a0d066863d65c88415fab8d44025e68e0e2b21d01083081f306051e982e6070f453ce843654c983747c0fcfc088b828505ab8a161354bce982230919425685080d519131038d284008cdf85450e1d510420747a11b9654099173e1061d3da840e44b1349c14b98810a980e7d7a2812d6f95265852362f064b958297494117405a644061b85349073635096ac13a8b2747e5eb8d142258484b04048003df931c29f227b82d8a072c0a01d5c368c015287057b6787094f6c40a18731585f8e1b11315dc8e8f892d506499d205c3b9410eaf166880a05d0c0c2911b59acb0d16ab27a0a09a99142ee87122d24c506446833e7c9970a24c05975c8d85164072c47740892428e9a2231f0d973c44794292b30a0d103031e1e609803a4037c65007b9e64554109f3c60d0d60f66441c2e7898e205f9300c430c3881513414dbaeaf83842a56506d68dabcf8b022036b0910128070d513aa85a92420f2b5970e8a2b15278200687acad2f74c26490c1cd1e3238c0fc14b9faa182863067ac1489e1068d2f1b26507d6d99e1421130da4707d66600b6a64ac68f29457c70c066ce0e1c5246480346f7508367908f3d25ecf8736324a2a7880d2d3014daf26da9c05d4699385366745131214b0e1dab3eb9245fae0f152472a8b9717523d00a596a8e68a510a704316f70e061bb74c04bd80c55ea9400e4cc912a23225469a385cb911254887bac16346076e4b04687122b5357596f6ef47812e88897af05243c72583052e4ce8f3a6ba47c91f1839507852b3b5414d59095854607af396e12b0478616365d5448b345ebb00057202c6db6d469015093fd61e34a9b3029c0c9e1ab92a2822b4872d0d2e18616b64c51adb9e1041eacf80113c2d513ae3642ca1c1103484806572fe4e1b1640d1d283ac794088080904024cb9829466e943b65b06450810699af8b991d6e94a9c32684ad225946972d5c4860d903e84f96313b5cd138f47875d5d061072b2580fd957ba39c989153834e0956b4d8425d72a264117227100b9a0415534faea0a020048b171252c053811c5af8c8204708d6d6072bd4a0a6871aacfa34a123c505ad116ed481c206dfe1723fbc7f5e2e247e3c410327480d2770893a7a588d5004cc931a7234dd1e74d03143420a2c548d69ba617bf8c850448417dc00d1565c028dd151051667cca03b7e8c4cb0a343a12323c8d8d237b8885cf7edfd10078a414c8a23347aa040b172c31d27dac60c3b34dcbc100625cd1b316b0beec04362bbc080b15c8cc5e80bc1c7ff6530fecd497c6d77069ded5dd74df53003f1f5775dd7755dd7755d07f5397d63d7e53d1a3f56d7a90c3ec8a1c0cf57a7f7b6af2244788f34c1ad7b6ad66475ef4fcf7b142bdd264f0d9839dd83021fe41fbf1fdaafa1ef879644daef9f6bfa9a276d157076337ad209e78a79e0a424235df84947b08c59bf337a9693aeaeb0dfdef53b0b77bf61d981b97e3bce0af35df56e776fbf4be986913d77b98b672e9da5605c97b77056e7d58014ce1577652eaca4a24c187cf4d5cde1c327c743103a7cb09dac749bbac761994753f73987933c2f2938e9767556dd773cb052be1a8295befb0e4977aa2883664befaa7092b8d53b3b2797cbe546b0d3d47d97cb5759c956859007cfe88393c6de7df692d195fbca36bedc34759fd78470956bea3e87d968eaa4e42a38296b65f50e6b4b931faca615d7cf5b81d7f3a37f2bc022f4dc95ebf96dbb4446eadf47c7e26ccf365803d85efbf61a30da0ec3395c95857360f2935a09fdee3539fbacbee89eb64d7cbdc52d94bd8eaa5455df347b1adf84d1600a7097a8ce541c061f6de9dd136db123bad73772cb2e21fead0be3ba07409c0e7791f8faea9b0412604e0b66a6abdf6edd10b2ea5d380987d13a8a3db2566ccf8f6a9cc3556173ec2ca9a1254ecf3febb2b23a307746ef5efcce8bade0e6ac01baef7af7fa45f2352962adee0b80c3d985b3dcdbb197dee132bdc333f4ee73ae4085992d6b00dbb3192876448ee5ee0ba4e38e0e3dffd985ad673f577436239224646271b6cfb26445354e0bd6254f5f7157987f97659a30675114432ca393bfb5ba86545dcc09f953029f1b76be10c26674d9f0daf1d505e9e2af768d8caf81d3d1450cc4e64dc2e8e597cf84c95d2294f27af9bb77d9cc558f718b39f3135160487ece59eb9cb5cefa33a81f54b1e6588b3c038ae27f2021098fac5c5ec2d17298fe7ad2b8b59a5babcbcf2aa8411e65c37a0996a0991a66ac40dc1566dd9c2b94bf76bd2bcb4066647c2572d93bafce0b7765755e18e78595ba30b8cb04d8799bd6ce2bedb98e3db237d823db5594d1c11ed9beee9eb108d02d98193cbdf3c249b84bfbed77a770e284164d697e577ea7d515cbe85a867ef37cdc959566df71cbed8ce73ebf98bf2ca8156e8555c2efbc3a2c5b2c16cb7cd51f2b571b76735eb6cb24942b148565f4f2f525cd92875bedbade09a1f3054fcfdf75e09a241565da585cfe0cdeae2c4bc2ebdd776170f79d1d341d4916c64df0755a260c001d6758e795957097b74d7c1d77d911dd2fc970e22c9c0422c15afa45fd21f9a20db35d4b3d23d99ff9a8f4ebd72a7396540a23110000000053160020281410878442812849d340cdf201140011779654684c1b8aa34910a4200832c6186508210010600c213067aa2601801fec374afb54d45785a6844e8fa1fd4822740f7703e2ab5bf8442218caed102a59fcd597487b0462b3eccf0c6da9afca785522623cd1061d51530c293234e44ff3f38a4ca7a194bb4f85991d1fd39271bb7ee2a52186daed27bf908dc8fdf6d945d50fc7c98a39662971f1b7e2b23b49a6d1ec65d4d930d9daba10ff9468984093e5c316826c19df944111697b5236527eee3689996ee487067271b7a4d4639372790d7a117def3ed0bf5fea841716073465c737989b78d540de5b56fb90ac49ceb155965b13081129c718505677dd9ee6ca0110c525abec43e874fa6bd80875bab1118602d37ce6a1f85c5037779bff80ea7b42c46864238579377c7ec6782a0c35d43c716bccc13cb3e6a907bfd8f393a2a12c88a36c4c59d1231b91c8a0a88e92f1031b2c2979f2653cc7d453f67f885acfc74904d56f64c282ec87724c6d1476fde88f6864cd6941e77b1aab937974c94856051c61852a0d59a603030a332eed219c81851bfea3245c3792f567ea179da9772229249154d43c14063652732adcb67035b004846dff3da8a21c060a11147e85a009270db7c984438e319c0241d049c346353bd19f8757c5e1f3c7a8819c3748c67f21cc0d8d342c6a991d383edc50db074743e7f335f65baf1c85093d146e829dffef3fb5e7375de8f8a0a375e0ecf7d1a0319ca9576d0abfd974d3e3eac0cc27280a357d912417a2681085feff49a5ea17c7ad07ac2bc88e5461fe3dfa59adf67178f48fce1a70644efc3e910177ff74471ba98852a0e1101d92275fb3cb8ff45dd4220342322d891dddd749cb734d5fb1c2ad98b440d0393a19bdab8169c120b5267723c4bba82102d32cc68fbbc5e0e518a9d7dff59e66610fce7e35773a420d6861ea3e3cc3eb4d7ce706a2916392d6b3fe9ddee356dfa3cc053242a05dffe880d371ce5684d00f30150d4fb97f56bf28ccbaa0eeb91f3ed2660addcc479f8e2fc25b5b46b9df5e6349f10b098f398bfd99154d9dd54bbeec8b4d9e243f84e5de6011679f18b320c96db5aedf7a1a41f7a2179a7dd11282e5df075e45650bdfeaceaa53e8aa23e0101ab2ea1acccbfcba224a9c69351472705804c685ffca0e8785f58fac1122b0d21397eeb63c7d26ebf74cacf7e90ba60ab438fa411772f61ba42cf550c27147604cea1a371b407775e380ee9031ad3e28e24d66d37184128988c88d1b26ea8875d457e3664ae0df45ecfacef2dfd934a94d09b8d3e7ed3d1751622bed6d8e5c83dd6976a2cf67ad833a75d614e02227bf0977f563de7b5c19d01ffe1985b868528084e2e462e4ca7f562f6355e2637a35eb65896b3ac678ea38123ad9d870008a8698a74c162b3c92af434e512b13e9d6473cf54c07b0ed2d0f7b68daac868653e0815422605b131cd34f20bce282a3dfc0d431ab54594cbbaa522bb827e07d9183e6a0a7459aa89d50b16001df488fc096be2b035aaca23d2dbfcf317bb2e80d1d67ce97099bbf1fd8d9f4e19e6e780a12f3d7b6d58a33620a2baac0226e1b2367575f6f0a6c656fbab11a571859bcf2bb89dda2de041e894c54c389fc2962f829b12381bd3268a88556dae1ea6eec8ad4ae90f4a451a05bc18f44cafc465b8993e354ae568e95bae3f3d7fc0fd8a16408ba2a6e6723c16c58fde91ee1b9eaaed469b30cc6982076fee44a9f3feb132d393db5e90997c3a9a61bf921032dff87d8ec11e20eae57615b45ebb7b2f56b4e15d19825400da8798be34576fbcc5302a51bb907261e34f282a22707ccd28115b1845fdc590e88421893cce780ed931c6b8f80eef9e2df2d0b59b6a710cf57de752ed474a664238c17aecefcecd649bed01a105dd19b27914acd7b4831f91423364583031d537f4d4bd317e01d18cf2256e55a1c3b126d0be788134b1f00f211593bb7a367350454a8f30ab2e61ef796d15028805511a2968078a40e7c1407052768b22b6dd3858c8fa90c72336063c1cc6eb7c3cd0e5da591469356d341838ebba2bb24e0da2d376d3a40d279a0d7253d72035cd79ce136665463b38eec3403e1f3a00b336b9ccfdf999ef26242d1cae4d9e58176d8f1e395d7eab2abac6e82119b9702355578f6f1b395bdca163d66dbc18dd9e246e880a674e8087b54db7bcc55930f4c635a6b821c89380f9d4303853c1235016b1fe16b5ae3cdaf878262fa877b1cd43b26e9fac033bb1f8dbe0b919fd2819a55798ee5140e7e8d78bd678f5bb2e4f8af66f3e0818e7705ceb45777b8ba9668d3fc1e61c96ebccafa6b6500033bb7544d685ba6c0193c240c05813f1a8049a51cfc9c28963c814008f4b0708b3b793f7fb66ef869792ca8dd34f70eefa7a3322455a4c4665153bdf950caea929dafa6933284f4e99fa4f038539619ce5082328993029364785cf75b16e995bbfc1836ec21792dc1384e6a1fa48c1f7df1935971715c63cd439b28f929e6bb0236b1ba7d067fb3866eca1a5966fd6c0fdeb7eb63db82a640ac3000340cfd15b9fa8022f70a95143c01461eab051a9fb9d8032922384ebfb097f08f6f347b59e7fe66da28d83ba05dd503ed9e530c935ff67e8f4c3a7bc93ea44e0f1b0578a78fa76f2f254f62beca684f9dcf1a4d02300d0841defa9abd539411aea8bd591c58de0d27fef06e977353dc1bef5a2aa2a469ec52f8f61a6cb36dd3bf5dc1e447ed2e5a06675cfaac92addd45e2d41842ac509af463734949c3ca6114fe4c45fd79d133ab8271e135f7e40b1e393e809001cae38f6b645f1cc7930ef2336dd74b3ea48258ccb941b21e7c89d15e7a1746d171dba78c9a1e6bb7166d0b42f315cb97996363aa69973ecb4ff67db4c504147c0af9ed0494b9fe286c2e934496f201465a2e3b36933cee08b71baf3ca499922e2966155b948a3a7faf4d27e0f8b1f1ab5c683eba111a44af4d2b08e569354ac342635d4d738d3287494ac4d043e0d6e14df50354fe437c1849c33203f8f0d636b99fc2d4e6c8c519c6b9487f9b246fbd6064d4751cce465b411f42c2f6c2aa71a91ca6a9a53314824e610f32b49373177f0cfe36b88d6bc57907fe79280485da000ac029590a1e59480d9c9fa8fb44afe2813e7aa984d5a83806753e31d7796c72617786eed952a761913fe2ff95b5c2026dbdafdaf2338500a34c61e2492fd02cd97b5ddf97ea504c80e769aa59870b3b49746e9c05d235420fe40a73661feb3f22303a334fd672cfda391673d9ce545c75d559457c1354541e22444491500005199624bc755a82c9a7f9597a6e4d49a65b278f19a20f89660f0d3b7b2235d7b706ced65b91d79118b49d6f1b8a3eda27f5c96157fa455d2874a7080876bd4e405870dc7da52a8b6c54d38c95339f787095727cf141fc58263df763f920261c1d3b1f3f81692c88fc847547e1ab3fb2b1f9955f248fe314a6f963e61a7caac191139a85e6f6ab7794a0c8ee01a240a866dbc5501a0e627181ed87a3adb0a330024b32b4409b4052a64813ccf2124893b024ceb2220f711024014fe74045b0710d4225251c9db3162f5bfd86bb2e04d0b759de7febeba0ce1ecd3dac0b201e4636f95de76d4c81ec3c5b505b237f9e131130cc6233ca1e7246985e60c3d033d06dbd2dcb5950afe36f4b05df3994f0c9bfdf1afa6ba0398cff3c20d5b7316c747c16c9e089fa51688eb7034384c0e4f7151390e7b297e13ff9f3d24e3bf550d664e5389905bd09692ae08ea7b3123c22d46b705989b865749944b55376f36e053c5ca3d75917427cfb6a1a85e61db71bd958faa47b1fdc4dc98119e5839c19d368c7dfb552eebd4a2e8fc7635d26e841d637680f2dce0ac90e9f509769cbcab9f769c57fb49a5bde1f20dd6f80566940f52cf335b9a261ddd1282780a469f46f056620a1e636cbfb05549461df033097e36c81a1e47c09f51173be945a6e12d47d1bb555066a266e8b4c1ffcfb762cee2e93d6552347c4efc7ba1d71921f8c3b94cd4c43fe0b22f5c91c32c146b73f4556ca1ec5b2204255553057513fcb8abe3c0fee84037d3798a9f2e220a7e97554028394258d29c1e93950440d2d6ebc695a042264c7cdf292377d2ed11c9babad0ca52021b476adb89367b825918b63f4276a2a64eaded33caa331bd9b6996562458d3cf712483ec3d13ba7883c40dfa262ac1a542328c7e247f0f4c200e5139e9f34cfa4a2bdd37a0366f5a37a379295679c81282f1ba5e4acb69fe6bd30e6f4191f1d89b62bd96760b0b0ef32641de3058b345b7bcb7a0a7b74b718b97b24079a919c904f807e32a7fc7dee9c99e19c07fb70bac5c90de6e947fd4ba01e7035066350f067d4a8293b2b759ce9a6f5aa53e4fed6fb433be658fd24afda6d97f57c13db524ed2ae4aba5d42c545ba0be0dd8f4a72fc9ee91bfd7c4fd437ee2039c367f1f5b27bff596fe006dd1eb319f913fb6e0094c347e2bfd283cdc6575ce4508b9f1e48d01c0201b78fc4a3d23999e710b9f2697f1b13c7c2c02336627e8247b4a7464c0a5e96e2846fc143af621ff12afe95c536cc8d7d49b07fcace60fcd2637cc0efcd5f41588ff8640d4fd666481b2012aee382084a8ea861c9028464382ac30109d5ae973f0ff1ac110304de452ab68db54a72181649a5501fd76ca206e9c98b3533c7844000e761452e529bc8567b71919a52fa36a24576b849449039d60d0bd7c089f29afdd833e974ccdceb5b2eb481e4e4bce5803fda9ba90c925cb2eb7e22d521bf29507f5f74a5463dc37f90f35282c142c7640daf6d36cd756958178a6dc1fffdf74da2fce671a5805b3eb500fa78b24c056907d019836087ca79b2cab2079f42869c95aa95ff89694be8685a487d7ff261a9b46a9c6f25f2bac7a4488f63223252e1ead87c495a91c971db46b4b51b1e90696a4d1f75277dc2a538805c7248beda5d368271a2e35739c5fcc5919e335d14bb60486a09d7fe5870bc8f6a2faaa8c53598ebf53f2bf256904e9758048ccb68bc627d28c5ce2e9dc28d797837c8a7aecbfb53d702532f7565f25263f8d18972524f2a9df24215d64c36609b4aefe12c8387d468c664a82c732fbc7d20dca72ee1c4c05564d2e2724b0bbc95faa00f48d5a92eea6c02819bb48941796fac52f9ec5677f2fb72354c420cb8b1c51444651be8db89010492d809027936bca1ec26a11c3207418484aceb8fd775783ed2372eaca21bc379e9c626b0293f6f6e37cb73e55c1d3c0e60da449e95a2c548dff54a7548a89b13443a34f8d38954818b6030f8e407a23565c201cacd8f4dacb9c9298c1a008a8d12a7625eddee38fd461a39d7142ff1580fe662d151e452dc81d57341bbff79df02856e6547cda6262f32ba5173bd9bdf336e83ddf28003d164591f1673bc44732cc5a991c24fec4cea670dd516c81a803d70f6fe3195de32b681821c05a0423aaeea52b6f046d3db15da7bc2d218f674c0a87608c63ea079f3252043281ca0cfceeacff0520d0ea423b3ae37f2106aeea94a9c044cad4090f19ab658bab7b125465e6ec0ec954f12d1aa01488934592c0c1a239dcbe00877460be0c0f9f944ea7bb4b0a8ecab7feaaef3a699094126f6b6c851c2d9ae8999af507136e7259608927e3c0f26365e54a59a5b3b938c725eba7823abb43fd5af6cdb109fe7cb2dc21eea5529ba9f4fb11146145e5aa82ffa02a1673d56d8a9624ee5858c086644f0456a56a1f27c32bfbba7689f171aaa1ed50530f9d4f95f7bc18fe24df114cbb8dddf10e9570765a68fe5a81a0263c1e3fff718647dc595d96bb47178deecbc6041f125b302ed16f42e0a3213b6ca0bb2e35e20da374632c7dd2a6828987ed7d9bdf52d650ad87264910d880b0b6d229fccbda8d6ae0fa585bd11d2e751e19cba6a828d1e6412fd504291f360d256165cd7517ce81e1a192d4a06ed03c23a3ce18764521a99188d70fb88c7b074fe87bdd1242c07ca6ca70619d4f1017d154cdfdc0a7a8503ff93e2266a9be802cfe7bc8bf1acad479f833d9b302c80e18fd9ad423972bf4570df66940b0bb925ed5707ed22a61d08b9f1884b528f9d91446b1d272131e50a371a4adbdc3c7f2864e0eb15804e747fd14d57f833db382846dc265a823bd655e08b9703b66c8f8e10d1afa6a47c3ea7a2135b16fa03ad81a29dcf7f3c5b803520043915953b0eac8c3dfcbf856b127d2b38b0cf75174d646b0e74a86f719517dbfc0f66b80a534019a74a0e668c6cba3c2adbfb550077fa70c7c59b3646c922a9f6daa15781c87702d1cb88c5dd3eb48c320e3c8ebb161f119fa56f7b0cd741fe58a268ed6904dfeb86620f7442c129e11f82ba2e88ea7760f43627bef80f43d7824c5578f6ad7bf05d95ce1c7531a328f1ec3d61a1d83f351c6c040a594a799dbee441bb9fa5d0015f41b25ebede7e375cdf8393c89670672c68d9babe81b8bebf0f11bf8bca27b1b422a1735fa7a09ec359156e54ffdb4fad8abab402d022265d657905a3c63b38d05a565a3c0d9faa5f265145927bab2024db90d4243da5c1857834579f305fae552820f7ce46a70ae818ed8af1982e12370692c40fb04109bff68cda851160fa82d1d2017f5560c03d102ffb6be8cfe2d2b5bdf775efdcbe151ffe55217bb905965757cb71946b87e0b5121d000905e7b82cc94f2212513f574918a53e4c122529a5cd558d49a0bcc8d3fa76b32b4ddfae4383d45d66da27e7aa4efb277ab4adf36f9c8eb907c7611519185d2fd0a793c644d80fc011b600969a18e52493fb7341e313ea51b16c361b3d0a605815ef542790cc0a29f735f65d5d1b94632a3bd0b9af3a25da848912bc2ee64573210c2e3f4f5cf2577c042bc8bbf4ca2ffdd44a99251ab026ceeda059ad97c1ff9dfcfa52e466def9e362976423c98dc30f2922a7216c0d1cc7113446c3cd5cb2b98519a323ba1a879ec5e43fce9e4f01451c00ff8a0d5b038c589cc9ae8bf4307fc6c05a1830b4a2a8e080ec33409cb43c629d5c988c619554c3d9f0fb2b7d45846a4c4555f04dd8792238b823fd568c62810757f533e196c6ad3ee6a33261f587e99b9a90938a2153dba4de88a1a526ee987cdd5f36f1986553d758b573cd477d3917e5322b2e967d49c05a05c62e9ed1aee4a8d3f3868521086c9e48c2bc1bf754dc2b435d7335c3020722637bce1f6b8cd951aa4caf58ad2200a0b45ae833f9d6f7a2347cf07a303d56eca730d7d71c5dc29abd3dd7e33efa2f2fbf1bf6bac2d7c3baa0db592481f4a0e43ec14d52e096fd30a1b25ca6bd60d9c8fc6c92db538e7451b0755b6b580d707473b96734322843d4687a20aec5a0abd42a8967deaed0d5429ef34b0b0643e733fa1757f0a9c2b8b54e0c7e95d7136287fb08152f7d39d01c776d1f72af4ffd4aecf3f5370552cde9e61d69656d77635a639c9ced4a52db47c0ebe369420141a52449d340435226a588cca261c19f9f25269652501868178c3bd64f0321fd70380d7297471441e773a1096133bdd66c7985c931a16dcb73a660fb6fbd4eafba1bdbb1e51e8b1d8a0a8706cf6cab4768fba2be688dba1b90472df2f7014a3f6f4f93ab6294bd199d95d3055c5ad54650b277e81068e1dd40fc90d48dccec9d787341d30f5d1915d015cf61040702e35f432095cbe3b24a8966b59172263e61a64744382b0c3f5332727e7429a919323ef30f6c0335ac85df99e7095e705440ad4107e3082b35c767d6ba4d01a2e141797984e5ed9dcbba447a8ccfd44fb567a6c843ed41b667cae9daa699fea8888f1b33da574572f88da5cca29e128d71fc2cb43cad36a0cee99dddd710b205bea482296913533a953856795e356d12416d0243b36ff81e22c64b22775937f0b87860a9719b2814b84cee6626818eead572ea527cab5a23fea525b3596ff0e75b0d7101001a1138323595da177b991b86af98261658ae51248e44dd0f77b8e8e57bbf00ea64de9240ebf9fd1bee1bc3a7b6c413426bc55688b480d233be2cbfd48bec41502391c792d8f23cfadd313d68cc75dfa99a48823710c3900920278d2c83c6f98ef682c1b1dc7b88d7632f8ec04ba8604e99b08a40bd0d011cadb0d7f4df27edcbd513801f139a9b074eb67cb5329491aa2acbca4f48c6ebd67f6f71466af2b00f69db3bf640e61d36bc01384c888e16795083fdbef13d84df967bf561aef83ab7dedb332d988d356a62fa0de0b43baeb49d4c437d9be2f0a1bc725e49db6efdded74e7ab82e90d0495bf77cdd4c6ef0d5bc8baa284fdaa66e0d8c53bf6f365a93c7134d10ad7afd1f102368a145164d25f9be5085e7ea475086480ab76f55c62abee39128b063cf9cfa878a2981a0e435cd8b9e80e792385398d319671d8b7e621a09d4f05b64b0434cd122c111b79399da7243833c1102aa9524f04e56f669b1a37a5ccccb36f713f9107692a691a9af630830cde43646193bc02cf531dd942d6002a4f88471c1cc0029ecf3e299bdd691348bfa589d40280324d2d4227a0f98a336b2fa93437283728c97252435cac7969f02cca252221727ab0b86e2d038fa64aa364d4197dd8e90d31572956f7241c5ae812ce76fc080c85a1a4383702697bd20b08af3a4da8f6bfbf697e2b6682855094159949267cca281b846b890176710cac451bbdb2978b877c1c8c712dfb0e43e1a415f04ea63f0fea384649b61e77340f11587db0db811a26eddc558bf30ce290308e9921c48fae1e13820fe889513a77097a06203ef4fa68c10cfede2b74d9986e31bc88a18042fdbef5be30aeea72695cc413a8a42505f8a5d06c3ebbd211a17455b20b40d31e7acf4e53a05f58c2c2b343a146347d2389b7e05c2a26942387f2f06854226fef6ccbbbbbe4949e81ec196ca5cb83d917aa500b4fa2597a826ec2ef6446f421d52299ca9289c13e9691b41b83e2a490062181ff0891f9a6d1fcc2745b2d0e3f322fd585c9f0b9cc9ab7300c8b36ce7a76dfb777430b423f4f18491341f954f329e041bbbb410588f77687346e647e3488b3520d52a1af818e879ede2a4821deee6404ec26b1945a19ac67dc7986ac35a887502dd78781a4d769355effe1d7e1d90b03fb736b491a2376d2219722a247328544361133ecd0493406a9dc8f16d3c76a08935b643542e07fd0a3cb173220b81347cf575b07b37c233cea2da147271d8e17297c52ed4da51191589f8ab2dad99d5a10f6da40a16b4c2f55a06b03fc66fa798d02df15387425e378f4cdc86831e78897433b3c4b4489d094750a962a30f14b0c426ab0568b1703d59906768e3aa5f0a408450e7da4e1a638db49d63c4440e8089d59127a7b32f66e06cc53178476b060e740d8086705cd42a43b52e6b7bc9146181877e2d3d1bdb74c8dd000cd561d4d4c24c50443fa00c92807b1e000b2822d0867d88c6888f57d82699b0d289008c0d128a328c722e0efc594c69b74159417a36c305ef9a83bc526e0bc0d9ff1113aed3555a3bf71b81db223ef4238a350250771e608e6e10c28506203813bb5f7188b68b0600eb37155313c85216b6a57108e35dd606c05e4dcf4fe1ebe6dd8bd00adef298c216679cc83e59021c70f6f7be0fcb1b507254c0444e1d72e3d0d01c88ef140ef881c8698e6896d6c6970413dcafdd42e494b5198dc0bd019620a7f276cc928c5922d54c534fa7271231592f53e214b14b614fa7ca67846079b540e70ed67f34fbc5920eca706caf211e6cfdd038aff3f1120c8538add4deca26a93e42d0198f573d9b2428742c788b28fc89f4fc92293d34514ade35df291a4831ca04950f6d8b7890baba7ecc578348bf21a95a83f47d62c925f216e654e08652022992c7f4d3884c1ec65b60c6b76709d042fc3245794015a03d756aa1be91ebb50a295e6082a97088fbba046aa207b8899f83b10e282f93235b917aff255df92148dd9b7439e81f46fbd975fc592bc99170a08830f24005c989429a0ef57caceb295e0dce6d5d32118587c128821f4ea2d8f86415c2047ab21d32fb0395d2b148aa707223cd259c583c6f7b765d5a9153ae8cba7df64de7cf18c4845836291915a58fda44a22d1a8fcb9788bb64b27a3cdb6c9d17ac5bbf5a3680c555eb34d32d2bd9a5cf5f0369897e0c2b388a8d85231aa54a95a8db116909fa7b2dd98c82392b58d1edf062807e7f09e88466c57bc4c1c7e9f759a4bffa3ca3269cc68c9db509514e1b3dec9f5cc9f1001bc3371441705dead078805dadc9e80817a054d3710c4a779be2cf13af8ef14cca52f91daf4e96a02a398edf6d85cb4ed42a421be269c31b71fc12f085fe33034c34b71f38a727ee82e17fdef9b798041e2d8731b2911a170ef0c3d513548039e2694d10008b8607590c41fd294c74f4b1659ee740604650efb2ef0270906f0680e959b9dfdfbe90adbf3701b270a78274bb1d7df25725a90294bd2b575005a0b65c6e6bdee45f284f20de03643b4e0d992ae03deec1720b81e7bc339427b33421a0ad436906028dcc871f87b843a899de72af2b875e620b6afdf0236380ee185105203a40fd79ea46be8ab6aa5d064585e19944421570ea02c07fb0af431ce0d1c988585e1814cdc72de2d8d820f1b02d01c542805018eabeb2cd4a1df9404b8f2c28c2f5efa7ae82f4a3652594cf0c5a5d8b39f601667f720ad39e75b30a5688e20043b82989ce39ecb7f46655be6d4128819b0690299902173040c420fa54c35d80260e7af373c9f5721760dfd7aec277a9dd8331c213d35c3fc168ebde3edd4c8008b7bfb2a31fc8346009104f1896e7c5ce5c410ddd8440d0ff5bb01fe3e4d0d75ed3d30e11a046aa52c1e71d87357efe48e801b5bcf7907fc10da1deac0c7f78bfbf189f9bc8b20bb71514c97ccb8c509b5a6f9786de7514f8d4cbcbc8ef8e4b2174542eb378391923c4b6d9e59011ecce89c86b95210a9729e6c6f103801453ba40863ad6d69a0fa09595d69652260cec45c69e5f92e2e8df598a6e5bfae493d520d138aea6bb11ac5933894c8c18969ca97d0967c9cc615886b93bf3fa22635f8061407adc72c881c9248d8f39e19e868be1705fabea07ed2a591291e706c524ae9c6d536e61020d753fd90ede1b9356501675cb7916f040fbd83bcdd0a56df0edc2cc7a0f5123c8aac8c4b6b8b5d08756c41f4790193ce26c6acc16b11c8d2417e9d059a987003bb52f08a6962a84f9e0ffe4a61f49e38e31ccf512a1c62269fc62bd4b15158f2e765ff5110d72be48e8da21bb38b044c55a21f844f251646e6e846940f286582f7474ee3a629d2858711048cb766fe2bc4a104d44d0226b17cd51ecbbf5dbb41576118dc19a16345299598981bbc5169c1a5747591272d950cdd5102d8e51603b590c29883e3e31fde7ef0acf6de77df184c914f57c1296dbdaeb6f8deb7617f4d8e5371518e1d819a9209a1b4fe740e8d1f564191b5c66da7309958175ecdb77ec98c4b4109cd4434740f3909b3cdc0ccb241ec29fba20dc79615441dbb288d62011f8f3f1708a79f2768ebcdd4e3b5c429fef7672093f17e2f2e22501f8cf13ffea8de5f0b9463b008b34efa730800f6c7bd3de782899c2510eb5dbc10f17cd0f6938e16f9d18aed26e2aae038cfd4cdc21506d48e01ebed9b49d8b45e0f48b79cea947d24864f07079f88a83632a60e5e9ccd55d03c9d7cb29eb3bf37156d45c74d1ffcfd760dc72fa9fcb6729c9affedfabc0e0d3df7ba4d855166838485db3f46e6f6e1159ee41bc6abc90d87672338da0b8d3f4f00219b024c4fdbc64c9d5ee9b95322bae89ca6643ac39f9606620ed03a2a52977a588471eda008d3a82c82526865a4a6ba8984d1b27b557e3f5bd303ca3c99e16b66ab644ab829f262daceb0e8b91da52579ba276daea680bd2fbe9b447486fc3ea8a5207566f2b21a75fee21acbf6adc798f4c161b1baf596e2059aea76e3649c027c0ca42b601313a9b3839943e4aa4aedbab338811a6325f3d58e28c5d88eec019c4d863fb01048ec39c84035c536860c69ec22be9d50465ccf21b2d4bf6974c28bc27242622fcd2470ddc0f6b7d8d17ce55e861b5d7d69bb4aab98bc338666d0e1c56f827846e5cafd1255d3bb97297cfa01f4f774131a73e2f5e0e672ae44133b23a3e79dafc31ef42fd344700aa882e80e556204817d26f8e390be36a9d0e7ad2a6b3777c3621559f205e54a43d5f424c28f9a4ef1900bd0a1545163f6b3414d50bdecbff7c7c18103682b4f9aad943e7d0a8cc2a13e3a21daf8eefe129548bfdd49f9664645f6d083f108888ed22937b4c0140e95ca0dd3fd912218339b8c20c6016e25cb84b90c80a9bac9a9ab7dead10266bb1ee7dbc4927e58c4ff3b5ec2bf1692a21de6822c1521001c9b4dda3e05846b652f30c4127d445edad7926ff3f60c9b23784b60d58886148b5d74815325d80a935222419ecb6f8f7671eca62a6701dfed872b2be8d87d215a071a45070ec46db9f3ba0f2c4ec9c830ca6a3926fe1ffdd85c3808e63233812c216068114296dd3461fa0556826d98503545c54fc5792629ce6e4b6ef0f9005a2a0303c50be1ee53b351a17371f4a42a00ff1841a237cacc60ed70a30afac73a25219a6097d36679e0ca62ad2ebd1f925836487fd6bb92791af0357fbe9eda3d73dc1230e52b3a46361b46f00c41e46a1853898d8a0dd6b58516e8c52e7b24e5dcac0353f1bd2edeaf002288f8a96817849ef32473bced7243e4e34a09d7a46830462a817e83a88719f4549e8671e80b27ef7d81015b2250f65af496ff44b72cb3e1a4fc8036852aaa15c25d212901be85bf936839b8d60bcad94dbcee360b56602984c3936cca73f8ef8f89451950723428353aa3e3b4c159790766da001af0a8d7739113233d6fdb9b403438af52294cef9b30cdd7be8b0c7afbbf2390795e9c8727337f1a56010335a321f18215923f705d4c26a786ea8271be2275a83856d651864611a8a2da0e441788f76ed1276d8aa3574270e6465ba9d3a60a3aa4554224e9dfc26b7535e7942e2dfd34b804e25eea40670a392a889a13cce45b38445dd856867105d83d9e94863a1dcaaae14186b9f64a386948d3e1b4d2460d3e9b3b8c41a1c8870a6598cb33155422ddf96ad8715828f04fe4be063a3deddd8b30bc5af7fdb9c6c44360d510474c96430d25c148cb89f92a376ddc835a16d44f2aee3bdd45f992e80c0176e6cd1ad4f4781ab87c58c191eb0078186b5499342a42dbda8ee22e48da7c8da5b8f23fdd9c9e3821675bbe0a6543e1f6544c2c01908617d0783f9c88efe5aa7bb1c0d039a573c19ebbe1d46bc9c273594284acc4351ff27bbe09976933329b02583bddb5926ed12bd0d5b4fd82e569ee19b3cab904584e58f6e59cc0d5ada6dbc63688fd5293c86bb64962f2b8df6d864afebb2cd7cf3701bed3128b8e72e5eecbd8b57fa22cf72f1763e4f01c4542fd3c4bb872a8b5eed10a23a2682fbe7daf82bd75c961130dd21a67fa746ee0a1566a89691b37931b21e7b2783e7454ecc115698f43254b116dac21f9db617474349c0e1b6f7d6c066fc7661bc9af4bbaa262345a9a38c4a07d071e08465173f3d52b6b5ed69c63c1025e1f5e54b335a0a4139b49f153f14af1053f62ef180ce5b46fc12899f9cfdfd562c9cb0757e982da00844d1f8820ee1a16f7f351a0eb6af73183f2cc6e1e3ce820fb792a94683748ff7f1db797e308214f5f67fe56f203c5c5c457e9407e4ebc71d191ca55e8c80db46742dd0b43eb089182134bb503057c4d01799ce1f0505fb8be61fb2f1a8b25333e40d314c0892c83b330a579ed68dfed3da6a9e0ae9fec234f0aa9c065baba3b3a94240e6ffe52eb2fd88fb02050936be9ec8422936d25d435cc9471fc582dac55705be0e448aa52d4a52ab93c9e02f68061dc1951e1ad49f64daa4a7b6a8c4e0e57792b32dfd2243a2459d937d378d3593be4809f01ad7d25025f37e95a5c2ae14e2c2f606aa5af6b7fd1451367cd7553c95a3f07e3bf777afa6a1af8dbe3d87df02cf7d9cba7f4619ac01eddb7d339328e01b2b3deef61d83a5d373b01dd39fc1cb9befca12d5bf13f44d8f020ebb0984db740cdf32b525f597acb9b7b423a819ff2a0494d7bce1f9f7d79b1ea28d8319afabefb6d189c37c8510bc7fa8ce583976c7941a4c9f2cacac840ce56802f9102bb0be9b2d59a2adc36c5789fc3cd0d5a0b0a26a9a531a6238d05d3dec9e0ad80545c2a066ebb25d66d65ac1b66b02226a805226072e1eb6acb5351958ec6f4204012d23a4056fd04b0b9a3808d21204b3765834966cdd61043113bc83281942ce91f546e130639f642c84c3329f0e83c0e5deb2a4fce4a850eaaf3a17fef22957b7b59e2d0c849d920f33387b687151cf3f40833d93246682dd2380794546ab6ea0553ad116fda145b18a10d251129c2b12ddee4f879f7e0cbc46a2ee919b0e7f63c09304196c6c3d6866d04a15787fb35032b2fdeedfed794fbdfae264fb330180782045e6fcce048c4436748150de5fe55501d600cdf0f7a6ea2e4b40ea00317b7f8933ce8daa893e8b8bf0a07af03eb540cbe0bd47ce3ae4ea03c67a3bf2211ee2305f7e0250a9b5df4632c1a5c327841495b4732b61102712401550eac3e7b6f81230bb86e2e44c404088e8924e88f5423f423e40a2135246a4731cb99e64ea4fa102ee5bc9ae88ba13564a1f1d2c5043fc51436934d0b9967a4a7b0a44718a943be9809dc643eee48d3f67c635267729022e44d484d6f8f15a50df81ca7f200bbccda943652bb9ea84a55c4ed9c005573385d2c5e99a2a9040361851f879532e8f87ecce0062245e8601267f916154f1176cf19450f50510d26e62cea600c385616471bf7cd433eb74c82456f83f2a260d60a8623139acc8ea5f6483eba207146be48503f828a0c619b5deaceb36f1972917cf90ced34bb96b4b69dfbeefa882b01af0039c994e283da7e0ab20cc1b71c84400b02fd40c609a7c8bf6805af660d65968cd8671cfa6337915bbe15308ef02d3598dfecb9eecbf25c073535801aa07518fe2d31097cec2cbda96b45d3536fa4aa7e5bfa4f4534e5e33114ee063129129a547000061b65fd25a07d129ddd6429d684088ab3cf690fc07e93282fc8507b867b3438dc86c29f0c5d87fa218238dbd094535cf44a6039de63abe45b4b9aa51d33dd21e6b3104cfb47b10490da4d8770c5328b773a7899ed9c5e0a6c18fc2d71f631ae884949b927de754ea83de04999701450a2722cf48f2804b6824fb815e896079ba00b764d40520a7128547c5f4c13f6082318f660768acd8ed591ef11408407313b9f702aa6390f910828173c58aeb4a86e7ee410dbebe3b177de422e1305acdb9a65bf4cc7f294ec528257be6249fbf701271a78ec50a3fdb8f92d5bfd13ef092555e33c1333ffacde60f5bd4f4e452a847bea5743d5faa50bc675a1b3086f6c4cb08b9e9b381418341f1dfb71358eafbc6a3f66a1e08eaf6506b3ba32915a8c0490c721f48298d3086e12c074fc2d93b81c4c784e88c90b83272021f2860d9e93634aeedd18122ff0c64e4f4247b95a00e08cb77b4e12f54071ee4a07373cae354cdaf9dcb8f262901f5d88ac1e94f72325bf62e7840a00c79028a32950d64ea22d9d34a036926af9860e8675f0ae8c98f6f7917d14e8046c1297872f1d64f9fb12a804452e9c709647c2950fc1becbe048ed7360cf0d98d33790e0da8467c702373805f52f40c2eab46acb8a49a46dc3e2bfcf0ee0778f693065334eee2b5ae4262c4444bad2a62e03b835c7a95c0143f1ca2af6644f7ec6d58a12b7b0335e24ea79c677c9ad09aad11ddc8a31a7556f7b986a65ad2c1cc883d67e851c8f559ee289bafbb882ddcd3fc5e3e4cd25f4b6169c52edb247d7e5e71589b49564ff74b3359bf1130402292c0cf6a821d0382a4fbd24851d2edc164aba5035ed290aa4da9262d6e8c2223a61b3ec16d581ed17c7c953e5b893e8a362868ff9fae9ef489cc9b1d4e6cefa6e4e470e1c717d9932ebf56e40a4559ec5c22278e4b5f7741968a270d01eb3ff63ce9a11b43504a1621e9cfdbec90c17ace7a85ba1e7c91c7f9134a4716926dba7f3f0cd6226d49568efea49b9dc97a598739e54ffc1b32d0507319545a7cd84d8c4c07e0fa4200e7a21190cdb2aca9743e8b6adaf7b99f6c59edc5d430c84acac1e6c8d31b91d68e1d27ca132520c22ad1436c827b61c98069f9addd9d1dacda9d1595c4890a20dc64d246a2ad15e88e0fd814de90b880758ff60cdafcdf806ec9ef86dd99b10c44306d46c4e05189d170cb4cd0b5e445b9ce9c8bca31579afec28c50c0abb54d9d84726da2a2599b4a02f6f1058fde475a33833eecb232e0dc0858b3b4e062c185ecf008551c17e3002b9ce052317d2261fdc6f20bab276c365b804936764128560d27d22845479f21d178968f3ef9047cebe99ad5188cf976868b8e28007b332336ce9bae31ca8cc0adc93de254f7f3eb77d7aed397268ea526c8b171ddf092bcfe1bdade742dabe61521339bdb00274ef253bc4cb1e6d2bf5b81c62c8312c01076dc05492b30cb29c808bfac632e1c08a47e024debb1a1c417d003e9c85013f7280fc89d36566ed2d06e863d8ac84ec1ef1618d460e8719440e4b3c7b5e61d94a45114134c298a6826c45f9882826f8b4de535ed4cdf888bc743acd1365076dca4a1696aaf476ab4ba693080d5fec7a7cd06111d12d3604d25092ba2dacb4542b99c63789ade280bac6072a59187cf5609c08ddcce7bcb2bf486cd76998a317582524a51127d1f813972195a04ea90bef7a51cb8c920461d6464d5d65ca641ca7f7f62a3c6013c8c33ed81135185bf5f9800094434d8e9483d00da899b9e9587880a126267bfd5d15e9cf723b7de39a5f3e038441ae3748ddb107a31151dda4c4b26726986f2201e852c31efaa284dc38ab272ad8b2868b3b0555623d4e419d1f55e17e6da0c3516b0605b6a30eb7c6cfd68ed82e5cf3119d122f3a64e2f4d99743a68a65543a5e68242ba5f257794f65e67880091326e28e8f348d3e8acc4be2c939157c5ec4062adb75a258930a8d73a9301e73cd49de6d8298a97e2cd22e3f8ae331e60e0172c78e0f0f6387c99da871131247d2cfd4f080204c04224cc4263a57d8eadbb5abad524e6c560ac0114e2f1233f67f3ac29a700be83c314245e180121c0a82f1b69a3330e753799df335f0a23f787c7cd70c67b2fca840418d75e422d5f12e51d22a4b1ffa4077bc7a730a597b903407d969d00046dbef63696295596d3bd4c1cd0dea85217ecf406d0807d024582d0ee9293afb1880058e163bf02eaeb51867141d4378df0214b8707ba0e337104c9de8f0eae8767fe652d0e6ff819c1554d85808090007df40e2f09162f93a73164561fac9165406f608cfc8507e78b22e3c303dd19a708f484b08aca8c49c12a0804b31ec10dea53898dc33fcb9a39bc810dde2e978c1235c8f6e8e165de9dd46e08120f63692e108f1f55246546610ea4914c209c0e9a283ed48263291c9e2159f65f86782c5fbe3df98a59bddc9b33dbfc0076bc7fd59b36d48e908c3a83fbfcaf6fd743946a5183d88cba61596f5b84aed2747b40e3507737680ccbd79ec01f44087003dc34616f7ffbcc9b9c99ed155c14e68b213af8be22c3c5edb8b8e70893c03ffcf6361b3e91d4cb005a5b83258ea1ae0a23a1dc3cec3dc88c81ba1a957c9b81003e468c19ba16e0f36d8319f70afb42f2f7587411e7c7456eb5033ff381682c32d2a5f28a06c97b385f162099cd2e460fb1c1fb19a0e5867644385ac58a7c9b55cf4659163ab1251d810a7580695031cea7ed0bcc070cb57dae87217af0cd5d12f812e149e7886140d05a3fc01f6185add7ac1e264f8ccc01facadc0b391fd59774435b993d49969ecd61fd1d390ff4de79bce83136c49518c25f96c47f6091f227f2fcd54696d087b8742f84e4c563aa6c294386ede10fc870f54969d7642c49d2493656c6603f3bd2bec0a77ff639e240ab3ae91c8b5b07cd3f9867234c2b2c7fbd34281f8212d1acaeaf3fb900eb805b8998c7b53aba78d773745f9931f3afae10a05cd0e740eca3878cdfbe40fa89c03a96dad0e46e48dd45cc0502ce7925ef40ea41406db8b83f5bc31547580bfb4f0b6f2cdde2e6b8f46c88b744e1071141f9a03548aa43ac231d1352b0c0a23c37c9dad96f98cc47652278ff2bb5500d5762e7235515c373f4a6e319d8bae6153e3ad0c0407cbfbd0062116a02dcda16a0c0e5d79c406b236e0265e526abbae5f38ea471033381b9cabb3292a3865a2072bc0c63b06059a732058b546426088070d452c3ae08d4fd6e973d8870453ac841e440c8e781842a63108b2a680c0200c27b0c4dd09a0014ac417d9892442a3162763edee2ad6e81fb90423446d026787e1b44ee37c1f346c060a1328e6f0c4ad859706804d157097d634361cfebda14c5891e2b28039de550f57b572194a12fed3bf3e8cf74fd8aed52af247b1bf2452bd3b498880cc41f58243bafc57fb067dd37c8ae10473cc505117e437bb132db72c65b60882cea18bad66eee9212355175e74c3b724f4b82c2aac57387ef958ced4d58e51917bb488eaccbd2f1d2628b3a990322036b2c7e5f35b2c6f66f7b84491313d5e08f53ea6b47fd9ac32f309f9a10c42131219391692be97026a56882e2c935c9076befb6146422bd3d5b69e7990d736603cd2422cc3eb4f877abe64b790484c5a6b30a2114c30c10002e0a63b1dd9c21f74f1b54ea916c544670e83635cdf9d7fcd91b33bfc14fdccc33bcd2f3e38077ff28af26310c431ee6128764adb6c0958cb9a6438e4aa683c4f046dda5dbba1ff77f6cb010326ca20bee249345fb168643aecb37ec545004139ca4f59ce28e888d61580c9364d4959e38c6bee014a929c602af6510428fe1fcb1f0320a91badbc291c62cc4d8152d6f62c112637e0378a699d9f0514166c89b97482467fe84ad1539731f5fea03045ba924ae98a27cbd86ab0b8f22cbca8c6029941787ab3e81db7b25a74135a17aef53a3d734a309ca2576d4c31fcba5aa2d4d03c4035db82a49ba6a2c1bee9f8b6045965943a2b7b898a71e554644bb469e6d8776634964f73750f111c8b57fb6ee23f0e8307056b5a0a57802bfe3ec01d28485620f28da13e20c0604bcdaabb0de258993dc993c277b36ccf5d041af67837a6d7ddc030cb755f9c7ade973c36761e4e9cbbb9c02a44d8b88d97a5761e7bad9cba618f618835e5629559eeb0022ea2597e084a9e1a9970c5275768c7b886b638611443f7ba1f4403d190ae0f187e613a89db086e3844b1282f3099b2468003e5a4b1c9b80fe790dcfdde0dcd8e2185e65b85ec3aaa60ce7932b0fcf4f4017fac68c2d9575389d23a8ca7d6283f9012d6ada50b0bf2209aa138e7e8000a171c8739b3df26c6fbb873522285ed87f794b686ba27e66e2bda158d1df3654977dcc9f0181dda5ed534161475b055a0429e6b0facb33b958489b74c65d79c3ee8a2e83458bc80d91d5332b4164ddaba6f72d9415e82302adaff76ecab6aa8a40675c1709b249bf1e88db4e63db835c86b6e1d4770942c87eb7153427c27e98992b92be158cefbf983c5445db69ed06b3db0acc2fb27cf5ae5ecb0cdcc36b02c3e87951f53d1e36eefd12d36b42bd5af6b13b34ed560bf1db4bd6c93db47b0baa4382f3688bb184e177a1c5c512ba5220b8d8a462cddd2031be51b8c1f690733dade78844755dcd5d4e8af24c4a91ef80da9ec6b34db424aa785f1b039236928d79d1f38179e48810f6a23ec8bc995ddc59889027c5b6b4aa420b37fa04f19292d597998c4ffd6a9c7ac63c244ed77895d2dc69ebaab47133479bcf490ed68b067615e450f7459708db24cafdabaf42ca8fa0d05d0de165eb340edd4931b13838b0822469450ae5531f370b71b3f5db9732c2dfa828ce6188eb250ba85ec06d21b23c0a68bf8022e29a42e14b543f051484e32fd93ba80849e050b5f3d704da9ce8097e8e29083d1f7d4fef65d93b88d04424cc6970c2a02ad96ff318005abb024041107212e57dee0aca9971034c5c017272667037ca7e7880b30f0372e361293581398540eaac6ba85623c7fdb9f6b8e56414391f03613b8133ac28f48aba9e31307483ff0ecea300be7cd54ed2ff3f301b0b0856b07b06270264c527b960a228f903339880d39a9d818b2279fcf356a20e25930b1ba968fa84b44a3da78ab52be7098b042b198094b6624afed48310e8cd946948073155ee52a1001c96bc8bebe1ca3d8143f41697ac57c7890bf3633d978fe7c35a6a10ec1090cc0f5dd645534b9b9eddd2bd8d2e04656e039ee9be82c0a2573a69bb0037e2f0233b7dba8094083038dd1e89987207c65721f63a1b24d56e92c66619d2df93ceea358ff5289558384d9d5955af6632af05c68d0d9f3091781226645dade1443cad305d73036915495369013196bab3111660117d18ab88d4dcf3a76f17dc5ac1a93ac9cc0360459e3becfe6d60665043b414d50f25974cf4da591128ee7a82993262601366c16f469d5fb4a86436d58a9fb2c2ebd9e496cdf01fabd29acf2521a75e43a9b5da0a350559df0d8fff5965eb4ca2bfb439773d755eb498cccf83cb34dbb02554861f6455366644e1e1d1b7e8d059bc35b7e6e3811e91d5d1bed27a2e651ad0a61b0d950fc8deaeef5035dc2ad2627c3dc7f67cbacc4d20f3cc1071967ec89bcbfca77e9b6006ea4a7f55e1da0241018a43a6a82e4f5c9387cd2d1c7531342edf7cae4b5117fbaeb89cd741f7cbd27f2d815b8bf4602696f62a8a2d892d13aa452b567d915ee0c3b0f2e8c56a4352d5aa55c4302722fde03ea06726111338648e352f9fa2b2bce1bea5889a02138315a8e240492cdc2f3326616cb2efef7471e7134d3c2b3077cb0f8e9ceb47b80b1713711839a4dc907604d03380ae6c28b4168db2d704c2d41a352c07aa7ba3ced8f8451b218b592773ec0633c4182d51e3e91d239717fd600bf981f5a0a069234f4a75c78cb0e1513cbe4c71220c8129e066135775bcbb91de05909eaa25ad7fdf34ad4ec23a3f815d002bdbe5b3d015b8edcdffe704a3c2b2139078e28971fdc869b6a5781af50c461f2d24b674186b4566a23b4de7e29a9c061f45ef9074d610dacdc91519e431201309c005a5d95cc32580998e66bb9c015aeb7dd41fe3d14b0bc65d7424bad9437b23667af3346c78e4e3138735f624c977d64179e4b03b8f9bc97a935a715596fcdce1dc29cc41c36f3eb7d716870d56c3011d44568a5cea6eb4acfc3ca7a8c6389baf07f1d338d8eaaa556636e781da9aeab704428b1a943f9cc1b0114ca2d3dc313be657448c622e08090e236c7b28e9e3ac5659fe62686936d4a97ffc12ac140e2e668e19bb5ea8bc34b5511e41d3889e083c0456e723faec7a3f202fdad285dba9045b29a95a742033e4fe512210fd91679e2bb9441cc27ce13c2e0e4bd506d9385c0c459865fcd7dddd1a1003a3c7073f305eaee198bf0e325db40101a4ce805746249d4a08b4042906c109200a3cb529df2e17408a2fdc594bdc99d8486ad87ddb3f22e58244e122fd32242ea34521636474cd4425035bdbc07e0ba969716c7652779c68ff8e7f7168df6847f819415f953c69374fba4c0f324d494013ad4774b82ac44866fd8a83f4f9f5f5914de1b5419c98b775f3892ece11d1fd9bd4b44e7eff626a95f41154878ded0620fbc0783ea0ed8fe12661f9decacf03760637db64c4fd971280d377d9cd959958ff07a1a761a5f59c802d11161b5bf982ad4c2ed711d5effa05eb76d95dab40684e3059d6e0c8133e6347b6dd09d9d074ea417ee17e9d1fc71b98d4698a256974d10582bb552287d148915d2e0544ebb7ae14dbbb782f9f9e2c50b34933eec82a814c300882d7ed3e7ed0aa0df39b5fc6cf789f06d95e03377d3a8b0e50b334418d53392df04058c4442367e9510d6b9a76ddcc1883382f8ebaaa1762ebf889e2757caa80265588eb95d4e9f14dd142c3683e7a19530b6c1f09565bfa521ada1d1a6a4520426db8600622b08ae4de37a35b2d811f3ab161e90bf46c29613de541aa699c3841c078d8de713b73902b4c3682df08620db482689626235b9820596fba0d4bdace2637d8dde6de1552a6018309c797cd8a5be6a0b057f9b68c798b7c88231dad075353a3e13313423a558bb498e1ba0c07e0f708d4f4461a1e6323d4b2f831f716e52c2903a3b1fbcb56329ae5655fb3d189a6fa426012b7cceb3aa568dfe3ccd4b9edd984be2fb8546c5d9ba9c6345fe328d18e75c224ccf6b17001352032fbd38ca462e7d11550e4d857add3be1e0c5899d59a73f6161d0b954ba1a846fef08585efbd53379ca6777b5788bb0879127c1e9fe1b32f6d293dbde7fbeccf851a1755c7e7276ec5e2d17725678ea603f2fb985bf8ea71043dd5173797fb16bec4e6d8dadfcb7152561e9abf182be599f3590bda0ae2cfd60d8c608684be198259127c72da04fb18bbf48515ade4447c4e4cb4f9825729f8318202975da112a6470128ce07d3f14cdbfb03d579e64ca035122388e389f7433326d35d14a9e93a6819bdd716c5a7b19b7c6c56da54dd129f394d6f07073447701ba2a090e5e8b1b4495835d2914ef99fd4eebf78df23113d05d9dc228e212a8b9168c25c1bc654543cc22eefd346e3079258cba76a5db14079db27613e6aa3f2f743effe2b500267370b975fbe657492e13b4851a57b422b189be8bea39c02ed871b37784dd12ef42090ae94b4c47b19cba41d15a70209dd63bc52c055ff3922662bb541414add82cc2e70bd389551a110e26b2ab77febf4a840305849f7f1ae8537f6b2705dfc4a3051e8d55035d0ebf2209a293941e08d6d4126cb9e75309feda808672313c8f02a331cf9c6702f5c3e801006b07974c6132c5120d88b54caa0ada7b70db4c55a6f86f84898f0f7fea6d46704be072387c78e3f0ee5787ba4267cf40eb79ea67666d750e2adf1ec384762331bd3769a920b038bee624d02ecdd922d3144dcb58e5c2b4f69a56a5c94e3e23e7c4d621b19bae3453f91d757aabb2ba67be283e4e678a99c8e58c545845d26586703ac3533894599375a171d0bd0ff73f24a7511700bbd800dc25d99ccd04de7be6c290e94a177666a159d18d862acd795a901e9427c858cdeed26b2622833ee6309f89c27390d53a0691e22bc99e9a0fb8e11790897cbc9320a2b15503fa6c7d93018bc2b4cfb379cca3726e0c245d582ced5dc2d0527234f68bacaba23c67729bec49f1c9b4baca418f851e36999fb0b61a093588f6cbc9ef246a73d1d81dbd1572392fbcf5dab5ddc58d362d8dbd1fca906156b4a2a9b66435b8e2edfd1e54b98bda762325f46a67fe8e526a5bda47c7018762a596ea7f0923ba30d1ac9384a4fc63c03a429b2931a26ea7ac3e7a91d92f2053eea3659dd20a512878f1f209aa3e892c9c36717b2ca1524a1364687f0118d522096db915a31c1e0c39761b64f01545ad99aa5885e98fd3be7e580764d63899001206e786d5c8b2e3a901ecb888343fb3fb261000cb07123e794da67a79a1f38c51a3631effb840c9efba2fd67722676335900c4577611bdd93c885f8dd9f3afbf0cdf239b619c263b1b768e3661c5e336e23b65fae14ab716efeba1469c2d6e80c13fbfcd9952aed57b38dfae136967a552dab24d7b83d3f06e370a079837761194ce9659ac4d524d2abb99286cd1397d239636de0803f772855bd426d0340334e1207bed1ce8323ae5d54697d10c42fe2fb92dce5f3a0a6de45f224a5db20a6d64087f6f6cde1a33fb8c090dcea612b9f90a993a6693556f7ab5506bdc50405784f4eaaa5b043f04fcc244b12b32b50a531b2ad4c223302ca19d53402d097949b9180766907f25c4792cac4f8194c3b4db30ee12aae1207f3641fa9d691b9075d44324fdb417f674d3691a73c58b5ac6d7efbeb5d003a664e86279855dcd62c1e3b6e9d2c8c86fcc92ff999f0b64400a6ad223427a23c128076d1649c3d3a0e4314a4bd525cad356b66a8472267eb0d243b52c61ce169ad87d288ed38dbb940fa96819a695c7e146b127db2c8133d91748a074b3ba071b5979f770fff8ee8c225ca9cf5cec9641ef62424eb23aa4cd543b723f302f359eebf39818ea1515f8109e1a5c50b1540762e6cf1c5c78a4399b9d257689093538eb420c0e683d67ca61af5fb58002a57a3262f5a0c88d8425117d43fae9b27bee9193ba09c45c0d97d45a89bee78ebc3e756f90eb66cd98f7b2e0ba825eabc2e84b07188fbd4df776f45d628a913f74fa115b635d9375d692b217e088b9113bbcbf9255610ed7948c8c45f9737200b656a152e84335762d50de68a01410b2f92b6d0765112ff1a5aa6c5806e16da9ff0265e07687427992c0921e3d789ecf62a863ef0dc1f948e4eac3c16a634cc6b759de9b9c61865889060007c27d745e0cd5d2969a41ac2d9108fa873fd0395090db472bbe9942451ec096fca044f6d81228a0b60fff644acdd7da1111cf48fe08508399549f751519499d43013d1d484775971d63f8ee9518292b6ab2ab212e62da57b4b1517c51237ceb19e6ed34f612b48efb9385477dfac954fba16545b77f342bfa6778ab2208fcd9b60b551f1e61fae5219ae0d0721f50edb70acaa33bab6bca8968285b4f7212b751726e40555f55f19d477c1cac53d6aa2a42205772f600a2e7d95a950ec77ed23530d7ca077ae79061964946e199c02b0870448530d5992dc78a66c45a4120c41a9dc0eb1ee6c09708ac17d565e61941884d9c8acc5c2a983c7773814798890c31c061ecbbc90a001cddaf504eeedf8c52a2ed0e50a9d8ff551221634927b134a8c5f79131339ca75171de74589eeb4c7779c231bb92b4253cc10947138de105547d0563fd3900d7d0f7686672231b50fbcf1959dc58ad0f0e265bcf2f74a2c62663f5dc87694d576dd89dd5999b0c15e9c66264813826e78e149a854c616cd89db2645d83310a55ab6ff763f4114d0daf8db47aeceeda8d775eacccb1dad4acad812cb13b95bd8e4ca63dba3cc1349c4d8c32b6d570aa9e72520dad983114ccbb1910b3151732bd122123b81b7875239d2311f8f08eb666b38e26a190771c31aefcd30ff21d9a382ce00bbc7d2e8fa699a1d2a3cfc2298f7e832196fd63bafc7646ed9977f83b54072d24c098989d1a3d0190ab7f15362c670bbab58ef5dcf06a0fad9a93682c506a720d006d08a9ef3d1861e7a289f5c7d223aba2d17ec99165c653dffb53e6ee8d22db887f262b1a79212bb8efc0b8b1f42595431900f352248d670390c53695701f8cf79ff8c17a40505fd1116c76f1f3030667d5f5b971d95028de8fb8d480eab905afbeec3652a955faae984b09d3e74f1c8761da2f2673a7c54547206fd8ab7e92fa103ad379894cbbd889137fb24edce64b868110d372d9eff786faaa7b7459cbbdd40aaedae5d3bedf843c09c8f7cc24209be09b498f0b425ff52f37f6c2247242ccb26b143a005a90eddfd86e7620703b850185f26b8c526ca60b2873cc4a140c6fcc092659ffef3a7fd32d645f112869546d4d3e787fa0879e34e4baf3cc5fa07ede31dded42e9d0525c4e530ab65d107e39e4afe5dab5c0689f56fc9ae231eb9633555b0e4ddeea4a8c06f1bfb0e2db98f52f60cb69644e876af9831aeee331bef29c1ad5d82ea3959692830b73c9ca9beeebe305b6e97805f770ed55675cc16dbd94e655852f541d0d8c8f1cfd76bc81006d565cb54049419d698130f0a8eb6aa1ec9ab8876af5632329acb821087dc93770ae56b1541f22c7f442bd830d107ca085eb79493ca03175196977ac19a3975569c37b10d120210b47a504bf4808b88a875f9cd4f78ef96bc99e875270ce2cf2b23024fae37318382ebc781db0bfc096b91122e9cb45e8da5dfcc4e2a09f2219bda4c3c77dcbf9cf66c87807121c560f3fd4c1cf45f8411706a60d483d0a2f1ed0e1fe13c635befb9e6682e4b03987396243c25b7986476c8eb55f65ba481edd3905d75f646ab88e79c442bd2a31693cac9fc6b1d4e99f432706f753ed62bfe216c035d697ea3c5dc0dba0608ee2569728685e1abe80c809b9f69410290601565dd053fe6b9b442ad7460f163fbe05d3129bd780f68286884e7b54bf1af1bbb1651a5868ab870e41af6b023a194558db685ed1c92928df8d443ac2334fd770fccc1c94f7d62ba9fb61d1e4080e8a7804a708ee42bf38f7e9230594bd037a74de7856301a16a5037da49f21b2b97208e59a722ba064302568948b615cc215b91e7553cb47a5fc8aaf76da29049a6d291000de409620070d10feca36134dc92e177b142c909fe512a846212cd8f125217befbda59432a524533f07f7075a0793f4fd4fccd7d2d96d14c58fda0e1b23c6c9b53ff160dc4e59e587fd40b8e90e17d7b0331f16676c4e62785752b8f6e5fdd6bfc9d7bdffa309d34d2e2eb9ce39e78cac118d49d5952f0cb61da950caeafd18c17bc1beedee6e23494a8e8994ed3aba8e304c7d9431fb1d3384d07ff08985c33a2e17743089209a8299815d44e8c209b10b2f22902753108a81125008210b35ddd305a11b00558105132f3849307680f18b14309454abae14304850b7538572856b63cf620b70f13f07627dbff4b246d583d6860d26bf5ba284d79de328d359616668ba4837ac4658b5235cdf7b94e3fb4787cee160b5a9fc34de9320f47e0f3eb8d8bef010aef7de5b7eefed3f9a3037ac621062c0abd3595908ed6f9afd1e7febeec7243373bf2bb924ff0519964a52eeebf0cd04a16c67e6f607fbbd9ea32186ba83700efb7d90550ad6d75150cef86263a2f0e8f17550e751ddcbf7c2f1afaafa8a72896254c26ef7c2a5cbb75efe656996535fda586fafafaf77b7f711904e36318604760efe6413bf0e279f73ce7d8e6ad7deb03a53371fa84e851f3b767c4fbe8a7ec33ceac2a67f6694aa6fff5e72ce952ad3ed32be5d7e7b639e85db5dd9c800e4949f5714a31b297c8e755009b6ec962819755e12c72c831d22982ecab5eb6379a970b943cbc92c7bb77432fbd72ecd7377c73ec5eeca21777727cdf7de7b4ee8f201c6ecef7e4678bb7c5122f1576de0bd7eaf03ec029a078d78512279d506fc75c0e4392e3196f041f898992bab08c9ccd5851dc93220ab0d4824d29bf0df972ddfbb6c887f5387d0bd61ffe5ef41ec4108db5fc388836b2419c553391f39a2b64efa1d7535ed39fda0111d39c0ed01194ec24d5c8ec5e8cceecc1c038d807f8dbce55b198f552279d506244b49fd31cdb686d5753e6225bbbb5bb2efec6040063e6844f55e53e440f5fee1d567fdf57eb0fe88acbd31f03da7fa3bb7b82bf4407519c8de3a957326ae099999dd99dd636a14a93c9a7185a592702af78a8d9bcafd3ea157da2ecc7a33e4e6c275c5dd9537fe10427708dddd9370e4fd3ce707fff66cc8fbc1317ffee4f55b9d87303374ce7e78ddce4507a3a02999cee4a77d6f2b356f0f40a073245cef1f936e0aa461fcd430fe42ae98fdec8408cc71d2d200f7fb44dc2fcd71f23ec7b98f34c7d187a7ea6ab6dffd03f8d7b787db981e2e5fe784b8addfdd6fda9debeeee9632864fb755f7858fb8761defbac7fc2cabda4dd625c3fdb6bb141b392e82f4960d632525bbc7fdf63dd9b161bfee8640007ab9bf5d51f9bee36d589465e9c012061c2baeabb32f8132678fd9307c62136fa7469de6e9743a95167512007586611f959d985d77a5eed6003df166d7a2d3c6f09fb6c7fa129867523fb480a26e530c4aac9f2998c0a53b91218b1c48a9820a2404210460084115a0262d8841cdb545dd5253f0a9fcce5c650a4dfc508d57d0c2d5ccecdc1098b8f675f5215efdb96bc2b549d24a6caa98cc57578a176348294cae2bc50b2ad46d4e18772fa25c2e2f5e60e1c5147533b50a8aa4705205182355e405e74542e1455e1cbac8345b9452c3240e5c566794dba9913f14e1aa2be255486fdeb76f09ae2da8f27315f33d5a6483aad39ba67ec3d45d07ae753a50b26e074ddcaee3df5ac405f875aa49056e32a3a7ae943292503759bb8c2faa649a951f54bfae1433b0a8574b987af5e558cb10fe8dd84b0cca7f90015bb3205a3604a6f2bf481f3585c00c2551aad4cb617b35e6e8f690bfc1affe3d6a06735bdeefb7bcf7afde9b6a7cf868024c353667415ec677db0bc2df02df54bdee7b4b01e643c9606e8fb60ce1fabe880b6c3ab5ba6c0894f4c63dff0da42def4df5d1e89a0b205ee23e8405840802cb217b309d7b52370bb26d50108d5ae6200ee2207f52b75979c90c9016b8295ea15fda865d9643e3b1cf328bba346aa2709fc32d95eab27a8be260f5bd2cb254ea8d53ef253666e63acb705b8673ce9551198761588ae9ea9ba94f6c0cffb64f7c6089b194739648752355263110ce6ce4c630101808e17a52fc9789f07fefbd47443de295fb51541473bfe914eae6eedefc9715cab0421af5821867364c51513033e74041b1f1a89b655996e55a16b5e986836951bb8c4467dfddfde6a5eea7ab5f8d79f799398bed75e6ba395050cc6e0837e60108feb2091ba196cccdebf24d53f9f6bd6edded75b78704a20c6dcc4629634d5b976bfbdeb45c7eec168a2c579d2145dd74eab65f45f9a29aea4a896245bdd66931574a1427ae975c77d9d51b2fd48bb14b837597a68f080216bea8d7fbf6c0fefab73daabf284cc0ab58a549518d8c2af61793a15e3d867a7918eaf5c0502f886da15a99105aafbff6f9d5d775f175b9ebbae0755dd7157388361d29eaf52b254a17ea2545bf55cfa2dde267fb5bf5a2cf8454df08a87ec8e8b65f4d01831515a3dae6aa649af79e907dfbef97de54df7ff3beca14a00384bacb63ab9edfb30554dff22fba2d7f15b50ce8e854a6755bf7cbc12cd87002072858e20a4f0841109e288218b44086263889a2c51024809a42860cca20850994f001972b807085192ef0a20a5c080128cf1b073b283ac19c271ea6130f931273fb5a224d144ca633484c1d3c9098292726d39713ccb7b44a46a8895a886435d78b4a24c6242595704cc9ce7109470e97a3d9e5c801452d4360dd223fd7cde686cd2c6542629538f85923d5cbb5b4b4b4b4ec46e7d2a8c5251302ab6ac45591382efc1ef3904c379cca72cc64581e5f263fe6c7cced48ecea9336981093cdac01d3a1e39f5240081b82f8919a2991a64d1042b812d9981b6ec001871d32ee803b76ec783bbcd9edd819445b0ecb63a47ad9c0b4a76192b9b5239099991f6b8f544a89604e1bd8d9b0d733364316e4064633215c491bb3cfdaac970dce061bb6f42856b201c39105c981b126ebb537dcc037dce06e6891a26b6443669362d33ea9ee5fd80e17b50cf1efbae9bcbcdc70830d0f1c4c36a41dd364828149cd9c227cce8347b3aba8099a30c1e467c601a36107568309d3f1184c0ecd2e871d30a9264c30303039605407cc86178c470cc7b818be523c33c5339979f07031db72c70ec7c1a46dbd00e031998dfb982cc835ea21b3e107401644e6b403bff0a86cdae7333d3333c333336e66718836236a0b111d35d7d770d19c243232a71d76084000042080d4cccc69d78646f2c04e31d80e017001d8166d49aaef80edb0d80e5910e74a13737dca0290d9302da59898336e5900236c26b3910318c0009c63cd29975a28da74ea0068329b896a77ae3431d7de9c626647801e3e46058805703c2adbcc262601d86d74d1a6535f072abfd72da7327db181a2b4d751030a4503ca058542b5e440a170a04a376688106531103b78ce3de9c304cf4e0e127f74e37eefbdf78c24a95bc9e5b89d131c21e20812ee3ea38c7a849b95b87290108163010a044144013e00f9317332bdb8941a8b94cf8e765713d339ee993658903804d6f5ddf7a07b8c29164c89c9cc46362955ada4faa7583037595349cceb92fbd8bad036339b94924f25312ff7e773aeacd4c06a6436bebb10ee42b8d09ffba4e272dc7ebd1f2fb349fd000223b63cb61252d5bd2e0ccb309128b3d92546a3cc669798fbd75ca0138fd34c8d1aa4492a612c2ca4492a61248c547271e9125b1bd8cbbf9878d95d33a478a6cf1b7ba3452d437a03d78d19321b52894d8bd547b11b57094bf9ccf7a59f3a069b9e4b2948052e9fe299938463e2c86cb0d982a578664b16a4aaa912ccfdcbc585061a6ac06a48f1ccf740fa699b490796e2993ab220552de9f8ff1a687069c9f18fa3746386b74162f9ff1abf325fc7ffbf8ca865c889660089100e3f0b15d79502c1c47893a92526af9b6206296a8955aa54e9427594a1b069bfe605505249cc14cfdc6f19d2d5d1ad029401524038930ac02900333355e8228da0253051afd13e9cc15c29537c9c0ce64a99b2533789c167caf05914801535122d6d4b52aba88d513f6a59e55e3ed4dc4b4d08ed65368eee049c0c7c890448471d0ab0093ea745d75c95ef63d4b0aff2286d9b37bd53976e6eb5227c486f94ea8f8153756a6454a56efdeb4e30dd17a1a36640a7ee3bb9e9cf40530de8a8fb1833a968a961a80b23716d729bfe3a6df98a11f3205f7210144cff2d5549f1373781308c89fc7d944955d194530c382db5444da6711ee4f7bb23aa5326f1a5d6f33591963e5083a060bace0216757f8bbaf408579200a640014ad2e3a888e1e3a85061891150decf94a1f7b3444839c38933a470ceb59fb14477fb735a1582cca0b2749bd000900534c68e054405a1941be147089369faafe1f741012e425ad8a90e3342e5c7a0b884d060bac772a0f40f1576fa47a7c90641d920774d6e0c73004a853f753f879362ae143196d40d833fb5f92b2f348d4231021a4ae85057e80915ae4add76888846553bb2911cc9818bc98f46dd328460141039dbc3011104d358bf46a8187046b6aa565616070e248d920be3df43bda653aa3e0d081fb41c2d0836f903d1282116c653fef28446a98c314c0be3ce1d65e281ebf99d3fc789d36b3322171da2faf3e394aa74434c8010961e7caffd2184de59e852f5cee3abe07bef41f85ebeaede83ef55afaa74eac36412b005b1ae94307e18baa0ba77800f18ee3a8c1254f71bc611d535a9ae1430cca8ce656154f731b371800f1842a8eeafe7def3d71b451b06c620349485a1ead563bf7b8c35c618e389695a8290fe22c58f93872873c32ab672e5bfcc07a6fbdd2dbe29a43cd62bf13557f5f84d9f16fba3e63c00f896e6e4fd663fecc66c482afc77a42112f323a437fd2e5379486fd90faffa6641768b9d9d2ad97412e2be08599b8ea185a17a8437f7eb64b61d634a16f588ab4c7abe264964418d930c34c5e9102451c50caa7b1c0e6c414a177850dd49fa5c23243e58d98f5ef433756ad3b7a90be9d687029c0cff6a604def659426690ac3125e10c142c1b9d49a7e2ccc3e012809f56d51df6fa785828e0dde45159dd998f74078000918692f0bf35ea4cd2820d348988b2fcc7b0bab8f840375244731ba1d1476aa58526507439872e3823228014a23042088e22ac216700a982f9c318a4700c3111dc5187a4f3e80453482124a10458604127c714531768b270b658384b8a8fc40845e7808fd8004fedccb274254d41745c80675c354304775a5083d314b2aa8fe2ebf3db6fa1416e8c5547a5923481122016b517a1b75a584118630c8a8db8b23e1c2e10ad33d3333b3dbe727dc514273f386eed571e1094fb936f8d8dbdd3dcae8cdce8ee1f3289b703a5d5c8f7d3d49cb46b985a936d015bbe896a368d3a9cec54ec97ad23237d19c25e0c68b90588dfcf66853a3520df34c26579f61d36f0ff84b98bf3d62e56f2dd617a6996113db9cb0d06630d9e2924be9720155cccdd2017f2afc19aa3c5459e8d560a74a5e82830de6e694b81f92fb99546098dba9ee6763f89d1225fcd824edd4d2c6d860ba16582105b42a19af59af6b5e2b9ada4813d14da7b120ef87382bebaf26f5bdac90ba09484b483fee6f0517fc8b6e38afa705d66f6f056fa8625f216509d2b058c1cda9a8f0fd677bc4875492963815751b35e19f0a9f33215f236561c01993df5a2282b23d7454fe47fa792860a02a1bc32e1b7fe337537d387e4bf5c028d303c9a1e1d0b66158bea46dc3d4f81bda36cccacfa0d9d048da36cca3564c57ad07c2a9144baa06e5268ea6668a9f9b74931115d14d4a19f48e0a536113190dc3bd4306f7708fc382f4a8d564736954f6ecf949a59a7d967d0f8c2a65bf8dca32ee9d86614e429386e12f9566f70e3f41ce48859f8461b212e61aee9109636ea9ca373ee8069d41ca397be77b490dc6a25845c42aa594eb76a49cf372cef114ee721be37e0762c015c1ee47c88797fcf821ab1e98e6a22bbf4996c9a2ad68db30440071f5faedc78f07c244643e42ac77ba6dd0c330cca751eee779f48e09cb6fd602c4ca3b606b5668e9012316ca3b0dc36ea861f8855c31576cbc1396aff14458be06cd7122fa9c6d4a84e56dd01c166a62c95263e559fe012bcf421f30bfc6caa4b535207e3c733f98fb296da57ff7e33f7d69ae42cbab1f4cf3281f1a863f461f1f1ae5ac6018fe2c2a6f9184ca4f708730884d3398bcc4da82fba9ee80dcb10c8396f5ac9375bd65391854f024855bf215b5a8144b5c1337055b3f4c63598105d36c383e4e49f52274f2a5ca5fde5caa24a1a67c6794e8a5fca11585f223c44dc126224a53b0c98a940fe6769aa2f203a9aeb75ef4fc25d1a511e91eda810ebe73cfbd1779a98fde40c6dcdd9f0bdcbf6e32321bc33f715ed8ddddddfdddc84bdd8480ef455eead29b479d62b3653606072733eae0f22b7b3dee08e7f888ca7ff94605be6b5ca336b59c24746a8c98ef810ecc57c2d54cf7aaaa2e130d61ca50ad58d64cdb4b9ba548492eb4886e245c8baad74856d1b25ec297339852072cccd751a2ae975a8961788158072c4c48b79570c1a855f5c25ca932dd3cbebf222ef5a6a927611d8b1d184039605610eaa40554312da6ab9815e498cb84543b54f940183a9983921c94d49b76155e6eb9b8d1da6cac804d514848a5901d6a6501a1c6df6cace0542baa236863f84739981b5483f88174d41154b949cd6108f6d07e26d339e7e84fea6490e82aae4a957a8353043e932a559c738e5227e305d01816c059f9154d1b6170889fe92ab4c06cd4ca678f519fd15bbcbcdc3f724012239a39e00811f58f1f2d30044e8e1322d98bfefa6f94882699ef01d167f4d4d409fc11cd28100dc3a24ba4ed366fa566c9ceedb80cd29f4e3136b99f8b231997ebb7ce1949529dde381353e9987049a671d71dafeeeeaaaa228c52ce592a0971e2c1a667b594ef49f990df7b96f5deb3de7baffbb4615fd4765c5c9269b6fe069a7d0096b2bed1cac33026834d18f605f6821df1274d12c6d0bade7bf0dfc330bae1301a35cbe47caf1e8b156d4940fce72c48fc0bc33ec332c926d16fa307d223517cd87bd87b2fabaaabb22c67bdb4b0bfaacffe3d46b3ebc908a7abbe90d27af7ceaaa294d2872c9b367ae5580cce9e2bb6fec50d2773499f10de0d67a1f4fbeb2dede6d19621f2b17fbfb9fa16462dbabd2fc269fdafdf1fe67c05a8def8c324ecb9e6752d8fe675c9cbb29cf59725ba2e39b4b927d5b752edbe1a720f134c73fd13d2b36bf29b6b6212ea6125cff23a35a467a1394e224912213dcbb3d09c977932495fe39b5c61ba4bd2b37cace15828911afc2b54a8cadf5c93066c0d904965b2cfa39c0318e6e68636e90d540d5d92696e7074b2a8fe1d1f8e6b37fdfc0ce9e6badf6fefcf978ff0c1ec9c4c94321ef1e9b6b0f1af85bbbdafa38a29aca41b94b2239471f90853ed2dca1a63fcd72ec618e9b6d79a388a52b4aa5fbac59731be6c98c6294de6b9a4a47121dd23bbecb4c0cccdcdccccddddedaf9bdae0da9776cf9dd939e7deb773ce39d782bb7cd0aae4ee2efd2e2ce082051c97eef68ae3529dbee7d42b894d4ddaa5ef6ddcb871a95c628bf55df7b5ba7b7777bbc7c65c47924205287573296112b331491fb8925887460d6666768e0573241b366698c1cdf0442d4320d30d02f5fdb069594824cc69366c604e9be1868d1b376e90586adcb8b1326fdcb831ba21ca6edcb851012951826126b8ae91bf8fa48959173645234c62d36bb0b8f41712e624ff06b0f94e9a2e2e4e8374275df2b008e1ba46cbef7ee926aba9b23653998c8de9271b535923d55265eda57ad0c66cfb835535b1c9e5daa6c99548291e1727a6fb11cf280b52d55409a6db664a0593ff85e4fe62792cde2c2c2c2cec7686d2a83275a08dd99742a42f941aa42706e447bd201633214e3a29e53e914ce2da0a8a15af490d5524143321f165e64365492b5a16b49ee5565becacd5441b076a8b55996e47ac2bae1534a794cc6dae3cc8badbbddbbddf549fb0b9523eb39d2b20e5334bd76c8fb2b2aef79b576cd739c7ccdd2e4924472291f85ddd1c3ed81c9f6736239811565516445a8e09e7835dd7e534c9ec98991f4665d2fb01623081e6016228614debeef5c6bbf0dedb5d3376a444f85e7777f33bf7ec9e5799efe102c1ee86ef5f8cfcac225cdb7bf17d7c3abbfb762074cfd0f1837ef5b51a0f403332ecdef5e7c477dffedbf72084d01b4288edeeeeeeee42c8cc8cb1c917936c72e71a636696c2ccccccccfd5c042f52d40c3d182f4480afbb7777772184cb1036c62f955fba7bdd6731c6b91877777b85ddac4508dfabaabccde13bdff8efa83790ca2198587faadb5ee17592e4c89716ad288f123135d5f7b0d4c84da7c63fd58d5437961a79aaf75b7ceffde6f05126bb63d87fee2fc21dd576872dcdd92f350ca97ae1892ba2b8e247484a6dc76d4082187c00065ad4f0281153e3be87a5667994e01af93d3cd4b8afb41e1e6a648e1322ee7382689886912f698e0f0dd344e43b9a63a2a927eeb70dda2f2cc1051333bca8c19426d46ccdeaa020095a4001451082aae842cdd664447e67a7c6391f1986dbd6397ab36fb9df76dfbb04d4a645b60b9ffaacea2c3fc26777776977777b77773777f7ee766f77777777374eaaf2374308219c3237db1eecdeb96c63bcd24c276c635ed8d429a1f96c8210c27e8b09d33149d3028f10bee79c829d9628ec7bdd2fc8e0a4e17bee4d3c777f4faa37edbe43acdadbd22d49dd05ac18b52993f840d8e75b7b804c942054a9715b92da0f69911d838907926c173e3591eed06d3702db854f8dfbcae33d7a3a628914b8fb2084d0bb2184f04108e163f75777cfc5be98df30d15d9696e26fa4ea3bd57f2e841042c8103684f0452753a0b9b77bf77befbda74196e2b2a53aa24cffd7dd9d2d05400ee66ef742f678841a5d4cff7eef3d7f400fbee7be842874618aba51d8021a1555370a5ce0a965ec8cb66a9e0d31b7286ce18bba7975bf9e547f172aa8a0893b84fbf85d8c316ecc3a19aeadfb12217cf07900f22050b209bef79e770d6e4c9645794b656c56b921393257865fd24d03ef259bdc59be735d2261356a475e6de7d8154e55259dac60a4942fa5e493e31f1784ebeae7b73361052b08adae7d9255f863a414096689babcb049ba0e95e7ac1b92da394db7f79894985662187e86e1775d1d67416015801226a4dba9db44046618fe20604c134bedee9f1a8908732355d6e52cbabdacbf32cccf2676c04ef5ce55ce2a579900b085e9d2b26eef702034c0d38e786d874d59b96049f51d7629834a1fc4fc018699ea664180b84bddbda4c4261cb81550a0f454aed708480f0aa015be93eeb777a8201a869904e17fd14d564141b4bab66d192a3b197ef94026c939872ac59e240e865f0912b814547650943ec7c9c8c072d107178df29d73eec577972f308ea86fa7f99b69d3aac351dd4a75356cd0e6364dbae9a8da63d651f93d59a3c67ba003356ac41fd9a801146a707a81321932c177d6ab978e0927aa733e3df33787840fe671322bbf399e3a7aba552e5f628e4a8fcb5644a29fcc531df36723f84ed4ec44e5b7aec5ba2b125f1fcd4e2061d9d33c3dce471f81c4c684a0b2338a7b96c1205ff3b0a97b1a86dba7671d8bb62455d2de4165616ec3907c67c54929442159c2b0a14679cfd01bbadef2f884f8450c6293f73ca1f27b4f467b1ced81948c26a3c9b8fc0dc5d81d8437b4f3a0f7b88f33c1261d90284d913769d40a9d528ee614516f1285308e6150a9b2befa2a19e167dae635cb96087579945ed8b9a5728392b9c9bf1e7b1e899c6ca78e66a48d47e5225ae47c054242ee2ca41847bfa16afc01ac8f1927c31fff1423dd705236b494c6a2d5d0164bcd381f1258197e9652f947339628c3300cfb99ed011fc33021d930f14b96cbe9a4d48ec00a1f5c8210e6d238588ddf9594524a094b4260d5a2db1015d21bf737fdfee806352cc736c57435462a0ed89af940b8b2462f0262d24a4abab96f57974a1d691bfb381fb8f26a21e7d36d1d31e2527b3b12a35604ab15ddedf12a990308eea9b9c1dcbaa77b9a09a659cc47c2e024da5eead6a3dfb2b982a4cadfa599bfe554a9812ae966b960ca1baa2c40953fc2765c7f31c64f1a8dba655079c4d522fba45a3a4ed4222fd5a29b0e16d5d19bf89c05f19fda48dbb2ba4d1d6ad456242d8ba55a562f8d7cebe3d2ac0f1e4e86dfb276fa9986ca158fb678a5949276252d29b5222fb5a237f0c595703a4b89202a82a890978395bde525a394d5d256bebf817446f682fb85896006317882904a28dc4fa25376c21c90769bacefa5e55ce25f97cf8c2f9db304d04745efb40f1287723e0d045db242d575305d751ff9fcf21fe5cc063ae71efca62e27c54f38c8a1c1411cc4411cc4411ce49c04c7e3d04042e59580609afe474dd59d096e7777f750dbc748d5cd875a24559bdec0ef86fc4489b9b9254154962ce925bda497380eb2c45080915c78e5c86c62664467276a2e9ffcf73d983b5d7622f2540777a4a4b2f3937ddc94eaded3888194f15d1a6930cd13f2ba0c4fa8a93c21299fd0138a1af3b8349a0ad3c07754dc23cf94bab9ba7519ba0c1bc3cff283b9b18f5019aa943eecf3849806ee3c2960262fe66605bd3754bba71618c6d6174ce3debd6f0e3f39fc3c8b0c6a8d617d113421a4c2e4c574213bd4f854547e17a98ea1a47ba864ae5724b17468460000001000b314000020100c088542b170381a28aa6a1f14800c7e904a7652974c44519203314a21638c318418220202002032331a81023cc075ed8757eb19796fd5b5d5178e9fb1ca6814b75eda837543b37f547d48ad58b1b7ffe9c43f547d0f25ad4187b6e74200c7dc2e223e41c33332e27ae508f6dac6681849165f8e456c51ba19e031c411d3876d6a909ec8d2cc57407a47e93a2a58b63db9f4b75c7e12fc62412cd04bf1607c2c2c009654ad4e6e6173d76731b12dc348e12f2082be16e8bfea61226f3b24142cd74a61952deda680afd0c2175b7d6d81fa4140a85cfdda3b2a22b2bd82b74b37853e801404f4fb7988e9cee7d5590a88119355f0026c56ef53b57ed5bd1d8326e6c3c8837aee47bf8cc72e3b58cc0fd092e88c5168dde5fc3e2ef60206d6ceaecbb9b87b267c21bd0fa218f382158988cdb96117b8389cbb923b4e905f6f14480aed8cf172a17e6f1bc7c42c69b81a09843f939cf9b2e48c7769c80d2c1b6fed20143b8750b3b5c7c220c376a81ed874210601f8c7020fe9f8962f04b678aacc118105522a06802a6a765062e48ea9055f028ef182e7e1829c920382b2430ad4833e821402bbb3131ef028749dc9076dbac7df4ff8c74866ca6d97c8303c60c03079f6305eaf81e9ba807763395815413476222fa27283543e232e85ebeaf9820515f523438279f59b210de67f6d6038d54fab25325c2b76d32e10d4fd001961bcd1ea16e25326d91d2390ff0eea32a5a243b5f8a0016a64fd50b19242493262d49d071724805d576c1964c2c0ad5dc723a21b889d37d6260272d46e608a72ecf512dd0a26a970c32fca79f6eb35b461a96e34331fe7e95703438c364089e2cb5d6c8511a9297828a1a02d668cd30bf1e6aba313f212c3bc281054669c8a13cbb6e45e0f9cdc9b529fdd41e6e858e4e042041e25c6886fc27861cdb96bd2f128e0adc58efc46b3cbf165ab374878d68274ce3086e490f2b8fbed4e45f61005041b1daef2c70b78f5db802efdd897f46686d47187ba5e9f199c7fe0fcef4440c1bb08dfdbf9b60311300345a96b4a8723f2199ccf740b4e877a4d9a0b938805404cbb171a0220ef41b98f06d7b2783d80a9add59104fd6f82959f742290df4c9725c9e76a9d81fe1a653bb21b31ad149c1f8d74fbf0f5d372a38303059953fa67e25eb27b4df51f8c99b341759942a49a0f0d589ebcbc4a5439373e5f0b81562b5bf04af4e9aa970835c2c9000b6f685cbab89720532ce809400270a7d877c3e2897ec0b2b8af0e3b98921d8eaa3360ab19b1666764b239ed06e87ed133d1f201f31a51279932f97f69188bc96211237bf2435d42f9e1a05db383d19dcabcc15f504c20fd55d13ab497346dad8f418d906ecc24269f88ca92619fdcacb28999cbbd44250aa9f8f6283126206d5b0e1b027ebfda238bbd133fda211ba2b0fbaf158550b87f1712619f62ac7e0ec2c83d64e6a556b63cb4205082d037e4a7f0810ca0a6f098576096922b99f781b96c65aa7ef80a0a1e7dc780fc1327983ebc24694457809866c1208333054959f26f731dd8cd4224f95cdcf97b0839f2508fb0b7731cd75f35930dff99883fd35de5d922d5cc88180fb6edfc423f0b3b5487f453ca6a139ef4e5015c331672dcb9726e0d2d71e4986ac5d704bac5b51a921ffc219380e565393090455ff96a3e36847984163de5286b171db050bb6cad26304da0092996dbba37e622f932b3d06e0b1e4b1fb37c116b0bc8fd42f38fe52436026e960cc50f076c53f5b2bbeef371ea97fd3581168ad7410d0605772e86cd68a8d8adc421e632d173ef24203e083581b323b45a506e10217ef3ef31c3b921c8e82f75c42929ce8ef507bd75d5b51afb0e0168fee634660b6be661451ed9a5d77b2125383f4bd6bed1031388ef0a9aa0650c8c9117eead97475ff0b09716abcb73a4fe0082007e7ae4766b0bbb3cb447cec657eb83cffc20ac0caefd3412574a5fb5d7b792e679a30d4a1a800bd1147a06e50ba32c1d1635eaf000f47b2b4a04f6afb0c0244a9722f5c5677cba0d339e1e0146511e6b5f922f33e8002e6e4c7cca5a13f8f6d0f2031fe9e2e481a9181528a47ef846a611d30a637f3ce1aa78f3f34d20def4671004a5bd6514342d02c28743b8df5d7308f8634ea0f82c9738b864502c0b7133d9f9bdff5742911ed12324eccc959fe2957206b6a21bf22794bdc558666b2e48a458af30a98d4fa3990e30c9c2bb7a5dbe5f6a4f3faef53a1de4da4efbc516bbec3e20954aad44a71f34b1c5d8b7b86078e937f77a44aa905c816c815550665bbb8c6a7ed854c98dba7a5eab436efdfcc0fb99c9b38109a88a6482844dfff604af4ec847da954f50976040673e0ad0407b77d6ce0097a059216369d35aacbc1448618bc849131b19199ce13601a94c698c93e09693d830a7ca33f6029d0580524c0f5903bf169d79ec31a7ce4ad97405a4cd5f8f8042d7709de39d0ad3d018b54134f27374db94e2eb490c50dd07e724b0a3cb0e199eb23e49951feb6799844a1f0b88f6f0995981e8385b6343640c6a708d3dfdaa4d4b2c9284a89f5ebd0bbea02cf42c9ea89a2273f79c48ae07e0a14fe0149b9658e6e3a1e643384cdfd111138aa9d00ac3a61786b20b4ca46571188b94265761864764c29bdde42e73931aacbb68d3ebda95ba48b669bf56a40528c70974f72f36739b01cffd7481006e6d2cad5977e947e054c0398cedf2f3f23ba68f2a914efe8b7226025c18e362e4d29c4279e2c238c8bd61be875cc60960addaf25cbf23949d5c5a55b5cd382a08e92c1dd66747b0446e6709791f376afadd26db2f97a3eccf6e9e6f98ecbfd3261132a1baedea427a4e07f35c0ee6dc6f1fad3a23250e331d4f5c9c67bfacaa1a8b29df504f9d95a473644e904be0316e191c67e7ce7ad1e21c926347cef085502a25f905937382d03835c2d7f59d154e7fb5da656b166c8d750e112a93179750f91be4b7a8e4619ef96f187e3d6544d5b4abae70433fc9e8c0b6f46014ecc0dc36d284251e23f04e847851b69334e57fe638746eeeda5f583b6d11ec2b27cd840c07867553c9a634ad6f914b90bf2acc2c0f6217e9940d8c9b6e212bf4cc0ac3c52142e6ea07542bd44bf473c7162ace6f34f743e5539d1ce3d63282bf4c98c03e25eab10eb4830d05bbfc5c616f301b0540bcccdc8b63e8b4323084d2d038438ca8c9d9d71a50fc0ddea0561e1e563bed2e6a835d4ba05a7bc661ea591a6111f87f49e6f7440b98298456c2581928963bf97dea4d2810261c326301b9939afe56819f8214051c04916a766b5e6cb0b426223cae3fec89602d5603acf86562bbeb9987474adc99b28bd1d44d85ef1879e08152146b95688b2f23d048879b0351570d9f373407913724b6cbfeb9b396c5a8eb90bafc5c58ecc25f8bcf68a8a983c7ed520bf9fcdf1275205ab56eb028fc1682e2803fc2665989548a79e29261afa9e47b8bf5eb54562fb9654f33ab5c118e9ac3798275abdf7c68369e1b593b5ffd9a7ee00ad4a8ea6efb788440216836215c94bed5f64c5720978dd87ee13b8b6b468a82f56bf0a05cd3fad9b0c27d617a84902de0cbfcd3555f68dd4aa556332034442987f91b4108a12909763d7bcb54152b5c9ef693f06523bf1fbe1d23b60b9b076b2000653a29f50ea9bd3388188ba503f8aa22bc9e81e2baa0942ecff0eb403e6389a44faeac0928a054a05bc4d09c7fcb9aece14de63f9d079e45cc427c86b31c6af2bd10aea0b047e5b4fb2fff71e82b5df0938444b629785cf310b27523ce5024d292c676319f3259b21cf67dff439427247c78d8c5813797503d2f356e57e27ab13526324d1c1a912d5500f394887b3e350041b60893feb52be82ddf6edc01b03205b2489c4f8587bd9e6c0c957beb867ac554206f2a6dada0a33cecb00cae29603ef92ee62161d5738afa923736ef76d3ae9d543fb68672f9d6248498e2547f5b381f855b2d729aaa4b8c7e9e1af389f65107f8ab2aa65862053116c927bc3c9b6dcde7a5e30272e23cdea44af8c68abfbce475ed2712c11690585ab8b80fddc5d2035c19f7e2ad311524299c23c838ba97a8e9d5a0d7e660f580ef37634f5decb887467bb50c570be0cbc59b8238833a8d68065f3fa63b6a05fa7f5b06b85d3479aef68a5d54e8617487c857ed5d98eff36854201988d2120737579a9954490570c2793eb972b8915b3d463a2a7b88cd81403815a8e80555487a9a2ad4b55405c6acec33b78b1b4c49772b815a1ed4ecfe0e93e55acf2d692f672017e1710bd4f168c48ecc22b50e2ad9a27c771f6e37700aa789385ae5eab5117fddfb651189641159850349bec7022712a00a82fb68b33a4e215a958a36b80c271dae5efcbef21240c985df824a4be198e2b216efe9b86b21d6742c2512f15b5a9f1509705edea58c542b70cf50175de889b1ea31cc21ddcf55b48452bc8cade4b792ea8885d5a64c759885d53e8c85d702bbea8ec01f3412c989e1c0b808688d8c1bc41627a7ea15c034ca984e70c2442699454e1e452427ccad9c802b98ce9cbea676fcc1c2d8e29ae9cb2dea711c8df2f6638395ebe400bcf9667168ce0204abe65356e65bd7c7950f744e2369d33328b4b00bbc0f72d4a8e45baecdcb762f6b23260b6130584e0fd3e5985c60d01fb91d0f466cf2f33171661da29efc6d21627c49b0a87c6004f36a9b121b39c365367f2dc9516925049ea7914711ce58296cc408211c92bd0d009c9c55449adf5c83f750684b97c846391263730f2a8d47470148c467291b129b7d7acf77954521a25d24e7ed201ececd03910772589e46cd2934909db2493f475843d6e7c754d94e0c0d99d9a3db11afbdc3e742d758459e878c82744de281224344206a0294de5a07a1c807382b8cbedd2e5b99c65ed3862d9b45371d173a88b84294e8fee81702448016e8c248d4ac30bb9b6a856a64b7062396fffa0ca9274244aaa17b72485433995569b5b6c3ed4a15e1c8c04010b9ba1554ebe22b845dacc464288253c8907f776d337cf2546ef015ceb84221c59052778051876bfc3b9baff17067db63565bf7d3fa5858b2e32d08c7364eefe9c27842340990a677581e9f06f9739061344b3e78a2aec24d5a3cfedb98406075b4f71104cfc1a40789f6cf342cd3d0e0353fd7aa753572d2e5ca321ac16971abbf9ed83b574982a8b571eb0af59e1f0bc86cf4baf6e543b2e877d8125038170991420fd0d766490d7cee3f9e3b68001b3a4809ba0b49842dcad500876c48a900154753778cb767a8bf1fb8c85cc441fc206bb07f902ff9669834b505cb246ad9d015540eccd0b7206ca1cb2025bf6f3b7f1f046c85618e3cfae959ed314c844ac499e6c41e161855604350b164e4e147ecb069568943bab42c1e126cc899b873241b0c2d22c27671fae0d4db8ee6b86eab88573e156332ca2dc8b21c6f2495308362f1ef6a2f0dae9fe8209d752d6b2a9b539b0e77813745b3b944d3714c63f2cdb253fe8d18b9357eb0af3b99618f6f24bc24b55b4d05815a841aa87a7bdb4c75da7fb5c7eada8fd0075e068b569ef3295d98bc7a35938174e62ba73002220edaef46108861fdc6117404cf3b033c16b2d5e68deb8cd7169caa8ce80af53226a7c3b8e852c774f7c0e7442dc94acaa39c31ba73ca30f20c94d298b9a3d543ec819d32ab63f490d4b26b2a017e3b305026c47e3b1d88d4317e7b2634cf067eea6ca4212013929052ea4d2e76493f0798ab5b994007e8c611c739e09191c54e3e98693b37f60c505f1388e00acc09d4b7710310de61f91bd92a01a4ca16261e213ed67ac8c58c82c90760b825d874107e3ac5c6f49d02780178dafe19bf1bf3daa9576328513c50f6ff29ca5be5fbf2dd8091bdf97ac467cb338fd21727ffba48fcfcfbedba21970825a9d92eae02ce1dc75bbd77cb75708fd0a0f4a3091fa2c2e8d106f41ca242457eb76205fdae13f135881c40689be693f88cdcdd9b2b9b53be08e7a9566b46c5541cf697e75f51acbd8e0ead7862a51ade5c41fe6bf48143f94432316c9ec203a71b60e0a6ad3203082e1d52ad67832441ec65779a5c427438909558c9c14944f173cc99e20cd74fa8d1d1497a1b33a56c6946dd218187ca322520df9508ef0c8dc7c7234d9894c7cf999392a37fe5a41ed65e384c11aeae19f9348c7848644d579a3b947f1cb31fff0b4f4f96e887b3e79d756c88d7178747060a1cbf7b2092a0f610612a90bc4476c0afeee050a296003db74f2684981df312e5e1ce59049af45009d1fd5b005c827ac83a00612408ae0ac05099ca248db1583dd11242b84717426de599ecc19c99a1c60a78f221878172c843fd790985bf08faf44a0b559c104f586267f250a81ada5f3def68bc00e3e71e1dc5caa301eaa77f71db9c0019b12f21be6c17c09dec6c2bc212ca4d4c0acb83b358a5b2194502ed1ee144de603a584dfd17768eff9361800c0c2861fe74c6fce6cb8a6a9bf0158a7544fa66f64da42c2013834de1bf20482c040006e769a190657ae583d8305cb3a97da4009412d28120f6928290b2063dac085114362013c89023693de845e050665077af28b1f682ae0f3d8a4c0d8a7456ef4b5575ec5bc78b79d36d2e0410868d08813e86dbabe2edeb4cc5af902b8915e25f445f33dd19b435cfbdc261da86d9e90e90befeb0b83d7558415d68a624172c9ea98eb9611ee0a994b641e52b33894bd69627395201cdfd3291bdb9d2dbca8a321ec7420725e2a237923183ec46009c2d45b43ab6a3d3fd7b784382a14991a5ec0af03f74c887636c26ba974f9913637c788c1d1fdf113f4cfead0b6f39b4c683f6c7cba92540d99b146137cba80628e99664155c4a131e26f2a1118d69dfc2004dbb918353fdef6e3aed7cc7753b91cf20183fdd180ba80702edc5479f3840349e0a026e34f01a8416100fa92a8c5acac7c8bb01b301c20bd19a137c9da652de7dbbed47b288345660c808e632b00864e91ed3020d922d87580438038d71627b8e3363eed9098755d25584b8d053586ec432ee0a1ad3fda03158214ba7907b9ce01ebe0f98050855415fbe2080ae1d2471d4fc41bf658e6b8fc180ff3a0fa50f1c80fc2417cc3e5e6135d35e870d8b8d1b9b46cfe0b24b8e14452b6f129dbf49ae6c158a7ed58ec9c776bd499005a399f3886ad0e401a77d9a7803078ccca252d861ebb377b979bdf3b8fd09fe124a065d8952bffcc27fdc8818a679ba561b6484ff81eeba1191c4099f26e628042fec4f36c711db6095f61955af03987d835626acc42bf62d6f013301d2d393ce1868e239bdbc7e68ab1068615c8df0e9bb01d5e3bd8a601bf3e8ea5a39254282e9ce099cc4db31686da1718c4373b4abd6f990f79f2db0887a3821f21f0d53cdaf6775ca11519cae7ff9535867d0de8215235c1a35d01451e615c778ac62c02f54ddc19b4e0a461cbaa55af15812c8a5c2ea5072c0c53e88a2541fd874b6614f7b71b2caad781d949cf1fd91f65c0cf0c70d76b0f6093de3423fc25952b9d202c6c3947a2a898729e45f770c0d826f72b707fb881e5ba6e22d35880ace5ca06736f320502548a135326ec7c95121de89b307ba409ce4e741953883d7a32c349ac9362feec3bc7cbdff8118b9d9fc51216175684536b4d04c1f2ff6e43f602d4fffc794213832b30bf2bc3538b576f88c41f7837d0bbf761b5e79f6612c9914ca7ce24b65ffe7974ca74263bf80a89b09a9bc69d2877afb13a05832103d5da799f9580304fba1b06263de48f8a218fc19c053a4b88cb7f76821a2c48df6f1ec7c16f4847d9ee84b45ca8d4330bb584171cef9837f118d829244526150f80714c2eaafe1f5681d55057285f22a2b2cd223341c61b18b2e52d6a4446b12e900ddd008a2280e7f491537488daab067ba7d620f3d53741d41b3b8a5924e433d2a4e2b3bdf085cef9089fe291b4033d4fe9ec5740098d60b4e3ded9086e76e29d248617316a8ac03b68ff8d6857fa052f9f8a66693fe60f170a00fae6fb310f2b2dc87e2679235cc0ba1b0101a71013a2ee34884fe28a3a83c87c35eeb0f37152a9d581be0edddae076c6e5285da31f846063dd21c7aa5b19eeb6116d18b92dc44e4e463c6abf05eedb5b0659d7a828bed043c4730d9be6f8cb2f2d01d4de9a0dd7ab43442c60c3f47b7616d90169009e876f89683848b38712ee9db01850082a3e0305e16b186ed811e5b8de52aadc257c46a41d6689239c8900badd851359c39d8d68d7814c21c1464e214e06d331c900de9feac3c1b06558849970038b8ce998d119078122369648e58733d123c00122547e82d88670866b20ba7db1c7672c64084bcf10881bcf9ac0e557d8a944fdc4f6a313278a6a73356662cf2d7008dcf55e44b72ffb4bd87bc311075543e95b026ef4a3a5139d4bd49fd1c59a1825144308861a36c3e01fff22daaa273ec4606ef57508180449d4f7d645b998314007d5b4e9676c87204ed21a8c231eb2b49b4db3252855ccc3e3650000c14eb1881acff27595951afc9feefa94facca3106c981c09eb8d09ee0e4095c08f1e7fd99007dbfd472cf3df5714401803a1a50c204c6c40437b623abc223af2d06b1b39ce21312a71201c9376988e0454b6ed114f4eb4cf9a30a5395355cbbf2f089af489196638428cacc6b6501efbf02021d0e5b871162456b4237b781ab1e433092041b32f5fa0e88be106bc5e161a602033643f0b382f680d7fcc88acaabc3f6ce4c4e9f112b04fcbc74f60cd831ba44d3b53b44af5262d4283f2e0cd52adaf1ee81853037b1acc1302f31bdfab387c6be264207c721c6924c4465173177e5febf6da22077bcdedd3b89b306eaae063771175e5e716e0adbfd363c8d4ad5bf1fe47f54ccf66f66714a9640d0f2e133ab3158152320a37db01bc686c28e6831ca637ac0d73ecd90a4c7493ce3a80c55293aff6013013da30e2ac83898e7fc70796d00ed56b4840b983cfa5227ea26cccd6fc5a01b7a2c7a61aaf66af3dfc204eca0ee15c31a07a7e10f0f5d1a2fddef9ea0ff8c826b7b229dd122f773f3de4009f9ed0371fad6d85dd5343ddc67d647e81c6279acc1555e21dd864418aa1093a5100d116b3b735eb67f6b06e49d36d0471d44b29b884349557f652a6d8f59f7ba89c4f54a4b0e07a25b233bee7e3a8ce1c0a533652328763b1a37eeb5304585411c79a1b9860b7ac9a307a1f67655fae0cb8d81410a0747b79fb62d4d90a6a9906b3454cb7278f0289e0984160bb63599528e22daacd3e063b35edc7a78c82b9eb4ec70241bd5315454293eed42b1ea5adcf2bb4da7371482cd7f4b56309b02b85462c0dfa3643d241b6c1fb4a3c27ee70b68240b709cc21744da2998233fa6e59286fc722417da56d9197f3e7b5f82a880ed5aa0ca826340b242c670cc3b3c36940e29afd51ed82a4ebde120d8f59dd0fde04fc25e25e9c8fa3606d83403a15892bf75889ee6ce260008fdf8b0975311aff7a359be0a7f2f22157da2ebc6ed718a60f6cab30821c3e14928b20cedab2f0dc26bd517a96c39c6abf618a2ecb37b2a81743966c05f61b6b27b3a4b3c9839d364e27c667c0077e4f39cb6243cee404d2401469d82dfb4d9f9f374cbc416fa3459016fb3c71b6d917cd6a77e4b2a67ff2272c3f8445e28cafe018b1ac948491e910aa97df80c6a60cc1de3ecbd9680f4c5c9e5345d51fba8cfb07504cbb227483535180d427712177640652ab4a6c2a45ed5a04376328ff23e9cb3cd9515b4a63d51dad8b486832d96676103bb4460cacee222aef85e619129e5d505f8f28667b02886f6b1b500b78a3cde43edc3e480b5020fa9fc839d5f742126278d1513aa0c507ba9fb5b5fd99eb2636b4d384c623923aef9968379ede233844182b9641fb21b2452334c0c0dd6d616648c65a3715a3f1671f9c9f5a145972066bce92ee02e6b4628522a7a63c31329b592f252a4c8c660d1f469560b95b982741b422908603d09e9450bef197ea8225cb237e949265bd55c8ac97217e90e5efae3349856b9b750aec88bb79727f10db77358451ded9c04b1250ba9219e84731b92721349b9d44949f9e02ca98f566ac6f864724669194d0b46d223b3fa1042f931f7ef5ce9c4b323ed513eec0c0ca8d93e6203fa6952a7e6f7cef68fd7ad618ad596cce4645a6a0dc2bd22ebbf36a6abcbb2045d4a9af3ef709bf3b9cfea8d16a5516e8b8d5846e69a4abc242642932d708756af6a18da870442d04329bec2fa373d42cf0093b8dfb7d451d838d5a57082a24c15ee83a62bcceba9a6690828a52169a2133dc020837a1b425b0ff3a6624c26099b2feec473041347d6e103a3911583fca1bbb157a0ad3893b6a5575371193f352846ca3b524cb33e080be7e40267a43e4f9b77d893c48303b2fa1c62ee251e24a9d8a1d36038c663bd9ed623d45dd4b511b9e7e9a2b0162b280d24f603f5bf8a0e80fdf4a0bebb55e3b4d09916bda75d07d40d0ae423aa100f19990bb0a1cf9e986f7df472ddc38cb89cc3e2f368e3be29b16bcd72ddda35ca6bd362c58820c6075459ee75bf8038a1b1f5709c34727e1cef26b344a2020e3d8ae828f60cae63f8d9f509389728da400c0387f62684e64d9076b84ea15f9280b41e5cc586cf6bd82fe8ffbbfcd550a3e99f5dfe0293c22b5ce5452ad6be691de09ca1a477ed96c8d58ff59b7345f4f179a8b644a95ea215f215aaf5e2972053c5c5e2faf4a35b92ba442c63de1ab814c8250d86ee3e3e08d072276a9e7a367359dbb0dc51b8e9dfd400d4b6849b2efadc8dde1055a59a61f603e1e970f19a5ecee6aa2dc89cd13c084e79b756443a7484f2d5d690cfa293ed5ca99b7f1c8ee324446826eb3b90d20ad2842d27f6fd93e73f778caf1c520ca08f12ce10076d81266b7144f1bf5c73323941ceb02c793e04fdba1058f52a797f297a543b335fbc6b2e28ebc67124e9ade855bed50d7d7ac72af72caa26b1b2407b7135596252c7133ad23288acf7fcaf456066187067957534e8d9f64f44959127256d7df8fb81b26c5c66f47c9e4402e03e08ece2505b84d4e0586adf5109f3660d9363bcf2703cadec230f4134bceb5d337f7308bc008479dd89cd922b865ec0dad24c3e0cf966bfc67338059a93a3bbd977df191e5521c7a0e586f243f7a91a5cc91a5a97464c866ba4999861132c76c24a1f181fa742af8c9c0ceff46394d2b4b00b6c7b73d30310cedfd5b42a6322262569a317ded5ebb946a0946c385e33f3492d63b0e9ebe36bc68117a860683a64a17adb27a044ccb0ad133d4a7359976083c21e99ec281a854184250eb77741221148d1a04a70c23b7b468895ecf2cc265f6e00dff97916d73026b3e5aaf4e9ac7ebb34d110a524803d676b796643965e319d60a9736a465311e6551958ef453b4cfcd78c4bc8923769a938c69f444f9dbb38f2c74a75f4404e7fb5a8ed530b58acc3970bebdd936e96aa85e0e3b52924416b0c04b586d8f02396a57655f017495a74af91f9f37a6af1b45274987517a7573c48ed9edde9ab6e8e09b65249e6c79e0abfec4ac4241d1312408348fecb4bcf05c5dada162b7ff428ef8ac5562c68bb34fa4b2f672f18835613d3b45519e9c6842acf4afc101c147746cf58ec3b11040b466e5ea187c51c75a4129af0ca00ea9401c2ab6f609fd2932479c9bbaeacfa3560ab54556870db52f55442dd1fd7dd8b06e96afd9cb5004f8a358eb0ad0b2f2f5e53e8d5fe89b9648557120f7a8415f0b9cfc1fead004591de4bb81f9b63cca84e9a56f9305f8322c636decc238167f44a4719d58d6a9707895a7bdcd733e6a0da0ac10615e022dd0d42805df1c09dabd4066e7d95e4fe54e8470eba0f91c0f69d7f9b61efe058ac7ec202675ba0b75150538810d9df7ecf04119d126c3b4325cb2860d34205ca005909b9d13b91d85554cbaed887d6e7f600228fe9c294b7dcb16b76bb8eecac5ffe33200e6ac71b32c6a5c6db565a7cdf378427fcd347f344e021361618f0816812c46f7a82e8d7fbd8d59b7c76a84ce28ef9f79c0173f2221d2b010373dcc0381f226e03e93193b4bebf87f75b0d74c924b0cc78d2fe8931487abe73d2664f5512cb8daa39e09e101151939baf0fd3216ccf631d3b49936cf865c3c251b5058bab30937679924e927ea0837a8ed95a36e4d37eb429756ea6b15ea6e1422470af1a73eb736e2d36c89819b36297af7f7703687747c982e3081846ed1862e5e773659804b2ee3ab3344b8811cc0a06ad21cf7cc08e2c0192a40764c51932e1dc4a4fa6d81d799a8384e8bebc85bf4a823e49ee1a175fec0733c75c6626b6f301d1bd7522b7cc00a7d795c546081af6d5c2d017761fd48147d4a2ae01af940bed55b80c5d3213f09e5ea93fde565545d5127458df535570115f446f3963359227ce9e5a750398e1e1045a7fbb980bd81a460ae84ff8a90537cef3f54b209480721eacd499788e6a0c1e47981b118118a18111c952f7d354fd64dd1b2670b3786c2fac270a56fd0ed8c376dd79a27e14060cdce415831cc9a092ef2d3bdae609eabd90f4a8443bf4d77c0d57c76f8088eca174ab7a730ad4bfab615402aced66539ad4de2e94ee1a53ce76f04fbe376ef410e0dd37f1ec2f33a832ca7857857659f6e1313066d5973e450d4294037cd3659e3d5e29b21b5037b6c141a2b069045082606b188846941111e4ff3550b0c9c7349b17a609d18433e24877c2eaddf4ac56d7cf13b7ff1b98bb380210c28ce70f887a9a6dacecf01fbd9423f69d9a2f41c9c6955810921bb0bed38059704968564e660ef1fdf26566199a55a530605dab7fdd2e3143cd102b48e654432bd41a4330c4717c30191635cb06552339d5c055ea793ab1178b48b83f5c27211e83c1cc73cf299023b9b5050f8893fff80259c278915dce46721a8eeb387566d3a40090f858dd4f6ccbf940d82d22fad06c54593d61480540cd39d7bbfae6984ea7d1f9f77165e27e1bbc51cc290f89915959b7bdf893e4d0351493f36ce4ff9d4a71a5474d47d924f32940c47090cfb2de0d4689a12a9812892cbfdf02a3d3e8674ec7dab75cc70cc7cdc08f03c0c65de7886a44e89958d546f802c1c39314cb4ee93f347ca976657eb5b692ff2e67042e38a2f43e7dc3245a86dba97332a438f898b733651bda881bd0020a860459b73e14187d4c25d078301cb4d8e5b7fc6383a82fa0735a648f58e1864beb233c08a1c385950f41ac513d0bcd0591e2d4645ca2c9cdf529dafebdd264074d4be5a61c9b1c013cee1e4a23ff8ddd570ab1a21344bbb261e197453d200581dc14f0a6c210ebe937c4ee71d96bce314280bc8b4dd1ad3b748aacd787e41ebfcf5b42a89667d3d887205d4c7f8c4fa584684d8b74eed7e6c8c64dd1cdba3ec6830ab4fec9dcce40d80bb6cf53c59e805ed0377401d4b0b09b1de3f35040655ce61da6ec10b5f98a078532b1df1c6ecadd8295980e5fb8e6aa5272f34e5d8ae7a42f8b8ae038f6e0cd781773ae2e0c08e8c83344dd932b9eef0736287dca6a809adc49b797033c7dac059c2bcc7c8351fb41e847e19363ab2089b8cbdc5178032264099173f7b760877a23d13b3b46da98ef767600c86d4442645bec94b925ef32c7a15dad0fd25a4cb662a22fa1fa0b5aa6bee5d34b82369b55b712d6eac6e96c445c7359abb53f5a2d9337d4c67144ec43f546b50a9635fd7eceba4b4522f0e84ec51f2240fab389b1983f30e211cbf493c631951a2e0629638cdbd7c04fc67ba9b51909db2a74d6feaacc0ec0c0c1ee6749f670408460be91c6e61feaa28bc7d3fc8df1e146ee27a3a108d0f13da0f4d9b77280073caee364755db43a1c9e0d6d9d732d1671dd8b4a69b4c513127dc20a8966668512c2fe06231c5790c414d408e4aed8c17491c4cd1217f89dfe3e4ec72835dd22b2a3c113d87e2ee40de783326d3be08e752ced23c35ca08931b66421633ea96859fef683ae7508ce82543739e789232b3a994d66ef301c0087aa8e5664e7db8af87eda59d55361d8ef38c00d6c86602448551bb4920a6fdd6e095900cae2524f537360140e19181c917f0c019933daab2926b33dc5314402edb41ba7d36b9b50ad53973003d7a58d1e9905f5c00efb05c9f3b2e57eb1b3cb6a40ca9a97a56ad7034cc5a73a37971e10cc47cf8fd189046bdff6e61e1a04ff6025c942efa1b5b622b3492783f8136e2d04b0d0e2fd2aa83a9b4510cc2b6e6acb34a2056349cb5575c92f1d9f4f105b51e53cb783c395b9e5e1f44e890617533af18b91d928895e5d49ddee9f1fa7d7d9414da1a42516d05d65172b2d6c220b12fa69a3ce9e0a65fca6573cdd029092346bb054e2dcaceb091e7747f67a391ea8872020f76c938e2fae4d1c4ddae23c17de7817da568006e3bb7bc0fb1f21de52f8109dd3080b43d14a9ed24f2551afb5dae998721a002133093166b7029af379aad519f7400900b4ab4f33bf357f86e31fd1651d157ca0905e37047fc8b34dd52219fe281570601181130d5b7bb969dc38c2966a208df285e18d877379f4457153f24130e0d6fde0d8d1e60d4d00ea54c925d86d1c88603f9cf09831eb8d076f8da3da5bcbcb63183e0bf89ac9907c421a4577c5e6dd4887ea7111e08459a2eacb487ec40161676c1a27621594fbbd68861ce8eb4818584b58ce849704127b60da42f04493624ea12a5f2b55f50efcf9bab2709a434a0de33a5c5a4910f2cebab437da763d1482508c43c51d336b5f37cd0e9a41b930d7ee558259ed9b5c2b6aa0bfdd86c70ce24a0083313ba84fc23ff33b81a0750416dcc0fe27ac3d4ea48a6130dd6dc61c9c95e054313b7e163571f50b3a571e0fb9ca03ef9d5b3a02ab1d5ba6d12df6737df8824af68d85dd64ae6961dc6f6bd9c8b69b2d2b3400d96fbbea3fc0df72551d7623c700610d72489426ab083945a1d69008858a73d427efc9675c6314fff4c2f0e1222646a283d083831335baebbd292b5afdabf8235a489c9670510d1c816efb8769babbd3cd9b69567a7b367bc3d97172fa56ac6a53eba8f81a23d992a67b285d3d16fa05297413321d5138a61df22f8d0219ea4ed70a70da6d340cf3f537144f9ef77c93f8bef9eaa6d4bcb5051be46312d7ead7be4eb59bdb5be5dc45a5f6ac707d0eb5246a3356974e0162a60183f95d5170d7bae7dd22eaba8e47b873b0e81f3e04ec2064799040c2f74dbea74f13e32097212f8b4681675089227a4790c19ba485fc1e42ced7bb4335adb54ece90bf3d6126038f0a885d96e3c4229a69ef3caf686c51a6b727ed37c32ebdac6221f0d065cb94e9ba7ab2232e1067036f5d722f46b75885bebb90494ccbc8d3474142f49ff94c18f05c6f926d5269e17d023a9eb0b60aa8cf78ac91bb7331309837f2e046919cff4d46763d74a2a5379b121a3fbba458a5209b5d45f7ac0499edba11fbe9517e1fa5c67b0539d01cb40028e3847a589c6250a667df5d9edb4836a45ede9e40ed4fb041bb0ab25223601c314fbdb1283e3a30f72bd19959b9484ecd3e22ef5a868a199c592de822825c3bd85a5c1cde9c3626fa942266e97d792684598d06b99b0bdc24c87e9a9fcb3093ab425e9f1b5f3e1e88027f80af9bfd83638520aa739f36bd5dcfa5b9361e2e0c3ca6c408723a1c3af55b337e28de17fb3f9c6077dda05393a41bd239a08010a1b9862174608f4ddf89297f43f86f1ff5493783f0e752de08adc8cef123f6197285dfbfade667e6f4ce32f5538b7a8cd265047780359490b1088e425c21278a0207106c00ebc726e747ff5f8d21b464bbfc651865c7b7602531e43f81ee1f60e34aeb8924d9572d23fe775db11f51ea8fbc4b0a7ca80bf6d468f68d4334eacbd6c0cd027a9b7fcaa9648bb5ac9b49652587695a7337e469c28ca769f49f7ac83eabf53d145a99005a7dbb322b52598afef07eae375dcb1d20cbdba5b83b0944ca5a4bd2ef326a747ff79c0efaaa6603d61e473dece3837c6020d9dc6b364fd97e980ba36eaa2fd2495e88d3f48971c0bb7cb1580ca7a0e9566abfbc75b6b3f881e8569eeeed2df811287704582431029f27a52f42a7b6c01d76df588fb64f409166c522ddf8fc4f49041328485ab35847b7427b11200234a00b5d2773dc6d468728bba7bbab5fb122e84d1638dc5f71e63ff0dc7fdd38e107901c8a88e72382df197087fd99d10f8a1b1c6f127e8ce35f74fef48e3dd0db489172aa4d049becc2fe588df8533b67964858e01c05736816ecb34b4c18c2e44ff934ff760d42167c4790f8c5656c46fa44087d9739d76f6248c176e33f1a8280ea909bba2e64bec166488d7b8579117cf763e68694802088b2e8b3c9d0dd219868250b5058bf45a2719356a632b678b7c245fe8d7a9afff889d8a0ee9e3032273c789c2f4e57c224e2d3542dc61ef4f678ecd171d5d97d1502e1adaacfdf9170e4ec7c09f8def3e997af03b20bd6e8329532cf968574b1a5e116e84372e12a3e593ae85e1dc7d73f22d045a64ababe5c8057119d6d3e55d2a4e2c9feca71f1ebe9e49097661c52d657dcc4b8258193541fd0dc4e2e42d1fec14c2f708a0e677600e0d58814fae3e45f3b387785abdeea464e0b6d68907fdb1be512e899466b40ae9873eec724ea7415e9a208ac45102c54e5ab16e15f29b9fa09298a85aded784da35e1b6d1f537c6891a0b2f2f6fa5deda1f1ab6881d8bbda5393d6bbbb609d95c36e2aef6997deaca270b7e380e835184c3288be2134e704fa580879e491470782403239dfe73f9416d2e483930150544381a4843a240d1aafdde7e7c692c98e13a7b8dde98095f9fdc471563ad1d94e0012816a6c08425fe05e37426f3a37e140995c271a765066e756b028dbf734346881b8a7b73bcc4c40796b0f6b1b9a7bec40ef8f5242e114dce363449cf265506697d805e89dc6f815d8c0a1ac60e452325faf9c355475b792d1c0d4d1e0ee873e197ba56c33cd27e34a5ded2af759ffc98bb66ac444dc94a128570f9298b3816a20d7f15fe1f621fee28beebf87f65aabab33e014ca47e8f1322e0942b5c24fbfee636f18d689b23c1f0820c4eb4305df9f112131fa59e075ac2a8bd68a70ad4349a381adb91269676d2625ba6ab7da160d78eb67391084b900fd1dc7f08707c21e6ca519c7cac713f9d0c51606fd798578334ce58a954fd952d94c515683f146df32bc6f482d859f219ee26df1e90fd4d351811c6132b55eee887b092ebdad0986cf13135843df7512a375914a3aba54e0d5e296bce93f0b3029e7d104bbd28dcfca1fe683122bb0914658f9a3cd08a5e60b082998a1c4e7fe1881050fa93632f0bf35e3be9d2ec3875223bea6097b53382fe116de5f41957d2aa5a7104735ca783aafa3f3b975d0d786ae57595fe876fe1648707dd3723a5a19af899cfe2c5a7f61a50ab0f29cf72ccfa5bd63c75201b546f7d08c68e83fd6fcb06bc5d342660037d81bd35cb57a8066f9f5da0dd1d3ad8e93119e4461e3bad14697747c17a7786f55bb32a7989991bc4e72b58d7861f67a43c87c3f66e1357ab30b1aa663d7acd448e39cb407c167bb49a68547f58341f2680beaa5164da0108f7e31c331ea70cdb5620f3b24d9f80f3270c1ddcb634764c2830340e1c0f3dd1cd3281d5e2cdd824a868364312f9cc6c20728ddb4ae9179c68f010d77760619653148f4614402af7ed885f0c50b1031b0a04c70adfe6e5761e74d8826218ec4f6ff07fcefc45033f435f7487001d4e5affd2f67fa948125578b663d5cd157016be7fbe918b5989e86f586b1e0d7086747633f077fc741ae436245568df1f65a6c40285ced16f57dc63bbd0484dca929fb9b935b21bfe11a0589922c784a40a632cffbf6b5e86cad597e60bfbb60ca267dce1fa5ec87920d9607370a0971995941ae074d1fa57564c75e10413e74fcc74f9d1c9becacd1c1412cc807eaec16abf4d7b6a1f0a9137ba72c050bec8a0099ae84ad130e456e657c1852f9597e547882fa99e5ee3db9196ef846e96ed3f09eb6edc8c4d460b4869b21f6802802369179e9f30e1f9bc957d670ae4b21cdafb0784eb1d339e689c56ce17474525f4a211c315ee0008238b035db2987883689d149b15e90af3fe6ad337465b30675c41f5da55f0b23c30537a00015d3d820a550544c8b416c86bdb96703b8759a3df1f57357b6361e09ab0827d779e7f87a664f87872aad5df4533c62df8ce550d53ec9f87cc7d284bf1d2356769237ff25ce4e32c5a67e62660ae8f18cc2ea8c01d125e3b6f4188abcb2c6f70e2be26d0c2674aa276c0c1bb466678a6933ca12014ab70e9fd9f8f12f739f5d5521c2545235eb05011a11407f4c27ae9b32ef442dc8648f79062ff335277df043327c0b80d0d8e0f4f2e345bf51e44c05742d861399f4c51d20389d22cde6dc2bdff8a4c6fa89503bf90482410f85de0c9ba8b9d610d1f3388378e23101cf65fefea4d2de171507b28ac0906ba509fa2391ee6b2c65813d4b042fa23920deace9ee7bb0c48b59aeb3a5061356fe3d6dc5013dbd36b44f72ba7018bb40c516b0dec411e37c95210305018a95d10fa3a84301587652d50a6b904c8eeff28d15702784b21a07889db5b3a8327b4d3facf4c08503ec5d970c9546d163604a7cacb08eac3c247ab02612d07b6c8eb59c38483b982124b84e7ef1da5789451ef806a32beaf2811b2d5acd2f58affa62cdcf68fd078fec24e693b005d41fc41a5522a5091f5551d9d411c543eeb7ca917e90209eb0dc13f9d3141559d79d8c8850df772b649bdae8fbd561eb75f1244ee9313d0218bf56ffac8da976d41b32c1d7f5d5d59bbafc561839999edcac9068832a161dd2a026921e83bf5a955f0a61afb689f379591ec8c4e9c324f7c8f5c51fb9496bb68a849d1d5b7450243f77e43bfc4e9ec1c2de9467707c76d171b08172634c8d705d0aec283030a09e0255fd0797786c98f66e5dc2f2486ae82bb395e23a1db8a4c7fbf4ebe92b08eb10ab11d6a5aca3ac235c23b16bcf5e7382bb082ffcccf82ef4221cebdfb4777edf0c11d79ab8bdb107ad570fe8ce95d906322ac0a6f51b442a71af9e060241e9210b499e0ccea07d999c3be6b40148e090f5cac423305cf1d15fa3925d4cd6e5e3042a0a5b9a2ef927962eea2363a302ab3ec47f765c71eb7789d9522a2201f6ae84f6a1cd1f8b16deccc7be32d324809ff755ee36defb71d984c322cdf2bf32b0405a799a0e63ae2df7f24299e1baa289b07fe31086659e29201bc6838c2d521363e4a54dc24742452bde9e51a5607147cad72a2d669d1eda2601881b2d95c1bd8adcd49f1e428ec63b460257b5d8080b0e12820f205fe5ee40cb022511176e2bbcd16216156794026c43b5cd9603f4660c537a2f361bc09b128217668c30a967d9a7813ef1de880128004789d475218b95cd373d316fe72bfbaf94d681bb3720257eb4edf43ea65bd83bd1b64920175d7e820abd06d1af90ed8fcb456609888b3f66b49febe88974f13aee178af265212b5d669c4dc9cc78eb11491870b0f97640f152818574a922ce3aa3fef392f212c2552fb29136aed11a0595d91b12aba998a560258d38f86ee2e45d50a3674d4735dda58cdc8f013ede1dcc974cad99260d865e86782d0ce241489771822038a4bef0072a89c0e1079170fcbb7c75984e23599b4d8d8e600258202fe95a35ff84e9f3f8c919059aa59c2b5bda9e776476ca61aaa3781397c86b01a79354349febf45368110842273ba57b6af9183c368eb90bf2d0c198f7e3d04a9c067b825da9256b541ae60440b3f882748100f9e306515e1800451f718efcd864e24016a6a187b0d8dc4a333cff5a5371399e86eb0a29ff68e82f75d5698b07303b94206ae81ec515c29b653d1ab2ae5a1496495fd68bb0aebb36b196f972d22708d04fbf991317167619e3a742e85580ac30145559985ce2c53fdeabef40bcd13740119aba316f7ee3f7a4e307d028d67b13ebe9fb9b2b166d0d2c1a551abd1bc83bd8210a96c9b0bba3588e0ed2e71316725bac0ef6ceba6434cd4052eed10fccea5c7681937d8c177adff66b454cb01d72644c0b84b8418e5526a1023adde9b07e7b1d4a9b736939299fde86485de39e3683f0fe84cd0fb0e2c56726a30e61ad68dc27037e187fecfb3f4ce0de25ed0b10f0d3a93f9a090f044e8969ffd3eefa1231952a419941b09217e2c143192bf07f2ca719b3d55eebd8f41081260a353a4415cb528b80967bf57a29e8adbc2923821fdf6f50d10f13658db0a0ed1ef1ac0c65f2b883346c6cbc628291f3e06aae764ad5bdcecab15f3df8a3dc96ffc37dede894f9e445dd1c09d471865c310546e7d8c3bdfb333a994829f8f63819dfc7884b18ef4b634182892f5a77341b4e0e16329e04d184c26a48429aeb93f583adf32bed56e7e7c5db7efc180164310992d1acc067120cc1ce485406bc7efc1e81c35a4c63515fc25b1582b3924f4189b73abf8a386655871cb568ff25b94859a5f961c082e95a940f11faead8300fb74b2acb8e8cc781214d20fca7ce5e25f3007bb7cf2ca21006c04e98031c4ff89bd0c73fbfbd00ef5ec27cf99fb7d958c5facf05bbe023c2a0b49cc011839d7de89d2b384909811a4772a00c5457982b106f5a94641d54a45e36954783a527104b0dfdf59368dcfa9202e03a818217d8a44a586c7e91d8faabc623da2066e014496973243ca0a2d376704c1d71e36b08dfc1a2002144691557b81884818911e95e1ca3aa3c9507ad1183ae912ee65f21c68c47f46b04932addb64c3b3bfafb9c80145d91ead00e398469c6f11c8b1fe9cab885969c598ac39be7682c97d300ac9a2fd3bb56b63a212417a616c524af563cb562e9f6c4525e6840f40022e2f85880c865d6250946195a6d437a999c6835cbb175e1720fa705a7c4fef06e7553d7907ec0d2d1a405e14aec7784c480a65b4477697ac5a4e379a9195ec46d76acc31cbeb50d7f322bb6187580f87b880367a5718510419fc2f9a7368adbc03ac615a1ed8edb2c0cb20311e3ac41297fda3b4d1d62b81d0c49d78a160e31409ad0cdbcd2986cf863af2bcf6e832cce9576ff5dbc3283d6502ac2cdcc5797210cd2995a2d31753160671a0d3da67502e41199b3a0c9b7af8e51c63f70c7e2f252ce7b90a813f9034c5c7a6aba617607e1115533eafe2fdc5cbacd09e75a4072bd340ff98963bdd044a84af5ab9f5fad3707f68b18e1699ea2c67ac4f091d6809d62a7bca0a15d3e5a320c9c4b9ae5159c2c64bf95c893ba47b50684c19c102607dff8987aec06c8fa8a55714025a33ed22493277f7c8c691a88dffdc29605804890081a7391842081825e83e29f4069d4c9b70664a910ba2089e4eb508250b8e98500c7af60a4d08176080b39ce74b06ae416f8667830481870fa6f7f6bc02e66e69bf12f502390f30d3812c25822afbf5ecb5804b329f3d3b26b518cceab463fd780fd6b7e8288e365633fb4c983f6586c9759a4021a02fcd0f6766166b03e2701b6c60911366b3646ff50a5d20c8a7060aee122d3999762e8a6380054bf2295d871bb7846f0b6eb359c8f1c54e590494ee853a63880d78116a8b41b021d5d87572450242e11a4e801ae541d6a65b018585f34f80b72dfd52389f27c6a5c4358c114fd415fff89d5310cfd7f5adef1d8ccf53852f17782b5695fdf1e8048d482549abf4840f17a1e64bf736a7ee9eb92bcf2f926c5a2cf55cf10fb331a55bb63522016a42ea944c9aa1cfa5cb12eb912c12995c7288aef1477f3c715004ea184c8b54210994085f5fef09422e9f09515012687cfb56bc02e3323d675b4ce9f032f5452bfe0946ee50660bef60a573e900dd645a4f9cbde293d0792cbf4589b842280b5a532b5c97514b08c021af908cf11212aa69cf803bc5dd6a871ccd191abd691de92a099709a582d91bf558ddd10e57b07472571f2e04588fd96a867bbd48982983de41c99b7164f6ce837a3c535c2de11508931bc55981afa20d8345d59a5e9b364df27b99910a60b58fec4f9dfb03d0eaaabc6e15b589404edec7c01dbf01a121637de4fa4051339f03f13ce7199897eb149080e115fafc7af5f5118f0d0d145fb1c21564da56b34cc3f3c44c55d58441a60e290f9b1bc32748f5ef54b28cccb3dfd669f7d4b671658c0720ca0248f6d327e7d6ae6eb7359d75ec04cf4fe09cb5e0af1683a155e7c4a9fd5b8913bc1b23ca15521d1b3320d1f87ad3baed0bce4ec0c595243d3bbfac4e10f840b9fd6431b24912df4146afb0e5432a0729f44748b6116460011040aa1f381a4ed02c864e24591e001d8a6071553ad851d9d8b49808d89f37646fc9273e69529b03a28db98a15f56a83d56349d71ce283b10cad23cfc8a35912039fde55cd3ccbaac12fe5ba0cbbe448c928adbdc11370bb07b2303cf92b99e1f58743665d6191f5c5c718fff344b6411f4abfacf691539b65b392080ae6163515c0fa61c5b1970df28a30881fc1e8a6009277b309ec351d0407b603db5df2716f5c62510237034a6212d0e09690ed8c15827ec46e68e209d3b699ff399e28a19f71ee0177d265cd4c95c8d2b1cfa73da9c45e72d85444041bb5c4a10a575520966206f9c558dc00e1ce2df4ff94cbc75a80a9c1b010d476b69d32cc96cba8cce49c3b3fdc131cbc2cf912b1733d867dbea1cba3444322a0e8ab9a78c55b5b9532402a41c6b89ab66ea73d6b45f562280a6b0475cb0cafe5c0194ecb43e03ce992c5122b51529f4d7277e82c274b1caeec34133b4632943aca61b897c891c799df80034b46268063a948630662bcfaa9f4972f5d2b044bff0bdd4d1788de3423d69d56e41053ed6aba2e71e26f2c681bfd8aeeb3fd27681f9abd2b189e7d00a5b4543d8e2258eba4704bac0f1175c2bb10ea6bd93b0eb374bb5b73211d33347144ce9847c0c2927e05fd13c81ba3951fc5ce7f5e8a03e071b05138277823dcf6c95f33e528c49a7d13a5a68d273280de939c6a5942c26697a2174dff7e0f2e712ce6c09b78cb52c457d54c04079a378a6248c8402d0026328d08502e52916b04ec701bb27fc304847005da1e4400c1394f64de4f0cd9e6f3368e35050434308cb10728d0cb8c245aec6f418dc52148050f97a636abef464bcc1c60823e8ddaa96452c4491de814cb1d01db5b0ff228a32d80f9098291367ad91800d23846a537f4da164e987eacd5a285bfd46b828087f56b3768167ddb7ccd8dabf12b5f29c81b6e1a97bca7cce7adf01c3102bd732cac6c90b48379b5e397d433c406ce99b15aecaf5058e3a424eac9a5f7beb0be679524a48c1294740773b7655529a4d727f69e85408a1bc2961f405fa56a611d488ebd73df622635e4293dd7a7859ea389669de1ececd2a6b8a0fc1bfa7272a20a7121728052abb14be29878dd48b7f068bfe1cae7d55a5d4a7ff56f646359b14ab2b848d583175d600fee6f9012f190b59990467464f1a783b58bdaea8eff376a31f814734684b24792313083ab352fc521c000d9023eca4420f2bc2791d012740978bf7f0d3eeae2be7c61c601a98925c90820cca89603426a5cff2387512d0892c58014ad10a2d104909e526ed41ac0ccad4ed38a256830e6e938368947ccf45e1428fc1cab0ff35a97e0032b053b632322025f34238ffc9101556453da0e57a0e0b11230d4b1900a55ec2ca5a26b636fbfe124c5a3db8c6e3cc3038f54f8d7c51ef9d267ad5730ee2b221b9412d466c22ead45c85bdce4cb0d99e7c862e58d4f237aa9af42a0d75cba969015c8b668301c8e4ab863e6757dd26b66062e12edefb0a6be5775be4c910e091ed0436acd022f5c03b45b358ad16c45515b50bbf0427c87ed23c410b64aa393d981a28d9f796abe332b5d3b7e280b5c1a75dd88a95280100cffac99fe8639b29b466f767a6266e735d0cb8c17e0378dbfedef396aac046346dcbd827742497335ded9f96408baa6e0ba423fd7111e114605eb0c2202883b59277ec8e6bbd4ed05d864241a5c52534f2ad0f851ced24624f4dce5ca53ee3b86e209d82ca0974333ca04940dceeb075f5cd2654f1fafd530d46fc144b4a34579061f0c066c61495f922389e424ce82a11a5402db15e51951a6c79bf58f7084984f03ecded4a4a22c6d3fd74bbc343f733544a8d0fdcb7dd760042989ba5eeea887e968ec7ea123585157889aaaf45442677a6dc5013540874bc28ec94db479e9948ac76a493aee0d64a7e1832e53b98114804b7149dbc81b6d99008b191f994708f5db54eecec4748ed53ce35b56303602879485513472a2eaf1c038e3492ae85289def1c43d871af2fad4092e8fe934143f70b022d7aa668ef2fbdc5716d22058c6e2147cf2722a2101ac61429a0669901ba805b68933ed07a9535423906fda1a268521fe458a079a04ebd406507e57688c1fd68ccb198b5f824a01109bf1ead9fb3930b285555681d771e7ce609b2b546c19a8aa1b15338a8120b33109e42b8628e4266519e4c49d47aeeea6149d60146b43c75777772288f6969e282d966486a8bb656fd06a896a9fcf0a8e204740c6ad0b523c5594788f6fe489bc71cf4935724d05d7dacd2c15e4a587489894859c6fc266ebb942572812281df8135851d915e38c017d09568d495bd04761c88333f03696d449ceb00e1f243baed45141bf6245a70909004b24f6efc1f75ca068752ccbd6a8ba709e5f45aa0727e15355472a6d13047d1b98b2cac64dd2ec7ee459b57a13d1329f1dd5ebcff2b4697e048456c4d9432bcd950fa723206c1b8183100bc34d2adf88634a5c2d49d57e6a8fc6882455bdc63fbd23f018083e2308757b6c4824f771c83c732936bc5a13b687c235f5d9ff4d1d5507c80c5436a6024b34b635194850f61c635fd9047635c516900cf29e0b7c9446918334c6e9a1b9a0cab42e3910b9e40df3e87d206de62a8891d01479b58726ee372b9a6b028f335d92a437ba59714adbe1740254306d52d2279d1969f51d3df18cd5bb09cec0a3b4c757d2e126554dd72d075e3e4407e9e8af2c98efba494926723db74cfd1e1ac56e427feb5213ec81b958e8eb452732b0388c0389ba932705bf11d33b8ca9ee3d0d9169d17e17e9b32dab89b7f93efb95014b6d48888bea4f28131231114063dad7d1aa275d0da9d495508fba5fa2928aad5c45b864c61574e14de6809ceede8c17855678fc6106bed3e924a74e33f5f5ce66d8a84e24e5e11d5ce96612e3fcc1d8a3a673a2044657e4315d94275717e19b6d897a77131b67f63566809446a6cf8c03db980c4ff5c5b3cda861c89937bc672d0772f63e76aa936b03608424d408ca6699187c11b4d4054424f1d27304294932960a8b1516471752e4e8558686c796ee40f4708f94d593f1a482757a01d8ebbdcfddb6c34cea1aa310646556affb0c0f0215caaaa7cb46ffa94a862182c6234c11a94359ef9b2e8ffa9c11bdaa1eb00d59d67614f5354e336b2a90e3c46af3c7cdf1c57a029b27254993262b706fdfa10773ee2676e469ccc96e0dcf124aa5d160638321a3a8058bb0db791af5794639609793521469f3d65e9507e0bb125806576b5d2b197d1ff876c6095e0b9ba1f3d6b6c5a56ffe02ff1a6aa8381f00e8c4d0efface73e3f30e2cd0f598e5bd2a5cf717e390e9ecb1c395708a69d69689b1702950ae2cadf48e0d9038fe38eba4ebc6bd66ea05056dacec737dd0095b56198397315c7a5c8dfcd7c8609cfe7021f916c4d1f1e61d4a06aa92c78133108b6cc6877a56e0284a01c2e9aecdbe290101bbd882d68057ec9717c01d6f9148fb0ecd9ac7e513d9bef5ce50bac2a8703ae7a07eee58074b7a4708433728849ddaf1a23a8bced22b40f426b76886c9fd7ac9fdf16d6b7e3f8f4c07123f1ff8590d3b37b193bb34528e55fa0728fd8a2ec657a2412174188a399ab7751cfea4091acb9c557c911484677a83e2090c01582995f8c5b73b3baa6b93cca2091d58aeb9f80ccf41e8d3fa86d080802abf361223ac334421894fe912253a9c02171b46c9fe6f57c15c795ced45138c1ef6f0cd4983312f390deebc14e93b6f453630883374180a1e882bb1fcd4248c8730ebe952cb96a7001317c91cae641643203175dd7509119031b69f388ece5c52abb07b002971bf4b26381cfcf9bd45ca9ba20956ac7cce0291db49e803ef4246acc8c5efed64089a5b1ae20f1083bf1c0d91a336364c4800457ba36fe9d5d319bd2858b3ecf5968b25ef7ba03c3fd8c3266e5364dc4b6021865e8be2cd0a0f7c9b8a2379755f954cb3df8e045efa63ad23714cb523210ec77cf9e934dc808c80da4baee083936d6899503fadfe65e6f8c02a9cdb9d32d85a1b2a29517d387310f9489de00cb2bce840e37801157efc1f0a94db2771bef66b0f3465b086252fe204fc22e26e9ea3f25144274016d6878c504133d4d7e12c79a684c715be8a76c507f701cc3742223024efee9fdd06c0a01bd2c7340bfb77dc6d310064aa8e6a6b6cf1c8fdfdfa37c73feaf0cd33e59c20a0b87fba3414389d41e1563e0382366478b253ab48ed2ec894dc6092c98eb09cc370ec4b20e942b7ebf1246dc6fa40fed9ccdab1ce0ecff360586b8fd46211ed2f57627e4bf11b8d5f8d5a304254f6b93ce53716ae49374d3116151c0cb6fd69a6af9dc11a8c47f5c7124eae67add60bba3d9a6644aeb18fc6a60105f87fff1406ceb93fffb48fb520bfb8aa6cc28c85b43b3052eb8a072350c4882a200a68c182abdf0e7fc8cac04eb55d7aaca0448502182a89933a3fe3ec10473309a38feac4d42004bedbf61b11dba1ee865ca7e1ea7fcb4a62aca521948e4150d19f09c0e59a003aaaf6f085be0c28c6249d4e40b60c6c1b1466d4cf3773a7f877882d43b6085dabdc0268a167fff7145d4b1bd329b2c1136185f3e705834d7b785081681d8e2bc44e9645ea4cab75be554ef8e88a1029c52e49eb44ff90223c0fed1f0d190bc104e85a00d23e03da3b9e3fe66310f314f4f50c7b811e1aa8f2e8238b3d7f95c6aad59c9a753f22470d143eb28f92e1e1377a672c8093909b2a7864a8e141d099b77d6101499602274b99050854aaadcce2347fc196821d732cfbb2af68c340e105b12cf6e2f0eabc7b3e65468ffc1537f9cd07b250d86b67952618f7b3dd12000489632c82531092855250957dcd1254f877063a0742bacb96bb9d1b3cea45f3fff710c184fab2ed05b34956ea02bb6c725d6c37b6c9ce7d04a95fcec43d85f81cd5993c78b92bc7712223ac9df6e7138d2d7240cc96374a2f6cb810bfe7a6f652266f6865ba08052bb0d56e18811b0a8ca53d3c7c21258437f91dc0206dd1f094c039922b8ea7d363f81dfc828ccc95071ab25a687c8650b2490e373638ddc7d5dd9c39447c89a93c5006e63f6ccecc161d4eb16d008891fd2cd3227192a4ff4a39faca0a9f4b322ab415e657a3e20a031724430c539f539a41ccc91886938f567336bfe8a175e197180ae8c337f8967b84443fb6619b7994eacac4954eefb4017e3a2d7833b1396ffdf90958b9e74a1c646200f2d4a43b21b96e84a3498c21e61d926ea390b47a6d7934a2ad8f7ebccfd50f2360addbf7348cd842c329c748d54d467c9f72783c77eb60989bd5274ce508690d8db18891028471d409e0543c7118c8c0c6e17b136e985aae452d86307663c120bd971ade119f21f64cd107d68883f268bd0216c98d53233764d4d212b12270068b52cd47cd3db518455fc23d7805d643496cdaef5479aaebfde846170d8e7d60dc6b097f01754a1de70149c784f6807d6065145e137a7296d8d90cc1f361283241ccf9301ded623923649f4f5e121657c0b2c66c2acbedc674b871d46251476f730b253aff600989ecfbaf00e8c78c2e92b4b364e096d6f15d2064b8dd5ea0aff60f2089a0d1fa084f4764cd7abbdcefecb3e24c1397b842498bd22b5162624c2f27953315aa39d0c8ed04b83e8f20f32ddde2a2904ac0ea658f607a5fd3008502d540d11d84d5e653f602fbd2ab4e52ee0069e7d7e02025e7283a9cfe25e6030896d1869665df05784f6279955fd4c6adca1993c2fe321e2812436c501a17d1d72d3fb95e4c370015d0e79a7d315d1e27c77094c697311108b358d46121bcedba7f8b83b7506ead52851a4586254d41e285e94eab47a40c5452215cf0c9d55777550e12510e02f87aac90df7d9a62ab2d1e3e6b759227897ee8628382cf110b8843b97ba4ade86b63c143940f77a93b9d0196f67a1dfd4a14730135b1061a1a464bbb899b60a15b22ce339cb901b8743936f62be95f38aa651b9505f1c76608cc71158ba92329a01b0653d9cb8195944d5a32123ba9b67c052590c74c96955267af52cf22960079d0bda81c0eeb2953bf058239c393eabf55350d5a605ef20518e8270ef2cc816fad34f24e863fcb7680727535fd44c18474392a4f918dd065886101fa31bc3e6a27b47c89e7d8fe8f4695088de357613910b26727a1877350232a77f603ad7450e76d59c82ee7364d0de5c8db5218e390cfe1a464441c09fdb4195e22672ee6de543eb6f6d1e4848be6a558db60876a9f20273a06c00a7d69f7a974ee7774b701a7d41ee0cd11b2290599466e38cf59bd0ef29bb89d25e8e43dae84cadb40a5f40123649c22ac2d8b397c732c278988a0bce8d8695fab39799fa50aae7a96b0a15aea8343a5860f15cf016858daa9c3bb008d19a8106b2afc90f585822dd0583e91f22383b6b1254a1b1ebd45f010539ef43e2827cb8d0783004f792fb849535205a53717643c2b0ccf6cffe5b2070b2faa1a01cb95708a01efb62518bce35e2ce2608e81ae6613a7a44a6f57b1bffadf24f01605fbb01f5aada17475f0d066cb3f447e6f099599db773e13eb2186797b002ea7afe39dc300bf754d09857355f07b3300a781ad05ac1541d6c8db4bedcfe2419bd07db10995222a8e17907a6c15b3205413012de24e7bbae1280c22efd14706ade4273b5a219cf7f0ab3a6b24a4e97d7cbbd1cbb78186d3d7fc6bf10dbc161d195d001eeec7cd1c20951058d00989b28df1f5e0067c0b1888813261ec0d0c9ec810874294d8379dc693740aa690326c79238dcccd7e5739aa968341f4bee3e5070b69e99d2f84782b1c58da627368dfc2301bf44e0a8242894bc96f06f87ea223b720d3f4957318090e4e908217040dd1aa6a8e5e09faf9af26970c700ccb5916e5b7a54e864a09785d5218e18d5efd19721558d4ab4ed2cf4cc2594eb1fdb570e0e5a2492e313d770404410607141e3226173ba796dc0d470e65a88922146fc33d2c135d33e1855b6b317b6d978391b35fe252004a40782f8412dec226c9bbc26973c1b54070bd48034e430b0462d7180d1176ecefc838ca0876eb6f842503b53de4e4ff1bde4cc1e02b7205c333916bacc10c0a6be21f5402658422b908d5429a0a148e8a2d455cf40fdf1acfc1217c7ff04777b89af25116e9c5ef947de8b70fd1fe80e76890c71bc14ea363bcd4014710e2f0d335dc876068e195625407a050b414fd3a5a848ae483fc970bf490f1e5f788a08c35307f66a36f7f104e46c074a6e6296c9b76e72e3b363189e84ea1f8fd37317e0cbb9e7e98bcbe61aa6e4957bb1c67f34818518c62a294c2664024eb2850fa92e262fa3e4d930c406057bc189ed02f349b719cb22f72d1e12c1055422902b78982e8e397a3e60495b3d6627ccf1240e4e826589de089426a39e98002c285663d816d09fb244777f4079e18bda223867cca16a437cd617f15d3b58dcb394149aeda86e32d66e7ec8f82011eafb112f97017c63a1e9925fd330ff5dc0b1895042ecf51768645184dba4e908cbfb9f21781fa119bd499c4593f8894f97912da833b5d64f45ee3b9de00b421037523407d594de4af5e8d6409428e7b17919c8a99e61561cd66d961d7927abff28de9f30024fceec0cb7f3c67dfc27e00bf521fa4ad7b22508dc84a1624d334a3115294762bf4df3a0ad68d9fe1f05b1254d4938c94812d9a9153378d2476d4882418553013b9026c73f799c030b0d0a076e43bfaa03b1797b79ec3689cfdabd2b7e67607240811cf53b5c9e301566bf001c1019b35b15410b73a82f6225c4a66702ad59ce981916aa9c1ca41c614c60dbe7c8032a61b1888309da99aef9504ef30f1fed1d69458efdca7fb15dee8652487275c82f2a8c01ab6c7f9ceab3611e74abdcf2433140fbf3322a1f35278b3db05bfc6d0a4102993a483d5e4f5d6d8c3fd606f6309eaa2941606de5a8c513d5bb0638afa900e170c179dea9bc5883f4fe8999b9b7e598fad94e088569584891c69749bb641c3e115d634e743900120f8a46c7aabb7a0a145daf696bf68d0803dd35b05b513fc15f33adfe717a00f13e90cae77cf34fa6e77c4788b8449c29bc8312f2196fec66f3fa9f89d6295e47082312d158bb2447eb08332b2a44381fff4b8c3f7a55e192c2270ad1b7713cdba969e7e55b606812af857a271655cce155fdb5abac0a2a7698b90abb74417ba031358d54471a6d670699db67147f0da75bfba645c1d6ea057e3490f6a0875676267c1846d2c55182e1074a99955ffc40a2d8ab7537ccb20887c0f3be932e596997ae8cd3b8d349401c99fb3759239d8b5ff4a7586f7831826c14d8aadfcae64ecf3067ee8c86afdb7dfde14a7bbcc191df0548e16495e5b4cd5b0a236b8f8fd59070a9eddf3c9e8321bb0aab6c028c8f794a1ca4126a28ccea43bc48305065fc5521114350808dc9d1d2cfa7a1f478f991c7482648966158fe1279102bf1f73c92db76f0d02a9ab4b35b579fde8bca4b4edb9c8f6ba014ac37ebc26eccc736adde1a5281c50aa4f32fcecf816f189aded7d94121ceaaf8a0f11d95094162bfb909b7c20bf4cc10d173080bc3b68f53dbd19a58d4d6e73f50625c83ba93f8cdc707fe3e0f80ca107bc2007c3d35a31f35066e41144402850c3ebf2ce6a308e84ec8899d365dd298a2aa429a80f51b2e5c703aa9d48fd9d736d7f02d7bd4a15cffc04eb84ecc3871372b43a227825588a159f6a9563e96412a10b6644acbd1cb866ebf086b5233f09c62b7ea0f19cdd94dc5cd987ec894be0c9b82ec81b23bfb015cf40b58a1ec4737ada84a9d81a34fbb0bc3ea8cd3643291f8fa5b38c5b41fee8cb62588be171fb9c15a92d4d1a2588d3ab681b1c54ebc4023c35dd92d5a3887d66a2f914a8ca1d0b11da2d72b8f672718520e8d3eff361fd6a9dfbd1991bf03a0068f3f2a6516d463bb811bf24c88b3584a05439bfd94d468f6ad3bffe48dc65b9aa5b930591a1a70079b396d944098da72ccd9af6deaf5381889610f3a17f871986a23306e821e538ade6cef43f0c234703b3104f548ec1e20ae525c98e06a305052268b82c415bdbb0563aa1d91fc6cd0ce0e65280a70eefc0a18cad378f467af62943d1370dae031068b99206ef980e61711ddbb566a14ff3ecc77c67b126f6254a5acd7600b324fb699a912beb319b06e8b045d50a363f2bf6f8b07a33fd2120044fd99ed535851cc445ee2991dba965ffcb0c6c1f64279b15609b8b63f84995b89aced4f943b80f9dfd128adcdf053137d7b4e5d6ccd4fdb9fc19a3b1ee80e7331711f206d7f0e3b27bb086d7f683b77c684d53d6f948ce0bf1eda1f5dd2ab10ee1812c8f18979de5c2a41c82c27b6fc4b007a17228d006790205e1413925d61407d1b7211b3ed7a4df5c749ac80f4c13f0b9aaa205a59bc7cfe904f6677e1158310fa9c5f9125c8fb394c570bc4273fe07a14ca7a1e8541ae0117d29780e054e3ebfcab954d28bdddcfe78f42df12a1628664832ce8bf7f83a6a79241f915541682ece0b9f652db32ce3f3d086b1f88395a9d840b532c01ffee085d1f8f7e82d288e93552a371686f82ae004613e6a67f629254b08a9e4aa4623d99b0a34df79df6f9d0fd384350f1ff239800df2151b2d052129d6ec2e40305864a43299b2c7d4fabd6e4a7f54d9479e438188f26bcaf63d71da1d38a418dd8fa377a4c8a7ffd577d6bf34243b2686a360083519e47274f031b86e2553d90f718edfa437c9d95eb660bfc942aea84937775d50384934206d71d03b88e96d296b1a8019af64042e2c567d1d5bff708fc5b00c5d3aa9fb66b7b25e05049a92a99184f95e58defc4d952c25d431796db3b182cddbb8bd20070e3e6db29a0affd38e416db77a688521a8bfccef363dbcc44d421b8c0aa568baf1eaea66e4ee7d4b4d5e4c409ef643bb0c73a3c0637ac9d33587981dc90108f5b63414c6103da2a3a6c5730561aa503198225e2d8ef9db3578c508b344468c57fa86ec6927349e6839d94ea8375470c4f840a48eb4c0b6a381e00c7f638573fa666479b30826b8316eeea8cabc5f57fed45aa55f3316d25217bcbbde59652a6945273060f07b50615fb271f36a3d66d111151b75ce233d7365185ef6a2a33050056b9c439389ef42a683525930a9fc203402ba5507a53e97d3a8512ab30595bae84b194c1f13868d46448cf3f491a7d26bd4637245b5447d619519ea823d228d36e9ac3b02dfeacf2269e9e0a6c3d11e2fdc218933863e6eae87972950330820b2d0877320d8b1866b62ce96f6960baaa4af8e0abaaea9f355443fea989b9294a0292f5fa16bedfc753397f72e113f0c2f7d3203d65f306f8037c3f7fe9d4cd37ce3702be3716d35c7c4da3a1b9f82d6826b78957180b16aca551daf70b69148eef1fd2a81b3255d07ccf7caff01d806fd3b70adfcf4c340a0029949efb7e239e2ac013a05fd0a8dbc44f80c6b54d7c17b493dbc43f693b6e133f47f3719bf831d880f212259ac65a9a8b8f008dd5689bf8381a9fd136f16f34fed236f10f10df001a6f699bf8369a749bf83c2419c0f743a1aa6dac75b4e63baef0bb576d5e003f17c7c65960411b6d1bffe7781fd7b401e410408ef7e9d7923497e307f03e9d43037a03d858a8b9282bcd8cc64d9a8bbf82c64e9a8b1f00cda4a900008d99682e7e0a1acba0b9f8258da734171f8726a4b9f83734198da9685ca5b9f8248dab682efe48e3a1e6e267f1312c9a8bcf1580002dc4b8f15f9a2b018a63c68ca90e242b298885b646c071755cd8c7ef48df61f3550cab37fefa79438b7fddb8a1b18c4c639452c7326df4244d564cc3eaa5d19a2d0afb8e3f7f665afc39635c6e6a3c175a9b4fcbf7c211588c517a1d6130bbdf4f8cf2dfcfe003daf157fc90a7163748c172c932b77dae677e4fc93cd36ec7b22cdee4fba93e08610a250d8776e36dd5b0e789b1c6a339ebb10dc9a95e34584fd246d65b1b7ca9bdf7f107fdc15e2db5bd7db082b07e5de6be9d2abfe36e2a8ee5fa377b7e9b896b1c8b3ac0723d4d5cf30116b5fb6e23bfaa190d0c800fab64c4ac0abba694d608dbb8e6e29f1627c667ffa855afd26e40f1c109aac71d596117f36195bcac7933ab17df831042aeb9175f0521841584550d76837135354f63c2989999b999dfd9315a4161f643d8ceeda41e2ae80efdb66d19cc94920a4258c9ba597c6f6ba5c91d1b90d7a6616bbf27f1e51e7c2f46d8ae84ade9591a3d4aa2ae5feb33d8d6cb6bf732e26fa2b2aa5ef5efbd68c54003ebd7e2e1b2b61b23cddd10c30c687753fd9f568448736e431078ab40646e22f57d436d396ea1f2f704eafb86fc8bc3fd76d6b7c1ccb6c49018e692c6e5aa871ee0d8b5b5c1ba59e5d3f005f131633a03e240de7b4698fbe06bfff810c27fddeeeedfdeed594c7e5e2ee25204a6a8a8969adba21dd4521b454ec21072b283293670603ce17c86c2188a3ab08006c6906625495301069190531844484e491e13a036620283c454e4b500c11d2b3670604ce1aabf95e5d728ecd51d12c196eacf9185d0c2ca9724b4d8e2083ea20b3ef083a2bacbf1a8965e9ea07483229f5a82f23784909df9492f29d400862542b42d50abdfb54045a255adc6ca07e4a8033a31c3116816429307160e88508414575d2214e14414239c9e340721d48c90e38795fbde7b3d54c23280369e2c84f03b592d08dde6f9153259da8010fa57d0bf7ae815dcb7cfbb8d1fdbe5734b8e1b0edecf65a3aa4d87946c3c2b6814edfa2e6f232b1c030828fce9986cd4abacafac4aca990189322f6d5e1de72674bdebaa5b5555556d555dda7c55d5456ef9c1dd67dcc5a494a91508515197bd0851a9cb9279960d6c85d40a665c6e7f305623ae1ddddddddd9df744bb484941f71bbebbbf18217c2f8ad958b7172e84b8526155970b217050618fc5f19b1897610b31c618a37c1695531a2f8ca1ef5d012cd011d3edeeee31c618638cdef13d7677bf9085c2e7ee6e1feeeeee5d889920c618638cd13d468ff1aa95e6eefbb8d8e182fa3f9d30522082c218638c31c6786277f7af62e40a563142980502a2b891868e16324670f7172384eff9d041de5c46dd1dbbb573773fd566667687efb9d760eec7cebbe377f43fd2f13bbfbabe7f89f1653dbe370e788d7fc4b7fa6e6bb5e1b05f1e8f891a5fb5ea5aedfce91feb3deb21afcaadfd608bf37a9416e7bde945eb7e6ca53f5e1941d4fdd57113dfab8dd165f545eae0befd58be1d912fabf5bbbf83d7dd3aebe3755df1ba822286094d0d9bb123367fce2508551d5393628dd9c12bb74163da8644d04467bbed80a1b2ee9008a05413f3348d7b111b751fba3b8eba5ecc00a2ee4377f72227d47d36dcf70d95b6c8f9e189d0f4eedd69ce929acc76d39a88bbb1bbbdbbbbbbbb9dca1d20000a9c42b408692e35c408e9eb7ba652f2020df6a20914f0a28de5b6769449a39c903459613164f16e8762c8e2dd0ec590c53bacd64ad381aba5755e237f14d2cfac076358152b9d9ecd48d59720845555f90f3888727ec8f9214aa5d534f75ee9d57faf9305f5efbea6aa8d5f164a17e7fdbf90a3b3d3e3c2f2e06cce66a25fd3a9d70ce33bf6bafbf44388ee34f7be379df7e28c293435763fe72786a3646d06c8d76b8b3233e4b32d3ec79f9d553de303bd79711c274b96bd55d5955dd26daed94d8859d00e219790d14c046e3cf633fcd6573f475a0fd92721fde8316d2602590fa41e4843489f6df2d2a004649eded0240b196d4982768cb624bc23fbce1c10b423b358c8e8a77bcc86643fda9264cf5a0e3095b1046e7cb62521fd8d4d3ac36c88ccd3672199c760867dd6c38da77ff1cfcefac83954eb2333c7fea94960dd6604145f1699fd03d1079927fd949a64ab2b4b5a528ede07d56aa802bd0a9b99e11392d9a4c0a75b0f0e206d33331198cfe2dd816952fa2d0dc8e5f3a68f99246d1856ae4bab6f7c11a6c28ffc24ec679e1920ee63c6d46be3ae9c55f03956cfefd2a4d67d951656e55fcf7fc5eb27ebd15b25453e087e870cbf648eaf61e87e496a2d2894415903e07fd46682ccef9f091afdb4b423f2bbecad6f6d2688ccba1455f8f14806247bb935d6055548a4a5c28f590fcb6ad9002beb01bd7801530750f767d4ac971a90f8fc2fa8e600bfe3ead5d17b5952e1472f43950075bd787152396b00e9e5d665ff0c3f02818f7dc401fefc2e5cea0c75bd7441417d19fc888dbeda4824192b03d24c82a1facd1a40e2d6ba0708d11889a04daa8e047ef6f3d2b87bf5a2f23b1ab71ad561d5fabd9ee5c8836a65b16501390ef0b1ed88f5bccd00e16d26489c2fb5ad7c5d317640968c585cce89cfd5b3f65e8a795abd11656ea3667c0bc2dd70ad626b6f56da917964fedc3a1fb01a31ace3b5cf5b1f8cf5fd7b321c41dffbeb573783b1bd36e7b08fe1fa9689e34ea79d1dcbb22c87eb6f7d7d67f77de774e2dce516e1db7c7c4807cdf6ac0c588f94abc52ee112cbc019080b4314bb2ee8e0d4fd8e851453d176df774c038e6249a318084b656d9887a76c4e9796c86af4da310d2acfa0360d16a7df4716da6d110d6abf11efa2e722c7ede3381839a297127e112db109b13b7aacc6d0810e787460c58a152e5cb83c79d2f3040b161e2c6cb0c1061144f41091461a69a081061a43434336b0018f0d904002894a7b5d84054b0f961f7ef8e189279e8810be7eee0a1b48730d78c0831e1e5451454f155ebc7849410a7a52d0831ef4a04a952a5b6cc1b3c50d6e708329a698020c30c08002a507ca952b578e70049e2364c992450d3578d49022a547ca10430ca1450b8f162eb8e0e1a2df0addd0dda934d1444f13400001c4d0d0500c62d013032a5478a8bce0052f58638d35a00005288c19c333a68a2aaae8a20b9e2e6630839e19945146195e78c1e3c51086c03384118c60044c98309932654a11451461c50a8f15238c30820a951e2a5bb66cd1420b2d9c70c289252c816709565861c514534c71c5153c57882186180fb77e82ce0439d21df98d26882f5f78be74e9c2d3e588238ea852a5a7ca073ed0f381264d9a5861058f15545041c5124b2c1145143c513871d2e3040a2878a038c1094ef08427f03c8188884848a84728042108811042f40831c6183c633cf144cf136490c143460e7290032594e8518209267a980003064c0b5ad0d3822844210a4c600213c2840973e5ca1529a490220949e049020e70d0830328a0e88162c9922561f084810424f020a1063d35e0e1e1f9c10f7e70057ccfafe847eab982eed0f5c18e92441249bc2773d457aaafb438ef549f4ea34a3befdf9ffcbb12aaffbd070841499f11d5cf16c2a03d3510793ecd553aa855cfda54bf3fc3a6aa1ed4eae74e096887618b5355df61b56a9baaa767712a22d0f85d4fadde575f03bf562f97a88ce91d97739ab31efc4febc13ece3d9801a68bdf1bd61ce480a0efbbf8f0ab5a6db2b7ae5afdd5cbade28f5bb735b08dddeddeede6254c55b552ae94524af9255aa2cd494bceb74cd65c4b56957c186c32e5690ef5ecc82a845755bb55f530cadfdddd5d28ab1d9abbdddddb6260cea05d23dbbdbdff862a92f9de3574045b560a24d69cf469b93d26cdbd0fd0ed29d04983b1bbbb8bb3cd796027570485eddca3f75edfc6356d833b0f8fbb21157245d0f73e842b827635db6e40907b54bd4f7bad1e880ddc463340eaabe0bff72185d4fd0ea8aabd6d995b87a4667777f7f57399336877b7548fccdddd5d0e9c747a8799244381e25089cadcc051c2714386eaec3467fdbb0d07146b3f741250ac82b07e349041d7631af651ebb81a53a39a0a4b1542896d5d7cff4cabd168da86ffd2e05f9f659abca42c61f3e543ece14f4c9b0fe19c9baca6f73800588c11c5f32c1963ccdd9c90ecd4ebdfc34b66f4a451756aaee28a437bb7a9a4c426929d1d29d30f899b46655f534353b152f4832a49ebb892485a46d282ea4803ea9a6d09e09c5767f597f6db9cac62a0e53d6c44a24cb59d2797ef4f73bbac2a63979ebd7b8651b7a8f346f7d4f1edd5508ac904c3787075965cded841fa1bdabacda84825d11818e9b0a2aaaa1a16516bb19cc1e3da1ec2cae26a65a439ff2224463cc5c37fc598fe4a915f29e2d19c7fd6950f686850465059c3d77f733d7fca8004e5051c795b4d73fd769a6b2c8b994787a7e6ba668f5fc62f6bc6ff321a1df8f1933e7e491adeb0f9ac015ecfaee7e79f24fb380dfce89c4e8b73736dfeecfef8e175c97ff64d87b7fdf0507d3bd201af72ebb894d1e65046d049027f580525b4200633c804c22dc66cc3dca7cfd931135e9fee2166983ae75ca23a85f8cfb95d4dd435134ad47d119848ab7b33f9d15d78c8c79dc915fd2e25a5eeef9cf5a869ce6f366ec712b493157e6bdb0e5d5f7f555f8e295cb690b068aeb190aafc0aa430f5314167f8832a93d468ae9f04c661a8a430cdf56f6b500e43aa524d4ed08e848584a549586a57a96f25065654a8212155a9703b720343ddd6a0fe3551a09d7482f2e79822826eab15fd8ef290329cd1062a336aeb2e20f35d062a6f5de5d61c5941accda72d6beb48f1595bce8975a499ac543a4f15fb2e47c554a8d83ff3588f3d6953a66a53328f7d33ead4dc32cf5c52abb5e19fda89b43baba31787bf3f06ce519953a1f2d60141ee531fa47ad9dc186bcb912f37b943710d77b9cb1813ae3560b981da2e50d08400d59f4895469dae94f5bea30b259e5407d245125d2e4d8994ed428926d5d29448e9164b753620696ba68e4bb9752aa033f283aae4ef964b35da320cd2af96d66d97e7ef74aaec7054b7726c33411edc66e007d596891b2d6d8a880dfe6adc9cb16f32e9602c43755ae6615c1131ab6a61554d7f4faaf0b1d5b1d9e2f0e2c88ad90973ce183f6efd333fb0013311c80c844f07a01de2f7eff0ea2ececc0f575835b738ccc5ffc158d3e6aa8fafd3a9dda1f398e7bde49c26aabe756cfddb3aebe5bb2689fcdfd49c6fcc393b3ebefbd6917d6b9b794550a2cad76994f51d81bc5aef6f7d37517d55cab7f9d82b4296a6b3b35ab765e860880ad43545067536c30955ea0d19663881897743c60d194bc696332a9093710414017cd9816d3e6d59dbdc0275b5c690d2a502750fab63214a8fdd72a0a9fb293268b7815171a0795854fe141954874da8f286c3c3a2eef6e3641cd1a4ae90a5ee93718492ca6f6d51969c76cc5f214bdd2cc80a59ea6e3fa2cc4d0c19a851815c8c21b85012ec90c2016b77b98052adadeb8109a1ba2cd4b338fd3b8dda6dc6c75ee9a7f1ed616ffd7bcc7f6a52a4f56eedd745759b45edef5e2839a77f3a66d1d0bda2c3cf821112aa4037aa7c7f405895cf60eaeaf03343edc5b11e2856fe1bebfb75e0078a557e5137c7cf0c957bb79b46757cba69aeaff9a646c9bf69d4f39ed5017db85373bb2b5c2fabca02720ba3254dc9f20bfb20f81daf61d8df973a8bb3ff56c635ae4178c330081cc10b1abf72ff2b3485ba5e8aa6d4e92ec4dc7777f7f7ea6f7208eb7bfcf0795f61220cdba1f114c761cf598f9b1fb1728bf3de4714381ab0387122b43ade924eddd036efb1d4b038dd3484413bae5285cb23d2dcdb652cdef366c3101a321f6328c4f15cdb6ed08ab8176937d2287e4f65cff5861d543968406d13048fd921c5fa4bfbb1aedfc5997fb5f5c35716e73116c662715e15456e30d2a86ae321fa68a35b305878a839ee3d3f0480a15ca566ffa4ece0357accfc5d036aae04b416599cf74e649003182739f88802edb8ca82f1140b095551b2384a988558e8a7aa9185b688923d0bf1104d5e2adb84bce7cc3434f7588885b80a57e12a7888af980184192330c304ebd3eca451305543911396dbea456b2cce56af4388a03a856deeeeeeee4c5452322380cad5f989e0c51868a83053599ba993b129d666af903e589bad59521040654d0095481b52d6662b9136a4586eeb63997eacb28655e76c4bbbc5181f54022a09541228afb4aefe26d4608cf13d01014b78f57d0d7743b73375aaa66db46faefaeedbdd6dbadf0adc7d778730f7f79b4bc98fdf3d7787c1bfdba1b0212b295379047f6bfabd18779ae3016b0ab03a5e4cedb4b03c5acdea783a19ec79ac5375de47ac3e8bf33e6a3df38c295e82f08422ae20ba62073f693246c506a48aa7f014256df3de621f62e88f2068c75378caea78f3b192f7463c45da846cdbf5c5d1cb8834670449db48b7f137faf873a45555a80b0b7d314a2d129ee8420a089230e28b961dfca3ac076fcb32fcb20a69d4a8be1f6243a75e4848a8043bd66775b84c7d325fa8e08b1750e00b295486082346af7616bff881bf08c1c86775c0fa564badde57cca46dde63bf5a02cd6d652153f72b716ab26f324949b5f9d3b31c4ca01d637f496cbb414d2bd660df138376145382eeb44d8d9d925ffdab9e4d3f5861358a41f92910d4d9f0ed844949a9c9e4ee1df578aaac7592d2cddddf7b0fd81d3b4b50fe7fe2c9162bb3ac0faa5698d3e9447fc50cd962e2214c121e3c35a4c9104ab684d912664b982d61866c79e28259ba627c1e4a68b73900f19024a876b4f2dbc148960b2d41412106a17cabc80dcdc54a562f23911fa78af9db6c682279e8c1c7edff532dcef66415a3d4dc4beffd608bc3bf8bf37e4a95b1ba3bf8a1b6388f0559e634cbb0be2e7e322e2557194d62944ea2510fd23613c47ad2ffb048ae7549aa3f69a465bf998fb4a0ea15b8891f21cc32b7a66b2d512bb1e93ba09a1a3d5ee23635543a038459c96b1fedd3dc0dcdf197e67809c64212e884d712ff97cd452e25a55dd4552bd136f3bb76720373f16954773b04b776d2ed90ef19756add7e99d250f88ccab22c8bbbe954f6d6eb340abe65bdf51e929d5ac57f356e33405ec7e383eaf2688ee346ada6b168ce89ffb39004fafe75f663a8879a6b4fd5d036fd3ce56b4c2599693cdaa6ff87557df3d97ea0ef6b9a1b6a94e56475c4dabf93053428ffb076685bcba8c9cbef7cb87e6e9d4f41f9bd4b7bce6119ffbab68d11e3e1b72ceb39c74f345c6766d0ddaaff3b172d34a12425a526d37f57a13c70dd29da1a2cf4314637b9294a526c02e5ffb1065c0267d500ad1a4011eb7f40408daaa1b9aea1b91f3fe10a679c7420ac20bc7ca857d00c94fa2f7ffed3e44f6dc609e7bc158a90e09cf7f386879927cdbd3923e7d5b38646750dcdf57b218d9a447adfaac19c4373fd409814d25cbff3d76098bce4bc7955fe4da3deabf3e6df7b8e79f6a3ebfb9a4dd382f24fd9bfbcf2ad80de6441bb9bdaf182598f6afe807bbdb7258073628c3c6e68de0c2ba0fca32b260ebca4c29fbca4c647b2559b6c4e3afb7773ebaee7da3dff5d10be4f6374bd0b2d3737af5fe724031237b55fa7b9fe39e7c4b0b78357ece69298642959421d62b464d7017995e8cd49074a99ebaf785d16bc62773dbc208cf332d1bc77eba7aa4f87092fcba1c55f1161cef53df65e941ec4ac96aa91babe5b2ea81dde3aa971dd6999de31c58f5c148a17978c95547eccf4050b95969833bcfb19dee61f97c00728a1bca4f223e125b57ab46403acd2f8236669250ccada998c1122e12538f0927ac471e025584b304e8f004c68570325ec305b40d15daaff49be2694c062ab873e6ec35ff993f798a75f6eb9ab609eae93c5beed6cec2749ed92d47579494bb2940fb31ef2a216dd3a20c80dd0aaaab1e6f88d5124e4cedb773ef0779847ebf7ddfaf105541fa9ff76ccf079e94289d4dbd15c9870f6ac0d48b52d7cbd38a7271e94dadd55444084c4a1d4f7767b470ced976a7c9a28a47f5b07ff47d7693aa2f4a3d45c1b893754dfed17ceb2ec7da8deb1bfc79e89b8639adc3a997dcea022f237935c73cdbde5e3974fcd4d472191b6ffe6afcd0f1fb60c4050acb9d642b9662b0cd37e403b532d55d58f1e66de68a88147e56332994c326a3fa0fcd081f8c7f71aeeb53194d7a041b896664ccd35f3ab36626857aa8d05b63662283f517c1b560747a1ca27aaf23d168439b7f832404167809c623c55a99d2acd85ca41a83b29a0dd169dea8f0c55be91d5215f3361b950e547bed24c0c19e127aa5c4fb5089eaa6f4616a79f4710749b89a2579d880e17aa10a1e882b929fade85bdf7db6febac27efbdc7f1c5eaeb252551b57e5a486af56ced7256105295d623c10c2339a735311db380cec40faab142ed06e750ce11435fe4f18f5d378baeadc039cdf5f9bfea2d84a126cee9176382ec595c8fcdb9c5eed5f96f92b6ee55123f93dec7318db5ec49efd331c6f81b499fcdb724464d345f53551bab18e32bd124cc4d4524ba3031448dbc5c20a43e5a882b613e025041bbbdc2a35137be9f861a1a15df44bf471936fdfa968f1d11047a57653f475fc93ca91afd667cbd7c8da4d152a699683e4e3897eed0f588a9a61ec9e26f067bf83bc2653d5c8a3945abd6cf4a47f75614528e20b6e373a354ab50eb788822d75e9473040126071a2f19a26dfc8bb00c1e8a49094ac44b88780911d1143556cb4b89554f1be50e541f0f5d92fa7e979092e37b5e5331edc89bf365a3ac21b9959a405f55c56d018f05aea5853468b7af6bde234169a0a179356a58c771dcdb66de07d56f210dcabf1a1bd4b798298a35e93b391ac9c858a7a618e4bfe4fb78b559b265bea98c8c8ccc622e1b35499ef5b8e84fbacd04814fff07fc9fd6a8542eb744b9746804000040100023140000200c0a864422c168381c52d6c93e14800c8a9c446c4e16ca92248a41140531c6000208010400020801c010622ccb02b8a577328445a039cde21435a67f9a7d655ce102fa252b76c56d02505957ad49bb2073044ac4e7d0b04af7be74c551a7b49d502215e224f967ccb047967d90a8d2e93df60bcb91d37c380378095838e935d35def48aa2d52bea2767a1967952c0ad090e2824646326bcd3aeb119f52632395fce63452ae450ae25898705ba8403b6d2a680c8cc662392083854bb8f10fd3a6e8e4b4ab40d8ffe530181b3d985b31511972df96302c72eafd84141d306195b99b1d25d2286e53ef9798cea6d0884d1834faaf4694c4ef0d5577b7e1aa18e844e92d6f229071ee754aef567451c960a3c720d4bead2b6766a0c4c6e5c4336e24bb472ff751cfbc8297f8156fb898bfb22586fbd9bb2cb21bda3e243358d28e80d5b5939184774d829528f1fc575c26fa4f1aa216f6cc1705edc5bc720c848562f73bb57a216025bf58b9136eb5044a048896388480801bdd0239182bea84f0e10fc042e6870f143efa0558ef74ed5c491c7e71a66c61163788726ab5d97258940ed83f1c6ac2c454c1fd28b006726f583cd8979211d3dd5c0d5f3887ea8a4169cedcdfe257bf0439ace1c3f0694c1cff97699216acf533bba313e84917a56ead1ff99bdd65bf5e6f710841f4aa80f6c4a7a74c978e0a8ff0f14c7f42feb42a1955e53f07cb6cc468d9d5181b6220c5fff2130e38f5646226decb98213efa0f2e460354186f5f4c9fc413114c6b96ad5b9074726619e8e963f08e8f1a185079bcb874c27e5c065a867718a8773e6527951af8004bb42a8a99a742052f35773eb3a31a80cd288a0f0d249c1c6cebd77688d29898f10828d1a4529665f8b4de17e1f007274ab450927bc192985156e9b259820bb3548c29fef5dd6ee1ecda33ca4396343101dbd2df22f14166b7b1ed975ef96e66788266327afe4a947348eac610e68f14b27cb85498aab8002a0d4385bc8b042515721399e67222f58e22f895effbec90dabc3b46f44c20fce37f9ab7ee19e0038887bf2aa45f4379e3910e38e2104d9393bec2b9044082544ca387435d3f88501419c510cd6b8f57592ee95f13120e5b66c40ddcbd8c66c5772670cad88f99887b423b1d085a59461a864e01d4a9a60278bda16e7506b021ce209958b3b620728d838214e44465f5624bc6a44034469e15f2938d3e89f365b8953666280bf39a47e539a449d6940bc658992c191be0deac52531e3d6184b98754ee92df7b407d5bf7cf82e96070b582717f3c06fa90de17c09423ef78818a3c77f2d14d5ff0261bb2260c3b5ac9abad46895110971f5e5ee63b0958384c31be0ec841d059643f3e36134b75cc867039503178414f370d4bedcbda112a0439830ff43e1f8bbca766baa57204f32769bc1f784bd24cce39c165ab60e1875b3bd9ed067cae68da73155bc398559fe22522ff140f2e16a2fc0554d95b462478296a7f75c1d41952af08ccc66bc80e510adab2fb5fd25527164c41a17fbbd4dd12ef0571fe125637edc770caa9cc082d8e132aabff15a4af30bb6c858697d89de36e8c471bf12cc856951289962bb138ae2c5bb8be7fd7ca14a274733fd5733806aac6e4f5b6ad3581b96349c5bbdd7da72ad3992b64bb2ab37b2b824717c9a3c40bcf391970de50f0d04b258cd509f577bcfe3b5c822627145c4f32dcedbdd4fd82a1990245e5900c22912ca8b5e2045ccaa88deca8e991b8922b48634a7a6b1500b34800bebe89cc6fcd5e0971c32d1f31f770a936a404153c563b0bd31abef3a8fc50a8e872710ee60c9ed25f44226856f43b6f8a4f9103878b4a078bf822284e6515181d1193c0371ae078dd9faa194d1430d60dec6e3c0bd5d5c40343adba0e545af8c24ce329b324477042ae239b8d331f342ec8ae0bf267f87b943cad7b8424be5e3ed1d03f847eea63a1f869835d15e8f2050700e5a13bc4f67d58cca1d74e66dba9596c5fb6db10db221fca80d6a42e0bf739c4206faa810fe0d168b4bc7bf28539a3962f651bd8f3c5ea2cbba16e1f36cac3aa99853d8bf8346ca5c0a7634f97ecac6eec24a04db446513be6e59f6366764f9deda3016312ad439edc6403a5e9db2336c210caeaf5f7c53dbb73fa9d7a26acf2663ea754eeeb38edd4b3deede4f0c873c34e82329e8f67c5a16f94e5c6f616c573cd6fa3ca597cdb4f5db39df017ed69d635b0ddd24e5c1e4c5bcc801cd27db05bcc18e44036aeb089bed52e3ecf30c4c8ceca52181b095bc29ec42628d5be484f15d6ebde215f310a4f67e37920cd163f015de950f7f08c7a2b54c99e973f9682fdd2575c7154e51280b2c9b915affb7983ebe18a4f748661e5c49ef067159cafe28f457971a4fb34e338ce2a74e263bc35a469eef9c4941915052de2cee935dc61ae35bb966bc1a340250a4a7e0e9babe8cfa90311cda70d050f9c87cece08d492be943f8c19f5970c476176f8c3da74d0c053eddba5958c9f6aecbd9100d10b938a1f582aa2713ba650de4e8a691a73f64d53848e83f7a0d0b36463fd54b37c3e5f321ec80dd4e85e1dbb7dcf1c2ce1917eb2c1891971cdb940bd59282c06b9ef64765d5c1d75c0490e0e75a2a65d267549fb37e9afa1dfb2f9bab08d2f266583b04695240e5aa249ce68edf314ac5f739583ca9c65ea46a393a7dcc4ca9740cb448f160eab37e74b28069a6830fb3964cb51719a346821de8456d9a295b188e4bf2214f94eebda036e2363c3812f6672e51ee3dff8468f02a71a814fb72296870972efa0b7b1b61801e1d5ce1af5cc92af789b0738770d6e7a0613163f96784752a04a41fad1d17d0e73eb9ea6be9d3a5f221ccbbab5ec967dc4e3086b8b45f81773c76e8c97344aa918d85c7696bc6ed83fe3dd1a20f919cf79bc1166c3999c625364a8bf2f76664df275886fb1e83d9965fa94179d3f1b69ddb9320e2342caf81c6f67218b9e360aa51941f595a748873ee3fabc1c94caa3857bc161ec94e3a6a6be6e90e383877c89f6f76fa1fc5d6412033cb803568ae9c469d6510d407ed618d73372f81789535d2cc016141ee2a20f9c7cca37708409e953c8d8df9582bd1f7a644fcff7e55b35626dd53036ad70a193d41f3510732323bb7f489b42d7b7503c07d1930714ebdf84ae5825ccc3cc32df833c1fb19f5479716c5b25d2f9383d5e33af9f441534f5806d7e9eb5682ca6e4f197419abb61d2793cc06619eb4eb45e2433231428273beafb474f3f6b01bf0edd77a7c67e8bacbd1eddf8a5281e0e40910922be32f083d7199b105435ebc48e6b0fc299b781c3d28201b0cd5491ee27cba151fbb0ab04216a3e5f6f7b03e3989b20f6ce09f860a0d3d311ec676fee4369a4f9492630661ea6ec44adf21927f64fdf04a240ed6df5fdfde9efb91aaafbf1280b5a8cee4c2bdc757693edfbc62bab8c6742f399f7d33d6db010574d48da9399d71432bdae3a7c7f7739245463014054dea097628a8e85b030a6b905097021618712fb0124b4b77f27ee6981541acb016d83a1baceaf0882687200e3d5687dfa90699c21eb7ce35949ce713e74197b0a052a7a192187d57511abb1d3e2ef4fc11814b94a75c01e16dc885bc2a9303cecbaa37bd6b150c9a9d27b582e1dcc3c1504f2f8498b9a1500f35da68f369a3a32ec2c451252bfb4f5f5a416630e77a9567e219f62c27247f4da8c25d9f20a2c89fea3a0d35a335a86354324c2d042d0e1ea2309e3b4cc9a62df32bf569b6316e335586190a0e179f3737940deab70b634fdefb31bef793c27ae3ffad43d6d3f21c5f9c87d7e7e390fbc8c4b4f4e39de9cdf3d9deb0132f81f664ad4f3219588163ced172282629bcf5177e3476131a67a7f3ab1d5f0282bf7464f873f37ecaf1d08b722bdecee410582dd3d6d66340998d47493fa2b13b9974ea92db1699e640ac13282bfebbf326adbe953bb68fde663fc8b69e20b8b2ccb8360c213bd7c217e671a82d91ee5db80028885cf4070fd8d930a907bcdcec3c244882f7a0e87be858fd78bb000a368bf5173b28c4464ad2252622587aa6c8bbc06346cdc87b8f4f5fe4563286d1bbd7252584668550cccc1b037104885a9deefec180d27db9b78bb7a17e87e6bc9b9eade7c9a8c5a3382bfc141e174c3bda14032b561e9daa7e4a936e2171d7cd1e920a37c3caf9ccdc4192f2d00006c3540b169c670af2b35df6591d6eb8bb3c2d36acdf4761208cbe35822d704fb917dfdde8e3d285ecce3378c8dd072d66d6dfa295dde470076262dfdc77f22ba20bbac166ba42420bd8899b2a4c20d29fd7bd83c268023b29f6f0fe86bb892dadf6fcc8241d04acf2ca7a0e2b47d2539b69f9d61380450de16f3e717c4bc5914bb59ab6c4fc1bfc05322aaadc033524973f491b14484b854a9a46bf9cf4708a73d1815b7719b1d9cfad886878e1e4fdfb69d09aa885249c555386d501290168ff6e2af27e984cf623e25291eaa7c32ce68463d6ee6c9f643dd9e800a2d9293ef1e851ba0bcb50c963e48435567c49729128fe72ddba1ba19e83ef73b5139f39091e94cfd22628e9c5c15c9340f419b543a00fb7e6c1399d70da88ff0a29e8878c78305d8920bbb599c08eddb3fa681aa2b11346cd71081089240641e2eae6f332fdcf142a6b219cd20090852c42551b88090b3722df8d7c06d9c1c7f249f0245ff15cc0565b2c4293db5cec51806eb83245d49eec4c49a09a96e924716b69fc29bf0633faa55a4043fe106f472041e8f9e2fc668321d2a9844a9522d691fe7ce8da2a7d65a9207066d6ac4a757c66864b80993128b5e79b1a97984d644dfd298214a5014eaa4b1fbccfb96156a0c94dc2670af015afe54796b4b39340f64e62293c98dc84b7aac5d3d408c08c0834be4bc44bc5960ea508ab47807237b9225e309130dcc88f7d14bfa25b5cba8583e173f700ab73722a958d4d3370e5fd520e44d938244043629dc560eceb4c7ba520928195a557321d7a4d7c49580f9cf80ed07701b1b1cbd08079fc1fa4c1bfa2be0b51d7c6865a8b430a3d9ea96f058d30443f4a6e310a2a3c46748306b25cc61994bcf48b9199c9650a30d796db60e58ac993aaeb940b2a659f2a0aff385d44e011b63854ec231cfdd5a0d3f58eca4af2d8cdb1f04ece13a754e564ac783670ca44674ba30178132db4c8978f5df8f7d859ff8118b197999beb38ff9086883a2862332ad119e8c92f53f32e88b86eedda93c8f1c52c24174cb11a68d068c87b4de0485214affba5b9f69dfb1e84cf192522dcb20e76e1909920b988dc4ff7a4af01f165758a19c08afa9f77b0c3e83b57918ccfa1c3607ffbd58391a17d3066410ef9a8a3b1f571874ecedb1ddd0c511069fdeb13350a86b955ed394ab186a8482f9361eeaf1538966f517bc261848617eecaed7b4443a298f87082a0b8f07bf91ed457749343c34a4c2d822a8c738d2dee0123003fde0ddf3e54785bf982ad53e50a3261975f4c2883d964e520a62463391209cfc72ab84fcf331b3aab62a8b0adb56f86227dc6b6390a5c02db125e12e6309afba7adc653dc4263114abbe3f8300a0ac4f13a4894e66874307e3bac226e1af7ffff2a1463419d9d1c1483c27367d278196d279e5071803fb52e184e523bc618753263e15e73cedc874b1665938fea971ef1623cc0a97a0f37209c9d363cabc7e273c41b71d55a6e26cd24fabe977597236288855cf8bab2f991072f5a093826c0d2481bdb8be2bc0b677aeceabf37ce4de620c5553d339bcb8ce372208e47a2645d719e4a5e01b11af7165bc9505ad14bc2abfbe83797fbd37a46f7e5d10bebb34cd4d7d606066f3d7ee975212b50dd54137e6b353dafefef14e7f0e07a414718c9e3fedc68cf18973cce3a80b6be27c6a3f3444d3bf8ba524e27aa0b612ed1cd554ed71146ce83b29b0288f0515f9387c12941e58c225a9cbe285cc06e12757c9fff5585e278304f36905b26fe827aaaa9442e0e70fac25f40e4f68dc821193c0546d28b4b77c084c26719f0cd3ceeb15026bc6f800c65712b7ec976a2c33254c052272ab04e7407f5e1f888391097700e87331bb315ac9460647fae507a8f5e9cdbc8a1dd37d9c70b421d5abbc045f6342b3a8b82c11f029ff1222f9a9b13b66616b1bddf8cab57d7e5da0a5cd3a17e77e64c6819d0964bf6d5e3582e717778218adbb0fed912a3644a9c9e364700336592605dec04181c944f4929eb837e85de047225b13b9dd060b792d6b568666921e45c2e9c374e7e45e2411414b305e2de32ac30f095dac2c4a2081e9d7f3b36b4ac7a18651fbc1d474a7102cf4b93918300ff3fbbd94a721261b9160cc373ed0a21ab6dbb8b14e05ded1fe717672fd9036f588fd8c933b5d58b9179ce6fc7f4ed1d35eb909a4faf7966268a41575978593577a304baad506f18849029605ce7237726ab70bdb2d9e51de46a779dc77f81adb39d068d77a3cab1cd0310c10eb08fc4d83622a8d4ddeec780356b23e1cbc69b84219d6ccea99922c8bc87c6409362673c63a3a330acc1cc18d24b2844fa25f44e7b97cf8a5e2a3dde4d4a4ce944133ed761740ec39c22900dc25c7eee5ca363bd3840556650f40c16453a9cc8aff785768ff0d688ab716cc212f9c6efb2b0b22fe4c5a2d808af0d890a6e755d5476d68a8379b5b186d44a449c0086be37b1249816c792010f8c4288a646562c9c94ed2bd530411949532e9b0e126f3ec3bc5d8e54ba2b1f31fe54b57db0a86fd744b4ebedb2313cbfdaae4fad9c19baec0583ea9b9df837c389c30c2f1c139efc67957d749db948a238340fa5aecd192d2bef9c4c3b9500bae01f45d383e3ccfdbeefa406a37e8a5534aa0acecc0216b9a8242e22258027e4d6531ab57941cfa5ff812c6c021cc201cdcd906ca042cf4b89547ae48346d22962f5616e702ec0fa96e1a7c2d71de872448e0a7aab00ee0786aa39dd74fae2235c7868faa4ae5c893708033826b987b1291d9a5ce5d90611d84d0f9deb48028a838e00c57341bbe078c06a3513ffeed92935f09de7148f4dfea2f501d87283df380fb8002601c22c5093450b844f965c044c1b01ec7980960588e19a00de3fa60bbb0620b27ac4040815513aa943014028325d6824e7777ec83fc4aba04bcd4efd499f91344bb260eb0e187638d62d3a088a492ddbba6a28c523848447693d53378d9da0f88a655185df3f8a29db630f5972d720ae11dec3bd2c09d5d61111a94ed585b09f2c72748bc8fd010b0ec615c0db376e655f3eab7dc673e5fde45027e4581aaba58854b84c39c1d3d6da08d0c9c3de96036576508740091b08ba712f775a817dec0b2722cbec025066c90afa17195593dddd8b0b254107f0cb867f05ffd1bbab0cb9bd92d1a3f557d0499adfeec3ac65450a120af0626162279f7c23130ec28f46576b204eaa968e92e72602a151c84accd56c7939ea285b529dcf84cd2ae6a5714a158102173cfbc5d6364cf54fa760cc64afbd7d52bf31820bcff9d63c77677e365312aaf1b814d3de48d0e45e78496c3371d474258c22b6e56334d41e46f9851b3108e514d981430d347daff2c3c682f18fbdf102b63cca35c182d38079f98a7c599f29e6d5fc2ca648a30e2482e54271be5aaac458fb371770e589eeaa8d20deaff3969d8f46c87aefb37b525e9a45b770e162f6b1d0031308d7abf5f51db9db815cb644cee70da7e562c489a23d33b1b9fe6857db2f4836dfc11157617dbec8061fa7467fe13789289ff67624d2ea774f71607391155b5d652ff8c692ee9c4823220774a05a0b16477be90723b05d9117465cdc3e310d871db1c02a0662b27f78bc9d230f728a6576829215803fc37f492f1689d02b0c89d8b430cf76689b145184050232020e6bff83fd3c0ee13098f9bd873edd1799128bf518a0b45824b6194f3f728a99c8e2e1c143288ae3a5218215d974a17d6cbf6ffc0d8303f2ce0153f32c34fb74bc7a0ed212b0069f8a629467c149dd984a51c32e4b86c0e0a1f94f4cd9c098081d2e3296e3a42f27d7c2343f83b92a1ea4889d92a5755fb49e7a53f208765e85c639734030deb2c9f20026420097b0fe4298e32f22045bd9bd402587a763ed85146d4af79d3f4160c0d67b1846faafaabfc06c92c86a5600c7af8221fcde1c2b1d5b6c947524043d7424b47c48f4453ce83f4172c52bd2c951d1460599ef8436e50b6323961f0d69ac20ab0f9ceeaa81e0a34cc164c5f4c0ad8a63438b52ce107bdb9e01dfb05589c3b027c97887d5690ad50cc416493eb45a3fd824772bcda053387ae39c4c95bb8c8b2a2174265e24cda997d19c565457e90b1e867b7cd8437ab3f2cedfd0c0bce5e397c1d5b639c8e274131202122337b21e225fec70c0e2d2d688f4500a7689a015ff6c01bca50911cff93b4ee1fa935c022de48d0abdc8cadd5a179606219fe0bcdaf12621d77e416393a4d0f78363aea61965f383db1c2f4386bac2185820223a112d3ea404ca540ce234f3a2a32014e52c8dac4a1f3b8f73103884d7bc84cf4187e41f72b14e044d0c0c0a3e2ade25051e4810f4496873d5122201a73ffac1a56628fd1e63214e381d48b749496fa97e26d686b089aacf069af99d3d70a15f093a93a3afab4cbeee6b6051c648e77e2b82baed2b27f9c2e9412ff96f000857e0da026df759fc7f17077b259b34f30265ac1ebed2682eb1b46027714412ecba56a23d4ece805d1edce9f45770d4f11e498600ea524a127df32fc1a46f2689a1671d2d40959968fb2c51a81bd873523c8925dd5834ef84b57f8816d6225c5be55060323755fb2439e3b865d4e043009482c9443a0ecfc42945c1d7b06beed52fc7df2a5432a730ae8af94735f2b035802df8befe00c87d8200ec41a18291173fdb98a6134eeba45fc68b10d0e7f4888824a0f557d4cf72c17336fe8a92013348920a4b22800cf8a2015768215a48e943d01d38308fda108b80856b3d5081e1d8fff4925f09791ca2613aec484abc15e07ac8fc391905d8010b7ad630fd5046ad0b1edf4634bc93d1e52215cea57d8ce43522730987c3821ca154a4ba28d79b43f7f527d34b92ec7e6a267255fb964e89664aca8e6a3fd79f48be7f1c672c05047c3a9d73ba18336d87a5a6bd6f2d68ea1f1bee7ca8a468d1b507c465bde6fbecc9a68525a9957a2f9a92c1439404454a64cfcdb26fe5c5803d40acbc10dc3b61efec0cba1d46a280d67344c67b90d8f338ecec60302d08447df56d56d806edb89b1ff6385c91cee1cc39abd1a3d3fe4d266c539cdbeb328eefb1602e953e5a7e0cc0afc24d4b099950bcd7266239387174aeaf2423b671dc2b1e785beb400f3b5f0003ae71a4c88a36380c9b3321b2e8d11b0f0423773039084e330da092108ed22a2ebeb91339bb6f204960c0ac63e081e10e95186b97f14c2ac56b45b49a40714c671bff5b7f73b731475bbc8e9b0bf2d68fe65027c24a608f482f29695eec711799c3203cc6e74e870c35780fe533269f2684f61772ef5e21fa193bb1131fd02d346ab41bba4580f3341315711c613cc4b81bb66b74a94692c22d4229c99055e04f4521e13cd636a90cb4f9d805138e308daa89351411168a9d6e54b672b0f3f85baa755e8818c23439a4741dfc2540c7cdadd957416ab3061de80a90c458c6f27f582740bc5c080d0c79e71c3f7f0c08853e5e6ce42f3a0f91080e08ecc668f63a77f8bfd138faef7a15c8dfb5f6ebefead7a126c8c5622865b73051fae0cbd2240fc6f557b934e15bb64e558e03789b6d4a149a4080016cbd1699e70ca7b1b703b25e51802fe445aeef560f32b1007da1080b483a53ceb1d8ca95f2a7a1bb8ef3f1edcad81fc34dce8bfae607ed6ad3fb2adc297ab5377babcc015e7219b986393e3f4feb1e6ec8b62657e19c5e8a1eade73ff60474df28617522f810e6b65e83f624e60f97422bd89038280b30a5c4e5091183ae88a41c709bbeb13732f2edd7a132a309498bebcfb17d91f3d4928914232a429c8ea2861743e3942672047a8ac30725effe909e6edfae918f04ad96adefd30e39b5090adf5fb471f202c52858de5eb069211e7360389e54963ac0993c602525b0619f10783c0de9a5c38fd6d9a5f8276225be33814db40003a8a688957741237d24a9ed5aeded8d30678ed3ea207aff087b1443445c49dce74e049d9f9a113b70951deb8cd4b90b4f62ce279c06a02aa98000a276f41a9bca687a4dc7eb903fb6f33e88ed3c75fe5ee6d1d167a7eb459106bc20d5e924df1ca23250ad19320134109b08812e6a0c5aaa384c67a5e6d9422981a2980d2c2ef0f0a2dc36ebbc51cf6a4e0505099b5f1792dee8c684848accb23b53e51986218212c7b4f10fef922df6500baffa0edcd5cf528d7fbb652e16b37f9fb061c1a8af9431c9226c43f0543d79d3e892984c3f1cb12e8972bcfe5dc1c35951056fa96cf5e0be0d5f7b5d597c5bd10f73b74f6f303d73896c7f71d16917b49cf398460c85963905e9d03d1f9da9f972343cfd4e693bc90f0a3330eeb1ac3aeec05eee5fea6d02113efc07b5faf7c6b45980c2cd903262ffa3380818f1e57d9787f09cc135bedb66b347d34baa157bd75dd05a65e9300cfc77d3713fd3c9a79718517dbf4a4f2806a7d2541bcaff10ec50e1852e41da3e0d1e9db8573c8a27091010df310f2e647bd8596368b74292bd0fdd898ab9bd9b0801f0f557c3a573366b339093852655dbb68b766f6da2f60237f13eb0a481b38e697121a56bea02ae34ed6ac78cddb261377e8582c01c0dbb577222e1f17afed2325085e8ceb37fd86341a9ef7b5a3bf40def445ca7c74793ffde3e43f9f2c4dce76982406a6147d8825f7d41ba2fc77060791408b80d86e74e097d01b47f5f4503c9841c02ee3b14c60bafac98a28631b503191142ad945e35f0dbd3359a328e9e75c0085a8cd004d53b4f6a449718297f12a6542fe8916ab83687e906380019d53441a2af988160bcb420b8e00aed5530239febc17891f2fafe3ee8910fa8abc98e8689c261138b65d8c4080531dd96cc12cffc46c7fb231fc6fa5d592163531670602ff258112607af9041ead54bd416641e41f65c57c97a97b8bfce40bdd1ca9b1e89131eb3238e65e395d3bbdb29744681168ca4c600ea0c1116ab5c212e41693afe627c40b215ad3ece202a0ebe58e550f74ddb1d7cf69972cbe18a2df92b0e477bec48623c882aca69204f1296d3854b4528ab7add02bd73b7679a8b8283a1aef8cd3ee9279383760ef135faf81c74c660717177915821877ae5c61e047fa682292ea831580778fe92c563140a6ae5a208b732ec307056832b04d2b1cc1b9584d166f8c3fd6979227bf3e894a623af9b215c52accce21db0b67fac73f03e3c3c9a50bca80a88cc7d5c3bc14b091a7170cf0172a49aa07979820ff9eb624bce77a6c42cf043ab72e19e68e9dd1d54e4f1a5100dcec9e4ab58f7636d762789b78f28aedd96d4b18ed939cfb58b881173cb6b115421bc3a4a43ae703d62780f844a592a05d9f5b15b59105a4e31557e686ef707823024d5a3847843ec44965197e42701b27ed628bed6ad5cee0419e58bcd6eba6160c5a09fed39319bd8f8eb3d61bdb17ab57ccf58299f9f792a1e5357133a30593aef578305395784dbcdac5006dd5f0ee39eca079697d12f87fb781147cb64dde74f27571bd9645c8a41a247221313e87b0afe036e63ac2443282bf8fd5d75e60c5a7e6c8a14377c44b2f30208862bf984acee0255652ac361960b8a85ea67277aa4a5101d3e485d202f1729e8009f7faa4e168406905383ad776cd60c674845ee5d1422a50733ad316e3ad2dca9d19612ceb24915d51f05deaaa40db855ffeb508231d1c0ba52550b8522cc8f6d303d209c98268c7d05a2a01e83460dabbb61883a54343b9b464917ca50109f45a46043806a043aca9546bf12df8958d3a5e4dd5e8b14044dc726e2c53ffa7e91b0ba4deb8a909b21e13d76ff149672b64fa7151ee3b6a9a44f3ccfdd0fbd2b23ac70d86268b09741169d6a41a978ea39adab4ba0c4c7f9199ac0e3887fea0b8775125985553ca4193cfaf4f86cea06ae789df8556674dcac2b0337b9d0e64b7bf6535c93f95f13dade59ca0b354c076f1144f45bbf71e1b5a1137ae88626e3e0560c859ea6a4d14b20d14d9dd8274a4e1af361efbc346da8e805502223b8de206ef61b2f3ae0befddf568e08bbb0ccf471cdd10db1ba261b14519322bb76daa5f579e917e515fb61fe39aec64d347296f6497c82349986b1a4c04d7f1fa44487285e43c1a4de8dff804f4a7fc2bf4eeff81467210e492041627a8f56c06f04ebd01f0574ce6c5ebd5b5e895ca05e1660cbd1b5b8e4e3864cff0b6eb75bc3f62afcec9dc805b02fe2b230b0394bf1fd9bb0e5cb6331e3cc9e3081da828793226f292bb54f705d50d2ae1f7e0b4d29b5ac30cea743a941ccf8968f2d4224e592ae9b99b07d19ca6a82654ad92a77588b2c5625f72c9ec6c1a7b03a5ce6dcbf42f80053d22535137d3febb31323808cfdaf8301eb722a68a4a01090350c406e1195576c1f2914c3583b89e3f40260117a2173af1d6516d7cc1f616dd759576d27bb461c0e525d73d93cef6c0779353858c5c0e59968aa6512d28d080813d9ff928e5c594925aa46f713a98df749586943c06969a636b5ae8c734f9bcc088b34ee7505c31cf33998cd0e37135c205bb15ee048a9864040bfccef151441c1aef5e95743b978678b5625120445055720b1650e0b35e15915b4c86d38bdb45735aa04e129965549cab03d5f46479e514eb36ae43dac1ac6369596582c509a0ec3b18d883819437d1b6495d92838d78222d6eca05114ef40e31215408a3381a58efbf88b5e4d31b1004b9cb690cd259c58935721cf0d951df30891bd43875117e4d75c138192f574af156d7e2ce59cd909c92b8818853a4ac766d8017642f09b721b6cf2dc9ea35ba656c4846c3f9eb83e9e2120eb6a6939291b8e49a5aea5c52887bec3452b1a63375a36fb99eed2cd728ccd0f6dd2b49d9543820796dd093753eac1fc4cd5d3fa5da1cf16a145c73ac47417adec1bd5c38777034fcc467f75e74fc3943000d49f5148c83ec61c07ee33911418bfda7cfc1a82c342bdf5d4b31ec6f9d385204b29dcdd6b442efa6f93ba411da5bcb9e0b7b683ece86436672edc553d199bcb0261159776c0d1acdd8cab2e9e70cd765c2dffd19dbdc014fe726043e31e9bc9dfa1b278f64adcaf06770daabc0365680b2835da9cbfa284e3564307bc9dacbcb247f008f9e403a7754240677530f1b988d411ff6ce618b0e3b333fbc057fe147ad73dcf0db82d4b3fc9233ad3565ff2ab6ddd9782262245dea6f63d71d3097d52dc0d9d8f0fe3615fc6d3edc1bdd484a8858dc055f25e07589ec56bd8adc20a3397e70b9895a549b912c6695f6ad123524280d9f2fb7de266f6b06395b607827aad29ae8d54b232e8d3cde4e01b98a0ae75f2663d23a41a301c3461b35c6f564e94a4013daf306382604b4b38cd383b55a5d0ecd58a3717d9e026607d8750cab2a052eb514f10ebb3028a2a8ee948497b5bdff68eefd95cb2b447d243f00aec7829b534f7024ee1efe9cc175b37dde858d7c02045cc52dd24f6b0b4e71fe55efd412a50d8e2b51454d80ea255a6257db31c8d10b9cfb153e5033bd9b7c5fad3c9d3e87e8f3ea042e4eed191fbd989b04c3d5738494d681195e71fbadd6e5241085829ee7d872fadaba9dfaaf7b0d645f942f9a4a9e72887d034b8b33ffa55ba5c475c8affec30f98b4ee46ff7c075a0b082ba82cf4ecab96af39f9f1f571371ac5e36b4df9eeb6c80a60f67cd9ba43e4ac5fbff785b1be6c638646a60777d13a7a6d1b8102595117ac6f5759376eaa87b0067027c35e6934b77a45b4e445fe30fcd1868b4564addcfa798ca00a9fcd03038d350d12f18422189e3832902b856939f1eb4a4f611ec2f397774852b0722dfecd06017260468fea857f3f176bea9c102fb1e2b93ca7312a0c9b9ee9608126c6ec7439bd040cd78b086b8cb13fe0d53849f8f00d1d36ef5dedd1ed0296920dbf51c4f3a31222d415eb79a8ce86f64763dc4b41db4772779fb54588ed9feca8b075d3050ae2fb1281b589587e131cc941cd5a70e0da2d7d8c03a5f2419378164c8dec5325667d6a7630ec298018c18c71740c18a79903de35dca32adda19e4684d096ce59c1f16ee3143f8aee4f3c5546e145ee468e55efd518f5eaf460bd2960461cb3d89a9af109753e64b8dfc52e30746f17f1867400097e9ca459caad34afaa58f4bb4c6a6b006e8fe0ca86ac8866a05302d63059de1a58d17b38e53f4ea5fb8e079410f438900ad10eb038b42cbd2790f6a3a28e97f7fe787a725083fd624641616f06e35e703ddbbb237545c915acb5f201144fab4465caefe3c3c3a796ea41ab5d30db209d2d6302ab32327a91b1822856ef76dcd0c3c4e5a70f524c38fd9aaf18561820c3156c040d87cc89a3a5db67e98e892fabc941551fec9793fa4a51e33581a14bdd5ca37f9ceb458ba30f384881055822d0644d90907d00bf61abe3045853fc7ccb44813deb1f0ff6967428b4870c762688b23e84e9d506384b0008d712997a02dacbd18c71e875756248a386f3c581357b86d96ecfd68592ab80182d79efb3378a7c5744c74d56c88d47f62fe1ff79b78ec36a0feb8676282af4729947f1015917ea202541fccc74ee8fba32bf67307eb46ec5ac57fdc6bdbcf0e8a4a15b2e9d8936fa2ae68dde63e127c6ade7c0fc59c83048e6cfbdb5ce5934b92a7c3b34e9eedf15c80e24ba877a871a9548dd6f2d64371039785f0a6af682933bc391535f1f382b1fd9ca139276b403dc4077b9f7f98b962aec564c2c6291ef95d1b5f84a44dea7fb9e36340c975e5a5d0ed66a743bac5c1f4abf0640fadb226a3238904b41a3b603f111b8a089b701b831d7b22cda8b311eb933ba31f7edcd99e064b8386633d32a20e442526f21d5b941e6acda3015838b8e9051952a938e2283c42c99c23730c0ef0dea3fabf1354b0c4aeea4eac69244ef185889995d7aa44a78aa2fddd80adbd47bed5b058ad3de797a0b0efa21fcf4171a201c5988fc75601d078fe85c31e6570682c1b5a0e011222285b4a66a66910dca99f7b6344990eaf56447659a7ef7c4413675b132fa00a46eed84eb505929532f6a23a9dec58a4bdce7d24a95bf91b85352368f50e936c96c38e8b5d12a370bc38d1b542e71d33234cd068e80dc00bcba35a0492aea03b5eb0fc32c0ae82a65c870b8bb0ebbe667cd6cd719781022d6991c3888e3819664dbcfab668b425b2a01a249d5e6f2416bee1e291396e40e93c00477c3c4483a6ac685613ffa302ab054e2dc4e11becce79e11ef66867ad9c082420cbd2207cc93df7f175fc3572d6f35ecc408e0c2a69f59f1ae223ec1b1a5da6dc6f13617454f178d72679b8264fdcf7e155eb2bb35f618866ca576b2877f21ec8b769392aad213636b85b8739e1a50f8b9a53096dbd00568142327fb46e6164eec401c44e6e87395a903111d0c0fced066b75e1b65d0f3a2d31cd0bb4a66e87792776f18b0b6b31b6dcf4116a3219dd0bc0d3130d4e1ff3dca4a1425eb84e2a15c31549a59e6b25b77325bfbba17b22a4308cd142f4722f5088f9b5db80b13297859b9f1a8a76a907444c080efc642ea0bd4f187cb2fde093b2e131a504cb3db2045b9333f4840a84dd866c96e3ecf575d71bd0354e8834ea50cab54bd10eb7d54b9351289fc26b4880010c8e95e74c016da28ccb09c489dd7ea2d4c38d21ffb72a11f9861b06f6a494ddd30439c2c48221897768efebc6cf5e7f69765bbda1756acd494ad46ecd7ff4ac38919fc9f284a55b97533a61036d5c1676cb866dcf871dfdf2129aba2793820d7e38fb96d20650a40e5ba9b3244aa0e4beba6811488a53b2ffa608436601a04cc4c7b9e0816b717ef76790a1cf8f70862afbf1a504d77bd2621554d7870b0b2f2969f75b70c0595de695543d3f793284f2f13da5f3f39ca38c3f9133858d17c299134f3caa7187a2a5a3b30ece32613d5d330838f6e9b225aa7ee9da5cfd6d2f3d021d3b4c70676567aa7859f4ea0f9a3c5661447256c4c1fea1c3cb241275752ce2f11bc90e669ea6a922075e5482c78fe9b211f8c4e541337a7586dbc1d012b470c3a292dd5ca9d44c3f81caf0d8c4906854620c93c2df5dac90aa6833689fad2bd5d652a7550a55d8b8d8e28f46659a9240d7042ec2e4ce2ca3c6e4ccc18e87cc6e229a90e87eb48141e446730c90094d33216e3578aa3264514bab470acf1f76e71b41e254bc4cc94ca41159e87bb02187ee0bb490e29a21a01f05ebf7eb0c8a78f6ef79f9a4497f81dcc84724de9089acd6766c5681c22fa2b30cc2a61fc030a2f4b7cc77909a17443d1f8a03abbe99e8d9ec85bfaaec8eb31ebb36ce4aa08d07570b4b04647730665aa40b8c37dbfbd44840988ed4fc901986244a2b45c140218c1950c3c11216b2be36591926b252877943d10cdb2b7847242a58aa35e2fa20a479388cadd79f067d1050e6bd93f03fa47ddfb5f7662932ab2d58a3406c6ce8372c9a72af1a84f4597bbf476c32a94c3e7e0d419a436152a5852cd6e9f4a5f73e481708c6c9107de052141d6b258a218b80e590187417accd02943a8078193ce82fd7d74ad9858921c8fbee53e4cbab39297da6af12fce38ae3b50eb1ac50c6c6dd790d37135821db11b5eaf1c811bc725120279dbd08d9f53e3876f2b93b354123d6698364cab0b0d4095cc6fcd67fb93822088cda964562c50eb7912bf3311c8b2204d56c392b62f8a4abda679fd6635a1ebe80b8f33290f10376c51839532c289b491c326a4bce4bdc5df20dab9f5033af2f22781a774ded53cba62adbbede4ecf42ef40cb214f5c8ff31232437e452607587f942b6d3687ff1e65b669431369be46a78890063a147c59eb3677fc059ab615ae7c5f3b7923120514b34b4aac495d46784068508c84856bf887575befd2ae6a2767fb9c198bc943130fb8b0c729eb2b835f978e33395385abd390bdc46572666ecec06d7db8e47451f5ee6ed922de08cf652fd3ebbab5851f57f87a901e353c9a1f10d6a220123d4ecfee92968f3c4637faf09ac40f906209b9f29a974ccc15ed7562643ebcd4723eec493119001bcc502624619a0a018abcc8f3e835dc09119f627f96d992f5a8ea4310c05a3e05ec833a6dc8600ababb63e2a25cb041174a42a6bef1ca658d4f20061a5eb76179e2aa1735d7f6285319c03da3927c46389c1773c3ca7336bc5b5d41c9cb8ab09dd122415f128d1e38f2b0d0e0a3a300faf7c9ce3aca1a681dc225739aad874513f4b3abe8f8ff081c6e4d1d52e2aa05a9df6a0dcdb8cd390139f04c6d47b30c71d5fc4cd38155c3c80086ce364f1631a1153a8ff2563504451c8f26e00dbfd50e65cb8855a57594c138204ea14d6a32d7d9ade609d153d0a2afce569a495a08ec62516c17dabf9bce9c11a0db610c39f78dd889c3e5767325ce771b8b958ff01e76e054771a564d6c978d320a268f7429e6c75e67bcb25a9eb3e0605dd688cb42989293deb2998c82e8f2c596ff6a9c6f209b6e346941a15f1d66f8677d60896e71565b3f2fd06f78a8abb76393c9d8a1cadef60398f0b08aa150375a624ebfa00c801fe39b0e7982a30d046062872d660ec108c4279522b8d8b797247001c8f4714e19246c5fe6954c9e3b60246c0bbac490691d5fd24fa12590b1d2db6d27105169a6d734b6712f4810c05343e3cfea1660aa574831a9a8161897d6180cfae47999996f8d5ed5b0fdb633ee330c43c923c718dcbc61bfd101d37b23254947241d141d0b5c84449ef3306c099b3af3c4419696aa359c4a85dd1fbf4671245b105b7627fec8798b332a34a9ee75144fd10e298b8bd54a342c37662e1bdfb784b72c47659e42eaed4c07699e691f78966459e120e9525b0bfae6cfeca6f02c23df1714adb200010f195c5c48c37ca98f6bcdcc00dcc47efc60f62dbd87b79615abb85e22de1986ed5a55874a404edf562df44c25a00874044bb8730dc2c205291c563751e8b2f6e9336ebae51c190fda2ffc2c2881d6eafb7bb6bf03f7e6ea9ccbdee56f9340ae6d33391488e726f7d91b7cac0f42796a06a3391e34d8f4924b9539ef169e2c5c010717bd74ac27017d424d930dcc07c6054a849dde5ab736ccb05b58aa66112944f6c7e8eb2718932d50a01f06732440f9b2fc1ec2b6c91db42adc89fb2355857132bdbfdd288a1f72f64cb825cd9979e42e0e3706b2bb8c8ef5cc55367bb493217eef363d62c0a0ebcc009c435d22caca5d82edc0c01d3e08a5e84355451d7ca8db441e049c6dc6beb0c65c85d247b5d935235a1826534d7658234bffc68eb825101ba1a1674b36ef12198011e41ccbb28004f17fd123b57294edbb7a6b0ca297847c82d71576f99a88d405f676d1dd96c5e978b45f509c0e33944ac1b590fb1cef7b8231382db95c7eb8602724361175bec3c11211730b15054765cd93f4e7fb49fb632a5f4236b5d23682629e2126ffddb509f7115768e9edd0117c1b465c3b1c90a670cb8f0e57f7afee93532f6dd06aa33a80c94e3ffbb2221b54cde67ae2077690a28e2b8489d95ad41df873c40bfa32bf58a9a04349567677b664c0103c3fd7ab64034d305689a842520f1fb9e8400580507b1ad82f3d3d4eb3d03659a0ac28941b1e8e93dafb287882978fde9eaeb44e34981f224d43246b6d1bec57e424e02f71029d5ec1bfe21a203677c7035b28d9e7283f20e6618206206fc47960d94ebb3e470cede6428e00c2a255d0e39375dea8526bd6efcb3131d5831485f8c3b0dd4ff76d3f881e00b117eb8bcd8c12fb8fc58dea690af75f85c5c2820ff5ffdb5c80374a4804fdc6b02c7dfc7cf02f67f737c95fd4b80dc67c5b501f88e03bdfa9e0815c581becf8772df2036052b7a1a0b4af78a9a23e70c8a3e40839b06ed7dec2f7fc7057ef91d8d2e685a1c3afc3f3378e917a14603fb4d545c14855b2a1ae67e402142cfb4125fedc0e6fb112344d04527aa844b9a0f3ab91f84754159a87147b38511398dc06b29715bc8efa2b2cfaf6e09269c56d6f102ab518f85d3e1bb875ff2974c46852ad4f4dd3c282cfbc1eafd5a937c1830cafac5fd26e8f0f9f63260e7c7f93d500e5a41567f5688959b52e1c0efb1afc2fe057affa3391370edef7e6fec03c38f609fb96930d63948f15fd1b344940bf8eeb77ea33ee2e58b03c7cf3e14730643412cd5e87591d0eb0b674eac379cd7a26f292cffad0e5c812faad937e773eac57e608812e403379d992cb99faa3d26c99c857e828601a5640861e1bddcb6f5bd3865e852bda23c0d504ab6ecabc023317bb25b01c3091a090bd32f2cfe5ac4c7523196f04d5f7ad1b953b8f653e763e1d53744fcb847e3c240e58f3f1f1a6cb64103c2d7e975f32190ece3da57b35a7c50f9ab38c5d02c0d06ff6389e98bc3323bd4930fe5972ca850ede3e205027e91c95ff1d608b1daf1fe8f9f0ded3e5c5eecc032de9e58af4920036afadd5c2820fb5f711a80e32fffb3ac401cf2fbf03ff0541803fafedf4eb32031bbf838465ce0f7fbd21980022c570d8fdbc8055e7f41a398278843c70fbe490b992850edef72000df995dc1eae528ccd2940e0630c2dc5d38ac1a3ffff285e0c68dd57ffd7c90476bfb8e0246e1ff1096bc1906c9a9c2cbdfdbc231581dd4a99410704b9329a3f1d9635e1699afad5482913b20084b8ad0865e5cf5f6d8d7a13609a3328f608b0d95448fa3842c8b28c6f90e3c1c75f0cdcb904325d4ecd2671424110248527c1d8e7c34fa461446a11005f6089602fb77f3b4007de9e186f0aa87d5dbd428005d9bcab2e1a009a1ee57fbc6c78f7e1f26d07bfe3ed47fcabbc7f01bc3e68dd0954f375fe37fd062d13ece772b6030bc2e15b4c1acca48961501de5fbf6b260f7c7fd3d5002da2d97df2bc40a0d6850f0137f77eb0ab1f8ba17dd9d00ea7f37e7101838797c58a1989b9186ef39486f63a93aa7bc08fc7a94f7ff953b06e4cc17dffeaf826271d0f7fb769181ddb9af0f9cb7254f28c317e4f06195626e8486023f8825c44c42048a0d8ef27d467f40f14bf4b193d8157cf90b8d629a2a0e1f7e7f8805658602eb7f6e170a967fd6c75b4375d4e77379810496e5f7ac786906563ae07f7a5978ef036e1fac154a684090f725c9df2d86872a2ae515ff100263d6f0a66101bd92ce0ae33e31ff095cf3a3fb2cbff8ab45d53ef7fb12be0890c02baaa22bf7436ff873e02ac4ef8dab438aa1daf76d8e8ee6ba545d9dd9ab9c08ae700eaa0ee6765629a43224e3a4407c44aee0fbbfe8c4413794d1407a221fc0416c276bd83cd59d68867f393ea3dffe921c16f078810152fa21724c080cb27cdb3eb7498246edeaddc2b9f6da1e7b3b1916cfdfe4edf4130c6d23eb399f0c26398c8404dc354d2f6ee697e903d86bc04079b6304bfe5775485d03846cc140fa415d27e2a0e0ba7a119153c75fdad09b265bc4e640f50f588a6b133ea6cdee5442e31ad853573608c344d00c17b824b346333eb8693291ad588d1dd3561235ffcbea36f287bd1a019c92e84be6d0c5769c11825e1b2f5bb7ed5d4500ab4ddeefa60c2d4922178d4d9199339435f0ecb3a189683407dd9026b6e8f30077f3b61c909d26f1b85f29483bfae94d8d6e1ec04ffb07471601945c264ca6519b3b2a3630248190a5f3634a9645fb33398952320147eaac12f19e28cee70ceccde4e810bdbafce8fea5eeccb1c0670b9b39d73321e7d9568c7cfc431729d824c836e842e9e12f9f2204c3d253888d0019c5539a9aa5fc45baa9169ca5db97c2b5c217540f7ec2f3faa18b95e344b2c66a2d60fc912ffb8b35dd2e65c7631117487bcd20c327f9ce509c006ff9a353ff4559d5937a0b036b1e14845eb813aaa2a407b73fdc081c8b9aa55662794924897327e6d1172010c0517c44e9f2cc1f405dd7ca5640f6c603913cddaaf338cb1f7118424966886b52fe48f3c4515b0210ee90383886e2424385834de11cb90c6098d8c5281c878f218205133e71643426b4f656096f2631776e0a395228bb75484e408e1df40ffc633f90a527048bf0a8b2bf2949b2f0fc2811a30b44ea623ac03fa23005f35618519d6224475cca03ec65b6a7a88a8a05275d592e4a2275cb83bd92f9ca13419a5911d70fefe82abb57d0947c9f49d24c4aca1b164f654fb490f5867a3a781f244fc4c62313301d1376e8e62f0b22f135204dd37f8f9ba51cdf275f5a18f493e91d5d7bb345c00f535bfcd19e4970d198982a53b3e47ff45991a00cf9bfcba18832d8414cd8c564b65b9c5794d1f25375234be4ac5101b79bf09c3b876ba88a9c292e74586830bf0c6391e1c20f68f3950984437e4b7253562b5f13c98bfc3ec3aa87445d355d186536317c25c1838dd1e5fdc8d9dae8bd11ab8fe91af619f56e5fe8a7e9f62649160721127d6fd855120d5ac0a73f39a5ee7ced444a65111655aa5647c1598450ef815da3ae70df1741b6e59b8c6d947686d9630a37985ccee3ed48ff4dd0dfb231dc4dba1f7f4928c351eea731879b201c15cf50ce52dd1d90a0f70a747df4c14d972a7123408f7dd17306a0c1afaaf3544b8bb2e35d9c0519d88e55ff3af9d333a90576992698ba486954dc3dc2bc2b35ddf3a9b825e8950def418afe3e4fc5547d920d9994b2177f6134629468ebe95e4a1c0d11f7ce5a6abacaa5ba3ff2193002d068c298fabb93b66179770f2233b1edae1994418a60b14dd0629cce4f7835a25d77e3f54e9c988d3f21b28675002da3b9a62ca2d8ffe1e89613a27ca88e80c95de18dd1f0bb53e63fe464effbaea39aca3b1949a5c18ff6a4023d700c2071c90e66ed304ce6a68b2106c91fd5b2fe523563d653c6d26840e4cc4616fc0c5935dfc16e8590e2355e909943aeb42e9f98721139032371eede1e616a8065bf7b1724e87609a00e2f93de167a24d83208ed741a9abd3647c247be566cc09778f1e09446da7c0b042432dcbfd9475331925b23ed0b6b8bc086cd20a607d49c15566b4a2620ea3546c6b0d411383748e6d98782c37f021e420fdc4d4b451ac065e25c5fe1a8f2ebc1b5b847706a86f40185d34d124053219e8c6575ef74348cb13c5834270a1e237fc0aa6c80bee477d78d094ad2c482d23a52d740e38c75134c5f4189090c7b5f01429460f7ccd57c64a6e8eba1282133c5bc55ada0fb4d73a9ca03d86a09f2e74f735c97533c49a825019897b2d014108e063b089c58fd99838db2918e4b45b3800ec99f405dcf0fdf394707a110aa85882d029d2f688af6d18a9be6c73ccee06758d94dce57b54f00762e2b6a6e505c185112cc9aac919a8724184dbfd632ca1266b12bba801f0442a1b974d3702d69a75a0953ff75489527923e47442f7b96e5fe5e04a667cb8b1db62ce7c8d649b89d99e2c57a0e02046c83f78677338d2b937cdad005998f9074de5dd19c35faf10de82a020a1fa176831b5199a97da472ed07ab5543376705517b0a98f7419fffe20cc7ba21cf7f22e1429c64d2e5cb81ac47c065cb03e98dd3d5da4b11d88894758b5bf7d756e7dd0d72872c42cc0d75c9d314135a5ec21846d1deb33474c422bfa465a6f47a7e8dbbf2ae57dd134ee7611bc4126e07114c1c67271a78d490a121c57158317ddeb2fc22c852013be6321f72867623fc3b0a9be041edf91b356645763b12c8d1122b9650a036c2c492bc77dc7b28bd442c00fc6b7ccfc278098c0ca93bccdf9f9b8b4826da5da5d15135f6a27ce006187f3693e51580fb142231d3c46309700d97e9b5598a89b94390250066cf9883955fc56ec4111cbf782c344f61efb6f6d53902a382eeaaf84b3e5e89ceda58023c2c4b67552ebbe4bb5fb767abcdbc9f011a3388dcc4cd315a64c229d1c37c1c87fbf11fe833a8fb667c70572c789acacc578ca052576a9e3315e6626d4367bcede748d27b94746ba6b967f1d2dc5afdb7dc7817d008c9078a6540c2621301a1f8d964825bb6f817a46479e9ad6b20f6a310243222da39b8fb4234025c6102a764879fca3c5e5c7d43d342dd4b786a4e9d2488995ced4aa8293845382c59d419c8955c1e92dd4dd992f7d0096aa82e2f3d31640bed23b00fbc040a9ef26fa3877f89d7c088ba9b40b610614391e4ac802149c0bfa2accf117d73537062ae193fda2754b93c7440961a505a888b60098a17a6797c78649292cd1904ad3c0c563ad821ea2b462225c9013338ef930e200056fe3741b54352b08cd297edd3013301867ed557aa323ad6f7ff01ba22c62ab5ef963c0730b67fcfe67b78c58776da2760f765a8397ee1fc3fe9f853b68f51d625eceaeb9bb0aa75fbe3601e5280b75f1ea982138f27aa6d40e99b0b56014b5665b8128035adf42ccc6b45490b29963341529b10be1d1c48d8c278c706013198fb72f50df5541366b857998d3ad0392804d453405d2205646513f505b4fa79a8eb2e1498cdda4eeed0f51cc8534ad0de01c1e7b0508eda52bc134e606da0b43ddd15b4db1fdaf2142eadb5201274fa7a2d528453bdfb12a4da9f9b4596a86564238581da8c5fcce3343b4a2b47eb9a91f7d83e02cfff9b4f704db9a2a382a449d7c945d3375fcf98298436f4c542fd1da1f1d714a903fadbcef0b95838eed39a548f148e01448f3f43b18a072ee78ee69dcbc177b501d8949b954fd46700eb16dc04bab62867a005e82833682db0942830aa53f59a79877768f9aa6be8c5bacb3406fa6a9bb2cd15cd5dad7bcd1de8987e06ae8a4b4654e99971291efc4a4d82796fcb9be48e3374c34634852a2f9e52725b8afc50f8c1e9ace990c391e84ae43cc2a312716fc80df6144115a7c85bbb717c3fb36042be073e305fa04fe11d7521ff3b0f40d7f6d3633dc7de149d18414e4cfc53b56efc62102ccf9f50f350682bcb8783167066cd6f317d6747e3b93d978f44e1ca916e78cf7f6f4eb72564bf7b97a205a65a213566450d90a27282efdf6ccc95d51a910f3f1b7da578613f724e749e15f1eb1800b52203528ea300ce683cca4575b81d18ab852181df650f9ca5d417237113a0140de9f6a291948cd514763db76ad5ab54b4e8ab6237d18a110b5c2dea20e83f59fc43e4feab163dfb875e78517ab5fcbed9eb2aa92478244498cff0a779cca8a116125c4972453e938a2b7634ad326995004fc3f707f571f3dcffff8fb0f43bfffab09fb85f5b8b34b471184009a43579914f2d366ddb2f3ae1453081896c9488bf280e86d6018584cc2b0214f18638c560a69b657de1a482fa6319a96c117aa0e7c068135e855cfe0416031f93a11e3b1f68cbac5560d260c489a4e4d58a23fbe1c0cedda5cc7f7f419951758720eddb248a394913c973ae8c0f3808883d32f07d1eeddf041c63646db250f1d7174108f03efaf9ce86c533fd0e1a0852081873ea5a5d61fb21fe08acfae171b60bb9929bc7e40eaaeef13b08a59775a7063bb89400a323a74dbb979069046557ce6869bb92bfa30cd50102da1b8298120f3386a1e874c17474b6a666224ea42a2b36548fcf58a0ae9fb930178dd08e0dd064a0a50fd948db527c999391e73a99de2f48d8eae65facedc0bce57fbaf0cd0cb2a36e929234043d9b6e44ee9a640fc557a61168bc836c72859dcd0f0bd55e16b793a5ff31c3c0e81521300850e56b3a12a0a6efb5cb32b5620d22e61f1b97675daa88fc3520845bd8e91aa6ff309f4998c0f0f3dc26d715209d3cdc1784f54f4e9987a0c70b90e2876108f129a8583003c46d17740f898cb264c373f6c8302579312c3e3165b6bdbcf14132b0d41bf96b1a892627a6ec23a559f214c3b0a3d5acd686169babcd02bdbc247adbe48bcc034b4978910f83c30b14161eabf87ef3f111e747f720084657876ca2df65baa16cf4f91f190e221fa5152088c55044c8474484f1e7c37aae8aac1b5f45a46c4d88cd5a93185fdf9906a8c59ca24660fdb55b91d6d162b0a0451506a0e21738acb927bfd923e6830ce6ad2bc96d53b9891987b73a40d70598496ce62f1767a717b278d9e04493551a198303d90d90a0898c8404c22e53ace2fbc41233beab6da2fe267643c9f3235df7a365a8332836709f80fb20609162bdb94adc5c5bf2aa89abe1920a23e00d8f268270e788f576b5b4584fb2cd8be45c14359133663bf217520ad93c4bac23f5fbcb10708c839e15c87707a8075cb0ba523e862a60a449a3102d95f2925bf59706d8c27acda43cce3eb8d143813dafc6ce97b5eaddd1c6611ab8e87bc81d318b02e18c439a20c077245eadc876835f619b3ca30668e1a5e9de18d9ce42b721b032cc4f1ff3671d6a0a6502d4f9765248062d0091d719040d885f0058e02984b503977dac3a150d273c02c00baec5d0431da1693481083008a4d43568a01bf16543a8d8c68eeae7424bf216101405729fc3081c80c7c7f0032c889f937c6466de5b0a1973245f9eedfdabe0d0870073827ae09f860732668a8d168070eec4ceb02a6f2602cc87a69e0d1a6b044b9a745afbc3b13e82a947cd61be183d4bdcaf12c8c612fafee08baff8ffb4c8a0ab7a13a1719755a7cb8bc236489d2c76fca44dd69043a9617abf8d0c95e42ef45864706d11fe95a0d34aa68a3f0d4886b608ac1f08ef5ae94c676cf5cb1a61485e1414a182220d86400b05a53218763ed574e81b17f4a3a7e46f21579c55a7dd725d57807068ccdc6f7cad81e5a1beac2e483fff6bc1753e6b41b9f3f93352dede44c97f7a65d87df5beeacb2d8a3480c7cce883eb1071edac517f0472c1a7f2637808a2845e61684f599fcbb08a675e35909e41e872d140c91783472cc2f0cb9bf7852fcd87f92726430d2eeb18943d4196d241ec9043e16dc524749f80f80a2f87c3700f132f1ede809e3db2064e0bf6215894a451c8792b1dd8f885db627f16d56e5d11be966edfadcf6fe1dfbecdf82dbc7bb72daf061d70be4c680ae7683d12746930a5142e60bb3a4a725f00e2ade276a230e35d14d9e8625c537a980915ab4830a01eb04f83a3cc7cca32f2c83c62686548d1ecc102a2550fc9a20dd24ce94aa1c884d34883b11c87afb574f3cf9118f150828128b8af64e208d0a5b19126c46d35e5474c831f7b9847b827a4649d902ef0fde70c180438ed5780c847dcc025c1a4e1d012d011d99ce31e9691fe8f8d1e2c8513b024c0c47c74f38b9667f7d095170a8bee442ac7576e21e37e0fb9077acb055e6f6597413bde090dc51ce5677a0871e1a7064e712c2b99ac4cf50e9edb2b052f1c7af08da2446ada6ac41ae165445dfd10e1d5ca080f6a27b9662ce687e2c6c4d9e7d82324b80169a66340d3945ddef1b01a361a20774d32fe6a19774decb9078158c2780228ad251ee7934bfc35e42efb0c175eaa49eb66c5301e6e7898920867dd35cdae3478c820a1936e189c792093df8fadb5e64d4f3d47bd872034970ce909b820e2e3362f6ec627eee6dfb7939673e730b2e0906072406f3fc97216f4ff3ee4e10fecf5b3393da3d009fd6a06825a0dd037f9c97c6fc5ca281664d36786e6a8d16587e6e4474845568f1db3e04c300e0a63e83282603b0eefbb2180427ad485b3093790971c2808c6899ec8e2cf748d89f332c483f6657098d83db58f26eb8eb78fa115cf0daf60832a54f7dd91fb38b8ef15c9a4b5fb646067efeb0b856776ccaf33c9e44d51de7f6ca2e9bf2d09216cb51b188612f648475277183f0dec630b2943e336ddbdc911f1971bbf52dee44bd6db40be85c6f243b62fa1fb01b0908d9435262f4e9e7c1a1df8d854f9b23b8642ce45ed4f959f9f348156061c6048e302b809ad8a2fc9f14d1a7b1d1eec9fed3a2c8f773fc7d2dd26075a0b220861b70980020400f6407bbb876f71b484e1ab3d03e3d7037668eef476392a604b299d86b56aa0a43062107587fd7df2c0fc0501da602c55c7a0f3bc930b7445d75f103dc3e6b4fb2d1944c75f36d03a9c89d94f55d3a534d1dec5c4835e773e60896140d0d81bb887246362582b6450b0c4fc986398b01f113ecb28f6c13588a2854014f360da09ba6c327cd48b39eea8182cf4721c68f3c89b78637716e10b2afd6aa31dda183aeb3d6019c516466fb025232db3227c16e12f45972ed69891634c15a1c211ec82a4c215c9a02ed94b7fa77ad2edd090bf46ea1211ef8412f1049ffcb2d36862d8f6a737d57521afa72280774c1ace53bb0b2daeae1c9240324e7f3445335523758d0516f49eab528dd6ddb8dca7a28941a259a455908aef4eae570cfa0018d42a84b9c21db8e90d3791f83464b0643000b495f322ca1a6fcc2627053b35da2c03f02131a5a5c23378a647ee577aa4adb086ebbf6a73d528ff53fc22af1419721267f2e30848cec20866c6ab4cffdd9fdff31e10c5b780aa225e6fbb9218758bd59d232e167dd1d32202a4aa448a2bf4c26321660e81e44ce118d0eea2d08f919632b34aad5e9020bfd7a600e5973b322da24a3ce9631bb0d453180d4e219ce5438fc7a6b0f1587da20d23ecfdc69f35731a9f8c31642d9913cf0bc52fcb7db0e03a001487b5c2404f68ce8e74dfd022a707b37b72e2aabe62980edb828ed3f2566ba3a03d0a3df57e596dc5f35beeab809a2b31b3b729285f88038202132849d4d455325161b4e9e6b401cd41fa8226f2398121a6d1e67172a69167332d0ceece49041bd495f11765873f284df9130e0e40ee974c725fdda35872165a191259329eb081837573a95f47dc0de6907be07870b9cf7608dc38cd8fe1668df1f6941dd5301912fa3f90db8192d8782beff19c86c54b5a404e81452f70966f0fa1f87dbc715423f93181808d6319f78e8d814ba8902e3d8e4aef3c5caea4e9b1ff5510f7275ddfa82adf8edae19125ebc4690038fdf08bdfacae7b31ea55652ef2f6c57333eb5a8410994cec9f834d1c62d61e4ed039b8197db60d0166b8da4490e3c2cae7e5744619efc6e0aeb04c3bafcb914a8768d070e2c10f4787107062f7d9a87c662e14f9e6b398473598c7feb8e09dab36bd77a017599b90846f5de82ecd7b813bc27b819f03ee320b60fdc2c91c55e93bf7467a668853553e015b615b5cdd527935a6ea3553f41ba000660c4234e9de9a6fdf14d3b2d5f58f53d44d659e8b2ca604aeb066af66827f6a4ef614ed4927846c341cdfbdf5116130097d882c7ab614b6e0050409e0e0f711fb34266d03e114168f6d04a815d69b3f404277d17c134799fd368dc5eb1137d6e8bea6d0a86813d706f8c3e6d3001f50c9f7181a3f41ced387a4a7608719cd105c3dc084265f7277bfc139186bc744541d14884062382aec0a6a284df0f8f4ab8ceeb237e57dc9248b12c545237471282576e09c138ae0869198352e4774015a1c812f965dd22d4db10f5a78edb10a023fa657c89a1148e1bd42a40faf0872721f0b9755df5d30b8893249755889aa29561dbddec00ac0177480cbaa20170856f39ab73d1969c85624dc683b48afe322efab4c39f9a5f5b3d63062902adaf341d49d3bcfb98ca4e31df51694e975ec7838347e539002a14cade98567dc200ba250d52a92c4a7e9a79931262f4bf87d0bca492da6138d0da7c634e2b3657adc1a78d5c2689053bb2f65de3ca7606eb5190f6ee6b4e646b047a40caab0f94fbda5e5f916000de2fc5eee54cbf7cfcda2be2a1189aeaa601a2df3f1a98b52e3dd88ea6f1b2b8b0b5914f2bc23e6398830008a887d0e9f195607e7b13b613ae590ad424e654c06505740119b05f3beeaa3c6eb08ad5c7c153a45146822fb14be05fbc4d671ecd823136e71cfd56a34470d042d1575e3ce2f2d31246a1dafcb15049e8b6ac6de2621063123685033111417b54097469b18a91cc2a5140bdda9bf9850f4d464f8af0d1d04513986951d77f4464770c6131e006b52f5534029724b6559807c00ce3a3981e02420caec39fae05fd7feb8490fc18a8e553eee5ce5d2055e4c225ae12a6cbd668da6f8858c294bda786acc5ff46815123694e99c205a6c54d326097c8ca5c87c252f37a56abf72cd12d5df1a8d0f739bc4c1565e06f8278e233545e6bb014853fcca51a229b76d2a9f356cdd0ab55dd16fc5e18bfe470d62f549f95744d5b9ee95c1ea2658efbe2a632987ad4809c5a50d004739c58cb297af4b20ff3f8299bc7df4ba4b0a6c6f036a2eca6c5930903a4a1b5a535b30c988df0451014f32c277a54e6856a3db5e7dd76a184db387b54a8a27d314f020a087a9fb7e4a0028800a000a5051e571ff695cd59383f7d806abb1a32c6e42d41aa005d5d17fa36e298944ee4c91bd03b506a2067006bf03bf7a23e66e2f6ff7e763bff58ed781e909c7efd07199cc17df92ff4a4bb09ff87a1d98461dbf45a14cdfc2f5257e5f2d7bb3d845fbe2c62e94524a29a5937ecda2115083d10b4493753cd581e37d60d4028dec78f8914b0c8a38441fea0e4cfb7960f939b0e5525e52eeb0708ef78958e481a30f1107a8c1df81a396138e467cc9f988bfe07c0efcc5c7e3c05f7a7cfc89aa9c8c529c7b7d60588fec1fdebfb9b9b999335ffa9dab09a386408d4a5c7bfcfc37b32f3db2c66449c9ac73d639e7cc2929b9d9d5beb8ef1f9a3c67cdaecc295a0e77b300973cc7c8f33e35fdfd9b0dc9504a4ad943edb5cd52de582acd5a67ad15abb59a2a7d93cdfd39e79cd874e99ca65afaebe90a104d96729d209a9b6331d98507ec21468551e269eb0c2da5e27a52d94c863d8b1e11cf0e97ca15a9ec190cb344863ef17571c5128f888aeb1121c3f78c8adbd95cd20c83949fbda71e2f6987fbbe1f95143a83400a50ebf14a5c5280421d814334d4096a5b2a954a0de99be403b75ff4a2ba6a33a9bf0d4bc7a758b2942a30bf13baadce4fbebffe5d6d7be8f9d7cfeb2bceacc089e3c49ad6c72b1fac0ee33871384ea6c7d3125d32f581b5f47819e86a845a6badb5d65a6badb5d6faf4af5309f9fad83b95ced7d75ccff5f5534ea57d7d1ed7e354207cfd26ae877e7d284ef5c1d747c1f5ccaf1fc5a93cf8fa2a3c15a7427dfd2baec7bf76f0b5d65a6bad14a705269f21ae23e02137f84b0831de6098eb735c25f68925c5d3c2f4c296c597853e607eb8335ce48560236f318ec778e775b0ea2f9ce31f03e035ccf3163e7d104ce441c0243cc53a1e084efd07b8e727def13fb008ef012ee125e6f13938008fc247de31f6385800df0136e17be02f3efe6113f0fbc1f09523980a0fac420938ca0e8c420f86a28304ec73c23c3c389543851f87911130105df9c88a08200022a488006007879bec4b08198d3aef0199b2df4ad96f36f8b71ff8b720ffdbceff4624c86f2604f92d0916407e735a98f9f19b03038d1c138e09c7647aea7ae29bfe469590373de67aae37fd4795ce9b5e733dd69b3e1555da9b9ec7f55015086ffa26ae67bee9a144d5076f7a145c8f7cd347892a0fdef42ab81e7fd353892ad49bfe8aebe937fdfb89aa0edef4964392bde97b3824f84dafe390fc9b9e048724c89bde894302e44dcf0087e4c79b3e020e49ce9bde058704e74d5d7c6c81464c007a3f02945a0df96de610fefd7348866ca93878c8e7609cff81731e08fef14130907f1ce431fe0e4c8fc21dbce37e0f30ea03ec0108f883a778be8641780bd3d7c1da5fd87a2158e723bede07161202a6f84b083f0403d15508ef4a070861bb4b6cf670c8de1621f8461dfc51c7edbcd7708ac7edbc07a189db79ff81c4287880a3a8e076dea33095a8f3bef115b7f3be039c956cf27b0bffe8f13b44f27b9d202624c9ef4900828516f9bd931f66c0c8ef199083461af97d04dc08ef71b0162d32fcca39016cce8dfc5e86d4ca391136b726bf77c18df0de07cc6e079505833b3060cdfa9bccbc7fc3e2ffaeaffeef7a62493bb1db776c639662e5dbef617ec47922edcb77397b4949b4b8e565b57c38f39ee4bf527429b9fa14b2de8bb1bbbba38bed31facb3afeb5c17666a60594b2ead99454b69ef653dbd67bef5e5d21759d24c6a8954aa552594ad32ba9b8aeee6cbbaa6ca9c920d97a6769d9524b69d7cb5ad30a02c5bd1a4be6c169f14a8c365ff4db69576863e9311ee68e4fd36c55e251a61029d3df6452a6bf759a4c7f83ef5908b2668d9aec24caaef27284318b7c50897677c1ed48299940f95c4ffcf7de05b7139d9a1c7178ce3dc8c23bcacf035fd4b8ce50b4e874e69c88ef4b1f4ba592f5b6d29835ae025d51a5f7d9d9437726e737b55e2db0650a449329d47ca22fe96285d47bd5da6c4a2a3f29a57739beb5efbd976d262947b9f4f5b796f29ca4f296a58b4d2a97b20d4ab69994fa3e2595caefbd9a4a956e70e4b8a61cf80697ec5fd31f99a03cc150eecc658b16a8fdc0a4dc6f639710344ccaaea4247a811afc2dfe74893f4d2d4ccadb1dca271f2f92cb85734e6ccae791b24a6cb520a5fc4b5e57862a8272cdbd0c95158146e80fc910c28be558ef7c20cf8cd3e71894cefed819cdac440014dd8da70516aee4e9f6a19199437528772e88d43a26a94cdf6949c9cc9c496a495b262264773bef9b4875a36234b54d77c92a65dbfc40e3775aff8d6da19e6c69596e4cb611d28746aca7efe83bcdfa1beb35b3f956ccd48a62a16bf128356590be6ab226d3fbc01c38fe652edbb05c3ad9dcd40952568839b332821106c00db7665f6efe89011355effd603619183060de0fd4e013c229c1dd9c111614e8bd39651647f66ccd8640cd44b3ed591651b47d629c91462b5eb146139070ec7f4a9d37280ffde9c2da8aa96e7fff15a692ad528ac91ebbfbb1a0c4fa25aff42449bedc5148216b6a5d912bcaa62789b0a4256db6dd7a493b694b2b2e83a176144c50121b82c0649cbbc8edc40721e836b5f44941021b7810f5a06b284c17dadddd1d635004e22202c5a003c415bc99c1cd2289188080babc1ff75457dba4489633b85be7b64de0456411454ae444409c9adace61948518458abc9f2b784c25a7a922d9b36da6712fb7ac6bd3ee6e5d0b3aa572733fe5c92e7d059ee642cac6d72565c9642f22f69ded1286d9849fd3ea7bae6d956c6629b1a6ec491bca6c059b1dd4fa86976a4ce0464e81bbbbbb94d3dbdd5dba217b6614749771746dbfeed7affb5a7b8a625e70f22206042e307b4feda5bdd8007ecbf7def339a74729050675a674f799e4875c5bebaa3e43b21ce36e9ddbfac0869a1bca8187106890183224094d4acbd39211e5e9bc329b5a39a746b5d831a4badbfad378a1118975a1612504b8550e0c2fc40b22bcc0b0d40e973b19f7a125335fb7139fc812b7a9a54f054fa8c085a80b5d495a1cb5959ddbde1beea9a945a1b0e8862f1fecee860e9f6def28fa9d842f5c4a6b63503b472d4f7243ca238db38b3fa1ef9a7610cf1eb9785b5638bc9bd4ba78da8debe815ad386d1110b8a65414599a632fa577d2540e0e52f484a9cc38517b1b550507bce4744eeea069592668a33d74d5c5c29670dcb822ad2865aa0f25aaeee6c6f46b29e5c37a5dd7f536334411c698315209d814c39f358aec44ac37ffe5899fd3fcc9b724cd2ee59c36bb8c47d55a4b719e7fbabcbaf5d26f8fa5b99bb55829c330eb0138537b4f724e7f9cfd71eeac63449249ddddef75bf07e35014ca8d64a350deee900e390299a2a03089253810856814ca32298dcfee964a9eb4fd099cb2e24b4547ce2b346729a7fb7429a7f409e39887efd3cab6a26b5d8dc58aee31dea0d99f3ced535cca332f8f4dd07def13dba54ba9e138819fada0e526aa436d324608dfbbd9c9da53dc92e3fbdf37ee66ed09a2c9710b56440698bd27d9524234108dfce91ebc1f7c0fbecd8d9135d47c3be55885668126d3bf33834040c2dc163acad830d2dc3f5d4475a8ed512a793493d30a64ebb72cb4c7c79b6b632a659b66b32d85f14089aa1e19c6c3c32395daa1693afe4f18e64a27b8a1dc4eb62c961359bedbdc13596e4e8a2cdf73a720f7fbf477443650be20057f62eb7c4271b7bef6d67bb9ec359d2f883fcf9d758c62aa43b9bbc37a5b5a3577a3997e4f1306e8f7a49c626d0b2a7c8a6dfd6974b7ee7a594eee630242766ec79a99add2563ac722badd7d8a962519174ad4893415a3f4cfb11b17d929e7f4295af6a7384e56d0b2f48e41755185659a312ac1d12a3e162c2fb835945843b4ea7f41471b6d14b18aff828e358ea8c1aab1e4a0b17ae1a4811596ce8e781fb317e0334097ae35c73c4d1d73c7e431b1599af37d6c74606c9a59ad386e2eb5a156e9baaeabe50e1da71c3b327aa5fc7e61e405dff5eab3aff49ef5e893efbd92ad9745c1f0643b77fc8e6cce39e70db4674e47f527cc1246400d82b9923ca888ebc883b26377a171300e26aa1c8c83716a3de874e441407773a20c1f5ee14475a83ad5bd9274c09c88032c93df5f27ee7b11070cc3300c8b90085e018d144195514c82252731bb8dcd108f0e777323ea058c118dbd0cd43ec86ee4637337d2c16506d12db114eb27f50be7c9b47ea61045babbcb6cf3c779225388225388e28e99a4ece90ddade520269d85f8c5a373df0759fa2adf08052493f905a9f00a8a2f250b229b2046e09280686814b6cd0cb54ddf932422f9ef928ea02b578cfdcd7f185d0e0bef78970c88cba3dc4ce732ac6f1c7a016ffe50be378e63727b8371382c48d0fa5c07f3fa5e33c8152de4788825ae48be3233c48142982451df8e5fa1c29e25ad481ff50430266416b77b651c96d637a1588b89dbbbb633fd932f67443b9524a9fd293d3b1de843bcf0b2fe819b8416e810444d4021f9a2436ae926e21283c51e7474a29a59452a6d8f8b940dde26f5532ed6cab5a6e531f8e2f3ec23f6b04cc70e9bb6cdf5efc9c50fa90da2ad0721afd9204b2fd2e99e837cd5a30d1bfac7449c9c356607ca68cba1d6a65fa9d6d13c8f69bbea399b3598ddf27ebe95bd6b5c1f5fdd0ed8f4f5312075d9440d962a7c91f08bd6747426f45b5e26eeffe39a5379f7ccfe7048128294c51e1fdd807b4458508bf0a34f22e08508ae3e411006a25dcc40b8061df6f7d53ebefb41e109e534ed9ab101eb234290094047cca81da691598e3cf476557c122c1908caf74a4c8bdd7df0f39d8c9e787eb68905d2c34826142d8df7c9df80ad1c6f42864cf368ac4b4f5eac71876af08273c00b77bae652fbaa0fb40a994d0a1439f59bf3d39a98153a6bf51c9b24a9625a2769a94d25dbf852b9025f66b0259622bb7259dca39a56c282e96a54fe870747e5e7a6ea7bdc4e45aa293ad254e8c6cd19b9d626dc445e90d8e1cd7e6ebe7c07143af68aad17ac3abadcedac216a2766711be938e55b839dda9f5ee3ebf5eeeeeeede4d020dbce765d1ee54aa0b1a4c687c4fffd9ed31786cd8c4358b1ea52db3d432850d0f96150a647f2558d01171c742c41fbe94d4e9bfd7177519db707777144c07712bfec3c5a4cc36da85945488cc3b5fa079ba63148b5edcddbb1bf3a1a92da25bb6515f15183449d3cea1da5229c6f71e092cb03505e54a2fdd6def0ef7d4d49e4e2a1021b74e6e9cbb64b21c753df4061791ec449ab89df8436870dfcf47d4d4528a459de16e9d1f509a326920d04bf29182728102280d4d133300c59dda9c525a16062c975db2f2924f699921d78d86fb065cd330eeeeee0edd7d2846777777efeeeeee1f9ada2e526487149d529a711d6d215cd333d28c9439580d52da2f866863edeedd57d5d4463524bd5a5629a5743759666d29a594d275bf9596b77b620529dadd4ea97bf7c5e19e9ada0dd8c0ddc9f79cfb86deedee3d34b54848473f3e948486a41cff254555344aa23fe31b397e34b2a251348a46aee99b420a25c27861f8100f40980f94ba7bd380517bbb440c50695def3d08dfb32e4b4afa3627f710abb2535248b4b097d533c33b0d95427bf74c028ec99943ef6201a1fc2c60447ec151480455d6cbcc16e546b246c331768a21218dcd71c84518068b207cf437c76186f9b9efb71926c72926c7774d8b8a725b475ed896534dbfb4a1a98d81bb93c0a5bb101b35b74bd7edefbadba571483140726964110e3452231d41c1c5ddddddbdbbbbbb3b03dd461c69ddeeeedecd4453db3910d39dca507677371ac7169d56654ab2c5542fdbf343c962f934152fd92525f09b5a91b303926ad1c652bc92fd22c3ded26d144c25fbb26449ebe5a42e5d1e41bbdbfa94544a7fdab9ed079adad389864b8876770b79172e405cba0c81a043534b1f15655cc0b9d0168a42f3b5cf86a2796868a396e259c1f53e504ba5784ca5d791d549df722ee7949d79d2d5ad84fb05c4830d0deded9c8442a6eabdae95c1542ae5724e8f37e831fd0385dfcd95199334269f4270c2dabbe8157181efe815a1d9ee8da271d001a357f48aa210146e75bf1ca2b5bf944dbb7be4b672f73fa74af58db1a6a2958a3c9c4a01934a54d90c0249cf693a1e7c96090430cc9a252798d2d9a846d12bacce9a76395d877a0df170155d434868700d5d4526335c1851c8700d5d433ab87453792ce89c19c4bc8d94ca57c217d823121f968ac040ed9548afddbd64eb7577efbe594a7bb7f964ff766ff7768f724af7292fd0d416b591d4ddddddeeeeee404386b40886bab19e534e0d4b12c3bd57e544538b613d82f7de7bef5d57939b0d1f316a01a3c53d68726e07e638a1166a6f77d320b47099e2d4a8c93f4a4829e5f476777797b2a7901f9e37dcbd3e8daafbf54f397064dba5c60d7ea7e37fb173260b25d7bfd97eca31672a757d5a33776d9db3b4682a951dd46209fa966bfb75bfeefede520409a2f929f3e3babbbbdbddddddad177b5d531e9e29ac9cd4f2e26e9ddb7aa0a9cd5921e7c8d16a4b506406aea34136d28a0ca3bb73f054606b143ad34d773965dc414d4fd08410c26e29eda4ddf65e15b87c81a32e3547e33aaad1c9c535c5b00bf40edd7d448da8d1909a2f52d382103a98428f2c61ec347f0fb2ffeb2734d3ecdd8e7777a3b2bb9c534b8d200727324e276743777777b7bbbbbbfbe5e19e9ada2347d2788eba5b57b54d78a8b88e7e714dbb3740a90b795e9566384b5e9ef3a1fd892db77359c1ee34b7b24f20f79b7ff9f46e9374f7eeee6e7b83b8a7a61685ea183414aa7bd3ae6f7f4d8dbba172f4949c17beb0f48562d49afb1e8a9bce51286d084dd1543f91923e5db6498f257bcd0ef2994aadb58881103a24a32435dc4bc49cfe3ed0881abd21facc83308babda1294232d8052b2b08bda82453c3af40dd018218ef491ccc4b4228d1f55d57ea7e128408b4e0dcaf7de7b0db17d39d4bcd3690d05f9a9e89e753b0fe5913bd8d89b9466a41ccac997479ad7a5088c14924236898618dafbcc90a5ada67b6aa7dc44ad69f7e476e2ff38e244eded539fe219d3b248104107f7b8b1b2bf4b0628f7de7b3d8b13f9ba5e5bcfe6c809189e784f0471e4babbdbdd7dda0ed8eb9a4aa9696a02ee7de0c440bf7287adfc81eeca9d0b4014c605c4356b7c0149569e4539dfa593ab8db099b89e05a90062d8a4bb6ce79cb362ffe6a24e7c0ec3dc7b598c315613d5a1f6d407a95b1a55f48b8b3ab056f9d8fd0b6fd481b4567bdfad30ebbe56d3bdd7f5b8dcc39923ba3873c4189f132567cb39baf29693713c22ef73dec31e52a287991a08e5f73c666cf0437e4f00336c9c91df8623bfaf64ac912f1c19f5391bcc0f3ad5009e306206371802056b78b17a7f39953b43c5156bb8b12687232962a82d7c159a9f95377e7214b7005085a21255d6f7bf9fa8a28fe5dc1344b506a98559caccad6f5ffec4897f7dccb01c111fcb97322cefe7c238ee4b5470dc973ecb2a0d8ebb3e01d65feffebabe9461890225ea20459dab49d4e9f74c5c6e01733befe7f53c8e93000be324e07aebaf8cc697592aeafc40e869ac5782ff8623cfdfe07d449c73cebde79951675a59aa0c8eb436eaf35956164e6559f1e0c80ce70016a57f65581e8b96659565455140dceb76fc6fdc8e3fd4f147cd07a3142d44d5290735e462d1faf02003173a9df79d3b422f2accaeab1b3a934452151c6081a5d27d6477c60b1b19cbce8c1a5be40dcb9b8582e8e78c7c931dd18f517493def72a22ee66a111f8ec9a348a2ef004114cd86085aa8621ce1883c68b254ab01a235b1104091e29c3470d81aa5ec149a5ffc8ce0c0ec8a86146571133336e6841243b336e74c938b233a38613794369f192eee583647454344414068cd0e31274e5fd60f10051a24e8d787347f19b44953f84ed5913326b845124031990b8c16ae3c936530cf185193c900143042b88032486b608f363c60f3aacb6cf59b850f18608908688410a3456ab37bc18a38b266c28b3811524334412600c89a0888d150cf2a689e100a2325eb0c61535445143511849c4004d15526c31830dabcd211de960011a617e8028824c19ab0a4696203c20460e5904edb04687d5f682cee4ed75c9c2546186173f685166cb6a7b4266f2f6c238b9c28836c03081e6080dacb64754e6c7cfcf18309049620a2156db3bcaf005797b48954c86df24aab27c800925c480c24c1107b458f1d86254060e4e3003312658412a8678e2270742695a60c56a49110d628ad00248e86865654c193768e9820a1370b19ae20a1a62e0c418427059c1ca995166043f379001c3161f563029fb40d48bd03213b9b45103110483c8ccd10a6237068c551544618c80c8dc80b4aa6d237e310cb100ccaaba8538b5c42a622c908a35364862f5826b595d38c2fbeaa46bc30a208884a80e879eabd5d29fa038e48bbb412bbc0ad763c5532e6cb65d3232db30316ab60141eadfc2f5c4acd1f8ee594f0593fe6de17aa4fd0a9362d24f52501a98f413556dc5d381cf0510192e518ca046fa4094300d44b3412b327c684515aea77e671be5c2cab64b26661b2606cd36205ce4f71b44b259cdf06de176deabbf0179d1f4d24406b81eff474d45695e9aa0a2a88294defb8a5ed18b416724cda7f4de886140f2fc0d48de60d216798b69b22a6a70239a9844825b7f8b676468e37afc9296741a25a4fde376ccdc0754b3a745080aaecd3f1675a0cd2c035c4fcd36abadbcc534195ac100b7f3bec9e4f76d83a6c22c3fd93f8b13b1bf059fec4ab014ef479223900792e10349d2a60cbf856bcaf04d417275d5f96fce39e71ac30c318efbed0518327c971de3b8cc4996ecee7d607c8759786bb21487f3044986df028e1324193e12b7263f379ba8b45ad61d11e3d27805099269c642904cbf5ed6b91e5f72330b2f293ffd69dd2be1bd12200c70a3d24dde36d600fed7c7be4aa513fc9364577ae2bfc11c93649ab19024d3afd7ba77c1d82609c06c45baecc919f938b156685fc900f265572a9d20df26cb8c89cdfb2cf33d266c9cdbfab3299dce1c33d7ae07fe7bdddd2b44e860032ab41dbbbdaf646f3135f067e3663bc618317b4fde30a6798f950401f22307c7470f8cc70e1da71c386eae8da964eb65d129dd8edb81ff25be0f843083f085970542780682e06e34dbfbfd11fa463d76b7b7378cd008f7dc7329fde56f56764b29df5bd3d2bdf777df62b2d396d38f75771bf2bad9dc4072ff7e66fd1e84103ef9febd77ca2eeb6c841f30ec4510638cf1854a25c7eb247d0d42dede776731c887524a69c9d8decbf7f7f2e14b912fb3ee7e7befdfc333d5651b2c7aaf4475dc1f9807bfa38d90df9bef74de5012fa9bfff5148ab9d6b77346aeccddfcf956e688b267f08ae7be48d117124201c0702175506be870954e4a6548e99cdddddd947e9d3d7bf66c3a9b52f7d9eeeeb3ddddfd7990bb719c3c1c27fd56a659e67ef832fade7b1fdf416d8adc401010d432010d589c49c2456b2cd1d5e09ad21b2a84b9f37bae4c92bbbbbb1dc25ed73495a2410e5d06bafb737777f8b295489feeee3da59472beeb708b3af5254d4429a57419e1ebd9289435833ba4d4bbdb1d8913b5f77422e2aa3e5aaea35603f6baa6a91408e89cd3c82d8b5a9466496d286ac91303a30ea8c46dda83d6a101000000000000c3150000180c08048201a17844aeca99dc1e14800e6b883a745834160ca34910e3288a829031c618021000001191999ada2600041b221235a3c5aa0a58880e5e1881453fbbea4c1c3034b8938adaa0660be3d8e855e4c473c57ce0d0618f5c5b60fcf56d321a0c1a2625a56f14951f1a2821a06d07e22b402d75c76c59c5675342449cca32655cc208e27b663ee6bfeb3ab1559d51f0a128142fd44a26402c7cb4d80ea0a61f55819a53d34d0253876c7841632c83787aa1b643301c3c43e8d63539baa563c6e3105ef54686d8c265276df281c518537adc57c3411342634dcc84cba1a503bcc2d044214f3245400dc9d430f4b46074a337accf28ca8667dbf38f3a901d9a145ac7b011438f010d16f1e126bd20ad816d8d998f01196a599a8eeedea96e7ac04e8048c11720690a950e7647880617aea65793c38feb4c20bed3d5f6513f64235770b953a43571c31e4324ef0b07b7a329c7c11254128f373b4cb398f80467cd4a2946174ecfc1a0d39b757c20cae6ae6dd0f88a23091d4d66bb0586add8fe5987cc3b25d16e2f9e77f691515c2e9ff341287fd126291b44ed28fbae7330d6fbf5cb8079095af20217886820c23dc08b064aa8a61b7d346f453978149682820e392bab056c0f100169ef0514538e3a59200087b556cab5532ba368631d0b948e05cab7d6ceca8d795327c4f8ecad8c0f10bf5c5cdd18bfeeb3372bc607790576744a8f6cb7c4a426aafcc6e21a2535fc17fb28cf6b013d7b33cb7e021a13375fb95677ea6be865ffade1d7325f38c1008f42fbc0b0f58446bd713dc24a35e5f748cda015d55fa513258bdce197ddf0a376993057a10ee16fb8427e85a247e1a9ba0bda9b008a7c876ce7949bf0cb090cb05a5e29c2afac75fd95bda6ed1dad7fafce7e5decbdd8a40581201ef74615920f082fc1485a6aa48c09906aa65320e66e112e4052fcc6e324e2944233fddea676b360a3ce16f4ea3f81226f567ccd67d8d0238c62c92dc2ddab6885f9d627712b67b59844294d6a7ac02afbfd775acaf4968bde05538a25bf66cc6f21fb7328ac29987eee146e0e4ed467dd429334a4aa44d6fed5575a64845802eefe372c38af3b73f18af0d4579c99ee27bb4c21902f10d2468fad00f91dde27b39584bad2587e210a91e890ad522f65781dfa5a3fd4bb8f16bc2a14b3237372848c3e113318b847af062c1b9f83085ab86d0a167f45c586c5456c4859138aac8c3e342af7630487ab43517bc8cd8f4afc4fd0985b837b75f3a824608a36c383f66462f7cc2aa5ea3dfaab2cb08e1e0ade2f06f805fab66aae279865181b83f6091776105f86ad7299ebf90212c1fd383a21efd1d8bd6b607081730be8e9513f2eac788a8d3dc66870816acaafba820fe4291059f0fd3178097b20edbd66a75aaf80db8e31fb8426c6078fa237255289a61c2b9d29df422708a8e2eaa9a2cc716389ba73e863ab58e747ec3afbe55eede396c7b7998dea2d320121c212da4f610c0e3613910c4468b1bc0685d1bdaad87a4259b53ffaa9ad9abcc97780154b8353081584b4c3d82b375a015464b7910f029b0216c516db83a0527976cd1019177056574781e8a33f481dae5dd2f083b91219bf0dd99e09ccff471fc1de6fb5aadcd94a8f37fd1005c9ca9931de12a1bde90443539c6be10b57892ddc484893c2b3708204b34a1c9009c5269bf53a43c5730de57b63d9c98f7c6c79b256bf9403105cadaa5ee981f4000067a3aacc41633476fc5379d493362de7003537b43623efa1479a18372ef4fcc9b97fc89e92e2e6275224ea17bdb315595b0a430e243ff0af68466bdb59e50dbd893a86e3207dd5d7e04f0d56350ecb6c63d59b5c8bfd60fa02235e2f5285e8e5257fe6b5003f2fcd63ba37919fd270be12b9581c2bc3e5d7fe8edfeffa0f57fa72c3722b4bdf05623968c83f60eb1d3c841448c5642d23cb3dccad03a083861daf3417e727b00d4367f0f8de176200cce03fa6dc5d5644af6f12fef76adfa2c7d8f4fe8d61a7e10b97b6a63c1a7e84b0029afdb86427fea69aab5f8fcb6afef9c4ff46bd39fbf653a2edf5ce4044ec37ae22c721ee38dcad648bd9b5c55d9afb3b66ba4802ad1684f66efedca0f47453968a5b15a1952d4ff8b829e6e61ed4c5be31754bfcbbbbe6ea9f7a88b8bf7578fbfea8c512e8ff48275b37796f95a95c8660eadd5a2cfbe3d17414cc1719a2a2c96dae7759208e9ec899e356a1dedbe7f15b47e0eec6d261eb4673f17a4950384ecd238bc8427e1141a59e8984c5149e871177c84aba1966fdb42ddd5bc130889184aab17eab0222f4d14e0587eb9ab49095b259eedf89b16fe123253f726c168248d19e679f29351d36e1d885b8db035735db34c77b76b9a869a3242af0a3738c82f119a767d7fb36a9d8de81fb2fc5f8e316cdf202944994f03ffc991907881300e223a0b46254b028a75cbceeef4859cea0f4aaa03cb361d4255c43b1a819b5443351581a08a09e22b1d741ba719b79d86e8fb46c6c513c77c393b78c442a61cc9991e102abf8c6f0c3f9591797d01ca7df7a4fcfa9a6e46082f24fa3d212ff7cf1e30d8c3b3fa482fcc33f11ac8781e085b1a5b5183bb3fa592f0d2826a429630544e8a1fa2337ed2742a20667c513eab48f10b6345266a7e8ef660fa591d9ef3d3917e6a36a81ff1319b7962784e9e236cba1c03a4766715b0a3debf0643c850226e85b1b0d37a0288374d32926be1c594acc7b210a2a45d861474a321dd6ed2d62fbd18555e98d825c8d38d3d1c30b39feb43f27aa42c609f920cc3f7d673335ab63b1119f599bb4eee6acb6c28594f505647ba65f44ff9048c2586651cd84533437782ef3ded62e0f1ef3be07b04e6c86663d9a022f2a0e534f703de24336471092d8677572fa4709c52af1000bf46e8b64dde2ec86e4a67f1b4d9a48f8c1f49e60c786b09a9272dfe60fc0b2da5980c221866aa32a51d2bed7b71a83313e3c5263a5e4d72c7e28f001825cf62a476d3f2a6c0581894b332a3ec8fad915ed3c958232761ac29243ecf7bd0fdbb0b2518f11fc29369e71bf95539587590cccf4d065a6dd449f959b54fc5543c95dc6a49e2da44e02d5d3b25ffeb3512ff8ee47cc60f026110c9a7fed058d0db387e3526b650934f362bad403f83fe361d177f7218535451dfb3992f21a833791b25160a0195da2b272bf47d22be1adcff0f967685fe604a964edb2214beeecedf482a2dd288473603a01f7f04ac0175519afa2c495b40be5d8997b694e99c7b178cfef3a8a3ecffbbb8e95fc8daa03a6519113bca32e71f31e1ee5d7f78682cd7b1bb8eea06226f8ec4358c94beb0935112315fce00df25f69085a3889fc8fa05810f08fd022d2ef2da49a1b44eae3b217305fabc83e04d03e7d45f51b1778f5e9f341acb1493aecd0577b653b7d951a034c53ab02adcc065010dd3782dd9c96b853a9fa169d5c6af60d7faf6e94f3667dedf8593a1ec6671b7f2fab11f309958b8b8befccf69de535d56a31e8c52d279093979840a3bb249243c6399baad695e738168b65ac941146383afd889c4d50caef05356b6a2f8484c033e2968b1166a93ccd38ffcb2f1e6db055157f80d21ad5da293c746b35de5e621c115df620400017f7e3336eeecadfc6f2412694550b1568307db17ecf309e63ad0a19f92a5806d4cb5e09ca0500d34be9f5bfbcd0ad3ec5d2c9cc2ea99aa2ea816d5206bec585b2447623d6a4d2966b5441a7fdbd563cf47594001a8932bd3002ef1a3e90e4a7953da739cc3e4b44318d658b649e14801b05aad7f3591b497879eefffc6491c42bb15d2f90dcc72b1e7dda04d88351ebe291980ab07a0613e83b11e97efafe146692600eee656dd76f4790c9496362bb24288bbfe812b01bcdf6b6557ef8efdc41b17bde58d6d95e6dcf0baeba38b886899717ee3d3896ed2e70cd49b4e41702f242e132454762b40a9dab4eb20d73456a86948f68a78e5c9bfcb5d0857c2a33d7cde3f8378486cced7220bafb3a17f499cb8ac3ad000227f585b78cff4498e835adea26dfaa19bdd113cce6a06a96d27cfac6e002ca6b22c0d5dfd3fdbc729193271807a8aa0f237777e8bd07916ee935ca519f6302679b19640260e63e651ffbae75c0ab4bc24915caca4a9db2b4deed4b60a7bc634eea058043ab37add2fd7c322e741d0baa6090dd6eeb0090ec0e1079861d6186009c022e9d1e1e45c04e990995a0766d5b39ec11c863a11c92b1b9670c2249a94757753677fa40640be95984dad6703424d58f99d11facdd4f5403555e23c2edea489d8ee53f10bca469a1c2203f770d5a159de290a28f4d344380d36aa9d4b423ed5e1a7c1b1f81509b1a875e1f437baef7cd8c7004df4fbd07d221d19a68ef70384a44f2399e8ba1c9f595239ee28cd58b7918d04a47ce1ea3c93b450f26c09c8f7652d4b432fdd033c6455eab91a6f7d6071d3050a005e97ddd258e02bdc08b3027170b0fdce69ddf0b77404bcf2cd21fd8f683212ddee715bf2648d1e1e848172dadc883ca92fd52fac6fca846f9d43149465c6236a2a1be7df069b513d6244e704413e366843ae774e08dd9fd4cc0eaaed0551cbd4e4083888f1a14518ed534e20f500fbfd261ba67bc45e0b8149f3d31c94e5f7428c1f8efc05a0ee5c8fbb40f42c2381c3afbf050fddf36eb455bae51c280947c09bbf26c44f8d7389fecc13a0f5771c54e3c70e017d4093a895d48c211e5465d1b58c57c000245beae7a713b174760f776b44ad56d85df9d3b65a0fd53369ce8fbd95b95e3a48a4e1e26a65589f5cc6d1e1419b85d20603a2242363876fa26d329863667d81a1d9e4ff6dc1963b1d6802a61412423d1da743e58fa3fec7adb1f95075fde073f7a9c16aa2b4078a72765cae053d73dafc56547505fa7af436ae17d671d898726b69d68024114740f199ac12589d0587b49a5c77e039b2915567f6b569731c3a8fbae637ecb08772f743deef71b97d1ed189b30d8c626828f6bb1162cecc8b387041fd0ecf3b1a93f1e1224fda5a97917af047e0081bcba779b04a12db994b61753054e00290d589212f8e8697d9f9abe1658a1c267a50170eee3a3767fc50033029e3059fc90c8c66b4b52e421cedc51187aa296ac7d0960e88e1c14b8496e413f445003e67da841130e5a6a4f1fe538b458200919ecdc85b343eae3cd6fe844bcb08c73f6ef78e81bd29541131e5dbf0bb4540465e3608e1620399ee4916dde98c942834bcb4a288e26dc774a0ab92bc8823a6d7244e583e97ed2210932ad0d7a2489ffeb3c5c3f3e136eb632958e863372a1873b15fdf2fae1312aec3a4dd57a0d8e03c4a9e8bfc770a2a1c675f4c4818473b096189eedaeef1aa558ffb408d52afdd024aa6621bc45eb5d5b2f212bae0092c55ff3c0326b4561ef3230ba7a291307c8969103f8e03f01bd9c698df40ec246a2aeca60e662466db9f034126ff8d114f62a68b4d3f364dc8434126f740688c3b7ddc4b599cef4caba7dc4a04ed7a82286ec32b52775e5a0390e2e16b53636f559a9f768746728076393be29a069f4124d2902180c871f79cf51e2076072e10da270002a9f6d8b2af0f899a8023b45b69505095e6227bb5a4a9b19d928b4c26f0b6bc437c47117c9484a2d447ed22822279fd005f1c016ed4fb1190d5a1341e7e3f3b87af1047c617f2ec0e5cc618f6b6d64f9638028e2eee6fd7674120bcc5b2189bd63b417f2b1e73bdced3b66edc5a05444c1225d0d14d77549f895ab4fec17254e432b6a3ef11ceb297cf425a480919439eb549c772e50ae5e7c1f6779588a69a4820e01c82f5183a08b07d33a84225e8d87c9d03a8a05c55c8b056076c114d98776a72f093eeb329a8d5cadfa9f689519a11f9235963079d5ad302673854dc080244fd4b230fb1c3f1c0a863ca114054b99e9031b61d394c7807b80b2102a312b0e3622f04b684bf63201f78472fb61ad3d674bb4e9c77fa0daed77e3688acfc9910e9d717e217a22ee80fad728aa459160c094a7704e0579b34440b5a10ae126d3342e5355507d9634d894b17a104716474489ad0fb24f10ef2d29ffea4142bc61cb968451a591416188d425d5356d577708c3a6024048bb8acb6462209084b91411c10c7ba824ebc53c2263e764cf2d54eca410ee046acb0709f864c4d940620505b5f286c43d918484b2c03ebf0c0e2026820d370580e71a1c0a7606dc1bc002c3353686d3d5f7996727ab31b6fc6187a572581122ce3886ccd63c5b00c72f71129ca7aa40693bad3482af223cf95006ac41af2c4515dcaac68b58a5ca0c61517cc602a03c0770991d0666148146ee6b90d0fbd37dc5602f50df40d1f8b16935242961f350bc69c64411f2bedc0011af34fbf4b7a9f46f683a2a265acce32de46c1e91ef17c005158edbd485668412cef2852e075bb3d75ba1efcd76051d70fc26f85dad6d1685d14283a32504510162ae2da79426b27dff05b5357337c385f11aaf7dd5fe1a2a8e79cf006182d60c04d4fe766300046d351bcefc800165b3f72b93e91b679406ebdb18087a05344c6ed395f2bd920715505aa2a2a6a2ed30fc4540d157cd1d1ed63140248713a02d9b6d40c961fd32329345c50e6e588b9b269c1967e14e1f7c3f51497e075395164183ba9256d12a9696a18a6ca92046aba434a37d81c4e43ce17c59bbebfd074d43b4d41cd1d10863ca61ae8540a970d8fa2e10fb5233f261f6433132a7381993fa8107145b58c6aee611b2e18b3129beccd2ed612d2a38819090ad025766674a95d8376bcd57b17bbfc6b639bf3b08b94afcace06b65ac159bac6a7ed9ad532da73124872ec9a728fbcbce09874802417fd1fb2032888e7b201050322891bb72a2a81ed2dfe4e5803401a1285160aab5a9b8dde0f6146c0092cd0ac89af688b9ca41008f652c278a4fb7f83a071aec58f9824c2f468cc03739950b17c8cd1c5f1f1546b81e8ef8cc2b3972df74d42a1c2003301c9f97b1761f881c877377eaae1e39580445a4e88daaca85dc528bb110e87811a520f12e91c0ad2e4cbeaddba298bad8b5c139b6adfa0fdba0187df483f10e9cbf2d008304bf047cb6521d6e74e4e6b5b129206b1350b0f341d00db41cb75895ac2a172b0088a999ac0fb33a0af016ec75b19428bd57abcb2942835f86845a77ab0c41d0bafa11d590ab9cf5e6a5f5caec8e4fbbcf20d0cf3b23b7b36cc206a0807e43929cc00e3d43da4fd117ed390ad684865c329f60fd294a42811bf5f41cd24a91749373d5cd0d51162af40a6d4839d4e738be5050cc9c975a784369f9b07a4f05ac846ed0173df674f7e301ce6bad20dd181cfad07577f088c22e0b93e478dec20e183863a2cfe38567d75dad936ba855d5f5db7160fe93b4b93dfa469df4624ae7e88549e5dd1b38f426236e4e5a076fc6e964cc07ef89f1959a081dbdfb24176dd55bf318f8ea9c2101c6fe0617f85a696e888e348fe3f93a4a35cf1306f47e118b7ad84769ec93348ae8681613454c927d63feb6ebabaee7d098d49edd45325f3f54e9e63b17565f7e46ba15e259a1d73053d6eb6eb1890ba227bec69c1ee0aa7c37fdac29c78764a922b23a82807d9a828ad315f7e5042a566c18c2b358736a7e510d34f172e78b0f71413746705498ed773ad27c540ef83bd4d40af77e368f9a776b6e14a2df5bd29d04a2f58082a19360841190a31624868149d53141c0deb61c5436c7ac9322a2b1b485dcd29b6f1f5432e634c777ba19a2b260066d592c9e25fdedd521cf10100955c06f31d5c94b29ca23fe02d1a8172da03fa87966db528fb1753b0208c53d2a2058723f2aa1855a1b772df059a0a7b9ead5a528c3586b1728252a219455bde5bc809e1cd14c5670c4e81be918ccfdeb2c53b1769ea7472f15fea700d005d30c3274817b95ed88a1d5bca09eec02d9498cac4d28e83bb40fe5958cfcb0d4fbaebbd737511a92ad7f3fe5fdfa9d01fe68d891540b9865eb9da4c2f8c26af1b7c89506d36f4ab8d36d2ec8c97de87b86257ac059293f41de7358f9c519e31c3c5e75b0d14fde21e30e42006e3732eee95905dcba4cb0c87b67f5010a54d4ebc5c9e2cb3f6e8ae8b45619273f5f571914b9c70d800aa7c308bc69eee30b54137f77e157eb63181607a210a1ef25d48f80a9e756d7ddcea421746cf8bc6169a52e3d6110de70914deab5bdd3d4fb3c06c44fb2a1701cee5a9bd84a57270442cfbb75a2754551f65f36648c1f9b486c32e27ba22a10ee190771eaca71568104e4e2c21ec785c1ed9a495e2fd458944b54e71513141be398f8089fda78a200add6539f859b8de2b993758085aae726caa9059b362d6b5a319883fde00dd312e368542b5d9175465aa9dc402ab85dc67877bd6c904ee3286beee05ad460e2dfe0063e07077c8a1962552002451b08e8500e9e2ba5123841524fda962fd44452071579eb18a4c200aaa756ada8f5924ce586aae486996de89242e09f36a924d4b098d4c09e2e7698a6e859e58f31d06baaa96a576cf8986410b12a0e1da980c84f25093fc53332af8b1fabf77afcb81dd66b025b4fa665a777dfc37b81d1eefbc4722918e632502b79dd6a9fdc29b07b12810288e3749a633d003342504b229bdc84786876609e143d922a9fa89fb6d8087df79efb6a688a9c415aa494f055ff3d003614286ba94deb82bf65066bf8a898c2f2d55e7b0c96c7a4f4407f3e1601e6397521619f02f80a04ec786eda60dbdca875713a5741510d829c8b874e76e95248ab000bb5f5473868d50c8854e234e5451f3bac2d52083d48296414f9c5238a783d433bc35181f3eea76451a450010b1214adebbac8999042837da3c221d6057b702a7ec687e4861e66232d707fbafa5f7082560a12b79cd00ac6ea609bb95a8e075fd260babb25738142af8bbeb5f7c9c277047ab11fa354632655fd835c09cf5ffc8059802cb6931aab55b54f53d8a15713a0ccaf026b3f29948d9afcce2110d772e314992074127cb3271cbe466e9bc274d5161f6baa57d5ac8674460614abbe492aed99b5ac5913136e21c8ed8a2c5bababeaab4f79dab1fa36a5ff6761a8c14a1294b18acd5369cb04f2bbf85d224531203716336273f725010b8db04786e46a2b8c9104b81a3d743cd666c26876490d2b80ae6c952dedd70b058319f4f26d8232ff8daca727bcaffc633255fc9c171838107f91ac6afcf6dd4d63399f0353bcf01fd1c218eeb9c3eaa99898ac1758ac1a57cd4720001de2499d848feb1a5ba3c9e70781503b5dc58eb7be3c10ad4c428e9aed0bf1912d677a11be7d627f0c51d46ebe95a1491c8281129b12bcc75fdb3656335996db433c2cea16bbe10455da7a5acdab8d939e9904c60b2dd5d6b537a962bc0ba0df0d91394f3c30d7881c7f7d2677603ce2b08698cce196b9a2403a33f67875a35d1cd7a34340dd11ef84f03e8d4ea1317a622889931820e0e68eae844b3ab1ea10d66443e68dc0fee8b3ac4e13c5d452fbede87937c43164963d2ac6a5689079daf2549351824118a7ea0a255b82e3c37efa0e6768d50a0846f8d093a4fe9bb1b1475d107e79b6a8332c10bca8dfbbe7e51f5474892b3f01dde626dbf829833c274fd28a2ee9fd3741ac031fb083403af3982293c117f8ba0c90fdb3b7ec80b0b72264cef0fd161bb097a3887c3a5b544da5ff9b5285a249f81945502b995a02af223e0e716aa2881459e15d4081535778ba2eb17db6089b8197cc3341d005eab06301a8171f10cb9cec95376ce782567e432acb7b0d61b695b7c47d3bbfd298111590b3d62330568c5bde24e338814e0df86840ccdcdbb716a027548a3d3aaa766a468dd3455b3872bdd12a1690c1871528770422b49ef8569c37dc6e04cd8e0a947d0197f95263d83180d73398b4912cc523ec18687584593591153e54a091c92b66db8eaafcfca2097a7c53ed4c5ca4817387ae1ce1c75d0db34f7820e32981848dbe69a236d44c549dec7a0e1e7cf8e086178036e426a6042b86ccc2f339e85cf18e28e0d3b85961a9a8522d573e1caa9a850f984607c450435b804980c22721e2d8d3a5f1e521154199460177dae462436b5a5c1194fcd6cf5a377d08cb4608792a334c09f1f6627ccccfa2bc2c8a0f2821b5a197032beb73ee3f09ca2e771e8bc41441a33a799482724cf8d14ae98144f7c2ec4a71fc6a00d8e3da19d52c80156a65f49414546dbea021a23397cf4662704dcbb3c0b82ee0b06afd3254ebbde56b7c72f05c882ca62898068d3b0b0c6b41a27dc5645da4d2179b45be2438265fcc331f90acab50d42f3d5a3864ccc5b95db164e66a2f7d509b0e93a58dc0280c7b45fd386adf41530b961b43cd007209ba03a0ce9daeab83d98562609bde9b178f8527c948df20a1468c6dde43d94ec55c437064fa053f08d2120e00e7aee21cf520ff063b8c28f8766dae6497e329124c852d63f1aeac26d2ed580eae5527e4d105358a7d0c030f82e7ce3495ff49bf5f4c13b3eda45fc83d34d2d6976f0d4440ba867ca848043403978d4fbd44ec7ebecf66c58f7afa6ed27298ebc9d012a0c007c311dcdca3be5c0f14ac9431e1b2566b59f860a2221caa07966f3232a6e629f81284b3e1cbb4838205555c3e1f42b301b9446625583ff6532ef89d0dad73490c60e3361f7b70440d3c7904c9ac699f3bae346cc818b6b9a638366bccc711d1c1dd3b837c36f670bbd09810a01f44c740f078001f46373b5c2c05cfb95558ad1e0f106945e3ee4044ef4dac5b8e319330c36309f3882080a10a3b41c27f6a5a7fd7622c3140b218828c44b58d30c8ce6a74c65156ac88f3e29fbf08132e0f1f970d0e62b1196356feca6ec635d6838024518659a114a0200b57ef315d65a4d697eeae9a0b095716073d8e363c12365cf52f8eab7ea10658a1f22827c1d854b30b84f83e8349f223f9e2785c8a1709778c95fdb012946ab2c6a11ce62cd5a4bb61a716158582c877aa9a5b5dcd4304d698d581ca404c0fdc09da00fa86b931d0d2212aa60b4607ed6232d6cb94704312f77170029cb9db2853c60f42d9ecb7b86501aeb5b0ed6e2f44c2f1530cd7a868373299a3f13d2b2f3ef8d378882b83b113cc60f9382fe62278f6381c1c4443ab31573699abe3ce908265183f96a974e0b7188d7382e32ab20ccbe48715c0c30d314b9b6b29a6b571b257c7eb5e0ac95d993bc82889da0aecbfcf6b947533d526ec1fb4287bf26f5ee37e6c9427467f5e50b8d1ce09b0ff08f772a2528403d0224750836bf488bc73d3f7453e33da93cda2b5e78e28e1d002e6139d68970f3c91ddef08e779ebd41df43e63487786eabed844257f4386886179bef9a7c8bdc1a5275cbf1dc5dd48b850f14cd2fed8dfb5d6a41d6fd7becc582db6b5d6dbdeda0f1472719acb0eb8eea12c757446a9c2cc9263f4e4da9c5a6aeeada6b2de012537c0a92dd6b946a86268536bdbcda2fd968042c44c4fb7bd45fd95fd61e3c310945488b39a890ba371e13165041ca86a9c1616ca4a51e6a7453bc23ed1f29c688c9433fb13ab4259c832c14e6ca55d122a5373496bda7038697352e2993de47c073c1399e61f5e165de485605096e36df5e68c35d1b05c355506e8f08920f56bff2670297660e920a64d71f3ba55a9e21d026fca9926d7580c388b2b1de782698dca86730a8866ed70a0966d3e2075ccc60d7aaf6033eebda15f535c8163f3ae0cfd5197302d694bb957114501ef86fe36aba0ba9e63002b3767c249957eb71a51f5464112d340eb381a2d6d07d20841bb24039329b84ac58d0808fedcf06033e3328c07e89e71d58ca7e70f4130eda302f25f753ccd23830ef628976532c7800c04d2543070e283f2a92be22453f3587134d5934a771d867ed03b3591a1e2f858d6dcd92eb3707f3a3d61055b2ea749cb7069edab5a158e4d9da1a76080e019c8dabe8918693442ee96b0cd03b7d9488c2d78999de9d8b3c4a39a5123ffa917c7407f8f10a1e1407d1037d2b6dd659639f18b244ba198ebf07f2e21afbdb154e8310a259a8cf8957711262aeca901ce9c11432535d6ea0c76155d0d6a69b99f5fd9aa0a25e44c716bf1666ff325044abf4406bf1b272248fe1e68e903db048e2f8ee5924e4cad283712f7b80491d9c3928803da41c4b26aed597cf7ba559e369f517e24587bedbee39f24a4c19200afafc8f3f961409b718f2b355bf94b151487a4c89f78adf83749e5af1f47d1abe15f47cc34a19a2a9d2208b0faeaa943bf8f94c675e0a97bac488fc96209551bae017a4448cd549e879d0d4945b6551df6b6005015026f4275107946af7f1729523025f03bc76ea3bbafc52da842ce60f06c0f42f2bc39a46c0b23adf780a894bbca42dfa7891de9d876b6f5aca913523aed4eaa569071f89551826cbeb1238a849ad22f715aff1a82003d81fa9962297224cd8d2cb7ddb609724300fde6ce6a5b57ab49aa4642d942f376ad24ceeab2a9d7956635bd3d63a3cd55aeb2025bed112607491bd3b0f1ec4240f1a6800181195633b1712418a8a9ae5bd2c27b9000164df6cd5f45b022ff84e9a518becbdb0c53a50ca7d916668751b1d193948878f6a84fe2dde61378431749d847568a7d9b387495a8d6a674ab601d5ddd62fae66f4d22894d66acec377bddb45d97e171ddc38aa8b75174c0d6243e371a55ad86775ebc4c6d9098b194d68fc0379021d3d4d5f08d5e7a57f93d6c7a4d0d34d53d6fe3529700f9abf5392f3f3df7907fd6a8f66fa559136c13d356189c8019eddef75ee00cfaea41d2ee69e14e8705a3feb053680098155d4cd86bda08478f0982758c81022019ccb12300adb3f5244334d006556467a27fdecc6752e8bc028b61c361630856119bdcff5f795863dd28fa82dcf3f7e2703d68e842923e559583880ae10fe0c0712d8454f74e149321c5984134a7f4780017fef0e11b36a4e830c02dd10b4bbd17e5f27c13926d4b43774459f88e65d935fac08d0d98230c063b52a659b1e09a8e29eeb588177c6359cda74e15c1eb666d554b6bbccf43c9af3efebe03aadf0343944546d758628c0e05880a248998eea24c1a085c6395f51cc3c13f5639bc721c057a066bba2637feaa8ba56c7fc2ca66e571fbd16a9fe0ff5866a7767e33ef09d711ad388ea8513e94236c1a07bc9232273972937effcc7621914bc826bcbb2de213570994a7b73ec83869360f58ec092175d856323cf95e4fac2e1833d019d3f2358a19660f294a69a6aa1f22848abc466934c390ad1903c6fab331a0e1968cb9e891df2e3153c79e42344e440610502a8ae08fbe4138438d748731a0ca2f7c2eff9a254849a9cc21541ad1c9a195ad05a1ff9446ea34dc28b2b096c672686c84004ee868d1f94d6c335898c7d21796bdc6605d8c53656a51ae9c0a5e8bfb9aa59af7d3fb54426098fb120907b479529f50d750b0387fb6d99f6a2db071c7db3bb4d622debc0d7f798c19f52b302cc71d1bc3f575cf88239108bbda882b629f021d9715746e903367236669d478fa7290fd6131854e639b3518531c00950aa769e8fb632746bcf46c34688d904ed1b8e83b753dcec252a81f3c10ba7bd64aa8cf4037a71ca5fe723fc50c480b8bb3a0d21a437a2a73114d74b58535ce4ee3ae3604ad46d3a3e6d1c9b2956e525b7a6be02ed60df8a143e9c5c9eee2aa01f357f1eb905a1511bc620773aad576234388b0c3e821a40901a86ef5eaa9535f5a38a8535019c4af58b27da5c1f34609338ec688ad0be60d992dbdba0cb1fe7a6d45f36a750002d14f1a6c31560442870643c61db278228fd95424b326f3d6bb447f82873bf52595108badc970f31dcd87f49c43a126a0db53299818a8eeac71bb51043aae8ed268902573e56a610938391e7e3e18c71ff708ad09d5040f4dd0ff92deb5cf1922457914c73824d80629e98072c5908353e815a49d36b4ae1829d82c31a29febf0449fd4ad527ebad719b805250516b76fb8acb6ed83b8f4e650d7671a0e0a5c12d5339870e7437285eeca9ff2e7bc282f78304b1061303afd57cd6ebae01a95c1ad054b200976fbd9fe5e372c8d42330aed3f744739b647a182f5d20bc29c5a16e3a94926338fe15eff8233e55fd828bb0e6614e3d995d5a15bdaea8804dfc096e291af5ba07f90bd5acbef32174076a03194fbc1dc41b079d09f6a1cbff29a286cd41f16fe6e97f2e2b23a6867fe3535a09c828a9228cdddd60b3d70fa915352a1fe753c206ea64ac4388bc2862ef020166dad06fb567d288cae2abffcc9136e2546cb5563d1814d98534b6158d5355d33783535fa455276277db2f68b19b21ee1e2bd377e12ea8ddfc06c63a15aa2db8bcb49021212db02bc282ea1918ec760342fc243b20425fc0e1b5406bedda4fefa51c0c9f973eda26d5d16dd26bc1ca0f13f5c262204db01a9b8d77a39abd34dd90db554f3c6165c1a700fba984457b6cf03786be56229a9aa6212140c15ac983771448cb8c7fa569d8e0f9b5fc64b93482934dde8ae1ceb2b0d9c6ff67b825345d16a28806878ad3a170e50608cc33713a0270828007929668756b29dc38504584ee22ea5dafe2ac1745201cd2f63e8afeb82bfe8adbd067120ca113890757b97a38d209d46be630cf96973512e5273591ff1a322db847fb602a7285e5ce0a1dde64a491e3d628915af670f3150963b0331f732248a6cef107d2bb5398ce0b18dd4609a1486c7727a05e699dd41eed2026ca7f1efeae925e1fd23d5193ffccf0d6f00a3bd8c0aaf60574f35b24d98f1967be0c3dbcbe85d6241615071a1e0b3d6c5cbcf6817b936941c15a15d30ed44399c482ab7020466c00160b97f2e663757aa50d656cf4e99189fdf93628b45f336a7ca8cb69e832224a9c5403de9b357b6bafadb36dbda94f1dda8625bb914ae52a5c451636a3c4c2ba21f5cdd27fba5887ea1e46fb1f4589bc6c07bf2d189e3a47487c6ef0638174631be00b48c0f5588bb737cb1caa8088c54126c19b916c5ca492afeaf8c65165b5906b41f5ccf782ff9b4da55b5fae58eb330c24e768024179c328ec5d16481359785f86e8958d0b96e9c3f35b6040b3f3b55f4819631d1705debcc99207cea02f46c223ad23c76ad1250c89cde36632ab47437d2fa500666f601b1d90dc16a086d1df2e88d569dca30ddcfa95b96c2366558b645412e13267fce3ccb346c082c27cb786fc7c5b14c0cb3c61b96d1b8cca7bf32744478802b73d5848db5323d49b076c0cabcbb95217257c6e4af4c908365ccb18c0604be9ddd1bc932d4632408ac025ea292bd8203a3e55189ed024d705f19f6a69a362509119cdc952460a130521ec7c3a0976e9c2e863879017dce1adbccdef7fdd672a18283502857110611961b55378fa192690ffd3dd5c76ac815522c1877050b7cbd833f6015fc635349efa46e764eb94cd9cd614a2ff045a86fcfd8d401c1b6048e5e7e0ad90aecc543a7c400f9ff651181a2ff8945cc69ada25915fbf5903ccb37cde0a2f56e64316cfa30cad4c6e670207c520b74385a73b06569c760b575360baeffeec06454f4dbf6b95a09ae7910fd291c8002c679e242c4932af6b0b4b2bc589afe334b9197de61fa063ba9217a2bc4ecea93501a1c936390451d3bb67d150d132681ffb7d41c899a907549aa84aae3c4e576330a56ec8ccebcf2041f58af98280e5cfc481672c5610a0b2991b0076ba2b0fe8f1200f0516a3c8b0e448e6b6740c4a0a9d3a2131ea6b6245188833131a665184f4bd94c8d34ee52b4509b585c9c1f87e4142c171af0d9927440534a564f22695cddec906956f8b70762424e8452f112515eb74402a51dcc7acbdd42096bebf0727ed6c9d9b131decd2f95e6fdbac38864a51986399d9a0f1c8b0e48bcdbb134031e76cda7426a07368f7ee9b6f578756efc53a1ab1e02050b0f6b556a4c120943ece80c2084ae467e78ad50270559452195f0f049267570f275a4a635a27a37f8be20a14cf818669e3071e4f9a06f2ac45f8a1a6ffd0b9f46e9e0a5353330941d6cd6ca2d0fb46386e551f7cd1919c4a0b7ad34f60756c0188d5fb3b588c6e02712d99ca506c758a07954ad9a4de0c42bdf7d0fcd12f449430d784e591522483b8959dc625e582abedf22565bf9c860e2f00c3df5b2028e96eee58b83aa1fa2d82bd322e7a17b969d128ee4a3e921ff8161b3466a1a9cfe15457f32891b36c969e106de5a2137e989b1f885c204558681dc687a0d1934222a64eef78d150fc53184488ef209b5ebdce7b67c82c4c48fd7b9a44865f3fde5307b5036758191a5936228c59e6636c7db0b231babc82401ecab43f597991ca4f86e8116ba4449183bd96397cd41e68daea9374697aeb760b73b32a5e04e714191f24b84d1dbb44e7f9f44c40218a721e158c570b4495828ea1d6d8e50aa1010febf1ab6e94ca2d3315e9ffb88129ef7976eaaf9c42d0cf7062fdd7cdc474602d07fcd184c4e22911ba44679dca6fd0adc406a9690d310fcc3da6c1d9b6aa8a7dddb662a957b38470427a14cedf49e7773fe280d24af2542ec24050df34ae4bbd099dbfbcf6abf5d584c8abcfe1b6924b18dc01e46a83faaaf65da944ad210dfef2674c743416d3855123e02de064af04baed0331cf812004d87825eca5d1e9c3175ce597b89c82f748a8e8fb09ade381576ecd59262c7640c821cf9886416f2d21d29695f9ae12f86e10da06b18f403b2e85b16e0b2e181c71975661b658d47664f8a2356fff2094bfee66d24ab7e0eb5198e2d68a07719774363b2dcb0beb90402297ed7a5a14745d51000f1f7c169a46b75e89aefe7888be54c47812b50c6881bdd8bca0b46647a8fb908f829af3333d2270ae92244f3a50684e5f3d1ad2bcb6cf70c6d511a0a1fe796d0c3560fc2c93d90b56876cf29c416d91d670070afd21a77b6031017847ef798a644010dc99915174dc5e6684ea4299a608fc8625ef82c92a953fd3750f3429089d339e9d512a504d06f5ad33249b9455a81825a77f15e7677d906c3d884eb94df1528074f43aa5064146d67f9f93e0a39075bdc573246f41e24f7a3913366d2a4aa1644557b6375d2060a2a7fba7cac6524442ae5b6b9345bf071551ea9563c084080fb4c670b5009251530a1e9b80c4e0487f46b9b4ab7d1fe55325f0b97ee795d37b494add7d75364034e8b70442eabd7b5a4ef7a1c8ed805120107ec7bcd8ac2ba63a40841761adb86f265e7f7b073b97f9d29ddec99fa53ab424aeaff683ea79527570f258792e9fd1c68146e8822b8c7f3201e52e50f8e04b872129c85dad2290cab1d1f9167e2d00886c88b15a5b878d0e5307c66d26f00928ea1a0527be5baaafb98941c0f2941513d203315255f5ee828bce5cc066166c6a8350861ea8ffaf15ba658ce8c72d51e161e9f6db9cface7b99618ac32d119ca53fb9bf2ec39b676e98a59cf1a542364b2541ab449f19cd09dd32a2d4f7a84a7abfb9049fb8dff5333a6302ce06e901ebc8cb0d5b74908e19108a107b1e54d4ed9f18c76a481b583f6caecaca28d24d6c522cc9983f32f7a4301435f8a9a0d3c007782f9962a99bda75e2b4936e582884382dc15189285b98e5759ded1e0523999b4bfd9458e8af0cf0aec3d5fe1ed6934c830d4f59c4f88e62016ede5df363fcab6dcf540f659da1c21bb47aa52b8ffb75028f2e045ba5fa703838772fb2a49f061ff120f479efbd8d09dad810252ddb8d32d5680d4b28a57d3e92050b9cd6930656939cfc7f8b9f8e979caa177946f1452c0d141478c464c99dc9ad16352ea4d0aa857bd2137ccfb0cc27b46a400354a3d7a4616816d4ce322555b060f0c96eddec750d7d77482c8f08a7c945a059943fcb8dd4cf3713e7c65d84c13467dfc33076bd43e2d1f9d99e64bf881532f63858d52c2447555cf56dbc10fd46a92da6a1410ebfe5dd7141bab6b394c6f405fdf50e9e2b71207b19d6cd6a950a0f442641da57261e6628451667caca716f190331d6914290bca7cdd0d8a4eaaea9ce4d17632229817247197ac3810a41fb35f9602354ec7b7635bd3509359dad108843d6549093ed2e881aa7f11ef850415708957ceb58bc70fac2007be32497deb0956f7355221c48eec7393e373c4724dfa862365920290367aabe8b1f3e43a163992f30c61ea841eeea02dee98fea2787922d0c3b293bc4a74e027b6319c9b37a81caec874a294839490615137daa4aa51aa174207f644f579f0503bfacd2767a01221048eb066b82b027f9ad136dfa524e1c12aba0c9f96a87b942d19089f5468130505ea4735ff750819401c0b3d3246f948e9690a5d67a23133d6bf20f3d2920cdb32858d0e341441f58ab60a4b68d650a1513cce5da222fbea2d42d60b8a365bba0b0301bfc7bf483c7aed7a270baded236fb9ff71d0809fe1e5a66ae7a2b833d5852bc6fbd12271a56ccd6f17f6b283a445d1833bf88b5e2e5af8a797e6b6311ead0a4a69e024c33115e96665a15ae844f1bc7ca483d63e17e8c8f2f61d4fd0f5dc927f9eec36f42955db597141b9db1f491110248f079e057fb914dadaaf3a08c7601474f8ff8d1dce3fdb48299aef61174ec45125c3dc1aae87b0e389de52e0e009949c23c2e0ea10838bcf8afaf1571c4fe81f55000098d02693d9726eb7b7d1b57e7c03dcc0cf824a752834be72890a12b11e5cc6d5c6ac2bab73ae8b50a35b5783dd7d17fbe4f79a4f52a55021a8d4784e042a0ea1fc54cf415edf5569360d2aa6131cb13814343eb1a5498285c3fc433b02e828ac386ca9f49795c1700aa7ea82082e44d571d350b6ca9d710869564cd69c27787d530ed95957c7d81237e5469e0ce4a60bfd28ca763a41b29003758dff0188e215910d415bffcd0c21ae2e8d02f3c66ae21e5afbd81f6b454bafc588e8a5232930cc57c1326d57b5dd0c3bc61e6ac6f3ccf06492e7d867273b5c85502e494b3442586680bef994ea18b873af574d4843790dbb411630708dd832e3e774222d45c578589aa7111f8b68c3f27c3804dd112c31c4a47ded26a692687aae962ed558afd3982b79801f5af247c1b2a23601fd94b5e322d48448a07dfcf574fcab51468a988c331e8208dca04751f280bd447ad95fe83bf522d40ab5d41e631de895ebcd70daa530597ba683b334bf239368a144b064e89df3727facef5885de067360e8a1ccaf1512d47f04f10a02c89c7fab7c97415f78e15a3d6471346401c1282e28e865e8165097eadadcd606a75b99e6ddb40d77b703ac698c31452dacee9639a526e8a55c41d7666d006e1b8435d28d66691c1eb2e8ec543463a8ca4c23b8342bd7c8727e49539b13fd54cce19d5c8a094427b6380cbec48a4df602bdd5ad3e76c55f4bd0a92540c4b518cd8ccbcee662457f6c6ba950278d7be99aac1dcaefd00a0e14478977f7b2c82ee21f233c362d3efd6d6b30180039b43da7a2af39b95b65ee28a91836a14ea3757fc7136fb04bfae452188754005d0125db4c7b299a06b3270ae2a64e5b95d20be7126889f8fdf46d706fe700c7db538fa07bc457245740b3e96585432c550bb4f653007ea38051e525b230603ba66b21c271fd68730b9346f50f2b350baa877e1633417c5780af4977362fb0f90b36a0221f30dd849b3e4fba30ea0cf1d2cc30f41199edc344beb031320f0db1cf651fc98734866a181f48e25978a57f66674868717dda94052a61f9967bad2c10d0e90fb6e3a95d19ade1b7b55e137c63a0e34f13d60c861ae2d83da5e241e3b900588b8e26b55d6f0cf13e3eafa4925d573c2183b547771e447265f0941e96a40dabbb1d6bd8d7e30e902f7ba97241163647b95ddd7cdb1475148fb84e97a22882c80f7d73ee63650b747508289c756174c2e5236ae6131e4f6f4ac70ba01c770fcea67cf069729c0f67908f28875985ca9b97ddec0a139258e31b0f25bf4e66a0134aa14e8a628495b3aadac752711cdfa4a942a702c84a527584f456c6fef424e36b8ab02ef2cee267acdb67dd2131f5dad08318b0547e550e64e14dad4f9c9b64bf36603d2548a920d4c0fe9d48da3db43326bebbfed20c49037807899fa5585ac1ce8af146516fe4dcab5070dd658c6649e54696d9a1b1f4fd201dee9a4b89fdf00b3c815effffd27d736906a52c886ddc8110e86fe87d6cb1b1a21c83c1779e5053245916d378c6f15ca25da55fba1201b4e6d820ad8311f47c828f35e32c5fe6ad8da7023b062f64c261a6742ea32fcc9663d59d48274e0c3f75b025a87159aeee49e47a8f8d040eed62a6467de2033417760d9e8ea79ef67f6b1bdc1d4f04f033b447d2a468ade010e4747df313f9062b5fe6504bb8270ff7220c3a27f77e3f3c474270c69e8706623f080f92e09f10546a2bdd862a28794e07f7d9b3cc5474d37a688e31bf610fb7d53e92e7d618a41225679ab60afcc50b13012ce23e3670cb55a526f9e1e530ce6be0c4aabb0172317dde8b903223ca0f303a91bb08861750a80bbc888c9d7a5058fd0425a7a22e7c0b4f6d067a02ffe392bd198d3394b0a5b713411644b319b26e05403bf92a1ed435178fd624284f28759d8ba5abd219c402794ac9c921134a45bd455dc4fcd13234a4f0b76ba6a38add748a3ecec3746b265e71bca2c64fdfff96797b2d07b4869696ef0e3a84c873ea86e71b21a2c3158e0eada83a362cf291f45d8b2c6ca64cc1bfb75228d4c0a00bd9483845f4b64a1590aab0202101ff81f698fc8121d78f7df23d10d1b9191230cbe848e956cd7a504ee2fbce1ba7dfc318d785960510cc3a572978b1a56bbd7375842b691ec78586ce6aeb653e3c05874769ae4b2b11d570ada75759b78e7dc623d2cbc7a9885af855e0815d44f238a3fb0eb727d8b4cf74be34fe029928475acf84e3d58f5e3e1e10826b3df6ed4342d672d97a192f95fc51ed72186246a9723d87ce8af4373409f5b9cc5800df94c4398d428c64f23c38f8cb57ca7ad172041be37a16ac2283847f5601f77f9c7514ad17b763f8f13951aa88521cee408e886417ad6766fb82ef82906aa04204a2027f879101e6d6b3ba0bf6c8b25b0fe094de6a22f3e59912c97b29f8deab24cf153b7640d2002aa381a468048890e2ae1b713997afaccd2fd20de88d93b9b678df2ff43f22104a548e437f8a2942505c35598f438dd25224ed79eebcffd41d823e6732176fd3b92bd4ad817dc861cb57bff36038ca09915e7abb204d16abf8403babc6c8d3f84bc150d43aa641cd40f84776c32cb8085eb8cb45d94ed5e6a6e391b12d8430fc2146ca444974b960f861999fa438b28b93216a958c58789ba9f1184fa41ff6b0fe0fa9fcb70a0382034fbdf2da07ce8197e5429a46b47630fec2653df0bc7f0bb8d976456e7574fbf384e72d41a50ed1f1d882ac3ac002daf399835edf250d6e5666e78fef6a1cac62d6fe50916f2eed5a08e503a9d83504a8986bad6426aad45acb38f26f6815c34433a7496c8ce782d93cca1561b4896ab62ad2e1a7c77ea2b4b03e98fe47447ef8a1f32ec46e5f39fec7bc6a050173d946986f51433d8b0a4a3c49b1397d002154ad028d75ecd2ddf288c33e9a10d1c517efc7458af2b03c601bd14901c1e98240f827c4d691b4cd0582d303b974b2d182c88a774f821b941bc9af0c051ca59ae48a33500dd3fe4f56954c908c1f8c663906e060eb14fc1b43024c1eb0c1d25927e3be872d28d4a23f365fa6ad1470e5f90beca4805729d8bb5533f6b213894384bdc60ff688a8b90cf5c7da0fbb27cbe2ff8e5b46c9ed48fa0ad38f05f86743f6a00f4aeb3db02f2c40c1ac4f7457e92b35f5dd4848c5fac692c2c1af5b88a64c563d6af9e9dcd00fcd7a9501f7f92459b30f37692a8a0b59d3005d46f491193aaca5a887d0c0582c05a4128b63a1c171ceddd878d001f1f8cda61f0488fa34718451ed22340a42180dec65742710aa6010b9a8e3987a922f8993c99ae8d2102dfc2a4e508eecb9d0f24d2db5e3108621d7f0a2cbaa65ef533a7c09742ee586c0628bd45af8f17c067b49af934dfe803c72e7c0b6a3b5ff511375f932c1f49ff15aa2a9262bf3313bab2172a0b4ab379a66d7d0dc86859a520a943654516a2806005ad767fa2e1dee1b30a5d3408162d62e811eab13d34e1d34728e4cc812506ef3f9186bbfc74016012cd5d657b7ac3402306a84b6c44c4cebea8846a525f2a17c2d1a5747ea3fa878b4e5557e2c4fb4cea0b97ee2031ac5c3b146e816bf18976ffea39dad3bb87cac8a055a0117134ec7e8a02c94345f292cf3c21125d158c78a31610964b5a3354ef353e80ccaef0869a1a0ca1db5c38fc3f1978298b066c9ba460f74d36aa4b3b431918e8874cc28d9b46f488c33a6da2b29b27f826ee59331d8fe23e77a73108578d183b85f511ebda9606831653fff5388f55f29767e09b15f7718fd0926838a76be16fd069b6ac9d540ab0dd525407dd06fd824983b58701af2f379a0a3539d9ec021a4b72a8e347bea021ca7604ff51dea86656fbb50ea6aa8dd190df97c4d4fada5a15e3c450f172a79771d52527d5346450b7631f441e58a8dcd4bea141cef2c30038b1a993de34c7d87f3b3b3c74360a9f1f09040e1a49784a0c71ba5d68e476cd803c912e32e86895ebd2844493435bbb51423abb7e12b65f7f5a53b4aff7f278833eaba50f8a36f1eea60c4c5fe3b1589767e18f39529b23181116aebcfded0bd5b14c9e055c504fe5e0f19e16939578cf9e2204b16dd9cbc3d94173e3edcf97de1510e440fb8d38c77d5757c2452ce25ba179fafe1733e19ef21d14db384d70c0299d9fcf0dd6a2e992b8e727129555799d4ac6d616e38ec45630f12f03d9b2d2e28bde732c4a7a90ac21faad732b9bd77bd4b08a76f35cda638ea0a68b06de94be002f18d55efa03a6c37edb43298bec590096d6832928ab77d7ca6c0bbcbddd03c973669cc4d24061039b6e587117011f74a782fc655be0dfc555ef534da3a2d8c658b7d2c223d9b1f96a35fdb990201ff7878d3ba3c9c5a2d18812eb7554a1db564930570a769554f91008207b769d1b7c531857772d4cab897bca38726559af42a28a49dd26806930b5ad8db51709438fd524285be0b816fbe095ddd7d8d5a1e0c77cb5a455c6bcff394d967f4bc399da6a86b522241cf4860cb7d1e481942f983b959162c09d6c0ca3a2e76d5634b05a97f652eebda1c9555c4eb7687ec95a9b04a4438e084adeba8ef900e77863d51e1d795ebba42c53d5d07a009b5365e17c5fc59629fab2831f4f4bbd8ac03b9f186780e9bc9cff951d38ef00b166288a04f63d8abb9b2045762f5f8bfcf75e69ba6e17b9ebd593af14f6b7cd74b625f08e2262e8a12478b0a19bab330e3ae7517be8cd2a5ede0b984b2ad4782041a428b4216f21494e56ba449dcef72ceba8c800d4dc4e8afdea162c4fe48e9ea0156a2bd43954e359401099c4ee4bcb8ff0dd9aff0846b407b7c73a2b91c5490d33da6e691a763b5d87a415b08581759c400b86ebf4ecda0d317752b2279b3d51a33e01fd172e6c781226b26fe0649a258d1e89105dfa698a4635c11f30239bcd7b8bfc7e65e8c5c8a2e40f8517115a55c5cc6aff41d4bee762d561775da9223a54fb37293eb2afcf1b8adb30b8a08f14cc17c12720dd9f075cb4490788e3246b7e8fa1071e0e1f14a7254e095922e3709ad4b999dde752382ddf7bbde4edbf6e1f926a04515f151bb7930198b81ec8917d487b803582e9f2aa2078073079e0062cff4e81d8ca9698bfba86328ea9e04a3eaa8aecceb22e46f1047826184bd84eab2702d58926bcd0384b86a4123a579e3639ee7515cf1bcc2898de5180d2f881481109e4016481878ede7c3d7cab93863aa9eb4a6850a0bd562c0c5d41bd11d1381a2ef6d5e1e0239fe912083b82c697e0194b2d8baa8f38c0cf29dca964c0e14e2c03b2c2e3748811efe5ff5dde7a9ec667540c6388c1194848eb4277c18720a983195e400629e97d883c052190988f51b46a14afd39f7e0f808868e32e13172454b3a285562e1f6590db1db6ddfbb8817ac3f8325e4bb828514cad382fe7b62dd392b9325c79f3323030d61f0ec834b81f0f70745040e0ac624d6a34edabe822ebcd704d29e642cb4bfc5ddd22688d222dc92795bedadde725fd918b0f090149d202efcdc240d28eb11a13595ff9c69e93e23db3a165f2d6fb71afbd2b9ee6eb1b10616de69b0a1656d32a4ed6b6ec42c9cfd9fc1195acd7783ad26885a3069a8ea2a0435556b2f3a3c0804417766ed37ac39ab139486b868d18a89d928000a3f9a023c3cd507c0e659c6ec11440e19dc04a0a72a78aebe530ba609d70a6165881f7673f197453269ce60fc36e962b96afbbcde4944bdb275f86c2c873d27e41d10dbf80e77ff078ae5b8057742151802a34ba290af7823c60e5749410515373f77f04856b07cea8b89b116bef278ab29165727337506ed99a417b90911e2d764f33ea1177c1c1a8d3216d5272cbc3b808349d0576ea49c7e72b06f57f6d694e469801c2c68efcc0944177c966807327491d246883c01690127101a73a57060464939649f976bf977b1a8365631a5ab2015fdc68d990aedb993223b67cfa63bdc717084093290a818f9db242c80424d2bd5d2b2d7aa9c2c800043134fa86d3f115ef2cec6b0c95f8b4e7e4a894329d98c62d73cc2a7a428f21914b9ec2889e0c45da60dc55ecb08095e33ab2ce5394c829cb74e800407272672ac6b2ccaf567d3eafec138cd85f1d30ddc9aa9f364f66abd3e8d1200426b895c99b86521124a4249f736e15e7c90a43bd6c537a13021bb8498dbc6c256c0e819287894af50887d0987448f121dfe1bf147e96b32ac6c522a09ceea23b6cf90c1ff7c90c133294c3ef985061eae943bcbe246945b6214689028514c989081645edde231809761e4c9a8f769b40db8d55ca7cea8a244a756cda1248a93294a17b5f49bc52c33aee2dda2a7cb310d25f6ff5840cad41f523a97a8990602faa8dce4440179bbe2cc77d8194f9487fc9ca4e468e654e49f73b9870dcc47085ee0e91acd21fd1fd667552b3e018efb7fa57560e5d100036ef18e20a41399cc13cd346d5087f04117a63a01ca0510740cff30cb27d5836e9c93dd894c87fc0ec945d9af39c8c4f99d9417012313fa44852c05a92a7dd1b5e9692146dc79f2d6881540cb5d975820b09bc6cf072a886a5a530f3e48d874e340cce21ed8a8ececa1a821d403e1b1785880836fb5f645c01f2479c71b320814f0aefdaa91ae98ba84edeb359e94a1f18b152e0592b5350121744cc9dd645ac79b50432c1f0bceb62aa156cd2e0ba7e941f4db53d8006f55fc43f1f1bca0203f1fc0a4f54144f70be383c64aac91da3ff2bb83cb7d9ede94cb4c2d205d2bdc6b8f377b7ca2a4b8e8fcabe0cd181d5799feeb9a905b5091d9b8be4140b9a0264259d376457ea05c8458b96864b968187010b49f3f9d4286a164b8207f29715892611445a6635316c4ea5eb8a3a224fdcdb6882dccb3fb7bccb143209fa3725ae687c7ccb723872cf2ead32ee5cd5a40fba3ef649d0c622487f452238befd346aa03cda96286e48168786a31ef4a106cf459fe792591ca606d0793cfefcb8ea9ca8521cf75e9c430113cebdad8feba0bf15ccc6624dee70a96f80fe22dc2f4db5a583a0f5b76ca4b28ef7e39cb19e00a530ad6239f2540a87f783a078921b1a5f2b4e51867a49999c6c8e34e68adb3a729e08350ac477ad96142b2d0e63e1c4d0098a432a09078a7d78a378b874831bcbe8d0becf547587b9f3e2b0b7db48287c5f9f81b88a5182487f7f084f05ed4486154c7e3bacc19758e726f3cde8d4ff3c5260474f3ee84a440c5bcfe82b06c6bff1e1ead45337e0389eaf9a55b320b5a528b52716d32217acd08cb09b2a054817adeae90437eb138dfa861a4f0d2c55cfff8a7dc057afe9803297e402c6eae444842674be57a13850727cf7009236c9b3e070e6925d87c105793546410a19109007e6aeccdcd24fbee3de28463238f5a31e1c8a2f2f306190230b46918dbb424c54a0fca8553f5bebe76fb337f8567f19e5950a085fbe7b303bdb171e81b13ba5ffb5cbd919caced685986d8a78ec4ca88ee6d95086c2a4c19e1904da502346227361fee66a5519e2fd2aaa7d5d8b3a74936e5c91413d7ae82d46de7ba8705b3f622f17e6730693fa98a373ad019084eb9ad6f1a2983a0f667d2e53a7e1b839a59154182243a5f41b1129f41c93f76c934b948f0b05e5f76ea805413b1df1488b802bfaf8be2a926ff7a593a415839465c51acc4edad220acc9f38d808915af41a25072eddcd7c34738e312586bb2b4a30c872a63424626e096d4229b9911f8e7030cc14842f08abe641b3653cd52ceab6b76c4cacaf46aebe556b5f16b4669d985be27dafcd4f599bdfcc472b05362a5071363199ddc08fc068ec7b850c42b1bd20f0729f8fd01975e256abc51e2ba0a199652722f9e384b49ca609c5cdc17148654113ff067bb6520437a224d1a92e266497edff2a19cc82d3b524fc3d107d44e8fb3425fa7e161c60b68df09100d7dd54cd264b33e962d4e85fda41f167686f1279e9511c98abf8a2a4859afac452bd3109e9cfee369a931eb7332b1c7e88284d3a559de287dc676f99da37fd04cd69d1ecb5d6dafd6ed9d1a07d84fb9443a2c42d8b586c29fa9d41430d22e4aa40c9ab215f57853b1fafdb191d00f79a378d16c900317a3a62f891a6be314ae64bd6ff9ab2ac5ebd7cbb55220ec6db35c2bfa5c1b32faf35fb76add6890f8e9f11e5370fabadde29b34c0dee8fc81c65d5f824ad6d378a60d2d456d67c54d45e117ee934248dd2d20fe487f515165d72cdc1f9e00cb823b53883dfa5d35225e5369c7a835634a0650a9a83975f2ff98378c2b8c1efaf9e5b9d8619e40f1af173c99eb97111ed6a2edec4d9da74d8581c10549810a61ed48970d5c70d02dcb99c846e01e44f37dd661bd54c1b21aca857306d8c4911606d135ef29e31cea69d4c216674d78e30d653263493c996d567be31f4e045d7f862cf28bcd328a2c9de7f4c8dceadeeea8162c4e979360a92f2ca068bf4fe14daa05bc6de38522c1c6d70f05b38e6cf5e04c8ba268fd75852f31a21fbec4017e97fe4ca69145a0b3cf415be1dd73f466bbd40194e22f2d0ec72ed092a5415b7d6569420e35d086b373fa96e08c2e9bea597d5dc978608963392df0c0e6b81166bb181ac75069bb57015a7cf647e108d2ede1a71b7ab0c4427b8839588dd4bd53c692e50e5b5ee08ab80abe2f53299176c8f49dd5783107222725ead7dbd78bb0928413ef76d66de13fb3b969f73218502a314aa7b0e7d5b87186b6089174c8bfae90a1c22523ffe8dab35837f8db75055412b10deba6440bc7ba4dde215907ecf4d0542c05e89db27fb1b751b3886015fee40107cc814bfd0679798e9feb25ab2a4004e72d1c7059be355b522aa687c32f9da2d7d49a0d7c580005710ca19928bf083f238d92b137c80749359f1dda81b72c06cdbe24eb7deb16b0d55a5c7a02d9d0a168e716498be6d5d72f50387561d3c562b1af3e6a88081fb31fae90c77eb825952b79bd000c4d7f59e51a1508ef542cf2c4a3754899632c39219eef27056febb55eda14fefa8f0959339c729999ec1631caeff8e0f664fe089548b43538beb808e747140a0802077efadfe99f964cc862941434180db700729e0ca299f06ba46fcca826b659cfb77f56b218a75aa99256513969aaa1aed3d55a9d93984bbd40579f9430690e9f2a1b608903ee7d652d364094dd449bdd17a70fa24954a6ba329b5b3dddcf4ee0c20afcc49f0d6e3f929049fe15138b058821d01c6ba1832382e3e3670e092b9840c7c1c38d4db9181e46441b74c0d0412589f1ce3d009171e3a3e8b9d1b03c48835fe2bab932d8ab4b8c7e7a90dca7044d069f26f8a85d4cbec3a841df0890eb5f5bd8b4ba710ba4a5b0630f0c89e2e1d988c242a6d2b6deb3818a9a644df1e4aaa1646f46b6d0ac1d6e209d6ab5603cbef05c430d97fa6db05d747209da751201aa1fa5ce2f938223659621e3229a120823620697b0bb64be44b5c11b9057836a45be2bc9a9042f970a38799789e99aa752de5b1325f82ad6cf32a39aec52e4c3392a01adaa3e0ff2d0a6eb8c50970b10af9864a9e3150627dfaa4292e5093211dcd12a552821d650db6f7d162c17198581aa2ddda48999c880dcd957faff3e43f3db98dd85a398b89d97d2fb6cb8854a2814e9875a8585d94130b2b50c7edeed13971fa84c284f71311117549a3a5e831a597679163add5007ded0596ae2e9659fdfc1337747ef85c63610f368794bf31459287e2bd695279bbffb4f8d963ee287572c9f005ea716524312348cd22128525239820316f08205115cb7260710cde5d2738ab73bb368a48316fe7e7139a38e05cd83a6446b004a0d853b6e4589d3a6a6aa54e6725698b86d42fa24fd6e5c6046d74ad9fc39715baf3fbe9d2772c883f7f307f22d19f871ccf3efa41396fb186f0999e87211247d57df861ff68037fd3c8df1e5ea1489e12d699204c3424839196c6a2ecdb0ff29cfb859f66bda9b4941e33c4aa1f9a77997b3a78a1131470fc95a15e175266870497881fe4ea6665f14301e6b9c2b780dc9326d9d7b94041b651261db2ed71dcdb65b1362d97324aae3d24869146c3960ea00f6518587e24ba72b47400de9035296522bb9fa46e53b9567b2677c109c4f29084f0d465fd41bde1fddc09cc07b8722776f752b259fa32b572edaee385a5fffa69d4d0b98dda67a49f1b6bdef96c5d00dde5dccf6f958a8cccd47a94e508eea8c144d3ba7d2f5738b3da3a073b2062f252fd9f5e37f25cea9022b10ef58fe3ec0158c421b3cfb985ba3b68f613e088f7aaee845ef869306eee4727b10648ab370176bc94e3839243c367c9c2412362b307109de769dcbddddc8ebcb2705803806514551115c2b328dae53a60fdbe4e9d1db8c421410db0a3eb2226254abcfe356b11fec52c68d0c96ad09956c4e35bda7ad06a5241d5fe41120a8fb9634966952de676d01c9102360258b7ada4885c3e4e6281dbb5edcbb18ba264546c91a070cd7db83a4bc04930a45cde79842b8e9305355c4bc5f02fbb15ae0bfa8b841bd79a4ffa950f44209191be887a2a22f96848e63150b4bbd9324fb86033289e5247f0c9dce4c722aacc43dd7dc226701f029d80f97662bf507bdc0587a82c8da00348dad8ebeb0e2d13e87a6417e74ede392a1ed4969d9336df9efd36a0be4388a1f3fadec366dfc3a96295f0237d63bad15d9ebbcfa3bb0dcb0b0ff73a924c0d998843cfba12a7291d818db65f33d146f5a738928d30fc1c6180a1558d89ff4cbfdbc095c82725c1a9d9d15972924931b62700128806804b644f3d0e000ad402f101386bb36fca3440dbf35e900a909cb331d33bfadcf2ceb0a39cdfafc0e8161c8db5f48c6c0410120adaecb8ebd519709a068142511d4362d702d7958f53ff1889f2fd48768131492985473ef4a4cd86095cdf0faf4fd6f76f8573c4cba1f27d41b09ab313e728db09c9d0a8b7dc19916cace3e3ba16a2596c6e359b451453810557676e099f6df30428eaaea757ca52010e869efa244ba9772a64931b9a4c62dff787a388b08612da097b0aba9a93afbb236dfcc532bef65e9393cc89f02d63a6c4b9fabe8a057b9fd65ab3c4773f39922db825e347a5fb00b902c4d30668785909c505fe3c2f13ea28c5d83ef36e91f45d3c18eb07dd2dc21baee2efb05ccd0b3e46f2ea1da7dbe01fc2eec997f39a2cbac69835b0d870a095b1a20d4fc4e2ae19dedb54eeacafb01c43029cb4035abdba8d5920d0b29a0e0302b914cf0f8753fe2fa2a681dc041fc976cfb0b22e8eff083b14bdb82b4e73ea81529009cc299b3bce7c014a250888510503bc4f447f40d94f54b068b19fe25863eff227ca6d6cb2c86cdb6d4d6e29654a2905da08b908b50810f691174e4d6ba196ddd06ea243f3e0a8fd0d05092e925a6da241e8c7aece3e14b784f3ef9692d6b2d85293089e54d9cdac9b6830aab2adf53314a8da389a6aa855595bce9a870c1a981e9a626a7f13d1169ae271a9fd6db45255559b461b222a72277296d08f692c8565096023d627c9ca62fb3ebe55d4efabf0f1f9e083d7eb69d12bb23afdeec156a743884277b6f51db63e556245d627f248529b8760380ddb7e7bae52fdc88c8bef922f3d20fe2b9c9eaa0758a9c2172b557f2d8cfd6309bafcb51513dc7ef7122774770728a25f0dfc6fd69ae6c1c03ec5e0b588aa4b94252afc046ced8f816b2de1486d2b78ae54503bcb194ad47e1170f00ad99b6839547717f41893543b4bed7f457139b5b1b8e033968ef56349e37b193afef7b58378e99122273e6f919e2b3e6369c61225433fd3fa79085679d59caa9f734e1a2f0d21f3e4e99b4bff118188cb5634248e98e81ff831348f4bf943c404232b40a0022d34cf4df5c7c00b3248189d9e4888a2fa0803acdfd64c6898c7451d73e7a2d58b873ce6df2f166ad8cfa4b4f54dabd16ab4fae3ea2dcdf335ad9b8f5af663bf50c2a53a0f30324aa3d1d698b9162f4cd56f78f60b1cba547f666a1ee6a6a151bd8cfad3750006e50ec2a04d6a902f74c11803a57e5c54fd5ff5a34e2deb5614f5ef8006465830a17962f4178108d00a5154af2309fa35ad69fc0cc50466c1a6a01f1f553e722f81fec4ef200cfaed952a43c79c8886a57e10b28278a17c34440afa6dcd04fe1ef25cb02742022d83ba33121df367a2bafbfb4ff3f01110272a4302ba56b8948104ed69081cb498f933923f27f973cda9cba0e3348d14b7381e58e1b23423f5397de534a6060088114a43cc1a144ce5078a3cae85b423a3470f9c1c21eca9415df26b5c453c97f462dcea9e071a2747887bad1eb466e336e055b26cc5c0d52945a25fbf1e32185e5083a2055135a00111337e212bdb281e88e0a10926549a94663db629aa70208225def0c424c1ab035dd60840a4506601c21e2800527402ba2c2028a01fac1005dccae82e292dcc7f56f6e3317eea31f62d59d0650159015d281d9c41bfaffcc3240d2d98b8c00edce5e7fdf1060744d0650149826ece0e47a8606751f68714e52007ba2c204ad095009035287f37115d161029e87e4f006767b961390df3ffd10475e7c0095d169026e87e8e08281f21857e5df741b30749f447150ea8a0cb02b204fd200fdce2c0f81c084125cea41e6b3541f9bbf9076ef7e71356966c20828d1fb4b8b158b481840cb0b8404a8c1d68112b2837845e0d37c0a8510495c28c314a92d881871e46b082227a811b6ea4914613aedd4d9b5114155e982b6b4c112d18524c6ad3aa015e3cb1414c0e57dc8082197fb7b219135d2079424c973592664c43038727b7c11ed3c89c5e9b0792971a8059bf902d6066fdc6526d1fb5ddb852fb81a44f68a5f693511ba7e3f7c8e9183f938004d63cb042f77a1ac68ff3f554cefb3586c270fa0b2b0b6523cc065169646131e08a14126724f910a60632345c4163064a7c988286c486088c97161a4aba7c6142d50028be0053c519563c01662acb1a496a80c1183490e020123bb51379d7205464a3171f61f625b8109074773752dddfdff6e57e84fbdedd3d130292eeee7615f93628a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a66c92484949494949494949494949494949494949494949494949494949494949494949494949d5a8c1ed30ca6daa565cc79299a1343872d4d8dce868ede0e1eab1818f8ee66444ebe1e2b1a3a5e3c6070036308a4b4e3736353970c4a5da4f0380ef61e444347446c6a8f6b3fee5622209c5eab8d5cbe341b4d5a056aacde360070ff6d868127180d3aa29d02844aad3a96e2c126eaa0a490ce5ff54383a6a0a347a5377758688e9e00622ad8f8fbabfabe3bca2d90861c1b2b3e58ba3facd560f1cd92eecc3f972b9f4867a60520eb566524a962f71b894dbb6ed4cf5da7e4218177a2e442843a0713b8c2db70ebe6a3e9e1d845e75edabe063c6f8c3df9a473ef452d899f4660d9cb2592b39040ce55e3094845512375543c60c89a2fc104208771d42092101441061fc096b6a72f4b84348001ab8216a50fe7d08bf07c2a90674084be038c6b8bbbbaab9c91557e87d317463b8f5cfbf2184be331e0664778884e12e8434e6e8cf5242a96ddbb6f8eccf91fdd963dcb6187d9390f98d301246082184bc3a1e6486ecce50ba07258c5e22945212462feeee114a97307a91cfd18e26c6e8eccf0e19c208611346dc314b9fc16194dbdb54776161fd5f57893875998aa78586f51b3d4494be1f9f0a15be072afc222bd54bb531f9445c46e3c27a0bcdd3af1d9ebbb7bbbbf3723231de544eb58a6fc39ca97ec3bcc08195ad561ed73ad6fb86730d8a6b6da8767a0bb0456fb6c155fc95efae23bd8ea55aad5404a0b1643a5e1f96e9a8927b32f20876a6060335339dcb540f8bfdabb583d2ecbcf0811da236fb509b73a8cd2318433df6c61625744ad3f17881f99d19ca655cf358ff9cb40555ab555857b9b63afd1f2543696870e0c0d121a03866561e6c231b25a79b1b9bba3bb0584f8faa0701de0b65d45e19d46fb3d4de1770ff6d156ece15a5aa566b7abf7930aebeb03a5fdae76c7b04d4ee591056366bea4eef052b6abfe006b5a1359b22c4593b3b2f7401fa216cde5ec9f8ce5ec8511787bf8ae6e52aed12cdb73e10436fa84fcfcf19242424a5a52c3d359336522775ad957aa9b3a8ba211aa21d45af36aafd5fac6e94daffed6cbf757faa56d6348f35fd60aa694dd4461d65aa284d6b07bfea07abbb5b5ba59eefe9e9e931c0c6faa960b2e2b4c5937b0115a672d5bd215f7a56a7bff6accfde745d77d3d3d3d34eb1698a9032cec4278ee386393098909d9d76efd16ae17c1b946b68ec10800004accffa0edc364f64d90e2b43f66f87ccdced0e61117942c708b739552ad508eecf715d173b56d7b564b1585dc7e831d7b166a8a4ac22341da5a1a1917266e34c0d547383918717c6aadd8d6ad0c0f1b30efc7e5ea9e62623f4c98acfad38879055247212041dab88acfd1deb84aee31773ab296ef9090adf9ba280a98c130d105dd87fb9e0bba047c22c7a433dbde3b01a4ad51fbe413f68048d3ce6af7a41a46954fd4b6882ee6c35dbd9ce76f641a3cda8e608ec56107365f1b96768c3efee5f1dfe26842a085f0d3d3e8fba2c2048a3d9d46501318d368befaf1c7559405b9b456f3df6c25117a75d8718b793c9b9bdc77c34d10f56ffea30d0fab9e0bfea52515df1b9beea4fc3d7ceeab4b152c172745acc727aacb7b01ea0facd0b814b05008c99a99e6743dd4cf5437026b4bd0d73c6eb81fcf9e219b380e04ce5d9208299d9f63ddbbc5d0fa41fd130107621a2421b600850e88e1f8460d74f386eb709e968a38cc6ab827e3bdbb3b5c69102fa61a0a6e77728d38c0e00ac6c563123690663ca78c10f337e01ac4ca7882a34f810e5831b6066fc1c77aa99ca3333334f7a7e56b6352fb82879238c1ab42cd100196cc9220656c840ca9319dc228a76759b8aa2eab733a1a0136ae7894a0b383528acdb5454c3498a759b8a8894906d6d67e3caaa669c862d519bba60404d557e150f74a62e18505eaa2a0b8d75c180e21281a221d911153264a7672705038c97261f9e800137e7c6c518a33f003e5ae3f336e50bceade7dc6d8b7c443684b2cdada73da3b04dcefeffff5f9fb5820be2a4398893c5599d1d33b7d56a9b9cea47429be82e859432c2f95249a9cab9815225a5ca9bdc942a29555e04bc2d6e31c618638c31c62d4677a7993ee77603dda5985b94d18968a470e374ad106801eaead4ed790095dca60c368483f44ff4e712fa7ffa99b64e39682e6bb528f5676f590b8bcfc19a87666133e7c6572f3a614366cf10b9a94280b33e1b8e841042082184104a9cf5e15f9ef2bb691696022b8ba163fded8139a3f63b8b84c6e19cc688f3610aabf64f7a0690ea40640beb968bfad5f4a8fefbe1e4081992c5ec5b2a5780987d8b65c7d82e2ca4e463260cc563e01f53b9d2c5ec632c5b70987d3c46172c95a5f66b25cda47a3781f235124cd0afa3a85498ead758aa8f008bea4ccc5c4cf5a6a1a3eabf93a48beadf73030aaaff4f0dd5dfc852f567010733aa7f0b52547f199428d18a8648e044848451164825f02229895a0e62968896701a82daa1fa73940e65d076185a7206d10e28281a3262d274b482a42fd59f0731d59b7ae8a2fa536172a64a3bd6d5aa77b5ba57383dd5d43a165417dcebc14a1d152a3df5a7b7a8745270c5193f8c40a8f6c316ed46a306b55f841d84988721901f9cfcb44e16de7e43ed8746b37e2aa535e1144f5051eac7524d6ba156e2b4791f7f9c1445fd980a12f563a539fbf80a1fb947312da97e3cc44a988899bcd09589d952a0d1b40edaa09202dfbb63f05a0407142b3b547fa800cfcad24fb3acb92874496bbead75f1a462a9fd5b33fb764b85b31e219b276448f37005f2859311144a04f104090cfcc024690a1b630c71837791459821947880a2a64748e518ec5523a4c7dc9a0826344ff37473930d35d4a6adbfa9759b6ca0a17eb02549e3f8e73caa6ef0abe092ca5ecc302897ca2d4f43e6f9d78f5c26e3b1e6ec286db586868e3cd8d8eef6d1a4ada3a13e6aa4be828958c97251f75138ea2597f110f35005827966c3dc60590b1e6b637d1cfe0785587243e55ffe200d9569e52197d1d982cb52e0d8be162831eaf29a51f73fa6a1b03acb474874de47ee06a401de0097c0a2236fa391faf3a3ea415dde591d68d4d9c0f977dd58ff9c565a697dfa0696b1534c22e6a845044720209795f510d3d3fa38b130697de2b72212dac6501ab59b05b569fa084818fac1a4da7b6d9f9a8498d401d46d12c10c6ace12da75df0f6b308cf5a982a91083656e06c7bc60e2a262f1c10730c96b3089cbeab85217b4f378c86355b04ffdf6490504ffb03e91956096c24c449d4f4f2d2061e8e7b50a935ce6463029c98da00e4a6ee4732ab991d20e2b23e2b125ebb304f344290ceb6f1948a14f6a3f0c828d65a3c2a49c2cf4e31f2aff6082daef46d4fe55a2f61739b96c9d3c1811efd3a1c3eb23af85f571627d9e60592b79ac7f5641b1a8cd456da5a7565a9dfea701d064b0a589a949699538336a3fb71264a7566aa726a3b6c724fcc463b81876699e6686492d0b00ac51814a2d73cdfae112c4b25d20718234a1da0f9f2054cb7cd6cfd0bd16833151aee432a129fdbed44a3738c15672a2f68f108c5861a706baef2974ef35b7b2b17e76f2d16a515a0ba3e545edef2d9c943e76f2366a58d75c166fe058ff9209048d44743c6aaafdac1774f2587ff7824c1e4b5a9dfe5672197cf2581c8ab4561485504ab5619295da900a2f26398202bd72b598e40599d2a0aee4541a5643ea8165771f8967de49359ed55841935cb65ef56fa33e42e2b6e30ebe73928d79273f78bd76eca0a96cc4ea0c75af10a2acdee5fb733c8c8012725f17cda6cd2964e906c792ff8492c6434263546fa36ee244ce12ca7d9b60bb0a96b114a6627d54efdcfbb7d1faccf7adc2c7e783fa7551cb896d25b68d8041f5534a397d778ba603b8ce496391cb0cb0317f777757f5ac8e7b1f4ba9feaa171ba1aac249aacb3641f5871e0b3941b959bd67756640c2d025e94b2e9bee9c74417a2ed5cbf77ebe07b8cef962a52a5faba5b68ff47f00fb3389e164c67e612f3c60e0b93ebe3458cce098bfbbbbe134f89097ea3070fdbaa88b56c77fb9ac8ed36ca161fab104e5ff68689c6aa870fddc4118fa3152eb871374f506a0adf5d9f7515b42af9d68228ff1d73fd47ea2eef029f284e8c748485e09aefdadce44121556e22b737999d6288c409a2c0155dd16ed218fad8ff7d052c171f7f3a3c65e3dd6a0f1bb49f3489eed6f26cdf3c1a156d23c9bdc963a85d57312aa3a7ff3db79a46e0c5ea7b769c141e4fff890cb88e02a0424e8472bffac0e4b607df679c863fc73b2cc4785deb762544672176a18b7168ef18b4164c697a8222a7bedc5eab0121f6a18bb50e5faf23ad444ada4879c8855e565bbee7d4c1b8233f8fe02a233f8fbfa8ed42db2ca52fd61d8a9ee6d60a64681df7ebfc7ba80dab13e3cd7fbe8fe8f8dc9e090b976d47fabcd609ee5e6a28997dacf638b7f2883cb1a0b8ef57351bbb5b418b5fba90723f61a86c33f1a4818fa463dd065014901fd9e51589f6d593140e5f760651cb5b33ef039cae7a49486b70344bbd15bb4db577cf7a286c1305607bebf5c0c0e624212f4834490e8083c824830c99190926a4a4b4cebc3bdd44bcde4f40415d5466dd4474849b52048d076a7d581ef4f5707ca890615d5b41e6aa22eaad19c6a4a4b4c4e4f4cc44445b523a424165a784106a6f1d0b7b3d3f343c4c80a262441219cb4f5b0f5a11d99c1772287ef452edb198433f87eb43e0c6bab1a9679341d1d256dd311945ad330ee1eb80b2c087183f46ffbbbdb5d73bd6a95144fc298ed1329920005accf845125a5e9726239dac2528451f74d58191f79ac7bc91e49c15d1a4644398a95a8d41b9a960d6a7f0f31519bbb40559e35186b203177691e22ebd320f8efd7f5768378ce43448e5cd63b04f1849396a5a8fd5c0eebe39d0f21e8c7f5ebba60ac61436da2d5e987afd6e1d54b564701de39ac0fd1ca06b0317e9eca07a87cc591ceeab4c0f266646688a04cc4654db4b1fea265729a2de5b03add9d0317baf5e3a1e69a13e260d8008ff1e7e2bbf6e5ef2cba56a552799be7da19f6e7eb1b46a9d018440cfaf51811dae4b28cc8f7d797c0aef786a041bf9e165cd6b308bd2047f5a799c88de4730c02ff0a0c027b3cc441e4cb7fc0fab4c73770bcb36dcb35d01563aa4be560d74a827eab64643e2f081e98b57df0206b2bb84c255f722f6b1f65cdd951cab55aab9730f9ce42a167d31be2a58344a1f1bb122006343e6c594656f2907c2e62231056757fc7653d5b2db479a93b6291e4a405f5dbc1b932c5d6846e759b9c340185c6ba4d4e96789238b58bf4484a638c0a3f426865563833392ec7ace9268d46d06f7e38b59f5542d4f4a45124ed7452c38edaffebc3b5bdaf470a1acfa06c1600c5d39c49dc0be76937276dfd66e58598d2790902094d22d40617c6973376c27cd9b22141695d30be5cf9306c70b379767d4e0ae1376d3974777777ff3a08258c721b2604b7c32837870d5df5b52a6ce73b42157b4d8fbadd53a8e2e019dcc72f5791f5be862d3b3bfbb73cd6313ecdd60861945b7f77ab5f955f9f73bde2bce358ddbe3e5e5f8077c71d67b7cd55574ea663c92860c78ce94ae31e571348f608218430ba7b077142194208dddd3b7e02208110c22d09b7380edbddc88a9b2a1ae8bb1b63dc5d9b0ab7c5aa18e3eeee2e8c53d52a9eb367876308638c2d18d78b3142dfbc057764a662516f728b73931f8c91db84526e1072504ab96d50ca6d83d1b76ddbdc37e8ce536eb18974081d46dfb60dc26d83d0fba7b718dd218c31c26d4e954a25e506217c8eeb648c5b84ee316e11ba3f8b25e506618d8dcdcdcd0d6cedd8c183070fb83dd7638319238c31faf01137289f0b8000360883c1bab86d32009b8cdb146e2d1613bae378c66e84e8bfcd861db7da99badf8aacaee366546deec16d9b117270dbb639e1b6cdb96d714ed53665667cce39e79c7146a6c101e79c73ce19e78cdbacb19158ba4b1704e5e778baefe816ce39df7dfafc6dc61e1bc8e6699ead4e86eeeeecee91dfa77372bae7704618e59c316e734618552ad59c9163b745c98a353636379dcdcdcd0d3fd7dab14ddec1a3db217948eed1f160cde77a74720319376015f1d16d20a50f1faae77c7452a59a3d02d0e1b0b6e702208029005611d8090006639d00eb7cf6e605e0877ca8d712dc4d84a83bbc0a14f24247dda575da2ebba54913d5abf129644548ab0491a5fa8e41c64e1656d73d09c28759d36a69719245853a2a8cb10a4320d208c008dd4389afd40e2a7c678d006da05f8703cbe9a95f57e1538539153601c1844208c14ca95088a1473b7fa5ae6608a8c247cf6524680a508c31faa8c268367f7bf829d430bdf52d052471165f3b6329cec151a35c7947694e28daf5837599b550def2e30ae53ec20aba9589222787883c56f23fb4508eef8201dd1a79f6e31b71597fac3d7539fa615a00c9962c74c0024a8b2adb450cb484618515158051041a4d98cc785162e98c2878e071b2840455889ae0324451145794a28e98828a9017a312705d2cb1d10693264d04e5848795524ec088158c80a9a8cb0c9600412d4b1035a8e248c98d1a041105b7446b138520a5945fb0544934936f82fc1520c082f761e027945b80e41391f23beaf25b2effe5c35cf633660554a4c00c1788b18299fc1d971d11e20b1624263da880491833c975a9528825554a1f67d09933196e3051b2c61b4e96e0928449521a2e58c2c417267850e2a9a9288919666633982ae730e337817f05666fbb77578723cd8d448c22da524ba5e659317c30aace64541d3ecd37f7ddab40f3af7ea0eebda029d003ea67794141475ea81961a106eac7e95ba75d029a7916fd99871e5090cdd7fc91990bbeccefac7b75cf7a15fa65bc1964be65bcfe195cf0934e3ba3ff41538064bee69ff5ebd40ba21ef39ff91a6fc60bfa9a9da0a0653dcb73c1efbbdf99cc7fb41f7a2e14669ef52acc3ccb9b61ca0cf4675e859a673dcb9bc1e66b7e67dfce03649ee582f4e5825ecd2bc7cfbc703023e9a0b5bc2036224232a2dd30e9306a3d8f3f32dbf13bc3f11f2371cdd399af89f98d17c44e1ef3a02940f46dbc20aef1829c82b8b6446b74c98667fe63a8caaf7eb9e4f3d37cf77249cf85423ff72af0d3cced9735c24f778fe3a7705ed09436e21e8717d4b436e2fe6b1a476474f34ea3a1c9e184e3c60bbaf9ee69686ebc86a2719a936703cf70783c5e3b5ead978ed7d25f27eab9e4d750363438fe735aebfb83a600716ff3415380743c378480d90d50f72d2fa8f51d90cd775e50cb6b9ba5a046f298bf0ecf069edd78b59aff1aa9c673c93f32ebdaccef6cc67349cf88d0919964ea99ee3b2f680a50f73344d5bf4302eadec60b7222cf918c248e97647a49a52895baff9ca8f366980234f3ddcf30e3b9806458df792e1582a6b88c749fc2ce3acf5f0519d5c3194e9c28d168330f1aead9cc8720051ce8ce963ce651e0a0022db41863c69b21049d47e39e732777f298bfcb6564e6a3cc7890f6dc7fbe0467d48c30b01871812495b8e719f750ee24e3b980b897812f991caafaa78084eecca502cfbae759f7eb3148e4317796e702eade7341cf88545a9a6d92b60d6d442b5b2b96a8e08a2b32e8a20b26fcbbff64920b7a30a96101defe45fd6635a2660453fd3ad6acdb64c452ad69d8840ec778c28814d49a86412392f03625f8d502ed16f6fb5b3035bec87a56b30289da5d03c7bbbccbbbbcbb2c874751cc4cc108e3114e6dac0aea082a9bdc8ea8d50fd6238caaacdb74c413abba4d4720d51a0821dc66142c472ca9350d9b524a395552c01c21546b58b552ada460a9fd0ed58db1e2565c7fd4e29b32b5a5de82dbd569525bca14f583b5498a92babfd56d92d24493142446588ec575ac286334491141a54db810a4f6b999c50b703864a9ff613b3d48cccc300ad142484eeb613beebe002712a50826ac4e0e4e8f9a592b32aa222c808809576acdecef6a8c7068eb73a2ba1c582c5e3028416de08a7ebdd0348589ba54aa4aa552b14ae0bacc46f55b2a5db7690a92085382a835feb3fa7e33dd10284e4e1522f4a0d0b3d9aa993fbd85f004fd3627362812d793c3530d4f638e74b0628017b821159fb04230a5098a1954119a4249ff0ca2b4040b59058b919443cad0624a8c145ca40031d3001948690ca1021a0a9eccbe9d205192e460830b3e22caa124c9d6bda404c9d64dbbba4d4598b1e9f0587cf3d1458b31304063055fc2ccfa08263dd4608ba92c40706964612de130c606cf45cce055b7a9882aeaaa6e53114948945008b75f41e5b9f8e70a2ef682a6c40f72f14f177b409c8b7ff53be33c177b46bae754ffd3907bd1d77b8c62c06ba161104809e0732acf155feec8e8bdeae3ab542fbda0f9aa0f92bffd9119d7bcedf3e177bb193d0355b7e716a76e02589ded3fcfe9d8d6c106d97ebfa76e1258d96edd9ee6d151b7ff599f6da36e9b46dd968b95dd62bda8db063d1c1715b467fb6644689eaf1bd23cfedbf69b0b02c57741cf8502abf382a6f407b9e077ed01cdbccccb784133f4c80ca7615bcfebc763dbcbbc8c6cdf6d4fd384e6002901e5c75102dad585bf7ad5cb05cea5807e8e5924f473de72902f067e0f7055fd7c5afbb5011f539765914633a209d168b3f993651b0dc9120d8986c36c3e65d90c8d8625da122d87d9fc16cb686842444868b42166733e8e125055dded67d607fef6d465f1b76fb94cfef63350520ae7eeeeeeee9e0345d9ddddddddff6366f6ba1f007bc45966c1316c87be4d455d03c4b66e1d9f006a7f4164b59f57f63369ebbd221656a7ffa775c45066a19f05a7f5813b5534b14a3df8e85bd49359623859335db16e9599728e6f039c46fd686a0cb0f277ec7aa4b963c0712bdbfb6b08bdda5fac9f6b56af8db36d94815d9ba63af77feeed707596562a3586aed0090e42ef20919d50d841e8eececcf1e5ceabb31fc409fcafb939887b0e94dcdec8f1b2c96de5cfbc496eb51bc43d6e54c5a8da2237185e4f3b9c18ae54f5068150aa36c85cb46ddb06559bf475b9ad6617bbb8496e153de844795b2e465554b13fc3a88a5115a1e4b6a2a88a4a38107875be3a3142971b4b464666dbba196933858d76dddddd49f03a57a75f678a4e954a05ff3fae6eab652bccad83613708945e779d5bb7020cab2d729b2bb88c0686d7d30ea72faa15b75ac5df09837875b67922735df71bd8ace664a90ec8b032161262a1b973e7ca3788641076218b35c27c16ab84ae9c8ceaf761757fe50b353db7b82000fdbae7810ce8b6bdb89985c91c0bd341a5d5425575ab9963631cb8947020c02ad2719e7c49d60872065f752c964cc79291919973eb582348231b2b1d15323831a084218fa05cdd26285d706b5055dd26282e782a63d24d7232505a3039213b3b638e584f702ba5ee88199590b9b3d32385c43d99b3db992788895af5c0da84cc9d9d9e21d58452833c412a6a7e47b1226dc9088d69a365d0c06e673ec9274c336e044952bcd275b7339f5099274c413d796275c218a51c63ae0803c5186190d4082365460963e444675d30c2146d585058178c304c86ecf4b821544bc2edfaf85ca59de92c5f46987ef86756f9da0121b641187ab0d5e16717b6367530011755207c62c490adadd22e41a8a54628b3680231351291e5e13facd9a95f8f288c5c6002228c74784883587045d0398fbee0ea5723c4165a8638a21ad950fb29f7c0a20550bfaeb61317d406a3b610526af7a42ce07ab46887f3b4553389aa6c2ae2a872dc854006fd20538d4949b5a814972213c7a1283f0ec526393971280e45f9e8011ec12397b98cb0e44324b8c5f240132c4cbe7c985453824b100a3ca2a1f1825c5b10cde308a2914766bfb3e5f8147696c30bda8fe6f86f27ce7656c3463c266100621109faa1f15c4034cf7a1a6f4a06e66fae958c11192f886734dfd6722ac77ab958ac9f79167d9e51efdf2f118a83c8e7603782146a986408592a699894430d930c214b5ac364946a989cdbef532f56470b079134abff62c7bd6cd23c1ffc55d7ad5e16c98f4f112a828951922685a41249245f32912fe577dc0a3af5529c1591a4ca6f2ccd0300d6ebc80cb246a0b980649e6733cfb39997611961bdccebc8cc9b348f25d518ba4ef8066492f99b57c1e659de0cacb7f91b6f862940acb7b9f9196c76e6b4bd6468987c512a348818d4868542cf76b6501c4ff3359e6bcbe1b936efa8ca67bdd11f9971322fd7c67a11b9b6cf218b582fb37940329fc30b92348fc997f12294c7e407b1bca82affc88ca57a9ad5818fc35ba7f1a8373d067fc65baf79cd957cc999645e3b737f9213fe0699e2ab3cba3990c88d9cc8a13854ce7f383da4435509953021a20d09f55273d145300d932f059f184286500d935d1a26a1433108d08b4ffe657dda8b66ac8e2c81005d7cb0eab4bd64bdfc06d3b228d531f992e5c5278fc9cfc9c1c1e951db49fec6a81928fc39541f35522775ad95a0a0a29ad6434dd4453529a594323e5529f9889138697db8d6d02ad39199847a18e53238931f6993686b0e6aceeceede2d87ef10327f2b80bd18f804feb6a2f2542a954aa552711cc771a1f9a20537780145072d4551e0b05ca628e30c1f9c90428a0e0e45ed57715dcc808b49b7cc2d28189b1635aaa85dfb276d925bbe48a3f6a4fdadfeef87f5472e5a00853ac1326a3ffc49fb5bfdef566ad7fe2946fbe47ac75f2f2c60b2d4fe49fb5bfd0fabd2c33b95e338ceebbc3128579edee6715aaaf4a2f7bde75e3f6c49c1058942551c14a386c1a33aa8b4ec38553dea10d1080000401000e315000028100c884402914014467a22881f14800d689e4076563c164aa320476114c418638c318600000030c4191222922a00164962611ec4aa8b8c5c69cf6fb67262989e8401de27d8696fb1e3212ade6d30d1bc58ea8577117336b43490533b83d3617a15a7ef0cb83dd5780445b5222a8815e7ebe9109b2f3b0271d07ceca27d810775d697440b5b344038fd7b83f91de376f6c5a4b23e39f08d07daf3bba05fe4d208f8bb6501532fdeea0fdb5da2d93622846ab28e174cc109694c41c1f64942708df76dc11af57e19965bd9da61acef037a666b45001c4829c58cc9c80eb74e898a40e6032034a4e2358ef72a112c73190040db98ff3491f2f18698a093518c3c6a4cf8f9feaef3b9d53f61f8eb4c0126a3b179f99b0835f6e15e8879b6263d251423536e9f1d665e405ce3435b5bf66e0ff9057c5b669d61dca8b5f20cfe73369b1f87875dfd16e30379a156ba3bc4ab6f4549c3d6a22465217c48a32b4539ed0950a25909a78cc3f15a7c15642b5e6112ceb61642fa42324acf9168c423d25c485964c5a61f77fbf5de87706cfa5e70ca77f7d0cde82d1ea6e8051d07ce5cdd2fe28e9e23a9772df15599c4a30aaffdc1020e1f7087f5a138ac3edfa04a56cea3bb2c760915bf0993d382f5a8890eea0ecfe78848e00ca097275ae1121917defe589d382e851c7ec50ee9196da2fa3c518eb104cc45b1299f7bca17f81655501d907924e8c6bdd0bc50c158600bbe4e874c1a02dee4ca0239f1c2276413324499b3880c4f7e37b982f401bf3b34598063d60c0d39bf3c76c4be880df1540c1134a859f2f0c4d80e3393804ae9a63977bd1e86d61236136ceb40b9c9f6087765b663cc925ea3704b2adc3acbbf78257c0d14c38cc5f31e11b7d81e4e5aad7afc7ab066933746cf30663868601df77d241dd91f51a747573731040a49144216c869570682cb2852f7d29322aba9bd71a867562429d6a625f5c396cb7e67803e239e3ddd011d525b327e0e77a586a57c5fc1683e31545ce8db144fb08ef265ec407bd284f58cb7275482de16c872f28dc05bc96a02629be5904ffb5f3c3e435396f4c6e219ffebd8cd9c93293c5ad14a83151e5fa41581b1233d285576a115c1d019467c1ee92342be153b6efa79bc8bd84e20008e61ced23cd7d1595706d31b171cb4d80975d528b915a608ea7d96ea9db96bd5b84302152b50b85571a54861441205f46b2fdc28ffbf375c30c61223d55ac070ab5af4285c7670774ccb8d0e11fe4d660bcae81fcabf0b01c219877df9402441b6ed63210a7953202b80cba5d6262c44b7126e0070e644892bad00219b1f1aeb4741328a9f82bb37f865b0ebd91522e0cc8b009f5d27b23f70b15b214aa9081b36863ef422687fbdb1ca79111893d0bbfebb70fe02a9d8722928c08b685a5e043f096ef3ea6a4bc1ab32d409a385336607e245480093602ea3058b7a90c69ecfe83383fb62776de015d0c408571234e79889dae0a837948ab435ebdaedf6ff66532a9ddd62aca7e9238410979039c9b1a46dfbbd4c2b421e1981601778ccf85d23a1774c4783ae2518236f319e326f252192bf5b434d9b8b0e21ab7a585853854647840a5f5400923bf58c15979882e0861947d6169e22eb04d029cd33f87b0f1c32071b248ada3f8b66d1f35fd47cff02e2c086e7791aa3aacb04b4b0d19e2579b205ba6876a5242d4e7dac7eb2ab402f100609eed6f5bbd3f7a065c5529293b2ec2f0fc3b095035b2715d82b4f7fa90fde46a8a66936e76d84231bb687997429eba1d940dcc33186d75bedac6d665bcac5aefa88789f688032c95265aa1228c9b40d75b05f31576ef2377eb757c9b9bba639dfb372687345d405fef6362128264ef9db97da75f35cb30a8802047d25ece2a63f1d37b8aafd2c1076181a04473cea651c6168b24ed5eebade4276f984dd1fe9ecda81d5dc917f4ef544e9c48c30b1287f0b9467489deb86a2b5760b2b4cf5b4ff45bb0cb7677547e39e2228dfd13e8ead6289239000d448e0a952ef230abfb228e2afcdf9d2a052bb19a831f8869a6b23cf462c6cacca16fa4c10d44b53adfdc09f307aabac49fb06f126ef29d95e33c09ffd201eb92f233ae722953c82c3992e08bc63c6c4e551d23047e3b77eca5fda7532403452d0aa05dbfd78cc7c1a42c96ad2815583d9e014ac142952e0a57ad61b6beb0161c1e7dbe0b74f5c3cb8f94d071bc0db6eaab6a1da4e4520cb7626c03e9bde0d077b8b3ab016f56f5c219033050802063e525aed0fedeaabf77edbafdb9177e1694045de1b566505492cb5acae30bbf803ae8d0fe758800582897ed88a03ca08901afc6baffd3580f43a9b67d2a743d84f187bf8992001c77818a4eddc77071ec060bc2be6b73638a9aa7f586515338a538ac1b8df77b123f5c810cf5ddaaec6f351c5a319d6a6b1615eb801d78dc6deb879189560f842e60bbfd5cd7378c002c1135ad8a932443ffa57c9fa22db19821ec6a8f937a7f25a20b4e95686321ef5fe4947ef4a155cff93d0296ab37acc912b1f8805dc3799fdb6d0329b5eeb6643c7fa969f5faf6a94890c18f2620b6d8f2e81de7af273b8f892b339c23eff6c374bf1c2f005cc45172d8b894f57175501eddb3cd5a964c38e7165a9ce9ebf4645d5d51014dcb2ff0c30266cbbe3383a69e3ac4065d4d824f7ce8666f04d5d79e47437b1d86baf1b51441f1d0e8335b3671027b3675f8387df2b88d2fcc59cb7fa8bcea5decc194639332fda505c23fadcfebcdddafd081cb63aa6a82fc0d34ce65f9a621cd993f6124d27eae677adc9e2b4e9d84516b4c464a009ea83f74ba513108004d4f32818ab9caa90173d487d9d45b4183f53bca493378510f15fa3bced17548c8c02643fd9f325ecc15a2ae374f51be4ff12b31fd4b223b4b11aa81b4fddc71d2a6031aca4a2002b04b39d48330dffbbf74a61179a11b40b7bb5fee835c5c2681e2d08a6f404a940df6890af394a182d5979dbb67681270affff33e67b4f2c34b34e7257d82e15b8b4225c27fa972882a7c31e982ffc1843276f842d10f64ac84abc92378aba13b990edf8a23d67b88ec6fd5334b10af2eddbbafc42b3fe2797b9f0c1c926671d6637d019d16a879e518026ae9a612862cf4957723d00c484a6d849e5dd1e6ac38d53f92fd52cb9a2efb7f0236cdfe4bd0a5133b15ec80a89b42fa0472e596b87537de5e0de65456ea5ac45ec2a08209da7879fbe091bcca74d59063eec4b586e1577027903d3e0d35c291c5c6f5476d88fb02aeed9806294a35fb9078e568b37e4e282a13e942a4bb858acbc7c1300b1eab4f07cf4316a03c3b119fdd892eba5c034d65a4ab516b1f0e14572976080bbc618b17054825c01ef86a83758864dbcbffed88e036ac4623e7bbcaff51704d8828cd2ef0362a9b8543e2893d81e7a2de994747596177e98c221b90a3636bf25961afa54742ce317ed23fcd5f541688b5827c3ba2f3ff766fc4e1cecf2294460de2ca0a5de3d2b4e5097a9753f138b382b593b16f76158bb15d1d31dd4db9bc8376a4726539ea6f1b3198dda529546565b1d2c7dddc3bab148d62951cff6ab9f2e6d8879dfc4f1d9689d0697050d25d53e7fd72236fb7f7b3427b9dbcb9cc9b4630d4f163c672cb1b940b109cbb99fa62ae2911e1cc209bf3917f8773a6bbf702e4ff32b7bf21c132af48929f20aac33f5398e41820942df10642a91beb7f0eee52e0932abcb5302dba7e24a3e9e8ad938c5c1b18c4cf37513f272b545bcf03a2020917698a01b125f257ddca62e11d93617377790b2fcce40b79455450e284e5d81e2145154b91d70a22510aa0a3a5500f0f935f701570af6c063eb7767f47baac8788b82ef89b7a07103d39a92ea45a294ac3a00bac3e62f100833985fe176db1ade625d8d0d8eddd3a1b901259ada176b580880625c119fbe29584a2589980533b6f8fc65b17a5b4fb47110764dd80d749bc9ebfe430fd5bf5b3d185798945a2d565a533969ab1be2c1e33a1ac693782ca5fb743196c4081541476fe562a02463752c17b0e2b29c4de25357d61ccb97b70f2a787b9eac718ae3e9af2e646899852797b4a279e06b8173831003e7a7cfd61e4b48feb7911fc730f1146c237603ffa3821be45fe84c609b33c1562373c296bea51459422a3fed123566defe47baa5157aa2b9117ebf291bb5745627c8ac0a43f964ba86398a1864bd71239f444124386e4e1a3ab15f2cb474011da20f7abd91d666f43541c5e7eb1a6937dfde3dad2dbbc3f1ce8be99318d055c3a1b18fa151c6bd5bf3bcca12e18bedea4b9f8958cebcc9da76848a3fef28ea22e0c18294f2c72fe9597e5d3d16c926c7a79f93bf270d4561581b15bc4dbe2b7e911ee39d220286d4c1c0596eaa0927db6e89be3a68e6e4beb73d59c2834bc3d53b623f745fbc99c0c2398aabf09b7fba4b79964a82791146570673c0daa846cf88a278dd0a76de42d09b6c156765786ab21a4fd008ab86fef46966b47c2496fdff185df828c5491c63a5399880d37748f4c11e596c631c8168c91b121480d3b97a8f68083af9bb5d5addf10a4943d9e90e672d4d6a98d014da3e6c457dabb0fa861f77544cc098c6d7530ddc4f115db852f9b6bf9dad74ce9e5bb2b62e2cd7eef846050fd78ec52eac12a9b6cf9a6e485bb413692b54b3c937d25f70c34c823ea2a1ea2bfaafe3db2c510438dc5976dbdbcf77937ca84a52a91244f0f5be5097ae68baed758671487ed2303af665f2b45e341017e40649cf3993cdba7eeb6f13cb9b23e4ed87c135d67f653f61541d91845c4f01ae8613dfff3154ad09de946f89aac587dd1ffce0ab5bf42db2885f1ace809c7a615512f82c2c7e255dd0a62f6977218ae4b8c9db836818447754038cee60ee8ced8af7ec94c5d3eaed2bed984f7d0f6bc47bc7577f98e89cdd1a2ab182831a523bca3d0e652ef7c1b68e8c4ab9d427f014f9f240274272115130fe44381e759239700013b74db64fa77bb4bac718103bda7e24a8b7525504f12224c6f9d98507dc9419b17842e00da6e29cf7a8ae5e5239d7c01626a0f52585ae945b80c818b18331eab3946e679542f9605b7a47b27ae1e68e5a1679bea0fdeb24c6b05adc7af545f844c00a51d46c15f5d7c310dd092b3741824faa289e5d1da6ff8fd2edaffb174f26d33f3df84c9841a0619dd2b62acaf5bd17555c576b58a0c4ac06c4e439e94159a5e02920612489b9d0758604ec2a36850a9a7597e70474c5dd44cdba8d3e67443a443987fdcbfb37a43d91f4f1308322da4d20c4025972ca6d99cb17ea6d46b945e05444fc1ba2350cd0f8e49af7008b52bca96b5e916d90ebe84f4803e4e55cfb94a729761a13d985b6b3ab4ad00a2d02717cfe9b82cd3d30f828cc0d7ad214febb4bdff9da4bf18eed561f59bd947596961884b63735ac77fb5176a892f5795a7b5448ded42991f55caf933637a1ee5fd4c6af7b541cd4d789eef4dcf8e962cf83b0d673b7b4b958fbe059df80ff2086740c9b31a03b2184a346da8261926f34a4330d88d72729c08576f97cad4290ac2d7e7f81495632c01118b2a4938829b8bc7ca29c5b634a9e4c3935a781b26b570aa99ba2287125effb34023d82504528e599c10437999609a4091170b4f8dce10b0506ace3664c388edc6aff353b6aa67474bd215d89c62db4b7447e6765d4111266ee08fc38e0fbcfa2a3f65a2d547806d9c967433faea9fa3cc00e2f79db228ee395c48c9c4a2b133fb4f0e741876b32b3e8a3f4fc68c4501654524086166ee12279c4ca89542ed9352ee5a1bc2e2c78b1a0ea5df3ed9aa78bee20e4d5ff5535fd96a0a041fd5ef3413a4ac312afaddd2b48bd14dc3639871ea694ec9324dcb24a37eea28439ebda156c1e48e36a246e46ff0d0c7c15f764c0ec0d96140f1e378aa00b28a62fbe38c092b5f4c09cb2f43cf81bbfc7c4bcfa08a152e99118d71687e3ab59885ecd0d9fc03fc830a37ca36b4df210d4d37da636436b494cf6222cc5a746c6fe9a46dd0b2da5cc87e8789ae24fa3a5037b845c10ca8ac0eaa41a81a6c7cdeaa3a4886e6807204b270a781dcb52ef08026be9f517e8a31ce1b6d46f64b4e8a017480523b8e3d28ea5d48d891bdd55c5bb97fd2b6fc02249e9d62f4a81b353a6645fe0378866185bbd1a5e31522ad1f40f29505108513f8697b6652d0c4ffad8b9682d3c844be01dfc2f9652551b52c8686d2bb3a508467c37e89bb321b41e8634f392f893e2071e93c80adedc71648ba2211cc5043e43ebfefc05f35630cc3b3ba89d349ecea3dfe9df01966592b0ea500e8bf830baed7665fcd4d6f97770f164fe772074e0b6f3d9f4240bc81168007b61431f14b88542384b333151b1536659c2d2548512a46be52770cf92b7273373b69f121570c4f408e0bddfa12eab89b9805c2e7d293795feff6f9e3e613e040e8e6108da6f30e0caf577e59e4092e4839175af9758f674926f0c9bf29acb3023f7a8646dfaab394a014e0393910a6d632172e6b41f5cce59638bc6414a5ea52192e27dd4cd6a00ed0869cb3420f7e90d0456b12a49f4c506149828d004f7a86edcd9b2ff2905684a310e40b63ebb985b5bd1f16d9dabc05cace648942bc42fb1eb6362f68a8ac76fa47579223adbea372ccadc300c6a45d6cf32738a47c22086492b308c190953c1927aa52338855887520e6ebccb17eb78589e1f5332a77b4d1a9f185268814ac5f902de6b2cc29ba68118a527cdbbb4c573147575519771434053b27ce4cc512430132d2a1a6a7775648181505925a2cc1a87c1124a2267816a6717a83cadda08bc664973da585a593455f043ffd92be21306b125e032592a4d7dd021daf5941c8c3ba162ee0c396d59c238b480cca9f866aef0ada6869e177112671ce1449589f9188ba52c861cb3ec7485c298582dc8800b4622092b58bcc7ceb39fd2f0ecd61ad61928b65c2a445172197566134b281e74e050e4f9e4453f9b5216c726f49c36375e602f5c56b222a0b1ec0aa6cac62d24150d466ff0c6e724916c7d1466608c241fa43e8a00fb9fc95f647503176eabf867ce3c0b45a541f6ac325d93be1b2d4dfea8d071abd2d4be40253969e088c86d3d258c7f7ab917da3ab3b287c67a8ab865b50d522de33b7e703a700491d0a781d4e73d37bf779bf2dfc0cfef2b945a9623dffd99f199448ed5b1ebb17aafc50003b7d175778a2b43d5381a6ff94c547c9eec503dd3c3e1d2813db1e98494bc404bc66e141fa6f9a921cbff55d4cbdfbcf420de8bd3b060004ededc32e04b2704deeefae9b2f844a8b412566aa27914ff8979fa0a867492d053e07ffe5fc3317f31301db698079b153074b2045aba7d6a718602ca068d84b55b7ef0f80d20e824cc6fe42b242a9bec96470a5a5f641d485e529d41beef80e9ed421b710a2e661d329d51bde4d93e979570df80c303b80f03ba0051630e148757044d8c6a961d4e6fc62a8aa1391fd937dce1da41ec2ccde7a77c6e087dff19716ec4ba6d803322d18e75b85be9d1d0836e137d516e4f91a5d45bb4722d72e2e53dbede98e30c94a57e11e7ac4deb68bef043904e3eb958739838e68341852d397faed0cb628bd9ccfe5d688072309a6a9ca478f7d5c40c6ffc25ec678c1b653ce0c79743f9d97afc46f26776e33ab1584c888972291abca0f65c97935b130400dba2d84da16367ebb3336be3aa9fb103f0a67aaa44cb54718ef2ab5684bcc59da1408282c71d6ddd4f3e3736e513aacf30360e4c65722f5915e1984e3b962ab132649d326910b836476930514dd5d0ff1ba8f27ac049ad6d6a8636e76e4107b448b0ff588f7f15206ea591ae5d3d2093160bcd698f6c7fd4624e3816ed808103847f7fc561e28222416effaa27a7cb0a51579ad48c3f19dec9456d5c4b859a9ca3836ffae78d0238d9021ff223885e6184a85482fb1c5d16f7f50e14d2f194ab9633f0d0a1efd564edec2438e4fab315ce1441a48edea92e91d6fc01da38000c556d3ae8dde7e947b7693842f9bf58a13034e161ba988faebbb2e69f7e8692af92f97a82b93ca2235a6e00f4c239f2232a09df39970ba9e558402439585ce9b1d2fc7829578878190627fd8d540dbba447b06ef5010fc1debf37689a47d87fe18521452f65b71dc603777af3a3a65de1256d63ca18578d6d6de7c82f8bb3f2acc86777b1daf8041254a8f8ddf5674a2e6ebc1d1b3e1d99a8c2bced20443890163b4310c17444d4af26280dea96ae565be3aaa5330f8af6aa1b6b0fc0650c024a5a4b1d90c4223d8e87b250610625785deff79b742d011c5a65ce77f8e566ea71f84aca7c07639ef69c54d29e48ecef1d06dba938498b01556ea934878a06c7ba1ed0fedad9a2773c788b6e47f32ffeaf81a6c51ae98b789a4c5fc5d100110bc0ea486e2c54106af958f8e0f55aaaedec066d5380f7c5387bd0b969aa2771478334683b34dd2ca6f7885d89363ce5b27e633e2a040a5f9e252ab9a0f73ab26e701ada867da0a9d3f3f6db3ac35fde3dbc830238dced8d818e21a5b147feba152680b1346f3c2b2653632ab0087b72d612a16ac7a74a94443325c25052c281be4775a1b361e6dce708f69bfe376a863114ae6af58b0c1dc4e63e5d468edb78d952d2ffe14af27718ca058bf44ad0f302ec83442c56d25826bcb2e101b5cee8f2f5416413984c16c0c08016b27281a96c866e82322d1a5cac4b8b56d08b7cf2e08fcd96b6c747269b0be7c8a73a179b6a2c48ae72e69d4facdd7a6c2740b582c76fa8c8778687d154622a345fbcb5402e3e0a56c9bc74f7093f6a7638f93f3ffbac59a8e9e14a95872176491cc4ba2c7353765612b9e0a7938e7e61f66f6b3eb4c2fcbafe009bdd7cdaecadd1110d6e2a3afdeee229614e3a3800fa5c8a25ab779f70ae07b2085697d85f13667ccf08ded02a10ba708df34abede1cbb1dba043a600daba01c54d7c85fb582314132f950a3fc552eecdd39b21c2d0c6a2372e80a03ed0429678a65b3bab262b4c77de1f01318daa29d6b20e13b574eeada224f01ddbdc5a6e2d7f847e871b319a972c7f3e312847f35a2a7529d71b143e3b29374726d52dee97e7e8b46f7db4956425533c95e6053eeee3afd573619f6e5426ca8c32a94d63fd599d58d62221e96cd353138facdaeb4d7f90e4ee2ab23ada461182f8779a112558f4e2df34dbb12d887c007c3864307fa767126b0e0c8ee38c9a2140e186d5b2c8b656bdd647b565fab511f03c1fe5391777a24f29d3c04beb483bd2433ec2e4af5cae8fd1010e53dc551bb7164e601c4329c9ea7c4361e61e0c34be3ddea26583b97de7191146d81a42e0caded374391b891d7cb15a06d6068419fbd0b3b20a05d00c41d3c109f76ba653941ec33bcc2c6d53a49445de52d6a598812f83975d9b7fb5666dd5053270289bba4fa4264822e9207cf65123f3434e900241e4faa5810bf8bbe8ecbaf30c22979df7a1a1766dd47f7970ac35e91ccef27e24e0251ee07fadccf53457b87b38f9990dde0753a07f6a3b6d6aa0abc0c4c68721e9953aba786356f314337672c7f6e19fad3c73310e2bc9bd6212af8bebb0500fa75e1614fb1f526ec1b33a659bb7183c2b724762a1d171f86b41a11b61b70d8f722e0133fea14c21ae4e49a831306a1978bc778d381d035fc183534f33a84878d2ab36ea76c74719f9b30ab173e759959fc06944c76a6783038c96b54547ae89cf6fbcb6c189a347815a4faba9959a73e8d91808c9c490a88fe883ca684228543d944e9ee6606dd416cd2895a8bd602c11c9d6235866f1ea768990be4bd9c8b2952c2dc5b6c63eb5175d4c68954f6692f42e613846a76414cd74fcef15e3700c69f8d1a73f726fa1d2f2d699d48b95bd330adc0671eaa27e909a3d8bb0feda186b900b0d263d7ed1d708d641ca6092a3ffed2512e8c4b5a5c242efb8273fcaaf287dea90fa198a9a8b226c661b22bd2d60e4a681b2e0b1ef5d52d53ab5f47e51044dcc4a50525b6b26425e6fbb7919985f73216f9f10587fe0451b9e04cb000ca0683df970f40c86372113843f4ddbfc4cda8edaacd862b0c1f8f865fdad135d8cf25851185e78629d4d58e7e1725cff7af754b26e487d8bb59de54ac1575a2785d977060de54c045087f8f3f9dd4e7f593c9901a444b2321aeab15fb8601083a88c3fdc09471a2476310a3499a701718f13e859441048e71fb8cab0a692c1550c51dde2173a6a13518cab813f602096f864ef1a9efae6fb0aa6cf1228f83c6259c1c06d4b3c2a945e2f13fb4f0d476f5cdc956a9cc11167e30e3ee51d09625e42219737d5146e4c72b12a81a861e66b0b423d174f5dd2ca104a324c7a2731216bbe21c8becc11754ace437614042d74d30e77293047602dfe5336986bfd7784166b2d09e83509035ab11bd82460ac3d90033f62daf4d528d5d4c1604126878e5f5cc9ed166a9d96c22735c15ccc807035a2d5db762455d5f8ef5d0d6ef950596ab7491d47b0b4e2aff07cc3f7859f1a4d717a1a7e6632f0508eb2315312ba0fd816ea6fd63e27da01e94befd26688ca54b94853cb4daa928fa93b01ada9a7bcac25ea37416d1d7ad591db077dfc41b198ee6340aa261211fd2049916b682fab54904ba6fd855108a1cfdcd0f06a066e30c681f0ac1fc32ba3179c3250b9956b79db733ec304c05e315629ca77c763e9c5103e0b9bc4fb25026a2a966f8409dc1f79b255988f01da60976e64932d87e0a3f4ced42ee1bfd3c71984b2a4eb67177d6da73d58e6076b93656c4fd4736ce51cc38d7e656220b903fcdbc052a4318548d24d34eb2e07318f8d580aeb16aab56c4c8049d86c502268618ce8ce18f950fc363f392853f07391e92053bfb310cd759370138e6297993570ab4ed30189e886b5c158927b8aeca3cdd42da3092f1b3aff9f911f688606301f07619ed80ae04672d6a7874fd65bb9b1d6b363175c5c1a31bda66952eff90826b76fd26199b2e9dc6338e1292685a83459ef2bf55d142dda8332aabec1f103e50376bdd2da6e86f276d850cabbeedfc23aa1501ec0403ca0bbe011abf34fe99e368edcba6416084e885a18b398a8d0fea6a0cc4b3b6d3e867ca9aa8534f1abaa6012b10a87b2e618ccd69d403659cd4e97f4d5da19415860d0f245d81fa68247c31072afab4a3695d289260da4caa4e7d5636571247dd3274acb4f590a5a9ba49e8b547b554a9cccc052d29ba70fa4f4c9d14fd995dadf7c11b450d616fc8fa73c398a86a65502023735292ed90267700f6a9b455322711b285466b5ba1380b978af19134ef93bdc2305f1a23e1a16f670e6d5da426f4426d6f03b2a8d0c1e7bd4d68fc000a4e0cb1913389fd1331adc66e2ab05936a9124ef46c81cb09902eef9169218d80c234522602c7302b179e8de2cc25c940704f0a569181f1c4d6534c6674c5d0aae54495c73cf14fe24d56c292401ca5fac78b8b7055cb09eaff0853a25c15913ada2ff2b3250aad9c89b49cc4f3e39844e151180e8ad6849687a83dbacc3335af343c44f85a6c63f90e51e0002fcdeea02a3de1d010aa43b46490288495047c336e7af3dd1c22696e615f18ba78ef98909a2160fb62623944ceefa937413567017c55afc92a197fba9140f1d75fd8796b9443d45d4eff14bdc94d7c4de0c030890c5b735548c1b92eea945c154cf35e0c4841e497bddf40021a0601aacc203570efcf82bcd4ff1cbcf9e2d51c967b4890c4ebdee77ba1912edfe80201d7f71268b8dc31433cea187edfd521cbb0b813c287c1b170c21fdc880b17c464eac869ab2686ab2a707b26d7feaa20824463889eba6bba88a24c8d83a98ef4c2b9fa74b6e9ef563c336d21037ef407bb2707740e005d429bc672f414b2e9651c1134c76c611c60442040b4073be24571196b0860e17a776df6b4b0522c173fee014c2c430e1f4a2cddfa24881e7a26906a92a91f6928731a5d86923b21cecff754b14d7801a747aa3c4d26910ad4a391eeb91dae20b80d3c32e04a6cae228bdd508c8e5025405430fa2e696bcc87f9c838d5b870535e3a89cd32a89158741405a19c324e200606415eb2638cc4c13e8360782a229a78f74b06bc3ce5c4a9eed58650f0a8bdfa7b0a4eba022b8ade41932ba76ff65a89e1ecdd55395a50a1454d84cf6f74b4d798ae898959bfee404baccc4e7fc9c21f7eba7cdf3593049968db3e9ad54011bedef882c234f8a40f71d9c27057c6e9961df9f4d96e85670cc615a93102165cb9715f868b2fad6e40310d713885866c1850e07e4035245ee5c4d57bf0bacc6a138207f78ee769697d93d851f9b1f739f7efbd7a15f18d9321357745942307f620389ce201c0e29a1d16664d8416d02dbbe755de9a02a66300956db8d6b920e3d6156ecc937d067fc2ef8d19bcbf7495bde2d94e6fefb8f03176fd9a564fece0419c14d36130c9e0bbfc675824f6ccb44e2b8f0115747a06ebcbd5238970350138adbd0ea6719783418e9c36a175e3fee7dd45aef071a2724795346dec0f620683d02d10397c0480455f6b76df0d900e83cd042e1cbf1afc576d305e7eb9dddf1fc06ff904d259523c2c4b18956ba7af1050156633025facd84372a4880c14b8ff434f6f305841a761c2e238f5d440f66c70cb8dee4c70288bf3615cfd1a2ec92c84c9a40711641007dfe9203c4ff8e9c0cb11f1b8738ea976746c318e843d8a3d385b1c3e0b2ad3a0cb403bce49dc81f22e07616904cc4e77f9096be327a8e123c1a17c9bc24a0caa22213cda475f8d9b02ac8adfcfedcb84d793603de7d81d146c058241a9b60d539b55d10d15a90db6943c0a1e0eca41eaa00c503592745ba081bf45b8f8bf0c122a130349701b61800f4592a3b7da051f46d3b3d10d46e8c52a9318b9c52ef8349a7e1b6938c29a015736cb3a69c92e67ecce316b99dbffe998b5df8c00f61cf3fa3eabef37f0de55900874fc569670ebda2f09c38a493ccc1a7c75a1de9b539f48701e747c2026f5dc84e619ee7f63080c54b38813129a5a574b2694f0036e0b8e9176d3da07eeb21a7fdf27645f761bff15b4416dbc8eb8b4ee13a214d0045b328dbfe88cab6852c1cc60cafbd22596ac0f0fac350ca21830f8b5ae6e663f614fca6b54ccb4b52a99ef217c3d630a14688624193a7730c0c9dfbe4a42203180e29477d4390461ab9337eb806fe7070b59ff2a0ab24f7f90f6a0a1226ca19446c99f92e99e6f9259eec7a49d1a8d309d3cd068aa2f2e0ecc73fc2f57a33977e286d7f21ffaa246fd4c84278cc5bd6f0abfebc1b18e95c11536981495a1a30929201c90883045833269960b655ee6d6596ce32bb30339c5fd7eb238e8f60b8f8e6118817e01c9f707153a65c890af7b99151d84663004fa426ec555c4a37fbc42c5d75d2993639bd5abb3ea042078f401cb6b5bd2ed43419e3fca1e2d9b2e1a029a75611d01f2b3f7e1337af8b23237ef291d9e2121a75a9aaf49dfded61d74a19eaf8508d620f0832eaa15169d67cc0fee7dc4d70aed72ae5f4c6abe051c64d4298d2cbb6346f66f24210f7838d833dab0871e1cbbd1096ec5cc79b5a1b2466841725e7bc0dc25f955fbfc6f991768dca1b66dbb23e11c9a15e1414547982cc87572e658d1aee4cbe0666cf16edca315f78304c8c7dde210704a2ae52fe9db3544070abf76930a4150f6669ec23bde570408710251c0af4c7a663ac722af8c3a28fa7d860e287f0da5c2797f3bfb592b388e67434998b592b6b312e2bb7b22dbca72ea4c7593fcd06e77dd60bde4390b5d9b13602c964639495a7997854daf7665af3ffc375491bc9b7111a896779d6f9d6833256466fa6557ab0740205452eac7706d41ffb3ffc26a7187da189e992fc4f5ddecef6e85a95b32eac861eb4b6841fb3a18352c58202a553339b1cbed498f8f8ea8d7974d2c77456e28fc152f3b0d7d11b1817bb2ac52d1735fb5c8ecaa4b3fce06b46438748c6d36e131b949906b7675acc5f96482e50b8796abf6168a424a7c2adf34d767a89aadf2fdd68d9489381a6c783ff4f9e9e9552b5178fc990ba8e20f1572822715ddb2c186b3f33f01a748af008d63cc035495f242eede00334abeba5eb02048981bbfc6863b817c57a807bc6d8402d781c0382e88f5a0c2db61f1af132303eaeb714f6a823aa6b37d526d20c42a6e84f7b33db14e716e4885bc57458ed68c0d15a863fa3fc5e75a71a26c9fee90f40a9d77294ad3f0207200e62ad89f677f2e7b55a24a38c2a5f1380b5e6b3d74113083d22b3f397704de0bc1472ae0cbe4dac3fa1f48230165d6319386008122f97d186c518a70fc605a1e8510a0ebde96bc92e447a1623cebde70202d6d5e4c8d1911c34ade4994e3de38ea2ad115600523a0e79861b0e3baf3fe4cc272c44041647f41b70cdc04928f789bf01a7e692fe099336668c6e4c894b015a7b2acca83c151c5b75038d4533159c7ba2534205a169b86fe85087abb3a0ab3d0dcdf463ef79e83fc19813b1b8f46901d636b2ad79c01ff70652fc83444daeca0cd7ba7c63485cba42192c3d4d87f51dc685eafa8d58afbac7fcfbc5b1aa762e32ecb9584d45b1b3b421d2271f35253635afdf1f1f74383436ccfc2407724392f0606ca5891e0275c2f85a8ffa40736703d46edadfffd9db9b69d4734d1f5900846543d8249a6273d13c2a4ee788afdbca003ea21ef523172254680681f0b83d89ff11b3a6da5c0808c0f9f3a4f2c881d13638296bdf3f611a524ee438ba6150ceeca0e62b4fafd4d7ea8201483a4ad408e14d46200f8faf9b19bbfbe688a0bc16365ac38c2c3bfeb322aa17d44d317bbf72e8012d7ae8790122429d8d3177284bf8d3a18a438ce8a1e96c8f16630817b7e99e7d77445d60d9479502d2db16d69945420d345b2f2d87810ef349bba977a96cf2a4fb19c745b660f3d5aafa901f12d9732e57f8bdbe68162aa75010eff16c7c89870e5714106431bf885fbbcadcc65098e5b52288e8e0f1b00042546b8961a82c0a8238ebe66db02accdc1f9f5e98884e56049b37f5a2d47e0d356e4c0e939c78081ed0a94c4c14e712b5b2ae73c1174af60535cf00d4ffcbd54ac8676f0f77d5d703f20deb448e1949b01313a86b64e3401c0e78349686b1e835111d39f9253d968242d5bc32ce6fd40a31f5cefcf302fb41ff115331e224f8d44131c9c7786e974523738e9a050c6068f03425e2a278f04b2144371774aae80e7575ed97d30d1aab6b55a0d0c84f00cab185c5151b656bf89a89c8e2cc11beb7a7843f724d1275f3da541b7da5ca318a24f2be9b17cc37cd802f85fb5b0ee120cc57e210b6e81a92193a9e21fa8078800bdd01cda857160e48e224b49e52704a41c6f15619c3ed2a4af415718680e09fe8341e315f744706dc60e2eb853165cc8602717cc12465b3be55367f9f0fd3ef96181bc82e48a7439b539a629e305d17d98a92302a47290fd88b3d7f21e0b61237ac250e11f85549084e815fe2499a032096f7fb13cedca18bc428a5d0aa870652efd5c31508546e6a3bd0d780a8cab3ac0b2b1482c02e90e9995ee3587de803769860d80f9672d13904344db76aa685633694e301b29fc07528d69f31f9186791f54537143800c6db2c5962ac8ec11a0e58fd75af885880160bf452b8a00159822daf7ffba7bd0d1ea441f7cfeae2a2e846653ae36c57d6846f65ee1648fd157b8b36051302bdcc7a95a28be40c1aa2a82e6bcc393a6711ce26070a67eb90ce7eafe3e99a59854467df381bdce0fcb6d849b76c3afc249877ae47915d39bdb01ac8a739eff0fea37f948a1060bb3c258dd033ca11ae05d988ef82b81874ae8bb9a1c7436f4378362013626980b5e15befb5e40ac20a96d29c312218cf595d5f88d6b4d2da1ef47778044912aabb1a30e4f63032cd6d240fb5ea2caac13b2560076c6b5cc6e1ed7cd0f40e8d7d11e873442e00824010dc270d97bb1e84210cb9dd6cc404fdcdb25fb23228b080f5e281b6ae008f59c5308ea40db7061a4d287b8bb768bb3910a29e6aaa637adfdbd4ddebe7028ee9502b0e372953aa21b00501bad9790c661a2d6f4ec9ed7087d5e2cf105ccf9fa05eb4082c8c9ef10800de539a37c54f67ecf0099e8a7b89566dda58e42f02d11558a70c8e3d21ba8f31f97069f0fe4310111c9c4cddcaecfad244204324715e24c8abc6ee3785f1e3d8e39ee7adb2c463caab4ee510f9fea72c78fd74c2fe507e527900f48ae07624c545520db44713e9ec90e7ee5e72954749eb32d806450d8dd8eaf4fdf5652f289dc89751e8c77e91c4d122bf140552e1600f6a7ce4934e2b3cd805a8a691d340489b15c9d5fdc6def037f10f55cae96158681f0b4d9be233349c2b9cc345287991538eba99b253b4d76e445ff0ed923a651033fda05f7395e576487fb5a25fe673e53ae54888d17115c663be6dca2c18c3b5813131733e98c1c14182761ec7d8c9e4853a69c9b4e4ad0ae933e5ed08f003d32de4ce8db66fe210611ef2b86e47da264346bfa0160389bca26a7d80a35932c84ce758c36ee229a2bacfedc60c5f46d1296747e7bd69802d6a7b8dee1a863c63970337580fcdc209d5161cec0a86ecc73403d50c91e8bf6d61746d5b2113eb356ba170a7f2f2f75cf0e16c178c5b4c06428797f2fdaa73aa2de9567ed0038239a4aec24be20d937f33605f2291bf426d6ea18d98b740e2739dd5e0a2377f0de6ddfa3d94f0ae9e6cafda1ce1b1aaac57c37d9318af3bd79b19c029893d41bfb7bdb1e472e9bbe061ef62fc24ba1e41a332f24f6258e14ac1c76d4fac6ef510560cba22926f48963ae0e789b1110f98b940ee90e7e32c001d68be4c3b84cfd4ef5a1794037b978fa7fbb0d047423c77e7f3642b6bc9ff7341e339746c78b60d3340527c17cf4429e4f0a5877de46b8b9a0857694069fe2c36fa2b97b639b335ddb6db76949118d980d8143bccecd869d43bf49b5b8428c71b1402371aef7ffb5ccf43b9749bd1869ae2ecdf9944708fe634249303185a30961f01292def5c38ee47f0904039533f2dbabe438e50407eecd2d35d94ca7dba8ccd71d4602ffdc3d9891f31987cf0bc1105f3bd24a19d0dd2d3d54b89853c5bde25e64c5ea63722a864e35d2c9eeaf134b088b459355a1d584cdc4be870c3ab815b7fee1af552c95cd8552dd3bc7e89c3bde8643f344fadaa84871999dfc6fcb9c522bf5b21321910ab6f615b9c02eb375762437e6c0ffb6393b184e86efb28282a9e60c6bc1d6a2616253e63be46542bfd49c6fa8ab5d74832defc9ba2472be4e9b14569fbc4ea1bac98025fd4f2f79a2a09cc7858e2f5bbbd3423155eeb39da25f6270230ac0da1d18d70dfa11af0c32701429fba88e65de743bd93c44cd05e157a64c2c45efef3a5cb7407c7475a07ccefec37fe6bfa15723522d10076efb66ce1a965b0d3cff97117084ab7b8ed6b220b05c0a2616ed55da17da0199b1d0031cffa926009a69b508031cd590e7f81b74689241b34f89a1b6dfc38ddfa071c68f053a41678bd57741bbad7ae1f5b2bca45ca3d492386dba77fd16245e43691ad51fefac38266d6f19c972634022b4a2ed8f87a578d50224406e7505c379c9c6adf0205324bb31c1263733d3e4f157570678353cbd55071fb3e0ba56d71a121919acfe5acdc366d4d0fdaaf02b301aa50dc23e7ff4f8a930100105b8e25d9af7d0ba56dda2fc554acdbee28e9d94461bc91ec6249154c9a9207aa0b5c3d6a64a71f1ee6bee221565e7a8143a42d77ae9b6cfd19246d3a57ed182e32b09708ce05a5528521b147d05cfd277db41e7ca5626e88a774f02fe9213c3bb0b5244c0b0cf488fc419d55da86b0c625f3e51066deccb3e0e664e63c06422fafad813b5c8792bd1f30fe07f1b0ddbf11e8560c5aa1d4a0e56128864f94f89dbf6761834ef9d8234dab72bfab119732e0ab8ba74ab0416e135d553c4f4b3463bb86d36685e93c212871e6dc6d3e61e9b15f0dc0acb13fb2ed01bf2aca0d2e87ef85ecef5ca5721ffdc535406beb39c33686d72513c59e1fc2fca50018e1bc2b49e53ae6ab4dc9177786f9205a443af3a6e2bba0d78e80ec9b91de68dccd5692cf92721a03d752001145440d99e071f7a33cddcda65d58c4ea3f49948bb23e8dd4d2727aede9dac7dd431bd92a8e6b26d4db40b8d5bd996ea1696b340bd6648d98a5f6397464f761e6e9876fbee6dc50f5006f9d5a567ec92170477bdd7661e5fa0dbebe61c88d9378c2a133e81e425de3b3f14ab817a1cb4f696e72165959aa8fd069931606bde8d361740afac792304f43f7a43042c60a1d4cdb3bd22c414d186fab7b7c580d72ea6c83bceb159e082110adc4509df6aa5a6487f5219d0b4538a2cd492d012be5b15461c8f595d652998578a8835c84549ee5c05511e4a485bd61d73ecc2e661e0677f95337f751f25d6a46ab2e0510f94d2061e81efa3b2e12bb055a906e67a90f5eb133814e181fa2798a00693f7be96b63540b4800eefca8e5d7a85d3e25dd5f6d6b242457c8c80f4ef7428dbbd50a0358d5aac81e1ad05f16f012ee20628252f61439a638a69e4d17c3570bea6f388660de0b3c3add4c0b0176c002dc34cf9306a7cab06a686d048050e1b016479f70be63a3f2534e8edceba848693e4a6bf557966437582dc41e189b03f442a2dc70d997fe2b6c26282b9287e0d34bbc43150e2292e7f15dff0f47c3c254ba7745b5868a1b9a71338423280e20c051a8f63ea6aa6415e37d76115049298f6bff3352fe3c0bda1ac050f317322ed444ec16258de65b73b3719a349840229d5e86cf0c6380b24fdca14a80cd3cab17af1ce74f30363c71370db8ef787568bef0911cb5cf8998753b85d041f6bef0aeec519829c2991ceaac405a5f22e177bd7f1832cd53a16c384ac91dde0c37ab46166528c1d1199f62d1434d9a462c7ee48d930b6f364ea11d848d7e591463357f64c40771b8a91a25d82f86da42dd7c866016140f80cafa6fbaea3b7e3c9c1ae7eb03e57939df326b33f89433d602d5af4568b4e5eb568f827c504452b50349395d5561b642d36a6a15406f117690bd6499c228e0e9910011ec83c6f3ec9a6c12be0b35215ca3ff588f21bab08b0bf6774c59fdf1540d140e45c032823129bb6841f3cb0855928ee651f122309e520c845146b34f2a790fa4eccb0309412260343d15e7c022fd47bdfd6056ff0326a2f1a813790e7a75593353dc94e45ec4c1d82128a00339633dfb4b059da8757d569fbac3cbb0bbee0910d943f3cea27adab88a136d651eeadb3088ebd7bf548507edc992d8c51af2e71fad25cad69b60c0b8b38f3b0286d63c53fa8dc2f03a1d5e7e75a7c6d0a29df4d5bd19eb4a2c4dbae89b64246deb2139f6e8585a7173d83631f9a3111ffb7531270739a5afe4698f2825d86bde7e4f0426079560901bc6548ac1af2d278c5b6fe15fb845abad5cdb2a1697812a003028e4183e3ead0ab1164d85e7d38840c09303615f3c14df28f6581d2a45cb3f6ccc70939531a2ff60360e3bed7469c4c9b8ea8217db5c14b2228987b7b4a4ec05cd410acd8287b6e923caf55602c469cee580f3741e5929b0b4ebd4892ae4a3a4eb8989a584303d4456b8774c300192c7829fdb093e2574a911fee918a2fba46ff77f7217320ccad0b06d5121cc92b18e8b15f9875aa25f8ddfa12bca46e6c449bb1edc520d387c8f048f12e5dd84c12b133fe571111fbb13a28358cec726e33b85106981197248b2539bfbaa9c79bb3ba840afa1b7d75ba9a6ced75d44448173fb0cae6b63fb1cdd065eeb253a03dd39261602346d19808f1fa55952fce1d52589744a826bc7300005c27f3bd4c708a63b6e2109bd77174226f032641aa03ec07a355b878bd090ddb02d63e6a6555389110ae27ca6d3bb7ac9bf1f6636367f60716c24c4fd060a8106c8039af15bb7b7abc75a59144d0fe8585683a68dcbc2d53d4c44c1b5f176b8a0d494bf6e194744ffc2791d8a0ca7eaece11633016559e2582b0975741f10524d0d8db95e8e092b1f478de14f7da98a1c8be940942070e957d5a6995aec02de5083b99fc7b5662bc45101f19e854e155da495e917aeaf94c935a8ac7bd154f2683583627d3b33588a508573ddda86cb0e2e73fd93ff08e938cfe4f64199dd658bb111ee69df0797890ffa51620e0da656c5bed205c9eb80c2aa30a5ddd8be578bed625968a4dd93237c40e11988c8bb87d4ff4704212fc5112bf8e6ff5c6cfae62fd228d8a64e144d5c15261f85f9c040ad067b276bb3403206962c27a22d5ea8c9dbe9379321db7d0807831eaa3e22a283595faf23549807f7957d9f13cb14cafc37222c763d5d7cb319ca9d499473b35628cb1461d2d0a53b136d45cc834b6ea17024be9b8ce94782d4007f6b052d08acaacc8ffcea44884884543f37c7c8929656d5b12ca7a6e9e2fb3b217a6f3d9afa1e569bafcb85d553f6be787cf90f874109eb0d77168622e210fe430074e96a7820db56c2b17dcd91d72e5bb44384c6c9bd3282a3ee32ce7ddc5b88a724cb0ea2dcc2639644820fa1e6855064867b11d2596de2c74b36d271613eb7c5e1060a3f6b2b65cea50ea4314924e48bc9d4fd88bab641c6d5c6b180a9bccc0d79a4541e68dc39911fb053b2cb7cf0b054b67e143246c7146c4ce38f7bba1ba058d2ea33a870fc414cacecee6b86aa7ee1d55378c668de447643079a1cde341966a8154492b9e88cfb441a14a867af95a994cc65bd986088b3248184fb7bf9dd94238e6bd1010b0a2baee644667f48996b19d01c8c3ed10bccdf32128673a05bfa61ffe43c6e25fee8b9657586981795a63d3a7b376016992b3f4384550a9d5ec8375ce141a96a329fda46addcccfd1392c6f48a42315ebc3768d95eb6a1c9d5ca0f79d54f425d3397177345f926ae2de6563229eb0f3b401721b5a842b22b6ab84790d363c9c4dd2f1f80b98f8a67a35e691e543784c19f6a008f99c403c04a770f19112d369fd4e131649e7e90d7cb2c82a397b5fdeda3f0254f127311ee923968e625d9dd7600d06738fd85f8fd89347049df07df7d2562103d314190fa7901dcdbd3f62f336e76e0b2803d77258022d9a4d744a818a1144498d36f47e8455375199a8bd104f063e26b7e8f4c70cbcbca36a2470e7932bc9181dd9b2dd2cd8a3d7f328398d8d9d1ae72c03f45f88b1f28f84b93f80753cb99323c0f7c6a48318fc5f1a800ebae8db9b528c6897aa6edfd9ff4340fbc0a3489c783b452fe4094952ec5707a7d4be87751d9ab8d1f7b1786a20042d6b590aeae217d1e21ac750dd33bf351271f17a1a8cae131d9d51f5bd4a1c1dcb1432e37a20bcbac8e6b00aec89af15ad8518ae8f263d13b180d873280501a9d9ed8f33187dec0864d931b3a68c48d3df53e02b0fcd8da9c0816c7cef3d541f55176d8b2f17fece27afbf53db9c367048a89624cbf7be2d3dc78829546a1ce8e22feb505179508ea2323d59a1b075a2d2d56bbdd563da9f75a73c2d54cca8a3bec46371735c01eb98e0c89dae11af674eaf34f2bf6519c0c4e96a15a18c55858c295318c9faecec57c1abf870ca0270852e242c990a0f8694f5e1649710f6c47daa05143bbe5e27ce780ec93849aee0889311d1cb11c7ef5681838c2fc2d42fe4e7f4ddf398a0409728e4e347385e62883fdd1a7775c52ee1f34bd711453485856f4da8115967d69247619521fa6f1c27002cdb812e761776ea8b08ce47f92269401810fde89e734d5e254f729921bf64b10f414f3389af1ce1a1670bc802090e57569f63dd45db76163a2f37a840522136dd61e8d54042ea70e37785e55aa4e9560ef110643c4153b031bf6cbf52b00e33f30dd905a3e969e8ed6bd15ee25f1515e8709469fb1323d7212d9c7321b3d9f6b1641b2acee5cf863aa7d7d06dbcead4d0725ecb5a54a3eb103be51818b8f58f15b9936fa89cad45a260b495c6727a5ada4d869afeca76b97f03817e9de84274add5c89c80f800362d0de05d95ed5217ab880bef404a0853692dd4340a4f76834fe6946977a759290238842c8682f647b40d155c083c5787ebe0f9632a9ac3b373f42c6ca95f3c36fcefa2cedd0849197d021dbd0bcb5f1182c40fe97900af9d3d9d8fdef2263f9602f455dd552a0f7a77f485b42c8880849f3c7676e9e964d57db318d1f8d5fdc07dba5df7b47021648b338418b49917cecaa648197c88ab424d3f0205236ae1053bdea7ab4331e2bc54759cccbfd9f15635e7454a2bea771fb2d01eee6fe1b4e85772fa58b6cdc3f2d3e668ba46f81bec6297ed0a887831e437a072d8aa52ed00630f7bba28f6dd8904f6d8695948110776a9110f77aee76c6667d405f7bc1874f26ddd135b59bdb619f8226bd78e7641f300d464130de40e341caf28477f1a19d3895f6d9ee328191f82b03b3fc764edf527e2bd99e74ae1228cbc301c67be6ca7f90fbf84f0e292a7489b0e8d0f1a756137b1a38205188913ad66944f36200122b47359fa2581cd72cf349e92764dec26caf2b924e98a4bc8ed03f947936f1087a2b89982c43aa6abd8348ff17d76bd9369a3dd0a4f5bb33b661c53c14f1ffd5524c3313899b4a0f40030dd4aacee66b7e6a8574cb6b9b3ac9fb3e94146934ddbbf4217bae45e8dd851b3e96b83d1386467c6e2bb016b304b801e78a7ac20514a2499c46b4c7c96b4b43d7a322b47c21eb1c0372d35ad87c265865b478460903997a9b7cbf2a3651afe7279ff4c0359924789686b0f5d40ead0fad3adf5513020dcdf90d85dd532b6670995e52fd08e602232cd1996f218ab61e8c8f05765fd2a079c6ade40d1adca6b225e87a44ee1f40945642f3efccb3e501546a141359e306c4b6229d0b2400334b451c614c34b8d132386c09679d8076ec1efe2c664ef29870e427674c3955e13f4220d5107071c7347d01310b439a5d39276c7b1a3b75708aaf824dbbfbe6ac37f57e2761b7e46adcc188a0b3535c07d865dc38edcc8f5d8ddeb5203e710057af673107e4d6f08aa003a358b8bc5a2fdc95bbfb1fbe8c71b2721b97ff6d75958cbc1297550253816d1a84c269884f06a8b3ccd8a48a875dfbd77c2722ffbce1b789e78aee5f93ccf094acfbb3ddf7b8af831a13d75e2cba714e029d600afe0a8a5f159cfa00e5666b4d5b5067273a703860657f2ccfbd72cd8d568f2f3ebf2b847ec306086d335f44fc5d9b37dc6efd2e753f67a365df234599f8706d915e3210470ee401cfb2eb7bd02c1228efe0bdf77121e1a4630077c988d80f60693a970f012e3ea59a979588ed886aaf4cce48a8e76d4a2548031a40534e526fd16fd08a3366e3581404d94ccde656cd319002dfe63b1894bf78ee204a0b805007b7ac645c31b749e32d046c073abfa55dfc9e28d4eb46e5048e4ffcb1dff05356137330e9952cda38d6b8fd139ed4b2bf726dc54550c4f35d48533edaa3a86e9931028111f92c5a1f5a37801c87f0cae91cf48d65065f860030b17e358aa86aac4495ebe2b05fe2741dcd667e2458bb96b2dc80b36e01ef11a7c4b609374e8961c4526f4cd4f41d3a77993f516f34ec3ea84442aad17049bb273bcc4e0ea0d0e0c0140f81db8048977df9d3baa5080b05c10027b05fdfb669426c1fbeabcedfb0c394f9aa521eac28b8568fb6578d376849f73fdbea8f43a5799ce8a60077c3cfacac685885cef4355960273d88298e466bbceed149f27409615a15d1516f8349523289e1ac77f220347d1a20c1f96f468b2ef98f5472291e51b195012683aabb63bd833014a1aec8ecd0981d0abf42596d1a002befbb37432dc9f15c9edcf3a3ac92f206b0f162a49d7efc6a33a3d8814b1cbb08486474e6e6dc67c85a7bec0487f9d02a6c7baebf80b7c17db36417e427e8587093a0ea09e4a1c29cd5d33c86cd2a5bc639542c4763de244636421b728a5667814cd415343f851d524a09f21945f75e5aed598cf708cbeec40daf64b184b86764c1963ddbd501d4a2b019c78c782805ee37998795060a9fd8152a499d8b038f8e435e05bbc872690a448a8ad888d835bd89662234424201b46914e49dfe4cb4a53cd95203941dea04880ed4ea05a99918bb5991f81012cdb20a535f721768b253ec821ba798a78568a23f643ab8bf9f8b2d7ecec085512b44f14c05898c0a0b60aade297c1590f1aca36a7e267f5fc4fe2a8b2c6092d6ee2f00548c4699b1020131261f4119e23a0ff4f071b02d3c2147c9f887cc1382d71eb9e9c2e3d859b2ec3a51726932a9b74a413d1dd4c0dc4520725ef3b8666217b51d2d4798a61ea038e208ca41d0e617f2946c33a6b36b08ac6e071c3c8bf1d43804233795f256b6455205afa3a9c80e146cc0707dd75c9ea3bac8da41a9b0e5611ccc6d346239c89795c4daa4c71fc3954755b9ca68f15200f93d32b1956e2e77ed2cde4ef95b6d450a447b2f5b54277227a2274d04b9492e331c61545684339d53d127c3fd5ad3325814faded27a5af360dc29df0bf2c08b428aa444ac29ef930a447797705790edfbc09142cc9614a7ac48154b5a3e6f2104a73dd2f236390a026bb6867d8fa14f8fbce05a737b686f85d0aa10fc3215ada177f995546c1df986ee2d69e6e967e59993dda45f90519d1e0769c183d410100c5aeedd46d0939c381356664679a5e5b401033cd5deb238dc35855bbccf92b85c7e9c98f51a9c012f208f2002254211e5f2456e372a2fe5ad7cc448c67b02d6a5076e7ccfdee6ce18e8712a8a79d67351ea78df07315526044084226b5e90632fb6ae0fbb75a9baacdce5d9ea4fdb54f5f41d781ee7060c9b16b9fdfcd3034bea0e071b335a23bd71a81f2cfaf80953cb6b0c7c6cdddf45fac68bf02ad6a621af81a67b90358a5428071f8b73fb09a402533ca645ad106ee002002b20b01a6f6b2614c02f63374c7b2e85047b08c6b2a2774564f0f2b8d63a285d4a0286b2076dd2b4b31be2738449b0c1568064b36432b1b906080659832ed08d8ee7c021108f899f04836e69c9abf1588d95482f584399c964f4fcec139733ecf002496db83700b000d40c55cf0d74e7707c10d769e856f0091d657c631cfd126344620b5135ae815f893dc7b301717149e5d982967e70b2f02a1e177ea412152f9568a4d2e632e5090e3c2a8e0368c35408e382e8d1c8ab2b84a014c95dde44ffa23a2863c557262e22cca7ce8a0564f915fcd39acdf4953d790a9fcd859ce1a900b246298e38bf22dc2d560e01543168a658c73eb85081eafd3e336e4240e193ad6f51e780f90072559d1388ef636f840e78855627ff746335b71df7d7ce5464ab48c97cf1ee8a08fd13bb2ddea37f2d5bc28690c922d10ee82a39b1743a2e1c585781fa9dcfc72f5cbc0851b8c3ca7b0ee72c323c440c83966677b3fba6885ab54728cddfc1579fb41a1e8cb355ef73168a1f6af9f612d7e025583453f671186174b877428b3800aef3b6d6f05b38152b1c5d3399d0df419e933cb0213a24a4b9c2ae4c630c0dcbb279909640f124abdf5885c10e64ea06c7e7bf13b2978dd7af74e8da59e75bffe706639ceac7185150e59b1b18f3bd671661bf7436c2cc389f538b130a6fb6d7670c46ace9decd793b9d9b5cc750a56aa4f9f80a34e1a35b5699b11ce9dad47eacd817acddacf9833255b1d9bdcb6ffde70620d47ace38c751c9958678d3b4b70630ff747ecd9c3396b5cb330a0f766ec70cfeacc7dd9d796c9e096ccea0c2b5e1f3d119e28561264384b41eeea0b0300233f4971a294f412fd8a7da4a4be4217c8e5d4b569e3543a7a5f784d1d79969ca30f9757d74c35867d3a34548f0d5d7456a5466dac7b2533a72ea7c646cbe5ccf38fef7a3356852b365665c99873926deb92997a7e07be307c345faf211dd7b58c686fb11d3839631d31897c2f39367c20c1df61e61827ca492ea143de71fbff3d58ac4f2649ef2e79f3696d6305d366c6b802ba3779fc71dd25f99e7333de49412b45f73e68d94c7c69be075487d34787e8b0afdfb17081eae496fc56b31a14ae5310ea990f2aa29b0dcd26ca55c4f90389836e8a20a0c4fa467e5c78c68a2e4d3883e5878a6ca435f3681f12d9dc4e994b7135468661eb9bcad2b04569cea119eb6ccaadcd7edf9d4f51663debb4776af863f4e212afced13b15cccd6cba87c3bbcd0079dc8c763c2a2522ed06a24cc05ab7660ce082168468582b2c46f163f52a16593376818d04014aebe6e5f86b46031605b089dd7764941342c8d78c29d4c800b274c4c2b66516fb5b2df3dbf9a7cde0fa6e407bff1dad4321c2fa3382627af0a123b96a38cbc9a8f356d4f01a8955c5a319b498a88c0b31d266d6702a9e1f09fb4f62e2aabe159a25b8eb12e8a38dba9dfd438a9a05cef02a64a2530986a386608d89fd51de7b0916553d200005c6e488ff121c83e3af811b941a31ebfc6d5c0f12bb2e629fd118f8a823ca2267ae85b4974b37d6cf822f11ae471cd876900288689507ccf09b4040c1b1e119761843551111a3a7d4a20294b440e3c3e3dc85055cd53b815a9332d94e18ebbbc377d59e19575e8f9089289a8e70cd08d69b3353d4c518af3231be6cb8c89ce86179f1296bd713a244b40a8221cfb4e555672cf9a04066b8482e15acc67d7e78ccecf44c4860a70b9d031ea0079dbd178829190123ae0cc9e45c7b69212fba860bac1977d848c7ae33c4356f27ff0e288499a0a64ad1a5cea6a7731f4624a9c16df61ff6cf4e501987d89ed8027b0da60d79061f741fff6dc138f8b0c2163c1fc66f3c87b885b42c23d2fafa98f72283860b95212317e541973413a0e3b9c3a713045f53f654206c6de3891d08fce059c3729ed074b9e3bee7c9180f721f0664d8cd3d9ecacae3c49a4d9fb987009130d231dde37dafe62213c50066176c9eaac4efe83ab885114751a92598a27cf3b0a557217b8ca89bb367af4939297c043f45d3391808c83567a2bffde28d9d7637da1986ff79adce340885400af5eb558860fb8030412c0a8c2b7f95e3055440a17ea88d2202c4bfbc4768095a6bf48d6cbd48175e8a7f54daa1947c9a7bf9a488018e50938ab1e92dbf95256f5da163bc5c2e9b61eb9d3d74a5f269bac2296682527cac6887ee7abdf7bcb3dcaf207d55f0eab5fa3bff22b2bab3457a433ce332f893ce4a5a1aa9981c590f6a3ff24a15d514fd5493ec41883aee2ab28f1d2fa2cd2b12cf7f59010bfbb3a270663e2b5de30602ae09d70a3437edcfda3d1c1a1fdc044af24ae9d36c4a24e00ee8e66ec0bfcd80640a67a556d015520d1de3804bc1571b154492e912af14af7d86d8b1be3ada1428d953a1e1fa0849218bd671c707c204fbaac8e58a1085981d5d71f2afa9d7dc5f7699681425fd5a39c6fe7a886f58e429fb29b155f888702f4aa415108158b415b2dea80e05e7b41f8434f5b8a02bb0fe32b0772364a9f3d5dc16202bceb11d07c8704a0c8bacca0a9d92d63e3119798b30d4f1b1ebcca0f018d666195f1be666045ea1939a8e8a0ed2a71d0627427b7646b13e298ffd1aba1493ae2e4f5767d662d4477ef7814d7c5f3313726f5b315479cf3f3015b6f564be097af4f22e79027015c610c2c5333780cf5430bbcf149134d598865fe8108d9ec2ec9dcd2bede931467180ca51a065fa668d41f262696d31735236a73af77f53e6c65a3cc09f65491e660b0c9deccf5086c3d0fcf12a6f0b98c49302f69d64da586344760445d552727ef2415e7781f545b51d54e9d5b20105e43a069afe6a83d46450882b7dba3188660849ac1046383d635eda8ca605b091b208b0c2355407b51d2848449bde449fc163be461690170cef7e33c4cfa83de787c809ab4742f07c8f599b122188d0017cc096af261e6cb5fee1db7609158c023aaca270503b33163bb9e74e227df45ac37b32ddd3d0463443a12df09e2efafc64aa2b7cdafa3a28f8fbe23b27a63cf8bca78a3a9a48caa26da0bc9c630510f988b7ff70a198cc95790c4c5f2ada1c1a55e001fe031a0879dfe1e85939980112681acb4382fe658542266dfd7a655266f405e2e977f09812c2c873aa7452878a591bee408fa390274a97bd8c656399c68012c409493d6183be077e83719ca925f32f4a2f42a915cc5161a8cf39ea3f2c6a2f3f439e4a60b8c95aeefcb983e774dac6cee9ad025957a0dd5dd7ded4020ffa55aa02effebdd2dae8cf1f2f65865d21181116be9d3feb243256de1c01a82c5c6488b0405b229cf2dd7271c62a9f041e3efca4843f605f508fa1d4e544f9f16e38e0c1b30e4aa7a1b1111fdab70c2c17aa882ae37d1a08c15de07acc38c2cf9afc2c6f15c67e1f8762f3a551416aefff673483de56e1f3cdd8f8f4bde7a1e8ab47058419bb0f5d61d1d2545d86d6e86abacddd7a73dea7d7154265985856f3b9b93b1911880e016807d508090ced04f36f2e6c065aa3338fb4f75b0e38d2b2d5cd72e2b7d757462c7c67ce5b2a492250579277bf31b31df5db7f3a029eb3df42e9705b88948e05b01890888b109a4efa480e376c9aa1823506b446aaf0488a5799fb609b58442fbfe7a5c83c47515d57f07a67670836d9bb44a5207debceffab72c97e971be7a72cd7e5f17d195093cc2e48622fdeff8c5322e0e42e0a005496d59cb9cb9c1af20365b4254253302f235e21d366c5c480b1464fed7f7ffc951c8b28fd9e0a39fea0aa8f0c52048eaf55b09ee2b79fe1eb34752451d957c4d92378607df11a691ef9f8ae4eaf1e29ce1e75e7160b6074d87e0f3d12198f87c751f044374143db6042b208b4f890578399c6398f0efaba03a48d6f5a8848c07c0cc2239486ec03bda0a1bd948184944e0ff1866961aa506da65e11911a11f26760941cae047523a45f62ad30d61e5a824e3d3fa3f2fe8103cada9f32aa727da71197b3b607fa6ad42ed5346a2cf77a70e6d758bbf779c6f33b87928abe9451d80c983c05a9105bd499c5eb70e686d29ca1ed96389ee9bcc8b9e844e20832984ec6554f214ea40db6997587a5a311a086a2e018f7a309ef615f3959a6e8786c7e803dc0210d5b8cf71be13838620c73702143f2e8a8bf4118fd4877581479168cace33acb49f7106c83208ca002d08b5f0e41c1a03d2b3e8c0b71b9d26a088a885b115bba5f5cc870da187ab9d8cd59842862620d91b0fde56e3cc9ce0c635d912e484610be0b5ef6aac0a90c69e478bc3aafe06757abd5aad4fded2a68d9dc69d9fb8163bc3da38e7e108737c964d4f64f918063f937ebb2f5365cbf0b8b25ebaccf01500cb794eaf550d6dc1211d761ac7c266f70a2f526bfd841e3eed89d8c81c328a65e08d38569f28b6c9b676d3df8b80dc363c131185bb473e3ca32d4637253c6c0a39861de2b115371b9fb3fa27face7ec45dacd37331f48a5c3c3991d5b704b9b8f6cb08da528585e4efdb067189bd494192b03590189226d9e9d9b5b97adc36aebb86861cd80bf55d53986063731442e9bfd3dbc8bdaaf3e9c6a9eccaa71940ba9aba514ed2a900fd66deae8191faf98e6c6c504e396d6a0481fc436f59c8f211575b9fbd018e0435923f25f9682b2edfabc3e3b5be7a92c987c68572fa47fbbc76d611f410c8df6bf840bc7241233c3ff605c4c401fb0581c754885c461ea934451410f97f89ddd03bee6ed84507dd0005be77cf90af4a70d5ebf3300635c3619c2aa694a96065846889a44b207a475306f46365b325afabecf3fe7e3eaa2ff9c3eb01def7f8aec17d60c64d47689c41b8fdd197d553a885fa30901a27064150183fa1da41ee12f0fc0eb2df49c601715a208f7c7ad64331f0bca53801399c272c9a0190ca58296033b18ff4f3676f8472c82269f02ec722b19f60d82110dbc5acf2dcff3c7faa592cc52797a703d791e76edfc2921ebec4f971926926584f8ee38664a83a1efe9b56a598c7a1f80a1a4ce166435f46e00790ab1409ff127a40f500418a75e7eca31432644199902f3875e48d9926e6451b74c350f7550b0f2155cde035a412faa5c30d4594d1b019d2ae9cccb5831bb5fc3efe4e7a4622642390dbfc3cf902bd526a665f7c944b84e8c0ad5b6080e80a0bfe0190890b7ed00f90cc637b327552fecf942d80e2e9f7327168f9f30c884df3d6db78a35da9248647777f70ed30a800a4c0a384738057b4efdf5eccfccccf4fc2bde4b88aef2cfd7cc7bfdbc82e82a7f5d020f677c6c0a667c7aa6b2e79f91125ff26f7780fba8bfdd01ec9fbe991a5de5477933477495df8e80d748c1e7cba208c3717e782873242383145ffbf3cb60115ffaf3cb24cd648e62a1cc518fafd9f3cfe4e49f41a22eee4357f9b3cac78726b6024e138b32657a7ef933b5d982cf4cad8522d33543a3abfc79f3d40ccd0507090fb90f2dc7a42695158c9309f3846e7b31de9bf4a8e464f4fc5a773bdd9ea54d4dbb5a957d35d69a72d2f45a77384470feddd337c960827902f3031827b3d57d7e18a3d9e23054f4fc9a7b29c9f34b49e96b465f287acd3e17154c4da6165919260acc11ed3e981a4c1160ac90e1421ac7080f5f331c23b8a689cd16fdfc3443a6ebb44277b5e0d3c28c86c7e3af6db72327addcb677effd512be595124b99a5dca4e4a4d4526e2935473b1c223857e3e2bc717a775b3f7931a7051fea7acde62a7ffe385f339c22f8ce04f3c3c07932d07fa120de90397acd5ef95f3ff1d585af14782c4d3a8fa5888548e648de60b9014b0e8cd0730d18823044264fe6bb4e7a2fbdeb58886210bd244556fe0f0692fc4ade0422cba3c08509f5fcdc2767ce29f7a131dd4edd733b6d157afe192c66b2f8167c666b7f7ee9cd44690182872b345dd3011eced4666af2c6f461b6a4cc5629beeae797e1135fdff3ebdded745b96f6346dca7755d9f6b42faaf49f63aed0a8ebf4f12491f957a258215a99a2e7d7a78d7384e318c9af35353dcd0ff106ef9134320d6cb64a9f9f8627be6a4823a4e7d75db7534fdba2f64d71df36539bad1a3dffcc1175cdcf3f833433e56792e24b7efe192d666bebf965cce26bd5f36b17ddce8b2d557bd2dab26d0c4ebfde1d0e119c9a3e19222bbff660f0764a9e1ee2695964e5973ad6236f6821228dfc597b00043d3f8e79a363373c1659d9c604b72e3f9b09e6e7f1040f676a326ae14c4dc74b778128b2b2d4d57be9d2ab415dcbb0051ffbd265643c56c043985a291659f96903ba4928b2f24f20b2f2c7ba8ef5fcdbebb1e19bb7ad443f183c19bc9d4e87fb74c821b2f2efa8e9484edf23e74c676a2a3c7ce66882f9e53713658219a9e79f4184cf0f676a3dbf0cf1c57dfefc3bb3b5edd03defb6785f1eb1eb2d7b55267f3e7056c8818e52ca393f6eed8e39420f1c72e837cc96bd36072b8baf9a5ebf86e9c23157f56bf48a234e1c7bcf55fdba71cc9ac94df965af3e0e3ea4d71f227b287bfd60f872bc0ca1fab5a8d61825f4a83f4314380186e03d6ab0e1866f47ec127f951f81ecc003ecdbd192cd6ff3a8c3fd525cb6c5340eb680e282a25effeec017630902990ba208c505307001a505427d7e0f7c6bb52a3eeef3ec21e1224b22897d0ec7bd7499ab590b20e3f8ef972f4f920debd9e349623f8b448f5166561dd827b228810da6e0c02c677a364772f474428a220451201f9258b081204839d39b299223836e0005e9d6a0052b88e14dbd6854c410489204476c119b38f801086a39d39369414e8d288a50a4f7a6de9ca224c851b7a9176b2003261ce54c2f86901c5ddad49358141124cb995eccd1a63dbd184462b12a92c8b9c065827ad108431cc12747ab6ceaf1404bf0032437c8b90067042a92f010d324e70228a31cfaf1d90227031034a12847a336f5740e822051839ce9d58892a3537b7a314d72a8c7834482628a20e45c201e39c9c92b9b7a368a10448272b48b4d3d5c821cd48c7274a55376f1054b29eca1e329846004a19ce9c51924c9b9c09435888eb29a0f8d4f584e7c95f8d2d13f789d20d74484fa9c62490ea8a3ccabecd7838d4ac36853024176c374d1e4c877807c08c8cf413e90d9a2e9f2779875f992a7d299434a5a43849b1e35c89c0ee82867748c3975c79453878ed4653fe77af26b4e9dadd942bf18e65780761f955e60f6302705b40fea0308edf46b995f0cf2bfe8d294ce6c040a7ca81041fc4041093f52a4cc944619e58708dbb671bae8a7d6c4de60498cac217ed8903119aadae5b74651a300727dea3b118de47c496795554822191444e0b132278060c92406538d090c30893410b4b1a951641b9bc8a4cec8442ea973ca142018c5de558a548da24aab246a914fc02384164ec8f992cefac3934f1451208684a0d78f4eb830c9fc4626b268091ee841afefc40f1b196550671c9a22dfdc30a1565a8e665537532672bea4b3feb0717130a99156ab14414828f140af3f93aa1319aca9a9a96122c31c28f202d9147336317f7c4491684e29eeac080557ce497fc8a429249d951ea953d8202903264cf4fa4e4c1f28147c804d1f2451a64d58395fd25981502970a8c4868ce0a851b8c8443144112e350a958a8951347222d3d8ac0112417afd48ab525009a34dd8acd830c9b966264326214e00614816c90be4ca00087e20363249a56e6a14e00f904905529b90916162efdeb109393f86974fd023424154418f5400a653a087254f9270a0c41390a355e184108e36a7cc1a1010734a529535114452242a15114a42249a13362790cb613018902b63d8892ab090b1a4274d4e90546b9c0e8ed841ad680f410911144de1c1044162c2934f18e91bc0c0c7680a9cf10f9b159b28a450c5a43c44c41031c967062bc8c2e70708a3c9109480b5d24a4d42b18923682621d9e5cbf9bd7440c8d007a402a9524ca4190504444ca4296ca08c6a10841f36aaaca23e310325b20a4954f382882948d45c5b658fa15e2854327470c40e543f522c84a009117ea4a2a0f669b5f2874c14368687c16040ac7ce2c78e3a38420729f8b17fd858af95f618a4144400e1878d4d31e7a4b45a0984f64ba50873af9e4efd2a75fdd8ab27ff7e59a7072a65143d8b469107d1281a451ef42678ac8559cf7c864e1fdac0415bc521fc0447ba4117891b54821bd4b747a26fecd2f1d732858737a8cfbf41dbd341de20243a848ccbbf0464b82993706363c3c6cd36a70870d474ad6f3467a306c7ed819b530535322058c3cd09c4a6c9a48833f71963ae3e1e806442afdcf7432675fbf8c19904385ac8d13aa72ff7851c4d26957028a5981ed77a98a5e9eb433c9cdc97bceed3719ffbbcef0747ebf4db345a039d23ddbf6d1cc771df49adb5ee64c9eb2cfed837fe8bb7f5b44dce9cab54394f1d50f0ff6ad327c7799b8791ae005f4606ac3d6c5326c1c5c54a2836604d8dcd3627103d5d9b669d737ece5acb8ff3dd039099bf7ef81f732174cd345e3271950f6d3ac7e1e8f30bf15f150ffc385715b8b8876d4e24b28ffaf72b50bb7c2d73c613c8a1cbfad2fb51d37fd4f4fcd6a6a6665cd3c31aa4046afaf6f99034427c4f50522336525dbbf00f656a6c6ce62ace950ddb0337a7087a7e78a244d131c617f4cc0f38d75b660eb355e7c4315d2c1876eacb50437d1ba62bd2eae350df011068d2ebff9840a6b4a915ac5090c8e4f723d565e431341ee2e815078c22415d7cfb6bfaf8794e2d7378d09d4d11b805f8ebb780e9f7f75079958f0799d3c2bd02f4abbc02f69fdee4b5d0df7f7aeeb550fd2a5fc3fed397a35fe56be13e5b842452c46039a68fe7481224a181e94d1f0fa657f97ac8e1b84aab941268b666afcfc374c92748f5258f8cb9687a827a7de903839caa0223749a5e231424847a7da9a4bea43bcc56f8382091a0d78740c529307df52d50fa8e7bfa4dde7efc49ece7233ffed97949f0ebed2636e953e76cad0d3dffb43ee6631b4a1ff9e7dfed0b7ff89816bf9e5e6843997ea7fd5ac19ca9a4713c8891c6c88a359ce80825890692c08094d053521e4108948a1e442840386812a1000dc518231420184001f2a1508054102314a01fca719ceea42c023464521268f932ca131672caa9529b325d7e568b09e296bc9bcc16ce79fb4c9794a208ff9eed23f8f7cf747139f87710fead64ba220dff5e325b11ca12401dffa6cd564cc7bf87b4e8f837d12e9aae9b833f4b8b65433ed4c59304cf9e74fc2adf0f1d3ffed93c1d3f0ea2751ca4e3c742d4c593e462a0633b65b692e20bf744167efcb609b1853f1041fcd84ee918cb78708087db67fbd4c7f306063cc001f1b5dd218810848e1f87c9d5501094a9ff55d3297b1820dea8404e40bc7165d286f8dafe0ed1712c7a5540c5838ebf86f8b2ff6382f8372f87c8c2f8af4cde9840a4811fc72c3afef00e81231eddd8a3c8c2167fc6cfe309be792a3e918573a7e3a56b5a64e197daaacc3ac62b4591854395193d8a2c8c6776ed2273851fe76ffb4c10bf4ac8a75b17aaa3cc297d4db5ec1490ff7e3c80daf2f0aa4e031ef2aea2f465cce1314a9f33c4289dcaad22838b9b2da18a16251cf5f936900065093bd0509450a3184a9f74d21920f155aa6026e99a0275196594b1a6a0477bc44501fec948baea415adc8ce89172d58336ae9ab9227ad747bade4654fc55e0cba8542ea513d83ca8e2a659e726e83cabf8ab544a702201aa486a045daf8840455d84a0bff05111e91a06085836f5e26ce18ff652ca71f6c7262596386eddd2d3b58b077a11d183363739288d3144eae6419b9bfa22048cec3be0f29fe2d4e340af51fd9499fcdb40ffd48e19d2e3cb686026089a5817d22375d5b90277f578a79e448a2fa9a2ab1f645432787adc3382c4cc5536f406a4351860f9a0c25681553343c60a4c81664626e6f31ee625864b0b0b0c158d2ddb9464ad536f07180c96811e03892825114b84480898cca1f853f2e99a4dc85cb89cf9e0fc9a222dafc360679b321e670c67091ed6edab058071998403031ece98ac00ede10e1d08ddf2b659918405b41f3229253fd504715e000493c431c263cdd1c94dba72d8cc5674f5a02bfbf24d2f3fee2b4e0638e7aa992b6beddfada8fbe215b8e318e1e1cd072ae1519b5e7e8d46e18f52e9851570d34b1a4cef43f6dc08e9f6874c0ab72538f7f369e0dec77c6c53a68f6fed65cecb13a4d9ab139cc1099cbea60109e7992b1e2578189342495d523657f6e5679378b480c7bfb18fc34a6bada55b8e011290b9435d432a0a4a1a5d5149a32e081cd174548ff6d70f78286552a6f203670931a1020d0ca9020949710944578400044882608219e4c4ba046e04d7b5872efb17d12a8b62953d94459d7e7c45570f489cd084134e3a4094819e1cfa3bd105e3092c72c08320246511851cfa3da22b5681c5d10f332888600449c8a16f4374dd15d0c0892259d0123fe4208d808a2d78e6bc40ac07f1a9da3c55fb5194f2059994554e993317c2651c8dd64aeb3445d6fc1b225ee9873f6ed09be22bda24c13ae59dd6c925d5ba4456279724432e082effdb33c66f84688b748fcc16b5d6224dd75cc2264dab85129dfe854d179743ffae60a8d3bf438c9043fff6f8dc22b315a1bc40caec67da2a21608ac2f6e1e6c622dd23d355f3afb24817a8d37ffd808737609fe9010f6f3a7d900a1ed674fa1f103ce6c49c1e727ac809e31197943a02c751c265264865e2eb4764c5560422489f4a1c257868912c12cd9dcf167d18f1868ba4115fb6a5d3172f99756c2e74664beb172d92f538a4c8a247489d5a9fc8a235c9f41359b4c234113aaa823a95afbb2bf8a9c79cd46927145fad253ad49e9366ab46a7427d4ff994823d274d904ae12e24b1a4d3cff1253b1ed55e8c33c65715a482abe5d62fbd77bdd4f5d5b65a3aadb4b8b45f7aa6aef3ce3149e038dc304117fdfab7df6bc36cd5e8f7717000047ee4405d2a7f7f87d9da7f9f0798f5892f16ba2bc7d55cb7233b1e7597ec36ddcd39c75b85ff5cddcf415d0e90d2ef9bee947ebff485718709de1b264d163c4c5d97d9eaf92bfdfa3dbfcd6cd5f46c145fdb735bb723bb5dad695f1e23cb8609e270c3046f34e2b23c04b0c7ff32135c7eed61ad81c57246b355a3cfe76a269ff89ad1e7177144a9e9e2687435bbbe9e2ee2a24c9142a3d30f08ce22a32ece2873462c321659a7d1b99a0fa7dc8caee6538ffb99e0e480e66a724bfa7c1aa7a44f8ed62792eb435df7cb59c55fc5f9e01cc127a5b344296734c1c9d56610316209aaf326d1f2eb6b3d3775410a6e5fd7dde96c9ecad2cb17bb32a5396a213b1eb9dbd9b86e47773bbbdb791872449903860996e427e3f4a457da008f0ec06182554a19a39431821d8709d69b1e82dd0110c8e2861e35d4d73424c16908e2f6695001b72fe7cee4f6d51b773c6ec63157b6d3413b8f26f0fc85b9abf41c657621093ebfb403d34c6e1c233cb43e38449c20dee092c6fc59c4cee2abfe3432259737b64843feecf2c3539f335b5864c93ac18dc7139cf389acf93e7d565a64cd90bf74c9cd64a928b2a6fc909bc1224bd206c837cd58a041a44e5fe31cc143b0560f07c827bee2d3274aa2b39888628ee2474d443abc8e4a8a2cfab5beb63844f0fb3be64bed05084fbc542db2524613a42f35792355452a082f4048f1949107c368df7ce734114d5452cae885118c58caa853231929068b7823e544c61cc548d941169dbebe947eca89bcc1451169d0a7dc143be8f465ea73b437d122eb7a2e96c61c8147916563649145ad8551ab75faf6451659b4d6e957afa345162d2145167d1ba24edf0a457c65ac2530b2e8d798a309d218a41829338870f961cc118894a7682378983d2bebb1739152e62718e79c734ea93a32e910b436c949eb9ddc9cb4ba30036edf5a6b2d0fb06af7943199c59d0ea594524b2d4f45e1dca606b4018d302204fe51b82a8533046ef313270a57a9543a299752a793a9897315153aa58a4aa96432f1793a9d4ea718b1ca3ca150b51024d9d4e02b33c1c8a79dd3ce39658e3b955a5971e1e2c50b150c16969616179718315e327eb92f2f2ff6e5c5f4627395adb21ed8f58badd2599b33024e3f1851c2d8a84e476ac3e876b0481696b80263afb8e874bcd8d1c565bab8481755ae1dc74d8c979616179718315e5e6060fe63625c787f791995f6750c7be8e166b1a9e93ab6c06c9718fb3d3aa5277ff7e9ed286729b400ede1fc7287892c1bdf0d407a1ba6d3f1de8ee976cc283365a48ccd3846e018c1311213232365228de974768ce974d02e233333439302c8040fb9ad33e88c1933e68c1972060d4d0a20b85ac9903163464d0d8b66a790c2065772056eb0d3e1b303c961067c829d0eda5732e28c193364ada951814e15a40af1cee874764da7c359554a49f98e82d3b0a9b1020b2cb0008310160b0621dcc6d61cf379ac877989c162b9b05a582c160b0c164bc562553aa50aa59618684461270b3d34258ce739679d177b5b64c919d6b871fd50f7fa7a862c38d8ad4b683b089abaaefba6cbdc7b4b2d31dc7e1f01ddea5e7b54e8f177ebaa52b9853d5d74807352295313949696ecb7b5652d51d3e36cc9e8f15d4882877be7d95af5f808e8f4a348c031d2525b5ae8942d13c62c9a60fc53742225a5748b5b49fe16f3f5f45e1e1d5521497d8ee624a23e494934296912751df227c946a32e7f74d097321fe0d3a8e34e07cd9d0e9abbdeb6527c53ecd7081d65429c59cf47f02d87c8ca9c117c763abc6e7f222b3f8e113cbcb09e718ee0db6b59e394b59443cc397931a77ab21fe152e3a0804754127559eaba34321a21687a7e1df5c53182872bb409c82874184891e5e118e1218c13af453eea57fee4b5c80fc9fdd3dbd72b5e2a857ef2622dfef6ad92d95a79fb56c82e99add4db2995d6659fdd8e523f4d892cfb384970d46c0a5d4269f1e5e25f6818dd0e8b4ad5a252b9a8543154aa17950a46a552a95eb8a0424b68f115672bdaa309462979b6b6e2d9ceb329cfa23c4b8b2cfb365097651257d6e88a1b74fb368a6e2b6d7bf56782f64f5e05f26ad0ac4a6615f2ea9209da680515ea7449647557f096fbb2b7e8b8fd7ea9a009da9ffdd4e36b27f8e828de2c051fc54880263c44394139317ac26d9900443c441dc1b8ef3e05a32e9493b9b26f514e60dd3eea08250585345ba10baa67b6c2940f0fe1ac75fbe1694ab76f43d4acdb4f11c5e84fb7a89e1952b78f9aa18ea07e504014d6433944d643e92383590fe5111d3fa7a4d394931628188a67b6e60cb3df4f11cdd6accda329a59353926270d4ed4f58aa48ca67b64a6f3f35fbd491d9fa29792e3213b49d8e8efe5a6ee884219493d00928a3ee0b9f508472325b9d0f9e2591157b0c94f4af47283110a2cb0e7f572535811d7ad843cf457cf0cc7cf01c9960ec518a90faf562941b2ce93e78c22714c509c8287402d88047233ca1a8eb3825a5a5f009469115fb007c826c2aa8dbfc51211a241e4a24241e2668256c87091ac1bbfcdddbfdf6a57d99145ffaeddf2ffdd6c93041fb5bd77d8f7befbd5b733b9428f70876d4eeaee0aa1ef14bc1db86ab9871266252e6d8df3246b243bae5e17a485864741d6a0fbf5ba1d9aad1efe3b72c6f5bde3e35a22e97b74f6bd415e3ede3a4f8f2bafd189e8b77e3d9803254468a5f76fc8536f4fbfd04ed7f40704b85f0dbdf8187d95ad93617dbf662db54db0663db58b6ad65db5cb64de228e12d1ea5d1957d168f12d1957d181fa554a85bfc54ca6c592a345d920a18a5cdd6907d4a649f16d9a74eecd32752ba7d5a9bad996e9f4699ad086549936e9132be30debe84c1b02f631aa819e83655f46a420c59cf8f6384cfd735beead026da439b6837d9b44db349768a4db25a5829f6c81e5d999c8234c11c5f3b671c235c67aa87e8d80435f742d83ee6d75a23223c75af577b7afdb0faf42aab432a4faf2f6b4929a8548bb0c27a7d8a345ddc94b9ca5fb9293dd7faa8186a084a2693827a46eab997368e11be7dd7e9d8542e4cdd8ead5ba21a5fd5c3f6a8e76eeaea91c618097f381e5dd1332e757cd3ad15d1d50d2d993e744c443077443a98093a18920e8644078bdd17a298e8f94b9d0eae7552662bfc28b5d9c29a47c76467d433c6f87357847111fe74a81ad661e95279fc3bd4757afc3da80bf53635c0d57b1dab30c719d581e852c9f067c304e882474285849ba067149125b363e2d4e9d8bafe5043501d14a89e9e1f25440451f90b51437a7e1a5a10d33d73a57be2cb1e4596906ac974dd1e9510d1658b60432553c954b2edcaecd1a66d1ab769f1858a45d64f07345d282573e54374a18288abfcd946ff8701434565eb61074bedea9d427065570ff7598e79c3c3b1dd42f865b763ebf543054d70862d78b885a6f4fc1b8b78636bc1420ff7d196b291e26b28b63a2822b899c4563734699b88ba5af6bb28c1e2eb96804a41f165445d2ad9fe5a08c07fe50f907a179f055c7cea573e0b24a9c1c5a7de022ba52fe4d1c5c703044e0eff98cc497d8ec91cfea8a00e8b60074507e34922dee8b68834f2dba358f221b6362d825ac81b1d2cd2c8bf45cf1fb2103bd8ece1d6a2e7d7df171323233333434393420a20b8d27a850a4209a1944c3073944f0d3327f5a164749591f0cf31f9a773e60f0aed25183f8f2f1d0cb467d4659f6c25fd49cf8ff2385de157f1f48cbaec8caef2e7cc4b5fc83f3dd3262f72ba487cd1cfaf7bb4cf6bed69fd691da3b58cd6335ad3689d82d61ce5a6704d88372af0dc16f146079334b4882ffd39e4a2d033f7849e9f4b8a2feb5929dab348f6a883c91b168b2c30d0736a727bc4b9a3c8ca9b725fceaa5864e5128c9e82222b73cfa9649c0b2db2b22c1fc96e391f1b25beb827b5bdf7de7befbdf7de7b6f3bb3333b9bcdc0cdea1823d8319f95bd63d46547105b31faccd62e228279c75432ab2aa2ea51c9543e1d4f17eb86bcd8a51f5afa71d16bd73c1aa67974ac8bd2c53a9e2ed60de9607b6f6badbd3ab64e376dd33a5807b35bcf66d6daae164b1a06d3b04e53aff4836fa983c1bcf7c5c8ccd0c0bcf7c5c8ccd0bcec1877108bb4612fac678f78760741a22e3ddbb0d9b2454430cf907afe99adf07e786482fa8515703deb59023eb4ca4747d5a32a02635b1da56cc804f39764a59e124f09463f76b5ee0863bb8fb06c95cf04f3b3743aaa9e09e657f9a88ab46c1c235c87daa93a3bb333adb5fea93bd4b1f5fa1dcc7ad108a6927530952c5a3d9be598a81875956074951f1543c55031540c15cb5a6b540750319406a26bcfe49ea13cd0f373337ba4e6da4db95031aa63f48cd63429743b60b7b3ea7664743b5d876b3554ec26f5aea856d43999210a3cd4b029f6c84ab148568b9e5f55829560255809463f0dcb494853defb6264666852d87edbbc6dfbb62d66db64b66d66db68b62d852ba39ddef0f01b829d7631357ebfa5add8d1a58de82a7f7c1b5bfae85fd5b3ee41c52698bfd64589acfcda88baf66caeace86afa68b63a2144301bf5fc2e243cec603d7f3764b67860b1a109e6bfde269a607eebed2613ccfff2d2e974b509e66ecfae774384df23fb6782b97aa5ae4bb009e618ec748b5f5dbffdfe7dd574e9195dcd74a858cf366d82f96787e3021eee59ade72fc1a8cbe6ccb94af50f823d2cc17a69465dddd09cf5fc7bb68fec9f92909e5f465709164b41a24bc36c882faedf8f6149033d7fd7e9dca05a17a53bca1dd25ce5bfb2768bdcdf1469a7e31313fcbefdf0775dd204f3a362b3b5c5972be61439d2330aa8ebd83a7dfb2e1d0f1f78a87b86707721091e7648b09e511d52cf8f8a515757445759f7cc96cfbd9dcebdb209e6cddb3c99a97299adedf37face9f955329ab3ace7b7473973ae52fd8320cddf1575453dffa6e54debf9bb26dd5047345b1ede60174b9fedbe1c595f8ccc0c4d0add0e686ddfec6f1fa2623d7f8be61eb564b6c212ace7cfbf69bd3d2a365d9207f951b2fca89efc289ffca8597ed491fc28205a52cf8f0a9a2db0e74729a1d17a7e94d06ce19e1f459b2e9c935f735b0946f9e72fcde7f94bb21d44cf5ff289f5fc252ba4e72ffd00d1f39782708e21cb73023f90513e79420f732d03310353682d03527a2a09b5d8500d56b342be8cb21644560b32ab0511e262d6f16b297b7e1c23389532c618a3ceadbaa8bb82db8f8fd3048fbf7da8ab079651d785d1157e18755d2271859b105f509992145f19c35ad703119cd2f15f1975a97c2a45c4157e9c44d6559474fcf90baf09baca6c822a47220b3f0e13de6449d01108507af4435dd788aef0e32538d26b14d4f1e39ed8ba57602162eb4a99203e758f39517c791d17cd967efcd7c95d7269d375c313a28eff064d5716aa6182f87b4c105bcf86c8c29c5ea0f8b27f792678f2f4bd22b68ca4cc968ca0fd5b9b384638dd366982b9775770ae17e118e15a4a6d04cfdf5dc16957f122dd389c22b84d64d9ee0abed2e315fcc620df7e392688776e76783dbfa6c5577efc58165fdc63d3774874fea5e7bced23d3f3c789220bbf4c116ef5734f0769f2c29a442f793ac8cec3b21f37768a6793268861800d6006a611f84859524b06497dcd9f23be6c0e74355b2fbcb76ddbb64a0649f5a96293e4027c179816a40ce8f231be5ef2deba56813deef4a0ae1e74259fbaf487aa6eab0d7435afde22285fb3ec385b29504bbe6d35d514aa52179485c3e031b6f5409719aa6090f1b0ba743ab4b75fa5ef78ea6c413f4e113c4fb086cc29792afa5bc741c243b0f32fee185f2a74195f75c65a1a6b53b016b47665ad0c6b67585b63ed8eac185fac1e5fcf6c39e3c54ac68c1a960a346c5eb89031a386a5020d9b1a2e5666d4b054a061536305eda5f0c76b582ad0b0a9b1020b373970c4f8a251e16b591ca702c7d1e0381b8eabc1712b701c0b1c6783e3b62f079daa2ffcfae99a1de36ba6c78ff1251363536305166cb4d072d1f830ad05807199afb5521a9da5b1ad276b7c57cdd654b9a084ebb9552bc4488205971e6dec185f2d3dbe6e21be6eed4c5d19468faf5d2a175e377000e0059c1cddcecd8ef1f5a2c7d72eb878ed7a63c7f84a75ed7ddd8edbef975fb817e7de1cf7f67b73ee0dc0bd30dcab73afadd9eb76ecce53d1d58338b5e6a8b5d79a536b006a85a1569d5a75d46a63bd1b1b2f6caea2b5e70400061d1d3b1e8c2c8db37b4e0060d0d1b163a7e6d831beb89e13805de78e1206296190dfcbdfd473d1d97cc7764b95e021dfe9766210c000649881c7b59f8b4c64c9975ac7967a2706010c40861978743b346cdcf1e01354ed983bbb4e976ad64e7363851a5c0a32d26cb38621441a6bb1155401840f28a538cb8020ca40b020762426821807623fe8c0a774a3602a61c1f51054523838a1984009512225a48815211f70b1519d0e0a8572f1224811942c3cf062a34005c4087a4ad680d0004b698b968d854b8cddd2d2d212e3e505e64f27f04c43789ee77d313c5bc4f020c9f05431b3a5470514b6a011024b61cb1a105340182458a97aacf1fc202348524fcdd8920a0e40d14153165bcd410cf58904b3224a1f6a4b2a921d446a19f8a116c412567aacfda0848b1e6b3f10d57e2082b5f6622aa040fa018aec7aac05518438c1484d459d4a396dac03662b045d7388768323c78e0c350c91e9f46fe0e9f47180c09420073a35d1a8cb2eb1433404b5faf0f8da6e3be7fc1ae9b6992b4a3b8f26f0f9a115d2f6be0e39974c171745cad0fdb940de55e25da1bb042bc14213a4518e9ed49c1835e9140f11757ae567856890b8896633413a6d4c3034d14c34ea72b1b1115ff3e9b7105bdc0c381b6e28b2e8538ef6021e5a218e26e4e2cdc41b261a353591424ca7ff589a68265aa7134b6a85b0c70945167d2bd4e9d35a8b2c6a6369d4de6f9f60d6b77bedceb2d2b7f10aae1f07a771d714e3222acf719cb6f67e7c1c2338fe8cef4f91f8124637fcb3dd1feaa2219e20be00e3b7bf45fecee2ebfef691fef4ad48df7e87ba607cf70771b5fd1542dffe4ae9dbd32f8c3cb846de7d1259dbe330e1f97b52a051106f209124de289aad9293e952fdf698465d374657f1c5e3cb445d2cbfc5faf6dbc675bf3d9e224fa7793ad1d3a99e4ef674baa7133e9df2e9d471b9487c75d967b6eee9344f277a3ad5d3c99e4ef774c2a7533e9d70d20a3c4259a2a8ebbfaf57368e11debdcae349a27a6df26a64ddd79e0e40f8f67400c2fb7d1ba32e155ddddfaeac6f1e0c2f52aeb2f7696fd4dea9bd57f676b1f78bbd551b47632513dc380e0b4d70c34b9408e12549c41b1829d200c241495062bb4b5cb0e6be8abaae918cad2b745fd3eda50f7189d8923c72766b30a44cc2ae277fb227812678254cf788affcdbefc8305b2c9cb770eec2790cce5f3887e1fc39f738d739b2344bb7235df68cb1e9cbae30dbfebe9e8983b1f5d659f8c3f0783e49e9b75781dc4dafb927fb519423294658d6b71cc49e5e0aa510bd244ba51275b9944a42b0a45258557ecbadea74b68421cd2cae105d21cd168e0966115b38113c7d8cc964fa687ae16225f521b85312965f7c61e62ebe90abfe511246f18fcd4aa763ca416c612bf0d10485326ce2c4560e12a98a278324908b276374b57d0ca4202698e9d341f650c2ac904afad16cc92422b8bd2e21e1222f3b3ba81d5c44b6633ae91deac2348c82adf45a6badb5d65a6badb5d632dc83ea747494a32ba58a78c305178260f4a456e227d800767010a6edcc1646c100620b03612219c342f8c7a5db89b1e5cb9e309b566fdb6fdf185c34c1ed3d6c849d4c70fb53a7a3f1115c04cf5c62bcc0bcf7c5b8681d43eb17ad61b47ead3dad3fad63b4e6bad9718cf03bb4ff8687efcf4137d104b7ef3611eaaa0fa54f2f95e44f2ffdc4d5f661ec412fc52a781154118b8f4d28c9207aa9f41889e8ba46a5affb4ba85eca2ee04ca8a0781b5c231ef40d53d15576d6c07e9bf83afd7e70b6f4efaf992dfefb557b7f8caf95df2f632bc7267842a2b1d9ca3d13cc1a40b978b79689ecfde9203724baba4938e8a86f2bfcf9cbd8da2b751c23fc4a98844d707b50731bb795f49f3c1c8bacedb9877926b8bd4ba753c245e66a7b132ed23793c9848bc84ec75464b6b6c747b65309ffb4743a1bff6c9f4f5f98b9ea3f044f4ce09f096e7f8a010f252cc4f1b3bd04da5e0ed9b66dfb6b145f2bbf3d86619ee9c2327a7b105df887a63ec443fab6dd225c2cfaf6e16fbfe24958646d0f237f64266dfa4209d4b74f7d11a6eb477d218cfed317aaf4a783ecfca76f4f83121ee2e8af3152eea14109ded3b7cf31eac24873b5fd96637dc34813dc9e470b7888a3a86f8f91e88a27b63291e8436ce59ed26f2f7f24900c72397d487ddb368c947b32119c54e2267d8b9c68addfd4e968afd389a971edd17e878898c41b1916696cbfe5eb44dffe0afd5d325bf7b7bfb4f8eafef4fac1d92abdfe9ad932bd7679ddc22988a07e556ce11f17af8784fdcc560c3805b1254304b7dfb60f5bb6d3b7733a994a3b44d6f6260fc804b72f753a7a2767ce55aa0d86f832fdf638668bfff65ba9a45ff369f27264e918ddcecb96307bfea6deaedfb631fbca6cdcf1b8b7a332d6524b0cfd6a1efee3a68714e8a1dfd7dc7321f8aff23c181ea7abfc5c37c37dfde5dfdd15dc45a7c1eb5a6f99d35ba9f48136b1c665e966b83c98c0ed0c7a474bf7850be8fb6bd15f0cb4734f3b877ffb7ce499691ae08ad48d901e3064d8c19a7757f0bac23f7613d0d1af4376ee73cc934aa7639e7adcee0d822c08df5943cd36709a329bed53a753facedb4e9d0efe9c3ffad3d32d6a465da9a0b9b29fbf969c0aca29254f5241314e959a98bba09eecf9e099519492d9eaa810ca0755a423a24274091da24f8088684e3aad6dcdd126d48846e9f655685b733c05b43567da9a73f1643c7082dd6bb94fcf5ddea668ddd25886623ccbdba74d66aba5478b8b0788cf79493549d15244dd6ea0db7ff16e660bddb77836660bddc7f06c660bddb37835b385eea9d174b17cfe2853d45cbc3857dd670f556482f6593c54cf5cd94f05a594a484662b744901cd568872d2ad0d53b0219416a8a0540f6a490a0845d4eda37e563e6f8d5282a2a19a74fba6fca99e144f0a968aa586a464b33567983d3f4a8b23a42949b3254f49272d4e536addc809ea09aa868ab2e2b9783213e49efbdde9e4ef9ff0e4f4b5e49e96ecf3a4470641ff8427dde7dc75397cc29327517ea88b650241ba583ed411d90a514046e8f6b58bedde28f185faba45cde6ca7ede3ca572f950a6bb286ca366a8d94ea81a02a3ae38e9679f0a21ba6ca02bfbf908dd4809dd6a819a45d61239be4c6fbffe54a0d93a7d4be5ed57255568c90ca282a8444c96a64d4c951a120000001000b315402030140c87c462015912c579a2b90714000d7e9a6056449508a3a1244871140771082488180080010011801190348c2000a43916f173d32240f4e6615136cde742f394113b865714e6fcf6c1ded03e9662cd60efbc4e20b47025b76919dadf5a7fb9031ff58d45adfc8993823ad27851078d6f50f9a67e500e0e6a3174ccf9da5c9ad974921dbd24af5d36047f2dfcc819973dac9f2ad94723e54262dca2f5f2b0d4146ab69eb07104a05b96b3e963620d9c85120e0d62dece0be6d87aeff36cc9b141528317979466d77298647cef515e8b9b772144dfd156d3d50e25748d288f125b06bfc259ec9e0613baf6d15e010884c7e46bd401a12f5f57002203ad91e8206489c1c77ed7f97d793e237a1742aa916a7ab73cc250881eed750239ecef38aa46425cf1f0a92262105ab6cc8c5d83eb61c3c8d4da64deefac4f27cff2841b3c4bad6120d93d5e9aa915124d2097abae99246a1cdeb1060f4c6cf6d062f34dd6e0612a6c6455432000a9aa71ba9b2155063efe3c0d592f9738bc7ef5c89c67f14ca437c4af3d912a6efeaf4fea123f0946516e62cf21f04114653a7957cb7d07a2adf6571fc098c695a21acd2ef87d320c166a4f4585d1032b656cda79801757d14f1edf2146484a0ec285619d66bb925663d3bbd441618ea64d49a9b5e9f086123232c1ff431f158aa75d55bd2015f87f2a962e1d9f17348e3ddb81143b3fade9fe12de515f71a08b82058d63664008050b1a445dc1a1e3b04a68778db30e949668fb885840a92499fed485e3f80d7a75a15e5a238a2b0eb37d675aeedccd942f16365d48f11be9178648c821b2e33649e2339311a6b02c0dd73c40b640568e3ac9eb913967ac201bf96e7a008ccb6023d1346c1c171d080e3bdc5d52883e7000e49365cf5ee35189dd2a2062707e92f44f2de9aea8fb9f124b7edb36ab2639233484df0a35cf8b7467fc6d74160d14cfc1a6ef89dab07f4138db4dcdb24611bc38c30d124103c604df3655f582b6bcdb5c0e1f8d032456134d80b6474218d08a70001d0aca7a511addeabb2d3ed87ea029b279a167cfcd22245b9a5b1c4fd8c062ea0ea0c707f858603558080cf790b4ef6321032808664349a43c323f4bfcfab4198bb1f4ba9071ab04dfe00b25ae0016ba9f174a6ccf4d44854b5b5cee696bf480feff433aeba12f2d11366f03c421b57e50bd5c11f0f106dfeea996d18ae2e2d145890ed3ca90153c9ef95f7fd2742d7e16e0e63f940772edd85e09a48b108ec8bc4fb28d296d779feb3e08ef32daca554d3bd745178277196da36a6a8cb1e05283d1c5aa0aa7e9e5473c872d7fe2b2db99551cce5b89140423c745078271186c249a868de3b015be29d1ced3e824dc53508067b330930f81f5392f2ece7ba486fdd1cdc7b749673a2958d62eea9acdf794bac1dfe87d0dee97c9a5a342211e44fcc2b8bab05a7901d652f563edb834d60332c6aab1d8f36b5f464af13a9d0c0c221bd107d6932978354147f1956fe91a0f202630f64fe85238b1c954eacb192f68581ecba1417330ab61c3e8b66af26bae6f73df685e424d9ac803ad6e05fe9b25f3351dcd66f9dca9ccf57e6728ec0b5ae2c09d13552d1c9bd0a921d221595205c171ce5d731b5a8aadf145bb89782495519966b7eb12753dbf0ce90206e68106314e6d680e89925c33c2c53a201ee97e1c7872820ec4f330e2403cf0720fc443563f6e124522265014c4c7a8661132031bf30c230d345694f04b696a2577abb88cbc7bfb4c4420776e4579bc4dedba81d04421ed3c46a30a0269c1fe686ebecd4d2b7d9e5a20cc07b3a9dc7fe2c6f7ce809b718b72085d1306e22919815739419ad043310b04c259e0d083795004ef23ceea3580a721d1d536263bb515704447432e51371b47cfaf72e942a7a2fb95b20a917a262f57a4bad008342273046902cc9315d288ab845d5b090f6f0a98243e0672570eebf3a3a802129fe1dd2769edf70dd3d630bc9d605c837f5dd973dcb60a9119948fc28a1fdc0091e75138327a1861184a6c48b36f16028d10d49c87429c3fec033178e465fbd1cf42b5b4632b4a17ae9fdfb9cd2aef0f65bab3bb4a2a7de32977114169fcf314708f906fea19f45019a55a08985b8985656b00bca40a605e5eee03bcd073215d30be23240c106d4e8bd52564cc0707975657c692287e2df2b4836a2dd99bc5711dafc1964436a4d6b668b50eb12c67f1419ffe5ee3de90e5d4de3592c6e503fa4b736943df0ebfff76f88b50ad3b34b6a5f4dc185505d08b271aa946264e3599c0ab6a848bfe227c1a50f11689a88d2c20e20c89c8ba3d3cf4526508946f542f0fea2110287daa05bade85a04c2cf8b40ff5a7fb3d2e0cdb63f8cda1f0c5a7508730d4d57aa81b8ba8833f51d786a24e4feaf027948477a5b90d9e74c9a32e2e57269744fc0205d9988ecc1061705ab514ce9540b58e36eab83c4faebaffff5388b3fd80b85e0a2ce6c4825e9a9fd214064ae2bcc56d5c8071868e8fcd90ae4b8e1d36d739eb8049e7c907de164d17c76a87e32880a00c6705ae0ff7ba012559166c390be252f9b8c4a1aa244d2675e410c8b235852e6c8fa3d516b48d6585d292d38a3511d417228586cc1285d219e1f27e01271b0eea303634ac216b3731e17e2ac4698ae946ce8bb1d22af513fad921d097cefa15095edc632d0c06dafd959d974778598299cc33e0198670863502ded41ce2191c4d851217b4e19ca1d49270f88369c782a3b4eda21d9fcc0b94736b218bebe50809c32119cf7a09a5181173f2e02aae87c76fbffbfe706b25faf3646fc551b3e2c218f3fb3708d4479b5771626e3a309f45d1f512ab5571e5844af0e44f2ccef5ea7ed6d97ae9396aea01867152b7463b03a10a6d4463254a71bd625abea003e89d75370d3a4e2f8b7e311b338edf0c4971d1edab653c60d3bdf9e8eee9c9e50967c4e15e1152f858d325acea55b625fb8077e6e55bc92baaf7229a989370319a0bfe467206c54c408caaf4fdff20aa4d8a85fad64630b977b0d69a297e9b4bf2fd8dfdb670814c276280b8a5c99211ac24e3748bb4d449f7e8a200aa44fa4e67092dd33c9cc7074028f320326cf27c755b77b330ee309910fb608a372808e6cead1acf5387c4a4d781bda2b10d6bc946409f9196533364cbacc8377bc439a2093e2d60071e70eb5ce0ce10b2af9c60515bdacfcb0f7a1cdb334a90be31134042b036f142908b7711565cf374721d04f8c894eaacd7065bc409bfe5c28ed95a525246bb03c08dbe208d3a7fe38d5538f756d383bd0f6c5c6425c79a58fb690c8ec52210098a013818241a11918023e403efaf2c3267be3df7f0d53052af27e6540ee532606ca00231434a54076cb05687816811a017425da09796e4ed6f09bc38a1beec90f70e40c4eb404e30b6fec7d2baf48fc4b0a1d8217c86e5fb0ab0f3d98252900c8f7563436ff643063810a86a370ac5313281a873cf32cde3c0af77910ed5660b05e1767f5191dbb66c7f577d08d669b6956a6826abf6937c7d40b54a0d07816b4fd26af313aae0cb102d1bf2e712c2834840583b22d9b2ff9a69a5a622e42a33ba650ac76b4ae8fa07b7b9ff4444ad6976ec59dd9ab62a7312fe6be2b307a309fdc2784ff3b2d53f01ebab9101a68a652d9d2d4160995e658207ae8e7c56cf3fecddb6256fe8ce2175dfbd81d311e88dc70be042b9b478f4f65668bcc60a0be8241318db98587f19d8be5a6080e1f95872cb38c70a81475847b96413240981a3456efae04f8f7296a102759153fb22285db65fa7cd3cae73a1613a518774368a45198948c0109609b4c556044eaee6828876a9b3542132755856f10a646113f0222181bcacf6a2aa9159513f0273d2acea09d6631303d5384f1516310e69e5a441aa6829eacc30191c00c067b9d5bdc683cf2400480b84dea3e9c66f15db90fe262a7c8c47a2291e40b111e09e608ae27a53fc8b3c8df58d00df9271812e295ab80c73dcdefb0242fcd7a20107eb875b1d6b2c4ffb4ad3e4808797beb156886ef2a01e583dafcdc5d65606a38b9fd705e124b8e01c0fb002f4b9add9b4c159a3e134abb8a2e0f74365cd8f626976e86df14a34190f527dc22191b72942129d7a37332c8bc5a163416e944e86829ff02deb796d5896392f2c0dcd986361bb075f58ae8a12ccb2dd0b15c98bb680cad9fa822c5ec1f640a2cdc6cb4fd9e0c8d6d2373ae827451308a020f78a330a7e3cc7d2158642e00d27692a1b006180d2b474e4b06708c81094df03a4ebf7e951887aea8cf5f5106601a5b9a872cd9984c805c125895454e744b63546d190bf51b5b70ffe0a18764154d84279ac990d8547d0b0f78025b60f5d3972c576e082b3dd7f1024f664a6902fb673d2701066fc3b16dbc3afed676d470dc63503a3a288ca67621554c89fe15c151ad4df40ac0a6d1023fa7388e6742f40bf5d8f98bf292abed600f4ab55056e7be20d350d22f47ab97306bc88381544983a1d9e317e3860218e30d660281e5e2089d96a13d83010dea8b4260d5f245e8be782eff00a06b533ff348717777af93ee8946ff16ad84b17deefa47ec41f857c29025f11c267bc0d527fdb079afd4db81dd784dd4eb97989471c5e0a96358ab8d28e69f05eefa73366aaafc40a36089aa420c88992de03b356dc7bb36f3d89d05fcf0b713100495628eb232ac9fcfbd069d5041aba6cb44828f983a95d88aa5769496beacefb814f8ba4f18e075d0aed97a82ba15ab235e5cde4d09f3cb92149aeaac64afe118ab5f250b7de4c9fe447c450151b7f8a25ccb39b44cc6aed6401929658727ee0e5964a718b9406c969d0552d116caafadbfdaa4420094f6384f19aa102603bdef09cc1ef1a479cafd3383ab704480529258ff11fe1980877594f304979b04a8226a88c231ca8db835f4d44adf3eb290a068b8cd1ff54c873fe031805778d62741a8fead136a81ded86514c8ff744ffb30e671cd9708b6ba9adba017606c8863d053e98617cf31fe606c8bc6d71909321461d8e23a59d02354c235f7ee37f78bef4a78cb4ff982fbf0d58a9f3586bb4fb59969a52c6497cde6c2b84e1395f0098cc299cfd9d80de9ac242a7c899f5fdfcb0d1e116915b61a21e0cb1a724a043c078116b6d9f6ada64434cd9bb1d07a16b5c90ab0eb324d9190f28bb0c0a3b073b1939f584475811e3908745d3f80847e324f0d9a25b6c8f19e36822ff77586605b2cc17441c82b40bb3a8dde1428aa8041ad951c6cc7e0985d0c94a4b9943721266f478088116492b11aab541dbd5cc77fddd21014c00918f5007ac9f2772a393c65d8fff5b4d820c33e0f11e3a8e88d90cc2834c89ae56c42aa2da72fc15fe56344c7ba311b451f63fad2d9dbe7875f36ae08784d3e0f1c6b8037ec11b1b9c4082c7b44af3fc6f488f95741efda864b54387c832c04767a9be6d476be8a121ec3d10715e7ecc33a65940e8407988062a873d1a4371c02c20383579d3048bb76eeca05907bb77f6ea961f8b09024592748036f7b3a80cca81c7f2628adf79df4f72cffe414fa485ffb9c5c31de38a78c2a690899865ea58284717d74c0fb472f60b10d9b93cb95c0339c143d7e4a6ab7c7ca78a4202795f3d2620398ecf6188858e59441014d74cb6701565e94ae7302c0b290d2e13d144e511a63188ce54fe69bbcdcdf8f2df2754b80072530d2f164a194e455ea735229a46fc1ada5691321dedda2fdbb2bcb37d06eae1e3d475689c212728c642ae5f951d88ada1de101b8d0b6dd1f650b6a1e5fbd665a0ece6effa2a6914a1c80a3d0a26480b5bc042917117f4243f0f89c7eb564cfd08c1bc1566e10e19efeb54e6d92c332cc84a923314489c0af554e5229c6cc502c50e11b297e47a986da66787a7f48a4f3c59ae6d677bca60cad9af9cdd1cfaaeaf129d58811044cd47f4ff5955835897f8fe8e9225f89952660fed1201e793362ce4a39dcc1fd57e48acd623703fe11c6b5622718d72c0ae0d82fa5bd1a92c6a487562d3e4507d0fe8c86dd4ea7e6dd250bb425f272f8505c86cd620c29190a596035dcc75707d60b4ccbb32b809695dfa6e83803f2569797319f453e683b92da8e2260c10128d45b840e7602df092836b5811bd37bf505354646a886b3256438b54490c06eafd36ca4a9ff06698c8ab21048846d501eea04416401f4213e461ab2933baf774107f22f49ef49cf32abb5d07cedcc022030ab0e7c5ef56f338565ca15d48f150d4f552a0881d60cfa1bde98d99aa3772231758ec1ff720d9b31e46e8d6a03330261f265344b0dd03cb1a43b0e4805b540550f4d08a4eed7384140555f7cb05da6be0b0e1b29d943e9ba56e6175f0a7552e8c6539f3722e61c327102307204f8482068ab6c1330108c104ef66ed97c3bda03d83d5377fe87c9ff1710c19c39fd98b3c588cb12428df5a181ea11117d5b663003b50b56fdc7205da0c6205812b81a61cd95f5b2bb6404602f35d430def7c7aa1e509e29816bcedc4b0749a9bffb15bb52c5a0f1e44fe549d104c51fd2da96f430dc8efe38257be763b249832e5e4e285c4dd8273b492145ce7e1e6ae4c5545e8c9558b37fb162b8239f0929f4f793ee7fc517ea5bfb6d83a93536a6a5840dcfba295cdf96cfed8b6a9cab4f22859443012e776c10966bb244fcc3f521212ecd8282c5079c1a4b82aae13779463bae9d40ce197602793108ab5e53e82f564437a0f6aeb644e08aec6fb564b83b21266f5b002f40f123c653c9985329d366dd639f0c43b4b55ef99920e7c0d9711e4400b0a39f325dc1013597dab2efd3b05d08cc49479829c9d012e614cc1ee7270c4c1d2a92309eeee63a2005fddb765b0f1dfe7b6db0583d63bd860dd6496625449a40013095c63c42009fdd74f7438a6c7463caf8970534d5414288fea6f3a9ee8448dcab79dbdeb5bcb5906afcb8562654af6a396757661c83ab77db48e7d55a8e1c20b2ce8c4f5d9e9e63c21ad65eafa4a6cbc8a6817d9c5471149d9e507a8f270d5665fc99cd2499b9f9b8055657051f06c922d2e986ba47106b73db992835d8860fae0d1201b4478f266964d522ded4f61156630c2f89a05fd1472ce5607309fa5f24c96dc0bf71f3ee58f4febeb58415ef47015952d6c5f3de2b9d28c6889a6688a5d9b7dd48dd5092c9de8b97dec005b838f5d1b277c834591b03930803aad75f93aa418f5e727b4b6cd6dc85c3bb7a644507320d64ae969dbcfacc22ff39c0bc88f5398d496a2553ed4aad70bbf237ec301f74636b556370d3d42d701299ea1c104c0ece4f7d82362ea1aaaa3a8a328deb3c6e9f8da43890c81f6c4cd8dcbb94d6caa6d280176e271e7c300c8976ed6a7ac3471e6033a2d2bfa9c48121ef1078f5b9624fe61a3f9efc6fe8034725e9af5e2f12393f90d427ed6f4c9210fdc50aabf04816c2ece7a8c075243f068901df14fad385ee6b35babfe0388719738dfc2529d649fa82d43dc1f4e465bf151efdf88ae864073b646c13b0528fbda65c03bb07a019f71d771ee8f7fe3590cbbbd4c68d7a351c4aa2523de38e3da528c4525030ffd3f679553936c1d42b9c9685d03005d5a0adf871c0d87fe10d656a4ebc1a9346b841058049bbf333dfea618d05cc7e842767ff26c74ae3b6ddd29976088828ea3c2fc9102296505d3b377a495450a5558e0358f5935d8a0535539584191e9ecbe1404e5d703b0cbca32d6d60813804697ba916c4e80ad9f121a9cd18f07ed26e116ef2d6b03bdc6a8829a663a5caea4a0136695f68de034a8d0423dd1f682cc1a0c25c3fa29a9fc68c647a839428bca4334c485ba5bf627d9110cb02cd495a2321a7337e5a041ea781c02fdfecb8ed360968021f36c284ca76954bc27c0e2d91dccd2aa62ae4e097445b10c29a05797a76601432f81103a8da8c6ffd1b360b2e873647705836bfd1a46fa57bdc5c7cc284b79b02ee6914fa0957648eca2ac17ece195d812ce46b01795e8bd370919e226935aa1f23396634a5e99cb19d149709e82d1d2ae03ee0db35f42b588b3b6f0a26de4572a571382a5d2e8a64785b24cfc2e84d8a0850d5e04dd9e5566fd541fc870e23751661ef662018e0660870f4321798c31ad4fd7c015288fa5680aa98001a20109080c2a0f4bcd09e0ea0be11c6be331a08b83cb4db640f4718d0b59cfd1c977623e02d2d0fa2181c5dc5b63ff6ad2d022bc0be3f8dfded7ef4bf081c8153f43324acab98f08d210d6b970c55410683f56765965fe8ae9f663dec89f451c2fa9e6021830f006b5aa05fed65d60c892b88581bde49af6c7ef87b752dee599850fa3a0d280774a42adcf4a021e74a8080bfe78c1551e0e773df4a8e7180d9b6f1037e43aae223f6cf88131270722233d195d6fc8c456fe94538678cc5bcfe017b5f62446db22be63a1cac5bd7f764160e13e6bcda44c45820b1f618033abc8013b149de37c22e750fe2c58506726a6375b33403d6bb1cd00b7fb845c4e6c2f7b2cf400d0832a324d53a5ffd9a2d7733dff68d6d9e7bf10fc81d75e0099b2b7c5391ff32f55a11cbf904c7f960fe0ddca8d1bcbac486df3da8b53db607c059ce3e8ac9a92f5c0ede60d382ec27662d7d1cb3213018d76c85381cec43c43c70ff2b0a3a020988f9d37f9993d742a96cfd171d253e614f9653aab4a4a85dc7b80ff72a8bb0d7f920e388d12b3aa2d023c7bcb54d32dda0a65d12b6d617355436c7d7b77bc362f1e045c2d39abda80c35c0196e531801b4745def5a6ba4916067c304413409528507d397615300fc2d452038a5872112444b1750bcfa78d8bc09e60c18fa8d256c8ffe9dc0e34188170f3bd738bd8263df88322333a09862719ad610b9da0ee4817ece11422aa26c718f49b695718af69432b4071e518217f921a8ab786b432c17bad80fc1d4b6a7b143c996f08d83fbceed8e2d78e0c161eb1d819d228f9282d84320048eeb884b81601e3aac6f33150b9bea2dfe5cc8fc590b574d4e6d7834007882c263ec277dc96446bb150feb37a9a351549e7e8e80f919af728b09510c6690c6d2a527855c4976498cdb03dad06946a9c0690eb6dd1ed08885986975d95ab8d2032d322c0d28af5ff2871253f6b61d35758d5dbb52ee78a9fee76d31ad327a4e26e53943c38ef433ee754a52f7585cae2f0e11e2434882c30f67f52af615218df00f5c7a2cb66e7cd2b763aa76d51e08c7e053bbecfaa76f85bdff0684a79792d8c0863e96d4c1805b6b576181594705dff4c2877811f02bce7ae286681cb03f793ba3e2268bdd48812eb1e7736a2c85dc698a54821668d9bb29195ec8c96b4ac89caed75a840159de10f744b83e44809e24840efb41a305799456c536d33b1b9e51a0127aba8e40890bb92f597b896c137c1f9e63f62e13a0db8a711c1b24fa45154ab828f3293d6b71ffb60f913f4e669bb3b712e67e45c6f41cace54bfcbbb03f7d8e685db2b06a58949ee6d40aec765b2cac083f7cc2796c09575904ced0263dd7b21ae404d043650289570c8201cad16c2173eca6b6dda0586c8bd6d4be3b12538c51109dfe8ba7f04b0de31265af418f8c89e5e47d8b1bbb529bcc46e594d530a456134b3f4477914c225340262fec8443ce178e01c90a2cff120beaf37c465ed1f4a951c54c38603a245cb8d34f006ecaf93d9babfb88b64eaf0633590a6b57c7d1799eada4b1190f21f668959eed0126bfebc47a3f8bc6e5201f030a08d43e82f690f3971d987c9d06908435c0becb4b408f75c483752f9fac0611dfd871e94f20f26a5ae7e3d908e40991f2de029b6b32fad4f0e1bbebc583aff51c7d2d13b0df3c97a31221ba101fd2ddd05b613b7fb3d05c74091a0a6519966497a7cfceb5a1d142f0a3f115ad4980cead118362ddc19db86cf8344dc72f1b0fe977d7f086885e6b2533fcb39aaaf8161d6441dd28873a107c01c4c1b924263c3bb8196efb006359a35a537c74d2990b53432d83f7190d41c7e6cf86b7842df855025d51c933af992d092eed1dea15cd5d122cf931047f3f418b548018e683499510e8504d4c7e2f23b32f87885493d5ba4eb8a64a7d022653c97b410aa45fe5ba561e5889c94548fc81ec84ec586314d6645eef29a9088430708a4c3690d882121184240f80c08aa21203c3ea4d995d0c1b47869e272105ed217187e9710f4a81d4e12020aefee690689ddcbddeb89f6119098ec66782c4a430dc2220f942b066b087d911b7d04297e37dc4a389899010b8915aba5ed048bfee1d044c7292d3bd98b6bac94dece9f2082dd7fad17a2540a5251860e1f5373d7c1a91e5617c62c6149b321920357f57b71379d40638e80200d27e4c52cc0657ed60e6fc511a2b927388b67fbe5d3016ea25b510f9e4dd51e7ec15fe2f563636d1ad4f288e3e53bc5aa4303f364497433e8c39effa6bc7d9e1940db25bd8a0ab16433e9a1549b1665618c2ec60380b0ed5e3d6c15a05a98ba1b0fb0c3223d4d497579ee864f6b4b9ff88873a0f472bbe0e6109ad52bc77986b9d41bd4f9dd5d08c0b123b5dc0972235deba023b5059a6b4aa42b9c75a0b4805abf85d19fba3bbf1c2eea137059ecf1d4abcd1947a55227fed6d8a39073826ef2f78233697e56216a5f901a27b01aa02ba97974bee655b67c0ed3d462120e2dfad2faf39caad71a95abce8dfc0de10ac5cc630cd988207a9e88786fc949c50748b69df8b58cd85f679ead1c2bb846a465407eba444af51ebc1cd78d62b913172ba7ce8bc3e436554c3c546f3eaa5c1c55968d0a7c4468502b25dc07925f3d8da7bf3ac96d3d17b0ebf1c4b8e38aee7de832d6d0a01281d6bbc4400483a4aa9aab7855ca57ce5d2a3323d1b26c2c943a31fb2006e330c1de193e95410f74be3386f38784e185dfc9cc2f54c28b1cab06dba43b9a78c55e28b6782f7e53ef810b2d12ce385c035f45b3312e01a3cdbb6c2cf40e4318f96850b2e4746c7b48215b3719f25d4ab10f65680e0dd4a8cca222ea529f8ba72041e5ed754956d18af31f6a9abf56102018bbc1ac05215c2b06b51aa9468a550c72b4b10a18638955c2067cb14adce318ab34be785b1ee97369ed4daa098b2b72ca14e88aed57e9474ac2c033c4331a8ef9e9d157f8812a519b8ee3b390e733b17e0fda2098f684b421cee483e349e196c4f380c318433e0c8d10c8c6bc3542292b92b271362d8eb22ef501203e34290a42296bbfe514a726d680bf7d2904d279a9dbd6319a143f3b052023d372739c4df855081c46c2d1a3d8fec848f84b9030da1a24b24682c4dbfa20616a3d4824ed0b1277b3dea75c9271e2f08e3232dccc342d1bcf45178275306dc80aad3defb726a89044e29fb112607a140bf35584b753823b09efd229754b6d66476e00324d2782433626001d115b71efe22b1a4f13c4d87dd9e99fc66cc6f3f69f00886334d32974d28091054e32e2cc0d210ad33bf36271d28f369aa67928d8c1a2522ec042e78ebbaca06a6d60465ab41d9eb0d592fce3f4892cfee3a91de8223f03d58f6e65d18590b65b7e1e9b8aeeed6e66c4ad6dd667fa96dce60c139709839148996906689a64c7bf6fa0dd74116b1a1098afafa56563674773c42a279541f2ea408588528a99e611d248f8e0be1c0088f25dd1059a12c2b120e1f7c674116fd6115c49f865b1dfde5462990b5ec8fdc3d1ce650ec36b0feb4358b6f0fac5620bc0282dad718affd248b5f3ef07cc2beedfaca544e63311fd343520004d778ec68b9e802b0d4e966eedc993d713655c1b57efe79610e65682e3ad0010eb649522d02696bb5649ef3153332154ee16b095dd92e6e2c398b22f1cf4a533e10eed6ea151870f525aae35724f487fa904baf9722068a617a75af7c0482a767a82dc93d84d38d74b4a8e2edbb11e513e2e29b3d8daa1c3e7d988bd37a838042fe7f53a976703a0195b4ac722c02e5c6a92bcaf662c469bf455778de73abeeac8fa624ff1e2e25b439563d4673a62931cebb08e56adc3afd3123e1aabf941eab1cba1f2abc7e0487ae07c23dbc98cc31c7ba38e616d830a6682c7f86d607b505aa145df05fb261e12e037c148ac35098a6bda78c1f4d80082af3cecdb490e939e2067417a1c0322a3c3cb029aa86c406bb8afca80a99476004d77895cf465e3f7db236959ce910ef03437250df1c7435ecc47211c007e97c354f89d8388c1ef62d905bf532102e177319129e4fccb76ad9d070cbc9660c5101bbc4bf30cd4997bd16afc9fa3395cd56e08dd20b333b18213dbccd74c2f910fc71f06eaf9d654d9f0dbd1e3164cead39dea0e98c087913566063375b5dc14a89c8805f332a3e6163bdd0ae785a3689c7ac6244fa947cd1c287a09fef14d7305d5102d65e6986a96db4976b7265ace9fdd80970e635403f45ee1c7442052ed1be7bb7b2184e169ea5957fa3974c9ef441a80d4e7441a46ea119bb515720a8609a878029739afa1b018b727ae562b431849a36032c4ab61cc1f6aa538e91861e57d06c6f1fb0525e90150b113a700cb0268613482334e61d2e3f9149c59e74f32b45fe1c4c288c7f2bc07561f19a999b4521f8fe69a27d8f2e0181c8ebde92f637a22c4e30211bebd14d6da45d1d9c313c1576a0a375518118f88d724b88fcf8a5ad77e4e057b8862e77c3530c185616602555eeef0700540eae804d453d51e06868cebe10f1cc3dd0cfc0f045316d8181b27ec89d279dd3e09d90382d182c20b20ce6862c8a3e244ddc019997985193c1e820d81b1a0669eb819df3d943ed9001611b8958a27afd6012efa761e8b2271af1ad0c75aa5785ff4486385816e0fae41a9511f4683168e70ecba94d87be658324a64cb8b48fdd2696aba51944ac739cf4617c703a0bbd2ea22222c8bc3af1674dc8f5136504641c6ec3abd35e5d4000dc34429d0f4d16301166b03e7930b827e854769f0f86115f48f40139206715794bcfb866f34511c428443b9c0956935ca693b009b712b0578d4925c58f71a9aabb6f580a63a209d94539abfd06b8b28de47574e5c412da69427d11e2cb66bf9e033fa6e300af931a419fecbe45b7f3ae9bbd1587d76078808716b8cc40374dffc461fd7aca1cc12023f506864f4fe52cca0324d501f2af519d363085fb97cf4931f474ea0dcff05344c3c1a08e1d18452b1593411dbc2a56727e2b90d1db48025cfb1fe4f5c263b43723c8446a9fe423f93b965e1adc8a4d9a8831757d1fa9f8a40f4a90f0e9f447d259851ef203b8a60f37cce1d4d67911bf4d204e26ac08f95faeb4f59a208b0ed8ef360ca1324b5c5812d872c7089fecaaeb7f1aea475e591f55bb58d5bf7b4fdbbdd118da7b41d9d4b0a1424d30d35e2d3e2d42e271412e1473ea2338bc9a2e7ae76d8bf8029efa182ca719f3b371d4579e204ab9f7cd4a9188910c371899cc3897ba8e05a6f82cf98eaaa56616c0e3d3f999bdf793d4e39d6fa62fccbe708aeb6c56b5c3e6de8eff376859ecad04f5786c559bfcc80795381801f80d997fa2c821c2c99e78de4c034e55f4f10fd50ca561acc152687960b596429359e21b7177e9f7489e2c0ceed1e1843e92707fbe8809c2d83ba10b04b0ac41852103a693be68ad77e8104110f624b4d09b8da61c1f2dda1d1669128c02f9d2a7bb76de651f4499b3436c9fef43ee0c4cc7914a94cdf74556a2949013e7a16796d02439c69b4a52b4740379b3a5e48ecc665d07050726e79122d5b6ef812851e737a5a069a2c325f8c9d4b78ab45496574a30fd8617a2ca6d99ca850e7edd7659263dabbd2b44704027cecf2e50b95e53e60688e4e3576d764a59fc44221cb0f6826944a0401cf9913047ea2ab54a080e33d12c2b8709a3d3df881ef1cb22ce74dbb3da15057ba906e4ba1a9285aa8b8812c91d2be2f5e6210526abaf2d5ca3c9e6f715a8b921b0d9f74599d1dd8346ef846ab4ce3aae8258708c367f21aac8cffbbc8308df06e3f454013140d6206a1195ecc9f2b7dc444969f8d457d6b1a17550fe2176094e9fe9f8d835407be51f3e112409ef486012e64f98376004709cfdbefc9379bfaee8bc7f3ac9ac84055e15dd104a9c5dd8680ba84159be6177e088e1f9b7fd9e27c9b9131699c9691eb5d360a21e8ebf51dc3536d8759097ffa80e8359105df9257e1e6f3cb8a815b3ad1ecc551476b509996187e844c6989a39649a234c1e892971957174c97fe5b3ad17a5b0c0cf25a15c4722ead79eecf6457f7018c2ab8df1a855409d103b18ae3020538e8d8024de75080ecad9f376a86571f570cbe01425c115e3488cf59190c6de5bb24f0150c24210b08a562ef2e24888722ee87b4a6ee931babe480635f5ed25d71ace4911b2703058c15c42562b1f5ad1367d9b244c23e5eb1808a95cc9b1fbab9e7635b6c938dbcd25a52fe0d9b9808cf18298fc3132ce0597221f642f885950606be6bcc2a32305a2ea9d08a443b5199357f25e02584b13d774707a8605fb6d008a9e5da586846e2b1b91ab616f41eced483cfa2d32e7f52685c7fef05ff4f0aa839b0df1070785695613129660161ccc20937d55ee0350ae366fa29d28c28ec17526664c1cc80430b2457c0e455ab565f0ca64ea66faa1054ea690f691629bc5b60659cc797333fda5eef534594c8943cbabe129dc304165e49d17b613bcec57ba291430200ad2a55a2c8adabcede32dea8aaeb79c4fb000fb40eba5c700be068b3d876eb168660a315db9ebbfc2075dcfb7a62436ddd8f91a19c3ccf8468464af6db41c4464d4c187b8b04900e564554b166187255c28a34817a064f963eabd4cbc78dbf729d42865d5b0ec4d8965cf8e5e8c3fcad38c1237e6bad665304a568c0cc995b7bab7e698f758ba9d0e46413518e880dd4bf2c1dfcc4074e6f5e0e1daf7f908ab59ff664bb808a39056a3739be845a468c9e6466583c6b01bbd2a5c0cde795df1f2e84472e82e6c924f7fe416e35abfd14a4932ba1b7fd07324a4dcdd0e3b3f4e5866683ad2130a617fb532a4da4e4a748cded14409e476f459c92b43f4738b8d5cab23dbe74c476c48ce16d1e6b9f04160c6bfe08584e2aa3077486edb7efca90087b866db6c9693bdff805e72f769a0d60edaae6bb12ca5fa4c74db3fa65ff0bb54c79e61586847785c015b1d52bef724e0a6f868c67c92b0065f70019218073beed938aaf053095e97d9d8a715339e93adb8234ae450198627cd95693c5b2e6560c6e7b68ac89f1de792e7d16850f3044b68c9a3e555ba4c0a61f17a4df8f58a7d5bb9ef7b02d5136fabb192d364fc6073a8644c79c27884f48b045539cd5032bd8e23e71830c2e52f6c3895b96f88959af8086523d8dee1b7f58578afc735f32ac6c26e13332aadc6d55e68c6cad6ea689f429856580e6b82f3b940564a208361847079ced50c1c03f0672e4e082cb2dc68855091f43950aa8833d54ae7f6c73c62802ba166fbc101b217d40031569081f15e23e4bc792288ab66a2d546437a4e9f9cd3a4ac92c8305b3ba16e9b4282b487a7e280bfc261786045ea4cb2e123f53721dcadce9c7a53a3887f5c1d71a7a2e4bfdde3f9586d06831a65fc053c79c74f2e49d059c7597a86ad266f90ea97f45c9ab7524f403666f76be352cb742b2fb8b736015be586dad6026e420eaa3a975049b0120647899e82d08e701fcea8b8c099d2181a0d06849f52c2b9666eee848db7664daade04fb442a247030bfea44db3e5c739190b72ae49fb4096c792d1d3a07623a934027baf2dff5ed65d9fe39f784e37f23855759223011ae2d5cc70f44cfbe22721586d57b9019bc2d7259a6209ce6669cb8fe7b2fbe6845f69959e6e1416c52660c1010a1ef5d129a26b3b0c8cba6e9191a2bd466df5520c0b23a3a525526184531da7c7a4a53223d585a58329e9df4190175fcc6e1bbc8b99509b97c0bb9d882bd836a2ea38ad74fec38f341cbc0a77cc4a976ad59cae11034f35ab59b965d64f63cb2eb2c366ec4e1a6f0fa91633f6630d254a9e0a968d43c195d5d3bc4b3587e5c825dcfe488f22e9f1c85f18743d502c348495dc281e0645a316657f83b34677a8003e6cd337117a0e14ce564496383d4622834f271737bf4e3546b811cdb9124ac60568afeacfa1272c93a8d59d9a4ad1eab7706952818d0a7e8c94dfb3e799ce9073ce83fb4a020596a8026b64aab5124b8cbdaf2fd9d4a29b62589325e63fd930d54235676956fb2f109c02d2a5cfb2b552d0e5f68620ccb365069f11c95d4f3b2e1a26e25fb143fc1fcc69e62ef54384d5c7418cfe9214abea1ce8e2183f47116fccc6614ed174f2f42184d22c1615bac21906643f5811faedf7de6e61a7c38ae46b6fb76d425f47f059c5beb5a166f3426433c175140d351e4c82f590a05428146fa2e07e8ba5d062a1dbe4391091d723de3bd2a7ed68a9df2e42cb5664b1366fbc982f69df118e46308cfcc5c5146e60046db25e29d295deab78bfec9acf7d9f4d32e9d15d67078afe3adf7e8da1dd12e50c850066c5c1f7775240d86a914925f0ea56f8784ad61d4d0953b0b6d5e01d76c1038cb375ccb54b62f39c471ce59a7388fff3be3860812d1f8348bac36bd08ab9ab66f613bd28cf93fd9dc7c586faab217c155027c5fd68c250a68f872ceafca62b45a026ea5529d385210b3a5c68f8fb32d1101e9705830986ac9b5e514d30fb57101bcdcc301cd04442bb36b3bde2d67030b699115fe1506145c9f302891b2055f88ae461e2032ebb8bb9e9310347660fcce249fde8174bbfc30f7020ccf45872fcc837e757a75458c2d9af35c17e4a8a2907a8e738f907df899638011da24c8957da98f4900e84a46a12bef19a3d55039585d50f9216dcb62ba4ae6feda952bf5c7e889c60a39b24b25d813da8a8e5064217b18680d2b064c1b726d45e4b0794cd5cba420b822e5e5c550bbcf894ff79f11c41f1e2ca71bfa4bcb8d8b8e8070f205206cf223b8851c2bf6e3b3478490f52fb00275a6a52b48b42f11d1ee7e37dffd75d6208aa231d1e9c0352fca4ecf11920b4ded3460e601b38404c2f5cab7fca073f768c88b9e5042da546f067815be8d0d3053ddf2b90f30a831971d5698a1dafb4d8e430eabe09c65ea04e51cb3725c973da2f77ebbb7e459ffa94b893a6a220f7ec829954ce223ca2578d16fe4ffaaf9013136ae95a6d036f6c1f36a7373d97cd722aa19861d88f7567059f3d30b74f62df4e62850fe7bf8ebe9622ff72e444afeeff35ce7ea14d8af9f9aeebba0161cb5917e993c68802408422c0214dd434f26616071068c1f7a778198a4558e30679771f61d74929b8621f419765d44ffcbf7cb90c0e578cd39fca3648ad7d7a9898b97fb0dd3cdd1d03fd264b99686db7fc739e457628cd8429485bf88e9ab9df8b8f80067578c230fcc80b9783fcadf38e323a4a3bb4a480c14ea2108445b3d0645e7f6b41fb8081a8b53d2658496c2de93bb7d8eb98925c99d3c371f88ef06d100e0d8e727e52a9c469468368494d1d0eabbebd6a2c6f8cb3ee95738883fef6abc4c126f64d63514b92b00a108eecd5df22bcd78773684a9edcf5078798c8f2074b7b63cef5f98c71df128d534585b703ceb4362b157b59ad21f56662dcea09e76a724f0f5d7ad03f2c4453cdafce99e091f74a58604d207a7be5537e6d97eee6dd5682a4daf00451eb8ac35808c96e372709db9f59f53b40c2f16bf51fb1145951be95607dc2ab4d6b598c3e57d430bd3768f2e5487f2460276e670f4b206c78b5e2d097373cbe3a4455b57efd7f61678ef287a47c984d4a4ad5e36e511a03baf52098155037a3d1159efd3717f6868904aff150607628efb9486090032943f63ff9f49150dee40a7d454451e71fe062c110901e5e23200703422774ec0aa7c42cd451ce71d8e1737d11a4fed4670d1ff3e49f3555de1b3191db48f3ff0534824a0b7517567c356ec8c441e765bc7552e019cb41390e5b7dce5497431ed3164034686f276ce0ad75653fa9428330dceee016dc7a6b1df60a0a32501c0032c8067540be798ed003ccb0031eb50230f52f4e2594934a9e1d784cfdc31314c969fa1c6f5fd2ff6b22308a80c5a8b6f18514ea371b9239f16fdbf89adc2d6cdf5fb737c81a9d3d55ad793c3b7544a3d5079032d10f3b438b72ac5de4cd6714dd69a6cc6dfe7ad80c3f2d55267f5dce3b2c5402ff625950f295afa0ef07bdde4df122641e3ec38fe4e0ffb9dc7c5792942803989215f8c55f9c2d22afd565417d9c91c322a8ce99334fa6b290dd73c2e3dd5feeaa092528252ced4807e23caa077d2aa1485c10f3aa8d7bb3b4a3413698c47850c9e156f9d98de9019f1d85c629abc4b2fdbdea2c43866e5dfe61a765aeb465f529b6ed9322881f05a7862b3045c97c8f469a4577ecb7b52ce29bcaedd5ca3e312d8eda1221286a0b43a30e7878a97ec5b133784e118fd59ddc222828d14111407226f9e1e230251de5770c7c68faf8eec144b300f241a40349366dbbe097a8f355e5b3288d4705a9b785511741eccad63f0a579446c820a830e7c17d26ec720848de46fd27e29a357b9866af8f93c58bd7dc3b06b414e71cd75ef0d29425ccd3cbcb87075687ae523ecd1d9f0fe4f37cc3cf44451d3c1f74f449a5bd81b3fc4cd3831e1a8b35847661ef2c4d8627ef6a50467ccbc9e81d036a0af37e2f3b59276a662e52909c47eb89e83e245300f432e1e423f77e5ed7b03621e601f2dac4e2a44a9783a2c6686d9633df62a7100fa02d59bd81bbee2f2e7cd99726f25e9dde7aad551917f72d5b2260741cd9fc0b43209eb63a75aad4184d9df27a7237334f4171a0d63caf77d2cad29e3a3ddf4f5a11ed041bec4eb876936ca58ccb9f0fb59455196b0132f51cc7236b83b322e2bce1fcf0bce675ab48f386ceb85c63ca7350acb21746fda5a96252ebb017bbfa19ba16fdea3743b3758d3f36f09155e3b770c21b82d79e17995b80dfa0f4968b9ef4e0df5cbcc44c0019d6327ad378568031dbb8fa063dc25794740e464700512304a07cacd89905df31bdf484df0b34781dd6f56a6ffd9684ccb154dbfa443e7f189e380a3e480c9a6b31ac039bec0bd7cdab9efef905a362b7225563d0074fa55bbfdff1a07aa2625625fdc129647162decf37214db1fa575c28065d66a818c8452006250a2e14673439fdb1a9b9a228b77ba55c5a4b8b44ec990c0aa204fa5e972eba8b9744fa845ee325d8e55e3142477a3ddb199c842862789012458449a73b3be210f2ffb54064e0f7159dfdf6b60090ea72d1a455ed1208d8c7b10fe2f21876b65421e6a06247308c877c9752bd72d82488f2007d336c3952ede50030b03f160a6662317d7bcc360bda0f1efbd68c85541b833b0724b88797943fed13fd941f85c05fcc9fe5627f8b9a0756e9bd5f558ca420129fe6d00dfb5cea17fb8fc2c865b127ebc4f4ab8253d25a0adb5d0e0520c9cdc28a95a58c498c7dcffc62888edd402556b849abf7eb218cdce8e63c2947e50376cad89f6676eed81f5e34f6e3a3377d9b05881d0a0e589cb13f4ec36da604a108bda4a711434e7e38ef3508881b8843c1e6cd5c775773ec5b8efa1b35f6e7610e2d7564b3d3aad218c462ebef9ede77b0be96b1cbf7a7d74e76b3bbb85a2d40956c5e29e556dcb8c2a474cd24f45e79ef7436637f57b7f91437c32bf00b30633f549aabf019280256a00c15fba5e2f452c0dad8ef93e8e8608e01541243f657cf796788797242941af0292c6518641fb3f3e1416c261d7ce9d8b7590c0c91cdab96ecabf2baebaa5bea980edae4f1d5ec9ae4fd1e0149f3ca0c549bbcabe2462e4c89b20637b92026a37dcb6a81ab96649a187721fb722757bbaead97870cccd9bdc2788eefba344939163de8cfd9613368728f1b9fb7e5ebf787b4acbb5d72c5fd274d632071985d8dcca15d278e9a899dac53f58adcbb8a6fc616c0954d8e0b9a0d38d9424290f25f368b658d670ffd72013b99a5451e22fd269a38ba0cac9bfd7f45be07322ae1b9483ee220f9c9bb23df3e957679a5fea475b39594a6e84d07f5fc5f67acfacaf61fcbdfd47117ca66edb5970bcb7f0db4672d4dadcf182ddefc66bd281e154652757b6bfa3417a2d620350a15167c62b533d8b2d8b76a6db76bf5a79129ae5701f16296157da8652caebac1486082403b2c86a9871912950fb83585734079015d09f1bb617cfbada460fd3d478ad6fc2f5a96fd7a41ebf672fd7db0fe5c6610889e26f4da4d26e73cbc66ce49a46b388cadca80352e961677b0a1d0b70f35a89407e6768e9e359a25f04ee40ff68e65031b12f7c1e50b368a3f5ee137a8f89ef2a8c347cd26133c4bf03d9ff0495ab57b3ddc6585612d3b9fb842f7798a992c66ed084f921cf77f60735f6591d729f7b8d8b86ab2fdc51be1907a2400a195e9b2a5979f020dcd8c135fcb99cf181808f03ffc74e474ee9395151df3e42c85999fad32080fd9041faa54b36bcdafd2129aa7801a6081ef2b67e27e00ac197614fc4ae9c4608ec0ef66e9744ba47d320f534c2fc65b171647d7264dba38e2632f0fbd943f8a6321b5ae3ce41edff0694d56b1f4e14a0c35ea0388aeb368cdaf1525ff9c23d1558f77e6cd92316449d8c218d68822b186a68a0dd652149fc2ea1f3e2a5af3cf6c945e58ec494206338f3d04d06dae7b808bba71297b071cb850d264d28afa6ff4cfbc4d4eee1d135096d55d561cedb1149178aa381354162f202d7322ed380a8e7baf0af27bdde51ea7b7b9e3fb13a161850390895bb89c4719b37d2221192b3d11a8cccffd8c967dde295a56ea1f92d4fea60509b183241687b06f17682b57d89d66c88dca52e2ec88895c8ddcc1a9cba3a7a32bd7d230ec84e67205ed14a337570f511a45c19fadcb2bb26302a80296822d1ee3b96e951f903d17c954439a75039db65084fe712ed7e755bff53d6764b487db49cc0af6961f3c17362b40349a1fe22cd2fc4dd0dbff9b2ac0f3cb3bb670f238c3803941d18de4f97c520436e2167649598c48b096924b8f9a7882cf3db9a20f66486171e967207ff41a50a70888ae08d56dbc021d95d6c24723adbca8e1fe635e8d0b46cd2e7e654f4e7d3be6a28b14d007d2b8063e2a14e27fd0afc07ae0bfdb49cffe4abd0981c151adb2a942cc502fcdee11d1e4424ce8d413e6804f15aeb28b2e5490acd264f28cc4a23ad2e9ec6dec9dd59d898c4d6a79760a6bfaa702b607a914c95328141e8f20fa9c342d16d2a9d4b4a622fe10341e24927f2b35496fdabc681efa39a2db57b19240419e544fdc8ec87323fd149cff76839fc61c4a6809259d8803c2c5d0bca6f0a0bc50c14e1ea647e808c282b1130d70df0dc0ecfc24c15320bb5621a9a831118c788723b107f0f76fb6828137071eb03a233b5b7138a929c652fae4cd0b7a904de2dd20f422c6be7f88e88c88d60b749583260c140987ea572a12df2ea1aae36dc158e873dadb751af22ec0652114f41b8dc2161b3a6c1b9ca98690c127eec9dd28d7b8ec4bc44a424450f3c62f6a49083a3e1fb3b1970b5b35047a574bde13b76de5e86e04ccd3c80bef96377a792f4d2859e3f23e478e41d2e5870f22b0d32759e206d0a00b5d2b3139e4b8893b8a04440b49f1ffaaa33886db31b930ab444c0353eab13121e78ad970785dcdc01e64d20cc2019937e86791a712c0e017388d1757fefa45e73abc9e705e0b7c7d5f4675b6e17020dc85038a7616de32e86b4708ae8e42a4834f284d9d3e9024a6c07b9305941169c75acbdcb6ba154c872c6e0159785f3b55e9c2fa1c2f0b66b4550f750c89ddea717bea554f1cabc989172b5f78f5326e931c0bd8ab327ffae0b699be909bbed6e4d49478d909414daf3cac06a0c2f186013898a796026765af9ebb71442119d1b45551382feb24dce32522252d7cf31a7be913c4a41a26078b843730f2ec32fb3eb11c8186b8312c906d21247ff91ec60a0ccb3d3ee50783390065177488f6d2a06610d9321ad9eb3181819ec7808b9ad5287573a411a564c81cad7f52c23ed6b88da2c8ed8322a14f46c81a0034b49934f2113c2f12612d148730109180a165b40b347115c2625b2beba8d94c68c367f1dfe0700d2867b06ed1c4f194b3288aaee9edafde7026c18fc2220dd1aea0032640ca39e7a5c8ce1478f8f5f0e532dd6920e21a28897c9917c35c8d8014f58ca412c31aeea903bec0fd7a61a7d321cecfd68aff652fdb2ce616d1c4c307a1852d50d6b228af343c0bece70f287f4afb8979f0e2d8152afa1681090272816eb4c307a416da7e0ae5d860ee834bfaec04eeb2b1ed1eacfda56f80a920fb408755deae4aa7c312b4b2bb4c4eebbffd571310bdddf5ceab16b5e32e31f68e517d0d746a423243feee09ad7212200bdd20ac1a2cd712b315f3517914cb9816f55fb2e1344a165d97d74e0c919504536806b8298eb42ebbaad5cf4b908dff09835834366b675b3cbbdd88d53b017ed6a6965d8b58a5a621a70054708150fc2cc0b4384cb31c60e621c90c72741c319fdbeaa1e963eb1b2dc063a50a867f4dd94d9c3bf481c3f18ff0cf47592b2995bfd4901058a3884e36929c0f6123345ae34b6ca87dfa613dfcb79387b544b089502bc03ac96fa2de7784b4936a280f3da09c25eab29053408966ccaf0c686acc39818e8e6a899eb55846fe05c73883cbd030df88979947ae43f30cb82b470e45a953e3163d0bb74cfce6c471d57705c491b279b5f745b8081809065f75534c9d201c59c9e2cd4a221525949861cfab39e97834f4e1c214e5ba784f5dea313286ef39e248d9c0e9552a1a9a78d11b1bb56b8bdc1bb798f6976eef15bfb7dcc2e7f208eca14ab64632db783d7a44b24b3df05fbadc222e86a8d65eb02cc9208ccc6640f9c6298bb41e443a0a16983fd23282943c4d4282cff84cc217a43e4cbc6f88096f5992f9fb533026cad78d1c962648bc762663b4c0c2605e2f03a896427782f5459884e79dbe0128d8fcbab38596798f2407046361a0a1a4b92adf872a30eb945a94ac0655848a9226227817e9f121224bdb58196e125ba98a1d61d613ce71be7e034536d27fa0204d30c29c2bfb55cb053ce7a8c2fdf4213f2d07654769e06eb774ebe223ec2aa2f6112df492d01a73e75e4587110fbc08aee4e8d726ed19102a234ed0e0b144c3f06a82c728b9e352c76d70888ad49594aad2945407dc5a0be5a3c1923ef451b99f74247e988ce70606e4b41a161ae213f977a8a1796f0922c93ea1a6f2403538fc1664c9fc1cbe30acaa85a98837aae414450201bd068e3c7d783f27e9ae6ac9f858e613f4804de0468a9ab25a215f02c1e318c93fdcd7e4b28d534266ac7c1aca5157e62428461dea3653f9e2ec2dceabe426d87b1463f00e80d6c02517c9a1098215478bbafa9584cb01427c93dd2356bef0708f61810e3e0b90fdf6440c194483c0b457d734c4e265916129276127c2534cf879a9ba11e9d45468129d5f34bfb7e31fca6b0117c914ef79240c7c8d0e6f3fd1bbb9ffb095516bd324a21164c1cf9729da70cf4b8beeb0531e44239be3e72e01550fef4418377ee33d994df6b5d005000ec55ced8ebcee03a1aa8e7169b92b6c3a91b8bac18b9547a3789ef70516aec76a48dab1081f6b438cfe441dc0e1599ba228866f1826ee7f27f3334d65be455de11c680bbcd5ec870e67e50e54721019d1c55646506e4355991cde7eb8402dd53ed7224d80ab9e0a39959ceb43b78ca0cdbb6b8eda5c09a212c22e3501a5f21b5871114e6e8ec2c1e51002e91f677aa7659aff70126a9b7d5bd5823a29d1f9cfdf0f667e4bc3e98a4cabb2d3c74c501e3a66710c5d354c6a06ad68eff3ead3edeb29b9494fc72e83a9cbf2a0fbdd4b0f7de8d97f2920cddf50a329fd772aa53ee3549a5100bde7d22291f5e974a14573226cc35da7cea7231f721dfce16a80cf8b9d512f4b047b05c454f30b6d904e14422d7a5d745a13b96d1526fbb8d9baa4fac11bbb6a8ec443239177455cc051631cef8a76e11568dd84513df983059e036c74db94122646be7bf500b262de7e7001e1642cf000ab9407c09042016a5d0a30ce590085b23d0d31977a0e01202222ad07a40820287b72536300cab1a884d4458dc89a03fbd9a60968c0d641b86003c9c1be5e0f793f1981fe99a90997afb69072b32cf9a32e211aa12985680843a53de8d7ce5aa9059ef8dfc94aa31251e69c9ad2fd592b14a5ca14f732a7ddc1e15c7816dc17d68f4ab63cb554e52700d0ecaccaad77b34e1d44cf8100e327cc8351c953d06006fc621ec101d5207c1cc4b64cb4b9f44ec83354bfefc4e5dbc5a07ad00e388850eb096708db7a282404dd1188419cb1fd5e33999a25542e5036218c7408046a0db60498a31d8af747ace966b1f4623bb0832f889d8eabb153c61d8f409f2cf64be8623cc117eb40e4cb9d140a90456d518199a2d0a9458a4a3d08041b619509b4f238c7ff42f618db93a60cb2571ea1a0aa0c2bff3f721c12a520af85b8b4820516072450c2480d46d914ae0fc67336f620263fcfa2c42c867a9f5aa7309c2c14fb704bb7679799b3d0eabb6ddcea24580c9ea2032c8111af760f7dacb1650a9a612330de3f5dc1f8fa3cdd892b1359be8fc5694613bd4a2910d62ab237947c676e566b1e605054b6a8cf9a96e1f33e8737751dbb888b27163b125b7ab53cfbe2d46b66ac209ed5954920e754c5ab0782c1548ebde46b57ce1c2334181299587657c09764864bdff0888fdc9eb1affb4634ca6275e78c3b30f66d3ef03dc8a3228070e97df8a0782d7416294b46b09e2e59793fb90ce1bae7707eb3ac102722c257d64ad5fa371e39532d2535a729df7420a8dc73dc9d2479ab4a05f5479ed5671bd8300dfeea545ebdec37c9e0681e0f8203374a1ec79b355272b57d31264d5400e51c311d2206d0484906dc7f7fdd3dcbd382a825c857db9582ccada1cf028833c5022ebf61c359d7c576c7396f9573f091272bebdaefeaa4ee99b243121f7b67fe8f94fee466049482f386e202f1abd95716e0e2e32b4aa638c93841df44379344f03a439b2cedd447c8850756a87bd11b1b24a95ffd0d7ae853b6ff38b1773b6e7fffa4448290ef7d563b8a0d4e1bf9e373cbc93611f226cbdb413c8640dcc1a543c191c944e3bd105395bb3487734a11817353f04d7fc8f98e4224e2acc3d8b77ed28a082ca58b2c4b0412ef9bef2db0e348424cd5ca6e5a3cf5bdf9c61ef2645c712275d30f5010f38e2c5ffd9eb7dbc0131404eb5a442a7dc80d89544926fe46ad2d2d7b2b3429e2446c1f7fb79fafe141912bb041dac325dd46424928a1f18bbf1ddcfc6b945c30c4fc36f1b9f8edafa8fb5a0c476eadeeabb0dd965f8758ea4ada60dcffb2276f0848f4d7d762dd6d35630618a114eb86690b8d1c1160029b597cfa4a472f3c62fcc3d286fc8834c76cea3851bb669e3ef1a3f084b566e566656914ad80646825a13132e4d3ef5e1272406c723eb2a8e8d2c630e28d8462ef2fbe9e1c11fb12dff552bcea5de3d6ebd7ba792096adf2e5f1deccd1270fbf99e1c747cd9cd27110ae390badbc27bb3ddb66332b716567bf8dee0b9223828ea2638b8f355a67df462728225f22ee4ece585c70d41892a0ac27c57bb41f5aa10887367e0cc31c62e138e654fc818f18c3a1327562a13d4143278742568f2c94f103198b479376b1d5c702f5960519599f52aed4b39892941ed7f231b81cc09aea32752cd0a157c9710bf330a8e0429ef5d459872736628da7dfbfd83fbc0a42bd6fdf683b1672cd3e4999bcbd7e21000ec04e442259c8b8da89f3dbae93516f82956f6f37d197d18335e66c44ce27ae92283fb65b1281e3a365bb71636813e7eae20c752de41cc306fa9042714b7247eabeed5d31476a4b74a46a1bc625f14965ad4fc8cc9af9823d4fbec180d0daa7dcb5ff06f6d9ac6d3fe906cdc9eb26b5d961aee74a7399d2c231872e141c321ca0b55a0346a3a3a8da10532c0c54e919dc9a0d8dec92dd978fff5b81edb14aea6ecc5c4a81813d51eac5d651adf38c9efec95e4968b694c7c29250ad1766cae813becb5e2d4d60488e38eed61e092662c66dbbd5933391cead3ab662c4d86e9c2b235e9d82fbe8dfb04073f36e3d2f26ee90a82d46a23cdb6cfb72fc9d81ed7756623a640c45aeedcd01e68472cf4c49e1bf1c8b3fc54d7694012919c242f9bfa7122dbd8291c766abdd6a92b44bb3b6ad1832ede867985e0a14977f0386da529b2f004a2e74ec24ea5ace50ee7b2c075fb98031a57cda619acf2de00ed0bdf243e3e82025d01e7d6fa1400cbf0e025913a371cb29ab6c58df9a5ce72637acc6676b5a4e96bcb1f27e2533b00b8843adcc92c69e6030dea5377c209d7cf90aae846a6266105d2212d250459a462a44a5982b1a943d4bdc835353ac5cc79422498802c272604b27425e4b1608f7486edf9826d81a9cdc9f273c28495319df65778d9687ee60be3363f87ede07b9cd1f8333cec97d320ee016b3ee83f1658e999e1a621c3f7985ede1b067a2e15875595351c8d22ebd8f40de818cb23d1ddd281fd5252971d6c49415e70f4648a62a6b0a0f86e4b280957162030d045615c8c1f08319bec800932a75c67d110d022880772f603a1b8d4209abad03efd61b304ab5c0a4f6e4eb31804dc0e620441fcc3a116798e132c6a72622044ab0145478825521d9f5eba5bfceda26ea8c5f8b7f4e192fe75bbfd389cb8f9f2f3ed6422797b8d9b4e8c4668a76fde692d115306870278e7ab82d22a8c97cc562462acffdd619e6d5632359d4ab83f7700346570d89fabcf9e9e6e24abfda77091f0e8bb8aa57c26420db82915103310eb63a816ac33d31d94b6a0da59530f4a2205273f27e0ce79457eb5fcb03f6d8c7828186be110987534a28c94d7d0f40e5b1a331f98066ae500a7a04d9a1d8e669f9d8716c23deddb1d65acdb6bf2ba087056b8a404744691944ff6f94ae4b3ae732ef5bf50f5106dc963ef9744eab132c7b624d691ebdf7743a63559ecbf46dab8a857161ead8b056f5ecfcfa2f76a8c63f798ded23156dfbf0f4dc8c4c7967df03507c685f8ade380a37348276588c4c40d1795032249c88d32a788e34a55238ad5aff8dca6ba4c2f2d238ba21a47567121eff10043dd6702ae041ff4829b293642148ea4a96ba871e0a32b93f139aa8029d65778bda38ce5cd2733302ab16e6fb61e3046ea0e5d3902f65fa961a49261ecb83a4ffef7deabb3347049758ebcbf985a961a7a57082f93b2af4dfb4200fd266b516ab623339e0c56f96e7757ddde074e82d5f66e514f6092bf9ace708ddc099af649bf0e3026c0051a889803ccf1c8844cc4f9cc2438543eb260819c370b041c708684e8b148739e614db2783bf8aac61cddddf941076a918d61bffcbb6222496b9fc09dde62a1cf1e28f56894658a7cb6cbedf8ab558c373ea552f679287396cc3d6c80b7a3040c3f914a58e043e8a5078d05c73e8cc11ad291b5e38a720ddfabaa5b17e15356a116d6bc13c7a9ca92bb039e2e9386705f03ffb418b24156114cf370b65a97ce3a943c7275aa6c87db3c0451fd318fc9010cb726448a78087615b076a0a7ad9f94e5d752e9d085cc660b8709db3895495c0222cf888f1918ee88a1d4155e983fd02aad75fab6e85e7d0454618e44a52872b6ace293783f38e92f36e924312edfe07b00d7a23b42f58694b1b6d746bcf0e36a3e76cff18c1e7e13cac9f8a282dc0d321e24544f39b65e15d6789c05d427536af614303a1cf3791e21a8275616641bbce8f2f01affc788b720eef6e804fb8d9ffefc021af7bf44efd7b05810aab0b1602da93e65695484ad547a0888414f61fd90ec82ae4c8748664117de1f284baec886c5bda5b7e4d4ce30c1e7054bfcb0e915aaae2743c96b98667a8c9b3c4d60d95546fd0a78931923af0a000e0fccd9c4f5e6ad2f80b2ad9869ac4b7c6100cfa3a75dccb074238f75984177bfc18aa3aeeb1e32315afdad7b6e42fc82e0b5838cb8d30fb9cc95bb12cfa0db1809ee5217809f3fca3942a1d70b3709a933f5a1d0f9a3c7f2a18dab264e5101e0c2b38bf8ca122c0cd4132867e8ba6a793ea40bd4156740aed4e2e1e3d9e820e5fd5f9874f8062c6ee2eb51d1056b455654897016c4238cbb0f6424010443470845fa6d2c1ab2a133c3447558dfa2dd20501de34c0f1c159e0c508f9e837e82568193e9367761d2e38dd013fbc32f07cc11e8beb25fe46a1efea6b4e07a5d407ad8e8a312d2ecf96a60a8cdda89f902d4de9d34dfba5580413891d33e76335b82d1efe38e8f4b44d01633e9746057aeb00e7101732520f8586d9a8d91f562750c49de0ecadb60b59c13dc589696cf3453e266521e068fa214ca41c4ea6b88544a1b00cf47ef2901ccc0d0e190952398dc7c611ed3d3988854bacd3e9b2b4ca0b819781600698eb02d2b267e8e1983aacbb4aa13a7263b39d37b99376e80d249f2b56d895a00cf5e14940bd4fc57346fbe1dffc06289b971c5df186bea86fc5acdb70410b1e81cbfd68eba277776e764ef1c6a77759de93fa231f6e3370aa80b8cc2b008702c4cbe82d6907cb21e1593e5ccf047ac253c2ab9cddcef8a488b5918145df3df15d07cc04266d467851ac508792fda4b0954cb54858434e3b993acd22ffcd4bc4a2a1caa09bf372602b46f12d6f4ab10955c8020f3dc4601fdabd4ead5428670cee7f743526f390a7f94414fd4bb556b80e2c0944fd091370063857f28878365470cc2c71b89488e457f9bcc7120a47a1270bb02e8acc2f5a1f14d86790901c3619cdaebf8b82b4f05649e6f104268e1b37e3ab282acdc1165d88077b5f56ccd55a14eed07645766dffe3c00b13c8daa9616d665944e7b1534a78455949193865fbcf01fc642b77c133c55bedc95947416d1e44937abc431efa83446409d7ac43f64fc58acebc63d220feee3f28bc17cd3c2920fc67ed5ee94b1757b7a4ed09e357e17b605c5efdfabb00b571cac241d50ce11ce42e4fa1b8dbabf43575a1d836eb868bf6f2bc9ea15c669f2d308da76a14e58d2e511684b76aa5650f5df1c957fc23ed3b11ec1ad50a20273813b3c2678aa16a241cee47c0fc9a8e568bd63c3510806aad66fdba642f62194b618ecf4f10487dde7fb946f405cc92795373e24334fc5db4b80169c5394be2992558ed2a8ce141103e83a13a12e310d111638a88b7da23ee07d82293d0bd35f859ef1990bca022e25513a78827ad91ceedc81c95722dea61037689776b73b5c7f6c2eda853a54d8579786fffa041d679c2e3f7da3f2afbc61001bc5803fa82a6885e204ec2da1c357cd2376755937a724030f86d80851ba2eeba3e3d6cfe4e158a77dd8842e96fef6202978eb71f7337765e96153ee108c81086f1704058e966209f826290a07aadeb27a4f6769b4d40a97bff37b32666bb6bbb7b4b29a59401580854083408dd86a2ed599168b72c7415629b9af2979f7fefdf640e9f8cf112c70e7933203100c8ac01a969903b00e4a7e62f043fb366058f6e9abdd533ba2ae0fe3e2a314f943188ee2b24fcf8a2b21cebed428474d15a8b5bc05fab3fc08641b45d25c1a97d9bbfcfbcb52aca38f6bfd3082fc147aba37b51030cf155518ba8af8eb09a04e7f2fea83ffde067f0c440ffca1ce7ee27747de20e9641f7da1cc326ce39f315b71b5a58820bd4935b0f29001da08a105462c8c590840540983c7202d1098d127c2e214f9ab042852a0a19155001c248c4f0812f4b4f8ae8c203c2398518a21089e918e3300ca310a14183e24903e3ecfcccc441f69566a77c79f19bc26ec8fc9405535f77422346d9ed79c5e3c532fc423ab6a88e307c0dc70fdb53e374c6f9f1a77156c704dc49b0bb6e75dc38086238ba2ea08b39ab631fcb58eb82f1afd65a8b6b5cb0ce270cfcfe9a31c6f8628cb1c6d5b8f06b31d651c6f1da7befcd18e33288cc6510a9f5d5214e6f951933487cb3ed318c8a8ce2fc31113cfe540538ed7b8607a18d11cd388ae12478fe1144c2294e8253fc1b14c1d79dc483594fc2b312fbb728a33a5c1d15659bf8fb6817f1ed738573d3bc31a3e5023ecab616520be9e8456fdd90427cb77e01f7dc8fa1e3ac614d3e3770308b16b4d984b06b0d84e73da16f10bd583a7e58138b281108bc8b7679e3ec19fdac7ebd3516734ef0fbeb2e1a77e36aadb5f62cc2185b6badd51d3fee58067c72213b1c21c5971d50806b411620ec019d5114345ca060c1134c96c0d80086dfa65163876757a4e3d7646cf6c453a1afb49c8ec22f28caa6f0ddedd394293dc75bdd3e4dc9f5cf051cecf6690a0f3d679a1be3294b3ace999bffeaf64907a53e76fb34c586bea6bb289e30346f07b7c5331249bb250913de12ae27c595014c81c493186e59a07021e7c004d142148e1501b4c666b41c2a5d7f788452d7cf8fc0d2f57f6a4498ae750ce329a68081a7415706450801940380bed2b82225a94bd1b2a4a4eba7a52e5d1b912be24ad7fa0e556df900bfb7a55384093a7ebeb5d65a6b748821a088f04097134801692149255882055b58e084022e409aec40d723f8a1eb56d75a82f205c313849510b1c3bdf68527465cd8210420c011d928c414f1e4890d524a3bd288149e33984bc40b374138bce57c8754f041c997235a607242080e5c5e088209530a80e001882c4a220a2466729ee93d56571246b729c0a283a1e3e73a2f1dffca9cad00639b27283b741dc548d72ff221aaba06a2eb7016c4ec87c0d5e8fac1700a175ed09c246353fa4a865c948c702b66aceb59104d5dbfd6cfc3742d44115dbf2e83f4afb8d52de3dc879202222b5470e041e101e9231274800361905c408518204dc2d0b554d76f636f2abeae6efdf6db8598e93816c6095c11a29cd12068e878955bb1e2d6f7fdc84b647bee8f2fe2acc843b7bb88c82eb23a3ba33124b3c9f6dcdf26dcbec690561188be5fccd99efcbb6762a1a1efcfe7daeaf5fd3aa480d1d13e667c6dbe7f765bdea0f508dc32f9a4f5bb8b7a66561cfdfb7cae427a1eed0d5cd7903f9e2c9dd5d94f9e3aa6e005c09dfc5b9665f9b99723f9b9933786a4717bdd451ed03a898a39abb37f65647bc8dfcfd289bf8a21599dfdbbbc41eb236a36599dfd34243c86b46308cecd265cf18c219970fbba32d24df64dccd91e9ceda1adb8853bcc724c97290abcb73268bc5df7318d9a691544420941a0e0abb10cbadfe6f904c1d7d9ad83efba659b08b70ae4deec966db228d6045600ad077f9664867467379910b3241d7c592edb5aa84ccb1659aecba8ba6c4a075fd62473fade68464486d7c15f65bb0c726e9aff69baae3b9f6e663443323b9af559116cf311353bd2c19791990de121c20856077c190fdbb8ac97011d53f0f5e66c29ae4aa1efbb8482d7742ba2ab02baf8b21cb98fbf2a60456e74d5b33a39dbb379b6477c70dc3581eaab6ed24db83d77fb9e89b23ae0efd375dbf1d532dd0fff1e659beb96718a5875ac62895875dce15b3e88b33de38320f8bc355671ddc69d0bd75bb624c773c7eaecf045d4064e4112ce12700a7e05b20d472f88ebe692c2ea3aee5c376cbb4a512e9ceb0757cea5732d81ef62d275f05d4d5895d1c1773961d53e0171d4c17745617577f05d53d8b681c00fef1e77ba26a60e7eebc11fa35ae394a51a794aba935082ed19992260d5d18a4dc107c79debe6baf9f8e100cbc1256ac065c10b03f0a7e32220200196834b34c26581294b079fc7b7f4ed3e1d4ec1bf4497830f89afca65e1d38d3ad78de636ee5c373e34ee6e6edc6ddea7bb3951b7eae1f800db5c4e5c379c82efba75f06dcc722c7a596712fb4047c029b624607583af3f07c0f698c76a9b387f1b1807e7d02852e31ee9f8efcfe334b54b3c46f071df8a607bf29b5667bc322a1c7f3de08ba336efde8bf3120a4e3d86d3cf55b211262352469e18d1e11a3941eed98917471defd7fb64f5b277177dd4565facb30659f95b5de7c0c0d7bdebbbcbc1edf81a651bd8a26af1624270db6f6f91e1434458cd453124db43c3b68d706b6a1b911b09b6d96db47fc038f8f9116cdb497692938e7fe5493a7ebc71db08a748706b4aa935d5a2c2ea7df5767cef8777c9f628615587d5fb200c24dc96fb5bbc16154ef1cb9c4c75db93bfc481f7b735aa047c10c547ddc268e2626b877c881aba0ddd3034821ec3a9d65a5c450d0d0d157ddff7ad4629a8325561182e419571822ad303541926506566b8506588a0ca18415501c6e572dd578691f9425541351619edd8fa7a3439d2f2e7b36732cdd9b13d9f4e77accebd3866ce34086e10fc401004c1100445105c81e00882e6cf58df064d42be1ac7913471b87a1986380c7318ea30dc61f8852118866108a2b49c7483267c8dcd60f158498eac9c9418389dde1f188aab510a4e97e3483ae01cdd3e3014572359ea70e41a5f64910ce925320ac5d548962c3139766671ec8f2b1669adb5566c91670dfce69c730e7968419706298438e96f9868753ecc59c7c89f30046d6218827a631aab7dcaf03c8b591d6bb5d5c936032ba9add9d07a3eab60a0e7bfe8d6458b6eb13aeb16abb26e59ace816ab66b7353072a687610cf6c2aacbb6bacdb6db55b7990890fdf0045118b5d4e28c38e94d2d0d2fde468c96b6eea2aba5b24d4b611cfc391ec6c18fb554ae46c77ac7d33ccda3ba9aa7799a97cb36cdd31a6b9ee6699ee669de2ed23723f1e1a4290f0d1ae1cf6831ce69d0a09114001a31ac811982dfbefade7bbde4681dff78f3cedea1c5f25e29d0331afa88ddc7e75e1fdb6377704acb9999e6cece4ed69281996d9f69bec00c77700db19cf3976d31fbf87968e95b25fcb814c2a5bdda8ccdeccb1023bdd1b80d7aad9bd9b6b21fceea8ae79b38dd5192be00e4d9a003e005fcbec661752e0edb6371e0d018cf60d36db6e9ef69591dfcd6b63ab63d966575f06fc062d91e8bf19d618741e71901bf3add4ae15ac8e6ba4667740050c1553d33334e0da574c7e7053b1f7c8055bb6375308d9d9d6ea3b1b34302808a0fdc79f2fb4ed39a9c8c696b4dd3fc7bc4388e3ae77cadde99867f075f6b6d3b7e47b80377764a041e38c53b8af0d52e75a982aa5b29423f356c90390c338d1d9e98e57c87dded9862d7f17871d61f18ea70aab16a451f3223e93386dff711c37da8e03e3d7edf670a7edfba80dbdcebeb3de12305f7b1819358bd3f38c54b58ddba1dc9c31fab736d8ff5a9e2f72d0dd9b4a54c934c0e55c7513b7947ec3f453f1c37f9412d104d4de81345cd0ad266db87f7d6e155dfba93c8cbc68f0b097e5f776dcf0ad2270cbfef0386dff7e1f17146fa40c13f0c3937cdbdf3f9b267c2adcb360be4d302fe82f4a1e2f72d6e83b38721df3a73ebb28cbe753530fc3ecef66cb0c2646dddd6e96c8f5dedcadda8b9d63afc7284747daef8eeadd1f4761372cfa8d639a333b32719cdd5ce3bc2ab5feb146b4d7b6bad35e15bf363cc338e3561f7fbe08be0e75383201a669c4bd583842009efbbaf244419f17a108c9238bd971c5725087efd042c6463190ac6514b9a2fda015146b5cea8b61863fd77c74e691f63ea80885b34dc3126ec829a538d097e9f93ad9a167e9f64e2f73b20e2f76b78fcfe4633e6bb16929c2db626f8fd9f99251992f8c7bcd22fb690e49c73ce493ffcc09cf3eb9c5d50e962cc0abfafb50629a410d6a0f87d338f58cd5f5b82dfe7b7246b4ffc3eb90ae932114aa0ef599c95b4f7de7bebbdf5de7a6badbfb086057fc57e85ac450da5d57232d020030d6c3c357c8032b0b1b50c3b52f8fd19651088818edfd759e2f773ca9ba31865d096815306651f29d64e71ca9ba31b9e1be54dcd06060dbd810377806384819e2fde45cfb1b50cdfe7a2cca15bccca9b19b82c07014402089136db425b0665a10fbe0b7c5080bdf56651656f54eb209333160280a0cd9a199a5801f48ead356a4385df87953733b8caa0fde23b4220f7de35168276793303cf9f43b033a4bbca8520638ca75c1e229cc444fc3e0f07f8557235d6e04a6b1f29ae7ffc1eebcf64b1f84ccdccc58d8813923818684066ad37510ffba8fa38c1c3e7214dace62f4c69655088da28f1fb30ca2010b5e1817fa80d13bf7ff210032d8334cfe923c5f3ff8b0d48f022a7a76c319bd1a267d643d6f87bda9e418d51c68286ac068b00b43a00ca690ecf5c04a9b5a9097e353ce6ade980666626966d20904db5063588fe9036f04ceaef865dec1b8d51b156675f4d6ee1f9f906125766c6116231b689ff039485a60cca0218808efdcc0c20d6491f29be6d90b16b83e303d0faefc3ca206de3658374951ee4fea304d73735f032281375a12020fbe34985c58a952156408497b710604132829bdd3e61295a41c169c4f8e0c4129cd5ed53535318a649884da509071478acdba7a618565365c422f84c9731092d4424b1fb9e24c10394244cd04b0204fb89c3ba7d4a62c896c279d587822b54610b78d9edd315a87188bfba7dba6204f97485881baee4aee0cc505b1bf22b1de8ab2982907316624c132761b4c28a9756cd139269c50817344be46aace8c062a6698ac6ca920d239ad9b15203f922c39067218a59317225c183595901c699307a5141b6ac0cb998a058b19c8c3813169a92095e8b49e722afb0987a608d4a943b4c4c566418722b3c2b3d9297602542ed4626a332bcc25b31b550825890c417b03ea8a1b0b737930e8c32b5f88547bc328d9d1d9e2cb9bdc32f94109361d874a443f11f57f161149f064ec528a728298eabdcc647c9210fb410611cdb435e0589f69c0cc3909bebd354f87ae030ba7da2a2c42a054e1e017ee1ad272111cebb7da2c204092a4663137f4145d8843f16f20877e1830f7c450de00ddcd5ed131246564320c10214afe9f6691785919dd4eec2a3764d455777fbb42bb28fec88bf1ef201506a31e75de2d0bbd421de7b49d27eac85a3f7dbf237f040ad58f9234d6e9d3d46d7cf57f0d858c8662d5cbcf85395cd5ab878f1273a0bc0ac858b177fa2305ad068e1e2c59f280c9a8bfc9fb306ddc58b3f5118349b152c64226b7feb4c6d06f7c5fbb3f14589e3c9bb4f12ef8d92796f18a4de9b46eebd6dc86fef1a09ee3d3359ac67b14e160b65b160b0583416cb86c5aab158a5fe0cfe4461d06c6a37d9d66aa1240f67b060d06c6a37298e66c12031a0d9d46e529c189adb669765dad46e529c18326c68757611de4558bd3996d679cc9c595ba8bfd45fea2f57adcfd1a6c47143e25247d6fb03f56685346e62dc689d6a8da3750cad65689da3b58ed61868bd592ccc1a9a9918ecb58285c8627deb9cd90cee97677943ec2c34765a207eda94c5c261b162b0583258ac1c164b87c5c280c59ac162e98d93c6b891915e0ed25ab73fe65c0ec23bc3c6e4efa3e431206174568963067977489c019901406a0dc84d83fc7400b40e5927272db6dd1a01f995f1093b8cef0fa41fb899520eab3aac2ecd76d9d29021e8f8cc2c976dcfc338f779363d203fac1cc80e08936c0aabb0da109025a7a17e1f4853fe71fbe1e487e62f1f483e927cdcf25d6fb8dee3a847921e48d9be8ecc7c5fa5d175cc91e7d1d03cf5c61c1973e485f16bcc11247b74fd2d83ce0e8128094c599dfb3f54e70f0fa7e0f316e7cfecb419870aa73f3e370c599d8b9e543ddffe42d705f49ede1456b1ebd7b0b63beafc575557dbddd6ce5a6b5d38482edb6437cea8b309a7e7ee743aa56267533e99b08aff6c3a99d695515f55ddb93b9762a0aadb44ab85b2eb160a927e9fd77a3647d5f76d55d4573ec5a7fa7dd67a914edde974529d5358b5d97689c290e8e43935adc0d75aaf97100b92cb38f7b7b9c1e73f9036466578f730f271c4d42485b9e67fea78e63c153f7c56062c8f17413292601e4910d7c8d47a4f43f048fe7d20f7819c339cf2274f1aff3b86e813c9c8f0100b5dc710e5c8fdd3d2c4c710e15fc710e1314418a3eb98a21cb984204172d956ebb9d035e40f4357ee9a2971b275ea7c1c1d6d893af29104fbb0f84f9d6cea79e7d2b9c3b00ff6b229180cb637c6f87f20655b0fa3d0c7d1f37c24f181042bb2f7f3b65e82686f180cf6388591a80c673192e11e48b02d26864c0fa31bb5839181fd2a860c4e2dec3186c130993143700ea7f767aa708bd3172a44c6a6976d1729dbf4667f63374890621c5d3977a1ab09a2ab2914a5ea54326a4fd5c55cb21b239c0af184a66a3da12821aaaa56acd6cbb699d0144e85a484a2849c549d9092991019ac66db0e8c733f0c77394d8c360706ce93718c566408baf5b65a9ddc56658edc57768b8fa31f48522f2cf630c2218eb9602319826ee681e0b2cd46b8aa3a55a72ea94c6ad4911aa54a6d415a9dac3875a73aa9534837e9deae938b0b7d1cc55c3050c849284aa869d76d8fb9622ed8c71b6b50d9eb3e0d2a7be198b9b98f4f493c9c861085bf7e15c37ba1bc13f7f15a9c33eb85ae627a56c77610727fc010a35aaf4685ed89fdfd9a98cbc1ccdfaf919171b33dafd9671d828ee31f485b90ec0bf623e9e217beb8070c017a75b939d9f44e580f243d8e5ef8c36fd3c3f78652105d905c90ddea04abb715b7feb0e65e1f7bbdeb45f3eb2ddb4ed8fd406a8202e7240505690aabeba9e355e584aab0bada2c463d8cb00afbfb3f927edcb0bace3abe2ff4d4d4ef0bf5b06a9fa072fd7e905c10a520ba204b417658c505c0fdf5a70eabab2cea46d20da41bb71b4e6ee0b07a9334d08dd2f5fb170704080eab337f1f480eabb1bf0f4409abaebf0f443773ce6867fa3251d9cb56b1ebf76b50d9eb04261a74152375c2ee4619e117ba8a91122335be5e18bfc44889a1820207052eeaa8dfe7f57bea6e7903edafb7e9f1d653d7efabd7efbfce1d4456278b51bfafa3ea22ed26db43f367a741211065752c14b87e776c91d23473aa45dc19e3af760b122e6f9c3e37f0f1c75be670b9500e86acce779370d69ffd8556806775eeeba8e2afd556e55422acce6dfd0892b35cb68521e7a639cbf5fbbb0c21030935659cfb3ac0f0d7bb4e756977436eb66abb0ec20f91d5b94970d68f22a94e9541aa5411bc7cb1f460d6d5289c5ed7bb5075e773036f7d2e73bc7ec5ddf5b7bbd075019d03fc16a730944654b6cdfe3ef9aacef6e007410767a7aacb38f7a9721ebc46fc6bad1773fd4d52532c768354eb61db6de176337433e486e8a6e8e6c80d929ba31b278efafd9bfb3117166a128acab6157fdfe68e51756775eedbd095c2fe01f85dbf6214a5e1f4ae6486489caa3a9cde7f3d7efeb0c70f73bd5e0653c960f5feebe4385575d87689e4eeab3b95a909db6880eeab51f755a9fb2a1556ed930a7ae8f7559e5a8555fbb4a5aadf577bb6a1fb30fcaaf5b24df6f7ef083b6fc725ecf5fa1f0c832999fd0fc6aa2edb6a3db4d6c3a912a2079abd92d9afb5deec717a67a7ba84712e0cbf1e96e3f5ea0e76aa4b38bd670ca724eb5c7979ae3375d5e5d6ef8ba194a65545a2dfff6c55ae5f7dae329af4fb79adf5fa7dd9c9e2adaa3b574041ea97a6eafa7d1af7739aaa8832f1455a62b4632bffb8f717bae0a6c4ad85124866ba022ecbf1b49cf39fee589b1016387101a72b010e4a1340f979accd86911d7a70216977830b40f961dcf8d352dbf37d8fbea50e7135eaf0f746fabec7363c252acdd9e1a9816d766763aae7c781559b9eff83a89e7f078f9d6d437258673d6711f43cc36af9f9592ee40d98fb16e6a0fb78c7ac4dc0db04bc927d5d3f0686571475acc057bffaecc8d3635fb724794fcb715a92f70cfbc8bae7baea2b097617c3e93d5733e3d89cb91866188bb4631f5de43d457b499cdaab6f0ca7f6635dd4845597e5409f04bb8b91f70481c7ed8f766646cf6074d5572edcdc1ab6b136cc39e7ac616cf43bc10f5f882e562dc619292b59b056b44c5ee3a2b1f6a57386c562b099178dab869bad152c16a58c9c8d2d562ec417e183e7876e189a966d70ed5a7b63ad8d41cd406ecca3e3d2b719efb7373fee1967396b68219961350658c7da7c7b4ece3967193bc68703fef0a4a4fee1b95989280bbc86c2b0e69c73eea1f5d55a6b2d098306621472ce39bfb9c3d307e8bccf96fe7386f0c5598376017bb588c166abb5d6da1916a10629acd65a6b6bb469d658cb62058d8c0519ca62d6cec816127e37cf0e2c0607d2e7b13af66d7ee1c2f52f387fdd424f32cc39e71cab43e32cf4637000460aa9d5b134326625e79c6dacad8969b696c4f9fbc9206d692d0931cc58ce39d3665b0669adb5566b9d439e357cce39730c74f00c0ceece8c32c83e6967ece09f2735378f99b4a5d63b5687a7dbb73339a661db7c9d35f09c5d200f43b0c6a5f58302bfaf77fa7d652d598e38fa8e8142cc4ad63a6b9d559d4dab49d3ead8ff7e35f746b5a6059b6a4f6ddcce29e9f66e336da71db5a5c26fdf6e5667e3be8cdb38dcc6e950ef32f61b02c170ce39df3179c6f9ce6542df8b2fdaf06b9ad104e79c73cec520b80eadb51bd02388228f14bf0ff36fbaa666ba4383e7c7c6073b44e0e1c334cd9c9d9cd44291a62b5c201e661c1e218f70041ed91686e1083e46e0114641c32ac69dd6c4c8e301983ff113c54ffc56639875ddc469188bf199fd7e3f689b88e442929b335a9ac3037e9947b681e0c783442dc639225f0999499dc150a32b798f402fe3fd4b9544e58127aa0d3c798962ebed45c9cb172f4c35dd3e79c9c10b0c3c31146556c495b8ea02c5da17dd3e7551a257e36ae4dd3e7501c1acdb272e63467224cd6e9fb834c16508b2244b2e494f53b9fedd3e712992738d5d58b24a16e9e4694a06568bd57a75fb3445c45a17dd3e3de145b7788b3fe1a4ecf6e989a727947aece9091b64dd3e3d41c4a2db2727bef4188c25cb01ebf9593da3ab06bac5a97d170a175f9e13b71efe7e300441a212f0c2bd7afcb60c6a616c7ebac36379683fc3699963a3e16bd7fa825d6a75b04be3d7df67bb498a7c30a00125e00f9201fc7708ff1d826fd1b775d834be9271fcfb77480efbf58f8071f0e3d81edbaf018aae8f7d8e60d71744e1589dfb9704e23924878cae260d83388c028621301cb13ca39a22a55797271d96e0a4967432045af34612a7f95ce23a8ff62433efbcfef11e9ee0c97bb6ed8dca72acba9340eba90ee304f87d8d53febd0ca52fa102e237da78e199df70fa711c77c2137fe5b7249c7e2b4feadff324d67fe57f2bfefb12b26d47b8729bedee1e95806db9cc0e879a272757a230823a428477407940c723db86e460a162e0f5d15e27dc4255e1d41f30e4366a728c09c14bc02a8cfe7d056ccfaa7f9f813bf4df7711f636db643290dffaf71f0896806d2ea2befe7d06eed025ba45ee916b74917c7f8feef76016f92ddb58fcf7b7261bbdbee669ce5548a7f95b06d1cc3cf81ecc3cf842fa77d89a812e3ef83a4d21dd447307ee8c9acfe78aa57acdc3ceb5845ef33fb9e6643dcd59fecc69711a43d7eb6476cad017c577b9c00e73b95e14c513facb75a940d7999f9feb7d8d393f78dea83b43fcd7eb751994c51284cbc49d213ef8b657808be79dc2a91801b073d0f5af537cf074bdebb49d9f2ccaa0161a9e3f38fdd2ef579c3832cef73bb2ed33cef7dfb742779819e77b91efc418607808c307be869de5c2f77d5872a159c2f1d3c0f7e7c45801b7bfd27ac616109770c1a4872a5e50b0022996600a82082a4964c9e16230baa69559dbcfb5168649333f1cbe399bc2071abeecb0a40a1127ab34c688121348b0a0e429bb20872af892176621c63e54a08310479280e9800a44c0a44c141c90200da180a768aa88a9f0c32e072156c8e2011d84acd04b8274934274cbe1a5264eca2640904c7e9869c2c48f2740824c0a8199c312fc08164bacf09c0398322fd982f302ab881a36403ec18425e50732a311331d3449728416a8244c82d8f9929b42051b681801992c25a9492b29c76242d5e20450309820215bf2c38a7cebd1804c5e808127c881765bc18aa52e49e4085078708244150e4128018491a47c696283104e57f0113722b1db085e4d90984c6890111931deaea04a684929d4cc4cf3a70333f9c7cc410a4d06774b7078e5284b5c6628a98420636cc6e8160a08137457b7504018c5a081870c36b4d083125e7460412642c80a5f8af881cc141c9e54902341d288272220535a8c93d624a18ee0d057dd42c5a0d482ab755e4132b644a9eb32c5055112789690f8890bbe8c525c40c505511b2eb943349d6becf0dc28501843ad1045c666bc5ba815a674b05ba815747da5e5be29182455ada037849725b09020a04010bc212d2d3ca580089e304d2ba0e0c4740413320603d080c217251e9a6041855d352e91bb200f1cf54ed083ee8922282258f9e2f444099c2441e146db01dfc1bf728e7f4708110958c0a25406872629005a3f04a2877c0c0e3aa9a5db10208030e641842d4cb050810147e48808283d59628c143d25b6901fb826a0c173d69092c2047db539906806298eac747615298a6c252950f8a0a8caa1ca890d546551a28aca145543842ca84a41950d301aa842150ce0932a1540267a5f141e93da50b018e1a411a1133e0601a2808b3c44a1e425fbaaa20041167e84afba7d8a82485f79bf61caac6a6cd8dc0f0e5049982aa7305bc234953111845932e2c906c2300913c6688769a14a4f7cc249aa1509f8b8c4185e32613044c478e750605410054c129007302d8847c0a810de780c0a50065e32f14dc14b2b1f0d9ce689e8040f871efec01bc1073f38781de86bca6d1551dda637de2cf3c2d75a0fdc71b33ad706cedf42414141718ee32e9dce290ae7d22de15c4e45381c8e868686a687119457895db0d62c8759b8ac9131c998f054c9ea61f42acb2cbdd2052b5d3052a986a94989a9a6264b6e8cd218a5314adf06c35c5882b0479f1bf82aeba512846c7fb8bc60aeaccfdf7123453b858572e33b26f1296367756ccf0b9dfcf3b24dd56194f5eb2c07aba2b6abed60b01a13be1d56c5ee04272959d40927bc602738c1360c56c66a3bd9946c2adb786dc7546bcae57ee5b2a8cc250c068bcdc85eb11854d29824180c96e404865680a7e38b8c1d157cc3fe05433938b23a77eae608ab496e905ec6cef6bce8f76766d0d7071fbcce0f86e094bf2db30d082ee3dc9826cf28f833a5072ffaeb6d99c3f5b21b2ffaeb730e175a3342857a388d35f555d5d1d4866a442f187ec1602f187e7d7fa11c1cd58af0d7305a1b3a6b4594cc8e589db346541b5223aa0da90dd990c1696a7b60744fe2bc5175abc692f6da905a919a11565732db644818e77e2843b2e985e1ab0ca99f4ba76e141ab23a978adf469bde2c37cb8db3dc4c69fca2a47837b6c84159d417828e7f3d8cb24d864486e4ebf7673abb8553f1763d32436c44b2229c5e2d48435a70fdbead88169d0b86f78ddd5f2b9f72c1b0d6fdf5b51d5657ff72c170be91cb7fb960389fb073c17ebcb4b860d8053b69294ec94f86a4dfd7b2a38cae638e644848d269ea65d175ccd198a3314763906444582d222b62d1cbb616cfa758bff2a99c85126e19676453363d9bdecccba66743666666cdadb7bc2a61f595fb414957c56ec7845558a040a834ac184e7212a2a101000040006316000020100c0785a2b1348ac240b1ed0114000d68a048625030134823398ce3200ea22010628c31c610000c32441a1b2a4e00c7f4cd0e0d84c5e44e97011a26d21f21e22f2d3563c387088164088541a38623cca7d5a7c4e8238b7720a943a1b84cc06c4716acf984c086fe849980f5d620d9bbc173842cd1fcc846a079f79ef381c48147d029711351f037ee85b185e64143c92ed364321ec02ab2e68eeb7e8840b94d38c30b954e715d902e3928ba37538563b473f1ba260484664c6b1f8476534853381545b1f18d5825a1411a99331ea7a5306e92324717ee0252872c65419a120cbcb3682bd02db4807607bc65ca5c2327c60b38d80649148c4330374b722980b14eb45e12b0e252b046e43940f93e15f0ff0f1b007378d701dc75ba6b7636aa232677051a4601a2a3d2e3cbf8b3d41fe22500a7b965cbb8500ea12672d950b4171a76c063ea8b334e9c7b230535313ceaecbedf406062e2a71873380829f2600941b49d354a2c5914e9f07f4711b938f042303deb38c6fcce77c4d27a550291e9e1d876f8f60781dce1f7fcec846663af2a1e848c0a4c86c13bff22d08c142a9c8407bab0a9b796688db8525cd8d2ace441aebea7ab8fc7dcde179e703e2685211dc33e8eaffa10b358f97f44adfdbedf52377b5fdf1b897bfe8d6b21eadd37243a3bd5f3676f150b2b1c54357ae0680dfbec121a201046826f3a97376029252cf2fcca4c269bb635ec22cd74b74a6660425c62476666957462589d8a4522ca86ccc04872f5df2640ecba5e313bdcf294a01997ff635ad5c76e9dbb81e093839fcb48dc19a925af62ffa9deb52ba5248ba0aa6e568fcf6a2b2dd0f9dfa580fdcecdb8e01621c9ae705e15dd7ef1cb37a83aa75078cb8356a722f396d8adce09c611adbe2eda58202cda913719dd0ed6a2f66b4f3df4c30a2236ae85f9b0a0ab7ef8c625da092cae002cb6bea56a78ea54775d3049e0976e344a0053b981f3424c2ebc682981071529692da139c4b17ab49234cb893344e90d3c03317e583a7eb3ffa7e6c4b2374e5a598b24aa0640884b6b7ae194301ce3513a3eda67a9e5bdad2b19e1940c0087e61d72f05000b4f4c19966a8207fbf0486e9180e72ce0f751c80f849caef2d9aa3f91b87deed2518240c071a337bd88141c2876523e90c71139c3c0280b46a8e4d088be00ee83632a1d18030b4a3b400236b0f8ed418fe443e7626e64b2f473024863fde918644f7657f2161cbeb7ecc57588cca3f79c894cd7ef0affaeaa3640e23a60a296d73fac3d3745c7974b64206b85ac96385eeccaebc3b56e9912fbbd25fbd2b79fbb8f0b2c0ad4b54bb8390ae028af05a465e8a6be8eadc9e717310b4264a7e5ecae3bcdc4b4e06368bc4a4573ba1f6d228682732cb1a15dc577d8845553e51dbd00237b59d8a8e123b496270cc8a41eb071075d5091b7d3554976978fcfbcebf25187a266aaf83a9900fa10874ef0fb38bde9a5402321b344c2e5d78ce36b26a8dee9ac8275b4913333c4416ca53c38974c1af9f09212493d24058c986df458d9fac2bc34a0fffb1a5af30dad9a41438b303b51fd8d0772d948128bcd823f58a3931e2511a912de1ae1f26d9a3cecada31ca619cf2ae95e0a83fbb52271964c2f91e94f2091bad4435cb04c399160245714d97b8fab17fd83c37029764106f8da6a368a31aea5cbb151c09900d04381f524210ea4f0139eeec625156d52894c6cfe984f4038e1720e4bc7a93388a948b4357312580e3eddf013adf47e0c597c24fafd5356e547de4a4e0b6a06529a025e7ea589e5d9260b865baa42bc9024777326e11a676ba7e8d82db4c1a2e613d2debf44deb18ac2a29a94997ee54e89a6e78e37f193640fc43770c4d306ea9ae6668f6738445799c2be99b7eb397071a06bb19c53b4a011b2b6163b0631c2a1cedea5f08b1ea6989fc37bf7ffb971a26ea45a31ae66c619aad32e6c48ea72cf99282d9ac524b3f8026ea1b0b33a534c65f4090a4381e8af3f9c08dd4da787e3a4f327a2c202baf1aae5545af2b89b2576fbf4adbb0b017bb327daf84447808df8d261c1827f4836a180f181565e7c1150fa274bc3c8baba2b3d2d4d4796f52da165504f05edf7d540c5a1da97eb388129e005a118f16884955db25900cf97b250a71a922e06d0a779303b0769bc09d86bdd7e46b93b9361e5b8f2a2d3a39c8f4f2e470740793e63ddc106ed456bade90e3f7811c5162ed7526765a36032b437638066f31c589b8df8ca7a19a1d6220677e31781ef46ad16ff94b397c0349d5875abfe802a7a1304f66392d86877d833a31f39f1848580cdb1f6b55ea9d1249ae12207fef4f97dc39a93c01e94ef4b924cce20b015118dff24fc8a1977f28a6aa5f6b35758cef94a83a552219df1314d0510b42da04fd41d6989ec090ae934fa4b49ef873f2e7df68a995d83efff4dc46ea18181227ba5b73a5083716adc40682f9a3beeaf19f9ca99d8cd057bf2ac1069e7f2bf5779978659aeb60c1baa612b3c8c2d47fff4f2aeb0734d0f4937c351d06ea8cc9e5b51a73e990c72c6eef93407bcb978b5d339fffac12202b499cbdea37625e201a19d2c484c599b82fb3f8d3e79d96601e2c84150c67e411ab103af76fe976e66e0bf5d309c92ea4b96c9ee72d03daf56a4f14be0ed6417a76ee5eab982d5f9889e134ac1118aaec67abc1a3911ead58c3740972a975404891d6f43dfb9928b8066ef4531a0ddb82710cc1e472f679347cf31e3c5b9f3b915faf91034ae98fd1e224f024ac470ee754aa919a66af2007e5df4e4e2ba65efeaeb91b9cd0876bdecca00adc6ee02ccc2aedf285e72354481d29d22a9bdd835fea47c2f08cd32f7fbee647e67599d3fa1be84610357253eeaf461af20549cc9c3ad80dde5c965f7390cc20fe840b2035e093657d6e5219ed5545b06929a5a9335e49e8da0e1029a51c2ba12dd077d71573291d98d4128b6035f18fec635bbc5d513fa0dd03a5753f726086efd666eca3f6428c991f6f963bbd0e560f687f2715f2e412bfcd2b7bc743b6a35831c6565cde0070dbc581e73910ad5b7050349f828f4c8d94a3c94d092cc0d7978fa750d8ef97f527c045e233ae54aa1b54698a5bec647b74c60768fc5118b7dad13bbe21521dbf578700329aca529951cbc7fe5528c336bc100c2b1df04b70feaef525aed7344386716601ce23cc06f4f355069ee3407ddb3ee63e47a362e72da4124f1a184f066e889b52f7ca18c48377488b4e2e1e610328b27d3727f41d1b7902a23cc3c2627726ff9b6626c002a070f5e5eb967d6d7fb580fd5f5989f5f5a815930d66fa793931738b693ab2d59bef0b50983f6e4059d3665cc8f6cd429ae092f20d7ae88427f52672cbb7aad5a7b5ec0df9ef9a821a0f12368856926cbfe18724cd842d58e43b2922d82c8c141a63618b20305709ef626666bccc08e9e2c7e8cfa14e608bd16faa838d1f4fad0f5c81013cbffdc0cf043993f8b56b24eb37e79cccf94d96fdfa1009c82bd7f9b25045a2641d584e68db20a2635ac2abd5e87cb68f176cc02da704c381e583e087eefd1ae08ff416ef95a5d2378d60d53e08d16fd37239376d594ed671ebefd271aceb5d853520440a29cb027bdbc91b6fcbccaa4ea5de6487786602b0b616a8e104c9d062f8df0f313a7a848c40abb094a988e0df53028fbd28a20cf582ff7abef8bd5c3f864f5385f6dd547d53b5a16a44ccef63cbd8e8e3a1c1eaa5ff499cf6a0773fb2d276b365f9976fdb00462ac0916287218805b6124c683d5b73a9cf6d98883c61963ff47aae77193ed07b8d46cee46e6136e2ce87d620cdd6b7267188a61a75cec6334b413cd7b19f100a6a2572bac15b1eae8226b38abffe8bce65c3ee7bd23e2f25401fc5b571508e56ff7b76399f23af54632421d45fae64a9ca10f9e27dc3de53f24a71f177fe43959e6f5e419b47cf397fc424c7f5991a892190a0f186390b7bf55cad3eb7d3f81c8c39637c6a0093711c02da1c10b56b1c4d5e91892780b79222e842a64462853d197aada59080a3ab33cc2392662d3a50deff94292cc08d0d35a2e8b5eb9754f15dc176481578ff20d3d40a6e344016f5cfd5834e5a0844468d26c9175be804acf352ca9ca0b002c67824d8c5818447117a6119d8d3c62a0578ba366a183d2264e477dd28103425ae3024ce7be32901c3608d2eb9e8a218a6ed2ab35bd24aa3a9c8f3ccd5087e4381f747239cb6c7d882db1aca6be22e883dec1bb3b4366f365dfb425d60a3fd3caad5fddcd7701972422dd3d324f590f0005a8cdd447c813f40b02e4153295842fd3c04571e373742421ee206c804868b1999b41e409a0738088d03dcba3e517a4d79637cc8f7f224f4082b0068a1e117c45b61c00b1b7d88dc455373fd23c4de9cb07e455844ea073ee203df287b459396f32c2c72b4d76c880819b9a5be465ad8cf6dbd82b157c4159d4d7d880a0bb8452018cd1d4ce4bc0a3a763595cc30735668f62ab58551bd87ec94da6133c7b44738b57f57a45a5830511feaf32bd8d92b57873a8fbaab4183efcfc156197e4f38fecafe10f13dfc9f9f5aabc964ad7fb94b78a6cc1f22f78fe170e1bbff5510ad94680facbac3739ca3c9729728a0cf6cbeb32cc63be3333e67c39239d5d0c5a7d4b71e0584c47bdc20ee6b53b6798517012f8de71ea17cc5f813c8a6da7b1068556ad00b5701e324e69f35c0116890432e1d2e04f84250648dbe1e3cdf1772bd280abf54340598c3060cdd2bb811362ee06cd5d97aa23a82fdc8363c0c4cfa0e87a7318ea428e3e4260760ab0e6bde4ec18073e3fbb8c0379eac43504c07dd2aecf7b26beadd4c28178e970e4c8fc01393ef4d4a043c7456870f5386c208cf3c3532c303468fc898c188517dd9617c814a87dfa174f1e9b813137a6dd214ed6258331871a48027f7b90a64ae161e95852086e1e97a13bfda1a0f0c292760d093dc924a12801de793a9a1f5113caaa76ca7e91b2e09887db768f21a2a9c56c505c72e9e2386f3828cb39f29f82ffaab8268ba77559d02321ef4907a25a53416cf652110199f67106a0b0f2332b1a55c71c0e3d3495e2084557d1b10d668bf3a610f1ecfa975d280acbab13a6dd116de5ac20de20b0d685935c69ad84f84044dd3e2107a7efef8b4251e44c52e68ea36b1e962c717e5c537713724f8ac9b66864f253981553e1118c723dec3ad85b2348fcb6a9fba38044341f718712e47a38741f835f4981e5704f08838f429202b9417bea503a4fa2264de602b52446ffa30ad898cf1c67090f4f77499a3001e9a44c794f6e937539895a22909d3ace22515c49e2192d4a84b386b0946000607270e1de7489d56ad9160c966405ca8f7017b1dc2b104747dbc41851aaf1eec0f097775f648c19d0a29b7e751edf71306ecb2c38425bc3e7470c7ca885bacdf4613081d1233811ac2465f3828c65abedbbd774109521753be66bbf946995f89cee5f88ee7613f2029368ca2dfc6182ca5f9d778e2c8bc195a617087c75546edcad9c0f1c720be0691fb16c79a813e36b88ffdaed508a06aa578bc6ab9bf390902c776bb13c0396e8c121770d5174283357184e3e30907c2aa488f061ac4769faa08ec4b65e2178e0aebc20d82bcfc12971ecddfadf19a30887abce9069b9e609f1ed8e811583ab8c58c2a0fc1f30a512dc0ccea43293011aa67b199819a5d0d743879e053d0355f2960feeb1e62426de2f3af9d00110c623c6fdf6b127ac35e8140856593ee614f0f57e32186d65635aa30b660cab939caaa527898b421e315a22bba618fa829cdfc09fab161602bb1c49ee4defa8a67bc05003d0c1399a44817119a475fe41fa39d85cb75a68b1a03d916878f8d6925765bd07838fc3101496aa6d866a7000c2c3fb15e4a2068070619eea4a4e74dc6c02bdb59acad4fbe7a6068b56fed9afe14e93ab9b347ac3ad26818d1a77243386dd994714be7d14fa5884aa64c6da1ba7e3063ae7d6a262d7742009523eb090b5bb00e35c55b902e27a29d0a959edec68ccd3d30544136ed96e1f2d3ea83cb9c3b85678d2019753d08a41052a0232307ed524c35c2c87aa86004068dc613550d272d91c21b5da809205c0a6f60066c213052fb9a5248e0e00fed223ab7c8d3a21686b714d0f081648faf9b021836b39223a37c841bd9f1cd61b1f2b565fce439c6fd0a1b9133738c79c57ecb44bfb4c5f60d53fd823d261cae3316e5eb973eaceaabdf23dcef0d7b8fdb34fff4db3dc83b480cf21e7eedb103d6d3a7d3db7f74e719a6f3e468bf81845ae3aca3748b7479fd6bb32d662b65ceb0949fe14f926fd1e8100851bace03d47a2f1cbfa24a981d49b354678dfc7efe3c1bacf7da7bd6ad1e92f81e07c52d95e4f967df11444d66a544c7d25ea6fc000a647830b76e44708c0583cc3f06189edd507ea487879720152acfa6d6dd916a90857c0437da7551c7b95b2f2b5ecd92c73f24320a1c31bcea1b202bc20afd38d9f1c4f56c39fd287dc8e1dc3601c918826e84a1e0df399affed31e54d3ea0d83b599dda2fe2fbf962d5a08d02f1fda0b410db229f47960fa249b27ed749cba8fb91a8b285ecfde1f2a14e6cac2c65ec79d38b8b0e2d4875648973c6a867282d1e00bb8f81bd09eec6ae3752d1e050d35357e985c467655fff45661b8f5e4704fc7599cc949081532d7f439566dc8fc38f7114a8690f81a648d67071ab8ec3e7011b9cfaa7d3e79b588b94ba34f8513e0e1a983ebf0899223e7151a966b1e91857a6d7954faa39b6ef1a03929947265c1398869579242cc27b9594286769250405be431b293b395fc09219a37e92470b668c311839a5248e0ebc90aec46473c3700fe11c77bab18e63934982c5c0a6bf9b2a8b31da7c9889b17448029fefa6aef1a2409850b02c8ae0701a2359508fd16ac5af391ea605f1fb17c2097ff2a105eb8833ce0603ef7107f3258341f836719757a2caa562bb77ca2dce512ca64e144f36b7287f2e44c3faa1663991956725020ef543b198883668ce156a64bb21de526dbe2c60fc74bfffd6d4aca64841c7b1a58f4b17178cd0f8802019f6fbb201f341bf92c21f8988263c94d9d786f8d8102abcdb264b7f9ee03c3132aceeb411a6dec696243df5412c1b267bc0dafcac50330024146ae3c3d34f334dca8403db36f42ef6bd2c62a25c975ae4345442f9b232268fe95894474f46fc2fde240b594b8ffa227df69ddb7a14891b7042b0deb24584f8b043364e108731e84eaad546d014ac441bbb8e2cdd3c57363e3ce6ffd08bffcdb914f06cb79ef54898c2452b70cfb83d74d70d7b9ad37be0a917214558ad902a69ee50b583fd7b3009c147b87350d596239d44b659f152d71882fb82f408d6ec26959a002e1f228a2c3601cfedd85e9d4bac2792148fa801ea422bb4b1e674741b7b315fae843853bc58c3753b8fe83501d52f3a6d2cc0a2833a1c250fb25a1e711d154fbfa74c8a9cab155b6fd0ab56b26b9aabbf05b9788b4de30978310c2e1dc7ef0aac6ee96083e38bd2e201b788210238c984e11bfcab9a028932e428debd52699b8223925f323a88f6a16fbb806716fe172a347b1618a0b0fd04c844095f584f8fdb14fd902f9f49512ba77d5100ea3242e82bfdb95f0094c2fdcfea435f31f74615ed7e98a37eeaed1cc2b017581df15382d64ca5d6526731060251428f2bc053f67a9efc4b1a404dfcd2d82df7f1d9eb2a278181af95f80e370c716340d13b45214d6667dda74ee01d0814080d767aed29b28812ed5f4a90d435ce04bea5a7bc6b7f19f3f6cead505a942ac783facc33baa91b18e41ce24df5be60b2d6a74de391787dd17135964b268f2e7d6d4a43d39bb0db63ab294b0293d8d495d484483220150d8c8324d9d7485f83b8d537bc304f52557ae5214c9be6862eddf20c5ced260950639b5a1e29e9e3484db734d20b8cc4f54502118c29bf4783bb611089f5493acab2c32c64a1604a72df8e6caa1ef69762ffce7b9e157cdb86406f3e391a771c3d81d3cde5d657058a6930650055e24625083fefe884cc59c808f9ccc899bba66321eeee21343dbcfd286e466ecb3548ef0eebe60510b2baad0206bb347a4e9c1d5b2793017be029b02d0d20a5afd8833245ff49fcb7b50fd97e8ff376c2613721e10775b0844f58ae7225bb0219d489fc1c786343d70ebb066e798a7aa7b17078979362ca85fb1e5022ae6554e66d2c93275be066a92946453ac682158bf9d219c75ce05107b1c680f4a1fdc8418d0a740392ad79a1659595a96daf614bd79aa1ff1127312000eedb2dd80e976882ba3755c52c80e097e47ff0fb021796e42305761a5cadedf09141691741b2a7b351a0e86426565be01593202f984420a5efb844fe040dd642c7519b27c3ca945af963b9d182029535366dcf7086ad207e9294fd8f8dbaa0c8fd0a9c90298fa831425b9bb6b07c1d8cd78a7926db0a3cd1ac8afb32df2e38beb823393ab4c8c78890e125cc61a62a1ed6e07532ae1d795e8eb039e900b6b203b4288cd0e1795104510cbfa61f75d1a1d92583470e82070027da2942309f21422bc36dd502c088b2042c96e3baad665a36370abdbda775d57de957e9b2e264e2be465fb4553cd67ebd280088da852ecbf4dde02106b8ecfb22a9a159dcee4b9b63916ab3942aaa9a50fa8867f27bd044941197294a1a689024d4632dfa396a7fdd17de7e0845f77677ce0927d12e1eeab65644cf4d7bd41559256023856e724590b17c98c1c78aab5dd920e3a69ff4728e75c9f3fee8c9aa0984890f898125020312f2cebe412c7cfef2c570f0542a01bcece2b05d2e84bc52f87d7bebf4270b97870ce3c1bb6847ef2d72f0decb39be8a16bc8e351a3f59a8bfd69c95576522fd56fbd015559e853e630a74565bd88f601bf01bf5721ddc62047c90fc3698f4aa9e26a1fdd657a94f806cd305b839a3605d17ffd1b835f5f21883cb55575548a04608fbbd624c1c29d511a1058af3fa26ea76bf257b5da525987122c0f048afcdeb41746a8cffe70e716121c80a99a204d99e6cc39a7a823df49b2a43b0f80cc487a1d722b7317cd3ccac2d36fce4ab1de90c0e42021c8fc3f8350d260e59f7164f3d3e331a240ce45ca8950dc5c08152cc205322c8b0eff2329e1c7881eb327d51ecfef7d808a093d000f5dee4a9c61fbf79eb46997cde1ecc911debc3bc366cce1c4fb6ef97b9537f18f60b0c21144625c031d801e6ebf76a7d23d09a8801206fdc1ed606cea98dd4591f27d98feba56350f5ffd70589e5a2114376087a7fce9915c7d03be48e76b873d0df8deb60f9bbcb7d29b5dd9c75ce9c45d163fd5ce3ead8f4048c924d43a215ef360445bff44d732e5a8e9d79d24280e556e6af2f9404fab0930d34868626ade8215d8a9a417b084f3a377596372bd628c11c3b5b33f82d6539769c7cfc3d8624a8d47a07bc34359c47c441d3e8ab172c7489c170b31d4271ad216ac8fbbda5cd9a4bb76e5afe0fe8c18d6926ea8670416409b1fa9035ee975d2ad2e810319369bf63f048f6af66c995e992b1cbdc489e17d28b78240313222b06f74a1f3ab2e0fc162253f65fdeeea269adf6c5ca7a0eb3c06eebc20a2ed9f3b06d291d43381602305fa4a67f1c1fcbbc95069d7a082a0d95a505a26ef29a430521926fe68045eef63b58f069c522c9112726a275d79659de0c57e2fe7d90fa0cf8328100002207c54ff66659ea24f45ff1b74401b1d1d4947009521df6ed8a628165a3ee8684c4da79148be91d162f092cc55065548e97887376e031703f5e2b72bc25cd4f64e6bda68344940f95c40febb4809a2897a355a2f550466dde58395185587957e093310e2c094ef82668f5db1d1f02029321ce843f65c26e6d9f0c27993b236ce6a0605dd740d87813363eda42481d1c8445192354c3aba8948e73b245e8ce8588d229112fecf42637321e6150952cbb078afae7cd7f61763616b5c09f4f75327518b2e6bb22d7c2479e729ddbd640b42cd0bf5742385535276e0ac83f8f7c8596710ab46c2a09557ec3ab0279df2bf172765b6290859fb7ae2fc35261a61bedcbd82fc6af04a4fe9e2b5ddf2e41b1451fe36cf9594c59ff242a310156cc9ce2984a0e27c851ab490a50884e6c33a1c530f7155fc14d719db9293d1c0f30a324e81f454e055818f9b672770fbe4d1554a799cf44e0fc1b6a700aed34ca280f3c54e197a3f8d53eee8449ca92455161785dcec57d793ec5ad147e5e5eb5e1d18c468372105c84cfbc526613319df60b3bd7c7e45ca6e6b29a84c4016d47f6245419e80c50bae3e346e65b3b8e8608f1170c27c853df553e3a8b2240062a71813dd9659847a117ff59bddc7c78ca6e56f4c2d1a183e65aabcf81b2793bde0d7b82ec3155c44b287a99d4f87cc78bae0703c118f9afb0f052d82a2165c85f08bf1b0465821a62857d4dee46dd6dee71001460575d99d633655ec8e293a950f0eeb0fc395b3352262347c9581e6c3f869b5eeb79e20ac89b1a4c9fc7f6c4e3f5f5f8f0fca285c8bd285976315a4caae19aa136f133b0d3803b0f8cf3404e06e43470ce03731e909381380ddc79c09c07e26420387b4934e3644612071ce4905d13e9325d07d60ec18a143b70d5615711bb55d8ab841905cc50c18c02c628304301332a30a3c0180acc28c08c0a6628304601330a98a182198587e143984ef292c888abf2307455293a54e6dfabd4b4fdeec4f441d75f5ea34e2d070ed96852f5434dac2572e257127193f1d66b776b94a015abe9aabb8e9838568357488d2cd05c941c385424dcbb60da1a3c4dbcc0598ae67ddfee8aea58d2aed22f8e17ba514ea1183110e11cd91e2afce2e2cd9b4b54bba04b99e5d4f36e76d7e5a2bdfcdd5d4ee15358b4abe3445ec934bc12e312c323a45ea93907e354b32a7bab4932ee0113312f65d9d079675dd07ef23eb84c8d588f86d661a95880a7ff4d081cf24e697a6fc88ed06b02e71e98ece4fa22e027c6c01013d503dfed4c8c8735fc42157cc2b47e61375c7d5d05d85ee63bb6fef9bf82bb850b9db19df62b2a9113c116d8fa235aed7c8b1a8d7b16fb90b8e074ae5b6b162203271f73630a0c6d7420a7c8cdecd817ea1450a3bc460856b417099e9230e07068126c14983ee427802fb304c8d883e3a13eb88e5e647c334ea78a69a3ed172e392f357800ffe92247eaea42e9ebe86b8ad4a5d3e767bb9013a333c27f565c21a47eb0efcadd845adbdff651b2a0ae5a4bdba290ee9b31ec97f3adab6b8bab348f5807392fc35b64bdcab05d4bc874bae34ce463df4cda01e29fc4b9b164502d1fc8d62a87dee81bcde31309ee746cfef12e6054c2cbc60ffcc70ee01bb3790121a1252f2dedeb81cd5b268fbd3726044199a250346e17aa71ef381100e4d4e45277a92b8d9aefc5539769533b3855b97c7a9a4103db7446974b577580ed334a12720df709c35bc14c6391d3859750024adc7cf6757788d5b00305c425b5090df5cc0e4969a183613d0089877e1ac6a6a04ca07f58d907a2186bc8886b36bdbf08569c06219a92fdfe7500e3f0fe9d0e154e5bc955a19099852cc4683b93615cfea04e3baf4cf9025a99df764e29f61f30b7705e4ad56b38e57b94eac23f1492a262f0d95aecc1dc3dfba143b6a96c8d66ee3cee6930f142f33fa0fb70d4c3b86e29da37b9e646a420496aaae754711e80c13deec9e8e844b41aa42f548459be633dd9d1aba5d3850c3ade96f40c24edd3c3fa291d632c616a7f5dd2980b32a2d8ff48c2dac8c4d488e74bc09de08c97cbd960265e6b109702f97b68bbbe5e8fbcd36ae456dc99643a483afb1f465bb89ae47f689fd8e77ed0af55a40be31ba94b69bd2dc6ec7c51d1cfc7ef3b118030e77854e102a7593230f760a145763b55560988de072d79b6247641d1377ba7f393c48a037b7a2732cbba2d6998366fd535ca60b71299c3f6eaac60a8d42bac2aa3043796cdfc0df42e6fb01d9171bf1f7cbc6a310c9eba7060b48ac44e8353e215110f9b8a27efea4458da3dbe5bcc655e895489f172b5f38c9daea5bed507175dc90785b0ef0c5c5d58464cd3e20302c3d95da6b8c9755ef61c8842218ab2b297554f2fc8934d16894d971db0739c684ffc2a8e31435d86531924f1a096749ee5db73eba9e09602831904915664a5ed917b34f82bc74d0e68acf50029b68a182eb96a4973babe970d96d415368f7c48ae11a5e97aae1a4b25193f87257dd72c285ea1cc04d56cf82f5fa95fb62802e12b763a40347a0cae953b0f6988a6a04b69347031e28bd7422513f3a710c14d96ec83771682cad98bc09113aeb7fcbcc229918febd4ae75a92e78a3a6c27e9f68bf0f5e9772fd35ec21ba0906e31f17971deb5a5e9bc3ad4c890f2b6c0d542853c6a36a227dc8047680fc16e5d95f57473d1443cecfc58fb43067d557c86d5d7b66b3e117918b07d22ab73ea0e5bfe35f222f630277ac644f0480302004a5942cc8ab9af9b5370b50dc81aa8687d2f56788d495214de29ea5d49baf1aa9edb7a4de734f9f88500ed95c2cf6433993057ca10d1dd58dd6ae1001a981cde9df5559f7b5a79b0055c4627e78dc9dbc74d5155bca034d1590ef1b96670e73e6cc5ccb3f344328849f47d16cd661adb2e0adc6e505efd29f85fb8d0b04b4d2bba16d6e52d8db79de4e5473e62cce8fcd342f57ece7cb24eaa396ccaf175a769f49ac3fad732d50024ab6830586da6c0a2a3ffe673cdf220536879570dbeb82fb7db947bdd08869dd3b180917915efa961abcf866be680398bdc04b5611e049bba8f517c8dae0fa97a8bd6cc31afdf374962efd8b6454a23b68b9adb552dcac9b8139cf0584d6d6ed4b71b74db0ed04bcc27d0700eeb723f9cdff3a5dc5591baec98ddee9d3e985ebff748194eae4875d4afaa168bc4b173f378b603e0acfd87dba0e4872db42528a15bdf1fa7c5190bb45d4e41bee3386d4ee69d7f6765444ebadff134e8054c2b0ec8be0a2cbe99b99ca41c1dec69f18f327d495ba39a6ca2c7480efdaf6e868cdfbe89429ab18becec52f60c2c772aaad93ca6b1ebd81f9fb9130e9a60f4beff8189ec111a81ef69deed9b7f8841ef5f375975e6dc382c5d6b8b4f3c90777bfe3ee4ca2225c719124bcf673da538b12752ab0472e4c982ff8c211ffd9f47fbaeef0cd8666f388fbe33465b98728acd38b2a06e762864c2d8d233cc6cd429b22b29ebb0ad0ae5752dc1db5eaad0f12531d3d9bd3e7ad1b7957e78d5de424d44c3dafce1029a0f7f4d72b19bceb0e8d994f7838f46bcfb98983ee2b33d4828f0703152088e3243072c5fd0a6fd56cb51d3c8c6a08c16d75eb83f1e5e98570fc684df3695a34b0cc4fcb24ccd637c0847f18561a29f2e0ed4625ab5126ce4a907357b6af83efa4735255d87337869ec93e5b6093a33e8abeefe6ed4cca36278ac9b4ca58fc17f95ac79aa5414fb1fd9a78c9a938d8dcd574328f0556c43e067fef744e0dd9f8d45040db108c61431d57eaba05ecfb820a234a8a7b147a78e520b0d6ac4338f5693b66218ec3e6301fc8a8c518a2c7def1e924659a7e36da7db3c0ce5ceac9075ee8f07a846f2f49c88e95d80c12f856ba34f89867be76e5775babc82e9fe8dcbb3394cac6aa4835ed3190b267036e7edbb8930cd8a931a2c73c65e4916bbc89bc2809c8b81efb81955869a116df7b3987d8d07c7f229c2fb443c50965e063e909419b9b1ecf4534aef190632b61ad9f4a6dacd0c93a2bf3043bee8b320ee1b7fd4815708abc8390739c301978c636af6f9869c1a79dd812a846507a822988911b933d318c5e4deed178f9a8e93f425e3b0418e58f09b28ad4a969fa7f042f5e4c8ebf1cc00258eef8bd297401fac6f1d3280425e00fc4fb8a685940f689950ca743c0b366ed019c22ded504d87cd33b219b16298db45ea7e8dcb05c1c449f25595e36266d8b141627015d455e083540aa046ab10003b01e31550db4d16473aaffddc1925d807a8f309487f984b5abf3fdb6efa9e0afb306c7c06ae9ee60dbc3e32665b6ddbc4ed16e25ebb42919b543a0114d83581f464b098aac0b7092ab1c8127052534fabc9a0db83ec6c631bcbdb3441e8af5663ac0f5f1da01dc762d7ee89994f74aa22bf489f6f16d91c3a0f8d55d27bd109a534376f96030ae709c09c619519b0f014554933dbc8e87abd4dba0e3b5b08f1f8c0d9194f8904ff0ff8386451f76e5e8ca8d703ce7aa607df96906b56e82ff1683af6c53a72eded05c6547a366e46fbbe618f71c8a081b1e639df922228b3674b8c422f4ef53339d22945bbf0a47854cc26fd3a72fc408e356f9476a341b7beb50400c8715c22308302f55111d0bdc30ae3b39ca3ba67bc0d539560521bcb06c185b60a7735f413cc494468ed3642511998d6af10d460e58f7945febfe89501e39026dcf1b6101326e08564272c36eaac2b372a63fbd561d4c1d6df5edd475d8d67b4b97f888bdae11f2ddf5112082a4a4d76ccec3bb2488cb11e0826993015af0d5c39c759c5e42375b1f22424182ee6bbb1480294142f78e7d127322d08c5197c8b2302ba849d3b02ed49559ced4c45a492c5e0f6a1e3e9d5f4d771861d3566212e87075c1747873462747d73fc48c73afae4f03fe83aed879e1198d8878fa42a52c88a40461801dcdfa899b18ec880ce6e938a2443b4b5888b957084d766d39fa6c65ee23a9114dc9b99eddc5bd5d81abea917dd9e92be055ffee17b45aca57d49fb6f4b1f281c7dd2ce95de878c5e674e724fc3abbef1d642d4d501b9acc7b42307fab49d0502c4c398031902eb73133515044d2f3e53fe1b812d00c27500f1c01223199e3eb45c0e64b9833570821dda38f6e6ec769893f561ef57c813902828fabd6a8f362bf2f9cab062ca5bbde0f975fea1377950c5a5a35f5162b7636b212303de931e32c6f4381c2e3b82d0dae958cd5c8a5fdfa076bf277d6b2c34621572c47f5488127c03a932c17b457db7f5fde36f939ddde60e9f06584a62ddc4791a0735058c184efcc366bfaa0f11e7dd10586bfa35523c9f3b969008d1de76b7b4d6a5c38498327e41940fc769cb93c2a7e358b127e1b86458d06be62dbcd3feb17e26ad8fc9c87d11a29a9d29a7bebe7fccd0f505b516c01b643cc20656b3403b59ed01944e733d62937b7fd65afd7b0d23f605477419665c779d349bbfad8321d70eee28b35feea85e885372475e33001aadc2f5b0a71c6f64975466eef08ba77baf2789e7b1cc2b3ac48ea06faf6bf41cc496e477344a94a2f21670ff32068dfae1635ac2581df30c173561d3e7f3fcc6e9d744eb54b9e755eea0af86e4e728598a2359597a5c5ec8b98913bb3fdd48510cd291e85a336398a3560e15b94a6a00490c2d1dbcc029458f1985a4ad8e81aeb8e853d6ac8e0162995ac798f75ff0d8e947564b4f9d9c448bdb758ed5ad5925c1e9105e0eee243a26e6acbeffe992bc27674f4240606bc141e6c72cf06d7015b4998732cdcad1d142786231b8b1a6d10be8113b0d3064a564acc03d151963dd6beeaa3ef891b2cb23de9be92e52f02da0fd0bf4cd6fc077f85fbd9a9b28450c0a9d1666d4159280827f0b54203c78adafb9ec373ec7d5359d6f4c9b9584c7ddb3ce234a34e504aa71cc3a0948d12ef8e72142fb504ec8fe6031ada6aeebd5b950b9d3c7d7c2cef970a0d4516fed8e18a9ae275cf3d74b16331edef67989c6e1cb1f5d9653a32b09e00c1ae50409edfd7012189c9a383ac6eea38e3f6ce1eb947d8a180b8d156c22408fb8c4abb0cb6825b2c1b3ac5c848c1a44bbcb99599747ace1c7bde941542c6871a8d9d9ef75d1cbede590153027cdf3ccceb3970d1416e6bdefbe591070f7045a07ae51568c4bf4117f52da7edf8e550e3af2a979d2c7383c64a0034dbb50a88ed05055df38edcc801f3a7a5166f42905d9bd991553f627ff48227386aa6ce90af2b46143965b8e696852b95750fcd5ca7200b2a2d1166028f5accc00d9230ee95a0d54ee79de5eb70ee926dcc813fea756f1677dbd0e4c4e43b32b4e8bba1ce3deff7099b38cf81e3414714f467b69c621b56fcfe9831bcdc50ef6dc844d787e94d0589b8df027020cf9ecd5d18207728a4fb1789a5fe73128e0e254e825db0fc8a64bd726213102b709dd73da75d6680f3a656b5e4c243b18bee962e2d96d44af7fc8e024fabfef7c56e8b26e5b3b02df83f1c97bd2b4d7a030619b7228184525b0aa1738e65018e4ee17ef4ec3833c67cb63ab11399f2d6772383b0553a418434fd6c4e3c5b335be579ccd9b62eb1502f0fbb8590799c0afa7252f8a8571462f5e266940ba0ccc25fa26f9ab524687834bb483990c719c7cf8aa7ea1a6e8a3a351bb4b111dc5910d8c932ee41d20fd7fa6394adf1cb2999d1316676e905f15dc5614209fdf24c0bc95b243a5a143ad8143a82888ae4881bee6a74fdb128ef0a4ce66ac067ea087af464b1bf16d6aa7811d6006a3d9a22872deb8e7fad8ae090214f9686c1c39bf813cf0f9cbfeb96006345139b051738c789de19b79841d0e9c0c4101e2c6173070e6cec9e120764f73127b99d80821c63930a44d54d655dc005133f7be91ee16f5f03ce177be22f2d9dbeee98ddc179a19c7011e6774778ead1ed08b41ac7d56930e027d6e98c9937bd574ea1d703f8d1de4c32e0e453b2a29a92085000ef1b2861cd33d7044d910a9a80b6fe45d4474cc40c2a5a8f0218e81f0574d061624a551bf064f3e4c43e292098fac642e2ea4d5509fc40283a328fa0510809bf7ec46321878f699f1517544e6468eafa52940c857a81273c269381a116f43de171f4fa41da815f4b677dd3f6f73fe5650a4adae99ee07b383e6527641d75e4b81c71791010ddac34a3ab03f1da5b996f80603bec764fe1c0c2304cd9a31348a983a1c692c84654bfe8a61dbb7fdac5b874dac4e974d129c2ffdd7818d992a24d2ad22d1a8a1b2904a14059a0ce612ecde8d6d5522f44ed7096d054ed24b179ce0128379cd3fd046840a7eafa84126ee1e8e4c661577f642a8012858bb616bf2517e307de40ea100061577b3e7fc597af5ace42022f103b484d857b1fc9852cceed40d1f33204ab9f3e5d851440e1472c574cbc9070fbc2f9c1a8488e7edb42ee4e80c03194540618a0730405b440073d3422ba02521c7008058e8ad68c19c67fc0b011a7a0ffc5542d77564ceedc9745362080a1cacc69c28e026a40c62de3999b3eeabaa84aca42914e053adac269cd494caa89d478cf6f1cf5f779972904a93d1b5f7588f17196615b7f5541452950e87140358244740871caf0817a40a681bf5768efcf32ed50f6927a781d7f59e946e6f51ae4c8bf32095ffc35fadaef7941b4266896383c78489f66fdc538d7129f3f2f510ad2df4869c75c8eebafe8c6958b443ef425a4f2ff0e9e21092db6381e6ae5173500690cf86a15aff5e281e31045dcd0e7d6eb3f522e5cbd419b419e8759d5253d8e8cd812e7fca73b222011c4fd22f2770a9094de75627fca086d23d4f545cb7c2db92cdd890ba4a3fbbdc1906c836ea66891e1efb2538316b0ce2d227635e3a69a448594ddf7b493de0386f9178584f16509b8d975043b7b5cd49fd6378680ae2385499967a894b024a9eb5839ac909a5a33a2fdd8a0f80de840fc1d8eb1c80d3614473de33e598b22d094d857525a704eeb3ea5de97255df3e77e5b527bf7e475d093bd5342fff6250a7a231634fcaf0bc2db4bd7c1cc8af7e00ffe4b69579a4cbaea655ab0f104cd29efa9197bed459aba7754f7f76d530a22639b23751839012d1a2e65ce12e5d19c969d498a5c296a3a3b1ab255f6e1e2ff2ff9575733b84ee312e9fcc5f1b0f4806300456a660497a3a76e3281e0f08cb606135ccdc182844bdb86f9b047256a3392b1d7fb8eee7975284bc3987c8d1b29ad717ae6389a84e4084582f88c56ab00c71b20e27e502f44445d50f8fbaade0f872e2b691090e3c1d2446e0e3a479d475e02ed20fd64be299edcb8e8ad8198166496b3720abc117f3d03fd1082a7943aed5a84408096293ad2152e42664655351a6e222b6c872f6c95407b9bf09bec66791d44945b40bf0dc3874662f029c1f3e26610b18734c2d7668aed43e7ad336ac9fa0704f1357884e0b589e4192b34a902b411561a9a68fb8d7f593630b5830e63f386e6f4729e3d632e4c0be8b8cde9e5f5dde5cec1d3693b84d62528cffe3147d9346999c05c52ca4c4d1694d9b30e6133647fc12fc9f1fab57c224f12788a835b5ba43546ba0b5c079f3c5a921e4c15a02718ae4fec49156ddda9ba8628acaf89fac0d8d18ac1e38762b74cca91647cc806dcdead05ce15c93399726a5ddfeae82f871d7f0be62e83fd6f4d50474110c10ad76fe90f3eadbd849bef8ad2db81c542a79a966dbff863b22bc6954209a09f978142aeddca842126e3410b215f5228bb8ccb59889dfd5d944d018393c58753d5e7c118eda726ac49305cad03d4987c89446c8592370984cd18399242d8c68c9720e5111ca6d5e8cc439d2e018400ab096a3765fcadb4c39880c704946721504b5a5a1761881a1e2831f24a22ec44c9291203ab08bac0718f8046755a76eef1c28e7d138954a17804059620654f71491c448cc049a3c3cfe465911346f148e22dadb19a708cdc51a11a83371e990c917fd3b3215ae3b70f538e099521a6e20f714bafac5c8688264ffb87b6403e34eff7dbee2feb97d7531288b40d1267048e8e626c2e9efd0ce195138c722ac0df65c713db20e418a0c8de6d1cd77ee2c63bf59ec43d6fc5be123562a8500cc1b819fe4782f9a8a83013bebdc3d6d3c5d73a1c9aafbe4055293d0dcd752cd83ec6407642677155232426ba62ce92d1a70f175ce43741fb7c41cadac10cd2aaacd35e94538b8d8b214cf36b49e13c3db7b88f909f90ca4ea4379eee186810672ac8eafc84e1418c0766e5d5fd84f139acf4cc50b1772c5a4f18ea70c173c32bd69b3c22e54a3fe34c8fa577ae1d6cb3b749ff14505898a1530e12e34008cc3ab647979fdeb4067e2efe3b1b96783a55bb79214c21429204c0434cb402c8a63e8413af739340b06fa397a26ceeaf6debdb6db1ca21b0cbc590ddd264b02131110b3f02a87cd58a9aac03067ecaf44849c2f0480573c2cdac88223a5249603daa86397131b0b21fcafa4a2462fca02a5376ceda2459cfaf353f91ddd8731fa9af629f0d0da80f8bdc6df0b0367da964b01ea87266828fc8188396035610c73b13adc9c46aae83c5f564059fabe2418925f092961c25a2ac3a830a86c0d91f8800249d3188a4bff4342d5d026531fd1747d588a19833ea4f5b4b1dd85f2e315986427889d3bac215ab1281f0c5e4a163b0452a19863fa26051dfa299d5959f711e567eefde7b4f8688db07000bca6ca9c654d44897879d2e6830ed5d16351a8b9788d5e34a86bbe4186aed4c8cd84bef7d1e312f38eeb3fa38c88d2eb34d4989b0e091329ae6075ae990b5dab5c1fb1dcc9c5efb47dd90091139b13cfb9825635d59f4e23005cdc1358b1a23a1d58d03d4bca24b101b4ccfe0866442188f02c52e754125e2e0e8f076ab6f5adccfca1ccc7c799094e8c9b47404d473f856a1b40ed9510d1c5b49d45423c17c5e968708b18a16d7a42433d55cb3d63a88afaee4936e52d5e9ea3fb500e3d1974ec498a3eb8d4f82a24b0c4f1d42a986ecaf3a8ef316f41492dddb41f759a36b0ee4149038f93582fbb5cc665804e1084ee36004c6e00c81810817ac388da1de6bbd10a92c17bc1ce02f54e9b58ce4e0761d22c00c87911810a13860056c62487062f71fab53343bee94d8c52578f83b026f1725b64000fd829203f90157da7802ba0e2749fccc852640495d219982be943a2f1aa4c8f04a5ad789c31c40a6311cbb6189a841d12fb717114697e3fa7ee2b02ed78975ca335782d3a04423a1637dc051682ccea6e3e9e80130d947f93f5b87d119ccfc1de04e2289da76518c5b051f9de432120c46ad69ff43993b299b99fedb978e7a725d48c014ffea8e68d31680ea25fdf0dfc028046c664f648a977842e6abae1255413769432eed998dae269cfadf2e9b99453d84ece9e2ead05acde141490f1ac825ff23adea8b220e22468017e667ed736e621d511956635ea92b50f42b566cb09a372d99bb105775ab6ec675b9ca14ef352c7afe389779657894f3dd2b11325bd011547070bdc9ffd064cc3c6aed56c02991a62e9ffaeaa30d8d99fd160e3a6c97e778d01c223f0503376517daf83d075471c05a08e460d12fc483a88e15aad42cdfeb341c27152de647d35740a6e9c227448bea54616608453699341a824e2903c43150ee7926e236e9d42c2a46c7a4618df03411c4b1b141ac08d190d5e270be739b47f18fb5a6c4864b6bc5d317c304ec2342213afb3d9a88fdbd1f0644bec135bcb71e778aaec984b5100ded3de41e3030ea8a29e053c037e97963a5d60ffa6838dd84c81efe8280b7bf8adf59cc571d9c14439448d12e37585251b24279b693c19e00c37a4d2d1d71533f5314bbc81c5ba59efea65388910e22d1829af7b304e0bcbbed5d91d8609f4970a3a9dd08945696a51bd3e4d7dbad944e5088b8894e5bb8e7898a857ae7873921a2e4f83b8b4d1563a6fb93c4e81ea216bcdc1a738ff011d919fe88a4b319701f89a08d2e451dd9c7068135a0e9440c69bd9e8c6bb1d9acffeb72972701f6a388216666265201822dfc2011436efff9c6e36d30ea53efde90324c2d4cdcdc6c18d05ba2e3bc1acd288d0d3109395c38069f4c530f5370363b6bfc5b48b144a75d1c7a015558f98b39265b93d619464b749efd57b80d672c6faede5c89bf7f597d6c9fbb9ec1e5f16a96e13bee8c971669c1cc01e3e9caf719c5413f7addb1c33ceeadd860885f9a9eef6ac510464f9ccd70332a621f8c459e930030437719781721a0b9bd2a0f956ff03c39fb54d437b1c4d6a8a466704fe6533909a212c9ce7b1e95f528b2607c96d2fe342ede13251b897bd0754c5b25fdadff438233e18696ee9b97fe86e555ee8fe77c1a5800822c658fb0641d3685085fb574617f18685d41980ae7fc79ecd0f41f5d9a1f2a536e880428db8bf0fe8cc9af25ca913dda4105deb1f28af3f69f09474f149e5687fe6ceb7a024ef4289dd33a990209016fa52fb19e1026868a968da57c7e36b12aea20016fe868b853a80987df12669eb709b2f566f948b5a65ece2c5812bce1dd37115bc0180263d7da43e6c7145c69756a843908abc7b324660abd9c2f6ea844e091e16f14365c6c5afb27900abc592b194eb5af7496e62fcc7ebd78e067d80ce84405cf5dfa11d990b0b13a087ea0e151b8b9cf948cff5b72de5d22f2e7580a530ed07abc4ce0636d650e926a2eddc140d590cd610a20ff735c80b3cee7b3214fa504167885e05b42e082cb3c243393f54b1e173d14e6834187ba60ccc82f3bb8887e466f7dfcd35aa357cfe408cf443d620ffa3b31697c582f7ac0deb7c2b65b1fb9ad1ff6dae73751f82f5a9a18893280ce5d8894e09e8f72553dee7dadb18fcbac8ebb17de4309fc98d9b905d2f49547b2be0624b014bde7f022601beece99927cf5a27ed6cb218a31f37732e759b050d82267fe71d604a8c5febf695e3f120da8ffa89305f3cb1281bfd140de90e10f0e085dd6aed0374374b45910f037a9df28b764e56dee98a0d6fb466d77ce81c910d1baa804039b53e431f724ab8355863f04e13aa5bed33d06ad5a23a835c34d2115073b7583208a4bf787c7a32b53c1a044a8a687e43c63311bdd24f9898847240353674eb91e4bb16b169dc0070f66506ccd18a8aceb955e6c6e5549ffd4c6fe2a3af19730aa6c27fa49155d87849aef8996d7956543ac92cbbefc7866492a7d79a33dbd1dc1756d17a39f858a641cea63b8c048462bffc186b28189e66cf1999dd1b462ead8a95290dd35de046858ab05f555713b4f12776a77ed9ab8bd95d8f934e97f48704d56c8e4c55f44171b0f3fe110907d981bea5bc1bc578754713bad40695e4a9189f2135c260f54fa48e6eae84a2c15fdeb63be9a3676f4a55c51d41c9bda86c1f9b530f8919e5462803223b579b557eabd1eeeb5fb12d9f30c51430bd57233c94f02f8d5439dbde28621ac884f1b26de8b803b72655c4ea0c0fc881d82f6e7ca868129c1598c71dba508c5e2879d42912fdac9e073b93ac7192e79949699547b407bde6db44bf387008861eb6dbb8b03fc542e29f022cc721e1fab0171834a6115b13c779c2aff914c77c97db3a742767859037ac09c0a0c8e0054c5bb016ead901f25eed81f1597a7ec01e21b23dd2d5434fa87459609452a609f735a4d9f224a134591b867297ad95a83b6d04b1989ad9d06de1dbd31c3882845680e1b504df73ee888bdf69a7a16dd9f79684848afd6a1d9714b565094ae9154a2a21a96499db32d6bfdb9f08b0ea2f5eca82591046c531830c2f126a30d4921aad8d81da726c7e4db1a3ebdcd12fdbce3c8499b0887ed8cc69cadbc8d80021239b2bb267cd45522ba31216e0b5777ae3839d2219a17e1d8c870e11994fc4fd843cf27acb80a9f2942259a460c251b5f1e15078caf3eaa77e8de61010acb8e5598d0b11e214c3effdc2f125a2b794fcd3078b72e6f8cccb678e60d3f69e09b48de7f9db4c4d56db8fdcfed996825ce7330c222aac568adfa54da1edd3609909b4871075995fb5e8d36f91a4709e3fd86b82f3f253e7afcdc5a6b25a5b0e72e17cc2e9390016584a9ff6b6f54c16a67b10247b021b0800dbbe956233a4e9d23767cfaeffcecdd48327a97d72d99bfa6bcb8757e10d4601e9f131debd15337e6361c65afa39b4812b67038563e7596675c9f27300218882127ae410547751ff6273e9feb0aa9a92c0e7adb6575471ec0300bd88de77a4390e6fb17ce8c7b90365c507456983796c4474a800d0e71781f70be0db0b14286aafecf22dbddd8430498fe34e3300ec3d0fd3a228754d21497c54ae089c0918cebbde4df25141a0b0023d0b22697562e74f1f372a2de19f2442a8feefaca7ee7053bcbf476d38d272b70abbf4d32f6cd6a896723854b3f186f348b906658585f82f4fc81ed5b4240d5a58e8b8434c360144ee48ea9037c24088909e4628948a50488e1d28e1fc43408c1aef8cf49454a2ae65b50227f33d5ce4ef7dfff6b3b698b74247e3209b433b37c1925f31e5f45fd09d44831ac686819ca921ed75433c53243161a27a120fa0c237a9324beb292f0e22a7cf6a582078f900c942fd754c6ca6e7084ec5b547097307cb8e15fca1c791fc3d435bc838cb16cdff74f9d8a95138108d65202d2514616f28ee0df3613bb2b34b3d42883bdf93043cf3685286f0ae577625c3e40a8c234b21ac6824ef6a64ac26e6154487766ba849bb00d2afbf05b0387fba00fe1046d572e4ba45e85fe1cbb8485697306d14fa07853b0f9126909ad4a16de915765486b97e2e1dd3d49d51568418c942f77d3386232742eb946a8021555396051fb2389fdfe088d9e4c43516dc70984a9e680eebeadce9d89b3a26c14dbdb347a19b2d0cc8d12b116090e66b4e67a73ba962d703a37749d505cc1aab30cba3c8235c737fade11c7965b8d996e95c9a7ec94914b4e8acea2de4f0d0b7ea17208f326b4606158b06ee8ac1c253adf41cb5f5e94fd92ec657440b99ca355afc7077ee4ce188b71272e63476e0a55a6a87c356d46e05345c6fbacb584bbdc8f84e777874707e8b15f7e0ecf31b01d9f6035b7f88488dae1f36313748f14ac460f3a95483f2cb5bb0a0406bd1052c90df73c843c967e1b0832660a81848ef3ef72e6349fcf490e1eae7ab886f57cf586bd63c80bc816ce38c37ea263640c0c6f25a336fc421e0557141fb4eeb4ad2f5dc370ab8452fec479d8c8287e5ea3580247711f4a428692b8127b787197f4de7417818aef22504a9cd02db0f8a560e9852558c4e587382546b757fb929918cce56a77fabbd199cee9484796463305fd57bf42292405e9a671abdc7b5d988c0e88e07c4e6b1588015471dc813f7b2cf7caa773551d63b8f18c243c0ebb1b732b1709bd14ab541eddb90aea89636aabed295617b4c4b78b08107cdeece765a884f36db85733a672f2c39eb1dde7efc5aba1edb8dbfb6a23d62b59a512dfded792f3d7b39ab0acde2206aeb27950d0fa7ef8b15a144a1c8eeeb93314ea7b4d93fea204d1da6a42efb41066e42ff5e0c123b7ca58842cb50df36b155077133bd7e14037b8b39bb883e9156f63d537007e476fce33f936240a598012b63d165757236720d598b7b5cc997bd331ebd5cd68cd1834a60067f360820454c410376917f8a61c181a11b09e3a790b9541a816836854f7fd0622fed0ed0452eaeaf2f391de459af7d629ebe2c19f9814ac94c7d73e49ce962f05d2792b73cab47ce171c0dad0a332b4d8f072f976d4b099d4a8b01a72bd73cc69e4f8cde83ea010abdc6373cbe53b3abe5a12276150a4c6889a38e80bf0c98352e83958a18fdafc42df979113eaccbc6272f9635fa1af0a1a34df3916781361cd38e8f298db658e066c99d35d77a91cf5183c65084a1c706331fffb7ca109388686c5f34df8cab6c160ecfd71e264803a1e61c1e281991035b20465d2557bdfbece779c68478ff984f9b26dfb1bcdf407782f552e2c87f071a08588c1b9a05afc053c563945f28071393999a9290c0a007c9dcc7a0143926dd57dcfc3ba044155fc2cb1f0856df63d10edfd32346b7b129ab5be36d7510fa26a7d108bb630423fbc859f4b7cabd6f4f90c2fd0585c8c713bcf72e392debdda876c0527ae3db1828e34ff6de30498e9fbb656ee9720b9f4d1932c6256c661adfaa14eef00774688531f97d1b46364bc17d11e3dc300eeffbe1074500036150725406a47f07dbec87d21f68b0960ad6a254e67d60543a207d34103ee82eba792b138ab8370a0a93f292de517ecc1c9fe0862c07d68667437cf4dbf963901726ce5bc39f1a28ca38c8ff08e30a38af273fe307543cbe6d3fbd43350b69393ae72f5647adcb45a247f233a43c380d62e9a226600187f0b0cf6ccf627b9691cf10864838b4cc23d67587a4caac0e1e4494f2f4a9213afd8de167d583280d1411530325e1610281f55cf4a9da4d10466a28593ab87552f2e09eac6796440594e654d63733b5aada854a9bca376c5beb4b2e030346b01caed9267cd2f747d729143fb51908f470162a7b128333250c5e9a7948e8df2fba7cd7096a6f112ee6b99fbedf19d3f0200ca7fcd34cbde55c9fb60b5460d1d081b5942608ee82108da0ff0f49172504409c4db241ee63da7ce9fc8a1910399ec30914c9b397fcc6a1221b51b47556e0089394db220556918e16ecf6702386f85755cfb8f976550abd12e69a78d50e74fb0c40834ee941a2126b37a4e5345a5eac89988103175f088b83c21512c1450eafc9c6c2a8c102790656be0e1ad8c9f0f6fc19be5bbac9d16f7c484ac2804797d7e3e65049803fbd7129ce5820521bf0865967aa86c18595870a46e6fed939268808ad29796f37085c8cca4ded2ee70146e2299d50a71ecb58de732fcb8933b2e6a5c404ca3fec194e8b2692ef6c6dc025165c35a800953977fa8c97f2f400762b8d4df238e31ef90bce8efaa78e053f5a7014ca8cae88aebfd007e53925624a1fe2fa1532bb766ba33eb9f88ac2964add26de5da5106b130f84b0bff128a8eeb0bd94f106e9a8742cee01f8cc3c132df7a479da844c036898399098bde01498933809082a1c450cba141f3a09a50a35b057f45ffdef9e3b92c3f5e6f1e4c8de36166d4b3cc0c7973779cdc821c70295253ec715ccbd30f02cf491a74776c117f3aea27e16d17b99ee636178afa751edf393833268bc256c8547a812616c042405638902f6b12c38a7a7cf6cabb0734f6c8932d03aa3312c376fadd013306848149da1789de2721f83072cc816ff2de5e82bf6850c311ed7dc43616e6c0b5d3c96896dca9bfd4cb41c90885710b2e0745f4a078644ea450c1e69d536de45a0550e972fdbc5e376a516bf96d0ffced93fe5c917de038e972d6dbd06450d82ab24a47d062019808d00a0fdaa1febf39ca30f7c9d7be3acb84d5dab9c2ec8a9d5942b4b999222949858217612d7f6f63f145f0368f35eb62036d6f4931774bc81e14580f5461d8262161125390a34c660cc42b0e3f5754316d239500cb63227a3185c2769cf63b4f9a4cf4197d36767485d9d29ba89b8abbf876b98a712bc964dcea6b3601d486023ab7c15b592090ba9a0e09d8b8a001e3e239a25a5f251e5d5e7bb8f2e52a010906ebf464bec2c5a361016cf3e0f17a48985b69802c6db7eb4c85fbfb6d44b0cc49acd098923a701956d6e626da5a9bd7f57cff97dff6eeb6e5de52a62465b905810570054f2f29f409694e28ae7116f4555f9446c7f135759af67a4d9f89030f5769fb1226c393d2a0e933efc5781c7f2e3571226645baa73e0836c9e84d378fd9d6532c9407cac3f499b952bfb7c9bfc9ffcb3f755ab74ac3d76e5b2aeebd7bc52ef1ed8e35d29a9346597694d75891fec86b3d04c281ca23cbffdbf1c03824d3671609ea72f62393750d468fd98ba7e3e0e90d638d1b319caef66fd6c862fd0c19428ba0b79a0cf6a37491240d49ce72c696cca709e6c2b06c54faa5e9d55af2ba6bc4b868ea34ad6889df8bf138fe97a5920dd7a8a689823c5d5d64bc8fcb0c6bdda1223ac444892f69d242c7e8ad87720fd12a940822a6cfac36d0602f4af78222ee19ee47ee7ffaf0f0c8feefdf7f25727c940dbb62ce2bf118d792b17a8cac36c1b0409223285499ec652f9341519285eaf435e0a3cb9ed379460033c53434d3d53f63a5e7d4faf3f3f383c3fcd365f3f024bcfb4be39ddd38963f53264332a740d243de83dd7345cc1a9bca67b9ff290106bbecb7b452a534e607b3ac312727a70aae8939b96663337de6375769d79a14bc51502a764f377693e6e44c1f1f39395ee6e4b4176a239205bbdb07b3843e2d59a205777f2f1e4323afcc440c2c73576d6f417769dff15a4415667d945fc2645329d3327f1c388302d39f4fe0190ab0129e39f18125b5516a9b3aad19c070f5c1ac89d90930fd09fb1806d22e6aa3a9c9f13972ad2412bb17e37174657a235fa8a1361bf106ec35e56696041b6dfc38823313d89831315b62c605d39f33256649cc4a80e9cf90c0f4674760fa3323b08e5a696396de6bc6baae45b919452612c3b85bef150173f10b06618654c25cf7bac019117846024c7fb605d39f0d81674260faea170c848113967397b3c78c71df5c8bda80b4ed35e50738a70f2ccfff7ec060abb22ca7cf34aa5dc38c1f5f74c72f1e679d9607e7eaca1de58f7336df03c72f61e0cde992820d2b61e07cfc39686a6ed88837a007d763d36d7450c71a60f7dcefa87d6a579860c88e92ddbdfe33206854f74e767f69d7aa9c6dad307158b3e94b984c0936be6c8495305959838326c78fac9f3a25c89afdddfaf0d6d601c2dd31cbe997cb3eaefa8800e18df404068abc3c72b2c81aed28629912ccc712cb7ae7054e1c12b2b730f0d425fdbe3146e87bd2820b0bb450e2498b31c4803a400979a48d881994b841182ea6d0e8ab660cca51942a3e2001118517645ea86728c16a4a6268446a1a238618672831a3c630c209272f6210e3041b68410d42e0858b2f62c2e0c631e23f75fc9bf431751ca7d22ab5760e4b22f044f667d2311f34ff2647d9bf8528369a6b21c651760fb23f1d0aa328fb53a24a7b70729d0965ffa0cfeebf9a61099326feee77fa4c966bf60899a5ff98ff5a5289bbdc6bfde95f9db0726d8269e10706b806e61abd51285a45c9048ed081690647e8c0e4857d28342834ff251e83d2c49d78acd2c6346507a7ce0fb85b219226c0a409cd942953a6cc012acdb69eb8409b46dd0a3ef7eed6777777f7ae561448eab566ee6a19185893bb280aaaf79e00933624056cd197a26a3d5572572595cc2452e05ec2a4c98cd58401060c2ae861a86889d6ef64c6aad25151135c7c200d223acfc7a9f6b69ae1522193033165c050c2a10c1690f1e1c6040d9038038b9b2914cee20c5887141631e4808225cab8615261439922325264e921099a8d0f98025d80849add5b3846b8ecefad31e32262d30a2cca2872628c1bbe8441538109299c886209277a80d28054144628c560258c30b52a74e081091388b1448566eb947a5ebfd53aca6f4ee457bcc88d3c8b0fe1488e842b5daea33c66f3dbc5e2f8393e603cb219e77ef39bdffce6379fc29bee0b3936d9ecdec73c5367696906d8762468e94892234b35042d11197d33a74661d3a7e7d293eea9c99c04d964b3d9b019d441495050b224022b3469e148d0d2912447966a085af2f2ddce3d2c4c5a70d2b11ab40ad115254b82eefde99eda1473b1387e8e0f188f6cc684c914c304c4e0a544dc4b9184381bd2f4216d475c111a53535345b72f334b96eb72e061084d4d4d455921120a7313622a5385c2d039e7a4ac3a599775592c1852502975ae6d757b2977dd2dedcb555a6b6db1703b737e2fe71da5de96f3daa5a05acea56e57dcbe78aa8fbbdd54268115afbb97b44e9f6ade9287c842e4203210327c918fb2162a54f208ba6e2aff90b36411e410641064a3fc81ec43ee2163f9c2a9d32a320f94a29177c83ae4a29c43c6810a154a2915dbf80afab22a92d240727ca9a7750a78b84a25af93e2801214cab22c4b244764b0273a5b43efaefd1e0c553b7427a0819494d458e3e64b5350193b65484a4a2a0443560c85e1a20c7da943564c4a299d540c49e171150acedd296d774adb9db63ba59656dbd66b77b676dddd5c7737d7ed5058aea3647ca151966aad5ea344d17957f581ee45be72afbb0d5dd77536df906dc8563251aea1caf5bceba9be4fe55da64c439ee1de7bafe75d4fa5f2eebdeef7ba4bb9d75d4aae72af549621c79061c8b74c254fc952f25016ca2f5ccfbb9eeafb54de65a2d4a9c851dca3b2ad4c0e703075afbb947bdda5b8fbbdee52b8ae21455feed5baf5484aab641d9fe64ef0709536af26b04da7b7c1a465486866cf912e99782c8514e6d413290e2841a18a3b55da1fc7b276b63eedfca9dffa25125b6b75ae654ff0b5bcab57058661f87d61f87d201886df0a0443fad5f39e7aedfdf71f5db1b0022bf5e82c6d063960bdb73018f8b37bc2d6e73d7d95d7aab716715d91b59cb5d6c1b6d639cb713554ce06e1aaf2aeb51d471ea9455d4c4d4d8d356e66ca3459aeebb8aeb5de8bf1383eb97260a3b80bf9d4d49457af3dd0087d1172f2e93e7dd29b90113365aad017d2dd85ba4c4d4d5561c5e3a8adb536eda694d27edad18eda6abdebba3bef6a731c479feb24aec84ed529ff315e6b15bd96a137110aafb57aade28aa2288a4f70b7f354dfe55ad7cb754a35658537f5740358c763c506e7716944a141c6062e980cab0f54deedbe38c30c99abe3e96c3539fe762e259977bb1fa3e3b1753c543a1e2a6574dd141950638811c618306a4003319dcbe572b96033766fd392924ce5ddee8b2a668086175d7021832d3a1e2a1d0f1598cbc78c751d0f951a64dc635f787ffe54ddca754f7af923292d2cdd25d52a080288239bac7ba8163c7e896fd0125ec24b78092f397d33a7369fea0860b77fbaec8e1d3932b3486101758e3e8ed322c065ad06bc3b5d9608f75d2bb303c8aef5f401fbde795ff873a552a9384ea5e2b81555bd8a7b4a55602b0c9f53856406ba86abb03ea961183ea77aeeadeaed45f2da395b5717f0305401a9aa0569adb5d690de233c15087217d4aefe0fa98bea5a2b0b2ad2a5a738295b4390fa2a45383c792083e0c451708d85833374439e25ecc7ce565bbfc1341818cc5506832983dae0b13672263f62a6661a338f21a6dcdf481ebbcf7d775c923ad64dcd2425553631b5d3f4a95e9f70608548c9fff3eb2e76d962f7545b43be1cc771b22eeb3f4f143cf4a591281485a267d0291a45a12acc637db33554dfbee05a0fd1426421a6cfb49fa552d13728a8be0de1aac547e77b9e9376534ae7c89ad4498fb1582c5697cd8365d485a988949454509123545418e893d74aa9d75a29f55aa9d74a296739cbd9cb597b3b8eb3486aee3aefb826a17494639a1eb3f48976d114cad5cae9b2b9114be13975606df35a2d9294992fb8866b3333a3c81265f3676ea70fe7767e7775284b1445f145318a68c57b4c25a4a424fb994d9feb75545cfb5e9edde30f4a7d52990815cc56a3c4a049f05ddae05b2c38c49cdd7b64c7bd93b90a91b9772d6090c50bb00041fad43d3f755a55c02c2b11ccc2ccc0d018fdea89a6e603ef2559a5c6c6873cffc9d8883d88375878b8a283a9439e7fc9114b612b6ce4e002a72b5550f1a5698a16b0a0ca289b31e9902153716358c1bce5f91e4214a6af022996a2f0f27ae115e58c4d2866306503a2a12e57cc40a35f4977c1ac969ba7173392186d5de4d0411149609891c4d5112607284810e50b11c07084194944b9200d2e5dc60031f67edafa5d07e68fd349f7e04c6732a50f8546bf89c770ba7b14be6b3dd9d2f5bbee9f706f5b380d85d6e12e332ac910f715e62e2a8371816b7389ea3022228a241c932ea91392dac88905375961460579ccc96dd5b0133a44afd02a0d62246f8ecb3773441bff8f822249bfa4c17444b321c5346834db904fc02d68362f924f584362487144bbb1219f4cb1349b77a1024113ff867ce2428f8902066d8b7b0dcd43c9f8a13c941c3e940c3e94fc3d94ac7a28d97b28f93e14eea1d487925dc060844113dfdeb07fad9222f978869415499202c9a4056aebd2ff1621759944821d84be0d893b08fd3aedcdf78d48da909336739aa6eb172a7e44cae01a982badb85ace4e3035e06ee5ba7a55d603d1004110044110fc3c9b67638de2c8126dd0105f896fefaefdea8a8ba220e5540ece702018cea8b8d58acc40e7956db5f258a338b244f1057145ef13dd3db476de557df3bbdd7525c072d76275596b09b0acc239274a57af48d7e3aacd9e8e9c9355d733a346bec9d7b3f6a99370e39193566bab4e1d5b2b274449bd179a517d477356919356eec89f8390bfaa23e7642e24c0a49165701fe4af6be5ef92f9f33e7faa1cf9fbc01bf90b59f95be1e46fc683fc611bf9a319f357d341fe6c6ae44f042d79933d52a889aa65a78b0b3190bf1b317f356cf2d7414dfe469afcd9c061ddc0f1e52f872a7fefe58fecf2f70197bf1c1d2074fe76802a9a3f57dde14d6759ae6ccb23bd5a0e69be60ca17a3a5a4262d927608528286a41af8e0050abcc85ce665adb5d65addbdbabbbbbbbb5777afb5babb5777afee5eddddddbd7aad0a685b7dafb5d65aebe8eeeeee15e7babbbb7bc5e1eea2531bf1fac91c1d20946559ebeca705c3a52d1a307d4a6756188ffdac9ad7cbd539c2ec9c3b21d00bcc46bc42232d3ac142235e9e5d86100210d0dd1dc88d20608e9e9e18284448f541c26708489219122699ee1abbdce1728d0d001d1f3b22c05e3f289010683e90107858e3143a8bf5c87c840c1932c7a6d65a2373ce7ab95aeb7492e6ee544c931002cd3732ddbdd62a00908412bc047f37c184134ea848dcdd91d4a2effbeeaffb5af835ef6baaaf7dfffe1f485a90ec5cb9d5eac355ab7a20f81ec8527ddfabbe565fbff7bdb66a3ef3596bdb6c04b6b65b0c2997c3676dd80f85d27ac64c25c9e42314e0d6babbbbbbcfaf4f6dae1d56cdd0f098f237210ad37dce39e79c1df857777777f760bcf91a4d25b16f80241905b48dd6fdc4b1dfbdf797c4b12d23b46bdd64b0ead5cefbceeb6af7b3f6eec926e988ddd5ea0f680e083b4a1796358f4f05562718700fb045830f90ceac30bebde39e53e338d1e6a656abef6ea7635808d43fc06cc48fd0489971972d3a85101af178788204c17123478e18299355d990213fb9084cbffefc90643000c2243377bd203ac19a87ab478f11d6445e3bb059083f80e404098166109e1e9a10994f0e169d288f2995fe807508003a00884e2f3ad111acb54173ce39fdedb5b54835025623602589e4d941600921d024019c4161095ea68c00c091253a61eab2ec6fddadb7c07b042c2134a19a00761509922449be0104e5c9e305d109d3f90d20049a8e430275d05fc81163cddddd679d3a3d2c0fced595e59dc96639fbb93abe1c701431eb6f1d47988f89c3a6e68668c372c7f1c086886f75e1969168d4ad415369cc8183e673803f7558eeeea0bbfbffd419e79c1304afdae9eeee2e2a8676d1e5849a229e55c43258f93afdda81bdee742782458481b3367cedba2438eb1e85fb4135b2be8a5ab9faa9a6a66a972080389ae2722f58405091711cc791c84ff93b70b7725dbd2aeb7d9e47b96a2975eb9ce5381b598c3a22a08dcde64a1804aca9799b2b616873a587ce203d3d3ddcea7a3635a14dcdfd88701d11202100e9d5ea4520ab8feb8c5cb27eaceab5c00270a4969aff5a60bbbaeeb5b3b3a343290294801ca9a5c6d788355aa3bb7002befb7aeddc05bc5e3b3b6ea42302116d800e288a2239693737ef61e8af1d3a5faf17b7bade8d18de88776667c5c526d590766709e8df03402721f0b5aa0a600d796d361b128d0bdf9219b8b9f3277fb248168976f57b8077ec00e1fb543a74e4dcfbc107ad568b244320ef3af70f819cc99fa0baa7e64cb99fbae81e314c1df70610400724d408ba1921080f90107ec05e3b15d841b3795a0008be6f86babb946fe6d46a9e827c361df27dc54f135eda15e8725cc759cb75d7c37886eca78eb20ddd88ae80e16a06ff47430e6da14e34b4e98636b088dc0f224d1ffbb66cc3b4b4247a495cb88801660c9831636a7c431c1d59a1e4a4e4e43486588a8a9a384a3a4a4af2c06f33a047d22a94de6e5387d68c20f7572fca633544eeaac9c2751e5bd510e5fe5a43e5495bad58a0476aa9a96975961edaf2fd944b1b1a9a02a3d5bccd535075a9cd3b721712a4e5e22efaa00d69adcc20f46bc8397f4c20f63f8e6481b345cc17b54764fa1f0e500c14d951a4db48bf75e9559cc85d458e8505fa2cb470736f315ffd2d8cb9b9983afd6ee4aef6a3dc3590c800d7ee9723c7132734ff2150fd19f287b6742d3429b3773475c8bfa4d841a86de1a12d2b74d995c431a2ca4cc29b989adbfcd1758925723f4d78c3d981c3e59a213ba8ee8c0e2a024b78501f393b3b60148cc7ac925dcab40b8feca72f42e0c51cd246f4d53d957c2eb9797878c0906c25a626a7a525248400c24b5ae1a7e15098492e76d7d1105d22f1ecbc7a8e042d05b9020363de6aa6762d2d15758ca635b4c5bbd23db4089de18c3dafd54fb6284381632190fd18cd63b2913a481b394dab99964cc8c192addd05586ba3563f0de11aceb6d28f8540ddc7bcff3e95b59cb55ac2a7219ba9fba85d1dfe4c67e920fd981c6aa45eea2034cb9c2fae55b33ae4ee7a9fa55d47592a57bf6e9a3eaa1fb025b345a4c5d2a551151202d517128e5057642fd97685270c0de59ac592e93717376c3187582bf345ebd3f4b1435b3aecf1782d18696ff3077d4b5a227bc5167589c9ae62bb6c6b347ff8801e997382175cbb79c89010a8be178bcd9034ca5dfd2b72e8f6b4157d3ad5b1a89551d1edb8186e0d6d51750feb47a39808228440d55a4f047086a462c6f4ea7bc4d682dfe23fc18b259a3fe863b2b310a122c020912b30fd00cc245370cd1e651ab23bb2c7900dd5515df673ad1693e52b688f32fd13bce06b74f1d83475288d48111a10f8759011c2115a169b212d91bbe85b2301904d5ff30725e9d4a90133e6698c9031637ce814e2e3e323a48b92528d92d39293ccc949089d32214284c8904042aa394a424a8a2525c9e88cc964b2581623a31a228fd9a3ae29ca3d20c65f93e57e4d96dcffc5e8ec89c562dcca5a9925fdbb226d9151a6575a94c8725171098de0c89e181e203cbdfa9e232dd2d4a1cf1392e0e59a0bf96b59a2a9436d0e997a00ac64c5e4bb8b001da4925e7e8523e0c8b655b9bc5e3b07003deb2e04803b3b3a9c8e8e0f1f3e42a036ea21420e3cc0d5aa07b822276d8614a2656833df466dd4834e1f3e7c70ab30cf90d8b6eed4e9111af13207cb216991e60ffa97b45c6c5297f47ba4e03100ac646db548cf1bff73701c0e1c376edc6001b591b548b4f451db08814e08836bfd6404b5f4d485188b94e95bd04612158054284213004c9b59852a809f4a05efaad0c154e02cc7aadef2560dd4d727f07067f2f452c60f140aa51928e530c3065dcaf861868c6fe64c0a84c1210651c454311a63ea8a30324ca1051a25b8b146097cf9c2058b1bb8a800a9243326066482d081065c88d808521665d02003d10e4e2cc1c1182129641004151868f49b04bbacb3c90b08a230228d27b430a1a4898c251898014452148d3e0f2526291a98e08b21a4d8c9428726c8109a620a16187d2a86174a25d842c61658dc80467f9cb11d2b90524514145ab22043a3ff33367ed981a88914dc40851034fa019a40a8946c5cf8b0533303000000500023170000180c0886432259944741a0a9f20114800f528442705c3e15484391408c84308c82188a020c628031c4186390510c2a3b0320e643db76b78380c8b59c8e47f09446000683b428b56892f9ab03be29875d2783e7d546119ab3d9561a89a2399e17f7e0edff5d0e9f34aad040aea9183146b418827ba4cbb6a0a2ff8f3b9a537cbe061707cc63dbbd32fbc298ad48a5b4ac6608d34f1625116728d937c0d103f5858c37620a1e86d738b4dda798254a960e2eb60265e381e904821a12660a986226d469acbd15341548f41bd6b35c6f2506c7b48a0a20ee0013c247123a8fcfc1c2b7969c2cb7a946aaf6fb8bd00f8f00eaf42308a014b53c16b32044c61c584c0e1996e986ba865e8d5dbd281f7bfa6b46b4f71ba1e62b00e8b1229853af8e8f532d93910f1d713bbdba7b3381548d892e6d21c430ff9873ee5a72ee7027aaf59efeb8d21c041f6163c7260ebae9f926e3b80e60eecc7cf6ed7a0f01b663acfa9cff1c01fce6e8154a1e031e70c37f14b0708863f2b41a809882c7d0bc54b02ebe6e824c1db7bd2964ac87acf55955f1699dabe2980b141cbf86d957618acf3179cc6480587270c9fafca7f3342b81acf11f7cb08bca2e3e7e2ccf757b634b3613051d6b2e3e16c76773fbd92734d35445a9140d15a618d96a01cb69efc7d4f91a94baee3590029916bdc4352a8edbdbe696089089cc44c6b14fc3abfd8120755122f3e61946127af4e98c5d0e6dc717408993dc277c190d48cf8aa6da6b5f8d0a871464bbe6c99c00f93334b9b069d075061d9dce2ad667fe1726ef9280df080e04f8817d61f40aa0629612b81bf8c8f7c48aae8d63459460e56213d764d539091824a364a10222b803c7086298c7c057f0d3dbcb6bbcc56ebc55f8e23ae9c6d533aeeb46f728e00cc863c6e3b2b4d64990ffe2578ab71dc95881cf93d07754f90102cd855c8c22c301668c12ca168f022986228607cc98124a971f055a8c2280034f61304ba3bfee22328a57d188fd0445c003c819996037b114d36956ec12f7e1cc9bb4432a90c59451cb69207e09ad57bc40c59792c07c2535c9a5b7a19450e8dfedf757df3bbc176a9d769759ab3e70f2db0bdd78c16cd4fa21855ebb9df44c9a9ae738b441ae5a78e98af6bcd05f55dbc9672898a31b32a8f027dc41acdf8bfe004b26b167fbd631c0c35596aacbb31e8ee6540e2f53ffa83dd60b273e698622d429fbec3bdb93de39ba17d0ac02679f6c0a125880428891c2654761c613b938f6d204ea9492cd6f9cdc1b7b8d57cc2a19291ddbd63a99e665e57872ebf11b1213b48403732b3114a364cff554775c55062e79d15b4ab8cc7a0f6a63dc8fd9a554822a49584d72a2073caaffd2216de2ebcbe08746ac96ee44d785bcdf5217363b19dc8a7d38d95a7babeecff0c780afc440dc209851678847a37beaac313ae0b3a695a182e9bb546477a993af96a53b172579ddfd15b3861511af8fdb18131446b8044668be0be0e9d5c980395360a006de4f16d3930abb80b28b6d4a7ef1653aaed6271ebfa1e4a93e127760d1e0dd5eadbec1d19a5eba63e10c4c262d2e393f3c64f82464e068c8fcd64da8f050a36d61112f8e12d5d7f48069645b11ff6e677e36211198691aba7e39a141042ac6604e80ffd34dc524bc594d6676aeed2a1c9d6a4efe99495f4d5a9add65c6a6d537ef25e81e12a3cc860891133409817547859c05eaf18e3b3d8d38d8423cbaef4b66924fe02c4b230cf569a0b05067319e8c80c7b3febba7111ab53b5c781e1d7c2145bfe24dd946f71fb51843b556d2a69200cfa59ee098e5012728ae81a7226316421b227f3f51680bc585ddd807c66cf234eab7af3d02ebdf76be820a599789661ee95cc97fe38052c1702e454b432ba53437f3deda4fe1eebebd8f2bda6924e769d98f3d2fc9eef1288ee428517a452f8a003f3704ff5405c6823feea1aa278b01f1c165e9ff92664888af7a7a0647aaf09026aff9213b4e2bfcdae718767fffad815ba8e495c5dab7137a88e16e223e02db8ed8641f704ecc6b53d883f2911bc2f6dd5ecf24c8b94ac22f51397dcba4548823bd183b700495cc2315276a5d6042884907ac1bc0de2f1bac1f4ab2b5f64a4c942a575e40a74ccd09c2b34a8aa338edc82dfa2e42a3f5bea564ac47cc37982a29e555e7bbeb8b0f82591fe1adde8001e57e2c99fdb566d5ace17e3017af5e570f2622422205af64bc058786fdf635814346baf0c44f2b208e3e480c7b68f3805d8a12f4fdc54a3a0e177945a1ead0f7c0418f572b26dd4202d0df6f0fb86b966f4925ba28074c6826566be0a60bd9a9c95d1d53022a8c3fe44bee2f3d04689cf4df6325078b165e33536e9909a16242a645c9d1b0498f5607fffd04faaf7b5f10e91ad1d4a3f294b463a6aa621a062f4ba47a19ca15820598eb53a20e73121cd1b0980c6235d226d64d549d24a123028f1fd7fed4b8587dc9e24cb4c18c43ae65ca8ab294f02f26894fe61de0025acdc560f147930fdf03554199e94e2b4066d1d5579c5ca2ff43669d52413a3b57e9d69540673e4c7e467a4db8e01aa119bdcb0624a2c86b5637201eff84bb957cf8f6dd46dd8d4fc4a43ad5e7405f5231242539829c4ee8a3a84c94a6d62204f500684e1d9e730cc31099d61cb8ba3cec0fe01e897a86ab0da4c83cb3b00625500780e7c4619ce305838fc443ba6caf19c48fb3f322c3fcbe4c6e7d53ebeb876c1a495a73bc92f491c64e8ec0a10571bcb9dca3c03c0c29831295eb3a27121657140506c8753be8da12ad54eb74506351ae04442aa5862e22d7f197f74a94f01afa46632012c54e6dd8c0731e9b83c2997a5dcdb94529ba6e054c60df438c048ddc16272996e450144fa316a4c7b32c1da9f8030a9bcafd3e83f352bcac60434ce4a22bd1736492d32e400147f97e53d3f6878c7c1431b55304b76cb8088a9b0fe0f376f0e75ea5baf6cded475125926c530f3eaf6b7c5327d32949ccfec6f5b34bde1c9614777a3d243d8362b243fac337b3efe8bf9ab587d0d74e7b1a45f9ec39bd28798f67c6bd19e95d77d69e56db9e28790f2737dceec25c88a204bd05b86542a8e3021aadfd46efda84d3c051683156034faaebd77a0b471c550baba1102345e4782a76da4b2854f154a36d71135d790626e0987f3445e8d4ea94c09d96e427cc3decb01cb9b9821883ced2797f56944048e15b7cfca90eb56b110d4f58b8763e0287fb74e5b90d05648878e1853e7549acbbd7a73af007458c3d81d44391740066ee8991ecd5240c7513f7b7de6f9d1e133137d094d37e099809387ee69851fea7abede6fddc6c96c97064588f0ea9bb16fc0b857b4c46ae14e805a39a9eec50e37e8c2bf198216da5e3597a033d7c901d382b0c8e7590f2b81beb1832f550ff500d4827f6b2ba3feab0fad427952596dadc687b696f1b78768e14654e451a5683819cda4dcaf8433e7e5d7ab446056a1cb2cecba96d3dd5f4a315ddaae1c6160fee92e7cdc3e91872b191994bd69231f0c1902b014aa70ea9fb8bab7d910b4017db40d726f7b50c941516d3abccec28b10c918afec125b72183c87ecc3fc2c17051271e00526450ad50bdb6432066a81c9fa707ce40115fdd6cf2f702f5830356b4aa05bb0d869e65a92d1afe7e72a2398e62bdca24a27d0ec6b4fd4a5eaaae11fedeacf7fc01e1bc336b89e819b5fec6cad72cf60d32dd2954c8477d83bd84d737b9625ea04cc8701613000ae6180fbff3c106c6592c836a914b62272d8a03596c989c2883702f699a4e5193cca61473c94732e29b8997df55059407e40e501949931ea1b9c01c76be31a4949e3fe695e7c6248dbad544842f99c0623e1fcc722813b285609bcd4f91d4aba1cdf5e8d5b5d7467222be8bbd922f74589fbafd58af098df41bacf96affea131e072d4abb1181233c5ddaffa62561432bddc903c6826fe08689de72f0b0706af3a54169d1184ba5099ca9851ba48942b80692232cc6ffb6fe7605504a85b10e6532d51dde404aa07c02cd34e0fa49cecbb1fdd61d5db65a14b21c6bebbaeefbccc6713d994fa2457cdb108010fc5908ffb5c66f680ba97f574f19431ed47aba468948062da186eb8f0d06e48bc38f9069d8140634eae887bc373a231172cd8b7838c76de3611431c06a9284a19913081142071c5c0eeabfea8509e7de043194028386abd5bd04dffdbb4836960a8d284d0dfd0e0e2f12069516387e239ce5ff8a5c223a75eb95f60560a1248a3f9ea38c5f602b0f57e04e2224531168d73267f2983640dd49a74f4116f75b2ecb6539187938fba55e19de255d8860c4a75f9ba9c20a107a130d9623ad048f30e2d6cbcd33665a487a56cb79cfaedcd5ca03dc03bae357de527195afaec82f77a1f00bc8c4cb4e54e94b5122d2b0533cfc2b7c5f8ce00669c1f2f13323ab53d1ef09bfac79b01948ebda7093c9c1b5dc02559d31f8b65f8b52505206d999d26572035c28abb866b4a1c25c37634031174710b5c6f081c9d4891ea5d4f64fe11f11860b2ba645d8652da9d078a4e21258487c98cc6eef13bc36cc4e4bc284b92bc270c10378f2960d48e218fa2ae2be521e376864022e6622f0860cf9227bd156b480c9772c69e68d4a36b0386ce6d26edda23782a31258d9b9d3d5acf4db278928ae09f8a1406f2e0f28835023bb288ba91a9ac72b180fd293e626345d8320def7178c9f8356a4279bd06848540fec5ccabefc71c4dbbdf37677fc9fc665078cfc18af19d9f8231bff8d4cb6c657c304a0cab83e130f4a9ab85b4338f6c7dffdf168cbc5b4b634cb97c7c572e3a9583ed84c2cdf0071df38c50eb26c44f1a51bf0305fe691130b2bda57e476a396897f4aed886787fb299e1f5ffd105652ba420164e6f7593cf05ea78e479cc2fad8ab30e9f52817a326a894df1c07405302048e612dfec6f70fee47bb5ae4577057ab2f9961b4736511938eca980bd3981325258a041b7e4701d432dbee1abfd0eeac525025f82dd91e073eba527e056f8cd80abb150d396f8866a7179165d953af30b593a534d409be2636c45d8dac2afb22a478b9fcf1f490c758944c6ee161998fca3c21e1c5c8c431f729cc444b8122b1150388eefb0d00e01c988a9426aa042396d3e67362c40154699896e182b5124a6eb48e15a511c5b76b492038ba6eb0a265a218b595a16634c4018e212c0ac2342285b0f44ce3e91b77b376e038f81e112d3375240afe249840a240feb04b97e491bdaf80bc00091899c31d3a66c16019b694304c4bcdb44b33b018c9c91c84aeb802ba0a4c74923a388c8a6e0a01800d43720c5c79059fec38129d58e83dbab0427795d772bcc068f717bd05e15b0ab2702ef248b479f33be7f69e7150bcf67b6199c38d59048028692d7a4918765f526392db4409e2c04c73108d958b6a04a59793e570bcaaa5a28bc0b43c1f3f95d9c37fd0d572e6fb46035934605d137320e9f2a911b0435c455a24f29e2f0eec6b963f8c185096acaf1dcea1eb1b1d97633e141e2f74017e1bb4154be0372c60ab0f17768c10bfacd8da11407c587096aa707ec4b3b15b7bdf612b87e0a52ab9b51901f88f5fc3f4b131f913b3364f032f639cb80f3830328d7b333a0890c03d06c5f7ca25f5e0bcc617c6d3c2942efe50df3cba66ccfa858c0c1431c7878c5c9ba1b40a3854b0de3284e7fa0e8c95a7e1a1c620b6161f740db48640a3f381ed842302966e5f7ec5881557487a1faf80706e8f79d7ec146b2e0fb0a13b321b7afbd6b1eb5c5146004c8524957d2d6517bf88a41ab5cde1bc7945c385c4a1f1c57e6eb2b07ba50c0235c2720634323689f3ea4f452cf03215401a2540d9b5c9e9a383cd5db0ac05d1dd0f5c6f4e3b548c0a40a2a716ad036a33004851d248cd605d0a7c50bb4dd15e95b04c052d127847bdfb1cec5036f06bddb8c1f04832967307d197b9aee5aa12f8132a63043442dacf9aa4ec4b027822c4ce5c47a242a83abfcd67c191a3726fa9b7f648f3f0f8277385a3b4712606aca8b1fda65c3175b189f2171d5104ba59e306549c2ee0dbe66d1ed342cbed59d5e5123e4d6bd1f217f9947e953630542af548fe75ad05b531c22315a9790601ccb8ec526f93ab45accace15d6a00731529edea514b4a1fe620c7df43f97da967233588a0f99e281993bc4d5936ec19955acd578f568f8d3a4c61ffdb37547dc588b4f67c454a9c159d139db065366ac494bbc3b5d9ccdb368f034450bde3c52e5ee3d1de1acf33f1da63ad9d1effbcea08cd2982984b3598b819c838e7bca370a688e7fa5bd765e39bf8348346fec77f9cb0b6b2b7dd0338fc9b6dd7734e47f50ce83b21f84f211f24e23bb55460dc74144ad3c46ad7fac465d8fea1da4db4afec972835187964020b88ba47edb7f8c439bcb63628bb70fb2c21999ac5ca2455cdae7e7800c5b9ee4795ce661d90f8a5480171979cc46e0e7c8220555826f93d0b8285e593db1728c452671864324e04e4afd6aaf1b5897fdeec57f8057cc82d63c8e6d1843c459aaa07624fd66c8ca7724ba2ef03b33cce0a490b5fd21c027f9b1ae85aecf25fd420f22ce7923c1034452aa4c6e361cfff8101577e6c2ab8131e5ab686d9d1327f6c393b7e380f1b73a9d46cc6d07722ca81e04335c0b7b449db30fd0fc4d0040d790731b34f476009f9c258a60706d0319069819632f8c63dd94744933470df6c0f92397f471015d115d00734f7e06cdb0be8178d7ce7014321f07692b3ee916f15406031068b03482fb2420314712097ad7fb0df9fe894e7f5de2f6a558ac19cfb402e20b32f68e7045f08446e8a0ba1db0cde98c4afa0c3a6a157538dc777a29a2a96788c7a576f7b22c21bd1825042d2816b462188cf08ec83f2187a6e3d8cd20ef783aa54617f4abe1768aaeca33db82843adb448a9d4d8a871448412b056d2323667649872421c2793943d027b26651834998dc2e9b1b49e5b58336fd065c8e4431414f7d560ca717b8339a1e6ab2d65ab705b6c5c0801725178bfaab87856d1846de2c295c2a806ba80768c1799b23292735b78c54eb2f62d484682136834d01d0cb958fbb775a7afe39a8561b5efbf4fbd2b6f0d77031314a0dc7cd5410c09771c714e1a265862efc602c2fcf6076f51e404fc89be8c421669fe550055ef70e8fc32039df7ebec5f60f3988b4428458e362cc98af06f0613393a4842e6f424709549090aa774be63b7cde04f77a553b7e030d6344cc7ed167874c72e76642c1c4b2b78975f6fe2adde103a71e5bd756b0dc4139673e3098cecde1ed5b66dd42064c324873345c60c24190471ec176f9ac9569353c93ce08f26b1c4b31dae0dd50fe31d7310d5496b9f1c7cfe425c35b1151e8c8c724a6c2f77b644530edce87da3a7c6e0f8df259ae05b3f8ac329ee21aefa0838de10936347c99a9590431d7efa270ae0a2dd4a5cfa0e01f2b8ea84d84571eeb6cf1ceea066baa13439c41ada4d363b3adff69b8921f03b5b26a950c4e1523d415e9af38166710a785c41111b274733ecb09a4203b4d43763bc9cbf45f4713d0651112c7dbd6604688f139bb9257998f876b7561157d1d2bf431d1936fa7c5be1dc019ca8274e038242b287a71618a5c7d214f03ede027219ba39e12f2f1211f502783ed997734ee041d2d6e71506cb9fba07709b9e4fdd335acfcbeb716a8163221720c6742d80f6a42b8f96c957a7e50ae1eff28c4baa10194922276fecbd9226bdec451a0ff928347a4a07aff0d8734a0ab1d7ad04aa24d1210a4062e548eba5809d1f28a34213c807dbe725edb44f47e42eab66cd41dbf3a35e4aa122824418763a4b007492142141213056ced6e184adc5dc259f89ba82c127b2d2c85149f1c27b23e5c4629a0912de40eb30c9fc76c2832957e0d4225538826163b7cd17f1b127783450cfc245857a070cbe2c68e742a2486a974c6213e31c86ffdc28a9727190589eefd77625f6843d9e32a8471245688e314d4729f48c6b6e96cf8a6bfca22da47c2468d208c2744aa308243833fc2d6bf424aebcd46fc350a972459759a5a1bc3f9b869810eae39d23de05808b02463213e3764009365dc5d4304a46f915a7d9b8564f2919a1a44d771298616ba7304e60216b590cabcfa5a487734a340cf891831bf86638d8b1108a056fa5c1691de6a399901c735c43938872c5099ddb568c05ab1105c69fe0855d2b4e8f218c4a9aa63002476eb0d4e0ac562319837d963287953082b0a7f1a540476212b0eeac600d8094c929cb6c183cb82836b02e0eccee3e007b65e863095ea48732a8a80bd47d6ebd56e915c76ebefd6ab35733ff003537e4cacc0c2b646d8ebd45959a6b7b9337e05e04beb953feb9af76a067a06a9efcd07f71a744672197a2b7154c4653fbf7eb9f28de4e756f79297bb1dc8bb77e6e61d19f5c1a1a21a7d399867b5b74df26420e351aaf45e4081a65fa6283514beba398af6135f964ab1ef65be0f4cbc7097c5ea40133972ea8fe0ebe1ab22b76d59297bde8fd7dd946df8bcb719de9d8c4f46fd85b710dc0998c257073bc138af6d79acec321e5914e3168a2f748e41cfaab6c0b1db2fe096033ceb045405c67a2030ac7f7c75aee9ce6e5fcc65bf94b27b7734f8cadcf4c65cb011e5cba3e12d89557bca3872335f29355b3dabbbe49f977ad5e806c1ca9e3161b65634faca5e7ad8b6b0dffc0f34805abeacdc1bf565a28bf7001066ab828712eb72c55418955fb769f833c766f1a9ada95b5f9f63a3dc121e34ee7981a3947dd52d8706decdf7ec380b91076c71e6fef93f402adddbd847c35e8dd17c63f889673c7d86a8e2e783bf4cf50f9030a4f88b05cff55bc9237ea95ecba4f533ec3ecc92c5b73a2c3361c91ee2b8d7e3715fa1e1fcd5fd089a6e9271c314fe9bed427fde3917ae503656d27b943df90c1ea37fdc79fd8790bb3b465f611d1aeae65260f5b8a12f9185c3dcaefb327ad58d43370c8e933a3771e25e47f09eb18a07fbd9307d1a0c69420656767956c3a2e40219bf618b8c9869a1e9f251e4ad77220c1b0682599aa6ba2f31e22c291a72bb964ec2d80d1b25882f2d66cc9513a0632d0141b638ccecf395767c1493fd032edcc079ec51e73035ac0bd1db044dd27a4caf89daa2b5b2c36ec44a186d740f102b4ded8573dd84b9bb48eb654fd828d5e8608781180065589d3ac7691b29b0e74cd04793552929343055d2f68f338f3e6b3e6c79131bde1653d97c626551891224d9881d9124d5e525a4a7ca93920e07dc78304223c54d94c8a63409b1ccae2577181ac3aa6c706387dd78b660e02c7b3b19e8caf7be341e761c726f02fc59c9f96242386decd4c23f508778261c384d352188e2a7207715a28e0a0204e9545266975872fabaf1e53d318b414fb5b7957bc401ae57337637990fb0dd3e9f049e55663726e61d1bf9c6a9f21abb22bf67b58555c9e25bdc6e746c6ef1f4d7a5f3e37ebbfe3acdf6ec5df377e3a36e1b0f4cf5df54d767a29bb37bc50ecc6aaf851c0476d89b6d828306812bdd6c9d450ce5fa3f6cbfe7a96ca65d6e1373c576552230eba46a5a7d2aaed60e6169b96ee6039322e8a75c1573fb82a107d309ab51b8990db83486efe86a67d51b54944c47a476ed1bbd88e1078c8649d3c67d2325c6f20345930969efb9303803892e8f9e06523606ba4a1bdae796e4aced77a6a9871dcd80c80f42dd3a8c14e7e6e874aa56f36ecd1b4de420f5d96d9abce2caf46b27e2d0975590ab6587d472fe8703c4fae5224e77cbab74f2809b617ea5b40333fe6bb4945ad8cb7f157d8659b0691d2e226671e9b8c9edb640775a1af971ffeeedb607c103380b37de1d704588aa6b610f7070263148d4029326685b829cbaf1548c6bb184d9871fc923c2633e8505e902923903a4c8edd4e0cb0c17e5f0d62c53bc04e054eec0f51cd1f0433e082f3668af57b94fa100cccf70b4434c0484df90c88bc41472f7c2dbfb170de2ef773c3a0e8aeab329c893dd53e100b90e17bd1f854a9b3f3c529ad8ba9a81886778b3e8d043e0b08cc07594bf810103928d47444d717b20ef7b773fc8497aa772a9031368a074c1db1fbcc627a8c846d876782a2f82ea02a7f188a924305fc63eda791ca8c3468484828d30d2b0126b5e6f6650341da453d76728e1be2f42bc4833c1827503c3d224d5685c82ca025fc327a824602e923a0582b056a4c23112c86ab2a60ebd8bfcc2bb309fd7065ac2255f4db7a0ff9cee14b58031b3f9e481f9dc81dd4da013b20e533694b2d10679c5d50e01b35fd0d0ee0cd331d44c27a0cbbead1bce26a34015523d60fb72e4bec9257b4e029773a82970ca35398d1ac523b728716ba2aac79db072ccf1753f4dc9712398fc6ee5d319560b354f0b7cbcbbecd35f17eaf07976ed59cc3049a6f8855066c60f8f62663c04b94d420071a7d7b0e85463c2f4e357356599f1a797e8b58e886e9b84524ec2c921aec6e952ce3ad334e81cb8948d295cf010833fe378fe53e9d1e6981dd32c98ce0b9a475a094e6c1a7f215794503b72470778e6573e3bd5a224461098111ebb711cd367e5830c55e622712b0e72a21e1bc72758145599a60835beb2ad722d09c475f3215c1aadb9a7c7c0277fa5dec52fc2950f7c05968c8b500b888e0b54dd1e7d33a271c9bcfff55c6024ee74fcc16062f13dd744da2fcf27828e7ed14424e9041a0bd21b3b019c539f271e249ba14ca12ecfdfecb442d27361195ddbb9f178a9d0efb45a2ba7747dd7c4c88966045f8ac63cf2402ac4d04eb621c096ea60493e43d6b573ab7984308eff0c9203a4d28222844aded9883ab7fe341bcb851c325cec6f26f574b9a5307a2e86c393a5893176d302022b39bc6b5c5b96f7c9b2fb00f22ae48e262f10e7fcfe3504fb8a633f69e53a5d1c5feb6612d2557368d0fc6b2e3da8b3666d5a1a598e447f8bab3cf36f3976cf4a69f890b925cc8aedea04bf511a8e982ab04c11717a448ebcd3d3713d9a0dd3a815ca94ae4fe6f4974f695636e4f4e296364a91e300031124652db936dae960e0931ecedce92487bac62a54f6001ae50fad022bea606bec2e9e0ea6c6f164b5139a035d15ff65b81b5b5625bd06e27c7fcc02dd1e90344c5a63da3b2a22d6d281cf98e89b779db06f67f1ae77073258f9338e2ece776db1fdfc0ea0b2ef0f0ea2fcd1e20da4b1742d9e6726e3b3d17858c6ae47dc0abf68af9261c162edee29ea5f12358871d5ec64bc4e581d4fb74cabb76236db67aebd014e249de7962d8372d9567ba45585f761d12a0b7ed249c01fa368410a116329940354a14c7855cd925f2fa372b8f288e3a13c28a365af1174baf5dde769019363742f58c878c747fe13bc6a59b912f0d343a4ea9c0ca84ebb85f8bddd2e0aaf8bd946b19c986436736db6fcd9052b01bec62e019aa8e207819021bf13b7ccc752736592910fe8e8f4796e46aa32a403c875a15285063609d6373da7b3f0d200869826f04a251682f8397053389910663c1696ed6dea68b8078b904a498413db6887072719e071c2fd7042c6a1ed7409e1581136c6d97affca17fac7d5bfdcdf0e7f0ed14206c5ed928f0009ccef0d85b399b0456c0ca07f1afe378f2d69cef65bbab64f4a71e0ca69ae50e96c2e52e745665fd915dffb21a08a6a1210d24544ac0d1a10b1a9e099f87472dac03a48c13edc44dbac40d39a86bfdd8ef4ae1a33b1c56f3b7125dffa4ea1a62aec0b6e22df0d2854ada0d6a2b259262c96026947a40d6e0375e86ebecc09b94d37400fcec71a7b923597b043c539a4ac715bd5777b098ba33e2ba94777dd61969726d04657c5722cdd408fae3228b0349c5b942a8092cb6c53dce7de1ca4266abee45b2140465e109ead99848df4c2ba6e2facf64c5e0dd4559766cd946853fe33fb390d140cf592f3a014da14316ab3c9d7cb31e7dfe565a78cb0f5d79eac535f54602197fd3edcfaac016d6745f5df9406896d97ee3896e0addb13bb88c2a82fab5351863256b59ea72ad0e996f7066e5445b2d02665b96e2afb22e6105abd143ab04e262a02d94566bc4d39148c9a40024ad45c4f3f020e4e8e3a19c1ee5fb6374fc22fb54e6106cc778c101d5204213fc4d2eb91563788d9ba62f1514a3b6a53e74afaccf2411458afab67d90b2d41cff4d3946ac43e0f9e861d6a5b43935379d32ff49b3030452bb490c692824ba6579d122a7a78f39df24078b86d65c04ae03a4e24b9a2f167dbeb3d37cb7ef06cd061b5d016dcb457ba2300d644c8da3e94a2e81c0a961b6fdea41907343aa9938ef921be8c5f70615c97a1cbc881f7177853919046c1c592e81445dce27bb2794057aa4c8a8380aa4dfc563e91d90843f7df4a5cfa9e280d1355b6418275f6b38c2bc3def2ed30a478dd47afecd9798df6111c45d8a78c28633adc3670164aade5136daca050bd71cb492f9ecae14d6d6844f9106961bd0f85285119539560e4ab57961414cb0afadb15191b83d8663cacae897b930312bd611eb47c00ead5220438adb5d8e9a3b64366999d18aa1c7bb1462242034eb401df90fa08d188dc30434360a703313776970334c3d1c0fbfbc61881d2896dfea5bda2d35bebb2ccdc11e19649d09c8e15bc66d1aefedb4a1484e1c38c31300db2a20540a007470919b3ddeddfcc63e43b6f462b42389bc14ae0a07d3c90163b5483cef433dd00d49715abe25c8c29459190b9f0a662d5fe72f24a291f865b1f82e5eaea0f4925fe949b9244f4ae0e30abf811a25f88362dcf61a1908dae7e76878bc3994394111f300e4ca770100d4484ec8cefa8b7aa91e09cd51487c2fcf263d90cd0c1ffbed346d5ef94ea69d910c2a8a258a1490d61d5f6b97e65af6b551b779655d4c795ef9caec5e8925324a13d38daee066e3746dbd3c0512793d1ae56426a081cc847a8dcaa33911a45ca936a6c8b9e5d41fc9f10310bee2f3d35907071d15f8d92eb88b1c3015e0a843712b4bdc4f306052500612391fa85e3de14391feb78da25c0330ee424a533aca815f0394a1fb8d67791d61688a73137df2aa4cb013d0fb804a7911896b4aee9eacb5352516ac9409f0ce821e47fedb03867715a41188883bb6fb082fdf49de2a0c80a3480fd35699f02ac00f0aa88dd45e2c8156664815c58e3dcb567a28e9c5b20baf64cb7ce3214c40d19db18a2edf1b7c2650502572d5877bb4882e62e574f2759269d9f00d4ababa1e7ebbe2eed3899d07269d1b290042711f32a65882553a9b1548b7d10f79d491f53b0be263a221ca0b7cec901a19dd889df8f1c31e8bfc4621e7842c3ed72e8f94f7c073229db01155ef0aa0e8b6d8f46a6c4b05309270e3d281097c6cc45c20121cc80cca305cb902e2223b2bfc84235d2271c53bf0adc086d5118c1dec6fba7d1cf019f970e7d9ffd2aec7ab276f5c8aa1d344865810356992de303e135576fb9b6d4337aa34ec80d7b9178584510e06eee7f3abba3672ad2f91b60186004d8f08caaa3fe890f985bc333927efb7c2843ece37cfc91afa650b20cd3800b21192fca205faab6bf59407a6b65ee8ae12f97cc551b878994ecd6e14ddd9a4f09382f3b1d606ba67e02c8be39b0b6e6ed2d9c61367fe3e5c6c102616bf44e66acb0ceeb9e4028d4888a57c7e7dc12e58c487571b244d3a50074610e7341c8785b1c45f3f86e5f1b5de192c0ac534c20c8ae0c5631dc8abfa9a860978e35729950b2349d329ce94283f428b773eb2b9ffaeee2136ad105de055476f4eb19df2735a6d6b5963ad43a58720f5f17ccb0021caea90b5f1cf47e15ee45e3b121b342d89c4a44e4ac3cbadac81490c3bc027c2c9c227a9aa68f8646cefb7889366fb70fe4f92d202b1385e51531b9716a86dfdd081cef3068fc8bc32777c7e07cc4c14a944468366d9c61035575dec4deb0d925500dbeaa6139ebbeb6b51eb60aae5fdf14223dc999084c6d541b5daa2dbd980b81b2a599b7ed8cca1a300694b00165e127754c777c14cc5c1c96e58e096d5f3099e11d8cfd46a406e2c1d18c8b3f1ca70bc5ec915b008f8106551985fa930247a2e4e87ac598a62506b3c8716f1e069feb2e029196c496ec789a05f9d5b7534395a5a1ac3c21f7956e2781d15d10a2c18a3ac24a93c631b5f9a38b55496eab657908fc2fa36d8ba036a92b2df6b32de7e3a108f52d4abfd30b73730840f467b6d580638d806f661daa0c8ba7e15e2e81507330eabd29eace6944ccac6ea2fd09182326acb83abf470cb377e3d039692a598b3e85d44cf736b540af579c716f31fecc85ac1ac7530cafb7c134fdb4c087c969ba2aedeeff83430b40d2359ffd0b3272aa5f837c254c6f0914e8ffb0cc3b8129829fff6c826b2d09f2123521b38409814103c91cd3c4309fcbfc06a5ebb5fb653a14b8f054217741d835ec6009c7bba7b19507a5e056fefc9e3eebfb76d7bceaf2000cf12aff849b3689868d2dddf5ad99fb6bfc083db581dd5a4b91bfd07eebc631f2a6dec6345d995b8e0fe14f9e6b098011d0aeb21648da244fcce6d0f983f4aa0b9866e02ebcdfc248fab23c9200d2c639816cfc4731cc2021681a99c7e967e149ec9dc65a96b57bd9188180704182b1fbc209dc6e38b5947fcb33e8caa37a6cdaf6d5876c434314bfe1c49cd7f224c4a453e5d2a990f8fd1aeb0edde7a5b482b42569a2fbb6b25e82b52cb3af027954b63f842884942408c05cfc2f5ee87d907aed89213104b19ba2fd8e56e73f20bebc27b782c7d0a3084c2a49b3e5e847b4fedbc1f92c89b65f7982d80ef917c3f91cf7ffe2ef6f870236d64f89735be4470652b28cc273803a4ba604943cede5f42290bf2614ff98112d91c1aeb83bb994885c5c28eff81a76d960948a1568252c76b061fb5d92e39d1e7d24f393c734adc588efb891796803c285936608b4e3989841e5bf56c72acea28a954a5a2f818ea735e82ec73337749e3827c07f0272e54d3045dcd78ebcd8df5bf29326bf283230e7ff19f5299c4e5a46889771aad91439d71d3c60ef86ddbf37596df97dad26b7620c29935b8e8933ea3a839b939e8ca763eb1c93371db06618fa40c296483e9c1979919148ca474868b2a66e32a402d4990d354f7f49d111a76f1f04ae543e8816e2049fe21aafd1199826ab1eeed23609870c992e6d844792416556a54965e44f876394866e46ddbe22db3ad2aa996164c2db3d8f574bd09cf51e3c2b32563c4386b3888c6d2fbe097feda9765902c68a21932ade1121e230c0c87df6d8fbb070548a085d3daa286ad5d3caf524a43545d01e7a796622f14590d7df97c43b95377ad939e0cc1cca71625dfd548e1ce5fb9d90a44f125c55950337c2b6a8af13a2c4fa7087b18de4b2161bf143537b85ce4662885a1c2b81193df424e95045726e749132bba12c5a397b66f8cae0470a066dbf5975b1f23cd1b4da71fa670d87e4dcac7dc39ee64e50d2d8ec71a1ec9b3102d560a8d2fbcb81605eaeeeed4c9870a25c4a6018f3785ae09035252565eb4ea6a2b439d2200f954f183cf815c768bb5c9aa479cf06458f3125974dbc2a6759c9cfeb77bcd2eca32dab77c816ae84c3e8dcf871caaabf2c67c879c90823ca298f7f1ec4197a98537204b2bd6a109bd76fc013c8d8f657cdabf3d7fbcec4c4e0dd685e912c006eb97cb5b2b15ea3eff87dc35f3e7e3abfb24e4a0dd492924142f006906a6b9df66de5cf691f7e3c921e4830910bfa8366c4ad4adc06feb446f742de41ecacac296ea46df7c012dc55149a1e206325e67b44eb828bd37a76b25343edfbf3567d4bec2cb22c0a1816ec7e0b3580bdc7fa733d8ec3ad8c694ec5a40654fd223a4c4f7444ca7735a50d7cfe2f0b86f16cdc202ebecbae6ae820abaa810864c9803be77f5dfdd2dce9e2a3b88638392aaf38e815f95fa59b1156212427502efd0c00b8e9c44a97594195bd6da95552b145141d4294ff4721085b11bad02bb2e316e57dbe6d7c3d276dc37e7882b5e997cf57e3645b38006d7d52e94c6c09532c285ed93b0b8b08429099d72ba4e837d8acf58d89aad8cfc66f412e0e37d3f50d52486e2ba4294d11fc5256d57133cd3b940fceaf1fa787f30c188198fc803cc0a45001bbc9235b324a5e6514353e8ab8e83140bca4ecff66afe2b1e41a79e897c09a887c7864d229a5b773de41cdb05ae701cc145d892d6fca9ab1d67a2171cfc063468af1a3fffcd0312bbbc97713da6fcb752e95488af854121ba363ae92b30cb0af138fba8edd586ae2b4e20cdb6db9e52d9e3a272114e9968102ddd413855bc2ddca0a655824fce0b9a60c6bd24e029f98b0a4b5674ea6e7ce734dd9c67b2d471fb4a12d20d9c238ba1ef8426a6a35882211eca346c2dc0f1c387d0e8003ec6e89b81f944a643d3d56f3daf19adadca257ee097a28d3031dec4712f219624150a9943ef3a0ab017d5ab2ee55494f8404ab04a32531ee8d403656420a89074b628d179901d54411eb152022292ead888e32c83332f636a09806d850cde5fd046007157b35260a25de2009c0df6cd56dc919ec587125a2fa006c3f1f2d8c7e550860ef18865d9501c86133c20a00e3d30c09f02595b48e105a52b6085c7452b2d821c5e338d4b815487b55a5826505588ac7e3e3b4936217c2728891b90705df92b2cb83722461c6207f5683fb1a084987488e80d79541d58c6d6a9e36009f660df8b06f0d1fe58f610c71019a34ab8340bb527d87d786d7754e188348a14d27ec0867292444d57b77a7fe6f448aeb429145319f2f6e6a60190c423b967a938d65f0a93eb2a570db9d55d44238d6bcd90d2f5bda69bad9598553a3d8a20ae225dcf212b85b15734966951322ac3c9f31af7e0857952efcb5a85a671e5807ebbd22cf606b30f980c65b0290176e29d2e60897c015a86b6a2f48bea061962ed70c5e7119e38afe54e3058dc006c3c2f2eaa71c34d6709fe5cc29a6b268108e393f343d11ad60cd28ec6ed8ea5d43831fbbf543b3fe9a80195a814ab61896f14d2e6d40f638ada787d7b7922a9c2b6bb1e07f0119cbadbed10d68f59fed89233a94299c766066e83e983fc6db64758331a26f1acb2c3760867e5332f89b969d49223383708b8dbfb6c2a00db3c3ad5b6f15613bdefa7d68f5773667d12006e497fa7fae069bcb559d4b7829b9bcfa8ad2808a453025955c04e1ced46b3e20182e3221761b629704abf9fc662a8c9aa9377ec94b5fe1763d89b2aa21d6c6bebe5f56ab2f6ecd1612e699fe71066e920f0a00407f62ac9162f13ab9aa0ddd868a8104e50ccef4126693d8a01681d8045733a4e2c9521a30f2ab37c181a454085d13b7e11af43452305a28106cf93673652e9ed584a321ffe9c055a5fca3b8fe6d19176f0d3243f71bb29eacf947631c8e3ab84c40714b79ad22c0c94c79d5da5cf0d9ab4e92ca631fc45048c5097f01d14f93c206a69636452af5aaafea353a2d7505331e655a3ba82b29671dc3ce06125030e64989bb76bb085842b276b454ab06a6ef0952d353d2424407e1c105bdf594109902c29cc257c9b5aa64065b09deab26f4e30a359bf503f6b8d4ab4c97cd512155672f663d7b6522a2c5b54286143414d690f9cc5e39a7462a9befc6cc90805f0df7c0d3c4f32a60e8443e77e5d4d896c7135d37b56c3fa48868371aa44d16ac6d1a198965f465c0a75cc8436561fb03da315e2dc41832072641f4011513ca2c02a2181c672c33a0af730f6bc6a0bfd47ea32f22b8c5915e6d1c381365262c77cb1bf3de41c9a832924ebb686ed22c17d69b8b222b2a121dcbab6387ffbaaed09bf0b759ae627467ba3de174005d462872da90af0548c7a54887e364612cdb7058dcb1f15e1938bff73a6db585d1a385ffe04285542d48ab0d023ceaf3a3acf9ba565658d9cd6af98f944c8540d6172f6d5b604085abe35f8125283affdfd011965036b698bf9cf58731b8bce7b4c36a7bab888c10fbc34676f85d11fb53b42f3c98c208b02b60a80b6fc4a2a5140949a40f0c302d8ff530c53600c141615989f1e97c620f9981d756d8d167e917fdfe1b6563c71b40c24d2b555cca57f521b47c0e93619719450946024a6891fb4c192c875656cf4ba05e5a5b41145697d5830a207ff582015a05597970d62e29d5cceec1374fcf0a4f1df6cb3749e2c1211f76331c60673ec15dfaabca61617dcb847c8736969d56e47d0164edd655ffaf15be37d9b4c99f52efa31ddbea8c32c805079691256f6dd3c3ba24b38a2603ff44bec03b78edf36a29c0d38a4e0badbd30f823f686a1e84ae8a340f874d8a71c738ac8884c41c657c8b0f0ab2c67a59f13585f28e642a0d6f19b1ac4dda8aec4853c071812d844aa44696e94309b2271cc296c5b1c24d5c320a972bc4fff557d623e3fa2d03830f1d82ddb338f57f0e2f8c8b7a21a85f533f98f58be1fb214b495347a09bb8462907cf4b4751c5e1a040f03dc1f88a291237c50741c2066c43059bc620771e1f568a6c20b1dc0b660199ea721854bf1c8be5bce0802843c4f4f161479b44b4ea8cbac36544daf95a558165048b4fb782aafefc409dfe014038f6cf10dd6dd06a38194bab566de98069ab3532b24bcc082d6351d3efaf464990885e088c3afd5704c00117a2832c75881a3f390c80d76a415966710f563364c4b993262bc8fcf55cb6ecfea51c915814359de06aa549e58bea85a2784f0a82341f0958701672d47727839b6aba7789607824a145f5bd891abdedf50f2fbbf59588c81d1d31bacd647766f7fc5cf8d980fd14d6ecc583c083a08d9c81f0fe117cd049d68501800f3e2fec5dc4c79a906800ca9cdd432be720cc4cdf06cec98c31932a7f3e6058b4c9500b44ac9a7f3c89d23d405c0277c65e67802b6ac8e5e28fcadd60a80034901d959faa3491c5bfaf5a3b4f8fe98ab474f91b428737b7b296cf7aae76aef4a7cc4b8d0a5b881f9dde49e0cb738b4d0319c5c1a337c1b6168de562aa9f9c7c355ace4b0e777ece05640587462f0b52f850c59b3991bcdfb712e10d41129ee2088460d0c1b7e76207d70fb04c11991cd1977d67d6cc2f85fecf61025648c5944b0d7632973e0960128857d1d31091d04c174f5bb1e3f67fc0a020f61d0650195be30c59846ed8486dea8a93130c15dd50c0c03a4869b58aa2aac805401ba19ec009b234b0d5142866b0bd6427c004f88d7b75b74f20b1fd81430493419632adbd415c0a282f26615914ccddc19347b9e4e6e2e5cdc768b16375d854b1822fdc14df2bf6e69e21140b95c05d1f7a71d32a8e198f08420d886f36337fd4fb5f48f2fb1998f501e24ba86e0d05572c3b511c590f91fdd3de03e24e8dcbc31aac331d72e6aa8b7de7c7744dcdbf75dc4875011a2ef98e83f014f8eee821cda03ceaf121896f70911085446af206315a16a65a5f57d75a60eb4f840f7145292de5792aee82303b915fe959c210c545eefaa0775f04c6c7778acc1eb7dc8df069f80683d941de8cdb166ee3f4ddc36963c2c0becd218b20d1e624d8d45e7e8d760b7c57d0fda2ed83a26d76f6a5fd241ad1ab598a5c6f9d3c19267467cecddee58617e36487cb454ee3ecb5a75470bca5a24f9dc68804b1780bfda2cb3021ad8979c74632e1927988e28aa57f135db8c7e3b70b1746e2d49919d12f1435d297e883c5ff5bbc7252aa140d3ecfe22427d848152ac1bbe2539081a1d47683554a8619807875439db2df455813cebb73e20cbc6f6dc3de6a1938f77e07d2dcf1f1aace9f3c08be4e04f6e2bc1359ca10692ef0814eeee0166df2a9185b9e243d4cdd28920d73c6c4733f2ad87650d9a0f3ab475636e9904515e6a1cb969fcf2c5014982aae3081a938841ba92adcb82b60712480f3e8a295dde9dee3b757c347d3f9824b1f1e90eeaa5295e7922a89c09211ee35abae1d47cd96ca0cd97dedbcb28505af4b245b58dd5bd74154a82a4f9d0a316effbf8056a660e74bef3f0d140dd3d1de03a2f88378e508de3c79ef28de8eb5184cf7b30e49666416d9c4a7a64eda7cd5bdfce1fd968d6803446587118722815ca7f28b0b17ee566e24ffaaed181a738cb1151ecc314d6005c1f8b6c113311d96a7c3ba42e12cde68472a79a281b8a76480a709849746a138a6f39887ee298fec8ab1883b5ba97ff02f5786275d7628b7eb829e3fc9aff95d13595e98dab720172314470e21dc74c42ddab005e192dbd1e285fe8e644ade4854459cd733a39715c64c950f4045a9da822feb325b73d1dc09c8df6d16dfd5f2f49afe57d0bb707fb83a94a14463fd4097b2b1e5969288780ab49c0c7387f1a09d308ec89aa559be3fcc3fdc499c3a71707aeeff4f05e76374f9b24dddee79d38f8ce43d2d3cb8563208853d4d30af01e63240d48fa15b803337f81df6392929e26d62fcd33260b8d3fd691e7b6c30713204b5990abca332e8cf6983ffc6c087f64ddf48678e76ce71219fb345785f44f07c24c4e883950410a41bcc18aa248361b7f0f0195ecf2f22d4060f7e63888fc6aaa4e8e2e9c66fe0d48ff341cfc6413ca2d1444a3a011054434c9da5ba18cda63489ec91122ef309ba71c5e839218fe2e7bf72936f6034575de98af0f93a5e02225d0467b37eb0ca267d2f0cb28da084c3542f1ceedb2b72ec4f4499832800e94092783cefeff3713e5ae0f8f455f7ee918546be606b9e7ff310cc573aa207a7a1d44ff0534c6b63cdd73e6e0088a8d4b65d7f402c58958ff0290ee008411e4113558c2e9b54a339e9a1b06b0c9206267bef0bcc5956704dc4a2fd84c4e4634666e7c433d338c3dfcfc0312c49c97c9d8e265b8fe365d907b14eef19f7e7f4a937f26d2c72671701a8bcd137fb371915d3e61ae5193ecd9ab9740c8fc37fee9e439b5dc1d048a141b9f5a30d0b24a07aafd59071c113ca91379e364c3ca3c181ddb3770e633b0460f7dc0637b35b9c861872c8bf6e974520caf41708ddb743ce7e3a9928fd917ca765b2caa81b933b3bee57dbe018618b899585ab2b7dc5b4a29654a5206280ab30988093f431812b866c8f4a383c6f473c34502cf0c997e803032c2b02144981ef0c0e2cd6a61c0d0b25ed270a06148378c16d72a6561a2a8475898262e5de129c886418136570823a886e1c146aec003211a66c98c8bd134db10c3a6c7b8b2c21858246e430b8eed5a818c9f66411bdb58d25610e3a70da50ceb540da458428d2d5823e38c259c94e099e19625746069b00496a3255ed046942d5c7c586a221b438a9b026aa4d3e7a473ce7609a5962b5d013dc0990bfccdf9d67574feb1ed79c3ddb285dd0dbfa6a83df853da9b45d95186a8269803b99812f28d91c91756da33fb74ec2faeed1684d73db3b2db1d83164aefee6455bd3bed9ed2ddddbb55eeee5172dd1aaa7ba6089b3b29ba9cb45a2cbbd9d5320db3bea18cc01f4d51ee982a731465f8114a0da5940d5d990d65334b58e0f8aea92c969919269392a9199fa169ad2667443fb3a1c7d9d19086b321990d750bd6d86443cec2d990bbe02b23d2360d950d654343a8292e8cddd6dd55f17df28ddfdc378372ec64c4b2bb3b221366778f2d821b3fa841eee3982c25e5cfaa6e70a4378d5f2a5f80fe8a4876e7a4b46a90fbe0cf39e7f4e95826bfe8c20958b0ec2f85d9496eca6957d327f775f6e9390bcece6eb0b1ba53f71d5a8400060198dc6481e34f2b83200093761a45b4744a29ab941ab59232a133c0f1311bc5bb4102cf18639c1b0afb2c4b3c95bebb5b004217921feff28404266196003f28fa378c0b71be9a9fdcafedc81812cc9950b6f95a2ca3d9d5264ef5283fa8c1be00c7b79cce4e14cff3a6a70f72768302a17c37ed6e2889ba311a2ac66c43e802648e738bb13a413a6e4d86d997dcd993b3e49d35dc04b8cc4bf684025cb28282963da95418c3ec899b00d7340cfe64c810e6cc9f353f198270c598738d27370c2030292b5ac246e08924da482305427ca942afd8204de78b4b39fe17b3e4f8452d397e6c0388c8e58b4e39c627dc4efaa781d89841be7f55525adb43d9ca6cbb3992f8c9194693b1295e181b4bb6807942c5455291eb1a3cc8f5eb16a4526b658d281362212465a7861a354d7e620f659f1b311558f9c484855558a161071d64d1022b90d042e58916c82007a41fd848e2091114b4097f3afe8ad916c4a31a54f890351823075902553582c8fdf65f9062043318c11058aca8a2027dd103a6a3233d889469301dc092e1050e42315a08240d2272bfb44ee098065096597e5b29c5c0214b209e66e57ef8e506314f5a11d748962adc7d3001486606d21ea4943ea5dd37e9d7b7b45287914a9c51fa8107d395a0a0e162196ef912446db09502384ca1031812ec508516af19bc90411629b0428b21965e2dd740c2aa80a0ea2430ac625fb15a8b6aadfe850f5ca40f4e36b20820c058a1820c25630c31619102e8062d9674f0eaeec6ca1dec834f402e46bc8051bd3746b6196ef1d245fe74302eaead95bad70aa9972ba5534a29e5cf39e59c73be9c73ce6eefd8dd53bafc1b87fa65773108c6f9b6fbbabb93d8f8d3dd479c055f4628af961be3b9cb1e491285e210565988c51c027af3ad578bb8411c82e995406f7ead9586359484a1301c81ac0a277caaf08a9230577684ee4e51b6330273e6432ef2fc6882cc1181acf9315c90261ec89abf41a579a4713a90359378b887acf918372711f97f01b864bf68e24161cb13121a46f0204495265ead061b5a3471f4031035ac4003c20a450306386cc8aae251a141464ce55129f1bae46956187801b242985535b9972db99fa749f55e96fce95c19c058a5747abd588119619ae1162f53b48199a89d9723da16c75cbd14d918338f0b432f44b6a3c1d8162f3ef4e327bc04a101267f5ef5a21fe260f065dd55ed670febdfcb59cc05e6549f83cb793a3a58ddf0badc76c41048af2bb5cbedf070e18410e9027f2aa5ec9c94010e4faf6baf1823054d2f18f1021f89e10be792fc38f95f2d48080cfcfd9605121647af5bb5cb41a5254daf6bb5cbc135ce387a5d4cbb1cb4e286a3d7cd5e3046c6ad885e977391e0064bafab6997835148b1f4ba345ac6add6785d2eb2a08d21bebc2e4abb1c6b8d1d9c5ed766886807387e2c72d691b3fcbd3070bc32dae5a0153042af9bd22e07b558c1d3ebe690010f529c5e9746bb9cdce207a1d7bdd132eea6e975b98805501645af6b43c5d0d1ebde607a7a5d95763928850e4daf2a3d487add1cdae5e01430207a5d0e76b1bdebe4a4d5629d5d6d43c560582635435363d3dd50e1c0b2ebba1c373a767cf09c0e6abecf2be37c5e3304d5cf38fb52fedd7aa292b3bcc8fddaf5c424676d2dc057be02f7cbe7f1cbc157c6c117a517a0dfc1f882b6636c2883fa3e9067279f66698fb810e7834f79fed581b06298f52cd699d8d582219f7b3e7c6a1fa26c77776f1921841042e850e8bce0cb5f52a54177d1d708b1631717b254803485910ece48e24a0c3f2940a2082b2bb08117f856a606337e00526209134d46d2000207386c21e50b2b314db9ff4af8fdfe235481e343d9e1eeb30d24b7fb47ed05141f7e0b11733c01ab20eaa1e4e7891c334d5a72c38f65c056dc027afd3e2394bfd8b4012436cb97d93680e40ce8c11f025bfd94a2b179f835310f5f08fc81e26054d24be09d41324a376b2d0fb607ec49164477370dcb68d9633434f6697bda86c8fd1b11fc419f686ea5351812549090b6286951d2a2e5c63dc2a8a8888a232b4756ace0d88a9e0c0da560c868c82828f7c7440192129bd8d034318941fe380bdbccf410249b4821f8e38bbb667e9c35e3c45d3333f2c79f38f89a99c152948b022405f535d8d78cea35d3ddf81a745eaac731e350f086d15bef7ff1670e398b084ad186511c2aee06072101ea5f1a0e88e66bb0afb9c46c22c79f2a8025c4bf1fcc147139e7226d3829e472483e9150509c2c82399d3b39ab7fba0e60ce08f2e70ca323a0d75f3b7f22522acb715b105a3344aac34052a8b5c13a1378addaacb3688741b85c94d4532e4aaa7ec99dfa923a22f7a78ae08ffa65e5eda82288e0dce560301280b8e5e08c00804a02e5a2cc7cc63997f69ada9bf91aaee6fd0bf8e3045d40139c288ed05cc016f6fd256c41e897b0a92033e5a2d4bc0de758dab5b4d736353634bed425749ee4ee4e9b80a464df36df3547ee4a2165d6a62655e95109021821003ab8903b69578a05df30db7207d2e9b1715d836957ea3bfed2160454374c6b2f4bb1b305a13d46902d1785e61d4ae74bcd6a4f71407ed425b45fa1f6d677f7dab9c576b620dbef6c2ac82bd8f3b40fd4d64a29e7589c860bfa975f69afdddded96ddef2f6a0f0a669d50571c0b0a634330e789d57e6c41b0ffb1a920b3060490e21c4a1b1db5b775eeeeee5b13fc512db609a0090dcd67968653596711c19c0a04c816648b11c7776d41b6c733e3a2d83cf6928b12e4bd6c3ab79d67982fdd6ed51b151725f5917b1591eb8413b6205b8d9232e1563c859c276e44200005cc61b9265593f294731be762a4387ffa0226ca4c9454e74d3233ee4d351d9094d4f73b51c5339cc5369c2a85009e2008b82aa4b0a9e0b7a5590ecb256c2aecc8b49348424e52430e60240359f12d8703ea801864c5bf2bd419252d4b59cb8c162b494933475690b295192b538e8e66868c8c668c72b0eb5d823fba2cbf3e015d53e9ab58b2ac576459a7803faacb46a959f25b243c8eea86064e27d47f9a53dfe4cf46092743993991d0050f20b2e4d3a0240ea654fe7470a6a4e31af5a1932525a246d4a83d5977802a4d11f8b3517a31c159be4e15823972b544b3c85f615965a14646597e968c21711815cce64abb6892b33e6d287f38db2825b9ab3aa9425429cbd5d26ac9e64a7bd266a93d1a23f067a3b4e4aefaf343bbd02ed54ab764ad35a95b9d5dadc4521daa4fe45722f9b5487e35925fa738c9f26ba5120550965f95ea8caba56e7db44b52b7befa63a34493b2946fb3b45a924196d4a85bf7a85bd914f8036619b3f891a35f4e0801fe68972cbb5030edc52813632ac699186962ac89d1e6c626e4a951b7b02c4f3801960f89ba753f7bf9f5a702d520f803eb42bf74abbe7c0a66ce2c27bc007f51284e5ae94c6a4f52ba75d38a4d8cf26f32ee7bc01ce9c924f8c3e60acca9025b365740cf6652c9f2042784240e4b7e0e3481668923c897df0859caf7e00ff9f2a74e96684201e008f2a50959fe476d9025b5125300155808e6481b25a11476e41c5f7e7c364a3bf25c2dcdff813972b5e4473047ca2698235fc76573c53715b06ca3002ad84629cbaf4355a83ae956dc84c47639a98d563705c4745548be149a22b4745b8417c44d0341e6c7a42b11a8bda0f69a3411193fe09a0c999a3851a5e09b022c07446134d1a18b264c2c126b30e1504696040e606054602c43261c9a2680c3509d62ca46ca42954839d1d47972a3356b71134fcd82d68965c10925261c80300b48433228ca8ab4263895e1962956a8962948358d29474c2d5388aa169826c32d539ad81eb46185126628c1a50a25b6542c4ad0600b1340463747ca563a73a4b28fd26367a91c3b2b9d19cfdbefccea4609a91cd83e73202b024165daf5782f478edba669f766d816a563766b1c2fd72dc29c76c9be5a62bb16b955c31cf8a82c80fcad22cc818f65563eca48fad68aa16cd1b595ce28bbbbbb1d05610f6e687a72ceaead7bb4180a7311dbe5a4d56257b3da56371445c54ccfcb3ccfcb3c2f064b8841198883f3600e87438665a91c5d76f724fc31336b31662de638b80c48963159de84c93a0bbb4fbec5414a29656a26ce60349e943418168386e521a7d7230b20fbe44bed4acba8ec936ba49f7d628c34b85c0828ee5bf568d944f3b7d2b0c66c5b5bddddbd9f42d9519f2dbbdd93dede82b6bd286180e377734e668a905807a4c5360407448eeb2410a3a4f45dbec78ac11c9a716072335b102c155337543425835538668cc464704c9728c971d0e3f10059eba4f4dd699c2e69e0dfc6cc7210dbe5a4d562d9d536540c9ec9304b53a3d5a81e6228a137437040f68f96eb2490676c6e68b25b19f4501bc0e8cc1684a6523754342583635438660c6ac391236232197e8659e923cbf053391cc7ebd10d519b941c8f0768771bf22bdbad89818066be479ed6304ea1335663880e987a018c4f40aa00ead7018f00b5502c3879de20449e55bce60d5de47943187986008a3c1f3e65eb4d6f0059ca77174d50153000e10bfefea34b30383e65e9d2046645c228d95df072261bbac84c412dc8fed6b7178249c993c09fcd91a98626d96590dd7a196b64f7e8922ff7f8235120adec54fed55a6badb5d662bfa9603b2ff8f391edc7c7004d803ff62bfbf465aedcca7e9d526a4ef0cdec54225881650e17e25c58e79cf3ce9b4ed55e0f200c9fe6ee00e12f22f9519e7f8578bafacbeef301fae663efcfe31528d3b71ccc349872abd969cec12ce304df8860851482a65b59471a2976bab5657f203cef4fe7c316f6f127e58088d084ad5bdb7d700b09e4f93d81882ccb32f83c4d5f074ceeff30d0c3cbde17df52e89c3dc665d99b73ce39b3ee8360f2ecf9b6070433804c3b1dcf5d315d62ba783add8ae922e304f30089e992fd45b002c7ffb817604ebf8df40c6b69d56cb4d65adb946b2bad64ed5b6bada5d55a6badb5d47eb536de607fa75bd9dbf7a133dfc66c5571886ce30fd9be7d186c7d4b2db5d4525b6db5d556fbf776d35aab1138c69c71db90bedfd15a68f395d65a6beb3707b35bb7f6e1b642f6fe5966adb5d65afb70cb9ea79ba7b3566a2bedd9178109c76228a87f5d90eb7f9ee1bb6e538923d41388a8ef4130a7b657b9b457bf09e6d4a4b6d24af59b4a34a1ab4801732a955c3b09256306fe3ac9adc5a211579fa7330ff0a793ebf7eff8d0e95684b97e3c02fe901508ccac3566cb7d3eb93d66ecd6d2afbea9e0f4288938254a8123d487ed282c72f168530195bb8b4630a77eca08ecf98b462bd8ef5f0db17665dbab5f3fc926292dd5ef2cbe64839079caf26fca08dc5854f01cafc01cf9b7a83d28dddab2fca6027f58e9567ec2bd0586ed253595f6e48bd024631990253fa641a4a428cb872effeba32c9f608e7c823ffff8501eb98e38eb4b96f22942c95272c99f2aa7e0edc91f7735956649ef7eda4a96013002b7942fe1ab541847292394da01db2c06eef71bf843e624060801802b9e68e18220140471514510455bfcd08221c20409d103133f50d715602065d901961f1b9e7608e38c2f807e7e30430b2287e965075a86971a2c1865b4b5d60c34d4d0947c80c26dbf6d0c471b8a7009664123b70e5c8c1881173c84612555822430b2700aea620596f1250d2d43261a768035816493b0922a8b7734e7eca291bb13fb24c3ff706cf2524e39e59453d2f7bfd4299d4e61ed84b4075f7e96d24e7a37e7ecb7b63e66c3859ebbbc08f6560be6a212e3bb80c1301dfbed40586185153eb970ce39e79c93ca37d2269d61c968062c974e491f5e9982e4cd4aa7949d8c2f1f6c866eca2426c5768f48b7b287f2779ae844200fcc775189d145ba554654aae8a45df6098692a1d1ce938e13850fa312fc88f424943d1ab58d47332c111179349a01cb7d23ee8a3fbfb3a3a3033f7f933cbb0881de7c1511268257a644a248148994903e2fcf17e24c62b327dd21bad44a15e829f6fbbce45bfbf67d5e5973f4b54a0100b95ff3758988a014191d0141017ad2845547622022825264742406740ad29ab4960e7297b5479e62f81289e8bb10a60f730ea211f29c640abf2429d2aef8a24c4c9a64fa2c44a226db45a7d590dcddf7428e59daa336ccff6290104bf30f98fd7177f7e8203b36e0b6dd64ce208c48c9509e320ac1be769888bb562ed4b76f3b19acab5ef463107da1aa72967cede1e6027696d4ba1efbb7b3ce920feb639dbb543afe5e8f6e69d86d1684d8242884481f20526739398b5a67d112621667d1da0969167d0a4f50027f1109c95d94fe8d9076936ed12ceda23f5c9ac8d47bd18f4fdd824c4a8a32fdd8658d17fd08a65b90690911dda2c9f41ba85b90898627997e07b5908c5448085b60fadd44b16786a826c0a80c997ebe4801de6c90ed80250d9cc0988ada064e4dd902c764c8f453444604de32640ab10c99dc4a327d12a00bbe3a9a755887e2e0cb5a5bdf5aae7f347f4a3b5b23babb47f7983dbe3b0ee4842ff359558cafc5f841a210197efc201b19c21c132ec4895a6bc12f54c13843988b64af1694e0faf6a1b38e382b1201aa6ffd497bdd5e0741694f4505fe225364823f2074e12f3271d0055fedc9339878220234ca78c28ca7976cf94bd93fedc52af8460c0373e2fff818a92a98a6b5d70a62181060ac52f9773ee04fc5e3aa6e7ddaf5c7f192ccbfcdf9507b3e793edc26ce4db73eefbbbbf7c7d699d00c994840047fcc0c3f6e2d08e1990c994820821c5d072d5a928089bb190dcf600288317ac0848b28c678ddd982900e3898b56badb04aaf51437d49727f042346c8fcf6e8eede863bec633a082984908b7bf7e1d841009691e508b2bf7d18832c93c82161013c204bca9c06647f80ad1d0793a64fd6f20accda251ac87c61d3bd831ddcfbca121b35af03151bd57b4c3a1491653264d2c149fe749e54fb5f7c69399735088f8c9341c85dbe53b396fb7cab66b90ff2b59ae576641df9669ae56ef2bd9ae556f96a9ae572e4bb6996c3912f4ab39c2adf18cd7237f2c59ae56cf295d12c57936f4ab31c4dbe339ae552f9d2689693c9b746b31cced746b35c4cbe3734cba1f2556996dbf2c5a159cbdd7c579ae5b27c6fae0ecd7296abf97ea0598ee6fb9ae566be5ca759cef30541b35ce78ba3592ee6cb03874708f369f2f781ec9fa5addd8a761a50612687e081ec3c9d455369ed8c719e10066360de748debb6c24c96fff231066096ae07f461f7ea214618adec24b2164d25080a03735c90e1efd812447cd95f64ca6dbb38fd05ada0b0430b1cb91f707c4e07ae081cdf5b2e61ad7d4179b36f857dab95fdce5d8ef95bd56f45bf957c9bfc23af26175dc0c520b81e0e05980344c76baf73b8b3ce6a2453b7d5ceff604e20eded4058ebaba02a5be8b2b5beff95d576ab211b90997e4032ed90cc3c3b9e19cc5a39a19e73522b67cc3409d79949963f87ecd06287161242089d5209a1a49d0be00b1c1f6b4d4251aef42955a2b5e8cbf8d49e7c128a707cfa4edd2fe0b2b3b6d6252e7cb992f9d820f2efa7b0392bb917147c67f639a5d38c5744ec93e0ad2cb512f2855e31cc96300309ad84eefe045002254d009c30760e723a74128af02705f005fe64760fbecb1232129a65b783e3f10c7f8ffd5f9534c6dcd0a9ccb5a34134309391cc8f196e2bc8d85fc8600967a4b1c6d85acbd969f2028e59cd3505fea48604e6c4f7299ccaefefa00bde4fcb3047d39ecb10c0c09f46a361177c2924310c7b6c764864b65d56d4ad86c89fff499fccd395d2c7a4cc95925bc9f7c9f2bdf0e4f9cec1bf400c3af923a2936509193e09d10790a1cb4ffe0a4f1f194af92e3dbb84df8a487d1272cc52762c40de69692564e73ea929e1686dd733c3ab76f206d2d60cd32e845e8f46ff52a94324e330a6aad86b98ed4e5ca30b3f3e756b7eac4bf76353c99fccfd13b2c07de6c5fc02027f31097218420e42fff99934609824dba3dc69eb9dd65667cd99f5476b69f7b9672e3b69b1964aaeed160ed50d1b5b43339392c131a84dbb19662b9dd23be250e540451fef8d876bbb05215675775342d8c9d8d27140a34b7bf07d5cc1f163cf93184e5c9ab464c1b274450b1c1f2ac590ddd5e449905849a262c4494a7722538e8c6aa52cb4579dd22228444f869c0835913206c9e8e0da6ee5989e6f8e0c391c59956f509b5c932b37214b4a9b294d9ec929997cafe61cce31f9a250f9a234e7b67c6334e7b47cb1e6dccd59be335ab535d399ef0dcd3999af4a73cef3c5a1dddcb0a9c1b1ca81f24ec21cf992baf4eed97e039bd82e27ad16cbae868ac132a9199a1a9b1b2a1c39563a3ef8cff1bf0501c07f8e06a19b078e5f3d7c212c348942d149b7862e5184128b22fc78d4add4c38ff061cdc38f49ddb2a2d4ad1b0f3f5ee9d68e871f3cfc88a55bfff063966e710f3b105a380f793cfc2846b76e1e86f0f063976e790f3f0624ddb279f849baa57a98e3a18e871f81ba0500115846dcd5e30300b1ea3deca38be779dec78f9e0e0e009c2a470e50081c0ef474e8c8f11c0e04787037ff467038d507373080c0d1ec501de938ac8306031ca7dde0189eb32b0dc9079ccca123c90e0e424fc7e3d886c87cf350c74df7f5e41c1f7f95a3935b0a9d7174b6061cbd1b376e7c7c15a71a22f38d4ed2d42401c39011e8cda7e1f2a48683c0109969b817b440e9c1090980cc364466c9d3775858096986f311b30dc13b3a281f2cc8703db621d2d37a14b9de0b0fbdf9771b22a137e1c46e60b81c8d9d4770a553f64800742a286e1a780d603945cb75b0cc452a7522a57147d29748a5fdf95a517f17b0f7ce5f06fb9874c165e8f70ebf62f6ab2298bff5e62cceba5591efff768410396b66990b51b22e1e396bce67219a10f3fc38b4c33331cec2f93b7962a05bb3d69d76e968e24161be9076ad5ef389cc87c0bc79320941c9f38fc4d02ef99a5fa92c9af3e35177f32312ce511b22cfb95451b0d4c4848cfcd9cc242943265e3069ca344d4bb2e44fcbcd6449864d4b94f2970c9b962065f834c3a62566e42cc3a6254eb947865d052e05818c18b38f150382198431f091243108a39f510c740b66ece5c3aca53d1a9bdaa3bf9adfeff3aa8ffdfb8bf877d723657e8fb36af7a98adc1effdb61a882f69d15b1b4471fb6964c89bc001fa12d693b7536d37f8176334fb8b56a01be806c5c7216fd950b31fe519c7e4f342166fa51e9480cae421318bee4164cb8587ac15754410c92a0418ca2e6542d4397a6b5f38fb4ebe6280624dd825bd0e022d34ff2e30444c68b7e6cc234022aeef2177d5b675ca244997ecc62824c3f36d118f4b03ebc80075e30653ee490c5cca10adb7d052907166c570ce58084155f6a163b40c15902d30c997210a20c2eb2e0c8700bd215492bb89ce7c39313e32c8d4512ca504685d32aa944b4e4556e8cdd53f64d1678ca299d8b3b9d6fdb678e493fecd4857c287be74a429950262424bf9857ab212d9321a70d8110c2f68cb817fa43d8dd0608821de3d16d97f48f1dc631d2dd498cf7eceef6f6ee8fddd227950b713e9a96557b0865b52dddb61c43298530240c731aa2a40b61046a0fc69f1e08914cf9a52c7fd07a6708cf87317ac53718cb9f14b251ba9976f349f8a3b3fc242aedc53893a695183b2ad49efc88e8cf2e5d60a45f668644508ab49bcdfb3feea244cd922f6fe853b7be49254b2c44621865f95491e24acbaa49562859d6a32ceb46c5e8d687a3254b1317a76e7502b008594952bab2d4ad2d852bdd8aed922fc8d4044c966f93a55b3047a36ea1a620512a28eea63dca795b90b875ab082523ea568c4c4d96e2ecbe359ce27f6b3845a718bb6f8d272ae42e1f43315a2a07b8bdd59cb1a85bede24104815690e3c7a028149dc427317e8432f1517c8c241314e42e2336ca04e56804e6c4e7699d31f0879b9a70136ec24d5dc60d53b45c61023779d7f304f6078108c32d48005a803fdc9423e69952429749f249e20d117eb1ee5cffc81ce9b8e10715a83429806ab428c058699805980f3c28b4400549478cb183209400838312c5c8042be021c909ed882a5e5051d0b053a9f0e1061880b1c40d2d20830753d0500310461041e461a278e2268a2db05645951d5429831e591b20123b5f2485608835ae7892f26a26ba80d264072c4b50d18a6260b7c89d64abfc6082cd02d1d911220c26745005d374c2508d260df73044fb06ad89813d43a61e78c84c3de820b1a601d1d9893643a61e6e985cc015fd39a7acd80e102bb866c8d4c3121f5d60c619c6aac79121130f37c89fb7a483121674c5856a50d198e4a0360e0dd6349a0c9978a802872bad55a9fe839865ec250d8427490ffc11e688bb54377e49fe9e0d150ef00cf215380874f591b3fa51803fb05d80e7d8b92b3a75548a4a4a4ba22b165100aa4a8049903b86c0e63f08064dea3f98c67f51498f00b2fa6bbacfd2741f9ee99c52dd083ecfae8520ab7fc812e122d8bd9758a452618c83a31fa5842ccafab44c270d0664fcfb48a5c2b8934087bb0873e663aeb3447131c7708eda64d4a4fbed3e9b58ac3c1e90dd76b14a77f7a96994085e376a3362592603b161b7842e7785bbf417c16a48861d8439529ab0a45aa2cac060084c060a2209051419cc0516099f1cc09872458b089caa34b990c4145d6c1802727a42892a3fe02a478c9064b459b1832a387854d08b224a7086175c24f1050daf76628d337ce882872740bc5a8bc27477300207da40e206464446dc900602ca184223690a298a6cd08ca892c5afa87283183f23c9899a94f4c1093b40819283161a5851452d010d27e021cb111547b0c023c408ac071c3148238831d63801d3183050619a81173e80a94107d985154b5877370332c290008b1834018202082a9c20220637fc10c6ab8bd8626eb9c1a3a29ab55740d104e51a941e6457b820cc36a11043065160a184ca9657aae8071ccc600823946c81020b3c42623264e2210927f1081c1e8a6aac3dc3f010444e02a2b3c38393fce1001da1b487af383b19faef67f765f0c71ebe228d342606c7a03e7bf8f2796dd2b3d656aa93adb6a19484107941c9f35e67c7230284fd7d54d4501a0abe340e73f068f64442fabdd967dfa3d1c75d8b60def548a95d11fbddf5f4dbeff1c7dee7355f4d60ff869d0a3b2b62e1608e198bb2eb894451c859f45588792945507fff763d52eec7743df09d451fd5e17b71d723a5484c8f942fcaf62e44329680c1cf4b8619361d67d18dfb9921e665e071168de9a4cc47fdf69f0e0da8ae05255ab7aab7d3b4fb32682edcadc359b6fdd6f5f0ac6a27a533e22cfa7a12ea0c8b42435028a4a2b5c6bcc1567fad492fb8d8733860ceccc94f63d723a5c8763b17fcefc37be36b5dcf5d5125da15f11e1e7f67c1f779694f57947e8f77df4eee8a6c9bbfcf0bfec6bd8eb3a60ae6cc7f4df177041c609861fe60128fbb54164f156b7238dbfc8a717a71af6b71d519b7ea6ec580ecb12f9261d8dfae072291d9fbbcba2da5ddfd33641a291769ed7ef9dd9cfcf99483af1eedc5da92873bc3f5482962f3a9ae27f536df33f3379e471898feed915224478eefb9f1abbf2bcee79583f39149ab1a9a974450bac52337b7e2e69090b35a36ed70d707d6ce9f242277a9be7f06b90bc737f632c95d37df2f95dca5e3fb616689007dd0ede8207ce9e8a0b36e3a2c57385ef51c7c5dc9c18c1ada1e255788797f15625e7a9479b8cd8df3c99343d25c32ea25f719c9a8e771ccb595299d34e76bdaa6697286f837fefb7cd93c3ee7fbcbc9dd39eff374e45c7bc9cd77eefe0d0ebe6c38f8f23e9c6b381a4974824ce4ae1954a4fa51f924fabc1f6775d3d22ca369867bb1000f35519e59f99cd2adaf89dce7d14fbb20154941dd6ad23f85da75e3d53f87fae793fe09a55ba9dc3f8d9062110f4d5a36cd9fd94da74e7269af7bd994fb2bca07778c13b77e4eb6ee92418a7d19fa671ec64ffd4a06f54664645c108b261f3bf481d04781be10fa44e81779813e0c32a8aa7a276240229d134c3ff7d8f26dede5fbbc5052763d52eaf7c8ed6b578446c3306ecb70cbe4b661d8f3788fa869d109bff697fb7cae8c4cb75a61beccab305fe67d32ea37eec379c35fb9af27b787fadb1ae6621e6e98f3c9b58b398823688fe2be382586ac691cf697cb3a6c5b31a07fe68bf4cf74b62b123fd54167c1980c71a8d674c95d0de9562bc8f50f3a3e3056bd7777daebf7a123ab70b7ed5239cb1fe6f9306695bbacb74a257bb41775acb0b2ed39b723e33158f02fe20f017f189cfe6a057b81fab65bf9c32b2c1481000c95e3e976da8357fcbdbb5db0a9c80bfe1068d78d973f0cfe47da8563f047d2ad54f64f02d43232eda0c4c3e4e407c80a3eda8bff4126d2ad6eb5c202e4cf4ec889bce91d40ba155b2b98e3a344a07a4fbe8e7c106e968fe3f5e8ee24874a09f09ffef33d0ef1efd15eec56f486f8afc6c09f55f25fbe275f47c62cb514fa912e81daebee9ff65a369141edf58b000648285505cf784b770f5c7935297d5e18e7f35acd38e71124f293c88f3ff22390fcd8447e14921f9dcc489d80a4480979384b2671964ce271d7f6a8974f44a640837cf931b8cb5f7e1277dd8f5fa413112054f7baae6940d9dfd790b83824a594f26595564ef9f2499010a394cea7b47f5aa8ea308f7255f5ca63b616e04b6e2d2401a2417b1ab6ef0dfb1919a170c1dc8274ec2d081693e17cd43b00ff8ac8fc550bf0b572e1791025a1f4f3828e5fa683f8e7bb8065a40ba9c79fea56fef0957adce157e9ece88cd084bf48845f44b895ec84bcaa12ede86b4fc3fc8dc7169cfd85af18ce88b3eaa3eabf5880511ff391e89d6875b148b9a3a9c8e808898a15a52b35e6fa314bfdebb2c85d1582c94445b952c1d3a89b45edd5fa2280c1fedf8482ea56f25142dafced65a0afbd0bdba31ed5c9306bccd7cbc306d8cb3a9cf69cf4684ffe179d40df5a10c21f5b10ea9f7d972e8e3649bae5935d3ecc810a6a38c1901433bc38497d61c6186c7c51224b1aaf7ec9e1fe9d0524692f7ebfd7afd3bfd36a54fb9eb3eafbbc28b7b2dd068accf7df400b1b6801beb0b3ea6ba005f8a2ef5d4f8fca59f5ad8e27fde18bbecf6b723eaf0b5bc6aeb278c56699ed76714250aee4ba7ad58f474ab97e9c523f526141aea95c3f5ae9166cc20229d78f4bf533ccc2262c8c3211b9be919d13ec740b3665f145e6912b91b3ea03c52367b1eaf3740a40f8835fead70faa9f020df88b4359e250248a452fb8cbbfbe1177c9af7f0448c6a69f0b9d52982d0834c01fce5446263ab9eb48b3a8c552b0fc24a71672167d2bc4e3941eb141027f7d94e9fca32a474747b15ba88710caf4e31177adeca36c11edbb1e29b62bb23daaebc11dfc9e980ebaf63eaf5713f8b78f7914075f325af01198437f03325b8aa1e8c7d087714a7bf49da213fc0106747da548a8a44c1875410a11a21900000002005315000020140a07044281402c1ae7a136fc14000e779e48705e198bc324c75114a4904106006208210010424066aa682b004090d540c6c1e9c58fbce461d08c8735403176c1a7a136ea1b7addbda838177c7de4d4ca7cf827811e3ec6dc5992db8ae7fd93260eb304bc631aa053984ef0d0dd3672647a999e125911d850b657a0614f88aed307c056a73f3c5e5aed5f2e81111a03103700fabc80c205a8e6e1677a44c7d6102fc83380b40f9190e76eb1d9c2d994ae5b0a4df7777f429702fd60ac801ff070717ad66252acfcb35b8ec3cc4378e1758c13fdd8cf812bc786307feb484ae269a1d5c7fc5ba1d979701ae2656fb24e3c8cc9ddc53801bc855f7e4015274f95874c794f8e90d3e3dbca4235e5140346b0658b87e92e6b5a4246cb289c8e407ef01c8be0f0891a4c551c98b5de7efb1ca72869679998c34d4cd414fd6ec0415d253141e48ad85588a40bba92b4edca69421c2229f66003392e8613999cb468b111821263f61d3e03dd4820f9af425a38c7edbbc2cd14955ac285f9f26ed993d03b8d0c834f70a132767549eca3a6fc53d04c615703632ed79509e36b1e7b232242ac6ec52f0b863981e8a6d06fd2f71f991599d9fd77bc9e6fff2dd0648689ebe0a138012fa8e987a182e5ee292277e008476050db78f9d6d5561228556a07577d7dfe725e3361a17f203cb9c44a090eab7775aa5dd0fce4c81de5a14e6850f93176981e51597df3727d707d586d10e02918dec11cf4daf4059cda8bf504066a2a23a7ca8f0b3b5b0a96e433409aa57456fbe00c570fbdbf2057a93449ed8310602d54c9fcf9ea2d7c7b21d0c012f68aa22aa63481604a1e260f2beed25e0564c19db6f42424267fc9d536e63e7f0389747768e23b69da5f0423d61cd5e8fadde7d97cd1b2cc0562434c8d14286da59e46e9476ed47befdb0b712a7a5907bad223d0657ee032d4a75cda373a5d2d6604526d47baeced1c8bd3da45cc6060d19c2d13bf4e3b93dd920d643e975c327b899ee82702f0ec718a4040d9ee700de96596b9b8890f39a6751e7bab4136098ad0ec9ade53036a30e260c58f85042054231f941f15322418126e0de2c95d086d4ac1aba300948e65e48bf4e8f5ad8f08dcf7eba1e0c2fae6d04de7dc61b6bb643ccc89a38a1a38ec085bae110eb24fe86ee0f4873c065aceef12396a84ee14b1017cb0396d4a6c587538e0f79335cd5fcc08c5bf8b007778e41d6be9aece92b2929710c7a4ded328e211cefbad027a1e2f58359c8d3233ee0c2f3341b02dca24e7fba483d9f8f4b5107ac5de1e250c177450890f75f18b773a746b2a23e7e806b90889826909b3785f5df5039be6a2d2813c6cb86180ad2be887d87a04aba9fb5a206fb6791dda894a673ddf41e2b32c247fc363532fef1117bb53c80cc8a23283c9e2f1da5e9327a65af42fc06343a85aa2fc1a7546c9c975c94a21c3ef0709cbe6e92a69f2b866fe53c8c374bbfc74e387976be2d26a0849c00a3c4f7690420de5fec1f996cb252c750664c6b5f0926a878835df9cfa7be1b8681e048c9e8b019617e267e0a95b5b36f05c5aadd01a63ef1a74b2605a9fd33dcb82b95291c7c7fbb388e12314ba55482c97779235650471dd914c4f99440f4b6eac139cadf1fa49083472c9f32403d92aa37d944dd1c7864dd51b804d2bc7bbd81a216dda2ca5c3af30a05669229023b0103a4835d92d44db52e57ec98c889a306d62bcc562b2ed6fd8dfb46cb01fc447380ff42fa4c2877d4c7c8ee7af9999c1287550265661eeb9dbead897fa96ceae614a327cb7500dfa623ae796e64f3b56264933478b7ed77f2d0e645b2320a2aef7cdbbaea96ab6c40fcee7654763e563f23a9f797dacc80162a309342609cb6db3024f1d2dc8827e2b0cd9e72d54c207535ffeaa7a4b212dff30b5e2cc91581aec0887f0e6b03ffcf41fd614c5f8f204f235132efa536e2b27cbf4c8e2c295114ef88617a1350ab7e3ff76fd7f024aa008c4c088b1e82a01af6bb4e69e78a6082484e189175f932368781e81b43412bce4ffdef81fa2692fd27127292c772f0f06525ce88a9b7c4d3b494c6c6dc6334901a3b106c9a06bfbc03fabc5fe21695c71b99bccd8351745f4aa600cc062d1925b935371bd424f289ef2d3770deb8a8086316863b4bce8939397a59276dff00686c2b00dfa47a06e04a42264f25f1339c00a9acebf203bd56bb5fab82667b7c053d891d7e4c5bcf528f01b206d8416d71a28db8786aa40b232dc84cf25027b352e5a26d26fdc300709f8ca2ae20bb9d817ff25d5313c9fb6ee3c428b6df7b83bd52106cbc153d8a16b83026d00f8d44892393cfc0e445118b030b9ff7e07243e172ecd36c8aa39972b0bd6c9926e3be8a52b0f0bda077160bf15b154c9c4facc80b072a17dddf7f067bd22bcb5070844cc760374120e11a6e8b1a78a275c4a9d07606ed49488fb07070b11bef347e7e07b9bb97cae39afc7ac83efe74ee96a0c9ec8cdd89439f89baeed0ad2ac731ef33c9c0def34e1e192972ebbe826c1c10afdd644a7679a05d46ec20b120f641a62bffb7669f8fe8344ec512b57107c2569d696f82d7a38b83b31586ef74b613095ebf95d8b6465229e16faa033c59dae3ada4181c1cbfb7208c475b791869a5c8876bc570d4c63b1c142b25915c6600546c425301c13c2cec127768cfa311a68cb22571e352863607e4c8039306499f556c8bfde666885dab14962478aba82e170edbb7c6469ae4059e47c45897cd839ae2a7062e0e2b2a836ab3352ae38b78173812a1b368382e130402f05f555f751fa163dd278a3cd1ab3e2d062fc63ce026e5a8ce7ec5b48057ae411886cdcd17f065b28e5314cfa7d080cd4a56ee08465e78f151a7b19590910adf0676a2baeb0634a61d17bd5c408a939e3369ec491bc21b66ad9fe03aa917eb2c422737559bed7ddd02348c1b934669c633ba4c765fb465fb95d762db6fd793ca8994e1e48ab93794d76196abc7292d42d2db764700d7e63bc934905bb8fde6bc8259c70baa42a7b9803b44eb28106e6586db8c4fb7d7c200f4f976dcdae10ed0152afb843c1f0aae9563f62768349540eeada9bc5260f930bfb9f9fefabc8560eca334576c0a73ff7288f89a551d4ea48ead484e554fd0611dd62f3cbb68750d5bf63274ab0ee020f9f7220dffa9cb0579d336120f784cdd7b2b44e421d72a1e021a96473dacdcd91bd2056cad3b893fdacef089d6287a13dfad80b63642a7ac79807d70529b54744999f8783981fc14745104246b2be55c60c832f73503638748784fc95f9d83049ba32e63d06992e80355883315274efb386b3c3134b845a10db5ea5401b08bb0484d698ad758cc318310cbb5a47b111da59d5f1fc86452645b1344ae4ef7df741795914ed5d5686d5fded78287d25741d713b88ed4623a511014bd15c677deed837a14f8f9fe76418ebece450023ae7fd9f7914d9e42358a48f5619b737e2809938525f697b250653a2c74b2443a1a91b479b524a10b3d2d1d4cd2e4cbf2ccdc233b091c03a012d06aad9c06faf4eea62c28533c2a41d2d4451e41e0334cfbb261457b103e3b88947b18a8cd81e13439d1ab5b9b0263cd5f1c219a4c888df0f7579a04c040d70836e20780aae982b2b9f2c5d16b4e91737c6bf5431df2c3eed80ea9d5d41eeb41ddfe01f6a0b66412ecf591397811acb5e7829419143c25e80241a381561bb9bfb01cb06cb6673fca50d13cba3784a121ad682efb7790dc5aa406cdfc02f72ba25a0fd22ca38948e24e4dde8142e54bcc384e850109714100fe7acb0d778c8047fcf0343d65f02e4236ea52094b846b873a3eef64cfaa322c022cc3912d5d307303816f4531d6deb429a9edad399d64605f6f49c28afdfec8c2e66419f3e50de7ce06f7ad687a32ce8df58a7e799053d7681ba61dcbfc28e1d860be26b64418f9b9630cae1165ffdff7fd932e7b19ec5d185dd6c24876f6790d5cdd12a4b411a0d752bf2671e13e9ba1109618c8aaec7002553a7996480b882dec2e7dfc04aed169d7f247f717b17d260de7771ae42748af033b202f29b5e8c6ebb1273603ee0434e13f9d28300c2490b3aea1f2791be1f21f0ff735801f163519ebbbbe1ae1a219daf3c46f9f3d0a665b834f9768d7625579879e77327b5b2fe5df1796275f70137731be05c1888229ce1eb81fd0ad84f9dd276f09cc36980cbc3a34d5f8c828ddd831de237c9bfcb5f7f14977f1efc571b0fd1da04be01885d041180a7074e1b4213950fbeea97f2dc90f4951f03f2f3c972f8e339336a52136543748dbda789e6d3aba49a61c126da54142f8dcfea7c63c1080e3f12f5ab9557746bc6222275baf6b399e59b368c27f8c9224a8a748727c2bdd96863e5f059320cfbb1d778cf0c6f0f9f28cf6c78e97167941547f0f741538c795f02692aed356c14c0e6d146b5daef7b1c2eb3955d93a0ac0d55c74096c36ccc22afe634631ddb997ea72a992a82e68c0b750082b1cd9ee11bbcdcbca38ef65fe80cdedc191eca0cede173cce041fc0778412981870f6676efef8360c917b8c8d3deff32799026986ec7c25f44b981552f34f2fbefa0c63af940924c3227ca7d9b3237b510df753d53443973f5eacd62c5bf39e217870c104c78d28e6b87220c78d0f8a6565b08659a397ad49b3740a9b198c05fb395eb0020e39ff86d7ce6151fc7fc6844d0f72ca67299a94222d747732239ae1f5896fa3441e782ad800a3e65e7734ca00c7aca01c0e209234a8d41eae0d1a41194a5ba679c78317e9e441d949aeabc2cd7e70fc202f66197bdd2161fe9ffa6621ad79961a66a16d9cec7296a7e902f9bb957f2679eabd698e166dac7671599afccd0de9b34c8bab31a3c4c1025bbe0f3f672a9f3152ded4828e425676a9bd6ac0e74989237f5fadfb1607b82217ba4b1244b6305b49404bb9026de248126012ac209a5c8cca7e0b08011ed8777a87751ad87a14371a2dd96a27d62d01439a63615731639f4423cae0932c4a3a9ee0d969d044f908605448d9fa7de342bbcae399696546ff1d099faf8ae5067a1231d554792357879900a29b38403b330da8a3b938feafe78a4293ae716e75473aace4421699946658cb99c8d1726e191078a7e56a7cb7f56174b3a05b760d5d7839ca3b0be724b84dfd2ff981a89dbdd703914643c6c627f31b8deaee206a1d4429e479e3ebe23624157375798e6fec49030a0b3b871ad652876528e69f61bddccff7f3afe5e1ac89744e2af90b2f4449b293d374f81209c1a9523767fef9507ccadd5074390ed8b086eaba1fa79a0a35eea598fc3f30a0ac8459ca8755b171d3e168818872f45b360bd2bcd7d5e18e851906960959b1404e478e3500236ded87f0df381547691870a8443eaf96d02718a43c091edc1d925afe6e956220d1161503ef4a589509c3aa39165132549680296078f4643db7fb80440daf6cedf5776529399341d93ae9041d2e6d6807ab3226d308be1f5039446a460485f93d6289cf15262d4e9c9340a60cff6d834e07bb95123be442e78dda46664f904501e7349e1ad5de05cb5c3a635d29ad18482ee82833a612c33edfa308815b8c34b9dc50d5a0b5bf50e04769853db4f93b135ebd9ce989bacc2fdb425613f0b541947603606b2ed0c945f1d2c6e7958e73d4811db4c9daa09ab66f99558feed2ba879c9f1da1f40c0177262a2a1c00290a5cd83b368ccd16ba87d056d2900e72cb72a1c9fb848b7f24d4addda953d33067a75dacca560e796cb7dcf5a1d145c065466c686f9025ffb3eb17b36f86b7e065b5677efd738f73b4887a7931658be67b4aa441b9448a8f3bbf02d60bf1598480739d3ca14385785147e162b1e81cb0dea8e0d3ec2b7fe45982fe3be7e5da591f65e2447b0c9151194cf44d24fc64063b7e87e10ddde51a0f1f291841d1eb0e2bcb1c18f6445a38bbf607fb63ae4823d7a938622027f09637394efdf0034e903649d96c62a205a09b9708c3878c836de2c92b4db4223200b9740d6a835be847e7d6a7f3da542e6f5d7775cc9e3b5356a4cbaf86b376356b19f8ebf25fbf5c63dd26ce985357ad0c4c47113d26bc256d7a163f282ba5da8190f3857137eafcafe198fe5023cc4c4c0f1001a53e136b99a9c30371e6d7051451fe6c24532c885c76525179e10a0bfe65ef410dbeb6a5cc7b7f1ed839ea7f318c7f860ce42610dab148b8578635605d1b0667e9dacf4361218e8f0e613c905833166aa22548d34e27d42c078955ee2f7da63f1fd5c317977dc456025b8341d68e092eff2f39b8b7d8882e8635cd72eb6beb4528217581a61a093c23567113cb261cbfb5050bc0ec9ee7da9af64df26a533600bcbff3a552bb1c2b6bccfb43a63a06efa381d387404da623aaa0cb7f68a45fd02dc30a636723f3c29d4bd712bf698403bac7c6c8ebd8ffadd8ede44e27a6150834211f52215cdd68deb993467797c7228f969cf7f8f202674fc98ab0831ed3daca22965fa4b4cda488e4322a0141e237b25cb1097390702f872294cd2cbbf9e101419f95a9c9ab9875331803b2324cd1aacb32b5251fd6f59741a48eb67da33c052dd44051c99de5586ceba5176d15dd3533a37ab5d77d8e37de27e7db5c19b7e3923b4adce77e557ab69215734cc166c91efcac16a663786c07513de2e466bef385bdab3a846f74109a0e5ac97ba41af77e8c9c4e43b4a85826e591b3aa472e643c7b623b17bcbbc6aa7bfb5d20bcbba0577cf227077bb682a8638741de4ccc250162caa90427b2b88341a94653496e3d3ce82a326f4c6f66bed0620e1dce1ed03498c6a3ecc6c1f9443b0e784ab790b41011d6c768f98594273230dbf5e0ef669e2ae738e651bc1f8a85109f7636ba07fe6e2d8db55cdcddbe5ec80adcbd19c84f60f8db6aaad4f222b6c184d5ac86808376f7f1af51a9f46647d6abc138f4e44c5434ef438d09cc23e85b2f1bf1db41167bd59b60502f4461ed8a83bb41a601d3b6fae7cfda4e99e69881310570e6f235c70072d3586df266b7c3390e6c3c8badf0db6f6ecdaf6fa615583c02a98dfb8fae1f9c79fe6985b074f78b732525aec292615b51c72cda1e03efeb91277fdcfd15a34090e55ab000e0f8d1f0e5821681779a557089917a3c68e6819c2e568ea73782ea35b53c8673046992f8fac99b13ee9e3f88ab2cef8e1618d1dad5f6a8f6a549fa814cad213f209c8a50e1d6089e252ba6557994ff157d3811a027baaafd60553b8b0fd33d0c7ea44bb031299e0873909485aedd9563ca88aa7226a337f6c1b5e81222708c3edb3f2de20a1f3efa44c67876d9c00a12a1aca0296fc0e10b629d93388bd75c3de5bb72d2a41090d66236d54cd5174483fd4b7571554611ce6b30decc01159bb50bff83800760f12f1873c6692b2f2775c85e5304db7add3c52c4d4792931a0f485e7a5e59c6163ebd5c410967abcfd3cab84e85a5a2b3988719a6e7fa0504c99918adfe5bc7aab7dee3545dd05f8b9f6a3571e0f06d7b4efc6e1c2fec7ee5e8360d1f48ec81cadd7941cb2a24debab66c8cac121bea45efa6192c32ed774c26440a651130b93fe3d45d7cf5517c91357df6bfee69a5eb73be93768924f8e148e06ab1060cd8d31b1a529cd786e6e49c6f71cbe894023303898a02422047b0ed2e05e542458b6f8a4bada2750958a8ff31baec029a7958d2fd243cd7ef170fbdbb078989a2c8a277ca6a282649f04611d64c8945651fb75f96ab4c73dcaa2376bd420a47269c519ce2d62c399037ced570c515f77ffd2b9c83136a8797be0dc935ed9137db13787f180bae958b50a98be5f9086657009b2c9f9072f5d040611f113aa794925ed6da22baa48b63c119ccfbcd18430d89664131432c23b06958823a8a8333b80d9ad59a31b0a6189e9c1c50fd590f7496d38e9c39001cdda88ff8ae8e6a52b928eb429ea76a4779d67c7111cdb087852985e631fa1610371a87de7b5b64177bfde7939d20d6f6f1f6aca75f0b84ae0f722586cc773285c9e5fefa74584d71762d4f20e571015e7af78b3a910b440e133714c000b02e553203dcd9de462733de4f34dd86ff079a5463a8e974dd0255171b3c4d83d0cbfc36906c0ddbf8cf8b90135fdc2e70d7153f641d9d3a4011affd4c161640eab0ae4a83a8305c780ae4173bb57e93c19ab6cd4ffd63d54ece157643d3c3f71be686768c34a7eb0154099f20e41eec16ae29fea02040e22b34d72f8a6af13624f1d3a1cecd0af4c661ddac7e4f2f009d90776d82a39f63afb71598495cc58244d02f4c49a10f2c24f5e7c6023f867fc5d06a5fe64656a93be1613de92d2b64d559a1f268afe245446bec5e9718e135c6b0fa87d0b8f738000e24bb120a209a5664fba3681cbbcfbc3719ae40d4cc8757aa3e70228cb23deeb157ec7a38d291c44905a481e0337589318e1e82809759148d2447c9aeff0daea264fe8762936f157802d35c119d5faee9a483d8b550ff598a723252ed0ff8fe81f1699decfc0aec23a5494e7b8b02bddd66363c09be788a174d6fd6cb53f37b18ed21b9052feda0f2da581cacc12a45044c99d0d93a0f0b63cea866a8512eae0d370aa428f7a6014e65a17c5e568a9c037b613448dc86b2cc40c3fe54861c4678330902606da8a306d5743d1ebbd88ded69ff46210ab7c34de5ddd9800643612a8816ed03c7cf49d3544b398642f17b358eab1a0edac8dc6deb706d1adc0790d8e9d69dd43aaaac8c05c90bb599adc58f7c46658bc331e3f07fd9824a015660b4b9995ee5b0f36ea30c0b838315efc608dbb7882cfc8b22e2b340d326f76d07fc072fda01f25405820a3763a4901767a4dff4fb8bb23ee1261e782665447c7836325b05421c1f4f68c4c884b772a546ffab0ef16970ff37b703f6a27cf013fc1e6699419325bd3f852b9c6100f4ca5219e524b1266442379d857e19c458232ea2f99d9d0c14a4a312ba47f2d0ad332389470b723fbbc7bc4e3754d9c7908f1afe0c4b79867e5ba49e894a6d1a392087b1c2d198399f1b8838473dd6724992431d275fc0168bf9a079d2dcff725b2e8c6b8b83f6ed40f6dc9e22e829524a5b5d677728dc07f4175e8c4c835b4a6b1bbabad47966410ff6dccf0329073c88f9f593369fb0970c066d4a1d25c259575605b8bc64abc243058e7bf159ecc5410ec16df4e691690b4865ea690f6adcc3793e28f28d98ddbfe8270e3e03ffa6f89c5322a4ec13c74a28b89a7f4933e6b7d5ee64b874ee3bfea53b7e54b45b34d5f22d09cfaba1c630b9abb61b42969f30216fe436b57d8489a3a84ea9c6196a4176c70c70a0ce8e53d306a9f0811e16cb786d299c2c1056d42962575eaff54d1d68d8219393623546962e6414a8723c1e6ab4a378c009d9c310b53c7c7e7db31bf117d883322244ed91fead093a62245402b9315b07e1a41914ee1b3922b9fc414cfa4f669ddd8b654770260b3c0b40baff483fd73ecd60cd5fd7f409eff403387531e1e243f7955ea223caf96b2818b0b89b45363f67f20e891db393a3a88133ba550a67d652b56d36f38ba538946d1bb174678c2e5e0466d215ba1a465062f892eedd814906d5b705ef64b55694eb4cdb702180fdcf252b2b60a2e25bf1581c2351e08496ef5e402d2601af584a09f11121994123ac884f4af5849c9057c0d1a184b3e66ad67d495a76c11412ee7302af6951532f899a5b23139db8ecc7f3455ee2278e3a4bfd4cbbc37abe7c69800c02e7aaa86523ce0a23968523da652d5c69b1d1170211a29d70e87aa66d0e945629116937dcc1ffe0b785be30cf95733c43c161a3ac62f32e38a498ae8039f2e7eb50c0b4e180a31fa9255e434a214c9e85b60a9f4e59d3d63dc0ec2950c367ca8a22f815d01e4ee1848123fbd390d329b73be1b667d05736ede63a87d3e59795cfd318af0197fcd10e681cb82f5b5fd065a024c196c86d8586dca1459430ab47d1ebb5fee87bd6c6e35d1496d53bdc405cd2b0fbd57634ccd31395056c441c3318bd79a5ccd503208ece3f695ed8370273e285c207506af915b07c0a59a6ccf473faac0304e0a3764685842000a6cb1b2750d06a3e8dcb4d144626a516842e1d8089870f6800e5989924c09fbeaafc76d41ef9f62ca4a6fb6e3cd0e12429f93ec594a204b4d75ba87fe4b38a14e3dd594b9c060101686f46db9c12f610f462444c74adbbde59633f297f90d1415fc2e650c153cb6cb3926b5c0b128593f249cabf6e76551718ad7f42197b24245505353a9d23b30b952e408f3336de5a9686ee89e2a17ea6ce7594a0677bea46194f5a510253448e903671a71eb443c6968ab270ea0cae017269fc6e031f947a43a955b490d64ee32768ad0ac837a6a2e4acd7de46f949e2119daa16387de55dfabb5f1959102689827b72ba4f6df9971b86b441182291ce0cc55986b445fecbe9718a970e49fe82c171b81420a260e05350d818622c42e496746a2e00a67682c6867c0e67505f2e4698ea1dbac9d1ea2a926b92aa3369450b9fa3a5bd735465a0982ba52432c821b55d101a5072902b213fe34cfa50ecfb0c94979513c4bc1be26084718987c99f8867832172b6aa2171ee0757ba08916efd16aac6b4f173872ee1d2f803ce1022498b3c711d60d944fd3a9371626e77b87e4602d757a385c509e7c9e7aa64f3711056f607a82d1dd7e46809e15afaa7b8c60c4713b69bd58c57904bd1d02733f85e8a12cb5494dc72f44807f46a2744ec99952efb2c6178634973b387e7cf2d4559546fa158f2270670f7aa777128812fc550eb84bf7d6e74eac2efc15db9d0b3ad197d39cd1dcc0f902f0dc2cdc2b2916d1a72a7fbcbb8c92d1d1f3d4175ca3c51dda3e77c5d64d0d121fa44447fff97cc212bb5520c290d89b79224d37d45440c4d0566ce7120abf3d9e3fa6cc23553066c9180ff40da823cb73b718fb9bd72ec077d3b58bc3aaaa138f9ab6d77f10d89ff203bc498f7c7d87832e34e33008419877ea948b9a791f2c1e828742d0c315f22b6fe296b4b291506e015d77e52704635b70dc4c9a36f0f15061858ad1c86c8f132a1d798119e2128b05e493e24e9a08f006abd733f8a52546c0c40fe3a45767d2d3f7a8e2c457bd6ac19ded509ed1efad3db6c593514f71d6423c32bcd20ed92b878dff482ec76f2d7de22bcd52dbf78b97d520b05bafbd407da9515771224f8510bc9deec00ecaf9b9ad92610db962f517cffdf0748015eb5f81fd3b380671439b2401b8ad166403b28605bdd3de38ef9152711ff27941390dac8463ac42528d5e8f90ffee3698f47254a40f650c749484d0807855670a023c99fa7ef1ad4eb9386edcf101d07de7c5bd2f211445d2627913460e249099548736f9ae0506f6587473b6784d83f02ac3b9c538558bdb3fe5d8af51b2cf9b09f993550775f2c7c038a3d6688252b7132416209f4c59127ba48b0673c364506c70b15c3b5283a8a9d421cb31d64669aa8f424d380bc98b6e0596582866edc5fcd8367afee9e6476db5141b4f0493ee822c866ca10e84c740804c0b878cf46e55294ab4064a7848e5d5c20ca93fb65b8a433983931f0657d95ce8320a03f34a1e6c7e0dfc1745ea4605930cb13f388d3eb16dbdc25b896eaf84ce9f5fde3238ace845d9b4844e429086140309a8179dd683356c87cabfd70de8933c000afa27fdc9ae00cdcc1dd9ca7107547f24454acbaab2118b6a6b3bcbbbdca6d5c682deabcb04d7de41c98980811af5bd6542600b113024a5c40d989abb20c16c28cd954c8fede776b29cc550142833d46349449a5acca94922a95ca5259954925552a9485b228534aaa5429abb254265ba9ec6ca1773710ed5234c3c82fea7b919450284287c61ba7c38257eed3a3af2346adbd823829ad7fbbbd80bda11a1c62204c7c5f2b54015e0486a6341f1128b57f63bf51f65f71b41ca8bf07cb98b11b81345a6647d51f56db08a199d70b526772eb9e35c4345bb7252e0b1540b68e98c652b45ccdf14a6274c10019d90ee4157614678b757dd64ffda33f96cffe6cf850793f681d4ebabfc95327d634ae0115b789e8623443afaa3aef2ab64a64149ec5ff7de66dd902466d12ca113dcc2c84661af1dc8093c0019d2676ae5aeb0990ab77cd974610aeb0c0a13c48c0779e458e3884df958e056cc7e2270935be2663cbac4d97ceae792f4f9ea81f5d985714675277eb29c1d38ed5f32aa364aacc96513257469b4c111a34e91f661153f99cc234236f129a0f871f8a0a0bc67ef027608026e797cfdf038a31d06bd2b50f9ac464960695e8d2edd2635bcc03f873abba31e217ec6961d7b3375545d193bb27a3fc4e6dce49801620db472061d9bf5e21bc4b50cb49a992c4a0ccb5d35c9fb2c266d973f975b0d9bbf2b4ac359526c46e51b96fde28c554082a399250deb5319f6d5ac4f27c60e82c00704ffc3524e9fc8c2a92042a100db7a2a5e61fa2044405b12837ba737f8dfecf9874d0aca63b9de8eb5d617c5bc2ddfa9a6720566abeb0175b17e7883e16001acb07b7c125ef2a5a097ac1296829d0fbe290a70612c6c3f8b5a6bdbefd02e9ae3163a7b9dbf61f3f0e4f8073bcf302c0bcccab5403bbfe89ac1fbb130c74181b5630d0c83743efde4dd23fcc77bd59da605d6350a229365b046276af2dd4e77a59c7c142865c24466df35c4964ea50eb6b871d9daee732e3dc68625e1ba36f0888cfbb5224e59ff6fce8524205693226ff43935d273b89e953654f844d77a63d285056fe369b6be5963177e209f86d2fbd440bf78c1f0c09b33058124371b0a8826a96f2d317bb75cad22b2a67477c33ef5add3ac6a28cb60cb43ba093994cabe71dcddb43bc0f29256a7ebf309784cd1b484d36c806ce3f517084ec3d11007c2ea17e1dbc6d0fa172eceb097e84e9975a5f3d401614c58bc0feaca08df016b460f945da61f1b0e6c452bc0863dc7c23da64ff2b934bf35127ef94ea778df6f1e041bd4a0ecc61f81f1cfdc24e63d664c2a0897110fa1f866d4d26d223045d17a2e78b4b08bbeb4875885a1b34c04c86c86306f35a6f9ef89745d8fbbd3afaaaa267a083984cf00eeba186620874bdc174269be54d66f00ab580edb2c4c3dff1fe4f443361f662fc2e9017c14f1e72071c62f4fa72c1a0e06544516fefed41221eec14442384e5fd9100284c78579197979c652bba00062fe052ed23680097707b630bad8dfe33404e4e8db7456e0a9c8fed9e19240d58455723b46cc8333835cb635afa9a3e1878f442c9b107e3d7b994bdad9089a567b356a79c7e34f85614533698527614a43ce02a99fce2287657d568df124be28c45f53666d0f3e52663af876b2aae725d73a4a858c99cc700cc5120ef091c6479848738fdc8c64a218bc38f86f865d4b620cb95ddbc87b85080a875c72bd5f82f1d68f482203e83b9ad957186701dedc5c76dad00a1d544f5c5edd77f3c3f5b3d7f450e9868dba000a59569f1598d2868ca265a8b97a97e5f712931cd56c4be373688c5312d735bd745d13b17922abc6f997c06138e03d21c3e71701bf3f37bd61f9c34c2613f072d3ea70c1cafd88ea457890b28bd88f8c0ffd2b515b14392ec7fa63ed5f8c7e98bc0430874b64a89be51f5720a6981b95e85c7182e780491cf226b2e1ebc429ffc46d7d5b03a0595a95288103cc434062bf991cf3eab23ac6bae45eb5e09b9c852e8548a47f8c000d5dd56a23667b7cc5378445c0f51291d09eb4b971b584c329aee873034a1b7511f5dbfe12f9deabc7decf359367ffb5f363188b987ad2cf288d5ee69fe8aac17cc1c321ec0f356778d14b1c7837051bd34d5aa3249bb28891ed359ab241e558d63abc3d0e7f8742bd50673186f345ec870c297e0d24ee001d47e570f21437ef4962349a59ae7b5140ec03368af170f21fcf7fe83d7977b0a9250afe5a916e543831f7f616a19d8ee86d856f96a23f638662c836511286f7b00cf0bdacb643436b090e4aef1976675c1dccf56d19fedfc1b68f398e865a27ce9af741664118a87d3969b376641d266a7a7355848dbe1dfdb88321c9b90359e9dda4c8c4ff50417c2b4c70b77042c894b51a6c9f81487d63f822e497f2656b420f7fb34334dc1d856e26fd4d7a6238c086e5400834970ef28484879d57de3dae50424e1071bb3683785ce6c7fdd30df7f03ba254b771cb53ffd6b04710eccc92a50855d90320b73dd0d8a3c5b558f200711cbac5d1f463ea7825f34995cdb41c4697119852f7b94291df68d812d11baf63b92d4c4cc53f1f6357d38fb595713083b367f462488692a26e4db12b31eda1e2c3dec9a0ee4d14e1dedb16a54adaadf07369eafbc98324a677eccb8cab954508bc1bad6058dcffff1b3f4c5a725b7b87edaaf31599535fa23c3ee404b6565758209fea06d17e777011948edf2e3278d2c7e86a41b70362f89c0a078eba2cc0abf848018cbc1596317c536ac0cac4dcca58068b6f664f8b91e423a471896349046082307d50158dcba36e773ee5193ab695cb7489932f5a17bbe203c0bae204001d155f3831bd5144b45a203e4d977f13a193407c305ae29afe2ac12e783e47bb90eb883bdb504656c01b7f17cd5db6744a34a9f57eabbc6b29df1c0f31ba179842113f3e46cbfd08f8b499bc0139951c5d8ae254855659e841b810d1ddaad1c35a83c944f5e1a424484a5acd37489ae912539d8f7ba03ae38f840e33a84128f998a6c53542ac7fb6697394040020a4752c36215ac72321859913d51ea6d78036886f75ce8fa14ee1d3df1617af7f3483af145430692c7609618d5d7b1819e6d0fa405484f0b82114f1e32601f65acfc76edb58fa9c76f17533d9b6aea4a32108d9e08735b24a65fc3d96dd16eb6c425c2342e3b561047bf794d17484e162ae78035790ff2751f408c361c5a0a6b530cc394588805db0c1f9024eb0c3f8426130d722d032968fb2a844a5c6463a0d9df26e20944f961156dff503d8218e16c791eae94a2a17dc11e8ccb32c05b3202309f91c4a0835978f4d6600f4ce035548e1cb277142ac72f1dc9d724a5b876a43599c5c4e1581a7177e0da587a6a645b1b6fc025e8ed2f260958735e8281068d0cb19cec2eebb6e54637427a206fba81d74a91b3fb58b7c7f41acf2f720a1bb949a4f4d2ecce4d6866eb423c72d4a141ab50048e20de5090105befd8751ffff544009bb37db939ce7e4e839381a3adb8798a7523a2a53a6015356770254bfa25aa64eee2f8a262aa32d1084d2339346c6feaee1ee55fa89c3817606062487c7679a4c01bc8e29896c854255f65ff88b847e9ccf664601fba0bb1a9db44affa9f73eef0808919c71b09a045e4dcf608e5aaba35cc017570ac2bd25292d8475d0c4755f2b916c09faa3f2239e82fae68b4dd45ac0c82419715195ed2a5c57ab3ed1f0d891683bdd7279e296d062cd65fc025a18a4eb3bed426ce99dbf358540104828b50266097c40ed3bdff11839e63b5071617f1381cdf025fa011c6d15341632fdff40b9835e9dc6e44ecc22c34476d957fd18f9f52ab15c0e84abfd4f8d3466251feb6ebbcc021a33a8235bf9de39cf9c9f7e3f09e831d86b85e5d64cfd5562d5ca7af93170ee42916e711b4876e060da672c82e390d5a8f4d9b972a6e18ac8c91d8f1582bce229b6e261085e72ef82e09e8a0d5409e0f9a2897bebfd4662332f8d2a61b5603a3cb3297d323994853d040c16c8cd34ce2a06ef529401247190a9e2f0127fa00eff6ef5e02966c397217f1d0ab9248a3f5bcba6b29dc186dce570855e87cf8068b94e1506b6b2cc5e8f110becfa713552d82d8d0ac979a4ba3b3b8cde088171c058a8e24ad5bdebefe1e48402af8cb55b4d57953591ae09226a174e6542adc022ae2bfdfad503403586990eee138d848d0679b9131c5a15d24d1a4f40d74240459001f910f59bb578e36b34a8cd44aef36e6c60e7e62c38e18160abc8453569ca6fd71edec6d5a20b26208fc8fe0659434dc1fc1a7274ffdd22649ac9d1cea4dbcfd2cecc0cce1784a82d8a8c22c62120f02c078d8287937ef042de9af75026faf02bf7ca2719847431926fc05e635f8dad32935b66daf2773cfe1fa4ac33b0778b05f316a03da118e6cd0db5803bb51ea55c1f85ee76c97320271af600c8a8a8d5ef182c48c27b085b951f11c02fb7608854e96e838465c74d35f02700835bc40837797a1055fe772119bc55072e4a0cb35d43de8d2faac153f7a70b9685ce6dff4f7ef542c2ef9dab704c7d32c2a0a5ca549efb7f1a7e969e1d3df9e992a2d37c0c43adcd7d05a4bb4643c6a3463af5f775903140a2f58b3a0cd9beeb347707195d5a4e4484785fd5c78f884f52fdf5e35ebc67729ec8216f505716d559c35ccc9129870573833319e9673f0ae71c0a5ec5f154b4845a184f51a3e729dc2fb5c71763bd915b34c2a5f248ab0266552c26c9332a97b72f424a8a9dea2e2ee2be1a0082bc3a3687c052bdc90a183a92feceb3703c9ee6596e0c50fbbf9bcc435ad332e94f764f8625c098c130d26b1279622aa1bc7cbd635f3acb32a1474ab962adbe4972a0563958516e7239482112361cc90c10cedf3d485ddcf6f00f0aaf57f07f434c8629cb3ec7407253593406165db8464f961e6bfd1d2773b8b3fd697efaeba6a8ce9c29553686ed9c45b4a1f9047470bf4c06ab7219b9f69e7cc79d0749d344e01ba9ee0e9129a8c731ba74321cf89dbdcdd7170a158cce229a55af8535e25562893ab9b6e94d6b0afd6ea768e21ee837c2fa072c82feceb53f7356a8f0900fe28dbd40332c60420f184516b9b59fd0be30b16a274ec9f6798847fc7640a23e9932e389cec4fa3951b0271e51aa47a4a993feb2eee15791d6d17e58c77263eaed19550c3f8d4d0f3314680824c0b67bed4b4996c744f9bb9f2f3b4990a51481f9eeba6d9219d6711fcb90d995974a26764b24bacf8a086bbd58f8ae51979709b14bd402bceb8710ad7557ea4bdada801aa9c25cace9b2b65338e4111c756f66c2fd5da8d2ccc8fa267cfbc48f5de9e1f8a84347ecbd14d74c3ad31963c1352e2679fc705070541fa2ddb7b51a05e1276d07303ed1dfd00f7faba623b9d67b166590e83e0e5a8f2053df80bfecd8f0916e151e3e115b96fe39c175cb6af6d339c4a82d0e03122eb623d3ac50eef26b6df45614d19c36b70c3a357b5877237dcb87e14bd124738c5cf247a9faf1e1408c9a29c549481388eba9509e5a0e4a14eea40359f132866dd3dd15770872a716713948fbfd2e3cf03fa01816969a3f2749d0102b694a7f6f3a3f6941d2a8c0d560299672717ac1a475a82b460b2846123a27843fa456675450b0f1d88ffe0cd0faedb88f182dff9c12e218b44c6f8e6be4a62d052682a0036419e95cc13d69131dff342f835f6a427dc4cec35a98719abea9ad60e6d465aed9082c79b8aab93d61ae8c1d535b87ca49936e5f6c234f74635a862ea459209f858e15ca02448f49c5fd1bd45314cd0583f84846c4500110df3e004d55e90e5144422d5f17f6ee15a30d7d017ee89a600284979a77f569b6f7c355ff7103fd930366d4fc8d80ec72b3ddb8c4fa243bbf6031a9698e28b5ff7a47ef037ad54600419566132d3f115541e67426cda8aaeb97fff014161ac13677a1fca0ccf9c84df3580b98035ea208ebabc813e79c45d61c33b076e53efe3297c830ba47b913732bf7f734d3e8ae034c49927b68e8a9116fd4cc6e9be7ec3fa86b88af6484550914d50064a4fd3ada63dcdaf472a817786d52bd5a8c714e4784b7e5efd6aaa17351864a273880906b13d61b8320bb3a787c1e5ceb12af02110ef8bc479199d65214b7f2f2c324b05c40c20482ebae4a78c21fbeda5b38b57eb838699401f7aef7442a0a131cc0a0fa3450be7ca353bf13bfb56b172ae13e75ea046dde0583bd969397a387b23709266ed326d65a77891a09fd8b9fc837744c83eec0918261853103b0898d41a18366513c830cc4f9e11591dfc05ab6bf181d3112d85dc50772aabea9ef80546f6170487d6323f359ef79c81b40d94a6f725b144588e7cd700a4409987603ebee0fc95a45c088252bd52843445628100ab0e38ca0dfba78c4045fc7069bde631502ef5c03959263f72aa3aa8da2a03f17fa52cdd4ed0eb0e6e0464e0f772084184bebd5afb2888639b2d0ec2b528010130fbce61e2e9de39f46c3400f11b12954bd60568748656f680bc859b985ec5c8a8948eab9759636cccd328c05f4b5581075a2e7f8661224b33c47f9a04d0b672bf02ef02b52a25f1c98a233c74d1fad4f1e7c1d6b16635c0e958056cb06cc9b551e4d220194f161fd5641bd9b78796cc9c501ce317c87887c52c45ac0328da62c2760ae23e2b7c14dc6b4e350e7f4837936f1eddbda7a46ec3fc752c3e2111f08001d819c6afbdfe109cf93a16e83949f2371aedd64f562363e51b80ee7b0a54f5d948ebaf0bd47da0eb318b340b81c032f57ed836704d253759db05108d7b71ed43646c8c030a6140a5fb73dff34fd06b8b1ab99010efe5f5a33bb3e63b2f8346a0a693b57bba280b13e6118c7ae0b1f2b44e412c9b46777ee4c577c474b9f70a3da8ecb907c2a4bc07199f2a20961a92890e8544ebe1dfec9507e1b33e03f19291121b4943f877d5be76082b2fc6d449b25117d8992069ef3fe0a4f0251c899c27822f20b6f1d77dc71586074ac0ddbdc095f758dcccf38c415938a636caf189d7712a0c25d2606dde58266a70500e31a76d81f49ea0fd83a57b979524f53cc4462a5279111fe193e0c6f541fda12922da7d5c5b7924bd6cf7918e746e4ea8e44762dc7fa71f4c827c1b94cdf87a526ec87932c3ef2c97f94f674f7e7d6759c93897cab23c76e359b4791a2e154de80aedf8268364ecf06f99c2b36dbe6c7851a4b46254eba70d35cdf01c17bde031f6bd6612b7f267e1f9c816f9cdda498b37090230ff47b82cf8469260fe71c588d8e060571cca7b3f47f48275bc94f5fd97d875e506be06b6c2ceb2a9a04fdd72ac22c6015c922c18ef5dd9994d785dd4c7c9f4f1dce74033b65357701c1d71052be03032ab6c1c9a0960af2347678343a2272b715850a40f37cd2861a2cff78637e71ed26ec35f9bc90d798bc8677e5d8c442de93efd66be3330ac8c9bc7c42b754e747e82ccc3c138b2612a6e5cbf9d08e10e89d411e8c8494c650ad22180a8e2b4195105bc8f7aa780c8ff67c84fcce223e096700965513d23d4573fee30c7f21afe181bb1a748a71b6b6498bc93a2d186505f062e54786922df51a207d299f5e071763646c007ae8178f3373afa77c651529c76d42263877f84518dc6ac8d9113021a34d31f1a16d657e80aee6ac06ebb5b62ba307d441b0b8b08b94494cd9b9b130c2bc8f671ab46cd3c8c5eb48879c7756578111c43aafe1eed5d5c8f47ed29f6874475932e706cecc917b0ec4316770a42b6e72e5ddce0fd571f856bb7a4ef0dcd7cce556aefdb35b5ae9a53e3d5a29ebdd4ea6f138dff745820128fecadb2d1b3797e7dc601d074ca49ef63505cc9c1edc6d17ce2618e5b981de5ad6067ab272ab07b9ccf6c94ab5e24a0cb9178c7bc57212bac527b579461723b6f529417a685da93e01e752197d0386eb89a40086048205219a041e115ad5bb211e9b105044b94a1bb057c7a1370767788bca1d15eec602d1191ad81c0ea1867362b9006f48edc144e90b0e73730e6a4a3192af5ab43ad1e4d6caf7a0f0f94794f86d77d990593cd54319baa75d63b5097c8ac1f7817c2fb447418f71628d8e40cc22e1c291597b5cd635f579f7329276f853b365a268cefda84c21de249a3f242b9c9cbd6c9bb5d51f902f4a3f7f9098b7f222f682a0166ea94df338dc2239fae8f14ac4ae1967c046cbcb50680e4d74d107e188f529573caf23e8c4489c2bb6ce074798989ecc090646379ce8da11e657f96c948986a7c0f9d3df0ee218ca904cb36459a05ac5fa5fff40c0217085b17ab8104b73b80081da1dc4ec6f7004fcb614e599e28c87da6b9e438497d7a0de050e056f17455c7e1738ceae57bacfcab47ffd23e8dd89232768320b561873a2fa8af3b3587c6fd2d935cca70d4a89b66e35973a47cdedd4c097f8ab1cbe54e0b1f9fd900c61e47b442ba383ab199507f7790f30f5a745f46169d1a285a0bc7431cb71d18bb6cd0a6136a665806982192090769b129a0597b2203b43142ce0d91d0c12268d3160a1b0c7de8845822761c9ec6a07e0cfc58768cac8aa3373d4cd4caa6dec864360ef370ca819ad08977d7c311e647156ce7a72621a263f59b78a92f1a6663252ecf68233e4841c0c9006a53eebd1292a9c9d564e797d4c59f79e2e5b48948dfbba803f65f042e12b513419f54fc1ad769d8ca9575edb83dfa5cbc72b621be5ba6b0c21c00550020279cca45e655eb1ca71de0ef767815112c74754933d12940af5887727c1e08c842e49f0fcb9fdf30961a6c30b039c3a55f786650d325e5a8bb99a184a5bc296d46b38babe539625a8d2a32fedba43bfb6046ed25f53de4461c9ee78cb12e9f2ee279ba0be2072a8dba71d9f0f0aba82a735ae96956d108642d2bd0ab275d27a840f746d87e2166846a6949a1ce0f9fd68d09a0f3030a00b9ed8a0cd087b754783e62c048c156146c9e8b95a4c0deb85e7398e3a537312a0339e47320af940e6c0284f729c8f9aebf5581b04713c8685996c662cbbe51d125d68389612d04d9267b9f466d16dd112a1de8abcc7a3891a85dadd2b7d3ba626a0e007367723caa5b0a78fb17340f4033e2e473f1b6a61a74106e42ae93054901eb598d0c6553cac5a411138ee22bf58b0fce4ef3795012e5a6cf6d9d198c2815c442b4fd70e23f869a70a7a56ae8512fd033222f0f0292889134970a5d89254c1fac11f2b1c559c4bd059ff16507315217f70c568f0dbd545955a361fc1fa77fbb81a9edaa623ffe8d6f5543b4901aa0415c3e0e18a05efd56da90f8691e78879111b5249cae695158126ce7c4a0de5461e90b28573c94ca3dac9c5fbbb882ea832a4bd9c18125ddb3d4856f4a0296cfd4cd70983bc975bd892f35954b886556adb8a613aebf0ca9a36f0db691e472cb3e9df0e1901e2a9cba2371f4766e75ce6672e44ffda907a8b1d07202217a0a49bdf874ef8926025c5f2991781c81eadd4c185b598819d14763ebd433bf18e3bb3f8a2778e536ead499e598722b179cb53dc12bcd3dfef648b50a405be3bb17e6e999360dbd062691def760db103085799a3d13b72a92bc494b1fa746c836fe7671ae68b95057304dd4fc3c2517f194e886096c567e26282842f671511526c707d8953d28934ce8df19d41786acc6a84261a3dc00714e80cf9397de9d5329242e916f690411c145e7284bea5674089d74f10f669fe9788da5728faeb4f40fcd998a34b10fd4d024160e3f593c83a5dcee8b734de5b6e937ebbe61ed1b89e064f3336cdc465e8c290c1e52a88ce8822421524a0db506e2095956e7d3840b95339e84d2db49c2a08e95383878d80ff3e950c5b6a3ecb022eb51b21a6799a4c67714bb88230250a562187212cb3e085ea840e7046cbf0e59166336e7414fc124489dde12a66eebb0fbf9505baef9b5cf6c692801c2777112096045152954da36d71cdb015a53d96bcccb98a8154c1419a55ca67c3b90617ac78aa9a97b78dafbcc41b67c7f27ca4f8c5052b96aad3d5acbe3e55d691a8c2c101dca08ce9bbb50b092496c97bf24b659a682798ba021bb66dad54ca759a00e31e973f95904a2d769b78246318ac8dd05eca3b2bcc1cd70c8e4605eee7fba5874f4bd7211f79e01d5930c28dc556562c0e0e07e64a205755b1e3cede467e1a3164bcece5bfc127bbda591a7a700dcd2d9d29a3f9b8204a787ae7dc8820c23ed0ffaeaeea8e990beae861e46a821c0c71c96da1adc6feabfa1aafd0badf5a6ffaa93ec7dcab47f892fa288fda7837eddd6f5b50ee19be09bae65ec7ab1580bd4cc23d8a669ae39965e6a152947001ea18d2c0571086e116947b047eb3c8221a0517b7ba6055a9b4a27c7c62c2c349d5f8029626c4d562a4763d4863631ab8aeb33a3244648bbe3e9897a93a04622d57141e13d0450faed3db524917bb15c7b19e42f5a0eda986a72b2b528d3ad20121d8e73c226ecb1bf749c3e426348611f8c59e715c1f5a38564df60ae731815392e9f40863d891419f08f67a2b69dd5893435b13af142defff10648eeb4474a2ba17a1e77fd83845eef123a41c29c0768f3827aff41eeef0610a71621e14144c8ed249f84e6a6b4cd4a44d4861cc46311b077f0bf0e91110090cebe57006bd198567affcd777301470b08806a24003e3a89a79e39a1364add6ee3e19e1fff337e4c07aff6b444909db99bc38340e6cc19ccd1fb9f9dc4cc69fd3f9b7cf281a11a1f3806c204fa591b62811ef51e5dac8398406ea4a9a52a54f25802e39778f028e20f2d97e085b908e215343dd1fd0e892e02aa9d8feedd8130f6906602ec98d77e58f7acf1aba8ae9d13683496debddb9457299ec4b803d851e4604010b353f02d371210a8e339f64c06f38f62bb8ca8c73d16b8907d1c458212942a14e5b10b85ba10284246100fde1a9dbad040577497260ee56436f97ccb82088c9a9e25f2220a0bc1c0ba409b6bf4d3541eabd1bb29b2dda5f4879ef2ebc9b25ca3486be04794286ea4e79b7ca24650b772f299d6ccc7527025db30cbd2aff7660b67aa5d1c26da2e416bc3e240cc4da59665fec3ec84f6fefb2c6b89862996291887096399d3a534f230e83252f3bed90df08b1f956d8c494c04ea4aa01b20000411d70c1d5f74b828ea2c0b71f7678550f95e84299d8ed21db121e9e78e87fb245dee78881139333d0d9ff1d2616fa54bc7a42de00d4743326971545f50ea994f2223071f38fc90218230c70a301e94152b15e872f3db17e60e5d019507c982a4b04d2c96e2640de04f0369f60a6f940a379626a2c02a9d5fb70d175f9e2e43151910129c2c4d82a4ede01bcd9ca0a76b5e208e89746ca6185ccafb1bb4fac5f93ddfd3584d316b7e144ae787151d1836bce3a867527fd0847fb31da8964540ad4ca8d563269a3b2552cb08626f8ab9d1b7a5f706724acd4bb6abe472115af8fc920c678bf27c26badbe2052cdba0a6be3a6f3b8156fff021a00cc8e7870ed64cef9416e246fe28717273ab29a91729fef5a5ea4eccc02929557a4929a7cbf8ab08825e920225c160d303b7b334a2c5cf05a70e271af6d762a5a43ace025c728a1e7dabbd08f488e3267f65549513e228950bed007ddfca467316ca667259b1d4e28c0bf8a5e61d67e80523732c4c976d66369a78d317c086475ba215af21898110f6aaa7c8e4068d815317f63482f8cd2cd76acd49a4992e6f11421633a82b5e445a1502adb351fb371cf0f5d19ddcabfd930be69708db91cd1cf8b71bdb9a0ccbaf0a6fa337f7450db650ec131e94196e743c29482263651a57edb3253b16f12517e16330fa27ce83b61b1b05eb5dba0cf6a4f747a4e8212e9370e219b2d769cc4429cfd98b800d46896ebfab94c14f928d9b6834c9b12da8cc811660254fff32a0d7a48895d75018d20c2655f60a56d05c216de1996ed094bd8ec5381b9d60bce8c72435f88ac7018b1a674a2905202116ecc5e11977eb5ad742d426d4725b65fc39896337598c8b10eb28a089a83d33b17db1cd2919a4c87e2b1f03df80106af4f2582330baa3b8f442e4cffc60bf41981090d631d850e8e738de644955dded1be2a13bda23946d7b3b4632c44b9d419976c312cd998d3a08de8629f570ee169f89d2a631dabf34397478589374c15bff4b0347a85b04c150836927883ac495daaff2f588b7751da9677275f43fd69531a69c016f5db744cc392def6821929e0d9521d6282187628217d24bc84a4ecae323f5513ee2db15d974904d43c8a14ac7b3a7250bad7ac2ddb853eef4c920794dc9e2a3c2d7884c90782151b52dbfa68c6c29ab0df4e6e3fa03d64983ca729ff307564ffb11fd0944c32a9f4136fc15dc4640e6e6a19f52f3065245f087a4d890552da67f79cad11f6cde0e50d2ab631f1af8562d1805fe47fc74d19833b9ce37fa4ec017ec2699e869d825415211d1943a1ca1b51089fcdc7a416d0a2b5d22c09e6b32ae13f45319b3bc1f7590c8fb0a834c223f06c84e74b25b3728075ec316926202c79db06ca7a497dc42cbc6a105f040c53b5ac851bb81444772bd11a4c20859fcde7eca2dc7161e4929555752bcb954d951860d692aef66fa240435b5dbde53aa203156c6c82303bdc55ec9086ceac7c8627c4e9e10ecb9c6f89c4a8ddda2fc5e2aa2c3dc39b156ed37cafe6aabfcff09cb7d4a59d498ca579495762396f69ba2da731dd5314a6bdfcd7c32c20345dbd4604bdf30f34f9d2595174b42d361a727bb50ab546ea2370f99ba438171e3e60664c9c04fee99c225e051acf4c7be4a203cb5ff4c66ed8acd0d9e73be99d2f774e8c606b0356a6f8ad43fd0a8cd512b879114a3dc1535d1ef643daef43035407a3b3708a7c06469f1344b4828b23380911004201bb7a291b7134172c301328c7697a97b53214c4e4985b4f6211a92b93816dd29540b26765c2af2650f41a8a9962c4d48924d653697210d3515d3d9091148259d94998e3dc4a6bcd9d0878c023ec121adf98f84df401420bf7c4b75921ef83b5d72b5c5994a9095c1be463ea9754e48296a6221a51558de2eaedad89160a90742401316e5f8de87a31e888bd45d866879dbe18982aa45454c6f1f0011c7fc2f8ead03b2d02f7380ddf49dfd407efc43ba6cbab40362e367d9fe6ebd96b7e2f9b2a12a1cc4f336f685f91c92bd3acf4539463f05ec18bb18fbfa0d8df4fcf84e2beae8fbc4d2c61ddad678540a0cf9c60abe4e1a52f85b4279ec6fd4534aae7492cf58937178bd73a850dadfffbe0d065fe21c65020cbee29b82db398db3c4e86b65e211329e2a9d7316c1c7842e4533743cfabc5e911c0fc0c7a3b686ea986d479a1e1048052b4965c424fb92aab0785dd0ab374b1c1e2242cf3a66eb356fb8ff0e24784cff647b008b419bc193b2ac9cfa55e876cdcb99285a2ed734681af629b8c28c7995f77234ab6b2367f03424981c43ffe296509241920371332c6f2fb72d576ee88addc5d6298b2776f9cd7959ee1efe0d2c9a87fa28a51172f6709260885394041df5719fd0a13c84b3d5fa1f1d1716f004acffbec58df59ef4b225824c3f29613b79482f741090106f1d6ba3d7488e9b0038dca5e6557a9ce616553c6afecda6294c1a7aef47dfc321d770f62544cd272aa0ecad109713f5b5ee57e60ff31249dc82bd4b035c4b7078eef910e543c4d5433ec87673c52ba413aa6a380f87b2e264d23a7dcc2227569bf08b1498dd59bcb560ca478bf8e8dedf4b51bf45de8e78dd461b3e7766a0a2fd3697a79204b71d5f00220651b2dc439420852a27ecc13b134978a88566cf24f402e029dd2e084c14077b0ad544895bde46c5d69323c75ade30b58fb3e1d46c47436a805692143481b2692cf4b71369f82fc7073d7da5c5f2a50e8cb2968cfd0a919483df5568ce89e4b505ad7f1331e5a19843ecae735fb4ed7456b2cd36b806bb8c68572fcf25a37f528e62a2910791903b4e7db444e2e6eff5a179d8d9e13c742ff553d15fe470000e9e4ced5c4211ed301d52bea436333eeddd84eb71b583be2d9c8c322ec516b1aa546877e0573820a341c686f1b96ade3bfd7c12d5e70c4bf53f6c9b40bc5e847b144709152a2769e001eb9adf590e1e85233499503e9a7561625929554c5e29e4e07eae0395b423eff34b62b7d737e5789665ab367895b82c093c72d2a089638cbe7945cef0733ef6b9eb614d07d20142f5245280d7400205e1b0ab38b8c6fbca4bf2d3cd2cdf7d47eaf36f903884cd676d4e8e60e8091f689bef057ce68520f167e6e7722591a68bb5552295540eb9e8854e1c8d53e17a0d045c9334f49799cae78d2fbdfbf367cf374d56e1adadb836d209b6a1cd324704b1143cbbcc5010253afad438a1261b178a6cef242c3ddca0b1f78bbdffab6bca4ba25cbc0a660edc14d53d6b84091891bbd3930c341b72ce4a9085fd8ece0907ae2ee1884aae19c584e668b02ea8a0ab71c53fb87ca1abc5acae4d55d5b8a8a083485cb558cccb1f76c528f59d49ad0515930b81704de942ff6b5066ac5a153b9226ac32fa866a50b0c282fdc129902385ba03007a1c348e4b1859db6a8374feb108715d6725b8a571f8a3df89d60ccab8ad78a62e7fe77bf239b1c8eaaaeae004c9b00ac24979b1ffe5567203a5272d876089b8f304785647972c0c6e922338e255feab4b90faba467298ba3095de9bed262cdc7cad914533690c8b213d8b9508e160a4a5b7f98c4b98ae28999646805684621b4773a83a049d29f4d7be017a9b85d7f4816249394b6228a8b456182aed9f64a8d8024120de01341e77691462155b50d65548eb3e1cf4c259df7bb82c107e37e0f3e631b91a3be83ae4d1e8edbc9dc7925282f4d88e59d656e0efed7b189f63b8d084f5026056fc5f0b6a8ee00c4c183983cf2d02eaa78e39c09ddb4c0ad79139a65cb31469fae6e39698a8db3422f774ea3ac544827c37a385b478680a3993d9cc6a2a07f58b7f274e45de6769b1b69221ebaf15bff56d8cbbe9a6a0fdb3f408090c477076a8a1ab409628feab036e629d0980c3522a641d0c425b6861e82570c1e85587a9464cec203523e94264405c05a484ccc0e9134978bdd036d523df469923805de53dc19eb76e87219506de4225852f384a770da25a681ff890327c40666272546562f8f682b02e3b937b7e5ce541ecb6657a7cfa2096db411518cc4292a0f4e14d248013b4814c4920f47fcfdaf79510160ec0fc8c6c2392a99a8b83b1bb02506b6a31731b0b1b0156e3b96d8f299873108d47691cc84145415264a428106c54b4c5343ec4372ee910bbad841b3c005f8fe313275fac0e995d4b71053edc4c7f37cff769c3bbf9bb533587bbef175213e46f6ffb62f3a78b1bb4fb969c0ac4d9352934b1400e2713f7a9d240f34f7f114ef7fec59629f081a837ab4fe2253936300d1594c9ef93b8678523a54d5ef265972d5084fbf57749dddb2a489c0923e54fc3926f6384b14b4081d02374185f8ff8a9a8857c9ecd467cf48e700987bf2aa6331816504bd2ebd4d20fe5cc41248188901e61aaad344f1810a725a51a1e11a4de21014008cad0da5c2d69018eadde68bd693866b7f83503f8a23a2c6ec879dc9fb3cb3fa68fd6a094d5e129a73dcc038063275027765f07c08652f8332d675d3ad05729d3b0aa808c4b83d195b687be13c503f623733a03f46bc629727a02360577dbc00ae9adca57714c6b0611b20824422b566bc8385a2f0f3873420bfe9620c127993d39267b93aa96a46a6e7b2402da6c81fe150e365e3b0648071a33ce5c79234a1e8f386b13349aad66db13d46c3b138cc121d28c6d7fab77c7a9056304d5bb3918cd788da977cbb782b438232d8f68b24bd0a636ecacef8d0367e76c8390811d675a77fc991a6b12fa2bfbfca5800459ffb4438d3c98a2dc1d20c4aa7131b96f6838ffaba685c0074f56216a95689e971f2fcffd71d39acadf55564179ae3db8446fe9f76b2a1760a985835597459ec9626ceb00f15f7542c6c6d327144e8dbc20645a21107a0f90de1b2752cd8f000a7ad86880010899c5ea4037cff301df3a29f7d0e514ce1e10b04abed8ace1cd7e2f087b3332861ed27ada98e1503e797cdabe8145a612bb19930189dcac4989a9db8ee4432060486b9245b5531e661018c1f10285890575b5aeba6e044ef27320eeaaf2411fca74080726f9f0c39e428f56ded883b737ad9d368d4159ff2b0ae3b02b7366deca51cde3fe551231d000f56f165427c38758c6da38f993a778140f2cd02c6aeb9d91f5a85daaa4ec2a188ffdd8ae3ab398aa59167551fe8831ec03041cb6709e995ff915c18cd24235080832a824a20e9c3d02b8db6c84f0f64a68fc136ad9df1704608189e86cad7c7bdb9bb0464226667f9e67d0a60848d0ae621ad40f4fac45f8e345c716d8d511f8a8be0c4c9f5d3e2f7466ae2f9701d973b2b101db331cc351343c6e5c38ae0b783c43142bab7289eb179094774fd6e1a0f9c36f054400d62402eb898fc11abf94d948a7687e36b0a61487e7e9f3a1d559d5a6ca1864c1fc70da40d13ea35473349fefaa1001c2a19e3fa7d09e7736dc402fd428a74c6ddde92b66562528058b1237831495966c1c640ee8d04d203c422948c49f0b9dbc753a20cecd810d254219266244b9c2d4325cfc8553e6f1a2f420d46aa11cb5962a0f699026e4140fa4de14bb708bdba1fad5ef563602879a78b1a2782368f3c880bd6081dd4b14ee2da8e72be235c99c70b73391a168b80585a60e433d6ec86ad253dbc4a273659f17aa84192ccd686cc6b61770892e46e5aad5e0d097fd927ee23279a001a76a764139eaa95b24908900f709a77326a1e7654104e131c475be03d6f511a7a1abec8e1e2bc2e83bee54dfc4cd8c390da8680cf9bbffbd6c638776825bdf841aba2d65fcc0f6b4348e08d0782771639f8e0935161a9af3f66edeb428cdb9bb3999cecd2a7aa6cdf2d39bd90067ffb495c0215a216f02182368cc35f677043d321cb1316c543feea55862008133dd99a58695d3041c22bb2ee48d2d3ef403ce0c77eeb3a8b16a8a836fc98e63c7046a735513e277414e94a10a2734c9b17c3e04872cfe537ee0c5873685e20e70e9fd74fb9a371d71a18d74b4f30b903971d9912fff05c149fe98489e5de12049df928c520abc873d19e355103925df67357b650e68b5baa544629218851ae1c25387d34541900728d55d817b7f351d66eb5a13df6a265dd173aae4d1d0475c58cd74df360947fbf187fb9f128a95fca4c97adbeda89a6757f2e18cc865460e0fe939d560f4cdcbe191078933ac56a340e1d2f48de080619920d7c6448c74431cf176c59bde64fa5a4ff8d10e6384b126afd819bcd1e6c4bde47d0c3551927236ab30ce9a8e95e4c7d4f600ca633ae6200b4a2f1d2ab901c5afa6694fb28a07e15862cc6f277a140d114b4905c87fe091d7f827468ca8ea0f869b8b985fb01719964061f0bcd0b39f9ae0938b80661f26638783c5ece7350b35b82e1bab491a5b022d26423dc103f786fec1001ed9a47855c4cd3e3a151b015c8ec281db4e868a4220a6cc6af668c1c8671d4edeb16cd597818a6d2d9aa35bdca017df8d6a87475e200a114302660d38e5f95d4210c02f8883964947aa84398fae6ceb76bb3b5937fd3921b8349268e29c1db88a3d554a3d3bb8bc7c6022f3d6c63829850d63933770a5af396de5bbf030b995ca53e158bbbeb9d15a979ef9299175966e2455b860d44fea8e61a01036f22eb11eb657818c8a15bc3474a64f5359f0649a830fb164a107c07ba91f7e70553b9866e84d5b7393b7cc032eb2e78d4563c3528b8674e0644638143c906b0e8126ecf5a88e57d1c35f28f7fd0202900bd74cf78374664e10aa1d2d54bedf25b428a2317cd415b8c438493b456377900fb448f494067bdebfd44f15553c40b1d7aa97b880bc6cbb6c094c741fdebb9d57e9cb026b7ee997f988a2933b7ef2279eff03474c4033fa93adb08a11f28f32da11777bdcabe6dc3dfb858d2339dc6555d801343842c72bbd5ee7c7b9c1e30c02b6a6f6ab39739009de917a85dd0cc20054f2aaa03a4aaee322ea7d9d09cca26933c8870dce55c93af1079f396e1c1c9c41fe9d41fb1d29f45953cd202af081b44e379ca605cd0c82a6cbd1cd5077a9db6ccf98d6f565ce5f504f3e6ee56083d79feca3bdbe6f6598d11a4307dbfc688747f908c536e772821ffc76f3e3355d5a497e6889e43a3b32ce44c544369d09790d51da379b75d55d4b40367df90edbf669d6e85acf24ec98e80327b9eb23f9bdb39eb33363e37fa2a16c440df3876f01c9f6fd443485aef9b02743b6561df923466ffb3a8aa8fb7c64d3fbcd4db2c6205ee409e973d3b1459ac767ee6fbaaabef1557963687e675d4d069f4bb2fdcceb87d4ada853d04274177866547bd33cb550d17121fe36ca4de676241a87541fbd4080755e0f42d32b81797706f60eb0682d247d5a81194302b6db50cce4a274d0544c8d918ce0089166ed8af436fc2e284f3ecb84a658eb2527c830df08dd284fd5be8925a917a142a6196863edee4be6b532c5070747992d8c89d22e567eedbba0b452a03edd0a5f0a1f6880bae0c2f7f9a74b35bbb6f7795c694bf4ecf1a70dfbd207eaf35fe10c997fc04feacb848ddbd9d30b3e852560146e5560fcf8fdaae784331568fac7480e8168a1a03e32441c4c1579ff5b02b8fbf457f8627d7c01c704c7a866da057caff5ba50c4656d15c57ed3d8af0a8c5910c4a99f782b9db921031c0a0b334a4e29541c2192fcae57c4ffc507c8c11b60e3401f5b6d800d871d2e5528a3d0a07d6f43a49da5a7720124815e5937699fa90e7fc92e655dd7e24727e0680fffa11955cccd87a612612a1e9d4c70f4cbe8fb7f72918034f2c3e4d0ccea1782f0b6be33d27c88bf6c59ab48be4307266f291725e12a379a8f28b8592c91567bdb3ff438678ed1a2ce6cca7e04f5662afbe8123c3063a1a872bfeb25377d1a6fb1ad4443ace902a080b5239ee5b5399055e6977d832a4940a7e7f3db001694b86ff720c32a2edf940d1796fcea4ebce2f89ebfc656723335b5a05136d70ba6e02a6a8a5aa77bfbf04311c78fdd559de0e960cf42c9eefe05efd4a09b55f5dcc91443c8d007debb5b0478a8cbd4818664c3737aed576dcc52410f57ea8f65e9ee31707c617256cbf5e6dfdcce0e53072b4ce4faf9577b5796ca91de65a2cfaa6a5d48a34741b5bb9f74a64cab162aae17f93d25ba7ab04e61f7726d18d513ba26961b394c89deab386c30bd660a26245dbe3c6935862cc46b3606b38317eabd66136971947d170318af31d06f1991994588383fc30ce530f8aca92fe29e3f7b3fcb1fef088250bd3a47bbae93c9e06dd307092904ac17b5c70e163682f1c385ea96586578ca4b2ddde5879f8c2d772bf251c17b1ad938302abbe4e699a1ff17fb3545a580c543ee2bc1e0bee777fee865aa63e88fede47d0497d8c6235536a68dac4f8ceb8e9e58dd1e3abe29cfeb75c3d7828e536c5e18d3e7e0921ce69a4c3ac284d384cc60a568d8c563546c2f96b5123a58af88b51b0ad5022373fdb6869f78e55adb6636ff69f2b8d4432e3b39937c2a1306f64da67e910b0f432e3b29b37c941306f645e6bec80b0f416e3b91b97c941126f621b2167e8346a130eafc04b27cb9ad99e46024ec6cdfe78d8223b1d95d6bc61ab930e0e5b2bc9a84666ff56b6638bc2bfe1c887db2b6dfd18d1b924dfed2625bb1464c46de5e3d5193b990d4c0cd0a791a3d044399590e937b98e44f8165402916a9179dfb1223499016771eee85c68cf6f0d0e9da966d8b72a45b42896a49488131c2d9e44353fdea331dd618a875cc78328cf30b97e07acbb938e9850f10d4528ae854dc5a85f61cfd32a13d505b55aac2a2a436561c99c58ad23daf3aaf354e279ce593829a2ba907457809c00f10ed969f98b1aaaea26793edcabddf43e50e31c50a6670259080c4a21ed1a42aa42486e1f422e6225465bf86fe5573ed820109f546fe1968f845d5ea8a44253c1b2a8743fcd8c2464380e36442183ead6015f0057babba6d5a65a1e51dfe7423906cde5d96b1ae28457989f43100be8ea07c8027588d76fbe45288ec17c40ddb44d6cfd0bdaaeca77c5b95670ce294f5e0a2deaaf4d6e344ce2c7b1bf57c41296ca333794d584324b9ee0f6cf4e65b35ab6bf45fc37a3eac21aa933728042dd8ab7a1f603795163ae763b38fbe19671d18c15bdeca044411d54966b641a2e81910e620369f742685becd79c73c1d617dda78a40432933902b8d6925d101641a40dcd5e375c3bdd14ae8cb9636f2990e149092ad7be6945290fddf91a12d6df8b1bf4a89e7c5463dfb604ad6d1d51621c6a9f2d454782f69a8a81694860bac01ca0e951416f469443e8d24b90eb0f0a718b0cb4055997957863f3f7d45884c4259a609909eafd1410ddcfbee146a05320d42780172c4b21b4f4c975d38fbdcf06404006915e7211a87a9230572ef43227ca3bcb13bbbcd9c8d8db68e3df495a1ceae6b9498db10e906417621279d0b9a939426007247f1d74b66840786f60f3223aa7aa9197475f788c86e8de93168cec2f03464cace9fabab66a7aa21999bc60e3b61cfd649042d5f4aae100babadf11604ab622539ac7a3f5d56aa4c88e2d809713e81def6657067123ce23193048e3465537cce780501b7ea5a7d6bfc1617209b441cffb52fdd9111b603651aa770283bb4eb68142e40c4277e296d9a29e980bb864a2ad81bdea6da9c311654ab96b84fae825dc7c6ab06020b1f254ede85c0f7b134a944e70bc0a523c63ba2d1d0eb59f7d9a51473c993bd0dcf3a169f8d9d49fda223dda5079061ef4a61fe82f486450ef6be0748d3a34229a24781294f00b9b45443a5df84a397b03a49821134c02db2bd9f7527bfc67edd8bd5e896c9dbcc39fa2144b68ccb505af63e7a681b0f44a13600151e40e2a0c62e2012327fe206bd6c087b7846dab949a654ed180a1d494529abd23292854a990f9b16b102459e8234d005e308f388da415de90881412284deb0341ad5db0a3649394e1f3e1414356de5a6a108274337f863c0ed38653de0f8f021b012b0369700e66667adb3d044b8ef5a23dae06cf74161a5cf455b31d4329a9fa6cbcb7c9f10a43a99dc60fb3577c4d599a6255a74b94f02c4d892416de7d6dc8b6a395d3c7ff4b7140466d919a449808e6902dd2a47e4db6e4eab79b54fe90a71b161397de47d08a8b95c202e9280671ce6b634430e55b2864b450a0a32c299d8cf743df7aa4769580808efeb3b4472b1bc141a291d50a7682306b4539c8a2ff5eab4386af820afe1e25bc86c6d849242ddd76e4448589db3aa38d11eaa23d346739799c867d4163465f11242295f193a84dce96a8c92c6cfb58c5ad05188c2e27505e087e1255d399258a730b6b3f7671b50180e1cb09cc0be30763670c2f0d700d10f68aec14633512c80ecc90046abf6bc25c2090b2da1c292032139a204e06a9d0c9bcabf77e3d679b11587af79f6ff4be29e03eecf96acea93871f7f7e056a1842bb35854a8aaa022968241b85211314e7e9f565b915f2cfcc49cbfcd6083467c2f1651da686993902da54c5206d90b440c1e0c27d1c93ad68dad35ddfa650f5fecd666d2bbb1e28bdd5a7cbaeea66912ef035cb6537309c7e4735c06e8bb9297e24ce08600c60fdf09ee0ebe80fa958ec0d8f8317200166cfa03a0418ed41cff2b2c2b3925d41c9e1bda33525ae29bd40df8e242e4c8e98abd2f239218bc7c2189c891d351ed64d32756093a56382b1d9218f20b49ac12663c56bc2f753373835337e5df704862e85e484add947f933d181bd6c54db63ae4ee262e7c4a7b3cfd39688e7f8ecec5f3c156a1e638677afa3ae5bf8ece6d062b505711bb52012c52b12540910ab335a8069a441e15401150d55e6b122fc7635d1a7c9f816308be4e8d8e7d1d56a9737f8ce022b5d761953a5c47ab49872f778effd61ce46bcefdc0cc85a8f1539a7b7cc3cd49aed7d47620dbffec360b7ccf9562d59c8f8e9796f7bd31d3929657d31266e67a4f0cb4618a85591773d62bc636d8a7f70259a36aa0cad89894089f23478e1cf44be061955ece593bde25509c27ba7e0dba7237b80ed5853e17f0b180cf4b5717974df7dd260ab4b986680aafb7ae293477a0eb9b6ae8fae6165ddf4c43d737d1d0f5cd33747d7349d737cdd0f54d1de008cd1ce8fa36ecb21e80d7747db30c952a262573619f0d40faf4144290aebfc2484ff46d42586e57b6e00276036d92a1cfbc3318d6c9d0568ab599bb9285a278c1620a0f572eb0831834304510040f53b480072d6260d65aab05c2bac4102d832ebd76ad426785b2ebfeb33a21810a7697c5eede962bd1ce19e39b16ec53676311368e629e9862d99866299215adb1f1a7b06cfc25151c6cfc2c25ae6cfc3c436cfc424680c6c65f64888d918c70b071cf77ebb86d910fdbbecd996877b5f3c00996841639eb9cd29527eb1b621557063353d060420454b67f2a890c6c7fd4bbbbe34007db3160e3ea4ca962df6c654a1238b6ff4bbe720229425421650643f40854845a901087f80857ace0240ef111b0b0333afb8409410660210862883b1a38e0a10796b557c0c0e0880becfbfa082c8888f67d3175eb81035f8fda0ea280623c9181ec6305515e468860dff7dcc34843c86998b3e65c6040918c00a2082af6d56614eda074dfc801eed5d45fe02030cf99ed1406fbbc7922d35fa760fba7a044d9fe25942bb63fab08228830c2b5bb93c1c376f723f4b631146cb507fb3e5d635f1b4801abe1bf548867390111a60f51c3f62190b683800443b6ede54e71a05e6b6916f4abb4f36dc449d8866dbecae0a6288e7bb013877c8fb138e4cbd9ce7c9547e0803e6d95d96a10b78067258b6ddedab17bb478abe35e423bff084e74671ad9645ac041d3daa67b840e68eee55c90b79a788b5ad7e9f3e3fc5889da99cdb966d2ce5861e81325c4ce7f629b9d7999f19f76b6f39b24d0a711dfec2abf69b4619b97f9cd2534ddd74671f29bb2fcd607cb04eda13a6881910f5599ed5646dd6265deea5e081bc526b17326daf9ed05aaabc6ec2a9b418354a3243ba82d346aeb7e8d590dd41ab318a84667eca52f7c8c9ddf5f405d06b4157e7e77410d529d18b12b9957f1160968101a6a4efe2ca260e75c8633f181145d1fb4a200b8278b74268df4995503b06f7a17fc55454c5affe935a9a99922551ca9c226d3bbe0f2a777315dfe44aab8a7e649e7fc2e23cbaef2eb12dbf2e35b7eac941f2fe5e746215ee63f8d44ec2a676cdb39a4d5888b29626889ef727f93e0cf5f9d60bc84977075128af8c3317b89dfc8fdfc34d42095e6dccf4f698c78ef9fbe2908565add9aee876d379cf4810ed886b23154a916081449625795fbee29162f6b967ae4658f342a164ba93985aed781ce5a54e48ead75979bc42f1985fb5a7ead650bb5880a5ed60f36a069d4da389b7f04eaf6a74e7ba8a16bea7f90a77e4a9e29f70fe9bb973db668fae79371238af6efb210173200efdcfe0f77ea62b302da075d40072de5e1faf0783384046262021500a9267b99deb6afe32df7bef4d27ea412a029f8bfa766f99874c1b44b8a639f1546dedfdbe03d98b7f7fdf78dd4d472ba9d92a8e8a46dff030d9465b6397b233531ce6515adc353c7c46bdf0ff4ee83a0a638d78beebd0f8e07f0f23a9223d11e1bbd7fdbb773a47d1de6435c4c56f274226a52138abcbc378fba8a76991b7979ffd45bbcc8beae5f0e8043fb07d9a6240dae4281c7b6b129795260d31350e4a6638712ea46948fa8265ecabcb563db53f7d66ba0cfa6e0ee3fd281f2e947dbbed34eb79d2821eb926119bea292a7b697a432fcd5467b34c5e182ba5ce8ca7e991a5df21738933eb32beeb9fbdc5fabc24ff763990ccf300dd7b8dcc9ccaccca660cca0381c7e54156f9d304b1c8792a184dce5430905433941c5eca386eca3a0d84749b18f2a4219d947cd38ec304ba89719db3e27c6b63066d01ef75d6576653994909716054335c9a2fd4f94900ddda6436a1045c1a6d79a54a03833e07d669b9756c68db80ac5b1374fc232478152d8c02ac587a614095a79f83c76e5ff40537eb8f7f073f8a7fb90044a95404019cc610b3650d3eb7b5f49d500f077ef02f71ed9914a3ed0af57d9bd0e7397cadddda5f8bb91bfcbfcbd8ad7edaaa6ffb555e64abce71e8f4abecfdde32f80f79cd038e5c7232b477a4c49e743a67f7598c77cc8894c95c1605efa5799970e8b3981c1b6bff5983ba9b24a46c15f85accb08f9af22b04aba132f3fd880c36cd63d30405a53e45e8ee36af727c9fd7d17ba8e2355f64995d322468e20e9c692fb22468e20c1a3109e5d694dc91ed1d5b6ad6f1ffc9b1af4c9cd401f3b2b567c040f68cee6a5ad9d152f6d77a5a379d9638b956d675eda6ed6cdbc55bf8e58e62537b3f9b9597d9948fa646d6b65b60aae81aeecebb0ed7fe4997bd8f63df2d43f6cfb993c53446cfb9d454246099333e07d5a59adf6cd2d402bf352af40db99ade2a5b55d0d23d9b7d9429f3599725c2695e44c76afe4cd29b47fc78db6ee1729740f0ca59e9476d697cdf9429f6519027551b3b418e31769eb3e2ed200e78157ef0c93d0e0e5fd725324f4499564c899daec57e9be5be0deefbaae13ed535155c4f3be2241af2acae0e57db30b5d44f316d1f7971bcf1ad69f35e48d97f70a1ee93772990cc5af2e1359afd7b3efd723fe5198aa81e425e271a95225b2ab8bab967af3f2d6a47d95405a735383072111027d7a50d0081ed0d683cc28da9b38f6d729c4fd453a95d9c60fda065c2974b869cdc88f97f8f3476ff691786bc7c62f03ed71fb1e0ce32fe23931d0bebf9a7521d1439a5200736fdfba5895fd1e2cbd074926e6d5d6151609fac85b12bbc2efe290224148ec0a3f8f5de17fa0293fdf9fbcffbc173509943a9140a55de1ff482012289337d12bbfa7e6e95bb0419b2a2b8e2a4baa06009e48d2626d735629c94003fe24f51584bf36c15f9de46ec8ba4ea392d3872f8e4ab46a00e2835f80d3872129835de1378d4a447209890a85ee897889f15b52659feeeeef0f6dfc7a08bf26c2af8bf06b197e3b527f2119c14e69bbfd2ac2a6ef421916a396be0cc7edd365327fb0f3a193d2d9bc7576b12e4b27a533ea645d95ce4a47eb6a1d96eea84bea62dd50e743e703eda99d14277467d41565d1d6ffb4b0fa1886ed632b18e399b7dc071ec244d808cb70156c2b2c04db65b4e7a6b167c016e684e25412c37ce65530ccdff557ab0b24f19f3ef6298208dfc3c04bad206b7a8293c73e2d8c237d3886b9f0a0ddbf8716adf409b1853e6f364735be82ae38d3a64f4cf399855957d6fa61a8d0f868c7e61ed730162797aceb7e4ee9e75e9b7b4a52bbfaf91e2481bcff484cf340cfff2285be71d93fc3115ff192c435bbe28e36f778095d37fecb15b12fc4ad6822e9d36738a615ad42a17ee725a7ea9eee9ab5189ac63dae718f8fb8c736eeeb2882cbbce4b8e71181f6e4af61cf80f7c9837ba02bee7fd044a49018c1e6f2e69ee05e9be346b067c0fbb430137c7724a6e12b14877b730b9b16be4aab3521bf6fbd02dd8306f969b886af78c9fd073a68ff13d3502f9087a2bd05035428153f34a16ddeb2e40ebcab5fa7b67bafdb2348b4cd45c845e8c6113a8975e5ac75ced1f57b3500bbfe43d00f577647d6a020f03f5b5f1536d6cf3627069aeef393509cfa33dc7dfd5edb750f2c7d60e62e8b55211721da930375e9190fbbba9c2e43e8995681264f7d449b0cc5b0782046c522dd0bf199cd6575b0e1408abd76b556db6e465bc987a5dd91f68a45bad7362f6b92eaf244eb1ba993023645364a36351b28dbffdc11da81d11e93b79a9c5c5e3a181892fb265efa3b7918141b221b293a627260d18402e4cc8e602d108149a3e3c51f99a7f95b9bece0858c04226846d50fcdeb781d2410bdb9c0a47926266753db71036d73a48a42ef2833ff4d1ee6ef84f69882d8cc6a8eff931f8acdc20f6d6635fea6199b32717f9a4c9c89f39b75c5903ab4ce91b3a5b96d212ec4c53f75171a0447ba69c698b7274aa67477cd2669298c79fbfc26bb07d6e3a4274604c54b47a1625ed68a92e2a53f8aa800566c81e59c00860a7ddad4eab6a9d91ce5787f1b1b25eb0aaae144b3c4e3457b60debf078cf6a0c477791b2e6810f15d6feef5f3b0000dc235d9a799e9a9bb4c3a3cb4e20d738ca61b23f838c6ee61c610c4f139c693c98d361e660c1f1c6fa0c69c6d47719440de371ea4975aa7957626fb429ceb89f538f1f2c9f8361e1cc3478d389b66bc6697e3c5ef81d1a037f73b6ea07b62648f1398a5edaf92e9d346c6f645d01c7f1de3c38c0f85e238cecbdbccbcf7df115a42bdac4bc7fba3602821eba2f1f2cb62305a7a6a36fe36c61968d01b148978a17fa10d432c869c89e35e0b8c124c19ce7134cfcd3ca7e3398ee36cac8c36339b6eb4b982e638cef72418a14f199bcd6cbfe55223b52206660c6d118a92e36d66d69583fc98cd6cfbcc5b3a94f531964d8ce2b8156f85ef6f43a33de2fb87e38d979e4dad478de2f88e5008328ae33b42e32dda76d4210260767e0cb62346716c4d0e34cd2853b32bff9951666657fe3a4619da2873e4a59f1fe5b4f162fbebf1e451c36983c5cbb67f1e63a74dd2c92328e636a451b10b805114cbc2059ae6cf93ed64fb8e4e423d8eecea6ef11d3d9803b4212a665d36eea9142a66df9f236d6c3659545de8bb4fb04f13335233090856f147e6639e8a05507d8a54fda4aa0e693c7164a69e8929c46346d54fccd33c0d09446f589831cfc40455473afc13efbb6d96680ff7e1d8e3c84bcf36b5d08a27dcfded0879e9224a664269f1d6f9b1edef2613eae62d47cd50565034540d85059505654325a1944c21f7b11fb2ae99174f183747f678519c9d21f161e03efc93e34872e789970e85e2b84d4d1455228f206fb928dad46cb2d8dc7583665386cd161e2f1e4222675132ebd2018aa228d2bc10e76c6ad68592d190a08ce6a3d0fc89926dff9d9875d1bcff8e137027b6e364b4c1e255fcf06d8ebcb4c1e2a5ef84e34e136a5323dad98979e93b42d6655373cf3b4236351b2daa2cfa7bda196e1d3b42db3f0799c49e1983a69c32b6ed9cea6657fe32e3eb333d504a439f363521257869491162466aa6466a6a23fdfbb4a96d7f9b9abfcd91bf8dcddfe64602ec8613e101ac6e719741179912dcc84d9f6ab16b8e4deb8f52ec5a02a35dffd6120851021e767d1df5ab78c25bd13e188a43b2d8d5fe5d6d8a04450e178a33f6b651b1f8c5ae7f87b40083228a7d390a9a4e19a05002b5e98d344c9b225511639bb0dab12952951c767d1b55ae80d9f4bdcad1de334da4e005a98a147be97594e984c0761c63ecfa39c421484ecc5ab0ebcf88435a803961839827a4dc8862d7df7143a6125b80697f8af484d06e01d6041a33620bb09b510e9818702dc034b929921341ec5a69c416601ac7a6484d78b1eb83a62b5693c964fa4cd9d4b9500c3a97c3640a4d261b633a69d8fee0a9be15b7ff4703fdb36a6252f5e3fdfd4b0275381cf132bd67629e992353bb92e73b8757b59794907315969af9d28ab738fc1faeb57e1da3dcfbb4da63e3af35ebb24737a4f929c5e188d70e9ef1157e30e5d76e8e8ce291acd2ae3ed8f5531dc75521dd3d0f0eba3beffe60e39fa13d4edea0ed5f2943528a684f15a238f83115daaa39d03208bf8b262409f2123f2cc8da1dc06275e481a49d562795ab7473a427b1ae0a93e9b3ca60396b9d4a51d958658ebb0ef3a8b36a65043477bd98f86bc502c6500aa909987377632436ce4a26a5300632db3e5958e8984d9164566410c894f8c0d0359b22c93210a240d3d800a3a1535a804a68d414204dc388a0051a24c20301133e9cc10406c02974b88335b497038f0ced69f176d03929f720831a34b729d2125a7c4b4bd410b0048d33d239e75c6a9db307ef2ef86c1c892a2c206185873e4158a3844d143b4860ab293a91472ced28021c9fb891433e987e04b27148e84423fb1cd8d0118219cd4dcce1c44d870cc0992388725871434545684608231b32452a213a10a3840c4b8d985498b336128a090249078e278a522c2b524b3988221c28a2da0d0f22070f60a02ca13c1404f1da61a06e2e40193133810b15191326169a184a22b370c48ba8638104b01e502c2c21cb5957207008411d168b87e8256634c46f0ad194a2318ab297692d67bcb30c76ce5956f3153db2dd5890290df1325fe974582c1e275e1e4bd7275cb818784547d9ba58798a09ebb0583c456c3122a863bd3b89b961ce3a8a94cc421423fd2448b390c4d10f3778f1589012fbc1f6c28251d10f584216a8dc726b0374b6ef7fd6f329b48e4db7f0e28c7db2b27851032f0b2fb2e433bc8082d3c18b101879f1815c8596d9740b2f5e7988313a1eb4c9d649a15f521026691827402c5a87a00381c645e49a07b0749101ee890e37dda28b0b90808b33c2275c90f1d1808b2d8e8ec2d02e560871416504486cead97bed2d7fef61bc25c4f63c8f3c63a8d9f96f2633145f5129d948574959f92b25165f51d70a5664f115dd9eb5e0820351b8e0e11381c5b3050d6651804b324a2f741fb995356aabd7532a8b10bbeaa91fa4647650d7f7dca7d555025dd5bf42c3b2b3ecfaa20f7877d055fd0f4a1082ec4a71b2a63874bbe81397b9ce9a2e59294e8d586d2aa5b5c762fd9f585aff9f6c4da54ad69fca92c5d2da73694fd4a5be690cd0a5de93bbbbd798dcddddbae8ee5e8406af75f72815e4ded97ae79ce3accbebeeee5f6e9d626dcbe1ac6d6a5b27ddadbbbbbbbbbbbf987618d5eaf662ae73e9b2cedec9336ddb4d69a9dad186fc8946f28b0b74fd50b469236ec44b1cf467e4c5a4f1cb29a4b6139da26753209bf6d8f44919ad29169b522f367d1fea324257fe2079668f3c33c9eac8239609be8ddc405b97911d3e87af48ab9b2c096a978ed3165f8b2f07babc582314a7bed8c03660ee2d599af662af4e6d9e19ebf4284f5117ebe9b537c4676d6b84e278154723a1262fad2c963562e48dd023f0c564e4f31f425f7df11866bc57e36f308735ac6391525f1fbc6d360886759cc1e12d8584e7dda6b08e33e44d03defa0045786e6072126d4405d7f112b4d6cae0c20426bf8475cc1bb441296595faaa8a6c970da2c28aca75e4364a54519d47bc418a82b1f18242a16e509052f27cb1f7de7bafc380ff524aadb516534bc280ad0d2f36c2852a501cfa3aa5be38a4941ea0086ac43cf606867e4dcdd4dc7b31c6f8624c03def7e9b743d1740a43d3d5558ba18a92959ab4e8e29d363650f7de08718c387c280e497128b779a4427b42dd335e52182f71788594dff63aca6d5026e45e421be290fbe30b4c77c11b281c3892dcd4bd8fefc532588cadbd9626b49f63ecc69c3b8cf5b5760ceb0b29b6308a2a4a69ce740607313940dc540e101787b9024d6bcd45610ac385b77b198bb8b55efdd590555e53285aeb238d930fc5a1bf83a4383ed2f04a715ef0d2da53e85ae2750a46875ee62b845577e925054f94527b3f4d3df025a42226adb5d6de7befc52e3abfd46ef25297038476981c20acb5f65e6b41a8c15a6badb5d6d25dadb53550991d54304876d7fade825ab7d7cb0ba401dc51bf1d773b8b6d753028a5b6e60f3f7f4a7f795353933fa5bf06175b5babedbaaeebbaefba0e63ec47367e7b39224093bd98ebb2f789e1c9a3b474f7def3bc2e775dd7755dd77598c318638cfd025d4a714493754a350a7a3b93ec9c0e402898d41cbc21ee90bda91b7bb259284eb66b995c6b125925803a5c67123367c5fb6eea66e606a76ecabfe190c4d0bd9094ba29ff267b3036ac0b5cf4a90808d6c01a018ad45a04046b600dac5d8c4f247831766b122f87b9107c9d1a1d8b6bafc32a75b88ec32edae4a61baaad367ff8f953facb9b9a9afc29fdeed7977cb903c32e7f5e08e6cf4bb1b819140c7e3f2f43c1e2f0f51c63008497936bed0fd6fee0e4de1e36c0438c8bcbc6d59a57b4f581e1eba3019f0cf8ece0d3c447071f0cf8e4e023e48383cf0d5968eb634319e00b4866127797e260dff84a0e6980b15c920a859639899297bfbe2200cedec5ef473533ddc9b3b3484d117f88b14b356bfe947ecc5d7c5402cd573496cd7d2a0808f4a32f54665792f6784fdf6747f83e82e3d7598c2f49edfd1f77f775ec6c87eddb18e03379f1e5b2e331c02e8327d3bbf80603bf49a029fe0078277f843c094f020924e49998ac2f3409bf3f2fd99bb7c6dd23645d77c9aee82fe55bbe2d915de8131f6d9cb3d6a9d47f59b258fbc44727cfb619553f36404bfc03475c614ef9f7e06d9e895933aa7e6adec7fb2081787ccd33317d5ea02b8eed992a15f329d6be3ebebe2be7e9e72ddebaf194f514f5ae1f4fdf73e2c5bc21109ebe27c55b45d6a5f3f43d9957c55d3b4fdfb3e2d1acabf5f4bd9a87c55daea7ef65f16cd6c5f3f4bd9ba7c55d213c7daf8c25ebea79fadfeb0b725790a7ff35f116ccba4478fa5fec7be2ae11be957fdc418e3b768c3966aa97ba831c8facab7c5a693ffe8f3f92e7932a14eaff3f79de403d930df34cb68d67b25f4c3b541afd3d66d9984900c078977490a7ceb1b4e9df99bd33ab9a59993b8b216736756738c89345ffc6c819a1466e367257b8232fe9bf8c5c9297f45d464e69e4b68c9dd0d839f192be387643632765ec646367c54bfaded8d5ba2c5ed21f61ecb0f88abe086347b32bfa41c6ae8aafe8f78c5d915dd10f61eca0f88a3ecfd8c5ec8abe6bec9af88a7e6bec5e76457f67e4caf0157d9d91bbd9157d10462e8bafe80319b99a5dd1ff3172567c459f357232bba29f3372527c45dfc7c80dd915cdb74dbd27de3ab1e7e59bbb4028c35b14290c1d36fdbce4ae1b9352243084367d2fa80693bed784be07f39c788b227da1b4e97b316fd11af396aad62a162f29ced3c7b60f9ebe69075d6bb27dba10fd9a30f4c9248b0b5921b6e6ccb3daa68fc7b3ce70c6a029abbfc9b1fdc11834c5c9b3ceb608768f3168ca998f36fd55397a3002e108030c326ae69217a50e9836cf63040a6926d00dd89ca2f2a79b23f292da9053544e72431c142fe95853c99aa471a07f9ff936b4e9e79b12fdbc44df7bd1771c68cf18faac592809436a68d31d4b7430a9f11507bc2d6eb5545106521563205511c686a1f72ed95ac05a699552e546a1de03486ba00ce1a384f6b71bac49b6a31c566fa45278b105cdcc23b864823e4a68f184bbc5de6af5edb6d75b89e1ea2d950cac6f88ed6fdae1fee41f8ae3ef33027d522cdb47091f2aba8a27809c9802dedc73e20a67053627ae8037f79db8427dfb60a6d5b37cf144c9cca3ca032637c2504b8ae3bfa5c85b27abeb80dc4565a0e437fe35668197e96310c96c47a2e28a91bbaee9df7198e5cf534ed9fe426afc896091b2fd350efc81bc48a38a1b17606cd91202d312539a88e0850229a298fe48bca5d25b80bca43d183f9e794d650b500daa4dfcab93d6255529d46705cd42a5f00566dd5f7655b718c2062b30b9ef46a01c2530bb9397997491bd136cbac5120f3bcadbd50934ddbea95dc5ecaa1b81bce7defdf5f6dfddbb128de6f2d474dbfde935a964ca4f679584969a26213c5ef2741192a92ac43d66a2dd87f6c3f04d24507d798cda556562e65ca1c5ff5ec9f7ddfb949f8f54d5ef3efcee9588e4f7e2ff741ffef7e2e9828e2986cc0b8c103433c377004dda514252c911914c01cc146b368824b5e14776a4bfecca45f781e2f8927a04141b086309b5011a63dc6076ef8d4b4a1798999cb263ca121824cc8e9cb2c3489f7ef4ca123bdd07f781f650224bb92a645d15a426adb5d650065493d706fdc88fdc665d4abf3ff07f44f1435265df143e4882ffbdb5e4cff72612a803ca4c2a915d0d0d0d7521f3726657e2175997ca7e2f7e1f7edf2bf11e2455f6f5915de570a16df06eaafb2afb9e0d1ca9c264bd995589545952d5bd0b5cf7dcbbd0bdf75e27c4fdc88ffcdde6ef37ea62a2430e3020e24052d11a5798feae445d36ac38e289194600e1440da63fcd8fecca6d2e4fb4d7ae78e9ef449ead1f1d116dff23eb656c772ddbadb52f301c36a4662c204fffa650df9229d4e73e359e4c76ea5d44c177ea398ec7e357a1c03dbe09d2a7f7f25ede0af284bc9523478eb7d65a6b75581b00ba659e8a3c5e35f3aaa7fb49f24cb2c9af19c11d96078fb3ee9807ad0ec5b1563c613ceb96f1cf5beb7b63eee5ce4cb38dc7e209d667f782dcf81ccd8f4fa908426feefcfd4a45102acd1d00ec8c343b2357695af78bbc74239af74de3a69d4adddb7ad6b8f3fb69befc1eefc35d3cc1ee2ca3381ef3d29d74344f69f97d8fef7d3ca5f7c10c0bffcc41aff269bed29e93c9f6208ad09bacbfefb4b5fa4d337a41e30bf49097d7c84b5f9151582f21d010a86b6c0fc82842a5c92239daa23628b6a0c0643d15a9e8021321a6a8410993e515adfe3c6df13df8336f3187f4419e8f43f620cfd40d5992a7fe80a421cf2cd2b834a1697abc408fcfb9e99c615ff2cea8cef33c90a742bc48cfefbceb3ba5d3fb699f7e459ea77d764aa7f76067a7d23ccf5fd9d7105cf8f121b41ec8cea8a221a3ecbceb75be87bc4376b5335e22bbf2d7196f915d79f65e3fac0f8104da79163642bfac0b6ff195ffcb9f59ebd4cb57128e084127041208c8ab7e5a1fc2874002f1905eeb99983a2490ea67e7755e87047291dece33f941ef8c5576840da4b5094d916cd8b273fcf8a00d4d7f56a3ed3f8ee3531308393e6b1ce9f671a4fa893e691ee64f8f66ccdbeb8619c7babd9717447bf0f6f7883c29376efca977bef1676ae71b3b637da2a8c86c8dd4c45b6a107f6dcf59eb33b55dfe4c6dfdb4ba685db9bc5683f6d0bc3fde4243daedab779af7e784bce5c1fb734d684ff9fea089d29cc22ab2903b1bba70d8c685e942d46aac3463a57921aeb30d5d3a0e8736f0ed4294cde10d9108dd3d9e66f4bd1ae9eee179a6d548f3541c5d89e2f8d38c7edb427b7cbb27e12d580ddae35cfc658daa7bc9195c00e15bdf7a20405c8a976e8348d57d5c86eff8b3ee10560242c3fc7987ae27e4f540d2a8208ae35b4030e4319e75f3e862a038443c3002820b3f7ee7a9f803e45b2410906f3d157f58bf4302a9eeef3c104d01ccdc2155308ae3bff340a50cb4a0993bcf6a8dd4dc197d881c1499600d5ba3bf7ea062ee8c4074698a2b68e6926f06e6149a076946225e7a40964071fc69c61182669b07c76771c792ff0ebbc392e3eb782a0a20c78f24f5b2e66bc67f1aeca6e131d22d4363c31a55f6779ef54046952567f861fdcecfe0c28fdf21815a44e020081388f54b62b440c39c42f332aff3409efc913cf31e7fc778e6bd23a8f537bcb963ffefd7bc1dcf24dbfeeff8d6487d67fc9d714a0dd01ebf861c779c34d84df3ffe378e6fd59689a7f1a9a17e2decb5b672a8a91660cc2833e6f72bc0e1defaff3d231aa66fe42d93946d58c8abc43449e9017e4650f2c34f7a7f7720184d721811c8b2a3f1e88ce88866e60b2be8a32a40b4a8ca830817c155d60128516483b98ac17626346ba5323938d633cef0d97725a1ba49c22bce02ddec50cbe4fbce54ab1fd4d2ec5a302b3cf9b83e891978366c0270f6b0432822a30a9b8c2fdfaa7f7f25efe9e90bf07a3ae054cf1c30e6059c650c30cd3df8b51d70e30929a7835b9e1042ff80155608240a680144087880345e60f6ade2dfad42990890fcf4101480324186f9dbc65126fcbf372c7dd1b9ba28e744011054b963a0c870471864a5eceaa517ed28929d42131851c1351f06dc94a24ae60ff92558b9842a64dc414eacce22c3a03a1aeee5ee854cb6728f5a764aef7762677dd027de6dd435381168d6aada933f4173259e8286a4d2305babe498c6a853e5d513f87945a5f3546fd9816541b526aed314155cdea935dbf068dfa38bca88f4a41adfe3d575498af8834747dadc51abafe0d296ca0ebdba0eb93c15386aeafc6131f227de628da08ad540221b4246dfaa933f41759367d992c741458367d51892b9b3e7d5a95a322b4954d9f7e959816d89e88028a36daf46b36457a42887e8c0de813a15533fa3e20a0ef64d3b74d367535f4598536fdfc05486b4e12603b66e61d8167b5d68a5fb7489e0ab05cf8564481ce605b12d4e1450f2c18aae209e5b6a961a14f199b47f33236fbb650c606a3758f10c549f296e9fd656eb4470c6b163de68692891faba1ed086d1ea13b9ee1832e0e01bf379127866dd377e389857013f2a4220a763c2ba0b46df854e442dcc44b9329c936bd489a5e88c78061a6f0410f6f9ca1511b7cdf204ae62d5415d4cc4bffbc758c3faef8a2463d1225f3d2cf88294281114e58408a9513242046840c5a70022a191081e90f9266e8b307dff7d418f377f36cff1e98b7ec98124fb81b24cfbac19891e64d70ef01081f96bec0c25ba887f196a7c354f4d914e507bdf1c6c38c361e348d391b35ea0851a37863b439b231da60c9d9a8d1349e363746b129b2ae6fe22be742d4f84dbc8479e90467eb18af6932913d4e3ef644315fe4f2fe3b6e53e42206e01de9bede728ec398e338cc711dc65528a5f4526af1df7bf19330544bffbc59ccac61dd6f115681154162aee920aba08a1dd433b28879008b0d6e988207d35f5b1793258464525e200611239841ae819b22d1ac0451f311424aa8628b67634012b9419f2921760c2e554518b645770ce82c57f185a7beacd97853a42a92f6c9aad99ed49e24b1aa1ef2557d8a3768b3b5ba8a229be9d544645de4d5fab5ca90c4f70e1df48e23f4a9871cc81a95a00a324ca0251e04696186bf2487185764b02ea01c6098404bb89719fe921f26f8f5c1709c92e9ec9e3cfbf49e066e63ecaff33ccfbc64b6efbff67d0cb43bef7716c08580dd5d47460149a137c117e2a078828e7d491de22718c7b2983d166ccb7268887cf3ad29a8d150f31223c85dacdaa4c26ee064d77c89784b951ad244346909243224b1db84baebbf501f0249688ff7b50a9514a8274d63d7074beb22624ba8415ea839f5cb5ded3ff10a2589971509c579a1e6bf620a759b506b9da1ee530fd11b12199220f1d6b8ebcb407bbc078ab7885c17692286a8b52c61c6c3da6615bbea212feb6b225fe5dc34121932d00b354803684efdfa4e6e799cd994f6c090b4eb83baea214da48bea6b597d1f2a5a7f7ea308905ad78f286c80424b1037f40084496350c519386440062910c2a44f47af6e69506b758bc596435216aafa315b6ffaa7297ac8cb275e7a8ce29ca4d89755a1e55682583ae5cdd7a466348cae9f430d939af99af226dc165f5b236d457e8c1c79c18cd8b5d98b183962c1f05a71adb5565a2fddf88e2278e997e4f1d2b977eec501742647b2ecca4b1e2c98f17f8bafc5d86a257f1e7f21fe25f8ab2073832cdbff08beb664f108c150c49cb54eb1288bb2eceadeb8dbd572956e1977698bb73858fd7c24c459e1644b49bb3e57e5cb995683a2cf4cb3fffdf77d9f0f0bf4c9da306f914a68b7f74fb66edba797f6b8687afb980601dfd2accb63d9daf8cee44413f8f4e909fe70a586c5cb8c05c5a99fafa03996cc34bc29d252d1be3099b754faeb0ebfbe7cfd7b8b6c3646cf82f64840a3800601698f73de67d1231d2b97f1c7c1be3e776fdb3f776528691bdff7691b7aeccae8965e5ed62da369e7911bfdbd917b71f444718440bd5dd2add3e2a56ff1d69965dbf2bc7c982e5ddfb5289501dbf57dc9bec0cfca3e21126ca17c257ce265357f68c27953689b247d662d03b50dfda00da25ddf34e62c1fcc65fc9cc0aceb93fd57c4c13e210e76afe8b3eb947659d6f7b9a2cf4ce36ad1a64e1bfd4a0d4b0e1a3fa959c14118a7508fec7fa19330e665e5c66b853e43184c93b90a4c00f8bf14ea86e123551e48aa3c32857af47a21e540cac66fc72f8b97dd76f2c3f21d7969fe7085e6359a3ebf1afd6a3968fbfacfaf96027e4b4aa0ee13c4afc75cc5cb8ac93cf3b2fee651427f9f152feb7f4299f635f9609f932fa6857665d74759d9f5fde8a3edfaa8ef0a16cf39c0b2ebe72bdeb2bb7e346fa9521061f85e7c2bdefa5e85c2fd988cf6a9e802ea634820253dec8003664ccc083483030cb0e8c1044a51710848c51fd44ff95429bc1dc2fd37daf746f06f8c53ec73230af77bfbddffde9227f81f0ce07f5f451440d1880b308fe307f5379e8a0580791c3746a098bff1e02881ba3d6fbc1f932297e830c4306f3c8e1128e4e274839c721f65a44f630eea966422996b571c92bf37e187d1a607f1d7e4839938f21302400e3a3bd9f56bfe8432166f9de0e7efeccdfe3e9bacfdf2831c987f461ce291292feb8f21347e9b1fffecefed78deec4cf3557d6b12b9a79eff0711da449e396bcd911e79fe2ecbfc783c3f32869b6d3f7f30f26bf20979591f4891fdefbf9b0d8e31dc6c1c3c68fb9ff52b5f930fe62512323fa4e84fc85b4d3e98b744a7f915aff90f11e8334391428342e4adb35392e22d53911109843e9d96afd0bc563f0b5957a6d5579097f5ab4d4c7fefb44aebcaf0b29299966b5fc6928f72962b5bf2cb5bdcd7cf415d5252f823097d3a4db6eb872138a1cf2e4968d7cf326f55c9b39cb5b66f5f34bde913a94b7f4f371557a0c149deba755ac2d1bfbf1e986fe64a2f77286b5e6219f351967c85d2bcac6f84d3685ef323b789351b0e4207405ab3dabb88b74eed1b66a8a6f461d2d7a1cf435f88cca63aa06dfa3f5e537a867e0dfd1b1d4a6d30a01c77398ee3386b9f73abcd1fb49399564b6fad24d012132fa9ee188862df2aab4f5057fedbaa7f562af6256d1169b1db99c5d8da0c997184dd66b9b32c96666bb6c8c8165957124bc4aeae8ac3b7a65ab93ecc8b74032d3698f76b962bb3ef526cdfafb77a9fc33e4b626735e82a74abacce2aadd6eefd7b6bb54f9e5e6badb5426089bd550a267d5ea0dd12798b46abd58e8eeacde78aae37e5f66dd7411b405a735a7a2dbd979260362303762da597562d55c9865f1bbbb72e5154a374746dad433e827c3d8922a1d164db57d90f6153da63c36d5c9caee45fd821176a9d5a4be96d36c5cdcc0434ebd45baaaff198121f33e2c384b6315fd5bfe5ac535fb262b6c7ecaa5ab73a76c6d119341f99e67c9ea843765545fbf4ed11fb8a955ae96dd7afafead6b75c6fdbf761c27ac0b34449ecba2d69633e4e68ff82baeacbae6ed6c85b2e35353736260ea0a3a3adafd8cbc67c9ad05ab258ec72aa11a3224ad0aedb47a641bc454addf2244b0d27605b2db5a6136883dbee4b9e336cfa33d44aa338f56f7ee459eacbb35421a751a1d19e2ba8abcaea4c05bbbe15bbc2ec2ab32ed9ed655d8e045dd51f417ec2a9d8d56375c8ba4c64bd9db24efde9c1664257997539175fec5a5dc90a13623625dd67099d3745dab2655b9389045a628aa86d637608ea72f91ef0c3ffac14dbf4dd53ea3a3db62ea4db74b53753bdbd07fbac373b44713a53b443d055b5e4e9c16a9f3676be6d62574b4593a73d62d7a7e400b2299236665795c70a74452a43885ddf87bcb582e9ea36b7791245c20119bbbe6bf1968f5ddf959eec5acd8a9446935ddf3ea9378fd55b0da4125a1ce2316fc5accb6d3690e3ea177ee29017a17d45142ac5db8ef4054a7c60577105fa98a4b4e4484fbad9aecba946cda64867dc76dde40b623ee22e2a6caf78eb748c2dcd5beeae6a64a1582277d518d5b755eccc5af11645527ab2ebdb9a8dd5fa7eabf54d3be85adff76b1bb3313b6489eadb22159ae8b3dcf5c99089b708b7d6cada3e88555a916844187348b41812ed65adb55660c118e32e5b41b2a2a8ebbaec2159318464850d17e3ca001a486b54e60d6f4ef91e8f9e0e1818dae3e1d747e2b7f610e503539821d701857ff2bc25408030c50fc7253b8838324d5f8f209181ba2af0a4480728a04411a50366fd24d43501218870080116505039c2ac4fce407b4f7aa1b50a3c51f449693e66a04f4a2b4244057b7389a850e4c7c8118bc673636fce39e7f1acfb88976bac91c7235e1ef1d25a1f34d027b571ddc915bedd30a999af819df46370979b14c906af5d8914098becc9444ec11f8e415344728ab5a0e79b487d15bc25b3eb17a9ffe3ad9a5ddf88957d529bbb2cd21850f6915a1f49fdf0ebcb10924a681a7a095d7e0ec458677f234532c1d1aee20a5ed1471ef1b2be60016ea45320d176b764e7b7d65a8b3fe3a49ac40cf6cc055ca82d3324fe78746a3b8204f4d30ea03f89a461a8d0448ad01eace2be1aa13d2a13b8bde9db4ba488912377acf1924a3e6281aab5958922a42a66ae1ad3ffc80bee62c520030db3fd7297a525784ba5eb862967ace72152c4c891d40c8d48112347dcd29e173e6368d3df71843eb921dae3364f3f2b5957cdbbbddc905beb416c6208d9eb2ee42d550eb921a11a881c874dc324367d6ed337ed906b94f4996f8e8bbccc5abc45b76d39ddf65b4e622998689794bea0a80437d3e699982e64fac8f97006e4d258ffe37f58ffe3fd7ffc782024908ffff1e381729ec562fd18cbff1c9287da95f8996657778f59e694ba103764849f78ebc93b79ab5143532f9d6e7136c3f5b8f1ccb14d622824ce64ac468bae9e6f5eb3a4c2a5116445359db1aafe8fa7a68f67bd0b39ff835442c2e73c8b5432e5a72aa994568408a51d61d560bc5bc79f7ae720e1f35db2d5cbb87a5e75cd5e4b959a8f5e413d5ebee917635459326772306b9e89e9f66677dfb4550be366af734f849ae4a3279bfe4a08077db22e12f6df7cc47a2626fd6cb32e1f9ff33f3e3ee7fd73729e450291f039390fb4df878f6762fa18c71a1b2bcc4a4e179b2481ac44764555fefb99982a27550510f224fc0f0002a879a804ec9676494d3244330000000010003315002030100c88c482b15016a6b9a4d70e14000d7fa84672529709d42c89511832c8206008008400009011a899e12401aa5bd64fff83892d6e70261e4aea6e6c279f68d8e461f7365f9cc41aa4bd3f07d8e42436393d5106a2b456de674844ce35a088f13d841c2d85a68f69565b648e24918572d727cd1e30b25be73038da3b627f1ba06663a5a09d718af7848c670c02e9df4019ee2ed55b50a7d846362cf0180851c091a1d186b8fc4ec37232be99ed14b49049a294d885fc3fe2896f5e657345e61ce32ceae408dc8c8a1e248db24acbc401a649c81fc8345bbf9433f698fed8f4db6418d0d09a8a99718fb3dde54fbcfe3641d4f16956e0f6086509caafe865fe4d884a9ffb944b4a46193907dced53059553bdbf073d507c0c7ebc8068798193c519558b7bdddcce29e34a591fde73d90ee10a6ef21f2e80699ad95dd1efa773b10008bf86f36ea2dce8b09bb1b9ffa7d8542a51e4953bc4071d63fb832f591c70e7c3169d05b662d84ef206cdf35fec572fb917624c35c2a8fab72a55a5b1944589ead71603d4fde544e0c007166a80c83ec6d08947f8983a9cfbc53894b74822edcd880f9b7ef1c1436e66e779352517be8646943eb16e3fb7d2cc565486d788a01520116ae5e40032924a4f432e2dd822ac8cc31abf49d0c7a71604675a69846032e8852dba0b5326d4faae8285e4cfdea101f62ae6b69b7602f8482e9ba6684669a88121354dd150749cf0df8d00691b81596b5080a46dd2d8d1222713cc916910c4ee4651022c559113d86a5648562f95e78dd0d99253b00a8735fad316864b32d8a600cf8b63102ad41021fe2455379968516be97fc17b3b2b7acf529b655fb0965890c0dba23978ad4db7fe9893a6c0862cbc8e3b87409cfb51ea45d3f2f1ba2836ee82809c51a0a83a2c1d22665e26a6fd33ecb6320790bdb088f4f6611cc24a3f236c25efb2ce81d6256efb95b99765deea9454f2764b5788f28e96da1d04f1e01f0abfa65eb1674a2b9d7dcb0cf111c710fd34dd64c38c79e912ffbae7622b93db01ad39c3ad244dc08ea2cb60a7ddf867bb82b24ed4d1ac62e61800ff5c3ef5424ac89e7e970b98ccfefc18f1a0fede1f4d7e0155fac0e292cf1ea62dbb0ec64e34c7617067b70eb62b957ac7973160c27fbdbbe97a0484bf665d2f37945f445f1db031816837b974fe3c5b5fcbbcc30432b54b2db924b333923faae2e38dad91805e1c2bffb88d12606062e6b14f933409c66845f6b2bedda13cf675e1f846f26e1608adaf1b21665dccf6368f539eb14bca609ab15f79977d6724779374aa33ed516c91616106992c096e774f9670100962d912104cd063774ec1d7cdfad59b732105e4a62427c6f2bdd7bdb478af2b0609285a4d542bfa813a480ed93e9f52802b88c53045638f15b0124c1eda9374b0c66cf97a410cdf82bf3b40f6984fd6f8c9279c9fb6b2b9c801a3cc4838dcca5088ee7040990f28ec95c6b39738edbccf3fe749bc8eafbbfea957d952d566579122485ec56e56c1820e207a8ef49c05242761ec9be48f45ca8c43863394c04c85ca2584d0ee38cd2e825a13c37ac9f30e941721e79d26355b98667490b02c340e5788850d825e0c09f198087db47a57df47e59ddda9c6198087f7f048d2d432af38b62686d13c6fb31df92a42de01fd02d5656564fc5392739bd09bcbf5553b041b48df4fd2ea3812911477bd409e35721b5d5dcb5e432e7717d70d4fc5f201b1b23ba25dc2c022683941e65b40915060b82b617508664571ca4f1d05d2fb7af96306b72ecefe9490d79faa78971340c321b6a946bf88af1699f2e9df7caf5676ca57dd9d2b2576b96d5a788bfa76507c82c69bb43c303c491c01115702aaed98c4d32a80aedbb01546ebb50f8f8315a418a08030e3daf8471a50807127a46f0a9ad1d6a8aabf8e6e22542dd929529a2b9938378ce60b6a105a4550636286a1d076b49281d13b92cef18b6348d99827a44455e19a83032bc18b53c94bb9115bd97bcb0f77fc0371d99883a571cc6c9d417cd80424d22d4f52436b0b3cddb4ed4f17387fc09392763611a9f70ea01ea9f05b7837d8ec938f70b7271587daf425b53ee3c0e0a3dd8497798fd1134d2b0854eadca310a87c0a7307e21088f656994543d40b2298b620c8093c4d4726180f118c49dbc9492575d63ad80bc4e16369fa504eeb79aaf7c1b20b59f64f5bf7f12b482b14ab87af9b702460c03e0079777015ae4ee5f293564b36bea3bfe3b79922f565e4e035dd37fc652a4e66f85675e9c417a222a74dc7ad183c1846d5bd4b28d72e1b06a4a4360b5856d79774fdb6363b46cf60e290afdaad53c4ce0e36e2bab6a5157a479f5841090d170db93d72e817c643491c64ce84bc2d11fa3e3894128680e47e943344be7591a95b700d0dc6d910d19c390db9d465e6a4229b1a836544eefee08e84dea3b97822e21e174e855e0960c1f15eb3af84f6b33a7f7b4559a33e8614e22ea8e079a4f94a6e2da7dee8ef5d47ed89171182b2fc1e75560323e72fd5a263ac5e140f19c5b7b83d3ddb4c7320490d267888403aac141099698315ccbd421150bfc3cef2f2485d93dd5e19b09e29253419dfd1c58d2cd4b099547923e379a01a45851c830b21779349f9c1b52288e2384c2aa6181aa2662029058570c514885adb791325247c1fbf06cde983dd40c6cb2a79c323848ae01886f07b0c5f209e0b6be4bbe6a7155556927378f85728701fd97b21d12e59815c6fabfdca1b2ffd5f019dd0732b1b0daba4a8f4e3886b71f98d0563b213028b9fb7d58399e7a1292afb110bf39d3ad15d13da3946208ecae7413a7412a3c329dc221bedc1893d31c572adff03b5f69c5a5a38250ef274907e7a79a1d77d402ab22d104bbc54da8b9e6ff9f850cb0cbd98dc3b3c1e4df7fe02858bd14399aa9bfc6d02621d52e581e7e45ed4194787f3e0910b31415c3ce7f885f89b31643f5f31a0571211fdf3a1964ffc2353ee55991b0eae05fb6a045de783f3c276e0db23d51560a362da6b2d99af2332632b0bce503da538e7a612b9e53c83564c46a1db18f8d1bce655cec44f293235a4f69d895b52bfee6328e2dbd9e695eee57d2598ff2bedb3838c0b4ad1716c30d3933297f3fe3f8cb86309e895f5626e9bc3085134293fd4c4c7ec9def6fdaf9907e0c8c026e18c34d9c387b0880613074d418093fc819840f06e7b36af4c1740e9568c30b2592cd72b5952e313504605a60f39f44b3856169bf951ab75602f6452e3bca6303b15947bab62c0908e124a1242861c6e179a67ab1440c18305ac172b1087aa771e82b6f7367e4f7c9ba8d318104f5d55b7c6aa1d02a4c14ff974fb049819ff6acfcb8c97e438980a779bf87f3069f9ba673dd9c148c6aa554c97efdd403cb8826da71600d540c42583387cb739f6cd48ee4ca7be3b23559d921b5aeae17d224d6675219c0cf3fdc39171401a743f149d5305d6dfcee453bc87062ff5a049c6eb1de66c15baeaf878336408bc81148df9b9931becd5f8bf191b7828a7f86cb96433ad5e2541ba75f7977f720004d9f4cf4c7aac5896c9d90ba5ed9fe1bfbe48fe9bdd2f228bb75e9752e83c79196c79d780b04d47f96334a6e9c4d3f8a3684a4331a244c25c3259add7352247416d143e5dc3ff0b5108895a891b6ae585e00eacbe8645504e87a95d62965f57acb10f647c4216ca10d06df5a728439d9ecd0c5e0e8eaa01673825e71bb6104338b18844a4ead63a840ad8dc2cd353a70952c8045c01e734e101466f98b98ef018fc000cebdb450172add68cf3d306905228a37d97df681e6e0da5a8c329f3bd16e6117e2d08298000efd6cc221ffd1617c29881d640bb59e53353dd664c7ac6ff976400998f0a343aaf1f47d90d9000689d0839c01204c3bb06215749ebd9585d4fc516fe445310b91ea8bf6df09a1751d85ce4db9f8496e0740cb19fd105ffb004be041444ea0824ae41b4fe79d18e1b9b5b2e319476263b78753e31401f8d56fe3c841ba11d16ff83d2c659a9b70b445b4612967652d884f6f27dd0e9caf8b31e148d689d213b2c80d325265172812e98a7d58fc3f65b3bfbae890668772ff1063d3c0ebd3c6aab7e401f6f437fde41280526d8c4a11a28a54944f8884617f2d8d34e9c2634afc814ce3319d1d5e5c41d094dae883e410d6647e36eac259937811663b3d9fc11f9ab1f6b58020a6be482f86f46c154d4fe032c3b53123b2d95e4f7c916e5e428296f953f5e3047b32ab7c1dc796b7b650de6ff3b0f159fa565b4cdeb55eb4f94a2f8e32d5c90de24563a569004d8de92c51138c9f96f3d84f12695207003ac01a4a4b1c50c0baa098b89b1ed74e024449c38fb29ac41e5b65d48993f161b3407aec0ebe03d15b71f0c85c4a3a528de58496955915deb219be8f02b079da3ab375f48a3dbb281d3f0820ea4a7175132d805d754b6df8a21f15de382a6a556c6bd317735ecd516bf32c81d38a19e1d6f3d033dbbf5e6c64526e0c87d6d069bbf28d2bc6ce2c7a8ccdeca1607a39283defed8fa3e1ab79ab62aa3fd0d26977fd9af2bd6f69875ce7d9919e9327b9aa0459adedd6d5544d1671fb92cc2e0886c4ab95f8fc750979da60e9eb1585f22332c4db3093eaa692ba0bdc37349e3e7afec8ce8b8a428416547c4621833888283512eaa6095954ffa04b304e438a6c624f2c1cc8feb35e5367589e06aea92bdcc67e2acb8138d6c896b9c8225cba4276003268df306eb36f9858eb1bca8dd031fdc52d4519d5e47cedd6cbb983467965a4da3062ff74caa8cdb6ff5c704eb7fa7ab9c75a16736500106f2267eadb01003b2088af84368257d55e791359f4154cccd9e2801bb2abbb022a21e1a8e9deccec93ba4c07714e26b73c0dbc52e8d968706156c6cb0267a8e471ca1c3f3fee00c91fed0a6836ee79d65e789ea50d5210d942c109ae82dd5a9bb0ddd51315de21182763ac01499471f0e200fc97c8a1276ba18de573efaf8046f7146fbb6763ab02dff880376314a3d1fb729779ef54a8ca3042f499b9b861e8c1ef23c7a509c450f9c402235c29cf73874128da49e0ae7665d16f599e2469f1849bab2271947c62137ce3631c0997c74582a5a6f83b32f1524389eb0ef0f4b696b2908d00ad3812fd62a46d74db7d17c0770cc50368cf3ef4a644a9b850f81d1b34d2205ed13a619b9e899a6d2113e5e33e391f711861cd4d932f736ce45e8d7085370ccb7b4442aa1b02843121f7176b1d9c0970b1597fdf0c7a4cbf7bfab80e12f2a91608d2d52ee6a9c2823d515a2f9ca783a8b52617def6b05a6a63f54a205bcc0ef64c7325d566649756f6cdb5fe349c61c7289c5bfaf924ae0d6e87d0d6eb02cfa5f24f835f3232ecc021b3e786c64b922ecda7538a9573fb6c67bf523b825a4b47928a1d3aab08c261ebde0cc10d03732706adcd4f1fed5d21ed496ce591e2c954f1aa08471a7e2b63108939e1a023cd09f75265d328b2e39b198ec885bb2f54a102ba18783cfe33d0b9fb6ab5ed6f11fc55539a50117074634027c3085bbd95dbd914ab14a627136cc2c15d82229d1467cf0121be4ac50e5a712e613c31c5a906e756474c7c87e8427b18e394744f0a60b77dca0dd85f3b123a927897ca05f03d3bad23c297dacd85693c08dda4cc4a7ba23ec32479a3b52cf7479e82a2ea60827b5aca78de752bceaa0d4d3c6397e9836473cf69a46462191532a27a0ff5332099ed2ea3e1958b0feb60fdc3eb64ffaf91d819915bc329883519a12e7fb5e53e6e9b520dbb0aa6fa5520167f139db56efce9062e55f32d8c89704d8360c03bf061d9b597ffce1c8c4fbe265cb2a3c201789c22a27035bfd0159efb39fa1f2ad312fa9c782c265295acd696db1cf08047c185d592fc19a0c11abff6f0916319cc3efc68e2e4abc7f31f8de30ee848a3c75536e255229ef03ec7c9609c31c9daf7b17300940f3d157c13dcb93cbfe5d4bdf945c8934c867b6b5a7b79356f8d063ed8329c3a8e4b1bd9067cdae03dc11d70ab694c76dd0eee5cee9245739646a9a4c1c2088515fba93156fc4a581e5634a077f10cd23a6c1d3b7137ba43a06f5c838d6d267e8e3dc2b17dab8dd1a15e03e7ce13beb2b64c565efa965ce68dd61396f46f4a869eda8899df75df3632f869f4db3c43895bc484d79379cd0f6b8688d5027f3c579bdfe387884992983b0fca9f041b9b87f267bd7dae3f640596af2028b0aac166b35baf29164ca001c51b53a18773cc61562ce581627934016975ac0d72a7ef81f4a4d8b0ba5493d45b31bd7c36dcadd8d19a69af8dc92b76f9295871b59f281a2c90786d4aa72c65affa0a39a2524898baef165904aeacef1361654c81fd59ecb1e6da1e21966881bd488325ee8a0e55395cdd4842aa7d93955eaedb721f82167a7250d427fdd7e7e34c68779d4e0bf8d3c7b518cd8f137047a0f554a55e8e421470ead2b7c1953c351bde410627edd2ee502b0eb4ae759610a52842ee32b81246632ffcdaa35819a15e8a72843cdc003ff08ad79d52ff7d0dbc56ba14c26bb0016c2802008eb125ea04fff1b823dac46664517e48bb00c9c352b0f2d72d97a707bc55020e38e9f43d3ac352c8c3ef8edee80c0cadff694b4c9f68ceffff1defd8d902aaad47287eae6d5d3184a2e1222c70c07dfbb73cc1b03ee4bc18d2b94c46ad4826243ccffffb7237a7379ac24a36b87e606d9f60e406caf5210300171717402c354d7b82547a417b7bb94604f8ef39a077ca92bc474182f60eeae169162e6bc5f8fc1ab819d8dda81917d85f2f3ab6d847a091d06e6b827e14b74c234a3305122f48d47a5a6b1dffff349093f6b173dd82a55048890e11520fb716603cb5939cb896b710bb910018bf7719a54eaef3a254de6aad0c3985d068b630358fbad93a72f27564f8c0bc516154520a50f7cb23453022366303f9f381b5ffaaf83634c93ed1663b480cc48ebfac68d74fc44eee20903bc73c46a8866860940238b39127dad0e5a20af5eccc730207194e0be868707d14b06419d643c4f0d53f0c8690e5b12b45132bcff0860c910ee7fd0a407f31f04203b15c451b0c18b6199a63795d893ca662f57e6c21621c814cc95a0fdb100c5510526c1463653c672b670cfc0f45c06943647a578663b1589446d1c468f6295fe39279ac2d104068842bb8c384da3b0fdee17b699c5c28257f576284de8be8ff0f58545e2518699114bdfdfd7fa3219a897d3a3ef7bdc474a34a940eaa40f9fb59d7a5ea3c40fb0a834c7ee4606e3dfa0896b33ad905f79659a2e6c409b8a3df75641ac4f82f3028b3533241f4fed376f288c46b6ec5fd96f307feccdb626f5036c198cc331f5b90db16ef9bbe5831a426c843be689f5714ea37c1a61e38682c51c3cc3232ceb9b64890592a686c48f0c00dda41eaabf7e6cfcb0eba972a5a14a4146009c5eef8a96365a9b95b34e1dc447997fbbefdc0d79f951cee39688d62308850460bf36a7fd6f1896ed05cc153d4a0adb03c2d8abfb20ed0de433ea5045e2e45a0da44d932876678ac22d95cbf2dedc034c81391ab5315a8ea3bc0b15a267725bec3a68ac0ff99c0e22ac9d30ef8f91c03bd96eb331cf844ff87ae5b4b236e40b3127021747bccc4ed0613bc2da1c55b6835197a6a43f36161fe6de0c26e89af4db7a14d9d6ba7617c2e066442c0e32080b1680f6317c72f31966b93872120d1593c70a621ded75a4fb42a53f486d473641af63017a2905b708068ae400b16c9f905209c0ece0109f8f375e6b54ac1d802bbed8b67b2a9ecab8d48535530a6bdd281d19257b92471448b18054600c84005ad98785084302f94440813113b9877441f5e9e698152b1d492a603b81804badf05afb8691a64e54e0d0d0202093228e5c0300dbb6d894078b08d6c40c73becacdf051e1488008c475f2110cffcecaabb99b18f18e1b00c16ff73a9a7d5a86ec0024d6ad90d6b976a5f8486de5aa9014d543be1bd93fdf2d06dd0bd7fd41a694f21023d90b6a480762607f7fd568f685f518588e43f17ae2b43abebca6ebefab5c2b1bc0c988e13b800ee257612922d6c1a14dcdb094575e5fe6a7cefee1e4d589d237079f5f1a2a395d8373513fa8c9605eafa7b823ea916cf852d2eda2db69ed3de0a48840d0372be563fb83377c784795f20546d3fdd3fd35578d307dacb2765ca1f04661509ceca813facc0a5dd01a9db16984d15cd4c2b0e4363d4600d9dd7becd4799153c5750ca6c208158ac25198409994a8750e7c6d9263798ce818b6aa1d87b2b3d76411e937d3ddc6134e019e7194726ab8b6b5c6f8f3ad722b79be3b813088c516be3c5609a614ef25c9b1bd5aef566feea62781553212eb9ed78d243f5814e38f2af60175f5310015b3031953938c0ec3cea921408cca3f4259de0acfd2546c81c580bd902d217bcb9c8d0ab0c1271ad0a8f3f787296b64c87d07df259689e2e2006ee95e06de87363fe176893abbcdbb0dd96c78d684c31475c39309df655194ee68c23aaceafcfa4d62200c812fb432b5ac95dc9b91513e0cc862ab0686e17de2aec75c72a83c2db9ea935277b5d8d97bd25b7d5d7425379b750fde95d938431b527340543d9df779b37ccc9f66cf8603c3bf234fdd889f42d73ccc58a2fcf2ed4d778779409c36bb7a6e7a0bfaf3f55f8efee595be21254c991ec0e856734ba19743776578717b6bb27cd306d7422081ffad42eedfb9a27a57c4474554c430a54e98423a2c2465c6211e1bf8b0abd13bdc950a86eab1ef20df290d9cd0adcfd26c0a4bdc12f49ba314767b1b2c703ff4fe8dcea7694203ea1f3071124f2594cf277fca21638e07b4600325c9c314080ef802656223ca0132689ecc336fef841d6614bbfc8b8a3c3e9dc4e5865324b8aee35ce463a2c74af25bc9daa7dc42c96d86831f5ed8bcd93fa9e7aab40d910a1dfbf2eb75998dbd90810d2ce347e2e4a93c3e1b7887cc0ad48c7e06c132a85fa4ba571b8f49c81f2ce3aa1b8e921399ab8723c5b66933721d5d9ae083f66eb4da10b231051d2ca90d4159cc8c9d34df4159f9c585baf02544a47e8d2a38f80ea5518b17045faa08120a783b16941b5276fc3303654ff30a6e6b35a1939c23ef8c1b88a7379f081c138c8da117328611433944ac656f18b055a63113892ab9ddf8fbe9a3bba56b4f9e0418ca15b7a2c64735fe8f0290172ce51344c2cc847a7cc8526113908855e38dd926740abc71b8f74219a679c6ee7ef009a4f33bf904605071c66de4544a52d2987c3b96c63c0f02ccbcf105c9e627821f529c969452c207b8621bc2e7f70432873a3aa2b70cb75b2b3fb0c59a1e9e7cc5509d0846d4cabebb433b24b8c730c94acbfc80478bb4a52c125670b7ab86f9f32eb694439dbc3ac1915a3b02433aeb4cfb7e6dd7feb41ca8357bed3632e839825eb0eb926ec2b3746546909f63a5c50cf76a852b0fb7dbac4d0f69687f35ecfbdeaf673a7db80a46c17dbd9bf9c12351d45fce1e9c7ec5be07bce29aac67d74003d45e300de33d7624b22ad20b9552eae74c93c9bd82260716a68b575ed3310e7acd599cc6854cd766933450494e38a68dc6404da15f1eed294aaf537f61fd41bc34a2b04d3beb78776c23a1e4205c8bcf21e491448cd4e21361e52b6d4642bc254ca81f4433d9ff65c24de6642bd923b2a893f494bfef923ebe31601b87d37a29a0f80d0305f72099acc4ab0c5fb98b1206b7c4fb95170cb8c1a33fef5f41941cb18da243c6519d14cb762fd0a4abe0bf2d42252fd7a0fcb48b720df45d4dda19ab7dad0470a296f7cb1a448e2d725276bd9e6e851fb39e556d663eb3ba4efc5aa9e7c5a2c44cd11b0ff67d3d9dbb11179907035e11fe19af1e4562ef57f95a3b26c48506e58c23a9abd18f80c607027464f8040de9ab25dbaaf19ddd1c18577ab2a31a06ed82cd959b72a35ddadceb4d416bb03b495d89fad53c4794798d3db7880eb46a7cb2fe2680c45d6b109a1f46dff8bc935f217b54b8335b60005282c85dc0f9d9c455592afbf86875a67a8d256bf0fed2c8cad5bea17dfe0f4da31a9bda741c44d4a4eb2dc49a2a4161b1c48f5a46aab014aa3d1f3221326ad1a2413d8afae888e4d8b7928803b53ad13ea959ef3c2371147d0695dea0f6e0972c4e443993a4d98da7140113815f917ab20151465d06affd299cf89742195b3b882f2790f970e718f61589c2b9a456561f89db406ba2fa0e0a885f49fd282d714c645bac589633f9468ff9f7aa56a64ed192938531d2dd669c706e1d30065d08aca2d38c4880d206696599d76ea0d52f0b7016fa8b1be77eff5e8411597c21d992c18a7048ec51120ac11f385730954827978d6e646b5e675adade3fbc0cdbe4a6ad60e43ada4bfd0da56bde72bc7f50ef05d8185b6d92535ff727133af0437cdb84faeff2b62e3f841d5a7cad4f8a009fb00bdb84c5dba9b1ed49a06e8f527ff1f9a458d8162ba8bae82fbb5db5deab04ae2368183be59993070b3ce8f8ab5b232560cd0bb5c20668eb644bc4745607a3e3d613cfa15f367cf0025cbc807ed1f5c42eb16ee17a3fdc8ae7caa3d8622ede1698e8752ab1631efa8a0087d640d93eb79a1eb0b69a58f15f64af1ee89c4b93c972fab812c8a5909e087131adc0e6eb72b7b66d4627591a19131cd89cdfef2d91bfcbdfebbeba7fd9bc778a393af7b96b69424bfc894f8c91c8118ac06a97dd3a617f63a7774f852ec98ac62f170b284d9ee443c25a7d85839279638478278d92cfe97fa8dd28d78a644ad5507cefed4fb44197c292b24ae9a11e8d7b8f9078ad8a1848bb0dcec9c786bac18666ca911ef32f6a6e92bd58afc4d1c0e79d90d1e1a75b2a016335775c1f78ea726899b2005c788c5a9c008c6515602d02c7565097d432e7f5df5fb792128be6a9fd6e877a81472c82fa0fed94661a3b5383ba405f391e303ff4e37c096a7e9fc146bd5b9b9216ff2036bb40fe4e19ae51d81344b8bdb4f0039cc5bbab896bdc5b054dc616a2dc5d2c10d53fa18a019b54435d71e2e1a3e7b1a87afb01abfd5ed8455b2ec58dbea31b4aed472ac91e12bd1b72a46e4570388c48e5f1c6beb3b9f9f7dc72d9ca3e0d3712a4860cf3322039bf3c295dbee16b0cd8843dfd4da9404d380354c8cd2d550c0a68c73f51e35263b6207da09687fa0680ff80b06255938036b49d559952d2c34245d24590fce8c0dd88baebd2a77fc85136bad99abd906024d842067c0407e20f540499127a3db17757e2e24fd3d37ac8eaf3a6756092cc2b39f9765dff5886b7f722e0e61c8b10aac9fb2391666ec42050651fbba0f83d092557b54b1aa0699f9a2923da941d4d6b32c6a129d7a3dfbbcfd52853756a5cccafdccea425591926114a2c89df26ed335f745e7f90f4ba5bda782d5dfbee887deaab6e356fda12d2f98680c2b3a8c9356a434fb3425f3991b4edea5e6d0d3582d64bb038ee9161d2778d671728f4a1385a19c54821b9a171a4bb53bf6c6abbf3aad5ff04b2c8f2c8de4c8eb9691533c1e139aec55d26aaf045cc8cedd220399bc928bcfd6dabecf25838dfd7287a9d41f3eab21a6c001a593b1830fa12d6f7f0251c5f821a4a6ec78bd7eb0889e620c40175a9ad8f9b30c116b8a51e9aa2d3d07e07b38cc4af5417e06b0d49a2387e0a0c1bc944592a2405a190a975638624c4ae5070d6047e83119fc04da1c74287953fd0b1cf365429cce91a121172eaf57f7d995842c40ae10fdc7df8000f31515176b78228c43d8aca0560a92508871bce112ee98993e06daf6bf07fcde0ad3b175389877bcf1165891ee77ede5738614a31b339ebf0e51ba6b84fd56991a44ab7bde1ca72a84a205be9fd58274d99d0d7cfaa6dc29960010b03e347e8c8afe97edc6073d85c46b1156a9fe633964bb52eb05c8b7bc5066e38359541398dab6a822f0f1f26effaa972f3c9596ec612fb99ffa80853540117e23f30bd59ed46cca4d12cb429c65e6ffb0ba72d926e87d2c2debfbda170f731f51ff41f1c814d0436584e39c90214575e0996949d02b4bb1e90bf78454898c33ec601984191dcd2e881a5a9a731d3e6934bff1bad3577ca03eed9a9a6f3ab67ee6be7c36c1b5d3e736c8044da52de1ab2d7a12e74d015aae881ab40059c46e9447ef7d8e3e1dbfcff302eeea6d1735a89a8b5fa6749771cd218b2c007cc00287521ac26cbb72c44bcfc805e4484a30d0c8573c322f0b50f6c92a2e35df18161cc78613239723455a0b517ea162a25404f9f62310221e2fe0611d01497479014bab182d4f1cbe766e31919b807367f43c273f733029f01ee28958724cc2e0d878d87a62bd7d53f9c815e537d24410913ea2aae84b330523bc0b991737a64ea3bca66216871661d935353e89ea0651289128b9a8cfd451ef86210e244c0cc503c51e5aeccea7a217227178ec7ca20eb271849e13c6ae05d21d08b9c39506d8e51ce9b8c63ba76f6054f9de17e0b2d9d4ab334f57d81d96edd79700e4bd7fdd0fd0afa3b0807b776add847051df1529e0e45e09b77a3c61c4d4a9ea185df5ee1ad0fdcb2389fd94079f1fbccf4465605481a91121036f7f124e3ac457906efe34d4f1ff8c6ae3251b3a1e649cca0115bfee94ff710d2dcc041502c9b1d983f7e3ee25e1a1ce1f9eb6cf99b8618e81f6467e5ee719ada0a36b34b35663b2a98e699f5339ff6694e79459fc336b9c80a9def67c513fb069844937f5e51d6a087d3478dc8cb34f832917e320f13dac5995d9011d73de3b9c4aeba4a89339cdb781489cb912914648d9c2dd1dddfd5a7e7125c0a4598f71b0b624f36563960ece53c4ca3f29ecaee56875bf18dc2e29176a986c5644d11995a4e0290a7e8b419f5720bb8c54e5fb8335fd1051ac422e44d46207c5682e0ada8846c926ccdc6141b5718e26aea8cbeb92f664bf53604c33cc58addb174a32fa038f521ef57e222b5570e8c1f9663eb3e6a2107124eb11ae04a4474dabe80e05b6b8c0d367ecd7261050b57a7f0e9f2098e4b309520142039131d07917456cc2d80540a51140a082da1cd1f9d8872e679b74b414ebd03ccfc7da628fb4bb4ecc15abbffc31cf667ddd1ee6925d4cf4cd184c32c061152cc58dab880affee5671a5a35059b9520f881e41939c48b3e0ceacf22adb828e4ccdde677260bb1d544e443bc16ba608a38d80075f35895b32eea66dfd1349e97d4d5028e9f15942f12039dcd75b7240c30105355da758767580432a3347469744108993710ec7c0ba507c40b18a2e50c7e0c69da29766e8871b86ad597fec2ca2e09dd352a45edab465b21ae540c32197781870de21a31b9dda69989bce462367bd398e1000a5a1c6c7344859f05a47c891bbd6b3f436a6919c59f5d731fb8ad4365017cf2125469b5d0f8d04d733816dc57f768dafee4e89c0bed261cffcc2b6b9b80ca9b9a06adbc8e8344c215b45012c8da43d2cf9936374f82e63d0bf9b3a79f35ba345b99c1426951d6215da79654f8834dcb4a4132e7ff23804442d2913c7608a12e663aeb5d0da969d5d5a2109ab34d73bec1560cb0471ca0448477f206bc66123b0ea383bc08bd0b9f1966813057c667702cb42f275af86be06a2acbb2a33b7ecf00f09e3776118b46cfddcfbcde342747fa2ee6ad673147615ab9ea0016bda976fb43b99ac3def04214cdf423fbb576df71aa63720697a757ffb5beaa11ad57344fd99b4d86cffa8af386ca2b88ed49ff82b870ef3567f344c4c130da444f5e5ca5ee70abd15687a8a534d922a1ea393c74e25540492840de4d4ca1182751aaeea3695ab3e7272165dfd266f3d976f436e2a59e7203cf10f18314f645dc10f0814e267d2e4d28ff64baf6b74d30e2a9657a2f6525243247fa68e223f35c562ff74a8e3e7297a64281c950986aa2d79ac922ab7953bb6551cfe1d9b629d191f0fc5b3290268712222b038529473b124a3292b6c136db9effa8a6d2fa8504ee95a481dda0ec523b2f47451200d9e88f75812c106eb01e90e23577127ed4fe2fd64660291fa6eab56075880fb284865d4640f6763375d7acd77151f74003b984dd5250d4df2894a69d78ca3efb81c5f1858f18e84af0fed585de70c4cbf01ca9a0d9a9c174c1abc7e2c61d6ab696393da0d18f23934d91d68941a6e419ce60a95dd6461e0c7cf113872a16640f3d866da3109ecb80065e5de287098df91a36697974ffb35f866d1d782bb127956a8ad4fd0ae69ca0a09a4ed2e09eed481565e4ad40aeac1e304e1a6c0a9d3b88e6cf228a4241f97e15e6cc32f572ecafcc7d832581a62a9f96aed7f4bb65d38b9da4d73018b21cd9b2b8c730f8656a1fbbea71b71c03b1ec0dab6d16d505f1f69f25d064d7e9cc69cf45c84bcf120930a30c68e62b94196c1271c9088789fe643aeb8bfda5cad539060a0e101b9de32e2e889716dff3cd4d3682cdcbe44c3b84d9a8e533a13646469fac068afc48b3d636d145c67965a778c86efbee590c92d8eea86eedb6d5a7b8cf377fe68d4f6b455f2929352279de27819466024456b08ddf7a50e1c0497cecbb684a122e890a1824d26e1fea6f1da0ba360e3719ca8798a7ea4a3ed12b3b585d165fbe05ed4c985ec54f1fc70605d300c6b9a3389df9f94ccf50d823bba59f9b20e13d0cecb9e9275cdbf22fa78fbc66486e50723854c2685f3f0cdeea2f50cd4e13ba30686d571e94ff5ccc2145d194349cdc7086b524d43a8db762025d144db880995a26c1b7ff24e4b83ef8fd78f78f66181c899e510b87c867ff60c021371772a6e0c7f407524e755e54356921caee8916781221f274c10b85b11a8a830bc4592aa499c39c4417999313d0ee50f8b078fd728e080738a7f0e634c0617b20fc4c9ed59947a4ffbe22de829907b6ccc2794bc33017ac3033259c55bce920cee210ba5e5a51987f2527cab65fa3c767df1204487ba07fca3005e4ea76bec5e8ba87682e6e52cf7ae7d6dcb0490befaaab4d3cd3075ef54aa7c89b18f24abe515bfe23b7851c9927afbea44b23bffe20bb8a5291735c513c3affd4d6f033140f7ac9407e242a3e50fd0bcd02da7bda8692b4fada3349bc51ee0412b8f6bc915b1030aa35ce5414795f5906717186990e72e2df12f6c090a63bf7b9d867fbcfff3f5405ba43b9da4bbaa2eac72fa1cb01a9fc04fbcbf800e9d3839434164227c438a4063bb68526d334aebcfa202850182117a53f178e0d925fe187348be463d01adac1dd79fc27c6e152e9aa819d7fc1da62d4f1dcc29292faaebf7052f5dedc9b841d7d3e9a10cc2016ccefef76a379ad032ffbb6a73d8210c172491fe95e9b9ba386b5dd50fc28dfbed6bc8428b700bc67d40c1a61b224655e207a9f6be1b99ea381b976ffe09aedbc724ba0a1d3ea8d0e894864440f4cf4c9e5d47793bdcc392be9b5061d658d7ab81009433554a5754d882e49f6c263aeaa0ad6385c3aaec24bea0473b4467a19e3f4b45d7c42495a96d08af6d72552df367480df2c2e27ef2eb4143d92905caac4302300356b597dc668c0e976f7c4cd24f06ce5c62917515ec37b1670e959819895f2db129965a261e130d381b869e265734c92f082a167be68deda8d84970c9faba2f09db27d74f4eb2644d2f12c1aec46f82f2c3b9856ad0573ec6819fb5c438c11daedefba1807a9ea980ace75f359ffcbead52d61fab891f8565a9d355db9445a32c9d4399ff575178101e76e4b06770c839e2c57b75abaf2225ae086a06694aaa171f75915432fde57b774dcf14c261df855ccade4c715d1822c25b06501d5f4c9257cb8bd716e5cd144d33d4850e9aa0dc32c88c13a766fb6bce7ae601a0d9740520a02373b8c5d159ac5ace0081059a98f86f3002f46fabdd5a209aa39e5e7ef8067084dad015b372f89478330ccbe1a946ae7b2a4104acdedbe75055116f9e58fa6c597cd51c483ac9fd9f32fdfd2fc20c612f6ce34f0756766c901b21db8b9be3ab1b479078927cb55503cc5e8f758ae4ab2c4f1e5c2012e728ce9178f52a76b7664126018b84819d28ab63b758f9c1eafa997a814297fd4d33fee9f952b0ad9ccd11c2c169e1b7419d1b301398c180b8fe6b797615542b04e780e131865022ae53f8e676c4d510b6ad3d784a538e993c5e8fdd710d1cfca59fe8911030d95c6f11828c0d50d80a1e9673cabfe0de0cf8c7a86437cdec342f6c0d0f6f9a6ebe23f1dd49b2ad54a9c7476718a30404e31b29f8caaf06cd8ee63b2aeef584d0d428184513bebba320aedf1cfab3203530c85d49cdecde55311924382e5b573f1d053c2c593a9c148704b9a4650b2b710383e1dbd9b137ac9d88fb5f91825a8f8095f2551a998b0d03b31560a2de05b60b25c8d25cd5d22a3c182f90eaca589110b3d40f8250821c03f25df7cc767bf14e153b1b701344c9d76b0dca06b8b0944b20f50f48a4ed3461b4d57e03090dcb6c4ee863456abb6f0eecb1195dcf36615944a7160e1743244f609956a30a89c88eda1c1fcecd186a9deaaf52578f64108bf72b0190767a776169da08409c4918ef47c484a26bc030596de13efd5770271ed04147aede1226bc8486cf3680e284ccb91599b1969642551d4ede9911f1da299c8d10c0d6dfbde4a101c4d69cb46acf79ee7e2389414573d0b2e653191201c24b1d7bbd5b2d41d768092adce61d01f418376eb2b5e9f646b50fef1095374b941db3cbbdd2167606da022e32ff18e94a4fbe7d065d1db6175ba9b3c69461aa8cd84428662aa2028ab4eb42e714f1c64b9c139cfd543997092867b5f100d2a5f2c30d4f7e8d94e21b17896c04f4c5d69627a5dbc9b5a76065c4f51875303b36ff5589e3f948c9ed7cc70888e8cc4dec39cbaeedd6a885fb8cdd33c15cd978fc1753f684a32ec34de3e6fbadf544aa7568ca24c4a65b00ae1221620835722f197084375dd0356e5f245ca2447c0e87614e1c9cc9a042733f67226e3c5b9802dbcbdb1e2c221a54a14edf0bcb66c8cc509ba16bc67730611697c14964b977262332129c823f275833a73fa43014d4870a05310a505ff8ff897ac31d2cd0f574ef2baf1b81ba305d69631d11c2e232c11c651b12d039a842e4c77bca11661d99e2ec4e3ccc61582229a6043150147d9f5d47bf93e5d937275754b71f663d7575852f986c1191a5bbc23ab8f70fa9815ada30d91d6676a316e57c67bd1c2e15b98a822de639483b77803604aa3b53c88a355ae241d3478011da307ffecd400f4421a8f10b23daefa5964a6d6abb9cce4be632797206080465f21244cdf2b76a8b185b5836f7ebdc6960817163dbadf57f66a6da97cc7f2bce1bc17b03f992e2453130641e535d34491b91d179e18712d49850a59c0072672c06409a88ca0c7c5bb90a68e8a41b48cb544eb61b11b66a26037978e8ea43546b7e7f7b037c1fdce216ea9b030c8fa3211d60f314dadc691fb02b8ff202227d6859549375228fda52bac96439cf450b1f5d7e7eda5b9c0fdf352cdcde3ed382bd3fd4dc3ac287e0feeb6420cb5e1c86075b37202fb32e25e800633b58a6b1f18520decc3bec1e0124fec24d23ad8e386ded340885231d3f80ace1ff85f60a338da5cf4e18c6c5dba417b4d25181e98d4dc1c3f5f5ee6aea79c018b7ab58665027dedb69864f754b228b0e658e5550ef6f6a8888a265d8cf25ae31e63bb5fff3a0a20890d3de23ecc2256f9312e6bbace97282bb4c0523509c9d70edba10f683cc07fe4c259f90c9dcc7234a8e01250c452e7f4665c677a269658787efe7237f48671444da365c2acf5be66ed9778b03c6c1f20d7254c6bff7dc36826734193b91b8f5d4a13e3e067e67e42f83422c80324df69aa18a167ba8aec5825ff7cd425a6f2cc7f833cec703560ad872d3d3be75dd48500faa96d1f6592229276417df765ac4621b56715240e4304f890a3bc3e089c72f01c4e33dd8fdddc1781464dfd67b76af745749f94b7e7402368148e56f7a742b6e3f5082f151903b62c116c8e06a7446c36aa376c98ca42c12bea5e43d322817e0009646a65348248af049a2622beabec9d9e4c3ecf45eaca8bdfd05e27695b1b0e977a5edc64dab578624cfd2afee6da59b9531e7b7b15b7a14e38f05bb9873931a9119674dbcd718aed4ef82af364ee55fdd356055eff280aaf1a4ecab6f0d2ca77f7b64359e4a8f7a6ac3aafee5e10ae354f2d5b706d6eaae1eae1a9f945ef535405f7a1d2c3d8aa9c8fe027ee0c4f69b776d9ea451e3ece572894c3af5db8293d82158a1c0601f0e9dd7f92a625e4a3972fd6040abacb6452e24fe6c430032adec5e7d9f14c80ec178acb6dbe226b16101602279b6fe799232323836c9b3f5cf9394917c99b7c54d72c512e3b6fd619232922fd3b6d824a75838f3f60d251fe934277f29700856a1ebaef9931423dfba3b435e4fa3d91f792809697e8d24a8adbd6325dda4c59186f0373cd6e6c47022bec04b7d4383f4591a8a4bf32dbdf322a2be95c307611247cb8a849cefede4df89536c39224365d6c57f01161b3d69dcee30cfe6b53b83c99c4cf9cfa7c84fdf6472938e0e56bacfb82120c0c45fcca748d57fb624a0e8be662da0dacce6652650e61c5eff462f6f3b80f654c78d9d490d1a2c131ee26b53a5a4c76996ed32cddccb956e80d7c71bc790eb4afdfdb62381a7e45c61657493185af4a30562adc01a0492b7d0ca397fb3402af95b6642c0ae3c4e591dc7e5af9ef631ea1926a1d7506b17c5c1444b8f9c8eb83ec755ed945cf69479f778112d28a62a68edbc664ba57f9af3c78088e887dc3bbf59915946c2f1aeb2fbaa77e36ef6675f6b671595e7dc2e96dca7d26d4220ca942cfb5fb590d2de513e95b1dc9cea1ac141a3ecdf98d3322c1cdab008ba14f028feb8fdd77a95be9c6da56018241142b45e483180a641a1e606f948b775e91040856f5e339611f63e4a14dfb93a8ccfce3ce44e1fc087e832b99ed81f0eb46a90a5732024918ad56c202def010f0269a41fe791f202fcaefb7e60de1cd5cc9ca2d95d82a8cfa75f21cbaf2fd9d1d9fbfaa9aadc32c401ad454eef481dbbe587995112734a16ddeaff4fa2315a41f6b33ee8b51a25963bcb99d9952fe13f622c80e09cd653cd12d6c029dc0a7235441469babb27411cb27c33f9e20b6079158f23bd9cbee92c55907c0fcfb19c117a8fb34bed4d871fb78c3d075cdb3cf20d90845019c7365d1ed4f5868dec1c025f711974239fae8e31acfeb31a3fda39ecf9baab9642f2b11127c4d18ed3333944e6e10583e999111fa7dc54487bfb969ba17cc10531e01f34066bbc899554666044dfe73bdc9d8ef5de0bf55393bd91a28ff606483ccdd9bdafd925ca6292e0e5f57fe426e1c0c47ca44535e2c793444f004c8e1905815efc0ad699602ac47747c5e52c4a8b56351667b397c10b6cc7fd5f414fe7743e9b67bf2c0f15d5f0c907cd988583729d30eb128a014d4a4704a826fdf9a56f24c8bb4a61a508b30bd5a447a2811c7b44b3d6a473a8fe321582738753abd8db69cab3fca27c2e5da6d4e7d210873ec3499a146a7e4e767f42b394a91bc2712ea71ccb7c512ffb23c19f1c998af70f96a29e26b1835247f77a8bea595b45b06c3209a243a627a04b8e12540b3ded0b0462714c66c21d2a4f448478a0a8a729e3921da506edf0b2042860ee3506479b3ad5fce12be2a26253b8d13332a38b7dc4332d6432ee2ce0b45513466c60b6400358e13489c108744b6c8d9b18ffa2f2cb44e96735c3a01b7be650d758396e443f25990ffaa98ed734c0cd8ebae638b956631721f8c28d3ce2e6cc58cb2ba1a964896803fa0e0b857f8df2404f541b3a2d188481227ce79856b380f518df166e6c41555c87e84fc4f4c4e2725246a29e94d8b5b939ce5ecc984934365be083243c981833927380bd271339ae4c76c177509996030d1e4c06e126e53f9da307cde383991db5c7521253d534411036c8d1d0b980fb24ca712d22ac39ce502798bf9fbfd944073c556aadee6b00033e442d6ac2c1839f2a2a3ff6d1712260d346c3c2300c0feb6cae871576a2d268e72b2396604541fd444a4066d4fa45bf538e24bb2b216aa264121a3788b62159a79cb502318878b33a89676262919110c43e244138a427f0e8f25ba14282f3d97c5c8a1efaf99b386b111c5c6b348a1562b6a20a310a5a5c87b65598ce12fa5283b4230497e7ed9b4ba54cfbcfcee72ced753e552f3e62354d32d5c7cf5562cc06648947ab0d89cde287e4ad7e809766ecdbed99e8e587e16cfa0e937d169adef61794494f8c6f52ad94d598eb89fe6760a4baf6bf226ce3b29fc59e9f911a58b8a1580079ee67e2a4c5cf4f8d2192379fad0354f16a6b791c4f9208807e7500e401f43eab2b39decb1ca449995da104c0341ca3aa61524cc8a0355c0ab6788314e89293c1e561e6a552735fc1c55d1348cffac35f64ef0001763a9ee4aec03aac2572333d2fc1c7c72523e2603dcc797d050fa23cdc7d369b0a62d193264b001cc5f1dead92b745ddd8062ddb7734190b06c677c72c58e46d2f246c920afec0db755608190add3148025a5a273843317801dab2c37164cec413449c4464e0973661373bd101b7d08b1ee295c4e0f119fe6004df04996f130c385c920f4aec9cc1af7be73c60774b9538de0badb28fc951f082d609d838a36409a63063c072532291aa62656a41f77c45401a2ed8e591e9a61a8ec9c3ac2c17b869d47ba7da4e7db3d40b3e1168a000bb3033c71d9983371213f76dee9b96dce4cc3614724e888a5dc1be1ef8382b29baa2dd279e17254acd92c46c22f660780dc4655f79d4bad3ead7292b14d5c36985cebb33bf8856fe73f8640b222d9952b842535bc111c90f21ad2fcce5c349eb0117a609ac93cb89c2e4cf8338d99afe26df4f55d8e0ef4452aec72b9c6584169445990e3b277bb52f79f426771b7fa8d859fe8bfd10029ef3e33f5a359bf2cc9ffe4b942d3f0a9c4fe615a2b65613d0169cb7a909a1f64d6e6235cc300ff45e1c2a52b58fbeed9835a2f160d37d770418344dafe2db1f6cfb054a686519a46e4adb7f50b87e570cd81bbad107c37238e6a94ffbd43ab1615494853bfce6a14a52fe27f881d27895fd6a5d85f52e47713a5f31413573a35f5a5035fae2aa3f1e03f33d2b13dfbb6697822ec6c49c272fad5966b29c6f9ecd32d34668907f2e8ef8b8fcd8eb81d6f5c5f76b68e4c7c353664305f1c32bd661346282d119cff9d8eedaa87b14639501a8f62afd580de047f6135dd4d0298c707d359edd140629442d970b670e3e9429cd06652f89832851a2c8985b5f72a009529ff261db42658424f31ca8748bb82bcd235592540633eb2526a97c281701e85c36ba319469fd6b16f5cb42737d5a7a0355dae0067cacca459fdc2e8e1f809fe09b1f1ad4fd05ef1456ddfce2fe67b706fbfb2c25a1163800bf77861c913cda58e62a3270d825ef3e3c8a5ff8c007ef02439ac6d63efc06b70f2a0ec1ff6a039ec7c0764b4e4ecbbaefbf4f2ea87d0993c33ac91ac77e736d10aa45b70abe0014ee2efc5b06e6a89391bb5b5d6685400f9490c80ee63645a9fccfe2aab025701f1b8918d1a2d2c341c8cf6225fb63f9e3faff623159323e0a2dc7665941693675cb5a0a917bc4b14f831ae5c08aa86e92c11d0a525fa61f2b291af34883905990eb7fdaef451da3bbd7a6d46364c2181ff6eb461a0b97bdbbd158b17e0afd80aa5ecd58017dc95145d8deaad8c2d1b0c0eba1868868238472f14f4a2ce3cc7b26be5397ce6eb97eb69519c23e23fabaebb31c40085d0844d22cefcd0a63fb0e063e6d51c5e1139dd366dd0b82af4308dff71205359eac65e92a91bc721413a0f65a481ed79f1500f7b3f5d86a533feb56d499384ca4c07601d7d13402677491bfc2016732f007da62063acbc90dc145beeff87e380adb39305ca7d8357c4c591770e8b8d8575d5f0cf0ffe91fb2d47b18daed3809c961adad9a43822535966a3dfa1fceb1f3498395b09eca37ba7d1268c066e4473b85e6e2357c3dd3e5cbe43af69422c15f12e15858220943269e341d06ce1ca7244f1470e998d637818f8ea50c78205590d08a8341b9294f5628049d278cda3d1ddf87aa5f0a563c144de3dbf7b1927177d616cb88881a258d4b32c314f38b389ffa1cf1a055c2d2d217bcdda5893b0ba0bd46f49c8aba820f806725afe66c2e4b0f24d0e5ea58a9d2c265315d066156e5db25ad1e7df8afff279ff8811b45d0ae031d00b4de327450fb1991c4a320054f2f270fd8679602b21912725ef3a76eddb80fa4b855ac73dbac2df43dc26334c4c25bc82f957453c0380f1af526100fbd477cc5868177a2f064189f9f12e80e85c6a67d21b6fdb1782654986bb099ba9585bc3fec8125610243e01a60a4313d8bbaca7673f7bef577dd826ff8b38faadb45ba2d874e85c53d0dfbb00ead229d8e36cb041058f5d1282493ec1d871cf3ac04fcebeef3c13fede7cdff857fdee18c573ceb9f027a1b45f6e7a24abfadcec91c1dddc152e1e74a33b3fc1e8362dfe4cc5f827d2c99e98c1e2dcbb9ffdbf555f1e42abd1947b972687a3ced11e910e359e0665f0df124bdc4f5018156fbb3b91ed31d37b5c62ae670f6b1af51dc3484cec9010761f212f6442946b0f9726a477d896009247610b2df1a66014625ee9a493e26fae38e62171a9ea50f1770caca3fbf898d10ab045a9eaaba40698066bc57ee66d7ff4a41e781e46ee1a6615901facc8aa546178df842766e15ca1ec9f2d848e82e0ae50baa31e1345e323edf838bb950f81a038c4cf249889fcda8b7d71fc54cdeb89d902775dcc5a55a44c9d6eb40a7a7f68297de6b6c26cd9ed396826240548288c5cbce14590d8c96a1c5ec115028b34579890f78d910473d9b91f2a72ace49b5b879892a5818d37b4c0c23fc5760e76ed7108d925f8e103bf2b1f22dd6d7dc1413da598266206aac19679b9336224ef90a0fda8563f7b34fecca97c0b9a5f677acc3a0e805bcb5bd6ee3be2845829245474889ba6364b07f4848881b498f212284debf1f3589f2600d8093158f738e01398f1c91b376f614bb6e33cf8b8c7eb20efb0ffb9716335227d83811f7cc8ff6e044beafa323399f0d69a15a3573d22db9e02ba5712369635f22aeed4043b3a6f74b293c79086d44bbb71b2c4b121409f8df27389e46731940699e0ff42cedcce8370eee6d53f70fad12259f8771ab2c0170fedde5465c6f29e1ef2bedcb68a64851b824664bd278425d59a4ae7e5919482fc21e475868cd94478e029912cfbe952c89d1604706464855e043e824a356942cddc934e440a2bf54f6ff94b241c1505669c9c1d80a2b7e7429efee71e464f630128b1243f3125d513e154d06d8c805f056e9b42a68691d0594c5e8766f3df19d9a60ad3da21ba254dab791acdf285ea47a9a0165eb8df3548da1d1fdb5b0c14f121cda6c5d974a1c8cdbf435ed6671a20e49f533c60f841ec95f6630ca3b0af236ba20a531b106226590966ab760c70db97be07c61df539eb2b2257c9fe03b82827d6f1423b2a1b89d8f96bb5fdf1171e34dfa07cadec6edcd8877226605e4867f8dddde32e0ae31b8c46b6ef224f771c0aa858a9aa405531773011a9662179a83f717178330ea062c146be6dc779877ccc6007514e95945e55e810689ded82f9843519959ab7fe1a23285bd9c7cb5d1c1cdf7c944e83694c060de1f08a14c563fd4c21f678cd40078660ea3f7847e9c3f890daa145072f9eab1a90b73a34cea47f8310885e2818f1a76e638843af57852ab6ccd05fcd9faeb3220e2c55ae71cf073ab5e27c47a06240bee254c49f57255e200aae74f96fa2825103d8c4e0f8aeafe4d16a4e60e8c7ec7988bde6ac77c729d18fd925f925c4bdcc4aefa77616aadd127f7a92a4a88eb9f88e59751f20ccd5c1f5a031d51cc574396c8ced7125a63fc3e1a2cd8bc466e5ed0ae64c495dd69a60ba74a07c65b0042aed4550af2c91edebab0421ce87f157a2551caf5ec56ee020308562914b8577f4620378b60d5e9ede637f0586da050341a997ca1311c51d5874021c2065e3042e9e8cec0efbc93c42d59d861015e54e950a1557d8aa4ae6276a5e853693f21ca637197de511b78337a4286f72e8dbfcf0785463ea8b25c7746bf2970b9bfdc7e684c34f8f6c2bcc113ba6a07b4259f2b73947bd287561b1d3590c8620e7a9964b78d116a6369c36bc30568be68350b60f1142f6d352817dedef7a02356505b69a9616462ca19949e2cdf1938ce70184e949a73aa2c3881751481f94a7bd02544965d3dec453aa9176d5347832a152d474faea5cf32bb8857402f0e8ad4ce0ae4298b5df2a635075aca2fd807bd4cf56ae0837a39d79b80a6e516bcfe4127edfebe6105c10ceaf5e34f717c2040a5c41d774a3cfc73b1db1efede53a3464737517cda47cb82dc6610bf35ad25433fa9aec2f66198f0d29f0441b9a40a7cb32e67509c6b358f6bf64e3553e7977dbf6b6422af0b0237dae81ecd493bf2aab242249c170b124f963cfa417706e358df6fe0a739eba72b9d579fc9548c21395664fefcf9ae21d9258c1688cad293e1bb9aea6dbfa5c0770b8a2f91af766509e919eaa1a930200cd966df6a848514901f803c4ac9d8207c27eee04741339231dbc4cbecc137e825560547aa6f9ebf393d5e0abe449c525bd46016f155fd8c5b815769c489cfe56e900ec9cea6ae767cbd90fafe16c9d3542d2e5a71e24aa70d87b6f7d79a2b4edc23b7ec81a4b6991b1973ad9b7260b471182cc8b18d36cdd70d8f7afcbecb478437ad167b06711897ea2e45a1eee5f48e3d838196e7cf53f5a191f04d78e1ed51f325f9008576029408095613a044cfd4fb3524cec7226ee7d5e0f66d81913e1ee46bc89dbb8d7bf16862e88c58ccfaf804a3220fff390cfc4c4028494464cec8690a034bec5f975dc027a79674bcbd953a60b4a5f7541ca4938beaaff80fb3e4ed8d081e4b6424c60838ecb52318fd5bcc059b3e22dee6bb369175dbd22f1c3b095232950497e445a259273ea1c6e0e92ce6dc30176c3e0825f5ee517cf09eff05413bcb3076945b7bfa2d4f3d5b882f572ff78a48089ee60c611b9faa61f4e4631d740942cbef31c830b00deaa055f4c214f70b4ea340b952c8337d75eaa24a36d948b8d89427e784d89a9656eca6335695a4188569d051aee16ece69a0b066c5ea1bd8b5c2a821e42f0f39f74d2daef7ff8148e13042151f7a878e53b290988295cc731d3e798299253f867ca454263209ba96c7770cf98897588649179dfdee0e728ddb87a1bca4769cceabf6b37c6fc3fe318ffcd65fc47bd72e3089b81d86402d7a9c7823ebe036fa0ea4335eda384e4eae1f61274339744efb0636b36b1f8b210c44995a022f9073de4b97c1f0821d0f636cb60335d8476d13536f847d2780548e6a07c3af1f6416183817b50e95e391fa19eeaecbd13859ddc09e23527d0211f29419c8cc62e9bb261e82fa01c75d656658762f0891f29e2d2dd29cedd01d0d85875e810fb4585b3778eb1763b8905120f6bcdd7fb7632c8be2070ee78941c3b6415cc832f26be0ecc522ebd3c427949d91c50ad1b65f430e9d5e23dead64fdb1e401b024464dcdc9ebe7ebb72f274eb02795dfad30ff5b523d3844669ff67378ff85a9ae75cbedbef28d0aecf8bfa771ced6090c6b12e8c0da816fac59a2949acf8f21e58b1f18dfe69d56abb59c3478de5b299326360b17e86375fb715ac29107587a4c9303785c3102b3e8977a0ad943ce093dd40c03f9634b08890f7789d371e4af667bce37d03bcc2571270c3e3f5c56ddfb218563e58b99f9c4545886d25b87e2ee8c025659f2be812420a17f00ad12f0b1ee7727c1ab0545817b5080050c998889b141a9716385343f45bf83384504f8c93f2f5620f85b23aa601e98b8565c75070a83e6f3139b63496f022495a6b577bc32bccfaf889e531ed3d7647962555ea8304e0ed24a919da504cf9d1f9721a2f0bd24f23de8c2ab6ca793f047ed95d42c7cd9fe868d5b12a8bb469092404ee62232badaca19a8a26580d06f4301dcdb44414936f256791084866d2494580cbe00046d93f3f2b31e3a628cc006134fd1c9b1bd4028dae30ae8561110cc10ab1c60b2173cc2753240f045c3698bfe2bd2ab15fbd6d1b76166ab8d60954e00417141ade424ac87ad002e9b7c9f82256c30585cd2815cdd30edac034b62a426ea38dab83ca7056d4ab29577a44094b42ead596a510e2f12a63d646108da69062a87ed9327a5402cf1a128bace0caefad8a4bbdbef64dec06b2588af7affdba4588d4f658088150fea3101488b0deb6ffa63c7614f11a1061cbd94cf11b41f69a4764cc214675c144273b80f8d695c90ae7c1b0f7eb0f9da9c06935d78cea47e2055de530cca1bae081f0d92832e49a1ba02972d66e11ea012a8421c2a46a5908db9003eb2b390f98aa82f29c02eec7752b123fcea183757390114e745c603c990fc606aff1430930be725e8827f30803501b15ccfc9770e925cdef93905202a90fb0b64b5795fd45b80b351cf74b69ac7f0c687ff5b420062cff24ecfbd20fd5d382e4c4156aa2887e559f2ee18428ed61dd62206c5fd341c4a1aceb027575bf81257cebef2ac955b91ae38b34418800689a766ee473e0dff690ad161db3313c420f8da7cb8befc4d5169328f990602405ca2138602780a54ba51d9dbd39eeaac50ccc061a807b116a93b26cc60d18be1d00e1d0800112d076125098b5ec129341bc81b61626e1856ce8ea14cf056719550dd318d8b639fc195dfc74f990864649aa640e484006ef11ea480c7323a3890ba1de53c4cf87b6eb754f2d4e91e50474dd2a84c88a580758cf7b33484db2f4946352599dbff746d3e3f311a57312405b0537600ae3a09c934f3ce2aac22c56076f2635e1a21307ba11727cf92464c44f42c78c2a1446f6a76f7ba0b4275443ae1f1380f7c63ff8e52437eab02672dc2e8b0bab0c9d88c17ef7692e05fa1dd1357f06ac136d5b28fe10cb2d250c71db3c23096a7806f1ed133f3f90201fceaf44eaffa4771b0ed75c669e831bad57bcdf1b40192b9ea2f46d00e773136d2021089cc16b5e93b8340fa942db5e71226c7ae3aa09f696108127ff67e2b7093663754a0b3d1d983ef60b258b2fa428d63c04643a1f4610d6186f53be67d26bc2b53a3810cd8cef3b1df0cc2400609ff3484e8a38b0dfe7856b2c00bc65e4e143e4638b825bd6e76e213f46123ccafb739cbc493d85240539b959b237ef9282385f82c38a46841e1acba51334357e07a8f3dd75be167ec6b26220600b40557fd2fe607411f9f779aa64f258496d7577a963ebbd4cd60adc4f03310a1dbcd3c51445c5cde737287054a44aa63fc4346d6c248bd1eaa3b0ccd96446943a2599bedd9329a1d643e4b352fc95511d6369fa5f5769b7ff429484e3680316d4f04595913c052a940e12947a4fa648efaca2658887c9a85ddaa3867f0f9d69312d49a21cf44928334e40c19a0d5bb781afdfc3ff9568cfe6b1f38fdafda40b615f160775e4d49ff5c7da05a09a3311784edbea5c5c4d0abffa60645cc690d6ece42c135e3ebb7af76c0255b56fc2f1c45625740abe03d2c2ced5389e48238461a4c72bf27c5fd4c7f13df54e813f3f630e4f910a792a228c472a93fdeab6691d3a9bad45faa1b3166a98ef52353d2fba89da70028385025d7872e36a1d34535368a886740db7c3b0890c68ed5f56ed6c5d25ba3869b2084201373523e88cafebe69e3429c10e943eddf5208d5f2fc4ff5ae8abe83d7ff5549102212dec2445cff00bfc901af4d73c4a79342fdd5159c2399e012a45777999a8c56439a49ebfc0a4fa5dab1ef5b0f117368be5fdcb3f94d7017bf71a672b150ee5c8430dc7fd2c42e1acd13808e79bca683ab9297791d0b38bc880b5cf92458a3bb1339fdb796b3f3a712d83b90b299490766fb74ab815c9acf5fbbeef5cbafc8a00bcd49dc59b135bed9a875f637363e24f0df428c3fcb871017a6d39150e2abb5cf764b83b1749421519532d6a2f11b4d59561905d7341715301927702520dc0b7fee48b7cb955de1e0a4d80384c1b671dc4c6f018ab6f38562d9830ea5a7de279cc2d388262379c37e7faa64c2fd41173f2969bf081f2a5d701a83151842b7217d3785e0b66257b62983211cdf7f619a970b2b5ce832a504da87106ac2a3d7718053136ec7913032da154923aab561f80d9dea3a0ad0849a4e2a55f836b1df07fbc752062f4d036166e76e3bf6efaaaf830cec8a4efa013edeaec78c1f44789c804d17a2b8da2be81b50d2e0a37fe11f6d386782d0b861ae97a2e6fa25be35fd5267d0ea3059a1607ffd77ef38f92e7ac248a2957a939fcd6adf4b479aafd41f557d84412727df4fe9e5d3cf2c9067d524fbfa80f7e33bc8742be0862d2d58eff7c8d076d30dc4e662f133c0ba0fe4eaf73dfa6e1cb77de119b0ac2b89b4b3bba43b1b103a7c41e2f7e9bac6539197f0b2ec96eb1dd17c3977740838a1f668156f07a51cc8b4503558de45d9b60d026ecb73abef45d7e394279fca245e8165748b50a403e5abf7d8ccec645887ecbb35772290b14b3e1699c45ee793e2f851a93c21909a22fc3b5ba8adec49f244805f7923776d31764ea8f1aaac02b8545725c509fbaca0217c7a8eb31b68809d0594392571d3e899a283e845781877de8d66edf1c483d3e624b6eb549c0d830283a7b7fc627e702bb45fd2186be8ce0cc19bfa6a955bc2b2926510d2b530ac6838955e8e55ed61de6bd8e68c8369d6d5b938ee91d90e4010733ef32b33ce795fbea0393c467ea91c15bd3b48ed0ec5df859bb9be447eeec30330c5c21e44fe05a033d63db8a6fc45cb9c4767ec66bc3275f3722cb41c52513047052c61771f46c271a423ff5ebeccb3587f611c9ee93a321f0af8ef3af5439e6800720886e63c94c477a2ecf83dbc1c5417d1cfb78bb384b0d3f0e0aead68a02023ff36e43c5ee16aee350530480e06fe8785b0b20249f61c2db7263e44ba7321a9ce56658ebd74b1369b30b594b6160358296cab052da10eec14d0b14e80c62681600839970772c68c3c2c07abae9fb93d5a2c0d944dcd7e84280836ac8b87cddf181882b95b9b81a95f7302b8a11f2c4474c5b08a9ab5b0335c550189f8287ef20aa7001163c216a3289ec571f5bcc866289b152948d01af1b5ce73a18658471f9d573ead24185d56dee800012a6a3da39802e2309b34469b1cdf41e4fce8e9cb3079567486b3f651049f9e1c51cfee0a8ea9d5db602ed6df2ae8b16dcdee6f7c7762359957f1518b68ff79c49044369a8d727c9d33bcd995703c489b2833735e0ab95e8156343f0bd165733e22ce28b6d6da3a133e5230dd105e8fa715568101970789c16c3c6565fe2ec45d4976f9975de5a6efc65e9ebc6a8f6174eb89500c0c773102c46b7ac1f57426aec25ab69e523b061f358564b5bcf06ecd9c873988488feca48c772c1a8320adb4416a585bf353566d247a3fc64122f4e74dcf54f1d01057bf1917c3074c74bc50eccc113b1a24e80a79eb6b13807e38a13930dbab0189e739513f18f6e9204e83dd91836da76ff077e89865669ec621dbd57f5998de9ea1cdf64c55449959fcb6bc76b492d171aca535491f2df47fef13f47108f06d636d89c4e472b833c278ad3a097e91609dc2207220e587093987ddd79401e79a4742a333ee3460341a39be6000cf25e02ca73b17d1d06990332fc059bc6e75e126229e6295b2cc840883df4e7791493cc5a0dd9c8058654e3605cf3cae722a9772cbe9643d02501ad2f8066268495818eff5705baf30f360d30ea4b62798da8915c47d62620e214b1c9eb07b95edd4c08fc092061ccdafeb590c2f06eef28007e8153f1acb9a04d58ea003d863c84207d22d6a47f657dc7c25831bcb0ab07911493201ff825d04f3d9f51f5ae7a2516ed275b91aa9104918fb56138eec368546d0708f0b9e82e0a5894607a2464d590cee7d43e7c4e8adb90c080e50181baaed58582b88ee41ff8d83672fcd2d1144e878613380251f1a8f517b43201b3373626a0f7cf1a4c82bac1103d43729813049b21281f3e814428f586e4c1ed11e23e386371a95790e7066d51f10b2a7b71a3db2e7eebb1f31d912bd702e968cf0cae3191a2972d66b0f7b46209b6692c759d06b8b0507f7207c911912594015607eed888ebecaa350df6d3a518e72ace192ed2fc71873dba4c19a199dd8e245386c1de7e888f570c64d4265f23a7349c1bade50b5d36b2bda801e091da1191db201e3bbf79965eb756a0e2c698eaa0bc9f55f4408c8ff72f1a56e9484e01b7b1f6970df668e9e25b7844fa33f3147b23a4325f3d233384776a640b99897c46a2c9c4e4871bc810e87986b85804278406a339471cb5a7f6f8fc43f9d14579b4b85a804e317116bce5260e57906d7465005dfb2c2f343ea0afe3ea00411da649f171eee1955787aaf7c44d3b3127f88cf19d61d3d30ef2377eb6c4c997ca9c011f67e67f0bf3c5afaa0f380afc7dabf75f4398bcb7df4a8bbe8f0360053e5c426b2ea01680f11660e44ad8e5887b81f9e589a05b016a34a15ec62092b2cd6f73c9ca7b8ac2fbd3dcc6ff6a05954a414ad8b9c37c5f7afff1fec09f2c3e8e2d06f0418071fa7391e6adbedf305cfebe34c6cab38445291bd701e2d853f8287278a8ca070b00c10029af3c6bf26639bc1aa5d60ef7365ae088f4ec741e8b0369048ca30f0b9ae6ba18e2e3d7a9a1b81aeb10d314cf987ba1421e1a03265a1327a7c47486b512ec08324b9197fbc1ca6943922b9a7461e424fe41b32ffa901bfc56f2957283e5c2c0e71195f22f5a8dcf2e27f98f1a742b4241aac1540e4f01f9fc67e2d44a1199459870c40a0c91811c9bcdd0799ed7e47aa77ab265b610e76bf864ac140ddf471367136f37ff6444f7dce8828ee2f8a05564d2c50000d0b5e2f2ce0bb19c6c5194aa938a68e563fa5d59d0052879282f5a51518923d630d6fae1d633d71ca9f86892f6dbb40330a4573d2552d8a88b2364c416b81f837a910ab0587ccaaeacbd105d40231796794ff294594ff7d1b3f5f8057967d3787ee963c173b043534865ed41e3584fe1e3053b436f32c67da66dc1e969cfcd294715009dea7c155de6c27d56754bd9fb3565437242cea386bacb953d11108d214ba74f8dae4ce9e6d594b13bce7608ffc1f3902b4bc1efc2e9f6d32705388be2b7fc7b5baf08653a87104a488349fc527bc6e0a83123a2165bc612c82058add5ff753ca9b47ac112826346cc6fd2d8875af22774bd65dfc7eb10c1418f78eab792a64de10495aa064a446718f4f913936d6540ed375d6d7c26a59778c70462943fa2990d1b61ead7360e5e8ef5560c32159c4b6fddbcd21032ac450bd6d15f87b14ea1389a5711848cac3991c251e1ce419b60b7134ec93a99fb091c02da20ed3e8fb01fc61ea115bf4fc7519af96d2fcb0b453566158e832b4671116140f1b2dd4b8542a1172c7005929ee1ce1ae612694b939ae3c5221c21061d61e3a0630cd31703ef9dd08fd41c9208f2c60b96c7f2c1954e7f425bd87c0f432769a30439b33f355d942b7b506903a6e5501125008f432db19f4712b40c40e33088ac74dd21405d90ee80e5e96ef5e3cd77c4616eb4788c204e57b8c2c66d2e0f886e7905b2207b90cad0548012ab2b266205c3e6336aab662fd858a306c76fc83572992db5722ea17c953242819451232f147b09e5b203af54080e8cf0ad130dd61f108838c605aa9d0f558d916610a22b0c75cc2445c33c8a9abb04035aaecdd4dfd80885d56ff47a8b3fc78f101354aaffd343d93ed535db9c03d48c8f5e8012e7a98f40c12344561acf8cc1fc6dc671e24142a168e483d7248087c98d6ee818b9ff180b8656ebb615732673216235d2f03d77f485937efcd0051a908ac68fbd5e014979d9453d85988f3e067a0d69ca21c16182777361188b7c4303b7827c0f2456775c9199a1f5cbb383abc5cda162a57f24b7e76ce77f0b378b9d66047f5672f06514c55b0ad3c4dd814711bb6f256806d92d2607f3210601390190b48d4ad4bb14969b4a81d4d403e9a17f628dc561a684da7310e94dbdac0c6d8e92da21811ce60579d2c9a5445a7034d223ae8f05eed1d2c0ae3f72c97acb045daffed069387e20e55a4b91a343a138aec232a4addc42a38d45600bdf10345887e0afaeefcb702babfd852e22ed6d91626550428d906fd5381517ba7302e4e72a8aa456be612c16508c96d647db76072204d985108b7912fc89d7daf13615c898897d34fd242fe4e862b4d4080955b98578d96cc5a3888c5c518b272dd8734099688f3099a2159925c91afd874d68e006cde6a004f871457788792e24c1d1a3f1f0d489b5177b9b8b49cb1e5092b72a4374c8669f9f84f56527dc2e9f521907fff2b61d163177eb05abf40a2b40f8083aef92f82e3490a6dbe4c502e90c6c592c3bdf866832650894fc241db804e18019093174609eec3d4710c82ecfbb910673fb0c6f00c64c635da9a94d1509098cf18509411e6a73647a342dc5a44f68ac30aa141ea9059f9fef10aaf1694aadc0d1c9a7a13d0e6b371bf54cc0a8152a85bc95f72847922361e5f1e86657842b69b7eb1befc7fbc081a9c2c9c2e9c5ab61c87240cf84c820a2808b99a219f0f945d479a70eb79a19cb9ebc9b2a1c98e1eb96135be8316c31072672d4cf2c1b83e967cbe36aa201c54ccfb61e4176ca7f3467c910b3a9759f283b68ed692c38f04cc000d05acf16271653544cb578d8289a3cac6a4f015f5714e587074bb09e8994b3a71eb1ee81bcba63e413a0fe3f23c9937da9653989ee81a53c28a917499e4159d370626011f88858ecca3addff1392c461b133871d7194e573f3874c735b3469d17fa79152e8b08feee2132b9fed19bf0aa6243eb78e88b76165555b6ffbe1ba40af7efcbd4a5f05e430fb6fdda3d22d6cdb50c034e2d26b6ba284006b40e3d9ebfac73be7e7361843b8c48c9d2435c6212dcf72f921367de22ab2bf9e45a983ef8028bf6df3ebfb9761ea654364130f86a1e43b2ecd95b3ff97745df7065edb6ce9d81b51b97457c77f6d39cdcbff95b86304ee12c0178528b0540432e8b671e27eb147199024759a12b91decbd4a873f953a094aa1d74fbe9ce862e92b3211fdaf6eb219145219d708b5de5c856ddfa748d0a986ab57c5f439e8bbd8a13152675d68014c4fe8e1aa418ab7f8f4ea541b20cc27941bd961829033bea2f986cc782831b6f12e8903433eeed5263ad9423aceb4dc6a28db56cdc52104ef0fc3ec4ed51044daee8da0e52bef770090745024b5558061c4e63f0e5998e4414c383674ffccf5522d507b7efb95a1f94023dbc405c8d5ee0fa0fce09533c8e48a926a2530ff0c09ce6575409f0b2d10a2d268f51ddb057840a7686f31b82b03fab7fb2db9aaa00d4a69540b349210dd62b558bc0aa780bc50a91498c495a04a0e684edbcad88602fd1b427157e559ce436e1ca4a552647f53acd31ef4461daa263c2344e0b6604b0906c088f337378c525da3a5882f116c0f676b554848215ee0acbef00225f7a02ad4baad7927079dd9355d3c27494b0d51052c2eaea5d28690cafa34638fb55a1d738f86207d88cf11e9b2a9304691a9efd90909797947be1d48adeca63e194bbcfd110369cd5044004e54c018b56d963878b53c23d8aa9dff3f0cbda4425573de3e8e62ce744c902517a2734bc1cc8c87b5db86da013a4168de047456a0454fb268c7004fee7aae3cfff537246c1fac9937bc41bd66669765a17655967c304f4aa88eeb4429d1f6404faeb08b3379eb103765987aa9f99a85682cef12d515e93c51175522011aa1ae113a5a6c94751ae13fb4e3691bc8debce14958f5f455118f6153d5716c7ad7e6ae158ed8af392e39e47f5c4c200af94d4080a8d63cd0f4e69fd220a6dfafd3b1deb447a3a1cf7b864616882b511316baf7e8fc9f19dd77aeca557fbf07a99b91498508ca0492baba02a117a6b19078c701e13085413e7f223e7cbd985a8076b3abf5d82d516e1d6dfb8e15805a922c691be272b4a5916371598f800a531d4ad87ea4a320f142823653499c3c0bf9320bfc967a55314150d49f9928412b0e888f0fdc34f14ddb6dad4823848b8b4adb68a2d461b5038929dd981672c4f9f11637747c00a4c417951eb9ecad2dab01a4e7ef3e49f7646e427d12502ad2b7ca0d39b8f632adf96c504d53ad6c7d18c8ae9c5aa9a39229d1b2d0b6c877d6b7fea111927c10eccfe873e96d75f7712198dd36abaf26a7d03ef3b246fb25d504195fd61cf4f76798055b357b1d7c3992ed88a64c8526bd0c7f534ab0b1d316912f95986cd5336a3502617ecf90fedbf029c1c91643b1311848ed4557b034752ba00b253109b659aa2c371f4a19fc8ff8da56ce804765b036e9f19668e40a1149a5e204ea8a8399a7c2481789226e6e9e0f1e2327d57e84773519bc7628bfc18405526c0c41e3a3dc94b5e0d25d31e1f577dfa986b9c96a81fe300be989be3145e14c037d503f8be8f8ef2014b8a9e8c5b4717b28bcb78f8705d78810131751910758845220cbd1cea2f37d5f7d43d548f99a037cd4ba240a00952924d54f99f0a77f175598991de4781ff3b9669a2d651e0888efd34513d3281d1d6e7daf39d49276da095b779dd1494a4d6adaf883adc569db6c8b4e52ea3c021b4e63ba02f587d0ad996153f40bc9c0f723f13995a934472248952b1026b4c67c99bee437bb0a09ccb70987de7949c64f5dbc83e4b1da2a5b8ef527d64b154fb69cc9692831c4965fbc0d17414b260aea1510908cb240acd0a905b19abe38d0c16043d698bf26c3f827bc342d00057879fef1d101aa9959740e6225329ec11f5b83910247df066dbb90a3a7644c8f2c872d68f47a1d88bf97fbd7aef3507b350387123afbc28f1676067fa9d7d143d1af1fbb08d1ef7edf227ccf2b1b154d49cbafab2fea822fa745a215bc5f1b460cd3b9ea1a1dfd6387f2ad0ed615d3c2bdd3ef2fb19ef9c6f2d8fadf508a7eb153ac34139ad775369d73178d971cca4f7f6c12298f8aa66189a5b2ce504e300113a3e2cb1a0c936b16a6d8da228e133fa98b343f40e1a3357bace1201ec93035af536a158204a5a261d6b5e3661762ebe2668dee9f7ef9c31cfbd7845bacc35ee302befef4d9595c6f156e94e298f8287e4785ec2b02c1ca404846957152c72b4823ac41ec6f63bd0ffd887db36f04140b011d97bef2df7de524a2903df093b0ae30945f08cf04c8c0ca9467ef4504022e35a735704c39cc1fb5d7dc798011b43838ac15e9142d7f70624e4f5f6416e73f90b33653499ec3576a138e7be6619885d8fe7dab94c19e7ae8b1bafd6e2288a3e7e9cc87d04f990cd53b80f212ff20ae42adcc7cd514015ad702b5d8a145e730f5278cd3faf15f98ab46a85177955cd53b8950e054af439aac26baec26b3e84127dee6ea5234289becf8786dcd32aa2cf6f435e45f4a5383c70474f7c84bde6685a55853aeaa9958ec8ad745e752b56a4b59656ac02b5b254e08b4eda52056aa54b81565d115a754468d50d59e9aa29e62c4f76ee0acd2e9e7b76ed5c1cf6165c672f87653477698cf431dd486f6d7530870486213af638cd35faa11d6069ebe3163d9d86eef4734a7328ec8344f5d9d27bd07d237debb4345fdce876f46a6e60ba4e6bfa009073973d283ca2a09b5ffb06d2879ec32e0e7b26cb63f9cc977a96c3c2b47d00c9a97d5fb3307cb5ae150a5bf47edd31392c8fdda52ad50286b3feae60663420c77ecd30d3cdb190e320c73fd82bf62b9f2b59f81fefdcf50c0dfe42ee6badb556dbf0a2f70bbdb59ce816ace6f8f3d0b59b09a1360c08b5a15f3e2a7c553a73aaa4e9b2e4ce0a75a4b4b208193332a40932ba9c0bda901c768dda5d95e5dd23eca0751d50b063ec66d8ef1976bcc38e79a755cf5521c58d13bcf771227eed0149f2b5c733fbea43defcda03b27beba502c86a54f581a11647b234693da78f5b9bdbd25db3fdb8cd811c03a55cd76b761baaafcd7d5024b4298a830484407571d65ed927b6cb7e397d2e266345646dea81958ef42a229b5a5537aa731a999d5f07ce7455c7b55dbc0817977bf040cf607a83b416cd58f828837af4d2ad5779207a99568969133eca1df83845df3771e33ef740c488af9daeea662839ad13855e75555c151fe994284c41d38c4bac8b972279f2e8c6b44a4ced8c2d556715e40d580f6c07ad5dae63bc1e3b1ed8eef377bf34a4edc4f7abdfbdd6da9bef77cbfa3c7b6eb6d6165bdab2a849d555b4f17a2f4d8abd387fa5c5d509cddf94cdf5bb5f73c60050217fff81190c4b1d9eda6b8e46080646e3c44c34b06bb1b4be73b8083c1d2dd369832c53e837e520749b6e0c7c2ffdbdd7b70af2d4e3ed14d35dae459430143dfbcd71b934d3a8b5d690065806f9710a820fd2ba6220b7fd6d9db4b75e7b7bb6ddf68938c0dee297febb6969c19315e76beb97fdeed0e1d4c517f131f17d5fd6e067bfd066d719b0a10ec54f97e4c42c7cdfe716d7cca1efcb19bbc55f06bf0f4798bf5c962368ea927c65f909d12939b15f9bc1308b564cf3dbabbf2c8e6591cda6e4b4be6da4d953d24eaf279af644f020055b031a5a33874af492e3835eabc0e7da8fa53643274732936549e69cbd2cb593659975067559a0bdfa8a44dc3e8ff88b88adb233fcea868817463c44b490c34408a1e5aae37cb947754c01e298e19d3e5fdd9475007c5246a7e8a673bde012adb5f6d1e569cb7c4041bb6c7a6719199af9d553d6852c91d0a890666619931108adb28c17248291729010d20550b335ca11a227c412e5ecf00316808d96e3c5f6918185726008ca05686306cae9c1bc2fe7048a5b6a7dae39bb47550b41540020c2dc0c013654003233060cf1355e211f463671ca461f27f8d54d1c21f411678aaf6ee290a913278671cad9f3d54d1c25485fdb1821060da9ab93d78b7e6fc39f73989e2446bf276f0992b787e88774625193f0ad4e20267f886e4db235c97ef97eaad1fb17bdef8ec3e5723db95c0f64653a7b6c16eb8571cef646fd6243dbd5037651c9d27ae2c31bd3e4c5132d2c7b044913127be4e296c2ece24a47d55ddae5ecaeea86085448542280f0801070213cc0830f1250e485c41ba3047c4063001cacf838b838eb03780115f5e1ef332a63e4495114d4c5d930e79c73beb930c22155d08299216c48b85b91c7c8d98673066f941fda2f7f950ae7cf7fd1dc33c79ee11c6bf0e2db69516cadb5d6daac2ff872561d36a538f89cd4657999ca0e76a73d3b03c30e0616163636d6ebe1009839b16f9d2db824ebac4f9d4f10eb75a6dd2c26fefaf764abcbeb4be81b8b73f5917dbdafec33fbce6ebe3f3cfb3bf2817d61e00ee4fdfdabbff708922092c8ba5a37df7bcdfcf51bf6e4ef79efbd34c7bb1e7f1df3c8fee22b2c245a5ba76f4cc5c737f6faf2d7f1170b7f7de3311b6f1c86c7fe3a86f3f7daebf86c633c3b1e16129bef9c05e43b6f51e95a93257be5af0c96c3827ce7323844643ad92c9f7dbb7dbfee59172ecb5a3bf780680384b17bbe6b5aa0dd7cbf5b7b5cf0e6eb22ac31dbf5d624ee0defb65af6891b192c15db65bdb29b59b2253dbf2d1c5b66cd94fee641a6d42d0b3990292594ab0e729b2915b4cb07aa4040671ee80d130f04e7c703bd89e18180c4aeb7b98f2965cb11fc4f9dfff19a29f553f31e53aa76e2de47882cefe3a729e5f375e04c779e6e9a52e7d9238409dfe33453aa8734a568a7e995ca9b5e9a52a6ce5fba684a95b91ce975173d49c2a023fd7453c4933d314f0681c2936e6e78d247538ac4e5686439c71fc611c6387abd4b2f7ebbf8714d9e1fb9e84632af1ffdc666c88fee6c86f8b18d931fdbdc693ac5acd744791d7a36a5420d82e8efa207b974a09f5a0ffa4dcdd9834028f1a07fa614e85f56f1bbf40188b13a67c5fa9b1d5a2107e69ecb608672d7107154b8d896459f3d67d763338c8549d3e673fe72ee327c57e3c5c50f2a2cf94106b1abbf8e13c321cd0b52b7e97b70c5951014c07011b18687206345683172648b17254a2f75843ec04cb70a7858bf71972a66a2b31519fd465ad3c39dbf7ef3e1c85f771fccd09cf9db83925c5e224d0b166bb7dbf510cfb2b42db101c248cd0b18bfeb982f1de8ec5026ac899bb02a7fbd89071e0f6dfe7ad581ca5f17c172ae1f0001c5ca0d6baeb021c263098e9697ac189a18f121fb50b6750aa18306a0d8eeadc345e4ebda08b09c21ab67a47c76702ce79cc502191043f48083131d0f50b4aee07982860e912e729ad075966a9adfb6223a9fb374d94fde67bf9971f3d9b3f730ae1f64e08311658e78e245ccd777e504073275c888955c8640e1af4761fce6a4917ddb36e06303686ef6ef134674e02285890e718828e18921c9198fcc8f2eba2bf6698888b354fec53aad73d7b19bc39dcf9eb32de73a743efbe88116eadeabe45ea42965b0e4c0fb9b8393bf5ecbf0727f0359ed96d3fabe7df5224c5677cbec669039d79c6badd5762225715acff94e21c1effb6a8e34732e9a5e54a791e6d56d9aab49bac5dee0c123ed269ae3e0c193bc7928a21afcaa2d85d386373bb9ae2f8e03272c83820bb4d2eb4c1e1d7ca83a20831827b836b08381004290912132468a0e665ee49aca252377a6dcf0430f5fd0e8482f5189d25634c46f23b15bd111214790bdc992460910babb9584893b5f9cb81084eee21fc2b6ce42147aca2d3868e92d0802e0e44c0b5e2eccb9b2c20b1f84c8b226ce951233510380a2318a6ec0c8fe7e993b68913549ce8dcddeea13b0597502b38ec3be139d73e36be7ade3b1bbb45d90dda51c2115bccbedac67ab5593728fd1dc3f9970eecbc3539d3eec4b74d2e0b0bf2fef6b92f518654e27a5b7a22e27c32a59fd59adabf575ad1a56ebe9ef7e89ea71ee913706b14fd73edd071dbb392545e2b9387b767196ec41f24819f6e9a64435f098a594619fea5b2ddb65bdeeb7a9ee8f58230f44ed1372d419833627d6b25b232fa7bcef09bb28e93bbb6584e2746ac482cce9a195bdf7debace237496acbdfa6627aa81ddded2ea4174f43a66b9383b9e8d78c81e248fbc3ad1fa3d68fd11ad4fd35fa2f64f1c4e1f79d92c9f7d3b72acda3693e397bbb4b119498e5e4158a70a4f9ed4189b61a61fb78ecf3053cd73196602b7ee9105b76a5297738fbc0d66dda5a57d799887cdeed2e7f6098bd9fdd68f77178777a3df1e5c1befded6d01e5c204a753fbcd9869c236f44123e659d7be4210571669cf3ed094b814ebed849f03ad623ef3299bbca84eaac8f5a36677da4627dec1ab384bdf5d1eb32d5f1cbba0e730758e7b9f5d6c919d83f14c4d73fa7f80cdbb93887c2e75b6c7671d6cd30d3c8b3b90ce7b29acb80bef68c1c793cf2ccd4fc1e79e016b8558facdf0b6e55260d9a10c142153b6241dee8ac835d9549026058d2c0e12226e6847287c34256cc54858770a08b8eaeaa6ac7a56106295f3ad077581792a0e9e93eafaa69f06c39d3815eb5238514305bbacf7764afaada716a7189a2037d47b5f325a684eef31db5a7460e135989175dd50e1b048d0e4cb9b057eda84bf0a0fb52aeeb3bee18137439e5c2d662911533e1d33e1541c3569926deec741725d2d21d41d9f2d25db45a258e24f1d25db40808123d9095e92e5a64a5882d5bceac5c1696c8c2d3d9303e9098c0322696173d893cc0e4286a3104c7ec342057ae8ce92e4ad4846e07b677c817cdb41dec4e6c31087e2008822008debc0897b771c847c38a5714b1286651fc4411144551b423fe88e45b9dacdbb0c4fbd17aceb3bc956e84ab5e6484c3344493c668d228c9f32b663a7b8aacfcada8e8e6b71e2f1b62e8fa02432d8e6469dad0f5e5e5a335450a922d2d8e6469d27aa620d94a61cbee2cd6489626ade7f4b129d89de59190cf1fabd3e7d53318c2928e8bbb6419963f5035c992a0c3fa152ac78a5c304d0b868bf469cbbab6305194d501459f57a7cc0146519740b8b8eae480eb1c8070975054a2a6ea48e69871afc39e32fca9e1205346f9352c433b66c68245619dbbfca2322dcfb3073399346da23d4af38586aa2dec89e27ad05c8c282c76986461f4000400c01d45f00004a5d6e779bb51296f4200c01d45200152d2044241b8a30824404a9a402908e828020990922650ca0195266a13d31a810448491328e55ae072484865c58e5b0a9bb2e8f805944923a9bc4a65ce955f8b12a42004fddd3d690225271328e55a5050810b0b8a2e53d11d1de7afc983b671bce51cd205bb4b368355b0c4459692244c641312a6a60b9c9e5ec0c08085159e54787bf679140a397f396389e1bde850378b9f986a134dcd19e08fe9ed854963bce388c7318fe3378ea0a9413842d18842c2c130696050da7c73c639e79cbf9c415383308f5f8ccf490cc631c638428de38fa36e1c03308e51e328358eb78bb35e94c9183943e5fc39eb720e40ce51394be52c23e72f83e880549e95b256aa4ce323eb18b57044dbab5e626cc1c6cf8ea2eb27a54c1a3266949746896b945900e59741090ea00c7508ce282d988c19a53535a0515e53831a2536351040994d0d32283f53830194a0a90101cad0d4a0ea5c3e0d136a94f532d92f069c40d6f23abe3af79cd5e9ccd7a4612f0ecb0c8e654db2def301c95284f8faabe5effca5652ebf7cec7ac933be3c9041c233a1da6a18434a1149e6a6184e72319c18557b6d119965889f9f9c2954ace889e1e43465888ea2e80a15298a88507408c54d080d02b2a128fa83d67c501445d1106c41fb1153ed53d6001349e2ec74566ba7ab6e549daaed2ed537f6641a45b7e9d993c3d376ef1378ef131fda1cba0d3defef72efb0e1b78e32653943f486edb1edb553f0a10d4334dfb0595c2fb656c93ad41d1f44af55ca3a44e294eb3a5116bcaa0ee71bd5e3dc4d6f9fec637f71976c178797ae17add899618cc39ebbb69c56c0f637dd3f7f1da7650a2be7bd3ef7c6654a81051575976a2f85171e3b8dcb84ea70cfc8d863f7a08c0ef754307bec20f456a0f2d84310e17ef962bf4bd777200bf8081f8989f990784bf6cd84f358255b011bd27a35daa74d53c4cc2d82c3bd17e722608ac850644aaf4813102fb14c9038ae5d364356afb5d6b4a95a1835e9bea8494850be17be2cdb6efaddf4bbe95fc0a83d13a6bc6dbb70a16d45658fc7d9ef5bd136fa9dbf620ee42f7f3cbe586bed07f2c0e2a1853106431e3f7667380ccd506bf1faaeccd7741f405c42c62083eb3a4b305d73dec1b3676fb0b215ab53b56ade567b41aacfd75e902c5d5bac216380813ee5c5d948ec1803d5246c6d4e6cbd932207aad8a7bc38eb17c877efbd617a86b77ddfa74571244bd3347bced3a7f6f3f3f3f36303020aeaf5c0a1d743cb1051518af2061247e5c699bf7e2199e1c6f97dfd42d2f5170701d9b5000832006b2eaee2acd49a73b601d920a0b24c9050901068836947e82674fb68f8a6347d53c8352886500ce9aea626ed45e50d07040484a6652850a0606144444464f4c0ee2c59b0601181040f3cf080044843a8dc942650c27999468451ca29e5ca5c8b5c8b508e10921614b4b0515001051578052e2a70512a2929b9b0802cc3d4c4d4a4add4b6345dd0748108456714429c9e9cae764172cc9e5e3cbdb8952f60bc804172299b70fef4f484410c183060c480d2e00a89ab622fce1f186a71244b93d653e2d3a7e6532bcb6c66ed876462973882c5b0673163349b33ea4fd93cb88e2d710514041444a4cc123c82848284401b4c3b4237a1db47036d881b8a1b0ad0eb9b42ae4131846288481791294344434441b88e1079729a6488cab22c4ba222223db41d2d769cf4f4f4f4a450a1ed1451b142c58a214a9443ca749109434e13782b7c859f43c64c4021db2eeee7e7e7c7511e54b20d0e5a02010101a1e9ae4c9340a4a590909050caa23cc3a2448102050a1646a418a392888888c8e8815d16b9281105020040008021624ead040b2b56ac580100dc09611a77843b1af2e55402c8511279dec682050b16114840da79e081071e900029f7c4b1634913244dd01b823544ebeb0acf902b9d849909942650f2328db88551ca29e54e2bb916b91672ce1614b4a0c08d135e57bd21dbe48a2c8f515001051564a3f3ac021715b8b85d81b541c245a9a4a4a4e4c2822b2f1d8405658b162d5a58b01484cc4463c9324c4d4c4d22142bb52d4d17345d7005e57f9e5ce07481d35592bf5e562faf8e2021c4e9c9e989889d2bac9b103942c8fe7a89c4094f2f9e5ef0e80901cb638a6c47bc80f102060f3324977327044bb65d1c061506065f4dba35292ba492b1c6afbd205f37213d841c29bd6afe7e2031289f9e9e9e3088111426460903060c1831a08062802a63c48821c6c850af776157ccda563760425e00887453030abb1e0a472e501e6c2b22bbf97cc001eb4b18865aec61696175893dacab31263a156a87ba223a859f4c511bbab5406edd7ef9f2beeb580feb5bbf0dd3f48bfae1dc23bcf60c926259cd19362df1add241f5637e934e5503bf1992ae71886efb859cc26f439b1b94e9be1fbadd5497ea7e4da4baaf5d4cb7f57ad269e9a6b9cdb78fdbd29f940a7f2db5a1dd27a502f25dc744cfae7dd348bfe8b6a4bddab159e3cb1f86a4db2c56495b2753db7571e1a97d7cd37e4e9f4d23c0e83e29b9697e3a29f6b2983df9dabd5e3f195a2df629dfa50f481f352da5c24fba86ba23cab3404819f8fefb78b91d0e290327aabd07ad4fa2568b55d23ea27b841fc10fc9d0d30e7627d9647939172368b14f39ff5007bb5387ae532a0c84eac047a19ba86f50be3ed1d07bd07c712449d27c974e4b873ae8719a29157e1ba36b277d972915fed2cb74db1fb798ea8bbb195fda26e1c7d16d57b55eafc9d7a9d56295c2d4084c6de480dcfca8d13e8460455cb172258ace0ac3300c431898f4c0c0450bc3275dcc3b664a0b53b46a7637a508384585ecb82b42c2e439711826610a71e670c35d4378d43a0629f8c98cd85811201b401284084eecb0258d9418e4c0908411e71312202145871e363e697cf0d0841b286986d0f159b3644e1836bb224b946652a24899e1c3303493b5430b7676083266881838f4be34c095e5429cf288ad3ba3941d00ea17d46dab8ca67569c4d60fe4564f9774b662b86d89f911a16e8e23bff6aeec6e3e56684970856569f178f850a7a4536dc812a488264fbc09d3ba40113c587862c8190e54c96aa2982862eb0978734d5d4fdcdbebca33daf9a6c4706a312ba7fedaeba2038410556462ca890c66b6ecc4b00219b4ca06e6acf93ae2ab8c2e9cf36194331f86ee693e7cd285e19b718c72c3874f7028a3b47ee2c3874f82302f38b2268b4e983a6a6ad085ae31d30c30786088b2c31242aae8ded89df8f3b5d775032883bd6344f4b5d73505cf113a7faa487416d9ce5b1886a10c67fab5d705e4f7796226280e9c3a8aca597eed59a9f3fb8c9a72f67ced5969f362da76e2f0b550e7cd5180f98d1363ef1881569208613f777116b4a2c2a7adfc30e2abb4778cacecc2f42cab1811e7c32a618290fad32c6e46fedd96b6d16fd043f792c1b4e8168a2118865842216eb62a533e0cc3308c12024c5ddc8c906e37c7057ded5551e177eeeb911fc6f7037352b27419d1c5891ac430d181bd216e90a20543933465746049041b3de6c19a0e04c1a837290845ec41108a9807413004417c73e6d75e15de93f109ae1ec425ca32284e56ecd2164436c1fda87e37adfa8ff4cd478ffd81bae45fce397fdff77d39e7131781f187d3d345b8cbbf3b0cc3506acae95249ce5d864e65bb4b3bf4f3e26e18961777bfcfa1f0270545f4314c896a8444df237d98ead496de28ff4bb5b3f18cffcbf986fea05f110473988ea22e417bcbdfefbc49b0384cf7f9d8faf76feb52f62ac38a2707c8b0b3da2fa2b3c876deee68ad751895a567454bd496f3fbdab372e5f7f975bbd9ce22a3fa4503eabcf9f9b567e585df388b7105137f58315942cd9522784e60218eeeaa31e2c3d91b355d57be7457ce5fbfe5aed73aa4cd499793acafe68c2826c2300cc3300c1d298c7a03da9b462dd1942b6d453d2e2f5c5cd8092918a488e1d59087c711273aabc26fdcdf3155b8d6bcb1a10c123a196747f45046830e4bfc107f58b920c39c2c73ba94e5b0c6ca4b9620869042664b0d2a94437cd412f6ca8623bf6b0f84178fe3f4e01272ec226017aaba4b8e75b82706c9527e8cf57bbe38748b9aac49d845340706fd1b9d866e1fa7b946719c5ef31e7403798f933f2efe7845ebdbea9443dfea94e3c4d529c7ad56a7d2b5e7ba545f43e11215dd44b7e9a4e96559e6207a6d2b4ba79a0adf26bab6e80f4a7571e29498865093b05389ae53d2bae9238a83f4203f512a6b4d6da9f0db7c446d907e3a69a23f8ec334ad76ed41e954f83f0e94e6c0ff93eed186f51fcf2fb61e3f8e1c53e19b3e65f3fc54494554c3dfe6f56da98d3487fe32bdf1620817572b4e3b59cd19a6dbca745b7de9228aa3d6249d6eabd74ea5495b56b34ca7f0db1ceadadc4c1f7071788a4aa7225c1cce3115fe54080f30cd1404b3749aefda23b2eeffe3a489129570be7c530af14432b42e83f86a96fe3f1ac5a19d0abf944ea7c2b76112c04c6d88aecb9a4fbac5742a7ced644a54c3ff74ff33cd815fbb85c234b47a0fba491ca18f69534dc27e712e8ab67d51dcdab593f9b5d330be57bb76d2a1b0ae7a710ae3ced2a7726299debcf6b8907c08377a5c588ffd01628a7471d886634afb54ad49b88bc38e5493b04f59c0ea755a6b92769d9ea3579374ed43a4bd0ce289c4b4ec7de946fb26a7c227e2f55b2928e7f55d7b8f1d041a7729077e6bbb3d4aaa95579d2e22ae5c39c93ad26687e2680340b02811060e9d0d3c01b269010a16228cc4c0438892335c903957480431450358d99fb00ba0f30388923230488943d6025104625a48a149102d735670c23a918308222c07223440448e98724d942cb78c0e6149ece4b8b0e43a312a91cb63f3b8f8d5afef13ab464bfd9feb4f084ef78da6f2e2729ada4a3544fefb3eabac3929dc7102cc980dc4d17dae3153043e80a862e4cbd7d7cdf6d96dd98604febecf890fff7d9f13d77e4f9efcf704598df4f7b9be4c56f7f9e99f177d5142b839c384052340b030248feebb37fcf76d19f9cf8d3e19e444c97201c958d813dd9746bd39777ebb3b9daa9fb90490d5a8e977d3df68ba61eeb188d9c134776b78ec37aec7185f1dc6d90a4b9d2a77b660089382171d1ee28893345be27c61824b878d2eaed744ab4c5e82efd75e132533f45ee8ca4d58c8b5afbd263e684cdc2fe3f205242ff8f80cc467bff55e30fb9c1da9e6f47ce1c41d7dedbd80c3ebafbd17b490327e9ca256fe3cb84c59e7021c264a60dcd37ae1b11b3952aa979cf9a8a705c4053cbff3798778c844cf053b1f44657da72d795617ea4227cb6ba5d36955e8da3715b66809a147b570620f42b7bcd0ad74f92ee5124ca9f0e7d44694301dc17afd7aa8eb1705f23a79d10fac575d5d9506b0ef404f88a1cb4e6294673d2881c803ecb93a46792354b7d2497150dd00d5eb8b10f5189f15307a1bd9b7d1efcfb3db1b3500a8de123a4bc6fe4d4ef797de30fa9c339a1e7d261443825e421c55bfa06e57c6fb7951e85f987e29ce19cae79ca356b8f59838f95c3fe7cf512b9c3717f728a7e26b8f898f17bff696e0098b52e186512e53ea272a4ff0743f5e43771035a1ab953d2ec37eb9a3f6767042065dcd695c4435dceac99b2fb88573c628beb6f2c55bd6ef5df271a69a5b1f8ff271926485ba3ee8c8bbba47566707c7ae91cac58d5b102871ee30d47ab2559dcac7751e8748f091fca5b7fccfb32923bbf611ad4059a1f00db24c967bf1f9bf1c12986574ed8059f5c543dd2729e706b7b2de7ab8eb11f2eed275f10ab8255ec1e8367a12c321ed90b7cb84e1dca3cb74eddc23eb168f5b538aac917be29d3b9791bd1dfb9dcbd4e43227ec6a0252266091f52ee5efbbdf179224994e553de918dd9f8b4e5e0bdab8d9f0156f2886f87abe67d661f69d5dfb487ee4f75fbab38b3fa25355ff85556f233bf66c037b4ef568c11e1ca8cde951f1b51766c997c620167b8cf11b275f8f3176239cf11bd0f66868438319ec86862f34caa8264e0f3e48c05dcab72692ec04bd3e984269a97dfb6badbdbdc5198c1754d35daabd2f54ee75a93c679e2836516ea2dae4f856508003aa1461848625c6de7c91c012274ce06aa2ca0d71cc5df5b3aea04202aa9f259d0458166a0df2ba23e64603663388d14d804c15234a9018c16225cfe764af7a31f328d6faefeb32d92c7bf4b9063bc3beb1ffb0adf123ebbfcf2d96caf4017652992c0fbb5097ac5b2fffd929784cc57d63f5e8f30f83559b659f700d55e9f32fef70676e863bef184e3f1bfefbaa499f1740cb4984bdbefddc9b1ba47f530ce7e2f0e75a7f36cf707e6e953efffcda253ce6e23eff3cc832e1b17b64993018369b60e332086cba5dc57f5e2d53bd479b86bfac5294d8798dbed4c6d703c970f5ba64f5baa0d0eb62c2123d2e633d2e4f74b695b46558a2db7eed9abe6b640d2d7fbc447fbce6e3362fc99a90df3c4cc3d26db69acd4f9b875e134285bc9a410e7585bc749b5f5346cdc334c84f0fbd04f2920828ad1174a6b526955eda1c0adb50145ecd0d6c7eeed285d20e76679013955ef330bd41295199d6b0f9e9363fa9ec9fa7cd6b6e4dd202183c957d09e0b06f73ecb79a53351b3e4e7af5c7117ae93ee93ed31c3687fd1fdfd9f4745b1179d0a1f00ddd35af8e02dd35b144a38ce0c3b96ce4b03b88bc6a28e5229d6b939ec33ecdc99a4b15a9b59afbd7dcc7a9ec13d5a8b9f69a6b1cf6a9ecff04b9cdf35d02729bdbac6a0e84e68bab79105a6b52cde74cf7fdd36f5e43f7f935b7a15b84b701d53ca80cf221b452e1df16b0a70bf990d7bcdea59ddfe6b53ad97c08adf7c8e6e3e7d6f19b0abf909b7e43855cc8a1ee695fc84913b541855f28cd61ffe7c77d50fb3f52407ecd1ada7f9cfc416b4e92d7dc80c4a5d0d6ef53bbff936efb3f5e3b1d9b3582dc96d69a747a100a857fd0fb27ba4f1f3d9b32eed7fc0728ad516b928fdb525d937c6a5f73a8abbd96da20dd3abacf9e3403d2ed9be159bf3e4c6de4f01cf6778ed0ad53d990000efbd6fded57b386f378eb435e15234f9e3c7986522eebb64b422171c6f98bb5d6e66fa809c6f803b95c7ddf07865e707a5e76b044386bcf0bcdf7ba787ded02f636004d4d6bcae41cd664aacf77bb1dd517b566036b84bfbcbe4bfbbadb7b87a2c8acdbc0a9fe32a37aa745f39bfd54f8396a3df8cd1ce0e3b0bdcf5156271c76f75331cc1ae7eeadbd3c905e666ab64ca557b74c65fac22ee9b4f6f6a9faf8e97beca199a9933dc27e8e674fed461bfadd84edd14e7f37a54dd8b19c9f875e5fbef6b6f4f85df33c76a6afbd2d4744a0d211f5c4b9b5163a8fdde87697fcf1631701bb8ebbd4649f5e4045d11800071e54a71b0900e12e7d9e415ef29b0a6bf73bc6bc96e1c12f2e56a268ed686147911d3f76f0786dfb5d8211258ce950020e258029214b09546ebf4b40a2f5200f555f9aecaa2446bfab784c1e24414d06c232b095012df06b04303d1e3c4b42cbebaed758761edcd9d1611878f2fa4e8e30afc37e147b104a0e26395610cf2cd0c602426a634fdef8b111650233049185a025025c50e400012d0f789282ecc1060859fa9242231556fb2d3546eaca03bfa3e2bccefa1da5e6b7ae17f45bb72b83e0f7f7de0b83b027cffe050b7eff0e2a87d73540758911f623540c3fbfa19c4011810a02b57b4df63acc992f2d0f86e16215e6ca2accee88dd83b789f1ce27a7f71a8c18181eacc09cf9f223182f6166afc5f47a3624b1418707c750f1c2839597145edb7970ccd983643af09af720951fc9f47eecb2c2eb20bfadb6684db91ac3f3a0d86fab26bbd718cc6cc81d177ef4f0c409e312b362122508b207ad980079dde6b7d5921d68bfadb28cb0cadae17e5b29e94df0db4a89951a67f7f5f5db2ac9d73d9355421791bbc3998c2b46f6639a27bf4bd8da11f95d456427a48835637e5709119bf3bb4a48905d1d204198bfab8088550101bbf305040c9ddf5540babc2ee277158febb5d75de5a36be977550f23aa7a60559d60f63aef306e41f3e30bafb3f0cc79f004acd73f7e579d1084479e26883c389a3d9184079ca1df553cc23c01e7c12a1e49927e57f128c2e4c1aa5d8f869faa79f2dca952b58382f3f4aa764aaa762c9060962782df2498718004331d9a5479108819481023f37a4a9707d934017feb2023f37aeb18dbe1f05b479a18a43079708d581a1d623d88d9506bf8ad43cc0b07b412738a7eebf841881fc8fcf0f5831634bf75fc50658c861e9ef4d0634e0e3c74f180b5e20e8adf3ac2c45e6f1d615f5e6f1d613260f05b4798b0dd8f444d5c37639a2c3f622c565e7bd5e1c48516c2df3a9c1c21b3f3239ed7be7538f9e164b7441337afbdea68b2e6f56f1d4d7e78bd7530d9ad30f3b0252bbcde3ab276af752831137feb50f2f51a4ed883e954cd93e789d7bf75f0b05eeb2e5e0db707d33dc2d56bf2c76b27b13955e3f15420f960ba2990c6e9ecf58c2b4684ef7c5c2026088fa7023d3465846fb06484566cd05a6b1d861a01b4adc3095968454a6805c86b3fa2ca0e56785566a8a2421361151d42ae3521570daf3d861b42295e5efb5728a5890c5e590a0d52ba845c1d08ad88919ad23e0fa69b84364388a2288a22ae43db553d7a642960f01d1a4493b6ab80bc919ab2ed7c643383da83e9ae126286ef645d1dcce08489e3ddd1b695d6ee8a95e1269a785dd92821a3b271e1b5ab39e20732364cd05c959963c525cd0f6b5e8b5a14b5a8b5d6220368dbca0b9ed77ec3960d67aa541b808c3168db0acc13af6de08d39a1d6b0f5da45281b46511cc7711c4571dc41db56618e004da929a0a73233c80fa6fba390e4488ee3486240db353a10e38b181eda9c81e291e15046711cc51103b4dd0030af4573868aab1458641461215283e2eb06562483d091203019b636af67fcb8f9b234336ddb38636373c34185982fb349809f07d38d832c477386e6f2dac9fad13606b85e972449966489d2b68e1fa4065e679300430fa67b47efb5575300e1d94f9b251faf0550dde479ede014910ced3934b8c1f4060ee2430628affdc60848b05182cbeb2c438f8e3155f9e30622e0988af1b726854e05ee8b0384d7ae5d0c0760f53aad15297407f775f1b6a06186dd97ff79ef715f7b59bc3e749200d9c174830e3ae83685c2b8831dde333ec7a90d7083f2b37fd9afe86907bb33f4add111cda2df6ace08dd06b841f9a1a7fb4bad96bbc35a8d17d39065eb735f7b58cebeecf5f76428ab59db300cc3d0b139433b0e777d310cdd96916ec9942441d04df47671a09768d1c5810e847ab5339cb53703d85bf0b5370316496a9224c96a6de8a2db2c21298621498624199221498a564b785a07491287e82ee1b5876899ee19a6873a740d663566c7d76bb765091f7a997e799d6ed2ad4361327f9f84a874cb582c8bd42a6423020000004316002020140c874422811c48d254947b0f14000d6c9e485c4e30984a23418ca2208aa1188e318c20600800c618c3500dd52c797093e2da8d53c966962f9c05c3e402109a8542fdb541090f8b978cdabec9234fcf51209fd1bfce4f89e25db0eb71d0da0e839642b472bfe9ff8d4c70026123a043eb121007f52c2c0398522906967804e0930d752ea7c0d3abacc2b8b95b6f81d77b1c9777c3ea8bd1e8881cb76de051ccb65c31a1f209a212aa930e1eb0b676099c44cafe0d58190603c3711d88a98488921a2267375b2592280495b5532395b71dac290a8980c8d93d464cdf652daa0007e0ed88f03b46784291531ce9b2281a13863a9771802d6083b6dc13298526edac9bc823e02200cc442ab5e755a02a038326b3c032bea1b213609344b2a0b318b40418d3707fc50684605328091d616483be031232120929d60a011c550ca2b8f585eb3e61fe0144c0ba7b1cc03c7602599c12a05efc8524f4cace36a52c351c4eeee7a95d992aa724a1eb9493cc39451b702da818e880cb468376f3ac6f19d986ed5be3df391472e22b8e8731b7fc0b247592e9f7ad46cf1ce5fbfe0e78ec49dc8accfe9399385f803b4debe8c111735209ba8c70bd3f4e0526de4b748b576848c722f0a76aa0bf3f2bd54ab2c09da6f0b2fd92fa56b3bd2d59ff5a502e224016e688f0446d93162b7a969708208ace7f5b3f501dd779675e655a8c4638ea92147ba0fadf2b1a5eb88c4d86b4175fd43d6f24d618d99e7c36f61b0df7dcc0f346908b323a94afea0aba1a0222f46c280437edf1c1b471df030c46a903f034b9949d02307fcd2f0df6bdc742e28e8537355c4bf5674ce43984eccc32247c7aa330771fa7f2a87c9b4e4f25cbcadfe9d06581cf7a3a9a79145906b09a768f44c1ce409d77b73de5ed82295187373d64b54a3eb5eb1a0b6bfc33ac37adead3592758cb4c64516b83ae6a254d90bb152f180fa2a04bfb31491d64aa08c39542a057bba3d7d3a04d393d7070576f105d56023372f4da9d0dd7ea7176a53555989be6b80f6bdca5360bfce18b1b23db7dcba10bcd8250fde37a192bd157fd8e4c4006a7b023752772293ea0f8411711803470b1cf924426e4ebd809c350398d9fddd0438ef8e5695749abd6159c8294805daabc49202ee3b696209cd7c930e4e16e10238258d788581049d08392646a99f33a478ceaf594e06f8acc21fcc2518501dfc3a97d54ab45cd63a9c77ed837488969d844d164842c5025f1ec8ec8af3660556a19d9245886c9e6a0c800148ea360d4e1f2e4b92039f8222a2fac10e70c4dbe8963efcc0720f961c910a19b003a74f15ccccb84195fe03117e30c4fb53a538b2d78958a1112e74f185ef0f65bd122a5918073e7b7aa3ebc754dc457e3c76bb88213d56e3ef35fb32b268cce8706cb8b18c0b045cbbf73aef3e75efb6711a3c9c0b9cb752bd5d8fdc94991406f70753fc3b42da6c381e24ca0423a3dba529493727212a24f56938933ed679fe74f2059976cd59498f6b690a4009c74774e17686bbe8a23bd67232cab1a0ae5221d17dacbedf6401e00fc56814d7309e7cefe61454af8f99e6525f4a133de38e26a7fb98958b79fe80db396a747509835c37a825a52bb862e9086faa63b827422cf4781560b9cf4b3bedc19c96550158a2d57542633276e7f2d5fc588f1df5de6ed7c3e9d098a0f87da4b6d3ff298758e4589ab3d952530f8fc94278246e9999c7343c64eb7fc97da4fbf6a64450d399e9981b9e1704a5316d22a5e03cf5ab0a5cabfb966ec8209b97ee48300fc874e120a5b128eb606946ab0cf04452a554688ae1c72ef743736ba91f2fe72aee887e2147ace91518ea8f2d6171e5216d3dddf21bf03c1a327ce78a328b0df70c253cb1130f940aecfa3d80dc99ba224b52bbbca191561ea36a6df4e7e5bcfa732b42740e33c7b899a78c564a3f10d3f4b3a9283f318c419b6b0adde54d791d96db4b46170e9fc1f454dff8a48ffc14973f3487084bcad21b2899e7918026ed6512a30ab1e88a3f72db517dd09259a681262b75e09ca24d75add384435cd898bdaa8a1e84fa39050873b99796672959802cb23fa98680279d97473bece8c28f152766105e1e7d01847bf8f44b24bb26298e87c470e7e624e28549cd33add819fa99c3ecacb30a641a49101d9ba011cdea8bbecfb3825ca8ffa0ee34a058321965e2b2b0805f01d8f9c9dbbcbb14cc7fd4f3cb64c6a780613808091444f3e78d53c4003be14e9f6a51b97d701ae592015555d8a31c898854664ad2418e53eb14dbbfa93cf716dcdeaebca20e191ecd3dd0a50e986ce02513ace73fbe2a4424be3e8d8c1d1e944198de753e17d21172ca9f35ce33ed73023c6abef3f251e3a89fddf3949f19b4e81810c23c194670331191eba6cd18760b606911310cdaf2497c33e8996185a373f2ec37d1edff42e867511869ed7d6adbeba9933f5fd86abc42a84c91a598028566ae0a902b1447f4d714df32b19cc062e3a2d74290003c50e7778b53b648cc8a10ba3b106c50d7dab20bab03ad37ee5f8c8586abc994ea8fefdf57ac66cfba7d1b12fe81b1114d1c7e5c369b79ff7e7299be432770d86902b5483e67d2fc05acdcc5b552d3e0dcdff86bc3d14f437621fd9a0b1d057f23f9f9242e0ce5036934a52e755b328ef048f476292a65c3d00711774c1175f77ba9366dbc18939bc16c062cc524cf3426b9b28c16c6e424323b5e4f02416e18084360ad749f1708f7ca7b7fd6e71bc1b2f66169c5115b2081d944a7b0998b07530189780180e3ba5beac8ebcf4bb72ccc1437514aedf787f8a70c301f7fcf7ec1df58304346b522143d71820435dcd735b86f345d394e6e1be5c241d866e35369dcf39f59a30a884a2ba3591871a6cc402c1f35108786d59878dbcb2fa4d3020f831483c9cbd15646397e30135ffe433ab48c055060821338388e350c23721b67dc524c7c043aab8f5cec18514db35041de1ca0b3965d527e39441a58b0030792c80a02fc74d14ceb01f1e4526fb25c58f18652dd2e538234ba2760ae091ad32bd87aa40422ebb7120bd68651b291434fdccd328c01558f523a64653b916b9b73e4e2c679b331ffe76dac0920f43f989054fc57872f5544d2e1478b325a99bf5a3c9bfde806e9cda41c1efe7c9b6e0891fbe271bd9fe6d38c5dc12c0021e7f6605a0942867c801ef455048f7d87cdd7e178184762ed3f506f544e89dba9b4878499070aa38e551752283e9ca09cefd64b0e8ea02339aee104affa71331a2ef1625645b19a328dad44eab20738a284b2342e98317b9a767604dd7291a74471d1eb450417ebff0591d264fb0b16c1988e9e3277cfaed29eb1372a177c100e10f6691e985ac1fd82c3ef55e250533726f200efb91bd8e359266ff6cfb2db7dc71641f472c81779a102557971c253de1d4cd91f6f86b0e8c709fdb06bbf7faebef262587d0521f07376d8fa2fec92cc0f4ffaea542a05263ceabbb6413fbdd438b440f9cd6fa479673720ff2da5654ec0703cee48895e0764e3d0aee09f74ffbe9871a122e03097e8405345b29b16a8fc2e5a67ef948dee16b323faf6f446f6093e9a72e01effe94c4a1e935a326ec91c61e724485d151918cd856af11f0449788973fb69659b442d120fa1c35e22797cf7ef0a5bfce931968a9ac0db09ddc5f7575334861516423646f2fee88e5b99e55e9aecec5ad18158353ebb39186ae53be429866e8b473c158df089944761b58646a81cd69e1d5f241d021effd56dc41760d6f0f1029c75b5633e34ab18e448ab77f6eb6b0b79c7532d48bf9f75108709b4ccce4548f70b3ea36f12f8b2de53b0493f90b7349f69326cdff0f6402cfc3dc0d572b3a33c4a22cefedef92c0053e920628475e089da0a142763eafc3e7703e0efe81d29bd34b8e0b43c6fd7c28afe66bfae393016563d7a5454a49da09409a40857f4cc3d7c95c1648c3fa92911397280097a916afe03f89df82e7b5b0648677ee94e94984fad4b437fbe5815d083d013085f74c5d036b31c013ac9ff1c78cbb3a0709c5c20b37953f1649eaf982ed6e44a71ff63df636a65906fabe992e1a7ef511c112c26f468b277f6f26249f36fa82b50d6df47bd836e796188c50ccc8ec37abfd8d80c04f4d879ba3478bda7a9268151274274e4c8e59519dac25a2aa271e243802b70887d697598039bce929da21f7bed4faa6c766b73dd8e606f99f28800bb42fc1baddd9c506aabb34c890ae5aacf0b214b4a9448a6c99e4a877c7c4e0bad76e68abf22f2c23595e0b32080ebe895d3ab1780a24451be716fb2709ef7b2457d4cb031297cb8217a914db4d324fc3f6b894c0d33e9376926daa7f1e1e94f663bc463b636f14c8058810310e029bc81a612f961a8f1ffc8d60190ffdd13b82af907bba725c162e08183ee65caddfa773bb368cf574d8bb25571056286eb7f85313b7cf9548984719fb157c4552fa0a0dd8f8a8ebc60a5342af0f85076fc1ee694cd6253155dde0e4f5fa11d8c8e1b8a0d3bc8ad534e0a8ced56c0584e197d42b8fb2e219ee3c19bbe65ed3602470f2f92220c743fcf693b89e46dabcf4b24c8dc23bc54ef20a6cf1aeea1db1547f0c90c000031886ab7d685300ce85eedc47f6505f3c5c120ae7962d0aefc3f5105f03a50f68eef8a0017b4b0dd743e13938c0c1872ea7d6ec50931d188e0d2835c73800723da7dd259541782ad912b77455537e59a6bd18e0797ff194aedb2552d441d0a739356cd254b40d6652f2b8bf8d6b5e435ee851a93696c79dc1611453c0ff91dc09c04073f241c939fbb83d2413236a596dd400abbf91d277b7e58fe333b82d3e93d16faf8200270a5e5d177ec928cafdadfa82c16821fef037529398ff8557f7f1fce6d6ad2147cf9df31167833bde4a1967ba292a25764aa08b50cbb1a451efefe30753c3edafb2ff51cc9f0053897af9659d2ff1c6d8946a914b133a832808f094983ade92a525e23019ce5ae03d993e4110672750bbe333af5cfb916bfac25ec7a43a95637bc082173b577f937b3e6fd19c34fbc16a2ebe4f21502d7bd3cf6662c7b1e9db4c1ae4e85fdd757b434b793f206fc123fdbcfb09541508be58d3d6f5013268633da7fbc978205c794ece74563be43a060dff1415a904e6ce847c30663ebaf54c2251f921f3e67c4830a008b363d2068729194528589a3cb4dae91d1034ae5e17e2dbfbce55f6c92f10220045e3e7f6d83b7cdfc68522e5babb9f7e5c730ec4a9c8370852a8081bf2270dccc780069521b84ce7806839e2f31894bce0da71b8158e2db892e465a037c7bcc34650e234edf2a1e6fd1af54bde9a5d19fe762002100281552e0ad7a4720d679ab11bde77a099de6abf79b37a5a328ee350e706e26567893b8fe175ce55b60b5ccf62fb9a812c5eb3dfe6ed2ec228e8b6943e0d9508b9c29826f6dbf876f824156497683e11a709a671337dc0256363e7182f513fcbe96517d3c248c078d722c7586630ebf5ae8b06e7babf8aa035b273dc748f523f4e5193df18a3027d900bfd20337a1e5000a541f9cf39daed0e1c7416f5f26b2f1bd02b471ef2810b89c1d9e126bd6ea839d9c330a55e542fab6350600d7f0d168a5571d2b22d31a382d4cf429617048fd6f1038b456b2102a0bbdd457a324065433bc5a3fb1608fd118b9147171c6cbf88ebc089d406ee6f0f81a286fb8efc1dd1fdec231d04722d8e8d5c048e04c90717d6340074d48bbaa6c9e7ae50a3472a1986b7ca0c124f49e146d120efad8be02d4334f38a63e5d646c6798a696461646184a8627704640f6f3d8625c425c76cd37cdb0a53464ee3d5d13ee656666a8c76abcaae0204c5355dc138dd4178fc4d7e6e48af914cd4f48b43d3a0135ec888e2ce52590134c155cb3ae3310f0f81463b6b9a5686a7f754a05b876cec6827febbb1ffb0d6615fd7e9f4cf1b766df9079a074c0e7608976727c87e6ae5d7c74e743550b7c162e8418a825d4b88014a4d4c2d612432d6f83679382d11061a5890c1adf13d0665d3ba09660b40985c112c8ab902c92efb0f52bc3080cd8ae2b8cea339dd290a871cea188a6c28e5053fea0cf571089beecadf3fbf2f38757770c7a4ee64b4542b48ef4d1d423a02b159ff1fadc22afd806e94b2d9b36e940a744c3cbbaedf882de5b8d23d1d4e0f4e24688df34606efe9076b2f9db957523fa32143ba5da0f408b282b452ddfa63983d27d1b47b55b44da307a4576536edbad0715e41218c183bc88a7205b09d0d6ece502682d08cf1ef707390d5c1008c81993c919da612d843c519112bf72d5dfc64627ae48e591392ad8fc4593433999a75e7c5b64d550a4e8ca4507bf20f315b42ea256772efe9ee4e288f5dbc2d29059769ebe9b5175293f63ef6292d532dc5a03bc2a36fbbcc1daf69700ff6cc02d1940cdba0cbc58b7837056e41efbbdde4e628633103eff8882b708458d03c195cff3bc7da39085e694034054633dd53184ab6ef4d93db25978ebfca86f76cc91a9ce2894ed52c9ab50de27b809868b3a393a617b5403f58f5f583f6c597699866c5f8f2faf0ff242dedcee7c0307468bccd4e5e0236feb1c0214f25763d672f4e8259a0c99441f1672dba3a8046516784765a75c93346409d793a9d8e755d313ee97500d8591c5fba32e5da188ce376e118d3abc54d60f0254c1c69c96b530e7984e11a5688aefc56389d864eb744b495e4e64a606e4f880e1603d3b1776c0637a918d76b0374873a0f842d765ddaa76d0fbd6184a5238f552112e2eeb71dc27b109afeb644238da4c432f29ee8806c9a7aa138d6b6a63d4d66ff1aa16c784d62f00ca850e55bcd17dfec39d9698da030e792fbf1a87b9a6c519a5ead7bb40747cdf7945d205839344039ab6b6751455d9cbf836ab4618472bdb0cde8f32e70a5b3ffe85ea0b6c303f267dda30efd628207c367dac0ef97b15e61242661f868fd33a8eaa1e9a3eb13513ad39e33cefece94961ca8f1dafc8c77e6b92edfb43d370709ba65e684e97b93e68e5c256c93345db0bde7669b9b61a42c4feb3d81619142467c93b4a71ff1fc4725171304c83f7d70e968c27db05635376a2006ab99bdb4adb57487592d8fac468b85de30f78e987bfc0219b78c9536afaf6a281ae80508439253e5164308abd451ce7ad30965486e442255d6e121c90519b9844c21044f7041263ab44c9c202c925edd3102397fff2ce2a7ed26e9439b950aad079400a8d2ad767d78433a73bb2c1145abeae92e8c016f33a3c1d2243069cf138d54fb2d4d67bfd5519c5f302b513cbfbea6eaf43814b58974307ba4c72ccfbaa5e810acd1c1f66e5b2df80fa68f2e7336202600dd8561c261cb8339819ec13df9651520cbadb9f88683087a2ec9519af9f8d2bba540db892a214abe6c4c623062dce73733d95ffc100597e947d7a6950b7a8d09a9f220c0d0e45531591b4d4c405a171a40c2d915a4985947e6f11e004fa54ecfe7760873e8170f58e55f20471d92762bac2ada971285d3dd7741ceba8aaa9f5c7cf3e7c2207f80fdad267d754b811b3cfe48564c8a11dd5d79a53a05ac4f69135b6218e6d781b50c5aff4d83861c2976cfaa10345726b99088d0598080359711eeed238794807e6a6f68a9fa4897b6bdb920e9a722fd70fe736f0a0a70d25191f4201e51896d2833d1e203de3ffa339add2b48814e78fcd084881ff84096c0496c83952d89f8146652c9d55f3ebb8d4978c163d9de59016e2e173a7ea68673bc96e11667d9435bfc95fee9d2462cf64b262e63a2addbbf7f5f75ac0ce4f18e7a2ae45548b2e2eb70d09e17f2c602a3a7e76f8c99b122c6818b701a29505143b3aac08cc5c5bdbdd7eed88096e915fd3a09a05455db55ebf64d578bf181f6f1d964ca303febc833fe2e2e0e8fec6f84acb4979b8e3a229a25d6dd4f8e9b762c6c84fca874f5b117543078827b2509a0bf9eda8e733ec9df1ae8b4ad9eda58a2d97ed771890a7a6df423f975511a4392b667e26282e09e5d7a5ce4998d0c21d7e20aa577911f685a1ac6375c48f8b65f926bf285198b01dfedda357eee2a888afc3cbad3988c61c75342ee154102dd907d5c157fd6a1c6c841c1f90ac8bf4c4c454df613d5f7ee035a0c02318bdb7b19bf0edd46f8ee008a43746ab1870cf7ffb01405bb2bf4a910e6b934300ea94f70d33714b25aa6a3a9a56827ad040b9c4bcb82f52dbf056d0018d06e3c6f0179496f6c115bd672d0d553fbaecf54a724ef2b1544159fc8838aeaf709101938d84b33a735e7d5d4d0e4d7bc6fe685421cab0e148fe8be0e074cd58cf3346a7c03153766e263950f8029435fe2e887987624b5a80fa550ac4c70cea0530994abecbb940d968ca2bdae5f385f160c35b5a67c7197066338cb66f784b82fe2505084b373ebd0143703dbe42e7cb0e3fc2f035daaf4cd2855173f6aaf4a72b188ed121d2f900df6e82a5fde62199bf3c22b2da5e815b8176bf8b3e7c44508cb7bbd97f0fdfaa8502da2f589903625e27743578d7c6742a8ab42ee5463ad6868200a467ee0e47b313a72f2c4a1573ae1d6ce4e4027db8ee60d1627d473b22b4ea7920b083b6d7df6646c60476c521c26131fe9e56268f77f93f78a31fc7341ef17faa62ba772d61c9b0794f28a745c80e4aff22dbccf6c4e111095a943ca516dc2fbec6d494225125d4dba1190216884c96cc056a36af6d83915992947a3be91a6dc0a3b94ed97653d9d2d9de4e836e3d69ecb4763ea103e8999fe20d29987e653a1408450a95f9ee32277c2fcc157ec0da42f0e3091893b34941f52243cd43a415c22cf8b7f2f626b9e1bebe159596fd793ff5f3dca83ca5d0dc27fd278688eb2f9bee052f09f381806ef52cab99cb46252f6006dbef01fcf7351d31a9bc21467ad829d14cc160db731667ab72f7e27eeb7c870b516a72bda4ffbdd17673d050f641003878acd2d5c001581c4d64894dda6b0cce983da15851fa4e9e2e72f885d0cbf1a66497daabaefa2ca57f9e14a37a2bc451d7aadd70f0e6cf591d8db9a5e0ae082952a9febd3d34824ebd26c03dc440645def59453eeadd249e3bf9f93c4c5a7ec008a508c307851f25a0a51a4134a5f21b18f5cc9809e087ed15d21580f07353f0e90df9bdf9e80b3bceb53fda35b805f16f9a8f90feeea62a580e8a66ff964783319648ff698ae693f9f521fca7b5e59f747dc47f42a3657f8197c2f3a81061f2fe9d7f19a2b94fd154a53fb5c516735b5d453c94f658fe0ffc0840b1a54163115f18cea21a7390754b0986aefb148ed55db8b278314f253d3da7f1d40a65f0534511690f9ca3a325c64b35a81ff1448763175095bb5b588cbb926d299965f7b4d3612fada3083cc97a74b3082bafc9412a06f55f3e276b5dd6845c4208002c1522cca20840aa63895583e74c38003cc40763ddd9e6f5fa408846946568334fd08f52deefa33cba335a68157927bf9495484ceec006db3acd96897d1fd585d5d27de28701456d9a46a28f084666aed68805ee647c5ee8b37de2e495c481329c6356efd46c9256681a307e9fd8cb10c9c0c33d0a98af7a080e286b3f881b8195a6747a634c5f3cbbbd57e02dd0151f7ec64f2dd89808436c1ad697dd6c6938a6311c88e0dfc70ab9cedd4045eecb4799018777137dd129860b32f88a8968082f097fe5997f20c63832469aa83ecf5995a74d75f14a6d7f35ad38064fb97556b0a9577dbe320f3539ac23db70f11d931cf8a8052a9f97d82ca1735109c453e18800a755b828b19e9d2c5d355ea18c29f5f74400273f39559e83f929751b15f766a7e8720eca18d9c8f99555c4be70ddc2a4d51314d6aa99954c99e9138a3092b5664361183c5545289cca0871e9714e7b54efecbc695e52675ae12676d647c8021bdfe47cd190b7050450d36ae6c9d3f486b7e1e7135ead6ee66ef01ed70e0f438a650b7302ef5893fc8ffe2d497133b1e135ffba3f8bb3266e4bce0e553e37e9d16a546d88e03426183a295dda021daad458f2df3a296320b770d13b16ec54c42d0442d1673b7624c0235adfdce86a0e6cdcdee9e606c51eb0e616465a01de7b1c41a27978463a79a26ad2ba9e8f49cc8dbba990933c89c36dd0f152c39734fb0bd7d926922bd89b6ccff7389de9e6b2b99d78f10441816ecfde8ed7bc89fcb3f053a24f91428754a0e61592057a40253facb2da8c6a91d51dedf74008430e07fffd0451f34f328970440e956cffbfa048bd6729d891ccf7b8187c0acf4900f2bebe173a22d6fb24aeb6cb3fcf1a778afab27c78124e356f5a9a8f3599e60074b61b63d8d245cb67e2baab724d3ea83047b401ae8e10d939f9a9e6236b727a1b57c85d1ff18695e329f89f918cd393b9d86b7d3611a1394c0fe91dc6e0b23611e632368b1a4988de4bc6f61583eb9cbc0b326714ff895e95aa278d1007de5c5a94435ee16a7247e920623bc74cccb83f72a7aa873dfec307c418a4b7600e446dd3916c71fa1d1674bb335509eff7a18894570cc0ec06e43e5099a3153ca890911c917c2add57d732766af15405b259698d4f8356567317e356a8ff385958dd2c9bf4294c57e1eeb235420595f13d3aead2cae1d57597ce670280936e2fa1f838cebc57f6891f9e17981d4621ff1c033eb7903036a09b1a170d5ca723ab568259f7c210831afc5bf2cadbdf87c958a784efbcb46010d91aec73fbfb6d0a76d23145a5d77ec7632a6172033dcb924dd2bd21fd64c1330a3bc4007af75df8934f4d0747473170fdc7bd75184e08072ca33066824dd0cc6b46eca5754d4cd7fa4f12320a418a1246292d4ce1e2f7db053cb0862c89b56c7e409e5d8be9bcca7ab06afb3b464d79bad33c1868525227dcc8aac4f80c6755e204036b58d92550571dee66ee779431e4a6aa29a5f25db4442ba11f1afc35944e7435370e8323c04ef0ba688b6cea03da9f463ae4293f0a9600b1b27af5296dfdb14e50ffdf2a0897334f834187b2dc7f1637e1b57cd647fdd2fe3321659f8fea26219b79b99a0ad1820fa0846851ca770b80606c2b797b5b35f6572bbd397268bd9b18194cfd1d1e9e4e9082081cc28ed8a133b063757d4a6c9b9b344e2abadc71ce23503d79876791d9300f7be79b0a42dc3e070ef90496eaaad07e22e7645b40884f4ee5a515f944d158027196d0a23fcac855c8e118a1d86068c51a96d4a8575baeabb31a62ac6a80d7f4359bc19630abec3d3ba2635d61c1d32170ef28f7bf0a8730a0ce2c5d2f761c6eb162f233dd73dda273fa0c35a811f2e72b395baab7feb607f594f0c66ce1fa7cb4bbca884d2c605b2a6a837378ed5fee8b9389bccb6b1e7027aba6e4f3f616b04703c6744c9e988872e465a6ab1dcbfcc8236efa052f6786ba6ed829d8a0f23c840285044dbc553c4f6a401c245fbe8f0383538f3467087fdf2c1d2abb13fe47d6d0bfa7a1899af2d6de1cbc6b841b1dbce19cc94f4d3a40868bb4663c5d3c83e51e88e5492f3d5fff788bd48ae15df7b64dd0bc9594bc4da8a41c340936646b007b4aa15607a44b7ed8f13651446cb849104c82dc90aa0d622fa87cc5c87dab6e3e6d6946c4f1e0a28c5c1ffb36d64794815619852a71058a383a0182f5600f11147d029fc315f7979f53f590e62e9caac13511392ebbbd56a162364beb260d0abbede78c602b3ac0dccdf4a42f5b7aecee20fcc22bbbe3e76e51ba32b809b6ba7dfc861f097ce32edc62c2e5bd79921ade46613c43a750e1d7529a421976c5e87a99f4e805ab7521ae0b7511f00985414c6f07d43ced2a1448a7dfb7e7667e69ce8cf741f0037e0df007abc48860e38bbc4c680a4cffe6aaf32bcfd214bf4a2885c7a9c139bad7bd5a765896c4ce3413b36950e20d4ad49486b2a3b693428997d687b2c2970abe131b27c4b4b16395ef5611f0be66c033189cac9d74688cf77a996d580c9d820ba50f59ad0dbd9ae2bc98f4d50a59239a145619f5b48d5c78ed4da3c0cfe4f3ab5cd7269b8ee500bc9eceae57c1acdd06324736a07bfbf6c59ba77524d4db371142646beaee6da1cd72e1c0c6005814d587ebdd75607a39cfc13288ffecb2b6b885e1a19793050961d055d280ffdd7284d4aecf305af71c5202d5cc35014944485ab172ccc86611be7c9c2e014fe095e7842fdad00b3b9024559361711fd84cb2e23526effe58ae6819f58cd50dac3de785d6b63fbe16d06f02364621a283a7aa7d9dc0fe4841225921a152f1fa643ee4e6aa2b6beeb790bc4c8083064a8e8cd1e9d9bad4906b9681992faae0cd6effcaf59aa2bba07b4bc5a628f53965a51f26a28195a661f91f975107bd912b7120b3f6a807f0ef9f19d672ab960575766c4a49a4d12ed83c2b5b2ff335250fc52c1b5668f872d77edff4951424a0cc56239773e84eee6a915b9f9c6518ed18a40450b8521a9b4a02a79a7fe38470a54d1920c4df7aaacb709f8eb16f1ff5af3039e3c1faa3206cf32280ee57d2c317bc7148f597c6020d2ffa89032653a64ead72b35dd5d1e5c5bea4be37cbcaebff14b55baa379980ab882f8c7aaa36608ab7d18422190220e0f9724d40ab5baa1e004f004b54205d7a9d0f4b03212ccfb1a7d5e48142455a35b6f7de788acfaac7ee67d0392c4c05bdaca33668d8bc00448cf8310cc90204cf84043112d578ced5b57d62b11837cfff0247746a07637fcef3504d90b9135e232be015a6052d7c5de5df6aa5f78d64e1ec2b1757ddb205291d011a46dc0a21d5107473efeceb580858974f82e205e48a6fc943c7456b14f59fc6dba8523cb9d77c30ccd2e197e852cf22d1a2b61864ed11af08a6589364ad2c8e41b3168300ad0c0792c0d5e6f1bd70b47c5618fd5b37741e5f34c6372c62b32ddc9fb21cec6a2fa4ab5ac683c307fc1601ccf6430698c705b138a10e5006afc8e21bac66f1aea30a4cf88b2448ff85f450d2e42911e99cf2e1998bedf401b8b1c3c3d405378d5845445a1473e2b01456ee9671a25bcdefa68fba31ba9bcd49e914b1523873078ef5b21e9cdad87db3e2491d24c6547a7be1f8c02c239118f3ce7324d65bced003c92a7645441e68234d25ed87878eb23dd3c1e8b1263891b379950d7d08dd88d6ebc9f9aed05f1aa8f443f0109d8cd544f2bbdf1ebf7a15ad3c88b3249bf92b4ab0706d79ef0ef3621e00bd8aa310548c7e2fcae019a956063acce72fb22d2576a84caa5477e0d8f77ee3b4ac6fec8b883eb70edb820c52d9b4722ab6326042445930f01780de62250dd299afb1cce08d349982c223cc745e96174c76b1876108947d6ae80a7e648b33e6f104958db391effa85308dcb2bd51b6df9564e59088e0b61287ddd4ea57f67546813fd9edf8b35cf5f24f1961693b6ba802f5cf423a2742a1b971dca21dbb12ab41642903059a3aa60d8ce2cd9202b5739c70c1d97e59a3d1a3cebfacf22c6e105785847086d741bb65e0c9889329963eb0cd5b7499b8ea821d32beca4ade5d3a17030f202b21b0fcfd029f9e7d78acb43c0007d81bd6bdd73810e6428d0fddc52d1c85a95d74d67613a13c82a3ef702ca79f0c0996c719ca0deff028408dd724e72f798414c3a0884751da9327cf87e491a2873e33361990f1b48e602093a767396f971bcfc01f64f1a62160da38d9b3b389982c2db92a378873d4586d0723e2b1449426ff1338ed2480f3b8d7cff3447f82ce1299f34138a7aeab0d1cef4107aa1b34c226b67a1c6698c5b65eed06bd47373ddafa686e8a677339595622a5ab840456909995c700f1f7326ea009c2e3f40cde5f7de339ddc76e3cdcf2d146cefb6c69ecd6a31b1f6d7d941a8c18ea7bbcf591ed47b191695172f135717993a28bf18d1e6d3e76cb1f0b3c77f4ea7be01febd79dfe71960b1d89204665b7a999b0771f17929c41cb2883af272c28ec281342699438db6cdb7a406ffd33e1b7bb32a6675c57003116462b246e1d9a4cf004e48dd5288a51d6b4e7db9bab06f96c74f135524cf3279a6684050ea1fac8fa809c467330274c74d65ae37b58433525c102014254b92861670e7ab8e183ed4766930a6213c71471775f89cbfa5caacef8609c7027eecb5271f65febc8fc7a13b311f2bcd611d2c610086722dbcb58d2fedea2daaf750448b54a418b81de6a943666e19c94160f9f6ed4fce545787c36da852020ea48ccba05fbd8e85f441062fbf1195744f640c18c36e6656e3230c8074c210b6083d74660cc92cc06563f75ed9bd716ea7a00d7f7e1c0d9c70c7dc933ecc18687363dae4d9f928a8ccaa8bf947ad7ef8780943f13f361c79aa4853079d9255af593ebc6eba1b9b9195fa233434d833153d6c57688ad8ef006bea8a1fd18bde0a0232ea97686ebf612d6be4296d238a93712d236d6303cb877911dc880592f7ebdb9182577e1c4dac8048ca3d9fa8d90ceb58eda6fc4bf830b29f943f1669b74cedf692f40456f14610cb5b35edc999e4c14f07f8739d5646a86494ce0390dd2578a6c1f0a680258e381182f1fd0d1c2b95d216636b6d31435d143f8d1af4da7d899fbe0a78783e89a7d601fb557142861ebf5e0a7bff17364ef94364495aa6c9c33619ebcca4cd237915e5a0a26d59989029081c0bcdc96643b05250f9b2ffc82eec76076b219f5723f8acb3105cdd1b1566e020876d38bf4211416a0259f0899770c7fa2b63eb8b0311b39423785bdcef51d6f15069a864d855d8aa26d6191714be4dc418e8bbe74a5727d4087c0e795918970433e36047e33260dab0f810ad7ee52d8b8ab52881013c5e4af4dabec2869ba3ce332fe8cc4186b4cd814dc75340e55baca3e3ebda78c310a8d71bf6a96226ec94bf6b9ceb3ac8d6c57c76574bd5c6057aa6bf51d81069708acf2a0e5fb6ba5e52bc482a1e3244951c4a4042219a9d16a31fc95162217481e33a9988dc000a631ad45bd4356a4d726305a20a6ebdc948ae211b18285edfda6329cc832bd69080f80fb564d329d6a30bec7437343b3550e77e79f4fa3790d87ba69e54f97e88079afa51cfd573ac2e4405a81674c8b79a3c8f44e0ad180a0f6469175a9230d430c1469394c672e0e425844065806e3f14e4e71d45cc7e461cd1521fa5cf9ade3b0cd545e7b64b0f784b6943936144be4cc6828204e50c35f62369d9b2b2771c1bb87f0cae1e70622b072e580c59f544dc00879c541c049bd14a7c02fa3936b9440be9018d4e1b9566669efa0aff8579be3f1c46c3aed7074543f5f611259c6dfc86faf872ccbebc86f37fbe2e508fa51c87e7acae05501aa58349763732e328ed11709176b233d9b2dfb276c90c91c50220f17352da821c21aeae9db183dcb0bd1c31c44bf34fab888742989c0b60ee950d10ec8483020691b7983c71239276083097f53edf2b6617523c9804fab9963213208d0b0299441b33004cfc9de8daf41eef188554f9bb2b5c9fe0f3fc811359b6cbd313b348aa5cf548d2fdd21d3e04d5a4556f4090166a863023d877b474de0beb3ca60db47184606d6c4439ad0ed00b15f260ca3fa1009eee5cb119a3bdd3d3b1c7bf0a4a0e770751e428ef6a104057cde573634704ba5e3e5b5efff6092b5de7f67f719f01bb7d6bacf998e0d3a4788b4da25ee1d8064530c68186042ddc24bd0f67fc3e293d83070df3010f0936ecce18cf8eef36f32a5c0d5ed35538fc61dec8bc077485ed70e0eee6e4e94c9dee900135812b608953af7191c8a004327d9db80ee47f5b41b60737f8166525869321866f935775202b3ec48fc4a6c54804193f2004bac87922f5e11a1a9fb21793ec27b65a3faf8c1ba42806bfbf6aea678709855edc7201801ae0a1dcc676318ed8839db3f5df2e3574973f622bf03c129bf765fcbeb1d6a0ee6e239a9b9bd03a2c5556e09365924100ddb27f55cf6b87cabf6de6386f13838c21ff6247f8a13ed01f074d3daebbcfc80c6e16f2e4e7288c301003fa997353f1840a552ead86d8605426843081d9f375cdcf4651eabd5c02e94f213fa7989f89b6706de8838e4710b5bc4115827e9850f730206a3366e2b7c28bc57f84234eef5f7de4c5fe54635ea289fce29c8211328a936231572d3e840d851313d04d565d75d455108848281eadb25e421a9b6e26ef4f161a1d050227e255e84e9eedf2cddd04cc5a5d0edda869040be203ffc138dd6a33940608dd3be2177ae63f005d0fc601f3808739c378144eb1f77dea84ed2b20d1da23f8d03f56726660bcf8c8b2ad39c286ff265002de372f52f9ca3b175744aff4b39448ddd8bbdfd492d1508c24a18c13a81067acdba3a51716beb6cd15cd2c2dcb2037690b0f4a28668dc879ccaf9bf8c94d76671d6907869afbcfc60873bb6f246ef2210f166ed67c4ff89a3c5adf914e45157f072ae8c81b2316e88488c88ba23e36a92fc00fae8a0a85a2051ed5046e9c35e5eba3260439e95ebaee5feb4c162833ecc36d0bce74d6fd98fc4bb453a8790d061da3c3b0d98662259a4d6cd8133c4ad65cfcb096ba734e8c5c601e963e1413468a6287dea7aeba66e1633b508842b9a5eecb38c5f539d025e9eafafa72d2a9c767d6996d02c464e3121c8cc55a4e729dbb222ba504e800aa2c05f07c007be13b374234b0ef39b072259078e15c836a1f42285f8855d8709bbbb2a514245d6efb2ee4ea3e6b10680d7cd3c74095a119dca000b0c9380729c52bc5b3e82cce6ef95dcaad72d76d0d6c8c70c4b202c6ea18020f0f0c553f21c70583bf96b3f0b3532ce86904f4e83f9c84ae945ba1de96a718a897984539a794ca1b7fe66d19142585b47f5593a63b2d2e1fa2e923aa5411e6f99604216bc308198ace056c0a8983980af9365eacc1d64119e46ffe528e62fb016fa0d21fa2c34bbf792a8849953a361d90f88322f36756032c1713e687cd14edf3902781b1f70171cbc6072edb82edfe0521aba3959f8675d4e3332c65f998baee2eea237271baad49eead81844dcf1457ec3bd8c644f6829d27b90ba933f642fcc1e5b1a42cef9ae46694eb584496bcb70f3878c89fe51c8822e04096d102a75d0d48d21ea9f720ae59ddd37e62f89cb87e1f2c0cd67ca6d31ca9ec2bb918bca92b26f561d31f4b026fb191fcbf996c9c9c7eb6e8eddf9a4cd504d67a154e6dd2f04184eddd6e9bfac1f6c3addf32c54a76a471c59cefa478d877ebb46705625dff8e88ab39231d04f7e6ae16a743c1d7c1021216d15eee838da868cbde8ce7f0dcfd055676b8523c6ebe8de10395d385d48ec2aad46d1986b66bb19cf80abada7bfade7a81530f3b40eb1416cc805ca48aed6c47a5440a396b5f6717b4c9ad956f04feb40e152da09eedaf6a74e15e5f3199473d1df5f0425914a070d573949a7a3b0d5e3b5ca2700fe21deb02bc4b10152c762bedab6dd65d2ed72a8e266752b455430c83d5cbf2a6f7f2ebb7034d9e120c411a17a83e9a07268e80ccd9a2133809329fc28a3332269f1e1493a942ad00eadf2f44d34ac5674e8297215c17412d74248841fcd4827f57282939fce264d38b08b91dd46cd60a7c2813d460d637b1c0b2da43d40551df32e33d9db29231c9863d63256e03aa3a1b07aefd1df3a2084d541c4aaaf33d0d91c80143b4307070548ec1d680e971d96cba53db4f366bb54b576ded8c86e07258aa34fd3f38ddcfd86c88a3bba83d8748752d7e3c7d63cb5ad664ae7bb93a8772b0b91b4a5e546c05bbde3cdb15cd577e8c98d8d7f8047376319068f52bfdbb9a84942efe706e12165c3e3f022b9abb02aebd2b7fcd8261e6f1ccb361e5a8b8d7f67b396fafdd89d1cc1a8f0fd768a759f89c5e82783c43a044e1ec5b7ad9498a799438a13c49b21fa02841211db5686f6e9689a2647212785133859963cd7dba6e7196dd1f2801042f5651ec537db9478c6c45d4b5aeb721effc6b98935b176b30377999f2722de5d39a424a94bbf7e3dd478ca123dc0fdbc2676e9a9ea1c4c348bb2f48fa04f02933b9a3a89789fccc2a15994f57534225cd15bdd5c3d499499b88018537ff75346380c5f50765ba47af4c17058f14185f95ba8555a0f286e939a600b7bb46bc2276b2ccd4165c0f2b5dcd973add02e24846974a2033f074b7c6ee80e6d4f8c21750231738fc0d7c7df8679bef7719af714583ff769cb53f350c16958bf871eada946113e51e99df359ad8a027b68dc948050d64032c42939666f0b67e6b6f0cc6e0bdfccd27a19befb49692b02891beeec69228f3d709181319e0cb9d06a94dac6194779e41dfa15f147389cabe89260d59ed2f741e5410d906b4b941c2f8000bf3b3e21505c854d02c209eccc3a9a9bc494b913a19744a4bf83745f4a8008112f59eef72a41f1304ac417e2721d738d4c7c24be6967d835b595923976da467c1acca93423ab07df6651d7d741b8ce2a7ed742e2f35ab67a2636150e19316c4cdbcdb1e0095649d7ad378bfae87f313b1e66daa143605b3b55e43567aff35315836ff10133288abecef1f33aacda1da170484f9a47e58c380ff945c17e337ddb640334ae13a4a41de1aa79359eb62ecee737d077c2e00c3916b2de9e3e5be699d2d8cc214a670448d2d862aa9e4fa21532425c8d45f302cdb31861971214882b1d88b3ed892a9100198cfdb4e566b391788b7a2708c02313c49c85a86f4f65c0d9fba077d210f5ba0d895e955b67023e3b59c424400b589b9a04fd76335149aa26a0fa3512f0efe6219328742405d733632e0aa9dd8495242e81c0af5c4edf1acfd45645fd2abff15213af7119eb2e201c5814334752f512c857f26b4ea0fe24b93201e2942104243578b6b39092a026006b1d4605f97e33d566fab38688ef5a3172a64ce60d2a4ede60881c638a990e6a59b344bf27ae4e454ec01faf392e2d22ef13578973b535c8421fcb578a9a0232ae93e4ce1adaba33a9d02f966786b4a6acb5cba664a1b496ece453dba34431afc95443a9a3d8b3fea6aad41ef285e10f75660ff883af94b91d134fd2e4c5f9cd053d946538afae1ea7166876fa1c87de7b048b0af901b63cc245f181fb103e0210888c570275910f9bc1420f073636b73967437f136285a23d646110f9129c963d8c2123a1a332ced9c7e4bfcd3c64125107b07e7809eca590da4d5835745d98180e410f38707cdce81e15ec210f534637d5d45d38599c68629dd43f8395d1aff89788fdcca57d76e757c13e4d5e00301bb854a43a7b03d8617d7a5db19a32ed80600d4e510eb2a7c8de52749697337713892c95a14e43603a923916415ac93322db7409b211d85dd4ec57840694187049dacfe083229a3d4808f3419d702cb9c3a64d048326755646f9db1652ebb91955180a1019a0f8f66f1a5010ef9a0c2cc4c52a0de8e7a727f04afc428dbde2484d3abd041783170a61308255347901d2cd1f5c4e72e2f1d83b6a488e137355e9423fb2641c8321f554bac367e3732a5bc2c46b978b98949ee50ea44691bd5896c7aa1256d88bd8f120911491f27e7e22dc888b39c4b7ba15ab0e164a95fd060cd592d5eda35f7a81612de5233dcceb85d2fee5128ab85fb3b4e40cfc0a8f80041146d77a0c051fcd0e9c59ca8925cdfb5b08d4bcfb8ff6cbdd5f686749208988b4749eaece3b6440267d94288751b2d0f2bd03f9e183a39e39cc2412333b95045d743b1a4841ddb6f6f7f85c1d1772c583a4e07f86d6298123aa4b73a470736262b4f924195b77b410d34b4c91ac9e0f357c43e0ba83ec35d3064d14fad3d2201cf15b482d81acfa9d160c70e1257b7a00efb550ff84982cb3728108433fb57bd1f620c689ed1535ef68c24927c048391a1aaabfc144ff98f6b3f3f6f765bd2cf8386cd099dd1b82e10c3a688d865fc8975ad02ba9924bfb432ee448569ee5b49cde5056cae1537c02be1537e50013197266185b89bba7042c9a2a5a4422e339a030a67def8471954274bc84c9b7afb16cd2ec4f397b11725de79a5fc3a297d0ca31caf4414bf805dc572270907526505db079423b5e8db24607c9c47bcbd8df3cb0ca6df85b863218a490ee01c402d9b09f3d8f2d2692f47a29896cdb47e0aac87023e1d4c7ede33520c23a857633b3c6f4e2ad707df2c869cc0c89c01979e4869fd468e66d4caa3de840db11c4b838c287213b5488f2390e6d93c102364ea16f64adc372c4f15026677d134528a5980a03b74e9f9ada50b85c38d9521fa7017ab20cafb96523ed2bf4c26f141b62589bf38065f923d587f3369cea80abd7245688a82be0754ee626d520b3865cc18658da4e04bfe829bf4fbd6f7453d36e715db383e828c1d33f03db3db318ecd16cbf1c58a34bf32f82e52cd07f79155308e7d02f04dbf707729dee27a1e8441587babdde1870f98ad1fb1b70d9054c9922ff6aa6721339ef10caaaaf2364cca64e6bb409293f57c19ac8540f18d22c0fc933ef28d20b542c0b4fe76d7047ab1221bbe65e16574531ae37d8a140a0b4a4be825049bd9dab4521a00e624360fdc98a4e331765804b3cfd8cbb8e23ea6722843f75aa7b4a565dbd1b76aa52ce5e94d1739560ff2e207e36cb4fd09d71cfd32ea40ea7e4f3284fd29c42eaf9357cf852e03e7cde9259b1ca566f2cf75f722240a43d89de8e5cd45d6c31e52facc6524b6bbf0e7d5fcb8451a62087e041f08297f8e39d5d7a1fdafce510fbe17e8455c1e94034de724e5855696e8080ae41ac3a0ce1f694ea6e32cde178b372f7174c34d34c3e5e5dc248da9c1c1d46aeeb2a0734197caccc070c0820cf62c3ee01221760b3086e4476f35014a414f049d12f7a20db3188017497894b083c14ce7a0fded3adb8a029d82264d1093da1087c3d5d925a2cad92118439c64e6beaaa4a507ffbbcbe1f2b01dd8c73bc2c3dfe748626d2871306198a91c59fbcc5becaebf03980873c31d0ec0c400c05b0aaacfd2bd510bbf295876c0e3ee484730600078c89b7e2324466029351deb3692578792c742a9a01dc39d7f273a0df4c76a7cb008cd6ed8399fa176c8d3d45ce09d9121d460b7f5f186c5f0821c665ac2c723cee2533ce960b249dff6d84ec2fc564e80a82185d4dcb87ec45a08a24b47c93e22cc6ab8c1a9ca6008ae664e0f1d13367cfd62eca0543818de2911b247564c24a53716b3e36ee38b54c3de7e5a255ec57d170e9903ed5843ad0e09e190de4fa7793436b3060e8b5971591def07f86e88e1176cfa369aaa870a970292594f394ea708e5350c59ff2d51da8af6806fb83545541a3a3fa872e8ef806b2d685b8a4b7510fe59a2ba36284d298eb1dca0fd17581160069df901f179597a73e16df6568863bddafb7e51b9fdbac50922e0c0332468e86191a55177240852e792fd08274dc69b73860605575da8b6d01d7e12f9121b3524153ff4b63186eb22ecdd8280ee466b5b04aa1e914eea4e807b987cbd6dab9766ac67848932225d651b3b1ca691cbef20f6e11975cc873db2bc80a11950153a59db7db708a224dfbd03f3e176b1783c2b242fad2536f463c1d84baf4aced988b046fb680508c2fde8d382e019a70793ee3320361ec756c35dbdba02453fa02b404e9ca05cc06ac08a36b59d0821cdd657763241259ea1e3eeacc1abdece43a782b20c4c55304b3838c630b8c043fd705df02408a1b2da4f764c6671d00668b2597a4ece968bb332ee0b78d360a6a77d3009af164616c60c1b04b80ecec30bb99892195e3168a541dae5ddf79d95fe7c018ce935d534c0e2ef8c9857daf922e939802831a07df4b2c2add3e0182cd4bc54910e49abc485d0129ec2bbfba8f2a3ebd5fe830b92411929a4f8396f602322690eb1571d5f4f71f7d5b7e383932683f1d18f3474bc7adc677f8144f187094964985315b945ef4f96e3d8c83af0385c28720648f2cf3482d504add3ff33cc2ac766b17d8761f7ebd1af3965a6b5892a0dbf45622bcc7d7e46821d30927738640e7969115d4f146bb1b6d54a38b30a736e3a583380fa0fecacf5ca9330aa4aa121e2cfa87f76900723a848660121a9456d1d0debd12b3807d3756f88dd0af0ef2cac16f68951dad234d35ff7d6476dfe502790ff2e253e7cdfbf773511e470db1ef54d2c9e4db78796c52a39ae930314410682ebbd96282b56c7c9b21867d480b2640e220c002e3162e68c8666f03f64c7606708efd8eecffdbd5947bda52bda5672dd58546949bc5b56fc1d43785ae39d5af6bde68bd325ef64147957e68425d998dde4a123db3910309d9376e4499d9feb6137e3718f30a5682ba404841a185433087fb6ff201a09211524623210b3e6e59dbf315fc71b723413f1392036290240df165d20892e12de154e1ae0d13b4e43a346aac694651327f0f851d4cd6a5580c6e24499e155f31b9814ae4f1c68a90f78471b9d94ccf99956935881390ba127f1bde614b8e598aa8d19f4094a47f5ce9996a2c9035da9a0db0a2901d2288aa3571afbb068a809d28e39d3161d6da1a10058bf1e7f27e86678656e1c5d020a7286ce2adc2d213fd50888205e9433dfba11d06d932c5177b4d5652bf3dc0210dd90fe5ef71af4b80f2d995853f36085243e95ba93d7a6019531be3c047e6f23fdca1dde52a20ed11f1fc2dc7896a723de02ec47eeaa5add791fddbefb134a171d2131926f17a79e77a66b729acd7e0a41e5d72a09db17645964901f0dd74371b076b6b2d41d3e83b8e359eb2dbf5bc4c3fdfd5d07084118f53ef6a88342d0268e12946c1f238f99672e20195cda16ed869905a47b19c870ce6c4539d376ad789ae5166ddbcee8f211c599ddf75caf3c9e504f7082b0982c79bea56175e080b5f7cadffc6311c2b0e8512aeb29f81f350d92649ade7724ddeddb14063ed8893d390220a520e6d1366986b86213fcf64a845da411ec27eaad8ac7e1656a76122c36ffabc57041561a1ae47eac5b545dab430c1e8ee8800c8fd92af8e5df346e0e0f4aa7e6f83b5281bdee9bd23ce775ebf27aa4fd351176fde19d99ba22887d948ea7b45db606af38a0f9fb347b03a459d1f9978dede46fcb0f756258a2897a0b9eea73b34e6f8b7843c8ec96b01722ad61a8de85d111dd0acebddedaaff58a41125231368b4f483e0de226d3eea11246dc2b3740d7960982c825be41978a88fee4ce64b14ec123576786322752a86a9795ebbfe0e4c9a529a3bdb94a1182eef5e652428bf743f176f108a90b1a72c7ef182a3b976d98fe55b79c22fb74b8e24cb4d3a8ee9223865d0b24c4e4152ae0de6a8ab06f325f75e2bc1af3e09fb927c125517b1655a61bc995c4b20f9d1abb12496cfe0edd599b75e993ff43e4a65a513bd6df692b68f4b13f326ca84f4d12a991d52ff172b4ff09df3402a7ff5cd27a4fc9e323d402189fe7dbf1a17eacada259caa1e1c18e632cb3e1fbbc98dd24166e9529e67634396952f5d8df0ec57b9b0a8a5c18e67290486d250af0c2a058bc3773302200b4e793a6e2b954252996a333b30345e34fa2bc36826f301c63479335326b91ab626323c44f8b5fc945d0400f4edf35827ac87905fce6e6f2ec419c0f6cea68e9c0c0f9f6d888e9c7f496ac8c69909d9b2cd895e0b1ff4610e08829924092243e042310d7e4eeae7f3bec9df602c7f3b66390c9029f374e54d273a794b4e77f03d498b9169a869c7cafc7620685d4ee2b18d98f2589c014be0316ab5ca7ac478bc428f07f55fd0b2c6206f2394cf2381ea53c59e1b2e0bb2fc671155ceea2c0ce2f010a78ac29cfb09ecb54d3d59a6289468dcc47f409c37bf0c9d225bff63538a75711bec0517a5aaa90d4a70d7911d044b26c96d6e523e2eb00f4ad67b867f7e8b281970f5851bd932bd37af73fce1045e7cb12649f03809dc3813d522c8e9c14beef488f1aea4e589c80160d3a385338eda5c0903e5da9ebcdd4c428dd79de9fc263d6d755c11784e40ca7e599cc805e46d94059ad6e5aaf3c57e44bd84b537cf2ca7fcc775f9aaa085213ae07f9af9968634e32429f445c31e3c610468babfc9f7ad96a9a1f6b0bd859764b9be33efd80b553f4d2f8f7761545e58aece7fcee21a3ce21d41c3da8444e633e9b79808a2a42287204c36605a40acd9ad5c2de00c1c5e394fb1a17fa9723bd835ac6d7fa706b7ef540a1d4d1d3cfdaaf0ce1b0f1ca88dcb020edb9b2b2a1659c00ef800a89a6621ea138c18047f4c73c461a5aea9454c5a827bacc9390e50179751fd2a2d08ab6c8ec5ff44e4afec95b9e642d5445039514a8d4d56ce89d6b11333bafb640cc0af1afbda3018d42b6808961d0c2b5750c482477cb2760543888a2f6ba481798dfd3fab15cd37db670bd78366be73ea4babba6efd7573cd67a11c6d614d02e1baa11eee8d37e1ddbf96b4f41027f38423aed7d578219ed41c1ac023f8ca43665d8a3c978949e4140022d394668a7b53947e84fc25c1f18f16e950b57b14c34a8150ef38b2f6fb66633b87760caf4418ab94d76448227ec3ffc86585053491260d8d35b318bb2c123cd791686dc1739a39f56c521c70d2cb0e9074dcd3eb2f1170c3df5d4270d23b86d0682091fb424570cef106fd3f1fcfa9717603612c151ae0dd4b2c5c048f7b20dcc0105a928b128cfc8635d59df4c84aa03c3a47173fbfc7cf6d5b782ad5b6b729d7cbfcdff393b61e98317701376342e37aa12aec4177f7f7e95bc3b319eccbb0d7fbbabb064e02969b98e13d33892bb17f848bf6935f96b7fcee5253fa8babf735c41d2512f2fead193bb562c469db9c93829a72e71c4dfcbb8c20a912088fa49e0c14efeeb276ef519c4303736afe6e0d09b218cbb6d71a3e0c86a375531a4ad31952412189a1834ab1a640f915e54094d46cd65e6069ee3f9139876cf2f41cb2a5768288de721d063f4f854dfbd2e43a25b51434852e5878607e38f76fca4ba3ad3a2ffaa861568888b8796049960ebb4d3064fc735e58d55fbdbe45dc56506a48c4dd3f6659ce0abc711cd8e3949c9aaa714319430a67d81deab580dc4e3b5442168bd69529848329e9a3a02a68cb8347348eff3b084315605c230776463f5a80f5b46cb931a3a390c68c1a4ef5f66e46f3417e59285a3995c54329561d0ebbe4d829d2821f5e3acf42ad5932d53b834a65f267102251c1ba78a47d4c2e94c311ea5067546a64a520c43ae875fd6a477bc4508ab33acec0a97546b277f03c6bdfeee769103f9f56c67cbdf8a5af412b84af9eceaea0e4f2622d8d824658519cad1879395a9519f26b078fe95685940bcd440c4ff77981d0e71e1f1150d86f06c322a60a12c85ac90ed6aa5b75c4040a08ad2c1b780d49881a893840a5d7ac05f95f9093154355c70370afea0791f476ac7878cf4fc09d0a4a36b65ecbcf14cd1a3bb099ae0fbfd90622b6fbd3292c104db356bf1506a54a72a4f4c445b29429d9ebbd02bcb8eb1504ea24c6be7f79a6af8cc6327b7c8a052079be748503715873aa9ff87f6b252633e0e134bdfca061d0c387cbe9b2a9fd08697229d6742c8cf58b4f81f0185ec8f8853b9df38aaf5e3c9206c5d860d65e13fb2cd55e66a0363f289487467291bb7dd05ef62600c1a9bb255d316ddc8e5b971aa83457879b809f1bbaecb6c3d4624b780bef16fb0a5ab59e93d41203f57ddcffca855804222a23453920fc5aca1a477945ed7d14e47cb7cabc461c62d4122d14df96c211792cc45d97def7d4c0bff349a9bd7e638718f23928adc87c6b3564fc6b562598cd8939a6642fbac75feeb052492490f41f1090a953ba17f6ee5382a7e97b963182f69e6e59dabaac289f8335dd598a1cd76f7d81b3da7da6ce562e32433368e039ded177ce584586592b3ccdf77a9328251fc10ebd1a706ada7ad12c36980f7e10a9068ba31f0a086a10c76ad5237a6ecbdb5c6abe8e590b5efaf4a074ac19d15008e5905d0463510f9fc56bbfe2050b1b3e552da0890a58a0e6ea3f1c2f8b64f353ee6f21e74d19248554369526e3934c0e4af134de3ae2a1ad75c9facd73481f6245cd207109e89cff03be8451cc85604fea470146d828289600d896329e080e6e98cb5f0f25a279d690d8e6c71187056aa2e0439423e06d2304f7b66f2bf0442e6fd571bf51e57167227afb4d8641adaf4750ccf4d642d76f4af0980128dedc62397b152f4c86f4622f947af4d56849cad294f090349ea1b2d7f72af4cc89758b7bf636cfd4066cc459967abc0be6179c08212890dbdb62f59976cd201f4c6b050517e7db366437ed906d8546cd2d5bbdedf82345744dcc1e3abcbc076378e412a5c6dd2f217ea3160d63d9459c8d6dfea7ac10a371d908d9bc018f76e2e14e6d440281e0e9864f4360aae1a73dab4b28cd3b5823e2f92c6da02fbc65d2309f058497a6535ffea72c1e0ca9013ea3f0b766db8b6ebe0c9f97e1b44654540c79ce748644ff5e625da39546fa583afea86cc1b02132ffac960474141573c77ee56377371cdf97f2953171eee60fc008022805862b1cc48a7b4fce0fc7840978706e4a270cac793cfbfd2deb62ff1147114fc43a3762482c72aad8a2506bac274e4e1e0aaddf983ed40d24e673866f2254eee4884f429b8e81489711c8369058404dbe702fe4d6610e1a90ba46d4c0ad93d0124ba94407b75ce78f3a94121ba05ad4017a5416ec021946d4070af7bf2c17468314d005088662895f09a410e3275db4950d5975a082f82f7f3072cfbcd7818d1347dafa418042fc9a79e1a51137da56a7b3d3c1fbdf3acbff8b9b47ced2114803428fdad9f265ad71d8fd5a42e07e955fc2c945dd35b77599d83904520c2267a6989a478cde1a61267ba313c9a6661a00a490d5cf9b7921795edc2e04ba5febac5920d23a4a0706cf9d6c0f9e8bb7213fcab7d57384dec017d37793acd7ba12fb09309cf34d459b0051bbc5da0600901d3c00353acc61aeb36ffe8b201130fdd4fb239d9c28b9db2b6fd936ca232cdb24217befbda59452ca2465650be70a170a4b5e90c14b5a402b7c76f82a72a8a205d7472905303c301d7d41050f66165003246670e2e50c52d2b4c14b19a82a949c28f5b205e7458c9f73d2e90512548958c59cd38b2152754e2f6cb041bb08c2cfa9b3d405183fa7ce52174a3a4b96ca39af98add9851473e687b12e88f8ce0577882dbaac80c68ab5622da52f1c62f0c30d59cca082307a901aa38b2a6900c1073ef8d0e990e4764181191a53e60413b88b5c3a759156705de4ec0207cd8cedc2ae00b062525f3acd6927e56205d7455a4a99c05de48f6a0b2e459cac582e2e981ca55c6cf8e9395c58f0734e3ab9f001175f62b104ea6ac107b8b012c38c6933df9c5cad66992da0fc5c611c93fae9e5ba1cbe7d476c09f6dd4dd1d8a0439ded7ebe9a29a5097b1ec6625b22142ead2f62312bb15894582c885652ab4b8b8b1378daa0850cad2a5a5bb07c18d3a2080c98bff1300646cb960dbacfc318982566dab680074c24f671404eec4b956f6ec5b1803f9fc7df32f3e82cc47cff459a4ea8773d0254f31ba5e65ddf7cbb9eb6fdf88e7cfbccaecf3c143f7f4580c82f61e400fba0ebd65d37c39be337840364faf59b3f24d6830fbd52871df55ef9beb4286f68596174c54919188ca0c28713b0bac3e1bbbb4d80a249ec8a1ac23c91d4bac2041e9f2c8cc8e18a1920612113e5065fb01a8d326490420c12337ce96ee05239dac358164fc0d42fdd2dbf7c999cb4d5dbe1638213387b18cbc205ffed50adac9723b6033276d083ff562d0312a6574e2ac250c1c5937e7a0e97a352fd482e75d29612a59d0d3fbb54f939bbe4e0e79cb4a5b48326dec6c3d80ea684d1ea725b5d645f78c60c67cc00b341525252ce6c69d102d3e281ce1718639c72ce4b39ae611dbbe5dc7a377ec3b91be7b05b1b5ee3d669bc6f3ecd4d06aaa1b9b9f11bc75ee3ddb9689ce3dcba0dc71e07ad7399e839b799e8b1d7a81c76416adc86dfe4146018671cec34ce659b717006aa711b5ee3366a7c61c386d37c5153e3343441356ae4cf464d2a75c3fbb04357791fce438dc38970b0b7bec0de61bf8e6b3cf5c25e83536ea3aaf13e17bea686dfdce46f3e761b5ee36b41a6fc869f1c63d8ab1aff91d8eb3ce5c1aff13ea21b7ebae137fca7531e7c1b4f28fe0ddf4e5ed050ff8d6c243e0d8d77343435687ca3f1b06f5b901b5eec703f4dfee2d3d8f8948d0c7ba561a7a991816af2ec5547e3618c87fa12e1d0c46851d1a2020748102d93dc5f1ac5bb8c531d87badd706806ca56dcdf7eae1f68e65717eb10f28a255a3635ed8a2cbb5ce5f203f7034d424a4aea24d87280099640410e4dccf00108dd12285a1036f8c19224b0c8a1a9c9eec0c90ea0442b98c05696065318376062ca1419ac8045a760828a304420c1431060c0a25d9e7a89e2a9972ab22e5c3cad376837b35fbb6a1a165b7a07fe0a5878e99d5abdcce3bc66d73696a4580da55935e7a4029b5aa88cae504592dc817f2fed32838a44abafb494b886cd8e31c607c06f8754664b89275a4720f021e2d3ba02021f2ccc30c2210c34c64832a306273ac07a00041142902943c429cc09b6a31d50eec069590972031cf0708492a43086604d15fc9c5b98fcbcac39a37881c31219ce8439020a6be6944455f1df6a86d8b495849c2ee58e2b48555ebe74cf98a331241e9068f84f470261ab130748bbe2a917e1799a85504f5b4be06fbec4018a4e9e1a99dfb5dae99c43f1db4a6a890fc4f08dd7c7842d465194915a989003fcf9bccf4fafe24c01100d00c20456a858a2055e8cc9001851c0d821881e5660250540c418a4b861064d50f11265065a3ce91145052ff8411312ac061fc9c3878fe4c14bcff1ec801ce08d7a42f090235230a6c912132f4e34614922ce306308252c98b8d2d1b0e58c2b050c7888102192474a2ab145e96ef982062e2d31031b78b1c2021c9660bd848062891137408146193096cc2a2670ca070478726cb9b205ca7f3962590da6ab64a45c4441813ada3528a7a469c47fd4c98cf245e66b509cb8447899b38f3a11e1e7145a23a6424d913335658acea739f9397b85636a6bae25034c7d93dd0f8db39d0bc6ed9ea64b1e373af4acca0db21b645aa08ee6545007be812d23705bd8a3ca111e3ab4d1dbeb357acdc917dbe633e6d7f308c009288a0050461a3470418612548841810d3552ba0c7183123a8069f2022894f028658c304a9924003cf800828f29783e8c41013b3355299c839f40a31db7abba3df6c40f4c200027ba130c01036a000f6350f4e0ebc3181438b88410c29e396597d0fe41086191f8437dc2c3ac64fb61bdfaa6f19035d354174b24f2d51da1d86e86b7560834de5afb04985a6bad358cbe72f95a85b0e26b0058b55a265a80c8a2840c809094048bc8932362511011850931acba85ec2790e80f51071c704e6cd69e54aa9fda64060ebedcd00310b4b0ac194b6010059618d8a009199d0c42c8308540418d4e491064b220cac04852605870c0a1082930966d82c50663a83843850bee61ec092c54caa6954b55bfb5d6dad55a6badd556bf758b27a83879020af7840b34ef614c4b10b48001cbf802062f5ffc70440f4d5274310401a5a607d21046503c31bac18c962f328dedcb826423cb94d4b78aa4c35816312f3dcb9214938d396b9d95e3388ee3dcc6735c16a4aecb38fa7aaacd2c5aa66f71cab64dd85d200b94e730eaa1539a655992c5c8860da6ce62f49cd70d5162590e634d88794ed36215cdadf7bd6696d47559d76d5ce79d6fdde65bccb2acebb2ebb0939ae69df741a4b7d9855e358c3581f4dcd026b3306db3092b344b1aa9df2af52eed5cd66bde5a497064d17c4c73e2069a6f24ae95a4f3caa3a9f0d3d4d494068be87505a5b59260944b186b22297aa7d76019176448e3bf11a0b856122ce53a90123435fd5782a6a69ad38986e6a9d3387143d7755cea6d6499f2309605e937b8412ef3cdafc7711cc7f90ff85cc6d13c88f3e85c8eae7997795f74019e1c7634f35e4f4f5bd7da6c7cea3b0f27e6186b82e9612ccb92dfb654eaa9a7b2a4a15db9a369499902b20c857aeaa826ac5ccdfb5ebe5d4aa9ff804f334ee741d44fdf3df5d3d30cfdf591eba2b7b99739e7bd5e7a43f2b71c6d1049c8fc476a9e0bad2c0ff5aa6b7599672c8b961f22ea3a87080e3b71038dad8eab0f1b7451841335c0a987b12c69486922c98826acbc0f1ae0d3c3581626d94e4c710208254c36c0a31b5a3bb476c8aecc1f8e854950077415d491217424f3b575c562c36901a8e2b40054bdbd960e2d1d5a3ab88c30749da37566b782ddc92c57ca2b6746ab94df849576a391fdbc33cb3743ab52452893cc15de4a592975eb29087be8e47e88fecc120ddba3e4075da6b80246054c5843987e00421357c0d044075696c494560d312c616258bcc4b06c69e9e0434c6b0530e87111e20d1b9c37d3608fe9d55fb5630adb65419b2d057bcc091d671b37600f215b3be4ba13ec71bda1165e3f2464fff5b1e95f317680051c1dc69808224aff620c8a5ddfae4f3a6c0ebde853e49c94cee836f8f210d25825c66ee891ca945e45083dc68e5560c349e30c8382accbe5db2bea3ebce0ef7eab38a75cfe388e07e638af00c779772d0ececb694e9d05258fe99ca3f20791fedbbcc62adad6651c07c0effc07fc2e4be99df493b7bf9efb0df68af3ee7a567d7b7de60dc9bfd57fa4ad99e72100cc38eca547f72106b703c1253efa745a3d469740d3041907880145471f7d6623f1a3c3a848ef1ef7009c7087035c3ecac01f4ee1d4961e34c1c11941a8a2050d58b233c14b2965901e9e80e28c264a68900396cca9558ede890e739628135be207cd031ee9b8925862cc7faba30d764fb7f482744fc733887cfd26bda0e978baeca4b787034471640692d283a663e90549bfbd8ad25bd5abd48c9d45b6c55a6bc55a1b3b8af2d7adb5d6da2dd65aebe38cb5d65a6badb5d65aebe38cf571c65a6badb5d642b72eadb5d65a6badb5d6bb832e5599cdb22ccb6c66b9e9100b0cf6d0a3cfac84bf497d285e57e57cf59c1ca8c352c7a9944a7539d8033ed411e7538f55b22076f425b6c4171f4a3e8280a30793b35d908d9bfed1785623e627ce59ffcda2cf9e2deb962209d37f9a9b2854e7f7a2eeed3abf387f31725de686b68c53dab2e4b7bf974379d64f4bd37e439e59cf997f43f3374779d74f4bb1842f5e2e56b9fee1bf7169299640b99bb98df3b8144be096ee12e7d1df12d32244ee584f2241e7a7b81449e82a529799b6d4a84b4b4b38ae4d018687e65f1b53de8fdcb1ce79f36b784b4b9104ebb13df32b7948cf7c7611b8bee5ccfb86e69215b3747423898ebd4594f1ce9b67917e23237c75e977fa17dfc80859ec1e00b778e90551bfbe55ceb503fe3eed43f2380fe8bf34887a3f8425c02f53fee66f7ed45328c2d46bfe76c0df271dc68af84fe6ea3cff4dffa404a8ef803fe9dfac5e7391fe78fe89e6928bff627740b4d23c75e9e1a890b1348fdf5bc8879d0ad68b097550037dd8a95053e0034b7315185074c53eec54984b515420e18a259a581aec54905fc2c0417bd86d6598c8620aee61a74208291022071fba06a2880c28ae9c1e762adc00634412312ac42d6400c6103c3435b134971e7ed8a940a30466883492d07cf5a85704c8fcead4715cf48562138e902491a509a1b0b9e64552802cce1594a1fc84dabceea49de293ce7fe429e8c9d66d9aa3bccd3befe4d4ebbc7a4255c815f404e5f08918f9275bc67e378d85722dc3b45a843a0ad403328dfc13cd37d8a9904f308dd5e50a9c324c6361df324c630139c07f4f3a27f26af24fb4aef3cd3b39f650ae0246f99661300cebe440f49f189dc0d21cc21e1c780206a803fed72570e009182441d33c22cd6378b1687c93dcc93b22258875e9a7215458db2684f39f0e62bd0209e0610b4bcb4820d08514acd7c3ee47d013cde11329c13f8151d68db77ef2569090e794897e323cc20e599d7f184593a550f720fc67a4c61381500c31c55bc78e33510872ac2bc3948b9aa59161e66b1010f9d28dd43c91296609989010ef08e727df2837bb96902431bc584aa4547fb1349f5d90132a93dc59d27eca4411698b1d6948b1e864897fd109510c2f9614ea5a0a27c032b7008f5e08360519a9f14446a8011646104919d239ca5199a8bb5ee290758a7d2eea2d43b91324f3d07c9b837ebc5eba91d41399c00f31bc74a8e482a4ff7ac9eb65c6913e822dff8d208a4f12599b6b9e92666d5e746130d8e6d42b02d4bf6d42a8a697bec11e3a2c00599abff49e18ed6069be79496c12d0efeb762acc16fd43f2ed455edf317f48bc0884842b9668fa489dcefc4527f23282e965060111d4c1928ff989752430cc9360e620222efd23faa8e4449510401d2cf999410075b0e4657e42041d090a098a123096cd3012aec8018c05bd1d7617c048302681618c0c2f7f5df3ebd6c908f39be45c38e04f73dbd7b507bcae3c84393ecdada6d95aede6d693ae7913f6283234a109e4b64949e5b64929b78d4bc11e586c9572dba8dc6ed359e37f40df0b067f3d5e6c396dcbb81bd41d1049ad85421306c3e187aec7ffe9cd729acddffc8de013e2c3dfd795bf11c3f070e62e758fd8a20fc27cea26791f78815860c758c4565dceea94e9db87ea7711ea43f5ab16753aed19ad18830626262628a14392255e1085073334145139220b136596744dc6c8628c3026743d8c81836c0c2c363c4c688183d211648c01c3923a1411c50dcc1831b9968c0183319a68f18fab56c5c8139b70d50021ec65fee9f8833fe142818b06e93a01feb814c70413a386393b16fc645ae29a214606cccf87313150f09f0e8f160f8e20c28b61f4d3e3ad1e579247cded1c94343473bd8a39f5514cce891efae2178babe147a80fd17c3a641131558799886631ba39f5597dfa10ecd5b5239ac8a465a279ddfa90cea753ea9a0fa971eadb141bbe799687a4bc3ace1c3b4d26aa3713d94c44a4f99cbef910ebd3bb4c24e594231291942144354e21a25ee394893aa4ce35bf7905222943ae6f6e3391f593d3e4e8c4a7a332d149cb444452ba2c8448ca90eb5c26da329196afcd21904e334f96998e96a8786253220cfb45b2d14975c8a2fe41a6e99045f3c537ab62b6e67b443364cd0ce54eec9a57ec9b04f6fa7b99a8ee0af378f48a94d8f8908c7d74d901910f447ea4defc1fe925398165c6864925e6c68d46701c9c7c73af0acfc7be695f8de358034e125952daa1dca1f1529d8b0c11c16f7c4800dcc6e18de704c045b844337f9e7997ea3ce59da75a287ef421ffe91bde57e35f647a24ed7dd89332739121369ee34344701b294586e0b88d8b908fd864221bc7698f5a2f48e884a6a6341e07a8866f5ec33787906523e3006d9ef2cd5319e527afe109c5a6a6a6261c208f3579f5b103922479c49056d0629389a40cb1f11b3f923c6e32515c126172477af4fc83b1ec1f6402807f11c6d291be6d36de8d476f888ddf64221c6ee32a8fe8c55279ec54b8c917884edc214b25a1dcb1f18ec42929c480e58e2ac7a3380587dbf88df4d801991ff38724de80feeb63feea0570b84d86728726aabc170b7641e8c7fc75aee5e83807556f479db211f9dfea83a847d7f1221200bc98a57bd271b80bff7d11c988fc82a264c2844904971ecd481e372ebddb48f2c071e9bd44f2c871e9dd86e311e1b8922427b054ae657ee311ddb81295bbdb784436ae44958fa81cb27038ec5a42278860a47223957b9e9e91cabfcef1705cf3b5fcc99fd9487dea46aa0c8fdec6212b22491e5d45ee48bf17c948fdf62dc9092c1c8ee3306f7ee339ae19e1c8474270c852b908cec5a06404c7b1494e85af431524c3f4475da57b608c8c978f3dd0258f233837395004870e6f32963bd2fdc671fcc33999e747ee48cff11bff785442e48eca8f2051b90819a6721bb7f19c8ce54e948e73d3a100593fe4b7534fe884bf3e8297e40456084a42701ce7f257a49584e0375d25272b09c155aee5afb391fa373f0921bf90e3f462e939391ba9ffbd9ede64d5bd3819479633073db9f182a8c3a38f9d0b1e3dcd4f5e8072a7839ebca072eac5a386fd363d78f437de0b50eec41754bec54e882a5fd8ab3296470fbb9610956793555ec31e867aa55ab5c516fd63fe220bd867fba5ed3cfc163b49e6cba764c7a60a744f7cfa6d5c4fab8a7b6f1453b4b4607c45071835650acc0581d4032652f4a0a805850f5a4de09a87b131b18f3ea6d69cd61598000f636354f0f4616ccc0c5abe0853ab1730b2d69a5533b5562f5abe56adda5a6badac5a6d0d230720341ef480c5074c5b7009c30b94b9056c8620701045064f744cbcb8a0f34244085e969c34d8c5193290a1892a67e86006cc039626493e30828c976e055dce7851f2d6da7b6f5397315dc8786badb53f2a5f85f182a3305260c330ead02053c50faa5daa6030d55a97c088c20a17a38ccb6ca0a20c4ac5190e051d6890c187288cf0a20656f55b658321454aa1a24c4bc90d54243179d161081e2e95f345d31764d0f90d7574383de935539993735a31fca95ee529ef156c8589f0c916bd166046f3056189ccb36503b783c7a756df20fda467d77fa4bc43f46de6200ef8e3bedeb0849325be7a8a47421e197d1ce18fa746b823dbb32b6fbaafdccd7fdcb76ec0d515006bf503c01e0a83143760f92845135f193069b54d36a8f36d9007c3d8175e5ef37b3156a95670eb9ba198cc8327975d04a2f5ceb51793ff4e990814f35a1eea8fe8ad47afffd36cf45cf98bde37d49a1774bd5e2f4873f9dbf56f7e3cf259feb4ea59bf3948f30ed23cfefc487de3ae96a947cdbff99cc32e889661af327c8a05fe50369ea393de6c354da36e3d21241f69f45a3d7641dac5c5aca855450b8b181e88c1a285636292a2182e3058c125853995c7c29812861710b6aec049d9401e3e7a27fa8db28e207d4cf8c9a2836f3d21068a4fc1bf06781813d344cc0dffe510a30a2fd24805acea49641a30969108acea4549ec19188c657462554f82320383c1584a9a5533c442c21efe727ef908fbef32b120bf684439608591dc812f3d2eb94cb013b903df088adc813f654a952a1cb0e248eec0ffe2110b54aa3ef6306af938e5c3ffe2e72fba430877c0de4aeeed1caf4426f0d731b90386475d045917ab7cc5a30376a864054ce680f143a52a98a4c434a0a4bb9a80d5c29f7ce4ab2398e1516c4752479def54e4b9393a61818c50e8956e7b45ddb6b68c03447af51fd26b8edeb7e33fe896fe803e5f0f3d48f436c7fb540f63a7ea954ef3884b98b86680a1472abdd3d64504fea21327101e69895b62a5f2ed5b471a7a158d5c88b05e411a7c04a18e3ec2485678d093d3d544e6704eaf75324d3b6d750b3df3e941cfa69c2ee59c7256e9b33af46acd324dcbbc1f9969d62a4971e6b77ba1062192cfec379441b75e3d686bad6e6dad5e14d3abea106ad0cba0675e85d7f5020c7372c028278fd665cb51e558f50a5a2be5cddabb3e3df8cd9323caf674be1dcee8d41342f2cdd32b387bce08e94907ea809ec50986dbd13d9b2ac7751ac26cd2cc39dfa2ed097b0400ea903e7fca8ea33d9f76c663c5cdee59f54ab68d4ea0cb071da8433a855cfedaed0eed36ef9e9eb0b5b69cca3a6b6f6f0fde9795082c50b07ba6f74d59dddab6d636a52e9b66d83db1db9b4cdfeba994b239e82f1b270de6e68201bef1394ef3d92b6dd36182bfd5c457f2e0a8735c37a01b60e42cd900e9d355399b4fd7b9623615a4a33c05e9a8fcfa53c651a11de529b4a3f0737e63085ef3a1f9599cf298bbf008085eac3c857dbbdc42fc96e7274f4679eb3840a65bb771dbe4ad171a5e935deb468dccc32ebb20d6bfe9f7864fcf864b8f7394cfabf9ccdf4beb7e584ff9f5525ee30569ae39f6938773c3e19f3ca3f1ccc3b9e127872a1b57d9b8e63619e786e30039398ddff0e9a5a4d7eb373cd7eb4f6ec3fb36bf9ef23ecdafd7f0826a1c7ecc5fe7f7c6abf182aed364dc2bead8fbae5747793e3abda2de715ed09655bda2ae65137a456fcee955e6d36b217ee61b0ea018f360cd71bd7641ac4bef84e2bbac4b97797a7727a883baf476f48aaea847228eaa164a48494a5d96fc7795b8347d4a890b134c894b4cca16f0882ca9c405e9a5739b94d2e52d75562e20f077390c1b06275cf3c8815625776c8ebdae923c6ee632ee954df5cafe803fd55b55ce0af6032c84c0875cb011c6a4c465c94325a4310878a88474e6a7d3491da69e54c79247cdb337d714fc73522a64485760850fb010894012f3d35b8b0dc21e134875e2b45b63e0d123a977c42f31d4110355d7ea1e1970dd435d2e29387a672a84c790de91377f53f6075820e2f9bbf7c678ef69327d81b0a55442a2a234450e5c38c0dd4325242d3f1f2a2161f9203629d4925e8536f009a1d98b9e03e198d33b17d4e267e5aee07ea834c5d14787dd11241fbd73009cadd8faa8c38f08c7057d7a10f4998588fe933fdd9d900b45309800f610ae60d36083316659fe3ac61863cc629667ce62e76073cc4198ed85104258ab43ef83616abdd3d51e41a0f341ed452ce8edcde8bd6e6c2c1bd4f1743e85f2db3b9573b9007f3972f0ece89ece3f223ed54db0d6eab08ef270ef583f79aadeb1bee54fe747661eec166ccee3e459033a79f2b8be78cb9fff7757d2e7a54bda5bcb2433db2ee752057d6eb1a1b84befba9cc0dffd0c399a57f1479e514988098fa61c92500811a34b084afb893095874eefb47b39e66afaebe79765339b73ce39a70ef7d54be18f07c73eeaac72541e9eeee1a13cddf323520a85b4aa57edd13f155d325b4ebf5c0a36c80336c1b7facc7ccb3c8782630ebdca8939c41cda635184f52aa757bd6a7af377c57cf42c66d95dfd477fb5adba67d53db555bd1ff031d0ab5881397f54ea4d5713fcdd8ae55e4f750f97fb5e8c552a336e4642332ef44ebbe43c3c0446aa22f62ece69e772e1e3f98fc88e9f66b4582b94738cd45c7a1a15d23d31be0b93499b4cbd8a9ab4b1029b7342867818e85597f9c61db97b3156a95456a552f54ebb95564a223e4fbd5747d78505cf5ee9b46b091c9dcadfaba3f396537de69f63bf3e73aa77dafb74f2eadda93b711d3737cf7dc0d1739cfea43a2fa52c6293df54c1fc7929c030caa79f5027541e92df9de09fba6d523ae308f47b9e62a3e18a823f57e5546a8f34353569793a441f043e4f73d0ccb3953cd9aaff70b0470bf17100adf0364eae87f48a0ae955f49ae61f1fbd8a3fbd720010ec9143e361d86bde4e5e3a0e9076e9352e95a658f2d2e9d71e74f21adbdb6b787741a47fedb585bdbdce39af1e21d4f151ffdaafcb2e886ca75d10cd3b7f2f9d9acef57a94e7748f046ab77e72ebc1aff11ade577d7ae6e100d1bcc635afc938d87180d0f8c969fce427df2297f3c408c203a4508e3dd7eb5159c73b799d17c465955fcfa7575b3621e7047b44a1d82495a698225b880f81d795dab5a847a00983bdf5f9f2610784614d6de672880bc1571faa7febaf2034c29ff01d8439ea4f7b3b77823aa2eb88357dafd07cc72a87eba47e7c005dd75cf348b51ff9d36568cd41d6a74bcd47ee34cf6ae5fe61ebd2af7fd57f5c0fd2f217df8767b572d7342d5bcfaecd973aac4da8939f285a03ce31b5d63acb4c3293e787e6edf0c2af3e99a49309b71a2fba0fee509a17bff4aa8917997811c98b5e7a451d6a36b43bc9c412685cdaf877c3ad0db739deeabccd796badb529b7d6e68fe76df2507fca35ff6ee494b5d65a6bab5fcdfb6ca4f276bdc9c26ae58e6995b7daefc84bafde96bff943f32aab4b0a7b9d4172e4ab6f653cfa8fbcf3354fc896e99e1a8fd7bf59c6cc478ff2e6a17e09bfa062dc1179ba67933926f58abaab077cb9a74efffa7c7de9c1a3afdef7c257bfd5fbf0cb26fa229c63cefc277da881e4f7985842f459e63f29243fa8665d902d7f9349b64b94df93dffc4da6979e432727757d360f1f096faeb17ea81cb9d897242f485be83df2913bd4bf1d7f6bd7a7a8491f1349a8351ecafbfce47d2a087be543ddc747e5f3d487f36af8953ceec535f9c32a957ba6bed5788deeeeeeaed1e5af86e7a0cc3bd7b29a6f7e75cebb9936997efe6679562b77952acba2e33cc9a04e5d0dead4d5d0c7a853a7d1af5ee3d117f3e5a8a864553ad6498da445cbf247821a5e746e928924bcf09963d4a9aba9b2c9cc113346e6f0d5b1a4e1aba364d1573f9df9ea5d99af5ef3020b923af6cf51f32b911d54be6a3529af61bdaa5a17f54ef5285f9d267fab20be3ace9f7713550e9886afde65aa71deecd5759f2bafbc52e64a64c76b995fff88ecf8cd6fd67250e6d6ef96af96650e2719a69f64220935b6438393e77e3aec570f95a2487a543bb6d67aa5f3c63162a6df1c34735cfa323a34390f5ecd5b5a5a924b2845a145290a26cd44090aa357da22e615f05069cb14d429b664ed98c9cd195b12d34ce6e4747a553de5ade44ef51a1e8fdca9be793e2a2fa757becd39e78cd91964fb696bad9d76aa523236c5f4b6716e7dce98995719244cb16dcc9cdc9c4b316e63ba879bfec5314c3353c131a7dcc503fe38158753779bb1199bb1192bf3dfb4dc8c8d09113a754869b4567641a84fbf7dfdcbb2796f106aed9d3f0cf0f6eddb5ce99c3488de459c8ab1ab7f774e99823203b94130f472248c9eeb0c2ca7d31f3c6ffd46ebdf8df19650442836fd9542f1285e794b33fd61833adb4ad20b54a73543b9235380ac18599045bd5f4452a223d158b4230d42f32fa09a6f2a69d73e7556f56a76cf74a8437e9e7a99ea1e9c0379641aa8197522ecd377e4bd570d37cf05042ca7e3eea92bd77c99bd5792e366f570cabb47fab47678f774f733056bafd33dd35d66601374e06ff769dc3d73f6ca0c8e415c3abe668a537e65e4523a1dc3d60e75685e2a9941a576bbc0c0ed710133ca5845aa678b25288991c34b8f2544879c84d3db632e02a30124d411bd088c0668a823fad07d11e01fc25f840c0875288911c40fc58f50478dad38bddb37ca69834ebc5c5798a357ab484274171938725395b36573ba0ef5b6d65a0b1b77a44a62143d0b5efaf7faaf5e919f3752ffab57648537c2bdf4382f8cd1f30d9a994d5de5586936b5b78a5398ebbcabd3d3e4d9319df2e0d4772dd87d7b05bf0b3d1368a843efe99f919aa70ee3cb6fc2605f7391e9431ad211ece7fc017f60fdca2e48f7037eb15d109a67be1d903403fba016984b5681bd9034037b997b4412ba9d0c0c3315e0ee692f4f234e35b6f09b6e3b4c5c82a11299324f7d6e1c87515595a37ab9235ac1d1e70e4a6fa6759bc671dd3d9180fa8267b76b0c9ce25ca7ba3d752d1abd558e6cd55acc628c37da18638d33d228879c3e0d645e3df3d93834ff329fbdfa91023c3d9b3948cbdf0cca640774c2f272edd56df6c562ea45570f3016a0ea34cf4c06c7e770b06d7e817ce638816da35bc7185b7a4beb4d86ca0bffb51b91ff8404592724cb495eb023274b8c8a6030018c95a4087e296205286862698c2a5f589917116d408c32d008421a4d5762accc8990345dd1428c32d00842132b866c8311961f6c30c2f2032bf3185eac2cdf7689816150cd422e7cd0cc11b82da547d91d90dbf99b2f444497c6a8f2e5a35f6f6ffab4c108cb0f2dbca6e56afe383d07499f10a02e5dd2ce05bfb8f2d33cf3bc2cd866f7045187914c10df4ec9e4f0ed72cafe5c44dfeb85e4d38f7af482625b8f5eafb7f0fa6bbdd85507dcafd90ac9af2ebd250491a0e47082b7dec243a8a3e6ef158128e3cb59458b439d30ce74458cf9c6992e1f477a38330b59c1e3c84c8117ab3a5caa0187874b352c79d70af0b7822824814d666030182c2741f395057075812b0861a4a7efc843a2f892b29dd8a0bbc46097525efa2a4a87010572119b6e1d3e4ee6d7e1fcae0dc37c8f29f3d2b5a28e947281c4450b1e52eab503a22e35bff9d3aed77aafbcf77aadb75eaf5e56a116b520be86eb53cd419cd738e7ed35ce4180e39ce3bc06e8fa131bb7ae4d3bbb2746ceb2c948349614ebd23611edad5fd901c9fee64f4890ac073958d7bc0c487bed47013879fa2890c1ae4fdaf6c52d729bd70e88a603925ebdc6abb5a6d6ea9db52e053fa28722acd822892c4e5810eed8ac7540f78334979e753f3497be753d3db6ec7e705ceca6b7dc36ef7c4b79338c181aa76e93fee45c18337ff2ca85d15b9f9d1764c3bb5ae31be7d9f57080d0f8741a9f19e786a7fce45b77d36f745e50f5201aefae6bb7d6d7c3cf6017e4e435e3dcc8aed763c7014a398da75e8fbdf3a84fefe45bfea8a3dcc67fda8657937d724ac7e3e982e4a053971d079207bc5edd0feb1402af2bd4a9674ef4479064af6f6d73ce87ea0bd98750078a3bf23773b821f9abe5eff5377fd42bdd116f272111387ba80446102ff3bdd1344c36e89eeb0bfc4d6f872e7d93b00118c298b48597874a4b4dfe83627c3b8f874a4b517e4341df76f48a8831df3eb9680c748f10a5a5a2eff76f67c1842354aa187cbb430e8251e5dba78b0b1cb95ec1ccc306060d394c3578709a42e7a1d21744e468da1145eaa19298231a60060e2d6a6c51e234850b62072f8c7e506389b3e226091c40287561f429252e981ec70f14e0e8dfbc39512b11fafc48c10f152871c164ce09c57cf5a83b80fa007e004f073000faaa1549cd4fa2ff3451378db1bdd8b1bdbb3351ec8eddddddbdf219e2190f73ce7bedb56eef058e588fc166194e60457f8267523aa94f3ae78c4e78e626a57fd195fa18143df51b843d74fc1729f0625d39fd8b72ce28651fa91e43cd329cc0ba7ea37b7546a598153abde64fa66acd37f5b1c6ea5a01fe6e01ec1760909efb0b660a18a36f1c731c88ba756b35bb1d69d737eab79168d8ae7929c0a4538d67f376d736eb1c128d449cd2481c4d2c4e3c30c3032d3fe6e7972abf4deec63e8a5f6bf5ada1951e63a3e30a649eded13bd4ab070121bda2ae05133031d9dd3d14bb4aed205a462296d079ada88aaa15d5285bbb6b5475dade6d45d336afde1db7bcb420c1a27957d1faa87bebeea3ee41a2b150e162d43cd2c43c640798faa5df1efdeae53cac5f3d9d97ad799552b696ff7ab3b66309d18fda6eb90ba275e6fd5d9b3d7e44386a87accfe641e3b6ba8c563650cd8d4424a1bb4a24a1ba955c9c82af7772cda1e4e1329f4edd09fb69db50bef947847bdc6da8eee4dbc95e3047bffdd656b6edc3bfe148a128dbb2aca35d23417fa38fe3fa17cf30c53257c876f2b6462292b065f5ab6f1e531b9d69d80ad90bdf48b8e4e15b9dcffd56a36b3b9bf3481e3f54cbd6487cf1edf65522dc679a6bda25c2fdcdb75791caec806823d156ae6d24b8ce89b2c14a83a1cb009f63d6387f640bd425ad1bfd5c90954ed99dab933902e9aed26e7ef5826650f4d9ed57e20ebcfce9a112165ffcd6aa7bf3107d067a707a0f4f3d7559c09fea8ba47c2921947610e65350d2d8ccf5aa6691c3d3ecb594a799258f8462cbd964a79405144ec22e882c9c7ce7811713f47125096c6a8272a7299eb2e84e071275657234a053065546b137887bda41098b13600153ba628c0b8499ef2e76ba0b90de7e57dd0f58befdca0240df50dd0b7010cd524a327ad8a39d28be62db289b17f9017fd2583d568fb908156ae1f5d3bf11a01184a66fa1c7a8f2a588de504a576079e8b90cf0b5523aa794dd11eae8667619e0610744fe7019e069b707a58c4da34c63238267b6e1da82a1d2155494ac48faff81378398064647e1082c14bf85d747776f150a476021e9281c81a70b4d47e108ecf2cf67c4823f47e108fc80d78f00734497386c10c6d82de59c94d66aedbd59a669dbc6715d773aa15018d3d0d4d4d4a8914ad9b071e3868d8d4a75738303070e4e4e4e082188007b14111ae145803aa00fd111600f23f2631e01ea88919aa16485960564714203186042093d16e0c3a347013b12808003f09060001d390a40809dd5000410001d0064cf471021841c1c1c372a9b1b3652356a6830ead4719b965d5be9949d8311600f21d8f4f109d4211dda3c74b7d65a6bad75e8ab7befbdf75e87ce93655996659943f7819aa6699aa6b9121f96e6d05d52e02f1ac11e42d1cc3f79027b1481472f74c23f49129b58d58b8a8ab66ce4c3dab66ddbb6cd95f8b036971e9dd45a6bf56155e7388ee338ce95f8b0b8a26ec5ea54accee8b23aefbace95f8b03ac9797189dc71e2c52a7267cad6f5470d38224999c4f4f0470d4050df02647aff2f261565aec5c3ffa219f07fba56252b561279068c557351c358d5b35a54a4e4b292a0ccc094a85849ec9922252b96cd45995b57e2c3cab2510fabe6a8c52b2a32f261d9ac440ba49fa8e4ac36953d2c9952331000000000c314000028140e874402914834a2c99ae43e14800b95ac406a42160ab328885114420619630830800010181199a199ad00605350018f822552b60305fd9bc88fd23c25d76e7486025da4bf4aa131a47ebba79c3d93a7c8dc8702a55a312795eb5f33a099732c969cad0e20e7a4b6bd57c3a6c7d37f48372a1166cfc976b1d1fe17b3ec84168204ae0369b15085b00d6c5250e50d9cf23013283d0c692dd96a1e010d6ca03329a75325982376fdc233e97c8f90d5ee8fe045aa0a3537eb8505033909879f98f054506bd69bf2fa4c4824b8278454e690ce61bb5eb8e4689a0008ca70f77902b17046f7848bcd62d960f09ad357210a0bc896905c780688d913a329f8b5d740bb1f6c185965236e29ad9a5a2438ffb25463ca22ce9ce2229c3336fd70cdedabf0de57a3c95ac268ce087c23373ece759c3491abe8590f36de26a9ceb6e6c746bbc40c44b3ddd807f066cce8c15f81432864dbfd8a56b088dc73b5754bb854b3a9523a9b9e4772084954de4043aad4318403a069d695d6fd650ddcf8446a51610c25cc0c3ca09e9732edb949e6a804f6c436089d71865f242b26d04c55b238f816e64b4e1c8e5e3601f864810e01528838f2ed44d778fe278b580100977c414b5f57758e7be6862c371c16cfce15654bcd81a5449ef9bdfb483efe91345768cb8cf1d60da4ac4565fdaf2ee296deb9a0aca62680173c79e27f611561beedadd2f5551600184be86bbb05de51a2b6dabf2fda077f6f19cb4e090b83a59a43e68e32a2fdff93496acc7ee979f9e7d494749400eca8be0f9344c4aa499a7996cbfea4c4c20238fb54625bc05771a2aed814f7af3716d4076ba1c5e035195372546a3f846b4c5a2a76ab69e031b654a0973067088fd834e98b62f8638609c5a084847d43a1e15680f133c109af9d1e29e63781a6d0e203f86f4620da778eb3ecb1c3341758f11cd7d4439036f497c7dcffe312367c4d3e7f7c1336d0696b7e62422ac1b47f25fe941fcc3011357cf283eaf10adf190c9e4298ba883f87be6181e128ae878c641d3a2d3f2a270697551fd8733da71f4d0d572ee2fcc742aeb1ec1f2e4104bfc9191672d92953282010e027483f37159fd7b2218606eab15080e33dcb8b2310b24958688a308729f029350ab16e835d806527301d53c68aca326ea98e2b10280be679aafd6dcd3c506d34d8f07df8805969019778a51e9842f88c9c7b2cd9d46ea6947004bdb9b27d2e63b8b59273177b49ee660487a404996b788fc7105b0f692910a010c001dc070896f2c403a4ce187fadb426f67869ea1dca9c54598dcfda81172e57232efdbd3142b8e084d1c54cc71bce481f202860c5c18f0bcf6be3f3f34a7994b1de405f0f2b22e6086a06f13bfe0926d32687fc98702615a37e35c7960a77b39ece08413d0b0acc642a14c10e3b8880793accba5fc206dabe38eafac93513940053ef58fc4f322f048ba5889b01f3163fabd34e050f05614fc223133b510cd5024b5600de1663715e7d0e9ddf46539d080a0a830c99d39695e142655f7291799dd507a0aed2c71d9317c70d64af6374976e3c022bbeb81498d394820a3802038b0d3c8fa10f0fe8ff07c3297bc69ad505dc9cb6918cadeaa4e9b71230d7cfd30cf5912b5d30c4e479d87c864e36fefc7772622a7634e52826a8490659e14450ca37113a4695341bc82e63048b92a108b7ebd9eb665544a7d0b786f51de6503786284296a8c305c062f441fafdbf7e608410de73529f1302b37a5958dd301e7016ded475523afa4c2d6b4f41973ee74d52eb13bd7f3903a739a026488606282991b4d0e4bcc45321848d248a950a9171cb06009fc22afc08720368e2ce0752da32c5438af01495e5f8ff38dc286e973413f726c622765e0e964ac460272ae32e31bf9f34ff21546c308c8c5908c1863cb000d72ae2a0a48aa60b6a96d68185ddf28485727e3f8aa33175b7829fc4544120b89e7633afee942d2979ca1dd9f47031373b47d69242ecfecc2f4664af35b9d5e52c6168974f70763bcad43c7edd2e5d24800a53b0f139441890ec2f6c6421d3a06ec5983f15291d4e40dabd3554e4041209a985f12f9d19b11c6812e6f3bdaf1547075be0975f82f2e3985f745552d9cf508528ba72e32537dee4c54b6ebc8dfc1daf22c326ea425df892897e4256d03a5fe6392c89dc9560a393d46faed68b5219491e53c8dc9940bbdafe154cbaa6e15341cad40c2e1290d2524bf5abec6cc25c47240f0f65f1090693845bea5463c8c56af130ea53f71a3bf1c633da2fb578fb3d0c5a5a6c06fb82636b05e87606c2c59fe4d22a20763d568b1e30b512c3eb1ba2663b0e29fc8006bd8c7ab43900db01a0c9b46c17537fb512e94a2e61119ed690f36f114d93fdb61d8121b6895b81191410a7ee560747371c26a8985114ee48687e01060ffced1365f090d88058503f3be3f9c7950e4ac9ae6eff0a3844567b60fe8ae28946a64e294eff76019ad91f22e092008793fbdae932f82992a975a767a7aefb2b9eadf57b7c7c7fae918583515e244dd96f61875f6bdda44287128cc6727f7675832950defda80c5a057c638182a75640bb2f23b64b08f0812dfeb2281b3ed49959e6c279d4958ceb7680a84e5e2875389ceb3f19b47413aaa068e7eae10c48d038fb051c3f71dfa0972ff3a3f038be759e1d5cf1b1574288ea75623f5aa66aef8396bf4157556bdeee445d67e490ff1522beb09677a1c3bc31cf9be369155da3e87135f4499acef718312f88b94247f11ab18f9a9ca6834fe3cc65e910b649a2569130a8b038fd4700a07cb2b210a5c021b08e9f4172f62ab744c0fcc45285d9c183d1ef2152e6eb4da06032de57e1543f827e9f2a211e88ef2e9fd62f5246fae75468a196a005f36ce3732c75f4ca53217d75f8e08b0ccd22b2588150021d58304e12acd3ce90a7f53c597946f4672cc280180a22bc49f505b1af83285ec641a0a26340a780a984fa644cdd231184c5175af350ce75091a788563cf5b291036426474bbe435eb46026e3763090e8bcf96976240108ef43b03b159d19c7a0e863e761b49600b2179f72219942b87993adf339ae0d653e478e85df35d3fd4c877b877c4ad57d9d0b4b3edddafd8d13da9da4026f2a4ebdc3732c3ba945d4eef7fab19f03c24ef1745af3107c577ac7a085dc547f7a867973f22a34123b0e26019ba145cf5b8853c6515215b2303a48e0e9bc5b479d14015f224de9f8328ca4f9003f13fd4e55b3a9ba496514a58f7b09080c92d9c1085634959f8839fb01a296576b4ba6b398eeecc8252acc938135ad2c44801c9fdab42801208d79722186901b3726fb8da008eaf6780a9dd26afe5bf0f2d0a2ff72ccd368af2e9a6f8105d442c4e1f0f8d9be51c6a053ea516898eac7f87fc0dadcaff3708ea29996e2014f4e2bd434d77c645a0c825d73816368d1e02ef5680cad4618d92140199626996a23289f5948df11a02f3ad2659170873be760392abfd8b8e1120590c318d48959fcc0c1920b69226c9f827c1c4f2cf0464d4afa59a3ae8b750406fda29271a1e006cba3ce3f4878336a2448bfdfb55ef5e39603eb76e100e572c8301ab4a36627d99d54f26580aa3ecfe81528520f3c041f0a0d06895e18bade7db49eb5184e30278f6f795d583e9e71c6776532012dee604acdd73c9820abad9b2a917f6282c78d5086eda9a34c0b150d370531e6acfc131b9602eb25e336d37f194a2f8414b03dada014e9c0d301f4801d2d0caecf1294b66d0d00fe322cca4f5a895417333e4b3f2ce2c793c3ee43049d730ad0ec3a6f1303c503d3fbbf2cc62672b50a1c8cff8c4cf98894f6639fa0f7e321329cb021ee96d2c8af04710345995b23574648840bb6ffbaf48cd25c5fff55942fe11c5fc1a4392c02cc5b8cb032153d6099569ce6c2b279400190bca414262b960ec58f870590dabe2ae11563ea591ed99e9fa94f0bcd00a90affbf005a58058c68586f7e9649f4d6c06edcda4702dd816c7ac3b5e9a01685092ba15e6a92eacefd2b415066d1acc63e8665be08327f88ef921a9e145e030ca03f2addda67bf653d102826680e3d95f75c7474df09c1a105b76d3bee215dfff7caa5930b373277fd6dbb1d7f0407ceac747884f9acc30b952d4dfcfc312247a99808a045559134ba2a38cf1c45a57e0a73079c5cc7c1e8742c967932201c40c0ccee000903182660f299cc4cb8236a3873776065846d45847376dc3bab8ad0dab9986fa72ea939d2cd80cd9231d98b6229de0f3cd8a8edb92e26b37f25805e8978d6415915ac0d6e375fda2fdb2f09d612cac4166b434774eb5d0a3f371a92995a895bb51d2251a35f71ebb7a456dcbc36d3c0ce8fccb70716b7e4b9f3e35d894a991fd5fe1870a79b8134e9a0c8e518acb7b85706607b0db358750d7cd0a11d801b1fe56e6a6ec60e1404b31b333cfc97a22efc999a39c24f224cdf8cb7c5ade33b94f35de8fa7bf3cb708c97122d38cffe0d197675f3dfd62ced7e79c09967da7751ec1ef5899b1e69eabf37e1fc2f86e715ed174294b6e8ea8a456310516f467c5a2873b9f74d97ccc62ca71abba8aa939cea123c9ca22e0ed6f40c8a5bdb0775d64accb6675fabbd9216249603c9846e117c959abcb641363e910c525c70f51b1ad08b68a3be4c8435f6e11fe5c808c97dc464e2f69276437a4fc962c1f0d13e7c956265b897ced406e0ff152f2f61f2a2f57cac7a9c51b227e208b5c4d581c6ea4feb859c9f259d815174f0f051ccc288514121a2cd72158e2888729ee12d13c90cbfa952626f9fad3aa53b9e77464ea6fed978faca962f94481839eabf289cf37987037245b83884d4ceffccfe31c2da9a7dbc604658f4cc69e021331f8faacc7023dd934133daf5190159636aac5f1059f7d704bba9def63b44e6333f0b3620b6bb9bf5e88664a67d80ebf02534fbfe65e7b59355b617671ce108f33aba67dde52412eca2a083e79633dd385e13ee6cc39bf621b3b7a997c8c85eff0aff32840a78876ee0b04df390944c3106505391646df7a2373b9a5307f1a460ef7c2891b9ed6ed6c4a986af34f82b7cbb622c4c41e33f5a1551576d582ed92241b8e054fa86832380fcbed139b6269df1f974549da172fff019bc0564e07fa2c08693d4c40f65a92c1b14d1f3a465d8446064479b8a48fce0e800e61108756ed7bdd5309b2f981358eb7b51a996f59a29a5a613eda834e80441a114275384bbc4019dbe64446378f22946d93fe152f75c5bcf7c2dcb5ee0e45c8161d48db01ae44346203eb0c6fdd58f28045cbcdccf5aed5c245fd2fa93447d8c73865e1ad04ae165ac930c213be92d1f42ead89057e64baebf2bd542b88aba9db9676b1861ccf299d73a9997207fd92c6db070ac2cb6c38904a705cacb2703cc2bd6c5266a1bec326b810aeb5499acb439fc25dc782a30e2d2d9715a5b28262ebf0835c2e7dc7010933bfff83f3552d12b3c0191f3722c670d1d277a92aa0ba20a5ea9d2c9b7f31d65385449a985701a5dd2dfcae011a033a8a772ef651dc020f7b7901fab41ed83ccc3c797c6934b6d32d8ea6a67a4548f7ba16e33fe454971379efa9dea63cc3773270a403fe897313a811709a51fc1cfa9796d494f083e6594d7d1f2cb83ade24d2d8044782486724e6fdaf2f3297535630d847f4d5979e333d223c8c64434fff30fec66a96f100b58956f4f2205c2cb95f0b5b078df761348c9a0dad73a893ca6633aed01d3dd019b5fb13b1842f5236960e851280a3080c7e7c3cdd4e8c122e6561d5f3a2ed7b4021b80d112708835e270c2a448cc03f0a5536029c2a65f49093aeb69c4ccf5b9582594146834895e47f8c06bfbaae34d99e1c02b6c1ede6caa38842210e02a3ebd0b6efa7fcadd20ce64fe11dfd84adb92202a7c4684c020552f415846bcf2f141737720015b244b3363a05b489dee31980fae1dc4c53160d329ce95e463185d37e519a9ed87f1ed621c202dc072bebb201229fa685df0186177808061e86d2c3b3d105fc516c81ae75c419d1abcf74097e095b5066b2bc56c87d7b3344537c5e84225e9c91f99798dae3cc334d85b1493fee26b284ed72fd02ce89ca9f2d87ec1630b5ff8da696453ddb112fada6a14c3a0d4ad42ce62730c912ff263ba330c32b176761f3e4b705089331b206172b73497efbaaa9ef1ff1d201470a808d32feab6e52435e23773008da168276493d50f39164b710441ed676677ed6dfc6c4da3cae375e1944ebb4be85a015188cfe8bed830c3d5f1d4d24652396d603ae5e77df3911a1149d41f31f7e082e9b069b03daefd180036e96cdcea05f786bc49365975d86b97c3c7447c500a11f41c054db6288cb82f4772fc83af6407d901f4b522a48626e23ed92f9f491298d29441d5029a11f2abaa3daf5f3ec24dc718bbe701c6fb989adb2c40efaec80383671a8d737a32d9250f385e7708c716dea483a349c00e9b3b91749c796a593830444c977e410ff94e61c5edc1d0249385dc50189d93aacb8a0e08255e3eb48ad82d0a4ac5b049e47fbbd547576ff338f7ec78a273239ed4913245c79c6b89ebb3d80855c30c5debb169102ceecf389da97bb2ab2343f05b41409b6803241f525294458744c0852095ad7b91802cb3c7aacc607bd536a472794cf574872fe5e0044b7a6613cdf4f31fb7cdceea51b3e00a0dca1610f467fd655251965e05d5bd3c949d8c3725530fdbf021617701095db5ba9529f0b22d35103f37661df70e0713502f6229a538380512558fa3d2944956c08d10d4f798003841b3c297f463c27ac03cbc1d98a92a416b962f548544832ab16f685eac50e91b61044a71940c9529201b60a1a47842ad46441c1ccb9a3f287d9797be796c3724a58e6877a3a2cda16e2ef96eb5d13912346b9e4f7f191bf63a5202976a4a52a65785bc588ee29192316e45c204d74079e6e6b66470016a8252097b5772c9869703f50170d3f6e9e7b8d25c07e3c2a17e92d8f6cd551176185b0a53304bd163f7dbbb5031ab884a5f21fb6c2c7787ecaa728c205916c9e0ad2a0885198d9fd1a76da6ed00ffad1d2bdb10de9791b1982be99438985463c1eef592b949efbf70fce4125b884fedd8ebbc04f8d75f198501a315bcfe19a5cdcd31892e06a3e56bd48798f92fd7d4738f5a328799cf00880042322440f85242604842f8a084644881e0a494c08080b9fead8147fca02133573660977760d5b7ac4191a45130ae17e3362f613a020d68b114cdbdc0b6c34832aaf58cc7faa562dd808da8d16f8ccfb77a607c7c4defe72ff0eec73f92c11594d4e4a6df695019291f753d2e87278486befe6798666b91023cf8f19faaf5f01b6664edb6a217eff2be72f3ca54078f4a885a2ba00c72163a1c9dba73aac96328d00e2953b76ab41a32eec45c8386679a331b3581efcfdedad5cc2190ebcaae148a0448ca47c2fc757e79ce118c9881ee822590b0124b96cb15614168d3d2a0cc0c092bdb779a258a5b83bc5e7e4f15be224019c1a0fde3ec5c67fce66741ea3e81ea500bb66adcc88e45b4ea20f51491d906a3d48be9f0a70b6fb78015a233ca414318532eb4ec1a89f6cad94f32e171c0a58b0899385a0dbfefb1307ce351cce52ad028573188de3ee10878bccc06f8c82b2092e1a0ca0dadec62fefd119a2b664e6c60681507c5f6c58738132185ef7567276bc061a6bd52c590a8e12d3091fcacba9da8177963fb8ff0c889d538bc323448d34ed2e193e8b800d84232356c72e88253f3f7a65bdd10263492cad479897d758b7fa804ab21a2d92e36584b2d357c6b2d151c6b2d151c6b2d151c6b2d151c6b2d151c6b2d151c6b2d151c6b2d151c6b2d151c6b2d151c6b2d151c6b2d151c6b2d11c70d594a736ea4572a920b23a558507ec3ee87916db9788579229cdea9b1f7e56081fa32c14cb8e67625973d15c6b79cbf868c56d3b20521339225210d30888d4448e8814c4340222359123220531cd404508f048795246c4882056a1ee51c684b924a21e056b4bfd3b60abdb1a379cb7cdcd1c0a009ed6576633a7344cdf620d67b9cab03775cb15fce59a7243f465d5d5dc866f7ccea1a509e2d2d71d4e2c73f0331f6c90a196f371cb553761da9db07a8936c424be0b6e5ea4260fc19259a58a14fcaa55e7563522d8db2eef4527ce7e1b97820feb4134917b4d9f1684940dd7e943883227a45cfb66f00d620e7fdb95caca8e99969e13b66d3ed9186d593ec26cb5b09872620f6da05dd22372423d044c38cb94507dbfb4271d3af05764d39ea39cb997b7ae7f39062edcacef89c16dabbd4d55c0917383f7c3ca23a516d14b8beedbfeb88473bdf283a43077876089eca4c75ac9468c801d680f51617c1c0f476a9af942c6f4c889460002e54e86cb530fe3caeb6e949e61cf1e0146e9c1823fe27afd1c01e638f1266527a92146e8dd90d982e3fd53251bfbd478f7f28f30adcd58e77f3f4d6a27a951aa78b6cdd9a978c7a79c1b7271fde16979f996e2c21b29328cb2c50e6d1e0c5fc761399285a3b0e77beeebdfdafeb14ede21e21e645e4da1f4132de32434e9ed7719ca0950fa7c3957b83f3fb05e0863d53e0257711e763dac0ae209693694df5cda3c0fc27b004a7e82d33c0a506daa7fa973cf5510a8b798b447b2e3f214a5f9e038da417ba2af7d258cacb32fabf6836493b926ebd50f65bd042aeb7df874b8abd5b0a68dd3ae3002dfa96f4a7cc78fd683da386189e1d6c95007570267d4245f27e2f0fb9e7dcf07b95257ced6cc6a0460046d324f895ea48bd59d27d1f22515e1e38e2e003b3c271a5ae959c782b0c7d371e2ea4adf81677ab4aa24d0a2111ed5cdae19f039b57ab4c1fd5957b06a443fb311bc4166e71e07d19418a7b9c8b4858e0e570329d5366d831c9978847302263b53efeab2cc416d09708bce0a0a33a68f0cd4e470c1cb8d948765c8de301371110ddf05ac882d89f20cf2321b4b7c531a62d81f3527942f09fba452bafb3295af6c3f08fa11b419e289c58bafd8dea489524610b70ef771163ecf1885eb45486468abbf7adbe375950f27ba4728d9136720ed747396dff7f9b84043dc3e89ecf0496c43688184bb8c9b8e60b9e9f80ef8d35171ddadfdc34f90f6325e6478dc642fee3e9e8903759e5a9130c01efc81b2c648c476308ae49c5b68d9e864536112212513dfd0f94555ec89a5fe8ec388bd6b02e528f605dc623f6dd85d132f1a425f8005451fe8daffa55e2a9719e8c7b827565e1313c990e7d09c92af08d1bf85d369637e7382f75be66382552fb086bcad1c89024a574a28b8910d4b90574f61fecc64c8ad9da050af72372036d44358dc1d9cb8abe90d1bf1f4485bb24925596d5322a57cd8a82a011719e6f6dd2f500aced6c6adf1a1ad0e11aaa53c041719c2092a344a9a8147b81d63eb65ea49e0595112e7c6ed1710b15bacc1531d018d33f0ea02f466a236cb9a43691a94e86e7fb5f5c34ab1bdabb1e39a4883db0e7dc43bd72293461fa583c2269f1912c9a6e5cd3d246cdf71a5edbee932eda312e56ec914a5abcfc02b0e447092cf5da99bce2a72061e8b5a375de81935270dbe26e1ca4831a2861238b1fcde46de574efcf3b550eb8cae39ab8c9174300c47f6e76eb311d5a909ae993ea7cb6318f9b2c237c5aac11e6bf5c84bfc9b8f08a1a54e3285049b8eb3bb828b74c2a3b5bf14ca950142aece8e3aee7acda6fcaad64c26587fb0c555e0d8cec7b94fd5ba2466b015af67e097bd3562f2de0eab09c16215826bc8fd570241a48b35b36ba5230a3152e61ca6221b8efe2332145d83a815a13294acfec76b17a09e42da84593d608c5daacba1576dc047b836683cd51536a23b951cecc97921f149f42e64aac3144e75711fc2fefe5ee9596c746881c998d65e6c04be8e62197080266f8ef194c7890883e0d4c05102a30793224e53776930d6d1b4116a3d813180924ba51efcfe7b16210c4fc60a29304a4221acd60d7dedf4e7ae37157b8a21ede13c1be87e667ac50444e67f051aebc9eec921225ca49320b023f41f9060c616b8a2a2b3da502077766f620a2123599604f0f5007cf22811ae45e6df3b9341b17d02ca5d0449ea3ef6b0043c83d35c1027a692c505c68273267054069a320bbebc756845462dcf745433e06b4bd5a8e67e06d3bf256a8a8654e151d76a58fca068255aab6fa1037776ec8a1f0cba2a67dd07ebfb0c563d709aaef08f55ed158dcccf87576d94c08cdf40ee5a56de512e8b8f6cd0fd75a0424ec3900dac15f0adf764f5131748410f91aa0c36c4a10914bbd6893aae6be05c3d72138b2fded3ee0f877bc05105c95e747c98f403f5d2517bc0028c5e3085c924ca69748d339f65f37286d84d34dbf12ce0a338e457a0eb7be51a313cf73428ce7efd9db47402de661ea1a2719f8056950fe3c01b513d1a279e0384fb0083977a43c9a29206236de14bcd4f5bfef6b3fe5f16a47883fcd70a91645a186dde44859e873131dcf06f8271de342e8b22f7673cc8a0d337de2ad2cf98aa04aac396cb897439260f0e7f6d01ef603434330fe32484d1a40609b2487790c62b87e6cf7348775e5c165d6a28aed2965309306e52dd869bdcb45ac83fd4c2b17d63ca54836d3bdd05aa7073fb90149f8ce41ea83c0065b8a1f90220bad6c548de9ff8ce43090b4c05b79f22c9c4f9c3827649e74b9114914e3d7d80a97c5c4beffb784bfaea06ac0bd8ea81d4ef7a9e4420d650ff44a4849de066d81ef1dd353da5dbfb126ebc1789697c16dc783f4d84ffdaa2db5273b9ddf7c3c1ad84d75adac66883b18f8f5070bba1eaf4b1f5ccd2849cd56b09ce6f8d53d72391b7ac37ba6be487252dc7a436e60eb5dc02238e9dba361fdb218d061c5d9b48c1c70eb930c7ff93cbcf993076c78afad6ea6a157cad05e8c4f07025eaea0c1de1b2eb5a0a122e6ae6bb9e2010406c0985c70a29270bf74ff013f55b88e90c6b4bf13799523b2c2402db0594f3916c722e5b0ca0b7fc31410e7f2fd0a4172d78ea0d1184608cdbe4191c5697a65397a3e29bb222991eab4b224931a0e0a6ad21556b92a57bab56d3e88829487728ff2f5f0d37bf9bce27936384a7c609a9236f5d741f43316edcca99475430c264561e5a9a5ec955da3d216c427f46b180235c51bc2c2e15a7313200672af0391a0b35d74431a10e9c16dc58016bc2917b8e0ba18f0807b950df06cd3dca28deba29eb4020c57189dc047201265e21fb1b40f4d087d410bcce81a084072b65479864b72f190bf25abafd0a6141ce1b67e6864aef0f6e9e9c9833f885ee9d289880a0997220bc1ae93ab653425f7fed6bea571aa442b4139c8450b5f084a62d2365b1042928d703cfa6c02c04d69fb82b755200ba6dad10e0524e0c14e734153a420bebbae5acbc09463ad7d42da30b6dbfdbb553630eeaf9f38356ddb3bfa8d9ff11b258820b383ca72c362cb22e0509ce5db79a6d93fdfbadcfecef69a7481856dc2b184679bde0f0ac118855bf7d88b70259aa6627752e9f08f9bb594ab24453dbba62e55daba5ea532c7999771f2f0bcdf4471b9c181eb95530f873d40859c365e0c44466a438a26aeb06ffa260f990b79c3b9babfc1d693a6b689d9fbf2aec0cb7fe3aec4e3201e6f09170c9ffacca563058cbf8281e07eda97aae92c1658333ac847336ee440c8b0cf9c1844c760185b5f2e0d584a7054d595d5dcfc95f1d628b6666d61937b1cce5b6ada8ed96077fa8a52a7823ed54ffe2a96938c57ca6e0e6a3c1ce51f293774859c941d0f332e94dd1ac60d908b433819b671de749149011e6673a15099de8ea730620342013fa8e98b0d345afc6e46385d60550ca423b1cb6605b6cfdc43a0d25884285a7d672a959f34958a96e2263810e2de40af9ea51921461efcc8d24feb201065d2f2db6f8723dc9058e7465b54819f4ed6d228b660b6cfddb34eae1d92d2314438e20ec63a5ff629998c264e47dd5164859ea54c7b41d22b4613c7d4231606c8063869d6efe0cc6d19c17909f7de780353bf033e4573052ab5e36a48c73165668c8287789877bbf5af5be578f1b18ff4446f7a10a3f5b0b034045ecc7f0330341224e4c695bdc383e7f494487f3e561d8f7e400019dd16830b21332eaa9c69640af5bb704d376d6e3d496461923eacbb2dccf0c1e59dac51363694fbba2946a6894342782b12405021acaa321894ef847d99b7b83fe062b0ed8a43b01f42e00107f0bd7ea8e60060c53e97a0f9e9d964be0d557c6f5680179557958958c84cb522520547bbc1afd5cc0deed3accff23031e8cebe02a3bce684c1b5700ca37d5a667640798e2c2c419b4d91a543896bd3d4f88a606a4e140969bffa14e98fcf13743ba52d0ab4b1a7bcd615b9a3c85f6715140ff916b61e50f35476c3cbabec4225954326d0e2d52ddac629ad4e8e873423de2961a7c1f37f00aba14974911481ba9d0c67f3376597227928df49def0cde6e018d54c8b9a524ee2d6525bd91fc452c21f57517dd3fd33aebbc40d7ce87a17520d39a7c5be69a39c92328ad13d7a5433c8c44a2e8f1ebcb79def112e1263cdf417dd5ad7fdb44d8ee0087ffed6b04d2f665c67ee9be52321c28fd81a5a5f283475ba67ec5fd37a801685988c0d3ee005be8477b47275260f51a2b3b90b7a901801f1197b6f16fba1693d2d942406738106101eb1c75261c7e9f29f244544b492c38df864919ed6a03a1e8b95db9097f6798fc0cccfb6e5802280195dddcf86fd730e7578fa4924c4c146abfd3bfa1b8103fb17b5545d9231a9f8b1a26ebe30d3f29d11620ce13431af85b1bd24d8022531b9ba9a80425a13a34269c024455792a7f9736f2838059d18f4eaed8c61c6287366b8fc0cdd60ad183103c0b3325f6068acd7e00d953054218d49948682fd11a2e94ee580627901a648a0f28a86a085ac0ef47cf5d59961a3e2d9db07c69e8d229b414d013d035a7f709bedac4a9185a063222cd1849b02495852918617741fb9ffa78e36778ac1b1c8e362899b93a1c66077acc28c13da5b6cb1b17df1a9a86fa4bcf0694d54fc975e68824e51507cac4aabe964623c0525c901af73ac2d7d8da606a94f2687fda2ae6cf149ee3154cced44ebd79f0b5919a3149bf6c9fa4bb7a01df741c6cc132584299af60c838e693a20deeb9186e9bd244afa281ba5e07e51abfe8a449405bf11f43568776626bc7029eed8b382b9d5345852d5af45ec635f607bbd5221cbccc826ff794cb000594a7000f6abefbbe72b0abcd404fc55704fd25fb8784e4f58dc8cfb6697c0ce21e7c541c1b722da058a36a1c98c21690e4c6d922f9ce799e6883b4961616c745601f53dd7f88fd6ac63978ca58e73b1626cbe102c7371ac69ed139466beb48e88b36da2f13ccb234344eacbacb8b4def4556729b506a90bd37ecf5ee729e4b340e10af14923c5912fce18d0be526e2597fcb863eca7e5a233c521131344871f32ca99914ce4c1166b2fee17a1a00a0f79dfb118a45a88f0488b63a957309fc93a687fca412fed7df86c76709112762e516b54cf13a1a36637f2aed7f763dce369ff0cd9789882041efe96287020d0931c827853ffba7bbede27dd5bb9c04ee961428ea86ba4002396b20552e7f33b72437f54ab877786113711438c2ce8bd7bbb63e4fc10f8e90e87bdaf84140fdf8806f40d079d7adf360229352c4798764dd54808da090f56d2e6bdd8f4fff3f75d67d27e5f52b576aa2320dd8c147411ed913cc4fc4fb42a3439666cfaa29b6ec69a0f4fbeb85611acf1542a0f19fe28a131e1c7ac30940477e053406dd1144b0b1ecf13ba12e844b1533a0137752ac1c52e8d11450aaa823da8aac432006226a5fc2dcbd7fac87cdd47bd81b61a49ff44ae82ce887b73edf8cd0142d67c7fc526d7ec8cacb5084cb965c8c01c9d557ec9f168b306f71973314498f7177d03931631509479baa9d34ff990ecd0dfac6d1980002842c965873780602d0e904ff1670d10999bb198a14283b5437fc6913c2a94eabf9967c389fc1dc0dc23becf5b13427e997578f0adc979cae7044198c547c81e34c2c75aebcbbf4e2c9470f02268809806149f6e5eb87d1bdd10458c7a74449cedc31c2d9c60d1152d24d738b5b62ac42956ad28dee5d79fc80ebf1b62dff36b2434c3b1912a7b61d45ade3af0429c5c54276fc74ff0b299fee5b3f344c0ed142f4a18d210f288c13d41755f8eade19a8e1ba87a88f284b183a60d45252421d059c0daf72f9298e88f1663d74c42f21726cce696b8622e8e42d7f4dbdbe768175eec27ef3febff69123e8bb812de41abb40823386a746441300832c0aa4191fc069afca62608f746995a565bf088ccfb246da73c32f2508aa1b5ee1ef92070df04aeed2b8f6ab7afb8f1a880ce07762df5e3c935f3527c8e5c9e915d66508eedd4c3d2328f14f88e0a3d701395d3db2415ca6eee1cbf0aa92c94a5a72ab46ab3f5969b7e18185b84f7014f7465d59747c36754857b613075af7aa82d395fe82c405b5ff0ddb7c6bc58944591769d4188b1919ab65bf05d2d77d3a3fd8191b9b6e50402b8adc845b7d32cb2355a420826aea575ad05743851380d8116a402a59abc2beaf21b5bd2876b5a91dc68ebe9245d761e7bcffe669c863f1427527e58da32fcb0e50e9b7972eb0fc16c4d54ff65aae012866cd061deb7338736a1ab64ed7bc209e33f8264283ebf60acbb06074a73f0c45fbaf06aec48abc5b492ad07794a644e87a075dcdb4cd6e6016d163628e06adb45b8b3964a908007dba6f8eb8b7c9e95001e6f5c8c7617b3db283434744fa706ed4aae3c34cbd068655189c42840abc019e0aafd7aeda22e538db282165a4f6edf264e13fe433adf750394c1c52f8bb895cc663e167a3e6b365a7d2472f5bf1ea28042a3fd8f5059078a0e15fb4d90fbec688f8c3f8893855a69156b2e0f923039c334818778a7223f132ae5162826c73223cb629b8f20e239212b03b98066fbd3513fb56e5532420bdcc2bba102b11c45719a047d8aed8d478c3372266e04ea5966eb421312c240808768abe3cfb6e82cce9939fb6aa38107128a2d0300354a02af8c96a166fa23c8f80d4b187278e7c412f3bd21aeeef21f32ba84cfb95e08768917296a80919a16a41bbc3cf67c5cbaf7f5c01f37b35d514f291f3316aa3ccd515eeb64d10ba7fc4abacccc0f741b32091cf77c4cdcfc2b55c7fe4024b6e97c3d0c90cf559761acefcb2efd663e02ddf9263c422b3077ea9b313eab828639104ab43f6c351a37667cbee8dfa4c3a8f67cb1e1fefaec69fe05f716d1399901af3d57d2bc41639e8c5d543037e9ae5dd77cfa83847fd6fe95032e8eb697f9037e793109e9e07e971667571f791ea69c1dc1cd91e42af051a0726aa95baa1aca1b61144bd0de446a8ab43db7a976ffb2d228bd73ae47754eec6940833bccca2b5eae429e3a0eb2ec31d47d44b31e6f10666b62dd4c9aed3d0f1e6337702fe8e6d9a05e6d291c4540cc67276d0ac504e16f42d88d8671b58488e1ffa8eb7c3500f9779e9549f0c08ad70315089f34a646b9e374a32a849caed58000f299c91e90f51e8b8a6011a55a1502372f31a33ad80769ec5dddd06a208cc224bc74b1d2b7434fcf88ff56b3c0914e8f5eb2c14af0b6f656e504ad438a6b028a8e9ed30992a240b02e9c3b2052aeb733e749894a2e39e95318fdbe3a97d0008874a7f86aad90b55bf0a5529041d8ca4583132c9bcd79eca01d5a682b23e572790133074d7920394de629f99db5bd5036d110ff78bc570ff4ffa0617f1f93fd28d79180f86b7e80f9e080ec5ff7783d48fd042492918b20d1f262074f6df0a998813bbe66ac9d2755daeae8eb0c20068b5a7d90318e9747d89111677f02169e60586458d636908a13f67f2d77180848ce3982cbb3a0aa4552a3513cb18c5be4706b97fc651a08397d0218ace8bd96e71fbb57642e3dac41521c48f5aba700fe3986d911324609dfec18c5462f96b3076087186b108f0a03acf80892135782dbd5881536dd2a42a8e0caefbc810bfdda0d8227751f7c1eeb28b947668f473ed423c611db5b25638405a0318b652c9054ab51b2826c32541faae48a91f66ac148d8bd81bf3a6a19610de3bdaa01ce513ac5c639aa4d2e4ea3174e78f202d7543744e520e406c3dbcf0e7d4bf27dc1a58bd8763267409a0666f5efffe7ed2e982619aeb74086c5e2ad915339182672b530bf938618cd2ceb3dfab56c2fa0aa5fcccb45621166691e1555c378bb52fe222d628048d0520ebee381075888d816fa380380446eb88e6842da16e2124c32210f998b089c6a215f062eb445cbfe545ac270a7398b8aa7cb30f5573b737aa8f30cb460ef941fbf888d79e7129f1f12d2f7372fce8c0750df6f8092f98da9a798de20e14d95607dd0451f932456ca4f3144da863d51b05a19423f70d9b6ee14b060e9b917445c426b636cbaeb4d95aa55d1c6d9a328742223c09e82568c5bb185d35aac56e1f847a289ad9d24391cc60c8eefc5642e1203b714a0533a104dc783e73bfa2247194250b4882228e26796c87733c15320025a9fdaceaba4dd7431cee957652b2a16874e436444c16317504d09cedb759dbcfd51aa81cf506f1482b43fc9f0cee86642196bb3889dc3fa3ba87277b7aa9523c75068cffadb02b74144c79fd596b5b1ffbd3602e702478db3bb2c59f21b33d980281fb5400de3b9a8cab87e3dc8598a0ca34fd84ccc34121701f16bf942215a2da63d0f0eb1fd04e8cbfc07fc4040f8e4afe067a412b78124a9c340a45255b187a4f4a95d8ad69e86b477bc1f650835ac0338996c81b949cc82eff7b548746cccb06ac785aed8f677d0cf1370e1b39988a098c4853693a6a494d8c09e605ab3a241533a43ce30adc09e5c71725608641ad6031467f39027538485ed0f453aaf6d73d190d0134536f55f13004192f4aa50a073d8d611a0fd1fbe5e8246c58f4cf479952bfce503a92d496b6ae720a695315d8ece672c4f3d99595ec1d7c00963d212b504760793932aab6034cafaaa05c2a419d50d0056e9b8578b38ab06dbad29aeef49f08ba448493bb8d57973da80fd5a799d62c963fc91877783a3eed072c19c0eeda4da25418922e061167c620126990df258f10098c585ef36b88696a23bea0f44bc3bc9005e17164846210a5489f4371c8d907f0b9fdcc15c8fa25e48a95d87d095bd0c76d4ca86517f8e0bb83202b43fe1acadd90ced46c1b9d1507a0243f5ba91c80cfc126f0e1a78223272de00c3c9767cb2dd3cb7636b5ede0737784700d247c6b91bfc7ada89bb32576cf02b3521e9a4a8b56643f702a0dbe993120e3bc9d453ee37e0338df8bae91613a1236917e1c19663d2f70271640cdb9b43da3003b5030093d481afadbae71950713c5962131e9a0e692b8dc7f625047f324131997e913418e836936ed5946f18f876c3a1b57095446f3a836d1a83fb6d13cd35767c7c765588de609e61af9a5021f810f70bba993870cd67134afb752d389093c9ae6f81add0785e6898cee8552806060fc13b808f2460f3e15599ac1b306098bb740bc321e64104f019a17f9f8f29624af9b4d7f817d1df3ba368c7a7fed9943122f95fb4eb26acc73c8d8d4ad50a903e3987f2787dd9c6a68ccd30e2faff058d552a831416b57f9362121d9719d57f71ad23b55ef1916fca0b01ad638689ea23298cacf90b89f860e0fa9c4ec182af01534591bf5c729e4c2713c0ee9d80f330f7b9b792bafe3853277377dd6ccc34c4dd757969a1fa9863639c052d83c635ad2ccb35c46269ee23e807d3c4ace5d92bd19a589669e62fc4ab960791616d5cc3cb6d32981b7b5935db4f59917762b334f4f255bb00753cb19f10b28d999791ff5f9ac0e5f959e9e6c23d11200ddda2470985c55122eede5459e99a728bcd041f33752436652d1614c2006cd8853d995072d9e39e9c059712387f390ce6687fcff70ee5059f6828cf4003b3fd1772008692948606aa1e09f6e5b3432ef7dfe75aa3a5a603799974c67b55dcb5eff8939cc29e2ddb2adcc73154c594ff85e6bf78633c41c50a884e57a3b1bd89280f75f91739cc9c1098463e8b4d92d4fda0b51f48dfba403eebcf5d91e5de6e501bf0be4dc2c36970a2847a38405223008b3fb6fac3dea878f87269007d876f9f019938e137592f5feeda609f4c7fb69743b656e8f7903e42db986310bb57989c69c1d0bc1194ea550366bf7cbd2623f9e8ec9c40b38429786d3209e117811607a22db59a2beab943e5ee2cf8654c65e80c6e063be8d1594786a8298817bbc0d9e1bd2908498c0a77be90182b415450188330c1dcc9e54f271457e1ecf2d31e1476aed3ae6678720268c9694479b7e0f0a9539a6a2316f3bd94423b845763437c5fe74aad6687fd4eb8cfccde560bf38cce1661329f281a56c3d9303a581a3778838babe081adbfb7bbded87d1fd96b6231ce3e3b892dde5057e0cb48449e864c248f80012d87fe7d8cf7253c632823b657da5db551387648397f187f51bdc0903772af1effa43634d3fc69c6de8be201ed6ff232d1d97aba6aa5cf042fcb08f61c88db1a2428d756271f8df05282ec9f2ef72ae94fa82671686e1f1b60766ffdc0d847771d93512b3a37a34829b8b71d9bac4344df79f9866156a10cc8a61b3db8b5db5cd4282bc1ffb6817dccc7f11d88300f00f0eba04e1eb14135fb1ef81190de048d572d675145085a99b1cf6a5530e4d9eabacd8378c405d92d1b407e87303ecb2c76cc1062abfddfd594c678993e70da6b0793430c02da7fe395ba5bc0ea877ec16cb95c642370943a2cd1fa015fec1b1655a28bbe54d4eccf9ba0cc9aae8addaf10c6ee2f2588ab2ae2ea9d9dd390ae2f4806a1421a446368c659cf20f2343a495e65c128c43162df1aac1c6cec0a9105c14893f8ff524eafa25c6b60fae0e904946589b169bb80b05a0d0963a4ce0010e0052f37b68516c3c2e5acb7ebc21fedf0e85aae2625ffa7588fa665963a806c07b6d16466372189b945994b2ec292bfd7831cedd8079f09ca7b370592064260d8de1d3de7db28d7a2853f3fc5dcc7400bdee9582b0d190bfee15d47840e18a2b744fc738238688cf15a7f755ce48a646766895ec9d2cd6082763dcf4128bc0f96c5b7c04834bda9239cd87865930e407a69aa9e6f9d9cbfdb253cbf53d3f67d0d3b1bf10030c911a6ea561c13305f835e60e8d6a9a8cd518ee9e19d80c77045f8693eb795e222286d5dec5b4cd9eff1ce713fa6451459ad38de166a69c2a3eb9834420b0f96a91e9f969e1bf03b04de15217a442e3ffd0aa2ef147b95efe71f197988d6af7e407e9567961b30328a94c9eda1c90a0b2565eea2b3caa90daa7fcc492981b4cf121e60215b22755265cdd4093668ae2f30149137726e1f5aa5b9bdd7ac67f8ccc41972f17f7813b05ba157505db2d171cd833cc012f71804c0cf756bb12f723a70209ddf7bb253d64aab875207eb534c66fd268d6b244979d9d355e342e54935a08444673b94070698bea0965a09ae4a15abc6af9dc2226e8249eee0a93e2dfe6e512dcc8e77c28bc39174f842de5bb1d7c06d4b231b60d771439a23b10d14444fad0abb5d698f66602b143d8a8f25f463ce40552a1ad441f4cc25b7f5d3ef01ab12524e86333c752288a8a60ec9a0c692dc0412becadcc483161d6e2e540f85d73cb4f6171071017810422e9afeb4c7c1c6bdd38e258fcf748e28c1e61f19fbe310cb28fdad6c2776bfa2587d9de6840ebb4849b75f5ab30c9e3b1e0440061f24aca81e41175f7e4b18bd66713fb470752887339417c0a16fc408a02b938e82c09fff17ce9db5c5ff3a970baf8243ba9fcc5b35aa0864d4915b2ade230a69283b519f167e932312c1f6be790efe9a9439a87c26a93fd585ce07f585474df66eed9056e0302f93cc75d73b329737515903da8863a5c257e00758598deb8c9b3350a127b3a8fa3ced9e886f326da87683352151b7fcbe4228385e47da71e542b875807a8ab9d5acc58823020a8cbe0d42af3202b4852f9101144b411cb02158634b58c01732fe29ba141ed0a2f5fed38a1ed2283ab07a55a1b6b53448e7fad59c06239212e1d4a657d2d2edee969691fdc1acaa84e438940ac11d8610b00742a20575728c1fb061d432f50ae862d4ba7fb2095fc8ec088620b956f2f606fc780bded4ac88b0eda3a88b58a7890fe7a665daf5565f02f921799d68e50473b153778cac4aeb3d050d7d6ab80238d95cf70c561e923eb430937a65a24d117eb6ddf86e693d1401fb7aedc58ffb7a132cc5035ff77b15e92f2450f41a6c83ef9b72ed42bb222a3316fe33db4fc55b316f9c8260ac8e4d2c82d058e14cf3797ec4343da7f9dfc1e6c2198def7811815e6e77ed9e013bb32145b360c24ec0b7fdc1716fada42a27dd0cca27ff663f29d9c592d6382f88f7c45ac7b8740af6222d4e27a70c3a73f7cd61fcd6cdf48bb2f88b0b90740655b1016c516f027a8cb9ea37e0c9f21c14c2b6da81d9819db77b6c399dadeba047df05ff73a60939cab1c68dbfb9d1d10630db435f0ea18797fc137900399889b908f40a5f59636a2d9f72714202e7fe3128fc14d0cbda4796e8562856e6e7ec7f5e327a9cb923568444551edb9cdfd1f531b9645a41fa021f24a34fa74365600dc84d3c75700091bdfda2812c0732ed8294bd409ff9214d64b7c5f414fe81acdbce47379b9a1bab7a129d096fb11fbeb7c32607e5bdac853f502db005baae2be170f223755c1bfab3512511f775b5ce905adfaec11af870e29aaa7824b656e8748533f376cb77a97b0dca8849445420680523b49c59506c912b7ce505927794385502fdbd2b6a8c8b750f028110f78c327c9dd881239b453a6b6b001c13f6e281b5d1db4ac3af765978e6df1c8f111ba1fe677a2354ce163d37f056aff4abd6dc22539753f75cb77c2ea077525b7c08000f5870fb51ec638e46d1ca0a4085473c596d56aae0736f37e2a27181fdc73d77f076ecffc09e580df49d3def708175e7bce3ed595d39d06929eda5b892b300ef33831742854584d4ee4de2a999be99cd72cba91729e1ac065ceaed834eb514085e47f5948f5b987b471dc0fe04acea1b444e333136e1fe2597fd4605efbd0bf4386c92ec359d48c0442be3343c49c3521cbf01d3e0e57e42f7b7474b0878a8e1aeabcb158247882ead9cae8ae992647c92c3116322631502fdc4d6710016d5ab25ce469070ddf257f7843e7956744fafe5ee9a02347af2d53df85fb55ee9a575c23815d936d70a0004b5160b3064193677fdca425d682fbc900b4fcc0182c3efa9187b61f073c725ce8ae514b6f18a0452f03ef5e0aa218ca3c5ae672aa4937b4af656b8df92e7c6b3bd3995ac4190979d235181816ad8de022cd28278d6c39f7004ce90cfd02ad46a7542442f15b984db430c98c89876be415742caec39b411c51eb8eed2e77b3640266c72b2784734f042df86025b77fed18fd915414876c581574c4b345349ac6ec74b1bd516ba30def03cf51e40f436da7bcd41c5f97effcab49c22b777b7d439bdece2d6025dd80c98646c5ef8c2cdfc1e584b38a202193727c850a1d25c3921fbd6670daf0ef38aaea67111a76a9d34b1e976d85b8eaf38560fb9e4de3f4330969ae37e265db72a20ce7f4efae270f26112e0967b7388e4ae9826638319c960c30b869aa0fd6278a6002f6aebccf8183b04eb22cfa3be7605fc7649ae19adb20d0a945e7ab17d40b50800703e7b63394adf1fcfb47d5887be80b8b1c4dc27d78f1a9c580ad6fd3ad4523817029da4d64562ddca93749ec3034620af2b587b6888d0d05d8ec455c25a2e95a90a462764a9eac045d77aedbb993add24ecd8087a669ec35361ddcf9a1be55a7fd54974ca8ff520dcfaf51a67c08c1767ee86e20e5743522e910a29e8affed139766a025a09ac9e949fda499ba6a60c208e1c32ac8b6e8a4e1dc42efa73cb710af0d363e7b796c8d676748be42568d709ccea295985f28be0cb319988ed039b6c112e2f5a9d97efd781e984241a4fbf2a028da99729869ad756f9e085b2ef13fcface8201a774912e7ac0d573bfac961b2716e3d73dfce453716a1ed3c37a4f36d8eb63f2499972078626fd132f6c9b4075f2739d90a273d7cac3b77c5c84d07afa9fde82657dcdcd3942a41f5944add4ae03b0149faad4ed9422ab6883b5d394d1e17e1c91052899136f8c19334f14655cd8f7442b3dd456b449756a63c80219431210a2c43c14102ffac28c88a333417dda1d9bc405f9bd3a7be02dd68523c023a9847e4e3840aaa93d6dabf8966e204014c4fe9d7dacf0f26c896d909581a80cc7451e05b2a26548113051cf5ddfa5a937f6a5217bddead39cbb38fdb5909b13311fc2fa5afb33b9eb781352b0e115d39632967850db8c98b41c1a8fc0aab24573f3a0c3fb630ab8b24feb4a3bf9c73b757c2097a34ac8c130617aa3191739b701fdcc296ecaaf2906ec45e85031dc348ebba7efdc6528dcc95624e2bf2485165bb9b25b91da4b46e45f1fbdd6d1fb81979494b864ab55b2a645397720127a7012e2f8c8cfa376d57a3d8bb76122413317b82028570a80c0443bb92d6bc6fc9113ae973aff5369e35c8891c7230c73c0fc15908598c709f25102b5b1ef9a31b52d8206103242d7c60d56f23d2f1e19c68c0e7ad89ae071439494d8e3d9c86c73031ce76855343ea462cf82b0d0ee11aabad8b4840493f22b7687de150a40ee40708c7e9713a16ea2759e19d45ea0202a09cbeebb18adf755022dbbc002b2e09c446a5fc7d4fa82ea01bf723a5e270a24458c995d0ca437b7c962d8fcae5ab329cbf03cf699dc7cbca1528d781a83b0e88d9cb950a556f4b26e63f1f1098a28d172e9ca75147ddddc89e11f89fac8adecdd505313addddfa0271bc047741e5ae25f66dff1d4893fe06c64b0cb00acc5a22f110729243b1ce2e4b87559682731edba7aaaac325bbf4870e98c8d8e5baf828ceacda2d0b978fce6c9bba4d5b008cd48f7f7e600a1df55edb443ba393887c992cc75208e1858a03020946046e483cc931a888afe4d725732b841be63e0e1afce7e76178fa3e58a734aff8c4b16c23cea190c8c7497c6a4712133799d5af37fe39f4ae1bba1b26a5d4f2350add57146ee1d5ddd3203830361d391a9db08b646b7c17563bde0146b3ab10ab1aa23c65d5050817ecb5546f875bc1e6e5e09f8a3fe0f25e8d1f7bb37c9c8685506787d301e118f54ee3444cac38bf9a2e0a6c0792f290107a62a800243c1f5c27c664a77bea7a96526b6a4b53c94924c92bca79ae0765742e4629f836da6cfcb87322a12e86ba565fb8ef5adfb5beee702738363bbbb54222d210975417db7022c11a3d7bfa41254f792d3627a27f749372305f44efa30bfba6e3842ddda4c348e82b64e1ae8e1d9a2f16b1d808c56ce749f1764dcabecf59f3fa3807ea8cd121cd0ccc7dbdcb3fa4eea93447fbff7a9355c44b049c6a383471dc543b9090a053e1cd2531fc12d0999d239893e27bec6d145f4ec9b32ecd755c67ede369c11110dca3e73f27ea1e61e45edce2aa8efdf505364c681c5b4c65b67f46a0ee5e699c3cfe838f1e85411a123c35b22093a6390f8a8910a1536aa2925f64c748470d53e5757ca60b10ef079429e93733f5a687775465f24f80707a36032ed89685be0f94312f5df42c9e7fbd9cba1f9d4ff470d973691f7c53295c8c19e007fd67d4bb2be912a6af669f9c9ef0737eeee4f1b7e2032871caf6856bb08579cd3076be229cd8e6af928dff343949c1f440a384998d238770a492cc55a51dad634701373653444081c03c1e76c323a9aa9548d7c179e0ed09fa489b35b1972e671f3a2c912d7109f33d51808bf91e756adc792ee9b44a152eacd2055d4b3c5f446f19cb7f9f910f5b276b31661395ac5baf2417163d56aea2a443417a74175fea836061fefe349904457878248530d291726511358d953863fa74609f684ffab2541ad9f4a682525f5413c3f5c9a417e5105c96885132088c5829b92c523bc98cd19dd473da8cbcd8c8f49f840fcd29510c114cdb52561e2929bec618606e7b0834c20769237b625b8c90271917bf6547ff2b5c246a68dcb3f4d5ebdb2e29b08816fe1fde19f9adcb072d7427895218f1b36a62bc7541ffb82254abb520cb0520dab5975754fd76a15c5c25244bc22f4282dac5b0e127c488ac3779667979b5cb8fa5cac7a6980bc494b313a5349b10b17c54fa300c4d1efceaba4aa5ddda2e879d3a411d1508c01294743c2c08f0fc946f437729e5a38699ebd56f0eee66c737fa0604f6f0c019ae3820abd6dc26cddaa676bc69eb70702b64b1acb5240eed2e45a6d145e583754fcd12b187fc7c4436f4ad063c5208dd963f1b171abc5938fe18174e4da2ceeae50ec9e19eb7b88dcf64da3b54520dfb757add858276e22aa9df55866780c354f08871de0264b5274ae5b40d0eb6338010d5c23e6976c521f4251a22aec677acf5cbf62232f575e1958defe88b43874a73bb0480e3ab104ce4307354b2b18a711c91dbad0d15cde825150c4409f1de00d5ccdc63fcd29174e7101af125c54d129a312bbb33127ecc0a4d46a60a2e6a8d67ce605cc6d8882465330ec55acde3c701024829fb1240d7df06640e635a18c0b13824992452c7242801c4c21e00929855c8c5f6a86e8add7b983953b9bb3b30f21adb839da211fad6303044495aef7e6e63057d501be8512147b65a8b53f76651d670b7e43b6dab9e1a161ef6345744a14fa649450055ac20ec016727ff5ed68d00e6ece3c274206840be6bc5f449cc9ebb3f2e288d26eb2f6bd38d7463cfcb760fc8933e1ca13ee8f8635a5be6d7f6aeec818fad3c057ed07f02284c5f04ef1e0594c863909fcf61154a84e8df5ead7d318f7d00b5f90f47544bf9fbf110fc5a999e93185ca6bd2fef5a3abd09e4730eb254c951d674afb6ea65420577c9d450cfe8d0c6e34e82fed185a8a33093125b7faeb40af21d3cc32f7abac48fe28c3e6b0183cad3c34879973ec96a82de150f7ba07d1b3ee71b27dab04e350e12a0d351ad6fcbd65762d0cadaafb9593adf0b9bb89df74d6b2513d7fff148be785ae4953f83de1857e8fbfa9eddea66b457fbff84b923c3811d6d17f4801fb243633ad514d7293b32a4e0e893ec3b72072959c5965090cb4cc645e3bf013857761a68ba51a932eaa53af8bf89e94e4797f285bf94f72a32189e70596812e9d784759f5b96d9befc56dccb6ec5b709889e1b779ad2fbb76fe02d4644cda31acc89d5c0ec2e3f027380feaf3d07bac2aa7296ed0b539f047fba4f619dd50a29ed0054587d35cbe23c8db92bc81115c35dde1800902e3b8f428bc6a4cf3ebf04ecc1a93d9be2f392d5829baa5e831e58a2c9c9339abe423db4064bc813f039e5c011506f142fd2914002d14fc87beea0878753a28868f6326a3e85ee9f4f2f0f8e2cbee1a09c633d0e8b360046d3c561df83805ca3753ec712e44efe879f61ac220f0a8d5c19000c20ceec247769efefbb7687a4d6bbe46d6a6365c22065c9b0ff7d654c0cf5b3485caab9032c7115449736b10617b04df01b004732b687979757e0ccf5528740f96e0955181c5a1d3422e509d1d7ef58f9147cec0e0891e64d3fdf28f97c3e5b41537a063f778655e46d598ffe62cfb5af72c0c985f4f620da5f343a3acf0a2f37a1d4384fdce1d761156973f74e336fd7ccd8809f59b4e1032a36a38b0352609ef7915f7ff9334a53ba4800245e18295b4844a72b8efaa4b7eebeb02f12e4e9372a2d91dad590aceeb18beb9eda9e6760983d65e658aa620cae8c25f7daa17f37e6a5f1a8e89d4f8ac77aea7048df20dc633957d34d528518014bf88617c0dad09a32419206c9814e732af9cb94d7da49ca84bea3e89a6d1a3b707403ae56a3269b0069812aaffb4f576f213a0d3201ed0408d71ed360c46a97411cb11fde57d20b4790b76b47cd715a191beed44a3f990ccaf35874a11e3abb94982b81b5977a3503d5d78d48be07f6effb8c15425cd7f867ad339148066732e993ea9a2a69d9acd6ede57d8115857ce275883f960583ed995b0eed4c7b916ab4bc6477d33e4bbd7c46e79f0a2013872629272dbdfd6f21e2d443db517f9b5f74a2eac31b3f11947868319515549386c814e0ac5c96845c62879b6714f4b1df4b9356ab1b227648af595a9fe24a175b0d097dd7a4a59d1998d0b89526cdf045f661c545f930eb522e10559171af4f78be18d6667a22edb7b2d7fe01ad2b618ee61a9956421fc13f023c3c485a828b31b4637b6b8c824cc323a044e0f722563204d20a99260e8566ac2e680922f86230d675b29369f66554de2bc8c370053a8d32068f2864acaad4fcc58cb9f8b0c6439469fd8d7d704b76664b9956f5503950d871400e9d62a6a5741de6d75dc66cef70a38e321ddffb3181d13a98453a8620acbbb751d0cfa85e0bd5e86ea3b6f3e3d64d35b7dbd1451404f20860d3e46b40dc1dcb61cb28677625782b2b49258611528043cf27396d884b84944273df12e7a679e9d8910e8432b3fd152031fb58193336de7377e93f0509fba38065fb0a17222ad941ccf12222a90c86717ac392afe532ddb6a40237d3e3833ed07e50c9c5904c8fd8e5058fd7a77f7f305407bd8bfbe9424f30310ec4f23943041898040b11c4bce91dd7c9a3c4c4d4271d7bf081d0e2f426e80e48cb13b7bf6a6b2b3d27688b27f259e0d9e306e7e865488f40b41d0c9a15019e5032ed0c645ef2f6394c58d6714c9106dba8a6788ef259f44d768daf404f6f0bb1bc129059066d4d38c32eb78a5143ea7fe190eaf2569144755cda2b02edc0aef8a50a66d99a0095e8b4ff3713719381099c2b5a059deb921ae44f896772192a0810cb6b06051f1b80145b2a0cbf04206f01379e203d17b81cdbdc6f7f50aa24902252cdea9bfbce980c91c6345659a420894d7431a4be326fc4061f77dfcc69ab586144ca9c68a545decb41716340f54143479ef10929180dca891e1a4d217d0090309612193cb0e73f3241e93f09c27c905579a9d9acfba9feb53d12d6bb93f623c21dd67fb6a924cf05d56a72de0db813b93bc86a436702f0542c9c91279f079f728e805c3de71d06f6417374debecdd2831ef9a36cd5c33eb6141515add205441ef2197f80ecc165bd3bb9915662114f2a66d00463dd7c840a01618a6736bf3840bb39f78e08252863367f99bd2f47f970820433f2398666a4577c7c1a4cb6a944e8e65750fd60b691eabc279287f5f488a1c6a2ac8e439e218448ea628f24d967be55af5b735654210fc9c4fe7b69a12e7e7f027aff12aa58da20bfaeed1be8992114222d4cf36d2d37d1bcc28d2a0ec499f0829e2db04e67621e3041e5debb64b6ac01f92b1eb15147ec999a4cadefaa71dd0fc878cc6cdcc8735c39ac60af9ae6c2ec5239a0ffcf69d99e98b8d67d8266508a679b9c9ca0dee384b906f969c1ee7a479404f44282e157a860dcc5248651cb34f1882404d53c9d9dcfc36a267824fb316875deb72ac19ad15c74d04dcc6a5ba24f66caf88ce1cea4fb903eeab89f587d650280bfb6d29e8f13ddfa249200bd45bf7fb078e9240ddaf4ce04caec66b992653e0c5cd5e83e1397e482a816f88b92c1a6d0d64642817769d23e1698580f84dfaa6c7bb156fb0836b178820e664cf79ff1f4c821cf5183dc20f440b784bc3471398fb617d8dbbf4eef17f036f5996f9081b669b2c9615ce47152a8366fa942678bdfd22bea831f0a18e006c2f2c508b974d8bacc7439c5d3de0560da738ce7341b84b1cd2af44c0ef2acb7f54c94c536eda7c64d980020d8a25c81f6868943016416fc93261bb888b067a0364a57f17938414016f558bf5505d34c6fa8ddcf8a1a02667e754017c1b6d34098a1cfbbc89e5fa0821140ee3d10fbddeefc283415cf2b07edbee9c0de2b1d95d0261433cb9343bad09449da8217f08052dfd05e214f8bb280dea098e760804f6e53c4997530cdc6625652a29666cdedc832d2855d28b11cb0980ef648906231751bffcc54c704cc00740123af0deb72735114e2db5a13850b3729d589a5424586bf5778bb3e3c58e219a1c7c6c0c9321864eb58784cb6677faa72950129ccf9abc6d71c17a6ce5be7a4cdb4ff9c9fb4253c135b2475ee71aec4ac1bdc5e14d343e982dd16157efb85044693a8078cbfc3c130053e6e6efd7a7c88530d9135189ff0b04372b3ced83b4cc83db1db3fae7367f1f930f755f0d07eebca901c7fd7d517261c7a4d4ccc6bfcd6e0479e60c06caf58d38f5475198e4269f898880f25f12a5305261ffe0960dfe46b8f0418bf0215d48d12036db0f8baa1067f84f664d379d5a16a476a180fd84eb0a7e0c18ed70ba5e1490c6ab904896475f0ac3aaf0fa85bd12017641bf8bb7afadf460915e3606c79b5bd52fa1a7981991b6c0d45c6ce69d8cb412db7f4dd558144ead637e9ca9b7bcf17aaf0ce4275b9df3545ecf456ed42b8a6c580972521da1006d9148e95dea07387e9079a725e8690d4b3d9131ac5c3f38c6425b3ecc3361bc260426c43f02b7d4af54d6ef5d2ef677bd4812a01f4407f76eb217f0b8b474a63a3b76a0458b75d3d961ac243bc0ebee7b408eb4bd6fb5ada067604b5450dcbb852851d2106a7834b93d5fdda7913712903116cbe70332a0008222e90bdff5139eb18385673064bd9d1d236031463f194c87cdf131a54a3ce032a9cf8fff02eed7fad0d4c22cfa3cff4876e32d04c8118b6515bcb218a88e0bebab86ebbcd9d73895ac639fb2afd078d51b975d0c4dddcf64183830b565599ece322f1bd8d5b506422b8e4922ced5835ac0f6e7ba157134a7a584702f457bd2b5de9a716cd4649af77751accd1fca23c0c1925f3ad56110294608d9ca4cc1567337d652b91309f62036838dd3f85f9fa1ecf9a9e721c2dff4d88257ed8699102e0a8df13e9147908ee82a1a3ae9e39f289b022306d1a8becd1ef21658812aaacd1dc22978c6d28db73dbf2c64e07087784483db23c8434d044ec89e43c5b4651b7040d1a17c95e582a10ef89ae01bd6b281949cad9ff81ee054af81617fb0bec2116b86532a3999a3c5eca7a40d9eed54c9ddccea153015217a27280427c4203e463ea9ea000a58cf3bc2602a4a4bb4e5c9f2b323736347022a44ddf339186922696f70397a26ddc2d96479853dbb9e8ba2c0da1ef0b4f8fb0ecfe88b545d857cfce60aa26356e9d44a67dad7d09572fe1d591bd84721ed59ed2e85b41401099aefe56a29c898eaf2045ab828a28f36f2f0539d2adcb95d0da8f64ef5c9f3fa05fb3b0588dd1fb0e01451ad796b8a84b0174974ffebd00203346dd6a40e7522c204e63bba9a96a71a36f63f32f37a2e4abe64a627e7e74137e7feee64930a9ae620b0ae5e54f53c8b071a01fe7c74c8b7163c8f8e60fd6063ff0c18b5e79b2f353391682d90daf87578c0d143783f4b3511fe3154dd467f55f1765943550d5f7a4ef240fd824433745cce02da42cafd9f61a499de97025d32d1cf59b6d6898d3ac3fd04763f5f0948fec753b176fbb9060e27cb34ed98c473eda4c1865c5c1a4b3d35c0c6f815d67a4eec1e586c82caae1b32cac599bd5233a00076778fc246887b2daa0bd53faf68801c965ad30c86ed5f16f3db12f885e664a91d5845a6a5cf4541e8bcd426d525f7876a7516c411ce600907ed940a630b9a620cd5157dc41ac2798c3feb2210944b74e27332a8258e0a66a4d82e95c1c6378fe4656bd766c3546a0cd87d98deca216d9877fd8fce260848dcc7f2b6eb4c9acf8a5108ab4df30bea1e0bc9389b2bd821c0db0da38fd23ad7e9a4a939cb8de31c544f3f0a29352b6b7ce6992b05ec0018c6686ea7b515498246b0d035dacefa739f3d3400d9f037317ce14ebe22ef0ac6f07b7ed335bf00a25b03af80d9121cb2edb397081a60c6f0bb3169a95664d79bf1c11bec54ab89a1c549dbf7bb863e32d628524bf97bcfcd44005b12864f4d1c2b46d7865bba685e8c0455d2f834ccf7c98021dd3ee7f195fd5687d5707d7a8edb068dc1dee6ab001474d7ce83f9a2548ea687e91353b2f79ae55ea531cec891e6db21240d535642cd5b8f54bfbec1aae4498e9c80f8710a45c27762dbfc0996b80814db8d170ade6acd4a0c4b4c2561a8e1b91b73cf54145d16235ce6165e67fba348b2e2da2f5345697ae154cd6c678edd53a37f6d100a4570e9474be5a56656b0199c82e3bffbf36af4480876eb56f2519293f28a583d1b4aa6a0844769d26ec166743f101aed5493c5875a8e9a7ebdf0894e305f7c4348a3635bfc4a835b322cb8bc175e385647babd6eef2d7062a910f1af30df7e7658c076b52c8a887773954bcce8b6fc83ea61cf928d9efc8f5cd7db87968b24ce3fd73c7f2106318894198e066d580c880f10c9afb9f4aaca2163453fa476366b8af9efd60a51725c61c22162a6856b3e54fbcf930a601503207b8b0ac799985c748c68f03c49a57559b8ff8faf50c54b155f973b75e0504cc3fa7e23e1050df86c57d8104020bfea4041676a8e6918e077093796e601ce2f9badd290d54ca6808df43c77058bb5a961be2fe45aaa95a8d2932e3933dea99a9100f41acca3c20d3fa634501c19bd3ccec1b72b24799071120adc846551581314c57ed188c2961c0753474a963550b2c4a09bf51d5d77d77df91805df5cb923e1535b03f078e1679393245604ded8b3cb9eb4ed4f05c18d267626c39ca8a7fe984098be090192c8454a3e8c3d3eec80ea9c912dee4e60f3bbe0a9ac5b14c78dd2274d62a210da3116581bc4e504aa527a9f587718eaa9e44cf9465266c12399be40eb501bf044a9a2a5a4a29e1b14901d4570d231b1b396fb2be5ee7aedde0f52ae44c98aa4f88e74359a14ab0d91907ec4fa6a2b774d7a5df64d3050be0cd2693954bf9839b705883a5ce3b826548d81689eddb8e40b4bdeed811ac4573cf2e582714682caa3cc9d303167ed4f6b75e58aad89e0808b7056bd29b04163990449202a64146fc47aa22d9d0f6e32c1809b846460e4636bdd3bbfdb0e9d0aad46dede1734de8846c5b1972063b4ba6876b524e289860111153ace94c13ca4db69f1ef24e3f011a24258206a71231fe9ed5c474d2ab67801b648124e24e7062e492d63359822b8d2c193580146249f3453fd8e95f813350fdf2dc88ebfd816ce089e78d541765eb98470f77fcbca23d2dc79fb5da013be1e0dc857ca2cb551aa003ad3338507d56222d10996443d2a6daaafccc99b46ce534012ce8c2f6c786b01c70389201e48405433be41513cb9b2f97a0c695977853836f43bf8a073eb6c537ab8a39647104db5e6fa81f5d0283da26798020ea437d4b58a6cfb92e7e630b318ca7a980e3ca668d91e18457959f757912e8926ccd879f9e4c88b5c77c2f6e9f803412ef00ce1ce63142bfb6d806b60322a44398b57e6d41e2ab3a711e1004d572842db2663f423486e5c21b0e70a4310e723ee926bc1012a997a9d8bc6e0b92dee833895169743c5a92314ca0f425599515c7ef43bf34550a398d22c29c6771235d57c15b173a6c735d43fe6b45f29538d867a5f712d4bf052050b2f0820c9133777f377ee33029ba78845aee33648ca3d4738a50e939ce92f5e89e12d4914ea237ac37895d82ab77a3ef19f3defdb25de27136d621ba7ba28a9a22d0610e46225c75f4ef5af45592be3ba68aec5b57238d23e1307013e6a1c3d03fe59a7a05bdd2587ecdf47b295ce8547c4d84b9c6be608b033d9e6c8e425ae31fd88c3157cc0d2c3dc2e71421996f455688db6ba63c109981e0c223bccf075d0973a2f3f4869582a74becf6b7e5c4add7b8098cc4cd1ac7c4f03ce39c3632108dd4426a3501ba785d68dd1abe28ced0cd28157cefea9c3cc82ae5ac7194a7a2f3d278d6aae2773b2d0844505f777a801a4be55ff2784ee834503c838be615f3bc5c177b3a73519576383b71236979ca2542ffa96c562d86d5b1044f11f10c4056ec090dada11169eccfb2c9e3d14599f7ddcbf4db609bde939c0af52ab356c4fd9769c50049469c496020416dd271512b0daa9a4b11ad625d17e4de394fc5684a8654319381d7e3c7b2954297f4f9f1fabe1bad66a5d343d44c94827b19e04d174f6072bad8987822648e769412c93207640590a8d35fd90e4528e356ce884a4d95b195b8d637bc34a3af3d78659c0b5ba1e2a166fcacb7136d96cf86f11f8f1f432576b8959f09b302de150858328a62dd7a7085eb79fba0fea993a50b681a0563259b87f6adf46f0f279409b0183bed1a81670ca51819ba110e6e494124befde4a3a71adb94a9f404e41adef62bd2df2eef2f29cb1b0141bcb069bd8b882376999412e1df927dab693a2c1232bac5768e684c03ba11f4a3021d4809e630a097f31cc8a767ec02ab56212d99d1c3b0978eda0641d5f5a8c11f8f39ede6f09c5aca3c5cf4bfac741ba274fd85f7388e4139c734522f7cf7d4766e60dd6bf6e071630461ded6ad5489d5c59d42470765b85a636bdaea36458d75bf516a1323c89fc8a94cfbca8d35a17bd5536859d51c93cc3c96c7d40fd6ea508395b3004b6ace5a07d448f038cd7a0ca3353a8794f0d0c36d39f6408a5e0f130154ff01bae479675c308c61dc8c0162fd04f9093ecb036a3a273428438c7446a035fe69fc335a33c1681c2b78efd727ff6381a35553f31970d54101667e6eb960fdf047ab255913bb97c8a60071935620fd8652ead16861666666bb66bbbbb6bbbb576e1928066206e9053de77906608d9632689e807183e77c7dc76030980b070b48ec9489c2c6cebf7feea2d168dfac6f572c162bcb3294b3440705231a483994ffb7cf5baaaa7eafbe5b2ed7934eb02e14452d70260e13104b465a48e1df224e9bcd66dfe6776eb55acf3b027660e4617283901f5a44fc082782f6fd735526937d077daf39675ade455790b88912e2072a3ee2fcfc08f77311f751bf7d3e7bbd5edfb5efafebaae65de4f4220c10495fea68b9224284886f9ccf8f703effb988d937ed32168bf50df42de2ff2cef22a6251dc898b9a14c1ca59f9f9f6f1ced4738da7dfe23fb56ff5aad56df3ddf3f22448890e55db4f4038791243cf0b872c4c7c7e71ba7fe08a79e769fd7f7ec2cd334bf61df3e3f3f3fafbcaf0f78723c9896ba14a1d168dfb8d98f70b3aba7b1be655f0505057dc7be693e3e3e970d94912962e884f0031a5555bf71b21fe1649f5dcdfbfceafb75b356ab7dbbbe551aed492758da2aefcb8294203954e8814798a3d96cf68d7bfd08f7baec33f39bf5202020a0efd6f74c5555336f02dc1143420f619020f52093c9be71ac1fe1587f5d9677f9a0efd56b3d3d3ddff95b369b3de9043b0bcabb168329ca972a4b9ee4bc5e4f3a00fbfac6ad7e845b6df4b56ff3403018ec7bfd7ec9644f3ac1ca6a79afded4f034870d93234e582cd637cefc11cefceaacbcd3037d07bd27168b7dff9bf57a3de904fb02ca3b046e6ad881a3858a1838abd5ea1b17f4235cd0cdaf6a87b95cae6f11df2b16eb4927585607c8a879daf143971c664cf3490760cd6f5ced47b8da836ee6ad3aec1be8b1bc713242b6755c92c7b69e4400b6f5fdf36d1e27436457c7259960574f3ac1aecab2d464f024192304113238828282be71403fc201bdf6a0d877cf5d2e97cbe572b95cf904b1bc8b78e0f002cd0e497a107152abd5be713d3fc2f51ce8b5bc51d85b1ea4695a649403922b70a0d434ad000404f48d83fd08077bcf81f24eeffa8e3dafb842ddddc18d8e242edcc0c1460e3d3d3db0f7e47daead56abd56ab55a990330c4f8f15445491e1b7230180c96b7ea18a82dcd0025ce0f36e4cc2845a4606589e10d8e2359dc58417f86ae5097a629068ee89c116169069296d407832bd49de77984860e35329c790263e98c9d66027d595ea552a98a6cfc7883868528393f78c47e848ba95c5749a4477f844b8fbe2ccbf2a689e2628587930e203b5c3fc2b91e7b2beff23ddfadcf6030180c06833d86091696475ca1ee7cfa23dcf9f4288a3ea9c6a279f7e49d80234e62ae9c2084ce532c16fbc6b57e846bddf558dee461dfb2582c168bc562b17c54f5f34738d5cfa769faa41a9be60dcbfb036a7cb80335a308142a2e97eb1b87fe0887be7557dea9bbbe5f699aa6699aa659169657fd08575ef5f33ccfbc5d791739796305883cb9263e2869b55adfb8107d2beff1e9372ba360595ea5523da9c6aaf24ef3be3af078c1868d1f55c4906151f4490760d16f1cf8235c78f068dee2cfef5556a9542a954af5182658551eaf5077443ef523dccbf24935b6ccfbccfb6ae932020f244411c24608bbcd8c8484b471df8fc2e3c07fdfb8a4181b1e975400367cd201d8f0de372ea987258f4bfa61c927d558f2b8a3d4c71f91c7a53eb61053324fe89ed0ba9af084ee4100ea2e40c33623a784458fd0375742137d59f7761d1ec0773def7ade3bcfbbf7e26ea9b48580761d6d00b2fc81ddb77e4c7225f4f8447114bff0e01b243a578291f6c611ec3c333c5178c7e3cbcf144f14dec5775a1c4571143f50d5e26b59985a4ca55264ea133f8effc0713c08e2a7ef443186523a0394e0fa9d200c4530bc3fbec0bbe08abbd147796be52db2fac55996066d65178b05254c2c212da4f23da4129658fdfb4e3b2e81765f218085be217c81790c3ef0a9544a14c55f3c42f5f1453a5c5bb3ed740b5d5e159a65912e5716a626c1261a1caf5019d00c0bb4d3a587f502b467c12d714ba09e9077417b02f54a7c9ef795f8026f0ddafe3fa0ad05da02067446f81b187d1fc637a144075ea14e7bf9bb04e8ae102e615ed70bede50ba6bc25d0157bdd896e6d81cfeed345b8dba54d04b4ed6c48686b6ada00ee08f4eaae87f1e3f8723cbeebed8edef3c4efebbc530351772088f10782e0f8417765cc5d17beedcaee62dd7d37043bdc618c71d7a21c475104456110310242a0ddc72b478be0e7fd3c2f2e974b75569aa6e055edf90108ba4553a954baa64a6ca652655966d5a542859a55e459b93d53b7c69ce76abcd1e23528df3d45a6c814993e064bd3bb4e924fa548720420b4324d7a24197bba4acbeea9152fdb51abae3c5391b8c562ade653d9a84ff52a6657b30af5d7cba327749e6606814c77704ffe92ebecb79ecb9eba3a0295a8e7ea6f3d6acf535925523ffb4dcdb35b2e4ffeda98a0a9932f7fbbfb865c5b161d934e659b0d34fc700d34bcf7558ba6125b8e344dd334c62acd35bdb8ced254a64dd3145373f6d9ef29cecebab8b62bb4683ecd2d0b592a8a696e57e8544467a2f9d4145b47d3580e14357398662c8de5164d5d2edab79ac3e5427dd4bf7c602fd85518ead2a073adb00c5c87e58b47a0ae2cc323d293a0ad46aa1a9238d870a4699aa23757f429cc146faeb18b5964dd349fa6a9299aa2699a2c7c4640755d05edb3abf8b9cfc5bfce6abd45b5d9caea2babae4c44fbec379af8db8fc83a2b8bd994b5ee62ad2d8ba5b29e5ecc6656593983d65d6fdd057bd999361c2d0b996ed970b45ab0d6d542d1364d330b990d470bcd6d91469fb258b1c362b91d69232cbf3e5b519da669bb42b72c6425ba76bad5ca74da019a4bd0e9d6af6e59c83c14ae7b58850acdfa6cf5396dfd39ba7aa74a34bbcf6fb3fb64f437da51d035fbcd275f6f96d2d2638059c84cac7061f38649a68e3518c754ce80ec647a45cb42a6cff22a66ef51d5950ada55726d55941cb38a66759589648ffd268bd1b26a9e4cb563995fb3dc8357686f6dbde3768566c1ca6da759655eadad4caf7eaeed0a7dbe626deaafdf5a0c986bbb429b28e9e57685f64c735d7d548960afabf020965f19455be5d1d58ae6d693e9d6da7a99854c9bbf593559e943ac59ebd569aaf4bcd6fc353d3cb47a0a8ac498d5f1a7ec75d86fb1cb5efebce77959455bf4fc6b95add7cbeaea2a7af3e4538fad6556d1d74d5d91646ed594779254533d9e2744428fa4e7c9b408a587b28a4fc244eadec9ac965eeab7d4bdac9657cf9ba9ac9eaf7c3da1db78b5bc77f32a607f5d85ecb1abe32f186d66b5cc2ad1ec3dbfcdf2f57af2ad6521d36a2abf6eb13c669508f6d75ff9763d2114a3249c135861b34b991a45125e09af84878db6f7f3dfbabfa717d72d5e7570dde0d18feb1e0f7bb86ed777f8f2a975a7de3ab9d6111263052e667c38e938815eabd55cdfadd6936a6ceb9b3c0cf6961b396b7a6012c39a1eeaa469bad39bdf3d0f0a0a6ac16030d84d738505262ec0c981c7c8799e67dee75fdfb0d76ab55aabd552a95463723de8a8930608dc13d55fdf400fa2d16865596ea191262acc1b2c278c29eff3ddf39aaaaa3e7933c0052559822451610554509f6fd96c364bd3f400728ce4d024468f3037d2d76ab57ac964b2f33c47dc20431e334b3584403a59a669be5e2f954aa53e69a1e185251d68f050b158acb22cd31f341889f9210e8f24e57fbe8156ab158aa2e40a6e9ed49820640515d0ff7cf7f8f8f898a699a66918b5a387224a32b8910283c16079a7fff986891021222828e8276f12583993431e1ea608893abf7effdce77fad5653a954ed0d3fa4d4c9e1280614545fbf7d2e020808a82c4ba22d499676a0718414020c0683e55d7efd16f1f7f4f4ac794be0860b69707861c7961e11786a8342121e615438e2138bc58aace0999347081376ec904384cbe52a22c2c4c347953b220861c34fabd55272736508213c665061f2a1d16833e060c9f2e28c120f7544a8aa8a140705182c94a025861d7e66b3d98d320375c39d25366ddedc3b5fdec82027072b72f0dc393a78e4a9e284051d86dc352d2c09f3c39412bcf0705ba863244c921362e41023c234cd04d03832814a92149ac0f9090a0ab2004a89096d66dc5083a956ab0580880f1bc8e09992821d4040403f3cd6bcc089102386333d669c84a8c08b98206050274c348e72e430e4a945082438c130850b16231c8cc9c2a5cb1113cc28d188c24839f201a50a91259546a3d99ee068e2b4c40c1ea774a6aa2a9b420e071242c829a971ca66b3994aa562226147982939196f5ea85e3299ac2ccb22216e82c081a3062e31e294acd7eb85a268918d282328bd4044069d29e88ac562a5695af462862529c4b9f244061a5273b55a9de7e9831318296002a78d1ca633c8349f748235552a951c5c0f3a6064a8f2a58d8af65d0b0a0aba677a1c09895227861adc94ea3750ad56bb644ce071a54b0c4a30dc80cebe7b80809e7482054ad3b400248029829b81870d1552d937aca7e74927d8455a772299af871b41088b403cfe50aebb294518e6ddb1df536bd30645ec91f7ef38cc1ca844e1f16f610643103c195e46c7821dfb413744c77e6b8a95039ed0786fc542e36d50ca93f084c67befbe7b5f39de131adf65efcb1b8fdedbffb2e0983bb8763c393c96b4d7a1e8b29a4177efb62edf220daeeda7c1ef5aedb29a41983b082fdecb1d80f76e0bdf76e015e92174b91a41a7bfdb8da578706dbb8b475cfc0f3c2fecf00ce51d799c1005965714536ff1952f2f7600fab60518be44d78b1d80e60dc2c50850fd6204e0ef8b11001ed520c4e441efe87a59d5f973bddafcf4d6edf816588727bf0d4240c55f0de24e8307a12b3af17704bebcb90d51fdadadf8f127a12f1b714bf47a42e1c50b6a104f003402839132fa1359c8345882ef7e29ec19d982d46c406c3f6e38b6a6a8448ba258de79517ade77e3a470010278118441b26236023fde48363cb81a91acf8dddfec0284f05d774731fbf0c26c94ced046853c4846466c0c36df7b6830b7638cc6278a0e58746b376ad9389a1e907acc20e8ee3d751204a4beb9a676001a5f2fcdedd8a2c10e5878bfe6b9026d49c84013638a013b70682f83e0cb3519e120a6785c3ea3a750dfdc8e2a249e60172db7838816f5cdedf081026843218cb8e44be99b5b52ca735b54879300f47da922f5f0b7f1e2f82fdf52a97c11dcc28f79a31b5c56168ed09eb8eea69bf85dccd713121fdefb729bc2132febe12f83acf13b01789dd77d5885afa3bcb51077df324eb0e64df59b2a7765de37c7e8581397efda1b794263117b3d2171f59469fe7a42245679ab9ecaaabc53784267de243ca1efd70e8914febacb9620f456f17bd88107bc5f7b0702e26f87a82523133913d068f016e00b3a5dae46af44f72eefa61479772cfeee1d035f96d1b1dfbd8c01a41827d8ef323ad67b0a4f08c4c01302dfad9d0d0afafd4d37f17a61bee18f79e37cf4cd10db9155881b217a505a3203945c0f245e92274a704680f2e125896dc84cdf9c0e387ad437a7638db702b1644bbc7627110ecf0a746cf77ba6401a71219c60bb8fff2005d2785c5864648477538aeee3bbbcbb944a44660e50a8446479191d4b1eff56e66d66a4182758f2323ab6ecee873f15780c526b8a1593f084c8d49b6ef85dde4ddeb7976ff8a9bcf198af27d492d0df78fd852578a208c1108bde77bb5135820a5cb6bb489618972bc66c19c20956242a12b38bee972d3232ea7ecf0a5cf68af86f60e47af4c8f590616bfaa1d2611392cb41236513624372ea9bcbf142aff4cde1d8a101e8f9f1061bb004df377e5c476d3bf3071ee8d4532a993ec78fe3d11503ef24cf42a6f1478c22cce54a02cac479b18c30d1a2fa6c65fa3c3a9e3cba961fdc218618028f39667502daec32c668b9227fe630c4210b995665122090d99cbcca92f57417b1698af42c1475a1d9c5ca9577d1eaaa2a51ebab73d073efeaf8f2a3f7f365babaf89a6edf5f77817e37ddd2bff2963dfd769d756f55d9d5aa86592542bf3a07dfbd9c5d8cd1dd5dc85c782a91ebe86faea30f7faededa14e69becdf6a75e13a9ac7b53c06987c6bc55c72389ae8ee23122bbb683acf3afa7445f32e62d39f6b8ab4d5425b7937a540dffab93b16c52751117bd4d2a04b81c47a0e071afda351a8e7cb145d77d3adf5f4ac97eb0dfdeae74a847e957713996faba779b7f2f58448f4e5b87a80df9e2854a2d5d1abf0ce33770307110d007d7337f0e8d6d1df5a47f36e0abf5d6fe530dfd07f79cb8e8e273f627caa2960bffa16fbebde7a3d21f0e0062f7237a8e813fae66c04a1bfb3fb3dd5d46fdfd1dfbcaf5cccfe3a6b75a1be27b7325d3e5c5b990e5f8e1fc797e5edb7f1adf13c0678841ecf35bc59b29e5e052ba72a3cd0e55ba2388ea3be2789011e9fa05d062fdd1d0fe10bdaeb82062db025415b0668756dbacdf2eb3dab0b18046277e5eb09c9f23d21f01bbc402f1bcb4df8b0eca2e9c67a7a17aeb7fecaed35e8ca2ad9caea78f4df71acac92594dfd764bb34a84fe3b07ab7b5fdd0b3b231b3bae57afda30b7f8343e781691b8a5c5a664cb81ca64a8adc90da5b42b7dd4b0e140c38b2f2f57234a774fa569ca521d3455aab7d2346ae0c4892327cc9c3050fae6c00001e354068c0c0d8c00a6862c4c80b0e1899d1e3f28f8c02588172847d000f145055fe2ac434e5fd00c05f11247df9c97272f603466f24a98f858d4f85834c61d91213c28111497c048b0103ec64c7804be07c4fb7ebdd103e209e10e4761268d4719180923697c0f482b3b3112165ca894f3c254a2a372bba72b6ab07bd22d86f2ece012dd5227047ef4a250232d93a1c125fde47d080fda9abac54e1a6c5dba05716810ec61824b780486f284a03a31df0f5cf24a743270290a6df1c1e31fd09c1b3bdd9357e28bc242e0cdf1bb837a4a4ffa4e063296be3b4a7ef0805204b3c176f09ba56e01388db7a42403437d78cd09180ae3c150180a436128ac06b3c176f01b1946180a4361a8211e28860a955264ba3475e9d1a54617185c7ae002c5658e11235bca6c69b2e5842d485ad868a9b3256acb1c2e32f050912e5ac0f80045298f131856b08185f376194364c60b3a88e92184108d963159d40cad20ced1628e8b1471488521a7eb9bcbd224cb9121983061b224cb0c2c78b0dc61626408c9d09021211470c3650d0a3c62080386d5734448b30557c5284c0d270db20e0b1d2c56b6dc00a2843c6cc726070b59a27077d6e870caf1327464e8c892254b9658e162a589152257b830313131313131651153a2153457d00c151982329485ca1090212243295471aa0244dfdc943953a25030a58c87ce80c4871c5f6ee0c9c14d9c97138c1f62baf4a0e38794d4ede0a440100441130441102c0117c0c70a8080f221c40d16da90896560cc1425394cc9dd80c30ae0c098cc404210b8a82418a70c55d009d420c28c1a2ea08121c526070d97dc932668866e0cdd18ba3124a6c419866a0cd518aa3154e3491c2871e2e810478721185143359c2c3991e1c46848690847d490d290d290920d6c7cace4d07192c409d30a6c765e3a9871210aca9c346b589ca5880abe8c2123030d6e588c034b29b303c576642e9486bad8b850069d3374026aea9b635266680955e99b63a245eb40457d734ca6604151d9992c01e2a56f8e898f300cc3f00b5721bc6a1e661243b7352c5d10194d832096e43162838f183f8a80a480090f1a4ea6e8b0c34c1422515610c5283dbeefcb53d42a4a082f1103d9472ca9a3517d734bd8e89644d86489920a9cd2388171aae294c429881392138e95fce89548e10b3c183f0c62dcb1a915bc42df197aeb65d1e8f6d4ed75935a397085f0c375c5ddc02500be0d08b47b7bdd68fc11fcce0c460d826d91f658cf4e9b36b9211c43389ce2b45172c709cf0a33944029b1a28449899112a5f1d6b0d1692fc358871f7ef0014e094b2acc99e103141e74c09843c7280f0c5fc211a62c09a73cc102404e31327ab78614764841982a796208b102053c37bc388303d418ccc31420641420df941c25a86f2e49106a6c7881869c98beb92470c2300cc3300c433284e99b4be23427c9910aa789061f384d6a4c38a6beb9a616724f73724f686c3688a202648cd064054e294c318115eb74696109c60d5ec29861c5b30c520df32e4809829c82448e239133747c3ca1014f192f5d1048be383d896243ccd90298f24c005c57602ca1a3c34e901358b1c953120c2b39a8286a4e325180e872518220e55031459b9c1da420397352a2783639363a559a90a4893394a34d9b9c91282373f4cda1c0090558864c40c1920c363726de68e0fcc2860d1b366cd8b06113c6b62687021939a6a81c931d1b19db199b193468d07c2cb080c686868a6d8d6d8d6d8d6d8ded05db0bb92240722a2039bde48abcb0b2a551f5cd157952c4e9bb4d0c7a6fed3381ed8ced4c131b191b191b1913a0ad4a4e851eb614a0de103922766c4f5172439872437ce486d0c80d799113122727e40e0c30a819c205869c90dc1036b921751e90e6292704859c1019b9206f7241ec6071ca010182c566c566c5662525a67240cae48294b141d95cb0b51081b304a3f6daee5ed77d548ac106834d4dee0792dc8f1efae67cc4c9f9b863bb92f331a6c3a2c592fc7d49ae2e56174d37d2c56eba9de43f7c33efe5dda970ee32ea0989ff0a3ffd6ebaa18f1d767cb1fcad7b996f32594ed1e54d2296d3bc31e8ca6c51fcb75eb59edfc9dfbed437faefa97cf394bc8ebc914659099fc799039e90f8ad6a89ac5fb6135baebf7ed94e54fa2e5baedf57e25feb6e4ae14adf5a5d9427cb4cdec506b814cd9d9327248adfe0051abad84d1b5c1624b30bf057fca75a2f7b5ed65c2feb838a2e2fbe5855444d117e83cb86e7a063412c1e1695d8b061bbd119b97141103ca23b5977c4852487eeee4292834a93264d904af1e36fe4c37be253e82d8f62b631b131b13141bdb76066d131b1b86f40008b30eec080a86973425b33ecc2542a058a5dd8b52d508460973bf0b2ea5d05c3b00bc71124c9df839d12b4add5460c0024c971fcbd875fb600ef9d28c00e3e4f63dde94f83652e52fe169171d6fcbd891d60fe96eb107a5c55952875f137f2e3533832df1c902da8640b170d7312e518656808000008008316002020100c89c3628120c82249b2d9031400128e882e563e12484271481405410c03310c04310c000014035124439472c839c4380220bf97b7b398528ad5be828cb8a7eab6a7ad5e55577a80afe150a44cce015711ce3eda5bdfccc0ef866f80ddc0475888c70dd0a087003e6451257ccf50b8f31f007b505c218825e122ffc91b11a0705d0fde121e5cc5a76fc9b5e2bece92823efe763d0a0cc32b72248d95144c1e8e28f10ba16bc251fe0a0bdaea5e8b84034a0a9ec235e18ae074905ba96dba83a2497a0631ea075c334d6f1c3e6a969bf81e348101a707d32384e9b7f1eca9fd7ef85e686845c09154fd80a0ff22fc98e062e9e765fa480bdec267d6b2bb8948e699b3b818072d1ad1328062f813769e82a917c67622fa714b6ccb2405ee45d065fa53243ad3a3875ec4f6f41ea99b46e643acdaed3cd4d273bc0d5d63b6da1359e9fa3f4047994bfcac1653cf3afec44295bdfab417c89f9040a9bd09f1ca46427720eda3fb2b6d41e445377c06576212267c00d524bc5cf87a7fffe7df717cb4e2028b23aa667c7147342de5165668773049d43d2bc8dbca6e455024a113ddf56993ad15a3fe71738b6d02f8340306b62994990c27d31068ed6b0f375d7acb0246c2b1d626b825a79b1164abe3cceb5ae98c83ef56df5c6f1d29f173c5281355d5afddc32d3f4608cf2a44befa1369b92e808f6abd707f8120c4e5508296db52998256f5fa84b6b14573750bbb8be37a39b8907ce3ad69dbeeafde01148647c98339aa179724422455d3f5b9f804bf5b3ba89b8091aa78d5abaf714a20c4f420583f042dccf804122e4b273436123dc57e747606602e5a0d16d1aa1161b6d8d2021b7d4ac7ae938985b75ba9c87fbf9f570a721a9009fc33828dacf8c1f59b24e6e9577fbeb0cbef9095214c56198458adf8d791b7deaa44b87a16565f2270e71169c1b9d40219c9252759ec638abb7ce53b28f1b5a9d297d77a1a1d2057ddcc6b345563bfd7fe170239410bf7fc753e1eeda8f4446b8a7b968f4b63fc27c325c522a26e67a3ba883bcd70a67977b972866f73299e5e3c62aebb920d8aa72b3a77d33cad455089af9e8a3ee5e6fcffc3c64553c560b8f3dffd1f554f710746eaa5e4fcd44b207f60ecf4ac6a9a0fd5810efa46d11cea1d49c6ef4604bda9eb392b5144eb113bba280a6a8c19c6d47b8b3e30a1ade7e648b489a5fdd92a0e3d5771b0a0148d7fcebb012c7330fa590c490a08316654e732b52d2a360a4d63822b082920a199fe41711544be1ccacc8d6281506631b676768a61043884abea5252dd39ee981ee4e32695d2499e150d5e5d72028e5ed9afe2e10eb842dd9e5a47133bb109aa4371c07b0e9b985704bc470d0e6a1e5ef6d01344f2b18702c6da3267083fca114fb391a9ae08dd9947c4f3387c329ed09e4d88905ee78ca338447a7d891d866d52328ca0e5abd727a7fad75e322cd0d7ea02b5fee0a96f8edba9bf7e3a66f5f5b5a3b3805d06d49ce7656075b88ac1042f4b39e603716a9b4d944dcf5ddc5bf10bb79d6e770d3008a091d93fc796e4302519ba215c912d337d45432b8deef7e1427aa5aef2657a60dd9c2a31e183ba4dc1eeb4164f5a05b483b3d2071f26dd64a564454c0eb14ba2221ed9287a4aeb13f5cc7c12c80976c22d08245f6465819fa792872c9f0b20678f7ce40c79faf31f584fd678a836de349e659fdf17af7ba8157a4ec96a7b9b8e0226d75644b7a615fe8c648297117fedbd4feeceb4dc6273591fb153b8543de2abcda53ff6dfa0f3801a0cdb35a9da980ff8763c3a86dce52d5540f60745ce430d70b38bcf99f8aa478c91a7a637546909f4c123170095ceeab5cf4e61010bbebc02720e00d962c7b3536bb545a307777cf36ee4790e8ee2cc3072713a2953daead6472dbadf4fbcf4ddc25c219604fb271dbeb2128b58f79119ceec395073ee9084d1ffc8b36bdedb85d8da3a953f8fb912e0cb1a654ac66db0e00ca00268a46c78da809ede6b1137aaa7ad42061966a4bb1132b6707651677dce676cf4edd8df57ef6fe221740a10e4547ae3184f8ecf59e41447574d7d27b6f75a0605ff29e3fa14cdf1bf646f1f1b1659ea3be1589fddfbad5e5807a828359009b7d78a926435f5b045b55e3cfb50401957842a992643c44f01cb16acbfeb298ad7ca106805214afd05c93c043e14506a3f05c6b0580650cb68eb34614d6c401fa883a3133e34a3e29ad680ace9792d3337b9f18c73c75d1b3dada6cf1a1f5fbafb4823309eaf864d744b50c12fc982eced46e4bffda4009ee7fbbcd202d760e6b49fb31313c77f28854d6e118b3b98b290b1c668b34d7e30406533dd60098e33b8512161f7fa17158396acb5ff730d08a094be485b4b18e06d9676351117e8e2aeb59b020a2b017cef3e4af466ea04c7e88e5b90de47ee3d77782a4d9afcf5323e8fd2605200632b0d09cd810319bba229cfa29cd6f1f87a47d7acebe9d656236fb5256875eebb89944b8d1329b0d23dd7d099dd91d927fad61a19e31d9d1e2727573a52b7a94a07bcea20bc18df86e7098a98ff54bdcb32e987bad4afd3c63e0214a241144e56e59be958cc39a3230d69b50bd6c6015efce6bcc4d57d17bb1e5e997db92b27a96d6cdc5547a472f1914c352c8f20dd847602cb0f03fe7d28bca99ba49b3bdcf47fce8a588c1b09f2f6fa2c3c9e4684a340bfb72deb9714242deb88651c5ff8373057f999b4c7134beb31b9e1a4a3fbbf01cb7ab692d959625a5023eb47a6a27ca18400de8079d4feceaa89123e1ec84fc852991de7fc9a3c8da8af41c491add41b7e0b73b837652850728e9d5f0bcff24a10264cfc7f58f2ac0517b17cdb30904c2094aae436f0f1ee2c878bef293fc6849c4e60ce120bbb9bd6c4aa3f1e40d41a40d6e09c022e08741f93dc0425143c27ece8d23bf5e3444581fb517462e0449abfa4737e8267783507951a374423f8b6c1cdb5fc2112e74ff4e81d92aecb1ca6441cfbd0fb14420f879ea749a81bda18d5894cfc1749f660f62cf133ff3b5c4e84849ed87062c0c571463b1a0c33f6e162c79e7c693e914045e939223551cfcc37a519b52de3324a88f9e23a8d1c015e755b782ade94cc181cfdf98cfc592cab302d17d8dffdfdb78780d8a28dc0385e78835d50b06e6e9599fba8aebba0bd64446f51db53bcb9f08bc3a54a0b2f4bc38904c33e5343e9dff6baef4f9759043d61fcf859ddee33f4a1f11a5174a66ee4db3a326239a3c0fe96d6a3d3ec90bdff080cf77842b1b56ca64af4d846008d6b2f367f33a63d34cf52e3d43cc5ae6ebdc3c72212d4e07e5d0f537ced73df2a67df6d25da8144ecf80fbba33b3817d5313b7d7bd70d6a1f8d47bc2237170acd946e82cb02779a566da3a538eb1382978e421e7537c8df0acc8c9a85befbf8a19e29e1f8bf6042abdc46529f3e76da6652470d7578d5dece5259ae7fbe3c2a6c9304d0f1da1bef77594e8a67f20a9f0ab95e2eeb2c0b0c91c78c84fafb73b470adf8e2db9cb293033c186a64b64d19ff19349e3125dfa227450dbaf15f43c1370c964e94c57a2ea9879e6b70b6a014cfafeedcbc6377daac09cbf71516ba437348ed1c670f88a7f881ab7839e51c79b0be0fa4a9f14022751620d2ca95530c73279fdb9ab7d67298535175c258d0805095147fc432f6b34d6d11c0c1a44bd37f806bfd09abb0e4fb249c676911a006293d665018050e19926f295ea8074a85ea04d3117de22dca108905ce991a80feb873304b1cfa7c44befed887cd8252c2942342639670c23322e5d6e58aa7c9fc3892aabbddef19950de4b343191175d30cf6054355abfc82624dcb198c1e894fb8fade04432edfe5f11736cbafbb433f0f15b8230837157b68519a463bf1fd62390ac7b8f4a850902f19de8be2031d474225bb12280946aa179af42485528422dea51f419104b997ee5fbdd198c1225448964283cda804b3b0d500c5e214c262446d48f8156ae5152b50e45e84a361585e5c2ee1c554d535bcd0a20014727c3025e6373a9696bf8bbbbf0bd30f130c27fc02c59c44e0d8715ea39a604eed672229894a107d1dd2dc28b19c0d23b353c27737d28456a1be7540956b9ac053e975c857bc68057f9e5139b616b78c60378f28b546427f9ed5294662c9413536d92589f6c42921aec7a6b895d4d753a591de9a22e6ff4d20e7b9b2ee9b28498bbdb0143392ffd7990ea1feb6c2affa1862e949c372c846bd3e58e82c8f05cfb415a01882c0528235241e816b41eaf1bff38e7f1239fae3999d66c67896f97972240705cf7114c1e1827f9316bc31c7ff968c8554d9bde9d86717358290f35267ff917faa92a77ea4435b6cbe3035d886263383e2549f8eaf8368ecaaf8e5f9aee83c59441608d74add80fa5acf9683366067e062f2fc77e11d836c8c1912fea991575ca49d49f6b559db17d70b27070a41203ab2b2845385d339ee639eef323b534527edaa79352945e9df95add263f1f3a949111bedd70c1f3522f4b73660c7357234015a363c758a7e1910257af0b6b524ed12e1861a191aaaedd2edf427101c015f516c32e40a258666b128aabc53a6954116d53681996dd7b17ed6574a0d9801e77b0ebd73122086ed39d6dcb8891b90d2ea22ca8fb9854498abb416e37e65286653b7d2c6d0701f1b5a2d75b2f2323525c0c8aaf4d802fd65c30b66558245bde036f37a9cf7c6e77a88bf555ed6016582d18070d0d60ffa1496110f7f574a52dee36e6205e028d282bbf9c2371df6ec0294af050eb89f50612d2f7e9e6d41e09cc058f1059eb5f653475eeb39b23f3a7b5bd87736d8e0139191c06f233fe8da0ce7783bd78d36d326e8abcd99f348c36dd1697deb17581225430486caffbfbf4d53e72360b54e0cf032e6bb9bccde9d5e0dcc4dafc95d40e03c09a131776e9c2fa0f9eac8f9c1f5ef1f637239b553a7a155afb6dde719212350de6399aed24bb8839f01fd30916cbf154b8e2e548569c02dc015e87dfc8614df835c80ac0b1155b98a64675a00f40077a00836f077ffc32b8d43c341d15a57f05527d4b081d092c8b78172ac2272064b55901785bf548a7817405a9fc6508bddcfab70203c4b349dd5eb20b6bfc74a315852c3250ede3143f0c2c92a43e1453c4d115a8671f1dc61970b3ee32e95a6c70bfb49ff732273344b97039e34f991ba170dac67db48ae9c837a328ca4760e8d09493435cdac114644c9bbbdce103ae24a86c65ca74078f810ba4642010c72f46b16e98c73a6c08c8642641957acd8c4a963a27c8224d9a207e15397c5e2f5bf953b71878bef5552c07c9f2209bcc4d3d9038bd33dc92a58a519f50712e85269881ef0aaa124be6cd6522d5a9949e39651bbe04161c518cc5cfbdfb2b3c98964f096acf3704e738dd66e40cd5388f8629631793276aac387ca4813a55cb116954fb66c41fea1d0a39d924dc94b962e5f9fa8de5f091d2e3891bff27a35592c593748d7227d228a7e2302a70050657800a227a626060c8f263d253384067b928c259c15ba384afcc8b8a235b68dcf58ccbfa39fa57c6f18f4e5d17843b27dea1e04c04718a6fc496c000f412e3a61f06f0b9eacdf32587526a34efa5650590a27f391bc38081aceff48f05175ff3cdd2cb004030f17e0a8d62e1d9b358ebc541913454c67be9ad51b8458453773c5fa8d4746642e3433e1267d6978feed16ef8faa21ac2589459bfa0ce76e5f8969b26c09505499988867d55662ef6dcdcc8a417ac0231e5adcdec482733a00ce181bea828527743dc361f0c29d17692c511d14c61c991422213ee75aa1aff5d86d885101b8360fdf95f2e5cd866a0af83ae919b10294fa8b8a4c19f8657d4c12eedf69a4e41f5905303771e04eea9a354d7d3b6865268a14eb96e37b3bf0c5cbb75c47b6640d8448efc133d1ec417293d9a957484f367c2745a72389a0acba6314a93d00f78e1b1d99e34ebc127f53cad76d609238bf5129c345c513813870f81ab6f8ce30de672db4aef6722da2231e4ac834df2948e075d288148b56d06e825920f6269c67a6ae721408144acdd934dffc023eef8bd98307b782f1e6e47d2041de629421fe9efbbcb0f07705893210c771a3b0b8b32ab8f09680a20a7e40dedc70c5187f0664613787fd68ae32a95abf2b4141090a0af702b41ea75051cb08a84a6b963cb996a30fe835b4490ee13e31978bd327e864f5ff4acd70188bb21c3e68eb6580631249726f66ff652e9588b9936f9a587933f5716dc032680d277b9d4ba0989cf70c7f5635f2cec085abb2d72f8737bcc180507c9ce9e67998802fcd668d6f0967b6d3bbb3a59edf95f5b8c01c54da17fea0276d976a33f8da0a42a027613c622d222c5e0ff0cf9a32642c32b9f7e463ef9e7685e7d22441cc13ce3e553db0181acec93bc97d6fc3d1d00aba82fdcf7319d71d7f0fba0885580adef9f03fae383a46b9e85e2f835469e420e7a2b9b3a9a1786a776025eb0a71de764a57d987e6ea41a913e006c462e273dc0d43aa4522f11f5a4344d2d1feb84bb186ccdb394f5ebbbdfa77b89ea5e4999842cdd5a5694e5ba0ffafd406d377cb2c6ac3e7340aea8a2a1afed39865d40655d30b78dcee753247c4f2c6ad007f1937e406d5fe0c8afc0e9adc755bc491d619e9cb7b27e6c1ebe0809afdfa0c0fd44455a1fef7e7db3114d0a4f10376da54befd0d1d9d1892d893d1d2b9df741b5da85a4ac99ecc2a4f71891c3f7d603c8cb7bf89002c22225d748318c29bbc0e624f6bfa59aa586a68c25f05d47576727cd04e7fd46fe5a8beaa004616498ffe9b5044bcc513543aa995ec42377c649cfd64f297e6567bdd2b4e15e9a278043c9302728efbb62377490452243b5f466bef086d0dbcb6a866307f639ab2f0e67c3811028a16afb4dedacf70011873c6878be0f42e7c6e7689053676cdce6adb12b657ce7624bca3f9446d6d811f063a020ab52c148a2432514d99402e3ca5726efe7d86e49152a9e25d4efa830634ee63c3028645ad24733b1b2d7d7455f04d25d8abf57dc65dccf7149b4a8e53a56c040808e577fcf4298c94420f7d85085c1655762703eb328e2f228c54d456062af6d7251ae17361fcefbe0432b09c2f141df714e9f692661376b68992775a051025928363370cb539eed38ea7ce60ba92e75552b281341bdc3ff0d17988387af3e5db50995dce8c1bf26e21da144c54ca361087283f58bbe55d0aa2f6518361040c16d87d55d2f570eb00a2d3df020c4c8e2a51806dea11fcaa75afe2dd56e59db0c574355ba48eea2a08e81a2bca9cbfa236e04c5361f520487ba65e9da85524a1b2a7105fd65e5190a358f22350ab7443da1109c62d51838e46bd3844704d64e4699200a3269b6f49416725fac0686c827851cdfd23ad1101e531ae08ca084aa448fc06232110c0a62e66f5de708dfe03b327254707e37ec7d5a40913e6ca8cb7483a908a80c24e5f9e28793214227d827778fc078c7627bc03eaee23a36d0c140dd407f6fcf82cec1dda9dd234eef82b001565545e12f0c84a15926037a93c151f18b548c8a02e0b3e3b5769005410e556e0b9c0ce2ce14078d15a14f21fd2fabc0bf8aa9e110b4c757860959c2e24be4c7b81aec5e92efa88959686b5c856be1623943d887c721b022540a5b24672a045ca708ead64a4d79eec869b86ac4246103c9b973391d3087847e324c91e03f43c0a96309bbb416e2823060caa4c5be4838ba47ed7112214bce4959c4e4238b8d90def7bfeb0efabef12bd401c1312484e330e0294c00deca7abc913c482e13e750dcab61a35e147b0901bb605e9ee3a9116fb5c03e8fc8d640bf765cf88a4cf65026eb8ae9a6c48c2156a1f3e6b18c0789241e103df43b33d057c27fd13981e598fd3a308923e038d7b749d26295a907f41b6303d931c0b469c9357e7f231407a4390c6424e1ab8db4058765545bde331ecdcc42b4988f40c9ce89d8cff3082add8ced46f7d4831bb80c230f54d582a1b60c6841feae4c70bc77c444493f14d15036dd58ab9e3477549573cd026ccc3dbe5d864906a5354521294ae5866813d241532f7c87a2d44c5b67fa5a6856cde9e426d1a76a204785aa28d3940ead95b1b048810f6e92ef1f84ab97c20f5eb746e3b4a08c0814e023580c17d44195764acb24cab2eac44bac3889f3102afad9c938084f31856c3aff1d085948a8b456a62c5552c446bcc4320b05dd5976f272c0161e0bedcc992d3e1f4a74a9c0c2dda9f9a2acc2d4f777dc649e7d0e4a77dbb12a320dafc91eb5af36e8ab7b9730e749c5225a4e21d31b61d0609b7d0b77e4c0c63fa60f598b68148821ea28d5a67c26806a5f34d1b9cf9f88722a552985e275c7ea72f31e37a57467684ce4f2f30e2814fda317995f3188230218df45f126f14f45d3b4215e63a230720b2ab004715b1460e09a29b95ff242277e80a625c7072f3972b5cea1cb96741a7f752fc093fcbac678c0cf42a9875c47ca874fdd51cf88f8f20d46134458f4cc2aa01df4a26bfe501d1175ca1b978268c816a1865325845e49ad94dd03790365f463755b94ec7fedc7d6d65baedb7405133cd37eae231152cca7c4b11c60860597af89b0b9d9f6882cfbf2cdd47fdaf2d528875628ab1164379eab09b22b05eb446b208d7cf8d075332874ac00af9c6e318c27b09dc5850678923198e2fb91a13f3fc2f6fc03c170c2aea27582c020edfdf98e866fa338cad087a3396171b24efdc5164478b922c8c3fc2e8c5d2096f602f9e8bade830cd3d90a3d6e9734b0ac8a091e8214a9c77b26de23dc438dc79a8c63443b338051d6272a724df2fb9cebe4b09ebe8cab0e33450aa4b06e2abc5703164aa510883c4af4c1f7e7177df5ac061a623be8be1796052c3bde740c598945072d342372131b6a61de7f1b633f493ef267d5209f97245e6b6d6af06db3bcef86fef3a6ef1f20ae271906f3a30e1da67322e62082b2660ff5c44275f73401951005f65756eb4516f11790017239af55edc1672a845d451d1e71e3041b4bd7c0558b7819bb67d8d50c4b7a96bdcd6c37a527f6ee25d5a82c0928b0d2d3c15e75bf31b2474481b5a571cdc39f14d267268fcf1d1daa824e81a96fbf12159ce0cf31e744d1da5c96bf6600a6d0e7fc8fbbe0a6b2402faebcd6b49cf4e25dcaad8af33a06b3280ad91df2842efc20faae08d6c7ac0c50fca8a6096c4c6b8fb42d7c4e0918d5b7c6abbf88aa5927a5af632a725453a05f76f8f1da18ac14bba90711660f39978e051a2258046a58ae6009b22b76d1dc27aa393fe502856c3af491a2cf4b219d6f13b36f81effeed6a4135f2501f2b1cad36a5e43492b57ed9af5aa6eed0cb4eed28fb02ea4a7bb95f5424af8a3d2a565e113b7657c5f41f7ef6d146ed934db126932f98112e08fb8208244aec780f7922b1b66e974e5c2fd7bee7f644e08622903dd2362a0a953b2e82766ad500a037316db56fc3b2a4e48c1e6a6100b65137a1e0128294a97419b9a42aacda834451a26df38b65550a95404c675960c3407dd4a130afe85d9bea3a233302572449cfe33d07a7f058ea1a9c31e7e7ca78c74a51938873966dfe538502e25ea6546e873b2ae0f7385287887ad6b64dc004c642390dac9370089568541ae93c838fd43115b51b685a26f57474c0c02196bfd6da970d5a9732e94c6bb7dd3191cc9d0325cbf4b7c4ab1eea8736aadd80bea6a77b6d0bfa858a7db024dc027727faad9fbe73191902784267a085e6ba68c68b18e3c1362de36dd49ea53300caecf286ba07e7297ba418f9ade2639398b6c05bc359eb7a7416d53288aef52218c3d9c91d0b083e736c8c123d4a97be2ae9558719d97c069638a9ebbbcb56232d0158df1c9822cfbea885cc3bdbedcb0aed5d7bd98167f15a5af28ac1b7a1726700eeac8bc83f0c192b93812e2f8bde61d083f0cdcf521875df810fbe822c2b7a40edc5953c44b102786f0702f24d31bd74f2f0eddb7ed5af26094b5be742afc2074f79e2885126abe6daeae5ffc5427939b524dc5056895b90bfa4673e538ce9b6b4d32100a1cf081a23dd4ddfb0d9ade9b118d4959e864ba177f586927b77a953485ead18f27a997ee59fd75cd8ce0304a62da9f0f7a870a2a43b8db71c327043f5f156137ed6e2f38207e2ecf9a71dc0649fbd06b250b1206b440304e49a8a93af9401690659f357f15950ef5d66199a724a15e17c0612b2490cb9c3cfffdab3d7fc26e76964db0281716ab5f007fefd054ae1cbea88880b0d90373912d49f6cbcc783fee1e17eaa7e1567fa1838a378652f49dda20c62471ba7e0f12ec626a642592d1cfb8e57f2c7c4f52d20d306388a7cfb1f9d863f6defd1814340474d5aead0c505ae96fd6be7fc8468b7faa44f29be6d94abf5f5de3feaeda2ff8f343572260b795ce4fc8f81cfc3c7d8252c72ba0f9f92fe4bbccf879b7b8283a53948101fd427d60ae8d833ff323679f8fa3fb80f42bfcb191dcd38faaa5a3545600a3abf1379afdf9780bd97c5bc1a37d98ab460b28433f7bff6c653a2fefb6a2ba2f003aff44c762075c7ed3ffe6d0264fcfdbe9e8461b7f9c4fffec432d41c7b07b2d2a40d7cfb7b9e9d8ade5dcffd29d16d711ed945e0b92e3fe9e859bb1a7fe440d6844c98e008c4db845b1dc9b30dbd4bf3d00d9a4416f537b4f3c60fae747d2432150265b6f8804dc1fbc927ecaf88964e93d7140fac353eac78e9f48f6bca70e287ff80bfd4cf113c9e49d2400f8274eb0873428d2c83053bd7d03f20bc387048c81192cc0541f2bde83648b7fbd50b34bf984cd79231d50fe7890f4d8f2493e92eb1f3ef93f89dec926b2fdf397dbd3d83bf964300fb7bac17c265428806d306341d88a11568a883a36ff86fde74dadaaf15dea42c1b8c5ffb849ab0841a4c41c8c5bfa9f3fb5aa41561da1abb96f10bcf46fae8fcf009153b1a62cd72098aa7f7a1127fcc37a2c34a81c07c156ffeaca5c31c88983d27560072fe1fed9c53921c8e5a8ce1bc3dddabf8e95413a6b13584ecfb741657482fde5f9475a7c90042064d302fb2bd91f35e120497f90a705ec2faa3f7a79818badd29164af65544f21fd69a802d243eda57565037f09906ebdfe6bc33bcb36b601e4c6530faaac51c3f6e6e3202882053f02818f29af2a02988d7d06fb7c2e418647b01bcc3da8b24605831304888625d000426d431b6df2a057571ff4046b6c9f6534c74d29198a5e8d460696fbc8c941308d50d7c32ae581a6a94e0afad50bb19eb72b9bc869f364a037a61be1d680ce78390616a05f87d9f0aa077d9e2f75b542403d02b9894884be3e52290f946875d2cf575de32d55525e0a0162136855891e0152ff5a0652bb3506bc607994dd3efab46591925651081c9b409d15958d86e730c0d41bf643b067a1e74e80563ca8a6aa3d7aa3e632e0f7d589fe905cd16b75f5f9c700116b4de15dcd7db742b6b8b25db8bb41e163ac32f490b98044ed47ed9cd5e4e085c1858dd1a3d9b6900997b340338306e44411e76b5743e8e0c3413e4eb6ab117ef00e2762cecf96b9d302838507e2900684ea638bed79f965a8c2837ea806f396b93f1385182b2f53ff09765087adc0df66d07490acb07ce8e0a3adf7e01f08b77157706b4c0d31be61e9ff5c98c27987227bd6fdcaf53580c1e4a49f7fe97af607b8811397abffd6210f63f5fb95253bc8f2f389b76fae904584b0335292e2677f80be8dbbfbe166846759519348c6c76130036fdfecf3e4ca52eda6098056a13a250298a953909f7d1db6db426aa611ff8e29e8512d93b9299839c2180ee8aaa804621d011d33bd1cafdcadc43f998f18ae189a8d2622c0d898755df575ab9dc75eb26444cd91c2454dc277c5f0a291dea96e0c36c38d939ff8a61b88d46c4fb894a0b2a4844889a847b74c17e0fff9a259be59e910034c7f3c98cc0a04004ad2c7b9ab094be6ddc8ee8b13cb6e73ff100e9998060ecb49db6bb868de9749d51d414b4729bd06e42e4cd0880738e33678961318fd5ad3af890f27d451254e0d03463345c6ce9a49a8d1c6df9009cbe3fff182987cfe92917124a6551896c48ff7521235b60715c3c0b0fe768dc6af738c9590256860dd57e5ad2a5e55018a8c42771d14e8b77b3f327888c087f30dfb11ca1f824f7eb5c25196cf6b5045d3c48dbf06d64622b038414e450e5c76166acabf415a92eb67d0568f13471352abaf4ec872d8e4201c44968b4e44613749c490ae1fd5f68820bc2e71256920f55ed2c55945c214148ebd255f7150bd7587e857bc5e7edf21ecaa2630e3e2bf5ba07ce62964f4197f410f92980b334b5bdebf6d8222ca4646fedd242e3797a50bdc2d00075967f0a020918c55c21fa4be32c5fffd382cf859cd7889bb2585b82c74309eb7fd4e289d4cf87dcb60e350539441e19bbf2fd9d5bf75136832e55be398b96c1a06bf0ff5772bcf11c55ea35586420a238bd2f3566cf80b92804273a0fd61a36110e3dd1defb85a8974cff6055bbad8eb53e1f4d97e568e9ccfe95712010b99c4334472b0c58513af30d37b34ac439b1206c56243e490602146aabdf625e8761710559634f74e65a0d15e6470444cf71565da577489b228981b67b11ae103ec4d335a1c48a0a57886549ed36c4888b2bfd2b31810de920034a4518096408f9cae32cd00806a7dfda5dc383e4571165c60a88819f8ec0ed789f10f85c629b02d81da374774f7da5bbdfab644753f2dfbf027d42a02a2d7652b40f4da571e32f6b309973c0b439559c9b52d30f14cf8e9cfca200243d83eb7d0e56b918c40fc89e04a64c7a89ca553e2a7a9edb4d0e75e50f9b0be42a8a7757f99a547d08332130c16cdfc0ae09c3616a754c04c00f6921068eab0a8ccc5aa51671262bb1e431f9549eb4884b8bdd3a00f8abb44c8c08ce6e730676220b0a3d942058053ad193d7e27a37c45226a954196da188074b4a1ed782d5103296a3fc5b828a0e882f80c7dcf32968c581e6709668bdc2085e12f9b5ca60605f5d5316ac090a7b1a8dca4a0016002458e036cee081b023eb3a7489a194273220e491f4c1f7c390889848594077e43beed1dc103258d66d81739ddaed22bd411b917a832dcf90ae80ad56c13ded20bd3043c729f0f0c8c1a76fb7de9c19edbdd2a64e9483602906e29565f75436d14d03ee388e70e46f7edc7c62f8317cfa7d7f3e8bc8a1115f80cbf43986bf32e8888bb8b88f00b08d078ef2f9ca9e60b41b76ede5bf991e05415888b664bd96844b2bb2cd625e3bc12decf62c334785c9a7a4eab5866e0f47ba0c1b4f9101e6da0d5dd1bf7bbd77e2c3354c1868e4e2c1d0495e78da7678b86b84dc9cccd2720b113a1f317126ea4f678295d0a55bb97cda0e252b48020273211de1ea0ac39112c43538ab181aa3ea2ed4a3b49021b1d9459e1b8d9e6ddd5198a4f7d4da2cfca34ddb19d70259dc79ece94ccdc6f207846abf659ee6bf5f0e52f80a504765a917a2518bab565adeee57b3f0efbdd407cf384646ad2f0b5407ce82d007c5f8d517223e9168d9748cfcc5c45a472e3f072608df0e5a2145afba1295fb5461cbd4b3c986ce9a4a928e62c97421860daace2879e62847b610537e1ab2718cb1c3dd26e38318b84a88b961a0266f5adaab629c4bb7662a2d920785626da7c47f441e1f5b0bce6708bf03591f22e8e049cda01ba65b14a5c300e429b0ebe9c81ccb2b8b36e0bbfa397fe610968e87dcc38c165ff9157d4315abdbf7cfa046cf6f1570a77010810055f7ff71943217613c779bee533aeb82f4e8ca97a413075277e51cbf77283d033ffb6ad37d97befbdb79432a5a0045a047e04293ca989666ab8297da98d589ea840891aac877b3832703e4708ea58027afbeaad531d7495377669a2df9cb05be7f30db867c63d9d572f00cf4478f1d505c03d9e3bebf479653cd7dbff069655efcc76c2b2aac4b2ea3509eb546f1af845f5ca47367cf57b7e3d9231a5ec1a0000b46081c105382b54a488ddd8d4942fd2358a21f8799dad3c138175aa5bb9b2b65ae4007171613c73f07cf4b78f1a4b79fba88f28f906a648c652d92b78b6e2e3d9c7957b2acb7a839a41060c837da5594dca707a0367a8b58e9452ea75f6f58c7baaf2976f494949495f43236a45b4a802e159af2d883d38e5ef179f714f3afce55bec19f76402275b246bc85f10f734f50c9502d410992d49cf3828a3bf2dbe834af22d680ff5ce3d47461d007ae72ec0d36d475b2895df89136bf19d0d4969bdb2c7e3e4090808326bd97ac66951facb69b4307d935ddd9a50de4bee19e765e9bd3cfd0fe5eabd3edea161caae6104cac2f47ddfb782265ba63841811022285e2570b9f2214901770415858490136411e2d5830b1348c666431626597010c31174399b4fab83d7e5fafae344e7d41cbd4dcf474adbfcae479749844429253b7416d4198725f7d4a3611886433cbbaadb369dcaaadb92b878cce0b03079f0bb443de3ba1cfd019e715d92e8b7c7afa1a7ce4323d3501c16a60a82ecc273f6a7b6f4cc180ee9f9583d1b51c9382b597f79c977f4df1a818ffacface40dae67c6a099b44f9a956f7246bf3d79cac470cff3ce181c6095348fb24fd00ef0add75a6bbd5068f50bfe1fa088d33c7cab47b73eaab34abb3c327b5e17cf5b86475fbd4ed5190d3c2f8d4726ebaceb3838a5508dfaad4637da7bc8e9d01b3d0fa43eab11ef54a7457569b4e6fd9e3a061618ea869e368f1eaac5d0f151ef211ddf7be78d0ee89983d33cf51ddfd3f30a9d0081926b3d54abfec4b7b399a7b4a703587260197ff55e629fef3b80058965fc97a57c756b5ae084929f78fecb4d5fc3103dc194a685160c59aad5273c2ce1f474821ca63ca971d0448989255a56b274a8091d418206c9912d2dac31b5ea5e674ce504224d66c4c0e0834a4d288612b6080902ea892723b50ca094e901882d3fcc2c51ab4eab33e692c5830d4262d80ae2895af51875c65d782e9075e779a0f5beefb39e673d9bb7fe99dde85dc05e75664edd16a4bc7c8be1dd2c18761df59af240f29c04b1067aa0b579eb75fdb6236d37d7b41ee881fe85f475853c78f1dec99df929b5bda1c429652ebeaa307f65b4851b8e8b126e8b14db9128705cb87c3f64aa54e1aa600972755573ae705594e0a838a91557a54afd0983ab727bfb8caba204a6bb9c94159524548ca814414d495151512951515959595979f1828689b7d63625d16434e586334d597e9468624153932f59a6a6a0a0a06e537cca1422b8a1ef7c44e286379fe6e8ac8fa84ee7e055a975c4bd4467de777a67975595fcadb9207f716aaea35059d74b9d375579fba809cf4440c2b32eeab1de402ce92835b08f1022d4593f15d5592f1df5060d850e4df5d654674df58d9e5d74e39dce63d05be7fad6371acdf600f6062d764f07a067fdea59774f23a009d02afac78892fa906786a948ee8833475c1d1125e5cc4f53d34fd34f53f88552823005f9c2e50b170e6ebd9fd807aab7b08fe7d69b0bfb2cd9dcb88bc7f3f6d1fb88b978de4e91f4d6598583e78adbb7d3db216b5414336f4c1bb38faace0e356669c24cb0ea583bc3a93a3359d5e1998d51757a07de69e71ad7aa0f199a1802a446f4c36b9d842ea09de8074ead97b006ed4426749a1a5277b612de69ff51d61a05ac41bbf5b2ce7cf451ad331f9dd40a68b72eab331feda381d0eacc4717c5a8331f6de46ebd915883765148a4e00963975e03f35725eb8c2876e3e5d4a73ef47ed2c5cff929695a4b86e44f8c6f7621921d849d0dedf168486f904e9d457785e079c19f316118de506adedc8c2e92f4917435f9010973f1459224097b9db7af908d873eda98d443b3bf236df84792f4c80fc01814ac790183c16035e7a5249021d9c1e84dca78f1cc3b227b59f2cc2f44faa47f61fa0ee6a38d4892e78dce5f3e9a2c60de0ff3d26401f37e757e3b87752449929df93a43cf61e7ad2fba3702d2c5faa233ee4bd4931e3391a88fa06b744a92e70d2bbacb6c6f52022e9af7130242ca26fea511fa0defdace0bbd2ebc34680607bad0a3eeb577d46b0d115c124bb6154c90fa0dcfd93b3b0bfe64fd88d9d1e9e87e98d8d1d5da9e594ddce879d7b1677a248fa1afe6ed7254df43cf2769a3bca57b8b32977beab19ccf2f7b8d511911d275153d9336d084b7368ad38a1fa28536cd5de96e5ab97337a76aabcd31c921e568a8d586bc03d620438e85ceebbc5c0a7fed5759fdede79c8fbff62bb95595a59a554bb52a08276255d2e8aa55476ad50b2ff275a6ca85aa202f571553c2caaab2c6e9a9d729ae38dcedc6556dea8dabd6e0c35f8b1b7ad7330e978305431ceee8c633432656530433ae88ca09f88ca3a242c55448502d717777b751978fd11cd4c7ea4932735345515d61d9767b360876d739d39c10ebb987c2161734e00f991709b8e0ae5c9ec7e38ab5a0ea31e584db6cc049d5d0234e2a069c940a382920b6f3a2f5941f27457449f8ea7cf217da23f6474d4565bdcf8f3e5ad728443a69413f3d272f0848f8d1abbbce4b8e5f1ad27cf1469f3bfa4177f9d8b9407074eba43749019f1f4fe61df2bca257dbb9cbbc20d865681ca9ab41176580cc3bcd22ec5244ba68f379d1c1d12f280374d1e5e3792939de11f4d1fc9cd9e70690cf8be7077c5e74f10c125d07f8cc3b66e59dd0c12a04760746ea96934a7a9682c24939f111f32c742f87754e669d1cd2033e47e01dea361c28110a84ba00032da22df069030888ca70d813079551b7914279d98ada00c261d9bad0b4db909c07c696b2ba3de3be68fda52b3cf59c679c1247fe5682ade7db372d62d85386cd60ac439d19caf749011b0e253b3df53ec33efed43bab7614dd437b3c755a02fb6cf5d1f3a3a911020da392f658afb55e8ef296164531724e77de0786d47a50f785b4a965597b0882aeaff4622c6b1c96b5a594d2b305cb3a830aabb482a1d741d0e741d683400fea3c28f420cf83da45f71a0fa4660f843e87e879a1abeb40161840b22c6c23e801550294ffcea0a01d38dfbe03fc6ed781f37d06a98d5118c182a28bc03e2b5cfc297b52b8e811a03d2a5cc471c11b9c0b785ea4bde838eaac936c9c76693c2ccecb23c3e0bcb2bf9cd5499cd5493865ecbce0977f03fe8ddf9cf7c66f27d9e01dea2a4c10a88c7a0af32766bafcc694bd8dd9df4ce82d7f24477ff98d09d6788d79c1cb4e9427e902b155083544c8c00f089dc5a2c328dddddd5e777777777b5d99e8c06163049a0e1c7f79de065037b24983ca3a7fbac221d0d0f1edf8be87baae3e8c0628d9f608f3809f7346ef6a58747ef32abe3ae975d7dd19d46f3d3c754a2224caed84b5d6da189559b715515a77f5586a06f577de7555e681a31965f4b367a95900cff32f0a0b23013cb819408ee87fc5af22ebb8105d505975185456dde6a4bc2ec4afee8207068d0301dc968c9c03e5eff875e49d0a029555af4165d5695059755b9312041a3542c8c05952efa930a38c7eb3ac9ec276378ef3589619944448dd0fafb9e8026c514aea5502008016b6eb70705894d4b9ea5c16de09967f415b0f256ec4a0643b5e60fb915067a7274ed9ad33aef03ccf6354e67949659e5f1ccf6d4ba5e7799ee77ddfa9a2ecdceb34b5d65a6d4594b1cea427128f6f2a2cd914be05da6a655ee2e4546741795d6375e17c6daf8e93a39f7a50d71389e73556562ba38cfe9b9ad1a6640bd2af6cda23bcea554752cd0ecf9a920809f4d173e21eeb6049560f4db07ad32f6359be46584984d43fbc06d205d09e116b083f5bdc5512658a55f4ca2141d00563c4c1116b9c614984d430c68e9440f5cffbc0a6308ccc60cd8d22cc95efb71151def2db657586f45d6b2f99be3d96a3f38f59364304dff967deeeed489bbdcede929af485bceea8ae73a1ef617d28298fb547f5c819959481d5b49d7aadb5db01653b770f63c7e0ba1583b27adf684a63fd3111bc552afbf9af6b564e806ff72099ef1b1a9a416788c0419306bd68fa7d86a1e73ac0a7a4cdfe0c1e2269ab12f846d2d5fc751d33b65f1d3de3c244fd853d3b8c675c98ab67d2e681658cf16373f4ba929dbdd1d69208c99eb4eb98b1869e7157b747c033eecae999f480a9ac8b5159e7b622caebfaae27e6e4db0c6a7b22f16e2a2c59c65d253d93d43bbb2442aad68990da4b18b9acdece381b78eb558890751a0334b83ae63377f7796dd76f72860c4acab04e9d4a80ce1002e23214be59b76ecb33cac88dc210485cfd57fad775dde9026d41944d8194b4d411ebbada9d312aab36214c0be47a6a13a202b96896535782b50af12085a9e885165010e3a466bb3821840c4a3a3061a24ec210e179697122019f8cd696c483c5856962cf16f516c6486785a1e82295430a8aa4e047969a7d1dbd0553e62d18330368e22105425850b2010956cdd63060bc40017160a2e0ac9cbada5e62a2ca0956a4b298b6bc8c30d691322b68490169c1885ab525e14481d4cb970c38305d701c07e6cadf9c2cdb92d70c42392831d2c3963146372f422bdc10660891264c276479c9a08116a418096206ad333ed42c195262872c3cd0f0c2ab8812444a10f992d56cddaab37a8b0e5120b4881a3514efd82dbc637da9ead81edf673ff18e756b7beb2d1d7a6b2d35eaa0ac4e1b08ac74a21f65adc67f80b557ec9373c54d1dd52508c0518f0982c3900d3883c1112c70145752e0c44e4d1b2c71c50464a254f112978f822d048fd853984bc7e082b1b0b0297b05dd122f1cc5b902a4692f5a5e6056aa7d6c89d22b3c8063c0710bc2aa1598a02409192e4376e8e2840c367c06ca0c4118515aaa0ac2041407602bae1a24b0b4123009e827939f58c1501d040afd85cb50f1124408610a61a8a08b8a2e72a4091f1c27588b997a881670121dc50f16c20533501c004589714b03d1414aa967013d741505e46833e15706e81f980a141bb123c38bae474721d9b0059a568043992d648e94706962051b07204979a188295b4dca70560a4ec36888a83055113034c30d34e468563fc14f4595cda8400b4a851f966831b26589f102665ce891fbd1e4898f3239f40e58461f19fec26086b49946c344f0546f35103ca6aa990c40d6e5d6d4270401401152bc246e90b095d7294ce12cdc44bf52f8e10725a327497080a2c1e6c79296ac225b5b60b04a6a271aa98518a6bac0073e63042d030dfa051ebe262152aa5c95908490d7139932e207514460a9c0caedc95614b47b69f9aed3c2faaeeb625488b44a682d3c040e4e6a48c25b5dc47983e1092b41001396a0106385017d84001a87c55a3898bd9a20c15e3a8c916e81a5a4e18fab6439010aecd7799785cc10df0bcb776498d4746448a043af6801f15d1a12860801c518275351475e569a188291000567b48ca07ea862c406108a7420cce035ebd6b4d543636af8db403a48173511fabcf4c2f3e5a7afb0dae5285aac45ad350bcdd73a0685aff503134aaad34359574f3ee3b2a4fe82eebd90e5f441095d5bf13ba62b494f735f9d46b1e1db334c9274f4973af9aa043e3d02c1bac25f4ae4d22267be6fca8a0913fe6f6f79de774741f3b7996e5f61d2756dd447597f5bc9d72eb256eb4c98bf4df4f57690af0e542b3bf153d5df1f17b50be3abb3d45f0ebee6d493d68fc36a2a4f1a14e585e142c6019b20340256448c133147fc55052766c97606eb87bf79c661e9e08d40bac603897a58ab508d4f1e9fb35f1d0ebe5086ceb686ceb71fc15781cfd94de834359052b306ad7d0e9a236051e373d03fe71afbc7240df6189466b199e9ba520b94e335a00c1dfc11d6f301de7ac6c0731088b7def43cb791291bf4cfbcbcf5a0cd89b241ef3cedc9f6d4f17d3d413a44875017819dd26cd02ead7947f7a179fd6d68e67880d867ecd95b54a695c4fa0d4a7aaa8ee3a53d683d477db18aa2750ae4c8e949347b2af47a88d6190ddaa5dd683227ca53b626ca5bfe8eef6f58076d64ca5bfee7b1210c6edf6c5aa5e8b76fd62de82d688f8eefbbd35a5b4f7afba8d8b6ca76ce7925a07204d65777fdf8eab63265fb2de9f77d94524ae9c79fe7757bdef77d1fa594520a4429a594d6a0b2ef0c81ca6850d9777a5957af1bf434cb63c1a9b56aadb5daafcf5059f7968c0811aa431d880c22ca11a80e75ea4972392244becf039d728ed20bc45befaa76040f412dccd9dcd318ee11609fce3f0b4e81e615fdfbc2cf4733876802d13e9cface8ecaf14ebbed89f2964fa75ec7f79d55d6b3afaca8ac3fadc6116b22789244e7151fa0fd8d1b8f39bb0dda73e3296c4a1ebcd35b38ea0c47d5e9f107041a3542c880083cbd4285198114e6082e6253293c665e1b17cd4bbbc9517fbcf114668e1eddc604a2fd0844657d73da482a4f19ccfc005bfd0dd0c31a5474588fc8a8f4ec3527410b15aa9901800080001315000020100c8684229148200db2acd81e1400087a9a3c52463291058391280a622086411880611804001084611804612808a198c83e00a5841ceb94881795f8a688a427b0a62554f63ea0cf4389a1e6d6b0aff0e3edff2f49a4689154224815594a06ee6cef7350a288613bfa8dfb557ebe5f9d52c28e7dd417fd719614905f959726c4b7ac7fc8ef43a9e0c4c82c355ccd2abf5f9fc4bfeadfb676fb97c9f86f952817455d32c06b05b094c06b3d5122402b504b0af0ac7ffb5d940a6a17192503572aab74f087b25029e12c45ec635222b85ba04a0200ba60cd80e94d74bfd0dbc20fb1bfbb8fedbf29b5a6c8649253045d4d4b16b4da9dbb2f440ff0e9ba7fcca5a57654772939786f8bfe854b058706a2d20318cdae4fd3b7566a784485e90ae6c5c86b46fb8f7da50fbf2770c7fe4d2a8e0ef24a088ddbdcbf54c9800cf54869a147315b2210502c971e96b68bdf7e5f5b49a3a00cd067d777f6bb2a19d8b5ac7e7f4a189b5d85facd7e857eaebedbefdfd7a19490c810fe69bfef2508b454a91201502da484f0648c7e4a1f7b25051cabe327f6e359aa504e155e22c0ab654b1c0d64f27d497d8cbebedf5bdfd13ff07f593a50b798fda096228067ac1fa06f6309a19931fd977def4b0e3ad67d1f84d2019331fa772d691cdf983e864a1029ae15ffd2d7f17ffbafffa88fa04ff5235b32006d8abebc1243de54745f0da50239637c0921ae62fa122c192036a24a0f5aac424b04dcb56ce9204026f53bfde79a5a69029a8cb77fa2732aed0e109205a1886af6b7cd31aed331bff0c1ef9f6086732d495f929283b2547adfd3afbf7440cc48fe4d4b09ccaa474b04ce02b6d40182acec47ba7460d624fd7d4a06b7635dbf4f502abdb1d1076a5a62adbdbad4142a7926f841c4f75a3783fdc792b29afa3ffb0f8e1bd0c8c66968950f34f6a4d434fd81fa227fd38fed2b5af2301dabe987f50bfc0afb48fd19fdfdfd57fdcf3eb1bec8d20174d6a08f4b29017e055b22185420951c9c66b7ffb652c1b6015752e0b01af81ffab59610728cd55281782ca03f57c98081b5faa92b293463bc7d0367203d896b069a85e81f5a3a406355d6f725ae1a8bb5ca6f71a98db362e99503724c2e45a5def5b7fe3025842396c152c18522b264607ae5525ac8b3f0960e285285ff52258568ebb2dfaf4490d73200561a1c4460da6afc17942654bcaeda036646b356b9f916d8309a45cb2c51dacd4d824c6abfe5c01058f25902d6b5bac4d11e06faddfc86df625fe7beebffb754406ce712bab5fdbafa5a7d71dfe725862896eaa7f839fb1cfdff2507899aec8ff67f562ad861d32584bc2cd8c7a564e0a1b2aba4c0bd7a5562307c81fb1ff53d2b4120a5aafdf4fa045fa7c3c109419ab63f485facdff453be94107555e977fce2941210ac10b2407abc2b01571d08f08392533f1abce3bb54fc8b3f79a502af3153ca07688449841d2bd2de5c65491f8173e2ed21857318ea2bd43d1d5a8a776b5923737a9cf34e2625480124a99973f53d581a9e3c2552fc0d9160fc958198974a0720ba084c11358837030168b88045bc05457194fcd8644b03315f26ee2bbbf39d36e409e6651ad5ae50c934d8b68d05f590ee29db65c9b628627b8ac3eb990327e058e7d633f32c16fa6ff8912cf125e5d96264045bd58792fe8a4c10167075b94f438f8614a45a47c1656fa04f894b444641210a32a5cc0acb64fd5bf1b1910db3d696a2652c3a35b3c952dd5566207a5c614008eae2dd1786a103d7c4692a44e700f5637187ead9452876064786a8be8469724d791b8cc685882e5bf405032d2cfc03382c770aeda487aecd05583b1bebc530e0bdb597b00aee341c1b07cd638e52df0f88c828df7960cc5f5d2931f5cc062b3d1147902386e868513aae93f90d33ce47c2d34e062a973c134966a9eb5cca9fa214e7b4dbb6c3fd8cf94423acae3e7a8b7d90b5fc3e0b2f325c311ac93d08ad6545aa5b1b3d8b1c7ff5758ba707d572d5696d2f796a70f97ca04390b1b7e446ec9ddaa0022c40543c7c353ef1ba4c6ff212d1b80ace4478fa06d251d52ae453576bf2103772c5c97ab6bd7784af64859dd4059b4af4a5508920bcd010528a2a1aa52b415d9b548c3a29d980eb0636034f947461209c42a46f0ee21f327c34fda834c6d40a55915a9c36bab6d2113ebab0b12d384b2a0c685421fc7806796bb438d2b3c9638e6317a8dee74ece69872144228c649ce278a8e4120d826dc3eae959533d979346be5e705379e2d32c048968af387cf79f27185e445e2791ad0fe6f27181f74d563b2acdbbfc9ceba8441ac208484136952851c58b2ff5059629b64934cc39739f30cadbec4617063357c48f2195298ae88cdc535cd7248dd4aa834b806519039aa01568392f18d2541a8f00cb6421da7ad8e7a70855bea2de54b58fddcc54e6d86bf19e642cd3603a261e0a20517d2e212946ee8c6744c2c498a6510bb7d82a3b7b487f75f1b2d453434f87eb8692fd6cd85dd1c843ee62baa5fe6480d2831e11091595b5239a1f59d5e1c226156d2bf85672ad424f29ed4d40413354b6ea7ae345a15c7ef8d300057a88bc6103da03102ef2d65137d9d8e3c01280c80f9897aecf748914b5a7a5d8c6714068d4c137da2fae5a8141f73d021dbf8bb49f865026c69ee162397e078f91c66fe6e9dda46215aec2856010ce49282c28a0fda0e222178256e022f066a9970006d0cd8ed88501d642e1c10c995cd4e01b2f282839b3c2ff681e54d0e82def3ed25883edce1c6c35e1905d1c6934890222eb0ae3b26e0ddfd96b19a5e2a2ed31687354821e409f9824bebc3aaca7db06ba38c1f5f316b737a7ae32d8d448d3016a59b2e1330767294382b287e157c235ea40707211c1c1a0032169a112dba8e29d93db05133d8a60302aec90c6572416d3a1bda1274d21806d9635d62e8303e7cc2c2b321ae83436e7f1ab9035de1a2e7a56b7fbffaf8cdde4d9a936fbf3b8c268ba3e070a6da09d0deef087ca0a8db193502a6b001452b6373d528c8375a6e0a8ad302ce77dd462789f19c5d86840011127577689ab769b221fb035a6e2f57aa3dec01c082add17ba688885b7c369349d4ecad17eb3bf7867f1e9899997ee6b8dbc7206d166d1f39ed6edc92984057a801b009d89df6377272ffeb8aee3fab71fc9dee69a275779fbe0b1a1d1466c759069aeea34e1db7f36830b2589da7fbb01f9f05e3cbba91c19f21253c3612e0879780f39e0c3d5f88e8247f7aebb1c32bf407ca6e2261a6acb52c019e3faff46c1817ab023498d127f4f0704ac1e2efb4a2dd1aaa0f9322718112d368fc18e6d560102d4ae2d785f535ba31579f70132f0b6c180aa5f6e7f1d0f615ad60d657b71467bd130fd1891609f2f94110b6324950ecc9fa2ed28c5964708b0b174b356ec13044c75ac1dc7fe9bd198c76da77973ce9c32e8162dc60587a02f9e5f81b8e0edd8d43e6cab64eac7837838be8ae4c25cc5fcb9c5e29e6e6d8ac1e30d9d0d27eeaca6aeddd2a8b924671b22074c62d0414ae4b9a51ed70297f4bb7c7935ab4cb8c367678e6a685c758f8e1a15f8109397e00b958505846944478c94fcdc1d48a90a58a7301e14afd988102b7263ca1515aebeb5ba3e276357282881164d4946df2386586a49d466a6682b013ea8f00563e0a0b904100a0077bf9906cac5886c375979061e8b9564f49ad2c93628b87b277c3c97a08d947747456a94ad2d5e99b94a5f2edd6180f5102b3ab1f4469240a3062e7c631a06bba292c9f8a9474605542beb45d3117a9133f1e3329657344ddb72998658722d349997270be464694d4ec8e4404bb6d6e4ce3e9ebcc5b8fd8c4884e84ad38496f40d13c0f4297332235326cad614cda96ce5b04c18f05c83446f366a713573dd70bbb2c10382fc59ac6c2407f72f5993d214a8815ff34a181edf30cebcec34e8bc729ca2f06c12387189e2f8ada3272eeac3f81186c18a9ea0c13a846984685034498e4279dc0fdc4f190b3b6b1d0a1ec39e266f1756d0b7f9295f374b5232b7b7b14f5ad880ca6f97f139a60e1dcd561aa19bfc2b17fe4644c4661984ec1ad1fc7f31980ea2ec86b856c0dff7b14af3f410559c09682984c6dea21d9c3d6d11e301c7a167a72f98fe17b48be1562d8d6c5a72c51622d1c5b483010081b927a36c9e35e98c7bed9db311c9d079a0cc2636fce79c5629cfb97eb99dfb50c855eaaa3cde41c7be468474579ce55b7cc59e4f0ba164c6b0e7d0a0c4213c16f4f61ab7624f06d3c70b988cbd1a341a0d9931cda1144960cafec065d8f19ab65beef1e889d799d4a6eb8bd7679e46a72bc9f6c74798ced127a8a2a2883fbb079686d93338e7e3da7b03d376e0abeee549ac719265dfa4c7f16d0b8d39d7a7753f0cb16f27d913ae08afd005bc40b31c385d7440a982b5293e05705117c6d285fdb705398fc45ad6f060a706690eaefcf9fd66208ae45fd9486cab4edf33cb6189fb9aad58385236f5cfa7e67dacc546261b453ed64fa66f1c989fd09b0aae3bdbd0bf24ab3a56858ab5bcb6752b9cd10d28258a458ea3bc5769faaaa84008a0cc14e610b3d0d4cd87c7dc058db3783311b928369baab5e1cd72f02044f456fcbb6283e9bc07968758d5a99fe6ab47af7d58ad27276c77f77b88b5b3a0340dcf83a6e8e4aedc88a8b01d1e31680771ffbbc16c906676a9bf842baaeb9f962b3eed5462f54d18e36b8865f956fc65299a66612718a1c5792691b5904517345e638e488b80104065cdf7409d3514355f513b1d0aad398905ec849c8c07805a5daaba64b71c0a820e0d503ca787761a0adbea84a2a82100b70260f8d8e1e0d7618359fa5f2eea219a0a354935d540e68c537e1d0d07014fc0957dd98ddddd96e7858606004c51867efdbfcdbfcfd2582ef88caf83985fe9cd3535a5953d8ef431fd8ebb98b21fd2a3a8f984c9502dabe99fcf4d131ac94e5d37f73653a6f3237a4b52456f95342275a3f75d610bbd3f13163771e5a4921bf3c4119a1e59bf96b17d75163be8d1290212aaca166b5c80729a225b3817beceaa50934c9704c7463c97ec7518159b648f2eae77aac10c0ba87938e0ce0e1e2d0b70fa7693a5135e6b6be588c5988ecc705180ffe399e95134980ce5f6b66bdc1f1caf0529b2653dd711a2942c05c5a8a0c1460f47f6b9167acdc971a81c90942fb55c445e5b978dbe050a52611efe44e31d20326d2eb8e9223d9134fe068e99fce43292c4cf500be017e97ef79aa7602d7218ca99b3005983d595888cf6d87476fcc25bb3f05ca731102f405d61a6319a6ad7f8c0dcfb53098671d80dc88f03b53ac72aecd647f4de4c94f50f3954d5ad3eca1b095dbba647e603ce188703ce161875bd66eb465e48b95442d7c94dfe88aa1d9dcabec6db8d6d3e96a4b674e56d16337020ad204b87b21b51c142b405aa91583d80b585fc4d63afc32f9bdeab7d39112cdefa2108aebdc37eef5df0129aafa7b4435ef06433ff7491995d807c6a224f65a755cde12956d458c91261f2d2d6dceaeb9abb1d2c6b06b2dabd89f3d35f7988546f5fcd852e609b8adb7bb068083928467cb671742a5fa09d6b02a8034acc57bedd43bb69f1e8d835e205bee0f4968a24f48f3f16d89bce3fb19083083051127d30946fbf2bdfb2376193dbf9cd3a0e0d23f3ff497605b7305b4a04a5045f4bf26d8f7a5c8560a5c19b53925339a6ca2af7fcab9638b11ed365b79789e72e49d8d80b354d256118a8943313d4e84395d31c940dec557d93954283e8a9ce5d152a1bccf65b17402aecadab8551fb721fb2a6194c29165e410311a96113eb28d6ddafdaab42754b680271086163ae43c51b0f5b42a29d81233d8e39b33726f37e14f254d6ac3305db864e62bc056fa8cc3c9d59ad6fab8a01bf24944f8bf66884aae01476afe77eb0cbf0ad206c9d93413df07057cdc242f746e29942f6134f7fc9e8c0941710ae23cca5b9cc2de6255fc49e162e615f33f6027c68882a54d5a2f21b1651339291f8453fbc03aad5728bd94dbb2c5d8d2a7ea81434abf549652f07d8ed7fa6eb60421f1724e8190cf990379778d1b3bd672ddad5fe696ea48984c58cb2006f2a69411e2bd197c667a675e98ab3b8b7727f3f9569d94ce0887e7a925c116fd99043a2cee5de2822abdb8bb4eb37e55e479790a80c6844b5b95f0fc26e78e1e9342199ee693c3dd098a348965c1055417afecb6c68610d3bad07f54ee874cd68529e7f706bd5c19ee7bf9a686c6a901c951b08bc600cc7a665adc581e32bcadf606ea5484700a894836f2349f2831f8d5f7a65f176716f1268c2ce92546f93c400746c70bfa67539abc48c00d7f9d40878ac7035d2e6942396a8b698bbd1888b91b40a8cf119cb0777204d375cb5348a62394a6e2ae6a808c8ab9a4e2ff279e137d56741568e58cdda4308421f121f6a60ee7cc0ab484ad08b523c86cc9913b38a6acc499f4663868046e06964c691116ca70866d53f82f65a51f37dfa5bf1688afa0cac2bc42ef88dd98fe22f2645bb70e5ff6b4895f949db2d8d9dc62a017f81a2019f94bd99a573138705286d0c63b0f819905e0df17e6d66ede81042634f3cf2ca6d656f1ed9bafec4807d7744e410c2be62e49c85cc9179559d6e6eb07230d7cd5d287425e33a6bf162d69938b1f10941d0c6d95af29bdc91c61a3f8b6b4022bc82521c0c3518f3c54ff2934723a9e010c3526e4eb91b5208e07b07e35af1c36688f4571d62780d659f36b27b4c102225609de1b5c0ca642d5c6e67a65759cd03594f8eeee4d98e5a9dfd8fde0237ebb2408555fd85b5c8565b91e9f88535f274b1b30427d8f79e2e6310217dd0471f708b5ef273581e8300ef7815b6b5aee74c13c9a70c8d23913f8cb3c1b2c7ef06af6498e362998fd30551ba86c84a6cce3d8f7f7c4ba1007e8a183f235009220e4930b1c25b81827c90bd6287150fbaa228a9c33a490858cb72627bd982400e46fc2c0714f991e95be001ab47eb077a7d2f93a960cbc4ce81083dda2a7776dfab4c0b24e1137cdb56d31dfba91bd3c654b10208dc4ff617e38ed08949873d43c2d29386f14d3dd76100a55c67b7c5be103a5462794c178abf5f2d2f70c83963cfa5cb6b18256b6eb524c6c8de947d30ddda30fbef0e75b8dac27583759c340810b97510d2ee58ccb0891ff11c9995b95adb5b0419e150ed4b2e99dcd5c3d6519f6a15bcc7a8ae97f81c494c522998b2359f1b6c0595246deddb98702bd6b622673c892f626a90fa1c3cad852606a48e891db13c819262bb06253253b999de5dd8254c815376c879e97ec864f6924752f0a0f5d65ae787bd054654b1d2375348c2058b4a445ae7e429c502dd47a2551c761379f8c4400f1354fd76c6bf293717985d2941f1a39e27f3e6a75f80d9f94ba713ed39fa4e7e6e5eb3247eff8f85161aeda28eb21dcb97c496f04007c7efaf80746ed41a2186b456b25c04c301b25daae18f1ef4227a38da93ccedc46706e9683460abcbbde4de0b674289ecc636bf81aa0784a8572b93242eee5a3e637dad2f7ec34e5d57d740995c29672d40d7e62b328f15aa578136b03ade3b3449ba109b362e564b859646fd3638475c525f0c323b2e5adf1c19d26d9acbfad30facbe66752b9fb16317f3b2c343eb0bfcd85352072ae313913dee1dea70903647b661d1d63a447bf7ae0455ef331f79eee6dc2da9e09e6f172f79e64f6ac732b2ba8f2afdfaaabfffd01893ec8544b920b839625546668d3cbf831c77022e6eb7200aa3434a3744d8853c2f21dc1aa49e05117bfd78ea3d9d0eaf2e431d95f6142c8c0173c4a9787d3308c979806791214baea4e4d068322e827f58b559e2c88d8fdb70b7c8f6d5699632e9746960547b9191c83ef0c10f98701fd9ac2309f116319e82b9899e7877f42cdf75eb4ff84574aa99639a8e2c294da85fe55ad4d4148c77e0e1c6ec33df672aeeb10e3bd49ed4abd83495e2313d0ef4a0de4ecfe089323aa314ec2ba696d2c6922a3724445f0b18126ae82f2680141deae3b1a4ee237104d9a1fa1a79ac87a93822a36c7f16ad48f56f71201a668ca9276be0e79b677dd7d566344949db250e3024099a4b2b19d3948105993c07a91d82dd654cf58a4cc13206f030a661a71b93c0222d4731c1f8d44a1a26d835994d0e574284bcf30f4a1023de1a776ee01fa448a213a1aa11eac2a6618940a29042bcb0e993f2f931d187a1eea6b9cf531434cbdba64b6a19065440b294a7e2e3a42c1bd74efa8ddae14e6688152caa4d85829c8f4fe3679c1c923bb0f2dd680bdce095d3adc555b042713289209217c0dce9f8777749ffbb55986fa88716beb4dbadc3a068ef859f449d62c498d83113e37735ca7aa7293b47c7f0b0eac55d4120bb9834329d0295fdd7a29951584438776f156b5cc12512028050826a1edc8b6622d626367da5d6098b6df174916a7c470cdd57f6bfa58afc4e6d6c1d5270adb0a93e9029fcd913f079af45709c344402fd791f895e63f94b508ae8674b2b6ca5ff85b2ef5274a9a20550324519bbf4aac3da41afdf0c5ab5ffc19df0716665697bc628f010a17c1a8655147a39ac108ff52a55337a4d2010a74e12fda842dcc892502970d2ff4b2b53e388ccd020cb3fa65881c270045bb11a1e8494ad26a08b990a4000fa52b37e2b72110a84c1dc174847f3e23105ca84f046d240642c95e1db8f3cc626f221a8b4d256593bfc4bebbe4bc2f2b049fbf9a38d362003fa0b02d44fdab155e1812cbc86aad50cffea9dccc645b6a7fae82b3953e434424bae66529d775e97853c1620f58a45d58c6659f6db620cff4ef3b50497abe2cca5b786798d73d7a2086b577f4064b4d7850a0ad5bd8586101f0422a91c3809a99c07b26379084bc279853753510ecb46fd1846f1d14c3a9f3752118a9be305ae19bcde4934c82028e29af1bf56228183e1283e23c862c8bc24f0f9e7f611e320c59420c7da8f57ede9b84409f639eaa6111a368e582a24382320775090b6d8b9ae0bf3b1102061dcbf7eb7d810ce166cb14c74a555732c3e321b913bdeb47f9eed803367804b4397be4d9a31d33caed36415be6b0468be32e4504ef4c45d0b758ac96ca91f6ae713101068ea4c78b66c7a05939345e9a3f9b44cf7f1986f64cb3789879e80c856376098b57cd566ba80fc2c179823c6480a8d5fb5169821da5e986cbf77a212eb8e442d329d20b640db97f6a92eedd358674749e53fb70e3b66d35e1a81fbb41e69930a62cece880eca8833919e26e2116dd1ee6f88f037021bba8387aa394962fd59ac352fadab536c0b9dca50a1ae4ce5ee0c7e42e8e243953b2ea99271705ad2f789866e4948ca6384ab8d4dcb4a98d29197b4fe89fddf5ed25efac6b1465dd56cd60201026d6eb95f9e8a348397b4f76aa5e7c3d98619be402fe249c423984fc7868f9a9d6ff3a95502003ea0aff163f29156ac7d4ee3a536b75c41844019aa3e52eca769fd6247f96cbd3f595bd46abfe219ebaf4d48d4043ddc0e15737da1b3879f48b0f62020f13f942e8c1858ae83b6f79ed37b41bb80090f3498a39cbc02944a89a5e49d4dfb5e02b96bfae946fcd63f95e06ab1073e4b35982a535df06626e2db5fbd86a981a59145a01c4175f92a97607ff008dfa221e28adfc559e10bc03a00de38a0645fe46ea32212e217b64c8d0bc1c28dff3fb5fa30abcfdc4122418823b1881f90023405e3d984649031507211f3985fea4a9d3d07db7b3e7016878d0ac0394062b72e24a773aa8137e170e94e27c9d4ee2c3f66d9b5cc817c92072f80030caf8ab5f3e305f34c9714728fcb3efbbc476ea698119a9176d85f5e2570f93c78153848768582d8dfd54e0d93f004b7f4e3b4090644d0fa235c6d02c0fafb4e70221c26ce6097a82b268e47a4443dae90efc9d3b1270158498e271874773cc1ea882d1f67b2a7fa013c79706cd667c220222483b1d692f502aeb90adcf47ea87cd7bf6078bb56b44174fb618ec3c1be56cbaf6327d27b496529da189ea217ec43e1f5de992f15dce03282b0ee9781f0231bd9c8f087f0018d3021188b0d0ec0a2caa6626cad6d541f5eb4f1a9dfd1d6bb58964f76605a34eb86d60cde0478f956c66ca462216eed97a0f3bfe8bdbf6c2e5eb93a8bc1ea8519b2479773b4bdb23d0af83de9fbbf387b22d87b160cb09a88ba344f658b30d349e251a917994a6ae79deaba8fae05a41fa487158fb5ac56059f723c9661020fc3d546435a1b6623d52247ae76cb39739e56d5058f8f49daa87a391cf7e702a531b8b608ac62e07d6e301268ce10e90c5d2c9f5d2df671873b0bdcc3f207bf3c65651fe35abc1fea57e55e44e4b88bee799cd2e4a1edbf581bfbe8cbb9c474839bd7437dbdc0cc6fe32ac54aaec5450b210914f857f698260854481ee8a248d798df404e57191f890c42dbf5f50acabd0156f0d877a78b338485e402e6d60cc968949cd465e423ec1b14e5031774d8a2d70494135a7512a8091d66e948699605d683d9fa7a309b43ab349346ca8c32b046c04a6699f4fd74884d57562712b9732d280b780822ce3a5c225b212a92c10b504ccef7b018a7168644903a48e85796179420f68f3004d58f343b71dde65e48818d1205aed1561868735b97fb00d51e574813f642f4270ca7931a901a19575a1b8e1d31b3312bf97255937ec927a9397b9ece7cab33bcbfbb9736ffe6c0809fdf7fa010d537a79879b06373ee9af06f4e79d42ecdb9f1e694fb38fe4366a8488961f39864be5e214ac385b1545dfe799dd3768ba931e694778f42438a729c723a4d48a7086651966e43cc48b750c90ea50b3fad3e57735d41c73483ec9427ddd681c108bf2ae4f03ed4031e4c5b76515784458d1865e39a99543ff644ae8961da383a99aa7463334b59ce9371a5d0f23a7edeff7fe7fc4e52dd9fd2f6e681164e9cba13c26ae8ccf5d7073bf659456a2cbf782ac8eda94cb056b6dd145465c868d5cf263c1aacc041841a9b40b32488e1e155fff0b4543f1283fede33826903ea3ee8f5534e074b886d4f20d8eacd6842bbe7535b1e39b7e1fd34c02080d02fe0c9c6323c202402fe4b248546bfc3b7a8048248f72d210ce83f0291a01c91871af557b228c8c305edff9955b81cb3c710e08029abf164b1496939c0fc31047f2b65e60303c71bf6523a6006461dabb8f001c11ba70563a900e5e1c871c244d2493cc33e8891aacaaa40fc55571dd283114bfe69cbde87e2d6d8b7434ec773bacfa7b1f2d8887aa1de83b2142607c2c820c723ad358b41ab8d2170d50905ba0c5e798a007ca1fa9fad1bde36adc4dace142d15088fdf2e2d0f2f326e60e29e2ba9d15350982b306d18135a93ad0dced8dff1b8aeeb87ab2060fc6f3f0dfae5caa65db66c53cb8299de5f91b1a72908ddfe49740c238c2e4a40751c77fce12eeda06a31a1bd708e56f8f48d87d26b03bf44ad951d2c7ae8a2e977a690f0ffa3927e4deebe347db6bf58be0b61c96fc18adef1a128045d3bc66332436485eef002c40e3d88413664350ef9d07b02206eea44c27732886bb9ad90ad68510185f7285e4be4c5be3327be5ec484e6567b07e6b3d3b556cb915faddf1dc928e01a0865e667ea9bcbb9bec1909466c2c17615416689f08f1a35b42a45f48ce9e0b079ece0da9c3d298268651c377009c08e880397f025186bbe13ae9805a31ba48036abec407fe4616fb18edde3750a21be30be69d8841986cdfa1082ce61b54143daaa9e24d82b22e6241e371b9dcde98ff4117d6d605119118cb155167cc0039961e5bf84a6fd1ae2c6fdaf7bf1b0b0ecf5741f35aab0dc1781a59abe7bcdea590a908562ffee35a49d221f417f4830ee6143e83905c52da19860398bb4d67bdeff7ea5cef236bed6bfa60ce9e52cb282abe1ab31ce0612942b7b5fb27851114ca6b859af59835142447412d9c56b50231b5e2c4805519a589666757f044b0cd8c44b47c08506b3d96aa1ed953505984ce6f5a237cd85f9a679748e91590f8dfd1eb79833bc630230001e7ffd173e26c4274ac2df8f63d1c7c1e9dd2466bbe870a472d327af496cc63b11730c1b0009642e04858c7e2e1610abf0d2da8815f564b10e5a0fc21d6a1441cec13bd3ba0c7ec50e06c7935c8933ba63c510c751c33d80075017672a3022e448c10ee9afed121369cd23f5bdb7c8dd9063d472220076b034e42f0d026de391d9e9df79aba75ec06eff0305523d5d76da1b2f548ab5cb211d787fbfd0187b1225c92ffaa2b7b3134600281c28fc4c4bf3d915d04acceb3e34cdad855d1550029e12afc1043445f1e83e5eb95bcae3088100f247032db1e37fddcd2f013a551a6411ceae718fee9775dc2b330933bbce45a418cd01dfd6de0c5faa0f4f63687b774fb7cc0634ff469cc0ed3d494b5734b55c132f56b00bb8cbc403dfcee32ad19d4698d92942abddc6e614625253fa62f4fc144eed9dad99952b4f1be74ed92bdb599669a5ee6f00842851f015a89730506bbe80303d746ea3aed746b72892b69561a89ecc62adfdc0e3063111a80ea210fcc982b4a37aef4c216dc1556282d8906790c4d6e8fb720579ae9586b64cfe975477ea2d3c7f5628b9020d628d1ecaee5973e1f60f722d2991fdd3d067aae93acfc1063949ea507055d5b109fbd0d956699a9a6683a53fd1d3b9696b7c228c7fe1a7ee2df9dc5d590668e65b4159a4412f9b39a06c5eb0ca44ceb3988e39c5435f42ad5d99fa03158bec3b42f94e7d8d59bd181f238ef8711a6869b939e27d371464b893c19381a53b2182fc7319ce2262b13656d5b120ac9dc33578e84c4627f7ce277f5eea698d540687a458ad3a9980ba135a06e02ec8d1fa0abb92b43c36e5b40edf91e7dc3e5715c44085ba3867afaf9499284c695c747209e6b09f583eb7e93adb1c4821739ea681342ed2f9bea093daa5231043b46710ff4f176072a2411249685b5dd06b9352e4f275544bdaa10240def65744304b5604589b10f655739f821521df956046b6916990fcac797c360b7ae4acc6f9da374f5060b422944a9822d10c4cd2f9838fd2603f5f8f2acad2ac89c5dc99e1148c59a29d10de565e35c34e5731e87f3273fb51d1e8ccdf125ac7a02eed1304fdb378677211c56031dec6aafb400f1c859996ed9100b3710a92a5fba129c8d1d138a79b0d5ddb7ac6273f5540ba66fd528758843080a1414b7c76da62668d6a35c9aec582c3a377c9de9e3263a2f157b5295397b8d19c541005f2ecd750b5a639a0b21c8bfef259fe6eec8229f092cfc8fdfa7b2297dad5a3773d23c5b01875f05cfe4cea18e15369d133bcaf9b5cfbb29bb5f058cec7eb90a687a6319301c21bc6ee37f43fd7f42bf533293689ffded037f066100cbb5c1861791ca75b65fe76bee11fa75d7585e594ed106be3f2f6f751debbe2dbd04cb0d55749784d7020cb70e8c067ba167596019a0cdc5f1e0543a88a29f5687aaa0ea5824471b5884e2c4d9e63443b9ffce38877b01375a12ff7d86d564dbe5059d2a81f8fe0f9d5052cb693d15c11e0abb6a88b6a9b1228e80566050d6c4e4c200e41454d0e4e2102bbf4f294af03471c5ee5805dd4cff281850c35081e170ef1d62eadd864c7efb8f1ba111cbc47f0a898074f1217168638a6254eeb7a7e80fa855ea8338b77965ec9ce734c1647fcff790d2c33e84e04de696eed0db7f82784f85b231f0ba4251f2cf0fec098fe51ecb57c3c69c65e1a80e903739c230a157df6b27fe49259686ab3bd28d1fa4d0d5c4645bf652834882435183a253b2c0e06a3392e32954d5ed643680140f881ca1e9a2a82a16c661d6c4d2d9ed95b45d4e191d9c4dc295788fe27cb05395a4cc7c83bef145fb7024cf58a3b9dc2fbcb41e5791e9c19a5b4998ca93ae3512ed2d98fd27bc1f8b04e382b758747a754951bf830d3cf48e7a7c2122f43ed8886eecbc9ec90ce861f1990ba9571878b6c2d54d92567744b65223434fc5debff8d9a3f2c8022fe73859a4f56b1cc38d5b98d3c6e54a9612d29405837215dd807d08888d2d2568ebe2ede66624753b1f7a2dffc13512709e7ef88fca5549eaa19dfff776cbec877689bcdeadb871d9ddae91e37a52b06b3425c2ca818669943fdb192c8e368f75883597cacb34f43d695458dc0079cd6e32eec1706d144d1ea322224e223fabec375948ae724dbd23a1ac30878bd6d4b1f2501f80304ad165a3c892a1278167d88ded32cd111e756653da1379b4963e851fc2736473a743215b8a06322d17f42a11718279779913c023595ead76601a57fa51460ddde25406c1584b4dbbbdd2ce8dcf2826ab903801621d2dbd9c02dc2550102af33998328b1015b399fa2e01c816a3ca95fdcde0679dfaafe0d7323530a3f44b8e06184db4b9397451823b788431b84b8c95845a9569be93e00e341175e1039fc1b3aef5b95a9b66859046ad0cdc623cae448f8ca259db9a7bace8581ac0b44c822ac362a4ba56f5bb38c1e313acfe0f9a2f43e0779cabb0860cc6246cb4769fb5c1653e703674a95f95c645a8417f6365fe396b6ec38e86030ecdcb4edbf9de731533a007af58e1aca315444641ec6ab62771e2a17b39b83b1015c6e026ada19685940ccac9d03fe89715fd067674759600ef20e95a34f2014cee0546646555555759ccccedf6d829af722a5d78878906b063685dd8dda09d3ef0bac502079b0a92270344388de3c2a297f363fd99769215b8adc32c994524a2905d606f706f00546e611c5538a02e8efbe3da2b03989c721b5a31032efdb7754b497b15a8844ebe3501202518c4636575eb420d241c450892f2666563f4fa27654f2b7c721392aa158bfc06e8a0e11544a49485d2980a4847498d811429bce11cf9a140a08871c8bc7a011789ce03ded766a4539ddd1c40e7a330f28e5b1b8860a8dc722d9e77d7b2c1a8d8441ee4ed3513ce6c8c146969314e5b3fdd0469eb18d2ccbc9c6d88a2afeed31e8468f457ff6f5afadb62fe8bddaaed975fb212f3ff7a1ffdc38a37b5f9c7bea0188a25a0eb9b71b3df3c9ef700e790cbafa389df95d1b63fd6977dba6bf6d765a0b0d7880d5c0000efec576cc2881062c60833582f022d341efdb63d0899fbf3d06057d13413b41ac39e01337214f9a94191a12e01523f08c4750c50d3620183d80b2803180a2822f80908258804c084b0011df92c0a82bc12129c0a533e189b1a0dc10208a1e615d421432a27eb482397e52008bfc2811fd08bdfd900032fd8ce842029354989470b62438a388b0186625c7138d205089ad1e25a85e94600202954031428912712570a0e08caacc4013da9005b318095219a1e8cb0617d0884f0ba0938f1510878f1330854f1150850f50f0868f4e504b0ed916648bf2d524382506c40a023cee08164310129178115c228105b42201157c42e2284883449105091ea051162f2b486a65471b49806b428423c07c88107412a3448f0ab01ea9e08f9ea4a69e13557a7a5af4d8ac781b3205e8240843091c11e08e0fe0160e209619c21fe28a21e2541c71c987381483e8139442bc015e610186b036e5091c9360150940a11f23bc843935a0f0b00886c0530574e3690a26e121b2e1f909c293034412270c620b7a41215116743a024c022478a563890da08c1d17c0a99d2b183b4fc41d23a0dc4e10cece8e1067eec60d98238d88191592200fa3168fa0911b3874600459e8646de944fdd04102aae998009ae910833ac91d578245a450390b9e1813618890448f28aad90514a29a32aab4d252642905cd54f3db638e50931c9f233938401d7140276d4c6944c72563c12391296141255e3ab8acb8002ae1600147c0890aa6e124096f708484e0f800837070824171c1641b702c0d08e4180432165c41e4449850c7eb872b78c505f0c80d560937514017374963374241ab1b1fa1cf0d8e541c50495b10495a30c551481c032611990b73e1057ce20276b9401a81a534222a694452b0c608a1a2113e3e46e0006fc455690b92489b3b96180baa11090e090b9af0eae162e2a20916551459929050930f30eb688313048b136a038a9026043a02c5c6781009460913ee7801bf925c2d922e823b92584119c9a8604e3209482329042492f48192c409a2f638b4b6a134e0d151d833662402a5f6b035b57b05b96c04db6000a5680149a00af638911d01b39cf8436b44e1f387fedfe051969c3fecdf9bcdc9ad167c1906a993fb7befbdf7de2b767fbfd767d4ab31dd6fcfbbcafddaf3ce5ac843e5a5c7176e8fd65a6b5cfa21e7dc6bceb5afb4c7a02f9d5714c7609cd43aafa805c3eaf6a1d997bfc599e715e31d1e0d21dca10e43bcbc20d1f0af8c4580d560015fb8e8bf58013217ae852cb301cb21c1a0676051dd458225a8da08f451cd6fcde478fca105a0510d41c6ce70a930df9ac941c919fd612fb341c9fd8c90b349e3da5219f4a542dc92b45e9c91d22ccb1e69a7a1965a27afe23b4e09d5714534e7b81c140e0987a63291c2810170c65daae344e1b874275c0b5347829a7e6b0697e2037954ddb76670497fd80372c11199c1ed70a5deb1c49d1b4b94160d6cc37266c1b08c995882a0587c6c0e3d1f833c82d2f02acdb0c840958432e84b052c2938672b61bbc10540868d0c73a41a6542133a362c417f18234754f7b7665848fca1ca8305471543ca7140b221cf3ac8ba0315a90359237b2d4c81ef1541b5baf7689d0c208784444e1e6a1380629d1b505db485dae00664ba1569a6b2ac62c2bd6c6082f2832d858e1755681851ea509e2da921a5784c4224b56bd206a4b719711132b5b968e37229854cbd9e8f51bf3543e6fca18c10b96e966f6ffb6dadec6f644660985870e74d88aaf67cef5bb3371a1fad87b0d0c1860520dfa65cd437f445553988c958557bfe8df88731c6a6cb26c5262494b2702559aec3be86b0f0cb1e07afe662625e86f69e0fbaa9fc5bb32b49fedaa385cf68d95b5d63ed9c82e30abd1e2f4ba65f96657905a92c4ba192308a43cfc75881fb13be35b3827662c130bab5f77ce12620043ffb63ec8fb1f07b15745eb7a640e74f0ba6b760c182c73115fa5afa12fd4224b5f4dceb1e5f7dd9e9b4588db9de6f401df6ac6cfd21fa871cfcebb197d99595a131cefbadee3ae1130a8d8449c2a31614394a3b4fc692f0d8b69fa525435c8449314266bdba33f212e2c5e2b83c042a2cd2ff7aadb30e018de703bf1c9aa95e613c70affd8fafbb6add551683f5228631ddc3702fe2f755047a9dd1e097ab165b6734f87bd5629f27bf4d7f7c055a44c7e75bb183414175cd68f0f5d6c5f6da272414f15e6bb78e4f6bffc55a0c9684d37a7b24bd7a3f159deebd7773e4f1899873cebc2c5b2bd1bdf7ce65073b3a89755b5e7bd1a3d3d6d1a9abdba313956902ed0ff5312ae70825f68731df7afced31eae6ed18453c46191d8f8a47a32c354e46bc785c3921525624a838d7a4d62487c51664292305393f9871ce39ff6096714dd3f169c687f9f6f844021472cadc32b3e8abd3d486e617ce39e79c735e72ac85751354f543830a0c2d15c4a334222e2025694649cbbb4b0e35b0144069567ef09498e426d8266f5b23205541c279b1fb5cb058e585538db02b254929096ebeac08d9f1844574939a8258911189b422402f905e089d4a487222493462c95c3fbad13bfd6b48130f24244e8edeac991c0f215b55aa9cb8f18e784634b01c9752c5cbc4951b140f2902b0616224288d85d60a1369f2ce3525799c73114d36546a3c2591cd751531894df840594f0950e6b04c8cf10924495b8b7174f1c44374a4c48b2812a27283138ae25644034c4d9c907c7095c5a1d8f5c08283ca9237a92c4fb258bcf30105093c860ca91145ca900a293880b0685865b9b14bce94184d913083c84de8a5b32d7d1d7901e584a59d9674596eef6281234b8510512999a99a84b40cf91142d71c0e2b2916648b8495e29b4da0a40ac9645664a4897782096a4206724b25acbcb1188b3257813637ae2338644081f14c00fdd83a91c5c85bda4dea1c14415a615b378ec5019c00a908d110261d3b4260d8c609a2253caa94b0980a528a0b807d6b22b765c56827c5949cf79dbb455d51d773d0fd73797befbdf7debbdc415c4b419b01e305d655122875318ecd58315405c75cfe4191cc9973ce79b66196c30d4bc8d3d9150f82c2564cdde468e9e8c04b7cce39e79c975c28199681005daea495b48c8bbff7de3b1996816c371a98ab97f091fa3b3fd14746f05cd9c928d8a457184e15274e25a0b25a930e54ee0a1120153c45e2e63c8b23b1c98490910d3d020d7486892824524774a4f07175716451c874e2e68cf28e252a9cab460e8b114c30b686f0b627be208005815b2bc1246b078f04d28c9468c80d192d9c6c2d45d92ffc98e4a6849b2fe3da0d28bc9e1e2f0f88918248e7895ad854962ba7cdae083a8854e500e1222226e1ec82b8e8113ae2643501ca9277d292dd9c052eb74df0e8912c5225044a45265bfada1d39328762c91a15af2c9a07f9a2060b25a2a6261ea601a89915d9a85116856d2b79979cdc48b135048612d8ce921593007366387a2c31de48c23c1d24a0f2fec85078684a8c2ad294e0d800716123ee4899575c4e112fa7d43f5073bc6492d3124d45e7160195e390914a8f151d1e0ed38e0930782479aa9069f18465c9e74f09b01090e838c9c8499c807814d45658b119724323c972f53993036e652ee46e88927c642f5369ccabc70dd5da5296dba3c346c50d2b1339d90a097956ad806b52321127a59505db25406244aa70051d19c1bb612a4e8800d71b0e3164f26984b6c084d69684e219b1c51b81a4d4afc7025bf2e151c5a847875d3c9224429a12173b4250bbc8241b7beabad1c05c6e343017cfa6c583d8d212b2a31d3c582764c438b26248d69259ce40fa4e1e85e5232059acca2dd37846c20d2f1f3d704b3210b5685b813492325206fd3031c6ed3cb961d9cd31459920228ac886cb07125b9284deb98c7ea06812b351834908575f23927251c6b4e46ef44e8f3b92e34574a67e84a9c93161eab091bc8a6e7670e6c0e438e77a0a99f435854cc2f1770ecaf94693590beebd975c9ff57268c7d7cf8f8a1c3f3a6ca6a30d9b283b3c9ce42977179724e44c0909b62c704b5926a4407e9cc1004bf3f1617bb2b4ae108ba85d7982454c83c8515543c7a6ca1436db61c90c8cc55a509627e4543e922b5204698a0cb125ce37ce50816f6b72ad5aad5b55fd9235e8569bede6a5d71fcc54adbe7dee7b569d66ac09ec6ccad7d254077ec447f18912264d353af0f5455f1bbdbd9964eb4cf161432ec8151319b947d3899d24631be0ef26a0bf8f492cf8f6fda75442ea19132f0f860f9ea1af164e26ca1480e3a746118a12654fae20fdc84850785668fc7d44d251aa3092d4da816bf202aac3de910a832b1e3901332a6e37ae8e3f94e5fef5de6d5efb086cc7f6f791d5df4725a896954a083d47534ca0e4e8b0ab6841ed8072e246da0733a026dbe8681ba1d0463e9f27d7d5f52e8f453947a26266d3e55d95a227bd884ad635c4ced2a8b40033ba75f871a2ad450e0c2b2342b363d190a21f5de7f05e1ffe36cd19e7d5e29cd61e8b5e7cdc016ed96c97f65d138d488f444098013d0b36c5450537665231d6d4aa4c75d056bc62a815bd9a4660edd68efa497904ed3d0ced9d878c16b08c84aafbedb5522112eb2331388349a5ea19f3d7b850fd3ad41f62a85e86e8ac69a2f66ecbf2728ef7ce5aeb9c371ef69a26eafdc33e93cb9df598679f3ab39f3ab3efde6ff9ffb0ff4acc39cf7bff61d75aff61ffe99d334f7f99635ca63ffc790d09eafdf7f7f4773ff7db630e7e7c8dd96b8cd6feb7571919eee23cedc5596fcefb90442defaa71df013969e054eb6d793574257545e2ca0dcbe7ea0cabc7ca68556635c30acccac96acb8a686554b5666553f5e4eac795122958452ca7dece2c33ff272ffd27c6185f8b7d9b07530b01aa7c5c06d0e35095530a8066479df0ed918acd5391b904804ac86ea5d2f9a8b8504fd5c2dc80aa4aa70115140700d5d0ae0255cf093365e525832933170ca68cf4a6c07614a666a817d0b4987a5185be4c21b94c915027c8ed5ad650b5041d6f89b9e37141dac2023485d3843385099e4ece02934adacb78e51193e7b060c740f51206f928a5d343a6516bbfe4d0f331555d9fc2b7c72ae34fb3b0a2a6a94684dc03631a0578cad144870e9032123a709d319e1b3f8e5811b1fa395ab9fdfded112bc7e9627cb9cd3b9929a2aabf3d463da1098a223339a83d7f8c0a42e3a4a2df1ea3bc3a005275df1ea368a4887a11c52247450db1dc69a90cac85d812a7a311784c4906b05574e6e30812858e0e650e37bb541a166a6904e2a241e6ee2e831ea188e7f169ad97c9a02f15a098aad0fca85154d514fac318cc6b98cab22c8567ead07609afa8502acd8d3a546956a85465f9a14cc741edf9f4dbe313d81fc6244f981ff6165fccc318e38ff1b5195f6ee2d4f6e6def58a613c60affd0faf3aebbdc39e03c6401eb4c7fea731c62bb0596b550581fbed41f07db5f667df61ff7f5844c613728fce657ce75b725ffe9d3b7dee7927a27deeafd6a5cf62ce754669f47c9ecb3a315fe0e80c8b8113879df8794b97c5c039f79a6b23ce50046bc04578cec93972726e6e6a6a67679f6325fff215848d8a8d38019ba743f8425ac43143380617714c4f8b1ffb6e84336062895ec41986b4e73e67ceadb5b6a6cada75c8fdaa576cc431374b71dab714ebf9da7e59886d9b6c6e590cd8d710559b62d6a031fedaa7b1bd3977ac73d66d9ba12ec8260767c85a1784f6ec43cfd809d0e7cd3e0dfef6ddbf2d0db3ea0f77b16c13676ce22d76156db2275a0cfbb7755757c431433846b789c59f7dde43453fafd858dc44278c87ebb7ffdd75e71276086eb2ecf5f2aaaaf763d3c4fedc78efbdf7b57db73df6dbfff0da2d060fd8e3d59660839ffdbb05cf0c45fcbdaaf95ebdf7cea5e71e84b2972b57cdb5f77c81a7bf6dcb7c6fefdbdcbbe7d2730fa2e4a6b9757b9bf95e9d2e9d39fff639f975e9efeaaeb7fe77ed99ce983f0437697baadb6ddd89ce93d77f9ca733258d985aaec3bdf5b107180ffd9f65f2fb53e7875aec636fadb5d65a738626decb4f1f5a9e8186bc60f8ec466839675d8269bd917bf321e7e74a4376fab3444f1f0d9999feee3f83e53ffd69ee603cf45ffafecb7385f180fad3ffd055ec639fb74f47fcd863b1bf7d5acc62d04314187f88bdf531f657c479cd1e561b709cd6c2adb9ca5bff7aedb195d175e9aa6ee86c5c03609f3537cb74555943afd4d9d85e67437bbd5a1c66d176d510d5a16e173ff63aa3ac21a66b6deb637f6e2c1b83bddf56011a6424df7a2d6691e7ed5983c5bbaadcbed2673b740dae0276d63500f6786be9adcb5df6583683b531d7feeceb3e9bb54f837f82ac6157d90bd8f7aeaac89fbdfff60fb30733a507feed5d653840e2d3ab2956a5abdac56ce52a8be162de169f72667ff2689cdc3375a8f69c7d5e7d3e8b81f76e7655edf942beb0d76b31e8e106ce4b10ba2f3d88be6ed8902f94a5ee9aa73f9cb34c4f579aa39acefcdff9f3c945fc9e9a7ceb76dafff2ba57ab1bc1c7abe580a19cda9f3c18ed61fef537fd6d15a73fdd73facb3ffbf50aa2a8ea3fbc5fa73fbcd3dfe57c977df637cdfea7571e0c8c03528f7a10525dbaa23ae7da735f7ffc9662626868f75e9cd2949aa88918639cd35f99f38c7fadcf39e7fce31aed5febb5d67aa7bfbdaddf7bf3f4a7f905fbd77acecbf4977d3448d4325d6990a8dd9bbea73ffc437093bf0fece76bf7a6d73a9db9db7e380c3327b0b1b141f1cf758891bf34d721affae53005c61f226ffd3cc38be83d69d81a2915b4f53f5b489c813b7123aec5b36cdf9f1b79a7cf39f7d90e3c4b6b9e9577c975f695bff475dfcdc46f77d90722751853fc5bd9c689fd39a3f5af7707e897979cfe7a3dad5f7ad7e9cfea196d31587ff21a90a3c3f3004451d565fa7332d31f88a2aacdf4d7eb5d6bcd8bb3debc3477dbffb86945ecbb8d4eed310a75d8d3ed35128931c6d60f71d547a281e59c7f65c64668605affb8f6606f9dfef61e5e230f38d7fc12d1f845fa80a4de0f48eaf679cf5cdfff6df3004451bd9e839f8c8afe8d42bd7897f6b39fc955c4ed732a028c54a244c9d9999a9a9b5b0633bafcd8988b3ab733f33e3ca943fd31eef55e5ed2bcfeb807bebe24edd53a5dd79a7314ed5deb9dfe72eff94259f67a2f2f6afac328fa4b3fb03faf30dcdfbbcd6df62598ebef0aa2a8bd5dd1ce71d65a63f4d499b72cd1536796e5bd488cbc18638c73ce39ebabb5de33f6e69748e4fc83913ab462621f8c54edfb4dfed3d47e85e99e03dc6bdf57104595af321cdcde876532996ccbb95c31729dd92b46e218ebcbb22c313ac2692d9c72deada7a69e598f8be06c631360e480737ffdf66746b1d1f2bd8279602fce16c3b5a9defcdb9497dfa665ff36ede6b7a9a93bbf4d4f34ddf1be4d558be1a62d13be4d27b8bc7c9bbe58f06d6ac105dfa61750f836a5d0fb36ed61f06d8a4106dfa619c07c9bc254f836ad00806f530068f06daa816f836fd30d2c86ebffa9bff005ec7ff422aa927db6d5869803bc86dd30f2aebb0ba95eecf31aaf3a4f5e115c241b775959a9cb32e35b7a2cb5b5859ddcdcdcdcd6d6bebebebe8cc62ea3b1eb0ee9acb3cef916b5ce5a67adb305b2d659ebac75160187aebccaa0d837ece0da12dde98cbdd6d4a699f1357969aff575f3444dd35e9bea34cdf8a6ba6b51f43caf3d4f7b2d4ff378195f1e9adad8a4a9bd3698a5a47829cf62a79674e6064dbc85b75cb48b4bc6d7c57a373737b7356c836dd6bebe8cc62ea3b16b68e8169daed32d62e00c046b652058b300be1d7410cc9a83ede29af38c2fdfa5333e8b73d6bbe45df79ef1ed1bd59b97dd3cf579667ccf6e9aba3345777ab7cbf8ee50dd89a6e98ed7a25b5a32be2de94e4579bc1654555b5c26bce897978cef4b0baaa633d7baa0132668ede292ef4b4e69f2cf1758902f054d8142c69782056850eb5eef5a33a5c9ffae22c8e0020a1860d041ead4f6030ad51a3bc0596f7e37473b6621f5bdf71acb72ce396b4616d8de7b7733cb296bab2ccbd2d46511b38c74a8699aa6eeccb239b1ce78a99ba295a505a6a5a4b543859b560e968ab452eb87969236296f2ea4a090900a3b40b22b8b11ac2a2b7458701525545869d9b8f76aad35d73a7f40a2625e056f21869733b6db0907ab8ca6079618d608615838b0648cc06a81b5229bdf1eb1a682946559ae2d2df9f11355258d77e54477e442aa08e766eec653b9b4a45f495d9190415f2a5cd59812a59a572b9c5881553dd171507bdeea899caadbb99bf6e20ca9cd5151faeb0bc14dfaceaf7d3aeb7ee943759f61315cf4779f05eecb32f5c0c778b081c58064030e643ad8b081c5f9eabd33ffd8069aa43ad41fa339e79c730e3b377cbc337ba6cda6b90e3fd0e6364dd3344dd3344dd3dcf0cd55e77dd63054d761cf0f7d99d7a10cf618f352c76ba85453eb4ccfcb555bae5476eb65b2b5ebf0837fafb5d65a6badb5abf5bdfbb39bebd06bff79f71d6fb0643f7b6d81f6c30ddf7aee6b5ea8d7f7fbb3ad71a1faec7bced97f88a15e9f436cf8655bec3c7918d75065cf7d4e7fe5ca4bdf676e12f7fe87bd2c73fa2b31e7796fadf5ce99635cfa6ac84c5d39d37fe94d7bf6398c87ee4bffebabb518ca95afc39d3ff821365cf36a2a28ce8065646262bceff554b57fa06e5fcd0d757b0e79fb549f0736fce107ff4313555d6b6ca843cd4b9ca17755edf5bc8f89b17dc337fd6973efefa1ff3be6efbde1cfec75f8c157bdba7dd93a543df7a6bf36190ffb6e1daae93aec951e5d87fe5c65e2d4e107bff4e530c486728a3abc22fcecadc5e9deb95fde35a5acaa75ccff80646fb19dd642cd0b157b1a3835fb981da8740c59cf598886720200e317000020100c88e23892044910e6d13d14800959c4344e3620928c85a1282008a3200e62180662200460100683200651a990563cb59dd549ab9f61fcf3b1a8b7741eebcda447ac9109a8527092c530f715aede402a3f9589b446d0cd8dd656afbe68cd792fc7fb2d6557bf3e2e6cdbad18079cb8482cf9c953923a9b92ce9055bb86b44724996581c953015de9e600252e7dd3d4d13bb8cad4f104910dd6e80cb75939beb68a63523a254d3b1679fe42848f2be39ffadcafaee3a12b73aca50e078d5ad3767fad15ee28aebfef357ace365855cce06b67669950660f90fc869c3941f56b320c006d0435a308aac2eb33f9f120be2e49dfaed635a98d3de899b2a4c42308af1bc18f231703118546064060884395a61f75ea5861033c28bb8708de10192da98493a0afde715a3a610d9b34dfb6625a1dcfcb98746c5fd706410811b51405bd5daa210a54adbcea81c23825c6ea1561f926d9bccbabcffb5a0654a843763aba62a95e7f8ae3272a9d94e989bd3aa9eab618d6e860227d81262c62cad7cb524b7034638c3c68902bb27c04affad04cad71edd3f756facd291df389744b877e176f3eaba38f29626524026c7ab6793390c54239dc493db990e888228000826c50eaf8791f063088d5d50c89aea074e79150c264f4b9ba3d09262038b57acc42c3235788179f2965d9f9abceb44ea623fc6646f0c25acb2770166b7d5d4c55f7e7e499015f70864870bdad8815d23c601bba528422410edf2e976736fb2f292710f5419e255d3406a6b3d8ec20b76b94e3a8d98c59e2ee165c6479be0aa62931ea257d7e01aac0646581b8de1bb15c7d9172ba8beb63e4ac5c2c4ec525364b18021f9692013a26ead414940df32b7ebbd67d456e9678ccf9c2d62ee9de808a70540e74696691ce494736eb56ea80a28a0b7a84901c8250227e51fc811ca5e728c603d2d9aa9d228123d150c7ef0799da59ac58a40e247662c4183cbaa46fd2e109a3d39d058da3c2f09a6c77c691902507da8ea1424fc16326ce5360c51aa9e0518e44427b9c6b524e8784fade075c42efe4a7a904423089a8c0bba5bf85db55f9ebceec7b75e8f53a4108c678684ccbe8e9bbd42134fda9f2e139aa3d415f78dfc971ced2099b2a6ece9898f139fb3e191b9d9957a7b351a0657713331f0f4a3467dd7d4c83f8a8cd287e80b7f6bc30da48d4bd84131af578695949251bc7a3afa0b4cc9210691ed530a7e6fbd73c1d6758529be1bc7fc0a0458abd8648a26e688bb3a7a2d8e178dd0fb67d1cfd084c22b2986892d28bb92ca15397d90ea94e7a12df653a7f8f5ae84ebcc2e5e4428aee9769e3c5a05d2c6bdf807c99a900381b847a4081c43c7c120dba51bcf886d53afe5085216f9af86fc9f3a1b032f5ad32c655fa4a0f1ad327711e78073a99050fd2bf1327b65807e47c07744fadb2f41325c6b2bc7d2e10af1fb61ebbdb2a330afb4beedfd72aeef3f23782411017dccf1b50215efcc2204e954876b1328b436c87f2c4420b208ef0b8cc702e147dc2226b399449ee692c690d054d3c41cda6edac9fb9b2683d8fa631039f3f3b6bc9c185bd328b01cd9a852a9fa305db574f90651d2cebd44350d57a48de87c840aa58e6398666d2e6199c679528599632e54176202be321cbc628fb0fd3f4dc32d077d32c3ae6e6112566faf8a5cacc3966438629f4f42d1c9bb294c71d9141896d9db2619c22f1b065fc6755965a4b974aa5c60cfebab2612f719c9c4531f1a3f7fa7de19c851b98104b37df9862e48ea24f5e32d88b5fe4d9ca0f1acb25951f598093da9b78eee216c2909800cf085ac6b96437abcee888f0d4a0ef310e50c130ce3045ce92e2172087e00385bb02c5d457f7bfcda05b9cf3b6c3520336065b49b53b6f13208345d53b6512b09567b09c1db19b42fbc91a6c8e281b6c45ec1d37d8180b6e48e5db6f5c0161e947726a7481f8ac9fb85c81faab9f2853b69fa02a95c6f3303347b9ce80dabd9d3aa58bc74cbdac4bbc23a040391e09c53e866e61fd1dfd463115c728d24b01a7c3ec3c31b8f16b15f8a367243445e41530fc5883b7a4b8578be84dc7b845a64410e2421996731f3137e8fa6213640367aa35b2b3db739e4d7d7f672d73e0a2237c2460eebe32705c2412e8341abef84c714a738332d1d841cb3096f17839dfac5d7cc73b5611837862041b6b3c96e38dc6560ca2dd1e7ebd3e083ef6a72ba885999f0b23f4f67250debf14635aa5de3def8af75e6878ae206604c22c83b6a7d94d7a61f7d172b6ed8df0366a501ca7c38316064451ef7dc9354251a2cea82e1de18e460babc348ba89b23b147303a70cce6649e53a70c1e7a2fd44020d8ddf96284433d3d04faa54359cc34106c6f49424a116c3f9a32aa38049af705a91de73e159b7f8faf3069937c75a2e78c505c5729049846fbda3dc52c22682a9e74a3f97b933b1db5fd52952ac29f97d7b44f1733fe7dd77983a8fbb14880a3963fe835d5b68c3570f38487ac417d2577e5022e0367cba12b79dd65ab5c28424436c6e15e7f8aa89059e2e0217d095cb0d771e8ff97dc35b2caf32ca6618c218885ff37f938dd5ec9e22bb67d4791fb335b3a932ff64516de035073db5e4f8c85c2fc0a991953dba0f1e5a2eb91cffdfe78b4b2149abe7927453d98b0d5bbeeaef2b68d72a685c79dea86d7c8b4160507b6540620589453c6131cce0edfbb640493d2c659dba814ff31ab6b3f9beeedd70faab7e5c3991139ae3ea56197bb81b625e7d96cff0bd4305880aa30a430e709325bd6166e08f89c148886dd37fc2641a90e3bc41f8edc667091666feeddb8ead8a408db47c49bb95fd41735aa38a77af32db0578c069753eb4a54bad27886f5fc178b0094da2a64377b6f5eaec85d5bc447ac3f057fab236731203d1d04ad2726ee19e6b84556d4929fe1eb9363953e97e44faaef62b1b8d3bb8f1dea4e364c2e9900ac0dae0ec836e0abccacb63d4ddf8e48be650f3c1c2230729ca3edb3e31775b6fb22cf1293c03460dac6ddab7ecf576807c70734d64b52506987740fc21b10f14d39a348ec0d1741ac2a41193bd3c235bb8371bd460b8f564f48ec1296fcdb856fc158595452186cd8ec015e169cd715bfc76d7216c4bf2d97dddea4686c4ecb825553a771233817a08b5bc9f4ed19dd653c4c444e3cfe0d80b08fd6c1ef3913ddecc52d240c99142a279b76a3ae588d22b6ed9b410ca14d708ea7c0f3ecad2f0a4e8a7ee4c082e52f6f4877ade1dd02bb08dc7d71ffacde968016c088dc58c5cf270d4248e90408630fd03a4a092ff9118c8b02388be818600b9f3b7fc76a3157f4228d1f6ffc9e5210fdbe32129df4d3d79015ce5560b69895e6bb88169c5ac1bb607efc45ed36206f63f132d03ae6bf10011441ee1c8a67fb2be4fb210cf8b2b1d3adcad7137355312678b07ab7be63c29dbae6a1ea63f22e3c3f434c8d02dfe15c9fdd5247474b7b227e4b669c4bb5d44954e14497062e481433e195ff81d88de90fbce912ee9c81ae070f09dbc4db618d9b8ac2a250b59e7c96a6e1b49750493e1e309e5fa3527975e0ee71ee05b9abbf2020525349edc6b3af5ac61ab113fde1b317d6238758083b2550a845ac9859d6b0d74aa21b164a99b554040640df8b164f9ee58dfc8ac12941fce075a244e6a192dba16e300a09a1f77df0300f7d2312196ecad31974e8ebd6291e82cf6ff0e90dc2ae3095131c2d49fd92765e92ad112482311cdc627aeaba083680f3bc9cbbd6c20106a5a5a7e87b503120159df6106857e7cc14c40d5f98dddab7c79cb59ded3f5e3e7d23f9883c04a5116f153a23bd8ac06977cc00c0f916ba0856c81ab6d417f2f9b108c476bae85136e2a2b769a7aa92334e4279feb8ae81f313eb0fd8f0135c71d9d4d1dbc61db0b6361def78928e28bf972b2e038ee4c986367568b3b6b20324da45274a94a843b153329f19af7a856f318d36fef8187ad359dd1cead9e19c92ccaa418495bf4cde7645d6d7e872b1624891081f2fdeb61b9bd361ac3fcc90e19ad3b15c7d4fdb41d5046b31af1ced52b955c9bb9cf33b0e4ac7e3257b752c82ae266b184ce2cc2f2b2be37796a69b3c9c6384b026e2cea353b55d7cf7e431b9f2244eacbe8d663d250ad33a6c2536750176ee3c80f1da3389c2cfed17f9d2972bfd0062b963cfe37908a3a0e26082219d08435c50cad492afbae6a061dc2c92620a58d54139e594f3ac7326d48e6ab9f9ca0b8c93673a9a5e4f10b843ab0a6ac4f514c8781461213360731b0f29146484a0e8f51aae59aa531c5eced7ab1fa425b0d33b647016eb189398a4ba9a9b157501588e81f9c75ab1ba5fce896c2574aca40ec86641e67b36084ef488460dbe0487570584b12859bd06005c588d0bfce7badcb359969a92fadc7cc6fc1c1cfe03556c707780f738a4b966e74cd73ff98f4cc981ca07afdb7712c94e8d7f5963038eccc1a5c0527bec5a782b177ee0b24acfba9cbf1a2d10ade0b39abfd390bcfcd8564f1f12426532f2f6b845c8a7c8907c4088ab2101dedceccd153350301116524b6eb94e42b84a0a1951a41d7febdf0f094f872751ac9ef6514b309c04434b6e9fd92ea556a57b66be5cb2128b68fe8ded7f1db4c605f0fa91368bf30b92720a8b047e703dde99960cb6e2ce9460759654933eafd14b0ba51ea423325a5e390970dc726c17dda82396e09a1877811db5cf540690f54cc908262883175f51a9d4471537204cae3638c11a532ae4c7bccad565d36ddcaa9f8a6462990903c87ab8e1e846274f7ee78258761fbbf1dd3edb518c53b305648f9478cd132a78c9671bf10d1bb66a250ebc8a35f982f4031cddce337532d927244c27253d1d4c5d73a7d5299bca2a74aecad0403a323d8ae03da8580a14ba367ea296fad12ea7d785e7f94520fb83ebac6136c49d8969bf1cd71ed8d75bf20bd20cf6bca424d7f3e7c3a9e501744da61b044b7034ac21b76a05700a008868af101460b3ba5d3553ad1ba6115fba5a315e0314c944357ef1b4c3edb52f2527b3ad0424bb3ea7d3dbd072df8295748a4f8947e713e3fae2dd0fce5eda55ce825f51f2dee4223d10c0b64d05b4cdf2be660cd9525d86dd78eb25a6188ef3a4f778e93ac94c8152456fd482d3cbc6e2b6e8f0a985e75f4c84d1c4247550a45a5f76dcf83cda866b9809fb85dac03b5e006ff7afaf9b22e0293d76ca738154073082c7087401eefefe0b4e36b0fb8a4e0dcf414b27de091dc97f312668a2dd6c0b22b01d5b0d3ea4731ee0c2533c18d8370bc1d13f78192f68cd4452b6b950d88541afe1031e95b44a147c46e931db36525b74e04877410ac2f4f3d95df4c3fd458d9454c60a8f1e81d662c27def59469b3329eda56955ff48e14d4d486b3657b46b2918204f3fc2210819954f6598a4f3f8dbee4c282c579702c040fc50dc9e11af773f32b225c437ae3572f9c539d2a5863daa982a71f3c2b1c217f6e58fe28498fa621394ebb9b21728c5ad03c0b8110572a6300b1d7b2eb3d467b3b11b59d7ebedc5c532d36dec1d0d68ca72b4b90f1ded99a3f2a4fcccf529ef0b81f9178908c5f6d6e22d6a854204b4cd79048ef65e18f428885b4fd5f3f61b1a16c39306a5022896516144aa07d9e47d0697e4d32bb5f1731e3d19c937aef48392660c32ce0b790512fefb838dc725b3ffe3fc8a060c43bf6cb58e10911dde4293136c23e831e034d522e60b6260d7b5f25d4bf25586c5d63e22e2343f6af0561c8765467061c0e315accfb8aaa1165344b357f2bad62dbe98b0b6f9a2ec07a90c16c30c3a209770d2de01eea65b7946bdb0cab9698cb366ab7173b0e30b7136e9a89c1b157812f66902f13818145ea9f5f02d704f695bed18151ff9d35130068b8b0b2b1b5158a9a3a5a43518bb4d068adabc826f98c8981f5eb5c8d1bf000ad13638940bd3051736df364bb3191cd39812f7a031b7ce0c10f2c0e00340c329b03335a3253b9fb50bf93feb9e28bba56519ead50d86feb9b53283a438bb397b07a85335120adac568065d97c6e5e4cd5e4d6f6aeeb06eaa230c31550614883330ccb93a7a2cb6c754d5c1856460d799284191c6ac1f5505d8e8dc2fb12c1d46a710d5b614c01bba5b04f4e2a3cc591aeaad79b7c28282d0508250cba77d3f9e0bfccfee68c109aabe25090e37c8b69a5b341629e06d9cd9dd1b16bab9ba564fd7abb7454387d3313cfbbe761d41bd278b893cdb5188729d1f9617cd452b6f6be7b74e90a36c4bdfdfec09d7348ffff796bdcda21eeddf707f652d6ddd342a1203ce97e455cf3a6f0f9c9369c069895c4516350a0db78fb8ee39ecf1ffa3a43beefdb6bde70cc3bfe7fc88e33a8effb7091770fe28ecf1ff2b9437cefd34bf6edb0b68c24662d65aeb6a1912b38c8603a9b6a6bbf057d5e3aeef00fb302efbecd217fbc72a5e49946f4d3db6936f76019c8c257a48e04fdd0b41302a9a4a094e6af3752a0b4cc6d6f56426d1f0feaa58c0f470af4d9f86e435c7a39664b793efcc721a2838ba388db5f51023eebc1c229434ab01024360f51ccc6d01c7b0aab12d4fa24367383c24390d71dcb4728f859eb20ea524c2f7fc814e06284243224eb4b839761bbf65d77deaa39a215dc3e4fd2f1b479da24a8f42bae5363cac48c8386f171fda8a7a840472e84abc3903b52308088644ea5749c2bb9a9f737103aab7ada55bcecc7358a92ea2cbea3d38f0fa7566832b1450fa4a7ee501af986d3640641cc0f6b5ca7fda9a0214e9a2e6bac98ce9c244ce7dd5a3ab901a47fe29f866e8078a9229ae12e18d7881ae020e4444425190d02e32ab2c7c199c0e0383358975f0de3aafd53b3b1bee79e2345ff4d9c766f07dfcd7404c632461d039c96c2c10eecdd5a4d1374751842908a0e37c8bf6a57ff0328afca48a7894d730098d8dc9d8494088cd6a5b971db98717268d59bcc7a00300503603ef5846532bb18164461de08bb7e0b21673d1bea62cc8f9302a1c25d48594a9cd08e7c08f4a23b3a955c6049e1380291649a1116d9b5fb4e91d44d682d9441835ae6331066b7fb058536204f36813e93098ea2d69c3735910edfbe8d76f9e0b3076f81254cb84f3e5bb8636f73f2cc19ffa69e8fd95e62b0457ebbb16d4876a4cd2b4541d99461df4e40b7f57129898f6f787af6058493fabb893d2fe827ef30856a1b5a8999f5c19551bfbd68c38e1ac2f814d75374d9bdcf412d0b4619054a2936c4d3c7b5595a2bdeb47a07bfcaf123e96ccfb4b40b78f5cbb31932b7cc8cb044652cf9247edee194ab92437c221bc29b76e816120e0ef80940589635c6b2a8dc33afacbc43a82bad09f17fea3a0d8fef40242d2776f830b51ec5e17ec84a24492e36f40e0bf24e93d6ee793f269a0ce64060960c530665788f4e1d67e4f938819f27adcdef5b0dad71eb004d2d4fb12b415015326921f673762e57abf99aa9baa8f86356e65880804338302bdee43d3aa9fb33c362494311d2a38ebf8e403290f4f09247568f443f95b05cedd29c1e63c1a603c233604865ed65e8896adb9b246bb393ed9c7b14c8723322ea2f78bc634654f0f3b8022d6a37d4be34e17469263f9696b01087335b7d8277a09512f637c863f16c330ff5b3cdffd1b1279ad18d87adc5ac0cecc4bc47f7a7b05fbfec60844e949fa6111c7d59c691102d4e1506adc2306f98b7f09cb63bef0b605e9ca27cbd8f2f9803628f8436af0f085ba0c9416db2ce1fabae13afb9955c20f781a11ce34d5cb945561ae959173ae3a5134733fd997120e686f088728fc90610f5b720dd1958e7161124a620b9e65f4e97a7acc41439060bf842853a498ef8d1dd7a1fde8ed7cd88e93800e17bb82e153d1f8e8b890d8868097b9f29e396ada2ff62424677ad7b599812b943ec849068eef6700d8d8565241ca35d453373bf4e8528e564e78d8f61ecefc485d6ee223c947e9b2480690baa37cb3ba1e33fb26d4a12677fe85b06b14d4b4992eb5d02a1007def3d143541dcb935287991dd7aab298803b0f8b04ef19b23156ab7e18444f96a4d91c9418d32888c82f32056c7b578858cee4e9061e998a30d4940d3126e41f99722b24008be3575f10ff83cc5915d5db244d12d511368c48aba134bd84f43cd2c29d427caa5cd96e42c726b42012101a3f26cda46714afd6a4ee01503ff0967d9995c05078d134d0854864dd356042dba2e544ae083bf1b4f74b14199b22638039b12edaf28b436537df183521d0d04c45eef67088c0b768bde992b32a310bd22175cc69377ad4da30c06441fc799483107164a5c79d1f59f3f9e35cbcddd3570d0c78f22eaa7fb9130ca8307f0a4dfae651127e80fda86cc33e92b72231acae8fc4722068001aaba0b831c48ac4f2fd4d25c1b555b210cd1bae6f13a97af8221201997899fdd48f014a9a8ec437efa372d8527f3937ebd2fa8c92d51ca33b5b798cfb0e6937c6d8a51cbdd4fdfb4000971ff398c8a96752c2d0c6ec7a87f1a58f18b9222bde7b2775e5ef7c38b9ea9dc9bd6d7ef4329eca3fe8467798ed01f8ea562ed8d37e2d788993c4de91f58dcfa0cfbfbd3cfc4f8f431bc291e3a96b72fc6e76a6f2a6b41c1517b70b41f73769062f2f4a3023dab3fba559efad6a1b9809aac891c023282b2ed44f7a8ef8a7e06e4d93421fa0e3e3ebf45d4474252bf5dc71555045f7eec8ba2b7de3a92bd6160cec9e5f3c8e271472cc5617e26bd1e976ede868c6759710b92f7d62ef6c406e24e09571db82926216341e975032dda0fe2b040a09a010f655f9fa8f235dc1bd6eb5d031bdaa0e3dea45a7e86d69c403fd6b08121993bc0fb6d9ee268a9aefd985c2668b031fbcc321cf8036513bf5ddd949348d6189bf8d83a68c69bb8ad98b3c8ef96206928fd8d7be640e3b8a07292f8fbb2b03f44b992e9fa32d099a39e4d8aa237c7e1a47aa69e639f06c14682e0971745f97a201df1bebb0e2e30b3fa684408a3e453b9420094feb03d9e72c1e70b03475d4c14e2b64f80ae4e18f75f3a6acacb6a44480536914b059e1a3db6578c9d8bd1946faaf0ad033b93435e9f560f2f0654fada16319e41d90599403e247458147cd521c4ed960bf0185b4b50e2888c61a5df38673a622dda583b68f6fd47e3fb6d5b1ecc3ab383ec9ec95579f615cdd80b2d4f43b84b1d3c72bae16588069aaec8c05338238261cba5936b7c15a27cc5e4116d701b5f6d2176e08b66dc47fca05b428a4bdd8210237e446f35db01b188be88148ac31cfb930fb1329ffb5572b372014a63ea26c8b059bfc7912fae95c7229451e5b3be09745da7f0b3781503878abc97b1d8e154019d0315120a2d13471edc1bb9547b8ad8013f4a373c5d6786b2850d4fd5c3e73f3638c28460ecac05950a4eb51f41e25c8f4e4128baee6c1f2e816143d83eb26146bf8f4d9ea60b661bbe29e2b07fd510ba0ab8e68c9c677f3c088adcd4c44e9067f12de2a481b053b42879cc1f8641335f531805a209bbf7aac7eb9c544547da40e41dc962c68bb1ee6f9a69db320dadfd9255f349858fa822a6ebdeea4c21992488adf4dc4aabd8626e5314b6b095bb4d6bc00c10983f6832ccf0b2d95c20e79d2bfbd40e796d72c50570c1c59cddc52353558968f894567b940680cfde0eb1979385fa4ba8742f37a67a781963f66353bc67801a8c839e422614382c837d25510c619614d0c908023ce836a3e058ad3f96a4aab88e6adb9b197093e4f85919547d7e3b0d494a952959473c430ffb9cdcecb43c9615e5639dd757841cf78d70657ec19658ba419082626aede70039dac8f3200b8842d135a1faf2569efe75310e3cc0bdd75eb3946aa517248bcaac5bbe49039b84e5b6504133b83f5d9f62c9c1a959b7fc9c38a34801a201f51ca5eba286512513ba0b46290ca26a060672d05bdaaf51713034bbdadf700f0cced043a28620e0b127f9c8ce7127134f9d3d062033a15ad76bd04d28eff0fd636d8102a3e784559a433ea247930c75e62780a5d1d45507c181c20b57c8fc04cc8b4b0262ab48cd44c4ef696a56cef55cd3b3cdcd4e59161ac42a7582f85d8048fff98dd6cbed87751fa4e437761182b45050249b1bce36f65caf0400dcb10986cb78b7ecf4c9357be934e2c88628a9696646b69b1dec91386dee8ef87b0ebbe810b9971466fb58b8838cddada2a6f1ed30304ad58d17118e762f48822830d6a7d1c4e0fa944b0a36d760d4c09adb45a3c5cb7662ccae7d65db834fc279bc4385e6dc68e2dab69e1a4d1e4a549690074b083da95dc23323213ebf3c03b2eeb39bcbeea766e4d013c639d6dd8333b6773501f4adf415622f9739b694b0a057d895234ae3081c5733d8d3f17821d12dd47501da129e0f0744d54a6cb085858a3ff853504774ae76679a3d5344e34c1abeb928d5cea3108d56fe5f8f2ad89f82699feb2e259e2b3b31d2016895a77450da241f4675d7a216cead2bd3315ac44d0b76184e6c6c88b90da8f4ab2d1e05e4ae2176b2364401c434a56b2fbe0c2141b41c0ceaf152c7aa2ff3a7a4fec2fb79e632ad28420c217d32a9d57e89a563d2105b6f29dbb079f33992fb2b2c401790079b1a83bcb560098c5f2b8a1b4a382e8233ab7cbd76d1539f73e77654c1d5918db0af6cdecb7081c4f97481d0c4ba2dd5eabafb999fa613b9109d1f002a85dd08a3d4132c765efb4f1265f2f0553a3ecff6e1ddfaf44e96eee083daa3ffc50ed7386f16901b5e53693056aeeb3c61c9278fb9aea97bce2d3d74ebe7561be2c7fde2bda561567925459990c2affbb649bbfaeafd38628076213edf3127fd78d17feb3a1a02c42231fc41c69e344d21dd83f083d62cc671f4b2e8e83cac05ba886b54446689dbeae452e21b062a4501b34d662b1b7e03f52853e6dd7919175ccbbc4010230d7844a739cd84b3615f6f024af4b33051b621575bf419a22cd0192aa7951ad8127b0c4aabd03f9bf569cf96f6dde7d9c868fe7a7536afdb767bad06cc79fcbe98e006e5da8ef8e9523091cd1908aa60ca991bb567b64fce5fd2824a65f1ba03a95093d49a953d0fbc66daf27b954ad12a18d375835819e0aa8c6b0be6dcbe811090b11cc28eade2f61f7677b6182a25e73a83fdd24a12cd0658a3d581e912941df8fd706002ad57472b3c5f7f4ad6ea084165af3cf85e3a5690e4c62e532ba041be42835b74450f21aeda74087a782f99cfb845aeb872a7ae478d6fa91439b9d1320ed63757efb0941ffff99bbaa18aa79ce094353d9e6113058163513293ec443fad84fbf4e32aefd90beca8d2865df3855e446fa6e8d154e75e55c34f18c406337579e56e2ad20e843746e1e47f2abbb8afe1f1d8ea34d87371dd79bd7b69b650851f6788a48f5d420b9aaa069a839acb3a602e37ac50783650c6198a8018ba1b327b1461f89d0a05beba93e322b11af03629c41b4a381b2bd69ada3d16d1572a2d54379d1708afec8388a4d4674c33996095b79701ffb1027c914b67ad02a7ea2b3df6db89e8185c94b4251255f0855558aa334d00671c68db9bf12ec33eaa6a0a9461204558f600a5e03f3f35ea0789b8289b3fbfc1a1f6f61a95eba985e62369891b2b762a71f186b216379ed01915208abb882217fb62168aae4ee57163d8655a8a34a2401d99917ef925325aeff5b725256ebc694c87456fbff0e42af371030d0c3a4588fe06250807a60452eb886bda98e57de10292882df1dde167cb0508e1d288f5b9df685d9fd3c47c45cf55d7f9640726ef7c44c2d5ce4f68ff0fe5dfee58cd8476851f8f6a7b26baf1180baf0904d4efa32f31e950a99878669c74bf683d703c5d49fba4653647a604521799bac4eab4b8c5ddc702bedff2fa3ee80a4378d0bf4d5a3a0f6ebd907a5be292d2e842d4d2e5aeea942dceceb473dc0db4055ea9700e3622d6f1a532201510154d4421df05c2629a4ad88aca8bad8ba99952e2157ffbe73c30eb5e29a8279f2b2c0e9f34c873f496ee4a892d32111dcf60d3692b5219e60adb97902a3b6f97132b418837a834bdc486856419c2fc9e5644a71ad134428ab5db1e2d3f4d9db7cf34a89ae255261d4e542cef274a412c8b0724acdf4048c02291593937b5f5fbcd03daf28dc60559fd24b4f98256dbd63a31eb96846f62afd34a7e6773f01a7bae0b00603f640c6e94a0412172e5cb727b51537302881feced062e29f171114796defb95c2cc5dd18d1aadc2f095b14dee66487bbba7d92d18435ccb8c43b542bfb0a97d162b2ce0e72ca54a55814e817de3673de72c969944ad5af73669c0f74f8d15831b1eabd60eaa319576abcc36cd45a94a5ec28c17573d7e35f322a2df7b9ef5583c700118ce78aa72564f570ba1fcc6344e00defc5214be5adf489e4f7e894c0e025ba044713a714fd965a1c3d46b382daffc8cfad206af2c232bfa27021c0f0865411ac0786d053414901fd89cc87f85cf0aab64e85428b8002b7f47f2f78e1507a2c7f61acc7d3c8e60390af26b6d0b3042d2a8b6da444cf0dd043b7c4f157eb96a250827c8e91a5e136ed3e705d6e77fa98fda31067538e3b61cf5c24ce55d5247aac46cea9071c1ca05aab3266ef1b0c1a410cc1425f1be2ec4f184ef029a520f82144f5927879a5264e48ae6118748a522dbb495ccefd981d81b1f5028fd5bc934239cab5bb05388e7fc514805b915ee20494807c3d25b02ad6eb81ac07bf9455e57d7741f56c82b60aec0e1da9c49512a09691257c00aabdc676038266e1d486397f76e74775f95cad0301954cf47508a9b1c7ec19fa58db01cc5ebd552136e183cd04adc8267ec5b5e7665f4285d146643f315f866383ee06d2aa2f57e0da95c0979f85ed4fa1f1be9226c0256c000aeb0fed0aa129773d20a405e77e13720fcee2a707e223e2321734401aa145d7b2620b52e29b96cad90e3eb55b2ae5176fc910b0a85922b1b9a9df11881c82645f414ccc63d2a50aff02b96aaba22930a09faf87438343ee18b44e5308a01a79eeaaeaea916281c61b899d72daf3a2e637eaa9471f6b1a0c086d2a3dac43df5dc5c2b0a1fcf70744816c2eb61d761fb7405b4be303993ddb6bd72aff800027d264ce27fb82f21e93061123a3c49f6a89fb134153ef22aac41fb163c4f8cab09700249660223729a3c0683f54fce82b9aa47612cddd62a61454bef17fec6f44dd92f82ae12ee712875947b93052252dc10712201d98b64179451dc8e7c4441d39315e47de31ce3182f81da01b89adb67e555795fad776c0d3577793fa07675ff8bd702e124e6da5ff710ec03a3a53abda3aace97d6a72674ae7ce44a109df40a9b048f17b889a91b28a03c302dcc34cb15ef16b9a215867c6524b6022a61cdd9be21ec0e9565020b92cf1cb0ab5dd82ac0a0e6f8c5bf0425d472869eaeb23b1d162c79fef93696df0514a472907c9f9cb9b74b57937e29700e41cd8647f15c22410b964c8704e97f36abb63ffdedc3c0fe64e96dd125bf4b409d0460d644bfaba0110c0dbdafe41fbe7ce9d1caceab2294a8d6321696ac8b9ca33a111456069c94cd6853a52302cc344721381a8481dab8876e011a80ab6162f656c224a88635066052f702df6af78de97576918fbdabb13fc161185e67f20da619b57d248898b6bf2516ef6fa8cc51e6bcef708700e9c2ca1ae01836aca4860d6e7ba9d1f4f13ba78737ce553e3e18c1729384878ad6384b586628625a52adfeb074a544596e8851fc31894479dc0c13ca5036efe709c74fa2729d778e98a2fa5024d398471f69fec00da4488b2a0def9134661acfa7dba304daae84eded13e55e07a0c8c4abe456cd384d7006d3aa52468c634eaf0054e60d2b5e20f25e61a40b2fee318c741f4837af0204ef785149dbe3d1dc10e0bc0a11046f4f518f8a148b83c4b11a2ea2ca77c27206bcd70e273979f186e6560a12713d4a545ec0e292592ad742c6907b75e392eb65bf687361b083fbe392b116cdf08e195405b1cd9b88388af8911ce289462c0ef51a5d708711e4926b4edeee13263380634f912a7acad2c7c0f93548df26fc7c099bba4101e8f57cccdcf9282ba6c3248e1c7afeb1773ec1868cbe17df865d7c217c1e088b02152adcb079eb139a5cb44d415872da1a55b7bf03794834a684ec945406835ad3c3835ae462d66e2abe43d3942206ef755c582bb9d79ac87fddc58a9c5a540e32e865099513c881ea25b5f45eff24f45e36b018c250d8933478d35cf7d639b62caa49132e7a8cca2dfe877f8eb3e062c38d5d191c5754900f9ee66230b9b229b0c98d24f61a86c793fae8f71c79b4dd81ea70a4d8fdf792f8872f87618096e4c0d205aa1569b53b382268fba7b95050a114c812f6b47803aa2b57383d360c159a57e4a82aeb059de5dc19117532d9ef213b20a9839fbd46d3cdbfb4bfc576679ef9640b521e08d6d33218ac1b81b5faf46ceefc883269c78031d2de682039dce5726b71c3ea0ffe423e19fa2f8033de5a717b3121911cc603ec0af7dbfdf0dc08ba7d24e77eea37bf2ce71d1778fb58b03dbd54b4fb65cdcba066467dbb9651a69901d6391d1fccf33ec8eaa44bff21bc10be71d8a8b133d0f578704d08789c015879f1a5cf8229c25c623e109ff22f6ca00ad30980c7de02bf1b028610fe91fb0e806466f5280494e738d2e986fc9c8b0177acf6d921059e10504fdf5fa5c6082e924008a0c5a705400f960959fca4b010b0165d51fb04249f79d1c3e39f19c414253edf6399d33e1ef5c3da8041601afc07e944e82da2c56f7bd4552749ae06c27300c709375aeca22020b99e39366fbeb398b40f2a547c0365ae7a84769f16d666a53bb46e5498e397bbd241619c940096559e7c064a9cc72d0c333205204089a5abe24aaee96190eb1df6fab932d56cfa5d88422c7f99f62b693ff9997658cd701d6f0da640f2fc93db37696eed1979400d4d9fca53218f0e033faf9eab2388be6548ce0521631c845adc4a377c228636c46d805902ccc49a828d6f158c769d2308f72ea48ee8d43dde68d0c0145f271aee5871eb8b8187c5d30ef9ba70322e7079d4d6a5ed3e82603c97d1aa1bb1c4c57d7ed3853401cafa4a9f4777ec444a635591340dcc42839001d8b69030cb305e355b1a52ad55ddefd158afde8a626f241082bb97287b09ea86e4f4accea8bfe033073b7cd7bf83b01dc624bbb297c8cfe479dcba6975679adba77a7e7494fd7990a66d7d525ef2ca958f95a5bfdeba5df6a6175bbc6e6e74463cc1fbaac9352d36896479472772e3ef9e79583379cd97b387c0c7e07dd8781a570c2a81f39aa7bb753caff9d9a774260612e3f941b9c1d4789fafffbc4a6bbae4ebf1adeb3ed43d05b9e7e2f65bed57d25479c4277655df910ed2e7674fd19f1c4ed34220df677a5eff3e615c6aa76cdc9d53ec35faeeb8587d7b963c8bd57e95320bf5ad4fcddd21fdc4e7f70ead6fd756456e312d79e78aee7eb7ce47ddf4fd9ecfabb1334e043af25ddefff8ff07f4e9b0359372f376f2e3146cfb25e7e5a142a8ed80dad89ebd818c91f5090802a3571ccc46b66c9b65d12ae02aa2225380e9fe46ca56d94443f6b761c013a561e6900d012c0724692cea9cf664f430761e419da164950005ba93039c8413951446b16a27240bf13d0d47b0d654d126b616c2d4d14b044a38d1773380910c69a7801a784ebf835a1f508d9d16201debb825a30f49b6608cf0da30e089d20c9c3583ec743f854806410020f81b295b65134dd2765e1150dbe3b290231126901bdf1f4955472c13f051ae31cfcd48153501af78659af0a0b87459fd60e6a15f895727ad4946141241ed2a900a1c002694dca64933b2ab06878e37bf40afd4ee54ac5b42c6969131208c95159b65a2b0fb0b8e6802c689e0959449eaf55efb8d37d9f562f41d4ab44e45fa9ac81a9671a4d9fcd121f0cd70c5d01f8768a4401cfab15bd3270101cfcda4c5efea281f4afcd12e93cd3c6d0fbe2f7be9acf0d484558faec09280ec11caadf421bbd1b22a7513fffccecf80a42ead732689dd94bcdd49a36c7f1f3ad27f18c7eb460e3af90ca092550d661ab9605295c93ce7517e7c669d3ab1e3d3aff73673be587166c88ccf60e32863602186e53a7e426b12285d0b0641cf4a0ca1198130536d7fd40727580ec7c126bc12fe2780442eb2d2996a01f368e41d930d3651af1b7044440e70ed4cc97a9947379094081d92f25e70df035c50eecc042dd52d3349bbb51026337d86aca99a86c8768c0a883453e0579d139d94058b72b53c2212369cda8b26d5fb126cff0ede76d156e257cbdc3db19eb642c728d99eda6b713d996b7581de5e2f3b4621909c4e6338281c13c66d2da7ae1bb55439a12047851e7aa6a0bd6802de9ff295d780a7686cd05b5daaa69f02f9e4e85fe21dc3a0a00477745973acb8f67cd44b2081fec4b07a235953fa972dab59291b99c4adecb8ffa0e2d25f5dd1195402149d364f2e7b7b3edd519d5656b5fafff9792e80273fef0396dd4c66c2f4af72311d8d9b4f2dc56d1a2dd7dfd7b28eaf1692b6a9ad70980e31fbd5f06f3dc8454db5b9fcd5281433bc31e368a52b390525fd41542261787e80c9c99b26922c5864a310fd804b58f834ca8de43ed0fefe82fa4f98d248d01760eae1051fbc780ca81e0ace6e6de91b9a8dfb720902e251ebf742a80a8be012935742b7a0d2a1b7a67897ea60b43431bd975c45622d02c1ce92bbca04c46da87577d1698bc12a3c8c7c8b900bf78a5fdb4e0a54b0d083650ff75e6266e691249895b2b87b0fa668b62daceba13e59296d6ea560d07917119ff66656501f5761fbbacf0bb97587a96ecccefe27bf0256500f89367c44a14692c9928ee7f83ef41eb12d0d8b9bf623bfbabf2f356de9a18f281540c3c99f965e21628c55fcb1d2912ab493519e934cb4cfbb0d4e283d36846b6ff184451c2ac0f2d011d6e7f2fde1629a233ab7240539eb7b675f28283976cd2b178984b961a7d1f7969104898e19dc9c427a7a5281fb63fb090bbe68592ba5682dec86c877d41a254312ee7de112c3b67f155e8eecd963a7e7c531f8802e0ac77638b67dcbe751f9eddff23e739a94f361c6c5f3401b6c7c686e1ad479acd250cbee607f0a8d01f288e781be6b226f4d0efe0dc8d8487a8b20ffa7721e571457fe1f82373f8587aff0dcdce6e81a013c7630365543d3b0bd9bba1969874e78a74635720cf0fb5f291ac8397f4bb9aa0c14f661f67b47255f413d465a5b5dac8264047bd6fea03e1e8922b3decb2fdf0afc597b05c015669bd64022ea2bf60bc659c3bcb7d59c7f51a908fc51591bbd79e425116a3479085b38f4a016d3601243d814f3725e31eb2f1253687b622cb4a69c2bb45888321cf2f551e0124981f386b3559e4c207c5e7992c61b45234d09f0d9df9352e36ef0c90f65600a5f6ddc49ade93c39c7faea7fd931737a1204100605fd790ad4939da4d484d7e7183431470c6eb0af7aa46f623c899307f1e46815da750fdbdb2c63eb8dcff01265903d937b10b2e025aa809034740c22b782971da83df9ed25835fba32689f55a38fbcbd47b8f8d962c06e1598f3144f4d3b7d68f11dea5158fa96fbe5afb46512e14c2a105c2b852fcfedcc10e44e4d649e5808447fc4e1ded5942bb2435164a532e3990af17665a77c986fa920f789bf837347e9ac44a258178d91eea2f63cf2d0c4c5ccb41e21290590ed2d08cb82ad8973eb520727a0c69a86390f33a3ee451705ff0d2a13f4146cc1d655c2f64a4f7dc21f51c56025e96106e72bdfd07ef8a09d5de73c37c4c8a2b9c0fa23aa12399d453f5517b2749395dccfb1297c6f4dd2b6aa33686c581284abca790aecb464f8d1d2b87ffcedc5f5aefb8f0a57a2c85ba4364163f3bf6187ac259dbe1f763c9f38fa0fc7646d3369613875106d78ff33573f2a0966353b86808693a9137e8026eec71605e9924d338572ef6d009fcb71120d42784985101e92ad786966bddd0682c8c139ad629eb90d8a472b07768b954f4f60ede9ac26a994635592854c6b6872821916ec4dea989652e24efade610735836d2964c0c42a2cbaa0d1558829509500fdb2c15bdd43408caf89bafb4b404af701200b4d4b6c3cecb5a85ff57426e3f9f57bb96a4f52c7f2711af060f583772b868b043c01efb628af5d91d0260729393ea7da1e47c8cf20768cc00914356ba7fa552c81d0168055b5795c0eb0f1c7fd4b1cc3179ded6e16bc7d15b64714c6df8152c90731869c1b992a988ff6da48e918f3d267949893bb1b2ac27cfa6b3e6d7aea1c4a0a857c1972d1d391b451be427d2d91c2819bc2e681e937573810510d9a9ea5452f0275887d029188ca15ad151975a147b1d385a533e290b9d772a5dab6c8541d1af43a9677d1e94560d436c72ae72c08aff07d75be1c04bc225a6116aafe17a562503dac29dcb9452fea4e5f254d8d4fb1e72548cfdee7f39a1a8207c5123486cb422573b681ae6e5f906fd349ce116094b7fed7e80d9c1f0c6de545897f497ebc9257468755ca8b10bb1213bd8cc9f824328ac1319c3baaf59fb40cf269500526669d583fb2f9ac042e3f5563867747a6a18963b326632068beb5483b0d374629ba31d7f995b66027c23b15a558c0cc821a5cfbe44a0557068f4a07dd35ed4b0452053a408d9c7f02fae1d1615f40125a4d07a534b991e0fecb9ad160ac3bf490d3f8d11964283d12c2cea226566d3517c3b2b32fd3ba870719b064e509e571871e28ea42a69c18ddae4e4d276c7691bb6d9cabbc36da807d8cbd7c85c7440a2a09696d6fb9b79452ca24a50cfe05d8052e061ad729692971e59cbb52952bb4ebba9229891424539222262b7eb10494e30cd0456cfbe7389dbabbbb7b132d32a4a0a05870b2c1c9054a835a9ad8feb24586ed2f5350b6bf4459d9fe12c582ed2f4f36d8fef2e4c2f697b5c270778f53b223b11cd14ee81fa6a21216a51cacf560dcdd250f9bff7447743d9c50862203b9f7c5dd5d6aa14da32d8ae603ad086602e317ee73082c93b0eb12592b348d7a2e6e84ff5c09645760ab11ab39bfe8ee4fd828c51f672ebad85927090d9e5adba3ab6071c6050daa60db716bfb9f5aafda2e62312e514a2b33b75267f606b5176b1bdd369f72ab5666566633da6add48658c925a1ba5b551da6a2b576fadb856add6ad565b141685b158188b85d75a6badb5d6da7bedbdf65e7bafb5d65239c2548eb4d96c3bcab3194739cea7e48e2ebef7de7befbd17e38bf1c5f8627cefc5d1e1807130ccc97b2da594524aa9c598624c31a618534aa9962b4f6d956a75b5266bfe46e949c90946293dc1283d85a7f00453ed7a4f544e47a7a3d3ec343b1d5debe3a2d4c745e9eb45a98bd2d7cb25514532c44532c4f81da3c23d312a868aed890a276bbefcacc3519ad3566bcf5befa53e2f6a16f3674dfb3410a536b5578ed4a16d0d478aadc7b9cd57622e6b473c4e6962471e3c861ddf5db1c626b598443bfe0c630d2dbe9cc51ad87f70d8f1fa137b96407b907975c485132e7ea88a5ab068c92175c483dd9eaf397dd0a525bfd51127f6fceb2e7eeca92ad25ab0f0969b3a426e89b1d6ab15a51f3863b0a0d0a8d56ab55a2d17267d9228cedeebc90d83e5c89eda09fdc35454c2a29483cdf3c572443bb1e753fd63cf775351098b520ef305040b0a8dc2300cc3d00583c1603098f5628a9330fb88ae8713ca506420f3eb36a3dd117bbe6be1538d13ca506420b3a4d9ea99ae9f300cc330749d8e4e47a7a3d3d1e9e874e412778bea45f38156043321b5d8f3a926c32dca9eef9a0ff6fca915d9f3256622348a4939420ac3300c4397cbe572b95ea838eac5fd02bb2e91b5620e81a54bde072fd19ebfba9fb5624fe9923f2f585018866118beac562e2e2f5ebc70312fdff2ef53fe8b971718981830625a62627cca186c57b0a711feb3e7cf6b5760c4045c463e129ee955eb51331c6aa355ec41d40c06868b5e0c0e46870346a7c385a440770c17a3c311a3d3e1b098984e87effa69004cbdf6fcfc9cf73505fbe8f7f9941f2ec52ff59aacf92bb0b6f0040ed5b69f4bab87066936fd6a0ba9d72b841905853b65b4e767182e36113b05b94197560f7beefab9b4e24c0f2d1f7469eda9da2e310c544185c6010617f8f0f1c28e11f4d4a0ab682134922974d37af5495efbc58eb2244249604c324861f268bacb6748677567062dbf15f6ce0c3acaaff2c039ea54862406b4d28a04360492d706f58e5a88c4e7daebda20ddb30d7a3b227981620d494b524ae9c5478ca062adb5588b479414496dd3b6233e7bbec338215bdef26ccf2330805876a4c5d1cc6938ce44d91336c506296c68c7277cca8d9cb98e9331c292e8203cc8602890c16890c16090c158d04266a48a2946aa685adca291222346ec54786720333264c8085076ad9e457303c3ea5934497ce8d55b9121397aa1a7870c891559121e1992231992990cc91449fdc664b59682526e32c1c488901d3e1809a2779419f18103232e8c6084a7c80e808af01089a2c813292b78a898c2e7851b90203111608b202c66520c8981051a2e0533858520741426f8d1449a0815225388141131820642f4103d64c890213c50b1a1574f24c88f2831a638fce70a53ca13d89f1df2dcd0b07ea56b581a8baadbd42953667e95b7c2ba4263796eac0f99f9927e15f748196594b4743dbc238506bdc77de8f7f89835ae59d382ec5f3f47faf4ea9f6bf4296b2dd54fe6ccaf55763953763972db5ee29f20edb51ab62ee5f55b390e638d62ec32d8ae56a9d4a6d53bff849a5373c80ec76f5d8e74f7cf9c56da8270bf57d3eed55837746cd03a3668f0f6ecf93a3568ed031db6ef5fed737eed3bda77cabecf7d8e31c618b34cdaf7be94524aa955a3f933e79c5e7ff67d77778ab42fa53568dfafd582b4c7729fc6793a3768ee3b4dcbda771ec8da57cabe1f3beecbe9ac947d9f73a07db58f5d2acc97d48d07eeb842b3f6fcc98a2987f11428cc64455bf2ef258775400a1546d2582db0e7eb155c3a4f6ade79bd8913dd66a5bdcc5ab90d04aa6cf71eba96f0a371caa7a4d6a371990314d1d8f3bbb9993534307e008dd394f0a3e783342b97f18fd9330663ed34f64d0935686f4197307d95efbd91d2346ddbe48623a594d6154c0a8906537b9b7347070ab35add48c5c97192ab6ee33851d28e484bff406b4b624bc2ad77942d399253931336444a397d49900d729c46f1121b762ae69fefc71edb2b8fa4e133666f3ed2e75fd61e1f1ab69d9f4e101aac0e52607bf5a93d9315676a0c9186bf07c5197f9f9eedbfa1206e3edbcf1624d6a8ef79839bcf762195c72b4fccbe1f85c5998f33da96e998ffc09ebfbda2983e69a5b6d66aad8d428314466151b86b86339ccde44bbec0188b62c7b52980020a289ea09fa94f77dae5d04a29cda9b556dbe5586badfcab93831b3a3998cdc230075ad44a1e2b528ec57ce6eb879cc9108374b94c105f0707ba043b3e4d7a22737bcee96353e971f27ab496ec37821ee7aa97690b3b57ae7ad972987ad5a33b4434a877764a2bf6f83a45a94c81301b572f4b4e049b87088f96a52fb8fce2c5567ac9b16d1812ecf819c60bb2d68fc3780434d6a071a6e7c4a25354973a4ed312b76998a325abb72739bb4b77e92e27e02edda5bb749734723ab535255b3a1c5287bbe05a54dc74195da88b8b4fe9824aa55a549c0bd58aae563ee54a8503beb99196ba7c42f403062a0c063a4ab87f06c01657eab5eab0d9170337d5a38ebd0cdcecfbe1186a30457f52bc030d1960ed13ecdfaeebbc0cb0f60931775a06b90f646deef1bddcbe74dfbf4fe336a72f4e99ed5930d69f2e7d0f6841cf982c96943c9f72186bbd5a81bfbb0fe41e7fc59b2745d38feb26d522ef4c516249de5922899d1be85376971263114a7c54e6821e2d891ab0adf2fa9442cc40831c6ad8018a175c306c10c30f5c40c443142e2a440617b03d5fdb9b7a23b840751403d64068a62b4c424a3528f5d8544decf991c2369618f63cc134107b7e345db1e74793903d3f966ab0e7c7528f3d3f763eecf971526f00455ae58a352492c6d960f30bb61e6c43b4255431ecf9f2883bc1381bf67c995fb0e7cbad077bbedc86ecf9525b62cf97d49b01458327584b186bc887c1e21fee9d5d1c700b91bbb006c39e3f4f30fcc39e3fef6ccf9f17873d7f5a1aecf993520f0688d5ccb270ab12a738a03454b1e7fb0c1fb42cecf97e8255257bbe531cecf9ee94863ddf698a48832798103e936c0a873d9fceac0bb1e7d33977d8f3a9eb843a166bc82442b0e7a35a24004f30d40cf6fc2a93d8f36b9524d8f32b9d44442436fd07c41af2e901b42309c6983dc1e4a65a7783b21cc1588e9cd0f24196a33d5fbe0b982a0adcaa3dd71e2121553a6b5cce19bbb963a4ab3872a27da0a1e8227a0149571610854e520455b285921df890e7e7e99980310f8cfd37904d4bb474acd1e9b8c90cc97f9228f5595292049272310d8dcb9f965a37e1e6c6eb0d9d277a7a514aecc51927392c91259f25b2e6fcb4095bc743bbcc0d8ee338aecbc1710647b9e1ad54dfc65461dbef63c1f4d2d3b6ce12ed9f330a728b52e9b3f64c6f5f7b29a8360a20686d6db3ce120d462336fdc8000fd3a16d9f06717fab201d59ff41aa33cab63f8db4a75792666e5f02cd1ad32b494afb0fb01090514c6fb5281f587abaa37e87a3566e775e9c2c3fdaa0bbc019ce706c579d259afef42a3059f4a53781c9a2afe3839e1f67fc233539a178c7984673dc4d35896babf6d0d0bbf6c85f3529365b959b9ecf92246c729bfac4344e4f6ecc82ab8b83820639d2cfc67b1ae17867144683fcf14b4a7b847463735677f9cf6db9d3a4194e230ba3d46749f5a8d62981fcad57d9fe567a28657b954bc3ed7f230d630dd58ef2f1ace4428e7589d659a2f58eddbcd564b99e3a411a8c48f502421bb5f1b4c9efafb344835868fb677feaafe383e626cb7bbcaa6d70f66cffeba5202baeb5d65a6badb5d65a8fa80d7294d369b5314ec68b23152b524a89b5d891bbbbb60d45a9b56e1928e8de9b391f219aa605b222434d6288627444841403a41f2b506242c20a2028487a3822030c9e9c808222a020e9f0c41119780f80fc60202f0d480cd6ca7ef8d93b64a0c118ceb47c12e45a8b027d822a34685003d12dd057681d689f4fa86c90159b22eff8d020dd2f6f7735d5682066cf177baef674a14200e8f4db59e63de7cc1e00203e01ec0e84ddcdd85d27e37bc1ce9a63e974c42db6d092feb64ff4444f9df4a694d9b9c5dda79452cad8924bb8854bc916a9ca2e6474e1a50f446fb3d0a94aa552a8d3e9743ab1b47025ecb5ecac594c2653a9ebbaaee334e7dc2ae7bc699aa66998e34af3a5e7ed8c5da68c782bdd9e222d4484109110132124423a08dd203483906b6848c8c709f476ef9009b236c493b1b50bc8816eb284b5d64693236cb5ab26b14bad66ad756ba7b5785a9b835e400ff4c43656cf72d95136d4828d893ced0dfa6e31c20eb41c451117f49d32420fda14832cb4dd51c644082650a8ac0639e2a8a7d0401aa6ad68a123aad6ab6f4275e0af63ca183f3c7d7afd68bc5d0ed96aed78bb1c31c4b524a3101158bb5788a8848598dc2b84045b211d7215ba41a34233680e83766d70b55ac9847c50a11e1b12a9dd807960f137020d0d67adb541546c8bb79ddbea1d4d74dd511604c50e7a42f349c3a560827c8083202aee414a684130d0412eb0ab152b2848500f4143623b2c68f931d68849b4b5d65a6badb5d65a6b6d6d4d2472cc2610a48c8d4fdabced4a2df79a76e7f110f1ef81797a6e70baef81715858bc1e8cc37de7f1b0104bdf8306c7f43a87106b64224b06605b1992853dfa310441da4429f349d7337996fc6fd7659d5938f74e5b9f3a2e97525cee3454cba671257feb815f0eedc371467b5a34807c9317a308a069cb2f793116e06a2a7cb9127df7b42e87b64110486f4a1af2ad47b5e7d1f88dea5a1795e2e99d408367a6c28b356ede5ebbccd452bbf378f2f3f4c0383844ae2771b0e75e0a2ae84d434e1cec9db6e6bde7451991359ff342883293c6b68932f36702f6bc5fefadefedabb7e6d138231d07f5349c6cb9ec619c8b9331973d8b93352e7b1587e2384ee62ea7bdc49c86ef35e92d85428edcf6c67df74a1b3b9117fce5a0db7ede28c89cb70e859ccddb3cefc57e39e8be796f4005dff4573d34906047b781993212dbda5d6a7dca88da71c6c413b76a2cad2fbb1b3a4525a5a5dae108c0a61f1dcbdc719ca7744a73bb96b48d3d16f0673ab1c418e3885525aa5d46debf1d0e8b3d3c65ecc7e918fb7a7176392c8fa35d4e00367d3c6b6276748d966afdb9eb073ae065c719f348508f0f56aac87e706d10d7d60f23903db992e443d2931a3c097a328327404f8c9e0479f2e324e9890c4f7a9c4c7152c55a8b35274352dbb4cd49903ddf83b8215bde72a501c44e7a9cf418a232b4c59015a1212570900d9dc004433cb4d24a65cf2bb22656963842d624260be2812c888a1e599320644d84c89a30913551226bd2236bf223a33ced20a79c2c3fd3a733f9b141bc9398b89c490fa64e654253ae10aa2214eb9125577e302521b914a7d5c8674aa60e0c5aee287750e1d86d52299d16506e522762b0002992f4a044470a4dabd4569c99d181961f5bad3813ff23327d7a0f42dc690f3eee4e6b0f3c4e012839661396d369b5174b9fded241d2de8a333b78118b352f9567c7af218835abda8a35f0c7f7e2ac674f2091e51e825833e334ba125a09aae2fe7219a7311a7c6e8c9d9364d8ebf57abd5e2db1d96cfaeffaaa2fb7402f156c4f516d81aaadb7ca1cca96d87cd18a336e8156b3a6fecc9758538180de04126bea15f167d6d4d964bddca626b98c3fc65aaf5e3f5ffed5479260855821b9c5a8254acb103919966119b65d8740749126325551322a852557a9a84454f24965818aa1a487faa957a0a2d4d9ac410d810a822ab22fd490fd4129b12ed410db8312625bda086da4a3e8589cf1b74224097a06ba881cb6bfed70c4d8f34b2521d1a530ce5060cfcf34d3807052126d4886cd1a6d87fa721b7c65caf86b428cb4209a4f90e643e301b24a2c901d6261f6884d625d1bb518c5190f8d70c4d8a6594daa496e1393b6bfdca6e43365fc830009810dd92525e1f6d2d076cf516239cc45d9682649c843441afe0e032bb63f2db926cb7f2749831628dcfed4cb4071c637297106b4405b878a969fb51c370a78fb456cd5821f7a870c2f982db142e643cf0e332ca976d2c9cac17f4deffe34b146e9fdbd46125235a7f7c735749bd557a57835429290fa6a1549a37ead5f8c33e0ac9fab94dad2127154aaaf55240975ab5576656189acfa2b2fba4cc7f2693a59d5f4e904a1730d8a33f525529ca9f7c11bb0057c7ceb4c4f1a459c9131d67ab5fa67b168a6cd76f123cc1a8f4a1af4ef8c813fc69a98c8a20fe363ac8199d37bf993d7f29f078097e181f09e07f333bc109e4a90ae60280911abde47d8f541baab0833be3e4dac91bffeca6d627d19eb63b791f195ea34a1551fe6769e684c3f86be84c9a058233fed3a00fcf72d80f0323e4bcef42ca667e1c18128437f4719ca81c8a2bf238b7eaeb4daff988f71ff972777f2ecde79a26584f02be07cdfcb78067c2fe3ebcb90f1217c1e00e1fb1570b0db84f0f475ac91510f923043d2a0cf3da5b2bbb1e344ab5cfe654bcce96d4c1d4278174f8719af0ae1eb0c109ebe02dc46c653bc4ba58f0ffa367d8c9fd6dab37c84f181beb5077db37c4ac378234c56fd19920411228dfab400bb3eeae9ac016f42f0583471a63eebc5e7f28178830000af2646968b0f8c2cd507d2162f7a0ae581738333a29782d45e169b7ec9eb3c50db9c076a333c168df779d165e64a843ded0a31662632bdf69c1c9e3534c699a96ba85b3af632bda464dc8010d358ddd6264b1ca1a18a1345d880e33b8a48a1e224ca110b2fe078d176778d527777d7b14544ec221ba05c299a014a95221f508eaebd50a66c9042b1019428505e5060114a0b8a6b4b6dd3b6a33ddfaf70b32d6f7968cfaf498018882840fc00c104881e2092000144b405110f887440e40451124444100541e48408882888c845f422f24139e9f29353729c9a93dfea8349e9f8a0fde38c732bf96320c652b106fd6a2fd6b65c3587e20357d8d1caf8b289966f1fc43c5cfa4db87119e99407bef3de7baf8cb8842fc6c1e5603c65a4b896e8c77539a9c97296c8f2bff75bc51989fd4be06941a6051c32cef86b16f3d064cedc0dad3361eb78e855961aa73d77aff6e93813673650dbb933c1c4719da9e3913b19272ee1efba9cfbf8bb0e47def7cb992b7539f9b90e07d7699fb3a9b0b7efe53e888118db276ced0355d8f8c3f7cbe11fa520cee14fbf3835a9d990e30c70be64e1951d656190083bca42a314e4964619b6a76adfdfb2d851b0ce122d272b0afe6864c51a71870da7acedaf49a315823638ff612a8cc71a2f39e2cedcf7adf7a2e3be7dfbc53da78ce27f3d198b336ec3a7dc62832f3a6c7dab036f10bfe8a87fff7e27d80f6f1b337ff1c3af2a449692e20bdc70b322016375a58dcbb6d471f9e7a6dd3ab5e9b1704f676179d08578109707ddc77d388f041d684b70001bf520cd9632fef4ff310f6a04780fca2deb9657c667615f7419d89e365c663e8ef18158c3f840edf281ab3d3ff037eb3d1e222fdee5e5f30b4fbee7f558e11079911f8f967ef9170ff3302f3fc3782f2f615e5edec694302f9f94b1b01845882c7fe1c538e3d5bbe5c7ed79311a0094fbc573f15000416bbff82abda5d3bb78a7cf927b2fe6f4c5ecc2437dcae3d1d2a83ffdea559eeaf3ca43bd6a8552ad509f0d8cf56a626dbe0bcf61ae64b2e6a33c0f9a2cdb32a24fbfbdb76344bfcadb31229f7b970149e5ed18d1a5df31a24daff2768c6830becadb31a2538f7abc51a857792d5e447de04cdaf203eddf67f1fcad17b7f660d4d579209dd5578d81b605db96674f5aa31125326c7718de218c696a82a2f0c3d00f517ee8c1a545a9c68598d22a420fc4acc42d314a31c752058bbb136990b51db6adc3aa7825a1c11abe1c365f1e88b9b4ace468a35b42d56b795623adc2746ea0e5e6dec6cc94935d8ee6810ad89a95580369200da481349006d2401ae804ff6c1570e3b2b5bf2d21b86521779e68cfc08dddda1bd9f7c12d8b3db54fef504283d568cfaf46d5a81a55a36a64c3ef11a8807d82ca75a7480a65454831e84005aa3f0e732f56045424c4063194a1a2b0284867891b9d291ba83a4c1405d95005921f3bb448802302227e8e400205456670271140a2ca0c49e410450a1c7c586188e8094f0d6a08410e7048420251ca141e7cf4d000c88f281af88114177c10441330b49c88080060092d64f0e30735481184e609989425928a986204140a08b466300b97f3a854ad9557b1948a68240000009316400020140e8a4422399063892015dd0114800b62923c524a32170984814020c681104751144631c400430c42c630651022c201002a0c001196e1c65fa33fa8497816c4bef625995d45e57dfc017bfb87779d113486137b1c0385189ab1147ed1405d5139a3a3904db5027de862a051be4f571fa7e1914d39620809369eed9fc97d5a638f77dcf0c33ce90937279e81599c1d167188d9c78ed47e392cbf22276d85e5cd7af5f9bd384a7cef3050e239b91edd13148c84653bf3d641790f510fd8aa2c7936f42f4a63416346b035ab0299de79dfa320bf7113b5251e7c88c3187664d8d80d33961f90e223809d31cf20841924224b815447865624c8bfbcdc89f77dcb79089518bb7758b2d4f0a4f5f274135009c1095c63170c0bc22cb46690b6a4d336e24b44766a7016d135e59848ef0763652ab7a26b39b79813df7c1c85a4f16322f9276cd1e34fd45c22a63bd62491483ac4439e2417df4a420b4e74abca82a15f2cfb50d182240e386c98b0e6355f56b4f1ca23629f2c6830093c09988f906bf8e7aaa501f72809c834aade49380ac770d15ba44b08442fe26f4fe468125c29a6305a38a1386b8a0eaad46114644340e562b6cf56442bd71a58a74d9bb3fc9f02de163c5e38d123d9a5cab88c501e1861e28783288e972d06e48d17c1e8b50283e3818d5c265beccdd44e3dfcf4d156db8aef61e21bf909925e7ffe90d94e0688a902b01240f2f776ddf101cbdfc4d3a3086ed04804f994fd041492f6d74388614fdef8b0dfa266a02abf109cfd5bd71798a7e5e0a9d66ff971126ea01d43a76a6b9f7ca324635f452168138d7a04f01e233c6a1f6e1b115b2942a11a558f936a2bb17eca3439b41e4a1b9614c6ccec94f8eb561efd58d7509a9bf15077f4c9c7aa1989d91381270d628d8360c3690a32de85dd66147377ecbc369626244b42be659765e0e13618aa1bbed7988ce93af9cb742293675541d106ff5121702aa9707423a9f5e657db2e75369dc091ca8e91b6d5d104b95461347d69fe49f1bd78de4b5a3f61c6ff542b351cd1b71962bd8ed5341ae95fc7e6a50e1c22f5a5bd4972336300e4af143a3f9c6a24fabfd153e39d3991003e5ff565cedf26a4736f3e70d716b7d36de5823801aed2ff719582bc20fe75a6890ee0f0a07295fe637a11c1757805267e26fde614a6cb1badf412eb238398dae265a506090bcde05ab2c6ec2e0fab065a7370bf56fe2a4b2c0fbda0a09231c4f6d20b4db4e85a41854c161d65db5275d41a8474721ee41594979a76c5685f4a58d5ba9a4d83dc8f8de9b14b465c4ff411886ddee908d74128f0a1d1b5f3f21daf232057c90e21e33a7c80e3527d61665ed9c362d311460b781f815c1f768962184bf6a8ff5a5def01e897366018942006fb248184d8243350a718c3fdeac84dba290c510d05086381c6e2abc01dc8563336d2ad2491997b80b4bab81047811b51b7d965205768de205b57672b71804fd63c442cc4d63a8ad791c09d021cda43878034de1de2520dd94f2cf4463c7fdec88d12816bd825659e0986d39321ae6e3ed63650696922f651dacf84ed3b4abbbd7994efdd2ec2d69969ca65b37389d033d116c30c0ae248edaf126873804f4e8bf63fe2a4ea1973cd2d7ea87550d4c806f4a56784e4af98a19936ad406ba6ad06996c7833c92ab65d130c2862482d33d8621892d73c80a58e2f60cccafa970ecb944c30459d3e6f43ac6e5c2f8dee0933cf45b53f29a8404f6b8c5c7f0b2e6b237b1ec6a1bfa0ca0dd1d4aa681a9279ca491d6f53c271126060e8c9eba696b181bb7eb76addfb58a49872787c04470745798ece197077a3b37f7034205df5d9e8a83b341ce30888026ef0939f24fa6fc2583f78d8430ae795277d38bcff31a1f0913191ca2de3134718031ff71fb16f52c2d7f938159745e263df8f7f6e815ce142801f1f50596c51a1402bc73000d738a7b35be56a1647c9a65f6025aa3b8744472224ec66da65cab70aacd2fc024a3fccf50399b925010a3f9ef3ac2764d071a5871541c6d5e186dc9573d6e909fff5a49e2392fd3fe9af41ab1e8f1572b112b2fb6894fc839909f64cc80764a5d52a8c9808c51f9bc4c5eb8e3528adc09d04fbea633a0ecb8bf442524ff370ff15f21688a056386e17151a370f3c71c0d86cea025ad92e6d9b3ba487838b05573e18a87766286a1b74e18cb95a6918b9578aba43e413e39143d9702d839315bcc96356b0fe504048a321c95a305f09f15ba6a93f89c9b00b045318d5dd5aaeb19ece55b43ed192d0f40afd0129ae22a476ca0808c30c68c24173d744a188a410400b9ac86e29b93a67af4ff750d70f4f1c069369d0415bf97d8e06911571208eafc6d31af57ea5346242518cc058ff9e1cf5604a493fad7b8baab88e5d76058bb1b4ae884b1978e0765736f1f216b5e41b4f527e9df08005e87aa66726996453c0409626b920534be21598ac2df7d64a81792eba711f6aeea3b50362add6938ca225531371d7833d803f54c1c722a50aa2590f3538e89b762156e259096060d4e74382f8112632a1ef7b5f526a9a64663731c52d1f1307f2eaa3454fefc2d7bc567aa553608e3f462708652e5c2c2a07a0aa9f4cb336f28fef22713d0eba7ab6313076693177fffbe3b30f9226f7a4d1f88ff80a18a011d7d2e4590afba0f28f1d69abbdc9f1a117d2b3ad368a7c883e1d0a2081e7d2d09a63ac67d2468b0e69065c6a789fd39fc6507133f93d7e9b953526b35cb3fcfcab76883f2d59d224f9d6354de6ef09128a754ddc3a27304082dc3bf8579d52376515d7c1879ad79acf1019b3a55bc82df6f1b685edca0a927632db43c78940d065c5d2718973768a2c81ccf50720b7eaab25ff2a1c16b92b1541508042412156a251cebbce05eb1f510e0cf2b56456b362572e53a77b20ddf5123ea6f13283e2353ca18ef32dfd510b07d6117a7abddec5120c19c601b195697d5eb75689cfe8e4d49a0b22aaa2353cf0111f31664fff7aac5ef088fc96e5ebfe16262ea7a41591978304e84e676c0269ed2ba04bdf339a396c4f3aad20c598c05bd5bb9a1ac11166ba4efeea8c3cc22e0e37b6d3c79b134b18c4c9f32d1cd3906882165d23dbcec88d5b0085ad35e082d8e4fbf6861bf7e3ac55bd4dee7b7be43f853fa67c9e2eda0ef4d9ea8bffaa69982a4c003fcb618637408bce3e0951463a0b489532d5c67516dc04b2199eeeaca31f3853fdde62d71ff0d4e328da6036538b56c138a8eac0226ee83b3d104412416e722b5b22d27f20de5116ff546b5a0aa0271f445bb7a599110e0b9ea2e3e808527b5b232c089eea073cd6964910cedbbfd743ae679970f25782967ace78c68c22228d392cc1d18a6ea325ff1dd9599f064424a09c1f68f6e35b81806bd6c954ab49d002488aec47afc24da31a3419ac056804b6a38764fa1e983d3a7a765041a0ace0492e78ca7ac7de3238dfae7b7b8ddb7cd72b692bd479b4bd31cd025c481b045e63f69a16b3ccbc3742f4de37451eb634581ba28d6bc1d2428fca08bc748f7511025be3f63be2175a352431c96ddc284e797d42136f6c82918c7a13b5bb600557f28ed64509fbed491497437d9fde9040458df26ab8a959c7b77dab779bf7f4b8bec40543019ec43cd53658a1158701999284e959bf6158c836eef7309d790c14ec8d0913ada50e5c902de966a40964b1cb3f6a26472235c6b8a5ef5163be2fdda0857f5c793e7a55c3a67110ee0866708ffcf7643e5c0b120a64d3b4a1a32ca059bd6e790694cf3cdaccfab9d72ccca481aa41f203d90d54c804404d7eb01d17cd041c036de191a7924085f02e3665ee13599a50532f071f814e551651612dc0a7dbac00be5745d04b89506f6c7f7a772cfae7c3edb4e7fbc0bc00813752d6503dca08b80a9a29d031a4b1ebff16f0dcb3b40fe81ab70282ed4d53d3ed92bd6fbac3113c3e4df66cfe0079541fd89ba701c00cdabc46fbc9e1592f9f5ad05b970021f6a6fff9c370a19b95f3ca11798bffc1fe38ab0b5d88342a55a625b1eeb47584fb26920411c52619fe365e4f9b5103b3a281e865963a45e086edbfd6010d70c4490961a09c20f8157d53110bbdacf7a2c6219b824640193e2d447e1aad6d769c3f931fb2d90365a85e1fe4be9e4f89ee2ac1934b712332eb50dee73cd3bf97777ef6616dcb455be4b67932401ece7d38c30589236a78b252a42afb976936302834fa83dff940c9343f672d10650a52026be20d69014ac436c9377ad370428f5404a070556c229a1be57ac858319b6f6f7a0f95bdada1e9a202ba2090db1dc2282d052dc68837f67cc31eb118a7822fbbdfb0f4ca466863c8c361f9cc60a9c6b59e88545391d0404851c3b86cea2780e2b044a9d33e829cf2afa3438af61a10c9299bc296f23ba4284d53b3df11faff3897352b16b06c80e2c6906605c726b227d30bccccdf671bcfc93454c04e2420bd37f1a6233761564898d3cd302b5ee82591404e5e284861826006a4a6cf0ad7152ae7d32eb3dee4e8c2546f14fc72b8f3837bb314819bb5b8c1f1bc4c915ed0996d0b2535e445078cd0bd6169198a1b6937670a52d137ccceeb7430d8ead1aae07c3c7f840884d3862ee88c0163e7cc6bac675f8150c3bec4f8e962c37fd5b27b89f4429532e3e81f24365f6168d916ad0da89c9b98246df2c1788098755850af67d4345522ae3ec12eb7d807d288b9f2b482695470c7f26d0e4f7711b1b88e44f8693c54b607a9e3dc96c3f6214175800cae1fdc309340b369f0672dcbf156c46976c96b75e86f1ca62ef3cb13ef229b8879093ce515db8f95d30bb79799e54babe334aedf4ddf1437322dce07b1f138391a5659157fb98c1b94952016ce436b1f2acd0a2490e9c7741fa23ca7af25085ddfe7c6838eb094302a88970a31847a59e1c5f549d3c1b84ff3442c1e0f35e79a5e40c40f941a9118a7e28555035bf398f1ab5ca5c28a3894f0c0a015094de2492acf1eeb43766cf36afe0f66296d4802913c03583c8b782564e0818d0fcd8e7224190c928289c9232cfba2d5e331e29feea87845399c6f954f3a76b30ccec7177dda3e6c23f4c1cbd189a5833b0da9a5c939ada8f481fd2db1ea20b286655b796a436058fe4b9b2acd5acda316055d13be1db7e8a0d4460c395a8768f3f40e97fe889ba5daa3e827542a77fcc9127a2194ff988e25549431311d5b0d29718b6fb42acb6150c07030cfe22a699e35eed3fd3e1e3ed1e8791698d2e1aebc27a69f80515c30ca54ce4da2bd25bd6696e364b92d5fba39b730a749f061026d56bcb64b57cd978eabcc03f6f40ddb38472a9b44aab760ac607c6913f0729f359425a9839f2dec675aed3d305093745c87e594d9374aab3d7146522c51afed23e1312874c6ca77e0a7a9fec572725b3cfd6de6e85d3329ba5b62478cb4c66f319eb7cdd6cdc8665e7b0fa69c7044f738ce290a3c9f1be306aead9b3cae80a1040a38a4865c47316a1943105aae3f4f56519c1693fe0fa139ac94be2c692e8c319894b5b5346d5fd2096bf88b85434746990d74e4d2a0623416eedab0f1e75bb14474744b95f4278f86b16412c892c288c6295dfc0f9afd3b78bf8ad1e8606ec008b705468cede29e9d55033419a92a251d7a9efd5c791865c26182b82630df9472e762bc8ba7bf9713739b7796788e6499b3b7f9a6c045d94122d84c60ea4c0f1170f5a5e78d50ef68503c80c5643209c7ab08479039f048c5479be0d1bd4d6ba62e16cc9665600d7388d6427351419a2819bf83cd320282eecc5a195c8572e35803f49b489fc0481138cdbe0b1289575a494bfa5aa9ba5666bc470bdc0359c920aac8e597cf2a295d7d82311acf1351336f59bf2d4b86b5dead499ebc483d0cbde7eb5070f5ccdf8a031145db2d890a057548bd36baf03973e3ee5b9b29aea48087ebc29ab8301ff1659ab7c6125d0695d364ac687056ff074d5dff951e9c275484e8f6826e6fca9914361b7c5782a66915e7cb27432f946105894db4dbb182be2bf8ab2a76bfc6d38a3789d07f39411ea8638f9a9a3195ec1f5a499d323ddef316d611eef96189e898ae1233ad0ac3a465483e342875bdaeec35900909803ae249e7e1057cee9bb9d45b5d048a99a3b11dc879c991f5165081bfb213b071744b82eaceb69176aa34e19b0d5636761422bcaab340b31be4db1db1edac0208c854b5bc70b0280093d6f43e4dc3ea9b7b0fc7cfad5c71a155f682b8c3485a071a716f02e0a1dc195d4c07621921b72033dba5c3947d8d756663a16a8f11da93c42489f879d3ab3040b27c500f210049ebf1cb51ed084435e5fa48c2d77e64a3ac0b20585ee0efaf079cd9948a8428164c1e684eb8f197e515b8c1848c7b6e8840aaf5cc348814db1d748ca635dfef9388465d9456c8bc6ddf04fb5ecee271973151f211303b9e3eb2902a37440a63cb00bfde69df4b9bf81689dd30720065d7911fa8e69193692e82f8b7ca602bdf710df8618e117aedaaa3e493c4531e6d7407006c85409238117f21de82561a96d9701d93c4ef76dc48e8d002530411ed09f4b59e30667ab1aad8694e2acd448534d2cbe880e9b092929b52dddf5e7fed0cd4f3aa5d61d83573fd528832908b078c21575cc47d7014aaa804ce52b96d64a1daee3504dc2261fa1f82460d90d4330ebe3f893cafb11df24a24c0d6459e5b9e8add53a9e0aafd4397f500d9214a9aa2fb7667a3fbe0b73a854aadbc9f34da134e73ab54596528aa0b7b4d07f5dc12e8f596686324be6f5c1c84ebb27d0c822177a2addfe86b08e134576574a9704288c9a5be4f9c62cdeb0dda1e52c9cc36cf6db85eb25a2e3658717dfc4ed567e083654c4db038d718e14189584680000a02928784c1306bffe39be9d0933c80d226f9e391f844532bb54ce5077801cde89d91a0e8918a4067851c7193d38f76c95c39eb1f6ec8787fa29f9987ae678bf1f098a468e2ccc2f576a2006eb122bd1fc8b7e928177a571192097a8922d8c6f49a0aded06b97c884da1fd88cacdf18804a7efca6292fa68f860adec66ebe5df41331d66f617d0405be0db7762c9f638c489f950f146489a285a625842ef88eade11495636cb168cf229abc3eeb058eda53f5890ba1c876ac6349be7b4b67b080cd213e86e2082f5fedb985aa897e9cb5c5867bfa409910b89fd5295bc353d90297b3864c2cead302c3333abfef65dd76bfdb20ff3304b3c071458d30522d593cb4ff03ad29b5f441d3c13a3497f4045c00f39f60f52f86631623b2a99801cf61632670eff7cfa890170ef57984fe2111422676748bb541ae41d742db88c0cf769b771f3084bcd018b4003312bcb78fc12f405697fb9ec86f007a1996e0966fa5b6da1f44b6744b3c92b912b1473d645af17b1b0c6766194f377e1d5dc052718b194ff9af188e2f2000d94a112f48d0ed47fd50152ad95b04c1c8b340f6ec7d105414334f112441318b35f472a34bc16874520d2171219aaa31f513398b5f907681849c3047046ba833390d247e1e14d8f5219c38ba66730fc774905f87fc766b9ebac1c2d2865c2952cdc33a7f7f63f371151844b49afc59f79c7251b975de0a4600256a493412a399855714be7a7eb1bdd6f70da1674c2ff32ab6262cd030c3885c92900742772076a3b0515460eb23e6e8f7e6496c2f50ad1b181e3cc2b14108786bb56f07152797264bf913765c919b025c41a9d28d0f31061d3a1104a749c6816dace44df51c403278f75a9a14dda603e62bf0c87969154930f3e5210a178704e2c507cf71b25faa4d33a92185e03641c294163469a409340feb8db62374fd31152a82d63b0a4093b61911798e7490e6ea58b7eb467d36aa3479ff157fd38b7a99d9d3d20968137b9bf2983197fd391be531182406d7338c3a9a0ac3332f332ac93ce08ab78020b275ca312f69cda89d5a798a660fb5a32b8f9b33364f3b055eec89e8c99b4c5602b9b25802e0881321d7597fadd54692d2988ef3395117fc5fedd467da783060cd613981e1475e49e430912fa8bbff0e1499b9ff7aadd20e2fa5e695d8342a227df6eb511349491fb2e3b75207aed20fb56380501718fb7d024bdcd472f2e5b30fb7e00218299da93cdfe7251dc220d24370870b9cda889a840d532991a6f3ae2b6d0c9b653c6a7d88d6ff3e4502f08bea10f8d4b09127cbb01f727fbee2888d1b46ee261893f303432fa466e6d1d345b9209126d85d0c67a6d0f651a5caf6b97544d9d414b38d6debcd5e2271be93cd268036ea4e8316f9b6359d39179ec97b5cdb5b8864ff980478f6e689d681fe1ca558c36f28a60d1fdf24284e95a02d19c07e37ba23a1422e628a12041b00912167889db350b6df517d048d9f71c4c3ec2d1b5055a805c0ba9678a8026c3cd0c100a674284044c62cb7e74c91b971e5d566e8060b141f0f6afae9c8481b0a9d7cbfefb8ae846cf73d4cc9a19c643882c4291c324c13e3ae36416deb103a290fad1da05889ae715b98d08fb8cf4cfe4ffe537be3767027ab9ecaa08ac512e86d2bb65ad05db4a674d49c5fdceb8e8b45839ce813064efa5a6cdbab7a1e6a61a11a9ccd8e312fa89a593efbf0848d897dd90acf35aad0949690f1eae103c5c6a3ca43627db85b823e246219ca6da0c484cf8cd5eb294450744f37afd3939cc43456cd01981e77431a45ef0ae031d23cb2c542903141cf135a4ed8c84df9ef7c9b46a44bc4fbf0ffd54686d4bf5114615249eaae44e4633177cc7ad6b124edd583816aab50518861f5bf8ac5f1b906c79de51179fcf7ae237921e2443cb7d417d56db17b9f528d2fc00c72c22d52c77ec2e31df0d014a8586b07a19e7d3a69f34c0481ef4a82f933898e6341a9bae0993ec7a941171576ef8f0cad9de5cb804c2570fe8d9991d72a87fb9f599fe3d0936f788a1e7a00dd3dc755b217cef2d4eaf439fa1e663904e33ad845a242642c8c67a8c3fbb5a10d215195a240605c1b5701b4c56dc89a94e80e7802cd49a6b9021b92bc327623370ed927278f3cd2e6183f6ab7c5b8c98cf0bbcb02b8d52cb263589ee7d07d22e90370806b507dc67b448d8e110e96f78c5942524a5eb21377e382d0c3ee81aa1a4aaf80776af8eb3bfd3abef3147fe06f3436c1ee97b2e82a181c66c142662d40e5d3907a9325697286dd31961781bb1e24612fafea4cb6183d197520ea41e6a51f9a04a6958c5dc6416d32f8023f2dbcda6d3a219f16e5fe8debe2fcabba0200d4c7843588d93a233043330c73b411e7a0c17e6f0a648c83fa4605ff1b66f63514d98212c09b9935bbc80b976f97534ee980e89cff42a40fca7e2d82541618709673736245c8be59cde8a7a554c01e166d2c12475e6a8e47ca1d4f0fb011b593567db6c69d292181d91588989732a92b321b78d97d75e68f7169c453e55e60cf2c642d8b4e88278bf91a53b10c313047f87e786e15be6a1f6fc5670c6df3fee840f3997bd9b284d70118e7b77361e1a1f37ec199c45f9cdd2cd2e7d174002328ca7f58db0b4322ab9ca92a111941b7599deedee570b50576d9333f5f1e41f5e4d28f85a54785d08f3db04f7b962a2c32ef43d80f554a2f74e8d15eea50a7a0e2ccb238cc5e9962256f81b34743e41fe44f9fde4963e58f50b61f7821b2360a97480c8ff07f30639de0ef9a5ea3ed59c3abad19c3db9ebf48b18eb611618db490d8ca8be4c850e914a5662244c35a990430039c5407cfa1c6b0314849cf1be762133027bb046dcaa13e3e2bf68f97b54d81e5c5b645708bbaee39130fa9485e1338bf4121b9bbcff33944862800e91e300737dc2c44f439b5916c6cdc7aac4307268bc8ae83bc4307717dff86681b300521d011475159a1ba7a8b6dfd8471b3b66059f81076d7224c617c79694b94418b670f01071464609d509bb602a0066259d204ad2fa87afc0ba17123199aef64b164c4976f564b55a15027d8d8ca046a5b64939981ae6406e0aa1e6f772ee3cd6cf04807e34bcb8380284249d28b433ef815313cf25bf0c66f7b6083f8408a5308ef51b6c6e713ff384e8cf2e273b0f5f81295278dd71c2b851c72f945507969cb21ecf3b52cb0ea8a012b205f8765650a66e7c4f2d2ac0a5b12df7966f237f38ceb05a7861fec7e8991c0158e10760e8f2e4342ba7d891fc845aa6085097fb52efb1861718c0d3c84b7f51a8010d1bef282075f5b0415fff27728a96f7a93350d6950648ac8cd8f4b70f67ccda5ac507df2b93607df1cdb09cce7b74db234fae139d413af3b7392c811640d7629151c2d25631df41c7296a4d0ebe68fbe0803197164c99258122766cf17fa0e086961d55ea16141c46b830e2cd9a488cb35ef5ddacd451fee3b056f52bc135cf4168a85883bd7e682f4b4ea8868c842832a79c1a0c4c916257c7ac6cabb62046a421168cb1c01db9394a344c129cbaed598c3501a26bbaca7f2667bccf033a24e3dd99face42a0caa7eaa214a3accefeb519a952a59da66ccedef84fee18d5a46cf9dff104b1a2c4758afe05e91afa8757d945386b1b31d7d103a42888d05f5ced4702711b2b4f88a81e2e4eeaa4e32558fd25eb54f1efb03ea9815217db780002b9771326d1018e0f3c9cc26b79a61e01d908039430267d21f4a85cb1c83069f008504da09b7bf20940e6ad1431aef9ba0e60870e079ea10b055bb835005e0843b910288bfb898508c6f8f38943d586402c15162a854b1540ceb8dd8e9991e6fa86703d68acec22a405dce95cb217430cd01e153e357a95cd519bc3a15363ea58ac07fd730899e07cb7eeca010fafa6b7b7ddec62e174fc8268181a34c1cf77148035152ae1063541b2beb10699d4e8434fa7cbeb3386f3843931dee63e023a633b0f65df02acb17618805ef1f801c325fd5bbaa14d3c4228529fb6cafe74c0645a48921f76f64bb770d6322102b45512bad2021278a188ce6c2f5eb66b0e26c7269f4a10e680f1778180d62f7004ad4f6cf7cf93ed2893822dc86416b23a78501123915d5bcdecbd6fccb48acb995b84481be135a2f8265a52171b588f168cdf9335d409986b3bf780d540c280b00e291c035925af28b3b8dabb3b1dad3d0721fcc3026c6f96842049c92cb92648aaab7ec81f42e8da7d684cb85391a40db20d9eb27a56fd6ed9923b11f78a4f028c48d3d60c680fb5bc591bac4078624fe483323d41d08aade55b51e9ce2fc10eb543ed8f1b34f5cf83e55614c97197043cb616daf3148391cf81023704417bea26741fbdd05f5c27a529ad72404f33aa38ec9746978ac691a0e2e4faf88d74be71de9ac6854e4308f90b578d448a952a7d36d73c810f76099fcf87a2d776e7104e8122a45287983b4fdd8b8cbe9c5798e9f661d1d9c8999acc7d333e94194d2691fb922c95e537fce889143e67bce61b6d022b1b53ec3d260b7446b3999bc4b4c224ca8f7e20636a03dbe52cc35813efa86765c8befa42cd3a6bb22ab5c377c276864111c0585de969302deb4de57005c7d9c177e621d0e2b03f94f4f6f03bea234615dea152e5a4621f0d808e594f0cac7035a455bb648008a7e46e7f0abaa42fd54a29a74aeb7803fd878f40dff1b30dc7fe6786760caf680cf4830f1a81ad97518fd94be26453b451c7d49fab33cc6b1b82884ec1d4932dd1706c906b80e981ebf198888f0bd7cc0e97f8d94ae0263b5e0f729b462c05be840bb03088f3c19421ce352f6014e2def15c434ab59bc8b519f9320cac3b11d6a002039d9341b8a788557641caf89bd2b2a760ce619d494e32387cd969d23d3f00d0cf6c65619b01c99c69895635869da0a58a7af1c9eee00466da998b0e27340cd81d46a883f2f83c820d0a97f5e342b3989ffdf5095c076e1f372048108dd13ea989f28807fcadaba339665e4239ca0291ca8d399a08f7e6c3f3a0bd8b31d18605f2e01c1a189a5091f87832efbcb83513eababb4085a70cd879fa14ac77cd068b0479dae83b19435cac8ffd2173203a0c8a3330058305f08778812647a8815446cc8bbc54b8cf20c70359b0fe958480b57595785691b5d5c0a4d4741a159cf8f12b1eda2cdf06fbfa9fdbc27bd5c0a88353a666fd9fa3f383e208b884e94d0308a318db1a32b34670aee9ed7037f45469e1421c163e06fda81733cedd03966e917ea60c6a7e1856a2d7fb74962123d4ca74456e9fcba63a40a8c400010758ff8486ebde13373b5de37887708e988ee18ca3895a770c83fe881733cd2497d851d6dcbb73b279362ea070afb30c8d6f2e0881e79a529e7fd1a4dac8c57af0a83ced674f826276af8f883e8a30f9fc1ad813b3a0d74729d69c1e9f05b215e737226317fff9e06447004036f91eec6a53c7b39b612acfd84e779b3d55a305601840d41af363a90352e5c573e70be0eac8ac3708d1cdb23e42b2273c2351367336c2d919c0531680080d6e3988936afd1f3ff0adb5aa7da2424a393cac42001a6308c046e6b32d884c28b8936de0d5bb92157750aa238acb61efa7fa5a9f025b786aa96157f119c11b69eebf419f64b852848cfda02a773fb007dbd6f915fb29f78e825f23b49dbcbe3b113517f3367f8727a26dad5b08bd0b36b90b5d10062176e1d445dc84bafd2b64ce0b6f59d6ca5001904b88f56f29a50e7f0e2a48c9d53bae3163d4a5a772d1e6b5d03115059cb9d58783c5b9af10e40201e1e3d5e8608f2ed3bc035145a4a4023e067df7768b07aa5c8b86ab6f5d95bf3b57810872e72a5d41edd8d6ad8b8892b023f3bc7ce25a0fe400c0ac68158bd45474f16dad3c465bd22923a9949a9a53efba34c0a011dff795d400cef115c361e01255740fb75d3dc67ea6a0466a57a79710550556f370df55431896efa8cd32a0803de12e9dc39d9a3ba8157611535eeb114086dbe982538dd6ad607be366e5e194641648acf1eaacae4de93b00913d2659b4a9046af79103f9d0eb5ee120d07e6ec531bb8e22d6c04537fec8780229ac49e01345fe324340e72c7581b8d20ab8766d4e73b8af5af46fcc912851947ded3f4f9805a80a1a303de937178c385a29c6787cf374c6538a506de3319f9e539150dea2302cf77c7666786b6efa6a6ccace803efe90c5bc0132717280e0a9fcf2804a6512641c3ebb0ce18d06954eae7ebb603173d2f02ef69ab5fdc21141f5990da0377bf41136265f18de671b1c37b27f1114824f95994a7f946700b20e386f7ec5a3ee5c4bf245165d64d31c95e98db0c954e378b9bb2cd865ffa0914302f19f75645e6864360900b9831113db51640ed9b4c46cc70b0bbc96a25ae5d64cef7ce65a0e2e345b84e9d75cc40b1b432e6535bfd0d54e469a3d605256c22ddfcc0d3b805f5c3b47710db98290d64592f25a4c5826f83a9a80275f0218659d24202f3f99738f5b1838beba799463f8da15b25fb809f50cf71a9c70ccc28017e2a490cfdacf24e1a0711a858944d3ba355acaeee96f80656a925a0b89e66867352d07a085cd5668eaa78136060a870c3ce4651c43b89ac486b0aa2a71debf9e082da6c688013fa3a634b3e962a56361fe1059dbb6d1ffe25142ed4725f8001b2c98c86c09b444a05f1ec8ac38b220754801aa95bf3510d1a4cbc73770ccb75e02b4b2ff2a916af4242c50be8e68cb652f4d25386c44b0019a4eeacb400229326bbb817ee867649f178e06830861656eced0c07f6dd8ae26be69ce109a7eacc695cd77c2f4e3865fabc805cf5da623ecfd7bcf9b1fe53f33d1337800691396fae011f821e43c83d8b46a02696bbc10baf026c9286a6bdd0fb98a962d4729505e02578324a50b12beeab2fdb80a99f4dc5ce281c03be98361a8e0f44d36c6b0e9bdacc1e00c57f55c0a93081e839546f3f86fbe623c70f95b9ecf6e0eb2bed443880c167f2c860bdde1821bf93bd42ca83cb74d9a9407ccc837fb325f6029490dc1aba813ca72ed38dce19c24794298ba9d7837a362065a95ee57c37add7be1367b7924e2485ddedc4c1d37997bc9414d5779c39f3303ab023a3f03df564802df3e9abd5371f30134c459f3faddb08eeead5283b575363b26c40b80ab151d971814ca7392896a346257fa2c5b0bdd0ac19cc89bb077ab9ee5a1d2b32e184553ade078534cab3b89ddb612d2a2eb705204194a384084f4b63a591918da17a2af4917f8c2ebe45fdf0269049ed110d6f059789f91d2c4ea64f672a73eb663d9e321d167817545f811e21077ace24f33b191eb9ad35cd1d3124c52b66127c993f6c302b59a8eb4c955a4b77fa82b481fb72840f23bb8cdd3e1ccb400c7a9fe9b1aac50fd680146178d482ba311dbc3560f94d1df02594fb77db962f2648b38f6151107a4486a8771c0752b0cd7a26bf719c5307b9476dc73f064c5a9d43a5e814d1d5316169eaef1a2cdb1de1026f43106a266cd09cdf7fd4239c929dd98863455e5139064f74127a09db1560d0456ed7fdd09a826d8a324708ed50c49228d421211e4407bf1da0fd7e6ff678f52ad563d5b0cb53bd278a59ea2dd6bdf9cf5149072d87242151bdfb6bf492d98951815b0d5ed619150609a89ca7665f3921908a4a68bc888e35a5bb812b0ede53a650889862187beabc5345c3afba8dc060a98b0a4ae24bdecc224cf7d52df8f37d34e6462755d8974a1bb18382a11a7224bd7ace61fa604bd460ab79f6a715a5b2c536feb0505148539ad0e6582fe88669d56ab324a7371fc0318c13cbc2066fc453afcfae96bbd9542c41766683b48a1bd30d259ff98c6d3892786e3d8c6d66c23ecb1cfc2d03a83ddbdaac1f51c512f8e209d88a227a003b84ece3cf5fb3496e6ca470d1a79aec9a2da44ee8acd440f1ce0c43a8d051823fd953f908751a43148d1c53aff71093302065861d1a3d0ea927a6e811d32b0698e3e8e4303583f5bed134f429f6403438b456b76685819573ec98685f0c6b0135a94da399b188a3511dfb691d19759c93012bd4eb879831d1bc486dc1dbae2b427577c808a63eb1690e2d40360f3ebb25ac398242298a95117ffad792ff76f1dda7e021abe490f6a1a4549580f1636c905978909d4518707f98ff7643cbbe893b72326fad6402b10a37ff26e38d9b3938a82384470c9426f0ca885f092cc85de21d081bb292c61f34e56bfcc859647a8d4832a484e24f2ccd92917301efd550c1046df0437fb280e12c9568a2a11018d178064234ca813266a739c5f45b59ee0b66e880fc4e98819f2a99b1be6d36e8504e264240230f954a859b961a51d1a61519d096d998038dff2dfa5f96e65c8b832830a9a43c402a116e5a8a7d7a7c4fae9a74764d4a543eb1691007ead5065ec7f2822841505b5fb8562d7d6c8e8a9b4dd66873c5f9b0a6a03269caed5d79c38000dbd23b0be6a2d724bd35c3cd285308b489a379c8d4998b9e344a5b4d9ea5e8652b81be14fb2e9995ed56438486289ddd33bfa643ed969ebf44f5c9ee5014bb35498cd474ea821a7198314955aea47ef7223e97fba5a170ea014bfc9e47fe9e7004deb2fced50dda0dd690a19db3d051f8a8b1d5355387e1d1a17f43e9145fdaa1ef3d2ad0d2f50f72aef495b3d77408c74bc89f4b4ac111406a29b97be22eac420c84d24eaa3d7ac3b76a0e2dba839d83777c3d22a83c441151a1537c5716e6f588695107b0360aa81b565cf9b2e4180deb61634cae3e6ef3c37a8f633be6ac2be9c667bab8c3c5d4fb104d3d6caa012ae147e036dc0d68230f2a5913be12bc0d643c8d31309096cc6b9136e5873786c3de0b9ce4890a5d3f76931db759138861a49a22eac5f66751b85e2420e40b841a8b904de918e8fdae041ebadd2666ccd554cd28ede88a7f72742df332bc5e6dae0d21eac79a047da1689ee6ef8ce34e36cf5b6ccd7ab62be044b1d4b7a45578ced3f15cbb295af225977bcafdd3d8c1c3d65d6688f35dc120c403661568311f21be4c8a48d88909f68f1cf2eb87f09991936d9f182e383d01592cbdccb45aa21434b7342fe775ae9a7e56ab4e982cc35535fccd3f42d20953b0128051e1451f74e5b7e1e78c207cf61d221c0462fb61fc5353ea44529329d557846e6933c2f10b9c3231b383779b8802b732668ff166002cdfbec27502d440fdb9b82c005d26a0467641998c71100b944dc0c0c568383b1382bd60058db5c62fc3db29d0eb10ad8c5ddd2a51ea0dac25a67f8ea7ea90b8db5346be9b6e86f2e1ed47c27a987531ff229267a0981ca2609811258cdf7a5ed5e80f7d447661a3cd2b8c45f31a58a589bbf26bc3c6c6a61bedd74f15c947d6a9b97e5dc89250cb371992f5046149b25cff54fbd793a66a471b2b373aa07de5db39c6db3ea206f0fe71c306e169880ee1e136593fb1e57723e306c8d8ed2de20e3bc3060e490b77c2d216717eea58fe230524ed39f24010eaf6079dfe4d9078de79fa67072d1884d4502ca0f5d5dccbd886796cdd571bacf6751be3492be8fdb1a1cbbcbe157ac6f2aef91fbf9648d1e22c87a78f0bc4f68b83a6ee8ba852ce30ff3c1a9642298ebb6524bcd6d542a5b8434e988df9a26feac797f17bdcdd13bc4017dc834db6365c30bc34e764c1edecc6182764d254540835a8f19c7e48014a712da3c9a877bed2da42ccce80d076b36d548d1456f0457aabc1ccc64696da0c129c0f628b33d4173310486cbc0171216d1643c72a63c794e8324f29b9fa41a37abf70357e2da978867a7d007a9f704460c2b88f64e6e395528b3749030de39f32903097ec3a2236893a9f8c35565af2580dd995d880371e13b38de6a8033b1bfa7cabca01d204977bcf55f33e186a1d3490729153d3c2003a3430faba8bd3c008dc5d0eea4430baa3e1700b13630a041ad123a253236acdbad00d6246e6fc5efd41d20755f43b27ce8303faa71c03b2d868c9928d1ccfe0c8c004bcc49f6e5666ccb1708091029c3e96443c182e3e86ef5806566b6a727c265e4d4364c7d927070fcb87062c0a30e17e4d043b82a4235acb7c47becee799a5c2a6445e5e204209106227aa4254351456c11b1ba1d608d04b65f81dda9de48a62a1e1fe5d64198000826b3435b2c00c03d37b10f0460d70273054eb779b2e0497dd570c7917621b6b1f0e71487b7db63b3f93abdea309755b9d60434d80443fb725a19e2394a4cf64f28388437fd9634697dc4c0b3ba8c1d6c2a293cf4799b06e0c2c788d1c12ad41e7fe01a6de0c6e4cec705959d13149b125cc3b7094dce09c11d2f5f82586c6fcd1b160faa831bddfabe3559f1d1b6431603403ebf88aa34f5b2b33637352eebb4f430c6d7885bbf0f0e07d7e0e189031efbdc904b85abf22e3d1c89b8f0e0e2c43020103e9c18466a4f8c4b2b39c567dc49117c4f87015dfa470ad60d955965019fbfd0457724faeab6d1b94fde3b11c2e9e3a8eb7333d77b9269fe6f9eb76b03be980447c63dcb5720c73117d70aa915dc1ce47e6a39e8270706c281837f18ab78fee33e2686241b2f818ebb2faa7f569d2ae58ad48342d154d457d29415b4dfcd88e5bf38f922d66ff4812777c9b66825dcb388b8b536bba184b3842a559d7704ab9681fbba2c8aca5d998335ea872c5800246abe08c4413fa11f81b76a04f9e2d6f8531891c54a426086ccd38303b7001bf6650760c60716ae99d8b1f9a7f36a1f1712b5b7958651513a37064e1fcd0d9625f1f241350103752e42cbdba32a0dd367b2a6e4aa3f9433841030b465b4e9c1ddd97a4fa1bc8e02e5b4b555a0ef6d3218f0ceee42912cfd32c0ae0b0cecd6bacd0966753dcb8376da9e4985f8e8bc219f38ec45a48dbf2868313742d6972a34a586935c96362af8989e443906e125bfe6ab9e87abafe5c6c5c6a7cc3bd1009ddfbb25cf709256e7d18ddd254dabe66a8ad0b0b3953358f50fa7418a6bda24a915e53d4d38524d8c6673a01e2601479cef61ec62bfc085f4b1fe8fb767a5e054aeeb24dfe62b45d6d8d07ff0dbf6fdd7f739e8949dca59d6224b712144512f94d98ad05d2a95497fbc7f4216efb89e45c5353f3445586a135217dde7ff5576a31d6b996849f35fcdc7cba59fc0b6146b069252e08de2035799f0bb40b4a0ea904fe9ab140d4d92e210643a2ef0fda5ec83b2dc4e01275eecd70a5c677ff2b417665dacdd410a052b3b7c4044c213a0329072422d9da985d995ffa3b37d9e532198289e4235c31646bba2c6acd3ce32fed5ae0bd7b7da0c6388a2a1521ea420ecf432a56160781f0a26473b46d23fda76021b8ce7f08dba74dfdd9118f375888beaec20d738f4522c15ece87a93921ba85a83e1c52ea4810087bb5d9777b6738e7eb42befcceb4a86a24bb7bcc5a86fd6184d8dcdc2900a2e3f633208bd5a0580f9ccb2e7874f6d1c9efb2c2f5f9aa282d3c376bc16765d7d956f826bb6325ac6a071b306e03f7a06cc676ec741cc74fe388f33563a2d5abcc11f36bbcef8d63a9e68a2167a828c3855230771f34847f42e333b64c89067a84d1bce3e10c3711fe4c2b245749c7d4475c013258bc29750977853ca48d1c73b7a5b3db0724f67e836cc32555dc7720e000024d8fd4a325644c8224222abb57593d305b20d1df6c2a613a2ebdd8147547079315875c8003161b957504855290852bee2e86bf53b5ba3d3007dc40e3b507688d901f4ba0cc6bfeb7486a26135373dbd6fde06e3b4a57a13327e282f51385d9a6ff46089a1327789182210a89f959f2d288edd510097a1cddebacca26d862079497cad4daf89d2b49493c554045cfb0f58a14d31eea50e2cbc3c9924c69087b130157485ac47381ac13c65662f5a1807f7109dc0394f0e9a1d77ef62228bf204218bf5f0adbd5722dfcdb337375a53042fca5d1d3c4a8bf80b5ea909039354e4cc163fd5e37f7627be76a7ebf4da531b37487b5a5aeba8646a43ce58ed69d5ab332f7825b1e01b7cd7a6cf04a2cfe5377737fa5ceb3823a9d70436de4d3ebf72d0480275064b60651bad919c56a8e745cb14743113c41864f3d5589284cde296b6e50a841f1f55d7636a2ae317638a14507e8f9a899070b373749893e97ead29bfd28e3a64b2aa012c480ec516860496d9cfb1ba2b4bfc3ca05abcfb596768338d990bcb569e9f730da5285368403f1d5542fd49bd729503ee491b372cf7020ffee680dbcca104fcf684806889b382ddc1786cacea25f8f9de3c39434837c430f1c41d2aa077fab521e6a26784c7066208addeea44c83a00cadea2a1b1aefe72dcd6725ce3cda83537d7a905dcb65a415f03788ec45d9cc3958214739f9e162b7f4b53384cfd9eece583aa0ee1a2ee4458416c80836e1b8f73d2c2f91a419bdbdf4f79a2d5dc5232fd4742d705e84fbc912c76d5a979ee5042e88a4227f328b928efd0859dc1d74aee75131c5962aa3d7fc27ae3a221663500eebf54d84bbd7ff289d41d3ccdc8531dd8d4835d09245e9c7235b11a027b8f7e9ae2a03a3822ec4369f76f700686aeeb0c9b3257ae7a2f919d83bb1bf2211830ba495ea25ddc72a44b657dda116c38c8d63caf686f0ddc70aea81eefc2185e926114932976205aa0503ee7d54ed9c5c5e8952a6833a3c363460686280bc082d7e48c1b6a1ea2f1ae62965f5bc2eb7d78174093862482c8f11aed73e8b6fda9dfd84be899a16cc5459a1087b647c333e266d3881b55adba4a5c3abb5adfc96a3a656e43f78ec4e96848c1d37cba747bb376666bb9d68081fa0b4d97650fca60ce7796abac346460c6872d0d40ff2df4bc85c3429eb369ce932cc39fff66ec9539ddde51966baa327ca6e1ef5bc0c94fe091dac6fc8745bf0c8d01d915b7faafd2ff55bac25cea2ca3037f6208a4dd46a35c1d32bb1d86e212992d4e0d815c32c50974cdb204224886db2741cc8179a228b26445d99a9609f68b090c49f9e7ed6a24268164c939de5f48d8deac3cf2083c719ba196a5336fdba6741e0229368487c188cbd235d2435899a11d172622f096948f168cab699f83c6726a455376717a2ae2ec2de4e2a3462bda6271531f8f8f494d37b396fe6393c3acd76e23cf3be90d784642fa9a5d02fc5d030a72927b5c409619a70d25375c579f3684f26b08da3ec657e039e56f8f387d2b689f37183eeb51ee154b25d577314bc1d2cd25880e54796fa37ba2b901d6971df91cfe611289f6ca4f588198a4ce4a859a287a5aa0b5f5364b441289eceecd2d03550889074b078fbdb5fd5f5a3061772918c8c0a1429c5546a1d61e51e293aab938a714f79fcc59812998904113572072c48f170f0a3de404218a4b0637f8f142f638a247115e4a1921f084491098fc80722184508912a0921ea84409a8a408504910a01220504911b5562c8b018661587695b8208a0ba11221949c2046a964870452d243136808c24250a1a10a2a0c614acf144be01e38084ed244922a2e288802832220600288216c8a3872e3c31596b004882388906a61c21af72b95667a49e263b7b01f50129ddd031dc75fd125616bbe1fca2202772a16112c225e534e268630c16477723f8c878919b83bad4cec60620829a5acd6a5274a4f154aa9c57a789c6c93c4322cfbb1fde38ed486e0ec66b767c7f69f36e870cf107609283d3e2cb164892a9698a269db123a4bec3c3be4be161d7dee52526a6da66d342f24c223d20acb896bc9f971d1e24dcc4169211d9e12894437a3516cc5d628def8129779ee044a14ef51a97e04510d513991f78e03a7b80c05aab80effe1c779bc1feff1f2184bc46560abc5d35ad272d282d28ab2df4317ec018b803f826ce81ab2df5bc065a08d82a77055746cd872f24b88f470de0383ca63b29ea852a954aa9c9b08136fe24dbc8937f1c6b9ff888536ed4a6a67d56ec4648b47abd56acd88d92a7382e4e4e4e4c01b1d37373737372db068b95a1c17a4a5c5e56a69c941a15c2e1405decffb71b572224ccc89393127e6a826f663ab8b88cbe572b578b45aad569613242727272787c5bb5e39feb45c5c2214146a7b4044a1e2cf8a15f1155f2be20f6cb55aad96ab157f28107fe24ffcf9893fd256ed464c52171197cbe572b578b45aad562bfe4428f127fec49ff8f3b9e57a79e1b162050ece8a152d162c707058b4a0cbe572b95cad56abd56ab55aad56ab529f2e222e97cbe56af168b55aad567e4d1c977cb5d08224c282050b57ceb247f66417101bbefc255f2e97cbe57261eb72397dcd88d92a33e99244a44bbaa44bbaa44b6b32aa80655401ffcb2939dfdce42c5f2eb87073e382e3b83b4e845abee04bbee44bbee0eb055faf2adb1f4e889369bb9b6edaddf497dd4d972f3945bee44bbee44bbe5cd0b4de1e108bf0940b00d05c70e1c98913000d001b0c004c0100400002880e05f03505384b3c957a6c1dc7be4ccb97994b1cc6df35cdeace64aaba7b7969d162bbd8ddec0949ad09e13d5166f644187f6b31e6b8ffd9337b3cc51262f644ba410cf0b8523ef8e49bf249213edffe1cc6c04412269cec2e2661e20a9f52ad9eab67a38130066c000d54bb93546070c17d4a95840aaa16c4dc123e923881af2949a66875aafd92bcdecf123ef693b2a12a89932451923401038ab59698c1ee70139618c288255a18f74048ac80640a08f4803bbb5d77f0230c77e4b274682b60792db3ac90bef424d2488f4a4fd272b7da5ad5aa56b5aa55ad6a754422d5520dac62e3277dc9f4a5511dd5511dd5511da14c1a06ac62634dfad2974ab98bb14ba316522977a53f95b48d55a9a4675861e920b17490482ba315dd61d288e53b8d65055ccb8ac5e778960e163dcadd6a8f9ef48f3e09d5c29d5ab09bf42bf0263d8af42dbf49cfa536e94faa4d7ad3bbcfafd09dd51d0e51ddfd1ea5f6e857749752edd163dda9688c6dfa6baac1b2f2ad868525c3cd92f1c78de5b1ee569b85a55bedd52ac60d0b16b1d5e21b900c283c25644081d660c357c43a21c1866f9d90e06f1680edfb8f72b6b5f7de7b4731a37f6f696a0d17faa3f78d666447910756db8839a3517eba9b39316777f18728e4551cbe53f198d1432a1b8eb4d571011e7d375d74946db8c159a74aedfbfbded77467876c7f5853a5d6d6623871a04091440d78b090440f1e29186872842618a16202204bbc89bbfb63e2880fa428428f2950e9f184952284d003125098420978dc77207921890210921e2448582c1f081312204866808405484070848a23538e4839c2048efb1492239cbcf79e111418b9296285225128c284224928b2041659e2bdf7de2ba25364a748102572c68a46a336546bb5693118cf53a96cab991b8cf7527b669946b1ad26673d5ccd6e30de7b41d3e8a6551bd2b42da461db8c6ca3116d36bc986598ce44dadd66604ddb68f066030d6da10dc6dd99be57136d3597fe8cc3b0be33cc6a1a3124e083482c41c21544d555df5c035f469711ce2a9d5608e595b2528eb30142eb7386fb97032c240cdf76df8055584831516866f5de1ac2b48a69b66215ab58c544d956b10dab58c52a56b12ccb2cb6d987ea2643b6ca40e6fc400901ce7b3fb1e5ae17ceeb91d287705f927ccc504a595327c7498961f7a1534a298d3653d258358d5a875abebcb3464a0d7d14f57b2fd8d009bf26e75db7d7be07d187fe6da819db6b2f0acd1af9986963568bdadb68ac561986f1e5388c2f865df9f2deed5e1bb6d73edb6854c7a046d9b0694d7bcddbf03526ff4a97524a099f0dd987f66be45b11dc1266d8bef9edfb37cbb2907cf93517d35277f1a37c94d435910769637dc482cb4a01ab1523101220330042c2821610921400211901101210500174648a94234c003ae2c407e8480fd0912259f6602cc2cb305b6f85c165a90062f2419f8d849d7d73592888728b1209223c538e9c80070a8f0fcf129e203c48a494d522814329b518cf0e23413c3a342ad9cd2e124f3a7bb5abe56c3792c4088e11231653dd7bb76bb54d4322a7064960012103c789c0f1ae45b742e204eefe8f82ed4048084282ceee5ab87c9802c804eff14ba204345ce108104774f0f8f010e1b101cf10313042850620234b6a20c288cbc80a5ca438137e6971c4c7111c2728c184528b2b1145e5ace5a1c411258494940882123950a287123fec6461678a9da09d287694d809b233839d2092c842125148e249124d9220824b123b18252104125840e2854450911d455e506408ae08ce478e105a2968d24306a225e410b48425400882120218e8e0eeee3cbbb3d8d57127623197e82dc6348658d7f0af8fc112e9318fd11e7bec5d84f963eb8e55ebf5e18fb2bbd5fe8642a2d0e843d68af0db91c8daecf1b5d98b306bad7597907b6f96bd96cd5cc5e4427e601538e5c5f2a9f63717b2ebdbfcf21d7e53850241d685c0571018e430f5b5faa53c1361ea93b20b7121a15c7f7321feae6ff6f5ebd535b2b78f695f03b42ec45d55738e0852e8d8dac67ea0ecd47e403f43b67d952ac6b89201c31ec32c8661169bb68b3fb1f788454c0605ddd7a283af2d31a0285a404af89938404ac0d95792fecd39e79cf06be88fbed6974173be7cc15196e1afb82d04a3784ae299e14f86503c052405cf4ec07e4052f0a892d58a6be9dd34a749cf39e79cf301a599250ea3777777afb5c3b1c3c67fdfa63dd7643f7dbecf1b9b2a3c04e1f9d8f58cdb6fc45d1fc297d04d2f1b6ed0a707f9c0f2e5cc2b391f8e9e43875a7d248364142aa7d011ce7cf47eebeaea1af4e72a08861f173eb23349c75f9f76704f5aa7bfad06be2863ba0119e4a9f93479e56a4b8cf4f05f94b1981be9eea9ee52dbf525514a29a5949469d2bfad06fb54df885554b147793e962bd0cf947d37a594524a474f29fd6e35d233be6937b373d36e66471f086ddacdecdcf347796e17ef19a287c34c224382fc2862cfb71f20653a0a6ddacd467187f7f892f9a1f9db47e1a0ecf9d9c8033848d177aad4efd5a613fe786ad287e230f3258f3d5fa43bd5fc90ee523af6acb2e7943dffea0ec3287b7e4627566badb5eaeb62830e6c63b56bd8a7dfd958755306e9570a08f7b2a86051b1e17e5a6efb796acb804b18dda1bb4f0cda1ae994b16a2c1a60871e035f4a5a6863942f7747bfc688a38c1ff09c6fab613e09e7935a5e284a000510288a8082885a6badb5d25a6badb5d65aadb575ab1cf72928760881d65a2bf6c4143a78a2094ffc3cc1c40d3035928484e206075807bbc33ff0dc0fe8091b3c11838a31f74f1841842754f004099a58a189149a3cd1244913224d8e680284263968228326433409a2490a9a90a009087caaf85821feacb55623609f100cc1536026701530c6dcfbfcf8f8ec2ed5e37377ccf0458ec247257cb8e1eba494f2adecf851772d3b6a2d4229a58c9973000a867fdeef9f46cdd0cdad3b00ec6743528af59801ecf75a94a1b0feb579fead935a17b4d65ae39c72a242f16d6a3f4f408491324a792f50039f29296dc13d81f4980d4c297365324ccb0f621988dcfca3cd5ab62f2ea669d9beb8dad5b6ecc3bfd8feca7cb1f6429b76b3d00cc9e8782e200cd8615f6cee31ee0cd8f12f367fbb41996937d8b4b458b6c58d46becda8dff2c1c0c7469edf0b52da0cb592766fa6ad965779a6019809c36e96d92daf2846a9ad59a8e361cb2a4f007c2dc3e0303331220c9c564bae9e7e88fbe00bf015ad76867d27e3bdf7ded53360ef6fbb55ad8155eceddf8e810afddb31f67dcfb95bc5d831c6186368d3d9bff7de7b5677a60eeb300d474ff596bbd5de5ecb5d8cad6151883bb1dcb7a57bdf6e9f650d63eec442c2a250b6522ae9cef4fe5a5eed9b57726792317a6a63556f8c317e97223d0c9bd68e3156d662cc71ffa9944a1563c7b7f98a4225dda548ba53452ce23a2eaadcc66a8f728dfaf0af4a954afd73dc7bef3d1516b188452c6211fad0dee280452c62118bd8fded43118b58c42216b188454ca32efed06f1f638c31468da27f1ffb4ef5fe38d740050e69147d94f69b4669fa5eecb31bdfbecd1dca461b630d54e0a83bd153f9f4fc8e4b07fac0debe3f0ef651c137dc8e872d3844f6da6fdf411c55d0f3d959653af4db6b1f532955f6f13b550d54e08dbed5348adac71e75617cfcf836c37287c21efad8efd5a130ddbdd77b6de8a3062af09b26e882838bca0146fc1c322b085610ac20e20ef8038970262c5a58f1827269e14e2c2b267b82126984670f44a14dbb19662b9d323a9447449722623e3d7c80e0f383cf0f9f103811e4041527789c704229b598133f9c18229df8c18774a2070edaee840f1d6e824a13449a604213419a88a289254d0cd1840f5d845a6badb5d65ab36a6badb5d65a6d666dadb5d65aabcdacadb5d65a6de4400ca8a003831b1411c1155e541b1028a104073f38c2921ce0bca8b5d65aabb5b6d65a6bb5b5ce709ff2d96902e509219220af405fb82aa5145ce004eb0229d41724b92f4882954df83087c43aa39452f6c0e4b5bbe7d2c164094c946002bc041098ee07c44409cc0409f33161920512a864321a33809d659aa5cb64ef2687f1bf91757fc65fd88f6a4eda60af168128d338c2780d01b6941042fa9ca034f55c6cec69f665524a25a591521a82d946eeb5ef39f718ab68a331c09e82c583a563f49d0988498f0d658c42bfb28542a552a9542a95462b1f32bd7d92b6b2e51b705fed6b680fff61edfaa6695a0df6a1bf77fb9b47ba33691b2b20263fec1920263a767d1962643658c9b1dcbd5767d3da992a28f5f33e5c8fe6ca81875d7a9c611996611996611976fa1269744bf9ed53ee4cbff22cf90684b1926db8c1260d7ff4334e7a4ce7aef4d75a8c39ee3f954295348c185b238dfe3db6bdb6da1086be8642a15028b4690dac768df7d8bf8b65d47ded6f0ed9bfd7f4fdf758660501e30e195088c1e2f17a463c78e211800051838e88479c964a29250d53c05180414a254fd8524a2a5f9444f11ccb891f81bbd58e9caf360d1a9e8a6f27469459394c5ced956b18e5c7073dca207b08ddfffedbeef58711bbbc3faf76f16f7443cdc0bf3d0dac9f8648db89c92c5edfdadd361a9a3fbf4663198131ddd987f4b11a67c6ef85f8a1cc4599bbd18e9f051b60bb3b5b2ba5734e2963749f61030c7767b3748d9a41ca07df05adc598e3fe5332ccc857e9e33f9b91e487b41b56328a0c925222408109782afe0d6ff1c6dc967a414090525e408038d82d105e8bd7c15d9eaa553afd28733fcacfa494d0c221322c189734fbcf2c1f66d71d7c2a1fc22ca59e89e1a9f80d6055cd0a02f6ef4c32397cf8172e0422c09443471827a53308f8f980392cdf71fbfeaba22a825fab8596c8db87b34c2412bdcdb0ae017f54bf13694bfad1d7908655bdf2d1738844221c259128cbb0c73813d592e857564a9f95b4c636aee5496f714be6b0d0969532d2572bfa15d83295f46894bbd04312105c23f4a6e800d708fddc90147a0b788c153d8689b40de227d5b7791be90eeb8a611f5f078fd13e7e0e517e7bfb085b43fce8d1e291d56dd3d8c3acfd4cd41e2073e40322830b6139111962d0408307b87b6ba10e308456cfb80b8f81fa532d605879cc8d9fe3c70d0e1d5c082c80761d5880f9efd67962991da65dc8635b3f6a2517b1403efbb097bda7f21a58def4a5d26632994aa552c96432fd565ad135eab38cbe33691cbeebf671aba9717a161216adf892c96432957e2696449cc9247749f42b2bfa79aaf433b106fc153fe39ce957fcdb6a80bfa285952fe915d38b5e502e2ddce9b716749783cd36fd8a12744194eeb08beeb816dd3da7bbd48aee549be5b7bfa5cc923bd2e92fd5583b2862c7bf5563fdc035483f4fdb931ef2f098cdf4a2177d8c29e2217a90f2ca9f32e94719fe96472cba5bd1a4873a45401ff9edd1c7211e534ba39ff17c235631d2a2af19ff4cc45024fab1210af60382d2635fd74259b3ac1d44a91ade780cd4728a0d1c70e89003ea30e5e0eef5740fa84f593f30dc5543a8b7f8343c660b853e464165c31d8fe96015c8e332ef055014af1ddf26d2320a2cc00cc97d2356514568eb369d83cda6dfadb8a852fd771cb67981d8c983104238a776b18d66ce18379a092194dac536386704c22c20096708e2a2bf65a8611ab63c15ff06f76a1c2c9eb103c7d736dc60683d2b225f10c29072f12db8971d1a421871f69c73c239e79c33fcc5633dc1dd83b2e7b39ee04c7b90b551300cf254cec31d9d2afb9c38312cea8e7b0c9b9fcdf7a028035d1166beb51873dc7f2aa5fa1924c07376b0ca9e1eb427dc11714439b8af850ea20bf918618c31461712df53911505530ecc5d837e76a1361fe66419849b8c97ebb5691dd4d15c088430c775a090e93a30c785b8cb85cc0973a60b0965181c26fe96675cab3c1567dce04e55058e3fe3d89e11c3ea633f33ccd5b4ab164335f6f6ddd69b616ef19b7eccd9fc8c652e36203720b70bc17c2b02fe65fdc035e8cf0d93b0038a28fbbaa6794cad7f5936c0b0ebc09e6145c112860656bb86d43234c053104709393bc618651095d662cc71ffa9940c8bd5df545aded9a1a935484aa1a99d0d95d263a27c523ee9a91b61508c310304187ef776dece86326bb9a77c19b7bc38b873de796f28140afd9c37245ff225a548292693e9651493ac6232c92019454e3199e414f98a1092e0086228821b84254d828f452b29454a9152aa159610b407b01fd0128684fee6394333343f14c2e17bd6bf77ced0fcd0d5ee42fefebd218c43f85d07f38830eee40e3dcc09751eba11377e1e768d908b0d3af0b6e90e8787fee290113e7cd208dece8626b25d0e36da7fc886dbc7d7f4c3badb5e734e5406c928272a836815a73285cad74aa4720aa5a7efe4ab6a94cb36e86079fa2b5656edf4d9af38fdcbe951a777397dcbe9b9cca26dacf68aad98db95fb5d3fab989462d2581c1302ca0fb5d2c7e1bbfeadb50ad0122022fb00fb0101b57287b74d8ef7eafbb723b57f23ee37371836db4e287517777dc8e33b445c1f7138f633fe20949d13913722bdf7d24cedfd9b3dfdbfdf6def5b4d8daa3b887d7d69da5ed55da83eae78f4a6111685b0527ebacb340eb9314d4d9a2d41ac8fc3778c316a1a1fc687353e84d5c2f79d7ce958638c36aec4c8655fb96779d3931e7f48fb978cca2ef9c596cce5932ee98edb9c16e94d7729d58e5777aa9d691bab55c4a41429454a792b5e6f0074f3c4675f118c9dbb76d870670b603fa02738fb496b23603f20299cec4ebe68f3220f2fbe7dbf65ae7123c7b6fff6cb9df3c43de9ebe4eea0c6119f6e3496c63ece53a6b76f7557bff4f6b5c7466f9f447afba6fc228c0dfd268243b6a8949fc3e0d0a65fb6babb4fca235ab5a66d68bb7e6783d674361b7ed535322d3f46f9d8c38f35e0d7875fe94b8d454e5f605d4bb9f0986f71a91371d189350d06a138cae0577c19f82bb4d5facf8998de5a17e2ae579618cc81ef59064fd1778d3d45df944dae82c15374e529faee3a96e75aeb3ad55a5b6badd5d6b7b4943fbf0833c22a7497d7dcaf30c77b78ea6baeedb0eb6bae3b6baf75eb900874cde49a66aa2b560e2c7d8d7acdbf6b4e6dcf9d073e0b5b0c9306573467d1e249939c365b34eab2f2cf63e8a9722bf2e529eeddeb4aee78d8159e207c5b3dbd67fa279741f02984f0042164a991c461964cda685c6f342619f63b1a9c60976ff90ee6d0bac272e25a5c5070c8f3944b6ec93864104e50cee6b819ea96278ebb51370ffbd4d9ec13c765fa58f63fe5b8d1500d7322cdee18d5ee8e9d20f7a7ec2bcfc91a96673df1a799064fc5b7bdc6b88ed1c3fac158d34c26961498c6591e60bf637993363df86488be8539d0f562c8817184472f8239ae23c875f80eff212868b6f0f1fdb6901365583dae29e0926f8830f15bf28b30f45bdee685539d0308fd1c2def42350dd4bbbc8bcee1f2a8131c82037cbbd7139f4a06a9ac64881406813adc534a4f3fe37088c744eee3e9e343222eb3e2e3df93a7e2afa0a7d343086bcda1da8985b3d91ccb49064f9df2db5c863a27147dd4bf7c4b4651fd52a1ce4bb611069bb4b28ec0d9460373485ffa1967d188c08b817efc6d32e16deaec3699fe25a3b24b6ec9176f317c459b2c1a3d9d4e270cc39e62ef184b7e9e62f995dcd9ec95176d342b1cc73dcd5c661981e9c33fe55add66bb6479caf2a7dce1b0597e266a0ff3b6d16cd89b72296bd853a3d7d38d521bcc59596d4719a21a3503a5da3b6dd3d03280099ec63a02771c2b0adc713ba6a2b5f8bfe3e45f938e1eb60ffd0e40fc77d05ef475fbd057ed3d6a86f6a2a7a1bdc8358ded437a4e97eeee734e9f3d720af93775833ff79f894e223dfe497a8c9fe43ab085fb96a7c17dcb8ae7b897e7e28a7ff90ef644e8036fe48af993050bd761e958f12f7f594ac0707e04b8477d045ade650720345edee57758a151f151cf3d6a87178d8a1a35f50cd4734f03f534bee55df4b6fdc85a9d3b9611787e87c3667bb6fddcb6cd757c886b3efee3dfc57d7a96d33ff7362fbce5b9a7d1f29cce01647e0eee5bf48b30ae5bbe45e76879176df3c2593ed397e000afbcebc01b7f7ba976830deee7c39cf8d37f3e1ce24268e6128f91d1569916de53f2a3f61dbf2d641ffe0590b96d5b8c31e691759b6db30d4fc99da8e1cf7b413e0c8a30f2b9cc8a02977ec6ed0ee9c09e252ee3f2f2e1cf8b2128cab4bc94efefc5404cf4d088bf977a5da50b87f16fe1529a745f94bbc772370ae56ec492bbd45ec99d662addc7b9b3f1c47dce9cc3a347d73ae0f094efc48c83a764ad36de76d611f867cb771fe863c7777c34c137e6d3647f04f61d5bc86e31a497ef3d2f06d1cb7f8e9ba3a700d7b970930175dc784a3ee9f15bf71eef792fc82765e7d119e9ce75b6fc9988f30d58c51669b8e3bd20dff34ef59d1d6d6fda777c87eff01fbce53c7c08efe1385e84fba8f0269a584fe806e406e3bde0359b0b2b0998f2b8cc8a97ff1c077ba2cccbcbef6c875d7abefbfd5d6aafc8cee3302ffaa550ff2e1cd782b17eee4bb65ce2bec30477f06607f3d932ead8f143d4356f3bec01713c06e5cf02c2f71fcb09e6bee5513364dfe1e029f9393c251f7eb7da3d3d2d197bd8d3049e3e353b4fcf128f71e2313f50e47b909369f9f7b6256b0e63faceb5c5d6743f9b3380c030c0602dc61ce7ef537c27c2f82b092cff6ed952e85086e25f2cbf3d5fdbd71f7497a1a8abdc6f83a1edaa3b4dfe0d38e498f9ed7863f201f8e0be2b9a521553f08692694563bbc271a6ff522ac2ac36d48cd2939e46498b9e868d3022cb121294bdf518f962f08fddef7befaf64532e6552fe2d06f428376d5291563708bc2d12e99752b9d8f343a1bad16c3f1a8dde73a7b18cc0feda8b7287b708c786f8df06210ebd6751ee7048ede9af8bd346e49909eebba26837cd8c10fcf1c590bdbfe3e7309b52bd172420011b61a08c1acb086c5fee70ecf75eb6a16dcce2b027ed992fb8af85f6240bee56c3d624ffb180b08ae504eef096dccb7f8b940b95c7a062643d892e6e34c5a871b6594058bb9f3dbc579b5850604d771aeb090cff7d137e70828eb66d8f61a46d946bdca87bf46fdb2dd74dd235b67f1bbb1af65b9ed88fb2fd9968e1eee0dbf8694470bf7b439abe5177ec78d89aaef769ae955e9abd96e3d74ca7cd6615a1d6afd174d5f6bd709fe96d5e68a552fd1c255d358dd29bdea47394b4cd0b960b6f7fff79eabe17b6b7ef852bca3371fbfa76bb35d7a86f7ff418f66f1be91b75db8d698fadf6dbd7acfd66730769340d73ec96dfae58b5d99ab661d8579146d57fdbe60e06d938e4d63efedc3ef459b6fddb42d453dadf8ff93edc6a6cf6f6578bbffddc686eb4d94f7bdb8d91c64c9f524a33251d19612395921545d69fffaa17c3cabf10fc4d936f92a6a7c1f2a61ca667a1c1f22bbfa273ac3c0bfecbf2c1dd6b1738c0d99b7ee5bb3705870e3922103593682427fe197711337aff147e7f185ce6f4a9a8e13c12e99779944f19db6c128d48c43202c3c7a51f659b3dca36b45dc29aa76ec0f292e5df86df6344cfc2b2624a790a42ddc5bd692d77cf95bd165fe297164e72fb434f8a8baf8a0f9fbecd0b1835fdaa2d0d9ba3bed5362fa09c0f214cb9a02f985cd40cfeef6bdcda5a299d53ca1867f0a0066258a887193e98e103d61138bbafc5b5afd2d6859504dc3d973f8b8b34788c95813a1cea88af439499715199b1df9a41f89b1fa127a8f4cc7776396534340000016316000028100a8643429124cbb23850d30714800d7a964a60489dc8a39128cb5110c4601052c6200380316008c8d0884c51100036be55e1c54c6c7b84c76f9dd033d4bb6b1404d33269136a9513da8829a1b8d2029dd6be4a5887605bdbed1d7a3d4f13a3135ee06348ba5cee2b5db2abef1424cf234c358eda8079f45a8d1959cf4954d80c99999d0518dc99c7eb49b2b483be0231ce9e0631d9c60798f19eb45a1824e9d0138d38c5b48779bb84883ead61f25825df4bbbd3d0392369efef6381a7e0f669cc96d4ea0c0f2635370174a7b58f2460fe164b0f5b1f3ab2d4cf4433a16f3ec89ed0393c5fa566744ab1022f4ac0a22ed0aac1a7102c7ac35763aa0ca338c71cdca01d0cfb8d712095e7912db368ce837ce39b57a10620dc2c159b7e6ebeeefb427323c3cce871671a641f04d17fe8b2902ac72fd839c2d90b68bf22f15ceac30bea8939517c07f81e0d3ab67b0a0a07a72479b036bd7b722ee84b147fb648b19b4f5f86c23babdd649e18edb74a5ed46c13cf1870527d6614af64928348daa71971cd9bb655275faea8ee9fd34e6b9929686e93f478a21c6d243104a020690fb6d69731113aa278f20e0b6a6f12068d91030bab34a8bbc019d706e09f9b46b044f59839d56ff5d95c9f585df055b68be0245c89d9c3447a093861b50db6114138149b6ce05e957cc282bb7c21b7fc28600c0e38b38183c9e8e9780b2b5a667bb24f9beeaf8c0989429fc4864f2e3052549f226aac0d0fe432e765b36bba685ae441930561ce1cecb64108148ee320777a08751e7142f7157927fb3135bbcb1dc60edafea16e20577f8ba0be6f09d4b5447d36282eb825413f9fb4b1863019801e64d43e59aa78292b7d0df7ae8c05f59c47ecd13846640997d98d4bf964137695ba3012d7326031060a07614461990312ef773fecbf656ffab5ed1747ccab72c33d232d1ad45605c55edbb2408fa41275d503a32852f7a247959b9ed4e0827afbd5bc6fdbd0a5840a6ece5665da6304d7c9fcae19c079ea7e0fdd91755ea25dd84381f1ca2d509659309e4256835091408a20b872dbe3a1f310e6d8321386023faa6feeb8075ed5b5ed03c4ae1390bd73da3263e48aad75aaefa24d75fc983f0a5314657021c63c4db6d5fbf3f2151b87b776097114cb24047aeeb1dc73a7b96fd0326d961ac3e00577105e4a4d4af7b7dad305aa1303295cfc97bc1ae320b0987c71c7be8a847e95c081b39983409e5e5cab4fc6052fada769386e674a5428ac1fa9dac91964a4dd085dcf6a6779457b0cb2872d4db23a9fbb7243cac95441fb2dfa7c00f96c06a343448180925ed7ffbf0858ec0b5fa06495b7bcd596bbec4fad3b3d1f856aeee85615a121a057165207230c771198fc072314ad6d2009d5be6cd12f26fbe5666de36d7191c76d3be0e287acaedb835c56d206fbf74543e5aaf4cbbc5d8de5f7d3b56e2cd8e0dc7fc2f5d1210909adcf13301f4ee7a8dfc8ca97419beaa5d84e7482f02888fb864df3b08089283ec10e83c54af8c411ddf0b6f7589ebf229986d4e8fc873fdb5ccc430eafc84176083061377ada43c0a8f2137fc1d829e9d9e072c98e812f5ad1d5067aa33e19731cdc6677f62760df37271299486a56afd19ab6792e66db78f1479a0e49cea5a9c30335614afd04c5991430ef58e1ac1a2031e1d1ab72c083bc0ebc3e9137a6986ffe90722fa15a57bef6b09a30f5c240f8c893fdbd7adeb02f3c5d2007080f42408ef41c79f6e91818e8ec06404c4afa0a9344353d8a3b953f11416b1387d485a0c882e4dae21e18b5898bbe9cf4c0093dd062b1fb5febda8204989a6bfcc0fa2bb7fb6a2be53009376395a18e175768fc7296fb82b074906a7715062469ff9c2e73278ce12c0133d6ee0bfee9373175c11f8e55abc1dcbae26183a57d6554d54c48d4f862faef57c020bf51924844e9f38170af7f3ef1edb370f68b6610ac70af3b713d728c814c9322b7c1bf8b881c0116befa49d2f902666989b36717850d8f057558a6c9c73513a330388eaf9260fc8bbe8da8e3f46f80fe4aec73d2215151b524663abf1c7c72ff31d4abfa97c3663f2595064bdb806d52e8e98e5656df9e03b5fb6eec571c3d649be1869f6ba11683c63c6fa3ef56b979139aadcd4626eafd273b6065aec2edbfc789fe85e3b2e3d9c7494d03d84c5077e69b103a1e95866037de118f3ff5547e8bc35eb4a61e9c0249d506bb15fdead3fa5b0c84aff172166c9bd6e8292659ed8f8b79d6ba18c2e6e3f411d68cf49d0c0f394c29c8d3a387f4350cd455dadaf0fb599ea8bd540c6107159180ec6d2eabed124114c462f3fbc01e016521a7ccfff993663d845c47b371a0c7499ad7accbec57f06e222376d0e0274c1fed36b669b02f9a80ae53495c7a8f96f505cd49fe35bf63cd95bf2bd2d1ea4bc41ac09740507bef57c3a7d7107ea44e8852d397e14f2f88fee9af500053427ecb4303b339805c13bef93e4ab7d5892ea2867b88a969200b41e7ed87c6373aed4f3735894d0fc56d3ffb12c8fbd66f04b433035cbc743c89d8e3b3b9b83f6aa3e0ba9fa8d1eb2351c505c6d58092abace4855a771c65d3e4c42e4a2545febf25e05158fb198333bb6c16d788c0fca6f704c94bb6419882a51f326af26b8ec99de9608bf0a1a0e018692a3c4d37dcf964d02a1d3084d7bd97a25b392872f0d365a068adc8f56b9c449b43780231c1481c028e0b67c3cdc33d15b0f417572aa08340dfad8a87a12b69759ef93e8435a980252d7e3ca4a73caa7407c0887da3e5dad1d819fac2e9218985900f6e608010d80c31c891089d7105968521300641d65043a295ca2e725c308d1825a55e646f5008a29d2488140ca01a326a4e6d9fc40a8a72915b214530520600d232908c0305ff563a8e354f60bb28066191499d2c7214c70e0095a0dda36cf0f4b02bf060b0e4c3bb034a75a7e37740014b91d8b42280b3d492c7fdbefce8eb32373672f1e6664df7a01d4d5c8033bab1cdd330d8e52d939cb0fd423159c8bd6450d983195feedff4350bac7a7fe757065c89b95b61c0665762d4c3b3b813d2ee8d52248a1a3b43101f8b8fb945beff237982fd772c82d3f10b444d5b290258076dbe7e717ef902c168ea3a4016169dd4e34143dc31c1da8c5bf61b76071c9ab2e2878be7ff6d01413277280aa5fc30cab845a7be2edaa1198fced62bb3bc2fdb19eff8f6f029987466568cadc9f2bfdf45fc7e111b8be965a12adf9d47ce520785ce3681c35fe43f820ff77919d75f0809ddfd15f452cb31b9e3dac407adc3181e45872e82ea916c01b01e3d4337a3b6656189e5df3ab9027255ad7903b289dd1f800bf5a8081069b4ecd82e131ccd4a2a602a58be03d63880301a088413f88a66ce4bb43011ba30887094360a66e08dd143a8afeb3e407612f1722abcbbef8ecdec1e1f0af5d6afb6a0e40dfceada73c384fb904883af77e82dc5467781fa66312fbff225f2b933ccc5dd1cbfa402df803ba46a2d283cbb4ae4588177c4b14f07636ca2875bd765c42d81d989c80c1fb5181331d0bb97b31a108a8b70cbf0fd5a3fd274f0cf48d5c95afb08bd4d66194fac2994586d62262068f51bde918ca84784e215ba1efcfcaf00512c53cb842610938455c8e0020f89b7b278cdf1b2bfa7ce09d68c9e6bc3ea548cd9100c0360f7920c94b038b7f388625127cbcde89c2c5d77e40060b78414ebc885acbab0aa060f90c032700b9499b0fdac25e76596d359863a34aaedeb01420ba0c3a9688e27016c1f8814717e85b79940cae140196ba91869f82b91311657eb5e46763887038498fd3355199c45a071fc61447dc4946d74d66f67c243c1e1a183c22852e2e3c464c4bb421c5e1f6f75f03a636c972280d497f353ceaec11ed2a5be5c34268311efb915115c4474a7655ce7a5c9e5a91c5d7301e2fe7f2b82fb9cf00492a7dfb02b357c0078a5373be8db1f703ec840199d0e0aa43d28dc0ff97c3f95762f4793b2c9db6c3aa08f833e493423fc9881ed68fb484f011607a8d5d2dfec19a94d19576ecf64e120fb035c70332c249745835fc1b4644305268daba89985692aaec9c721bcbcf1019b1c94fd58b1530c0e5fcc37433ed6da3c2018ec80218b4ef5e45ebb7aada323f06618140f0c5200e2331656328683b7a91011822f20e9f1705d3cb2fe78add372306b9b72609a25242de58e211d465323f1fc7b2c2335895068855e1b38eb76768a8a73df788c882fa471e9519b7fb38ee1fdfaa4e565f9fac27c56683d94f2e65787fd4afdc90a1d0893b4fcdd575dfd81677c2da5a878d9a6eaf5e351b1313752cb37f292230580ed1c9b36a00d8946044250410ce6c8b10919c9f47686c8115cd448acdca8d09b95e0611c2298a54fbee3e43fedf23015e850af135fda3c772dc1772dc6427cd17a8d2a2d39ca0e5deb1035e47cc3926fb54a169c4e2caa6b701033a74c120de7c149bc46b563168514f7af3d59efd40ea432a91a1070df5e5b08e3e90386f3655b94bed70fca24be18134751af3865fca517aec1aa98a15e526fb10e114d2e3022df84f8cdfba62eca58fc3379654a17526c8dacb14459e81bf3513c7ce0e5b7713dc872de08b83157e95f95217581c4c1e7ec22ccc74ae5d724fa370483bdebef3403f6f195adb1edf9faaefb43ebfa2053f216e427c679fdf44f9570f5fa31c43e9d333072639b2f554b67d7119e334dfb68cd7f3e9e965586d0abe9e13073ec2dcaa2f6d324721f178e76e4b712a3c4d56f88663f529f20808041e0c41e21dfdbc57d22ecff44ef3f51dbec98ff78bc1a9d0cd73bf03fa3111c175b16cc380547e020843a0a9b1ab3edd694d0dc2d1b487767d7ad042cbfa5738bd73c32de73628eb75db64b0f673729ec8a41bc251b2090df18dba419b12c3b25e41fe0bb2cc614cb010268b27191773268040a538dfc830ca86e490ee626e4b7a6bae1bdacbfb5c8b322ab71faf5e6a21013202105a3967796ee138487b0961109920551d7a6b4a8a32556201ad2e1e1b9cdf565c4f3a4d55be75bb6d0755fc1ff4704966469559c14ae1e470d37aab208616ebff59b4ff9bd3503ec30bb4bc3057c6e9708ba9e8d3bdcadf78099309b2d3effec03b156620b0423026f5014b7a0bf39a0ce54feb07416cb50730aa5b9b59ffa58d6e258d603104a845613ee8ecd0ae17f9f927a575c0b27774eebe92417f4f077227bcf415a155046aad47745b73bcdd00d06b909af35953125825b0852c7445073c2f4174ac04d97e98a7294a60ee8b4e52ba73b8cc2e0d4d120ea920aa9344a36b8ac2dd71971c81e0097f4555d98cf05f4861939807378ed37da872dff16dcc09766f45d6be7bdda2c263171608d19d5c44b1e8239dc229ef96549c7bb091c142dd80e9564ecdd3e7497b992f82bd3bdd4ea3a1fdd0085fa81c6d60a52e841558599c1f1930a30b6425dea1e03ceca8f9a7cc99002f419b7eb16efee1c914884d2097b9ac7b45dc25b2e38004d4199e25f05479408e9e0d5c8041b0ed8e89aafc30dafbd586b5594988b6cd0a25d5f8fc6d38a8e000840de6064d47605ab457241ffb16e0c73a0614daff2b679787263a0881f69663185b0471395b6dea1b72cf3a1b5760aacc6b53363dc99116a8b83fe1a016f65e8a080a55d4361d003e0bd98b8584091496d422467c0947167513c184927f1d724b3b1be221daf5e5e6a4cc9658c09f65afb42bcbee5c6c13b62eebb0378beae1d8ac627cbd3afe4cb57e4efd1eaedb02b4439a50d91d8cebbb137fa8f04c83f6fd3ea93c3194123becbbb76fa8646391414c59161727d76d12885d25167b8081d317165ecdb7a925e8d25d03b634e6d0196b4427080892d0930a8e10fc945b54a777826e8f8ce438425e0a3239f65b7d84006ac4102c4ecc42a20681fad5524e492a3d0a125716137d885447e916f00124441b8666b21dd96526e8f57121b6ef1250d199746286f1e37cf5c657ab781f7bf1edaf51c0e2ab9524aa29ba2fa19e872c7dfdd2a044ccb96d8d8c477e9c1a426451ef8bc1b09613e50ea9746e2eae71c67480670e95e9be0a8cc1d7248b2990e17c2fb93418102bec99efc80e812fd8ed8319a535291b5ad908ef35b8b8a6265434777be03aeca519af9811d376e4f82ae95fe4f6c76dcc2a4130e6c742aeaf16260ef6ada705310dacc4041c31dd6810a352c7514b6d58234e53f0f6915444e4f58f74c186b5066819cc8cee3984084b870deedc98ac4644aab231511c92d11d04b9b5c1774598f010c43278b2513c09ad1c3f6ee2fc76bb45f4901e892c62374ff0a6b78646b64342a7ec24265e2150f9989e964e5e0b09f79bf52a8e3fa9d333a0c4cdd1f510ae7c287ba1edba9f65a0468d85c1a3ec0638becbcc8d796ed688708002a296aa3b8534010cdf37fc075e4e30853d2574af1cc4863dbfac123ad899861aedba13ed907b8c731f305d272282988b1a75ed88d7d354c2c568bddd4c6e3f837c9114e76b56a802f5051a7055c0acf4988d20bf61681da3415d60b1874ea7b721239210bd897e6ab56a3484813613a2f789660574af76f93b5f690cb75d04fa36fda18ed5e6941e9e49379fc676322c45c28f581bc619630db25471515027fd7c7256f0ca2e95f1ac49176538b51b0d409f7e1cb5906bdf25a263b89c1e7aae2616ee44975e90a254bcae424f7182086c9dec9ea1fa0cb558be86c995ac6c1ab658164e9e153c057aeb2c069d1df65f4a87da6f7af0b14641b1a46b98f30356fee19bfbcf60ac2fb76a016fe1a34bef9e16c36e458c6f55ab4be6c56eefd7f01a187a32cbbac9e2a4c1fec11a39cb056f60f2b0ce647341982229dfe69276a2f6be0f1f1352e957aa6743e2392d2075d1fbfe849c00317b392cd8f121e41fed81ffb81ce48e61c239306de7af4f017fd298927e829c7dbc6911c93ec4ee2e676f2cee7b5fa43dc5755d538604c1d5667c489c61c0390bc9fe2e6b825fdd14589188b41e610554667caa2f743be33aedbaf425b001b6d396afc4b2c0653ada11759d10557d14fe777a28e1848a15c8170b9962ab77fdbd7083441e0ecc9db739f329e33fa5f54667e8ba8bc7f55b4d545fde7ba6225dcbe50d8d30f9d6574b3cf328380d9050e9e8a1961dac5dde137b67df9aceeff5a4ca1d4b8171b6ad52bbea35c9bbc918f3876f41a89b36d0c054a2ca247da2ff17eaa0bef2836da3f2101effae891b4f5461460b1de04c47a6dd804b5cc04bb987aa8549a9d5e63a87606f2849e023d88e40ec7b299af5965b506d5e3541df82dec3fc980d666d696586c5721b5072ce2e91b093ac40039d5132e6b8ed7fa962db9489cd9d5faa0812ac403715c26135b9e460edebd4fa9c14538039387ef6b8fac46d3e59f36f3ff931aa91d3d3008e9040d2cca83b492595f85b761260f38cc65a329b887df170df25614fbd5a29f5dc8f49302d3716b489827a02ca1ac9c3b058a2f38f7fd174f63b3a1a4e95b6c2e9506a67f1aa324a0b157308da0510d3a167bb8040ac2821c8d58ac90bc2e46010de1d171fa5aa6a5f507ca4375c910ba53bdbdb89e9c16283fead3002d713b4103885f81972a2b23f6bc733be5b41e9aefcb2619a6a060fe9a8354ab58b148f087c96405349635415a73a8820a856f488c356dd9549901fc4801b952182d34c569473e088bc466af15dd8f87f7cd8ddd0e07462a06d0cd66e0da1bced7d2520037748f7b44078548f0f4de1c96acdb43243a6498f7882d18819882d26764c936023813580887a07726ebd02a6521021bc9b422340a8af2f3a81c0e942431f06b08320c13610290920e8fcfe35dc1617e2b3dbbd12b6e74e6acdf30cfcc212fcfc854cfad03532aa1423caef1584ac12d5df6939afae2be50c5026e6f9118a5c18820d53ebf9729377cbf9a85348479b1ed4ea0d8cf78576f425deb6703b1aa509ada16890a23f3c142add9cbe059d984c90086665e04cc68a734e95ae3b47d363a42ed5fc430f11b8427c121ed5b9f751b4dc180a092f59d6568c71b114db3cc29526b4fa4f5c4aeaf1938cc4510401750dd51411ded6fe95df82647d1fe13b36af4564f19ff0ee6826628ec99da342de9f4bccb39738407944d10c7ac75eff79796ead069b82fb3fe5b529db75b60fdcecda5bf85a9c60b818d14612e8870f87ef17e693da5de6ca5791a08b33cae600324d9242dc268083295d4c2bd3548270416404a803cee2fdcb2c50ca7757cb1c91e233ac9098e4dfe66eccec7619a0f5d9acfe35929e80c5a8096d2ed08e60cbc8127fc8c28ce406210c7ba48128b90127133dc7d63168e53aa205d1767c3b1ad40395cdd025860836a81a5eb48f240590e901e9eedfb7ee26ac1bcdb6e3334b083f7037b00757f791039f815ffc76b56364d6d56b348370225002b2f4e832c4d4b2421fc313453921ece9be1a3928b12368fea6df152179371ecd28b228e112cedcb291215c637b0e2e3a6e27a3d80378b62ccab282bd6a4ffba24e0a9eff3193e165a463565d7bb9b0517665e44b89d4990f604043a85986d026fc4a097b7a799baba0213619d01ef495751ed81d86811b13263426fc62fe9255c4682f432be6c1e49965f7a164e8aee5c508011c26cc5e781d494724551722098b6ce01897e7f5a73438a589dc037462d4e605206865074ff8d65d2771aa8b5198aafb971132e9d8d041d7b4e433a700844e97d60421f7527814e78ad2310feef12c2de704779f38c09e9ca4c746b25dc7188884a00816b623546e9a4eec5d2b38a7271538a84441c88a361972abaf13bc600e382917a5e5c7b06f67c3e40fb36f799e7e99c41e7af6e253b61051594c0c617a8a8446ade60ab66af555d74255bfcffa15788ce4a967097ccd73cc6bbca5a08a55efd057cedaec0c2a604c4770646132a8c8410178916645f67eb567c2fec228c7f691a45b2c3a1bcd2f64ce1571b2c02b0b1bc26682355aeda8dd8528608258bb2a1d1cbe975a6049caf29b3ed9d78f9f841077f4307390c180d14eed3cf671feef0207c14116b923179cb9395ef4e1ae609160c4f91c32b4065b4c78375b9ed92b514856fee402614f8254525143b5bd98825cae8c2c33faede1743fd1454facd0aaffe114e5309594293433c302caacd91fab7ec24b4a266b0ea8b510999d83536886d515d660007e9145ea4b400260ed3020074975a8015205e06d2b5cf10a258cb2fcbbef3d7508553c925c433e8eeded866ea0fcfc14f196652787b5e6a635d19c5714b9d91ab1e8bc116dc6227e560989114ced2f9727eed42cc1b1224a4545308d3f5b2d464c22f5b61465b31b816f975fd7f9079d5b6f74e387a6db43c6440cbfb64c73db1964ea17f8228439511aa6656108154ef86582385768aba74b3f521682eca146cdd74bbcc5da49286da305494e340c2146de610f8dbd9e9ea4f1a07ea5d4d9741d01767f98fd6a2f5f4059d5c21e17d50ecbd4c7032ede7fe20bf04c078106b930f2c6e1760adfb2a545d287fb55a241d2254e5a016799ee1d39f0a0c78f36f42c52673dd16fd6e09fcb7db0df748e53dbf20a87a8474a3595b98ad6b74c8c0cd8841e1634b44d2fada769cf53d94b1ad693ff51c7fe83b438a09903f3401390ee25f139807f62f9bd7331ecc2265b83f0d13241741597c7f022fa1c5c9b3ba36954d145130f8fcf4126539b7edcfa99ae65afc9c6c60323b9f53c72955f70c9c77176e5611a6fbb727a493df767cb5cea127bd0f37e249a276b3b5671615e30b6a09b9d184603c1f666ad47fd1d992d976189e5686ec73327e5350d8c48b4887831214f622f1a3272923f33d9e2ba575121defbe17143690d54beededdd280917ff3ba09d65620cd767f8e7ecca210fc6d3dd7202a71dfd491e103b56c830225906039a451f1526cf4e1a9ce1b302a3f05ffb543f2c426c32e71aa3295cf83ebe871ba99244206585255276a18668b092a5042cbd001920dee07032eb3b7abab4991be0f2c7adbac1300d7c3cc99c32c8a7c32478d968dea12fb3f240f8178c926498664bf1b16ff05bd04f03176224e25a74f4eee4d7f5ca25bc852762915f7ab4500bc5ed05df58674cf2af38438bb78f1363ed2f061238d67a5a2773d0e1814ef2f39e253afe2fdd3deb441011e2c644d25ec9bc4345ea5eae23f6be734a91ca1434cce267084f0dc1971967c9ac393f7ec848c97049d2f66770f307e43a9a094f5bf97f3e7622e0a385a3d4a34e6468b875a3412c675dbc59afe2c4ee68f85fe90360ddfc8bd9b23b1b49af171231c972d73563659ed766361a481cc3eee95275d1b411fd46d9d2e6e9d0e023a83f5deec13a8645c06181426082e7c2086b41b9795ab8abc8fcce14e4f536991d8fe1fc808f7055a70adbf1eb4ae5a4b59899acd991d3f9d5bd2f8c071914d411f2e92a330c9e0b28bc80c8b0aa1c63534158f646e8868261e28dcaca74a8193a32f8bbef381f4750695ca78fa6177a05421e617e87d9dbaa562af61f4a1b2d27acb56607a9623b16afb59df325e14b63d1f8fcc2dc0f71b38011da4cc102e1684bfd8342f8bdf06884128183ae68e1e2c31323e27d1b727620f1886d1d2c7e7423cf7ab7ae5ce2e771c582ae6691d9327a6723ee5c895fe712f2b2d44d38acc6264d7bb634dc6e5f3551953d87c9811b9a0d8446e777651761315c5fedfeb8d33fc6c89f415c129f34dde1d65d4fb8b831025751084db9fa93920ea2471bf4d922ab92f7a8c51108e62580f47095f808e237e9ab84eb3af162c9fb3297e79b90a66948c235dd43ec951c474511c93dd0a74120157b4516abb28907a23c5bed16e6bf9fe8ff15618d924db0057f22261e37b01a0ac6e0245f146e284edf575b1b13d37ebbeafae3a12f52ea557af3ad58903c59820bd46c13abfbff108a0d2fb5817bb3b7b26d16c3255505a0e255915a694ea83a1af6eb8918fe7b353f71db8804dcd22a94241b54a661656e95291d89ffc5c672cf0fb88182ecd6eb7d11f2ede7c2af3bf0b6e4ce202d049328fc99153f837f873bcf8fe97bdd4d457abd8e1ec5d09949d57425cd1153275f1c061d61fed7b776c5e48fd360fed4b1b0d5ea409eb496b26dd1fdd3bb6789e4b30235ce22e2e8cf02cc6cb1612c47cb2223004ddcac97195ae0cccd41fc8c754ae3c30c243e796a77228acb0afce9b06c620c9f029655eda800a1a4d410bba9710e655bc91edbe6f855706bd873fc0b2117fdf5f7d53e70cbe5277b373dd361f137ef9631c3ca36ddaffdf35562412358bc5481cec17fe6f479648c6701e18bffed8473366fdf8fe48649014b3a3b52161378aca56698248ac1ffae3c91bf2fe2c226dc5e7af5362652c429ce347f86f5982a607aa0d204fe72ca2f1962c71b80e7c9ebf3375bf036466ae5392888c77cfe80edc5456ff1284d015f148e0a09f9175b88beaa150e05bb75176f88a93d682eb07f22588674e7bbc3adafdc51ff43d222b7d46712e377963d5594bfa9d0c0b931aa2b917734240ae944b905e9385ee8f42e47b6d59bf71d5bdcd2a567f5804a9c6cb8288a05e0f8cd388cb5aaebc89fdf57c646943836edf43e20c32d12fe09eb35dca841791aeb6490b3b89c7ff984a327e458f710a237050897f862ede888e68637d1dfaa6494c91ec7045ad235f0e38218826fb338566137950c3d4146950eb3e10a8f721831c539d090b24abc2361e1c30c52c1fd81d0b9b65825dbf99c721aabe77b48b2b11d3ea09a105bde79d55c47a4e8bc639f13266b269991c63809a994c8a03d07f06a35dafa47d32f16e5670386d11cccb0ca02d4282cc40e209d11c67881a499ef2108dd023401271807c5751115ff4d7008ec409a93c72ccc75b9695621411bc4ec3a2e7224b2aeb096d24ca8203af4917498d923b52cfdc386e247f9bea1e2b85b147f70e15825457579d3d75ac731ac03db5c40bae4fd807c9d5b7c1ccc33dacfcc669c6c92a999b166410304131359075895470c4bb6512b9c56513816708dba634f506d10838fe6b9b73edc670afbc71468e4dffeab7da76321cf0cb3bacf893c03afbf8e310aace5d9ccbf81aa316da9bbd7950981fddba0607007e3fe469bc67ded6cb26d5e670b2763d04dd45a17da3e99a1e0bd52621951211038eb371faddce593bfc3c365cf74787228fb2f486b9410dc7913c765e3ef953296166a6b3354b3c41c3aec9ff7cfef67fc59d15422ce7e394685cbc0bf08d8df5b5137da40e7fe3ef485919d96811c054c5a83f5c559a229a01325af76eab64349914f24458e33f123a2a8f4dd5570da167d4c7cb559a986925fafa30bb53b3ec7bfcffc525eb717aaf595801f7d773df41b6abb598a55dcbe4a2480d05571bacde6a47bd7970bbf778d0f4873e3c58776eb2b7fbb8cf2deed0fcb96b22123d80eacb0bac9eb329cbca48977dea8f859a56bb04be42b7bf475da772c0a26feddcae6aba953fef4a1e1b44bb0aeecaef4566ae69c88e269210410044b60add8b89c9ac7bbe7d54cfa76ecdf350e75bedbf775e2fb67342941441f5e773a70e1af60b68edf88284632e722416e5dff6148ea6c8c73b61ecfc6ab8055a2560f6584806d46ae2807538b5098a3a470e82c96152e6308b558b19ad652648f2ec1f6e6ca84e7753382dd10011a60c954c8fc947f6091c85121c27f4f8491943ce0f32348db7546423bae1347c05294a4ef44b966bfe3c02854072547fe31152d1b498633c34bafaae5db2823aa07f0697baf6447f5b8db8e190f4c3eaf2cdf73a9936507127b26f433bca095e3250c9593364d04d900c67700ed8a80bbb4afdc72f56ba442eb1f9f6a87803043e8f3d8e01b42ba6553ac6edaf44bb2a688ff8d54ebaca8622c286b816a2dd190689061af97884dacbba5c8179c293360e1d0f33cf650dcdfd23543b699333ce8d074f68149f938c2621892dd2d786ac165a8a3f2f68e6ed2434ca9c9d32550a373d89ac9ae651471a7827bded2340acf50845c573ffd4f48116d3b81a10fa21fb49fc99b96ff2ec1c699ff9f8f932613b62338f3c7db6a3bb48cc4d8bf911aa0386c978d572a70acca24560c03524111acc889a8c4410dcd40a2915d0d3ebb954d4b4b07a65437ec43b87df8e04444783ce0a123509e250848aff69e65ad40c7c84709f1fab768b8885341dce56b31da90457e7ee6119351b1961b7ff18e13352046dd438106ba862b8665c4a571d3e4ba7fb551b3549fdec37c9f87b8cba242723a862f9f64c2945cb0a44ef6312682bda9e11dfc30a915e47b11f0140c5b669c544bb0bf8f90e2d1e72dbdb149847ea2fc2bcee497161a47f70444b606fd0d9f92195abc3e056c7c7a25f19390ecc02b73a9c29bdc10ea49d8053ecc7afae1add73a6e3e90d0636ea07716b008b47b40e39f72c48831bd1e3e5f24f8714f4a4ef8e083dc3352fdabf0e5223c74b8ea6d8a0055d3546d89dbcd098e767756d28b77eb2f0f8b0470bd742a369d79640fffe3aa285afbe4bb585a4666abfba2820d418c99303f87c9786d180040f55531901fb1b44090995aeeae66c9cc8941a66292779494b4d48933dc9ef9c464c205ec8eab80b043ace82758d87cecc12b81a0f711256adc01be3becbc8e4289bcdee4017bbf049d086251c8e8f1d2f302c599df86769869c64ed3d324b4db95c32d8b52e595dd1f63e658f285cc44a83eb34b3a874ff9250c04ccd4056ec8188c5628d040e5469184b24e8bfa747568849c64082ac0ef65fdf838b8f94538240989a03b00eda61af699d011159123facee789478c96e483efa258d61f8ace2543b04b287870e757ab1bca746f95673ad461d511fbce3c437d4486f7f78a756ac07d348ced809236098788c3cf38c8a139e4fa8bfb572d46a674dde48723fce824a65a96c5ceb3c4b0fd9f79ba6f417b0a1fdce3f91f59b2fa52da83ca29a6d724d549db817c88fc76b0c309bfc5952cd08d19eeae41ce76862fc6ef2fd1c99bfe44247e754f3faf8a963d08b511e1963e4ee525d185d3ad3481cf019253e29a5ec8c9fe5b102c14e20e2be54279ffd8e220597119b3a86689ae7f63c8ba4c2231b4f633c1304cde2c5a4dc14c3d3107379c3b404a8da5250445085dcfd5fed9e92b141d1904854a79d9d8a459473e0b87fdcef61944c30cca344a0a77e3213edf4d0e513ff4d69ad60b29f30d86d1723a8f61da32cee6f6e3c528a163b01626187d03323314f5ab7ce4416322091df06d2fc5b0f55803c0c6238c423e374619a6d68f73e660caadf374491cd84c4bf847265c6a0e2f8008e48f9445173a1167813259397b10e593c20c93e6b0c726050635066fc81c34a91fbece9f54a872b108d6771d103114e11715fbee0f8d99cdfb1a765b32906b1161647a280f9569963868b72de9365f70c1e0641abda6ae6352bc5a891859e8e363b00f43522e64c0cbaecd712838cf9055e0c5f418121ff64666eceea01e525bfe099295c34797dc5883b71216d51961962d5069a9a379a338fa625486bb0f317609f4bd8bd1f65d9b17d195723c18708322459efce7141209fd1a76ae1e0b574f0e4ee84e2b69a5a19b38bccd01106b90fb078e9f74cb43c8030b001f8eec48cec8aafe0dfbc65c74b32f04ae96ef8ec0e0fff39af34b8422f7f9389f530714bd16f92816dd5f3291c589fb87062ed0a135a36b819514e6b1f428877d93e55e7aa7bfaaf54cb01fb201c540bb1b4c18e530b62b381f8a596147201dfa416c330d54f5543ce7a8810d04919f22d33f0f15099d40202550d150c1129214656d7e65cb6c151fe6307c6bd2443a741a9f26a18d4d75a2c7e26728c6b1894fcbdcf8d9fd60207cead4ab4b834be7d07eabbc9566c5f7a5e61503146e6424155f5d060f7de966b688786a266232478300f373a2dbcb05d29dd1a11e446cee83e8b94667da950e43bf64e0c3a2b2d7d9d325dd47536f4f2c2c3b2f923c1cbe81cc520e322582145312839a31c22f9d97c2d2170ace68acfd701f3d2022345b27f9a18e4c464fc046f263a77f4684ac118bbd2f452db8837f03272a9d1c0cba0598b163b7d6303d540cda09a1550e68a75b3434964a0aeb870a127a4a0abc0f0e1e79c2e0346f93e6f62392a53740227ac789d8070e596de73fa777c68a708d9209b2f90a93465d90be52241b90e82fee63267b3484f6139735a86d0e6d71d143420afc9c56c0c1214e056d008c8330d5f7d6c071f57d635047f2bebe200822bebd0369c94d5ec40b25b087ca6cc58c2d31408a8c61ec6a086c8d73faf9911c620350c2c3b2f67b1738f21115e77b03428f3902d33cd141eab3dc5a85f18f895411318dc2c1a16a0206b7da58de7fd6d67b1d6d34f2c0c7dbc1ef484368789b4e4374d3461aeeb65e70456dc6bf60dafb70e5af140a06eed93c5f6850f63b3184891352383ec0f974b12f3a6ffa5601a47e97e1bb2433f4606b1c539b6753e8f6512a52ac2942495d5c58c292bd9c09eea46b6f6943a2d1edee9bc7af8e980956169ca47625c68beca4b29c14294bc8a750e2578a205dc19b5051c40c9ab98812d04fc7e524c430eed9ba2f828adb81ea12a01fc6e2770ed679b3cde023e91e846c0e7a5924a6406adb204c7b22aceb0ff3335a98422fbfe636fa5fd54d20c82fb748f438b45edeebb286b1da29c31daf00a310805a1c67f17a82b83448e41e6ab608b888f3375cd111d19fb59f323958cdd08a13fbadca5201014819a41a2204d8b81dafb2a093626063b8e064aa9a19d005c7ebe4a0e72503c06f1dface8f95b6045db340bb0deca4297c1b80b626758f1d8741095f2ad3fcbc89a214a742a7e93c115910d982241b3e98bdf6412f76d534a1bb34207c770db57407b33a20cfea7585837c6c3f02fc3fc0ce3318cc7330cfd17b4af7151d143603d2efb9a221db224a1da3038f4e271ef22e3ec28ab9fb4c748bfabea09665da67079e31ab0d7911e213f08d424f71d36fa5639f15ee657d943b3a656a9dce625648b3905117032217c64dbcda2b19987d1fc13c6d60022bc9a1a6db2b945cb573a65d39ed2325bd39c90e227d8ab3d288ebc180bfe895de8bea921b573c50caa699e0c9447010f45c8a28efd8a96f49e7e71917d6b1eb4991f24fa09a48524e965d05851af06978b7ef9573db7961368a138b533d4e1b9db50ad15f34c363c89dbb569644a174166232acb09124f32b8ff96831637a44e37bf5400e9063bdd92c3c61a1436f1ba4fd1953ec3f5add4b00abb918377630f2e86fbd0d11102877ed038d22d958d2508528ddcc5c087ad63b6bc1b0bcf7e50f59360f302389cd723114e872a2b9569786c8cdabe9780f87f02224626df31a62141a1614bf5ea994d0744c9af87e755583cced41eefe07716e795c6f9b2751161df51e10f5488975582e3774e12bda60c6245a202e516a5b045c4a6434099a909221a8125a0fcf86f82821cc06e4f941d594a100efcfd132b0274315e1da2e07cf81b3a54225dce3472b8bd6bfdc43432860c41826a2948e5ff1fbe95280f24c6646f920d7fc97fc312196899ec40c6a5e54b74a857f72152c611b1823a4a29406ea5f73588584e4f715d38ae66817556f8e35595c85c27c6bda92b0cb1f6881d661a05e49ead6aa69e9348ac5eebf55f5bd77b8dd7d9152b8414686c28f20a022466ecfd506fae19176b8925f0d008e5c3615e926b529866856ce5f2e06d414ee4d7ce962ef0eb890b8eba493423268b176dcd7377554c8777a442eac469e82aa623d7d4e0438ba359e0d5d60eb7bffa5ec5f4f12fb35793acd917523155f28e3dccafee2846e736424b03826847d8f79ac494716c4a5192534cba9802b518b0adb56cc21f3d3bed5d73dae857264617b04f7b5a75d592f65d01891a943ec517488b1d651176f029000387991ff79174d93dd5e99b07be031ff1668ab6c00a274fc8ec47936a99d996ee35ad044a04019724cdc0ce849a49f64bc93019d7192369638a45eae6d4cb9a77cbe9ee810da74d8d7b1ea789be26df5f39d3054274aaf1e26fe0e2327bd217d2eeb56453c49bcb87e50bb4e8cba714076933e4247bcd30a585e0a132744a740d42c4ff155f59bc341afe41f26c35c08c2202e1a4edbcee4654a55e71d1da81cf6abe311efb5e1380643232279cfa2aafd083669fb5a0f646e749ec7399f51c4065bd4431f569440041dd2c563c5adea747cd1461734dff4ca11a64c93b740437a8287a8d6a3b1a1be4d85380c665a524ecd72874ba51b9c3f6d6739c39c59bff0b3e531245f904f61852ebac2fb334d6f4ebf66001bef56229a890cf0b3035f50396f26cf35d138198d64bf4752ef7384ce486f1befc9799bc323de10026d20ff6c40062cbe14c62175ad9c4aa84c50d73466083a940b8f645133981bdc04c2111e5f0e3e1dafd223948f8d7209fac0457d336209db31088f81377f3e0a32b1efdad824ee4d9c48cb97af431f179b43d67b17076a9cd4265a4de242bb6ce36d2e3e09efeecb6a52c9e751e4107d6ca7254fada407e7a5b844bbd64bd619fe949eda4b2881d4ed0a458f093d09ae814cec699f0a860313b2354f5afc4f6f0a43b24442396c140e880b7d680f2917bf4078b722246d8d0e862225da171c3439307bd6f9d794bb7ca1999636c6d3f1c11d354bf8a4db7d1d1860d2402c7f090737dbfda06cf6b91087c5614e8c796f9e240d321b4ca60b47125d6e6bddf2ada7b6f568d866d13f7d10ee28a908572c06c4ebc1324a8e994e15d9f419821d3312a4b7a115c65c0d2c5b7c106e66c52cae424e9c5ded29beecafec4a960dbd8f58902cc7eead1cd272736c7a768d7049c71b0ec27db8fa8de19b494b99d68c584df0efaaee8515566085c7cc1315f853daeff5445eea8be550d63a7f739fa93e7e6ca26dd5e1d1e07f6ad6c2685fe6b50f9eab412861a2631bfa641bc813a51173aefa211169a3116f6762f05ae871964554b42c83b4924244e131d5916c0b1b74980e2cfae71f0253b336b60c4ae2671fb1bd4a1ee59db3caa65dcf224ff417a5f9abcc7900b40fe417dadd43b68e1846936251d0ce6961511309b83bf97e346773430685948cc53846f86ac97095f383d3b54f8f27542f1fca0b1ac4644e172bd01ea29d6aa98cb8c8ccb7cdc193fdfc1407fa6c1ec5af87be59edd553aa70ea84d0c94cfaa9d996805d6403872380f1820934d212fa95af51026eee4731f377e18037f65f882a9a28b0b4effc36ab6e96224802a40b27587177a20002dd706c2d6e868b95e0abbafdcd6e7dc9daa26dd7ed00cee1e75477746e7176f34346e7ffe357b882184312be24f343e833d120e5a0bf02d9940a23e70917964fe0cf3b2fe108e2b9317edf9eab6477a91203d361ff056cc3841d815c5a968f0f16cd6a2e8b678cdf60545fa7c10c595229271898eb917599d5124f979b5383f718fb48296d4e3202fcaa72abbb5a22734dc119a985d3022232381a44d7fa245f71563fbcdb812a0debc180213308723dac91a13d57b0c3fb394e47762841ccd1636f7049b5bbdc1116b95d7822ae0d756716fc3e257440a682931caff04554a7f7c62b4b92b1ca6a80b0cf5205a473b99073f7bef075f912eff8ec0d48a31f100eb955782aa5f20d314d1f7325c74ae08d1dd288ae1f24144813b734876587339dc4e00943d934f0f00abe9372820dc7d90cdc854b4b6e2f1df23c31acaf74cae3441fa75d75a363a88f52c81d0e0334e504c1b073453c6008589b1d0f4f201fb6e4ba3f69a3a1e980e0460ff4234d25e13c702c5a43140636a2c0fad69f81ba708721a7ce32809a9a3db69f0f1e3ec89f38503d85437b850493ca314bcc3d3fcf8d6f71ce47a6f9983dc1203b09b9b015d3db07dd4dd808932bc8931a175cd9a630574fbf63d2d87cd39dbc61e0d77ece3b78b731d8ec9a4e49cb4fe22a873facec435d7a324c3e3e868b9512523741b3841b46eca7cd5a54485f8954351a4145d4e8d66f413ce3fbcf0c5c55a9bd4e378f548e5ec066997b44cbaeaa24a293e10089aeb62fc04d251084549d18f01534b6f853ef4045f4b77bba8fd1cae9e987b78aaff8c6fba75b3d557c18947d2744130adc865f61ea16f99059bf7e77c6ceb217ff10408578d902d184d772c35c5eb16128d921e7147842d1bd7283b56e5d0cb85814914315aca010345b2365aee8d7e821f387dcc39c00e8e5e0aa85c8a18df0abeb8150aaf96823f7a7b5d48a95eec14aa2396508c2c732f8f7df53076f8d62ef2961cfd4ea8a9e3cf51da2e30f7c4151abb8929c6b71ba0895dd9be99cafe70f81aee0193e4a471a34009a6be69f52ea87694bbfbe8c2939e432c8dce81de431ecf39e2d60e4d6d936241fcc1f5d0096832c4b1d40895fe7c353c818b2e489604558ac2152239027488941b3415cc562d4181c5c0371753295a88828f234f80588b407504e632d34c57d198d23dfab67c09ac1ba7f54cd18618fb0ba72099cbcc36f463793b0abfc121ee8c848e2db6a4de9a27c46056ce14c9c7d872e98293fcc472d5654b1a8df0b87c167913cbc7519b9a77fb2ff845212920e1343187ee9a3dce474f3cc3e1034dcc336f35621792edb54cd5c083285d6ba86ca258a7bff177ef449d4cf1cd1424cefae1b7c6322e1c9a32c2f1e49bf85e1a78e5f48e62c9826b501aa238d4baf40980f6bec85640a0c33dfced226951c96f0505d6227c65a2f5cc8e74299315c9008e35029a31bfe788d825722445f87657225a569bba088af8b1ac5f30d8ec83180fbac5c5029c08c21073aa6114258089a8c67988c89cc20bfea92e94313c545df2aef6ccd8f9e0d8006f24de4dbaab110916fd25ece0d7d7dfc9070db1281a46e24a9157eca532e2ffefeb2211ca52923f494396f9d714678ed56b44f0f8869bf5cf12858860cfa21cae528ad47287baf75e130c29866214e1bef0a171057fde2403393086184f195c5624f636c43a811bfd51b3a4e5459362de5f880d2d2df77eb58d4683883555c924d306dbb1aa3063126a13a2a4d286b1bc0ab6c8cb1d3e4b498dfd5d0a188d13671b4703f2b036c8494dd96d6638b3c9f03e7463b84a9444db994efa7d880a876376cb4274f9fb10c9aeb4b9008f102aab845eb4840b750abc151606651265088d9aea078722eed2a5ea354892bc7059632486409ab61279e02694232cdcaf947e683b50bc58d496a30d84fbb38128019c6e687a4ce0267922db001e85197a86a30f347fd233c77ca02197d1336cad137666380cb007299430c29454750efd0c11cdd5afef9f9e2f7c339365965d5a3e2348e9337ae4ea445f4759d4fb163c9386a06e267e3d2ce785625931ec4449dd47ee8c8974c09c54c20deebabeb361ab13955bcb3e4ff68d6f4ac5c07cd4f6cdd71da0e6969880b796d85f6e766f1092395303e2855e014775cecec34d630b0a837669632530fe4a9a7cc8605c87924b3092c0887cb0aba765f1204089281c1743065d2f77c69d19305d9e0466fe6061ecfe8ba5b0adc941fc40d23b50713c3746bc582227322684314fca40cd2b648fe4b6e2ca19e47486c7c4286f93461d160670d553abc1e57bb3a823584dc59857c80bde3cef09b9d22797c020e6be76a52f537a119bc570252d233e0190e0f30ddcb1ac1d880b6f5f3a5ce0784c23434e90956b0576e26d0428c45124622772ffad4750e91592baa3440f01955660e455b66a3ba276c118dac3d927b05fe681807f19e6d4a24091eae5cde4328babd026d939922121b2ce6be235a85df8e3ea8341ea4b9312c2e2284e0a46e4e3583a2584868f0202bf4ffcbb6a9eec2ebe4baff34d7af141655b59f198135c62c9ab97ca6a6c0396aafdeb0e9214d38724ddc98a1448525c86a6c584d57513c86419e3a6fb8891780d38cbaf2ac77f6f5fc03e37c096718ede7da00f754743cfac70c75e4df9894a5ebbb4a3909c24e0a1c48f9ade7acc66df37a293a7c7016507c6788e12068db31b71200a913012b2fe3fc225d5224437da8681db904d9ae2f742b2db5df224ccb12ddae66526396be72b2dcd0480d697e9f4cb593311423cbc8097579ffc8b109315d8799bed37e4d74b50dc6b59cd4b96956d01ed785b9ab9d4a6328e041cd5402fb965960580737bfb7e5001d97bd7848fafd3bae24418846787b30621b5290da0d86ed3f1e77e21e2ce451465d8f0563e61f8d52d3bfc50e2ea93d0fb74d9388d0d3ebf8efd949b98ec8d169208fc2fa1ba8a6303c4923ed3d41d088ae5f0c9f1f279d07873e642df690b405f240e768db9fb1dc0d11ee2fbd414535e126c64f83222110e9a67628d11e906fe6ed32c4480118cc6ef58c557da00e25a82e66adb1b6d93d30ec711f5871709da7dcfb56d676897a15dd3d850a4f7b956f33d2bd28990b7f0f3ace37ec80e5736523523c91fcdf8a92ddcf30ad7bc0ca206366a8c5a6f09a2b62f6ec98d881bba093d7f96a0325c4d42034f0ad0bfff45f675f4b716d50f4a67ae22ca8287366753669c0dd331e2a42050ef2f3d336954d56d1a1854867345aa347e02b8e45968b98cf96e80dcec635aa69a0878e3b8dc27031fdd9b1c26513629d5e634480b61ce07517b89953e91c1030c77dbbacef03de73f6291a1f1bbfecdf31627c900605ddfba6a95f2f98a74dd445f9db82f3d4a0876e5988d099de9c4a357daa0f7506fae29b7d815c374b6fc46bcf422dc5f99aa80b13cb582b0c1bb185a288bfbb52ccef840cd0841cd9804b5ad9b3fd1927b87e86d0c57b619e6ca05d948cd0a27a39cafc2aa606166db05c79c457a67b641d165737765997194877214cb9afa5431e38a3e58727efaa536d4a8d18b9ea84ae62a300228882261141c53fa8018699b290b90cad408197554516664d50b9a912d103e75c72981e66b2dc456b4d83071c10a811c470e3b74977fac41cb86e73fd7c95d02daba5638a41e20267693bd41042284001143d40739203e10846070ace3faa816002c193c1b81dafa211fa353747b1625889ef04020be65f54d0556c580e0da8ea116d34f13b5b8a4fba5e165a150971102b2a647463b291661ad52c8e8454747a1bf836eeeee8502d1449bd58765336d3fac4746a4a78bc565a43635e3631515a9a9693073292d5373504ddd4ad6e5f7bb73dd918310db09ac43580dbc280ae85a68b827d51938700ee55587f88e7e3825a1379fe5de0245c6c490a8a288ea126409b4e1a6c2578f2e04d7304370e63700cec04303e0eeac082594154d145118b5edf52b13105aa70eca2050af39cce61d9bdb6f602bc4159dd17a425b341c9ecd13ebdd312c046d7df647cf32e29590c2477ad7dd583c5fb4546fde69743aba03027b3aaf51d336660798c1d73449cc414f053d54960a463072978d91de3d4377879dc975c366868a2526dd17e367db982764321c71ecb05b160559f102a22eed73e77df5e0173846c102303b0cae7971005e824266f4d1448d620b487620d6ca1c729867d249d6281f97d0a5bf755105908afc7297d66bb652e164b5108ca8f67c96a933d5f7cfc0879b027a30367ba468a30e9f74d947544429166b4bfc2bca4a58f4de9436d0d6d34c468e7ce78c2f2cbc658337fc48de275ff1e2cca842fa4b83f732896662d069b587d31c13537b1eb4af226097a46e064e14e1309f1e2e6510565e7e517576eebe850031448e684581b785928f4e3242febececf5870a096c0186397dd4c8363d9395e57f618d9f1ec5ba7cafe9d5e2aa5ea99adb6de7815f98a5dad1336f29e7d58958c4708fc41ce39f0538b745a6ad63a526a8cc69ef11da590a207993d90041d29aa7be5bbbe88030f0cf831df9c3c1fd20b6f21881e6d548fa25e54a99717e5a77c86614138122df2d807200845c022bed4e81580a046fa4bf1048a6250001db33e415b95b5c51cda445b232ac4979035450580315c43b836bc6b558421b978aedbfc03622e2a188e40af85ddb1600cf96fa4ae34fc84b70652b588667c1b4cfa122258f67c509db31f6e54275eabb7cba6dde6b3dabc4c1a91b39a10fcb778f024fa5be5757112595cd06dbf3d6685515f71787ec538c4e16e9244f69c608634ca880b2bc5ff463ac2c88477446acc5f8b5fc01437045c6248af0fa456edce2bb1b6be6988de9ec72b69b111b066847bb65e61e518fe08661e7a1dfa0012b9620784e1cb2154b4daa49a6a0eeb42eddfd040993c0759d866ba20647f6e495b292ba39ecd01497965b9f2a6d9832802cab7f362f7c394c9b79bee7ec0d57c93151957756a39b1cb7cee9feac740cdc47d6e64a930e00e19f4c0753855c82e54fc7c328458eb4a1a9f26ed711f3902a9c61a3e03592f8fdd1c3dcb0607a52d68b2cdbd145b680b5267fc283b2ebf6eae5da9034b6f0a53b474ab264d20ba763866d9ddd0b62913e9e6be32f36cce7ac2890a2308bdc1cf2b6e229827467a6e794beedcfd16beac61116af06316417ab10f333266fb2574244bf77c1bcafea50c3e6bbc9b69c72ffd71b809b4a7d6f1a994fc9c25cbe814cfd8b12e34cf91b8acf55f87824def00fbd1d7e361c578f4fb939a10ed8e68519676a90fc104c37fa4afc431582fcd841df5e3a102b62c0684f7ca10a828b6a9bc12a5d1fb0019bd8f384e5a70b21638a1edf0413f5cddd569369daf535b0aa63711256df16347c43b2dd6a6205220fcdb5f47e9e96ae7bc0ae9cd2ac676a991d10ba3429935f33bfcb44179c54df5b955ccf77d1a4907eb7027d5554ce34d90890c629a47487915a3de5bf6f116d28f092bc6030776500f73cc7cf0ee3696cddd02ac1edf1b2c08ad6a62c5d4464cb268652309ff7fc302223ad74b75125d0000a43c04f0352700fd16194f8c7e4d71659d36946e199dc55adae391768a9f5a41f9db41726ad7abee8e7f429a18e49b0a1805da07807e034e32e42a20e65093bbbf942a20f8fefa3e848a1340c9d8c6e70dce0f31cfe5ff2e9be748a48274a14a4b963f11f4418927ce4970411d2db5893810e6e48a8e3b285cc727e62de628ed822b91a1f00470591b7069e64705f24f9ad47d8a4ee987a5c26ff592896d1f25dee69c36b07d36ff9aec094d481d487591dfd0b31130ecd6c5c6efb66ac15b7f741709ae99ddaef9aed5a78572cba2200a5d2490f88589a0344d27423c009d7decc21ac3e045f611156ce0815ee586a4509236d4f276621bfd4e0216a9b8b82f6c307c575ea51ecd844dfe890a728d005040891ce94a468b4da3709381204d6f8c90b0d16a80454d7f9aaba0c2c5b6061b007655d0e2a29125c97a9980f31e547733b2a3205d814aacaf222968612104901ac03cfae9c29c148474c5c38e8c71e145f0dc08f26e85544a1cdd570aa490c537822a7c4c2da1cb1b4191c4d640c9f01b89f68541634cd4b59f931bc1ee6b3084e0c6c58415b39e446fbbe560a49e48fa812cf15048b8004d4d1cf472749ff6903c4beea4ae672f87493d0f2087afb79dc13900809cd8ada259348a8e5e909478ea750a6c6864dcf46e0c27984d748f13e823d511244c7171b15728201bfd07ed633548aceffb13292cb31e976373f2200083576651c6f1486da5a15b0f08882492727e1b0c28168653af077b1a99ac7f5becc6181974130a7b87e1c753cabee734b926f31e01829776bdd6747a600755cba8e193d04d6df7872850fc7bf6ac391bb65e51fab993104b1620e32866fd0ffc009f0f95e125617877bb49561995b8e453d3b5fe1b9f4760b5f768fcb531b6ae3502b10e694a755ba443bca93fb2173acbe37df95a9c188b159a2203b31a9993a678598ff74b676a6c112d3d536e61e67ba9b3f27de03af2c2d4b1411586ebfb9863c9fc78f391ee31e9c542e955ba722f806a3587486d61e260e871bdd21acb2945b81c393e4fb86b712775e3eac6d16d5a2175ec36687ce3ffdd031a667cb44ef39a1ae22976c5f1d5db4c201d536490925106e5a31c9442ebe6adeafc02512d39f61b9aeb012455242706b3aaed8ec76b0beb3750911e2231d34c558c6e30918998b2c22737de535c8890f224edf1c69786b00011110730ced1113bf834d5def31d2a6acfec01c2d1b251e044c5b38e82ae423f8c4acf2024f0ccd298a0a19f8c287a6849d5509c7ca177d26652c6e5fa670673c8b2894fdd54ea7850b6c1949241936cc0021a4ca954ff1359aaba0cc1f001f0637c031bf825860fd78b6ba2a87433a0f18cebb8682e48ac25e5d310996529e514cedc9c1e2166e02e6441922ccf26e382f0a08e0593fd18b38940884662258392cf7acbc61fe7fc94765dc8b43c0ce634105c7a6d6a119bef49508ad887df554eb17bb938869b79230bca86fcbb67c4955fe4c92c2e20ef315481f711a389156845e8b3d5064d0dfbcaf91f5d13030cd29d786a892c428ffaab86cfe016aae282d0a52419c5820e028c8118a6ebb7bd0ff8703a467f6168f9bef8850a088511a179f59d026428ecb4104e9918182ee4cfad947a8edbc451c01f688cf2c2b450f4c78a7ff47f81374140a0108aec4884acaf21e319bbdc498c4d18b6e38ffe3bb23a0cc1f858c7d44af825f74548c6f4301ee9e265c8cdc7af2f9b70c50d60585d3812e6b5e62b937faf4c23b2788b2224a238f8950ccb92167cc4135486365429227e2dfab51344031f93543d8cacaf46a47f4eacdb1c067bae72216ad2d016f565d40864568a10dfabea45bd4ba44a2047f336b349603e29379a149984e0a5b7b070b78bd307c52d4f1c725d318cd1907fc5435a910043f09ffc8603745636e25929ec04751090ea7e1c29b18e9fac56939553622ddaf481e82476ca17182a601a3f59b6b8964bf9feb4265dbfe8c4e3285d039097308e954e1c81105801a340ef8a8aca512268ace03ed14c3b0e0c079d695c6704f84027eb7736812ca556ec22ddaeb3b99b59834812800598799c33a4690cb12088a79355f82af43a62859b1e658d79e702f70a8609faf414f8233cd0baee9358b43d01b311ae6914c44756452a93c5edb0a0894fc83aecaa4ac1291029e616af42574ad53fe2da96d34f18cd1d82f8907e1074a7bebd044dcc1eea0e1634a242f0fd6ad3180760f028de423667877b97e75978e73d4f5ae48cbf79cb32942a61dee9907af1c823828e41a4bca47244836ed4d399aca48aea9f6a15c2bff482caa9f65d4cd5c1adbeecffe425bd8cfba67fd03796d50c341d63cbf5a645d13f4dd09259f75bf3d26ed5dd8e053ff62f0319c8040b27b4d3d5163a8fb205320055ee53dc924d400974e1e8772ad17096637c15939c10803e3af05a53147ee98fd0d934c8d3e22e45892ce2aaa4cfef222dc5c84ba968379ec83dc39a0b5291d5845f16ccb01a456ba3da1ead5e3e425afbafbc6721a572f786211cc1703819319253a1027e346357238400f99683d5b46e40fdca71685a83ab5c4b892fd621963fc464bfd632af1ab515cfdde9c214d715cb6e0da138aff127b34064ede6ba7a28a70cd196751aa94a1245efa3bf3d981415bb0dee0bd544c1db1e22cde6c887e161d2f185858170bc7f7772fd168611b963645b47cb1bbc331a62d66270d840e62b4e529e247759684dd7c03aeaac647065b37ce20344b0aae3550b243d525549afcb172c74e0fb5b402f55bc4f670329e9f203eaea34f67724bbaf01cb779f31a235aa6a3144e908dcf6d37a2139ac1de091f742d44e4fbb52bcfd2b1bf8493d2d8e8ea8a4d648f92828bd2327f39130a4f444060e31be71ec8a6fd4fb336a2ba388cc4174e252377e50a2ba15bbcf4ecacf001aa3dea1040ef42492935861318356153eaa5e46dc44bf5264bc4b920fd4a8b6d74505537819f6439b92119f9a3e69b34cef463b5de1f2e0eb3d05f6ca733e509c61f2a5bba0c2142b6987eccb40285147312a1fdcd859363fd8f1a2832fa951f80c062820f8ce408db863e788b75e376c354c864e106790db9d35e25d47ae900a9e66577f6c4af7d04be2095c00b8ba56a1300b210d92f0e5d546887793ef64ebc63e8d419ae6a28e430389f1ad5c6ce4745b372134b410291990d3ce4430d8a00e080015e00753de957abea51029042c4a945ef185565c8da0c6991ce69d266fb41ed66afb34961a01535a2b5eb121bde0354f016e226b0974e3ed801e22729f1a8aaf7ceeac4c4b00776c1bd56704fe58001f20d803311dcf33e6d0bc2b1d71d82f47768358701a08f92f475c730f38a7afa571173c2ccc38003081be64e25c6a8227dc6ea44d44fdcae0d4ce1e6501bbeafb207bb55d3de5a9b41ab32c1e211b47300220894ce7b5323ec74a25454bcbbe892aecf2876a457848281fcf5eb388b2a4436abbdf5b25d9b996a09734040b23bbdb5b18724029f5cbbefde7992113fb492accc20ffec56d5165e4ee2092eaadb392c8693c5061dba2923db29d28aad01e1701b0e346b1c67295a9fe143cd77331f2df49251e04ac4693c598fe46fce4d864e782106e4bd2c38fd0f2bca9113107c2178c39212322a213c45b618fac1922013254dd1c7ea0421b355cc2b60c336207a024768f273f64b9dd23d7a3e5f8139b280c484385c08e9c90e805c529cb1d89437dcbbfba0a516253a1e102638524201003161ff4c560803e3b20cbd81f8e6b13fdfd073778cd69012373cbcf523756ee4adc59dc987073712b71dbc2bdc49dc50d0937177712f72fdc4bcc6509ee72c1cd0b7706377c25425134d62324f273010f2d98a27c023245a9b429e547a01504bf05ee6cc8cd1e3410903b1d01f8007000d0029a2e20485242ba2008ac7e500b2ecff881412716f4cf93f2f32d9a09fa2c380aef262242f6de52a614ea1c531f5e1f67321b9034fe3aeae3fee823d19bdc18f83342ba1fb0baeb41ee9e47817a26d00e8f30ab97cdc3bbb3534b433b332b231b13c35285b83b02b75205a920dcfd6f6f4b98cddb25f0b6767e7b0bf8b709b380799b6b6bf7ed2cde5e1fe1cee20d160212467d18708fd6984a71f76ce1e0364bd867a7e7ee04f200fdb0d9eaae26b615ecc1c142bcaebd4668a7a696a686a676a666a656a646a636a626a68655534b4b4b434b3b4b334b2b4b234b1b4b134bc3a6a9a1a5a1a1a19da199a195a191a18da189a161d1d4ced2ced0cecececccecacec8cec6cec4ceb0676a66696668666766666665666466636662665833b5b2b432b4b2b332b3b2b232b2b2b132b1326c991a591a191ad919991959191919d918991819964c6d2c6d0c6dec6ccc6cac6c8c6c6c6c4c6c0c3ba62696268626762666265626462636262626861553c3a661d1b06758336c19960c3b8615c362b17758df73f740b7461f9dc0120e82f915fe856dfdf4b28380780e48fcedf5edd90d6220c41b8c4b902804fc7bdb025628b125f1978d3bdc06fabdf5d9156ef1ecf2b25bbc6ce089b7ed1e893d07ee3e206d4c2c4b68e74662cf0d101003de608c376897b7d76767f817016f30767701eeee82b97fd42e3ae7ceb53598ddd3dbdbfe65f3226cf1b2da3b39497707e156a8a69fdf20a05e9f9ddf761041cedd03785b987b08b742cb9c106fd0ce0c4c0d0cfb95b707f8b525fc03c48bba7370eb138dfb20e09d9dbb5fb9bb55047757cd4540352505e5ee4f6e7d2b376042ee5ee5d6a7ef35c2bcbf42c0bbad07b8b785801b703bc2dd9bbcba13b46dc241b03330b12fc2ecf6d0ddb7fb4ffad4fd2bdddd835b61a83be12058360f102f9b2706660686fd4a3323cc15fc01f9b7f16fe2ee23dcfa9670c241b0bbbd3e771fee9ee756b711e12058b6efce6e3b08183806860513fbcaf3db231c713796e5b3eb6383c6ea96a97477bbad5d1ee176ef2ecf2e5b62309b3708c8c4ea46ba97d8e6ed99702fe0ee59b7ba61848360676663762508b160646260d82fc26c0942bb1223fef600f1b67b77617a6258ac9998ddddddd8581e9a98ded917e01e1861766b3788077638b825dc23911d0c0324316887977802ebee63ee0fe8ee7f6ed54efe0e09b3857d7686bb6e70f0ad6effd9ed3fc05dc7b515683768e2af706d6ddb574898b550b7f3b27d7d7678ee2e6572cf88eeeee7d6bcc80907c1b67e7a5bc0bf9db797b7fdecb2835bc24de26fefb06f309bf757b8b325b6fb2f5bc2c41e041c1cccee3fbb9d97fd1b2cdc6607b77f59bf6c5fa0dfdedeeed90d6e3789bfbdedd6ce6f10506fdbb97bd4dd1feaee4f785b0878681737083838f8e6eeafbb03707741b77ea67bd6708409bb4127b73e19773701d8a737983504dc87db3d3cbb403bbc23fe91ee0ee8d62f73c241b0b0c341bbc1bbbdbe30bc41c2b0bbbdbe2d61e160d8dd5e5f58e11f89af13857f7b7d5f7f2600fff8fe0abfcace469ca59df8c28289a581898511feedd995c0eb0304dc8605166e090b07c1c206b37f7f858361593fc01261ee5e75eb4bbdbbe765fbf6ecf43661767b78b7b71ea01d1e605f9fdd3e1c04f4cbfa49b9d5dff876af2f9070d76dedea9edcea91ee7d76546ef5adbb47b9d5eb3cc11fe0de76304bf8b7e7eeef567700e6ee536ef52a77ffcbf6edb69dbddb797d8580250837d726dcdbda27b2797f7b3b6b08e8971d1c1168678250bbbbee4e75f7ef9a1439f5cac4c4d83582c5cc699575c7d837f8deedc2b9d613a62ea87d30efad35ced7c1bcb7d038e79ddd0733f57f289f747b0cbfe52ddd4fa8fb94ba5a479f7abf147ae5d3aeebba5abb59fb3bba3f6fd750ef77fbdc2ae2879f585a15f17bd50fdd599ab1f86044c4589bf7f33daf823a76b78ad8f5df0e66ea5b6f2d7447779ebefe5e07b78679bb588255311fbc3d965e339660550c5fb71a42f47a155411e7fdbe300cc3be3df63867313a5c401dcbdda653acacf5749aa7d9e1eb155d744bf99648af87792f895e0ff55ef0b6c8db2d31ef27d6a2bb13f5fe9d3374e7ea1c74bb588b2ba4fba1ae148b71819bde51acc5c677d35b4f5be8fd9b8ab548dd8ddb4dba9f588b897aff75b185ded1cdb8dda4d744bda3d745c6ed36dd5ed58095d8426f0c73b9f1dda21b8ad5f86ed02dc55a645ce0169d66ace976a7d3eb0ae97e6ee8f4bae20906e9febd22bab39b142b8a05ef77b3c06815f44b317ce55b7298f79243775be7f2feea159dbbf3c63007d5682a54b0c85b6f16bfddade20986e7966e158b8ddbed6511dd50e95505e3767baf2a5844af8ddbedf7bbe12b0b7843af8ddb4defe79505fcfbd5db370bf8ffa6166c402db4b0ae35d6707bacc64677b19111aad1b25bc6626474171b9f082e88f936a37b7d22b82016f4ca58efff0d53cfca617577dbd4028d295c4892a2f46de4f60910a90d54d41425ec18c949b550241d9f0b41ea520892a42400517ed55a17829428d69aae92570a88bd10a4cbf88dbd10a435b90fa587dfca4621b1573272c6daa64a18897163ec9a71d6c4daa6edba6eac9dc659ee79e9d2254771de34629d5929d6998762dfee64ecbb8f90d8b71631fecc3cb1c73e755f7bbbd2572cf78d35e1e3df52f80d5fb58857fa3a416bbd1ff6b5adfbcf2a0577fbf6daefd68de12a85df7a4bab14b48831fc71defaedeeab87df5fad97dcffcefb35c267738b513c5d14e74dad1c3319e7f8059f377c0a69f2a98cb5ae269f407c32a35b708e4eb5d3fd39eb0d9d6eafc2d1a89cbba357c38faf26fcf3c16f653477d378fcb5705ab1bcf2997e5e3daf393f9f19863ef99e9b4e9155ebc650be777d2dbaddfd4e37747ffe09cffdea348d6278bf9ab1c76f9dc47840ec9a7432e33c9af15aec9a7924e36993676d3fd63bfa6e2d1c7d6ef8e94261ead6bed11796eee8fbb07ff9d7d4d08ddd5da5f06ef8dd5713b662f8edf7abd51bde8b56bedf7a5fbd576f74bfd53718ceb00bc3db900462ecb15b8df01bbe6af5e6fb7d05dd5b310cf7d72be875c2560c6ff8ba25f5b54178bb7f21c6dadfff5ec1fbe117de36c5ef5fbfbdf2966f688fe9d42b9f69f3f6c28ce10d6f32b1c79a7aace8771add3a5addd4adab6fd2eadebab1abb5d67baa3596f63775bb55f8396343aad6dd522cc18fb579477794c28e42375443a3fb3f7af557bfe1fdfede7aed57fa4a6fede545fd1773eabe26f89cfb6aea75e55eb9d7095bf156def246b1bbd709d0fdd7e7f381e72d3e2d21629c37f4eaa985af821fbf3a5fbdf48be98e3e61b8baa1fb59bd4ed8d25b0fa0eed47d558d6ee97e2cdfd5e8d570ebaa9c7b9d006fbf6adfafa21b7a15bd4ed88aa1d72d2feae738791e63e99eee69d3033a43577a3ff7745f69eaf6e91535baaf0cddd8b76053ecd70d75ab14a65743bf1afe7ef5f5c16ff8b9dd2bbf4ed872782b6f3ddfbb7d6b1e73873376f7cbf7dbad0a36c559cedd7a67c6eed67aebec62193e931b77e0fdacd3287edfcdf7dc11ac3161ded33d7d4e9bb4efdefe74eb2bdf956fba63c7d24eb7e7adb71aa1299e6e39bda7866ff8d05c859b3e77745f097eecdbd08d7f0b36b95539783faf861f4faf5afdeebf1a7eecd7263e776f3f86af2e5f7e20f8d2779bbcfb89237e6ef8e3f74e629e6ad7ae5dbbbe5e4dd88abdf296de5e31d48a4e9255f0e3bcb5de585bb115fc6e28fcbe7ee5abcabd1bbadf586bed8477e7abe17b594884377c8dc0056f77c21b01ded0adab826ff8f1e67bfd726adae18c5face0c77abffb7fc2d5f063fd52a3a2b29bf5736bddfd6ea9deaebe7ae5adac75b1dc8dddbfb4885cf186075c3174bf7beb5efb58b10ef8d7747f3502570cdd5ef96c2bce7baacdf1bb7f6fdd41c1a6d8d08d9fbfa77bebc67a6b7f6bdd7f3da6babe66e8c6fa7af5eebf7ab55eb1670588a2e363d55e5d3daf13b672ece55f333c1add1fdd64f219f44c75c2c73a1a8d6e6884dfd1fdcfe7fee77e287447df502b63f77f3f5f138ef0d3e7f4fa51e8f3b9e1e786c95891a137b4510cdd511cd01ddd7ac39a733063783f9daa0f9e9c9c765680af5c534793f32b35f2809ca424f326cfa0dc082ec79531f4aaa5c28b4fb4f0ce7cf07eeea9b53ae19fcfa66a04786f784baf3bc70c34b52a0bdb0601435ddf89451c4224dfcab48a3ab532853e0150a3f29936baf3e68b6ebee78627bce61ccd5853d01bba2344a313f486b7ae46785eddbca5f3bbd55b7d32c5b4c494c4ac74c7a48ca31ef3316ff95bea329dc6eee62dff079a712263afaa724d3893b199d83755338e95d8294cfdaf34fa6379747f43127923c6f97a35612bce3b5fb7f2d63b4e3d0b9ebe26a666ec9a98983182d835e3e489a167e21dbba61cc978aaa91fe58aa79a6af55711f286eebc61e8fe6a058fa1fb85b11ee4fd6e18ab1a81eb7d5edfeb960c4d398d988de2e953df3d7d6245f74bd7c7ea5857ef76f7d5bbb7aedeeb84add819e8e77ec257f0deef15bcb76237f61dbd6addf88a9ab7f4dbfb5e33adda8fdfed0f10e3f8dd8624b48855b9bcf9e0ebd5f50abe4ed88adfbd15bfd72d3453cf79aabd3c7173f84c902e90514aa0404304cde1e3a6375dd6c90f253aaafcc92ce396b76faea9e7b3e8d49fd38fdd9dc2b1bb53cf53a8af5dfd5f7d7b80a9d3a9b1bae69bccad75a1f9cc35dd70c6bfa951d3a69cb1ae1ee4d8a7ef6b996fd14a3ebb72af0f34dfa295ed5b6f976fd1cad5830ce778aa7576b1b6af5de9fdb1be46b33ec799fa3e83139f4f187e3e9ff0ce01f2d9e0436e186b101abf6efcbed7006ea2a4a9bb4e5b798b33f62de5e495b7dcffddf60ccd35999a6bde64bd6a6b2a63e89bf83d6fb9794bb381f3184b4b759da8790baaa96650ac85be570d85e264cd5b19deef8e7a565dcd45f7c7799171bb497774bf9bc19cd7e100c2d73e2d9bb9999bb9996fd80b9af6ee36079f7fcf34c34e59c86bbee18c33966b5e7689f9162b33e2bf89327b9a2b79b8d6cae76e17cb13b1b488b13b838ce657f0f6c546a81b5623d48d05869ce806dd512cc634b7e722639bdb7337ba6ed0adaf57f075eeb93dc6607583beef0bdd5ac437df9f1843b19e5878d07de51bba9f577ebde06ed0eb73af785edd6d5006443777af78f78bf70a63819be6ca810aad052ab1ae94d8c542c6daa6265fc3a126114d6bb2d18cf3d6ff6a32637747edadd78f6979ab75ae96a8c27235d748895d376d49ec6eac55893f63d75c23196bbd5d2ebb745aacae9986532d6faf69937ffd6ef235df5253ff2b562f348947fc157b214933a638e27747b79c00c49e86c5a51657c1b036efe7138eddd8755d17eaee67ec5621783c75aff0eb6a5ff3355f73783f9f4f6b622c1d20607b80ed57dbadb603d85ed588e31152520a6525755b9fcfab766b0c0b2aa9b91e5d73593718d61796171602ac2e2c2e2cb3b34dd5a6c5d0acabf64081ab76635db555fbaab512b86aa171346c43f7d7f6dadaad18aa33355ad815aef3ac0395844602bb42a15f57abd52bc0555b5585e0ba77d7d53597d515e6ba62d3622a3f33bd7a9de723146aadaada5057eddedac262d3d2b0d8adadbdabaa1e6aadda393f52b1b4d2c42b96369a481947d1c4ef3ec33260c00097816d86a5a5a5a56560bbb13be6aaf53162c48489e1fdbc6a3d4c9cfd0b86ebc4efd6be0c62b84ea63b2873be1b8ef44cfcc6278eebbba538bac4c4c436d7eeba324addc4ae8d676e638d5c5c5c5c5c5c5c5c38babababababababa1e11204080000102040820bdbcbcbcbcbcbcbc24bfbebebebebebebea4808181818181818151868585858585856dc634b7b0fdee6825168bc56e2c16bb19d3dcb0fbdd51341e3de36b9f18bf5bda48363636b6cb36e3969b0b5d29d1adecbae826ba915d19a56e635b2b4de424d4c78e367a3976854aa6fd13ceee554afc6e2cd6f34d18d6130cebf985f5f4c27a4a794a6aae7777613db9b09e8fd1481aad6bbf5c5b2b4d8c5f298e69a2a375ed976b6ba78df10bdd8b5e1bc1eeda1a4bfb1c14bf7086b9b8b8b8be36d7666473fbba3e71b717d7eec2eaeaeaba2e7aedaecd98e6e6756d3c73e3ba3e1174717171713d33e3abb4715b699f8fafab75f7d475779ee3928c5f48cd055ff9dcfd8919c672bdd2633e83bef135f7f98805dd56cfed42f386bb61d5992a9e6030b0b9b6d676b70ba9d1b8ae2a9ec057c3670cdd06f69b1843b75667ba9c1a6d6bbf06f67b606bdd48f1ab7dcf4ca5d1d7f0d7795f29f1fbbe8ff1fbe278b72b45a3e54797327e5ff74cfc6eadfbc6ad4340ab33f7d6ba8362379d86ddda6f15d6ae5e9da0ae75a8005cb569efb6dac2722135d7bb0f6069c84d75d5ea3af12b75d5a6413d365db5bb09ebaab5bedb0096f48de67ab7567e7ca538f6559b46e0aac50eb86ab7045cb53bc0555b6575d542e3b434ecd4558bdd8aba6ab7f6d65669ab9aae5aabb54efc6e9de9424eaf99d26b66f49af9579d09ebccb4ccec85de2dc5a1d1f2d248d15c1ebf5bfa46a3bd1be56325e419c93752ea506656c66f9a41d233f12bad13bf3b31ce3ac38467b1fb57a6ab627d3ec6ef8e72f70bc354396a543e83afef1f2b78d83c32d4230f22376d54de7adf4d77c50a8d3dd652239c88dd4db546a159a16b82da1a6b03e3bca74f883b3b504467e5e337777fecee69f52d6f776bfd56dff2d675a099d641559c3b47da4ac436a65d350ecde53eba90ae9417f29574a5683f7609fd529caf8b8cda4dbae1cdc8e626bd3ec97a439f57bf6af3d595bc6aebd48975de5a2b8898e86eb81bd677ffce43c3a9b93cd64fdeabe133ce1b4da4c6441c8d8f38201f2521f3d2483ea59f89b59ff88ab1e76d0186f513637fa54cbd98d12ca3854a13cd32457c6896a9d198a9498633cffbd7d124434607d448e657794a8e5232358eb7c26905d28a95e773a60b9e580bd53c83a97966cd1f4dcb1c9a96899434cb646a9689a45986138f66194ccd326e9668a2e1838906cd7f182d559e68a251a289065213cda3261a1b8734d1b4d03c53e9cf19cd334f70689e61a2792651f30ca4a699469a6638df982924cd7c4d3356c8c0300c8d469a41f25169546a66d10ca4a6191ed2a974daa9856a5a7276d1b4dca36939a9694947d3728d2699489a96487610182020c09515802aaa29a928a827276b1353953a9546fff9664a0744bbfb137e5d9d3fd20d54930b8ed82976cd2d9db157e1e0e7feceaa76e0950c7400d8d5ec32c3c9a5c3a1af879ea2d14c97ee86abc9a58eebba7437a09a5c20636aec9a5cd6c02da6cfc43fd628d5af351213a39f78fdca2e42e29c3f762b21b19098582c168bc53e9fef137e3e9fcfc432588bb56ab17feab05dacd8badf5ff93097cc181abb737ea67ed57e4cdd4cdff4ff8f76427365e99e4ab1a0ae7b4247afd0ab477a5ee16ba4ad98e9aac53a14eabeeff57da50cf233d3ab36ebcc19575ae695154bb55453a56fd2cf8c35da1fca5c7953a3025465697f507cf563fd0df52f56ed4b19e40e1a747fd0ef13f92c33bd140a9d8d393f7439e6feccfda1cb312767eecfdc9c87e968a0a1d2e9b05ee1d2406cfd3a7039d8c9f2264b2676d056e6ae53f5264da3a561b15b5b7ba7315ab569697234d3f6dedac262bd324d9ba6b7bc92134e33f5acb42aea932ed1aaf7f45fac9cdfcdddd177331d0cab766f786e8e55fbeef735f1d4c5ca5bb18b953554cfcdb13e7776fbfdacdc70aff5ab702ed485f7fb7c015fabaa34d7b65aaf7430ac9fb958d1cca246334ba46616349a59c864e1c1288f26e5213298939a945d3429233529836ca1212492e69646cd466f32bbac91a4e411a9a92551530b0e4dca499a94899a943834b30cd2cc1209762a5da23543a1566b55d5de5b5b58ec546f27dfaabec8f09bdef0a67372aebca7707e77350c3359fdb7f56af5affc53dbb5bada2db5b55bb16bdd53586ee6b26e29afd8baa3b0ac1b0acbba9fac7f6dcb67d6fdd06d6dca4cb99aa9f9dd69d96572d3defdee26a62a55babf2d9fbdd0fdfed6a63918749de2778abf29436f1042a1fecfe76718cefa7db5ebbaeeabf50be70c5379f0dbc57046059862d50690c66e5d5e80a82a9793090b9a36ad6299ae5a0831d3d66ea6cd20bf9669bb4c58cfbdf37edfbdf5f6a5a511b26a7d930ab5eeb06af7de309c27dd93493a28ee71a6744d34c958719cd23999e2b8d9c34524961e6eaee852070d186d24794c71f3edd7a9c77387acbee70e59b55bf1fbd4d4f7d4e7107172722a269a4b349728f3f9384769cecd27ceb979a1b157dfedfb8a4d4670c4bf9b8ce0a832d766ae4d2566206b93d51abd4a55a954282828282a146ab5565551add426abd56acd55abd50a37ddbe56ec96571a146ab55655356ddf4a06b1d4bab56971d46a255c70e952670cb59bb67643a1566b5515d3f6dd71140ab55aabaa36146ab5565545b7f5aaad8baddbd78ad574d5325db7ef9c202bd5377543a1d02715eb2a1abd6e5aa77b2ed1f6e9a60eb3b2aa1807502248c28fa136951add4c3b27c291a8714e734e730e11dc1ca239449c736de25807bd944c992bede4ec66ff3d57c7aaed4b8bf37661f809c35acbe2b7d6eea1ed597bfc39ef9cdffffacad17ac35b7fec04ef28774ad924b5dfeb54badd7ce66b4f5bfa6e6bf4fa5edd2a5cce555151580176941496eb6a052a94fbd77353b11868a7e97ebabf9ba6fb39cd945b9e6d3a65c2a242fb58abb9129ab74c5f2a957ad5f651f316154fed5bc95b5e4adef294a576a675e2a9bbd43d6f9e5539eb7543455f29539399999999d993ebf456e1a6bbbaa7eea037382f6fe93e28140a85eea974fae4e47a9c9f58d4bcd5e636e24cf4617abb3957ab6ff9ea665aa9572de2d66fed94eaf9ec75b716bbb9aab0ac00e2e974471dcd752ebda7d3e9865eb5ef546e1a4faff0a6562154a9cf44cd4d546da5ba4ed4f7890a4349a308e2e99b37f58fce7c21ffb8668bcc77792b3f8542add64c97336f69f73aadb39bdf0ce78c1df159c89a389389b7deebe4758ed2aa753e6746f81a048dd646cdeed6a67d263c833a7db7b93a56adbfa9d35c1a4386e639a409dd5397eec75685f917146b2e6f61c0e6c186c57a6b038405d8595b574f9cf21fb8c4aa75cec7c4bcff110ab55aabaaf64e7bfcc7ebffbf6f8d06a3ed439e276f3d8cf590992bcfd5b1fef6ea3fce71b1fe76a3b6349a9b77ceaabe7932a92ea966183ac7c4aaadd25b5bf6525f777b9f1bfa7cbefbf97cc2cf5d85d198f6fb4cefae3e5f18de5028944aa5eefcdcb054439f551752d35c152b1442dc1c060e20eaf24af4056e4fa8f8c4c6a7e10e72134d9ab362d5afc757386f63e000423c8781038877e75d9797cf5ef8eadd2f65e72dff72399493d1648c15fb9fccc64dca1dbde6cabc058d46dd370128346f6934069a4b6fa8357a855ee7b25809f89ac755ae541a856269a9d08d488de1ab7ba5f4a8392a529781837c96bdca203fb1a6d2e8eff8ffaa75f7f4aaad8ba79b417eace7ae925eb5d0e8556b7d9fdbb790554b75a97967281d0f6b555555d51aeb9ba999f2a5e44a28536fca6ee84ca04a71d65aebacddef7e5f576b770b3e6397badf7fc374769eee2ca777deeed21d4ba1d02dad8ba53b4addd1edbbeb62ada71baaa7196add7531552a0aaa6e3741a1566b55559d541414146ab556553d35355db54e3b9e626db54e5627acedab338358ef37bae32814aaeba6d417ae2ed650a8d55a55b57db7af158b0f0ab55aabaaeaa23aaa2355d5b1bed1fa192b03bd37146ab55655cdc1996a3d07676fdfba41556939ef0d855aad55557370b6eff6f5ccd82be158b55e59197be61c9cbd2d49a55229744fa91b6b6f7777cf5b0a6db24aa150a8b4baa14d56aaa9262b540a855aa5739752a9542ab55aa56f73974d5629142add50ebdc2514baa5fb0a9e42a552e975ee72ee52ca049dbb9cbbb44ae72eadd2b9cbb94b004038e7024951ed984aa5529fcfa73ab8bff414b59faaa00c599df6d3de4f58da3a6d5dec44b57db76fa0ed1b43058282dabe50535300b66fa0a701fb29ca4a1525658da2b20eb80a90ba6aa150cd15053bedba58bb7df9b66f3cf5ee3df7666fdf5d77859568659539a3f2d40fa02829aaa927f5497d529fd427f5497d4a4949117e3c3535759d1b54352535b59ff65414a0a92940515157ed94d54a550588a9ca5465aa56315155d9ccb1996383651a61da94b7d5856a4302716ec250a5b91ebc0e33e9ab556bb81c010a7d6af7c57261ad5fba2858eeabddecee29c4a350e49f428bf9a97379ac00b6151515151515151515151515d594da14c1dd525252525254cf295315025454b57a7d6638f85aadeaa86794149cbf4d5da3dea1fe15b57a2c2de2db47a3a2aa6f5357cf5bd1438362a8a8ea5b549447abe268002c2b150c158ee7a5f2b7528c3d34bafdbf3af7264e92df03ce6bbf302a7c6fea91c398842553aae4a1a95061f3040a15728554f8f1755a75de695e951c26d01717c576cd1372b0f2c94699cfc803545f70d3e97d7bcabc96b5c36b3a057a80c038df46f251f662bae32efc84fc092a163cb106973e4184cd1369fae3457c28f1364d2b7c44a297df1042849671c8c01b91c32457274764422bacbc57d248ef06060597f00bd393350579306186641133deb4863943da6fc91efda28c1c377cf3f29c699cafc243c7010b60fd65971519b291845f5d01fb0c8ad18793c31f09d4d24bcb38e4352635f79078e9250511f9e90dccf743127f961382af7915c105ec25c9d4298ddc817145c6b3c14886f0e4d17b84108a478399c5a5aa1c90634a542f8fb81059070431b747148ba7923446cf5968e0d521001cc0193cfe60d101cd2729bb1c2d7c7fe485e153cc3b6f1721edafa234ea28a0cd1fd47420fb201be44d41baf881498e3fa34e815ebc22fb39c33eba428c1a19830c494d5503873746e17c23e599d3907c91d9040b3cd9dd53442b99d2e7704e58e62f035abf88a38e8e3967f875c18e4c2946cbefe6ce7c0cf9e6f96c053db6f3cddb5879e409d6124ea683a24cc9c6e7c9b4a1c8dbea198fed04c8817808382326b6aca5f3c807b964a1e5122d339f16e35fca03e26e0287e4ccccc64f8434e6050c8b911b3058fb0b64d0e4096d967ce1a0105f53e2eeb17e087e853bd5ef53e3861f715145cfa1e2f737da28f93e574d6f68c7e3d7c296380d4171f9a917e8613878d38520687101220ce8c6428c0e48618206b3acf2b8ac4adea10395cfe3e7d96bc0559630a2919ba922d69296e4e41f8c730f6f425f1161f9033b15b95087821cd0a242ce9855e77f5b22ffc981cab52225fdae8cd6ef69a63b9f265ee48e18d743e83e2642256359a3c7bf543afb4b4baa7820017f4e47c1106771f5a4a3264cb9193c3ccea7aa2a27aa50f3aa696ac8552b08790783a9dc64008fbe61b5925f43226e6294abad66b8de879bff43c543994e46035f546547cbd85ddccda312de20d6f293600a9ed807c24398cca22bcd30701d43b2782119867c45a5bb0e2a8aee67d3842e52c9c0f372e479498e5e5f3705c1c9a88891bb4ca0a4e3ca38f92d4d24dfc40ca62c20905506c04484338a02e0f582539111a77471419c6aefa728e8709c63ef1a4233193a483c8098d357eaf1f3500049b51518d12fc2d1cc744f7d3e0204bd0ca7f63ae7163cdd8948cbe1aa203ea32eae2729d099f74042f26a2ebdf89d4e37393252a01b88cc913773a184fb4406205b2a04f662c53ab2138b17ee10c44acb1dfe809900307b257447341e3b7c5f1868cc0770d1f12c2049f23087dc673c71a79bc2b0de5280087d21728573d83a6a2678855c10128abfe801e2317420a39b2e19fa47b4ba9fa244c8d91431b39b36155c4a1366d620468aa760dbbe718e04dfceb348de8329c40da3a22e61249e2391aa744f3468fb37685c59ce0d26b76ae0be1436362f072ed0a1a4c0f029d0343944182f5f0140514e73f7c5e30865fa334dfa52fae8f807b4035f3978f6969ed03d0200501c1bc6c8ad642538953831ffc7a7ef0bc088ffee40a207606a782474ee348031032f95e84f6bc166d159671cbc820ebb1e308494635de8d74244d2235931f54ab3369a2a48015711a6c02bd2c2e56a28d8e90a652cb8b5c9cabf4943e2cb94c9f9a1b13d7ffe81f434529c9fed62a19f228cbd9e4b15f2d71a44bd062cef6d0ae490b7f429be81699856d3c8c373800198d9e674f8147ed8e8a89f3e5fe8d095b7b843e145fc6c9d439cccaf81a5fae4a3cb4733f7e6cf4c7d2d189d97151270aa3c2ccfe1c948ce0346c9b7d1c1e125d43dba8a6a002da80bffc59f027985ded31b58bce60f6e30b3152310778b719b110c963d93145bbf01cf50e63ab37a3dafd81d7475f21c903cb3900d577f804e221de943cdd3111445676044e3a74db2f48b18151e09f4ca53d71ef8e2b44236a463d321257271159290fef0af8203c89473ce008d9f05f4e68e4614f91c0fb47e0cdc762b4126fdd52f814b427ba6ebdb2e34485d2ef222d2391c1d5f0ef5ce7511e72cf7e5d17b565d09f1797e453ec8a5434f5545a0a35c78791304377c0298406e602f857e1c30e65c02b67c516be854aa0eb97492234741e5c74b49b4e416b0e8651883b02fa40c00ad018a068f4267f1b3dcbaf2eb634e86b08926e3f08acc753d0864225d8d5cc62377320412d70f24a540bea0884547b549de85da7a18214bdf247175261070fc90360b19cb68c1fb3c84df3165e6409e7f7c879a9e5f5233e80dc9c1f32866f0f03d520edeae0ac35be93d3d242bfb336c617e9617225fc679201359002563162294d1c824b92fb054d1759234de0f55299d07eec7db5449c2abe1a397350b3db805b2391e278ec8e3604a90c5a050ce457143de4a82e3983290bc201894dcca5b2073cec9f40a6f88cc75f8e494703b5c0d1434de07469aec1cdefc0f94839643648bf7383c9057ccc9f28e0858652f4a8d198e22f00c6352f42f82ad76bc1a94d504e8e3de19c42213a1cb7407145639252195bea84408a7a138e97314515f0e91b6670385f2e1ec29e471709dfbe959d05d62c4f8b53c48fca9129effb209e3dfa873cf56a7c00b0bf039e413269f2729c009d009f0060fbee4ae0026dc404b263f86cb87378fd1ea254c0af4eab86e7f1086affca3694c8e3335c2f5720479381196ce62e0d2dd581c720e2a6e386c474da72520f47d0a44e933c529f79353c0ad22717e16cc4457b5d1b9823a0899e9cb8123be81e330166d79a71a7c79734d8cd7c0a5e33b073878578fe6eb753a792c0a8fae5ec02053b1e2dc49a8da4712b1d461e0beb89525816e5685375fc0e63ae780ec5d5e66ee7a80e497f8f4b45b03ee6b40cad23b0a18722f8a08b21228efc3f1c3a37d507af2ea2406590d7be9b7cad87d9b40d10f010844af80a2c01528d2ca95fe50782f932ab8fbb0cf2139c1702b64ae7d801962deaf20716fd5e2c37b4da199f9449bbc800374b8043a91f224d7c66391e3410faaf4c6732c7ae12650107039915af4f459c321a8c9e60478cabc33914b0b826af143b6d0f0310e467c9f679bac006f8867b298a4e3d21c784a2dc4e4211678640f51e12da2428e7e8c21c2753290e8932d2468247e2c3c0d296dbac39ceb033823408789b8f42804424d4289d94b6053e8f9f250f02340e61c40467c2f7304f8669846bfa7edc4c71f64388b493df29829379e6cabef2371499f930d4a5e13a0c3abc8a224bb8020b912c439bf7c62e7a3cc61f012469f9f6387a52b851b686b973add05c25c762cd2ac649244d61a24e3666571781e3d43bcd092ee3319b759448cf95f147b389c0c369cc49e9d0c40d3d1bd0cf1c851f6e8713024023c20481c1c8c304c069342c45f0c9af1532ed3fe8585c26ce5d220dfd3474bebe9212653712672dfcce668403a87b213127a59805ca2fef1c1f0d3bc0572a5bcb617a3060e2c7828895b901266c905659cc28b482fe94382b7831af0799250b8810a0c5c2a08c85fbe00f22f20617a9b10809ee4d018e752c0477ef404f38870f0e4456a1ffc89833d2ee36af9840e08f230d0b27c2191a32e3b5ccb6f14fe05779ab64ac4e1a7e070f01b1ea9b891b604f49c11c1ec21cccb77b8d2279771f8f3371e537ac0a340fe54c2d17bb173f3d9236af20d337e3c920432e7a0e7bae3e360fe3207f0c360553aa06601c7bee1f01f850abe041b3e8d19a7c31545f9fc97117b3253e75f763497e87a12d1c87b7104bc13a23c2fe908c15f5d6687d087c7cb90dc9a839945dec00ac43f0dca7bc3291befc642d9535860402392f3e02e0f3e8de8abf19dde330f6b9af13121ae64ce04629e056b2437357af26e9764b211c7278f24a2cce14238f13a729ebe099d88cf42a1910bc413bda0ae0f1acf9538190fc58617cecd4eae6205027c4d62e7d11a3cea3021021c48ace8c51c22f37026fb72940ac3b1748d653f35ca3c1911599f542992af301cfc2339acbc10031d196a677a5a765143ce41f3b6029432074777fc596da209b461783a2954681d657672d6862119be6ae3491e69bd6dc8c2dcce98eb4b650d5583896a90df19667a4e0745d7a340c5176271e82d21257954a10b79ebf172134f18e535d5159ec6e5c87788c03a9e417fca2a47bc904be1c30124e695a0bc3cdb01340ec06beda924bef01f7a2e7d0b89c2ab31d0248f614df92a402659878b3359ae8dd9cb1543650c6010decb4acc972304916b45e12e3b9665b915908071b73f91cf84738eb76955643aad45670be3204b1a93e856d5aaaec35e79ea8fca5c6882a0fbb123e6569a546f75b47330421cfe7641cb870094e1580a72b8202e32ff2744f40a1a910fd703d153eb35e6a9a44c613c657db9c31233b84f88068700bfbda267fc6c5bf4682941b1676a2229fba8c2c5e36870f1555ed4782f4bbe5c48da76052f12e5058e8efea852dd77b578e119b824690553aef8171524f2091b203c0f1286c6e0175c4607b53fdb5ce475520839dc9c2d3909d5d833ea8f40d693e2c8eb88d12b8339e4209bc5d73c600dd2436270f3284eef26e1b2bf733ba61f995df8327c5c3e918a4647e080c76f3901c811dc09e46013dcbc7392a01b5e8a3a91384b6ec68107dfc161850b0672e19073848e6692d6cba8f2d419c6c0bca29be297a802f3906b0ddcb1011c5c53d21bfc8088a597eac8fe10c7ab47b239c85df23239e61f5eae142df225208164450882f8e31d301f3c62e98bf0c4fddd1c8db7f681a2e3dc7a7ca49b31ffa64e0c6fa2a9c10b3378f9b839032ea986f527ccf1e29b14e47e13acaae59aac71b8495c5e094ef60775487b2d924c7ac0e3f5957cb97f12626e546b7d180ec65e3083e6f7753db9891cb15fc9374743159afb3fedeb376eef27d08a399e378a173a34e737a188dec48bd0074131e2a1ccd190f584e8f0265da0b4d3953aff87d624b74171fd8ef07d2297177c8f83355b9123f979d82a3d09069c2fa30683a630c6f9739e39afb032f42a6f1033162a0db4daa52cdd2648e7bbbc21ca31382dfdcab4c17f0194e81b74a0e1414840fe80ac06df21e7d01d28da69144d4a3c54a32fcf7543d1e31a51ba18ab32bf2123aa1b0552e160325e3d87f08833c5859a410e05998082ad469260c2c74566be91716239819b18ad200e4b46cb53f763b41ee92c455d5e1a6c830e85aac3dd4a02be4f762f27c611794a7496b8176a9d9bed21fa8daa21cf88064e668294e282b93b09b7929dc91bb4339197c57145e2cbf85d7a217fc434834313cee812eb3ad182634609c85d7a50bc1240d14c4551077782cbc0ac01077783bb65eeaee7d6311583767d76788464606260655f7cd93ebbbc2f353133b3b1ace160215ed3a54b970858cafe4d1d8a91685211a5616547a89d284842e4afeb37a08ac2800089cc2470c30ca900304847316a01da06a91a880906445d514d470c79722b05018cbcbc091064e6c37754c109e0280e22ff570cc7e09650ac8e706fc36e1513b38a7159c5b4151bc9ebb61ee0e6da5b7b67f3f608fff636e1dedeee6db6c341bb41bb1278db6e6f6f0fefb074b066b063acd82b75759bc4df1ede5e1f21d74ed0b6b712b485000303fbe0eeeaecbfb875df6bd6300b616c61087caf49f7da562fdbb7b7b46e5b82c4dee0de5bbd6c5f5d3601568204eece0576c80ab6c67d13ee95d812eeed12dbec1f6085bafd07b8b70d94ab36e92bfd25d1ad91e8c6c15dfb9f8e14ad4a12df97fa347047d13522e65251239dc03212ddb8e8943440958bc46807d7831e30ddc254e803681a2cd56c55d2574d229432310a8462144d135934e593f85a15ade62452b7d72f89d12aa6fc647bc35e1e8d5253008e2d5c1a894d584d58facb290c5ae574a9c58b009af66cd34dba0d1a99a8298885c1527832514f612bd76b2aa6dfa5ba5ed2072f826707d80a96c25a6a14352a5a159d7a76d0965ac0565a4a8bf74ca296d6f5db23b404b86bd426d8c97dfda51bb873542a383f373caf9e155e29a687a7fa75a95aebac9f1aaaa3d200ae7e66783e35cd499d9ef0f3f5d32d73c3dc8702d0578a5102af9344a6494527d8bd823a68e1f269711db1fd52a7203b752edfa0395348e2420e1c6f6e0b12a001fe6d260a3b606d823e3f7890ab70a90d261c0237b08f8e0c1c081f3a6ecc80c91265491898011f85db1b84838e1471e6918359e60a220b11203c7090ab00f780c000aaa92e5c10a34061b162848000807f0498f8ec11f44bbcd409e911880f54534e74cc5886019305cb941b36628c10d161835c85086eda58b2f1f20801cf1d3766ca80f9a22472c60b178a38e9c801f3a50b95c5c46c5e8437a72a27204d3e68ca70d96285498e1ad9bc1122407cd810e18d6d8dcba9eaa60d9a2141722c66f3444888f0e08dcd0169ba6993c692cb162b5398e8b0b118424284046c6b6865625c4f4eae5f02a4b9270d1acb325cb64c61a223878d1a8b7e468400b1200cac12a5b8094d4c7a02e0a03183c306ec911a330e4f3c895ed29dd9d24b294f823a719b642679c98f653117fb60d32f8d40ef290239c05f3dad3480af72a97e2a0af5f4a4ad6e1395c95ab5a2029806903a459f50f89961f87df53bbc28d55293f88c3ea32e13f4ec19d502a818142b5ca15bb0149ae6529bdea5c2235c13baaa9ddc3a2e8024c24cf91975bdaa02d2a0244a3550f35c2f26c55c76f566701f6e13939820ce81938bec4add382e4889815a74bd51fc77cd890003c5ec5ae9afc0c752f022909308c304e616a59adc5e683845188900a21ba851d428140fa402a184d247896ddb285c9d0eeb33aaab2f9f1b838622d46582057c1399a2a023d1ae398bd0488e4c79fa32707aaab913b21fa4b4807ab7a40fa40660106ed753ad851623702d9adc98b26217ab787132c8244e0bf582b8a88e35bd86009aed09e04c51fa5483a550268d16014e0b903e7894287d46a85e8042b87a7b208d42a05ec86bd39248e57a9d49e135a82a2c9dbe5d4528499442210cb89b91f86aebfb301d2c7dd9e02e056ed3c2e801280458fa04507510cd722b44a9a20218b09aea82229860c180a2140af624ab92a145987b52dda7d5bba6cfa254f7c066f08c3ea56ed83bc14d63f0ef95c67aa7b051289e567b63ab824aa7a2688a0d2a4ccba05b6e969b053749ec62721dbc08de01d12c3740939816d022112cecb59efe72f59be22a62c717c0bf2850de544a89d2245206e28a13847c7a59bc3a11203c70d090e1c25c9c04086b69645b06b40a6cd7b2cca5cd43821628d0ba5a017842b259b34409dddb82350152d4294ca6cb9627924b229118811c9261eb4018581020182e5caad4e8cec366223023009d74dcd8d353c0267d4ae6c08116b5538789e49ada1955d4540a7d06b8ca820544364fae8284080fded6cac4b89e9c98aa2e111b31603c659a798902a509e2060d68675551eee51b461a1424388b3ee1298c5ba81cf1b163468a224488dc90aba080ed00f529e9493992cbb913e541aea0dce7cdfc3b994e9e139543c5cc97d94dee92a7e82899cfd57ed613800a7803540164aa2cf5514e50ef53767aabcb94a7af3447a1d0fc7cbed97dfd0fbbbbd4adac5b89ee7f7b838115e2ac0708d901f6e98d38dccbc3ee040ab6ddb62f9b9785f38138bfc23feb01e8cefb2b04d4db5fbb2ec419d9f61afb50b7b7b37b7d7b4b58e8b7d7b67f7b234eece5d90d8e18dc128ef0031cd4f3f7f79cf3bfd65b42f86debb5e0ee5bb76a39201c04fb1bcc6eb7768161835bc24495dcfbecf6b68376812508f7fef61ead5956dc0fb37c9b70bbb7b383807ad9bb6db7759c35cb6b309bd7b7577817b6f5d37be0d60279dcb37f809bb01070cf303b18b8b325b27ddb42c0c3c1ed5f7607daf96d13d9bf6db7fff64864ef427c4821e5f2926e6dadd82ba45ed2147baf6daf9d62efbdb7bb6b7981c16c892d20b66cb76dc2ed1e893dc0bf2774ebf58d93d8bb0bf32bfcd322ae6d848360db4140c2be3e3b3fc2b0bceca05d09c2b0ed20206198156bd0eeb3db026eb7dd3eecdbe265070701f1f0fe0af5f61f20e1dea05da01f20dececbe6ed19020e067e0d66090bad58987b4dbab6b7763b2fcb87b7f767170806e6c48a15c985d5b866c5c29045b14758b8fd0afdf64ed8f96dc0ed0e2c04dceebcac15eb0c6b7bde5f766f0beff6deda6d422b96e7fd65adbb4d173dc04140bd41bb2de1ce92f8b31bb4ee47efbbb3db16faed15bed7f2b277fb30cf2e3bd8674761107070f0cd04e0e020a0db1a09ee79b3827bfe93fbf25926dbf37a3ecfe413065569142eb1b3ddd6b6c5b676dbde08a03869c204bb156c2977176e150075c241b042c2bd4112716e93211f60feb6f03161c781764404001e1d56fe5c3169d37730c9a88608a1411997e94a1b248484897070e986974e02064b93819ed4f395a567243a982002c512372f02e8c0c9ad6de78ead115794ce20c81a84921121d42154cd16c41a0988500e31ae77f57e4360d3aa64c3a257250dcf706263130b0321568db2212e8671714b221d580fe5379482a8b013b9c4419b66c62269e7f202883f557ce4c941fc405ec9e34800bb8699151fa73c304a817581cf9aacb766b7091207c4892464725c632546548baeb19f2e592c4b1e30173010fad2c64a9e7a64096410c9631110935f294910316578d46868457e9f3d0f8a78f90139e28f9037d3a3cb0a88498e905578fce419b30b65cef8089180c6eb60fcc0a8e34390326216df84150c9a460ef5549950f12016454fa4b0b282efc5f6dd8ef821f90164d38484be3f70e713e55905d62894f7551d14f6bc945c09e2e0be884c080192dc040500c1e0755c9881dab07292c513e75ea4ecc9a6d138f344d2811f418477440c930ca503ee8d45e40e18a002727d2b733f3970d2229d104a2ce1e5176eb0186b93a2108840f7b44ac73629d03ca5aab80f505ca07622128fe8a2bb7e72c25099c93beaa541833093582fb511c2c0bdd2a52a9759a838f80190f56a74e9078d2e6ba280738d6b0e5d62d10510344f87939521cd4b7896605c59e4c2d330e5b914a14956d68f3d421d71302f816982b092e942c006afb914f563811fcb37291027c9744a6223452b43564c0c4b974e3e32a09c91c03449f159e924a3c541e08e1b9241dc4c763289c464849bc6ed0a1e919d3794f0f152841210e50d219d5b3e924c640572b1f0c2a3d3838f0a2f68e4d86220038dce0568ba5caa2b0b83bdb0d8a905e36ec4dba742c20c159dd22b579e4836b99448b9b5b4c9c84fa41d7bc62832d067490e12277a1caa23ee3ccab3b405cf645fd68abb248b202c41eee02bd2868b161a1f182cbd28a3c7c101ab386cb6c459e25b3c83c9078ee502360796e6a8a491a0d46546c5469b25b3cd32e92355d724a0324b57908c6ed83882716ce465c9e96c5fa8d16ab16626ab52201c3e0a01a64178940b50498d182b8f330a9434a045559ad2a2ede9300496361ba8957c4059132107831317fc2eb99552141272355120d10c35952ad90d119cbcf144099a2b8d2a3d884307624b2c031017872a79d57843e0090ec44a6d9a959cbe68c8b119f3cda1e6a1f4e892892995be74c9238749298f93c04e2a33402cd3b8bb77aea1142690951b9dc0ea8d8fbbabb995ca8a1ee01e0424b4db25b67b26f66036ef6fcfce2f3b98dddaf515e2f5d9e159a970b83be06016c53ebcdbd9bc3dc3bdbc0db8dddb40bfec766b9711ffb27d27ecfcf207ec1b169bc562114bd0b6b16023f0b27957ac60f5fef62ad85540f0a5ddfb7afbcabe65cfc0b0605fbc8c703b6817e8c50f600fdc6d053b04f6835ee15d17ab1415d7d6e136d02f3b82700f4caff00e8b33b1ce9f7e4f77dd4df0fe84fcbcd7e99fdef4efd4333d74cc4573cdc31df0cc50e8ebea7fa7ca609efde9dc05ef4fb6d79be0f7ff7fdfb23ccdfeff3a43f87f7efed7308afcf99f79cac23ffc4fcf5f05d31986b7a4fbdd9c5d1ceffe67e93bca1ff5f7ddacb3ffdafc9fa119f255fe0cbbf90de57f383fdd53fdeb0c1df3ea27d34ffd4b41f50ff9fc70fecf7ac467571a2dcbd45700fd374b27f867ceae9896e6fc5c4d679fc2159b3ed073d95dcf49ded55bee9b5ffbdbe3fdbc67b75aad9f3fd14373d77f7e73d6ff641ff6d0a7e69c33dce00fe4ece6c76ab02900a881af3e5965c77f3380775fbfe7b9bca5ef7ade837dd77d0ded5863de195866fdf0bbcfafbe7ecc19baa63f4d7fceeeced4e8d6bfff4fac2b4600fb590a43f3dae78c47c31fcdae36fc6b2efcd75f1f9de6873e3f33c803f2802c40bbf66f7a38e7afba56ed660039e787dfd5fb68d64fdffcef33a1fdffff558ef09c46f3df41a9cffc740ffdd7f9dd87f002b25a0e90a7f999dfd79f3f4ff3d37dfdea7fb4d7bff5d1a7fe3fdb0fc852fd7ca8fbf97fed1f9eca51efe67fdd57cbd3d779c06b9db39bdd57cbf9ada06efeffb51790a54ffd2ed4fd7fb4fd555dd0368de07dfdd177ab3e1a5d9b7eb81af005dccf19cecfec5ba5b05308fff9f3ff7ff9d303dd03e2737648e4bb8391416f3a60691eda60e7074a863e998e01eb8e5f307299bd60e7c62d18e932c40216a01c9d112de79c5d19833823031841b00b8055335215a666c7e404ad4f350b0d4bfa677dded259dd252267bbd3c1ea280df8aa93cc5e994a00bd36b60b01a4d72681ba4d25b0a99e1c122a84d7bd397cbb2edc35882d779f73f7156e750a60b7b5cb1b91cd03c4dbfb2bac3ed3d5fd277cd6c506f737cc727f41eaf4a527b6f2f2ec0eb9b6b27e80842308f7c0b8b6ee0a0947e465f9f0b225f0c0b67f76ff3e290c8a0b1822c0457030022ec285111c620a3b8182cdb5f597ed03d32bbc33d11768e8eed8ad601316feed15bafba25b9902b15bc1defed9f981e5110e82fd0192b01bcc0b3b2491ddda0d6e09c3f0b27963db3ebd30bfc2bff702a4117936db34fa439427318f194819ba6c2dca4adaa45a9381b012ef1206a636b7381e04489d653db1d49362808ae09f9c1e759adc48f80be4db3367f9241506a38e9d22835fe2c0f8f008a6e22b102260402b214304d0858d943b64dc3cd0386e1c1d2ab0d50c6b924ab3a4f9fc8882f550f055729ad002498dee2c7144f49786280f8c96c0bb9be8cb2ffef0627253b100e322c030ee26cc78f8d490187fb12ff7018b89aeab0cdc2b6cf7e71b770fbe6512c43762313d2fb2f4ade18687c1c5f021978e6e06f2903b25e099d3d60a5dbf2c38996f8f8557b26f4cc751297b73e80d79287836df351edef89c22a4c68341f38180886a3d019b7f804d842f72dcf434d2440e096af2dd7492d18f25f29ecd1220594784354763f4252721db3e1748f9040c5c3d90db625eb388ea9394676f75a28bfb4093447b31c042b7d5b8e4a6e162f88c90815e02570af314cd035a4f05814c573d73cba441f44a18f1729ea236ee270c03cda80ee7bb6080fdc04359fc4ae70527d4e0c53b4530a177758347f6d9f4cb0a577e1093068f2329fb80d2e471b514251c6a4531d79588fb08294864328024e5d887933c57678d67c9c3e1da597665ae365b9ef370920e83a6c32b5d3cf0574c2a7d04c5afbf4a20e68477385d6d90e30b3280f18fc8b4d06e7438712167881e082543df6027215755a178188cbae4ec8d323fe6e6e5cd28821f3105d32ba272c2c53c4866af003abc0ba597a67224eb8d2881ba21ccbef2130b8617c3831b8f450956d7c830e89d9145deb51980be91f175244734fe9009389a30469333bea1731b64099c0767a39c04aae8057890701608127c1516157edae78d53b15346cb3d927ad89e370d7829e31d71f0e07ce4407c9c35387a85d3f6b73082d3d5298db9110315d675c478953005af970e324d47f7e9c22d49cee582d9aba143928f8a91e226d88b9d4890ed4000c5f116553b328a0858bc458318da891800c78e21e146a6787886c1347e596391a351dce08ea818fe090d6fa612c47a824264b9458af8134d2f73952e4edc0ce39d7339e492a57136e42cae05da2b912e37fe157ab91e7af00549641eeb22e01b785c59eeee8edb038aee99d0c0783450acfc54ccea9fc2307dd44c8556a472f22d92e4bd0b22435e808e051ab30d01dfea3092eba0c58e0715464bb998de4386416f2385c49d14a2d19270198772c2d29b9119ca4c9264de671f405ee8868e57cc19436f44ee835bc504ca73710ae074ae76b90c4fd83b84adc87b78d425a7e161f03d68ecf12171183d1a31adf640a7c8f7d07dc91346c02fe0c0943ed203f29b1ae734a5307abe12108d0f2436e719d7d0e936337dff682defaf68f8f1301ca1fd961c423e4676e286a20c3e85166df484396eb2a224ac6b85814bce1222f1c250c0e8333ae4702531d0e25950b1a63471f86ae6087a813d85cfe0a9ee5d4ceaf20f7887fe421c9c1b72067036973e7ece2044da711219774a63f257a094e76269315f40137d17696ece444b9197f98b3ff0088f3c83c3f581dc71781c985532143831bc8ecd1f8d18b597058b381c08ab9aa10a1cba9b975c3e6901a47e33c6e9061c35f24e287e3e36d020c7d4433ea502d06114c28fa4d286131971e66decd9a0cd3c197327486c68177d335e5212342ffa62fc492a0ee4c3ecd7171224e16064f6e4018c18de42668fbff41096a91427bd92e608d8f1410acdf8055c3628a8e42a411ad62325c7ef517343bf7108bd19253f1ee44e807f785c9059682938270e413f4201d66b4df2d17cb880799c5d173d408dcbb55051652b3b6638de0b3c59ad88a5f7700da17d680bb9144e1b1d15812e4f50b2c065d4ac94613029e1568a1491b19094c062151ab30a1c6d594bcc80d3154aa3bf44bafd9bd389a790478e8b787ccb22129d3d9f01ff77b3cdb7a9c1a307c77c7c8c43159f214c95cf22852a974d16f93a388a1b79da7aca426e99520daa33b28679641de4735103e093002ffd1024f925a4a2fc0e30763cd50848fa319b70309f1e23ef5707002ce8508bae8221cc95f346830f0804e15e16d95c506b1f511bec4e4f9634a3a63dcee542f36bd82571ad280fd71b54751e4c54e44103ea7c2200655a2a4ae6d129149fe51ce4479ca439d890212fc985ce1f41d1e7b5eaaadc416d19feddf0b83da2f0f10f30b4dcad1f1187a445cfa72c72bf0c33e60ed932e31a9a42681761d43c67180b5a1a20c4d3f9d9cc6ae4aa6f45e6f0cdd4a17a335937776332c19d000777f4b2e6596844eaac2b2acf610036376052c099ca2ae90f3d187915d9ce1d5cd47843b5bb4f63cd1f2772ca5b95d6e89b20a9f25e60e145bb990672c7e638fa17809cb878381979158c19be82ccfda6c5ed4b186df1b84c2e1da6037c1f0f9bb9cd97d67799d3f22b202b0f6c24a50bdf2472368baa1e8faff1167f7cb824184c1f0d13c6c902ad9c07a128ae068984dc0713abb1f83d7d1a2c3af215b9e99b89de70591c9a9107f500f46cb263255fbd79be7c950f3c10b345362b94f786619a681d52889e401830790bc0e4d36932f40b8197bc53509843f53c390111827ad017278e85c52f5761417337ca367d6610ccf5b448d375974adec3194e1d074b450fe0d3f96ae95990657458e3ae1981254f0794f93a4a6ef9101117c79c64e9351385d1511c19b806f43f2093814b02eebd36102197d07828efe043e3108c28f92c50d27818c3448d0712a0d76eb7b818c235df2b5225d3b9f0bfb927e7320c24bd83d5d6e7c982f3100a686945a85c46d442c9f54ed8613c7164466a78f81b07726f212666798c5297bbc72d654b35b6bacb30ead5e448f35846530f4684a1d713a88adb9970f681809d6e64cb85b6f215e2132d61e316181b9fce2c2beba8c4e807e444fabb68e9d7a8a8b8020b185eb1938bbb80273d8f4ecbbc44cc47867cc4dce782c1b7a0c4c3c96031f080b668c2676e7cf2d9540eb772b14376626982ebc847e8885d766849e774bbbbb30f312686535145f5f691cb7f8625ef064ec46fd088cf19c2c77bb10571ac3237fc914f10f792f7e8175324d04b309d1c1225454d78a2845b66c9f10ba842fe05dcbf93a0ac3e0da11e6e973b3ff2a12544e03ebdcde7648209eb58d44833857074039528e4516c5c6f804ef3cd1028f3620e39714147476fb9e8ceeb2018cb1ca462ffd7615296b456e69b2e08f927360b1ed2b3bc08274c1c12d91e1ff3628c47a571a0b36c79f49d75cd55616e72e2d6a1fed3a291d624a0b4801d521f0316a399bac0e9045c4334db54f2a338b9e5483a893e448ac81c0909e60bb5d1f08040e2dc8af5e3b3795c1e8585f129e798bca3161f7a2ac5216712e3a34b40a0f2b1214bf2091f2fde2c2f315b01e178008824680d01069d898761c6561be514710e7d07b837fba14094e7880d7a2886addbd5e2ebc78099a2bb449cc829eab6b21cb7311f0058e8a5c0d0e12d0c15654a37f3e5ace8e53060950f4391fb480c31ba091d8cbc8b91e517d8e2a71977407a12c317da8adf791a71b039c416362e0967e0012c92e3564e0a9f8800994c838588ef0208246ba954bd44d004e44d42627fc70f8d3f91a3f91e7afff8135a5a9e00a58ad799a4f77aeca47824031e65c0b88363d961f38e37fb7d431c7c610837fe44cba0df9222f823e0247db1058a0f6b34e1920229ffc61b9be37173f43245d4b401bc4e0f64c4ee3303fd9ed232bb8f58e09eca13a0974b863bf90be6e15a92907e954a154f698d14cf258aa3bba8277c0b3942efc235f76b6e503ddbc5f0327a60fc1c2ccd7f44f4d37052fcf0487b6abc03072e3e07de0a1f7060ede7b8203f51e8cac55080e4529244790f29ae641353b67c069f2c9a32b0d21f7a3291d3c00872e79238ffce797a104c76be8324dba7786bb864400a65277a589e5198199ec748e3f9a0787177e39f2b5ffc9339765c49dde347a7d03fa380e62125befda30f80bc1298149d230e94276ed8e6479b111c84094b99c686107ff8c7d01371e579974a20af4afaf16e5e0ce53a1224656b01b1f7c18f0b7f46fb4437faa3cd8cae0ae0ac9998e79005ba262283fc1681170e68500f97440332ff883bf4737f89b4d7640447e2a3cde13593af6792a0b693b57bed0d2c6fc743010771b9e8ef28c2f90455fe9e4fc6200fa17de05339147c7c67c3119031ca7f9d68dc0a8f909ec99d0e3a0356ca6781bcbe28a69c71209a7d2f14078b72d7973e374b8644be1828cdd34c9939e2649f4f63e9c1bdb81dd26ea851bfc8d25e669b32f370142e3cd79fe5bb204429fbb074e2077168f322b1d9fb3921adc6d02057ec52c3bf7c09e0401054fd1236e987897bd237a444ddc21108af17974c3f7379495f325190df604fb86e6345be4a14282f053a083e44240bb9eccb2077847ccb015c4abfc6109c17ab26f1c93d995ad22e860fdaf1c949be22ff72ca947c5927ebf910d27449805c3c61de9f9bc913e0399f10d00f5a58fa376963bc865a8bac552892a671c6cc678299fa125d56f28f07205c0560f8e8aa1703e01452126400729cbc5783983e83954117eba2e3684c3ee4b93f79cff760317bd1a1e49134aab28a0237de43a2381ac506135fc402151fd380901b7e57a64108c9b361baa3bff6b85c32ca9f4b02ca7d811f5dfa4b1cd24f55dc1d8bc964b7495af749c917fd00071bcc040fc92b89cc7a5efdd65bc883246315367da53a2bfea7c2cf5fa8c0a603dd547a253f28690ed4eacf7903f15e6b3edec025637e94e28b639e88f05d343c7e981509f41440d74f90a183de93b0c2f336102df628c6bf0191f077dc34c95e6a38d21106f865a81ce5572b11ca8a12f74bc7a768b6ae3e7912f041967a512307a1b0c5df5a40701f52107c6ae080cfe0c37c29702ee84461141ed29526aff58bba23c3235a1196b767b201f568323f3c9603777458e323bfc65df90db3072f058882030ec2f2488ae8f8ca2eaa3c8db2a0a91c31cc91ce98b83c1a6cf9aa199b67dd19c81c4784911bc00089ff728099ad94f1793b224a64222dbe3ceb9994479c68e272000b65413d531fa831eb176e61ff48cd831c028890af0204a8f33cb1e3965a42dfc2ac8adf80b3478f196ae01eec8c693d4e2efecd8bc94b1accc9802260fe1fa28d8fe32f60028704e8107b24329d2b3c1ace4af129d6a7411f604403c7805fdcfae4e89051b67ca4ad912ca0cd86771911e91210c9700d56974ec44ac0bf11cab48f07095e9186b00f0098f74c9310bca2da8aa702e7463e03e4c43fcaa3c0a76b115eb0d19526e0c2e9bd267d5a2a46e1719c30f384a2da0751a6896b86257e449c9a1f1982f2b705abf7b237e6584941ef7267ebb59c35d027ca2c710f507919329efedbd5c19f78b474118dcef8589ce6d77971ca855f4a9c85a03d7ed699f60aa204786b86481f2669f79b761eff4b11a2fc47004506c1647d1b51f4ded0e2204d67125b7e0290e78ea9f323ef302096c10cba79a9b507ae052194ef4547d5776f0e3d0ce4a24f81a073205bbc32932e5bef9568d0e1d879f1282bb4745c8130ae258f9d877b4ef247739efe12218a570201d685fcf07913493038db358ad3e860d56865d12c557de1424a5dca12f0a0de35427adc8f003eb8d12ccfb7244271155c999013292fe41092fe1c4b004a2f288adf5f30047f65e713375c54f121b6905eab859f5c86b8e974582a27e4d8c8e9c4757d100a1d1c0b854aaba549e39c9195cf4684cc0b22314287f8c1373020ebeddc2d0ba02682dbaaecf814790a68366ae3173ab4d4276a207a3e462b74e59b0d1f4777f93e35417208556d740438379f66085cf64220d22b1154e3508a18fccb92499fc12cbd1c17297ab30c0a07d3c6447e016184f34120e4c3a810e106c648ea025a781cecaeebd1b0e567a35929eb950191af8492e42b62723e050ce8427011e9bfa408bf00172fd904933b2df6028ccf29f495c5a0e9f17829ecf2d38943ae6093324b2311799634af9fc11c7c288536b486e99f3bda59fed80f09ced7c8286ba973e35bac8ef81f1880ff19f068267d8f1e8fb569296885dc070c191acd192ff9eac51f8c210c1efd5c3bf16e9f3fb9503b299bf9dbdfa6464f4641853f8b1c336f9c0a1bfe720b4633a974e36d4d889a91c31e173393920158e279bbc63a3ad07ac0c17ec0f90704703f64f2d167d4f8f2bc105b2fe262d1dfe6acff42839d138a31e96b58e87c0765b2ce074e100d0d6b930fad14f81a630c75033a6bdf9549047e534392393c6eba6816bfb288310df485c244bf326d7c68214ccfe44af481e4ba381128959cc01d3177d3b29759b849f92f3438e8127862de7788c95786f0b9a0394f1f58a5e73ff82dca57451edfc91612ad05c9f493cc9894a73039f33ffe38ca39a08c3c12dc094de96e490e1493a2130121ca54901ce8cd3154bd610794dbf9e4c3c3c610e9ae2e469fc4f679340d839c079d559745e9e234e2c4fcf344f629d4507429aa018f00cc029dc54a7b1a2dc213bc94fe52049d6c47ced33b610cd427b834fa8f4375ba42d6864f3044c58b2df0e3298139d27fc4b67e8232e929388af0700ba2e84997eafca6d67abe802f1c0108c7a742448d6f806bf02866c8f11591527e67d19067a0a3c627198bf35a3e7e10818cf8e2f4913e42a5ea693ecb1330513e0a455abec208adcb2188929168affe67ca9f7f24a5f37b60fdf12d8e6b7e81e1991eb2c7cfbbc080de8281b7dcb6c2823b402d32ff38d4a32f1d4939852ab7accd72c70fbd21de460f32ff3b44e55e46fcf81fb4aebf4249923b2179f0065450ba15c714998a86292ec8810ba7b347bb98197a7c0a011a3e0646a2a653c3c23748507b0496da2cd5a5438bf1a53d972304dc139305f21f12be193d90b2241d39af8479e133db3ab8d435c5ff536281db3d17f88ac0cda7b497e723f71c7846ca2a4f87d9988fec353d960bf0870502e21022b169be1dd9ed0ed8d1736d33bc8a0fb4af5125f957b072f88c0a1f3e8f13351f444002efc016e74e51accb9939cf1f10a37b37471abec078a8b59560683a1dbab2e094102e0c2c4fdc4315112ff842eca19cf14cf512e78184d9e1623265bc140d94473163f3239271f96e001f5f4039c905fb34fa3bd1c9468c7071375de0f82238732e067be7b9a6cc9ced6d4dde43624c2edb3ad1453aade823975b7973cde56fb99a7c8da479ca5507e0b88b1a15642df5f2914070701d87687cd70f0b9e83ec84e3e1ecf169390a68375189b7850192df2b9c1ec43a239f5d1b7d65f52963d9fc7828790e3c2700cc87ede43c221102b7522044db70b2e15a6a8e741e445dd94c21a97c977595e7c870be329aec7c1c1b04321f2f9234954944301e213c348d44129c8f0dd6bf9a2fde8c59e40f5a00a50bf5bd714d3c60ef6413fab40664fc4e53db5bdad4e210d8e439a58229f94c0d82eba012e8332555f9cc202034a596492fe16c2c8b4d4e7a36ea80063cc494d3f459d48ada0b2fa44ba21b2610fe175a78ef1b1e5cb2062e55dc300b6baf55e4cf11b1f01f3335f4254fa63c8f24472e56a5f5b6081ab4984bb567e4058947415a78b782275b01c0c4cfc89e0ea1cbd473eeb8e4913af9f81e250e97e3658e2f4212cb4fce9cfca02619f9127ac187d488f312aaa0d312d238e9af36cf3792995e137b8df2a3e9974ef1a47c32b096563499e56bc801fc3547406f01b895632c4a731b2f2eb39d9214bfa444176f93a2f32d4f6eb218c80feeb628503fada9f419ecd0e42907ed63b71ce5305020fc1739201949ccf777804cdad20c453f26c419b746906c46e40552de0840e40860535e280149f29d2405de1e7f6e561458c4a1f839bd8b282e791117202e04869c1c2250a4cbe120a10d5d3df06d1b3a99c69f068f55288cae90c5c60f3840e78068a8fc81853a274148c0cf2dfa7a039220791a9f8d6742488d43b810e979f8b0ca4fa0dc3d3361473fe092f85e9283e34b9cc891ffa4287c170d363308404d6e3741c3ab628aa3477c21c321b4c1fa498494b49bc11b4fe3449e070184c35b7198d23f1a0cba219cbcb782a0ca03e2db7e0926ef1b452c7a9f308eff270d429616927d5642e68546dcf88ecd381f01c9e5c34c69df2c771c654343eee02e9a5d3c8019cdd70da2815732a0fa1e3af37b21575f5c15658b2e98c08df6d26ef83e1f1e9ff04be49bcdd1ba89c1cd0f72e78a6bbb22ee012b9b2be1e0f043b27cd06b9e2cbe884066facfe29e0fa06a938d04e8e11d04cb3c8faa1d47f2c3d1930831a3f1f69e27e4a0256fa6f625e781fb91ef4c3881b34f414f00c5d4652086c8c3d820e8c639267e01ad8f07d492f5194608f13f25fb9b349346e4c6c5537833e7d9c83c6f846a93a5f0626f44b4e0846ea0ce17a150be7405c761d0cd694b89fab81d54142f60a6f56bf2b4b48638c99ff2b6059339c8f2156b3bdc4a1198bc1e2f1b6020952eb8142e2f9c4859a5f67be49565c05d7a194b34b9892244af238ef29159211e4e05e49f7952e20d451af416865b9cb3919d769411e9250310662a4af813ed8e7c1c42a8630d48905bb0dd397cc18f86a322de8e0daafce42b2a572060750960ea4c6151c37b894b44d681224e0e7303853f2a70c89dc1c8890b6130a7b128fa1cca587deb971aeff836a70f59e8f35c38c8f0363b607ee852985724c0f568874ae8d7cbe5d3d113f912c462b81e0f7f726310332f3819c6717838f466c814c9504f20bc943f39199ac1905300a3fd465e22feee29caed11db78372166c0150ac164183cd0b4223d723284277e59b380e533f912e80d7162fe5797d5518409f0594f8679469d437f6329c3cbb898e454e4aa7a100c40cfbb64989bb0807b071f52e8b41e943e1195cf4fa133e7c764bc6ee162c05322e3fc1504d0643f9d175c69a3a47754ada3f1dcade91c865e5e286f8d9fe0451b1849b6cfa3216ab93700847831b32eba8c85d4ff149e0f8caffc16a93fb99303f69f1e197a81364617b37cf24855890e7d9b66210802385d98411fa513f32175e8d400ea047d8615526f5ba3e583046af317b008c8bf86853673a35137d811984744b1e368bef4783823835c921dcbd78f00087ee3e9a4d9e6c6bce517201fc449cabbfc29f9a78c30af8978751a6e17be2cd2087dc40d7c88141df45bc17e244a359fbbb2e6b1a8a8bc4f963b4f4581208702c2d105b5e373b123e6bdc051f46d5162b986a4473af37dfb4116d1d70ae3c343dec9d229e29a3c89581477521c4a5ac69b38fa01d320cf2be1446f0fb078ab0c953415a2ea6fc874921b117074ad99ebe749e5b819a5491fe64c8a9b31fed127a838f1488f7534a165936b4180d15414f6bc16355af40a0f766ec3d10b4d85c60bfd4e627827817b79ed88dd4ba3f4713f4b22e92a1108e9022bf6bc3ab20bdee7e4d78e03448fadaca49f97fcdd0e85f10197a8fc894852bf76e3cc9d08fd5ed10d1e6753e696b7e460fbc9c80ffe3aa0e1698a10bd0e4b00dee58340c6a2f6c32d65efb89e20176f4489d555aa9dbc408900dd226e8fdb900bcb1d2444df111b31978b0d43afa7a3cdf3ab4bcf4ff969972dd386cf403c7b359d443c4e8f1eb90e7ae429ec89f0978dac9cac511e9f92b8e69fbc11d27453d8def010447ef202cb2b80c0e665e2063f78034c3b8a00c75b5cc8f08483043922816bce1ce0e47ea4645f16794638e7900e6e1cb910b9839d9d7be561ce1fb061c40511089aaf8ee4fc9269a57789e0464bf980f31419b2bcaee9e98093815f25c2ef613b6c7f2818fb5885ae1c86fae2f14ca7782012025e07c3caf77193e32be908907dca8ae3b993c4e99e51273c72404ffb50e531687868367b5232084b74de037bdcf402c830ee762a91c15000eaed9d3dfd02830b0d066fee3bed2c3c8db7cbcf45bd650755193cc41daade8188c48b0890f37c4e6cbea2cbc2cc06fbc5816810910d0d1ae3da2c755a4e8db6bfa337b3a3066cfe7758fe8f2d0efe4782558bc0847a1052225d0c3ac6382218487ee80e207de0ce2357410cbb3f733248a7a043961bec783830eb820b0944f51a47e6b88a4b19dff5c5e42d71b9d417f0a8ef04cc8cee40c5cd2d0d38e645204b5e1ad620cf1140fd4285695e7767c597b03491293138f2c5c827a7e2c2e371ccb87a032e559e23c7e5420030d5107a58e1470db0797aa74a9f51febf91f3f85e20b37b2c1880ae5b93f88cd0dcbc010c48af83c4e02b6880e201a854ba415cf77bce0c1d8737e6491e59e51468253e2ba7fa8352143edd97cba7da537d6de895014c41e2069c08d17ef8847833406264bead7f05846faf1f1b1a19086795660ab273002c073d008e912f31c070af1c42d154822ab4181c3cde5127a3dcb99ffec0b0ecd52489f26b7900749423d437d871f023ac569e17dd723a04d878961885be05efed557c15d2259a34f21b20a864266d307c4b54f3dff8b97144927b795b28fc314311b40fbc2619eb0952f6f384d13742c4a5fb58c1fb28817edc155b98fe4c8bd185b25df051674f2704537a0628361d808721aef78d59af8b8f7fb83bcb594f24bff20d45661443f5355de67c54244a7fa7b0cdcdf809e450fc4c78c93d7ccfe24b82aca4eeee73199ec71b44cc9b30011dc982525f05f0ca21d87c64215371e0b4420cde0dc0368b59a2f95012b8643a16a66f88f8f691f620ba8e160ef2030887ef2422eb8694303cd266a1cc230d0e77b02252439933f419805c64cb495b9cd0610a0d5560caa3a2f0c83ff6847c9a464339d2230307f22697e7744ec884f4dce538c634b9513352e6b286c54bac79c8671818c96f8288bc97a498fce20f53bfd163de0d7a4127d97a713344140f21d19cbf734187d3782fbf22f1d57ec9c1cfe952f268e268b8dc9b0f3e07eecef33459922339847d56d60d7d6389bf54570bf73339f51a476e642291d4e8d772c7a775a0f11a68286a2a20c6bc17462860cd096baf2849d76f6d2dc84b20e9e53f4b3f7c4620772700da7805062e1c9388a307e874f1650cd8f895289853a900e47e589065b11d7a1cc40410fa41638c874609f01a66227c87144cf2a3393d4f07223313f270f414de475a901f21dab1ca053c384644e6aa73c25d9430e54a1475c239b22cd24c975c6bad8d65384d2ee5688a362e08cd0e8d29e58f972790bb341e5d818218b9ca00d443b0134767fd38e4867a39feca154b8e58868f179adaf328d0e2e8446b1be7a019221bd822f1032cb9714926251c879a6b0e5c9c94058c39905b5400a01760a360c4ccb56f2265e9455c60f54eb1f8b32c6191b120b068072c289d50b44e1e9b04e0789a407a3d715f1eca76f25b2ab1bc999ba95326aabe0d1de745faccf0b02637072041ecafdc4d78254aa29e284c88f770ad373492c10ff968f83b21f12145cebca1f54c3fb27ce48a0c3be4bf32f28cecb080a155c56714b5f974229bd30c1444c926c4b6388c413fb94edbe2f35c074de70d853b898768425a4f1c0a05417684e2cb0f91c1c90fe6b00ef9e71a6eaabc861bab07b157cd4c9402613b30207e437cf65e0a64e6bf5ae0c9d0c73a7949822b374df5caebe0b1a7554c6a7c4494b03f4449d5ef506968152ad078def1a5b32fc219b128cbd3447b8f27828cd77198743bd9465944924a3f804553c7f09b7a48519838b410821feca2c0e108c073302d1fbde1cdd22d45f90087882494b5aa681d048a243de746f61ac24afc08232ee94ccc0cfa8cd2eba50b00c4197869a32d653670170c3038a42d84fe4ce4fcc917d4759c05721d1d423c9108899a0391d76d702efada1205ff87e828fb21b1e5839b6fce6a0f3c1d3457bdf746cb25ad1c72e0b59a9ddcc4b90c43b53f04d4a6f3fa2665414956b8565656da522d89db25d994bf20f97a3378f21e4a96d55391a2780584a46eb549f5797500f91baaf8ff0886d1de65e6f52428f90f10c07ccd2501d94c24932791accc4820a479ba3853f40b394e8fa09844bfe812c4e96c58a2b504c78f9048d355d2068ebe9085d2514e30b2631738f0f592e27b090322cb99942683909ba2b72ed038841261b4a0f488fb90f3cc6d24061d89570c271063edff6c01d48e0c0b388422d85ce3039627c3d3f88c7062de8b13ec1f5e423f431443edf7468563bfbc70cb24585e938f252de980982c6582e9b1ec31f26e7d015cec364e66a3c4897f41b1e8ef2e9f681887803463950a6e80c3032ec9c543476d0af90a4d96e441094fdfe67475297d8fbc91049d862377e5a32cf97281083adc32cfd0eb0894f66872bcf03574b89e921d4b6d07a1edd750f8d38a87e21ecea69456c482e5ec748b2b212a82d662757ab3dc9cf8481e5938accc500ec467c47b4894969d9ae25e0b3f0c7d824983dfe165f4294ee8f741a5c39fb96559cb27c193dc69dfd14f7a045034bf71c2e903cdc97c2520903c036ca00f8c94f6518541b288157efc010ba8f65360809f3932f49772aa7456cd1297ae83d4c5acd891e35cc5c85a12a0e4375126dd0d83092ea502ca2f13252d83b930e4143028d1776c4c2ee743a25f6b4ce08fb27b3fd748c13f909bf45d14e07c8bb849da6e11152fa1f37e4a0a465fc937c70bd52471a86add3f2ad0e49340def126272e6ea9090fed0009d8cb31a2d580b6b8e9491c5bd82a6b2f6be198a0192952e90b34a4c006d660e51139b4dc0f945c3c82c73c0da38e13cf62d7f46c636ddc45168c57bcbafee869923ed3ebe3f0a6827c88e786bfd8d399cff264f1037859be50921c2ff96551c71861c635b724b20ca92d974659f372884674602082cc080b4bb311d2ba4bbcd4d14c3f36c0931470e42a55ac6f09008ebe60e22e23feb9fca9cb290f65a7e62b6ce0d43b0428fe061905f492c0146fa72597cf74c9f04d473cf41d1b24bc8163056da828cda3e95147ef0161e7252631ea2b33c4780daa98e612969db344148fdc4a90d90457bc21b7be4c9d8ef12a5ab68ce29120178ab1d253d02af45ac866f92b445a3c53519e576299f0fb820ef79bf2aea10ac33fcab63d034c2e2fc843355311c8e388203c7a193b852e87ad8f7ec3a2d123822ae14532937c854935390702137ec4075d3ed339c6475867e4c7c323cf5687e339646ac52f9a8473cb5e313a0dc212d730db26073902a8e1e089939128ea82e9b46c3d02a70607d364e4e9ecf1a05924ba9fa833c05fa638e16d00d8784a5f7d5e2b8ad37f59433e76b0c0ad72733f56f874307b5a4f85739f6ed0cf470b783921c045de8011816c274a67462037e3cbd8207a185ba264026f803e52a1472f1c4d1b79c096285da6e821f361b341539d71f2cea70da78454752626d9293d5afc1c6f14f80e45695e4999116e20ebf48cd9351a4bf4ce11d070a34b5830e1da1e996e4506dcbb5931f139d4083e8a40893a0b9df4e57c6073aa1d1efe2191d5572680930f9cb1be45e84a7825330fb419205a1ef22a42bea38280cfbd99c927b4aeffa4108f7f89e47bbd22b1dfb071e8073cb2e38c256278e00a361e2141a3bf1a31f180aa405e2b8d318345a1784911f87c01ca015e264011fdb44290434940d284825b67a0a73ab62c93a5503ab84c83e27c5e2312d8498202cf2824c36727b2b2abc9bc8cf268e6c2b541da8e0327ef45bba7c7bad238122f5d8e7939e3a91ee97883bebae7420123034276bad9a4303e886b844bd914d3517f4b3ece8f42b9eaeb7cd37086bb8f91fe65098187b853f76ab4541cc696e92b52c2481b526df3164211794af5461e32c2cc35f381c1d328c480b7d414bf8aa1d1fb3810f3007b8d7cb28f0baf61a34b93c022f39121e0b29838771e6682e90f92cc7147921af40a2e00ce9556d5094e50f8b3161a326410148fc30b9976ed8cf124672cfd9555efcb6c94d057a006bd0e2595ae58655fdef374d46b9a7c79441f02b99b48560ecc2fde2b3617fe590980eb08c696b71408aa258da97e123b15fc0aa4833f97082f624d1e4f3488e77c696c6f29a6fde71f3b4f294fe293e0b0c6b522e5f107954cfc3e9ca2b314f4bd8c102db2560a95fff1e3ce57d819e34e0a32bfced7dc5fc0d27cf6e51b5f604502570e1e0039cd22139aca8c0a59ea087d2a70ac7a48d6483a849826ae422d515ec444733f892e751b0a3e7cef008c6fecfce350ac62f2eef3dec5ef8f7612b5f65179b0f99093ed270acac882bacc783d235a7859a3e5038a83c43940c9f3223c487f5aa5487efa2200f6f10789cbd1a3a5e534fd7c9f83c94ce749cf47e954e37e08a3732e9822fcc596163f354027e3d9023e559049bd41470217f4278c8edd287c044d112ff5b6c11bcd297aa703898f26e9c733dabe3d64205aee13c290df7dad70aaa9908fa1674367511ec9781c3cf93d95245e929f3fae0eb71a193633e13e18a3ca68d004e14e1194b98a0397d7cd619c4b7748791d03ac9ccd0e92ce58d177c066959f1ca63ca52a94f72331f9609a2873140fef1d99606a456fc2a9d208b9538e40be7869c647ba92f965590f998f41f4ab34d25e1204ad7ce6a648763594de49b630a388e6b91b4a39b747a79af703c17dadd5c90ce2d2830b04cc8c8f33eb72302927fe42da81fca38618371188972789703a93241c7f8343a01782eabd15a1172fb0e6cf535f24f21e3d147f0493ec47b203a76f6cf8e3789c583421d480ef9313d485c6963cd91d3f7a1a58f57d9c6f305d171b3a458a486da5718a4eb1c0e9a37f5ef213122b7e27cfc867f905f94355378f68038c273464d02352d8cb5be074fc171d97b41711149e06933a3a9115d83f2fdcf02d483f271428e72e229ad388a220d37182fc268718e4010d2c795602c487c3c06f21cf084c98c528cf4d7d70c700c5b28e480ef4843c1db2e014ca171386a41f9401f1194d5ff88eb42cfdbaa5711a8359cee548e42bb21af15561e2fc2b8bc4bfc98678ba165d3e0d9cfc1ccca4f83b8314f96115ed032ea3df74e5cd492cf2fa47882e741c748053019b3cc45de4af1d71e3a6f1399021a8bde53451a23c8a227eb4984555ed3796f55f8c68e4024f96e4350fc637b7ca720c10491e4c183679522295ff3176e8370470e025a4587d0f3a3a1c0e4490b54082791784b99c2b7f7cb5ea95692c30f3118098704040226e82f1eeab0899fa85075df21359155d8561bb6601383c1b821c99d18eb43c2946905b6438f313c8b4f421a31e5acbcc0f97122e818f690029c30104e54d6c00e42e555eef85a7963520c9e0502034fd973d953e07d3864f903875319fa82dfc4d799c994a1f453ae714a036fc415a1a7fb4f4e1379cb17204183ee829c0025f89d09257b2ce99beb3b3e1862191901b8031e02692fcca8a6d24dcc6419ad9501d25f0077dc1af60943d1b80428ed7a627ef3093f724d6321faf43dd1b1a39a3abb4b4aecd80c91c06f9bc61814ddd03091e5f24c1cea314287f0e25269a881f43ee7596f536b2087f4b34daefd164109b7a6f1e20021e5090144f019fc4391c81e19f44e340f4b869bf3025bc0009211ac3154b8f208a98636031e4c58250c88b11047ff28ecd037d297a261de29ed151f5256500a0eda451fc381bd63ca2d8e06f85f4e5b04a94feef78d078fcaa7f666e85fba0a1c41949cbf4093e891eb8a64e7eba9ba2491c91a16f3822f011385fe8109d1af2892b2efc8b9624ef67e8e48524c2d19be110e531b37dbe06060b2f878205a7a245a83540ca39250151341f4a0acfe5ab4eef9199391c3f46dc95d3c6715071e1572f55bec48df6c10e64fd85334e3253190b4e0403250d894ae5a13c067913d754644a32e2e715de169d0605d0ed9c1cf090225268056ffeb2902d2d3256768f2b0123cb3236b5be53d08866b2b4f96556087989b5233f59e3cc1f8a8be2588c681f870a0f4ec8490c1f92a8fd11646faf670de3d82612df8708e7e3b68139ef753c579caf6f22a2211bfe8c4cc4102a37f941479361d4a25d84c8d48c2251fa171544644a65c2642739a034062589fc0b5e9ed77aa1e3b75ceb3cb2cc8fdf5bf23aa1b6b40f41e6ef8560e1e3685e10bab48801b770d998abe028f43ec7aa977355c4ffc415f90b56177ccd1f0d1a0793866ffa00e6410a3bbfaf704c93298bf31c284bbc260247194da01bf70917b3b73129cb13abcbdc2b094ca2636c3e3d192247ba8a4be99b8577dad153a4a7e484266f3ae1f83442ad7770627a824100fc84093e2e7522e67617a09ec951d71bf8a3fb3e52b6ba401a27dfe60f20af61839157151cc875f074d1515520b949ea1064233d28ddc0321ab2990e3edc2977837e2830c76ba8472ba79893c2755b63e850b108790907466e67c5a0ac8541d7ef3094c08f303df9349d711e1948f657a886fc0b4709b7e107222f5134f657c808f841026a7e0476bb20b6421e0370c27fc1a979f7c0dd4b45e91ed1f2c1ab419291cc420ee09b616ffd9e468e5c1e2bdae41c5249efd4c0e1afa16eb98f7a53dc4f01041d6506c43304171ed525f82318f5f8138adefccd21c76fd455fd90405b8dd641cee75ac078c7120d5c91d282970089c94dacb1cc667006bd0f1a06dd23d209678382431b5ae3234fc823e3722552b356c3cb4bbcfc5342e3e71d00e4cd17c8ca9025a1c9f3106f04c17d4dd2fcc373da0e1e245ec552fa13ab03ef218bc43fd06fef54804e0eb3ebe16acc3264189b533eee1aa249389ef9812887bec1d7e36f16a0f1184c9cbde3051a1ed8a48abb1813e15dd53d39889c49f0a013907a2dc80e0de4859bd7f186891ba9c1f0830889d35caab4c80b14d080dd1aee9d55125eef4ca03f13105a125bf89664a268310e4c7c20b488332eb9e4da3e2d3219422b1e41aa881f8af2f870465cd29915da3c51f382eb10e1e8b7a62e7d592135afe0757d3061888ee34d8c8b000a9b36425dfc144aa664056d946e1c1fb05c214f899b86ed85be5e6697b14cf517bca03fb084ccf56c51b894ac2847e08191c6c2e6cd212f43b80f4b0d2e1621ed2960b67044193c64342b821f87cd84362149c14b62639761b469bf0eecd2731e56395595b24c41d2522e93a784fb8204d62b9dd5f90a8c3ff2d451887b66cec80f0228920f89746aaee9802c47b1854fad9192a7a899f245fa7392049bce5582ce877144f44cc2d8d02dd048fae6a48c6cbdb3f3887871f290a7388f06c3a1bc018b9123bafc7a109890bef993f4a4af2cb7b4c0400e34c0f101d449705b1886c958696734a343ad9c88904cd755f665b515665c467f95722534539a4a1de94f3671cb8a94e44fc0e5d0fdecbd4f0444f1f71be1271d02d3846c6ddc2cc1574e2242cd9b8da8e10dba187a96044a5a08214aa7e353cb779e2a9c4c95aa1ce0adcdc92291f81e27023ca41949de8ec9a3ace58e8fbf2248ea1b2d69e2be214026df4de5e8170a28339f174fde36d02fff2710dcb0caa5873b94e92713227985496f6e1235f820fa8cc8563f571ec81f1a0f61480917e4631fe6ecf1ab18be590e9d087fe53253b38129f0826284d0618e73ce6552cd0b89e0e1ffb4f978d3b4683c1a1c8cb9ca05147f864f0e98d11ed37a8a2e5c36b32c9f6811d4f57a9b73aac52479f14ef0b7b6a4d09a8c8abeb503ea6a2cfdbcef03806c8dbaff14dccc542d6a4e851ca403a1a0f303ee10bc00292adeca8fabf6d1c9c7818049f907435aaf04cdd161e098f3679240ca2be86864076a7668454628dfab20e7d60120c8d76469d18885673eeae5106ee462c033a136ef078a9a77a973492f02d34e49ebc80b28f0f4c63a232e800c906f4145927bbc4d1e714501e74015e00fd7f8fca00b5aded0fa23431172c1b51c06f1455884389f3751faa9644756a1638a9bc1c8858c65c006574dc4e3870d21a3394c41b3051433de4448aabc5f22152e1b17963ff322416eb304e1989a201e8f8f01aec4afbad1251ede660b8e5ccdea742796af1728d07a8b3e7f7e438a4217ab8cfb118064f8984d299f10e58f735d7f684d334e9c0e4e56576d09c92326c03d11ce38faca154c5f6993962fd15d79c68bb83c5f9f1f7d088a923c07e823bf717e70373f83b9ce2d861b6a4ed1143214f82d100cbeeba5e2491681682270ba1c4cd9015d68858a77b2f094230c6ebaa3ed186de62388d7701f7fc59ca0378a01f3881a1d7f1247d6a154c0902f1f647f118f0affe6eb90b31122e9b14cc5d08f527af4864c1e5af1898c3e83f3d36c58b4beed8b1577e2c3e1566d0fbe8813a5efd0a2c7eb3cf5531aa968206ba21eabb7d5cfb2425e8093905b9a90f3816030d170140b9f1005329e05f1c027e9e1e538a67a3c9eb2292dc42e485e2129e9e50ce0f039640ce42597fe321d184060bc4dec672061c48d4a31e86947e85e134c49fc0d8fa2ec874f20ef32044a76cb9cf4c446173a0deae682fabebcd021e5e7a5309215e7ac794d3f88b41f2d0b5ea3c1de1b51c4f195e0c5df1a16ba135679017d305c900401f9d101cf70d6ac7952b31cca22f66869b405547f5621914e5284525ee2e085cb3c6ef8183f56b86d6ee0f997c88ecc57668743f8e1e85430ca7c092547e75222c8039a44f03008cdfcfba652ee4223ca1b1d40e52a8cd03e85150e7f6422f6191a80d15be0b717c1e7cc1be163c2af14e8d41bf6936ce78af573b889f341cef0704ff0a9914bd0c1f13cc034f99417726848625e5e89a30d3fe50b1e5ffb1bd4531c6cba801ad73c9504c5af3b1e68236b5ecfe549ea111561bc98b9403ad18399538e49d094f230f8155e6defa2699277492244e7f947df2afafa26ca42f752a0e6767d88fe0c17a0bfd10c9f266b40be932343ae50270776dab2d264493ab58a1d483c019611fe250cd457aaf0a1a5a439e4629c2afeca8988936d15d11312eb38100f930fa6e7c03d87db5b4a367e883a4b5c0262fc967ba2fee4051fff0e2d7eaefac52571619431bd607d95427f5e908212ef44130f1cbfb0f24cb0997710823d3d5dd392cb90f178316275ef8118dafc230ccfcbc4e6d1e3a5d1eacec345dfc3492a5b0678f01d3834654d005cde8b9e407d495b78b1236879f29ae6aba829ca97ac4cf8c9c16dc6c37775c41f77ee2688a0db0d48e48564a0399b0d491cc00322daf04754071a7b90b51e78b86477541e850904eea283385a86d5a07f111dcc58c4bcb8784f2eef84e444a623468fc349116bce4b95fed052ea9c7f935fc9c3036d0410cadf3220398f904e8f835a9205ef5678935df58b1e8ffc76f087e623d9c7230b1139d554900fe1b04527f802979fd01980391862fbc2373ced25c045b696b9e32ad1d3f40c2247bc75c6d3c38415729fd8b8f1589ce4c9643fb4fc9648ae0c27e8d21f8b507a5c5be173a963fa23847c8fc48d993f0266c6f50c91cc9176ec78202744798c993edf28c0350b02cc74b3ad1c2ea2099de7bd81f365731a3c25ac2b7dc6a1cdc7b09207566bc4d45778e47935924a9a2d0f853bd677e69fac10a0fdbc98f31c12c9b81a2f365ec8260b7f4200ca4f903d1d8ae8c967e338d253ca50f856db5bee8183cb75e42dd16bce1c7e1b1c4d5eb16c8463b984e153442f4fa24a9d86d443d033e4f9ca6679163de32007da8a81d63575244c2775e88ffed4e00491e6b8984b539e097064c94acca45e35ec03376478cd2054cc711ad24a3a108548dfa3d02eff3d41b8558403d7e018e09998b91f990bf29c147a68394a282ff2682fa7f9f873319a8dee4426f84e9e4ebe32997c1271507ec8193f4f6100f299c561cc8b71cac88f4230e54db346af113264b21b213cdc2d81916b917b73a7145af9370f1e1d43a44827e1e82b8fc5b1741b8852683d925dcf23aaa6e108da73b23322f289165457ec63c4c9b868f3398c4eb4091d1a1cce90543f6e8ef0323ba8ffc5eac1b10ca1cb8764aa7e0a902fc7ac1097077364d67286c4f709abf2ee981a661327acb493268a8ca14d93572da3f900994af216520857f2e848261108cac79893d55839a23e7f70d3918111de440820bea7d01bcf7efe7c43dedeb31139f475350afc184b3e9d3955e613c5dde92769b63e0a509e3f2407c10b4c4acc6d6a4078279594e8268558d96a50e6cfa8f2f42f86403dcf08a878470c62ee9c9e9427c014e0b94c29744a173963f2d0fc299776bced4a8b1764244cbe1095c3a704618dd837e60afe5c8dd5e290dfc514de0fe30a7f05bdd03e1e41b99bac805cb5fdf33fc804f80e2e8d1e13cf89b6f176fd143699facb88210f65c197c6c2a09a1111d9be6e65756e38450e4c83b0cae5fc91c94e0c50f99e1e7a7cc49c166e66ce86b774c1c6df443eff5294d26764dee9072022bd279a90b10030ff518c4a99698b9363417c6a2621da1c3104a0c772ecfcd630f5413c94c8508e7d29089094fd0ae4d0822c653dd0973db945ec7f094c140d4f1e7a456590ae61ecceb6224b9ff950e718f24cfa0d761b7cd012009f84d2c0235d173947188a774bd37c272363dec69f9cd658675c8a1ba57fd483cde58c74690105a0fce92c72412ee12789915d8814ec29e9a8fbece494ec2aa8a0cb7492f8ec9a213a9298203a2bcd5f2592d3ef29e0469f8013e3c7a20cd07bc6601dd00433dfc068c917ed00f26d97827cd5943b19bb86e3adf40d664b99960e47a5234f82b8fc2a8d081a6cabe2b51021d36f4ce751b0020ff5b2e630f460351c488439010f33eee607792ad12857ce50104f2358c2d54bb3a935c538bd8af050fe99a3d7b948809f47a0169e03c3a21b126b9153401d70197d269c12a03adf1628e6764f41afc8a4cbd3d9f3f72fe828681e5925ae088ae5232998e2966957390403ea13b07a90a5268bbc97a11a9e474b9bec68f50187b8bbcb70a86032810c6f3e480e44ba479fd7e768a3a185a8a1bd88043d34d3a494fb397ce36898b4f135343d349b35ca2f5aa9c8527c35de4f9053c68220f74206d07990c9f8dd30dafe04c14a6fbbd3e05d4336bc505b230fc2048d5b719cfc0b987f9e910fca9ca5b5e861a66bb006a91e1f88908087a41029f3c929d1393a94c92c36d4b9778102f8e30729ee9029e0270853f33c81babc0cb0401ff961c0e72a8bbe4d5a886f94e924e329d3e3d1cbec9197e6f8034c3167a347eca300c0e4136e899ee9f4e490eca878241e32b560278fb774473d65448fefe240c6bd2a607acb1452b21b15b71c83c8a22ca78dbe0b1a51b7d381633e14a97da2754d782e426dd92e468ef7f0c78776a73fbeec880e4f7201c55bf103d3499cb8f9c0b72cefe58a1c3fdb93cb94c218fe822e775acdb4d3d50221f8118b78bec47aa9d9d801f367ba32f5dd240919aac3053d26208b869a31e59986d7486b91c2ca7528f8f9255ba0bf81d4666c1c456f64e5e25850b69753898f0738724777fee5f80f7f991554aaf28a536a3289b72b7fd3ccf99ebe260ee9cb3127c162bf83972a2d436aecaf68dd693a80bcbc9440529c020c3e5ea3881ac72255987108ae7805645265364d61cfc2a93139128d992e1024d13b50d1225b15d0fa2619dc3465169cf71873e8551cc8e1630e2dc903aaccbc1f08b19f9395c1e518e27a4b00f999dcc4b92129870f8844ec03752c71aead20190cab85c359b4c7a9b826fc6fcca13e2141812f88f3e08a1091c88a6d4be0262982fa0b964ef70dfce5bd68838e8cf22317d25bcb6fccbab49e63231851d19cc7608eb22283082f870741c78588f27d1944ce4224c44f4a72f2d9309ddee58be16be803c197a03dc879a0321cce00337f0b0172691b0119eff9be056beadd52c8bd144d075d42ce8e1ce669a5a55480f384795ae02b506ee4a932311a7292d26f6ed9a2b5dcb1f38d52d0d17a2a637c571baeb75a50f37ce064682a65f2bc1112a7f70162f85f7a8fdfc6c5ecdd9cacd16417de782cd9f4623cf8703a7c2eb80325dabde810794862e2871561d30396887d0bfdea187886e42517fcdc3452eafb99b9d03bb641f2892743cd662bf97700607380b62df97292abb1f4f87ac43776dac0812b6f84e0cd5b9061e581baaa792f44e70f8204d361f41ef71305aae5b0233e138ccc171c89741e8bda64681621b70ad0f87408da5c430dbd3764c0d217f340759acce98788c1c7f76402c82b1a24ca7066665e828505ef022167d94d2b4c8f60d3944ba035f8324f9a3e75a9328fc97072416c881c6550e15d2888f19a94dc3c925d47073241e95759b8b2242d421e434c513e3422c7ef1c77f89e223dfee271d3c75428f209920ce8be3d159e8a419a7ca9138076db83ddb10e725a449a28b08d4e49df81908d5e04a1838731d2a7cdf04dfe12195a2d20ce0bb71c3b7bb53520df84a2edb19ccdf81f8089ee676be9031a25f123aee8d5ac3174b507075c2d47de5f0140f22c9b367ec448e45fa933f2a2154ebc800d3edd624aa327d049d5774f2bf2204250eea3b5b0ace58b8a2fc3e9e60539aa7847644bf28d0d55574595859794f8ee963330dc44861c0ea765c9afacf1e102ec747c16361f7e0633924749acf129bcaa4f21134fe6d3c7e983648efd1a5e0aaffcb3c0afc60cfd8a162c9a530e76050b62e8435b70ee48e72357e9a3e5dd2061e93c363ebc3ba9c7bb8df338a00b599d22ca93bea384f3500e415ec11dc79ff126d1e59eaaf95008879fb083e9e920d85f6648e7953d44bc1eb63ef98f05180f0493ca87a039f440f67ae4b7c018be2604825361c6f032239664b02dd66b17239d6c46933b7001bc98041cf2de874459098222d98009296f431089864ab435884281f2665b9b67b4acea2727f8bc231a0b7e431b0a7d2767ceef0cadc88149b27c5589057f4047023f8c80e33f3c597231324b328c40ee5bd4d9cc60e66438203075bfe7182898a0a854cd54d541ea144206890008000000003315002030140c884442c15824cd64b5a50f14000b899e4a66481bcab2208851140431c8188408208000008c010019122ae300972980e105bfc80fc4beef5308377d41ad9df011094ed896fbcce01946883efa9f1a717874149268a650bc07884afdb155759cf2eb42ddffcb7e800976d28b10401a47324f6322524fa7f8818607ca0a672cb505989059bcde68a594e29f14bf6755446f2415f10b54892549915d90edea26fc481ac3093562aea1f4fc0dd9dd4b78cfecbb05f89a80d6014a397ffd58baf179b6f6453e1ec1e1a81fdcd96987409e2c1574bf71d31f6ed501eed6aa703093c5b13d870b0f9150a53b64b97df24fc432e61397da553f202226eb0232f73596f3fcbbf224f9c65f182e8c243d9ef2db553a509d9d121a1adc84e6e9533cc347aa07036595d0036262de03a00697193ed766180ba603a631c18b5166b42238941b2d4b4cdad2a4716739c8accef896be34106e8b62a86ded44c220c037e411fec99dab9ae3cebe9368a1735ebc162a870760c0055aef6d3f560282b169980857db877e520f4d96ea6982c98d1e331fba6ca17c14f2e32b3463111f3358a1040e4c8b37c10726ae334481f828fbdc0e9b28ede63a4df3e41e1c9bc9b8dc8f177c24307d1af5b809b439a381e49ac41af7df6a965275fb609db7c32a4c3ca0b550df79a87770aa7a9c9c81cfc99a3730f743b1a815ec46bf463bce7efe41391b64d9f61ec22ae9cb2352bf3363c900816d5507301d23a006e9275591fafd989c47a1e05fe563445aaa41d805b8dbaf76204e66f08678b660e20ad61c7882354a1e3116f68d65be1474c54e824feb6d5d42e7a398c3dc3f1f3b8a14b7a37523a05abc0a6fd184ae5bb2fe4d5671f478f0e3df38ddf97871f1927e8a133a7743e30cff8a3fd23c6bd04e9b4bae7a35738dd8054823cfff3e5b5f06f7139d9baeedf1be24d36d9a45a2cd3d5de2d0909bba51ea7a31baa1213afa5cd229126deed0140b8debf48a06f423d28b8b59a09fc54e512f4760fdd29b52ef0f8b2e0f883ba4bb0f92f140a62c1de3962e7168bb494334f4b9a05b245adca515130dd7e815894e57b48887d64d5aa2a3cf155d14cbede5ae88952ba5b7c98c3ffa5931c0de3d7daf1349f1b453f2f62897516d1f87942d4d8f60b53d710025355993004a7ac79bdc34bcfbfece0903456a63fcc51e3c14c722a57c1c611bc89fadea2978ffebb8ced364aa1dcd587954974343814c5e21900bffbe85aa76f60fab4efd5acff21380fe3764f6435d71fdb2243093fa3092f95720cde5595f7ae975647a7da7cee8d638d3780a275be7eb129a599d71c5aa46713eb35338cc89d9c1b970161ac28b3268e65ba34da085ca532ea4defc62c1f686ef774a119bf02757baa0f75c361cf49467f3e84e4ccf1ffcb611f317776421d6eb4e47fe7355791b73fb5b3b7f7dec4cfe6968b62d3f8212129812b88e73fa3f8673e2d732b95d1c7f56e8643a52cf55c7c3251f6c638492b181d77b34fdff6684b8f88ba693d44fe9fb3f89fa353fe37c5f7a0b6392a1c3e9c52935f9ca4352b7ef199ed1da0cb35c06f44d72ddabfdcb01f2c19165bfd3897f759ed816cd7a11de518ff7df3fc02742b09e25321f8b502b01064d6bd92ff3464e9c3762a7c6e50932fea7598fa3f2ece7f0401c5d20b907af57e74c08d066ffabfef9f6b553427b7ff77a7fd7f505a6e79ee1b456fdd2da193f89efb18ea61b96dc45743ffefdda23d27c695abc4950d4c9e0018a8d9a9ffe839a83d1439f99e98f664dd5533a4e5e8afd1c29bbbb66ec11dfbf582301f9e49566e5cf2ca1f185c7acce95dcc8692999e09a7ff8852f80c1e0b2c2ff87017d99483239e125fffc0806b9d2f81309f6dae7eb59d034b671c7f2a5d9928f192fabce8b32d1f98f1e3c652d34fbdb4830f3759bfa3e8affeaa1d27fe0562711e13353e1c585c24cba0fa0150ddee1a40f7bcdfec6331bf16d261067aec7a7634e80af761b1394a2026ec868d5492c7813851ddf63e2a045f5dc1bac1c5b53429699c74cf4dff35e3d7e6d42680ed96bb7f75ebef83710c0f9c97daafce9d4be100d98ebffb1879f3be625a0bf0281abb2240e99403f6816408ea86fdf6c101d643d9cf1c65b06e9ec6bd1d873328abd7958671b4f7fbd62b0990e797c987b5b4ba0fdbe9d8e0baa62e731e079acf52b542216402350fb248164cc1643d55d158d86e797254578ee8a083cfa439314c4985de2f126861d4bd9d126b74301a12810754366702bc38a5869d48b54f30e43d07b35b1a2b49eef00f21112d0f66095ce511eaba378da6fb2f4469176b29939eb881099445fe0425386406e6b468e368a5b65881a6653df8c55af918e06fc29445d48bdba5f3404882d41b5a549ccd6a5b2d39c38f02e492438f3ae3483bde2c0d145d4ad0d105d0f7acec9372bc3f9a7945cfb6f8a53a19e10a1d0fba9eaef2819c12ef6b5b0dc0a1474d96add882610b1c86628e5e5fe4909932869402fae94fd2f76779ed9448f2331f68355a6a988a7a51990bce21ff14ff31244aa34be870de842c44a7c01675a71d7b10ab3728da2332801e4d95905c19bdff28f6fb4fa946a85c9a9655558fc75e1daf7b11dfd170675a7da84ba4cc294a2100454fe34b23cd8cbbeb08610c8feec83973eb54fd989355aa8b0796f5b8fe78b74d45e36707b2bd30d3b34c20898181e63f3bd2a62c2e891dd3c4ae770dc1239ffa431666657217c599c09a74e9f3a5f88c530712297d8b1709db9af42576ddad239984e3a1b60c9a8d11de8da68320b8a802d2619adcc30017819022eaa28e41a9d9ea72dee00c32cb70e9119a0d6303ea3d90eb691c9fcf3c161ece942071fbdeac56af4c8fe88a4882c45da553030273c4bdb287ee5edb2afb12a973c3bf8495c9e8bd18d707cea6e14dd823484bc7536043c5e2e298e8f4f285b61042fde8788135d08c0ba732d4236b00c3632d28db64449911d9d494644da79172fe55102a97567379c21c255a395f5677f6888374261330451df43be06016e63cacdcc108f07212b175847ba956086c03781cf7bc0cbb21bcd7fcdd432c419b2edbc994fa1d2a734fe56271a5016b360854f4343f7eb33690b82981acd239801e401c9f0ae07a926ce640b474c6d1a5f31b7e32076edd0acfa64c2c6c04f5ebd7efa56eed353dc3e047e2f6db0fdd7eea0a4740aba2880d247f18b49614ff9c0dc72c420c707802ba1fcbc5e73fb507a24fee3ee21e40f194a9d2da7cd34a1fbc7383c053f461bc6e15c7bb11aadff6426c086bc587c644c24caae16ee31ed52633c03a288217728737ee2430907dd219400715b2865e25d78ecc3c754e19ebd163d830a9696619002a4bccbdec1ed3b19deaea4429369355fba1d6ac745ee5da89254a5f54d8b5dd1734ed96fbb5b3305e553376fc43ccf6a06f50204fd83678ce808a5e7e4df6882ca4a0c2c54a0ca24b056676f837c4eb235cbda6f7426861080484906f5194012db4e8eeaa6af3a14b392bc2a6763d74d964763dcfde2dd052b5cd59575821b5e0b76a79fef1316e1e8a17a0c21726309c0fb27d3b94f0fc4d5e3098cd9b92d689b342263ef302527f1bde193a0173ec91311fd99558e4d4ec177c9c92527de9cdc00e135a2ec76d6938fae83528a65429b563aa7dcd150b61da36e51729e0341afe650ec2615da39755d7120f19ada4de432c54615f63c906d749cc3fbfbd5f1f16c26c43ef562e8e0bbe568125ad093476499c963ee7b5d2d693ad70e8f3c69e133c44a0ae44d4f30945957c830ece2d75db25493296b5e3ada9280de09e8fa24fbbaeea682bdc72e7b6ed3c3e7d820e523dadf5054428e259f9af809cc38de9b7926d50a84b06adbb06874fbcdde3bd0d1eecce297080614d6af61d406a8ed0dabb33011e94cd25ee837416a90ca49f840a9cd7d3518d78b3d16e215117cee49f15c4e4e3a151f7a73b2fc56aa8e88b12f46ce72a22701a1b4dfb060ba42c04917b4d5bc0a830c93455ccfc9169001af45fb1391c7f28dcb289e371896297616d768f44f31967681c62b3f2c64688a2a654858929031eb5583c00e323dbb67b835a4b44fa0f5f658e69d7722111b125b08b5d96ae5908ee1f5711eacefaca5e062dcec27db0794eefa3d45bbe8544113e98a709b2c7525b43a65a1346f86879dcc79ed52c96d0a4467937a0a6cf7ec48324a3239e1aa64f17db554baf91337b6277ecdcc25bfb5450702ee1d6dc659edd1b6e9e563b0727c187d2ece9147a3bac3931931485a2d9f20c1527db80c160e426b93f2d165e3a72f4b4c85845717e73af2eefa046d01b7a30e96d299bc1cb3a7b0d6923fa1b0a50aebc8f978e8638971474ecef296aae705719fcf9c381ab392c62d0439ef7a7e336459f88ca73f1675903b60c6c268593925ccaa478e47a68d5401881717fd266fbb4bca8f83eace2df190b08c4211a3f1f484e8667e00ee9af4dc0c7a24a7642e5700e97f3ece78057101b3fbd14b4650ae02812373b52958611dbe65712f17018f9445c51eda8f665bcb3b68b2cda8ee1bb45b63494540f27e41aa5726197ded53662852404cce6385569eeb0cc59b8cc19d7894abb4fc7421a6dc9606bb0aa60b8f5f768359b7fa60d7a2d2bfa3ea625f03907201502a7828b169cf3367f8d466b656aeabaa8b81590b2f3f58c8fd1867e8b37204282b144316b5017b41eae7da7087193383b1369d5bb5fa6c581bc991f5e0b86d83c9f1a095e806de14152d842179beb9b8b4872b2aa74e10c00d3e792d890d2b4443d94b6750adb2ed2ad92a150ca5116f2fbe1b36ec5b6624511ee60d39388276e2b082bac6d20c537443d93bc4e59ab472c3b113b3268f40537429e347b73923e06e42a732805e2b646881d25da03e2ce2cff88c6600c46636a4118608262f7a39665df7a55a54059d2b337bef401867608e7d84b93b01b3c1c2c03fe85607da82b59baa4446899c2642b456b2b3de47fb90a657c7ac1c6a615af1f63185834824da6f7ea831067423d21cb7a7b388a2c41dacfbf76b2d6cb0acc3166d5c7494b83fbf6478bbf1be143a2b4e5e697785fea5f10a5eab144e1329bc4087fcc4af492731141ac3722a5f89427009919325302c514990e63f2f3d6cb901b6ec46e10132b5b95a0f8f83c5dbe1afa0b0fb1ab2024369c55bd7fde94e9c6ffdf917f2e26fecdc24dc756df44b01a5bea2fdf6f3e3b48d89cd2f62e3d58a664abf8dab1c5c5033aaaf66d0f4d49c6b4bb3a7660e072f79d03cb41ea1f7940357d08d4f5445b72de67ce76bfb55352583e8b5eba84255294d3549056482482a4b9e98dec70f194732d478f69c064f4ed30de1faf14382e991cfefe8c5730bfe574996f5f84218a2294d97b134454cb428837fdbb41c21a03d3aed1ef53edd55193dbf12572bb094872056af3e81e630849ccbb26f82cd41174a7f0ce8e8328663d364e01349434acee77c35b69810bb2a0d571ac4896d2fd79b52c2d804817365d9d241063d0374ba354e8dcbc42de0e43383f82079208cb0e15bc740852d4aec2df7bfe5fc956cf28a2de2636fbf660086a2e4a3b71518273a1d5ca30f2e6b0f32df1989e99318a2a4bf082142116f66513e74dc46731736caa3dc92c188897be45aa6bb4a6fc30c04981e989408adf3443b858985e9d5300f2cd2bb227a04a575f36e242898382dbfd2b997b3fb15d9fac566875f787cc45693c4b9b937ba4d892b526a9bd82929bf1a7bee6e820f27ce97dcf79e420eac7e6052472869a6f7f0156c0ecfdf4c54e96174a902f152614361de8bd8434466d9c0586416cb90aa8afd5c126d25216fc096f4199a0cc4527be9eff161c9113b13132a2413ad3c712558da1886eee10137c7796aa35deb4117f37deef56ae5b411f50e3044c53dcad16da477f9fa3386389b9c02899e53f55ed2bd58d8594f32e69b4a5908e647c80b9a19fbca2854fddcf7bd4320e184391746357e021671aaa973cf3e2ea05e4b50303ab90a017c7d0bcc8f0ffce1635d6c18f18f25786bdd17e9c59a5d9c0b8629988dc558a9ac4ed32cf2321f14c9428da85841268cce556091f1a4c361178caf419a144ccc2f6e9daa714c43857b13fb918478028e870247d2ab3b9410931a0acc0f96900cf4db65197c3d3ca7be972169e3eabe1716188ee75d23abe2156aa8999eea1dfaece491fe90c8b75c4732e06cf9f06218aac453480b90cc5d70f7e4ca1d0ca0a6d00d63789c313fde742cf3e9ce3360593adc63bfedf21999e50f3353130c49b20ded7c85060a7c1ffc41f3bab4c8b3cfba8e61133c3728a0c1eb40b517c4a9e2103eaa60a902214a38b0cca58c851ceb2e6cfceea32771a34c1c1c8c14411c4b8fbdfbb5de96417c81e08132c38045138ee46030f21fe2dde97221cc596ca8c337c901ca832c47e08e87ad8cf6358551cf3a2cdf4ceab650a863073729d7c230eb92128ee8abe862f608388d89f659f927ff9b21aaf02702832babbfd92c056f24d28faf13efbc0194576ea610c7870056b995260d28aaa7ed0519e62afb406ed3dc029138be9ce8566e4c8998cfe7cdfd01f152b07be2c009289b01e47c762c1326838cfb621c9a83079d29bc831d2dc63b2c6e1a7263efac8646ea9fd70064e838df821f1945f60604dd241c0418b21391f7bb2bf693894a653786db407027ce0bdc1113a6760ad78640fafe4f04012cdf79418a1e9a9d8236417e57fe7880f1ba398d67a8bf5bb58c97a0e40e2353b3200715d50fc021a0cbec6471a701e36a5c34041ac25bceaf630630088c3aa0340380858b5cab81dfded5c88da51806573690677979bc5b7b2b1c07f553dee028532c7477d62ea7e4359e84f237f4ce35ef8b12fc05d3ae3ed2976beedca8cce410a9b74b56daa097e4f7dce598646fe89a1ca0d89b7888dcb6b2b448779d0c0179c557634476cb0d86e1216337236c75dc5ad0a15d5ef095190b1399fb05570741b031b49f545435caad772bbdba421139d90c4b2ad1cc0837c7b1df4aed2bcfb641fb2ce572f850dd547f5428389fc62e9b2e999dc78ceaefadd65330687fbcf9b319328b402d989baf95f3077c7d17d9c51530b52f6208f75af1fda38e689cb562abfd226287d40bd8e866096ae26d94e515fd4af534d3cf6e67bbc94708709214c084b414f1067555b4a1e25ad97a408bbc8dc1f3f3eabc61a9abea173024e2ef274da5a2b41cbdef5b8ceea169c91f79741a319b92cd6191b42484a67644dd36321f37b65cabc34f242140a0cca0c9e87c54cb500c6dbe8958c053669e112e7926022198c44082410c6f2e2ec3be138ef823686c3405886a0e69556269bb785e7b9b568770583b5be9e8b70fb6b546bde16e45f570595076d799be4afdff37da67d36dab4b008fa0dc52bc5a792d0eccf364c663dd8c305dd252840bfcae12e38594821991ba6640620bc5c565e1563338a3628ad5e0ce77a3ef305f9507f8741cfd1502c4c2bda9a315401f019255ff1c758ff23efb7852b8bcf064f9990541dc4474286e24dfe60041e3ae3b001d8495c197e1803fea0251617b48b5e0e365a0c3ef8e116ce769b0065ed0413f081883b743c938a1c2cb0420c72a5cf2cd827be9e86ec1a46c26f0506154c8334c17bea13a5a48f5688e0f70a0bd38c7a7a8d426659a5aa066b1becacef528fe0e0338e07a678118b4b71f8c3db4d7512395e0eadbd8b0483e6b16d9ae34f8c5ceb579d71bbb29991f3bdea1cdb8eca0aad3f3cc37c32baefb650e83165e495161b8eff848660f45745e9ba566d2812c4a462408291102c401fd27916f070e1ecc5bf90e77dd23a88658db3337d4ac264d0ecd640e4070974b31fcb430441b77c6f54b09847b6c2efd17dd6b1caf4ea9d7e52065fb2671b4f865ce2b16f07b2c65c7110ea153ce171620887693c6ce71468176374beddfc81dd10fd02d16358344a41b4b7021e327dcdc27b86a5923c2acce7e99106572482c7045107375dd345075aeeb2a5d5d4758fb90b891f67e2164810580dd62aeebded97b58c304dbbe5b4af28bd9cdaf88baae4a92334715a4f4bb4732166bc2a0b918088776b4ea5e7417d850974c9b4c79e037daba558ede1904b86a739d21f0371bac420394d765002e49c2fbdc638a575e385e8d82eb2642aa6773b7a364aa1bff90057c5d06f994ed89ae8a1454bdb3ba1b04296d76e86ab77569573ef15abd918dc420ad44bc7c0305a766f4de528918e90b80e2e24d70c84a9e46c1b1c792f95d7bf2c5613f214bb42986b290a7255cb947c7d736d0cec10c1281fc2a9b357a6342072348a6382676880fc9bcc3c77370e14f1c68e8180589177c84698524157ed5d6cf33f20f5847df60f5cb4fac7802570c27e68a4de9f917087f242060fbde5fc1a542134f3a9ddfe0b0de247ed59ea8a0d0426d9a6c4bd89b0680806c838b63dc2a91fb3bc689b837c5a20837d80ce2d8f80bd0757a4c5a77ec37420186082b96eeaa88237bdb8010aa59fb2c50987c47ce6ed1921ecde4c9acdaeeb2e1033924930c1e364a26fc325f658afdb61953a825382ec7606eacfdff6d9a8a0030c5e68ceb1e42352ecc4ff17ca413c123bfb465b435ccd5d50f44baec23f76afa8d867477d4f4a9e892602360500bcaa1001f6906a3dda9c10f16b96b58998a9232b0ebbe0eca832839a08cd70c52fc95cffed36eb1ab1534c4b8578b2fc6731b37d864a81695d3f7208e2f2527631c46bd21afdcd227c22a5d3ae33293ab23232d30eb6792de4c193fcd20e1d067c534dccff5c9e81b2e01317d33eb7bc0280942a88901b3e8c9ad9634f2abae69f9d0716ee121a0ba386e714a8f5389d536dd94cd3d2bbf27c4cb25fb8d7dbc783b855c7e7b74b73c89b8a38cb5b4ee31094ed020be2ab11a974fca1e6870143c46350b84df83269ffc9cd0c1471685d338c9360537afb72a30b4e26c2d6e8d6bc48207b76554cdb854e49ca818fd41e7a2fd7f0999aa25eca57f2db11a2aa52581d2ecb349fa33b06f825bea9e68fb720693df21a34ff57d569885fb334c64ef6216d674fc9e61b24320890c33aeb450b7d738ce42f3f45531935064642c26a1cfb3016caec279d882970f05957bb392f6f5279989a2e3895e895ae9f6fa6beeab62952365fde4a52f7dee5ce6938c3c01f561412ffe3ce8fe9374c155acd71f8b8ffaa9dca7b0723e59439fa86a40ab055f6d90b54d6bdcad9df1e866f1b1fec155211c4d4139c65947d0cbea5ba472696f66b6cec9336dffcc7bbdda9be2205374f72834cce9ac08fd090d47c69a31c51e15384f087b482147edc03d2858021990c99c7a4bd584585b286803518fa0c1f2aee66e279d058639ef9758c6c8f2b36a958685697b53ca30db688bf92507f5979100c2716c82f3ac870218ea9b737bb15f28ffc4180cddf6ff87830a3467df82bf6dc8d9ad893651497fde9d73d30a6a95e5a4b463e14e9dcaccaad12b7f365a1f21a8026e6113b461563d4318eb00f0830e9e770788d74e87e608971e24a8909da33b6e17017f0eba12f2afbc9e84526b1185352a2a57a8171ce63f0c8818829157286c6b0e9b703942067a08aa9bc4a97a1ffa536bd3709d0d2970ffc2548b92f289b9f4e783ac3c8efb03c5354adaf9ca3a0b55097ebea33e67a48ca306c2502cb6474064875e9f647bee6a7294512263dac56dac75f0792d6f2329a9af4e14a0b547e7fa08c28559a409653a9179f4426584d9aef8bc526f7bad533c0e60eb3d40f92059f230cb8e67b9becce2518c7d9ec2c3ab86e38bb0a63b5c2b973e9c03fecec6b448a89075a1844b32753c9e87d2d6221b76ff9a5425db2c6a87491d6bc80578e3d93e8549f906dc5cecf82145ca28ff53074d7467847272ff5540336e32299fdcb714c705eeb72c8d94375b1c3490ce03ee069c34a997b7661dde8a30d85addc79643463700ed5a0352dbd7e855c4cd465a542b486d8c44b8c15c1a85c824e24c2fbce9d6ca39a23e347044773c0cda0cea9be246b3e37a74449dd1d0be2953363bba4739bca83724a047096002fb48dce1f55021a88d659bc03bc048738e5ba6271076191ce81096df17946bbed6d6779b33683457e237875afe7b947b6573ac6fd313d1376559fa47bf686e7ce078ede7b0b9f4ba3d28cbaf97a57678cbd51bb3e3d96617f80c1b3949be527b323911514c74bb4a417c9e1a320393b340560d903205fa66f36443bb65229197672c4914596f3bded0cdcf2b7094755933172a27e728d0571c2af234ec9673b956686c65cbc7fba28388174f5e05134d29fa12a1fe9188cea480f046b544db46afdde475144a219211a6ca8573a53f89d87654feda6214ea4fe81b863b9a8dbc72248523728bcec1480a74a1766426d5ac258ed97078c32b0e9973d0d7612bc84cb0ab8818f76c0350e3c0c7a572f5d0a5bbf718be4d42bb0e8ed2937d39235af515e8fe3b134c08208fc7ae4f6ddc68da5e347fcc1e196d1a6e2692ac850369afaa64b5e82dfef5f603396b1f137ffc52baa58e31d677d634d549b51021b7b43f2dce4d2ba591abfa0090b9249aa461e9929890a607e1bf9964779c64a290328a0d20e563d083ba613c76bb194221964bf9081039cdfc79ce49b3f3fb9b0043aff9afb1d12b4759f4e0a7346ba968e99cf6f0d9837077f3a48518c09c5bef2e565d0e991d57d20f51de838c3907c78b997a9d77bdf263752c9b106721d1276fe34846dc3b6b243246a93a4bc31d6ed6c95140a649c84c70c89dce83e3913b9efa803e1b50899ee4fd636fb908be8dedf645142fb78601fa9f7e7e9e376dd0f108e78853ac02f86a4af2aac5c3280a1f8ab23723caba188963878274f5f0718ae13263bf30e2785ce986822688dabb1e2e8518ca266e8cac20e04048af11043c9b03d1f53611b502629c80bcea5b05bfe9aeb62dd6a69cc377bd8fce263356c7a6a1b6e82d5bc5a8f24c64920a04972dbb26304b4ae6fd65366ed750e933d4566fb4125cef260e261e7b2a7c04797c29438c670318605fc2700bda99c3d1bc6723d148d12fb95cdf46517771bc4374a8768958c5380e6505d6d9e06596da39e27043cad3c8d17c905c464870d275a96e5b736ec20954a9064846a096855ed0c6ee48e840c3cccbcba023a57f31a67ce21b2766f4b22a2284284bfbd8ccbf915e927f4642fa0af1b64d64887a3b83d7aeaba5071de150b0b2d2a37f6e1f945a1af332fe598894a5f1b128f33ac01cec8d0718ceaf019dbc462def901e0d978ead98d1427e8451e759ed9a406a5e79b508064f324e90e9eb0f54ac71d71b3816c5af3791117b4218191cea59249d0df244e57a2993889c1a429b0bc4eb59e765609b12140da16d2210af2da18d18dce082119c29c8620c32958b9ed92a5deca0cdd560d2999200d067b376166ddc8c6a1069102fff7792dc21ef35d47d4505a09d246d780f8cfe95e4b17a0183d3149518a3c9599141c791002b51035eb8413d64d1e15b8436e6071ed0164288000d6dc9d08bb6520ddb4e9373a0625e68232d81bdc50ce93729858bd90af5fe9b4a5f374b4402b3921906b93c549e39fefe9b23cab572ed04a2a35f7688638943c66287ad23e844e8dd60bbcced27bc6b35764a2e5295252b5e3f249eba5fe17f04899e3eedeb5f74a77c89611552914c693dd2867c25c0e180dfc23034563d6926172e8c72f901c0072f1e3a70084c3c6f4025753cbbe75279bbe335e020bcd1a61fb1e4a11d3fac5ea14bde9d0e3ca7c47f83fbb45c298a5518b9b79e1c4cc421f953d3742403559d80dadea3f63aa15ed833ed69f62b5dcd70afb8962e66e73e2d97280915472f5c87aed3d81ff8c5439ce56ffa798ea5d7fa6c552f6f752704eb09e84ee31197c49510bb7f46bf874c03bb1a10cc2e5a8875c99a8002f41281bdfcc0e562a3bacecf995a665a26425e9f237d6749697e9cd6e11f49fbe5cea4d89a50799148cedf9b3c2de9a2d70edd992b43c5377a85b721d0912e6f34584b550e1f6c66d48b5910ebfac05f9926fd4ee971946979ad5892070afc8ff0a6a7597fb802f0a3416609d1da699b24634c53c5ed03a886dc012996af241924565c784540bf5d1eb5c2b8d8b07fa7c77f29cb59c0b1537b6926a8f99ad942419669103293bcd8d31b58d4cc51e5ee86b2a86d37e8d2c1aa0276c37f70c3248a1ff46e90530b1681c44ccdf8f7396e63ce9ab75045d9c679128d3234f0a687ac4944fc4bc302ce34bdb89c26c51e60fa8182b87fbd1b660a3d8cae4c817881492e0d297a4d8aae9dd2b551744dca5f87a2eb5178cd2020a152e79a945f8bc2b876e13f83c25c2d546bdf6cba234242e838b23fafd65607c6fbabadf603116755c8d01025d7a4385ef903124f1cdd3e60f845257db3a25dd374f1f1325dcd10efe36a5269f2a3ae94ecca3a3de11a1611e4a7c2d538552c649dcf3c1be1f713e3433d643a5471858f44ef499077d3dac97166d68b21d761f9ba378c5431b30f2aa5c2574fde4034f505d3aaf020cd07ee3dc635d677cfeb104a96a6d8e7c219d3bfb7537d6a22fe636f404175e5067e3ebc1222a6f5b91091c8599bc0dbc488137acd182ca9205c27a357240ca6663100cdc55fb24ac2af710c8a6abd3044adfba1d51c6088c352d4bcf5c2c2a08c458e14d739091ae2ca19ef9bc703e6d88acbc34f6b73121e534ce4dd027d3bb0539644d3a28ac1f99cedff9ae4f6371cb122bb56a1c850a8a9556bdb97076acddd23135f385c107c47bc580ad8a2f55167cf8a1d2268bf629588fc04710f1ed80794fce70a0683a384e57389dfa44925c8153bc6a25333e4bf896292bbc58daccdbae6026bb499b20ff74b222b293d20b24e41a4517fc4c12905700aca336cf9181518648d9351734ca8d014270c361939a0ce84ba793fb8883c3873ac6d139c737ad1db3a78fc9932ea55ae51d98829678f54608a96b93b97f76b25815bc3174e31ae64f5875b4c5c7207d3e2c8f48f68b9221fbaefc7c603f2c69d28773f62cb18b082e3c918bef4df5282c718fc56f692efb9c4c11b51871018ddb5dd893b4c4972ec17f0f79120307b3f69fc917200f8b2d7eefaa949cec231dab20c056c18516004e0e2ac38cc03623da47c410462899bfcbfde72c224ac93ca1650fb6897fc71f5370686a08164e525e8fc2abb493882f0daffd9612f17fba128e460079786868f110d9efa03890b298c79064086913e0a87393ef4d6506f5036b61b8c8816b81c34c468baccdb565d1f272ea04089cba89b88f957c5e099bd3b71e63134c5a5260b93e445528e91a431e730c512ea91ec85e5fbc694f565f8f9aab48bc1b3338f94d3a8d44c4293449ce5ebc99d5ab97e3199e1c1cdb5a50224a6fab196cd8afb4f21c2d1e6cf5406a24953e65d382aee2bef7c8efa47405f02789e9bf53d3089f0bbe1438cb9dbbc0f6246fb83e34331816f8e09cd6549d9b8d16f185bb14aa0ed272ad7ea9606326aaf591df8c5ce07fc2bd9222f1dfdea4ba11e2b8d4076e7f9cb51e653e1432fd8a411935d80634014f5820131def9c18c4edfd2abeb563065869b712858c9d5e547ea5bc44ffc6f4a937eaa297035b113d501a6dd0f12689818820763ca76ef570ccb5b1a5af836e01cb469361c1085bdbd5d48d24505d6fb1bced507950d10e39daaa2e7e925ecd59e5aa3feb9a3576f4de443342cb51943f32f59ab8d2fb559b231dfd71cc341a7292b706909bf3977ad748945579b6ef40dd386487c089e8c1d3f653bc95736477c6b69c1b503244e723ac1546d9e66c50d58e8f8811700d065013266f09f647a72d4d20d3140235daee190293285adb6ae2bbba04f98f5c28c480e14bd48bbca36b72e2261fcf527d53b107e6b263023a909d2590528e619fca26ec9b45f954b056c61069786f0a124487b72368344626e12c30f48bc0f96c4d818d2f4765508a920e29929436cd635fd238b7036a3d638a46922f04a8ca4b38b063a20720a64301185fddebb22988749e579eb236d5615d175191c2438e28b012bd2cf2ce022e4a1de68dbad0d0dba35b8f541e120021ac60d1b7cd08f45873345ad6d649fcace68ee2e9a3de598d7215b5b3c34d6e6f7471f5a57a90efd11fd0308d33bcc27d361ea1a8455c22457312a86a71eb1c8d6f704f0a80ec7433c8d9d25ed020a065639b0efd2116d029f1e2550498ed13292f6c8e64e33e501933f5327b1393900c8ab06fe658551540e00555d3cb6864ac386e84bf45754dca28cff9b5999ecd74f4831f67cf7af8bd163eff56b5f8f8327b2d3d77ca1ab49d3998ce2ef8f452195baa1a72aed7eee0bed963562d970c52b89effab95f7423b2de6f9f500ce57dbff78b6e38d6fbed138aa1bceff7fe15c6f2d6ad60516404821e593773191274d397c9e07e5be60eaa60155535c7fec015721d024e044fcb8384f1c4f5b328be782a398eb8bbf7bbcbbfabf37d6d38f143778b0c5a0f754224fbd4dcccd77875e3005aaed940b098f540d7df256e20c0b95f36867daeb3098e08352596b7f757049d87db433590e7350da1a92d660ef8b5b1523f025623480e0949dc851aca3daf0b8b7f911dd55a487ef60f32809360d496fd33045ea6914beb683f0fa2ad810860a45bdce60284d08836f22ff47b1fad06f5db9f8f04644a68aadc3e77de950f97ebde2e72af49c5fa8379778e173fc92670b19a27ba097b1ed3835bb949f073036ac534e00898885b54c074ea080b032f771d09d0fb9e620fe2b205125c9860ade613ff16667dd7475aebc1b416d14a78074da30a590c38fe7b9974448f735f2b4784a5f75e2a04e80939bbd7643344d81751379a46ba0d10f7ed1dbeb8a5bd776a4940d232e4192a253e42235af195c808dd49a53a65437a92b41a040815eae86718a4d01cc0d1c5ecf2dad4f8f359828514abbd658f27af3ad580751d078174333b6a4c3f1e6e44efd71afe6fedaa8eb94883f39a833c62684ecb21227a22be576f1c0cea1066fa814b352b41888d08be928b06addda247e5c688d6ed285d08f315224154ded382e9856c78b7cfa1553e06690cf1313d659e6845eee1adbc7ef6909fe8407058357267ca3e3255c6d3423f8eae00e5210adc1fd11ca7f797561984d11321399da7e4c8f7d82097ff61828593f25064c8ab0e698906a89d23ac6af4beccb35bd71eaf32d7f1edb60e1e780300ed561477b3c3cead7298555b33643cb1dbd8d1b22b5cfb6d26f4de7e47aff826a99e246ab49b8d10b1a43ca8472a6c899653c1b261eedc372dcc84f2667dfccd7d965138751d0a067de27fbd03cac362cd3da7da486877f5f570f70a6e0720471ea37d48e3acf96788e3fced6626557915f6a4b0554ae5bb5b57fff651fc449616f88ae5413ab9a5031349b46987095d1cc78edda26660cf8936e8a09734c36867da65f83dc3f20caf1f0d43ba18de4326ffaf346da0dc6ff473115db431f4d77aa4d452b8bf172a0163e32a51aa10ad58aeabc870337759b3b3bd26b471bf807e120d92ff025abfded8455206ff4f5595225e48fe60e744a6d69ab783c2cd82f03c0f25cd5edd95cf1fcaf83c5147b168554be2351b68b8bced08d7ca86de7fb8b221cf500f6050243451ce5e8a4a216401cc63a506c3e499ca331f7e681ac4137d7108149927dde19cdcec1a5527e43c6ab47abde201afb1e560a0b746e1f02d5f5ec1866176e1a14b812fb7d08788f10cce273f56486d6b7a4ea3d194ea5708d648a128a5c430643858d077d5b3bad4b530340bf798043d8de3004059aa52ac6e2396cf337b1726c319616fba2bfc4a5ff97133b9dc0c7e10611c4d0c12bd64a6cb8221966d715f30c4587a4d070cbe058a4703e1fd171d1c160cc1608061a08e88fc08fcdad02baca2921c384eb2eb0b9fd51dea06caeb43d21ff83d16c4bdbec20706fb70c02c34f68b629f6890eca381661ff4380588ad7e13ed1b69eb826684af8e819a7f3579024cf026772ea2fdd2ce8f1710ac32604990c11de3583996cf22f9737f6944fe0134a531ababab0db6d5ae1e774dbbcb970c4c9fe1059d6bd7b5bdd7da839d60a2bfa350f30fa691268c2ff3cf663331f4eaded01b74a14311a9cde2d107fef77c73822c7793b4a63178b43c674fbb0d5a064f6deb1e429e00fb355d09e54dce022190762b6d99dbed99ee1932ab27209a55aac2e62d6b03bc5a44bc2b2df75db36838f9c31d315cb720380937b058288abc4e49bed60131e6b0cc9671931b26b6e5de935698d3fa177245bc32c514394fda46f0d9e30c12e68e739b9bdc1309a2d56d28a116dc6c707a76b307150f0b809dc84f0420a898f30eb126a55bf5ab3367a033a3407ab469df1ac509cf74f25b40bebae4d5bd7a2a9b74257b47ae7e6e013e6b09195e3dac8d963f55a2734095b593e702bc185f83eed2b5acbe496e8df3a2261727b68891ab824b3b46f4b68123f9dc75792154af95a5a10ef44f05cf0d01cb6659796914046f41b56c444b02eed49f1b3dc2095d58e2ec0c26cd925ed080c12b9e26d17246956119e1b49e11df256e727469b3a0b7edf693b52323c4e592f4ad1689d32d96f1fe63b0fc0e00da8c91e20ac35d21a77740ae6899a1933b3a76ddf25bcbf01c5673279a9dca95f96fb664c7552fa48238401be11e1ea589dada70989baed47ae29a32d1fbe7023c962a25464e10ea643316e0a17b60d4fc48d75c68bb0a4fd0d453b5a6fad3d51648e7b3b38f6a1518357a99843dcd05637a52ad7dcc33097b56d9d146a98ef3956ea6574842a87ee7b70135e3d61d6bba779df64c7f13787f763b3d52dae112450228069653224a8196a9ed9bd58ca8a39f5defe463d20b5a5aa71b69a4958ec3d27499b2518c116284f971e8d939140d866fd2b68ebc63f128d17132a243fb410793ac63fb88e80fbe6f34d93b6b79ed0a6ebdf6655f54466e2e86f3e7e69fe61bcd3b664e4aa6e6b4c6edbc9b617cd90faf089763b82446403a069dc7988418bc6649ee3ef548c0ff50ca06439d886801f0a813ef83e7e94d9f546edf5053933ceef079bb783138b52c151c8c49fcdd18019acd1783fbcac46f6dbc009921450f902a0699a8323d0dc6252b84918065a8ea0404be2abd9ea7a15deb3ad81e38e7e060391a3cf8dd672417d12fba190ac563bf167b3cb96738fa7c0601851901ac5afc15974a55212a8bd3cd576730e7c5af719667f9f93daf0218d409b66a3a2a7e6771d3d2694b2356bd427a416b1e384d6e8f7d87e54a6b9d8c6a7fd1af37f30ec1c02273c2f5c5214426b1ed11db6df7e16d10c117c76667a37a8fed7a8fd7336459a7e08a04073e8e5cb5d3d6e33569ab51b9d13dce63ebbaaa15a5b28db20c1a487800ea875a81224b1ce549cff14e3f406f8cd7d9c1ee4612a028585d54e655ae83adf9db699c92a6c4009260bf582ede40ca8b417afbf638eb3c45c76a37b2fc6d277d209937593377ceb3cd1dd30ffea4de50db1b959b9b344d13110be09bfe9ae6b4f798e4ac859d4dca2098b1031fc1abd22dc67b7f0fc5b61b3cc40204dbcc18af56a5cdb8266e66f2fb770f0bb8379de3a90475936207b0d22d0ff327e1bd30373a93f863849c3446608e9c8b6cae1942a4aeba3dab285b9fd6bf9758dd05a65d7d5616f6b245138f58bdea1bd791ce73223ff0588ee84737f987d3536ca2488bcd0968f4b4651b63333fe8d5909246a670d736c0e8f127855aa083d2e93daaa615fd1b56a3e7b974ca8d21f743134e54be762884dd0d899d0f01a1c0009cd2d1108d482b30cadae9f2736bd0a465c7154499c396a18c13231d3dd356e4c0db8027addac032adb0579b0d90b44d16657fa5b2c175e59835e221c1863f7f112792a16aeb019d02561b1f08fdd7ba1f486c47ab389ca52155759044efe8ae08b54c8d8a0b657373bf8eb7e141f1c7066e008ff25ba514ff0b4f6f5d10c6005ed5f208930b3ff6213e8ce0cb4c423c186d7f699d4ee50caa0263a2bbb5ac721bef352144a2c4dd0c67151602b04b5f19230fe47113e38746e6b5bc9bb3ad07aac1b97c6a1960d356db412e1e532ff915b8c5a41c43dd5ea0bfae43580d4813212f243259b57015b73e689236d4c2fd1a7e2f086c67f99379b6a7316e1d8ea6f8f982d44d801a826f8a83a4fb209309349dbb96c02384cd19e38da7781d4dcd44659f9838c7cb616a80087a5515d6abb8eb713b5b242b577900b614f8dfff4a87ccc869bcf40a49514acc9bc4b0824a61d7c6a888e413f5a2212dc8b3621c13ce1cab486c878708dcff2faca9ad059fa4773f19219fe5ce611778257c01e458a9e107aa16ef16a7ef4b545b30ab6d8ada66aa91a8591022e9f83ac11980865d08a74d15028443e2338e3c3bb67223e32bfa548123336776a1a7eeb67ccc418af85e2a8c070f47ab968097a07154600f9f350a6a30f211b74200c3b6c67dab83957d6df17953aec5dcc1f2d5ae34ec74c1e8429a56d53b6d913bfcb2c7e392fb3807a09aec078e0473bf904f0a90eaaa9e89a6e4ea05fa5afce535f6474f7696633e6769c0e819da4b61be908828a7062ae98697c022aa67353c8cf6edd688d6e63f076fb780dd87e066261ea4334030d621b8a099cab6895e7def36562c0b1bce21a42a5acb80c06c8191cae35d0dd7b4a23cd7f5f11cf18f2c656ba4718fa6cdd6c0f6aad8224d9dadd410bab8eac5ac94d9bca60786f8622c2ed5c466c799f0e39f414b4a97a066d15b417554b2e7ed26d2bd840ac34cfe4c962c1f498dc7f6515a2328fca7052d1b33a02916a7354afb8d2c7fd45741e36b3e5d18850b433cc44ff83ccc0b6120c4b3dcc9e522a4540c89e2f03ceabd7c990a2e8f25afbad0bae9b39785e6fa3119591434dde2e5637836c9976b3dd338c56c3f4a7fc505091ed0c9a6f25ac0974b8b9027f96fd9c64e356ec2462433efa5b528d1a2bd503752961ec6601e8d678aeed618092cdf48ad8c42a1b0db29ea6eb71e93eee90885e3c85cdc77c4fc0d840880660368b26b6625976d33a0418e608982b34725d6e93d70dd52edc658e106bb6a7b7bb275f1f2b72234ba48ca164f71defef781d21a901813ba695ea4ef51b67c1a78dde10e2b65d8600023bc8ff9dc027ea50059b3348ed2d363502e586ed48e4278d0a90295c48202e2b799a6fdd5933a98e8f8ba86d1f62f41227076168638d4aeb103a8b258e873ebe052eedabce0a0698831b78083e3cab943379303b1c45ce206de8865e3af7187035008ccbf324f3d730a9357c1c735ffae169b8ce8a0740b2905b7814e034a5889e1541f065310c64fd1496bf5563cd16cde41ff40cc433d00f4cd9390346b8ddee7ddcaee2337d63613f3bd218b27b798298ecb85cd7b32840ffdc0034c157bc40e9c99bf17362d84b7d0a812bc893bf12bb755d89dbb8102076f45f7f662f21b29673eed0d6b9b2b8b6a1d575d5d7085ed01d311723d70416960a534711bc1938d46d6c700e88712d35ad4f4dc1fd0734044dca84c151f4ea12a5829b47e2f855032a64312bff1966aa3eb16c068646055cd618acae70fcb61e3d3934684ea11c13dc0f90d9a190490d0a7b16c9eb755ca92ba5eeb7650fbcea9e004f1d6dda91b79eaaa490f0cf253b1268922b03f5702ab22bfbc61f1331d918c5470ec0845b8b68f8b4f221c88439dc5c076ed6fc070c26e0b75c28d08065ede5e352628516ae25ee577841ef5d014a0c00375ce0d12393161b6b319dcb7f0dce1235ca64ae41c5fc518da422fda8202ab7264a2297ca5369586f3b7518ea5746ee90800101b70ba898a0c79dd21065c8cdba582d2800b0801be8f9ba7ac3ae389b980ef9d23d2204c927eb1c620b38f59d8c54de96a5ab18328d1f0acc1b02bd3d001bfdda2c9520cbba85e0ff2f007f1a2131855d9c089f1620aeed73be694a40bbc17c32d2a0fc01800dac5d11ca66f5349b3686cc7f2d22f610c463964f15aa5d499188c73e5ad44401a79531f125c88883cad6a29a0d90080076963517d8e550cc454e1c2a0ed15c489677cc049e2b2918b9b2fb0003c730fef707b7d40c2189b3f2a16edecf9fa2283060430af43018430af948de18f67671ac65340467ff1ecf59989e4d098c29592443931fc0fb0e9170c4902356758c6707686c3c33cb314163233bcc35e4d628587381df8d5903ec72d250cfbe412930f3d4e1a6e5f54649a4a28335e8b7f468a9739b91bfe980a353b9a60d054ea8ab37fc6981946eef58dfe732e1afb89a9c6e15727adceb2087269661ae0cbdeb0d71a0a86ce19caec6bb48131f44c7c92b9f239855b53e91744ec74e3f7608fb3c3340ef5b286fc2e63a2d2b2cdf7b2dd530505ec33056992ab1b8dee6be4a1c8ed6316918855840c00ee6b84d8284a3f34a9e1fa8738a213ddb03fc6f321b363bda03748de50a558964df0ef5bc1bbd4eb728a3667f1c11a7503c5b002e7c1a8d4f204fde8bbc28d55ae8648ba83a350e8e19e499814761534b087de00a191d9cb5e4c0adf80bd31ed8ee4253847b6d575f886fa3983603a6164916dea65ac694ca8dcb0af15eff70dd587878c077991243af8cb5da3e6bf61af5d621850b825208db8e87cb93dcb5d9e8103f0ae817d3a483484c3ebedaf564be2708d2eb00907c199801ebbe2001ea92492231988b560e5cd38a40f0694d228dfab000cf0d8e3a0b3c8a147e456bd2807c01be89982e540d74b4001e6501bf9295d7ae912048aefc79fc415fd07f503a6e5c22dcd459459e7db8d1b2ab60e10e489da4571c6c8879436da513a1622b265ef25cdfb2e54c90f7fb03485d4030aacdd40fcae0a9b30be65e5ba5ac281d86e1447a22838a38bed52bbf9f7f81788c0dee7da357ccb60edffe9253222c6c17a2d0bcb4f47886fb977ff29a37d4610d069f55dc8e7cb32e1a805c58c5cb6959a0b518a82ad7b8eba2574ba5ba6cb289fbc566e17230a9de2862b599b9de5a53d7016ae11afaec4e16f2773caaf20f5c1f7b5b84f15cd5860e665088e7dd6cff1ad22eca6d096e3fda5b49038e86ad6425e1b5550b7697e3ed1ce534083849ec8282ba1f05fc8a1b1700286540a817d237ae50fad6e723d8e7c26dfea12ccbc378396ca90b0b4b548fee9b604a07bc44c2dbf03ae4103a00c1998bc8e91a22149096643dabb74c321c157b11916c2abfdf7bc24ac53e99269855e74b119e1f2b774e19c2144e703dd04f964d06bc691836a47cdd017678c82228cf2e937871f94d4fb1c4a744836752c316c95a753016a95462ae2358658b2e5b53b40010e319b5df9029aa29721322523ee942d09edb6b61d4d798f119f3583b9e49489dd38853dbbabe9320a6e8a16a615d97130acdcb0f55cc2da767cfd545fa9132b5a799595fa91ca94341819f9e95b42332fd0029a52a5858556b0749839d0a67f67fb3f996313bf7d9ed338865808f2cb621c1f396494f275596a72d63a00ef9a5ddb2530cf9bf1df64b076865521b58954359b7667c170e2f9636f765a8d06ba2f502797d8acc4b72f6a5edabe0f0d0a819b97221bc8d7c83868062cf180e3b0fdb7d9a747d5f4be9e7c2020a8059311413d0f38d519716a87758616875f2c3f7d76cdb823d79266400ba8f6457431b41b6b00fca8dffb238ef14ceed4cd264c6d91a046200f72e68b295cdf32660026b441b9b9d00421357fc47f23811086c64991e51092af3eace582e801271393e581f62e6d9b1e18160afb5954854db85bcd1e16538c1490da29512192657ede93c9899043edad554b4ba8de82c8a15ad3424e448259bbb1c10276faf2ff8074ddfd166e07e1cc780995e619b7605eb0996926818e4abb90bd453e34a07aa94716a0280054992344400424f4062ef0089b1e4410688ed201700d324fc77a0220a92a063e289307b8e0e4a139c4e41ef627644bd26f2937e2e5263bed4d24d5d4faadbb3ba8b788145cca961a53846848f559b7ffc996323824fc1a771c622cf9438980604e4c0b4054b3002593e8155b82a0733e38d3619d99930b922c31113092a92f654d19bc3a3307403e68252e3c28171c44b7c5864f4c0aff4246923d803a598dd3498a7a9a3960da443b2573e8aba180a2f1e260e6e0e8c6c497a4a08eb08c4c22ace8a148f88453020b7a50285a7b628788809a7916f8a2cb828314531209851269d205bdf2b22686c6802be80a96364dcb6500cd71096b3602e20e5521cf0f1d223e077446bac0754e6450ce287c286992b04ec7e605475dd7e7a3953ab812339285003ac5c882aeaa83387309054fd014aa489a50b820ea1cf5c0c1ec31449c588dee09ed72048a2ab20a61caa0010c3d3343d1d492684bcc868303746afe30c917c4d00296c410e3e0832de6155554c522813d31bf6012414614303e330542329cbc6c604367b1b8721a400ace84e2c7d58c18bfa03b528ad135018a41cb9059d312183d50073c50d4e910c70cad8056884279626a1ee10428b6c09e05a606c2c21cc30a9d20a8e132b5c49069ae59e22486cf049977c80c73822a6c66083940512f52e03293544aa273020347f140aae17429843ab128651dea838b245408232433704c2511b302c1cd49d36642ad10434d3789c80bb3ce9b4d9d182f1aa6122fc964c280728e70c30c530f014fb388115968a7441d2ae6aaab8b53800d73919e4853063970a81f2e143a1eb078984c18a0dd0c2954984e50f1a47b54c01a8a440aabf353098be220863f65b14476573ec870524426109da28a49dd9d9e898e5d0a3d719185230ac21001740dd00f26048fe04c3c946cd07056630af223878261da604ea044062d9b40423dd831e7261b320d62822e2696066fe61738fc998722b1d0bd100620ea064e58e705944c732779a0eb41ce5009ac2ee83ec0b22936793c3de1d00410dd140e3062282ca94d2b7890127394c40dc593e309271e96a89d8d225470a2b306cb1cb1dcd0153c36138e1587a8bd08d02b4c4f74fb0003c51404035452961028901ad91930b332b164e0684661d2c28c734102130317d6ccd291aceb61842af4ce162be8a14096a81287609885ae02a0523218638dc2c8e97210b19d6d8c1aa8087c4c70da22060d28212f97624dd07000b522a54a2c0f91443401d1524262a2985227f088e5a9f1c25421ccd0ec42270cfa85a2ad18176f10a0338018278f4b4550026030a19b801aa08d906840a17062892e30c3123348211fd381335ad04b29ac9925117d68adb2e93c08d49d701df8a17d0225118be24bec04082246f580b8ae46a38a21e901a81b6305aa63a2c80d5aa91a88edd18105f5a1043adda4121ca08c9c5862c6f9c2c62c7fa03285b032874230a501aa29cf9af9a70a3216e5a53009e1d0846631f250295994babea3ce74628f081377840c9a2457640e411285cee140c6d30262d4e9c41411a4fbe0e64017e55be2a989075f741aeca02263d21e31dd115254a081aac0cc227cc458058b7ea07c66b810cb7191683ac243e6d78d391393d5d394c486ce27ca329d1f13a8a61b303266171e58d116f870d06dd0e4081d628715a8134c69a6a50ec6d97542031410a21c5d589f1c3a198e0888d51a4dd15907c0274ee8766378151013a2e44eb7c4ce96a1b560c5822870e6898d177d280d4d60a27ba2d03083e0522746c7cb0af34f201c681a323cd0ae9b98097581120ae7cd17b4910471e698375d1d105f4d502432302106a406226aa3094eb9baaa68148d04755ac1ca04b1c0422130944537c0045a381102a1067a038d3e4e3f30da43a708b72e6a8d970e488d129e48784031303b611d1d4879a8539c321d130b30d19b0819c46cb04364a6a180a442287199689c00987846192620b02331297974a04f09d04005a845cc3953aca160e4d0a6a18f7782e04c40655059120bd464053ac0195987e9a908ba840d5c744e923514093a959c6258015197554307195d12ece804482217bba007055d9a3c240d810f9f095aa001bd62030b4ac58facce0e0a28505288571702980c6a280ab06e06015d5023039494070f08cc3d0e8c312188b402b552c07404049a9a363008a293a2489c5b8f18e8e8c0018182751ec4867052038562c4164f9c833186154302b111745489e1b00f5d0e8bde7479891fa706182d8a6921b364e8f1228c6964842bbaa9c6c45403066ace1266500016ed40496872c32c22c30934054478ce10450a31708b36130722ca6e88216ccc1f9c2043312882290a954ca704ee0bca022330a82d0ed6948a5214abd2496a898603e85612483a2299669d0147cc68211d3a9eacb61cd14d0c8c79e252c214aa8905283a1ea3608e40280aedc00b0b261778dac412f120d214ac50d2498ae06b7621a98bae8620bca070c8479de826ce0c6455019592c46ad6d1b2aed1a131938614cecc21a38d760d06c5340083004a848e96f9419c2de80c03624e751c3d317bd08962546480743468d0a6fb219111730c2c7206ff51d53539320605a465cf2e90b844f3dc49f4043d3850da0b565025c6648a316aa1cdc4e1ccd55c44e7890a91c88902e95c335013aa98068eb4e6075b933a09324042ff402165423112468f20d1440c8c2981a893204c500434e1ae8718a50e0a1918f4893857c4bc10b2a903008b2233027999805a4081064e605889b1257660e8eecc28347713863a1b071650150a0883b631c28a5a11f0a7d372658299848b4c1741062dcca7258dba1c5f66260352a0100b6708a359a048e93a244254ce911eb101c618d5a10450c7830f375383363466932c4a62629618812ad103aadbe08c014e5e8a7e7401682a67ec10e14e77a49679aa5ae10fd5e188309c2ad4a529e0806182694a9822e0b14197dc40d2387946a00f6cc08302d1a58a2ee761813e31228c8e8e12ae9929860ce6033684514858babaf985a437436a2603502e50374f45a7a8ba432b0121d22b884ad788851a64607ae1d014144600a707a460119332498358201f42e8a11e439e04d0919b2144a19101d6c014aa01d8544c8a0a6034881018d1266254d027407c880d2a218789c00509c4280956d0365c115005e03831694c10fd002c8b66a1e3449704d11d2a478a0566044d2cd11a4746982e18faa23f9ca0754a5472a07b934026da42d49239881024a73154704049d0a004272eaa72a08a70f427441050a13260257aa2028811e6145ee8105381d60135a344a2d9084bcf8c6d3431475261f48b8b0c73d2073ca60c2268514c691cd1284c4cd1318890620e91e78399021638d0292e3ca81d238be811937233ca0922b48a1d608861198105bd02091f27474e30a15c66f0f324f341888ab1138213a1304c3a24b0a04f5422c04411189425265e19e628a40d65c44014744e0d40b10d6e5cd169e40ecd62f5c2e4d2b3448cd20154f3d00d7e28a33e7f6617988b8d3dc24c168208e91890a403fd6660510f9e7298003c9e38098ea03bdc4411f33181a6180584b4c42ea872825e4083224349184bcc203e80e324401dda7420d2d493108590503178e08a4591c70635e1012a9d8e2a3e261d191ac536055a60d6e8e205c580c99ec96580076289e014a253c83688713e34280d5fe4898da0c248e570396162f0e689e6b19328165bc2d06c83418d826027c96c4413835a9103881899061a3d09f0e54055583481938c58213a4228c7898227199d9d46389eee92b0bb5d71e24906698ad9634ba66070e1c0fc41aa4f6c859cc44462d7622e50ba4135e0404b87e5870528d8163d5d146bfc501cee2899505562936ae64d325ae0995c680012cbb240c79c3155003d8240147d22843a3309285ddd23427c627b1208b1194e52ccf800889619c648142736d80ced93c412a71a16904441d8c3e689093c2e4c8e438c29252b075ac9093a5d1a1a8ed02e9a886166ea13a361068833031e10cd2b523dc46a2bf4997696b83259a8c1c5dc23008d6e4c00343a488234f4890d03d3cdd596a9009817cd24758802d004084a431006646489a4450f58832816c49fdccc804fa3276d820ab118233d3342d8818458181b08510d76a20980004d625f3c6c403178f3048d6286450b9588ba06b42a4da8388f62015c3a60cac913763a30029b5ff06810d31574511b422d682e8285f260e206457285d6fca0cb84d8046f6ea0101c5a12abe086afeb382e9863d008d4e914c6e894c02ed0262e51ea6060206b5681c947cc02486f6232fe50a16354f843b5389266ced0029c5fe06deec085d22d3fc4581c2335d00ffe08e93c4759cc3d84d6c4701d01e80f145e985c443244c1807066dad051938b452bcc4b4dc050ccc59b58105d6114cd0a6ce8032354a284f8c889e124933e70c503c5dd3075384210e33493e3755ee69ce014818c036816022811b320901513901731748bc236539460063d436809dd6a221225421b633ee0636b42f1762657933f5d94a74a53ca05547416ec408902a18516e3628118a8173be2c4c6b8f185ca098287980f8f8ca04c740e621d942a4c48742e700a9209774a9e90d0203ac0ea2a9561349bcc21d331c0841527201265a181b89c202381237f2699a72186c70cd4c42ad215eb88dc982818f98af5357a68a3152875520b60a14f2050d5d9290151217c38a137f0d0845e0952687e114620ca411b347412261e14000cb674399848a28b48e031102e5d89bd50a516cbd139807a81bec87803c11494072d448871a1a5d679694c4f64c234407580323b40971ea06ebacc40358129302988a18219450853f404210ac58af06102ea05222d6244740a33026f816e042eb6a604492a758c26f8a2594d42983b24b193af8113239d289924243aa28bc12a87b9c90e118b0ac046b3e0a3a9c36080db9d1085a48e890388a075e23471a2f3c58a2ed11f3731ab0f817e0d79131b745361e6c1824e87c1000c50197ba0c4e2ccb0c20c810f12dd0b5b24d11e2f504065d4a9730a2e7168039434a04c88c1342500c3c4cc0009339d0c466868d71896628f14a19962f82c7623735a8ba2c59a302145ec811f5013030db2a045a831e1498a2b8274557c27ccc8b3410a9d0532b0e870e49eba81c2e5c9000bf0ec62814e185e086720382d5017b220a03bf8f928003caad09b0a5031150690617e3e5030676ce9a209d4067558300a42b3e86222c602b662e66420d4e990b74c4c791ecd365d8c7488970bd4878e5927030861b1415012c47a1439f434e260412c0a990a64ec7083a918390827454ccce8c83355323a20628bc907f422e6e7e665ee9800c73c3061816986062afa44202034042acae9000f44e8569611e6931daa796493121d23385ee608543bd032529d9da22e33c857177ac1984d140a0e080a40eecfe4324315b594660c4adb693a24020ce0a445d096a9a53eea324190c2c4808714640072644127441d3c33e800da8046c0254b07c2063f4c3e08f840afe63c9a2570159954bc08312da117ba4a4f44a13740492286830aa2605230741e54c94277e812693221c0118d7224109573c583be01c08918047d8899c52013ba7e858d0e013d2e38fd4061031a850b9b5905101766a21b48c83860092cba46538b64d82d721704f8c68906301da817268126129aa8a09511902e0b237da80e5990dd9734358ac7268b3509824663f0638876991488721121522a2675406b6d2c882111e6450188e13a30c21098556ab844c128c260525220500c8b2f5f5017369ba759e564e2612463860eee033d61121527494dc84069053b28aeca48adf811458623455ecc4653baba34612c85148b51295060601a5a605207950549a358e1ba126a988042b9fa79011819da07939e90263541b3a89443ac471548504d68a4a08dbc2c66034e60e7031895e8d866c7fc028b07b40b92d8292044a5d86cd012dd0c8aa00e500e6e9cd06821c5c462a610f36c30ea968cb126469b48826ad1c3191a29b7842e61214d97c393401408373eba304c486232a002122a0ee1633a816016f3800e09b4caad50c7c60921530a801c9d1605844103d8e12586c40655d03e7ca268057cc2985b74a0680702d0ce2a8a484f79303dd05930a4ebe90e153894848dd55181e7698ef003a5d8065534a11aec2334052459e603356a88513d1f7dd4019e98a3af0cf53080d279d0752996158d21ba6368b6d1f223a6a3843c748a27368821f1421ada8863c51af841c97ca253670904cd2424449c8e052073268f1f4215b003850afa22cfd30659a0d05db121d11325141e883d81456dfa60840d738b0bb23cf1511224c6644679b2e283192604161c40a1b08ca80a2a40a21d4060877ad167d214028ccc7c32688c99654f00d409157ee87c3071677e245840913880803904539cee8704a0ccee04a229a78720aa08083ef3061905b44c071674b7300ccd475a11743aaab088cd7981cfd3904c4dcc1f6e7889a9d974652a89d3f554088890a6f0758b6501f314e10b828e6b0c2c940e153db12318303445e81a61fa08c0017a4414398990e185c6369514e70d9a460a719961236840c91e1ecc2bbab0310361893489ad8709c657163126a658d11f7c6c8c119d4cdd10351d9cb0fca8328df0a1829307061cd141d91562920a01e9c260f966786944a35845d889c9a805407d0833622209e1048a5390cd269ea86172f1a44f3e4a10983ec85ca1317c91050d8206489fe84b1389094f3a1f3aa041c74d453a118090a233a82e88cd98a8740e9a1aba591791766dd93261c83eba1c5698ba2f0570d0b1f942cb490709b674823ce042060b4d5ea0950ef978aa3343d71d8a44c3e98b0db8a0683a233102aaa8940b021aba401bd19c40851be808b83a34cf163cdd8f2a4a9307255793081f0f4c4a5c8cf4b3c28509012420625bb2b268183318ba444750990a20f1670ad203855ed241c0ac63fbd33981193869c934a50b418ae6b4e8820a3a0f681a3c711e30a055fc2c208301b01e66126baa98826478339df8828ae9054c022ac981285d0482dcccd908df75c045a90d770a3d010d097387261f502190929855749a98154050882260c9eb0049d0c3a4b20130691c0c996260f14217648c43338a23f29c01c8852e8b0bc68c291b3edab73c71ead263062ac882927230c4111d0d8ce94989992bba08b6b479ba51c107540e0f216d818e17538327343a08ac5c312171b1893d12c383760562144334a706ba75050e94ac73c05434d6d8b8c01273c80b5e5d2115e2cc18aeec30fb025828981954ba0c561832b130a10c3562834e5704211d32b4003404c57cac3c8d3828a23a80f164c61b04e874b4469f66284083e6b258e0a99106341bcd6082328ad34519e0f2044d734495d988cb0fb1373f3a0a0281a392b6809a0b4050c4d4220218cdaa730495834213734a0b093a283bbca03eb49920b6b5410eaad5a5cbdc0fe0e6135e41ba274988e8f29d2d4e341afec464885043a7a64601b12db31a32dcfcc98022f10014b48b024a37bbadd0a1c02d6dd4688b980988d450292460626630810d9a6302413115ae80d48ca12f280e79169878c032756ebe1aa03f281001ada08d16738c1a1451110e5842b124c5623d2ae19960faa0a13e70a652622288498104a478831b3a2bdcd8680372742c0a91848e88186ac47e8862a1d3828a04dd2610f2747f9a604d4ddc0a6a41969c98127beed014a69e88f9e942675e9113d68590070c8a4090ad6ed3123634823d886e59b301c562811b14813e60a648f39a314597e6251078cc1c630c348d0deb6c1e34343606ef1838020c6d000549310d2818d209710586a749377ed03b5684c8a89020d13d5060c5b660f50e844718c4420062c7b4a46d743a0478a233b84133270c2850103e602296c50034fa410a7372513d340331703a284fa2983ed816d1114210a90f26e6d02f4c436f61d85024173c411fe1b6e8305de1431900b3437930c142e16ca1f434a38c47bf00004c861b4358744e52d87a8aa080369389a0194e1fe47000fd836386180f539d6690c39f980cb918a6043b78e86e49650e818213538a23349852c4904d2c0f24311155ca93c9d712faa583936e51231e54862e3c0a82150ca6050524100be0db34bfc813c0ac22032c3a04d59d186d935347a507474f001cd9327303b889357a053a291468d092060e9d1d02c8271062e0a0f33878d2e1183599767a14a15220112a04ff9873b2c4a166f060eac24843a91749c474b62994281794b4745c1a20416f03364c3753ac289a2628a042a0ec408b5821419d640089f628c3e61f2b27745adae472884927862003ba169ec0b12919519cb836d0a27392c0cf934dd7e840806485d3e66108da0106516281708882fa98c1d21c2266a4767e8411eb71450f94c7082cc44cd00207756292039d9a5ac23c23a39c8c16c033a1fcdc282513488a8507010dedb0404fd87c4a6120098a03a0ab98942034a040c41123a6061114b1ef31755b6abca0960a2a9c0828a1856e44c0d28c1e66a8a1b342c989272848fc745f15adb383848809c61372ba31560043e94891004d03260ccdf405efb07c8be6094fa2623f406044b1e4e0a87b43800c7a5748439f766832b1788363a6a9f4c4ec12b6c0346329d1ec72298298a54b94e8a12f425d9d23b6d0256854758636e1a0583e12c9d0912846997880f574880d0254d00836034a8f1e628342c8210397e30b5a430094a60084c4985a1c4541e934513497f062c1dc71a4a8d50153e6099ccc4c6006da51d2c3644230c8d234a2043c949688c7c4e167d0a41a12685e414b82eef1c0516c9203926898da8dee861fc266179489931136a8d081609698814203b31313c39a2e4cd3919944120fbaf18824681a000e755810e5982378545d01526ba6131300d00d69e108cdc4438c494b9032f50d01623438a54d64f0446c53a240938748184c30583d4c3525b4e9e66cd0d4c1823f13d20a4266083340ea662f439530620aed7204848e6a894d3222f04c9816602a2106b6e3107d24431332a8e8004527a5508dee062112ba2335249eec1412d06b084a67e5c66c7e8d0874881e85512e44c81143a20616d41192720a2a630545f34010dd097d099a04d4a459e9872bd30b2f9488cd2c2aa02c344027a41a5c50db0e3fe88e2f21280ba009938bae1a3a201cf1908166050aba7945022728974737842b09273130804243c8e148cc470f14503e4dc8746d1c85408150724385d0a0097a83119499490c3e935114b2f9e5648beec9008a8ecf0e9126177080882500c20bf3ea4f93980dc8142dc1021e9d0d18decc2f517a2616541a98618a30d13b43a4992924a0658ee068cfcc0911a4738289998ed211519c848804885281e2418705d00cb104c0ac53016114514c7bfa4c4a4a36bd824a099d240db0d026364189614900016df4c10994c816338a03ea89eeeb4a389d388880f690c308b4f4da110b57a8cdcc6541cc8900a09868440d66124129cc1a57a2e8156008a25f78e8ea98e0f38806c1a4018a57088b5950051c0a8016556256d4686a89030a3a8e020a9d9f98d42482082e1960804ccd2a831a4d4a77be59e38b9c980144d830bd0cf04247204283162a74402c8c1efecc2d93c8d0a8aa30d40a23b2a6110d70513374b2a8102a304d20044499543032613e92e2428cc99a4873132544d910898012e187074dd34394d8944a28c44e30b441ec043e62d0ac808dca3485d199118443c7445606311a79b068e907114d22882ba81229be68103489a816616ad3024645cc299688a1a321648b39eba106cde150253a1a60a9039304d8a4012c7713d4112902709ec488e079827e5eb458569c2d6ac326630ea2237663fe844f55ac10e96450ba13ab724015b504044b0c021f22751c58f22203033c3750b2c6069da536543403b00b680f6174999314dd40b72225940e4d86d812505c4d4886c07453634e982ae41c6b416b8b49c4ed4947dea99a818ccc99994ab042bf8837269c3b834a815243b540e943c98c62625f9c9a50293d819cc2801540715fc213171cf4ce032b62ec0600b6880189c2e3098e0d255df541418cc433c0bc0aa24facccf1359b14e086b29085139a42d643b714153115d1d8ea34e920c524c28899ee520900b536388a050132a390b430805671429739410f64a8350206ea25a3838e8513aad03744c8995d1acd623ba6b8398df4110591d8920124a44127b8810f4d224ced0ca820ec68581c75086cb12343841c0651182c2061161283014ae5d00c143b206426a912454be8434e394bd4889d991100e5600820a80b89a24c442e20a2790ba109e7842b2818485f730f0b10c4b25c5d31638021773f3a9034fbf029660a58a268001a44eaacd408e912d1594325d8c2a7b392f444c6a100987433a6fc70ba41a7091a47caa3e982960ff4424024f6684aa79756764ea036cd1c14a04d1c0e7ca80834e4c49c6823014502ac8bd80e51e0e80f2e6b6229149a62f6b823cc4a30c8a6153000ea30f0c001fac68c1614cb005c4c1a4f396619d2050ac6048a62e1a146b11dbaa6a730ac40804a7108898e010938bd83c80827388596a05c091ba71b41fad01218a5107304850d3582cbc576583f540d128962606f02a05b7ce1d08db1f26016e08154e7054a1faa429610621cd4f494c206203a394c024d06a438a071a4d0615ec0c7ab9312688929c6871a5a5260885ac2828a317100035d8e0a9a70d202832a3a3f237cd11d7264440c87000274606878d024087c4e57f422daa30ad1f1906288bec0c4a518932eaa89e38a2f4aa9d4a26a6c63624f288154c70c5d628f2c199a2b24f262f69855a11ffcb9346550449a617cd0434780e660863542d3ce941c9d8530a79351e3d141f0553de55a708102a184ecc95ae1a1cb22c741ec020884983e9091666499755a40980e4f5c4fe34463b398512a484d2d759eba02ee8c994328a163757270e8a22a86e8945488c6206551f74548015a8701309a67853c5446934db3825dc50ca30a4d9d0dab18e8264a5d744366128ae3864c9d25459362042c29d4396102011d032468d0f580a3a5e382845127f581938e48982d6252c8347560605c79ba42823c4b4755b1333f38989164e88a89b93568153a4a27c40c5b66161e1e7554aa0833c11c1212d3811d98623c4dd0c91152c12c64c4a1d8055d4f50333938e8740f60e8a3a902ba2abcfc985f1822e9103f7d3a15b820e404c66275442861837e31c60f4a411c0d9c2045d982eaa922432c5309569d008fc2900147501c8ae8cc0913841c61d018a549312a4d9040b1b236d1113c296a8337c4b481d29359e70a39b14218d4e61038a0623a44494181700d117b210632544e152f1a02067ba61673e2c4b080020e050bbd88c1a0670b6a430c620f58404107040c5d6650f013744546269da64c47503d5b31c41439016012f1e5e8c990222934108f22b102f05c402359b244a534a262e2991130431a732291860e9d610f9959a90d03b4ea0208660f666a5015a626aa801352667e648502228182ce052b2a144d0d3f31353a4899524e086342d1800f5d158da843a2861f680643f4195f1eef089861cae90a1e023a4c336a705a408745936b825b0785909e99c9460d74ce949c4909cd08540c1199d6aeaed0215100984936414d21e8c8a60938784099dcc0421930808c757943cc0610486156d1459832ba20e90ec020ce0c430da0899340a42070d9447f08c1d30570c450a7094cd70da1a101191904a16374e8e4f0248b21088ac58649b1219e6cc4c08ed89e064561004d030749d7c4974534cb0573da4832c0c482da39448d1ab3cf1619743b9094a18854f8200686166b669e0822e89650f334a7117dda40811265c10b1c281580a8a81429d0288ddc159a24c7a74b120118740a8421622ac47c985d965ca19812400f6121c2e98529b9fbf1e406271d84c0d0d90ab020f6059c03e6190d64501d539ca00d8459d396a5d310621fc492e80267021155c6ba80310455c287217486466c28b80417b1344d9eceb844631ad1410a1aa96a4bf7e3092f261a488a6265e63c4035024c261878b4a8112d79622d384045b70527f584000d452800616ce9d218c0d5450a25c52c2ed31bee38716af403125452d411340ca931f4235467111c50734e0c87e6170d85e803017c75540bf499760811a11c34008496790f260e903aa0537ab0a003740307330c2128e87c9056930ead87a983a1076696d3940e1c03057ac3011c6260bca5ae870cb84b828e9d6e919a2b9efec47c502b7c08e124c3974c534d0e63238e47544e1b3e33c90f8e660d4002e8c226d4cc1f3cd8d261e1c19889a6091cba30a898425b805a34b13a7832d1c40675232011e9076090e920b8257d72d465324934874a2042a6ae910c6ea8076c70a08b08e831bfc051c609d01c17ba2b6011c4d070b203a385ec24400d5828145635620ab069814291e2c4a988a047535024b02e872971e60d2bba981444444c474c3a88b160c3154d628b24ba41b46e4a5028528c8f11d98c243585f67854c0d4d4240d3da2041d7303316c2819db60ee7c03fdc14b26fa4848003124f00dca0158a4b39af2ea9c8890e2948508d495600d311962f8e9b0200284580d5afe500ba258a0b3f1429a399dc489c01321e81e1a92394fa0344604d064e10f04144f21eae6f8d0425908d4d50d92608a2905822931411b684121f0a19c5ad20bb4cb95a9ae8012a2985e08413b193dd419248b1a1d251dbaeb90b26254485a8066178cc47ce414a8a46ba68b400a2c28a19c9e2727a07a4cc92d4d6cebd0806a6a52298e04c4d029e89889295173451fd951132b20842fe89baf2a2abe9929061d0fe608080715410f15852253979945960134832d4c985988f912a304458ea6a0a846ac003d1e502039709872deac107bb365e6a90a1e26a8a11802785a93250b6d32030631238a98dd0601308a7111a21015a2874a4f60c646d3ca17716237ac90310b49014217889a3415e545f4480b35260b72baba3137c04c284564c530202b511a867688d17c68d1254dacd0a95004c94cc4a48958ffc007ea04ca8e0e477adf7cbf5f5cbebae7db79be18dbcef3fd7d479eef7f97f37c3f5b9e6fb92fc926df4e8ef9f6fc9ecef9eecf62bee526d7e4dbbd5f936fbffbc37c1fdb305f716b30dfee5d0ce6dbb305f32d77e7e497efd6facbf7cbf7bea8bd7cf30dbd7c9f637214af789feb51bcf733298af7797e51bcdf6dbfe2e5fc33c6175bdb637c31bebf75b6ddc7df2dc16bffbb597bf7bdfbdd5d2bc32fdb1a27c3bec9b0dc9b0c1f7f9b0c7b26c372db32197ebfbf4c865b8b6418662b92e1dbc8b04686fb713adca40ef1771d76ae43aec3e75b875befadc3bc75f8a30e3fadc3f2b30e5fd46158daef621d3ed6e1877558fecdd36159abe9b0dcbaf31bfebee178c39e6f88f10d43db0df37fdf0df5fe307f38e20ffb8bf8438df187a14d876ffb3e2c7161d8b1fdf0b31f7edbb6b1e12d67c3c7d9b0dbb0f3c76d1b867cdbf0db36dcbab66d588ea30dbf6cc3fd9d8b36dc2f8a3604b10df7b561bf351b8aa52d93b66dfb256d1d5fd2f6df256d9c3f69fbb6256d3d93db96d3db36927adbcafd9edeb67eb70dfcbb6ddfddb6fcbf6d65bf38bb6d9cdb6dfbd16e5bcf76dbf2b5dbf69eddb69addb69cd3b6bc1fa76de3e55cdbf08f5cdb2cc6776bdb73ad6d9fd6b60f6b1be7ff7ddad6adb63d896d398d6d8fd3d8566e8d6da2d6d8f6358d6dcf47f162db7f17db38b7d8f6db629bedb3d8f6b86bc3fbdade667b6cb35d5b07afad677b6d9deb90bfedf325f3db1ef7fcb6dff96d9cbcf96db66f636d6f23adcdf6ddda466e6ddcda7a7e715b9b77f1b6b6fc5f6d5bdbdbecb6b6d1da5eb4b6723fc6d65686596c6df95a5b7fdb676dbfc94e82e526c1f76cde2458e64c829904f19360bfe406f3b7d11bcc39bdc1cef5067bd61bb4e90dbe2ddf0d7ef9ef0643fe1becf94936bf417c6d7683611adcdfb906f1e55c83dfb6b9ad4191dc1afc4cf6adc1dbd6607fdbd660e7bf35d8b5063fadc19cc658831fd620be1ab46990939e0645abc11283212731f85d1283fb731a83374f6370bc18eca1ed62f01f835be32c06bbc560c82d065fb418b4590c865d90f3cffd821dc4d6e31714f7057f5f30e4d7962ff8f9825fbe20b6f982fb3bbea0882ff8f882bf49db053ffc1704f7d72e987b703feec1d0eb0f628bbb9d3ff8d88a0fe27ff0fb07ff416cf77f0f96db92bbf6e0f7bb35ce821d93167cd276bb05f787dd82d8760b760b5a50dc162cb9edd982a5972d982dc8492d5ab0c457b4e08b16c4d88261bf16ecf95af03f0b961d939e05dfb3a07777cd8239bd6b5ffe976f770fdb63d83fd763d8e76bf118f6bfef1896ed18f6deed3aecfb0dfbce6fd83fbe61df6fed8661fffc7afbc3fe39e985fd7f24f6c2fefbf5c23eec397f2fec1f8fa20dfbeed9b07f1cd6b8ff9bc63dbeb87f2fff7771cfbd1bf6c736efefffef9596f3ffac2fd7fbffd3fb9fdbfd76ff7849368f2dc9e6ffd3fc8efff97fdf9e7f7fcfff18eb9d3ff4eeceff9d5f9cbfd46bf2bf976d98fff3b5e57f9bb5e57f6f6b307f69db9fbf143ffff3adbffc9c3ffef27ff9f7e7f4287ea9f1287ed6b76bf1ff3dbb6be2979fae897fdbb626fe73fcdf2ffeadbbc585e3e3ff9ebdbbf77ff873ba867f7fd8efdb6cdfb706c1ff6e3df2fb7ebf7fdbf7a5a8b3f6de7b1d7a5f72fb9ddb2ff1e5f6c3beede76dbfc4dbfe639bfdfd36fbde156d2e3f70dbdc5776f20bbd4e7e9d93e4f799fc6a22f9dd3cf22bf72792fb1bf5fec6bbbf5bbefbc3f8eeaf83777fa2fdfde5ecfebcdbb9dd9f15edfe3a68f7f738fd3dae91fa7baebfadf5b775d65ff9b7acbfef366bfde51b8e587f18ebcfa63f4f7f5b774f7f659b36f77b6f6bdcfdfa7edcfdfe7ea5c523bf1fbf1fe757e4f70bf9e5f7e3f7e3f7ebfb7edf262dd7f97e9f15c5c7f72bfbcdb6fb61bb1f04efd7ff7ef8f9dfefbdfb95dbdeefcb5ab4f7c3f67ea2dd367bbfefbd8bfb6fd4f871ff75effb7ff8dafe5fa9af1df97f37fe5fb65dfe5fdfcffffbdadd1effef7177ff577672fc2fece37f5ffef1bfbeedf85f99ffeb1cdb9bff7b7ec5ffbe6cc5fff6e32efeafb4f8bfff6dfbaf04fffbdfffdf6fedfdf7f9e2ebfdb7bf26bef7df7fd6fb8fdf5dfbefbbadfd87ed7fa5fd72ce7efbbf90dbcf96efb6dff75eb6df28daef6d56b4df67bfefa427eace492feb1b72d27bdc2649cfe3a4be9bf446d21b49ef37d931e97d8df4b0edbcdc5eb9bd9093db0bbd4c6eef714d24b7f7fc92dbc34f6e0fdbeb91dbfb727a6f6fd4dbf36ebfdb1bf9ddde8b777bfd6fdedd5eeeb777fbdf5ebfdf6f4fb4bfbdb28ddd1eced9eded90dbed7db6db13edf63a68b7f7f8b3dbbb79767bdf75a9bdfd38ede5cb49ed3ddfa4f61e8fa4f6ca1d7aa4f6b2ee5d7b9d6b2f6fedfdd61eb65b7be5a8bdfde3a83dacb577d3da7b2f63bdfb77f9e7ac3dce7fdbb2f6c47dc1acbdee915fd65edfef65ed95d96a51d49e7745edf5ad41517bf9d644ed6591c4dadb1a6b2f5fede1abbd7f10d49dccdad35ee7567ba1d749ecedef9cc4de2892d8ab91d8cb398dbd8fd4d80bbbc6de738d3d9bc6decdd3d81b2ff6bc9b2ff66ae2c51e085eecf5fc177b37ef626f3feeb177db8fbd6c1f7ba5c55ece62af04efb6d81b2df6c46bb1872fee7a65bf5efe36b75fefb1b7af97b56873bedeb6b6ebe54d86de2d93a1f7f8e691a1e7ddac77e83dd73af4debb3af4cacfe20dbd0fdfd003ff865efe9b7743aff30fbd72ef0f3df043eff97fe88df643afdbd07b6e43ef6ddf471b7a5cdbd0cbfa8ea20dbd1bb6a1b7af0df77bd8fe7eafdc64cfef7192e7f7bc723f7eefbdc759cf7a3db491d6f3caad6ddfad177add7a368d6db75eb71eb624b7dee3ceada7f3e5d60bb9f59e5baf6feb957b5bafffb8adf76deb655ddbd6dbd6cbd7f6d17ad8f63b8ed6cbbaccd6e31697adf7395baffcb2f5f07bd97ad866eb65eb8da2f5ec7ed17a22b61ec6d6fb9bc7c9ee59ef71cd7af9d6acf7365bab59af4d1bb2b6bf24c95ac9c91ae79f2f276b9cac756edb642dffb7c9dafe5b266b8fbf4cd6fa634cd66e98acd53059d3d8822059eb6ffbc85af97d64ed71ad46d6424eee5acee95ddb3551eb5dfb3659ef5abe587b9edeb51bbfbb5603ffeedadbbebb6b37efee5aedb3bf6b8fb3bbc6b9ddb52fdb5dcbd7ee5aff9b6777add4b5305dab89ba775de35cd76cf96e5dab75ae75eda6758d9359d73eeb5a4dd4357c75adfc74ad5b5dfbb6d5b59093b8b6495c7b12d79e931ad744cdb9c6b54f6b5cfbf2c535ce1fd76ef671ad738b6bfd6fd9e2da8b16d7feb3b876f32cbeb5b0ef5bfbf6adddda976fed6fb7f6ddda63aff46eedcbbafc5afecff5afedeffd6ba5ddfd6b9d7fad5ff0f3d7422f7fade3afe534fedae3fee2af7df9865f7b9c0dbf06fed75ed4ded79e93d6fb5ad949fbb56cbf167af66b8f7bb7b5fe376e6bdee5b6f6dcd6f0ef6d6bf95adbb6b512ffb6b56d6bfb73b6359b6db635ad6b62adccdac3b666b3b5b77db696b5676b5be30f3d5b2b6bb6c66f98fdb6cddd72169360cebea8f9e76c6973f6b7cdd9bfd99cfdaec659fd594fe3ecdbec7e9ccd22d949ab3b697b266de7a48db4fd7ea425bbfd8fecb777fbe5efddde3cdbbb1575b7df1f87dd5a31ecdcbe48726e3bbf9cdbfe9cdb8e49cbb9edde8fdcdeb8bd6d9dbb7ddbee59f0fbb67ddbc7ddbd6de7bfb7ddd696e2b65b8bdb7e2f6e2b6efba46d5b9b7f5bfbdb7ab77bdb86deb6f8eed13e4eef71b48fc7d16efbe3684b9bc67ab47ddbd196d996fd6f58b64fb2b93d5b9bf3f76cf7e778b6d9624be66cdfcba4ced93ebe658bad78b32db72ddbc7b66cf7dbb2b55b875eb69d97d866fb3d2745db33a9456bcbb78d15ed26bf5bd1f2d2e6b0dddfb1d51c5b1b8ed87ed6d876ae456c731a635b3ec616639bff62dbf7638b75a83d6c45b286adb82db68ff9ddd7ee6bc56b3ffba1fddf36dbf3dbecdb6cbed666bf6b3768bfad41d0ee6b41d07ab7a6f7dbf72eeeb3ef658bfb6cc7e467fb153f6bbb77bfcf7e9feda3fd2cb664dfddb35b77af7b9673bd3deb59ef764e6acf7ed7b38ffb1b7a9ef53ccbf97b9e7d4ed6ecb7495eb3ddb3b5ad79cdf6fcbc661fa76bb693ba661fd7accdfacbb666bd2e61722283626525ca786b598ffcbf44ef0ceefa72d6975c73fd98b7d93ea68c25262ced995096589841f83caac0d20c8c4854d460ce29c7921b4b0d58ea5f7e5ec0942861b0b0aa9057bc2f73650a30042832054aa51d0efa02550907253b3376cc396925032a51a904458bbf3bff6f3ff89df43eeca13ca9f2e4ca882fa688e2248a9e2f2ad03435e7a40f7c812bff36cb7d2eff36fbb09e6285062f0ea03eac50817267d02427146a5210937cc833a98649324ceeedcf39bdffe6696ccbbf5129e0832e3a1853a45cd085005cd85904d585d477679ead02058a035b4c8188ca1328e31615687169ced9d1365bec39739fbf3b2bf7936cac58a15a7881d2a26a4269b16306e1f349d204254906494ef6d86ebf38734e0c243d8292d4489215df77452f6ca6fb6c267a6155aa3cb9e25be685593511bdb02673ce0b2c88c4411c06a0208530e7c432a122b1a90670bdbf4db5e55be2aceb671f57dd2befb7562f0892e00d39dfb2ee3d914d9145b1b27a52c649191b2e8b4bb38b39d18875b1199d8c1900f0acefc5ef5be2f72ddeaf19adefbfe7ad474674726f2eb72e2e60fb51c86dae626cbd9a05f5e8879709e5c8cfb461b5355ff1fbad8f6df9f29a05e568ce9c53c6c91a94a3323a7f50a2908e8040353262ca30fe1cb7b5ca966fe7fb8215d4b5ca4a8c49b03eff0a6a2d8db2a094e9f9af97b39e94e9f9c5d28eb3ff6234678adf2f9428e4b7b99ceb4e668979315b77b15d71f677f7d92213e6f4f8b562ceb927942249fc8a4d14d939277f92f31b7adf9b88da93d5c8b05f5b9326577cec3dac9ddbc76335e0fbfd36dbddfd37f9558bb5ae7d2f6a0f4bca1412eb8af765b6be7b9ce9fd6db2ce7d738bedc8ede662c731589099b7f66cefb6385eda1ccefaac73cff5ded65d6cf97a5b77e1e06fafad7b190de62ddbbd2c9eed38c6966fd87f792b51089528c89475fe361bc96b0f6d57ac3f96ddd65c3fec551f7691b46d5b3fec5f73cf35e60a45577429fb7310d4b3302953b6be0fbb5db6ee9e053f7d37fff2e3fbded61a8318dfda7e2f2b1c98135b4feff17afff5fd387e1f63cb77dbcf378cfdf2ef077fe336a9e5f5362bdedf631571f018928d1dbbbe7cc17cf9dea0aa38008a8a2fa0a84061cad4a4e91af3aa2fdf1b9a3432fe21b798d7effbff7a7edc577e43b02aeb1af3fae2ed95cabbe0f57ee4565fbeb7a92fdb4a9b3da7f51f471b56da97ef8d56f3e3aeadfef77debf177add9567eebef0fc1baa0a870f363d92b7f10d45328caea9a2be4168f29b1f8dbeb7b8c2f9890db3ee6fb2f6b2d1c6bed5523c77cdbe6b4f6fab2ae653279eb3d3b8ec15d9e1ffc2df98ac15a7b7d9bffddc5966fa977e7bf25ffd8f5dd768cb372767f61bf6632a947516b71fef87b8eb51e67a2ceb3fd5ee2b5582b0a4a734631c59c13b457575b1445d12a5fdb33a945abc7b7fd621475ce7a35e337fbe39c330785e88a29db8872908d3dffdea456e7374cd99fcfa010dde6947d7ff138da9aff6b95dbb0f6e7b5b435f75cdf8b24ffafef3969bdf8df7eb70e3b99957b2e284446405d45327fa5d1ea876076fcb2dd361c17282a985087304da8435e4ca84359d03094c28432f4c1843254c18432544e28437c4219b24d2843682694a1ae0965486b42198a32e79c013565dcd85fda309a4bef5fa0d492f5e51777b7e43406bf4ce6fb9cc638ab6baeaef557d6d786615c467dd36073ceccb9e6fada2f923c6b2d315fdbdd5d9fd5329237adc3ec0f7bd79cf362f2d362e674bacd39e99ac735fb65cdf561fd257f1bbdbbf4e73cabdbdf5a5de76cb54452bcf98ac969fc5ab657897317ff32d9256badefbf4c6a2d60dfefcb7f4b99ad18adc1723a8cd660df39b97b26f365527f6ded8df9aecbd84ca667526bedcff99ab165bdcdf0feb66d3b9428e4b7b9637657e9e5b7ed17b9dc3c5bc3d87621f37db6dd31f9da502b77cd667b468ea2d6da8fc37a0cdf5b8bd15c60185b2d12eb31df6fddc768ae7bf37498b0ec17dfdae5f6bbd8f8cdfbf077d635720cd6daeb71cde26b7159994cd7211f6d1e33e704b9703d725d5dedcf57cc5b65d2eab90d47abdb31293629fbdd769c73fe1759df2d636eb6f3d9f7ddda1eff87f59726a4cc3909e530a71420250a94b027dfdf3c1d46ebbbc65d5dd9f2ed1a7771597bdf7599cf9aebdbba710b36e8851bb760586bafc7dfd67b16dcdff39dbd78fb6fed5d5dedbfe9ddf38b59bfb5d601b36e519c95e0ff1645ab12fcaf3d995082e4cc398970fefbfb6cfd02c6a5ea5ecb07e35d5c23bdaa025db870d152fb7e5c15284f484132e66f796e7f7b796bdf2d3dbfd839b9e6cbe2368bbbd8ddc3b8609ce5f12be6bf0bffb1ec57579c67cded7f7d99d45dbae6fa4f73d9ac9617ed98bcd535d7fe8bb3ffa56b2e7ef1d555e717cfb8cdd66623bf619670343eb712f577c112312c316756dd2bffde966de88dba3e996fcfdabbbb57522bd0c1845a42ca9c4ab2e537ec35f46e98ab55368bc10af63d272ba915706087330602f539715cb4747d818da1d14961a07ccbbea67777228b62952fde2fd6ace69c764201eae28e76f6dde2ee1e673328368d0195f09becf6c14ac3dd689cac5fbff6655bb1edf9c5bbadcabfcd396973323023fd81624e22605c64bab4665bb8c8747dcdbaccc0646969710153b30d7bdd9f49edcdbe4cea5db3a4c89ec89c58ddace7bd1b1ad48d1b09dcd87033a71b37b37333636e26066e660619cc6963d698735e30671c37b3861b3712b87193819b39ddb889e366023569d02ca0c0193365c8808df9aa4ae24bc08bcb8b99329f7744180d257ce5c9b282a0210b205224464e0b125880c18d0f9a3648c20a115708f203b583140582e24cd938624697221efa2560c08243992a238a48d1a0c1844a3290e0c146073c718c8880cd222d080cd11c174c69b00862b021c4a2229cc06982c80b856e4b3cc27316795041241e586488b383cda33f113ca25347e022c50d4f302952027e58a063f20e4c01b27ce8b694906238705cd112bad8a285c0189a22a4d1d1a1b1210005816e31e7a463fc80678a46367cb96380104d302067d094acac2c8a18279428ffdd5c93db5f0cfbdd36ca9402a0dc4abbb7ad5b574ed575ae5bd7efadc29cd4b0ebda54b56fa08af051c4acddd6aa7ab5bf7b36ec435bbe9c5fb1f25bc32ef87bac614eac549958529e3499733e79136a084850ea1226f549c5fd7e29322756ffede75678146f989339c010619cc89c58f5b7410de1448408e79f45fd65bb6be5bf2fc9e677ed36ecb5ec17dbe764d66ce42fdadc3d3b8a5aebeacafb4f7b38285148acd9fe31cc8a374fe3da9e855931cc8a3f7b6e6b5850a29057c2aca845b02c8406fbbdf8d5d5cdd358cb9cb3079e504184bc56f0d6ca6ffd10ac1a409b6d3da37daf856f19ef57bc986b6a306ffd67b76d24f3d5b90d73fbcd5b6d2eb6f976f12ecf77f7302e251ec72cf13b2fb90dbdf67b75aebd3498b7caadbbfdb21583edfeb10b5b716baeafb45e58df8fe3dd9d5f89dce6ae682efe0a3c896d192eb67c3fdbedf7b2b62593b159b039e7fe9a4872d92cd87f5a8ccd82edffec7fedc77575d9f2ddffedaefe63be5befe291dcd27fcc773599ef76cd39b588f96e17b6decd3a5b2f6b2e9bed73ceacef375ff0bfbc951fe7c7b3ffbc35e73c204b97172fd877bb65ce8935e774ea97ebf1cbf786e5ca8b7acc67cd05f66df5c7d87a6511093dfb5ffd8a37cccdb37dcc87ff2ab01fd7f57d26d3e5b35ab8f836cbf98be1fc3dbdbdbec7ede7fff5bfbb78fc8a57573cff4df7ab2b4e76dbc7bc972db65ae69c74a6fb6c246755c04e66ce39a580ac2fdf5fc696efa7bdcca5e7abbd741fcbadf524f3ac39a714240a4c281ff4b4d91e65cee93467be7aa4227362f5c47bfee2ed99dc7ccbbe4ceac9a3078539eb158d56bbaddf6de7f5fb3e927b6bad3027d85ef12dc316aa873a53269329e98fabbafd6dab5d735519afd8daf2cd690c6e5bdfcc157edce399e5d9ee7e35e75c3227a5000a7dd2c301734e2c73d21cf48907169abccd6edd79c86d787535e301cd9cb36f1df2aa750fb90debd5f3fdb8df956f59c86dd8c4dbe348f2264d6a246ff24d9132c54ea9359942e5fb02aa58a95129e089952920e859dd3e6ed5f5676f588f4d782775937e6d37a8ec80e79cb869800e507ce79f67fbfb9d793ff226dee374d8a3a64a35a00a8906ebca8c97d6eb1f9cf1d28e9c5bac157add8efc6ee1dc62cf4c0f6df773923297ef71cdf2bb25ebcbf3f7b09fd96e3fdb5f9cbd6837f89f1693c39c9336a1f254c9b6cb79d8ad17dfb2273228561accd7eab1f5f89721734eae1cdce471aa58f5bbe2cdbb249b262a743ee69c4ae69c4904723267a7000e55f8967db7b68bb34f54cc9e49ed552cb30e3e9e7d58cf68d2f957b160f136eff22800b6a595e595a555afd4b0effe9cd3cd84ba61466ef2bf7bad097f8cb58755f363d9f7dfbf17f67c7fd7b8fa9be4990b9a2b9600a2030222e5100a10cd90298bcf8d84a7500e132c3c24811c5f11d4d06802422d7455ba9a0d3065d295fcc51ee3834b4c80b0e17953c19f170c5853a391ed8b3d4ad0b001b48156afc29c4cd92c980d57e69c682a17b0ac325b5f5e3640cd89a66a6d75d9d2e2e235c60aec0c1730ae2e2d3c94a0f04cc2b368ce493555d5a0a95c5d5b60595a5b61bcbcb2f02881a7cff7dd23f7e36ebfe2dda397182d97df322f5eb0efdb5c6cf7e7f7f2e205d302235340d696feef9609fbfef8c1bcbcbb5f24b9c0b88ce1a2c5c5854c025cc6d8f2dd7d4c952e6064b67001cbfae222860c179730595cbebeb86c75d902e3e2b265ab82697141404b57983064b8b880697579e1dafa021b53c1b6b47c71f1c2058c6b8b2b8b4b98ae2e2d54b08044cc0b3d52280f091c75107c76682542627441e0aa4c9a144474756c68828a0183146d402684be0a4bc46c0089985fa848e86e9d1826095c9162089453f4dd74118b92a4005a46860ea61662eab491f5a7cb8009d60cf205948ecc1656ccd18a45330719155024d64cea52d0d445bbf1e76c08dc26ba69d3a6d8a64d9268a21c8ecc349836d10fb44041b1f8d934291407747dcf99f943130074669cb032b3acb933d51c00897ec191a7c382874d940936766277ae0041cb477626ed4335d7d8c811e391f94c2776053105c2569873ce39e79c93ce2c416ca14006b844992cba43073d824259a8e3430c8f5495d9c0a53f1d075390739114a8ce8f16707639e4008db325d084e1014ab44b9731a61f2eaad826206853833a54620bc4ccd0233334418f90229bbf04044f11dc86e8764cd11553d44323aa850c5fba272323ba6707ec74f3b145b7051673ba18484db3840b3aa052495441af90504447b5819399e80826b408ae1bf309c81daa88851fa8d48d1362203ca135ad2ae1a60b45eca0000099ea8e642187ce6260a7076a0f35a1080df3ca2322e6109200755a6045a13a7208a15bd2f9d02b3247b1078028d45d191a421511a101b520acc6c82009d3cd002904195037f8408be8f34227e88604d35bb48886d1830313d00d57b12f363cd1271c016a851876d6f17ec4027a369b11e1556fa9446cf9da6ce7d5829ad4351de62a97957fb333fe999415f065db79e71acfb6e618dbdfe36cc641dc28ebcfb72e6bbc4b19afd90cc48d58ebb1766bf57bac5dca7855dbe55dec5c83506aed5c8795df2a0df2ef1a379b652de3dfdbf2bd79b656abbe9323bf5ffdd16e6f4c599bf17e67a3b8c3994c736c459db5aaac72fc39dbd00335ef79c646fc6475db5ccee9af966fbfcf673399a6d15ed4636863fd6ebffb65eb553bdef77ecfb2beb4af8b26d62a5bcb5aff2eb3adc1998ca665cb37dbee18daedd9766e6bb7337bf7f7bb3d6e47de492d53527ed8cbcf3adbaaad3a9bcd66dfffee42abfc7ebfdf6e0bdedfbcc476dbef3959b3d5d856dab765b7f5a2d96ebffd22c9b9fdeecc6e3bce6422b7db8ed97affbb4b957d7f47d2f3f46fb0d6df5a55962deef1efcaad57f58ca6c1bcf535927a7ba1d1723ad36ab7378dabb9fae11b7afdc3aec732fcbecdd560ad1f7619f7b26595df6d75aee0565543bbbada4f43f3241b7eb74d46a3d57cc3b7f575a79a52250a150fdc53f5ab5fabb5cdad5b83bfedb563a5ba3d7fd7e394a83daa2950d7ca69b4fa3d78bf176dae553757655b55e691bbf3efd2be4bcbd7aae34bd6be2bfb9e933ad72a5b3b27c55cbdaa8cdf7aebd615e49d1ceb972dc62468c5454cd657976a2ba8ebfd6a996d4de35ae5ea1a8340b5342d2fb45ab3e66bee9885a3dd4aa3e17e8fdfadfdf97767fdf96c76db1aa4a2cdcaddf97b79eab63558671a576b7f3eebddf2cb3fbfedfb269967edc9ba67f777ce1fcfbebf95df0a6aabfa6a40fb61b447b3345afdb0e75beb8b96d7b761e55f41fb588f3cf448ceebd7c2e7e4ad755e82777f99ca1f671f3fc75caa8c96695f62c454d1a8f2d48b7a4cc542e3776f0d7e8911339b75fe353e03ede3d916450eea3adba2280bb5def54b8c98fa35ab65369bc97ad8f7acbd7c735795517ddb8695dfa9aff25b6df982b7ca6cb2af551c5f0bf2ceadf759bd6bf56b3a4f7dedcb968a469baab6eebef5d8ebacfc5be73ad7aab07fcfc92e5596757ddcc51a7fb7b596d956d9cb6eadeaa1eddaf2fd5aadfcf2fad9efdcf2ca5fb4db8e95db4aeb1a73dacdf6bae595652335eeeb1517b02eae2ae3b84bb2f9ba35f8db7250ebed5565b5ecb7577e6bf937ab3bb6defd30f969b1e6ac3ade9083badaca6fd798537db5c4e557b9cd4dd5b0cfdfb6b6d94c167a7aacdd6219172d595aead660d699fc2af716991adad67b73a1a1a91ff6df36cc55feb7aa6ffe5c87bde6ad2ae3f6c52a7c2dc8c5689da95b6b55592df2fbbf14a95fabaa5cc9efad2a2b52a488e88515a9a167bffe16bdb05a3555f9e391ecdd7b5cb5186b6ec7faf96db67c7326b755b93fd10bab62b4ce885ed82c937b56ee4f96c95dcbbde58e59a27746f6b59aad576977ccc2d86a79657d69b5ea5635b4adab2b4c4353b706f9e72beeefff550d56651ff6fa69af2aebbba4562da957b67c655b5e59a0ce9af17ff06dfcabb5b462e53dff962ad3ba5f7d9bcb6bd5f57b6e6bf5b7e55aacb5dc9f6b55cf8fb1926ec35e3f04abd55a956fadcf69b49a9ff37fb096fbabfdbdfc8333dd67b4fab876fb158df66dd1eaf7ff60b555f77c67a2174613bd33dfd3ea158d5697549918ad33d5d6dc6c26ab57345a5d527956355265bc3fe7b6d6f13dcfda3b6669b02f5b315a676ae5de9657d6cc93d1bead2c5ad5bdd26895772d5b6df9d6adc1da6dd8ef682bede669ac65c665ba57516fb096dbe22ac637576db75fcfff6daeac4b2df1385a19bfdfadfc2ff8a2f63aa96bd69793d8cbb7665be271ccaa77ccdaa29812fcd722e375cb2b6bd6c33e7f4f3ec9a6490ffb3cebcf67325b4bbca5c1d94c56f3f5ac7ed7ad6b95d5677f57ddabadeec7e9fafd975f14b5f7bb9638b4ddb0f25b2befb75671fe59735599952a46b4ba7c5550d79aefb662e5b762305ffedd8ab7f3af77cc32d325bba3adfb6f5be76620a865376e7bb502415d3fec754cddffd90f79f9606477b4754c95957fab4c6ace6e7e312ffff669efb7f0f26fb3efb2fa7de512264b6b4cfd6ebdacbdaf2aa355013b49abd5d6af7dff39ecedc5d5af967fdbbaf3fab52afbfe7989b1e5e5df406deb772ff5fbe70f54ef3fad456b88022bf83a03a2c01f738234eaafa857345aeddc8e357bd08148f6aba51cf5ee99cb67b57c5b9bf9b636f3cd09c3494dda6e4dcc9a7372d065991b745ddd9677b3163f8b9d192268a1165230c10e9d0d8e64f0468207c278b6d5185000ac0b8c17ad2c568e487172840a0911213ea28e007064c691d8a630c0f0620b488c12456188d0127e8a10e2871ef2d0f0c21d1142e0008337119446705b0c3f9a0264b810d872c0952a519a50213132c4c80f233b02b0f1646462aa344912232ba020b4849f217ec853830b774a0081830ce04450726cf3d29849806b4b0bcb4a14ab24448a0429b2a30854111c45681471da84a9d2a4488baa808250202484e8214f0d2ea020021d0ee25000418e081b22f71958c0cc17d79616162a51ac9418213200911e44a488046083c8d3186154ea220b4556485148d09f23faece9214f0d30b050429d0ee2bc71f340d9b3adc640992e04b664a957a844a955496a91203b6a00b546a56358f22252a3445218724210a02386d8a32787195c48818410867090019c091ec8f1bce6ad1a05c8746d75d18265a580214d862c495205f8b123c7101b43660ca19ac09804699115880a0d0284c4107bf4e4a1a18513eccc21e0020a1c0863730369680838f3c5e545cb1502a61000850901480818f243c70d026610302f7921a95115880a09fa5344103ee860430c2da450421d3a1b6050410465d7616d8005c6881900812d58560a18c0c9004c063832c09001820cb06300280006781a6062aad445a4455644e104134a1811c40f3be050030c2cdc1141800f049063819b06725c5f6f86a6cc97982f5ab0548922a342424488003e0488ba21c00c0166264b5f6c9105a32ba838d40413808c08c2871d6e90610513ec7cb0419c376e1c08632324db6a69cc08e942a04b16962a506454428e0821c08794901c426a08e9c4b0e485168eae40e4042024faf8b0830d30b070c74e0719bc91a001728b369bc64c57102f075c0591d264cac89020417c04d17123c88c20338c4a5c446294680a4384965082883d3ee88067861758b8330208733280e3c681b09d81d82c9a320988f9a285c54a94264c92101100880f1d01000100c813904e13185d40524485a1417f88f841071a5c4041040fe4c071e3408ecdedc7ff5063e6c7981f627e74f991658014d95411017804f083c68f4e53252e1e29a202512141819218828f0f3ad810030b774808c1830d30a8c08d03a45e03d6d490e1f2728095283e9cf8a852e2a3fa08e2430a070d1f314d96bee0e21116521812e4a70f103ad4e0c21d113cc8004e04251bfc3434605c5e0eb88a62d503498f1a44478f1b3d64f4e830791169d1155340d104134a18d1670f0f39d4f0420a26d8e9200338123880db375b8d070367c8786df1d0e281c5638a13263c92f03032800f1e503c6cf0701ac312252d1a6131c5a1418192e8f3431e1b6470210512ea7490019c08da9023066b0c9c01ebdadaa1b5036b8701547644d9d164aac8003d7644edb0b1c3491318937464b1880a289a088484103ff090030d2fb070a70410e66880011c091ac0711d7a0c984900012d2c54a238b19a2aa243888e1f3a74e8c0a143868e2e93252f2435b2228a270605f26384107a7090c223430b28d8e9008337123c906383415a1a3363a4c27439e00a95265446a484f8908ac2214543ca6993252f2435aae290134cfc3922083d38cc00830a26d499139541d405123c9063b3e69b9d01ebfa12b525eaca9428274c8e54213da2a26e44d188a2992a4d8ad42811a22798f863441f1ff2d410430a258400e501d4065070dcb4e9fa7e0c98f902c345cb952a519a3081524244002820505237a06440514d607001895122290e0d0ae487083e3ee850430c2da04002081d6460010510b4c1b1116f0d0d9817182e59aa48912d414240003f74040015c08d009e0298992c4dd2e251222aa23024e8cf117d80d8a186185a488184103ad820ce1b370e84ed6cfb680a90e90af3850bd6d5941cb225496a8e20397ae488ca7123478d1cdd18982c79a1c5a34438a8c0114521269438a28f0f796c8041051c25e0b033270e050ee0c6351e03381200c3254b95274c7020c141c00f281c3670746254e2e2d1222a0c0dfa63041f1e709061853b2384b0411c38143c80dba2cd5373a34c0260ba68b991e56aca13ab1b48ea8d203da472dca871e369d3254a5d4062544514879c1004e8882182f841071b6200208512ea74a081051444e0003962d0aa29e315e68bd601006001800a14ab29230404e101400e1b003c01403559ea2252a344531c7242901245f0e101871a6250e1841142e8408e051334806383c11a030b8c11e3450bcb0a1426486a101b3a02b061c386938da9290c2f2435b20291a126001d3104103be020430b2a9c20029d0d30a8c04d9bae6bd86a68ce8c11e3e500036a4871b2e4c810213e6a44d5c051a3460d1935a818982a750189d115521c22b444124504e1c30e39cc00030b278800420719bc91e081b09dd77cb33363bcc074c1a261854694263498d09822028486140d1b349ec6b8f445175930aa0291a1417f9018828f9e3c36c0c0c20933eaccf880030c267080d4d753334301b0ae2f5956a054211932c3c78ca81936663c6dc224038c2d1e2592a29020258c10424f1e3c33b890828c116478a081051338801bd77cb3335f61b864b98a522583ea880c02640091927143c6d3a64b5e487aa4480a27021df1c4474f9e1a606801053b1fccc1600208dae0c69bada6e6cc530261be686579b252c09327aba725498a0cf004644700369e9ea6a64a5d406294488a434e30e187883d3b38e1e084c7853b247cb0c1056e4a366bc099992e305c9cb05071425544801f4e524e399c6a387563589a146951155010fa83449f1f72a0c1851446f8608338143c9063b326f6333464b810d072158b6285640890988e0062376234625313185d447294a80a444f08f253c49e1df0742eac50829d0ea2ba0d30a0c0011c9b353f5ba08c17982e5d1603a63861928488901e511d8e8e46d78961c90b498dae405488893f450801040f39d000030b2580a0011c0a416ebcb53466bcc270c97215a50913249448101e148adaa0b1313055ea2252232ca840e404134a1411849e3c78647001051242e84003386ea26618cfb786864cd7172d2c2a50aaa68a0cf0236aee889a0144cd1a51b313c31217901855010521404708a147874d356c8261930a9b4ad8f4010717bc89a0e4fa66aba53133460c025a573615d084ea080140746ccab109804d33365131c2a8342952a34451182204280921f6f480c30c2da0200208637420e74d046dba5ee33170e66b0c04b81c7055409325631c19128407d418008ce134061de392175b3cc2628a434e30f107092282f861871b688041051242e8408e05133480638341aba6cc17971860b6605179c244491522860f31a4c400408ca74d98287501491115880a31e1a708217cc88186185630a10e1d396f344df04098a61187360d9904c278d162801499a6259a8e68aa9a8268e29143d38c4d617cc1c5232ca63044e88f1143fca0030d31b070829d0e32b0608207da90230633d5d4944900cc962c99ae142053422453904c3b32ddc8342313d564c98b488caa80a289259010c2074c3a60ba2106165010e1030ee4583041033836f86bb305c87889f9a2e5ca9426544506c0f40393142600303d61eac4b0d4452446616031c5134b2841c49e1d6a78418512c2f8208c0dc2b88002a8302008a30d0f036bdda68dddb56f13765297b64cea92d4654e63fce5b65f7edb96b6ac77eefbddb9ceefce3deefc77eee6fdce8d76e7c2be75aedc5be73ebc75eeb675eedb3a87b5ce7d5ae7f67f59e7b215750ec43a970bf9cd3dbf39517ffce67edf5c2e77cb3767cb37f7f9e672facb37976f0ee39bfbf0cd3d787361ff6eeebf9bdb3ff21be6c61be67e7f98cb1fe6f07f98eb36cc3db661ae7faef3cfbda83dfcb96fdfcf7df96fffb9cfd53ef739fcdc7e6edbcf653ddacfe54a9b7b9ccdedef36f79ddbdcc86d2ee436b7f5dddbe6440b6e9bebd9e63a99b1cd616c73376c73fdda5cd6b9b7d952e344126b9cced6c31af75d8d7bef6a1cb69ec67d177771d8767e71fdf28bb3fce238b92f0e5bb2ef8bcb17eb8b7b9bedf9e21e97fb8b2bb7eedec571525fefe27ab6bb76718f6bf6e2b2ddcff9e3cafdb8ac4bf0eec7d5f6e39ecc8f7b1cae3f0edff0711d9316d7b9c559dcd6a3c585fc668bcb16f7386c71b8276d162792a467713d5bcfe2387ffc9cc424f89cfc9e93cfc9b76d32dbda26fbf391dc3f8e64d623f9611d8e24f9dd7e2389efe332892dc9c94ce2db3379f334cee467b2df4c3ec9e66652dc1abc99cce4873598c97d2d9849fd65927cec653293a4c5f8774d244b6c23b1f5ee58f61fcbae73bdf39bebf9e6fa7b37d7cb9e3fd71f873fd71ff74df6bcc95efe6d931d7fce64b799ec64ff1ad9cbddc34eeede7f14c9dd4b4ceefee4ee378fdc7df7321cf5eee3dd5dbcbbdfbcbbfbd7eeeed8deddbffcbbb4bbe3c7d9dd436e771fedeef9daeceede0541bbfb7f76f79b67772f75cf39ddf7e774ffb6cde9def9dda4eed876dd39d7fdf9d57debae3f9bb7ee8fc75177ef8eba8fba875deb8eb5eeba3f69cbba7fd65dd45df7c757f7fd617f9beeaffb7efc7dba97f6d35d7b9eade9deb9d5fd71bfbd7fbf6f1f6f2ff3ed2fdebebf26dedef1edfb6db7ff777b0f7b4d24c39ed33bec8fbb3becff3bec3db4913aecfc86bdfcb0fffeb0975b7fd8f387fdc50f7bb761bf651bf61ef6bdf3ef397fefd9768cbf8bf67be8d9ef37cc76ad7bb7fd3bb7fdc66dffd1f65bb6fd866deff9b1edf8da6eb3fdf1cdb37d2477c945dd47b1e458d7c4927f5be778e8f59be3b67c735cbc39dec19be3fd3fc7b7fd1c17b7cdf1d1e6f828da5c8ee76b3b2739c9cbc76d926f923fbf7bdc247fdb2639c97f93fcc5df23c94b3c8e24df3f92bc3fcf242f73267926f97e512479bf24dfd646f2fd2048f2fcdf47f2d02339c94b9bab91bc5fb14672923f2e3bef1c04c9ce7bfe8fecfcb1cd46eece6df97677e7fd7f775eda1ea73bc75a77fe59771e7a56d49ddf3cddb92ddfce31be9ddfbcdbb9fefd9d8fdfb9f89ddfec775edacefbb69d7fd9763e8ab673beafedfc6db67310b49d8be4fd6ce7f8f7be241bfe6dfe4936fcb725d9f072e4b67cf7c83ffb7be4a5dd23ef7ae47deb9167ad47be35be7ae4fd8efc6f77e4fbbf3bf2f76e38f22fffc831fe917fffe38f3ce7ecc8b1bddd8efcb71df97b76e46127351f49cdbf4c6a8e49cdfbd6bcdc5bf3ac35b765cd3f6b1cd69c7f176bbeff7e58f36db1e61dd4dc7e9adf3ccdb1bd9ee6fb3d4ff3d16a9ed39983e0cd7cb499ffcd667ef36ce661d75ae47fd3227f7c45deb715434e629ed398778d79b6368db97831e7ff5dccf77ff9311fff31172de6358b39c6e48df77d6f3cdf1bc7f8def8bd71fedddef8b7b93cecf2ef96ec97efeffcf2fc9bbf972fe7dbe22be2cb4b8c2fbfe1cb7b7e7c79b65dfeb6bffcbfcb6fdee5b67c71edf232e48f41900cb98ddc211fc5bb43feb85187bc6b1df2d721bf793ae4fb7137e4e30df9e71bf20fff0d3908defd21c7f843fe7dc87fdb9087bc8336e439fdd990e7c73d1fc9fefc71efcfdfbbb8fd9cffddcff3f3ad6f7ebe6dbee2738c9ff39e5fb43dbffdf3ef9f7bcfb3eebfbde75fd6def36e9ff3d0dbf6b97d5e23b7c7fb78b7c7f3fff6f868b7c73ba93d9ef51db7f638df9af3eb5d8f63ad438fbff8a1c73fbfc73dfedb7a3c5b8f97963fcef2b7594e5afe1e69f90db9ee969720bfddf22f5bce5fb4fc3b892defd8f2ac456cf967b1e5f85afea0e59c7ffe2ce79fe5d86e72973697c99dc9fd98dc3672ff47eefdb51ab9b12dbf4cea1dda6cd7fbb9dea2d6fbef4deb0d6abddfcb56d4bbffcdd3bb73b2a677d756efcfeabd1f7737b664bffbc6ef7eacefb6e5bbbf6bbbbb87b6bb1f8377ff7777e8ddfddedd59d76a77d7ee16c35e867be7fee27099fcddedefdb7fefdf9d5ffefb714d7cfefb498ffffedded8fbf77fe51ffeef977eef3effd5ffefd5fbee2efdfbbc4bfc1bff8f70eb378cdef6d3169fbdd7fdb7e677d6dbf9f93e06f716bf077f71e83bfdf23bfdffbfbf17abf1f77dffbbd7fe3affdce9affdeba8ddd39bbf3e3ecdedfedfe6df77747bb432fdb1263bbf3b51b5fbbf5fdecbe7976bf6777d6daf3eceeb756b3fbbb26d9b4b9249b7e493659dfce9f64b3bf6f4bb211c99e2dc98664f35dd1ee727cdca60d3976720c39393edfe4f85c8f9b24c74d8ee5389223be2339865e26c77c6fa3488e2326478cc9d196eff791e3f8915def71ffc8f51ef51e41adf7f85d8b7a8fddfb357a8fa2dd36bdc77e41bdc7f7c84fef71141fd7f41ebfcddd63d6fceeb1ecb7dc56bc7bfcefee718f65efbfc79e9fff1e7fdbf1f73876ef7ebfc7e7d7eef1bddb3dbbc7fd5f4e8f65df8fd3e3a8bbed7aec5c8f5c8fe4a847acf558663d7e598fef5dacc7c77adc16ebb1bf1ec5d7e3db3289471b89c79b47e2f16ddfe3b1b478fc6ef188c7fed9e2d1b66973c7d0eb77c4baf33bfe78c7fd9ff51d6ff98e5de33b627cc7acdf7647db1ddffb3bfe26bb7747ef66ef8e3adb3b62eb5d5e86e373bbc351771d8e9f7538f61fb3e6fbc77ec5fd63f71edc3fee1fc71f1f8ffa477cbdfc63d9b1cd3fe61fb3f52efeb167cbed8fdbfed8c96c7f7ccffef8383b62bdfbed760cbb1db91dcbbeedd8f5de76bc6d3bf6fc76db71ff68c7fd61cf76c49fed68bf6c4711dbf13d8bedb8af1ddf66c7c7df67c7eed9f1b36ea3757e5b19a6734e6f9cc616a7ffbbbc93ba936327f5fe4eeaadf5d7491d7a7777aeb30dc7adb1d53dffdd3a5bdbd6e5b6f97e5b7fbadfdad65a3fd7e378479d7fd425cefaf3c559677db3feacdfcbba5f517b77144bac1f77b1feb02eed4de3abf37750bf774150ef07410d827aeb4fefafe9eee96cdfd39bf43c5dd3f9da5ed335fd9bf4784dbfede29ad6e5d7f4cdea4ee6e79bcc1e99733ae3c7e99c6df9865de7ef3aebfc5ce7b06f9d1f7f5ae7ffe757e7c7359ddfbbb9877de6b9cffb719fb1dd9dfcfcb97feefcf3e3f6e7dc87e3e7dcbdc7b6cf8fcbdf7fbe7939979ddb9cf3bd8d36bf68f3e3aecd612fc5727fe7a508e2e7a5882dd949b17352f42e274551eb1d725214c9e7a4f8d8e3a458e2f13129e60b82a4187aa4f817a7454e6a518ba2ee9764c3b568cb376f2dfed622b65b8b596b31ec59672d8a5bf79bb5d8f38b5a14b55882f7d322fe4f8b8f6f4d8bbfc91e76c5efc3ae1876c5bfd9ceafc8f915cbfdfc8a5bef7dc5c79edd57fc4ee62b8a5fbea277c52b667d31bee20ddffc5df1f1f75df1d3b6bf18f217cbbd5fec77bf587afb4532bf98f5dd5a7c51ecf8c5f2d3f8457bbf17b1fd5ef46eb6a1f762b72ffe26b97d31db1773fab32f7e1b2b762b86ddddad18762b627bf7772b865eb7e2feceadc8b9156ffcee6dc5feb7bdad98af6d5b31f46adb8a8f472b624b662b5a51dbb215bf5b9bcd56cc56c45614adf8372b6ebdc68af95a115f2b7ed78afdb3cd8adeb559f1b3e2e71b7a56e4dedd252e371946e2d0cb24de369318bfcdda6c242e6f1e89b12d357e9cc66fcba4c61fa971b9bf778d47adb12d6b5ce2cf1a7bd7a6f1cdd3787fe7358db3d5f8b31a7fdbb6b918f77e71e7177f97647371d617dff2c535f1e2bf5ddcc18b1fbcf8797eefe2b2efaf5dbcedc538eb6d47fd98e7c761b7659cb5c8efe3cff6b8838f7f9338fb386ffb18b48f71d9c6e2fda5c5fd923c6771ce599cb3d8e22c2ef797498b431b6971bedde2fddde2b76d8b47dd478bdf66495bb678142dfe9bc5e567f1feefb378eb9ac5f86b16d72ccee97cbb793adf1ebcf9f69f6f37776ff97bbfb7eff7963ff4fabdf57be3fcde44fdd9f2bd7df9decacfdfbd7df776f3eeadfcdb48865effdbf87fcbff37adb7b5657beb9c5c73cbe49aad6f26d73cb66572cd28926bdebbe49ab77de49a52af293f6f52aff99b5e93af5e53d36bf0e77e4d89f1afe1d9fe1a4e6a6c7f4d9b3676cdb66bb6256d76cd9a726bdc15bfdfef166b7ebf6c31bf393a37b1952bf9ac2f95adac3dd6bb6e0de786b9af1de1e47f7ebfe018793348c6ebf87ffbac972a7b03c3fc31a5de5c507b3335e79495b5fdbc824bbb02af0ac23965398e6daea0824a0114b2fae52d0afac8c2289823dbd96a51409b7c6b2e0a9c4c59d75c144069ae09f40476b626c8cd3965585836a044c1c2821285e4e0ef11cb6647ac9edfdbef7565ecc2da9f3189cb37ebbb256f71ac08da447004024210b89973caaa723ad7aa1c04471ee8e201201ea8604e5959abd52a4c155598a9ae7a255eb06a25d3b5ff72e008077470203b501b10d440040d4469c0a94d9e36b73655251473cac8e84eabdaa2d5fffc54e055733bb7d254b47f3e45969846ea92df2ecb535757f6bfac6be02ebdc2b208d333e7947dd6b20fb3ca1dca5590bbe5a8e0b8c0b180ab0057c5c9af72dbdfe664aace6660a591dfe7d98caa56d1bea74de91c18ffbb7bfeaa65cbef4f8ba195ded515188d26ebb7f26e431939925f06238720e79037f2c92a735ac9cabf99a956b2efad56b5a2b2faafa98efb10be05178167ed4cbb85edb597b079420e1b2d363f6455bcde3c994cf63d972aa37d8975a75db07e6deb3a5ba2dfab6136ccce66f98ab4ba4456f9d8472fba0b7d823e23a3bdcd7ad1b668b25959a3d9baffdb5e26691ff6ba6d76ac394d4e92a3443f221bb1085e0297782685c5601ab74d37196eb439655f2673b54adf6df37bbc627c6f63c64c75c9aa7e2cbb1a1a0dcd96758badcdf6b15775af55f63f4646cbfdeec77db761aeea0d7edda4aea2de345afdbecc6becac09b3c6c6dde1aab940a008eb84074c59d623f95f321aad72bb25a37dfc7e4f7e37c0f2bdf9ad5164fb6d5fd5d6550645f635a7f1d368b22757bf6ded9cfc68f5fbaf35d98fb18dd29c32aaa9fad9c8d8668053c838c9759602cd803d1ed05f50effeec6fada55ac9a8c0a62ad89698ad305757bc7b968a6b4aefb1df3025569c56bfff8dadbb67c1c7d61bf37df065f902f0f67815cc29e359eb5e39786be525ce5a4c8deb50ca1352ab541b346518df5bd5bddb2b2d7bc84e60b7258096046d059a98d9a599d4cc85d96c3686014d0c20c1c0c840553368ce29d361eec3ba7eeeb7056fc52438e20fbf2ad6ae735979be5fd65af2ad61560c4dcbac3ef3fd9cfc5ce55b6f5d790db3cf35f66a4e8795f7e7f5c33ae4bf43308c6fa845ab5975c9d5eefab467355e72d55fe4597b9586f10d3d1affefb7fdac4b6ec7ebdd51774eab564d036a90a499624ed9f79c56b3dd9fd3b8721be66b7bbe564c13421a2d345fa099014d3865a55755b9e5772bb19c97b505202df0c10257a414a8a4000d0a5c05bc140072068a3965fdf987ddf6bb73fb71ba9363be95b6c4cb255fd2c9da122f877cab838fedddba1af03dbf75c915d6bbdaceffeb4c79a6cc1901a64c0dad3fb76364346ee6b9d5b269a0de5ede32838294996bc6c994d9fdbad72d6594284342192d3292e694d1aeaec0685f066ffdaa6ec3ad2a7bd1f27dc99039828c48468029c356eb3067ebd5bd823d023382eac954978c63fbdf05e33266d2183f63beb423adda1c15e776aa96b8e307b9c86854de94ee95a6757545ab5cc97fedf0a5e68b46023c246013f0e1e5c76b06af325e4baaf0a0eb8c54d78d59dafd550ded5aef8ebad7f2e55b83559f755523ebb67adfdbc40fbb1a1a1a6ec32dd9056f95accd1df336ebd5c4c938becd8e6aecfe9901b3d2aada8d8656664bb3fbf5cc66c7ca7769bdb8e8702d20c505864b00314988e962aa981d61f6cc29b39295fd86e5ad2ae3a3958c464543f3655dbbba02f18f995243fbb2aed1d06432b22feb1aa94b5297355f6cbfcf5e59c86d1f49da2715e6ca9c33802915c62a8c0d307ac06c2930570a8c1604ba9893eac95457bdaa5632aeb9aa95ac63cbef27b3fbb935538dc836a92f8e6aaad6f80d7b5695e5b7fb6bee330230206006010410a0da7224fbad4535b4ef675757686ad6bad77a45e3d98e7c26929956adaa1123b2aef55789bf8bb7567d8fd5f31dad98ff0da6e5dafd8fc5c9845931576e990cb5c8d8f2c50afbf85bca59e959db632cee7d9991e4f9ceb0a8b0bc2f337e3933b9bed098534995ce0fc6cb2359f5d2e77b2553ca8b1ccde545d6058a2e2c487551d3e5c89cbcdb2c198d977f1bc3e5042e5d5c966c31b425822d4bb43069f9917d1f76411ad514ffeeacfcdbd515a7d50aea9a5565fcc7b2df1a72db3995de36db17a7ea875bb6ead7aa8c4f95596bce94514dd5d70ae79cb29c569d73cb96962be69cb3c9d572c3d41236a7962a7362eb69c1f1b8e7b21490ca2a7280a63967be9d93b44c1e10c6644a1d20e6002859a690ca52284b0573e66b9575b65888a4b066c0029bd3eaf72ef183e0577e1fcb202c1a60a97225d1953d73cedf5d3698737a26abe991bcb275e5ca951f06f831808d015f0cf07145c5d50573ca68544fa6ba68d5aaec37ac1a3122c324c8f97bdfd32aef57e422fb7e6b5eabfe8a0682b78eda2aecbf2b5aee3395d5efa93aeb5a7f6db226de8c3fb4f5ca6bca3ab7386bcdabe65737e69485dd0a212b73e694517d8fbbd80a192b513ff5656161d5aa2a62a4aa084045092a9d4a9da2c494dc94210524215540d89495b58aad27fbb0cbf897fb9cfb5cf3e7afd9f2b5d92cce39fdf1efd68913274fb415c62f92fc41cbbff6f67baf76ae6e671f1617d695ce6f98ef3f6cc1f2e3cf17e7ad2f57575dbeadefce7e93e3d652eecc39a79470caa4a484f9be2c293ea25c3165612f6b595251ee6445f19a73caf8db1e5fdcdd63e5fdd6efaf15650acaa35b1b03c58e8c834119e7ec3a57285fcab0fa7db64a3db9c4953cd9232b71cf5af72a8ca73c21436ebf606cb5b0a49cec103a11d2845093109a7c9161923d218b404ab66555caea52d75c614fab56b2cfd2aa15cd096dd3aa95c61f9639abee9cb323b7d25649aa344dd9c7a5aada546161428949094cc639a78c8a469be2fb764bf5fd0dd37b9caad5e617a596b820b5c4cd92aa2502501d41c5866a0cd59ca261aa83a9af29a77cab421a0d5fdb45467342abcfc935a42eeb6f25a42e2b992aa3a2d1f2256db72666d52b1aad5ac9c21e83bad7a7d1eae33eecf64bd6b3dd96b4555b73ce8e639484934b291192c44f120c9270914242e9d377ff582de6b94adb6f25d3fb918480e4002447e694851f8a91d523201cc1227544c7911946749873d631f58ae66d0df2a932db2f19edfb2ccd8855112aa48adc30972c9175ae31c7386bc9922a7b5ccb3793e0adfb719fd361ada2fd26475a2d6b55cb3219225f10b961ce09c09422d2029134447ad43a47aa7a19d2c5101b645fa3552b19a82b886df8b59ab588ed15a761fb9b5b9d69cfad16dad6ddb35db26815d4f6b3b634af302b46ef6f33def0afa739b795c6ad6ac84b8bffc712ac0cd3db0bdbdf43ea9c5904f8c922608e14014ee6ccc2aac2aa1a737585e5358e59dcdaa8c2aababaaadcdad83fe2ff52b535d6b75582ff5aaeaec06ad59530ad45c8a52925e48d94100382489a7356a9203e0469402a0816104d737ed8ebfeae7140689002d20210ae39a7ec49eddc3eaedddaf08ac6f39dd16ab7b52f0de62d0de67b69ce99f56350d68f1b469b9b33e7152d77cd398f4ca91f55e69cf3c78f99e5a38f6d93a3dedfc6479ac9b3aefc5a65f9a0215aa91e7e7a7ea91e76e69c523dbca6ec45ed59659d2bb7e177bd4b8e91ea51a5b9780892e2f1c19c535666eb4ab3795cc25e8a8728c5638039a7acfc1b56f960ae785fe6b61f0cffb427b5e3c3ca95f47d71f96bc9b36a6fa68e523b8a48e928a4a3c4dfed263def73359273b29666ea92254b96c838c65647086a20534ac701034c291d3fe69ce2f78bf10523252582945694a419ed395971dd1accbdccf6ca0bd716d7579619a92822a2b254d4d49c44bc1fadbace9994d1f497fb3c066a0b29a842b2b2a6259b73fe9852505c0aaa490088a40240412a003152392e4dd9f71867c9aaeeb9bf5f2dad48fb4f6bf51f93bb68952bd1bf45f6d9d0fb91935537efdbc83eaada54f592cac183548e1ba4729c997376adbf2afffed26835dbfa6dae540e22f98abf436ebf5c5d8185dc865cb0c0f8e6e07fd96eb76c2e57576008ecfff2bd6dbdc68ade192caa5a05250ab6e20db3b359bee2b7c5f569ad5a69c5bc68f3acdf353ddb1c9606f3161616c656ebdb5cceb538eb76360bb3e2e3aeadffcdbb3dcc8aa217d6e5cb170c972d52a690b3302beabbbfe72d2c2851705744efccd59514dcf782e6fc30d615aca56cc8995346d5c13b057675052665636b4e19ffac2865834696548d2be6947d7a64df2855e3a6755f43757535a5865b34354baa8657fdb08fc102bb0276e53e87692d185b6fce39a568dc30e70433a568bc148d1fb2e764d51f39e6c35e31b6b2aef597148dd80c1aa6acfc5bee33152df7993655a566945233ce2c5922fbac3fab4ce2b4d8f3672beef79a7346995233625232be909271674ed96c26ea0dd2bed71fc9c92c195fb2a464fc985deaa98fb5594f5cc6efd67ddcd2c39e0b0b0b0beccad65dae70b912a6b5eccfb9aef2c15c5d8149392d21e59493723222150b54e6ff6c98b3c563b5e52b46b6bf83366bdb0569335ad5f9bfad3d8bbda462b5d800521d1420487518cc39b5a654d745aa7b92a2454c99fd1abff5861ec9a968646825cedac3f8e6aa709f0efb6f7d7136fc1abf629372ffb7ffc3dafff536eb95735a87392cac5a75850bb6e47771f7cb5b5d575721b75f3a7fdbddd2f97ff6bf60710de6adcef5a8c609944f0d9428d5802a249ab0ff72d4a64b73ce290540f912721b76ae3dac59981545efccd67bbf2ddfd28e21b75f44efcc77f7b755850cfb8ff37fb06b8c0ba68c7ff9c70833e79c62782146099ddf9b25ebb7ea900ca3c4b862ec08fbb55b930b9abc66b79aaaa639653d7f8e19952951263b53c639c947dd79b56f26136d666282e91026372359bfef5e4df7aaaa6dc3a05465468591421867e69c32aacf5bd7a66abfbd96b3c2a0ca3f8636952dffef1275c9cf9cb2f1c75cc2e052942b2ccdb184058c475adb6a7a573155567252537df6f7948ce76bc5b7d9ad3f306400036ccab6eef5fb71d4bb7e36ac595160cc4a32543a83c9dbdff691bc52104a46501aa78c4655abbeadaa295ac5d990fc0cb05f26294db942c66d18f5c50c5f94f9624ed98bb76f5dab6cbfb5ca96afb5a217836696171b7871c09cf9713587b6fb7911c0243d53a6f3ec6fb6d3780293c2e69cf677addfd7a43ae7b4eac24fee02cf39655f17535c4031270892b59b67471beef7cab752e9af729be3e202d9f7fdf7886b168c0b8bbdffaaee56bfb5b618b4c59c29fbfe6e91dba2ce396df97652ef0aea5ada5cd5b9daaac7359bc9ca6d4e0b3fb2acf55775ae965418dba99a733a4a0bae448b2f73da6eb3a2b4809ab2f724dd70f334fe1e2c4ad2f85f038b923475ab225d9ab2487766ff17b7eedfb5e383450a9bb2485e73caa2224d4e86fd567e7fcc28485040ba4046f54d41f292ddb215abd61d5292397f83615d09d35ab0ae84692d58df1696e89dc1c2babac2aadc56b02b5744ef0c16871285c4c2a29aba227a67fa156f18331fd69530ada5d1a0a84664a324518d7a303262ca7e5ffe1fff4abcad18ad33b5cc76bf2d6b5cbf18898c9ccc3965b45a45ee4eab57b4ef3f5ab592853d576c6b1adb7ecc2220e69c5366d4a2378b708b8e4c1907b392655214b5572d263dddc3b828c2a38826e335927f4ef77aabee5fb6fb72b296e0ed379e85c595448ee69c606654a212128d8904b8c2d19c2bac445d81c40a4156e4a2ac00add051459fa82a3ea8e24a54154f54ec1045454885944935f5e40cd5149433bc56b0d62adb9a8ac45ed84fd55a4545e376d7f7f2875355c6a3a60862ce4965464d61c1140b4ce124a3552b59bee297952d95edf9bddfdd8653a0e563a2782205a23788a24011a90428665040859951878c38341e4a20ea909421220cad5132a30c693de1c59c73463d01e9890f9eb852a85154a1130a6d150ac08920a29c10c1892d4d480aa1890308498a228403213484b206499a532646eb4c5599ad95958c775ead68fc1ffccf5df5ca4a46d3ded7aaadb65251c964b58a4a269bd2c2b6a6b197a95a05a55ef129d9feb06f12bc5d5c5fd4bc56d1a8d43c50454535f53dc659531fbe66ea55036888788f9b12bd33b45aafb8ad95db5ae22a1bbff36a2bb759f34aeb5cf4c268f5b3fe42cffeaee587bdf22dfb0769bf65377e77ed96dfd9d6a00cd49d5f2c4646fbee8cf6fd2ec99aee342e25a98556abf8a8c35aee5d665bb9ad555db549cf57ac555623bfd4caef775dc16aa5d1a8a6be74a761ebe93057573f9660b46a55af7e2cfbd6fcbf5fefe231eca30665891274294a900e734e3026f63071a398a0b244a2258058028c5a228140614405ba61ce89c08c0a044605b202285114200d00614501a23144fd49e08f9339679919a544144abc99730a99514aac51c2871f23e69c5d33ca0f19e5c7cf9c32ddf3bdb29271aa72eabffc3528516c0575cd42939faba192c9a66aadeaf9b7f54243ab185f333d6c4bbdb2b2e56cc5705bf3df6cc7b8eafb4c92e2f73bfb0769fffd77f97f97254b64b4d96cf63dedeafb6ebddfe37f4b96d4aaac31b54afcb0d7fa65cb95f09bab55f7bcc95aedf982b7d72fd79a6df7f7e334afba83575546ebfcbffab5d28a322d56e17d3fec3a2a8907a2923093c444e20932330a093773cac2dea4dcf67ab46a55e66c98aba5eedc4af6599739ab5ed168d54a2646eb0cefe0d72b8f42a2461d3128ea8832ea081d75840051463c9ab2ffac5875aef9663ba86bb661bf991666455acd5b8b5573c94abc752db15769362ed26a98cb59b25af57d95c5e261564cada2aa02e50959aba6ae785fa60a9427e4feaf5b2caa2a64adaa424e95e0ed3adf3c8db57452bf78fb73ac756dc62fd6f77b36fb5a69c53967e74483da984163468d390bc8aa81a388912353466cd8a881e4694e243cd6dcf06dbc11899a449eccf9248139e793399fa29e6ae0783a60ce9893ac307d9c5070c50c2416d0a202854f49aa40c1630a0e8312c885cd264690a973ce9964810dfcd4a03143860d1bb18ece9e1ff75d5d460b63ab15440236283260ce596346f581d247d6878ac412d527481f1d7b34f501200c1b68f02252941088842024c41f1b6010c288b051dce108513730891242805969b34e8e343251410c313feb4ad6aa2e51414030e7a49a51419099f3ab59e7aafaa21ea33f92d7c61b723dcbd9c2f41e2fbffdc33724679d5bf0dbdf28ee5083f9ceb29eede79b5b6fd6ed9ee566fa23f94c7fa4f89d9763be66b5bc78c1b6f897728395f9e29d5ffcfd8666b8ad0c99324c6f2fdbe5fc6fcfa4d6f2e11b6a3db7a1d7ed9814b3bfeb32994ce7b6cba735666b8fe29651dc5f34b885db6dbdb6e4aeac6dbf78d7780ccfcae9ad7537d877dbc7f4c7f8bbfd12c580f6c3ec1f47bbcde88f1c63b7f5d21f39668515680a734e7a674e8a023dc1843969099484a81e0a98b35e81fc8e76267a615757a21716d5438e39a79319c543159348bdfaee976d98c96a55b72efbd6957e6ebdf8982caf5a5aaf4d9b366ddab469d3264661c82a9140154e26eaf4e1000b2ea0983e8460a84f076bea74410f9d2966932e4d108ef8ac11387a269c0cd068e963809e1946c50953bc008836319d45868000c2c9b418640a236dd4690685d90d22029d995c3c4421c008894a985d7868021e5962d0ccf226109d1d35249956a02af8c3c110776614adaf2f2050154c190e02de08aae0a46280830926d96e22a18aa28b1b912d9348cd049a94148acc01c4d88110a3256e66904947206582a2f347142e2a00c3c40b9347104e0558614190a9e3022374c244a0664665f0a7093a65aa980114514f18a1a6c74d8e29455300ba7267ded093268a8e3e93dc002086a93aec25d386d622378f66e0336b54f1e1eb042c527043e34b0f2c4891217433838d006fe0945160cab001337261cf065306cd5bb686d89a4f5f89a0b12280039ca0e0c1079b1a1d4ca7053ce0808608e81c10cb226b930556ba4f8c029c0aa30236b8894d39a98083914b7dba27aa7041ab471c379d1ca91d4636517dbaad24f6006030dde97258a903e74bae140a1f80e8b145124e280c3278f1c14ed415f481076ac093690a2f5a4687214228a04ea551a8e08248870e5dd01d7346b0a2ed98332f6d0dc0685ac2cdb4c28918af8fd0c5f413414f6224063b53870198b4a009989a292c71fb064884b38305b008ba81f5654e4047ca0f39681834c930498489808830f3cea4286358e2ce642006af4533e8e06692a921c2adc0001d66982fcd922fc639b7dc29a203ef9133b1b860c3092a3a7952b11840203a30653ee933f534c1055dcc2a1cbc0a153122d09c4a32c0252376049847a2acb2b811e28259c1b0406fbc24990308893243251d3fcc20486470722442a2e9e3812315a0602587c9030813393489a3644a5142a18a3143e430a36674b9c1d9606b061086c7133020ba9838f87861c40f3237e68d3308e8297e904d007a8cf183d5242a660d30d468ed508469d2f84247223975ba49c3461229d4042167cea8f248c81c192a4d190e7021868e1c49f3a990d411855ab8f3e98a2da2859137d34907211f88b0a381e964e5861e525022c48c01eac152077dec8c855a842c6491c48c41c970b8402881d9f5e91044c1bdd9853df188269acdae4a0460789edc98748c3c5a12e93961d23f49f42ad24c99b4842299f218f1c0a4fb4af7f3c0139386b1433699c234e9123f040c013435e90d9b21b08d8f39271180e4c98110e68462841864280284398900a14917659939f1048ac286ae2be63461c6d7c50057736a008543c089803921f081469e131e98938da12aa8139e39c12d319c1e1c73a2a9a2d64d7234e797050a140a62664e048c844756a8604e2d22188252c781390d2834f62532e62c40082e50144531a7932f37901253e664323b628b3dc69c49c058b42486d89c4666121e2226e61cc2c6080cc68833a700596857ae3e981308adc9a34c03ccd9035010512ed49873471b36b42443e6947adc962e04cd0905470629ea589a33071472a2a821d29c38ca502990c43827009972601994644e1b4560a943ec30678d19866cc044863969d8e0001b4638cc3963892c02a022e69cd1a5916900694e1960b8b0410630e7130c380ec9e9e67cdaf1c4158eb4cce93407840a9eb833a7139024a8981068ce980d3868f47061ce5857959d4629ccd98501c0041b58cdd9cd40830e107498b30397bc981e73764a7cd843819d3929172ac822e8e6a47cb028c8ca3327e50013d7a21973529bd7159b0873522d7e2ad0a4674e4ac412070568cd499d1cc881079f392724fa63e663ced9c4943e7f3a9873ee3964a70bd89c33061666d8c069ce69e745211298735ee028ca4f6dced92613a523c2e69cb9011f20d498737a595ce8b166cea9c0541c1bc0cc39bd7edc80828339a7972f4a3a77ce79800a858cd062ce7905e5c19c70ce2985cacc156ce69c322986f0f8cc3997fc70424689392792412538e066ce49e4d21a27d0cc3909a8e0cb9a29734e216b6ad89060cef9e30e06076c30e7ec3184ce08c49c53871549c43035e78c8ae2cd2326e69c5035a220c1d19c334728eec89a73de98a4951034e704e08e070540cd396db0a104e48639678d5a10218fe69c344445108c31e79ce1819b2d78580257c160ce294300da140f9061a0ca9cd3690bd28b9039a75316d2470b2626f6d0b92a41c99c333645b6f5c19cb3c3a20e0e30cc39bb3a6e4ef862ced98101b068ce399b94167f93dbd6b9294fba67f5c835b35fb3b52001249068fa985178d244e109f334a3f0787133a9212ebc1cf2217744a639272dc150951716f0ca84c29c937a1069cac3c10f0e1dcc39299f231a9d7924aba4e79c3105c6af199ed8b1e90b185488c14b07107ea8cc3969160fd074cdc1c0843d734e9a41a42154fbe9ca0c734e4a442c02271028d4269c73761618d9818222247f00cd396395b46020071a8e10418b3927a59d60854c170f185832e7ecce086ae2861f563cd1c10d37e28009b101d2d69c13002c22960a75ba2a1be69c5d182e591865a024034b73ce180f0e066d51c7ce9e26e69c747ca1011e5638c3c58f3927cd83a73671ec716104102ed14257631c30e7ec1655eac0014d75145199733e91409b214208688d15734efae7869a2c98260d3962ced9adf4733b8a1143a3d12aeef65343e3575720fe31b7d2645b6bc9c6d4723fee6bb721edb7d6a2c91e77bfbe8ccb8773d211649d1c69ff5d34d83fa8b1f530b65ab407ab6a02f51f9cfd831acc77961ff730f28e595cb2faa5c1aa2d5fb27677fdf0fbbeaac49804b90d6d7d2f77d13e2a8cad96ee3434f539992aa3da0fdef6e73e1b525d5dedbfba9a5243fb9bed63be6fa1a1a9565634da776935ec3ad3b670a1553ed37d06ce729f67bacf6815d4d8e22ec9e6bb33acf528db1aac3accdd31ebbdacb964bacfbcacf31db3c6f06f26b3fb6db73eb9676fb3e38cefe776bfcceea7d54d82bad6b7d9d1dafd33d9d656936c2abf63d696326bd3ac9ad0ee684bfe376c97b8bfdb8bacc420a8bf6cc3fadac3dad35defd1bba4adb98adfbc0a6a7bc5fbf36a0375e5a4ecb95579bbb67dbedfe5b55af6eff96e7965d5efbe9752f6c40a3fefb76a91c964b50a0a132db5ea09132d533ddb2fbfc7ffab55f7dd6fadd2923f345365df731e56f2fbd0e3e3bd595e5bb8b2bebcc8c0fd1d7cf2c904beb7d92c186df6b5965ffb8ab51e6bb5b42217b7fc721acdd3bdfe2679fd9b1579cd3bac77aebf78c9f887601c5b8f572eb3cab1c516a7f73866553efb4f6719ff4fe7ad651c632bebf92dfe5d39a973c96d7d2f732532bbed0806a983a884ed30c7a118644c2164646064049a20080a231100906848220f072462b958d7ed001480016abcf07222ca5910e51432c6100101000000000000081202195860d5c41199c3b021a5aaca439f8ef2aac6fbe0bce16934c07733c1bfccf97adc8be6047cd02477dce595db2b9ccbe15a9985b94a17ea16840c5e16a7d7e524791d279f8079df3aaf8dc5eabc622f88ad2a30aa0260c6373417caf7e6918b273c82e0ab1694c338250196fa7125984bf52debc2e65b55029834d14c14954d1b844d60ed1989ec201bb433e9da694a8547a3b3ce04616f32eeda086bab1d668ce03da83311e896341c3579709b683194140416a11685e4b4b9dba5e467f4c87b9805909b7cfbaa53fcbfff181fa4367ea8d33a04ee44d71fa3c19528ee330a80c3aa95f96a77766e5307d733f9f29e880094ad40550888a7a4ede4fcfbdea76dc0cf003be6c9aff25be42c54ce57afa317e34d573bf9bbab68925174b106cceea0712416f219bd1280850e7ccf48402bc9ea6206c38cc2b10234941a6172fe85113520caf5b00ac0c785f3e6dca067917b4c071755be11737e2721152cca95b91e7d1a02122a69e32a61430d32994be00dab99e04dd9bca43bc7c86d361f6aa4f7d17990b346f04df7c7f83af92f95d2c87b5105718b7e7e3f0a41dc066391ab8737f72e005a2c5839be3a33898fc11756a0eec903c61e495f51a7671ceda7a0c54b7a37195ac1850c8a870a2bd5f6d37d1eae8730793a7ccbb10d7099940ae2ba8fec80b2d080e48269ee2df260f5f28edadba010f77a8796c8e13b4b56cd954d8d0d8263e596b51e86064e5ccec6199957d14e64ec86c5dc6e97ae4ad47873b21506a5c8982e748ee4186e5795ee5eb1f7f00dbbfc567d83e17612abc12c42c33195d0ecc236fda57587b2ce28fcb80727b398b78f6f5d27bd5df7e5052574141b4df473686a793204a0a410f8494788806c37c47cfbe02d0541c4a4042f89fbc433195236f08e55a2eead5758507098540500062e45c267870ed47c037587b718bd31ae91956904d3cea0e96586e2a8c06aab69aa19ba557e55255c099307cacfd295db713ac88d6ccdd9fd0da0b5e19e5fbc282ad02b33992c633fb14a7eac3917926653ae81a5137e23cbe127013f486d18988715b81869b03975801a302fc4f5449d45a3849d8270303e55da1c481b0b71b60fae371483d48eab914b614c2acce3afb5cc2961246f954b8a4f3337d76eadafa3a57d98fbcdfcebbf2980814c4b4bbe334fa4f6ce5573750dd4939e5ae4b459516526208a2084d9458ee82dcdd41d9f20d8bcf6cf2a7df6d8dcd07b6bf44a472143891e794f6e656f0d4c0517509b624dec5beeb06080d78b81fc4c7beb95afe9b3e060b14cc784fb2ba13fb0ec0255ee2f77496c15a5a732ee943396f1a431e2607cd27d37d8f0d2f12b846ed2c48d2f4d8d3313785e10575152355410054be7be582919bdb63854a886c2497f50eaa799d803b971026b016e00e285c58d512cf03bedc65c8e1e5badbd93e28c8b849d976ce73b69f95fffd9b8861fd887cd7a86d9dd994e510c629778d6cc785f6ea2ef4ef93b03278ab5fe1ca6ce57e2ff9fb7c7a467b29f2ef0a68fe1117bcd7d7e6765ff0381a86f403400b663ae8acf4bc3eb4d44fa817a8b601a01bcde548698628c50edc2c86904df5c98743ad344c01a9954a2ae2bd04611ab9aa3e18e30a25006977d7004f3d2fc49a717094863f27fe2f755194d5bb0e0f85d5dd3747762b1bad5461896b274cbc401b77351a8388675297e813cdf7559a87b5f06e042df3822a830c0f611566049de2ed9c19f5d599a389f4fcea65fb9d846b4f1d8af31cfd097f24d538a776982ae77df52385801e290f28495f7f4c67af24e79799a6ab34b1e6c347d1ff5f0db948e3343674302f43d64c22bceb1f7b6e88208b344d498242193ff1678eedf3f669b95b44fba848d43b3bccaabd360337e15721806fadbdc972e47d898b746377ab4cc140ffa7602cad5a7eeb457a83e72e3540954413cc68c0618d156a402baef7d0736e8471239f59156327913a1df71003b7fe011f1d32d2c78899353f0cefcd418a4b2a7b8a76ffaa630c2322cf67e76afaf28c1c35c1151be3b7dbc08763b7f58225ba033fca91c293a6d27e701fadbdac187303f403836e1dbe373a2c32882ed96c68eaa5e640c36c517d0db76b4a049a7b15c0b2e872bc1f3f647bac3a57499581988f12875df9be4d897e44abc3ed22e2abae5642fcd31894d3816b15865a77ea8a79735bdf4baea5fa376bb386b6d03367bc2a682ae76cf66c7d9f957f3252e5d6a276c59f4dedcf6dc28165e7d5598b08fe090bc59ce2c18e73453894dc6a16bfa37fa4bacc0519bede9db84296e7736508d263e653c1398c8f86760fb492fe093e9518f27c2c3ac6e211b4d0598e33800c3650f17ab14c81791992770f31091bd82ebecf5b5d49708b217b54c91b049d70b747ca39cb4db9b6f77b38b7955dfb57a6653d187eb9a5e3d6e8796d61c905e115f604a8ce3c3e4ba30f4441012b5ac1eb1c112f6fd18518da0ece482ebdbd3ee48740c40b6bbb0644e4a05a098dc668481e188ddfc42596055a2f1735efcb5a556948ff407c506592b82872bc3d9e0e760752fc14cafcbfd6884788bfb0461062fe7763b0dace8c6710a7dbbf7d6d491b256ba38167d66968a730991d6636d3d2b018506924dc41196585323bfdeed1231b6e8f6e74115f324d0eb41feb1d718ce72fa939b5cbd2af8d3f88fbb5afedd8011c3d38d2b0110f61a93e2f470aa879b7993750b008eaf6bebc20e5b36450cd07df17758fbd7f57d8e6c47e680dd3b7ba937d063c740230f1ea8b2fae1a3e58c995b3e4366606c62f912abd9e0ddc123d610e38c68818746455a17c4f9e3c566fa8d0e3ccdd7bbeac49ea3bf1af6d0d4aed998f0e54c3b2c6db05751bd77a0c88772f10f280c3c2f58e0b21e78cb074345d142723174b599729b2912aa8c87d744c29c14cf999e885f0411258ea50ef34805145370151d8aeed94982f5fe0e0673f40fab479fd26e0fbdfce57c40bcd5d63f6915fe216e691d521ca6fdd95497dd7b8db902d6cb359b481fba3872ca7095b6ddfc72955d30d6d3dfc2a59bf831687dca4767420470e38036633a8240117e0eae3436897f67658da0c3896976d21eb09dcdd8738fc2c3066345579b5ce3c7e4cc2e83b2201d138ef8c7228463c8d90d3e174bfb7848926108d9188210c3f99662d5ebf4181efcdacefb06df1be5fe3bb1f16ef96cf064db7b7f3c3c291b881fdc4a575763f966115fab8cf72051683da2178d3a6ceaaeca45b79af6944f99d81a32bc94d210fbba29c02704a8dbc463f7b561ce5e44fa510c97993c98eba684cd7ba417c15b7337c6eef16cb32433bd3ad1f673ef66a5f5786ac233abbde78e7e3480d3aedd8033b161f2caadeb2c4dc91160224cb7774be44d0331d5ee8679219e9a6e3eff67bc3e156fcd5f9e49ed0185589ace9758aab554d2ea785c63ff67b8fdfc7b65708238ef555b0b785648028b61a034b2495289c1a45f8e898aac415d37b3502597fd46307581ddfa31b92d5f0768b8b116ba80969be75e0a7fd07591fa6865ac708e4423375d0ce5b8c60445a72075dd9ef4b102c056d70c9741041eb3733f46f6cd99dbc02f55e8f676e7d18c9f26ae6ae50dde2ce2834e965efe9165e475e239eba2c3923c87d21e64f5a06faebb62bd35f88f3605f623afa0cdbcadaf1e8d7860a578ddb02d12a45e043a4013990fc100ce211806787ff5c803b1a9703d3d7aa3033a8c860b134c1d87053be076741f5139845b07757b9582c200f96dfefbae062f200aa6901963a2d5ba7c403ea85bb92185085a297741f323f457335851dba8f33f9100dfe575163512caa24ecddea20080e0f1585b59bf183fd247b43c12bfca751dcc226230b1ee1a13f5b0987a92bc9d2c0b7e4715a2145b11dbfad269c429dee7e197c3d10c7f1a5c4265dd70de2388adc03e35792053a2ebc81c023ac0b4d4531cd807422c0db626f56a98a62566b097c9a6c29d0b996961111f0bf686edaea85268b5334be879f54ca94a10fa27be09dc524974a88c7a56348cd9160436ce75b4b140a3512f4cb051d620e077a8bb6b010ef04288b2523355a0ba41c3cb3c94339ac38e15627a73dceb65296ccba22e65d32c9c9c139bfdc3a2f784974df57eafaf4871e14512bb3690cdf625bc600bad30adef043d2cba5241582e5f36c9e49a43ffe642e5991040712f98ceef1e28285c94f81015b9d31c7aa13756483a8170ff115a4077c24abd666b6e95c1dd67272a7a1b3a5a8de0ab56e0647d057b4c2b140a34d072fd9c689326c775dd69d54411a9081829c3586cd440962bd6926a4764547467e9eb43788ad07ead28fa7dbf3d7489a539bc975cfddb38f8627c29d0aa8f2fff561b1976739487a7f45377aa807cdb21cdbf8962a8d79104a43cacb76a188f1789f673ad4c3a5aa6e03a6ab00df6d66682e03da3f0cbc4a65367d370a19ab974a383c2508a29839fd01af37bbb29c18d0e0bc03b4c60293043677b1a95d8aa7b14a75236ee1304c41731914a7c2fe846d90a801811a0867aafa76628d9185ec40e56536d9e7bda01bbe76941f55003cea91e6fb468646769288ffb9f1f16ed782be5e4ef8b79c15661b105e27a0957df96d62a4461b41968344e1f78402d69a64483170e6e1b3eb0b0e90099ce26c3e3dff6c0b96cbd95b6f63135a6e8503bf92cafa0cefcc97e25c5c013213c637bdf256800fc8e4b38130b24ce5819c24f434ee739bdb9d3dfe7c8c9051e0243a1a3637b8657b0065717217685d2dc14399491f4e500b700ef8754ed6dda1198fee5080e5d8324dbdc79a7ca3157145d9a1d8a9829a6a29b814722030f1e84d058d2c2de31d5dfcfc4932f02b8174c78b2df9ece715403ccf0dc5a60fb2113903b4b2979852b31c2bb6d39614113c3bf769ab5b6dc87aa541febdaae4b172828059cbd71d0806f08c937c1435cccc0ceb8ad3a008a51d7750b06f64bba6278c1895fa03302a090b3f4fac2018a12c977d3f37947f1a981183e14e867b2be9b7e5d750da259a0a65be6c25d77e1de4645e26dd0d009df7255543af20a448c7378c7a9a397f3e4067d8e4263e85c77d6f70f01f5a856c60e9f8f3bc4f8d088dec44dd8fd89fcdf8d4e7cb09abc8cde864303f9f84ae1a87c846ae89532ff4a9fe26cd55d402f57ae6c6e5f045009f3aa7595433d42846c8c5704c8cad14cea610a6bbb2b3d5f70524f07327982d3cb55f6204453d0fda283c8623512e9209797a5adf8c996a056b55d68871f5b0af1c3cfcd316cdaf1bc0418018607e9ff416ff59b7f31a358cb23a7d877df6de4cb2aefa5000160bf743caa6df73abd2943f1420262a11e2e60426ca1aa9d9c8250cadae48eaebff6a438c22ce9384db04298dd221e672fbf8e64bc789045df73687a67685651f1a27592db967b2931adf09a4e2b003065fafd39f80cd2c8a3ccb1e6cf06e57b92b7ce0a93652d538276b4f43dbc5aa0f0b9dcf9378fc9a2396299b6390548c7fac58b9075462f10a61789354b9517984a4ea817456a0522939c503fa7872c0ee51aa9378e8f3ce562fe9d4a0daa8b85bc0ee2110bd2cb3048671da9cf8811ad94b38b5085974a82e0dc3201a6cddbcca4ed204596b7b38bb271a61fc8c1a709fa45520d0e492b52d3f2b6636eed1de86ea97a7048e2440f685591ee0ebc84751e1dfcb58baf9a21d63a62f6792ae0b15012b5783832cc4484217780ed305e700031d42304f732b7a1e9daf4f990d9466a433be2482ee91bd6e0815e893a45412e59a229a348502d2fab9337082a37ff97d5fc5f28cf4f09f07ff3fc80f406d7aa7e307804a7506a20ae0797c78710b191f8bcda1dade842599d20e2e6c272269a6c70297f0bb9a7aa15b6e67586bbae33427f7a76f7bff098cc751d2ef2755eba07548ddb904722c87860476cdc96a4e4476c7443b2bc8b99e6263753a682c3b504ee02424914f74c4804c0287dd358edc92530d43bd787e1713f5643e623636ee5c210b2a91654323f63576893743bdaff4f91746b75c5b4a6d510656df24059ae226cd2e50986f8d3d59a79dc00db95e05977cbb5a20db19a6e45b137bd1758aacd872691d810db36ac512a9467c131b98171e35fb630375deb84fae62d217d065d7bfc855793aafc3ec208c8a4005d8fd2ddebf287cd4280b36ebca3ade326effe7005e9e56c59ec5ba4bb5987908c1fd70fc4aed201e9bf072a469c391e1595499edc5f416aa325f24b5edc2fdf2ec00de0fa9999f61b8f0cb9613a8a8924591efe9d321ad5f5f1e60681c69d887fd75b0669047956ff629543a5eecf610715710bb1871972213ee7e442aae20f5e2bcfaf295f4c97b20dc127dcbdbeb6ff3abd76c123dde5671d5346c1b1db7d06a2f39ccf38a84934707486806c6caa6985f005374eb7df96665fcd6515e7f14fe5633b44c86c0146aa760b583dd5e36e4a6b7ad2f3a08ad73170575bb1ca9dde8a045abe4dca13748a4d793da82075f0fff8968e8a67bfda723821321501521892cbaf2edd7e2d4f65528433da68474877d3abc31367d8289a5f876eedd380b6bb36b9647d0b159f8359f18ad19f6f1e3690f0a07fd7d598f5aa8a8677153d32c25e73af944b81752ff27d1d29fc8d795956bdbe22c2dc95443a6185848f90b84a1e6d8ca4008d002b6671589ba7eb6143c99152de71c82ccca65936bd0f1dabc50a6b196a231625bff0bf8320317883e85db17a38c1532b41270aed8645145c3a9c59f20d73b04d4ee21acab690fc7e6aa2e14554561701c416eae675a0e38a84612c86dcaafc45ba1bae4deb15332ff517f7f2c66bb847574d8f5ccef2d13d3061d5e5cae4bcf121251420e7fa20eef8dd6577e97f40c8c8d791396434c91dfce4b8cb3973a8185a8c419b4ff3bd587f4570f341c566700421c22112c71f44b7d23cbe8a3bdfdf87721bad47c76579f418f2b5529b093273189a146a1d3c4668bbd7aa5e1b66d1b6343c13531ba5f0c2931e3674d7d7a75691b9b133407922a1deb7a42ff6bc91b11dcb48b4d1090df701a8cd0c83a658627b789993157f9aafb338da9a0c2d28fac648ce0831ba2ad64a4ea2ac42766aca1f0b5d3c56550a2d91c6472005cac2a4e29a5f4d00f1e71ec1c45933b9180ed18c30238736df7cd4468d2f3be66f169b90359807eb33b6d926847bdc5d2653ae8570178059a56e24b691726fd9bc1b629e4e9f4c825624086ea2676b73707ab226e210ed33a700f5a035c575067b01d0c308d01b6d680ff642e638fd5d441339c3d5813b0b5b88379ef9a7d9eeffcc1e9b34dcbbecaef3f96ecc0fc6545d6d995a3c50de3e377c4ee7e08e22bdd58683b0c66699756501fd34a7e5aa3ddda52633668fda6ad6a2208b51e35d9a7e3527f392dcb9cdd930ca9e35262d5de8dcc27858c6c0b7ab1d0c57be69d4852e0bce1c72fef98c581bc6d6a0edf6db7079d3ad7e2c7943f276fed3ef1887c6122d9a0636617f98d69a3a690aebc8af27b27c4833f3a74f6f01db7a9a1484fa77e5901ab359fe346e97531e9f43c32181419933ffdc1a98f0424d01d69fc872471c84aedb44aba0299b7a830e949ce2b05824a14231a2f3d71f2804caa90e592683c8dc1a0843f8293901bf073604adaecf9213e24e0cb5ee80097eab65ce41a7bb369c15d5c5ef9d6d76b75bcda43db973624d8d2c8dd27304d35e175ea4c479f6494c5219caac5436362c8c49d63853692b0ac088b226f8afc66ea6ea73c71765c0519957874c56dc014ea8915d07c97f73f0de59e99fa555ed441e76d612be6c23c06c53a9749b98f86c0313b2331488beed36fce5979325a00ea4e44c6dd00810a3ecc0d2383cb3d004aec057783430a76f2cda6011e928b55748ef69a9cbf80549381314d4ea12f16def174369cb0cff93e6059fb8d371ee8aae93ff63cff614837bbdd617125f8f8629629386940e724c341cba9299002e594b1feed783284005add9d377da23a1381a3ea2a57bd0d98f59fb28bf0d5703d100a2f4525531d587aac71466e39e02dfb7475209c20dc9d31350df02756e156c36003db29213043ec782bd6c95dadd8c455ae4dc5000f97b38a74b3343c8fca3c6da24b8161c45feb5be67ebeeb65a0233703adfa56f6baac28cf6e30ca7d8d08d6847cce9072b95be5cd2a93c4db39df76cfafa5c73c65654c06c7d327d102568dc7e2d56da37b5ff7f240116ae44a3287b74681e97da292490715dd7a840524567e94a5f4f5ea351537e128bb47a4ef66a16cc11df4270a88c72c81ee8b29f1295b1d1aeae17b369ee351184a8ff2dcc76ebfd8a2a5a67b9ef912c0bb40dcac26f37e99e81125c682b90275762b916c0add58cb7eb1797a10d052e8ea8a4e61d7cf7645243bd26ef6ddf9de668a3081151b25d057206e70e7bbdcabb2fa4b20a23371b10c4695e54b08728b06199ff7ed2dfeb48b5b21419fa274131fe526c631b58caefb6f17782fa32a2ffb7c042bd70df48d7023b90f13f5a7270f5c9af1df09345d85a8f68a778fd301c090a4ca5ee1f4b1d08f4fb08906ec877d9ca85a461b00e1711a4dc7ddec969e05ec392992e0ad45a0b9fd0d5614b0135c8708b347b14544417b7c484d36be2e3f164bf060e77a8319daaddef76398916d62649ddc17a335de1f6462e2cb335667ecb2b062c160ea1bbc8db91c5eb77311412138d6837e6ceb5c0fc8a8dcdb1e7c6973c1a157e59a2a82d3a5c66abab1621a3f9d536d0458c2ce45840f4a4f5a4454fb8a2fec6ccaf3a3c0b97c3960e23d7f08935d2fd80996294e41f932017ffd950e9c57d7ced0dbfee494bdf7ed53684261d2862fd88c5651664c3a3af53d41aa1fee8f791ac3218dd5841294299810e2fed014acbaaaac9f65476c0be06d4d686f622f7314ceb6d55908a2d8622a879054c6645e999e04b2ed02fc3f3185e4045d1a1ff24433eaac32eb4367ecd70d9ebf1f6e747ee38b276b736022b579bbf6433c657837839d5cd1b7f590da09227ab469384cbd3f336fda5adafcc41da224484fbb5d056019810a7d0130f53d886dfd3eedbb1e268a20d098b6f9cb6d9fb3b53b408324a75cded8c82e16d2986171ae3c40466457a25688bc3aa93afd27b8afd5f22e1aa71ae750a7cc438358a6983b434850e7afa989c4e05eba6a88a66ed077cbf2663d07690f8d1a771bf2402ce004fedef756e3dd0a52fb4f88039590c8c8ec454a4d8da914d48e24110d3c3e87c3d6401a952698e3191d5c04139ea249a92de77779e217021b56af5bc9422292d00b322ee6beb3ea7fe265a704b84dc6fb0e4d0e532500fda1a57f4d4517cc2d8729eb88809715ba49f2498475587c1b4ebe42a671cff045ef970274db72a5b5a653066226d1540df7838869a5a9f6abae17b29acec9fc3ceefe716c9df553ad5386549423cba3da19405321470e2e88009d1dd43a13f32d1df853a2ca435c1366d685781b62d466028aa2e3434f2aa98b6a48f26e3dbbabba6d402c7a1063eca3fbb6b9c18c1397ecec38259eb1f69060dd0690d17970eecc9868fe57ee89dd8f13fc5f3874ffc315af9e61ac6568f920f4fabd5a980df650be653a205b55d4a202f2c3896224e197c4ae95d2e8c48753993b9085dd83ac8b0917b7c529c2396130784d820cb824e73a67f31432b98b7ab0b834d8a30df6b956eaa7507b71ab1631cb54ec9dd82f988e17e616ceac84a3354ba5d8cb531dce13176e3756c2efa36032995efaed8ddf0ba597047a3c43433d1884ce2e193515f6fd18305e4c27c0cc41550f386949f0ab3fa1b7dcb02107b26af806f39eefcde0ce41d0a319ed45e693ff66c990ca79319f0c193de03290ccc85cb5e20eb0c4ee7ff6e0fe6f78a75a00cf007c848db54c1386c833e269b0e9f1098065c5aef7aec167bb8e2438b4a99ce6b89a43267658884c9d78d2255ada575ecfc330ac8c8b5d30de5de9e165ec1e074a5aa07c9a00d6b6cda1b50b5e882a25c3cb8c90fbf80879eac2dbd753bcf55975619de4c843c49b829693f208bf4c025dc4d72a8c1d1864ab3275ced8fa7370316bb8fd0212c9f88c18ccd2267b8887687593d88c2e5aea39f5b51f57ba2e0d031ed40413732c7cd7033e689b6909d512bbc4bf6ecb4ef9a44f4b705992417150043a19b06239c6efcc90dda066d6ea492736ba441e9b85f8eda481e953ecccc064c5d201407cd86c243ea3be4e046cbfe515e2e08e1ed234f87b697b37fb7e278ccb7a39210a96fe9664c8cb1461d3b15db8bc8f7bdf79d65f936626c4870c781cc856eee63f07f001a4f38e75c8f5d32da2f86cf5f26db48325c44d2f41dc979b57f782b9212e164d7d697d089247db7f4b07fc6e0dcf70ba6ebc00a6617f4ad1203b56a989be2e9958c83050fa6faf7a9e9375bb2a43bde95ffe03489770f02095e51bed4ce5e54ed7cd2f7e365079fcc1cacef0c12cfe53241cf50729883530a3719431bbb3e6395b1ece5c058488a4dbf4c311c7f63ac97519ea99900891e0e2acc43cdd8aaa18cbf474af530a684ea82ca984b03d7015437ba881e924cfc0f185d36c701cd17690fd26eb40c5bb8463e9143791c37fab44392a1356737ac9a5a0b42a213c4cb5de49e88d9ac2f9fe68c2ffff5bf9e677936097ff2773a8f047cc71a85bdf2326eb6299de2a7031245d68a6dbf31c21bffc8c73074dc0bd7eb412f83868493e337f82a89e3e6fc83a8e78decb9636798b85f997b086b76d9e1c72efd19f4b166818e685ecc2c6dbee40447e37558f570b54e359003c65f15f4ec49d6c5653bb7ddbc9e7c8037577497ab48f440f06716331d690ae107e45066642798302a9fb587bb4b3343f3178c42ff95be7cf148311262d0af8bbf0467e774062ad55755bff4f882088cc4d90a41179c5c1247a96e28ed92bd220b5c55291fdd8470f5b7440047ce8e3a46f6a9caf73e39c1030ed4c0672511200ac4db7f857917777feb3e6cf7efad51d92401ddc9adc10141cbd0165d29ce8be3ae4ed4d77f054bb98ac52c3046dc800e2d5dadb5f5242676c9f1de5fbd95df4f2294fa4d3e73b23c3b01cd04cd2a02370bdabdde1e21ebc177972049f712af017d68b2212c8cc1991de291cf7839826e649b86c211dad635581e205cd3b1ff08f0611d1017c2c7b55c3bcaf95501fd4b48177c6340e0044be1a3ac856152279d661a4cbbf980c74ee82954ec9f29ee75a2c4cd60200f857f1b1ed3d853dd80529ddf89e36c9e9bdebdc8d57602adaeb9af9a38af6b325609958f9749948b419b9a18a3aa8d2797eae9f2b237c1cc4fe342ad62059550d46e42efe66d4ca61ce8d9738e541cdab21925e42869da95ddabd1dee9b6b57e1b03520d8fcd8dd68ed974a410bf8805f8858219f5584909fae99da6541c8b62ca4e12073ed0b792eb1ca802257e498208c23d88ac096fd6c3b3aeca77a7f055986e81ed05ac3ba423b49c24460ea3d53e1c4a50c81f88b978509748d0d14bae2703efff382bc58d5f50dcb8292893c1dbb6dcdac8694125fd905e76cae9b26f14af6a438f8aab28b587a42431b458c7df8f15bc89fd0ff515de54d69fffdf40f0fc967acf6b1727416081293ce86638a26717b425641fc8a8f4a3cbb063823ee6616af0606e5f0223b21df9cb27fb3faf2f0877522c7531bba92a15aa990e352b2758db5b0698e405b20a98c52224d5620f6e42b47e9d7c52115cdc99e13629082e76cc6fdd59ed9a068d0e29f117434a79549123b8eebd763716f88d02f19f253ec01db3fe53893e21863c318dc254ff9f2fc8cbc61a687345701ae6de1951c8e7652e20a89d8f579cdb9b30b648a62befc60948282ae31930d115ac2fb4953f07af5afc80ca1587397211586884c981909db908059e0f1d8f385ad968c453219f3bdbea723616e19ee87479871d0011a051d9587946878904de63ea191a2528e72f6e1dff4f6fa03271585af4a2cd96826d833bf6350afdb0a2d0962717fda8b9a6e7ea311c2c7a4c6d110a754e76db6fb04905fe47088665af311c55432e96c9ccd7fe44af2973d5fb32e38f70b3f31b68b06d5053f30f24da64e58dde98e4d8a68908001f40c12743190fc0a300c1342991efe471785951838334368a35bcf718f99a9aa73332ee73552a20cdefa5afdd2b8ece7d51d599698e21eaedb25b4842225ed0efa7e5fd1f38f676a481d399ea45b2eadab02ac9dc70abe4adbdf7d0cddcffa4225fd243044f3bb95ceed867dc4d89c6d52a614e53c645a0c61c0478106016f7eeb6f27a551c300225c2ab920c5eea0e99a762135c62d1de14875c1122e2ae9623a7a36b2b34c7b2ce2c76a17d1c709bd437b6aeed311fab77cee49489efb0107144e540bcb44ef5a984a4cc39e9661416f9c219cc1594091b7833585a62fe21c2b9e9060b883c54e74211f73a56afe52104c871b97bcc8241bb0f414a47d952964a1b8b4403a32eb3fd90206dc725f2f4ba017b2dc1b57a4a8ab95150272cb4137933dd9cb80a69437ea94de46a473958497c094d56ab0607a2e93e3a0ad8d783a23d320190b35107b1b8129d3db0f46381fd76f80099e8fca9ee0e642a1941c70c380d20540ff00119ab2e8f906e15160ee3fb78a8cb761c17569e1eb20e16f7b2f22bf9c70979db8f509fe834a27e6d28a11301600e781802c01f521e19111f963101bc3d0248f0792377e4f2d0e900e2770436a02b6d8a79321f93087cc8f8da3a20cdbc0235bf60d9b5ec1363e143faf4508742509e1be3e6e21309d4617d4f5a586e13a3df85b08fbcac830994ecddccff8f0549e9706b92aeaca1c737b18790d400d9611b5f08d6de3c3367fd7340a8f6de763cd877c16ebb2985c01a1c1a877931c969f1a9d6c7c404c22b227891cce10c1c257cb07f8f171f3f3091d199c34db6f8697b1bbe2f1f7c77252887a5fa15a07a439e35b850e65aea33e45388cfdd9bccb06e1166fc50464b1ef373ada9245f30ead88eff1c36d44555b8716272bbb84d72fb49439d0303cec98e78a37051c346517a7597d17be88777522d3de4a674e9ca1a24016a4800c13ca806a35bf7a5d0358ba90af48df8e2d27479bf558eac6a9e57e2c80f6b582db4e7db041327eb3ff083e0571562a120aa2e47d555aa4ca92732e73376e0c98c6ce02740c922535dba619e64ee0edd8a9d35c8e35a47f03094db2de82107d61838e6ba915dfc063e4e80bdc07c74276cc9f070531fac24a4132c794c3db9051f06b22b30d82b38bca71bbdc07c2d9bcdbde7d0b23d8f80a94f36e2538dea82ff8eef76e11d3ef2cb1746d3afb7b4df5931a56f7a163ed76a1637f5cbd40fbc1776b8d523839f615d4701682628bfd0d076663677f6f3d9e5eb77a98c53b8f4882dba2357a5ec582b6306f1be17f915c05a27ee5e4484b6813d63b35e80de085a58c44cf4723711cc38231cc6488a6c1d7b37fc3b79c01b2f2e51b7abaf86354a20534d0f97bcadfc71f4b67bf48534a1c39f0c202edac3fba3659a53461a4b70c526c9779d9470185d215274c6756c80d5451ca72680f4224ef0a15a1c0f61312ab8030f2fcbceb0f853a08645b7d9b20c1676c37d30e9045d2d754a30238c799e76ef9e6d942a16162aadb3038724f122d11cd771b33ce1783e48acd7f161e897227d5c8389a75122fbdabf98ad705b959082a46ceb827f56f3529195b7de57eeeb60c5739b4444ff30b4af52a7849e1f4ffd0d535863585d0d87d3ddabc7a8384ba0c28144d0165f8c4723f88d2abd4742c38b4ffd02602903b19dea5f9da96a7bc5144b014910346d1fe01df56e51da984cbdffb71c0ab2467f8a6b2e8e99b4ff8c24d52e9854774e2f565dc29ff9be3705230ef6dbe751f00dd0b27b1f37210e5d6421a3c0d403965842a23f55a18df24fc27837e7997f0117dfc6ce2e57d47d3799c146423367e1239401ec6cf884400e5baaa28d3b5c1786170dc9fd9d44c001eddeff87b5ef97227af0781b7da27c68b6a02c7072b5216c00b46f010457be4c1b02bf21a2c8849a0d136b6f634d4a0ec92499184745d08414e0dccfc0c473b4076c7e5ec684ae92bd39bd7a440ac69f454ffca5fd3461d0e174e6374f6d96c4e997581156de813b570195af870c9e91da3af8ade44d8b885ac5423a611dd90662086a056715b3879e4ba47cfe95f5afb3c6cb9e20f20136f2a77234797d2158970a7e1f5195ccc0d4f45797214ebac62534f6d7d8e2347a78804f6289f01b53126a6425e99738e7dfaf78bb44291af37a63ea3a3dd87738a694d8b8f3d3717662d0ea51c5cbcd34362866a7081380703bd51b86061f0138e5067a9edc988a5a5c9eb8e1f775b2e95b5089f07068d1d5504cf5a66156b8067334c3c39517f947c09473142b8530d8c69979248f155941e585ed7f2ff9eb3f401bcf0910b115089da46048f672ad49404bd5d7c3e248001dd5d550afc74d3d146647d464197471c4db1af95b31fa754c375ddacfa09d694a03187ca5e067f34813666bbd03d4be1450ed5bb4298191782402f3fd546b975de2a644d15146c8fa1cceac0504b21df0368f85e27c676f7b6c2ed03ddacf9db0a8849db7e8c209c63e4277424803fb7a40e3d98d86c68234c6d32f3294ca47effce728459cad815656f47dddb7ff6d2d9d2e2dff68cf3ddaa1fb11fc33e1058219794f4f4ee1292b5579299cf82798e94b19b67369e47bdfc8f1bac115b8610e18783856bbbcb4a4219c4d0f391f4ec23e6876d5f3b31d16383c681b9af4ceaa8ce963fcaa43ccffd828eff46743cbe96b529dfc2299254428d06bf8a23dca1b6e641973a6fd0674c345b9d66603f27aa71b1c484b38197f7d45e53891d298590b69fd8cf007fe1d86d9e855f5fb3e269fd3fae1f45c78d3e6d285aed1c4339852c792bbe2ede4f6e7a5946d7c0667484d8ada1bdafd4093026fdea21f815df0ef73bdf4e203fc8d6425e10b7088c0be3cdb2933d28a1746e3e774a83eac0b100fc82699d5ac2e631f4a3eeaad230b173b86a8f54476d9cea1a5cdbdfa220d71aa5d8b278d3963e359fc04ec1afcaf5d7f5dff20452d2b084b033b90e666eee99117ecce75f69a8573067476dbece82288e60562f4fa08ed73c085128492441750584f58bcd5cd31f74b62c8386095402f4b8709fd4917550530b16625da6a9428052bd55e188a666a70c2b8c4d0a0bc86bf3d56b02ea810d50031d2817d9de3336199c58ca2be6520023b2826d3f0ed756c7b42eebf6751d9eb0b57ec82e973c74e2bedc77686d38b53d8179a504753c4ffb5d03a6bb3fdb034a8c39dc30231aa35d00578693a3fb36410c3081a64d6eedf3d1e4f2237e92b50d048a8106818f9d244e65f52e30288e4af998e3e3b8386a0e7c2edc774a4bb8a390365470c0be1adb34895e44715c18c6efe56a3887a70d9467d1c6f7e7ea63d76b0f38cd8e123d40d95833eeac6d1c833e8ba1609dc5305c26798ecc7dc8eb7336fb555f399eb0363ead30f4b99b66545754d7fb0704d98d8d84f5fb7283d5dd255cdbc481eb6b1ad5b8d7078885736920b185d624848116d5431bce163dd5bba89fc215dcced62c0f9c7b9db98b1c27ba30c8cb9c3d72b66a733c42558fe00606f17ddcf84ed82c1f9bfc577062fe8d545c84efb2ddd2260f17799adf7ffd8adc6ce9bad86cf20fa5c5cdc1f047ff7a16a46d8c3e504b29eab0a689579ea6500f8399ed64dbf936fb02ab82c683701934cd5d1d8aafce7790e876972e19aeb80346f605545735eb11993c2b138f6849765374572ac6a0baf732b5998080c3100ae15d6ababf43ac463bd58a2c97558ea855516dded8e5154d31be0894df4e89a271004bd0521627ddd45493ce7cb96afaf2136a0eb598e4ba53692b8106fe94ec40ba2c3a31fb42ad0868b45ace2ce7e567d85b96077573937695bc680a5579a30661ff86a42c831810af945a030511ec244d0f0d219fa93db7b780be8132b06b952d818defeaa0a9cc48e2a8ffddc4f6bb8e67ce475193ed88ab5d83a45bc6c5591f94c0e6ea0b59af7cc8ab3f03a8d0dfd01bbb1e0d7ea9588190f0544026c340c16793614bd98da58eceb8b5d39a96443ce0ba301986342b9b595545897755a5b758f86b22d2613ccac2ecfe239cd820e43c795ce90fa261d6c332bda6163616488b6481f5485df7d90fba7f3bbab5fed53c057d9a11a158ba96389ce9fb85c9b77d7bb157b3005ddbd806b2e73635ff3e6b77078792b660425472571169636a2ae7683af814dd58622fd61c578163eb8c8feaee24b2de1a248e1bb49fae19324e804cbec0fff3df7b956e0fda0ef2343462883f72ee585a3e1d0e337014d2f4940d2fd9c699596a7538d64afca58304d3fceea6675ffd699a517e3cdafc23278a4a9da69dc3511e31d1c837c6874697379eb9a47b0d8097b5fd17578d723635965e9baf0adb0df6685354a840dc5b134b0cfeebd71f5c07c25164f584b1dd87cf35f26f15126541611cabc022c154e4a509e9d6a745d7ad452a7c2136690423e6e27be49d7f2d2642dfeeef43d35f43cfce260046f938f4136d2bd24252c2da88b199ba4e38476e3e3742b60f596c2ce5b33d44016bb483ac0f042b8149cde56df15d295735420e2692ae3f3caffa98f264bef34931065d76848171fa26513a170569b84406ca574890b7c98b71cf9969e44b070607400074d881b4ce0105883077f5674a515d6f92c812920f04629b8ba8100d95b93828a15fd361141876e5eb642f9046746584f93aebc3aade4c3bdadc372cc2b339be8ec486c39438a0473a735cfea4b9a1db046e4626e62ee16681778d53caa0b2e8b7248d4595d09545b16431866416eeec7ddd9ca37dcecdbed96cac14290bbe8a003fa07590f561848bb3fd3b156ebddbec31a421e6fad70751415465981093b5831cd95c258d5759f16a4ca457a4eb532c395d4728eacf147a8136433347e8915c792f6258d0bebccc7302a2e9bf7f2b36b664c58795ee98e2a985226269940939283243a500d9d8e8d61aee17dc18f73bd582881ad9a973a6844253c0bf03a7a7682b5ae76a89fd12f34920528fa3fef90ed774194ae258fde8aa6bd2864a54712eab6d72cddae5b61e5897bb1fb7581ee78e29bcf452d0aeed38655b9377c7c39d85d9e9becdef370f72612accdd6f1c2cdecb63a08076985f87229c6052e21ea0e0c6f6cb8f2dbf49f7f61ec54eabe7ba276368b483a2c97253faacd57e3107be469b0c759b8cfca03ab1a01d5632c07961ee7af5090804ecc2c718691a01dbb83f151db596791eb501ce578c52a4f77ac09a2e076453d006171ec381efa601e59c089d2d853ae26734f5aa483301fb4c18d6465668424a8936316bf84232073583a0ee26a78cc3788a8ab0df3e78efd88cd2a474f76e995497697479d4db9a2ae484d3ab3000ea32c3144bc0854d7c8937759f2510cc1b4359f36ddab1950f5b7a50f3a88b315258f1a0a1b97ab713a3f776d6565800b03f596f2e7076680055189993640f030d1524a7bec38098188a45cb6c842c69a09838e7fb4087dc48eefd1f3b2d54f991e16438c9b099fbd168faa2b1553a2f2b13b1305ffaa6ec84418e57dff0fd493b2c7dc4f206885afea4e4e925cbd77c3b51457b3097737fdce911ecc55d0f1ea61bdd494a30a45b844cfb8ef8ec12e62189d1b2839da34fb083308e99de6348af49ccee73f5d9b0ea9a8314f482c59309226dc78ce2f95d1b3ce01d9f5229fbc1bd3b3e11fbc858d3dade9243b33608fb89a8a40923447a0c8ae61525b3f89c28e9e7b4db9172a2a3e90dce21c2ce48b9fc10a4908733867a867a1b5808d03f3d9708b1a6cbf8909887bc53eb9360afd9f0b9d307b1049b497da9fc2b0b0f198522ca269cf2166ab5ce6652d544dc26140f6dc5c4f8326735ec9015309aa03f0d9e0c24dc2386dbb8139f2d64e72208db564688aedf9305908879f4bae5cda326fb1b3012ae803bf8656271fe427c9b932c78b7fe5bffb157bdaad9e4ffed415cd0083fe25a55f5a9eeb4d927d0c179a2f2885aa679b472e0f5a42d6059d60e4708f5a3474f25b6a9c2219b1364a8a7917ec1c4af31a5f95ab04c505cdb016bfbcf1c5ab40d5e3cd46402fc64f942f914a9c4fe986b490ade570e11c650f67e49142034a3b3f1ca84e98aca9502ce9500efc51b76b12b53663d34d002f65ad5eca7569b379c1648ff85e440467920283030927551ce141fb69a93e6a88220d5c3ae2ad5b4b303535364db59818a8e519b6b9bf8580b7b0664839b6b360b43a1c355d1cbe74990e915313b95a133ba0dd6d043bb8d2f4284cffdc2d1c6a8c6daf80d9e39b21f819837f27fa86b27b2f3b7cca5ffa6d5cff75cf0090f5b3d7ffe9642067f7d3738cde7fc5e4d63b5c0352eb85952eabc84becbc94e4fd7991e3ebf4cae7048e94bd38f187da3c1e28567ad6056218b4f0ac23be00e804e00d57493d0cc34d75f33f6a2504c8f123401842f160e5418877cf5c64ae53ed3f3062ca900196f6aa3d3814565f22d057a7a405f709e37c1d28391dea76fdc7bff80ac638e426affcc8a599a03cfb44088430652c263347484d5c1a24f9242f9aab0cdf6c7d368082224e4ab6458378391d8f51a7a2f66461fed3ebc707cf868aaa59a8904998354a8989984c89a8c27b3b5ba2966d4024bcb13c56c8bfc4730e06c7395d01f38ddc09bec18236b16985abef9706eb29cdf700b50127893f1c9a095295e4c81d87ffefc66e47983615253595562bab3de5a03c2b7b35fe72c1aeee67452079c03df1ddf4f810a832df5a0bde5f83b02955ef901340da76c75b0421a392cffd641872670c2442202f335811626459d7aed32331bc9be31f9bd3e83a36d794c340685fb3e6c27751d1d70f35e96ca75dfccdf0f46e54acf59aec9458b3db5aaea10ce081a715173aad20b4599a375a7ba65be750ffedfbf33874bce6144dd655b8d9d20ed6c433bbe47ce08834d983f05d280d8507f5943d5ce59cf5789b63d8cbe4194ef6d334c2a9986154c14b48b59b9de06d56b32c6adc07de1b6a3fb5c41069d6a798fa54cc46d90631ef289a26758a4556e16ba049c52086c703fcd8961b26f613d80f64bfd124ea147b3a86df296e117af627ac74bdfe156c15ab722256bf3fe8eea089daf8ed6f58e08c292e058bc10b149f4806c8019db3a338752f54155aeb9716436181087cbe8c94b480d545563c1c3e03ae8458ce2bb51a08bccee66ec92b314abfdc3d80365a7c0b6707693d964e6e31dcbc29d5b78b695611a1c5a483f83eaf4c6e78eb6a1dde10feb033a9154218548f4918e22792a4d4873762cbe1a1d144795bcf097ba2a577e822ccb40f52f4dff5386e422892a2c904cf7a814f81da806db4edbff57f75517b51e737fe46e0df321d4dee447e473e137454db6d5986d3ee1dfd4076015f724c40540b39230a3e059d89f5facf9c51dee1b3f346ebe303c3de936faffdaa31241a70007843e54117040e69a1c057ab0d6f458d13a93cb8e21d88954be9c05a3b50159cbea99ed9667dd7e1eaa22499167a4c582772024a64fc17c3cc2a26c82d4a59bf40fa7335d46bf8bd7e6f8d5addc067b0763fea5855f690600a3b80ef0c0a84697ece5b16843e4fba9a15413315719fe9200169a0afc01aad03d31538bfdcfa0cb90809158aaea77d4f01a20b9a01aba160579adf6a3d7574f4dcf1c9d6fc8ab5c8f2bced962f504863af3fa8e3356f222aee416d3c678f4f6ab2f18ba93f68227f32104391ade22d8a6302cb4348a2c0edbf67f22bce4665e47d2b6486f8b25703721395213e32f285d3b6c1c0c6a34af9cd8661d241798357686a2423d0bab6a52b3071d0f97a2d9c41f97bf170e68fefeb6174c36af256f71fa768c5910d32966eab44ab99040dfed0fbd81fe7f3b59790df6a025f73776796825306ac3bb6f8473e24cd23a7391887aa21e264c8737f15a65fddda3a877a2afe38a10c79947dc6ada1742bfbcf39414d7153435b11584cc3d90455606b04219f2d22053d00511b130ca511e69ced620bd31c9e2b256575e1eea799ad5f0ad16c3b8af1ca55fa047ef013fa4fadbfa5b626420c088b95b23ea1246471264db1f794b729e2bf2af1652dff5ed370c889125179c799cc1038e91ef09ae9e4be65bffd28bd3effdb65af4a75e18ca305755352f61b5087a3f9111aede658754f062729ff4bd77ff2eef7753a4adb3d3d74b50c2d6c92073ad1a22302c8bb49bc823f154a122eed3914a4e0e005a6647cab096b44e85ac7ca9e95c766875579b113d4a3fed9f82912bde66e735fb11a58dafadf52e6a10314c53f8400ffff4c8675c328c2628432319bf9c98c559b45296cc488fad189051b0bd9b89ebdc43da166e09309c0984947575504eb8c0099936ae91d390942c59a36df6841dabd753b0c90baa2a2f05055de4a47597a22611d91bbe076bc1c12bdc731390382976c7d8c715f55bc04463978ef9ee1d4d75ad3950e5d3c32cc1b70ad6244ec61426bbc105bcc380a78080dfc780b7969ae3615956c09bd0bef94f0d7b562b6ea3109e0a7cebd86a3300f457c5110478dc93dac5335867b2d25136e2ea05e126468fe3c440816983f393a64279dbe2952cca13eab7740320aeb5a207a38ed57fd00563d1ce977a6c9ac81a4a6532d66b2a4da0340330d2b396e937e662dcd3bf5e3162576477da392019ccf12df04737cc60136c29bea298e9cfe6799e3f5444e6ec79028b86bcdd12be0a0a3d2d61a63e9d8f04ff50f39566f6351cfd8d281408ace5f8f502292ec0e04385d0617383b8b222465605a1a1daa903d1803260516cfa63b9efaf50e023c0b900590cbaa2863a2d4812e50c92da8f10cf9c5227e5108434932c821590b1e2d567562b65390e3734762f609731eac5ee85f497c1761dc480c19731f47e76be26b38fcf6a88f92e7f64018ef2acaaf7104082e954869622ed952553d865f2a7e52449e2de51c3d28364fe5d8284236fdf32fb7d66c203e9fb715655720a4c3099cf6a9d034efd94b11c23f2c0fd38e2524fa13349dd47a8f9f929934d99ebef1ec86311a62c2149fe59029f31f4de252bf31f7b9b7569a9c62905ec8c5394a3bd826d53a2b1aef96fd9a72206cbd15bf473621d97c65e34cc550076a998af6a704a60c5f045600affa9d082a0979aa56072f1f4c11458f8b6026d350608561a96c23e811cc45c75ada0ddff63f0a765a3aedefd2c2c9af9dbacd653f9c22bcfc2bcb6d86ea41389c1f372cb18821102257f432016d15a258157886cff958ddfe73fadcadb36eb5b1b9f69f9c9acd83ef1c389ad03e6618ca986da8b64be5019bc007243724fb4d461e492600ba38855ad0ade312ab9447c15a44fc5d65c3a6ed08ab18ec24b8e8f599f923a40b81baa2593c14494e795613a286b610670238db40f60569016c36887b94149a33e3c4a44be521d6479cc67002abd626c3642b78f3213ddf34a04c817ade9e10f9b6bdee1ccb5874f7e7b834e06a212364acec172e5327e6933e0bd24eccd178d7e36c45a68c442ba60a19853c82ecc4e9eccdfe46bd489347fa14953da65049044a64dbac0c800ba262d0797088137381e12ab5400b6a7a9b227018c103f61acd01c3ce85ebae3068331b97be9c02d9b9159821723c4823a6741bdd7d8e3e5a464d3a6efa3459f0e33b141a7bdee806fe589d2e158d70edde404b6b2cfcb315c981006a8b40fa698f5b9c5d676d7abd795cc2a7efe3811cde88ed8b7f70cfd4fda58a5e225a6d97f4326b81bcba3105a3972935445a4f81801c6a0b72c1c732f34e1b38f9bc854c0464fbad019ca01ca3564b52ba6d15973017fb6b4306819a70e3b5fa66b3bd9afa4892e2c4de3b36b56c9282c94abb40ae64fdde4ceb39c989d5463d5035c9480cb17e93ee889aeca7a9f9ead2724aa353fe5c82cafba721d0fe51f88e5f0f9b01cd56abd181d245aa5f26e62d57a9607daf01994aa053d1e8e24d3d299ebe6a3cf730c45dfff9e99929203aa7451f96834b0a52b21bbb302ea2ca7c7541a268066453f2f7703dff60f844875ff6b1d028fc9afcdd35b5937230fed6cd76cda976eb598eb6ac3fbef0c0699da6fe96ee93e5d40b033276152887b714d63b04696ff97ea33e183b1492b4eae44b8c3a363399471b8ede832f39bb967c0a15f13a1fd6c760af59f42ca56c2ea6b6866e1cea645a4d507c8565a16b28394d87f5ba81f2b690202bdf749c8d719dd94f27f1d2f965701c4a531f448732ea69d7207a966d9569967610f143e9f947acee1ccfa0485cace6af0023119cc24aa1af64f8816d30e2bc6dba9bd0059f9f4d14f424ca9365fd0917f2b2f48ee85092907fcd708daa93b2930af61a9b25596de52c560a2410d2a74e2356cfa33aca15e4216201c8f92ed5ebc6e9d82c78814f81cacf07fcf7f7ab3eca8f40fffb20881d4b803fcab3c02493b3c2604aa76eb86ca80e2d29e37f63bb9d4a4aa6205c8b19f4244231c6bea85a39bea94d20726820d5c0066332ddcfd385a6dab6a16e61844807527bb4a8ae5f328bb8ac2a1612fbee539defaddcc6aa0c129c45f725d5acd8e18755e23313a4045b73cb994553832d058a3e19cfbbdaf169f0695f4e05aa46d615abc7f6411b9117ae8e14d58ec3f0e61e88d3a61de52e5b8c98034689ff0fc60e60e69325032c605635e351a0d6287db47a4940acac7435f713b4849df0739c55ca316182a5d20cb0b820c93d08bb82e2dedc461f904a27fd6a5b8b450ad39c46e6d43e07dc3d2982b6843bf72a0b2c81df59ce4ef8acfad9858814d6334de957f5b9e15a4693c51e82b01b282b2c5bba708d2c0929db49a774aac75b00da468dde1a3f940b6efb1cbedde41a3daf7f82ab50023cf93b0afbe5bb622c20a3536d0e8c1198f2b1a4b6987f1bf2998554d8bf299c428b8e5dd61b9cfc1ecc1c8933f395615fc419a892c59a833d04c7c24a05d54b67ef02c5fbd86c408a37113cbd82d52a36144e2d82c2965e3e764bc7aea0ca7349aea930803f0dd54052a9ebab4a747c7e2f6fe321eb7f7c13fad0b10964b70bc56fdf9255e5f11e535435c758b6c70e910ff84b684d5dfdad665e06eac7b1e96c6f614493fd69f37161eadfefda3d1f61149e115e79cc967e8911f50b7b71bb92ee9ccc8abab2da70d793e9f4bd09a0714c66248ba13ae8c541a444b8d389435cf60a1855623e120ab95118431b0d8ffa78648c2b913f5303eba94fd8a586bf72edccfca6450b9d0c0d5558a6c713059b563eecb5f70cabc712b0e211ff650ca80b84b822fb68a604600f89e4f32887ead6d2706c58924ba277217e3ed0cd6374701b84aa14162257226743cdac1cfd1d5dfd603ead51abbc28b102b85dfabe7d2fd70bb5c52738f47526e96e5a2434264741eb18ccb87bb0ce9c46fd5b746d59b80bfa83d8f35ca659eebfa287d61a5f2485384f1b21ad46aa0ebf3bad54273f80029c65cf9690d38cc1885c28efcc0f7955c9edf25a2471e9b54a208656e611621bec2fa092c4839232f0f871b255a34125330258e443379fee8a92b6d81b293ae867a321838e646f4d8eeaff472f541a7bbf884aa797bf2c570b913702c21a4fe3a36ce720bde63a246f039758d95240494742c307a3d6a120c003eaf2a0ef9816e9af0374a30a93bd7018d04e87268aebc566ba22835bff9ff7c48bf8fa929c9feea1d9502dbaceeed8417e24f8201ca7be218276122dd622c7123832621ecd4254bb760671b2260b8c0714fd35cbc8d464bc98ee796818f4127865427b9c1c8048d97302d1f51861c4408f938831f8688ccd9eca80d1421da1c44b4527ad922716f22829ac074735589a4adca38bd147ab0d8b0d5b705010ff647559eac6a6bb1cf745a173d51e1bcfeaedb6df69bbdd55606e5c3ddda5235f0ded740e4c2afa49988de9b6a3382a8240bef8b9de7f5da655e20741d6a2df485b1ae316aa7249ed4cf6f49d9b0b890adf5d5dbde43e5a82366ff994f7240174bd07e761087ef675fdaeab0487b82ff2050f0d244bf565876c421a3ac241762f16b9c7dfa114c13519c836d8249c7639fdf58cbbc67fba9285af36068c5bbbb2921cb554ff5085e89bf7cfd2266ee99374930f2add8ac288ae006d5d9035f3e0754910689a4630a2a8407b7a42c76d586bf2f6d62d3f6b2aebc7467ce79b359c2aae3dda7445a6a075cfeaa56a1765eb9e51cb85eacba91eeb6bb2cbb022c11045dfafbeabd9ed9a34d9b494f8c54d7c1830c6f63b2bde4ad1e2c47ad2335a9385d4954a382e23a14ffa58fb675606063d2362ba35bb97b498b36b787faa3a650c2dedb422ab77dca6b07ed47bfca4a68c44a43824f64380ec0f43d84a3e18ed2ae6e0d5bd8fce0b455b350d4c437bdf3a767f2a76f19597d43490773096b20d94fe94433c9bbc64d80f0a9a8b5d8d636f4f84d3f2c32e9df5a30cb67886d7a22411641382a3ef383fec9473e8727f1deaa8e5272bf545a22310e52fa816dbd7487f027a6d0f90f293e806f91423b3d202f2177501dfe826154b2fb723720f03cee58cf740ff560de85c4233a11236768f434ea93544b77596e66052d06ce976c59734d86d9989045eb84697d8370d5c715b5a5a648e4d12ee9af1dcbe360d2da0a20449dfc86230ede88e3f95e584f55582eb6e7ba10f161d23754b4be4153bce86c9cadc4c3d0eb072dcb957e0d7298b9cf614b48842917015bbd9a8ad0320795114db4d5e826f3c97da2be3a917e91ac98d7a6cbd8c7b6ff73525bc602a858c462d0e7f4b356fa25bd2a0d78d8a45a44c22dc27b2fff2722be6781125fbc3adc086d35598698ccb849237c33a35ca992b75fdffbb75099a1433922ff4a1f1e0bdc7aab1195d4a459a614fe93b2bf538de07a5014c0692570bb7b49f64a1438c20b25dd23c4558fdade2fd406fd6e0d70e815bd71b00769abed5c24c165f27e717e42af2d78206bafa13f074675c91aacc0b27580ba699e045a551b2a7cfab2f181761b01f2cb84adf30381ac73172e800e4b63e05ca905471015ab175c401ab65c93eb06d9a21086928d9bca221e702c8aa0cf6aa8a0d01bc0bcca2a45314de1b110a0e11903b89988393e47e69e0dac754534eece0bea941356099185c65020d9508237049742755efab413982891b21104d03bc9d85caac8dee302399d7268c04ef51dde9b0846e12083d6932ab808918f0f4344770a57da2d6ec1fb6a4763e969433c74899c6622fd431fca79adbb8b129e06118db56b48551aef021c050212e83366696f25db56b346fcfb3ee850d72a5f0d17bed5699e589ee004e1133baca39fe83a837e77125cfddd31cb16dd13b174c73da29f6a99e0efc710bd1ca7ef0d21572325f7c3030010afee76756790a0ccc612ce80190a9bd43cad89d078ec42a4e641cdb0a0417ccf18c1ac41c2b4503a589a13337448b352f518c4e6303d515242c94b35e9577006726b54ea95bb31421550d162a172bf865b3a9be705744b68dc64aa991e23d5d248a77fd39cd7c06a785aca81acea5106ca4a032aff3194696f7948dafc38db5de68abfbd4cb03578093b3ef77e48171e5524cf318717377bfefd668fcdba9029e475ea8059fd0b5ac9a1c27242e367ee6c4755c1690f9863ba433315811450df4352a9c6388daaa309ffd9dfd7d9ac53ff152bf5bdf3955e90f482bafe93724e07182bd753047999387380e81fef91c40c0a06e90317133b496ef80097d5e44582539cd74c838c805c05fef448b1b49d3141c929fd91409a8dcc891f52d184af550cc03d02651db09c8821551e4036358429385ca0d13d068db068b3665ecf23b035d10ab6803d4f573b03302c7dd91201f4a9cf3243b4ee3777f3f58624a9f3338e2c087a8263a7118bfd6ad949736ea216d9c05262e55fbdcf8627d775141c8eb3c4956b1344e3f55bdb4c848a9fcc184042b34ca2ff28fe27e6f940b87c6326c6576945bfc4789ff5092de0c8ba085b27f57737731844c23b31d92f0f6f1f754e790f92ef37e5ad1e7dc254f8201b04fb92d330c14ac309f3d0c79faae29576591526f6e3ab69ef908b10e5b5bed0c03c380976bce8eb667655ec4a260fe5c859dd14cefb21725617e7b27e5e1deba5a2731d0767dfc4dc821fa0c6f05261dd0a9be6d4fd7017536dbd40d6ecb62d3db051b853a072b6a93339a122c930c8be53ad1d1d94b33552764f7cf07def2bdb62fc6b93c9db23883f9c92c3ccb6dc990a6adbfb54024d994efb1755396dd8db1b449b8c083f42e32892db7fb98ce76474e322c8d79c09ae9326fbeb15c4ae21c9603c27abede1ef7e044409ee44cb1cd89574c9e81b44e4ef5edb6aaf5ea4c677c6bbd8dd3a030d19cab11dcf5e90a3a538e95f53eea8c28d3877534ab61b669fcd8763cdb3e24629cb50cb4611edf1b6ee46f03f6340797f4e60c67bb4d677829de2ac76acad69acdc8177ab3038cc5b599bedf3b07e6816d6f4b8fd97c38c3e62f36d3bdb70cec9a068e836a40ad665dd5f294e1003b767457732731e04b614aad6977616b409bd9b0d9bc0c93e567b5a1dbc2065ae47730dd4d7668692699bcbfa90f4b6713c3cb8ae7e7ac678f4363c3265bf0c746f2786a3b3bc36e334d77dfebe559f8cbbf37a61f3d936aac26af8f1ecf614efb047cd71cd70952b743efcd2cd9ce1e469b6bf251406c9be5f9208ed2fa6a4d1af62148a36c2bb605cbd273d4806579bc3a82ee67e4fd59f6fd0d3fe9a564554444a7af4e295762152d7eaa852b38f1664c78709df4d24e7073ef342c33b3f079692634540ffc56f267a863a134ab771c049fc806b93ddb369714092c6fc7aa8fa6c49b98ae2daed91b0dec9eb93e248f479ed9a7ac4e55363c76b359f69bbb7dacd828422fbda4f539a4b2bd605bdaa45968b369be211e23cce8b072f5d85872ec7790bc38e58e3f7ed08b6d62888c4e99ef0173a6a7c20b3b34a7654ab49a2735149df8563d50aeafef784c83d630630162bcfcd6644d7806ce0cbca7601e1087eef4eb18b281619435d85eab9d6f7760c24361da99dd1fd463822cd0541cb297b66899b3cb4d9cb805a9bd2d85c1f182dafb9cb2ac4972826f138e061b74bd3c5193758e97617c5cc1bfea4ec01da9fba92daafc6cbaafda201df04b7d0a0c54dc8df15aafd7417545584dc70bb8ddb9de1bcf203b39dde4c39e9eab70d298565ade2424dc842d0f73301f008b69e73937e1c937a3916f109337af2f924521e3e970ce6321494b1d93f6bd0e05d58a90fdacd256c7c5052ddb618b948921fed47871d67c0d5490f4bbcbf606aa743f4b45ca7086ad6bb26ca8015d6406f6f8fce6bc654c927901f6223bc1b23996013646565fe69bb3b14bddcb7b5e33973a285993eb9b36ed7e2fed9b217193d3bd7d61b4ad9ac1c0551f1de667f408acca80319f27fdf6b94252344deeee7277a08c63839495218ebb3a926d703a0fa8b2d37173ba17b4d92d53264bf292e6fa6489ad89c7308c0bd6fccab387712f64591aef08b2c92d8a304c788016f9bb6263cbe3aae78f0374b02e7af6e075bc6e9891757c484b7072cff90e99edf8da1466142c171b3c11181134ebe783db8413b10560d973669bd096d9d28ccfba0df096b549b6f2b4b5f108a86575c227c7e4923cb9ebf6b03e8d8d83c6d9fbaaebd5a56f7e8a4d1ee2745eed49ba40f70154a46c2d2c03e4d3428c454b3b89bdd87b07530bb6f5a7eb2e621381bd08526d74392c592bba158dcfa672f2b1b6834e9dcc95093412877b701f2f6376c2ba9ecf7e9e34dd0e2b1a50af6cbd4eda2bbac97f6c06c2a838ce7bcb1b2c8d134b63585b929631db0fc5141b1b5e573dbfb9adb9cb5c6457cf36e764d8b6c7b2262cb2c9af7040b1b201757c7b03c39d9453d991b3c509c81e9c6c82616fff431803ec60decc362f642018a3f13831ee3931adf7563c9be99ed3f6e31964cdafa33e29868a05b4ddd2e3b4212eb86d8f7f1426d5504bd9bd9a00d30e810bc84fdea87a716dda32a7666de6c78a17741a4398c0006da569c190c7dd69cfdfd89cf3a36169b173af638cb5a8a6a26183607666b358a95585264fdab60de866328dc75b13bf104c546bbade7d0ccb75fd6f2d9d15c7d8753247f54e0976793daf89563c20f02dbcc3bfb1418acbe06cafcfa98bcce5d1c81f6a4cd7f3ac7cf10e5d68eb2de1721747b20d2fa7ce8d7def4bb17c47e1e04fdb1bba188ffa0c31f0c59263f31c1f4669b45df883ccd098d6fbe2f3aafb35e814db6a39dec2ed4a72e645c3be4b3a5fdfd8cbdc199c3ca86d4e6815d1cb7cba7427cd79f0ee6f8e49576094aeba1a92edbf8aab1ca73ffd060da6c1c65b26c22435e936a61e50723e83e10a0644a3388807c56bcf39d067e07d82cc12e732ddc4ec694ca1c033f72fa3de6c6e5d609bc002dee752193b3d27b4098ff28b4d438791664137f54dc79e7c85e3c3df10b7eca5cdd93a725f17f6949ba8d056060331d66a4f995f5d47f5e1993f56fd8690a8a92865535e6d3b9deed55ad4d8d616037b8e6f2f3d876d54601f682bd0f237f4ef06b302e4497ebacb866abc3aaf4cd3d6b4b60e4cf7569ae13699f59d0d67f6237e943b35ded67160cfb85dda3de7d79577acfddaccac2d72864386e57918d3df70270fde4131f78e34f12eec3666f41462f26d6ddc13a2a2fd2ea447ca3060cfa11cae4f38e6e64c60f2bed76d503c3cec656589714e3d0c4fbfab9c2f8ba63d0fac863ac4c79a63203e2560830e4918252fa29bd4a9b2fd5672d407691a4d97a4f3edb5b48d6dc38cec7d6c976787f96b55173dc5a60cf79c76d5fbf90c5aa1bd4096f6607d04dcc79a1bc3f5d9b2f6f0b5f2f1b471ee75e823c2dccd396acad7f7959ff55ea807863825d0e6f47ad9be2d439e73a30fe385e3c41265d0b6edf1b65aa71fb6c765958b7041ef7d635d36a7cb9a6cf40753131de0adfcff81a2fb39f2bb5d389e8ecfa1b575674d8dd74177bd44c68079d3dea1ab907d2d5ca7bddd8e9a745b9ce05aad68f31d3fd729a680c2f08f3f433ea7d7214c4b07bbf664633f8c695b10679035be8dba3b13482f86b7d2b0db0e4c2033381ae8adbf4ddd0b65a0c6e97d4e59ce5c674a577895c367e374ecf913f1f8f172076fcefcb5da273480bb3ddf07945977d4f6968c0ec8e78508a1a69aac2d7f7993f15c9a16c77ff59fcc507d889a890dd86e7657963e8bc502dfe3d218eb946675e3d77fe3ff31b4014e7ae04fad1e65504bc9021f4ed4da63002fc9ed3d64cb3be63085a54633e07a498d746378b517d9802f15c33645177a1c932ce374ac8f11ecf3ddceee0a27c784a79a81633fa4c7743c0c9af6b9e4c3b58974957906991cfa94c7cfdd6684b1edb78969175c1e3fd8357f75e3d54cc7c149705f436d736c120b3d09b21f12688371581ec70029af88ad26ccc042a6fa9059e82f77ef9e295885cd4eba292c7ccea59d8ee79741d000761cab8cc933fea7ecf13a29ac43bb39b96f5ba9d56ad265c88ee1883dded9c2eacc18269bb0a5b883f1409b6eeb8298b9ed7dcd19e05be6ed86dce5ef9d9b2563e9396c4986e12c67608196ded74bd983119dba5b78ac37a42b3a1a236b63bec837ce359dd96168376c831c27869bd228f8dcc5056177cbfef65b30673eccebc349f4686cf36e808dec25a5e512c136e9342736ea409762eae63d8dab1dd9ea59f3f70a18bdcd72c10da6c0826abac537a46c34e42963f97b719f73648dadf4684d86c3fe440f964538c181de607a76d6ade1b4b8a198bb89099aea07ca7408639e62594fe84a794460f26f751e63abdecbc752ea8d0c7764573f7efc4037d29978716fde849bc1f2d762a52cb698d9b06bba78f2f19c799bb23e5bda229b2bc39cdc20fb062c2ed8a5785531c13250737a43bcdc45722256eed026c540b55952a8c08b8ac1659a69ff34995544c573188ae5c692cde50763e92726dae1b5226ce413f0c297c6b325ad0603bd54b7081632e1cddb28d44d70c2b96aab4d330ad633947e33b618c6090fc420b28a6773fe5ee1fd6b4499cc280fc2136e7b366ab0ceb11dfd76e05e4c56ad096fbec14adb5912afd2225e00fbb794f3f9706122367f0f77b4f1a16e3677287bdbf3b679ef96fdf73bee738c8c1de342de4186863bac3bfc961a3378723341fc4c3a55b0da5684196bbd384f0457c6b1a16ef7903521dabf03f3fcb46e5ab6a6c89a73eddac380a9b79deda3863d8ce998aef7cf83260469af76c8ee2fee1e06b3e4bdbe9be643de2c6d60d0a819eca936389db799457a3d360fdc7b1da39303a0c3870bcddaf39d841ccb021aa2eb0e87f498b32cec36eadec73cce890ec02ab4550f6d8b62cff59321bfcc1685e493cf9b2748d9f20ffea3dffeff195e42a22cbab576e097deb66f48a22ee2407565234198973c67a507717dec4d5e6d7c68868f4b0557af81cb576836a1e0fa87bd8679693972921ea454eb676e0426ef633f3454f30cbd6f3f0edcb902d49d3ebb40f80ec68ad2adc48dcc6ed0acc63e39eec106c231be74f927202257d6bf8ebde6d81c18c8597044752943160d8e8d963f224c81011ed5ca7622f9f354c2cc130b0f9d04736267f528b67064f1c3d62da17f46e65ee398b885b54dcd3ff5844c166d53263d7ec893ba2ed39240b71b0924a0a929e81d23d0f851d1bb32412440024340ee2ebdd6dcde5bd826164a1f60bd59f71fe6253a22419972191a290ecebf881ed6f404e1ca7d5cfdba37f8b8d6ca8da4536bfd0cb9abc3827092f999d81f72fd643b0702373605f094087883b2f543f4da97ef5d52e6cb44924abd75d61623809c7f8c5bb4aff056f25ad329b644363c5da249f38d4fe0e9bf39006387f2c8034e941062c5eb207130c347a4d407123eba7ed3bc43cf4b3d2893ebdd9c8b7962c8637d964cbf2bdb6568493d24d39409e63fe42d71b3ba3e3e1ef7b5d8a55ff6442c4e1fe5298241d3bf186b8c61a1bb600c755f47dc594da1b3ab7c71ac6dc9c21194aeb91d588f76d114361fc9b8fb78f2c292cb9a3625597ab0022ee53b4436ac86943f5b6b6723f317bf018d846e41b1f8ae72804ab8d5ff86d641477fa901565526628b11f5866ecafaa378b7e64d07b6656155006e8fbad16f3b370fe0b3fe389beabc60d1d25055682e0c66ec0e38466c43f6b84f7035c2440e2775a17ccde68af78c3221ebb615ae200845ec122b550f005044214c631330760bf8ef9c0bcc5d63cb1e6308b719a63cf3e6b5709dd3eb0dbd8989308cd73ff584cb9791c084d8283bdf8403988f6f894fdbb5551f506afef4ad427f27ed87fe168dcecee419692fb87c0e63537b05e77f053da233768108a6f405b3299c8a588a7ea57936ddc37a71b07be8f09002f94a28b39964526c86a415a2cea21b4a7aeb5f06b89b31d75551a39c7f428ee5c3d926d46b171dea4f7c66fa2f43cdad80f6f7a2d2ff5737dc8497fb2ec4664f04e40211165396a749c59189290566c54347cafbccb77cc2a7e66b1555588ce8884595d509af8082f44ac8ed078fd470901d71394c010f5f374e598311beb70e37f412361cbbc345ef7f74b6d8b5d3a717c5937a05124a393092fc17bbbfc22fe2401d2057b38c437fa0fbef6dac0f1eecc5e6c5f4c6c9d9770c71496f6db3fa6d94d4c521b8d8d74363345c07644ebd6f5cec8f47b5d28b8677372509dc08ca3d2733e28b3aeee63745c71edf82fb85104b61c941770df03cd978e60b13c7faf6d165c67aab2ec5fbc0adc5ad088cfcfbfde47da5a3b539788f2e4e38a545db1e038e7acb1d1f25ec3f4c13e9b18917a4bd30d2f63707d147d516fd0276414f9e8d7f3c1bf0ca9ecd28a2b1f669ca6f1f5fac8947000194ad7add0feaf0879582bb5ee2dc3cf63b2debd55740a9e884498f237fb0fdd53ddc39d3ee5bb47a61e903053095b62cbc70f7e43ead71c33d7b1fcda302e2f46fe43eaa7f09d4bf32858d9ec06ab44fc46f7a37978af4e318e10332d4b6fe18b54e1c981f86428aa1323dc8248b0f3cd9b5e8c3d7e7fae1857541c6ee6541346faf84c1ed8f2ac52e59f8e9e1667ad16ea57c7c23d24fdc30a5b9a95b7f50ae1778ee1f9f10e0ad5dda0c6a87403876cbf7f05a6956213ce7e8e7162d2e3d9c034c6cc86deef528aeb110ec385327f5e662e0e68395da1ed8a6562e887b49f0daeb6d4b7a37c0dc600a6dee0f79d4e3c9acc74996d24a0d683a11b03ae1c92a079aa6a78676939bbd86d0ef5196d703a4c3b9d2d50b7575f2ce99f3b22deed3953ac8032d2817f0a699ad0893bb4e7aee7a8706cfa0dfbffacb34739661f88cae715f64d84c0c0d835fd7d0fc492f35d3eb0b77ccdceca99b14ff5a65ce0f4ef3a730592aa6d2be551ca4fac0e32b86eaae6bae560614fe23db65b9a4bf87c7649de0dba87857e4bebb8e1438e0f6ffd0cafe0ef455d00e2e58ff03bf3f75b547fc3376f7bd12b58ff64d93c261041c3042bb00536b9e8705d07e846d778bcd81b0060feb7f2d0ac635789e1cd6edd51b82ed0191686713c88f25d66f6b6ef00c7fda5607d64a3e3b340bdd135e3fe05a4f9b258d8f5dd47bd2383e0cc4daf7355d020ed97eaff10002a28ba3e5371deb4dd4b10f691f22a3d8fd0ab00fec61dd9e9b251e70eb8f7a4eb4f8c2bc732d9178d971c6c81f56cc431735e3a3b3b6398bff4ae175c4e86f14cca72f9bdedabe2abe784b2ebda29b5d9cbdb4fc41706e7899f575884eb06acf76d882f8cffa1fd67ad02aecd9a45b771c7dfe668fe634c1bf571d0bc4b132210d0c485475094af184a1c7f9718bc10cf8e010e8f6ca3c8aa3b442f4eae331697062bd35dd05d09aaf544cfe03c975c075810c75c67a56c71b7c38163b062fbdd6906077a346ec95dc33a3f9772a2cdd838ee34f184f6edaa0d79813ba073663c005e6f77e04af6c861bc62a466b4b7b45b4a0206522e109541497a3ff72c72018d5c9c9cf3e6144d9109261a0ccbdab2fe69dd178dbe969d9a7c532aaca8e27ba1574153221bc1498f5c5d6dadad75d71fc5cf487cec668816a4c74d1d19b5aba55c53d9db52a632cb13c426d026be46b2781e040638d082ad0eeb85ae50a57c00bb73034fc18199e116249cbf1676dc26648dbdeb71dcd2e768f4890f7332107edad5e4f8f8e7f0086129034e6c746b853dae0db1fc5b9c8e2f00bc5ba256862ed5ddd9b46c82fa566d2cc9a81f887e673a6bb2a1238b827bdfa6f7a7adc66f4d424fc9c06fecedc6a946d4fb307a86de34c844b0778ef7e3f5b0b6d631987680a16e1e2e09e58a87599b2100ff557fd83fe0a687385447ae821f506c5821110f8982604689f0474087cace013611aeaa2550a03db614b38aa440d9a462f6974d27fc3dc90fc89a4ea785978acc903e56786ecf61b949c7c1ce076c42c5dbabcb7b6e6b40cd02e4b215da3ac67434351f3079f2ac3e7cce5dbabe26c7b5ce6b4bfe609cb933db00442f66a3e8d35cbfd2861bd7a751fd90417d4682124e48127872a007b35577c1657d1c49059bd5f52997829e6ea07d9c935e84814c3bf58a104a9aafaf7a85e445cc294a05d399930e5ab24446184aad88ed08b7cb83e62a9fc5c9093a096bf331174b346c217c7e33d4ca06250f7ae12ffacba4e3990ec604eb1c1882e9b8f3a55bab33e4133a09428ec05302303908f01d5e8f1282cd6571691f4a79690545ac6f0674c08af8e677797cccbf8586e786a36874da828a43707f77b369c7db0fae83f99ca7ef0901589a84d1d8443517f0287dccde4893127d683b4306ea5f4b2aa365b7b4c3a7b8279cc8c48a84d94856d3f119c8a5915326b91f19a33161f69c584fa0a17137d7d5f1dff1391f664899dca9432217d4c7ac078a2a7ff05f72fca7cd456191d93fe71b408cab731883a5b235bdeaea2b55d5c17519e8c49322b8ab7b6f1cd178297b07954ffcd8985b67ba31bf6a0325c4e7e153487047a46abc49bfb8ff0e357e008a45736c995f4d208bf57cacf73dd8c25efcd9f4296d29ee791e34e3593fd6ce465b428a58c26e977d10aa98e7d963c092b5a6085047d8f6c413a4887dfb203273cf03ce4fe455fd8e7960038fdb21dab98b0d0a86c814b33228f7e4fbe290f5b05ae129e87992c79f44485aa8a8259f8db7c63d23fb8660cd662f584137fdce9b6edd8f50521b24046d4632c21ca0911e9512a6e2eef5be7e1724b43d95d91c2cc40e9cb7f5d1ce1f2ff48e638e1d4c82f8c9ddafe9dd5a4014cc9614c7490b1a70fd025ce410f58be1b115f5f58b15c792ab26c9fd1d0ea261aee77788e5e97853a52eeedc89566e7133593206ee8d030d68070d2ed480ca2bbc449b25e1bbcea975f80ce21f68e10254e2466de9c5802bdb840f710b2fcd16b1ffbebe21c0026cdb69ca023ab46cf7f89784ff2497989b31b2e6c3acbe6bbc01ed6f8468d7d56fececfad7a63409b6bc58d97ceaa949e3c8d9baf6262266f47215a4df704e4f3c4ca771e79e889e267ca4493f9639a1823fbf2ecbc377e2ca0699a5dfcfbc26dca98934f00a35f77974aea59652d78af6a5363cb45a099e671066c3b193e33b0cc034c33c4b2cd23f460f07118eb445ddb8068f01a7a1df5c0496ed7741f61c018b0be18287d6e0dc2876156df19df1d48686f44d27f811f78e6a65eefef4dd4ae59f68de3bf853071a3604df24c9a3fda5ed2f0a7df639ffe78f4e5c5430f4f24bdfb6117678eebf8fd1a8df81dfeca86a1f7209ecaeeab393834761488713b8c62c966336b0d99df3885cdc7c9810f1030a5f5974ceffd7980745517c83da2dacd2663c48c6ff8bd49dcb7b9591fbda4106885bfda3efa44ead0900e02f5af3009ca3d64395e9d1f62b43e115e7e9fa3808dc9ebdb4c63b3827876b277279d0524802f2b4918a4a8d9ff2f107413acfba389b89cebe668fa606d72a914d30a7a70b14a31ae598d079450b9bd3dc1877ad3488ddc008f047692c336d2b34fe692d1fd7a553be72ea92ffc03b849fe4007bf171f99ad74b647f2a625b5cb4e5c548f4427b04e7b70a80b8a7dfab143a814f13570900c30284fffc0ab8696e65ca2b1a8e23de926a0e1d92cdb91b4a3034ac322d10321a69f71fc96a4e65889908631159b33a63ec30f7685aaa0a3c3733cfbf6076507490fee0d63846018d96b9d7adead33f45490a6e690ecd58ecf37c105d877400ae1a8b16ee1c2cb0b2388efaf3cb9b3002ac0b7480b8aa31a2b501289f59a44401442b545dcc2bbf84e9cf4992b2d04b7495568a66d63fd0472c0d32ab47aca9aff6ef678fbb4d5f94fadce40cd0956cbefad63fd283b6edfc8daa5331b9c88c485ad5d2e0b4c36710b0c27daba1e02c9d6f5fd83ec62074316fa2b47f67faeeda2f6f31164edfe061fb52ffff63e76a0d97d469f4a781eba49d977c4111a1a4569ec5ea4d2e3bae0d60101ca99d2ddabab79197933daee4dd68931b43bea6251ea23d8ebaca860018b742fe7dbef81325bc455ea86a4e9a1dac15301b61507ed8517b13d30ad534ccfd6b9f80d7fc119260748c1a2e8fbcae66c9cb4f5e66c8e0b8aa5e3b8a13c4eb5548d73b56b5133a4ff240453f25c23d324e81b3be66f9a509ef1460eedbcaacfe507db66bd12c172e1e87f0810cd27ec856647f6cd7a570c58fba026378e0a1deec5cae32eb370603a712f344a32d7e96903536a170d7e1762789c7d8d02653c9a1cf0bf09eb0fe22f09f8af547add275503438e628e8ade6c5f86b50f0b865b8a85165a958ec5000fb778dbf5d18b5ed64b97fe537adf56c9365320d1ef10517401b223bf007dd9a9c3a8e445336857f4f2c39bdc10e708b20f28c63d824c4d900659cac7eed8b102f29bea9cc7d5c77711f9b1ebd37f47ac8246fa09ee1758cc864c1e51ddcf8885fd6140fd6c8d451ce26d1a04f73862ef51546197735cb77689c3e41004dcbd660c083b1f6ba34946ad0fed83b3b1c94629b6e13fcad18dee1df694081f80ca83bdf17b9778e9b501f1690f7c2fff60322dc18bdce054125ef5665ce1c020d1760512badffefebcb45efd60dc478cc3bb576cf0f7c73d3cf2f586932e5c3f7ffecc5f059aebd29c4f1028b3381d13488262c23e63bb1000b540adb7def208defa802ff5f6dbcf182f4e46d09624dd22fbb37423b9a4494b3407fffb8f3f3013a33d02e36d11144621bb8c046ed0ed635756d44bc92e9702dd098809040a16a48e848e5451c111278df0d10897462895296f566120be2955c6b69b9cc9b0045bf2693b3fb5604b090335628107daf0a7323d242ac3df77edb74731bf288edfacc2f6d25fa5cfe2671c73a954607d1aca253da353cedf07b654aad5ad0e495de50db45f7e251c863877208c778066c3774a0796f864040d23643042f399f12ddc2dc94814cf234c86d3308521965269ae3460dcd32cf94c33a4ab8d95260907cc60d9cc866f39e0c56ff85e0ed8240ed4f85ce48cbbfb22622c42b34a1699e28bd43c017fffcda64819cfd853a44b4d2b0283fb5da954af96f47496f0ced283b795c8cd06fcd8001bee13b4d8e826418b952668b1d1063240640288c0b184480d910e6aff2016f328fe27a5c08c63540e89e1101b3b9a9e68fa513579b60e513dd2db9a94fec52c39755833166bbfe5b5b46d6d1a3869c0830cc891011e32909381080cf1c210435c28849142aa282417e20106f0c000982d9f06e6adab9855a2be2ca942a24343b6d22af1ce2f9b48343ff8f44a17459261f0125286102308f181904b48098358601029063162909f393491a84a9545cb264da6986bec5a9196f767514ef065d64a3d6e345cd04011840f4184102407418e5a108489205d207f2809248f40c408a48a40b4d8b0caec2151f0370e4ae9264d9a6816659d849a845563f1d50449366932add470967d2bb0a5b3ebf780300122e602d2c57d0222f105c4ddff18e378ff21ee11b3fe48e2ee56ae14ed7c3e3d2ca22a4345df8f8bf5f31db18028901f64f0dd7e6c41bdfcb082ebea026d5ce002d2a7066fa5ed57c221d1151628b240149f1e93049818e03ee9476510ebe7255d3e40ad97f4211202924142b2c7e7ca15168ff4d9912fa120f97215014957ebe741a615982e50015fa96f5594a9cf6238c264f5e9238b3ec23e527c2ce23e65f8f34b5a6cacc9fa2195b216cf0ab542bd4e9f14b3f7c3d9b5b36bf9907b307918df638bfb38db63c8a7467dc6b593bcddba479233687c662ca19cf10293dbe64a91af33b47906c72ad1038d3bbe2c3dbae871e4a1ed657ac83ccadca48783f25872afb63ca2bc2a1088fbc3cc843143849919cc6c4081412880c4bc852c99ba587ab36b79f030040f34f0c0010f9c099cf1c923c15b613809cdcff9c3d9b55ad65495ad3b98ee38e20e8aa2d28e3eec08c28e19ec783b6cea40a48e35eaa8a18e9b327a94015306893248656ae8e8828e908e11e888608e39e6a0610e11e6b020026244008c009608d4c861861c45c8e182c023ee2e6fa413f9baeebccc86526f0bfb51e592a949c3b0c65273df579a634de6e44895d09316ca259d48d70c8727217a92f296ebb5ae0f534b30c07012a252864990ef9ad245e5e7779d84a8e7695dc5d4cca98b8b9c4818a413e9a2d2abb68cadb65e0e95b7d0ca59bdefe9eb31acb708bcf5246d4b4537909ca8fc27a96f2a63aba91e4351eab719eb8fe6c894a45226b331bbb5d5f99a7ddda7d9563aac4b1528e36d358600cddda540e027080271a489c38cfbc76e1c5fdc67ec6171c431e5068b436a0b471a87a38c4f38becc2c4cc231244125649af61db1cd93b72f3277f8fc9791c9818cf79a2c323f4e6689fb04df689a6f481cf48617776d93df5072775fb5a4e7461e6e84e14610ee3ea58adedb5ef271e3491b80b431c6276b7e88731b5adae0d830e33e79d8d06c74e0ee9b256758d748630d27dc27785f74a9542f7aab4053b6c613351c51230e356c709f2ad58bb264f8b1340849430a2e69b49046ce1e637c18b3dd5fe68d2f7b59c61e16c7969c94ca7ddbc93f5477eda1a27d0da1a1071a62a0b1d190a191c4dd670dd36c3d2d79db2a0adaaf56d61951cc6032c3073374ca00a40c21ca609181081958901184fb4c8a5931767f66430bca1fc1dbd64ca4b6d6bb852858ad651bfb6cc3352c728aa3bc85d606de2a615806996dbdcf92f3c35ad35688e8b665517efd2f032f867dabdbbe23dec978d7ef47f0d323de359c6563d031c6168d43b947eced1136c6904f31d28801c69ec4a04d14f833efd3506d629cc4701743c67d8a5912f3e3f3da9a189f28a609beadd27618610cc11ea454de60af307026184dee13a5ff656090618101060cd1690b0ccf7da24e121cbff0e38b2e54946cae2f68bef34594d46771e70b7f80187fc093071cb94faa9f860af480252c2fd0f8a4cd2ccd8b2ff341e905d5796febc512f749572f1d9990119521a60575a1887bdde1d71d3e08befe7317b02e94706106170ae0c2062ee844dd3c3e6d7f281fcb49e2e48461058bb84885c9409831ee3eb2c9a4752bd55bb5c9d9dd55b3c2ac1c408803c038e073808cdd3a6a6d6f1e61d4fbda77f308fb6495da4af07e1e77b628648b313e5f4242441f83c9a22d9cd8a2c7dda7a76b5df2d1c28c165068c1831638b34958dbb439555fb37b0415549848590c9145142c00c182082c6658a48085cd15785c81c3153656d46145171ff33e49d4a9c6a4a72b4d8661fd428c61922555a939676cbff4b4a7f3df6ebdc1467cf3925e327b28251bd64ffc4fa227a977a5edef4358d556280113089829c01481913e33f6acccb45d1ffc3e5a4505aad8c2dd27dd18672ab5254a8ae12b7a5643d97f965571f289a4258b1679590d906309fca491b6c11ff7b4e1d8000da820e3ee9347cebf18d454eb4aa3820b1551a8a8618019ee93e552a95631bbeb76495da54af5d2c1b2db5a000f0b3872af534c31056d8a21f72c454d8a12beecf125892f397c41e10b075f2088e28a286088a283283480620c2840283278424cfe1c0ac589449d76fda68a42a1323529ea83027a33e774c402a252457f570904de3abb7696bf46a1acb082cc91b5deded1b3fddd346deb2bd59814f0bef6a4c6b62d7f961fe809d6131938d1e40e3a51c5099c261269220d30ee53539016ab7bd754134e9a50c204194c08e193824ab36bf38ba0bb17c0953011e4be52a96aec8d14a085026cf0093ee74abc54c00b0f5e72960064892e94ca300cc31a7bb07a943e6ddf2a3dfdb11bcb3626c3b02609295102034ac8a1c4921232093a92f892849524ba492b949c9b219af3e99aba78ef5b6d23bed911df5ab376bb181c5f8b127c24b02091c111773cce21a6d96a4fdb35bceb112918d18811562831228b11121461a68805b83b08aea4081d7cf2f0a0a8ae3b2ad5ccca68156f30a9b5a5bd4e726e8caf3dc90f7c15961b5fd8ed6e71ccdbe6629b7e571121f8ac23fe405b45f0971ed417cbf2d7fcdfec5af09b495da87471b735a62d58f3d7cb22020f22b638a592b633b611814384bbeb21cab8cf99fc5c6d5e4378b9d7ca2039c410230851c6b59529bb5f0830ae415c138285200a09428ccf4faadbbb05d56a953e3f92162f8b16190412464104b1c4b5f749565402041987a1584074b1404c6101b1e4873f2ceb87277ef87157f2c369ba7ea8719f3ea0a9c9af61970f617cb83e2cf16995a477abb6abedadd6f0efcf5cc6f8ac362e5b26bd16884e1b0e25c63c5c8edca7e692e4f5a88b7a38a37bb8a187c98319f7e320dc58c6dd279e54ce71871187db4d3e876cb0deae1d811e4317a15fb6ca2eb6fa166afd21f8aa176f5b8659344b3e93bb649d190499e1881944bc6f30adabceaf94fa588f8fbc3eb2c747eadae3038af825368976886388340a24533773762d98b1acb809ccc361096e1a3788abe5d6d41aa959517bd55a35cf9d7e4e6496e221a954371349a5d235753393ec153953f266827fc352cab0ac3b566538256f6608446842e825e5c1259549c2814ba2dfb5b58fd2428c457a5be087188b325821834d061b7b883dc38ab1a19534269a12341b68a899197707ff5a2cc37d5148a5a259e4cdb44e24955283f266e37b733337be55bebc69a23fcf3c24fa7a94361aa390e88bb7978b66394910cfbc986999e9609c3d991ab21b641e271be125c07d047ec97dd23064516de5b75f863dba420893aeb082042f9ee0c530d011700bb007f084d81f3e69bd1856c59add994814bc78474b4f866b38c60a311633062fde8911c53e80c9c1c16e808d50cbb84f4ae5bf6b3261a2e7bf56925f77cd32d747c96cadc53210099d6c38d6c6582cc458d47664e5afb64fd7fc1fd80a311e5aaab5d5b7da958867d7fcad50a70ff7c699b66bfe0fdfd5eaa5a3438c878aa4b77ae948afe6ff68dbdabe6b6b2b8cb3cebf7ae9e80f315188f190fe10e710e3a1afc63d8632ee31848941b26298025a0ea9c9a9b64864b8bbbfb458a165072d2d2d14644193058b2c5fb2805c16a22c4960200406303080eede9ad7ce2c15394990daa3da529aab9c2f8479218717763e7054067784840ccb1f58be6089010b0b0b04466c187d911917e550c45334c11aaf2daf175e0570e1c1b9c8b874d871391a4461106da2125c688473210e17b8b8f0e3029221090c153114babba6ad23e8a3ad9ce2e7aaed5bf0562cd2a392b1f484e810ea22242474131448101c5c8280822e70979789bcd692a079e4c41ed00a401a5c3983bb02c615a52b435748b0e20767858c151eacf858c1806b810eae053173e98d98800f822c26784bd0222d55a0cf558a45337ce9d94c82bc857aff0c04592d445a6d70ad2f5aba85c3b59cb87b8f733f82703f56fcf4f07385fb61e10702aeca0452e12863c26222f1b6e065c9a76d26200f131ebbefbf6c041f4c81a1a5e9205979d243a293873cb045e5062a433e7aace1eee05f5bf32cf5d7cae4c4f2b6f767d1a78bbb8fcb867fc0d7e3e7739a624f1a77a7289c00e583f2493584f594f19e1c7a7078fce0298207bbfbd415e602d0cd2dfc10eb1b2c3fee3e2dcfc977c89c24cd78c78bdb9d293b35eece3ac3e281636971775d0bb1b7f1a5c546d71da778809b32c63df559de6edd16bc759c22ba4f7da79c268c85266d3916d8e058c08263e105f70986b88a758806eb52a95edc2a076e95571dac90c70a40702bac5640e9e0c1e988992827f22424553ae9feceac8a60ae55c459bce5d7f5d1a13e3fac5b4bb9d2d179c430daccfefd6e60bdbf750d57d27b1aac4bacffa303a58422bc6f4b7a5146b13eed69b0aed9b52da29e1df06fd1b6b01551cf8fce4e8565cc93b1ecd338f6e9da78ed1e3f63fdb2ef5f06d6a7d5248cc3a55afbc2fd7d60fd2230579b38fe84755fbcb2fdddef72ad90a056a89356c2e2c6387ff9410bb6c210c76eb1ef13479cab7c08b3dfaedf1ef1eabbf813c76f2ffdd517dbbd59b76d7f74b608fe5ee1c0f415954aa58abdd2b630e94519ed0e4dd79fd58f4ec65aeba45c6d1f6883a4f7a3c3e2d189bdd12a488747ef6b6baebbf680f57fc0cfdf2a4827f646a0f87dd7d61ec43c46d20b3a8ddf52ad7d626d54c222d1f78d17c5b34721e981ad934eec8df688411c0bd2d157c45afe015bab9adf840b4a08a3842e72d262bb82f773ad498f4a5d82e8ce9520dda79e5dcb4131e37e252824a12ca59c833285e20ba5c6ddb99c33b89c2eee93cb9902d6ff91d7e6d41d736a1c478cf9166f9c25dc13324f76e09e50779f3868d6c09a1f4936a59856528a70a927b8d476f749a5884465587e4c6bf0dada7f8ff7792dcec9214e98705284931deee6909b276e6eb821016586433981b28242b9fbbcc566b61a87f2e66d6b9b5dfbb6da9ae7c95a96a67f9497266bc9114f24fa2e4cbbb9496d5d653263d95fbc7a1aac0b059e74626fb45abd7466d72e5520f05746d2b3b271e8da38d49f4af5bbe6d8b755aad58a076c490f6c494f071bfdc64a2bb0f51a022b0e6f55045bfb5d2bf04f584927d51757289aae3fd23301855156ff8a4eec8d74626ff4200e22614a4f4b92f01acb112ae0b3a715054a4ed1ef9ab911689c088d3827c212ee13ef5a6ce90b51b13792dee95bedfb4a5be321dab658a038d7a40917f7c9359982b9264bf065e2872894c241520af89f4af5b2e11bc21f5c087784804308257021283943cac0491538090207021d1c084c80e083e374bffef287dfc554ca6ba54a05da1e2a6538f6208e9de4c53647a650efba42f454e5ffceb65b7e409fd4f6fb8b833ea01bec61f5be277b71c581f0c11b1f88dc074bdc83313eb5b5fdfd2c390fbef8c73c3872f75b631e9c3a6872ae8332ce7500c6ad8ceb803e5107d2dd5317eb918334ce411a5e455b2549d75792aefb6b352849d797e63898e23e3948e2be019357793700e37383ed2e37a0c0019c01ac0170dcb925612c01b9250328401a0578a200ad44088001022841802993527ab18dd5debde51d5a9a4dde42af82f76715bc326f1096a4eb6b6af0b7a59a8263c65a1260c92dd423aedd2e1e0093aefb96b7fe56317bdb56a55a7dadda019cb82e4df7c5dd51f206eb682fae1b729f34ae93ee1c8746cbf04ba57a71dc98c9715c7c7251dc39a9c40ca74489e83e954c5152c36920666ad04583239606279f5c92345c9232b336b2b8245ca6fddb8d7349869c4b92c4ddfdbe3210a33fcfacac32fc99cb600b97c11197c1120e033499c3e00b87813893624118fc4ce7304802da700240e32e8025c2b0f2d074a571173cc15df0c305a0910050c105600b17802b2e2bd45aa9213983435203122c1c120ab85965b202c5380b7ae02cb081b3006501045c8d988c25ac4673353aee6ee35ccd00b80ad2801fde0a1cc05540e32a40c25500000ab4e028d881a320058e820b26d55894da4a6d9314b3e9d178889ba00a6e821826300027411b9c045248c00327418fcf07652a632905f5178755be52fd534a25f7df2895f96d2fb3b1269814abf916ce7078b19495c5453008170103b8087c70772bce45b0e22280c241708683208c4f2a29c5b236822bd42d0cebfe9a7dad56d7ae5848bc5b18d697f43ce925c56a7ed546f0fed652db90f05d5b8b3df84a79e4b9b636bbf65baa40df67fbcbf90c8873d407fe902cda07aa7c2085470079048a479878848a234d537b320c8e53deeefc8b6f85ddc2fce02df4f45b99b10ef59131ee8f6cf911bc8f44f159b947926847f258ad74b4ae214f235d34b24323290fece1012e1ea0794083311dd0a2035a3ac002236818018391ca489534894c0abe4ee91aa2a494f2b62dcc66d166db539a1ad200a519210d081c20e33e89246ddb278b48b1c895457014e143112a14114a849144e248e488448e123121910f36f0c6061ab08119360065031d221e40a40f0e91339f5fc94a4f0895b1cc4abb6518bcb979a55bad25d5fc4a38cf6635bf12982b78eb4e81b7ca5af35609defa616cce6a63bd944ad64244089179482387cc7108178cf7c4e30c550aeaf4b7fa694b2b366a5aa389862659d34dd30034c0860612a001271930e33e6ba8a5ae340ad6706d76a50cbfa60ddfa20c8060c81c866861889221a1215d211728a48c427421270c4c0003656cac24274d242292331c4a2792e8244467186251a7a60c43bcb19294fc1b2b61d1037f3f9d59aca46ff5eabfd5b06e2bd698f474e599dd95fe8d8d50bfb19117e2a1934eec8d9262f84ac6360ff1acb486d55bbdb74a08ad3824a4c920667e10319aca205c6ec5a10c43d620473ec82049301a345e7c66fc6868689608c2248898b9ff2608f504c1c99c20ee1e0893fb0c048cbb532132920f72810c496fff8d15c892795f3f206800f9e2eed302727405101c9fb8f6dc1f7f84f13ffe3895f0f2e3cca43f96e0471b7e88b30ec909563f96cc2e70015cfb9a05ca5800090bf46001284c82308961c282e98829a78f3efae0d2c791fb949b52a96dc03bca32965228783f25a54aca0793e1949494cabbb9f646be17e3e3113eb2e003e4c3739f5adfde0ad5f9f5adfed8332b66ed91c81e5ff6f87129c37f9ce972471c562deb19d61911e66b5b5df4b5ad44b60fa29f84f560d2c3073d72d003c7dd77f5f4cc56b196871ceef5f3d862419f3c36a8401fee3e5d17d7bec693ed0e47a091ca6b5bb358631540c10c93fb146b8d62116b6d6a4c8b71662ccc0ccd7d862cc999514281313ec10fc53183759c413edef2dad9d28376484e160542778a9485ca49012a7824e23ee5042dcc262b153cbec083fa04af8d59dbfe8b393c70f0a8719f4093cf32ee130033b7aeb4d704b8b84f808abbef3b803c20012c24602550003b1cb1e30a3b86b043853a08a903893a7ea8234ab649d0c29eb62dac863219961eac3e6debfc6d9d2ddd2e392f96a08549bca94ca16e37d88b351cf37a5a29d8a861a3ae206877e444bd92d5a35843d082a0d5a0fd5b7738d6acbee1507c1075b2651e29c33453d7ca5b0656c60074b4414798097e1eb10c534ae5dc36978e2577d101031d3555249e83698e396e4f6b8e29736ce0eeaeaac198cfb702afb5c25aa1e400438e2d074b8e0920f047dd75eb8c6d58e6eb8fcad4d35e2fa11e202e8e41e21813471371c0104714779f708070d890d9830c04c8ecc091f9a1f2620c563aa90fd53f44af6d49ef8d7f43e88d246ed4e1061c6e98e1067603c90d0ada28f3a58da0363e684302360061a309367a6023c8fd898e4acf6b573a736ff06136c7a4fc6ae353999ab3bb2995425127543da14e72a592e0d7461fb952c9b0d44f2b4b057ed17c09f5ecd887e1f7add1c844fab2d035c058e3d758e23e5dda86cad4e3b5db267555038d1a63bcf2ebfa573e4e0de953eb30ac6978918697345a18c3c89830eef3f3d36ae1ad31969c755efc1a43348643638c4af5a252e2fdb16da37bc41fd5630b6874f189c68ffb44a3e60ca6298eb77ec8738618f779c696337efe8c1af769c61f662061b7cd1d02ea912c3dcbac9aebd0aa163b52a97496f08e19495c2c2302652c9511c57dde6092de17f1b7edb52a9558cb3f54de1afead5b3f15329ac880820c2b64d44c39d25e72f2487d0bc3aa798a7a848886e4ad12d47ab97c5e3263d91863dcbd678ced3ec7b811030f31c2b84f3a29f89f45d07e6270e1c438f209b6a4b66238284686c57071e711f3aaf289dc38d46130cd30c4f8946174a1c1ea307218d2ddf528da5b6b6030f5b4c000638b4fd4490e81f1cda7bd1eb4fdadb98adf176668365fe42f3878001bf8011b78d1861760dc6768fbabad111e92b75bb3a7695bbece182693793183171e7471c6dda7e7715d0c71d1012ebae0020c172e2e6ec2dc11c68630a83012ccd763c6b29e56ae43d2f6f7c98e9cf769dbdb387415c989b7a4d4f6d701480e48b2451a5bc8c06dd1695186163668b1b510615b9bf450362c63c24486f5d6f2efd4ece2505e2c6f610c6bf920fe5aaddd32f6c45a93b07d6d55a4b9e6b9b290230b1cb2d0f129b1906101c21568ae70e20a1caef0ac20c48a3cac28c20a17dcdd8a73565000060f30718009c227a6b7cba2f469bbea7f2a4f74fd4cdb4fb4d5a9f904fc6bc33d2d59730aa8c99460b82a2250451455d05cf273ed69a560a3ae35acb90e55714203fc68401a0dc0016322b1dab4cc52866baeab1063586e803b1563ac38bea8d8818a270c108401637ce6e0ed9a0cf0c2002d74011858809705f02c00c914794ce1c314264811881463a6adbd86d59abfe6d7164c9d52560a9a9402c7653d3e5283cf4951e3fa4b195f64f84280289adc27055117cf6e05272aac2779cb75df31c44a358a30516c89e28715c51228d24c16146458505001c590fbcc38c44f3c4225deaf27ec13a23f31458f4f76ec9fa8f19a9538c809301bbc414e2cf974028526fa68e28726a64c69c3a1fe514e2cc3d79840e3139514b349a8ca841726447777bc37be4c4441a2f7af2c5520269228208f5a015b3c480151b697a631ee6e5127c9f2d2c5b717ca7949e2359bb3dcf82ec134f15d428c2f41c34b5c59c2a7ceb62a2146099b12d2dd274662252147d5af59493891c48fcf24dc271261dc1f23c1458fdb2221ed2351e353db704794e1b37b441347fcb85f5c9b475cb0eb38c383d5083a8cd8e2e17dbbf5c68ce871db90edafedef2a7fccf677d5e58e2e3d7451a14be7ee532e6d999af9c3d0c26eb72ed59a4c7144e440440b448440840f71c710590c81c4103d3e91c20ac3619510e3a1fc4321c6e2b75497eaceb5b8856b816816b9df2553580624211411820e2190f029a94cddc830a5a015a28220be08a20681040834eed34301f1fac1911fbcf8217447a2368c533e1cc2f9c0840f3e3e9c6c7f2bdd9fe9ffadd689392e1ff4f0460fb8870d786083079107d41d3b74b1c3971db4ec50b483ebb0860e61e840753841870de0c861c9dd675863de8f9ca8f1ed49667718d6d68b060b5e0ff5346d73f5c0a4984d92bfedcb32967d0d6bac5fdec26d63bb25a7cd37bb16e7d0240110488017a29e9913e002021c4100150828428053faaff3ebf16b58d72d55b6c82d16e0e0050e5c70a03824e10e9088bb4b95bc5121d13f403ec0073734dd20c50d3ab8fb04f1b6e30cad2299ddade965ec79f7061f1b16b1410ef759356cd45e6b8618db90aa018f1aa2e06ac035c06a10000d4d3ef196f745fc7d12de5f932fa1a0fb229e50bc99a39afdde165f496f84dc8eb849597a845b6263098aa52c4b19d822605b808d095b15db094a4c3e91a87eefb392c6b5fde1bea9f9f9631836dec29bf1b53cb2c92c7a18be9fd2124a53023cb96657fe9919e9ea82d59d954ec654c2b0f2f0a8544854aa073f2bd64fd42a150a39393939393938392a44490185134c28014a8ece4df60febd1d1c93a0fab3b3a0fabb0187e892075953a2f5badbe56e54b27d7d065da68ebc6415d4e92ed0c63dca70467d0334891022202c494e85ec3386b0ba337fad7d6a4475127cdc2646cedf0d2c43fee8e97b8eba271cf58868547288cfbbc4bee18dfa12b2796ebb5ae56c6ad2df519d7b7d5bad0af86e3eeb20bd38cb0d08c7b0846cf2ece58c29bcf55c67aa9d6563ab64aa4b384773e5bcd491fc8c001191820435027c3ca0a628db03c56031a1af7697150b6a3e8ddaa4dde32be85d6f635bbabed76eb6ba2f449627debfbc879737373239fb6f12d94c1fee24b7b81064137cbc06c8959ac9be9b87b9e9c36fc3ef03f2c73c9089179912db94f24fa7dffedd7784b24958a66498a55d84ba6a4fb331fc67d6e1996dbdac23a29fdd73b08a603b18027c4fa7872cbb8f6b593c45bc66eb7de683b63dbd663a62a154caeeaae3d2e17eaee482fc418767a1003ad82746e795f1ffd6d2c6a5893c3be38ec033f3f7883b160475e188e3258aae6e1eedb7af4d55549c9f88cd550ac92b63f9a02c5a14968045f1cdf1adf966fc6c0d4c530440cd63d3f9885e85205ba95f6faf998cd431b8b2e2a53340c472aa9988aa6547a662c635589535e18cac40a8a3a862448661ce90b45921e9513443a729f483563d6c2244a1e2d5fb4146949a2fa8c6359ccfc64c922cb0d594eee53674cbb2c353fcb1506321d0c48f80461304881c182f8cad4ad86dd0b655ed8e27f31eb8529eef385243ebb2332a819db5fef28bdcfe3869d8e7890d77ee0772427c61b4b87a50b96252c589218f1e1eebe32da3182a0088da22dd7866fd2aea11d613b4538ae258b1639c1dfaf0dbcc650242d340fb459b4d08c5f5d9cf51a72c752dfc2fb5ae2ee62ba45ae2fa3e85af2e9c2f11a51d3d433dd118df19959444b2ca2d3d495c80217c4b8cffb341b2572615661a0adb98a2e8ce0eefe19c786be1822a21be23264821093bbab523c3bf632d9e37dad76a9264c88052124417704591154838c82685a3eec47aa284d4d1a4d4d30e3184dcdd4d47676ad50fe249c777c281150194034200dae88e1ee937e54569914ab303bde570aaba6e9fa73d2f97186ef89bdd177e5c7afd48056ccc86456ba602a46439d9523a92badb352d3429907bf852e600bd47d6ce1e4ee2db45a5bf2b86b5bb700f09385bb4fa5b7b4d8dee1a8c15bc12a1da8d280ae8a02aa54a1a2089529a8b4e0b348e773860fcd67ca04c39ac216efef93b058c3a76d9d543fd4fb670fde6255862385e67e10c7ee2d941364f51452bb9e307a663d1a743c64e4be0f82a37e10c7643c4b95c7eb7822d8716367cebc6fdb06cbb419877658f0f9b3ba5ae9b1f2c89486f468773e5dbf5dbf5d57413ab11a7e5964d5b8e7294c53c44ce1d24da14dc1f1c9421aaba4ab8dd5b11006866dbb63618bd456b2f0c3c212b05badb8f8bcc15647eedd6ac9c4dd0a4dbe02dedd0a472be078a773edee74b6743a473e3b1de9534ad3c491da7652c2e04eca5127a536deda78c196fd544e3ad5042a8491612c0ced1d3b15984471240a16515eee72c66a0e9a630a6aa450eb52f04941a290070a3aa08073c219f709d31f6d63d8f7afb16d77271071820add09a73a3a138030c1045d615bdb2b3afcfba210f85b3fbe1a6b58ac842e4a402ac104286b7450a680a24307e5088a0473b3585295a25d0e16395872b80e870c4eee7066385d2da7744a52f0f57e5246f7648bbbcfee8900e618dd04338fa6b6fa2f3e4d1e4a290d5992522aab508a8914ad4bc5d0a592b8f4be4f756b582dccc7cbc293c1fbe99c20d23921336906c2a1defac71970e8a48bff1da51313a674d2c10d998b65b7f066e6ee7e6b95afd52a482729632c4919db56aba0f1471756281616c5df7a85c2c14121851364427ae73a24bdd3be96f681f73b1410a8283e59dd29cd098cbb7b77b2a13bd5d3055306be52d560ddb54777365da494d7c726c8bdda50d09190a36d97042e3ef1d1d4249c26cbbb11cce0d8084b232cf117b10862dcfd5a11a44c8930e5619d084b6ed193fdae2663c0bf18bc15566bad09cdbd6b92c4e728764ccab8bb8bcfe48b4fdd319198c94f084df345bcc510be780843b229bfa44054888c6e357ca209bc937a482ef36317ef7a6bec65278f3a79722965276b32084c7420ec00028eed2f18befd580d256d4bdd7d60c67dee514caa2fca5d3f00f381be2fe2eb41930c9d07623ce0e2ee73a9761e5077f797fb5d9d07b2666bb877d701990ebea452dfc1d1ad03cfdd27077d700044c701f5103e571bbe499fc38e83d344e993bc7883333e655eb701191bd0a6cebff7eb58b741929b9406180222fa31c096b01a608a0120709719090dc9cf541ec4413bb17bd3aca7c1ea6bc3608871eccbdfc5567fbfc7fb2dd5da4adb304d7ff8eab06ada06aded7b5a8cb6717e1a740d6bfde1700471ed9365a52fdc5ba6246afc0d40d60d4049c786fb04750dc30ab3b18c5bab8f67f5d2e9ba2949ba8e5d47026766d218b5519427e27da2dc17f78d671d7794ca78e399ec381cadffd61dae6682bf5481949871f7a944cc04eb4ea70474f7d929a9d1208c4e03acc1932418e8929c3191e8edad6c5dafa854f589e6edad54f056894469961d569adcb6a7c1ead5ccca5e3a49babe9274dd3458adf59088f7d7650046065f97010a1d067c60e00306503a0cdc3d146decda2c621d5671045f8fb7f0e25b7e2549db54f5208ea9284bce6da56893f4dbe4d257dab6b6bdf4bac6ae15001bde092088d909e0e42ee2dd5d20a6bb20d65d200370c6e76c84c9dbad28247a92f993623553f062d60d265f66e50d16800b3a24627448923a243616d4d1599080ce02275d4d1e5dcd175d4dac46005d0566549080ae02271d054d1d056af894f469b09a3e6d53a9b7aea2c4177f32bc5303434cab1694372dbd6ae52de3ba3f9a69583fd3245d5f7457fdb7a6fe6529d9c3c0547e25fcb497271679db3e2c6449395d3e46ad57900f4f504bbe40c47af904090149a120aa294f4741111448993798f72f93a2dd54d26296e6d17fd94725eb5ff685f55ff67db87a2aad977da2dd3d335ddbf5dbf7f52a8a4a157b2595aa9b608b4f70d44db0c48bdc1d04ef2468f2997127811809bccc1ed94970e4ee3db293407611d82e822fb38b40f42e829fd945d0cd0e82311d0454b83be71d044688503c2c513943737fad8300c727ddf7672c7d8b20a0c0ca184dd7b0de71df9fd50e001d008e1c498b8769b62c5a2a6d05ef0070f112efbc89d5f998cea9fb046df8763ec207ec07c2841fd8d2d3fac0d07d248dfb2db43ab2a1a8a47406dca0b21901008000431000003070a0503820140b86e3313f071400005cbe945cd59c2cd0131d44c6100344000000000000000018a887facb332146c0d6ce0aed8fd8ddc627301470367133cd205ac794138a41c46971367f09989d48ea0c01754078493d75d356cbea2d023ba8477459677a2b8e01ba97a1b5eb0753511d5d8cf50c334777864c1010b5fba5a3438af9684dc74e51dc2a399c566a86ee41c4a9a38ce90c41773db9588bac944dc9814b9d8e91b1920853c3c48e41c05aaaa0c450b42a70258b6202f4da30615ff13a67e0bab8857bf544805a01951026a45cc456485bca24f01788648a3f804101a76402d3650a7450815800aa9b9c60185e57830489a1804f177d1d03f1aa76e16b6189f87d66b5a576b0a957c02a4f31ca24622d3aeb193cdd69463a7fe2dc9c73677bf4cfbf7d538d0faeaf5b96895441dcd13c97264e406d730a4ec9be96c07fe61e35ab3254cd9c08b2f33f15fd8f5cfe7df0a00ccbc76fe1d243615102ee434c61924103684c19edd10078831d3900374ea3208e5e6c36a4e5dd9256a8ad55b0df88b3b480ac6dabbbcbc7259ea3de70dbb5122fba8498d4c3e409d8fd615de3f2f07ee229ddd650551e578fa30685cb6e97cb6fc961216650560dcb5a5892c875433d99c07ca2e64e5b17d2cb9b9885a0f0d0f3a5799e365766eb13c0e8065bfc3e3ca98753408b4085c5365659396f25a5856eb6838796bbf3e7e31317ac6c14b321f582f28b437a6ccafa7f36bee2a0e4480e7258e68ee88e3e3feb5794091e9811d5e8580b32f9b81e03cebe3f98fffa9696847aad16a652b558998e4d0717812d30d770bca8a13bacb91278b6c820046bd3003fcbe387142a5a920467d9840c2557fd01a3e4367eeb66e661bf0ae4c25740386bd09b29b015133d301fa043ada9ae94466c08f24b81b271ae4a07ba4cf03b5022c1da6f45882c589351e57e201b7a9ea3f3d43c2ea9e2ccdac2cdff113e35c3e78513830fe166de4ceaf788bb4247ee75577130a1740b70b5e15d222d18d741de7526d4e1f05676ce6f0a7eda936efdda1a56efbdc5b5a20a8e6b7ba52cdb96d2f1c38b83a6a39462c92e646c6b7f82f63017c1f62608d296c4834403d66aad1b655a1dca235cef9a02cb9ed13465b98d91187e81a397242de8f242698efb4d26b2c2a0d9689e20f13d5c722206f940eb60855019badef5aaf4a53f32a13b268c7fbe818f12c0ce289a49486dc15a4f4ab584357fa20dbde9bb2c70476659df82911b992fefb9204708e8a0fba1c46db875f17fbc81c1c14fe8106049e7d58d4e8e72511009e201f46c2433bc3a4430f0356836f7844c262755444d991cad552b085dfdc6c0b79334096b2f87cb22685cdc4d3fa6eca3850018b3ec89dd15cb87556fa26b4c843f16cb6774bf7d1013b3089f5f740379c5c15ee49eddc506d46c506071a02ddd0784e854542acb19590e11465316c8c8aca81dc4e2bc48d85f3b335458b87c80cb21447a29a32d56ef7336b2f26975ec920dfde102dcf0f0e8085a1b87b851e1f30edc463748b350ec1ad6aff8aa708399efacfed04e3d2f6fe6af0ada84f8ebef7917f3ca5ab2c236b5a0e7fc151d5976a2f385f0c50a3459f283a0e8fa459a5b1dbaffe83d9c69ddc80ede9b13fa4e533d4c72a1fb8a3f195b9f0ed995af454f91ec969f8edd52b6157c5cae6ec288758ba6908005d9534e9b45e277b31a02be45d2be14f36fab66dee11f504fc2d9b334d57bee06ad2fa61dec3638316a8dc974fde67e5c12d95e68c2d3f974cf5b594f1a1a4d59f5c979445bfcfb14c4e78551ca0be59839649c9ab79176a0dacc8e24ad8d6cc809e997ffcc5988dd4a4fe84e87fd71cdb5f925e30bc1b62abfecb2370756d8d2fb6e734e479684e283b1dc410545453d914f04ed5b07132fb2cdb8b3aac997034bea6b6217f41833a4749ab177c99da361e1d54b0f2d6e1edf8facb0b4c02ea1824de4e1fd1ce47e8c92cf2282331f0dab436c1e84611a7888d4ba0490d36f7168b31c3ca9d5662164087ca7923ce2b10a07193b50bcffa153297459e1e345a89b8dc59c1a2a17b012e8d255cbac89f5e31e64c4114e631370f625688a06e51d7171e93c6e8194337e22c1e2211c84fa687e344d3b4e12e5782a29bce85417b34a18db034745d131a56601a762a21a6bbf275bac3a46c01a262d893c5aea63272227173afae22493eef3c8cc5a609e0c757dafd8e889afddef30c50336c81798d161160844407bc7b1dd289b5d0a77fbf0d805f47d27d437d31b49bb57aad10f0a41b6bbd1b814e4bb4ab5ab4eeca9eb781d61bd66789670e12cad97ec25bf0b96ae980106443663c6879015e136286488e4a34833334aaff3028002bb0c5673e3c0ba342a55d6a61c6bfdc7cb13272ad529bb61bc922824a417a6c23096f3f6e6272118e239a097c1fd5dfbded96d89946edf95f2eed8e498d0ca1057e615d0a76ff6f8aa4159c384c6f355e77f49c3a04d9edc62f515de9bb63b90af4a6517e6c446c0cbcb954955b2c4924f5d61dd2f78e898b75d4acffb128da32dbc0158096df750cc9e964a6a3b332c3a96e3e0582dd25a024ac1d4af1fa3648108b1c8b4b6422f96d8be1e095b0b8aa5d898c2a6c341b917d1a3419b609c0a310465ae7a22e9ec8208c04bb98fb63c650c5a3b43865821a33711e623d4f3f710fe2a95e8a39771d340bc732f590c39b37e55009ed05f9d5005feefe84f519b43f654951381dff02729c4fcd3f98f2a929206f4efbb662930d2e7614bc3db7bdb7244358d7d6e038aa878d628b957d4f7a643e52f0671af2f31414c9a81aadaf6bfad1b489bc2c926bf771ce5b54f64ad580a6a4cb485c997b1a1f56e1ec001d7228753883c65a4fb1e99c046e59901ad730739ade46d285a28f9108d757324d84e67ee9c1bd1e7050bd3565c05b9cbf50d791aaaa54737f9c7720311fabf40521b61c8cbcae5c7517a1bad75f901523a8c482cc98a7a064ad3401f21c2d4b2d73c70d69e15fefa37701a626648a8f001318607dac53874610bc82f8d60164c689c590b870464c6b237fb1def267d62a94827d28a157e01d8c39ec2827d605e2ecc9ff7a0eaea35500531e6ee1fbe4ae7b21c17120c03ce00ad7b9fb6a5cb27fd6880200b8772dee6e3c4e3bf1c06d3699950fbd309dc1d1d906476e7bf601a1644329160e71f7ea064dfa82bfe17b321214fc2cecc3191111425c68d6d3ff1dd4f07ff6b9776eb8f790f114b8c2b4af582054af603c4edda10fc839247833055929d68542bf7e1ec52b975410c412916ecf35d27d246be669f0de4932c518b340e8079c7733ae6d7af0ff0eda5b39d73901135b501eab04f6d8fc6022c99614ee29f025e7879ab908c8ce66d4f038087146cd879ae2c8fa93b94f1c558f5e65f8cee5ef2d62e1bc60cf4641b431db71d181379d9e2cb07a13ffc12c3a673ec4afc3dcbca77b0e494268da2cbee617f334aabc643c532b797bc2c19bab283352fcf0b92764f47cf9205c89c87c6e14f16623694f6a7dced20342520bc55a6ade087f5c46191a80ac58996f7d2543f239e35d9e7424044fac1fc95649228b0c99be9a92ea5877c26dec56cb210b7465027cb5cf328b1d3f3db656dd499b91a1d92e277793f37da0a24f7d244213442b97fa119c8cb3e5c9c39fcaa892f87531fe6d098ccca73d6ea8982551567bda4a26615d15114659b82a8853b6b1959a40afd66fc7b2c276fb277e017194b10495bd07c2fe284bb82c439d65a1a3f81ca64154cc47a2f8781e064c186e85e7bcba5100ac93cf8257bfa260d86bbbde865707e53b76d90100d01a78ccbe6db28df429578c18e6bfd530b2eab4a5d13bc431e5ebe6cd14f3eef8c85560680636be482e57cbd06665c3274a8b774c270f4848275a59824fabeb05d14727655f9ea406429c6cac8ba277341b3b33de9cbb4b5ca42573b5b31d9491340cb282aa6e4c0e909e5bcf5d44c48306d06a95a49b6206c3c355f06b49eeed742371c6f6006bf8ee940fd1772b550307c2574991671a6e1a3c7606a1e0c164724eff77fcd7617bcb4c97d9d3e04e799d6515ca4930d57a6b73849d8fe9db94310ebfef3e997c560eaea4aa716c7d82a9182734f1c8d47c63ef98115132f4e2dee88980022224292236e2c6fec04d7b2750b562f882ffe5c95330f29db813627b9363fe4ad9b4981db9d77624f3b6d56b443f93d02283dc2a6588936e86e1ee67a37302816cc629641dd9882296cc714cdbe09e42b9c1ff9055f836b9e125e574c66a1c73042b861c5bc395927e5a91994bada936697da8215e840b6e08f1457e03a4e7163699afbd11f1ed3756af2ab9d8c1c806e318759ea7d8a71d4cc6e87f46bdeef5da5aba62c1c98ee0a95d8dd76ca303892ad5c5c2db100fd4e5ae20a9b82b1233b5b3d213641c81c413409507f7ad2070c74f4f987410e234d6f1dd808c53089caf3a3fe09ebd36ad687b3ba30bbe88d5f3593bab1139b240e35fbc95dab6b359353cdf5b32e29cec5651547a8b7d4d5fc33567ab555232f17b087d111a26c3976c7201414312b4cae77ee3acc8685838a4164a8283a4d708b3c4cad72c4f0fc235c59b08175a4022b9ea7d7e66e28c7ba55f5da8e68d2c65b9689df26f37d0ee6a3e527646ca5fe2c0dadb99cc08925f48713d8387b56a9d2f5871b8011fcd3d3544e783360d005eb37f56ad4430b2cc50c59a3abc205037191f416a2e1587c924eb76717416d10589c62e15d7d30207492da08b39c2a8bd68abceb311a0794b1d884a4e82ad8fc2ccdf4ca8942396e206484e6eb7c6384412cf7d96671b80c12505f6805aac4e02a95087a5a88f5af66ddfba47a165ea320bb14553952d48541cc3b61e8f40046492529ab2a796a73e2f40291d673b73fd4fd875df921ea7cfc37bb610b7a494f9efd3d937cabbd0a7901eabf3227e1ce6c5cc5a84d672fbdb43fdd3fe0b0db4aa89d49d78bffef54538db8a8f93a4f0173647e4f8e6ab618d6b00d0d5210796eccb71787b4580772180f8eca93eac44d87618a1738639aca2a141e2546d511aa5b3971992372fab807341f0589496bd3b1d92e3121068f8b850508b7698542d5611b53f6cc8f7d000632896574bca2c77528664e8fd13d582f80497d306c5de0495289c73f3b1ae62e6d4452d9f5d4d372c9877f4c76083daa9f20157cb6d985fa04e9c8b330732fba168e4e655c28733368943c314b74041b82a0207e8c696dc9aabc0782877c9327edcd6c5d25441bab7f613f20146b3c829ce3e1c0f3326ec37d7e1a4885cb129ee65ef9fb88770327fcf887034566b8f18abdd71daa638bf9ffa37ce299322a7eff255c49dc4d3ef97ce7d0ad576aa942a2eda59092190234bf6e548ad76afe93afb068855d34677802ac609c84bb5444cf00236044c00cb44f95733bc04e0f09fa3a16970aaab66fa6c6fb88e8fdcb18dfbbf9c7095b2839055d2e82fb3e76016e62b4f6d7ecb362423f78ebbe83d19e83eedc5afdbf904497ddbbdc028f08e79580e1c392ee7e83b264878d1b68bfc60fabb7f4e1e3077ac80b736ce2f86f876257deae08674ef58d12baae65f02526b065b8eb77827ab7c15bbb82735a85b9d32b04e8c1400bd7c07a7392323bb22574c9cda7df326456364a2fe8414ae80e1d826af2c27f208bb5517db81b10cf8288a58189391fba6c0b5e646d5d59d6441394b4523d2450907fb00821acb7c4601b3438d299c454bd6159da20d8d9fbce1dacda5d61759360f142bfe86aa75067dca066fb8406673975046ca509baa4c8a4c467dfd8aefd758d981bd36761169f3942bb42aa1fc25c575388e5a981827c634c06bc136b50128a9b971655a439e81265e38100911890b1970d700cd03658ebba5cddb5fc659480adbad60c5c5b3185f63508eef0f52605d39b1cdf5a9dee5796fcf183a5242b9591dd5d00b9dac2e16c25b22ce2d79847aecc093dc2c4c25b6fe4c305ba7bbf2d4b799394a82c8574e773f2c64e9605da6007c63d2b21c723253eda0fabb6084943f193e06d31cf88e1c71afdc00c9ed88837a64eb52dd239cdb57d3bb4f1dc068e5ae0936d5eda18c1f3450c5b45d96cd468d75f3599cacbae5582b92b817fcb0b4c533e85a71b47110acef5b16114eea48d43ad583c5a1b0bd3284c7996476259e00b431233bc4dacae819bc78059ab0da2d220a0a127d8d194c7fd5071ab9459dabb266adaa1027a065c1246c4232192ac354417a407adbceb1c545a61eec30adb7965d70f33356022cf8af15cbbfcfa946f222ac16e619d26a12d06e1da46dc9bb44c50d66ab94bf07d5a58d730c8fd732a9b95821e09705c2bf866eaa5cf86e1ac487e15d4e1544ad92b7be31898517a265783e803617910910f6d9c22d648022fdd30de055d81aca962272092cc67de8c84e9b97ac21eb8257befcdef30b299aea38b20429d11f6863a7487ecafa8d91ed66c2a0841f827d5827a120a719865a30109ee0d67603138c915b0d8cac0beade1b2938d0851ccae827ced55a3ca7a8b44a7a7225c841c800a49a809541af314a5700db7730832c4082e793dfe743f368a93356876f88ab9f485526f56a9b43ec5456755202d53023eb2a7ace1dd249275b66204a630af69e4d4adb0f8d6d2638ad61f48ffa4ac508f9efe1471974603e1dc9dceb4c17523d525803af66da8e932f32e88a7350249abe2d18c04b5938497cf78fbdf4fa560da44cc81d202962d2ac0d9ed0b2c96a9c7491f56f9b27e8c87a0065b63583b883020e7b41094b50c904b7a4686cf751503e8f957bb75bbccf61d86735a0af83c583e056de4932bed0c3535bb73a44fe2643325c30fb16aa52a0d25db1602953eadde697e437681be2224dd72f77c36c9c794619eede461ffdccb6337f427e002fc5f580200cb8a8ec359cb332302d0d2af13d257584cc3f6b8bde83fed85a5e8a08e72243f21e67f72cf51c4f340ec9402a2ee6a6950baed2d6f4aec6e87fedcb8f2edc17f8db5a3108bee1aa25f62c37d17e2ee03227a5c06e00649d49beb4a128974147979ade6427ff424d51c14247c4fc1f2d4ebe6d100f9ab3d0995559eb9218c177da8f63c543b517f72dbc6364dee0cd26cae38d94ccbff7792626f4fec77f495fb138d57ce7fc9b57426aa6aad297677bceb9423c11175345576bee7bde7f909d481e3b975966962fdcf60db2f1208ba0e18356aaf37c9b607bc9e119bd9ae5b974e3e7cc42cc3a86ae06ecfce3d56e030aae9167ad31e1177717222ec2c457d50e4104bfc1d1e8b6a1d82ae416723bee7edafc4c290d9a95ff7873f331026dc7f594fbd6da9ff75c909892a4f3360bd84efd0153092c4778929c2c8396a9e3e8c73b86bf374789cd1fc48e9ecacf83ce315a6b5d5c5fbbe395a36b106885c110d3381d09d06c074cdb05bbb1e1c2953e2a44400154c9f9cdaf036199fa3fb4fbae1950079661437500c4e76e1fcc910417ba49d5e1c7204d07adba4a6a4480207611d8a5ae4566a5321f1e07840d090c42745e9061915d781a7159fc97be0b778d1bcd8715edfbeb0265f9bc484f478a6fd82d47679606280967872058c9484cb650c0d05c3dc32f7f8ab99ef9fb7a3a8492f29d07080b3cb7efcfefe272f3ec65957afc42322f9bbb83be65f2909714bc5f8f4dd75230506443bc7b87f0e0bf628efe5aa7a4a23235559011b322cb164b5eac6105b525ab3f2ec11fd9013247a900b93aebfda06b1608d521c4885e89fe52ef1f64ef7e30b1a10b2e44edfaa39542865e9cd4416ac0222e08edee65572912ff5123bdbfbbf357201017e2428574538a4433613901269d284f19942909ec80c38bb0861d83ffa3e4bf0ddc536e90abfde992f2076e8b3da9f8f7c74aa60c8fc55138593f1d7551cd65c6f0ba85fd3cd4c899b19723e7ec8c261e5c7e10cc70c2336263f89935de81e14e430e4565657e906911b82e87d1b557fe10a78f56e16d87fb9894837dab971010a9288a7b7b4833529344993a841d47b369deb182443c2b609ed82a2354ee151e68318957eb88e53fab30cb6f8a5a960b460480b11a7e72c60cf727c1db48cf4241d3b9f8199e6d583f2211812bce6641c955c022b7437e7139622ae7460d96ee23cf1511152189f07bf5c1915dc8cf246d5ff6659e6cd371e6e2f963d4ec969736c4300eefce978a98e46a2e49d5c86442fdf62dfc1feef08cc636007fb620e6ac885172004b2ad10895f2ea80b0fac18b2cf368ed617aeb71f45ecbecb2b43b5b4e0fe85a55229ebe9e52db3ff18c9dd04de6ae986b912d1284ed008e5f8be59a8f9990adff9b4b22550d36ea487af5f8e1dab5eeddfb77bff2ce8a32ff5d0eb592974307e9141ec393e48c1daefe2d6d650fc9887f44ecaacc03594d95733513afa14c6c0582f606f97857da3b4c9073ffd186f0672d0abe746a50902c7bf207b62245382dc76f0452ac2d227c3385ec48d8c75c0266c43d8a70faf8da2f40e0d35d09f22145a56093d49aebf6043f88a83f1e3b514eb101b3b8edf56e0513f2b35d5a65dbe5faf1df83408b4dfc8aa2e783dd8681f6503c188c58c7cea9f8b44768acae87f64fb968e3c6f688ce6d1dc5d23f183506c94458297c126f3c01b2e011bac63bf093a6c123e7c38616d4bc43d2756e338997b9983f019315f89e7a40e8ab6949580da317b9a30ec2ae01598d1b42f0149e9353201bcf666e5d28537331849e639303af60c58525c885244f40cc08467fb04b136941ff7e19f5503b2327fbbf6b8c5316ca4b2e50618d4d66f209cd96dd9e7dfbace955e38f497851b9b9a6e4d245a75e4a36f2b3391eac0c873ba38d0e0f9cfb4cdd4e0868dbe73522ccdbcd7306a66c12698cc111b289bf2c088b07d1a7e98b29eab01c36c39e0ba6ffe04a80d9f273cb1ac691849f2d8306dd1329e5343d799baaac396a03a188fb3a027edf77ffdeb3757e994e8d222e99558fcba9e6879cef67bdbefc1f37526427acf9d5a7f9c5871b155a5001f4f567efa2dc5d91de14e0d1223f09f866c71ffca37501a4f8bf7252c01945474a77c48c28b33bde865f2e851b4efb00f6248d4a0f19f9b35db74a08bd7f44552ef4d330a7f43cc8283a545dc702327b3aab6ca6d891045cff6c436a0593aa882184798746e0f1422a9fb1c2ff2d452e1417585d89f2f695af176702f30850a7ad44a3ab08b63c2e47a74fcef6afe9b074bc0d742ad8365b39c2e3e906a474e5881c356f56050a6221482d288e4e9103df9b37e743334cfbdb6ae71b0fb1c2b1ecab49d4e00c5137c21cf46004b129e10270c71b0d098f3db2f2929fccb185498574c2b4359f82b601950f71f890a2205d20a8d857d647ddfbdaadcc42734f74e78e7d0b127120fc0b8b7d733aa1b262e8a31d34e85c329998aa1cbfeac5ec822fe2dc8ff05d5f1f6aa81eba5b19152cab1a1d4dc9808224905ee30041a2aab022ba0f59f2b88d491b1f52507653313c2c6452c8f203d4e4e08e4704a20520006818149719ad378f768cc88bd5b0a40c535427fd1e285b15ba76dc849d665bee6cdefbacd02586d4df1bbbf543b176903fc896b551efee24f53798c20c0eb53cd91f6ce6af722e84424fd491be3d3eb085a041791a7ccab2f1c8cb8d4852c7b4afbd10dd74fdfd6c3e3ff227eb254c01b129c92f247b02025841e2d4df0da38c86ca08c21249fd1423f3da7879827df5986b99132d60398bd8e9ff6361888b94ea000e2f0597d02a3194cb624db7b406d433a60ee93ed5a707d258d7a0176a6586026a518a8a652bfea60401736b4544ce02c5280c2bbc00c84a4e1caad108b220c9cb95c02e710cf6154041d3b988cb0d6a7464fbe8ffc64f19b039dac1485fb3084e8084e2fb63a84d136bd60976631ab47f8272e5173319a0647adb78816772037b68247e7085afa082a9ea56e54cd3d454736d71f7c0716a41212888c8fb515cba5c2ba85af8931b64733b8d8c500caed15d2c582243db1f3045a004a93441076a1d59e4b5fa9aea6d378bb709c2ca96fbfb444593482103f28de5795e2b135950e17a255aa0b6a60fe740a34272ed8a88163ad6c3f29504895ba45afdbbba02444957ba660430e203b02c0d9380d5a3bbb4f26acc40e4ebb57a78bbe0146869fa932f9ed2bb9464639603b7edaa8ebeeb401dc2cbe06fe74a7151f7c681ec4fa4c00de8ff29b98e31e051015a176cf22dbd00305d3841c8c833863ab9d3de48796ddcdf0097fd1bc5a487c68aef58480c5df7bfc3e8afe6fabfa00af1fb1eb551ea452998eca905b0621ff08268d953b26dc7231192f56b16d620881073cd2b003dcf0cdcf0cfaa8bce60fc833fd3f8c18b08a98c8f8129a22402b1747f61d782782130808c150a0e2272823a2a588d4184418decf0f956887053d5174de6f41b82f34dcf10e81f7fd687b1604b16f66f8481508d024856084c08055c501f3b58b4eb7bc3300034098a18313b0e05045a5f75313b1fde8d458f9b62df01e855022f3325bcc5886f4ba64f50242b48e782bca5966e14bb2d82cbe12207bc0825547fa21cc622d988db0519fe29b5f04b881569ccf659e830fe2d9d9ee735835ceb1883ef1f5c8b7ba4a79ff243aba3332255905e9c1d4d5f53ca58ba1fed3107316c703b3cac593b1204259e6ebc25cd0404d8ab671b2cf0abb3d2292ed2a7b11aa5dce141d8ffd14edeac67213d5e997bde11219caf188044bb730a6c4e111c52552cc659daa332262f541e0967ea5be47fc27bdd6a426a4d23669d6ba6a4a47212f5bcb5139c716e2c93b69739f224b1e62406f4ebf5f76ab2bf066c1a344c614a48217afac4f25da0f43cea7e9df7bea64d2def31461485ed0054f8f1a13ca6eb1203a40e24a28ce0cea585352e9b845f88d3f883008428e88b586f03981e3e196eb6cc83c3f3ac33a99818648322a63aacd6d06c1b85c26a53fbd5fb6e39da229340fe459fb43f4dacb0135f15c6000322c62607fc0ebf607f791a0aad8d7a77d9bfd2857c97ef78c160f6d2b7fb49bcfc4b3923e846c72efeece1f50aa1647d9112a0bbac1567a9be8850007e3fe85f89d92e407901c0a406dab83d2ddfdd43285f8e2507c045fb3b7508c6d7a52281aaf638a3f4841de29609fab0b1620be9358f401835d7475725d4e5f14841d298174bb4b57b447f34e6de7bb97dbe9abf214f5382372fc868e7546467c8b8af43a1242fc17bd9109b968ce35c364b81f34d8972888da5bbec7e40bf18daa780aa3a110ace0812b284c3345c43e47ff6c9ad9eb1cb171284fc0f135d5d4a9892ed1ba5a72dd4ea16c2c58f2f8b6886603730c122a0cd638ec7ccb7ca0e10fe41c046920318233d703c5ea6a820585bade29dfd556d1e51ddcd969c0b9e131e4e593c367903fa41b64712e12571738748bf2e41618c68170d11550b9026ca5342872bb5176b6068d9e9e22e4fe3e5c06b7935175e0a31740a4eb69102c64239fd0e2622910897f2eaf0d88aca960f1d65693905a18b179341899401511eed3dd820046ec23b4779d2b19949c9a5a177e7231cd57e6a1a873b71c0771362f1f627f583e1ef09dfef4da7bfa408cb84d440e7e63c7ceeb874a999cad3c1af80a00b2f93a6d2f335e569a02fc1a7da58ae36fa8bac07345e372f98307e5560b5bef87d5a90a908df49267aba6e3ac865fa54285f9de86df8b9754fd1a9da213799cfc4c737648896f76eab27d92923540da7fb3be31195a6f74aa61bf60dfb6b49af9b70dfb993095545f62ec4781536d361870a1e41f7cbfcfc4f5fd2ed9ccc3cfb4fdafd6329e59126ece4d13f6e3e53e96e2cd331e03da1b526ba356c64baaca52c7f5f64206549950b448277f436b59efe9ff4ba8fd83ca39990709bf9bdfc44a655b8deed19f611c5f57b512d4dfb11ec0cc55f47186988cfba5f15ef8c8c764cb0792bf0d827686d6a001d8a3f151c2cc54995d5ef6aff7696954a6c1fbc8747e396f81c6979660c567ffc49416b5c644ef1c8294cb40d0d306502a4f99b0924246b90cca2956c01065dc957c1f48dae78fb46e5eaac368b20e74268e232956938839fc17668850a5493e54ef8c12f1ecf3d73916f4f3facc2c4310269aee885ccfb22f1012f632d4065b0ca0fe1dd7dc884f3247ea23a70114474d9f3b8b03ed17b8789a8efb6f38feeb6376336150645ecad0fdd7cfc9dcf291083f4d58219f061564cb9103907b8ce86d9ec40a5af91ce6b71e734f711cd69324cdca2a9e28fb36bce986d2855b5b3af05a9dbd4fba213ddd5facedf2f1f38112b8556749c6bc165b82236e82962549409c996127a60be4de8083c8bb4852cdf3e4dd9c0bb9b6fafe2bab734de0d50dcecc66ef9722844eea04748e6a46196e1729ffafbdf686e05fbc32308b042475450f6e598753b6c9434aa718b16111608e1bd597f04dbbdec81cf1306821f92834e72725e795d6296c6189548da5271c04a4e4f6a6ffe65c58f37e843a9dfe7f99017eeaff2f24f12dfcaa2a7d62fc653e1dd8119af114ff21087c89251fa1fd27c87f475ccfa359a0c065be43de58c0f96dad0ffa23a6ffe0afbb3c1e2440cc4882da4842ca6f6d69881302839f4331258d6fa572b5c74c3094e4d657165662cbda5259461a20c2d3e3464601798f8007e817cfa58731a51c59e8fca6f50aaa7bffeb8848777be9c0465517938ba2248c00ef1cd5871451282272ea7c17b43ce85f68fa32ba46c870e26bd03a36ccfbf5ba5476b24c46dfff186163ad58d00ea38d545aff9197243e73ca2befe8c2a06faebc599eba71c32a6663c1c4e510d1fe03702270f298f614379442e514e59bf7c39925f97cbe89ada42fc9ed78e47d37f0d6e59708892d2d101d90374c290a6101d0926adaa08e1a4d2a7c3ff8b8e27e06a8d221a9723b5abbee25fb0f29fd0812dfd0836719400f5f9c421bc143a11824fe8b37a31a2038683ccb56872dcbff409dca07517ad677ab5f4f25348f3b6a055a4a0c381cd0c3c5ae7fed2c49e788d2f87990ea948caea758876d2ddc0d876ac80620499a8b276eb74fa246c1e138a76d8087ce93860c68f70542e78acdba5bb75e34ad0266b5d30c52c6a58bb86593c1e90d850ca673228ea8c47d034757ee72d06d0514b36c0721020528c1e93eac29577f2816cd09210a2402b6bb84ef99a52be0fb442ce1b8274aca9bf73f42218aff97a04d03038081db85db612eadded43be5d717078e599a48171b0df7b134f4765fc3d8ca5deb55a9111f1696c4a03b44c846f5eca9b21383db3610ce690462e29158698d2c213e0330265a13e1c7402c60c7685c45b0c6ecc789ca1740dedbed4f08457bd95d1209c51610e405213f7db00a69e7a246b9bd8d444775598560a347d7f26106ff238b3ad2591071f4b110035988f449c09713c62692ba8f8c0a3a5a97af4e2865763af8ed1660e44c86199ce6bfe18fd336cacf531f240468b156844e6a4d451000d32752e9ea2cb1a0c280e995dba0fda0576dfe4e5d6be8fcb51909ef14000fa4a049f307229c5170fddf753cba4263a75d69a5479bf0c598de3267cc2849764f7b18b986fdf282d83db358e9bc55144b584a91b090ef581825e9d6e8c7fb8403644d3a2530ffa9b0d01d36b59dae616755c7407ee08d1c685886cef82681a63d89d91fa6cddb453e753158c8f5430252dfb8cdedb6c54137ea6286626f4a68fbd6d3ed380ab25afa01944f958078f614ce7ae58b399998bcf1a8e0ac9ff0cfe9a56b00b2c50d88fb5781b8bd866fb67bace322859f6b6e39e82aa41400344c93d9f5f4140510a49d2c0ae4a531b123a1fa23c3c97f9547a3012e439d327f0a0c20a716181ba25c821f052a95631ae20a747707a5fb0d0218de667db801166ab296d33f95238fc6acbb21fc8a288fa8a38f10e130a6a95f28e96abb3842f7065376f4b638dfdaa8427750b29ca88c74ac746814fe2bff089cced62130b8a893e4e98a4e03ab7a1a73e770a47e321441a671b8b3d73f0aee4cbcaae64ac662652e7584ff3986513dede6cd0cc810de750d5ca529ceb5f3e623935cc49f258f5d3c747065cb11ef3343914f517ada146acd6c4618a4a4d9b9db9243d707d61878902416dc44cca8d8b89a2c08307436566a6eed1aac2498af9e6f938443a9b07fd40ecf2c9f6ee5c233b04735248c259004e2eeed3cf8c4921942df93411f84dc77a35fb13c5dd710c08cb83b17a8c2625f1d517a58352e1a87ee183bb1a058e20d6b9c5aef814bd883552b4efdbd9571ddd34c32001c363194c18cc0ace26138efeccf2966773eb9e282105e8e295c1f3158d9d969c3eba9d729259d1dac43615d418adc8875a52a8deb51fa580eadba1bd60253868151aca65e8d14e801649ee789d6dc4893b58e0b993dcdcdf55322c58a95bc49e23ab44989d63df4c4ed4c1ce70bc6d826cb1491ff4a6054287dff3b954d7e015ddfd5d6197f98ea41e5786b492aa4f9a27728004e1c8dfca5ba27d47caaa1a70780a2f0b33e915aa08f7703813f54e7733d7c88e0e9a9f0bf8d02d926941acc1234cff680c29c0f56d6525ac3c41370ae77698389db06163de737109811db5e2b3801bd889f99e1d46f130b478f240213782a6d07a104bb01b1adb0b61e0e29e469c78ee31887944930ba049eec3fb66c2f7418407db331c2045843cfd19a9f7cc6102290965dc23f9032b21182b07a8f7b35982a85b25ac0e02ec862c39d0402da8e20ad0ea59b82d6c6237645efce7a9c9cf251705964fdd887be5351fcd32882e23f6ec6e95ee6d0f8007e3100777ce3b903f2608a053d7f479b795325c905ae2176de59d27d3606c4c4b14b9ca3e43e328defea69d701a431c0f864be617a5b5989351b582116f85ae3476801b86c9b3684f93d1d889408776fbb7b133787062051a9c4bb09647870ff9cbb41b29aab251bfdc7c52a4eb9cce767af87564067c6417f2ca29ed309c91a2f63d315e99af42c42f36c3894e3a6eb97d4b0f1898882195083e73fac77c4df7f19485e2f1b1b00658223bffb576ae78dacbb9cbc60c0dca30db028bd86f4d584d791d15a7df2bdec3735cd10393fbcb38bf32aba7ca5d34931e1c0d927daaeab6cabd7637ab1819d4490c3d4fb175769c436fc25b40731c81fa1f839084e081253fda7f6f70adb3a22259265fa6600a4d9e4b9d5a507780e4ecc697cee665895ae6f82ce0a14d522b8ac077ed83618f8050e2e72f41287dea8f348b13fbbe537c084c636385f5b69821ea3029125b4cdc8c65555ef9c9caf2ae6174f15f003581f2c24ad60563f23aa096f444f903c8b4a0b042ed534030d24b16c1e45760c935f8e3c4a0bfb6334a89e6814a3655a4fdcc667752d6c17a7d71675f6b96570499f6e319fdd7b68a2cd4b3f67eebaa387cc4ebe4de8a9905aeb34a71efab004ace56ab1628ac42631c0af842a26059dd35c22fe166a1c87fe2dc1acc248b88eaee549e5a7e506210698dc068b9c0a4c1883718e4552e5212f2e673d0a6fa8f56f2da7efd17768043d77bebaea34e13ee44bdb7b7b7beb9f684d38b2cee1f35b9a5cdf9903dbed76ebcab99c23f5d90fb1738fd98f8e0865b3e21dfee7c6b46f8098aee7f8edcf5121906e2cbb5ae1b7a4e86cf815f9d3e9510033f80eccb019f8f6da9ff7cd104a2ce1174b1c7b54fc24c87d45ea3163d01033f49f969e4fe8be275347fdcc6025a90534e60fa4aabb39e84f612b62ed2efa6034d3683508b0b8da2b81a8d3200cc7e983c74f1b42809c1bc1f49227460913f7f889f462c6f4b2840c2e918e884501778f1f0db62b8d1a18424c135c33b603abba1056c028d55a1260d2455de664ebb63129e5366d9c4d829880b8a27f2b614574c52c6f2811430550da4f76ebeed92673da3f3524332206052b1f1c611993a1862e57e763d3263395c8e1f0e5c15f18abf03696368271980d673291c716c20e05d5b26018196b86f76e17d3b33d5f55c18e16b264a917e64c3b784af4d75bee0d621a2a654accd32f11e2d130884675bf943d5bf95009b3cebe3d4ceb1027979c530a36ec6c44669f12cff3aa70910ea1e01bbba2580b2cde1c2e93f2c1ffd11bd40756ea4c6452c91e8ab4c3ea97e18a03a67b3b47c2f3f17c0f58b0d63faba9dbc454e219b98d40d6acb40642b55bed121e9feee74f2da43da7bde7b8dffb2c0c7c44b138ffc9914bb0e05de766b97363c53f8d6905afbc7b5b207d874c7aa345a5d4c25a43f0892668f644691ec80113582c35f317d7e842186c0eaf8c83da69ad9f352aa8782f71fdc5526dd20cfc0e96c7fb944f8c58c05514c860fbf124483ef3b1dae70580ee5accb7062f9ba34df6e73d5a72ad0577fc566aef9746dfb328c01493f054c33b34fc23a198f41a09705c6ae200a9d382e8867734bfc38a9713c67cd869d2a863b85837c9d14336f59a69e193d45be84cb3379377f8bae1547a0f7a36b2c65c153eeb3125de8f23a705cd14f63f3f1a51d6026bfa2c1dd92f1201f358b756f38594583283187225b6161549b67248072296d6a3638441569cbf885808a6e1e12a29246e6b2bdd94fc594858f3400d668c9248447fa350b785512d577d8d1334d640997c40bc467a8f1d5f797312c404df4804645ba6d1cf3f47127bba96a47c3441026f07e0f0bf0966700ac2186f680b408e47135f0948125a9179d5f210737b8d0f14fc2f0a75f610c4fd5d302e17ef156a4f10a1f725381237d0ca47a412ee4c5c004c3fd94cec29ec82676bab38d28270d08334274a703274a6ea342fc431068bba26b14cf541f6234d3a34038bf6202d7ccfe531e49dd710cb818d773ad2feec9a07b769dd266756398d47a078c089f59a7d33a32f7341c5c7ca32719d041303df7d780e074920260579f5b079cb933631c4c65c6e0ba54de6d0c6c8c96cfd18c03524085856b9e814dba1a78654487a246fe426bc03903e8428878ea9555c3f5af84216a2011959d971f184b59f1a5db02abb4baa3602c2570a1a859fc04c3409b15e7993411ed8393abc1cb7b4bfb59aac548c462648ff6bcf78c183593cdb582893a1202593ac8b3a618206bcb417c32832589cf021ace4a925e94fdd8fdaca074c1795549aeb878b3c6e6f337852a355908844021a0bbbc4cbe5415d2f5616b34c71358dfa2e64d680605d6415b116d43606778019e0fc8860d441fe84fa7bb983ab206e63a726962e25dc50a1f2c151164038d78b30a990e8659f0d442e276b89446d7fe5844a88e23425ad32e11f86fd5546f7f03514e48436f17d5a5849d6a0fced42e83daa90f1512364ed4dbffde4ffb238fb709e092d7eb5eadb3a6792b4899b02ba79509c38c3f6f3f706edfd357ccafe03098d8ddc0a847d7cd7ef76eef77b9877e6e9e61eeead8be20398e5cb0db1f87ae2f7cf030adff6b0754e9e3acb81f31a0bf8daf6ce6487f51682d82f617a5b9191a8c4973a24cbd187230d335e41d1bbeb3d7cbb0e4b954291c1fa16ce64363b2ba64688311b4485a8fcd41ea07d5841112d23b464ec7f9bae8af24a8fc65a57ea8f4af7aaa77a1e8c61bf55154d73994f50e6199cff9534859265b1a54d70316af5e86a1c306d7e4626676cf1aa372c9c298936a0a7a5bf322486adc6fcf2225c5d0ea303d4c5e2645f88e05a4b5a5aa4cc8f3d27a5b73ed37d33b802a2d71f65a400dea04e78edfeb74c25416213f3379e6c4464b6196eabf5d617b14dc732cfaee498ab368c09a3375734f1837c88dcb0d27ec899da00d4b6fd31ab614da43d69db4c20461494d4ddf3ad910ce31ad80043c7bb97c6c854cd36e067ae077a3cfcf6588594e420b746ae6b99dae05ec736eea558b169d0dfd7c0b9044a45ebd7065e2178ebe4ec375e3dbecd3e52281ddacef92667f7af256d1ed71668352e6b593a73f85646d0360c6b079426c47e008259e508c0f4d00121e4b33e8cd55bb8f94079a3f113f22c86d57447d005f5ea83147156032a15d299411711f0400c61b701ebc5bd665f28857872d92eaf9004e929e89b2d3a4c9e746880758acefd5f9367c3318820c030607eb4fc51e7d7d07c3f14f3535bdd45b4e66c41d812dc9537c470827a88798a4ae3ea0023f747055c3b3cf69c9dbdab21caca07f5738e71d6c6a58d2c67e4fe9b99a01e21b6ad3c85d74698a1964a0bc5928861443a1e98a48b8b4d1b39cc7f374b8567ce144980e7a406a08513694032800bb2df40edef647d40b0d7d49a516c06c7f3dac169461d23fc838082561edcdab799dc72ae7a6f2fcf1d803fccd7e58d49b8fc90a7e02684aaf4d3c6ba91496b90f88d53ec00054c500857512547b8f71f67f345e951bb28cd115555d83b9d4186a2bf9f90c236116f3461288684103aea9dc9ef0bc7934601fe50478088e8f1095f582c1d0f47b43c06953a8770a7a97e27f2859639f5b8f55af271eac014a3c75caf496529a7ccb8f021cfb06c8a712ab0cd555013f35b89bb15c81d0fb17d18dfc6b311a36fd63d18a3e58844bef441f644dbede847feb06fd7f67d00b397fa698a6f487d56eb281f7a9b710867a6693984d0608819a65e674e0bacab599e8fb8b9765afe847b5b947875c76619046239b5066abda18e86aa2c1f5448a7825839d0e25897d479d9ea584d931c54d8525183ad1b7a215766dcc6776120f44b90be415d9da4f0b48753bd06ce816df4a6eb1693dc2bc30576091985c3e522948c8aef2e26a0afe69f208e11e8f9ff68cfec42fb45de8c2d7db8a91db9438d872cef98c5615b8e1335e88ea2efa57bd04119962d2797eb1be38fe2e55321f07e0a45a80cb4e2c2999c94fcb6a1b347115bc5e937f239183c3ec79f752bff7300674e12fd451f13de91ce31170770fb389af65fb9ef2ee2365602907266551f5bb88bde3d97ee4b990cc73ee858cba77d36d9a52f0b84a03530885175bb9f25d97617991c3892fd8e2a36749532d8372b816b277612feb190075e5eeabe5baf502591cddfb3b267c2f0ef82cf29ab8d3e2a8600c255395f508e60ea53b0970deec999317f029eaf12c1a36230c205a18120dd234fd8ce4c1ab551085e2900d0bcef924133404cdc437be11bfc7d398263cd7db3ffe4748e3ecb0097bd6c5315aa5944131de52b7f519ac815e26d34bcf41a09a08fc4c328b443ebab31771168509c0303833b7297131b8ec342874ce344506abc29924d09ea67602787b23e8a29f8005cf38b73d3a0c834b63b09ca290855cb1836651861fc59a695ad8df3eb3861ae6eb2bbb00ff5326b6f3ce6d9728d1f5d73a4cf6d6d7987f039717edd9a9c25b2bc038156d8f5d703d707fad473acdd6d0246d62cbb714ba243a5336a36bc686592ae8c2d2e907bd098a5e9da0d24657472daee09c5f6d739c5b67d8ea96a9bb3742cb48f3ac4189f7075222c3e3dd17814bbbb400b1dc53a77bab1dff5d1f9de41cde3c5fe51e0e064c87f9ef29beb11e8b68fcb94398ffc720337e6f271a92a00312ffd63a3c7562e8b0657cbb016199522e498b2b6e8f7a009fc1aed4e4ab225b59a6f050af425e6877c98a6fb0d1fce4b3653ed1799e90454cbf8af1e8a8ab9b6edc7d6503f2a778ce24d0ae4b7790ab85a11e6aebf454b2832cdec90e5cc44e98acd9d8107b29db5000ae2015203084c4df9888d3634128cedb2a7ac4de0d40755ef0c8483316741603d690c611a6cd2ca38cbaee5c5aa6cfecc215f19423b2c41734ae38da714319216bfd92bebcbcf8fc95010cded04af46e01bb8d82a71abff17bd66791bac157272acca77df6853f35fb47ddacebe5b5499f2615ce8bfed4cb46c54ac393969cc859c5e4c2866115487003bacf4704c12fe5e41abc47d5ccf30a57ef8ad96ef6b75f04183a89b9890197651a766350f0d69b7570508776f829268349a7a7ff246b8ac2962f10a6b67b19129d4082b17781b7709e841e03a52100711cecd1ac8fa3e0ed46a7da32bce2f7442d17f53a25a1d5852230cedb97f88d8afb3f9966e7fb2fcdf3640fc6b8af4a067382bccadffa4ca91941f6785b9379f7fb8a729d54d42a4af5833a338219f86a6b4756c58d83d48a1bb465c2926b56b8b81a4a1038f86874ea76e988e4abbb692edf68f351f3696d5b7121b444a13f8a4c08880283049420ac0aa74554f8a939961b1d2d620444efa4677ddb83865c3471d4a46661a29595e623635615c2c153b62c17c1de59f8b095acab4e45e317f69148197a7861b8286ddb8e17e7e0088f9e7601c16e1384fd9ee1aa7743537c2740c30db3578cbb1f8e01c726950303741e79db85226a1af83b11128fb4f24bddd3ac1a5fcb565d9f3911fd346c3f744962574f2c731d10c029c4e6b55bdb2b7839b7245bdf48e11c39d5c8a7ebfb83ed16dee6dfa038f66b683af04b71b04dd886039629a1b73987468d0342ee5f383373e51c71a9c1eed74634745c42a6df978855d9b46dc58cf37e534d37db682ca2487c0abe573375a3ddf08383d73d3ec3522a57b6e1bf1f688a014b52ae46433a5d8a0731367152497f03a16eaea09c37a91e2110027a82bf8688f8ede430f1581ccec42a0cd23e9264b196d0492f07e68639ddc2ef52b86d4275b0a28b53502f8e5ff99c46470f513c76632bcbdddb2394cde24c2160520f1ca3f8335ddd8eebae625f85ebaf5fb231e98855957ffbc17bd5ad2067501452ca950f9b94c4971a07c6b92dd83e0719a18e39f1938c9c2f414e9acc2fd6cd0be172842237c8a886f96dd214e8a6a079bfdb1c39c1f9f5dde4c13bd9544454a60b53d5ad9e918457ea2177755499166feaae605682e67e8dd8ec3293e6312cdfa60640ea3fa89b8463c947d4c01184f9f1818b645ee539a93b3e0b77ae359d5f9c855ffe986375cc6061a8431d7f59ff5ecd475e24631173ab7c0b496e8942a07eeef419d652fc2b490f8214915ee04132b6755c96f11f7a14dccd28f15be1435b1687b7aeb7fbc5379636d168272121247bb2eee09a4280123346684474bd46ab0916f859842adb19a75dd914561fc3cc4928c4c467f8aada29b18cf6978bfc69466d9dbe9e0f31d607600ac15b32b6dd265dcb1327c8ec1f8b692789c780ea26464eb93a9cb81818a0637c48f4a7e110005d76cc4df24a8001388134a076a2d213e67a8de3269b48cdbfa075f7e2f835f41e0b868ff4ac1cf96f1693aafba3b1472f26cffefcc3e6ee6c84c3627ed0fd756f2a578b52c4d500537db4122ad3ae8630010127ab53c5922d6ea36cc0a7bfd7addf312bcb58fa2461f7b9dc8e3c4343a44b82953ee26d6a8ae54ab40d993912c1cf50e8bf4c0e724e4e1f4f4126a7257c08c16f01d1cfde9b29bf9d49ff12643a3d50cbde8881d64c7ca8a6038b0f51de04bc5406bed25bd44011bd984ba008e53e26ca01966dac285331cd53974ec627aff8bee73ce4da947e9dc2e7c0bf4ad1bcb24e4971778478ca49f2bd2576267b595b6add9d57a5d961b707b37ed6f766d1e3249ec12684ce52f3f285fa02ed9e8356468906550afe505548cf3a0b89db7123d7319bb9063d01f24a32cac24564e2a03238034bf17ffec4aae3b358da57ab1d4fe01340b026e2b53869f7e718e3ee83b5e618dec612ffc1c3951b96903aa6f8573a1a569ac976fa04b21cf2b3468840f0bc842aa31826a60721b374f7f5682ab3fdbfdfc0743f0ee7d53e3706050ffc694d2f3d8ec47545b6e3c9be75016b0b35cc2d25588691811ddc5734f6b41c2a451b43d0b1960310164a33114dc09b3c0ca0936ae04ba9f45e42ff52904c2340dd6fab98e09017bcc485e1b8a07e2944698656e6060b432c2b21b50a3cf7203c4aed46d39d01463839f8690288f6c17733cd5abcb6db5cba9947b0194a3d84fb9ca8b23b75830597b60ad5f4b29a4609e5f8b1e981d59c56631c9f74b250fef4bd39ed694d32c0707fa9f25256f926a581772188b2060002c0b03b311c788eb5949561160d298b088a2f0fb5a136a5ebdad4813275f7d07685a81120afa07fd977aaf6781dc137089ed17266d31a2b335797e05bbd999c2014f2f163dc8ee2b7de565eb5d86db64330e43a17668c2b74d370a26ba99cb8ca3306750d783b820293d51e41851603983f07a9db2b15041fbb8d9e8565c05bfa4f9eb5d374124eec87413fb0787f9d8761d4cf523dce099da3dab4ed48268fe500d0fb0f2eb65a53d8225b0fc89931623c78c5368416fbb92ff2e6907bf5f195e00073e784fa782d67af1c619db937805aa7110a55ec5e665cc47455c77000e1c9e39c514567bc096602968de00197939098567056114c87bdb978638b8ceb4b15a1d636d30f6820cbf0d25278fa8ec9c1bc14c9d01e432547a414feeb4f40b7140f5e528d16dfad859dda7854b7ad683fec638b122fcc948d47a8ad937b63f64d3866e572df791e1b5f1dd5282a7158babc285674c817153e13487a7eab698ccba7f7c5428c9c30f4995c89dd37c972782e28a4de01c5415541b6402e560c603ae637be3452f49db10fcec4d241484233c0a809187a9d59e0867b85d48c4a501e43491f05f9301999de9ccc85b1a6723bc04a3d920546ab7559f1ad1121575c8e949cc3d855aa6e33d927d341cba8f923304cceb1886f1c1819d61009d9001297cebe108160a00bd1c6283f0d4ede27a7428e88f5f285d05837f6e97e30e12a81ca8fb0910e7fbfadd311977f7d1472b54c404fa6fbd378fb4fb4b94245864056dc54a6b7ddaf52ff95f178c2888d070d95657acc8418f28e6e91e36366cdf300ab3dfb1f5d57c762dd466a92e958ea5f0de333db2f2647d513d688a1e3fe9b8370d60c96484496c8c6292ff8712ac74e51b058b2eddb96fbb85a493de934c4e3d47ab90190abe9fd98200b18b033f0135b43650c9dd69d0da34cec282f7096a42269b67e7da5e150aedbcf630143ad25311841ef1f2252eb6582a6db75022d2b68f4579973a78d5606b56cf874fffc8fe68aab879a11a1f9b449b1baebe2b7e7e503e7fad42e5b577230a90e44372db444feabc398658977c97975dda63d40846c8606b8e2a1d315f66e80479b54378e0f537dba7ea8f47e3c42887a7de24dd14f8b7a62b619261b5d5e5d3038c8315d68810a27374e5ff50f63186ad5d9b61f37d388b9cd27b7b96a5f6e8f36e8a1b2e8887b1c7cd1a3d4053e683144f374e7d7a2138aa13d836d3cacff6cf5a6f9bd583a4ba302ac3a9be6b6171d5ea3c5909992727e30f944270308697da8452a5d3da199b4f424c376c7e83470bff051054278680e8b681887b837824286733603cd05592458b95fc1cf337d0fc1424f88701e6d9edbf9c53deb994dfd7841e4d34460620b5880e7011b2c0dc5fe219e4b0f8336f835c5f48f6a135035d66e41a98fa2fe32fe9ff21cd3f13ea575cf72fcc08a873935099d356a61365c3ad98074c49b25db43f99f3715d130675480a1a0335987726736ac06551c72c6a7703756f61285826239a1d694b0d179debe4fb1c1ae461daf0760df8b073ab3641a892aa19d6e97d4d063122164ff820e860393becd388a04dcc5bf7bc3c58eb9e3f7e52f6678743b26fc381fd1210ba761733971d02711a4b4b1a9541e3d09327884b4df15bcd1bce1b1d6080d4dac8c4ebed07fd75269ebeb074b6a0761abb77612227633629401b7edbe8be70b5534c383b9a5a66ef5b508125fd2b8c774b903e21f0d1121b0442a1b0cf85989deeec420ee2a063d3cdc8545445619f78fe99b774e9a115aa7e1754985950cd95e69a07f0172a8ff20cf37987919ee877d885cbbc8be88931307c71983b9eec462eadb6ce1e6007cae71cfd40f08e786ae40d76ce8bc19aef7f97d40f83fe15a9ef36fb1c1eff5d74a2948d2aabc3fdfd6570cf175fad79e351c873bde14ee691b0bd18c5260dd92ef9f481ecc3a380adf2a1a48d5adb2bc1f87a1361f6e333ddb71094ee52232bb53f07ed7d8cb30bfa3fc1460407302c31906d5898bb4063bb7f63c25fb8bd4435f4cde3318324e3b7f29b465cdc06eb3f97c62e53f84056694e1516e28b505f6c74378857f67341b51330b2d02b71668d772c2ec40ced4a4466f966eeb770153b9dda9ae4f5c32064ade8aadb815bd681404938ec8cb1d8fc4e0d1477b5687a63f7651c49ca4919a43d248aa00e4056efd49a88dc921736139e81e67d20293d9793f2ca322b5543b26f8275b6f0cae7cd6c1c1e729f81405d0f4bf44f61405419c38f7cbe06045af79cd68b25e370388f04af4187033f7efb2b98368d2c0a1ff73b565d3cdb524a1d31e756bfefa17e3dc2856b781c41a1af851a1e41e293dd91812c118b6873b053eaee9df767fe2a7de29627341007dafe55691a22217225851b0107e2c9c74ef1eb9aeee21a87593ccdceea20ae6bf357f8773e97d09b908a19e7c01fe5c1c9159de550f0eb224e262aad2a481872c72dc6f326f143664ad800221ba519244c7d2ee8074b631210becadd16f8ece25f67e896439dae20f6684408b9209177275599612cf2a6f20c7829dc593d6a6873c6351483cd9ec4fc3fd356cbf7e24aedd7649ff69317c3793825ef5f4d98dd21c1beb5048a4335f2ac4919fa587fcee4f03635bc70e1263354e2a62e798908dae0c403803b0cec1a0d2dc4e785f1b35384040e562b1007d021fa8431f7b6db4384b291087681222026c76699d3249cde54ca51277d4c6d76d45687ab73e6e216c47148162f265aa80dbe4cd85b8e53c8891fd42160f6c3f2548ab3f40ae90ea9ef278bebdaf476a146a656571be57f32c16173dbf2e51f016f44852503195cc0e858d51e5b3fc5ce7f608aa9594c1ad8c7e28cc5d2d8310251bb64882ca94686ddf1962572bcce0786c68090072c34dc83f9ff59be724f8290bf8fe7d470f3f96f6ad19d4018007ca7513047e211dac4bfcaec93b06ba1f8bb33b04ef71580c7b1fd98f9c6716d4cf51b2c65bee4fe5369f3c90c02493988dfd840cd74935f8058e850c7e4db03802cffb9c81bbdc01646abb2aecb19a37f228c16d115b1003aeee83f961a2aa11802a1db946b6af00f8011d0e6ef5c2f67c57ed4e461c1598a5a50b23de5e52f1dafdebf91a921e21cf974efe0f8c59bd6ed9882ea4b271655b21b733b83ad6a9860fca0d0af18cd3db9f9950fd54e9b872e41cfd1114c54ba16b1786e9a0c5372fc4db79e832cee9785825ad4e5c771463a083f91b305c48e3078128f2dfe60555314a87abff471c7abd2fe2e90b2f91f50b7a7fdc08b167b604dcfe3d4b9af2f2868e02d2898b8bd9fae611869e0a2727a28cfec43c883f39fa076c6cdc881a0cdb4194d8cb76bae4eb6c9e355d4de50ff4558b2e8d34a38803a64638308d76b39ab985f2a2c9382a94e863e051a9c898ce03b3ab2bc712105cc75e2e71258d5f15f0ac56f7610aa2a82af97a35ea48351bdd8179af11ca3c63c1e88c7d499474efb3f00fd9cb7b3fc89bad3e12a33a56a07f2c92d1756e8d3420f18eacadde9c5594e6c203356dca6be1b1fa87f8b825119246c2b8b9a9c8ea35b44382c27211c93d1f0f9fc1adef68cd68ce94e2f8f8b9f97aca70d766ed44f1900402b76bd4e88e54c96397aa3199c609d5965f84b5a768ef29c57e2cc6d6d1375218ae9c134a3f20fd0208f449111fe6506a8d8f514ac323d48bac1038e34764890afce10e26217f6d38541d6dde9a8d4351e881c583a987b7a81f27dadf70a893a9687fd8ad8f036c9def39bf1e2802fac4ca97bc52853b38807c8d824707f89999a53cf86d5a0f313cacb2374de45c41c02295b5ede324d63ea34cce1206674803785c1d0eb567ac190e54b7c5a6aecfbe4aaa1299d60baeec8643c7cf336619208e76ac01e1e7f6439614237982c93c44de2179b3e328447609a1d19827cd2c4520678734ea12e7a1410cce0d5b26c7c2d4eb054e0caa30bb6638454f70186f4dbaaaf5434a141f3b5cbfb79d4706d04d1f0e83a3a4c58140db8179af0b9554314827a3f44b0ac651d30086fc47397773c8dd5c4246b500c04240ffb40f84632b6040ef7df98d8fc93c281052970bc328c4d7d2cbcc69b182e8f7d5a0764d49295f655c52f249ebc54ef6207acd4f2db57540596ed0933a5444516ead530999c58e6d01bd27b6f2121be195f8b65c3ffd38165c73808de7c1c549a9815bef2cb3fd978aaa87e3f08ff354fdf41f161a07eaf021d49e543de772c35cad7cbb6dc4c60f61ed6fe2b0ebf304352438bb4003921274ae8a4c81a43fd98ec937cf62d041ad06b259256df3b44fe6e5c46a35d10c90bd92004b9cb8d3bed7157aacb97bea58074de66a9084c18573e56346dcb7e89b807a14b11b84ee6137f8e0ad51527706d43df4a0a3789c43006f650190f590f60eb28f019a8989fe17eac2f7e798ea7f943383f3fa0e3fd9b4e1a812c260c13151a12193d5db5b20a91db5c85eaf5e2e6fcd7b904af89c9f6354480a60b65ff2a929e5fc8c105592f662e08a7fe1be459b5a5ec659ccb6441528282a1afef069e1cac8b1debcdc10d940a877d6879deecd5b305044c39c37d4ac4a278cba72ae17184a04a67aaa4d507f701407bb1493f4046f6504defff738b94c2b066a1e6b1d51fcc6226e03c63f99897334c5aa631d20a64341f371facc26ff3d8c48a078a547d81e85b5ee141f4f6b2c737995a9f2262ef5963fcbb00a2dfe2d77b57dc9424a46f84e518be13cb5291ef597943a678d65e973f1e8211191cc290de0d19a3327fb908869ff74e6a1871f3170ae860a96b94952550614f6896ec928a02eeca73e88573d9bc779363b7d9dcee882a480d58ae76c86f731d958116912c81b2f11b3453a77b240547c60c63217c3049e30035f4e269f1c793b51758ba8a181192ec953f39b6e9d4be224921bad631683ea62eab67a2e6a1f9b4fa1747af3c2a6fe29136499b58636212b6e6797c07cf7db84f848964eaa829684010832acdf09921a86bf42c9b22ea92591c7bd9af62ab251ef5b87fb5920f588b2070ba89cbd807c397894d7b19853f379fe80177335e1a85e7c470e277a108bc862b4fd975e7133ad3d4c82fce7d60cdbfa7423e3f8b25e8372cfa2d281b5eef550e683fe5b24360928f9f8688271ba53e54f5013554e5ff590b54c8ae0c3bfffe2dc543a55bc61100a7cd344c64b2e6f654e365762c552def7a54063f02c7a6120b08f94e54c91b8644a4acc3414252fdd2d7433af1876e8332f1e81e97f40b9675875e8b79cc5e7c5805dfa633d6c137d33baed025a4a771c1da6d741d8949ad92388331fbfb7fe379168644ea2bd38bf6ad018ad40bd30231414ae3e2281ff256004aab279889b95a0e033474728d7fb253474106b15366d5ee9b3c0c4cd20cc55c80c56ed0a280e77906ccd62cf201acf9b02dcbd44ad04b5ad043c00888ba3ac5650f242867066958e2810741f0f8385e1016845f5a019b09615bc6824771bdde9b1fb028e121e7890e0ec1f51db792bbfc7247d9cbec9c36d7af21e7f731d60ccccb1d7f20b66beee3795f4759336c144b95987d710bfa0b9ae7ce24f3b5ddc458703807b352f18d6f954ff62ed4768ba666ae793fb1cd65a33f68ae4552056ada0f339aa320789c3b950cd106465b2efb2f9bba05a190b6c380d346d518c1e5422daf0216bee7adf7e7ae6985334e3088dd0a544b058e1f217a511f7e2545c7cbd9228ac2d9f4aa0bdf30b86e5036b44d21c104b7e6c21377e3725dcde89fa903e69cacbe64db68c0ebad601d3817df34af41d180a1292df38fefa7f71d2a3ee1518b02fbc54137df8ac3dcffa303715758e3e396ec1f30f40087299062ac2802f788dddd343cc9b3fdb0b66e30ec56b004decb4ea17b7c2d1a0fb3142cd221845290feee6d7a11c09914cfd1cdc40ebcc52ce946c85ed5ce21723f6537431178c273f3e853ce2eed3307c797b3b738671c3f0f9977fcae520b049ff463191ce4bf4b4f9c47fdb7cff03ccac3862e93802fcab9267073957447fef558a34bd1fd77dcb7a27c57be15fe0f3dfd614c7e18ea5b30f07fdc57b08c3d73a89bb8ee7194a4ed8844a2ad538494ea7b1df27f8cade4a6d0e2f5b677052489d2ca9af9705ce0ffbf06f9155c5033e0b408e1439718a0642a4154d1becac49bf9b1721cd6791befca4d612c43816b2da4f58ee0d00243377005867cbde189d091e9e1197699c8454052c038c6420ce06d628f3c8ae904dec159bf206410cc5d8f33a6838eb7cacfb7731f722e8c7239779b2966eee1d8d3892010146071c991760d08287c642b9870a63fc34f2d7b77c2830172dad21f80992dbdf7907f4e46459674fdbc80378dc260482ed89981e3d38c42d1f76a9c57a1fe238edfa53d4a7e00ccd7f5cd0852af1fa9b73cf8f0372c0f1e1da26b89d2894cd9f877c10bab3a617ee2f64dfcf2ac9247075a02dd7304d60de6d6fadda10304453d70bfcf786a90979be742a0819c458726c3e036159fbcf0e7c69dec325bee5ecd02cf72f8bc6667404861ee3439e516a6c87f4c77f366216b03d817d07283135e337e5bfc03840496ecf343dd9afd3f90faff50e52c6619a2368d7980f88d636193bc7c57720322443d75d1618e53f86e2d1cb9abcd6b393e7d64b95dcb0d17e9ba64caaf16432b0eb1adc8248c1e185d7624aeceb10eabf60f382eb69fa72aaf24911d511610fd9275513e1aca72f78bb2a4068b9d45e00cef8a270bfc07ad17c9a2931dda3db2f03283ec8d2cec0b4481975da09045def89ecc8184b111d48b8089497f2430761b4bca6878d1059429963cfc883bf9b8a9966cb088fba4047216500f6e06421c5667bcd40b8b7d38db39bb67638e120c0620b00d7c433796072213bb72118723719c0da44a6b373eaeb9ba3f9697068449a6c69c72abbbe2e329c5589b584cfd54c5c5acc5348e53fabe8d9b47051b96d50987ebdfcd6d937c3c08d900f8ae45c590327e2826491d53b9fd36f9d34884a936cee03b58e56d03d17542bceb8d74e68b9d06964e21636fe167f60c493aa621576afc7ff6a61549754917a62101bbc41240493558cfdcf5b60f9de48cd72a0dc01bdd4bf5fceb007c05e2048d78274e95292962fbef2e7b12a94d4ae34d62757b9b63177093d11f6a087fd707ef0af53eeee2cd22b7bb997b71e5823bb61a7ca160790b5b72dd04bd4adac26ba3fbc2ac16457bca945495df8614666e218e66c184057113fcda5b50469bc9af77dfc61002d0d0481f07b75c77209c3a37e1fa74fcd4255cc0b097b2deb29bec76e02c79a0fb2ab0a541b882b9b6513003dd5641580555dead2d73fe5de58082dab4b1bb0a564863a0bba27915e85644a0c0907eb7848d2fb0f61c661465600ea0d9be55bc672686a3e8731da58c97ca731b187a0b0632686b0954b27dd6d89cf4308c57c20c8f713d291d2dda78b6f37272084ed4b144db606384d7cfdcac381bdf4132936ddb69629bf06912ac762523019cff00a01acbbf0901744879d8b82a468ac5633722dad1989968c819f3cfed0700c06e95b7cb23ac65b46c2822d7b6e51d35b4dffc7dc904fa6e23710b5dc8f6db8726b1793950828296006ca9b3f1605e180251fc550ecc2c9a3f64b19f657dafa34c6220776c4d5b788e1d5bfc94ad9b00c5c7a7d453ff3b730bee5ae5f46b3dd6545d24028604a31740ec528bb14239108621a07e35862f96a3fb8747a7904bef892988260b2e8d85eebfd2ec17b8843f82e29304008499d2a12cf745b7a9513fc8133f957c4ff49e180615d5b16c76602486d2966f60c0ee6da2ff8cd2b9130d0e63f9e01593adeb81ebe6c25b95462e38c58b5709e2f47ad810dc9dc1571d32c7b94e660d4550e672b9dcfecfaf220c8e0824ca1ebced215c9c19a6c393442574c712f9e8652c0accb34b6cad455e7b81e2380e3440d94ea393add5774c5db16db4d58e25a6193b01c39f8875be85cb55fe077de7ff9ee332641e2258b63879a23ecc97dcbfe032b28628d47be3c0c22dff8e2540de0eb1be178c78513295e5ed489647a4c03915f609f08ad7a3f2120eb460ff00048c0964015823917e166f0bc56ad6f4d0357efb4549e03e9e174f2806415cc3444fc578d98deed42e1b9c7da76b0d1d50677af7213130aeadf808c192b405a9c54f6532d3c8d186135e72a37a0b69811ed593ff2f476790185b5aab2329f1a0fa8a305585ade2d564439de9f4083b5c6122d4071ca85c9da3769fcab06b82324f0879d0313f5100bc03c4e0e060f7e0910f2269858a690bda8f35df65a524f3732eac7414768a86d21250ed08e0106b1e3dae4073ccac8c20c204a9f822909d46b3227c789fdde908170b497c5f6264c039812f69107a4aade2c97de35b425dc41b4df5f8b6e0476dcd25220798c3b5ea2580d5c30342b522207516e5d047df720b9e636ac588dbb7d2b6a5ae6063ba5e7555af57cf9cba5253b1023ff92b8661739986936bc0b1853f2cfc77e11c62e3a5d86f303927c4cff513a3eec0d897e500c33c8b03e51336f3e1fa903d7a2f702aa1b74c1527e13aa974fb4432744f839bdba7ef32022d19e2b2811b630cf0979fcc16d7e9fe0defb0fa2bbebeaec2420901d65401f75f5cb830599cd690929192bef6768e437cc5506163e4d64ef9af7fe03ea6e981e2bf3ef594fa0b9b1ec56667770929c57ff21905d760e35b77f54d9efd4416b65d420fd29af4d874f6a3320b68b8b61d94e8eedd5233fc5be8e47ae3c95dab1f8ee8a759ebe3d7a89179c67156f54021692a41dc18f71f93ca3dcf9ad41988fe78a6e33e891ba535935d877a6924522e665cb89dc1e815bf34cf6ecee4c84cc6ebc9811da6f83e920e13ea29b561d98cbe95c0960b538da95de31de02cd1f7dee2d1cc45b7558623e819e8f5948559d1ab3e55c7a2a8c3fe2918a27a153519dd405d3cbba9d90d89964a4c649e82b36245c30136ca66205a4daab652dbb0747df7415c4770ba7f9a0a6039239fa9ec15da419137a0b641ca4388d9767f44508acfa56173ea70bf48b01a6c8cc3182660f6019e58a154e8bfd43ce873a6f640b1d4573a1123eb8e8c5c81bd06fb01892ad7bd545ef4221c2aecf06aba4d81161554fdec302d61664b7412e9a7bcba76b0ee960861665e48d9e53afcdd6adb081e93afbfa309878000805309ddbe928b2e7be54c04e7821a3eca369d57013552b830dc022d7f8eb0675eec8c0e36a26d4f4878115f822b1569345d356eb0354b2a57674fda57fb0576d1329b5407ab86cb80f642184eae2d66a075231c0da63a12a2d65d09f254b1344934a32cd549c799ebc094e762ae0eec0403258bf854bc2996507f53200cf4abc45dc0cf2d1a54b3a2b7e8bd4aadca3f1c27c71ee8da2d4416d4a01e7721e8075c3a5bc447e2d82826310204aab7d1c31a0b9a048881f65b2284fa69ccd77193ad98fb5470cba3da5946821a996dfad891d56d662446ff799f2202b4137e36ffe9961665ec08491d2d148ca649b529d10ffb83ae59e0a7e6d1e9ce952d560c3a659d59c66f852408f279150805a5506c009e77a0535f046106d09d2955942ae7b3f32db0ae02f1920a22d4f889d0ea1d940b110af37b64a098330ff1a63d2a834eed05dd41072f76325ceaef37f08d4c15317c7985bf1fe29e0162dd16ce37a0aa8e12520ea35ade279adefd78410da0981a87f5fc09b09b314c2b6ceadce1dcca96fbe064298bf246ebea85f0c63c7ec4783f1ed39f7c864cc29755180690ebc28504e96336ee221adce9b4f871ebc4975fbbef5331d8457ea082c1ab9c2e33781c30f531f7ef2a1efe165ce27aa1c1f225912d897b7367d17e114e97b2037c8c36da35cd3c5643706ace5ae9e58861c57c605772c8cea250e0a7c15157bec680b78347c036c77293f7d3715ac36004a61e802414d39306ba054feb0a5e0569c27b9111def21f0ae8f3df896dd2c9686e2a21e0967b4c38d9398c59c62f767e7a9e4e1c05a7f31e2b69e0b0afc0f00fa7e9917ecbb56de21e4d11c858f02fd5347d07dbb4671cb95fc3c193cfefcf9fbc398916f78bbba882953f8ef9a2e713665b542d8ed9d06d5aa35bf3b8ab71a22308a740c091f0e061e169eb715e07addd3eb18428dec0b6674c7a0422061e4c439e4916f4368b2a19ef75f3b31af4bc6e99413242fc167da116f0468b2d36d3442514aa345650b7ff9b6e6ae808827af027b689a45e668059d0bd818c0f3985aa47a284ff7dcc81db24ec724632c7c2996690a73fbb5d6a7b121805f47c450e18e68adbd4fd343cf920a052ed35b3f6c4602fbc537464307d367adaa6c56845a9b93128b61c55c179f500399b5f07701f07df3c265ff0fc44fd5efc85dc1790bdb3b169bf3d080ffc7c5b34b8b275f839036033346e0937173530b79f2189d9ec4d24e5b3f75f9c10e85ae4980722ff245444f2a936a69e134495a1421d450374a5d471e657a9d5217ce15ec2c453ebc62d02884c55f8ad2b3e0f6aa160abd5f6fa9e1853885d196f5e5a0afe2245b8d5a138a046f14d0d6da4340ea695c3cbe6631d831cc08122fb513860c9578dac10a3f057be02b2935a741214509d09a8d809eff90cf6cc8e0fce4e3a802e75d5af6093d962f17f1d1837ee03fac73833ce18a9264aa9e3b6c05b01c2e5f54740e9b127f122ae5b2dcb7c303af21290fae2b12e1327d4834fb9047520382c08749ee587096c26b08c877538e830c50d80d17b05088e2aca6c70c644d9b483ae7091e3156a2eae4186fee6562912e37dfb2130ab22f32033dfd8e57639a23f28f09014ee2f167eaf881db34ee17cd6ceefa604278c9b1fd1f98540a12318d57b4de87be1cabd148dbff089c6cf804208d579553e0c7c63b71cfd8d8035a442fe5401eb37c5d5f7b5eb00d954c1942d2f499d7cc1676f3c62434a5b75d62064452201259309f64de5c39ae4dba2901cf0ad3e48ec4405e2ac0a41904c06209f07ceb367e1b84d89cb2097113c8ca7b25cac240e83695867a26768c6e225b328b7365187a894c488979c4c55e527386a716379db39445c2a5b42b57294b99a12b49767adf912a732c7c5b776932e69ef1c41f7768b774d0ed94a73f02914a54baa9b0e5b51d420dfd222c53648de0de0163edd4ed102f84631fb02edf46e9ef8adedb34f7ce69c79d7700cde6cd7cc4d61bccb30ca7ba25af24efba9db2f6ce3b890c9ddd7069b8dc61ed877769d32db0e65bfee90b816bbc4936ccbcd55378a499128a82455d08f1868344f23f545918c50bfa84b233a89525d778a62dce6601a240834351bd6f7c05cff185ce2f987947a0bae20bf3518cd8a341cfcded3d646e7759441121c0c50e3e8b00a5758938d980568ab3eabd5419ae1ead95871cb97d9bab3529df999ad3fbdd4f593586a66fb0fc96600af040d30db373bdbb0bd86de47911b4b0a715d43286feeefc25b67d3aef21311e030435a7d8fb073b6ff5c0fa6ca65e76997c9ab9871a3937b38e00380723594d3af077b60b067e81815bd84ffb91e76335efd0b8066b672a3eb1705c6039bf0397bf2892752885ffa013ddf62b645abb5f0761e3bde935c64f6200a6e4210ed3efc3643384bf6d7c7b3070881d836cfb5237371c0d42ed89c409604a0b11900b570c287aa7ebe067bdcc08cdab2b1759c254c52d9c86080b35c9c6675dcbf017a064933dfb746cca76f39f4a6346102a999b64c7df0574743b6a4843eb84089bbd511fa86ec2ba269616c9409546181e49b176ff5519e8b44967b4843c9f84e21574a123a3fd9bdd129bcab4e1ef546d587462e2b9b8de3ec49227c93b5182e83a84da535ba9b467a9b50f4fa2e017bc659487fe0caacf8f664d092789b69516ecfee39f7f8cd70364b6bac556fb360627a69efaefe7d28b9762e905eafbdc52ab376d2692e101e29a4ad29354df51f4be5c29e2433dc92b9c66f10dd67ba0a54b488880d2de95df37821c6e9c2af2b96f5a3fb000c624e13ba6f8880108f7f725137fb26c58f10f6df9d841ee57405d4684236e1934241277c833051dd28d8afa9c027a634c66ea14a059c05f3b2d892c7b62023c5a418a77993e607a176cc58c2b04dd930c0c88ce407cbd86e5c80da31a7a3911dc4253c3bdfdc7851101b54beae73d44fb19e3b5f60c7143202742bcb355bec703d87ba37bd7280d9638f5cf0ea6c2a5379efb826a95bcb56457ce1fbf728dcd4421396033717cf37fb196919a8e5239e61cc04dd43aaf3d0968d603d1fa171e83d5b195239af8b8fad8e63c7e791604d4e39190a6eeba42f0b4d86e40047e39842b7be59569765660b9a0533649864d37a18e028cd65e578655536cfa84d8eee1075a9a783550a8c20c3c09377e6dc9664edff342017d01c8d2b04b43988635dcb7d31a2b2b9b847ece426618b96ef9efc130925014de35c46ee0adf5aedb38a893e86cc7daa5cd2fc92f7777a6ed75739d562c806c870c6c90dcdba5cd60b933db83ef159e4bb050e66d8847907c9860b9f236c3e820753eaa7a17fb4b8aaf40af9ec144f21604a26a8606df49d6e23f9be26735101e248193c678fc43686be82886e764c4d85e5d9d713a4d0797e74920fbbe63620c1a8039d4c8a859440e89eaebe802e22d9905edda81bb6e8601d949bf23ae49a38844e6d5e24902a26052757aa8e8804d16ffb3fc9de3f63fe174b52a7a714270e3aa2115a814bd26077832972c01f89636fe508bc7b371e368ab3541248377448282b84e160fc95cb52d9c89655c205cdfdac1ad193f671ea196de3bd4ef20e5548c80118a5ab2d7d93ae48a95e40ea9d3242b971febfefb7de5c9fc47934f2b2a71d4a70f9348bc61e9b65540b16d904e7471d264c3f9d7b04683116d386ea0828752afcaefe8346d843cb967c74efc2af6b788470d182cc596a785caf6b0c3096a3269f34c4e9921ce91e98e05b364710c2ec71e6291ad9717c634b094bf2f65b6672c7980ea130ddd7308f2969291422033608100daff9a5e38512f2d0b8b94e42ae192fa7d684d11a82e7ba74db3662984a919e9a3dbe38312151716f3e2467a4e734613aa68fdff2b6ead6428b2bf5c6813b82a4740a21b93de1a7566cec7dbb13fa4e9bf9a494ca3dcbcbe13f7cdda68fecfdfd5cc3e58a074cbc8fc03d501ac22c5095e354ce90374897a48f99591a98e0560095ef360f66a540ae94064f6f7cba5dc26143eefd75c0743dc17570e8b11ee948f7909f8023b1c852736a19be729072d06a0a8fb6c33653e9d76a1212f89743bebb51c62fee657ab5ab07179dccbcbd230bbce4769820766e5468019e1a4681332745b0c005e9a4b477aff23c49730090fc99c459519045fea60cbaac333383cab5f4dfc13049cab40038bd5699abcbf3f4b0b4773f4d333ee67bde1771aacdb3f2eb4031ce96e0ace5b97f9129e91c091643681046aa815f09ad6f03cc16c535d8b95d3b156e05398bcc9398c48d71d0c323ddf2427039e789affb3a08f7d19000819ed9c18a5ad4dddcbc8dcc98614844f516f82559d0f6a08fc8e67e52ea0757f1fbc0e1e1ac91860e73f4c747fd5dbe18e368f3a3e201c67303af181d8cfcbb104b258ddb530fee3ee514583658907dae9ef6df85873866abf0ef5e386276f5ef77741140fe48430ba65a907528a0da87bc4e3efc485e6b145b7ad935338e1d4ba526d907ab8284340a9a17bcb0afcef5de4bc8cef9c8d79d60ca5e46e55ccfadf224291b2307983a1abc6242eaf440af68b3243b6e4630f600ca765140cfc8ad5fd8604b5ea31f0224fcc292e3457f65600b77560fa2c7fa4320207d33661120f1ba2be06ca67ef7378defc30e06bef38f5fb12e239eb777f03bb76f4cf5cf786810dcedf91847d84551a465cba24056524e4379ea62824bf8c6477f3788e20c4e6f1d70c1dbf74a1d6211f97131730551472c63392de97c127a63fd90fad669f805f0ca7ac7ad5c7a7d190712e5aa638086ef11c9a5265b76797ecb9012e3e9199722aaa7448a10e709ab904c00326e2213040053fb113fa0c4396c696c40b60b8468d171a9d6b2710b13942e5a607983fdde9fb88924be8cf7eac0cf43c9cb666f9f8b1dded2663364cb9cfbfde9cd634462aba544659a287b06b18500c65118cae6c52cd19c75a17b74e18f030b2a36ee18c2dd4a9a57d0919b8d4e805c453b4bb1c879bae7833dfe992c7737af491a14d935e237356b9547fcc507b3644a84a16f90f8de89016d5e46502f1f280fe66919467c561904cec8f793002a7d11b0d4137b6dbb8fe13d29e1a64c527d7ba979500346199c20dfb76d9718ebe2aeacc2b293a5ebb1657425a0ef43d5c971bc8e47e1079357c79dd39fdc0f4293c60ba729324aeafb821c01b8f995f5909302cfee3c981b7a2e3660818bbd480bb7c9f568368eea60bc160d657cf3cfd1efd0777d41c0c58a23a5f60177f0909331b5e1265578ee96d592067846440992cec4913002b5e3cd91d992a33b7c3b666432b6c3e24521fa9ad8ddb47109180318a231540bb7aa0070f1c1c887e4e885ea9952cad1d3f67b38733715fd060e5e33582b967c29e6a79042f73653d2c46fbfda9bf7c45e6ef63b90939f406f0f9cbe4fe75f2f664222772dc9b1cd272e41a81ffd98bc6ea91a1fe8c6cf5f287e8a2e0c97e99adf8d3b112f35a3628835e9df8d21fad023b7688ec1a91fa6bd689947c06f9d916e8ad1773214aaf6fd06e5b3d43600163530d3fbf9e7afebfdcc7d067bbb1d56c7eda4511e094eae44859bceb11f391f31b38944bee8e60dd9a018da5ad663e66e848037746362a2ea7b255da00175d4ab1919561d58e01b443ded5a589ebb2f20336bc29e100d9879f7cad0398eaeda387386bb019fb96602ca3be9a40085d469730dc9b20b2172b23933a8e359ed14be5e922c4d5dbbe1cd1fe21fa1e57bb41d52b566c68e8d6bc6ade9fd2d04701d824d1664c3b69f593ff939a5f69281c426a3cc1658032c02264d404a46a9e880d770e006e95aa024534042eb26a2fa9850c459404b3672766624341f68997344630a6f8a0ee41562ca77b6d12009f9517e05b0de9adf0260c0b22b2fb661de36d054eeb909d444c0ad4b3ee5244797f03452722d11bf99b032e48208306a1be18a2c53e746f6b7ef00eca83fc8fd92a5f0c09d0489bd780f4186f8921eb7ca7f47aae32307d527bbd0b78b2eb820f77dd5b9cc86035ed17a9ed4f9fd9e9098ed65c575131d350ca4f61cf31d7b76e251dc7abd287bf6f17ddd2fc8379c87aad721cb83b7cb7f93e3b9d6e5dfefff18b55f1d8b7b3715b57c4889a277d9d9ff40eca99116012e19341c4d40c6baf44e45c84e3f4e8763677c033a9a256fc476fe0fc1d7fcdecc80b96b53d4065ceb1ef51a4db7c389606cc4d1860d54fdc6bec933bc48e166b450773f167d94529391667177654b1a6d0e54b8faa1e99399626cb9d1911be60709bf74d10fa21103ddbbf27d1015f643184a3569b86e8b7e89cceea501c98b3789ae09d49ea3434f7c21aa8f7bc12b3f815aa613478c446a4680b268b58d8f59fb446d29b45c32bdcd5a321b1da7c2f30d7ac6ddb433c4430e224f050656da372c18a0d9dacb8a07f195f77665ae8d23cc64270df34edacb149779ae70da21f9519f793bdc273c3f14796059e1d327d9990beb4224149fe76209c10d6f800e5472345f52c339dac0bf5ddb37e1d65e798e1a72c754baaa1f6c7216d99c4d58cfe56a243c069704d4403b956183c8adcdde929940c0c0952c994b6635b83f434e970888aa768967af6e3a2db565b261a92e5ce9cbfd32f29f90bea5035be37ec7f6db70e2ebeaf6dc5cf195e905513713af4056c3a714496ffba6f499ab0f5e55db3d8d5eb5f2129b8ce02adbb7f8c988bdcdd636573877574745fd1289102ff7b50fdab055e078b3bf7cc357cf7302229bf7c1dfbe22d82fd52147d17f913c09750ebfe63b20832e7e33eed191b54822ad8a685fcee35ae2bdee4625199aa2bc112a2fca70fe9977847b0f08ae3eec869cba3d221bca91e1b136b515abc05fc19548c14b5e83d24ca7a0db1d4e396cd9934a8aef196f8d4a408887577d9ae06a50fcebf1bf02c0545da41a5a45b7ddd45fa6362d263dee6b713635c137f631dc92de975837633c65760fefaadb6754e681be5a5d2f1bea2354f9713ab996600d9bb45ab380586644c788fd85b3fcb6d233f472c5a4bea0ca8d51e1c7cecee8a42718b87e453cec020bbd78559d4770b6c8177a7f4359cb93209bc1be8fba5dbe487ef6e7f299745f55963a7dc5f0ae8cbfb8304f8520ad44f64b90c22e04af9fd5d9201c9faee26940b9fd10965f207b00c7ed79c719ebc09d264041246e3834075add2d446bb426246da6cdf44e1657b5682fa74c160d11b4b0e9b086bc1da3db405492b59aa288d008bfcccf19f289b293b39b77d621bc79c15cb7b6c0b340782f48d2627c3a0add2f4fbabe5098bea2d6f1672bf8ff050d1614880a62ffb484f4f35ae1034e4cf9c565430fed34037408104394caeda285eab6f4da6c74e380804fd5768b089656048f03d69865fca8f8e1dc58f3d9015580143a625a492d30a4b5ed23743b7c407b9ba2c7eebcdb31057f55a78334345edc27e3d7af467ad7f4c4797e4e48b8256629340d41abb58ea4e06cd4601823194be74ebef15528cf15193064777511ec2871202496c2335fb2f86daf8f684e1285edfd01c04e05911baf531773cf5a70acbe6e3c0ea02e1745816ac57b27453ce2f82726cd3ff38b5c898cb82dd9c2b713e199f75e4cd0f64c513a5186f712908a2173370cf5d57ef5b8594a2d7f3d2e54514ef29b95d437a66cda40ad2fd327b0f01cc6eaf87f149fa8ac4f319f10bafe32e90107798ca0bcbe69b53d91668ebcd4dbce27340547f65e076bcecdc38e42aef4ed427b9e0de813057a3515b0a14f91d3cb83cddb88c839e93f37974d60fd04b2017dd4e840c7026d0942cc2fcdbe712c41d9092cee7cb6250f764f08c90ffbf703f356b23b7a6d06528e17385a7079c12a6580b0c1d0a5c4ca003c5a40b402dd0e38ec969d39027a0270ba00339cc088b43c363c51b772228fe4bb2229f10e6ab113453fd9e64fdaff2beb452aec071de2fcc93f102fd58ed434f4629d34b68e973d81fdf0f0551d1281a3df024033a94761e71f67e4f6ed71d8123619b7d605e7df96daaad9ec36704244f6f4b290abe9f20a346b711637f7364680e74cb828ca36b96b8eb41814866becb8e3822e611db1352da048f4e2401dfea36d7eda1bf4b0addd312e82666e1fc79d66e04f2e54553fee0d1c96fcb9477b48369ecf447e3ed60ad91864873331fec1a274aaf036e99a8877255b2af0b6096a9f16c1960ee5d9c2ad3819a715c6ca26fcf938604918a4a5d4bd10a0cee44b96b4f2f5e0d24d0b02d615f7913266536131096f3a05766916c3f6ff76d1aadb3dc0ab4eae7ff813e09de64fabdd6fcb5693004be753d797b9d8a7b0ea13e655d00243ab05924daf209ca1bbeff2a81670819f515dfc11281ad10e44f56eb1fc1fa8ea6f7cc5b0e7f623d46fd761df496ec985668b655cacacc148de4c2f5dbc7052c51be62b404498644d74aef1b5f4233d4a7294cc883b11bd77fa8de91753b7249789488e94e6957a0ae65416bcf1a4b15097029800f147f2f0053a0d18d2260a8b313d131e8247fb62d797a2e3bb6ff4d972cdfe657cb84ccc7473453bb7ecb92fb40db1079d930c9ec737cd79029490aa842284229b04d45150f1d4d9daeee7566826a1e42d3abdbe6d690f0ef2a988674841cdfabd025e067bbe14cc649a157df3f795182de44179ea5205e9baa4509b23e56e15a0605b61c0b68c838d4c2d32d524587795748ba133602644c9b92d2d10dd8d97d51519b9c154fbc89871b2af950c306f4e978575f75fd7e8bfc3805ef5ad234f173c753408e889ba517d94bacf75b5620e626800a7da287179f8a086e8d3b196de99b3de01a5ab5504ce00612c1e7ed6d346f53026ed51ea25a62fc9f5c668c9ed50da7203102acf32d25a4d0dd4142e7afaa83d715e1f184c90359b179feb4a3225bdc064a8829d84bee1c40a77a6a6478a82858d35ce569e51f7fa088d3292964934d2487603ba6eaca0167321bf3e43e23d0df5b0c6e55cf7c66f346a6ddc82a8180dd2108bc19f1391b24526f1451943c75df60dee8b4a377d8a72ebfea56ccf19890afdac1bc5dc60a994d1e380c6400a6a1497b2817351ee0aadbad33ba7e2fed1046e57be752934fea905324cdc5d24295d93c191a5678d82e4532b1437a23749a79da27f01facd77be77ef221ea560d92760c672cfe3f4900a71bb1f96e90d0ad9356f622a21cf8fa41656ad21e7d3f995937f9ee023eae36acd2aae7783f815416f640befe2fb289abfab71efecba6a451f4f2470d24bfb99d49aee00557c81659a48d82f3c7f80465fe29ff491e6d397ab2fec4bb8f209d0bf73031261df6458624fe8e291533947b564b0758d64e710567b123478e4e54dc8003cfe180b729bfbe38f1dcdd4759cfb75a19d9b0e599bda06bf26d03c17911c7777e05f95a4e610fb9d0543db2b81ec79c50bbcb4303055f541ce7f43457020b31e4634c78d0f3465205908947f2181c78393d114d20eaf115ed0dfdf283d94edf35a8f4e1fc37f6ac5f45e4de8db548f634c4f1459b8b2190bfcb6b57c7b674c2b352e650a27d3c084cd8d636027341f1bb200c002fa3a8f5f1be7a7e5f25dec1beda3e8fff5d8c35c8663b64187ee06ca4a6dd984a9a694cbbc30ec6e0c3d0bca38d86e0b7e14670c3fe78759eabd90a2d8219383597c266e58048ebe7f630a944ca72377602caed92caf8de5f631198e179448aadf85114d5eed821fe0a0ab2b28f6e871e76f176f08fb0c0a4a2be903aad6bf5141613782b516fa65b626aed2cdbc575f98615fe2e4ad25d894a03352da7abd017c11d9a74e3e145ae3ad828b3973e88d28be8d9ea76cc6288a6a717ef1724cb3246b7c19b0ac8278bab1db04c8e2b5280b88079fd028b6c0fcc98abcebc2efb68a804ee4e5f061536998496debc47becb2bfbffe4d349af07352fd62cd770d3167280ebad853e27082536831f4932dfc4470c4e8295c19b3430c8807948ba9f1d1195e8e00cb55df9b86c457d8505528cd053d18725f991ee420573c2a9e2d990d9c150fe8967753cbb309c6f4217b0084cd120add0c0474866f62707505b82adfaa668e5319e7b6338a50353f46ddbf018bedbf8b8ec40250f6b44e425ca2d94b79da7c51cceb988ccc30edf6f4c3f81452160ba1ddac23a5a83d9307208202483469f1f72132135d0132f904c1a60e2ebec4fbef245a76c6c7f094062d81b86294569034aa2ee441c15155fa713495adbc29fb7fae3c22a7f93bd4e48aa25d18400886903d8495fd2ba33cf1e750b97ad7385750cd4ea9a8ce7261f10d03c22c3287650f03cd766ca0b9f462b630c95c0e8c034cda8fe90167ce1d55687ce30f1545ba9ab870cd83080e4453ebd2cb4bf9bde3d41fb3d9608ac024f09e498c5b0f7eac2080cf250061359322901b70041118f5314a116d5581d409cb6c2c6371f1409b2e6a4c66d8acb62bfd160633c6f014d025ec283e6929a515ab3a396db03c665b91191b6445c3dd6cafc8762042b08549d6b246be03404e377b167144f7de09a9360ac71837572cfdaefa15ce60c0dbaf185a153aa474d0d2f5e2a401aa9dc624b05832bc3682c6f0e3f6c5d739ae258deaa073520730a1b52046b1f026b19fe89d1910314438227548f841d65878610ce745ac7983bc7a0e0881242c5b122ae36b19c79355527150088ded00d42605b522220a036c4eb6d72cbc60c3bd44acbb8692e50918d5b0e5ae224838e0934a3ecec3b9c3a4c037b5d1d5db2052024cf835f0dc9b8fc2b497205e6f0cbf71cdcd860d22b541b2e893a2cb152314b6b2b62f681744dc6cd28e5ec246005999a93fcc5223df3cb67af91f24ee22fea67d07705cd73b31e4b1c24d057f12c0676a09f83540a7517eed26b9ef12f0910587297056dc681e6d8109b62be0d7630309b887ff655af965afce6acb7344f63db2f87bd57bcdd40309364e758964b3ad737889f65a2ba64b52600d661a7af7301d91b2f8784ab7cfca373826c06ffce495cff19e44be14d3fa26883444b4a81dfa51914d68b056c9857a978111611bc11f6cd62db830dc1bac8783d4e9b08464ca0b5f7352176c723946a8569cf086264fae464e2b514b32d5eaf37bdcde49a860f9c09363af049d0441a02fa0583470c202e6faf07a2c3e4a8228605be993d0743c987b434eefcc779fb1e4ad87bcbfa94e998897b73393ade965cc2a60e1069dd18f13d019567e117a3bb60203536234142b2b6970943f8dca6671bcc7a813b6b82e8af91ef933cfb2c996e7c1a1bee496f8f92d5c86fccdbe4bc42373229594ea4c873c394383ae8d4e747de433a06fb6281da0430870164cb2a8f16712da9474c14c32bb424ed4f4f7e05d8ec603c9aa5f125287e9960a515d3c4e642d3d17ebadeb82c0127819cc0052507eb409e8983034e133c77e75b00c4bf0fdd4a9a7f83e65733ff20995abdaef4dcac2d1390f383bd3d9be50771d4ce92eca0c7e4935d409315a3d1ff9d6213e2213d98f8523319edc498c27367959531aec1bb0ace4f167538c4019a81c441251e3f4405438f2a9970a54ae8bb2dae1ba64343210c5d21a312b8df6f2e4cea6283797005292ae786ccc88d8ead5baecc2f425f06103ef7cb09c80674f4e9dee4ee50eb7e20e046a362b3292f9708a65b5b4525cfb8b33402768d3b4a0477a652818f0d42cb17da4d7bc89d54d3365bb02c143b3d4d1de0bdf1f2f952811e01f56a93d6389c7a374915cda3e9f877215cf38acd47376d78409aa98fffb8dc5e99a8a0c8156ad3561b1193ac0572a1c684a906b0f65936ec7cfaa92e33861851bba3fe430d5827bc31f166509b83c7ac092da09c202392a9a1cde39b4783c5471d3494867bf9ef0dc274b1ce0c7c316539e782df282eb0903059cb00ff3534dc03266e24af65318ac369d3b9b7813d64a4f46539985c8a0076e3db984f096608cbe9ca332fdc0929d859806c0af1bc7e73c29050d3fbd042d6c36230f2ad092b05b7a2b1fb65e7549307f53e799c069922c3400e17d88114e4502102e02738d8e471b4553c988438584fc802637c8476e692b5452677fb888a55332bf1504a1deddc92e280845581e625d61fc02e15b1de43f3800eef34b3cde57d255f21f327c5b44ceaa0d85458a8f9fd97cbaebfa1cf24c34afc3e0247b0915b7a70aca20b51cb2c31b3350a3596253b2e609ca79cd31b41233ab20ddc82b2cbf710b3a60ddc1b5b2a7483990c1aef3608c1ea7ca4b22afcfcbc6da16e9e91111cd028ed11b574e74368428cb498c1154d9b415d91b05959867e736ef372bacb7733798362175f7cfe20bab8e1e86ed182cac5bffd813e383ef20fc6766fc3f4373ed6648e685f44bac8c460f5b0f46ab0fbd6c024f03b61d6772c03941a51d0f771466f915f47b31d2bc82199fba4719d6c5b70070db11896ffaa9e25cf412d5a9c642b6c8a3619c4348993fc054ce532393befa1ce03ef92cbbe8330f320b899df1e117a75950967c06ee56506f46074122819565a133451f930c701921db541a3f9924ca647d35d184eb7ded5bc23dbcd56a706de0fcdcdae6ad1b162a89fd9f334b9e18536429b832f82b87566c9f159c12edea5c20ff13be127cf46bb01f784780e66d782b83e3e8e248e1e9e3fb32222f965c4e3b6b11a3897f1cd23883fa34afff2de2f8360b310eddb20b5a9720680135c233919bcb93fbc0942697457c2fe87c5cbf8a744f69ba183fe88f81bb123b0830dfff8dfa90552af7201a876349f54f83612c9d9b357a322796e887878e5ea301366e76247838c62fba15b9c65ff30c5eff78a2fa38728aaf80ee23fa1cd82751ae65d8390fa73bed2a0d9397a46b060429913022a05222ae20e1fcfffc5d53bd8a7889860161be6e9bf82479d8ef146f1912b6446ab1320e5b2f1941fc5ed780b8016f00763a8909dedc2b0c063e150201ac3234341b48762bcf8654d45759178aeac46f5d9e9499e3c3da9e9b2e0c4da5a080887a55c87fa058370859a56fcf173b24084e16de7bd1dcddf94da550f8587feac60693a7da41aa0933d57e4d0d64c0ca380b07b24d6a4e5e347d3897a085d3ab95b529dcd4b33413915a6eeb719d09aa80344395d0290a54ac4cbe035ac0ee99a4e1d9fd883f6f22a3d010f63ac13d0e374a637032f67fe92ed340d45f44067a5dc41477485a52cb482ed2b6fc058e774adfa9f63e005ab493b33997f3d690da94190987c00a0ba964681310e664459f8e29f96620bd8baeda78054b09ef70525a7cbf906fb0019f7d556880604887f1be87eeba7087bfddb0525ee6ec483bc9b5be80c2e3a080f23a1d0d063d382c5d6ad8764b6698bd8ea6659ca9d4b20764aed51297c9b26c6358eb9a655536381ed4d05796941c720b1b32d36ec5ce2f820b83c0b62c5e9e41b9c3c6ee505d98a86893e9c884b93367a871506c1b8bbc6b58a18303ce79d1701574ab35c8b49637c53673a20420eef70075459b9f4343e0ddb07e0e48c1bccf47eb636385dccec986e10c8690408873164d7fed9d67e442ebc3c0ce2451670b38fee0554afa4191bdbfe683c0adba3266dea71176ff97c0035a35c8c3aad4444d3790ee2f74be32ff9d9d3c5f77a5ecf9ef9d15f99003672995062ebeeca660baa23af447c8badbaf09d8392c1087ce9610115d2b81798ed5b38b83946ef28cd1fc59cf5caded11f90f241d33fbd81bfef312cd13873c0aa0a0ad31cf037a823ced43dbd5dfb030f89a84721663e057531aafe2cf750397cf507e0680604f9b9afcfaaceb8e46e5b59e5367b198cc80b99909c02d9684d58081cc7d6ecb66a4c39f8b31c5dc31db857cc13ece9f676b7a112125e112af8b3ee02a42163ebabd9f61e1a09983a37c42cb14052c26f2a1d82c1b92c817734188cefe488084e421fdc3e22040a673b7122b5a6eb6412dce80ed62e98765f2b71a6236b0be2cccf1ad7650897050a9358d629880e0388817b6b9cd3028c71ad5b9c591854573a7efc0e0d5e88b68359c7a396a9721c449ed4be8ac6c5376d000cd5b0690ef56e70e78162c12e22bd9d364788422ab0d3bd6b56a204024d1e83702d2529f07be60e555cb2e09b53ac9b3f16489dff9f46851a91a54a70f75d9178c90fb465cdc1533e65d7d43c3e1ef1266eb554e1c9d30fd9cc504f78db59f5802f7303f21e97a6c5370d7cc550bbc6bf813e1bbc1504973907caac2ac067a443a9fa4f5af4df9870bcbc818b3b7291c8a5226f06121bc8bfa8b7a060313543ae10cdaaf6b921a6fe92f3172ac7eb9a0ab0810eaf5df1a92188c0f72e768ce5639393e6c95e09e71dcbf2d199009aa4ab969ea7ef67630aace66f66d426ba3b322eecc79e3ecd2b205654fcf26d5744abcfc1b80198a1df3d5bdbc2e87e41386edc8b2df3d61eca61274a40e8e91194352b2b60034fdd9a8b0220fd8575842f54141be3d154ec4db4e91e91ea71e97a38b598ec0978d77d2b00781f68be6d9603705d0a8dff2640978c68133d3acd59b4ca28fa8cb9d513bf8d4d687960dd69b01cbf42fe933c639a056dbfd3956e55c4b5788e5e15690a60e40eb1d4d8bec7a448b64d7d1ad7f1242626c667b82f91fe545d180265de3cc0cd85f0ab628f09e45bda7eef5f961ab58b89177e1069069f69b27995eb4a9dc5680e5f59e3f2b5637013efc38e35d731f85182182d3eb18d07abd293677e6ffb450f7390630ad5c48bb0ecb57f3adfbbe3cf708faa4a7ecd67df1400805f6bb6ab9a283c1652fd6273a0cc43f3c6234d56899b8b423cb9fadceea1b467a16461458e78339df323a5e7a690aebb119abb644735d236493063611e8fb8426734a2f25f11c8b4209b27199ed11b680bc352663ab210fa81341ed01b6969fd1985dc0d96fe76107ce85ea672948bdb2545072043c994de9c33291601f01f2a1d2ac52317bf718aeb7ce80dbbf2eac7fbff2ffd60a520b484e1c6a2c0e9f372c868d7b3d374ba426a106af74f540ceda61424a0dbb7bcd0cc3f3485b5996aa29b778e7409c527f61051c39283dc369d175c967c8f67be3f4b64e44a370e75f08fd82991ae1c5a203884c8a3b8c8213ef02bd10b9737b58608108ef1f2eb0a8bb288854aaf49590c32ee4abe182efe45f61a03f886f7073ef603b1418cc5c746761f3ab211a1ec344eb275cca226cc484446ae3503f6975443e7f20c4bc4efba010dda24c5d0e45af1f60a614657efee12cf23a79b62bcdd57a86db0265a878f1f051dba4ac1aeadd194c50e0911ea628492ee4a8c723dcd3d5635c21791369f57fe2c54b30f2be672fb31feaf91320661c23198742dc499c8493e94f039c03f86e104f40c2d8d2ee4f136add1ac8db541084f86cf765ee251c488a1a630403327dd40c469b7e35ac78988a9657d2cb35f0b7f7b305c4aff2cce6d6119d198800754891a097b1b7a7a26ce82f18640e0e1a9b11d6d164a2f2e49ca5d65c064e10ca1117179d7c8b901546cb1d3053c2859e309d5cc4f7cac70582348331169d0ea4c603410ee0eb74d835414c0ed84a74200cea2bc4569f085a851c89dfd00a00597e69bb7a28b1bb57be7db134bbe475b89ec6da736d2dc62221344298fde6831be03dfb52e04fcde125a65e99e75e22a06b40bc0c51c1418f1c9992f2d17ee58554b3f942f629607505a449f551c1e7321fc9e5b36a510055b7f65928082752ced9278a33b5d3a11c44697d6ecf070f1cee0f6a0145b23f7a7106bca1411f1809dd0fa351e9c0ec8f2e0af715831e28ae2abae46ce607fe1c6bade6a10786f3ac5dc4124bddd8e9923ab290a45b362883a501050c284e5e28e935f4aebe4ca6f363b6912d93e8b02ba812ac09a1047ed5d3fef7b08b1088e123cc4d31806cf7283f86abf7291efa92ce3536f48feac47684bfa46bfadaace71b36f81f0eb469d587ad368ef5ea278c90492304c78b405dffba2662ed0b74cd2983892b45c8b5437a0c7d752894c4980c70dd8893b35d1dda7bc9f22f233fe00d81145202f14e23110b63682ca6bf9974e70fa95a982968e1385a335af2ad935d6edf21709a02401c8d813bde98f0f4e0d141c4e2df40fadc28f78e9ad5a010a4e0bf6622b2d5c5037e40ec18557eb020b5a1393ea09151350a893f09de9ac0f555bdc24f92e1b41f9c17ded2763c9c1ca6b091153e4f9ef8752943bffdb52dd8e26bebcb07a7afac38a39e0ec3eac0d18a397132b82bb6f52f3b42730e4f87e7766c4303648c00304ce30e6457fc1bb0530e4377b651cacff806f94fa757e1d8a63bd9a069e9269a19a37bb4dee6373777dba126e669f022800906491445d0f6f87ef4748ea70b652dbe393a8fb4638397a0d5eca015113b77ed168427ff28f7fc94ea44c94115c9127b020fcf1dc0efde6683045fad40e7eace067e576aa405ad4b68d8f0ac106574fab98733ff79d674ece24b83058bceb34a0c9052bf8242104292f0316062a69f7786c21176ee7f3bb9dde0ab1dc44cf84f5b77a36d07b4b2f9ae79b4f579adc5112670b2a290428df1a71435a7132b677e5ca42c2673b263d71953b567aaba652b1c89c94f1df2f0abb0e70b2723e828440f2567336e6242fd7ee903fcab906f52aa09db7b54a26a119bdcacf9b957fe285ca4ac6b3776a4118e77db5d918bd1cdaa3a49bdc18160bebc0a30f8fe95118cbfaa21d021229266932e893e6216bd953fe6524e95af39efc3a32598070f5e47dd72be9adfa36211cd7129c2acb8e26993b143813459e35ac657cab7e186da385571bf1db51b3943e14d5c0ce31556bf1bdc089ae052730096615bb93cd83b2395f4e63d37259bdcf02184f816305d87d254fe5f515468981e329e1f32fb16edcdc77d69029e26355ca404fa06c7a25410282c498d017e7fed42978b7b39773313291afe7e8298d9fa580defb655fe1e41887ef67fd25afb44ba95c8e64d6b84c8124af4ef5e4141447ff8d83ff09fa0335507fe2ffc953295820ee15e4b444cc98d24a6b609570a510a3ca312a352bb5b763a2f46ca30605279fa721526ccbb307d5ea5a49c671a63a51c6ae232df30123e53546aa7b9579e79099fb67b9e3ea512a352290e5ea70cc3e1f45fad51e3f4afd2a052198732e96efbf6d2fcc1c5bc8bfe2b3429d6be14f77c32d8aaea5f9df95766d06caeaa5851719ebe5599d5142b0daca45845b1cac00a8ad513403f556e9a944373fabb41e96ebea79c67c11bdb5d1c3cd3db2a40e8a3e8ffebf57a114b08fd172fddf4c6b4f954a5c74b9774fa2edd7d917e185614f6b8e96efbf2b4f95432312df584f91fc2ab13b4ff1aef4c257dc2db579a32594f13e10e24aed331dc41024ef3511067ee0cabd970c792eedd9fac6665e10e0c843cd47181df92252ef1ceb1dcb34c513bc30e460244618eaadf9238aa30c70b2fb2b5e97443833acc81f43fcc71e339148738c8fcb7232e431c345ce3701ae2486f7b210e29b769c63dd1686104686e7538d736750d8b756dad1b6fc1fbbb36975e2b65c75ba2bf34d5403f18ff7c4576bc493328981db1cf651ed9e64fa77a77c3b8dca9afbcb71de4e570aaa5a671998f6a586c366f4f77bb4976d43d5f6d5f5acd469182c474d3dbbbb932c596cabcd6e52a515fdab35a773375db2cad8ed991679666d9d31234c2653eaa61a1fa09e2f2abbc5887c4646f7a63e779b5d4b0ee768f740d0b941d6d76d4b5dec551c56ad73c4da0afe8de4caa9364b2e37916e1f36e990dc1fbc33a9f4745988b294bf195a39ce22b3314f7a07a96caa8e1e7a5ba9d62cd54a6980a4acf21038820540a4943a5387613fe77796d62f61fb63be7a8f21a95e535caa141dca44b9c411d23caeb95e68de2dcdbe0497a95f81ae97b1e61188aada41976228a708205ef89917029159429f3f013529e05cbab334c09aa348d524c05d5bb473c59ce33349b68129a64749d50a6f42ae53cd3a9f94309f2199784d3588aa9306cfba0caa40cdb1956c39830aea9ec1ccb307d97528ce64c19cf57813125fca637f6168eb8e01aa7f9681f612ea6eca617d53823ddf43ef85ae71cf0e27fc98453a50dc4e84f568e3ba8f3ede60d34e6eddaf7c78e477269ded48eba777f3aef6ed9e9a637b6330ce7d2eb94f30c97f9c8cb7f2eaf4404ff97d7267b2a6292655886cd4a6ceef4c650ec04bc4f3a0953dda58cb4330cbd471ac53da89bd9b4336c67d84e9b511b3fed205a74e61ccb336d0441077508979c29df19168c9d062196f862cd1744fc77e1ff17bb764b66ddef0b2896dcbefc45055fecf85d34f4de8282e2a0d608ef4c8597683d5d62244c65ead477c3a7ed34330ce76e2cc3a256557c58e234d487ab5d1cd105105d20206febb2a4252f5eda19769e3ea59d6169fccfaf5c54dd4e518df8e1428f9ac7d3184a2fa0c2a9fff74d5f7867983ecf7b94bb3c269cc68edb618c0bcbb0ad6f0c65eaf9008c140fa65b63de85951bcbb60faac43c731655e26c2be2a598498ffabc54bcf49e4576bc41bac88e69cf8777f767377a7d1dd8d90da359076d25f03e8d7604fab1b59abda7899329c5986c9a6d8fe72b2d0c4a3645d76a3a7d976a3592cc3894a9667117bf8236ebbadd207a99ec985e9ccd7777ad8be72b718ad36db3cad6263069675886a152199691f28ce72bafd179fa944a7d977686f524c086f896ed0175fedfae53f541ea5f61c08926c8307181259448c202ab0afc2b24fe1505fed5046e50a14c3bc362c133bd4965d2510972ce647454e29d6b9b243ebc33acccb00c43c00334d85dd3feb25306dea70c43997e5829e7194c6758122ff55ddabe1cc44ad877de2354ea235cb9fbc448184997675eba1829879a1acd664f9730f569bea499fa9f4608932e428383da3ea85f76da453d40bcf87f69e77969347d475d830d3fffb5f974b0779699975229b1933e4ff31ae96ba4d1db93319518fbb698a8548916c97686691c549edd5429c34a341bc57686ed0ce399f952cddca083b82988665407f1ce0c70633dd64a26dc0bce82b8a986773f4c43734d6f9ccbbb877798ea08ce5b977ad416a683b829c382b8a92c998a326c1580d732b71c9a613bc37686e589409732423e059dff639ad3740a19ae2ec53d7b9380f769cc29e6c2644f9cea1ab6639ac78cb50f789feca8b1e9abbda6a0aaccecdde9129bdbe67dd397d67a9b48982c2fa74576b4b86c2bd8585700a4b189e69bc94bf1b6a839e2cc116747209cdbf7c79216cd5996f32cc878573e4f1051e4ab1f342c15d1d8d4d804de274bfeab1dfef768df8d61edc354a613cc89305ea81964ad4ec72019cd47923793249ba86235854c14d7e97823e3c3441a9589284c4cf017b1b817dce82f97529c100df9a0acc688f9b1e0417edceb0596f0eeef01020930405d02ccd0ebbcac2d25de629feccbe2d51e6a50e287ffdad452a4388142a4446a6b5a895d402ebc7ddbac02058a467f196d02d24ad625a56422494d83a2997e92a490a4fe5747b42a12aea795114510318404564250008cd53abc08af1410f220a01f2c2b4f6c2a4949a1f072aa143b311576eae5194906e14e2ccbb01295c2a7eda2523bc35647d4f895f8af7b85c00250a932c350289d537c05cdb0232434c392f24c29cf748931ec867b32ccbbb01beec95856fe9baf10709d4723495d5eacdb957777cb270df7ee4fdb683a1d758acd34bdb617ef060ce2dd806514f145116c8a50e2bf4db1cb92d6654997258ff0eece5e24a9699796e6db066214671e2e69657969e5c53a5ce6db8bf5c5ff2daf12d8e197bae65974337bf966f6f26c63192ef393c6586963193e6d17ef0cdbddb2d34ef379a5521f2ad503f68a36962d6199f69dbdd4278b5a4a4a2f3e8f8e308a7b50473f0cebf1d2258ca990cef31e29a1e2dda66624597f70e2070afce7dd80bc1b90964b9f2caa47a9893f0aaa67ea741055070ffebf5e3a776dfa3d4178672a39d4c4690c4715ab3de8ffbe571e3a30ba667fe561f3505af287615687176ca8731be3c6dae6edcab01e296a00f3af82f8ebff7f8d0aa6835cfa34b65d5b5090de3aca9eb7082dd2684631979ce2b6cfa64d3b334bd835eaf9769a9f320e654a8ad25228d3ee969d367eda19a63156926dbdbb65a75f76da3e2859912cc3ae51798d348e0aee1e2f09952a314e7da779954a14cba44abcc53ec15c4caded0a88d50f5fe1a8371cfddf58d3309a793e1ace953ef43ccddd7ed590e5ff0068d08286fafe950fff6ffcab301835cff26224cc3367255a44c33ba3349d8e36f374409e33f1f246af2e46a3597235541d30b3717f18b5f143171c2e571429512c10b0347f360e3b915129d4c661276badc501820596260de74a4c731a1245ca0313fc011db7f1260a942416c5674a2bcfccaad3e2c05b40d86c249941c77f5c66942c2d39041043f61525ca8873255ec9b0a5c680670ca61bc54187c086ff23bcc6505ea763eff2ea02cc7ca3982a973ebdf3a9695a471bb2aebb35b65d5b5a9a990a49e2d05072e9939d014e98685d81e984894c6673767ca1a60d69b4dd7dcb8dfa964abc352ecffc33921a033b8eba5ac6a13b03953fd68e352225be9ac5bd60c9bb684d664f5f9a957e6abe8d33d397fee5f3bc99bd0c050371be403fd6de273bd6a4cca0f0ca8bcbafedcb36e780d9c88e2fd4bc54720c873259ebb2e358abd9a06d2c81eebee591dee5fd583be6ddbb4fdbd73bef795e24261c041c844b509dbe3ad8cf8a0a65128432161978c2a82ca2aac2280d44918902228cf2212acc7bd9025df063491b64812eb03cebbac092bd6c5d17fc584bbab4d5820597f91645159505e887b65193046e92c465bee1b003164633922ecaa54f5606715319c44da559fa64614c4ccc8407f18e46cba54fe7d2a7c7308603875029e4d07bf642180766e7798f9e806cdad66ef665876ab55bcda432d37d9a4946454648e5912924343402615db379ffb8d031a7f69797eca8cdd3b503d2a945cdfb6383bd8ccb588756b1246ce805abd9e0e97201e56bf7113497e7b6d896e2deb5b79fa01d837797539cc31b452f534da866f3c655706d69c6012cc9893683253d719024a345cd6430a8235a5412124c0a97ed4bb773283e6ff785abd828d8adc4e72fa3bb176ae6db2b9896d704c23f59eb9ba9ebdd3497772f98de6cd04ad193efc4a1a68b7773326b811d9120113a47200e80918745b32245662b30765fbca489074416db6eb80170c42b382b30c6e0c6b8abd3db92263e8b33ed138c66342f69e25ba9b14d5b3b4f739762aa27ba5bee25b1780833008652d2ffb59d4f591885046cbb4650bae87951206492c26f988af5f4bf277ca246f8648527c09fec207616d481b3d19a335ae8e4c6c30ca67ed60d16ecffeee22a980b4e711bebf23ccdddf6655ce65b0feb0a5ee4f6143c000f5fafe33dcee33b9ee3382a10361e864e1e863f0fc30afeb37c4220500f81183d0442f410c89187408a3c04123e0412c1c31f6a3cfc61e7e18f2cfe43a04382203d26087f38f1f08798f0070fe10f181efee8f2f007faf00796873f3878f863e8e18f0a1efe88e0a18f301efaa87ae873c6439f2c1efa4cf1d0c788873e5e1efa94f0d027f7d0c7ca431fa5873e4c1efa1879e8d3e3a1cf1ff698f34a0716f2d840420000e9e1d3c3e9618f250f7b50f0b0478e873cf2bcfe90e5874f101e671ef250e2210f211ef2b0e1218f02843cf6431e5a1ef2d840d4a1e4a10e220f75541f3f8a883bd090e0150dd6eb19765ecf60f37a8698d733bcbc9e418033babc9ed13b03e9f50c27af6748f06ac61aaf6658f16a4612af667c7935638557333e783583e9d58cd7ab193e5ef388f19a27cd6b9e205ef324e0354f7ecd337bcdc3e4358ffd3f8482221304600805c7c0020a2a8f325a782d0384d73276af6568792d23f65ac606458090e1805732b8bc92a17b2543ea950c28ff75e020e3af6378f13ac606c638f33a06191e3c84e01823688c226384af63ecc093c62b1e38af78d2bce291e2bfcd71e3069e28af78885ef158f08a6782573c3c5eefa8f17aa7ceeb9d2b5eef5071e7897a8787d73b33bcde51e1f50e08af7776af77acbcde99f27a47caeb9df1f58e05af743cb8b3e3f5ceea558c315ec5c8420c2a5ec558e2558c1d5ec530c0ab18be5731caff3b74f4c8210a91c0a7da91f36ac78a573b55af769878b52381573b5e5eedbcf01f888f9df3d54e96573bb1573b1bbcda117ab523c4479d32af7454f0a0ce12af75c2bcd671c06b1d1772f8a0c3c42b1d31af747c78a593c32b9d185ee9a8f04ae7f74ae783573a1ebcd281bdd231a233f44ac7c81c2b5ee79c799d43e675ce98d7393dbccea1e1750e0baf7342789db3e5750e96d7394baf7390bccef1f10ac69d5730dcbc8241e6158c07bc8201c32b1823bc82f1c12b18565ec1687a05e3e8150c28af601c79056382573078bc82b17a9563e7550e16af72cabcca59e2550e98573933bcca49e155ce7e95a3fb8f83470e09841ce101810e097ec869f22a87c8ab9c1baf5f7478fd6280d72f5441be48bd7e41f29a039ed71c34f09ac310af3928e035072eaf391cbde650c16b0e3b921cb119843f397ce248f01a87c7ab1764bc7a01e7d50b2b5ebd98e2d58b265ebd48e2d50b2278d42e4e78ed02f8da457eede2be76317b3553d5d3b3038e10af70bebcc281e1bf28a46ed181d72de4bc6e61e6750b265eb708e2c78d2d18f0ba850aaf5bf4b6a8f9e4c08163033daf6fecbcbe89f3fae68a37685edf4cf1fa8689d73746bcbe09f3fa06cceb9b1b5edfc4f0fac605203e6e06f0ea26f8ea067d75e3c1ab1bd9ab1b0e5edd0cbdba09c0ab9b1baf6df2bcae317243079b342a9b3aaf6cbc786573c52b1b33af6c9c7865a3c4ff1d3c7ef46083beb2a1bdb2717a6523e5958d92d7321cb0b1af6c72bcae31e3754d9cd7356a5ed73cf1ba464cdda1c3674d035ed7a4f0baa6cbeb9adeeb1adceb9a2baf6b9c5ed740795d23f4bac6c8eb9a1b407a04f911aa99f3aa86cdab9a285ed524a1868857350f7855f3c2ab1a115ed5ec5ed5507955b324244483c42b9a2faf681cf08a2685573421bc568979adf2f25aa580d72ae06b157eadeae0b54ae9b5aac96bd505af55f5b5aaf57a068dd733745ecf70f17aa6cceb9909bc9e01e2f58c97d73307783de37b3d737b3d53e5f5cc94d733525ecf8caf6788bc9ee9f17a86f56a868c57335fbc9ac9e2d54cd57f1c3c80e4f0213ec78f1f3b74dc782048192d5ecbbc792d53e6b58c98d7326172dcb8f25a06aa0c07af65a0409003090a175ea118e1150afd0a85ee7f0e1dcf3186ea75ccee750ced750c95d7314daf638e5ec73c791db3e444c6b05ec574f12a868a5731625e7fc8e24307901f00550c0daf6208f02aa6f72aa67c1523f52ac6e855cc05af6272bc1e91c6ff2ae487165e7fd8af3f6479fd01e91507fc8a0395571c9cbce21080571c2478c561c72b0eac572f755ebdc079f5d2e6d50b99572f43bc7ad1e1d54b035ebdbcf0eae584572f54af5e74af5e6eaf5e9a5ebd68f0ea65e8d50b06af5e26e8a1c3478e1d367208092286407ef8f0e9c163878e1cac1ca260d8408c0ee02a92584bb4f87a828052544116af628729f62111384864b03d3c5491849beb43888c1e2cff5fa4474204b5ff448f53a5838f1abb9a7a0f0b4a0459a28a1312d1c0124bb8e812031301409914f4b0a0c413219125bcb0b21b7a4222640266844c08600ac00347ee441251b70d1e120922ec614109569c90080df500ab1e26acb1c61a6ba8316537ee8072c0c10a8f9048ba232492d3d1c38212110881a5373c24e2410e086ebc822b44b10f8974c082ce053a639cac656544e8088affc7f122bab078487848c4e8812357eef870d9e02111a1a04d831e0aba4883c2ea4790064641a05401c1e70219e6f4dcc9067fe0c8ff5610ff7b580510e18b13243c24e23a110de0270dc8c00c88154755764851f342ceb4f17c39d396e25ecfdcb434a5f54c1d2ec5b4add3e62fc5e7b9734e65e190092ca10abaa5ba563bfa5769e85e799a55fe151a48ffea8ce3a0ced38c225b3e8d8894046f9a163519cae3a48c25c19b92b11a03cf9d7f25869d551ddcbfe2c079ff55181bbd3f4c65e6fe159d396094285ec9f9575fc4d91a97ffca8b7fd5c5bfe242c3f9df4233ec5f6da1f4afb4407db8d2fc575960b1c2bfbae2b66f45ffca0abc717a43f3d1bfda00c64ae6894399fed59bd50a6eda943e36bd3e3d87062122abdb47517384ae088198fa5b48923819caa00993254a86908c44434143424149c6972b0912a09f231814b9c088051514b1140c09c0102243860c013a02143a42b4c4e2f23572e184d00b32ff83b898e3c597ff30eac5016c899a4d37bd31f4f6643d4ab804813f2adfd6e9965e4679bb0f4c5d0e87cb9bed5eb13255858ad44c16d5410cf6e4d434658903a524a423a3a2a0f1e55a230912a09f23185c60c4820a8aac6183886b8415c80f1f6bacd193e57f7ec8451879f782e9ad35c1ff1e07eca0d214d30070830d1c351a9729d6374c8565e7677a9280a3236835fb6fe5e116371c53855bb4b0c5f9df4ab1962cf16b9b360ad658638d5f01a116681cc512b4843c48999e06b444d610ab3b5eb4c21da228d3fcd3fac674fbc6783e274cb4ec6fd5f21a396182f5352aaf112fa74a7f0bc80a082ccc88f35f6341e63f161198e1b7588480850ce9bfc6420916466a35de1522fc39d4bcfb229531c48a210ebb1b3fc53650c6c7d3dcbed3dcbe0d0c39d6bb9c673d846f9cfe5e70e96fed101aa20a3a7b3c9366f6ee5b6a423749b8d9d60d3074e3f48fff9b1eb6a933b6d9401b25fe20aa6c2b6ae380362fb4297139c554b6cdd8e6c69f53243bb291e26733c3319a61022041700ad95810b2d1615d778d14470bb0a6fc47d71a0ad6846ae6dcdad488b164a846a606e9a7edc6a83cc96ce021ab4d6ba31cd2661a2ad21091268cb6642c4c53fbdf05045b9a3a8d529a1bd665498c667b5e9da5e216589afb087a8fd0bc80a604341a0dd2f5366d456825c98194119a171a21ff6d9422b76ace6f495d56a9a90a731b458ab564d50a7fd55965562df90f64a1d89f2296dcfa9e0040b3cca4a1383d43e6963cc3c399187e4bba2c49a3bdce08f9ffd2af1263fd5ab509cde8fea0a0d08c90dfdc855550f1bf8835fa0fe561152e5812eb908a339e43cd12e31b7a66549b38b5c15a592335d1be4576d4a6e9ea628a3587e18681495340fd3d921cad4e0355ff2ffe540f8d780571d3dffa21850c4c94e4251ee6626a28d4fcd73cf39e19a73d0d4596d8b9778acdb387c37fa0874f1ce19346c340186f02bc3ccde3f1420ca4d743c0cbe3956836424d9e4ef54d93782af4a0d0e3c111709c00fe6836c99c8db6dc581369fc5a896d824c1315d8b82b8bca5105f1ae090f7e4d143601008cbb3a24a3e6ff90bd697cde7cf3e1f3bf45a6c93551897fb9d5a3c779dea3f3bc474c7861c2475f8002e7798f466d4b7d4569fefdb0ce56eca87dfb5a244872d6599409b53ddedd3a4c620e5962d70c68a2522459e3f1bfc7026290248db6316de3e08d46db589f7bd3683d5ebab1a66d4cdb58f7b0a6698de381ffbd87639e3cdd3a78faee79ffd68e968ebf95e36fe16845108a99e9747cad6238a2241a9bbc5ec19ba6f7882946a031a209dd0dbde92ca7f80a175396537cc56936d34ead1b39c55780f789e743793e18f03e9518789f7e9ae9ea665a63272ae07d4aef52f9afccfcb24e966139c557728aaf28e5145fe9d27ae1ad06844210195232340a8d432f34eb0f68b84cb10e828456eb011a10483f903912fe90e53a1d7dbc7ce312fc617004caffe0d9b2d113254c9550ef6ecd33779815421d9e3cd421e8a10e173cd461c87f1d0318f2d00b140fbd8c79e86588e07fa99fc9ce5476fe5959b0b05899b9c28a0dbc71d386cd1a353e5869560b405375c60cab8ad5175494614db1ba410352449101289ec0809c9fe504ab0916199c63318107f7829b7501d6121b6029f1b392e085101843a7e34d71d0cd0cbaa59a6581a90ca69a4c31995a32a5648a8504057ed604c6fc2c3147fcefd9e9eda5be33f6b38c288288ff270a15c44dac215812309734318994944cab3b4204c102e2071f4a1acfa7f179ff95162c8461f5c0e2a1f5b37648b3e6f2aef635c58268110bcc19e8d5cd709a9fd06cee74eb8b9d76112fa3b8e465f467e19e6e66e99b726a33879d74373c4b5a99f959113051a99f0581ff3deff9f2bfe738843554ad98d42005e8a7861b673560f5423d4b07560e34d7c307183d6083df0e21830d75ac160bb0e0e0e5ac1a683040ea2b77362620dcd55c76372bb0280e3ec8ba0f8a36d087a9e02b1964602a51b9624eed3e885232e3129bb2a4c3e9eed32e690ae8e46ddd18348ea4539414eec78e4158139c125b51d9240949374be2a01793aa22a5bb995752a928134b11f560553450226b32db62656ae8c6ebc06ab30913a257d1922c6863d258e3dc8ddd3409654ab3520e3577a6721ea150bafc61932ac55450180371893269341fdd3449db6edb666686216680e196d4ac2730c6d19ed430ad56fb5938c880c5df46865286a0c720e631d862d8a044cd9d4ec7a812e76e4ca7f8a6494b943cb000273760b8853094f9afa540d9f612595cb617869f2e31de6d4a1725e08bb932220159fef7f0d6e97f295280826536c237335311220ae2a6f36adf4c09dba0a0d95cd2a66e46a48424716a5dd7a4a2af498524692c2fac1b0c30a5252c40189d8e25de629fb8fec02c74418c320d5d182d01dc740181c9430208496f2da069018a169668414c0b60a258978f13c26cb961aafbb36ca801356f9ac482132c5480852258e8e13f9a61210baecf58d0f13f5c410d1155de4aa85a35ac30f513ad30b482d04f4455aba980c66f498d73b7d7bb584792a40a4254e891c29d14aeb024d07977feb1f6c496680010a09046880212f6a2104388c2b6568ab537c5ff851ea2b06463f284019c80c27f3109b0a18ed582a5470a8a759b56a297867bc14da3d928a18c09133061871b5e2eebb2b4161a260499708109434ce0018109ffad0596e60b639c7559ebb2369c8425b84a68e2b7a40e4b58919087843a2e1792f72cf99f3e2461c84fc247202182296e10c9808f004e05045b58b1724ef0f97f08d42851fb71f0f0a7c1c35f92873f220f7fe1c35f040f7f3d0fa9ee3ca4d2e22155061e5221f1904a02ad1ea79ed8ff9e559a9574daac9256c999463c9f59e2a714e74ca3599a2acd4280f31fb36a340f7e96962c3f0bcb4d9b2044f11c6a2acd9c5cc9c04a93292655965051224534f5b36643533f4b96e2a59d4fd9bf5a1324e432c2831338d04f4f1a61d002ebfc960466601c6b596771d99ab8d387cbdbea5bab59d4dc40ec83429994a2a860db35eaa1fd12f0ebf21fcd668993c68de29c921d3fa8d9d4ace96b6bb644759b77aba0b59a4dcd3471b614391468cff09768defb259a6d942826fcdf0fa1c47c38dd6efd51a2d0302d973e1aade7a3098d44a3d0eb15a61aa4e12deee59bb6a879c354b4ddc53fd90d533131056f80b0b7753ae650f3c87f0ffe83f030c7c1bcdc4d753d9d7b28130e650ad26ab77b1bd129216a840a61abe31dfd306c869a444a4ad46753dc235252b3dad41908e8079793d82535abcdbbef796f28eee5247f111b4208b6c4368a141b420816e827a7980b4d9b23c629ee2d1b26120fcd173ee2706ad3cbf3d96cf0fc8a4b6842f97fed6a8b7923d455a1793ed44689a283c192ba2a25577524a5dc0c6369dad06c2285b9a92c6b12e2de84b81bfe51e35e388ab9649c2ae54ca431e7a8df8da2d1d06ceaf45d2a83c05cde30feb6d5a60ba806f453fb091ad9d1c88a52529291de58afbed09682388c6921adf56f5be22898963763a8058298132632d9b8bb3c3b062bd8979766a54c376df248b2640a0a4aa14c0a57c414a638b93880f2e2b26800467e14ee6fbe12a716352de9449234da096fbafcc74d69515369da683f8cc64c4823a808156deb8bcf5b902fbf7029156abe7029955214159dbe4b4a5154661bcb4a404252c24f0913d4a458970f0abe99a76c9b46357b5be21573f1f670f13ee0e245e1e2f55dbcf7e2eda0486c52bbd884828b4cacf81fe44f3008a201130c5c6452c245264a17991cb9b8448d8b4bd45c5c22e6e2122f179770b9b8a4e8e29222ff6917472033020cb7e408a5254770899086084f9ce7bd89f0822545981241c86fc92e5596d4f8b4dd2e3374292dd9c565493c2120f15b520cc1855b3284a9df92b4102c0870827807420820d4ff5cc27081f207abc42009c17ae0171128f45342fca1704b6a8d4fda2ff61b724b5205f153399dcac792a28f08d157fb459f8e5b52dc4ffca7ed9acea389b0a47612d335ffc5b427a63f4ddcf2c2b74cdd92bd383d30b7e4d6f9ecf52cd96bf9f20db9fc75228a474489b825d1a5a33a2cc97be29684813765499e11dc29463cf72d796e20eea410772eec629614773ebf25f1c50f6ef869e2074b2e9a52983358d2cc229ad692ba38bf25451d113aa06e8925733922fea08bb9106e491ad26fc99c8edf926b2ca9715f2ca971a72571ff2f62292c896b5ac43f96c472b12453ba504efd96bce1116d60441b03441b0c107021da962e99631e69a6b8bc463ac54f1a971986620e706b08146ae71cb53107692e711a4bf399384b8ce1c44ae380b02818238877b4222d09fc2d216e405065bba6b480f8426b5149c28330634f1aa59e4b85074efe337151cb5966d406d1eb2b6f3eb569b3d8f6b77ef85b3e308959e0e0d36633d10751922c31fa83c265eef6b7c2fcad1e94b0c051a14d1c1f7f968bf82cd1ab434d1be5eff1e1235ec9d3e2214d93fed60e3ba8bf0546bc82245e19c52b3e3fab4d945604fef78c91e23d55f450215aa1609766dc58e6b925350f9f388a29323d1eded6e512a76c9882610a053493b6d28a53d6d27e19b55a32153d51482c7ad4b5dacf6502d99fab776dbcd52c126b2da9333e62ee8486ecbe96d41bbda8c9cb424243d6158c026293dc19bf6c4de334df464da37550e696cca11da8f0630bbc4fe36cbc99385cee5135e134fb7eecc6410b9404ca8e1adbfcc3e7a983db444d1cee36d971e3740fe3ddd35957c0863cc1f9a3e434cfe6d0a7d2828b4f423f9de0f478a94e7412427422e135d169ca7590a6208282c426159a7e62d313576d499c722b5262828dbd51a73968b317e8e967a9c4a551cdbeec88d13493b5f262ddcb5503027afa59b22e23eb2a2fd6fdd42cc94b33ceee50f33ceae0c96aab94e61f75b75bd3b59ec536207ccb395ba6f908964d24249dd0101549125191a4d9bb2ff1e889a320b4efe885a8a7a7f3e2a898132a92148f888e2cb0419bb52536f2c008e6b26064549a7a9747db8945b31c34c8fde20633f440f09f210a208d94c7f3411440ed02301240d1b56049793c5a4f1ff124284aa1e1afd97b8428c50639208a90b7f0bf2747929a77034241038a18d765bf82a22349ecdb62a23e929c25655cec09292dcb1c9a81970c64103360e12f6249de0d889750514285888a9841153103a70c889a54a0890f1f77b77c1addb1c44fd0ebd2d7daee59b453d3662d6ab32650f0f6984623246bb1be38eae909e8c7463d3d453d3dd951f3f04eb32549910848241a4204c16f75fa5aab73cfdaca94c7e35d1a50481c3a531e4f140a33e45e1472b27d3c9b0644a3d0cb56beb0996ed18716177d4071d14712177d0871d147042efa9881020a7a82f86f030d96343458a2c1b297f7dfe212a4e06788a30e3fabcd298e50331ede26e662ea551aa86984d37c64549ab42af9966f39aa44f1d6b88a4e5f1d6d9766a560d088c6bb0173eba8d5d402feeebe651037b5a8fef7fc2b2d7cffce44f3d3bf22234902c424db92e489b72cc94dd2f403fd945863acf4afc248d3bbe92ccf5651a03e5c69b6b64eb7b47aad1c410ff1080d18882362b006977f0bd5599e4adc84d6bad4dab674112fc8c2e3596089aa5f8d6884069d8e422fdbeef632c233d2811125234d461dc43b97b62546330c589aa86801d285d2e9a84992464bb1aee0863f28a83584774bc88e98f778a94e2c62c52241fe1f21c923258a7b5050bbdc3b318aa2b897b5c637da68f36f8f526a36c5e8bee9ad6249acd16bde273bbed08ce6ee889a49d6154b028a5917d34fcdd6986a9687770d476a0b64fbb1a3464d0b747fec884726acc34128d368633fda24c9dab565ac665fa65411f6a5dbe65d039ab22eda4fed579baad56a4034eb9afaa9e112dddac499e8edf12a0c62cd525d5aac3a442071b40884ccfff17511c8002c4992a4086409c8cf47f10718f107cf46b141bca3f5f2a6b9f26ca7efacc4d947181f538ca24ca28f5e2f6f8cf3f65dda99d3a38b3e3e883e56449fa918be4809baf5d2d735a95eaf572e9f36938b99daee467f57a7c7dfef87b1566aa2c192269624b5d45e961c8798586d6a93aabcc17d5e9c66dc52cdde530ad19226434341502c8977684672148b42123c4d5d304d7bf70986c516d911e7aef6d96c83783762aaab0be21dcf2c71462d93ce289a619aa76d69de18c64a6836451c7966a3ee99fb767b3cf3ecf16ead966576acf5cc9df5a9d3be5aad669f0025b14fce8bc426b118e3683f368aed999bb6f1f904a867ee9fdb796fb428f60c0a325d5bfbd25aad66c7a0cdba807ae6b6197d05cfd746738aabd9cd64319a7be6b6575f6bf3aed56a36352be899db5255503b6f0d678bec570b101fc802df164fc803c08b0fc47ef101213f4673c9e33463f55d4f9d0f4c1b28ccb0b051bb25a3a0a2a2926c91224520a03b2187135b693ca77927e016125f356995620bc8f3699b4f2785b989ac39bcd4b407b089ac20fe07d31d03cb8bc8caf22691e5fa8744d6ff0c3b725b47b51598fb681757e74f0fc4d5901f789f685ac49e37a79245ecf9c2d2008bd853feb1151268c41e7b4b4611f4d968a97822feeba83157c4d4aece969529f14674ad2a38acf1c451339df550c11847c318d781381d60d301301f8396c418677d4676b4649a7937204d8d356a48e13afa5b54d4f852e2358e6849a911fb1fc68a88591a70fe27b149e3e83fef36252b99367ed225ce394aa64fd9292bd238cae7db400c3b2a7d32de6d2ae36e9ac4a4751037e1b367a6338dcd33bd491ae354499f99298a8327de6d2a8a4889549e95172f619dcfa3a32dc3b8ab51291dc44d3a889bb4e9a4143bd2b012e750eca46fa646cd5da435f03edd348967def3089752c139f446953a889bb06974d3249dbe4bd8d4c0fb04a54b242cd3dd72ef2e694c75b1130e0aa683b8490771d313c64a1b8861fa49637303314c6b8ce27d9d7e19b68118b67d4555749a95529ce2d84cdf3429c5c114fb3a88c9c4a88911fb4fa38950070d194c6a0a6daae829a396f6b764b13ab70e521da17fb4b4a0309ef8210c222a4dbf0e7420a0bbedcbcb9123e4228a875c24f1908b221e7211460b211e6ab1c3432d6ee8c965a7b8a8f4b328b54d0a151a19000004000000e31000303824148c0583c1785032a94f6b001480015a9464a65c401949b33487514819630c210800004200004080a4380072fcb0f78a1f2d5d316b26fe51814ebc24998955a4efec89c6dff4a2166a89d6b6fa7ca832a2b61b803e53ece6ece797c798a07387c3f07db6520020505113f1f487ff35f1219083da1e611c5e8bb911564019bf539f1c355090df4e99b5a414b564a52a9a2c70007c8ff6aa32b8dc0162e5725d8b03b2581946d085af90192dbf5df7845210b7956af83c3301f6f462646bee8fcd57168f1fc196d4b7b089380db82487f2778712cdff54e364602f189bd9dd834fa7f4ba0750abd5bbdd586a8c7e98957bcb9429563a01df80e115870ab184c418722dc0cce4db15729b400d3da43b78932921ec47403aacb2472e0bae66f67f3e9b7c3859b65384db0f97ff6e36ec5007739f72acff0941693a7d450cf2a7cca0732c787c2acc7793996588cf2c94f0f9a0199e761ece51ae80de1fe3bf423759c78a043973c49799682f801e672f16a646a1871ecc9ae0557a1c83d783f5e67524aad3736e6eaa03c323eb3ab74f6364de37440cf56b3a2b80a712f95b3ff7dffe39691ef6111a8810d95d18305e0f9debe4abed1119927ebcf81c4c2ecef8a7865ed813725d97da8c93c8ca4b13715390fc201a34d354d45c6b7efc5de92ee6bc8debc13d419adb29e91f441baaac4496460ff7004a34d50d0d05428a37bb55bd445f951833257a526aa9f31a97dd98ceb94c47d70c72234d63fd7d47fa5224b4a2fd1f0aa220dcd284b6fdcf37f8fe18b4c6fdbf09a2bfc2b2fd4e4e54b83fa0f0a01965fe7c60c1c82957010ef4fcd1facc987837679399a0d24b3b03fae143a44da43c6b7ed9aea0c42b9e9240667938b2bf183c1632a9db692df2c7ec28f9636b8f1cbdbcefc4a3bfb1630b9f3333f47bc333214304799844be06d1e8f665c8fa7456be0aa1ab9eafa94f0589036483255a2e393ec2cbb524f87bbddf4f2dd7259c1f7ee85f4c1557ccae7e84763111225c6892fcda4f722d19fa51e70cc5bc358203b5271f32be10cb39243fb155af13407dd13770f13734263385f4dcd40737276265d3595e82aa75ce4375e59c9d9fc8263edd1f62c041c1d2662a34a5b4f5a365d8fa6dfb8c8ae94ccf831e3b2679cbf31d1e9680f4695ed350beab7ac6c8a9aedf77626316367a2900dd3fde928209e43ebb514209433b57be0f341b82f774549d2a365e3807110c8c6639df6fd944c7c16313cfb70b1ed6febedee2d64cfc2b54e4d7b61fabb241a65b43fc71aa7cc36cdab74b88136f67fc03da14cabed554b459ede7d9e4570e5eb4d164ffa120621f9ae7b7ff59136a7311bb209002d1df0d46cf11cb35a7b2e57c7268407f066fe4cd726843f71adb49bfc174d4c6e4dd900ba9abd61cea77f750ffbf8f2da9b9e02174a26a83eb78ed334de2fce7720344c36bb3ea7b464fbcd806a59de5aa719f57f32ed3eca3cda6ffe3fb7081ba49eaaf17678efada1aa4f84bcf157e049d424a3e963f0151b097eea55a068828134cd267c19967c30bd38aadef3e7a74abcb1336a6bfdfdf55f3c6046b0e97abe73bd0f98dc073aee83164beabdeffbab64387db8ce52efce5f81fecae465cbc8ba0ecc09cff177c3e56033af3956453e3dc6699336b5952a302c8f6df230ce339b6f7b5921b481966d9e7fac5eb261b5bd17e32138bb615c1cfa1af66eed1a0d6fee0974c86f79279f3da0561cea13e85e6027f10f9329f3e71e3fddc5dc8122b0a274ef8a07c96fa0e4e457ccbe26d3e417e53b925c314b4b30c448853222a65291b1caf3817f98c8876df811f9de63996013e059c00a1fccc98c04e16c1feadab78a2e5e8a16841af39c2f5528404031059ca3e134577c32737aafc37e66305ee64137c40011ba516615a0c04ebfa3d3adc421daa71ab8b954e284951c1eac398111fea6fb22cd802c4c4a85da27851d3bf43fc1c71ed6ebb662dc8997384ccae618fada9db40bd5d81dee5a21575a392b1196aa3f2ac083b56e47a7452fba8d6af3b62b185e1d44fb95dc4073622f660cd5bdf0ce923509fbdbdf7012bb7517b590fc3efb69e59355c1736818f394ab6f2928fca9d2e3695645f702257c06206c28ce26d580151898a38560d47b438dc9fd04c93f082e0ad91942171cb23e31a40ce9923bf3f2332e60a03f2dd52b1753283eb181ff766575d2c11fe0a3840c21b7ee1bbe944c5ac23ae011618cb6102f0f1b399d33bde520f67c637951e2f050cea2a3c1f5002b1fd90c3fb4de3945e0ecc0583d22eb856078ac5db0a71ba804a173f2478edd4055506189792e3194f462f973d55655f80e2400de7b42b1aa1fdeb01577f01323ec8140b81df29766f374193dacb0bcc02df501087a297dafeedeb7672be9e0e1cda909a17256f844bc7677e4108a5910f8c29418470cef64694dcb5b9f1e25299802deffb0e747bc75d9fa0888d61e1a291931f7ae0ba1b572f97900c0a98c36114978175a5daf84ec9c9553a0eabb6cfdc6b35b756f6bd8667d04feed859616802d90107d6377c6aff1867e6f9ff713faf49b85414cb0c1d09faa3f4fbfca664fa30fee65995b1acb681bfc1140dda4e6c083cf8cf6aa3e4d548144f4049c9875b78fe605d51a57c82b193810107bd97d4dcb15b3f540440e3940e805705b2f61a70388e656c71dd6d8ef2540f7b18117e2d258be8aac58c7c521b661077f19dc7433fa07948d091e7447ad1ac461f54d68b53e0be7034130c1f2de87ec9c8335ce2f272809a4340fd8fc5acc71c109a68e859e7153e442c317823687964bb3ba7412aa6a51605e8da5f555cf912a72958db817c9e32364d7ac86decbfe9a1e609cd01605c5b7b272edf4be282aa24b80cb5811c6001f5015d4b393ac35181db2db1396cd297df0c103aa5893a08f6a3c88f331527b92f03fdac51128e44e40a44238835c050cc9b3a4081526f98000f60ec705231c2e203d39cae5734b0ff8552dfff8cdd4184f3b553393849c3a038fd27c88deef37ad62a5558bd59d68f53561c40436d5891a11893904210e6fc403aa7b819f4657971585b74b848db119d42052f8504c3fe83b8185c7523966dac03fa5e4cf8ab67d029f090e87714b24e8a98e316844e3517caeac79bdbf31db642baa978663853da65aa72ba4291cf556dece8e1c15f650d36b1a065567d580dbdab5696e43ca055d190448ec9a312d4160b81838c5bdf8cc3a407e5b72709788b8c7eee5ab9720d01b4ce531e10617e6c8c44168457b61a183e0f7610d4ec899bb1325238d17365c05e081b372f98d22365bde89543cdcc53cb28103352b1cdff25c9391f070e833edec77ef44b052a44e57f31331d0fecfd16f8ed3ab9c7a41316ca031aca8b2fc26e9c99349c7a7a63fa13017de15c327a4e2ecdd0058f0d76cf89ae8df8fa7cf5e900256caca96fa5dee5b443f2e192ad08ced713e1c8351e7cc0ee24931808d7262108534d3f861188274195095399d6ed2912b6185e1167d61769201a43019d6d800c92438e8f09d5dfaf598543d791589b45572d7f4ce31207c3193159ff071ae198f2fdd037c813f3cc607e640baf2d735617922b9a193c28e1e1744704f9286195cf4c5cdf19f3122dfab6b1c10d802a72aefe84fb55811453f7ea496821b4033fcd0f62ecd873e4dc6ee12aed88ac1cbfa46a9bf56e1e84b34a105765a62a6c9c8a2a94c92f25d2df010ad07fe4f13bcc2747e9bf8e1dfa9a183d36788d511c335edc76c34fa8c098e66d886977e779ada1fef9f072d5be3f32bb64e77fec398da5453bd6f5571f5d1950703a625742086f33a933cbcf3d7eff37de71d06ae3c5fb9e8c73de8f6ff46b8ce884ee34e601aed7b7b83c731e63186a66dc69ed5fe07d74ed662c4f624a7161418f7e3d21fc1ebaa8bf49eae1551659df7bcecdc1f163d34922fe4b0a5e999d20a0a48235c4adcca88c61a933171ae0ff3903da6cb1ffb1a0d5655ca2c5e616c8083ac0737778c4aaebb6fc4e9765e03b7333473d6082bd22c74682806cb0de62973a093ddf9ce1d186fd2b3d08222e1fc7958971b9be751ed96f45084d3206ad3acd63a0fbfc0a4abf225a2c4de84472577148f8b266699893ac8f113bbaa5b33303476112d28b49fb7c8b7facc2c0f6f4ae70067d0b61a4c5569ef393a1129bd99c9fd0066caaa5b5db196d69b29d60c70929f18308440ae49f81c9021de155d78fdbef07aa09b1ebf83bdb91ba331253b3859986c16136fb31d5e8bef51e7809c65673917c1942b12dbcb7690cc67753b58c9b7db788a1e785d433ec408398accf72d05232bb70e1e12acd81e127bdc9bb9dcaeb746955e4236677e51a5a09b5a7cc1db01f2cf4e6639b765da3bcfada63430a6f9ab1ec3e9e591cc725473a22ca40f42b1178427c41f857e4bb09dee009a88637bc23f6822787064bc309e1068f2f0a2800ad17992046b7e6b8fed7ac1ec75e0ec3d379da2051a00dcf90d8c054ab128ff7f8f47e17c0fb60c43597dfed3b2db45f3d00525a9d07c1b946148e5b485b6435993cf981c97442ed9ff6be211ac02c7acd7b3fff943ab1602321e16d3745e380b107097228553cb9d78700dea17eb306b1285f8948ad529ad0bb5290c733b0306b117f6f21b840ff4bf6027acd06195cf6dc50564230d15015741fb90d7aec723479a8cf05825c0486b5cff6b5846009d1be15ac338e0883009ee52a7f06c1276dcf7d6bcf2fbbfda85f10fb005d4361dbe133f5e6331a919559230685a9091f08530f0e7a8dd7c33d1daf17d0f21acd1c71d70719871664edb7b6fe002a9c893e8f6deb699e22d0d7db5968b16b9f26c21b534fbe5a8f14acdf6f169071fb02ca1ca71f924be6ce8abe6f9f2d3d10435e90ded765e087a6ae9680da48bdfa805cbbf7e55b0adbe6b47182746ca359cec0508f3cfb8d971cbb92fd7f93fcffebba8af010d1f8c788248ba7a200652d91ac39c40e1ec3362cb58cd96ac1852e25779447957d7e8d2b320d58f6998e810eb1d97416b19ceca829ea2bd074592e71b4ddd3ef10983454e0b1021025d07a81a561135dce6d58b9bc29b46683b8cceefb8ea2e504f01a0edcc2bf96364035e650fba7b958cd8ac468d673fd371325ee08b1373ad843e93ea21684b495b632b11317d58f3bcd90b5f4728817cbcce3b06583d8a42a87aba3c067c63b51f38928f1a73c9d048d5b3cc2e2c5f6d559a27ecb99d1adc276e36800cd153e6c6c360816c44d416e881347145e6f4c76ec0db36f7fef6b3eb1833b1cd6fbd3fe8c2193efb37843a6d5f0cd2424f1f56d0bf05bea73e8c050e2290ff88a05ee0b3fcaec9559c1f84a2e987b934c857f1ea2990f9f9239d2bdcadc1c4b0fc12bbbb28508c088d5b1213429529096902983cb711eab696a53c4e28f61ba226b1559a2bc3c2970c9f22094212f06fb69e4a1ce36083181ff842c8925ff50426c3a9042e14d4ccc2e5210fdcebd49ba51946257793b94aee07dccf3f74dd7ff58177be8ce798e992886f4a676a5f8882f26d1e158f5137509c1733c20d8fd0cd45418996a2491a4fa769e54019d1c4404f217d3bfe586a87a2460d363e579fc7ec769563784b79133ee70befa53aac38e7d75bc7b15cf0ed0bb2e56be5aa3c9e94a57dcaab619e8d42ab56099d2bf4ce0009fcb4479259d26719cb904df9cff7de9e4b1883dd2e2918ecfbfb492caee5131772c1a66a00c2fd99ce8af751bc0bb362531435d7869ca7f198af72912e58a8baebeec3c83bc559aa2f5ddfce3ef4d9a10c0813dc76b420756752a7b7052b5e50456eee3cf6c6cd8fa25f4f10fb8dcb9f7e0a5473421dec6ae2f54776a6fc743342c2f24b33d9ed0c894c3f241a62b7eec086861f90778190c616290b4c164d457669c8fef7aa607839f876b2c8a589c077bbf2d9a89ce378e4b3c03e8b9a921fc7361e5f2152e93437feafc89f17b1fac75cec74ceff726f27e638600dcecc9a96f34dc5220490ab486ad58e3d09a412cc256e5b14def506c26ee2592fe862422c204afca739609c3adaff92ddc7ae708c45815b198507535490943f193c0e3bbcfe8d7273083c6d2dfc1fa06e3abb1f7055fa25a49da7df21953b44ba0e3c5a27184bcef270c87fe0ace51856975a9cb274b995fd267d0a7eeacd1ce4dfb41ca7503c78bedf0538186220ce16513e5e177c3c0c25da6f8c00308e9561b68b41f870f1ba2bd32083648aa0d54326c68a6d9b8ec157a78527114a723d2c2a10746ffb0d352f1f105e36576d48a4fb8cc76aa738c6cd17d29ec9346d12350f05c8dc2bb06d28989d5fd2175cbbcec0e9830c16422564045c6890a33587c7d940671fbcd5fc25e1fd2c05ecb254666c6917f2f938646cb9b9670ef3faa316fa4ce607d41c88af70e4f5f56b52a813f7646f6c407a7c88d18046d032c99935392056d46aec05b5bfef121168feb0411735c2edcfe5b3ce263adf2c98f94db4250b362984152ae501f5df57fef57c3f0f94aa76afc9682ead05cd6154968fdc40c00f2c24bf27873875e2b3f722012652ea2f35a9fe8852371865c1676efb6797ccf241f481eacda0d8464eebed40643cb4c1789e7343f5b353f9e0d576f800706f50b849a13c05d03b70f880809e7bae6240f775a8b1a662fa58a9ffbd4ffc0b4daaa760eeeff137b36bec64b2408f38f0813b80156d560db5b4bc246c489406d765fe8611541e8dc94e3f50479571868cc24261a2c9b22812ee55c6c142177eb3626f770cd626e7b2124a141a7016d61d9886ecb87c02535ce667c46421bec2cc1633d6695c2281b3694976c18def3dd328cedbe8fdef163cef1bf5090167e349b891fd8703b40d7f70549cc1748d2b4c189722a0147209d31310b0a0f84d2ca240502d4bef6f4bd51b704f96fce8263863ad3c90418f7674796e33e7919aaf2dd82800d2e8862d70cfb3ac09e75047ef413f787774d5b0d08348c15d70e0c4175024d21e18938d10b51572ee5b5e9c37cc74d51657d97b96031d98c5b4a65bfc6910c768e506f359c3c2bcd9af0164c156b1454adce433bc31bd3f0a712144d4eedad2eac90e527578237a5cab0c33820fd276de36809262aa71db4609a3056fc7e06682986cdc695bcd9507b4a03f6ce470321ab323a23a4375f65b609f2737888c0c5484499d8b4206f2133b27bc78eb2a4ee505bcf1f11bcae507eb64f55f9700f2c3e9bf196443eb3ab6f3352e42b4f02f1967a5e24174b6f991cad3feb9f26c33278921e5fda7a5bc7e8075435f670123d8434ce0fdb0d79bcaa6c752fb3d7c27d7015ee195f1bd192eae740211b02d2fab7c4d403855e2961d30c8262ed12de0899d37d3f65d5e3e16487888cd836f7c94b79f602e703e46bad2837b0dfe2040539a9805c309fd249db0ab0ede04e0a459f0c3463aca8291d5751621d517e38152105cdbedbd2612a0c3d1c17b9662deef3cd68b8ec02a91cdbe04b11d878a40e7a70d014d7c78604d0e2c954fae3f85e5eb43acdaefb2c90a001e3c4dca8edea2dab5fd7d847e8ec7b9cd8eb48190f63b08376b2fdd176d38adc64cd643cc9672b2d877cc37c3c6cbf0539992b877460765d488240e1dd4ac54e46cd1868773421ec61d12e295383498928198699eced8e1374c2a6117ba0960ff4068ed817ecfab2b6623216b9e4412e3efc02fc87f28e220b59e406afcd30d8e7f105dca1aa79b8a0dab3f2869d0f5e669f37c6852b704ce9a57349a5e66dbf53c594b507ce01b40b561e1c61f4d82800c78b80aa19d90cf9675eb462859e5d4070536d3b956e6e851227b754dcb022675266ebd5ebc997a94720826e50cfcd40f6b00b759c31215d708b583709287e314bda4d4fcaee16832cc417967df7c843fa9dea692e0c3cc38150d4f18ddfc40fad72dbc765339e39c1ceb40d1c1bb1a1dc154aeaa80c852a655cf7c1e93b52ddaf02ef2f1021cd15e23b3a61940016fce6e5fb7254be18e90faeee34d80bd0aba3493ba007d848b4cb45bcbc4b9961e0c3e513a9a9bd551de0533c77f504f0282c4ffed27a3e5ef5d934dd7d5092124c1815e0c00e3e5ed0f349a9e40700a0f7dd3eac078f0a796b20b9a6acddbea638f730f412b01a3bfe350a389571c21181b932a67ce3b6600de3b9de80f98a68cc61901c12bd5d3997721e474561403da6605ad8942fc64d71174e84b26a54ad135db7be9857d2d7cb636aa1fa8657aa40c1f41d458416c0e71a071ef4634b39e735a3540373fff3f33a69b68875d48bfbc8cc022d641bf3baca403b76d0a02c6ee3cfe32f5c43c21fa8244cc10b356ed1c7f56e06b48055472e82c6961c697dd93c7c281a0f328479f1bb046fc6fd32b6b5635d05c717d344c501291e9759a330891fb7ae7d82238d5a30800cf39b81b4266336f0b2df69544cf30ba0f6b141f5908e295562fc72ae7142c6692fe9e76472188effe6463f0b3b6d50ab929028a30be05bd71ab170703b807b12c1ca4bc5341819609752b2ac19fe6db725ad125f47d9f58ba60bde80b0079d25cbbf5005ca40210b377b3278ba02067f9697327a25486c758cbf5b4f2d24f181fcc517d4d07bd127c280a139900b1619c50a5c91a68c4f5575a02187c7840a6231b25a78ae7d3b16f20f15785ae603a5b9ee36356532339c5f86616b17fc7c9cded741dafc4891259627cb8035584ae86b3c9dc0857003559c7b744a057b522a02f1b4e09726d02eb7499a0f82cb2cec75053fbba53ffe723fad42c776a98d52ca4540566c30cd91df2b9d28833fa5171816f35cea648f9071ee4410c24d64cf5c472743bacf15348c4a37bd2c56d0329124c963025857959ef22247b9222a9978a3384718323f470308d8100d0294279b87daf5829a431fabe3b2e6b20afafc1a8f54021cbdfed03d83fdc51fe782ec12c503fd670a4574a0a7200a4cb6f86fd337d59214ad75a6ee1cdac11e7d4d77e6c22d2b98f681acde644fa2b09454481113d42faa8d8acb609cb34e4e35da60121a918024f5c1765d52a9ed5904cb5382fd32527038888119c1809f5b0edb14dae96856180ac300880d8fe6fe91aa654e3852de50ce4562218d31a6f4941e23e87b8e9d695c043cb1e601702c969e8f1c6c3001c184c58099ff6f95b13bfdc5787ec68e290a27f318bbbe4f688f177a923f7fdca9e12c8a2fff394455d4659be444709f1d495c1e897efb1ca48984819cf6cf896565a69ef1012c99cedfb1de33ff20cd0d77ed71f08f5c2221fde6821fbe9ff176c77b9d33a530d0e235c75abdabd7199bb7228e30a5c408225a1603ee621508e190b76f81b9c258eeec5988fc713ae977e2afe1d71c7698e8a50cfcdd4178087102f0566efc8639b6fb2e9202730c8ec37a583a40bcba0971ca0106d48be2e44e4e9adcf43a7fe4b38ea5ba3d24d122cbdd79691eb1e2fe34cb01c91a796f35cd5c24e05489bf78caaf48dd5168fb0578f74998ef07eaa2b4cea2f20bad394737c3780544cbd35315bd404981d47ca934a9bb39798ade4316897dc9fcff29e57e41cb6efc2cb09c2a00a2302f67ec3d61ea5d7c698e243e78c44098096983fbfec8c8c4e2f55927626ca7f00f9e9ad62c44ed2157305fddd6109c4e5e28ffa8ba593d24b36b52b82d50cfb63bde577dfd1dbb6843ec7ffbd272921d92db29cc39f27541b3eff26378a78e3e40634f23d22b87e9797193a7211fb86612cfdfdbda6d5d100c3ee6d140694f80ce2bf020fb8f70ca4175dfaf615a5030ef7cc0bec37b7e7980275c322c89877c4ce15d39842f7942987df44e14d9bd8c181e04afb278fced81c37fc23f853d6d4c7700e8559b9e0fc82242596cfba656244da6d83308f8935ca3c40397bc58433fafafba484dff3259e8faead03c50269b44793896ac61c7230f0b692de302bcb3ec29edb017d3645c902836b20cba9b7c3f2986c44b6dfd0191e8fe6ab50e89716150396ab4e536e851ed323926cdf63823022d8caf15cbf47e8bcb137de90a2dfcaece38e4bbbd54cb41ba90c89427644d8396fd4fcfe855a8614542e847378d30e6f8a387c0bf03e572a30b185dddf3445ed3d559599a88cc1ad61dc348782f5e3360806d4530dae3d35819cea9f2364cef9d5f929e9482bc5c142a8e40439bb2764c7facf18e08ad1ba8b4f4386680cdac6ef93dd0fa93ad7c5a60c25993572d11e807a1c6ba10797c5e460983b58a9fc4a9994db8104aace177ef48044efcb6d3123640e67e9a71fb2e7887dc71a8e54defcce043e80185dadddd710a2ecfe4a6939e7a1e0a1746e00ec4a2d0725819488920ceffbc3599ba3ff645b1fc2610d36bd8401d4c1fa1870b2008168272b04f62f2feafe8e54c2fe2c9ff36a4400d1e900dac4aaaef59c5a7c6a62be6ec12981a890258e5c0788d535f9765059c53a44c74b7d86a387287dee1ca67d10a4d6313f88bc676322fe6636553210fc2e5d176a6f983fddb5214978d7dd3530601b988e107f71c3012cf6c27bed2018dc7406be78eaf6b3146a7c4e3c8ba21c15b476b01d64203aa680191f74387f78445424b82ba1d3e51a8511b0c686476e5f2d32ea6456bbf101f5c6426172a1449178cdb747b907eccc845fc483688d2d5c183d7a4f9b821b2e858c93658ae5aaeadc4da68a28d8656904dc2ce9438b996cdd1626d332b32ab684914a467b9a83c24b7b431689987719a34b3e5fc8ab49b0e32eacedbbf3b0ae0b4963bec9d0b38bc7a2ca4d5fe9316dc39bcc6692780ef2af4709ae6a216af25594779550bf93e1b73411c317c18639020861cae1625d804a9aa049753213027c3a07243a52219c263c369cba57dcb90fef478b0fc3303cadc821688dcb3056d2d2d05d00a7f41fa20b87a3615ca1cfc182694864762e2a4fc8d3003b85c159cc886135a9c4c13795c4c96a6c26f88a3fc21e45cab58de1078d91ec3aec8aed1c71413a0b64a46cb9711ecd6024ca21b81c68876d0991777afd44bbfc164013c79dd8d20f1823ac3a3730414684969769df3d08cf72d5f0684f3d1c6f7c7a91c6ea1eca7b49b4a064d2f534e63c2bb2a19745377a260e75127a187e0cbf8efe30763bcc64612553165af3be47fdc4af4366992c071fb1a613bada1ebe18329a543cff9b98f44b8ae921b703969de64f26be867603a161f3a6c4c5835dda0a64ab40485de3690529366cba14344c555ac8350025c4d5984885b92bc8fcae454a52528d86331e159dedd0cfc8cbc906af1c38daef78ed762d540b644f60d2ebde6afd8860bf939a417ce60ef16c13b3eef8572eee1db54949e7f3fbce13fa5ff39823e6cc95335f5087f28d75b5b1f0fe792234b4d3d4a774fe3b3df54f1cb83f2baa276c7a58d971f48c6f27f0a7acba03c42c4ebc649708c9f79d1b792012d10c357da489bd3638e3e04400bb2e68f883e1a9a4664cc230d5366e821b521180bbae5a1b1bb8631f2a343bc2f10ebfde239225ce389ecab471779881029dc71c941dc6b41c82f4fc34d677df2e7e15b031b307e42af1cfa70ff993dc1a881cedf9df31cbb80f599d4f98e0dc0fc0c9e346a40ef6f3aeb480ab5afeb37063324f89aeb8cbb23887c66d95d47a03b29ced839e982400dc70b1647d30366dd4006176698d4ddb1b793c9e3e433781ac740d2c8e554760b4343cfe19577f5b4859749997a2ee03bc139a3df1ff1cf587bca687a52e9552baf65b5d173eb96817dc0a1671f392abec693b4b06d2e94453bda892f72afd4b2b812dcb3bd24419f328e6fc1abc7ef13d6fdedd0f07b7bc42face96c21f301494f074ec3b35a344f2701dbe7842326a05ab6ad643d1e9e27f1511a20e733a5800e726b536fea2413058893d0b85a0a5e491067a73ceec5eb8f7938d809efee136d13f8df7a4770ae15dac0889ede44218a66647791d2dbf39fbb49200a4a599cd5a6fe87c5cafcfb88b5d8e776e8a1c563caba082a63455f1a6f9df311ed80db73179b3118df3235f5ddfdab8e9f6d22fbaaab507726aafa1ff76c833e7cf9027fc344f185bb379f98fd117795e5cc5a0b11842c1f8ef20213b02e386c00e20b2a3d4685e9d88fa1ecacfcfcdcfef7c029a91a086db889f8e2e2a4657141912dc4f1511b467e3364f28fc1ed21b5f414ac9e9cde9b4456383fd7f22709b6e5f13627bf3de42ce062d5fed6eb098b591973a11105dc42ea00903f77a841033c3b7cc2abaee1115423b0497a953ed2e43daf00a885e853efa5ba42ed85cdc898968e821519a734d67305613928288a889c0356bf2078007b9fde236ac76069b5375524c60c1c59c468032a4255ece01c6b7ef8cb667b12aac0af71fac23160eccd29c5d6b4e82d3c905a55ff84f08691fa82e30df6dd84ce7da74792f87b551b9605abaf9f653d739e7682e65a094b5141199bf8e4a5e88ad1750787b0a869c268b3e2aba44fed50fa76fd317a4f52c6ded364c5ee3c42a7180ebf12e393bade86b7ff327a02da4d1dddece498d10a20c6bf61eca3e2715d3ce25e5cf8388ffd6e9a82c8490ed32a85134ac3f12bf9107ef7e7f186d04a2d39abfdba244c77e78233ad908c3bec38ddb1cc719d4eaebddb626bef9ceb875f0703fcc3e69e62bc2f0f64da3104d3990e04793f3f1865292803158250e0b90fd87d81c1ced0c1ff57c486739a8107bc8108c442566a4d85c9fd9fc67d33e8f4b6db5a86a525bb6ed4751cfc33822d23ee87bd4c9ff16a613fcbd474091f70a17e6e650c6e30fd367d6e9d1d666838d5768e363a8890658c3e10521e4101d94d4d5e602f0f616432f2147343c36686cd18b87372444f694cd09d653277781c19fbc014327caf8edec91c75d7140d51fa20d3b59f22569bee0441a07d3958f99faff9f273d8302df252e25ee0863903a77c3b2be516018e3e7b5498460fc78d1e10eb4a02453c8ef6a0c4a83a7abf5e78fe7b963970085e2968584fc08f471be97f8f762602783d4fd5963f2c3fac3d047d2ec304c6e732e45e6f6dbef545ff47caca95ea4b8592dae9e9acac4f8d158704d90ce7924570b3fc66eeb521e4049bd96e98b63f10c33721bd6b5dbf5b3e65b99e931ebea77e373cbc8818a7df3cd4015f8ce6ce38b44f4aeb41646edd140ba73c6128fa84945e6bc418a95939740ad23eda60289563c23b5b4a0b581fdb959a604a6c021dfb58dca79eacea710829afb03ab801d01747b26fb77e10cfa31d94f4c7ded65779862310c7a736c35cdca083678fc9e9914472e11b9a2f00e78b6210947bacc93fd9b81f53e87eef16f0b903e1afc483cb900fb8cd852ccbd058a41d8d3d02987c61a28cf2c7b8d3be5c66e6fae393ae464e808123eadb7d1573d32726c4891c3274c00a9c9bf858e08f9576c1c537d44137bae084eabf9030a5a556c9a7d3cdbe0234e7d9eb0dc3759ad8b5ef7064ba91a27e74bb85ccf06e075e93bf67ba9dd8a65116546125a2b4e5801cf365d54e5c00fa5e444858b8ccdf12bdc66b98a5b34fe34fd69081fe620b43b87d7f52a9d48e2cdfdcd4eaa8bbcbdc023a880ef2d2d746cb9f1535e5867e2f3344b9cc799200e7d7a805f135f527adb506baef67ef68f1e2fe9970bbe620d1ced33a6c2766067bbbe21eaebd6b8fd4d6a88ffc694a80116395e6a43fe46da0f10013de93976c946a7fa54472c35e8a74468cb72b992a5abfa6fc07cc0fa3b0e3ec9433d08f7b8864e45c0c0931a8ea8d172b027c548f33b63c7b3067627168e8e2616abb95f245b5e852fe74bdf6bf8ab17d81c222315a4f18a6c1d3070cb33d73430b5b6604f53720e8f1c65ad681bcfaadc522c479896d7cc6456482c4daf60ff8c5d46c5ff9f7b473df666fe24e8d9e0bc04025e7fdeb11b33d736fc3291f035686981f34b73e8811c067a664e4e85f170e55199659d7c697af58d976a0e4141e2fa75aa82b6421fb3b1903ef9d9c4d35b3b37ab26f81f535cdd95a394f9038a200644ce1fdaad08a2b707359d874406b0bc675e7a9f9caa610ef76d78f65f02e607ce4b93da8d963c3c967a0e75ea13f66c751b3dd11b6df68347399acdd1ba77d161ccb88873ce23d457683dd46453e86391f9d8cb7d9fd9d9007592a7db67f8e2b840ebb43e559bdd1abf3fa8b7b7d251878d15909706d06d8e4dd5d4676a363426699789701856ee8b05d150d4d9143eae265e773979721cb002a1e75a51c4d73302ef5d293390c28b94ce5234e80ea1615f18a768a840c440d06b66c954c35380a62b64486d7dd1725b0e0af274597ec56eea707e1164219bf4ef9900a47001cf749be3864ebc6f11917bcfac43404bb6016a074848537a8886127120035d638ad148236dc35785652cac306bd7dbef97b4645c2b4840a9e94c34fc0221eff7e5b86bac3d26442f63d91ec6c93e40a41f6c63e921f772a29c2abe39051e87c533745533fc0e228ae7afc07f74de91f1a83e2ce48188800fcdbad79cb1e89d8d51481af3aa1cc9dc5935b5b1cb2d7abfc642d420ae6a40e1f85c98341720fe2fb653ae605d5f3d3d975dcce4f31db8436b81607bd0303df21923be6fac56d193ebf4b84bd337c0cb7c009438ce5e8cc3d9dbceeed55bceab32d061f77eb177aa00d887c444988e9a5401ef15d6c38848a4cdedeb203f73223f2a1dc154f5a57cf985dae7e5bfcceddbfb98f0e75da3847db29c17d7916acc9f39c68e0b6b827b57ca5d099529dbce08486cf9484d8b6d9592351327baaeff0fd05813a72c0cdfe88d4ef54a1f0293ad7d43fc2c3660604a302ff40e3e495efce7bdbcfdc0c68de97be8b53aad10ac560447ca1455afc820a38e9399fff0d4a50d0750359733f2b6ff84afc73012fba5d4615027c279b84a551ec1275f337ebab82f4860c5363735c18f99d762b03634c2051eb4b7850d81ae90d8094a3b95e9058829795e448c40b58b156f278eb5d6c09d26ab6a4b8b1c745d1603e82412f8f64f5745e69edbb7bc2b1dc7ec5c541d9e34ee10f83559af43143e9446c9099675109cb1aab98bce3a692d22fab121b0179fd2050ecfb89d1493038ee68f101eb3c618884fb63a1427aea3f5e1431fd6816043d3d4c5c8aea2f280a2517665aa3073a5ddaf1a0bb7eca2784620c9ca60fba2519d61d940de21f5983ddda7e0db295055a5a3abd500451a6f770a3cab8471ec859a8174f5d8d31948528f005b06286c24ec3608212ff69844baa4161e35554a24769706e9a26e3547c016f4d7a9b10445a1b4908566891307ee2883c899ca8bd65d2ce27a796ca40f875f036f1a89a1c3b359dfdd21401b1d85016117dbdbfb0d2166f0fe2a40d9517a358a5f14a1f97034ed2864aa388d2cdef861493fd28429d44da35a8a38cb2d89a48719f2b82cef23c420d8b8e022e651b8e57b2de4c9b2e58b8bafe6534402c2e509c104d10f35379e2785c2db3e29fee7467954ff3bdb87326e96b251ee7587367bc1f138a1e146e30ec672f284a9908e0b1b2091b43bc97d5f64564cc0096d2ab9ed8833354185adb2dcd221c59837c499bb430d4bd9c473f0d70dbc53940e5ca8d9401430d12c23345cf3f3e33c7751305c33d3e3274cdce3944bc7674bd551c2927dbeb342e0ac94a9e950eaae13dedf3fe62199900b5878a67679c108871fc20f46189970a0ee24971b13d597769c079cb33148d5cf3d1088c62c66983884f4bdf234246114c7e2ec4b7ce70a69dea9f0c4d6e1a7056d919217434cd8a7f462f320877ce4e0bee90b5c830dd20520d038ff15cbb87590036e8ba925712e9d3e1547683277b57f3f57d19293656ddf474dfcecd556e8fa41ddf10c0c0d78295fbe1ffe7f4da853f4d6f2e9d46ea041afe92d537e2ac19353ac44720cf83cf271cfc4576c50d20bffd84bdd9c2e54104ba8bc1a321ed4b4d7047362e9f090bd1c7fa06fd3d5cd044d20510048e8f842d1cb8901b74d013609b49bccdf87311ec72ac7608647a8464626d85fcbb0847c5d38ab9bb96cf08e57c61faa56c04313e9d6d72a4632587d6d99b67afe7f3b9da5df90e75d364472ddae5f5aca69cdb25e06f498fd804f92164c93c3114e64d9911881084e80724236773fa9b05f540aa57c65f5fbebe08d4a3f7b5fb8e95d581bc5cb5156a56f100a7d61f59ed0aa0b1eb264c07431a7a7077a75717153a46e87186d21ec0d0ee29a143a05932d2c5d8833e62acfa870fc0b1770d82ab858fbc93188d0e7385bb8ca0238e71faec66d3001b86f718d048afaabc097a9ebf833c7c334c7ed4af7af6b4fbcb9d75b05de296d5940d4d77dcfea5a93c0d89c2135d18d52dc68492c9d869cf7ed080c43ff68181052c9fcc2b872edc7dd6ee6e64c3c31f748c831db8fb7c7f3a8602be47eb7543136e3ebb4f3ebcfe64754ec6f7a7886942ada68fe8db3f0e215c0d40bb62e860c990b8420cfb370e2d2743486e24074688053eeb4c8d06b61cc52f1e5e8ed6b747ac6b8ecc9e03ab471f78ca97f210176e7b1a0d4d22323c43497663fc7f27d0ec952a422b5e709b8922410904d17d2384dfc462b3b7e4c7f9ade520dcec1fd95b21dc8e5e792da3e0d8c6ab59d88ec9fb21f12507f43f2cbec229ebdd8f7f58693a107b0e837c1eb2afdf1c6a0a568886b7698ea69644f13f4722ef4d9cdfd6ea916b07fbfef5ce8e366595c16648a530ade1966fcb813ae7c6b306e76d1e4287196f25c8caa18842e18816b724c33dfc5c0e2532f60de4cff857089b0a516590d13e056609d6f4c7031655dbc6603d926ce3bab018aebfc347823612d27be6c4d4a341a23b570cd18e7b16a3351025e3b30ab5ff0832f3cdfa9941f93530a319305194e51fc578f04235cb8d14782c70f72e3973bef1ee31646dbb161936235d7d1054b39c68b675fdba472b90159e0663b7f3efee82d1c099688a098f4de0a70026246f5f512b3a09f465d160c6985c91a4eb0c0e74159bb9f9e44ac747b16f3af0e0487844ffdd42362ec91ffa1692ce2dc62d306624651987bca1033fd6b1ed56ffac1a2607d4380d0a6f8c87cc3e9217fca9b9e717fdf027c44c36f993eef39d8fe0b65aaa39190d4e5d02127acc47a51b803d41a74f8b8e85fa9bc78dc71d2c03acdc72db8b294af228e49ccca66ef7c8f5a20ed5ebfb1501212ca25f90bca568629747c45d54ec8091706b1696b8211f883c4af4305b90c8ce78eab7051f151e9de9fa7983fc5600cf8029932b2b0caad94ed05b30c05d3f253cc63c68b9fedb22c2581e953f805b540e3c0a250b0c63f2a3182348c6e4f51a30ddb34e15edc3c99e9f3386c98fc512e968d86d26c6e32e918752897e32488a46afa19778f1ec74b95235d7e1b617fa14e197df8ac35dac6950ae59d4d8cc8843f0cce4bb4a498be6d4d637b4132535a593cef462384d51131879df822678f0fa48cfb33f49ca1c00baae24ebf6675ceef53d524dcc40bbad77c6d8a6fdf7f8e0a6c7ad7cdc7e2c438e9da2f8399b194d388203893d5207d4a92eb0c940a7ca6b426a6e86536e1ccc3d7e92c28084560dcdb974c7f0752b19c6f49826bbc9fd22c8f057f9cbe7f2812966c0833d09d437a30790f5da538a4a09f56a05dd30c6ec6bf0f576064fc1cb6fda3c591ea639dbf9dcedfde140c0d431d4ba244158da4b8517fddeb25ae19f7bcb95e42d14a83e4e61aae9e6fe4cb2ea0ebb8c16edff03fe33b492e6cb20a734e7682a520a3bea6ddc3ebb84ef57a2f69be9549356da8ae0cec4cf745a6e3b924df4334dcd4eb415304bc3aad2113667a98a6ee07898a1d011dad2228490c6e9e74266ea741287839676b4d1f4460c2b072398aac2fbcfa320ae572b317097239110bc126c4c51f8274adb08892830b800a12fde611bde2b181eac9fd094725cf5e039eb120dcf472faa670ead9da265f3a142235229b45b1fc83ec0c05a41c288a483660005843011c48b372a6749e2a0e812fa551260d10dacd226c98deb37a8ed0253ad48184684f295e90a572bdafbe39735f40419333cc48758305ade9272a0a3bae0fdc8a6122a321118f4458b435577cc91522e056c00e9f0e584529225328e91244eee1f9b50b9bac2297a3483d35c00aaa69983fd59fbad26eee4ebae345dbf5212cce06800219b2c7dd1e2dd84c21633d3dc52d130e0a5d4eb553baea63b66754e809c8b7314d1a59e20390eacdf6d8fe095256d1226edcf49715e8b0daf80f3f63dc17e880abc9f6fb06692877ae18b8d44cb4cd88eed41a6fa1b3b96f0fce96be1bfc45be4850004c04e1d00b25f223c542197c507e6b138ed570e076f0254f72962f2bb4862f42a4d82391d07658c24d926a6bf123ce1a65b32c32521027e86de5fded9bf2425ba632d3abe74a81a9c700cee5eebadb4f609bcf379742703bf70c5bcc3a2ff82db4992706ad4d4ea4c04b93c3d77365d0de243c4deebbf9ac07a059613354e86266687afed195ebc95eeb229a9bbde4a3a73d78e92e831eb5d23bcc29a37fd20d236e200922a8b4d415bafc436dcc7f16856a42de30bdf2d1b8c3ca51390d2633ed12810cfd444d6acf4a369e15a4d948e82f3d711de5c2e331579ea9e7afb54ed59a053e00afc6d9e4c2118c59bdc019c4b966eceb2395fc066d93fb170a4f9c527617d96b6a36b972586ae93c908f8761c0a4bbf361c2eb29a5633a17f7c0166af482dacff6c681ce2187e1c16545ecdb251681c80f1c3d4f2b96de670512cea85252e389bca60da04913db38a547de370bea69a5ee0d05cb88c08627d2d71ffa31262451a0dbd84d1b09a3229698d01039115a3d901fa3f856801d7ab1e5302120ff3f7f7e3ea22c25c6470f55bff825b3d3f6f420ef5cce5d0b94ba9a189f4acfc101f38ee8ccbe92e6472a3ae99f1c3690bbeaa23f06d72a92721e81f8490441a5a2ae4faf203512e19336a599378cdeb4d33cb3fdbddd026275b239e89d17a0318253c0a17bd1a855efc2ed8ad59fedc7189637fcb62f8f616ddb6fd78744807670ee9086127ef81bdaebb4d29ac2e8eef4cee9daf1b3dc9fa03e98286ff4e2873c8aadaab3b51f8f6584946eca1128df340651e9a0dcc18aa429ce6944ce00cf49a4fc9283edb3b476ebac43e4569d35da52102e872a9a3b12ab4f813e331be8355d227bcab9cc172126334c40ad7bdd3fb2e64bac922f5ed52afb12ac7c9e86d02a9d04c6c1496edbba197fb382bf49323ec012761277c99e2a9f637c7ee25802f782ec4fe2cbd1916db931ef652664b0ba1874ca0da8b98dd74a56658209b6691cde462b77925fb90e26c5514853962a1609cf0174cd7dc65da0be49a06c624efff590286121b6338ff19cd45fc52e268b9fb918f2111f95526756c0608cd19ff63f246e37bd5c1a84d5e05fc3bd85a0c94ee61a9ff0a3e6f45d0dc802cf707267b06ed4cb5272d60223589cbc2bd7e89c39b528e980a78e3dfe83598f5d747d2b70fe0281e0340b40771948d8120da0775948e437b599c9e78e6a0b8e07970fef1ed701867b0e9f21d7dd19c74294bee1a8a68ec809a3897b68db856be88812f099f98ebaec5cf80f73b399c8f1620e81983cef2d10af9c5cd44a62065b64845cbe23f88bfad134a4ae1478121a1aa834f7b4e7cc6fd99e51c4075c5e48b7ec34f184328616a1c570d235dc972d0241bf26c497183008fbdea23430a607855b88edc3d52dea70df5c026e03554b02533fe3415393dc28d8c645f984d98ff02c511098620408f87141860f408683dce889b8a6c368577fd99fa8272830a7cff81c9cc8893fb00b017b0ce726cdad3037cbf804e38f0065868d3599c2f748725277c1841199126214a2290cc487d7708b4dc76b3728d7b75391fff680950a863e41f4e0e07700b6a08e3de0e9e0f08ca8d16b83c14db81d10eb65a8d984cfe474c853b3cba8e37ef189e76f86e86ca3cab27bbf25c3891ea7d94925a9f1defbc5a5dd922579f71e41b12910fe8b2dff820c0f69c9c23e178a8401b506589fd0ad2869ecb341b2ec1bc2da01bd1768c3889df5972ed088e51a675bf1f3b395f1dfa5d3bea0ddf4c33432ac6b5ffe63dcd1a19d23eea7332ea56ed22f43a3bf7884acbc58eab8af21ce8e69f65c02a33c0ac483238d51936701986877b810b16b762d365141279f2074363e840c048a498939b25a3a9e155edb8d8025ca04d97534e0541b402bd29d0369e0a3d15683f09d261419e405c0c1f00d15fc0c24a7bb0683c2934932f9da89350dc2a5990ad41f02d956c07edd8a9f047905173636c9dda18fac56658d95b964051668eec24899625098f8943d5901ac67bc0479c4c7f9bdc8a6a06f9c1bd9c8549232569449c79eebe503d2c2c881297c22a8fd06d06030171fd23ab603a92a0ad9cf4ae0e7efe2fee22519d7da1a10c34747efed36748536e5cae54c783e7db6ea1e766889c6b2a6b25505f89e996492e7ecf66446e2ccc46ca8f214b9288882c3dd384e5f739199d6b5526ba5e771bd154059742689fdb8b5faa35188d17bde78eec6b219f10a07115855bb1fd0a1f76240d0aa1a4cf5437ded59f7d1230eb4989b19eb8c1e5a5613db164af212149d8c358add7d91b01293bc598f9a522c0b41c04ef04e951aa1547d2aad19ca0e528e9fbc9bce9216115493d87d5ac169210df0b699490fba99575fad8720ba2d599d16e19aad247498fb1735cfcbca56e1e580f0367a9d1931d1fed734290ec48b4cdb2d6fff67fc924065f7d1c7f8e77421f7d417e38c3e0fc609c32b65a04d4370b81a82ab37b0aa988844c3b6c38ab640db74d085f07b6c0e5d818b7f9ff009827fe87650923912ba3365144e455b529437f9ed7150124ca0eb3603ac7721d9df31dc405dd1a29fa31ce69f21861e99e141b09e162101188a02b1b2c23a4996ce30e556a1ccab326a921e60e61d1eff2dadb488a385ac7e4d9354ee9f30ef737f6d85298e0ff7d74fbc0c1f0f8a611b2e645915a7ec35b7ba7d6fa26f28e899f7d1cde2fe35a631abbd85be5b7635ddbbf73c25fea50456b19ff78c185d0cb8c827626ec1363e9d47252d88fff1779b27c49b525a4aa43b33ab4682ca136fdf4d352f1f38f8e23a31031b96052f6e6802d11f1fc83f62c605eb19d3847cc120cc39d22d41f16a087aa5e6237c3e9b0c86a7b867301ec136f44fd19e7207927993c2e6b27b04590af41182b4d81ea23edca27294e9d0e17f48768af848b6299e167a6646cf320032297b0c3c85da17ba96986afc1939ee1b8a9478a92b50874fa1450db3d7a28bf294a51fc8fbc48abe991958fdf79a2d87a50c332567bf63e95af38b56569661437d2e656fae4417c7753b323c5fb0333751e058c8f74890bf05972fdc09564cf4b380ed1ca2760f927c52cbcf224c202b86de668b1f319e9d4c2f63d75bee3028e2ff70aeb908eacd2a500bb19d770bce3f84f2425cc19468cef0b3de6595e9b69c192708e2d533cef00fa0c2ba7d2653585990e4c85568e023c113295d0692adbe90d7b35a710c3a0bb6fdbe09f67d25cbe483201cf43440f71b0245b1ce7cc0c66c6fc5dea2bb34907b62080cca8ffbac034bbe1df065c393cbee2b02b9560fd46ae04a46cd5912527011c35d0c9becd059173f0b22a16774060aa96fc08c6fc6d114b498d0c80e7dabbd6a75aa5fb2e2d4eff6aa438d322c6724284fbac13c16289ff409f2512dd94b0ae75ffcb7446e383d4b3c73688e44847325da20e0547c0165ed8d0fc451febb34370623b043d330f7d814a1226eb80d41969ba635f84434f9f2578e62fea216df5e171a6fa41cf071dc3c0963a1b3226e1529f3c1474016ec1971c2edebd36b546b42e86fdb8cf948520217928e4703656ac986f3d661b110f5c9f279114a61157c7fb2193ab05722378409959880f41b735c11b4cfae3ec78ad7d934e5241147a9372a6529d6ec49eb8093e9b22ee62386f32f741714c6d77cd3668576ffbab52598f6e8131f9171825f95d5d074c0706f1b3d8d939eb3ed948be7e071a11011a542b67dbc082602efd3e72a8a3e4851ce13d9765681b5f9bd74a5d95f0a8f45b63d104fdb58994e70e55550e916cd0b5033de342b54472605fd791ce0990ba195c6537fb64ad0088130aba0e4a20c50e4e6b8d248f15eb4fa414417a713e59b0e9668a6d5de7194117ea2b577e02591f4634b901bfe74abf3ad61137ccc005e4c3e82dfeae84a9c5590556e724e130066d2942db4c0422bca938e719a5f0acc261113ca3b29e920898aae8ef7132e0ecbc34156687c540f24d0a0dfa1cb40374daa3a8830d8e8f4acd4a470af803aac59a990b6f04cdbbeb919ba2c4eba1d2e3f86d60f0de94c74953d1ec70c8b2f769f221e42573697c4be26c2d69f04859113731949afc52810ff53fef5c19ce58c802479bd869f34baf859f9b5df2359ea341490f498afb00c1694d0f989fb96d20952c90292ec9db34021f4a4c1b206e84905dd35332fb86244375162d30a9b9d835855131a99e620903f06f3b730ba0c4e503f55ec217efae561e37f2d2d13093adcf3e964d403685c4d47530737500cd976a40e76122df48a5b9ab8b4a7b9a9aa3adb115294cfa0751ba457d5390883f7428a2577dd57c9858e0fa3a8164e6207086fa156c2fc816b12d8face9d5d6986e1683ec82f8f74654a9a50f655053fbb22041eae5f4b19ce8fac719f9b2f229bf47377f2f9412a8b7df4d6e37989a6fd15256e20727f14a5b45561fbbddf7f0567c0b9bdcdac286003cd660dfd17d19dddeb4a0b9de60f7b4c0d448b402a9be453ccd11cf13e9a2e272a04a386044284c76ac85f3dda74fe4b90bf0a727f01d84f6bb947c3ce1fb7094336b2aa888d9c42a2323c850135832849adac48d70d5a6ddafbcb6d5926ec4b06acc1fdbbe1ff05350471c5b8cfd8d1870da688edb502f6bb8fb1745592457ce266d074f2d49a186dd86d667b0f8e1db347579fac570f872b98658523145c129898dd0358cfe09bd6562969b3168e5272c95baa52113b8250f3ef6f11aa49dbc1f32f889fe28f80098a39e53832f196140d18d5e0f7cced7ea6c305188e98a3af2838eb6afc52f559fc683cf3a8ba01343c1fa5ba8e28e6764d3e3c22c7f2627e0b6a02721cc01b0b5e4b6363ea391c24fc6018261db02d4bd5503b8dca0bd840ca8c82d5608ede657e986fdc08a376cfc95f9e45106c736701b6007e9cdd78a2e3396950fbfa93a81c2abc8967c9eded398630417ba6a9c9cdb120b3cb3695d5145341af7dc5573f9c202651d558fa42528d1d98a3815dfa4fa126bdb67fa2eed14516c2318f6c07809092268393a6d76b1246277a28a8b79416f7c8b32e51076ddeaf5f52d7a6b3f833241401a3ef7a2b1801f2b779132682e1089caf4de41c602df55102028fbdf596083bafecf7511f25d538a0233c2a47f94c03086a4a8c502d47faf4097595e3dcc13b19803e48b55a3dcac067c613ac860c930a3cc1f7c89702d0a8c0138db6d0ebcbf85e6e319f6b0f778ad5676edb72d50065a3f1830cae3771a2c014fe127ad21c1ff69c29dbd8c274c7b351908dc6df82cee5502076f248c42d2f09cc0979bca0043e48f9e633d6367e1aa860258138baaa68fd938548d8d8c29a2d4bc75d46264b0e70fb1830faed0b99863d5ef6233b605a7efcbb86edfb0cf46a20d84e4c19bf247c4b40a539b58490b95b79f4bf16f39ea1459c4c09e6906e6747b9c461d5903c35974bf5927e6126a386df9d7f59683e0fe3387cfcf09a4001d5116efb06bde59b460ebd366d43d4e0d3c176c6d37be67ac0cfe8392622c8025c9b1c0d7bf32444b1f2e120e77013da4873636b4aab00f5de9e367f058183f1b4480066413788b195c40423b75e42a512b2e22e6bc11132a6418adc104b68185bd071e10af62bf355620275f493d66e990a000d6e4a126c86fc7745ed57ff8da5b87be49c3a0ad6acd06511661c05ecaecad2948ff61fbfa3be8ad7cefbc806d6515c85194c7df3d2eb8bbab314bde244f4d5c03427dc72b4e6e84867678f137c06c7e35a3d19bdad8cccd59e64c959303e500c1e3d608d63390254005fa7ba4778abd4dc833aff26e046af7e007929b853779e21eb4306447bcf165e21fb00500ee3cec9f4d4c3e68b0d19a0ac53fd5eb90249c389221548c72df2d86998322e9a8e3c9ea39afd4eb092f5e8c5e732c24bc61874840bdfb5bec9c7ad15e78a8738c31eb22ba90ba0f0e85f1dde594f3ca1020210e7c72fd57c70272842ec401d45292ce86bc7a05cdc9040722245d219e288db8c3ce3c40ce51beb8ba6a6b6a0fb40a440683dc2276f306d3619e62287780261a16612d26fcd2dd98d6e30ef608a4777f3585a0a16992b3f364c1809feda9a11e286e4c6a27b5e038d128eacd765f8c4a895edec3130c4f28518207fb52bfdf876ac9464756658006f4c1ec77a6c709c3bb7adc6618f2a4a73ca74fd06c4142668d8114766b08244c299fad15cbf419c0ecadb490f1644e473f015b0c45cafc796b598e22207df9f1c2ae43fdd099682d5c19ef286172714e5d9918c3ee9b23bacb6fa6a7f1288d51e9250927804fd7025de33b5adc3a842d3ac7ed8f1b13d87d033122378d5984ecd07df92038699a65ae27074ec76853a8d399cae7828dc06eb044a82d15bf5cdc45b37745d098687ea9d52aea44be5dbbe9f52ee5dac0117f0ec4c49bb359322f5908e5a43afd2b0909341d46dfad0a675da51a77a8a9f86c0177ee39da9fbd11d736a9287b2927a8dcf494d9991cdb8f3a6d3346711ed018fe09e7b7a6cb2db3dd1fca359ffd23187d8777d9bcbe5daeacc5765c7be853b21f4064348321294f4bf8f1fcbf0b595ae37ee6f84c5f36809320ed1a0060d93381ec3a692b5654da764949a5fbb1e91983a6d449bc7404b9336b16bd631d97003ac06b3db2ad030c784c6fb0fc585aa3184d15b3d87048ff18a0dcdc223cb99b5fd98fe37d84a4f6ba269e8d10c5fe22b2cb25e13396e5fe2bbca37c6bd003f91795923ab45402d69840f68ed075c8d8e07d1594edae8f70b8a718d0cc1cd1ec36708834ff221446329a9cc6692829b4e685fc436665a8c43980bc38a8991e1fa395ca3230a028298305dc2fc995a59439f1c9b0d4d8a4a17256a143fdb963c0dd47881e3b54eb3ee2d85fc1689d450db30cd4afd5ed9034e91a53e050f98f09d5be22c09e658e1b14d165610b3350b7cbe4203d718fc72cae8a45016d41dbd729fb89c3ffa3bd5a71671f7bab6f2bdc1a413828b3395cb4c0da816de7cbe91d4ebd3678b045240d683745ce3120732df0bab4872911c8352a4ccb0119d74f4ea89f79592145eef60b1831c3749a0220ed341f31bc38facdfd6d801639620633eca46e4fa34de8b3ce89ffbfdc433d4c967bffffec354f2aa1bb1373df23e0fce6c62b71903383c94d5d4d6a871f5d9c2ba3c5787b37575cd84237dbeacfe2edc9e57706782d781bd982e58ac1df5b6921cb76811cadcedec1c9c57f6d9f7c2007fd5114ad18467444525f67d3ed2dcb360305685eb83f9e1eb95d33feab7540daae7f737c5d246987fae058f39d0373871bf3c76f1728b481789f40701b5f55af61e7b4b6d9ec055bd787f903f663bc7783fede06fae4dd0b166578e586b11cada143063dd22b9c7f3ce0f56d73d2ef736991ed7521f963b9cdf385c12286ead2d54a37bb687771339deb4f86a7bf271ce106a548f38843836ab752fd04fe1f041671957ffb4ae184fe05929a9e88b7d90e37d51ed53343ff5fb75fc73cecfb7445f727f099a07c55761cd99ee2f30fd9d6fc72c01ce35ad39abbfaa5dd0396a17016ecc71370ef857d8a3d4bffdf6143636f5e8821f67d25e49b3917f12e920e03f9908989b0ef52b14e775c7319713978cd224d6eef88dd834267032dda1d062753600e4de6a9461770e7ab42be72f7cf334ff05bfcd275cecd8c08f52583eb5de05c5ef45f13c398ba7ef6e904b378c136b5e4bbf336f729019a6dcf3f4dc157ac8f3dfb85924fd24a3de97dedac1abf3673ec918eda07647f0d07b022768ff1acfedd4517604fd63476d56ce8de48e8c75b5f034dc53353e02bbddb407caad657b3114cdeff31bfc32c71f767baa5e9a63d22df8a82f5d11cfa40d739ad216f0029c71cb86748ee238bfa7b2b1167e18c38c1965b7881fe4a86fe10ed6609fe38df2039c1e613ef1f4ec59e3f9b2af0d1f013179d10eb2f349b241b9d01d66af7eba0263927db0a5f988a7cc3f987f2dc9c5d03e98239ac17efad2ecfbc60f0ee4523c58dfa77e0dca3830de77127f5ad9cf33a7459ed75c4ec0a7f897d7264bb1744a67b023300d45e7fcb3f884b8f5c80c1cdf1b00fc62780654ecd85039e45d1fd7a751b6b4d74edbb64f0ea4ab4092908665905b187340ccd1feabc192c23bf5176d558fcbfb7574f25b28d03b6c14aabd8b11b5660bdb235389c7ebf59147f547a6bed4a0a0ba42b28b4774c4acc50e16f307eca841e4dcc25ece3bdc4f7d51e4d0c5548f8c03e8523d97682e0fbea0e529203a0d3741f6e284f6757907e8ee2edef7a1003000c7f0ce3330d804db9047dc6f95a693e8486dcdda39aee4c8e3930fcb1caddb94a2c6a7c8afbbcccebfb26b0d0ce295b0760faa97d548fab9b2a70061d8bae206e47a0fceabf013685d21eedc17407c89ce1622105cf477662bed139813b98d42b1dc0f8b31d02b92e4674c1e9ace7de85c233da1b090f0c56c41fe03a800f000460efb70580176eff910f1662f49826fef08bbdbb530c2024a4be670f5c31923e69f0c02575ec4870276f76abbb14377533b6e2851d72007be49b3b209230f0837b743403f7bf8d6b445600aa69269eda8b1752fc714f62f417d31ce21937978fb9d8747c168a8391a8b3d2b09100aeb0f826766eb22743ab6c42d7bf0f36a271ab2e02d11be622407924f21851633be7a693891da2f3c4856012268f7c20f73dc4d042e83e6aa548c86c060068eb45771c402f58dbdcdb2e9cfa79873706c333cbc2bae687af7b992f2789d390c1d7983787e114644890c11f6ce12282cf034f90d9b419b12340bc0da1fa35ec93b0c34587c74ba20a9bab7e1ce95866d0e439aa02ded364c08739d4947659ff884ebd1efcc80d75b86db2ace5ec06c65802ffa3747fbcff43d393995a361c831843407f2b99de06b5b5092dddac34aa432e32accf266f8680f07455b8d2987ff72caecd6bc76cf09192ff0c93b2e1f61d858dd489881a1eade7aee68a32375efcf364657da54042bfcca056c3800e282e94324a8d519747914dd3d225001f80b903ba054ef9c4db16d8165ec7e74dab7d4574935c9425beff35f714f689778e511382861c48d72ee570deb294ad64ec865452f1146f0011c2bacc8f42bf86c1dcc9ec2936b86f6aa9a69c402bc45f6b8c94f9cafa4c1f4a08600aaaef07383af91970eb83fde7665196c56824d134a883e581ca8cee8c54f5d68bc0c0a952e11ff880caf3db0c6f8ff0f2e4659f933b1475ba71ff9176c26cee92c06dc5e59fc5f0f5029bc8edd7ba67a8c5df93111c42849e4cd66da59a1df01f5259c4dd389a1c4fe01723f0a0f46fcb207c4bb941c817fd90be6654b198d930f6ef1727f17e16bb52b95a816de5683e8a7539642d2275502be153b280fdf5ce6b523fd2b2e7e57d8c43426cbccf9c957d88d5709fff7e8f33c82c0f148789e5a17ace5b6edbafdf79780daec581aa14470ff6405667c3a71ebc7943374846db23409c84ab0904011efb4d17dfeca930eff8e5ad6c1a7ef96542ceb08dab3cccf9b0b1bb1f73be3ce3816acf488377d9f5da7e3db7cced16201838bfa3850afac33f13008b624085e7a6229697115b1a510776f3172c2a6bfb48c54313dcb7d36b063e41817daec1525c1b02efb00928045901b396c7d538f6e969e12cedc81dd162e265376cde09d61d9ddedb8ee2ac816101a728d689450b2fb50466a70e0d19d749e3570c37ef696951a5903c6cc1a22343a1036f9ca606ad65c8b694fc6dde6cf8f9e7027f9fe8fc7ce39efec4b5d729a8f6ec1442324e7f3b27c574e04ad07fcc01458a2641e3e576eeceeba173f6eb5463231b0932aaed61801deda384d88a57f5fd03f05721eab47e42f9e4fb9d2eae802afe057daf558d3ed7939b5a54b2416325d60c2efd39a0d713dd7b4a15334831051f443c3cff208e5883a45e2cd66488cd8b270fe5c840cb0a2746cbb578909fa0d1501f7679a84a29be9aa6549edd0864b8f07254f4b9fd26f53d3f81c29866043b290466ca8efdb7bef3bf69d242ffaab5449bd76a352c8b00a7831c5f02000656bef30b6e40dbffbbccbb5c7bb79dff72c168c6ca2d5dfba679d083d85babc581dd174b23a95f822a9f8a7c38c6703fe6e0ca7f1721bb16d81016a154478dd3435fa0203f280de2fbc8a51ae699b4bc87a3f143c85073ee31123f3aacfb4a5185e1f11b864476e580744469fc1c7a10bf2873a0fbe267870b3ae02c2679115e80a5c3f9786d4c69cce6dc631754b474b139d3ef10af61a0d6a2ed836fdfb2ca164d9fecf1ee8ab068396b4ddc717bac6f127f41b93b6e899aecc787c6c1ab6cad8279c1f3d9a2ac9b6a5fa6b1113612306f8f90dc0397772b6c40c7ab3a54e0a41f7672542c003707e16d07f35c59a3a1c65527cebc7b00354ae7128a2c5988bbcc24389a314a147098df4619e716682609f5968563803d5d71283f9720233413d1c107a84fe454d2d8f1752b42b74f44a98745125ac75c9d7c595384cb56db46dc1678a1b6a71633b716610a06d64011ccdf345bdb65082691ab54888ff002314208738fdc3acacd6e8d3e3d841ceea7b76a84901e6c08d9715337da2b926864de76cb94f4721f8615fe129d78d6c11cc95885326c3dbf4cfcebc4dce82353c4766320d25074b2c5501d3923aeeca48474ce8d000f425bcafedf710e2c2d99356dee1f534e723f3973fc7a8e4c68e96e5b3bd23dc345cda64fbe329bf764f5517b19996346856608f33965b149f95e66a24745c2c2e2a886b6825830de92c9a374442c5f72790c262eb04460bdbe08e7259bdc232c1e7c3d55bd58e5db7f192bde54613620ea4de43789232f5ab87ad54c184d5216f9f46a266ddec739414c22b6fc138b00e3b4810a7d7788f5a63be4d61c5b440d50d05ea0a52ea2a7dd65aa9b8be869ed30358c5b6c227e6a22e202afc3875f6b16e550ebbcaeaad910cfe7455631fcef12344d653b05b8673f6f810d2cb3c1ad0da4c78a2f326b0223a9b942deb3eb4df585c7f814b20b55e7ce059991ee6f3844c524a6414b034c15d5e816a362c037c2ba09b619741230d980f2102be5525542ae629c91d173d35b44807c62bc81e7f0cf1bcb5ff54108ad25c19d4af58b840525d46b3f8ed6b2b0bec64ff1ad6dca166c93fb6964572ea2d58d6aa998af33f607bcade68330fcf0b22e0517a8019f99e9287f1bd876e40ef5c372d23c0a65d26a579d357b454f3d3ac9c9f9b0117439c5939a2d223a763f7822ccd8bea77a696ddf93c54280cc7cac6e46dba44a70c5195d601c63db0ecd090eb36ec2a5a303d2685df29940fd281160d96064303df1fb58f0ba084fce0d1ffc49e7dec4e7ce733b178c1f9075855e839fa90e01f93956406a50583cfca842c31d2fc89f51eb23cb8860fd8464c50475b7bc29223485d75099940c5a8ac23dfa8fc45c731ba5d5d619c28413d6ffed76b90363ca82cff20fa4dca3d820401178932d2c539614531271555a061359ab8dabea607f2f8a5af4d8d7d3b628566a4720a070f69bafb29df6afba0dde6f1f6bcaa9560525ca0e3f743ff9f8e46b4492ae4348cc0c8f4c4a4e4cd91f60398a946feece727966568350e561b0d9b56f4039ef9386c59a69e10b8d3189b021ccc0da2e8e1dc9c7b93d8d1751be4fea41254b033cb8e0df3b66ae2516605fc3a18215183d9acfa54d0c05d5198aca72249a3f6d1ed878f8453bb04b8d3749f8fb7d21a9924dc1dc1ea551a694cc20fc525e7502fbca81d88aa63ab1699e2f19b1f54663a50c9525c472cb3aa7499541920723c316e82a3e4fca2f2f7a84ba16d6bc83105280948f4b93a7ad5bf003747af6119b3e5ddf06806184c9ded42bd843f9d90dac4a8a2ddff4ac4a50970dfa81674449d35674c9c7ebe85d4b247ae4e1ccf858e2fdcd33cc59f5a1fc0338fd0ed0bcb413c0f2eec15b88ee018a850812b28666f588caac52410462bcc1e921a5e8350936e89890013c5b78dc70a0cb1853332a1356a74de989a1c82585e02a73a28eed2d5ac6eb03a087e43ff54c4aa925ec468a5c550279328a22cb1b0109279105d3ed462b0d7ad9fba0d6a9ce0b4fcd77b87299036110fcdc9f31a358f8f2834795aa6e28e0ef971753d84d545828f2ac2aa305834ad8dcd9dfdf2be06e4e908cd0f68cb4bacfa335287297554560275986072079982d78dbf533ba5c7200b9d68d885d2ff783114199b0f53e37b8569583a44463d02590aefd9276a098244807f7d2cbff5701952759ddff66d60ef0c427be830ed7366d2418d9e01ae2070acda6063d963ff80b51f669875c615558cb4c8d0337478462445f3a873e902cdca73e1ef64d6e458b92bcf832126282e834c328424923d2a49d55671848bb75e1bfaed55894eaa42521fc9a26d8fd5af511e6c7f0e9fbf6dc402922b4bd3a45fd8fb60749e0227c9b6066987ca64d700a0f1aefbd02f2072b925b2ffd6d1084bd48cf1c0c6a689cfda040740e0efa2d12702a6130c67b3907d1c08a18ff606f2e7ee9da454f37c2f098807def555286d143403b8825537f22e9cfc536208c3be117a1e358ce717f16897f62af652bb98e43c82b575b067d866b04e50e968dd46c35552b4ddcde5a681d92dfe804e785cbbe45ef6704020f782751dd177b3a26eedc2ebf3c7c95c16bf29f8fdc399d4fbc90831cc207b20901c01490fcc2f1a1ed1ce43ec95516e48eb1512b054023c654ed220277b27fbfa0a9765488a45adba3fddbcb5c8c30b30e46654f3a8d1311aeaaa30012d2977c0cc9c0d633380c6c456c930ddd7f73699e8571aeb7d03237407079851024cc10037812f0b8ea6c0a4b7407db3c1010439a99baea3c86f6b37c6d731085eb78c932b82798087f9c6237963906fa6805d4dafb68c03f2f0762eab77528fc4e0c273b756d377b47e1279460c6b57a0689a840f0828ff4c4d0eecc6d5d24f7ea9794c097fa4e2ea90e5cd36b05b3bf57f40fb472920b43b7a01307b36a7f83ce18ac37f5ae0cc162c428ccc8e6132ef62e1019240ce0a3212c5b736c923520e3e81b3b64d2b5f18ffb188810b92d939e17bb84291aaf81e0f48b7152f04a95c2454ebb30ae69a52cede22fa6fc8e2a74625c8d5ee4f7d595cd0a5c8403887ab73af2c5c1f561a9fa4d0069d299401783fbd326d520a0bb0fbce742e6544bb2a84324f53cac1b063b11862b9b04060d3acf0677fc096fa59aeaac50e90b3e6ce01163ae96f5b37fb458fc57413408cbc486084663acd689e4ca3b648b223880c859b4821a1bc585842de5903770c17b27e7e298bad692e14852f87555b00ac9e86979a4a1d2d1a47de551768c866b37371ec4143b6c081fd9de8c572ac14c21d7e7efba00bd8e82de3382aaf03083eccef21d0f6efe296bf53715c918bc819de9e2453f4697953ce50bdf660cb2326dbdb9182c857f5dbf6c3c7f795bd8f4d4510afa3063efa0aa680a97168e3505294424664d210f16bc83c175a0b82752bc7b27d75123abc51690e79bd83754ff7fb24d6f6a3b3bac0a5589c7e939f7e5361741a4445d16c2964b68996bb20b230f6fa13ff56ea2590815d330cd3a10fef5dfdd3962b47945065e04787878495ae55724cae9e461722a5cb8c34810993862a52623dfb078b0d4ac038be16c4318e213179ba9e1da91ec4128deccf77f200316c646cec065a7b14b1accec9faf73f8fcc7f9dfdf0edce296e8930ee04e1bb7597cd0b99dd882df3f99a9695ebae0fd925263ff8968ad7b30bc9412f57c34b1642fd00b703dc83a07b87cde045f0d20bb5f6ff5ff43b096998a99788ad92157d342d9de695cd77a3f15ed0dd3a57459083142dd0bdcbbbe00d2089fd8025a1b6d172ac756399ea88c797fff2f4632282da99c5bbd829c895de9ba9a116353c202d950ce16aafacc225bb3ea1449508023e24a32d778734b3bb4f6f7c8ee713c8cd408c419265fe77d83a810b6de7daba70d3d1782db60ecc8b8cc0fbc4f967714105835b71232def133219acbd691c18d09b6f7f725b98d09c5d06dd1f00eb6c00f91702bbd815cae20b8cf0246364103f5f1fd4b9d0a90b51466032b70af87443a5ebfb97f82741e8e4a8881f886307cfee04fcf62dc8e68b44c373a9dc3b3ceb038ad0035b39f697ab320a0185f94f026db5d8af23692694bc54872c22782081cf947d459f8ea9b6e507f023aceceb78228d561af63facc2de6320a347b6fde94ce2a55c19057ef81b8cd2524ab6205d032b2f71f23efca0111cb2e3d646a0b7611efd4ad1a730b77eb3521fd76cc698a2e9a8f3890a91ae605be401073a88cdc645169021466a25a77d57d5e240707caea5d31a7613fa24d52014911068f1800c7ffbe1ff4cdff93c421dff70efaada83a48c3ef05bc1ecaf7fa9067c6afb49e915900a921316aa55079221fad0c2378f6dee461b43f7ad82bf7e24deb71a326128895bcb19e98b7965849895d42b40cf6d3476138f734314c704cc38dbe4fc48a831f202bd5db42ad44204a03ae2b3dbc04b8d8c1314a39c6f02cf2cfea0889a53344d9b48332f776cc5494b33d71790430c30473ab0c102da7f5a13d0a0c991da2c5314c1f1bbc3930dae3d91dd50f18e3408a237eed19692a1d5bfd93118918201434c4d37ede7646ad1caa2078de3e1855c079635e1c9f9e9fac39937e0483280b4fd28090cd9f54be9529a0d817bd75794e4632e622d1b4de0f239a380fbdc7b9394a6960ae41342bcc213b63dec35a80739dc1b571c15a4b8ffda43765623a8c6587d812bd0125018d3cf53b48da19c3df2d27e4e53e294a4c7458cadff423d431a5a974f6d2b8098a6b280efbc2da7d096510f5ed1078a3100ca1d4b6bb8d3c35dd42cf2320dd8202888dca0a9d1018e01997515a8a41be374f984b115ada891f91c9649150fdff52c0b963eac48df3d10283d55790c4fdc8c5807c06fdbe97b08e4c47aa9299f63edc5e7e3498f7e7e089cfbcefa317c62661decf622978fd8c8e02d49febb3f94c10a793efd09ccb7446bd13865950ac2cae172f7f104c80404bde30685b00a6973f161bb1106b15f1a852b37abb75e43c39c43120040d007fe607a0aa620e6001422510e154f1f811c185fbccac19dc9f9b667c313b4b76c9e2600809a5fe526d9e9108d8454c31f1a249d69f7a398d887e306d6b04943ef37c5947329addc70114471e80a3556640ca6d53ec4848e2315819d2ed9acb0b6031945dbbb4f7252279a856cda13244b90b39abab9586ea0b890dd9609d6648e887989075c71de7dbc0c79db62b5e084b6ee4bc527325a80ab9f7c6eaefa053fe380aba76daccec2e1e9ef441d83cd4d26a2297a9c62dd169f34f512475ff8d4d648784ede067b07de6da64ca21a83576cb3d3c5299f79f22b18f7e2459f3e028e45faa3ba15ad7a846cd06bb8c2b2c0e076a48365c9244e39057252cd32b884fd710be38a03c6029111ec66c3246bca4eb40df20f0e5847669a814e9349ebc31ad8921bbfadaef11454345a2ba86e54d93a176eaea5058df5f3f943f7f243c1aafe930c103995042817362c05f2402ed09ad3de8ea5ff09822ce9be556f621f8deb621c999ef184805b612ebd3c39a2edc6683d5ba35250081f3e9df79af6fbdf6d8501d6cdeaf41a1f70fdb33716c1874b0b1ce61ef808cb291ed34d9c472772beb0041a927a020c09c84aaff4338886461ab40ee65a552562285c8b482bf309c149213762a9765a76b8159038e7065f026c6fd36ca6f44afa28ab85d64fe0d3bfa3203478f958946446ca92733c849ade8a9fb08c74359ba42c970a89c754fa8f116c6a04ba21b54c5f8f6d9494b1e9d402ab61c3e1ef12e97ad9c30bacbc935ad92d073fc5bb26be10f78fc438a24812b5c02a82776bff98cbc41978a6ea83c0ad4aad903736266d2071b1bd0930feb134bbf5dba7c17209340f72f8e4659551e93267651d49f5cb42d90ba04b6bc3fa575cdf5358400e7807bdb5fab5afa8f7a5559a6387b1f8c4010afc1ed94db03f0b50a7017578a55a941f45b17d128d6c4f031a891261cff5417496f38759261e6013c86cd62ee3cdc0cb1920c3193ec5121c82f3a2a13940ecc6cc2231c9ec696e4898b4dc1bd1f8b259d469164c82057586fdbd850adbafe2bc2ff10a52b732f3947fae155b89f172ac89bc93b02e74b479b8c977926d4ecb8d8b28d5002190a3f2df4162eab4c10a4296c0ad8994c3e409e0f6feabaad71efb8dee442712dc4a81b00c36ef93da342a7a52d4f3c2638f1ddae98d43116534b26a454d1194bfce98430debde907503a014a02d27db8e1959f3829f5135260ba230e5c6c59089a0a6a66fe4819bf8dec0b0d07a5df5c9e89a54b95df9af3207af7dfd464e4bcf91bf34e9ad4f1a95251e052fe1005d8cf45b7a554cfdc5c6ff3b221123f3191c2f0aabb21273c39eb96d3c842d8996cee501c8787adc421c3c5b1b5aeb60553e3b1aba6ea5742bba5393ddb449eb8a9cb63747f46cc4c50f5d8b4fa2f0e9821162a6b240bd564a3ed7122db58cd642f1240450e61485a5f24759d115b294521105b91620dbd29e158cdb9e054ae1a0860498bbd8ab9a8e818578950e4e447798aabdcf9b07f57716e3fad229a8d876f63168888e3571d502b9d58acce69ed1fa18c9fd706da31ceffeecdf9db8e6b0caeb5f382dc732444c67975fae5cf2f0ab2f4728e642dff195ec0f95170863b0c8a626336a6255e036b5090edfe52523cf90c5bc35dc42908d1b72749f9c52671374a849a0fb02c2750ba7c60c479d0016aaef81e2c075a4fde823bf0b5026acbf3a5a4f39ab8e082e90939269cfc5174455411ddf21d0ab06a2234fe4c12f737f22683bb83552e1fbc300e4fc1cfdef0fd85afb0bd5cd1ad41afe571e8ea3f20e5abb843d75ff896dca5066493be9b5938dfed3a510c51eeae88ed9cd21a2a351d7b660caeecf95d2aaafad15f0bacb372b4f650ad7c17be54a7bb3e0c0bb6c0f28b53335ba047ec21752370efbbbc4cddb61273bd713bffbd7cedd052a7e72677012e601b57eebacad0deb9343f76c38ed961519670083b6e6575b37c572322061fabe1f89e4b74341c7972890b67392f9e368546e2b6e1f0e65726d11f2c3b529b8be3e1f8c72e147e067ba3b5ed13bbb45a929f6c7d56027776b43d017345c5792d8fd45d93f5ef08074ba05cc672fec20dff6f97e7cf3830b3091a6b5b640e9cc1a81045079e2de80ec9d993f24773e4f75d5c0a46dc01e925a14a9ab59f8c145d48d159ea43d9dee48fae7f2434acbea5e68f992862f01c19184ac42469ce7874d79ae1338be1539db1e99c7eb5239122824768f157ad73ee9800cd81d244e061fef28fcc9d50f131c3ec425592fdc90b1df04014df54bb8029af1047628c3ef20ca16c5955b3fe200fce911e81eefb6c9a797db750ee15e472c99073e3fab1f522bdce4e8bc3cdf3083d70572f6a3075c0319b1d92bceab4becb3ef8507a0b2bf4699b02edd1fee7bc574f59e59058c0f44d72a89f53730a78dc67f0c4cd5356bba687c455dc81d588db83911dfd50ca4ac006070626eb07f6067e19262f831017474aa7fafa676723727655a7dd3c3b5ca6af58323303413029c541aee1769e53357c3189b358cd8574dc115de87219663f2cc2bf452df7166e1deecbff3eddd1beb05847bc0952e241b729297df19a9a6bdf690ba9896af6a8e252d01585b296f11fd98bfb05961774ee5e8522aa53d52e08768f4187b2bb47d4d092a260d1169b4325bd54a9ab2ffedf0dab3cc50ee46817321adf90b3c9a3bbd15166477b29cf5ab8f115a138c1e50e2090b9d695a9e7bbe0fcdc5af0336fa88865650908e4c88b13a804fe41a8332bd307dd6fecaf5521c1abf2d1145432977563a7f07b99d3a70485cd43f37f24ff714be3cfe06d8ad6678db110d1395b797c62f9241e06eb1d1ca7a5eb349ee49a9e17ae26d30c0e668b47b2985e6b3df108496e586e41ce22571bbbd392d94a1e1cd47446652dc62c53d2558556bec7760890576456472b6b4a448e8b180bb17db4b014db4fc16349d4d870783087ab0ead318b32284bc4698c9ae87c3bb821ebf04b7e8eef9844a41fb0e04906bb0c2150eb469a521761cff7d2563a4be124a6f87f0d4042d4c138836c1168172e56a62f68a2d2165f3285d50f0e4618a9b3139086b795c5c75662f6139939d129be3f1508a58a075306df159c5afde95b79f632e10f85c041d0a89595c7564b194dc633966eb727d5227507c9ccb9d9ea95e2a26384496888c4532abdcd947d003964470fa0b306b9143a7bccba182075d10588d5a8353e6c76b74e4c9b755958fb8376aded0d55b0ab02a4d63b00400db590e23b2f5ffddd3ad6531c0486e99c55df597c5914fd9be62e600d790845087f6c5790cd4286e2e8a738f979940d4ac8e52f734197d0442293876a3dbf45a5bd7cd417b1a88466e6992a7d1352f1d0dc48fd2e3dcaea39e14b4bd11d824ad5b44d8217bfb133d50397b75745dd674f79069a9c17775115898b8e35e9e0abb74f12700100a868ae5e43c493d48be62a8bad1c58851ed5e4d771e55ff2216973e9b53278152bef8bc760352df4bbc088f925434e735e63533b5720eece31c1a0587ec97d281ba189ad71d4a34ac8eaebe7c045e3fe3760f0763dd7f8516730c4eb8dd736753124c81c994c3f642aae415ade30df69d5088f99211ce081fb018b45d05d09ecbf4c6e77aae26d03bc685b59dcedfc4e0e941546923d45dfd74b558b6bebf302b40c678fef58eb5a09a9015037cbefb45563fb7f74cd9ed56f26e5dbb8d04a7c402a53e61ae50ef575dc40a9ef65c06a2f29d096b6f3d7da53f08d06a94b6105e56a7d0076469e66fe724aeaf8bca6b6307aa5deb8da78cce5e942f9607279d4e2dc106c4b0df622398a5f19551decc4c810f632c6982aa8bdef399be620cc81ce5be3583dc5b41dcbd20e96cf2babf49b517b850f8db45c9983b7163eede5c006bdf4c27ab39f116a6791ef978ae040796e014db8c1e4951c679aaee083a8f1193e2d0493c7bc7e3fe366f624079a564b7922960106caf52cb89a9daa81fb563d9e4d1b07a7a468c9c2de3a5b7b1c272e90820d0bd04f4d4421dce3a046c8278af07005b9eecc288fb554b9c93536bd6886ecf8376c6966729d75393549c32b98995fc01b63409659c092083af0df183d981c578219e500ddf6aee1573ffa65f24149ca23bcccab322275e16db179da85d47a827032e628ddf85b6667f264af4e5487796d22af386df16bc7d7a63fab98278b92a105ce68bf9fc22fa6d8ae604ad67aa8ac5233b1dbcb4bc8ce98abda0ee9e9c6abdcf2f436b26ee604c9decad47ea5ffbe7388746244d59cd4f14d8f4a5f40a4571fb9bb84dee093420d87e7dd5f512cd0346554cb9556d9ddf9d9e6856ebdf146482e10b4cf7f7906158f3d8af5204bbdc11872309fe042d9cc9ed8db2dc579a61c8a29290767367b8eb3ea65c2e64d737a29e9a2ac4d1635ac8afdc4a31d60de2b16204ee528c4ca776ac755abe4dc116e54779d23afc4f33726b9f21fc8639c5aecc2b76b9cc3c2593a86713103557d62326f28b5af5db7bc9f82e45eab46da3abe56a24cd141a29c3def374a7a916d9d41919b9b663107dfaa9c51127a411ce3286b2ca469d5ae5cba2df38d9ea7297bc22afc967a71a2e0b69b777fa4f097ec5133638bfd50af79d03cd0f3699a444fcad546ab9f2be3c6ab6084ff46d4afa80b0bad84dda65758927cf8ffe664e67a5e97fb01e907d9586a7ffa75c487b75f106bef569936a5f12ce97f987ad31aaf0a481c95f6873e8b043a3a6e3e56b0452f40aeaacf225015c28e02b624c0d333d1eb8a9bba7a003aaf0623c0223e6d7882b6824e9fd7b4ffb6b98be274e8ce11ea95433fe52d36a6fe1f4331b164df50de497ad9afa7a2b633f258dca97e520e582a342417562515d236473c7c24ef2d53de9b6f6b307ac8574fd4e94903f84530d1580c9fdc2cfcb21c8d01337f886c1fbcaff1defcf4b9fced70712e6feb6e85d16126027ed313dd1ad21341d509e8afdfd6d291812b6ba70a15dab74b946d55fd3a310916e40c2da1471654da86ffa0e919131ec1af5bb3cb2ac000c4c8f57b8fe9d4f72398da79fffa50420504720f7800819a495257fff9d71ad717dc9950bae09fb6bd80ed2d46f475647d777489b721783c5a11e101416a3d1ac2297202d2f069c1140a24b0ca62f6b569529b0e5142483fcf1040bb2013f40a984334daffeb5337e7f9e652b0c8b0167a7de278b16112495a2d111d3f72017ba90c99067f1618383a9ea5494a35dfce32c33531f9fac4044f70492dbcc847cac5231b17b675bc7736a8dddfd30ba56ad349d1753ba6715bd576098ecf5121321cb1cc0551d7dcaa4ed77a10d3b55283610d39d9f8a05d1f46189739626d307fa6be4c95830fa8cdbf0a464cd8301f7fdf424af5acba21110e4d23b890a9bf1d63ab7b0844877ad9ffa155c3205040715e5fa09fdcecf792b0f2ce6763bd88d7be4f988109fc23201fa4b52c0e7eda6e2b5cfb046bb00b920f0326eb8b0d994e26ca2b56aeeafb142a71e2ae6584f4b74c076a80c476be25f65947502bae14932119812e7093032cbd281c8832df909f0e51d2f2ec9967397a6e4bb05462fc10a5f70bcd2ee6ccec05f2f0ed2981db24ecc3296ef49ed1f09d684f0089fd15f13b0aed6117f4f51468e745c4a65f9f9511d7c85de495052e06856c133810806e0e89e17f6b133c2514225401959f62dea2568af3bb4324f95be4a765f716d92bafccaedbcccee1527551616370565bdfc66be5f81487111613a0146c5bbaafed68ac7d87f5b195374063bbfd4d5bb1b2ac5774385c7bb1e85da7afe85c6f016dcda2ad58785b9a6fa09585c5fabbbacacaead3b9f4568b8bf6f2a2e96fcdfdd662579acfeb2effadb9577e7b8fc3dbbded960a8b56f0578bb154da2a5a6f0fcfcb8bd6c3a215d07b78d62ebef7b758bfbfb758ac77737d8c364063cb61ddaf2fdf565ef7c3bd78b79610d696cdeef718cf6bfedec7fb7d8fef3eabbde2e29bd7d23c4e97c356fbc6bf364ee7613ccef3df9a6ba7f134bfdf61bceebf35f75b73695bcfc3d2beb55861e48c42168588858656fa5b73f5f0e84512d338ff4f49ff9fc2f97f3a5a78e0ffdf7f6b31fac1b7e6bac140ffffbf3597ee793cdcf33306a10b943f8cd7f405342a2b5eefd5e9ebff53d1ffa76ffeff3e53375b587dd9ec3c3865700bab6f8e1fa4ee5aed6e65350b9ecd82073ecdf7d174f6cfc6e9ee9f8d078606f281ddffef5ec751cc8041febf82f91a7c0534a4bfbc686d36fb777505f3359abedf13cab65d6bff4a7c6beebd5fe75ec59f7bc43ff71df8dbc6f99efc26e699b0e28b1ed75daddf9dfb5c86c5cdfd8c69161ea09d38828e2dc817caf5be7395733c6c26272dc00aef7b5957dfb4ef065958e429a015420c663ec41eca6339c5a239b532ad32a5329d32cd34649c624e2f714ca55061c293a6c734cad4720a8546e5ff6dd55fa7b738c4a08bb53a9c2ef6ff5e982cd6ff9589f9daeeeee25fbdbcebe2b9ec766e3b87340db6abdb70669e8a76826671adef37608edf391eced3caddfa7bb3a1cdf1fbdd7bc3fa30313e47f60fc38fb78d85bdba5e6f5befe239790e57e7bd3a7dde9e97e779f3b879797951793f03800c005ded695588f2ffefe1d9f916fe0824f8437d150b6002ba6cb8200e5e28811a3711bf9050f3ffefd261b581b2808f2a30551905914c226ea01180fac94075e608ce8212739e3a04837888bccbffe468fbfc16cbf8e57b8fdf7f595f4dc6d5c56edcde6fb3bbafeceeabc9c0635c5deceee2e130309c959581f9ab46dbc5fbbaf760f81d6265d5387b376f7ebe43d8b51ef6e129cf36e2ffbc95cff2d4fd60d94873b74df7ccff74f6cfddc8ff3f7fed71ee589fbb485c2bffd3fd957598b71778dcfeff787fde22f1dd7c03ecd5d5ceeb1dc0ff1cfeac0dfcbf890268bfebfcb8bec15677983b53b0ce1422f51233b50ee8b181f3e0fc9f0700af74c6abf2a7ac545356aa296bbfeb63bcd66af1eefe8f1b2b73e934abdf9d5b6b2cae73efbe2f8de5c33c1fb69dc38aa89bfa746efea7e936e9ee5da763fc7617ef2b9be9d8eea13fd35de99a3e9d2d9b534367ef794ef3ff9ff5e7391974969efb30cfcd597b5e879ba3bf9c9b3fcb1191d3f272689fef6f7e969b9203fa731c289dedc5731ce5ffabdbe2127f5c3ec7cdc581fd4f6715d07cd60b88cbc52145208d90f9ffa7692b9dd5c3fbff4bfd39828bffff1c01fbe9ec558eedd2d8dbcee9db8fb6f2697061525e9da6cbe13d321abbf5c262b7f4fdcdeb7deffd743bc7fdf49daee91c7b6fad7d8ed35277ae5fcbdcabd7ab4bd1fa3ec6715a9fb375f1dd66df3d6e97f5615c0c8d2c1c0e83f3bbbff88eed795d1cae6baa283b277bbb56e57114b76a2a2ceda6fdeedcaec1b400a52c96e105acde93a559f9ebbdc3d1589cc6d2664ff3d5978fe4c33497117298cb98c840692f3abfc3daac98cc7226534167b384f3980c329d0c6f26a3691ad7621bf4cd631fc622d05e56da8ba7b37164f7ae8fc1d9bb7eeffa583f46731bcb9bfb7070600fc0b4fe0ca10684a5ffbf34e72f21f317a4595c5d8ed76138393b0fe37b3d2c0797d56addded2e4e2caeab4656761716f73725a6d76fe0afc7496ab87b95ab3571a7ec76af71bcbef1ba61a66af033cba37c76d3bccb6ef9d0c67dfe53f7d9f1f7cfeffe707f7fc804003aead75cb8535558bef1ecbbdde62bcffabdbeabeb669af4e357563ef71b9d76ef3ed96f6eae1315dfed3c758aaf2bd37c5d7569e1f6bb55a6d369bd56ac3e15abba78f75f12dd6da76dde3f67de7b8785e70605e4014a67ba93c8bf2ffa92c1d73d69c8553d15ff4d4ddd75b59cd58f97c457a3586ffff5ff53f6329cc5608c2cc58ce199be5df613b0dccd76873e3fa46139bad915e7fbe72af4bb3b580bdf7f92dbe77f24e1e6b6ffec6cb7ffa5ed55a9ccdf8a6033b7164e8bc25a4c802f411d518e5fbd4ccd04fcd9cf2a9994b3e35b3c6a7669ef8d44c0c9f9ad9f7a999de4fcda4fbd44cb24fcdd4fad44c059f9ae9f4a999499f8a59e75331c97c2a66e7a7624ef9544c249f8ae9f8a998263e15b3c3a762027e2a66fea998143e15b3ed5331217c2ae6824fc54cf0a9984a9f8a59f4a9983e42defbe67ef93aaff72fdee3f6bd77b570ff4f23dcb7d998ddeffa38085cb8fe9f4773c1ddd77d07fee7b19cbe65bab589d2f16c6b53b5345b77a36b23e6c6d4692af5ff17fff90093f0dd459b9edd80383f359ba765b381f1bfce516e7e9fdfdf9ad67bdabeb94a7fbebdbee628c4bfeb5d3a4aef7fd1fc8ed5bd79dcfdade1cab47b98ec0ddb5b2c7e87edb46cd61bdef262bcc7bf7798b7c358fb2693a9bc3a566feb7dcb6fb62d1e5de6866b31afebdffce6ef6fddc5a9f87a666af03f969f997cc6e6252e78be17372ff57d38bf93bbf392d6ffdf6f3b2ffdb25ddf7b18ccdfbbd9ac34e4ff6e36ac636f329def52b75f8ed5dbdaf58d86eb6ded1b8ffee6b8def60edbb836d7fb9ad6dbfed56d63e0f015aeb7f5866f3eea26df513b69c4fc9c6485c7f1bf9ba6b373b23e25bbfbf01aef9340244cd2138139e9dff6bd39234da1b333d2e08cd4cf487033129897d54a7bd15a2b7fd3df1caf31e2e7f17938f279cc80f1ff032cfafab56fed832cfec46c948801f1c9901973510da9b988aa3b450b0941fedddfdd59b2b3646772677247c90e1231b8c777fd1baee9eddd25db656c626168636165716e740a1cf0fcd2331eae194f8d263ee309cf040e60106fe7a1f0e7f79d0f3b853b22782daf8f73ed98872bcb83350f080c87ebb16c9617772584df72bafedeebe273d87a2f8cc6f27bf83ed6b361627718f7d264eb18bffb728effd5d86d8ed76d5b3ffcf6e274b90edf64b51fb62ed3d839fbb673bc4be6f9347b278bd9779fe36d7d3dbee3fa9bd7d97a9e4c66df7eba9d97a5cdd3acffb1ddb8bfbaad6ec3e63a4e17b873fddeab696fb84ceb6474f6cefb5e17c37931592fcbe964345dd363329ddf633dbbc7e33badf3f6adbd77f256df6fc0aaaa026f71651368b730b4393aae6c2eac2cee8c2e13c3e6f758bf0169377a6b85b5e5200bcb2a1c268fb75eb2de577b753bafade17238d7f79b27f3b78d6f69deca7bbdfa6dd7fb2dd6bb62f4767b2748d35f5f755f93d156dbda25c6c172e3bacd8ba669da024ddf617c2cd6bb7abedd6e691aebd57b3c27d399a313e07fac9494959fb3e1ffcfef7575369ae687e69ccd4192c344cea41c1954392ae8be7ef075a5699a66c1e2859a2ff483e464f8df8e53069be36dd8ed76a7fd6e37dd9be3d8bc1ecbd5c9f5b7dc5a6edff77eef91d9e137385b70a6a39264a30b0c8c1e8d0a958a9611fd22aa29aa44b4c7ffff961bebbadbf84dcbefe564f0185d8ed7b5de8f6bda7acdc35e7dafbef3303a9b9ddbeeb7f72603f375580edb47d6ad57b4ded3d63277d7c977bd97ed371c7f8fb17efd98bc736badf6ae73fc9be364ec16bbdd6eb73bf78bde6e69eb36bbb582fbf14d8686f7e31cc7526dabfeeab6ed14fdb7adda75b3ed14bdd579bd2dd916afde6fde4fcff7aefdf8de33ab77bd6d365b736bb29ed7639ec67af3ad1efd40fbcdf12bde96ce92dbae34960afbc5de5334bddfddedf6ee79dcaef71b3ba55726267f736fdb55b997caefbeb2db3be6daf7f7fed663fc5bc3e9563855eea76fa7f6e6b65db2adb7cdf15a4cdbdb2ded77bbe957bbbe77ab7ee7389efbe9f48e97f75a2c26cbd158ddbbd5c2eaa3fb9bf7a6a5ed85c3619cd6abf7322bda1c5c1999f62eee6d4e2e0d8dbed2785b3ac7a9f6baf66defb51fd85af7b86edf763496c7c7351df6d3c3fc8ed3765e97efbdb0557c837b9a8bd5dbd6785f99afd968ec7e67b35bfa9ec2524ded778f67b3dbdbdaebb9bde33755f9ded36e771ce7f7bad7c911b678342f458f6b71398ce37a85b11fd5cdadf3bcf69bbab9e5aedeb6cce5fb3baf9a93a36babe2dda268aaa9ab2d5e6616261715150ed73cd5ed3745876b305fdfddbb8eae695eaa4fa3b17dde46632f955c4ae6b8f7b2e771feb2ebf2484aa9943954299254348f5bed7b8abe3f8f15295729427a8fd013a9712dfe10e502ffff744c2c4a5714a9284a5180787d9cd3b46da9e17f3f3da7b3db6db6ac2e4dceadccac8ccc120c8bbdeaf53e6cd826941ad87abfe5a09c71793c4cd6e1b095a15a2aa354f2f8b4ded354748e4f21a0bd3a5defb7361bf4a995122aaf2a7deaf098b24b104a362a65d37fc2820f8fc5f895a6c3a610a65fffdff8deff3ff5fa7fdaf5fff4c1ffd3ecff53075306ff7f9f29d7cf66a94d1cffff714cd460feffade8befe6333b238b3303baca33101636dbb0e2b622491c915139f6e5e5ff77bc92593ff3fbd24c712123d2ec6e796ec2da9b084fbff1742e3851a9a8ee3a9933426017f0d162fd4d005dccae0e0c2d0e8b8b2ba32379a8c8dee0d4d0e1b0ed7db4f60098a3ad945f7fa198da5d24eedbd557ddd7c2d46f3359dcdce75d1344d0bf0eaa2b3d9afb9ae6cb687aaa4ff58255f54254e4a9afea7bfbc683adb83454d92e37facd5effbf4509390fdffb1dc9ea74a35b5a76b791c4b2548534d65b158da7adfbb97b640d77d4d46d3b40ef69b2a92ac8104f17f2c929f23638ef447ecff8f98fdffb356bc91bf4f67db1869604bf5788edf78b714fbff74ebffbf13c7c760911b7fbffb74edfdd56ab5e530afede27b60bebef75dcb976bbf70add5f6b7df1daebbbc7e97ebb19debdc317f83c7aeb2b216f8d57176dadf6de782b7ad77cbf7de956c8d0c2dffe23cd91a199adef771fbaee7e0ae5c599b93bbe5729fef642e395c0369f0e3c7ddd7f3775fcfdf7d54c93c6a8cc34f8dd1f7a931ba9f1a63ed5363707d6a0ceaa736cef9d446349fdab8e5531ba17c6aa3904f6d94416dd4fbd446b224241ee04fe581f7a93cda3e9587d6a7369ef8d4460c9fdac8b733e571fc1f43bdf3d78c473c5ef9ffe335ad5091c04110c3a42544ff13d0f13f1dd7ff1d8c92eed0c894b0866196fece5448d3c5b7c01919e5ffeff5a93b063fb64beb6e3b2090bbfeecb41e17dbe27b1fc6c3f5ff53a4e9514f9d0e2ddd5be9239583cbcf5ad0666a342dead9bc6f3922fb26f0a743438f703ebf631fa53c267944f21824d771ee95ae69ea63130e511c9b9d541c7bdbee5df73f8f8e01ff4f85fe9f06d537f8ffa980ddb6ebffa70184dc0872c3c7ff5f5d3d2ed680dcf3083405708b75399fdeabcb81fb1acede6b34beae77305c9e3636fd61a3d610fc7be3ab38bf7af7beffa7d3a9cf278e1ef28c4d7e9f01644688dfa360838c07d41946ffd354c7c83f05756c22f3ddb6b67bf759f1713df9cdbec5f81c966c87c957583daf8fc3348cf1ff92b962322ae30c46b00fc10eeade7dfad86e07c00b3bacf358bdaee9bebebff64df3645ddf76efba2d5df3e2bb0fa3b13c4ee6bfa8a6bab6defccef51bdfc5fdfdddd677784b35b5a59aea6f7e4be6c5783fdecd701cccd7792dbee5686c5d3d667ff3b01e0f8fe5e4ee5eeffb3c16be7df3f160a0168ad9371f16ad00a7bbe80a5bfac1560e0e8e8deea2f1edff3c1f6c5c8cbff71b8eeff5b01cefd5690373b417bdb5a2b75b1a8bb56f5bdf7bee168bbed23d7f45f3f8584e8e7bbd921a5f61ed54572e999fa2a3ecfca6a3f03ed76f2b6d5351a8a0a268a39e90f356e6d2583e8cd77b6f2d87e96b7edbe3ebcde5f1aafe2e57d1f6bdd75e9ae7a9f27aaa36a3b1748fe75453f4ffd39effa73cff4f77fe9fd601f3355a5e8fe5d8eedb8c8c1feb73775fc78d6b3f399e07f3351a7fe363f29eae7bf3b470ddefba191fc68feb369e8de7f96f2dd6f3381b1fd66b3bbfbfe408657d8ef3f55e36c6f7f9fdf5bef16465b370ade3fc7d9be5f77ec785ebfa0687e967fc58bca3f16cde3b8e87cbefee1dd7f37a1b6fd7371a7fdfe51a8eaff93ec7aae3fb9c5cf777dbae9bedba193faedbf631be8b8f75be0c040e6d8f73bdbae81b1007f1f57f399c85d5a7d56661f55959513f34f83f0bab4e9fbb7bae0716ff3b7698f43037aec5d92cd5030f9dfdbb324cf2cbf71ebdebdeb05e870dbffedff59b83072c233ce8ff0449198f0610d913f175d3ac63d464cad2ad88cf3ca5ca6cac242ac4112c7d7b69d4ded4a949bf29b466cf0a8d88390246704c9d1829e20080a89f74de54e73c687ef8b2388b8da141695234b253c01fd9ae8b199c8cac2ccd8931f97829ea336b1df4c43052c0049133ccdde3cedde408c50c8d66d41f3e7c2469d5cc3b910bb2c4ec0f9b4d76376a0210334d934d104aa9d0811c5174c4c89b3f1e6d489046a05167ac4b8832152bde353b23fbfc6614d541d2b44ac134040833448ac5c4a44314835a82880416cd956100d245091711e52304d0cee8b04936ea3e1168ee72919b57134b775565a6a347163ad886425b0c3518f54c439e89ccac79421e7a88c09dfac2c2cc091b564952143637dbec390ee9d18481069123c0253eae430257668754da2f8d453636ef88384c2ae18356a5f21634656b02a41a20d5d85f2ce10402b5193746b345941d3f4a540ecf24af1c1073f995c1560681f38cc8c08a1053a60c88bc7c273a709c916143b212aa999a69b8a20406070f851268a7128317667e542410a025c1b55b60a430436de82006e8cb2ac4285903812543728ba31ebd9a3b016790251bbb87f189b4c22a639c75707c224101394c055186287e79a2f40271213444b751635214c918b12d475e6059934fdc6c8012a0ac85c19acacaaa102204bebc864617884db82668ba1e3c11907c8393901705e5b8b447714b35a3cacc1d25189041a1d1065667a9116a680e24e3146d924427024de2cb8bda0c2a4e7875497d1f5ea023d8c788152de03818dd25490157925ec5d47c659a276e8e9a060f6c728e5fb97620050b9827cc98261c59446d889cb0136218d626d6c318a3884c1d3515745e7555de4c65a6899179a93712a7af0a211e0dd9f03e7825ae5c60aa83051d31b5c282c38a4093ddef436711a1a0dbe612af3050e8e05bbe1f7e4449eacc6b1ce166c056b00893b830b14dc864b7c0326b075190160ade78a7501a715144bd40a14e8e1b3cf741793be6d49721298fee43c2828e280bc52e881ca895034b3da612f50b64e6d202cfcc0077096025d2419ad724b2440f8906c970e7439322485b467b8c360129ca82afb8b173c64fc192d11b46375f4035df987ca442b09537446b5934ac18d2a76bb45c109a8261c31212054c3048e2043cc923d044532f61b64a7d193aad128828a78101230198a0850365e580661c35575816294c2a05b81a153d024df193a7f9c4410911076f8e4758c4a9721679e22668c6d45e0520c621362c08549202d23543873c46487a08b193524970247e10c865430973c5d595d1275c0c48a8a27dc02393db8e110a06918554b1629f263cb249023798d3e6b9c94d9d8d3a3082f338b7d506b488ac886c436a8da361fe81c5891612de2173c1e96af4cf010227192140c1629ef0dcf401c1adbab3dc88c3e69012442e35a116f5328cce8ce33c35c288efcd51b973a709c3141cdfcb26363b520ced1224d429e9369a51c39418cd394a71007e0cb81a7429db93324689da82c5919e34ba69cf93244d274abadaa6b21db106a61b666441b6b0fdf1156150848306dd49a8ed9169e38180e559522335698cd3e1568b1f30917b7247aa5b829814bb769b1e1fb4174d1ca6205f1449290a7b829abd7c4276f9aa640967d8a39348dc3338b5e04928e28686f9444659e8d21b244427e0d860cbd45b7a8488b0e312654951412f2e859e9cd3d4a71c9c3a174904e890b9a1e1a54503945f0a150d972dc9cd4181354508c314ce432f31b400d411f5829c9d5134a618a82a9ff9f91a50209168415757264293bd3755f0d90547224a3f7c6e3cce48c0e5840d85c2bb2d661551d124191c62b07c76d95928f2e382c102127581639d17295a2cc57757ae548191458929c9884716611106d122d7d6d03ebc41712379d82599e2c8a9850b85a7a5c72f472d72e87d9b1900dca85139844ae6e35075c352d0dc88189527e2e65075d080a5e869c67604150f36227168105930c62ba479243547821602fa9bc01a573e5f27e5cfbc468e4e64628dcd962a02c046d80d01e0840650cd4a90a734259e44c9dc71a68607231f423993364774448a78f2e85a1eea66eedb873eab4d05558fd59ea01d1c389cb25fc447442eb7ded83df54899a49e3022bb3c60a5db7a1152b74f6e57b83d51357720195410b224f5486087830486631388c2ea86b2ef76478aa3b71f693e0c1561c17a935bdb2ee6a5e1222a743fd2a86c74624c3d3558f2e10800aa5919035b983cbd82d82070e2462c36dcb2e968864a513881949fdda2042636d9c3f72bd993f4c46a07dd3543fe46b044192561307c981ac86971e30f548d0797d1193b4a04282bea6921f601c4881c3aa02c5162e594592691693071c5ee13f08ac000cc0e99bf964e3802810338a4860d8ecacd4a708b01442d3a9490c396569702070529412fdc29242663fc8640e13d7aa1d8daa17737848792a8812b356864a56093b3c44932924a4be440f3f600267481e874c706118dd21624b4b5d232932f38681d88d4b7a818e3942650289dd1e3ecabe4ca05044f0ff4858a143d02b7550adb5196835c5224e0c2d1250b2e365d042a87ca58615b4166066275128c490ecb232271332ab5496e38ad2736996fb4086ede9082b30024725046d891dde48a1a2368549050a22deef22d818deab50798118f0864687e78d2c0f0a946eec9014d34530083a2ca5631858bf70836fa22296048f14d50cb60672167794dc9bc0843a8849801bd084f29ba89585cec70ca50f9f683caa396a3d7ab0b7000073da35d6f0a95311c8c62b461caa2a0f171e6a137666656507828c0a0130b840988a44d5478a4d8f4504401be018b1402585b0c8c7a74b8105397a458a0cd0c4faa412563540d8a1c602850dc21334654b1a00b9f89260493e0b43e0c93b790e41130cd01708a52acc0702553a44428a5463474032591243a845ecaf6096d973567b41a6964c930057666c162640810cd1c600c961102c828c2068526d04ce411e6ba1301ca680680a4f288cfab100e3a5f040973f46279335cc2c28645111d68761d66c40d251161a002919351461f674470493e6993d640025714121c1f865fc06a34d4a46a9838e4633896b83ecb348d591d01ffc251e00056501071dba8acb121474c18c4d8090c3f07ba20017a39cb91a4b462050b1a4269d5c11f1636ebfa7783afdd9e27ef0ec61c5cfdffa5e82e156de5a7fa1c1787f13ec7c97cfb0dc7e3e35af7e669690da8feff0c18b9b6b2d0665cf8fcffff2a57e7ff5ffb77556520f6bf8d85bdba5efbbdd7ddecfa46f3bbddaa5c0dee71796ebfedfd4d17f3dafd9ec2d1aaf7c264b13d2cd68795c3e37158f8961b8b7770352b44352b9b559da2efbb5bc54af2a76e2cc72a5661150bfcbfae74aee75ebf8a55c5a7aee65c9156afa25c315e15fefff9c4b6d715cde35aad35421b99d5892ba5b1982eeceaf556b191b99fbe7fab5809ff8fc564fa06f755ec5115fbffff57d0ead5cb95c7ffff8b7be7e0b854ad3faad6fd63c13d98afd1aad6aa02cf2d6ddf55052afeff7cae57156c7f9d5715d03fccb35ae588b5737ccfae6ff09f8d7ffddd761ed775e3b6cda78dc574f50dd676f9c45f5efc77dbf7b7d686759dcb85459edaf9065958647ebfbb3c2eae4a695513f4f85a69fdcdf36136bea02f9b1577ffb4ea16d485b9b5de1697de551682c4f1b81ed7daf1b8d6bef1bce7ff1f4066f7fe2b9b0e82d56332dbff7f36abcd7e41695964e0225562050a4b0d6a37258e0904d6a13112d11507305c307b08e937d50245aa51601afeffc950582dd0a05a20a84a9756693a555af4ffbab52a1dae4211f9d527caea9356f5a9faffff19fc11ac3ae5055a00f7803fe5bf2a93e58fdfff7fe7a7efff1ff2ff3f3d5f5ddaac2afd55ab9fbab76e2ded96cbf1b5bbdf756e18dc7def660dfaaa493cfeff85bf4a1d10d6756e9e7f7dd1d62f3b4dfb65a7d9b75ed682fbe6b55f5f54535dddbbcecef1353bc7d76cfccb4eeb927380b5b595b57fd95d7cf9deb3d3ec1c5f7bcbf1bd5e0fcbdd627caed7bfbabab79de36b768eaf697191f33b9cb5805cd4f5ffb7d3b21690ed34b431220460be4623a0618fabf71a2ed7ddca7958f94fd75687fee62f81bf0a00f4cf5ffa3f7fc97f1500e7ff3fc04f66dd9f33d5fe9c09e1cf99577fce44f0e7ccf9cf99407fc67cf367ccd03f6372fe19f3c99f3125ff8c89e2cf98827fc6d4fe19f3eccf98577fc60cf067ccffe7cb327fbed4fcf365933f5f02f9f3a58e3f5fd6f8f3a5893f5f76f8f325e09f2ff33f5feafdf992edcf970ffe7c79fdf325d29f2f7dfe2c85cd9fa578fe598a95242221383d00787816fcbff3e5ff1d13ffef8cc5e8417262a40580f622c950d5776be0d343e880d225177e8c4c311ad1f9490860e58d1248480b1de08c8c2920a9ef4f1a62eb1260d3023d023f7625f655feffad7e35c8f0178090d36cd5a0ba1a14570dd2fa74564b676dbc1ac4f3ffb52ac0c9ffdfe85705487e1a4beb7d55405feff5b82ae0ea7feb5835809b6a80496c5b3500d5ff05f4b9fb4702191ffd7f9e2eff7f9f2e8c77df7effd8fdd4b9e9f9dbfea1fb9993fb99c6fdfff7bd6cefedff1ec89f083f70057a1e7bdd2d1c269bbdfdb875f1b1deff3f8dd046b3adfdff79aefca8fdb8ff7baa786fb6ff7758fca4f56cf24429ddfc4143a36327c5a76769578e8bc7d08183cd71dc8f93ce23269d329d0a9fa2b9f69f3327c44ed09cbb395b342e96a386bfdefb588e143935bc7224c8a9c699b38b28f2ffe749039386e3e471e2e2a0e95e2b1f0ed75d522bb6e6e18066fd190e231c301c6b7fefa3a15e348db5e92ba38cd77b1f4f2f47e7ea9f9ef9478dd120515251cf2f9ace8a021165a4adb4685994ad0b617e03c7fa0688777633c68d90ac6ddf7c0d36b3ef5defe5c8d8c8a173bc4cbbdfbd5eb7df70e0febbdf5453d9ecdc76bbedcbfb0d77efd9ec9457eeaf6ec35ab53d4f166b69b25ec67ecd755979bec66deedf5c1c566a5c87ef2deb16cde36258b9a8fdeefb9b1b45f375bdd5d6785fdfd75264a95e2aefbbb7d75bd3bb4e5ff5feded3fde6c4b94edef273349617dbb5f8c6fdee1e27f3c96d731cdcadefa96d981f3faedbf8bee6f11adc6fbb57f9db83baccd5dbcee9fd162f27eb348d2d7369ac754b8fc9f9b7c66d3bbfd2badb59cd0d876b4bb39f32aff72d17bbf91a0cf745488cfd2441f3b895deebea61abcf292f66f27bac7b39e225871715ffd359ba478abf83e98588dfb19ea39e55feff02b25fef98003acbeb689d769d619d5a9d5092213a8bba908ee982d90549171e5d3c58e822ee22a14b5a176b970068ae7022e17ce434e4d425b538f124bf7082cd9c4f5ce270f9c2e5924b10c9003dba7c2e17b8fcfdff699ebfbb7f653d5958d7e1c2ba0ed76693f5e4371bafe1c4b658cbf67baccffdd56d5804570ec05db21c8dc5ca5e61d15e1debb65e6159afb068ec175be66ec3e15aca16e35b3abfeafd951feb3dced3384eef74585f1997ccf7f5198de5693edffd7aeb764b7f95b9dcb0aef3b8ddd377f826e3e2fa8beff151743d268ff5b0ae8ff50a52dbb0aec36dafdbed16cf1b0edfb39410bb4e77a5a049f97f8ec2f87f36abeff704015e5e341515d514764aacefde6c36aceb705377363b17252f4ab5c8ffbc9ed3967fff5f2598ea5aba85751d4e0fdf613d2ecfd36628fd8712f6c7b578aeccec6f9cae84ab1c50d943c986920c25272595322519258127729e58f974d69ae3498c27845632379be5c7a8ec1cdfd3d255da2d8dfd62cb686c9d3bd9fe1d71b8bcf75dbcbcf7f6dd048a9d93ffea36ec754bdf5c5a8a27a31560b5ae62f4bdd764ad3efaeb4a2fe8dbe3eb9e8dc6eef1751c8dcdf5b2358d1632ab80fb5faece4e73439b9431f9374f6afd5f602bee4ac8666f9b1cbef7b1b82be15632e77f3d255594c8a84b526356a2bd8abb7f490a93903f6d8bbb12f01a2eaecf77f237c7914ca5e9b8edc56938b2b4de6ae3523b590c5b8f79382c6fe77d389c9dd772b5ded3f995d69ad9439cd059dd9ba7fd342d2060808cfff7f9c1fdb1f5b1fbe9f953053ce65059cbf7de140fca7a6fe60136f3b8fa3bb9fe578bb5dadec6b5e41cd72b08466eb3444efd5f4487e79f25e8302cf0bf28d9d8aca3eb6ff927623f613942ff07f5b17fc020cc39fefeaffbdade9973d0ff17d896efbd7aeae76b86ccfcff7ff3a2f19f21dbc6f5eef768e68febdd8fd6fbc72bdfc66b38febecdcae51dafcdc6f8fcdeabe76ebe6c97edfa96c331db28fcffffb2d6ce6fbe4651d9aeef386c1a5cd816afd6dbee3a7ef3345fc6a5f0372e957d4f9de93d7ed77e7abeb78787fdb05e9ddfc93aadf7347fb3b58d49a0b154e1708d95df783dcec9545bde3ac5b5954567dd7b7598cbf3e5373f339232b6a1b356ad6e5f9d18076879abf6eef5fc45103a8b38bf00d32fc0fe8ffa3ede1fafeaec82c9bfdbc62400409a5d74b9b8fa5fdcfdd386ad2d3c3f5df6336205d9e7b5badd22dc82dbe2aec51a590baf4537567f5e344267d9c4dd3fedbce8fde2ae049f47453445adff7ff5cf8a4dffd377f9deb371bd2fdcdfdd15520578e03e1ba6332cce580c95be195709c9b2c918ca6312b4e9ff4fd4c4cd86b6ffffcf7e09634cb1220522bdeb5e6d05ed8c220e0a36ff7f9bac36adc3b3e6ffe998ff3fd0b4744ae7ffbf339d330dc3c3a6070f95a91c9ecd4f138c5a3dbc1dbf5930efebde3cedbecdb4f7ef0150c2c455efcbf56e79acd7d561c378dde737cdeff8cdeb3b37cd8bcd96c35df20deeb16471798cc68e6bf1fdfdd6dc3b2e445a882410473ef6ee793cb51152822d6422387a040c4817ec1af858eab994f96432c04488302d22efe3552fc7922f694217b1d8f0faa34b5e9e682740c32fc280c56153a3563c8054daf6d305ae2e4c042927469c59facc406439a6b2c6ff0509e323dbedd07c702d752e91318a9b9004ec230b078286615d12211a91b02d16a4d08872f8463362a3a22cc61397695658dac02aa9de0c7c203369d08afa52830d448ecba11a832fc6d0507bf2427fd05e5d203683849482c15c53b4a826c7244c8a6e8ca3ae44cb32424a9aae63421e080041c5c586eb90ce2e8098d40f8b89560f620c81616047d9a3ca856004243826614ee10e477af4f30692e96ed2c29de25d5b6490541224282a4789ae39898941e081419ed19d2d5028881a57467e68a4574e588a70a4841173d0a4133881a0f14689f24deb2630c6275fdd0a2c73a31926488c100845a134f990fab37064146a04bfa114c5ab05a28ec639a1e4f2146645a0ef1072ac42680d0820327a13552d048e70f635093c054cd0b46640241fe59129739d4a52264caea3c808d700054f728afed0c2b41e6380aebd9d30804656a5d4e28451abcac00fb82e08370a19191c55f96c70818ac85b13a139758828f6d04209c1dd7cb1266cb905ec0d87f4a954a92e80f8b72ac40071e20890385b302a90da24f9057a68c674f9593aa9c53c1d117d51bd99dc01e24c25a93e458c992a01253a04d2b408edfce432c99641e8b10d1b12143ec17c86303452710cd65433198308c69b204707bc724902efcefc2551fcb1b458e42e48d62b4e8a892549233ea98124b5ab33278974b660b101ee12b4204e611150821754882ca96605e81d8d87721499c0bca264702b32e2b523658c8f52891249514abdb63687aee82806d1994864b1a2b1a5ade0e84b440a1d5d4b60447a974c627054f97b821288008c55344a983982d4b8345cb6551873ca381929e1b5010594a22d6da83dccc4d031044d51038b018e2b4d269e3e04e1e3adc2c448780c6c1e0da95caa39a99b3c0452d6dca23b23d4888dd22011242e092c1324a581c965509b0f4e62391a3bbcc09275718491fd6216e7378341f870c086a0074c84364a1f53b694301a1240efc9d8691148ff9555309426e6244ae66ef6e0264a104287aa8ba058cf0c472f1432cf8df3e8091d22555b0bf3e83a9fb1130c022550058b5b1eb324cb538e1039d8d48f8c4a11425b1c72091f5641c44032e566a0c7593f649e91a6663f6a1c730bd96c3a0cebd58f1b00b41901b5472000d5dd9335cf13381290501050a5a85d3c2487830017fc3a8c3988f1c4098969c411ec9a275929d6f0d6931f0d4089a84196129484ad047850a3e047c1f68752914e1c4ab6caa09c362e9069e290a2062985529d56d513326a683e0323034152447f5e8a96d08589e807a2c0d9f2d605b584b7f3634a07d86410c6999b12d56d5652120b383e645c062a30fce885412a2921ea926482ab059316526b3a7f8de4d05a9a9326821a3914ea58e09083c862254827a540b045ca8a30abb28104dd930d940b4565403e372051f146ec043241db219097a91149e6953a7851695e5e343f07792c54a628348a5624f900604be208bda9ca453a34cd0c2115e9bdc8b0a48810321d129bd8401ca509f1c1554185ca93434ec721d4188d642b89249820c9e4303f03a1346ac230ca394623cd8e449591a94e270e9ae2e0214e3808aa1182c9efc45096e6e48c1da2c9f9a48b8366a0f606df6419d80804250ed017dd17457494e8a42e5b9c717aeccdb22a5ed86312dfd00909565a988d504da1045472ea70438f33460a2b5c233a44861cc83953a38266c76053b9cfc71397c99743387b5104c1d0ca275346d21ced78076f8d98c34cf9c311136b9c6e2827b2e378716907605ed1951949399a55500a4e6d22932650a6d19850376ad5e5680c28e8641b3234c6ac19b4b212217840718191fb0411877d0a665a80c800fe50126c5bd3626bf75d30f802a90a1aca1248f6d704d036a3206f4ac1dc1843200e2382c3fa84f3aa6162b4ce5301cc0807b49694c654509a03660649298ac5c150076790bc743044aa94f261419611d5d28c9c034492e13067fe0534e5664b99ae8692ccd29033a41382570386e64a00f558da42945453e9e3a49344001f6718e3219a0eb022a6a12683f60a186e76ecb44110df7d260a834050b28778070c8a392c3fa77e12182c461894fb102a9754047a28fd8b3448f59064c4a3ac21a38b863b0e177ed38fa399b9054e06688161ffbc91f13f750f889ab13c177c1624e1a624e0fe2f4ae3e40e53704dc41c44309f1eecff261e9aa255cabf2fd71e2b1887fcffa96ffe9878326e7d1ca13aeb41a91787c192529851cb3907798cff7fa72ed59a25793290e010f2a69e0b3bb8595473f246c9a99234baac524585b1e3a9906b88380719b3c399ec9e4c2d178c4831cbf4e70f9cff14abf7276d850a3a1c863e652a92d90cecf9db0c03569df125caac72710bb9e128880f1fd39cdae3880f94883486409107e22a19bfee1c308618b3c5ca052ccf3861b01408bc2125c60aca08c395a152163ed0520d3b62c09020dd00c9ead11202a2ca3ac58398b8f43756ced24292bef23cf1a2267a81480de64fdb95124ba09a9f69e0927438fdf908012601744bc28b4989f8eb46a965b76193b168499981e785a6bd3709b4a845983c215e2d82015b4a6cfc8c5a7ac6a2c128f349c3855fad60f8ff07fb4a1fe9ffffffffffffffff37c2410db124fc88248004d2352d0d2a60cc745cacdc9c614163a983818b1dc723509c14c83d58732785cca0e2744321016ca0d103a469df26cde390fec2f3a5090e512bb3fc581931d59935a609ae4d914b84a6c037340f3b7a50ebc4e8da354f95bb48ca0e11750408a0d13a797a2a0283091435cc490d8e1255c68c02719cb107654b8a69ca1dd6f43304253b1e12fd1499e42be276da3f027c8ca8ec50aee0b345da2189480a2f0022b86c2c8cb163b261cc2f94a94a50286d4c44c7d217481f3312e93e89e28c90820c436e1b5fb291306cf29123c901d68e155b2346293b9d3ec818f8a2b4d461d0a94e9039ed8bd9c5b01fb7741225e6a082a4ca900846aa3e274f6602ec2109d1d2417f42050b688115bf1934829c288546a05a13e2c4881a58e50944b8cb204458594230e79ab8dcc0827400b3302c40f222048f511918fbe46911b889a4c00525b64e31b93661242d19c8b80ca119d309c5381b85aa395b2a3a403d32ba21c3ee88c9d0de1414d6b1da0f1196656ecc0052f561f4d3440e90107a36d657981370f6d3679da11fa0a3de1bf11ac198952178d4d697a4f648e3ae216a563e7060c66595aec2a285dd1408470b3667f135b3f0890a0803196493119bffd209ad4cd66894c5110e8a19c5f2d9bf40a56d0d4a98197148061d1a93762a92c0f8f17461e485536fe4e655c4e3cca09a4a34154ec43f466010e3300a0858d1eb04a568037d0ecc3c39daa07c54a904617502038237bd362db9f3fcc640237266f40022182c277f4571aa56302703c8fd903e2d87109a82a87f2e18c08d225299320689c482a12f434dd4264d106c910170e8def920a4a238a568c403450661f8811ea5d522fd0b8c6ed21a2885d3a225624f3a2e922cb97828c2947b4571a8d34abbf39a2a7e557954507420cc9689379e90589c18c000806c4d3129879a84d346429636208f755a12050c4b95347a00b9b2220003418ab2e2841f5144478032e3069d702640061f77aa3bae209d01e1f37592c1640b0c05bb1d0a5dd496a6ce34b90066c09b310a3ecc28f9718293e82e51717c3825448d09ab07a991d30d249d74928d071b318b304ae9d13ac724251070b23a3b75c0c80045d0c696d56d02141a510829b0287a0035e27454e857ab397a7327e64818255c58d12c2bd687165c553691750e46be0c437a1c01e275862c0394551ee0129a08501bdb1cf700f0091947822ba2c08925e418c3255c67aad6eb50d5fb106cc31c5a64c8197eb1294b863ef5606f5e37b49068035770d3518d8a3a02aa81c5e103258bcc5a8cefaa27d5cd50a878855e019568289b18f007450b0e27231ca4701b64e10393623453930e893a23143d985eb78318abc1389f1c28006ace5d45707d11dc530e05218a52a24a209c8292649028a3e12ecb05de59d3e6051aa30467386c59900584097767874183b137d4c81aa124ead4b97d006208dbf033c7a629af4ad40fc23a10a2b2142011e68c0cb66848cf1b1e04ea74203f91946365868d1e754a439b2713757039078d0ee48462dd30f1986115a6419db11a400228013fb33b8ade6870a6f9f2e243daf4c7089b145b47520c1257f6b874086f31430b337e235a9884fad49c54b18166346be940f9cf4420125389a608599a9420b7d044ce9f289754a048853dba3c30b7a8c621486042be4b15146cf8a9ea0157e35803af8013a384a8106f81012d91465e41040a68a92066416a5c53c7cc943c6a94362a63803cd922a06499833074daa389b03e938140084f1c11541b81353d876b3017a338496102468f2445cb9d21e3d18c65a803c7ebcfc314a5ab5070e809c43156ec3aa26c9a8f6550825119a286bc39903608a18da7905ddd518e2d126f24b37041a21103270ce0078aea8a49513e8a8086bb0a30443b0490f1e029c9024902644cdc7a13b57e2aca00b5a306349c07368b50f71637c31584866ed59f29fb511f938210175585a4b302f709000f412c208ed6104870c3878e852c8e1113cc11337e98e9b3f157b5e30e03a269eeebd9e16c1a89729a5b7a48b6d72f4e721adc4005a794c196933eac1a38c8339acbdae176d958c60be1dd0eaf0c06b450c740d06b2c5c9b91a5f3ca29c41733994d310eb782a2ba2022d6cd39a0a629d4a7288c030c09de582e4de0d24b41352aeaa16a9f7819f7f0f254b3c4cd9c2d284e8c318d0ac912c573c09dd50d9b2ea3c06c6211a095295a08c8ae88d27c831021a34552160f59530404887140e97da1e11bc084e9adcc200f23290192c4688db83120825651511b2babb5240820232f64a9428b539254a7c791f31469a5d4048340afe5cbb7f418442a244c5eb6b35b291757b4d34684a343209215a90c4b177a568ed418339134713ca5077006946e789356754af35912ead9d1f941b468506a57a47040b18ce8acf04dc18f2c50d06cd280b1a4e94508e98efb292a03d1ebc688291eea102bdc9474228a926d926d49591bca084983a411caf246218cbac07602a194b7c69e8e0f479d6a24647091e4d2e0f08f916aaced47158b13d7d0d1e791598f3aca0589050e4009816620a1428b8aead60a0856a6121f8187a864eb18be20d0c51405bc2604b42a66c4a1124905275582a2901452a8a1f71497622ad0aaecaf8394323a5734ae376ae3a2dcd602c4de9c670f042db2b4f13047729861f8a031abaa76a699c28df79c1669b4f060468545f2c54cc6898c101c8c30844e922db524c8fc92b32992008b95398adbe6e82b337243939a8ebd2b11944d64e4e8d81cd2c06546570faf6cce8eac9111679b98004701c4942edd051941d3849a2211c6d6d22e4a4d87318d1b6485be26af726590d22b1240c1000aa22434392a9a117e3a72c125c5e3080443def859b05289002050c1c18491143b7450f1b87237ca940884a6b44683473a2e96dc407d882417756d38a1a532107e2accdc34f123475a128819717eb4099f2530b06128888cbb2d4b681085d8916712d23c7ae3bc52c671445796f82e68ac294e5822697301ccbb2049404da4690388110b5f3ad46ce108932cb191d209cd2178d4328467e6cf7e11493466ba2225992204101a296ff9f5e512294414143e18467401780c328f0c2d4e2ae950203824c00a250a9b29933325c6d8100db0809d7282579a641e5344b250c10f89280b298f5136a56327240c59589425292511fd41f9487344e8c05d23dcd79c0035610e85548c3dc8c3eb5800e84ed09a23153de7a613036ce540efcfe5051a7ed5c112496ea38f5029b6101a16d253e69e5c70b168f491424a908ab642a38da98da3a84fda71c7e05f8e18161a1d6dc4f83097615103d3a90b550bdb04106f484261a73018e478c0d02d2276f261a3b210e860144954c50b261d062d206614b9f2c4868f392f0948cb58d567042c6238c8416294d382a535a22a6f588001d4ea300480b4ca08829a9c8c86f205ccf0d60a98899c21544c331f1c11a4f0d273560e50289ab5d194410ca45b4e270b9992ddda971e95724554c651224c29d08072a87998c3e959a19e09d5b9cd7e4430b220ca823450721ad36626842f15dd30d60b48c09af44a28167d0ba53a407de95b32fd0c8b86588091a484bb032c6628880a931315a8544b1e98b088e82da1a78c78421ec244b147ad80a84ed2d20a3785a45d36128778816b2292f4a5a506e38b01044415d2312b641820b334029114718490634e09c7fe03aca0442b9614e3487822e6f652fcba00d4450009492d06070da9972f113c43b480b523a5340e4c00a90a7237e24a8c440d214e2c445b19e6c401f66000a70b95620020013490c440e57c95b6d3d124c91d4bb501704a722eb2609d4100f45b0af07c3521ca80aab18172ca3c23405cd11831293124a51c55cab528ccf1a4499535acca241c22fc2a911a1abe4c280341732aedbaa20106ec894c89194d5855044b08042dbba674413c8a53a431c5858ef9ca2e7ff1d3a360a92a2546c2c9cf042e73c46a664f32bcf1f28475c4c5a0c39ac407868b9b65bbcd9d5197c79d4f49d1398e5b5c006b9dd5ea8cc28e078fab45e4b270888727cd2e4e4e16cc4cb2c92a2133690057e00d71c2d148cc9362b1856409a92b40849e393bcc409970dabcc4107e71dca00a75b232a6c972cab515516bc350244a7211a819282afd12364742de16c3d2263546ecdceaa8838b4616f2de68cf4b86d50c6481324d4f63f3925ad1fc33604003a9cd0adea21263d08c73b51c5dcaa9b1aa18b10b49a3322a0879e0bc9b33244baeb3c011cd4416a1e1f0712ed242e89150cd3176a145547f7b164b49346d7c7e113844d05c93c46b1e227e3552794ab982404c1836c8a5cc280b7a3735c9bb1d35bdeeecdc249a24649c8a44130984f172430b0565c420b58132cce2acca03e38147caa72f8c97252b31152024f66e9eca88453649645c41a4a7a6f15ba4b26a422e400e0b81a05b2472d87207871c0a41a4a22c2de539fd2995784267921a87cb8b8584666c7340136ab44c276b31c8923a47b0a1955668828ee23c7e4180d1069050933382a011374faaa4766d981fc6775051121d39af7ca4500c200b8c8985f42f122198737f977e478551b4a01c906ac288c54a81444b0c02aa5dc2b039905840020ca8a4222daddb9e02b5461602f97ef739fee3ff1f1f92ffbbd56ede1cbf7a739cc39ccf93a3ca01fcff27f412a5cd8632948c848f16a0ba1efb05847d9460a01840a42214cb46c80bb30c211c50c504ea7388388865ee4b53e6ae65b0f1c69b1a18dee7a09873edc637d133c800b4cbf09317077b9ae83858311a29789948994715824d5085df4f64012f0182dd127b4996523c10b4827bf422ae8113483aa02e08efe649201301389c2ca96a108808e4610f732e4ee01d0d31b36a07d1c0031b2e5d00fe682da8d90bda21a7019b8521649d19148830b3b0a1270c8f072f2a16e030cb6c65536cb1b014a6acc0e81d0540301b7c98ac6784803b1870051a08df8016407cd83680d401cd023cb870b50b0158c438c7fbe1715ce6a2f544801f605b7906e28b072528bdcafb0036ab1a8c58e5aecf23c27e416119009358943cd19d3f2a815b63350adfbf16260c7bdcb872fcfbdac852cdb509f2977586b200d124a95f691a98961817797e94d9154bcc0c46fa99e0222d1ac94ae0a7ed99bbcac930f69bc2ec0361b538a1af4d16058d210493fa9028e9ac005813e9f3f0058386d2cdaa6f4eee4902e357883e5a6c1092ad54934ca687ce271294356449cc52373fa024e40b33eea012e22f592d86954e381d41e4a4374e421e4957ef456847d6649d6e8fe30c0399292a5cf4642a97743d60b50f23f3718a5222f541699a50d8cde0c06b4af882a31ce7c3c3f0fc11f5a4cfe4c32c8cf8ec731878aecfab4cbc3e293c8f9b083e501bb44b51b350260e168e3d455ee921d18d879d8b04008c31512bfbb574577cb1468e6fb47492aa24820bdf922cad2e8058bef08df831840e89bb3d3e0925acb0c290eaf80cd440a0e473168dd3f0baa256e298b110aa04494b6ecc8d35d065c8160dc7c67063a525452e50e611eaa08b28a488a951f448c132be03465e3a2017c8c74f8644bd8c295bb5b7d8a7137d26a2292268cdb7f814108c5377e68e8b6252c8c14098f3a9c575cef9aec81fdc785a70dd0ff39f023b263f4c0a89a78cc58b73542225be84117b6de0a8147b2b23ce2a509755e40d84e9f0184084138441f889937009c4212c1a3c9912d693d45b3242a8302cb564902bc86b6baf0d8f2505ddaeda3bb26748478895b547644fce4f859ba9baabbd0aa165761a6c1021a0428f345a570632802a1082a1d1ee7ef80a691590f01c62947542b8e71c08302399267e83ee1c2025bb06efc554b160e14ec0c182783e3ebae9c00528f90242aaed005ff96e9063e4ca04300c2817dc523234f01e78ab0c90154a2216f08e61153b20bfa36f94a1a735340e94f9a2e0e331c18c93876fed66840e036a56bed6218260a6641cbca2725290a9d0a2817792db89864824a95744853aa05a0c875e3bc3283f785c0a79a3aa68c2390cf2bad1401d9930f857df4194ee242cd2d03bc3990622374fccdc6e9b55dce678a4bb0a49de1c3b1cb3bf1819f5e412e2b275a0b8f316f1acb3cb654871573dfe6c329bc8ba354a057ed1cde25927410cacb42ba3c79f99e237ab3b3e34b1a76383926e9630ae0c4c2366779a5583019950476e265731eaa90e986f857b4b8259a1e1dbe062d57228ab8cf6d012aa9d64c7ac87799a3509ca2d231004ffea3c377582492b08f4394bb66cb6fa34dca5e0d91ad976707bc47690dab18d73ac03f122cecdd6e98a5d992590335a319c9d7b01b46bb43d663069b23da4b483216254f5caec5ab4716119b4089e9642271a1d558c1d21051b3f37fe841845a1d04fe9aedb2d9a14c028046014ff7cd6467a562ed835f0b144d663f43e5ef57230d1abe0e589760254aca765a7f72dc754d6f8721e94ce2532467178792708d188846d09ccabb3184f5ca65de52968c313edc90bfd417be129595493631226055e88eb9890070242e0d5e1454d30a3853bc5bbba980024898941e081c109855913da26cc8d6698203142b8fbbccb71f77737a6e46e684bc2a684181274090ef624f8a4b1cb0c61b7c2d3cebe60775517a7ae89dad59993c4d23a127578467508a2947a6d6d0ed1ad195bda0a8e20d011a1e3109786cbb6da4817614b1b6a0fb350bab9305caa39a99bbc391e699008129708ce09ce9d8141f870c08660ce684800bd27e327394e513277b347578ec69b1c2f24f79523440e3635a41cd081b82a4e712fe2f038adb81fa1123042226584ad384215dece8f299d05b8377049e03e68e1e8e00aac782bf3f683fa86e18dedcdedd3ed51c8cdcfcb4dcc761bd086a5adb12d6f6bf0d6330602e99bb69e1defe0ad49b0613a911dc78b4c6c2ad8ba6c566ba46b4c8ed6106dac4d085b3b70a9a6466d88da06b5084c434d066d166a6960f8b41d7969816966696c685cca68336ab45d0c9a97231a80332a672ecec05fce1698959a519a9998cdb4665464cadc942529f3c05336b7554683a8b24ef190202343e683ec02d91ad99897311c637d63616342629a628d62623106687da1ff7f311e462dfdff0f9322e50e4b81454358d728330cabe102189c0a604b0cc10ec1c0eec00e4050f3f3c8bb979cf75cb29aeff9337f921ff91911ff853ffedb0ff7c1fed5a73fd1ff423fe80bf8013ed007f07ffef4fbfc9ecff377fe07f3d405e0e9d9a9f377e2ec40fe1dc71dc63e497e2710c4c3b32367f4ff5fff6adf0f87c9393994bcf9ffdf92837c320b7288ffffb8dc93c15532853a325cd66a9daa92afe403347de778aef3b558ac77f17aeff3ef9deb612a6f8e5fad14d0bb4ebbd56e74af7fa7689abf73eebd476586757545cebb5e5d5d5d91f3a6b651827ad66d764bd379bdd763b3b732c5c2ffa9f2a9f25e6bf71adcd5f238d61bbe877e96f840f9ba3d78fcffb3e3ff9f481d7a8d1c4dcce36b7191b316901b90afac5571bfa5779dde0295a986476dac2cec1516eb7adbfb2d26e7f7b81687c7e1b9bf0d6b6d693dec0d57ffffdbb0cf9e9cffff764bd7758fe7e4ff7f6cfcff53e3ff1f1affee57f7eefedfc2665def70cf25effcffc3a8e77bf7debde5ca2ab001f91f094ff13f227eb5ffff87fee7fe2a3807bf63c17d3db62af771e0be1ed33f2fb2ffffb8b8e2f26cdf2a06f63320059654bf42debfbb6a67c05e552505b899190b8cfbf382956f6564203a5af260af5bec92af17dc486883036b8172d1248391275343b44bb924167a6811555a9bc28515f6110308ea5b8082ca021ca42e1a1444a8e9f9100ea020efaf80551ca2ab0d60beee16f32256a222b74b212895c474c1a09377158c73c6a7cd8be8050c29081d373bcd4829d78e4b46dc000c9fc8049d4db86ce9cdf40727438f8585778903b74d0f12298014b84942652e449557528337aabcfeaf4a9dde77e84600223611e9e6992f885b1b45a0717b0118dc1f4c5478d40662768632fc9081dbc2f4b14b1aa2832c4edcf70bb301119e0204aec7222e824cca30335910b627de80d6a1a08629b30b03185e1e53e7a74963c5d272890a76f5f50e7982e6667117e24657a385a2286d3694a17cb1868c172f5e7374dc2a9b2c40753df60b9a70f4ecc8218205eda99460a018409cfa5284e73be70412a72aa36c84bc30cb90b74a450edd1b75d40c9daa98407d0e11096bc0c132ed72930d98e7be3465ee59ea0cd93efaec20b388c5e8c69b1a189e97157518353d4a0c05cb4e9c6b37be099ec39e20a5178b034e8c9841bb0c3f59d17111c80b5b20961b9b474d741cac18d5012412c0528c1446698e9e1229f3a842b0dd29c9180d1f285385aafafd4416f00ae0e905ae891a27434fa5a3127b4996523c586ad3c2a08d5a95308050708f5ec43570aaa8546d9eba4061a9521a50178477e3c4b088c8149841c2ce392401389c2ca96a10d6328706a2c2cb364604e4610f738e548d8eab256bb9cc984b89869859b583681b18a525807938c21841da70e902f087820c20679827a869ca4021da0bda21a7c1da0fd21f0837fe90a4b9b244d699418188b23523c637a7883a61a2927ac2f078f09a322248c4931a963a65dc8830cb6c655368d90ce0b5e34a798587a0a530650546ef2824205b15a6997a53c32869830f93f56c704355083012b95121358a1870051a08df0ce8bce81504486b3926101fb60d20f3236828b5a6940e79a0a8011e5cb8da81b064e36089dc99a3225b11e31cef87475d13afc6098435047a35693d11e007c8f64101e6102112802b968af8e241094aaf077510bea2104d8d1c311ac0665583f16a0e599d7b2c34c556d1f47944d82fc06002868a46362f6f0026cc4c6251f24477c4c440bac510b387d18c02b7c66a14be6021767b9390a93a462713863d6e5c39f678489ae228d17260c16c234b35d7060862da1d49a988346689d119ca024493a46059204918038988f03ca58169897181b76234c4f76b1543a24535bb628999411d39b43136983160a61f3ce2222d1ac94a8040e9cd455d0603883654cfdc554e86f1033c1e28d44ca172014615b30f84d5e25d2575ea2f098d2d2c968eb228680c2188c4d885c393cf210d2d094a496705c07a080b3a32f8588cc960514a5f306828ddb09f7686114909982c7043927b92c0f80522140efff28be33ae423121b84642bd594e33bdcd6b02610462cf5d0f94482a266c306c71c920be88e44c22c75f3034a52614a04047614c44f098866dc4125c45e225a684430daa106b4cc520c2b9d703a0438a97274d3f026c6ca63d21b27218fe4c1142240f61e1e8ab3ae486847d6649dee9055133798876c3b8c98ce309099a2c285a052d710303c90dc322451b9a4eb01ab36d2d5090d23fa1cb98ac87c9ca2944719c62614716d52204382294d130abb191b5c50a1f27140847da3902ae10b8e729c0fe15007264e5e64a2788a3c7f443de9336f47077864e95ce84e130b233efbdc8546186fc862e8cccdc0a99f5799787d52dcc48c92e0608f0599337213c1076a053872d0d270f163d1449f939a853271b06e348e5708611db8063132e7951e12dd18626803196342063b27a5464800c01813ada24865e7e393e7f1059653e9aef8624d1c892d483ce02d3c4b7fcca5935425115b687cd68151606de9a67094a5d50510cba7191f2bda24bb929cc03cfd184287c4dd1e12dd64d2192b1a140faa25acb0c290e86c74d1ea626787806cce510d044a3e67d1dc8e25608c1e9d322ba1785d512b31b443611520274f2bc93e25aa04494b6ec8bd50e4f233c8c6469409125d866cd1502c0c35cd85e57852db43b4449729e800f3e92f0b46170166eb515a52e40265de608a044c1ad992f8c729488b28a488a9968f503d3e02dc9854438348b08cef805197071eb81e0c3a70120e4b5c201f3f19120964d852c91315a6252089295bb5b7d8b7637e01a015aa450583e833114d11410587423e5ee871402ce0c6e45340304eddb97666583a47c085adb4a4453129e46020d4c36215958dbf0a46915a5ce79cef0a046aec2073a605746d4c379e165cf7113196107ca6357942f3855a60c7e487c9201f3934f800900906446891e488ad07973a13102df45e6889d035a4698e4aa4c4973000ca284f4441c4106709d5068e4ab1b7320e7c18fd34b5ec9cc08d0ad46515f9a8c49e1e268cd076c8e69c780c20c209c240ce0154841f59141939cc5a63c09c9036e172e541a309e067182a4688435834783225700d9e900a943e36909d24f5968c102aac0bad785d06a47980665e32c815e4b5b574e9e14b3508412588231e4b0aba5d6561337f33d323e4019e2a74a143f873439b2472104bb530ad46958e102b6b8f08a194bb3a46803b56381cf9a970335567b5820f29ca10e54e1f1528044a38cc50c3362589e6482d8be21ab86a999d061b440418522581808e14a864c0511aad2b031900280b780a49e0bc6231860243a3ddfdec5930a3788ec04a56b9296950aa02b8778834c3eb02df1151c32f243c8718659d109186d23fa18e02c62ca239106046324dbe858a8f16252acc8825ba738094ac9a20731278b57832c0a28624a68a050b77c215c506a8a40bd6c70744413c1f1fdd727ce89209e64614351e2a97947c0121d522bb60b975915958ea1b4afa6e9063e4ca84b50932e8f49cc8c164b308ca05b7940cad0b2d039d453f243d9e4c37140674b203ae6055acb64854fc2c482a0364859288c5ee4be06e29cbd347b4c8b08a1d909fd163dc0e99e350a90589a6a1a735340e9081840312a83678c82da4f2f19860c6c9f0c30cd2ab072a761f5b456e46e830a056a511ea9ac40a720a71b46988209829d9864cac4f294a4903249150e5a42053a105832c4a0abd206ff0e9dd46dc4e344422492dec68951e309cb0e3c9a9421d502d8643055b0550306aa992a4331b46f9c1e352280a510c8e1e5e882ca163544513ce615057286fc6439e240a2efb09eac884c1bf9a3703592371cec0876c55e94ec2221573a8e6c399b1be422b728ece3410b97962864f70e5c322054ca2caa7cd2a6e73fc51193eba1b26a0808aa95185246f8e1d8e452929a21b03020235e4c8c8a82797d0968f6f58118f58cb960885e2ce5bc4932e4d90a25b053415801d94ca90e2ae7af8b1d175f0a1612ccb7981c460ac6f33e9042f44083c046d586e1822ebd62815d8858e1831029db048787b52f2ac93200646070c9517d63920920ca640eaf167a6f8c5d25083d0ee4a979265447468624fc706255c67b21e1320c18227b644185706a6f1f2085a8423be2c360a5a2465d5604026d4f1fea12196e4cd080f6a446fe4b469680d7054a0c02c2804c100628a7aaa03e65791cc70f75557468a604992605668f836f4b6c82c996b239624a5484f0360e6ef20c88408a61fd50e0e014c9455467b6805cd1193aeadd9b2d5c58f9a1db31ee66976415c35f19298ec202da2dc320241f0efad1144d1a75fe6886d13ef016b29a70d8f1638de329148ce3bd4492b08f439936fd4d2f003bc548f3b465b7d1aee52f0e85d099127204881baaf53945d766a4d0b6e1a33d21b49b6ec8266b7476c07a91d4c6c5e60a316e875761939d6817811e7868ac70384dbe120db95d315bb324b2066d4940052a646785516337376ee05d0aa4942d6568051e74e0ed4d10c264db687d4d70383464c1d0b566c4f216254f5caf0b1b0d25c13b284b306591d1796418b4cf082a44be338c63580dd91882d2c1c0a1d4b75c0b82529fc20ee8442a3a38ab11b24b12207fd3218fbaca3f473e34f8891250d4836707125167da8409ad25db75b34a18ee0f16431ea2824910fd981b6401c6c2ad2a8aa14cb4aac516214ff7c06a479a8b454e7daa054c8c80800000000000014c3100030381c14894422a1705c322090f5001400025a984eb864461849c32c8629848c3184000008000010001898a17100900736adb800337c16b39c8551539e4e33e640e298c8aa6c9b0362068717619d436ee6072c4190b8665aecf6f57b4dc3ccf2a767fcfa13357bfdcae6b15f71b3bd2f089c53be46e9ecf145fd1cf389a09d7e75d0bd5f0b2df5a71c3ace5716adef4b1addfad347ebfa8ba47b42698f8c527ab458da90a9a57bbdb43fc1745231ad2799beaf9936154dff55d362b2e943ddb419e1f4b272da573afd583bed164f07b87ada5c3f9d170ba8557f0d75d94f466df5aba4fe55534b3272eab6a05a0345f55852eda0a98e89aa1da8aabbb26ac9baea0a1456bb4aab8fb4d5aee2ea0475b51979f588be5a4960fd54584b4bac7b35d64a22eba42a6b6399f5afce5a5068fd525a3b975ad714b5d6767aeb86e05ab0e2fa22b996a2b95e125dbbaaae0fc9ae4d75d707e1b5a0a1bc3ea4bd76165fd7a8af7dcaaf3bfdb50801f6a802db9004fb5b832d2bc2ee5061abc9b00f75d8b642ec9c12dbb6147bd1620b2ec6eeaab1ede5d8697a6c174176b822db1691647f45d946aaec962cdb902efb42982dafcc7e4ab3056ab38fe26c87eaec519e6d509f5d1c08b4cdc86dc848403743c98979646b79e9cca34a5f87d7e687f53228d10a6523a35b1e7b28c0ef3ee9edd0b947e9d95e07f0695b6c5e07c00dd53ecbb03db41c31c6baf176faa98974ca4a063c7dd0917979c68bfe048abdf5e1856aea2e12cdb2e7ed75f7ae0b17836e60fdaf8fdb216c064ab65b6df7f77c7cd3d75ea5c1f9fb26b538583a97c6d6295219819dae3c442800f298549532f80150186a57e3c669de1cf9a7d4ffe0421f6fa7b2c99f788ad6367ebc8cee22af5764af57f0f501fe8382f2ca60336eedaeff1e660b3f52c1e684427eee4fc389f36724ccec5fc1362d39c0495f075ad0e24cb19bd0398e953daca650025cec2dcb2afe8ad587649630fcea61454d11989d5017a5b487afc3c45530431b8e9ef7f6f8059f9e899394d9373530e725f99e25d85b1491a175f75e3bc4daa776a2489e9bf80e1b43b09410c862429e6d31a13d73232ac6395ede627c6190e08f66e109a60bfcb31db36d3eadbd5c91f4aff30c0bb72f8ef54b5fc3e10f3d3c05a6d595ff0e26fc2df5bcee58d90fac1d0d033e5945634325e091c8a8d818ab8155dfdbeaac4017a7d6109df0ae28d6c56f565a8e3d28547cf1079d3838c1b280e5025741c63268632f4f66ee6e265293097b9976f5630f4639e54393fb19532c0c059a10ec9beff763d43ec2bfc5bd80f1672bf49dd133fd10927309a1a0a47ec2bb6906d13104f40d14d11e1240990e8f8882d82e13b6081b2bf5843c7222e6418ff4e81680cb638b73b2b7fbe13eb35cfc9841ff4df354702d29dc149ab4ca776808fd1bde213cdfc92ee052891dc51e969c49d6874022e0e6b7ca1c97baadfbc7e4dd8447934dae84452002e61cc68f1ddc5df32b4ba95a394d90639ff39ce16a884c80ef9e982773a39fe2f01e896c809a06cc8db5fd23b80e47e2b27176c89f0c92aba87d4fcefbfc776387a107800626fa10206ea5916c7e27c709c601a2eef83a4fe7a23d220257a4e3ca4aaf00b8e675d9a65af358f3101ca633328e6fa0b2b94d17a1504a667353ada3ea5257dfa57cad6ff15b92e76634929be38fff334bef9783e0534cef9ebb6c785f1d9c8016babc4669d39934d9a5577b26ef4617d34897bd3ce3d42570d55ddbc9037f37b350500cca827fcf7d1768113c1ffe6eb89f86fe3bff137abd9b841b6e6ff28df326cd0d077d929ba39b147a5f777ac5233651f244a767ba96891b5eb8a4440f9706e198a47acf061396cce0201151af8763e2c6a9d59961fe3293f64ca3bfb702c1a2bfb29bba2bc9ee6824fb6df894cc93cabb23b2d4f1be63ca593bbdbf6c38f369b8bd0a04d5fb87a1d9b7f1afa580a784f56a7fb79ef26301ff677b8bafdbc13f067d7aca21e5742129118a07eea531a53a09e5d7962bb50e48c358a1d68ca3c86292c52fec75d61a79df43ea1c43393b86e48fcbc73167fc4f0cb78f7d995f165d9e2d938da30fac1c70e411a8e47964f0cfd759815c039a8e53581b8870b4823c85ac0ac7269028ce4fe891bcf98cf38a2fe73b53134cf748780186b40372d37e8082a115d4bd038ea2c214fd0f376569beb75b4edad98e0ebf4f54d839fecc004ae5d3ea902d1465687720c1ac4ba1277563aa1b0800c8b372d33bb84bd737e861e028641458179a4d892c4005e3af7bcb37eb2a6755904f29547d66b808f6fa9d4cb051f41244724f7fa5f9f87615f0545d14bed79e69310b1ff2dd846ec3bd6e1b14b6a225181f91f3997f10a13b5f948dbf65be998d3bc2cc87bc984ac68764c93ccab9524cb20fcc26c1a0f4c901e2407044f434d10380d7a05a77778b37334ebd40496603372298489b43a8a65f23343351dcfa271e8ecb0f083db6a3db49fb62395765247dce74d4670049fa2c5e1db9f7c4c9198de40cefd4d526cc7a51cb73209d2ae4f583250330ddd78fb1e888b0b6b44405c484695601d24e4387529ab866b939bde1c68fe231fc08d6b57899fe2e2bf7a97cd7602c22d250098fcf4b577a6423d3f738a94b424ef22726a608e0c1e3df33707303dbdde09ebbf5329926271eb9c3dbd7715f1793ff96a3c3715b28e8024cbf434ad7287e3071b07ece4a7be671f971ab3e21232065a83e1b35da972f3a2e3e866156b8985f14e27d9785defc587544c1ea9bd872eda4398077d583cc746d9bdb1f0969ce96ee70f656fa5367e4095180d0ba0b3a2a0784ca7f5b994793eddb028d58710e87aa5eaa98c87feaa51ccecc68f597f38ee6dac2406c9db4f8d9b1689f027deb7c2c26bdbe42ee46a28c062f05965670bf3b748e61db842c42edddfb422227005b98ee12f8bded16a9ae83d1629ec6c32f8bd8936720562e10594c98a6c529eac9523ac99d11248ac704491ecc7e3cfd62b5bb8883689477dfbe9675b211442ccef0210b03a66129c89c44285b052f0c4d99b601fb37f0af3bb85a3d2219173a99fa9b0eccbb402ddf5f8986df192e6823a644842c52f4c96508bc0cd37452b2af1bc866d3161276199f7b6c0425c73c8f662a75e399329cf852f6d26f9c4768d8a25ba92134035bc60bc7cdbd6942507a2f7b80a4d9d0d0e3dcfa3fae6169e6160904799506573cc005159ce1495d7d121b8ada262fa576654c68d970e4d7ffd23cf4a2031bf67ac67af28c6098530a5afb08308629cff03fce8d39117f4b268242417fcf175a8b335b5ac84eddd8f75f9890dfd1412f7e62b217c899bb0ff7197de4fbbea51b18d5037245748c1d66c2c404aaae60ac52dab5bb5a257080b1f8189208dd2d214daa515f5caa669d154430b200e3d533b085fbcd4fc5de11aa77543ee8c8c08aeebafb1244a9f053f77a12cc436011afec08081861378eb0d28d8f13b1dafeb50bd757b2cf2415c20481413b906e23bfd489237634cf9ffc82cc578db949d0b908ed3eab4b75c77bb38d281ab0c972fbe6570392ffeae719cc9ccf04c5231ea2e72b81b354846909692ebd6e1526a41d2ed4cbf80b82664a8be6bf55b166ed1b653bbdab02ceac81c5c130fecc25056d4f501e43ebaf6f8d187a29afb611f803156cd026a76772872022c3e50d947e4a4fcee2bcd2bc801f6438f3cd7a244682b3f23623e7270488f84d8b851235ba1ae254b978634d04a40afa799b3b23ec1ffcbf0c84de453974caf7b8788a8cbc638fbfd11f5987e8b82371ccc1809a8823e4b69c8ffad90c542ccfe139880e6986cd6aa3c6d8f577d5e27f1a26a8266128bebf04074f4ecc5a6e89998476e63db498b26eab038ade3b9ab80332d0601ad43bbc9982010557e6428a9f55766de9c59500ff87e143665d9a95efbf72a08f0e2bb94c4eadbd15b7417f6c1bbb4acfc7703459e57953933a277db203c16e685e559872662eb4fbc1d8adf0aaedda93aeb4f9b0af83c3f3ded11c6fad759a1493fe5806cd7dccded1b491d7bea55b25ee583864a12b6a4b319b19d35de8a381f37e50bab4fc47f0f887463bc6c2edb8d97be094649eea61105183fe2bf526a2584365c5618ada92234b5861498a9466726e4307441a659c79614b62a1f7f68dfaad1ea592b3414fc7286776c88150e078179b9f8be8ebbee151ebc121e4c12006b0cdb7aa1136973c2028fa6eea80e49097d9ce444091890f6ce85b8825ce94fea4c02793f2beefabc091c3ebd1ca08169a9bf23b6125d2197f893efe14a722785de208dad3ea3e1dd448b660fe8bf9ed576c8511016315b72013fb890f9a69ef8082b1124d68ccfad41807d140160b2bb1b42884fde1544b4b729ed0bf6e116871509224274693649b7334aa8c80d4bc081f882baa6a4a76c9d9aacc2fe8ec189bb76ba00198248efed7e68617c901ed0ba81b58aaa1be6f1996881f9ef284b2ef9f3da905b8bc3c49a6a5cd6294a8dcd0cd0dbfda4d0daf708ecb04a504db9cfea495b0e4b6a193c70f1b712b5d379440d554328ce371452453607562e6cc36b105df2d19afcd627b751f73e146de13bd34ebcd867c64cfcf2a951af89907e25aa04d9702f25ac69258c9cef013f8bcc135ce6c9aa27ac5023046d068ddc6438dc36d52dc06d4c89d942830edc4aa79febe3f476f903ddc28422ea408de0233439764b859477295b76eee57eb76589a2819878d4967c1a3f62e2dc4f09c492a0bc4800f67c61709bab59038cab12001c8b93955f236ba94bff1822fca8dab54dd0ae16de3262ce9cf553274170bc42e3a5f3cf6ccee4cea6e45b27bf6d80fbde2bd75d6b3037a6cf738cd05399053073b927d444ff26867e12689a3bb735174a6a3725c1c4a7516c5dada63ef940e3a28faaacee4acc3d13385637a0ccb534e6e4e81e3ea8c563dc8f82f9aa353da203dc7b8dda6b6205d6895135ac3a402ac1d11f2df5d7234ee2a78386bdccd529e9cc22323d3f9a0bb0b757640ed8da76a96cecf96170fffd2e4e50bf48938a8060643a3023418641d8a0048d50060e8aa00035c7b83b3cf1bf618d247e65e88d83304e63235744ca5e4a9de436c7d7a78c36df62b920427b5c46dc1e4ed5755d8625e0887d4f643a13589450be6a48ff8f8e939a899aa5cf8a1a0184bfb2d0b2288aedf4ec69f41d1ddf03ebd5846741e8a16262fb01e0f7f4557bd23876f308f705dfd717eb64d3f5eafe5b0dda56f5a7e2f4401684b0207f049ca98fb047ae4d79d6dc8cf92bd409443479067247c3e959c8daf23db7cbe2da22725b21559bbfaa185bfbe9846d8c0a3ed1613f5aff23f652b955884de00259d4da004c7276db0d3d29c93b641b33d997d1f02f3dce91cea9a8bb92e5a77c784c9d821f0c7f43fb370eae7b4f7811d56179538c7ad766057e6b06abc44bd76c1e9c48fd2fabadcdc7a3819995dc3f17561ceafabd2c834c06eadc25e8ad9aade51996057b2c5d6e99c95f8ef973bc3cefad3c0bfdc053dffc02ef6171f7e7d65b2b6d955eaae0356dad22faa5392681a5dfe52db16a03fbee241270e88bf0311173b39b801a624478e3eb2dbd24699ed0da7763d5d13d0e8b98e9f8f933d3d0d76bfd853a6983dc722cefcdcef2865bb0f084b8526bba3b6b0b6dd2ffdf0a66b7bed9d9fa90a872d90c7d15d0d16d835a6595c05ee172efab51dff50dbabc3852200d9f9c8f1d3a15fc7a30c64d8e3bceb60f6e864dcaa95b6301f97d69b30ce7de0ba6975ddcf3d0e525d076b07f503bbeb809effdc5a43d96e2962ceaf33e7173cc6b748c008571bc95b4bba54ddfed35e44895a032aeb1f1fd8302310d088a0253b99b970348e696ebc8976955e7a5807c9ead57ee2bde2c3c61d6ccc89d4752f5e8688828b3d96fb5f2840b067ea38e9f1b8c6027b43da74c643964745ebcf264d808eeda01d9fbf80b35fee468681e2c467865aef6f9a9f9ceb83c44ca4a021089dce4e28e4cd293e05fcb4d7464ff7b6670fedc1e21a6ce3c931cc1e01fa064a394cf73fbba7787d13c3ccc077fb2fc1cb72c027b8b8f41bc1f63f04641655a708c4d7c96dd3dea126ea1ffbb5368aaab8fb83cdf33f6875aab8d0d0e13c9e3cb8bc3bb5611412fff00ee00d4309a7337b0a3eb43d536a4ccf83f4b745b25f3cd5b4e40b534d225317c19903ca0f4b9b53ab148751f1f174c6a3e84026e15fa64b23ee9d5b874c04fd547869f31e75c80dd77be8de74ea2f2d2ec0caedbdb809de42cfe0339a5e7d21a9817ca151973fa9db7abeca29974259c396271c9e184d0d832c1a1153adbe741ba0c14d9f9e80aeba4f15cb77370ff4cd0fec93c0bb58f63d76f180cd6cfd533484e4562ae82616ae5288511d236028f5985a2599c3afb975cbdf8dbf08665770cf9e9e265c3ab674c86d52ff724bea6def700408125f7cecd1fda3d5de1664dc32268917395dcaf75448e5b7f418bba21503edf818f87602eb6a803957f7ebd468044390c3a3dc2ea5e3fed1211d73e86062cb58f3274947fe959a734b19326086666b8edf81a43579c065797a602784aafccf15efff1f7f72f5ae93e6b94d33024279d501599ed0ef7ee3ae10f7256d12191d1280e1801d8fec0beb24ecbacb2c7dcc837e5e6f64ee37e81df7557c458a6c4265bba9a03e9b0660a05314dd4b750c0a6cf890441b9fad83e9a8004adf6e6e083a51cc5b63e9125fa22b4dc53b6589c9a1ed512619f71f570227aeb072e6d950f19077e16c5de18e5e571410e4460685b3f75ac202568392985d3d710f4e2b2e44544ce5297fca663a2f064abb847fc70bfd631dc7d20210a62cf56e40cd7320571b747079b7f4e69e54d0f2e85d4b49cc139dc0acae0e2dea2c91a7b9e439b632ce98c9e5e0e964281c0cb71d2201c4248f7937711abfebca72dbbb1d211ac7ea6732e0740e450d6c57a724f2301be230df32b934b39961256242cc78d1830e94a053b9f15718a1d8408523c404443034eef515c7575cb3e42bf7081cfa67e085083dc3c944985b19c6fe34ab9666ec6e7e4d2d15c92e70fbd9e4b3333d800256850fc9b70f5e98836d7ea05f04d09f494cc30e9a7290a2349c8548dd87182e1ff47afee6fd974ed39cc9440dc8e43b3be03e1286cf9f3fad619e2afd99eba46870d7b3dee90c522954fdd1cde88e2c8a3db9892c11fd5abbe23f7e79244b9dc2edaf721c24623ebb474709567c282af5f8e9bdca72de449259f25440af8fd34d69a1da8f55c3ef135e9139a4b5986e21516b958e9e9634f2b6bd74d21878a12ed11d545675676e568fd3f856880d094b80e90ecbc3177674f5272b1e491cea3b32b0bbd73074f126b2bb48043a39413f4dac66b9c3aca2cef4b4518ce0de71fc8d5a4b620b8afc33d5fca3899697e8b1906920700196c7554d7afa079361a525f6db7f2dad2097c8c71f8c1caabdf1048a10f16f51ee332c720ee31b13891b28f84bccb553627333df609d64bf571bb6690f673b2dd7ce4e9388b14b46c1406a45a3d241ffb1751328a9fc55242b8f57ffeec57d2102ae9f5dcf2f6b1b28c8e3396a4eb723622ea06ca07bf9b56375b53918b9cb935f48889b700a21dd8e7b7af4e9b2191e7cadc6dc988e08864f20d9bbd5db2d4c2aabe7e4d22434408c9c1ce4483ad5e61c5e9aa2f0146f20d44f02af750d5a142de6fc7828da3506b6ef6a6b4c6d57ea9e7344dc369ba6f114faabf739e17a9f28634ae28e2c0350cabd1c38447e80f8bb1a453327df25a110938c8911f48fb9b32b83f0ca323721612e820c91f9f443a1662f861db91bfcdb51cac715814849fda28de2206add8a91906a4039886e065646b5a3f807208512d6b3bb1971d46f80eccba89bc9b3a3d120b347f474ca8c296575009bf146a6fe8631a16508692e970f1209d1e9d6ced36a308c8c4599847a493263659ca3da05cdc02081b66c9723d5b5f0d15114f8010ee9af5a9f6247b1d2975f6af8e74b800d2aafa7b0d31184f2bb6bb6a7341a9a381d1b5a702a789ead7d177cc420fa4a21aad950783f6804c854f40c5d1925c37119a763d816ba46ff8de142f19faec92133013d571ef6f1e515b9fb6e644b8201e013189cb5ae8b31df6a5018ec121892ab024f934bd380abec2cbd0acc3b7e6a95d9d0210125a22417cd4fa7e7cf29074af47c3ca4dc4cd436a602662cd2b5b9d09ba44d6150927e73603beb389c440a5ea279c4a81a12f9bcd73a5bf6724733f6c31dd4009310289dbc1eb2bcb012d4dd380bf4ba28e869018498da07ce84f7636f585850da7fb8e793a6d7ef326dcfd8b12bfd32c87a4bf1f8c13214dd697c64c654c0f694dc60af0795c0c5adb07fe9025eaf32de03267e2bb741e4be0920b59efada374422c2b30f6b0639784a5c1f55fca52d5983b9bace208ed07cf8f60763e947e6458acf7ab7f13fa70f9f9cbdeb5d677fdf077c3af4303d1a4930cd3d986f38b01087fb7800e3d227b8bfd581d8ee6247208129c9e1eecbf64f417f893ad3fe745afbe60cc8186a59b97770705e950a21fb745d7f6e5ea716c78936efd3f18a5816483c77b88d6ba0ff51c3c0137b81e8ffc88461e5496f27be96ab0b56c3c33d55e342ff45bd2a721697370b3d31446420e771c04638d7d77169cf95a7fde69260cb0e7c6a5a3b43bd8faf18d21d00231c76f6feadd92b39601c49497b71b7adf98a2b5f59dd44917d82c103689d65f436cb8685dbfab64ea71b681b55fe39ea6f0eb584426da8f5d2866723670766cdc5e097f0c8ef967121189265bc0389469d168dec36a70345eac6f3a3bba36e8e60ea13fe3b9a3ef7face5862381cf7669c61e325830da7694c23d312948f95402eeb7df04a907edad846e05e09419c1baff91a9b034d933dc9df57610fe6e5b6eff4b806a413b02ee8f06ec091bf4e34e9a2ec4b9c0fd1ef8afd13e4bedcd5289c9ec1f4a70118c39c660cef840ed8d07785664fc36b2190d478d76b4367715b71acf400be3fefff029d6027d93e15bc6de303610981afdd2b37e4f27a4e095c872134a79e6525a1eab7b45c27b9e08798f71be0f273bfff2fbe44b7680927ffb5ca7205b0ab020ce286da42523ff4fe0ad1cddd0fc5fdff63dfb3b21a280c850b3fd26f3ad334adea217882b65e60f4360137034b18dd66daacea2789cdfe2ef13ac0ba2ddb455d8f1e299128b59f940b3bd979516ae96e01b85e9fc39cb5de1f8c325bef57d1dc3f269a77846200c9de00f3be051a11380017e19bd2f9239d7f3cc903b4fd9452841102e55dd433ae68dd47e171611653dc0f2e11663c8e877d4230710113fd3f2f83e2e24974add18a6a2d130c28a381de2456432facb3c654989fb295659e3456d13d24c7dbf607ce67f78bff23d9fa3fccc91cb7f7405d4e7f94b948e9a060d3f8ac6b187fe6c21884be9820c8d3803bcba84b48f3965e12272fbc3cf07473fed638c2dfa2a383bf835f11a7302166d5d7d12d6c107973f6d7a4dd386f177a4e541fd0fc5e286a3187aa33c13ff48e46f75b68c107a6c2a1d41d8b098e2322e3a298c41cd366a4fac16a44a47fca6bc26e9374191dc7a18700d52c1e4202c69a2cc1d54192f50611d4e89164022b1b05ef870d235d3061b03066c8eeb60b23cf5dd81720f1356f58f45b9f1d2d47b47fcfbd16a402a85f3d928249d45104835d93cffa0011646e1a7ee0495e1e6861432c129029468b7ba433f32ab1bd3167032f11d0d0e8845ee8db982fd4fbe15a592750ce5d2cdbf88664cf792e3da6d81ff9a5dba3340e2ea04e802b44173479fc7b16144814ef482d18c8c1b3a4bc2b6404e5ae633e62d0c0cc4b0f779088b1109353b5a2f00ff9ee04aa57fb672e39e2040a74de4c77f9ebe5e68ceb8b6354a603d1c3229e98d87c050beb3b0119bff8c2c4512d15898a02233cc97aa0d77c4126bb27c8c6d1665435207b272807d73abcddec8bc4a3a81dd6212843441ce5c09d027dc8c9bafd973bf119f879ba41b2c56511f676b631d26aeabc893e34fdc25bdf3e8ae6d0072eeb568119a11c44ff292851afa60154fc340776b63472c2957aff56727d09b244093334959c60f8d67de7f11c54bf246d995e1e9e3518025c805a08c842c5e28d53f53286296c31679542da849b15b86c61010f4b06562caa333a4030ec7028e0974f3b24c30be79848bd1b645571bc8d5ba222dfd8c212566a76d96641faacd84be3e28e88ae02b472525842fd1590b753c3c3defc10ee50e63a7d8190426479f2e4be64cf834bf5c483aa4004d3635c7f10407a1b5c308ed35da3fe53a354c7a627c68969b533d5d1fad7fa4e859ef387ff9333c6a210a93c66d31c3a1acae7508a977824bb85f76997a20d380495c430772347d1f44519c30d1baf98a8342ea00747b1f0099f79c2e69b30a6c9111c22b4d034b3cde41c5e413cc6aa4e85088ee58a0413005ac3fb71c94b760039ea861e0c71a3b24c1701e06fc65c7b0089a2bdb3d4d85c4a7b682ada41c09e87492485321149efe06d10c79b0b4283cae8ba04d9e18996d0e88e31afa1cc9c331a04eb5c1764b5dbb774ed0f3dac9b96b2a9194e0806926968ae8cf3343fa8316d384d03b9bc501712b3efe7ad4154f2ad6cdd84f4dd24aa7717ead604b082054a4c6e7a94aed4ee39af40f69726c792006297a4e04f726190a2335ccfbde5287bc3384642ffb2738aa6def5b9009621675a36530651608fdd83966ad7d4b12ad34672a7e8a85d35b6cf72694deeddb9588a79fdce3f5aa0c4eaa8d1ed576d409d45f6d5678dc814f737c5d2470216afd7e29129307244d5dcc914e6144dca88478e05dc1e10e8ef68b98a70c2c09b1fe97590e5815cb905af3eff9e87e5d96ecec8d149cd3a88db6b495987befce43f080617b0ca08787b000968ff5bbb27a19ac69f5ce74bd8df294a13baa3f95fc431ec3bcaf1b17c8388b4c10005f114f3ed0d4f81aea75c0339e7b0acd2603faaaf16ff15c9affbf8b347252b3ef6603feac2e52df66a02669aa903c93b07ac5a75f8b8b45ba8ae453d2399c0d5110caf8d5a20cae43b1eb893d186d9e77b2914221d6b429d6e6ea7199ff528740a03d1efecbe8b0fa83818cf5ba0390d41e19672e59b8fdd9bb3e93461285fe5fee164d66ad800aae2276e171c2f372e0daf37a68eed0000a6d54ce916613532db776c6c805bb15abc8b7da76400213a84e0dcf8874a6def1ca1c157940a7fda5ee4728f4d9b36f68d4fbb75ea255f74715ec0dff35fe2a776a62cd981d43bce33da421b94357c555767c2292d90aa799be14bbdb3f13ab8cd826e48411b4553e491e7583eb2eba002b0ab63e98128764dc8fa0f70fe9144a15c05f1167bc8303bb9abe58bb35461a0a5c18a1442cdbab973b04e29c1fae75de4e19a0378766a7c2352f9a05df175548586212c56a3fff4a466b91c821907ab5126a1fecb2c0bc7e5ab139e7e6634752bacbea218794db45c2ec97d67e4c2ea67aefd9af9a5a4421b0301bad2caaf627551bf9c53ee4668ad6e0ef285064474f41b4dd2ae174c32683209bfe15b025589308a34ed19af8621c1eb960e70bc8111ef1bf8260d0ae530bd4299372b74c5af72cffe7dd6cc1ac03b70cdb449e5e6a2090d262317a6281005d1468f23d0d734e92fe1e86655b3e6a68823ca9e10aac3d0839906e3b80de150616c7084eac8b3d993b3b863b2b558fa253135d37f620ef5df07f8f10534af64045e8014bffda92bc64b62e62ad44aa20f51706b48d7642d75267aed1eeced5cf5f8a5c5c754f508a6b59841f83a83bdb4b5fd1b0bca6c6da565eeadd35cd9bdef119afa6c5e4601137d8eb1e2f241d752a8460ffd971767b7365bde9793ed50e0d1d342c12e06422302bd6c3466dbb918988a92f06bbd074cd732717806143d475603904ee7815998c520cc8d1329b621f5cd4e507b9367a5eb1a22aa3ecd3156433ab5060074702d0ea0bd48be90f41156cb63787dccc9c1b90c7626fbd7573f131aa863b8ed99fc7a09c567ba36f6185b2075ca930e3d35ecf590f39dcab2afdbc2ce84f05bae049657563c88949b6b766b260da12cddd391068c7e61fa910c4cc65eed23182d9b2766c1ec090099c7d8529bdb7419643b7d0080f24537da0400a85cde583187ef96f4fad4b63776e6fa317d7ad1f62557e13be011a8f521ce6cc616066995082eaa78e75cfbd8615086cd79e30870ef139f0f32ba2f42b7ac336d5e4676e3ebeb130d5d535379e7c27608e5b0a00e17d988edd305cd70bd41b72366035ed5bf0c95826cbefac02be991ce448152ba9e505183918878b91b674944d9b45325d07b915dad1df34aaf69e294604270f3f7f55ed93ee6ad943029dccf69c976e4f3dc128989cb76f4a5191e15441a3d998a14853578a909aa66695f7c92083ec440dc54b732fb75d741ad59f8d970ae3cf08c0aedd0104f86b316aeac16754641fc4d043b1e83da4b7b13d88ff43bca2a120dd85ae7c9daa187302fab709e54d769d69f75bcfdb5683e5a11d7775635231bf35650eeb5628ec89d60f523977eb11ac4b47ab561c22752e674fa29dd9dda291be34f428027230cb46a9ca9786ab969e19f39200b061001cf4bdbd38c06ef1b7ab0c01d21b02406eafe828b99f123b2ac91db13b64d4a9520811609b3b361809c6edaf0509704633ec727766c16d9cfb0df394fd66a0b7e80308de7b0cfad5ecc8cb32b46ef10824c2da492299d234454aef745186c8eff2b74f6659697d83004b834181cf53b75a99c04961eac17da50403fcc0090e615027a37aeb468b3ba4d506c6220b64163e04120b951778ca503aba13d02c88cfef58c5e08a4718e9f15ba37fe2ccefbfb5d9808c90423f2af5ec5b0cf618264fd45f584b05ef8003f5ceeec163f1cc1d145ccf088e847833197237ada6891e149e00bed19e552f9598d7b38090bcf3f0bb6d03c06fc54ac4ef1fcb4240b112e44c007fd560945c13f36e0d22512982239d05ebc84f4708e7b1783fa64111d62f4fd79f8663131d7382d857b2a3c016b761a89484153cbef56f2d784974c6fd285655b5d4a683899e5eef9e33c04140b13ac722e89aa4801ddd8e805e771b7d996799dad5dd53f63b2c37c9d1bf226cc455130c35634a4466140a1c06066432a4de2fc61f2897b12e1db8433ed811b943fd9f9f8c3022f91a3771b1ecf765cfa0a4cfdbf9a0f4e839e9d54bf672bd2f80b81aaa4a43fd165843ed63c31c7cbeed456d10aa3dd90706ae6255f021aa37b8bf124f80976d1e25549904b827e17f6df16d4154550cbd23e26ab7c350ff49a5b069ecd7f3f9fbce572400f01bff6ca6c904e312be5618ed239594b7d2ba0f1aec3c050248a627243be63002413dea3104231708311c037c30b68e69a496a4219443b7543890e69d5d03054e5e74444b7a80dd4f811526e9c3cc73c3c7aeb5b9f73277221a28422ddd06213f62535cbd4abc6b93049cebe4c81b19f003b0352a13d550b888d0a45a664774d9a0e08867f862d4b9b8b2f4f49e687622fca61d4a1fa472a23bb1f77dc749c75173643a18c995e54f89b31b57653700ad1a834d27ca3282da2db05c1f69248f7c90e93f7e91a7372e1af1b1f6c0d146f00719f3f938ef9b8626b87cc752f76346bbb961a06b08e094c5d6aaeb14f74d7148c38c5fc909f2469ccd8cc4cd4c5826c80157ae867d242e62c3fd47ab5f8f09d46a1f70847233ad5568bd33a4e44afebb3e994127c42b2f76cd9bc9ee540bfdb6dc9acb78e9c8c6c645a91c95da84eda93a5ed48f5506b83ef1851d82662da6d46fe74b8f463fc774f3954a2e5c23a049807cadeef00d54e2350b9b015ea509bde5ff9f93e94997252695f7980a896e6cb56eab18f5632ab4092c8e8b1755d2706dea7e61677739876d8d21968c3e6c0a6c2ce1f9363cf3e42303336ba195762feff7bf2252ea92d80087f1a20cfcbe4f35f531eca4d2cd579b85f51bf6f70e0e14295a66ce0bcb4cad57219e17dddc7018d63f3dbb699d107d7f7e32f432afd71b1ad01b84dfc00ee00ea574cbef8d56c3debdf7fd7edbb5506a3f6a32e67a00d9bc09997e8f588035b2ad5ba23ba603d96591a2faf19cf1c2332d99b621e7e1066356b576b04a2478f82c7136dd0ba7fa5700b07f67db2c0b06a1b102d249a6d231386aad6f2463ddf1275aa51ae17b86fadbdf370db4daec2a2807540c15913ec8a825e96b706384cd421c674bf2b291d6cec4f19faf47b9dca8c6092a92100d69fd7dd828d93daa300026f52564bb4cad5d92e2191aeab4348347d25f884dbeb1521d79cad57192f28e166c36395f69805c80222371c281c8262204e17e8841288e58c8a35a255c162d83a746fe57b09aa342608e5ae09f2e1f6b1d8beb1c9836a80bfda39c065f36b76f50df9fb58018b57107f4e469d80c7ad167e99bd2e19be0e0170c3add065214d28b76620ff710d48f4330d72879e82eb7feecdee511de00345d7a3a1677bdfb588635bb4f97fc04d7826078aaec380e73a39e5cfe36397ffbf87a74a23bedbf0ff4713fff7507da11f9ae96758ec03ec4cf1272e3fa319bc6235a93fdf6f65a7fd4653a10d18689dce3fd32208a3ce7f8f2ce9839e9b68a7f499f6806df63d7033b816e7bd13e33f321b46f3a7d7682f7106944c0d30953fcaba1d627660f5ba7a52532f7aa032e369a95ccd0aa35dbc5cc09c50ac4bc3a69665184cdddf33a101293af3f1c1dccfb042820a09bce8cabad7ba035b76513f52181848b99e49a9bfc56258104017fc9a40230b9acc8227c7f27699f9ef1416538b70bf53cff0f7816a9b6abb6095c6d033419460991f4cce3b5deb93b78d7e10c5ddbf825ab33bb38dbc9361a27ca6e5f22f6cde10a9f8513b6b376323cb3b653c1674b79c47be3684e0d2ff6401fed24e7e6425ff020efb30fe0d3a1307fdf007a376011e9a8734c0cf7081368d4405304f24a40e2f38672960c8d2ab0f0103ce807703eee7d94dfd33e7a79e94c8c78dcfbd36d0b517cd100b1219ccc15635503fe927819942b4cd709f01cc02af4a4c2cd6d85a4a3daade1eeec255755c97e49956e5efccbde2d8cbc9c9e5bc75af10a4bfd169647a6a6b6cc717257abd72e948107ef65880e36d4640771d3052b8dc63cb40dce8021bf283c1ced3b9e56ba4c21709a3f470d5a0fc0212827102e69e00c33a14447be0d81f3d5125f0a1a01a27f361b22f75c7320c52cb90c740f06c3b590ac7257aea98050d9e608510e86af2898238b359d27e6e2e273ce40ec344848345dc1dfc912a295bb4bfe788b80b1a56864a076b68618e5ee1fd563fda7632c89cc3261e080193ea47a9e88a91836d109eda31088c5c5034238c142112f55928d02a0bb5028bc84770ee39204b55d8e82062a5a19f1ff851c0d764a8756bbdcdfda548f47bf0294d1acf361960f8672c0300098606ba0d784244b65e8d8141a7c6f529fe5b0acb06873c9e455b15d806fa0aeeb4db35d95e5cd7a30a2bf6feb86e0aa99068a8f797219c066640ae621e803c724038f6ffe0fe760e3db5babd753b5ddf254596f559a85acc0e2c4c35690640390a2612d946723cfa551c6d20fd8cf2f3ae3da4ad73cf990638204ecc15cb3ab0ff050122a047d6289f42a352e1af18149bc991a7f0a00ff1d200e0d97d9adfe60d3ff8e6f1452733075b1f553bc8a57cc3b916d1f9fa186f2df3711a1694f59a348e5b2288fe2dbc7445373f274ed4b5919f3ceca92d9e465f42809c16345566b69a587bd50143ffd80e864728a6c1225534be9aa43851870c5969803a7ef694350e51e38511cc308171c6516ae99216e8d8c6f740e3ab8f82cec9152fbdeb28fcdce1459cb294f9d9dcbaf5233b647f8863ae5836a737d1c85c38879c5b122f86d49e295b10432407885d21f437cb07aa3cf89833c45c2c40188c033f92be78369ce81e052774ced33c93bcd380071f38ae827fe14175f02a2db5f71206231b875de4a8090857222a8515f6c2522dac4fa3b29a3ffeaea8eb139df1656a0a0d7802b78507fa8b5b4d03cd5b27e94d305a40c3cf0a8912df83a14e09fedf5920fd550d1f514016179fcb99d2ffea6cf89a99bc649024c1d77f75962628d533414c5faf067d3f8363e446a4e57a16a12f3bf4f39d9f8775021ace44f5c767178b58b444abdf5e94044be2ef02136a1ff29ff593ce97423c2121dd96dc96ef71df1babe4623f836312ac50b13c63910d5d918ed79edf660776172db8755d63dae06a66ed109f2a8c0bd70ab9f695849c849752724f152d6f3bc433bf7699993f18639e60b29befb05593f4bc00233daec6d10d0faf3be521d96d3704d0bbd1857fffbfa8ce31f5dec1bb96bba44d090754b0284f9423feae6cd205b5e761cbf7c0495b42907fec93614e025839e565e571ca04696d7fca7cd0d0a19ae608714238d34e6d10877dcc2e23f9d455d1c33c8cf3d3977ced46bf215fc1b390921c92bd2b634672c55abcd8c09540aa571c79351697c7fb984e66eb572c587c243c7582d1913bb847af0a685885baa9f116a021ef9f934dd6f4d5fcdee3162f4306bcfdf9a188fe274c2a03f1142cb64f8a86288283df7c7efbc29bf12cf8c7d1dc8173eb60bc9e3dede74474f4ecfb9c608ca0bd07fa4fadb03cf14bf70b9f632964b3cdbe763b09606de1887850b649e8615ced0d9246a6ab957374219acc42d977bb781f4f1a56c729a1b0c1d00307909ef4e96fb1d6a99f9e84be05041c5a22ca8a58e202aaea6d19f3e84fba1db975017df5768a0e182e13c262a4366573ff325e1490edbc74ea16e9c1f3e52f833a8fed50b6c9bc5107407fd3ffe1f677767e8e5f089b42a2b1882915dcc2cfe057992c35f1d1e111a5a8ad493b61103f3d5573cd099b3cb4d5d4522b1ada354163736e880011d2c91151257a117a3e19ac4650d12be4d892515f821af504b1fc0882fe12fc9cabbc09b6f0dbd70fe7c94b52af4d540f6e28f4fae35075a246b9b8b7649f42c994a9b0261f02ab45c6f3140c3a3acac2186979e2d6e33ff594f4f89744e9b7a4ccbde5f07ba3f8ff7a9d985db576ed5f7874be5dbc11369858c1b5b19a3eb742ccc3a1670a556537be7ed6979842d2a18f6fa5e694aba336ce352ea2efe17c4e530a015bd7b4437b4f635836eb89bcbdc6cbf37514a6c60f645de991c8cc507ec05552ee33e3f10d4908cfdfa8072eebd33ff7a0a1ded427a4a1b8d2b3a67f673b0ab47aa4ee75107f3046167f9d69748bc9fe117fe53d3004ac20828453cbd9e472de9520cf8132e43fbf54bf92534ecadc8a3559c24da9f2b90947d8b4c0cdedffc5e9ad12d437f263fe5f7e37b03f4b1adc58a4968d3597df48dbe65ef7630d4a0f630c7fdd328463b4836346b80e4f2fc1a07cf2250893bd1df58e1d5aba4ce9dc34023abd89cac657cdcec497c0e7e1c52e649a1b61e0f011876ec65a002c40c216996eed476a0c10e7c9e9a3df414d9d6fca5fc70c3b1cf4142314805c3ecc452c5997b63b4898a0fdee98bb82e758357b445ae3719ed6e200c617f3bd0df12a5afb8d584c4d0082b506be17a0db1d4c6af2fbcdcdda8cad1a78ac148ff6ba8ec8d6105a6507ca3329bced947bbd3b5579509923ce0cf294df47e09925ed127db7875ce4d75209f856aa9aaf99336af78554dd5a4bfaa0740ebfed510ea0075ad9f2d74fa64d6b1eb3df02b50292266af17f4167cbabcd7a4ec8b78f96ba12486589aa1a947c8a065573d3c4e00923fc1ca2e0c96ccdffd0ad4d896dce56f6d030e3a9b06711f1bfe8247cb237bdffd34f9ef901653a0a473b756fa8bf00fc5f9dcb570f1aae7ed5f93e9a180aac03ece1482fb5dc7ce8801e326ac02212b6a63eb11b214cd79b0b9e379831d44f9d9dcfb0fd87c600e8b78c18d1e7e3cbfe10780fed874ec3db1224cebd9dff1edc4b3de2c5343c6651c7653edfb5d9bdd52cb9979df1924629007508077a98eb8f905d014f3b1dd9f1d10b61886218e0b2e631ea4bf2ec76d4d182a8d7130dfcd64be41edbb4050759d2c16408f8f695db401c69f267fc91f5d619d17ee6940b344dbaa4b07b3dc51e06c9f5dcc522bf4f9da6b0d502b4db08fa79522d389dc1aa2db009dcc5f022365a1ddf8706e875b3776d7eecbab061e9c2147d7cda9d9871f9000717e72d6941577d6bbfa47d4cfa989dd8f433c2c1071b2513be653bb61c0e104f1aa1c6ae44c4d7265a6991c11b31e77358a0f92166e76e5229307bfa124efbd255121cbefc479120046c81a59676f34fc3814ae88fc0055c7d58c6c2b760184090f3e7d3c70da3b6bf81fed6c5f3e277d7db5186aed78d8bca33745616dd64eeb7afe9fc3f523557ac34ccc37c87eacbbe0dfca56d5cd8be0b47ea7f5b81b2e73b7fe3486fe1a77aedd34cd8a3f7868b9f6d4c77c369df3bd884fdeea5c61f6f3080132a089c8a8fc9703f1fa814bcece66b9681db0aefab7d64fbc93e76256cbcbb14d0ea3d4a9b6f3a6b8b75adaebbad7863e44bb093d81d07b26de387f47555d7abb54cd7cd6304c089eea009c16dfb1ccad659eb5f32176cbc0f236a40ea97a3e19127ea1853e991f0c1fada87a62b3e3ce315f6982fc99f44514bfe4f20e9a4c6276f047b357d36219df2072d0b46aca5a01c4ead1769711f39ba9ca0f908c09cad148717e4b14485439ca0d6a07a6e8b3377f93ccd42e31d8ee0ba9ce53ebd2fa2492fb23273ed23d653df63a33022436d7da0cbc964f7928c3fd69d886212bd0d93aee6a4f4ca365f119f60014a3b8c9e465e50ee6241edf592a7a3b8d61e31deb6bbe0804d5ece534cdd0af46a00a2285e6b2594d8d6216db48f850be096681ca68e69dbfffcf640b80448eb7a339bb08f8030edc1185bc3073c09771a18d88aaa2a01b7baf3cbeed1f3791127c2470e8e90aea0f10ea2ad22e887c27478bfe3eccbfc5d6c60b44fb86e8b8b845d3de93afd0efbfd5ee25866325faf3195b0dbbf984b16f47fee008028beee699ed886a5060b00c9d752eb77f51c913f09bac97fc785f9ccf1cf643be68bf86e478b699d377a4e94ae1a8649e6638affc8e4e3fbf4bab6b9dfd6cdadd73043504f9e8257d2833310dcd020d2cf94827cfc6035c149e2114f182afeba015412960d098c3f49e99320fdbe2601ca2ffa2b1298cbef104ff6f54685ba4d1da47364a0041f1b25383dd5cd1ab451bc3913819011b935995896dd2b75194c0447d64a9f8f30b24bfb24e2ab42c93f134dcb5957404cc6160da9acb3a2991d0e03a2437b515e0b41cdcfbd62990e3a2a43c00c49b3fd99ec6f8da939408fe58b4045cf5a8934df40bf1e60d345c63e3170b0554222c2e1fda278057734fd3c45739ed22ac601e54f7994e5cbea895baf36f5e140a08b032fa2bfb2b4023e92d72ddaec55ab4005b66705d55b2a670d0c41e31d0b5f3a4461fdd176bdaadef2b3f7a796ef83eaf61057bdbbbf69f5163e19017b6abd87f50de59d702cd5de569431f83e5f106e7f409ea29dad4704f102840ca524c5a1845215452e1f06bc793bd8789b6645b248ec1102006e8efed98260e38193d8dd1c3fe01bc870f383cf3329ae9150f6077dd1cbd8b54de06a8133314757d4885b90d12627bfa88ccbea8c2ed66b616723f0b04a1e1b5c725372ea951c5516fc924d8ade18054ccc7ea85eb0d1aabfe7ff46fd913af18ea4a7e5c3a40213f655fce4dbe15521138935bc35fdc00a3334deb60fd566b5f652db1b572b57bd6f565ae19459ce6d34fa2f8a816b8efab75302de2a43aeab592c0897d9fd161dc70ed9398a3bc93d2476d7628f00a32c70a45d6775ccdc91e82a3163322b1029c513d47b520caee3193aa5d2cdd9b1a08268ebc4fbe2d9b0a504dd394cc539e034289b48012171ddec30025d2e4a42085555c3bf349c6b8e97fdc4163533ed48f5f7f8fa77d2a31bee08580093123cff994adaff9ffcfcf6df5df120e8392e1e8c87fde1a60da35855ac710e2a19859605010b231a1dae6d890ac38763bdacc3769fe219961dca4e027b74f9bc4601c5841d41011301ca7c8e0b88bfbda1fe414edcd8779151701281db3cdb0ee0133e294d81097f81b0cc50acafd256dd465271b447cc8dc24f151916131014572bcae9e0d2cc47640f3288c09b4c192c76e570e64b0384bd6104d269769e910a78c44089658d10cbf3be1f14e4a502ad6362dec3d2e7a67d66f117082c6c5591d9de1c16d31c2c5bb4beb6005ff4b60499dd5ed83f6c50ad0f3de8057fea73b16cf9f08ddd33e48526fc821620cd3315cfb0dfdde08adfb56730292e13daf020ee2e85f4a4a1e475f28af2ef04d4cfe987db51e5e2cab680cd86406fed18271bf19ea53b2cfa7df8e97b532594c9a6bd22d119947baad134bcc089a00b9349b3f62551c2120a94bd2a0405aac4360f9ab27b5632189d9802484aa5762e10f377897cf9f881e4fdacba38a9a12df5ec94720bb2b33dc4d27cec36af78a1f51a2cea602b9fe189f503fc3c0c13d9217eea82496f1dd5484c5f0706896a6a019782efac7a3011e79e0bad5874a84439512cbbecc35f7e8ebce385b7809016ee074f13e92d039f62f03d3a5c000cdabd00abc4d2481c6ba4b49ae670a11c1845e1fd47323a5e73de028b2ee7ca4360310ec6dd17bc5a2183edae0ef6ae6fa3ec536fcb8a1e437b468e77ac85a0063d4847be37dfc384d65329eab5facb76b19d155fa603d1feb123e45f1b171aea3ee31d9ebf7b6762907448eaa0d1a360afef750634b6e69d11f2dc3a2fdd9ef2f846e46fd109196d42e9acbbfffb1b88761445e570c07512fe7b55c73aa52cb736eaa70ea5927d1ec502a75396e213cec12f78c7a3e88608edf26f3db3456bf1d77cc947f5f06cb1a7dbed136d06b9a66e78f1c966ac1860b2ad0569d57f3cf0b43f71c065a664362cac7b58a64d39eafee835e50406ca14b41027bce6f5690e6979d876f30a72b419b859630e80caf31433096aac349b098f970af8d6d438ace90d32e182d7da052b33ba366bb627332abf51322efd2ee2542d7a16fe001347ea640e600607fc0a03b27a29a59045f2e9e627f38c95f5d18679af8ed03b48d1cd0eaff677f708e72506eb1e341adb1a5573f4b04871b5b21a44d9a3a2778191c7d6957fbe6891dc76d736d5b507130b3777f1b2650de5b91eb58ebf98e9fe5c0b954fd0223e240161aadfa34a7e38d1922cf8a38a85d217bd3ab0dac4c509fdd4e96fabb95e0fa61f5e3beef8fa65a5b3a811ac71c1578c2f18c168fa4ca3efc8f14fadff460e8e08da2c67a97de1d0b1410042d8220f623f165a4bc5ba3d3e628918729479e1620289707cc1b9411224e768cf3820cfdf57c27e86f0460a3bd83e5f82c8f8cdd5bf33c49096dd2865029f2baf01228a0505191324ce36aaa22465d8a69fd0802e0d836adeb2d9325bb68a4af6912c35642cff49c27227a469ba6233ef4dbe9cb69ae505d8d686112574dc213a91200c36011a4441a89083c7c4a0292d52728a63d4645e43f1b0ce76107137e9a3c02742f239eb785cb14c6cf2168e6a16f7bcb2aa5f60868a1d09cfcd0cb7a7d0e0a97f9122ef9319432ea03b3b618747d3e230b6a9a96e44de5d452e3b6f76137c052316068dcbd48e50261433ad64ceaa44904e93db96f9e9f2f4a851924d78682c56ff661f7921fbbac0c05de9b813092d7e46b83ab96c35269eadcb6846ecb269a93284d1e0d6fc2f23f972ed51a02eb66a386e20ca7a552a9e7c093092d4f3f6a2e2e1c766a3a157d18881af537e20376abd1238f033b2919f1a2926da0c8a3a16dbfbcb34c4e884683846be6899782bf0f673818d79ef03dfd41eef092379ebf318ca4a6a9c158d8319908032b5df4244b0081831fc7d690761a1c3140ec764f035e47c90755bfc6a200df5749bc9b64cff4c4c073629425b6622ff6d2c57ea10fe7a3d6b3e794f2ba8c396e0d7cc11f7a06b49840fe24702f3b5d77e79a016bba55bac33a2adc9c71b4baf3979bf8d2d3ad7452c84bc14c4381f1a5afc8f2f83d74c29b94fdc81fec58d80720be56e9c06c3728ef4dab799f1525f757284815269561f27b981b65eb027e89ce921fbaa2170da35f38209883295901e1e222a557ad24d344e1db82c23322e9e2a8109e8c59e0f881666b3cc5135366804bef3ac73f06eb9c7e3ef75a1191e3376d81b98c3de6fc4eaff88c5124e385a9a56ac9c507cb85a34844dd6a0bf717cb057f1331d17693cd85da1d063b728a144f8007db8fcc50c0c8ac7846caa1580845626e4b70b271965f3d7918ee10fcb575ef3ea1052cf104291ff25c6ed179cf67eab281a57bfba59fe3611b2c905b51dd17cb0cb9c2fc772fb7a72326daf7d7963de84ec04e9e144a807e1cb8890963fe6f0f9e4b7597f76e0da19a0ba7489786c8514df63bc0e2860d872b804c7e0083f07e41f46042876a2fffdbe0fe06fbec7c62dde99ade744cf7dfc71537da6782d418f0a18ce21e59054f99d79b41fb2541383396e5581d6efcb7b87bc7a184d3c6a7f09427a360878e834184f56150fc2ce780a0ee581d279677375752d9324b7b6fae9bc2d9cbcc37b114d4200d00c6b787eb7f3c7b3dde88f3f067a80fbe7f908390314c5944d7fe27541051e6ebca04bafe7b88bbcc5a067d6d60975ee2d50fdbafaf00d07f51562308146e049cbca708d78c8dd267ebdc84968e238fe6d035a78c3af1c042f7e8354a7a445c85ff83add057e1a646062da57de9c8fe717b02d0158d8743c1f5ccd657d1909ebbdcfee6a771df17b8f71b11b478d5c51d3ddc77d65beba2e777c661fa92eef3fef51f62a0b1053aab8ed710d6d6b71931f0ab152c5ac26508c526c1c9c509417654db436feeb65bd0f7114c86c12859f66b247af0e5ffa8a87d79c5d4a873e44e5cc43e1fcdf79f42975365c2bd05e512af5f7acbece0acc3bf41a905e738efd785fac3193ad2fa8461a7589bfa90825489005ea89b0053ca3b445f67f21d0526a48b38498a3907645d67aae63cdc49f48ad72065ed7c9186deef36e8feeaae1054c6e6a5ec5c8fa57f4a1bde907b9568f1cfb686b3156a160bd7ef506550aa5a6eca812a7b3466d9a3695dc21b38535640103ee1f3236f31f14bfe7ba9ce2187eca4e7b2b972b96399a073507ebccd7b7cc585cf7b6bf563daac5f0e14e88bc8f7767a8033b6411c06e9a9f4b8551adcccbd3dc144a1f276445860276065ed522ab9f17adc226ddc2db90a1c727966ce731e840cdcfcd8c32c40468197dd70c29e400c9f9b683d0d7a36b64e049df8ffc9d5b4c25be92e4721f0005147da9f1c23fd6f4d5c92d592b19828d6980f053934b50cd50689dc4e2a45287e7036d45293a60298d56771132393e60f6be50c7e711763d0bd5525b15b2c58e61e02a582be21c14e59e06c0d3cd8a30edd207cac2e3da766e05ff802d2df8cd21f77ec1d9bdbdba3c68623a587a239a1a1682f8d230753a4a271b2397086df590468adbc7b22493d515c13895a3460668151c23aed698226c6b045da57bea1a0e14e9f1dd6a9d53374ad7d241d0e362044be272e8d10dd4a60227a273635ac85f3f47e61ec4126e0ba1f6fc99c63c616e1c74f7dd0653e3a5045d02a2a5ac4c05da1c5c479c4e840b65ec4cb01c58350fdbb707b95e9f048794353d2951b14705fc5a9041864230d4b7f55c94b7b019bcaf450c714ec1fc91d5435cd00c12d70fd9d70661e50c463e066621469aee806e5aa8afba5ac04811e41fb0de32b0a2a6f79e5a895749b0fb40e93d33d81f19271b9fb5e5ec4bf8eb907fabe0995d970e0cc92e7a43d18fd1d1ec6fa44a50ba83914a1873da9f68381e5bbe7894bf8ca0c154a68981f8b788ae4b80ef7b2e4ac94164eb72890858b7ff55d30a27bc5582d2ecc5abe8071f951fed5f19d2284f888de3073839767b767bf01b888a2801a24548bba1344e74243f02eebd7d60dd8e3cfd5f3038fc70c929e011981750b5b59587395e44459898fb80a3f96cf67f8da6c5a9afd6923b923321e65d8b3301814d03c007876166cc2092107d28b403aa750ccf16bcc73baf28b9a2bc4f3d0d2b41e421a7a1d9cb44ca16944750a21b89ef37115d7359a008ce9c5ede26fc40ee4929a7d9be140ee3ec27785414a2fba5f5cb3e6aaa19cce9ea172721ab333e1d2ee4114aaf5216835ff509dd468618f14678b0e416731ea258996bc4dfdbe425546cb0667ba7325dc39e73b0fe35b50dd5a1455ddaf1ba7c90dc12ee41b6af6d3d478b07ed2181c76b416d78f8db5bb8757d1ca24306b8a8d63f92483b80e037125c8c4c2e8b12c9c2a498f851e824c58f43c9fbc6381dc678a9e2a0d7124b9cf2210ccfd59f75e3d9cb82a55c9fadc419e3633b614e671c25404dd5589f8720767c5184de9d1c6ab48c6c3c16e75c6e20f72a0461dc5b57b5865d06a74e92ec23838d2af063e4a84d099f0ffa4cebaa878ff16f6a1f40280c1b0b631d19bc78e0c91c9a4246ba5516cd7dbe941a637b8c9f78281375fe29df6b9e4debf50586a251e7748fcb1c18157dd171c5fa99e882f8ff1390831b0efd75f74434e1dba11f3f1b8e2e26e3fe52d19b4db24cfb40e42355bc7757b8fe14511a75cba9ee89f3b4a8f0c9f1d7c52f9f61808a08a4aa54279c003fc9ee02179cb0efe577202a9a2e16d0a35f627ca2a42f1bb9287b65d00cd2e0913bace0f2e07d01fb9aa854057acb12de58c0ff88250a712ce209f8c67b78a62e860cdfe5ca7305b7d544ff411c7740bd0f5464e0bad8ae69efac611383b6e6c67f4807dc72c2c4be01d1ad94371fd7380537fa3638f3f9a1f81c372a7e5407f4def9ef0c50c370e2ec6013cd92b7ff2f1e001a9b04a01c060263553c2dbce406336c32de1e3583f10fc06114c30c55e43d44a8a114023096fabe5c91e4f96d10379120f709fc672687f7298fc4ff01b29394df75885fa1b1e008eafd2a8a316f17373e1af8aecc6d8b4148011bae3ddbb3b6b93bf5481265bc59918a060e82d1ac9fe1f3541788d190c673775221bb2adcb9c39933c5255f0f4bc7236b41dd098023404fcb98f53de09fd91272e30bc3e3704eb2b0b3816ccb58d7a97fe5c2b0dd0df10309459876057f55a4b64e1c97bc4ee63128dfe5c49a1a6d93669aada0b2f3f5cb715f7f8511a531fa0edb67528301402d8409217ed39f8d11f159260530fec7b279059e7e4f725be5282e610e6d6e8047ea7499f105e1b1697dfa87d0ec06ca0166b4b0d00441c49595193e15d7aee0f4b811e0381c89bbfb9b1d73930e983ddb7c960e5be3f8a1a7a9394952648133aa4b3259f382298b7de9b580f5de104a218ad03cdbae5a59b3cfdc64b1abec883b69f49bf03ce88ea5f15aa8bb296816289c5af5657e4e700dd29e600b6184f5501ef981ac5c847d689b76a7d8a54a3e1a36dc0473938610eac61a7fab2211f489ac8aafe6251ec3954ef424d64920c93b57e5222324b8fe332314388edd17137606d05942b14036d20e23a6dfb95a737e9620d4e984ead681c30940cff78672dbda519d210e1f033f7c81cda95b9050d8f13b22e8e1182a8586ac99f01b3426fd5ce8f5b7c0c10e61dc5b6cb5057071069718f32383b950208e256be64a0c32d15144fa62412e81b34b911d69c09525a3b0df0e45a7e4135610ba8178ec65d486c0deae188e58fd39673d46175daac8654250c2255703230664c63c4ce6ed72753d0197c742ffef56095260a51059202d84d23c40dae5fe04bc37fa2f48fc79473bc2fb734ff8a5943f7ef005d083e7fd19af0b9d4bb29f3bc80bca0fe0af713b5d910f929cd9c4c4b93d704358754c1d1e479cd389c986d87e2a3642100944154af0a859597df59f95ea9bd9f2aed9ac3c036027e02d2d1e62cd859802b3c1e704c0651d3185c968a88ba9e56f8f63ac47708417a36bfe1e281b0ff45fb133178c799b4f419aad05e976d9d8e0bb63cc88f0342636a8c03cf24f1cca857e6e7a9365557c6b7f202e001408701f316abacbc0e91cbf9ebdb09a98853411de7340a056452bf81724198b527f527c9c3c343b8a3a26a65cf29a334df0515d276a80ad8d2a216655aa664e3da2d05e0dc3be482544d510f355e0c826f39df03a7ff61e90e88d7ec6ba4863516a57d2f35740e5c44b707769372c706f1514beb5236c462cee5d4847c44ceb8c0d2fba55407d7e3aa963bc1a51d02d00c241b7bdec2106a4bd508e3a5ac389efaac3e751a84ee0563e13998b4ec773049d1af2b153369a9820f4d831810d1943aeaf09a735b3e912f5494bc904cd917b34773a134d0463b21beeadfb75aace5367b4d5615c70cba0a9fe427d260b4f0b30d77b30e04c058bbb3ba28f29e586c76f619e6796e5002217c9a8bd9a99ab9c440a540e867c96ce0de247826ef29d3a783abffa5ade57eba14d6a4b978d1179ba775731a2be20f5cfbd4af90b5c35bc8830db76978fc4edffb9c519d8d39ad546c63d4c761fb1063d967b6ce0ccf1411ce5a9f7b4dd36bf87cff4efedefc4e3de88fb9d18fbb3898dbca4063605c2434475e15629e901d7d52863a4418d9b33c048975c9628e7d535fb09afe310975434e3e054896fe00ad58625d06b57225b2ba6134eb7d685ad2c1c776167c9c7f0a43e17b08860df9ea9b122d3ce6b2e65662057aa80c3e7c35814436ffcd75be93da6ea192703ba85c40bd4fa8582a9bed324960e3b3b13bc859ef6601eb852e7da9b29d99e1d5f4ad7e52e9b57d7339b62dd7fa7922dd095a442531540138e83c1e17d0c83a8d69d85b11b785a4ca5fd81ff08328863803481433d6e38db4718db2b2b99301878266f2a5009037417510b92373959b4911a4495da47c880545129b3f91b60ee7929bb40bdcd060fe361adbd1b0a7af186e8fa821756ff6d6926709bb30a5dae081fb980fb33db1d5ac4bb0f2c625acc5fa852c96e46af3004865345096ac44e743f61387031967ea59c107519e95c00bda39b54bd2d111475068b41c23f60f29038cf09a95f90865b6964e5e1e1751f845fafc4e978b2a88882fe8f95c06128d7d542893cb882647deb3eaa89d8e33340dd55cb5cc1823bf20b8651c40be57dbc6a701585194c36e70ee3aac62d84eae2b925ef17b43d8d74ae3154e5ec1f6ecafaa6809a08093e84176b7099c527523e46b9e18244aa3c9f38975c55399648393268653f99c53387a09e20cbcd8d544d16044ccd35be1306dd53086d4c0056edad1f259064a006eabd7fca5634b906cbdec3cb587ed58b8712491874a431fd99c352841e672b3440e724c9cc5f8adabba5fa3c961742a82ddf4e8ae8acb15caff7b2e9977f0d80ef775e59e4bb102d37490c3da58cce7d50531c91081d63e7333cac209d5b56ec0eefefecfd808bcd8c40f600e1f145d375ca0ecf70b2da1bdaffd3bc53ff5f0a4d018b56ac42786257be2cdec16def7dc5708495f365a2137acae230381587720eb59fc5ebc3ae39a41757abb63a06e06059633dc779db5900dc766ec5cd2613b26d795e9e3438a973acca715a6d038eb1a88722d795f7e8e4b32ddd848326389ead0df47f6273ae0878a45d874246d51bd5bc704e5f0b2d7ad517c7d9fb856e1bf91b3693eb7d889b42bc348fc355cd74625b964ebbc8d450853831d1b2a06ebc6b0712f85da6901031d7b4e4688361212a259cd39a602736eb64e45a129cc74799409c464f6047ab0be0e86430a032a939849f06aff85e5eada0e0b8f6cb02558b42a63a1aae4945b556132832a252d68bc639c0d1ae59e1fe932029688d3aaefb354d589e6bb921977c407536cce5c2cbce085d073d6d0ae8875bd4246dd82dad2400d36a3db5e19e0d56d6d75870b42539cca80888c38585bf3be02c07b528185af5c671fccf81b31bcdb600b78bba8b7174a81d8ceac259051b7e4538f0160160b7db54a2f7b11ad49fab6fcc10c5ecd3695d6e6908ea333c69ceae809cee45d49d58501bb4ce99aad9e7c9fbd8f36610a5eb8d114bcd624c80e39d8906a882e0b8977c7c02fb25d04b71af93ef41b1aa7cc9ea14e2321eb859bcb02c061e9b89faa00b774fb4dea6b70f3efefc536d130b40dab4806e98c29c93b4469ec24829d6a589ca5fb767ad1182467c48604e44c7955c4747f790e72f4ed9a8c6cc2d3f64c1315185444366238390297980525fc0d112b09f2f440a306048b5598707a49d6b5fe6919737a98f261b36e7290e971a194c12ee8906e984937bae245759cad3c6eeace875c371acd56508b901406b62af857356608445956739c8779faf70869aef0bb57f030b6e9610f45c80bf83ff7df5591aea8a0ed2aac744374a0b6f07b4a7e3fc1de73c95de45a15b4a540a3a3179117112f1316db5da9e36014dd9bba2c6ebf98a27e5aa45a4b50ffab40ff0a4cb19bd810a715b2783fb461d6eb260f8e4e01bfacf9a0250a55b7563f4fdbc8672ac699d65fb0abd876aadcd926357afe4ce06125c346245548a68c3cdd1b09214bd826e63e8c6d58897875cab490a44365b3a09aa889c52808998740cca538b06f986fa31c9aa5417ac36b0b7096eecea2ab83e8a72b2178c07f90536a46761606d0b191f6c9be88765e9e534b7afdbd9ebd1fa01b44607e3bb908e9310ed680afd29111bfa1e53afa5e2e0bc9488b8087c39f22538117c933e9cff00ea7ae274e5d3bb084bc97d4420db07aeaa807e947ca59bee9ee7c893c2976fdb92f74cd8ac7de515bdeeb98bacff43d3675ea861e6ac0827930f19f7874c4907e34dc7381c3b7ab8b772ab9b016ff400c9ab7a933d54214735cff85945a915e8ab2c074b2322000d5d3c92c88ea8af28ec7a3061292cd0147d981d7c05026efdb71a841189eba3f0e0f6c9f4b1ca9c91696926710d0733974535670fc4b5dbc6ec167e69251b9c26280618a513b796b8dec460630f2cc2bc8be179592f39d50e042357d8416447d3e63c9f6daaa9d53872134cc28e60c8d028cf25361053c8ee454959a165959fa8af1abc6db5457e1f0507a5d2ada7e4414a9decf9d75b556b9e1d2a166a7827eaaf4cab3e98366194c33485ce52a8df704a8301d6609b718d53a25343ac625570aa6ae0c2301fbe2390f567538539820552a50cea82c5a1f6ad095ef891ac2020c934018fda93a251a73cddad4dc6096e7b8a52e774bfb8e86a8034d473290807503bf3d6022362ca186c7abacb6d5c70a286afef7a98367910286b12f0ecebd892013ab0ab2d89f3b301dc276d30831689d68d5db0cc07c65ab0c24e82f96e13081ba002413da6296e30bbc0fcbca7b1a33edc6ced0c688c696b8c1e92bac983003ec903ed24df11c451a0220748f24aeffc579bcce3674591084c096ebc421753c640f97d5c980d1ca6c1406972e0c69ee5bacd9b4fe5550524d0843dfb750daad56a9ccd13d78e97e69b54a021d0efabf49791c51cc0323f8839a7098521a465e8d6d5229ac4becfb04bc756598a84b2f8e522f2d776945aea7332fef17b8ae6d295d5cf3e730f16e85cd5a9a426040229425b02286f0f27c08e8d059ec61216ab37504b5d4f60a11c3cb58a262e7c0728450676b8c830b4b8e0a3ebd86d724324aaf00b9ec5022a02e9d852a47d949acb523a137f748d92f56724f66ea2351845ec060fc6f95920caacd14fbde846f5d463d2247d9ac5aafe89979b68d1e271a858eb44eec17e4c2843fa850d03ad2285587168fc42eb5834806654533626457343da23615da849e6f51c9fcd154c0af349114a654b0aaa6c56f3deea95e5e057d20a1752d23b11605a4164b50ec8ddd93b0efa653aee29b1045e4e7c8929164bb0e2271ceb4d22345cd401fad4d04f913ec43b5643dae0633aedd173f8209670220612f83d883b5408f1071c37eb2a1dd754cbed665511ee9b1cf4f5b1c64c01bd0da1b58c59f14a9e7a0b5ba7ea12f14f67dfe8ebf326add0af27a92159dbf87528848a04a6be6b8cb97c3843b4246762398e86158f649415f44dd2ac7b0005e9e913ff730abf6e49924e08d208604c7507c26067f5787aa298017ace37bce9b8448b4d24265d5e6a8343bff964da601b5629fbd288dc0e73166e301060e5e19b6fb7cec68052e762461f22804c42caafd670049a5299610995cc8aa3efca04351a8dbf591da40577b46a0c32e4496a77539cb74d804e119d415547d1cb02d2a4beef07361d76b6047f4a77e3e2a83c49773361e1c024d90fee7aca52bf5e13b851562001d354f5a90180111b68680237cfd576c877fc1c1b9808d41e0e45c27b0678840e1a3dd882a5aee2145c3137ad23a12dc5ced78e6fecabae3dc2b1ff70b363abaeb25783b7e1d28cc0edb5d7f95c092bd8238d44971122b4703d9a927770c965a65401682c701906f2eef13857b0cb27d98e5fc7106bc298dc86967500c78fda01211ae7bd97688f0d8169c06fc17c2cb0dceaaecf31c21c5c1875a0b5dd84f38ae08f98294138c1bc370c064ab02f8abc99e92e149149584488186282c988afbc2de36fef29b7c43179cdf3efd974af96f7150fd01ce2b25a3e923be96d352ed0d22aa69dfda867eff360acec9744efb0730755eb0bc91825ce277f3c0fa2ecaa0238f878a3c8ff9875ad02c5f4aff2ca4a76d2640e366389ea28234594354b19d8578cbdb633b0494d0362ec604efdaf59c556c6387529e38c1c2b62c1537801d667f865fb2bb4fc0a97fbc5e5df003884b678f5cc7b262dcc5fd85bdf7dd2591b7400f51b81afa87b23fcc8e2e5f788ab950a729917562f03e19e557462bcd3bba6f599774c06b2cb2d37db6648e4a60643b49e6f58d0e7a144db16553e946469c21393e176c6127db6449046e1a4a8c24612599c08614efdfa1bd3bacd17e34b6aff8945a1735a80a6d7f072a60969ab13eac9498321782654809555c957284201ecb7ea124808fd19b69400d9c144a90dc8200cc84a4f06805da3cde5ba8d52ce0db8be9abca530c2f7de761129b8e56b037bd8b982899d16d09f40b386aa0e8951bfe5660b30ba7d85fe6cd4257e2d822fca852de4851330163b8c68fcf82c214cf62eccdf0acf1f5f0086fe8f2a902ddbd817721ee40423b03bbbf3a15e458580f0e68eb9b2ce4a7e9cd8a5f396fca10f649c5433c6d303a43880380881cb946b6458cbb69ed2fc83de337d7ee537c6f8738f6d2ea4eb52d13c25443e78410dd007184d2b4af44e716017186a56d50855dfacd28f890359db473e3f33ae4d9917e9b1f992c4729d1745e01586b5150304d4216202ae2d05b658db8678614064108d1659b87ac90fc62935a84f4bb4aef6be1ed4b34b97a466237edfa5bc55ba63ff24b980874b7b4de4de624b39363bc6b3d3f26afe75e7fb1658ea0675bd5e3ef86566f5d891de1baae95b3efa29fddb82ed195d16eb07ae649feb69dbec5a6a1bbf10641dc417567f7dd1e1e8e0a76fceb33f7f5c706f2181910c02ba2140683cfb2bd270e09129aadb4a2f4664e16101357bdd2aeba58d092dff4984c8db56b8841eb8fd7ced20d60b0f3f9da84e3686adb9a32ba0d21dec1b4e564a9e757e6bdbcf25da4163996e13984abafee1ce6417af8cfa79906558edf8c8b35d10941512e4eb7ef82779cff8a8cbe0aa687130fc5963c190c73aa91b530efd66761b456fff74f3807f7715b856d8acfba5328056e4c2bc38f6086ecf8f23bfbef51b95aebc9602559fdf4219460f46925e4a6203f7a16ce35db5b9e7af598c97ddefddf324a583dc837149f481fcfc1e64e40978a6920304c4950e077fbe17a1fb91cd4e0af414e5103b9879bd25ee5f97ce3d20e6dce8ffe6e125db74786ad8c75f2f497b4fef8f572346dbc256afd306981e4ac69f6d6fd8068f3918b25c1062d3e0c4b9055e8876bbd351fe5f24d01caa4afc60cd1bf93148fb54f46dfd48e731280d52735a6c1c67391ffca47b772de34e406896e5c18fb0f278473c2345ed7f388aecdc9a6ff640cef3d533830abee3ce0773dabc32aa6dcd336e980fa70e3e52a5e4b7063282cf382c87c0cbdddb603ac6153dcf6968f420ea42193bf3b01dddcd46b798e2d3dcd88d351fdca3ff715296700cc5d7726f6a8d9894d85d49a9e75ebce99495d6aa3cdf41f5c9c791cdde3dc5ff2fd8bbd9b317e487b47951407eab23f0f003abf8367dd5a003efbad3e2250d5094d5eec30c30231d00e21a0093496f835cec250d7ba2674a22545902d5e6c0cd67b6db2602e9051deec5980f74affb8393fcbcb063bf0b89c4db9c750572c3e4dfc0cfaa55b8485a71c2c0d662c1021e55ab9dbf86e1dd31f82f2c5f8181237962da21ccc89adb87ece1f4309c59a4a63e650754552666182a6fffcbf2ac6be9866507d8ff2e3ca526f55dbf850515cbfe59bb44e1c5a5c73780b5c7bce49c0efdd42fb8002d5f641738e8e9eb5b28bcc5b77a7e3ce2cba13fffaa050109328657ac058e8563387a2e9daa14f387a94493f4ff152951a68bb3eea5f3c725ea9df35b34195833ab99d500324004ecc59c9490ba1295dacd5acbde015c565cd217d32c6afe3d2d85b312cd5e2170c4e59308fda57039a981aa3c1f5ceeee92e13e84fe2b427c965a530b085a612c9d327c02ea52918684907d6e3bf04b61747c419ef6158b314558477027040d85e0218fab43fe7439d28a6908f3dcca6140ee5d03edd8b2a9ae7df2d104959dd0902829dbf4c85a5051d86cae78ef6305452c6fc3f8b10fdca5879c4b2d03a4c1139579b25a605fe15f5a6134cda13e666704e8ac3d5ab07b24b8269e91a309a70d14ed9341a082e474a3e1dadabf4c452fd8f62d43a94c9e3d0d2effdd6f509f9a1251fa6b9e07026b6ee4d921088c0d5bf123c0743405decb97cddce133f84ec05dc0dd9b09dc9eff4579543c44dbc4ecb94152aa50720e75ce9a0dea4e9708903a0c6fbe12148af67bedd653bc3e902539257b37fe7f714eac06d1af17f54160bb0f8abbcd803972fec33d6e5d22f6208c553c95bf27ed9f8823772f888f18faf0369086a1e49c3018553f143ffabfe468b1dd4c58eb11d3ac467867c6fd0c995b9ca1296f4754db00b0e7b2493204449a1d33d4081a407216327b36719eb96cbedf4d657a4794230e008ec17f8f4dd9aa97620a1c6cf3b4eeca9c4a42219467ff2266274daa5b86c0dd99fe01938f068517c939582955a87ad9f77e745395f8ec96e064126cbe9a96a8fd4ba2650abfe36afe4a5a4090aafb4bb2e3e9b5ef837a929294bee01ec2bead3b799b35632b30ff29369025fbd3c3444c0b7efbf61f6fa7de4a452732810f94d1d9e79c77f83039f411fe8a63494d6b05c8929b06c7fb3e5462f7a9f5b0ff8906f91ec9f7b8a21e335f855c3e20d1f93258e088e33d0287a7b5251962c19ea0c19d37a147af86fdbdc8a2d9715fa4493e585a24af5602c86c9e9074182a74a2dfa9f4fcae13fea088f9891e6d7c718e9cac4d78e73f1afb3de9b05abf4c20c50b480259222f47633af375b67c2458e7e37ca2a28845e23d921494aee9e031665e3b99cf7a344f93a360bd95bd01bc11b6aa0777c3e05cfae11736386d836ea6b1b7d065c72004ebdaaf64207a91f71b09e858da733ad0753e60a1ffcde55369864086c0eddf0e727f3f8de0833cb8c200587beabcadda30b91d194107840b9947ff2190f7445bfd1e1e8b017a3366065cf64520694d132059d37df5017fbf97b6b8bc1fc65e2ce77475c388b47f1ee47b512b3a8b15db811c9e7f57e295edbec117e8990dca59a6d3a836ec3c3bec8f7177649ebce04f4cdd1e7302aa5d06decb0808b24cf80225c4734563a75fb9b80bc89c35e7cb198f11118ffc5e1e1712a48e9b8e0df66c35371af44864386c03d34088c588804d4b5b1c369645c6cf64a19dfb5659308c2436c7de8f199041eadb46586930079ca5496de78c86faff78b3ec21041e49d97d609b314b20651cd7e3255d49d28e549c6a24692cf2f1d079388a12accc5145d79697d771dd3aa7bbe166ed4cadb8bb9d1ad3ab1868f19892d41b2381acc5ab493b3cbdc5a292c5d320d60b97ecc2b244a2da1e187fe1427fb9efd060cafaaa7b3921d1c2fc5a7b3edb09b6e61052adb12637b34efce6013f42870ce01b09bef564fe3277959567f723ab794d60722fdc4064f81f84c4a22bfc016f56f8a135b42009872cc231956516427577a900cdf73ff2103e0b15085706117f18f86ff25d4a1a9678c75fd466f7fea44db8cd8667f826062991cb8c8c35e7112bce10aa017cc8ef1133b944215c55842a9840edd4ee451fa13a5d5d9ee1d0e379b3ff7c2c73910091b2485278a677ae09a881768b44aa8374fab617af8286320642095d64bdcae8d693184788a316e36a8773068910e3881f9a140a92d82ee9fda11c96a685e0bd9473383af3d647bb4ebf0652e744619aad3179522db3473bb87ffbfd287b0ecb9e79e86778092e651c27c72c7c08937c9bc06d3453a56d2235c7110290b62e27aa7ead0173583b9212ab5ed1f3e2eea752bd4ce9e00f5059a0dbf31702b039ad62aa5a6d040b2ec502cea2f7b147d12c9a3e015142db1d03116a454b115c06bd5c8e9710b048f974135c1194df4e0348c292dffe68df13d47f6afac35a6dbe796e123345921fb99e0020d6314e2cb23a9004caa90cea07b903140833c26b10d6c200481455bf7768b1067a77d1c7bac176610916dc600524d18bcba853fbb19f15a7d13274e65a909acab8873d6334fe9d81a5950f8588d8d2aee582a3c27a4015041902927dc82788e634c0491a988b807041a8e63a86c5a90d1b1e6a22cba6241caf2ee03e9f40ff629a16e0949a5436f65c73d2359599199e0f204f010515f7079de084ea9fa828f6bfe6ef0586d37a83aa1e4a001e0a98b42854acef0284f14086a3b16244327813d2356266d8ecf71ab610fed64a207f00df01b813246b907fdcd56466a3c848498c51afbfc01521c9bcf257d495a26aecbd0c69db2ef8fa20ce165b996bd31bd40813c9812da5a48b4722ed57e92df856dbc47ff58140aacdd4f8acfe23187c57f3f0a8b220bcbe40c77f994207ff8762ddff44a62a637574221f0eadd2fff3773e60db0738e0d7952b039c6fd936f8759405e8b26e718aca73244f8431578592e24801591c98471dbe061db3b5c1411445ee7b2c05b7aad5b1e39960b08ccee4ab061ddf282e08d98b3096d9242ea004c27c360a230567e9f5870e23a229cf6fc1d59a98b627613e143c4eb820aad7c2c8bbb152c43a24d449a421bc3ea48d93711f5144bb8ed61bcf1335470a55ca2d2bbb7a53b6c6d7e054388ee404ebfb1a524a76084f292759d8eb6931d3a31342661cfc024d9d0cac0def6f977249c16fa1d8a8c93102e1afbe843cb941d065af201cc0c0c10940e8b6d0e8a1793e3dd28df864e86d19af3de0a6ffc70c16895929cd97194f5236fc5daf68f430ddcf22f10a4a6421cbcfe77dbdbf5a316318e2982405e32959fa65913519b2d2c369084fbf92a047719dc7626be4638d170b9e4693b4f08a70066ad012544d772def557cf5ec0afe1bb5bee698947ff34dc10f6fc786b9a952cd318a6aa15c324582636a7450f62b9d5c6e0831a5358db43eeb698ae575932c49765ec3f525b9fdfa8a64d0ea87efdd261614bace22949008c9c422935a7c78b6ae540f128f01b8d7388013c17cbb8707a256500e5a8d445741e9bf8fe1e68c7da1e6d79a6d5b6042018b2e5ff148c6f534f7d1df9688997f80eb87b47591bfa6b719f35529c4970126e7c534c70d0dc4c264eac8288f7b718cbd3f717f0f621a2997b8a1081410759e1dd4880bd603cb1812ef918d9e54449a0b16a159bba441d26d402b0d72589fcbe28ff7cb784e522c49a09e488893f2d8333e2974309d06cb2de485200d36e5584c64818d4848ec340c2c5e9321d46b0b899a505ac5e52eaa2442435274737a6b71b0206d18f47d88ff837ccce85191e55840cdfbafffe241f46228dce814978e460daa286ddd6948fab3ccc50bb6eb14cad129f6ee62df188a5592b710a2e7c75cf9a59056bfc5c52ad4cc9030c7044c89d231a879fe4169386256324d5653a0841eab8ef0e8f230dc986f3b54640598b790d258ecda5bbf94574ad76d9a7327ca19df54d97925cb01a78c5e7974725ec6b074a6daa0e3225f274451be19e38cec8d45d194084c982727cda06e6bc10c7a04a82fff313b8c039805429d59ad451c30d5b67ce3ab3fdd7a034ff5f3b683eaf117ed07eac6522969f9afec00347bd2b0009cb1b11c3246093fd04a3ebcd83333f58d1e619fa43f181232957e3713d06adb47a48affd22e85f95d5adcd4ed5290c36f3eb8fabd2e45a0c03eebb98303689d3dd47239f8870d3e23b1a365df9a26b433ad1ebbc7508f32a48e9d44f8659f0d762c004a36c9d03b8fd4f902d7d60d427d7f03f3839105a90df05379e9a5799a9b78670cb55b83bc234327c30ac164686375859c70d765d6fcfa061eb94e9b294210704a94e1c02b7eda49fc6c0ee39af1118c3116218c214c843886732ca554d22c8d55523c3c1f2ba97115c38f5ead0a034eb408e4d887f8f6bfd06fffdb3ed95ba6e72c3b298227cb09f8cb58cab8f8a8e01306e5991058ca10f8227c6eadca72a8bb351a96430a963380bff1b9b52fcb6191a58cc917b17369793e0bd172b6f03da6658f7cf32c65959f632c4739df1374675b9e58672917f8f14bf3e1b3ca584ee0f7a4dcd9004f6c6039b7fc102a7746c413172de5173f3373696b3e8b844b4be1b3a478c20878a62897e6e7b36e788c51f04c405c1aa0cfcae1096be3990a5d99ed9b7a6b082c87b7274c846772b394417d9134d7e66549745acacc7c1136aeac8f272a2d65247c949ee54ce087d09667f16d7267609e98e7da8058122fb8332f4fc47367523cf1ead690580e3bb8b63b4b22024bd9f84c59cb3ef132b67c852f90e7dcfd111acfb188efe1b0a451f15abee5543dc22d8957f7e88165d690250c836752b3dc85af90e52cf3bdd7b539b0240a59ca363f9e59cac6f828346e0d85e590cda5e9f9ac19aeaceb89bdc7589d67fae109dbe099d82c1be62bc672ccf3bd41d7b6c292e8e6da78581203dd591c9f15bb353496c31f9ee314dfe3e1da74cb211bf7086a49ec5aca26e4cce27b4dee116d493463f932f43d3d2e2d80cff27267707c166c39eabe37e6ce624f0ce0ce7e786217cf5814cf14bcb52296430daecd8b253186a524e2614fcf51f6bd2fd716c59258c29db5f159f2f9c2e07b773c631e3c5312cbf1f886b94751cbac9fade0bbc63dd22d896cdc59a3cf525acaa49f1cdc9a19cb210fcf518eef25b16c1a2f7fdc99054f84e1ceac9ea8756b692c87402ca5949491f92257cb9f7eaae528e87b1c3c637da612aead882551837b94b424be716b522c8726dc232bcb2cde5216c34759b07c630973e299022d6543de098c250c8a67aa60b9a1ef6e296ff8318f7b74659995748f9c2cb36277c6c413cdb812f75381a5ec812fc2c1725a7d0f8125ad8f8bebe11e315966bd9e2fdcf7aeb836274badcf6a5aca147ea4e3ce0c3db1876b5bb2248e9786fb2c032e8d85cfaae2ce22f8e047f5f11c9bf85ea2e788c4f772b836434b6299e5ace17b4fcbcaaf993b4be289c07bb45b12dbb834083e6b836b13b42466b935289643129eaf32df63e3ce6e4f54f26c1f2f0bb833279e68b59451668c8667c262d9265ec2eeac8527267169529f55e6d6ce2c874a2e2dd167555d9a90cfbab2945bfc6c824b73faac2c8fb0ad672261790ddfde7396f03d22cbbaf152c8ade1b11c46716b4b96c371f9983f8f65c390b2323e6ab85c827f8f4b73f359282c6956bcd66f39ff7c4f7767474f44b2ac94afa0658590e3f9cee70bea7b632c6798eff5dab696442fae44fa99c09d2979a2963bb3f24436cf571fcf24c052f2f0e370397d7fab612943e1a3fa2cbfe2cb64f914dfa8a58ce26752f7888165d68f5b4b6239f4e0da022d890e5cda97cfc26019abe399ea58ca20f822412ca5adb530cbe1d3a5c9f92c1696622c6bfbae59c64a7826269eaf3adf9363091be299f63c47aaef097167c3cf22b27c159f6980e588e77b18dc5a15cb610ab7066839c4b27ca5f0bde1736cf23d37b776c272b8e6daa42c89b6e5bcfa1e956b336349e4e1da3a5812c7dcd99f27b2b09c7bbe877b8c0d7926161e617b3c930877e6f4c404eeac89279e7167173c31865b8363394ce2d694580e0bdd991e9f05e4d214f82c3cf748cb326b6909cbf34c642e8d81cfdaf318ab3d130a9756e4b3b42c251e5f2b736d8396c42e4bb9c4c3a678c2f63cd304b75668398c6029a97ec6c5a5bd3e2bead6042d87599672f8352e9631109e49895b5b63391ce2d6f42c870a2cbbc4cbd7f3c5c0f7ce78befa3d2996f386ef01706b1b2c8761ee0c88277a716b8496c32fb776c372b8e7d2ca7cd607cbd709dfebe3ce909e9864395ef0bd0e9eb13c9ea9d1a5e5f05963dc59034f7c736d072c8947f7e8b524562d25083fba7169b7cf8a728f962cb3c65b1b6339b4e1d6b42c874bb736c17258c09d9df1c4ace538e87b1e2c65187cd499a5ac888f6a62f9023e53906bbb2d876adc19d413b72c65013f7b78f6ced7eacade78e2f81ccdf81e1177b6e489606e2d8ae5b084e588c7f796b8b2ac270659ce277f53746d0a2c89bb3ba3f3c410ee9102cbacddad81b01c4a706d332c8978ae6d8b25d1856509f8eab933a9277659be847c6f8b5bcb6339a4e2d29c7cd69aa57cf2738b4b63f2596996b28b9f9579c6b69ea98f6b935a127b69733eab856b6bb224c29667f9edb83527964311ee6ccf1351b8361696c4378f31069ec9864bfbf359382ca5a11fdf78c21478260596b2375fc48ee54ce37b095c5b6c390cdeda08cbe199e5cbcdf78477b67ba2efdaae96442196b4e06b4db9b23a9e587bd29478ad24cb36f902ba34043e4bce7312fa9ed213e6e699c25cdb104b6206d7b6b41cda716d7696c429cf179aefb5f10803e3993478be887826dab521b124767067767c966d599bdd242696b2e9a7a1272cf64c49ae4d8f25b18a6ba3b3244a59ce2f938fef6579c26678a63ab76666394c726d7e964406962f22dfe362191be399d6b8b3344fc4e01ef19644379673ccf7e4b379be69dc191a4f2c5eda009f15663912f9de044b19a28f4ae1d6ec2c87539653cef76ad79666498c7ac21678262bcbd9f836b094e9f9a82fcfd798ef5d3d5f84be87c79d29f0c435d746c1924865593bba8bce3c634a3c9318cbd9e77bb96beb72b86819abe0998658ce34df8bdd1a94e570b694562a73e38973399ff89ed49d65f0c419ee6c872766716b54cbe10d9736f559272c3bc74ba6e728c4f76eb8b146cf74c73286f54c765cdb6f499ccf1707df63746777fc053f5a2da79def1d5d79fb496549cbe3e25c5856f1842579260396343b5e2bcba599f92c102e8df75908dc9a06cb21986beb6149ace0d274f82caa6b0bb3243e2d25d47c69f91e1ad7e6c19208c11216c433e9b9b43fab803b7be08972ee6ccc13f9dca3049659b8a54cf4e31ecbf37cc74b7be1b3b2588e74be67c1adf5590e17b834439fa5e8cece3cd18225ed87d75aba351696c337cb7185ef9db08c51f14c645c9a97cfbae0da70cbe1d572d6f13d0696322a3e6ad1f212be49b756c672b8c3b262f428ca328b7669433e6b81e518c1f7f82c8fe3bbe5d228f82c196e8d83e550cc92e6c56b3d59ca58f828409776e6b34258b6b1ecb312cc97a0ef612de52f953cc6b83c130e7746c767d1ee6c85271eb1a469f15a4c96a390ef49f01cd1f85e11cbc5f84a79c60e78a61996311f9ea98b3b73f2c431cb79e46f7d9632a62f32bb34073ecbcfb5a9b12406f17c317a26001e6352cf14c3b2c097bb6bcb6349a462f995d46229833d93d6ad91590e07b8361596c4a9e5cb8d676a5ac20278a627cf51eb7b502ceff3853d61193cd39a7b34c09248bc34023e4bccb5652d895bdcda95e53069f912e299669706fb2ca9258d89d752726b4f2c87235c9afcac24d726c49238e8ceeaf8acda7372f0bd1f7796c767fdb8b4193ecb8be70beb999e96f2c7cf0e9eb0df331d706d132c89052c8b93310e9e0989678c89671a6339daf9de054bf945d69aee22266e6d8ae5f084250d8ed7c272655a4f14b2accdcb6b62399bfe56662973e2a3b0588e3c7c8f866b7bb224ca9632275fe4ce9d097ae20b77a6e78927dc232acbacdc7204e17b86ee1196655690e55b7c9d2c6972bc960397a6e4b3c83cc676cfa4c2ad71590e9996b21fefe4c5b54d2d894c9603f17d7a8e5cdf8be2d64a580ed32c67033fc4806b0bb21ccab194616a03b3241a79ca007e96b094837e446329e9fc38c5720ce07b6896b2831fd9b8b3a5274ab9b531cb61007716e4894fee2c8427f2b01cb37cefce724ef1bddf32ebce1c78629c6b1b9743aae51c77b6e889782c6714dff33d61719e49ccadc5590ea15c1a9fcfaa6139f5f8de03d786c592c8c2a53d7d1697e784bd8d8bc7d803cf74c3b25fbcbc3dc6c03c530e9716e4b3ac3c63643c531bb7f65b0ee7b23c7cb7962301df53738fa62cb3909647f185ba351596c3a95b5b613974736b8a96c30f96342c5e6bc995ddf144a43b93f3c40fae6cf8c41fcbe9c2f79a9e59d7a6c392e86729c3e1a380b836a8e5b0ebce4c78a2104b59051f25c19206c66b4159ced91f39f07c31f14c474bd99d8fda726d592c892d3cc7e0f786b8b4de6761b9361f9673491ce3d6c02c87466e0d6b397ce21e055912e5581ec6d78027cc85679ab394b1f922745c9b114be206d7c6b5247e716d192c895e9625f4152e9753ebe531716b6296430096b3f737089625e3256f3956f99e9ce5a4f33ddbb251be152cdf226bb51be4c9528ef911ca9d293d91c9a57df059482c650a7c1140d7c6c1922866f9ca7aa6234bd9ef8bd459cea8bfc5b09430fc78c7236c8c67dae0dac62c89012ca51e5f4b611903f44c422c894b99061fb5e6d250f8ac28960bf9bfb834349f65e8da5a5812e15c5ad26725706d182c895cee8c8c27f6716d472c891c5c9a079f65c41296c433f959f68a97b5e5177c69b7365c0eb3b8b534cb61d4adf1b01c06bab4419ff5c33d32b224e671674d4f44e0da804b620eb70667397cf27cc5f14c452ecdc8676db93511964333cb11c9f7d63c63679e69873b13e3898c9eaf2f9e89b79c4d7c2feaced63c3183a51ce0270f7776e4890cdc199f27a6b07c86efd2b5c159129f2c679eefdd2ecd84cf7ae2da525812db2c47a5ef45b08c09f14c5f5c1ad46749b09c81beb75b76832f1ccb9817cf94c6b5fd580ee1b8b40e3eab88a5ccc817795a36d1b7786d112c8947ae8d86259182a50cd047457069593e0bd05276c6471197728eaf35706b6e96c326cbbbf842b9475d12172da7951f82b49cbf0d8be5237c79cb16f9deb933189ec8c4a5b9f059585c5a98cfca6029e5fc28c5ad61b01c72b947559659ba65b37cbf58d68897f2cedcf8acb97cb5f04cdfda94e510e91e015912e3584e293f0476694d3e4bcd234c8d67f26009c33d53d4ad355a0ea7588e7dbe47e8d244f8ac259eaf239ea97665b467dabab5269643437726fcacd73d924ba2188f3126cf24c3b3592f91dc5a06cba197e798c5f77c58b6cb378ca58ccb17f9602933e1a3f63c61563cd3a0e5bcfd9119cb5791ef7d718f8a2c898d6e6d87e510d0b5f1b1245eb19c557e88edd67e580e2d584efbad58d218bdd6963b43e089679e1de15bc7b36cbe64dc590e4fb4622903fd68c65286c647653de79aefc9ee0ccf1349b8b61196c433cb81fc5e2ca5183f43736d5496c4dcadc1b01cd279c686cfa4c732267c2639aecdcd92d8e4d2f67c160d77a67ba2d432f6c4330197af35df73e3cef0f82cdd3dfa2db3e65206c017096029f7fc38c6a5457dd6049776c167f5b08cb9f14c715cdb124b22084b39c5cf962ca57c09f57c81f99e1acf18a16732e2ce0e3d51893b43f4c427aecd693964746d672c893d3c617e9ec9ccf375c6330db936ac25f189a5ecd04705bab6aa2511876b3bb424c659bec417c99da1f0442296b23a1f95653989fcedcb5286e68bb4b15cd0777669357c1618d7d667495ce0ce7c782217cb89f5bd0696afa7ef81b18c11f14c602ce59a1fcddcda96e5b0b79c737c6f816b53b21c722dc711be37c2723d644c8d6712de599c2716bab61c96c43ed7966749ac7269743eebd0630cca33215a72716d7f96c40696f595b6c26751b18c9df14c6edca3da9278c63366c13311f17c257a26d89db97922077766e68982ee516e495c633916fa5e08cbcdf85ab934209fa5c0a585f0594a2c4742df2b746b6f2c8747dca32ccb2c22b726c772a86859225e76f9bae299725796c71375cfe230c6e23c930f7726c767c9eeecf7c42fcb06f0a5e0ce5478a211b7c6683994e2dade58128fb836da7268c6f2676c82674ab4a469dd1cd472b2f1bd2ab7065c0e73b8b6374ba2933bebe289745cdb9625b17769257c96137706c21377583681ca90de8980272c8b67cae0d65c580ee5dc5a7139ece2cea63cd1cc721ebe45ae8d882591d05266c14795b9b525964310eeecc9132158d2b878ad2677c6c013dddcda9fe5b081a534e367685c5a9bcf32e1d60c580e6b4b3896328da7fdae6ceb8944ae8db8246a716b8396c32ecf179eefcdb19c327cafc8a551f92c3a97f6c067fdb9b3da1309788e8bbe17c49d45f14435ae0dc87218c7b581b124225abeda7cef8d656c8e67a26309cbf24c0d2c67a2ef09b0bc4c69713e6b852be37ae2d2ad99b01caab9360696c41f4b19982ff2c3524af0a397a5cce1473deecc8b27d671673f91e9d680580e2fb833244f7ce0d6c4580e6bb833339e48bcb6d77258b51cb1bea7e8d63c580e21b8b2389e18bb33354f1c7469553eabceb51597c42e9632285f04cfb24f5f3cf7088025718f3b0be389775c19e4a7074fda11af8564b9105f0096af11beb7c73266c43385b19433fcc8e839aaf91ea02996b2851fedb8b3219e18c6b585b124ceb01c65f8de0a5716e78d0cb07c01f99e16d766c09258bb474996c4ade7cb81ef595d5a0c9fb5c5f335e57b64dc59114f14e3d27c9f65e6ce4e78e210b7966739acb29c6e7c4f8165c7ef994b1b3f0bea095b7a2626cff18bef01716b332c87789e138cef41b9b3de130fb8b62f4b6291a5ace267112c0b444a077e9c97f6e6b35278d67877919a7b342e8954cb0a5f0e59b637e5f832eacebe3c91824b8bf25953f708b624026fcdcb72e8746d6c2c89442cc716be87c2232cf84c1cdc599fd8b4dc88ef00cb82f09d6339faf0bd1a96b2a52f322ee7941f22bbb4259f85e6da082d895fee4cca1327588e61bea7e7dae45812152d653d7c94119746c26735716b7d2c87583c632c3cd314d7a6c59278e831a6c033d5b09423fc28bcb31e9eb8c5f315c0f7c2784e0cbe97b49c4f7fd3736d47cb211a77867b22d4a591f9ac0eaeed842571cd92d6c66b31b09c577c8fc9b2b02f9a7b24c092d8c79d657d56efd27e9f75e6d2769f3565299f7e92706d4896c3e2adb1590e7f4bd89967f2f21ca1f8de0e7726e6897bae4d8925b1d0ad35b01c02b9b4a6cf7a603911df23b7c6b51c7e7169157c56a2272c8667a2f31cdb7c2fd01276e499a05c9a019fe566d905be412cdbe8e500cb5ef065632937f8518d676c7c26132e0dc9674170676f9ed8c1723aadc9590ea32c473ebee7c49d2df0c4a9e514e37b51ee4c8b27c67165c227be96e7f06d7ac268cfa46429dbe1a388b8b543cb619ca574e1472c39ce67727cc1c617acc7246ef99ae395a39cb4e50b265f9db8d7d1f882cd668f2fd9ec35c65e2f5958478ac1e684c1da1136d28a24833de266b23ec7ca1f4833c993c1e6721c6fcf46d89411a99cdf639db5e533f9cc26fb32d83c37c21a9b311b6c279bc964af79e58fdbcfa31aee1b6dd99e1c56934fe39cb302a9492579bbbd008f6f7b3cea9447e7926c8f47cbdde3c44dd8d2ad8db40e4969a7dbf4d879f78ebfae29f0b6d8af21cf0190c9ae0dc3c989b4edf1a83b1024cfee4c36b79dbbf646e4002c2d83fa55fb2ef0941b956bf36c205b3e92e05c91c7ebb46edeaf950438caef41d24dfc4504f801b8d3e55c22cf732f7d21e519f85ffeb2df0cfbfbff1ff588ef6b390fff3b2dc7e3b4afccc1f21fa35a3e6a0853f0cf9b86c936cbb097833ed2385e22304af03f920d88cae1406c5818e1420209bf11123ef362b66c4bd8451658dd0487702148581d5b62d5ab0184dd5120fc05841b65034b78531d56cbde103e8d589d830cc26f4cac8e21207c690bab5e29099f60ace6410961af60c2637608bba890f02965755492347a23243c66c5ea446f08e78108e14b54c2deba58754e13e189e4102e03227c48a3d9b13c84bf6410fe3a24ecd593f09803c2271be15a3d2127210a1702c46a214a58bd448670a406e61ca5e46a224e629583479f35e189e0100e030a5f9a43f84b07ab135d097b45133e03b07aca11feaa42384e04ab6141e14859047a6ab19a88b0bf7610bec485b08b40b03ad6c8eac9a4bf52103ed7c8d1e947f8921ec213dd21eca24156157268b66c0de13233840bc1c06a9804c2772822364c0de1b1dcd34858e6f4ca4958311410cef524bc49d85e250947da22d043e8582d840be13f92660fb1327b42592d43227c090cab4e40c2b9940887f184278943f84b0a20cd55b8ec05ab87e4311bd686d533273ce6c46a226fb46ed811c7303384cb7e0847d222d0b106ac9e7184cfbc089f53c2a30ec95e7a43f82b08e1b245565dc481f0a530b698072984df3410febac1aaf38f709993f08913562989d8b222c22710ab9b16091be480d944e268af7e085fda43f88c62f57c09877d29b24d4aecd815e13727561371a3c3b6f47ee16035cd8b59af80082b861561814489f58a04e142be109e8320e1f3495f5a245c8686b0380c669d81849dc344f8dc62b58c4ad8ab9db0485c5613b1c3ea2536847335098f7241769028c2eeb4cc9675217c481de1f38e7019d1ea44710897b960f5d218c2b98a08874d207c2ab13ab66535d20373aa9b6376ac0ee15302ab97a810f6f680d5b3c8161f6d315bc811568d63915517f9209cc819c26719397ae3c0aa4410982d6bc3aa4951c45eb212b60919faab05e13301e12f25745de3275c4644f8b881f0a52c844d8262d6ab97f0d814ab97da103e2710560ea33ec358558c2ac2b27187b06ed411c74d76583d69c26f40ac3a6789705919c2774862352c0ee143f008e7a108e1448056bf12099fa3b05738e1938c55ddb843d89d94d84b74089f69998dc445a05e21094fb2877019977022549d081956c52d117be44078ac8ad5d38af025a0f00947d82b23c25e8dc2a71d61754c66e39cc4164285d5b2a1f0a9668e855821ec2237640c03232c0d4a7f41f1e3247c08872909e72109e133298e2711abb25187b05702087fb1203c8687f0d81dc22792b07154593527852f3112fefa218d97ae84c3dc1076d10fc213c166bf92c82db3122ec363c8b2a0f0a802dc781e096f32a3471160c689ec103e09b02a0d81d939fc112e4491d5429cb01a56c6eaa63584c3c458bde4c51cc376c26532089f5e84cbdc10be24142ec40be1b01fc2638c84ff4043780c8bf01c1809ab6b127b3260b52c89f0263afa4440f81297b06bf8842329d1e7247d088f4212c742a4102e040aab679a3916d285701ef89875111e322ac702c213b5217c3659bd548570d919c2670356e78048d8451f085fb242b84c02ab8750205c168370a4276f5e0a0acb861dc2652d0897d5211cd6a569595178d31bed954db80c91b0b43784bf78b07a69e8c64288103ee48ef0dd19616937e1322e8437e121ec2d8b70181bc297ae102ea48ff069139ec31ee153265c5625fca582f0d70cc2e7912d9e81112e640bab2ecac0ea57114737018527190acfa18ff0970b69fc6a22692266084f82c16c9b9830c3ce10be039859af9684bd9209970d11f6e84938970056731560f57cb27ae90e61af66c26574087fd1207cfeaccea102e13b44317bbe119e644bb80c06e1352db397e0107e0b6255205066a51d59550e2cc285a49975d19b761106562f75593d77c2de34b05ad6134ea40cabee0c882d0b4078cc27ec224156d3a4c4da2dab654ac2656158fd7242e9252d84d7bc98cd831156cfb8843d0240f874231c86c7c8d300abe703c2850821ac1c3dfa3c33c7441609270247177285b03b37c2657258bd44b47aa90c61e7f884cbe0102e4490f01cfc0897f161f5fc22ec223b642c2409ab97be00f6ea48f8ec591d8b222c5395d9491a098f61099f0b9f68e4f8e681b0b70d84e70048789239840f59121b4686b03707842f8921ec220f8427110a6fbac3ea1b14321a64caec5802c293b0217c480fb3e74dd84577c8384997b0b38f702e23c22716ab270056233930a7574cc26174088bd483b0bb37c285fc103eab088725095f9ac2ea7980b0b985cbba84e77047380c48ef29c6aa4114880dbb12765107c2ca6145f8ac70226c749890a66587ac8e2d60754c01e144aaac962d094b7b223cd644b88c8cd5310684cfa4c496355a7a0e60b5cc0b61e7fc8427e1122e4b43d82b9e70181aab6351c2e74c58241f84cf02ac8641203cc91ac2655b084f7287f0d709c26712ab6d5ecc7a24807024286f16e247f8ce8cb0b9dfec246f08bba3231cc80e6e3c79c2eef2084fa287f0b964f5121ec25e4de14d62f439848ce7922e1340d8ab0a7fbd60751395f0db2042cf266d2e8a59737a62ef5080d549e8102e240be12f1f84dded111e9362d538a8ac96e9217cd6114e240dab6f15103a491bc25ee984dbc64cf0921dc2aec144d8ab9ef02639845d3445c64b68088fd1215c9665b56c00e153273c2665f510616cd91856e3a0cc9e4c56df2c20f4ec22bcc94ad8a30084e52d106b6ec96c217f84bd3160f5cb0aab5f42d07ab5f0217984cb26b06a1c62582dc408e14296b0ea5295d82f1884c374c25f58e82aa7519761599da40ee1af257627c243f82b07aba7d316c3e010be8485705b13b1b9a0844f33731c3b4058de19e149b084e555990dc309bf0522f40e8d709918561341c36a226a58dd8465b58c0061ef3082bda4252c4d68f52b06e13529b1c63186d5429810fe83375b668755af6ec28f0c983d91589d680e616f588423b943d84579c8381192596f5cac7a7544f86b05ab657758fdb2c16a226db44a08ccba8323ecd510e1515057e78087f03985e54d31ab1c57841f4999fd438cd9302d4b27b143f81296f039c66a981d5645eab27a080fb3135531eb9295d92f13ac5e9242f8d881b04b2ccc4e5214bed4871b2fc521ec554ef80b095ce568407853197d2a20ec5500c26564081f6247b8ec4ab80c289c085138ec8cf039473892a23e15c2c06c9895f0a52e84bd2d60750e16085fca43b8cc88f01d905815876736112bab935c098f41b13a491ec2fe2860d6452158fd52b49b0728840ba9c2ea2985cbc0b03a091cc2616b088745201c9685c83235845da389f0db1556bd92c2856021fc75c4ad6c00211c5687b08b7a109ea80ee14b7cc4f1a422ec1a4b84cb84560f99232c6e81596f0d085f8a42f814608b6f1d08bba802ab854c21fc96875077718473116075d3183df6c4ea29248e936809e77212fe22c2b64c4b78223784ddc9117e1344685a13b19130123e448ff0570fc26164840731c0ea248c84cf2b783cfb62f5921bc26163ac9e41ac9e5156c3bc383d63c2898821fc3544ed4947f8a881f0f9c3ead946f86d83d94486c2b906b03af613f60e1eb006b99a3d21101e044a1abf1009bb4694b06e605975110fc27308245c4813c2e214cd16a285f0232db3657b08877161ba2928ec2242564f25ab97d610de831db39be2b07a490d61af88089731092b64c9ac8b2eb02ad296d53126c2ce9112de748670d91cc2895c09e74262d538c2b06a1c40abe702c22e82d36f1464f09c22bc698e2e240aabeae48875a747f874d293e0217c661176519c76511d367e1981f4d219c27f2c992d2b40d8dd1ce14b66085f9243f8ac8958e5e4d1ce89122e0b22bca94af8946275222ce144c210768747b89021848f1e089f11c471cc00ab7151665d434a585a14ab8904ad468287b0b92d6265a2323b891bc2274cb82c0ee1b226e13c3c211c96132e0340d89b16ab7910427813199deb8855af6ac213b1215cd68770591ec28514213c891cc2676184234599bd5487b04a48cc8695211cf6c0905e11201c6989d942f8082b0703c2b90010beb465752246c25e350997312232cc8c70218084e551111b1684e94442e1b73d1b2ca402e1b22f842f55097f31c13bd11ac297d210bed448385712ab2ea2808c635484dbb4cc9e3eab13d121ec6d8bd539f0110e9bc3ead71441ba7465365700c25f35584d440f61e595d52f14843785219ca665f652518e2714ab97b2cc384996f0e98050c6e64f291b97a394af5f13d6976c9c72be7a74fb289fb4632fd8385fbf9edd970cf66c3bab0d2625ac52da2e6cc2868d83c986c1c6b9bcd5eeb73f7bcd613fafbdfa6c2ab0e7b1959ebf72cf9edfd206f2d1e313065b4e4392d97823ecdaf8ecdab47efb46033277b0dd438a3c947f167bcd96cfe4e3af1793797fbdc6d73229dbe59d3f1e3b76c77f9c9b012246964759692efb147ed9e43abeb2eea4a3fb02d32e347ee71fcb827cba7bc0c005181482ca9269c922934121f0037f6580c183063868604f9e3855de005f13004d76a6e844351de0d464678aceef1bce41920871001f7afc7010520ffc874a20614c17048220d9e08320c1c1ee28608397d274b1ecb86638719b20808c831c69e2650efca30ccb001f5b42d6c0df6b1dfcb00d820cb0c40e203d410600c2260f95055e76e565565ea6c0cbaa507959022f43e065535e76c0cba4bccc809745791914278208300c12801e2b4993c6e90d9f354d6ae84ced8983674f9c263b4e7af6e88993666a4f9c347bf0d4798e410218f44f899492a82479f6c89c0079e204485200bc3fa0e9654d5ec6e4654b5ef67b99ef6552329992244870051030c02f931d590680ec49664456c449469335c998642f594fb6242322b3c986c8840499c236c57ac441c5aa890e531aafe5828330a509c2b4e420bda785481106d3d8a3e2f7e0203d29374dedc449b1512f8e9e550fd823b21e264da2c880bcecc7ffc1172b78008509b224539225c978b29d4c27cbc970b29bef2743921dc96cb29a8c269bc9643119ec65af2a865811d2c46b8521bfa8df122584d009e2c68b042113e4f9f99648f91004862041e60401a28702418274f07af8448992e78e149428a91980dc00e4c90c202e34799242901f563f22f8f1c53f7102a590129752a12c9a4011a4f424c9083e4194086863470d93277892daf0dca093244113276d788676e5ede1d9f9358960976817359730792245161d19ba30f301dd16bf2509e8c65c212841725c74e8a861c3c4b7041786d4932341707686ff7512f5440a22b7443f9083dc46b8016922ca891438a434393c7122c588f4511a477034087234079a3c5379eee4c9f35b323c027244b3a54027cad7a40e9b95203658ad04d9c486648f1d357e9a346172554b80d684440a52f335f151d1f6ccc208425b008d1d3d3ea92c66858ac4591e26514c9a9019213b824710990c80d4e04173670f9a26509608112416454c86d891abd81141623dc474986a73a70e1a3d53536edc4ce541a3676aca8d9ea92937514f6e0802bb82c1a9fa0ba5490b2f21ca051426865e5d82bc74230c8a5e090479f95e00482d593268b4126494d3900f7f838c4d828c4d75e2d899a283664a8f1a3668f6e8c973c78f9e3a7ceca86183e6896fc99e8924c8440a225ba80613802924c8fcf1464f1d274fe0c82735024e1049409ca8266582344c900a09f20d63fe066995203520480bc883c6b7e4d725c861bac8f8ae206f61c2c40a1e2eac8174759dc1f3e407844b0a10ae234fb86440b6b0b6fefc772b6bca89942f0a8e9845150ba21887755c516511a789ac3d7984c86a438c33cc6238c34086851602c50d433cc307fac8e297486585611235139f946cbe4cfe1f0ce70ca786676e6327ce1c347bf24cf5f94189a2278f12a83ea2f8f8c34771207b9031903d7c2f6b4bd04383a9971debca0306208d8640ee100208560bdf29acd7036a73a7ca40ec286320761811e5fbd561a50e28d761f367aba895b5448e3de6003494c3881c40fae0e3ef1e7ae4d188111378c4ee184c1836537deaa0233687af4f94286f8c6e10afc3e64fec8c1813889c0013e66371c021fc8fb9d1061b50ac1125ca92d8951a69a001448d30625667901104567dcc8918d5c76ca04387cf9698183126aeec8963470c203b54eab089c0d7274a943676e23c60f5c3cab6bce9590446cc071c8cf08d6983c50c2ecc8822f6c5988f79f11bb3e449174eb868b205132d9664f1c3c277851572f49411431927c4aa8851f18fb12962524411431483e20927e2c49a8831119b21b6841e4531256249c490f8238cf0013d000a5a73874e958f1521c43f0601c40fb789f9d04394284ba8a25041d18903c1141d3a5412c57488e5d0268643ec863088084307dfcf86580d311a623320d2f3eb13258a6fc9af4f9428be257d7e7dda4ce9e133c5cc13274d982cf9f9a698916a326002296cf250d13385cdd4982953ec4c659962672acb541d357fd4686942f284cf541d3576a6b4c1a247cf14296ca6c600da13874e1c2c6c9a483d59b2278f9a2e80dadca9b2278f1a3c6db0006a73a7ca9429be5f1392277ca43cf149f179c207d0d49c254de2b4c1c2a78bded49e3879fcb4513395678d95254df8f8faa08982068f1e2e8ae002072e5218a029ca112e9c9ef0613335464f1c3c54f4c4c1a3860e9e3a71f484f17347812d66378000102da6120092451077faa0b9b3070d9f3b6cd0a0998a93670f1e3d58a4f1b2612f3579a6d4e4b9c2840913264c983059b264c992254b962c59b2e4f7fbfd7ebfdfeff7f3f97c3e9fcfe7f3f9a4a4a4a4a4a4a4a4a4a4a27c51be285f942fca17e58bf245f9a27c513e2850a0408102050a1428509e3c79f2e4c993274f9e3c71e2c48913274e9c3871e2a44993264d9a3469d2a44913264c983061c2840913264c962c59b264c992254b962cf9fd7ebfdfeff7fbfd7c3e9fcfe7f3f97c3e29292929292929a9a8a8a8a8a8a8a8a8a828292850a0408102050a1428509e3c79f2e4c993274f9e3c71e2c48913274e9c3871e2a44993264d9a3469d2a44913264c983061c2840913264c962c59b264c992254b962cf9fd7ebfdfeff7fbfd7c3e9fcfe7f3f97c3e2929292929292929a92829284f9c3461b2e4e793d25207cb64803c91e71773858e9a293079ba00a26387cb549b3b5aa6c0ec89d38489ef8e9f307ad43410074b183177b6e499aad2464d1505f45c81b3274f9c2a6dd45499a2a3660f982e74e8a851004d0ccec7de7ccccdd4c7da7c8ccd9ae9a8317345022c60d058b962858b025baea0f9c2e5cb972b68ae641163858b16341150d192a5cf94376ac284999a7327cc133e53ea4cedc162e5cd1d3a539ef0c1326527ce1b3b579428e22a892b7eeed879608f9ea92a6ed44c6501e4264e9ea931537bf6c0d1c3a70b1e2e6ce2e499aac347cd54163b570638329d3d6cf2508925f031046253121d31c36bd0e8d1a3064f9c2471f2e8a9a3478d9fa63b7b3e76c05f3d68e8dcb9b306909a3977f44c91a2078f1e23d4fc4568719e3a77f22c00284f988f0d11f2410c050525021164e8c9a3244e1e3e68d4002182ce4a942899aa7307cc949d3b5b62b058901890d88f98522c29c68bed7448726ef2f4b1f2809506a4e63461e2c3c3660a8c0e0909e927001b664e853e920b1451cc0daa10f0d60f235ac485a452395445f530c23571544adcbb73485e40b49258438c91b001ca4c1aa69062ca178a934e124fa4082a207a863156c8e18f166237a4d8d10804883a62b6036a40bceedce13295a78b9b3c63d04ce5c1b3e48732561eb0d2c015203e8cf131592c760c167bc5c63679d4c0d11301901eb698f9c5a612df6f0e1d374d80e84cb15193a769cfd41c3d6ad63435d989a366cf1c35749a004dadb9d3a609080f57f050c5004a942839d2b4f472e54b97274cc08001b2839d8f7367cc549e254df824d222d1893668134507269f8311392cd17a58161107186eb0e38637c33e1ec6c7c3f6d0e3f1d8b0079607ac11901a9460346580294ff8b4c172c7cd1d58763cac0e3ae698818e3b7bf000cac3068d1a3d6dd84c21726306388fa88d0c47c800e5461b0f63e3616b5cfd9b3c530640d2e6489c254df8ecb94347cf004b9af06942b2a4099f236cf28c41e3264f9f285180bca0c70b7b5ca86234871ab9d067812f6316f832a68d9ea9376798d1c20c6590f1b020b08a6a0c386ceee0b932b546cd1a35557a810a3b7c9d387bfc342d6972a50a952a29f4d105170fdbe2615a6481c2550a6df0e05113250a1a3c7a5038e04f68c28a2a4e988a291e264514503ce144096948188284029a60e2614b3c4c91125c808c3025ce9a273e29343f3e4da4f83ce1f3c427c56749133e4b9ac41121d1578d427e8018eae2f326ce1a39697e40033114643a74943491129367aa0b007ad0e499c2235b0208083ffc51a22c698225844187502604017e3a6aecd4b99307d09a386df4e45182060d1e3d403e904115ea52886a9d0756ebc9a3e44e9c785caa247767c00596f0443afaad1deeedeabb9e5c1d05b7ea8abb7b73814fdce9e6a18eee8bd1fb4af859f0ac21f1c543f7e6e6b9b2b853cc23b1e0f9c47db5f13e42179775a99c5c9e941b4461a944bb8ce85c9c12371684960a1767c38db9f03c52f45b212c6d5cbf05e5f28ab85752ee6cf85a245cddf002b5dc5df006953c8f1afdd60cbe21ee54fa274517f7e3bbeedc51ca4b493d6b54bec8666923e3b702b8b722beaba645c1c54df05d45dca42b17cb83254ccafbaeb8e3eea196b88b913231fea7c49d323cd49525121fcf856759937d11cbd2a6e68b755c9804efabbaba252ef076959e6ea3a60b9befabe1eae0b840293777e652c17027917f8242073d2e6e8a1b5be24e340f055bdaa4be5875ebc13be96e15f8a63d5737de2a327797c3056edd1c964be5c1d256e88b5c3717c4a51adeaef9a614ee04f24f4c2c6b5a7c91863bd178a80d96af19de27c1f2269febcfdd057183b08bc4c47349dd57a3f7997075505c20ef89d4e6b7ae78be1e785fd49d333c14034bda085fb43d653dfc8f873b46f0525a2ecfcd0d3a7179516ed084674d882fb270752ddc2a3b2e0f8b7bd5e556cb375d7073472e959b656dcc17e55c989ef7615da4369e2b823b9d78a8364b9a1b5f747275f35645707961dc2b32cf5890ff19799417fc93061707c07759707144be6bcfe539708334dc5d1337b85bd6685f74e04e331e2a83abab72ab58b8c7f04b0a5c5c17976a766172def7c69d163cd4d34dfa72b154b8bca31b6cf323b4b455f15b44aeec3be159d26ef8e28fe50cc8ff824bdb0abff5ba3b3617b8c45232f04f796e2eea52d959d260f8e2eec22a781f1ff7e6c173c97177f20221b8bc1c6eb0ebf96af2be019e2f01def7747964dc2b35f72f7ee986cb337383465c1cefbbe8dcc6f04e517717e802175ddd181778e42629b958746eaecba51ae1de2278ae25ee62fc52a2bb7be306a5dcdc0c974a8edb21dea981db30dfc4c1cd89b954283c226df05b7df45cb8b830dfe5c3e57571afc42c6750ffbbba3a44b74a0f2d0c96b0a6f729716f7d9e8b8c9bf4c0c51a61691bf4c5ac47797b273f1737c6a5c23d6907bc561d777ce1a550b8b91c2ed51d77a43dd41097c7bbc139f716c477c59e472ffc560697a7c00dbaf0186bf23f244b79c03fd5b9bb306e50002d207ec5f8fccf00229e47767e2bcf45ba7a2e3197a7bbc138cb1a165f9ce1e2f2b854515757c2ad7ae3651b6336593b63b116b69485cdc7978c2673e37dc9d86b396595c3668c363ebedaf1f6ba8faf8e734ed9ca6473361b97afca71269313e935e713066b4c3e834cd835a5b1b85aed715e3b67ed551b865b3e2d879bb277da510eb69c9248db5d6c1219179b75265f34daaf39defe8ef4f35b84f65ac2e4c89b2d8daf6f4e1ed960b01f73a435e56248b516e6eb32662b0f08d2d3439e6c53de22e32a1f67f3351fb28bd19eddfb8c8d39589017efd9947dab6d184fc67bc4c95777b49b5ee3f3704096ef66b91f472041b6e146bac8b2473a361b722d80817cbbd56665b1e528fb26d7f6016cbb5229e9097bd50210d2b4ecca5e50c794fcbaf6d2b18f2c3f0723223b8af1903c3ec06b4e9a0180f413a6db4c41b6595192cd8655c2604ee38e2eeeb5126c5abb6c4ee418ef5106e0e4d9ccf6f2031e6b5bd2861c801400cf033672ef5bd3466e63dadecd9d36003c24c73ea0f6e3981a424f337cf438d43e2ebbe56b041d5b3664da6376fab6082a043a0c2f035cbb84f1750cc8876ea23f38cbbd126ebf62481634d2afc9e5e8ff8c5af965c467d127ee3079ec281ed287b00d6b60d83fce52df610e32ece8091cf75c426bbe73c52c7edec4577fada3f19bf0d4a31c3c0b72bc63a4d2b94b9a04e982770e3f22031e91d223ba3da2d7cbc0f532105fcb98978189650d262c6b405ad2f0fa2cc3e50c5f7c0c6f3e8b1d9fe58b8761eb614840be10f50f7cf187b8fed0147f48873f34c03ff0fb16d858aa80c4b730c0b7509329acf00e10b14c81f62c5cbd037dde013bcb13842c4db8f22c18793344fc0a543c16e152043faf42128f45855721846508599f42d2a340fc1304fd0964fc09c13fe1c99b3064e981923721f72530fa1252587260c792033146a05acad27811f078119a7811b8901840bd087e5e84216f488a37d4c35250a23724e6430061865f008b5fe089252037cb3f40fc1226be50d62fc0e40ba5f18582cb3e6fbe109b2f94e6af10bf50df8335fe4af03de8e03d98f31e1ce9808df700e93b28f41decf01dc4f90ede74f92b739678c458de19e2afa8f92b669677903c076d967ab6780e947e833c7e03467fa580259daa659d394b3a4d5e03abd7a08bd7608bd7008c0670bc064ebc06465e831f5e0336afc1929c23e509099f90134fa8882734c47f29e209c5f08442784226bc95394f820c4f68fcc1b0fca1b07c73c4f28d0e2fc1119fc194b752fb0ce60f22e215a85afed0fc203ccba9443f28cd72cac8b28d19598f810a4b36531e8340cb3565bc0264966b1858ae39f20a2cf90baefc05f22dc0e215e85bc06689a683b7e017d4c60b8ae3abccf082c4589619f45504f80ab4f80aae584ed0c357911f084b021d9664047d202e1fc8012a500f880e39c68ae518171ed098e598003e8136fe4f177fb62cc32c7d022b7c020bbc9f10fc38c0f47e7a4b2fbfa59720cb2e8d965df24840f60814975dac2cb928b1e442c3f7c12d9d10c92c273c9f29cb2c4d9ecfd32330e4f76cf17b38d853e6f730304589d783c34ff1e1f584f07a022d1be02d1960f27954f83c83960bc83e4f973c47960af4f014c0b0acc2e629b8b27c01f0787e783c7e1e8f058fc7813f6085c733040f94bf73c512811196089cf93b76be0e713965d1dbc1e280dfdbb1f376a0bece92e501bdafc3c1d7f9f375e27c1d2a75a67c1da5a7f3e6e978f174a0584a69e2e96c5946c95a2ed5965144f8394c20fa39795eca969f1366f944879fe3f45280bc9c33964d6c7839893ece1c1fc7868f53e538bc87c3f47046582ea903e7cbbfe1e0df64bd0158963f2afe0d987f73e6df382950c60ffae1ddc0b01715decb091fc58d37406640907783e5dd0c7faa8d6514eda7e844a1f36dfc7c9b18becd05df26ce4751f26c767836567c9b22cb02183d1b379e8d06cf06ceaf293e9b039605d89e4d975f43f56b86f835667ecd905f837b357ca4f16a82783537bc1a2202bd9a2c6ab2bc9a063e0d16cb00a8a0107928513e4d068f86f868828fc68b47e3c23f69e3d1cc79346b966acc58fa94f82758a029f2842a8d48fd19aea50d279c41e2cf14f16784f82782964e1afc93357f26ce9f39e0cf1c79335bff04eacdb0f166d6783382decc9c376367b9247c330a2c97dcf832227c9928d2bc930cbe4c914703e6cbc07e82aee510203f411e1390f11350b10c92c5949f40f64d8adf04eb2570f364c87809047809863c993a964a732c95123d99354fa6c89311f264601f411f1f41a325cf8d8fc0878f40ea23f03d04217c04470f811e0fc1171f01d6983d3fc6cb43f00302a51733c58b29e2c5f4f0620e6df062d8bc18302f06f761f8f830357c18381fa6810ff3e4c3c8f061600f86d183a1635963f360d478305b3c1e3c4b1a120c1e8c050f46cf8391000c1630b007f3fa2f594c92fe8b9fff92e7bf2cf05f0cf8256afc97f95ef6589aa086171f7e4b17efe586f7c2c2f2f5c07b11e1bdbcf9258abcf8792f6dde4b98f7a265098bf24b64f82e607439f45d027d17f95c98e092660b95dff2e4b71c7017ddb963c78ea22514dd457928c073c74e0477d1d45d04c10d1275833051749382b8494a5c9e1342f096b83c457707c16ecadd31e0bb39016e4e0a87172e6e898b3bf42f28a08042d1bfaae690230e38846eb4b1c6551a566798510619c02aaa31fed5c4ab8957134afc2b8c309a68620a29fe25c7abd1bf8c4034c223526079c118cb32612cbf60f904a07c0240de801896bfaae5112bcb230ebca06ba1c6c219cfc2981504fd097dde84435f429e27e14908208060c783c00502172040d1c17f40e53d00f41adcf11a7c9962c1042fa88221fe4f17ef2781f7e3c0f7d1e3fb9cd187e9fb2c3d1f039e0fecf750902788cfc3e4fde880a7c7c5db39e3eb509903e8df8cf93743fecd8fa931dfe6cbb721f26caaf8354bd2c85ecd964f43c6a3f9e1d1c4f93365fc19317e82232fc19a2713e6c958f9088a60e3c51c7a3162be64fd172cdecba0f772e5b90c7a2f70decb11bf25802704645905ebd3f0f9160c7816ba7e85364840e24590bda1313e04281f42ff8315fe03dc6f000121409f811d3fe8f518e4f90ba8fc05b30aa2f840197ca0041ed0080f48840764e6018d79405d1e50030f08cb039af27f4cf83d453e4f014f819dbf53e4ed08f93a7e1e0e07efc6849f62e3a7b8bc9a46af66845703e7d3a4f065ec7c99361f41a28f20811f03e7c7c05e4c0c0fc6cb7f71e3bf68f15eb47c17389e0b10bf42125f421a1f83117fe8c8b750fc16eef812b6be84270fc2f03bd03d064ebca0279e85310f88840734f580ce3c2029df678bd743c07b49e3ddecf90824783151bc9704fecc18ff4108bf82962f94e54930e0dd18f1757a3f01072f08f86bc6f83339fc97d87f89f21a34f92d517c08113c9e439f278a1774c257d0f481b8f80ce2f83a5cfc1b165e06440f0304bf820dcf41d6ef69e12908e3c32cbd9d251e0c02bf021b6f42175f688d2f04c66300e8f9b0f17b604fe78d8793e8df6c7937bb2f33f5616eff65805fa103383f5e8d954713c29340c0d799e3cd04f92e05fc0a7f7e8d92f752e75b38f316e0fecf9ce743e6f7ccde0e0c5f87cabfc9e3df54f05f3ef81594bc9b428f48842f41d06f50fc3e559e822fa60e7d19047e02acef62c66fe9e0d3acf12b28f12618f18080782e217c0b409e85067e053efe84253f6881c7c085df13e7f510f16988bc9925c6107f8b1baf87cf0b9af273807836153c9a3dfe8c1685a6783c597c1827fe8b0dffe5c7a3e0c09760e437c07a1202f84177de023d1ed016bfe783a700cbdf31f26d5c5053c29fd9f324acf9397edecd15ffe58597e18b9781857741ceabf0c30322e0ef70fd94157fa68e27a3e7c354f92f7bbc09603c08623ca13b2f088e8793c17bd1e2bdc4f92d403c9fa96733c3137ae3d7703d9d424f82103f6789078187df00cbfbe94770e6c150f11614f9a93f4fa78bdf72f46876782e50fc1fad07f3e3f9e0793d1e7c1add4f00c76f81f22070ad01e34318f42bf0790d18bd054f7c2022efa58bf762f58342f82f62fc0a0ffc054ede02a8bf73fb3a66bc9cdd9759f31190f12bf4f186a6f83f5b7c9e353fe8821794e6d18c1f811a0f02f065c0e051185f032dde82191e1006ffc7d0c790f52fdc79167c2fc21ddf4199ef00f683fa7de0f83cb89733c6b7a9e2bfa4f15e92782e1d7c095f7c9ee2d791f36f7efc992dbe10d36740c6afd1e23f68f31c78f177e878335d5e86de7790e4f30cf939e383e1f35b08fd21466f829cdfe080d793c6e329e3eb0c7939f24b20e10b0ddf8325be03041e030ebe4f9c57c3c79369e0c578f0262c7a325e10c1f060def82dbeb7b3e80d65f1236cf16ef478430d6c356284c71d399c4146d547b920c647b900461657542105144e30a12889238a1822881f7a8861810afef0f92817f27c940b77e0b869a3068d9909c84020068c172e5a3eead0473d40001a1f35fb28d911461441c409265820a8871d12d5e041071a10aa20909f3e7af24c15693365295a8aa8f98006ae282005002335599129065518299cf0f3c93b95f0034df39be46fc40e3bec8008911657ae9c26110d38e080030ed30a29a478843171317131711d3a74e8906c2a52a488090a262898a06081051654502189244e74e51156a5430cb1c30e3b68a185162cb0c0421249247185c7bb72450b2dacb0020a28fe2176d861072db4d0e26795ceab52c50a2bacb0c20a2b1021428408112228a080028a43870e1d52a4489122165860a14a95249248228924925041051554504185238e38e288238e30c104134c30c1842a55da1d6f08406400910144662346e69ccd7ec890d9cc88112373ce663f84cb1d2e77b8dce17287cb9dd9ec0e973858e260995357a6a6e69ccd8c1881c16030180c0683c1a6112a54a694b3d94f450d9562f093469392326244cad89f08fefc8c4d2346623199ac7e20e833a6cf9839ce99244954d4d35392245252ef0963c488cd366bc4482ccf1723a3913c5ff074c1d385cb1d2e77669b44cace163b5bea68a9a3a5ce4c92444a6a1ce96499f3c09c079ef34054941225020820931931128b8da39b05a60051515357e6789224bf953656da586963a58d1501d6549946fe2a6baa00f053a982c01429517247b559ec8730f921afc729791c0025f490030d309c4041117f1bf43722feb627cfdf28f8db117f4b6082315eb2fc2d89bf55f92335c0d8e28fcaf8230818f8a3297fb4c0dbaaa6005ef1b6aab741f1b6316f5be06b412cbef6c4d7aef85af06b2714f99a94af397d0d8229b5315f63a000223f949e3c4dcad37c41d4f0b3267e46c3cf824ffc0c0ba8028a3811f9a194f48bfa99949f1d11438a2a071e26e661023400130026c003053020c0a8c0684401230a18d192448e38a6f49e0079320271f2a3895219642445e1a2704d94f88c7b14781265cccf4ed99311c868048810d8b81b934e12430b2ba0b04291158a923862081c0e29da010744875850e14fc2849f35e0a5a2b923138bc562938b4c802b701a0820805cee76cbe56eb75cee76cbe56eb75cee76cbe56eb72119c22b266dcb1b0696234f681247b8dce132e781370c08af5043858a183162a6cc66b3d96cb62143860cb1c56253023280c8f881808f183e62f888e123868f183e62f684d913460f183d60f480d10326cf973c5ff27cf959abc160e368b30920406bb30920c073ce03721cc012074b1c2c71b04c380dbc61e00d036f1878c3c0d495a92b5357a6ae4c5d69f3b4d9623129db234760b071ec94c9fe944dd9e77cca64a7a6a6a67e0af0a4c9a6eccf4e99ec5336659f73ca64b1fc94c93e0578d26453f6a742e5ce947862f0cae07822ec09f3e099da2c65b97772e1f91abf37c5b5cdb1242e716b3d2c87152c6541dee98b6bdb6349b4e2ce989e3865397df8de00cb09e46f0a3c47a7ef99b936279644119677f0455aca157eace3daf05812a3b8b4da6735b9b62a4ba26e1903e299bcb833324ffcb3dcea7b65f9a06fedca8ede2980a5c4f3e3a2e570feaea56c802f6265290be2a39458ca343f96b9340b3e8b875bb362395461d9285ecaeeacce130ddda3db92a8c6b5d9b024eab9b3239e4875676d9ea8c1730afa1eef0963f34c609e32f652eace7c4ff4b2dcca2fc7ad75b01c8e598e5bbe876759ab974a4bf9e7c7e0724af0bdf1d2963eab81650c8c6752632973fa22b6a50ce36767ae0d8d25f187e574e0871c706b59cbe116cf9701df0bde190d4f8c6229a3f245fe2c5f70be07c7f3c5e47b559736e6b334b8362b4b226f09dbe199f0dca3d892185cbe84cfe47467073cb1cc13d6e499a6dcda1ecba115cb9bf826b935099643029ee399effd594e38dfa33d6151cf2465398ffe28cb7294e07b7d96c3f01d726b55cb210ecb367deddc5993278ab947bd2511ebd6d42c8752cbd6f13280251acf971ecf14c073767d8fcbf235bfd69236c46b11708f5e12c35876cc778ce78bccf7d6b8331b9e38c5b5b159127f7716e6897a2e0dce67a9b0fccf377667593c118e4b8be0b338b8b4409fa5c35226f0f38b6b8bb3244259ce46df73605924df3d4bd9045f648d3bb33db1806bfb6249946129a5fcec62298178589125ad8cd74ae0ce3878e20d4b49e8c7349ee3eb7b5eae0d862591ceb23e7cb9962df4956329fb9986b7a6c372e86759245ecee524e27b48ee0c8c2762dd591f9f35e4d2649ff55bc67878262e2e6d87cf022e4717be97c2a561f0593e3c61699ee9cb3d3ab2240e6f8dce7228e5ceb678a21c4b59081f85e7daca2c89482e0d80cfeab2ac15b98b9ab8474896c4e2add5b01ce679cee2f7b62c650c7c910c9623ee7b62ae4d8625d1ce9df19ef8bbb6334ba292a54c8b8f022e65347c940cd75664396cb4946c3c8dcc1246c53359f07c59f99e19cb1bf8e9584a251e16c5a511faac206e2d6a397cb99daf5c4a383ffa59bea89e09c8b521b024de96738bef3959d685af1ecf5716cfa45bca3e3f022f4dca67bdb9363d4ba202cbb1d1f79878be7a78a6d85226f9e9c3a53df92c36b706c17228c0ad51b11ca2b09c8caf02f768b6249671690b7c969ea524f2f383652cd1336d716d522c89262c47e24bc072e077cab551b124a2b0dc8d6f965beb5a0ec1b8b60f964432b7f6c17248e61e2db0cc527abe76dfc362099bf24c54ae4d80e5b08f6bd36049047369479ff5e4f94ae399883cc2e47826109eb122cf74e81ed99644ab6b6362490c6139d6f0bd16ae4dc87238c73d925a66f5d6e2580e9558d662376989670c8667aae2ce923c31cb5276c017d9b3bcf895e0d268f8ac2fee6c8fcf0a72657b3c917767769e28c2b5099744249637f9d778c2c66742726d6696c424cb09c2f7825c1b6f3974e3d6e8580e9978d604b88b9eb8b4023e6bcc8da5f04c4f2c695b77f7c09d457922995b4bb41cfeb9474c4be21d9756e7b35c581ee66fb43cd1d7e9da922c875b4b29c38f785c1b174be20bcb2e9623ef7b103c636b3c131ccf1181efc5595686eff0ce883c09cb219a5b73b21cc69631349ee98de568e57b7396523cc6d43c130f9756e8b38eb8350596c3ddaded590eaddc59154f6ce3ceb078a2f0ceb83cd1ceb541b12492f084757926076ecdcf72c8c052667dad8b3bab7aa21ecbb9e46f3a2cbfa1353b9643279631179e898ae50b84efe5b1945c6f8be2dab82c894c4bd99c27c0eacaddcf3dcbd808cfb4c492b6e8b5a25cda9dcf8261d9385ef696b2243e2a8a3b0b3eec89005c1b0a4b229b6565df348f313ecf14c4f3b5e89992eeec85272eb11c81f89e0dd7165c1275b8b61896c43a4bd811cfd4e7d2629fe57bbe607826b99411fcd8e5d238f82c22eed101cbaca32b93f34608b8b6294b22d2726ce07b75ee6cea891b3c61609ee9815bdb6239746129e378da993bfbf1c4264b297cda04d7066849c47267133c31d0f239be5c96b43d2e0e863be3e28973dca3a525d18e5b5363390ce2d2a07c569b7b74b424a2716b0e2c874296b4aebbcb726b432c87195cdb184ba20dcb5709dfe36329b3fc18bbb6019643e2b5ed5912ad2c2be43be7da0a2d89112c5fbdef75f184099fe983a5bc7a5a937be4b424325ad2c6782d032e0d84cf4ae209b3e199ec2c47a4ef85b933424fa46119c3e399b096321b3eca875b7bb31c3ab936089644016eed80e5f0e8caf478e26e399bfccd873bd3f2443acbdaebf29e588e40be47e6d682580e31b8474f4ba21ed796c092885b16886fd79dcdf159b33bcbf2c439d706c79298c43276c23335b184a1f04c70ee8c822796b094e9f051425c5b962591c8f3a5c433d99e2f40dfb3e3ce8278e217cba9f447693c5f743c93913ba3e2fb3c5185a5a4bdf42dcf788c25792618ae4dcb92b8748f644b221957c6e889b8678ce9995ab8332b9ee8c6724ce17b262c4bf552b79c597e4802b7b6c072a87469583eabcf9dcd7922087766c0132558caa0f8282d96322b3e6a8c653bf8c6b19451f0515dee4c8327d67067293cb188a54cea8bac7984d9f14c21dcd9134f446359365e06b9b32b4f6c736d8d96c429ee8cf8594b7706c013ad5c5a97cfb260d92d3d92b2ccb22d657c3e2acc9d09f0c40596b7f00d72673c3c518be55cdf09ae8d6a49bc61f99eefeb3972f1bd1fee6c862742b1ac035f2f96d2cd8f7dee2cd113b158d2d678ad05ee0c8327cab0ac95dac85812135d1b084ba204b746c67298e8d688cba116d776c79208c5f22f3fa3e5447e3096b2d08f6d2c3be8dbc63236e8998ab833179ea868396ef0bd0f6e4db81c22b18c71f14c68dcda03cbe1906bbbb224262d638b9ee96a492be2b50a788e51df6b738f862c8974dc591a4fdc5ace057e886e391ef95e9a6b2b6039d4bab3129e18c495119f08e431f6e39956587ee4073e27f17b5aae6d2e87632c9bc217ebda445812cd3c61093c5395e51cdfb6c5f325e77b713c9be61bbc332a4f4c738f1c586609b9b61a96c43ccfb1f63d304b9814cf24e809c3f24c576eadcc72886419c3e299ccb8b52ecb61d3b5a15912a19630dd3349dd5a0acb619b7ba4b4240a9fa315dfeb61d9a86f9f6bb36349746259335e262d65a3af9959d28837a764393af03d3b4b29c4c38c2c61163c539a7b446449ac6339fef99e06b776b51c0a716b5c2c872f2ce5133f1be0ce3678a20dd7d666495c7267459e48e5091bf34c5996f2575bd272f8c69d91f04420967385eff5ae6d832531ccb5edb024027ac2fa4c052c8bf552805beb623984612953f345e6b8340d3e4b883b4b7ae2924bb37d9693e558e67b7eee6c8427feb084a9f04c7196b21f3e0a89a54c8d8fe2bab6a825f13b63f2c430cb7186efb1706b7a2c87552c5f553c136ef917df28cb659034355ecbcab37cc61804cfa4c3f355c3338dd74666491ce0da1658129596fd22c71bbe7768791dadc9b01cdab933089ed8e7d6ee2c87082c67ee8fac96b0229e89cf723ce17b252ce5949f5edc1a9ee530814b3be0b3e05c9b98251180a5d5b24abc1c97b2a92f52c79d55f0441796322f3eaa8ce708e57b6f9eb040cf84e609fbf14cbf6b43b424deb934319f45e8da4a5812d3dc9a17cb610c9776e8b3aeb8b2464fcc5dc9fb79c1add9b01ceab9b32a4f54b3dccdbf756d4696c33c9eb0a6676a726b092c87b8a52cbead816bb36049d4f2ec9f0963e199e4dc99912756b9351c96433ecbb18eef29b19c427caf80658c8f67cae3f91ae07b8b96f3ccf7604fd89d67826029b1be9665d9192aa3e389b4e738fcde137706e589112cdfe07b74692d7c96154b29a436d87208bc35df7228974ba9ad812511c85276e58b0cbab42b9f95670953f44c7f9685e1bbc752f6c24709bab3aecf22e0ce62786213d7b6c69289e530846b1bb21cd2b18c59f14c65dc5a04cbe1913b13e1893e3c6bb9bb28cd9de579a209cbab9032f94cc43be3faac00963143cfa4e8d6b22c874496b3f6470f5c1a91cf626009ebe1992858ca0cf822143c5f523cd36d398df85e9265d53d6ab2cc822d65b7772ae0ce187d56d2a565f05940dca30096443eee6c0d0993f24c092c8fe0d76379d697ccad31590e5fcb29e46f5aeeecce1347b8b3424fd4e1ce70786215cb6ef1f2e8d68e580e3958ce11be37642953e1a3fc2c5bc54bda3286e899ae58dee82b6639bbfc1005965de17bc7b505b12462706d8996c43fcb97fc57cb59e46f719e2fae6722e0d2669fb5e4ce803cd1c91396c333ddb9b62e964418ae8d842511cda5f5b3902c2719df3b60d9295f0beed1936596ec09e33d936f293be2a39e584a3b3f86b194457e8e706b7c96c32bb766c472b8c1a5f1f059c1e70bd133cde50b8867922d670edf0be0ceae9ed87567439e186529b7fc68bb36394b62946b7b390c63f972e199ba7c357dcf8ba53ce1c7396e2d86e5b0ce9d6d7d1600cff1ea7b465c9b6d39b45ad29c782da8e78bcaf7ca78c28e9e09ead2ac7c16057766c413c7b8362c4b62906b6b63492ce2d2f07c560c4b89c4c302b8b41f9f55e5d6d8580e8978be7cdfa35ac27e78a63cd796c492e8c1f3d5e57b69dc599727deb9b3d7139f96b5db5d84e6d254f8ac296e4d6b39e4e239bef95e05d7d6b52482b13cd057b69c407c8f804b53f35923dc99a22792b19489f922405c1b942571b69c04fcedcf52b6e8a3ac96328b9f49706b5496c3dcb555b0243eb0a405f15a4cb7b6b51c7a718f0a5812b5aecd852551ceadd5b11c36b11ca9b634964420ee1102cbacdbad61b11cb27069307c96169786c36789b1acee3bf57cadf14c4b4b59c7d71eb8b61b96c43d77367be291e58ce07bf3cef8f82c21cb19e571015cda94cf8ab39489f051143c6b04dc45505cda049f55e83106c033b9706b602c8788ae0c8f27de9e92c94f21aeed6939d46349bbe3b5b45c991d4fb43d4729df83736d7d2c89582cdb426b212c87132c65093fc2f12c9def19b7b66639f4dd9a10cbe1a0a50c8c8f32e33991f89e92a52ce99d8058aefbb7b8352ccb6190672dc95d14c5f22eff1d77c6c667754983e2b5a29e2f1c9ee9756bc1e550875bb36039d4726d5a4b22177736c513d7b8b60796c421cbf1cbf7f25c5b084be2044b1813cf046829bbfc78746d4c96c4d795d5bee93babe189522c9bc54bdbadb9b11c1a71697d3ecb863b53e3895c97a6f45954ee4c3ed1e9d6a496c32e635acfc4c752e6e58bf8b09457fc8ccc52e6e7a3c65c1b9f25f1ca722af91b0a7716f5442ed7c6b41cde716b442c87842e6dcb6755b08c69f14c675c9b044b2201d7a6664994ba474d4b221ecb46f0a55aca927c112cd756c792d8c4521af130009eaf27df03de23254b22d79d05f0c42bcb53f8feb8b31b9e48c59d95796205cfd713cf84f46c9caf1977a6c313afb847484b621a9796c067cd798ebdef9579bec87826214b59d547e9718f085812b39631249e69d1b253bc9c2dc71cbef7c2238c8b672274695c3e4bd052c6c1474d2d7b555b6d393ce3da882c87755c5aeeb3a42caff2c77167043c11cb72e2f91ed2b50d97c42cee119465d6ec11467ca611ae8c8d27f6d264f82c2e96322d5fa4d07354f43d1d9e352177119be5c36f047756c61387d7f6c2923867b94d96c897ce636c80677a61291be2a39658d2d0782d059ee3ef7b534bd9071f15678ce585beb75b9bb31c1a7067093c11cdad31b01cfeb832399e28bbb2369e282fad81cfe2736db9e5708d676de92e6a736d532c89272c65991fc12c3fe1ab746b142c8754961386ef392d473dbed7c49db1f04424963ff155726d562c892a2ca50f3f1297b4335e8bcaadddb11c42b19c8f2f04cb97d2f7b2b8b6454b220dd7d6c49268e8d6022d870e3ca7a2ef41dd9a0fcba1a0a5ace1c7464b59015f84813ba33d7180270c84679a5a4e43df13b29cc2ef59b933219e08c6720cf4bd0d96b2dd3bbdb094827e3c6339cdf8de9465957cf92ce70cdf33726b2f2c877396e398efed594eaaef19b0ec936fa04b43f4595d5c1a98cf1a7469763eeb85e52cf43d20cf5802cf44c3f255e87b8d96a7216952bc96d4b3664a1be1b398b8473f964438ae2d8ee5a027227ad684af1d7756fcac22cbd80dcf94c552baf13409ae6db71cb6f1ac1e2f09b8b5169643388fb0339ea98367ede92e72e2dae47228c6b278bc3c7267429e08e5d6162d87342ca5d5cfd478be8ebe67c5a5ddf0598b6ecdca72c8bbb4f9594a6e0dcd7208b57cadf03de21346e699b4dc5a1bcb6111b7f6c57228c39d513d318fe54f7e36966397ef51b094c09f75b1a4d1f15a0f2c8bf46573671f3c31d11326e499962c65eea7956b33614954b38ca9f04c525c5a92cf8a603976f03d10aeed8a25718567dd7ccbb834dd671df0189b7aa61eaeed822571cba549f0591e2c2792bf65f0188b3dd3094b589967ea72676c9e48e8ce907862d5722ce17b24dcd9d31315b8363196c41aae0d69394ce3f98a7d8f8a3b933d5180e5ace27b4b9632cf8f625c1aedb3985c9aa0cfdae1ce96786219cb19c7f7ae5c5bd37288c79dc9f04427963201be0895a56ce0c75e9a0d9f15c6b2b4daac96441f965df2fdb39c3c7cefc872d1f385e47b625cdb9a25d1b79479f0516f96b4375eab8127ccc833397984317a264377369f58e4cab09e787467123c11d09d017a620bb7166539a4dd199c277a706d8a96c40fee5103cb2c20d786c392c8e7dae858129958caa4f8a8306eadc97208bbb63296c41d2e8de9b31cb8b2399e38bbb6de7288b59c901c0d7d4f843bf3f3c41596b4aad792b2dc87af915bcb6139ec736b732c874b5c9bd27228bcb3404f3cf49c53df9b5d1ad2674159ca64cf545c8ef5f5726d739644036e8d8fe5f08ae5f8f4bd33b756c172f8c09d019fb8c752c6c4475971693d7c1619f7c8806556edd6da2c874b96928faf6d716d6e2c89462c5b65befa7caf8ee56dfee25292f133ab3bebe08938dcda05cbe1966bfb6149b4e0daf02c89093cc66ecf94c27376f1bd27d7365b0ecbb8b3373e6bbcb62e4b62d37210bebae5a8e47b6c9e2f2e9e69b76c035f2196c35ad362393cf41c85df43e2da64cb2119cb7181efd1b9332c4f84736d012c877c2ca77c5b16d77664391cde9ad572e8c33d12b224ce7167573cf18de74bcff7e8b8b2359ef8b24adf38cb31d1f76658cab07c910d2e8dcd67957067053cd181e728bfd7e5ca8a4f1cb29c787c0fcbb511b01c665dda069f35c49d617dd6d1529e29ed84cf82e2cebe78a21db75667393ce0cea078621ad7c6684994e2092be199de2c4718bea7c2f345fb5e154b33aeadce9278c0a509f0595f6e2d8ce57086278cce338d599627db855c896f01d756c59298c2736ce37b47dc5a16cb610b9796e6b34458c2b63c1396e50efc753c6355cfc4c69da179e2054b19161f45b59429faa829ee6c8c27367a76eb65925bbb62395ce1cec6271a79d67edc456b960bbf5a6e6d6a3964726dbe25515e5b942591766b8896c33bcb580ecfa4c5ad195a0ecb2c65ef2708cb581ccf34c75296c147a5b9b3dc13a396e39eef65708f7ccb2c796d002c877bdc9a94e5d076671e3c31874b3bf25960aeed892571845b7bb21cca9635f4a5e33951f8ded295f1f1c4a44bd3f259816eed8ce5b0874e9e6312ef7bdd1b9ee712e3eaf4b8402c3757c1a5a2e2e22cf8ae35eeae77817a6eaec9a5da7387e3979c58ca88ffd3e2beb4dee7c2bda9792e2aee6c8ad722b39457fe8982ab84e4363a72735c2e95085a342c93ceb88c9268d9792ae14e111e6ac9b296e88b285cdc1137e6c3dd2d70812f5c989bf7ad7179806e508ccb6b73834c2c6d56bf75e4c2d6bc0f8d3b217825889e12897f62e1ea1cb85588ae9293dbe877279d87da2d25957fba7373095caa0beeee0b14f39c5e9e803e7782f050525a022c6989be18e48ebd87b2e2f2e2b858f3deaabe2bc99d283c54946592a0cbe8757373dcaa27f726c57705798e89a48d8fdf62727910dc2010775ce0a50cb8bba50bcc7393865cac07ee38fcd2031737e6bb80b849b88b257547342f15e679f4c16f557047075e0a819b6372a9f45ca527b7d192258d8d2f36b94f7929c4c5397163475c1e9d1ba4e23126e77f4f6e92918b45e6f9daf23ea96701bd13ec6ec22f35b93ba60bdc737158be8b867bdbe0b9845a462e0e8c4b65bbb7079eeb87df133787c7ad4ae04953e0b5b096f7e9adf85d616e529d8b95c4d296e8b790aeeec7ada273c7185e4a859bc4e832aaf2b4d5f962a39b8b73a982b8a39287aaba3adcad9aba2f505e053748a565e81169cf6fe571794ddcab2b5707e75639716f7b9e0b78a7fa251e9ea5e29dc43c934cb88c767707bbc009963020ef33622999fc539ce5acfff3e2c202bd6f8fbbe3e306b5dc5b13dfc5bb38a4ef727391b278ae29572ef927384bdb005f5c7427070f85649944e83292dd9dd405767071087c170bcbd717effbf33cfae2b75278d212782d3b96b63a7e2beabe8a78df9b9b94bb58be8bfbf35dc1ab23e05661b08cb9f13f323707e6529970717dbeabeaee12b84015ee2dcc73210144e1debcf82e002e8ee9bbfcdc197ca80bb478b8bbdc05bab9b008de37c6cd215daa07ee6d82e772e2226df15c092c27972780cfed9b6f3a747358b7ea80dba56fa25d1d915b45c1cdb170a9ae2e6ed1a542ba25f44e47cfa4312ea3016e2e824bb5c2b2e6e68b797ec568f81f037752f050402e4ec977757079476e1083c7318df7e5eeeec9058a70777bdc6016a7398f52ce3f5d70775ddca0919ba4e562957087e297dcdc9b95e7cae14e251e0acdc5e9706332dcaff825187e175cddd6057e79ca5eff7bf30bf6c6ff7edca437176b887bf3e1bbc6254d8c2f2ab9bc0d6e108d8bbb7dd79b8bb3e252c9a5ad8bdf6a5abeb2781f9f3bd6f0522e2c6b7fbe58c1138de5edc77369f08884e7b71a3d91a47eeb889be373a99cb8b824dfc5c1afcce58d7083703c65a37feae1bee8781f085729cdd5cae37974c36f6df0a465792d46cf999fff69dd5c16b78ab754c4552a731b79b9bc166e90d11dcdcf309eb2a5ffdd791e9df05b17dc9c0d97aa8e8b34c5733db93726be6b7747332ff5e5c2fabc8fd1cdc52e959565add01735b83ca81bec60299be27f42dca420178b813b7af05282ae6e875bc5b57ce5f03e3337e7c4ad8afd8a7df0bf046e21f8a6423787c1a5cae2f2cedce01177d7e40243b8b72dbeabc85d885f82e0eaf8dcaa2dee34f350e393a6e6b586b744bc1396a744e39f6eb83ce2c54ababa006e5505cfb18bf7d96e8e844b45c67286fb1fd553b6f14f393c9116f8ad26eeee850b6c747be59bfa5c5e991b2ce2e5c1536981dba8cac54571634a3ce5967fe2737364dcaa009e32cc3ff9b9baa45b25e74e460fd5c2ddea9788b8394397aaea26a97119452d95946ea3dde5c5b9c128ae8e8c0b4c727150becb84bbdbe2069d1e4733de87bba7f04b502ecf8d7b55e7eab8dcaa1bee6d88ef9a3d8fb4fcd69b9b03e1528db1acf1f0c514ae5201b79100b759bec9823b8378a8313114b4ce5cde971bdce14e381e6a04ad156e3178279a56d5cdb1b954392c6584fee7c2bddd79ae45f7e6e4b90edd1d1337a8bba39b979ae0ee9e2e10d09246c617a596b4e21715b82fe2fb5ab838e2a56a727164be6b88fb0cbfb4c0c519f9ae0aae1200b791d3cd8570a9a86e6ec9a5ca7361b4f7edf07c41791f015a2edc49e6a1fef1791eedf15b34dc2437174b8865ad862f96b09cc5fe17c6dd5ddda09365acd1ffd2dcf9f44f582c6bb62f3ef07c5d799f12ad323d94b93c3c2e96ed26d1b958485ca5016e23006ed2948b35e87934e8b7fedc2432178b86bb83bac00d96b029efc3626983e1b764cfd99cfff57169455e0bb8ac11bfa868299dfc939cfb11bf54e6beea785f081737c48d25bab91f2e151f5ac23bab78a839f706fc2e2597d7e406455822553dd703174988e7da2d6b555fd461594bf3c53bcb990dafb5bb382a2ed55749c86da47477b50b4c73734c97caccdd557081625cde1c170b766f849ecb0d2d182ed21acf35e6ce271e6a6a9974c165045bd24ef822929607cb9aa02f5a70472a2fd5e4ea96dcaa0f2e2e881bcbe18e461e6a8b3b0f3d5402bf62b9ff395da5096ea32e8f231feffbb1b44df15b43ee74e1a1a85c5d07b7ea8cab04751b1570279f8722f2443af35b55dc5b92e7226159cbe18b27f8bc2c6d4afc96d29d4dfea98ccb53e25e5159d6f6f862128f3122ff7bba3824dfb5c113093e2bee0ce09fb4b8338e8722e12635ba8c14b893f850335c5e9d1bace2ea62b7aaccb206c21737b8e5e180b8311ceea8e5a5aa2c673bbc96d29d671eea35ec95f4bede9d791e2ac8bd65f05c6ddc5cd3a53af328edfc1306b72ebc1392cb13e35e4d7027d43f89b1acd1f9229fe5ecf73f36eeec8cd7ca730be79b5cb838126e8c837b33f45c584f99e69f2ab8383b2e1501772ce1a538b873eaa16c5717c50526ddaaf92614eeae871b9477e7bb400fae0ed0adfae2568377425acea5494d17ebcb5336f14f871e47aef705b965f34d2a3c9196fc1612cb9068f82dadbb73728186ae4ecfadcae2be94781f9de5eb89f7e1591ec17eeb809b94c76564e5b6f74db9cb43e00657b83bdd05be59da047d71787778dc20034f09c13ffdb9494f176b82e76ccfffb29634e017a3ee4afc129aab93e156e571754d6e5508cfa3a9dfbaf3ebe02251f15c50ee4dca73c9706f427c97ec265d5d46527756c76b69f09419fa1fa2cbdbe362e596b6205fd4e2eab2dc2a1a9eb62b5f54e32a25dd46ba3bc578284017f7c48d2171c7e29762b8bc3737f8c49d197a1d86f7d6c173c5716f659eeb895b2bdfc4e7ded4f82e27f7c6e8bbb05c5c1697ea75958edc464f97b7c6bd92b3946df0bf172ecef65d6d6e657827a92552f1b9f63c8fa0f82d116ea97c139e3bfa79293a1707e6bb7ab83733becb77c7a787e2e2cea85e6bcecd4971ab8eee0eca058e70670f0ff5e54ea77faae2eaeeb8402bf776c4771d5d1d945b35c2cd21ba54715c1e921bd4e0eafadc2a2e2e8fcc0d0a717502dc2a41772efd53144b1997ff6df04452f35b56dc99c3436959fec04b336e4eea52ddb93a32b70a889b04e56201bab7aeef82e0e2b67c570e4f697ba73e17f7f45d826ed20417cb863bfbe075687479be1bfc60198be37f13dc1c914b25c1d5b1b9554a5cde14f7ea81abe3ba40304ba4e07365b9b7a8e73ae1eeac5ce0a19be3e35639b0b4e5f05b4797e7c20de6716fbae71a744be69b4058da6af8adda9d157a1df0dc242e17eb84a72ccfff50b83bda05a2b913f14b646e4e874b85c71d0378282f6e4e5e2a04eea8c24b81f03cfae1b73c78f68c77327373065c2a40cf230b7ecbcfdd65dda097a5dcbdd39fe7110dbfa5c1d531b955202c67b3ff2dbafbf04b606e12918ba5e5eee2b841049e0ff0bde28e10bc54963b76f052152c672cbc967cd2b8bc56a33baa79a9318fb12cfee7e5eaa06ed50617a7c077bd705f41bc8fcd4552e3b9c22c93fa5c46f2495be0b5eeb8b7f04b53ee6b8df70dbacbf9d9e8ee20b84020eed4e1a1b65c1e971bcce1ea04ddaa453747c1a54ae22af96e23257726f04f6d2c6700fccfeaeec05c200f5727e456ddb90ffa9bed261970b12a78d6987c11cdd286c76ff96e8e8d5b15755f5cef8be1e616b8541bdc5b94e782e18e595e8acafdea9790b8b924976acebd8179ae23eeee830bbcbabcda0dae59de64cf55c1cd95b9542e3c8facfc569baba3dd2a344bda0c5f4cba33d043393d5f61def7bb487b3cd79cab3b72ab2cb8484e3cd7efee865c209e652dea8b662e2f841b74e30ea749bf8b45c1934641e7120fa56679247fcb808b94c6737db94a4cb7d1906552a0cb68bc5bf14b2f3cc6bef81f98ab54e436eadd9c1bb7caf74c92e23232f23c7af25b69eefce0a1a2ee2ce09fbe78ce0ebdd6bc4a4b6ea3a8abf373abbab813cf43fdb82f38ded7c1bdca4b23aed29aabb5c7858defb3e1ce410f25c09d2a3c9494678cf83f36cb5a9e2ffeb9af1fdea7e6cec32f79b97bf14b365c9c0837a6c1dd15b9403f7747c10566f18c59f1bf2e5a26dc5b02cf55c39226c31779cf1a035f9cba370c9e6b8d7ba3e2bb86dcb9f8251aee78c34bc1b09cd1f05ab0db32df24c2ddddb9c02b9e92877f4261693bfa221517e7e7bb8037f7c0a5fae07914fc2d162e6cccfb16dd9ca25b259f3216fe67c3b246e88b836e2e89ea30b8555477547a28279e9d23032f25e5f208b8c10cee08c043757193962ed696bbc3bac12bcbeef14e702eef758365ee4c8ad78a6049dbe08bb13bebe3b546b848773c579bcb137483554b98d2fb8ab8ba176e151e4b25db6554c2e5695dac1f31186eee824b858556977b8be3bb1258cacefc0f849b44c0c57a73735fdcaa214b9b11bfc57bd69af8e20bcb1bedb9043d2209faad3deeb8c24b85f03c5afa2d08aeaecdad52747539dc2a2d2627964df24d4d6e12928b15e7e286978ac9b2c6e88b475cdd1b1718e57983e1b986cf99e509d893030c4b1b9b2fda716768bcd69edb43ef74e4eeacb84122773775814d2c69697c71c9cd0570a9da5cdcfcae096e2e854b85c6d5555d200157a775815dae6ecbadb2e12241f15c4cee2dcb730171a7947f52e3f26e37e8e61efca51fee0d8cef12e05ec42f49e094e7e2bc7cd70e17267b9f0ef7d6e4b95a58daa0be48f534c2f348f65b5d9e3330ffbbe3f210dde07029d3fadf164fa4f1b772b83c35ee159ce74ccbffecb8bb012ef082abd3ddaa373737e85269f14c62e1324aba49005c2c331727fbae344b5bd217b1b83b102e708d9b5be256cd7bb3e2bb962e8ecd7731716f737c5795ab14751b21b9bcab7b15e7eec85ca0105747e556ad7071097c570b4fa9f54f40dcb1d04b59705f71bccf83e50b8616877782f29c51f99f1c3769cbc532418bcfe5fd6e1084fb2af4be2bf756c27335baeff04b5d2e8f861bcc5ade70782ead7b43e3bb98dc1def02e35c1cd4777970e78f7f5a62b9c14de2e33262e0ded03c9714772a12e67b9f1477943d5410772af04fc29b4be35621b9b931972a85abbbe1561197b12efef7e54e1f1e0acc32e9cf6534b5e05c5c1a976ac89d91f03d98b933e99f94b823f14b6696b41abea8746fc4eff2f29409f99f9d754824fc56d6ddcd0b8ce0decc3c171477eef0505dee4eeb06bfdc991baf55c1556273b5f8b82f1fde97e651a6c0ff30b8bb0e2e108d3bdaf0522f5c1c19972ae9e2d8b8544ccf24262e23a76599bee9c732a983cb8876c7165e4a84bb03748161dcdd9a0b54b4a41dbdd60df7f6e5b98cb83b316e70807bdbe3bbb43c8f90f82d102ecf8e8b35bb639997f272697dad16ee2ece0546f128c3e37f572c697a7c11813b2578a83e9176bfd5c3e5e16ef0cde531b941437716f150122c65ec9df4dc9cd6ade2727358dcaaddb226c31747b8392a6ed5ed79d4c66fbd7093ac5cac0e2e2ed18d21ba496a2e560f4b5b09bf259f4706fc969a3bf37828172e6f8b7b05e6f234b841ab67521597d1d3530af14f2adc1ba0e73a6399b475196559d2e2f822943bef78a8157288e1f296dc60087787c60d2eb939242e55d7e559ddaba9c751f8bedd5d855f8af27cfdde77e48eb387126259eb7d31cccde1b954485c9e951b7ce1ee803798e4f9caf3be03ee88e7a5a6ee0d8eef42e026315d2c2f5a5777c4e0a5f65c5e1af7eacd9316c16bed7193e05c2c22ee2c3e940df776c1735ddda9e7a184dc243617eb87ab1b74abaa6e529b8b05c48589795f184f59ee7f73ee6e7e56dd62f9a640cb970bef83e0e2b6b854b1e711d56fadf04452f25b463cce069e00db7d7df0be052ed215cf25e5caa87f6af33c6afaad0896b6d717a1b8ba156e151dcf9aa22fba7055e5e2cc7cd711cf1992ffa9f19454ff44c31d865faaf274e2eed05c20129747c4bd32e0b6eb9dec3cca3cff34e8e68eb8545c5a01dca41f17cb803be2f05231dc31ce4b9db93bf14b6d9647ff5694cb13e0062fb893c93f9171715e5c2ada9d881e6a81654dc917cb3c6144fcaff64cf2e23212e029a1f827172eaeea52e9ae8ed1052e70617eded768597bfa2204cb5713efbb73775c2ef086db1fdf343e259077aae0392bf3bf46f756c57711b9b821dfa5e7e6ae5c2a0d2eef8a7bc5e52651b9581adc9d9f0bfce2e2e2b854005cde0a3778c7f305c1fb965c2522b711908b13f25d79aeeed0adc2ba380fbe8b8ee57894c7e60697b8b93e6ed50337b7c1a5f2e2ce351eaad09d701eea766f233c171e9747c5bdcab244ca7aae3c1726e87d7d5c9e17f76acce56db9411c6e6778a725370976b19e6eeec7a50a73751cdc2a33aece805b55c25216e87f2b5cdd9b5bd5c49d4ffee98c3b95fcd3a23bde79a9361717c17709f12803fd13a1a50cf8bf256e4ecfa5527479e30d4eb0bcfd5c7eee8d8bef32d2c4c01d7f3cd4139757c6bd5a7393e25cac22ee94e2a1e05cde0b37a8c7cdb570a9d6b83adbad52b3b4c9f05bb39b94e462c9b9ba2d2e90e9defc3c571977a7c005b67057f44b69ee98c14bf5b9ba2b2e70c8ad9e7792577774abd63ca51cff94e84e3c1e8a859b64e662e570732e5caa36eea4e1a11ab8bb122e108e7b13f45c69dcdc9d4b75c4f3e8eab75cb8bb463788e54e23ff74c52d42ab7895ce5c2d464fc9f54f415c589df7c5717184beeb8d3bc2f05229dc9d9a0b54428bd0d216e88b7ddc1b9de7fae2e6aeb855bae7abf73ea79bd3e35659b9b033ef2be3f2dab85774ee48e4a1a8b8ba2eb70a87654dce17f7dc49c2433559ca06fdefd0c52171633fdc5c9d4b55c4535efd130ecfd790f7356999b93c2f3798e8ee045de018f786e5b97a68025717c60502b0a499f1459fd61a17c988e7fa717175be6b8b8b53e1c60cdd1c1097aa8f7babe3bbac3c6776fe37bcb9376ed5ef4e01fe698b256cc9fba6781ce7781f6f29dbe27f4668f97027e39780584a2cffa4e70943f43fd8bd697d179865ed862f9a7073892e15a365121a9791923bd978a80fee0c8cd77273dbc33b4d792a71b98daedc9faf89fbc27a9f08cbd716efeb73c7095eaacbc5cdf9ae2b2ecf831bbcba23082f858196a065ad8f2f2a7107fe920f4b5bed8b535c1d151708645903e38b37dc1d153728e4ceac87a2e18eb78742e2576ccdff9adc5ca35b55e5e660b8546f2c6bb82f6ab9b9112e55f0aec32f69f90523e17ff2ce1b1eea81aba4e43622e0f274b8575177b7c60d3e59d652f8e207bf6449fc0f88ababe156f5f19c39f0bf3ab4d4dc1b0fdf25af84fa27369757c30d6a3d6353fc8fcbe52570832cdc1c14b76a7647382f65e6297ff8a7149e4701fc960477377e6909a4dfd5a971814b9e477e7e8bcf9d503c949b3bf578a8179aa4dc1b05cf35c6c54971638aee2e8d1b6472a5d43f4d3d8e58ef4b7abed2bccfc9cd9d71ab0658d68e7c91cc9d3c3c94978b63e2c68ab8b737beeb80db34df74c22dd73bd5b9b81f6eec8665d2a0cb28a625c71594bb637281205cdeee06e52c695b7c9180a56d89dffa7175686e95117757e6028b58ce98fcaf8de58d9e298adba96f62e1f26837a86639ebe1b57e5c5e063768c6d5ed71810e2caf4326755d465aee28e6a51c58cad2fc2f840b9be07dc09bebe05281715f7abc0f85bb6be306a3dcc7f8a51d7e1cdc31f7504a3c9342b88c7277ecf352731e6147fccfb6acddf145239e48457e4b88bb078f2bde3a7dd3d31d971eaa8a9b33e3561db9b9dca5da72713cdc180d17c7e4bb44d07ae3f2b0dce00c7744e1a50a2d6d4cbe18bc3c186e708fbb137281772e0f801b14747534dc2a3e6ed21a9791ef227df15c562ecfc80d06ba3846974ac9c505f92e0aee52fc129ce54b8cf705ba3a3cb7ca8acbabe25e69b93a29b7ca84ab3be2026977c4f252539e3212fe37c3c51d7dd7d4e5f1b9c12f2e0f8a7bd5c05366e47f145c5eef06f95c5e033788e87984f45b5faece8d0b8472735cdc2a20775ef15075aeaeeb02c3dc5c17b72ac89d0cfcd31c97b6e4b5e0b8394197ca8a61b132fe37860acfe59971afd85c9c1137d683d6d6d5b970abeed0426179db20de6981bbdb5d209c650dcf17fd5ca526b7916f89a4e8b9a2ee2e8a1bfc71754eb7aacfcd59b95484ae2e8f0b6ce0ee0eb8c0136ed20017abcdb272bc139b9b4372a9e42c8fc6df92a2a5c3cd1971a9b69e25e39dca2c6fb0e70af4b4e9f9a21ef766c273e5b1b4a1f9221d7777c70d2e7079775cacda9d540f55c1d5cdb95551dc9c08970a7875555c60907b16bf24c3ad0fef84c01de9bc949ae79119bfd5c24daa72b136b8b737cfa5c5c565f05d6e5c5d1717e8f4fc1684e0e6a85c2a0cae92d36db47473702e15104e452e6e80efcae0eaf2dc2a2ceeceea067f5787c50512b93ca51bac736f8abe2bb7a401f145224bdbed8b552c6585fe17c37336f5bf3d9e3431afa5c7dd7d718300dc9d19372875e79d8752bab8226e8c87a5ec8aff1171470b5e2acfe55d7083c19b0b72a920b89ff14b4368cd70755817a8c0555273b5f4b8b03fefcb635933f4450e9612817fb2735f1ebccfca9d6c1e8a767371dcaa2617d7c28d91701fe1977ecb9f7c193d8f8cfc16993bb378a83b17498fe79273791fdc201b771af04f695c1cedbbd6f07075626e150f37c775abc05c9d1317a87b2a25701b2570715fbe8b87670ccdff98dc9c15b72a77795cdcab30cf989dff4179263d71191579cefe93107747bcc12eb768bec984abf3dd2a0fee2cf24f56dc5b1adfd5e459f37df1ccd57970abaceec8f45057dc9c0f976a8f67acf8bf36cb9aee8b5b2eaf3718c1bd7df15d015c1d111718bbb82f2e55edde0a782e119e8de29dc2dc971cef2b7477115c60105757c7055259ca40f89f0c77a7e702b7b8373dcf55757156972ac81177a6c76b857047392f85e6ead6b8c02637a7e452d1b93835dfa568593be18b85ee0b84f731702be79b60b8383edf4575471a5eead0d5595da0d445aae2b9a23c6130fcef757127dcd8079757c00d127abe9cde57e4caa47702749576b7116e29ebe37f593c2517ff24c312a6e47d50dc9c17b74ac85236c7ffa8b8bc3a2e96ec2661b958862e6eeabb9cb8bc4237b8c6d206fc2d009eb21afea7c31da53eeac94daae3323ae0ee36b8c03396b62f7ecbe9c2a6de7775754c5c20eee694b8556dac84bb93e206812c6557ff83e2f95677782e108b632fa4f72ddd1b95e7b2e1e6fe5caa282e6fd00d9671617cde87c712f6f4be25ee4d81e7c2e1f2e4b858afe56df75c19dc39c543c5b9639d975a7347125e6a839b23e052c1b930a4f7fd70715d974aca4d82e062b9b09c25f15a5c2e2f887bf5e436816f42732be89d62174775a9723787e652c970b7e197b0dcdd0d17a8757932dc601fcf5896ff495d5d02b74a859b9bba543c5c59b9bb3a1758c5c5ad7063225cdc9aef5ae2eeb65ca00dcb9b0ecf555cce5eff03e3c266ef4bf4437375695ce0efe282978af794c9ffb9b9938a8792737379dc2a056eeecba52a41ab848b13e2c674b83c2d3778c3d59db95545dcb9c743c1707121dc58064b5b075fdcbaba2bb7ca85cb43e25e217073455caae2b355ef34c1dd6971834d7707c40dbeee8b7e4987254df8c5273749cec532e276cb37617075726e15143729ccc562e1a298bb6be00263b8d3cf43f5ee4e850bace3de023d97d5532afaa716ee2ec90512ba3caa7b65e6f2fadc2018f7b6c073255adaa6be88b5843d795f1557d7c3057e91a278ae267717e402ed3c69675eab8f250deb8b52ee4e870be4ba87f04b514b9a125f745ac602f89f004e4acfa332bf45e7ceae87cae1deaef8aede92d6c5170bb8bc086e3088a512ec329273473e2f25e7f2f6dc2017170988e7cadd1d1437a8f44cc2e23202a031132e2fd1bd92baba136e151ccb981eff53736f777c17037757c0050e5ad6067d11837b73e3bba46801f04442e2b9822c6b707c51889b2475b1eedcdc16b7eac73366e47f01dc4ef04d869e47b9df027377c21b3ce0f294dc2007572775ab3ab872c83b09ba3c34ee959b9b04c765f4e4ee641768e679d4e5b7e05cded30d56b07c4df1be3c37f7bb54143ce5f09f7e58daae7e8b808b64c57319b0840979df11cb58f07f626e6b78a726771cf4527cb402dd5d193718f5f892ef13722be49b627747e802cbb830f93e1a9633155eab4f252cb7910217498ae77272cbe59b0669fd59be96789f9d67edc917d3dcdb18df55c0bd0dbfab0bd5d492767b2d1c6e0e8d5b55c0b2c6fb229767520e9791903bdd78a8108a20b963959772f27c3dbdcfc8ad996f1ae1c2e0bcaf8dbb337381466815ba49125cac1a9e470efc969b3b0a7a290a96b425be58e426255d2c279747e5065b5876f84e722e0f8c7b15c1d53570ab62d032e3f2ecdca01517e988e7027273075caa0aae14781e21f9ad32f766c173a97171b5ef6273712cdcd8084fa4097e8b8a5fa08b43e1c640b81bf14b133c8fb2f8ad13ae2eea5671f09cc1f91f1f5707c2ad52e32271f15c54ee4d83e77ae3c2d2bcef8c0bc3e07d59773cf452233ccf7aa62fb45eb8b833df85c4b3c2775a73e700ffd4c5b01802ff537269b2d74274950cb88d9cdc1b9be7b2e2e660974a813b437828dfcd6570a9b6b8b3cf432d5d5ed40d7af0eb057c9fa0abebdd2a3d4b1ad717ad2c6dc3df6ab294b5f99f0897c7e8621d5d5c1597aa5a4e776a3d540d4b9bd317bd78221df05b8a9636207e2be7dbb3b429f0c5342e0f851bace38e32bcd40a1797fbae384b9b0bbf157b2219fa2de2e398f53e204b1891f7217179786e108bbb13e102dd7894e1f0bf444b9b912f7e717157976ae99e40793ddcab25771af15013dc9c02972a83bbfbe106c7256dc86b0971afe1971a7822bdf92d2cb4f4dcdc0a974a8d3bcb78a8414b5bd66f3979ced83f1171736f2e950f5727bb5566eeedca73e970e7190f45683983f2bf37ae6e77abe05c9899f791716f6d7c970177e12f3571e7f0a1105d9d1917087575b05b35c1d50d7181b0e78c82ff11efe4e3a16258d62ef8e205cb1a1d5f24e2f2c6b85765ee25fc1293db17de29c94d3a73b17458d2aaf8a20077bef05055ee24e3a13058d6bcf8a20d4bdad26b0db1ec4db7c1ad2ae3aea6b829dfb5c2bd71f05c702c673abc56d2d54971814a7767c305662d610fbcaf8b3bdb3c54ede2f27c17187747e40229b8b82adfe5c2bd75f15d4f3717e8524d717530dc2a4648683c6155dea7c5dd297183b73b72f052812e0ef75d70eeaeea0691dc1d001718e8e29abeebcfc5dd71a9905c1e0e37c875e71b0f65e8eadcdc2a2696362e5f6ce3eaacdcaa43cb1ad217b33c15babc2937a8c2722fdd197183b5a58c8cff3171c71f4a072d091e618afe77746f4a9eab84a79298db88812600ae4e890b3cba4a04dc46015c9e053708bc393f970a8abbe3e002ad6e397827dc132981df5ae2ee945ca0063f1c6e121e9711959b93e052b5707147be6bd0dd8db9c01f2e6e841bdbe0d7e78e4d0f850552114bdb055f243635a0c5c653c6e77f29dc5c01972aceb256e48b63ee0dc9738db07c9df03e3077c7c30d76595bf4451c6e2ecfa552e2f282dc209e2b89bc93053789818bf5c153a997d1965b09be2984a56dc817b7b8b70a9e0b8d65cdce17fbdc69e59fe0b827fa252ecf58d7ffa6962f1ede87e6eafedc2a2f6ed2ee62317984cdf13f2017f6e67d6c3c6768fe97c7b273be29d11d610ff5c3bd35f05c3cdc5b18df75e44e27ff64c6b226bc53d373c6c0ffe8b83a342ed0f793e0e21af8ae199e49335c46406e921e97d195c711f8bedbd5d1b955525cdcefbb427822c9f92d3ceea8e7a5e03c85f084a5f0bf7979636ef0870b53f33eabab74c06d04e58eb6872ae2ee8ab841dab336e58b6b9652802f027571177c171b3767bb5458963517be686829ebe07f303c9188fc16105707bcc0022e0f841b6ce39ec32f6559da0cfdd6f745c4fbdc5cdd9e5ba5c5d5cd7181082c6f469eeb0327354b5915ff1b626983e08b702c69757cd180bb83e102f358d2bef82292cbcbe25e79b93b306e30807b9bf35c5e2c6b1b7c3183bbcbe002c9b8bb152ed08ee5ccc9ffdcb83b366e104aadb897f14b412c91b89eab0f10868bf4c4732db9bb431788c79d855f3ae0ee7a816396efe9ce830b4ce32a41b98d985c5c1897eae88e615e0a8b961bcbb1bc2ce3197be17f579eb3a4ff01ef0b89f7c979de103d17f17934e7b728b8b9062e5507378976b10ab8ba29b70a85abfbe056a5716f5bdf25e6f29a6ed0cfc581f05d587746fdd3183709ea62d5b923052fe5e6e234f82ee19d04fc93171776f43e1feef8e6a5cadcdc1db76aca7d4e774d17c8e7ee4eb840396eae78abba5c242d9e0b81e738c4fbe6d2c6f4c52eee78e6a5c05c242c9eeb809b24c0c55273e7160f45c1f3322352a1df1adeddeb0225b8afaef7c9b01c483fe1979c3c9346b88c74cf9799f73579ce6aff13e3b685777abab9e1adcab29459fdcf89fb1bbfc4c4bd31792e16ee98e6a5c45c1e901bbca345e7eaceb8c0a81ee25cdda20b0ce0cedd3f217175616ed50eb76ebea905ad139e4805fc56114ff9c03fedb9b9dba5caa225e722b1f15c105c9cfc2e09ee4ee902e72c6d37fc96edea2eb85563dca425172bcfbd9df05c7adcf9fb27e04d9aba58415cd89cf70997b6287e4bc89d7d3c940c1706c1fbc4b8a30b2f75c2d58570abaeee6bf83e1696b67ed189e7d18fdf12737946dcab03ae8e845be5c64dea5d2c2e37e7c0a52a7477522ed0848b53e35211b948763cd79a650d8a2fc2706f6b7c179465adeb8b4d2c5f54efabe0168877bab2b465f15bbd256d8a2f067071866e8cd0cd8571ab7a7787c50df6eec47a28159e312cff8bbabb3c17a8c5cd15b95469ee6dc973adb0a43df1c5a79b64c76534e5ee7e5c209d5b06bee9cf3d4e73f352257071625caadb534981db88cabd657dd79767af78a7314f2427bf95c4bd617dd7025a872eee80ef52e1ce390fa5bb380abeeb8bab5bba55799635a52f7659d622f8e29ccb93e25e3970775d3738662993f3bf122eae8c4ba5f49445fcd30a1737fb2e357787c40d1e3d615adee7c5d236c117e5b8b9f15251b94a4bb751908b03f25d789e728a7f7ae18e7da8448fb010fed7cb7be25e317077295c201d5787e45665f0b4e1f9621e5797bb556eee2cf350f3f9faf33e0486c1b0fe17e4267db1885c24399eebcc450ae3b91ab8a3082f45e8e654b854692c6dc5df7a727903dce0a0276d82d7e263791b9f0bd0d5197181b3cbebba5843963344aff5bab725be4b7773315c2ae1e53db94112eeaecd0532f19435fd0fcff38884dfb2e0eee65ce014f7a5e87d759648633c9703cfd705efa3727538dcaaaccbb3dd209b9b935daa2bb741be0976775a2eb0869b44c76524e5f2f2dca016bf28772b2f91b8bcdc0dc259d6ce7cd18ed6a0a50d802f8271733c5caa3cee66fc921077b4f252509636acdf92bab936976a873b4ebd9404772cf2505adc5916af85e6debc3c57114fda9bd7caba3921972a829bc4e462ed7926ed70190db972e99d2e788c69f0bf29f7157e49cadd8d1748e6592dde0982e74bcafb0ab8e39f97aa7327170f95e78924e6b7a4b8d7f9497c8e57bc8f7627130fb56649f3e18b43963603be68c6b2d6c61781b83831dff5c3dd8570816c5c189df7c1f19cf5fe57c6d5c5b9554fdc9c9c4b25c4e599708373dc8b14098ee72a7375776e5515f795f5be4317a7e5bb70b8380ebe4b8e9bfbe05289b1ac01f1c5152e2f8f8b75bbb9092ed5a18b83e2c692b8ba016ed50517e987e7c25d5ca34b0575731a5caa2e963304fe17c7f376e8b9fa781ef97eebccd54970ab82b8bb281748c2dde3e680b7eae9e2027bf917d0e1ce8f597e74e08d1494274e9a3081f2c44913264b7e536f4079e2a40993253fdf524592c60c0198bfe0e97227ce9a3f6fe8d0d9a3e581380d0ca8cd9d374592dab0a95247cd0eff1c2d73ae339bb08347cb983163c6e8994df8f230a0658eaf48d2eff7abe3f3d561739d3a7466136118d032a781396f5e60013a0c687960ce75661376c6c345c8a3b9d161e2dd209111c04d92337a7e313fdf983c6ba8b481b3e4e79382f2c44913264b7e7814e1518447111e457814e1518447111e457814fd51795c15e9a0e3101d6bac31471e6ac091071d60a471831d6914f338238b22195590c18513640421870e54d870488e22b2a8a18e435580f1c516591c4a42511649148f08e28822e850344431881be8b8838e357e90c38e221d3fbcf1513f70f1430f791c9aa3072a7ab8e18a873c8ac5434124da418a1bf2b8a158431e51347c54550dc52830c218fa2d6e30bae3a3ecf8a83a3e8a8e8f9ae3a3e4f8a8383e4af8516e7c141b1fb5c6475d7d941a1f95c6479df151647c5415181ff5c54779f1515d7c14171fb5c547655105141fe584a22386f8a8203eea071e3e2ad147e5f051377c540dbf95316fa61a78237b237b237b237b237b237b237b237b2383f2c44913264ba2a03869428688212cfab431010b0fc6800793c79b11ce61f35e0eb5f07a3a713c183cef85802f210e1f270f888cff6284211ac21cbd994dbd61c2223a4bdec8b698d932b7a460a7968b93c46cfefbfd7e3f9fcfe7f3f97cbe0a483823e8c570c9238339b8e400d50113c610165cdaa78d09dc8411b4a58d2f4600326388863c80c21c019af266068780a93720603261d19b237496e099f3460686ca16335ee66c995eea6c4961cc1933435bd6f560abd97439dc0dc9569bc560af29d7e57037245b6d1683bd3e92933908a29ecc00bfa5bf25081fdf6fa9fd9624bf85f663cef82db3df622847c3e764f85c0a9f3be173267caed0e738f8dc069f23f3b9083e07c1e71a7d8ed1e7b27c8e81cf25f0b9269ff37d0eea734a3e97e473483e57c0e706f89c009f33f2b9229f6bfa5cef9c1a9f43e373443e57c6e7829f1be3735f7cae8bcf65f1392c3e97f439dee7d27c8ecfe7f67c4ecfe7f27c8e82cfe1f9dc9dcfd9f95c9dcfd1f9dc9ccfc9f95c9ccfc1f9dc9bcfb9f9dcd4e7da7c8ecde7d67c4ecde7749fcb7d0ef7b9dbe7903e77f439dbe76a9fa37d6ef639a7cfc93e17fb1cec73423e77c4e78cf85c119f23e273437c4e88cfbd3e377e6e7eee87cff9f039f9391e3ed7a3b200e1a30a7d940b5187c05c793056a274886678443020faf2881c687a44bb4784f4326cc9b0e865f0e265a06219709081cfc3f0c6bf20c1bf20e55ff0fd0b50ff0200ef821aef0219ef42a23fe4c31f3af48756f816d4f816cef816127d0b7d16f27816ec7816b87816e23c0b6b9e8533cf82975f218e5f41d1af80c4af40e45518f42af87913169970c59b80e54b30e1493882841746e8e14528e245c0f322b4794331bca13f861678434e1e84ff03313eb8e00bb12994c07730e73bd0f284fe3ca13c4fc8ce13627a42439e90ed33287e06797c06737c066dfca00f7e10063fe8f783743fc8f6838a01088f8197c7a0c90b1abe203d1f88f881b8f8407b1ed0130f48890714e5fde4f17ed8783f677c1facef03c5f701e2fb58f07dfa3c9f139e4f08cf27eaf91c793e4ccf07c8ef11fe1eabd7f3c1ebd9e0f3f8f07926f83c643e0f039f0781cf63c0e769f27908783c739ece92a7c37b3ab79f73c6cfa1fa395cfc9c22e6acf9394dffe6c8bf91bd1b3c7eea8d9fbafa29453f75c34fb1f0531efcd4929f82fa350ffc9a26bf46f668a878347a1e8d9a47d3e5d1ec1e4ded337afc190cfe4ca03f93e7cd70bd19466fe68d3773c697a1e0cbd8f9324fcadc7e82e14f30e827e84246802793f464684f467e04743c044c3f26f860da7830593c18241e0ca10713e7c1947930541ecc930723e4c124fd17e27f79618ff772f55e7a782f2bbc1742ef65ce7b997a2f08fc96257ecb0cbfc5d06fe1e0b790f92d08fc9626bfe50822443fc78b4fa2464e94407ff450f01d38536b2488600c182b540201fae3a70f9f3d7af25080e78e9d3a74e6c88903e78d9ba9366cd61c81f2c44913264b942881f2c44913264b7e3e291f94274e9a3059f2f34179e2a4099325bf018e48454179e2a40993a5a4a494142920aa0d9d3f7ffac4e913c74a162c1160c13246ca099327524da496fca47c4d56a4a0382992fb39c34f14a2a012478c30b45c5140022d59c20ce68b972d74b054801f4e036f4af8f9dc61a3e73d78eacc9164eea8891ae0802fa27bf23b598280d37cfd4d4c9a7c7fd3af09c793f1aaf49be413bf1a79c24b135e96200dbd0ce19788c80fbe3dbcd4e025a1977f5ef279b9e7a59e97795ee27949c112072febbc8ce1972a7829e7651c39f552cd4b34bf9bf17829467ef9f10029e683c5cf2b66114b00c83bbfb4f49ea51fbfa4f4324c1f98f3bf7959e6e5042fc9dc6649bef4f2b2cbff4516f9b96879a0818ef056be02674541ed916838f4483d3c12118fe4c523f91e490b160fdbb3e745e85f533f6d68614af1738979c54f190e4afc24e267e715a9c27a249b9fb579e46f6a6a6ada8face025a0e5c069b3153b5be4c8c912c8ca764ee22496b3032fd9d764e5975aaa69f637aa69d2cd70abf6b838a9effae0e6c85c2a16eeece2a1f468a5b17ca5f0be30cb9a1c5f1ce2ea5eb74a82a52c8cff2571774817c8662983f33f126e0e874b8575676cbc16a025acc8fb14dd971def33f49c91f91fa3252d872f02b948783cd7d4d535ba4006ee41fcd298650df6c506ee4cf85a16dcd5f8a523eece850b647427d743e1b0ac8df0c50eeea8c14bfdb93b376ed0805b1ade89c9c58ddf55e68e27bc94077796f0504e96361f7e0bb79465f1bf22963237ff1be1f175c6fb2c78de474ecaa50a7491ce782e2e7747c60d42ddb6f14e699e4a5f6ea305ee6eeb06c3dc9c9d4b65c4d57171814d4ba9c03fe1b93731cf95448c88a7acc9ff005d9e931b1ce1be84efe3e0ea16b8552f5c9e15f76acbf3a885df1a74abf44df34e2affe4c6305913ff0be2c26aefe3e1c22e781ff1f252b8413baed2ef3682ba496f5c464d6eee844b75c6dd057081153c8fb8f82d146e9203174b848b64f55c5d2e8e8b4b257bc27cf8dfeceaae2e90c9d55570abc27826a57019f11e6507ffc4c11d1578a9277743bf2475919a782edfcdbd2e5595a5ec80ff09baba262e3077937c170bcfd5e17181579eb214fe57c3ddd17183552e2fc90d6e7027ef9f92b83b241798c172245f2cee0deab94cb849f362315d1d0ab72a8ea5ed89df0ab2aca1f1c51eee8eca05aef0943afcd30997c7c7c5d25d5c0d37766829dbe17f3bdc1b02cf45c3bdf5f15d5c6e6e804bf5e6e6a65c2a417794e0a5b8dc9b18df45c0bd4d79ae196e92f03272f254ca721b59b93a2cb74a869be4e462f5b93aa65bb5e7c2d8bc2f8d8b5be0bb64b813817f62e3264570b15eb839ab5b45c0bd19f15db6e5ccc8ffceb83838df45c51329ca6f29b19419f0bf0a96b439be18e52aa1b95a8dae52d36d44e4eeecb8412bf7e6c477255d1e9a1b44e2ea8adc2a3fc019ee04f4504d37c7bb545eee98c34bc970dbc13be596b4425f9c5da9e49fd65c9cd37701bab73fcf65c6c52d7d179f658d802f4ab0a411fa222c56c39d4d3c149b3bdb7aad14ae0e825be5c3dd8d70816f2c5f25bcefcb553273b5f0d012e139d3e07f5d9737c10d12b1a475f045d97d25f1be394f79c33f9970a7d43f513d6b60be18e79974c465c474e7040f25b56cb830dbfb7ab8f388872a7373435caaac3bb578283c5787c405d69e494a5c464d8a2ecfcf0d867173592e15083749e96241b9ba20b7caced2b6fbe2154f24dc6ff17073255caa329e4742fc56a1ab24751b25b93032efa35ac63cf81f029737bc58bccb63e00665b83a136e9570f9aae17d133c935cb88c94b49a2ececa77c170270b0f35e5716cf43ea5a714fe930ecfd808ffa3f244ea6fe1b0ac05faa2a08b0bf45d673c9162bfa5c3232ceb7f432eee861b7be13ec52fc5b9488d9e0bce9d8d5f52e27ee8971058dafe7c918ffbcae37d27dc5b0fdf359737009e0b843b9279a92d770a7a28234b5b18bf5564592be38b3bdc5c2fd5947b1abf64c4e54ddd60137727c70d26706f3b7c579f47bcdf0a73c7021e4a8cc7d813ffdb729504b88d8c2c69517c11809b84c0c5ca40eb839bd4c765d4c0d59571814aee38c24b69f0548ae0366ae0e62cb854572c6d44fcd64eebce4dbae3324ae0ce131e0aca53eef14f3e5c1d1d1798c0c55d71a9e6728ca7ad812f5edd1dee02a71e2508ffd4c14d9ae3323260293bf23f3d5767e7565171a7d54369f08471fd8fc86d09efb474e79b87427a2229fd960f5767e856ad7175535ce08fc74af926086e52938bc5e7ceab87f2e0ce440fc5e5de7ccf95c28565f0bee2738ce27db29bd4e562a170675fbcd6d49dd9f15a1b2c71187c571b7764236b2d7c31843bd61e8a88bbbbe002ab9e9d3d931d4f202c69617c31c9bd4d3d1716172988e7d22d95c6cb88cb1d931eaa893b87fcd313b11396497b2ea3de1c0797ea8bcba3e362c59e33ddffaaae2e8b0b5cba382d2e15ec4e2b1e8acebde5792eaa3bcef0522dfc82b1f0bff1eaecb8c02a772ef9a7e0ada1770a7293845c2c2c4fda9e2ff6ea18b85530dc39e693dc79d61cf8a29b67ad882fb6b0aca9f1451feeee891b4cbafde09d929e4775fc960c17d7e6bb9ab8b9296e15d29d4cff34c55242f9a7391747c38db570e71c0f65c28595795ff07954c46f7df008d3e27fb99b34e7621d71716ebeeb899b04e662adf07c55795f92db1fde2981ab2b74abd0b849b58b85c469ea4ec22f2db939386e1593bba3e102874b1b085fecbabb453778e4e688b8545af726c273ddf19c05fa5ff1e6f65c2a266eab7c130537e9e86229d14a7375666e1511b723bcd390658d8b2fd6706f537c9790e71105bfa5e7ea6cb855c3cb93e0068758c290bcef893bc178a83e4b9b992fce716f5c9e6b889bd4c0c50ae18914e4b77eb8383bdfc5c5cd7970a9c2784eda3f1571735b2e95a13bce79a9343f3fb744be69b6ec916ffa2d6b5b5f64e2eafab8c02cf7d6e6b9aeb83b162e10ebee50b8c039ee6dfc92a2cbfbe15e35b9239797b2f24cdae2320a60588cccff96dcdb07cf45c7d5897181025cdd935b25c2b360bc1399a52d8edf52727154beebd0cdcdb954433c6763fe87c7e50db9c13c37e975b18a2c6f419e6b833b7be2b5c45c1e063748c69d50fec9eab68f778a73734ddcaad7b2367e91817bc3e3bb1a58d6fee295cb6b74b1909eb020fe47bbbc24ee55028fa318ef43badde09d6ef766c073c5b04cdae0329a3d5bc43b75b9b727be4be97924c36f117a8e3dbcaf37a7c5ad52bae3918702e38e885e8a052d304b19d6ffacb823010fb5e8262970b138b8f387870a736f517c1790bbfb5d60a19b4b73a9102d6d077cf18c3b857828086e933ada79293677e2f050599e13f74f47dc81f82531bf601d1c69f05b80ee6b8ef77d70715dbe2bd1d5a9b95548dc31c84345717126dc58a1250d842fd296343ebe98c0dd997081712c6f4bcfd5c1c5e1f92e2f96e7913231fff3e0e27cdf05c29296c2176f8f3131fffbdd171fef53e1260d2f232c4fd910fff3e18e5e5e6a819b74e462add19a606923f3c538ee0ec805d6b939a74b85466b87c7580eff6be0f2b82e9690e71193df42737937dce0d6b366c017d55c2526b791d4d53ddd2a4057fafec9cdc5e9be4bced226fcad243729ea62d9b9f3828702e07ec32f397061b8f705716743bcd6d39d1e3c9492e56b85f789b973d143fd79d2bebc561e5749771bc93bbe1eca87654d822fd259d6d67c11cf4db273b194b8f3807fbabab3f74f525cde023718c3c5457d57a1cb23e106e3b8dde19da43c676bfea7c71d873cd414cf23e16fc17079736e708a3b1ef052bebb0b73813d2c91163d17969babe356197091ca782e2d37f774a9d65ca5a9ab35bc38382ed5d3537ef14f889e47687eabcead986feae0ce3a1e0a858b34c773a1b933825792c7d226c66f19b9b8ad4b1565593be38b3cdc0af04d507762f15076963601be18c65276c1ff5ab863032f75c0e5615d2cdac509faaeaba56d832f167b387367927f0ae32ec32f59791e69fd960df746c477d16e2ecaa5fa7375405ce05cd602f86204f725c4fbda5c1d1b17e8e42281f15c0c5c1e1bf76ace4d8a72b1022d611bbcafeb99e4c36544e4f2c4dca00fcf23067e6bea7984c66f1d7a12e1197bf33f275a17dc1b12df857493f05cac25ee3cf24f5cdc2ef04d7e9e4772fc560c4b1a115fecdd9ff8a5a9bb537483b8a56d8edf82ba3728cff5c2d5f170abbaee1ce2a122b825e19d882c6707fc0f8e2596679fbe29803b9bfe898acb73e25e2d709592dc4603dc9b03cfe5c3c59570631edc1ca35b45e51196e87fb23b22f0524bee8eeb06c52c693c7c51c892b6c217711767c6a5fa717749dc20d2dd1d5de09abb3be2066d8f31d9ff98eeedf75c2a5c5d995b35c41d3f78a90bee4e820b1ce2de2478ae26ee55bfd4c355622eeccefbe6b83923974acdf356c3736569f9592ac92ea3395789771be5ee575e26f19419f1bf1f2e4fc80d52f03ca2f25b6c2eacef9be126b17119fd2e4e80efc2e0e2ceb85440ee22fc92ef8914c16f4db15c562537578b78754a6e950677bce0a5f45c9c93ef22e1b6816f02b48405ffc7bb3803be0b85e72bc9fb02b8bae00522b9b842df55c7dd697081663c91987e2b883b53782803ae9294dbe8c9338988cba8770be49b5ecf979bf741b94a406e23ded58970abd858c678f81f969bab5daa069eb58d2fdafb882c6b42bef8e5e670974acb85d9799f1c3769818b55e8eeec5ca015cb5bd27311bab38587426049cbfa62953b0dbfc4c0e5c16ed0cced986ff2e0eea22e9083e78bcefb0c78d2dabc16f18e033c5418cb1bd37379b0b435f15b4096343cbe78c0c5b571a99aee8d8eef52e0f228b8c12c9637a7e72a747907dc600a4f24007e6b88a77cfa22496eee854be5865698bb3be3067d4bdb035f5ce31923e07f033c6b5dbe08e71ee6e51a776af050042c636cfc2f828bd3f35d625cde9a1b54b49475f1bf23ee0ed105f271777f2e108c8beb7791b9494e172bccd5515de0001757e4bb022d5f2dbc6fcce5655d2ca5bb16bf84e8f2986eb0cfbd09bf6bcaa374f34f162c69467c916969bbe2b796ee84e1a114b839212e15f1e6e8b85550dae8f2643788e6e260df75e697c1e50d71afa2dca9e6a1641737c7a512e08e21bcd4a0bb1cbf04c54542e3b9bcdc9c934bc5e7e2b02e55017757c30512ef1ce3a1022d656efc4f8a9b7b72a9fadc1c03978a833b01f8a72c9e52827f02b49405f0bf3c77167a28282d102e2fcd0d26f13c83bff959cee6ffbeb8bba40b94f308b3e27fb89b9b5daa0596b6245f1c636973f24532eedc7aa81b9ea316efab3d8fa6f8ad119622b848743c579aabfbe102e53276e47f479e47817eabcfe5957083722ca501ff44e7f9e2f3be294b5b0abf35de5b19df2575930eb858175ca53657ab8f3b850f25c2c5f97063363c22fdf92d3d9633a4ff8d7107e3977078327469bf160b77107e49c9b2a6f5c5252e4fde2099a70cfe530d97c6e4b5e2b83383873a727759dc20d3cdd570a9e8b8af3dde97c2f215c6fb002d69c32f5279c688f8df03cb9afce2029757e406013d9bc33b197073432e15998bd3e35249dddd0e37f8c53df9ae122e4ee9bbec5c5aecb564b8639e977a737779dca00337a7bb545c9637a4e7ba602933e37f4d3c5f0dbc0f6a69f3f24537ae4ede2a086ececda5eae1ee04b840414f24057e8b89abab73aba6781e35f15b866e0ec8a51a7375516e15094b1b025fb4ba38e1a532727171beab8a9bcbba555b6e1205178b898b43e35209b937069e6b879beb5daa32cb5a095ff4e03116e87f526e921c9751142d36cb31ca47752d69427c71e9e6aa5caa41cf241b2ea32097b775b1825c1c03df85e829fbfdefcfe5fdb8413bf706c173295ad6887c11cc85b5799f1a4b1bd56f3d2d5f6abcef82250d892f36dd9d980bf4e1f686777ab25cc9378bbbab72812cdc718397027479576e10860bd3e07d5c572980dba8c89d353c149652d5b9a3efa3a02c6375fccfccd539b955862e2f8a7b85e5bef0781f091717c38da570e7947f5ae3ea52b85572dc9d0f3738efadcb7311a105c152f6c5ff90b8b745df35c0e505ef559aa51637f7a53ae0deb43c5710b75ebe89d0b3b06752e3e6ba6e5598a54dcc17854b5b9f2feeb19c09f03f349e342caf85c7cda170a9acb4b82e8e8f4bf5bb3808be2b887b9af2ceb8576d96b4465f9cb2ac49f1c5189e47637e4bce234c8affddee6e8a1b0c726777bc56073717c5ada25d9d0eb7aab84cd2ba8c1e78ca2cfe29869ba35d2a069eafa8f709f03cb2e2b748b81df24db2abb3e05689b1b48df05bbd3bdb05aa799409ff37c5dd75b9401c1e634bfc4fcb4d5a73b17cb8494f2e969fe7cccaffe6b83a20b7aacedd117183b38be3ba54065c5c93ef1ae1e2a47c570acfa3e16fd57073c15b05c0cd41b9547eeeadd17739b0ec1aef84e6f2c0dc200f57e7c305f6ea92dc2a427702f15062ee0ecb05ca70c7f9503cdc3ef04d826eaeea5619b9b735cf55c595b377da7371b1ef42f33c5af45b2a5c1e911bd473738b6e15d3c55df9ae18ee6e891bcc5d5d1117287b1ec1f92d3c7767e802dbb837abef5af2ac69f9e29b3b1a7aa90c6e8e78abb43c91b8fc161477ecf252572e8c82f7d571796a6e50897ba15f42f24c2a7419e1ee2ecb05d27027a1871a605983e18b225c5e1f176b7771755caa019636217e4bf79466fe29d0f375e77d52ae4e815bd542d3949b5373a96a58da665f94e27964e8b7042d6fb6e7b2e0eab22e90cba31ce19f3cb8392d972a84e7910ebfc5c1f3b6c273f1717129dc58081789d173b9799484fe6983a78cf73f3a777af1507b96af44ef3b330cb6e87fbbcb0b748363dcf9e7a1986e92988bd5c2b2d6c117092d6ff393eace281eeacd4d2a73b170b838372e95d3b34ebc1398658d8a2fca70734cdcaaf1ea32b855c0cbabba5767ee54fc929ce7d19edfda7393d25cac1d96e3928f7ae1ce3a0fc5bbb382872af21c97781fec8ef2a176b83c036ef0849b53e35625b93c156e10eb39c77f1a62695bfa2217cbb5bc3ce3e67697aacb1db7bc94021766c1fb86374775ab8a2c694d7cd1c8cdad71aba0ee4dce7375b1b49df05bf3e25edf65e6fec22f51b93baa1b2ce09914c365f4e31933e17f55ee98c04b31b97ff04b492e6ccffbeeb8373bbeebca4532e3b9b63cca3eff94c1d5257181b68bf4c67349f02b16e57f4996b6dc17adb8b9326e95005a352c6104bccf897b18bf94c3726cf25130dcd71def1be126ed71192db0b4f1f05bb7ab135ea0015a63dc19c3435959d25af862ee2695711915300ca6c6ff942eee81efb2e18ebc8762e2ce20ffd4c4f325c1fb985ca43c9e2bce85ddde07c4c5c9f92e2bee6dd073b171777b2e908b7bd3e3bbb22c650cfc6fd0f34885dfc2c089cfb362bc93047714e0a1be58d206782d34ee58c14be1b9badbad6a735760be36789f025a67dc5b1edff5c0cd2d5daa0996b5365fa4e08e29bcd40757c7bb5571b432b87384876272a71a0fd5c1d236bff8c4e511bac133eeae8f1bdc727931dc201f7737c40dcaeece820ba4ba486e3c17999bd4c665b4e4eed25c60124b1b12bf95f41c9d785fec36826ffae0e29ab83123ee0ce3a1fc5cdc92ef32746f7c9e2b78774edc20efb6cd37adf03ce2e1b73a58d6ecf8621157a7c505f696b61f5fcce2eaacb840213747e75211715f6cbc2f833be578a812ae4ecbadaae12983e07f856eae874ba5c7ade2e21cf8ae1a9e471dfc56a047a441bfc587d69a7b13bfc4e6f280b8574e9ed2cb3ff559da66f82ddad579b95539dc71cc4b3d707174be0b8b9b8475192170afe297fedcddf006b9dca4002e169ae54d80e70ae156847712f22b26c6ffc25c9e0ff78ac9bd5579ae1bee635eb6714fe297cedc9d1a37d8442b8825d2f0b928b839002e159bcb0b73833ddc227aa7dfd54570ab7eb83739be8bcabd875ffab2a4517d11eade4078ae3a9e6ff03740b75dbe29838bc3e2528d776ef05005dc196e52918b05c17366c1ffb6b4bc5c5e971bd4e1194bf23f029e47647e6bcef225723ce34cc8ffc87844dae1b78a3709c8c5aa727757dce0d293e6e4b5e6d0ea7ab6cf3bbd9e47427e6bcc9d1d3c54928bdbf35d635c5c123706c45332bdd3074b5b015f14e38e491e8aea3196c2ff14f031716180dea7c730981eff13f23c1ae0b726b849b68b95e42649b958822e2cf6be1c6e4e78ab965c5c00df75c153f6e37f75ee08e8a5ec5ca529b75194ab5b73ab92b8af3edeb7c2e5057083165c1c9aef4a424b8d3b85fc93135a639e72d13fcd70a7a2874a738fe297de2c674eff33e3e6fa5caa2796362a5f44e3ee6e17d8e6e2b87c970e97a6f45a3d5cdea11b6c745fe297d43c6981be389749792ea397b5e09d664b9b1bbf85e4f2966e70cf5386e87f39dc117839c4d5f171810f3c4730de777479523758e8eee6b8412af7c6c67745b9d3868772e04e131eeac9d50db955782e0dc86bfd70758a2e10e9de94f82edc7286c36bf1eecec805feb9303cefa3e326f12e56938ba3e3521db9b9ab5ba5646933e3b704b84948170beaea84b8c0d79d51fe098de7d19adfb2b3b4cdf922a3ab6bba557caed290dbe8c7d2b6c56f313d9380971101b70e7c53055777c0ad3ae1e224f82e22eef8fba8285a47aece8b0b2c7279556ef0d0f345c0fb00b8b80abecb4a2bd1f355c1fb12e8163767c2a532e326ddb9588aae0e8c0b7cbab93d6ed50237b775abbe5c589cf7b9d184e58e2cbc94a13b13bfb4e6e68e2e9503b760be6983bb6374830d5c1ed20d4e2d6728bcd64f991effc3e2ea7aabc62c6b567c11d14d72e3326272777c2eb08b9ba4bb584beececd053af144c2f25b4edc1ca04b25c5c5f571a9963c6540fcaf872b7fa73b77d2f150272c69575f64f28ca9f13f08eeeb8df76da0d56618ac8cff255ddc1e97ca7775c40bdc72754ab76a8e1305f776c07321ba6ff14b333c93c2b88c8e2c6d69fcd6004f5803efe3e2e6ecb855522e6f861b242e6b2b7c1184a5ac8eff557179b31b4c7347dc4325f144caf25b4fdca43117ebd0edd63bd159d666f822094b18ef7d442c614dde47c5dd5db94017b462b8afe2fb5eb837129e8bd1c5edbe6bced581b955892e6e8d4bd57bcaeefcef84479817ffd3dd5b08cf65c7efcc1d09bd949f9b345e2ca7a71ce08b44dddd183748c07304e27df23952f1bed953d6f14f3b3c675dfe877575bf5b55e8269971192159d67cf8a20acfa4202ea325ad3e7717bbc0328fb1f17fbd3b0abff4e4e210ddd80a17f6fb10dd5d0b1778c7f236c073197abe10781f928b7bf35d53dcf1e8a18c78221df92d226e92bc58bdcbe3e006d3781e4df9ad357744f25063dc9c0c970a8ea52dce17f1b873817f92e38eba8752749366178b809b6be356495ddc06df15c76fe9eabeb840239727bc58d51ae0f276b857bea78c80ffedb9b92a6e15ee4a24ff94e6e6c25caa132e6e871b9b6129dbfa1f1757d7c6053eb9e395978af29cc1f05ae3c5bd71a98adcb1cd4b91791ed57ecbcbd246e88b5a9727e706a5b8bb4217a8c6f315c2fbba5c1c01df45e8ceaa8712b4a495f0c5a3ab64e43662ba3aa45bc5e6f2fedce0a28be4c57329706f709e6b8bbbabe30615b848433c17efeee45ca014cf5706efab726761bcd69b7b03e2bb607707c70d4eb923908782e2ee8a3708e6196bfa1f005729c86d947475c50bf4f2a459f0c5714933f4c5dac5a5f92e2596b0a8f745f138b2f13eddbd61f15d4c77ca79a8dc1d03bdd49dcb4bba413a37c9cbc54ae17943e1b9f6b823faa52bcb970cef23736f497cd7edea08ddaae0dd25bac0aeab03e05605ba15e29d18b83b3a1748c5bd5ad6825f4cf48c29fdafc85356fb5f9c67eb14a988e752ba73cd43cdee2dce7371717144dcd80e7737c105127147a88ffaf21eb8c11aee2df85d5037298ecb08cadd917081c2252d8b2f0eb0944aef146869d3f245362eaef75d7d6e0e814b65c1d54dddaa259eb301fe97c6d216fb6214cb99d4ffd658de6496806f5af29c0dfa1fd79d183c5400f796e6b9a678c6f8f8df9abbf37281892eaecc771971796f5cac2faf78b180dc5d0c17a8c71da33eaac9c5257d579dcb13e10685b73bdea27b25c1b350dfe4e42a45b98d9a5c5c07df35c79d55fee98d9b74bb58515757bb55696e07bd53ed196be17f566e5202178bd0af98ed7f4d4f69c63fd9f09421fd4fce9236e88bafab53e156cd71e79e871af22cd63bb9b93b2f6ef0e9ce151eea803b8279a9069e45e19d9cee8debbbc65c9d915bf5e736ce37bdb0b4e9f15b4b6e52ec62097077e19712b8bc2fee1504cb5714efa3e0ea10b85529dc9d031788480bcfcd255daa2f5726f927353757e8522dba39316e5593160757f7c0ad9ae14edf3f55dd99e6a16297d7c10daa310c56c3ff621777e7bbbab8bb3e17e8c5e541b9c112ae2ed0ad026309ebbd2f89656d8d2ffe709510b88d0c78168977f27273662ed50b5757c0ad1aa403f1f2e60d4ab0b481f9e21b5737c2ad6ae3ce380f85bba3092fd5c1e5b17083785cf9fba737cb1a922f4ef094d1f99f094f24da6f25ba3c383708c5dd0dbac0e0e539dde01fad326ecf7c5309f7387ee9897b7bf25c2e5c18ec7d38dc1d0e1758bc33315e2bce12d6e57d5fdcdca14bc5c65226e87f2c3c4723de375e24229e2b695903f2452fcd632963e37f51dc71cd4b41f07cc5795f94e711d76fdd7027f0a12cb83c3d2e16eef2b4b8575f2e2e871b8be129d9fc93a0bbd3e3061fb83042efdbbab731cfa5c4d2f6e68b77fc8a5df0bf039634ab2ffe6ebf7c9306cbee79a77979776ef08abb9b5de0999bdbe152355ade863c17079767e806dfd0218f9ba3e152cd7173105c2a159635385fd473754f5ce0ee8954e7b718dd1bd57721b963eca180b833cc231174e7170fc5e7c25eefbbe17904e6b7e22c6b6f7c3188479904fffbe0be8678dfd4e5e9b9c12d2eee83efb263b9a047b27ac2aebc6f8bcb3be106e958de70cf85c19d861eea77718a6e4c889b53ba5460eeb4f35049f7e5c6fb34b8e5e19d0e788c5df91fd493e6e78b7229a3fa9fa28b93e1c654b82f23de07e7e266b83116ee3ffc5298cbcb7283363c91befc5614b736bc939367f1bc53af2e8e0b3ce0d92ede2982bb43e00253b8b423af65b54c225e460edcd7f8a5241eabe89dbedc1d0617087cd2e4bc96d6bdd5792e30ee4deab950b83b022e10837b23f35c4cdca45eaca53bdb782810eeed87ef7a3d9bc63b9db9a3d34365716f859e6b8e3b223dd4114b99c23f7df00873e27f48f705c4fbd6dcdb19dff5bb93888722f37c79799fefc2f2bccf8e3bed78a8149ef3e89f8cb8b802be4b835b3adea9cdd2f6fb22f0368377b2dd717ca81e2eef887b35e5c272ef1362696be1b7604b1b1bbf55c052b6e67f862e0ccdfbcc58cec04b322e6cd0fbb42e0f8e8b252f92f0b92658d6f67c11d0124f79c73ff1707159beeb868bd3ba544f9e2f36ef7b7265ef9d30b8b9316e95d31d75782944cfa33b7e0bd1cd11ba545c2c6b7dbe18e8eae4b8c02957c7c2adaa43abc84f838bd4c5735559be6e785f99ab8be15635baba31b7aa877bcbe2bb9a96b5325faca345b56cee99b8b472b8bb331778c4ddc1b940282e521ccf65e6ce4cf81ed05c9c1c972a00ad2fbf6247fc2fcbb058d4ff0ad0aa73775f2e70877be3e3bbb63c65b2ffc1b93ce0bd42735be89d765a6ddcf1cb4b31a045c6bd6d792e219e352b5f6c7375696ed5111757bc5450ae6e76abcedcd711ef8b736f769e2b8c9b5b73a970b8bcd80d9eb943f0d28da512d26df413f6e57d602c03dd99c64371b0ac8df1c51c96b213fe47c3dd1db9400beeedcc7345b154c2dd46bd85e19da0eebcf24f71dcdffc043e652efcef863b1b3dd4a1bbe3e2068b5c5da25bb5b594fdf99f0a1717e5bb4eb839306e159125ed8a2f1e797cc1de3764f9eae27d7eee4e860bdce322d5f15c6a9eb428af45c7b296c7179108e28e7b5e2ace4d4273b112ddbbf8a51a1ecbe89dde5c9e0d3758bcbb2517f8c17266c0ff847737c305f67191b09e8bcd1296c0fbb22802f706c577fdb8392f978a8461311ffee7c092e6c217754b5ba3dffadd71ca4bfdb4825737c1ad12e2261570b1e0dc1b19df15f59456fc130c1707bc54bb61312efff3dd89e49fc0b8372dbecbc9a7e7e2007d97194a5c1e0ff7ea77755f6e950ecf23a8df3273734fdc2ad9cddd70a9ecb8ba202e70bca3908792e2ee9c2eb0cf52d6f5bf2e9e3119feb7c09d483c94999b24bb5803dc5d153738e4b91e4abddb48c84dca72b148b8afadf7c17067120f75e6ea34b85564dc9d103718bbb8bf2b82e5f8e4a310ddf181974a606983f2c5326e4e8e5b15990da854ec7735198a216010018400400021c60ce50d00b3146070401c128c0845629a42e1d49e0014800849a2c8b83218916224680c2206180008000000000000109199f1cfeef151b4e3e6ee611e6a4671c2b40bf365a07dee4b11f1304123b26d3ac95fe3ff7f6a3592b02044bb7ec81c7b36ef5d3d81211f02d21ad376d44fcbf7c9ed0a6fba300bfb0f7c89d70fa46ff097f9a2e6e7629e1572f0a0d02550f48c39d924557fdc41d6d36279ddc58ebb16e58712f273b6bdd3ad34e369c75dd32dc8f6e60d311f3ef4d8f051e85a6b5bee95987c8d3204593af6772ec0fe5f74dcd520f0f2ee2fa4f0213ffb7ee69bfe4687d9e24739196ff745e51bc77afe19cd44eb65550fcaf889f3eb0fec0296ef7524516f52c7429ff3cd500383b1bd9ed1f5a4ddc13e89ab385e77c5c03b6a4b01088eb2c5791c7dee71dee0894f9dea976d0b9f3385139e077ba334c08e8bbede71a5da9d8ebf765f80c152815b768fd311978030abee838a5c7430a5dde1a459529e76f3ff9386e3a97f47f59fd05bcdcfaaf63e3eb4f0863019eba8c3ae5bbf59ce4481296d43b2514f93b9258cfa2467af0e74cf8c948d6e1ba2b7086f901f91b60d925fc4cacadc7f2aaf33f0125f51523eedfe797eb632c83e02c7e4e038f8337e5d17b177cbae1bbdecf98703beb3c4c13643e323d01c95bf943dbf689ec8ed7a364e54f719b4f0b3f89978f33ade892f0b4f314d12693cef77ebea5fccbbe6e129e30b580f9179deed2a7da5fe87c8df91713f5a1751f932e83f5cb78c393c7cbd3eabf9376458eb1aae4766f79c2381767ce6fd1d0aae892318e6b3fa943d063d9774c71f089c960787b48c7a1ef76428bcaa27c383690833c3e091e4ca7033c915fb987b2beffcde4ac6beb1fbf4533f312143369bfb0b3f8767e46ff8fd091b77702ded87b71b14501f6dbf7bb14747292dc781a520ed055341b212712b9892b1e0e15b70b90b4e1927115eff18dcff5e78a725cc10f7ceb870538b86f82cdd73ea79a426ec0e41d23d8fc56c3c0767f081edc41cf9e1e510e71c4e7cc1ebde7517420c4423cdf2e164abf985f04dfde29fafd39f0d7c3c10b3f683812f3fbec9f79f33dd2345c603e8976cdd3e8e9dfbe8095119dc391d3eca33386e434397e1ae41bf9c6fd67e5a1e0d782a7495fb5af4ecfb6db2bb9bbfe4613b8f2397453e93a3839d1c7631d9ff6bf8dde29dddd356ccf2c1ca7af95e437d75ffcb1eba5599e777ea794691ddfde7d6b5b60667eec1c09b3ccc686783b2e75941876749cd51611b0dceec8581b77998d1c62665cf1b8c7d33385ae475fbd59fd8a66d7761824b84d61ca4f91d281dd1001a335d28e978505e5cebf7671a92cd8cb741a49082fba95ba4016f26d82f32a0dd6893d68b48f27c50cf267b3b8dd443793eb3779cd9ad1d7f951e5cfd6b54f0cf34fdb69a4e4ca2fe3001ba7e6abb4a0dce967caa4d910cdcc0fb35133d3d2b5b79e555062cd986ecbe5aabaf7562efa911784585a4cac88c146bbad30e14abfcac576d8f076cb16c20782f59feb6fb3fe58d70dc0ec9b32055b851cd7bbad9372a9d51737af6fa09b94f9047afd2293d5b6684fe5bfe90bfa881db7acc4ffe9e404221e80884041a854648505048081245d21f75b6dc5bb65a7de209a99d3093088bc52caffee6ef7d9f8adefd940d85982c430f0d6732aacc28d35da88dabc5a0a6b1f0c1872827fc32d1ef9b084a6a8af5221ff55cffe73aa74763198efb16b1c97e4ea378ddc838f7f96e7cdd973fc975978f5cb38c7f3bac3e7d7722dee51dbb5b7622d04b2c650f03887572b40f36c21ed96361ceffe1a72977209fd0e43ca85302756c4b6f0f9e3e6d3fb4f4cbcf0d07d688afabb1bdf04a8da01713f7c604e9321c68b9fb87589b8e7a3e71845727836253efc142de478a4f1fc9b775d9d4f1d9bdc63f1d6c907bb81ed729b28613e29f4767c87a42923fd9d6d2eb47b14fd68fe6ba84eb05ea3c229d06807bae838e8cf1c7b63971dce584b8639a300f3c21ccd3444619eca7457978da9ab4e7bfe5f8e775d5c4e33e6260dfce27b6d388a6d914f48e35a0162f0658f2eddc619ffc15ff87e9d8863149ff5d4dc26e8fff3d6174573d68e80b3357607b6a69deafb407a41f107f039c4e3f5a7ef9bcebdc4d584aaf7c21edebb787771d8edda8e68fdedc3b2d9dfff242f82c778578fc9b73682dffe276f93e9dde65def8a1ee654ee3f983c6bf8d551cf30e07b94b562db90154df05104addb1f7116b439b0d3635a341ea696cccbad8450f626c97e65db025d3781bbba5010dd6d45dcf8df193cd6b1e13dad5f17b9bf3b83a529e518ea75e8e5bfdd80d5c1340f73d79c905bc5e4d7991befec2d02535bb16bff89b64a73349fe7d1ceb9bee9e9d19169d7979a7c10d0f6c54b9efaa83ea3b5dd12f4e25f0bcf61df44cdebf2eae63e649378ad70f71518dab0a4aed5f898ed559510213e55c756ebaf6d6dcd0f2ba1e0e656e8b7d648f4a6e02b90d8f58898134d3932df470c0313c48142f6c04e85ff43cb83232e40f74362d5bafcd0ed1a564204088559b5cde7467e4bc8bedc833de3550d726ee789891e7e64471ca688fac17bd621189dd86dea4464f7b37139d65f2372477da6573a0b926ab890c745fb784575a3bdc5dd19b2d6f56b16045626dce4c9a1174fdbc9be0689de97583ee359e4edb38933537391eb9829dd98cceebfb1ff39e5cfd1a169983beceb8a043b0ada4e83d795b27fe1d364769924904f4abb60537cfbea24cb3455b6f76208af850d93af91d35dae0599d00a06f9560bb32dcfb397d296be4eea317a8e22a12d0d31eeab81f342f50994d0d876e590bd26b4e4cf99241ef400b83559013d7a41727dbdb0de80d234756e20920d2de4626b8ea0d94b0cf75fd75cc9ed8176fe88d1671a7af8ffd964fdd858d9f382f429f6cee45a3276914bbd6c3924c84a5d28a979519569ad052bab4295b8959fb6156ede02ec425e90a9223cc9dc99d1dd0dc6891fa561926d91b61a83996b64d23b07d55d28c736486ddfbb28b8e7a264db303dbab319b42991cf1f4b637ccba50599903dfef74f0a00dfa05add541634d43d8cb879393e9e68edc2dec24b78f1d9d203e42caa911c24af38a5b695db3bd748be28eeb0b05ce9065b2c63f3048335023b977525353864af02c624e9a628933577d89394f68ad06ed8a4922892eb3c8f98b48a80bdff4e0219e6c7da68fff08bde86d192e0ee61f572119ff5c35e968cfc070e426c5849ff59771ccd2aaa580e2be65cbd4fd0f3c343b200abd767e9bef9d3f40e97ddd24f452d30c35e8af5af97e1c9b78d0f24b315e2f18f380b7741173a3e7f663c0274fbd27f6d8c799f5dfd58d8991f749d40d31e02059fbd343b07782f45cb85c649aa48cac368d5aa5b6b440560e71b196519bdde8962a0bb1349ecb32b587efbbbef122787305a7bacf08fef931c66fd48585a9546424b6dacba82159d38c0534d24028bc6bbb4d4ccb0dcb7fe02e4ea2082013ad0ece5b313398d0672c73416fc852ebed753978dee75d93e5d61fd0a4211bf6a652327a33efd10887d3da4c6ae2eefd05572a6718e4ad2c36563e34b24bf3d13f07126b7c4f2194415de3e60263504617fc09c44d9297d16c944c378d4016df1d08c17dee29a8a8b16f2ad4d8010e5c77ce6fb8256f657e5666ef97b4efa5887eefa45b2f0b03b799d01ac214385b5877676f89eef52b2d85690cef85110d52aac63da7585d3d4c67b65480b07a945ef9fcbbcdd4ae4503e23a7da672e2ab03f3f2158f3426e64cbe4b2b1cc287fb833119b3713f5def561ed807d2f30ca25e6ef45c1993990aa9cf2c1c7b77b29cb07eb0a2d7d565c27e42d84f455cd92d974a9ea2b0f76f00bee4d61d498cf40a4cebc95e2d76025fb17e6fe83b06163422fb3e5cba2baa9bb01026fa75cbe62823c1d58de40cc8a57a7fa33e3e9663e125f182c2de6dde375dedd40ff4d5c927c8c3ae7e17785ed6aed0a13888ff398524d3f27511d265a96a113a03d29bb1b3902d0e1f206db13f0df272288f9add0c0cba55b722f4a3fc9c5ac6ec7eac63f2ef02ffce7ee49acbcb717369961afa6b8631899f62ebbce3c06682d71a8fa5f1bce96180762ba0f15f662dadcf53d8c993b5984878ff6f86010777aee8e797c1625d1d9b4c4168bc8b70d7d3bce3d15b8bd6f065d612eabbd9121cc3b95e12684497345dcda5739900cc0ae7315a799c2e33280f19252e9ac8f3c72c17d20742b4a61cf61af0f133297f2e61bd808d4ebad12c38c8ec62f20c6d7eaae94181a76e3084d58dac404448d2f49e92270b1817e3a92f52ed9cc27eae45f78eab767ef1abcc473d5e6e2c53a2a316b5b7942681c3d8b30731b11ba54287e91d463eb7b7dfbc16fd534d2df85f8c6657d406de3474d0a97c964a71d795a788093bbb2dd615ad87c3546ba6702ca8b0625e65bfe176a964c39547585d6a5489d5454cabb169937115f422fc21eef2be2f552a7f01662baffc30699f3165e2bd62d85a23cdef43f73cbe0e42fde96ad46202310e6151c4051c54825188cbc7534a493ef9d7e99a5ed4d5767132052747a3ca010edb15be6edf1192de08adf3c0d682232a7dcc082cba2ccce14de889d390a41c990ad7a9bcbb8b9c891b4f26cc5c7e2b202c54203dcd3c328f2ace022e37692ea10e22aae8021fc2eb04ac7aec762703e1f52ca5bc4bf5b9fd703df4f0ad3e7644c0fcc2f366d4fe97e3d90ce7e5256721fc146bf0cf6c47129d4bd4a035724d11071cbce433b8f277c22f6630c6f3392fced343aa764d6531cc76c84e550678071b1168e75b0223eb8680a196ede5c5f6b05223557612f6e03192bba0552142ba4e8a0c4379ba8ec8d597f49c712956440fb67ce5a277c04a5ffd485628ef2ed0b7c39a9052dd3dbcf3252c2d3d0c39282b545daf55fa32ef3cfbc78603d6e416d2dac4451932f93dd4083bdc4c795cd871ecd1fe3135d86045e5df67476783e88a29fbf2a80c6b2c51fd378c2baf439f0ffc1bff2e28d61da744bef88cc2f544fd2cf14943b8a8f70a4e2cb8cd4f61b207476635750d4f797eb8f87d7d32e658b150b780fbee74e9554c39541dc7c44a4c3ce22a9acec9b87bc7612975330bf480182eebd6e1498980a0b3feab650a1ad217a4400ca8f305f68b5e80c5ed5eb0d19990a31684e33ee26fe1d9c9e42b12f31f89454f39ca3c510edf4eff41dc15a976146b31a5d34a7f0dc2ea49cfbcff5ec9eddfcc1ba3bce038653c1debd08b8edd99bc237740bf152e816ca6381a252041e53d910d89782e287b557db9c2773c591fec9348d1567c188eb90a3707e5d8c36a79060f6ce73827a17bf791182995a798b6353f59159314424a4b623be8bbaba447dc53acc91df0e25f63f3b3c00361903fa3bc09fb8fee8c08f18a586d2881950932bda86bb0cff552925c9b4a5c9a6d32d6afd3334e271da2de1a2e7b211d3d315efb0e531563dfbb127187d35303b2a87bfc06493a0772504edc7e65d9ace14ee6dfa4a3ac5c2a69deaf6f026c33152fe62d067c59c91362df6a6ad6791910d77fc1482ea8eecf55f11abc7a58bdc32ed12c4cc8837e5d7988b7a2e0cf065a510c74d34068c47f7841f98678b708f6124bbc187808b605a7be86fad042a7e29cc40245695e5b77b90f92386c412da3f6376fca79ba3c6dd164fb496d09c184fc81d7029b6d52c40b2cc9a4d1d9032ec64fc7457da0399a77cc948f25f8463aa66c22f05f403deacb77801a458ffcae621bcbf9cd5f1191bce49dfbdd1609c814d5e623cc9f85a10973f60e6441d954c93c38b04f60736db44e3001709e33a1fa8a7ef1378186ea5b6f8280ee91f2f5a78fa11b9e0fd85e04954de55f050425e29d6aaea8440f274ad039fd666c4b43f39cc26f18812ab9a506db8856cc1184ed2d531ea497fd3a3580162309d242d37722f633c0be13b05121ae21987ece58560f807ffcb7857aa34666a23d3c60a840342d3f7f0d49b4074b9dbcb0fce88e97720b349ee0b192b06ca1fca240c7bbf07b8643ca57e03cbb3a7994a6bfbd7a3b05fe637ecb81c6c1116f55311c20907fcbea80d46bfa102fdf2f94850ab9d935a67f8c9bec0ce0e0c56f42a8acb6d300cc5bfd26f02dcf37eaed9c66225abd968192c0f7e93f29c729a1638feebdd41bf9ade849fb754e6b7db1e4c3a04f7a4c381a4c0a2578384eecd4ffe99bc13889f64a6110d7199ec398d9f075a24ce5614f88c2aff074188489bdc1b4832af77ad7104a93c9e84c40dfd729ebef66ae00c08d33de133978f83242baf893110ffdf47dd070f004985be69f02f44301d46158b15d465471b8cd237056007be7c7ca4f9f752b817c41b8764818e67b6e13fd8680afffd40c05f479f9e62a4299effb75708fef31971a6ef373ff3cadb1cf82193d44a69d98450555770c2bdf8750b6418d15df8b4a8d42fd1055e53e46263fffec4aff337430dfbfd0e8a7150caa8e0c6c747d842deaebe8823c393ce2f74c1410a4b4b7fda2e19168e88e375e16507ce1ede26f768fedf49efb678bf030d8d43b138dbea5c0b4c24b677a12531c09b07058a0bb54c302d0bc7645d02ab30f68a621714ad59d385df3fc5a718c1e77d19350f1bbec3a238a191fc9b58bf3973b53dfb183f704b8204f0788f2b1568b31cdded39996f702ebb3bdf6db7e1d19edff99fefe6bbee1a6c472f26e5b9efa728868309cef3bcebf6e053db53cc3c63fb125b5bf03ae67bc22f01f437818f5561aaa90bde4d1429342a5a05f2fe2c8625de1ef99194a131460c43b8657a089f94b7e84e7177c7e0dc836d27d1f8af8652054b3cc8f088009bbceb2610c1310b6de7dc3aa744ebf745e168fe3a57e011c6bc5f9b73b2dfd01306d00b483d0d4c2d1cdfe39cb38e2f2e49c8b6783c09a8cb68e2c565be2e2c73a22dace5af419d208d49d796eac1fd93a9df957396db3ca3dce2821c46402f75518122bc9291e337cef133f166ff5a94f0558a7c71539b0d58305a66e54ea38c987cf16cb5df4cda51c6b684617ccf92bd165b8e8c83373d6c4ef61c141c8c36062cd9bb1cc9d41209121901e68685f1bd4ebebc0ba6f4096f5cf6ef4b1fdcab37713becb3883680c286f114b14b57663f6a63bf9ee2cfc00df363161e84d53e1f52947bdd46b984799b7f36df18865f72f9b31d1fd5d2b02fdf057dae49c3d6b8c3f4c4ff26aa8aefe252dd682f57b1234a10d25f512aa8fad094cdc43dae1663d27d6d72d69ddfc6667c5632e6f737339746f72bfffb9ea401f1f3cd24b9cf661677a305b3e7f747cefb1425e5a138147f77b7d9ccc2fe9ca662f894ffb883db82376eb4b9d7efef2d1170a62ccdb55ba5cd1eff93fb88fdee8421a94fe3effbcdae228f40563e63fddfe7ed23439981db322de1ba56b2db8fb52589fc2495ab937f1a7d1c570cb16a72e75dc4fc51d7dc1bb53514233fc7d3fb8a9e349c692394d9cc3e8449a189fb63cad583dfe7dc15a561eea443e564c87bf232f02b1809f2e692dcbabf9ad660f428084f99433bab131ca4a9c04db892f50447403850799f219e7a27eefca5a8bfd3e8b24a09d25f618d70583dbf2b747ecae1822d6ea38568223b520c69552f595157995de6f03c93a60c15201f9a8a4344624ad69d7c96db22376e0a0fdda06ec07fe43af63eb5df79aa3abeb0cd1796489f9c2c1f525c4a144f46ba2571a11d1ebf0800506cbf62dc3212d4cc61569684d890058609f1c118ed71a71280526a3a96fdf3fbcec1d012305d41cd3b6c483ef4080dc653e2755e21558d726aec7db844319ad52a6d0104bbee46c2e1ba487a2f055f6886421491187d4e945c0f68eec6e532cfec89d794292b15473defebc142c13fddb61e62bba9e3c7dbdf580e707c1daab01137ee6cddc4e46bfc5f22696bc0f04ecbbbada3eaf16606602dd037628df50f51cea6cbf2f6d87b6afe3bdbb787d7d6aa7f26050cabbc4ef4523a0bd0b9fa9cffde932ec771c023255fdac60975f39f6d0603272ab76182138471a91590374a216e65000121295541859378c919c54093aa30667c8a9c022c6a01092642bf6182171469b91590170a01a6686fb0b9bd22cd4add35a4789bf64ed8b8cf9930e5bdc3856572958f9fefb79042c9a0da6a6be26e4d70b32a906043bd76a867b14464fe878640bb3df139503f335d03d334c1d2690f2c011bd3f69141f21f665d95d441a6378fb4e0f84b504a763e426c61d18bed4ae21b330bc112032262ed9c1604c61550478f8347d536e3039062061733169ef7eae6bec21a386c3c3777044211b68dd6d827154996229590cce6c6c079e9a2ff39cefae809698c67d37eb8978270eb3aea3e0a68bed72ca6c66d82ad3298d687760d8402055c3126886efa5ef0a45a02306b68698a73e7fb977684a2ca9132850bb8395440f7fb76ca857971e2626fc5b86df3a072f5c5d7532ce4ec6b918fd3968fede6099b96afd74aed86e2f0ca77dc41f99ff91cc0db08413110d31c7ffeb67f42082a7e80e499995585b0b9b5c83c89bb1d37bb3798ab51bfeafe8b9e2fc530d1c0503e66269abd5ddf4dcf3d37c6104e41d0ebe3cec2ea7d65f1332decdeb8213f90928c9bdbff87301722cb3ed604bd067646448470c6a659e59ec5c74b6283d27a6691999c9792472fffdfb6e2413d7efa0fe921496121127df8eac1af91424b5f4dffc667bf0bedfd274589aff10f5e3cdb13a07253bb3b9ea2a6f6d1b36a03d5f85cf9fd50243f890e65f397c94e94e9d5c7dda3cb5c66b655bb36cecce0a98484c053ba246f21f1ec0acd849c43ef0be411f3fbd87ae1df39bef9fc196dbfae7c15ade261bb90d33112f7e0beb3b3904e7dcba5de3adc21cf561421cec9a31dbbef1bd5d70e4a270579a2364a0621f1c399bc9685c1f66b2183d4d3804e391b4a3fb57f72eb0ff648890ea87df592afc897a695b000de5b1249990128882ba4a801a8ef41b096af80647139c4f39c44970067e3ebc82da4f80beb4b7e665f169966f5b2a66c7be36d66d9c6673a7bafdd01b846fb2296c7c473e991ef433ce261cac256bc3b4851093b45bed9791139bac6bf4e09cebd6c06a69bf2a1a182d8f212092d6779c7a3f640b57697cca172bb4fc5cd4934916cc2df9621c1727cdc2565bf1df7105e339e6e86e69f224b33937f309c3fe9f39a7395c674899b4b4e8f1c6aae8f16a97f0b72d0e47b006df4d2756cbbdceb588f5a8f5ba2e44fa8b9cb5623befd2dd86c09871f8bac181d078924a54d87193a66ff8aa3c6bf7c10cd4d8f7d12a039ea4fd103457f81332bbe68790141f785c39a070f55ef8a035ca85b90e8639dbe314dfdcec179135c2d41e54984cb95799e123e8f98469f63c53ac61b5f57a47b56d661b78538b274d3b78d59d06d7466ae18572d6e85a1fee007633eb832717153af118145f7cbdf09eb421b885cb09124f7a04fe75f735e493e59b8df2ad6d17ddc19cda082793aba9416dce0dea26d71a570b00a366b7ccd91aaf69557bf397fe835de4b6d69827724a1dc10be5115dcc0d66977f6df64f990aa7d746f45e167e448c6157934ae7605697b6ce83bf83857613c5d6a6feb6cd80efefb96b57a211fbe7f2f0c2a496387da7d4d29ded4cd6c00063289b53da472191b358641c19b48ed9c49d9807db4d84475addb9c82dcf0e2b9868c688f8fe63978a9c147dd875d0598b840276fd6bbc98d5f90f2c4cf69fb628751b35b155be6210adec19cf59ff6c72ba5f3e154c87bb9fa612ad6cf8975e4fbf1b4f0c76738a9a1fdf89fef27192358ed10f0445aeb6873da2d3a48f0bbd493e11f81e0518b6f8b7c62fe50cebaa44bf041cc5bad8e408bc0dcec1a49f9e79b174b3e40a7fd42f167d956e3f43c01177a6d49b5ecb1dade3ae76ccde9f60be31fa1bdd0825ab3d1298ddbb99638df4602ea08c1e4e67cc77837be010abbe16069fa3dfca6f9b5b61fd6ca0f8bbebd1adf99adc3457c4744fd8a29d98955b3ef2a5d67e83a5e336f47d3a85a41ce169eec65bb157fe4d3c07b5793db9425eb71cfe6db37a55ad8b940d5bc31732df353944a5645a065d6a3d40491ced83296d00145dbd1aebcb5ef9d4277a64db53d3963b9c149cfff0c10a27bb3d23671d9f47ac93b36cd545a6625aed1cf1d698fdd0d0857ce8fcb8df2a078e261373f398ecd3c38299915b1e4799b9c052918c6edc4816dcfbd56ab96a2ee97eb3d73aa8880df893dce9d7172a513ac260bb0ecce8625d1466e70aa96bddc3f5f542f2663baeb36701ccdcf233e72b48f87b91c81d322f4fe8358723e91fde5d5833866a594e8536c39617cdefd9b790d21874cfa483fc2a71e84fa868c2a421493751fdf698e6f7b916f409e0823f819fb5c021ffb01f0acdb9dca5e0c1fe3f7a06fe6db4f4f7b65a0c6b3f758f6c4c6b01e1c700400f1217abec5c1ca527cdf70f12f8297e150bf643e09a1def2ca6967e3c567061b16b4558dd5e86464bd45d9273ef02f26eaec00a4783ab93b3a5637f00dce28b21466dfaa7b19b438bcf4db6e914946e9eee19ecac99b41cd337b1e7ea615657fd2e4ff8ffca429ee52ca73886d6e94bfc64aa54c03cc237f045c39dceb199f46c8deeb6594e4c1ff1e1226871737791499d3d8fc4e7d5d5bf8c5ca95483d6dcec46f72cb4587801c2131d31715dbb7605bb266b1f48dc137b1c500d5cc787104a526793dd94cd39e43339cf784cbcccd98f6fbf3cfc91c66e54a138f439a397f3f6ee4df71ef389ffe6a1c64cb9e1673ecebb28675e890ab30bbd667e5d5b598de6140f58ff4d1565daeddaa3d366a93abf3f2fe4748211734ac1764d16aa77038d63b9671bbcb6ac2e836910e206dce7b136239d522a9629c68bc92d17bcc67c2733d3f934ff9518b61daf797fd25b99ffd19c0e7b21f290ae3509c2c54dfa76fcc7befb3765b9cab58b91c4499d66b2c1b3ae19be1f5f3adae2b2f7441661b7aa1bdf7eb3bcb832d690cca6396d6658efcf9aa71ab7dc64d7d979760673dce4390fdd2f2c3c6eec40af1f338ca3914974e37b75a730b3c8f5a3344d6e61fb0c5ae2ef1cf3007f5c62e770cd19b3adae652ffeb9c9d57d531609891339f550bd283dc0e5ff148ab2dd61196a4594f9919da8f7c68fc11748d87a6a5581c61c998d15f597c23f5ef898c1ab9a0df81aff246e298fff0baf769cff3656cdf18f7ea90429852ff0691ccfe4be0fcf6b8c8b5b772c9a1fe37669551f05fda8bf3f680f724dd39845c89984fa254133c691e44e2baac4c6427e439cc42a7fd41667abbe713723f51882da8c38cda06f6a3033d9db2745ffc8f936e45c6113f3f39a630e205dc49bb4f8cb5f52b0e3753ee12ad26c62d8c33831e95665a553c1a67d490b63e6559bfcd5a6736e4d22e6f5715485ecf265405881b996a328b69282956ea7e6e3dd83dcd4bbe99beab3d7b81c864de092acb627ec5fcb994bf5172946f18346ab85a1730efe213e944e561fe56a26fcac954f92e83d2997b7bbc3b909c0b14af80857155de184fcc62eb86fa555a6bbf781d5a6a8b35200afa289db90fc287c9d992a965e9e8717d3ee7670ba80dc3f65ef271b63167d7b8b70096506a56f424c959c5534b92bbdc8ebb6cd6cc16a735d89efc64df5cd779ee759f22bb4aea6b7b1033771192c61256c3c9a3918a0a44287059f56f8ffe267cab19ec3d8c611cd8a8f009f33bc2223fe4acf4cd22fab329b54e6f60d57a5e9b983b76b367b9b2d6fab84f99f9671549947908df6c1cef6c93d4f920a945457d8e28bfbf5cf3b4dd70bb7d2629ca0d70155783e0abd6f245b02e49101949415405774b1fc6b6b865c914551b06605d4ce38361464563cc204036e92d88d97b0fab4befbec4f44252d4f54247b7c7d400ebd34beac964e7f5e434f70ef6ad4280a0da2e23ad0db804feab868cde54d74f069a77dff6514046f1aad7b55b5d016a173d05b6ab6dbfaf7e6e9b5ab53c69fa4e21ff0cf9c81b22d51e823afdfd6b199fd22274bee68fe2eeed1066dcc4be97ae28875fc1a94065517317f9ed425631565ca4cd0a3a58b892c2cfd5bd8ff00acb0e75f5d11afbbf41a55d5b85c9817902d421bc529d0571e6761131bb8eeccb36279e9f5fcd522bad34e34f2e743631d9b386e0c205450938ea0a8cbd3fa41edf15dd94021927f422cea84c49e617afb09e9f2a9463d31a541de2cfaa7c4c2a87a5a0e9f936b813715b01d30039e4adba3dc446d16ac781aab9b28e4fec2ec99b068fb0936923eea9b071b718ac15644ec4f522eec34dd06ac2d3931e90d7d3c214e6c0199751b6d04614cf5ca911a231b9626b0449f33715f69e277adc12a99a6ffe234e309d03ef2734be853ebf25b46475d1d6186b3961ecc41d7cd19225a9fae07d608d015b93c14f4a1aa8fd725abf8c26ceb473b5cb9d3ada89375e87dd5334c0f80555badb87cc521e531e9318b205d27e30b7fb8a3960f99a01312b5fd6deb7991b53abbe22e5b77430833c57615e56eb88d5ac1afe285ad9d2fa393737daa9309ffc1741686d406bddd4e68d0b71ceaa69b3cbab2ab39070fcfdfbd57729a39da40040ba37c1e0d1be8ef22771ccb231a8f24901965191e5eef5226a7c1c08555351e53809ded87e3c74bc02087caf8fd55b7e24f77a7293a075cdf7a968cf6b5dc779c35bae6970b4c3e970de37cd82aeb6a13c33bc8285ffb7b78a712663920c5797357a3ae39290a8c71a08c4fdf331692845e95cefb5388771f59c538d3b25553c41cee29e63375d3970bb54c07b01366fcc7b65b3cb8145e94d1d1ec8f762bb6aab9f14231d28ba275e80f31e61b60440342e49715fc36e4bb581e05c0f9989ee547c287fe9fc82df0a2c33b7dcd6b3403ea9767b374e771df64b382e191a5e2876d4a6d69996f2f7bdfb5ce65af51a4d92792f15284c43233e469ee9d81bc24db6eacfec83dab7cbb5271e80ae3cfe05d8c43fe4f831ac608cfcfe2aa73e10a647c3fa8fbef59097f28b7cee29174944cd752ca7b26770da5da7d04cec5a5ffc34080bfece24e06b41fe0ad02285efbec82ec04edb102aa4bfdc5d23264876cd148f424cca045fee7e5875af8b3e390b0cd3d91bade850891f24cc070c2edc51a5e7c8954a439a610de81cbefc2bc2a27649185f0d904758d7446bb28385cca4ddbbfa070afc41226572c0808f0dc88bc903f2a4a6ad20415c6d0297120bdf1015054cae9f48e2200abc61716295cf913569fb9489afb61d036bf7ab50dae7ba4942af8ead037bd715ca807eb433b267eb864e5ab109ab5cdfd8778bf2623cf7e3a87f71fd06e104fb7d8ca97ee9e4d54f2fb931b58930f3a9266c4cdd3389f6e245ce61a7e73391e446f3b3c53d7732973e495a3745f04582dedf7d95d08d9fc4606c2bffe665c91d27f348a2057dd0478d9a0f286a4c3c25451a4a5c34de6e7bef65585e16d4212bcd95061fc871b007aed4b06b55ea49ffca09138fe2f5bcc82d2e98044578b830fb8839a3169ef343fcccc3c3366e683ca4b7a78e7f940cbf02478485ccd31c15d81b7b9a5ecf8f8590344bfd4fa9cab4e22da686dd03e127b41a9d333e4ea0faebaf79efc9d5991093606f14b1a2ce729d6d361b5f3bf7b22c1a31d233506d92f3f8b78885da2177a203e62aca04d37d83246dc7518efd7d5ef7250503121cb796d2165a4bd83337981b96a45e7f2a597d58c6e1c993a7832cef70c2f52ebc5f662f73e51b4651e886aa972879ceac63dea71df700fd7b72ad46d4563596fed6482a685e2deec20e74b9e4d2b7906f3e818733367fd5c80e58fb2d3a4323fa33c64481e356093a189f163e88341a3778cc6a82d35b038aff70730c8191f3027840018292cdf3fdd59dbcebd4dcb0de496633b0bd093926e8477f1eff092c6dafaeb584b8712c092c74dd1c95400b6ab72824249e3a202dc122c927fd3f419a5b43569689bcd0a5712a337687c927bde76d6754928b0ecc65eccfe8f7dfb384fc73ad1715ffd5f3e58b0689243764e45031bc02d5e4306f0433d873017e3e97cd324c61704d0af0840a5783786d66e7dd32f00752951755310d92d8f1f4150fd56bab34618493a552e015eb623a1a3634a1d15742e4d618ca02909eecc8f23ea28446240fe741958fec28be5a73f3d2861d0c117b419dfdc7fd7daf321e862f1b23b8a33b1066c677d36546cf6af50e8ba9e50b10a4f722a1a73dd9d2b72d2d94dd71a2527521fda9e42de2c2a67e093e52ece5948b4167ba4df59f25de6fdf3d567aa940374161b8b3eeaef7065dd739b97ac8baa206377aff8ce7ff76c578dbbada3d7e63f19229869119a839d2e779ddd8bb5cd3b1df2ec7df4caebaee5a781e079b328760e65b1ad77c52e25fe62a56ee724be45074b966b2309e24b04c32bf3bc6b1ab493b487fee97065c726f8fb2871854dbb15fc3a4b30e3738ecb01a3ca3fcf93ebd50bbbaf6f5ce3ecd7ddb56374bc4f0642c0e6721af921eb5ec8620a8acc6e727e62758f63bb92f0fc616aca62af8931c17301c6234919ba7bcc01f9687c0e1656b8e9f368a9edf49b66df4d0a3783ff094fde7178cae5d9a8973390e141cf074e0257ce1d76cf9da16cc04e9636d7a5c211f8c958a8094859ac93e52846fcf59d903d31aabf888818ce21dd8f66aac740074edd61635d08d556e09b4adcaf8b7d21ecede49fa61776956a1d0f7fc79e5bc6ee67bb14364d4bf466f48731c4206318cb8df3825d98ba91119f2bbd873985c498d0ce1b1c8daff1c416e85d0ec330388f4507fc155d5c50b23b1f6f02ff96a6ffe4eccf3f798e7323ecc35228b2b09a85f8b205174f778dce9bfa7d4237e7ec6beaead780972b83fa197398a38773e0c997170d40abf8a0403a520307d872d82f4f63797501d439913fbe537d9c53c09c2a8e2ce909e3e1ee9417574e7bc1f134eefa958b61bacfa53e0f9b591fe29adf51ff2a15ec4c1365102da07430bb39f483c9f808728bc0976626995166929939f3038d24bca71a8730e47f101a38484ef828b752fe13c7bebc9762ff6d0357aac7dda0757ce20ef2587e988552f96b0031ebbafd84f8d74238c49eb9e8231a8f5b9beffb76e5ed7bdfa04e31481d5fbff69633acb5e9a78de887c110dc5f60612be948e9f685bd3b1f2c99b7b0b7023a95535b163a90f9d8768fd5fcbe36515dbe4cfa7517a81f8ebdd321c3bc37649ba82308dce0d170734ca8cd31aeb6a9b9975c0683147de0a0cccecc1b230b88a72ae89e928cf11f3f0bfe11b92e963dc750e6e7ff3387f02199b664cd7a737f16eab9760ee9ae48ab3a3c1e4a9d2da5a525919a116d3d177e12c35e8c672a114eef28abafdb0b431ffe5c52fc3c04c041079f49e07c9413d7e8a01543d321b10fb031c7133315e0cc6e4f08eea393396c396071453a25247bd41afb72421eb62d49ad7487fe19d0b6554b1574f4f40a424b07ac06bfb1cdfb58ec85001ff49e57a93d6141f01e8c47801718c7ea1702685e68c640f67da1238ee73fc310866374d4ceaa331e57c7a6d992fe58787ffe1e638e6918cd9e8afbed5d0d36f47643a6d4d08c44cda36339fd05676b2f0be55d57d72913408f19ef4252931c0bbbf640fb35e0a57294f9cb09c598e1413a08e8a84fe9b236b150a25b4c48affc56e3ad524f0f5fd56830327c9778a992b211e1240b065b0eaa994d6c34de376ff2f1372198c72797601bbed65d50bbf902cfc0e575f3bd9eb6d2baa14fec8790d50870f0272da8c31fa5d7681d5077a832d87fbe84ced4a07368b80528ddac11ff5544e8223923580a253d964065e1261c4dfc6c873051723eea1e51d463edae2acf557779cfba97f7cde552403eb316240cf8e02ade1e34b8e644243b5fbcbab6455aed0e11c33ed35b18d1db5e78f09687aa5b3341f9869a08bfeb098afa347552794c8bdd721fee64352d07d57fd83e2be112dfd549f7a38c8c4f1cb5039b6fa459d77ecf33f79a6f242327a64918a15b7886bd532db86b77420f9342106c77bcec5db5c538cd9521396a65ed202620958965043c50b9d3c63e85e346be1f1c4cf5f11fae748e871a6062ec845cd0d0ef1c2780f7a1fa542d62fb55130775f431191d07b9a70237c052500056a9fc619e686da38f6c0bf95fe9030abff9f188fad9fda97e5c447ecb0b5f5a8265cc862ce84a2cdd6c49b20c1ce020ae1d24d1c91f48bde8f04f62f7b65d1624b904fff26c8378829450e36ffc2df46534ebe4584e6482f56b7b410293e3ca6ddafb9a550a37c83e2d9fb85e9a3e7a6b6ac9075d3f9f0f18d3dc28cc91ffb7fbc089fed5141baa5108ee5c72d9a0c9f9ea5e094123a52da98f02daa5dd0a7d1dc111cf4979b09841b3d51a6c329fa13f55a3488a9206451284243491cbfd3efb5c28bd4773b0b508150fab12335d6469461db059ce61a1b1d6c4422e42b88ddf7cb06ad237f74231730500de0c7975ec5151d3fe96d92f772e21ac783e1ae8adc5b391fede2997b595b638f8c0aa8c012bec4e8cc02a160067faadbb3293f7d5501dc3337d62c9b7e6e13fee0758f18f427659f3667b82b55dbb4e11cac0d417527b2b1a2eade32402d69c7f400e217b5306e08cd6bbe6ed2f1c7973bb94ff00ea3295cf2e3913baf9206d6807f1be08ba7f1f424e64b9f11b10723263bb5867d7cd2624de88cbee26957a6b0250d2aba454925fb193ca35896c006ad2b4ebd16eb59cf61ed198d72e7649488e89e1eb8704528cd018d31ae7c837f8efb46a9005c6236e14f4895b096da34fc1bd736a0e6a47f53457e9012c5f742a0660f37ea74260bc5793b91f7904bcaee5da95b036a9626b2bc443ab729b9812eea412ca26b8415587fcc8d31c041da22455826f24dcfcaad98e875fa928b7c42c6a455f582710f291cd60f1c8a33a9a5f4c1d64fa3eef7d8f77e2fdd63b7709ea01f647fd4b32625f842264a2ca23330fd66b38375ce82874724fe898289a23b665d7fb600cb987cba3cb257a338e4fa450d0f938512099fb0a28882015a89df7e287b491c31d93197e4f53b222f01e02abb750680ac9b276244b08c146b73ecf4780a52124279b219ea3ddff813a501f4a749a5cd66d9ba60c87139ec547f4685aed732514a6cfb5ba444f4dd7c0fa9798818be1b895533ed7347a363dea8573eee639b311271bd6faba179e1007cb4d5b1acd2b20263ff0caf54e6c23d923041265673c5ce8b7a30c59895c5842b3d81a0b776d1b455bdfd8b5952a719904c48d1b484074736b8cfb2874fd011d399913f98202ba4e8dd57ee1f41a84a9606f4d409f09718dedd4e1a3d893042efc0b2b0e5dbc33c73b46e400425a87c2720d4e0cac4473133de3b5147f21b2cb39dd2d27691265cc06a2922271049566906ee9841ffd5f385532a184d19dbbdb33cb2ab8500d9b46fb8bfa3c941e6372fbbfdc362224b3c7907f3c38362e00ac5d33f7afd887838f2ab317f0b9fc2be348cbc7a2251019625c8a10157d8aa0244f5181d8a0a5494071b4a2060af9533a754cd818b63a18093b3ce5214f6222423d9ca145f80485c58468a0628393d1906a096d480c6c8a0339928a50ce5114d9c0a3482a301583a4296d8c04aa472c2aa2c0a31cc874ec625cda6b19e326b48daead28db07b6c4b53dd6986aa6a696a84e3008b750a01c5e0a05511a37a40533da19cf70d44cc8453198bc4ed3a825b48031b7388b532ca5ac0d43d4f942c32c29208d79d2baf8a75429cd28094a7ad276529ac498c425c9863d27c2a3215e171106267d1ce06c8808db3317af08f0a2f93276a56a9cba5508c25291a67a6daee23835d2b6e8efcd2af8ed92be90404a34fbeb9885c538965cf7a98c437d36a0c666ff53d996439f0c2f1555dbad3f2c09e8ace4a2377327a28ee85311183871d0ace7b4d1dbdfb7e5afad4e21ce972f0aeb1d16375d24e491cc0b4ef581519924734b0aa50b618af373d98217717f1ecde29cb75442b20fd09cd3292782f73e3d46ee788980e6e25974d32bc363c73614140d13b538b5b9906a4e06b1354b166e23196c3b0c4ab22424e1cdc23b2ca8bbf46b4110e3f1011ea6c935a3f84655cb3a162cdb63a8443a07f4906062303e2c564dd15f7c7338ac229bfd7e28e508ee3197abc10b40b36b913f4e99ca16b0ffd7a4984a62cb0463e46fa853fe579b42c0675432bba671343032e58763b88bbeeede5f1692ac57c9b439862e2e26c8a254f0a497d32c0df82930f904d120b8b74668c68d78f76057f582a5f8871cc18f1caf2bf68b9ac8c728104c824c3eb831f13314b9b8b892f244b3e5ee186459496677a2e548a4ea2f3ee364fb418edbcf5e688c136c492b44bc27454ab56be2eb54d0ff254904b4fdf211da0b32ab300d0affb93eff33adea8ffe760c49b2a19085bef643d2c24ab9e7e5ec7a45efe411abdf03becb71a90df07e3de87991401d5926280e8fa04fd28c206f5adb9a459e313ce38eb2f1a3d4a63b2ef3f0d9b9f9cacd37eb16eecd4b2bac20f59fbb967d0045ec6c132937c4182f7e830602adeb463a3470211b39e0a4f2cd4e5cd320aeb397b10968d2dbda7beffaef408c233a29a44b3cc465e7c8253983d2176312f5336e757df2e0bdb02c3b845918605aa3d35e0dea1c5cdcfd5fdb9a72e2e821166cf2b42978b8cb575bc48bbfc47328afee6c23a9e99301fa3b18bb0bdf69deb126a0c6ef7f285ebae4370043aef823be71f121d8ea91faaab18d3f7839f4848c54be1fd1d78acddfd94d073e33638cf842fd94b09ead09fb5ff417ddbe32ad8f82b78ac28de35051a9e07896d214b679ee8a9ff86c31e8a626f3e379a9551456bc3abff9312c7309ece2f95afed524829e78fc02a1393dc86118e1732a139ef9426bbe91104dbe2540a1e84c057ea06f81af62ec25676db4a755dd77e4b71e8f2766b1e32c89a94a1788ed64a505c137d4c8221a74c411387db22978f6a644929765d5704fc1776432b57b79a2b84c019ee5cb934806e6096f0c23eb8258af20ca313d255ceed94c8a41361c6e3b5da9c979fbd3ec1b570e06688b3bfaf1146bfa0129fab1ab726fac985a6395ef73abeb5959ee9f93ddd87f86a364c775434651853ca3432ef5aceb61d131fc8f7c136cc76dcb9b9fceb9b6c4421c1cc6f4b327290540f5d56758aed242ae0f7322a237563fbc64006b295e0ec046e26139fa7f00e29f84189ca2e969adcd2bc5f83dc1be4d0fa244dbf730758b27bba83579253d4d0ecd620c0664c4f26fa21b76a48d0b6ecc991c4b0b5c8c233eff3e4a1fb728b9af76a4a62308dc4cd3c911dc4220eddc8517f323efffc0ba78c20eec87f375af69d96e7d146218e081ec1e14a7d6080838683c551ef1aeeee747a301a8971d64f660cce8b4a7fcbb5e82056f70021b202771abefb414e7d0f28b2d46f88b9f7ec66075692df54fe3ee1a829dff36a4fb92a4d7576c6a4d2e2a6c387107dbe0a7f91695f403fa8999d9faa0d26dbb93ee7b1531ed663f292d874f9ea80c452c9f22e106960a7a83a5128cf712c1ca8c10c00d6fd63cf7b445d429dc4d36e1ab3f5f59680fea539a6a24e5e418ac8798c5d495b655cfb3f45887e880ec64f84c26937268533a41f2f473458e9b8b06fb30a7dd08da6c563485c172d19c7ed1bff44f9aa0e43306ec6751140dc88664352522170381b4d8065d8e49b7aa46d97b34c0153cfb46ac87ab798363d9503952bdc21efbebf5252d01527a23fe05b67c0b3910df4ab51433a768a714d3584b92b9457320ce7ba58277a23466aa25a5fbefe045e3fc451875e996433e27b20ba1a5093aea961785b2f3fed06781288ffe80a36eea86642fcd0ebcddbd2f61b09ee99be4008b4cb2e77862c339224299f150f77d362ef852bb48ad225d64d5cee619b9a8d958507946ca44e09309a1565b5fe99f086e4bf70ce1e02ef888bb9b3c8a94f54810849398594350a8e8ce4376c858b0fcf0191e31d38016df28bb439e73fb159c9df8c6f14e7f72e13ee9da8c8b614042704e9541090613507727e0611fff6b5bba4f662a605332e26f8704fd57d6fd81ed6943f8db3ba5c5cd7ffdadbcdb978276d823dd03a0817a68983f9ac9c373054ea0cdac56e7f7b7597ea63aa22c0ac02699737884fb170bdcfc37d0cfc0861e227b9bcc8fda77e372633ff3f1e7759c82fa27920aec0cf0fda2ac4a6108807afcf93b65fdb539a5419f371de3c33a8f850eaf7ef8f7f82cecf41e9bd26d4f28f1f4b648213f31f94b2a46ff5bc4ede2f110c9f09da4770d34163353a8b99328760c220ed4b559d567085ae4ee1796f15d0f8b175290299a213e17b59264765774bfc26ef73d7849e8f1fea3477a90ebf556c3e01d1d571ff8c8b5c0f8130d784ea2f890840e1cf7bfc537512324b10489ddb1500b7a50b0405b22cebc1472e9b2cf7b55613af68ffd21ba2cae30cf22ac9c7fb6f1f272ff8e811ded0d7a36361c62662fc5de04e72021d5a569e0370b58f84a7ce4a7a4d89986b6a25fa6ddee22faaa31fd94f3018c5a03dec4c5fa0f3510c0d3a40333300333300333008c88f01baaee6ef466bf4c529283397f88f681e3c70f8918c0924c32a594644a4d0618e0ef6f76072412c30f7e0f7ab2b5e45bd2783204053347e6515484b4a4a8a02c0e42b9e3d796d3fda0aa7249231bc2a2297588a21684723ffbd8f79f5cceb14b1adf686b657900e9c1c3d38dcbe572491d72b99c2c93ccb35c2e2ee5df688b5d2edb9975b21a0b7ae34f967b3832431ac21f413022431009847298ceffbf8eba633f0e089592bd64b6dcecb17f0d61a68545ffa052bf44f716d73a29a5d732c45952a6854555c40f6afbe0a78630f939ba97342a8bf44169cbecd7e99dc475d4ce07851419a3e67996ee1662585cca1015b607e5ccf13fd93a4fe7aeb91493385286a8a460129a40440f0a21c69bdad193aaec9f1f913ca8e34eaf84cad89b71b7b45f91e3f1a014d74b9b92fb3ac6fa4b1a590c913ba876cbdc69e69b1ae9b31d549f47cffe67e961f65cd288613149ac43275a64cd8310192174506a7f43bffad92f625ef11f227450d93af1b7c7a6cd97abb8c59694212a8d332d2c7350a739fb3d65e658eb97258d8b72509acb75a19e97be9b275186a4c441a563b7989d22469f6e317298b895c1645a345186a4c0417df367f6fd78186fca1c88bc4139cdb6ce3aec75b12d7d3810718342e91531d5c5d3c9e2f814cd7c49cbac7723d3e206624ae65b5ad64a675a58da8016a5d6de5c545e46899fdb7c7cd061ac91f76383eaf4cdb56b2b134f636b22c7235d836af9c90b513e6b968a86881a54be65c82da4deed93cfc94231f16c592a278f45d2a0ba575b791ea376f4fa64c1c12b6b0d34a85dec38cdf3de422b5b9734cef16fe8ca5a03899c41bd469dab1d66e7fd922b69e4964f49c40c8a13711d47e789def7fec9ca1020a70caab584565a8cb1c4b4714b1b9269710331b5a03c322856676e2df4ed26226350dcc9e1ffb795ebe8de2d362e1796847e04c108111183f2f4d023c68bedb0e5b8a411733204e56018546f4bcc179d64cee72d69cc74568e542126642484322445c1a09ce171dd8b2174963757d298a262d2b24e544ce0c0b88c0a2645c55b322a2c2bf2059552eaa7de45679c5ca60c514429e20595fe0eebd9c57821ce5779293e9a49ca62e372517929269827d205f5d63551aa63ecb0d397c3f91092b2dab85c5e48caca5c2e2c2b2ad83f82609c081792b15fdb50dd3674120f203d2e292a29970bca9094fe1104232204912d34aaa6d54cbdbe9bc9f76043cd1491d3636c138343440bea97b6c32badab33e634240b2a51ea86d039ae214b8b8b4cb0a0121ddd831e1d42c8f021bc82d29627fd264cae9d6e8dbc44acd08d94d1a22a42dc08a55564ef9d5acae78b3a0d912a28e4f4206e6fb5be3e9fd415141365225450a8357c45f63c655a9ebc87c814d4d3e51c6342a6ccadb732ef322ac9021129a8cd46e4cedad1b591213344a2a0dc11eaefe758fa7e4f2847c71081827a2eb5b48c7e9a7d631f874a26a3c230992727dff609ea13422c793a2f1dc627d18f20181b883841215cd8d8f8bd5ceee1ba5c4e4ebe5d2e9f1169827ac490fdd1b4fad9ea52fe04f3984d166182ca7c2799b13a4ee8fd2969c42c0d4496a05afa77fd462fdd3b2224a204e5ebfdbe978da9b1ce55d2d8b2a282711cc2629211c249508daba5cc66e929fa1f94cf2041355ca4efa43d2b3b1d56d23807c3c061e2309a18442129266f349394b5e2224750c775d961bad0722f87c9c3a8b424148818416dc35e999cdc7273949e029122286f7cef792e678c2da42a2dec224450a939b69c3eef632c1d5f91e387a0d6425f8634bd6f6e1fb6771895160c4b8b891013d778021121286e4e94f830b7fd54f1840583e852be458ec73cca97acac8c10c6d5b21c26b13fa3d2d808027bcee543eeb17349634b5b723c1054c3d456a7c37d0e73894a1a5b58be25a352c28261f4f103e5de1de40c79b7c6d4b5a4f1601c2a2b989321289ea22264651c9a43c8a7f62e5b4e5ea30c4951327ca05ad287eb9d664bfa1c2a69c4a4fc4923668e1595c63c1c0fe1018407e3213c3cbf999cb0700fd4b7f7c42c1f756bb49e0f1e2857f6503a293d5aeccfe650998bed9d95b832b9b5d9430ed5ce31f45ece97a32e5334e250c70fa393fdf46933fe197028e7e7967b1f4c8756c24c0b8b1aa2d272c931ffe78638f53a51516168b4a896ce5dba65fa30fd6a665189e8f55a5c8beaceb819b596a1b7f4a5e667693aba03e5ec3cd7bab67ddeebcf3f5919d2c26a452d5fcadae92e6309a12b69c428069da1a25acfb66cc89d991e5ccc31529473d4d9b09fbaf79a3b258d2c2d99b58271df82716bc57105288a176d7bcc7c9df4503b258d6eade8e544f1337f992e933ef5c692c67c43bdb4323dd7eecfb99758d278b2306ead2466bee50c4f3a50cebcde9622428fea1aff088299818972d6d8eda0a4cf35845ad21887074a14af94d62b4bebde6a4b2c2d298f324448668ce61f41303110a21ca1d69ac3d6f6a1b7c60819c2de617e653596479955922c4ea5a4e5513ab34adabaf1d4610edd4ba88f1f3d52391e8dccc7a1a2060e5ea55dcbddf2b5efd57c1d1bb855c6baf852e32ada92c6943804d382f2d2194d9d4ddd4fd8d6416f972911c330d139888d126e6a57f5758d7d6b8affbe9773d110ccb364d6cae21a4bb5c6f4b5c7121b7a27a1837e04c1d02007ea394fa7a307a1e472b3a4718e4c4b6269993196a565d6fa8f2098c5a8c48e1aa1b44e27627ced75c05c70b93813154c0b4b8a4a43e847100c060727e1ee2236aa7352ced55ce79e12afd66dd16173ac93151693653750e9b773715acb78a14b1b28c5f46f7df89417fa01c2e38c3678ec8f20981e35500bf5ae43872f1fb9ff92c6968c0a5b1c08b22f2de42d517248d1631a34388f9e276eaee8214e842e98017aaa72aeb7cad89cd59041afd39c4e3226d366c87d6695c44071226efe942df4969d87813aae9fb166ad78d0723aa7e29880a8667e8b1cee9f4794c7391513b8a1d05aaf151ff5d1c4089d536943a5b578ce53468f8de93ae92f50a71dded529b15e9c58ca3c011b8ae9a35e99f27f913e6569e402c55efec1466c2dee699df2703c46054525b38269821fcccc5b5a0d35fde197320ed3580359773a7b64efa5e6258d3f6407262943302c26c8056a283cfbfd8ebb766897db129516c516383c9b584f7b94b89a9e344c620bd250db5abbf3e43736e62c694c64f08f2098f4c1d0389c9cdb28392245dc4d84ecb13dad9bb83545af7960c232e4f13839e46405c5241965488ab6a03c397aa867beba0b5b6a4cdd3a258d2a2d292618c4478959d8198ad1db4aa735b47c52c39246f42dabc50d4ea5f624a7476ffe78167d49e38a8aca0966f14fd86ac9a8aca4c41f41302a30439d7f275143c7893dda57d2983ea3524666c58091b1887e04c17419ca1d4f2911b664acb195258d2d4356524c9807901e0ad38f20981532546a449e7a16b3e3caaca4f131282a9987c803488f129685c6e582385709cbe5c2f2ec8d31e460011c2b50e8fc5ae73964abdaae95346212510bca53a4028590c3f474dc6be739bda43161a7a05dbbc5cee2f62feee572b938fa1104d3031434761623539692df79a64286b03743df3881a6d466453c7db6f9a8ee9b40e1f6c1dce58b1d871097347e8a0a260e958c905486a7cde4d65ade38356d4608e6610b925a464819b9eae17cfe4a1a535b2d6e434fd372b99e6f4b1a312e65a938cc4cc7b1da701a203ebd271d6decf46cc7d40b0a1c2727177510797f7bbadb1ca256d288696c0f07268e95e917308a8a0ae6c465301801acfaf6868c77d5973297de53c1b4989cacb0b81aaabae961caeeec21afc35235c6cd6936720efd598e7ca04ac6950d196acbd841aea4f1611433989515070b8ec1a30c1e407800518347fb18206c0f87f28f2018171cd58e9ec37af8a5e5cc5749636695b4839812a84e6c5f0ff3e2bea4ada431d3c2c203480f1e974b0bcabbb02c1e27876012ff0882b9c14531aeb47c5fff6b8a144b1a7900e9c1c38dcbe572e101440d1edfd6c90a26c504b3a29271b99996153548a0b611ad95e90e7d21f492c6169487f916934c1cfe2d261919700bcad3cfa8b4fd110473c4c0b00cc960301318016640042c2108010840e05216e6336b0545653fb09aca89083c901dc87480078a4a6b0ee46758c4d8000734d0810c605ae4780e6000377081d732c402164039be0483692c262815a8807bc429020a7c6002129040aaa86426108137da6227272a191140607d66020fb8800324d0006469613191e32bc0003441415101c10272030aa040025ccaafacac0a206091050e700103c8a11247cb050af0c66aeddf2000e21c404ac4304c0604809163a160200042544e84a89c480000281708a3a99c9cac0aecc0648084e5033ac4186979211f10410c26b3fea4615ae4f810346d54c10593b082080acb8ae3b20006348fb252485c30895010a0698511d43046d34800042ba63083d3000f5364c00c140032011f48c00c11b0832920108107a0e18096069881017a90c5021aa0003412200504e8411307c8800140500020046063003e10801402e00700a8220c10ec5821b1810e35466620d2e282a185a66982110160a8a121f945d2851ee4f045d2851ee4689a261811e8456a9a261811e0852e80b18b4abc800d17fc58438d16a4e1038d1e672833ca200305273081a746bc9a784a70116304220801083ee0810ef0e0c0061a0d344d23025d245c58e1169eb0c50c6ae1053fd0a291852c361633689a2618098085179aa60946025ea1870434c2084dd3889c31002310a061052fcc30c62326e0073da40b92e07960a292791ecc608c354c6082e781098b090bcb183260f97fee4f4cd61965b098ac2ccca398b4a40cc94ca00f683464b8118ba6c164e165d0c627e0c8047363650f355882134e0384883185359a06067818922284a6011280a6e1010f9a668e21340d73a301e00709a49046d3fc10408341d3b02b348d4a039a068837cd0c64d1344e58c30fc8689a362cd0342f078c139aa68d359ae6b7d0343bd040d3bc0c34cd0f332ca1144d43830934cd0f27b8e188a6a9810c9a86b5a00ea7074dd3a4d1861965b8e1061a3fcc1843066d1c079c06344140300319c4000640dc68e3056cb8e0c71a6ab4200d1f68f43843995106199e1af16ae23925c01c031fd80cd443a569c218434a3a235832c65034c4209943d3a0e1054d43d286a621c1340d090ca690c6182491681a9238340dc92a4862808625340dc90f9216340d091a2467340d896a1a123348c8681a92319a8684054d43b2021214340dc9094812096a1a126e1a9225c9a621c1a621d1e1091d8240841e3630a20843348d8e420442c71ffad0343af8a0073cd8610300d0a186a6d19186a6d18186a6d171061d65184318747ca1697478a1697474a1697470410b58681a1d57681a1d56a0c248378d0896e102325e0b7a8c21128a0b3422a11840d38810a2694406d1342282689a112d34cd08199a66640c4d331285a61163074d33a284a6194943d3b44148d38ca06144084d330284a619f94123128a0034cd080f46e2689a113844421146d38c40a11109c58ea61949699a3440a11109054933d286a6196143d38c18a169468434cd881746bad0342339689a11d63423ae6946d6d0342338689a9119348d05a6d0342332183143d38c9ca169daf09a66a40c4d33e246d38c6c6164121d6844d374400c4da3812a68600a1d18699a0caca1699a33344d830637344d5386a669c870b8508be38b5494a269ce1ace30865e34cd110901129a260447689a06084dd3343dc8010e6ac00215a0e022c6073aa00133d2f081468f33941965903186093c35e2d5c453820b09c41881084200820f84a181a609a38d365ef002365ce0821f6b344d938116b480053640c1081a0e64c004971b3407014d730ed034c7004d730a7008d03467004d7314d03427014d731cd034a7014d0f304d930106344d060e049ae63ce00467a4698e48d3346238a2479301319a0c341960ede16894a069c25020f880191f20c38c34ce28230d31c420432931541a69f848c3870f1f3e944a430c317c9841c6186998c087f23448d03e1409941862f85017319408c2f840f74044dc5d84982f1731c420010976554d6002f7ee305810060bc2608132635747a0548f951e17317af4e8a12e2410230d1f679c71c619679ca17c28337c9ca112cf508967a8c433125fc0860b7eacf182a609438d305656c258699a304ed38491461a971e3d7af438e38ca609230d1fea92860f7521811869f850665c482046194d13461a3e1409c248c387ba8c3186094ce09e1a354d188a9b260c75d1a6094391400ca54890860f350211344d1869a84bd38401021080a069c248c3872281188ef0210945202211685ce2033e24b188433442118848c41b2801884bf4810f73a8431cd630052d28010a4e78421290500423a0c10c730481074200420fc2d841d3ecf04433025534cd8e4f74a2123b48d1343b5080d0343bdef81d7034cd8e9696e6998c3ca169dad046d38cbcd1346de8a649c3079a46c48d9bf82d3ee3aea64ccda0b679f5dfa94bd416521d65500bbdf6b8524a4eaadc2d298f72b95c2e07319830f36fa8647490413dfbb5fbd243d8fd97cbe50264b1b8a6e678ff645c2ec8103ac6a0de610ed9f9fdbee4ecad73418718d4432f3967887da16488780a3ac2a0d66ac891cbe31a724b354585657d1b97cbe59230c8f22b73b4300beb00833a7ad23efa468d0e6ffb8242f47ddec9c4186b8d5ed0944e633a3ae23cbb8b5e2fd66c25d295df0be9e882e2f4efd95143cee142be5c5a584c4e2e971616939395820e2ea8eeb3160fb7b6fa24653ab6a05a72f3e75cdb4c88a1ebd08272ed765d3b6931b9e761f994169338e6f8373eb32924a58d0ca2230b0ad9d3bf19397bc4ca5e48ca9f9cac92c68805e54f5b9fdfd709295b3c43c715946b8990add4bdcc1dc4400eb6ac9864da4113e8b002f349bc8d52732e2f36b34349173296b90e3b4c8a8990672925bae1cf54322d2c28c5e424f328e847100c1b3aaaa0cef77a88acec165f59071514e3f39adbb30ee7b7c729a8467dd0b994ab7f514b212a27497f04c1a80e2920e48ea1c75eb293ce278f9b8e28306ec92bffa073dd5dd22844e544970e28a0d4c47a14792f6f639e7eda5632a34ef8ab55d4102244458d15951f978b1095131d4f489812ade6c184f2b4f3e93e9adee82b1ded154c423f826058a0c3090aa56b44a6d88f3db9d3d104bcd0400713f022031d4be0e329a583f260f2a4caae3a9480971ce84882f28314cf4bab25d54e48508bec7e9c43c7d6f25e4750e8b8d3f0617743b44e3282c277894b9f1d67a7711114738dbdd75cd9492e5789a010e742cb1e62f9ded7109422c4c83d5c4bb391a60e21287efa929b3337f48d7149a3c949ef4830143ef7586268d3315d8730262c2a08e53071ab0dcf9321280a0cc516afeec4d69b3df710b260e417ea9dba4bfbf9de27eab703961d63c4178a13a7c5addd7297b396349aa033b2172af73d4467292237e6e7bce8a3e83842df7646664f8ddca5eae9e6b239a536b20b85d0619f7839217e4fada411a3d2e2075d30a20bf52eddf2aa72d2b6a795f4ca0a622417ea24635bcad899886e458a30820bd5106b8adca5b7d85b7eb7506953cab48729fb87d4168abd866c93d394acd17649a3904fa985f2c7eb25a4fb9deb9c2d69c4c060c8e5e2545030cead6e493119b22d2926424c182dd4ff6bdade9c5c3be9b89246340be5b92ca1bbb32f255cdcc6882c94eb398777df2ba75e9a30162a0f1ef6fcd352a788ada4d161a17e21772fd11722f35f1f07e6175fa1f81c55b4c99e6d4b07555a922bd44a7950997be78975bfa4311b51ca7110f3b0156a7d17ee71e7eba1b447a505a90061853a0cdbe6cb5ea62c619c53282a99334656a17c5b72be165abcef9fdd30e372b95cfc0b23aa50676dbf5bcef6bf3dce4f31796f5d2e6f20612415ca979d1f4267b9e6cb2d138ca04231d27dee59eb83fb708d9153a897565b2f937d3a8e9f4a1a171c98966752c282391982d2f8ce4406670f22ce37464ca17cdba32372c89d650cf30423a550889f9ced3ed3e49cb592c6385646a5e5e0fbbbccb3604e56504c0e92623925a4cdc9cb7cbad7197f615b86c7b15d4cd7893b49272726ef6046a50c21296d605ccacab471b98c4239948edcd179edb53d6844148a2dc6d23fec6de41a73285473e71ad2d69a711e87a050fefb297f9d87d9cddb27d4c1c356efb3b46cbda7239e6075949d343db1a2cd6d9fdbdaa5e44eb6c5de4827d47a7a5272eb5b7378f8714279e3848e9ec3d8bec776130a97fbd6277111674a8b330a239a50cb1db76f9db3ed76b37b6124136af11b933b4be7fab4a5a4c20826143677ddecb47cfff679e6d910c3c825d4223cdd367da2bf76568a8a09f78f209892114ba8c6909df7cf746b39a3cbe5724918288c5442b5849c5ba6baa4c9fc4bc8704a287e6cef6cbf5f696d7249636279a3a99c9091c8d2628262728226a1506e5affec4ecbdc3a49a8c54767678d78f2b5474279fa83ce3a86b0d30824d4733d2df9fb7a8df82c9655c2c6e582f22d2c733406e71879846a3cca0e6a8eba7dade608f5b0299fe67c4f93dbba5cca30d208959d8f544f2ed7a7193923d47a9c1e5fea4b69cf3b8b507e9c7beb2d113a085b4c524c3018a4c61864b8408d1ea861102a42a5b47071d36ecdd7b0a56f6124118a4f3a86cd1042ef989eae308208f5d0bed367bc48dbb33a16460ea1d6634c1942c42db55b6b8ec5c6e572b960d0a5278c18422da7ad17b1666d5dcd914228ece4f90e51799f4bea524c5a2083114228c6ba8e5f26c68a58a3cb05f18f2018188c0c42217bddcb257d08e97b2708b5bd3ab51f5bf9a0468150efdae96cfc4fddeb1710aa5f42cfedd1d23fa884ce9c9e3e8e9619a51f14da83ec9ff728b33b9ea262d2b2e282cbe5a43e2894ce2bd7116a7fbfec7c60900fca5b63e7debc9c25da9351c964140bcbb7b407c5769f23e7fe3874f428cb9096d5e2c6e5723988c1c66282b22c29ff864a0b427a58cd94728f9f941421a7263a45691de6d237b410dbb3f08f209894913ce060040f0a253c8d90b2e389b2df1d1463f2de86d4b9c7da636ccf52060f206af04838c7bf816926276cc8ca414c336959313939f91db1835a7cfe782a5ae9ea4bc9e051068f3178005183478ac92a29e372b95c58d01246eab0d8aef616f93bf25fa9a4f185609e2c4519a1837acefdae76a79b98677d667900e971b9cc21dd536a84d6f3e4e19494b73d7564f5a7abe7574923cab79860849830f59188bd831139a83cfcde1e5d42f99ca79138a886cb89eb78a17b2f47e0a0daa7e7bab5e65243b8b988059d9137a8d6d0638eb5f72793cbf125e973ac4c665d46dca01e37d57c6c1d6efdfcb54121779c37941e53449d8e0deaf54189bd65faedebd91ad4e759baa935e7e7bfa941213a89d052f46e892d4a8342d61eb9efc4da533dd1a014f539fe290f0d46cee0ad2771a774d745ace9ead6ae64cfe988dc193183b7f36a632ea6ce843c517b991abf958e5b0fb10c0a2de4740e9ee6c8cf723228555de9306cd45e3fde31a8b4cbddc3c4693db41447c4a0b45b1d5bc7896f717918d443eb1531c7babd462d8141316f8a56d3b55e0b21eac817544aeffad15374988ad28f06c28817d4d944991c724dedfda22e287e7787b9749eb5e57349f300d283c7193c80a8c183a5d19d980c616cc60817d4a396d6b283ce9534aeccd1b2c6e59230e8f9230846840b235b50feedadbf759475b7112d287d99dca2e775f7ec9c1cc9827268a196d6d9642bd361c96c18c18242d6efdaba43f40cdb328f5c412d76f297eef2f4aeb9aca09aadfdf6523b1fc46d8c0106790c235550d8980e31a147bdc8cf235450fd68db31c6cec3a5eb30c62095313205b5f62cc2e7ea0e25c41cfa1104e346a4a0524a88ceab57eeafe21a262b6330c28188414638540e235150a92cfb353b89c7d37b258d29260b05d39251615954c10814143264c8d6214bcb6ed9698347193cce0b78b0a1068f3e59413141601879823aebcdaf97b9f63ae52ae37269696b05c509234e506e993db756bbf56fbd09ea1cb67a5cdd637bf4ada411b32d191596c41126284f98e99ad3713b6a792619c7234b50fb5e43981ed33ec9562b69cc2719234ac0a4daab9caecaee279df65ed7b39a2ab7b55a06a329882d2a7098ac700d4692a0de2242a8ffd3bb7f0e4b1a538f1124a8c49672bb83efabb5664173b4e421c3c811544beeb1f55de78e63e88ec1298c1841b1f3fe173e53c79cbd3dcaca1c402e97395a0e62b00b2345506b7bb983def9795e4eeed9c0358c1041bd56b710db7ace1863cd8f303204e5101d22b2c5b35cb637220475d6f57108bdabcb962818ca913f5f0b913a7f4c19186aad779496bec3167ada5f28d656376409f334cf441fed57dcb85c30be506db5b4cd32e542c99197345e2ece9996955ea8d7187262991eb1c734f90d22bc50afdd526fc8b2254a0c91124476a19ab7b70c25f7bd1677ea42b974f2dbf2ba75904b68575432665c2e2b2a19e79e0be5ec17ebe6f4343716176ad1bae7ece38e2346847010b98542ef9e3bc9edf2d410f9410c2ec2a1b650cdb575e830c7bce9f94b1a9f07262cce03488fcbc531b85610a985e275ffa90f35c63a115a81082d543bd4f48a89a5ffe3b798f000d283071b6db0a1060f1e40d4503788cc4221ec4fba1aa5672c11a620ac82882cd44a7cf070ea77e6365f0c2e97cb658e96cb850f62b0e768493488c442b9b76c883564cfd2a62f6954695197cbe502440d1e97cbca42e92888c042ada2325be731636de196b4b2c1c6e5b208c7e5e24410798552f41c3dde668468ed3341c4152a9fbdd527bdd51457a656a87c7416375f273f99362b947e3b2c19ff71898dd02ad4334e5febb81ebbe5aa508a0e4b0ea56b6ce1272d6974272a3e2e97ccb7f8506949f171b964bec504a3d2926272b9b487430f124452a1d02fc4b4d49531a55d258d252c4356306f9c0c61ce03488f8c0bde7a35cae011031e65f068018f3278b84f89c305974be6dfc82c94f76dbc53f971b9bc5349b95cfe332dec72498d8811457021820ab5cddfeeab613eeeb64ea118b6f6dcf33a6f5d6b9634a6fc09462505e3c8ed9d4ac360e66831c9ac95843f8260ce103185720bb5769a2d44e9da59a4148cc9e9bae8295177f71ecce4da7ac7e9498be89d082994265fc63c95995bad6d49238a4ae6a5321dc2230de1c178088a4ae68ccb658e6fc1e5725919f63c707f9e20320ac59e3bd62f695b2cdfbd1f99672843524444a1d6257adaae6df24da74724142a133d659ea3fd18a5b4805c2e4256cbe59279f72308e60522a0509febbadbbdf5d8da943ea178b3a1d3af25f7afcd453ca1b6315ec84c111dfcf79246c49d50f8d98d18375bdbcd5d49634bc803480f37e638692c830827d45b8fb1bec3897d7b899534a293680d914d284dfb34bdb64ebd2dbfa471078f69693b508f6202a42565b5b0a4a89471b95c2e28fd08821922a209d56d5f193aa6b90ed2cfa83c9394210933c1b9bbcab88a4971f37872ba8ad2fbdfa72ba302c73a7918212627278f520e114ca8879c1f7677cd4f73ecf7120a35fed574cecffbf7f6dd69a30cc78c0311b1845ae8f84bdfd03b8fceae4a2884fff988314394f67c49a3904f11f23f9a204209f5d253e6fc132f4ddec386b83109e5ba0cb1a5ebd674fd9634be9171a8ac70101149a0fdb3cdb96f7698632c69c4c39971a8aca433884442e9f994e91e3bcd522e3c19b246c284082438b3932f6265d448399bcf72da7ddefb9c10fbcc1ab20396441f883c42b127dce6dd2e17f17a258d26184c4b66072c79b924472887c735d3490ed31927969538512ad408d5f078d293ecbdd7b42c8bf100d2e372f913b6803ccb22e348418411aae93a8bff5f3f3af42d4564110ae9bb1ef6bfb6551de72e4414a11e3d1fe7da1cfe6176eb723979931f0f87494b7b1da864d8b85c9c1be372296931c92cd4c872f24e050593f80b91442886fbecf8a87972c8b94a6c44a874db98bdf54bef1447b22cc44360b3ae6b262ba6c48af257dad68d9c3bf5f754d2f86d88fb0c4232103184523dac9162bf6444cb99c481e11b881442ad7697a8efaca6a75f2b699c810821d426fab74c0168d739c28e362894bb9a96bac545ea8f25d9a0105bcd69365fe6d065c35c2e1721eb861d6b50f830257ecbf34df91d35b1430d8bdf41c9ddbf761ef3f3871d6950abf730733ace3dd6cded408342f68e3be652974b6db9a4718598bc149532e2586d382a769c41e93abbee133d327798953422fdc10e3328e4c6c90f25e4deea5551c9ac9641bd7dda2e75597a76f29141e1d9b3c9f96b69ae4ccb1894a743cd6eceecda7c312dcfc249d82106cc5e8eda61dcdd5fb6871d6150e9ea16cac5daadb45c038352f45c7eb6e942977c4a1afd0b2af59f6e4bbff1bfc489d2e4b85cd02b76784121cdffb39c3b6b7db9312d2fa4b1e57b5c2e45d8d105858bda2c7fcfa3cf6cb1d8c105850e5abc085dfd91d3678b8ccb852df66c31de48ecd8826a8d3584a82fb9c54efb9246d61898ac8c71b998ace8628716547adff26543ecf442ef92c6441e407af028236360b2324606658d0c0a0a2b7664412de4d4bcda6b67d76433ecc082daf6cfb6e57b23a3f2d60b3baea0badd72e89c3b3a3762258d685986348e81c9ca180500c30e2ba89416179b326beafaafa431d3163baaa05e67d384a81d59e77a258d8aadd84105e5ce77936b2f355cc7a592461694438b1d5350c9ad67eddeefe06b73258d184c8c410b8b0a1a2d2c2a25189395c5d2b5d82105b5db7299b993f05f431403cc0acb3227764441594b5f7bd859bf684b1a332618c406b2030aaa1feb2644bfc9febf4b1ad3e5f2ed5b8a4aca1a73b4985c5a2e970b4b196d8c399e49e663b0c6e5a26070b93ca60c1ea9685c2e9977eb4bde682a27ec7269261883cb25a3f23027eddde572b910c0153b9ea0926a323cdc9af98f20181fec708242889cda63eb2118763441adb6acdbd399bd799dff0882e9c10e26284e69dfc25de9183f724963a6a5adcc90d6c6288347468e77293ece68638e0c101239ec5882725ca8f1bf967a96b1ac1676284131e4c3d8e2dd44ed39ee4882426735bfc67ce1db931c12d4e9d37c3987abb9a53d3b8ea05e4f7632dbd5787e79083b8ca01eb9c7f7103bbcfc9a771441bdd412b729a33b89ec7710419db6d61fbd979f8db933613181c37900e9d162c26212030ce6727197cb9b81418ad83104c50e6b7cda7a7b9b5af344841d4250ed755a7750dd62c1500f35e4d88ef99725268e9539e9830418aaa5c408edd2b62e75421490fc42a937a44bbfdd21628619f7853add12f9235e4c75eb85a80f4c0f15925ea84db6c9d27187abec27f142ad3dcd293175bedc9c9734aecc0b4931796388ca1c8b8d9551e947104c1c24bb508cd5d125e58618af47cccab4c8f10771a271b9b0bc338143a50d16b71e8d95596ca44403892e1472f8b8fdb85d8ccd85fc89c90a4ad3159432d85024c98562985e42fe2fad73085b49ff0882d901092e54b755f4b8d2dbb5adbd5ba8e61cdf3f62bd8c69b3856ac79df737fbe5efa45aa866f48e16db5bce18375aa84728dbbdd7092d5e3f0b852bb9e6e9b19387cf92857acead9d7550fa879c592cd463b767ddaf7fbb2658a8f73cbd8310aff51e627a854a8f334f42971cb5bf2bd4f97dedbc5e75fecaba158a9baef5107b68adbe67855a4cae9d6fca75689d57a1d6b196efef214599d0aa42e5695c4e57c3a50f1d4d85629ddcad2bbfa4ceb144855a0db174903fd67c739d423d8736d331d610c3cf031337cae021031e40d4e0e15286a8a4a8b0e800630a75e7b83b4b89fb0ef3725941692c24a550073321cde5b43e2e97cbc2b14848a1525a8c3522a74d13719534623a7900e9c10353d2b2f24e0e9251a8771e2962f7e945a11a9943e4d8b244ef75310a24a150ded25b5fe9a7bdf7f73cd85003a5cd20cd41020a95ec52767ae269774b4b1a59b64f483ea1dca7ef79d44fc6dfcc999615124f284dfa873fdf63765032e44e386ccad83d253a88332d2b9c509ca99b504a0cf3bdc9a142c6e5e25e0e1596bd0955767f1a6be7cc7b7540a209949efb6bed3b9b114327270b53d25a16bb5c3014249970dc86ce4bed4e6a8907901e3c54dce572b9cc21874a66e572399e99969511509060e2693be2e6ca889cb74bf4a7e6ba18d36786b0a89c344c4a8c73eba0c9ca00d13d905802d7e9d610f3783bd654894d74186bcd5c5b9e258d3c5c0fe1816252c272818307eb213cbea5a8604e4e563bfb2dc5052967204aa0ebcd7ed99f1cd151302d43d648398313cb8a8abe8064126afdf1d592509cfca9377daca143769150a953d9398f59d5e5f2ee722181847a8eef1cd4f230e7ec5849233e42b53ca939c6d496169e57d2c82c2a2b3f12517f04c1b841e288846d316cfa50ae4628c697ec3dfd774628d48c314f44cb0d39a103059245a86ced4e3e6aac2c1bba5c7840a20895107a889c7ba5de663c3061499244a86effdaf9b455975a332252d38f66e24e8d3a357ac246afcfdcf3b71e393c03c92194432839745a73e4ab1d6708b50895b1ec453ffa8f4afacd6802492194fee9754e8e9236e427118184100afbac937a9e2ee3e5dcc9c92a4371102acfcb474f4dd5356c4e2208e5d6c384eca03bcc593b1d08f5e8bdcf6548cf227a402894923bec104bdebfdebdc374b264869441f287c4ceaf87d9ee9f7316123fe0a656b4a957b751624f6e6e614b69dfe2b3f54e1f3207247c509fed7ad0b755a7bdda1e14ef9f658c8e5feaf2d28352a78cd6626c2d726ca13c28b4ee0e66c375a79890040faa7def7e629d323519953462e65851c9b4b080e40e8adff983dae7fa6e5b5dd2a812c73101891d54eb7ceafa1cc68adc6549a3c3a4983836931415944f5923b9ae98b0c43aa8b3addb1c5ad58552764a996f31593a2894eb98aec45c9ff7ab73507afa20f4d25b9b9e334f311162927141cb41b165ff1e2953e7ea9685ac163712a5c9411207a5272d5ec450eb59cfca03488f16966f596a0c81040e787983d26fdeadd92e63c8f9c98c81b0a5ccc1b22a2071035ed2206983c245cc2b25b7077df2b95cd8a05c7f6a4cd19353f6bb2d03c91a54a7b3dd520feb33775383e2e40e3277f9e760af4e8372ecf93becd4b6693ea401091a1ab123a74e8e29edc17330f93ed4eb8b1b5bfa233983422d5da7c4a925b775b9fc088201028919142644ae792673ec6d5706c55611f5f23caf2e7d919041ad5f9d0bbd84d81814ff323e2f3dd7d2eb8348c4a0507268b9d4ff50326ca9a451488a09cb1045d483240c6ad7ead7daea1853c2241a2460504c912e4f87132b733d6a5c2e97cba6fd827adfd0e29512955b42ce0b8aa13e8dde3abb1015bd0bca3d86125ac68817693617d4c184962dece3b691d116947efe6243ec3457b7ba25b3d8f0319068411d969eb9b4fc3edf2fbd5c2e1785e372710c268523310c245950caf947ddd2e4c3c81f091614b7cff43a4fb6fd77245748843c713174fafc04122b28a7c9573fd7c1b6d6c22a70c2d69a7619915041a1ced392df27778cae6150488a490bcbc321049229a8c39dc9feda4bf72fad14d46a55dc7facb9b7de5a5150cf6eb16d6e6c8d9cb51348a0a0963e774dc8dcd65264da32640b244f507df8b5a4bd9cbe84caeab24b2071421ed5b59c67cf3a44d204f5ac8c21b7c4ff94ef99a05a73badeb66b42ae8c97a0b8b1c59d5663ad5763a904b5d2325ffe973e5b7398043ca9999a38571b31672646cb4fbea397e9731f0912142ea7eeca795cb6ce23a867edbe0fbe2e3bdf43620475d26b2745c72bf1f13ff9362e9715942445508f5a6fbfa3ccaa689184086ab9f7bebf31f763a72dc910d4416b53634e1b39c79e1a73201182d29488fab56ceff4714c071dc150cd953577cdbdf6522777b6410730146ac8d5ed7bce7b2df67ea15ce36b27d979ddcdd2f94239b45edbf4fc3f3df3f542fdab2aafc3a96e97192f546a630dbd77d43d559676a1de799adab9948fdfb1d6452eabf7a63cc7f1ac5c271ff6bbf38910e742ed3adba99956a2760eeac085fa56d498ee96a137fb5b287d8ff1eefa3ddad8695ba83ebec829bda5c9df2d083a6aa19ad376e5c6979ea3659396513943072dd4a6776b13222347b8fb3ec3460c10093a66a172912f74ee4ccbb7971ae3083a64a19273a6dbf2b8f3c85c2f978b63b4a023166a7d3ad63ef79c74cd4a072c94a6763039ba27f692bba4d1a57c6249592b6e289eb0243474bc42bd84cdef29a64ffa16eb70856a84d6ebd68accd342ad50f81253868b317d4e7456a8c4e920376d99a87d9d5528f6b90eea7577de37a40a953a9d968bb5dde4d2ca542894702523a2cdd57a1b2a1423c6121fa3be5328b68eab73a4aa072d1f532886c71fbea6ce5e6c079542e9e375de2194cf93f9043a48a11a4b8c9835b2e7361b2b69f4872333a40c5e6e053a46a14efabb6c8e1491a53751a84e7ed9da79630d3b6128d4b67ecb5f4686d0b2040a75b8a5c688cc25f40985d6ea3eea9ace6133f3843aaceeaccba19ef3f89d507f10ada2ba3bcef68f13eab97579923794dec9e126543a873d87de19911b424da8d4d0217e8cd959b7586642255dfbd0264ac7cebd9850dbbb28a5f5baa5e5d2eab8845ac825e5f7dc35428f79fa1104b3031d9650da9aa7ece66fd1aefd94061d95506fb93e67398728a11c1db2654574d627b954051d9350cced9da24c6fe9af4c978b6310933a2481903f6c2bb9f3b011fb4838526cc64527d9537db193ba5e6e3dbe45fd6ca003128a255befe542defaaa1995969421999537d6af6c6650503483e243c7231443eed84179382164541ce8708442ecb8eff38e394b4e57231432c6d279e3e48edfcaf12d435030df4ce0c87cc2933f82605ca083114adda6a38ea1e7c91d6b2d041d8b508d092926761eeb7f87e1504ed0a108449cce36ea566f5c3e9dd812bf6e8ac7b1476ca8c1635122544a0ccfe772e93cb41e43845abd5cbfcff39b7c3d1e228f2b2b62d4840913424ce7d742c8f170ebef5c8650edf0755bafd7e94eee10a3e828846294d858eaa686bced5b031d84508c0e3a9b0b9dc37d758350679773adc4903e52744128c4d2425f0925b42f5903a1fa31e9624a8718f12620d469dac8d16ae65df8f807d5fa1db407a5a6a4f8fca0f4912a6a6f21f678fde983da3f8d3dd7466b31c77f051d7c50e9b1b7764cfbb0f7bb8818ec838e3da876dab69bba751ee7bb5c3068071d7a50b9ce9cf898b55feb93f91493352e97cb25e98f2018113de8c8837aedbdfd3ee8b47d5f8e07b55ed5f9f7abef3e9e3bbc75b4bd66f627d65eb3c367eef175ad9ff5bfaf03d2d4e86822ce5d45eaa919a7c64d4f5bcd78251dd459b71e216abd8bd5a539a865ed8a1e25e7ee44058dcbe572419833e890834aff967cd3f76a67ad8f83dae4e90d9f4beda5acc1412dbbeb964e1e860f293281e372710c1edcd4f1068550d3c6695b5b5f0d5dbe45058ecba5fb4710cc8a0e37288690a77b2f25e6ce5f6b835a3deba5e4f21d3f9dd9d06919b35b0f9e4cbc896857ea85bcea0d61af5f8372ecf451d65e2eb60e7a1d6a50c8bbba71fec3ece4aa230d8aadd488102e66b7e99f0e346c62467910e2e48ec70f2faa6272b4e9ac6769e93883e24f50bedecbd545c6b8b913547bc27f6fc8efd89ba05e628ed956eacd65c704c58e19d285ab9137754b507efea12276b6b547a784b314914b82cae67cd333f4665f48508ffbdc9fd8f2a76e47508dfd195955d3be3623a8c5e965bbf6455009717b746f4e912f22283febd6530ac010946bdb8f3db7fa7421160021a87cf7526abadc899405431d76dec3d3e887b9040ca58ecf36fff17f8e7ea11c6b5bccf3f9f4eaf2853a9bfcb6b15cbd50075dcf73ed0bfd5bce0be510732f5cdf5da8d71273f8e8a1cd5eae0bf569dd792bf7b17cf75ca866ecf558bb19ae3b2ed4db96989c18afb7da6fa136a9a7d6565bb9dc715ba8c76c6dd428dd1d946aa1f2b9f73075b763fc4d0bc5e8f6b9f97b162a5ffbe8a3aba76acb42ed7b75bcbba9e8b163a1fc2145295b725f840d0bd5bca7b95d7736bda35728dda6e7217bcca5e5c8150a35628d6cfdc1f61ab542e96296e9e989b137628572fad87afa564adc46ab504b5dd94ac957625da40aa56c2d5b885d6a8c0f4a854a48dd69d6e445857a5fdd88927af663bba750c7f7571e44fcb875d714aa13a732778f1ef5754ba1d2639e10620e9772eb92423184abcedc5bef38cb1d857a8a3829fe7276a97345a1da71ca3c0d9dc616e58642716e6a7246c7a7395c5028e4d61ebfd5e83c5ab89f50cc10bbb41a2dc71ce37a421d77906b26b6c9313adb09d55e5b9dde2127c67b9613ea3cbec4a9f9b6d4f2ec265aa2a4be5a3e4da896adbffd61dc1eca9709c5eb9c5efcf8a1d5ff9850abd33bb8ebcd49db5f423196aec90ee27aa7df12ca7b971e6ec9d74afc9550cbbdaf47ba907fe75342b9760e377dc82d9e759350ea9b9019ead6d65e124a5bbed5eb16a3a42c12aa75b183b0915b2bbd4142396646f6e46df7787b844a7a9a43af31dfc3db1ca1f464aa2f730c3d6e6b846264ff49cf4247f13446a8445e9a4edb668e195b844a2bf1d5791d3ce84c11ea313d2c7fa5640f9925423d4de6743d2879db42845acdf8a0e5faac84be0ea112baf598de71ec692f43a886cc3073393ecaf742a8c358d9a1b3e9ff9a13422dd4b0a5e3c5bcbde48350ee0c73a1976dbdb42e08b5d637bee3cadcb74b8150f972bd6dfc9e8c9d00a1929d970c8fc3f6efffa0d41d423d6e9b35b1f683d2e4d9fc77e5fab7ba0faa1917336c5f84eecd07b518db4af4daaeb3d47b50bdfdbfd0adc6304feb41f53ada56f6da1e5c280fcadf72bee7287bed13c2833aec5b432731ef6a457750d912fa736797173db68342bf9c33d79cbfd5cf75508b52eae6f0b1d456633aa8d48ba15fb4d863d73c07b50e939d27b27b6496834244db1a69335de7e3a07ef9f993d839eabcc1417daec4da163767bdf60d6ab5a6abca181df77cdda05c6342b8ec67a546db06859cfa20d53e9ec9cb06757a5b5f53d64e07770dca71ad736ba46a506e2543999217f3614d8362e4524a7f6db72d946850eb50f2f5d2b6b52cf30c6abd6c28fdfa3ddc1eaa1954a3f494ac1b6a19d4495d4e45fdb21ba292412d47ee2f25fe2e7750c7a05e43b9c8194b8bdd1d158372ae2d77c7f9712eb5a36150bcd6fe3397c7314d47c1a00efefbea7f6b3fa1a35f500b356a96f6d17375cf0b2ad9f3fafbf6baa0d2a2264ef9db9edae38262da56fb5d5dd692bd2da8f55e4bd7ec19edf7d382f276a7793bbbcb442f0bea6073efedbcdee5f261419d65d458bb4b892dfb2ba8f3166d3fc687d9adb7827245e7d8cabe0aeaa094dccb93e830dba782f2f5cf29365bbaf6fc14d4419f8d779de652634e0a8a2555c47b5a57bebb28286669117ea6373ee4a0a052b3a3cf3ab1f789dc1354a75d6d0ed74b87e99ca0d6adf6f7de714d50cfa5fff61af2f6f431417d3b466eff7c56724b50f80e5ba839d5a1464a50a8ecde6dcb459e9904e59e2fe484747fe9694850aa6965bf73da1194737ec64cac61aa3323a8f40e6bbd891541a1b6de76375674301911547bb49956d293e83d0086a0f035a774e7e8a2330084a0ba39b5b68e27e48883a170f724b732173014a695b2f9d9a4cbcefa857ac7a719dd735f2877b0b13ecad59893f74239b65e4f4375b9299d176ab7d32fcfecc6287d170a31f7da32d6c7a57f4917aaf9a8234cec30763ce542a5c3f6bda286bca8132e146ad6a7f17999bad5b750ddbfffae7c16766a5b28c618f19f7e8dbfdcb550eeb087fa2cafc6949b168af5b2f568bdc5da6dcf4239e5e39988ec70b365a1d8eb232a72846c3d8e8542f95c937b8fbbdf1916aab56ecafc3bbdc6e457a87f67a1f5729d6f22bb42394b8bb2d75a68f16d2b5473c83c1973a66cf1b242ad4b981abbf5dc4ade55a85cd78ea6e38791cb55856a74a4dd6bdb5b7c9a0a755a7b65afd9fee9575428fc84ed9c7c3d8542767ecff2d38cd7a929544276fc9927e7e89b9642bdc7abceee3873459aa4504e95e57ff677b7678e42bd44c896cf43ee69ca148572ea5e1e4428937394190a859d3ed3c1f5cb156582426dba6da9ac355cc6cc4fa8c4e9f8dcbbd7d48fe909c5d0551ddf313ba1f6bcf56ecf763184989c50281fb6742ef32caf939b50f8cb8f51a67ceffca42614d2edb5989b43ecf0c94c285c9667b1c7124b4c4f6242a5b2af7fdfed959d939750eeac1e76e917e7f96709c596d9e9c7efef347e95508e9cad9bb5f5f6799450986d5bba66748fdc4f42e9b3df4dff983b68bd2414b77b4fdfe193e9f847422d5cb434793942c90f09d55e53969bb83d4225a7e7bdd45072dcd23942b954a668b7294b99ae11ca71b2b5e91d73ab1dc708e58dccb9965622fed716a11c6b8931bd7c799a3745a84cef3cb698691b624b846ad79aaaeaca0d358608d5cc16a9fa3a84e2d7fdfac79fed498650cf523e6ca8257f8f85504b53db597ed24a4e08b55e72e698b52d47870d42b5f3fedb13f3447c41a89347fb9d7f87d13b102aa583bbd8794f8b0142fdd9c312be65ecbceb0feab9a7c9ec19b15eef0775f63864be3c2546a90fea5fd739e98ced32e683c2d4a757d1ebb3507d0faa1fafd54c1f5a48991e143b6c61fa4a84be751e143f87ac7f59bb171e1473640bf94288fbe81d546ba93d9fe48710b2835a88b9435d6c25cc93eaa01c0fe3c7773ed77a7450ceb49baf64ec977f0ecae1b2cc94cfddad2607c5bda8f1b46b87da715067ade60b8fe74b0f0eeae971c672257716436f50e8a99dcea5c5ecdda0f65dfb9550d39d83dd0675161f4adf1a6283fa97ce7b9ed6a054b35bd36abc4e6aa406c58b1decd49eebcf4b835af7fc16b385cda8d1a05a23b7955c53eaee1954ebf95667ecf1a734835a945c3bc9effe1f964131c4d6b54f8e79f63019d4495c0951b1a13d6f0ceaf1fbd78bbdd6232606b59ee6daeff388d6c3a03ca5ecc7d2438ea10406d5cfbd961a527ce8bfa072133aaefccf07ad17d469ca7c1725ca93baa04e2e32e3c7c59073b9a0b63575ced76a0b35b705d5ef18639f9062185a50dfb6b5657a16c367c530b2a0d21ba1b785e90757310c2ca83fc80e62f66eaba1621857508cb9f7cc397aa98a8a6158411dd7d49aeed12aa8938f0c3d1e47aa47a9a0dcd97cb6dd1e5af9720a8a31bebf7bcfe1592ca5a058626d659ef5b4eea2a05c2737cf96e8386d5050dcb21d5f0fa6f7183e41b5a489d0b3f4fa74a11314d2a66da5a7879e6bc42628ffb3d8735e262875ded96c5d4bc9ba04f5fc18cbc69ddc69a904c518fbfeb57d1c7b9804e58fbd3af6f934ad8348508c96ae7ddc2971d311d4ba6de8c7d7b15f3d6804c5ed5f2f8774931b2b823abfeb7171854104e5e998d25af94e421bc61054523ee94fe3e265f9c21082422fd359f4a8f1697cc150de50334456449ee701432d3e8c57725cd49cfd2f14bbf7cfeceb7da1d6351db3e3fcf5e6f7429d66dcc7e14a8edee3854a0cd7db9d6fbb50ef6d63dbe8f9fff9a60b952edd2574c9e56a6bb950ecd5b7adc7095159c3855aaffb32e172c9f16ab75068a5f79a36e4db70355b28672e7bd7a5560b95e8ddefa9b1bb931a2d542222cfe510ba4da8cd429dc7fa880d9b27c7260bf55c3a869a149f2fc662a10e22c4acd163985e3358a896f813dd7bd1af66af506b695a791cbec3a4cc15aa5973a79f1923c77eb542b9e4d76f297bc4fe8b150adf798de8369323af55287de821dfb788c99fab423deadb6577d679274f85e2d6c3790e2a3bf70915ea359d6dcf9bf97ca65328f6dfeed93bed756732855ad6774eb9f91cca540ac55a193e6da979a39348a1d2216cf9da632f9beb512855cfd6c6f465dad5a2507e1073cbfd6a8910ea50283c891d6ce82db67b1a148abd949ef1b5a295a73fa1d8dbe6d3ead2be7ce409f55232e4bcbdb70e17ea84eae4bc7f785f4a74c48966cb99c3dd3d68136a15f1b2b4cebf971e6b42317ec7db4f3aebfe39132add3aa747e80ecb664ca8f44e9d5e325f42252e3c9f58f72db72554fa863c754bafedba9550a771f9628fb73d6494502bedcbccf6daa8d72414db86d2c97ce65cba2414b2d61e4b6f4fde1409d5afa93b789ad34f262414aa3b7fc9dd3de7ed110a53df71fe0d1de7e5088558dd39fcde62e6dd08f5edbf3977a9f1628811eabc660de9fa5b2e75116abd1d9163cdc89b8a506cdba7961a33e7424c84ca96f838af4b3dcd2142f17168d749281b3a7608a57972f17d6296679db3c310cab9f4ee0f2d7cd4da3ae8841d8550deaf87fbbcaf9f472784c2b75cdbffeb5d9b8f310a3b06a1b269b7fee5de5bbf1a0a42fdb3e5cd256fcfda5a1408a5ba5232470cf9fac90308d52bf1390db565db46f807d5dc61daa71d4cedbce37e50799e2f5caf9dd24a2dfba01e2abbc3de4bcbc8f1f041713af8945d4ac6ef30d7b0630fca2d7f98cd6c3da25336891d7a50ae53755f7b39cad5aea4f3a00eafe3323ee6731a315ec20e3ce0e16587c81d6fba83fac7d77af1b9f92cbb0b3a7becb0834a274fdb5dd7d30ebb0e4a9f337bdd8c1ab5fbcccac3b1830eaa1d42a8888e117278b8a411d33264459305a11cca0c1f97cb1476cc413d3ae7c678bfb584dc3c80f4b85c58de50512951c20e39a86dee206e07b5d44fde3828645fa9efb4f4c82d3a85835aa7213f96fa18bfe3fa06d596a58732195d4a4eb7a4710e86c9749f0203372846fcdaa1323fcc05913ba8146dab045128120603a140080241944a9a3601e3140040181c229185431241d0b44a6f1400093b528a622a2e30288ac343b1401c0c0503a1188a421884611886612006a2b8d1cd31189c9857dabb8b9b711fe8e3b989a1441c3d63cef2fc918b165108ce0d79a43c15e4980a28000c164d9b332ccc016491adc9940cb8b11ddbc1f88e39cee231bc91c377b28ffc1ec083b81723fe501eca2d9e5897772b2ec8b1dded637e18f0ca6367a8df8fe9961493405aa3875482fcd264422460d4906e906f4d954dfa3145da237f1e0fcaadb9d86d7615cd108f24be837de537e0acb8955bbc5ea7ef661c930376db37fd1cdc8f9b628d4975c31d8d6372b3fbfba45fc18db84c4e79af8e9ce18129b976a26ff95db8ac6866f3173c447ae9a7e044d81aaf1d69411e30fd89317912347a4815346c65e5761c7330dc783ef24ec7addcd9857de8f706de8e1597a4324f939b3cab1bee6c5ccacd8d6b453fe444b463f49104f9e0bd5c5a8b849b8241e81c1dcab00a739b07ffa1d9c213786b322351bd5bfe9cf647a6fd4cd4b2799787eafe8e8e9372b61bfaa81f84bbb85f4ef2ae6edd05712af776a48ff74bb815e790257bed41c17174b2efa1f9a5c9e448653420d520d9a2f221d67ff9135a2389e482fed2646a2caa1bece81f939bb97fe7b4bc1daffe13ed3801efe2a1dcdbf97de937030ff02898a1f3913d4e241b2f38bb803042c6fbcf26a00b2cc981560bed8227951f11da56da50d486cbf8cc5852f988d316944da9302d7ea6c074611777985ad2964d437bfc05e5e02d975980a8884f908cc89b66968b579cad81a96401a97d8cebe17132862da302883e71181fdab537417027e7ae99c9e76847c0acae594767381035e61473c36034752a4a72820bbe738629e11ee33dd4c342657118053b946698b2f52a6d352d3cf9b7f0a0dcdcb97a5560c806c9741dc583726ceeefa69dc32bbc41aeeeaceff8f17030aee4064fabdbbb1757e4f86ef6213f00b7e2ae53deecbb1517c849c974a9c950f4b63213abed90308a86f8f9c4d020305cc3876810bfe49ca54681a372a6232db27226df6ba1d8450a81220e36651f985f225c8a59c1120eeee02df129163c1e9a493051c230d00986d8c2bc39cc7480313661f63630b0a06fa89b4e33a624c5805463d36a06c21fc62e51fb355a48026b1abf145f3a02ec242cb6ccc9a4942d74aac68c72bb28d0e0e8d096a3fa3f47be98163238657b0702536e66bf00a126dfb642454ba1456a0989a72f3ff2f7df6b9bdb140f75e5bcb3788dc596e4ff7c98bca78ae04dccc2cc4c499798c3e89b6e12df4f6077da900f9e8facea9c569af297bd55e5a7c7b0c4d71894cd347cea72416955298548b0f59a9b0c89985668ded32f2ddb668f346ae1e0ffdf0a1deac03aef7dabde45211b897d60c64710524509cdbd52cdc253722084a5a0eb5311911a129cac1e27084a6cbef06b0aabb8d4994713d649d1ea8ea03dc85518be5fe80f7f5bad7250a0ff427a4489970183744a0da1842c794f1db0b8549ec744d7c4618466556cbe2b34ca7b74934d6c1d02a184ddc5f40d835086165ba34ee41796b774bf1acffa94eef66b99a6bba9060cacb1401572b0e2cb0fb1373849eb3a8edca6cbdaef9927620c34cf6b1c0794d2307e73136ea1f9d77682f30643931931cb59e3f6f91deb4bc9003e85f9e2f36714e52da838e53201f96f0f8607a9e8cb2d1dcc71818d276a3d66784389c8a2d8950516402997e5fdb568e88684a3c4ce5c663a2feb908a8ac74e623837fc631047ed40ec13140aeabd7d30f2c320cf7aedc8b129d99890d8375dd331bc23a6568a09903ec96e43d66c857375f98a40ac2b59f6c1ffd7845d521546ad3a881e8b4e691fa1e0200349f02ac25d33bc4b51977882fa07c5d3adf633a331ccb85875b4db01cb0dfd974da764663b3b9dd80d0598737116fb93675348b34e9b1e1135c61537c10d7d9a7e40a8f799b5264754a0f8231d0df13fbb911931077fecb947731b3c93be27febafc379917d188b08bd1d7913105bc6fd9adf2064b0ed74e98eb169b201005a2edf5c5fee2273439356ae2ca6c52443240b9ee284337f424422ef1cac97a06618ddd88b38092b10af088a961af6476256acb479520482c66d8dc8436c74dd05c203b84cc147d479b11ae3fcb89eaf5d2b23c1d177bf23dba54f915e2c858364161301dedab9d030cfe3176e65ee84ed625ac6bdc38f9562fc61f62df20e3f2c38a9b5268ed1267ce1ea79f6b2943d0b686079aeb9797e5a728204a4d947934dd8e6e3d7ee6d086ecb93058e4c940c329b816a184dc638f27bca1d37c3d7617cd51db627a2b3da9dd75b2aeac8d735920449e33f88c247db805a232bf98578c2839a6d9bb18e67ae70cfd7ed59d38b35619b24ee70fd82f7ffc53ef4ab4447c8345928bae0e12754294308cc4531be7a53e4e5358c4c8d3121e266a31c8ae14bafeb2d0c560e5dbbb622e1ec74d774f73c675abdda420133b7be47089463d91afb7b4073c9b44b7413a6dd29f588b2e5c463488d47a5102d3ef27ebb391defc184f19ea02495c2bfc10d4ec19f6dbb2595318976f36ec310ff332a70b757246fc67eac1de06b3d2f0baa75c4217c7cb9e8ca31ac7f5539137a4577a11dfce5bfb11ec62d32652b1441ecc67a5aaad490a560c420bb280d0892da1fe268b119e0d074ab1c447bcf7b5942d791ae31314d31bf01354533a54a2b3f3002a7d691838857444eb1e0da2c28310c46db3c65e2d300ffda107901fce78e66905d8c094f6571b3275e140259ce93449d7c682e26e11c59663110c39552548b7641dc7415ae9492373368448734013ce42d3914e7bf618ab68294c7a3a50bf48b15de2e492442b237358b9c9d06b52b8f0437092e258ac4948409659d5dddceda75e61d61a84a34865b695fd49c60f5b356140de5a33451b873958a63d92763e673309c01b5c3c670e6e2c3957f39da099c6b9a7cb98f0183db856a1646a7f8a7ef7a20708e06b3828bf7f22fe258edcc72daa807c8a290820fa092aabd6e00dfc07e43c961158853b22d5ca3c30abed258e0bada0d0c22177568105b60edf69a3d5b1b2f951e9845546b1a64c0435ce25e0397a808ce7d8e004ac08c59146e051ea0ead5b2bd66abc43c05a56e25bf1ee884c6d22485aab4d53fd3d347a1aa89d50e119dddf1c7733b9cd671dff427b32aec451d37ec3fb74ddc6acc9c13b3db3a1516df8ca599f1670fff70c2cf86887f653817bc46b8f534416517f3a1cd3109756d3910815a5ffaaf39e273edb1c9651e80424df5abb43a8e8d7a305bab39a6a02bab5c29eebd00390587c5933b8296cc97a9d2180a79fdbcbe0183678ebbb3ff3bc26393c1c4832d117e90bd56667d8ce1e6d646452011c9f6053af05a3216760efdd9862eabf34e88b1f96bd4ae364ebf30860c097b1c61fcfd7b15a87c6d14859abe2092f26edf32db43410717e7c192e155c5c9f1fc1e57f8b0fecd34fa9e0e27a7cee518257acdf7d91e0a1555f731b815e25bd51feec975a4ccf48bbb5c4e0a75aa7d9dc7ec0c4eed8b7126b351cceee8b23d8ce43fcfdd5cd1565f4585482f2cdc567f95b2eb251c8358a5214fa1fbe1214907c337c60590d6edccd7851db78a1f9c8703af3f14011ff3d087e04c59867ed93e7e837560120a0dde84cb71629819daf4ff288938aaeb62a608b5bc67bfe7f10d73ae387ba3e8b370a3dfe2172cad9ccd02480a80e4f3f536779e2a44fcf940ff54a5620c95c85b11880065c93d2c81436e418896b79115e63b628e2de39783ea836b4ac88c6f99db78b1583abe228f92b14be3e14d9c18e887907e3c6f4058f64aa7640dc9747167e600c187b0f96650998bf998b1ffc4202c52d90295ebcefdbc0d3b6acab39d41f3db9c716d9e447da7a1edaaebb24404d0ec9e55cb5e17e9f9d0d7a2a1b55b029e005430945332dea915e1ce16a8cbc7c62ea52153f976caea43a7ab98a135bd3f54d20a767eb1444a8ab12ae9fde512b3a187466979b539c01ad733ebe35a71215b58919f7ee1340dee2ba0b77b17e9fd0d1ea5caef0fca24476625c2e12ce87c585f6b314c446e33b4847e9ae368b64ca2ee6425cdfdedd0ec38a0dab4c43c763b563021dbbdf984a78bbcfea13a8315b9159bb8a2619522e3242e06d6b67567d61c29653749a675f9a1cf31397ec9a1e28c40cc7dce1b9ee214e4fff2dc41e212856ded18f6ce1a026d175c04150655d8d570d8f070c0195787f32c81064b11eed03136bdbfed98b910a4d161601ccf872b2b2912c084bca1bb07ab9aca684eca9aa9138bd2ca23f32202d373ce10473b1867829d192dff047e6fb461139807a1d0cb96edc900e2921bd2ffde654d293b42e44306c87f6f3ee5a432475f81f6aa88a9ecfa49ddd6e50f58fec6861573601346292b42422253129db966584611ceefd064727edfa7c921d989fd4b59fa2f737e8af8d05ce6726bc848fb16af87708a46bb7f93a7d64a01e2b2756e1d3cda260f205580c1deea649ad920afbb0deb23915da5edd062ba770c26881bd081a0e0e577d2619cace3df42becb541088dbd9557ece6e0ccd99c87645f44031573d43e054055f062d0513ec98b4360b49c80ee61fcd893184b2a82496ee115c016822a4b5635e592be9ae7692ee3af504867d58d33c7c254ac3af10c9c9be120298fa5f3166a7f2a9b58eaf3197debcb3a1880e6a0e981d0061799b3a87c88ea9985f3fd12ac82f3b0e5ad441467179781627fafa9d8c3fd89f87ca140b9136a322c4589e036f2c32a4826507abb3fd4174e215e4bf1b209f3342581fe40f24b5b92f792ab56265dc1a986a854d13410ee29be991556015ef2689e3db0ecd548b9eaaa4898a158d1d9425b69f1cb1667f7cb0d0632e88d5fdfd2c6e2627738cf48198a8633b66102fbce1e071906629eb31819e830c10ac708ce47ccc09082c770495011a34e556bee75fb9fa0a0fa64c45d27ec0e34954444e517c0a09882c76dfada368afa6c12afaba972e06860fe77ac12e5535800b712d22334b38ea1a9e6a0f58dd35dc6eda6d7512255b44e22f011dc8b23968c3ef9ffc51d2953fda2ae1889bc8040efdde98de920919011362154faf0ce845ec5a70f50ad3609ec808d23addd718c9419ec4b311a58bde018fc0a16e4a4965181cf6c60cecafef5ed2bca55685779f995fecefa1bdb76f9d00c36b193e40e5205c92d294a4eef75eb0204e30a6251dc51b3288d6e0fce3b3e0dc180cb31dc0131e8f327a3a2bd858ae21d98374dc538d548582f39c9cc40e8e567a688a65400ab744b1887cefc0c2605b71bc1a5aba246d9109a0f452af0093303418effd2389140c331e698bd5e4c453a11ad187ce6256996247b26253f16893a603c912164ffc9508c1b5ecc6c41a0b931acc346f5082cf493422d82ee2006c79cae1438034c7b96d3f7780cf320323306af7bbee25e264eb3656c258c152eb301feb5d43eefba493e15f5c0ee31111f1d17054f3477a02fbc4bcc089531b346d2a44b1cd04bea2be9c5d5511b1b4ef63efd121b2863257b5739150523f111b5f32874a7ec732d8475728fabdacb06efc6a500316273242591683283ffb2f9a9dd200e9c39cf9d100d54a98dff162446d0b55c8a85035ffbe516fdeeaf8c46f67b2c3da562dda960cb5a855f2201ee6f93ca11ccfbbe8b5eb0cc0024ab931dd4a458288410914ddc6e51443af08d7885b81360f299511a874d3b2732b2feb5ec1f9938fc7afa299a2fd7059cf9640825bb7128fb902254d013b32d31c95518001f7e3a8b4f40b7920f164fb4593cd66c7bdbeb3d85b77c1e29b192224ac45d18e47d548d325eab6745a8d0c898022d94c108e1598681b6509373c4c44f97149807b4201c19b6958d2881f981a4eadfb344b4e4ce001b1dd4cde6cab367a5f07f6834f28d272efe1f00a00d83b4ea6292b3df2be7dd6cdb9a65006a66920b5663ff7268d223566ae12ba3bc5ce57cce77e1f8e6c25b5ae359cc7715065a54493f03dc1025137789634bbe5a79ce24b100a66f1ab2a1f24eecbecf8c3c990360d4297f5b3b95bd4401f0c3a6981545b900e067df39a50f3c0cec7dd9aef4b1fa5fe4df4f72aeb6a6c8af741aa4dad1db9d901bfd575e828ec1b551929d9af01521c135675543dafde1e991fffc4ec901eba4f2dd961e75afadfa7da18bb7066c3962f42287b6bc3f490390ef98b0a45118bf82f269566417fa20b860a947dbacd56d9b05db25e560efc3ac249267fecab01110e3e5e0eb48253d8b7df51ac4280b00cd9e921bdcfac7182eb45fff93c0330036b40c5e19cefa07bf13ad883cf39d4adc952fef0da6bfd096fb2ab2522c197acd77906d9fa336496a7b7ea928665e03469674eeabb5eb5003709ac4722241fa2522965b6af91df62b42622e095f0ba602f0fbe8fcc6c6a105cd7c97e7877d85c0aec19c42990a15644f8849db1cc77c005a27936f8f09363a28be4086c310a5e72f1e395df47cd567b810642101ff78ebe13a00bcbb36bb2741a18f7500b6b7f8ee8f56576478dfc5313251093517120435c7e455934a7722d3a3c7333bd812983ff47fc923aa92d2036e16cc96394394db6926546ed4c26e7e009471d8e26425f4777370c9086f5a71c89352143ef7da689227a995608b625fde480b3624ea205568fff2cd01a73751796c84d37e6b61e1016b7f7b5686571aea52d468fefd4e27bf680d98403d5f60428e2b445e5d6c9fa54a468ea6be49c703bc499757fd3be381fee7969168cacebc7541fbf64add25aa1a68f99fd0c04aad82a64c2006f35e286d0222403ad27713f99972a9e1c2e9d955ea22ad11b5d6c4d6805053a6972cc92ce29656ad670a01b301df976df1420cdb8745a59550af0fb5fd206514df652e472b405afedc0ac172e386b24618f73723e4bc9d0b74d0b5c1c73b2137fa0fe21063065b92c6a38aa3e5718c48c3cc4691254b888662b62c2dd82c7f0c94acf17882067b83b9eba4671db5c135820370d47241d0a6ffb5b14430c7127885d74bad43820d1ca61919a218931e9756b0497d17bb90aa3405b9310e5f86612bf5b92b3d770002a734ff0fed6ec5119759b1b4ae57211c9b4c216c8837cff826ee88ea5f7c8dc385d06eb475195322fc2e5474f739e90342a46fc540695844549c4d71dcd866169341a297001458d6427b31b7ec91d46f65cff26ba8e92d5f1d73ecc935fa41d083d4b8fc8bf1307df8ea9f460b345ada68ec66eb521c3e868e4289932ad05ece07dcd2b73c98a155360e8054d8030f03a1e36b4ada40a70aea59acca87e54db969ccc630866701d4d5d28c2cb89e4453580f42d261e6a0ab976d344522f587c7075e04901feb08000f80d703f413c810098827dba9e4fe5107231845460761954a90d110eca2200c3120b1cd22f1be04cab545059707a0ae4b795cc6bd168310329150744fad29a0824162d08c7231ef1069c1180d06f645596b592ba4b7e5c9a693ff403a5c27f3077f0d6dac8b4059a9d4d636271c742150c1d834aa108f80bd3b9bd34792121b4125a543f4cb0191b0f8db0e4e3fec2715256430384042cdd91dcbd7b272c29ffb9a40eb14024412fdc6a4984df55bea366a59602971ca592d4ef17f3dde1f932578a69d1132d1d39f3581608658612da9760742c72090d857d22398854fead0a74f3480c0c1c6c0159093f4514b960086979de0ac3fd220a01ce34e09878c62e62baae94bb6c76ff183107630142e85071198e217860e5170256333380ad1f81fae3e6c3f8edea48733ba3c4ec546892ebb30c60fd53584770c3e1420d4509411801c3dec508393326fa044f3005bdb2276cd734cf2372a22076fe81c72fbdab60081a3e71bb1ca82fdec5f74e82be547668aec24ac2db0e09181f29616a1a3f0876d66614ecf1ff54e002b10e4b87cc276f2d27a62e3684e1cac0cb92931a3eab4b54aca593124a0aa6c28bac07c1d35d56940d05d8150a3f1f71d51ad32c4665c9a9ce758f0a9a34b4f173b2a1f8ee75654acc9990001527b5dcc70800a0b19d357df9a55e7eaaa2e6f9bbf0bdf289b36d051c53a9fb41be5d37b99f89324dc487c81d40a1392c4f1b908eadf3a660ac5c4f93a40b2ace149a7f10c133afa67a275a15b8e8de59610586e8763cbd1c402217f1b7cf451551d4b8a62927ab3ff0fce6f5e66346a3d4adb3c2b6bbc5e5fe55c100617e55f785ac95f2478f8c7db08912390416f1d3a7555603527edf8a120243ae0c6a57e1b4519ebbcf5bd118586ee975a92789ab99388d61d229e0d91573dbcce54dfe0fc4fbf33013a585c5c57714609c08fc73bb17f1942fc784f90f31b0a188ae477cf771845ee4a95bce9bd1b30977c39a041c286dc714ded22778eaa119349b8eba738c694766231aa0dbb4608fdeb2228cda4e1ce4991cc220ef8a6ab1290bca291fd1fe0edbf5c05086892dd9a5ee49cc4bb0aa06afbd2709250738e764b88921c1cadfbd05a3aaacc60bbcaa02ec42594805847043e308a96e6d3ce36e7be7f251095a8b9d026b2595bf4cb3878230ecd692d3a603cf298c8a3443151f59d6af586d9fb2da045c2356bbec1e659eff6813eb08add9c11b3ccf77d3a6e23252693b801a437433b568f6d55796c85c58372cd86772758943e77dbc6a0a74e83b00489a510aea559fd03f28f5545457d22e608b60b378d31a97706eedfb2cd569db7d76060b93f32f0a8ab8446405d9c1d4a2c3ffc0ed7409d3393bbc0a353296bb2972232cfd2b1b821676d4e5711ea983305d0102d3f35d01aed152cca7124e805d6b538ba023d2ae7709acbf5046dee06207985deba3a0481348c44bfafd682e73883bde862edd426b3ca8ba1339cba8b7172c221812005210f8ea1348a0827744cf6446ea87bdb0b94abfe22c9d346aee96e4388b0dc14dc5f406dbcf07fb9f9ae937b968549bc03998517230fd4f0f4c7af798e89a3810b57c4fce745a6eccf62a67b680239785c53b565c103903a88d938412b773bf37b6a30734acec79f68b7c07de858f38642ba0e038e25c03ec48146ee47d0fc8c298689fa31065acddc8997f6a95d6fc51f23a639e3848fdc4a38d183534f3e8a1c94bd25796dba97d0fe50fb084a31bf4e6f163e26656a8c12a3a28f4b81975aff19d0c2dfa40b0547862158ed1ab1b5f9e6364e079b19c400d9ae9983c4226d6d7ff822305d9e088b7cfae51f61fa7f3ce56530fcdad0129a5e08efac75fbbdc6af2cb09d1bb8e3bf931fb7a60b0980c96d434c48072ae118abb8fe06978649da269b1a580ee476a634cdde562c931b3a7b5cc1467fd012cd470489f68c393beab889fb82aa88b9ae61bec0953802d2b31c12aceefd97a8ce4d9838e9886e4d14ab76342667ddd67843d6428d217576ea1ac0b0c51e5ec6c77981cf6d94da99fc86f5b8315026aeb820c611e563ca851052fa28ea3d5c4088394ed9831034e4ee81cfe7d296439d0b9816a9411444165dd996e2fe358e547364118d011a632613b16c81adba975e83a64f0f2d178046b12444e0871669a70359140f67c333c32026266137a4f053aee01a24b968da91a54a6aa05cc853339e31b2b3b22ec16ccde07a1a9e455d9544d520856ee1274ecd5cd9c6bc2ff1e230a7c1559ded9e08cedfda0f44e764420493eb24e53999dc1c97ab205688c825ca1aa5452bb755abaa7dbe7af9c23640107b45f4987a62687f7548f826a32514f0c9cf50ef4d4e70597cc209b6e1907c192e16ade864eeb3d48c728c4f61084a364fb8281c8209812b0555099567342073213dc12354272d8f69b8c35ca249cf16722a93b3e0141f72c08168f959ff1df440aee28e3aa8c6910619528ab2bc75eb700240cac2758033971e7f2a19b36a05b9e1945b7b2c710a3dd65ec85c132bf68b38815a29431537822134d52d43ce2173677f7e03db89970d338294aafdc6ca590ef3dfa2b25952af9852744745978da0b8062d1de1c172d4867b7d2c89444ec684ce4b5395ecf7aeb738492fbda595b39b61b90e98e9c93765d9cd9fa02a7a7d30a4754a7da84c31fd46f6a9f57222cdae5d66a71b4dcc6732f26af46026152f1cdcb66115bf148544f332560e2a44ab62cf3eb8810ef221e982f0a8c52bc3c245d0e56210173f3199880dc0f35137fe92b32ef60a27d376454443046214e4e4b4b482e666e3eb663e41ecd733b3c2a123869477183c187d97923322c5d04efc0892363b4873f540b6400c67161ad6e783c58601461beafd84aee6526a4c6fb703c4b69c0e39a998ef37fd8d71ac45c0c8d685fb09ac2c53acb81c56a5ad93ed9c2a5d8a25a6f5d2d43181e57e75359b10bfc8995e954255215dd4269b2489278ab819d26fc09f604f2858291bf9db07d0ff238c8e32f08b00b3858c6401410f05addd692430eb2415e325a78332bee2e655a828f73328289f95141ee1f315ac895d08a9c2a9f9620e0bdec8fd7025acee741256bf28ff1a43bdc77f76248bbbc37a47d14f00e82bcb762abac002472a4f850bd2d1de29d04026a24e955b3c9475b54df72e6e77adc19577fc3bc8031e09dae2efc93d9fe0ee14837ec357f3af30425d7f19185751a653f76c4a5677c1e1a45fa45a781ca818f67e80e39f4edc3e823e09b0042499c97ba2ed1d077b2caf284c9d8002147963a6c628ad754da9d93b233cf1e8a9bf2dfeee8e4a77ebd2d1cb465f135f62e150d58629b2b4a7b7a4c169bf8971991685d4307b6690a7ac14226e06e4ed4021a40d2dc3b4b001f9184882dc221ec85730865fe7c299ddcc941e9f0766fa40fa00d84d421ec71f1448d960b782edbe41bed6de6e6799f061ef5a67b0c6f18217d595015fc5a407d06469c79ce560f9f7708a2c2d1247dbc45a1465b07edd492c4d5073845ca9c57c43d67e290ace615b306bf2af72cbaeb79098bffd6099ecfe1385b2b381c1be025278d89bde237505c0872ac795e8678d312460e06382da0a60ed433714ef896dcc84bf7bdd164c4ebde07609d6b377814efb593309c8b8f42d42b10564a9c1d1f8546b138c31214b219e94ec6b906f6fd4e10404b5604fb1b6823eab342d53746e5a6bdc6322ab49405da036765f08d8d00f302c06901f40e4378f7f647fcce4bd334d6244c885cb8b18a68e0cbdfb2f2aa4de171fa0053cc105fe7dc9b608e9047595b49b8c80cb9783e0da299e90c5c739ab028119d89b033ab2c94a39a82a875eeda5e1d402584598d2aca97ff7f80637712a0c1c0df99ea89878c55929732aa46a0983fcaf07c2600fd73b94fa48fb3be27fb07af3831e8f6f908a219e33550c139f2349acb67d4f02b06f1732f81c44ac2efa4706b787796e5738ca3d443309238281702a3fc958fdec711b054b16e5b90e56a02a9d07d38611d1bd3cb9403db16891315287ac846cb11c0c8bd706677df864ce90097606131c7fc1dde2f45f0bfe1218b41e178e3af02aae0510a0114b305499277e5eeaf79f720a4241d59237c5cf1dc53dd7bda20d92b984a1da85b028d483fa7f2fa0ae556aa283c53596cd104f235e079625cc751a16575505cdc3c540dbaf11360bce61eefa1d5401b8b4084136d6ccfe006cfd69c6e2317747c973e983cfdad186461fe0a61404c39c1c003c903c950697968d1cbe80081c445d7b8ee45eaf5532b1a3da407597221e263077759f2f73d633b618c3c900412c27a29b02cb090e1a09804372d4d6e350e5bcf66650131a9968f38ae7281a32b2e71540646abe77284f2ffcb169b8e1a97ef0513a138b1837df140a3980d4a1ac8ec7aecedada3813ab193277457a92c5e61be3d0bb6788fbe78fb783ef94227c4bf73686971ea1f6a51fec15f0ef18d7a8e9a4126eeea5a247d9874b04a3085ec428b31371e5f99a26231719ffa1a516c230e79ccef9be55e832e41ba4d840386a7f06021bb3a055e8469fb696b3e38f02ed5a50b2685b8a7c890ea2c5d93c9a8e6f7c04350ea802739fb63b6482e79f300f00c65b78147e70dbbf37854bee9fc52d447c5ff84155064a6d1677417992e58f8ecf5339de766f4d3a52d2d47d0aab5b0be1074141052d7ddd6e2b9c5a118aee4757b1acb21bd3c2ca00d691bf813b22b75b3b06cb686005e3ffee5e1341c00bf6fd85290c92711d2bad290880e6c62d0e0635304c71103fbc8fed42aeb42c1dd8f79fbb1fb607c8138a63d1c1c4e2db2d8abee076231dfabdce62ef2c283a3e649543dfe35e772669f1e4c8f84aeea172aad30a77495c1aa8a0d34612dc66263e4da2da3b9054c0e7d3c77fdad5fa0cd21f6832734a0ac21bc0da9ded3cd12a59856076697606ccd340c282b669c7f51574f1cde2bb26466674de91d5b8038d5c8192c1877dec63490d581cada4970c15bcd69ff681e45f915c706f6b684c67684cdd1a37ea9a0d4a89e929fd1b87490daa19a464410e23b58f4e2885eae788a7a4b324ccadbfdcc003edb5c35188852ba288a1611a93a5ec372e97b84eaa2478494fa75280b57a343996b92f45b5dc1dac1bb9ee9427141d5722b46caeab4ab28604caa796543b50c30849a20ce67968df948d878fa92e559ced2bd9ce4fb602a392ca28f8b321b08bfcb3c4c98dde331ab6c0bee3775c57f96ea9b57095c74f3c614f80b8fd2acb0519588da2d62393e3e533d7c94bcc28d7250a9b8a3fe058e12e7400ad679225a8491921e21fdbfd9ad02db639fd319549fee440ce7e0591e4b80eb9df3102d32739aaf448ad03a3f115913cdb6a63020cb302e08d1c053d90d127e6bcf825b769688f267c32a9467644dfad0440b3570e001f7cc7470a25d427cecc6f343d75d2c38d8395c91ee73fe243af823cf9144fb12fdb7f469c0f48955992cd9615cfafb67187515aae6544c4b8da7c6ea856cb6cc2657169cf3057312224a5bc892e439027bb3778b45d05d2581c09c4b043b2b1e2b15d0ecc3486d9c93f3ab4338aacf96bd65cbfcfecfc7312282f4fc1f586b44b7691201bc7d6dc8b47f183d5c022569e7a368d9806c59cf71cdf72ffdc9af925758d542a1a2f68d569660a90063276775b5cc8277d12b70ed59fadff501933a5f701c1f5cde3e721df7eb782be4d86757e93f57fc8a0c9c4619fcffbef78f07ced7edfc7f9737a3cfe37afd7ebf83d3dfe3f7bb829998ab543401e62abceac8009559c93de6f312a9d931a71033f70a83e6f8e4b13f575cb3d5cd0e09abcc3e9a17f0aafce068981b68418d0a82ba46f4f2ecdf1e92a6d0150bd3eb345d25ce8b25c4944128e36eabe0f1f762d2ae273c677125ca9b4c8cea30cfb9a1f47dc0c78f1247d191068a774fc489c679811a274e9dea2f9de05a3f595d3fd97a84a9e37c7a8a14afbfd34eedb365ff6c211806d3e828e1f489e720ac0ada3408605657cdcd54438e6c4de286d177c31db5b3ccf1ee0bb131072bbaee2bbbc10ddede31c6405401db66d3f6984d2944bacc1f47dde9feb5900e01b91dbe723c70c4549fea84183e05a706153f97f2cdae5e4e37d7fa49170886d2cb15cdf2491fb13cf6c7f8edc2b7118f143ccb49cc0be29b845bf462f0c031f8b7c2b9e939f2d823d03b0993ebe75fc3291632ffe77053cf39e25dc32aff847ddeeeb2c6d96cf421079847519ff43730ba9942f8a0636272f49406b52fc35d2a38bc2f4ad092de77bf8ea0a7f2c08ff7bec77f2fd3c0d9f6fef5ffffcea5beddfdb97a372fa36078973133d07ff4b8f5de460fac80fb3354d50447479e2dcf434214f48dc1e983815fe99f0f9f313fe35b7267c91ac4ff8b39e6574df8b750f076d65f0792dcf20b3fbc7f084097fd2bef1431f8b329cf7bf58621e3d3110bc88105e9d6da6825bedf37c60566f155eb6a64f3d6d288f7dd5cfed56896943acc37b4451cce3653a9f00441b35a283d73c3ba6e768ffaf71be33bbbe1df31341f970aca6c55ea23a84ee616857ced977c835582c1f3ba6beb581b23dc71f1feafb3041dd9fd72150077ad13b1abb812c8a5bc5650f39c089fcc9cf20d22fa1e5610fdbfcc26f35f03cba3ede0b9fdda304a646cf876d6533f4d62acfac7fe22ef44f220fcf6d7a6a709267ae6939b5c6fd7a573f39af1f8310defdbd4fe0a8836c0bb0f7e03a246fe0a09f3d11c6d0e8fcd7c419ec3d48cf8f02f45abcb72e8ec28bf1fa470cbbd612e9856587685ec638855727a6847664146f685bb238a489307565898a779aa39f988707f2d58fde6c24733287f1101376baa1e1bbe7b66f7ba240d31ee9d5e5005b38777490feb35ece94f091ff6b5dfeb4f090ff63e9dbbfa7cfb7566e7a0e89fcf1539820cf3d29fac5af72ed5df16b6c9579e233571ff197a0e8275d9e6c6bbadb4f32319b7146beca85b65c2c84d13ce93f7423fe5af1dded74afce98a97c5fce0e973c2ed83a18df25f8f1c49b11e7baffecafdcd933fd8b216eec33e4e2a4a6683dd72159b733818310eea99e2ccc8ed767eeb11d8807d2726a3baff60ab9bad69ad639b9c111fe0881b7ffc8557abc760b67c4878f5d60cfb69fe0c45aa4fcdb35380f8fec7ac21b76facb3f11f0ce18d4e7c423f3a76678bde54b5c77605a18bbdbffebf5a40f1f78b0fd53fe9ce573db55e3f52e1b57f2231d5d96efd243c4b51e9fa687fa9ca6dce9a8d70e2dec8bc328bcbe2faddfe97e6aa91e13f3c027dac86eac7f13c5b243dcc24feef0694cd72f96a68057f56385465b3d112b3fe3e5472eb24ee1cb6fb67421ccfaf6522acec3225ffad6a7323c4881ae81932416cad1bfa6037978bb74e7f5f7e5834e8c08feb60dc16e986e05940b12699c4ff3cb122aa0937f2d6e2957d6853f7e45aeda218b1ef5b472aac555ed7aa4f1550e6d4ab822cb4ff1099f68acfbbb5b42bfed31bccb1db5b47493bafab9e37babbab467404edaa9e8f38912dcdbdfd56f6bfa6dbfc857782fbd1c233224fe0bf1d7485cc73d9f27ac01ae516a7602d335139fdf881c7791ea158a6ba43b078f3ff6eeddbd3e144e423dbfd7cb509c4ada719b3ade13af502889bd7d3ffd4386a71d9f7f1cf67ce29aca5433844f3419f889a3b75d12379c3130aef201fb01b9041b7a6461469f78f746f9758731fde35ef2c8e30831fb25cace5364fbe5a87213d774b9672efb35af5e26220e8377f7347efff4871e1dffe2599abe8fc36128ecadfddd9541773f6ebf3e0afcb4df1b04ecb2860babda1f1fb31f127dba671aca1699b86b7da82b5b6e109043bf7dc6a9bad519db47ca7d1af0445bc46e692ff68a99df25f05016cf29c5708bc13f4ab7acb11c4875d9009f295e72193daf3121aadb8cc54e19b7ae6f9b3d0afe6db81a5ed718d5d981fc051eff9bd7cbb9f2e1da48831cbbd275b7ecb008a9f5dcda7f20f5c0be0d5ebe6d318a7dbf61e10a68f13c56efc775e73d8272dea28aecc203b1abfd706bf1111021eeae9fc1c013e48cd9ab1afbf7ec0d09f4aca9d2fdc3779315140d44d738ec8f2842f1853178db30b2dd1bffb986d1206ed1a7e0c63d99e4afae0df1e67688fea31b7491d2344ff303fa126984601c6fa7a1e66fdaef331d585c669ef0e8ffb55f7ebe7019dcff50c7c48c170d393126e3ca38a76ec0bba1fb42ac4dbbc7018f560ab97190ce787d99faffffca13dfac65e3d8e55b9c3c02ae0c85500c3080b4940ef030c30c33cc30c30c33cc1a91d042db4db21aab9e7d1f458db049b6ac888672cb7e124af5bf5a242750284ae40b1d0c960c55c6142e3fac11761f4506f731527dd841f29434fd7cd8a1068b316dd24a29c47bd84a24468a27e23121d6c30e3da28188c47958e5462f6a8c4f9f22c6c32af5113a465c6df8dc61d9cd38118fb7723976d8245cccdaf2d461c91742a80f21fe367458534590381df2a5fbe7b0aec6b31c1a4dacf8e5b089a50e55fe68c4fa38acb964cb424c3b5738ac6239cd61ea6fd85145d0fe9fd0f5b91b16ad8ffb302c456fde86ada1838a93376cd86f27240d63196a6ed6b0964f5c2cb1c8381935ec71ca923ece20fa4ec3923c3b35dcd3d368a361495231fcea8f67da67d8f35f837829cbb7d16658ad4cebbae6322cda1de31952be91990cfb7f4ed1e0523249790c7bc55477fb6031ac2987543968588a0f0ec3be31d9d05726d3c760d83be94a8318a6f3f117d6e934362ab9224eec85edcba2dee86daac45dd8632ec9fc50b9ec2f5cd863680c19df26ef98b285cda4ca424347a9a6686199885fffc8c25e12666f3fcb1c8d85453f6985ca30a65c972bac31d9a57f83ab182e5658a73b7accfc734952aab0e4c9af71a03bf7152a6c9ec238b0183aae55a6b046c6b4f228764d8e1416d998b91cbd461d8dc2922a7e8a19e63a66281496d9bc96eb3fd26cfa84f534a7794e9e32d4d409fb653a9430157385b409cb54c60d223a18c73361ab3a0fdb48a351bd841d597efac84733b312f6ca1152453273489224ac212f6a8c69c52f244858f249e58c534e550e72846d624acf982346d876254d3efeb14f91222c9363c33385b8dd23119655919f60e631661cc29211d197ff9da9a21096789fa6f611846d734eb7a3bd123b206c9f417294a31bc3f683652d07bb30a1295ce883354ec6fc69c246fcf4609de038d5744f8cf16047561282de89546507abe77e948af6209d3ad8435292ef5a908c8c1cac5d0d42d87f0c97c6c112172f27e4ca006eb04a0593781c3e63daca006cb0070dd7a83ee99c6c650035d83223cb9f535ac3a09501d0609fed8fd418c590462bb358d773e38f200d52b4228b25264d8a262b53a19558ecdf97e738b3028b75eeebc46ffe1a5ee515cbc7fcd52925ee845471c50efe434e3d39947e555ab1956a0891571297a4c28a55526e883c47911f9555ac8fc3f7f99d57a3a8a8628df0a997cfa1e5f849c5fe282f7aeee4a9e20715cb94df64b27cfae0738a1d275373e0a043838f29b6609d536c3c121e754ab1664fd2ef9b0c543aa4d864c3a5e01153adfe51acb136d786eb982bbf2856737092fdc8a3a21f8aed5192fe7b54abba83628f26e1a28fe4f0987f629d8c3cec9ae765d878620d21ef6ae614f2a5a6135b48bab9333c8a7b194eecc0772b5282e70fe94d6c9b1a4dc69e2e1d5b135b7a88727b65a9323a137ba889718256309f1a135b5c95582619ed65f8123b480fb44262e3c9d8123b98cf612bf6e46e4a25f610ec74a64c33d0144aecf0628629f9779e2b93d8d7ea2722e84c4a45126beaf8588c8ce3361a892d87350696aa112f85c4a221e3de63341f9e7cc4e2bf371f1c85659e8e5833d5496cb2117b88e936fcd0fc55326289d371322366dc9d452c3987c76794448e51c49a92c68c17d6404ec45215662de6c93a8e20629fce20f6958e36e7106b90ceb1261a628997750d422cc4aa29c59f982f227c0621b6aea09b92b263df63106b4a936288b779b31a82583f86a9c9186ac59c0bc4529ebb1be354913407882dd9c3ce090f72b6d33f2c9224c48f9fa17231f5c3d6d0b222440cdf89691fd6a8305e162ca50831e5c3deb8e2c74ee599a0e91ed6a4a1d761ab92a34bf5b058476838e7e982a3340f7bc598b7d5e1f3344af1b0a4a41296c1643012d23bace9fbe84f22b5c3fe312236ce2085944f1dd6b04692924b52061e3a6c51f344473a6d183a735863ce1162425289fde5b0d9dca3ce19c983ece3b0e3d488f8a817663d1c9614c3865ac9281bf6376c93365446973b74e56ed8633efe4334a6266fc3f6386e8ae1376cd8f37653c3868896660dcb69cfa4c9384c188d1a96893d49959cbb9c4ec3fac9244fb3524c318d862d440e0e83f9c673f419d6dc3c9ff9247f8cda0c4bca39fbb07133067319168dbb2a61e7112f4c867dd5e3835c37662a8f61f3951c3746d08f4916c39249b26246e10d1b1c864544628dd583183306c31627ef6c9c85374cf9c2da303ab0f31a39bb7801ad8941cd41bab04884701283f4d5830b3b4897e1572c4eb3b2854d926c467d13724a152dac3b61eb5339c7eeb3b064c70c1ce38fab1a2c2c9137e70a13bdc29291c27cc8a0f6196a85bdc2423dfc546113ebd03065ab44a7c226d175a5d7504b9ec20e3f68e6c9603b26a5b0d84a988604ffeba2b06eba9dec94957350d81a48ecf4319d63954fd832462697111e49ed84353676d2eae62437611109995ed2995b3261c76117727c5243c71276b42579af234a58f536a54d49c2b62671b262c2820709ab26cda1438639eb3ec2be92339ac51149b111d69e78b41d264fa45884557c2df686709ad120c296efa67345a7ee6508cb764ea54c5e0a4008c5ce7c5fde0561cd082531334629470784cd62d544c7fcbf1dfbc1a6bd1f5a2931f9371fac71236387df7ab0379aeba93fff73180fb6d3df90e2c155ecec608d9c0e4572bcd25b076b887c9792cec11ef3731d8da6fc1807ab7a4cea6fcc142c37583773524878c3a4da80c67761b6550dd66495525d2e001a2c0e1e8499ddcc4ccf6287c932cc492bee66b2d8f7d2858aa4692da28cc5f228a68f611ec5a4c362ff8c36a31a669c9b57ecb161d1ee63659e5db1daa4bce99bc651b215dbe64e1beb6eb3c38a25525f9c47629fc455acddc891c318edc17454b16c7fca8cc356e83f15ebc38ae82d4f51a3626b14caa146ac8f9e62cf23e6ff306e9e18536c9f1b82444e572b29c5369ee637a331caf049b17f66edf4e53eca8f62f1783e958eac3b2a8a6d734897b753f20cc53eeb95fe3f711201c572db3093a4f6d69f58cc92e4745814ed3cb13cba863519d239e59dd86c1cfd66c67062bdc82d9d944dac2944c6940b29558826564b0eed514c9e616632b1775ac62983889e322616cd61bd6c4263b0f525b6bf4d391121d7744b2cb133c8b1d7f25acd95583fd6c72ff1e031a35062d3b2e829f4df863c891d686f78eed0fb2995c45629c3bb7c13ba9a48ec1769327d4520b1c6b034911679c42a5a39127b71b977c462152b85bc177767237694a73c2ea87f4f90114be77c1b214372cc2c628b3393631d4411fb77c7ae245f2276d4607255aaf5a887882d2ea4dd78113247ee108bf77cc8b71a2ae11143ec37a172920ccdfc1829c43e99e7f3c7dd5ade082196c915a9ff0ed7512383d82af3765a8a39a4ce8820b610661ba7fc87ce1409c4a69f328621b5d35d8a0062d3bd14229e443a52e40f4bdcc72ee9d1c860113f6c91420a36176fb32ad2873de447fad1c35a7888f061cf20c49898c7a63644f6b0876b38b1b639cf41440f5bfe90d011a3a7ad9c3c6c16193e1182e6851c3c6cf62126b9121d367f8765cc7346fcb4a6f1db61491906b3d31b15f1ebb0e44cf9b7ba6762f774582c6afe9857eb73dee7b064f05c4d999863cee5b0e49cb872315efe1413873566371e78f2b2c8c061ed8b1136275e4dbedfb044fd75c5ed9c72bcddb0497623799c35e5731bf6d15cf95282ce69980d5be8ee2e4dbd98145ec39afa2a3c5a8a7925ab61cf9351ee61cc95219c8645cfd63754c6aa6334ac1b19e6cd30b7922b67d83fece746850c36ab19f64e135376a669445a86cd4266ea1adaf89f645825d446895d9fa3cf31ecc0b4c2c325c5b09546ddfa9958666618f6df48d569a37aa504c3929144df4829cce7c9175649e51d53da8d96235ed842be280d7e2d8d8d5dd82a23ab4cdfcf692117d6dc38cde6ed896cc616f60f739b2a25a9de430bcb4a4ec6ac5492c2918545233e334693730a1f16d6b4a8877fe76316bbc2a26ad629e47c4922668535aecd4aa631abb0fe9546467c1c122ea4c29a518a961a6f9d470aa7b06a3e8938251ba258288555741b6d040ba3b0559a8f667f79242784c2360f2be3ec85798ef009ab84e320ab331b3942272c216c49feacf5143f4d581b6c831dd9e018e630615defffdf4fd319e52c6191f4bcdee8338d4609db27955fd9ecd07112b6b0d414e71c54341f095b6eb4380d73342fff087b3598dd90f765db1b61313d4fb34ca739f44558fd7a224d68903e4e8445248654f1a6fef621ec99b126aac186e642d842070b29839c3c6e5810568e075b0e9ec334452e273976b065e43986314f99a7ab0e160df9198248ecb8fb72b0485592106a3764ae08078b7fc6141f5f5f45cb0dd6de68f981e5d8bbbdd8609b6998c1f8f4f9995ad460cf8eb1cdb198163458f61b66d0b0982ca36c16eb465dddb5bcf1eb51b2d83298c54adea339342a168be43e10191f8b531116eba47af86819eac3fc157bce464d8f325eaf799420052bd8c004cc080570c51e26a3d128b62eb2427082138880946f04a80c0a0568c5a28f44253bee8c969702adb402c01f0ac08acd636a07d546d6c1a1ab2067a4a5bd8ed1aa58fbb25472ac686594928a3666b47d49434e0150b1873993605b9e2f01084ac0cf82158080042568416339a001c5de517082f10538c57639f8340e973e342e51c00210380a4e00021888e0d4b1a00515808108ce0580070530c5963c331fa84835fc94628ffc13a2854779278714db4efe8d3c8b49ee1fc5d61d32fe1445b6eb17c5a2d18f73e53c37e38762d99092c6a8786be283620be511a3a2697ff54facbad2d5133a2784ee8955b353c6f2975f6e3ab1c64cc3481592846c38b16a509b182b078d8ad9c41e4db75156e6686249260e36cae467789f4c2c6aa1bec7c25cf0fa60620d35d767222923d5e7123bce1f09c946420ee16389f5433a8afb91f8f8722ab177e45b95ef4d13eba1c4b69e2be5f98ee6143d9358cb3472e7f8f99be891c40e766366884662c71846ac5caf3c6948ace926b62c9c8f58ebe2e4ab3ebf8ed3115bba92fe11f38e6a366295b008a55d32624bdf52f5c725f15ec4bef6e9a27365878822f61472354ab697d34612b1697a47af9558d320623f4df91da35c4af910db64189a6731c4912e46e4520bb1ce7ee8462921b6c81d3f6b2dc688e020b6c92972a58e20b6d9b421c6e602b18788a3a39a3623f300b175ed8f6ec8fd618fe1d33fe6c8d3d8f9613f8d1f83c51ce56eebc312c92a352cc4901cc6877522730c8f5d7135dbc31224d4dfe9c38a9ad2c35ef9d151ccd0c9c3de67d71898844a493a78d8d1af6eca496a1f47e70e7b5edf94feb1c33a9bc752dda68efba9c31e2fbd435cca1df343872de7388f071a773a73d83462ac7cf14a3cfa7258d5c10347e7c7614995710e0b9afb5087c39a1fd96688fe864d3483d09e98ba2777c32abd7963888d92b169c3961a4d4a9772466518366c65a339d2e5e6f07b0d5bccf1cfd27ed9a7b41a36cf1537e687d19bd16958330a3eb9c6e13c0ea361f14ccb0c72b59d2967d8a35e79871c13ea2866d82e5a8e27571fd12865586bf63ef74f863dc61c7724923fca8c615dcb8b1d3547928b18f63dd30fc7f9632261d82283aeb8d132060e30ec20743ef09b3889f40b5b03958890f7c21abcbbe236f20bd085a5c196e5fec59534f90270618f99cccd19e61b857c01b6b0871076b192e42349be005a5823e5b01c97328d245f802cec5911f3c6abbf00585855654a728a1e6205bf00575827eed28654ae6af805b0c2529b664aacf21e865f802a6c29d237ac8ef2f48f2f00158a32993d193fa6b08f78eced2595890f296cf9337c46eb798d8ec20ea77a527c256ff8a0b067feae8961a132794fd89369e3d0d3711c3b27ecdd97b22cfae7fc3761c920e5f8476af96826ecc81a27cdf53315db12d6f030db0693a71ea684651c957ecc3593862561dfb38b60b9baa1588f84fd6acd6f6e368707fd117654bf3991d11b610f19e226e463523d45d8d144c82476d2b91361dbff1c7ce71fc21efa9d71a3619ff542582b04f9943741d891d547f89d9db400618be430c38df11fac97a72aa47db058be0929d94886540ff6cf6a1434ffa43c390fb69c1cb9f772079377b0769abcd14b338c45079ba610310e3c5d6e3958e532894f072d1907abdae3f0d13a8948e6063b521375a8935d791b6c9d93954aa69029da3558c2bc73c7f94d9353001aece320776d8a729d9ec516cbfb3b35548fcb62cdb0721823861c8d582c121f851c530c8b2de2d7cb2faf58cd3a68908f2bb6982bbd471aa760692b964c9252c8e6948994154b489e62214b346a56b1c68c7a2a7374654e55acd1ab1f76aae718672a9634f2c12c87a0620d92d1e78c4f1c87c92956af18e72185986289e3173b3f9ef54f29b63c27396ca2a6e549b1668f86bcabe60dc7516cbe29ae4eb7a3c2288a6d72d2f3498dde510cc526bf2b6172e8783d28d6d0c99f7ba1bef227960c61ca7c2ac3523db155aa8a95631f39647462cf28f5e449b90f93c189752c6568f1638ac93136b1e3983a3dcc6394a19a5872f84f51bb131c799958372de5c6839cf20e139baf6f8eada930d55d62b9c9313f2987a4be2596d820e3d58caae95b25f63c9b90c44c53888d12eb3dccb04eb549ac9d61be18befb185e92587d4e6a65bbcbc68ac49a7398adfc4362f198919db3fe6e7fc4e29ba77fba61adec8825479406939213a0118b56c7f3f4e18165901380115be6e7d4b5f2899d6308b088fd7a2a935f4629fe310450442146b562ea13b1c8fcff79504d1a46c4de2037364b7ed643ac693de6fdf9a8f20cb183b08f0ed9310428c422d1fd191baff5e70d0108b1c76d37aaff9862e60d010661a646db8fb520b6cc7497a2fa402cea38c5c1f48058e6c25e49ee3813ffc3fe40427eed48639cfb6149133d8f31fe8793f761d1908396a77cf29e0f7b66301b9e3f2ed67b581e594e7d8a1eb687f2207c3c0f29e661cd31c6ea150d1e96fb4d93a185eeb0f43fd8f51cfc73cad861cd19894c21a753d37558f36c0e162f88a5bbe9b0874d985e27d918ed39ace14935f546eaf5b01cf6b30c673dd68311390e4b4c6a97923ec3c60b1cd6789d2163dcfb5dcb1bb60e166ad11afee7a81b96afc9ca793d4b636dc3b6931c6ce3f831a7281bb608091fa96e7f2cba866d543a44bdabcf1555c31e17933ec7641ad6dacb10a9735a4849346cd55022ea2409e9738665ca737a49ddc86a863d24eed9ffc489125286d552967da8ea9c8990610961122d43daaece18d6cbbb1072e3679011c31e3e5172eb5b7dc130ece0d21cde368e732218d8fdfbea4ac717960fa7931b2747330e2f2c6145746f725d58e274ffec49ec9c8e0b6b65f4c153760ce9db16168b079fb752ca304d0bab770692a1ccc2122586c8e1f29c380c0b9b6fa57cfe21c7725c614dde791522444a5559618d91967d313255d8c7d34327fd50618b1b7bd28e599f7ca6b06e7e081e9db6dd1d296c212cc79f1a9f0e9d286c1f3ebe43626ae079286cf12bb1e1ff13168f8b8835ed98e73b61bb6a509a3b7e6d6fc2dee82a2783c68f1867c2b2fde3702ec6942abe847df27e25d96e4aaa2b61318bdbe943986d8627618b9f9243ca27739f2361899b1a2f3dbe4a9d1f61ebaf8a21594e113237c212730e873bf9814e5e84e57cadb36c27c2f2e929a6cac69c9c216c92b49168c838045d087b56f4afc9b3f54c107690632cc3ab4f193240d8d32cfa86586321fe832d6a62f4fe85198d0fb6dcabf9427fcbd3832d632fa35f8cb4f260b9641a3a494d801dac1de653a894d4626702e860cf24ff339637e4241320074bd9ad8f6e6d98241300073b8cef50f5dddd7321c00d761c7aa4543e3d2585003658b3f14493bfc9945702d460dd5441ba1f438f530940835537af6f23b5b2d259ecdd29c790f4617d2e65b15f1cabcb185ae50e89c56a933afd6188260781c59633c6d1a6119b1f5fb1a61fcb3132ee4589ae583e8ee3bb105fd1b956ace9cbf2d24ecca139562cc9fb53b0f956b179be680e3d248dd1a9623959db8a8a67bea7620fb941cc112e86af182a56eff0b3fc7494513bc5de9f331b7fcc28a8668acd343f5a0d4f9d31ac14db679414fbee634c468a4dfe27e78ae7664e8d62c90ca265b09199f412c5123ead5c0829c4865787628d31c5ee78fe35bb1a14eb49f8e618961ca4d59fd83e6ecbf1c492dfa83db1e885fc9c117527b68c101ad623497d1f4eec3b26526a19c5d47e139b4acc799ca166dc686275b09d3e3fce8674261689b08cb7393c004cac1df36236e297d864546e62d2d9126b540a8bd8b94146ce952064466231f5a6c43ed19299a3d8b9549ec4361611226794682196c41632e3cab2e8c8c8486c17f4c3671ef9470a24d6cc69443b65c4289547ec611ce9068f3a62493561d452af1ca88d582585a8d09c32623babfa10422b453b17b1a78d3125520c1d1ea28825e898e33595e89c2462cfec9cae3bce42942022919c37252239c41ef7b1223bb42a228658ff3c794e95d3780e1662e946c92e8ac7d42924c4fa531ba3064fd23963107beaf84fd51ff99f2188bdd1a40afe38aedc17881d6e4a1b93916ed00d10ab666892ee927adf7f58e31356d852c6d7294f69b4f0a20a5bf25cdb1c3d849cbc591f5e5061097f1a63d00c692f6fc85e4c614d939eb47e18125e486187fa5035343fe36e14466195508f2c6a32a546dca0b0e614f3a3f9d13c61f5f20b2156195cc8ba3861c9a599e3894724efbe09eb86d255bb9852270907e1051396709b65dd39eb1532115e2c61a95c3195a5cedcdd47094bf45f87df284e72ac8f072f92b07ac44c8d171a24ac697fc2633f4d43338fb0ce7afecd38a38db0d96dc89066d368475a843554f8ea1f0b9ebc4184f08208db4684dee86849e1c510b6cb10231da34d083bf4cfa06224757012ffc18b202c93543777c64c4ae72f80b057c85d4afaf12a5ef983ed534784c690343f523e581da60623b1212c3fdf45d6135ef4609b6a98fb1165ddf1c183e5518e1c216dc310f976b083a831d3b0b8fc19a883eda4337dceb89f61a31cec31578c94e5eb0b1c2ca31ab7d45733cc6dbcb8c19262e514e2ea5a88f5850dd6cf97d3e3ceaebcec5ed460eb1863871edf0796c722bca0c1ba2739d7efe99d5765164b4e9bebe897f6ec62b2582a75a5a69872fe5d1e8b1d9a9a6f87ac4eda0e164b92981dee82a788dd2b96ba4f313cc3fc7f1e5db1878c53d0d425ab39045bb1644c0fb9ab27870d3956ac9f31776fffb68abdbae447bbe433c6ab2af6b0dc0d1b29979ec4a462cb347a51f16a3535828a61aa3d4b1fa99c62eb185fa219628c9fc8145bd40ce9f0ec9298744ab185b82958aff76756a4583d8dae49f476d2248d628d31544767da56ea44b15918bbcf48c9df780fc5b6b9914e257bdc494d50ece8f74422aef769a69f5852faadb0388f5b2b7a62ffdac72047e74e2c12139b7bb651e3937062bf24692277ba420ee326b6bfeff2479d533f559a584330fdedf8e0aaa225137bfde6c6c0c2a44de6985855ff1cf4e44cd51b2fb1550793bf9ca3274f648945ab464c73c37e7c5125360d999f241deecaa7085b5062b9982afda446935852a3cc684a98381195c41a43c5df682b3e316317595db040042f1831f80964c5e049504ac07f5b4462cf9fd472c8360ec71d24d6cba0d29898e6c99f7cc4bae5b16c7c23472c31d36f48926174548f466cb696a253e7c28825c9dfc745ca3955298bd8d24c5d923fddf0b154c466b29e920f534ce648047f0e256e95d605095b20623fb91e4b9f5ed60f3dc492e163903a828546380cb17f84e8f589b89a4c2ec4de6173861b711e2a5508b19f77eca4136998cc1ac4faf876637c8c97216700b4610b41ac27bba671e17bc216815872987039a78d0062c97f9de3ac5a77757f58ba2234de68691fbdf4c352a3fde719e2195a6c0c5bf461b94b911292c14683920fcb680819228896e44e050c5bec612d99fc37692967acd2c31e531574bc53985cfaf0c21679582da5438dba9c7017e161fd9f7860baf995a4738735a590564625c9639cdb61a9b81aeaaa2724a60821be451d1639d12a07f917563b3a2cabbb659f0d72d23c0210602e40000258f02b58018b8005e602d3c21673d871caf0199eee46de3c0998055666e5812de4b05e0a21ea59d8585f35021080000480a0461c7650958357c4779764862de0b07e470d631d6dbe724781b760056f58aaf6fcf3eccf5736dd852ddcb0a35a4d272779c12e6bc38ea2d888c5dd6b0f5bb0618d21e747e383f5479d2b6cb186d571fcdb0d49e2547ca8614d9e8fea56afb69199867dec37798ecb9b792168587384a86b90d16758b241a96766142183530c5b9861dbd8703b6ebcb338c12eb2cc608b32ac9fc96f6f2e2e75df6458355e54cd304d4d7ef018968c3146ad269390ae6615700aaab08518b6ee609129e343e657c2b074b4fbb0b1d178ae100cc3091abfcff2e3c61796d4273168fafc685941094ac020e862252801035e0528384fc2b08517b61c643bb77bb6a33c040f5b7461870ecd424e46f5e58cc185ede31c788c0d39d977b685c52fee52a69ca205beac2c365d943c9a2eb27e05230b3b344de9ca6af4761a58581d9f874cc7b995718f77d8e20a48c43193f8793d2c10c1094440853bd8c20a4b48c5c8e91c75f32847d8a20afb86e4187e0c1959a36b095b506169147b33d4c62978b4a7b0f855903d49a914968cda27612fddc431a3b05daef19c24ddaf570885b57423671cde38c76b3c6199e0f03e6c9a2470000d50e00029e00a3c00010848019b000468842d9cb0e30c5622c73eedde5813564d3bb6294e66e2ff61872d98b087e8f8d0b282f7c775097b8cce3c3a9f13fd9712b6b9999c1e3caf48d888c04f2082246cc1b6d73308359a2bba3a6c81841de31024a551a428898eb09544e75051cd7cee34c28f269f85a4d122ec9f9571f4c79d1cddd71cb620c21219131e55de9d1451e02d58c11096dca83165889b43e6d8b71cb610c2fa41e364ce8f840f571727688126608b206c1b1958ecea741759243028280105c8acb4035b006189181d1cd878fafe0f8232811eb6f8c1fe40630a5e2b99766f010bf8075bf86087612aa474f0e815d32af8e4c1163dd8f622a3c76d3087dbf1c1163cd83a45188950f94ca4d21d6cb1832d726d94b09db31f659c134880052b40c105ba60810838404ad842073be8cb297e790e9d32395844731bc7ce9fc3e4c7c152b2b70e5278dcfd902d6eb046ef85c5d3319118e28003384063b0850d96ea782315c752dc6ed4602d07b183c3ecb6a0c19a317964d5a366b18de5c4c75d4616e41cd28d05cbcba8bc586c293b83c92144473b1a2cf64eb1d438da4f4eb13b80030ee000071c800137cea0c52bb6dd7ebca9a11583a62960052d5cb1a6578afd1c5fe6e969c51e253eb41568c18af572bdbf4af255ac9d77a2ed6ca61cd3a7852af60faaf61323d3e4eefe000eb0c2528316a9d052569a03ade8a85c191afface3ca99c48825800004dc75410b54ec29b91a62fe693f3f2dd0e214dbc694f365631c532c671639e1f35a24959462db5d5f958c52870c255c41095260021198400b522c1166d43a73c5dc35a92d68318a7d7cd21b6ad8d9de5eb410c5921c3ff0fdfb93d488044a50024e8216a1d8445245f283b00ff93540810380000538d002147ba986d883b099d29b4f6c211c842e89501759ff2a600108aa3e0531d040036a05004884169ed82f8c4da3a85f929fd389a5418c95d0103544ed70624fbe0ff2ca87e8e9f19b58caaff74f42633c7b6b6249627ed9bb66620b399b3f31f220d582894da6739577582eb169881b0de6204c4aa92596f837d19b965662959091dbdde153e88e126bcace9d29553f8965cf36eee6bf090eac2eb254c00210b880044a1ea18524ce53659d48ac398c568505894c3324f698614635113a2ccd7fc4ba19c3d1f5cda10f338ed82653e73c3373d3f046ac17f2d5068b1f536a66c45e1b46b2e7e2cc2c8bd8e3c58f689b3b1133a2882de6889ba349fed565246293463132b2f5914d1e2236af34a629c7e461fb21d699f45571b88004032d105a1862bd9fcd2b473985d8ec83c712d5e055d14388ad4a638662f1be52ca0f6289b31942cecfa139dd825836fa394a20b650514b29d536ee0f107bca92903335fec3165ea1a39fa7f861b5989731c6b55f1b651fb6ff07fd0dd2a49f8ff0610b33a122e7790e9632f6b0aededf47d6a787c5618e7d3c6163ac300f3b2831f324391d9d6578d8339f7a8cc821bb29a5c51df6cac92267a07183e38f1dd61fc7a91ad7f805c9a9c312a4e66288fc69917e3abc7e1b2e85b27b0efb68709815b33c765a0e7bee74a87d7a6560e138ac1b225cf6651425620a1cf6d479212685dd8669f28635ff2bc7ffe94f9ad545160850e0fa012ddcb0540ec16354e69dd8386d58eb1fa7c459cd86752369674a8dd61fae6b58e3d7e69da8a8614f91917487afbb385e1ab65ddb541711699b1b1ad6aa950771a2aac519d88666d134f56e86ed4f27d5316cf4a0d232ec212ec3c184d8bf1b322c6b933e73a7b25a91316cdd38ec3469c330298a61df15f9fb4f6ba59b306c1d3c7ae2a6c7170fd3020c5b34f45cba7aabf7db17b6889349d238e685f5fecc5223587ddc4917960a9b312fee4c24f25c58ca2326fdf818474ed716969836aac9348d838fd1c2a627b1ae33ee8dc34b16368f4cb1ee3cb5a33758d8233c8c5b296282ade60a5b54d9898c571656325658a343cd2cf8e84d8aaab07a34899bd36185120b15b6788eecae5189364e99c2de202a64d8b02285b5aef31b484a0e1aaa5158628575d0de8a8b71282c29398ce415bbdc39ff843562a7a0e9f13974a64ee061bc14d1bc2f4dd834058d1dbbc3c4eb99b065fe70558eb6256cea30b61be6f2cf9954c2d230742d3d3293b077fcef5da510491144c23a293136c8ab79639947d8f2c60571287132d96d843564388d52c2a5f0318bb084090e83c9cc8d6c9a087b84cd31261ecccd860c614f1331c362847cf909614f9971364c1096680e7ae3fa7a924a01c262f51865d20d737ce30ff68d9872089d2457fac8077b4f4db01aab0c61f760e98e0c76192a8502cf45095c00621b7d7c394d8a0a17f249e0e20f5b2ac90d9f61da21a748e0c20fdb660cf2546c7473caf76189bc5429cb1cd7a6d20a5cf061b34a612a55a74a97d9c3b6921ea4cf94511efa53e0420f7ba97e845985e4f12ce6012ef2b05ee8a7c58ffa9a0e2d800b3c2c9d36261fc7def48dee228b1462808b3bac21e8a34f33a9c6c0851db69e54298de7ce298cca451d56ed3c6535158259785d64e10ab8a043d140c3a7883be1422b1e7031873d2d7cc6f1f86281036880020700021772d8efd14a88e1e35435ec000e388005ba704014b888c322239e79cd6106b5d90db880c3b6399f6ec5c51b56b9061a73f4de03176e58e3d623f5fc884db3b7618b8f52341c6c92eed9b099a7ae6be49934ee660d7be8b09bd4157d6bb21a56ebd8cad2a8d431735d643d09980543015ca461c9b93e4ab8869a42d0b055575cf490393f77ceb095c5f04173a30c3e6f86c5c3a4a50c3d72cce9326c310e26c463740d2c6458a6914f6964a49b19c3128375069d6a528eaa18f609c1f29d56a8e74818569f8e77722318d6deda8629c25fd84cc5416568ba3bbdb07eae071ffdc60d1c5dd83484869e2677b8b0a714ff838e74b6b0c4982973fdc48388d1c2da691df42fa7f39ccec2d6e154d4438ed4b9b1b066a6cd5f936f679357d8bb434579ce8d3e966f85452d2c4f45348c21e4abb0fcc6dc28c9ffae424f85ad36c5f89d425c887f0a5baa93ccb0723392bb1436f12eb1942f1e853dca47f054573f1a75286ca90e527494c444fa276c62c1529c699cb0e54d93edbe103fc7a609cbe3247d6161e2e46298b0c75879cc2aa98c43cd12961033c4f09fd5c813a3843d65105249c7fd858949c21a1983b2abac9918314858266f3fa8fd085bfad456eaa65e631861bf8e692c2a432fcb8ab0658a4e099a33b52743843dbf22849449ced13384d543477598c783aa42587753ef7a630ea9d141d86b3c772365574818087bf2d0f3f3a9410861ff60872964d4880db769e3831dcf460ff9c81eec3da916a3f2604dd7b963b621eadcc1aa8f2259c7dc541fd1c1dab0a67f5522c2a372f09ad5688a87980b1cec397e0693971ee8de5cdc607fe8a881a4c71ead0b1736d8a24daf24f1f090e7c2450d96fc61dff9a3d957b8704183d57e4c3fef76468ccb2c16bd884d1979288bf54655a364541a825a62b175c6ad56065339c4028b25f883481f0d935fce2b56ffba1c3eeae3a8bd2bd690f9e291057b207d2bb6d194f90c24dde69d15ab76b43cb19a55ec9d436acc706453b455b18706a30dc2856fb06a2ad688d379316182984451b1598f86ddb890460e3dc5a23be2f96853532c5ddf39860c3c4cce29c596d6bce3f5c4b5cb9362938e291bd7c348f447b15de36a9cd116c592b6839e6490278cfe85f2dfd24d61506c21c2f2849b4cf7e04f2c0db7d4baee3668d213cb9879e4b8921e15e90497a1a64b9d1b9cd82ab6ec2287d0f46f62a947f1f7d3690829a789f51c4c87cb14624c32b15eda06fd8912135be7345d2b9f4b2cab9681c6909735bf2516b12879d74174644f2ab18547656075e7693aa1c43e9b413a69be90eb2493d842a6ceab1f2d650612496c1b1fd4277e91d8a352e39d60b6163148ecf8f1ed9d5fd5f78fd82ca7183b25cbd15d11476c670eab3722e6954f23761ce3d704959ada3c23d690622ec750b9f3f0456c5a3f5e27a9e147456cc12b67854f133f4313b1564ac13f6ada26c98a040605254000024050e5cc0088d8e18a7c1e8f1527cd439876a9a1e66418624d56b1c3a48685d823ec8f5df4a7501912628b8f58952f7ab0b37010fb354a7edb1741ac632631eb71d2cc0cc4da38695508de48e2630062b5889b79f2827783c61f36f57f185a5ef9c6e38725a3a5959ea889fe7dd827440f69e17b3ae6f9609636da928fde1e368bfeab0b6bf4a99d1ef6d89d8fe1a32e0ffba44729313d59a5e8f0b06cee5ddd76acc89f3b6c397d33acfe104d7d3b6c27f13257e8ebb00579983f23c6d2d3d0611f8d95b79229034bcf61ffd59010bee1c487e5b066786d2c3f0b6bd1386c79f3a14c2ea72f6970587b34429e98563984d81b564f19735cce30372c5297dbd599799e616dd8ae730a0e3c858f7b181bd63c9a39d846ee54cfd6b0f73ccc1d1bcd97834c0daba3cf3883b00d323f6958937eb818d249ce770a0deb99a6f498ff332c157a3ec9699a0a7f9961db549d4d93510cbbab0cabc390ef32966512499161071636f3fff8356ed418b6e0e03337e8b592aac4b06cca5c31e4f8e5ee84610bcfdfeaeac1b04aa9c38d9f6c2bf9857d53ce18549a8648ee851dfd97c6fad0d120eec232319265c338e942e4c2562271d61392f13cda820a0ca0050364618f8f728c26a9ab73a22eb254800210b0e043300a0206c0c2fe379be9a462654665190c708575ec4f3ec726c9058b2a0506b0c2d225fff0e24e3db4a88b2c7c15a0800519a08001aab084103308bf1cffe4642aec9969dbb943748c926e8029acfa0faa32058ba13fd745160850e0592f30801496499ff73935596576bac822c17f0aa24067d4a5e3182d5d649da005204081971d400310401918000a6bca294b63fe479ba05de06a0565020678c29ed3204885cbb02b74276c91c1ef5d8e870cb5f161581d8db7253361cbe9ec424ebfa1d32a4b58a3cf49067e214a1884142ec4228d4958639487458df20d49411516c9800190b04646bcfba8fa15f239c2161efa8da1069fb01b613547396f68ee38132ec296415c8d17e31361dbef206639e7d810b6e4c92a1a3d5e088ba75e8de9aa1b78984710d6f21c2134f081b084982c58489b1fec19d467e458ba0fd6a8e6335a770fb65849bd3c6494ebeee3c152972ff7e8544e66f90ed6938ff39c147bd5a3836d1aa34819eae5953e075b4e3def8f3138d83af2537dd627cee506ab5ac63ff59b37434236d82bf24f4c7c2e0921c60035d8c7eb828ea5702b7231000dd68c7815fcf281786866b14449fd28c78ddc8639b2d8eae636391ca98c3d164b1c11ef20132de30a2c3af18cee576ca9327eb8620721bbb96215927ddd8a3547d4a99029f920352b364bea30ae5e9978ccabd82fc62ca5fd45891756c516c943eebaadc9f138154bb490d96417a16279fce99fcc410a1fc2268917a758538ecf1de36a6f4e4cb127d1dfe8e0f5211da5d8c1e3d5943a6258ba0a29b68eeb90818f6523cf28d60e21779573e39558146bbc0c1ea5ee557ea8c4bc9c2f77b89c8262c9a529ef69495cf08b7d6293be4ea5a11a2d329e58d31e75e618fc7e62f43ab1c4ad787bf697619e70629f142b3c2ee58919d4084040245e6c62d9959fbd8912e622a989d5524ad5c0f4e2c7d05826f6ea9c72ae8f61626d10373f5d34fb08e525b694b7af1f46880921b1c476599295838548f45889f5eac4a2034b9132e68f124bdda58d4157a3f393d871c510ee262a892d27c6f21c1a188925d4750e9286c41abc2673c7f558c48c472cd3315c8a8d0d476c9e73678a69f415add188edc16cd209eb28583c19b14ca4ead4b8fdeffa16b1c5f4932f3c0e7d5a9f22d61076f6a842e3e4974bc40e62c7bb91e9983939a90214a09de00522f6b46536e3683acfba43ac6a5f29e171ca21366a88a5435855865f883556c608c1868cf81ca3b241ac326173ff2b36a8648258ba372ab363d4fa8c40f02210db5c5e12ddd5f4e901c4b639e6b19441ce29e4ffb0fec34e0f07391df57e58f52eafc3205596f6eac31e7374cced0f3616e7c3729342463add349db2872d8486c93736f4b087501263ce481a32aa3caceab87332699c3ea3101ed610837496a6a6e0e1c51df6b23457dd4177b633ca235ed8810b69fd7f51873d33eee497efec220b63508214a480017a5e78418735f3e3fd911c7344c3ebf0620e4bf9484c47aa38b19e112fe450fab447911b730ada094050306d0d2fe2b0a6af7914bad2d33e100e5bc4cb299a94d7a4bae0225ebc61bd95508e6274c3922a4a8e2551ed4f524ec0282881bf00052a308978d1863d03b1b89dca3a058d8e5a2f410b50d045061080002b071c80be04296881060e70010a1ce002f1820d6b44640a6a7da5c0042ae8620d7bc6b8620c6912267e6b011b225ea86153cbd34f132639dc032fd2b025cf1d358ee6b5e451175983bc40c35e168265d4c8358d6e9c61cf4eb78df1f78d6dc60c6be75c6e14227f1035cd055786356568ca28a191ee6418e20519d6c8cf110d427c74901ac3d29dd3ec644ca2539a189c7f318ce0451896ea1033d81b918fede3f0020ccb4447e1325394fe0b962fbcf8c2e69964b7e74272c362010a4ab0825288175e58564a926f8458a37ac941bce8c21a96466d3d6288205e7061d13cd1fb5166c59831ac0b2fb6b0f84f0ed5613dc12e686778a185cde18ef9ff452c09a71f5e6461efe0b1166ad5c4778dc20b2c6c8d26c51cffade69d5e5c61471d534da7e5bef47117599b017b1188e8a8942964828161612141212171280c0005bc351f1317080000241e0d2639108439a8dd011480014620183016160e141010120c0e0a0e0a0e0a060606000a06060600022800281810183019ec0eca91ba0f715b2a99e2f9f105b9e2b4e339e9b237036876119f76aaae43600aaf6e1bd4370c3b1ffacbeb2188104f347576402495fcf3d46693e99cbad1261a0fd3b4728849ed8d15f15e34a9ed510b723e448a9c623f907a40458bdb86ce7be57cfd3a64b0229ec3b0e422e62cf192f669d7baf1e70e24556dc7693764311a1563d42993d06c44dacd4efd707a8207184d0e4d593f1bdd7fc52171d80118f6a0cc26727a0922d89945ebcd0b8fb368c61ddd4479b6a1b4d8e06beb18299f5f7579ff3f62dcd669c20745f231ce760da3f256b6b0dca4e9e11d152f82640a2a5177282800b85f97b478414b0c34ad26cbb4d8ad85cc513273f1b561667f0c0d5c34fc5f7d8fe8beb1c9db89f6c8192217287d1d85da8764b4115f9484427afa4e1cdf5bd3c66046dc2a8819de253d69ab5a3a3e691ddae037928163457b79016bd6941d0f62f00be5d562a2377f0b5257b9791bf4a88eae9a13f30cec1eebe9570dcaab26f35dd65ef116fa1302545a6732a5ab7790de34c720827e940edd9372f24335ec9ec9dc40b1c7c6e418f78eeb626266ce2775b906b6b2ba7800e585e42ca681e5541b0506d24060d1cfad681b4504cc41645dc0fc35b82f2765caed7d42055a70c876eab2ec6f0947f72ce61a47a983adac24b589fb55c1fcd4ccf0a73c231ec01251715dda5df8c428179df35c77d5941d6f7e629c8a006a53dbae99565a93a77b00474a9cdcc9e6fa97b4886616161a4a3cac68c272e96226d45c3b695c1c22aa506a5064a0bc31a8905a15d8df7ef15a649d9316664ed13286118a4146283fa92becfdf9a7805549ea87abf6b64cbf8efa3190eab314ef33f5374629c57e2975b6df8a03a676fd16ea296b2d2c80c60b77d1566145404bdd6eb57a44d37c4b02110827ad3909d9571b3b00a020448a43a624d735ecaf39f8c624a0a5e0e5e2cd2606ffa67a2e395c0e167d29c9aa03d7e377447639d098140c79563016602fd87b72ad384eaf5bb964035ce50fbac8492530f8edb62c82a6262e8ab1c68261a8a631f4138c93f3b9d5d1c14d21a6d097885cf81310a70dba042914887bc111b626fa046ecaefeecef5fce1eb776168fdb361029a5e626003d600e2f53a0334b1c9138ba54459c88e7f8ab3ba7701834bba8ea264805cd2911b106c0891618f08c0206164c59d43f4118accee20ee95a9986bdaddb9dc320ae3bf6450e67bff459a40f2c31f074cd446bf1f77780f5830f27572ad3b79bbf6cc0c372fbee458c3db3a013ff8f23808085feef01f111702df312f886179650a76a507edeac1068168aa45c2777fbbedce4f9797f8c7a8be0e0333b1d056303d8f2b7af0a8f613dc61a1901eb837151a94b9159a2b5ba81f9630918e238b2b6786f8b5e953cd130a91534bc1c58477048e2e7422f0b2276f895e73d4f695b9f3d7141c582e7a8fd7765c4db338f70f3c554201ef12538aae84f2ac710c709a20b9562909fb66ae291beda8197accac4cabd25360479e632653ff24384eb9d7159ce1eb1684407760dd8804136987c33798adba9302efc528004a29df8c43b4718b1f6fce930639b5309d7bc132886da07af5714801414773e8af4447729377a090e9b328cb77877b9e3c7ae459b78d8d6e8a8edf9f194730237d7bf42cf433edaf79cc8cc02ac185e163d7bde4ae47c4b3832accfa60b3691a8dfa65ac7edb67c89beb1fede7b1f35bfe28fcddc09ec12661e4af2365174ff7e881da5083bc31e1cfdd354a74178d23194c63f41bea147578dac288938a12b13d7b6669bb39d904711d50a7e583c24c889d698c03344103ac6b03454970c6e787b3ec329e9e59033533146f557a2ae41f04e07d662ca58a2171a54c8de7f1e6fdfddef268f5dc9b3c46d32d48893a990990a4498c78d66ebaab4732ab0625e62d46c69fc7697bfaa12580904699a8b4b5e2eb907ccbdf402de36b5ac3da30879750f116d6aac40bbd63cb409a4312d607ca69460507c37de0de18602fc865da8f5d100b25afe11aff525ad70742c8917ad08b121db432327d235c885fab7f4c6728b213aacbdf3793a38f145bdc48cabb7b8b7d0d1a1fdb2e70862796edd5c77fa548286194a2da409dc4f6f92a9aa765af2816d3b34502b2915575e0a35409d20921ba511488059f135a3ed77a34dfd4a8f6284821fd10ece375f4c9d5e71c84545aee1d0d071eed08fe67d2d11bc1c89390568b745ab2903fd16baf0a0a34e5d8bf541839e604c3c4e6f086275e82059da3137f5e6432d0657df45d08022ec8b04613804bc65a4b137c06448f028c8c50a244a3421ae5f5489c815a5356aac91793be985856927aa7c267c358f1bbf4bbb1b310b656acc203ed94607e9511c5003805dbf69a4e9de41f085a6e1e71314461256612b9ba83c2310a2aabc8410424a402954d4df876ccf89d514f2f8b9625082b782d4b86f7bf87b1f1c4df04d3f1923ee3371979af6df9368183a2601a56c542b86994c324b9b0c9ec6adddc003a1aff2646a5e852101a7b64016804d083a3c655ee7522221e8b951a80510ccb9b012ecce3c3c7c2bbc4e348286978f8f78be161a5ecc6d110aaa5d8142093216c7f041ffcf96f069faafe2721af401903465f31181f6d5cf60d022af3a3fb410a95e288213b12dbb698c0b4356a3c6050ddbb2d7580b2e0753207346420f3ee63021a98e12c706b9de0e9bb2506091a020dc20439258ef58a56f3bce593eba7dd1281688410693a52018d14a7a09968c980d6ce13f8baf065934abaf0c7dc9baf38538a8c9700facc27782d37f5552d87fbe0d680d098c9c045796efb61f1d31b780fc166d0d891e9d94ad1a4f05ba364448d9b0d50713d21a043a10c4b752c81d93c75d605ce612b2c1d98022894302e10fad7a425373fe29514754dd15e34863107199ed0ee460249a83d1f65f95a0a895016a859a8ba280ae8e22f71f24ffc4e74a20c4f200ad958b89107351ea10a51f0f6cca338496105aa0f0d45f74731a1290f6312a000a03aa0b692818d81041a3a41508c86ea2b8f029c54789c28352927519cc986bdd4011559406562c2eee7a12785f49040c184e24229404181b240cd42b94405f322e010820445b51309a6634c52a2705f57e64be143b1cb441472337e619df89fa33997d52737bbd9c464ba45993954e11faa8fe83e722f504d46d4bd21d5326580fa018a1b65db534c74e556170a8a24cf6e387f2e4a7cc8d0f34c419a59281dd463281128804201a309a05df250b445d154232bbb5ab16a57f9776dda1198ec9da0e69b2002465bb6642ed93e618ba84cbb6ec944949bb7e592a5bd595c99a432b3fc9ed3e0fad08dc736c2726b169c6df42dbddaccccf10eb092cd901f87ab6562bc5826e646354c1eefbca1c834c20a1b4907738c46b6023c7d9144058bd3c6c158545a4f52a1203861df6a96e263ca0229d3739dafb56484bde256f27b5c047da6c6a9be7e7433e12da4902e484f9481aafc4d6c1edb0625be57fdb011e648caf2e81d647cc340b292c6c74ac4202038f9bf98552058040d9d080a7fc4b4125785b5d20c8b09b07e19275dc682b5a755a28f1c45349389de57fd80dfc6308c4c70300838b82b71571adb792fb63c43ebcf5989b422be3069d7748950deac61901fef36aa116c51c168a2406c288d1ce8d97b6af2fd1a9278e8d45d1235df8cd08b15e5e4093f1b2bdcd39e133fc6f736264c8fe518f2f80984fe3de459b14c4c656e52997aa49480e81c98b0e3abf07073a90280fca64e94c6b2d535fb5ccc27e846e12dada62620af9b515a7db790c4cfeba5dcafb77bf3a020e550fd86b18575c564282623ee9de4fb23d28bc66f0f2ca2d78cb646ca4a23af5810b4f46ce577c16f12e0de15d05d5111b40a445d5dd6d6335c172ee9ca5f407833456c2191372ea8d98c1954561701b1d8bebeb10b1a3203e1f3d1af0a61f502f4f027eb86fd92640687b8b191764fb82aa82972d4b4b90744434ba6387e0943b8b45aff69e0166cde698da6360b34da8b592064ca63d6238465a673f727de823539d4262d3507ac29ffcd21118c37cbfea6f7fc9c3fec3baa7869c0a8fe2629966207ec14142cc87223e735c17e2b890532e80a718b82f343d1d2b83d8262ae2367a0db1a1c7c59ec5568c4f6d5e63014afc22d4f59f1de4fd94753f442715e924e15a301bb0a140b8e1ab79eef281327be6770b559fa0eddd191412a80757a582ea59475154a8c702ed99842bf2fb93d712a5b8b0fe116d310494edb7903b084eb80ce2c75e6691af466a3ce2eed0b438bb0d7fae85105b5ebec11d8b2bcacfa51010d01ac804b13c87c408504f07adfcaa5eebcac1ca147f948018acf200f17234cef70026bff523b3b8515925e358a3ea7a2242fffbd40c1e24690e2f4701e054a2a7465d26117928a5ca91814b90ae94ec92285e7c1adda6523c50540382c818c2f4a7c58e9992eb9b0f5ad8ff76a7fdbd8d9215fd96b6c09c230b2db13769f756164868ded821ee6213d0022d91333ed8e12daf78054320d4517d68c884d28347d0e020a74b306acd0b3568bfe1e31cbec25a54f5bdca52b28c3551684a412670320fbf603d91b7987ed116157a7cb68d900ad20c2fdc4be3a02080fcf883d1faa86d2ed9137680bc22b786bf82e40a84f9ecd2e7c467b1eb504280abda7e9f53c5841293ce05d2d11200a733cd453b6141acb5d2f8e32e9885cda87d317c6d42f638b38d6e050a683a943bc946affd07ba40a2014be8e0638abf790b4f753d17b69b60cdcefc10391c0db5e3c9642d950a006e4cedb8f5cd3c6364668e322f691853355f234d7644a5e8e5d8da95ac96112185c85a0e91bc2b1ff12f7d51e7cf4db02f4af6f125bc6b4c35ece7914120714b4cd421b1e792796e633bc98fdd045d57b0805a6532a13ca79e7a34a4bc59f900c20dbfbef08546d52f1eba3e3b29f59f6553b3fa46b23de0d9a1b5fde72b1e71820dba0a4a49229a0fb23c8807991c618b6b84e80449bb5b3363308df5fa78a2cd62c08e29d5f8d88d0f3b76b8375cc18e609e1fc5d7e8168fa5bc9661c545857a8a1a7b41cb173a3771121200c0734b350c211336e0f981dccf5ce64c0dfc8880764f2379149a01da73eca92c3523276e690628bb0d4971836fea21700bd274986e47a3a7678371820f715a7c87a05c6df2c699c188c8c7c8708aa87c147314edfb3424ac7fda064c87e7419903b461bc2bdfbcb222f69987c3f6c44249bb4ec99dc62ba453ba86317da34efe57328c46f883c2637d46606702f4329d23b92bec0c60af5b8dae30c91e5a2fb60c820cf6781245c88fa05141e35f03eb962b9303a3c0d934391904b7038442e35852308674e9acc41d3713006db3e36586fb77acb118a08e0c823a6a2bdf5ac66a4449c92f99420524ac104135fc6b02583ce4ac13c9224642d25f657a560bd58e0489152de1025b131a61f9a7025b1b04d42b120a6b38f2533e133123124a3c717daf2b37f7259e629303991876e3db97852e731d1739d87889eb2f088e2813acf7db0870a3e2d11a4525fcee459886f7f841a5950a8679e3e8e5750368c7308af40fef1ebeeca8ea535c65626a4bcca4eca4a654176f97e074e0b04a747bcb98f18475d769ef2faf8910ade58b9575941d9115f8e5716030ac1e584cc8857eecb999c2247718ba1950cefb8f0028b2aba0df1db5602fba475474bf72d32864e8de6a8da0b07063d451d02c80716b1dab4a824500ce9126bed2a94b53656be187772a1dfd83eb0475634364ec78a5651a12468bbc103de603d4069b4a05b003e0b0e55c036ce5ab820a0a0851901e22d8846809f057091806969db3728d32db00ee0c2a04080e6b2908348983bb50e58de30e4c808374cd9044cde2dfc5ca3190dd958802720b5851302ac2d1414207f218baa40df3d7229e82087d009f0b5e076003b862e0228b3802320b505f301d731140c00195ec8412355f96006986f418400a816fe0e30770c39e8486c8006d25dc870027fbe318098946f7404f3d60f645210617c324664deea2f8d3f22c6887b6298c3a64e05e6fd639b23e38d4498e95f103d18e7d13014e24b3791782513b902606980223c46a4cc91f5c5b2cbe3525907fc050a810bda3c262d32b6e60ebe759a0c866bda9c56c384e44052b9d7a12e387ea7769ea46e28e4fe813f3c877bf01ec01c52781d04f2eae7112d437da57554879c1d9e078b7c405878daee8ae105bb0e591b61d1b458728a97ce1fb9747ae9c1d36b57e106d10de08b8130a55411a29f1465744740e0a773132fb1d8312b623c383c596badcd081513b8e4328880974a9a2dd74d464563c7714839233eb4e95c93a44e294abc2e5462043eceacd519f45a9d732d47de39f3fcbcb3c36137f67bd0d2467121b3e019c1c94c07cc13602fb20e49c0d3a941fce1aae7eefae29b0787dc3e74e8d6a162ad1882db45e2a0468b2081d114bd5d33c8402a5fedcedb478f3b6aa82b60e3eeb9f3e73e6f5e62904830c82b33292f4eb0022dd5a59b0629df08bb70748abf96dd2146764f5ad6c7588b50865992e238a0524c0836783388469a1fc1694f3309097e26da6e9720a3f78f40839cca2fc65fdee72973091acce9d6ea81b76b45d665d6920ee417b9430a10df25c99032108a50b34795dfc171fb984832727ccc52d6b10b0c93dd21874d6272c93ee11c342c50c346c378d1a75081e045b54f3fcc84c404c4883bf22153f3480516a5177ed6390cd820c1594ea5a03f4f4f7dad652fe4da6ca73bb7020dc048df7a5d58d8f8a900bdd55305573efe0f0275e9e4cca30e2f9cb8b87ce4d185c3e89221acc9457e840d4e494f2d624dbb0c2f324d9b7db21bee3ec60435b52ede1c0cefc35b61f038873532035364d6c2b770cb4c166e917a71e8b5b3ca2062e9e512f6c2c04467cf1cb8b97ff0f2ea04d1550208b182842e8731968d7a1534553203f4fa4d1d31814427498104facb479e5d3cfde61ec9ca37f39831dcb6937dfdec85630e5d5a430865327f990d91bb205974c6246a7154b8d2ba02163f4523f2e276d4a3644b53bab05e4ee4a93376531c0c2f121d0ead53e89929293ebf4f1e3c3d404c107d77ca834e0f9f387ff8e49d1510239e13960b8f2a86ed25ef82138fb0ab8f1aebb71522af78bb61addbe1bef9ec241f3dce0084d8a125e978e3c673f49b9097e85d3b3294c4f935d2b01ad707ba6f9e9f4d90ed888a00a72edd3b74e6f2da99e52195a6f1eec04b7dcff353f7ec525d737aeaae7d14d8a59dba9b9c19a41f69d7c1c38e1e802f592c5e67316e04e9066b3a6d6479d96ba9d833fe6a825113cf33900c3a63e14618b6c10d02842142940a2a05971f3dba7afdc165c78eae5c3fbce498e36bd78e2e3b7278edeaf14b8e1dc8471fc49a8298c6168b62bc6ad94f85a33d56429c63a15ff50efecab3a7c72e338a0805a4a8524c1471d40c25cbb70cc12874f9c68573d70e9db9731b0bccbc177a1c1d3b72faf8d18b6b8e5f3a76ecea4a5e6b9985b1789833dd368005c888970856d291d441e4cb58ebe2e289109713edb74244abc5fea7a21376d5523b7a41b8ad103590a2a474cc40844a86d0ba49e9479ab1f7a8d3b3de7d6099287cb86f06dd871f7d08ea2b71a0a351a8009a307cfd3f65f0aea0e475f8e291c7838ebda653cf67175373db6ad1f3d84199ecd463ba7e5907537e4d2c488406f12b0ae410318d8904e6731ed9c9d180870a5fa27591cdccdad30fa119a61c96db549827723e4842d47aac75cfece238a3b449a21e39e9f4d1914c0d7212e9d79eb8c6c9a97b7727ae3f3d71cffda9ebce4eddb93d75edf983c03cc739bcb4f327cfee1e7ee5dca1bb3b872f97dac71e7c9fa04e9cf6421d821825124d8196546a4fdf31c73aedd98d3bcdb142873242c091a50488022aeb8fa43b60b2a4d001ff00000000000000000020adac6d8968a4a9446b3625b925ca27049440bf02924c49a69492e0ccc4979ece4cdcd11a69043313d777f1870a480a270a6a671ca592ab6683461634464494021e3438a749652a868b39e9de8cb5137848e1153c6670d0dd1994f0b418ef0be9c4430625cdb0f3d4172bf08190c42306277153ac14f4672c3538630d06a73365a7a4b3bcba7ccf58b321a2ebf18263bab4ef25932485c5d8c83dc1c30507dfd85bef5b51325bd54b29a9fc8b849020a141023274b0e2a4bfa47bbb64164796f8087c6415e75713d485b58809d2cd71c393a473246dc38d2a4eaa44f791e6191f7a1f09d9549c449524bb56a582265993d0818aa3f85c09bfca133381db3042c7290e6ef268ae4cd18413ed99e23823a77fc1fca412a3a5386b494168282bfda52ca438c9312faf2a2544897c1427f94465ded7126c934614c78ca34ed210bddcac183a7484e25892100d6a3982e2f8dba24b1cd7f5b8181a1b3a3e71de379543bb55c638b327ce31a25b2fe6550d1d9d3875c9e89b5b26a98313072577aa2656896de27061f5dcc409795a4a37b41899919a389c5ad4127553924d0c713bd1918983a61c4ddb1e328a1ca52d26ce5abab482fd49253a2e718c6641b7ebc669898316ed51119eb5f221acc449bec6285ae13ca31c80237450e268b209cd25669a944a6a933867888f31a9c42435494ae2947a6e9ef146e238d2dee269ed58a5960612c7de24ab73a90451231d711a687c818e479cf544cb17d3cb099352a37ee870c4f154b89ece5f8ba53b96469c2a67bb4c2bc593139a4b7430e2b4f6aad9337477c8d40422212322213dd2370ebfd0b188c35a75c9691b3c734f1c477b8d902e92cec26b84d810a993a101079855c4a9f524d9234bb69c309ab176a34d802324d9e890109194e7858e449c84126e17b55bf3a947fa8688c80823e26432a8721d55a37912624ee838c4414995ce82a552d98688249c4287214e1beee46d5253c90bc9db421cec4c0a55315995f26ec69a11e2dca63ef306d3fb2d143a0671125f4b85f9bbd1573953880e411c649d6ccf5faf68c93282e808c439b44aaeec39ea62a68038e698aa77dd8b101d7f38aa0529da1a5b49a8c60f27efefedf392468830b70f27b99458bcbdbca2e606a2830f2799a9499e3e4bc2b9b687c3e65e92f4349bd81b43f4700a7f7631854bdda1230f6777f11272beb7a6a47838e99ca061d3aee9eb94041d773865a59cf3d9f0eecf66ac193b9c4c4a97efb3b12469e233d64a233aea70cef41a4a84d0bd317b1d74386ea9b5244f7633121d7338cd5fd62b4985cacde38c3512b416c9880e399c84b68d6d25089919bf90c240314474c4e194629eb998046df2c469c65a8809dc861987e410a981a32c031d70387ce8fafdcc9d7147886fe878c3f1332b5ced69e8933cb3860e371c7684da95e86da6a8701bcef95aa26df61a5274b0e1209bc4b10eb9989bb71059c3298a1242eef86b891b5d2a3ad47072f3d0a33b4fc6682a9886f3060d5562bc2e69a465821e493372d03041163668c8c042468e119f91e490a18109780dbb0e341c4ed63ae9e44d3f279866ec883f5a261d67386786b9c5a9b5d4be88c8c88d90903c331cccebf2867d7d910d95e194de54bb26416b467e58c8788088c8c8054040ea3ac87010ad26c9aa2dda34748ce1a879b25644c56462e9f50c1d6238ff7f5c09f5f7cd7648b241e3cd66e4d8820b1b36b410196940b241a301cb16866396b954fa3443936cc170525a83c79824c50b32ebf8c2d136ed65aa337136ff0e2f9c44f57b9334ad24654e36b66880263aba708aa2be9250e95d4c72e018a1f16c386ad0c8b145d90e2e1c2c347e4d9051ee164e623431f3e4d2684a104a46b610c9c08d2d48202232812df2d0a1859368dbae49062126afcbc2a95c5dff548c3ee92e4672f848088e36b55838c5256922f6bf37da284263c42f2043031390010232848e2b1cf647869059cf92d6ac85d81e3aac709e33d70abaf3a6b49681850cd7a233000212621a878e2a9ca4e81ab1e31a567dba307450e1246a43c894792d4b3d859398c8df9da472821297257448e1984c89d96645ac848e289c4adff32b45f3f352113aa070d4ca983e36f35e1c25260b1d4f385a8a769397a76f2763acd0e1849398acfe5cebc25aa99a70dedc1595478a4c2a7b269ca42027fdca434fe50e0b1d4b38ed88bd939490d75b26259c34baa56e96ce0d629555a12309c7a0dfe4369ba913f69320e991040110101c24480a2bf0819000f8a10309275552a85c6235c94d9244d0718463b89322478c52b149c3d6810e239cf5c44f76545792823e632d87e3e01c1d4538d709daddbd4cb4647ac61a5e0c3a887092ccd29c861263b4a899b1a6c51686051d4338ef99247afeffa550d109dcc6aea04308c7582abe363632e221c84588488e9091110fb9d15aac8d1ca0230827b14cd225ec354cf23cd1483c250a3a80703e19eb6f4be9678469c6da0c1c5d030776d1f18353055db933ab65b0d60707393a4e4b2b673011f5e024c9b07bb257f3ab56ead0c18363874a632adf37630fb74810780b7491d8f091912d1273b6c5024040701c6e21030bb51cc00e3a7670140dcbd6742ab3fc1dd2c5488ea28a0e1d1cce4f8f4e3df91c9c04178b659254798472748816235da38ba6a00307e7d9df5b372f67acd5a821722304070e5374dce0789f1527a3caae9c6983d309f23dd404f9259df48cb52c6cd010c9c28648088e2eeba2468dd640163668d4a82172012b45470d8ea679da4c8edb4183a38d78d7a698a6f7f28cb5101b2266232551f1d0318393ca4c5a63fed81b4d8ea1430627d31333640a26dfea1d8344134fe52d111d303889d165c32f88fb4c8280141f74bce0a4a95615b32156b22b030b2c64c8c042860c2c64f0a1c30527cd124e9c8cdb38446eb4e214f6fe9418a4dba83361c569f3d20595addc25de52842b56713893fdfb2c269793bca28a83ca2643b5589061a9c5541c3326c94ab7f28e668f8ab38e859c37794dbcb648e18a539cd6dd722895e2d45c6e8ab3ddb8a78979392addf2842b4a71165972c64a12848c4d62e00a52943556c586480d2c40405070c5280e4a358c2e9511cfa26db4162123222179451427315e9c28f1ecfd8f67ac99135c118a932485e5a81294b45a5936191a70808cd2c515a03809fbae29b394bae5f4be70c5278e27686812cd2425ae243d71526a7155b3c99bd1561dc3159d38a89125abf6a8ff39194e9c62de29a5c3362b9b38a996701f75ab38527385268ea76476d4c91b429adc8cb52b3271f02d49b99b0a6d35231c7e82a6800c2c64d4681c23ce050d1b1b9081459a91834607ca5c8189932449ba82d5e52020575ce27426a7d9980a51a1058cb80d1b202038469cc6c848a3375c6189d3b9b66da5559538493f91937592eaac2c25ce33de9645b7a8d0a49fc4392febdb8a741bd590240e9a528879fb915bfd47e2a4319768fba9317317240e6649eaeeef58cc9b7fc471feb26a565e8e3829bd0c2d1a4aec2f71230ebfb1d5eb46a62c29461c34e6f7cdd374db175cc429a8b9f16dd714572e66c3158a38c8937273e95e3c49da1271bc70fa46ace9bbd30e11e7182563616962651d1de2d43dda0439794daf6b8893c9e5bbd276c26f092ac4495f9ba0465e4e9c2024c4297f6ff6f5d30ce2ec9acf4fdcdba4acc408e264394dcc667f324c8e66ac858804e2f8aa274d95de680877c65a0dd43868242cc11580387b6c897a6993964fef0fa75c272676c915d74d14492672851f4e214d12a926cf3e1c4b4ec5249f3c2a6a3233e10a3e1cd7a43e49f374e89975842bf6704ca33189f95a5b5388935abf6ee524870d91910f9981638b1b150176c00b421c346f73e612d6459b7e10a7f22a75a2e6d193f59cc20b419cef9424062f69c643490ac451c566cb54c9cc165300713225932a79c22575e2e3e4e2a0f0e20fa7f86625db4b7d47c894f0c20f4755bdb2dbb4f1dc243ec28b3e9cdf44896992983fab6a3e9cc63fc4a668b2a4a8d01e8e96e63547fbbf6678f57052fea3474d89e7010fc791afeada6b9a3b9c7ebb649f2c723b1cc3e9f08d67b229b1c13a9c52584a5f272cc898e47438853a4b2b35cfe1609dd934562c391c3c7c365829d92b452d870de7c2b7781187739e776da6394d6fdb8c3591b48541e0051c8eed2efb9b5a74bdc9bde1b89b29ff4af789fd8a1b4e637ddf1d32c892c431092fda702e79e29b66830c382fd8704c27c893cdf55bc33e9ae41399b2c54332b00831637778a186e39a125b4bde2b2549cca4e1ac31666495a88df0020d07ed3eb31553b4072fce70fcb8df98642ef152592684072fcc7052928787125ab3c9a2d2811765382859d377f69b2866991764384693ac044da1a4a0190402a2707831868312659b32f75c8ab557e085180e637f4a6ccb6c49923d24c18b309c46bed659924e446e78d98c17603886e84ce2469f5e667ec69a17760e110ce4682d68e4c071ca3000ab78f1057bf4e60567ac190c5e78e1249a98466cca2e6bd1cc584b364cb2612e008178d185f3a6f24a492ea9466490dbb0000888396a64a078c18563a62064c39490b9472b78b10556bc6abb5a5637e589061776e3465f6002322c0002020272630232b09071011958c8c040063050a5021f0819401a5e68e1d4eea1f9cf7b2d2fcd13bcc8c229b54dfc78cdf93d4120203970781634d23a6ab451788185fb4609b2fd9ab1663278718563aa3179dadb9a2655688562af97f85091a2ed196b389c46a1a34644785185c329a9a24078418583c566b8a051c3d3cad080036c7806121a3744343023078d0e6c21f28317533828cd984349d113c57f299c5d84de12bade4f087d14ce7de1b429499c170f1d0a87db2b31c7851237397fc2d9c488bcd1166489a7e484c3a950bae49978324a52134e5a45f8bee7e512eec48453a5fc5d8dd14326372de1f07ff79bd4da49319f28e170564246847e88509224a1ad7cc20409a7a861b446bfcfa045e8082721aeca544c932e2f32c241fbd409f2aeeee2898a70927b672b5d3d4bee9b080735a5557a4aa92a991ec249f25c4b921c5ab4455b082769a9eacf4e4c25fc1c8473056f4d928a54119f8170aee0269ac3f49e96f807075f13a3880d1b1f9c04a52d9f6c6e6dc2c6f4e0249726b27e4dc39c787034252d4e3ce91d1cc4c98d92d9a4ac887570deb831e689327f497473700a5a26dac7698c8c2e0e4e978490d77817fccfbdc1314595aa7cdedae09c1abae664fe93e6548393ad9ff4d8a0b12d8906273166085351fc4da63a03349b4c366a4f95c15193ea93a2e19ae44e637034ffb918de9d6bb2e5050c4e6ee1a949ff08d1aebc78c1d1c4106fb9c43455237ce182a3ed951c392d2d97c6569c4c1e9d9967d4091b83ac38993827af28392a08f92a8e7f62ccd5bec8144f547190f67752f6d0ddb62f1507edf33fe13f6a5e1f2a10f9596273d33bc541cd9606a5c9824a25539c54f0ec3ea92d5a4eac1447956bfbd774f9c083147618028f511c5336a94e6788d2b1d14314a718422e7ec4e7a6573c10e2110a467f958a450b212d00123c40718ce3a31a4a90cd58c321f20af084c7274efacb825d29a9ff1acd85a70c0d388086162236baa8217201f70698c3e109ed4225dd264e841a2547018d32048f4e9c357c96b0b0edaf1ad2087870e2e497da724693d10d1e9b3889d99962bccb3263a2c64313070ff1aa1d3c3271b6e8a7ef4784a8185d840259f0c0c4297a5e4ae94bf01227499a6832674f9389db12075b733ff1246d0612e7c28cc5e0518993fcdd8593caaf2c8eb98507250aa24ceb2ed956867e122813338a65ff0c62e33370f40314606ff090c4f1ac3d332bb43245cf2312862bd9cc702e1b44b44ce324d14a0a69bffdd53b0342ec0e1e903867cace37e984d15b526ab08d68613c1e71f2cd6bdd2536448ca51ec9e2c60618151e8e38dc567c4b7da2696543a44a4b29a594524ac9cccccccc4444444444bcbbbbbbbb333333333336ab04c8844723ce57f1ad41975c3b2565c61a238e7322f2cfa28b49a1e7681f4916c70d1cbb88d3996ce59b775a52c98770123c1471d0174aa49792256db3dc038f449c3267c9521db559fbf3c003112725a6490baa3363547c888350c1552f7fcee9c5e038167818e214fdc32eb8e53571c48ac3a31007abe09be42f97ccd3a107214ec2b5052d6127bec720ce99929fa4364abc542988736f08b1fee3b67b55208e49ce5c95fb2c25fd07c429e88d279895a0101c219981da0a7c20a40b8f3f1c94d756fc5d5bd8d4fae1a4275abd97c978f4e1e45a2bef5b251f8e4983dcdb303e4244690f69934e92cf2fac87e3ab689a9127bdc9ae7938659ffb2631dfed7b3c1cb38e0525c5ec6d13c43b1c7be6e2e2a930c9dcb38108f0b0c3694674ebff54565a6cc65a1728c4131bcd45eab23a1ca46dcec80bf1956cac9de1418753cec9fbb5277689f19eb1e63107034981871c0cc486471c0ce43ce080d80a9b5445c3e30d67d36bf1d6b4193f9b190b0282c6050f379c5a6dbc643596ee95d810610be4c0a30d872db9a347654e0b190dc0800c056c41011b0d00010101c101801b78b0e1184ef909259a08a1c4923518881a4e173295e6aae8163d4fc3397df52d0533cf721334204ecb7466582bf081901c1e673888ff58d70d0d2d566286736e0aca4508b98b515486f36d48112a5ed1247926c3c1e4b896bcf9c52ac663386693db54c8b6eb0d326238c70932cd4a4aa94c920dc3793766d09f11e73e2f180e222b99e85125d49efb85e39de9102689694b9dea8553bca936f13ab35fd32e1c37b44971536f7ba5c285b39abcbd203e939d59b6702a35f2b4041deb12d3117868e12457de765f2acf4ab27056b7b0d5be1873a25838aeaca67313eccbaebcc231896d7623dd3a3456385fb0d764bda9e72655384962c2e6ff19a970be132e8993b2368573491ded5725f48b2d8573697d8ab28c1b295a140eb62729559686c2f94c4463dc7dc249a5a0bdb48927a924571e4e38ad6e1acbced251a9f368c2c14328317febc2447830c16309c7533113937c280d63b121821040397828e194e9e7829df82aba82021a362c6002e0068f249c4469ee4b625e52c53c124e2a842925ebb2c98cf038c2713b44695126698ab26631c6c308074d4ab8683a32c999558e2d6ee0a09114e1518463ae6bdacf6092820711ce25cc9e67561555328956e0032122f018c2d184d31b55f32425c918f310c271a3c9123308ad25ea3963cd465a133c8270346d4946ca9c24a597c50f1e40389c58bf992f7e8f5d586e0f1e3f38f709629d23629267db070f1f9c43ca77f7bd89a2fbf7e0142f49955b972783f4e0c183d385c96f9b368b58c8ece0f8a332476ade2e0e1e3a389c3e1929d22441a8985e3878e4e06497c9ffe46e713df986070e8a7726de3393aa3f931c85c70d0e96c406b1a7dabe72936c78063c6c70b65c429bb85fb925f669239eda1f6002af800d0b80808080e0381480113c6a70ca5a03665d386ff8c6dd6977c65a880d911c89dfc0d135b6c8c2474040ba48b048373690011b16480120020617b4bdeccd4d26060c30b67090d9d96d5af74bd56236c0d0c241dce792a8ac59a282061859f0b5b6c4a92ecf00030b87d37b3ba55cd3c97339085819605ce1f027f4435d2e7937378d010c2b1c4b097d5acb4ffe93e4597488488e103d39c0a8c2512c8d2995641f5df1a5c2b14f9016abfc349a9764e1c64e0d30a670b216df5341f76cffa70818523856349573db7fa9b98ec239c5644d355787800185737fcc57d49f911373c60f309e70da144a44cf24f70c427d80e18420c068c2c172a528c94b9b3a219ab1c5728c88dc3881eb046030e120645a0dc22f65b86f97704a72528ae929a16656c2296f3c95bddb2693e4c1014612ce1542bd49f147e992aa2e46721810c040c2f144df93f26c92f6c43fc249ebc92ab9c40a6f9a648453eca5ca25c774f74a45389a920d67318930d712229c92bc0d6fb98286706cd5f8b636e6a7442484d3fda5d94ade7f6176104e29ef9d970a36104e3295eeef0aed5e977f704c93d2b225934ed4957d70f697addd92e23ea6e9c1f9540c4bb12ab8d8bb3c3885546d1f8ba35d4eddc1512bb668934183b8b0e8e0ec7d266df04de6e07c1aa7abac74d4c2c4c1492c49982869b97384f006071ff30a524d6c70ca317ae3c96730b35c0d8e59eab457daf898201a1cfd84d8b819ef399bcde054de15a2613a31c090c171a4a8204c09634a52ba29c088c159cd4e87caafa3ef92a5233060700ce2b25d76f9d3dcd20b0ebaa42ad9e4fd6bd75406166180e18253efcb6ee5df7020c4b4e2ec2927461bb3d124c514569c2f5d9630cbfc735ae32a8ebb7a799ea7e3a4c90d0b1faa386fdf9a7cfd3df7a5ca402ace5b21977e554199d85171ee5d0d95c664f9fdf71407f12d5ac5a41915ce628a83ce1f2d5fb272844c96e22458c79629f1c64ca43897caa577c5e4d3a7db284e71ce544a417e969c9428ce37362b26c349a929a138ed29a5392a7fc3760e8ab305f58ba9048db5f1f489e3c577e8f853571be489b306294a34c967d3efeec4319dea98e0ff72e27cb2c9e317bb6ee2a449c36565848b095513e7bf6aad4feb4d4992928993985fad8d5dc1c4415d7e1335b89808257989539699746515afa4162d719a13a3a534af57baa42a713c39944c725b891c9d3f2871f43d7df2a34c65cbee24cee37bb294782a8814531267d750274e6eff6cbc247c44e270dea3a4a92edf52dd7de103120725736352ef272322396ed01849703803662422374e8e137805ec11a76029d2e48c7b95f37f38e274f11b9ba74165d04723f40d1f27cc317c30e2a8b18412b6c4ba70995bc4b9728afa5191faa6521a00197c28e2a417335a50e14a14fd03f0828f449c534c8a3a2a3b1fb7ee293e10714cb1a476d2e99e8e29030b1932b09081858c548a8f439c7434a5a052ec9fd4ab163e0c714a3256e634910159f828c4f14e097b6f29b45cd784385f16794928b9232beaac832823396ea0c88720ce9b5ffacae25d8ce4301cc9bd0220209da31308080564602143c6053080858c05c8b8c00464dce123109d99daa02d7d098853aa8b8af27b7dfce154315c5c2d950a113efc70b06d53cde4212cc5681f4e69f22615af6ce4c3e15c53d7d3437ec5923d1cff622cad6f93a426d1871e0e765d62085df20835da8f3c9cc7b27629b97badf5ffc0c3319a387396f225c9f52b4ff8b8c3319c304d0f2dd3cd0d083eec7050415d647493a52425f45187d3497d3a376539638d6d7cd0e17c2756dcaf68e29a895d8ce428c30bc1c71c4e4a255d52fe3704e9871c4ed9c4bae62cb46a766b7cc4e1b449535f96cc1743649e6344e4030e1f6f389f5c1fda4a4fdeb3785de1c30d9868cb2b79335d8c9d1c3eda70eaf83fd1392564948b0423222660c32933668fed36730d9b6cc77596a0e9a4b16ef850c3713e6554fa0d268d2a7168213ed270124c95541b935ed116341c33ed2dfcb5c564299dc2c7198ea1d75d7b5d3b937d33d6d00ca813d7dc4ab04c934044644688d74834426c881c163372d0e8008e1a351420030b1932b09081850c2e689c2c2b69f828c341a9f0672adb9562497e90e1142efa62558ec770d83df569d13dd3dfff2186830cfa2d1ab2d66df38f301c4fe51fd9b0dd45e1030c07794a109679b9aa379f133ebe701015cb7bcfebcc2ef6c27145a6dc934db22f6a50f8e8c2f1c452967c354f4df8b97012dc94e59bddcbbc269bf0b18583c60bc252f21febba942f7c68e12437be4d45ad5292ca7be1230b87d16549ca8c317759710b1f583806134c8a16a3249b53972b9c948c9766924d92c45427850f2b1c4eec36c56e8c2587aa701ea9f1928ca5c26938a1c2a9645263b5de9aaf4fe1204a8f9a46ab989f590aa7309ac4095273a5246a148ef992546dab2227a60f289cc428da5a31fc845389571f396fa6aa31279c43e79ccc2449130efafcfdb4fa0595a9fa60c2a984d01593b1e2c55a67ac7145e0630927f9e4d0ba560bb264ae845359127fed4a463e4654c347120e9a929678727ce58929128e49b61cca337c84f37b05f5ca16848af164849394d32586357f091f4538d8c91523c2495f8e6a3d5963d2b80ee1ac493c8414212384832e0df3b3990f42c2054bb1f3a405849394e74498b44965b6fc7cfce0a8652aae3b35c82c49f6c149575e26214e8b0cab2a23e1a307c7984b4c992b56fde8cafee08307a752a3a3c72be3838f1d9c24c1ac4cd89a3c5a590f7ce8e06417bf4929f33f72708a9f9b2dade1070e0e237c4b90795f93a8a7053e6e70f8d26a6f9bfdc2b4c8059a161f3638e8b18d57e525ffbce6a306275f994dd92fc5dcfa215de448ec46b4d02264051f34386c3e9513fe3e93b6928f199c827e974c141f3238a9f7f333a9fe047cc4e054a99534eeb246df5dba78f76bc1070c3e31649424f99e97d90d3857810f8404e0121f2fd82431d36993ad748be43087383e5c705aff3a4b2698a83f752b0eca75e35d8b9758b95cc20b561c4fdad7d64ca34498781507ab8d66a37b2de60591f04215279da9449ade3a4f2f49c5794594c9ced318cd348b8a53a6d324c9adecf27a39c5e937a7a5b0dc4c711895d42e737ceab7d78417a53805d12f2def6d35aaa917a438451363ba92cf8485517ae0c5280ebb26a8aa4c7679948911c54950e14cc578eba233fa221487b353e799c4e69356648117a0404d6a4a49ba184edacd0b5e7cc2982c6cdefc641c055d8824bd43c10b4f1cc54c4e5227549485468d1b37faae138e879d9f24e9ae4dbee0c4412b599be432dac791c38673b189739ebc93abb5a4c60b4d18bacffa53f36e679938958f10f1f68a61838e8973ad69b5ff0e7f2fa54b9cc37d647c28fbf23259e2248f25519565aac4e9540a957f7cbe756b4a9cc2e297665092c6924fe2146b6ddcafb2d86a5412e7d7cb1ab31b93dd46e254528a77bb594f092171125f2c25413fdbc4b43ce2207369466eb3574e8e38c83a4974b8796dac64238ea7e94cfaa8ef93f231e21444b886adbc67ea224e316ae662097d1b7b53c4d9b734a9dfe62839c7261f11c981e302e0851789e84f124e6593b28d8873cf5cccdb8c0f710edd26c5a5cc105cbc28c4d10e453876652ab9b294eee8478453f4be8b31590996e534849386d1bc3ba684b5ab8480ccd7a6abba59108e55a3c41cb641403895209357a9ae9c5bfee0a42b2949dce6d267a2f2c141a897cbea969c23833d389e7c490a71fd0f6b131e9c4365ef2ae57d252cdec129f499e9b78e8d1b1a1d1cae448b6ed319200727f1a3f9256b9ca45b37000e4ec2eedc6fd8f106c76c9fdf93aecd64ac6c702a25591242af4ecb926a7090fb23e54f06212fe96870d0744a769b8921bd8266701c99cb61e9e4f4d2a90c8e5e9e57f72764b0bb62700aa1e2a76385c129e40859627e5f70dab13499a72efd466c00179c92ea3be57fbb66d96cc5299ff0aef1542e6d29569c2ff355ec5c4a1b335ec5494a422d6885ad12d444158793aca4679dc91f7d2a8e4943a675d37655925071d63ed136ddb2b5c4768a835b0c61253f7af49c5088618af38ea8fc2d4209a21a2ec5c1cf365b2a91a7b934a43865b506cb748de2a8f1e5f5e74684058bbb10431427957519153c34ec6ca138d7bac52d0b8aa39c303158c59f33937a428c4f184afce5dd0e313c711a51419a96ecdd967a27182506259a6833bea9c489633cdbda3a2d2645ff408c4d1c478c4ab26f3a4dbba76326c4d0842aea262eb79da65c392e6e0e313271dab88c962ee5123785dc100313a74ab26613f42abdda38dc86b14b5c0c4b1c4f8a1762af67313234e0000d8868e0c6067208312a7114edb54b334d293409254e76d2977a9ae9b1203363cd6c12c7f4bf22ba9da92e6e491cf37edc6e38a945db1f89b3a9b879947cfe75c29038559bc511fa9ef93a7f04aea257756b9438e218f3fe56980535e21c1fe7b3162feca5cd88936817e452b2afd1225ec4493a31ece9c9f226978a38679041ce52d47489261147cd32a34ad67adbe822e298e617be7bcf2439e5214e73319f3aef0a32980c71580b53f9cffac3322cc441964c92cca09294727f843889a56654d4e8a6a4d2204eb6ae6a2a6882706fff56bedbbb528d1108c45ca8cb95e74d1c109eecd55955a274e5d486094418e087187fc83c36e811be1f4edfd76fbd7fa9614620204088d187cdc4cacd9594e70d02a286187c4855ccb0294ec618de1762ece1949ae2479bca9a4d555a5888a187cb644b9fcf0d5f9b20c4c8c3bf2576cab73c7b10101f11c9d3430c3c1ce40491a1b5648e53a6728763dc2cf3cea0765e7265c4290002e2598cb816215b886811e2354830e25a842012241318010119d1a2d8e1942429e5ed658c8e59ea70ac14bb35d1c424878ccd58e31bc4a0c361742695e5393b77f25ec59883c9010531e210030ecc9e6056ff0a62bce1ce1679abb0aef1a6e6d91631dc70aa95d9a86e4a9954d1c3b115a30dc732171555d31c86186c38e5bf799f0a72e6b7c019438c351c7b4359cef5cdfce8b80731d470f04a1df5b8d0f0b71b1ec448c331dcda9949dde63f6a349c7f4cad6dcceef9a83a887186e3ca29f5fecb34224b3886198eff72c184460bc728c32989757a342ff5574f64384997cc7d454e109018633869191f6d39945e98ed012c86e3dca9a4d4330695a63463cd98309c359f924d73e7659ece5803c349ca123d366c0c4aded6356e68e16b82185f386ee59ad1bdc94c956278e1a03f936c52bc53d10c2c643440025cc4e8c249b744939258391f3003473f60010ca00008084a215d8c8868e15ac868000664a0ddc0b115f84008003811830bac82185b38459d1bb595f4c8be9216cee33b16db6f32e8d95938a7c5d260e298287f4d0c2c1cecb762fa9272ef5313e30ac7a454d056faa4a0b6aa6f9f401728e809307a8ece8206176dc3d8886185b39f1247c8a9d7f250ab70dc1443b58c28cfdcf341450c2a986769255338ff0997ed4b7acdcea57012748bfcb7ad7d6c360ac7204fc9ba7ec9b03ec680c2e1e492625a26f1134e26f37e8916e64d971985184e38a7952c77f5d8b37724c78d32cfd1394446b4c468c2e9520a3972c4491b15c384c36b9bd83dba15c161e3068db5b185313196703479312b4ffa70bb5509c76449335e26a16ab94fc2c946984a2de13c73d74838995295e1aee7bef9239c64d5cd09329724c9888c70beb4274f9f9217e17461d3c43a3112e1acd71553c613a649f4211ce3e489dc33db7c9f0ae19449785fb8a0201cd3880b25c5a803e12405d3e7f17559d5a61f9ca492a7e6c4ce7c70ca26d9fe26b94e7d4c3d3889fa87b49c1ee2afe6c1712d462fa964f8ef9876704a4b9bdffc63b2f244075e3871dda2a4520e8e956e46c36a14adfde2e03ca394967049dd35e806e7f151f7e5164e86cf363849f2e97a2551164c5c83839255ed4c4b6870f6f11525a59dfb7ac90c8e51f484bbff2c8393f23f499820fb4e3606c7133a4c7f991437c50b0607317ea5af35fa6742315e705aaf58514cc9b5f47e0c171cb378d6ed59ca7a632b0e63bdd9632165538ab2e2944fdee94cea72ebab386d125a2da60d69fbba2a4e761944af96a4c4bc4ec5496bd389563ad9f41b2a0ee3265b7c695079eb539c946fbc98e2144f5239b684193d3a2e05ef2ab6b31b2c521cfcc4cb6c98f6508b4771101b948eb724fc561c89e2e4fb1954ec97314f4d28ce5e97efef5a048ab366a5b40cba4fad673e71922649d318174c127b7be214ffda36b5c6603a339d3878de75a9cddb9353e5c4d12ccf492af4bb89a3bf9c5c528cf212756ae2683aafaceec55cc39b898379beaad5864d3289c1c4a93c2bdee2ea79e87a896389e2a15fb4bdff652dd1e5092a64a8934a9c44353199b5b552b220250ef2a4932723c2edc265122719774f6ffc2a89e3a52483ec30d713de128993287e16dcec72d855903869faa9c850bf7ff5238e27c858e2a52671c449932093aecaeb2596d98893924dff59a834238e974c35756eb888935ed39a4ee8ae88937049c9af6ef1e3449ceed2e49d6a1711c7e82789491e154b97fc10a7cc936c64b6ac210e1a4dfdd929a153ce429c52bb683f59363f4b4888d38a4992b612348c056f10e77117256cf013411c4ded67775e9037bd05e2fc33572ae7b880385596ee9d88ff703213e13affb31f4e628c85f4ef3ccffb700c6249b95b294b17373e9c75cbb534a98b27847b389b167da7c429d954ed30f4704ca54c565aaf60e4e124d9ebdf28414f7d8109c860187838e9e8d0f895e6ee825cd8d28071878361870359187580410703f1028c399c2f8c927a62f58accbd1c8ed697044d2a95b2103d0ee717fb32e12dc6ab34c1e1642ad5c9abea499d79c3f12cf5ba6eb3492f22379c4e3bdb446b8d9785db70d075214c9889860eb1e16c49f8d0acb9cad4c3359c2c95604976bb84cc160c351ca397de0d72268c34a0e194c29ae4695acc724e3370d0a881b638c32955701f9fcbfd779902d40c07cb6c621afa2f4d1a803fc028c3a962ebd63336baa8ec0630c870741d6da3b5ab72fd69c6dacad080036a240804200c30c6708ca5f7ac8258927cd36238776b85b88dbd930b5f014618ce65758292dbf4f98e603867facfd955de20f27ee1ac253269cf2045979225185e38a8a63d29cdbaed0d8e3ea8f47166f260200e0683280a82208645a66b00b3130000000814150783e170401115dd3e14800349302854322a1c26261c1e2a0e85225130180805838140301006844241100ac2440654a42e0084b217705e58f83a7e8d432b4ef0eb2b841a9b9f7e7fcd09b6c96b045eab7a4de275e65fc762c9deb71d5fc24f90d686a9d6d88057415ed3f3dacdeb0baf887a8d675fc7314f798023802d5a68bd4214bc3aec5ad4aff981c5ec3592be503b0cc4c18e6f0ddfe0b753ccba1edd1ddf96dc4b11764824f2576a1bbd98fd58248f8d69d78335de6e01443804c40c4a45d8876995ad19b2811382133a2f58224429e98f9bac75e8a815a288e8c8c9bfb0e7249913686907a687b797d5f7a63b71c9c2ddb2d85059003435cba18de7537116fb28152838e5cf0e2895c2c1067d57b3421c38a38dc8cc952fab4a12de30cf978ce70fb769b2bf6fe38f1058f376d6e85cdf1efab210d9ab684a1963372200795623e26db5854c5ff46b5e65ea103c0a945c5b7b1fc38ece1468bceebdab0824b7120b945bbc2a7722d9a1f055fe94b0e57664d56479397c82e5b27eba76cc706af5a4e28b119f70d67b9162bc001f8e63b243a43018aaf91beddadc7ae2a7df34e6e8e0191c13cd515d7e8b8ea7d29516484c8d9c0e1822f48ad9e41360091dc4c06c73c0ee835f249eb53c257c0538ddc41b97f1c2dc3846b0cb90a7af6809473e41ceca433fe6d4b48620d13e1c44b37d281817ad7b3ef6c602588eb1393835ba0a8aeee2d20a59a77032371639e567431336fb40093a204088cbcad7c7c17e45da478397ed7d88c1c11d953a17a008584d0e07f7926834c185e95a7e3fa4386ca0bdd45d79fe9818b257c78a6bd8ec22566f3775584b20351e6982b4c7b07e9f162e0809727104228d1c10abea5de3c99138d8fbdaba79e69a5990d7a087ec42a88d7e656a780e237340541e5031d8812f4b85370b92ae44820a653cfe8cbd130386928280928974d6fd101ae1f764477983b14cba43fbf3803e9e0ba33415e422231d0edff356db27df186dfb68a18c44a7e702f13470cd90a395d9940f5d78c3dfbb208c394e31a4294497268d4636c9ff10a559c6f77a44ba70a417f608ff0350aeee928de76c5267f8efdf2c08d697343ffd1c0a7a187a6e20e0c51236c91fe02f3081376d141e21d5b9c797cfcb07324572ce9fb4ea8969276cedf1c187e7b3468a3ed67718122703f9bee6b72a2fc805fd280d838506711a5e7855c59f22962d1369d885b897581bcbe82a74ce3ab5f030ccbd24ddea6ee49ef3ac15fd0294097bbbb886b6de6e637464c8ac1b3b703e9013525cba277e9d7586e70ba34eb13e872f580b9ba18185b53c86d16edc10285b0f691504814d6bafd51d3c75141485851c40164ffec88c64e27899a0306f8b74860324ff0bd9083024452affef2e02efe216bfd8a0684423192e635610546d350867271824e410032db8ca909601bcb0ec6f3de39f8b74844c018a41a018dd1d70cb0d95e8ed99298f7b120cfbe62af21397b98a2412250923b92e3af59ea50417647b9fc60db410e26c1f50b24ca08ac483906553007d3fe8a42867d4ff081a9d4ff54a56d4da1883a9c96caeef029025cc51c5db87e7f85f52d887f42057687c0c51ff6b5798257bd59a8b33879dda7a380b559edfde828776fcb2db57bbd149ccff29d1d19a01a7d599c2768b2870f2790712d73a9a8c4311fc9011f2c0403a6f68fd31af092d1f6620831718ff800ba458fa2a26416c8cbe98552ad4b4ae70572d37f3e1d64d08e9963994337b5702fd1f46860733ad91628119cff70f1e8cfd1282b219b32c0cc71d25f2c724afaea0b7e5be2b406b2e1200ecc6325506195ad6560bdb98f16a7f9c2e402a848fb8b408a1b4f36583b06bc009e5dd38b9ed117f36ea726a8be9155921e6087d3c4e3c0054c48fd615def9298df9fded8b6ff0b7ac049e15ef70728cfb1d813a058c0281042a1a71f828839840fafe97ebd462c93c7d79ab0a64b81378b9f27e5ffd92c309025cf6db1182d12c3e74100b421051a80872b42303921cafea6a689f04dac6a140076ee86300713cd429977a6ba17fd0efac82c22ac80f1904be59402288270510c522060e6444428086ed81402b26b8bb2a96fe94d94e82a61d2926ea2d1cdcaada6ec203953584a768028e713d466800f57fe89f23c424bc28bea2745089e64183043ea3a3f4ffd2dd09934c1339c287cc00038243f72af6f505404bd72f449934dedbf36152b61200c4afb99b2ae32ffc80bcaaa0e57b39a4fecb7dada1c42f151d80afc900e8f74462c2eb1080bc7b682666570fcab2bb076ed76f20ab5c5056c5f8917cc804689280835056b2eb49a4fb05e52f3fa855147434c1d987d52c56995fd74137eca077b41533e55e89999736c40b9cee7e656a32964584c619d9c642a6375bfeebe5d2c0bf866f0fb1c35446e13ce7d8e44d57f88506b5fea233f8f1db56ec977962f09d06ebeaab5a546c5bac33b68a8d173b9656da84bd92f77e2ee690d3fd29f7018122454a9529fa9177777db8fc0e550cd5b9f70d481bb194381c6a1c1e42cefd5b48e3ae282128273bdf9d63ed8e91286cab25f02b7a67eebba87c374d4d5bfbcda9fa026f75919213155ae0a8f96943a15ee73047bd42310c23f4c13c49c170363fe69b1837d6160bf61e07a6bbe5905af2ab6987832a00060d8388c7cabbd9511f72cb3a152aa4d7057d1c19ba25b9614dba24bb3b0881e0e41876a969bc9dd8e5320e8980af9d6fbbe060b27c3c0eb072814925857a7b7b955d02b55cfd6ad98bd33f4491dbc74000f6ee4110819c3a912c9be997faec54e50c19a817aae819c26ff595fa1ac1a0460a715b0b1173e12326b258df18746f10e33c035da9268ddb87858a9b4f1591591239f2237733fdd8aad7a4a8f85f529909245328c1e3115fe29f765c16f2d97167297b865008c4a5811c4b0ab9c8fadcbb0c45946b6d0e7402441a12a88502bc2335ce2a4a2b57de64fe454caad319f9c80e73dd9170970e7b654044523f229415284e6a4683c66e5bd09cadf60ae1fd44db0161d4f1d80bbe7a10d3a3bb82e422b795ee1dca688cd076f8b4ecbd33688fd7ac893a036ae981be8b3c689d64f350af305c3dd181b2ac333606b39e8a185019152735c3c737bc35ea5a24b886505d961a6a2cc82d3bda6aee187a1649e3d26578e755bde0d06e40d04055adaf053088027b13e0f8f174466c37a13bf61bfa818391bf7c38c04421bef0dc665783d3099819a9d77a28eb9649ece654c608459694a592b9a89218705d2083e987c125a3ec21d2275c23bc464519c17c8c5690525b898c351adae897345a684aef7864c2288446291a4164849911684658a5d10a91ef2a1e9f11cf462366a371ce5f42037848ff76442012a868b47bd3521b92f3313b686b5218026887379880cb9b474f71c3d268e7ca7b814f1bd2be4e1c7b5ed2bc76b01340438556cb0c3248a4c3be7d1f4cf83f757393b6068d6472f23f45e84811fd97100726211ef3446990326885fc4bd7ec6c2fc302d94fa7d67558ea676f2fee85790456f24edea4b6eaa3180109624de2071ff6a0d2654399a43178006215aba29f88693a067d9f2e09c39fb9804122c6f33b2ed2958caa5409a4647d2ae2b8ea9488ac4903a198780324d446880487612845ce4f2653f3043a06196f28366f59c800c4a68642d9554367dc567190b405fd3d864aa3d742811175b4296b5b1d2c68c3dd1f6c6845b3d3b7a786cd092ab36e5530bd3fb4a15fadbaf493f1c30cc853c046219ac87856a4a27070929832f68880ce5b877b91f87755441a82e0b6e4b3cfc519bdd96f98fdb60e256e517d5a0df32ac9ca6ae9ef16c35d1f2d906f064e0d5e29e0009fe8be18177cd2c38a56df24728712f8bbfa0d2725a1b12fa2e5d02195949390d7e93b2f241d9732403e1231041092fde21b5bca288e9024027a87204bfc9ce11fd6f789b74691c40900fd17297eb0fc214514ace4a36941491c3094c37488d2245670b11ec759e8316c94b3fadfd20d899c0074c55e9b628d7322862e799034625d2d8c3e78ae180c09c59299b389b2ef8c56bff803164d04f5cde2dd4463ae0cc60ec9c9006606848934127ec4a539f3d845389a84c75652a22f0d31a299f426ec1d7dca3ec0ab96a030c4749b00613635ce779388e6e303c7af328060fa9bb22447af96470de85d3b04bc2a2a08b228932570d61932b08e7db3c84a47d8153c06ca872c62cc4a12ed270697f8bea0be4e4f6bbf3e01a22b8035d16264407c0c4ac136fc6c1261d73aeefb8e6b93ad5760dc210f95d2b375440e03ddca52a9a50c33e5f56b5e6304034019665a974a5361a79f79b082d87b76151822c54d79f3027865cba5bef42e0b18a9b12a50641c532dfc9414f2e6b998366287952ba3d004336c6ac161089f76cd9822c06d0bb01a8cd38cf23d4968b41e68374661a2bb1180610fa074b066ca10459fd635898aba625ea970120bf28bcf19e90f628a3df442244163caaff65c1299e73b3189960ac546c007deef8bc7e719ddb32c3320c31ce03fa021d429ed689a2c210c416a0a703b53cc2885c1a6c1c64cbf2118d1e740c0d559e13948986ecf5474a818c53b9393830260b778e18dbcbc12600243d2f6e27c986321ecc152c9a0ef29e2db7a412c828178b244f28ec37897f298c6ce4a82c9da4e4479f83f49a4097e2313f0940c5d9c59e9bcb76449170947eb2b38a088f9d528d2718d9f2c4b25df8573ac71d6be99569dad3ef55717a0165d57f0250b03958fa0d4cc35d21470863bcd9071cb053addde38b2bb8fd55fa76f1d9225ba4f0b3972318407bcf8e80aa6017601933a0c0e3e9ba1d3ae2129be7fdeca46a6af1975bbcc70a43054434c9b676220bd5f0fff4a01de13368773ba8d1ec50a7a3f9c8ec9fc262552ce6542b2cdf3b172abb8459100c32229b1901a2234fd3c62d3e4306d8676bb45e8016416def5e959cb9c57a8c56c7da95bec81dd7e2123d1ccc5be1daf2d007324e034a0dd839c222caa956bf6580088bb0de55c26401159384f2f6267bbcee3734ccfc7329177c251b8560f27f3de373297dc4ba75086af71b474645e06db08b302a90dd40b332131b8666d489321918df2a012d19b64311f81ebd94b4e42cc35d99a97b2d1efd8f6b8889fd25b19352c5046f3325903b463ba5bb0ac184f25673427b6d67f41e078926a4dcca4d7fc2567c87685d0fae67a0bb4000c1119241a99a84a7dff93e4f37cf240a1fc5fc6f48f08ac75d49654b4b74717bb743ac63273dd1331abdfb9e62c5b60e27b4174b934160314064901a18a6d18760f98cf89c64e980af52dc9b87c0bf33722bf45350f1c39cd573769216b1891ba3c932d8d2de758ff75e712ed18b24a4cffbf2ba9831efd14b5648aa207d82ec59cc8237bcf0fa3aac72bb0270f9ffe3003894c7b870c2207186e49568758b0ad4b6cc224b3cd41dcf4cba6988362b9458c36ec8f1d186a595fcb2986586091dcc79ef69ad5ec02521e89ccbd47bf02cac3b70f8883b9c3b39805058766ca3d33223d671a10fc713735e4e350e0b4dc24fae88308c62fe65055c3f754e6c36780531aeb3d61250f6b09b2df8e1ca6de58e90d93bfcc2d93b94e5c1ed1bcbdace218bc7c38cb4a1b57f9b5507754c3bb51cda21ac28414fbbdd918244804811efebd833c19e29408ed535a29e7fb3248d47401aac46cd06b4f173c38aa45601877c1194c78f66260e99a7eb8261fe688781bb74b1bdc31dc10484b4a0d100f3eb386e14725480a81c9938d8e2e5ff0e5311d55e3593691000fbdaa7b2d2478d22a726818a9699fc3d268fe06ebc8f069eac0dd4073924e756ddb63953cd01a269b796782238c83b21730a8dade5f0ffc370960f3c90df0bb921a86234c96fcc1ace2e087ce6438745922c171d766343b2ae9133999519b0925ae06ef2693e804974d77d4f5d1b5d6d08e3c71e0a54522a0a9e2eeeb48afd0f137cdead8129356d4f67c3d5bedcada7cb06faa46132504a915d096aee09e2a0f8d2c93a6cfef509a77f4d29efab8671fa837fb98f3ad6a8665fd3ebe213fee05c87ae08f6f01907b13b29efa23b701b9271fe85d3eb88110ec391f37a45498b9cf4e663143024b55d06466c33d6adc48cf0b0fa7e82bffc903c713d7b2a11b4d11ed5c6d4007d4b053394d9936bb4aeea5df6f6bd60d48923a08504fa4eea2d82240b40004d268b26da3eb23377e0661189dde45e2a67094fd022fb933ed1c3f6ae7bacaa3c629d4c05fa80c1985f5c7530dfbc2894ad249117010497d94e4dec265cc6da895be29333902df1956aeb830d74f1f61ee439c1050b10f6b65959e19df6d245e88d6c06f7a372f7eb72d62c1b050195edbcf44144a1d74c7a54e0fd71242c354ab0ae4cdfba1c3d750940e5650a4dcf1fa263cee4c9239d27ec39f2f2fa5dafb3996483744f8af82be2d7f3b65fc890cce0868bb0558a46c60234c950fe5c08632e04aec7b5d5fcc672b569460039716012750d98fedc636ce41faada950fd66e81f591bf14f7774ef1be50544343ccd1bbe37e8051a916f2385c8f2f0d58f16c6bf5683e46cb5098f22f16d56aa089cdb365d3606e407b6a1841d14bd3c05586c1bc82ef6a4b7ece2f101d09abb419fca1ea9a517b61d72aad72e1a1abd32556e8e46f8f3ec9954d73e8fc5ccc00851f9e3770bccd548ab97ff4e64b06043969340c7be17750bfdf01d25b47c8e4e201e7c93c9b3cdd2726d61e4ded7ed40b4285155b9a228f22689869c36006d718c34b004a4c78a9a6efa8b2f5095d0699f0bd219dcc90f9f2b01f8e539652a2d8addde558af0a518bd9e08e32e346f6c0ab2fb2ba4b9408c82025a93388bccefe6bae75d7db0b882f5e1850055903d31b4159cc89fdc47e0c01e9bd1d19ddd8905fbc935980357676fe6d12d4753f006d60ca80e6fb52ae6a8807d3a6013c4385a433f535ba882fc4252f7215d7f8fcf1e01d57f76474b37900cb967a14acf5b60227532c4e25d9a6885cfc2a383da69c12a5a5a5c7ee7b857c5aa2abf81016e9dbaae31a895e6c261a8d7094011cb793c69210bdb08361d9bb8721836d37ebda0d75368f8293a123dcf72961e03e14f04cd0efb5bb32d4dd446756c4d2d1272ec61c33a9e732cd02ffb5166b95e49d5f384a26626c2aecc16a44c2200bcf2e58f03b2828d33af686ba920e3a04027ec21a4851cb8709db4b1f6a75108b59b2508b4229e6cc0f4a552e9d3eed440ddd4db29af797753411902e57b3104b6af343703a9ce1b107fe477566e1da2d945f33269f4bb54447ec9233d5064f0d314009935c5e74c3f60f181be4ff216201333c0ad3bcd2e3fa3d9560fa76b4241f230ebccce53e9b8267802b95ca6c4ae94495068de2583cb586d3947c418fb972c2b307f1b9385c79bb6677d7659e5794957e41397b59ac692f8f56247670c2363e31485c10c534f16e3c75444694570dbe670ebcfc00fad7f8d4f771f331f0f9f5b1f101fa6ffcb49b52817d89c6785f2abf2efef6fe8c7e57fcd07cc27a58fa40f7bfc7f79f7c0e8dfbe1dfeaf2900e734edb0ae7b006500f9f878fbe06e7f8a5025ec133f7ff70ed83940bafe5ff8fae1bbb4bfaccfd69ee51eb61e8a3e95fd6a2b00140014f8a0f97f7b1ba605e0eaff6a00b8eebf88ff2b6078a9027d46b243d087aeeac939ff73ce6fb9c44a36b3d919cea0c36a3e6e8bdea9cd82511ab00430b94d935b537b9c0e4ba4b4f66427be66b2921b0e9f3b5bb1654b0740d1bc723362d3f9f8bb221c601019681b6a5b508cc21de2797ba3df8051852b12af1e9531dde86c200cefc0853b322f0ae6be3fb2eb7dc58946bceca6653d907d9ab1b40e628f193de29cd1520e3a601d1edc220c8dfaed67e39e64671d194c62f0f84e34712dfe7399cfa83a52117fd4a5d6dad690af1953390419e063469602efc4eb803d7de098542371f0e51e0c5787821398b9a3a346270d49b51336605497fe7c20450e857c795176c24447bde217fb296401b0feb0072726aaeba956374299e28406ad7f7735ff79e21a6ab16b28215c7a2278f20af51cf0ab03fa7e38c8a65f0990a0bf7407d4aac6eff4c854e5ad917bf298597fc1f31a3e872acad85f12b7ccb2e483feb9613b0f863ec2080d619973020fc5c3deb05b682f87c0ace872105d6aa2cb91322fb073eb35ade5f75fdca9c955ed2d817cd86e3c175787d80a6f09f0f10db24f242546886ee0e4718ebe3a6721f0d90444bb7a446cdd8746e0145f7ae8a83a1c6276b48bb82c1831701d207c291d563076a164d63d753ca49c4b9a405520c3889648540f66f11ee242d55a4aa4e25bdf641d4cca920dcc3f390429d31f58a51b7a243a32f03aaaaf17dc067c5429c1c250b05bae7fb7ccd9713b1e84b4008e1ea41c132912b4014203544e120f199d02460f3a0e8902393d80a22d22278886880640d109f4169fb11e7335c42aeea50eae36419a272231fdd947d0d8fa08a1b6680ecf9eaac39f2012ecc123ae7716422a798dac3aa47b99f65d89e773c0c8dfa7bc6528f6f823311456de1b39da256f3024e614241f417f6f0934ba27032481786820f7c6ce52ca1c0fe63f0761f16bfbc3224e44636703d41488daf61158c3ad016c5b49d5c87ba7e47abcd6bc40e6c008e4ae59d9787add8a70a62a92728f7ebb646e4d61b1c625acf9d9dae591aa849abd0c2d9bdd335ccffc45261e5cc38ecce3e7a5de2a45ad5eb534cf74239e01647f3309fbe9f973304e78ec3bbfa90ff084d0fa6bb000d61df5d7e06ab4a1aeeb3882ecfc7b7739ef0189d2a6f054ef19bf15921f70513208cf5d361e76bdf1009c4485cb9303ecd49e3ae4e076013ac16d1006c9aa33403bcbdc7cf8e5dd82ba4fefc5b4749fead74c978763a49e01c8337efdbdc88cd328186b5b1c71b025aa4770b480e678ef08c6bf79a953369888270427b7ac6a962dbc2d2b99034ff5fe621f0dacd8d4f09f7ae721056645badf7f22467ba0ae24aec1758d6a8d7a657125ce42b7f52bf16f0b02ac0b38a60046fe34422fd694cc767222424c3cac1966f6e36aa390aa18b2d11539aca126e68a20c565bf61f1d30a984f607dc32ff1132a7153000c6b3dca7d86639223edba350828aa94c81afdced92f1c08196a58d4020c1995e51550642540ed53dad591dd5bdae4940961a7da3ad8bd00c543e05985be42a95029d454740a34b56e4a8d4ea1a6502a5050f1a049de31821ebe312d6871e4f787757d3c3e1a3dfaffa27233f991c942a4e1928f80c4655fe3b312da74e86301a16e148d19885ac5cd3b135d60f37db1d6c07d590dac82c5da13a91d18f27c5e569b39370b196458472d310863bb5bcd3e25ade27909026253721a3cfe1c8496f323507f02d6f4e4e817b8bd62c97bfe851bd7f91d77ad9cfe58f26fb38b611b06dd6b9fca841accc27caffc9538665fc64613c974b8b8eb2f732fefd6cf963fc78e02346ff971d7dbd0b9fa997f52feab867c4e109c0bad58022e3837bcacf0ddf8504e29ff85dd755d23d233ad8fff263366556ef3c0f1fb721048bb387359502eb528856f70f415ada80e60d6642021f8a8da0280d88c9774f9c8d92d7f4b8ae7eea25293ca3a3f65a805203befbc0ea02d9dda11293a24c0c7da0f88a467953a64486241b1ddf4690a195064e4c108d920f4315089f796beb80b4549e2e23f50c69c7105d1609648f25c3c90523093fe7002f7189ca86d3e54177adfafe75d61a1abeed36b70acde4bcef03492c6e94eb9fa77a0154c63a9870f4336ed0df8a967a04a8c3bb72de92521a2cc9a433dd0baf6e2fde606b8aac8b52540f3f68e8e1a90544acccfba97cae9af74c3e39c890daeeb09bf13b2d3552d2b8400c7401b1100c7767c9b3c97c3edf1263a1f6abcd3e5b47bbe09f5f6128ea7a3b587d225f5bb462c1fee1054d8acbc9c490083c3fb65ecb6418bea7a8559c36579f26277ce34cc2d4f86d3e9891a6b83dbb3600c66e601598fe5b63b595d4c9d44956d75b4b2fdf42548cdcb2a805a53604b738c9280517a2b66c50b5704da51877297de3ca627fdf7a5a9af68acfc865263036239bd97c168580b29d98a35db274d7a5dd2272f403a110bc5278973d2ad9da77a4d201b68a40d2b32f1d76e4041cc30702e3002affb1c1ea60ecf4b3fc46bab53db9db563541fbd18f5dc941505fffefa9536fc536aea9ca85f221c14072eff032a4d9a10454563f2536b3acaa5d6e203f5a8f43fb78a3234096dc146d08c9200cf3992f98f84358d3c481b0308b9257655ff7254143d9da1bf992a2b7729c45179964562866bcac31e4f38898f8250940e59b2b7407a0252ce91c49658ac6451217a5ce3a2a17a4da1acb9124a44966e83489d7435b01da172425c7e329f5a2e21ee74469771f2936d7b25dc86b7e074262066816257c303987233dd06f986760b09b70d426b5730a8a58767cedfc1c0362516dfed9c3adea87f2ddcef5b7f1a487e31dc15b7497fc3330fa871470da7198b6666cb3c512eea600ed439aebfe1725da7242895fe674280fa0b25db8676cad73c8ab32e3ece8ad9005a8b3dbf218a26921ceff97972c1da15d328e9e3d5a119f13a3215a20d92ce0cb2b8b3f4c6175d8bce916f401eba06955f3699a127cc770ffd8679ea048b44932c54c1016046995776a9a2816efd03238a729f53acf03dc1acec3234a082496322581f5d6a2f4dcd20bd15b3442c76d8d4e5a99a634cf00a1070a6d4d92a7616ea62b51bd70fb98c8cb06656227130c6facc8dea83cc247f5596fea6c4b899928626766c19256e6c06354a24b47151ba0e5bc7c1f4d5999cf8e812e38081801c0eaada59d394cab66babb08f08c881d783de5aec440c5580ae1630a9ed236359e2534dbc5de76a4236f051cb0c998cd6a4db6da459687bf382f67d26330032196f69616284348e42460de3e98b99754ba121cc9447c986741f9ded070bf918922540e2f915e7f38140144ad075997236569130173b64b6218257482db2ea9ac66f449730a912e306a8660178b745c43aaa8eb8199497bcb748666486f74148d81ad80d4872d8cab810835c8b3ac5ff99825142cad6c828338a5cec8e868ec3b89144b359902d1a2c903584da31b7b53aa8e70e62481369272f6b3036c279f20c05ed1807f6ecdc36e16fd6bab6e7d4a0640e3fc145d94415329ced02e707015aa8d33afb5334f848a98d27595efe5b715a3c9c0101bd4e00b50e995b8160a7b003c45246f49eb1bdfbdff02e88334d2d40c8f06485341327b4947919841c258f3a2d371edaf98d4375971e057ecd30a92323dc2cb7d1142b6a2032af3435c5c18571a69061288ab75055ac5b7db2bc80efe45d5ed6441fa2bca45cf8498c08067d2b3d74825818f6ca62c0acb7a8dd4f325095b6f5fdf8eafd6285285d1ea477b567148ba5a732ac7b81a78c2d1e14f02bfba37a3eabdfda05ccc9b5f0037a7d8d0068a53541b173065cb811a55bd6d88485160dba48c8ba1d89f8cca1df79ca7fbdd5eb1cc48dcfad1f0e73b99baf034866f83928e0516c05ac20d8de1a49d1132eece181119680a45476a86b3778820e0947eb9bb0bb5c001efedba4b7016a80353441edd1e463df6513d4474176c7589163ad7db38d17f103ffa9ea79ce2c86ad0dbdb097b86f11ee5f2566ebf394b9d4a78b97316f650414761420dfa80d68db7a16f908f30a012092e3944894e0efe58a53a4e2d32a2c236c23386b9a2378a93257a870ac2da1a0b8d9637296278971d44ce95d1f7215b96f1db359c7e63e6382b54c1bdbab09eb5104a29d57cbbf4ba9d6d30ebf9f34f9df3c32f5bfce82ebe0d8f695a9fca3629dfeb07f69c689890cd8e4ffece8b9fe189b12b0d330252b978764821abe7e85b5e8fa2759633c68e3ee7aa48219a50ac5214b4713a714c28c2ba6c027fbc70b8ebf651a9f4070275811bf53cd7349e6139f12447f5a129b15216d8fdcab5fee03dfd862a3495d3052fbf6e2baeda2b687aa877a453cacfd9a2ccf606f445b7792ee635babb37110a18aa38482eb9f1ee1d18260ded46bc15d90cf9c9bca8f0b6e410078416b24a2220cbefd4a301b94cdfbb3185ad1d1976ac17936c66221b37757862fddbbf6c3c473c9b8cc5b8018889370bf012eaf5652164a16290304a62506b0199c0834490cba94c15300c2a38bc52dabe398c15b46308487a3eb53ff1ac7a44ec790ddbe1902f578b4a3a43878ed2ee3a3834f60bd70ff904e74ee9c42a077c481ba75dc435a5ce096e2a6c5e74c918aea5da8902e916d15c091a430c14765d9eaeb36356d42a15503d47f4d44af5cb1d4d584160e9d067f884a524fa254a816d4558a1747cdb551a2762849b6507fb508c7fe529148a1199832a0b152999870480afd93f351ca8154657175a07695c1e3e47074bd8f758185d079306032cdc9f66329569ab9927860b820c1b29e0ab21755b03e8da85f4d90ba27deb142854d1103da97e1c62047048b32d1b5b3b5fb9ed02b286e048a7a21f504a9e863c1851fd4d1ca7c658b78e28c10bddc29762c0fff589859a7be05fabb0444207e9de98025d9dc0466fbf4c34ed5495ff080bae424ec022043e77a8f3374c17a1cec804c2f73814ff189038b24213ca3efab31d8b9f0d27418b405e00d4e4f52b1a43ec44a4500d3893a90268aeca2b0d36fa5333763002392e762b4cb5183df34ed383ad3b9de0d1e6b62c05ded40e36790de607cead9394726ebef47d5022c544d12b434d747a62653c07c5bf51ee96ea31de23493ff6078284ce2856a529e1643ccbbd5d957aa959f466f780b5d9d44cb1727e271f2b9385e3361dcefb95085c7ed645b0a3fe6aaf6813fe2ac5971250eafaa75eb61712e5e9de26c1481c7ad085ab6aa4487cd273b9e943d0e246e3a700febd364b74158a4d5d1efb8b060fdd10a817ec8ab95799c4624c45efa8060e3d7e7f766fd1f9de267ecc1b94f792c75bb10267f453310266580f2f79b325c45e166c71556ac4f2c344f3effbe7ec91d73483ae98db848c7ec45316593d861219b32add7969ca5788d66d504f933a475c71816efc27166373546d4b2841157755b7c026a621ae6d3b453d2e79609eb92c5d845581057a3d32278899bebf7468b36d782040b25baaee2bd4a1197992a4053f320f0fdfd73fdcca84c3f90047dea2b32576ab07f2621977aa766c32776c95975ad330adb5f2344979d96d2de546e1b143f8c22ff636ff7e5641254131cb88b186f2a208dbdcac02404611bc62b907b984ec68001178ba339ba53086547a3c2702a09bea750a239c29b3fff7bb549c9ea0d47004d18c79f21fd7006ffd67eab5646b7e18a12183f6a3445c4663e26f40b419ed7112c6e417fb7538fb167c99ed33b3bcceed5525bf88057c66d6ccd930c2575387c531af30c666390c3b8b64ec329ba5132ae5380391d4742238d62b25ae27dd5172af345c6094410d4737f5ed290645aeaa5a5154b1f576501ae22cd462259ab31ac24c302d0ca2a9de020724742eb7d99f0f235ca947ec72e0f3df6a08feb7869eba39682e23b66f01487c7b507c37e0ad94b0513d1079373e484391f0a4f96dfc8f7ebcabff203b900fd13a34d61fdb1a7932be78130fe2620201c7601ea87b1e7e691814523100d2b4e68865a83ec451685cb7580b4fa5d60b9c8068895a08077d4980cfc5eb5af424459bb7772979d63f97112e2541a0ab6b12deed20324d93f48a6edb1ab2c6e25ce5ddb680074072b4e2a4eda19866a143dceb917ae329830626e7b8b94bd2a90f3068f5058d6f6928fd4f5f2631374ff91fe1fc6812beca042856254ec7f5865f68d3a51d142ec65edf4c106a655ea2b8bab12e985feb82804a8b95ee62ed2b3b5bb6407225b127a68a0f38c326de5244fe5969e95702807462b23b6833c87ad4edb8c977b7783c25fabdfba009bb8b0acd4de2d8708a2e3232a07489d0a7a4e117406c14da2016c460610e7394a71fdb13b39a85a694eae60574552a79bb6ac1c0b26c1e047a25b811d26c5caff5c106036b6894b2c224d4708e77a301ceeaf86a775a123949ff67f63cf782a3627e24efb29509807dc947037678964be1127fc8f0837ad9d7306f7f331a6322538675322c504256e1cc82cab36ab059ae2a20a8d6c698c1cad0113458709bd67c711cb2dd0226db13b0702ab92796713582a5dfa9fdc68a00eb7964b513a6be3ebb8267c2737df258be00b143453fc5b1a907fe55957daa5cbc176587e9cfc6f0bc5a44053b4d987d15801979d09b55dc12443da35e1011b8dc8d2928c6ba6b3d9051d340a26027c8c020eca842d0c3760b26639ff000000000000000000d06c948891862ac129c99449133021e39728539252a614c9eee05d90ab91b686ed226df88b347e051ed30b170c3b0cc9b00f9a0a95652e433ee89565c39eda9484b80745849ced2e5910413c7ad0d3858f619d3ce8735ab12967abed183ce8dd353108cb1d3477adae2fb149298b1d749fd18b54293e27d541139eb35fe592e9a0c6eca53cf3e23928923e263dff9723aa9683f241868b26951207358bb6ef98381cd48bc1ecf63f8dd0d31bb493653a55d86e50828cdcfea7dba007956682c4be4fb16683762a8f6ccd9d7db4bc06c54f7c10cb7f1a92ac06eddd921239c569d0dd8452a7e9267d8ad1a004c9fb39439f4970cfa0755276dffd29e68dcca088bfeeeb302a831a7a748e2cc12f74326842c7f00f57971fc43128296bfcef2074fb433168313ffaaf2dfeb8270cfaa6de526264c8253c60d03b6b7e846bd9c7cd171499533acebef5825ee1714683ccb7dcb60bfa7d8d3e2ba1cf050c800bba8e268f142acc966c0bbae5f87caa224b4e961674cb2129a1352a563c0bda597eeef3f68e37592ce8d92c62f88c0a6391bd82da2146b6389b79d70a6a64cfa0494f28195405bd2e73f8ec3c15d4a0654463b6738bf92968a6d445ced64b41ad9fa0d926ff2192a2a0bf5ff58efefc911b0a8adec96fc2749ea0c58f5fe2316ecab34e48f5dd8de85113b49c72d28f27628216bbb4b6c65ea44d2e41915742e5d2eea94ea8043d9350634a8b4950b4e734aa454f8e0c91a08dacd3cc97b3743a4750cb32c887cef3c9728ca089bee4c184a5084ad08c0d9f42bb520a113425fbf243125ae7bf21e8614ebec8d95b724f08ea8f6697f4b120685a732c7f6850a7332028490815b27d7ea0e7d30fbfa32b5dc7079adcbb0c162e0965a91ea82db9f3a624935ca4100fd4cbd9f5fd13b4036df694d231e161fd0f4007a4f821f5689330807427855c8e29c7816642ab7305cd0d34a54a4446b89f8c691b28712be6cfc9419bc8d6c03c5b7a6385201a6811439b5f8c8b4be70c94e45da7df275ea9e00064a0e4dbfe74df492d62a1052cb48ad421befe8267cfe40bb478457db416aed022294f11e7c463725aa15949eadcc9c4fb6c58a187ad7b8b3147738a598572e12a7e9cd820cba20a4d051d444aa95b5cae5468ba46f7eb8b701322890ab5246c8e9c6c52d0903c85e6f92d638824f38d6f0a2d8cb68825f752e8317d5ed2deb1ef4ba45027c9b6ca4f2e163b2b010fd8702d46a1a7b9d47727cc1168210a3dc69810eb73528b50e8399dea1f2df1da18149acc4b08ef3184f6ec27d4f07153c5532983f03d078ebdd139747c7c68e1092d68096f3a88a5eb6c27d41ba5bb932515b2479c48f75ce2693fe5d0c1e50b2d36a1bee8cf7d7aa2ad449ad03b87d297938cb1319909f5fbe3dd9d9850832751173a4ec8f2e025f4f31ce32b555b8e17b484926329b31f4d25f4b0d0dfe115a4845e21c560234edb848793d04de6fb0dd9eb4e7328095d62c4184b26afd8194642d9fd94bba3a9632708093d921a553b3256ce21f80835c3e538b241558abf23b49c4a23ed670cc97923f4144f9dfd2631420b593ca5d37227a25e84aee1a3c38daece10568416439324d1217788a144e8a5e2f54f4a73a24d44a8fd1a217665b56578085d473626939345a51c43e87ede27794487f09d42685ab44cfb53b6ec1d42e811834e42673cb5f70d42f9f2df74ff36413c41e816c472cc41928c3c109ae75f2665694ecc0608ad3caebb5afb83be49d6040b8b179bf941fdf0bb0d5e1a92bcfa4048da9bb62a3e6832ebc9df241d3bbe077d33c6b4a9d4a6fbe84189b9596122631a591e3459779be3a5cd1321070f7a521937cf5b3efcbf437d941dd43f51cade74cafebd0e38d0820e5a5e082bcdfa08b23407eded3eb3ec9683a2ef32881c39a9831d07ddb744cc6d7271470c07cd43f890b4b76f50ab237c98acb4935a37e8c9b37fcb06b54197db90418f86f70a628312ae924ebee51ab4cfb125c43c71d404d5501f31d0220d9a10e6398e28d371fcf51d3881b223010fd8e8420b3428da6772ffe70cdaa7cf154a4785db1c33281e528eb9af74ed9741b7cb7e3b2982ba7c2183566329346dbc4d5d19031a9b25b7674c0c6a96383fc23ae4f430687254b29443ff9f123160a80f0b68f10535e5e620a93ee77c2f1866422c6bd3172dbaa0a9fbd09a7f83e5f5450b2ea8796ee31ff92da841ef85105cdbcfd682226a3499889352bb59d03e9b87f18a5f6dc182fa1a39c8effc0a5a7cb0493eb715f44d324afe4810117315d4a031857c960ac91cb26fc8415350278c46ca33af649182a6b2b28de7360ada6c658ea9868292dbf257e91ce736f4046d33d7f69e4895c3748256622521ce76063936418fd7cd71a393466cbc68c10465624712216230fbcf1214d391ac82cabda9354ad08464df4c4ac949295b8ae8408b242829869c3663b24c9d8204fd254db094ccfce21b3cb6070ff7c20b1d3b7ae4389b81164750c4db6bb2c82f15cfefb5917c078e05a3940ab4308226315fa9f0e597634a1114f1fe356e9ae3658f08bac754ed5bb927a56d087a0a4aa84cca368256086aa70a9ec4e5b064551074899fdbc95a43e681a066cd0a42881176a31fa8755f5f92ac753f1f682282df6f4c3962ac078aaa77899bb65e2f5278a0bd2715499570075acc315d95e83ad0e3b4660e5df1b14b39d0937cd11f16f4d6b538d0bb357fd0314d73a3d3e2067af8cfb55fa5f72fe8b4b081962bf97e3897a0cd3c2d6aa0d5856d87e5ce133ea7050db40fa9736326a8deeeb498815eb1ae3d588994849ab590817242859c92e64a29b658283a9bb7fbcdd6880c16ea7e8c7f5f5749ceee156a904143e64dce15bad65ec41c0dcd21b956e8f169c492f04c997156689374ba5029a83ef12ab4f3cc4159ae8b1156856ea37c7ce3721d59a442cf1a9272effa0ca1840a259f2cfd5d21b9ba740a452771719f9f74fe943a4216a650c2a690bb4fcfdc7fada32f500add7c720a7a91429317bfe5def43fec5128f9eb622c79c839d7a2d037a5f2cf6b13a1b2a1d0b3c520f275c82b3d2814114232515b167e419f504b86e6f8c81e2e853ca129d31d2ec2ec8472761e27e91309e6e1842e23ee965dd9849e2ea50c26838c49ab09f5cfb22b299d2c8b9709e5b3a690c2edc35c8709c576e3b7f34b682e2a9c889f15626496d0ca75d28ca42a719c8c571e9d128af2e413c3357488213609cde6fe3f9ed2631b3149e89f74be0b116291d04b58a5247b4ceee721a1c6b4a16308cb31b77e84a66984f5f6c97f92230af994361df11a741af1879873758b8811fba492f38e7311da4b1296af6385ae13c94211ba295db3195468bc13a1695710a64b2fb20411a1c99d199b108348a243646188cda2108a8ec1c3845173e53145084505fdd7fd20d4a4f373dc18674b6e8250ae34929e984efe4905429b98b44d092f95270f083dc5f68c87ffa06b852049ed9e8f7e9cc41f8b549967bf9176aa0f9a2eab0ce2ef77729c0fca9db29043d5c852b9215287fbd1bef5a0f695d2753a772895ce83972ac90d3f9b03811d4e82e45e1c2fb2c083e62eeaf2f28b05fb0eda9dfc98cf124b4b64076563981b4b5b227fb20ebab64790494ce8bcd041c997a7c9f65c840ae7a029fd33e23eebf62ce706d6a9818105d45880066a7451c31e50a38b1af50030f60b52399c04480b59c8411bcf103308e3a066e9dca49f8183fab5a7734a6f5027e7996eca18427c6e502484113631db062d8f9613da4e99cba7bcd89b40166cd0b332c8083af5c63eef388b356842c7feae0e1991335483de61433ba4cffc933e69c8020d67506350ff399b2a99d3edca2e908519f4baf4ef6d1ef3a5a02f83322642e674413e777d64d03483c638b98d41fd78bd79e386206b436e6006724cc02ae5080395200b31681b4789bbb5d8be8f61503e77caf49f5cb4c78c8331811a5dd40043c78e04e498408d2e6a34e0e3630b598041378f8fad90c517b2f082aea3642ccee228954aeb3b7a5c6087bb17db5974418ddc9d73414f67a25d116f7389120a42165bd0bccbf5628c978fd9f5200b2d282a4f3e336ffde5eeb3a07f4910ef0bc922f409842cb0a05de9d3f06dbd97b276052daf47a4f8ce1872ca58419f33b3ae9045150e0cb2a082a6a73169dca0e1539e53d064c44cf0d2a273b22305cd46c6b01d2428799e8f82a2edebbcbf4bf7c61b0aeabdcd488c91e632a69fa0c9cae16378d3096ac91e756173febc234dd0beac762f54f258976482fa219630d111baa15e823e4ac58eed75963b524ad04fccab630e1609a9cb093248094d7ee9b6241576477793506cc28fcc934a85724d126aee7cf964044542d369743059dae43dc621a1670d3a3ce5cc3e42b998c34c4c8cfd782147a8b142c6b0196723741b6fcb0ed33042dbaed820268924cb6c11fa6e8c1044bc14647215a1e4ae1abbbbc9d9c54a84d6c122974c5521421bd17c79f32456160fa1ee88b427d46e5276111986d03458e5dc9172e51053f20a320aa1e6d0ef49726a6060011820c1013cc704bed0b1430116f8f808c00f641042fdb08b59e208d9d09190023206a128a5bfe26fef674ed6b60d137c710a6508428d9473c4901c73838c40683a7c1cb5297cea34498050e298e81179f2d967ff837e272e26899184cc98fb414f6962d070593be598faa0a50ef13dfce3cf79121f14ad3ce7b96e26584eda83a2b3a8ad7092d68392365ba6ac1f4a8f3a0f4aca652246d2fa20268b072d854aa7f2e7cef815ba831ef74c94e590be5252da419bfd70234fc5a4cb397550e6c469f7d9df945f3ae89fc384bc14b23289660e6a3ad7f8292b57cd7e72507f4792b6d415ba358b831a835c189593e9e41e1cf40bd129748207595699d50a1c0832dea0287dea3768755990e1063576fe303bcf1d82e5dba09b3e19477fc7d9a0c793f9b7f442e969d6a064cf18e6b9538859520d9a8c4bdccf944c839674282172a7b7f784685067333642ccdb19f4cefe733229f11a93ca0cdaec8c501db62a4f2c16c82883a2f14944fe7f13562132c8a06cf64c612f690c6abe13156b92cefe101643da533efdafe9c5d301196150aef36f5b9c483fae018316a3f224fb7879d4262140c617744b2729e70cfba2c244861734a1ce338ec40f6bd7d720a30bea4beed18ce59be26d32b8a0c65c17e3790e298ee4b7a0891ca5e794ca9f3546285005195ad073c8d15992290bea05b19cdbd9485ee008834bf158410f30bed01c13a8d1458d2e6a78185eac066a74516305fe801a5dd4a0408e9281052d7570db4c953372a46e601d1957d0b7fd248e778974e2b28116c6043e3ec2d0b1828500041cc70e0c60000235767c7c70aa840c2b289e3dd609edb1f399aba0ff85898abd2c15f452ca6eccb44375c84c41f9ea982ab257a480e8aff6ce22a92828414607ed15d27bdf50d0f6bfb7b486c80dac1378bb06fa20e3094aecc9952fc5fcc1830c27e87f26b74ca4ccf217a2848c2668426eebfb05cbc7c79523010fd808810c262859ef2a6c4d10a63edda3f4d8e128e893b10425c804f95fa37d7e827098a07c2143099a26cb94442ab1e09a8c24f839a7b0b3f797ab5f810c246825bfbf3c6d23cb05328ea0275d735f324e64184153212425ddf196510435ed26f1b229c598a90c2268e225c46c17434a903104ed3a2c9fd670eba08442503f2c04a1b95382a0c5d80f8f11f5217b13820c2028932cdf6357084af7040141c60fd4129d33cbde4707d5e12181e203193e50e627f568654e3a26b18c1ee863fe2e1a41db05e1ddc04a5509401b3690c10325658b6c2d53569d5e19c8d8813aafb164ca720f32746190a103ade4b9f884492953b2bc202307da9bca2573284b0b3270a09b4abd2105afed1ef50df4d16cf7797657b1b7811234d7698ef31343c45c41460d347dfae9644c0a779244033d55f2ff9b9076d489cf1364cc40cdbbd35a96946c90a43941860cd4df0d92dc322c4b88110b2d5c8e714fb489494ad98418b0d047e3530a67b97f64ec8517fb3c70a0e318af502b68ea48a582efe85ef0f65081e738b3400c5768f973273aa7fcba98e7b1362c462b94e41f63cbfe291d23b98165c3460f27414620062bf418a721e8ce92654fe7851761bc8d1e4e0284408c5528622222c612493b3605bec38671400c55a8f7133b747fc42f190b83470fe7617516102315fa8653f379626989259bb3a307181d0315bace870b2d1ab2299989710add2fe584f33d11b22ec50c314cf188ce7f3bca63bc4aa16e98ee9f203b87d9164d2106292c11ebd3a8a03758d028d43c9f5f740ead39fc269d1043149cc867b9b2ff62383114ea8d774a71449f5688018a2d82aa92c9e193fa6d901a1880408d1a5da41d3ada2d60f586189f5043c2fc78d61312627842d1adebd72444b81454c508313aa1e6746f1f7936c42e8f138a096597633e5d294eac083136a10871975b416b093c218626b61832f3e644ef6c39ac0a8cfd224779418c4c98f57e633e8d092f8460e23f7809ddda73595528371d47050c312ce1c58bc965c256cc6f2514954788b0742736eb8912693b39d9e3c624a14968e2d7295ed2d639c55912d9077fd7784542b909ff31cfa4383ae6205165f8b37133113306623c429b2c2a7ed2b6edf01e38aadc0bde1ddea301080d311ca19ebfa5ff70318dd0b78498db38ed159a6384ee1b4f544e11b2083558e99918111e4a9614a1a6d03d994fb82851ea44e865a1843efd132f9c0e22b48d19b936779cc5ec0ea1e4b6b2709fb1497a43e8497d04b9b112ea6e12a310ca861ded799284b60fb1108310ef7707f79c843d088328db9027f1927ae31043107a12427f4c92cd8e1f0a843ed71fbb454eda8ec12bc4008416a6cbc4824e4a2496fea0b7c6ebd7b24971effa41b3cafb54e59fb2ed3e681e9f37de04eff8f2f1414b2a88c99d2fdf83fcc410630f4a9ed998ca2b5852fad7836e29a8f3246ece839e3379d812aa4b2613e141b714821c8b21662c8b7750748dec94d3e57e891d3b683daeb313ebba81656188510745742e4b694498eca6e9a06712216ef6b1a0c2685f88310744a6984ee6df18aaf472384e4bc4b030a79296e2503e8939dcd76599a08683e952e70f73da2af37dc3a12be58d972dc725dd50cf29f1bded2adbb02871daa1e383cc06728c3a312a04cf1a1c3be19663dbb55e8e1a0a73e26276b82499345cafa1f3858e0cf30b1a9238a9aa43053149e8ce4052dee9738ae517b265864d05f713ef0e3eb13228694f8cc66021d6fb645053fa0eaa827e0cea27194105b5c984a7c5a06faa132abe648f9dc3a0f6e6d8ed0f296dbb6050e36851f312d457077d41eb519673fabecf0f79411373fdfcf89f7230bba06eaa54df1b3c8c8f5cd0cf5d6324f9aea03f5b504c99a8e09dc4c6e96841cdc9e4e542858bf16441ab91c1b73d070bfae539aff41f336daea09d59a7b88e97628ab182a2b43a25994624952d55d084d7a5cca77d0c2a6819627ca4bbb2b8d7c79802f1b47ca79897829275c382d6c84741f94d417e283914f4b0b1dd317f82fe1b830a6556fa5772829294451041bf25a6b8096ae5cd4cd05392fb1a4ca44d925d82164443473752771a2941b1ecbb49bb2c960c4a82fe7a217ba44af9220612b4cf516f328e47d054c41cda4eff4d168da0b9e77748a221890d8ba088e94ca6aab7bc4222a859ffed47e836cf9d21285f224eb87825647e42d0448e34294c41508488eb89b1d8dd1e10344b729388adf851fa819a3694e9b1b6a0d23e5053c539993da6b07ba0e8cf7417848ecb9cf14017bf9d74e9da816e123fc54d5c07fa789e3856664a3fc473406cffff1489810345997ed331ec2a7688df40f192bd533af36ef336507216ad5cf3ef5d790d3415be33b29b68a08691db483a6bf2148e31033d6c8724948c08adc7908192723af5d7b3b9d31b0bed3b6ef6c9a17ccf8585927e2e44cc153b5ff215ba9e321311d307ada02bb4b692e43165b7255ba168a6d161f1ec6263855a5b2629a48ee1536715eac60ea3495c4ca48e2a14a192a6d30bda346852a19f6e4a72e28cfb5e50a1fb98be75dc1a992aa7d0c248d24949f033df147ab20db93be9a0c2a9149a75f66c7c2f9142af14fe3e769763cea55128726a4ba2d0363b4c85f94922c5522834cdef6adfbdcda14aa0d052c4ece1b225a491a44fe855d61e273cd4e7ef096592b2dc9eab4d98bc135a321d313a6fc5a89c13faa4b0525f4a9bd05a535f992e19cb4e9a5042cc152ae9533d499d09756483e5fd9319256342dd2094e58894bff6bd849ac325c796c93126d7128a0e195c84be18fd5125f4e0667aa1a33f5e88128a10ba64fe3c092dc7b8645e32281124094db3eca92eb3983618092d75ce97ec09396448685a939f864e98b09d476861f9fb365efcc51da1a52fc9f9547f696b1aa15c129772680a23b4f4997b15537a11ba672bcd081f93474a2b4289e1d295d277f9ceeb4468a2365fc96049cb278d08ad63125982990ea1f58998bcda92c7df86d09452fabf15c3e9701742fbabd29dd35dd61c13428b3723339472105aac0ce2e23789062141e8992bc77e5709214481d0e48947c89d366c4e4028a3d9722aa731f9f98312e67416a12de354d00fba6533bd395fc8036ec8befe8519a6d06c4c661ad3f0f49334810e1d08b852e849679c7ff218239ad7e8a286b300c7059602640629d43ca9e2e918993ff228d4f07b16ec94be5d44a165eddd8b75061562a1d0f4fc2a2861efb1af07859ad35696993b93c9fb27b40dc995a76d4fe85596720e174a9dd093252d21e652f7fe499c502ee8cbb6a09336a198272d7512bbb3f3d384222247bb07bb33a14ed298a73387a424cf98d0e3794a1efad6e31ebe84de72fff6996536952ca1d55b55b250f9b6d39550f427d39bcfd2cdcc94d027b6c518934e218cb9935072d014f9eef593f0ac24f4f77ad1ff988d845a21a477ffb39c435d20a18eeaf491b3f7534a3e4291614250325db0601e47682e26248dd07ce4e614f2043142cfae9d5d3ea9b0f82e42d98c292799b4f1f44c45a8ed6934c9ee8950277cfe48218c88504f69b88b5d2da22a7808cdea44d66fcae142828650b33c2525223e85d0fac36de46016eb6742e83e3989713bf5217406a18777cc2f0996637d4710fa079972ea9e1ddf8c098476fb1637e366fa9d0b20d40a3169e8f01c1d327fd0fd7f2e97fefca025cd18f487767dd0e38cc9497f7e9bb3e3835e19e4bfe7710f6a70f1934b161e33c6f4a0c44be2ef42334ebaf3a0859cbb7723788a98151ef410de54d29a5ae4c577d05b84c8c90bb183a6b5bb27c7b8c1dcfd1975d0c44f4a65d94f873d213a68b723472695f29b310765630465233317cb9383d6fa319e5d9271d03adc57ea208470d02468b1537d27f73ff80645be5ecefc4584b6bc1bb41337223c06bd9064cc0266b44197d1d3a0e75c7f523c830dcc7bb6e71483883c93196b50bce443cad164da765769e0e3a30a051f1f5528382483196ad062ee1bff8e1c3a583c0d5adc9724e22f6bf88ed41266a041d13df7a49d836750bf7275b29c9ce2cc2e270b33cca0a5d860b6f54925d341c50a33caa065aa6022628485196450924a661e3488c5fee418d4c89b27c8f39c3777220645bec409cbd0564a62528eb59163dd8bce62c18c301c47b3fec6146e25cc008396e246ee20eff2873aa5ea67e2d99608ab30c30bba666c302df272bc9f80604617f4d432f2930a7b0617f4d395ae72bb9f7f2e75ccd842eee3dbed1edfe3080c3076470a6c7881637bacdfb09103878e12a06d180bd891808f8f1c387647faf8f0304ee0c9463b0a4e2c66684199f496b383bcdebcac34a003039e8142c1c7c721666441d1ba9fe46c8f88a94733b0a09508d5a3cafd25ce0307aa818105d4f8f8e8b15fecd0f11f1fb982343c78bc60c615d4bc0d2edbb2193287665841dbd4eec94d280971632e30a30a6a79299320c4ef4f9c410545a94dda5a11be938893ad61c614d4d479ab7a83e818755a17664841499535ede694da2ceca602bf1105e527e8d332b91bf67728a8f923a59ce99267e4fb096a9ad81bf364ec4e31668613b491315a9f1d76b49274300035419d20d95318ed721b2e26cc58822e1f844e6123240c3394a005d32e62939efc07bd083392a0e5902cbf8e48126620411371f6a62e67d21f529c30e3087a8cc936826ec7d0957486194650c32b67101713aaac2e82dd3631c598c351671041cf295c7ed274316308c82dcdd5153e692f74b40d1d269821847fc643d2ce6e430538decaecd0b163879b0dcc08421bfb3b692dfb178c15f4b091030796600610f4ecb63b1e633fc3d6671a98f10345ecc246f2db4602337ca0a5cc96c322688890eb1d3a729000470f142da1d7255aa2c29948904387175981193c686bbcf4dbe570b9fb193bd044481d43ae0e262c4e661998a1032d04ff5cfa2cfd4b3c73a0e42be13592c572be4460060ed4f68bd9e52ae62779b15fe0684f37d07652bac935c1335e8904de23070e7bc00c1b2842734ced1bff5e93e606d64160460d68a005139fdfae387f11460e1b39b679940366cc407dbd8d8b239b11c335813b18a4ca1a3043065a2c993ce690e747645e802d62914ee3f944e72429641e38506076388f1d4b01c3c016b0a8fa2665f24abac3ba81d5638b57e819b77e5e5e67c26537b06c64d5c0c002760080075bb842c93d3a4226d996dff237b06c7ca163c793f264b6452bb4da4a23238fb887c90a45c96c396b9b5609e12a14cb99e62286acec55a17f86dd9cb9fa624a2ad4eb361d224f1e156a8cc8297b78fd14da9885767cb8b797b829d40bf14685c44ba1699a89a37dfb24d5a4d04cfc663473b8bcce281495174794de51665b1285264f8cd86dabaffa43a185061d571d2efd9840a109251f438fe4a4cefe84a2f972f008422479d8136af8d1db1683ba137a99865c3acbe684563bb22709a573847c134a8a49776c1ac97a356b42bb923927092f13dae7bd1e21378b094506a19921f5e5126a86cdb38f41864a724b687de2c2cd08fbf211aa84761ea72bc51444093d528cc87e72094a3e09adad3bde72c8ee084307df20010e97c0c78715b6908422c372737c0f2564cf48287943d2f4d983e5244e48a8553182bca07d84a62f57a3a1fa836c1ca169ecff7f9d94437fd90825df9f4bd811bde1252334193163882367daa745a8b7993d5ec5343adc8ad07210d9639009771ec644e866adb1656bd2890e11a1e7574a49d227d1ef0fa1a6d10d719972985b8e2194dd9cfeeeb3530845de650973c971351b42689b3fba33786610fa7cfea0445b5c635c108a7d7f25109af5644b1723201425de3c4ce8096a3e7f50c36ef2a736bfd05ef183e2b9f4eec40b29a4ba0f8acea4caf74cc7072d941016636bb70735b69c48c994084a7cd3c3593608171979cb83222107e1973659908be141b3d9cc9dcda23b727507cdc46616d1eda05f26b1921b4c6cba0e4a4842b4a8d3a254ced241fbdc41c3e67604cb91392841858e119682ecb75f0e9afae47d22deb14f73186c110735a690365bc04149a244d6f59ebc58e31bd4a474facab71522dee906264d9269944e498788115bb4c14ebae535fd9ce914620b36a857a1b2db52e58b2dd6b0851aca213bbb52c51442a54e295ff01441ddc8a6141b606c91067594321d83ea381a74f18b1f5d62bbdda333e8a65ab2c5acdf313465c3043a6c9822c2166650ef5a638c7eb0db0fdee8ed82c71665d07477ba982c61e3647503cb60c0c8a06998181b9d4137b01ae009070a3020842dc6a007bf2cba394e99bc890c610b3128e3f17e3bc418139f1c38903500023d7c011f1f3cd2b04518742b3155722bc7eb69c0a0ce9c6becec55df1ef2f1b1c517b448da45289329bd9fa700156ce185c4049da42ee8599f942eb110173f5bc1165c503e4ca6ca39be05f5ed2ff9851c2de829bcccb8d7e8245e16b4f83479b4b6c7821e2f3ca5a42de90adacf06ada9bfc2f594aca0879c12ea4c749616a52ae8a52ebb3b95fc4c5ea2821ef3041567e114b4d1a994a80e226b4f5a0a6a9ce8eded36117ee4286896ed39ac772e294141135ae3a5ce965c2ef404ed27c84fad395259729da04e0a317e683b9ba08bd2e3f1ea6482a6abe4b849de0fe25d025fc224f7b648097a121bb13d8898046542d041e9f01a4e7210097a871fe199ef73047d43f4c8670f2a74748ca05ec89b2efc45d06477051dbdb15122829e27658e5d4295a677084ab0fde4d64984dd202168f1940a29768552223441d04cce4b27956642cc0341130dfe27266b8f877fa068edeb91a51963d6079a0911376891b42339a5078a764ae163a808b3f140f931f9fd21fccbd53b50b2c4ce2f964b56fa4c07da59674b4abc499039077a784fd59bd28690318503458559e8e0296632ff069a88787ab9edb4de6e033d4bea9e54d740ebcb1736a90b214118ec3450d3e9fecb9ccdc9520c0bb698819e36b7b5a5cc329d445bc84051e9f354e8291d2f342990110be5ce27c98794d32719db1dfaf1b13bfc64c042df5c1d434f3c0a7b027ae048bea30b0b240b58e0e3e3e3c302ee0ab8d103c706bc584f80001c21e3157a9a0ba94454963fd3718526548e55f963767d1fc256e815b682e82635db1e5668326cf6a04ac4cd57b5493256a1c6a4e342f4044b1f433254a168c69b1872d7e6852419a9d04f964aa62de4e0217a54a821e8b1b8affab0ecdec0eab1c3791496710a3d53d2f0106d09c273109b46d7c5d3a191ea62053b7ae4503330f68b13818c521494ee18c44cf23a19bc0c820c5228414f7cab189eb2540119a33819a2502e560cf9b562fb8bfe0696a1a0484046280c193e9c6b592c31b98186604106284cc627d4d14ede7174e9fbfe3da167eb14c395fcc7d0f14e68d661fc5278cdd6f572428b59723a55653abdbb9bd0b2824c52c9be83b8ac26941c5fb7f3581242843232a1e737f13fcdbf31498409dd45bf47888b9ccc790945b46909c2bc36a7d3b184a6c1544bf250a9845a0a34d0423f68901892ce254333d06de45c12e97cd2c70920033db3dfddd8296d7e2cf4dacd4967fb86851a4cb3f25caf502f4e0e9252185da178a7cda4da6e85165bf7b26ce624fa63853a1337b7c3e65249ce2ad49320f236bf46158ae4cbb3b349930a25b958dec9d28c093a5428693e9d658ba072e5ee148a52134b99e7cd14ca7948c22296a81024560a3de6cf10cb3d6c655ea450c39e92cf71d528d4f83fb16404157eb928b464aa3aa8ec64bf75283413e1a7499e0ef245c205288c7b1bc4375cff094d546d1e5519428490e2094dc784abdfffccf9ec8436e92ec4896c9e0e0b27141d43a449b999e3726e137aca61d9162346135be993b5972793fc3d1364b3f417624830c1e46c298e5b0aa7947b897a44649e76bc1ce3c5126bb0a4bcc33ee55d8967463c469b9928a15cc870494b92ec56395dd488c08271811c0b068f8f8f1d3dc09080076c7cc1c524b4d350b249e71883c4a424740f9376b49c56b503c752a044e23e19265f1c91b78e1ec69c0b481423c8249dd9f3084df647cc97cd3b9dc83b42ff1434649824baeff546a831d37bd58595fd3b7a304249c274e532953f54922f42d3f89323b8e68ad04b96cbb9c50dad392911fa7c8e879853892e4b23424d2a28fbb114c4d6860fa1291dc3652ac97133b286d05fd4869ca05b9f63a810fa060b21b3937bd79e84d0329e9ce9fc534acc3508357d7948e3a3e5725610fa8976b71c2cd803478e30ac6a6060012ce022106a3a3de964b81a10c65548cc7032e50f5a3e0bb133e3a6fe8a1f3409d7294c6907953ad807cd45664f2527850fca041934e9343228df6d0f8ad89e9cb25f564948390f1b1f1f9e0cea41bb383693ba454bce0bfec279f0d8ac818105d4e81c6128a04617357a8431811a5dd4c8d1801a5d94c2e3e4a19c3d5dde993077b10ab8c08392df94d8102fb26c878b3ba8315f726552b21d6edee13ccc0e7a081791e93e5bd075aa030f2ee8a0a6899b27c50971f35e18f8f848c383998b39289aa1fd93842d0745531615f62a77b23ac5418f977a4ff697e0a077c5cde585dfa0882074d22437ba412fd1b46d27644863e93668234b845fdcee87d9d8a099e9c9e0a1428c95f51a70cb152104373dd91e02176a5036de420849ef6965370d9ac831249f743f1ad48e5ba2bda17927d9336821e13d681733a15d3483f6fb31843ca653097919d41cf1932f2386984c880c5a10ba37cc7c376c9963503f94282fcd6943979018944f2275c2a0d7a4a0fc7c4bc75e0406b562cc9099eb82bc9abfa09fec701531841651492fa8274e92ce5d7617345db99b2f4d189993c805dd26575b506c664e74cc746ffbd182726722ec43e36e8a1805b8c88272b1ff84cca26f42b8a4e1c1a3547bd2d1451a1e17403a7a80b1821d7d7c878e36001758d03da99c15933582d215f4affdad8815cfdb9256d03f457aefb31271c42ae82e42fffaf48920f652413fad9783b698372fe64c413351933b439ce65b29055d630491dc2217053568d01c2ee4f4172b080a5af031ad39f7ad92972768165325a16e539c7bfa06965d184ed065e307a16cc3fc244b13d48cb0f7497f0a1394f421cee95cda1070b10445c61b11cf546987ec95a0659c74262488b811bf24689f54a8a0349f3ce14124681bc44b8da71b9d9b3b827e627f268ffe4c0eb83082fa91e64a258ff76bad087a768e1139062122683285f70876da10b4c9b22929195d16b114829a1de4844f0641ff1aada063f83c892f1014190b93b7c488dad07ea086ea1822c3a62ca24f3ed04a82ebdc8cca6ee91ee81a1a9f4224f1406bedff7a9ff32441b503e53488f4d927e27e81047ca1a3478ebd4181e24207da591acb95256e78b072a0d686efc831899230691ce8a6376798f1cc1ee60d342152e9e0639b929f960b1b284263ecc48f1ad9ed047e01945cd4402b9de7d73129e4ca85e1c5a28014181b01c4050df4bfff1efdd292b27633d03d680c9375246e900b1928594e64cd48393462a17cebf5e9849179e9ce91021d394c90230c585c41274fba23b47ba7ce2b34f16fdd8ee1ee3a3624c88183070f1c5f9c2733345c91021aad58010d5658db9ead52ca6d5a1eab50ecc4df7e5b3454e1058d5428ba34b3cedf684a15dfc03a68470f3068400315c6fc98e74c5ed618740a647891312e523a99a7610a2d4eb2a42f83485597bb81eb16f0c6e1c5053e3ed2fa8e0c83300f087c7c745123c3a88101089cc02fd00307027854de8e1e6004400a344aa16bde1c3af69d30099a1dd020c59a33443e7949299942631426d11085269ea7c4c7fb647fa75068f59aa37572c46fbf41a1d607e51e3a42a7d6f8139a8878d71e1125218d3ca1f6569aeddfb0134a3c39b9e3cf36c9fe7042f3b4c95c83083165c8d9849e4c43e5f1ca7f29c834a199f87c259459c8165a26b2b0a95b2e8230a1e50839f9c66ca62b7909ed47b669885017e485d0b08496b11754ce6525f4b879413b7fa4cda74483126aca35c94de8d8a6308d4968d9297fe8345a5bba23a76c144181a582862494191de474522a3a506083c7de481d3422a1966c1fed729e721ed10e1d619ce058a1010975c2e4de8eb4a753ce3e4253a2ab628c4829e6084d959010838e87d8870c41a3115ac7d0afb132a86cb9e4030d4668d59f7746e41f25be64dc4063119ad2a04196c74d492bec115084da41ec73bd898f8b2731d0488472e9b278d8144f8973e0701e1c060f1b3dca033410f16f2abb515fe10dac42411e42913158d64b2e672912e4c05167021a86507c6f2ce404bbbcc8318530e86c9f659d43c572e8c001860d37c17e41ce0b1c3dc22884502ea94e26c4753ebdfa06d6358d41681254653a514ac3898dc38c6908224d9ddceec25f3337b0c0b0b182f5c2771063018d402829cba93bd93721262be881c30b1c0908bde2e7f9bf1b8c3074ec20c101018d3fe8a9ca927e09c262ccfac1301b763b8c99d2f30656175d14ab35d0e88366392525e3cc8ff820bb8165e3460f1c29301fa0c107f52b8e7c5f0939bac3e38a140aee7480c61e52d6e152683868e841cb312c9e86a4f893b437b06cd830c7034f40230f4a901752e64baadbeb81e30b1c5ee0d2c0836e1526649dab7c9b0f8c3074ec58c0c747a2e0e383078d3b684a892441664f4787fc0656db486e82de33021a7650c3dc6b182b15ab832e496525992d45830e7a7ccae1429e7f0c41bc3d70f0c971801e3810f0f1d103077f7cf060010e1e61d098c3d1908326eed3a6d26d72632eddc0eaf1c51f0c68c441d39371b72da67b91a70187cc75be2d77fa7f1d0cdf71d01bd4949216ed57e14ace369c05387ae0c8b13cdca07e8958413e591ca0d1063d88d6b9e78e35b26b34d06083a617ba626566bf0cf9352893ca84f8c7f692b31a949dcd743fda34e869c3dcf88b1c0d9a122ac7b7fd33681bd36d976e5cfcc60c8aeb97e6ec51656129839e79779f949c909296c8a047bcdc1753ea31a81336cc62486a31e81eb17f3b6212e6990e8392c456b57932a1553318948bc16bc32793551efe82a6e4b85ed04be5b6d74abef1c3ed82d65aa54e046fb9a006b752c2433ebb73720bba8895387929d3c726b5a08dd0b569f29659d0fbcc94cad3fd902bb1a084d81f235b7adac47805dd72bf4eaf2566fdada05b5029633a5d1584b60a8a88f7bdf32c15f494394afde56f91d1998296b4c6989cd49182223b6ecab00fdabde49d4ada64b09fa1a0e8b8d676cf9a27bc31a6ac9c82e7c88bef98408d2e7ae040400f1c8c038cbd76145c0b683841f78d31953bb7218b4c13d44f77ba252f32ba6298a0ce8f45cee17943a5cb12d4ecb2d83399db4a2c4a5036d2a620c743a5982949d0b6aebcd2cc878998820445ae7a74a5be4e3f2947d0c62bb6682c55614b6704e5e24a875e501134954799fbc933ed8e08ea5786d624dcb35fbb21e82369730a2a66dc249a10b42cfd1fac6bf2e727085aa4202e7f4e5a416280a0a864b1b46985597ef5034d46b708d9a13d85920f34612daa772c879c11628304383e87191968f4404d5ec27343c9cd23371e28b12cef5dc3de81a6ad21488eacd937222368e840df8a3721e52ef1d27e0eb4cead21fb0871c96409078a365d9672d7e7381673034d061949e56948c3067a6b36efdec8175ed43c68d4400dc28392594a8768a05f294b15cc52df6c9b081a33506429cdb69c6dc37d09014143066a4e996a7349caa5eb120b2576f776ef4bbe98010bc5258decac41e43ecca42c0d335ea1a6902f6dc8bb29c64c2198e10addc52dabf4c6f2a69069853226a792efc72d994513c20c56a8a3b336988cdd4fca8161a3c7da48ce8387b78eb29db10af593d25efaae49e7bc8860862a341952aed04a29e3c08c54a89983863a4b39885c1c0c1c26e0810a2d92888cf97b4a09ed146afd158b5aa8844c8562c2c16034148944e250281470bd3d00431408002034268e040291581aa9d2f40114000461301e2e2a24161c1c101012120c0c0842813018140e85c16030200c0a8641c2e068fc8e02fd2a1ec20c5291232ff60aeb7fc83b2640c35123af979de1f40e65d7d48541b9e0453815213f1f2e067b0f65b86ed73b159a0a4011cafa03b638fc024f502f8532c85da02a6e38553016915f05088917c34319f25864b1a808b167ab5d875e1c116085fb4af8c2ad1a172db7c746ee8fdc263b7d06f8a6326749d9f40005f35b2c98df2378d6a2bb9bc1681b6ea05a66c7300a0e918eaf35f59945be17a84a0e58e17f952616dd114b3d4f5cd5d6908b695702cff07d5d822a361bccf70e99a34c536d93998dee2bd363f74862f5dee403eb7f035de6472a82eaab24a901cedc8e44d6326025ab32ccb45b57ce2988941a458732244094047dca3dd6c05cf0c037834696b39d70aeb49c3cc3047dd7626bdbb1c4a6377056ecd50f09765a791a2ea688e50c429c176ca61e2e779378ba27ac604ee997e96f929c883ad341fb23612cca1ee3d3ded2dd34df29b8a39caca27a0cff92c1f1cc1a30660069477a2a8be924c05c4d423e3e688eda7563ac0cc0f2509e5dd410de694cbe6dc3ac2dbac1b0e87ef3c97b0d1dc7062e16ee92763d365300ba7a46a8a41195e5bc4b58dfdeb5b8c05256251b8daa51eb7aee6feb96212cf5eb8eeedf1bb5afcb9618e624441b65f3f962a5291e2d25f72bb006f9d3c47e6901f8a378a0f8994670ddbc650cd6a364ab12a732aa2220845c86e63d06e729c78378526a72436134bfdbe17bd4ef7c13942b4b210a2e589c23c9d795c0ac58084003036ba761124a5dccf5ecd9d1c97466f9e0b2f8c60bc412334785e76a026f25dc5999d82eb4836d61d6a8068d00c29caaea2633af8c03332fd5e1531f52be1470b888f2e0c1ac1a41129339f9b7ec8e5f41c69f6b44fe27a9ee4cd89c0dc4af1ca9aa972c729b61f3f05f0e1610da6999683a7f5f3769d6eadcc6427d8de07999a8623ac10fe07c3275e99e85e3cc5084698f21ed9e269043466e162a5970abcedfeafaee3ce40aeca26c1ac7cc279e38e28271cb2affb82516c2cd4c29736c617bbf834ea3b4d35b02035e769e0cdb8627e608ebf685a83834885161deca5e069d8bc24b3aa520dce0024ae0fbc1a6a87370e2024fc07fc549cf3ea6e6cf3bb6041bbea2e05a7a151315d5b1453c6b6509fb4a39a7e1ec5427063ac0c32e3c6a77127aa9b8d52ddb88ff22c1473e1655065ce8fc61bc526d6a52782630c5a66561e182182a7590b8e4d03c51f98974dc1d0ba1353286381255392ba871181ddc5121cbc1967d9524cb81316f9eaf9ee885c432037c552826fd43e7fd2a1b34cdfbb46ba013d1f069b99baa6c28a292937c6e42c7dbb5c6838de7f3953155644d1518d6c57612ba98c10396252de7b9464d7142359fd855e0eee32debc599c859f26a4a4d7de6921ed5355f92f75770f0b5639409b2d983490e5bf3d5942c4fdc394c71d10f9e85b1d286be06f3dc8e7cb510ae5dcd2fbd7f2b74e325906b1048913458e70923280a586aebb08d5a0e78aacf293677c7d5399709e5afc891ca4f0b62d29a00a8586a4a55ffda3ad833d4714c73d620d592ba797b6165ede3025d3fb8a969c644dff1fc58013d32c21b4b278810e79926667377a4fdc1b2cea540077c31381e121461f65ff2a53a3ab5fc6bed60faea4f6d136cc0479abbeb8c7ea7ac38301c8694b0dc5d7ddbf7e4d0a579279119c5300ce38a8bfd5edff6dc16182e29b8c0d9b246bbbdeb4dc31e7afaa713c9dced9a78eca853e9479ab9d19d20ad67fd46360670a3f054b93db41dc440e6d631db054d50f354e544fbd25c13938d039e8b0698f63b9c7948972867eba86bbb38c76b713f15b36e5f0e25e29e7851fc0dbb937716d4e7fb928c3755688f5baef697856f780517b97952ceb765b46b59f8499f1ed055c5a54861c8e4bc40506d2559c4088539c6d9e5aa0d60791b996c4a8dea16bd3ba02b89c4b015b82f189b8205a41626225c6e83683ecba1a833e975beae9050eae3c468874e0d3dc20ba20017aac23ab64880ad56a9c362610d717b7fdbc88bbd2f8fe183878d90e4a3058af75f127d56626d5f6e921b22d59c12d3d135044b664307c71275870c7b15ea51d73198d8510c92bfc10a95a788f8ba55d364594f0d38ea8eddb82ff5b4edfa2254677871c7cd2f9ec4091e883a33ebecbf45b510ad72a1f77e1f8a4dcd9c7e36bc3bb306b827fc622810007bc35f566e750783928b8c080023a85dc1907e4767319d54285bc819acd647da34303a536f7aab9a14551f3f6cb54eea889fb97213a0d87674510ff5e7819848497c59adb36d9112a9a41a050dc8310f62e1fbfb65a678664309c8af94d233abf721bf7a8c42d706848d3d5da7968d8b18f7016d8fddf0f0ab93da99571884813bf63c7467bb22dc489b42e7440c34124b12492300b0a6c9b2e11a6733252a89306223894ac8c29902868d0b8db3adc46b9d83e4110067ad1eaf78d194144a20a2d83916e5d0680777e69ce174cb277c48bcbfff2c3df704cd9814ae0fe545516e8f2a3af24c8a72a8828854f386b65512b4e24b8b30155d21d2dba1dcae7fbae7f20b6d4b2415b61908dd144257c86c84de685412fd7258d80285c4bfa112627e0e7882d06521942914196dabd1898790ab90db431e8a3619d19ba0926b174a646184deca7b5fc0f8863a45db6b48a7ec8b725c9b7aca1a0cc5a88d52332bf40968564805ed646cc3d31f3fd34a14f8d85c75ffd843b35de2caea5ea14f4251848410ba2274be105e425a71a1d9246005ebb6e863228842c20e5d293a9b08c7901413e5c2b9f8572b6a2de1f4de71145026138da0ac048d7397c21c4aad0ce5bd30647bcf21910c9b0546b45f93cb8641236023d313664963130604ec66a755aafd3f507962014fb87d004d95bb483568479a268b1dd4980b03d0518e50a7224f389daee41d2389c7cd69c063d937bc1320844b28deebf7ad1aba25c3aaea24507eea373930960026cbca9a01acd98449ad70b3d7323b18dd9e49939a4551a1485f6e525dda25ff0e7a314a6ec48d8fb07854203bb2b2452d6688caa944b99726d3184854917b5aea3957da0010e27a87b6b19611adee46c5d51bf076965d33142b513adb37fdbbb1fc6cc8aef069c173fd1969c31d69ad684ef893c403d719a7b9808b327b6fd1953b4e7996eb8d9090e55832b2a82358610082e307bcb1984b6bddfc55754a430c8741a100798edf0174bf0b9d8bedb83f5cdbf89ee125060a82cd6afd54c8d0f7a6a4a74c7771a5288a904104410b37a83e3e04b0a643c533598540107f8a038c56eb61afe6d08b8a45f4b84e3f14189f8b5f97e40d1ed77ac7e47d0c6ea623548576677ce5933d2897d23f83a0895362dce4390c1a1613671f3fddcd5ceca7a1f3a8327453f3c083a29609f528cf5a484bb812a996b77cb72004a86bb983efcc2de95d5de395b9bc78c454017d77cf3cc2e453f6f460d5668a84108234f184ead90669c18019464c04898335c65a3cfd0bd4f1d8c325e6f96f8a4fac0998d8c4bbcb678b99a6b8fd94856baa0ec3da159063cf567a18bf16e2e0b21ebbaaa97b4cfc6b0427054dc41dce46a870252f52d695885a760dc13e6ae1b4426e646c12693d4e1be1186451eb6a5633ed2c3df600a40024d43c6422e1fd41b2c14c457e7176e8472d1404aaeeb17affc80237d6e5ec8399fc7d74f507a47d147dab7fd65565d8d44c81b843b904361364cb72ed7c6ef2f068816dd6c474b123bc33d46ae51aab3bb3ca6b846fd427965c2701e4fd55104513fd1895fcf997ea42d6577610e07def26d44812d507a4daa8735e4355dfb0beaf805cb3ea6b3c07653944495652984c8ae0f958b3aa9277c04397b5d92e33aa08c86c90a87e0227e1b13921af677849af17b17b913de1171ad6b26a6a249bb1838381a92400569dbefe2cd87c025f1a5e5a21f7a01f50046cb6e0d410324dd796445db1ca5c157396a30923a2a465c5e4e21df2ca0b6ed3da4c921f72865fc451d66e94d8e5e89aa90018d6ddd44653e06e7219b6dafc79e7db16c6db18bf219f2b19fbbb724844d08e48dca05a4ada0d60a8f81765ad56a7f44e23c934aab2573162c7b9f0c8c5f972cfcab0d9858432157a0fb6581b68966a9fbcbf27adce283780028857727052ad1ca59b804f34561c30b99c9457fb6bb8203ba2b633d2d232b2f014c136387e0972cb1a49513029d97665d471271d850a9bd94f0ea65c3d89a0753682482887cd1c5a10314af27a1100ea439f6b81549b056272d653dae04dcc4bacad612a031e9ac0bc73ab35359d59d68b28a1778ea9795a43ade3cb5def30f2080b152f9504ab0412b57951f440299f1f652068e4b7d2905d3a99570602027c8d47528c253bd330e78d80681720900acf34f4979dc98de87aa210a20a8b6f6e87e194daea46f96a81d5f15d6e0dfdcd2273a4a78b835d75d3f30deed36f9203b48b47ca9e0ee3a990f6e1c61528777871f96880ecf80af54a72d75c101f7ecc2bd39f6f883d57ba40e4ee4ac8847b4c0c950458604b97877d35a91c4d28714c7096ae97985f6e7c2a0bf8b2d967e886056ae9446c87c3f161d313e124302b31f4e43caa0c85ac5bf4f6e89f0795c885a7cfd7579cb6e4c914804548f4d2864448a7d3ffbaea2f090442a3a43e61767bee1e291127e574d028255aeb7a6c14628442869ff2f05c45d2be03c19009e23871b5dceec24e3139f9d210206c8a9240271297eb4baf207d35a571d297df366874c420baa7843fca7ecb7782de6a3724087736f98b731bd441e274c1d3b798a829fe55d3164fc23da4e547600905a9e6b1e243e82811ae4d22b4ed6213777153f2d7144a4132abd8ba4929e5191f7cf420425fd8107329f0f7758dfb0fa98a98a9f507bf9ba46823448ab85d37f12fbd4975c3f62831c0e5ba6f388dc9a77c28ce2ae7a470a9eecf33608b4891fcdb80522bba9a9b95972c837460858b402b38cc4128316ac0d3252ee9cac6fa4a665da0ae52bd5665eb9c758a54868113af58baa827dc2113733ca5500b24cab0d82707d45a19c86e9854e0a8a7fc9299e4691df5c1d10a7ea193419b9af8da5b641742e588c1c48e9775b7f748984272b936c6348a57cd3110c06fbeee3dd8223bfadbd1ae0e671099b635bb3a82ba9feaad7fd495285cea5ffd0cb482011e7ad189a6a6b4026cd852ed4c615f65b49c536028aa2126e8091eb5b18aaea2547469d0ad8c7c61084cc7b4623d221743a1d3a39ecd57f57d4335d0f63d3d614ac643b85649b50bd455286338d0c2c8ac1b480390935d071a965faef9108b0239784719164564a090250ccf7005228caac0392e51125e1936905e4995efb5037000d11aa8d49054cadc3e632fe7f4277a1ab002b411425e3ccde7a5a9a891a05e12e066d1ec461fc051ab3ae59058b8d11ad36085453a5fc8e8af76824ac545a5858796245b9328daba2b4dbdaec30adc4d2063c402006f0e50ebd967f96c21636b25a926e057ec44f84cfc829af83d9a4731bef28e172ad53bf1f189a624c87b65846e635b333da9f11dd1737949dec6c010b295621a13b713b90bcbaf2687fd13e5459d1f0b41f25f1d382c6677d41c068dcafb39dc204401d1192f32573b849c5e01ec180713726d99c15a43ec3879fb6edc2f52ef9bc9b156320664aaf3f2cfe912a7eab6477387a9c9e7fc6b6f3a8ceec82cc46f326ef885ebdc19a43583cacd01b10aad0130eaafdd819e6ddbdfc011801d47c011ce747c92c72a5492f351b85f8d96055fa4c793215196b80a6f01d3c270fe2650312a4f7e6076b23efa9602bce3ab9935d0dad8cc1d9db96fa9291b4c4fa16c05a9d9651daf12cb56148c4a41a5ed58be19967aee1f0347d957263f8a18d9b5f4f58d2ad1e3721773a5b4e6164864fad3ee94163b73b77aa66092e2a5ca7d34723984536057193d3c8494e38e593f0137a69879cb7e439e51ea5c53f63c081859cb96116e31d76c06a6b74719f42c79a63f8b225276cbd2669329a59799718a175eb1c9510e5c787ac093348a87ad96f6c0253d4fb9dd731df849262287d4f7c28d5cd4298b8d0fa96d3a804c64c70a45aaa1e5001e437e53bc3d2aca143ce77447eaa583ef959fac6f9ffcbfe847833a6c7dc822112ae89d7d15ebd1c5dc28726ce997b9f354a848073f2677f0f98a97bfbee2e06a6f5badfed837fc7e6c4b7c7f7ce799e09cfca4f312556df39e84643715f33e69e9629b1fe31cfd040e56ca0e5259f6435e5e1ed6128d5bc313fb32f99064eca0fd89af1b542aa3f680ca198ee31bd49e1a2875f7d5e401a08815bd38f3ebe332a7e2d30ed253c859093343bd26948d0c282c312b08202af70e0212263ba17c0fac8d23c73bf9c790128057d0694ca7e8438b12808a2baad630515df33c83c18dac99b619ad60b14e115cc5bc764b9bfdf43d7452ae80450ba492e8d15e7b3480875ad6972ad8dd8a55575e05c17fa10f63a05554936533eaf11afe293dc62b6dd3fe59a354096925079da962e6ba091d8c2a2369582e2a846a994d2263b387e850b6b45445a04f5682de36663afb17da6af8ddf5862a67ad952bb48d2f86e2cc2ec3c182951514927927369a5d6454fa536d53e3892c3bddc561945b0eaf502a56d2d53cc9655a45caf4ef6cc8f48415824e07ed139250326b37f03b50c51e0ed4878e5a1c04d2b150dfa4e67448280b1261ae2ef0db8137136b4a90f0babef39537a1b6a186a00ad005869cb156f8a64f7f943ce6cc84e749f8db793c4557e66e51cccd6fb7e860b8c505200137715fd8996c184a5d42a16f7fa60189b3f254ea415af63a0ad911e094c2b1595071134a7baadc8ecd50f95593e5f5423930afa16a50357d5dfaece877d0b714f49307d05d8c00fb07f2e7adafb27ea7bebbfb1ef827e90fa14fd9be65f157106e8465500cc0987ca2cc144c16f7a3976cde94b51e90ace58cf5513d321efd4281644e268cfc73fe53492602a0141d0861488f9326be9969ee97123df2e1b07f6f9c844c4a9e612fd2f63ce3b1d7e163f93afc741858e174ef78c25f05304a28a9d2c127ee2b1000b311f1f01457f9b78ad104fa9d8c513ca7fc6873a44d0dae12aa4868c5c976b8e8b6ab64e4c7e641d3d519589ba54acd53c2d62851048069785867a3c5771fc3e7c989b506c12681684170675a36ab9321512d577f91aed1e005b21ad032e2cd7373a50bd64756b7868e686a3695c22b7f1c5a36c01fbfe40b4fcae51e025c60ce84817f17331fde22ef748580c9b3739efc4aa0148dfa2d07a4331c8c4f05fbb9f599035b6b14d40b114b8dd1aa89b6bf77cf1641139a8baf69b71287738ea18c5c9ae8d518c6f4c0afbc18b88cec2e2d6292fd1781003f6eef70725028b64704fd568069781fbb6adea5759f137c00ecd0857e4eea9484aecee8a4a1f7d8d9305da8ece3aa734eddb7b6932217810d893f7fc62a2acd71cae0f0e5ed37614ba89fe575d373ca9ba1399c3d9f17318148b41e691395412d842203214268cca2e9ea2585d2b18cba99456a050830bf65c8e51364ff7853268be35b762e5c2b0e42478b413176ce1c2540b9b8794022d18bbfdcfdee2b7d781a011341645cbd4c7bfef202c8e67127373a2c8ef803a06952f650f263c2ac48b1c39682a507180dbead30defd0698112f5e594d8d3b5705095932b8f0142e7750e8ced49cb5b365b5c01d85ffab2e373845836f2e44b00b265c2de08980daba0a011b5a856ce5f13f69a0d3f11cabac3e9efe0c97ec9da45ef45f3c58eced45ff923802047c6097091698635314208f661b20f08c0a9a862ca6784e8e3560aed3dd0d5d921f2b1e652b8a1e129d1e7848e88d58db469120e24e659069de460a5fdd16bd504e4e6fb3a069fc2bc4d2325c7d39ff255a6569b0a98c6142ba88fa22e66861140b801d5186d05127ee1221347b1f53767fe41c2ec59a615273ed4b9eccd23cbd16ab128ed5e5c1abb6d6bd310260c49f072dfb59a6b3c033e55aa6d0558565fba666d4653f8b79abbf02728f41ba98c807edc2d549120d248a10f6d4c22717a676b640cab640fe07716e299f5136a3c43a53bb49a862cd066db4718b8e98c98dac0a1f6805413cae6849f9e620f050d0219aaa1c24b974d7fc8316e4260a5e5d37caeea2b7e09565e044fdc993302a589412b272b33d80d16841d261f7a8e0e9c2dc6243f9f5f906e4c014745f73c6276c6d7de1284a6349a9c467087ca8b22e469c50a9f642cec3c8859bcd36bfb3b3b370cfc2429f16dfc29c900c237beb2969379847de001cc129186a08344dd4248f899f8c1c2d95800a476eb6bede5b154f44a1023b900f169ed739096383f4d879b77ba2a3dbf7a36883fd61bcbbaa4039027addffdc22d2250d77017cf79d0263290d5b0244395a2ecd44ae23336e8e48e2c1baa579b5ef9cce0109fed3b9edcaa970690607a9d5410ee11ab8cf53ee76b67300c7c47b3b46b5759f38a91638914e2ae739aac33089210f3a940c7d52898706036e294b508c4a3ef2a3126890ab02348c4848c799a2879d8c8df9b94a2ad68969b48e5eb775e48a4d4d16035949b06234e351ac1cb3e6ba955e40eeed23ba5b76e45e0c366458f441d7ef2f8d7634dc90b0ec579dd8f8a135bd6c718b894495afc866299a0a0c97bcae60a0258a466f36f8ce6f0b0b1bd050a2f0e80c179d417f9013a90f500fb88cfd2104f4a345cb97901518c7a425198b75b1ef05c8c20a9c70736decafd3703251becb4ba8b488fcdbb100ad88f921dbd77f9223bf0bdb2edcb9447d312898d71587eafb6c104540e196055617accfa05d80b353de54afe0351e00a0fc93fc1f85c53cf442b92cf8faccf9890aa4fd3fb715db40733fea0f2f189f669e67b8b9e441c24334cf3e1ed595c7b60239bfdcb3ff4b27c4e03e0ecd75da711b4cf6b27f0c8f7d0378688c70a5358437b690e13cc3ac50a88ef3b9c5cd7b5a09ac23c5fbc838905a9639340a344877d719d785f4683bb3c7e5f46f5496a59d91d0fce171e2621f9a11d2046ddc536dd626bdd1ff0dba7dfa1fbdc48ff9dc8b5cfca88dd25da989671276e2a322c0af11e8ab48a517a1ea5aa95f9e198ce13ccce50ea3daaeb1d84b55d612b59b5510fdeed57f7d181a19d20aba2030a804ab45cc9204bb022f5e76eec5b58e5b7822a04ef152ae424b79c93471a34b7d4e3be59403d03970dbf6d48ddcb3db8d61ee95666d329dd2b6c8ef945372e9fb346ce1fbba8506b9d55591ff8dfdf1499adb8e34a3a8ec2288068e3d68b6f6588566ba7ebd1aaf7cfa5f38f7d1edb2c78cd08abbd42aeced837eac015ab87ffb2bf3b8087f0a226acf20fdf90d527d8b8a302b6501a228aaae65abd23ebdf13da9e0622e52d3edb696e8e57ed5646d151ce492fe2e1e9dee2bb8fa6df1dcdf822b256dcd0caa97b8351d2005add45c55145d8209b2f6b1366ecc8dae3a0842fb0cb966eb492bb0fb9fee4974de4a6968e199e657e4d3f059d9e9de10c0f94a2189f0579970f2cad48065aba827f3d29982d34d5f2b1f39e6d3f794b7adfc987e62ae648d4e48dfbcb41dc89e463dd30d3df57ae95028af507ab84735c33a88c15ded73c6475fd60afddca79ab3f8e442f218ada05e17a91d9ef29d347a8297f627e411f038f3b0e3b3b417d4951af92afd896facdf798d07e7e360cff9b97ed4c9e85328dcc8b8fece95d4368cfd489d07d5061e6faf3b95f412aae14f0e5a55a33551e8256d7b0849b64433b7b4f914a3981f76fbd17be920050b1447ff7756063d2d73bedd773997fd5d4ead8250c4aade61484b8440c26d5908302f425e2d3866805368c60f6adc8ae152480130f3ccfd624311221d779e96f9465eb375253e9973db4e595aa0aec89592f8b7ecb7e4a1ec3f34007ea72c33db29713521fe83f564d1bfd95ab90d0befc3c8189954a2d83b6c62ebe08e6ab116e105f504b6e1c777fe09bf00b26d65957c1aa0d2d7d2ce93119b9c754478f48c979bd2549da956654948f5260f99ae7412ad50dfedbea823fc1807e6fcff4c29a0e12ad795f106090a898f6a2422b2afddc780355f5888a7200e27015d5be68baadb34bdc6e10037debf3cfa6add3d9c375d4c3d18f84847e2122d5770a26e0bce4e78209af46abd53781aa52a7a58d32d29dcc2ee71b1cada5dfdd51f0ddd723ad30e6dbd67f51233bd0577fe56ec3c9a2ddef076679f177c40594ef51a5771f96e5508f6059c5bc1d5c5eaec0abcbdf4f537132cd94bd07345779d416607e7930d91b3ad571ad57d7a4399e06683be4fc362287d4023d2a718d5d9e0356db84c3a6763ef0bc3a5cda306c0f7b0714ec8037c9142cb549ab9c4f54221301c11d56859ed15faef3e0125effb3c0fef158ea88a16a86a1a0f0287a12ce7b3e96b977ce5b08d08d0c488cee6e821e0124770dcfb4aa3fd6bf8ec13ca578c9af71fe6ca73d6f4d89fd2ce5f8f48ff75af64a68e3081f3f5b2f915e30dade85db5c8beefba53b476691193f032da71b276a4b8aeac7138443c278ec80944def269e627261afe556ed198f8865d841394eda5579774a481a689bbe0da8abfdb0d9de00348899d35735c79a7057590855e84477d8cf3b88fff975681cb34bdee7c14398888b64543cfd54ddee7ad9c4cd6d47aa411070c1d25ca6878f0a3605f1d7486bdc678baf903ac556355d6de884f2f4ef4cfb8d9036ef09184b75d9a28bcd1b423877f86a2f257c63513d39d4a4360c442f9915fade54ec785531adbbc9fabd3d8e1984358381a0bbfb6e35a819fffb459da27ff7bfc83a5f7979774ca448cc72e4fd2a4df275b1ba37b3deaeacadd14c803e9fcfd63d800f62be5c6cdbb36a9bce0a6f7a9b802e967454abf166573cfd82f5e9c10c8c7d53aaf6a1b9a13b05001d3b208461bc4da2c7af984af8003ad37872b75ff8982e66bbc6cca21325891805098c963f1c2b7b3cc8b77978bec112a265e97e23c170fe95f61b46d32ae3ec69247492f578e8d5b0c8724eea86c9c99427505855916f73ae2729ab02bde77ab03da7f6c00bc8705bc430b004367c6456135321a0dad2b04b2125294adb97c636382c890b7818763bdb6f50966bde945491209c30ff6101ff29542ef006182f7a15af983af172c03e30ac206f056bbfe33d02b85537f32be00d83c4c1ef1b461007edd86c73b90d859d15f89925791dcfa6438e436b2bf97b87297825861aeee8ccf1affbc1f2d2112abc6b4161a3efada0746ca9218af924cc795d26512770db7886c511e3f0455cfe0858b87e2494f3c14cc5463a8f12f131a95a9a931775896f22fe130e90a84abb6ba28682508d77d40e23a02180ec9be2e9a24b562b504fa04598d0403033d4f87054d3741643e225908f9ef1c5d100c9f19c63f1c5a1bc4164a30fac7549c5586f8312a9e6b346811daae99a3f102486deae553854046fdfc4b3f48f4380f188608450db965991c979b68b2cd632111eb6eb4ab8b22dcdca715ecfb6ff019442292112b7e1c28ad4bf4544bd50508e7e108e88af5f3ad7b16dbb9123d0ddef2030c8f58e3436a3332ae13c4e7be58046e6aa453a3ae514e1b30243eba471929f3701ec51bcdb9f6de30e9dac422951c0a5fa4b0989c1291ab474bc128a114336821799dda9187f9642829e348e796e215a3a21c6c26cefa8ba7088cd7bec138dcbc46f16a7d911846f3c2edafdc97bb24d99491b496052f675fed80c9ebaf891c4604ac85ecdfd1326c5702baf60ba23a70b46439000c30c000030c30c00030ab1a219810b2108db4945292ea1b9669060f0852a624654ac9072d9cecdd36092e26342e26342e263c7701c3091a0a040a65e81953ea841294c6bba44a219f1871429d196dea42dc6d3668134a90301fb6b3a8095d27a490747b55281733a1959071c2699ebe9a184ca8a52cc73d7f09452be90d13648aa7deb3843ebec1377886388e4a682a337457129a624c3e25d49341aee42a77def693502f74def1d12125217749a8b9c74aa749ba2fcf1e09f5c498e609fe9384c421a1893833cbb59d316f3f42132f662d92be32b98ed064e61044de991871d3083d6f08213ba7e4b38619a17bc4bc91740a2f42134977ccf059cb92082b420f1ffb43c7c93b979212a189051122b94b885033f64238a13f07b30fb15bee3c53f95d43e8b737fb9f3e5b08653ee6d4bb5be1abb284d0b577fe66f2688f0f0d4213aa2a3773101284ae4989dc639335877e02a1e4984ee6104e07104aea31f5272c8330cff983761f3239b28970d93a7ed03c84a42f8dfdcbe9b30f8ccc1e2b87920a55f041f3cca76ebe449e2ce31eb4cccc3955c768e8d9e8410f2a67a9162561433e0feadf77e978caf14c090f7a082f6f5f163ef1bd83ae2923f92639d941d3e1b40911931819aa5287cc82e80b4110e0582caaa0839aad43ae93d99b839272772ebce8c78f3939a8f9938879b21e07fdf2b33285e7147603075d730a2a372cf6062575e70b1764e60645854879ca62bfc8ccdaa06de58698cf6d6ec4c58643680d3b5da55a8336be114bde95aad1ab4151694f5ece621a9434e2c6d448d8eb0ae9c2061a144dc1843e2b897d297e06b5acd2e9dd6d06e332a8d7551b3cdd7cc8582283e6399459c56e8e954163504368cf99bb2be4bf9018becfe472a2da1306fdb7c46dca8aa37b3960504f8588bdb2bfa0e58da562a4649a1ff2825a3a56cc2026939f865dd0eefa6726c888954e2e689f316c9610d2858a295bd03758e96cae5b5a4e5ad0ee473f9ee72c0bea6e0c0d91c3585046df3659b0ea0a8a50ba172286c7ce85eca00a2b68aa430c0b61a9b4077d15f48d2372e8e0a2e43e880aba88ffe85c253ce83ea7a0df9d591a912389f26d08554841f9a045b3e9eca3a08e4e39c592a36326110a9a850c32c398a68d297f82621d3c89149aeb42de4ed04a6fbbf53ade9b689ba0ee5ff28d912f3c661013f4eb9c3c930cef26ea25283198cee16da61214fdbab1628799042d974a41fe5a2466dc2041d79f9879f1e74f3c62852a8ea0b696b8cbe94a4912a71aaa3082123488fcd85fa7c33e325451842a88a0858b19e434096d54310445cf92494adf0b41dfd7aecb567710f41c840c7f3927c4e40b047d628edbfaeb074ab2786697259fb6898cd9582eee0255f84073ed9c49568728e01b90838550450fb4bb2062c7b37466c63cd0425061e42e68cc1e363bd07b72ca913f4adc7b8a0e34f78c7cfbdec901a223e6b2a7934ba80207faefdee61843c855317d03b5c4a670f2340519df6ca04bb0776ddd0b0955d4409bdf529bf45e590c711ae8192bd468911d63f09cd2842a66a0a9d310f7b632874f3a4aa84206caffe72ccaff52aa8a186825e37f36a1dfb0818a0bce80ab04aa8041152fd02a05bb8f607a17687213de35db6f50ddb740bb34f184e6db59a0e7d8393d4f72ad495cc50af40bca4d82b21cc4625b850af4fc2aa12406355bd94985a2c1c2e5798ca850e397526f6a2ec6102aa7507794a7bcf19f2934cf2f3a42ed99d09e2b857e275a23851a47738e6f9786511a85565d1a39630c0fe9aa1ebc10851ed26d4c65419f4e922b23bc08852693e8372da7df42b841a1fdc8bbac4d1ddb932684179fd05448364ac790f3dec53da1bfe6fc9a3b656c4d299db8ecdbe6c2d7c4442003e1f8c10b4e686a5e2f5f0e0bada14de81f362917fde11959389ac65a9d79e08526d49064da7bdf3c562362c6861799d0f3c85239fc9c6c9e642146861798d0356b4c39fb7b66f2bf841aca44529ff796d03ce620934544ae9ce395d02ac56b9f7f10a7729a127ad2a284c490267d7b3c093d87b909b699724cc924092d875f079d4e7257064542cdb4a5a1374f051904096d3c64d2c8a52586781ea1c9f0bb91928757c9d2119a55b88646ca49f9091ba1e6cef1fb1be65a7f46e841f8e96ef06ad1d322b454de7b26f274da5611da687ff824b4a924449308c5cefe821242f577a820420b6d7276213116bc388422be6d7485109278c65f18a20f31c35b9ea5082f0aa1879e4d7779595cd44f0865b3b22e5b6f7ebef020b4532a87194daf20f4aa0ff11edc630aef06629f601dbe62c3d9270c2f00a17dccaf6d19e152dd8584177fc053c75c4933680675f1c20f5ab22452b56cd60a32597514f0a20f5a9eadfb183e67457c0b2d668c40460e1c34b4282e3803571ce1051f14a545c620f12206091e1c257007ec41bd983b9eb04b1d37f35383177a5084cd968ecbc624c6cf831edb64d9c6ce78d05e8455589f0c75e11db4d71c13fcdcc3628776d0b4b79b7e52e5e0451d747f1b2b5572d2412f4ba15224a15352b933073de8e6e90851574a2c0745265cfad2f8bc0c9338683aa96eee2f9c101f382861c288ab97eb0d9af2ff09d953ec062da998725f52d9f9a6dba0098befd92dc5e5c9e50b3668ba99ee827693155eac4191ec762ade090f790d79a1063d2f3fe52919714415bc48839e3ac7d29564d8202276c10b34684224a7549dbdd37bfa0cbab775864a32cc20bc30833a22c8127197ae4238b6f0f4c18b3228fba2c2694c2ae8502332e8e62966cfe36511ec33064509f1cd19722ba96411839654ca39f3fbe5dc100a8326f28caa18f9674edc60d0e6c7269969ef1815f3052d7ffc5dae1bf191ae4383175ed02d4fca22477678e5df053504b1f1a069e682a65d173a5cc89536be5bd0335b7b90298db4a0464e934427fd925dcf82263caf2504a125498d05457484982a7bd0f6e5b982a2271363b47bd0316d053d9fc5a495295216ada982f21a26a44c95a3e66354503b7ef664a53ee4c514f4ab78e237bee6851494a0c2e478b989a9eb8d8276b1b45f4f7b6991a06f61a38b1c77821750d06ac67663dbff046def22a44a9244fdc59da099f26c39f7664e57f12668ea4789478a7c49f366829a3f53244ff1b362aa97a098fc9dce539612f4a0b96d4f879062639404358e0839cfd448506e4328fdbbbce9927904ed2c9e329d1f692397465063de9ce35f531231a808ba844b3a373904bd0b11d47a4fa9fb66eb35c321e055a546c8090a41dd20326222a7c85b992090f5f2c6c6d540d0fc4ce9242f44c7382a3fd03c8d1839d9e403fd3b7716519aeb811ada63089a8409fdccf1404d73fa3d46bb033d637fcef446fc53d2819e249c920b21b73ac872a098f074a223f4cd6b88085ee0404b1fc4423e91b3bde96fa04ecc67495d48495eb7819ea7ee4348319677ca6ba027d9e01763fb958469a0ed96c6d49353982cf50c344d2a63d66c2879bd0cd4d7d8aff59f5f1ec7403b9d949ed14d9d52100cf4b22d95620ef20b94b4279b6383d6054aca5299dd3cc691530b14ffeecd1afb428865b5086fd7c7b0a7e732ac1b5a7411025e2b3385d0e4e9c8a1d424a164193868684108a1491076419f569e20cb48eb188476d974e2873bfd9644e6acd02108f5b554aafc2fb14d38ca750442d38e93f4a672b899ab091d80d04b7baad3196439baa821e386e7f8354ce8f8832ea6ef53c9da9b891da1c30f5a5db697cc11f62ebc8b10f441f1cde5e154e679c707652c48aa8c29247ff7a0dcdcfc4bfa19b109a2e1366ac84046e8d08397ede2c56443d2939307ddcb3f3749dcccc84a2274e0413121297c929e0dba3b0d1a3b830f081d7750e4ec3568377146568d1c329a86e3b01f74d841cd141eb2c706173766901e74d441ebaa114ab78372e8a0835a1b94484c9e5dafc37a43c71c94e4a284df5632fd158b43871c34b5f72292cde8202b290e7a5fc8249557aee92770d062fa919f6466c611961b3adea0a86a899346e5dda087384f9a27b4e76f3b6dd084d29c259ecc0cb141710d73992f66e5f4ff1af451a5f2e52785c90c75a8414921e5ac39b622095189a0230d6a9a6439f92bc645071a94142b738efc3acea0be6e8e4e3aee75c64d8719f48fa964e8cbfcf9493823cb468d1c55661ee82883dabbddfd7faa0e32e89b27f687183143868e31683f21ebbbc4907f3612839a59affcdfdc2787701874c9aef984494a0718d4f8bfd4a393e70bead7795f700fb164438717d4a0753a9b6c6ad364291d5dd0944bce7ff7c13544cc0b1d5cd05cb255c7897cb6a9c7e137b2a8716302975bd0ea4eb7bb5cf6ac632d6857d59a840827f283ac858e2ce89e73f0d43633be59cb420716b4c817a793e5b2021d57201d56e0aa84ae6a3baaa085cda8b74ada6267142a2826dbdc338e90739acda2630a9a88144689934d4a41c997e7674b2515342fd3818e28e8e1246f06ad7b193aa0a0a7fd123ae5f8bd557f1143c713349d4495baf3f4f6e1eb70822e7a467f7265389d7ec3424713f41171d2e70ae96cc6c304355588b63b797237e8742c412d1d9e4326359e861604061d4ab0c304b794717feb48821223fea474399dca9fb2c516cb58d09040096818c015b0c5168b800b400d3a90a029fba4e24586f0ae8cec38829ae9b7b4e9b01661a72b1c37fcb9e00c64ddf0c78163cb771841d3f2faa399374550c39ebcfd7959a38308fa9986faf1e03914e81882262eb6fc9b8bd7e68e9810941b11f923a37407a1e3e808425dd1018436a98f19633a7ea08b8e233b5c89b91ce68c2c0b74f84053172f4474f2cd9fc88cacee442de8e88192e2d95bae9c609bd23cd0258994e3de94d756bd032556bc279932dcbb4b74a06e0c69f3968d72a00899335285ffb4972a1ce831f15f52b6a51b25bc811edc2f62034d28b38df31b0b7e3235d043bfe5538c49d679120d14391b63de9d930a223941c70c1479a5e374cee923574706ca8c1c55429e074ba99d9129e88881f66e1bdaddc1aa520e77c0402de131f7c6d016528c6ce0f01b39818e17e83bb166843c8d7c21392333021a9001820e17a893f47d2b85d42564d75bd460008d06e0c091c371e058ec8e1628a93d9c2e11565996711c05021d2c5844529774c557e0e5513e778143c6a10e1568c1b2f5f945b28b1b88033052a1e7d5c798535d2280810a3dc53ccabd9285cb399a91c5304ea1a9c8753f96cb73b2da14dac9a0fb63d8dc4948cec8b20bc02885764ae79c1959357290424d6a23de4e1809163046a1cee8dc169e498dee9228941052c7dbebaf12de85428ba92e69ab60ef49270480010a259888a322692db95f7f4209e2b5f3051d86e109bd2bddc61064a60e09c2e8841a748b58b9c4ec1a213038a1a5f813727c8d9991552a033036f101189a30189950362c66794ece2afd30a155be9ddb90cf9d6d04e3129aa60ac1b4e2c81c3459dcd8195c85965083290d32264e1cefbe124dd6492a697f858c6abfb13370200c4aa8ad257f2aee93d0cc83a5fb335b129a97acb1cb21b1834c24341da744f6b42cc5ad4042efa0c39705e311754582e108fd4676fc3bf9c0688426f667d97c7f1933c81557b8bfbb023a10d08143045a2c063ab078400717356e28e08667b1341602ee0ae0823370c5157c80c1084d76a88f916db362d6602c42d31839519b652d76020743119afc2071be3f7c4e57778d03bc049cb5a871011c0db8e20a2e9804c4c04884a2275cbc90ab6f47ee1959323c697183717802649445c040841626c4d2949f5e648471083db596ba386943287b3a6dcc4969bd942c8492fa52babb2b97d91042d321e72c97ea07a1569670dd951784a2a532b5a66ecda50e84b63da23a67c78fb680d033a99cb2c345a5a43f284259cc132ae37ed045a5104ce6ccfba0a5dbd0ced94bb4e8f9a0efe7e8caf91e149d4e6849ae93916d3de8b182d83de52362d979d0f333dd78d02496109eb3e55352ea3b68e1bfb721073b51396d07dd2dbe951095ae83a265ae3f6d7dd2bd351d74130d4172bf84f0a99e833231980cfb4a39e8ce72d0cffc72e4dfcbcf718e837e31ffc6a7f152566238a829c4b7e6bca764cedfa0b76d06b9d22bdbac1bd434137cc4236dd03c785992e14a24966c503fc44b740e3a2e05d7a086ec9ec34db44b82490d9abe091ec396d2a0e66ce93f6f5389ad121a148dbce74985d15622e90c5aaa10b3732c3eefb96650b4b7cd464c19d413299c8cc8be8f65c9a0cfeff825efdcfbd218f49c2ec3698d480cba2825fc53465018d45072c346f82c99de03064506393d96e1438ae0f98216438e5095928af1b4e3052dfbf86d2893f94d995dd0434e9d934377c608930bed86068c2da86529c590b1d48272e9ff530c09a25f6741cf5f92fc4f080bba9f8c295ba52c97a02b68b9278f7bf6986b82562879121b9236a60a7ad8dc9d5b7fcb538e0aeaa88831f8c8a6a0ddf5ebb804a5a097caa166331f053d7cc39fa69141860e0565cbda73d2ac7982be15745e308d1334f120e345cdbbe4a06982a22d8958defaac8d1926e81a621f4bf3c4907b096a8990747c3d6d4a9294a06e4a2a2fde94b2d0498212e76cf2c9f88d6c0a12b4f2891f52d6f61f5539822e21e51a71e51b41cb8c1f676412bae3bf22282289e9d7bd904fa723c2992e3bbc85ec7306600c41bff160425c4ee51309414b1263eeacf355760641ef983774d87c164b1e10b4aace9fde32c5d0b9fb816eed17e39cb6d9e6ce079af76687ee10e72adf03f553c5741653de899c078ace90ab3afea4f3a41d28e6e1b4a69c4af5b63a50f27fc5aff972a08feebaf059e2d6170ed48a13a6ab6485185376033da713ba3d556603e544acf2a43d95d5c46aa09eda246fee4497cc4503adcfec2bc9e40cd40ad57da64a7d926092817a9b73a4f14dc540b164ee12363ef7640a06baf588de11329b26562f50c25d3a35f6599d711768637da5ef6d819a49e87cafca982ccc025d62eed1e14412798456604e220591250661a840d139d59cd07943c6920a4d5776ecc9704a670b157ae9b798914a9910a63e85fe9bb59b3f31a552235328c237e8dab8c1b286b1145769cef9c3ee4fa882145cb69c07179932a38a5128c2ce64baf9f0a00a51283ad4ce86c99636ad43a1e6ed8dc841c496743328b4b80962134bfc09edf5226df21c99614f9e50e62ea81809cb5f3ce470de5073374274da3de2a0c48fdfe53d4a44010f3868d9529e1cdefd1bd45812d2e766589d3572c8381b81871bf410938b2a0fef94d20645a5d8a22b4bb9a638cfc8c206cdeef2af428f30ef714656165d246f1959d4d80209c0630d7a290b5b39c385871ad454b797c2f9bc04b7ca0ee09106e5b3494c252e3a850d79a0418ff9f25719ffaadabc02789c41efde4d154b97e96106cdd47e4893b366b8a49741dfb66b130bf2b6a12683a293c5144c899029e4d018942094ceb897238636246d3bdb254bb51b068459aa94ed91028652d09a32db8b30179dc6082450bed0876b79b34b3af134235be0e185362411ffb447a731821a326ae430d5352240cabb068d923a021a90b1018f2e289aa36c649db7e4ea061e5cd0dbce83e7dd0b739eb4053d9b0cb99a4bd182222662c72696b9e9390beaf8e49027868a934b8405752c629cdc26da9362aea0c7d8788c0839ccb83b238b0bdfc2197043029b6313604302bd5e01bf512387052a0001085c71858c1b5c34a0e0e06105bdb572fa14e7e29b9221a0a3015dccb0c002b00a6af2d8c9c27749054d069dbabdcf82e9784f41d125aeebc4650817590a8a10c2e26c4ba614b2290a5ad9cc4e92ff7944b650d074489b93d2eda6cf464fd0ec7dd2dd76272dff3841abbab893346d9a5025c383095a305da6a19b2397ae3c96a0e5aa1064c3ef4ad0e2872839794f495062d25d4a6db294952d12b4b9107236b5e14499788452b6884909e5c0d1a1800a7400c2c308ea8e361ddf953d05eb3d8aa066bf12214bdf59d21d11b48f7962c36d85399d1a829a63d2ef58963cb64e84a0ebc685afa039c84ff220e8a2fc730689312028a74672decc65f63f5084886fe80d121fe8b96dd70c3c7aa0596f08777a4242eed2c1c083075af212b9e4c816cd9def00cb9cbbfd72a675a0c6868cb9bb42587772a075486a63c81d0e94b8a74bc418db1ba841b436506b7365efa45b3745500d30b96f65550283070d3e512eb6c70cf2e421de19d62169ccca19093c64a0fb8b5cce967d7d7962b04fb21cfba99430503ea650f9eac717e8d9445cb7c61cc3e9d1059a9c4bf8bb6d4f26de1a2cc3aeb8e2069a82470b34fbd912b737252b0559a06cda307a4310233f322b50b27f58997e91b1b5870a941116c2079dbe6ee454286232099d5926e5380b2a94cd9b64a4f30f97a053e8c984cc3e91154cb73285a6f354cb8f558e54f61635fe05569442ef4e29083937cff9655268d62182a7c83969cbf228b48d73c2aa84fea4ea240ab5feccf4864bd6d95028d4d1dd9e2dcdd5f80441a105b98d15f2359f506472d65dfc204e97e70945e6aa9c4c4b8287589d503f9e0a39a5124ded614ee8b739c50ec1b3094d894cc184bc5e66a9094d82bbe760177b2f25138ab2f85ce7a1f4629630a1c83011b93682d6f57b095d730e9a376cc9603ac812daa7cd4995d083aeeb8ad9db96422871fa78be6f693309bd8465fbfd85d1999584a2fd9288ec8c8e8d30126a4e3a92c7f89de3320809bdf2e70ba34fc7cef311ca59b57caebaf8119e23b24ce5efd513c18a4628ef797a3a6ecaabd618a1c5e760218b7ec44ed922b4a462968a15922c844a118ac5886fe6662234b374f25f24662daf10a106f1cea9b4e6ee183c842263dccfa4af2ce78b210ab143d231a4adf8e15b518827c79ad8951bc6b582108afc3695dfec72d69f33b2038b05c0c08a41682199ffa6f28e20b4984c96f8e0e6223ab622105ed7257557ff03420f25b2c989a7117bf23fe8612b2e24fd9b73c9db0f7a9c7c377542974daafba0c81434c4179ff9a089e0492e263b912df31e94745b9e4ee7cd41b2490f8a28b1a9bccc8326eb7eb792ef85e4e0419db960eaf34ce4f0d21db44bbf69846f89dfc70eeac83af3d321cbc872eba04c0e9362120d1eb74374d026cf9baad22184cd9f3968f6d9927416931f6c39e8964479b6ef1907458931cbc89f8483227ea9abc4a658ba936f50e2c7c9a4356cb8abd20d9a990899f35e10ca6e6c8362f9ab43779a0d6a3c8dd910eab664690d7a08af9eefd3a629346ad0e5e73c5c5cb57b67d27010e615ffd4a7a0410dee4966491ad998943328fba3729f8cc80cbac594aa4a8748dace2b8316eeb33364edc8a0e9feef94420cf1ffb1316893cc82bfe90de29f89410de33158328b199a0e83fe394267cc2130e8594b85888fb2b0ed17143f11b9645eaa94db28011637dc868dbd8181b2c20b5a4bd6c8752a8dd020ee829e64e40b9a620418a00437b03081155cd0dc6e2355fef3d041ae85155b5073d6bf12ed2159f49fe3c64ea0045de30037c30a2d201a971343579f566441cbdfd8ff0b0956726181c35d018905b3e20a7a96a4f4b7a5de0acadd67d68f71aa821ac4b4268ff9622f3c54503f9e2eb3c859310525ceefdc5e88f1b1cc0a29a8bf55b5a12f564441cbd9c379a6bfded2901a369015505082e61323d3077181012b9ea0e788bf33167a27686f9a2a4d0c4153b6dc0425dd59f6bca965825ee5f3e7f93b4b5063927151827a163fd506f32466b624a81be73b06a1b73b4f8f0425850a417276aefd8f1f41093ef1efb7f4cd3c6e04ad43d55d32a117413b91bd4cd6f61ef44d04ddeb4e2561a33de9bc87a0c5903cc7909d25994a0b41abf74f7d2ff2ded90d82264b29dd739b7f63cc0241cde5592699fefc40b9305a44f2cb41079df4811ec26f7e3c72125e650fb4cef638f99fb1130d0f34f350315d467a07da5bfcbbcc94ff132e3ad0bd3bb446eb72e7f772a046ce6e91c48c03cd3b27f96d3a7868e906fa5de8d3960d4a598c596103355259ce41a42afd1162450d94bdbc99530ee629a40e0dd40acdb24bb59b272a0b58310335434cf29bb2c92b33c940dbcd935b2a652f253e31d023a976c96f410493200cb4b8f7a12e68ed059aa7b7a073d797101562850bf4d223c445596856286764990b58d102bb22ad60c1d1b06205c50a15e89ddbf1e3c3b6774970d0910ab245dc334fe96b4b1374a04279d11ef46c4ac729ea0a628aeb2885662793b6f1903b48a1041d222b89f03b46a1b997c9e031d87f8c49147aac9077e147cc95cc0985a645e663726527112628943041b473e7f0137a6f5f6a71532df2194fe871d324cdb0186a36660be8e884e21bfbf4cb4f5887540727d4beecf7df38ad52e726b02a9b51c145e4de45190082d0a1093d756f28bfcd6131da4ce87f794ae94bce90278d094da40942cc2ea6e3126ad7080dd5dfdefff38c2c19ed3972948da0c312fa9b3839d3493e23ab8b1a326cec0870a042bb4a5042d39317dfb3bcce933cd131094de825d3c9c45e1e4d5d7185e3d8193628d12109b5365e666f23a19e246b532284dc76c1195988856f01821b0e8102095d6265fcce5944c3b3408f5042901f315dd21efa35e626cd4ba247a4468d1b8d4884d6863d915dd1400723b494e388ecefc9432483866771b4e858846e22df49e9209e918563c60d19596cbaaa00042040ec06175c9c2214315f625d379a820092a023115a6efc104a2565ee41596c22b6a52e021a90b11d8850cf249b8ab1d860ff417be83884563f41c40451c1e37376e830849e4f50f3e4c9a3e26fa8d1a413341d2a88fb18842c11b326647e61396ed99a9175320613d05ec924cc7dbcf099b20444c80def9f218852a3184ae8dad28b8e218849275292100309ca648d741563eda520f3408c231874e3e798602246b8184528318860620c01043184a0c5accb61449231b3b9e7ae1023088a6f9fc8a7934eeeb16200614b3ad4251dcb2eaa1959317e3086183ed0b44efe3ef7a0fb4a27460fd4a4d92bc743ae98ee432ed0352270c515a46ee4b0a183183c50728cca7d4b1f46e60820c60e9493317f0a629d6f9dd681be416f0a9d3de464c29a8100d7e20616e466102307daa53af5219b0c16f43223afbc6b44a09c1838d074daca48561e3faa72034dbe5e0a1a69f6427c3650c46ef83ee149be97ce67f0b28d2e6480a0468d2d92021d084065a30b10d4a8b1058a20460dd4be0a7164a5f08a278941032dbf659624b6ef9308034e0262cc4053e15a4c4c12c5900167a66e3766281d0da220460c529d924ab95e469f560f3840025c8b1b589ccad10517a95d8b1b39500b62c040133127e98410756ad42fd0f4ef55ca92269fb236860b1459952552f209fa93536828c02a460bf4d31054870ed1bd3a8fc191480c16a8613e6dec9e493c7f054ad278b1c352daec79c75081a6fa5c529c9d52a1090bfa25c27bc9c924546897fb272fb92307f59e422d8b31cdb9d71cf2c7149ab7cd7d8e1f912de6247a97ba22c84c9242b3b8e4a11533079b71149ad2142c6b83f75cda44a1a8ce1acf6d0e859e54d850277210a5c30285122475fee3137a59c83e327e7646857c78424b77e2ffe3fb05dbf322a001190030c44727ec83136ac82f653a7390a54236a108dd8ad349453e34a15f4a3aed8ece4726b43e2b19eaf4f3e7327070e139b49031034717364c51c30726d4963931419ecc2534a53d298c6bdea4cd22638b2db4781c7ea30617173e2ca15db2bd7495e3d87c7ec31c183e2aa16ece9b3d825d3cfde28c2cf71b3664e4e8a28673a1450e725bf8a0847e1ae4c6b4a144ff66aef031096d23c5a610f49384a24f5fc756881b398b1f91d03d880e5b1946ec5d19905093a71319fe4664ae7d84f641e3c49432472849564fbadca1ef2f6546968c1c356ce09081a0f0d10835444ce1849091df999451a34b3142f78ff1468836612784c8870f6b84f608319687f8a10825b504591d3a5e0e9194087dd3689f502782868e11a1a8ddac3962424eb5e9e3108e52223edbc4c8105aca163c860f0bade1dd4721948f772169d0a79bdf0f4228976373d6a44e6552f520943c32955b85bcf2640942492364c4f3f2515b3a1f81d0ef6a7b838ecf4192ea861ae003107a868e0b424c69465621c1c71fd48f593b17f354c5c88de0c30f7a6e6eb3cb0f379f5388f8e8839282050d99afaeffc285f8e0833293c4081534538fc831397cec41337939baf485cee6ff871ed43971d75d49c49ff95ff8c88396cdc3b6758918f181076d37ef6fdcdb2565d93b68a5cb82089773c6132297880f3b28563e12f26c689bd2b13a68eddae27d2da7b4763ae89f7a375f85be6e989c8f39a89dc19b9115022e1ae5e0430eda247b1f9531c5d126f7a58f3868b244bf4e84dc62315b630b10dca831822e7cc04191a59b82efa73fdea077788414838b42f0e1062d64c7dbd3f99e740a838037d9193edaa0277df349b35ed964ad86163870388e53860f3628d936c40755b11dcf71a3860dbf81e50230868f35a839754a622ac3b395fef0a10625664f71f487d70f1f69d04a8f0862dd9e3d7ca0411761b9c3c7627f08227ea30602f4f071064d34568c2f91e4938ceaf061066d7210a71544eea30cfa872c934b287389199f9185001a5968b137d686e9c40719f4caa5e34c50a6fd499b91554a171f63d04e43ccad24748411299bc36fe08c0f31e8a1f74f697addd198b6e3e2230c6ad2290599541662860f063577f278efd97596cf9cc3c717f4345b1f84c7268db9010828c10d2caeb8c20bba298bff10d726f6d25d503e949e781e64eadf930b7ace7db0904b99e6186e414d3d297592657e4a5e04f1a105bdb3fd4592a42f58f2b2a04caea437c578ef9263414d715531c4b0aea0a5cfd9569e64053d482afb2e95630c797337888f2ae849dce4f7186cdb4f2a684984e4a04def2a06790afc95ce2c41696bed430a8aaaa02f9e7651d0e4e810038572851cd259facbc713d4a4417c92edefc3096a70b18bf03f37412df39c7f95bcb237c904fd46f689907bf38e122e418f202e88b70a49bfab04656416499e4947b76792a06ccc9111cdf13bb28284fb38821e521271a7e2dfabbe0f23285a22b9e57c1d32dc53044598ba52394fec83086ac7f92b95319eb9a77c0c41ef98c3858a950b811ddb522adfe8ff0c4df011044577e2f9550a6e229680a0893dbd13961972fb4581227cfc402d91937b92789adac23ed043c5899dbc36e4a411d4b821c34da0c5167e3d5084b78d860caa65f72af71b39ce070ff4102377bb3a64401634b43851f8d8812e2af72b3ee5c98def43075a104187c5a4f46ec614848f1c6869831635eeefb12eeec1070ef48c295bbe3a511bd47d0345e5cf674d1f8455774ff8b08122efc3086d1aa663ec97f05103ed82fca45c8392976259741734647c0d19088b0f1a68f6e9bcdd2de76bc83880b31622b8e116b89ac134f646c20a7ccc407b1b1934ecabd3850bc2c3870c141fd32594debaa0c2e9dce123069aa4703f73a6c488bc81819a27b64295f8f1022d82f2a02c6e1860460e2d30804a031f2e50e286f2b0994f5be8e4a305da9b690aa354eabbd17db04037bbd04827fc3e08191bc0c70ad4368d14b4cd5a13a00f15e8f5e5ed267332158d9259b1948c68736c026a3c8d2b82072ad4371de468c9983449493d4ea1bf9bd22deb704a8c58081ea6d0b3e8d10f7ef193aae4510a4d98c8498cce75c75cf120856eb773212c49ac0dd32894cf1b8d97434bc343148aeaffe41d538511d90c8596bb54568df0cdaacf02366ee44868a050730af99c64ac7093368f4f686162929fb5f26dd6575c61838bbe237878420d2a86515d35a645c424389dd03b662e768d7dccde7242d17ad9369b619162858b1a9ca30b090cc163131e9aa8f6c88462ed699406b196347b6042f770aa641c9d629aa4f7b804395ea96af72c02ca126acafe604adc5309e5c325d99638417f7528a187eefa2f3d6127c78b0e3c26a1f97578bdc92424a5a424740bdad93ee2930e19130965275e2e21c44bcc797940420bfa36ac62da7ce3498f47e819e395bb7f4c1bb6768412d3e6b2bc38492c25cf061e8d50920c11ff9bb654103a46e8735983cfe6afdca1f25844da372ec6709f57843e71548c985b086df24468ea62c7a4312621420bcb1d51f249a58c9d43a8b1ae3cc51e953ba792e061886455c7c690fe475308d2f68b48498510ba76b54d48713ab63b23780cc24310facd06fd5df59363283d02a1a8baf1e4a65d2b10f000849235df59ba93d7abf00fe6e1075dcc32293d2f4252b61ee0d1072d620a41c99063e80acf7b051ae0c1073583eec956236a7b4b86b5482c78ec41ff37cdda9c5f27fcab072ddc2d668a6d229f28f3c00811d225d1fe726f8d2d4ab013e8c0e2011d764460385079e041cfb1ac1b23c7e0d81b3b013a78dc4113a71fae1f4ba5d3ca0ef8a521e15107e29bd21374b37e7c2be1410725f9ee660fb1b71b923ce6a05b9f12339bc41d8b6da8840fc5026128168a04e2704014c34039ef0153130800102426104622a16038a66ad31c140004572c222e32281c201e141214100e0f44815018100c0842a13020180c060281c040408cc778f900a8a0ccdeef04a68a6d3605f1a2845951c5c9a82063f463419901647e124a965d3247b062f4a9318307375677423757ea4cc4197e14043c58c731e87a4d4897ec822aedf0ac6084082a9798519f0635f78b5095292a7683a03235b1714bbd1227d666cdc44a2b5bb293c0a3c0e9035b2ae49dde35099db010f2e6574fadc2d8f52f8c452c7ca5ac4f7d4a1ec121bce92d3a96d48b34036a91f4ada6f444eeada3ee61a398b028f5062cc9cb7e33232a208ed80104163f32e0c41b02de0eff7c5c7a2f8046c6dfbe63866cf21078b8c2b38f9ecb9c4b3da6fa5b131e3c934c140ab9b75a073e9cbdd5736b7f515035d736b5f68ea6994813b401097b44ed5d137ffc6db927a30e55a3f3561d2c77007d83512a512e830f53ccb9ca0de2ef3e42a8366bfca22f5614fa8536749f0d228760296136c69261c50aa3e9737107c044d4c4511eb9013fb4f18d4e86458c1b22d81248fb4b20dc9d2af57e6db28cf940bcd07d079b25c27b5c11dfc0350a321b52e59c5d540a1e1fa1204c42836e0b892b586b8a03d9d54b3dc4e94d9b4bb647e8533587b50fd1a660c8ea6ffd930e35dff7fbcd055feabac7372cc409c78360422d430ccfc4cab36ce62374f92c9460155cc550631d84b62a5158454645e55e5ee2a3aa126ec4dbf81489df43bcf3dfca56bd7ea70e2a43488bf196ea9c74a81ee65af372f028ec676a4794913e7615b38ff287c66088794719d1bb7271fadc0ef328df0597200a2b1e86cae9a16c4f254cac6a82958863c61fa879c0cd98afa4514a3500eff975b0239b359821130d3d0f2c2bdab94491a6a73ca11c369fe60bc90fd880ed11d5b896f76c29083d885399bef24f5b1c0727769ae38f9fc933888881fbe0556f14ae3135d3c48d71b7780c8d6c8dddbb26a229137d55784b30656ebdcd2890d867d6698604dd0bd4e30bd464a05c26680990aa570dfcfc8e309913cd66a9c9ecf5f0dd05bda48db6837bdccc821eebd2b3a168059827084badad71dc0875ad4003a2eca101915601c5288cc0c358622b636e3d68141d8e0ef98b07914c2a5dac37667d4803db564bb926086ff501c00856f85ce69ac7da1f621d4433aa6237fcbe8fb9ebdbcb8019446d4caf9a255cab290837a2025365bc44741690c8b884488cd93a59987e65cd9c397fcad2c1b9a6e2ee469bb6902765a16a5c10e98753db65aea7ec3b0735d77567caf3725c9337cce9257a4ef6d92e73f070f42f2ade2c6581cfd14f8f2eababc1dfa379cd0ef4070f9decacd8f9df09d12e36bbeeb140be5a50ec515f71892ef359e80d70501a8621c7482aab3736145c5c2018926fb80083124c00a8aff855921df228628973c940aaac198e4f8ccb1d93690d5e79825aba428764358b7dcabdebbaf08ca9393540905c9167935729b463f3a9af483dac32b9698af7ea79d3d5123d8999ca4145265d239204b3b31f113934f1480513f59d110a0239cdac1a0db30e73eb43506c2f157b9bdd5780106a1587e78ecdc19ea6cbe843c227539b5279d665edcf50dd426712f3860953088bd09645de086690aa762a2cb3ca77840c3a8c17705a5727da62f9291d1a57cdc193bfebe72f940c5aa7c9c43672024989e76c0037b830ac6c96ce764c6d951e045e1214638e234f0745e902b462ae2cbf54f1584af9a0000280a13f55ff28502e74da7ac538912a52187e6bbc58fdd0c1ea9b24f09ed768d0c84942ee6cdd32a2773ef020deca255b9e71670ae5529d471097238b6c88e6096149cf7541b4a14daea4d5808cc1532a34b7171fb8f5b78dc2d2aae41e116ec81d1ae0c705b098e0181df7c0da9e59a2d39ee72623f08ba77679ca8c7440e1877ff322e91939951248066a5f21068b3770acf4cd6cbc9958a3feaa9dffc3cf972ae446272a800b5d0d1598dcc66db0d62b89d9a61fa69096bea1d07719f32813f293ceb3c2c705cf0972b5cbb05ba833640fd1e9daa389eb5266eb735f1329f88a0df41a4b2347ea647464b4ea8b9d626ef9a96c201797dcce421306e18f9fe672809e0b096fe084080e0a1a2ae44ea2d311764b14ba611f881c17c450705ec60aa9856c0cedb5fe893215d128909451080ff5443fe86b537fe11c6387efb083bb00ca17898a6f72401cfbf381fb609a715307e369ee6aacbb77ef504a6ff86c013d3021de4d5eaef56fa0b859a9e92af8979fd2172c3cd9d0e47fd28903beae02e5b00a7a4c2bf6a8f0b9ed00166c2392e444a0570ce4b437a198172df89e7ad2a2dcc4604d11e996875beca6e171e6af09c65441f932e7e6af3a1d83f417b56ee33e81779cb591eaeb148bbbbfa098755d5cc6eb3fd63a8bf539149db42da1fe4094f855bc8eadef6b0752a2da217f57561ff9beb6b70c7b28a87723ab268a8f9c92033e547850e62830e9e7c84e3a31494746ef217c584e2112ad6a95d81ae95e8dc0c2fd37701b446800f1509b31c5de1172af143229c033ef26d6b86d0e81e0e39b78085fc70029bcac5b0bba373f2ba7ebbc9a2eb915f108a64408b801f6a2883325e981fcfe95a5d51cbfb184f4385f6ffb618cea918e71b0140f8c39931d7df842680dc47b0b1b9421b042f9a518bf2ded79d43d3b189be049eb1b8daa707d39db991a964602e57b2e93c403016ca45c4ea6b4d9e5fc49733526dce9b3bb193424564ae7b06dfab0ecf73c2fcacff8b43615cff24f10a42a85a0585392ca66c424099f95189964d3d908fd41917afebc4067acdf0ef95ac9fbfe041ce6253b59039bbfbc8f8157573e4545ea6a3a0c514a18c0f57e5d5478eda972aa3b2331d9069f5b28862a5a2f866de395cc819e28491123dda25e53e99eab8d7090c8b8d21f1a536071643178fa8130ee46f0d48026275489382cfe8028eb0174ccf4eb734c51be5f55f72a3829139163457be4883227137a7ac7e50572df8bab4dd0062b075ce16548121357e215d14f8f3bb479c1c930af945d0acf87626d88584de4fdaa4961e81fa3338a4bdbc53ff0b794ee1bf050b4ca39a54fec206ed84c74c003310f5a5e904f052254b1c4394da2b282d08dc128066172940afc5e81298f833eb87686bdf7760a0dda3e7645a6d2318749cacc80281fa9466245598af2b9ee082f554ba4638276c2a104f87e2d0370381aad872a68436e647f821084a0bbffe084a24354db13f345d726b99baa38da3e81dc7e7ee63f49e667bd9625d56a527fed4fca18b264fd039d9c06d73e6be37c8184030c6504dd4d1ecc1dda7449d7452a91d9b5a0b5dcd46d7056c91ba92a53cdfcecf1dafb430ee291762837da88d2913ada677a275752376a57b9c28f5ef677230954232cbd6e58a3187dfd0d9c4f63e8dabfebf3a1ce517e6c033dcbf60660892e6f1c675c1d73d95325e1762589886222b85a704a8b6f4d132d5f12fad42c8033cd79e1403021e1c59b09ebc06b2c5e62517b8261674c64a5b0063d18c4a54fbd2235a7243e5d0f9054e28f18377d76da20a797e3b4f7c1ab5dc63d1e0828a0911e49a6aee648125d6c59217054748789eb400b27c1259c614430482297dc09b52d7a068a67528323cd32759fae6691ab6ac644864acc34c7df6b29e5862855a3618781bb169943f1a2e28b0c9539d69137c165f8d504078929bc9376e8abefd878d268f07622d949649b0cdae872a3efd6912e473b1f778b24c97b57292a0483963696b328ad6f10d559011ea98c1048b0809a089001cd5ec7d4055993e8552725ca640de2f89a8d3db28305d78d29b38a3ab788c3d624f69fe6f6d7600640b4bc95f32b248264936f66db8e5ada164858d5d0e2b51a7b53c4d06013185559544398a0055ea5857612eff5b6ed6959684cf3235d151e66d104a66d6de2571ed6c658eccedc55b56de51ec61796cfdc26614002a19af9721f0683115f881a3b4707920f49242f1ceedd2d19693535706549e6451bc64a38eae8f8517696b7408c2552f0b13395f1d3891878eb091cb1e0d082c2981558297187dba330f640186560f642a109dd184d96b18db48f7fadb5a89a143d56e279db7b5b5a72f2b2932d5cdba0b0c9353dcc2f0ca8c4969816b7adcab5131318e66bcc343c2ce22b62e6cef488722ba21e09389feeab0537af2b7f994d361740a605fa2f18cb6f0460a30c71e82d162c32b3edd8f45f1eb262a204ab5df919fe6c3359191edf3b11b97bedb2ddbd7b8372e6a3f7526310003e8950b7d15f56563c1c5ce7142a2a1a227bb9fc39928c1e70dafa090e101f80e5c0d7606bed01be6bc1c65d4b312ddaf8032f85a9f78c5351e94bc8f507115344453d62a7efe459b3325b71fce69213ce55b7a2831902d799ee19bef70cab9b4858d1bfd612904991fb33dc4474543fa1f185356518ff13609cb0ce30a4bf4258dbbe5394f9047c60976ee274fa6e26158f1e4fa0ece6effc387b0ed430eddc09013532dae5c0de103463618d71599b5fc58ec88676886189031810f7cf54889b58869329b04f7cb4af462d6b84663e0e375a55581b5eb669ffd598ae434df13c626b8301c8864919a3dacbe498390eb952562d8795177276d9d3e4c84c39170af0799efd8e51fb132a8d23a323b0da3b4c3bbd205ed686b2daa715aa7ae1a6deab7a2529d723b9e62b0a795d4b0fab8babb872c7771f15cd2b256af68a3176da38f7f6b6d11c0a7a30eb82e1f0a3ccfc9a7baaf0aa8d6355a77d5edcb15fd45c3538f6d790db37137a05436c50f595e4b135cfef85c5292b0b92c5c46510d9c896ca8b9a116ba5196d85647f5a21209167e33b2dbecae027aafe44ae0c7a991c2c5153c6faa580033e18268ccad8295446f22e275a9872956c091d3818934762cdf474469b0caaca3f724e168e85db3d0de0bc3e736824b15cc5fcffcc8000a277fb49aeb8f288a785334282d485bc591bffa14d1a6703cf9f8a9461c3ea17609256a01df9fe6e549ae8926666498dce687ce7258f06d65bbf748183e28dcc41c53c20280f9a2eceba0deea07b0536ba57ea88faa13e900a578d3b6590cb4b280cc4fb404c29cc70515bce297e7a1c3d9b315001d4062602df3b0d37a617a675a6f074308041c493f71f5806c193058644da980ee18dc18ed6a2f3e00428d120ce696d38d38b6707e6870ebfaf67841842bc10be65eccc692e008e92888ae701b01096cf3a6ca8894c88e05442182ff67c7472de6f497fa88af31c411d140d26149474299460e3889e85893e221e3f3e9320d3b87c83b40931205067be03733917508156609efb4af4331c6cb20a9174bf861e112569b567f0ce613221989c8b3e6ec65f077df52f05d545befb2c7088ead403cc39415768c5333762182793f03629995e4cb8716e5e30986015b3aa39dc9d43c86e08ababad94509c4e55d4b769defcf02943e8e22f1465f5c21c21370740059899cdece63b3e47f0ec8a0755499b509d66dae604eee166eb65f211e6041df6202a986d748e001e5df8d7d466367926d7e804b6a5eaf5529ad0851adc89a0b77b553eecc514463ae29577216e65eefa9ab0de24796fd71223a3088048011ceba78d720ec406a02888e666a740b6b8a88a7e28dc8993bdd71821a6a22fa828b65ac34bc12afbda190dfb28a3708244224a670be31a48097ae9b98154ca0b23320b0833428372fb130921c220bd0650fb2f4a7d5c8704511045aa6baae5977208f0c6cdc844c150c5f7649f443538e3b13bdda4ad463c01ba26715cee82f275815a17f7c69e8e63aa0020b9a716cdba8cb45d2dbbcf07b3fecdadc09ef02f800e6524f2ce7918a2c646d5e7390509e0c4d50a88c62126c42d7eb30aa481b87a7300f6fcc250fab9dad5ce0e7ce614a96181ec80dc8228032479e3ed2078215790622851e8014b67d7766445a051512f11142672f876f5558028887419d56ab038ab76acce5771b87cdcaf43ff08691144163ba1d9a743af155b2d53b443de9d4bc89ec3da0c3b2f79e017e12cd1da17f51cab53d7c0949195bcaa8b2debf2d94927016829af91e90179951a0031739180275ea6b77e436e829ab642c88d484387b7da46506260a4a413321208343f91411c0311793cd11f4659df8060f2b1c1c3aa470336db1b94b2aeca19e07f791096f5e2dc7f4150b7a0b5affae1607e00cd02b10151cf2539c09467b8e0bf461fbcc31effd8a6423194b29ddfbb10dc643a52c5467a092398adbd69f0d746783a328274b3e0c9ef07acc559d30736767c642625deaadfedd7098fdbf40152887899331eb564880070b86c29a2e7ceb4da0f3125db605918b282ec4ce7ddfd9a166cbf22d1601d10abd495eefe537a7f3f9615756d0a49826bbc12147be11b5c1f76a511dc6354de828eb9a7999ebfedd1069aef97935200abc3309ab214e8bdd60dc7311011d88661c3103c69235410fd5d86e5380b26f77ba2ad804f3b30289dc411c38b0e718687f191c151e47c60a3f9baee8586a37f63b1a9b3eec78b31dccf7b4875df833f06ba41581a614335966ea2fe61906b21fe837a83251d4ac79f4b9dfe7357172b183a672797795b26c3488ad4980480dc2061019bcd783160bc0502377356329361f9f54ea131ad7be63ec2d5c52ca4cf39d9048aa7dac8a3e8b25823fa975778cfbb3662356b40139717ac5f2c6b2dda62e16a04dbf3af00acbc05cf590631a08181035745ab91c62f3586ed1f6df1938ba3d1a5da7fcc38a826f352621092e600e11bd084d9fc47ccbdc9d0b8e12371d80cbc78e09fe8d349e5a724fad802c388edc39975e921a578b56c5098b8fb5e50ab2aa93ebd009fe2ad4b04f228c2d680b05b526823056421312dbaad9826229adf4bba65ba6c8a3f70dba85bf5118053bd22085c331d777c38caaa6d2045c3f746cc62d1ebb1f50e8573ef2a2cc0bb9d544ab16e8781c83b0e23adc8d470d217efea547344b3cf51edac925462ded210ec9f053dcd106a8fa38b1de04dd4d78a3aca6be8a9142b926aeaeac5d3d91116b78a58bd73ad9f3aeadabcaf70e3c88c6357b6852785260060960b3680f0b2811d9f788dc69b2f7aa663295ceebc081c7912e15675949d3da6c7c58d466b867ec9c97aa165d46d12d9ad911a90a6fc0b0ea740f7eef208fa1d784c8a6d69ecaeb5f7c790b03121d399aa8098eecb6c7e7fad5aa3eb18201b96744d5e423d38749bb008ce4ccbd9b740222c1b0a86271042b3e5ef4c87e2c06ca701cee9a5dd6b46749d530e1d080fbbe56e7247a8ba81e1e44c488dc00d0f0f482b3184e47d1d9fd94dca6022db022b6f9df3f5a2946b546d31e9461fad935f3855f834712270fefdb1bdf1ea11909de6237236b229306f7358d4650571ac33274ade84490cc85bded1eaf9bedd76efc73b0bb923b1955523cd4def55de7832d1f4f4b0db12eb8259f60ad430870ca8110d00eb96dc23d62f38639a8369ff042fab4a7048a136149ee2646b056a3c186f66461c3cfd59892835d78ea8c84ca5bffa32a19511f5a3449fc305f189a7abe161a851227e4e06862c9cb4f21cf96f78f8fb3f596a54f604ca5092a5c594fda441e3ac38003ecd8c6e5440d79676bdb0841c103dc89e24d20d2b2d61c9c084ddebe0f9745f723e14aeb01bac11f05543e2880e8c710bd046a83abc57a40b347ba14f195bdbfb35958680cf3da15e718ddbe1c2eb1968fc1080f5ad126606dda6f6d012f6931aaf769c31b9634d693564584d3c92815bba8133b17078a2086958f66844f63b3f0ace5843f2321c80e6788b551700303f59b12e91ae9b925e0dfc53fc0d6359de26d14f2dad14504a890001cb21da29e6539468c853b3518e3d4c4162441fe5b2d54189ebd7dbc456195e099e1aaeafa6107f17b3fa75fa766fd6662740a9e19871ccbfcd74eafddeecefc84f56487bd353d002a0b250dd69ac0461431fda940f739795e1223a8ff139efdd707086b160a0b2cc30b68f4e96c70ddf86492c9d0ec395a2680849d969158d15fb4673f0de8c7f3766a3bcb0967462fc30465a236fd9c891815548c1430d694bb386c092458ddff34a5e8b5e59b1d3cf5189170cae3ba3716344c5c0c585212af54e8d177e6c9a49c21574fac2ac7cf02e15fb2d258449ec5c87a324915a25e30f7404f14ee1b079e1aa7bc85370f1371285bdf50456bffaee88a18e0c69a95100ea32eb35846b05f1710654e6ec81fd644499f2ce6ad03eded03de6d5acff1401d43ac2c3db3903be80d44cae5d5b111d5673304623a93b4ea5ecb788a7cafe058a0670e1559e22e13500b6fa63a3e536fe4340990e246d3a35ce382e6eaa76bd5c26f2e00a32af105d571b00c32015aa776e5f2e86c43b2e935efc7b612a4b1b1840714c0e821233df14bd7e76e58638b944c113967459286e8f2980978fd4b113080650348a117d57718ce1f1fa5a3cfb2cfb8f17c1f853fc438ee1c24eb6d3f93df052613efc2f4c14c57ff3b259442c4195e194b3de312bd575880280ff080ed2845918494a92b44e7d350e7b493612b2245d535fdbddcfa1c0778dd22809a21408f61991e24d285c01063ead00b8249bbf936eca7f9343b21a2d2dce1c2146d37205c554f69bb511b6153a4df6dc39cd57bfb6260cf656c4265795bd21b3ae05994f620a6189e02d1aefe4c2e10240dca237d848b0607755c1b2443b32c80b95d79b428ffb37de6deed7ab9afe00e71e1fd014a27013c4ea88ea1485970a24830ac18caeb46b7118f1df5c7ed9a254152d48d068ae84daa09e4be64076ccb674c31387654d723aaac0d64b7b5bceed9436fc4017b41558f43caa392d6eecf2bc799d6c94d2cd252619d15a5985c733fd74d5ca88365f6bf9537133b074acd084ed7834603a2c3c589a9550a403862457b77cccc2aeb8d75935aecae4832ddab41e17dbc9fd1f61e22b88b0550df429c24d7c33052488ed1d1e8023b9e8efa3032cdcda8fb7264c314673877b508cb1e7a918cbd50f9006bb1ba4aa40bd2704ddd5227bc212d187e6ea7c790e5912bdc0e2c31886c31702bb078e7af8464a25338c5800348673f456a377c843f5a6f716ab4543d49f7b4b835ea3e3043d8e7a2e2986b7ecbbf931f069837d35d2b7cc6af1fa296c3e919425d9bd016288fae92e87207a15d0c089fe986a49d5b58893f46076848f27a272e5c4f1902cf5ade7fa283fedb17e23042a0de0d0442cf3d3d6875f593258c9d289104deeac42708ae74e095bae6cf06bb7b8128f99ea49245d5bbdb3b17219a58998709a68413edcac18d604882efaeb961708f1436f6652b512afa4f84bf7cc544dfdf6c43ff8dce5940fc63ad75db7b17f045e09a510246f48d0795aec427e476f226c374c5f46c414af5c4a5635f15461b27f17cd16d507ac3cd6c3eea4b43d49373e19ec73cf4746e9b42577db0ddddcd4a1c3a3df724dcda219957d16e92095d1dfd642faae55ce389720e6257f5ad39a09c44fd0ca844df1a3d4280b0663fe205fd149029709d64580cdc226524350cb078399bf94e2a2f583724a588ef5d86d672aa100098984b00c271a02cf85888706c80c52d5c1307b801c5517835c038b0df60d0c18587c604009d31a614c4f9786bf042e092a119c718331c8578b7262038e817b037f1b2c939a7617644408c0813342d8cc0f9ac7133aa029fc975188c520c24080810c831c062b0e6ac1e18f686b1d0ea080ccc6509a4130797369f54f9b1f08dea360dcf860f94558f621af3eea09f64d480dc28c218fbdab2fa1581336b986df4da9236cd01e48df7ac160e62148e6084d0812089b1ba2d7c1fec1307617490bac06b50d7c1db82521ff09ab10320d3ca783e584b0060c83120df23db04dd52717f749c04e7ef37f92c7841a08ad0c340dd47d104ec2d013e29fe09709cba9de07c8b1847204ab3d58962bf2944f06740c5ea2c1ccf586108b80605b0cc63ca07fb21bf81ab87ce02f8465d297501a510bc14bf04ec2665e7b61fa0df26c5869bdec9bf238004dd2c03d83cd4407445c6bf3d0b3144c1acee8dc0f63cc3588a9c847545fac590926a6d9ad8ca59d91deb97d545115adf68778c05de5f5a119abb7b5bf52ad1edf4d9ebfcb34c0b400d83512e08f59009f01e4037800248501c2689198dc01c00a002006b4bceb6c2ff5022d60f6705dddc1cf53ff472cda0e0028002100f2007c01ac2cc0ca8042012f0e10ce77b4cb9c0134014406404b7d962da418d0fd004621c16611f300c2de0fa73b07c03740ea15d0623f9d1b17c01202aefcc079b66207c0027009603d00cda93334ca80d2119bf2ad013c3b20cb01ef0e8ccd8196eb27984e0002017880f9f01e42fc04917556643803c5ffe59e2a3becf199e36aadd78901471b01f5ecfe81146718f92cc211aa74c50e0f12d629dd00701ed042c925b6bc818110c07c7fcd2ba31020ecead2c5ca000401ac03681130c4536221a0ce96e9a685178e60fb2a40c5cad02a1480292aece28f61802be9f36bd4f2e451da97d900a80fe0019016012d582ada9d19402c0004ee449487e7011e028e0ed012c852c0bb0e604cb3aa8b3700666800dac8ea0398fd5c24430200c6b6f50a325c1e207021240d013abbfa45622f2368727775f695e2897f85ff05a55c339a5517f7339d258d8aa453a886bcc9c4b1c006c3c6808d85370e2067b65ab86380dacd5814223c4b3609dbcc4257a4aba00a829d000950f91792a88e50121484df616fda073c397df0757a718ef62867e43bedb4ff2d3b43bc38148415eee5f7451dade562727a457a50694456790c2311ce714a58bcc34b2480bc3fec08fc0afc8503df1e3eaa6552393a39e011897b4a9d73bcfa1c5afeda2a96d6289a00b5d625dfa8e8801a40184f3a3d997c64a438cc37386e47512d1b35a0d32885230ad9346169da70313e80c7301e1fe945edc6c00e82c2789c4bdbafc97108dbac05b7ba46ea344a8f776017f3e73403317aaf3fbcec65352151a5ce7dc545f6e793f74e7eac1d88c68e1aaa28270444047501d393070e7dfd982709a5a02f4b4d3bf64c2d0e96639bcfef48f1b89a85ead3baa3668ef7b41c6c9d62ddf7c8c392939112c5efa0b68ccd260dc86747a6e2f374269628d1c231ef157fc144489dc48a2f9178710dd2e692e0bfa7aa01ca07ca83133011bb9ccc635cd5c5fe1a4adefac8a2f804d84a10e3203b58631170199033600f0531d3290462034164278869ff11c17008601141cc2d747705c905544a41c8069adacccb56c96e762bcdb9ec211f481426657c1cb8705908856057267558b30bee31e983c3d59a3c2a3a7c9415ad613ad42cd04650318240099cd3462886ed642ac100152c3ff3c5eb26d0422033c0876b5298eeaf27454e3e42c9df742e91e7ad265b618f792386454aae1a63d8b74b3767171ad64c8fbc3fd6be7cd02cb8bb04eebb69116f6c4d31f1db7f98964a92b1886f4d6d72b9888036b3e37d49cdd441fdab0f2cbd84843079641f004ac4ee1fdda2d0c8e240512a9a153d8bc71fe54961a22bf1cca3d4d260a56b729528d462e2a23b17159b1ec5ac12939a39166873540a316cf860400d69c559973d6adf92b9593686d056a201d670b68dd2f88bf06cd51090dd98152c2edbd313532dd1a329816700c6dbf80c5ac83d5ad6bb071dafa076d149450cf1d5aa8fb7c00c9aac2ce9285b408d4c310c575bd1af5d703fd90c38efb01dc0b23556d80e7451a3bae61f80d2e0d9e02f8288d41f1e423ac334f94b14808712bc9775688e2c116aca0ed03b25bcab9962eb53748704a267705448e97a5e033ac03bf99eab2fb478cbf3953b83bd1a904e29c8ac678e48678ef3a9498431bdb10e1f12eae6597064328b806cb810b9da2b6f0fb501c746662a17cca124fe3aa128ad3c54283657e12cd97913356371eeb6f62d06222cd799e9007af515fa1426d0a4e5d098818f72cee67807b8590b03414596486b62f0e813aff6472713ff40bbba09592c14b3aaa3b318c4a574d2d66e6ea89f45ccf72821fb48d62e7f7b36ee01709cca2a6573f2aaac51b64c8eb05fd19407ab8291da0c818ed03910b6a6b14573ba2eb1a6ad8caf39d755eba83b86750444d601726696203ed296c9889b85a0169e11c709cbb43ef908c432ddfa3f6e46486b0bb40661a9a580ab0729e12d1f25da1b0caf3d8e3a44f64020100f880d42eafcea2373227031c9d641c603a829ed888e129796bc941f49dde0b277af034256a4ae8b75b0db2b7b3ae17baae7849a97babddacdcd42a8bcc44d8450b56a61aabc36c25330877edeed50862822a2612b51ec60ffc59385b445e41485eb94561da240e17451646842dc0fd66418044457020aaef79b3830b024e9000000403004dc113a138a0e74ebffd6bc6d0d635afb29c944b2058bdd69839b529229c9946423d65adb0fe132e8f1c14120be20650a0d09630968e82b5c08d55cb122747b30c8a98e974a6fcdd38363cafd53373f7879405b889d15bbefe5c203779ee18448b1a5b3ec0ebfdd6b7dcfec90fa8d8a15428d29bd0eeb71b1a5543aa43c66ad938710e71c34ddc24609b1fe91c3d24899f9d76412ba3a901a672c2ae467c3c7d7b03171584a770f2b55b6eb7482c35968b1a341b9f2d2e01b96a3dc3ba9e7745af56a37285bd33fb657e6ba570d3396946814a52a536dc0949b1a75ef1c56ce86653572b48d7e770d7c16d5a777eed5a986652d9bdda2d49e6608a5613934e7efb931d1b0e8cb5d9d63b723e9383da87186453d9551eb66c473ec4827306658f8d1da746eebac2f7e8d322cab0f9fbe47ef6b15b9061996545c88e993ba4cfe5b630c8bd255fe33c987a82186458f2db496a31dbc438d302c6669dcf0603a3fd40043136a7ce1d1309a29a4697ca851c6928cfe32c6746a9e43390be250c30b8b7a2e55f6e4aed18565a58596bf2b7b73e5ff420d2ee0efa6993f6929b6dcc231970b1dd36f8eadc850430b4b3efa9d579dfbb8f2b3b0e0518d98b495b94e9cb0b0203db56cce605e614968ad336ffa06b2d7861a56580c7dd51bdf72ff0f86800c2f41a54286ebe0aab0983b691d671f4a77da4572989c882803410d2a9c3a7feaa4baa4903aa3c61416833ad5bc3257b8de5e0a4b765ac74c33f990a5282c7834312ae3f648296c282c8b9a9aabfd893ff909cb2132dfbcb5c7bd0f3b6159ae7ca51aff73143a366141cfc749152f363f7c4c582ef718741edd6a6b3465d458c2a246d90c1b6a44c7f595b0bc5f32c724dba5fa744958d4236da4eed82361d1feddec53d6232cab2b1fa97bc3aaf8d10b358cc0c7f7cc4a73bb8ab07c267db4cc5a4be96d180c3588b024f53d468d5ad487f63586b01c346c9459e7664e5adb8b8577b1af52c4e3c4028517cbffae7c65688d0c945d2ca9ee59171a6552e2272323b00245170bc25c9aeccf4ec9c5b28e7135cf496a219f856172822f5c60822fd608c8302a507041b9c569756ee867a720219d4e4e921a08580003fe00c5160baa67ce4b0adf0ea5d341d261ec448c148c8c00042c80c17ec9182787eba0a4846424a44d0ca5160b3b9a4ce61addec3a89168b5126ed29c3b305ca2cf8fb8e55a6e9ebe33328b258f8d0bc6dfdd93d35dbf631404e44944e81128b6575e631be9609160b3e225cae6ba5de337e85a7a561b5d4c246aa72ab4071c5822725f47a3aefd379d38a45f969f3f12b67c572abbc399d3a484d79af62e9e464e77654ed2eb62a9635ae062995c7766ba954e041ebeea0ad35a362e13c867c8a05bdeb1d94cccde82732c5e2caffa866357fae0d4bb12cd7c4e69d17bae7437e4202033f211943640ca490a2130d31e21ac5e29edfbe12d3e0424b51fc99e3a84c19328e0c86627973c856952906c5a269b9521b374a31aafec4a2e8b6f27df73db1d89ba6a7fef553ffeec49fc4f776de0a97e1c482aafadb93f1be2d529b38e6245de3c6144d2c6c54eeaed1df0eac11a041c9c472e92c5a96d06dd513138be79aa47eef8f7289c5df3ecd9a7a737910299658cc2af7654a36944a2cc628b36b0ef6e90285124bb719fac467cc0994492ca72aad9aa4501914492c8d4cae7416a9bbfcd367099448986fd34cbc94d54d958102094dc48a976bb9b8cee72e99b534b4920f0c94472c2a35a556ae26ad3ecc3bf00fb4c3e0288e30711d69644703288d580085112021600065112016a0284247f7000194448c8851024246c902490005112613a01c4247f700021443b83f08062885f01c2ae1a010c2500641f2232239722430041108f707213901a1000203943f8088ece88004287ef07e00258d0850fa604286eb6002143e98b8c804286824650f5f50f460004a1ef0d000ca1d1a0401143b60805287a5d06189809cb8c90228738000450e5f50ce781212930850e26062e2391e4081c301286f70030228669c9090948094e8d00142004a1b2440618306286b488a1a9492060b50d070e22620674800c50c263828655800850c5f50c6d0008a184c4a48c20006905492767ca18c1313921c205e20c37530014a174c5c8c0850b89000ca16424c520805285aa800250b1e142c98b8088903285720438158a10a3bd0b1a860a2630a24cf008a144c4e467c0c8fc20d0a147c3d80f28412920771c205284db000850918a02c41021425988040809204131312112880828412270111d9d18112d74109490c26403902c8f230c2482eb0413102032845a0008508e984448c1d8098388032840878f48217e7b10b1093e53e623c7481018f5ce42021d961010f5c909c80dce2644484e40b0f5b8088ece880490e12121550c0a316b4309180c72c1ae0210b100778c4c284011eb03849200ef07845013c5c81008f5618c083152524600cc0631520c64315cb1d5343dfe7f0e0e0918ac5bed172daf9c5841a474ac450c650b11845b68ee146a6a62274f038c562d4bf4146cda5a5e8ec27878687291655a478c7a0f588949b1d1e3c4ab15cabe5aebb6969ba39216ac7e2e0418a258f9e42a4d45788da8d62594b5ebb8751148b49e9cbd5b2a1c5ec3b01f13144bcbd046f0f1ea15810f120ffca9390ed6f88da18256ee225e7f4e0010a5c4b25c48a88978e96810acef0f8c4a2d459eee7c374ceda095123c3750042860239360236c9414272e289451f93314f3261dc08d8a3130bbad5b97c73195e7504c6171df0931eb4ef6801279655f367f14a379b497f130b42aa2f59dddae9745813cb1fc7374815dd61555aa9f408199958fe125fdb3168ad6e5f9858903229d7afb42bcd7e2fb1a073d492aefad3aefe2cb16022a48d761beff41a5489457bf7b469644c8fefbb48890bf0c483124b62dd5dbcedbc2e11aa54c4f098c4a296b94cd88c6eed273d24b124e77f7eb25e9158fe0f1962dc53463771881a0988a9c00312e7da87cebf3a63950dc2c9e3110b26325c8cd049aaf24dfb0e93119114783842a1ed2965eed188c52cf6d3addfdfc7522dc48311a8d016f79dcfccd922963d44a5ce1f8568d520452c784799e38cd031967c6de09188c5f8d7dcecc9673d3b83884535faa9fe52cb95a37588e5b04abecc99494a97331a62698328ed3919c4b4109b438147219683da9c2a7f556b7851889a2f92911c81072116ddd67eb470319ef33388e5516d2f4b95f8ec670b62395db307b52152b5ae43d44a48407c4424c788088ac023100b2bbde6957a1d1078006259bdccac84badcc7fcfd61518529b52f513d755a2669f158e0e1872511f2a3ce49b6678c7a1a4b67c27343c8f8221901e1818f987335f0e8c3b2cacbd0509a4dcad587e8919c8c8c800f8b9adb41e5edbafe2c1a4b7e5a27e337aae8b4f7b0a026db5ad9790b3173181e7a580eae19540b95598924073a81471e9684767c6162b6353c2ca7bdced42cf48c99eb22252eb8c3620cb3994ba5dc24e6da61c14fd807f1994ed9beeab0243a6b96316628d5f209512329f1304a48fe8e1d2f0f3ad859e21e42f6e83de6b0682b45c44611b7488e16dcc0430eeb9cc1d32a2d0bcca51030520818954a0ae992339685ac4e62b39aeadc3a0e4bf2748e71a48cabef2e1c163bec45876ffcbfd61b16a37e5659efa7838dd00d0b4a34b8abe88666d0f1306331cfebaa54af946ecf7e9f34cf8665a9d4c768c814a3aa352ce9cafdefa7530d8b33fa76757f958605d53a0a9d95a96858ae1f2593d4ac3774bc64042bd5616163ce317fbb448705a56772d2f3c5ca20cf61c97f4bdc672c8765d1f3a6a5aa68cc73cf58929dc55377d01b35db382ce77cab6fd3e7dcef70585ce91be7afea372c07d114dd32e81db5a91b16f3262177440999b1a8d7db3478cca362a2362ce77cd78fbafdce4ac906949251e162dd5cc3b2f99dbe86cf623a4d352ca76d9a7cd1ca64b74cc392e71961e33ad4c496685854df510793f25de6203cc3824e2f3db99ee76f0ccdb0184ff8aafc5e86c5183ecaf978425f4c64585a35dd779a4f7467670c8bc2c65c36e6d4259b2386e54cca6398e77cda4e178645f52bed5b4b03c3a2fc66f99e8d3fd7fac2d2d878d4a8b1adff2c6349f87f8e1716644729a534d30d3ad785c55af1526cc68565d9fe22dcb5566c8cd9c2221f940c8ff578ba10b54fdcd0c2d2ecc6f026b2c67cfc2c2c8b50d11a44772c2c4bdd524f6ce670e19e1b575850379375424598925a41b91b5ba63171556149c930f5fc391590b25d4e463144eddc98c262cc9c75b35d3e5a4a0a4bae76cd73c6515892f951cf9eb891c984c2a294adffa58bfd8445b9b2f3ae163b61b9d5e618fb94dd8405f157aaaff54c5890aaa307392bd37eb784e5f2921f52f8c6e62c2961416aceedb4e9242c4a994dbd2b352361e1b5787c2d457b848591222a526a35f779232cdf7fe9bdca6c95594558f4770d426925df2042de18c2d2ea98eb8c399f310bf56259aad4e1995bc48b25b9ab1f3ee793de6cee62b174783d3525ab2f93ba403672b1fb9968191bb858d02e3dfe2b52e97be12d96e547f5ca573487a68e2d96d6e7ef537f7478792d966e5c75545be8cca7a3c5498c5c914f6f16cba6c146d9c8cf492193c5b268d92337d7b158dc1884eab6ff285a6360b134be2ed5cddf659d79051baf58f254797db9efa835bb6269d3ec93f8b842d5ccad58d2d16395972c59b1a85ed7d73e899c2d7115cb236e9478ead09c42aa584ccdb19a29bfe1bfab828d542c4b75d9cf7e22b3473d2a16e7f3a5ccb2fd2916342a19b330295fdcc84db15c6283a7be46f5af5aa558d02c5bbbdcb348b1d8fd594f7acea13c68148bab2ae5d73c8b8bb345b12834992c2f29527fd7a158d2e1213e8ca8fa1d25502c8b312d5d6d63d6cc499f58d629b37a9d844ca72d7b62b1f7ee6f64bd9d58cce07a35e6ce1eaf2927bc112177576ad12616e35fd8aa5f914153a989655552ec63b7ccc4a28c5184cdfa4719724c2cdc6dd8db32e12516f5857a25756e8965a156f36caa13fbf5556239a9326db51af665a6c49278d7701d636c7ddbd524562f89a5571999b735c876a9482c79aad04fa31a1b905852b285a657efc1f4880a361eb1b052b59d54cfe1f5ef8845d57bf9595448b16a6fc4b2fd266dfa35eb55b6336239ea38f11dd4a989cf5ac4a25ea97136c9dfaca35a118bdd3aa896d1526a6554229646fa66e8987494d0132216bfd4e98dab1d1995f8100b22f4b675ca8eefb01a6241cd49b9adfc2cc4c28d4e1ab38c1a3dcf24c4d2c9e631cd3307b1589b3d8970293c8596201694b634f128b5b4954f209675fabbce42ed68900f20165ea889aa51dd1f16c5890f7f4fd95225f3c372bbcc21737895572d31d84863e13bdc98fe9c4a48a575cab0d187a5d752f66ca37d8a68f161392b7f99f9f3c7cbd04263e945fc7cf4477bf1ea3d2c98ee3fe96159f4a84ee3329caacf7958d42e37e656fe3ae38bf1b028bbf4e6e849e70a11df61c165947df525a51ce5da61e13c7f382fb90e0bf27b546d72312da47458ce41d88cc83f0d4a47e7b0b8a25bb96c9994c3a2962fee42da78c672c6b8ee91651c1674d59eff69070e4ba654c78f15f1e7b1f3866571a5f59d6b372caf89ab56f17d613a339694506b529eecdab0f84a568edd8a0d8bf24eed46cf8e79a1352c680e32e79152679b8d392fd850c3b2ac2e951e3ad4adced3b0ac19cdc3c6a6d1b05c9fc4ea6e76fb919f61596f4ed50c7e4e5126d38acab074da651a75c369a9291996b4cbec943a9f4ffc312c7cd2a3afe7a5b6af13c3a212790f11711816bb5ec7fd7ca746330bc18ea4e3d800c3f2ea10b5db246e9ef52036be90dc907a36aadf46199dd8a8e76d7841dd6442fcf636baa0ee57bf5d62be3d179226b5e4897fcb7d0ba855aedfb3f8c9ed5a6055730bb13a94e9cab3801426f5a8cf959f45c7c2b56df73aa8fd8c1abf02d24383f09715d2233c06a9eca3f0d0aa82e2a3a50e6ad4e6bb450594f4a8f1ebb631053ebecefacc599d576d430ae81633a121a554b58d28f87b52e77ad26ae2d436a080cc50abe263ee9872db7882f9ab56683dd3b86d38e198c9e7836da30947a944767c950d26607622fe4cc364b9cac612983b6d6eea9d74922a1b4a40b950e652e3bb8eb2910473bf5ebdeb373d12589d9abd648cff4a368eb0d633de3aefb4b4920d23a45fb629b5c946ef64a30889694c77a564e664830879bed332b99619251b4350a6997c1592418d5e2cffcc749978b169c6967917ccedcb9127d6c51b3d65bc0619d64e9c8bc520dcedcb44d7cec4b848d7995422d576e65b28f3576bfbf511b32d1cf9e59dd59fcf79b816aba668b19e1021329ec53d1ad46a54d124a69545b6ae6a956797e67663d1769792cd1e5c5860f23bd74ea4d4f615794b5925834eadf44b5d814969a75aad503cb656aeb2029d43e6e0d155986bdfc4db7f366a54154b999ae43e77fc512adaefff9c42c5ae6d32a6721d4f4fe81496d0d53e727b9490297ef7cea6a22e56540a6c45d36f94f67a2622c53ac56c8468148f0e7dcff4e8df314814cb69dd9f3d43918ad776ad0445e7623c47af6fcfca4f98bd25ff7a4b2b79e2592972b59d5869f1dab44c2db59c607307ed3781bdd2f69c4a47a89a386bd4993ebdcb536642fd93de494ca4bd956b272f91561ecdd388ce6b598251a7e4fa6f901b2bc1d767084f6275be48896eb6b3d098845aadc54920545dddc81d25e50825c106a539debbcc23451809640ce2e137062124d20e3e22af7f93318e660f1d716af5e49db4ff850c3642113e5f9f52bf9e11cbc92c4ac9cf221ad5abc5bf9031f5a38854acbbeacda6f3930865d49d6aa65f7d10818c32d7aeaff2d2f5398471339e67dd6fdcf918424f2f5b9f8e6ef9140293bb2b3cfa2bed21c45dab543e3b085f9482f8748ed184987c3210af3ae92a33fd3e8078b52e953a4aa5fe0332e6186ebde387858cf293b7278dd755d3c9d65f1f5ebdae378e52a33a3e18dffbe2f76eaade0be7fe5a45acb034ae596b5b7b296adc10b5101391119147952aec66b38f888154d840650a4bfa328ed051a7f711ad121d23f09374d2820ff0c941450a4b3aba52b7f94c48a5f310b5304644165e0c2a51e8f47abcc7d29e8f908018c341050a0bda5ec5e46b5933ae4514cc00e40495272c4a993dba73f4ac376322aa240528a8386149849259080dcd248c9403046a95262cfeac943ab4672b4c58ce4f32f76e6a094bc246cb8de96eda8eea2961f13d4be71cf4535479884a1296366ba1d48d677550418231b49a32d972d7f3ca11167d459367bdda9500c08c8a119635bb3348b133f54e99a25284c5515a5eacf68b37d7486070921315222cdd06e9717e64655f3f21f9020c93040646a2328465b5c97fb3bd3811387ab160b2a9e974f35d88122f965b364734d4b3ee8c1d1a3876b12c557c43f55d8bd69ee962e1b3d2fc26c9422de0c8c5a29879bd95ffeefcc0c0818be52c5647917d4a2979ae3370dc62f965d4bda199e55ccbcc10386cb16032db7ba814d92070d462c9d5bfd679754637132d16654cbdaec1fc592c86f9b77d5fa542e090c5a27ed1169d11a95aab58d87a8550254315040e582cdfa6d766eaa4529e5baf580c5ac824f3febf07872b167448b91a334fcf8f8c1e70b462516c781242a47cb3dd73e060c582d0b7a77984de3856b12cdf94f216be87a82d1165051caa58929f52691495f9422662f841028e542cbbd66e5228b5f2633b26397224351ca8e8c4268f9dd73280c0718a05f1fa4584ab70d3c0618a45d3d09b5fd3e90f384ab1e0fbf2427495db7f1629165bc7161dc7e3b9dda358d2f9f36c98c8d58d42512c6f8f29b3515ee208c56290b929646d6952ba43071ca058d45a74355ca38e1eb322383eb19cb5903552e4bf9a50c2010e4f2ce61cfdfb64aa573a27629030006681a3130a377db244ed7fef216726c94d10802ae0e0c492c7ecfe39ebb5dda0b423f1a0052329303921c961d2071c9b30c4e8f0df7a3e07e1d0c4b2767c66cdea361131c1f293129216c0c04d5e100a1c9958d4ebd143c657dbfd6362c977f4abccf82596a46670b7b3d371eab7c46267b17a2f34e9f8b2afc49288d5696bd3945852ca5b9d943a0a35d3249684ac2aa99975492c7cce1c84894fd57af5482c075dde2ba40e89a5fdbc42cb741ef4fa8f58dc1c7a5c26f9ce7977c4927cd728911e945abd11cba3ba5b76aa75de1c462c87972b3ae86f2d6261e557e77394a2b45b8a5878f9efb1354bc4b276add37796fd16229663f49ce1daf54136eb100b9f617c37b46bec8658d2b2155aeb30f3791562519e3675ee72b327c472d87b104b624a8fec24d582581e7de51de3dc8158761dd39588aa1c196e402cfdec2b31a9e24168fb0f8b1f5f738f6cca89dc0f0b6ebbd2339a7ccaabd258963afa95f0f0adb9a3fab024aaa943093179ea293e2c671d45aa8e8ba9cf2934963daf6cdd13f67244690fcb67eef9eb7e546928e961497dfad04974290f0b9b3eb63d5cc68d1b0fcb7147e4bd5a11f2d3775850a27490b2d3a46c6b8725378fb3bf2ad761618512194cfd74101aa6c372879a74d5f91c963c73a9f2fd76cf69392c2bdb588fcdda12eb19cb39f7b87158f4ad35fd9f0387c5f4aa3dd5eb0d23ba7dc3b2e89cb31052b9701dbb614986729537d795a354331664ba132f4fcfccc8dbb0e82785764d3e1a4dcb86c5d4693b7d8e59061fd7b0a845a7d4b69fab2d83d4b0209eed438b175a0b3f0d8b6a446f88d83cdfa3614183d6462da38c9bf6332cc889d0ad51a369789961b93e47f7d3f8cc52a90c8b1fe4aff2a434bb161996a35edbbd2fdd69b563580eda2d45ff5b6c34c5b0245ec9ef20e3f5bd27c360aa1599b7490e86650fe24b4925c52f2c98cc25a73d485322c432965553738ed1e38545615268f6d37ca7b34e1716e44b73fa6ecf79a6c385459553f7f12b67cb74b6b0ac5ff7a13d74b4b078326e8751f17d9f3c595856aa53ba4bfdb3993b585838e1aa546aacc77e5d6161f756c60c4269d5692b2c468f5ab86f69162bbd2a2c6f92f54f193c2a2cc8f4f1cc3c0acdd2b9292c6fe6be73f728bf3d278585930dda6bfa393e775158fa72b515e751e77f0d0a4b1b4de8094b76a23179f84c1942272ca9c95435193668e7ac098b9ed5e34ecc5f5c33262cc9e0ab3bbf996e255fc2d2e63e9d3cb794b038b2348bd2de37ba4ec2827bfc7a3e95153890b0284fbf33eb15e9ab7c1c4758ce428498f2a073cc422e03871196f3634e6976d4a8e44558961dda958adda84c9b88f0998e4a4e7fba3886b0b89e839f7ecb4f22a4bd58d212a1e9320879b1e0ea95da36996fceff5d2c2a391fae1da63a2bd7c5a2be6afe7c9772b128bf4fcf888971b1a4f1c3461752ae8cbf1cb8718bc572f72c3fae3a9947648b65194c0bf5a0a57586a816cba15d464d3b272d165f6b1af711b29fe4b3588e7f3127cd34592cc8c65e75afcc4f5c8dc5d28bbf7968f46c196ec06261838c32e2426ca7e85ff1bdf4a4418bfbd2b8e18a6525c39faf886fb462516c4ca5a76589c60d562c0ad7935226a5c67594f2901391a55291c38d552c889339bed0a9bc3324891baa5810a375f5b3e956a3c72bc48d542cee76bcfa1c55e7a7f9062aac22841ba7588e61f6375b5e0c6e986241bbc810661a4bcb560ab4d2157b2d522c8cd6272f34bab8584d881a87e1c6280ea585aa075d99649411c5a21c939f93ce7b281a21a3677153be33289694dcbbaad99fd0a5749739dccc6f9e588eb6c9f6fc836978a94ee8c2c5af125296ca09379856ff49c764fa26163be9f18c0ffdf1326962f15dbb4ab4ac7b33b11cf4e8fd3da1e257c59850e6cd1eb5b96ff52db87189e5bcee325ee79551e5d8851b9658f86fcf422b15d34c5a9558b03de9515ff8c6e886851b94580cd34a0957115533fa492cab993af9e071492c475791d3d13def6b7524966368ed59723d0aed2b482cbb3c53d9cd9a3ca68f5892a97bf4fbc68e50bd1477a12a6fc4d28f875ca93f08a5cc65c4b25e0f6adffdceb50a2d623946b85415da21a33815b158dfa6494add0ebd3a8958d4707dede469b58610b1a8bd94d69e5309b5ed0eb128eeaa35b7cba462432c6b6b728defab59cb5688250fa25d550751953e21164be671b5f39bfffb0f62b95b556fd6da449afc05b1bc529ecda85e5d137e2016e468751f74a3f96f0f88e55022fd45abe60f8b1d2e73e7fd1959b91f965d6a5c9d1ab3f3eb3416633f67940e6d9de33e204ec676f161517f68d07355a3b1e426429c3617f7b0accbde5c5e3ec958d2c3a2a666981edd1d85998745f3cc7b5aec7e7dac37f0b0a0f9d183974b5933aa3ba00c51eb34e249861b7658969b4aa9529983c703660a1f9a5876599ed63b667d23f510b57dc147269685e6dc1142aadebb14134b23af2e6bb6adca65223af8120b4a6894f1bd7442d4cc124bb7516588ed8a9676b6128bba7644eb57a147dd9b7a157d5062f934a66d9dce4be97889aee0631207b38fef9c377c4862e1dcff45d4f3f7db13a286828f4838fb52481b997e40c2de19ad39a7664edbd6f0f18845d9624bafeabb5c214334f870c49252ff1dfcc478aad6ca91e3887102d488d37e67defad8397b95caca411272c60723163dfbefa4a7d36a5d0d5190119211113c632b074908867c2c62d9ee4c28cf52cd4e087780e00b30bef8c017607cc1822fc0e840892f119311123022f1a1882533f9fda5d2948d8d6b848f442cae7cfc1413739c9cb8093ac10722169472b5376f9ab79588a41d58828f432ccab46a7510ab21b3277c186249b88e4b1169f29206f1317290987809b25d197c14c2683a69cd1f56861056f18f415cc53e04b1a4748472c77d0462418af0ac653899397c0062399ec66a7b7ae5afe63f2c6db818d918c23429253f2c68ff3a4f427fb81d530e1f692c8d0e1ddac2471f1656c650135acd1f7c58f4f155aeb32eddb1433496b7b4fedc31be87e54ce23c7f5e5beb18e50f3d2cae12b3ad1ba23c2c2861badb3e62333ef0b02cf47ceb12cf5a7ff90ecb9f7594fff6fffbd941367cd861c9c46df6f8eab3868f3a2cbcf86d9942dc745872692a7d63681de47fe6b0a84b7eac0b99fa71c5238765a1c30b257386868f3316c7577636ddc96ffec6ce1857868f382c072d649494d1e4634be91b3ee0e0848f372cdc8697b1856e173d1a73c3871b8eaae6b3d01f3536e84e091f66a8a38d166a856df860c382ff8e5025ebbdea7d5dc37289cda46c83f4c48464c7f9c2871a10a1ddcb354b6aee94abd95b4f20242bedd2b098fd56775c11aac73b7193fdc205213041a5e23954d24193e4a854ecc8e8632609002c7ca061398a6bbe7fd06e7b2a2b7c9c6139ebac2da4c7baa82ce1e1c30c0b7a3ee61039b54acfc8d4e1a30c47d3b0ca74c98f053944d2897fe0f488ff93681b3ec8b0381f744c2f4ff7a9cc43d448d418963fc950b29bd5d74ba346c4002123470e31fe0c81f12186a5d928d388d19885765988da93808498a4100d31492240fd08c3e2ea0c3b36267472b352393331605892339f39e835b5424f888f2f2c76d2a472c4a7d04198ca583e7de25a948aca3b71203ebcb0ece79e73e76338798e1d3a444cd6da0889887fc090e0a30b4ba2a5448bf2fe8d9dffe0c2a2d031acd8208341a552a91c1f3eb6b098dc5c8b4e9b51eeaa3df0357296870f2d2cc75742a9101b2d7c646139c4beebbc146261c1b44bb59e496a7a5e5de1e30a8b9b3156bce85caa648eadb0b8ab9db5ccdefeb825fee0a30a0b2e4dafcfc7cf69db52615177de13b259ccf6f53185a5cd3257d5b6e9d6f092c2b2b9cca6af57a3b0f41fe6d46a9457914f0ea544464078091f50584e0f9ff3a77cfd9cc2272cafd2a36f3534c287139674bcb95aa9e487105e139636857de7685f896091806178081f4c58dc5fad94b9ca3dade7f4c1c7129693b60c1b54aeaf122e252cef8a67d71db526f9c2242c2bcfe257aad37862644e3e90b0a4c2476d7ff6d71ba5c8f838c2825019a412f2314bb7ad17090ab817c988b10c7c1861f13e6b6dd36fae9104b223790808c909c888482a5977648c88b80059fb18648c88c0e0a308caf9f5a8a46c7d1001b95a09a5856854f6c710966e654c26b6a75e2c79f430de5b9ba4ea94170b72de4e8aea9f4eeaacec6251cbbd50aadea5fa5245170b9fe7f573dcdc142ab95892a9c4e5afbb70a1899c955b2c899bdfd6b5e2a185d21678aa6ab134af45dbd889482ab438ba6eccac59e752ee2c16b3d659d6b3c918b44b7764b138f7aa5a06cd7aea39958a490e9113312a1593582ce9dcabf52dc327a947c42839516298e87de1821000a1028b4446ec738b50e12b166f3db8d6e9f73679cc0315572c26593ff93ab8cedd772b965fe85937ad74d6b944235e82445061c59256d7a74bf583379276982c95559cca764515a9ce53d999224367a982542c8d9fcec2555f1554284c76f48b27792be581131d20a8544e747ca5e2033278700a532c7cc8951d57772916cdb50cca7b5f522c9df620b552214f766995512c892adbfcea1213512cc7944a56aa9dd41a63638894542a958a97602816f508d5cfaba44cea192896f755bbb47c68b15f50f904ee4a2ae9a99e328d3b481a64472ae1015796d7a537a8b75aad4ea8d5fa6d162750d723baf4ba7e6d6fc2acbf9bb3983471c978a95b97097ea3dc6fb7dfec24c5c47228adb9de73d6bfcfeec44d2a9758ecfc9fb4dd9a33a85862715506f57dc24a25ce20f5aa0ea3331b72327228615c0d0d5f7529522095491c859077b25396d09994909ca42552420282e520257e322206091839d218243a9c0523290059ae0216200198519104a6a3dd9b6965b6e0c44bda5b902595485845061548541eb12076f53e54cd15475ca5110bb231aa18b19c93e8699e36b9b2fd4520e5eaeaa73a15b1a855e368d72dc3c6f789584cbaff9da5d2c2468c88454de56a429d6cfd981f6259b4e5b90af34f1f2e432cc9a0bc566caca6868558eed0273c67e638f99a100bab32d64e467a4a310d6239af906ea773add2dd0a62319f877acf9fd25a066249b3c3b9a9badab451402c8ad24a53bc67a9abffc3e28b090d5267d4b96d3f2ceacef851eded06adc934d05175c33e2c9ecb86152a4be9d81f3e2c66d8911e4d7d3c713e1acb3a75698d5aaa1d57d31e16f3bbd44aca9642af14aae861599d26d9da648e9deedc9345250fcbb96eefe3438e4e6baae0c4c32829f113121858eea082870579bb1f5f8e6a08a9bdc36230adcff47c6aa7552d8c920e94e00b1590e125304922b83303c39478282a76586ea53a675aa63051a9c3929817520a7da7a46b7a95a8d061398617f3b01e326979e2392ca853226dd5dcf4cf958ab98a1c96b5f43525df837257cd0824513963c9bdc56ed6b6c761396ed8ffc81d2df7920739f13014e160952054deb0e0996327b454aeabc88e045242f220062b6e585e6df31ce5cb216a662c6c960bd9f9f17755dab024a3d7a5cea86da8b061517a996b13196fbdd5417b48af614927fd1d3b99aba841cfd2a274d430f60903ed58a49206cd4bbcb4570e121a141b2fdd5b07f13923223acec087ddf73c9be114a76f67e7bd3a27675e2983592bfdd1a8e3acd0c848da61b26458beb74ae1523b6f42d4c838d9a1c3f303e74644920e92856c5019c37250f24c362bd9f2640e51033931f19394c34e0d15312c4a3152b312ea4a1816fce347d9aeef6fde3354c0b0a465cc8efc7df66cf7721d22275f580c91f161b6b4480d7688da1143a58cc5d3dfd2b455b552ae152f2cc9e07eb221328da87461314f3dcc85a51f79ad3dc7edb56ccf202a5b5852f29db974bab8e97e82a8686141ec3fc624fcb5c44b6954b2b0dc51cde9b9aa319557b0b0a073f3bb695387a88d90a0304652081829380078a1728525f99c7488038c1ca8544ec7d27938160a44c2400e2329ac550f00c31308303828240c8642b14814e6c2b2371480035d3224403c2c1a1a161a12140804045128100883450231280c008501c14038188ae6c00cc707aad9349aa9a133dbe867d144e56a4fbf0724344431704c7d8321cf164ceefaaa738ec965dddec15db4906a270d41620af697199c721c6662d5a81ed9815aa47bb90c954ab040fc0597c9cc95d0951803e1cf33c0c8fe5835032ad5ecf7067e461e2b452996506c144b74d5009a2f1f27845944e7098a86c4fdfd16ff23facb34b84b66751c27aea625f8090bcf988e75cad3b6be5870c6a3e217bc8a9b4d6d53baa1017c41b52730b7de8c80a27436ed5ccc487c1609df25d6e6ed68d5c0eb12b6cba943258fcad6632247b144e9532539bbb6541ece6fe3cdfc05f05d45539d03303ae6da29d724fbd582c9b6a6fa06d72df34ddf8df6b5798245b2e46999ebf29e5d0ca9d1a6085a01b222bcda2c58752f8c30493fec210ee08206741cbcc3738a2d9c08e9826f345ba8418e35a7290cdba24fde347744dee037b1f0dded33f86204e0c431233124e4f054d052dcf9e16872787c2894040b249061a220e954d24ad64ef5f1baf96b25720193b75cc0f754261a1f8ff75861cb6d463623003c7c66deb357a3054db891899e4d88e7bd019ed71e997d7a73d09dc418bf52464e4671ee1e90a9d9c727737ba3713d76f6179024cdcef6d4b37d8d653e2061c2d6769df5ba5271def5ffbbfa366aa89452a897677508ebea2100c54083b1b0560772f9a02d26936a8c85f144629f80db27e73729090f5baa47c100081754a1cebe9ae6906acbd42cd0bf43faf4850d06f437f14a2e5ee3344248049aa708e70dfb233224449aa54873c1f8e436627e4bdca05dea2dd43a1e5be4e51e7a2c2db6e661f04661cc62be40979539aae13733a0b10e395047850673b0f28664f24d32313a93bc4ed1e4c074d33b38ccf86d18e6d695b1f468959dff0688c4f40154ac98b3165f404a1fed0a53b5e7f8148fa57cad64385bd469da2a283a40b7067883d691ea717b2a262829073e030eea99b0bca6dd47c440738a04e6d0a3e4862a60897270c92f25dcef2b43d25a9d4f428a44520abcb9e566613fd526f414a251e1a443681932bca623c3c0781d4974fe933ed23f9fc26eb8e67a86908a1d6ff4c7800f53987fcc0a1497182c7841c4422933a538c578242b8c1412596d8451c965d8b5a825c32db860812a483cec94744e383f38d5c2c86dbcb70b751b5eec693af64a8347f8af79ff97edd886c1415ed357118ac9ef659260fdafdb7a2bbde21a203eae70fc45acf22a1393758c5608e336505ddb4c8c6d097e70cef0991d6faebf723c10eb8c803e2ae560dbdfddbdcd83dd44a8347dcb66bddf3a939f167096e690cf79f3e22e7d60efd36e9e3b134f106043aefd608eb66d0f789c74adeaf20ec2f3fe56b6e4cccd14a4cbda035b8a0e6e64c5a91ba21550bd0882d03eb0efeade226f909cf7f79f79fc9880ad0829c870a38ab6cf4dbfc639ad91b81764fe3c0b6ab8a5de84a2e70066ef857edadd6e04edf450f734ed94030dd955efb3eb3da304e2ba18faa4a650c1f7ea6651abad8937d0d8f233f10cccdb2f7eed8c64ce644aa2b8a7e6bb4250a5f14f8cdd2da94624c495cc2f190274cd73d50fb980bf481cc6548cf6547939a97e6357aab2be13db7c304977ae1e741c813498d14839041023e554d8107f81d5ce4a7e1e9ead533188ec332d0998d00740ce3d9be34939388f259c12fb471295427978111087676fea8a55b5e4f2772614824d65df1bada8d9bbd7fcfd6c959fe602c5c91bd3f09dc169030964f98a20a7e54457a3c3255afac24158263a3f69fcb18315d2f1f69c0cac43d2b6ca292bd41d687041772230441ca35332ae81338544637c2cffd9b3720ddae4de53d0cf59c77b1724064ea69dd06ffe7e3cde87c150b98108ee8384bb8b717d8640900ba5a562575d04fd1d380c7ae2a1c1e776dfe135b1dc4d4a3076c612f51c01daac2b102f296cdb5ee1c7a00264ebd24fc52193f29b8db5774a334d908676c3f5692019d122e5af600a7400322fd9c3baa09bcb234cd9093192d091686d81e917fd89419d918f2c637e2b98b342b60a330e71fe1e44cc8e517763fb9dff263cfe9e185c6999bed36e147d3e6f5ac4276b245bc7b440ce9d8eb8c5ce7ba95ed75d007e31ed1068c04bba8610650af34651c66839787dbb1f4ffe2350cfe3611c13f0a2b467fd9e402ca9d759a69063b2060cb144e0d0a38637c989b7ed57dd0b1a88458b76fc71372670150dee3295bb05d15f395c83b909f97dcda62610b7c58b6b7342d76fac729fa68ad224e6d1bdfc7d83cc0b027fe16832db4fda6570aef5ff4d508bd87fa79eb9c54165f0fc8f8f8d9f830e8d69ab2d06f7b0c688b14b80cd1ec5576aa6806e4e252ebf08f0e9d16aa79fb5b9ed36758c2658b681054f5b6042de7d4e6ccdb1884b4b9adb3bc9cde8a3d9ea41ee10f8a879015675d0f188d691bb3b6754a9882d2cbbbd56b9ea2159da174ca17a2eba4fe1cd313f9f7f052cb2835434a4c213814b13bbcc03c5edda24bcb4e9f58f053e7b95cc13870aa813f3c080b351d12ff91aef14df768419cdeccb9b96c7d823c613417c7a0c7a3fe49014aaa5cd8470c7d291db2919052193c48413027e5fad763378b74b6f34dcd8bf75278d88c03948651abda85f41d6107224a296964235572f13671205010e260c210d01b19fb444ef79dfe2e356f4848163a11543dd5e3832157660e6a07d4ba71c55ac8cfadfac704e3493101772907ce7920681f3ca048a2288b722c59cc0b319c7bc944fb7dfa4df9ac36e456d0ab48881f0fb007f5d60f7ce1a2a1a784cbf0037f8532bf469194776171cd79cb83216d68b085731198a4c94644e219485b716b2429f123e3bf54019c18bb566e7c4ef2e50e107a5571550986693b25d3856b858e7e5d8699335ea5da76819a5e9f37ec6ab2ab4fdf3a051d185513a08d3577c44818ddc1bd8663ab4bdae5379aec5183325628d9ba28348cc2b00722804fbd0106ab6bcb8cd806c1e92ab8c50ec6ff3c71a77193b6dd197631dd68147a434a8c6a5ba732cec2542d497fdc5d4c4738eccc11eab04580eb04b9afaec99848d24beec7fcde71652475f4460ee460e22a9f14440f5f00e7533441a378ece5481c51eaf94ce47b2182f55c0113f7971771aeb6125fa29ef07b1dd4f8f539fa21c3b26ede7f598818b58bdae8e05747ffa00a7616710892fc296956d575d794363f8d7f3a8b6afeb59b42b5fda9cecedb691d5441620020374c8a94d455241aa631c11c8e0b5c70a1f57ab93ce10e5183fd5c0bbaa8f8120bebcefc0ffd67945c0a39595c692da4f779aefa1cda5321a26a5769f81522d9a7cbc85086b33f8f7624eda150ab1146a588f6b9d23db053b155c95c4cf647e279cb70abcffbf39e215508e1f7b1915a4b99b569dfd125d9808a88d573bf12f153494192d859dd181ea5dcf363c837e2a680a6633771fd4ef921cd75d1e61455fae0a26d71a91510165fe549aeafebf1b86a00132882b7bda94f35229197f1c90ae974d84b7f190bd0645bb67f77f2e72756132bbd4e6806fd9d0e1cd238a80819258b9d926cbac6615579e4456a46286be9622583157fba13a8ca56d7492bd98fca7e76bd2b206ee3915587688b23a7f035d3cb520fc637eef9155751efbdba3bc7285bac509b95e21f3541219acbe9b60ca1851ffb9c868cf2fa45d8efe284939e03fbd561cd13ebea0f823592884bfaf51e90371800ca5e78cddd78f35cc5b7a43de716d5a79d78a375c81394e49a473d1af62c463b51819252477edfe34b0c515b606bd859f81e8c7a6e7587645ea5ddfcef4f9ac16a42634725000033db2725fb9b90c63f0b3ffd548ff81b800601e75caad0dc76c623a5177012c058a2c8f88fb28c3ed97e28a6aa21f514b20bf28f2c1b41de43560a2dffbc8c474eb3b0ce04aa7c9c34c74c3c5433a7f9aad5c9a044d3bfb915865ac7f4d9119499c856263b09eb864ff6127cb78f68ac5d1b0b54e2bb4ed093ce500b2eca8aadee2a217ebe77091529319c74f3c58eb24ed09a78e5bf50b246795c72859a848ac4f982c5522c649807ce61c0a8f6e50225be6dee097c90d48e261b89874d3cb53ef812fef46e9162ccc877ea437f5a552ffc9f1c182ac78314d245ea82faa07ac116a902061b818083743803a397b9f174e03393cebeb2f642539100ebd1959ebfd27d4f2cf3398dfd598f176cda63109584d26058a82bedcc08081871f92231da0805ac608b47f9d6f2c7c7365d596a105ed6ae1c2a7891574e31b1f5667a8ac437e356d549019d33c4e555b59d732e184f41b24b870323d9418ad1780ae299b38d0e44d202da08e308bdb8fe27e50ef5e3e39a9ba7cad805af040b1db14d32ccb5507f52f15b1b06b780fd925eea80ca15a8c547ca8731218b2f0315470c4d37cd93f54cef70470b3f05978227c7d2dff34ff5b016673d264e701cfbf35eabca11b77700f53038a66939097be84f781d4507b65819abdab00b3444086940800ea1104f66bb3fbac966ec39d732703bfd14c3b8fa852fe2481e48ade0c9a282bf5451a0a32823c707308d1bec89ee46506e99e1b6079ae05cdf1c10a0334e8c3fbb4254b653103d6dadbee50f20c7310001769403d7ae2c938584b503480093e198804427cf6afe7106a55659e90c4a5814c3073eb065c4feee42ea05a590b45aa75437986950279b348b536430d80948a2d3c2b2cc6eec0afc8adfb2191721a9cd7844f615b2a981f3e977cbbcb133c686aae59668a181239581c5b1286bd5730e085751168526f2fa64b633514ed3c8a622ee59b1113caf5cd99128aae0e3c9f43c9118f0522b61322fdcede5cbe78e8b83a9435e985382f71f0afa74872f84ee7d9571dc5790c48cdfe82129a073511b8ea0dc5d225d4e096669ef79d25d039ee8b893a67c62ed7c5fc65f2993c2faf1b5955d487d144bd1f2b67b07761b2c77e9f19eaad2aa7467363d5393627caa39ec9794f400c5da904f4e070fa6c09e1865785235a731e13301f3f4b0a8da121ed155518ae8f67b4c0101e58bdaa106acc04e9b25f903813710039b13b6a0205fc9ecf593ede62c2d207636843541a0e5f53f91e9c2b8f8f86a9cab4481f7ba233df4ad87b2e0657e628712467d4474102658bba142b9423d49d5dd82f1b7ce48e964fe65d83af5d9d11b84fc22cd675c831e22b9aa913f0e32369233ac3ac262a728603dc31619e1145f09067848c94460d8b93facaa83cb87788761344732fb3110898afd8a7084cca43bdf8dd79590c6ba4d25e5b45cbe36a6ed6e12f67951e74418ee25e5b5610589cd1ecf9cc8966a7834295127737f080edfd758c9f9e2ea71ef4c2c717dabe3b7702d303385ac35c1fc5b27a32f99d1bdf70d380e83cc3dc296b67675a951fb329db4d46aa0529c2d69edb3b46177adcb0a64b5499d23f8faec9fb2cc0cd56536e47bd0848e7512ba772aaf3cac1458801b7e4aae7ae03c97a11fd8f9ec06282b4f58b2ba0615dc3884bcc6970c4259b35f15047486437acdac4d1a62ca5e3bf6b7600d6ed687ba201b7968e0d259190ef3578b628c0716a6058365a4b1acf01a02207b3292ad564132613141c463756fa1b62fe121dde6c588619b3e465ad2b12ddf38e49fde0ec5ec2d87bde995b146de8d2c1bbbd9443370142dbf5a8d76eaf627bddb5f71c590315e5d12df7765f4352155e6c87370b58595d7ffad5536f45e03a1c95f4a69dc874cdd75b9712a89745d7bdcbf0b4a309a39b5057fb5d17bcceeaead06da44b5a7787ae6dbbcb376603bf9eecbedb3b8a5e6bee3d8f0898ae93eb36fadd6c09e0c37b782fe45ecbf3d6d73b7953900de2156ab7021476e9973dde9c77d578fd7f57e7de44bddcf3dedd9585d74cbf7a7addeb3534afe75f897aade355bf5b8726264b37b9f73c4579cad2ab6b5776972f67e4fd9bee47dd49ba56cdee6b2951af0eaf1b88aeee5d0bf4fae32dbfdd5e4aefd2a2c9746575cdd3f5a2ebdababd446af2d31a4bc5526f08bc9674ddedfa8378cfaff097d6ad578f7aeb071ca67177cc09518be729754b4de6e8a7f3d7846898f828b9d7816f988a039436401b479c4c8fccd3f711d2636565187da09c63811fa1919c9430562409845b0b2973be2b7c4bf74b0a586a135c85e26883cbbe81d8fcb6795a124639f2357b9bd2b1c371646dfbef85c63381abc2326f74f341116af32ae114b14455bc14ae207cc473d84e8e651f1867095e6dc1b857f29c307f036da6437bd88862379b91075fa22c1f5c3758c2d0ffb81f3242c16c4705c801ef6b0c4bd4f5173b4e89cc1e8dc08359f4a9f024baba552311474d70c7fc13ba4518fd1973542e960f7b3466b1a91db484ded8f2b8d803e97d7f1b2fb2b37da349b89580ed0e62275d647f2a3e86303749adc97eae9dc896968c068c1a6e24366271311e08325614f63dc35bcf621fc0f888b4692d0dcb3b33fbd5133dde30314868e1450bf80657924aca18d9680e85cfab0d9e3ac1fd07c4902c7773bc6a1b276aa21c1379922c60fdfedd37ac4a447564f7a070185d0941ffcf5487d90b82b4d03fcdaf3f324ddcc92e7c1dde23f44ddc0fb4506cc603836e98582d8028b41c870960f0e4f20167a752089c392e1bea1a59c8ba02e5600c899d230b36386bb0c3814d276c982006686707c3f89897c32a08cf0dce35d03570e1c054045d063e6d68bdf4e41434e60fafd7108a60e0c520d600153b1863d5fe18fac1c009fb26b844d8f4b99b18b4c2fe03d937d808958a17fd6006dee819881d18c0840d75087d37e44460d11a04990849bee470275f42a557f71636d55437d3c4149f3fec5a1841c358948399ca558ae566c01f8331462de4bc6e84cd06cb0ffc21841971a1097e19b023836508ff74090e03ff068e1a4c8ece8191a6192431f069a0ddc05a03b962b0cf618759ff27f043a060f0c4c0ae1dcca8526d017e07f597b0212aa16cedb0df1081566654ac0a13226c22a7bea5387f737f690c0e80a812a397392af0458e844f2d0a6371c90c5660fec1a6b0260f436006e5118bcf2728103680c8175cb036d8900908639b0818a6bd97d1d8da7cb04b71841ec30793d70bf0d1e311eac7634a568267c28ccd3d401a32817f133630b08f44c760b0b9bc8c026b0661d3005449fb6099d513ea8e26bc4438e8061b67ceafdb05840dbd10178a3a5816787e5a6f0f5a4e70a4099b925236fc27e8073534b32310c07e3d89b59ac81b8634853b5a75025eb9cef1c1f2a5801bea21833c06461df8c49fc7e6af2dab2976536b39b0a3592e5e8aa62d753b6a6d0f42d0390935c41a9c769001c18d8319275458ee6806243fd8c018fc184b1036be1e6f3030bd110cd51bef5ccb02b76da038c9bc55ea05901cf0234186aa518e9ae44e3e80f0008078856000a400d017c082fd37f9271240514016c038007b015401ea0280962e710bf706d82fa0a59ae1d3001f403301b4f8daef420b0b48f5000612cb0c597880706204e9aa2150658071039819482a59016808d903ec173499008684acfc48e57d6104dd4f1d632bd2bf208278f230eda184475e0f768f333c743d7cd7c7928c74e61878b0b18f494158e931ad8f3441743d2cb1c7d2076c0523f008dfc70932974753acc080868c93d12c136ea77049618c293c02cae38bddaf943d503ca6184da185c28915e0e02f63ce9c0b85167fa410a1e7f49d79ab107577115673a6108903b90c18f822a8544f778350ccbc2268e076fb2bb9104517225b0e75c6d88aa0677ce001b98b1e2d44d45a52e82a070390c34443f4f470cd75441e51cd0468c3cdfffd3adc3019883b3af82b605e02ac087f12c68900ad465a52572e018200238d48fb86225ad63575231d5c8e24041d738241b8f8aaeeb6599f0739bfddf8786f9ce4df1152e182bf1944d1de15ee8243b9e959337a331481492d2878d11deae5cc3950af55029bda3ab0d896425e2d11ceb7dba839b5531af7de7e73b7512e716d86f9d9826edb9de11687a438c8b025d62f9a3448c9c064cd472cca6c96f50b3ddf8ef3f199fef6cbd00c7965e6a064193f730e9860f0998d26da72f990c09c2acb603a90fe9efb2d9f579d8b25b0446720b69062a2e8e1b83785aaaa8f392c75468fcb12ddbc63d01378bae1e27deaa75bcd7feb8362222d7e7abb70772c0a4466e19ef9c617cd7b4da7073d5acad06fb73d976a3bed7ef10f8a063ca9094a332be7f3fd6c126a2b07d3a2254cf63e2a3f7d9aa9c80e849b026a153ab4bc3cd1eecaa576aa473d21d55e2f4519fb4cdd165e6c3fe968d422207f312f78ba1311c5e7947c12c67bf9af4fe68431796ad330f9db04e98ddd45bf8ea160092e4012032cd6e57087a97e7751c69cec6ed6f4e78c57867578f0ad0d520ef3f25434826294a9ed5de3529b32f6aac82d4e4734afc5ce280e60b9b313c7cd02a05b42243f917655fa3f414f284500f69ff1a0c67172bbc5bc2a7499abce4a8ba8a35c39c401dc871aaddefa3e91f4ce9d6c48c292756db422160ac4f37677d64edbec4f160076815a35486e29328d5d3da8f725274f4b1ee7da1dd609f515ed7553b8c010b18e8e084af8d4f1da18c33ebfc60a96b52567679a69be767e6bbba562b1643a883465cb7b2373d4fbf4d64f3e0e5b3d1d0bc4d790f4ac76f3ba8fbeb2ab4b4d2009881ea8150d7820b95fe801f1b1f3c30333de3839d9c9ab7a5fce513e2bae1de5f3b8f6ca8a47deef6fcb524575166f30229d2796cca644aa5b80c2ceeaa59fc4adbbc1aa788d1fabd61e2e74b341a85f8e94ebde9e1a148985886b83802f170dccd8f9e9cb62966309fd83ec3fd9393d6f56eb1172237402d7f649325c2c10f7c39274072f732375f0c28c5f9e5bfb5a050a2d7459858b9698218a8fa3c24622e6c30de30bd5a48fd0555004972602882acd64bb34c42dc7649c36c48252792c790561d0c0869b464fd6504075a3e2cfd67f68f5ed8d00b86044bd3db09678bc5399b2320d24f6233e6d6e6b4aa035540433d2558b88625363b931e62ad0743251bac9416fcdb762e351259031df0af962495f09e758c7c10aa78d97aad4b35d84f6703bbf357992abd4d821a1dffb736d15f3b64aaa48a5f97330ca0a0fa8cde8273856d9f51ca115922e974c5824d1c50590d1dc7f96f40ed7a89ce169ca6f6f71a0c8c1d90321f89b0ee49dbb0d62b8103281617db49eb5f03f09f033e41ad3e0a4a8b9d38f476e754c7ca352e48ebe32117a2b9583c0fe5d073c2957490d10f4d90a8cdabeaeda052df6ba44700906d04ce3d40452089c5b0b1206e4253d862bec3e45677969d2f8158d123c2da10a8c0615e864e0aa0b9a7103f7156b5024843a5022cb20a54253491dfd4a5b5917e77bb68a3e61bd5db8b92b4adea2c71df90ef1d0c4fa02dba6e4085f528c42c29e3ae6be18f56f8e8fd67c4ccf4c88bf52b244c2fd38cda64238f90a46c390295f4a3d44c95a3afa34de03bb56b31ebb89127f3f6022c4c78b3f31745f28c0f0c8c2dec21816a399098aac4080344abe434fd03f81af2808c8d7d107560ad14ca4c2d49442740d417fad217baf24121895b452de8e44a651da482ebca7378fabd5327c5e4e1d581d81631136f94a53971504504397f93c5bd73d55899aa1182ecf976958795def414c35a0e7bbb347a0eb64bdc3a2e7235dfb3bb3752a3c029cc74b00b7ea1326dd485871d8474ba9c6f3b93af808788177a87b7ee90b0f2f4d3d6c6582ee3b17e87ebd50f0c77c6bc9c4f5b4405bf9c88039b7daf7ba23eb8489f2a85cd460a80d648f5e805124d7cf5a12cee48e61b05e5e39a49f0999c6c11c2e41829bd8e52cfc9b674b0f1f6e49add22205dc8344eca7369013fae05fcd79be980f8a9df064e35c1af6e543dea03cac9b4fa61e94dad1923617ac8acc74023fb88a9cdfd94e4595eba5886ce1c5816a77e1130fefccd9202d2132e4c1e8c0c63ccf06261a85a51304877a113464568249d0dfb2fbafd998cf19bbb33586abb4c2c40091442efdfcb9ccc7f7293bb22f26ff7b2c9aace3e4d8d347146206456509968e2f7e6233ff2280fd9e0448430d1dcd7823b88beca22716481a6d35bce93676b1efad2b7d1b4b0b0c7adb4002d0791e5990b2e1e6c1204bc844b884f00e7b5f6b345185b1b0291f8ca5aafdfb46b6981e353634ce2b6e2d9f1168d618d3a4224877abb6f810b23f90b46d2f15db2dd6dc6009e0fbc71bbc9781b45e12b29f1966caf12edccdc0929afdad82a4f68586ef144cfcaed241f0f245e21a1d4706f1a6abbd8c896e4be6176568eb5704556153323869e8a9ce7d493037e7c64a0f1dc03aed1093e1713c06e207859055be34329ec3716e1ebdcba8f086abeaf699eee3e211aae8bc647d9a99f81199341ea153423e0518b083d12abfdcf41937d4600328200fb817a51669cd0bab7f13a0b14c75d096367ed7824354b7e3374914e7fe697cd378ce1a5cfbf234765224cf7b3997947564f9ebb5d174833b147caa398ae76c3adb4573bdc2395429d229c5414bed82ea527cbc3627699fe01287146593ae2afe8f9e1848e1f73aa4bfd1a81bef15248cb2f49a48b19118581abf7bed27a0a1357d8e9f333fa731dabd696a7f3f6d352858633441d9e3edb8eca1f0d3e5eda2bc70816fe9446b6d897b9133749fd96cd633db1a7b8f9cea9e1de9e4749b0fd349be4309a4061c0fc3fee854595f0a137440be7dd972cc7ae624bf5a4e492f9aa9ad7005f2779c6691def1a32389024047ccbca3a373b0cd127b364a756c598989a1093a19380b464d9bc5b2289bc609ba93a2686cdad20f5b745e884eceb391cbe0e729e973378b79a6a52a31a5efa4141b33ab92c98b458c76e2626eb2a4ff6e143c8424755c583ade735ada17e221bb85ae4b0cff078382cb2f50587d893d028fc33127240ac94446410135f2653dab93c1e0fb38c99ace3b95a73660c0a557f3843f19a2d4c186e667b8f23c7a3710c7216074060e4faf1ad07fbfc5c8a6a3376eb630ca368271b06b834e8b2f862179c04efa3d33d34ffd481456746e24961a2b42487094ae13ad3502cf468d40326008b7986ed80186bab466bfd03351515fe816ced57561bf0c180210f2f6824c8a6e526309358aa80879021342b5e206fcc3d9ddfcc22563c8cb27e7b3bded68115aa4237e1c0067e0742f000f5e5a5e6ceda13f0c237c5b0528c61bd314429756b773237db661806bb3c36bbaef79934ced0d21326ad12f40098f70acdf0b89aa9ec102b94adb2f02645965aabec6061b9300e2b8cd9d6723850ba6203d931607d37d40c0a3365dcba83b83e97681ada81a36db3874224877eb2a87051e47825c1eff0d309f9790560d409f06d2ceca3e5b00c44d1af4becba94b74ed3a1843ab630c65c4ec9a3c1d87c06da5c78ab01a6b97ab74355fcd976acc538fa021b32c35e98257ef6c36f002741a70d3f3b58183db7f95a050bc551892481f9bc9513b4a460cbadb88dfee0c8861ccf50bcb754dd32402f0020fe4742b38ecdcfb72947a464440c1b98558da6489d1da3ae4fa01350e407430c09931db325219b64fc958616a167f022e8b447303ebbae869dc1631994b32d0e2e2c667c7ae09d805f0271a3ebd491fb3c3e543d480249287f5a7e92000aa7494f0a8b1b6fc7383635ffce90b2fec92e81dce85c9ffb6d2618f6b351ad6e1a12e960f36eb9eeb4f203434727a6e7c5202e0ac08c53122c768da174b6e247e3e1102067b53ee01daee0dc61948b47c33d06fb531dae43e16737d83f4af2a6bec717784dfbbae26f3e3c83e3aca822a2753ac6e52934cbe982d59c46c1e8cdb345ec954821d44037c8c3a9772c63f2e316c23e9e7d9418f8b1b6b624b2632106e6855b23b0c3139553b59843f35e033f9480196547ce5e3ee36d20294aab60177c8106afb304a122244407e203f22b9c4c34ae8bbaa9de0234e1d06155dd628616473cf3bb50178aebaecae68c2d65fb4a16aec40830a605b17119755c70eb778c44e0a1a7b16a96831e26514398e097f0bd5fae6d33e7cac2500d54e4df2c90b514ef75597856ba1f0eb20f83d2a4c5eb17074874e6c74069c640f8713ec18458acf56c552499685efcd6ec04edf5bcb139425df142ed3bc5e735b92760c4455155a4d62ae952a2a9113f7e4428ec61ce3cec11660004e6229c32b42b83aebcbcc55e02c49e60793bb479be3c19eb7c50fbfe7a39cf22ce9101a76461bf90d883c7533f488248bf8f2de949f8156186cdb38766d020b2a5f1f44ad78ff7f2eb774f02e78417113dcdebba466c4d93a5eeb513f35e0e0cc9cc82cbf23638f11f6193fa562a33740d8c50f42a2052f0c047ef7b644eeddf86b93f15319cbd65a820a67d2c15ac95f610244c13c283de2e4d333a5d801d256d2d0984c3858d68fea92361374f2f82bf53fb6297d6ed57db0d43527492e79b5fbfd2236e9e72a6c12a6634615a16e7b621ad36a23da732457ebad6a28d3194d499dd5e1967a511619ef238a5348e20635eccaa960cbce200e39efefd41e09f6eff0b7f89c7012106e7fa1d8da907694270512b879b92eee709e8ecd7a31c45b50d80ed69591209a0788e941dec2ece688547352c469e5b034b0b22a6ab09ebb57d1d682526e824cce2e64863bced638bdb0a606acd2da5e217c67a1b111335f051f31eaeaaab0ab8e5fcfa7112c6b80b6dcfe02de8195eaac932eec947f7a3e42e4ae115b08bfe34c7e8236187565e988c86229d40c190fbe259c97c77ef93d1606d1f44667e02dc8410ff6bbbce9881d9d760e7796466e4b7dfec6cc2a152e9306d02710d7d5374bf952736f87bc9714a6786def2f2fc662a006f70901bc8b02daff3ba13570b254720333333333333333333393cac7b66db44d5eda52a6746f7767bf016e6e4a4a4a920e1a179841c9da40c9da40c9da4800024d0ae709f009558662e40feac3edecca1c870c450fbd9b32636edcd4ef6101d4180ae936c74166f4570125864399fc738c858182b76125e34f40025323060d62800a43e177c2e7583c074331c7d33fba7aa0390e1363cbfd4d00636f3b505f28fac6f5ed1c667986a4bce07ffec9e8613480ea02df72de61e748fe1e017f181b32325063282e14b3a6eaf158470320026a0ba50ee2367edc1ccb570b85d8c147ffef555b698f5059284cf5cee4b4ec6e9d2ef0e205120a0ba5cd0f196bbdf107068c1bbd458d1b36cebec68cbec05da11cc53eb37decbb72dea83183068d2d2b143c8e39bcd5d099a0aa60b984fa1dfd6a5054a8264e8cfe25d315c7d862418d1b577536aa76063585e29d5b6cd808c9bbe31a4a0a658f8dbb221edeaebd1a2a0aa5ce371d63b2762f43a050f238b5de8794651e9efee3282f5eac76a19e50d09c541f628e3c9e98323194138ad1644e3e2dfe63dd6a42a9d54feb03f5d30bc584d264ea2ca391443a73e762024b2887a539fffe87bd097a0b0cbca04229a19c2c2f6db378fa8e4b4239b293be9c1c2514120a41d34cc81e945ee864813a42b93f160d16215cc357239422871dad47c5cb6d5784429ce6185c52234239a7c32acd8bbf5009868d2d940d3584f2cbc78c7af5f8346884508e9f9b1ca53d9c2e390845b5f8f88cd183d77281508e3d95954698cbdc60fda0fc15a9529b463435940f8aa65d9aec23bfd5f6f4c04f1d477f8fd3a77850ee6035f654f23fdd563b28ccc4dbb8955c3a288a87b1c9839016ea67e5a0dca1c7575579b321ddc24169a3ac689bae8cf65a3728e60d1292373f0c1e522d940d4a766fe1e9d1264f99a36a509e92746dff1d67d75b3428c7a71e435747c3a819946462cce5b3970ccad16176f538eef8ab2c30b0005501c5a2d035f954af8745c183f62b0b39cd596f6c02bda2ecf2a19a3385ae288bfa27194f1e074935ad287df2a84a720e5e3cb4770bc48af2e4b47aaae6d83ac86faea2f876a29e223d839e4615650fe2e3d87c26e6f8f4545096b7123dc9898ac26f6732b1ce4f518eee1d4d9aac849fa8a62886fe2084fb8f47fdb22c45f93c7bd08d214688d8e8c2619040c6165cb80c13831c22454163d81b35ad4992db51145ab277eadc34c1c38ea4280a5199932244cae57c5403148aa2698c457dea9061ba40519210545f438e3f2474c4b88137a04f54aa3719e5185b36383d5118315b09c15a3bd716d8a0172fbe05ff358ea24e143b7f903a48cfcf11f2ab04e244e15437424e9e333bde31b6ba6026d0260a7226513b94588fbcc60d43e36bf0154813e5b019795b2f3171d1022805ca44d15a7ec644394ee9c89d10d1618c7bd512e8128520f57196d1ed0cc912e5f3a8253a44b8899b03c3a812458f7a1fd2e67852a224321e9e1e668d3137563aa04994c38fdd2b5a3a8e5bb2185b5438204994e38f3b75cf47f5a87e780f14896224fb583fe6681182364c8df2e205210441a21ca4a80dae7799e3f36ff4d7a831a3cf1e51361b8ff460d111c3b4cac004b240401637e4408e28d97eed4b0e3572bc3f35a21c7f4ba5a57456339118518e6e7e2316a15243498b28e7fc517912d1fff0732390224a9f335807392ae3733a11c5b0b163b58f1cf5471e26054244f9e3a8a35a09f5612ecf218a49de5e326ae820a5c31085360b4d1a23a675662a50210a162d5ef981c6d82b210aba991a2b6fe2de7944810651f458f2742f927e69dc0324886230b98e3dabee734cb2021488927d384927b225204094f324badf423eee4963f8cf709202fa4321a48d713fc86dd21f0902f9a190e16d55fd6f19d487b247ad9ddb2bc6121fcaa93ed674a9e64925f6afe06b06eda1b872aa29f5efa1c17037643e203d94bc7cde3e3575c8616900c801e5a19cd77f4e8274c707c243e1aa3dccb1b237e7a732407728ee95339c30d9a15471d6514cccfda6edb040752869b469fbe0d12ef79561685ce00a4487729c442dc25c7d94619d43318874eae7f8cc7c9d15480ec58eaa3ebdf2de6673b80a148772e41ff231e207b21f0b05824321078d2e8fd55a32c7a137943a7b67f369cf5c912b72435936fc745cb96d28577d5f7f369f0d85e8923343e377bbcb31d01a4a3fe3e1e3a054e2ef430de58ced60b3679add8f5364a0341462d4d1efcf1a1a4a1e2fe44be3738662740ee3480e9dc9378719cae13ace55ef1f6fe95a86924c260f6565f303edc850b87f9d4fa1293cf2f818ca352fa21ea8e68dd5c450d050cbc3508e9bac834f191d3ded60286cdd4c5f2876c4a6f2a04cd53ee58572fb7fd6d75076a1589ae75c52f97b07212e94f3ffbe75b2b650eaae0e73789bf1be3cb45096ff1cc4360f3af17716ca39feeca1437d7e202c1464b763cd651e278bf90abbfea48da615f69130b9aec2f19ac9876fefde21545037dbb547bae43813680a25770bbfde0e3ffacc150c2485b2676d8a8ff49dc31cee266c480a85720a8f2f577dba91ce2714c303198fc34c69819c5010f1fdc05a57ff6a34d4844287f36036ae493cc7490e10130ac9d33d5089793dd4339cec07b4847a618394501cf50d25a1b0de95d903a9742f05334e808482c68c9ab93a649498901ed011ca2b712e3dd0c84963c58203238d8c504acf313a72cb8c9230c6d60c5f1e50114a1f5877dcd01a9d9302229424c3a6c34dba1b18335c77404328778e0c316709c198e14228e76cf7b8b6d7038f6c0a423949657c7e6e2a7819305850e306fb808050ee88edcab490f80d817e50c8ead7d41ecc0243c3078594a3f9b1adc6538fc768ea413126cbb81d567298f1830b2eb6300155d5807850cc8ed1eb38fed33b9761d8d0b6a01d94ea7b32a57d0e93c39890e82942ea53f1a01c143d44bfcf6149622c0c1933880b2eba5000025ac605a00d8483a27584d57a0ece3a9a636c71cd806e50fcb8c3d29afb3c5b750b7f3304d9a06c751fc3673ec56b6cff4035285cb947db5e79e42f9140c6163428ccba79d4793bfc995c94ab3ed00c8a4936a19a4e1b26e8195c18c9a098af0163c60d189f168bd2d6798c12656352f5607061bab851638b1458c1a2488994d3a0a1c52b8a1e73a8913c6a86d33c0b0c0d57940357ff784d72c6165db5684539ece8aa89595130750f3973ec41572eb2a0c52a4a61371fb512aee3e755518ed39ae5b63a6b35351e868c2d60f8db984163050fc3c6166b062d5251eab8e63a46f587fa62d798719c18b44045d92556aefe04f934d1384539b48dbad53c0db58116a6a822e2c3be5d4c626c0366ccb00003fec60c09d4c1408b52943f2516d4f82e50408a5287b8d932e24649e9cea8412327a0c5284aeae667d275d289428b5014d267ccb94f65d764b4c200096490516d400b506052d6216b7acf35419b1a3768a0c527908e90635d0f4973032d3c514826223b3950ef8ec3520f5a74a29063c7262ae31ffbe3868c13858f3635613d47733c9e8c195920208b3781b97181b7c1c58c193460a01bb4d8c479dfbe74195dcc38676b430b4d944feea53a1a3713a04526caddb188dcc71d98284f4ce93ec1d77da2e612c58ce341a8fa1465126289d2b77608c12fab4431827776647d3fdea144f13aa4d9509be364a8b4984449ccf34aaaeb6da6d24212e58dd4ebb1527e1343198992e89a87491f5fbc85443937b5ff9327b9385b7417fe35f6110571fb24155ddd7aa769bb11c7abc60e738c8f2a242f69557afb534f8562b96dec7f0e6b0af95a7c69f852d02d2656838887a1a18005300a84ded23414ca8ec82549cf37d2f804c27f469c2435afb2e19c50920e93c7791d46f64a4d28d8b9798ef3b0433d9709e71ccae9277f096e448e3d2d3efba84609878c11e5d191269a84a6cfce6323266c3456501a80864382d29d396eaac6db236079f6163131c2b185cfe4f024635404e7bcfa831c58e4ca860845fc8ede3f64fefb6708e571f5382779b5be3a21f8ad63a761c5dec3af480a8c37714160257544a40f201ce6905c35ae793f28cf77c81f4ee384b4e9f3413124b4af3aac6b2dba1e947f57572336dda70ecd02015948a0c6bbf918ea85e34121b5cfbfd4b8b78342dda4ef58a5ce3ed5279c0e8a1f6854469d9e83f25ce99455a5696aa98783a2e7cdd16771af29ba28dc0d0ad5293bc8fbe8450fce06a588f8f6ef5ee96a50da98278c4749d2a01c6f944c762d1f6f011fdc0c4aa593e9aafe9f0c8a1e3a3ef4f9642c0a123f6df8dc90d849113358143206497a7dbfe25399e88ee330ea8a428e35f2bb66ba15e5b09dce434bf858f3b0a2e41ef3d6c2d2551443dfc3e041525594a6634a42d0ec91c7a4a56259cf8871134991221b3967896c1b6fda3da060a82868c7c8bf92f060d36fa72887b3dbbb0f3ca628be5e7d6093927d3ad64a51dcd81aa2b516cec04851d8fc303c1809e1369931b68ec3b061a86c186014c5c9b1e748999f630f23268af27de4071f7284201f0b45f1e3b41e6f4872d151778781a2e839f3ccbe47c758fa27ca817eec91ce13e5c85b5be67d3d723beb445925780ebb8a0d6081172fbac6314e943a4f98fc24392bf395812c10908506303751089d3fabecd04421fd5bb36e6add87c9447137fd3a7218a9493a3051faf86579def197283fc5f9962849ee35f3899c443d95285a988612a5d5c84147ac9809519f4421567a1c2351b6667449144c3d9ed86efbd1833c12a514e9f49caf86445942c326aeae7eb6cf234a1a83e73882896ad68c234a9d31457cb8b911a58e532bb3d6e9ad31230a39457af2d9f5874d165158c99867b2e774361145145b3e921cbd586cc46c224a137e4244d9248aad85da74c9872866c7fbdf36ab218a356169737b993a520b51cedf1d6afd534214f2847ed28d9d13920ea2fc9ec1e390ad66b34b41947ba5ee26758307e90b44e1a6743a2eb1d7150d1007d1d5397a20f94371d3443b3aae986acb0f85151795e41e7d285ca7dc9043c36ea629c6568cbe616ab40d185cd475c0f850ae8e23e788d4f2e176eca1ecd53a1da6899761436e1c5bc4b0917601d34361e73af0e8614550c9f3509a891e9247ef203b96e0a11ce7b4e9e3eae3ac727204ec0ea59c9598c3a54772d2b143f1935a7a3c214b4f2e636c99a0c60c15dc7819306ed4986103068180d5a1a8aadfd56f1a44c2071d0a1b36278721eb19323d87a25484fb2ecf0d951f39143d99c648fbd2cd6f1c0a1efd45a78d311c8a9161253e87c1379483b1bbed9c393714d2e730a6b573de9836143687b512af0d9a52634339ab6dec1a1bc91aca21364ef667226a287f9c2782860e34d746240d85891dbd6ac70f1ea88e8672fcb95e729b3394e2dce3fbcebbfab935437124c7903984504f7796a1dcae1eb98b658c613632143e8c9e375f7cf07d91026c0c079bb5797b61df569918caa96222b5ff47180ad13447e7e19d6028c5741c840839fe54d62f946358b9bdb4a8e8a7bc50fc1c795aa566e9cce800d6054762eb69f4b8cb830b4dbe6a319fc86f81ad090f7fd70212d661b69e85629da4f8a043a7781cc700860565aa7a26e27aaed084ff38a88e15c8af215385a3eccffd9e4d35155249f21da7a3fe4ca1d98dbcde53f71a29d4417ccf2f0fba8e82d16142b42789a1b0c4902fbba38ef6130839fbacc40975e488cd6f1314091f153e11e132c15dfb7ef798d483b42e81e4fa2b1a5502b3b57da526a18f3c1e958830f73d2201cd617d1c9334a97447e846232486c88d40cea4520d2b6f5a118ee891fd1c1f44f07f62d2f688dfdf0fa1ffecb45c4b08fd89e95941787ad6320408e4641f34799083fb036373985cfcea421f98392c2462b6a6e803d683424799b683291959d74a603c2876047513ebf03e0256f9603be0e6347c7ef3e03ab6aac60d1a5f301d14c6ce038be89e9e634d0e8a13b6b9b2226638b817a822b01b980d0a915b42880eea3ac871b001568372cc4487a81d82e64883623c13edf44de3ea1d332886f02fba5ffd397e6f3258b36a79ac9c3d16e50f71ee7c4cb4f63db028e770ded2fa9e571443c8dd68b471cdd57145f173f06992c618426d4c2b8a2e39ee18b456247e66453910d7d2b2ccd1739255143368d6ec214954519095fa1cc6e91cd324535188d12c43bb742875232acab153228774928372ef14e58b0f1ad5d62de23745316884c91abda7b25595a29cb4d396d1b12245a1353f471e4d53774ad6438da2b0b2712b1f7744a4fa0d258a7a51a1286fdc933f89179e75baa14051e8f894fc418cd11af5898286bbc4e79c1e6c2f6303133d518e7a23435429cf106627cac1e54cb57acad8917682e244b9ad4252c3fbd94679c60d18fbb589d2dea4bbe486674e628cad2e26909a28be54dde84b48ed1e26130597f648d2bc07535a23260aa9d54ec116bf45869728fd8769a672326ebe14d112c59f6b9ff03875a4e64a14f63406f328d7ffc47381a24431ba58be6cf28ebcff185bec1ea849145cf55a67835d6a4d24512ae95099bef5c5c78c4469d28ea7fc8f233c8e064441a21c654652c44d9d9b2714a84714a67bcd3746de8c60aa04ca11c5d8b8d3db597dbcfaaaabc54035a29cf3e88798de838e3dcb88727488af0dad4ea116519c6853f6251d82e4ae14514c655a196ba3c4759d8842ea26c9d6614a1051cafff138789ec86a0e3984719232647b5f309421ca9ab625879d3b85287e107298314d9e6d9a09512afb388a99bd8f37a111d4208abbf2a93d9c101ac5dc4009a2d8fb9b2eddfe73c7d60c18337cad071588327ad8929ffa3b36f8090588e29448900f62340ca141fda190b23b93a31c4957d2384117c70f858d21ac9567d3db0f8ab1759683ea43c93d079e73cf792f283e142448eb670ff43eee203568dc9831e3e042d41e0a31fd677e8831af8d283d983221b9ba222ec30432bac84339c5e3ad0d9931acda34fe5560a3b2c0c002b2f82ebe0b14c8282f5ed80000220a0f656f8ffd20ded47e423b45dda1dc71bb350797390e31b243a9d63edccbe6b5c38aa3507528e744c7a3571553f343a1e8509e8c9977c7b5731cbd5fa8395c1ec66fd2f7b45c28391435eee3b4bff93814ec36887cac2f993baba7d4471ebfa114f9a9ee43c89aa16d40b9a19c238de80e3c977decdc86629e9ed28ab0997732cc86628ef73d66e935fd9ddc7812545160692c036a0d676deec924dd1ca6d450dcf11c8dc6beff0c691a0ae21f627bfeabd050d688d451dd4d52a83394eb63e7c9a9e69af25f24ca0ce5b8a3731c627cad92ae48606498085ce0c58b47044028a4b3f008271e76c81f1432dd5988794ce73572cd217d508ed29b41a6d3a7a73a640f4ae15971a6b5617a627850fc68a2c789dcac0e26640725cbc831c5a7e3445872481d943b3379e071387350ba53ad92189216bb6b1a1207c590d91263ceb15b79201af2060593f4e471d8a1dd865582b441613f6e89d61cdea765266b504c652d92258a7d4db414498372b7c67fb49f35997e0cc4e340cea0e4eab1d47fd4514e72df86ce48199426967df6781f306accb04313602c8a9a543fc9f56689bb1a03101625db24d79fa6e55794b35a490c911257144bf2b6460f5e9b7b2bca921262debe8aac28780eee6e7a238ae84ee36b506015856cd139c8dcf1c7913ac8125015e58cb4d75a96237f9b54143dd586079fef5e3d8e8a62d048adf9fc3d45396fe7f71c4cce14c5f0e1a30f263d8819b01405bf56179f18b2d60793a2bc2f2165fe919d3eba0c388aa276e6307bcef6ab13a6288a392f347a98e33114c5546a1177ae0145b1c383769063cc71ceb130e027f8cb98535cdc759cd419a0278abef3626ff1bf521d9d288f78cc6ac68fd1e37b9c28cb8690b953c7ffc7513206dc44f9435859fd389e4d864e13e5f43a49c2c731334667810430c0ba8099c0c4254af9d9f47f62da7c20ca002d51ec605a3cc7a13ab4fe2b519028211d3b9292cf8f12851c268e87ad9a36e4990235ca0b3889d25f6989acc7d8fa5894444152545d0609f90bdc90f127205cc0489473ddc70c1d32b172542d2024ca9d32c74963ae6769cbd8c29f86a9d117784421aab2c375efcc11459bcd8da8933ad5ef1908980036a21cadb66a87fea8808c286d76ab545c14055c446973e4601b22ff684e262aa2f4d9a3cdfa51040b9888e25ad969286bf99c3e241011e550c3cce7cf1a20f01045ef388610dc3e9fc7390798031aa2d8da293e48da81b5c65b9c600b08581eb010052f8f1d64cb0d39741ce5062444a94f2fee2499d9876f10a6e78dd57c1c720c12a0200a122f671139d6060c4429c28ba894e5802845cae49fbe169900fea1e87e9fc923fda675d30ae887a277e7d873aca99137c71ab00fa5ad9f9ff4f3f950ce6912b7d5639b92f750ceba7e523fb1fa92d6434953c7b5b1c34f3acf43217e1cab9b61bde6c34361544a267897499acc1d8a3f19f45b4f3d389fed50149ffc41eed3fc39a90606ac436934f2ade7c873ef27490a0ce95092501edee330e6ccfa1c4adbb9aa7d432787e2da494e75a51d04afe2508ecc18f3ef4c45241d0ea58e32688cfe2c92f9bea1dc933bbf394ecf0d1d01344e502306a21b0ae6d1ddfee14e006c4321bb7b65d8643de5221b4a1f5c3f8e6392ec3948b88692445d0f513b08d69e5643d95f3f6baa1f4de9a7a138352a75a2a3a12417672bd97a92437c86f24477448f4f6286e27baae576be0ca509db98834cfdb5ee92a1904370cf183feefed48ea11c22667291c952a2a518ca99bd59ffe71d6aba3014fda38f35bebd39f560287cb40f11abcd74c25f28841045325a74eadc96174abe53e6ed5f75a13cef5b733ba9dac3b950de8f24cb9756c7f25015700be5b8d13d34fd6e797e68a13c1162b2aead4c621e5928fbcdcc6b76cdf51e8f85f27cd893f7cfbddff92b94c30f4df749725644b74229a354bf4dd8d69ebc0ae5302a827f4b8542ea75f7ca88adcaf414ca9be31cac78c8914231adf8eb6cc844a1f42107148aeb66762d25ebd1f3134a1f4f9ade49d809c5e8eea0eb2575f4399a5010910c9fd964c29de221b284f2664fa21dd25542396c94acfecb59d73609a5b58f2126732414b63cd65a92ed6fe408859c3d3d8e664c995e23143249548b50081a7cfab44f2214c2c4981d7f3a6cb97108a573cd792b54bc34078550b433eb5c9e9fe3096110cabb1ec887fa997fdf0342f1b347d56f9716edde0fbe29970e53c84b95000d01faa0183e9070a21e7cbcdff5a0fc39fc28fa21f84dc47850480fcfd16d8707bfa91d943c0791d5737eb2cc51076fee8ea34e89e7a098e1267878f3f8ec121c14452e3a9a91e85158788342c48fc145721021750c6d504e7b969eeb2309f113d6a020e7dd5168da9106e5c883518ffa153739b0024dc01914ed67c2b58749068801655048b98c1e978b86dcf7c58b8b4569af76b57eee27ba0ba38270b028a69c7584b1fb0e3eec8fd941dc2bcaa6b9c6e3c586888475ae2867528f3da5d5e6944e0fd78a72d5b86bf86c5be73ec6d6df98a1012ecc8d1918c8020159d8f81b33341086638566d25f7e11e355145349e898ec838f3c465451c841f01fb7c95e2a8a694c6d6fb5c3f5071e2a8a9a27395ae69ce30ebe0bdc298ad251e438f44b626cd599e24a5118df9ef9e0bff5f1dba4287e14a331749cc7472a1836b6b061a328447fcf39da864f1425892172d230e6d2e142517c8f6bb23b5776cc9f391c28cc81c74fe0709f28465a07fb307beab956384f94227e8c1f49783b51284f12aa453d8cd5124e944a2b3a354ab789f2da47d6e93b840997d144b93235fa662bdbeb904c94245a5e2ab3e9ec4a9828e7fc9b3786a8778962548c78f4c152d6f3b344293fba0badabb6cd5125ca71e2ada3e8e0d7410e069c709428756b4fc8c7e2a93bdc38709328bb07751e47dcf441c6133849143e08fd621d31125c240a3a9a3d24a733fa7d6a7441c3b83848143bbf59c7f132b59a156c71d00a66d4a061f788d24c64cad872dbe11c5190fb303e84d9b422ef35a2dc21e7c951fa4e8e9dae51961105f7de2cfff850365fdd22ea14518e13bfe7373ada4a4f172e11650f323ffab81deae33e441452c694dcb8323976cc843b44c1c37e58d21d94821837d6860ae10c51f038b8d8dc3ff952d6429424acbec75323793c9a048606551e068e10c75168fd9c7b6c841b445964c26dc6d490229c208a2f123d35af55a5a87c8128ecc7c19e9b7b00a2f819d9caa73cd8843cc61610ee0f85ce8bb00f546aff3f5957383f14d623b70e92ef14ae0fe51ca8e44d9f7c2e23c794707c28e98dc7e09d3f3b87f11e4a1af7f1aac7d261e43d3d14d26ae4cc606f1e0adb51f447b6d93c4a8487428ea5aa64a55fbdc3ee0e050ff20673f7ffa0707628f66ac59d8587d1f5b51c707528c7a124ff387f2b3a942fb2c69fdcf11c8a1f771fe28792937dac1ccaa1c4498ca92fb93b340e85d51c84fddc0a0e85988f53874acb5019f38662ab44cd61f3c40de59fb288d1a22285d46d28bf26fd8bce231bcadd69736397b49ce46b28861cfa7bd893aba1d495be9f195772c7330d259ff934e1538e86d2d7c7e15cf27d07ab9ea1203b3b2e9a3673df364339e61c473e8c184de3518652f8e879986e4b24d96428f9c498e3c9e97c0e1d63286ce6b859a23275fcad046070622869dffeee476d8b2a5c180afe619c936c29f1430f30145cc3fdf2638f2f1425463e87d1313c97e785d245d86c91a333cd7bd011ae0bc58dbde72145a6cbb950fa30a78d8f67ecf1201aa000186e0b85dcbc3979ac849d1ca905d4839a9a0803d47059c8e320274530c9d2d79881004ec361e1105eddb9f36cceb9826f3b15e1693b74cc5be10ebb33287e8ad9d8929d9541e9a423dfd0c1dfe4782c8a392a53d6b02847179a5794de3473f4141a5794234d8fed3dcc1f72675a51cafe9710e78315e538e750ac830eb9b55f855331b127e75551accf501e795e7dc953517abbfa40c2a828a7becd6427e1539435ea98e7bc21a62864c99335fec6999d49298a1e670cf1732a290a9e36cc7a1cc63c9923a328a6fb50e6fdb307d922a22866c7bc9eca3a453c4251e889a7e13e46fdef4151dee471e410132d1efe09ea4b3b4cf0dd13a57cb7bccb54f1f2d94e14d3c4c9347d96df9ae544315f7e92901b9d46de4d14227c8826ca1924ef756ed5933613e50e274c8a538d7fe162a2d4d712f22de365f39728e7b93b4dee651eb644e9f378e7f74ce6c42b51e82c293fc81d4a946c533dd76626510ea3bf3e21564914c3beb65885ef868946a2fc9fc37dec544814e2e49421e63bacccf188e2f457c4dd8e1d07bf238a2d1dfe4785c4497736a2f86dabb973883994271951c86194dacdd839cc915c443b57a3a1f22aa2982ff35b76f23072301351ca8e3a3bdb249dcd2522cad61da2fd8d7cd45b1ea2383299e161482fa9a521ca610eda3dea7cd990ca4294c6447394b47f310f12a224611a1fcc5246a23888b2d8d9074f7b623ba220dc891dc44094a3ce41e44accb10d1110e5949da7cf73ce79fffb4371dc5dc2077559a99f1f8a692a826695d7e7f6fa5052bbaf0fbb1e1f0aaf96faf92bdf71747b288694fa709edfbbbee9a11c63aa4f89bccfaa5b1e0a4943b6bb84fafc398687b25b4795f2d1c38c6b77284b3ec9a761f7742db34351df576e5d3dee47ab0ec54af1b9ffe950ae8b948f394a4e93391463eff2e3fc6a191d72284edfd94df9e46ce350921057b2c6a498e0c3a1e8e64196ad6f28c7fcdef129e306b244be0dc5f3ca1c7fceb2a1709e2307f9b4f3d5a33514c43f8e28972c5983871a8a7966a636c7ff419269287ae013a971734287a1a1b4eae1497465ce500e248716d9559b3d523314364fe8158fd43214e353dd6ddc90f5d72343b1d4e3fe1c486c0ce5a8bbd4c673ec625589a1e84924b4a31f86427938d15e6fe2545a60286a870f12267810627fa1bc1d69ce121979a1f01fb96e10f5d42177a1a49ae6333ecbfef55c703f8714ff1823ddc2dd1a25d211c5c5624a53868d893208aa8572f4eeb7c4f09f5d52d803cd422107d9232b2f93314e0c40200b04bc78e12f6306179d03c542e9be43288fa1fb1e432f5ebc78a15728d57e4df23848ee07d40a85094db1161d84fdeb88b175e365dcb0f1372a035a85628e3f68d4cdd4c93f8e0d16bc090808940a85e4bd123b8fd6b5ec6853285e071a9e596167d94ba1e8914b0e3f8746fa0f138582cc76681de958038542b1b53ccc9410e2037d425993ee87d541a4638763a04ef0b3fa5ce4686d0223f13a3bc28603ca04d7251462c6d5b3ce9af3e34c64a812489b1c2df1d03c1463ebb980e16606179b05061690c50d3409a572bdcee5b17d2cc1a331e3c61607060d1b09034542a9d62407d29ba67356c60c18346c58251d1b5ca08c195bdc30fd346c60b9408f808610925fbb86a588812e661ca0056a84146811cac1ddbef7c7f81d849812a118d1b97f42c76f137a1a775685011d4231720c9f923e4608253b355393d813ee07a198f395c887b539740f8602a114e3d25e16b99e22ab3f28e46843b6e7757c5008beab1e8387ceb93231b612a03d28459ef6c81b7d3c4c1e14cb2645d02ed9caf0eea0d871f3d1bed987ce498c2d192a98e1306e1c5bd860d5413928f948235dc7ed480e8a31df27f988c13a687150de282e1d7ece71832282c715b2b30d8ae1c18479a89c445a83420c6dfe31c8f9884783526a98f4f270363dea67500e42bb5ac7b671bb5619147234d7a3a33fe14a8f4539e86ccc31b5d6570e8b62560fb199da4143d7af2854bdef977ef09fdc1525bbcc8f3b35ad484646e53c9f871505cf68cd989c5514732c3fef3bce9133ac8ab27998c24393a9288418d2bb4d6da8c7a1a218793a8cacbf8e1fc6a728eebe69881ca796e64d514cd5629342528a62c8d7d613a38414850e09aa293f383d6b47519298fa9e43a4a22887f8c85b241e8a5264559df0a0abe74950147fc365743ca69cfd89728c74f935f97396a8278a6143877d1a9163859d28daa4cf1e7acacd6ac8897324efee99c1db443967bf9afce269a2e0be41c7755b537c64a2d8f1c867ebd4befb0d13c55bb797ff700f56b44b94b6523ab6f813f9cf124595e8dc415a89e29bed4c32cb889915258abab12dddfe248abdf3d17dfc48a224f1f3a3173312a5ccbff7b2b9839d4631b612127b875113c77e444172f4945093c23ec711c5fcf1873146535259a71185f831bd1a7f9ed2f393a0c69f209311a5f75bdb1047e704e422d8b19fa4223213518988e2cfe4dd4b879d26f604f210a5f8de1027cd9c862895fed846b8b2f50dc942142565b60c76ba31a4cb16908428e587714f1116716b1e446172fc71be6e5510450bdb38390e0b4439478c21a6478dab5302a2d8e1e2e30fe51bdfb0b30e2574881fca61e4c9bb99ac0f05fd7035e2c729f950fedd94fe2087cf5e648adc4359624a86edf829a6aa2e4e70822e2e406adca0917a2879d8b15b44b48f22611b9fc83c94258ae6f54e0d51d72745241e8a1e5a74c739e4dbe65cdea1d4539f6cb3785960600159c850c10458f00f208b483b946eed76e64bad4331840da9cf71071d0a7edeea779f37c93cf9879c4331f26586950f7bb203530ee550e2514ff81c0fce3894463cb766ea0d9e4349c2a1dc4976c2bc6712e41bca925726e6d93fdd508c12ba224bb636936ba5906d288f7d4e397a16211f1b8a9d52a2dac40ee9635f3fd750588ba0792d721c07d5d5501e8fdfad3d8c1ff8ae3116068940a6c146a2a1fc1fde4ea86b7c0a489ea1dc1d92ec264dbef16733944da2734bf2e79871635535812c109085d59800960d1a332ecb502f0a9064287f87bd59933fc6509a6c2d6e1ff65511ab32a4188a9141f2cdc6a6ffb430143cd4d7bc8f244724184a9934b5aa8dc7170a39624721af9a437d6b17915e28d586ac9cd4a239aab882c82e1425b649180989d59b02915c284e446a64e4164aaac1a2a3c3d8a1fc965a28c7109d374d48ddfe7666a1f41e780e91d3c3e6bfb9482c943cc78baaf7e6b63971c621630b2b30e4150a933a964a9fb007d20a654926218f479131a75b2dab50f6e938eeabf1bfd89c0a85f41679e5a13f85e2757b7c18bc038794c2d6b7f6df5667140a9fc922476a7e6b73d948281443baf92863c83926cdf9164f288794f1bcc1a51b5d9c2d6adc9031a361cc7025a4130af1cb6348781ce34336418d5aad0dafafe52199508e34e95c4ac60e76e34b287895c7592547de081d4a2847fa141d496f7bc82494f3c71d87b5d124670d414221b6fb738e1461365e78c8231444357bd8917e2c4b37427b2fa2bf962bbf218b500ed22b433a942c2174881b9208c53af5c8737eea149f8650f8a0a38ecea1aeff7a82144239faf0735e4b426a7bb067104ad1a5fb2a69357cac89b145840c8e0ca8147146326128100603e2380c831898780b0063130800002c2a0e8782b168401064d5371480044e2c2446323216221e14121e1a8e45c25028180c0744a16028140a0543812814c54a1aa3f5013f1881d2166ae0a040f0d0fcf603c378f0d0c77c983168988aad0e1718d23b15003cb8f82d083b8d2c8b36dc23b80004b5340e62dcfbc1c3d2454197048d076e06769eebf2166e557043387b437adfc6f805f70cbc95bd457fbc3284b2b026c209100d3e3a7370a6c71c4ffcbd8d605ef2e47dd018537ac81a48d63e7c82f0371654c00329b8046c0f0f47a1e4b938b8c08bb26583c68389dec63944f2fe3ebf2d0f4b009eea51f398e03be55efe86de1ca8d56be715a067d1238797d783c56bd0ef52228f0b8ed90d113ceaedf4e2f70ae949c937028bdfbec5276f999e0e1e5c2f181e65af326fdf7d979ea16f182d4adca2a36082d4374656f05027b6908d3df1d071f113c8141e94b51272518d7c94f98d07e7a547800ce0a179deb7b27dc4b3649923fba332c185b7b107f6c6dff52f311135ef8bc66dec8206fc847d32f68beb71f76e0155438dc8e7072822ff179eb598fb8cbfe46f395ba6b846b6413fbcc8dc281bf8e4c065ace806aab3878e88ad3ce4e946aa306694d9c42f5c09ab610b4fc0811c4e544f3805c0a15459af59af54bd9a0fc57b52dae211b9f69153038efa64a140dd1c280c46f9f1665c3fef04fb09cd46f01fe260ee1b7a337662e9f5b044bdd0eb6f1604c6441d96f78aa646dd6ed4161d498f2df54c645d03f08f88f5d7690e6420bc2d47d623246c07747d56689d3224827481b5e6914577a9e024833c1b1ce4c5ad1b70d379619f9fb651ea7b06a8d31f2138747838a2c4459cb28b8f7de371df1979c0cd3f1580bd5d4217aa6e45b7a97703fe4dcd1de35816cee84f240d5e31cf1c2b8de74b1890afceb26193017c91313698e92c57abec3a1408c309b02b57108075668110ec29ca6f70f1d494bc2887835d2ee318800ab02d98c6eb3c04a197690d7c1781f600c08b29d3cb52d0e0271319140848815eb79f16f9b1760f20734c7eff668a0b5c8f4c474f86e5b7286d270ff567694b689875679684668f28f89714377dfb025a361a132e45a54c376173cf5866b324df7f4c36c68464b9a0dc4818c8c80f14d61a5029b503d255fff6572d2451ff1272dc2f4309a741fd18e47871cf7f0c133061dfe9cb7e1f60f6525871ff8e26535a5463003d837d60fea55c8b7ec683a0a65f6adbb1290959634f1f008984244a94fd41b8b074c735ff54a076d0ad6c01649b3bb820bfc91d29145c8fa90730a4e69acd814296e2c740a4a0521aa440e682fcb372ee0e18a4e8d22a536fa2818270f0ef0a3f0a17250fd37ded3304796a300f0912620aef210e1afd502f3287c02629108114057c004068d162f63715a91b3731e472e0487d0644c50eb6593be00ac4df3f0023c8266005b6067f288d0a5f22c535d2e7405e1abf7850354800d8514fe80511d64c372606f955fde4c949cfbb0a95de5b497ed076667c46a40c230026f9d9beed68d709f2b7c59e412af2cc3900349c87da81a620da75fe2faf6f21ee462853ab3785a97d600b8f6c6289b4ad0ebdac0f9d61a6f2363691660c908476ceeb7864a8df8ff0f260b06f5cda79b15e0425e5507a2ea474c95a92801fd43b5c4939e3ca7cb32180e907adfe546826a90f13b8748db01819d9437cdb06cb4ae1ad9b07af58afac785828cda1eb9d436ae6ca3c881392883c3211f01f3b83bbf887afaba13520d42ebd9c74ec417df8047e21ea981ef4ec6a1f4d0543ff27f10277c52fdfa975a15db80694c9ad96ce4b32d1f2a631717118a1596296f4c4ee38001e92f3cbc424be364503166090e927d83b9b5f80b3dd1b91fab25b950fd5e408086faaa4bbc3864dc2b544fbeadc116ab1258ee20c7c44ec8eea4be8c3b35215bf8d8794fc7d4e39ec94f6eb80a65393b77576aeb2d0447023a85b4b212023e0426fab40bb591a71cc7097136c892fbd98b8196c9ea00b46da2bc60a1ea9971969dc5aac55774a30609d32bb5cde3c4795980b4c4d69b31fd781ed29374e1225e304afebbca07608f9073e8c1e461880ea6af806ba63c3154db5d1370332638b152475ce3746921b12f41a4d695e41ab144bc1841b48df8707e16288fba39f013cb154ac655a3d39c05bd7b6a613b5fcb704f3a77bb5940ccc20219a428d21a0df4a8aaeae45012a566650b1d63bac645c41f292776c645087bcb77f4764c6a21fa2a74979471005c7971e8a8dbd9e6121dd580aa0d9f2ea383336698bc0e697c3c3ff5a8282051142a1f81c3800e307405e1499bd1fe19406f56dbb076339f44367e8c194c7130ab51a9feb1e334e569bc1a44ac2d86e33abf6a6efa0d532a56c4e4141bcf6f200757fe314035814b2caea283223a5311491728485fa8e1ffd2c04b6f491011c9bb24d1e0fe53182bc0a1251addbd4d47e6b8f3243538010648242a79725608943f819e8f564fed2ddb0e8808fd536ec3aa06d84bbcb31b8119a1ac30908c43c402084186068b2f28a7a48705df16becd62964c3e39676577b352d491c7c1a24ad672a609218a41d52c10e20f103e3d31f7e0183d4e24c1bb618b721de7df0fbdf21bdf40200a6627b471f73fc75642623295189464277f0df003597883d8a1ff033db07ce23d3ed9be2a16df31e52dd825b8ae0a48fead5920cde37714ad1bd4dc0331a955bc727ba370440e6e25c49c259fdc683e13f179f1aabdd38cdea9214cbe559747b12bbc8409871966e34d09ad3742b13c2c4a594d75da2775d118ee4a9277a63f4ec5b41cff3ba1c666b9ff331e91edd0fe73ad02aaa38a2537adb211f2454023c112f2ec74ffbf3614250bc9a0fa0a78b43439d102c6cdba91fc919eaf0ae7164e3496847f3a6a6b277dca188020fba64ad9a6051b5205f8100447912169b55529ef7d3452a8c94ec7f39c36bb9d3de3ad60dac80c228d9145b55368933dd66b7cd3f9d66624dca4772da4c389e1741e7ff86ac30d4e99f34439d198984a4b204eb380507e547cb2d119ddd04336476b69324556b82fc09814b61fa30d52b04ca84b2438730a46b097d1ad2310791462b4060f10fe2598748d831db4f8f098d3980410284003b9f931aeb5bc33ce6cd48002168bcb0c4b6b1e89181db2f466e7b3c08fe020b1fa05d4d5eb66502413355df9e65d583fbd63edafcca8a75319dd54eb36b0d8f42be95386e34dcbc0f580c526106f25877828c34f9b469d29ba4f0ec709b11b69c838bfe35457e11d66546f63a7236d08e1184d634942234645c4e30d2e2115c2190517dd939360d142382b5b0f89a94fb721f4aeda2590cbc7b089f40f18099aca2a637bccc04582ff2d07960b67d252dfd6d2cf957951d6094cae65966320c33e13d0a9ca1a33740c633986afa0385c4fdf434add10738b1fa44153f5041f70f085339ac2c8b5ea82f8524b578db78633d25ca4850adcfd3b5ea16165f954a21660a832faeb0ee6dde1cbc47ab0def20bc39810bce25112cfaa178074988301c1a193749ce365a7f5dd7eb9db6f241ba1687f6ca7868aec598de28dda7dcaf71aefb68ead72dc42dbdf0bf6a801775b24e2bd8765c8129e27c3d8cbe7b58337d1bd518888a7cda2a19c09f15dc13a44fe66c23b11f6884cdd166f53b02c9692b2df273fe7381c1880229dc7787aaba738d92ab15c76aa9a75ba98648cc80dd3e27e753e5a9b7d566ceb0f97e412b22ae400af189b905123770057546194ce0dd55d5af7b2c16015570b82da425e0619b1db7fdf510108e52681a128e524db9e4b93205d0046479fee78dc08168eab68d18493a5fc097250a1e9b2bad39aef698aa8858b453271bad1ec10f307665620304397086737f78904d593d1688bb454392d28718d5063dee420103eaea3c2e9e221667f5706a974d32d4509aa44391ef6a64b6fef120468ec98901f80f0292dc2f2374de01a73c23fde31da4a4fa220a236c7168e3595b21a1f5bcd8f86c81183bb8d92c3372c226a0db7e0282b4a86794c01eead2435f524a258d8ed49e429ff02f46a8e8adc72ba41c2dd656b646e8b2d389bca22d0fbdee5f37221c2a6429afe030707c926b87ba68fc4de8d9e01eade133d3a8282f8589b13ddde863784b08fe48f403feca4bf0231124536a448f44588dcd53f6c41d5825992aca711cd238807344e75cdc60bbf52e1e4a4b79e62c3f4d0996e8969e29668c2b54facbe667c7987c38fa11fb6ef2c75ea2c271fbe864c1b43da11f768b2d2116cac4d2a18ab4fc25a5b6a4d3c1e16d428e11f9b0b39a601c193c2145c0853464b287ab8be37315427af5a35557de8d6b90cfdcd920541d3cc5f29c461e26015162d3f3636ba3bec0894d8246075301cbdfaa0ac2037e8a59f6dbb206bacf07e1282ae8dfeab8759c2c6e3d82f05dab58ce3730b96205521ae962784cac474b512367c1b9d973aa6b3b67a57a3590f6f0f777d06d67393fbe05efdaf25aa635e86c99995c9458f4c8aefdc2580cf25ce9190d27fd3353c2135052863807c0a0f4d1399b624635fb35df45ae7abcc668f017d9986359b8b922c7221291987b29e887239039062a95cb2a9b05b622a070141d58368d25b643e6254a540c632a883aa1b65bf3628b96e6e36ada5c01539344dc68d1919f09620390652c5b1f4072748f44dcca2ce2640e49525e4581a049a7d5a63c6892058186fc378684d2c9bad79b92aa0b6d1b9c444df8d47c9695c2dcba7a36900a2b8865a3496a53c6d333bca8257e7612b5638d2410c9046295a88c3b9111c0b964a7d4f35be46ef21f096749f4204199921c3d21cfa4152d89ba499c7ce1a992f198a838836f300d95e37d4a206d0f967a64f520cca3053df6f8c752edf35b1b4f84e2789c88b6f3e4e1e5715209c83d46871e4b7f5fbf243244812441f2f6c7528e2fc709978f4705e4840c800f8a0b3989f8611f6441c90b49eeb154f12c27bfd9e3ef3fde576a23a8cd2284fb426c2bc8899e572397e9b8da571eefecea5b836ef720a9c7fe3cde9be891d3a3a9783c09072d4b6a24eb9a38bb73c633270238d2b77f9286e3b1aa077cf938bdcc8f5614146e7037411ca042a3d46e8dac9237ff50184007a59befadc7cf7369bb97f12f027c4a2b4a3ac1f45cc2af5915abe9e1e64c734e8e31a18b267d10b11036c6d9f86071517ccd29236f0b32482caaac894153ab778265064b8bb4c5ead587ae2042687e67b104d98f14f6641478b49ee10e3797d602f32763330d43d13a5be3166d7c96156a264280189110c944659c89955102446915efd7d0277eb3be18f6cd964b0da8436574855fb8e904fe00250f5d205aaec9e444f983a447930ff3159310f4bf2a88992f8758f802c1e178db0582a3b68dd20559705c18c87c44d4476428ef3972b303c00763aaa7a28eec2f9d33921ed050afcfccfe215cdfd17abddab849e3f6df1d50e79b190d15c85d09fa7cb6714c403811660044a63164f249f9bbfff5479a6f524c7c48c47d40d06d7c9bd6634f27d3965f6af960b5ef8caf38f5e9617bac6f6b9bb4be81ea3858446f896bec1b015864bbefba513485e18a4b5568c23b615953ae987f3230075092ace105b457d5b7a8f8b3443086db5f9319ffe72a460fe5032b5430d1ce04c9c99aa7bf8164005e150c52fd653b92c173a122fb5cdbe982dd1d3889d039814873ee320612d97c302c41cfa63fbb2acb3f2e814942a1423a4bd68c805e00f06810242bb38744d1b0c4fde18ebac4dac0abfb3a4a350ad30715b956924ac079bee7206ce7bd5cba9b0333c9a0a3550f997d970e0e15ff75563777148cd5434f0ea178f04bd783506e7fb7c0caf89352bd1b2f6039f77525628977ef783b76841786d0e5581e500e5470af01b34c3d5fffca883fcd9581ec5541331e03806efc0d44c7dcbf95ce1874278fbf925a8849c8eb270374442020f4322b23ea45bd5f4045299dd92fa8aa9eadd15b41a1e7c2c3a057b6eab29c512c8cad246e60a6b83ab7cff3a1c7abbda795fc5217126591eb4c2a92511ec38995c7a297c59d4e574d61c9b74c16da90feb4c2410d54222815f2ccad9eb18f2cb529e80032a139f1d75175ff84b8428797ac091eb21e8fe01b88a4df90f97c52e5d83702cac5dd6d6079888c72601548d9ff65605cac4981b2be4f48017a14a41e0bc8206450bbb00cea1fd89628965438ecb2bd47a8a16b52359c1fa929bfff7a437003c4817a426bad99871471922ae6d8c47e082e300d52b09b90471800ac244fb694e44449789743837a414545e09a3cf47324c5665e46a549cc5eb90eef7f78ca75489f78de0d3a00fb0ce2e73e84fc372a6e583736ca0d478986c0442d0901c802ca8521601e2c5dafb11f648464adfbe787a3608f4d26662c74005ccc01d430caac6d17ada675cd0ee26d4242dd8d9bf354190ab8e591bb2f82d6132f97bbcbc046a6609787da8b9dba5e4abd73a5e7d3cb0f1add1ba1c797c51ea378d9c3e10f5b332fe0e0175b80c97609fb148c72b7670ddb222765f941544190abb7cf64958ce1df76c362b19cdeb99ac2892e38bf72de7d689e9f8e9a54abf4aa6b79b954f792a03946d06c6a1d1d392b6c2fcc72d72e584c1631595708444518151038701ec98a2d10c4b2d4b102c7b6ae8a8bb1fd0a5600ded2e24a84b15d58c181a6655381e1ab5942e2c6a37761ec2d5620d8658c2c8cfd3042b15c56fe030cf10818c6ed0710d85b93391ec98e02838af9c8972d051753cadfc658c3fb8d8525c7dbdf124404297315540e23199148a71e10e084c0e92d89a9e8d70978798dd282ec009034365dca366ff7b4676a738461e3f5983961f06f7d4d290ecd1b0ff9e131e99b7049be08ae9880d9873e885afe0b9d74cf2095abae7929d8aad6156abbc0b0720cce428291c8e4bd11fe0f83df34eb82306b12c484209703c94428cfd73f30d8e89d64eb40c4961966e3331ad8442d7c0f749f1936624566ac58d9ebb83792966e20260318c01a1dc9778f0ee76e369048cbf2111e42ac5ddd5c1e0a233c923644a43c7d5348e9e90ebf0cbb5288e5f980ee4fff514378eaa956c4f63eb6aa018eed86edb8def2967e0754d695c10aed90dd901ff122d4c0ea4107bd79be3b951106d3e7cfa292bd0f8e98dd73a584d15403b75e1a02d583c406417052df183983215eb42d1519e57227687726a81e09154497b02c84a106952c681f2b0342cc0bdb270872cc0dc191a9849a79f76a2a6d7eb902a5c6d697c2bd4ca0c4d26964253b196d534b7cd2b7104665c39427d3e0949a19f1a4ba649592860304547971e098268b38c0da5b30de2b762ee8d19548c3646732af9ad924daf5296c870afa2b8e4492e1f85077ecd95c87258bd6fbaaede34c507f271aa9bf3e1e5761bbcb2d51f020b36250799644f01d56c97e1cfa84382ef06a509fa8fb32cbcbae4f2acca5357957a25192acd72ff7b8a21a64285f39f1f1d586c322e82aa55775b1e15344b918b948092d7e9ec38e5a24dff2e819a723d7fb6a46ac281f81ba31c97bc4c6a540cf4f20110ed309a37355ac0f7e6557c8711129d37fc3c8916b39a3b7ac191b8fe7401cd631f8208670b986d1e9d384e552d218b80dc74e6d586cc55cfbbbd15be60599266d7007c623ac158a89d606a515de58531bca169860036ae319d1bc8c62e42ad11e5de3027a6017f500c568c97e0a6f0d0bef4b035f2b71526188d64a4eb2e07298832be761ac81119097070bbdf2ec40bbe4f566c78cbb0b12298519bb73c406c1a7be7ae1db7f3e030972f291d35b7ce4c9c448a6a98984fa37910663ec969881f3eebe5419fdccb313bd5abdc3c2c6525507ede511124a7f1e333f6f41c3ebd7e0455ce593b406f5290a3c032a84af4821b290f70a531748a89092fd92cac15adba049e64597cfcc572fe815c1cbe1e0ad6f27cece354b151b82fd49f7c9668cbc87773b158fdab05ff8bbb579ba279cab87747138c1bdc6806074b1b800de7721a8cdc0d3da6ddbc9a3efd9a7a48ad1586e524ecf1d9b2e1e78bbde1c3207c7bca57ec56765dc15740e1bf60e8d71cf39876909a9dc123aab38645d78ba5d6763b5e3241849781f6ae856c88e117e87dbbcb2469f84f4f7383f1ba322dba1db269a56998df99fbebef2a196cbb4898a29f2707b6657a683603c1f2449a425234e28807d44044e5495328d8d44c5234e661dca653a4eaf42a1e61d11487a0e2ac8386010e000b79679fd5b661b5163a61f892d2e82271ad3e564c774bfa80aa139322e7bc7e1c1cbc348166c88d36d75ca8d7289614e80ba4acf881081e27274ec8632b5416f81b43f529903c370413600c1aff686a91aae3493dbbe0125afbe0774f74796cdf8bff60758971dcac52d11de7fb3576d47d162d9614fb7eab5b176b34bd529f56e5a155f293f285b23a9f556224c8ba076b048e50e027e2b367410748f4d88cc17463eb64be6d7e6eaa0c01131a7dbca7203b69580d300081b17cace4663a6202dd7dd1e910ed381ff064ffc35e19ebca322fdd2713f3726b8342ff6d4ddad0b6041554d553aaa5960b08c164d4057d1534e73093c72c0b4b09c68d1a3a179e41844b42a5f2e77df317ecda79775f0763008260e9746747a731330ecf83a3f2298ec0a1f40abe364df514eaeabed7c29b911506be45d9a910bd610cdafe7cd85906a252dd13ca090f8da5838a0786b25d623bf4a7a2e7a2e843c424febf38e5154f6bd78a6e483b9f03d4e48a11ea2741b00536c778bfaff55b4c2fb212a862f31aeacfbfa7d0b5079667341185862acb28725368281e62919f30eb36d43307d8924742483214ea16736d6dcef02c1a573e0e80ea89ed995aec1ef7b697ef911f1d95da5ba901bdd1dc16a159a60e342362a0ba666c7d65178b034cc6a9f5a8dda5e216fad6b506e6f495699a81328b02f9be7667de13bc0e9fc3b07815d76817dce928576c328ae824b2ec506d1450740ed3d34b94aa051c6a84750d8bf38e55a99fe2dca70582c4aa9256e864c768d212b05cf87c6067ffd567177a3c4a3a3110b51dd27adaa670de7333a42b83b85c4f879be6753a02624bf6e0d130f56b37d76e83a3eca57f98cb0aa8d8f59c9ff97ad78fe22b595296b5735843f7c7c0e34b6ff32dcd3c4881f5798669abd296a11d3565acbc33187f88c709cd25c749328629e5ca5fa403de5f88d148ea72391dca2fda51a2b809a09d892c3d95d880a7992e39b1bfcdaecc4f45313aaa7f95f7c41ac5c0fd2a80759d44d02d4d21abe8ab47894f11b404c8b5d449698c7d04128fc708ecc4c75d440daebdd38cc6f990b4c60d4ecaa6c4922d023532c18996be781554070193fcf55323b4fb9d2338c51d5445f12fc904243012b1c9e5e01d46b89e6f2081c64aab5a8fd14d328e09f9fde7c8485185419a44196905a6c256f6df6a632e20dfe69820e3042e5524c2b928eb58449bd087e217a329fd7d4d6e44a32c832a0e46c27737f81b6e762a2a5e8fa99c6b4430e5b23b255e4263cca2afc9d91a80c180aa0023a4e578e73724ee7b57cabaf87e279e22a2da55e4ff2c6dba5a92c09504d4d88c426225d630533b3fb33e0b36c67a8cd5cd313bd296097e5be7ea33601f1b52f4e70dbc6e2c673c8b45b4c9625db87b9d5a7910da62aa3d3188d90c2d97e4e52630b178735cbecaddcdba0c7dd1701a6dc472d3d86cfaeba940e36295268a62baa875d9455934d343f91d408b8f2fdca19cb69b37c3745c3738b4c58b08c9fa04858182465fec59b7acf9b888cb9014b5dbcde199e8d31151f44bc8c54d445d4e97300910c6237059f6c5aad77ce78d2d930f65f25b4108bcd1b0ea2ec1966c4a889e987c29b423b24ba707c1a7eaeb39d275dec17779e6c9c3a3950106f2e0f6fdcbf7c8fa929bec9b46c301fd543c01a40948e13d77562ae8af49a939e50c9996d5b2e66acf28b980841175c2472dcd3216cb5df4124d982f1747765cf21bba62c3b18a5a3471c96d9ffc09bdaa27154421d9ecdeeb2a11e5c5fdc7c9b537ddf34d59c0361fb03d8ccf52761852b8c76eb0894194d578fa3405f4cd9953f2e9bb03f62451768911db02f33d6093378fdbdc903598ebe9823317b15e6e56aaf375ae2b587d70e922e1ece9a1d684fc9cfa3b36e2a3a6d1aab958b78aa1e6c7609c0330c8c93a273ea203233156bdbcc7c669503210bd0ba9e03a9a18c41f64d783e21e4c9165a985265cb20ca196479f492e0b0345bb3a42a7521cc5aa85e022396f209bafa7b644b10e2b088f29fe2a49670599ba8d42dc4da62f6129537a83b20ec1117be75cf736be66d7174520f122752dcabe883e2ac71a9dcb29a616e28f3b68d9c5aee9f059d77c0522db456270ac82a46a0a0dabf5ac2114e5b9496049275a55309019b65f8fea4fdb410dad5bd77e1d9582ea4b8bb07b1a054d33fe5a18544be6c64da80d55f16853ec76df829f105eb0e5221d5baaf401f8ad16a2b254551389b5a1de815a1b714007549a0964d2868409910c1bee5edb1e150279258b5bf9828372213ae4f39c8f9e13f4614bc806f7c051d1821a2ab1752b6b98cd90be90cc9ea048deb3bd4c2bbb95a9c029ad5ab725d44ba951416e68f33a1b739e71b649ccd9899d0ff2339562057e0bb13c927422c50ff904252d7d921351f236e3f286b2088951a2828b0dca8fc981dbe182736c7882808dc90d5b9c905cf93b3d5f3354c50aa9c3b98c25d5089b7bb12852693b8197a94c021d57c2667eda19bc3fe06a130708e614c03e60cd1afb076b74b2da74979885707b6b70b2beb8b05d52e5fb0ff85cc4bc8717649d71140a3c4e7867f86d806aa08573d4dc3e4a2def44d1a4c102c2c0b7dc6d99cff5fbb7d90f57ec90a62e9c51ecbb7d4198d4f5cc13b60139e876a7a5096b9d94fb6f20d48f78515546ae5a2c34cdb78d68fa8a7000af66634506cb1c9704e146f369969b50d9bffab7368e9704930079b4acc0202ac2da867003b10009245d6f7d434326889a059d4d8f31030cf7719998675a25d9732437b64b9facfb421d8bfe9dd144f70eaaafebfab22b4afd3d5b5b8f8a499785214533c487d8092c3da2e6068a34cf425628a1768cab4a7b9f5a44c70ab3433bcaa50beb50b491f692d457a774a50d7d94a96082a2941d87ee21dec6251969858af9d486f3af9f1de3a49a4ae668217214f03d7c3df168decc934386270a1dd6d44d0e90959343e50d682d3f57837f922d7cdc04209e78201e9dd390e4ff50b961d5a80c6fdda3ffc6145a321cc153ceb201111328da645c884153f21bb8d216e519f538019c605cf60d436e01f14b7004eebf4cec80752ca2227099ffd0ac70c9cac142ec16a4d8fe2045b8f8e3c020b4e5bd6828888b4619c281264af227c04260dcc406a44a07f08d1821a71c0342a0f33b179bb70f46bbee174dbbe9450a250fe0ccf2819be739e450f5eff918aadaaddf34eb4400e63b9a856fde5c1201545d618847f2e576051ca86800b73c8083d52b8b2d3013c4d7840c516bb5aa0ea9a5950021dfc2bb3578ae1ffd7c8e2f53393ddb9ca218b275bfc142bde0aa9ac98d637505be04969e02284d503cf60114cf9b19d293030af16bbbcbc5e59e1098f98961f644365398b2ad6ee316566cc9c3f7bd92ef6079b781dd01585b5ed2eaef20a107e93c5351e2846ef3b444513cb7a94aea6c666807d1a751f88c4d942c7be0e4d04396165415470dfc35d499fe1943d2846631997e0bac444bdcc76e0d894ddd25edc3f71b83f239db53e93dfa7f1ef0ca572b711dc09898f14bfa5d03f9d01c9245e38bbd1a61e3e46767057765413965b097fc1b11f60569081f8ba91da18d72956761af47eb5070c27535a2c95b35bdd47d9783bffe418a93534a389cea31faebba7b1dc5b63e903a3edfa1027f58487695a7a283c30db94f034409eba9e88925254ba73f49ce4851fbbf4a53807853376f91f0be28d90f978ca65d9415ec5f5a1612c0018a2ef5a2b16430f5276093a479372dea5053a136dcc69bfb59fd311633117885c59bdfc42274c804e616e20cbe78a869dadc9f558c4fdd325ac1babe44382cd909b1084ee529f22fdc2771b4e24ebe0ceddc5fb8d81305782c1b49a082052e6817f07c0f88602454be850bbcdf8c4026bb5cdb6fa7ed7407894c20c8f1025e17086cd96355a9223db8c33b7567f77bbcf3d6470cdfdf5e19982f894ce3c401a0f2bae12a336f9c296080b402ad94affef622ded2248e1598721eccb717d8071eb726a11381d412fd7cd8a8fa802d7b1f2fe2e023aa022a05da7d9e556245014a44420741f79aeaf0636476e42ed8aa1741ca8f518c09bebce336fd62a27134cad1d766a90af09df7c64a2424ec38d53aff97f80995ae4ec14769d7db99d1cc02a85cd88a4a69f5533b5f72d45d322e96102bfad67008c6671f9887c6620534017ae552487278d597d923e2fcc8de32049e0b529e9849493eaa714dbffe3dd65d0f628e30290e4ecc022e07e35304bdb6c7b304d6c08ab21baa0b06699fb447cb210b0b89bd306da0c3b404e67b3933cb11a92e05d582c97102243f3486bb8237040424ee455ad61838144e9cb7cb982304190049506768841201f3cd76e8ff3fd14686292d5a55563869f60b05de06bfde8be592387ecf4585f840e0285c88e0347ea71711aeeb23c33271e5274f430211a94ed4a46529612c7d79b900c3347b15ebfa1207dcd52333e396d670fa5ba691b4b1baa14eaf6bebe4f00434d8b60a7132bbdbe1f4ce48064b96b0352db255742f63d432a00773aab9441d5e5ce646a79aa0ec1cd96863730ee139cdb9efef03165dfa67886a456515d19afa735b4df66c27dcab152f1d91c885177b98b1f9c8ead73e84dce4b5c67a5630c614aa1d41805da4053a6eac38d64de69a9b5c26c06a29aa2f079cabe18af1594a9cf0d927422429418603e93182e2a3e1cb160e4dbb53628b8ce734909c140b8460b3ba44c9f2a8cae487d3b780f404962884239438fb87f38d1690663105d7bc2a65d44bd04cbdd503b6f2564023b96d97167879b76a31cd825d57725e3d3b0255f00c0f7ec8e874ecd1fae99613bf975006f8771df8d167957a6c6b5a382decd4187e60677b483d32e1fefa6bfd697e74114a3041953eb0c9847776bb588d483d578d2f60c5a5bb625e9600b2346bdd0bd951a7427c6884cff422a0d790229ef85427dfe59f9dcd6b56b16064b5258c4ea5cf0c29449522a2092161be8f63babf06ed7193626b90dfd68e565eb677f60c1d08e525cd2858bbfbcc63329224076cd3265297c7e86bb45ed533622fd44b7f82dbbd0bf7f98f2b53e642e019e0a4db6171161a03cc3c212c6635ca63ca9d95a0753f738247c999be8b087bf786ebcb06203c32e48ff3e2a6a0987794d58b266717b9356668ff97a644edf43c4c75d0a1d60e32464a12da07104884d9ce4dfc75802eb8873fdeb1320c94349bdce3fd5c985ea0424b70d048aebcf6d0883743135ef788c03c1b6cac4cc100deb757f8633fc4aa8561a490c03393b82ae995e28069f488d341a102a5b763a10ca64fdfaae7ff3444087fd55a4d0c80d104da7e9c312ac2e21008bc024c4f413652a8d77973de56bc62bcc2baac3ec482aebfa62eb93e36fc628f3420a594edfc144ad2a499759ea6816ca67cf302fcc2ea966a44df4052983752d73c71f560b5a59593d94021893ffae7f8daa3e18048663bf6c92795f8acdfd45f059e8f4dcf6afb7f6d47df194b1975a511e885e8a7ff8e21887413b08d98bb05f10c6379189085686527df83178c71e3a0f277f1b75c61274c534d0ba0d296a4da8ea5cd681a292ac20a6fc959bb950eb8e471fb65c5e62bea25f01fb460710d2682979c2b5c7239ccb6a108aa5d0083ac3b10c4d3764f19e05123794b45218c91c99e41a25ef6febbd82bf93c0fabba2e75137b7f98a9183866ad66690da5a633c19fd0602f4be1128fd281bc8be8acdacbff8643de58c7c6b3b580ee079110c2dfc82c6f37c0028b3994442a829e96b7aba46d75b2db5225b60755af25aa425f6d98ab11958132d0ae52ad270fa73a26f7d9800e1627a2b0bf44df8f83de4de5017dbd1a6c95ebbcc5165a1630b07d444a6c472adc06f32bb98c355cd2d89f54ba954d85c132c6b354dde35cb96bff0384cf2d87df3fdd2d1012d6168279685a26672c25b0cda261802c45f37ee88aba1176c313156533bfe255ea844cb7b99dd0b880b670506e009a64906213d82995d400f00a2a507d915176d34c511a6eb1fca32008ad8a64c712b719dcac969079fa7a51f7f0739d2c8485d0e617c3408c83862c3408c8a61539bd4ebbca5bf6748dfb55adf4d0bdd115c87f59df45c9daacbf34d58814073ca1056faf2aa4d87aa51b188dc1ca573cb61f03783ebeb5a650e7cabede60a0940e5102202aa13e2be22793f081fa8dec7fca9686532bfae4de7dc0d9413562d617fafff97b4d7b3338e7d3d20324cfa2d4a8cf92d878530e0057825f752a87ed8e50c1692b9608743bb9b7ed2409df9a100a3bcc6507189719b930c4d4053cb9003a22e429a765dc1c7d0e75a82e411a53e0e2663e1e87e9a0762edff32a3544e5ee09ab7be86a7d209fb382e1675c2dc1f14a66a0146c81ba380126aa62751ee364bc26dbc8c917bb42eb3eecc56658d8415c5d31929b8080d2699db9b66b5b1a6e0a4403e7958244fc0abf17a031dae4ac83009495655487e08afe0d208461b93ea6025930645a4850b7648fbbc0fe1d0f7a609dc91aee49dbce81349fe683bb079379d6f149b1a4d020c83029e8784660b3970eea4900330fcf0c30f3ffcf0c30f3ffcf0eb5c436406f28970a52c218f1fba1c6bd64da6dc242b45b0d0b88285c6c584c6c58466399659026c0b0a0b4d0b4b4721e69c9b7f7dcf23ec41d2c8612f788cb06a6a108fea2a72bc9c226ce291d351980e11b69c3fb4baca9523eb3843583ad4226f873af2715e087b1cc5b2907ba247e9fe202c1eef2419cf3142943c10969adfb83a29a730d97fb05d9aad7451424206dd075b7fc7e778632793ce7bb0497d7658fe28cd95f36099880e439d67077b70dddbf1075a71691d6ceb396d8eba03ddd06172b0c7e4d2f44d9fc90d0ed6b421d1c7e4bec15215e531858cf2d92c05ef45a90dd609a952a450760df6f82775f88e3f79be69b0af7e4ad39d3a1ec5335863844aa2b59a0cd60fd35aa54b6b0c96be1c7e3d223666ad0a8335d2fd479639c74f89be621909f6717af45763a92bd6cd31b6516fc512cec31cf3e861624859b1a7f1f0f14a5dfc5c57b1cae55026f3b9b639556c215d071753aaa81c96a9d83e92282a961c72e4952284a7d8838fecf3dd874711a129d6c99127ed8d49daa7147b8adcec071dc44dfe9162b55afdb850f589f446b157472a9f7334719277a258fb2fce464c631fc62e14db8579607e1b264d99098a35479a453ebff0b43eb145b0b29b119118d37962e9fd549d530ee422a7134b250d19ccf3ea79142736d1ca5966f933780edbc43e5f3916a355ca1cae896d7df332dc26137b25fdd091674c6cfbe18a74a4c6b4e225f6b00f82758458a2a81f07b9125b4c513dc79fa6c45a9742cc271bb5c4ac496c7dc1262ac7a79d4712471e74a4c1aa42fe1c181f06c9482c293ece2c8510173b2621b168e6388eff54924efd88752ee27b2a75c49a423555274f1bb1eee75d20fd0b9211fb775839d1d183856c115bd24e21849ce1327a9022b63fcd091deea74a3511db57e71e3f319fc981218617afc591091802558044c4fa1fd63b4e9a1e37eb43ace9bfa4632d3d079562884cc2a77c21a5104bb0984c62aa9c92664688a537e4b4f6738a93500e62dfdab92f9f1039fc8f20d65ab50c9ed18147f91388b503bf4e71320e882da398a58d78d91de47f5872fa9c424e566f5d8c1fb698181ad303df99cff4618fa2454c8fae91a8361fd69ca3b92fbbc310d1dec3da311d48450eddf2683dac1d748f07f1c33ce1e33cecbd676a1b3b5aca11c6c3b6a21d45867d3419d73b2c612caf4207d59f64b5c3eaa593659dd66189ab18f9d414b2534a876d32634e827755c8cc6189e39d93ff0769cd9272e833e438ba10c9386c17d224ad88d4ee1fe1b079ba0eff5773deb0e51c839c75fd0715826e58d23b9645acb4e3f9d286d552b09ca8b5b061cb0839ace5c6c7fae01abccd114f3feca861cbd08176aced340f571af6a8a3d90b9fced7278586bd342ce33fea0c4ba7658c6e4c912f35c33659419288567cb0cab07ce7659a4444866db23f4a5ebc7021c7b087c4eb0edfc5b08797a2e49839cc194edb026905ad8509c6f0f7c422c3b0e707d2c1d9471f5f8ae1a20b4c4082610b3974ca15abd66bf92fac5333119277fdf2ae5ed87f2b45e6cd71a03aa92e2c696e3fac895f1e7d5c5843ce74da15cb3f3c8e830a6de41616097597aba390f2d7a385645372b2b0872065169aae42758f8525a7456d7994edb8ce2bacc173de45f3cb7ba16285c526075f1596a9c9d739429e181a2a6cb151edb6ef3455b4720a5ba60fc1aa62450a7befd7d774746920a3b0a4a491f47127d50f3314d6187210cb11953e22f98425ab2fe35d854e58ce8347aabd1dc4cb214d58ba36a73a73d4bd954a26aca5f134f7263a48914de001b9049a514e2a812461cdf19775a558a29f3f90c08016e4118c4033b2085b88f32571b3a19e2611d6fc21da77ec2887b0e7ebc831a5536d62ead82285506674914148205805f207e9833de84823c9738e9839660bcc8204607c918082058033640f96f0fb39acf9f0e252ce16589f481e1030e40e4a491d640e961c5d68bced30e648321cece16159993be579031ea40d589035a0c1b29a2ee5203eead887d9022d67b0051b49b1938c62bc0564b06ce478c8c61c6307692ec010c38bc78c819e3e6e0e2e509030d8438a9bd627eff6661e0509c657e12bd61c3742a84f44f91841576c3167f29b709f566ca211c224e70e2bb61c044fd11d33ccf966158bc464693ad88d2af620c252a3cc52ce31a762f5ed38879943d19a2b51b187ba1d76fd7d8a25cfe3ddff50fba52956b93eb90e31485a0a4bb18407521d87a3a51615526cb12c6eee8f75e8c88dc27cb3296ace9488628f530809c5b67696e4830e9a571128f694ef1c84de1cf8894dab42e2c494e66072d013fbe710e3c79b2f54a71f3bb14dda1e53b5f0602c444eac221f55827d14f35359c828c177b18511830f50010840204bbbc04dec696b7963dac760baf9036a620b1e7d860af1a3c84905e3cf19e3009809743f8f6fd968022d0a06888925523a4e64c88741eac3f842b9f0620c0fe025d6aafb90afa73cc61862892dd473f0e1865c590356820973be95833229b1252dc9e10759a93bbe8e16074e620fa4c36b53508f27c77c40496c26935368ae642490f320c60e08892db5367f182a8779d2e6117bce58cc4ff58c5539e6808ed87c83471f578e520e1ff3c5b9011bb1cc6a64448b716abfa10332628ddb95278654cad170114be664879f267e7436c50115b1ff0499f45159f5e7600966cc58c1f937079d0113b1d6e52b9548fe0a548c314c20c6181240c41235af7feed0fca375e021164feb4e99f21862c9f868f7e3aa85c82b42f8200699105b86983f246c3688f6a33859a1a31041ac3ffd1d18883d7a1c530e6326e750ed1588e1c5185f1cc0bbe0628b2c66cc40406c92b12bedfdcdd9f57fd826825efe20c594dab81f56cdfcb7a7b7f6614fb99fc851a4429a0a1f16891d7fe5c871b8876d534c31b292245c46a887cd73f83d9dff3cec9d2924c52c8e873d346a38adafecb09b3b6cc973967a08f6bbd1b6c3ba1ffaf9e5d8d0bd0e7bec4c4892afd061b9abcd91c5fec0396c19520ee1822f874dc67b7357558e42c5c4610f3ff070279769a3a6e1b0e7a7d1d4f041d3c3e50dabca05cf89655ad176c312134273c8a16cdadbb0a904f38e0e65b31536ec1dd96aae911cae612b2f8b9427e589fed412500ddb07b61fee74b4294799858c430232b2907144404616320e08c8c842c6f1001959c8381c20230b194703646421e360808c093c40c61d300d5b06bd8c5cfa7b4148045e70b1c505c0f8096403100d59a76564ceb06879a03908c9347a2ad10c7e1cdf359172d160fc0466cc9831e320306019b68ab61d770ea3a73606e349f005184c40326cfff963c8d3ce71e71ec376f7e144ce477da6171b500c7bee904246263569c78461999f309e6cfdacb2920604c3b23ef972dda7b39071812f2c13d5a3b6366d0e245307f4c2366977277c6e525db00b8b577574f1f12707e4c21e22739c1235fe07cbbe045c5c000db8852da6d13062a5d1c25a9796c253ea300b5b8c77aef42571d1732016f65499772aba8001be80572899a49d59cc7bf10595a315ec30a65c479d37ed4819810e689101acc29e2bfde720e3878e262fc18bc1801530186018c0005d74c125b040175d7009c2b00252618deb1ca51dff7f993685f52264ec68a774fa43a4b07a14f3c5481dcf7ce78880ff10300aeb7924ab4e5d6d8174820f430b302c700800a1a09dc71c7a5c2aab0b181f06f931ba6014dcf1047cc29abef2a68dccd136304cc0268cd7420c2e01185f9c24303e0c320074c25eb9a30a223b76dd35618fdb31aed2e720cc4c58628da5fe389eec902d61d991908aca389121256c9e334225e50d1e3c4e12b6fdb8f2e7c8631e4924acda3db3aae31f61f1e0614aa9e88db05d746d07123e8e31a7085bc4cdc648958d6927c216634de26e3a44cd109658912bc93ac8196121ac23972af8584ad80461c939acc83c71202c3b1d6c46fc077bd888d6e420ee832d2f2b6624472ef3f01eec33e16656f6535ece833578580f53d51153ef60ef4e12957258077b74bd2953d4bf10e61cec7391638d88a7d58bc1c11216f433588ab9c1661fc4eb3ac799e3191b2c161f9bbbc2f847b906dbffa5cd71c734d8c3a6f4d839bab3e60cf649c9cfab2632583fe48fba5feb71fd22cc478ca361cb1952f4f0d3e3ccfc0c9b7fda94473f94b3d30c4b0a923c8c079661ffcb1c9d77731cc70b19b6e8dc18164f6ae1eb432f27450c5b5c0ad7b1271ed2615842ccf129c739f1830b0c84e091369d8717df85165b88c1450ade290103f8c2fa57e1fb6b21191750c08c1962188017d64d5239a8c87761efd0f08b9a1ce7bc71610b973b84f4b6853d8e7268c6569a9dc9d102fd31de9f85253b7e183a061f0b9b86071aa36df028f72bacc12ae2757cc71f99565867628e72746115b69cfb7fd25d9c0a6b8f89798ed914b6f1f439441ef9a091c262f6972ef78ca8e4f028ec1f07c92fc4cfbc1e070adb67c890b156cd34fe84d2544253c8619cb0aa5f4d5883064f5b1dc7847dcd37724f727a8498252cfe79fe3caf84fd53dcdc39ea49d8b3e3cd5131e2c4942061d58ee3cd31c3fc24a48fb06dad6850ef68236c1564a23af8142bec5c843df8ccb1a391301196b4d5d10353598fbc21ec81c9ad7cec1c8d2e8425e7f41f6a9294252b084b76575f271393cea1405843ef4e4a39458eeef3833dfeea3cc961e4a8e23e5836a3068f74d3834d7ecac2dc8607cbe4c9ce21f35a757407cbc7f92b6fc59cba52077b50d1bc0e7299834535efde462c71b0c4f86867a7b973f40df6eaf893fb439b8eb60d96ca5c1fc43a072107d7600dabf551697744c7d160cb61675ac90f1cc00c164fd131a9895508993200196c9bcee33a66b4bc5819400cf638a4f53869fcd77c9401c0608d7f1b1f3f0a4173e0bd624913462ce3e55cb185eacebc9c1ec27fd78a7d3b0c7b399cedcd3d2bb634b9b29ab01c6c6fab58827fcaa9d79f3bc74d158b944a5c86742c9b2d155b05e938d412156b7f9003d1933449473bc5baf13f881c07f11c7c9829b68f78a31bdeb1ee52acd6399245f0be709362cbc91193abd4a33ca35853e6b0f34f0e11c5e2f5614a5b8b93c627a158662726a0d872605719b996a3b8914faca1466f7330112327c4134b84ee8fc443f99409e9c41e2e87172729455a4e7162cbb2f035cf61466f6a13ebc741ac897dca53a7633c941c66620fed24c799c73b7d294c2c56e1e34c4a5be1bbbac4129ac29787dcd65d6589b573d49459fe2864a82ab19f7f56328b92b63f44892debe349b916b5328526b1ea65ffe492d84325e768637665dd9158c35e1eff194fd913127b66bea90ed5f2081fb1ed5e90d29c39629fbd14334e4c75ba119b070bab11428c4d1523d6499b716b3136c617b1e538857a24d3d01d9435108022f60e524cf93ad8510b3189d8fca2fce2c4c4f564ab0010b16d0e76123ce48717f28c192d10c02136db903aebda0f6236a9020118628d963485e44e58a57c21f69395982399ae281d43886dc25a2a958e73626610f76dec9b2f0f17c4321f731d52340bcf9940ec1d9d87492819105b07a924ec32e6bf94fe61f5dbea789f493fec65198276501a3169b00fab7adecbeeae685b163eac5f31a7c4b84ccb7c0feb65747a6025567cc6f8581eb6c951163fdc9422c6e061abecc85db31ca245c91dd650d18195e458e235d941b18f63795da50edb65b29462e68c1bbb03022e10c01da7f22877f4f13c87a53c1c4fb5996ff34327108109882100396c39ad5ffae0c30c98314305ef5e70f18500e2b044f747752629425ad03c0aac56c06080c1890101c061b9d8313f9b090278c3d641f5c78c19070c14cc9871c0400151ba2b30c2c02408c00d6b570a17736c47de7f1b961ce6c8038b1ee68e3c1b96f041c8e689930ef91ad6101b63d8acb30bb71ab6d9e0715826f739b44f1a9614d1f821848cd4e941c37f912c58ccf00c7b18645266e40cfbef986195b4fcea5f8f7c73cab067cd66e51c8fc3cec9b0c4ed124f397a0c6bd8dec41bcd896193089d4e667d18960f6ab5ea2ee74ba107c3f6a14143854a9eb37f61bdd98d1e4cc4bdb046f170e6b7ce6f52de85a5833431d74dce85b567224749b5df41660b6bd0fc9fb594c306590bab55ac7ea684bd2a0bcb079664b2e30dc99158d8a3ff5c521e7ee40fafb07eecf13ddfb4aab1c2de3907ef341d8716d394c71b3b88a1c2e61524d57c3d856562f28eaa92ef422c8565533ccdfaec286cfad144861412a5c486c2beb1f9abf71f8791d24fd8731c27699cff4d17d24e582552ce95297513d6a415528ed6414cf34c5827d35f8abe70f14397b0c9979a278f3b8eb354c25e9fe3650adfb83a096bf84d739a27785a092361f3c8266ff6c8afe7087b54235715f7a96623ec29796a4a9d2fc2a62679c45394087b5c69317628da61a53a84bd2463e43eadc715aa1036ddfca013f40cc2fadfb9fb21791c974e202c723299a7d4fcc19ebb77436ae44c6de983d57310c93a3c45ae077bb04f8c49ec24c710e3411e2c976378ca19c61d6c39f2183ff29a0d36a20e36ef38c819c9b71de673b0dcc48deb71ec4eca71b0c61c7731a4fc068bc7c5077515d23bc6069b072f9f8f526a2a5d83cdac24e598310d164d1fa96f8467b0ae49ceb79e72c65d06eb67e6e8436ddccc5162b0ad7f181ffd6ea5050083cde2f4c6c324a71679c59627e5b8a123a9835db1841824e5b8f6528a555ab1741c7d41f4c38abde47350a7af62fbcf7170b3be2af638c2e4e883f138477d2a16fd60e63732a8d8344a794e3975cdcfa7d857f5637786bed08b29d6dc673b1727e8e8558a3da687db6993631b3a526c3978a6a9a8db2888beba1ed37313c5921fa7f9e82196586ca1d8c3d5c4a89efa418a1350ec1366d111c3e4134bdf9eff6748ec49124f2c1de3346988966b2ea4137b8e329c7d1055173a2796fc4e3947f14d2c1743ba1c129a620a6b628bc9c3588d5fbe1dac4c2c29cfc5a829ebca2a8589ef37475e62ad4d09731de766b2b2c4ea71488f7b693a5ea82ab146d9e5ffbee9f81c45893da3445ff30c26999fc4961d75f89cd2ae6397c42a25a922469922b147c96ee256694c97429058a2e847c858518b8d1eb1c749d56fe2a438629b10431cbd14632e4f23b63f534b95f3c7ec3823968ec31c741ca4643ff145ac21688c22962092ea530ae13ed824623f8f2173381f769f8c08444e728e637d88fde3cdef8c1cd3e234c4b29a27842ba9106a6546def015422c39ccb19066ff51cc20f6907e366e7882d8d345d03e03b125ed28f44caafa900162d5f42169f2cac6183afeb0688ed8c1cb7663aeec87356f481d5c2c9d1a4bc640fbb0ac84d4f9d3a27fdf38c609fe0e20e3020ff01b438601b6503eac225b16e31161cffb316a0f5b4d0ca9c848eb619df5e8613ae830e9a479d8ecba74ae838a15aec4c37ee137268b3bde61cd271f8e75e839662c7658d57349f575c71c075f1db68e4c53cc18727458b752756fef8477fc1cd68fd1c3ead5981cd6923cd551c38752b1c5614b2d8b21560c1cf6d0ff3cca71255d0e91376c61727d0c2162cc1b2375c3962387f8f2603e9c9443dbb0844eb1c962940d5b9ecddbbe98af61f1c833fa4dd9f9e7b41a96f1283b87e1723899731a160f7b32ce68589e8da221047a863d54e4e0dba13672aa66d85432c772b2a87d199661bfa99042a53bfff50b19b6bc1d634866650c4be7eeca8a657952d2c4b026dff4fdc042694721d81a86355aded2fc38ba38cd01c376936278854ebeb0a8c78fa26e675ea817f6b28f9277bef1602ad3852d6784902355a7c4c77161f1d8d01193260b751d650b84ca68333fde716947163366a840b5b0da4fc598998dfadfc94227a92c89e7ee6061d9f4b531d8ca5768e70a6b65072a3693e6fbc3adb04e9ec8a7b7ba16f6acc21e99f6786fa74a1d5ca8b075342fdbac8f3407cb14f6304672a394c2a29ef3ae7f564f874561edfde83c55d947263928ec9f03b59b8fd427ae27ac9de3b832f5468d2439619bde083a1a4f6f725013b6d39834cd859eb0fba14c58d2a453c8cc44909c1d5dc2621d47ef8e591e595e09e6268f4ec292c3931c7efc09398e2221cac7e5ac1188fdd3cb43b01cb5010d406c1e67f28f1bad6e633c86b91d68fc61eb1821c69449defc4b1f65030d3fecd167cc1dddcb0f3f670ba41568a981461f164d11835cc71c13291f569d9d5cfa71e4bd720f5b8e47b58bcf1d3ba6873d2ec7b91f2352e5eaf3b0495c0f6a39060f66ae8f1eebcd1d36b12a4fd1c37057a71d96fa106344f0ba0e4b18d3f1e82ba4c3e6235276394ae1434f99c33296fca6ce925e8a9d1cd68fb2936308fa65f28c19add088c3966248ea51bc58269e9a31630332b2900101195958e03f01fe62bc08c0e00bcc98110a0d38acf9a7375cacc68f2ace801933eca0f1862d6650afcc481799421b1a6ed83784caa12ff7a7ba52a30d5bda4d9993c644579474d060c392f42e8748473d96c60b68ac61f3cf11b16591710105140d35ec653175d81329bc3b481a36ff5c95c9631a685847c64285d03041e30cebecf867ae7fe41634ccb00739f8cf4cf9faa34b2c689461934d4d8957692d6890618d1c078fd7f3e7f78a6358bd2c6aaed039aea02186d553a6a4325609814618965416425fe739f348a360d883db49256791fbbea390a0f18575336ce78ede796151dbfffbbaf20f163b824617f6c0d4c3e87190c30efd08830ba3825f800617f63082c6cce13379e091c616d6afb49199377ce207770943430b6eccc9e6422e1e80ad9105d3c0c2f6512c8858d09455d21648639408f80085c408838b2e4ce30aebefa5a66754935a8f165e7ca1c50a6b47ed0efd7d9ad711d2a8c21ee747b1f219ca42830aeb7f3cb3a153928a1f03028d29ec7198e7727d385d295ea4b08ac796dca7942834a2b07624b38f8a8bf3410a14364d3186f550e9a236e62b7807588052a1f184cd34a58e277894812f2e6094010c1ca160c68c30e6a0e184358ef49afec78c51c2262cb231248d351626aceaf541d20f1923486c095b108fcb37a4bad2e82861c957f239e5fc27e1f02ecca785e82361cff18d4a788a4796e3232c1fe28ee7d3d308dbecce8729ca4d8c0e16619358e6d16dbc1061b509933b8fc50bf30d618991e9c8899810360f25ca258f9020ac13e557439de499a40184c503d194932c44e307fb07ede9a842740d1a3ed882e45023bc8369d0e8010a3478b0f7a7c56aec8f2426860ade8b2d0117dc4516336680d1048d1decc9d2850f6cbd2fba2283860eb618e19b53ecf420bcd3c8c192fe5767636a38d86ab4422cc444e3065bec98820762411bacd1274487f27127bd4a0df6a821e61c2a6e6184a152d0a0c1b6a5c1f2fdacc5e81d1a335873c5ae5edc45065b45579c9d8d55f43862b0effed946a7ed20f1274403067bae28f1ee3a0ef14d1182c52b168dbdd4cfe95db1a5eea011391ecde7f156ec917710aae293c977082bd650bb9e67373bc6cf57b1cc86fcff1ccf84495a15fbcc6e9da410d31d5d2af648ff63fafc0e2ab690c1cceb3f0a17c37e8af53a2aeb8e3b630216a6d84aaf2b589e709737048b526c3f91e1939d4c4c9f24c51ec285e8d5e55a0a962960318abdc287b19383dd4b7e41010b5160118a25664c2c075f992644c1800528d6d8d8ec2033e66039129d80c52796948f1fa51b316fd6e8892d6a588ea4f44808587462df4f998dcb6731c37aff2202fe58c082139b9f4c8afe97d2042c36b17a5812fa73546b399066cc2862c042137b14bf296cccb7b793a215062c32b1c79122dc44850bcd172a2c30b16c99a9780761b262a70132b290c10019592860b508585c62f1d421875c7e1b438a310216962072772421e519dd2b229df7a13985ea0958546293fb891e4a6db22b64055850620bfde039c8f491584e1680c524968bd1372f2a16701106291692584abcfa23ab09571bbbc00364acc03c18e6c308011691d83f7dae657a303131b4d00f600189bd373f5f07175644b247ac517e279d8ac793f071002c1cb17dcce9e157176d35dec0a211fbe4947b2e87c8f3e361c45e1ad12be5f58b58838761b61d43ee20c415b1e5c63093266a22f6edb0f394a52b9f1c43c4361f9799d1b757d28758d2786884a5f50e910cb18f6cb41caf09db710e2c0ab19fde7e08b1fd4f5a740e258711fb41ec9727cc4588da8db420968fdacd0e9a8259ae03b1781c462f9db41b363940ec69d3f8a8e638957dd41f16ddfcb30949c2c20fcb4fb028213adecf17eac392a92e3dbc53ba0fc3873dd303891f8592fa750f7b941dff798e5311530f8b8d460e96c3234499876d2a780e89196d7bc4c3beab71c33cf53f5ceeb087d97592f0d9611f8f1d334926c4cad5614fdb239a7c72e8b07990e5bd6921424cce1c560f134b1b8f2726ebc8619594f1386ce9576398ca3d3b3b1c160f22774c8ab3d1e137ac1b9a69bd4a376c21c7f497420c96e1b5618fa32092f3bf99e3c6867d3354c5e7d0af618dca397f901c356c6a3eb529ca8a769e86f5d72393f0b952538e86ad43ce04d58894337c863da85d0e6793678aa819961842149fe07919b6fcf318827598989d9361b1b3a4353db91b361fc312f77ff1e2d283682e863dc6aa90835cdf399e7818c80e51163a983818f6ae8860353f6621ffc2162bc9c7c90f3cee182fec7353692c3f4cc5a60b5b7fccb9d3f6ba729a0b4b871b376f92589bd25b58625ca685e5e3fc4d865825299c853dcde87ca54ec498c4c2963e67c8390aafb0e6a8d3174db3c2763667c93cabc21e86f249a1623eba88a1c276937c42ae388525c587e6417452584d3f484761f5bdbc6133d450d82be46aae8ed971759eb06e8e8e3af3477137e38435c533cb81440df7914d583b3a8c98a31c138838e52978fc12d6d81d528ea28455c35fb0c8cce581495852be13b3134f96832061cbbd52ff741d61a9538bf0383646583ac7fcadd31461935d0b619b4284b5c388a5562c95b40c61df941a62b885b0774c22c1e356c75c0561cfd79102618f3ff79d3bf407cbdc48aa105364ce393e584ca443ed8b66dd717ab0f46c8485fc79b0c60faf909fe32a8bd9c11e6dc7d19977c5ef5a075bdc4f0e2bcf1cac7b1f733a91e82165e260df8e953e4c61437398375843861c87f753da604f2d8b173cbce0e79135583ece217d8e1e64c80e0dd61cc5edbce828feec33d80309b9701eca605bb39c6e6b2def9731d87f34779407b180c15e67137d6bbb7ade2bb60e998fc3377ead045db1c55a15cbf1795dfcb46299d114738e1956ac7fb1551fe655ecb931b59bfaa969aa620913e24398f590622e159b7e94e30e526a3607154b7acceb69538ce720a7d8c63446c8dc799354a6583f35e8ec7abc8f538a653be6accda4582e997efa91ca28960f3d5c55f48862eb09d12a6afffc1f8a6d56255cce983c9f836299ded09332fd4a0c9d73182aea892567ec950a6727f6fe388cfe94e33871581d5612f5cf26b68efa95928ebee9d7c4e2a983134f152f699e09d7f63299e48a89bd364fa42395cfe14b6c33e6699263ca776989cd3a67e66438cd984a2cb9659bf9c4f62a4889f5e27c9c7397fdea65126bc5f441e7494a620d93693458c822b165cc1bc929912e7d1824b610361eb23a8fd8527954a7337251bf2396b85e99bcbe119b5508665de1ee629c115bee20f7c4f6a4a87c11abe6f0b9f6d298e6ac8875b227d349bcf9901341cccdbdeb1545c41a3d131d79b26ac143eca1679bf31d31c4a63131854bc1c31463a4106bcc7d745153543b8d1062a9f830d67f0c62eb38a9734a48a94811416cb74192a5568ae97390406ce96388ec30d7a31f40ac231336450e3c363e7f582fa55638eb3094ec7ed84334d198f9308d721f96ee8d8f43d3bdaf900ffbfa576df0b83d6c1f73f8b8133543bcf4b095c7293a4c511ef66865e5247f141e168f131d8d798ec43cea0e6b4c4c139376ecb06f081662c8514893781db6959c37071ea7118fa1c3922b688c9a33873526c94de136e49ec861fb8a8ff821f9a4abe3b0d6e4d0e39164992e0c876562358fad9a6555deb0a4e8f5d499b54e3937ec211ead4f6fd4863688a790ff43880d6b68c7d158da9d47115ac316f2ec8739ff93dfab61f909f97b3ae787d2a7610fee73439801a613eb766987a9f950a166966183137b10d683b8d77147d8d8c4be1339f08e2c9426cb69620b212f44a7fef8831c26137ba793d037f9714c298489c57378d751542f6133302d41b751899b611b94584662e76905fd9c43899368bd33a978cace081b92d8c225f58f9c446295b46553b963befcd3f5600312cb07bd713dd83d1fb1c7ce5134ef9cf37bf71b6c3862bdbc9bd6c1628d5854f5322f533347f001b1c1883d966a4a5e6931e758fbb0b188bd2f476ab1213fd89e54c0109091850c30be046384e1c517592499c38622b68b71a3dcc79936bc4fc41ae2aac867d4929043b6b0810823c9c7daa49b3ccc0b39c416443c2a9dcad10d436c3948fef7740e2c6c14624b15a7432cb37348dd11c224631da715ada4166438d818c41a42679e8ec7eea3a89cb02188f5c3c8e4933c3e4e4f20b011883decf43fdb51b805fe31e2820d402ca7279632efed59ea0fdb55ba19cb411e8d0f4d8c0d3fecf16148d1ba37cfc7210f7803c1461ff6346adab1f2aa781e37f8b0e7e8eeaae3ace07021c6175e6881822a3036f6e0810d3d2c294687e4a1f0b0584cd97f1ebf71873da6ebdce1a76f879ae15ebc05ce461d36ab0fb599a338f9a174d83b78a4987e1ece99660e7bfc1d42b84fbd3491da02e90f136cc861add0cb9238a93036e24033e0403336de601b6ea01921d868c3625b3739ea4dca4fbf05527ab1c18625e61c7e758a4b9bb6952cb208e30b1b6bd883eb0fcd3104cd1f294341ed861af66854e27f4e280d6b6645fde441b5055241c3ead1669c89fe85185a84f17fb470e723c1c619568d611e278721c156535b6c98a1011b6530a64f111fce23c3de1daac652f0ac008c0b8861630cfb072be3164825302ad0420cfb86babaff302a828d30ecd39543959019260786bd83b2bcfcca71e4c816230ce3e27021c61711205dd8f8c27a9627495600c68f41811933c80b1b5e5873d81d93ee9c785c7161a30b7ba41ae3868df93f6c70610fa253c73016e34e2c5b209940059f61d8d802291b5a40a3c046164a2945bf90738e63030beb871c644353a650a3b12bd0171b56a01925d8a8828d60830ae550252456547a6449b436a6405d6c4861b3cbefe4932c8da9650ba4f7e28b286c177a62949ea804460526f8020c04cc9811861636a0501b4f58d347cea57dbd4192c705369cb04e8ad5a5e16148d868c296afa29566cd564efa0ac4d860c222a69937369289aeb4b1842563fed8a159aa9e046143095bf46efa5588c492580a1b4920d867498c8ed1f0133690404e865ee44864256c1ce13048f038329e840d2330d71f448dc8b8800250f015983103050f4614368a40333688b07af81c3e79e96fd86563087b9a903c4c697542768e10b6fe9073e7382608aba60f29e63f2cc94058d2bc2e5f52ad0ac1f383c5bee30effeef245ed832d26fde8d9316ab0b8077b4a1fa7b896153d1a9f07fb7e65c6c5e4b0ecb3833d77f0288789ba0e96350bb55019cfc1a21a3ba6413c4727390eb6b50d9644aca38fec1b6c29c69c62a46683b542a747162d653652832db2a295e4a093ff656870a88eb3b9e39fc15e9982eef832d82be715ef7c116b9331583666e4fc39e289e7e80d18ec95f3693929bf62cd1fa7f5fc9cef0ab22bf6f1cdbe98a3bc6b1db7629d989efdd9b3624921859cd2630ef96156b16d9eb8a103c9eb6158158754b64123273515fb44dd57a6bc391b15156b4e13f6437e8aa5e2a79194f7e33035c5ea715079a92273b8792996ddca519eeae82431a4d803cf0cb96739073978146b7e68413c0e45f18f5deabca16528964f93e25f2328d6cb71329bb5e4d7177e62f9d5b0a93299464da127968e7252332d378776e9c4e2eb613da6fb4b312e9cd83e334583a7907ab6b2893ded76149246ddaaf86962b1903172e49989e5e3da4d5c90f9f03a4c6c117642c771d4db34dd2536d3b093a49a3ec7bd25d610f2523cbc12dbf8c4d0ea0d9b88a1c41a73c652ca99c41a3bd703fb684bfd96c432aa39dedd6c91587e42468e7342620b561e2463cece093e629390720e3ea88f39739823d658616463c9676ddc88bd32bfd2c771f8cb3062ff1ce978471b2647d622bc706143de7a1045ec41735077a95389586ff2a599950e2de342c49e4275b01fdc85fc691d62d190b2a42b534a2b96219694be321e5c57fc5c1562dd7093e2e7d30fb42b42eca16792ea58d221c75183d82e426c75c815267404b107fe7f20b68fab15fd62ae945240ecc12bad7d94f9ddff610fe9343359268d3bfdb0d646ce71f08a9a62fab047c433bbf861d4a8f161b50f29c6a49c34fa640f6b7928551a3b3ac3447ad8e7fb2fa5d8794027e6df0bb6fe13420e9ab7c63bac1f35535753a7be6287f546368986ea94dcd561ebaaad14e3c9644ce8b0a4ea675788ec5735877d743e4aafc7910501e4b0acc4e96fee503a494e1c56ef9df109db493a7c38f4c9acc2ee26f3862d555e0891a3b532b71b364f99ea19a1362cf97288f0ff794962980d7bd8416a7a87a1221ebc8645c3a58b71d26a58438eb174571f844b6a1ad63dc9933c87ea249ea261c93113d2fca3b0392ccfb097a5c89f76d4793f66d8a3cb0def74193689923c31cd719f850cfb77d8e7915638864577c3727a982286d563875153c6e4a56509c32a171da34a476139b080613b99ebfd60ffc25692df71b89369f9725e583f9cfbae1c0f9397ebc2f6f1cda74d850b6b8aa43127b4c394d36d610d66d23bfb53bdbe16b664deb983ae1cce9759d82e2799a031342cec9dd1bc2e4776853547aa224123a4d86162852d4fcaaace959e9e922aaca9e39d5061310fb382e6aca5ed3585254c460ee23c3ad34b4961eb0d53556746614db1695de9dd1f1f14965053f12e89a01f7bc2761e29e35a6d44ce094b7addfd7f103f25073561fd506627bfc384bd6c62d09cfc12f634572a956392ce5d097b549e83bb93e0e148070192d0658e1271f200022061f53025ad63c8864a7f843df20f3d59897578781be11ce64b31dffd5c843df356d8749a48949808fbfd4f7c47904d7bc121acff81a678ba5c217945085b128fe399d4ced14f25084b595d6dfc44f5702a40d8c74e522d27fc49ea7eb0c72968da0caa0f568f899e4a2d6dea10ebc1be9d346ee7ff38189df060499f70b715a3b434b5832dc3a264459a46ac3a58721c5a4cc99383fd2be60d159deb9f16a90002e0600b252af134343758433fdd788c1f241bd9065b8cc124265d8b003530a5caf00d299368be05185f8411c61b334618608cf1451859c89831c378c16284e1051759903164c8386a0c195d6378b102370143400cee2201336678f16288c15d9c8302a00302d060ed402f739a981c4d0e1d106006eb7c8ed387133185d94cee800032d823cddf90899829ec24400c0c040480c11227aa19cd83dc9979c5b6e261fa048f89b114572ce9397917e24b7eb656acfb930389cef1444bf1d760c51a7737a4b18ab5a30749d203b5f0993454b187caa7b39d52eccfa13b68a4620b29075dd271f564cc1622e0e23520238b3c68a062f5fc186286c829d68f0fa63b8aea13504cb1c60f6333a74cbf4081162b00438c9c814629f6510f65ddb3b1d1a30b071aa4d8c2a618ceff623f1ea98c625bf98e3e92b51fc256d0a0218a2d46494dbb1e49c4c2a1583ac2fb563ff87469836293f214cfb2cbfe2c45e3134bb4bdcd2945ea893d5e7e751cfccf342c67d0e8c41e7f7ddef1c289b5ff3f789d7a446313db48fc380c792c849cafa1893d57329da6341ab6f44cacb321de937bde420313eb7487f538b95e62c90e9e83c8e15c68586295d85c95232bb16765e7b45072733ee1800625d6f38eeb2459089b240c3426b187a9689b15e5e3a545e5030d49ac4972d093bb28ab128ac41e224d63bc4dab3a9f161a9058f623b3d28ddaa13787165cb833ea40e3115b78a68a99f0c154d0061a8e58f2e6a73b8f62764ebe26164235d068c49ab7193d34c7390ed3c888e5345c9a473259c41e879d62c5c69ddd7d94296828620f4f2e8532d5fb0b4b22f6749a6356b4fa3ce3d1306820628b943c7ac731f582c62196b8591ab7b7773f4e1a6255d11461c3a60bb1c94f980c1e8d87964360d020c492e952fe3c8b9db2b941ec9d3b42acd189d417ca2e680862cf4d27b172748be4a8c4eda46282016934128745024110002cdf1600431408000034260ec6e180481a87b2303f14000363261632202a1c222014121214120a44814018100a85c18030180c0604c2806080e08c6adb3e4a3c74903fb4a21e47a0f30576a4d084250324f4b46e7d8677003e27e016050a9b3d1f8e360850cb0076635cf949361f1cae38bc9820cd8abe624d8ec3be55050fb2e2e276274e5c5fad15c7275edeb2f9fd6d1ad3871b0446a3bf6b0ba9fdd08f989e1e960151ca645d4c12c5d686c8db0e05c50690f6b262b9e8d88cd64f7074095c44d2a57a2c125fa7838b5d27a8203af52c0fecf53f7ea26148311a1ce64b06d4c311b8be5f9737b8de2860c22f4507a985c97dad828c0b2fb734d6f1a6e6ff846969546fdd6b153760e148373817c892257fafebc6c380997d8ce277e891abffcf308662284e9a5d6ff658478ad2b3a1ba9fa30c7b5f7db97465d1ba28d13f0aad26ba1580ca768b0050b1118af5f502f0452c98304f945637cf65e07e6bb34cb972e09061cba711ae5536ff69df6554eca2287aac00a4c223be38c400cff84983dd378f738fa78e26c2a32ed1c7f0f88d9197e28b403f3a90d9cd4e8ef1c60c626fad0ddd43caecc313e9bf96d2e66ec438079a71f3e2f3d7305814cdc9b5c60231afaebca13f29ef1aa290d40e9e1b97e06411ac0f255191094ea50bdc23f9fb070945cfca7a1bf5eda4675e3c8729620f18efc3aa19d60339c12a04f79d3cc081f613af9fddad4f4fa3a11a41d259dd1dde569424162f6945732a5b3a545d853b106c015268c42b2d95e5be4d3f48eda32b62673ed562c3cee393b8111ac40db4d98b0dbd422790d3e6fa86dacb5d57b1e60a276bf01b20f0940a615c8204f3e9a9c3934d78a1a11166a3bc7773203f9e87168bbeb4221c5ef0d21c9c7d3d897a0f8f7e7b4cdae0f1cef572829901f49c436eac1d131f50b4f900bcd363df199c662588c6a6f56cd674ca6cc8482186876b0dd4f135b206c90e6404367259de56694f044633b83eac0cad73b1830b4f41e8cdb3f47d8b7335e56c36d81b8fd4d887cafe3a4b13360786289c0cf2bce50952c73ed1bdf1089bf4f0c1c9c87392cb9bdcd4ee114874c4948557f9d0d83154627403fe07e071204120935189ca2ec73a6cb37e2efe66484c086961fbedb07d9778d387cfd259a111339d5480ed199f5989dd96aafb4bd14b55154d21552829a7134053716eb0ff181cfe70b0a1cb5ca4848915a0dd37c2e210a2d701e8a1879953ca4aedd24d913fb5510b439884144ff7e457ddc688afb7a143f413780be6b7e75f3c2aab571a292634c825ee3c3e3bd0eaa49b22cf5c6c5696ddc7dcfbb537aed5f16094a774386333835c69ee950fb001333f00f3482dc7ecf45512ce43245d9249a2fe285ec2a449d281e99c0e0de156705cd70da86b197fc8cc69fe0c0f9f8e18f2ce085cc4960cc1bd0cf09b128547f85d54a9000dc66486d09f0bb43adf6a5ba3aded87d8d4df16ff565f9b6ac51f3ebfc6fd718c700ddffd01d5cf2f6b114e518a7d2fc4cc397cae47b978a5c3d1a96341339ef6649b4cbf0715bab4027978547b5532b6560c3738f475892dc63a2ebb21cc88d840eea50c10074f20035cd31cec6b7d0536a48c76d4d7077881aa32e457fb75369e88abcfb20adf10f1d15a6a7d6b56a5a6a98cd1588444cc66fce68411b989feb20e32e9d7b71ce08dae62053236071e85ef54df3f345d1bcdab1f127fef58defa241d31e9f010745b9ba4f7bc482bf26d07ff739e001c30aeaa42624f2189449f10ba6254ddeee3569c400065e67a72ad0a8e59d854a46d38f19020f2cea03f72cae3073c62888620f42ed1eefbf3ccfc1091b24423d01ce756c5eea0ca8c9e66ef6478ddb1655c868b4203ec273c238ae45a991265d4f03390496b8a1c7e7c16ed4376b772ae519d10a0cfa92af99d0ab05e164ee3026a4938f0f5006d8c6730fb8396fb69002a68518d5522dc7e013e9d63811d79cfc9e659e3258c5223673a98bfad801ac42a54a51b964e4a6cc237756e0030f8a231864437ef00d1e51711698b2a4f1c826eaa9d1e1e02b8a7804430de9c6d220ab390de352c565f504a0b6a81d617c40f4572a1284b0677c90bd000ebe5c24f3339db4f09fcb6be27bdaf9172ae5d996f5627c0e963d48619fa87578263f3ee6898390bb495f610b588a526c626707cea96261f0850922dee728341aad8556b72247a03ee543dbd903e9d8a8b8c4df2e2f0d5414455fb0aa7ed688f881405c9b6671c0f2544f837d566a42b7d0835bccea207542bed5eba2464c22c316f05be01b85fd92e494a49b5f6cbe20125e2eed391859ef6e71438153b01913ca911553220772b1b55eebbf69800e5cf8caa472ac72bf4c85a3df500c21ebc7d5298123cd2c50e71e534f60af92f2a23021d5894e634a56433c3737e436694eceb9587f22b2d65264aa2235b6670d08c747a962229ea51b14ae8d07d20a853ac26a43092b09237432e575229f1265c46d16711ae006b7ed5958aa3849d0e61bcc95c9b22ae17b7df6fd7fafe34e1cd7d78df05af00fea974a1b851f23d3fd0ee0d86325d674ea1f7cce2cecee65c23640c09f851191d3b26a9bb20e41640831d8e6347be0bd8d4eaf43b2cd4ddd29b23afcab64780dbbef2c5d9093f325b967e6cee22befa3d2e75d639c0fa2e66b2542703bc23e74671ad9e7bde783480812256e4185c446e1eeef36f68124bc4dd3d1e0381f098def0db011a4dbf1d75518233aa635bf497e446b89c0b72043cf8d1066f02d97fd24d362daf63f556695daa23bc75c992f29704b6537315dc4dcf8dd703c10d7b4387944401e226cd6ce3e9d4a84df068d92fa33fb1c6668fd4f2dd4706add3594966a5025f45cc5495ad76998bdc746db8247285d68dc0f6c1a800c277003b5c3ec627982b4c7b45634e64b35fd0fea4578025a2d441a8c6a0a311403ad046b461240d65eb9b024c9fe78cfa3e8efa3901c058eab9c360d37c07257391aafacb3f6834648fbd12168c2c0dfc89d8df2dec7fd272341cad7a8321a4caee4d7bde12758e41d15bcaad108edb428e5a09971d0f6201ed23024d59d80ad0ad927b584605912bd4e15be9bb05b40f866740c09f0d5d0d159289a06844b401769512061619ba07a2db9e805948103c9065ee407fabc85d3467c0f49c662d59f401b54b9a5b63cb154e888b31a8daa0a9356abb347ec90edb2412bfe0cbe9181861107b7069758ee8823755b332bbe4d892b43563ef3ab5e22a7353131848f6c91b034ac0eeed5bb53fb92b88466dcc8390194019113614a6fe76fa8ec379dd08806040b037c8dd051045dd51fd3e5e5ffa5dbb2ad1c608096e5dce5991f49c7e092e5fed8d5b103472afb09f822fb8c694cd2ca9e23916c3883f1eaa95fb07326c0f3bea9cbce36d579f101e94da7e69a4a7ef417eed950f28921f51c64f5446bbbd1f7451cd3e60f14f8808544db03a72910a5e410e6220d275e6a1909745ddbebc260da2e5a71029cde443d792b4a2253e714cf4a27ea03a0da29bfab277591308c2335d301000adf9ae4d66473e5767cdb576a8afdb8ec6c6f0a5d52c076ac275294ce81fc4bed807adfde3774a749f317bb8b966b99f7c0bcc27bd342385692c2fdfe8c46f9200274ee7a7e30423bafde8c707bd34a67fbdea8a015eebf2d5b0c89c25e427739393ff24f7f76155ae8b6b8798566bd215535b909d17318256e369c2a8e2c2b6af491cc201498822a8ac6fd2de4d57f06c451ec313e5eef625312a8768d11bb55fe10a876ef0c9325a3e6d41e188ac26ec61d7ca73a135f7f1283b0ddbabb0492d4385a269a921712f69f1cc3cb067ae5a081737988b22f9531133c4615644907c9b0713ab1304a751997519d865c715cabe3eab45699a77729266d1980aa089299cbca578a170532862856bf17a494289bed9da5293caceebdbd0780b7f49113e4717dc300ca851efd21eac961a05cb3dcdc7905fef145c6465f8269e5c4f46d876d9338f3e9e4a3eb975bf62604afadc608ac83681db37861ce9a1e0d02eec6c67a9989b2b2eef419c52862643b0d5d35b28268362f0868d57818a3d2647575a8ef61188d822e56e719c73e829e4d4c9b42d68c0aea9d4c000dfce70919c5b56901a013e6427863360d6044c515ec637dbb4c53d87eed34357565b1b428a807a196a04b61d456429d5b657b8bd4f5b9d61136064b0607518ec02dd3f1521e1ca4ea4db04a69993c7e4c3366809ee86ce6383803dcab2095e8828d56d4e662242c7ad72dbbe9f712cfb6b675b33fc88282a19c2c019db405da46275506a320bf7355b7445d0d9a2012c8ee4c9409d89a123ec28fbd78bca0bb4f56f8ed12aa81b47314a2b02be37b3066674898bd2510fa594ebd025d0d05c86fcca54aa386be9e272aabd42e05a293fbf30a72914522c82a24f97a39966337db3f255040dd504d34e2880a74240d244860fb0992cd17af97cb7bb31671231d2bad996ed6462994bb6a426ca39ffbedddffe9487af14092b6a72a825656d28384e665362067978bb01e84282d0b89b8147ca3f5c09827cfaa930cfcd2bc245fbe7f1dab417e1b1cb1fc0efbc3282f4f7fb8237a13e717dc076367ad92b85199dded087225c8beb3610427fb0977b74e8bc430f3e1faeb4c987fd8dff4f9727e853cd6d5cf10fe3ac1c22effebe5da2e9c914efc5416a8267841d9410df4b0666d81e62596cf2e2a3be5ce42c2bae476e99c80762faed31488d884c1bbe90a1997533e3c319814d76428028adadd89a398038ffe208c7c7011a6f2df6da2cd3c559e68db84cf23a1863a8cfd25c299d9f0c86fadad408918ef214db3e8bdf476f3080b61884e0c5674ad756f12eeb9e2a4757edee7881ae4d26cca36de1d87fc439416656b78be763fecf760fe0487a48983e1b05ecb9a90418b619f5cc45168376e412a97db4e072bad553ef3271af381b92ed0cea2086de88d19f87e5f1380de02ce1e520b48b8360bbe62ff7301ece03e2ff05ff02ac522beb1f40033cbe41d200098a57099647c4fcc166d1d6adce9618b5710ee2d02f1817a731a98862ede0216dc8b4e63daa4a56bf2ee9777a9e6aec1076479b364eb5f1a0d4545c8543a968b5c29905c09ddfd9e6fbd58d4abd35cd0358de6de23b33946e297b8b6bb34d7c44a018f815489c100837923ad8b1cff6a7ba1ae289ee51e18c20e6d248eac42dc7e1a391a7cbd0307c2ce20f8d3c458845cca9c8892bf294f1ec40381971714852c6973ed16691942fdc2d5c47c32248d3a9dfcd4f73dbedd11b02ba5e7ae0e9bad011a8dfcd81afa2a2f0aec670fe2c71def6549cedd1716303a33d9e3c1ec8dd52305b62cb24218d6817154bdfcd79b3e2012838b176434faab7c1e1a5030ea396caae5fcef4808609e16b3cc90e27f85c0732a2085c13456dcb806002ff3c5c38382eb8f3439918ed332b55d925b0a23a7d5e95f95b0d03d2a401affee6a18eb00ed62b62f612963980e8493ccce5b3e456591100ebb5adddd84093a3b07a38ebf6c1bdbd4c00c984dff58f0d81a134ca68ead04446e7488ae1f13ce35eda6215460c250102265339620d9e1929283fe45d49c05d40b04a3a33b84b81a86c224f0c4adaeae7924d80b6cd57fdea2b34cd4f1ab86b609df125c0c2354c03a8344ae7a03ba82442ca7e208267b83b81f962c7b63559dfc6b0f879ba98bbe218d94f821ff1eb952c46f44130f94f21afdc3fe89e10cfcccf3546e298e9277125e685e789584d194a2551b5c96c564c5168a879d21d54d70dd332b57874ae0cca92d120c6f5cbaf7043d062cae3b5f20cb2160d496b28e4e4d71eaf9057d751d82009c8ca2c7c2c55a4486eea248d92c985a04ad9daf5b503a4c9b57ab6edb519d7920067ba0ed487ba37f05e5a2aea1175d110df7ca08405523675066ef0e51d189b33d8c00112871dcfc0440541d23e6942fc9dde771658e4f819b49f408382db73349f6253148dd5f48db066adda362d374978874a6b20a0da4b011048228b42b7f6717e8f5f20c9e216bad7c6a6bf2c1973c82044f4ab306187ed172731e7be54ee25397f7c1d0e9749a06940283663736ec49d3fe348b673d04349d0bb25775a4cb80100e682161f691fc8fe0c136337e214b959b427493a4208d62bb38c571cc23c42d8883b799da8f9dfe5f67fcfbd8805b28617870b585eb36610e93a7b454835643554abd1d0e6fc4b92f371071ce7d42cb2b0e1aad8b83e43bc57e180d799e884d948a3a2e6d84e8d0069215c233813014ad668dec4068f7716c4c7621771f04158467a354524ec91c49d04aa0805b7c87b188448ea05f18fe4170530f144fbedce422243ba6ca9477b49080cc30af157b31633d16abbf6984bb1a859ed25eb97fab3fb131b06c8f2b5ec516a3e84bf1a1b8cb54b2f590ad296a911ee4a727fa543a622af01cb449bfae7030228804f2aa16733869ad94a15f10f47051973e860f1bc873da275fe71e1b25b05fbb7b71758b5f2592a66d11b16f5567b0b0872c4c599d29be4031970d48599b41337f2eb7dbab29dc43eb0245319efc631edd613ce74afea13ebb52c6d813591c2111b558b04532118bf51d2cc8d88f3cc01e979612cb22db086596f1bca6876f1867eaf56a929b3c9b20314abccfa507983c0b4d2c98db6088d81c950a6b219c432db8270eb59cbe45b141eddd121238e273627057331136cd2cadb65da5ba43870973103d4e2ec64af8b9d4b0431937629ca3c0b7bf38c56e622a9be4824f32ea66427512b0f9dbc78dba0b395529a70b72b2e432643df87d15752aff4f6eee0ac16277d3bcd7a932ec85bb83b692764bd9ce73a9bd4c648699e3c7b4b1537442e0dac416da5bb30654517a0cba4270c7b0b8ab464ca0b654a74203060aa8014e5085e6f127ba603fa6ea1568d32b3317c0210ab999d6ecd1343d10b22cae4db4aaa2fb9ccbf54a1b5a813f3f7c2b8cbb8bbcf4a3096e1e3fb333af43651d594efdbb5446bee8537be6bae7cdb0535ea657b0ecba84d990d9c56a064fd3a8d32092bd7430389e86667e16c98e8311756f75e2dda2b602b711155ee62bbaedec8de9dde210dbc4ab944483ad3565518b793feaadaf0f55929d50ad12df5357611aacc92e95cbcc2568e4ed9a41f430fbd5529e586acd592f5cd8d02f84e2b6ca3d12d80ed5b6d5b66f9e3092698021a315b67633c9845fbbe32abd06ec0569ad4b31afa95494fbeb0ba585d657a49d1442aa8875086a460d99009bb4b8d9a4fd3e9ab9c5c215d0d5a02bcbdaaa865f6f7159b8bb96a29fcc9df23bb91343d6c909ddb907d2a4fba7a7b969dbff265de8acfaf7ecee9aaa6ac4371adc857506d2aa8bea50c83bf4675dab470ba0beaf9f75603554959ad057c6570c22f3308b2328a179b2c074f61e12c63f4e1540a6c126958ab955746ffa24e64b8950159d34e83b79faa936bc52a3f16198c0a4429e3a5b2d5b113a47a1ac209ebeff5464d69a41568ffd674a1392954b85455a67aa7a6a858b570d472529fd6955d19e92b4a9c56ab9e15959681e2f5a735e52b231ae930bb200a0bbbdecab88afaaabd6245b60a439511436e7ca16760a7d2f9e69449a63941d4ca04bce869536caa6c741a55afa339512f25e65755986849b477aca5f685ac150c8ed46f3af417d09c0d84f34540b74d3d945ff422fa0e3d098546d0250e1393f19a018cb9dea927a39ad1b9e8499437d496a627248c57d2a45895ac635aa1c07aa296ebd00d542fb52ca991a065bc316ee4ea70fe8f447c4e57383640f027856140d6d104422108086eb4abc2316b0943fcc926f7478aacd5082c05bb416a3d69ada569e111884c0504dc8cf6df26644600a1ffc82aee91f0dd8fe8d65e94d7302c67a6245a01306515418f8195ac20c00b0d87606219764061e0f820182b6c90d96a34422e6558ed1f19484c163ba037d6a2129029d47e85419911de1a12df458d70f5b253eb06042a9115567623f8ca0000f5f82f0146fd3b0285f3d5927f73011f177ac8a549212645c2a6cdcfc1a2cafce18f6d4465f96a5879325cfa5986f2d38fdf31882a8ea5774d50180aee50a93fec2e9083eaac00979888406a19e772be600d06462afd22667f8c8ac2d9e46fa36fdd10d27bf607fe4a7187f6300d26f873a6c6975b40cabbcac6263f805f638d8713bf40a19dae40e5f55dbb2a499aa3abff19bf9f6c60ed3ada191e287cfc6545edebbaa719e246fd9b56a43dc088a7a6d5d7ad43a16c5509a4931fe73003075dbee9027275fcf9628de9cedc13d5e638bb90f64197b457d303869df6bd5555c699cb49e893cbad579c00cab730d1c76fa477a78e3370622cdfcb8b01f70d5e3cf2ef37a4adba0ec3edc10ef986bfd31e8876aed156f3261ede4b2fc7f81c97411833d16fac2fe163e201d7f917ff8623e151948f1f8a383e8497c93eeea1df5677df55ad9b0d653b9d9b3e9cbc3f116b1f93f20aa615ea593d21dddf73a95a3ddf3067da21e63e5299a6effd135bbfbd6ce7b31b29dd8c51e3108aed4361cbb091ed5eb5d2637a4dc9ad2607b632e814163c304f7888e0e3579641598e181256330f1c7dfca68768b4b0a169c3d8ba722ab1f7ae2296981fa1668147b0eeb29cbd85b6550e12d0f28f156178443e1e98b7ea937fb7a1edd0d6560e808949016292fefdc926a62eb33e6af80abdb96d7a559643aa7419a1d943a38b16779c26d82be8e65597d76de878f0fb9634ad6e714c0908223447fcb9e42612905971ea24e85b0e0319511b8fd3b04e264014e6e6b6377af5d7e9baa28324754f7d4f414004dc2110f2163aafcddbb7b4ae90beaa63c8a87169319504e461029714210527bfa6f47ec932d24f4bd40cda8b792af7a68912f77b91bf046f936810c2b3fd30f6405429c3e929e813034635fa58033dc1ca4aaa40061e5804ec115412349289530b0f172a355c1385f9204330626866defb067a40e900faf10caf69489a30166055bfd802da6c836c97e0fecbb4eb3bbb59fd952aae2c7a562ca2c6e0d6d07a1e4f8a82cc61b49df17f9c0f5a6316fa70018156af4247028fb3ef49ca7efabcda2ad4e4d3f94eb4cb0e2e7f17e5a2d526e6b54f22c839896c4ceed201ab842162de704a5809e52476da80095affb04e3867d89e69298ac9e268ba1107fa754e3254dfb65c5500c8ea1506ac57a32f3763ac1dc6ed674e8004ef8dcc65167f8ceedd3ee141a835d49500582ff52b0e2a64ca42c6a80ca7a200f49a3f70b8d287287ae539edcaf87405b037d2205e5de81c3bb354a9510611fdcf57416b41e9ff70adb6b8d10a4dcaa254ea97d45a6690d4e5bad0ea9e57e9684f006283bfc6e242a886f22fee44d531d71de7354add016278039b54907beb7fa746c84dbbe745bf2e0c6ef052412a0b9d95b1966123415233f0d46b66b037b78cf0b6a1edcc7fc4caa94cc94651f6b974c413dea739a8c3019c8d1c052b69641b48ad99c83c3a3cbb9bb0d5d8b66349a506069baaabea10287c7488a85a2129e6aa2f55953542cf6fc2b5a9aac304382f510c0df637869e46b9442a1d87bf0c63c331c74bb11b36985ec239443aa143656813640c6d62525a340cd654990231c06f1f928ba4a55d210f3b7d01dddc6879b861375668769daa80b106a7ac87fea4df35067c2e60e11f00bba47fbd2d6caa4b9bc9558290e7d8a6181ba66c68b0e963a3be4d6e1bed6d44b659d96674bf1996c71e676b6c527643070e9e6ec62aeac5631ac2a6f6c66682866d7e7f6cb4da1c2a6ec64a233acfda50cecd84029a30b21bc78a0d2bf26602aed122f5fa1b54e7545738337e3f27087db29955c65b9a433711ee6214884b48fa42a2e08123ed1052e643d03488f0764982ff0d52354475524022c73de2aef11ca9381b8df59bafae06a19926e92d0a05c1ee54929a816e6fe643b84523822a6228d59a7a929d458dade8b0b4342688cb0ce07a4f14d43e00c23b7fc1ea7bcae2b29a180c0616412d007b0b3987b26177a9b5a80c09ead10f2153dc718df603aa63a58b8b15de9e6612879affee630bdba08657fd61ba0cabfc93b08feeca65b907149e55a6fc3a2f323885ed3458cc191990b6dcf1c9db5e2783da12092180179f9012a278b9c9e93dbe0d5593c48da5942e158e3d82db7a08b933952d9b89739fa01bc78882f910807bcde1430a733468afc6c8a314f574c1f19fef9015b6eb9ccabd2be4e78c651f69b87861f47a92e0194f4651596dbc9781824bb979840c4209993a712f1dc3084e90d5a05f52029a08d991ffc4462c293874cd228aad9cf080c80956102297281cc81d5d585711f69e1bf513493083101ced9d8464220ac15602d6109427ab7e82ce5e42c779d499310907548a86775c6edaaa9ab3c2eaf960d0a8ff45e91f4a6623e3073a1298805d98b4b481e359b73092c65e673714e538bd13b8a2994d59dbc71d162aec232f6a76a29a3a56ee43bf85547091a938439feac10582e8997fbf23c1b445955fdf710697f876e1a27a9700cc6c14c2ec21ec531ce5bfa26702a4db1220e641256e1f304af12c6765e4595bc9da1613286b97a4c3892f4cc3e39591dd21a13f77928c4bc3b499c28d16643f6ca8900672a22a0ab11b80e94c846a1a130507933f97aa84025ed45da53710efee9be95d8d4b45113a47a1c9b274b48999b24a790de5d2b9523d83bec96723864f1b45cac221498da0e927c5bc0a7d743ea9689b2d848e3bda8bf2f9ec104517a1e136991f31d61525975b97a8a70db93cec1d6aad4fd726f28935a219bdb4c17a0f09013b5d427ef736c122f12335bd0ee25463e107c61ac59cd7b49d436e297b93eac4b83a3158cccc683e4c2a67daad80078c0a2aa6c6bebf83fb318c6b6ac2eca8b23613842c5d918e2b450eaf8ab2c9d026f156b5be8ca468ee055a90143b6742ca834bd39c7cf4c093664889b8716680daa6c06adcee11f377e8ca1454d76134e3578214f8f8e6ec3c97286b507c029082fb0ed48519ef8422a113d11b8cd29d20294a252d3dc24ab8effa724f962a436722b7c402a378e4d3d4385c066d401373352648aaf86c4cdd00519360511ab3922a017a62e63d7a77fd94f0d61bfbde6baf19358ad53d4d2592da531d03274b825ff0f746752fb9168368f83a705de5abc125d2064ae4683f5166dd16fe225984ffe8284b95efb151526c095722d7d16e548ae44c60689129efc8588aa013c3af3bcd225037c8f93f3fb37f71e783eec06dd5c26514bf5f3d29862a139a6d1f1ff0e8280b0e4ca6cdd92dd95ba64dfea55843c6debdc1909ddfb03f5af29bf866440a2f485d2e98c31afa5c5b6227a119003a5944484da6f3068353f1428f1567a9fa0b949902be2123172208ec44ad791885b4720799cce611e02c43f600f9674e935a282c7817035590960aa71b5951913b1e99b090fcc9d30fae2857788a61680533b2e8f7e16d103c1304dd0c27f314b78a7b5a18c739c2591c3493427f67f7057c8c6eec9d4bef65b8e4591f51d7b31750ba91d0d480dbb0b05e4bd909905072eadb886df6996d2c123417e52135fc68a04f2378f428bdddd02dc28dd253019909f7332cdeef8abd5c6450884ab122057d15de5a8c90a15317a2cda93981d713dcf1aa1d647ad9d83e638818062752ee17ffc90b094d273c907bb4a737563fb464ffc92516e143e59caee5ca6eaf3194e0a6ccb498e0a995358dde32d419ae28d7e5e06f2d089fb709fe6f6a5ceb914d6b1c52fbf90524d9ef316f50eb5b4a03116140725dcd58a5d0c5eb8053cf1884bc5b2edd19e778423974a80e810d2e98600b82655b0d690b4f1c15babe2df4510e053c45605918ce40180a9e2f2f00099b51639b7717ecfdb203ab7b6ae5b4d4be228a155e68b418f480927a762520ed16835f198250667157e3493796acca3a53dcac59590de6e7ce7ffedd17f90d852374ffc16272bd8cdce31faa1468c65cac74e4248adc8b48e6565a782e457cfa9701af0907b6360085eafd5d0d81e7d0f8e38dd4d70dda4a315e0f451a3a3ea0c09daba54617b5d368dc1c0657e56edec4c2b045d6c1c56eb962f9871f786fb338583db74123e7aacf043a94ccc7d423acde78c5161483e79fbd5d5535a9c13e0a592e24b4feebd2412fe7b34247c004d825968e796024f7807fa03442e20c6fe19f8840a5240e06afbd1ff9ba92771f76330543cbb90e1a21dc0955bb21b518853a82951068f2bee9fdf888f87bd5794d1520779e47405458ac273bf4f91c58aef97461e0db8732dca093881920a5703480301a27bb3092de226df4a2e99487ca8d1e89c62e36af9027fc153cb2959a78fff523ff8e608bfbdf9eb031505dc12b5b10aed14cf82b78f90702c2c3c31a80d8697d1b6d8c628d833faac382a078a305e0ee140f1d7cbb530f3c00f1156abd5ddf84a12e63014e4fcf6f523852031f63059ba24b680a08b6dfe320702e70b7b7f14baee182c5422d7c290c22b8705d90ab8007a7ad29de83019c8b02fe06c4600a3870b46439000c30c000030c30c0006b023602998d908520582629a50640d79df6deb997a79452922925cf028ac7c584c6c584c6c584ca8507010a930a3a0a6ec58c950e0174607130e0c205205e44a2734f2aa6a442869c23068956be4b3d5f9b2f1ed16e752aed0eb947e5d1082f1c3184178d68fe4416512946d94c9a20bc604423ff422d4b345b9a6911fdc859e9690f56e185225a1fb1a763278c944d6a22daf1d02ee71d37e5b610d1773e894925a6e72d954374622f4f82f2eb8521dacb9b91c287f04521fa8c5121a8ac51838ad40b4274f2c27263ef28b59887f162108d7f6cc9caa0ba5134167821885653c727f91d258fccd2e14520fa3f9f6c992c49068d2c1e0b191470e10285f0021089d10b4ac6c97d09bc0120906143868d33bcf8435fa5baa1f12747e7f0185ef8a1897949e85976cf9f4130bce843a3726385ef4a3149596885177c68376975a79083dcd599e3c51efa32397ed65f72427f2ff4c09859d4b0f0f153b09001a3c60d1b33649cdd710d5ee421ed153b8c5c77ccbdc043fb162ebcef76b6ec8b3b349aff4964df901776e8f265de9c7c840421e53ab42f2a852fe8d0669cf790bdc2e4fc6b022fe6d0053fad121a64f8787c2583ef851c9acd3822a5f08c96bb722fe2d05a8ea949ac7b5cd2e1601c78f186e633fb2b2c3557a4f0c20dcd85a44f5773d09033e6451bba8a092f125eb0a113f9b690f2e95eaca14dca33498a21bfe410f4420d9d9e4855d17945e1451a1a158971b763fe852e5fa0a1effcdd1fc457c5d4cf199a8f4dc14de76c866654d4edef49e142a8e4e04519daec21e8660c7be25df2820c9d9296f918ba70de1254ff6c8e9617626846be4f7c0491c44c43831761e86272299d44626c9a0f863e05d1f8199fd720eb8b2fa4492491bdf0421bad4326d9b1ed4217ca4b86d3b3bee0429ba4c9cf6d3ac288d3bcd842df1b3c8ff8cd69a1912b718250bd26c48eb2d087e65421c4f7b1d0fb7677901dfe157adff91c938ea75277c50a9de6ccd4a774b2703a5f857e3c27c73e99bc2b29a9d05889cd13d67773f4d414fa77d37d4f4a2c853e57f8f6c8e11485c634788a6c95bb5a2a28f4bb296b062d3ea14f418518f32f42a4dc3aa1c96bca82887813daacd9ab4d052d13da981b3d470db13dfb12ba50162c3df744e6582aa1f7b8f278dfa037a52909fd660a9d179e634cb94142abd154d88ca1612caf23f441fcaf5cebf568698dd02411268b97f220559445e854ec2047c5e3f7a54684c62bcbff45cc6cf2217449f7b94bb4ce20362904ace4ae31b48ef02208ed5f6af8ee92c1576392c6ac19255bee077df6868f1e3ff5415d1d42d0172ca8076dfc883326e37ad295e2411fbf7210f937d190723b3887df30eb5e721df4a765252fd6a3c660e6a0eb9084be90633c83ea71d02819dde42b78ea50ee0d9a934197abe6ca25ffb4411e16faac419bb3c61ca6cc3d55c668d0e8c51067d07c47f88d9bb4bf872e83deddd5a38a66debcc4a0891f4f7f8e9887f90a0c3a21dadcc45b4a2249f4055d0ccb21785890ab0cb9a0ebbc58a154fa2f5ad0a667aec81b36afc6e7050b3a8d18395748cd2afaa0c3eaf8c648157dd82f99a3f4c3b262a968e296f6137fe17dd34745a747c97805bf9ce212aa31df3a5b4cd1a40a4149f8dcac306629904928d593947352f45fa62356c8ffd4a051b41b4a65fd594b146d243fa1a684d44f41130aa37550a2948b098a26fe8b978e10fe44bb7dc9455612f9dd523cd1ec091d54c9e01ea2b79de84325590b662a9728154eb4d5e722f773cc26acf02105bd22234d744a264f4153274fe1c34c34ba71324db3460e7131d1978a5afa7a1e5262e9128dd04bf1354d26794ac7128d9ff4e8fe22aa4417425212a3879c125d954e55fad534893eaaa624f3e828895ea3bc9c6511f92c7422d1e5df30ba82c9182c8b90e8e3e790256e064d49da23ba10ff13dbe99e39e438a2abd692296ae146b4a21a219cc8de4dd118d15a879c9f94052da2c91db5b44fff86f049457421f3c8f48afbd6a64d441facabc35ccc9e24234410254b92972e218768e6c37a5e4a398668338e4f52b945e5a25788369292d5133c23442744d0e220dac96e2a0453eeb29a14449b9a9395c9f5025194783907882e47b78cd99390117af3873e5332b1dc1c3d454d3f749ab23128f5d9cb24eb43276156aedd84450e331f7a39d9f7d089d215a74c5c690aa31eda60e627bdc36758d4f2d0c5d3ce311dd160c243138364ef0e6eb9437ba54278eac95173a7ecd084714b2a5a104ae2ff75e8e5949a7fce513a74d2370915b121894efa1c3a212a650c95f77931c9a1bd945529545b997be2d05ed2de19433b97082170e87f2b3c4e86dff17ddfd0269f143fb2214684ee86fe32687c509ea13b8a6d687c4b8c7ca5907955d9d0eb5c2cb92e1e4dc7730d8dbef0d142acdff44bd4d07f06cd4a29626f0af134342279e9b7aeeed710d1d0668654ee3daaf299ced0e8f7c81f535e965b90193a793a2a3c48b00cedf9bb7ff9e570926264e87463d64b4f760c9decfe5c8d3cb947480c7dfa9b4a6d22691f1585a19399cfa3b9a24296170c6d7692adc8b9a4c87c5f688425a14aba7cb44a395ee8ff94c938f967634e56ace842ffa9b3a730e372a19fffd49ab3e5169ad44953d534fafa685a6865f45688e39f2cb42f137b84e74b086bc242fbbf16fc2f69caddb40c565ca14da53389f687fc1b2647b0c20a8d882d9d74cc7ade56db8a2ab42162e54d2a232e58418536b5f848b28a71f1cd2d583185def7a35c7e09717e2f2ba4d004f127628493e95e18ac884293e3e2be688547f440a17113adeef3595425e8096dc8b1458624d2fc7d27f417767794ca91226f9ad0a8b2ac0c1e364c68c6831cd141b384f6749bc8a3bb2ba193f041e88b124f421bf4a5c787c50ee22f123a2922e3a923e5085d9c934d55bfca7089003a82608511340b5614a1d3242327e466d3eff38a1544f043289d33497c19352880ae9011a3a386608510fa0acdfa2b42b734f455b02208bd58a8943bb45e874f590184c654847f0bba8397b0acf841334988d1203ac51693a1b13fb0c207fd28ddd1f3d9a56165450fba52d5b1e459ca0a1e34da72acf3c868076dd8244545a418465d20acd041ef99d3d3c25b72d095bec8cfed9f19349260050eda2063736246307962a13182af0101172eb6b821237960c50d9abd24b6da74a375b26c60980a22f59788d7e088a935c549a62784cb0eaca041e71f1a717b627cb2ce8a197441c61cc4e924f9445c56c8c0943aa5fe0e61fecb62052b6260f66f0bf12cb14a288696df70a4e6371c1566821530e8822a59d12b34e9c6700c2dcbc26b5cc08a175c4ac78e6d522d2ee82b67740eab9763d4d10856b4a0899173aae41ab18205bd7bd25ebacb628055b4d5e1234f858c9b837455d17acebe9888925944c8a5a2b3929d42674b4145a7a99e3b46093223e5144db012afc815f483e6a668436eb8c5103284b5b2148d969223a7cc234517444449bd8873fa54a3e8458a3e19c20945d1a7a752963cc98b339e50343b614da924064573fd56aae483d295749fe842456919ad7f5183de138def8abc183d66d0e176a24f112ea9c6ebcfee124e34a3a3f2c6c594e715da4417e64d53654aca547b4df4db1eb4e54d221a066b474d2acaa2261d3544871c7a59d51e5f9df5111a34430b1ac50f1d7168524aab90645272230867cc907181127803f8d0018736f6e63299e021b69f13a8f1803874bca15156f1a5cd9243871b9a60293e795b56648949e012e03274b4a1cf0c4157f2786143b3a52ca9d4a0fce47b1d6b68441269a5f1a4c6f00f1d6ae8ff44994e7935765859677877a4a1f7b25231a5e31d68684564d40e727fb46e0c143aced0699548cf7b3a6797cf8fc06d5c55a0c30c5d0ec9c4ebaf25f59c84f1336460a156e8284363a14d66099fc6501b30487068c0b8e20a1922d0ca400719ca05291b748ca14f427ba754227344b847860d3716850e31f4c1e3fd4f7d8fa185c7860c2c9224a2230c9d979e98f1b2ed0043b31d3d373b5b6c873d868d2c7c860d18b8848e2ff4913ac5b68a3d296e3686ca4865428717ba9813839674d911328991058cc2424717faf03faf5cb18489d86c780c0890a0830b8d9272c24c46ae630b4dee0e9b3c7a46b81c3bb4d07c69f98b32d9eca2df3a7464a1b578a23fa8d203400e1d582087f4d42463ee78c7155ad3ff39437bb4f250d0618536b4945be54791b27b15da383b733ab98849c244855645fbe9d01f9a42bf61639221ac47c59c4aa191f3d539c889a3502ea0d0a58f884174253b9e502e5cd0e184ae92c8101964328616db7534a10d93e3bdf53a84126200b0a18309fd08cba6c153b61ce37a848e2574a9f2be79b96c56126368fdf70f3a94d045c8fae21ae122a44e12fab09ef33428730a1d48e82abf690b7944e54dae143a8ed0c99e78a6e5ac1f84ac091d46684ebbad52c892c3c9b0c2d05184c63d7a8814b1cf63f3e5850e22b4a9dd527cd27e93d6d9f23a2eb9dcb4426894c4389a4c657cf509868e20f4714ab506259328dd03a1513abb0979cd953c263f28aca98ef9a0edac20d3e286b5854d0f1a6fd78892e2cae528e141df2335a618c226217feda02d9dc74569883133a7e8a06beb90bfdfe712279b833e46ee8d21279a329870d09b98be50e2914210dda04d22864c79c48713956283becc43ac635a8747af065d29991ac7338afe8c68d0e9945edea784d0bcdc0c1adf151919f4a2937b7786a72306cda6b6caa50a1f4e0875c0a08f6e3dbf9f415250219cce213f17f46ea6ebb2915d420e6a412b3a88cfffbf74b0a0d14904cb8c9d17c22757d1e5cb8eedd2bb937344156d3cad54f26b2a7ad93ed9b174868a2e55ae4c21448c1fb53c451324a94e31e2a878134dd18ae88cb02ed2add22f45a3544a32e85329a4e8e4d53a73473f8a3ee7cba4233d51f49f5234132a0785a24979e374e86c1934dc0307287a1d19b234aa4aea13cd567f5e4fc9fac4243dc1028e4e34967a22938c644ae7bc0b1c9ce0539ae737d1f9e76a0d1f5b2f8888063834f156ece76268a98023137da4b86f1acac8c2f18ac081894678a79462749019733286d6dd10382ed196c65797ec4925b916c60e382cd1899063bce9e844d16d0c2d183490e180a3128d1c0d0b1641a91e3925fa8e397548a23c9c8710c7241a13fbb161740a7252328696245ad5ac8a513b784e9d6bc01189269a6a4f9d9e419fe667c8c002c6d28003129dced80b0b197e450c381e71caf68939a28f11b13fa29e2d6b5860c0d1887665247fe9c749cd222db260449382f44e6f0941ea05c98063117df6d8234953ccf6366abcc1a2ec061c8ae83f88e84832fffca39c88cec486a4d94d56f9a86268dd0b3810d1887e3d594245f6c6ee10adfe794e314686e8844e5a39a7282a69c914a23dd3fcd1d21136e80f217a09baa3251d9641f441c5f4644c4e10ada8ce16636e2761a6ba40742539a70ad3aa4a192f07207a0fe967a1bb95007a81e30f7d9c9faf8c11df1d413770f8a1937e299641e8ed0bda3eb461e235b67a890f9d8ae0de222d97058e3df4b3d62d29dedd43a8f60a1c7a6862909d5489ac936485f3d08f7eece83b32ef5e55a0c081873ee588149ab2c4c65f41430257d0a00101e3b8433b93b4fc9e9fd6a02449e0b043b3a59faa64d618ffb375e872c35c77c710cf20e5a043eb29889c0fa6a35ea76cc840cb3107724c2ace8e8c6861c3860c5c00871c0e3a89e53ca1536624e08843137db2998cf3ad3c231c9a1c794ba9475315cabc00c71b1a1991e2d1b44f64fd068d1be786bea2eb5f0a93d6b8d1066385204dc98b531bc0c186465ec8f87ecd3261328c07c10c8f61d6018e35f4653161e3bf6ae8947c1c199939e95f02c702461aba1044a5f85f16934513c08186769404b1f05742a9ecae1d8e337449e5f1a052ccd009f7f735d52133b4500c7094a18b321f3b8e6cc9cdc69921830c8b7f75e73fb7f8c1185a4ce018c3e32e1b33ca8bd216356e88a1fd8a78d142906d4a6fc2d0696cf79cd1ad000718fa9c74ce9b1a9609707ca133f193f7723359d080f1e638bcd00999647f37e68434420083c60d1822a04138021c5d68674492e147b9488fa0185a30de6ce15868a90538b8d0a8d84be13f24afe908c62838b6d086087dc12ba7788d1b25680174fc1522a8f10d48fe0ca8814503b4d0644f51740c9944cc622f6a6081c59581230b5d7cbf98313b3c5e525850e7f4fc57684f52a598df164330df0a4d522d1a52fc097a4da80abd6fc80b0b117b175ce0a042b34925c884b03e4a78a6d0e9d988633993aa36b914fae0619a4b648f42fff194501a3669ec7842a189b31bcb530a3fa1f798a26e5e111e6b592734493cc3084b613e98b2098d6af89d1c65b428cb19808309a47c8b6732cab184fedf33e86def4c32c83894d09ee6c5d8d9192516bf24b4396ad4aeacd27ce52321b5b882c6043a6cd0c8c201aa05c7114cfdf91b0e23342e33b244aa30ea3242e0091c45e877f3a918f3eb9d10274293444489a58a7e72956308480f6bf550312a3884d08838ea39e7664f3a418e2034f2a1848be7cde23d2a8be000c271fca09131958da38304870fcc397ad06f8cd99809323ce862b8964888299f24550c2d2d0c29e435500204d02180ff0f1a1400c10c19362ae0c2856e233876d0968c9143ea8e416a48e9a0d113e7eefd7972765d8fc09183d63a7f7451d5d2caad113870d0c69cafe53222e447fd06cd75d4d359e9418714825a050e1bf421aa7c2687ac542228058e1ab49faf3c4d598706b6c89418c334834e27f587b9c917f114153864d0970c4ac522aa5af04f0c7a0d51d53cc5385b31e58041e3397a89a1b55a747408c0850b1b1060800020c0002570bca0d5949747bbfc76000e17f4123d9b04754b89a3e94033aeb882468d1baa078e16742e397c844a314743c60d97009af1e24d2063022f940e1c2c68bb938c793f685e91f12a3ac9a13c7a3cdd7842a5b2082f54d1a618972a67d5628a9b17a9e853b2c86bd8fd072f50718ceeed9b22a89ca2954b49b36b5aa8ce4de185293a4dada3715737658f295078518ab62257e68d3b21c5a2fd6248b776146dd21d4a4462f94214ad7a8efb93434951de09459342667809b35e80a2119ebbdfbd31ba952f3ed1fe8718346b875456f10b4fb423ab73c369d3b9944312bce844a3e7cf4dc7f3cdf6530c2d47331e040e230b2dca085e70a2fd0d33bfacc14a2d1b7e83548d179be852e7125a768285cf80a1f542136d656b27b149450e55c5d0a281aa6cbcc844934547ef1919a38713c2a08118b3788189265932f9d8aa24dd2bfeccf0933368cc7851021089179768ad3235c7a02aa63dc6125d4f922f32a63f9e8c54a291f94f87864729d198a9b646fde4a97a9c449f42be4514f7935dcd022d8936cf7a45ca094d863f06a1b54786fec5f418eeb214abc22c77057f4f59e3c4584cc5d0891834cca9d00ba631616873e84ba53772c99e3818fab7a8a2443ce70bcd5e4cb05011cfa02163060d19dc5e484177a1dd6e8f692a92185a5bd4b851b58567b1450d0a94e642df62d9eae5da16fa54f2937a79c9688a5d682db4d127678a793a5d3ea6b3d0a820758450a915ba163716ba8c289671a35cbc3ce92bf4a3aa3b85f8f338dba75f71058d636585be735075cd916d0cba0a5db42af9a1e4eec6d1512a74495c08712e852c4265b2c8c261dc98f158cc00818c2df414da73b7caa4c2fb6a952f8182839642973aa4ae781d4428a5eb28f4136336cc689dc1d050e8727297880f399bd2ec5fa19fd0e6efbc7b429989cf512ab413dab014728c39637d325b37a1dd187ae486893713dace384224aeda4b68545352f7e66d94d34ae872e97a9c56891b4d2c09e824f421ab721291929408c94642df731a7f73f649be21a48fd09c5c09b967d43642ab7d16f6427a64377d119a135d4a66f47eb2b8c2d88283c68d2cb6a8d1e1c2c5099a088de89423c63539033d84d6bc83720d2185caa8ef470ba1a46159dec52398d06bb143ceb876101a4b22a68a4e4140e883a5a4e4a3c9fca0d13f6156830861c9f7411bbf329a9e1017d9b17bd0e90f9b35a8656cac200f9a078d0c198208237f4fc6d13b48c991d83b7ea07560c6eb5fc9515a2e8e39583b8898de201ca42a04993f69ed9239a5037d03257ee9ceee594486dfb0415a955234add6ac7eee1754ecf55d036b1a58cfc05a06ed8a4411e127cb2491ef18742a5f5abce50c31c6b9050d83fe8346530dd7f1a2430bf40bdabcde913dcc560ec915a05dd0a7041125c33a34caa85bd0ccc4d837f19a056d121a52d22c1d8f55b49a44c9e68b892a1acd3ed1b8f183a80c7ba4a2cf20c3e6818a76a28ec8fea59ca2cb57e22633fe4126cb3c4cd184244c476388e8a137337894a29537adcee05d6521f52085bdaa2d42a4d44681a4a442ca4314ada5c5906487f58a5f163c42d1e8549f8bf996a4661328fa8e891fabf3c49cce7fa2910fa994cca1e3894efddf4d994c39fb653ad18ed0109525e95c39c49ce8641419b991277c8e37d19932399b4ab79ae84352398919d24cb4d63362479e0e13fd9ec859a5e24fef5e356264e171090f4b948b4a74e67e56d2bdb389143d285155d8d2780f2d8ffd2ba1a48a58c36312e5c2011e926854ccdd59a31e91e873fd72e26619a5a67b40a2b71ccf34346e4e2a3d8fe83d3c37a4f07147f47f5a7df4fe7e86b68de8657746c487103ac524239a604956634e3f46ca5944a394dcbc912a4230e52aa24bba225c071d94d0414d44336192cb7752d193150f442cc1aadac2a5d20a2f39b269c8cd13c991c48728178c8628f72884043c08d15c985e4ead331f4df418449f4c080d26bef71044db595ae29dc4e420ab47201adf909c9404aba44f247800a237aff89fd2337f68bd3348ec981f1a8dcf9e73881d9e62f88ce0d1873e688893397a4a17081e7ce8547b083a873c29f3ff1efa64b95259f4107d091e79e8a18da6378bafae36fec68d17796864cc9e4c45b720123cf0d0a87ec58f793685a898198fc58c045c143ceed0a892fdd4296cf8cbcfc30e8da548cd5e6d1d8c10442b5ceaa423a3c60d1b2f013e82071d7a8f652655f30511999a4373961bcd020b2d6cd878b1040f39b4fdf9c38325a9b1b49a000bc1230efd9fe64fd159ca1f78c0a18b3a3a24a99a631a5e8f37345252c81884f69365a2af41a3c30d5d12d9a46ea777c5cb48376470bc4882471bfa90518fb361659a23564ac0830d7d4efab4e6fd920d5380c71a7a11371de4c4a447f5e3a186fead4234e50d1bf426b1f048437295b247b0942d999c5c75998a5bf6c0030d9df56c8af1a1a7b1231882c719fa94638aa7f29c4ccebf8719face56cf1334554ed73ccad0c99818619de7a2e1f22043a36996a67f3d63687d37563d759218bab87e953da9b4a89e30f47afa3c464a7930f441aae66eecce173a9153fd9f6483b6182f74e2b437a4ea3c6b6517facd68c9455f0c179a90b299e50f730b85e45dc9c20969a193db329a42ecb2d08f8cb14df5c7b0d088951c82fe147d27a73caed0891da939a6a6dc61271e1e56686288bf9dbd9a334a98051e556845a6975b8ae1e363ab86060f2af41951f5734f65778a0b1e53683484941f3d892852c304d0f09042135e3c9bf27c5ab5c1230aed8976eb94dd6e1a3ca0d076486f8f24a38eb6650c1e4f68368489efc9b20e0b7838a193bc21775363e4ca36619910825a78899bb86996b052256582e59c057830a1ef8c1f4b2a573c96d09a08a16b3165240f910c0f2574a2cfbb24743a8e0e29cef229f31c12dafeb0318e84d49562d4ff08cd054ba1198e66fcb1f108860d195a353e8b2b3e46160f2360da9db26e26622a215aa654e1804711fa8f9462129d6fd923350f22f4564a4ee74f51b4716386dff018429fa385f5107425b9ff7a08a176cb56c9422bb9abbcc5ea3db3f4984710fa895b22a89a0a164f27800e0174d0a0c0cbc10308cdab862b4bd12af64f19e50c1e3f68538e98567dd6b993f4f0417f7a929e19ebcee1a3470f5aef4cbd149b2b5c085e21e3022e5c78f0a04996da2ab2951cd5398f1df463124ca987b8183dc843079dd419957552e8f91d79e4a0afd8d31892fe3868477faba4ca521e7ebd41a384685329c964931cf3b0412f964ff3723b028f1a68c083067a85c70cda9d7cd91927a914695155e346163ef0904117630aa55ca21e3168841051cb8434f310a35b0cf0804167f1fd5dfd741e2f4017948b2c8f16a0070bdaad7c2aa4129592808e55749944f997fc8c192da9a22d1967fc4aa9e8d4ca64b0325951bb474517635e9eb1f029fa17f11cf2a7291aa52f9977bf88a041548a3e05a1712c5988146de71513a5442c5fd319457fa9ed49dd3da2e82d529babe5c5ec9d50745134c967570d28ba2c7d41468ce6136db6209ecb5383ca13e3894ee5f64bcb71839eb077a2cf7339d935284b59734ef4e6af91a38658c133bc896694d0d21c92d0932a6ba2758b557a7292c94427b5632d6ffe9c11c24493cf2d83484a9f869c4b347f6ad922b45cd01a4bb497a55b4965b7126d168f61b97a61537629d158565bef29e9249a1822c6944196d64d5112cd04ad1523bc82f01023d1b9951c13371949e40f124dca2431c6ce3ca2af9cd48310394a653c47b41fdf23294c578f5035a2afd48db0e9211d8ce8a4562469398f8564211d8be8cd5add7498259f106207e8504463d164d8eae055d15212d15970b9dc13d7677ad281887261828e43b49b84e9f7ab4a52b7d50e43f4d9538b8693c9a4e6a0a48528171d84e842288d71f96a79bdb355e818449fb3c9d8191adc53295539a14310bdac259969d6a14a8804c23715247e8b8a78e800449733c4f524954ae5641d7fe82ac9d5fdd0ba2959d3e155279e79878e3e7432e4289ea23b87983d1fda2cb3262a65b4dcd0b18766bdb46365d18f33791b3af4d0e8e0aa7d217b8e1a3aa3a1230fafaf6769b33af0d006b16d41c6259da1e30e6d8ac9c29f9e78161d7668d47453cc4b598245aba30e8d8b6f6cca24d3675362686de1575c41e3c038326678168b45840e3a74212919ca35639486944574cca1512e0e8d2baef04d161c6006e5e20032e847985bd498628e77e4003120855c6142724d0b293f849bd2397636d3110e0083de4b73d0300b6a19e6015ed0e913ef3c1e3a537ce7002e6892a42c397bd2349dc403b4a04d7a5982e8976fc8c0a25370001634d1226c06336b159dd09d2abce3e62034f7a18a4647d1a172384f9d2ae75251708b98a19aaaf2ee67997e590c3d187ca0a2514a7b822e9d730ae25334334aca898b790c7d7d98a25511fa2c2bbd27695b8a54525a78ad6a4d8f2d8b5b9a520e2946cb59a46836372784b84968a9b7c50cb7c0c728da8fefa699e4238ad6444a113a4909f3f8b17a64a1684fc990cf3a09b1b0e8072836e9ddd639b347b8041fe313bd85c752f984a48827daf48a214c4a3296de8c5827fa2b25b2e3e866a38667c1323e38d1c6d2f76c4ae557d880c19be0d535a7a98c21d3b85136f0a109c552424aa9e4e53be909131dbee167a20143027f645c310146fe358a073e32d15c988c2e4189b03bdac3443b3a5fc9103c46e719cda0614301ff7189ae841c8b9e33c575d8ad2cd1e964a6185aa4f0a312a78ba5d2c8a5112b3d522c4dc1435f639394124dbc1e651e59d7c0c724bad0bb9a5b8284031f92684cae061562792ea11fa2d1f1818f48f4f1271373748ca1454386d90724eee311f7e108fb6844b960441bab4a9bf0902f7e0ef95844135b2c3e6e0a32497514d1c7d3f1fa25a65c08594622da0b4a5dbc3b69cead23a2b5deaff054b98452d11a6f031da28dd49a848c4c0dd146133ef93fcb9a9aae107d6a092982c8450a1f84685214b5fe10a24a54ad41e34304346830e063107d6c0d75f732ad1c9907fc8c0750e0234b324996b072418168d4834815754ec82b1304ae702c649cf7887143c6053e00d158d814ca43e9cca8800b178ffed0c6f818a4fa979786f8c30f6d6bbbee68ccf6a10bdb21b6ea9e26e55b023ef8d0081397522ccf71b5a03df413ae428cf8081beac5503f3266d098e10786e9a18b6529d235758fb2204f340e8c2d0c0c188f648c4006aab351c3aff06343f3d0271953b7774d1f78e8c4c40e42f2c68d49cf3bf4494a104958abecbb753eecd065b8e4112b248b2d7e012e5cd8d8e245e0c2857fd4a1131153d4fded9844e65994e0738b5f808c19321a7065638b1741a1436f39425484d896529fc51637ae763fe6d08930498312b2577774b6c8e2430e842bcbea9e15432c25564ef9c6502c6ad0f870e1028b1a34126b8d1b59c4a10d495ad12c25e78ddfc7071c1a8ffdf1e4488eaef1f3864efa8a1093c43dc0871bfa0b3dad612168dbd07f55c851f2a2e728293568c09851e313a055e367ac033ed8d0a6ef694b62f42a6c2986960d2c606021a3c68dad1b356ed8b8057cac811cb21d5942d6d2b61c3eea392419444c4a8f71c321e0c2458c1b374cf0a1865e72cf974eb2df1f475a5cf135b2d0fd484327dff4a952adb2383e1ed9dfad2142e7c4b8e11028316e7816658b1b563eced0b507e1f94cf4b4062967f161862cc8b1ac8c327462944ee1a21183b824199a0f3963b7cc640c7df8d7ecb149ff5c70c5d077f0adbe2ab518ff2922f80843bf69baba73899433c617820f3074a27354cd4ce941c673050d1ae68a8f2f344af4f88bcc278d1b3312e0c2457a8f117c78a1092a39432a8f919fa4bee0a30b4d4ea92162d49498dacb8071c386163560d890b165e30a1937b430a5fedddebf587e6ca1b3d22aba576288bcf6a18536e8ec256a32449f53f9c8423b416b1e91b584854e8b5092773d847e6caed046dc1d91aa1a1a7345061f56685ba2a910358837ada9421f5655541c11e35beea8d0c7911941c7fc31f5690acd87324d41bce4430a456d8d5c152487a4107af1b9278d42ab91d572643e1f50e82d7bcea4f831e7f0fac7137a3115cf4f67b76411fc70429b21854c5fb1182aac187c34a1ad8a4965ec8e98d05a5f4caadd743e96d048cc722aa944d14d950f25745af3b509cb7c123a0dcd6f6a32a420fe0f243427e3072124071da1f9dd10ffe69aa9956484ce2f2599a164cc47111abd56ead14ca68928fa48e767aab8312507f03184fe35c345502928531642e30a18e5366cc8b831c3b1d82d6edcf81a59a4165bd43807680086151f42685c2daee59f148d8f20745ef9bc25667dcb985382470016346a7cb87051828f01e3dcb0a1450d20343e134fc85c9552e9f9110d2c1b55356ed8b88f1fb4292d3b26b9144f684346165eecc3075d481c13d17fe39868b4f8e8419fb3b95fecff10c4bf1f3c2856b297b7c5c8d929ef474822abccb683de74e725c72ed912cb0f1df4315ec992dbdb470e8c5eae9e95e4a9ae1f3838ef29cfb9792db3f17183f672347d35a99c6cd2870db610443dbb2ba54cadaae0210565a9faa841bb266ac1cfa30aa350051f34e835668c216c9ae40ff363066d30712a855c1e0d012e5c5ce04306ad87edcafcd2ceb169814529027cc4a05c19de925f44030b1823908134d12a50f003067ab5a5ecf854992f1391d70ab330b9bb841f2f289389cd54a534e4c3055d103a7bf23fa54768870237686431811b7cb4a0dd48da1d1f2a685a09e5f0c182f64a7dcd7d777227991a0f4033ba56d1e7381684ac086615a735b42ada12a6b5433defe4edaf53d17759ec574ee6155ad87809dc171a155d1062640ada3b9f1b0d439fa21321e39a33455e143ab4293a3dd5e1f92621a9981ee0c2451cba149d9ceae459c3845ac81f0b2d6c7c165b50005193a251321b33c9f0d4be19459b9a44b04a25fe9412db806183d804b65a145d0ca1b37737178ad62d7e6a5bfec80d8a2e751071d73cde9fe85d7ff3860822dc86f644fbffc1b723dc8956a466541dd564b2698d17d69ce83c66c71422aa2346bde26c713ec960006ea291ee33415c4a94ff10d544172dc7349d546ec667f1802cb0a88100d29968945e8f794a8825684c342a59a4be97ff2695ef4b7431c520924aa9ff77880d54c349308304343c207083b6447f1543eeefb89f256f2ad1a94e1813faed9a3f4489e625ac8a4810f194995e8bd72202596051819e44df2e1e4c2589703f6d4ba2d1cce8415782aad62e0b2c2ab0828e446722e47c65fdee6a5d43a28d5f3aec57f83ccfae1fd18e8833e1e53c7a0ebf23da7eed08a7a346b413dc37b344a3991c19d1ef9edce4c9473404994534dbe61a47a8c89ca814d14895a0a7829e2482359168a95eb952ccab87524b2a6fe98868f3fa55c72445a90939c7d087e84b4f77ce90a1c3ddd386683ee78c602a93c2ca4268f15ddd29aa966259cadaa9d44b65eb9b10bd47f7ddd08a145fa54174facc4cc4d21e41b4315686fd1cd50e4427c1ff3a946c59d95403a24bf50d217bde0e97b4fe43ff17e1b35bccf9a19d19fd4b7a62f2b9b00f8d12adfd1fd9c48776d552a650495a6585f6d086905c938614db1a3d7a68f34567338bf6247c93873ef3480d1a342789317868728c31640651cd90db3bb43d27e3a7a67c5552edd0ae958cec25a26a06d5a1518f1b45541059634b87364fa452f11cfa08163befea460ebd4a4eadfeef3a0e5d6cd818aa5f4573c41a0e8db81049b564e6f53afd867e62d420a37f92142d6c37b43a29882c265be1c28e6e4327b2a794accd6444dfb0a189112c6a4cdd7b0d5bc7ba88a430b7ea4aa629bfd6b29e4ef4cc24f1616a4a436b5273963339a3a19366bec992b6cfd00995112b668f6f3a67d90c6d8a4b7f2bdd7719fa18c309b94a093e060c19328e0d8741e386958dec8d12a8343085226138168b0502410ea310901b9700031308000030260d8662c160389ee7eaf401140004592e1e40302a20222210121c1c8bc6c15028100c87c2a05028100a0443817048241ac3491c7fd0ed127b2af12f30d234e2a0724ac9be247ce471039d5e9471fe8e0233efe0d2ed35b8e6f6199f3498b94c0c14e146181dce09528a98d78772e3066e1159eb74182cf1cd5ab80fd2b8fcd4e7b78c80c8e2c187c95c55f82770886398bd6b1d8535b844c9100d5303925202c234c90042be6a579f40c54e1b227c86d9176084c617dee4131398e94038d6233499f4588368fd586ad46d952b50e0c61de21909aefec055db856655917aad117b0bb0bed1f750b11f1c008b74066859df67066241658b91aaad304bda32e00852213a15af762251c923a400446a30b3dbeb038d5a6f500890302023be0dc9f4e383d52b4560ed9ffb7ef239d8d094c9ed1a46c11667a6df94a90419a8622d18cd0c1604dc31912d304cc22677c36b3b44078283385c8439218100b24a6714aa527d9380bfc1192d08367c922e96ee2d6240794f5eef78e3ec9b3d5858526451392791fa9c13f4316adc930d0809717d4a91997705d4a08a5829d9a42a9107d5ac2bb933f5f3f7697ba5e3b5568418587bebf856c50ef69f24a41209d2369712eef1b637c8b7a0a1db47fe2fd98dbd09e8b25e86e0e0b25864e7585cd21e00036c7dfac26a05195f509f26e53e30780f2022800443c0d798c46293811a0453a9618441197ef49963f12fe71be0bbf3c62c7076511f2e884dcf50893b7fc86f7f2ecf7bd8d90f60fe35cf2d7c053a14f3b2a308d6fb30c8b77f259a723be8bd33a57c237e20d33536dcea04c92a98ff655d9a3f7f741e094d9fa61c3dec9e0f8caa1e5314834a4f005d449a802e28c2c72a647e62541e9c348b325c410830bdda82d62a666f73e07fd85881b092a889da4a074d8df6767884a16d13e0bdd11c45372b1022938a4e3f3cdda3dcceef39d495bff1e2d06da94e35dc8c432b6227d00753d26dfd4033fc72131ae139324a7dc853a03ec9cb328c164d15e6062f7ccf58040c2edffc73e700689791c14556e13fb6242b6d06fe5818468b9a6380f4e204c108130a480d01be932da455e6b39df1983dfd09d8d4dcc7db906dfffa95b6e41d238b61480557aa77acdf096adeb7eac673e776e9526f90ffbcd9e7b35047d93576480549418a9625c31a25ca17a7eaa603ffebd4f207cf7526a92084edc67f0518090eb196c9d645d72e4605e0e4be408498e782a945c154dc02a9ed16a8d22f7060366057531b262816b3d8f320abb92eafd08a1ee5f11aabdf426d49b40a38945bbd713aebf5ecf8fdb926b34e25c6498253bbefb0fd9e6b9f8336fa1c72a20554d4b2c8080f2b24bf2087f79b96a8f83623e45597b7be1f4115ace471991d78a33456da2b1918edaa570bb873a664b8f078a8415f684951d3d724303f8ab3bcd995ee88937039e5cd5386ff60bcc357d94cee64c9cb003ef8af8061730a2a454c0807ff21487e5a466b6f7470ce2f7b0a59b76b5a71429f693b23a6870d8649a61ea698748d82f4f1a6e8208de1428cf1e07154bcd185acddae40ad14fe213395fedc9609f699e91d4efa206019c7169595c84260a1e0aab70bf278522ca1f10299b1938cc7322295290d8afb2f856405baaa5c5b1946e48abbd038cd86a38afbb0066557559cde878344393c05114ffe4ecec080340d03ab0dedb16fdd92c235bc4040fe4896bcd425e7a7105069c50831a0cba6a2de1cedee87d3e4ffb4a17efd3c059f106bd0f9e64dd534501bb7022640b1de477a59293bdcf1cc5b8f3d98818591f86a1dbf8910bf74741d38516f3d6681c2b7dd011e244a8f60e334018de08c2ea76d3e3f7902ebb4e606a0d449fd76b2a753b48bf2749a212305cab7c3d4a698016dfc530aab31565a54148e5c3af7fd58d6709f25fb2b05cdcae9920a9d00a3009d9c0730442eb83401dbab2ee460c6b63be68f00d02b15103825d540757e70b2b7641db8639f5174716acfeff85151f857ef6fa7211f6c364f435b3c3b43e001df10ffea85f2c0a2a508ecfb2756999e90cf3fb41013f052e1fc13d709a1a80a322a84ccb7bc7ea09e4a68e76859c2d2fadce75342345f9f0a378277639f497d7749ea04dbcb8c330d72c2ae206c5c7f9cf73b112099e646b97825d215c3a9437ee1657d5b01c3347962269878c1f77fa47e56a54b856111d4d461f45ccdddcb2d6cbd2aea700129baa48644e83e2689cb53371a830b4d6fcc50db5a043b7f1d856aff7442af8a460bff6b796b78ac0bca575ed8250c688ac57b7a4c177fce8119b215513440fb64ebec81fd354aea45da92bbddf7e8046ebe38186f56da362f07385d5a6e2d45dafbb4aa0b5ebe2e4a7dced113a9c357fb85e0af234c072487522eed2a33f2beac7737c5667bc6d28e894767ce075dff0df589c8b6f566402bfd3a8441a7ba35a4829f054556bf847c866303933a40c9980dcc06401e8cda3d82b4743e6ebac88a578e698335370ea62ac805c9323a92eedffb0ab9a33479d42e7259454d6eb90fdd53d9b017e64588970aeadb4d017203f540716b3e8fe280095251a62c5e234fb3321d30109191c19b59a1854b0b436f123113de5916ebcda688ba74c2a5e42a4c945aa2ed3f4d321a80f62bb1c0e1c14b4fa49f38439d2c08d0510a1b120430432f41e38ca8b295d4b9f3d044c87a410e6f1ec0914d0bb98a5b95f1ed166c82000b37e90b49b446c1b97739890e07bda8853043fb5c1900a72fc84046ddf81212ed0099fe20788452a3dfd134176560217b05ada0b815e2d25434a413895e254e7b21362ad2d0b07be2f471b375627ab45a06a51cfdb6a991f5e847de568b136487b85c21459b00a795bb61e46592a1e02ccc4599b15abb72facae96dba89aad6f6f69d17333f5b4606806ca17098121477c09e33dffd1c2e1d9822bf6b358de2640b7043977a9afeb018298d87b185d3e1838c21cf078c2f529e97198814184b0d40aa557a2e8e8a0ec111ef32b51aade41067580cb6aeb76fff74f883018a92291a11dd5df2579227609eb9b2ebfa202171005e4a41ef1f6c0dbd17b7566cf4aac6ff2b2dcd2b7a11d19135d6882b6463c5acc284d98375c8ad84ef67d8032f9273251cc5059cccf7b183ba9800c647fb042ffa8c89d693d87941563893a49de45b66ef66f5f765ba49e39cc9cdead4f376f9afe12272e76117f9ea3a8603a2a04cf70358155a5c123e18300168ebb0446514bb46c3bae16c11cc1fc4828f9fa7b83b97b1eb6b72982eab8aed012396fe0d18f11293ed22d7de9ce29b43f302799433c3a19580a695e28d8cd7a530293060b1ca591d0ea52ed2f1858b65f3df0f643b7a4042bfc868ebe8672c063a1bc794fa9cbee468ae8a3c2cb174470a9f9a3eaa760cf82c1655062aa090a03b876de8f7beea8383b39f8cccfdcae7b1061a1b0f435bce83cdf1c8a18d103f6a4fc57d54775f673d614c4dec759cb9370131c486f79fa59a700f705a6b1ca06456df02b492abdc7b288f07275dbecc616542a003ed5a08c9228b79388de50cdbb2206b20761c791000f1f25b5df7631b290417040744791e7b86302cdbeb5c955bc2bc2db45abe3dc2a7a26fe9444b182128140bc6fce55785090357bd7ffa1a0663cdd2d501f402e70f8f8c02945d535b9f4f5f561ce2b8b7697ecf88081954080f15e58fa787e534372246a285894f8b77e568252376064e208736fe88494b8a201388c56eb923b3cd88f772264c362b3ef798921f1adc48288621149a7e6f912dd17bd6df09c2715531190440ad6f1c5a6dd624d78bba86f7fc1f42844fa1c206b584d39610fa304e52b9c2ce259310d94015afb606e5d20603a337cc61115085f392075fcc82662eb42e067960625b593e4784f0dae37831e284fdb90d4f6acc9d7803f823bcd621327315df5b0786ea51826328bfd5b4bbec8aa6f97a5251ed36e7de92597bb5158ef95a9878450d27233b45eed0a8e4ce27aed82542d3057734820179355ae211f618d889e5a0178626222c570d3c2982629e66c4b56352b21067429f4b61580c73f2ab4a0d6374fb0405e7db6fc629388517e623b01183f370dcb307ff2cad671f5ec9429da67f84639967eb00dd72168896b106740ff4adab71f70e5a71318488f541ca9927e9f73c3c9ecbcb60212a9913ae65df80cbba9bf3f98440a41899c9df22822dc651f1fe9df93cc9bfe6f1c8a878de2e4b567d4056b56f83ed2c3fecb11312850e7a27b2c1fa4e11ba48da202200f4ab5d61600d8750a60efe7bf4228452004cc74060254c3518b01d8981b2b0b42798c3eb74d38ee4f2c82d5e02191aeca6892fd39d4643738ad1b1594c74b0c42a48cf91250f0e180b6ee7cf1e6988062a6bbdcabfbe1744dc5e3ad89f699797889910165648488f0483eaf455f3881c2275715f08e98720e46fed7e41d43c8b4981596f816e10c8c607eec760fb7cfdbe17b5ee6908e844ee0359d582efef7bf1a481c721ccad3c7c6d5cd8ae2f91ef399ed90c4875b7e2673efbd7debf171392687a503bbcbede4bbffd71a8e8e7e0548e5be8fd8524fcb69eeb6b4c0a3afc1048dc7f7e68e7fc578478fd15ffbf57627abe0979d0c1f70c7c20e864f840ef86cdee569a7b9f46c588a32005b3c72db23e78686c16cb3478b4428113e30203cf1b31eb6c43c2b1c8cdde49e18e26d44d1d64f5a062d37cbadd15cafa4f63bc5b2a232d3808e8d0199d99620b0e2c1b539338dc3b565b3ec0adf35e97ae70fc7de475e9a373fb44d07e3b748e860d7e07dba13aec5126eb5302a71e1edf1dd14b11b2e699b941cf1317d05cb1a8c44d1c5ab5c7d1ad7d9597833671160eb7e115c2a3307f135cf90073079ef6bc73ec8368e0e1bdb3a46ed377403c627029f477f034b96e5c8697d9ab06c14556b3960dc20dc8924c5ae26107cbc2f09d7ed3de682a782244d437a375691059f1697e60384fe7df0c29a825b86a32df666ad1bac1fcd7ba93761899aa6b4ae8746283a3cafdf25fa54d3f97a0f228ca279195457593448ce5d887741b7273b9fb36758bf525b35f21d6ac484e8121c935a1312d5a2098163ef72830bbaa804d90844250522a25583cfe1a651297881a5f9d9ac84d1313ed088871cf225aa2b4e41e0364e0322f7c2940cc93aedd70871bda20016c6f7f153bad7e3c2dc73b96c14835fff78b7ad5666524e6ceaab8b2fd22ebe43c0b9d8f1002485f45d37e209ade32680ef29ba4803fafd196c3f138f903b934c7b91c19481153d3d920826839be732e0a8cb113f08a0de43aafc9f47d468c69d69bcc5b22d911c02cc9dcd2f54d4274afa8ec54866ab685c5ea7b84c578a0526167c4e7f9fe641710a5c63a04f4ec40764fd73e6687602b4c06eb21193f6f29c0d8aea6197905669951f75bcda8aea57b5b74ff673444117cf515cc4aa33540c3e1201054c129de011d2cc07482deab44958ed2ec987215512f8bfcd7cd314ac613003b26a51b43be6964d8e15cfdcecbbea1bacfacaaef049fb48b68979b73f2e9b717a121904d4e2f21effba10522d45cfff7175347f36448370aec4084bcbfec403dad727a997deb3315ccdbf9b73d9c2c2a4df2518bc0501900e3beb11567acd0410a6b4afd7ef335e5ccd79f6b5c6f5f0e789982ad030c1f74d641e43652ab8779fd4908cfa8dc12a5a240a9d2a8bf3d5efd02c4bfaefaf36b99b72c6673904585a548e20c4842780ad614e105ae2ab8548aa6290a3a8991bb0b3b0ad2c37e914a3b5d8032e5dbeb55e03529d6607de0c852f265813bbbff9401340a59c9a42ca43b8c3126c5b8a19cdc18030871f85c18bb44b144c417cc6159b9a7cd6b95b45e90411c1ab292492bb7d17d4ed9996a40d22d68ddb54ee2ac98823ba1965087799fe0b52441c630a898761dc730ee681b0525dc70c9d23f67e25481d1027aa327bda97eee5f049fcd976c225f1be25543cac711f2a6b69d59890c90a3f502976253d449c9201cfd2d42548a8ae7f893ebf3bf4b04fa33694887ad7d5feb09252524d501840d85aa4dc338a581cbe9a95965d0c9d0662831cd3b6962234289b6f010fd6a1c8152bf80faaf5292585c28b0a48444ba408af87083c3669c7a1b052edb8450ccfa53af1bfb8f9bffbd9d3dcf830f78f63b043266ae946e5ef9d3bbe0cc09498bcd0a7bc226e0be53f2d4494e4f89ed03542620af200c65b121c6fca7fa72b4b8499d986eb95d9b6b9ec70752f0803b04e10781aab4440d026dbc3a62440533cae429a05efa517815221de76e4823c7ff6d3a138a4ad59acbd5e509daaec25109bd9e099aa01b0d990d105d9e2a39c504b2d894c7ed2dfbb8f08985c1855dbee4bf048942d55372f925f9e1f24b1b130af8a2a52ef693dddc79a4cb6dfe0ef44f999c057863d26ae37ee9c750f2519a2c16c424ada3241b8cf82c69452d23b8d28501003e0632cb01de37f02d95a66e55232c155f2b287392034c21be8c2068682cb12d3ef5f9a4d0bb6483eef96078520ad50c44eaa41d96d3c2d6c9e38b537833f9c0958391efe88f869fffb385128634897bc4145723bda93d53fe3cd12fbc5ede94a1128eecf6eac4ceb8c4df537612fad9619e91dacd2b12d61f6254cd4a89c70a31bccfaba9e367a9b8e90f65119ea56977dce6c0e55c3cf38873b8860b9a84f84649f1d25f65899c1063ce9c53b5c5b5b30581b942e7ce9cb7af2dd35e8292f11ea9b24a006dd23fc36394f525fc2bd7ab63d6f15e8ee63a022a2a5df792f71692d8f0e60437166debdc788cfe7e24736fdb6a8d0ea0b22a757a27d415dd53e05ab8b2a0af50e31cbefc4069d18cb518ef0ad4fc69b845a95201aaac6cd8ba5a256ec228d541b4698eb38c4f3def489ba6ced8a839a1e9c84cc48609ce534522cafe84d01de70214ed218b5122ae9d01f1cf823cfbe90b1add6f2e376c21b2d82fdd5ddf7b00882c7c2483b19929644b235bd876093527a8ac63c028a9842acd57aa310fbe36da36a5ab55d22fd36946052bc63564677503f1f6cf1d715af838cf362f4034331d6a9cecc91c4d843f7e58ffb1cf4b9aaad20c8b95abc3e7ef64a82adbd1492b6778809f99f3d0988835b624ebc282d8fe495236569e41d3e45838e4d7f49f222980010a534dc04cfdc9fe7c355c811b4c547a0803160f2e21109452be6875643fb1cc5aec0bc09474e509236666e25a3c9f46fefcd62788293500a1eadc275e380b6a9139994aec564d381c27de1df4eac2472a236ce8c10a14d40207842b46b06f7483b486021c03d3fe8fd3e1bda55f014a1c7e864f3803f5ebb69db9c1a912c3f21eb029946361128445284597f0d841624f10489a2ea292cd43ccb068c54eea23c415cb316986435e23b179067b3eaef2c3ace56ff53c4f1db56e532cac94e0e138d6fdf9174952ba42994ecd84b2ec4a19ac2a164c9325f59583fb4dc95778c7550682537b1a6e7c248952804fd9c5bfc895a64e4a92c93bc8991739f39abc9d87e05cd711f0256d40f6ce5a627932da79f5a9daad0e763f727d08945c2e85860afdbf434b22190590e361432ffb277ab908673b793e0f9c38f66a2f03f8fd7265d754207868235257fb2bb566992cae359110da77e1929310b07e6fe4808d70bb388ec0b59b70701b76338c2498f8c24e9b89c0b25264d421ae6248a03e8779d1d48bdd3021cc0a75cf082776b75ef112d4a863b74181bdc87780b79fd678cc01e7ec194031a72eebcfe2e0ccbde29448f8d592be6a699f2bc0ddbe0c5e7388b14726a70356fa68bdfb151b7d98501b0422f13845f8c491a8d9815c49e6d1fd7d11158e791d66c9bdeb44b0e5536f3ce453ba7dba5e36713ce1f44a7da8561f21437f53434be8271d6792f88f92cbca85c8f3a88e5b7d031516d431f0a0c5c9c6b0d269b55cb788209c89cc02b808ae54c9b35c222cf035d5198fe16af570ca0a00ee7cbdd2eb4703b4070f45a6eff0f2cbecaf687ac201304f6a203c3ab1f138a812db907319540740a22be21ff44c37dd2e3352aed11d5e344aca144058d3c155c9531d628755b929f6b183c75b70b1cfb6b927edbf43a61e8a5ad47c0d9d0d5b0f047b0dcd1af45e1eecd60fed84ad0d6b5bb819151afe2a5891aa4a0030178ae9189d07db2839bd56a8df49f3d366613032397f1792946a5d0042d8805782d4ede14035bc21d0780396446c3177465d298df49888071a0dcf56391d4d03a3175b30cfb83f5876cfc99e20af56d46ac61ee312e9c9ef6c2f434a55550976f96922671b5a0318fceb14e65b41b05200742d10fe88456ef109fccc18313686cabba0b87180f6b5c9c2c48e2082c33ea8dfc5e3810010874c0ed7841354dc966eb6efdb0029ab53df5045301f0fe7d5984a17f86ecf986746bb69008567fc2f6d77a59fcecfdaf8ce93d9c4047de29a61cb37285f3bbe73f8f4f379e45b887d4ffcacf0f1c63790ef36fbac8b4ed291d4bf7f61149f7534b8b613f67ebee8e5bff4d2bf5be701934f97efb409f173d07cd6d86dfd8e367bbef954aacf6a4ad94e2344bea70aaa9d47b0f36de1f3cec7ca7c56d8aa0b4d89efb30e692207b3da670d6de7537df959678d48ad17689f95405140f78b0daef6883fe195efb857a86e669ec9464ada20c65467ef002edc7768aea38c4c49c4f0f82306acdb91df34164f4fea6507c8e264d1b13c010315ad10302965ffc119e7d91cb67f80802e86c3d99712404946d8431c2cf88ae64cf508f4563c6e46f0565ca6d1ed650ff6d81f339cce0235b4b99cf307ad8254d6bc28f61856bc8036618702abc25c882e2b0d0e62f72b3d23bbd9fee74f5caf37180f95e0250cf000dae1edeced4e94e105432feeabb780dd5984d3cc76868c4ee1a871e8742a95161310e1c8067e65ce6657b77f78add83e54bbd7e928f13f2372aac225ae5e75537bc972f37d3be4abf6462b70329d23d3b991d21ed0b2041041cdfa7a9ab180bace9dcfbb242fa98a3d82637fa733ce20105c3e7f4cf119ffbdda590583069ea8cf342d448df4d8b8ac4ca51d0a970f8632839b85f84d516cc699b40c25854814cb4c3012d20f30d542af723b83120121282d85e8e25beeb32d85082dc34e800e0a511cb78e54adf207d7b502b0eb00a0fc7dcb292ab925003d92eb49342e0bb1c3b47e2980f0df2ae6ff97eeb36ee0d5f4b903f386434f4ce81729b709ec0779b6b58d15f38cfb9de6cf1270eb12cbdba1694431b14144e1d0d87b950dea16e896a7b475cc8437e899a164ed444732a71a2aa10f6a8d048faa4089c1de6eb21a9e232749d63f2aa132f9151a293434595b2f1a21043a233d7519ff00587b20ff920e7e145e298f70b985e42e13e2747356969a0a05941bc5e0916ef56c63d1eff4653387cf3ce76c35b3baad8f141a984d0c8f6a6c3233ec345d04cb3fcd4742d3c691553def35596c7215f7c858a75a480d80bdff9501699f1bf693f8373711f3306280f145bd212c33b29982695b4023d8e2e04f6968de830a31ffcbbd55a65c4533ab5b5d0972010cd57e6827cef4e3dc5daa93524227e9dccc86e198853eed38cc999aebb7339d8781d9db16c3603805216e79e3177ac0ca36e94ff4639e02746078c4b1d1a007ab7dd4c1658c68264c8fba98daefac0706b159f877ffdd27872188debaa81bf77bf39b125ba73979504b286538f6d955df9389ce09354173b3c0aac798815aeb0b4f692f5ce823124280b80c09ad69bdc7e5e642129d09ff8c4803230c628ae10d9b8d2fd9c520547a7fa62dd6cd7290a2a8ae0f8400a30d73103de2cf0554e273835a7f7cc6bed504b081b94298759a48c85d2cf7552da5e79da750ab0b588df90a9e9a987811c79b0461a411692ef6a619ab5d9f11fcb38f4dda31cefd2f3024c599a17f6d7170c48eadd7f1099a17f916b576ae8514e1973ab04c995ca8721aaded6f3e4790a331184234388b8054f935b15bdb20c374d7497e9dff9104a0637442f92e22de60835e6fabeea17c1c256aa92dd859017ee91fbd75f20c551ad79f0d533a839ae17eea6d57c62b65434a8df40a69f56227bd017649b3a8706b3cf027c33babd2456e805937c431326ae3ad91578fcf191a7ce1ab5b7300571a6267cd6785285ed59ddcdb049138716aab9768330f74dd747eabd87a32d5da225b6e584f2f65f7145d535b4c9b0ef021bb39b7c02d8c0f25197fc11a04e6a85e790ed6666de57d1e94203936be21be8247edee99561f0a7e0459f268888859b9afb284ce63408705ae93ad404a6920ee3babe4280e058166d22a238518c77f13fd07a5a146095033febd74d7bcda8db6e5f9d163018255ddfb14c2402df6081245de83484ef8eba0e6fbee4af21025dbcff250942c81fe5a7a80a4f985b7f2a7fc703babc16a9b693d384d29d052940211dc210c8a0bb15b0ecbce86b6993b6b15f33881962673bd1558cfb132d621b2c63188a329a1f260ccf9ce24e31d8791384d4c5bd4ffb197c7b44225dbddb4ffbc396ac64861a6bb273c24908d89a82848134c287c963aca7d715fcb613f82d353b148c0a1ae66a3b6e6ec4c4ad001cb60c0ca9535534be28e459b606900ccd4872db6ad1161a738ba4fe067d19967845fbec076e661a061838b974401a88d795c5e1177a37a46202af2e7282c6ae69dc38b41484d8f539fbc718f44962f8b05cf4c662a879507d0c83fbf18696b6c7d87ef012ae0475bbaff235afcd69aac89a258fe14a8b591f1ab5b70d94897b13e4dd308aa843519f13d98e5c1c7c0539236137ae14efe16419fc13796067ae79233dfc0a58e4aaa47ffee33697020ce703cc7431f89a1d1bdcea60fc077d5a339e09c16c71b99663f331bd1210975c630c9fd6d36e99b2d0df239819dc084edc2894de630d00669108ce44f72731b4c68bfa1078e2cba6215f275f36b6f6908ac47ceb29913255a597d9eb97cdb4e5c7c0aa47c7fbe04378d9f972b1b3324e49d284ad6d5d3f00e3e71c9ce296978c3a5af3144a77ca0b3ec043bdc3ee9f7f70439cc97f41222f3a60b4b00740a9b01ee930a57d7551170a577a642181487cea353445b4992585a9bfc073395e71d8278982fd1fd912bcf105a5e95498ba373df20122df5827d15282aadf0f4b9df2393a71331fd5cad29449944e52170fdbf815b9404cc18ad3054e2cc1c66f135e7ff1cfd94536bc917c7158ab607f09c5ba8569180778ceb3bc554ed6c40caa32988b80eaa789474bce408177b0b26572ec4fc48d1191304d0ab256c3199cb27de5e46ffd285e2eb9462d880867fe03d023560905acff0efd6419526a47faa37c26164b127283f12077c9b867d17964ab90d8e40c97c376b66b042818814b6ff7a15d39f64a2265c6b12c69e109f40e3fee60655d528117a555ee641217ce40ec12d1ddbf2a579a805e2ca4586b8a5cc90345243127264a24328ac4dba87f031e732ee3e676a99f9893f9688acd3f3e93b371371d472ed11f9059c28229670190a4cd9530e8b35dc861214745391cc8d037f9d4b968cae800d00e106da27689b50bc4010dbf5d6c3ef13ce063a78aa05944722e0eb7c0776604607424965126e105828cccbc10ca1da6d589aa5c9b69243bb2a7178302c3759919692b68952f57f91a4a563b0a34d60d6978354d1e403c08c01f38a6645140ef29573c3d21da9161f79b6af9ca5033673f7e98aece96f274c27b6075ac242ef08624cc728aa05407e79f55a22f05d56a316c38eaa4e883c18ca42194a186669fff9ad0a06bfc184a645a4fd02f73c184a8f5fc3c9200e0b1d3660845e7aaed8de8173ef5a56bc24edf7d517897fd3bf2057565e7c40f21bad81986b245fc53c050d6b4bd8e3892186e1760c51f05479ff1d397730d1d07284523050881b1ef7d53ed7ea41e3482de68d175fced6cfff238601fe95d87590563c944178a2f9ef8a3ef6684a38ed79e882561c13901afc2398469ba0ad2b892ee062c5060a46f8fe193d5058b8b36703f9fb7c22d72921f73ebf009ef30300a627bfd604514e76a7bf2e1126cff973324a9b5bd958423289b8b26b80bc09bfc2019d6f876ad534ee4e336a45aa049c1af4bd40d7ed89adf219211e6c66ef2c976879ff8eb1e94372b9d13cb653122ef72c0392c657cdf703ce0e250fc5263243139eacc6c1951018872bc99a222017c4ed3e0715ed592a668f68136a4ab825f0654a0083c6f64da71b3fb2aded9c2d82b27dc92ce4660383e604f9e7d258188a7a6b5d421a21b2985a095d2fd3bd9a25ce9d5c8e9b57d953d4fc7a6bef7892766e4fd876ee434fb3441244483a1461e76804a53a07f4d11eee0d0b0137dd65bb9a5bb0a320153bf9569fc55cb4b51f5f3d0d187c49771960110a2f19844e848bdc7400a9dff11df11b165852c1162a47948c94af7b709c8213b76e9cc729ce4239a371cf14f1dd2fa97fb2fb1ca60d78ef7c3e8ea1a0ca2740efa983f7247a0e200a081e867d9ed71c5071ef43c6a65c2b4491a8d02993f4cfd5909c430295a235b2eb0f5ec1df04de7db5cc795151c6c31767e9f54868a38487c124526644eb7ad12c5351f64a27880f25c550c0cb964c911443d166428b7fd642e1877a10ca1194160a05b46ab6e0df86ea3b4a0a4b47a8a20f54dfb72ac82311cab0450157e19918c54895ed9b0e598fa32c4af9411106f502d4b95098505ea01808a81b5201bd86faaa5f0532b2647495d14228c5849f69850c05f4996b80f28cd20164942d14825209655951b421992ddb04a806a0ac42cd84da0b545fa57bf8580b24b7178ab6a1e2d8cd7d49e0c06a7a41d96c14172923501c83ba2228a0a792dafbff44949f74f4e4630dd585023a216b571ba8beb45075251407875c452a298ad7593939564aa0d815d577cd662b7e5e51e693ead34ca6c27f43951f05dc313b5cd9d350f72ef80024b950a640d908a5e650400f8cd1f344d18ebee4920f544850b743fd85826e28e0ef8bef3a43a0801121508f151416a5051bb7fe0f5e47c3289c1808754f68282ea1e64059a7a829f0f6de6b0728d5a1e275f012acbc165405507ca1021605ec9848437e20aaef4e272f56a0ca4f28e02ab516c871545f459ae2437f63c81f2a4ca1807d90545caf507dd2b23104611c6cfc802a3f281d03a1b6824206a884a4c5627710cea44a71435d2928d9a0f03a90abfac634a8c9a10ef551f8526ad38ff95051a16c356a1b16af631c14a550d0a0ec40f10fb512ea2b281a50da18c5a0d4c942f5896250995da14c018ab64e2c21490a51424a25833a0d4a0d50c0fb426159273a6c098c2c03812be2436c954eaca42ae225cdd2d1ad0244f57dd602ca3f54fd87ea037c32d33854fba180e32ae27000441093d870bce9496ce635b6480d31bfd87241603894e2b3c7d4daec09b0379795b2555c3f3eb452b6cb7e9a36c2069c31485b8118591092ef4834abd8b43b3e578c251e227b32524381bd40d18475e381826ef8541824baa89bdf7f916c858801af02af03aa4c1a6900a57a4e0d8ac8909815c7a10a6fd9f45fc46511879eb402954a88838577a8c01991a2aaf614028739d2a29464050e2900821146a8f134fb0f3610a4288193b3b298f847e004da9a10efbba20c6895e8c090f158db7693cf5a3cc870db8f82e57182ac2cc67e10171e104a22d7ea46115418f51aad9939c1e7746782875377072ab984ca4c32fb9edc1c814071eb3b2ae160cdfdb8f77015ba2ac582a06b803a17512393ba2cd329072092fa036e528f6b7b4cf3fe62e07dbcfe29cad40dd1c9a0cf6754740881cfd977ecceb3ec17c325c42bf412ef14063aea31274e18c4720b017d75de2bd302dbf5f983ea6e2d4e589c3f4b67907a511df52fc8741341c1aa598581f16f7dff37156cbdf9701ab37b5f3be061d0017b8e8454e15c5ab1710efcafdca83708ccc64e3c9977573f7e085bda03062bab165e7219ef36dadcf1a2fc3d108b8f7ac42b81cb40321ebcf237bbac113cfa262043dd5a9df38a0366e4e2070a2d06ac200b92be4e5bff57957bab8f09cd0e7fa922dc52001f0e5d138a3c112067654eeef7f2b25fac1ab7f8bf8ad9be18024966086cd14b2d0e93114101536c8eba0fdc173511b77ae8d059d88d4779c20edb88be367fe1b60f7ebf631690df54d3a84ef487d6085aceb582e3dd70a30505587cdd64c5d96ca0d62ab7964aca7358c508d87b49878906ae1789e513c5cc72c60d250df313c76ab59ae8bcfcec4acc4c1a2750a9c11c63e0883785665974197307353030f75ed64b9cbdad2bbf937a940641dab04975b5deaf859148123a529d0d510dd615c97d46020d0295a0ad2524bf480291dc202d23122f9a484b770d74c3f9b4060b24f102be4a454c0d3970b46439000c30c000030c30c000f3b0b5865b6b0bd1b09452927b18d4f6de18efc40a16534a29a594d26903256b03256b03f11cc991cccb0c820de30c3b0dcda9109336eeee008e353c7625d40657f594ee16582007b4a0c1010e6c81053f871abee492b5b292c5a6e18d325a268acc7939a35da4f40d0e34fc9ab321d8c9276d06c719be6bb1a4953b2fe6526b98e19397e2748a95d6d311200f74191eed3af1c184dd978911e020c35bb1444952527426d50a2bbca8b1c5155668d1c5d96d41c30a2e6a708ce1136bb761a37556b28918deb4bca42a4eaec3f06d36bbc81e42bc55137380e18d5ae173b4430e4a6869a494c6c100066451838400068c0a02c7179e8be994c504d5d1ca5243061c5e783ca47bd174590d2e6a5c17bef85d293586929ff3e6c2af1f1fef99e476b548e0d8c25f993369f58c99938ae1d042665d1d275b9d9615e264d47231cd39b2f08924622bb8ec5b4c290716be90f1a4edcd8e2c0f725ce1b560a6949ccd7058c1f548966336b9b1dd11902eba2024e0a8c2a764980aa2735a8d1da7c2625a62e69e15aaea26dbc9928972533ac43fd6011c537853de3cc4b8d22963d2156c4aa30b0920a08c46175f5851a306eae21c6266000e29bc3a262a44fc12a95b8ac2d7759fc37c94a4927c1c50f874bc39d3acb5cdb127bce1197328d115aeace670c21f6b630475cf31b327399af009911547c759051c4c78d4a6681e26c518ee3cc2b184ef929a182fe294725d046803060c11a02b3894f06950233e5829dbb4962309078303090783021c47f8bbe236b623a88e516484774f4de49c64b8084fee6c293188202f984a846f3b291564433584d7d4d326c9c1e610c22774446db10ddd31a54178245b8a9eb098837ac50184d7bd4d6b7e089342e51c70fce059b3f8ad923b53926c8b2d3cc0e183c74d85af1511235ac770b105470fb4e0e0011e33deb21ff66e161c3bc0db00870ebe4fa17285d8163367bc3872f0a4d39d43662a37bb71f08830d184e6a0c2843771dce0512abbdd4c692a6005870d0e491f823578239b9588b162ce41c54103af535a5be5a472cce0096aa4480c12549c94b2b611200f58e105870cde1c2a43c3ba455a6fd53ac011834c295d61a5b1e27441aeb0a2ae001c30e078c1a3cd2e27cb498a8e460b870b78992b4fb9bd568ff9d1d6e3931c2d78de3aa7b4dfe9e9e172b0e0496a73c7c9b9c3b1823f2cc889f31a6c339792834305cf48bb18c48bcc90d849c59f4e3e465217838af74e4747d3b5593f944ef156c4982183d01a3d4b1c2011e000890072c00460c0c053001461c31456a76ebd6cee8e96a5783c88dacd19269ce90aaf6083147fe43c911331de72462bac051ba3f84b6bdace92aca4b685461712c00d51bc41b82515a3d9cef3b3118aef6b2be86c8a28216b6b8d1abd02d800c5e72d73ada192044f42080434ba400bd062e313cfa690455392231a5b4c60b3d8f0c41bb1b446884916828d4e7c9b54bc46904d7234cb894fb6549bf84c86f2986a94c420d39af842c7ba181e7338af3813cf58ba97798b62e2af38ea6aa5946c73f51258de8575855dc7765ab50ce7950d4bbc56b71a4189a4e2b18401c3051b9578628c8b264e4a52750d25be9170f6215590ae97d998c45f771b834d8e41370449e24d2535cb86bdaca43d127f9da518e25dd4f22048bc71f28308651f4153ea11dfb5e66ce61867ba71c4b7a9538aa9539b327a1af16b26b1a246e61c2e4b46a8deae9afb9efaf631af55693c6ba6512ee28931797a883955624745bc31e9ec38f7418978ce3b68d3398e7de914223efb5077db65ad31a518081b87f82b44441a25bdecc186213e9d1a2cac884c21de98f7957bf3399a2521b6ac8d6bcb3defac718f4f1f1f2732637c63105ffc10b629cb825e2788374497d98b2a3d955d205ecd3143d0490801e24f15845acd884dddf13f9c1fae0f06830f9f3a21ef94d2c1638a973d3c6b6331a64bbbace1d5c39f2398b69753e7e14fb2354b0ad5c183ddc1eca0757884fa7039b8e80411321dbe7455416eb4f09c2136873f3d62a4b49a9c593c216cc8e1f320447d9093363a95e2f0da88b89b166270784e2cf632efaae4e6def069b6bb899983ae1b6ef82da9101de1426dd860c32336661455df1a7a2b8bd56bf3162d39e14947a40b6da8a136b091863234e8190c8619be2c4227a13aa66ba30c9f92baae613bb941863face7186c46ec92ba36c6f0c950219e630aed74221b627852870ca9db94acadf846189e744226e549b25794d806181e4d32cd240da7c4678f3161e30b8f88148367234808950d2fe4e1a9b2ab5d65d9f1368c0ebb164fbdd1852fa78f257257c78557dc3255b8f156bb710bbfa75dd04ee76d68e14b42765016de119264d069541b58f8f43d458eb3c98d2b7cb22ee3ea5464d1e9ddb0c26ba772bc5185f7d4455b4a125490e951e1734b9f3285bfb3f394c2179f93ade79c6c0d391b51786625c8c70aa25984be018547beb594a9a44e6465056c3ce16d91fb106f4aa46cc709cf07138fe15bd384576e8368472a93b50813febad1f25cc2da588279b276d9b6f3a166a117c34392a94f9bdd50826f24c13790901b4778466da930a64447c8f986117ed99098846a5b96a48d227cd12da635254944f824a7ed67dceaaab487f0bda976a7ce11c2ef51de643be43682f05dd0b211e259cc13da0610def9ec18afc46ed6916dfce08917648653125f54906df8e0172df9701d4b1b3df83a98cc86cd90547b3678f0d5650a5bcdd3c60ede18534e2947ee10b0a18347e4c8ee22828cb9e7d80d36726087e9999cabe6d8bacb9e2e5d3169ac8312071b38f845459169c224a605b53761e3066fe69ce6a7a40861c3064fd818b46497b47acdd613366af0674919e30921b36b67143668f05a5022a6646a56263249d898c1db312286091b2a24a43664b011836f423ae911734ad3ac6fc0a0375ed01b2ec88d163c1eac6e8458ccd8a1da60015b2e6ff356a1b5ed9e6932b6abcdc551b1766305066343055f4cd5d070977593532a5e8da64abb86ac9bbc46c51fc4c55cc728dd29664fc1aeeb2613fb99293e1d725db3369e63d2c628c5ef21be857b7ab62c9318a4f83606edce15d7283e6b13c293da44f12811d263883a147ff61227429618b30517df8218a0f8839873d5ed24c309698c4fbc361fea1ac2aa9d85dc138f90b0b565215975a4af138fbc94ef18c9b3224e50216c3988c189cfbcd2c5f71839c7a4d94472435016160d62688233c198c04bfc395f379ee3754ba89678e227e5e21d4f659660251e1911c6b26bb058224b892f697bb42c555b9b27f1240fb15e41889278bdd229a973e983cc9948bc31b123e707a593ac380624def86943c994298fc8bb26e51211d711ef9eae091de3d88836b49e8911df791893eda644a6082de2094a777d694c614ad78a78b36da42f1147a57639116fe4144f28b962227744c4b323a9845e2c9192f810d5595995e5cda7ed896c87a8538dd91886783db987875c29570c75211ed90f5a22b385104fb2f5601f430ed1733b88374fb4946988be8751106f8be698a726c50499128847432ed39522bae30701f1e7f8906266b2fed0bcceba8a6cc8a8bbe5244488cbda0f6f32cfa282b2ab0fdf66515b321c830f8f696693515d73b668c7d8c31beb52a9245214956412068c462e6adcc5d0c313430a1da3cc36c4d331f2f0a6142c44752b3c9c2a9a991e56351264123ac81b499ba416e30e6fb62c3904499d36af12c30e8f67cb5e7a762510a30ebf66069dcb31c686608a410714c498c3c690c3c68803c680436ff6552917e944ca729aa96b8c37180c37fc1d674fe412537629b6e10b75276d3c4fee43c4863f4c6572b699c458c367228204f3988247ccc650c31b2ca55612d2186978e289bcf58c6f5fe18e81864745540ecd183b839a41cb70302210830c7fa7f388af4943129d638ce11d092f92936d50214b6288e10b394d45499fc536a87001de671e8667346aa6747134cc67c0f09b12694f62da45510d10e30b7516b1ea7a2977e2053def33f6dcdeee3c53b6f48219a30bcfb58dca4dad891d2a16440b1830b8f09a957b52d124456a04c58ac4b40bc4d8c227739596a443ee105b5dc1c6451606bbf080012386169e8d98bc529452f3b9845e684143021ca09100f6420b1a5f708046e101c4c8c2df65f111d6e5185878d37ad8b69c85590ebac2df7929a7ed28223e2731acf0e8f4dc96e4156c842e46151e5b2f93bb9b3a1b734e853fc85325aae6a974a75e6841e38b0fe81531a6f067750921099194955b91c223439072272263b449c788c2afa22572ae881ce22c1a5940e14daa3d23eeee12481fc478c2ab79f1d32a6435dbdce80f6238e1c9a5cc663ebc26bcad57964b488a31679809dfa71c2458a8d271935ec22b52936c76f4928bb112fe20449b99cc9427dc4b42a3e1ada35b1e7321694ef698724b46c217c546769eb6d42a92400f21c6119e9827bab4badd10c8628b2e18d08517354010c308df060f97e65537288fe10202ee821845f83bc9e87152d09231b27d2601971183089f7c0c2fead12ce76c1c4288310494d21c33a2eb79051b08681c2b38a0058dba36c307c410c29f6d2349534279c7d3acad78418c20bc27529ae8921bc23e05089fcaa9511e564f86177ff0b95cd27dcfc92a9380183e784597c4526a4bbc98ac075f0421b744f08e4147ca63f0e0bb205c34a5d5dd57c80e1e952a4b8e41b98a961a43074f4c13bb2e47dda4239db6a891674aaea8b147aea8911d17b0c262e4e091d55ac2646663e0e08bb811eded836c8bd11837303bd73c473b4df6b3332d9892bd20730eb91836f832f74d59cc285a2b868b2c68c080b1058d183578c336d6c80a4257c61c8306196306194306eb6bd99dcc7ea9ea8e7cee8c1922e6445306bfc6f4f1c1b339d629114ab4644f0f5e4b6b9692b09425de3c784b6b8a7b2baf93e21dbc93e4a99463fa5ce3eae08dcb2cb75aa3e2b73978a25aad8b92ef502a0e3ed7482a319392927483cfd66376b9f78ea7b4c1e7b9ae4bc6ee20b1acc19b715a7266a574251a3cfb555e5a827dea38833f4933cbd0a10cdece21c27e988d51b914834768dab19a2dc1e09315423ce5903bab4a2f78e7b4c58ee441853cb9e0514b4d22abd482af847b1ad121e6f8412c7847be33a810b4825f44534ace50611b192af86495866a4b764997547cb972a37d66ced441c55f5a1993929ce239512b9f346d8acfea4b5c449cb4d12ec59b425d4a139d149fb278ed591bea32a3782e9706912d2b8ab76b2bb34e9884e20bbbd414a54daaba08146f2679163f0439f5147de2af9465c123893cf1e4523259e760c163449db8556cc289e73c6b98b1644a49d226dea432accbbd73e990263e4d2aa3a78904a13a9978435b4e9069e92e2d9878648ab31ac4471c59b9c4afe9b926e96cea24c4126fd78913672e6f315e89672c4a5c0bd92dee4e89ef2b494e351b43287d127fe630ae224a9278e2767a767dd24f6d247efd122156d6ed1c57487c3987492be95d2beb235e77cf19ba444fa713b74fc9d1d6cc46bc39d8e6640b1e463c32215e4aed31a52c9e453c96d7c12ca8b08fef28e24fd1926ecefa25e2cd253fa9b421655e7710f1e98ed5a5b48e309d3a87f8be5358dab829116488b733ac838c92569f5488b7825e860b1342341321fe2ab529658a6a5a6910bf5d08a66e766e274810dfdd87144c6a02f1d98c86cc8ce94da901f19a6a92d13d69f0f8fee1f1acb79edbf5c39f46c29bd97892a9f6e1cd8c0bb9c47cf83b524c95544aa32feee18d5da564d0cacb281a3d3c2635bb24f56e1ede96103478fca04668f0f0d76e947439e40e7f8a4a913526dbc9891d1ef59a7418dda24e277578434e880699a5c31756151fbc4c63d01c9e17cfa4d63ced592787df5208e238bc7769a2cdae02873f82c5a49523c878a737fcd1b48d0829b9a28edc90d2f1466d78d6434b9494e6f43a6cf8e349125126562cc9ace1d98a8b39b8a5cc65d4f0e8da5d9bd4d3f0c94898c939e88815343c498a9abedc55acfb0c9fd0213478c96a86f74d68911dddb4ea92323c274c2415534b86777682890a2927993486ef44e45cbd3b43520cbfa959c67ba5f85686e1dd49a1f345c884d70818bebd37b7d8c9d12c5f782f964694583a453979e1497b5153444a173e4fa584527ae1c223c5620827848a9d2e5bf8444d8cc7a6132242b4f078a630363ac9c267693b258c08174f8c85e744dcd509e34168f90aaf5889910b5ae15dbb88954c6d841457e1d31a1d2f69795b7da9f0a8b8068d1974c2660a8f9aa652f83dce51f86c3ce3267b7115130a4f582fdd266acc547cc27b5a32e9a43e778013d68a217a0891263cd93393248f29c257ce843fe4b4636e4ac75e96f0a92c32d3544809e8876a250b4f12de53427aba13a3c37590f0078ba243d68ff0c8284f19e135446b8cf098d8892e7227dc224578846917391d6f22bc26424e9fec21fc6a31f563c5739dd842f8e5be4dc26bf418bc0ec2af3a9a626c5492b03510de7c97245fda5ddbea1fbc21a8f998491626abf6c1235d72dc8a0f09a2d4834f4d33883823c49989075f0ef165fba51d7c2241c64b72951f7374f06c4cd9264eb4a8f2e4e0cfce7134979c868cc1c123268b8c55712589cd0d9ea472e64c9236576c6cf07c6e5062b252833f874dfdece626f34283cf52d2b95308a12d93193c59c3ca598a59de11193c296c3c065faecd9a7307a156e230f8dd4e5a32f5f172aa5ff0c8d77b494aec82af4b899a529143b26c0b3eebf061c13773a364301dd24256f0eda78c31c61476800abef54c2763dc88131aa7e253ba1b26e34e95588c8a2faa581a2fd1293ed51d3fcae490203ea6f8a426351d9a64b6f794e289f1664a66cec48d90e25332bdcb75dc598b8ce2d3dd9d837a8ba09d8be28fb77c0da962436743f19db460e515507c17af43bad55049d54f7ca39425b51e94edee8927282d0bd1ecc4dba659e2ec9cf8835a0735ee41c8346ee2d31916d2d39a7823789c949465e20be7163283b598782f4ea6724bed25de3456ea939a51722e6a894f6296cdb6a7aa34ae9578936508b718d27cec4a89cf2ce3deba75dcd23a897429b98c316449bc2929f34a21a36929128f16b348218a557a17129f99e7660c6b2a7af2118fd022de94aa0b6145477ca9544f2dd78863455346fc26b3a5eddbc71c365dc43b2ae35a77a58af874e818fb612ba4494ac42372aea78f9f465210227ed53cd92242d7ece8109f69dcda0a399957c8104f1c9b60eab13a2791427c372352c256c41c2784f8ad2e7c0ce9eca34b06f1a414ea4b347c7c520be29127268651e1116b0ec41b2f5b909d3e4ba41210dfc54e79e954e86465fee14f39c77dbda01f7eb54bfb213679c4af0f7f5297ed449d90f1323ebca73e5a923bba29690f9febd9a62447548a2bf5f07869cd665a175be7e1d141ae6e3b3cbc76496dc795eef0bdbb8edd6e875f3cf3b225511d3eadd1922e95428747c2bc76b00f326e670ecfe7985383d8f3b491c3a395763aa714956b13872fc596a44c6be0f055e49c91d206dd92f2862f4db0a02e57dcf0880f16422a35ad41d2863f57a5e79891e25267c3bb37295897284d915ec35769476fb278ba1456c31b5b5395a69b862c835a9c1841c3df1d7225214c7b86374c8968862fe998a722c96c218858864789be6ddebdbce6900cdf579aaeb8457a4de118de8bb0a535464814253120b206399fb3280c6f0e9abdcd2d734a1118fe3832e6a0ed72290b7de14d1715375667e9315e68b5b3843215d3856f4b08ab149a44e95cf85543aa1056637cba6ca11453d6a628215a784f5810b38867e1f5243685e9ede86463e149b955a3c3a5b25caf5048764b62aa5ae1f31094d229c1d32dadc22f615e74769e5b9d47855f2c83c89882bcafefa6f06d0c21d16244e7f64e0a9fe9c88a967651f82cc35a6c0ea2441841e1d321d5787ef854da79c277422e8bb95e3a75a9a2ac65758e9626bce1923ee81843528630e16d537b6ad33b5be54b78bc93a750b95b1563253c49438825ebf3e5e224fce9a275f32d125efda03c46e7b860eb113ed12e228b95dc0fa619c1946732c62bc23793d38778e7b83124c2ef31e590e041454543f8ab46ab3b4c959698101e33496145e5205914843f555c7acef171546540789328713ad565cefb07cfc5cf98b4e483af724e0f3e951bb39b6d78f06a7c8f31bb5ed8a0b2833765c95673161dfc1937764ea7661b9483df7385a81294d06c090ebe9044d46c127a72e237f8722e670862dbe0d5fa8c315483479427793795f4121a3c72315e66b45c7a5b0d98c17b5aa54a5e96789a560364f0e82043d83525eb3a560362f067fd589b32ac248cb58006c0e011de6249830ad5a0012ff8636e37534f55035cf0954ca1b4a48e72b96a400b7ecd5c31528abb012cd8f2445c673e73dc4665d44218ad90080d58c1675a2237be681ba5530d50c193626c0a9589f29a351ca9f86d5552b874f9984d68071ca878754fa98dc59ca8949d43acf0825ce1851522407b35b0a0e185046a5480e3144f2e1b55614699aca498a2fa4aea527079da299a66eed5a94da9927090e2cd4d0f725425a4502ac728fe2c13cf96ed0a364b0e517c3b416ad6d4553942f165ed686a58861319923681ac2f7080e2b7fb4a29e4bed9e96ce6273ecb16826e93d540000306871a08b00b1a5658c1458d340e4f7cd6b162181552b0ed148e4efc41eda49aa46b2d49e1e0c4e75d762908ef5cc1be894769d8644d2234b3d6c41f62564dfa3196d2a965cbc46f9ae5356a426832f161e25591d49d6ee3de97f8c49b7eda39b125de34e954885391d2c9fb0ab64a7c91f4422d6992a5275fc17690158994f8ae4355f4f8aab89cb1c23cb07a5c1854036f129f699a9b8db93d889cbc824d124f7293616f52bb0fe088c4179711b52caa56a441e2bd502976bb693d911d7dc4775a3526939b59eae12bd83a79f14599239e386a3a7be5696b93f1420b1a5d70e18df84d8b0aa984e7ce57f30a363c1a5d78918c78efd2c8a870af5ab32de2f5d86d29d9aa3514f1e5d019f332cff4286e91882f93055d394ddcd67588f83a2c8794a9726a0a03380ef1e648123578c9b9904343fc5db23226950e238285f86b9465d87e12b9b224c4e321a79a161f4396f60ab69600c7200ec1a3440b2259ce04f18cd96cf22e75201e152c54d098d3ab6e740161028e3fac07871fae0f56181a5ef0a1374ff5d4738ff7b4b038f6f08c8d588a312cb36aca7ae8f5938538ef9e3c7c32e688092bf3341e5edbb11ce4a72e3131f700310679e00e4f768d233f6553425c3d3b2453e414b39c7d6645d9155c87b75d34a5d66cda448b586041c3013060d0e1684123045a7c6185163438804a0038e6f0bcc690e332e6345a7639bc36a955e49c9decdc761c1253f39dc2bd826dbdc822610238e070e5bbde85abacb6a8e7ad098b1df5339c6ff844caa5562b9b36b9e4001c6e7854d2a42284996666aa0d4fcada1d728b2775f2e460c327a40166517b3a723f037410e24b41c4490f226a08cd20fe10963a778ea74310efa589e9565326132e07e24dab2016761b9f2d02c4a35d32667598f9a4437f784d06ed94d446598ac50fbf668c661513e9c3a3d4cc7e92493fa914f3e18d8976290529e2a9b27bf8e3744cd99d6ca53aeae1b1bdaf984398f0249287374653845c140f6f4c59df4da75eda68eef0c889a0cedd4c6e0e133bbc295cec7c30bb0e6f082256680b2e1dbe9826b74651c97256cee153234646d68f1cbec8317c5a4b9a1623a8b12be888c3a363eab041bc8e707843673c1129e6942ff71b1e913a58ba503976832272365aac8b6e1bde8f995b1bb2ab6c7847c4903d2c8c720d5f48a23c7b8d0a21a6acd0a186b7dba497900f49578464a6c16074a0c16060073acef0990e559b293c6678cc8367ce11621b1d65604107195e8b29e74c2eb120650b2c3860851634aef0824608c6504e234b7ad0d499f3420b74458d2fb86031bc5d19a27d590ec1c20a2f6860c1458d0ac39b6ff1a256e5ba205e584103cd1bd001866e53c52b54776dc5f434734e416b8641d0f185472d784a72d34e82d279e1b7781b266513b92e3c6e392a2ca6f071e1d96015ddb4bcb3295d103ab6f0c4d19341c9b61d1d6287160c4647160e7560e11595daa29a542b72b2e30a9b810e2bbc26266d5acc1c2ec55a85ca4b56fa3aa8f04b8ad14696e59c36a2bb8e293c425737f6d53b9448de7548e1bdba91791383ea8af75d47143e11f343e2a7170a6f288da5bc3427792aef3a9ef0095111ef3a9c6030aea3096f84bdea5822295519b9eb60c27b49c42c1194659aa9742ce1ef389aa2d355c2ab23db32e694394149f13a92f0998c89f876425a04af03096f0aeb75eabcba8e237cf316ab69df19e19da417496d25679905afa3086fd8a4bdb049850d9d5d0711be9ca3a20595b24d92a02bd86ad050ab8f8e217c2262e6351b5b62f43a84f0678dcf531a315c28d17504e1d3c1ae94887931c47c78d701844fe50a6b5e6ab46e4a76fce075bb1cee3955ae60630c74f8e08be8e539c99cd254baf4e0d9b3a83549492b4b9d07cf04212997081d2dceddc1df2e96738caa1d3af8c3a68f5bb92022db771d39286e3c8d47a103076f5633d92aa33a26583778f42ce574614d68ec58dae0598f983cc818c3e2cb66838e1a3c2296a7ac6944574efb75d0204dc70c9e3493a326a5b41f74c8e08d6cabef0e3a62f0abe7a4728c8d740f3a60f0b969125549cbd3cba8e3054f10b741db6db2c305afc58fd6715eea68c12fb2928e9c93f8041d2c78727d3c99cbae2b6c1274ace0d30fa54528d9904272fb800e15fc25e2de79c68f273f8ca97882a97311a36144c51b2225bc6cc7d68e1c16859860c6295c30c314af8dcef15489c8514f34a3148e957e56789ecae6480ef5a022c5ce8b19a4f8ec354712963a57b0e904668ce22f1dc476f46a75d38c28be88d1c62e4642f15ba5b2ac55952a530e8aaf3d44ccb9d418259e9ff835de659714cd2179cc139f4a369d836bb48a4ebc399ac9cbae6727d77106273e99b12e299d273d2bf9c58c4d585a944e7531d99a3598a1897744dc15713be954726b6c6146269e204cce9730e12e6106267e13d5328f2ae2badc4cc28c4bfc7a42c94ef0cc79a75ae2ad385aa47b500d92b242985109833183126f56cf10bcc2c8a87a54093326f1bd7536a163c6d80c49bcf1547613a62a069339126644e28b35415e4c972aa8e620f1c9e8942a893d1ff1d55ddcb27ccb0c477c417612a7dd72a852ea198d7863d41c94872034cc60c427eeb15e46ee457c172589efb4db514fc2809ca1885f434c1d447a6bcc4844d95e3e9b4a3a57838617587c31c3343003118f0a93934a37f233c28c43bc952c62aad89e7b6bba1986f82a8c279d4db56e449851882f83f414725244f010bc1984f8d5744ad1828c6143d2660ce2f35c325272cffa10ae9c218827675321c74264b0b409c4d74128cf4b6302e2314d323f088b91bec27f782c7763f37370861ffed00ca75d73c8395938a30f8fdcd039477ed76e3821088a30830f6fc5b4e1d4727b78529784f021b246ac872f97b6cada0cab55c9c393a4a73221aeab123cfc3517ea34bccbc7fd0e26535a343e9decf09b0e4a588c6a1d7e49153cbeb7a68597e8f06b7c4dba32d6c67c0e9ffcac11b358c7db8c1c3eb5908bc33b162ae7d58be0f0e8fc6edd94a25814bde10b31536a111a3e7b8a1bde1c355ff5e46d783349ccf0a859c3d96c7882cdc414a7a9239a6b78939e85e9cea9e1d1a6b65d433b69783dce94509b1d34fcd9b4dd9ae64b78d3193e9329e5181966b531c31b9e154b4d57066ee475b3776ec8f0c9f66cd1728fe18f714f591b269cd68c18feec165ea54ab8865118be1dd9721b56c46ee6b6ae0fa274f285ef3b8bced12652dbee85c782984a1e77e10fd95b4dee2b5cf84cb59b50a9b4852f839bb6dcd93e829016de0b226daacc66e10b72193d2b3e9e45b1f05c14f91ed4aa5acf2bbc163a5bfca02256f8e3a4d16aaa5485773c2dc6fab853e13b0b973121ea5378765e4e2d62cd9dd2a5f0db061977722c5d4d5178edb446bc4856cac586c21b74567671b19ff0c838f264823621f3e4842fc692e47c4b13de52bb49a8749f2e4a98f0c84e0f653ae6257c9526ebe24ef62e2d2be149ca74d74c8c93f0a4524a3b8a875b8990f07a0e234ada6957748ff04b2c59b1e8ce30c21bcb53bc9c639220c19d51844daac690938e4b84475a50367ae10ee18ba246888d39d7a56a85f098984a1da6d4ee2405e10dd1e6421297c1c4048447c3daceb3f383dfab5d636cea9b5a7cf06712152ca8075159d71e3cb6f61a223f3e68ac3cf8da457e08dfd11dfc9e9146735e5445930e3e8d9c538a47cd543139b0322c640f9dc1c11737a9ce8eb8d0b19237f82678b7a734b1c1a71a56d3c58eb061aec1275f4d571cd3a815270d1eef18476b44b7d46ccee0f3203f563ad369839a32f822a570418c8aac1d660c5e51f998d2ac69b82f61f0c7fdb4621626061df48293904f6fb9e482b7c28930f31853765af0cb8d701b194b4f7558f055498cb9cfd9a1352b78c6c246c82573926f99a182ec32737a49482a3e9d3cdf543b07731d15af8c16593315f2427b8a4f04955f37c2520499e2cf5315acd24d783b4bf1458d9693b448ea3ba478b62c538e883246f15d6d1076eb397b7c4e86281071214a9375425147ef9cab2da0787390112a57f2894fd2e5bec9dd135f88ab614e4543dbde893f735c45902ba2153c4e3c313b949bf8f6d48a76d69d4ae169e2eb38e5755dbb164c9978f4be2e679830f177e8b8b6184b133197f8254d32510b93734e4bfcc9330429614582a9128c5a8df631474a7c4a6c4ef3e1b3497c9f53dad6d64c129fc8b9c564689dd44d24de8c9f649c1c6c250789cfcd4c06c916d2ad7ec417a9637aaac68ca075c4fb21b987d0d59226ac46fc194d8664e1a38cf83e57458e9774225d6a119fb968b1b8a8a925f6a28884129d3ed535909188378bcdc7cb5d4d95510d21c840c4f39d1a3e430c216b73641ce27dc9b50c433ca32e68f7701b2fb70af1d6bc750a1dad50221a822d1400034608b6e8a20b1984784210f195b2ea2542963108d4abf6355677b3c4d46c76c2e61cc2bddc476408e28f9f4daff693a76e3410efa41862988ead0c40fc4147ca059d82da5d8b8c3fbca764b4cc39a7cd2dc109c8f043af21560e39798bdb32fac0ccdbcbb5ac766bceaac909e11947864c9e1e3efce521a89c63a9670ba33dfc62a6b96ce7d5c3b3a932a5adca32f2f088f08aad31153c7cd71a36574aea3bfc1d13621a4f96c2f203820c3b7c523466bebe86b9bdbff8c0cba8c3173a574ea315db64ca65d0e137a54ec48a0ea52fe92bd856c61cbe93a317b28478c9b2f9807539bcdf61694e43ea94d912875fde22c4482f3925ebc880c3f7123449af8b0f20e30d8f4873724fb643da4fc3806168d490e1866fde6ac3974c4a4ab26df872e68c39e814f40a03196cf8d42ee724a15a475d8e16c8035b44004920630d7f560f624c4b8912299f40861a9e182aa94ef7140bc202196978435bd8523a6dda09150dcf85e78c2024a652c13cc3fb56aa32f3725ca40a0d2fb0f8628619deced0699e436820a30c5fee5dc832c23cbc4a810c32fc291e6209f1dc359efa42c6180c460c1962f82c75bbe8a444c89b29230cbfada553ea729ac6b44f06189e9caf9a431292f18557e36268ed09d5612c32bcf04efc2c31e986ac0b8f86d34eb184cada52315d7cb10504b020830b5f925124be8b95ae65fc0b32b6f0a9984337c4a89b93526ae1af14bfa3a51ba13a7604b220230baf07150d924cbf72096941a3ac61c1932db2dd2e04a58402195748c36a7a0eba6332ac80b6abc7a5bed685585e579d8af193d105e20007b6c0a20a8f587c55fd2c61f162a8f0490d75714452a7f0b5becde89c2885574c9654fd10b9df968c28fca1536ab5aeadf4181ec59701856f466ba5ed0cb15b2d1bc878c2972226b1b06f4f52e484efde42cea9142d8594263c7b2a6eca4e960c267c4a48cbd033d112d8f022c45d881d257c424527c8a4ada5d22b23097f3a8bf079227cb0bb91f0e9c8778ed1621947786295ae54a5b22bc3a8001946f8eda4e5a65e6691d629c233c24b87ba5d0f2a6a88f047cc9d7267b3714fe2217cc13598d2483a1942b0464635b4345d3c63372e978e95e3ca74888c20bc29c7b05da2b49a3801e10f1f265706d10f025564e1cd15b7e5aab444124958f8d3db87090b924684d1155ecf8c22be82989c52698537892472557843e89846b97754e82aa6b05230d3401551785c53885d27e6a23aa6aba8020a4f90696f36ef84360f3de19d306aaf538e55273be18955915582480b913b4d78dde466c562bacd6861c2b35935b1ae3a7a477c094f8a41c3e9c45a09dfbea652a2f622d5be4928d4c252c632534354e7e64be890bc2b67b70a24fc6143c24992e811de204be33c3d688437cda8780b3265162d16e18b9ff27171f12caa20c2ef193f3398923272ba21bc41988ae9b54d44cb4b08bf4ace784986460d550401ab0082c1e8b31f3c2a778e26d28919bb241f3ce982b8198d911efc3a3163e7db6689d155c1833c2eb64eac4ac6d5f6ae62075fe5f8a1c32356850e7e316d15371563e2761450450efe7817ae4a5dc43615c4c19383976ca7a56cb2390b54718352afe5ab5bbd43639a52216940153678a2958891f4429276961a58b7862a6aa055d0e0f3d072dee95a764932832fe84a13b13027592d11202d9483035da0197888035da02cca3050850caa880129d5daa84c17555551175b98125401833f768308a5b3c4cf667ac1ebfa6a5b59cde645ec823f6b9a9074a6a89653d8822fd9598953d655c182b75572ce694f3ec88b2eb68000175f1cb4002954b1822a54c098d5e669adadc53917591864c0472a3e0be1e24ec9d4156c858a3f7878be694a808f531c8c0f53bc396791d81e6125673f4af15e240b172945a4f832566c8b31b6d97546f19d0a3d91494450b24244f14d389795a069a98342f1bc784c72a3a90e0b3a289eb72451db63f44a263ff1aeddc59c95fb21754fbce9ba44dace6127fe24b643f2a0641f9cf82e9e09b5ae9d34537b051bea8278c06c21c303660b2cac08c1c726c81eebf5e2a3894cdca626b57755f89a60e2129dbcab7c7db8a6b66e65695ccfd50a041f96f8a8c4237232e5614785127f0c2a8c8831dbc7248aed9aef4cbb5a1206e32312dfd85696b81024de18ca54c94b4a5f31f208fb70c477ab559d23a91af1dd58b99d8a958714fa6004319d87f435da56318bd072d6ac0e9212850f457c3926536265dfaa5b4ac4efadfb12e43c87a81744bc17c288dadab2eb6039c473b1469c2eada5b3d786786b45a4368fa042bc7147cb579ce40721fef4a63be868bcd07134884a2ceb64c46a67cfc2bb0f417c9feeaa2926c8fba4a2153e02f165d161bc462e57ce38207ed979d99c43f8f187cff6db3bb6c7331db27e7873f2b871b5a03ef0a1da19d51391b5dbaa3ff6f0a18727c5aa8c118d29bfe479f84ca8951257ea0f3cfcea416b94cd0c4247f9e30ee88ea3e6b6b4c35be962b00c39b42d643feaf0de48dd90417caecc9905727cd0e1d14975ce95d35dc156bea8610ff898435719bc948c7c597cc8e1516b310551955739be57b07dc4e1efac18279d8cfcb43a1c7eaf145616821d1f6f78d3c92477c1638799a6566325f0e186428a7231dae6ab858f367c21d5e8b07b932306dd103ed8f058b00bd9ac69e243fc8b8f35e0871af694d26d850842e4011281da2ebce0e2230dcfc4781ba651cf3d86d090b7dac7be98a7fc7186576418abd2b93eccf07d5293e3d7e9a30c8f9a9896b9a5a5a45dfef04186d3e54e53afcc46f54ae7c4868d7551638e083ec6f088535519be73aaaae5430c7f694bb2c3871119a3dc85c716e2230c7f18b9f1b34cfe0186b72ba40975d5ef242700eef0f185af4505a1d25d77ecb278e1919254cc98269a2e35e9c21fc38cb22816e4c2f3d6417b578c9264a740f1b18547a9b48f10cc44ced6c23b22ca54c59832f09185379e866e8671d12693b0f0dd6889a159d4c5a68f2bfc36a946c5c447cdcbadf08b4a8b9524b68f2abc6523eba12792e6db0f2a3c6283444d1a6e5a73fc630a5f7a0ae2bdbb42ba383fa4f07c340d6f1e571d4efc88c27ba2d387d6eba492c73fa0f0a895358f2d2735e4e409af79cc2e2512be62ae0f27bc25d752f292db061f4df864baad29afccb6df71177c30e1f7b4656351527b951671097f4aac8a5949e63659232ae19b6dcdba253d468912c6e023094f900b4df5e0e999638884276795c5ec6149c96ce1c711eec308f751845f47c8d08f16bafb20c2dbf12ddd044bdd7d0ce139dd7a3945d0eccc9e4321bc6e1dc25a489ec420bcf153d4cca8c93e788e40f8da6b72b00b3929ed14dec70fbea0f1b3c6e4fcc307d9e7558986d767e6ad55122a63921fbdc2c0470f3ea53b2d8d34117498110fde2c51396dc81d92f2cc0efeb62c8f59eab277bce8e0ab1836272d113175c973f0684ba1a44aca070e0c06043e6e60303e3e6cf0cde6305924680ff5dd470dbe1c62123a832ccd163bc40f1abcd93429499974f2aa93061f33f8433d92841854d2a5a4991f32f86545bb884a23d9e4ca8f187cda630857db3d3f60f0c43295a33d3b9a08c9b28f17bc295d3addc1e21f2ef87310e23496bcf4714c2d78626acd94e2e82cf85a2fbc5a688bca58afe0cd091f3f7a562ff850c1739fd4090b11cb54180c0c78a0c260ec29be30e75ef1b6ecd5ac538287293ea96b596f218460e273578a2f4737cd9a49a998f13c101c290cc65da64ca9f2b8cf7a8802532a778e4728bea03cd7e46790d67980e25911dba2cd922eb30b2fb8e8f0f84499277ecd542a8ccc21898e914e7c2aba7e9a6e91136fdc5cdbe7aa858f3b071e9bf883855cc1d6e3c464250f4d3c42a9e5c68bbb4726de158baf533a5c36931ac003135f8816e3798a6abaccb0c725feb89cad2c4792a620b7c41782b99e05d31debba126f6ec8ad98a9838007253ead2fef9ac469b4f14ce213d1529872b548e2ab38d9ec3be42421ef48fc15f3bbcac2d3eb9c90f84d76d29ee4a93c1ef1048d69b6fbe19459301da18d782e624e26b54c4c463c767b99a487746945c463110643119f973a994e560a932ba28978bb9449d34ff39c5c0f44bc15bb836b756a99c83d0ef1dcc9aeee78a5d2caee618847c98d5ff14e0891e2eb51883fc5ec39e8949a249b998507211ecd9c1e6f259b1227e33188dc80872038100e88d7daebc47bb4ea903223a0abf0f8c32764b68e95844ed23dc90f4f349de384062942c94e1fbebb141e5a62db59377cf82caa876057993d7c195ded4a697b4d13d1c3f729ac449b1ccf43cae37a490fb7e3e1373ddb4b35693bd97c873f7dd2f099468814846c8747e7ac9094aeadc3a3e2219e5aaeb292e8f0c7a964c144eee6f0898d41e46cf090c3a772754d2d76557d280e8f32a95ad94d040e9f14b9a5b22cf478c39335a2855832ec8627a49129442ea612f1dc79b4e1499ae221333375bce2c1065ec3d779a5a455785d135935bc69396a2b43ac903546038f34306a5fa667e2b2e9f672e18186f338c3f749e6e831358bcae43cccf0650da2613b2c7894e18f09516b2f82a54f3719fe8cf5a431188cf4104386e1dd1c12ce745307c3afa9b2c4ccb1228dc3e30bbf575c6a09da1d82a660c14516346a74023cbcf0ccd9a88c9d2c050f22e20275c1c559b747179e703759cc84ced0fd3cb8f0ee87479ad81de344cb16be2cb13aaf437bd05d0b06c3031e59788488d6abec2916ac0e3282ea6de97185277e94a054d2d03666f1b0c227623a4aa6144a458b3caaf0754a379d733a157ef710b4b7a96425c2e531050f29acb5b11a1ae3317ee1118586c297216a7acbcdd69c464ff8d495b8e6881f2733c7097f6c4b154bb7578ab69bf0daa6144a786ed2a24426bcea61cd35d9e5b1844f6cd64b597457c2d7b967e264c45ccdad47121ef59dea3372aa1431bb820712de245244f7a445c428a1233caa53c39d482723bce12bad5e6e6207d329c2133ceb5827612a265e22bc2a2ac9509d417392dd10be60fb71b497e5141653157808e1ef18b23a62d269091dcd091e41783e8bc85a1e439a991810de143db97774cfe8b92fc1e3075f4e36b276ebabcea3eb030f1ffc163f291de452c9038f1ea0070f5e3d3377c991f4d8c11b2eb88b5529ef4a1b7781870e3e310fa5d47c25079f0c3a5a9671aa070e1e195d2498f4184348793d6ef025152bc9d34add79d8e0f19a71d7545777ab660a3c6af0044f23ef9a31e9a5903d68f0657c9526adda81e05ae031032ba6a0459eee3442c14306dfca769dbc58858c33067ff648494e074f592ef180c1a32667f670626252178201e34020038f17188c082cf17041b21b5bf1a27962579679b46059a01e2b600f15bc659d26c42a2566e8a4e2d122e65b42b890828841c52f23ceddee2b9496fa147fd03141b907196b9b4df1c70971b3a4b0a43a568abf3424116b4c5be3a91da478270795328d5ca92061e4a263147f8ea57a4ea2a9da41a2f8647edc98775b1773ce42f1a54fda926edb5a6e490728deaff8b21983940b89f9c423e9740e8d99f1c42bf1335be5a85f6659ebc47b6e1e47f43d89b5a78313afe598ba2e3a36f1c80ae125557352bb45137f84abea90ae45e8c464e2edee102d5ae6a4d5f5031d98c84bf05182121dc47a3819b6a0c3128f051d9f61938d997e5889c755f7eb25c5709533644ae4a5bd3d650ca9f3ee98c42e126c3de64e0f72d21d9230181be88884c138483c66ab912ba228f9228d8e4714e373b3c71022e646d0e188e2dbcdb3ed744fd3beed8e46a4d236478c71c4882fddd77b8e31a3c79359c46b1373ec5e4e057428e28fd3d09bd16a39672911cf99485a447c192228b5f7751ce21b593198aea82753681d86c8c6bbbb4d4645c455c7c486353329263ae98e423c2eaa058deca8044de602e3c1582c1088440271280ca2de1e00b3130000000820904562d1783c4de44c311f1400035d28162c282020221414101a1c14180a04e15020140c86c1603018140c0542a190a02a12c3371d0bdcd9bed382a19d59ff6d66a360de77929d397c30569bda9858ff06285804e4d95f32631d4ba292cc172b98cec672b93b00c445326ce556716af3852f4bff6883440a034dc4dca71ef9ad341b0a3348dc8b90570c1bd3aeea817db28eaa9a83caf60a0bf4835dcf4cf5217a6fad6bc3d4734401a76d7d023abfb90b21868eefc50bb874a72fd62aa88a18589b97b81d27ed5f4e373a5d7d294309b1a18c4594e1169d5ae46e096e57ebcc675b717a445439d7a0e52c7df74154ed89e7376c82310545278e089c498dd42f7a21a8cab7c1b4320f454311638b6367885964c3643b6c1ed566cdde183052d8c47ef61c368e0a46f71e344b53fae39281830100ed8264584930177f828984485675fe89c103936ede3fec2e31d27fe28cef1fdc2a586fab5eced55b036f9f59afee130ca59fbd4aa211b57aef07a0d40bfda76d0ece37a4ebc6ab3bec5dc9494d08a35a07dabf07d702665ab2cc043b39fd68668d862058a6a9eade4c99d1cfc54d6aad7509a7d03eff4c77cd5e2701c1ee955544be804218ebe8fb8f962957afd87ff3a99ab927d0e04c1c528ed59026bd0b0f6d0794b99c7abc093f80a94bf4889482a5b183a6db4fb825da18f7e1752e7e0033b3d86d7e4508d31b385c875c030934ec8ee92e895115c842d14d1aa87d120056a27e21622abd4835cc856e0ddc15bfb5874ae235182541183d00747adc77cc5435582f7661a06823fa4bd9a59524b9672e8b12f9add93d35667509b6ca56e559fe3911eb50fff36c5a9730f78b1ceda1b0f3a570590380451a9ff8b6d2336acb58af740540a82310329cf61f7921f3891dfb05e50c5e91c3fe98d9154917929d60633901cc36be0c1b90b1605c66ab60b1fe79402306e122142688f02374f070f6aa682ced195a8c779d2cc996caa0b888c95473305ebb386a8a47697e18905105f4a941e0689cd54c9ac207e6edaa881bab8f8fd08471318e3cf2f024aeed0353619db8dc5425846f157d0be59698af73af2a7ef2d0f078524ed5184aa7efdb5284da4a403459cc9ae029ba0649e035162d305e8b6a65c97156db4409fd02cda951ae922a53f0756b40408b16e09d4a6325838ad8d3c7dd77c9499195a74626dad709a467d4de1fb42718ad3c9208d143c94b1a5c7d6da3f9107e59fa9dbfa3782ba187deb48561d1c351fa50edc16212f94cebcc6d579fb7e886842f5e85c3fa2b0ebb105d12d860b51d3b682b4e4032be17a3afdb7318eb82490a625aaf558bed86607a48ffd91a1bea748a7dbecb3015cc8b0503a9710eae882ff5cadd3641a33cec5f7b13e326a6e83ac9825852ca3766101af10c636e97681d25e425b58a6a98e96a40ec7b3178b9a315ea7dbd9db23809c2260dfecf8c1843bc25205cfad6453b4d05f6b57b144ec82f30414a2f30acd87c8a5550bc2c5f7992194d494a97fdae89ec1c5deb6d5952022cc7c6c0930736250057522f03a69f6128167cba6cab4fac0f878ba00c99e8d23fda18f47aa7a62fa9c3e134b3050fdc1e33e9d1ccb1cca665aa02d95ef17121ba6033e462028c92b8c690e663c15d8d039a62fb61dbb29ebe18d421d1b7d368c84f7f3f009f4370028b905a9a547bbbfc42340dd28e1a8d47b4f5f1ea1154279757a4a0de297be5c062867bdf3757be9b29f79b8f3c76a22af71b2df0248deec4e7b03117164be8f9ca4148456f6e71b8e5a177b57a08721fbf6ae171e33b57c4cb361bc65cbf6688ad15a632aa26f8644b07bf1467159773f1e6bf6c6dc32616e05eaa70af04f85eaf40064f1d875d3154a9b88301498665f96619415db06318145cc1b7e529d1448418ec7825838cd2c98aa662426d3140052458cadc3216e322de75a275539a7067e66d693316f13dae557f9faf198abaaa509c39844de57c451aa6111170893055d44d040f7b002b931e5db2669576a88d856b1e5b30068c052874e81a011696ef82a0ad56acab6d9a4610d36b4e3848024b6402ed1516301698db99bfdc0d3299edf7e9831c55fd7f53293e1edb4634cb806437825a2a914955ccb5d8363b29ebbabb11937157fc78a68548a08fa98d8330a2bd9b381d5eadd64ae302af2ee0f95d1f4f52e0e64a21b6cd9246486fcfebc7a4151e8692472b7a2842197ca5e245dc4a4dd01e7645e049b91111a4143c82d0183c2a228888b81fb266a302a34a182ba1d73504d374b14b90994b250f57b8d809accfd7e59c0a20cb8ecb29739ce5aa8d776e2564949db7a343a0f1ba12da56a12da3da7ccc463564b3e5b9e1022c7dc52096f3d6965f2b1d0e5ff9cfa287a305d99106179d7565b0d94ea40e95250b132e9310535680a6924b51fbd171680faf11bdfb176ca3365de3af7e4f31d7aeb835451d722089a6094b785e2ac0f07c9d6388a06809f1b7659a2a30bc24d5e9db8055bde3fff4c8abd8350b950cea01f25552e74ec31714398fce9210e31b79aa6c41c371e01c5e827451b54a0b69707f292ec81366747a1ae20afd0268a4ee3edaf9ed70333d2113b1aeb1beb2c412b89b9dd4a31caeecc274dd9774cc10504104513008b0c44b4638dcc64f89ff0538fbb07349c542553dd68681898fdc45fc1c036678dcc28612f1fbea6770a5e4ab7c42e812efac4fda8bb4359e9ad50181a886f91efbfdd70206fbc914aa66f7ca0ac80a63c57700e4e921195bedd809ef49ae719c2ecca52770db7baacc701660445369e830970955d2ed4da2c3aa1c4541bdf4db442da07a66da44353923b26c38249359117aa680da4bb9b15fa5db24dcc8e0e63359744accb7889d6a071564b6e06c78e3bf0619f7f048531e29040e31451d362297c061de5f3724920e3c2bc448e566c477b5b2f34b65af96f29ec75b79394fd02bce43c6fdf2a86148be579e513833f55a131e6667853002e408955e3a6dbdb35065e3d9795da045cbd10f736f4cfbf684b5bc9e8e2de08863ac004946713c889740f33d949cf6cbb5d629ca170d39f80f3fd8f4a9d6c6b84013e8f578ce3bdc6f66c33c4b3478420b08359066a4d566b2549326be5f13db258c7b0fb0a1a76fbee682a1b43ea6cd1f327f001482257103eb3cff930ddea42170ac0df3b6a8c115138f8d5e1c7b5b4326c7276c56ec5101802d9af6c452fb34c5997a6009a9d241bbea96d101f50a90d25729f404020d698ed2d6e4f7eeee43f3fc76c4c8f1c058cc91025a66c26a12c920bae1413e7e63ceff88ad85dde9ed32b4ac02280d7ed094e71f82f6aff2a54ec48f31b4ac8b441da92fb0d3d1824436b3709ba65336697f95496e003dca5e00c6a8a70637ad959849d52997a2799b706b69c708d583791f3a3a220eedd8df84ab62d8edba328f37812dc533c09e025e727b03d93be03952a3114862590b993f14220af0d0c24a583b415fcd445bf615150dad2186fcf6d7bfbf21056778dc3e0ac815a1a861247c6900194cf5534de8879f3212526bca3bd73a635257891ecc3e4aa754048048466d5d81d01ae15ce3e6eafdf78cce0b9cdb826430cf3b7d4787cbe9c272ab552414817f3008f7d678aac0d2017f0875283af0db2c0a5407c107ebce102c517d3b47001041f52db833ad929e2d4c6c23fa65612bc4f39a9613b1ac81e67a9b8168df44e7aeb66967a780cc002faa76cba3917e6ba358aaecc244ce08929dcaf5a564a55eea0cd3310e6b473a21a31c2072c3f91b9e086846669bc7973083e867ce17b134ebc95efcd6c319c5844236266944033af8de068200f80ee1a892188c600663f534ca63028dc468a359c9e877fcdc65dac49c5092bc05381e699c36b1b7d769e28061e8412dfdd10bd705bcdb3f680375a4b23f8841819c51180ce4a61a55613af1da494abb0cb7075834343aeabd23ce76614527ebc28c94a4c9dbd69b7cc1b21c982f1b5367b870bf7efdf4731db5576c08db3fbe6492fdfce4f81e11b8e12819da8232d19adab6d6e6805d28c14d2ede48b192359277ec1d1e063689fda393e975e2bf295a212171fd7fbdfa4bba54e2acc166560cfdc793a946206360635fff1fd16fe96e8c492427da2713f2b4f93a2c687d5bd5e9784ebd58bcc6b25b87d208af2b7d6b4f96dbc166f1729379af4b2a0506ba02878d467b2736d002812e2869167a9308416e4ea259eaf033a6b0127ce863a5964dca535f8d917bfa47aeabfdf54c985b546699de33f28f48e8b9c661055811919972f5976503dd3b1a95fc66f492532f0ea439d91850ed0510742884f1ffac2d87201269668d0fb9a7a083e1eeff83a1443f6b0d6a5a60dbe946b5ec2388585c92d0d5b0d663fd20deb6e8baaf1acd1b582c4db982fbecc86c5304df48b4a3d553b37e60b6d5c588acc16e9e0eac47f5f307917a4bffa7d812e6b7aef59c76c50cef62a8553f1de91bb6b938ab57b9958f87867819f8648608e2e7018dbc0d36dce0f120a2c0e3374434c4e4a6ccef88a0319a9c8d7a752b61f255df6cb5d68a29a9edbb49be7f35fab4707e6082a4308b0505ac96197e0ab31b26521eeb8f6f0ab37f0e46b638f85298d99ba8a705c2dbc20ceeb6642e1ac229fa786ad4742e01070789e4437503c6c9381301bf01e41ec09f572501e71fa261e7e3f34767bf15efed4dcf009c194bf843f441b02aad6e0d36ab0b1ca1fb365a17cffeacbd001914de9f296254a11ab80eb45cb0f68ad2223253c6d831321a4e667935ff0bd1ebf87c3109d25529158b992ec7b0f71ac4ab1578d9529892af0ea6900dcecf67d1e061567ae4ed088e788077c9a0c2cd54d29f38fb13a699e310797637905ab9f0062f60fd87621c4301fda3091a272b91aa07d65b359f40e3d0f0ecea694f241cc928d6954a016ff64c91d0c4ba79143312ab91b4da3b200775b1732dc273b439337e76892c89c21ac7cb90968b8b5736f463bc1d295cf9e3e7c40ad81f1c05c0b55376d26bb5c660d45d6d9999f25f89ef6f9008c4b26b29c9a52c289224086d51f395f81cd502db7d61a4fafc476a71f1c58fc0dd345e2780fd74ea438de3557479d53bb5721460e8ef1878031549a8e856e76d786fd4e7ea49a700bc9cf294270bcba7cb4873a1d1ea04a73996a81d16abfc047b8d55a5b8e055efb8b9332d72e128f8c73e5fd54de04e6809b8238e3a17d2ffe3d2048e0dfdf07b6519bd51e3ad4f805efc05f6afafd637cb1c84d20081ebc1cad6e3bc1fdd58691d5f07e92f0f73c0e1e6eae84188970be3aaa54301b52d9e30f50024bc2205a510eb5b002cb843fefff4e3ead26607ee1036260e6e3c2317cf7e578fea5690f9e1ed67773de2cd54453053f278258ab23c90f290ac2923a3688af43671783f7b34facfcd6aa212e207968730e8aa736409a3dac3602fecb3d828813f43a8a1e2e7fb8c657a401564e9da2df0145e678abc86a7cf4e25956a67ae9645a7d09c5120f672917097b1267c0baab1de4a52e9377d8102695a7d9aced82aaa39f83642cc8b4da9c3d404d234eed778c967beac68260d3c9e74f1e802d7670113a5f099f3cf66c3524076ec17c01c10f1a740f0e896ee28e35f01d28d4cd904c7ab685cbca39c5a6c5e19898f20cddeef8c78748596bced9f7a3283339b7683652a5412aede0eb540b188f0a5e96b50402bfec7c6e131eef062b4e9f631052ad8cf7585a39891ca7c2d46bc15bd6d30549098210f617161e709865c47447590be9d5161051d903207fc8cec53e92c839cc2b44eec3db9023353bed415cc02eed2291e46e37948cc4f8669461fc8d79e072c702b00af7d395d254e2a3365405d069bd409d6b7c0836fb6b79514f81047a116053c535fb1c9a320e6628218f88dff55db64e006d02eada19477aaaa9a6ec3575017f0b9aed7d206c0f50158091c71f61529d1faffb050c00fe548cf08b05585cc12526b0b95f34a254fee12ef81e47329177461915f7248c952fec19481c37d3f9539467d116204127688bfbbbd7ba594f84765d8ddf4d0181ca21e142dfa608d4ef239ada60d6d166d09124689ca337323ded7568643b87e6d6a8685575ce489866011c0ccee80c2a4eea9202d8470019dee89a0e764d1ffcf70a2a2747a9e2486c02831ff6e9318d7e74d39c8ac08d456bb5d1243df05220ab3ffcf52df468091138aa946c7a91ba7c4e6c169457b0f47dfaa0ae9b87f6fa25166f9e6b443b849145dfc3e154ed5182aa5644e390e02ea1199d3f0641f7e2aedaaa5aa2169deae2c24a5351135e2896af2952de40348ddd087067c8a603b8efc0e47eab60faad25c2af57ecb5803b717ef128c95fb6470aa75f540e8510591d5cd0518135cb6207d86f4bf1d48d892c86eb2024ba50929e446f6788d1b2ec6518f362233a9135a1e906d2d2dbc45e73b8e460bbe5d458295b5b27d652b01789b27bdb108ea772490f56a011307912c37e9471462203adf5c01b6df9ae43f1077c6d1bf322de525319a1626eff991acef379f6267b4cc26cbc5f6332349829227a224fc3a8ef597106d0fea279f227e8a4c2b9ff70d9545375a0323a8481d89157ed596b588457998aa0a00920c08b4a7e8464db477b4dd1648c0eaefac9be5e3e76d05ddedf7a27ea838ea3cb561790cfe9aec99a9b6b1400a5b55f1680cc72f10228af036c492cd893d4d94b228a64859b904680c09c214feec367e7fa50f27f8bc6dd494e867be3a457c5a70683fa6974615d61957d398599bef5218b6c75c403ecef0bee014ddd3ca23c5a6c4d566037814967f5a4c299677bb5f2a2054817fac290eda3742daeb8334b83963bb6bd28106bb18888bf10e62ca2cf67b7898991278126a265f45e2127bc0e8679761e1c611b773a30f3aa6701de2baee48c90bc2b2ee9a22b5e307482f7d7817292bfec9a77eec1f1599fa80d08edafc45bc7c7f5892fb8f8b50b1500529b2406103f1be92b38e0f5c4c595b6171e8184d39854d06e144eb63a2b5c3f852dd0a70a3b48ffd2a8495a0b3612442c2c2fae8b83c54d6cf7bb5c8d8d1ec25d70c9f76b03be88714676bc96899c08846780a3833bb7844867d42fd9c7f1fee4552ae0cb6729e57f2161b708232dca4322229e7133616734436c7f64ca9f909a3b73ea6e828b7471c869db7bcd7b9c3b314097b845b2ad21c1898a5f27530f761d65ee06517799fed652a5798f45d8d532eff7ddc70325b921d66c7578efd659c1b9329fd4ac2820712d46fc5a260fa104225946c9b4d65de6c2028a3092362a2ac9d13b44bb4d5fe114d825d4d28f6f1bd50d5dc7b7dc4b7c0847099c89b4fa9827d6304c3c59ab6c474a569d15f03dc810ee7a42513cb3ea08e52f0f0b1ba86ac5827cf5b05561d953cb0c948985fdff56987c762cefa9b62cc77cd162f3fc2ade6726963e5e120554588f03578b9c927f860e37a5bd7c89b3c50465a9df0533f20735610c9114107cd24aef1150a7e6b0a0d68a6ce07923e6da698d2df850905dc09ca1c003108a17939523e303b6a3c9475ccb6443ee21022bd86b462188a7938b46cb8f98c7a92fb6850a0cee79ff94bce5fb2c453d1f7efa3b4714d4ed61503140d940f8bdeb80ba7334958a526fbdee139606cb990f75853dc923ffb58b381b415480e0137a09a47575f09c30eb1c4f89e9c1ee22a55ee027b60306b7c56b68ec65992049ba4642a932fe549e3c77d076444c6479300d4fa24d68b1a37a9eb41135c5e7821c66231d498d14fb3925d8a37fd55807323a4776f4c56f11bf5a4bfc920e15445050196a8e2aad7401bd906da8d6c815d459c0a3393c5058cd2abef95fef8e66d476100de5bda8f6d89bf8f5a65987c19548d5f8521e40300f9453cdd00612de75cf6142c7a393139bb74c4a3dcab716183d3127b4b07203c5b5e662007120998e24b3d89074813cdb23c217bff961049db1aa4b211768d003fe1b1db7d6c469aa0b0b0c21f8004fa78fc63824aba9bb31cb8a758d81164b25bb6f896c2d92bd149ca85d2e7b81ded0cac0b3a8662d5132ba4bb49296bbf6bc3f14365a75f4986772809e260b8c54827262aa86a09c036867abd64e1a8ac89f0768443dd723d151404683dfb013f0aa3e0da42adef34c3dd542a330cefd388c85ccd660def9da5ffb321e7166ad0976a16eef4bd86d8f75ef1cb838144b8144ab60d923bb4723f284120d10702b416c1402789553f69c1e218774038aebeace7cb74f8cf0c0a29dcdb1869d4ad78e8445663493c63309c285013db804d0d6903911036fd506be4627b880d10ebaafb0ceae950decc7a42415564e409148868d5d934e9a40bf7a7554a19c2500a942fbbe1ca4aadf3790a140c3c1f6836536040ce7566272930c791f86bff86c24a55d62f369f8b25c6928d028774ba4972a0d8c91becd09c9d6ee491deb0d7c7a6f26547bc43fe38e34b48eff0131d393dea49c4dd56cdeee17a0ae91395b40e25872bbe8f76d7469c1666c8111d25503c6b22ac069b9248d528817757f9c7c3c40ad2e7e7d15c4af7eba88edac119fae47f00063145f022403ff1d290499fb058a72a4e273c15df456cf88765da779c8b34fd59b56a13da6e3b282a11e7a96f70c91671342ec930bb07b10821c0b249f330157d5177c2bec3a6c9c6199b5e1386d1d54417df868eee7498043d74f71bc61dbdd9db737f17e6361dd4c13a047366b0b45fdc3bd19b7b63eeef6a301f0fb8c3862959491c932a6188da913145d8083ad2221a99a7b7f7f65c6a0d7b573b8e91741bef032f4236e29fabce61b154f0469d98166f15b16bbf4fad0e67d82629772dda9bbdf738ec1051ceb73081f9c094736b25a17aaeca2b0babcf9240412bd14bda3ee8efad49046f9ecc7d1e8fc2a1d2b0fe2e5dcfb215641e59c42cad8b141506d1afec05195ae683f1f28cb1115fe273ca2879475afbc3e6ee6654bfed839f612d945fe9094776c1bc8f6825ab97694ebdbff60e152dbc747e7248ce291bf67105474b09133d69e330700a7197646bc8862d5e161710e8a5d290d187965bc46fe579085fd71e766e5fa8943e0f8ea66c8f823009d60e77678fa7ad92836e2832fd13e5621e225b2b20c957f5fd7cdec5edbcad77daf7618ff528ff72de89fbf3b0e2523792cb46bae972ef3c2e121e8eeffeb3a78b74d48228af48f436264e856c4405a9c9a42f2f7a3be201e676f6efc005bc0dc7f38038ac79b282ed931d83964a6b2d32fe02b58837684c4a9c1f614a5dc3c1e2132a5599626a6c4e219ff605bb3625fb3154f7953e094754442924ad439ee64ccec77ca8620afced06a3672f72d4d6b30039029d1abd2bba8a397d556e95bee98beffe1ffc6138c08370208f63a88b5a4d0b3d42cde9ba33cb8f030931a99035afc223a8703bee665d9c520c012413a652c48a6d83681f436424bb9cccf6e49d2ec28c4692f0d1fe99f51dbe847d99afd4b11dfe4c99377775524c198ed85daa1a54e42073f52033fa2503115a42a42ea25305f12e10ede31a2c55edefe7113d74c3f25f72109bf5c804a6104d9a1c37ebb0a44a2d10721cce216966e3607a3afef9d890e6e849ebc3e97aa290627c978f37880d00c28553b9af77f6de715871716e9de7611f227a20ed0254fd7389bde69dfde0344a58546c572629a3530ab4fb827bd7359ad1453875fe02e94a907d187b8c6a9acd24b75ef29a62a93b0877b20869911cbd8b2c474533d1c37f5065664b4b776075b788aa1b019befa7023aa82649c13c380a5879e8e3241cb5dfde1bc1f10a80471475d739475ea952adbdb65c561f226ddf135d12612ca2c2dbe48638f9200b1e6e0d769a90a776584f37ed1c04c24ec0a818e9558459fe61815e93533f1dd0af867593ba09ab3e72736bb656645a316624d624470012e7663e49f9f7aa98bc3cd039b95dd9eded4249b5021a15dd052455df09dfb856aea1470308780a41efc368e6dbe5bb67a509a10c41d1ec5a837720aa765306c940a173d48e1b0e5a79f5f0a3f878a6398aab96b6586acbae58f4295cfb9e5046c4456a468fdb66f66c276854ce75f77e707e084b9b71f8c67f9b7fdd2673284be2e985c0256e37d0c196594d8c61c4e831f48f4e1d599250bd3d5a82329474284b4977ee7b2ec72b0cd7b1e134a541d719c5b65323ed9ab2eee8b5c5c0f2eeecd80d5dd6d835b88d00a9f7d6ce42d21fd2382c1a7d6e2ee851120d99cecdbc121bdad06f4fa775ca06ae897a2be11cc1a1f8dbfd517787343d197bf7e6ea8683d4f50f2be8e864d90d6a953ab303f31e2e2bdad78464e73d4cf884d844bba6650a7ee4297e30a1e801d94791020dff01eb0e860fd02657781cd03b4b042ab4fa91613d5024a102a70eee4f3562a828266056199241dc515387df1b2fdf17bde614ef5f71224253c65e3b0d4d59358916b2fa91742ad6f0c6564a91876d78d820f94554806dac4ce02d25761073fb009f91121ac8aea2d1575f77da1302d3221c0961e62a2667a501d56bf556f0a92dd674726903a2796ae75329c038baa88d3364f18d66b5026aacd91b750fbd327c9f8032effb7364480a6ab5ab86ac5521532c907faeb8939a9d56e97cb11b59f8e21f371ac2953712a2c4a22af786596676060278ec6cc4396c31a68ac5fa4e3f7ee5c1a736b0a9bf55fc0e63898bcd0e4210f26afe84ac80d7529d574610557d3e05fd2821929004346185c0f996d30f3714b2dbe9069e6cea9faa64f19ee8950c12b8663c3a3063c8803841da96433433ae3a4560b0855e9910dbf8458a91dc23b3f7711604a14d12f2d4bf1d5c98b10ee53d62ccbb64e2440a78e201c7ef11dde5152e0f35afa07ef08b9ba985c31a00fb0859f5b88553194cb6b779166755c62dbdb4ca22303e9e67fc475cab2e35f2b4955524f34903d1408168bcee35525e936287dd5150134d81a1d354ed46b313f99130880a76a860da3c61ee5727f5030a12486d61f884883604159aef7eb9b275464c68da83248393ae7015f2ac3b22a69ed889be93d313672cb8def2118adfea78ead29beba517c0e9a9a5d6d1829452aa7d70291f9e2a67056306ec50a6e32b0002df5f596bc2af198acd19280bf2a4ea352e7475e3bad94b3ced45ba6d2f8c1894b6b98334a3cde50486852f0df21dc25251c5f2cdb865689ceb3c2f8b0a6babfaf0009e9ca42c89fdb8790f90022006f150785cdd6956213fb040d6b9f3fb689715d71a425219c25b23066f5ee18261718c64cc344f80f1d53dc415a8a05aadb91da3b5f09531d6d902220232b5c0555ea5db9b208f0ad9770d37e4dfe581a548de3525ada6ef4bd69e08cf8d91ce480f0a8c4ff82a0e428af8989a95510fdde0fd414f532e6e31e9a2b6938964623808c1065e292b5d2a0df9dc9a3ab4dcbc097adc34b28ad63bdacd74f1d49f15686f39b119532b2636b8355ac80c9bf8944948d1e1800a281df1a5333eda49c7527846cbde68f42b63c908a4fb4f3302582009291e42cd6f6f452b1cad70df4a3cce94608c37755c4e0b5f02ca0a47841b2e17efa58ef0c39f4a476d3a22d91d3c0a4ef6731747e2911051778611aaf9fa1a59fa4c4797651c32a64317d033f022988a956e8a393ac37cf2350e2673636a96efef9b386653810f6527fcf92b41ed009f15ba828f6f502e5b1d8c480b6f8c1783e8121ce9d0ef76709c0361fb84781c48b3cb37b38a32abdf0c3b40042e26377b8eb09f7fd4e2343733b414e19f49f4043769a8ee6421737ae003ca09066812dfd6bd49c2d2b5d936652dd2e7cf78816345934abe4c9201bc62b507fdc4bff7be59cec3f66f3411f399001e06ced4ccac0beda4dac3aad91ebc593a52a2a3ac6029a5b0b14e12568c26c28b8e976ad73828a25cfc45dc3f31fd291212d638a246e2b4cc112fb1d83a9707d20bf75d848501febfc05c4a932128cd9c5dbe9f4299ab91ea341a78c9cf82d53c99fba4a060287c87caa442fc1cf63fc2fd367383190e6df5370d8cc9e8f205d1b83d5be9899886ce6d627f6493e58c47c37a2c29e8a7bb6becabd086f7bae3f9aa4eaad91a8816262e68749037617bed2ada834eded3ab3d05994760331cd747e30489c56e46762340674b1237b0387412c9f06a684c09ffae8659edba7707ba5bb9fc6e08730d2059d98600d764ea0d097c91343943ccfc0890c3f58a624e818b08c7df0f87abb4ec4a524ca2b4e50848c1e0d36100b68c6a57e3a0287735f1f564f9c1a7b212012c647dac4b571ffd7dc454421f6d07f9393ddd88fd35a4c879a4ab9bf01574f79395a4a9ebcba9e0efb6563e32d43f9a0651bbe77b58c9957eda10a540907d12f3a33a1e38c7c2d74eeca885d6414cb248526ba29693b915050902e97a17bab95d69567da576ed8a2359582b0b01f60cf0300f0acc8b6e62b3adb4300f3146cf595dbe0716375782832438acc900da420fdd9a655162ea48215770b2dcc7223b135475f334193ba893ef9843967b7be96a7015c757e254dc87e298d24733c30914a2539fdd737e4b0673cfb4f603228580ff4adfe2108219a31180c4eada816524c4e298db2314b8034905886569c6f06eabfc3e4cac2118e9923d1efa006fc932b3e4a49bb5879ff5423f15f605caf29fe8ffd2fda405e19ca3f16227c980a84490d520a8c0e2a01e1498d219c6b471c5bbc0402e42eab9b3a5a02a58372d31066b0ea400063fa342b152ce6ca3931cc944c169d84dd6438eac78273a4fa199e9f1d644b41646124d3fd035b39156468616417f4ca221aa402cad69f648a2a68e440d2b5424f18f6be67e6eeb3e1e7096fd1db3dd9a6b9b3cd4185acc3a7cf59cb019af171026d7194db924a25da62ee54c67338d75a94f0ff55cde30483ed3d02ee877aa349c207dd56e99e189ad5d904df0daaf23dfed047dda563396a3b59ec2618551903834b28fe78b57371aaccb8341e22a5ba942bfc32b32cc5a40767cbdb2ec73b83945d0846d4da547c5af3dd4fcb74fc72e50cf3dfa38e1514ff5288a976b469583b7bbe7fe46d3953c3635bc813679e5cd72a3bd5d8343452ea6b392de37a58a0e0479bb5355e2053c63275b1a5e324d39b2061d042ad1774369d112182a08295f2706faf39d826128965172b7ac2898255569e52904a940b8f9e9526907b148adf3a08218fa24508e36734cd98e879832f1008ffcad96c6c1ede30f54d6d458b4101834ad23780eeae353e78c28ea610e651575870f4ca629ed756458b06961f44561895f0aec9741cf251f68538ba90f85dd00c79b85afd1cc8229a10f52e5782c3cea22baae1e140a27a888c7c906eea14c13391a1f8078cf871aef85909aa94b85ab956fe688d5c26e977aacc3bb41a2127840271b7e9240165dac7db2ba3c88fd19dbeac57b5fa995b7066b6a37d31e783414226a674423dfa695112267a8b5c9d8b51e82a2161060e19df9d3a927c8e2b92853354cf3e1cf7dfcd431e298867852c41b717a1dbf0a760ee2e8e481fbbff4264d1c285faa090079073a4ed008452b1fc2ac92c90fc6072d3061246837f7ccd97db048994fd0ee1b96294f9f73acab47d868e90df41e340dccc7cbb2466c9a02ab6ec6c634cde77de4252e4b6dc87968854053d900242d2b66d3f94943a8455881fe72073913f33b34a8337f09dee314ddefbc43f08333b15baef44492ecc703128f4e8268d9688a4d727492a4106de9c09277675cd60effbb1d90dfc81443b0582b82872c80f4193933f53180b90433c948b0e52f49a4c84fede0168cf759b63e2a29e0526adb7448a635924d07314285a5da5cb852c73a352d1565771dea897ea60c40c144e01241115cbe8ec093a3c25a3d04c9af736f9bc162702a269ab26a308459903aa80b4f4be2346e016d447389532fd8a27b17ea96867892baf7ae9301533267d7d9cd8ce87713a0a70d4f7528d861be5fb72959ade990c8c8cdd48d4c9bb06428fb2c62aa8204c5d03ac44a6129b07a703d807b92109343c4d526339b14796755e481fc3c6cdadd57cdc3b345c7876707e6869fe754c7d57674fd1b223d7fce4129a2edfc08ed5e26596fca126ceb2b90224d23b03dc85c8854562f41a9ed920e8eacffbf1fa25259892dd76d091190de430511cd7bfca63402f1bd74a743cb8e447a68b4d4057a26a06f83d1934bfc477ea8ee8232fdc9860a741d89459e4f33ba5fe31067a05ec90f2e8df9944d37dc5fba551484c9faba18db60e11a9c467902c3a1e1ee2657ba7943f11d8a40d928d2f85063c365b07f1016e1600204a7de403c1ac00938052fdccd6c51087b27b174545108f4fb3e38e21f8de682f28a16b3fca5940338c85b7284f11bfbed3359e6720edcb11f4c7b7b3d39e257d53d411269c8ccc53875bb6fdc777b06124757170ffd00df6bdb932f756c7ae885dfbc8f0209eee31228a2441e98a4479c64105974874f512d2ba12964f75d93e77f81a67d699e1a84989d5f89ac5400f3ac240274c76561bde1afce77dd984eaf654236020223957c6cd2a28fc2f62c37080752ccd485a7526a9c2908ed69440c20c2024809f52c1609301e0c5a0e7deb846f43d4979212bad821f8012a81e693a29d3384f3e635b98b7b803ca9a9f32cac872bec8e409d8b7ef73d8e0bffe61edd37108dc7baf3a8a05086efcb9cf9161661f340bb4ae70a85d93b4fe483e28dd58a4eb6c2a8f104dea20796d1ab00c4f25a5362aea1e3f741e353c638236c1658d99866178583172556001a8270173f90b0246d0000000000000000004001c272ee4c4bb9091950ebdf9a366c6bed5f7b49ae3ced8138f9f501383b8428255776ef52f1898d3d1321393325d57c1b5d0157015c01c9ff41895fc0d676f2ce44bbb5da924290b2207a01595d967c676a5dbdb185220c0425e674a66b20887177b13e5cc0b47c714ff794aa739bb108718ba705745ae5afbad664d98dd68d59c0ba68bf5cffcb2316b0baf9d69b4ffe5f01bda95f261bfb5bcb7ead806e1d3777f5b9afd9568b554026d7cb6dca396fdfd67fa8804b3dd76f4d35cc143055defa5e4dcee148ae204a016773536ecbaf3f5140f9bc176b6ec9eafe7461a080db4c196d7e8ba5113cdf818a4a7c024ea6562d3bb95d21dae1ccef2c7b3011e603c628884e405fd5e453ddac3aaead2fcd277024f4647a46becf78e4276a4e428020884d40d7de7a8aad35b7d98bb2c2d17cd4fcd40a4642eff18e27929f884526e0b7ef75a92ed94ba4d49e63ca31b55c52cccf357f6dffdabeb49fd8065109e8aca556bb9d7415e59f409de99acb72120214414c023ab7369f6cee3522d1e211502e2a5fdd295732f3a6d1889a6a6bb9ce3b3b4cd255bf5ba569dd9112bbb5fb5c6f4a8eadb7ec1495dcbc32b5de7cbad10ed812f3e6d6f74b8d5199ea68d7dc6354ba3ee1570f918ee78eb9a7fe21cec196e4652bbddd94a85f9a231338990ce73111510ede34dfebbb9e4f4a1f621c70fa538de79ccbdc0a110e5a93b339db6b72e9421c272a2a42c437d86453f2272a3d91cf8d091cea46ab94decbc689696c23b1c9266bc6e4541f71326cd0f4fbe8afd15a9289d56d2b7faa4bf3c657564635a433ffaa5d53c9ff5769c8b9eddfe7544b13bbb7b8463478ad5da9a56eaefbcd59bf55f9244b4bae0d675307cb1df9899633f10c4899f292ef5b37e4f928710bd10cd8fae954ed96631ccb80cf14ab89d37bed16f32603b6acceed4ccf9c661ee3d9bce63342e7821e03569a584add933af9bef7d2ccb379282f4114036e63af6c35578f959c8ec530a0e46eaab9b7bbe8b654778808c67b6a57a95eaf31768f974badfa354b496bd2d5624e992470a5a7c5b63aca8b6993294602d7fb6675f7b11921813429d54eaaddd4a6ab76e98ab9442f5ae1401b1f612dbdf7522b9558b34d2a2947586c04ae7f3e93fb75951148d7afb4d26cf78b405fecd53566ec26bb441581fd6a6a93fae476e6b22502d36e7bd419fb528d527769ce785288c0e5583ec75d99eb052ddec4436092cb3965f729952f4f1743a0fbc52aa597bdbe95a39167988458087c6fd9dd7c4ee76f4f7a692ee153119110d89659fe7cec653408ecc698f4c9ce9f5cb92c08fcb5edd74a2e1353aa9eeac440e04bab7a79d77aafcdfda5f947d8780762ec898040b5cd523a37a7e26c98e31f90ad945f9d2d591ff040835d183cf02860a2f91f385151c9c0f2c07c28ef335262362dfa01552b5653a28ffe65e3190e9e72364bc53e221f6c0feabe39477b2557952ada2b9fbee0893f089d42d403cae4be576e2f6f93251af360a6d8b1cad23955ca1b13387840f6d20511ac6df2b6c94a9b1c60a7739ffc87c0815561a7c20d4c4ff4e90cb0248a6cb272c092a8f3f343399d1526144498153f0080205296a4a4a430908240bc23252525c5f31b4ff49e268bf391af2880404b8922a9220000ee71aa32c012f738e574540a48096001269d7f32dd13411002294b1228003ac9d4be6576ca8b9f5e9a7980df9252cbd592cdd81f140cfd2c0a2c3bac68a60e30ad4f9f944b9998aa6597e615cdcc01365367dbedcd8503f456bda75ce71e55ab35af69961be0622c676b6c2e7fbc9ae635cc6283c27828475303130b0d70fa76ab5fcad66b95fda55de24f62cd772028180ad17f1c2d3340578f1dad8dfda6d75ce6a351135864f07c1403130b0c0a820cb0bcf050381acd6b0ab0b8a0be39259d3ef63a9728d30274e98ef19ab3dfa559613c994be410f498678351d106e3c9603e12ea7c06636141613c5030f403414c2c2b4459999ad710605101b6fa3eed92fd96269fed6bf45f970db11228e79cd2abfbb7e86cce798894c057eacdcafbe8471b0e266206224e021f933e9f5201818ca8512162c6181111111119a2241d510404218629841032cc9873d601124080691046298c21c6108314210611620c1111096564c4b4cd01df6c60024a6c23612dc3b164b099b99c81244dd833f3a1c04ec5f02c073583d7cb0d93e08d546db9e1d228d28dd6e88ba60f570ed9d0b18b98fa8b8a3176aac62c02a124dac9c099c57bf86aee85d0185e895a0ad8d73fa3158197703ddcad9d7c9c01aac5bde397a9173c8370b998ac39041e3428b4002065c1aaba9172cbe60e0eb3e62e08ce34ac3847faceb690e596f115e7031891282e9ce21802d9084e5980d25c728b965e509c2487a484cd8f22395514dabb2c00628a799891b1481671b53e8670f0ff52a4c26564a62327d8ab44da47e6fa126ecbfeb6225248eb02ea7a74886bccffda07508f1e4767f6a9ad44b83943579bf18eca87a66c399820d9b0f57617fb4cba621e4f5986dcc1705f1e3adbaa8595e4c0d8792310b714b773daa6fe72eaee861632dfe89328888e80eead07d2b73e1c5f3aa7700a1f9017f54de78cac4cb3b885026c1afd405379b7fc662b0a738d64e09a3e8fb7554c7710138cbccce948c03c500586daea9b47d1cd877de1b0babe062f30e091ff3810c6c88585bd750059977445f56595345ae64c2d823b49138c1608bc5a1f12ed0ecd33a1fc4322f17ae3c8c0f88c4e937843eadf5f69ae06da4df4c9326ba20decf741690d8dec846a8088cb8b91768de1b7c2b07929c12b3520c16b30193c06411f0302e4bf065bd083372f28c9d290ea8fa223840425e3797130dcb699ddcdb77d161e229a5265a064058b87d20a589e7adc48e63c909f6ec418eecb024e9c44108986b35f51ab2f58ab5ad7debbac8202780bd7ea0582cafc82a2cf6f17e38bbbd376b3a6a91544acd3d93f36c8e280402fab1020ccd0f7c1042052905bd3299c590e5e0c53e741e8dd02c4a295fc9e65c738124bf8bb639e81488a8775fa2e7dfc6be152ff621d24c69bd61f6e38a29916103091b1c93214eb7607eb00c8ba08daaa1e43a00a2a0b37ac9704a2f2b3c9d98ab5ad1b2db320da935039f109c89546d6851a3c7a5a65d0bae42bfe35b22fed4254d608ace88b9bf1d22c06cfccaa9ea9cc1d1b1f12a7353e1829b7d99c6d675238dd33b0983d69375fd33501148752309ae5501c2c3ef50d2ac077539575fe85789925be16135b7c84fda4ed271f387ebcf323bf208a6b5122f1a90254051e416d64a9c77e6010424ba0286ce8f6591896f60c126bc288ed8bbd6c24fb847b12d8706144e4d0b960eafe566119df721c67abac1171fbf911e351b12d7cccc3760952e0a9320d90870475a346266e8096eda731030bc4c574190567840254db4a080266a33e648063041c60c968e6afb140227523c448e84ac0ad8857260f9fd11ebfdbc3270e73f7eee21d15207e21343a8475d6b8eb1fbd1448521938d41b013116c977062c9d224b006da95c17752e9c53a690eff69885abb97d20951a4f744d9f8491713daac387041216795c39e1a7dcb21b5542d27d82c060b96abfdeb1312b1dc340693b4323b77470647e776b68e258fbdc4051064bdb47d65a68d2df28da82d27a15e0234097af85726a7201ba01a0515503eded64787fd44faaf3c748ada8b04356170edc0526639e29e0aec5482b9201bcd217a0986b0b6db7f9cee0861dfcf00ed359f439990999772a006a6f918801536c02f7c5e34830d5f20585a345f4000fef19e056010d3986041b5361341a908fd403", + "0x3a65787472696e7369635f696e646578": "0x00000000", + "0x3d9cad2baf702e20b136f4c8900cd8024e7b9012096b41c4eb3aaf947f6ea429": "0x0200", + "0x3db7a24cfdc9de785974746c14a99df94e7b9012096b41c4eb3aaf947f6ea429": "0x0400", + "0x3f1467a096bcd71a5b6a0c8155e20810308ce9615de0775a82f8a94dc3d285a1": "0x01", + "0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc": "0x000064a7b3b6e00d0000000000000000", + "0x3f1467a096bcd71a5b6a0c8155e208104e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x3fba98689ebed1138735e0e7a5a790ab4e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0x3fba98689ebed1138735e0e7a5a790abee99a84ccbfb4b82e714617e5e06f6f7": "0xd0070000", + "0x42b50b77ef717947e7043bb52127d6654e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x47c9410b11325752265d54845357656f4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x4da2c41eaffa8e1a791c5d65beeefd1f028685274e698e781f7f2766cba0cc8300000000": "0x080000000001000000abc3f086f5ac20eaab792c75933b2e196307835a61a955be82aa63bc0ff9617a0600000008d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48000000000000000000000000000000010000000100000000000000", + "0x4da2c41eaffa8e1a791c5d65beeefd1f4e5747352ae927817a9171156fb3da7f00000000": "0x00", + "0x4da2c41eaffa8e1a791c5d65beeefd1f4e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0x4da2c41eaffa8e1a791c5d65beeefd1f5762b52ec4f696c1235b20491a567f8500000000": "0x00", + "0x4da2c41eaffa8e1a791c5d65beeefd1fff4a51b74593c3708682038efe5323b5": "0x00000000", + "0x50e709b04947c0cd2f04727ef76e88f64e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0x51f0fdd8976812ef2ac697eeb9d43dc54e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x5c0d1176a568c1f92944340dbfed9e9c4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x5c0d1176a568c1f92944340dbfed9e9c530ebca703c85910e7164cb7d1c9e47b": "0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d", + "0x5f27b51b5ec208ee9cb25b55d8728243308ce9615de0775a82f8a94dc3d285a1": "0x01", + "0x5f27b51b5ec208ee9cb25b55d87282434e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca0b6a45321efae92aea15e0740ec7afe7": "0x01000000", + "0x5f3e4907f716ac89b6347d15ececedca138e71612491192d68deab7e6f563fe1": "0x02000000", + "0x5f3e4907f716ac89b6347d15ececedca28dccb559b95c40168a1b2696581b5a7": "0x00000000000000000000000000000000", + "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe700e5be00fbc2e15b5fe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e": "0xfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e", + "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe70e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f": "0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f", + "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc432a5935f6edc617ae178fef9eb1e211fbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f": "0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f070010a5d4e8070010a5d4e80000", + "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc46f2e33376834a63c86a195bcf685aebbfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e": "0xfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e070010a5d4e8070010a5d4e80000", + "0x5f3e4907f716ac89b6347d15ececedca487df464e44a534ba6b0cbb32407b587": "0x0000000000", + "0x5f3e4907f716ac89b6347d15ececedca4e7b9012096b41c4eb3aaf947f6ea429": "0x0f00", + "0x5f3e4907f716ac89b6347d15ececedca5579297f4dfb9609e7e4c2ebab9ce40a": "0x08be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25ffe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e", + "0x5f3e4907f716ac89b6347d15ececedca666fdcbb473985b3ac933d13f4acff8d": "0x00000000000000000000000000000000", + "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c05153cb1f00942ff4010000000e5be00fbc2e15b5fe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c05153cb1f00942ff401000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a000000000e5be00fbc2e15b5fe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca6ddc7809c6da9bb6093ee22e0fda4ba8": "0x02000000", + "0x5f3e4907f716ac89b6347d15ececedca7493ea190d0af47acc70e25428f8b1a35153cb1f00942ff4010000000e5be00fbc2e15b5fe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e": "0x070010a5d4e8070010a5d4e80000000000000000", + "0x5f3e4907f716ac89b6347d15ececedca7493ea190d0af47acc70e25428f8b1a35153cb1f00942ff401000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f": "0x070010a5d4e8070010a5d4e80000000000000000", + "0x5f3e4907f716ac89b6347d15ececedca7493ea190d0af47acc70e25428f8b1a3b4def25cfda6ef3a000000000e5be00fbc2e15b5fe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e": "0x070010a5d4e8070010a5d4e80000000000000000", + "0x5f3e4907f716ac89b6347d15ececedca7493ea190d0af47acc70e25428f8b1a3b4def25cfda6ef3a00000000e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f": "0x070010a5d4e8070010a5d4e80000000000000000", + "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e169030e5be00fbc2e15b5fe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e16903e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade980e5be00fbc2e15b5fe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e": "0x00", + "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade98e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f": "0x00", + "0x5f3e4907f716ac89b6347d15ececedcaa141c4fe67c2d11f4a10c6aca7a79a045153cb1f00942ff401000000": "0x00204aa9d10100000000000000000000", + "0x5f3e4907f716ac89b6347d15ececedcaa141c4fe67c2d11f4a10c6aca7a79a04b4def25cfda6ef3a00000000": "0x00204aa9d10100000000000000000000", + "0x5f3e4907f716ac89b6347d15ececedcaad811cd65a470ddc5f1d628ff05509825153cb1f00942ff401000000": "0x01000000", + "0x5f3e4907f716ac89b6347d15ececedcaad811cd65a470ddc5f1d628ff0550982b4def25cfda6ef3a00000000": "0x00000000", + "0x5f3e4907f716ac89b6347d15ececedcab49a2738eeb30896aacb8b3fb46471bd": "0x01000000", + "0x5f3e4907f716ac89b6347d15ececedcac0d39ff577af2cc6b67ac3641fa9c4e7": "0x01000000", + "0x5f3e4907f716ac89b6347d15ececedcac29a0310e1bb45d20cace77ccb62c97d": "0x00e1f505", + "0x5f3e4907f716ac89b6347d15ececedcaea07de2b8f010516dca3f7ef52f7ac5a": "0x040000000000000000", + "0x5f3e4907f716ac89b6347d15ececedcaed441ceb81326c56263efbb60c95c2e4": "0x00000000000000000000000000000000", + "0x5f3e4907f716ac89b6347d15ececedcaf7dad0317324aecae8744b87fc95f2f3": "0x00", + "0x5f3e4907f716ac89b6347d15ececedcafab86d26e629e39b4903db94786fac74": "0xffffffffffffffff0000000000000000", + "0x5f9cc45b7a00c5899361e1c6099678dc4e7b9012096b41c4eb3aaf947f6ea429": "0x0500", + "0x5f9cc45b7a00c5899361e1c6099678dc5e0621c4869aa60c02be9adcc98a0d1d": "0x0888dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee0100000000000000d17c2d7823ebf260fd138f2d7e27d114c0145d968b5ff5006125f2414fadae690100000000000000", + "0x5f9cc45b7a00c5899361e1c6099678dc8a2d09463effcc78a22d75b9cb87dffc": "0x0000000000000000", + "0x5f9cc45b7a00c5899361e1c6099678dcd47cb8f5328af743ddfb361e7180e7fcbb1bdbcacd6ac9340000000000000000": "0x00000000", + "0x638595eebaa445ce03a13547bece90e74e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x63f78c98723ddc9073523ef3beefda0c4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x6786c4cec8d628b6598d7a70ace7acd44e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x6a0da05ca59913bc38a8630590f2627c2a351b6a99a5b21324516e668bb86a57": "0x00", + "0x6a0da05ca59913bc38a8630590f2627c4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x6ac983d82528bf1595ab26438ae5b2cf4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x7474449cca95dc5d0c00e71735a6d17d4e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0x74dd702da46f77d7acf77f5a48d4af7d4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x74dd702da46f77d7acf77f5a48d4af7d62556a85fcb7c61b2c6c750924846b150e5be00fbc2e15b5fe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e": "0xfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e01be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f00175f1801ea0000000010a5d4e8000000", + "0x74dd702da46f77d7acf77f5a48d4af7d62556a85fcb7c61b2c6c750924846b15e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f": "0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f0001fe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e175f1801ea0000000010a5d4e8000000", + "0x74dd702da46f77d7acf77f5a48d4af7d7a6dc62e324093ba1331bf49fdb2f24a": "0x02000000", + "0x74dd702da46f77d7acf77f5a48d4af7de5c03730c8f59f00941607850b6633d8c48b43371e5e6455175f1801ea000000": "0x01be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f01fe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e", + "0x7a6d38deaa01cb6e76ee69889f1696272be9a4e88368a2188d2b9100a9f3cd43": "0x00000000000000000000000000000000", + "0x7a6d38deaa01cb6e76ee69889f16962730256ea2c545a3e5e3744665ffb2ed28": "0x00020000", + "0x7a6d38deaa01cb6e76ee69889f1696273f0d64e1907361c689834a9c1cb0fbe0": "0x20000000", + "0x7a6d38deaa01cb6e76ee69889f16962749d67997de33812a1cc37310f765b82e": "0x00000000000000000000000000000000", + "0x7a6d38deaa01cb6e76ee69889f1696274e7b9012096b41c4eb3aaf947f6ea429": "0x0800", + "0x7a6d38deaa01cb6e76ee69889f169627ba93302f3b868c50785e6ade45c6a1d8": "0x10000000", + "0x8671567f6bbc0021f6f23105f33002a84e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x89d139e01a5eb2256f222e5fc5dbe6b34e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x8e3057e64aae0fe1c91f7bceb3365abc4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x94eadf0156a8ad5156507773d0471e4a16973e1142f5bd30d9464076794007db": "0x00", + "0x94eadf0156a8ad5156507773d0471e4a4e7b9012096b41c4eb3aaf947f6ea429": "0x0200", + "0x94eadf0156a8ad5156507773d0471e4a9ce0310edffce7a01a96c2039f92dd10": "0x01000000", + "0x94eadf0156a8ad5156507773d0471e4ab8ebad86f546c7e0b135a4212aace339": "0x00", + "0x9c5d795d0297be56027a4b2464e333974e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x9c5d795d0297be56027a4b2464e33397f43d6436dec51f09c3b71287a8fc9d48": "0x00000000000000000000000000000000", + "0xa0eb495036d368196a2b6c51d9d788814e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xa37f719efab16103103a0c8c2c784ce14e7b9012096b41c4eb3aaf947f6ea429": "0x0400", + "0xa8c65209d47ee80f56b0011e8fd91f504e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xb341e3a63e58a188839b242d17f8c9f82586833f834350b4d435d5fd269ecc8b": "0x080000000001000000", + "0xb341e3a63e58a188839b242d17f8c9f84e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xb341e3a63e58a188839b242d17f8c9f87a50c904b368210021127f9238883a6e": "0x08d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48", + "0xb341e3a63e58a188839b242d17f8c9f89d1fb17def62216d598940d64654f69e": "0x0000000000", + "0xb341e3a63e58a188839b242d17f8c9f8b5cab3380174032968897a4c3ce57c0a": "0x00000000", + "0xb8753e9383841da95f7b8871e5de32694e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc632a5935f6edc617ae178fef9eb1e211fbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f": "0x047374616b696e67200010a5d4e8000000000000000000000002", + "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc66f2e33376834a63c86a195bcf685aebbfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e": "0x047374616b696e67200010a5d4e8000000000000000000000002", + "0xc2261276cc9d1f8598ea4b6a74b15c2f4e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0xc2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80": "0x00e417915f53aa010000000000000000", + "0xc4ece4c17ddf353aab87c75012b0aec14e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xca32a41f4b3ed515863dc0a38697f84e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcd710b30bd2eab0352ddcc26417aa1944e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcd710b30bd2eab0352ddcc26417aa1949f4993f016e2d2f8e5f43be7bb259486": "0x00", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb30e5be00fbc2e15b5fe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e": "0xd17c2d7823ebf260fd138f2d7e27d114c0145d968b5ff5006125f2414fadae698eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a488eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a488eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a488eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480390084fdbf27d2b79d26a4f13f0ccd982cb755a661969143c37cbc49ef5b91f27", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f": "0x88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0eed43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27dd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27dd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27dd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d020a1091341fe5664bfa1782d5e04779689068c916b04cb365ec3153755684d9a1", + "0xcec5070d609dd3497f72bde07fc96ba04e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19500b42ace3b5fab73c6265656684020a1091341fe5664bfa1782d5e04779689068c916b04cb365ec3153755684d9a1": "0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950246b6699fb8b8db670617261808eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48": "0xfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19504a8e42157609c6c86173676e80d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d": "0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19505905fe216cc5924c6772616e80d17c2d7823ebf260fd138f2d7e27d114c0145d968b5ff5006125f2414fadae69": "0xfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195066b8d48da86b869b6261626580d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d": "0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195079b38849014a07307061726180d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d": "0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19509d4a4cfe1c2ef0b961756469808eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48": "0xfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950c0cadce9c18510226173676e808eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48": "0xfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950c7e637254b9ea61962656566840390084fdbf27d2b79d26a4f13f0ccd982cb755a661969143c37cbc49ef5b91f27": "0xfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950c9b0c13125732d276175646980d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d": "0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950d62c40514b41f31962616265808eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48": "0xfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950f5537bdb2a1f626b6772616e8088dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee": "0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f", + "0xcec5070d609dd3497f72bde07fc96ba088dcde934c658227ee1dfafcd6e16903": "0x08be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25ffe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e", + "0xcec5070d609dd3497f72bde07fc96ba0e0cdd062e6eaf24295ad4ccfc41d4609": "0x08be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0eed43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27dd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27dd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27dd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d020a1091341fe5664bfa1782d5e04779689068c916b04cb365ec3153755684d9a1fe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860ed17c2d7823ebf260fd138f2d7e27d114c0145d968b5ff5006125f2414fadae698eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a488eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a488eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a488eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480390084fdbf27d2b79d26a4f13f0ccd982cb755a661969143c37cbc49ef5b91f27", + "0xd57bce545fb382c34570e5dfbf338f5e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xd5c41b52a371aa36c9254ce34324f2a54e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0xd5e1a2fa16732ce6906189438c0a82c64e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xd8f314b7f4e6b095f0f8ee4656a448254e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0xede8e4fdc3c8b556f0ce2f77fc2575e34e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0xedfb05b766f199ce00df85317e33050e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xf0c365c3cf59d671eb72da0e7a4113c44e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xf5a4963e4efb097983d7a693b0c1ee454e7b9012096b41c4eb3aaf947f6ea429": "0x0100" + }, + "childrenDefault": {} + } + } +} \ No newline at end of file diff --git a/resources/paseo.json b/resources/paseo.json new file mode 100644 index 0000000000..fb264b982b --- /dev/null +++ b/resources/paseo.json @@ -0,0 +1,424 @@ +{ + "name": "Paseo Testnet", + "id": "paseo", + "chainType": "Live", + "bootNodes": [ + "/dns/paseo.bootnode.amforc.com/tcp/30333/wss/p2p/12D3KooWFD81HC9memUwuGMLvhDDEfmXjn6jC4n7zyNs3vToXapS", + "/dns/paseo.bootnode.amforc.com/tcp/30344/p2p/12D3KooWFD81HC9memUwuGMLvhDDEfmXjn6jC4n7zyNs3vToXapS", + "/dns/boot.stake.plus/tcp/43334/wss/p2p/12D3KooWNhgAC3hjZHxaT52EpPFZohkCL1AHFAijqcN8xB9Rwud2", + "/dns/boot.stake.plus/tcp/43333/p2p/12D3KooWNhgAC3hjZHxaT52EpPFZohkCL1AHFAijqcN8xB9Rwud2", + "/dns/boot.metaspan.io/tcp/36017/wss/p2p/12D3KooWSW6nDfM3SS8rUtjMyjdszivK31bu4a1sRngGa2hFETz7", + "/dns/boot.metaspan.io/tcp/36018/p2p/12D3KooWSW6nDfM3SS8rUtjMyjdszivK31bu4a1sRngGa2hFETz7", + "/dns/paseo.bootnodes.polkadotters.com/tcp/30538/p2p/12D3KooWPbbFy4TefEGTRF5eTYhq8LEzc4VAHdNUVCbY4nAnhqPP", + "/dns/paseo.bootnodes.polkadotters.com/tcp/30540/wss/p2p/12D3KooWPbbFy4TefEGTRF5eTYhq8LEzc4VAHdNUVCbY4nAnhqPP", + "/dns/boot-node.helikon.io/tcp/10020/p2p/12D3KooWBetfzZpf6tGihKrqCo5z854Ub4ZNAUUTRT6eYHNh7FYi", + "/dns/boot-node.helikon.io/tcp/10022/wss/p2p/12D3KooWBetfzZpf6tGihKrqCo5z854Ub4ZNAUUTRT6eYHNh7FYi", + "/dns/boot.gatotech.network/tcp/33400/p2p/12D3KooWEvz5Ygv3MhCUNTVQbUTVhzhvf4KKcNoe5M5YbVLPBeeW", + "/dns/boot.gatotech.network/tcp/35400/wss/p2p/12D3KooWEvz5Ygv3MhCUNTVQbUTVhzhvf4KKcNoe5M5YbVLPBeeW", + "/dns/paseo-bootnode.turboflakes.io/tcp/30630/p2p/12D3KooWMjCN2CrnN71hAdehn6M2iYKeGdGbZ1A3SKhf4hxrgG9e", + "/dns/paseo-bootnode.turboflakes.io/tcp/30730/wss/p2p/12D3KooWMjCN2CrnN71hAdehn6M2iYKeGdGbZ1A3SKhf4hxrgG9e", + "/dns/pso16.rotko.net/tcp/33246/p2p/12D3KooWRH8eBMhw8c7bucy6pJfy94q4dKpLkF3pmeGohHmemdRu", + "/dns/pso16.rotko.net/tcp/35246/wss/p2p/12D3KooWRH8eBMhw8c7bucy6pJfy94q4dKpLkF3pmeGohHmemdRu" + ], + "telemetryEndpoints": null, + "protocolId": "pas", + "properties": { + "ss58Format": 42, + "tokenDecimals": 10, + "tokenSymbol": "PAS" + }, + "codeSubstitutes": {}, + "genesis": { + "raw": { + "top": { + "0x0595267586b57744927884f519eb81014e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x06de3d8a54d27e44a9d5ce189618f22d4e7b9012096b41c4eb3aaf947f6ea429": "0x0900", + "0x06de3d8a54d27e44a9d5ce189618f22db4b49d95320d9021994c850f25b8e385": "0x0000300000800000080000000000100000c8000005000000050000000200000002000000000000000000000000005000000010000400000000000000000000000000000000000000000000000000000000000000000000000800000000200000040000000000100000b004000000000000000000001027000080b2e60e80c3c9018096980000000000000000000000000005000000140000000400000001000000000006000000640000000200000019000000000000000200000002000000020000000500000002000000", + "0x074b65e262fcd5bd9c785caf7f42e00a4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x08c41974a97dbf15cfbec28365bea2da4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x08c41974a97dbf15cfbec28365bea2da5e0621c4869aa60c02be9adcc98a0d1d": "0x380325fc2095902f5fe394f244bce38b0dc3d631cbc05f0b64d5620a71bbf2514f0f03f045328f504c13dac9ddd9b1186098aee7c46cb8d55289dbbf2433bab7a2623903a0af06322d100056125fac1df39d161089b07ae279505aae8731c4d110a54ad703aec8e80ea0375f8669d6e55d7abb6a3117678d7bb851a1bd100a01e52a4fed9003d46c454f9b620603feef8c3a2a5d7098205b8566500fda0fa0b456d6ded54538030e901c390fa37d101ff25d70594acd2df67b4493ee77a73684f25d39313536d702f4f4d0eccb899bf2d611b56e0afec7c740efba404f8d0e82a545f988c45316c402182879ec92e811e2a8cc117f3cde1f61d3cba0093134cfb1ed17a4ef74915d4a03e843f200e30bc5b951c73a96d968db1c0cd05e357d910fce159fc59c40e9d6e20203d51bba2124f480e3507eb1764fc3019ac7abae8ee215683a285078bda7f51d029338ece1c6bc6439dc4d16bfe33f28c9f0af31626bb8142849742b7a624f68070333022898140662dfea847e3cbfe5e989845ac6766e83472f8b0c650d85e77bae03586dafcdab3d4647d4dc68732a9cab8aa34c00c5edd04e65d9dd44c2a1fd21e2029a1eb2e31dcaf468dbb516f9b620fdd7c3f090d58a88e02b51b25255b2182dd1", + "0x08c41974a97dbf15cfbec28365bea2da8f05bccc2f70ec66a32999c5761156be": "0x0000000000000000", + "0x08c41974a97dbf15cfbec28365bea2daaacf00b9b41fda7a9268821c2a2b3e4c": "0x380325fc2095902f5fe394f244bce38b0dc3d631cbc05f0b64d5620a71bbf2514f0f03f045328f504c13dac9ddd9b1186098aee7c46cb8d55289dbbf2433bab7a2623903a0af06322d100056125fac1df39d161089b07ae279505aae8731c4d110a54ad703aec8e80ea0375f8669d6e55d7abb6a3117678d7bb851a1bd100a01e52a4fed9003d46c454f9b620603feef8c3a2a5d7098205b8566500fda0fa0b456d6ded54538030e901c390fa37d101ff25d70594acd2df67b4493ee77a73684f25d39313536d702f4f4d0eccb899bf2d611b56e0afec7c740efba404f8d0e82a545f988c45316c402182879ec92e811e2a8cc117f3cde1f61d3cba0093134cfb1ed17a4ef74915d4a03e843f200e30bc5b951c73a96d968db1c0cd05e357d910fce159fc59c40e9d6e20203d51bba2124f480e3507eb1764fc3019ac7abae8ee215683a285078bda7f51d029338ece1c6bc6439dc4d16bfe33f28c9f0af31626bb8142849742b7a624f68070333022898140662dfea847e3cbfe5e989845ac6766e83472f8b0c650d85e77bae03586dafcdab3d4647d4dc68732a9cab8aa34c00c5edd04e65d9dd44c2a1fd21e2029a1eb2e31dcaf468dbb516f9b620fdd7c3f090d58a88e02b51b25255b2182dd1", + "0x08c41974a97dbf15cfbec28365bea2dac713b7f8b14e2815d297585d3581e774": "0x0101000000", + "0x08c41974a97dbf15cfbec28365bea2dad47cb8f5328af743ddfb361e7180e7fcbb1bdbcacd6ac9340000000000000000": "0x00000000", + "0x0f6738a0ee80c8e74cd2c7417c1e25564e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0x1405f2411d0af5a7ff397e7c9dc68d194e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0x1405f2411d0af5a7ff397e7c9dc68d196323ae84c43568be0d1394d5d0d522c4": "0x03000000", + "0x1809d78346727a0ef58c0fa03bafa3234e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x196e027349017067f9eb56e2c4d9ded54e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x1a736d37504c2e3fb73dad160c55b2914e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x1cb6f36e027abb2091cfb5110ab5087f4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x1cb6f36e027abb2091cfb5110ab5087f5e0621c4869aa60c02be9adcc98a0d1d": "0x38b07d600e3487e2712dcc3879c7b17c9b29cd2243b45f0d9343c591b89cf82a6501000000000000005440add43e5388a81aef665c9086d386c0be0ce75e4f8a4a3d8168e976ea821f010000000000000074dacbca0cdb5099afef67e622c147614198e669931cebc605629da332632473010000000000000058108e1651614afc6a535c426fc013945e93533faa33819fe4e69423fe323302010000000000000050412bd7d3f1075e8f8e3b682d05ea20b391c287d8c849a0e49a78f568553e690100000000000000c44b3e8efe854419ccd5801a82ada22d39cfccdbcece382304cdfeac81ebe4020100000000000000b2efe7e70daf44b3466c63ccbf4487f42c6a9f6fbb7050b849691e36ce92e3470100000000000000facb2f987caac6c1290a9784b1efdba78343d39aed805addb12945efbe444000010000000000000068a9ec74fa35b3425eaf503dd36294ba8e758e7b8084c4d6bfd547f8c6b5827401000000000000007c8348ec95a0faad6a638ef74864761028c53221bde07e9ff7c81a3f427abf3f0100000000000000ae240842b74e5dd778972e451558134f434c7a1d8a52bc70519f38054e245533010000000000000018bd0f67d77f04f1a92400421813d8927fad109b40a8689254a5f0c8b346857c01000000000000006248d87bd2a640ffe26d6b831735887c24e2076a3a0f3a74f7ae7568c276040801000000000000001ab03b1b3277edfedd24ef3d3359b449b64bd95ed82a04e7f9fbaab7b71dc0150100000000000000", + "0x1cb6f36e027abb2091cfb5110ab5087f66e8f035c8adbe7f1547b43c51e6f8a4": "0x00000000", + "0x1cb6f36e027abb2091cfb5110ab5087faacf00b9b41fda7a9268821c2a2b3e4c": "0x38b07d600e3487e2712dcc3879c7b17c9b29cd2243b45f0d9343c591b89cf82a6501000000000000005440add43e5388a81aef665c9086d386c0be0ce75e4f8a4a3d8168e976ea821f010000000000000074dacbca0cdb5099afef67e622c147614198e669931cebc605629da332632473010000000000000058108e1651614afc6a535c426fc013945e93533faa33819fe4e69423fe323302010000000000000050412bd7d3f1075e8f8e3b682d05ea20b391c287d8c849a0e49a78f568553e690100000000000000c44b3e8efe854419ccd5801a82ada22d39cfccdbcece382304cdfeac81ebe4020100000000000000b2efe7e70daf44b3466c63ccbf4487f42c6a9f6fbb7050b849691e36ce92e3470100000000000000facb2f987caac6c1290a9784b1efdba78343d39aed805addb12945efbe444000010000000000000068a9ec74fa35b3425eaf503dd36294ba8e758e7b8084c4d6bfd547f8c6b5827401000000000000007c8348ec95a0faad6a638ef74864761028c53221bde07e9ff7c81a3f427abf3f0100000000000000ae240842b74e5dd778972e451558134f434c7a1d8a52bc70519f38054e245533010000000000000018bd0f67d77f04f1a92400421813d8927fad109b40a8689254a5f0c8b346857c01000000000000006248d87bd2a640ffe26d6b831735887c24e2076a3a0f3a74f7ae7568c276040801000000000000001ab03b1b3277edfedd24ef3d3359b449b64bd95ed82a04e7f9fbaab7b71dc0150100000000000000", + "0x1cb6f36e027abb2091cfb5110ab5087fdc6b171b77304263c292cc3ea5ed31ef": "0x0100000000000000040000000000000002", + "0x2099d7f109d6e535fb000bba623fd4404c014e6bf8b8c2c011e7290b85696bb3": "0x38f89c97bf5b2c07c05c84eebce4ffc7b28766946c03741fd1a71fdae0942e8768cce3ec06252cf7cdad47fe1265047a9bbddb9059ee4bdc6dec83b67249b4a9342ada042fb4bbfd9b6d8c48293ffc4a7722632c843a67e608554c41d06aabc41392cb05c48fc643f057626c669604675c5ad5a836266f260ae7030c6fdc17a5438c15606f4c121376097ff0e96c2a33ea7b024d812b42fe2c741c8b8cee17e63d729053f28155071474b4686323db5f7a318cb3f088b76660cc8ff5e3e11ec32eaa3955187f755708cd6a8104314b962ff5043e36efa3ec5d84df40c58b44222126e2fc857945d01520797a75388c58e710c9fefedd28387af70880f1682be41e64ffc83f4f86cc595e607a00b977eeb6641e02a4e6e556c24ab163aecd7d146c7aeb767131602e6612e607a9eb8e26b4ce4fa4765593d032bc923ce8acadda42763d070989ead31f265b40cc7a0cd29d47799b766d6a7f084e44c82baedfc01e629f9fd0dd7279c7af7470472d1208a13e33239b484974d47cffce4ad4785644047277f22b9ef92a8b99618f4c86c2412f0e3b08a4f965f842775672043d1e259a86227e204a2d003399c2a3b50c2c869c4380c195a014a02f6d2e7048941237", + "0x2099d7f109d6e535fb000bba623fd4404e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x2099d7f109d6e535fb000bba623fd4409f99a2ce711f3a31b2fc05604c93f179": "0x38f89c97bf5b2c07c05c84eebce4ffc7b28766946c03741fd1a71fdae0942e8768cce3ec06252cf7cdad47fe1265047a9bbddb9059ee4bdc6dec83b67249b4a9342ada042fb4bbfd9b6d8c48293ffc4a7722632c843a67e608554c41d06aabc41392cb05c48fc643f057626c669604675c5ad5a836266f260ae7030c6fdc17a5438c15606f4c121376097ff0e96c2a33ea7b024d812b42fe2c741c8b8cee17e63d729053f28155071474b4686323db5f7a318cb3f088b76660cc8ff5e3e11ec32eaa3955187f755708cd6a8104314b962ff5043e36efa3ec5d84df40c58b44222126e2fc857945d01520797a75388c58e710c9fefedd28387af70880f1682be41e64ffc83f4f86cc595e607a00b977eeb6641e02a4e6e556c24ab163aecd7d146c7aeb767131602e6612e607a9eb8e26b4ce4fa4765593d032bc923ce8acadda42763d070989ead31f265b40cc7a0cd29d47799b766d6a7f084e44c82baedfc01e629f9fd0dd7279c7af7470472d1208a13e33239b484974d47cffce4ad4785644047277f22b9ef92a8b99618f4c86c2412f0e3b08a4f965f842775672043d1e259a86227e204a2d003399c2a3b50c2c869c4380c195a014a02f6d2e7048941237", + "0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96": "0x0000000007def964eb114a412100", + "0x26aa394eea5630e07c48ae0c9558cef74e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x26aa394eea5630e07c48ae0c9558cef75684a022a34dd8bfa2baaf44f172b710": "0x01", + "0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc": "0x4545454545454545454545454545454545454545454545454545454545454545", + "0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746b4def25cfda6ef3a00000000": "0x4545454545454545454545454545454545454545454545454545454545454545", + "0x26aa394eea5630e07c48ae0c9558cef7a7fd6c28836b9a28522dc924110cf439": "0x01", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da902d496d20c019d22397accfc42b7635d94c4156ed6a101ae478a3de3ba70a05fce8a3d67be6fb85f33bfcf2777ab6b10": "0x000000000400000001000000000000000000c16ff28623000000000000000000000000000000000000000000000000000080c6a47e8d0300000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da90ffdb9747f7a8bfa200ea2291eea6bdf9492b8c38442c79061bdbb8d38dcd28138938a7fd476edf89ecdec06a5a9d20f": "0x000000000400000001000000000000000000c16ff28623000000000000000000000000000000000000000000000000000080c6a47e8d0300000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da911fcf3e922de10898cb04273301735e65270ec35ba01254d8bff046a1a58f16d3ae615c235efd6e99a35f233b2d9df2c": "0x000000000400000001000000000000000000c16ff28623000000000000000000000000000000000000000000000000000080c6a47e8d0300000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da915fbc5d9b44885a2dce0fbaa3834ba211e30aa51ad68b8918d2c46e914986818c111bee03582610cbc9fb73fe0e4c413": "0x000000000400000001000000000000000000c16ff28623000000000000000000000000000000000000000000000000000080c6a47e8d0300000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9279effc2672354478fb5e3f7e65726b668728d12a90fb1a9f5b0f0b2814d730401d314964113554e66ff19e7067d7c69": "0x000000000400000001000000000000000000c16ff28623000000000000000000000000000000000000000000000000000080c6a47e8d0300000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da92ffe7c0dd7d3d8d8485c403a33fb7adb6ed774481ff68097867271bc8ecaeee3500817ccefdfda74ceeafd32a2259627": "0x000000000400000001000000000000000000c16ff28623000000000000000000000000000000000000000000000000000080c6a47e8d0300000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9350ea875b4c0459b3527d475e9825c99d41a8a9678862ebe9d1a1d59cac1c8430ef31e282f9cb391cf6f2b4d9ce2fd3d": "0x000000000400000001000000000000000000c16ff28623000000000000000000000000000000000000000000000000000080c6a47e8d0300000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da94d176c4abc6d2410c43423c2714b909c32eebacd223f4aef33d98a667a68f9e371f40384257c6d31030952b9d94e1152": "0x000000000400000001000000000000000000c16ff28623000000000000000000000000000000000000000000000000000080c6a47e8d0300000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9585bd5ccc1af6cf60c19d791bb091b750efe248e3ddcfcb4f29675b70fc0a8e2db66b65381c45d299427b60d05f76108": "0x000000000400000001000000000000000000c16ff28623000000000000000000000000000000000000000000000000000080c6a47e8d0300000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da95ecffd7b6c0f78751baa9d281e0bfa3a6d6f646c70792f74727372790000000000000000000000000000000000000000": "0x0000000000000000010000000000000000e40b54020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da965bb58c29c9825c1f6727fe8c41650ac82c3105dbd4bb206428d8a8b7ea1f19965a0668dd583b06c3b75daa181fe654c": "0x000000000400000001000000000000000000c16ff28623000000000000000000000000000000000000000000000000000080c6a47e8d0300000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da96deaa967a94fa09152be01a253511479d0b4896a63b672a7a74f5234bf9ec8567ff3c5bb8f93795e15e2c498b48d327c": "0x000000000400000001000000000000000000c16ff28623000000000000000000000000000000000000000000000000000080c6a47e8d0300000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9829f3f4d6d7c991993e0c044ae97410b043393e76c137dfdc403a6fd9a2d6129d470d51c5a67bd40517378030c87170d": "0x000000000400000001000000000000000000c16ff28623000000000000000000000000000000000000000000000000000080c6a47e8d0300000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9a00c6f5358fa04d76ce7cf995bce2eabe21bb02f2a82cb1113ff10693093377672925b23f047624c0cfa7a24a8609841": "0x000000000000000001000000000000000000c16ff28623000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9ba2db252d1b8c64ec51b04d0f50d7d2b9037d1020ed699c2f538d3ffcf0eb98087ee11ca4bd07bfddb0d68633806af74": "0x000000000400000001000000000000000000c16ff28623000000000000000000000000000000000000000000000000000080c6a47e8d0300000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9dfc40f350cc4563ad9ddff5ad92944278eef6710734f5d1e7d2eb303fa8f04e9bef65fb680647b24624723f95b868964": "0x000000000400000001000000000000000000c16ff28623000000000000000000000000000000000000000000000000000080c6a47e8d0300000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9e6fb488a1496189393ed0a95dcf5577e7e939ef17e229e9a29210d95cb0b607e0030d54899c05f791a62d5c6f4557659": "0x00000000000000000100000000000000000064a7b3b6e00d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", + "0x26aa394eea5630e07c48ae0c9558cef7f9cce9c888469bb1a0dceaa129672ef8": "0xaa183d0014706173656f", + "0x2762c81376aaa894b6f64c67e58cc6504e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x2aeddc77fe58c98d50bd37f1b90840f94e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x2b06af9719ac64d755623cda8ddd9b944e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0x2b06af9719ac64d755623cda8ddd9b949f99a2ce711f3a31b2fc05604c93f179": "0x380edf2a41cb81178704560b02c35f5e01a5a97a568ebc10c025ade18b6ab2fa1d98aab6f52520022d011a6eba2dca1c6327edbbcd753c170dcf0e9118b5f0f25bb414aa148096a92a1831309f758f944725653363ccbaeb21817b7df5784b8d4674bd654c470ed9b94972c1f997593fab7bdd4d6b85e3cf49401265668142584e94848b8cf2cbc9e6fd72db8d80676591b5be4d1ec68972ada48cf6fd01228712a8a03d86e6c0dbe180cadfc7994121f462b28f7a8cb1be7e0e354147624be734bef47a9e4b47ed57461e1d28cac7da327a52ebcd64d74080d31deb3ac7a7645eca3c2703db1633a27eff681d979967988c3a6752c669fd41f1abde10f3b0544660fcc9d094d21fe17cfb7426501f50cb3d75c4c9395a3140e0f255443f660d3b30c40adee5476157ef3c2a26e10cab95ec7d54b62dd220738f5a474d5f86874e06bd8fd81e50cda2bd67bf6893d921d1aae5cb08409ae43e0bff4d54e1830e58d28145a7cde195a4c834276730d30f074b212a150e770931ee9470e853e7d2247c03ca47a3201455f8f89defda4aa909cb1d25dd9ddb7fd62a940606f79b56632cd12c731d91441f0114b08d314cd3f9a9f7fd0240d467fe54adefbee4d90762", + "0x2ecf93be7260df120a495bd3855c0e600c98535b82c72faf3c64974094af4643": "0x01000000000000000e00000063e7f4c4028d97f9e69689cea528e2d0155ea2b202be0a42381c642ace2e4cf4", + "0x2ecf93be7260df120a495bd3855c0e604e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x2ecf93be7260df120a495bd3855c0e60c52aa943bf0908860a3eea0fad707cdc": "0x00000000000000000e00000063e7f4c4028d97f9e69689cea528e2d0155ea2b202be0a42381c642ace2e4cf4", + "0x2f85f1e1378cb2d7b83adbaf0b5869c24e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0x2f85f1e1378cb2d7b83adbaf0b5869c298ef7dc060436e4ed803af07632b89b65153cb1f00942ff401000000": "0xe68919a7ceff5bcca24e5051b9ab34b9c9f9e74a925cde4c49570cfed7bf14180e000000", + "0x2f85f1e1378cb2d7b83adbaf0b5869c298ef7dc060436e4ed803af07632b89b6b4def25cfda6ef3a00000000": "0xe68919a7ceff5bcca24e5051b9ab34b9c9f9e74a925cde4c49570cfed7bf14180e000000", + "0x2f85f1e1378cb2d7b83adbaf0b5869c2ff3ae12770bea2e48d9bde7385e7a25f": "0x0000000002000000", + "0x31a3a2ce3603138b8b352e8f192ca55a4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x3a636f6465": "0x52bc537646db8e0528b52ffd0058540d061e1308c819541050e938e9005f822fc197252fa2ed5713e0ba46c46f094c0fe2307326fb057d60bbce8bdfcd175f1feb2bc7604d3068f26910799b2f5ebdfc5148bbff93d098c88f368b8ee8661e889a5a2344ad1142f6de72cbb41dfe175118bdb120c23497929fdc3aea901fbf5f6ec5254f62bd59323b7e76fc0f30180c36cf35e4cfafa724fca1e767a5f2247e3bd43a5ec62ddc3617c3ae39462e821cf3b8db150a63cb17f9629075e3b88be0ec6e85aac4324d45eb2b34294e761194ed5dc9ba317da543ad5095086b2a483a9ebf1e0d13163d251face33b2511d6f11c590cb7bd712be4d16c7cfcf8507e99b5e724e8c2c797dfaf4703ff89ac1bb3f6437c14e300b805fae263731bf4f1f773e356fc9ec166e38be7cb73ec2591317a0538ea782e76128cbd5eac1bb3e28798c16556fc11472adcee845f6b99156ecd0fb7de2f032df7f0f7dc027dd963731bf4711b91be8d0591456f2c88a40e53cd6fa13706041acd5e92a22f7e63b0a4e62fb7b6f327b7b2f3376e6df339f6926c75a34a0145c098b59d9d87028ee8b23edbd12bc05167e7629781db1b189b8b5e762e038b62678f1e95249359f34abece1e3d19b6b3af97649915761d3fc41cb71eade151d36f60b8f5f60c0cb32fb3b60fc90d0c6787f345b2b5af97847e88396e3d59c357cb6f60f8de9e81e1326b7bb8cc0a7fe8ede1322b9cd2dbc3eccbac9087de3e2425a8552aaf96cfc0ed0d0c717a9e8b9d066e67e0f67a34cc961fe221a62015d9f2135c66c5af9744d6c9acf8211ee2211ee2211ee2dde1fae4ebd539d2a23482db0b7c1b03c28b0ebfe6b3b81576cde7afb815b29acf07c2add8fc8f5b1b03c28ae6db708b9bbf0c145d214ef3b98d59be8d01a1456f875ff359dc0abbe6f357dc0a59cde703e1566cfec7ad8d016145f36db8c5cd5f068aae10a7f9eb29e00810accff61077dcdaf37787eb9321bd3a4731c61170bb13bef9dc067ddc027dcbacf06bbefc7a49e4a307c30f30180c8896e7b85b6ec9ef27b7e2f7eb6dcce20fb1043b66f15b5f68d3fcf8f9706b3e67c3ad65d69ebfe2566c3e0eb7e4f95cec56dcdae6af273fc4433cc12b396de5a863bd59b275fcd6b1de2c899f8f9fb528b6ac9359fbf592c41ac68e1fe221de1dae4fdeab7324630cc3ed05be8dc1c674b8f5fee3d6c660b0de6fdcda184c4cef3b6ec5de2f03ad2bb4e9fdee6c7df25e9da31891702be4dbc7af895b6ec5de4f6e6defb9d4722bf67eb9c50fb7de4f6e6defb9d4722bf67eb9c50fb7de4f6ec5de73a9e5d6f67eb9c50fb7de4f6ec5efb9e8258975a34a0145c098b5cde7a18023baaccf3617bb08c65e8fcf71b7ab5200116698b52dcfa3d9f8e6e5e3a59724d68d2a05140163d6365f82cb2c794e76118ccd1e7fbd599759e1d6f243bc5e92c92cf9211ee2211ee2e815e0a8f9eb25891fe2213e8a312281db9df02dcf6dd0c72dd0b7cc0abf968f5f2f497cf460f801068301d1f11c77cbadf8fde4167fbfdec62cf9218e60c72cf9d617dab43c7f3edc5a9eb3e1d6326b2fbfe2566c791c6ec5cb73b15b716b5b7ebdf8211ee2095ec9692b47cdf566c9d6fcadb9de2ce1cff3672d8a1deb64d67e3d25f15c437efc100ff1eec8fae4bd3a471ce30db8dd541db39659e1aae3b9de186c4bdb302b7e71b8dd541db39659e1aae3696f0c066b1b66c52f0ec7edaa14408419666d2fb3f6eb2599ccda0ff1e270cb5cd117bf315852efd7e356e88bdfafa9631216860f4edd83ce41abd13a68327a072da6cbe8a5f6a2c7e82c9a8aaea245d04a7d45b3a09f68271a8a5e419ba051d056b414ad82fed253f408da4b9fa053d04d74145d8266a2b168120c1d61480a4346186ac1d00986a0188a62688a2129869e184a1a126208690836c4652888a12c43450c6d1902620889212286b40c393134041235903c61c805487c80240b243d40f2c41009864680440b245420790112162099029215201933c4c51013434b2081028919244e2079634889a118209102923343251892c1501743490c79602836d4012450401285a12c5e38c10b2678a18a17ac7881042f3cf102140190c20b1d7821891738f0c2085ed8f2c2102f20bd20c40b5c0270e6052d2f30f142065e38e2852502308517b2bc1002a12d2f80c0881823608cc8c0481746b83012331203235b18818191258c28612404464060a48b910f18f180910e1849c2080e8cdcc0081246928cb4c048164658606405465460040b23293042032333307285112b8c90c04815464660a40446bc18a1c2c81446a430128511288c3c61c409234a469a30c284111118d18091238c64c04811468c30328411242129084141e80da129084541880d21324241105282d018a11e080d4148084263082141e8084261087d21048690184246106a430808425d08c940088c9009845820c485d017a19810164572504409459650240945d628f28322658a04a188108a00a108128ab051640845d428924611342217518c226414b141911914b9a248098a3051a489221a28e244101482a280248a201b048d0962232808414a415d044111a44610164132080a139482201f04d12068064160826a105446d00e82a20872220809413a08ca411018414b41610489116482a02f415904b1200809a02858420049517900a4045406680aa0250041f11346eb07401c58150174c40f095400c12a06ab180f183c39e02102cf10789cf003e907179e1ef0d48007053c38e0718327093c25e07901cf183c51e0c182c74c4b07ad25211bf0344128072d295046402101750454191796c0c21a3f63fce8c00525fcc8e2c21178622eb481da82c81b2e3c41c409750d17602e34f1d1c085215c08c20511b82044f5810b4bb8805481e08216224aa8648834a10ac10522883cc185225c30c28524178e28f2c505257e3ef04345902578967852306bd03242cb0700d0004bcb4f976f8c1f2454434841e1a7053f4a081102644388078418d1e241ab8d1c6bc82708f940d0195349c816211a10da819023841421444b3542103041dc087283204a0862031e292062e6071541ba207284202fe081823ac6852d41b8f831c50f2f404c0419230810829011b425480c809a20b20422653e190429838514e48b54526a0341c0d049d221426708f0043a45e820059142903782e800080aac20829c2088143f26e0e1e2c7169e323e4af041c20f08843ec003854f0e7cc4f0012386e1f3850f0e7c6ea093e54710d38a59029f297ca41842021f0e0029021022107183e7083fb4b0b0041694d0eac124830519f820a31261853456f8c1102b2a1b1f1741b4f8baf8624162f5072ba011248b6f065f0d5618c3e2c21a6285355cf8000e332b90b1c2182c2282b4aca0031c4ec0e1068e25e068c20a2c5841052b60b1c209523be811420f1b3d6bf4008195a5e707ab2d5a68f08029728691345a40c287831f23f8d1c68f2a3e227466a012824e0c8428810a03480f524008d9006a0c9d1da890e573e2a7043a63a07290030837425c042e2041478c33f121015103e5858e18214ba496a013068f1428307472a0f3058a0b14193a660849ea59d29141ca8c1e3474702064089d1a0871e21b42870b214a3a6ae4f0018f255065f48891a30729188f171e12a49c90638c8e0d3e2656374829e1a70a211950b1117482225d8474d14123a5861134844cc183c42304cf123c43f06c8027032b9cc163c40a3950010c0f123f849848b49cd032f393c50f172a28a1420882941094041e29a800fb89e2a7091e312a00a113849d2738072fa080c9603478d0688520880c74cef0193a3dd04943e70c1d1ee894a143868e0e749674c0d0f142e7063a617468a0f3021d30421ed081818e163a2ea8661089029129d424fc90c2052e3a42d42054346a11826c51d3f001061124b890258819d5093a5b884881c8997a847a860e103969d428e49c51cfe488a96fe4f0a04a21c70c1d580e1a750a150a393dc8514327091d0ee87840a7034156509f20c484da84ca843a835a4695811441ce167507f104750c1f2da82ea82da85dea07aa076a524522080caa0682b8808e01ae01022107991c43e05923958194065e30e22ae019806f0cbd0146017c0268066402e8469035c02404498347093c4cc821424e16392ff021c60520829ce1c38cda868f307c90f1d1031f3bf021860f1df858f2a1860f367cac71b3e5468b0f20f818828f347c10c1c70f7c8ca1f162b6e18307467c80030a3e5cc0e30394192d245011f858c1b7850f27703081c70644924084093dcce078428f347892702841880b585b70a0c079c247042a984027081e58f058010f2b8a3cb182014f153c3c3064044143f06c2124043c2ce03963c71ab3055c021e2b8034b083044259fca000350321483a2dd0d902e502941642885829b10a010b3d70818c1026503400fa802a08a830281c0829037503d45210255a6c14f900aa8b16115035f844e04211827c40052826098480691d61c7085a53b4d270c1084536d073860e135488828519804140f1a025a615041e18fc8015f1800b43f09941cf98a012b4cc407db1a30a1f6078be1072049e32563af8b050418a4f0539d40032a2550625c6f7448f194538803a83052f78beb48a10c4033c34d089f98801cf0a7c6cd11a426b8d9f255a40a061680d641142a490460ca922c719201200788206073436a0a901cd0c50b11f1c4c333c4e309ff0c1802788ef053c598814a18a09c2021e26e0016285c42a690531448cf06941a48d1578b0eac203e3f1658532563063c5019512aa107c6204694155a30e8105848f1c1081828f327c8ce1e38b0f4ced4145c21783cf8c8f8ccf8bef8c0f8d2f8c55078a8cf9be586d60e5812245f896561f5825f1811157f025a1880f8af480474b1129725890b3822152f0bcc1d3021514aa27544ea894544da89810c225f584202f3c64f068d11ad31202cf09789ef0a382203482c4f084d152a3452648972244f894f840f07529e2a59679210531073eda78a10924357081083d6050628286904283c708423f0842c19fd013868fa4a0275464503040bde0052780422089288244d099941b2b2e90d840a806b209159c10c281540f68085a67f04c1174c52a8c1ba41f227862b09a0190078a74e0e70b214de4c47eae6829c132008b8002934a4308172a3ca142132a28adba102ac20c41cb891f1b08492375868f2c7ec2f08c19c2e2678a1f2b86ae98492f7409ea814ce24acc0cb85086b9985c5a55ac64c0c3c62a8c0a5d540862688bd5172b1b04a9c0c80f8468f0a3082148a06c303520991082042439e03933a484a4053c64864c502489151873073c66e8fce0c7892240f020e167053f60a06200d401214fbc80444e0d82aa081a411011281df0986045831f303c9410d281a0229048114404432f08ca80500764077e66200404487080dac150133a63e6153f2ce091411130b80beac40f0d907c21048a1734304df033022149acc07c8919048329a22444cc0b53acbc102202236adc3c010eb1c2811023ac8cf879c190164243042d41052682489033032430f8d1e2c70b940c7e4280440c242e688901444c91a4202e48a658d5e06749880c90a031e4e587091d200cc160471143219847f478a1e38322301f12f85ce163854f1540ca40e245881a42a210d2864e179405130a730a14080a9b676810f38d1905fa654a8166092286e60bca058dd118b89084173e20848a1c19d02d80940002c18f0c78a2f851e2e9426805422ef8f122d482940e84d0f801c48f144265f8504a8991c3450e0d72c0e4d8a08523f050f1d3c5cf133f2910d2418b8c1f43f08c8047053f30f8d9e227c623841f46acb4f889c18f0b7ebef064f153039e19fc40c1a3c68f087e4ef07383203378c204112148084145085a419011a9314156041d91d345912a5e4812f2414e18540b788a60042674c6678b10117eb0e0e1c10b5f5059a888b03ab303881d30006c00001c08a2250897205b88c4887441840b16c06061898530762cedc8c10e318884217203223658018a15a458218aaa4415415da29aa07ef94cf09de0fbb283cc0e22ec18820a6178005104043c82f834f025ad0066051aac30838f042a7ca102182b7460850face00115622a74a10217428620a4084288507150bfa85e0c616288d290265a00a385a516c200bf00c300c1b801c18d123721103286901d0821a34709134ccf125a88410b5cb4104b4de183a5ce083933048821b016d66821082db041640744c41029c327083e647c84e0f3049f28f840017442a2007c0284c18c02dc6226e1d3850f181f19ec18b3c3c54e173b31d00ab004e0152d1461d5849513401e80678066ec88c18ed88e2d7686d8296287081e3178aee099024f10785cc0b3031e28f0fc8007083c3ae0b9014f1a3f88e0698367093c5e0885119a22688d2032738b900a261bd306431b9861cca529c60c33bb784189223a28e2c5ac628e607a1112420804930373035388893487104a825019d904e903e98664824443fe400a412a410641f64002418a91652412e419d20cd98654433a4192916bc82448366411a41939461a411e41f2400e41a621972089506449880c59027985549220904ec8276408e412720a49858c427a911f9052c82e120aa984f440113124103288d8059fe129b014f80d36023381dd6036f8082c045e0297e12230190e02278189c0436025701b8c84173cc038601d7018fc057bc13760308a84c151700c380601f6c22a602a9805bc82225ff009f8056c02c682afe02a780b4e014fc1246017b0146c05b78047c02828b283175410651081107f108310c1884b4422e210718ca883095cc921aac0872844e4126115f8a189952a0f70000e1250800d09880106041ca0061a6658420025321069e167c80b0100400cc20b828bbd710719134b222b4d26c0644a13221e9830e1a2d4210a111326271f9f1c15e800c5890f13b8c9c162898a9a1055c921869d9c140cc9410114284d728002a589004ec0431105a21041f9b244443b309152c4a488070a3821aa404f8e09d60a14274d8a8874604244b4c38f9c12ac941da2386162812a443e5061e2644a174521eac1024d6a78ce154b94431429519834c9218a1403e4d03d72acd0414a0e443ae4e49060ad5880e889150b102d4900985385152703683067042ee478d9c9a1626972a6582996871ca44c21bac98962abf84001273b449192031327539a68024d5c3872a0f891f344508e13ab831326454456aaf890c38e1ca5b542e484024c9c4ce926537488d2a44a0c3e729a28fa8128ca4e0e1316287252450a0f453e34c9c911c15ab14204a547ce1235394a84608ba2f8202507263b342182822307045ba5871e7a982195d345859c0fac0e445128e0c44a141f98e420e58a131fa810b5723cb0454456987460ad38b162811d888826c0c4c994b6c00e4444ae1c39496c911529509854913285a80a0776072952aa4c6132c5090f56aa1045a980142616207a02e66c60ad10f160a509142b4c7420720265ca9426517cc8c94162ad1015f930c58a131d72e424d51c0d2c5195294c88aa38f1810a5115265676b832452727035b1485a807a2a226455676b832859573c45a212a9272850993285270728c581eac34e181890526c0a4082b5088a24469c2430e4ca6f4508507263a44f141ca04a23821a2288a941c9850e9418721d64a0f4daa3499c2a48a14a495b2038f1c21d64a5114a22b44395c96a8a8890e4e7488d2240720395b9648072939f4c8d1b255a4ec6085c84a96b552e4c394221fa4f0e404d1830f56ac34512107886d52d444072651a438d181a8c88a132b5588a6fcc881ad15a22a52726062812227509c4ca00914274dae34b98f336b658a0f52aa5080890f1f53582b55a41459912243932a4d6a58f990c256c0c994ae42f4a48a1406d000fa786389887c20f2e10036e84044010a34b181051f51d82645527ca0c2c44a14264ea63405a23879d2a42801383ea0b0528a983c61897288d2044a9309309152c4c44a51142752767c98592b3a54695201a22a4c2810c5890e5188a6307132a5ad409122a58628529c143589e2a4072906a83e9cb0569ee440c4430e4d582b455188aa10f110c5c97d30218a931d6e7cb8b13938b112c54995a21f88985800ca94294d985421d2018a131f5c4f729002c585e363096b85870f256c1326383e92b03d306952d4448726454433a87c94b98013284d9c143989e204870f24ec931ca440990013a2221f7220fa8188c6c711b68a1401741b89a04ca04951141f76605294035115273a4471c284c98e19704ca17d21e388287a8fb88dc1601d8fe48ecccbe2658953a2367570361c9c6dd3c1d9b66ddb984e9a6db67c62668e94329572aec44199299dcc534a69c3ccbc316e8cbbbc91ee4e9632ca8d4b296566a6bb9b9cbb94e7d2dd38ee4d5c6daea489579bd9e4ac9392661acb93c652ca9394cc268d4eb9f4a3cb1f4fc99327dd9d3c79eeee049a508e73755667714829e54637ba946e31524a4d1ba554a6b4a5da04b5b92a497160c964aea675734e4955544a2a699492b2a473ca18bb9daa8ed967b7ca65cdc98c9200b310639494258d546ab31bc272638e41987723c0922c519297e54e6d71d089929287e70a524aa6a66566a9c91865a7824077dab873eea472b59573abdbf2d87d00b3a4da7633959adcf1d464c7546adaa63ac99407903959f260964c1d207969ec32a9c98d9b940db8214ac92ba92771ec763491294b962629358d6bb4c9cbccbb5152aaa2ecc93853cc92535288fc4e3b94019399b56e4ff3f49d16703a514fdbe44ee66e519379521959c3c13fd68615b0492997999929534a29cf9e7657ceb9bbcd39b739a3d4b4a9f1b6bb4d29e5f4a494524a1a66d624a56b434d0d955ac709c0a194fea09e4480644f4e8d0fb03f9ec73548a621ca3925ff0c611b96924e969272dc9d9e67e35596d5c6f33c03c49a1a49d7666d3c0f07087a2849a5dc4d63c92c375bdee49c34d249299d9c511a59f20c426847a746299d944a0aeef6581e91ce2092f2ae941a53a65372645e9e3c234f9edb4a161740d2c8949952ca319d94d21825dd6c728aeea4cc9a94332ea13c270e3997f2eedc9697256f6a575bde5d4925a574521c934e9f3929a59c993893b4d3648a67c63b774a6dca5d6d93bc0460254c2365197fa4a6e4c98b8399e6b8d965cea2b632f2025919a39492e2c8c19429cd6edc3565d9eeae2639721677974dcb6c32994c6bda35adc9c4cb2b354dfb989775ac8ed52179994a2a7923f326996764a64b99255d96a8ddb18317c53b98e58e1dbc2c70e48f23c78f25cfb81c254f2965a452d33466c9434aa94d9eda5cd6e69474ae9492512bc3c648a5ec2265d6a4a4b4eb54cc1d65eeb8e378a2db89c66da3943b1983a6ed524a25a592eeae64de9dcbddeef2ee6429e5943c254f2979ae9c92275366661824cb6d37c6dd8e57ca8e478c34d24d8b7105f9ff1b9d52ce69a3699ac633351b4d4ba269da00a63605a031338d52b28cbbbb32ee4ac9947799eed24957ee6e94bcccd44577761c378ecc94a9dc58ca4925f3e4c99ab6946edc297929a573cedd49174597eef25c66deb97432f3dc5d9e9a26792eed96e9b26439996564e6aedb9d93796ea4cbbcbbcc74e9b6514a7729a5bbcc734e6669c351ca96cc1c99797799254b5e39a5a4cc2ca5643a44a5ccd1344a376da3cc2a243d2fe4a8664e007a7226ddb64d45e9ea083522448bc46d53c52d6e5145378d529992945219a35c5e4a996e94d2549026a726e9dca4a4bb94f2524ae9c73393737653ce49b7f3a49452d28d9939e32929dda5dcb1ee42e658b64015293d10f59001e940548548872a5298b45c000091932a452bc41e767f88aaec90831428509ae0dc4ce9a1499115a21e9c14ddc7047cb0d2436485490f527488d2a44a455961b5582ee810a50913a22a4da6f42085c807a5490e52a0ac609252d4440727509a5c616245a7072745517ca85275ec50e4430f221e9814457152650a931cac38e90187c80f1580a8f0a34607284e78c8814911141f9aec40a443cf0f443a4471c2248a93263ce4b0c30e5288b47afc20a502453e9e34c92107a2272d1700f01c4100f8610200a2274da04c800905a238e1c14a131e5ea54991951f35567600408a942a3c9ee4d0640250a048a9b2420b4d88aaf0f041f48449d10f44517cf82822a2c08e1c45569cfc4084934971529443132b519a54296252e4a4871ea4b0545800fce06407a22a53aa8efd69420425879b9afd894234654a132644146852454a91151c00e800200a059c580169f6c78a05889e30c9c1099409f830855545051d88ac5821aa32a507293900710b802a4457a4e44054e5e749cb05004cc981c80a901d0bece0a40ad1159d223f2eb800001d54e84154d4a40a5114220a30696245871c889848299a62812a39e898a0105d2182c2e487263de45c89422451fbc3248a142756aa105d61420129509850208a130a50400a1426453f10edb81285480e49b980579b46d2c8c8c8e884c366a6a3686474b47538ec91917674448d4cd2c3e1281e9952464653e270148f5e47f275344d381cc523a3232323898351343a3a9246464646469ad1d1d1d1e4705823a3a3cdc8c8e848ce2323a323a3a368148f1887353232323aa23818c5c5618d8c38e270148d220e6b64746464b446468c83513c8a381c45a3233ed2240e6b6494e160148fe2913ca238ece270148f8ef868e2b047474712873d3a621c8ee251c4618f220e39643888bb1b7bb0d2640352203595545fd9b268645b86dc6166f4c573d1c3f27171c16030d14b4265c2603b666641d1c8d6d868249241a3f71c81d6b53f452313d60bc3a2d1f1dc6adbb66d196f9b8cdb4659a8f86c8c1c32465ef075534411cfc789466223e1f602df3eec3a7e875ba1101b6e853b1defa3e33b301dffed4e9c010505d71b93a24bdbe0702b81728cf0a50d24b634c18b0eb896d8c0075e6030c517d80c5cfbfd67d1f7718ba58035c7b6a9f2c56f6c29e0766c2e7a4926b3e29935cfd5f0ad7de31a16c98e37dd865b5cc665a7530db3d3e5b90c8ccd9dc06556f462e8d19359a66745b24fe7226f94a80cdce68084381d2f8ff375aca1c6c91835be09dc9014519be6ec1194de52d5f4765375ccda6196bcf6334bab0b2e18c6a61257f69e3b5abfcee68dc3adb73c90157ab8d3a748a3e0f66015163666f16d8c044b7484f5ee4e1861cde78094f89e4818f7c6aa78a363c7b3b724c27a6b18612d93cc2f7865f67e824abede4b303c6a397fa3e4d4b35249f57ecbe8211dee990ee579c1f8c5b20bfbe85179cbcb8ac3acf80803838b67fede8659f12b6e85ace687409acfab70d5f140b8c5c31ea7f95184696eaead9b0ebb0e57cddf1d8e1968a36b982c3aa7370645978602893e82b3975bf321abe97770cebdde7cc2970fbf87d9f95c59d627df9442d3059ff0e7a53703cb86e28d0ebfa636210ed727f294be5bc51ae5a3116e39c390def589f20a4ece2f98e619f8f2092c9a2f9f18a3f932353b09862b74bae9d32b00e5cb4f700ee993fce904fe34473bead1204f97dd3bf9d3e99203e34fa17c7ce62d603b96ad62d99e5d3b9775d25bb275d15bc0e6002ed1b51d0b97e8cab263c9aefd86ed58b61bb66b334a1074142dffcabc27926879497f7aa67aacaa676096edd929687472d1ef0a69cfaad1c995d580643aa5607499c02ba8204949f94ee7a2fd0aeeb0938b7e3ef5ed27b480514ecdbd03959c509f1e0cf134dd43f00914eeddbdcb0e8cc2ddfb908ce0360d181eb52a3e95fa07765faf00b1a6aa0f5f8713068b479d036f38cf092f1aec8d2969e18416bdd31b73a28b1348b4e3c01b94e7799ed671e00d87026f38cffb10534ff3967877424c6bde9253cbaf8780756535cb565f47ae53e5a23dba2815485a57b90f35adaf8c5e3365d588d2677f196dcf2ad25dd991ee3255a3ad22dd452b172424ae2d472e7a7a2d935c7da28023fa1b6e1a7ddbebfb81d61bee943ec67ac3d17aa4d44c695dd9b31965bcf580dba8e5dbd8115d9a635398e9ad3bc2ed4e38a4e7394edde806d7b700ef4636bcf2be5ad5dccbbede0dde5760778ebb194ddfdff0c2e2aa36b0eb9bdd7a3660e1f1ee58bef3f87a36f078575fa87ff4ebddf02919d1f24dbcd1f2927a36d45cf50ef48e02b1d41c75ea3960c7bd67a00d3557d517ea38be2b748e76cff90bb5e35e7dd5bc4381eba201b174dff11c10cb8ed71c0788e5d5bde61a181ef552efe88d3531a6b9f59268a7609453d36ba09253d3e338c745cf01a8e3780ac4827aea2af085baea1ff842fdfb7a0ea8f98e0f310ef0957ace3bf0a8b99fce691d5dcf012fd5bdbf52a7f97a36d47c477d7df772402caf97f7ef3767170d88e5f5ead695025fafdfc7552016f0587e2c3efe32c282739ae3f86bf5578ebf6cfe51cf06d455a7de0ddf6beaebc8953a0ff0155da94a411b50f4aa8ae5bbea9cd6496f01dd77542cde51d7bcacda50732cdd535f812fefa86a8445c7736ee86a961def9eaa462797ea1e6874727dbb42b486439a0a24d4bb6a747275cfae0253ff402fba6288dfbede02befaeaee552ea85f91d52750e8b567577d88b91a0e69eda7ca1e0cf1f21a18853efb908c59765c555fd1552b969bfae2f197ea393781db3b30cb8ee75c07f85a5dc7b9ec08a55e3092b223943a3bedd94cc47ac5e8d8c317aec2afe73cc288304dc49a486a02a6b48492154c9461620c134b5d47c19bad2e3175f6d8a7d6c8f4aea191e9ecb2b9d753b26b7416002db1f9832b609d5debac395447c11bfa0dbca155496737f5d6eb2911524617b0ce5312002d31250b4612ea39f5155d2fb0e67c7f3dc7c7578d70eebd4735c2b942fb771c4474bc0a44ba4bf51b10e9aeee29d028751ce7518dbae35055a3d453f7be037c1db96a2a1754bd820a927e126e14126e2c09a48ea7df8eae158874d76b7bfd8574975177ef35d701be7254a3ae3b8ebf8c688ea322dd85ba4d45baaba61ad154a4bbbaca4555b32071a9deddab595267ce9c39e30a379604ac632df26858313ad61e3e303aa4547c6928bbd43f526a53d71df5f995409fdfbc05a09efa2781b2a48eaa48aa7a45f623d7bce615e0a8b34aeb13ad2ae0c8f5b10bf569f46daf08837d3f6cacded0a3cee52ed4b387533aab37b4daf0c58738747cfc4aa054c5e2bdfbfc168dc4facc73c06130180ce5d9d01d555fa87728af33d271b4f1d7020e7c69f953166b7a52ea258ab2cbde5d7a34c89f923a7a06f0e1eb18c1a2afb573270f8638a47f7abdd3b3f0a8e3f6cca3e1f430f693f8d376e2c7f074fef496645e122a617cac9997844a9278ee9cd6450f86989d8bde4df7ce4b349a28534ae9a5e93b641d07c6e6d68be1f41de7c052cb9f7ee37120d6cb6d5df76e33f180c1f3505d8c3d52a91b1f57f2ddf8e8e1c52f9ed7c3f3c01e28eaf5b8a9072a557373d383c7b8b9a19937cff19bd4d7c5689323cde4dcdc809e4ade78d771ef9c07de58c1ad9bd3735fcd131e3f7d48d77830f0f8e9d45b227f3a47d331773d703caf8a92cec7bbef4a52dfdef9e8de7d35a492f2c01e958a51df3c8261d781b1716e6e3ec43d62b397e4e6d2a3813b3b0eb8dd35e56e4e6fbcafee2db366c7e8c110bf7d48ee00c3d83cbcf30077ec00b7573a40da8559f43940e906b33c100c5fad02c3170d18be5060f88ab40bb7a234d3f451bac163343d977527709bf34ef54689fc93cf6b5f4f86cc0a6e79a7e73ccf3b7b8f20d14d6fac8b3038308603653800db40990d8cf990ee7af79f5e5fef9a7ade8798f33a6f49eccd74d44d47a14ecfa11a753aa5fe755d1525a713f7eda7d3e95b0db90e4c65e009dcfe50a813b89d42a14cde1296f778af462b9845ff83a71fb018fdf5b5c27e1004c175c5ed041ebc227bcc3c1aa89764634778e922ee534fc79a69c12c7af66630f5a98615e0170e462f4977a31f3afe603c97bb5ebfd10b8a24da80b9c0c3241a454802e67ad5c2e5ae7fabe1e49e85f1db43ba448ca0e927509e03c31fdaf4f56660b5e94a4e27503ed3825ba6d3902ed1f42690979845c3ae69fcd2d4093d2fc52f3462d1d4a6e9bf7f9b3e5a71fa8e5ff8e9f46c00ff4bcf86ff55ff0a9ed62759ac57c7481eddf00f37c255cbbd1161d615762dff188e5a7bd1bcac6111b792f055e5ca76f9a2f9ece1a481d5a151d3f0870ef71b4825a7b7af4703e52e50d07207daed87787a4964bdb2550da4975c6ae90cf945dc374b9aff0952c9e9f8ea8c3e0b6546f7a0f496b0ae501a4eb08e9764421ebdb12eba34b744b19352cff3f87e8b46b42f2dcf030cb96fbe2b34a453e7d143f86e3ea4c3d8371fe25da19fe61ec2977d4887dcdba3b7e4e621b7173bd630f65643cf83a148effa6c47fce8c170d41978d411bc790a0c799c716678ea3838383812c707ce39d9e1e07c88bfcf870f1fe762f7813e7c9cbd243e5229140a752e762910858452cbcb887a8fe7e8706c8f21ab5b5d666d3fea086e60181fef3d25dbd0b2c767951ad1738b9c9704f514b8fd81db9c8e2e7af12b2e7a06a0b1ca40cf6d6fd01eefd1a3470fda23e7393ddea3474e8f1e38471d0785e2b818050f308c7d73e9e3a8fb088734cec39bf3330f06f99bd83847ede0c17128d9060ac5a150600fd906a3eacd121def711def11720f1e37351c8aeb4193503d7a703d7a805cd7e33deacd92d5b9afce9dc301abccc6f90d8e4d8645eaebcd103b3bad4743cf8ea7bee3a97329903b0eb87554ea70a0dec3ca51a33431b17ba062af97845b82036ec79b6e401e1f923cc0ed1da03606b3e65760f68559f33a406a0418be4e60f8ea30c3e2b5399e7a8eba9961d67caae2009d7cb2434d4ccf6f66343136a0938f5b1b835b31c3a2e72358033af962675fb8950a6952cf73920cb754aad3e9de921f7d22c3add327c7cc614e672fc9e90c865bf1f3dcf77de76217c1efeb0df1776e773049d985318afe2ebd24df23b8ad02b7bfca6098351f953893299a3e4de0b9a3ce2238c4dcb9254222a97d7a634963901aa83786c4d20696bad51bdb4097a5c6c122298aeed11b4bd2d21a70a3717a631a28a3399a4e3bb71cd7adb7d5f0d5db23187e1d0f824877815d04eb0bbcd1c9b5ecc2b69de33a105c5704e7b32d9ace759dc92403e532f0267efba86f966ccf1ec35663186bf8eaf8a38e5e92218e601177bce6d1d0d3b1de2ce19e3af754a546306b729fe7346fc98fe6bc73dc454f49fcf6e829c91ebdc7ac2eb3622de2ee50e7d64bd5d0a853cfc070ebace33db08a12efdb95d0dcfb726bab611525db5557f27dbb57c3ec347599e5dd5b6ea96a4825b6f7ad86cbacec5f0aec2a15a3ed0d0fdc4681546273dc3d70bb0339eede125673f566c9e9a69faa24c3ac79d34f4b70cbf4791ee1f646cf9bc0a8c4ac798e870e5f761d74d0e18bfd44fbf6bcc6c3c9f764fb7628dbe8792e761c8687932f7e6e356aa00f5f177d9d552a90ee7a31164a5f380173194d325c84a00b17160bbc8e5c3b1762888bcb10d715f1d4086ec936b8157b89de0e6599e6303dcf5ee848323a1c865fd00963143d1fbd5406536314fc42fd3c8f1ec217bbf476b8f5fce4d64d762a90ee02bf3759b5e183c160301778eed8f3cb2f809f8fe02a0a89a7208f05124fbd193c1beac14bcf868367ef00ebd2a99fec898fde01d655eb267be2d73bc0bac0bab2277ed627a779d4838520c1c9ef4e1895b865baaccdc617957a7eb778d363353d82db290e49b92d4fe77607790269873a4d7e77e22cfbb6fd74daa84703ab4ff127b07b066a59f613486b763ad77ddb3c18bc9f2ec1ed1dc87d486edc9e03b73dfa3d0a0c63113773cb6d1741ef26f06689bce9d2744e825a0ce9b94ac547cfadd7d5f0d5dde90391eefabefcc2575f46a92fbb70fa6bd905f9eff2f1eb296175fc23c8bd03f91fb8ae147845772e825e0d67c777e076024d1e0cd9e325783a076e1f92a7edf343d2b4cd6011776cfacc4b429f816111478f869ea6a713ec217c51a9b7a352c7d9105390611324c1a9fd8d168cea8d65404b841d41a6776353cc7950e0e3ded8114bbdff38d6ce60383510e92eadd3b4fad26e24a48c2e602e4ddba6b2edc06a2e7651a9885b2ef9d1f2546c1f625ac3a3a60c26a15d2035abe5ace1abe719dc40a4bbb66e43ba2b7b56c3f9c2565fdb8db42fbbc0e70fc9f946cf73dc31b8dfc075ad47836cfe1053908aec59a9c83367ce9c690d5c7621dc9813687411b712b756d2d0d3b24625ae5434233ea29c1d815be696396ebb23c9c3e3f69c16d1041dcff10824ed8d1911c5342289ce7a63461cd15e6fcc883052ad3756c4133a9ecbba05a3139fa9375644998ee7b46ec118c5b7b122c674b8355ff6c68a30a34fbdb122963a7ee3169f5b2da35372dc0db5ebb367265031a9dde1dbd810647a7b7b7ba77c30180c881d62f9e8256135af50ec7d1148fda36516e339dacd15a2bd9735943eacba68958155a8ec99e617699d9d93de92545389675a7e7d42f9ed5cd6cd15e25e25f43306794d86b143f9790dbc5942cfe7fa649ebe336fc98fa675d7477e322b5e825c6aa3b05ac6cfe9d1b0665a9ec128ac9635ae0f3ff392c8478f0656cbbaebc375d3e22401b7cca5e67727dc58338b5b1b4332b361a247837cf6e825d967e0cd3e8b4f7cf141dc0a7158dce21f01c240d1c53fb736568416cd746b187bc52c3e9f822c66cdbad3716b574474e98d1181d46150f3bdded810663a4802ed7012f692ec308bcf2c66f2bdf936dcda4b707b63bd3a4734ca28b8087cf1cb71510660c0883508f3c520be48e54de56bae38e0518c46c2adc30d68720f7fe54fcf4d109c0f670c1bb3f8dc7a0bc85ec3a3963772492f89fc905cef06ed597d1db95ef2ec921af83a72c58e5b93bf12287b58247bd68e597c5a27b3f8377cdbe16cb6c1c8c5e50a2a489a3eba26286b187b9e82a1ecf90cd43e2427b8ad81ec5acf06e98a1f62096e67e0ba26036d2e36e2a3c90c0306ccd3e370ab48b6dc9a8245b295c4f80916c99e31ee80db73935bdbdc6df492c87391ced3cb4b2f89ac145c66499039d949303ec91147e6c26df86d0c894cd3de181252afaa8d38eb567fe00cf0312bc5c5057ceb11e0a8e7ac310ee0052b05c044a2b1bc7caedbb9d8ed9f6ca562d4fb901fb72eb3f68b3121dae88d09e1c51442a9e5e4b838bd021cf5322b9c7dd491935e12ca5e018e5a76193d38bd1862671fe28d5b3730c4ce9e6dc75330f6ee4c19590ace00313e01bb8d18178605faba9ecda576550a20c20cb3b6b3f3b96ecc92979f34e3cb0ff172eb0606bebccc1e3fb915d23f91e7967cf68d5bdc59d7433cc44731c630dc2ee0e35242cc021ccdcf73a9025031eaf9f9f88d3deb04b86529a53c7f4e29a724e2965b1be3f246cbef7e412e3af171bd312e4974fca2b8dde246cf67400b060673ed61bd9f5c6a722bfb3e4befb95d21d439eea83b0adcf5e96ac825a1c21d0357436eeef11d181a75171b155a316aeef3a7ef0a998e5a1f540db9cb7b3781bb3e5e0dbbcbed0852d1ce9c3933859eefc0f0a8b3af0743ecf921e6c0ed13f864d62bb1b32be1ce2ebd25f35cc3a3e66f738f60183b5e7a3064479d036f9474f462e8beeb133f2487b803a9c433bd1d05de78316837d530b6e927308c7d3a978161ececdea747c37cf6f592741f626e89be8d71d1d2f3d9b9e5b85b2f06ef5c0d677392af6c8d3aaa464fc9ecec1cb71eaa86478d7a075ed9ba3b0786b1b9ef0a7535ec0e45a8777db8731f921c28cfc58e03e5d743552ab2b327c9ee8161b6643e5b30b0209a3b7d1fbd18e299eeeaae4fc8552af14c73a75f4f866daeee02315d9ec06d13189f81db1b1861eb43af81213f03b7d7e30ff1912966417097405b52ff57fb961ccfeec3dfb2e3a80791df3244fcea42be1268cb8efaa2b9e4f12d39e7bedf24d096215b747cc7f72b09b425477de5782af51daaa7c0e7f82b477da976bee3af1cef9efa16595fdbf6afbebe6bf22f595f5b1d22feb5ddc755f7beff24d096537d9dce7c6e477dd56b3aff71d6bee32ffe8efaa2f45f7d9dfefdb5e3dcb7ccf3a82f1b9bd3d497bca9be4c07b9bfc073f525e55fdc6f5ef37defea8bd29fea4bd6578f9ffec97f7f75ffea8bd6fc45df7315fefaae427dd9d81c477de1b8a6dd477dd9f8380e0dc755f84bbb0af5e5c3247dfc65daa943b06aeaabe63870fca606078e7a9dd3e93e7a9c4edcc904e2d89143253f8d4da71c72e370d014483bde76a852bc81da27bf938683a35d8e1d393630a5a2279349729f8643d57d394cdd0e95c61b9f5220c521298e1d72fbb1c2c7710ae4ce824a85d38f1f353b3869eae9f98bdfd363ca91a39ef56d67752bacf0d7e92bac006a5aeaf53ddde93d94c5fa0b3ceb076b4be1f85ebfc20ed557380b7fe5380b3d3d7f71ef51a1e72cfc65a23f7e70e0eb5914c759fce3c78f15fed2be427dfdf8a192674105157afcd5bd87e9f53d3ede4327070beff96bc77b582c9eab505faceba8f09ebf4ed7f9ebab3bafa9e11dafffd1a3c7757cf8f8cd7be8bcc75faaf7d8fee340fe4a1d481c827316fe4a9d85b8731d160ee4af1cd7f96b7b0f0b07a71ea7e7387f81c7897f71c7b90a3737d7f1515f3deaabc7757ee3e3377f75bf897fd1ab70d65fdf5991e7c75fda7fd417cf8fd7fae2b90f1f67fd255fff321d487dadb0c277eaeba6be6e5e53739cfae2c1e337f585f39a9adffc85e337f5c5e3e63cfeeaead0f6c4ef9c059d8ee63dea8b477df1788f77ddeb5fa7d7faa2d179fd8bab53b6279ee62cfc75aa3f6c4f3c0bf5b5421d22f67057a1be4ea7dbd497cd3915cefd65aa3770f575e28e535fa777a6777f81b586ed89c7f90b4795617be259f5f503c779eaabd657bd0ae077ea4be7aff5b544d0f2042fce8860091b407281620891441850404208b688e1da027e6847ddb6271eacafd7e7a8bb3df1397565cfde478f1dc7a9af9bd579d4d7d10b5250842531535401c60b5c3b8e9408c20c24bae0c113c434e1daf197aaaeb6277e477dadeaca1e213564f5fe95aadff6c4eba89becd9e7f84b561eb6273e477de1a84344d716d56dea2bf59a3ac410d716799afa52a19eaaaf2329a8900215529871c3084970c93da34c0aa0404209335d3cc1b5453ef5d75783b6273e555fa8bab227480d837affd2ea90ed89f7ea4af6ec5f5c71d89ef8aebeb83a04cbb525fba9be8eb0408b2398c00d1d942181cb5487b86b4b0e174d50410ccce0028522b8b6f0b5bfb6cada9e78adbeb2bab2c7a786437affa2f5db133feb277bf6fb2369d4c33e67b6c096b44471818f7f6eb1b815ce8f5bf23bdc8a2d6359c6b47cc72dd9b20fc4aeb0eb706bf9e5d67e4756e136227d1bcba2d41b0bc28d0e532dcf42cfa265d1a60d5dcab96a69264df0d2fbeb0a1b6e0ef20d8f7373751eb1661d5fc19a7f1dfc98f4ea7572e03c07bf86916c5cf34bb32c23bf34ef388acf3af5e5bdd683f5f5ddd4d710c79d477dcdd8aabea68efa92af32f65a1b9bd3d4d75c924b3975269d56dfea6bfaa8738cec31fd33f5c0a9af2b6cf0749c4f57299dc6347f934acd386ee2f36feacb3b8f8a83ece1e7e0d7d4d710d9c3d7ea8b0b1097f6aebee61759467e913dfc6547e5325fca569e8e9ad57c7f71ea2f3e4a2635272dc174d457f61c35d2d4d714d9c34ab287c7c81e56923dac84a3f2981d534689da643595e62fd35f48445c273e8dd1d497e9aa1a635f7dc52fa9fa8aa8fa9249b287bbca4bb0f86575008327244dce545f5ab874ae539d7c2422ae595fa61ac7c81efe7cc6a7f5c55be558cca030032780a1021c00119762172048218432a8c8a219710db038c106c4784309d7acb14c19a5b994b434631316934af38b2cf3a58cfc9255da658c541aa3442b4d9249f3212f6967ce4c810765dc4089a4592912c7e211766006109a0863866b5d9273f0811db440882f8ce05a97ac14267b981fcdf8e2430a6ba64bbd3a46e051e41c55701b1197961dd7c2a573cdec5c562e7a792e362ed68284e3d282ba162e412ed3a93b17968b3b971dd7a6694162b9b47009727dd7c265888be65c582ed5b9ac5c5ab4a02a97952b752e9f0b754f0b1796abe65ab86c2e9b6bd1c2e573e5b8162e77adce65e5d2711c5ab8dc35f7275ecbae0bf15ab2683b2a9721ae6c7fe2b9b05c74bf027dec4fbc0eb0c7fec4e70071f6271e07c8637fe26dc09bfd89af0173f6279e0644ed4fbc0af4f627fe0353fb139f026bf6271e05d2ec4fbc077edb427c07e6d89f780ec4b13ff127d0667fe24da08efd89dfc0d5b610af81dafec46760b73ff114e4f6277e82a7fd8997e0b63ff10c9af627de6815e506b86c9ecb74d12191e5a4da663ad1ef3b2aa594ac9d1d5c57b207a7878f9c2967e43132e9f5cdd3bc84b58cc15a1eb6ff7cc75fb8d8b7fa92b018c352f5b55d1bd3923e2bd3f2f3afaebeb80c7f9932e433a1945a6ee7bed3524b8f935a761f2fbd38e915975e1b936a78b112a7e23119adaf58e6f14b6a639d8499621ac326ec8b75434c65b42ff32be37d315de3b963beaf8b7bc84aded7b57d95e8c30ff570bf543daa6e4b5e57575cfd38c954bfadae968c6a5c5add5c597d4c5ad7ac2b7b58a68e229fbee076278c65b66b19fdfe12687e4fc14f705e035f38be812f1d37aa71699f7f5d614377edaf8c7bf657d29ca7a8cfd8e67dfb6b658f1235fdf4d715367c37ed189a3a8d4b3fd51cc75f57d840f39a3127d54f7f6d191cf5a5858b97e33ab4202171e13897e87a5d6183cd71fca5a3be72542ed18543dea64698ec91afa9af3846f6c8d3542ed175aaaf21aa3a45f6c89bea0b07d923ff552ed145eb2b2ec91ef954fd0b55b9449757a3d2abab5ca22babaf1a648f3c576392eca14b33a9a992e9618ccda5ec3b6688b6654e0fe39813fdbab2871b3355a31ad7fcbab48711e6daa40666200557b2277e82973d31da1c45d696b8dd09b5322dbf49a0f00b57e14356c7be2af4d9f727d4a5c974aa583cee7c3a71158ba9eb2a9653eab1ebd84725b616667de4d7b5a5fb0ba90557aa62e150154ba76566323312c8ab5b3caf6666648f7c57b7749df61846abe1b9ba85e3eac6620d57a7bae5f42cdbb79cea66217be4670dbf0e3333a6bac5f42c5bc592259e715d31bfae2da61abfc81e0dd6b1af4a767e14f37909e365633608d359b614bd7891405b7d6d5f2490b75258ca4202755b4c02719f7c0c23814ea68a659545562c973df148cab8e429d8b16f9edb1a462af31dfb60d8f5097d427ea88589918c2f92f1694a999950531213bd70875a182d8c048a5e648ffcb67ddf6ad5a116a6a5ec09df61f402d394b4309ad2aed161b69499c99600d06106cbbc6430fa858aa15f6c3a9c6328d21c73ea7026cd2c9268873226c9c82e32c66564973065580916c60b2b99f112463343222cdc7ac50c09b79651cc17cbf862f3c3e845db8e28a38ce076087165916366ce1e4102e2ca22dfe0b14790a68b8f2075387b04c9a6c71e41c2f1b1479076b49a3da2050900ae2ccce7126df6089286638f20a572ec11241d3af60852ce6a8f20fd70c9faca8ed4826b8f6841f27165916660f25c326f8f20316a8f209d527b0489e6db23483c547b04a9d2ec11a4155c5c5ff4482d647b444b16cd8534c4c5e7225d7b0489bae41124cfb4479070b8e411a41e2e7904490597ac2f79a416e21e41da788f207d728f20ad5c7c04e9ae23482c171fe1fa9a37aa71691a67995657947eb2be905a70c953a4165caf1ad7acaf2c521ad5b8905a7071fd8db238635c152977e72eb3180728051cb9f858e4b7c82a0412179fab11c773f18b9bad0438eafd2bbaacb072d4fb2b6a6c61bfa8fd99f34787477433ea0502b89d820b10520617675cfb0952798232aeadc2168ca4f9d0d4f2c77e3d07fce8a80320a00ccc4f701fbd2537d9570bd2e6da6eba06226d2eed0b86463630ccb5dd0472097269374aa252539ad51ab46fdbf0b9b62cab54524d2b15db51cb2109eb4d0357f6845b53e62420262688345df312b4e173cdef4a59a9a49a8a39c1953dcb1c9b5042ca1996104114c204d012df5c29026ef74c022b3a7684b55c1ab8e7655d303ceaa5125b7e376e808b1fe8c01757b2b067904aec573c8a1c008e5702690fbf4cab2b7be457f64cedd9e5794b72e300d3b3dbb05ddb4eab0da667f57505bda95ef6c82a3664dfeaeb933df2f30858d74af6d04c9e5cebd2d69581eb9a60c86ab025cb27b8d8219453cbcfcb1aced34a4536bd18b6a940baeb0a79e92d31f5ac610d2da5a9b98647a1027a63121c95d87cce4a6c537d126fba0ac6e890abc4f5a12fda9aca9ee97e3a71f491c3ecf42670cf2dd17cf735bae34cbc1e87a625f3dda3b7a4bbe9dceca2178376ce04769fde92edf1b1eefac490abe91c18b2e9cad654e4146061513cca221361c6f09b4a69b40a96e8ec72eb6ec021056166d3f81a6e20238f866471eb26fb90a6af815be1ce0ddc0a5938f0c0ad70b5610a30845b1bc3c24bd39d0ebb0e378c4e878bc672eb1d6e1b40d4159ec61863163766dff8a2ac37f60eb768957d51b68449f333fe462031c993cc2bc0573e460c74f617162c469b11c3c097a6bad5507e1f663064974bb28a0564ceea9278fe8a5bdae9713e9b580a943a03697fdcdaec540a539842af776681ec33309ee9f5600b64190644c7b32c63aa823b92fafee396f7bdcd0ae73b2c6e653fea13e85d038f38ee74f90ebcd16eba97d43305b09e379d5ba2d8826f632818d3d9977ade4341999ee7ce9dba0c9ce7b8a3286f3281948b1de5a8c8e652dc9fdc2cd94ebf6da6eacd70da4ca84d3b673a7ddb74aa306837ddd45d036367118613bde974a261fe549fd087f3568e3abbe6d1f024fbfc56c3ec5d353d8b9da540c95c767f5c5a52e7b2fb933dba8664079e2a95977c0a5c17c77529705d27703b3c6a0d5c62aa4fbccf244de6f31e7297537a4ab86735f4ced51beedbe9d953e2d51bae2ed19e9dbe69db136d06a96da61a7260d8fdc6f4bd315518e8b973f50476dc4dd993d3b91ac60e331ab8baeb53a9c433a64b2ef6c904c68e447ac3235b178d3010bd470d09e296348a4727ee86e038198327c3d210b9149096d3b55c2139ce046e8c99e34e762670c77805981e0d725dccd1e5960438d2406f340cd9320618ea2dd5dab94851a15112cb30d4dbd98b214a533152d2754e6b1d7b04386aa2b773b29b1e0c474a4d0587c88c4285464abb40c2ed994780a318648fd7b6eeb4d530ae8b337527705d26705dec29e167353c8546fde54b67ffc0cb2a6b283d1a2615d94fa456b31ae593f89b25a1059abfbd5e12ce989af9d2458629811bf159b69a96659a96655566670c149532b0cad6746620ad38e066311e818b54d504b7e06caf435da14979ddadd0eeeed230614abe2455b6652f3f7af2ae4fa63ddb9f5648abe1a63d5eabf1a78ef4cbd935eefd8906ae9ed68723acf9bb3ecc4034addf0f2d32175c6ce28be7b88d30f8e6a7d411ac4d2317d92b407706e33bf08917033f3e721b53f06dac045ffac485983e75778e935df462d86efa13e618bcf1d63b83dc9ed6cd5d9fd4e919443d0586fc10063eaa86913d18f8df87e407de2ce1a3ce4755f066c9a9f9a7e6ca637da4769640eb9267307594e6d170eaee3c56288cddddac8f7c5779a03ec411d6ebc5106154a83ec49f0452d599aae1d6d99ff04f0ff95b80a3189c4e43cc4d969e12fee9fb04b53ef2a9f591b09eeb235fdf8401d1de3913e7d5d4777d4c5eea281318cae68ee25e9435ca03aba052dd8738d51de5753781616c0e08574d3ff52e5569f56356566bd36a73146b4a70b1891280a09b284112bd3e2ab091edf5428423cca0144f90526e8c746bf8436f3c423e9c0bc6aa01cff3bceedc3dcff3bcef8ec75a388ee3388ee3be3b9c144c269369bb7693c964327d774c4dd0344dd334ed8b4800b9e831189bbfdefad08d59f4f1886f36a5f7562809af1019d30a25915f22dcc62d9fd6dab994bc94524a29378b6163c6ad37ab04c36dc158c4b7b11268697a5696813164533b53914aa550f7de9d7b2a954aa57ac071dce9a66fd7ce711cc78dc1ed0261bd0563586f7db46e7db4473016f165a7e1d69af66e85f8dabd15dad6cee08e66036ee50ea9d91d1cfdb31a76cb272318c2ad25e53ee5d45c8d72e2900f2536a1698d72e2cf1a9ebe9dfa8a359af6e9dcec38eb535d6651309c9d51e99dc04869a56c3a831c8564e766cc98cf25e18d35d770a8f99ca9a320fdc67a635744d1cb45739dccca321318ce0d0cb596d7c0104ad7f45992594d9112c129d13ecfcd6bf39ae9a6f0a8b38dd3a6a681db13d4ce317f7df6c936c3f6eca61a1eb569e3b618e3fc16638cdf267f8b317e63136fbcf1237fa618bc998f9f67f0667e82320c698f1c7771b207039578a64a513745090e0458200b0606dbce6d60387b5e9a6a152a5b0606eb229ade2e6551d7db4f5f8f862927b00a1524cdeb335f94f5e96195d38bb2254cdaf41c2a483aaecffc069aea2e90e9c1409fd5096e1bd8fb2ab36e9a1b929e93e7a247c108c6c5c973dc516f31e46f1294ac5d72a5f25a4945768cdaa9e068e736666da66b60a84d666d37691a95f846cf67a64b3094bff235940903a2c3ed54b4378038d35736fa649ecf5dab1bd8690fb7ad6a0fb753d9b404014457b99275fc15adad1cb5f621a981d937707bc1908a56a6e9b30ff156c43d6fba51126349f8191843edd919bcc2dbb9e9b7af07039557cf2434945103afed23f824560d94bcd5307eaf5d89ecd0ca51c3b0b33e91f5c99e1f332370455fbc92ecd933d37e4d5fd34fdf054fe067caaec4ceb258bf3ecbc54e7b778acd9d3ea44d8f5e9258c3989d3b759ab6243b5753a6472f32b17deb8a597b538dbdd94d3fd5f0a84ff1a60fc9c87127d3b675bc09d4b205c2a77381300cb363a5f26a7913287981f043021cc5a0e302e113e02806bd0b8467cb53912dbf26308ae053f231b8217dfc06dec44a25b65671c0c060cd4273b1db409fde675b7034a9e729fd8f0ee9f636d10a5519d254ec8f36088fdfad59d5c2c5c7951da9c66504b76c7a1e4ad30fe9d0a6b5648f5dbe301ad1f3e1b2d1f3affd277b98b0040b9a60c1973130982b7be432d8244106a008e20918b8b470f171c523d5b8f65ab8b04b3bd20baef80c447ac1f5bac286f8570db2673e2ebdaeb06148f6cc6bf575850dd9637d5df6cc6775c8ca9e582c3edca56d821036a0c2086654e1831cbce73b08dfba8e3ae0050c9860820b312858826b5dfb70880d87c15cd1086efde8199398a7135c0cc1277b725c9184154d68a1509e7f9a9fd3a8e5e31a3d2b0db379ad46c96a981d8a3c4199a635ca4359c35776098291d4197d68d461bca48772b4446b51168ca4a60f2fd09956a3ec1a4db32801d0126b5a97bc6c21a48c2e6af843cbc7fd74c01053f1da1ba5ce9c39b384cb4405acc7115224a154450525138481154dd9359a0a989032ba805d098096d80fb00523c9b50f2fd034885dc365aab05dc3b50f5f4d6b182f5748b8311294a08b625301cba1c609b20c0106736d7ded8da230e1040f80780306736d1516cec7704a4b1b543e50638a296881c15c33d43497809bdf9db94b35d870c3a2d1f29c9628cf0227b3e46f8842e46d60967c0dccaa41029d7be425b3e42ef1b04b2d2fa17caa70c7b47cf82e031f8d70cbefc8b33819576e8f3df94684b9993501ebda3e2f7bce5f6085e6e5719040a7cbf32081a24b7e8a04f22eff4334a25d9ea3bf991e78334fe0cd3c9da26b823570d7e834fd26eb7e93d51aba4d3677aa3774db4cdb844184d12c384a3f6e6ddf7f85342514e4be5e0cf4f334f272b35b2f49bc2909ade151531b908261ec2bb1c37825f69ce778e3f2449dfe245e5ebea867d881374a768de64ecddd70eb29d1c83457370a09b969e495a88d42e8e504a174327b569ff47edc1ad27b1338a47fb2e9281895bef815b336fb697bf4a86c8db33efb0dfc98b5d7c0afcfd6adb3cebadf7c83a3df9d702be3812fdc62316e699fdfc0708b3fbf85e1d6f6f970f3a2e7b928beb40abdb128909a935108117b9e5270ca37e5b76f60625b01e8b7ba858941b69804da92b8677e6eb1271ffd16db9298351fe5a3f54609c3602d6f0483f5931ae2e82b7389869542ac6985427f23c336dd4ebba8978846b6e7a6d4f3dc9cecb4cc4e03b7a49e5b5234c23dbf25c1ad8d450144cf6f5db8257b9e8b92a3443178c3a7020989cbf4d8148cad8137095897e937fc8d4501eb8d4171a695c8a6974d432322ac10fdfcb62481b8cf6f62245074cd6f632410eaf31b996864fb3c97fd86be025e740570d028f0863ebad8c58137b41e603b97e8e2fee8a2600ddd3730acc0179d7d362739ae9ca8f0a86f6a38fd46fb6cd93707f07ea3d51abc9a65cf98317d3677ec2196dd8159a28bab3759a5923ad354201171999e2575660a2e2ed165ba96ed54b36867ce9ce15eaf497c046110bf95e9d531ca8e286b64b4d1e1d6f15b156b747cc73fd89aad0fc7fae4d90acd31554451c51249324ae7e5334a29373beacd249964d682dbce5628da78b111a0d136dd08b068f9ef5ed89d5b1248bb3c101c1c66d9acd6bbd3f2dace3884c95e12a619cdd6474ac1450e7cf3f271031f9f86db22b40db3621fc5e8829c13a48f51a354a3944e9c3884c9f4138c3d9f559c39c1d893990c2e7e5ba158a3a841db304b7e5b21f97d2413d76725d765d626639442c66d85e8f71c95516e97d96576a95d7ecbe465762925a78138ccca380893824bb3c7ec37f3b1b96f261bd9a956719895d5b9adcfc69ee08ee41c70fcb9420cc6bcfca06d628d40e8e3ac4f8c6738866d2af10c8de05c9f98855bfab942d9f7748522488459f4637a08b3e8d70b719a5e86dd105d87c340a7d31f59a1afcf767a20dcfa98b59d3ea867fb0e036ddcb385371d03d970cf76fad5a243224d7fb342b12967027198b55da631c4df2eefc54baf98b5456ffb8d76a369df981731bd312f67b40db3b66754669b2a0eb3b6ba1a48d7677d36f6c623cad204dc52553c0ca766b99239d2c065e7b2e82539bdf34ecf71200c471d763f695fedfb0e0cb5c773b137e6658c5d1f0f0690ef81da4d606c8edbc0edde76dc1a6edf40de1a9ee3ae034ffd132739ef5bc3ad7fd0120410b0aed275958a95a3363dac4014a470a6adec929724886853ed6ab8dc72b4db40e63eb9acdbc0f3a5b7c4abe10fcd7dbbbaa71e0ca7eea7ed27a7ef562aaf0e659fbe9e92adb9fa643b87dbe312fe762af14c9b3e2487d8046e6fdb19b8e0e4e27c01b717f8e6c355d3efdca227c2ad95172b9a1e674853facf664fe937a6852bfa766bb8a5aa8e593657b8d14c05d291cb508317a459c798a7d7e85ba3bfc0973d486b859b0cdc0a3f1cb8a5fd08b7deda6f18a3b543805bb2b515d31a18d4da975b6087ebc510e3700c6a4bc410b4c6bde2d6c6a8e8c271258a4a3cd3fb714b5ebb0db7e635edda7747ab4fb68cf422a5e4cbe3acd0b67c8f1582815b1427e5630d5ab6605163cb52d2961aa8b1866b65cf961603051cf082cc139cc0856b650f7f59352bb358f1e1d621ab977bc2afa750eab9157df4933f845bfc49f146f36d98d57ca4597edd6eaaac76cca2b5eb8d4d9144cf6ac3acc851e06213df64d6c6afea6b09e42bd3f23612a7e51fc0c52d3e36416f6c0b2e9a9be88d69f144b37a632fc88192a22c653a3cd222ebd0072468d0fb54dce2935df4c6b248ea08a637b6022f1a486f4c056e442f86d317639a0a0ebd8fe1548689a66284eab0e8076aac9ae8b0c84b13dc0f3a2c2ae207b4432b3c50010b2e58ead04a164bbddf60b00983f59ee94dbd973be0a569195462cf7313a4b386317a4be4b9863228d3733e3605c3a39b25b48c9ea7657468e5a8e7294865cf9c39c347cdb44c73d1a5c1069be38e82b48c6630a7a317c39b3fc12b38622de2256ffe12f00983618c219e9154d61b25f1f231c4cb5ac475176d741137ad21ff4a6cf9a396604b106c2ee27a7f44233b81138ab03ead90d0a9f7bb46360a994fadd04a01288b3df1b3865b87d9101763accfbc377b8d0c71918315b23d6bc83534ea2bdc14a8123bde6473fab8aedb58fcf560e0e6c7c0cd1cc7651457fef2d5f4c6805044c7313e50c20719f001d298316e488e3b51374a642f2771cb447ce08330bd311f64d1eb0312b4a937e683273e36164c6f6fd017256002892ec840a28c335c14075720e14510471821082e1a7c7143726580db15279725551bb31eeeb0ea63d60dfdc6a6f046cb1b5a61889d49a2e7831848c6f84305b841072c9a596d4c181a415abc3230180ce6ba62636abcd1e12ea9e145878b4673cbde320a386209500143a0012a608831db4533171c0c47b1e5157084d2d1562a321c66f1571268e3ac2ef7ac54298088a43438353ab0a375b85cf4001688480d2bb57b01b4b9f6dc1e7d1b1333a655bdb132dae8f5c27c382194a0fe67f3312bda302bc665630b1b7cc006660c5103194c0604a14b14699c40074e08c335270f54d0f31db7b49e447aceb962c50f68734520dcc3925ca406dfaa01ebad37a6c6111dae3afc9624156662d0d1ab8034cca441268d35d8d41b4be38cde581a63a4116693698049c305d34c1a58f4c6d288a2c3d89b4608daeb8da571c4a46848010d24a03104347a804619687811ebd0f88246157d52f2d048a2eb8da181943273861bfdf5c6ce58438a30bdb133b2e870f69e61459f7a63673cd191a33963899a3392b0a160646fb8604616d101527c1b33a38dad3766c61abd3133c6e870ebfda2696fcc8c301ddf7dabc58c373a068de0dbd81963747c17e3eb3a805ba0efbdb50ea648ea556ca1570753c03a1e08b7b823918e5b871b106b5958a0550d1268ba76998fb4c2163a7e005c838f358408b742283b6d533b0ec1377b6366a4a0571288c53df1317b53130045187d07b42eca5ad6d668460900d0f29bfc3b49111c7c592fb7b2e6adcdf0926d6c8ee176871bb3466f6ccc181db2172dcff5c6c6d0a0d98ba69224462f3e34eae8842fbab13ef26154da317a633cd0a2c3f8844f1e6881a219d343243248b9da0a999140b18ced916779fa90d5d94321bd2b2444b281918af591d7c008c5b2e4658846a25214222fcf2b149f581ff9dd9e504856c345028bd6f05f7d5ce510be9b254ff8cb45286f46521771cf2bf301e8f596d09e55c28428a287c16045746bfe8683205e62074a104d1436e04050b70433efb43cb3c4c922096b40d991629ad019155c964d6e65d1867132117cd951154a3421082cb00111c29c717d1288a703496ce186185e9ac0c2956de716003a3b4b024d57f621b476cc9a67e2db9eef7667b20886e69c2b431007828ec42c0392d5d5764414c2f7d559ad0583e08b603a666d9c530cab8ff47e6885a6ac4f4c2d9121adfa3c94064405c6e68d66fbbe267c41aa8ebbd3f9c49db62f457342bde589e6f22c1aefc4ad040a5ac2172e98961f00b7ba6d6edb2e0f64bbfc10ee92935082fa74e92da189c2061be8d3a98d316b908100b3e29752ac15d17de9cd8e704f967537300b02ccca768dce5ec4055f18912212b7342fdcd2c0d81c05b7b866db4b44257a83045a6d9d984d4c11305f761924d08b7bb2675df6e84696fd066e75cf0e011cb8d5254332825ba7678f49d96312193ffb8b5bf15d7da3b36e677df8145c318b4df1095f7c78a4b3af186873657ff6ad66d7a89ccfbe3b597d12bfd0703fe79c73f78b4e90a19739f0c54309ea5dc934d8ec5aa869d9b5ec4fb48c6e966559986559f669e0c601c9d627d3b4a865f5f1e1bc4689accf3ecbaed52cab5bcd90f8bc70cb2dde5a2720ef7bce047212be09066606429d9347813bdcd2c0706b69bad6312b7aa00df7c45393f9b29b625866c9ba52eb6cd34e6770e7d65df8f5ace12a76df8e111f713c91c0edb6e6946c84f94995d845cc112ce2163fdccfddf0b3ee7a4a260c1665944270374a8a6687db43edd963a57d7aac8ff54609f7f858c31b25b168367dc83f6aaede28e9ce71efbacddbbca50decc00de4328e7bc6d56596090ccf69db766dab32cc01306bb3ec34639e40684f8e54f20ef7911727144edfb7002bf45a9f687ac8eaddc0c48744e404c24010e09e08b4dacf6d15c47d606cd662415a3d224d4df8584086706bbb96ba345d1b3ac2adedc8f6763a55283b4b70b2480210daf45903b3e253208ae5993a30b67703b74caacbd720af0237d9d36d120808f7c86b219196b18d2fdc303214a0061bc8f4e9a6cbdf7002e335309e879d63b21570360c04847be2379e5b9bfc46277ce1ce0908b74cf452d2cbeda6cb533d7df67aa65385d2f566dace52700bf4799f1dc7b4696f030315b10cdcc3f5a237888178e01ed351a96f00dca22b06ba41f6988064903da61731e3dbcec198a58559a60f71111e985ec405eb797cd3390f8c2a8e4bb4e9b1f9218649a01dee317ddbbef0abcb3b6d52c1a2e0469b1ebde01ac3c630dcbae16f8c81e196155a684338b008982fdc2902e6d31e8df0f16456c6d574bab5e906316e702a668e935e12ceab45b3190766f155e01acdffc2a486a0c02260768a80f9f81d08657df83248a03806f7986eda4c8f4c30991e61dc8a373d6a8948310b6e853b6df26205b7be700b0b6e85455a7ba7373d8ae19677d3e318dcea6e7a1ca34d5d8c15ca2eb5576773e0ec133899e5321d481003adcb04a64d5f718bdef44d02c99bfe49a019c79c4ad0f542e96e3029a57477f7457cf16210b13c05224098b505581f1b3a29a51f0476360065e7ccda775b125f7c18d473a565800b17640d7cb18a7cd16cfaad374a369c1d6ead321b4a50f3a12c989e3feaa33e6a2ed29ecba736c1b458cf9a358361d72b969366e16c1a190966c658ea78f6a2e3105fd8f56a1523912140e239a8e3975d42daa5950c412dcf5abeb06b0eea3965aacb17768d624f7693a3a7cca475365dcb6af3e1c469b37528df31cba667cffe98359bdbcd865bb37bb7a5c32cc0510d67cbca427cf147cda912ecb61d4bf9294f1f9f5039ebc6290c616d5a87524a29b3169a8febd3e17c71d29c5b6b5e763f915356c91a0476b240d9e9f92c725b87c383a03daf7949e6b729a59cc2407cf145b3e70e0eb3966a9aa669332c624e0b6ed66de92efd3efec9f225fdc4a1a7200e4d3f410ee28b9f45b4299db34eb9c53e7bdc6c9fed9f649359f24372ca6da50d77e05b1a2311b838679cbbf16836e8978242f8fe84d6d91b13814607e98d95614573a970c5e7d6c603c76b60b89aefc068f2c0e51e6aaadae9cde94f4cdf7e327dbba96e2cad863c347d56b7860ef75056cdff4e2c9562290ef6c58e33c48e5fca5862074b3bd0d21c173bba24360e1df7c21cdff1158ff36836be27aad3702a107513f8c5abdc68d5bb35c818438ee146cb31da6829b36e3d25a87f57729afbf7cca381e62ad54d60b86a93c994aa04386a4ef57d99f5fdbbea26d5516068f33d01723ca502555fcf00b1737c8855377d3ef366409de62a30e4a155cfbc194cffbe0c64f370b379f8b54dbd21c051dbfc4bfd3b8d95a34e551f72daa6de707f92bacdb9d46d9e4adda6b25235e4816553431e9ae634577d48aac0d0e699ead49321768ed38021cd51b5d9f8682a0d39aeaa4f723c559f74577d886d4028ab56fd03439a0a65d539aaa98650563cc070f6ead25be229e9ea6496574fafaae18ebacc5a7d326bf5cdf0d530b68ed77cbd1974bc4607181a758d0a945d738e7626b0e6d19b21a4b90a87b691b2a33743f89de62ad93a6a88a56b4e4fbd19b86b6e9ae13b4db5a9217d91ec9a87935926138e1a1e754dc5718ae3436c0271a8541554351b5f9154fd04164515c3be9b25b1691e9be65ff5cef54649fcf7f8af86a7fec027dcb773d153726a9aad0c237630a6b9e8cdc07ddb408e0644c56f6480e9eddcb9e5689702c355a76e03863cb48d4d7f5f6ee9f84aa5faf79b550dbffe9ee33ac065568e1a7ead7a0da8fa32d0cd73e4a8e1d6aa1ae2b8cd6b7e032ef7d4d470ebaf86dd531f9229706f0366c7018650564d732536cda7a7849be6d15b124ff3ad86dc69684054f40870440372b307034d0d63d31cf51458f30fb4b90a0c57adba4cfdc9779ba7bedbfcbb4d5d66a99e7a4d557d48d280dc2a30ecae35ea3420f70dcd9fa8fe9da63699ef4689eadf557599f555efa9ea29e146d527dc63d85528abe6eaf6fd3a24c243120a6b28abbe123b1e47c7af38c5846c630d08cc33cb27720a0e8da663628c310ee91a9845c5c418a31766ca340f5acff315ad9ff063dd3a49030e29c639c323de18679669ad6519a5fbf821e6ef8ce71863e448797e829c446a91720007b461d68a594af8429c1f191a800cdc0aa1ac5a7e2651b03bf3c96f18cde7ee03cb7ce1cf0c052e6ada762a5a6b463db32ed9e9cc42074be420a9a5a7647a200aa1976790ce24a2107ef492d0ca1e8842f812dc76c54b3e389915199c493f343d83f21c7734bb30eb888274562a5a4b593b666d31fecc8a59166e7722123e286ba63766c569c3ad048c11a659e88de9c08ae652bca56876f679fea1b7d5da744e1a9254b4de8c5aa39fda331085ecb34f709f816c441432b73292066e739cc4acade927c849e090a4a235a5d97c0652baf121d7ed5b9453e07627bcdcb4ae77a2a20d0e17c32f5c3557ab4c28ddbdc81e58d2344dd31e14b4f37daa237b1b9008f7f06b401af0a4ed2ca97842c149e1e353ba4b1d9332f06949f18ddee42e691915a60ff19e977bc2ad358e4908fa3e551130615704ccc7ddf40fdcb4a845ed282d6af7b477da230a0c5721ab8774ac55669fc0f05d34bfc848e08ec6d0bc686dd36078a27dbb06864b669ed36ab8645a7bf8a11eda780f57bd38340fdfbb4305d25d381eb26a1e02e97d38a4379cfd5181e3aa1ab00898cf74d291c34655736669e7d380b306c4398141ccd2ae0364e51842036e9f584324908dea7c9604c271be0a5c314bfb070e314b7b0a1c00b3b4a3401b98a5dd036f6096f60e8400b3b473200eeba31d07b8718fb6124806eed1cebbd41a0cdca72d8452350a4e1aa66870bb33bf44b37a634b6eb41863f48fde981856740e6062acd19cec681453492ec15d5ad33aab4974e5246669217d16cece1e72cdb44b0f86d8279b673544d13cdcbeaa67af5906aa79769b1a16cd4d02d55c16c936ddfbf71a70b927751a70b9e70b8b6473cf52a6d3371b1faa16cdd6ba83cdc6b7d522d95a77afc6f0247eb6569f74559b61d16c6ee32b921dbffcad61fc42db549ff035255c9fc4d3d62857e9a54703ed582bb7765a434eea2c034f52324bee304bb2ba556b8fdcdab34f1e1a4acf2984ef55873c6854626735caaa677d123fabfcfc102fadd1ef8d851184e62c3ef33c1a62493d9b5ba08f633d1b28ab61d16ced337ee91e462c3a6a9f9a119a764e9a5e122d3624a79784665996d4935b948d884616895b19e0246e694966ac359006ae93ccca485c6b153c723a3dab27d0548318892f0cda3616ebd5da275829277106a290f9a9512ab2292d83e2cf0b778408103091e5a46f7c479815631d29ddb64ddbe8b3ce8e749c603a7e88713ac618671db25bc3eff4ee16adfacca2aca659a6d5f0a8837af787ddbad0a6975959982028bbd43316e10b67470d15fed0cce5488ba737e677b8aee3c255d31a9e866a58d43284d2323d9cb29ddbc08e085f10b33ea0e553cd8e308b33133899a56535360581f404c35587abd5fcbe55c755f8eeeb59b7db704bfbf68d8156dbb6d5b941dfece8cd59a1ac7a0532aa20a3a5fc6c596fe48ffaabf9705504cc17ae1956fc0f122875d4c3cd7bf8759fd54c0d1228258f1ab37964be4eee929979b94b605d375ad6100aab23cc4bb2b2fec0ac08852f2ad123139bc4d0b8a465710a9f04c335c3140c174c371bdf82e93022f107beede1c7ffdc685395da4d6095d99c4623b8bd2d180d08d18599a6b3b9cff33b70b9c74c5c323197c165a6efb7cf3967d1909e6094a0e63ec130a86750cf4730dce9c87d192848f670500c0ae223beeefc30a853e76eb3f970563b3d51447ade9ba7a9bacc9aa7a3400f0c8734ad5566f3393094a1e9a597e454b98eab5076fa95451280e065b6095cd60c1ad3ab73848a530c7785f693ecdabbcec47135dc38300c6aee2f6e4a7345cd716038a43766993653f7ee0aed27f4f340d315bf31d0c660309816577c73e7be699d77fe32503cc2170269be693bea7c22dcdace50823af5ed747e0afc98c57d43811db3b87fe08a7bb87be06416770ada308b7bf4927075fb90dcbe659582b376f30afa1997f0853bf4bc4da99db36f91d20a25c8c80867ac60c98b61f21765c934ad4f66dd6a973103c1f159cc9a4066a6adb6ceeba8683584b2d3d969993599456b58447b7bb655d329b89324fb46c5a8e94625369ddde439e352d4aecf3cce3f66cd1a4209ea24eb456a83380429a1ac3ace56b2021955ec00ca6a367f8ae1b6865f6f77fa30fb66a010bef8ec3c39e9ebea3c0d8b66c7ef65c0452cbef85595e96cb8150e1912c4401f62a0bbf8321460856ae016377f7a914aae25d3928fc3e7f385acd0fc69ee7035a4c3aeb9095691af7265eb3d95f715aef79c04630cd69cec26e8a3b9d94d904773b49be0aab9ac9ba08e1ccd6ddd04713467ea2668d3dca99b604d735c37419ae6ba6e823fcd79dd04873487ea26d83597ea26786aeeeb26686a4ed54d306b8ea69b206daea69be06ccea6c3d14d909bcb61538323878e5aa5e86b21fb58ef969940848114d708b7f339dc1818b1ee76b825048c249a83f0faecf912e4f5d973d264667a45a02934328d0ccde4c586dac2e49de0947a82f33ad0c90d781b11a82f60a95313bea90495ca0734338d9a4e0c9b530d70c43a9ecbe1450b72e0b0a9a1517d2994d77127d3a6033524045c5ca3e3f6898f1f7d9abf5e7c69fee4ae11c0c5ef4e945f336474ecdbc7ba20958d1d591d953e1fc584bb346bc8923564f51823be984edfb69b4e9563646ccad0b0991a55163695bbc4ceadbc2ff59540ac146b662fb287b3903d5e207518cbec524fa42454974ee9a45446f59951fd3046a582915121a990caa892544966be2eb2879f458713298c14c270e1502da95435626a6a4ef31c39eab218078eba32d8d8d0d4a149435353836a9ee5ab79548a4a613892d9e298d3b7a8a218edebdaa28a4b1ad8b12f56ed31cc6743b314c38859da92e5bbaabee6355b54cff2d9542c352a558d64ac1c35c7d6875335fcbc1aae3eae863fd57065aa216bab4a1c5b336674d0022742c04612a0782d11b6641143461a3070bdf8096e4c0113023602d74b8291451044007bc20b5c2f0ec3a50d27106184332e19546490a4a04599a42e133695a6171920c1c5ba41970e27120e929a63ac301268c892040a12238186788c048a359f151b237b964c56c3ad0cade1870333b2677bc80b98ecd9fe82629a2db8dd0967acf746352ed55559d0d864f1c5e65f640fd3dca6a66251d5d985662ac52533a90fa9059a313bae834ccd55aa8a85c771dc2655b764497dcb0ae7aaabcedf0d8ec683c7cdf6954035b5e63c4c5f09b4a3c6af6b55b1a86a2a96efa7c7a4d87d2275de27cc435d9a913d66d84c1996316dbbcc62335d7e319d2ebd9c3e64db988c9463e6e9a598ef5952dcd7b5e5ab2b7bb2cbec1c38bbc4a52e4bcde71ec625321d32accc901bc4d88c04622fb287bfa16ab87d5e0dbf5557cd5433cc55f612615ea298ed5b5a4533cd0fd3252e7551ead2a54c98e632cd4bbb2481be94989ad3acc6d05c870e32aae7c8f12c925f58bee3c0f12cb26249dda6be6cce9f5d24d06b556b903df135e74f2509f4d251e369feca515f386afcf7974d8d4f9d3f4402d55496a419126e2a530dbf2f5c694322ade1b7ea708b97357c875ba38e3c56b1c1ed0ec79929135de18ae9fd0646d78ee9dda50ea598e945f6c036a42f693f6112e84aab2e5f12d2b67d52cc94528af9b22481d62566cc24d33cbd7c19239124d0962cf45bb46b5e4c9c1725cea4d4e55b5e482db84ce7ba2449a02dd9b350ad4aa48a257b566592440a2552f3a5981db391f9caaca41909c425ba2e7bf8524c128f21d325298be673920492cc5d9a3f2966c5493bf842f925aeebabf0eb188b64c89489b12fd14c982c604b3146121346f6f06338bd347f7a91406c050dd460230419b8818b3fbf4820d90128bc4145154f74e1e2cf2c2450e452040fce9839b303177fc624d04f0d40f083335cc0b8f8338c048a2c7802079098b001988bbb343fec22815ed1753a9bceac9d1fb398c2f17f9040a72a83ec61315cfc089340a65a83ec617e449240f586f36352c5a2551cb0d0ca83ece1f386e1924831ebc397629a2fa564c9dfa42bfb3257b78aae9abb903ad76a7be2797be22ca31d49fedcf881ea380a96e329a45e8ae3df529bab685ef33076e9fd72cfe66acbcec91a24d00b751da9d473d4e845ccf71d478d5fc6a82a97e852dda6d6542ed115c9d0ec55601cf381510c189740560d3fc81e79ee546f903df21b913626f1207be4c62e739796c2c487512964356bca0f99f334a8bb37743af72cf2f23268db4df7e2bbba7d12e8c5c59feab792402f53fc565797402f2d3eabb4b2644fbcdc5cc0ed4ec8b178f970cd7c3edca559c3ad21abb7866ba6654ce3cbe8b178470de1de05997e7a1895b46fcf22b1d0670f374c8751a94c876bc64c87514902bd5095257bf8de8b7b9deaca1e53fd640fbfb6bab247ab2bd9c3afac86693ead973d652450993264c88c690ea3d28a690ea312c77a758c4e47cc9305dcee8474a9f991075f48bd741809f44add8b04429d4ff9340b09949d4f6312883e05d2ec95792f0f05a2be9e02a47c5d6183fcfc4b96693e928dcb742190b84e2f308b760fcca26560168d8259b4fada2acd7c7c9b4a730cbdacaf59860b10578f0b81c4f5d5d791155d0891aa2f0b6c7101d2096e80c519d74b08242e547d1909610933ba7811c30157162da84ca8542a7335da584f928e318466684613001a63146030482c188dc843025dd4d4071400109fb0545a9f0ac42408720821438c2186800100001800184dc000a600c2c1d94553a2a299258205e45a745b0e0a532622fffa44a7ca3ce7ba36d808847f4fb94025b5514101edfd170a477ddf9bec2a9ff3b0fb520c84ba0a6e9bded66401f6c18b9d2397e62af84663026c1f3971e67e95202bca8faee684fd786305aa7e964d2a75de25ba76109d00aedebd41023dcf25a542524f8ef8db11074156b3eaaf18e433f3703ecd49e04812a5afd8875919c4c18881dd4dd11675ba62bb8b0576cb434b2d679d9430265fe522365e9741fb8f2b283296ae624a086caeb04516e678deefbc62774bd101702884cb21a23d6bfc2236d491e0716f800a0d8ddf2f1f87b9951b81df69dcc02e18c22c5a8afe2f6d62779aa69b59fafac618d224bbfffbc0760baec0050ddf8b682d452c2fce5d1c374e3a38c4f0fe7b94ea55ff4e3f5a69fe5677b39a40bc2b62adc6ec64f2994ec5bd6a646e78d89b02be14389d75a5d8504a423de9e4bb7f230c5d8534dcb9d4bb26214b4481a62aa2567ef300376766e7092216b97eda8b5c1d94cead18e171eacce317f79ab331bc56bf09855e49b85b458a2d938599e876c0d831ca0d289b69e5094a8d887c839b7df2cb755abdd2218c00a84f9699d528b75d481aebd03ba745b1321357205e85964dcce3f32e129e3306e5f0c46b2cef83ace0094861f777a27ed1205cdb559cc43fc404a260cb709773f47e730857001a8c0772b17e40d17ae373ec51f004da9f3f08ca4dbacf07090e2674d08731c485b6f5fb722feaa48248e6a581b194d8e1413f7d145ef591533b1efeeaf7a9eab9aefa69b615223a60f0b961e90206a0b20a1717db7bcdd458871e5b370da4adf45fe95527cfdce421129217fd7534f00b5047bbe274a617d345f81fe991e51d4c2ff500432c36ce02765cc706d28f1339ca8c2fc26b96a99b7bd50bd6679f15ffdecb87154da3e63878ac8963613baf92d77971ce201ad0f435de65b0cf6887558328e437dbf177acc9a1d894e7b39a5838d1a96e6e4393d77aa7cfc0ca570bfe220a4a8d84daa76b56f760748e6c80a734de07bea4fc44ed10cd97cb83783f4c442f5fb3d2e63cd8f93b03849139c5f40929c5c8f8fa8e8c3599b4fbfee879bbec1dcef2631f7843598056e5523c43c8a20f664c64c66eaabda986a8f6ce67fb2c7ffa6f4ee293266f56096292b981958c46c72fdc31af6a595ce4e75c813736124a5cc9840d877480e3b6d2b6b390b84e90ea6cf12e26740d102f8dc75ddef18b4171a7479d6580e7d9758efe5ae5b1a5c25c6e2eb19c680fb003583232b11c45b406ddfb1e2c28d5294862c8ffdfd336425cb80c348f7e34a012b41879f69cb0cbb8856ae9508019bca9af8e2041b6aa5445dd1d8d4ef9b9aa6b4620ef94c61851d4f9d55e866746257ce17729ee96303ea2bdd9bada05f9ca5bba1e707349ab2a14b4369e7aa7b19528a1aae7b3c46aad879ddb4817bf3468d6d395a96f159a23bbde48b47eb6a1c3aaf6280398e27363bdbe45fff1b96f053d687bde70b5a5bf2e4b643ec27dcd1c6558eaf4f982ddf1e0272cc2e7eb1b0af278e421a6676059b102c0ce9f8a36a88ab855dfaf808a4d5623b87be742ed2450cf6b5f707a644d4f4bc8407efafab476d81fed165a8510b251011097deaaedde8ef827dc37250074950b15920df1a8f28908afc9fea0163895a3761ce54d28385d384627ade7f781d819affbb9e3fc0124810da67fa5677500f5fbc7704c145abbd66a047d306e5af07c25847b3e2ac763897d77cac82b8b645c12364aa54e2baa71939cd679faa3130fdefcaf54e53394118f5763c95d7f5d167f8dbbd01c16aaf5543de4c563da6d769a69930ae1a34056dcf8901072ba252d51225cb1a76de7920c2052d00b07c46c31885ab01e8cfb31897ad8132248444b6444a5b62b69b98dc1bab790717917fbb5566789f062ab8eca12945d48ae1e719dc59ce3871cd6b0a72c64da714889571ca5c3c7e8a9e166978394315b7a3674af2c5483441e4834bb2fdadd570c4e71452d9969d502a1c1a3a5271f6ec07ac4d5b4739332d4098efd5cdbebc9c746136295494278ae60cf07768e725a22444e6d523e96f707feb14d76dcc9201cb66049c2b94e0fdf32a57057faeb2f2895aa9c5473ab22814395df5f31166c603b5e3de54c259891e1b283396f1ab1e140cf0439968e66fb364cf33e8328ea7eb97bcf1cdd13f058d750cd5c6e4149f5bd516927805a5700f995a35a3a3189d1a3a0c4c4f667cc4254cf2e0ddcc044cad15397fed22f81e4f7dc2bc1a9295ad0346ae5fc45c5a5fd9b184ee277fa462d59852bc661e5213d11c74e65d2bfd3627ba4c909a50da87690c499d495dc4fd7341c9c0b8bb3e27d0c3b6e70cbd3095259cbed550dfb406133a988a31bea2cbe5c20104d4b922b33719c36fa8c7164c5c65959d4eee0d69b1da935988c77b95e212df9ee886178d68bfa31e59e3f01c3b87d819a1c1210dd4facd2da5d425c48e3423b7b8bf50d9a87d8aeed26ccd27775812e335829d39080a3eb4dcb6fce58a4510e4e81340049ac22576c42a0562f164c880b9f32f6608424768d4491552cef8c307ee04ce8f81362ea88de1595cc00c8d9540006774816f9d7715d1ed55022d8ae809ce2a18c027b23b33b99957af39a766320af27903dd45244e56f12e4eb10dc0a56181a1bd967577b4a32313b23c1e1a030500a77d390e4c29721ebfeac3fe744a2bb91c6b34b328f010f2e2bc82a20ab75623d8e1d7b14018ea3dc0aad1b55a0235a8b1b1891b4343ff1971f9d6062075489b43c4085a4d1466bc4bd599def928bcfa5882a200549945d52a89cb84e6c0410184efd3a525ecaacc1248499fbe7bac0733fdbeded0628bbdde65a44e0f3d2e40a34fe80ee2091c9845b6e06828f9c86239d3c2207bd9ac2c7be7b49061ad5a47f9954c666505ffd4f1b1c7b27f4981790fea1886f4387096be84adce097ba850e9ad0eadff267fc1295cd43ad1464034aec41594704a559a2493324e33cc0df1b47238a81b698c012bd6e8578f6c20685cc6dc80c8598daa46f8da266b4897015ac9cfb8d33317bf8a564d539f8ea87daaf0bf7df89cb5b145f0f431c949429422e6317e586604505cde881aa913e77ad13017daede493cb069361105d735a49cd85ab782425dca4ccc2c500756ba4c1a17e7d763cbc0dd6c00366c6aff0e0c7aa8d4f51131c7372a6466bf93338c76531fb1535b787da4d3440db369302d4c31ddbf3d556558d5cbd91ab91a409b5d5492972fece24cf02e3c9b4fc154a2b9680f6b31e6c47cebcf41bc539efacf12a86a208eb386aa6b3ee2b2b786b09d88f7a542c15fbd6dc250c13730378cbb1be4e3206e5177fe0d43efa29d8eb407177190951563d5e0d67102548b0e9ad5b730a192eea74905d0e79cadbd3a479f8aab92d2709b1ae4b66bdb5ae27081c0fc858200458bff002db2269fb244e088768bca09eb693068363e2e3d3e2621d571b08c85b05e76dd54004099c979af73b74446c1ce5bf634bc144bcabc3887090722f36eff26dbe869fa016fffed61c2c13018a90695cc406e8f5f249b3cb07aacfa922ee5ce86c205239bcbe2b6616f82509a551f0d2b17832c7548531581f3adba1890312874136b7172c823fd47427d794407105c9441bc37e39002fb8196de88795870147e198fcd99d50e32d660b49b5fce164421c98285b55a21ede77da919df09563048614ef921960f4cd94f4b71d350b164ee2c9ebb5fe0484641fcbb87579a764a2c78a30ad507ed1053d5bf083cf206729a5420199cc0663fde2caaa4217fec92eb740038455cc29703794a3717880899667b02e8f5e82f40df4aa07a898ee484ddecad3ecee20f0fff3999327d85e5e2d91da284ff16f0a4eaa5c92cc48c5363e4dd90d2dc80cffa8577447ca50c70c7e2cac82ef7d0868bc3694476d07079b6ec58c93aa81b14f4c1fe8537997ff652dee6a79321c23f44e7f19f663656bd01accf39e0563f2c0bd16709fe01004c314dff27c85f9ee6de1a2a0778ccb566a0cd10b1c77e0b59ff901a8142d2a2273f1a8d24cd2d39b59b3b4d488b24dca424197569d81def01ac52d83986b9a2d4e028c0d507657be5f4942901483ab9cfa883ff864256bc3e7c452fd0b526ac4870b974982251c111412464622d576c3b2e497fb3e9fa4b4b4fe928d02f73f4e16b839bb091ca092159b6f625081fb2f38b7a89f98725cef1884b29b17fb06546441c5fa3aca4f9eee1858e2fe4974e4b5030d22c729b544817db2c9e287ec556a5e310977e1ee6a001c2f49801203be1ea7af19cdb50d920d4599d8096bd974f1dab3d1869d5a1a2b027dd0506700d07e21062b6c8700fab0b2e81d5242d40064e4c85344ea656b0a08f0843aee614d541d49b4d9eccdb6a2e553443a65c1072325e9f2037cd5f61bd4c352e93688348f5b47fb9a1567703f32ce309dd5267824fd7a402eafb8ff297257889f1b626d7449c0365cb3e9841ec278a52817672b9bc8521f859c74ef003fde958d7810516d1a14fad4d69db290d1d3bde7f394f057998148de17c9b704cf18506c187f6d610e6da0a1ac1aab4c1129c53c3e2bfb40fb493fc564ad38b2192ee7f58ffe3a79b17500571087cdf01b18633460f084b54cc30bbdbec173ed94517ccef4873cebc47aa3d02b99e6e190e2617de04f4aa93ba673474444321a7e6af1d474bad78be47abd5addd8dc5137050d353c123934d0926de88000266f9df0e8f5553b6a5e55970ead7d4c10a9bbd6f7930a95467fce07729b1ead57c07a8a5384f8fb58460295701705845c47646d6a7bf7dfb66ab5f3b1cd349a04c78f653e12b3e4692c5ac18526b9d586f27251f09b0ccb1689406b3f69dc52c372be8f53ef41a3d067d8dde47afd1e3d1d7a977c366f05b23b35684fa60de37479658adf4723896505832a0857973d286ed8ef3f536eac6c5f14a064a9a0772b4e323647687f978237d59aef8cdb8085407ddf3af149a5504d6f7bf663ba802dec1a5235403cf043c8c3d8b93101e88511d88b7480bd94e05217d4ad95adde27ca12eee5efecb42c25d8084585b96ba76117919d7864da9604ef33387f1ed823336fc118b210838f4f8ce4f98e172f48070aca1f277078d6a3558a2e8def2eba321bbb94af7908f62f0027650c893adf7761953cea5c4d34c8cb261c889fd7a8fa45358a2596b64e20c6f930433499b67c3f988521cd65bb29a5d9b380aef2aa0554176b211c4edf28bc403154de89b17e219864c17ccaf098c4cf59270ef9535c1bfe21e059be34ed89bf1c13622eae8c07a3d8514ff7f82373adfccd49c2c5c1a2ac85301e41b12a3c871461476979b278b294e4874ac86e70161b8b8daf838727c93d54660031d3b5686361f4be57955604dbf97c400d1452734755cb22f75542e2e8ee6ccc5fdb307476d8e1d7c9a4e0c1a87d79163cbd233ef349fd984fa682e5507b568de97ebae673721a7c87d8ac61787bd039001483d63c1ee981bf8e837a49e3f3f86a5dfd5cd639def58d81093c0f0f1e5efb0ccf9443754a8fae795f2517be6ce86736097e2e505b76b1d6703cf13d0ff360db06d890c3ea7232bc7394f45f446cf4c9d9c4780ec3ff3d6eb18220576d14353456a30eff2fe189ce334c3357ad2d6c7e652dde9e164661267e96435ab984a9c8d5d72732591d31e97f76029c6f7200e02925e975a95459d7dc901a56a53bb783ce74d140e66fd590e0c4843407826829f2dda521fbb9ab5e9d82f0720a542988435eb2607069a2616da17c4d8b5af302383ebf35593266232d222b40f47a7a2200fff6ef8f2ee3ac3a7e02b7d5dba90e13fde67999d916ffb95d111d10ddd853d8b0bb2d72becaf860a167a9d02ae0a66839e67c67ae097b43de063c1e7c0e838234c3b3004660aa6782df3e93561f4930bff0d810e1fc4675c0313f3a131defe4a844efb55e67f24f2cdcb15b16da0e8d569b8d310b26f89e678a2b82c60c7f5a803e742b77e5a30a5a95d9617042071c18a4e10f0f49ff5586cf6312ced0e58cb139f53b1c43878821d96b18395228adaa2241aed62964f5824012fd83a0044941c56a5eb56752121576d5fff7d8c87c82eb326da356af689d0087cd97d3509a7a16a81cea6af8001cff1dc01b565116f04b97535775dea4c607d2b6e24e594f624416bca0f19dbcc85aebdf0a3344400cd6ccf3751e69c236139abcd570515eba886f5ee3b602b1b6a98352366076c83fc72c13fa1c6ca9ca43abb684def62e785863db795ea95e855e11e9d6eb43c421cc51e807dde4a03e3030019b23664bfadcf4ef308c965a0f5b37f134ff449d10eabf6594e3f04814eea9428319087322c62633d093f72955234d19207b564906afc674beed9b0dff19078b17823bb20dc751b220f96329fe6aac63371c47bebd271a58a758aecd988ab4544392d0aac6bd9bc334891197f55b8fab42b401bcd2034e83c8334c35689ad256cf8ad7d7675024f372797e10a48a8f621d840f83247e8bff480b4bb613d0a391ae8573b3276430500cc1dadddff5d8fc584dd13804599f67f2a5cb1a2055000e8a4411afcdf785c109c3f6e3f9c7505f95232f63b2d7a1a748eeca382cc1a2a549d1393c440d5fd78c76513946297838b9a442c8b529c1baf587b6d21feb031d7cc91e863c8ccf86c61477de99b22870b500412de9a07037822327f37ab80aec8255d3725054796cbb537694d4356d81cf8c074f27caef892eb7a39ebbc5f52f8a4038f237aa90a596de82e2b1a2bd8c56cbe6bc8a926066725ada42b0cd139bd1acfebb46a45389902673297a9aded4c2a28fd3035b67115c9d67ee93834f03baa9d35dec59a73abd88de4fdd9619b0624c7971b7e62d32ab56a93a3698c6d25caa9c3b6538b17a13883cf861ecc74169b0a392991084fd74db5155736ba21454303d76e412a5962075c123fd8b94dafb32e30ebcc358084721a1541944c183b1b4e15e910bf4bb40eb395d3956e042cebd5be1ef91b3b626edcf7a2b11167c2c03af0050829686cd38942234a65fc0ea11db8f4f2bd9b80948b66c80e42d2f09d04f16fa2c49d3e154b125fa90d65216550df6a4f738b0b94c75734d54b2e60a1175efa7fc224244221c15334095f5b5d8909f876f8b31d5e6de6571d4301bd4387b3ecbeb2c495a0638db2e8eba1bf8e5eca4a23410387d46406cfeb07ff9aae02179dee9bd2cd8ec925fc04a21bf5d7c34a2fbee2b640a88c191355a0475153d894d65bd49b6d1a6b012551e51689f81862329cba2c47644a538a2dff90a768e9bf1b5b372cc5609af46a883473a1560189a62c284bf9631f78a52a02c0c8f2ff0334ea73e2ab3594f49a05dab44af17a4715bab152edbd1ba97cc33e404a639e53f9d4af792c2347926fc165543c1438453a982ca0c9b828a051efe27bc0df9d17a1602a39860d8b9b677efd588cf7b28ef71657f4e72507af59fcf84221f9e4131bec7a12b0a1cbd8833dce1874dcfde89200cb534c6ef2974a34306ac8668090f98ae4f37064bd1f919f4929fe882e4b13ecdb0a6e362c63aa100f15bc471f52bea26c820f4cbef3a187cce388354acf5cc243f6ab0a584ac796e4cded40a42d595ac4eeaf44b9b787c108359bbe0ed8adf96ef780c4ffc592ad4547db9263b724dd6aa8859f921cdb4545467ef16528fa8c960c15524046709dbe01d5a2b6915ab51943f9e95bc3ceaa4c51d6fe667d783b55bec041e0ef5944a2eec42f75a4da4e130e2dd9ae71de824e6d16bf87ab092506aab4b6537f6f59f3735e17c80271c173d520b12bc96838430e9d74063ae248d576b66c58d0e5479b210d1a3097f4e75be43977f8bd9b984bdb68edf60e76f5a9664a74fcb2d8bccbba37d7b13f1ea4007cb4a24314a5db55204f4c5b1c2f836ebfdf37af0feda52cbae3e4c4627ba5974489de886c4a44db9bafac964041712011cb28af0e5c5f8d25edcf170c8534e56923ce4e061c3556bebdf5ad0d8458843f55ad1fc19a0f4205ac592ba1be3fffdf6b1be62e745ee044e840a15cd80938369c6c7e5dad9e62639da26e60d206880f44d841fdc2abad2c2b576f4caafc1a6d8e8ccfc70dc005bd861d74a1dd0fd26c2294535114f7518ad18df70cff1d34f313408fb8e20875903bf271cfe99236b8a1e9b75931b8974c483c16eb91069e2d14f8e41fca9da15f6dc15868a0df2079f5197623c7758d7ca361026d7275cbb3a0d8046226d72ba19e63f1690d618046eeaf6e0721a9c20d0c39ede1ae2e45ffa28db7628cd5c665525a1969e85f86dca9a93335d1303e4b1a836b6484e4f20e351568738a109311f9e9b35a4cf1c61d2ef2ce22be58e1627b9330c1baa6d02d4e342ecd95c267b94a1ada8c80c3355b9080760bd49ad58c4806d92000792314f1a265412c50b6d411a292684230b94fd00f16af9c69bc5c7907f1055988b9ec9aaae4c6a5c063c016370ca982732ae4bbac36c96c0df0acf0ac2d9e6ec81cc2c13541ebc7f327b625fc38c4318985dc79502d60a4a6510ae81abb9d82332ae16d7a3b2f9238dd5ae29a5662c8d9b7789548c17b6a81ac47a391517370960e51a9ec7d524dd86b2752648aaaf57c305c7ae6e1e695d0455489ea8e28aa59e1ea6dd423f0e4048d4d3d740ef1f2e7942ffaa3046796c5c5ae3abac74cd75884a75bdd6da6e16c69b50cafe85a5a1688d12fae8ea5d3dc6a762cce599c9fa5ae9d4eb15da26127affabab60e7d1f765fb200333989d36786097f086708e35b2ba837ae8d8d20c7827a51143ad73c0203a005bf5819ac9ff8c18e949876d40791193cfe365441a0e6346ca7f0962bd208c3d16566091fb6af22d0a79ba4f81816bbe3d47498c195dfd0a8f4860bd032d6556379026fa53f71037d29918d20595f3a6826872efbf69fffeffffaff2f96461e27a7e7fa5b50205a06d92cfd66dc0b654fccb16f5b871c06467cec8ed5c359e9a63ea40a67924987b63bc777dc68600f2dbc3933b0076307bac4b5c2e58e2ccde36ceba948c6491030a489fe0b149ef9d303f9f72f9b7d409c959bf602fd6756ac5a34fee2b3541b12c97cd64005de2cb87021bdd88653e68b4564c0bd34f9085e120411f43cd6e6d708d6e238e44dfe24450dfdea6273ccd841bc111cdf390d1dab2ee1c2abd392e04f98491a462b3b56a1697ee050efd4c15759b7ae7a43b365a6051bfb173b739c3ac89b9a8df8c47e65ee8f22d258920981de746e780cb8c60d44890882cf30e4fff9019d11f4e482728f96fbfaf2ad2b320a3a43e02ebd04e1d72301f56f402371f86d5a13fe2f5e20446e5af2d0af6978da1e86deeca4253540d8dd3a31ad99e9cc778005fbd55f3183850c2a2262bf39efd2e6ea6fbc8fff02c7a6a342287f3a320897d332a200551b423063ce7f81c75185165d4ac0de2aa6c1bf5bcd6788d1a9961d385b6112880e4e9e334e9139465bd6ff313c42963797178dc1a25df12cd0fec6cb620ba262d81cb278568ace04ed2d63a022272b1565c33aa14c503e5e061032bb25014684eb652c9befd37920852c385a937552af17c79796c809ad25ca21edeefbeb3caec19be603736fa08b827eba1907199d28838706c42d6b34a9a75e28d97cda5a3cada69f78e3ae1c9866a4d060f84fdfb6719d48f0698e1d2d08160d60a3993698df5eb2e260280b5c31e2f010003255fb72e711152f19694db11ee11e522f2c444c280b651d01fead712fe2e0f49c6c467d843713b5dac5e6bdcdba7e09eb592b287b5163e1e80ccddf78d337960bce5c443953270bdaeaa3c03be5e616a87d2b6e5cf649e35e208d829f07100bb79c8545d53910f32cdf6f514c02c21aec8434c4a00ae43adda04e38ee4af64c89a0015db5a8cfcc8563cbc1fdf7945d23483505994698f90969fa8ec2e0d4852c5779ce720d084dcdbb4704a208dbf9025e886cf17e101de33148af81701a36f0eec0b66fb8929ff9909b9c1205c5d4a888674134068ec013c32158238d782ebbba488f2a39bf7b0566b3744e2a40b7b42d0c63ff3d14b5f70100c5686afaf4ebf4406099e42bcde4821b0623023ff06a78db3b4dbf0cab54a149c1d88d6b71fd20a499834ea207e66e5de6bbba14460a287d9a4e3814a1128e8e72988c81f05fbc3718bf90ccb33bc7d3e56bbced2ae6c1c7ab1ca20d572fb5af1320a74dcaecb797d78d035850d1d83c304b85dba4feb6b2172e5fa5722f05855a2841e745b5dd98511c4e44d82381a1658a0e0687c00206ee75ca97c37175a6e117d6a74258848c2b8b061caadc6906cf4e59c82b0c51fc4f06b296943be900401dface811e24cf35eb5d78d338bb1ca94c6328de0f5b0e1c1936a7152aa8b028b4a1071398f912b7f8b55c3612885b07decd99e05faf3eda82462010234cceb44239ffa22371b0ed8a5afdb416c1f136e8b7f4a18d3c9e000ded99c0873bae3e1d0251f1c301d6b1b0d69dc44ca61dccc19589b093a7901bc918ad44c508adc2426010a029df19aeaa4bdc5168e5a511dc7e08e11f74a1569a27ce4aaf1215eba3401020ca6f88c421246f7d7dcf71fe02a0f53ceecaf492f56b874883e299dd4e0f1f220acbebb95f6e97fa5b588e9338a73772750fa88bf7d0d5337440b87e693f8010c0f735d290b4987d66ad4b62bcd36c570f6a411ddd8e3fb5ed99caf5b42e765bd2373143face32ba12078bfd8aec4e07377b560afb020f4f7d983fbc2a083988ddfa978d34b11e774bca35b07cb7deacfa5eafac3625f90e8c766d50c12f83989302dee826d7a0649f1a2f73148d89f134c2443535cb35ce443200eb473708acaf1c10cf70ec87d816c53d7ee26eb123861d834e33e9713e0e42997f14555ff63aba33744820a5209da942470d46c47d782b693e0efd0c1e8aa1619637bf4f41f3e317e6f148000dff08dd4f1339e937e9688f65659eb16f243a0c3339cd47de46e7961cc92677927028121b37059b16bdb25a72878a8147938d9581b8f0b782d297eeabe20a0b3df0bdfa4455f729ae75c8e7a8edb34d14dfa09d4689ec6f9e0d2dd6cd658c20dc70e69ed2e27127ef8ec7e367b0c20ae618239fdc14f91115658e8d866fda06a15dba1ae7613bed668dba260355d15078cf22dd63490cdb8bfdb803d09fec65011c817c910f9a380c7cb8241e99d066efd42eda93c8636033adf8ec2e4e44ac067b80c9eade933bbe42537d33e71e193a908f2729fbaebb48d740ff23cac85d243ca59add0fe6c97b264a1ad3f44a0528eeea81a4e32c81217287800b893f7a1ddaccc19bdc07093cdd7a327beab932eb1962abe27bcf908d4ee3e4178ca2cfe45f5334f2e909d7ba5fc616c8974e0de790268f1a091f6ee9760660b5697efc305935e45e90a1540838b63b4bb05369f4656ab1ebaa388506a153dad0dec203db50d0fdbd49db126e1a5de5fcabfb894aac824f56e58038ab8a0eef60f0238f93f0ab3de711247aae2e5b1001a54690bfec2667b9dde76070ee80d82e9d471cc53a478c6083a5e5fc91219769ed87bc1afc5a417bb3f7d015136c4f997a0501d0da90e5130d8e00ea651c6dcf31198c3202c9bc61548f89d6d91f1ed300767b5811882108dddb0bfb1eb808e0371aa4c6fd3e19be1e4ddc1c266430b62e7e677ea8d27865313848e36ac68423b966bca5468c9126983e933659e4ad83f332caa278b4d42c05a34b3f26f4046cac49c1b47dedfab970dc013c53f2d59145304d108380764712c038cb05155750df8481e7989cd32c22596f3348672254890ab84634918f63347eb09fc3b39d82050a655090f5ce0bac673b5b529be849784f28e907ecaa5085f86f2e85eb212327f50641185ec13b5f43a035cf832e12896d63f24fac224754426230dd10fd69788c4f1c031b26f6e7a789013439f6d9be14ea8946302b0e0694f5c0ffeba4719ede724cafaf606543b07afd028075a08ac631a3921bbca44a824af5270221c024063f201fe1a8df9ef4769023d96b27f14f8b77e604ae5cd2be65e36b24753f0079277aa84b8a87e995349c1f2372a01b5ebe25b284ee825a0df6d4e4134688c58087f6ad9a7365679925c73dcf9c2457a9b1f363ff962f3fbf53ff5552ded9a1d63da4acd5693a853e6b089c2e487f9d7464ff18fe8af1f0ed5753c916853dfe7ac890b659b5ae5aa4874ab1c2349877b6781208eada1da28f75b6fae1dfd8d5605b67d100de821981a0a1047401eb67de32514974e11a12567e9da9c0ab3154e751ff87972d9677d06c73b21dc696d80fb5e0fde12dfe9ea47d816d18335eed2f041e680120e8848515dca74c69f637331cb9f0db443aa3deb69e981f1064618cdb770889eee9a25beb9e0428b9bb1e0194c62a5845944b01ea08e7ce1026a17f0cdc9ebad2a050b3306b4bb3065004f11ff6399307efeaeef2ea77f612c91c9e6b1392aad4205d0f7666b4b24373e5ca910bda3aec141dcfcf60d514efe01016d2f828c1cc01c3a61487c23673907f71bea8965ebd8d140cde667426707228a94d0171a71002b1dc212de099d6908e8c8878a4d8372fa48685d3aa11d785d931edaa552dd7c3687ee8d2c3965562981aab8c2b81258f207c1c8e459c6c65b4da6b8a6be13991a427f5b826f9993d2d9152c7c91b2e9e9475d52da8c2cbc1d40c2d0ff5c0012ae8db1fb9436c74c92f09fa99ff5c105e727fd20532b8dfe91180935558ea44d26b597a6c7c52ab1cb9bc4d47d9344e205471f4e0d46fadd966b2a3132967cd9cdab071e78feb8ef04471642c2761ad032664c0b53400d2caaa050b75e23b3c6391f1e8b82c78c0cc38d3d6374f613d1fea5ff3a98d46da12ff0aecdb5853249ad77ac54944d39ccc087888d8dde2a099c40350cffd0935ba2e1b49dd0290e57f3d6c79df1eecc77a3517745a8a4fca4c6652996406d700d7d17117d755f96e41925811770376c29c1c36de2894e59ea4c38f3e16234cf144a80ae24e11339de07208bbc02b38236b842b131338430eeab02ff9a6fb79deb51d8ea10a48cf5136a3960c2b46e3cdd1aea4f9d202cb82f138addd254505f741a503a8f221166072ee0a214165d6a99024e0b5aa6c3f3f10aa60caf7368950b5be5e9b9cc8c6a8925c6f8b7f30c8ea37aee239aaa248870af9f0c3d9153c08668aba2448754dc003bfded164a207110d23940fa826aece5b39af807b7a4339a3e2052bbb61cf9c61404c93f7a9d10a539dc1f40de3cafc38bae2ad5dcdb30b40abb61c36ac17409deea5da74676bf00c25c45acb9621219abe297451c325fe43f1418b3d26d52134ab0ba3baefbae8afb3b28bed09457b59651a51484e29c8f2fecb57d1bf2072565455e3f899c2df4d09a05d25c3f89f3c9ce75bfc30b1155332abe234987f882d469c0ff1a2d50d622f4154619e825f4491c876985307ad101c496a63767328cdadfe8f34c300f6fa077f41cba7ab69fc95dacfdbdf7b24b61ce901fd5eabbad1ff051cd3573695cad87dc65eab1712032ae72d74457df78771b114e1a61f84394b287594e7eee59fa49ca2f39823df67ad3d4444727ecf6ef509314969a2f14389c1105a5e1451a0f24b37d08ec8d738f89b50d6787400382a4325e5952911147028ce9cc5990691306b8b9c233727a841ddf9f5c82a3a965310d56f833d8d7963be6f292c41d7122930c30b041c16439620380b848d724356c21253100bb1c3292126196f2e0ae81801c8f9d10970e1669dbcc304b0744d8d12145021b4c1fac23620234063944a1a285f40e03c16b66a39913c8d5421983ad2eca9020a2b6594262c92652d4f9833986a4471b6a485f653328b547d105b4bca6e273d2ab7a3877494f24663982252992b5ce69258f836b0b09ceff610a350cce368d824a0fe4294f542b34aebc24ead0fc18ebb68d632b40d9028eccc2466872dabb6d2ac939552b7c296ef2473d3a9dc3bfda868324d6beab3d29e1892ad36c5ff5940e304e798c7ba554a2f1665d1454ac5368d4598f0984ae368327a277b2d010088e375df15a7b965be9413b63ad8a0dd7c42e1a6e1d107b21c2f39ab5005f380f4a3cd8f33019b26cb11b00bc8cd4ffeb87bbe82b524eb3c6509141f797b3d8c280fa26746c7e4b21071ce75bb170150f4fdaccd10e680b4a23ff1e38b565c2c0789a013cf8ad20bd0e1b4e353bb08893e1124150d1dec00943214c11eeb9c520bd4f66daa3ff7cf714c9080a3ff68846ac382793c474a5c57e359556c5f73e9e44c20fba63a236beff3c368ef8e0bba82161d9f59759490275c54ecffd58bbdb8d8afa833b8892af33ecad8e3b663c028b150d4971ee5e2a15c34ceef6f5dedcfa881ac772e38e5820b1bfa9b733bd0241a8a26bc7634512568326d78d8d81f9fbf3a6cfd302a2a6cd0b730032345db65c9e5f5715ad5a049e4f9809103474327b65b91e40fd3a9013f46be2cd0511af37f1a91ec7f1a2066c546644d77b8c520dac1a800075f4d7dc990262dd19aa7abd07333c5a7c50b62ec15c75e92d62848ebedfe91fec81812d937e0874e30fa0feeffa7cafadcf3a840c33599dde4e27bd065a0208b05dca334c85266a50696927164e058db26035fc37b43208254c537dc9d075049fc9192a7707600e05627ceda09d2797f5d9e7853c4e3c1ff0b1b04dfacf1547be49e80734aeb4e9955296d480592140b4b2625195a903f4a6ff37c21650d8172214a54b87c33436d9ba814cc8a7f92b7e00d6cd9dca21ae2f27bae9f784627f1420c1546739e4ead602e3aa183ffaadb26077c54495b4648c0170c2c933fa605e4b31b8c193ee043fde5001e74ff2ceeadb797d8b99b493c31192dc49b6f3a65bca627ef95ee0e80d2004a1f987809bb8043bb9fa293a8809ba369b03a2bfa2854d1624e48bc50f89ed899b79322fbf652a82335e418445588006a690c8310fd413d249f242a3fabb912d47b80f1275ed897ee6b1549bd6b3009483e983c6f2240197a8133d355fe98d552036e6e332f1878190bd9f0c55960bf9a8461efcf50ab6ab075ea82b306a3a726482ec30717cdba75c34827ea2cfd72738deceead79fe0d8e9090baa34e30412cc56786bf20ed46c45ebc5a677932b926fd01bf1372208b7d9068f5d3df0d36448852ecb1ceadab3ced064a6231587856b47e334400413683873187861652d58ed20adcd3b7bfbc199a64c60aa36119f8811a371d00481874ced6c2e5748c8bf3885f863f748e1deb44534125badf88ea4a6eb7e3155b641f4a5a4d38c0d54eff58739eebf32bce4783c0a9d39e2fd2b708c01ab34496f23c1aaa0c8c8c999d355896a22b84365402ac3ae28b4e4bb897fe72133bea0723a7a102523a3052b0780e6f62551fd3c66b45cf05cf6cb9e707fa4c4426974a6db97c355b9857b9b763383c5164644fb91767fb4a6fa731f5a056e8f9948ef5d91e56fdf6a610daa6e5aab976572004530d5b575c111270f9ccad17bec6a5f6bf4c0ccefe3ce79728115c788578ba521af714a923b841e99d08fd48b3570c217a8fa8c922b6c1ab8c05a754a17022de53d3467c5a75c2da6575e48bc3997415e5c307be9a83e5c2530e5080fe8eef911c25e8adb4735fd043fbda5cc3a45e239f8bee642ece317fcb68e7ef7c2d59df1ccc85c66b3b2b8131c37b441d97e4b7d6163348fc0bd0e72f515ae7c7888ec7d08a4bc87145135f58f47566c0d47e2b33b09c566aac2681028c20f6c735b0d0c442c40c1e1ed25a707ab2936dc52911ba73cc1f042e9c31860de16bade416710e36548ad37ba67df0d265b008802d13351f8a82602b6912625324b2e0744702d84f3f96bd4edc419ef00544e8bd49833db5152203e2314c91aefb701e3affee534af229ce0379f9f510d1602869a13dc218f1a87927439eb149efb53ff67ea6c53d8621fd6270c8f6c1bc00fb611a509bcce134f19498c8f985226f2015593f5e2c73c64da9872a822b2a079dcc6822662452c2ad5407bcd1a6c84381f60e9ea7a36b03da2a969d04732cbcbdf7d396d8b682ed66ce325f03f1f5e66be9449db8e0937c8058e4087b89947df90b0215d842f8ae70ed0426431bee794be4a118ea8a794ffbb3ae40528f9ea0431742898e4e9af8e1c48ea4a12c4acdf174d7245d3b9089b842251e7be0a0134ddff33f42d93820828e7d6f8613a8fe5520762d43f69af7d397c14bc55d1a8ad03d89e8774f895eb074cf3560b7758f261354e8cb6db1c3edf237a89c7ee3a515c50d76a1664ae862cbd45d241f066547ba7f962c2a7d62736481ae7630dc454fc4d950c7732e1be44c15d6001e24ba123c165ea4831d929dc65bb4a912afa333b59c229ad44de6fc7c1075d01851d9189ba22383e00675c1812b59f2b1ad540c6c5aeeb9ae9335fd5ca0b8e58b182bf1d458e11911ddb1f04552943483ec2cdc0b4493abc96b4c0db91fece11f4bf6a42231ce68b918386ae8020ca2f19753edde28905a0192c80ea727033af785dbbce56a71560f79277311daa1df66a9dc47825ca4c5100699f9b4aebb438705752600fcafc1a8c08c0004ec1201e2a48f0df19ff5d839abdc53f131a021762c5550ceddb59c5fc49dba4a363414e3b0f6d83c91c7e86f368d2303ae287c1c6e0c969b8ca7287ece25a0dc84f4bbeeb51f7e1073a534f1db5220c36cafc9f0d32b2f396d6359e6102b5c1f7e460d60108632cace2e802cf14eb10c826d081da150792b349560f4989c6b48ac00db2ad048a093bd122a82422a4b57f3be7249cde9dee199493831f0f888393b5671eae062438390dcdd970ea079b4806d175c1110fdb41cb88f217598dac84f624e01d1a2b1ad6400ee2095dabd5631beeca399115cae986fa5640e8e79803533fb9d3279d8ff8c63a5c99998d1ebf844e209960e6041638371fba1746df7778a1e0e513e6bdf0641680cf5c330b55e96377860d1527efda7697c37611a5be64935f0591933d96fa53b313fa43bfd10800a1f09806dab9f5f4db1448c7233b04e0f29d6cbf4f0de9e713cbcd46405702bdbe442758a934f28259899b5e28a0588eef5843f1f0414be0ce49f46b7594a6e030daa7b2c4fb226c057b8e0db8cd284c497670814c129397a39db7058a8f8e187b7f23548f90d1fc93398993807f69958de7d8c07fc7d6c47709e23c84131d33b03c80dd5e480685e55632a96d1136383ef88c2e44b39286fa1e3320c7223a004f9fcf1088037c51ac1058d6c873cca07bf9e0f29ba09609fac47921d4065a24946157a87c7f56b3416fa34fa1a6a1342a0860d13ccaaff835799cd3414cba1f07daaad66cb9dc6ea7dd9ae932389dbbec13ab7ac612855dbf8579e53e3b8dae13f5811c5865e05e772117ab6e9316f1a8e8e348c5ff74b465af58a8ce23bc35802a1ec64acad61f3132627058e68235062f65278d6dac7159bfa0980db6ba32a7066f9181312e4e0f85ed4c6c0c5c418d43cb0a5b8fd4232121e282d3a5ccff670949ddc03bda198dc608c7c87fe0dcc86dac8cada140244443bdc52322b75210488be01e52b7c530337cccb0f89c53d418d00ee3ab4e34be97ae8df7420abe02096e3b319779a982fd716741ab8ceb31b39a7083d3887f38257ef8b18a9020065fe8f3bdcab0bbabad8a07d643546070c34da088523ec9915427aa1a2f0dedd4930df81d1f3851404c5c8e8fb4f1b7139cf599a5e44a930dda8f4894e926e10be980020bca06de2affe6ad35e836526bb274a1c34d434d24dd5e94272100882363d3ca1b6039c530f8fda7ffaa46ca44887482d609e938d1c186929f0dd2c35d1ff8e0184af21996f8ca4cc3b11a04fa4d0581f8a989dafcd51311c29b7872fa708b37f9c2128f4063e433738dc80850cdfa01ce9a1ec87d211cb484f0ae49a0b8c1249d42201d4b1b3653351b25be4f0bbf941b84ff10c8908c85716e6c8af17296be3a892d1c87b2cda242d469a622f78771b962b09c08042b87a506247c19722b9042585375de00ef3f9f6fbe073be1916cd064384eba032a6abd9a087ce8464d25f67e09399e3051cabf10c869e54dca3e774c28e0e580e0d7697db4fbe61c769b8327d28cd595750695d729c5eb86466964c0e5a51c7d6830cff4a5bb2c0db40d37e9a9825b57d1e5a4e68008bb29b06df4e451c3cb608f07278c948c7d059ffc47f4ddd2212248182f6a0909b70e1cb8e157387bdfce15bb532189015256a0a53acc85269792539438872a5c5e992e3eb92b4ea95e45f99ff665cce546b66f08c4013a9575175a2089fe115c50032db4f7629e038b541e4b8af56955dd047b79abf2db6bf6d441ce208a616e7c8b9e44028f893dbaeab6ee88bf11eb5051889f50b5442472eb6e4a1b484f24c5b7b6a250c399d5c0a82c58e6b7942dc0041ca85685f103ef646591f8e249b6750ab6fb9a3cac145e484215285ebe4b1ea11da0a05235f148d646166cd17a534f419ba10f509a48a51b0066b92006da95be120f753a8a2bb606413c688992d78972a3e31e32aba0cb8e672255c0dca33fa158179cfe29e355c62813542474e683274c38debfa5b4146182544961e17f2ddedd491c49aefc53abf61f6a3483a50dc724a602e57b30d781750c8921b5cb2ed844b9e42afe90bc411da21f3154d3214878fb5616db361e74a0519456c927dc6e28e431485e3dd8895dbf86f7923447791d2368199009005cc515a1a1f0b1b81e956144a28fd647d38369c21b7843ebcfc00d05f9474be87aa63a086b3fbf3f931407711944ed1036a72428635e1d03e5f80b9e4145f5d0a73319205cbd5e431824b0e05a55f75fb11b673068e82c245794d5e96c6378d597b9eb0a8778086b20b06853c23433bc610c0ec51785edcbd7001866ffd70b40a31062b0a706215dd32fa97567052fc956dbc13395b57d7fa0d51b2ed35cb1e45fa701150af8c0da68f83123b957e94de757bfe4bc5a92efe21b195ce41dba784817c1ae2a3a1483a464a86c105c2d9047e8168b226b1646718d0d7599bcbe96c795a5496d45e48e150fc6182a4d819eb72080c9200b76525d65aab2bb4d84809342f274db4ccc00bcce8904017201ffedcba0c62611f072718e184411ac999f246b14c0a97cb6c9f4e4845e822e1d1d1d266743908b0263bc69d839e5a48ce9bc679abe5b85f3c10d7fc05a48a0ba0a462e336b79fb2d043a3cf3f22491d5ffa1889befbd3bd0b6046586f00f95a2b502bb9100a6cd6b4e65600fee17991b625087afc690ac27410a359d8d602f0c8c4899b8c872968944414db7a12e719c36f2e9c5f75615e4599946201aecafa34de5030dc70c7e74f67182eddd0b2d64ce5d7b72557e491350c17a8791e99d96710ef1aa1315d3aae40e68f5a4444c556c0d1cb7f3c446d8f9115ff875b7725eb70f689acd81f32d819849f834e3a30ddc55f292bda2f98293ba01bb6e73bd480e53aefb698d2f76507d33a6ead61dee820d181db9c85610c91a826c01dbe73929a0183bd695ec26883151f6017d776b108e26f32b8c14389eade1f9890861510485412e3a684999dc5c058bc09b4e06eaee0b4a24803047226a9b437761902067304c6032fd5555b621ca3990fc894de5aa3348c67d2843766abec6984d207819f890100a12c23ab34002aec42b1fcab63c252a701cdf08c119e3ff9827dbb6414229860ddb1366d02527de8691df076ec49ccbd0efc6005e48dcc79855c0c6c070d92b79cbbaed10cb5d5b5b1fc2c798908ef54f273bb8ee303a3ae7f45afe80a038c1776be59f7c331d3b0d7deaa45302b0e4f6956f4c4134a83a7267807253d72225f117feedc8c5747b4aa6fb1e3d022c2c357a773178f1462274c1d151d2d3a6b28ee80c381719445ab092779b34a9df97daa8857809dd663eb6e84078a023bf2890087fa9934a904a25e377b7ac4c4966c68dd645fa969f30cdca309bff1bb2c6fcd4977709c843d7da6d49ae7610d24823c381b0f512c42211a434a8256882b34575adc93c6634bdbc3ae20640240ad7e7c19e107f3162e671c7a8d4db51979e7a87dd9bac4dff8a7533cac3ca7ec9121a1de6702640171c1c395acfc64a7491ed81812d53460e4d31cc286f24c841442d82711488bbfe9bae6005213442a0424ff8de878c2098b42407c8cddcc583723d81c0a7e24cb558f38c5b88fa1cf2502ae22dff9c32d86b9c70b88839f73d8ccd63d3bca8ecabb8455cf53dd888f73944bdc361e12b6583d954dd12a14f43d71f654d119e4d3fcc2fee2fbfda27e8a30471d388b656b209ac6eb88aa025e9aa7e9e02cbd83a87ba1793e8e3d6cbc99e08f74794a63e94aae0ad927ffd060ae66e27a1a21b1994e19a15038c566cdd303954711ddc5f6cf609e4bd0d86602f1418120d3f213aa6761032b14d9eb242ba1108b33b65c75653236a77e6271161c3e158fa243085f8d61a26618822be0065c89baaecbbb8d122b206956197251738cffb6258beb53448d969b60f6b7dbe3329dc840bc4c578b87209fa33bd24c1991a2f24be0d191b80158b4bac41264a2cfd9e846fb510e6b37fae82fc9d560fabda67e2b29c9bb2a5c6b44afb3c0d28e0efceb9cdb58ebb24196a40aad70433e4b068cc695467ecc1c43d6637532a55f7b42f784a34792bde57242b4ddb72b801efe2663db5aa011de1cafe4332d37c7ee7f5fa4e526fc3fb6b1cd8e6b5c3cb0c7ac7aa789ea9d4a4d0b45c62ff16ed24695a760108496248beefc5f7d2f0513595f5541e0fc402592c93ea6c9a160e38d5009f43417460254670978d967c55e600640dd3568620306f5800b0265510c358c935d68b3a50805be39aeb44fe74bfd7249065c9331d914c6fc0213be24cd549d7769ed68f8ecdaa5c18b9d42559a1290512163b0b414cfc26d08096d582abb8846a191c7035281df2edfb85899594e29af2e28f269f6034783e939aa91ff560a71ddec47e43f2246191344b596edf24c5b3c96135cee105d1b63fe00d5ca88a3e19e49ef0c21e0e5b1477d966a9d3ab09e26b77c1cc2d79602643b4876a493d86e6fe61211e969755461ef008e1814c222b65ee5a6f64959fc5a5271e9871e5cea808fd05bf931791483a2cc86db3d31ef57505e5d293f73fccaf956204d88050023a37215f9fdf7a723bcc3530002b93a323d7c511593685e806a6a82c41758742f132ec3fe46f9b633844bb99531871516213b80f0cd8faab289a228dc90955464056ffae3fda62d7e78261d323c0d010320f84dc8fbcd82a1d66e77002a3b6b04e8652776febcfd400444fefeee08b11a5f691e2a0f10a99b11596c619a6b8799302c1d20fd27f3613d39b029832dbfa83f6e987606d5efa6ff05437d54088ed5e12eb85d190e6fb7491452136c53b39b8f3494bc111be9caeb9043bafa076b6401ea33beafe05e9373337e20cb60365e4644a4dc8fce41851c58a9027afa91e12bc9bd29cb4825c89990e9ef3e3e3c2a0f8875c921d7450736e449b3a4dcf1c6d85b477d5f90605e96f972aaebc740f57c5368b0326ba63a60330be901db8702c496dd55073b3556b49874b95054af146347fb7b0fcfecc5e560dec0a0dad267f82db0abaa2602cc90107972f25bc44d8336e340f68666aa720a2b3473a032642bc565066ed69e48fbb4f1b7b6b25a9209791d014fdab9f644d4929408271fbd39fd6ea8014ce9f8c73cc0d3eed727b58ebd6aeedaeba1439bcbaa1ba087b76ad83152feea531ef7fc04154d52e7ffb84688b8a32703b49497ba8fd3ca0fd935a40e80b4656e8caab2a661f8bf7f64060ea94eb8a017601b6b65a86fbdcaedf9f88cacf6c5664f6cf3d327ef7970da3a408dde698c9adcbf288c758baa3bec6c56e039ebda448a5a740d702cb51c124484e5fe067c9d84ffd7d74fd2c35a1ef9f85bf1ef0b19e9c4e0b7b56a5b0efeff1b811b8184c906e630cd6e3b0cd0803253dc6df6720cd826bc7968a4fcae01ac728500993a9bf43dfab089b957612a60946ff0a054ce8b8a22574a3a2a3741bc15cee76afb1a7c4d2fb30188f19a5a5c97523980a8b036fb7a73ca9a4135da9010e7687344a5696667371872d9dc7b0f573e83a306b25835acbd6d82fd4655f557350a5926aea9bc9001602bfef78219144125ed36dc718d8f68dfbc221e32826e75ff202b509f05d46223414473a1cef9c62401fa050253d9dc427d080e83f6d1043795b280659e014320041c1009b445757de9ae7d05094c793c065b272812ac2882be5d8ef2b24ec7cf5b0b19ebf457f7cccfcc78cf4717036c0c320f1aaf8329e4a1cc9918f774269529194a7c61d4b98b57817c633689d2dafa74b16e83152a5a4710af737b2a8bb218b88b217057be1b99f665954e916a95aa147f1aca11a7bf2a53981c16209a42e43f74ca03f2cd51a5ec3f096fb91637786edf52030715f8bb05e42ab005737f669343987424198f180c1b1d091f19ccb01e1be2c2f4dd81ff156da744c982db9572d101760b06ce8ec117932187011b2870b698e4741a255065a1a7bef743d7851f25ef7af88b05389afb74e4623af4060f27328c60862dd03f60e2e092e75ac8718b39ae3825d8886970e69b46040951da1ba18df44ab2e9184a5d11505e02b57af3764ad41d8baf6a09b418cbf1469c05a3dd4094628866246fc2acd9d71d11b63429fb630121f97290fcddac3ca5a7759b883a6f688c7738120e4b703000d0e90e6d01369fe4d4df01918d5c7ed70ec13e03403569106defd3e231153223bcd86911c860ac127f8c517a5d5e6ffce32ca921e301d2d93c30eb4ecc70dd42f42603ff65f32fa9d0bab10815d7781f08984d94665375e4afd2da520cffdbf405c6ee79e35054cbe1a3055e5d438d5cf0bb58ed416af6180618e2bf6961976a46ecd6767911180faa2fcff356cb86349b2cfb0678aedea53a41da34d30fc3ef8c6aa9a0b3482fc9dbb365d14e1350ffcb6260f91b6e18bbb4a7fd8d5bd2c1976a3e9d88254290ca81d90430be1dfe007c03982d30ca8231433003cdb5e674d10f0ee6df4c22daa4b8f059094114b940b509960be05ca97decc9959e3b919e28140d0770f62becc7820f6f955a57e6a2b222323eb77a54bf3074c0137e8fc4fdcfe08b02caa60af9c5aebcae6a4646b7d19ec3fb6b7a5e4c01935079c8372e129d66ee4f6e6160e04a940e3076cdc3ac60a1be15c7809ce9e1652829c6356d54ebf0481279d654cf244cdf22ec81295709c27b612b382e6a447b2ce161f648ec7a0333da72c7af7446b199c5b78182b65628a394ce4293b6e4b7decb9502ade7a252ffb378d4a9997044ceae7f16600e2a27e5f4cf317bf782698f5e8ab93b5909407df7724b8503ee1412a0eb6f9d54d1db721192f8d547cb61aa55b0473670133b46b2e07450761850c48d3ab4d40a9d43bf9a9100c3b424a3c5dad9900b02c94506a46b95685bb615a42d7de25c5e80f3ee5d2153cbcf14527fc0c603b60107c7a80adf718eb1cc96405113b8d02f07f16796434e9eec4aa4230f17aee99f3f88ac3171217c1d2c5def9b5e5d7a567c314fc5641cde8265150c2d8c396f836540a9631ebeb65158619a6cde19bc7a0917ee95d623130fb4aaefd70e24a0718c88e75711dc19983d1d00a9a1f8a7429072f2575901a56c195d4ae9afc1a0ac0bab0807938b2432fd4d26630230bbcc105aef1ea5c5965e0e537dc385da2381efe09da1cdfe872b3e57ea74be5f811a55a4369038dcb16a1e87122a60b3a5e8a219a6dc41a66abf6af59e4697bf3f7d924ba11bc8dc03614d14bfe6c70f5763f6a9779444a3f196646c1139f1c4b21a813cc9a80d39e61599850d54c002cfab648c852e85f893799f78d5e420e8f2cb312834dd4c82146dc456cb5d07662934dab65dcb35ebf1ca2b567c4940ee564854f6ea25912706d42094d6a23dad6a150ac1884c810154fc633670fa3852988fd6d563440cae2feb35047ba409286e2af782b69c1159c08d523acca4582e26f29043decbde4876a9c3f0c4ee5847bb9bc80d70171717f3a4bf8d005cff35c7080387ec65ec81a24e0edc11b2306a396e93e6441b15697d910d9c20203a970848a938a2ed07c67fb82dc2c4e37312de59aa691eeb67a5a87f531f74dcb516fb3e12c0063ed69b80da8b07a0c61e89e84ff62d2999f32bfab192b4a21b81ce097ee6f0541ac82a0db6cac0e6f0a5e2c8527fb7455af2a2d94f0e53f553ef4ee635f7cded4c485e0657df83ddb26112fd1499e08d8e1337572f972007b30ce47136430653802b04a1868b24be6f07351e026970b573bfcbe4e706c0071073a40add46ba4db1019dba8c3689ef64d6a401cb2a8099acc084652fb0eca614064bf2e79a1148e4bf7c79ba4f47c047f4a704ebd81b954cc8a17caebefc4d765c7febcd1418fcae664eb5b3840acbd326940cf0c1415bf79aaa02b7840a8dd9e18ab513a1cb48a006b46cd79b3ee72a0b3fac7715a40cae505f226d691e5f4b5e12aafc9440c46afa2ea1e0a9ae73c30f32063d42100130b147954068942d49ddf77b3397ded414bf3a1df622a8e4b0fc77dfb4b16f01f52f91e506b30c93433e0b5af633be49c9f40dbbc35bc7887797a99dfebf252680e2b3050277964f1a93a4ff8d35561f84aee99dd92d4087884d8ad1c6ab936c0ffe7cf4a939f736b42efb8186f97fd09a3dc15c02422ce3450ea4c5c191a9f6c4f856487a396b4b6dbb0d18cb939803fb918a757863b972be452cdb00066593b5b55190e52babc19e490cc40b635c5800798abf3a8c8896bac372face9ae3f40857ea06deca74542ec9afc8de3ae3a38e869704671437a91099995d0591845674ab567a6295a78abd8908ae2577df728ca7fa37e12017a474cf94bc48145ea3e87b24b7609101264fbecefa12dec3a92f63425ae08e70fd92063b04490b2dd1b421af24fefe4dbc6c9e0dbf452bbd94744a81d2c4ed63b18a2fbf9c9ee112e5025f13704959f5587398239b3c11f70ae52780d4de66820a366b14af60e580c75b4791b17a737fb79a008c418a93839abbacb3f2198052a2f2e86bb176136274e37291f48aae218477176a085739a15b92faba87af389986eda11e49600205a7219aaedcbd116d1ab4f4883460f344c3d28749520fde3c55ed5936b8e557cd12e74155af547b7f8101a0efa15e43ab49261055766b4d6e090e6709e41b4d62d72470f69456159b5af0b49b6182388fb8cd4337167da559e5e003b1974b01c8a88824f1c8fa4439c0199489878cbcc12147f38a9b9036bc53702c5c32bb3405a4e246433a279b67278ea2d1294b0402692e3ec064f7b24f2019e461e87d315692f0cd7a80ebb3d74f51757d9afc843dff3f4c8168c3edfa1c8b890d305b70a992cd91eb43e630dd916cf8c1ebfb0f1205740be7a7ae3d79d6ce6e6cc5f239ded7a8d1ae01f0517b10d4d7cfb41f5e10b08d88edfb7379cb8b14784d98ba399e24d8500b1eae6afe3b53fb43413624744a163239e73fce9ad202a3d965386babd0b602286480b07e59da8c0d6bcc71a1b0e0271bb596fa5340ee4758d6be1c2791f9d6d6fe169277f74e0af066a59ce4325365cc90df8c6ab7e8bc9300fcf3b9d33334edc38f224723d79a85867081c4ccea2ce550a5eb973c01bf037a69622970c357ead46b867bce4832d39e8344976b0f2902a3b06bd8cea4981ade0c8bded2e235a641a786557648f0b0c4da389a04c8281a556827949d03987eff4c32ba24ea2fd70bae8476580724035d024a5311b54de73e459528d88f20e70a473a38cd48a8fa96b826bd079a2c5910e3c6292cb937bb9804b59b836bcea6cee87cf35d74216702a3c5a90604d971c939da147fbab620600bf43f6336e6260218bbaf62d320ef1ea360df02a7d7df3b0f8c3e472b2912ea52fce0eda3208dcc5256a6dba43664c23abadce7cf6e906d2550c29700ca43d6b23b36845f148051c1e0adf85a178f3c87d6b9d01cdacd7aa8dea001ea9d1ce24591321ab518883b1e107a7b6d55b6bcec93356dd084e879ff22d55866397751386bd01393237825d30d0ce005c230e87e4fd0fe22a6a89eebd7a10d04d780a5624bb2657b5642155789bfdf0397372433b1c519532db2d2046552a13c574e64234e51e14ea2206122a069a638694d0013db363d50e6c5f0858ceaa9fa5797bce9e2fe96b3b07b30d7fc66fedade73a70717977f06947be0c539404daaaf7bf9fc07b24e7654da4951f24ce57a614c23c19f1b5cfcfc62ecae6a7f7b1db80963e802c7754f1532e53b4338ea1eda9e8975684fc2b7b5ef693c0afe49813b5803ff894acc7ac503fced347624653376263120f57147801c487b7d06b4a489c7cbe8a4d257b80e493c7581e0abdd1502d9665f6f7669a059a27fcef78771b153a3ef2cc2aa3c86d8422f9869962c2bfef8d8c35a9ac14fbf08ebb2bd74a1f0e58efd97aef23a37185f048fce21294de9dee17f1844dc39423e8e80fa46ba88aa9031c4b0dc05ae7810e12acac4399974fbcbc870eee1bb8c9737c5bd820c1d627e8152d1dc7c53f2e4305073246a70e38fd52c5dcd7e888a9ce29b4ea6591308ab30bcd61c905873b6ad781edb7c69fc33679f23cacd96f4d93fb543dff517a83452b78d366973dada30c3ef667f3b77180112a03a47ac61aa7561cbb1377b35f944cecbb70f2adf2090fbf36b355a4ba110ecbe8612680c2c4ce1c3b3d108c927a1295739eed73ad2344854d694aae5e3da8616514189cc45afb38c5c9614163f4d3b49381df57c06b1bd6d3b78f95c596eb5b4592e336d87a76d84b365547463bab704720a8b54bdce188f7a350468f80dae2bb90a4f693c8e59c3a06926611a94e6f7caa5c66de3cd960db34a7d250683e3ffb4210f0906b8a05ec02303377e66c236eb2649ce14e95cbf510a951fed229fb1acc07b2cdc8524da3b2c4da53c51c573d340062cf759aaa10af3eec1950d07f86f839e68fe1f2b7b1c4393dbd848c180ea8906036acf219931c7ab4b9537ded65be86525e3f6a2725e17f4d2ce1aca6388905240387c13b69b51c938800743a3328d6842bcb4ebb7694a5f67ad7a103ef716e18229cf8ef83ed27ff1ae9f5246285de14df42e59e92e19b543e9709a00cfcc068ceb545b0c3fe29c4e940e70e0b7c438e7f33c36d0496feea47897890fbfab388102efc713f78388cbdb800c07b27c7b3a4b250565407866b1ee8c1030d7807f21d00226fed60bb6107c39240c6daf0bda5737b0d050dd313c47d6ab2e418f9a858e2aec06d88c17176de2215065eda699bd94f15305e1aac8c737a89c682dad746e7719f6abab762eea51a7738ebc1b0595438f00065c7c0a6e428f3b42b6d5061e80953cc3ea3aba27849349b4d3c59542d59cd099122bfff13ee2fb9a512ac2e1d43c84cfeb06953960e735177d77ae84b3502645e06debd2c75a51fc6f27f0a060ddb6593a6566730f23ef57ccfe40dc8905d40104542a10ae070cf45a44ba4b20a3849f6bd550d52604359c9baa2720ee237bcdb6d8ad87ed0c53615555f5eaee554485dc77716eb237587d8d1624ddf7487e9f21512e5489a024092d35af1d9101f213dd1f4b8349ebcecf88fa8a51c095384b84cb8f951e445c55e931a169de92491f730ff5d7cade355c54ad03d5153e90575a3b9e18760ed877d247458c8395536316a5265b34e475f9fa0d8a3851eea3acf47b322b92d54c66cf7d1da10bc7d1b1b790e68c45cc1cce1f2c66667c603a40aea4d82b6ec9a8eee4f6ab49982971ae5a0d3d51b037102ec1e65cc9fe2d57efa3adefd13858ad4706f0e057abd0292a901850940faba635b0f4601c3cc47b17808fad9531972cc0098aa4159f7cfb67a240b216fa94d404b40624a77f75426cd7838c14c1c660374317245dcff8748cc5504f2082585bdb41e748fcc890100b5b5295a711f1a43b961a3bc63e59ed222f5586313ce2acc0957845b82464d2c530e18e05c0c80d37c83f014a5d2f52d7b3aeadebd85a392a8c47161d255c207447460724d8a09042f2463bfac902c4bb555a0679344246c2a38c06e4c62b3b184338fa586a91cdcfd195f8406ff99378ce481bd3846dec65a3d8984a2152070511d844e1d620d1a2e213822826a5585bc21d0f750e4236f3933616248930e35f2a7f7b5228c440ca9d14ac90aea63eb03259a4085e7944d571b3cf2dca973a37b3514db73b85fa396db54034c93dc7953708368586bf8c995c86cf867411a200bcf0460f7187d1bf4a433bc5bc3f41f1f84d1fe7790f2dda83d32a6ef038253f81fae9a1e1dd5da916ebb7086592ccbc00fe06046d9bcd6da41a414121c1cf135daeb76f1437adba486f9b559f36c90b30fd2cff0e41215c70cc5272d027e429e7bc70399efb7f638e3e91105462e3325afe56ed24f6f80709e5b7312cbc81b1a848d22325b8041185945e6aa623d0c5291d8cebf4197b5c6df2b8d3578dfcbb1b36e40ed9519107cefc1f59977b1a61484d64468935f94086f47638eccf9b8d1a43ea942caccbaf9ad423ff5630d0ebf8a5af5448895653d1b538032a12724b1e05046be492ecf54c70e1347fcceeb7bdfe9d40ffb5062cb125d42e3c8d11d16110b0b3ad5dd90e94e65526ee708da8a5ea4c6e89b52c6736ff2e83572e2679ca786fe1f47bff89e9e089c73d30102783aa15bac1a0c4f7d197ca09d4a03e29995fb331c4a58bc765bd021f5da7004922f647b01599fdcc1295e792d1a49c133dbf3022f4e44c9c460f20c5064fbb843667e2fe8c41a08f1f0c9946cedcbd0983401f7f0c09ed9c993b130681be3f18725a391377260c923efe3164347226eecc0c027dff614868e44cdc4f1864fafac190d0c899dd993348f4f18321a1cd99b89702402176d8ed08cd393737160602b58efb9ea424064588aeb9dcd3d0acefbccf9d2d1cb897efd089b92a9de53513bea44653dbc598a426124a1d28a60a849adcfd98e0eb8723f90948a50bc8a9ca635611b22a08924f28e82fddac4822b1bf4859f3114bc9a3006eb83edac35a1588056d143f7a2b1f182d75337f044500b34ca75f79a9d80aba43dd49789987b8113cbcb6871f8de7647a4dd6632d4c5431d84fef0d755a907ac06a2f112af8a9e4a81327d9a0fbd68d6045bd21bc680b381392c810224615e9cda5fbcdb9e5187ce45553770611a53ebc66adeb05a889cf2bafa71804bcaf0c98025ea2cc2e1ed4c8581f8b5d6cf7b1bf2da2f12f598af4650f1cf73c658f2b3fb0386b39a5b42ff5c7bbb50fd9fdf307f50f9a6fd33b6e3f7ae1a217b6dd2bf422ed17efa92a6014fb251f69c175cfac92c1779a5b878d1290ac9470412f1c197e74e92ba1075ba5cbd8da2a02aa52ab5fc21742d8b78ff2a0ac98b7aac7f0af54c5ebccd96b43c8b8a6e2e8e9c5aaf8cf1a0b47339a5bf4b1b24891607c0efb4af46289dd51fef4f8aa47a29ff177a5975c89270a0e7d3fe61bdc35b535a44d48873fc88ac5e422bfbaeaf32018bc96254e3acf82c67c3b0e86db87d5c868305eba5480a880b39fdb19377727ffdd30a2891ca8d00af120cce40432170e9be084f244cb31749b6e6c2ee08a23521cb7b3103f489afb54c10e0fddcc6e14abc47652331ba3e3fb99426e8c03c7a1f340e8ff2bf29bac21900dc21882e26243d8cb4522af1ca8297a44a715b50a3c6a8a44be3c0ca08a6e1a2c31c50524ac848e7ceed9cb9663a002e8a8316b85dbc59d6bdacd066e42d88b2c87f2dcf0e46d27f659b3b5d9a1f361eef4b6c6ad71d53d1812024e0c3ef54acab21bcffcf3f254962720e36b709857929ea4ecdb0bc2a3337d7abaac8ec8a0bf3b8a969d59c9f60efe919754387c3ec241921f30fb72909846500975bcd80325a73ae87cf35c298bad1899ec899901cd1c43dccecd122f6cd71d01d34b39f59f683b394d536cb5e63944fac5ecea6f48a6963cc43775fa1553b7990de54181f581e897d6fae6259a1af9c50359a0049543c7e8f80e964e0e674214f35978804ed669d8039de79f6b2430d83e91cc6d30555ae1e8b6413454a7d297964c8f32da9780b27f2610a8583dc79492cf66bcc85dca6567376f429f4c7430c64daa2bad8d3e601738c6f970995b126368eedc6500832f164cdc76febc7c70a9cfe1b22d37a9be0d22eba8e30de33f6759006c4049628df72c479c13c301182c9be1ffc85f8cee92d471f20d15e8e58cba5b887b271c2f74d8702a40d5dec0509cee3b491bc689733310fd38caac13b1d46328656a70d50ea709de4eb143e28000130b69b30c081bf6864766003a2149d3443d6a23059a5858e0933a6e2c7301c0b917e6af1eadbd919595e616726f5e3ce2d2ae38973ba31347227db324df30e3d9de8a69fee0c0a4e7c0d30538ead3398ed480636ddfb1f11cdcee240e9eb522a29c7da30140ebbcfe2a80978f048508506848778112bab9e3beee0bb45d8f9240628d74c0cab9a62afc18b87b1070c6473fd4cf7215c64371b1c51367b7fab733e287e634e7e8417514d61dd433334329da8c9f23908647fb819220b9845c2c9310009953f8bd440869605f4278e1fade0fb337a8f90fa5ca5c385efc069f09eaf672b492a3753d9103f7dfa81522a7138a9462dbe4a8493b1d85b0fa7e6576cbe37daac420624159a8280937b6ffd261db124ebb9db61df40f72be264e9697ecfd51a910e8601a0dc9eecf88b8228870f39a6f3262a4668b4774987fbac3111219cc38d179d9e2dc97ccd7d103cc5b9a82a2aac398041a47cc0134242fa21e7145aba04e312ac1673a17a44aa883625155dfd99c7775f06202c5bbb84db5a5126356c7aab42d88e424b1e10212b3c65c09558a1f7617809938f641f8865923d66db25127875d525ae08018351287aef06d30b8f1716242951b520a41e3c3674d78602599d137b6fe08407cc01679dde82bb8a229035c00c1f251c988bd5e26f52438901c9e95c1935a01845e2d030c21553be875b9389710830df98c21ea60a638e290fd674d208a9e08eccfb5953a69fcc31a4a334a142e3d56d6c47cc7ea08aae7a644484b8e7c7486cdbd54417dae90c8bb0cf056b36dd3dffa75d8c6c04690c2b381a7630254882a787ea7ef3fd6c094ec220f28f5a23777aa0f5b52940610ac604483b65d1d51ff78a03e06d2b265b7f422bddc8dc664dbe8bded1dca79075765a342021dd040f115ddd990b11e8ee06782788dea5f2de027116625947b120af12a513e0a71c7a6ac621c905d42e32ea8394e04f9c124bf325325841750f6b2c8c4eb0d46497e899d24f050bbc32648cc5022487dc70cfa02f314afd400dfa4752608c18eb261fa07950aa06457c50f73f072b122b9b4c435f3700b1d475d740b97ec925267e5268e479ec31962ae50780ca522dd44ffc8c58555f729bbe38b920c4c8f12be398773f06692549a0499c82356739b9097f50c4aa6835f2b312e243ddd3c44a7c7bafe1ee8f2e6d7c3202296288a533254bfa68d920d6148a65e7a24147c5e6dd22cf42a1f5809e764d5c699e83b23bec8d26162be87ad2ada6fd18f8dbfb53edb0b20a1dd16c66f713d5a09e1150a4fbcbd09703a511870916832ae9c7450d43cdd0403978f2a22fc0ae4b1f7f0b024bc1a2465708409398407f1bd3f8162b5de7aa20eff2022c0e653166c52b2f056f41ff0d9139e13666e9df3c0a7eaafd9366d3ac8d0f7a3b9cfe3139c710edb9e3843c153105c0669aab3fe5f416ab2e34b486d833c8d0b1b35d3ce46d9192fde2da681d6c866a23ce9341d9658795909ac9f5cba0e09e90420c9425348bbff2a22a1f3fc967e0b1e7de4fd0accaa1338c49e8dcffdab5504c870a6c224b2d9b0f5fab9c8541c836431100b4b9ddadc856ccf0086cf0b4afff256705bcf5f3d780893e6b5408708247cd1108977fbb03891655c26263182cc3672b47f235ee6326440431e347fd06fa85929c805bd7a867a9425e3d3144b4a48231a8db5a23a2c9a46c185ded954a911b2da6fd78e4e3b10a1f6905ede3bca93c9d5f5359ff6fec822102a2c3c00af0bd936e8a8fe16cee6ac8722b1356aa57b52cc2799ab7f8fbfc3dc8b5a4af253a45a077f857e36fb11540c3a58669cbeb476162ae49c54d67626be844425c540b1e83eacc14235201ab2f70404ef53eaafaa7ffa09c398eb8cb2ec6b408c5d19a74033c2d8187fe3ae1757aa901af08b6c62e36d4c6c600c466342462c14af56ecb965b5e8962933c44f84cf5eb54c7c66c367744d25acda01d3851d5884589cb8862d5f55daede91dbcd2108195f54e6c055d47719acf669a1b4c4ca3c92cbc1e573c93edfeb937350ef4605a02b486b3ba1e7a9e0fb6e01a4bce23c3cb434785793a8861019e06fcb200d07f329125265f5f7290bd654ff08a542fcba2255eb82539114f316f03f21bc938530837e75b631a02d6ead629cdbc20bdabfd24a0e174a4f6244f1a9c271e0284f49a6d970790347d8cb7109d1a846ab50d536fd463a47fb991e094680d6912d612afc50da4e360a3a360f53c559bc2d7e54b41602ec08927aed604e736ba57dfa84c1e898583d4aafe1598d809bec11d8fd83bf41f22dd054f928e1e2429f6bc25a5f90d66ed52c692aa7d130becff018460037a55bfb258200c5a351d575f5c2af1d94a6492bf661e4408bcab4105bead218333e18482f41d74f4c30b0a1c865e9bca379d7b5e66a3574ca74b6aad4657b30c276a74be5ebbeb03116804cae3131a55a089b6ddc86e6b7b6f29a59429c80a8e0a3d0c349f5236be42ec4ea45b6f72123d88e653cac6977527f27a10cd9b9c80dcc79b9c7ebcf426a71e977993d3cc476f728a79e84ea4bfbcc909f4a07c03ca252dfb4fa6f964a29e5c2b736d9689649916cb377722b38fb984e57e6552ccb776403dcc62eda07a931398c9da01759cbb7650dde966b176d041f576271b7d618def2b99da975ebe24fa52e84ba02f615fbabe74c302ded28d30ebabdf68df5b0781a99da9f3e92f677ae593487426319fb5d099c27cd2406702f359565c33e17c92d7996e3355b7b56bcd39829ee65bc5d13763571937425fba715d747a03f4a51bd85f7e03e64b37ac8f7e2346bacc6f9433efb9f1e3e334bf1104e42a6e08f912f51b35bf41e44b342fb1b861f31537a82fd5acc4b4b41442084b365faaf952902ff9f8d2cc97ac932ec2cb45a0de7f83fa12a5f95ca279f2e4f96a5b914f225b3ebd36944fa15a3e898054e43308289f351f5a3e7f7cf2499bf5e4b39ce5b32465f98c91f924ade718fa319f309bcf1c438f3dc7d0bff2d9be3f730cbd98cf90870f9758e4c993e7713e730cfdcd67873cbcf51307f836e708fa9a6f44f402192b7dc1c8d74c4462c2017ee84b05f81c34a146625a9a7d8ea0c7484c4bf673d49ae65bc55130846522d82bd762a2b7cb448b94c3e743a41cb00f9172d40f9172900f22e5b80f22e5903d46ca013e46ca513e520eb1916e769f46b2b9ac388af4a2b6cad855061313130e1c82306f1745d84be6ede448ca62de5ef6943ea3793b4df63e34c701fe8fe308faa5d9abf0f61af940ce94e3be0ac7713fc871d07ea9006ff376a22a830987cfd79c0907ec859c2907f836c7517f88890947f91638130ef1573891e3a8fd927d16de7eab329870c89e29477d16b9ba05a6ed22ea2bccdb45d4894cdc45d46de6ab8ba80f996217511732c32ea25e33c12ea2aec224bb887a90397611752013d645d469e6ac8ba8ff98b22ea2ee63c6ba887a8f597611f5d2ece922ea33d3a78ba8cbcca02ea21e3381ba883a69d2ba88fa68fe741175982964d6ba88ba68aae822eaa149d445d441d3d64545d4afb9a28ba85bd30293451751d76101b55de3ad324e1bf6fefab00a0594bf0eeef8f671a427b880eba2c884e38e641eed251d36fa68631dab5183f4a5d9bfbcc642089df45be471c44450f1349f2678582c9f3674487172d6189d2e00d451c3d70cf325fa95dea7394bbe7a38a7ca5797fafaf59fc0f3c4d66ff0ed7b628627f373bc7c75108c89501dac0fd2b7277d30749babd3dfb717dbc69982d5c1bfde4bb307fd0c9d08f339ee8335acfd91c6b08722cc1ea4ed01e5ba7a26fa38ec9918ba2317b41c01c31263c634d169b0d8c069024c1074aa705d7971c920e483eee85edb82940f3cb02902e4863348be00f1c40d35fc600506ae212497929f1eac966871b7a06fdf0aa22e109f889b5e5b2bef08a9652d0657136fa576d65a6bf319c39a49d6cf18474915c7864b882f5fe09aab07aeac3f7141683101c1355c520f825a537cf081a8e6367e98b2810b8614de5c99e2a5c9105a5b58729e184209130d9bd7191859064f19cff6b3c74f1f3f493f657ecefc2cfd8cf909f3f3e5e7e867e87e827e9e95e63f3ed26834ae6ffa306ce554106c744f8f564f4f4f564ffbf9e33e3efebcee8f597d3f26fdd107867d4c6b835ef998f47b4cfabc2eaaa992d755d21f63a4cb7c2449522693c19199f4c9126c0e068bbd5eaf11e6a48f3018cc4792e41169d287e9425ccde65eaf570983c1e8bfdae6428c310882346c0e5b6babeebd5436d74e69bb520efb515000e4afefd80897c71b81f2783b20af23b46f0744df89eaa0d552c912536163d0826649d27cb8c1ea2a8e103e298ee8806272c5051a8e0c61e60913752c135100f1a045c3ddc66fdf124ec8ea66ec5bcd2a4ff1b958a317f551ac97568582f30229970bb41c9147af3a767b77019babd608e6d5cbda0833e92e346dd8dc0b279a5a361242175dcc268c1eee7a37521206820df10573317498188a2efa68365921813201830ebc9d094e4d4e2f87f9989d5e6e82132cf4b05655ab97d9b503ac65839ad5aae26895a76ea3ba8d04d15f2e86a68d84d05f1efacb86db5cad553657eb15ae609c516c24fa75d73eceac68deb12512605efe748c6632d17cfc4533997e68f48a72a13e9f17cdeaaa3c8af5d4cbacf594723d751f38729efacf6b46565026731bcd4b1fd1631ecb26ecac93602321e63dde934dd8dd9e6b7b7209b503ea369acb5cc7aef431997c448f551763a2c7b20dc8676095d503651b3c4af5d469a60da8a72e33a7987e9c698904985bf771a62512b0bfdc271fa03fca75a6129a42071de625348d3f26d38fc7bcc6bc562ab36d8ee631d3e6e3a4ebd88d3f2613902f31916023013bcc61d904d0b1f72ee624d84880f9cc67d9849dcc1bd0bb998f346643e6346623e63f26fd8ed998e5ae1dd09859da7cbcba8e1dcd3c6b95cdfdf8086436a0774fd8613ed21809a0630732fb613ee60a6573d461d946f397d3b0395aa7b26cb46ce3ead8fd983ea60d9dd5719dca2aaa19bb8e1714ed11363f982146bcf7dedb0498bff7de7befb5f736c1c2dfebe2d55f27b3fede7befbd14dfdbc490bfb2bf4d30f97befbdd68295f6ed5b62cacfbe7d4b80017b3873e64c0688bc1004073748d880c399af5d3b4c0933870918282a2c4c905982cd93e2d107a049e41547dbbc6a6e2dde1a67d0b0b6664bcb84116f9928c2ad3dc25ab5183547fd9a3aeb349fb75afd568deeee8512469478aa815446caeb1f2f5788f065413dc96933df47d6e8ee0800049233bf213b8c59b36bef0edc1ad1ad5673d47f48224f1277d6d49288228939be24e6bc0e0fe814db915ed16fe8a059c9ba78620f4fea30ea98b4b6d62e7ae5939eb4e9411fcd137b08559388f36ef5d56b555fbfda1a5b80fd933acc5cb21484eb230e4db2ae50bebc17f072d05ff9c4d8a99275d1c31808972c69610c843037ed7900101ee8f43b06d6c00ee653c93a761ab38e4da5eb57242b8d99ba91824a1c1d5589e2d1086e21b839b97704374bb7aca567e8a2571fbafe7a99f74979b1f8620efa34df1cf8c14c86502b90f1882824a27a37ccae444e9eb746352b670e10394b9c20e785283966fee7db27878610899c2950725c7892d3e36374667c40433c72c91c3529c568f1f98822a20e981436308512375b45a264f8c126492c8aac0c8db25696466865a9287fda28067ed94a228adb8700d03fa02258a475c6cd9d29769ca1a18bf03286891b869022c51a3642c423974c596b52d2ca078c01f2c44490362edc3941159a24a03cbd918202cfe30f777cf8e10e474dca32f4e6fad06f18866158bec0d568255159d6fc881fc01564b1a8b5d10cf1e52d6ab71a91d788fc56731ea26acd6b44332c9803901934daf741cde7a356abc5d039514db446b717ed9b41a3e6b823b4fca9132b9e62fc213b478d74946251a782fc9226a62ca9d7ce30eb2a8e7a086e7f14a3e2e8093cc230745dc51d857eea62541cd5592332d485473c7dd8631786614892d8bcd14a93acd51cca53a73b2269442abe7d472cf9fbed3b82eacfdb9582ea00a4ca57a76960cecf44d1ecf72ae39ea108d7c3bce8a1115b1e2445b37a29afc3407cfd450b1d966d35c05726dd8a4aa1d7588dd0c5df2ac3ac143ae8275971b1048039ccee9928ca087aadca20a2b51171fe3a7623d47c8b6f5f114c7eb4b52ae3ac8e495acd4338ed933d0ff851956b5909f4eaa2d3b07962279d66259cad91a9f2bc4374089616c148c560f1b83d0ff8c1e5c9daf38028ae8aeb1f2b79abed5e6bf4e2d1da47049e9bf524f3c591f2e72dced39fba0bfe8cf194bed9fab37d1de6a95f5b471b0ff801e70765e471d43fdbb7f5d52df501bc8d2d007c6af38c7e51bd4651f69f942a0cd58c8aabce426936edae55e12db7204762dfd0deb993c5420f60b44e406277d6becc834d8466698d54b0c40c912966861831c48e96ad1011f6fdf37143c5c2d77d48f592f8f0f5b80df1e1e5e9e6a34b8f9b1d727db0f0e1f7cfc7923f75595b468ac954354f6dfd3df97e3d76e80991b236df6c73d47f3d1e7fefbd17ac8160d7df1fbb7befc5d9fa8831362a6b8efafd3d35f1f73a79efcd5197567341dfbf2736fffafe3d65fd59faddb2503ca4c0eea2504c8307c403f6d8f261a9d31d61a781dd460f288f9dc4f8621ceaf0edd86f78ebcf178f1d742e6b71fdae9539c4bf16044110f479aa4317b5878de4f31804bb8b28982b985b3473dd56bdf5211fe1f7af4798cff251070300749c0924b69c28e2de3ab54e175947ba6155e822eb95cecd548d74a9bacc7717f9496fb654f6a9f4794b659334525b07a9d1ef38d3392ae377ac695cff297b1bc3f79f3ebf634ce3a807bfa34c6fd0556497ad366d7b94fde311e7cf1f8f257f865f7f3cda7cfdf1b68c7a57fdb703cf53acb73e5a1fef2f8062fd8d8940c52cdd9e7e89e6a158d483feae77cadab7d3288d74833e3d8dd245ed48375ce8a27617dee6259ae7b11ae9ba15f3631ae9a46f33c5eaa2f6315dd44e756824eaed8d64f392db3cd66bff786dfe14af00c6aea0d7ebb69a43a82f7ae84715f412749ae82b6baec11a98abfe32c59aab2e86f7c723f3ddc3770c841b682b3de2fb8e5da7d8fafe7dfba698f2e36c6c6b34b4c2db6990c01a5d6f22efd1db67582398b77fc01a65e0cdc2db56faccdb2f608db277ccdb7420eff612acd18f3706de3dde8eb346427ef3f613582315de2d62b466deb20b87e12f3cc86c917bb7167e81fb9818e45e0e03c7b9ccccb907a3c8839c34cddcbb20bbe92f3383dc2b0af2172e9a2c720f97816be0a169cbbd6cfacd417345eed940b72651ee65a081e77cc8ecad70d059500762e1440ee6a8173b0bbc347b2c72948b5d4fe62c88dce6a3d923ca5140bb9ee844394ab6735f917b435eba90d91b6d0ee434b36703f2153e337b4039caee7a352f57f8cc61331f7d458e2ac2666f96a306b0eb91ce62cc51446ecb51b45d0fbbcd7fcc9e0b18394a68d77b399117e52871d7b36ef36bf6827294cfae17e4e58b1c45773d205fe12e7214b8ebcd7a1ae428dbae07ba2d97a36ebb9e90978e81c770396ab6ebc59c856790a38e76bdd0891c831c05dbf57e7c85f798bd16dea3a76377418eca60d7bb6ef39ca372bb9e0a2f732f7b94d9ebd1d3b1bbe52802ec7aa5b360e1b0dc03f21ecd7b3fdeeb711f6f91a38c763d9813e5dc03bd87bd77bde7668eaabb5e8faf70377bd56db9c722f746efc1bcf7f25ee8a247d19dcd2d307b345f917b517447947ba5f766de93798ff498db726fc87b42deab792fc8550899389b6baf99366cae5d8579029b6b0f326995cdb5039934536773ed3f660936d7ee63529ecd59d95c7b69cecc239b6b979917b0b9f69849a16cae9d34471366ceb0b9f697f9019b9ba25c6cae1d34dde6dab149c3e6daaf49029b6bb726ad26f5d99c4f8aac3fdb8767ea71d857a25efb5a111583f8bd79563084f6751781331b5d44fbf7ad6b233a6573651b512d3b6ba4ea35ac29df510dd75a5ae67d3a658d48d039eb5c535c535c4bf47b67a373d66bb5b2ec1c9d1ad24516f7154e7952adac2afce60e97ef1f2969a391dae6acfabe72a9e6d4af0f59997588f2a45d55c60daf443df4ea144f95712ac9fcc583f9f8443a0d2ae64052330f9a2a5d85911e17f2ea95aaca383b8f8f0f79f5baa4caf8719b535efb6c665d5271d587cc4a558dd429b34a5528b33e999547f1d02e2b213f7df4b326fa98148b8631a9cf8c99940b69c24c9949ab50ab8aa33c154f415233233e4b685e9d42295dcca7d8f3e338d7bc1fc86d2ea13a05aa6f007bf510e0a8de64bd7a87f914c77c85724d451010edc7a7a79cc964a76915cb94ac581557c3545cf5555cf51266caa5e2aa2f81995ed12d15573d04ea22504aa6e2aad737e5ad5da55bb27695ef2bfb2f5ea253bcbd51747dfba290f3e3b72f8a1f9e5a5519f6adad55431466678446a2be347319056aceaa91dac74ff12ccf9a10f6deac14f3985bf0ba0dc3ac04826e45312b85a1db976725d1dbc26059e9f5723b8e590906734b9259691cddd69a954827ddfa8b1bd563b96a559cfdc94a34573c1567dd3a69d62eb3ce31ebcbac5b558e59e354381557db08519ef5eaaaca962b2e5bbc70f17909e3c30a43062b8b925153652cd1ac24cb54cdd32c3ae5496995b74e9fc48a83aa46e45435a2515523a2aa6a74ab39ebf645c559a780ccad5f20e6d63f10ba7512c0dcfa0948b74e79a08bee934ff1e53df92c7df4329fb55916e10c797859a65a15d76689cc74ce9829172cd3ad57a6722acefa9298299c4ce3549cf5eb215010cc14cf5febd7a45d6f4aea27d5fa1e2a123162bf8efd7c113ae8a19fbad7196374988f7e1ec5ce2499cffc6c9f9f1de6c71beb6fd01c488507b90a6fbf425e136d3ee4366f27573891aff0f692855be02cbc9d66babbe9edb5169ebd85b7135de037bfc0db3d03c7c033f0f69bdfc839ce73379668565aa2796eb868b7d14837a82f29d96ca38ba8dbe8a2eaed2e34307115573d67e2cc5bc555cfc0c4c0bcc0bcb530b369d2589816982b4c229b39640a9935156690096456ff31bbe27accd2ac3e336531d2ac3e9e475fc5ea61751d388add707d755c97cd556f6b52d29760337b1d04a6d98c52a5ea7350a97a21c24a954b8d84b952dd428329d5ab5254aa552aaef6a954ad2aae3259bf52e0b1f9ec3c7984f0f2a752adaab83acb6798270f9e57aa612a4ea942a9b8ea5d3deee3e28f877e6d4f0f2d8ba437cc0a1443f2c2ec0b763d7cf1592f10933031bca08bde57ebb3445829d6b0125162c1f2298af92ccb309f354cbe782b2b2b2b2bcab3a23cca6bad1244b06cb1b588284fddd75a15d65a73d52ba8d3e9743a9d8fde2f11c49788927ae9d56b1556e9b22e8fe5b346d2ae7a73d75c8815a7ac5eabac51d75a556b55ad55b55671c92a52d61d2c779edc597247ea0ed4959d2b3b55769614b1236587d785a7cb89abaead6f5f579b2e345d3874c1d015a56b852e245d43ba9eea74d5915367883a5a75c8d4f1d5b9aa53e5eb2ca9c3fbf6d1e1a21387ce0f74d4d02143070a9d25df3e3a52747a747837843153474a0276e4d869f3edb343c60e183b30d0f142670b145c76f0d8e992402dab95552bc52e56abb5b7d62976a4f576bf36d7dce4043ae833ebf5627722aa57b4eef4725cab5edd07dd39817e4317ad3bc168d7ab3b890e8e8e9d606ebdbdf4995dd1ab3b61077b5e1ebad3e8533a8d3eba53473125f301dbc562a537f980ed64590673a7d7d8631dbcee84bd3ad4d06ee64dfe72a7d143f701db95b9070b596e7a855e4577b27e1d6a681723f398bb5eec4ea18bdee4841dc35e59f42627eba23b857ec55ca3bb26a7106c72c2d7c9d6ecb5831e1ace305e4b80269b430ded6c6ebadee403dcd925164e210f3b9b9b7cc876d6a1827677895edc6396076a6867bda9070b1f307c730f164e310ff21eb3a1dd10cda7948d3de48c8816e453cac69f594f2dc88756ca46a09e1f5a10adf4112ff80354ae08a2f9c8dc89f492687c85d89d40b75156d884bc86bd56cb3d58343989309b90903739c1aed8514ced888682683ee5e84ea4cbbcc9076c67cb3d5808d57213d4d04e456e7282795035d387a3fe2b5beb45600fcd8ee15a31687477b5d21878ff6663796434dc2c386ae5f1783c1c954d962c47544b8ffb425689457a69ccf800cb11406e5ab00411a5058b0f505ab090f98105873f7531fcb0f070ac00e4ea8715863c5169c113450c3bac8499618a3ae11437cb04be049162e6496f0923742764edf8d1238a0f688c807185f44a26834f8ca13bfa804914449e88228919b24c3da9818a891b3543523802c48845770485453324ee8645ca12a8ac52fc60068ddf55d7efeac9851b28b8e4b1e2049a205220656b090b555255581883cdc4e815197c9488472f5851229a79216761e19725c8dfd7dfa317c4daf7ef8a1c2c431e0d58c503f7ea77250e9caba5bcf286f6f85d61c3468adac2ad85a32a6dfe88f28af88af867e5ea31c64e9618e32857ae6aaeaf7011cbbfe28b5d29433ec6186317ac58bdaaaca0cad68d72b4c28d8c719434054b4a0f970915377749d9f3fda342e6cf185709152f7f96974a0b54aafec43d19ad3541b7d5c84e5646d06ead5c9dadbddfda4bc95b3b6807c1dc64a501bd33017431f3c26c853a98dd52a56bad8b40fd8e95b420180504b309b8180851dcf451f69b50136dae6957ea6475dc0a9619a9a71182ea85bed3c0c9fa9192d4b435a077369b0dec0de81dce24cca2e08cd4426312b0d398037a877313cee63a1605c94749bfc966e3c9e6aa779e3c361b0fd0b103bdf3e49981d4426973a2cd75efac503f4b6ada44a034db44b04e9d66255b1428df61b7d570db468928383b5919c175ead83b68a73110a8d9151785e7043a0671d417a166a5364a18e17df536c58a1b692cf3ac5c77b262ab71dd319d234244d14ae943b3840f74d004a1050226c4dcb91345431d39547820151fa2958b04ee46015a3a4f5826b0833d0fc3300c432fab8c30bc4fca30a495157793b8f7e22230ee827eaf5ff0a2406a485617569a2937697678d2d56bc38605345ae06f4a1021ade2250b657f79cbdb4479c12a4a596235e527a50cd4cd64c5a9509ea45873d4a5c420a5ca9fb7ac41ba5a4a4529ad4ea9c541bfe65b716dc3510a2dcc698147edef8bd5860b5cae93a2ebee8b2365cfa9b98e82a7e644ef6af4564f35d77f962088b50f410c9c51c20a95540c2870d99db537222ee92d59e20914aaae8ed85171dd11f653f73174f85a49fdfd6b35f5974e6924653fbd2e5cbd5c8872e1e9cf9acf4df540f983b2038a114ba0f83005250c11285ca4a0344922fbfe4199da32f6edd48de0f6e7ed9b5e1a0b4f08b949dd90c5f78f851f0b587fde667842c38ffa64cb094fae9e9e44818259e0f204872747509841e38327bc232b2471e44aad1084d4950a557cff5610b302973f7538c905729321d2171983c9bc7d9499743733e96eec1803cc9883a6e83393ee640710a919336326cc6766ef6426dd55b36d4e141d3b688a7e4d985f30f46bbe9c344ba21387c561df6b15677d88b7c2556d046d2088fd453512e2b21e63067eeb254cbdbdc1b13c282fde925c555e6c15956dd371de3a88ef2dcadb9f512350568f40598dc4dd5841ad1388df4eb8708c5d473a46073423c873c5449d2d4b84817265860d982d3250698102081f175e3538f1d204eb91d4a98108106c9e5838810a4308993a73c40c91ddfd392133a32ddca75f93a7c7e0fbd7448507bf7f4d8aa0b93d6c6b35b5379cf9a2e2e80834aad1dd65057dff986c3191f367abc9a11cddfc9974eb52bed4fca94bfa528266fe4cd2d1508e37fc594be202e64f5d2d862e7f26e970d8f2a72ee90c963f93745aa6fca94be2a1853f93745baafed4258951f26792ee86237fea92c0a0f06792ce27f5a72e49cd097f26e9d030e1f1a72e294b8a3f937463bafed425a579e2cf245d0d4cfca94b2a83c49f493a1de2fca94b82e1cd9f49ba353ffca94bb2a1873f93745825cefa5397e403993f93743360fda94bf212e6cf24ddcff7a72ec98c973f937461b8fca94bea61cb9f493a32577fea9276a8f26792956189d59f6252159740794a4aaa7066a04f7fbcdd702fa807ad03add5889c7ad0583bbef2ca937cb2a4510f3a871d5f79a529520f3acc8ebf7ee9e3fc4894d6ad63ec6fdddfba49bd1d8c81407f6c5066e7f57ac1eebd972ed11748a9122ebf2546b4b2aaadd6caac14943a1803e1d545203e40ffcd9dc54e61a388e216c5916f86016c3e6b6f71eff0d431eea90a5a54447cc76cbe555c9ef26cdf8c0f6820c0563346c551194e085f00a108c14e7a57c993ad49a87ae86a919eeec8ceb8d926917a6badb5fd2a40f1b1ef9f0a72febcc17aa8b824901dfa01a9cc45a1928845cdb622689cd15e21b620d6e303ebfa23885121bdde134f5ea0909381143d5049a105861f5fa03081cd7181073759acb2802409da8245052fbc28587260e1a219d3e48e1a3b4bc6a8c922048a206ea2f0443d099a6d1962840d5a9290d2c47767083a4594990a026a85263e3f346419d224895f90169a006235866a880a3df450d50408e9881454b44c4981b22601509858f383889824779c10dd4033258716be440184120f5678e3c4af0715dedcd08456c28f1e5a5548f020314502d24091022f081d7c1461c2c4023030bcd0c389154cd191c3011b9e9a227200e286c99226a00e2b728cc852044a0a893c3854f12184922b2778c9418993320f0b6cc63c05e1f1b3220122a898045901c91457123b64a42a8c0d73b26c5d71e0c312274a9ce061ce122a5413e01003d49621904ce130048e8fa8272431ac5982aac98c7493268b192e3c3c4ac48ab05242448a26e20481e4678c982c687e49ece092d268d2701541018e0a461c71c4c9e8e44413659eb4f1610a991756000495d6173b56745218ca008829425841e2491e2592f870b3460e9316de5c19b9208a45ad052b3c6a7867a4927852a6c7112867a058028522f8491220c45cd11066892998946922830f45d060040a112742750b92284f576c9454a1800c528e1841650c11572830215b4b4c0b6d8638a2cc8f2c0cb0e242922d2c4b4429990a8bae5000e24a1169aea4f4d8a27acac22407224c0c51d171a85c4922093148764c21ad2912c788ad3149c608e9090286168638e3048a136084aaaef88268c2862e4e82d4747cc963030c2eb0c1610d9808fcba7c3864c5604607a9262da2c4fe7581238313407ee015d16f58e841cad31c1bf01401c4498e7afdb89945e461e287993b4986ac11418b0d46144125874a4914ed3561aab8a9d383480f282228e3cb8282c277e7085413a7400f364ba2d810a78834318c10a9a3250b112b302730914521d9c10a8fad3339b8e9803703151588bc61e3820fdb093c7a5841959625a23cc94eace07bc383181690e8355961f1a8a00c0f5e0d539288c346070b62c844e941091e6ef8ede893bdd3e408560a6a6c5419b6d63627d416afd8556ff5f6f447e5838feb18e31b365f603f6f8fc3f90596cd55a1c27abaa3f2595babb89aa34ed57bfcfda3e2fd59d3adc18285f6f813d7642b0729a286484115d99dfecee369963344b4e441e18cd4133b03e850a5840f4d1a1e4a762fda2421d2840a1148b4b0a3ba17bf6354f76276749541c2871d98aca049a53b7252a0e0a2f543618528bbf6f6808c97835eebab127c24af171a2c776e3093c50e103ba807c11f92141e74d1c38e3556a2d8c2866b07f26c966a84942329b71bc298f919416344cccfc817235ba0fc49fe8c18c1469e605d45e414815324eb69111c7e45b61481f22bc264fc153152048a4817d753274799acbbc856d1174aea422e94fd230227d4c2fa53f47dff885cfd49f68f88d58fdf3f224c3490c2530a556cede4876febdc5dd43f2370be7f465ae0092dd713e0cf881dcb65a9fc84e07051809a32e225ea6e81b2d9662155a0a60871c1c714214e4e980206b9f3b3ef5f90ad3f7557c66e9fef5f10adae7dff82f8dafcfe05711284d744df3fa938a51a502a8c5495506a498b3afefd03b286c5f70f081721250d42ad4aa1ef1f90210f1b654b34cfdb6a8cf66d3e992c0ab6fe50a0a24a7e3fbc70f9fdd8028191ae500ec1f3ed5350df1947fdee229c9a1e71a88a212850994aeb62addc159efe86a4407f437e50934a29fb07c4eabf7f42a678ea24fdf9fe095182fe8400f11261325b0dd8b7d7ef7ca2e07f80d4d629a0cdb58a2bf20427b95144a0ec8ca81f503507a37840cdc050559e6ab6c80d6fdf3fa820a0d4884f63dfa88d9aebfd0125ea85efd8cdb5da87f1f2dafca2e61b91b2fff682a43d7501e4505af0fd83daf2f7fb0775f567adc280020a74abcab046d5c7e3f18cecdabbad111de98c6a04aba231c205420055794d9efc9d70e5cfd63a61eaff6c39cde543cd9f3de76bd7574ae901ee53a392f6f4698cd2de1ad1aece55dad7c69db5273ea3d6a200410a86a2188254cd0e9452300cc1300485e05b1f854b6234d5c208c09192fa2d12c5b22cc273f18b1a0d1874a10343f1f5124310bb4003861af41badd6124a138a391c088a2980d106a25896b59a7b0c32e20ba7810b2f58064e6023d98d84c1b71bd53870516bce3236d205df3493b1db0625072e84b66232f25619b60551ade2c694d4cf9a6c969bd8da1abf7675d1908f59692231d2c2488942d943e9e8f343762359f0eda2589617f0f04323c52a83aed0008592fa59d28088e8100af51774010ab2ed80d5022bfcba65032282540c85d98c8a9a908eaa2654dbe088032ca121156bb2b2c0af642acecc6188c43cd888808e8003870141bb3a65731b94212271d60a0b7ef274757d97290b58f8d4e1e2fa92070befd9c08e9be5195d2ecdef7083071cb8f8af5315c7811b33cfc460fc66cd9916031bfd9cfde9636e5b96b59a3b0ea7d31d1d7d0c36b905d98d24b37e1ee90080fbd37318f79a3ed3620af02f58db576e6bdd71baa2205adcc86ea4581a2a5f6f45746e179046350f9e0317a25896b59ad9e4020c48aef7194aeaa76390016c4d5611960c70641ff1a7b7cde0abc3f9db0cb89cd862ccbec1030e443f5d88b96b59d66aee385c949c06a4188bd21c20516ae0822cc083615896b55acd8e8b175d006fd14618e73a75c37b505d84b92bae7917559f51cd342f487ca62c22db7ecdcf9777066d0482b9623f8d1ef47383b7fa9aab9dba0529a9c320bb91ba08c60b182e34c8c1c06580c105306e2d606418304c87c1c2821544306c432a846a308260c0800144fb81e1d353ce60c862248c11665f30441821886fa595278311ebf7fd1758c8d4fe44de5da68dbbf8af0abe1d7f7b8d7517dddbf9da9d8d2d40d6ddd59a4ce014d003fd2932e1109ff606d871d41e3b9eb246b773422d7c15f9d8b105fed6306953fbf82e39f1de3e554cc580ba0b339eb2b9ea2e7828dbb1f51a0b21006f7dec0a82180441aa42667377d1f55b6554dd30f6ed84f1befa482b14edf2ed974b6751ba3bf3e72bcb5ffd8aa7f975d545d501c0654da820295619b571d81b4c416877d4634ff3c5bb9192a1597754e6d4573f85fec43d46986773f5f26cad86799f2bf0d6f35b6a6537d3b64678d73e86f85619ed22ec8d5fb10334112104e0411fdbbe603058552103737711a630de14235d214c95a6d5db03260a36128e7a4990a93e689e5746750b92167452c495c420e07bad5d6267f6e2b2cab058845b033b76259ccb2cd246ea5ba3467a0394bfbdf0ea97cb574ac3bd8e95b08b37f7ede98a237bd736168215cb8b7337eec40e8aa0025ce3be12e68075ecbf304b1ebb8e1f2f596335ee873e5e7c7102689ebf99886e501d8cdd24cafa2751bf9f2f6ce6a81f2ed9bf0e62b721dc5c823c46031841bfc6aa572a068bc715428823215eb75a4b8a179b295f4fcd94e2533365f8d44c095e33257e33e57d6aa6b44fcd94f5699992fafdb3e7dbaf99923e35538af776db7befb5e6bdf7de7bf1bdf75e7aefbdf78234dacf91bdf786f74d8b5d54efb5a7ee4d49bded12cdd3481463fcba17062bc10c899778b5bafb14c18bbbbbbb1bb4dd4855c4185f9ccf7bef751b8aa01886a6881dc418bfeecd23c6d8cd7bc33ae3dd61879af5eded2188af3d753bec9055713687106431e166ce1b25a4a8080d51658a246bb0a234f9cd99cdd0c50a4e133bbc3077a648b11aa720e22bc20992264776a00d3dba50190206227468e0fc59f365fd29d688fc66b3217aff0895b783f9081bcd271f473bd1a1c4ddeb35ba689a309304b606f4eee54deddba1407414bc9c83bf3cde08d4d6d9c62bdf6e24ea41ad94cab07e99eae3a81f45f4b16f9ab27f3e5f0d5c3e2e35f06c6c84cadbbd1c7c9950e24ef46ea428a29fd6436b5f3ec3becc36cf13fc0541500947fd9b45ff117d4615f34d42abb529c5ef1f982e20c040f10207a60921bf383eae1e92d84cc30d98df839982e436049822486e435c9fef1f981d0ff4fdfbb2f5a72eabccc5572f8a6595715eeb621947bc59a9661291299ddaaeebf88bf301facb2daead395c5b78babcf8bc84f1792183c5c5de8b310886e215455ba98841300c45f10592a128be5e30d8c885bc24692b2545f205838d2349c6e4c8ae4c662b9569c1c891246331996c4683947991f9665ebe7a5992f9ea3d583ed7c7c756ea53a7aa54353255a5ea920a05a74d1c386db6e4685dd12a5bae68152f5f1d73796a457978e813e5e1a15214ea04368b4cb7a16169add6de8bc10b82b65290566befc5180c6f18da4ac38b41300c45f105bb3098ad14168aaf170c368e64ecc662b6d2186c24c9584c269b95b72c6da5654c369b95654f8fcfcffdf9b195fef8fcd068404041412a6ab756b395d67a461fd29a3f443fa435694e23adc9741f680422ad79bef8ea41b103d0c7b58aab4285ad54857873ade2aa038932db8daf722aaefa0130949aab5e83a0644a5ce53aae82a1545cfd1343f9ea953eae5265742c84157fb1a05419d80b00045623017d754cd5487dc50199366daedbdf17327807322af859bb8a47940318c56e51ac06182f1cf1bc57dfde1edaa96f07dbf1b5f5c269b12afdbdeaa2f6ea9817f270a9bd6bbabbdb5c43b1ec45c51a5af0627cdffe5d53c92ba7bc770dbd724a4abf526bc3cb068b7ebbe876cbe8c6d1683f340b9257ebea5056f3ac91b55a59b6d37c5a7f6bfd2d8b57b2e6d5a1a46eadb52279d79cf725b3d578bdf5a69ff1c6eeeeb3bbbbed69adbd6bfa524b7677378f1fbee0f0e53744f9c507c35b17bfccf065862f535e967ce192c3971878e4f0c5ea4b150e3718b4b6142186245956bf35cc50c49fbafba5840161cd04b1e5912ec611172e56678d441b03551575a5489672aa6867b01242f1e84517e348862bf1fa66a0fa5314cb19a6ac87e6ad0b9b2e6afe749f0d23f5919a21c8dee6db45717e3454796bde4a4199ad06fecbf4f637c39cbf1405be2b8229edf7af8b993fef9da1acdfbf2e64ae6b39716f755d74b0ee3bbc75d1b6af4b982e612c132516c11786c130c63886ac570c5a332ac618638c3116b348c600e7318ea188c7b84ba35d22d84a015c3aec5095c5fb614b972bb04b0c3212c2e47027c9133e50d9da4229a59452fa7a1509c3300c43afc160611728252c555851400569626a77d63e8c41ce87610c4b7c08002e6dd25cb103440f2a3b2d40fc7e4794524a29a5e12b9ff47a29c3b0cfa4106788224bb6e8b0a4e90b798428c3a34c992670e0611782385f1aa82e88b7586981610b113cc4f2fa295aa32d3f44e1b894fd341aad36f4fddbe27bf1fbb785cb9fb429196eb37a2f894372528241aa7eb4b7bf46642d9212dc0ba426e5897b8b7b61d5f4ecf0789404bd3d46c559fba2e6ace32ace3a5255d9358b339293b22bae2bae2bae1ad5b2783cde0e4fa23182558c58d60b58b817aefe6c325a2f3c59c797d29b9194945c219cb16f484acaa3b276cfa8b125fab15ae5650ed26a1d69496954e69e34446c7d8f5ffffba535ba80c7cc1bf4635ed22e9091989467f9d5faf878758bddda0c822f1f1f43b2b48ec4a4ac17b04665024aef2973575ce93df99a3de679fdc74bf3bc6e4f1d3ff3d9cff51f9f398dd59865a599fb789995aef7388ed5b8dee334463b40e936cf6633d367a40135fd8c76c5d91fef07b23d3e3371d4efa1f5e4dacf8d2dd1bf31bbd6b18f24098b810096e609661cf57d1ce72841ded628287bae33efab8be1d66846cdd51e25e58d410d1c27e5cccff6a98183d4a43c75d75a70044dec1663876198eb62d4c7b5eaea88c4a414ddf7f2ea1fa8325e3027fd5e985ff33ecc613111689efbd6145be6336c2c9d17a8b4ea570c4339c91845330218000000a316003030140e0a85a22409f354dc0314000e7fa64c504c184a034910a5288ac120c6186008008410608c21c620e6e63a00d02f0f6628fe4f663dcb2cf2b3af3207de05498e9699d9778001f217d830512723901306cb869636d449e149918a201820ed51f456529aff2f2e9f5290f00dbce8b22352950d0786f903d637abb0fff842641e736cf9c0541f3338872af34e0eff60de850722d4407335f3b33cdb2c3bc778338c67c935eb776c5db453fb35d000016ce95456fdffd5d93cfc502cc194e54c3c99fe462027bb2deb6c7778a1a2828144e7e372dc3f9e89d95337101e8989e5f8e6528ef8772343058c6b631c4939edb9cd82f69e977c16860b601860fdf191bc19150a36e6b4b426b8134e0770d4a105ba131dc63560daf28803f90861c106da250a5eba2e71dbbad49c7045176598534010eff2bcbb7e2457df702f5290735373c666246780b6f847b9c22d1902daba78b0bea6bc1402fcafa03c5685da295fc53f958bc41ac7270f4c4d60a6f6e9b4beebba544a86beffb3212d9b9f4c6a3059f1373356c0a4f9f4cd59275e052eae2dc9efb3e76d8a5760797f62d14a3da3372d66a2406b4a7164b917017353b10122efb7aff10b9e8eae5cd6ee2e7961ba5dedb7bc0de788f3581d8defe947f45f453cfeeaf944a6b18e47f92a2ad001837c08db32e49ce746823214562a69a7f0b47f81388fdd242ec3a448ae6d92acea08f7618387d2568bbaa492a74c02eb2415e8561a311e696ba6bf6147481e8c299032e2531f5c3b5aadb86c2991c16c84f0340724c1dfbf5316ee5115341b5779d02b32126e380551b81ce828efb1d3c17f7fa723ea7bd00f7bf02faaea34d4f703026ee48f9be7ccf34bd8b7323a1363c32fe568341c484011bf76e3ea541c44218de3e015976bde6b5fdf43ca3065df4fbd4363c05dbf722fd706ae7555207a36c4a4719bd54e6b33ca7eb6b7df49b7340381fb77542b9a227787d3f02550b5f92df7af1c03104e024394d619844349b440466ea55649444c65a3251f4183153a3212c2b2f131094da15f565078b64dbe27325f840e2057d7809e7d6b6bad08ccd46c5345bc20acf29c701d59c518d84eaa3715136d9dbcd9346dab9ad850d40f04e176fcb0733acaa1d6ceadbbd2f8dea50e52c0e87a6248d233d7ed859cbd6527e0fa25fa0a90dee602e9315036e4590d0253506e33fafcf88c7a2c52be7f6c56d03159464453939c803663336784822c2b88c3ece3b063edbde959a2bc7e5d527288cbeb04e8b44c156681d07b86d708835e24440dd542a403e84becc903d377534d90988224a114b298919ac8660a14a7e9a47ecd4754193268bcb0185db0b4d7bb998973d5841fa1da9316876de27abeb10b4ebc8e9d5e5f582817bebca353a117d3f7f433ef3898ff47be9fbfc6791225a9484f2a0eab9f30b1e7368114a1bec66952054ae7b885ebad8865c4c50557687351ffd59c74f52e93416129ca9805a6746f1690d7ab6e75db42cc610a0660d7032426e0613e6cc1841cd82ba7ef8871d0131649bda1c5e663dbd3123ba9bbb679b3d192875f6d20136e80d4484f04918217ef409f93668b182693e7e068e35e0d5f9ca84fd10355b85182baa184db53465a53241716625bdf3aa5d5955a8627601cdcc7584d56535d4b7b3501e70db0c27977ce1784bab5b7bed15d5253ea77281642d8277940ae65c8f463a5b9e904a7930904fa08dc6015a304c04ad58b37ec9c972dd1f1be3ebf56d21f38b75a3fc5c2a90bf0a509750bd79a99922757362eb8dc1846e52a112520e30882411ed235874bce2b62e1983b39167073a3b7027f9194e0258ef4d8f97779eaa0c097a1c7de58228203031405a5c1c46ddb021469246244f61b7cc41dfb26731496f25b3803ec342d3f0a76ba8457f61cd7aae1ede0e10d61f071ca11c979c76397b7b644081afc3c2a4ffac03cb071a246728972eac0448b8c5b1ce28398461dafae565f67051cb39a73832f6534d3e20632de4a382cd13959bd7579beec91525bbf980fa2fe8ff20021602ce7c9ee03697a4043b6feab85431300c27d7f3b6122ff8ee83365dd25b08849c70a3eaaa350312286a96a1059e358e38346de5e8b3d12350ded24cd734a53b5a207275b0793efa1acfd86db90f9fc890c57aba3b03bcc8f5c019cc5f6bc584230376448292c4a1578735a7bf7dee671bfd1e6a123134823c14064f41c288ff1c360e40e37f54b09f4974ac0652b81635e07c8bf03d7b0a6af84cf07973085d3ba607509e5c6a9b4f3e329f54796efe99a3e3aa1532dfe72676918f4ad1cb688e2d0b51845db1b242137534104326726cebd6cbb9417d1060eab48f952a6dd64a03fe8ae68366a590cbfd810c062678413f97f7899788ef8235396f46a6e10ca01f7ef7f5d05256a7da26317b3dcb258d4b7651c58d6aca61c35d64f163ba9184d95759f57e398d93158683238bcf93a47bc03b08d485baef1688c2c1ecf65ff80a7b65c83bdd0cc83ce9ab8ff2bbc4aad31a7d5639e96165f13e5ec2b0d67d3465cd421b0495d0705dd8921402d0df71332122c71456e819b597409dab82048e684d97820b7299a5971525731726b751263935db05974c933e2828a2ab0b586ce17545df097abb3205dfd6f7408396a6b368a5ca130538465c97d784853686cedd0fdac5cce05a21a16ec0e65545a7a15ba637821fd415cd0fde1045e455a99587c08f3d0600d1ce919f803a243eab7ee18abb58356f4e6c2f76e3ccf8fb9f0442ee1d0ed3df7972fe2d57e6a0862b5bfbad58fe6f90a6a08c3097182a020e2e45ed1f3cd4b40db5bc0fe5264fa938985945db47a243f7cda9015f61e8684ed6cd4a7009dcf2d50583355406a9700790b2b0e8a6ed4ebe8f168570bfb182da75d732e2b7b95b40c21a603012e4595aed63b0821f79dbbe580c7e7f8b1410c8c2a88cb87e1e2f5d5d79eb730834a98892cb9337b4196123cafe97ace8946b06059833815e6029f964304c923f409b51889debe643db117d7e0d073627ad84ef712fe5e6999f54af81cf193371778730027c419117168acd3c691e0ca6f2b42bf651e8ade93a45485d9f378a4cb70eb7219387f9d9c18e2f4eba14b116e603174e3f50e6f19065a2d09aa86583639e3ef842f7c3e41d8500c35fe38ee6c5bad57dc9ad6ba01dee4b0298fcff38feecaff2432d6503e2c5462d1ac0c9d5e34b7ad5810160474034c4f90c163e68ebfea8731f07c9d682ba832250f8798cafd97733b5edd55e3285fed213f50030824ea5329409b9cfa6c2c070c6cad777bfe1f367c89b1855e32896d3a72f731e380bfb598148e9368a0ccf8b871198b3dbe60842d40b2a6d2a181ab8dd9f1faa76516a0eb0ebd06103319f387dff194dfd91743003241bb99f4706feae2826e5f6030b402b3f757c42f2be352566503cef6a0349d9ed96cbd27b02400c5c750e2f9ca8e4727018aff35136c46f07247ecb0ee432d370743d37ee83e37feee20ccd1103231dcf9c313ccc584736bb99bf34f476be212f218041276838459e39d2f87cdcada9d713791d30e83025d761fb882264ec9ca025821d680e6058679540ac983f705230d84a806dddf70d29a6e729c4b9c2dcb6a9cffaa05a8a5961ff85c47736417390f063ecf80721973261e3bc37dcbd5a172f63de00fc10996fac801518eceed60db19a9c9410c0d9a5b544d701d3480dca6bc4be3fc6dd02e866451d89f38eb5f81fd9a1ba3a3ee8d10c03c5c8b8451a0a6a990150cf5b437733549d1a92f3009bba491ac7b05374426b8310809fbbe3b149cb2167f80370f477c3ca4faaa0691ec79b05630d20ef4e0764a81454729a5592881d59b9f9bff01cb169a3203017f7a27ecc9eba90eb82efcd40a134dd521c33c089e76c3afdf057e410286d976df5d78aad852f07ac016c67ca12576bef27d90d7446b38fb424a8953df2fef9e9ac0c6d91f7622fbf6aedf7af15ef859f6eff430b1b8fb6733a0ea40775faae26c48dc9dfa0c89ee0135f99ee290b10043a23e22453ba0a980f9bad6a6995b3a2945ee110b9b1495843f2c5697c61f463e2788e071269c57a7019b31ef05e368e1dceed0ced29d9b561f1ff82043798f6a09c2a4b3f4d7dd94800ff257007bac758f10bd777697632ec439e20fbc6d89b5a7974472964f3f507dc6ac955e58ebdbc6e4bbf1802348fccb1161584fbf5870b38ba403aa5b3fd04e0d753da47d592bc0585c718b968c54b1955bea62ffea0532364677631106dfd7ec4a763069195830cb15a9c991970f37d9a3c9e5c182300500a44f39834512548d64132f40e6dd53840b25552bd7e8d584c6fe2d10b79dbb8935f2833d03f8bf04cac2429e2b8b7346dd5daccd0be49c07cc602fe1d928b2b83f4e44fb310df47d49cd2d6f5da5859cb3aa92812bfa8d3a20bc592a93b6d94b15ff6636026abc06b8184a80bd860efe8561fe79c0044aa92f4605d85ecb82043f5103f707be2b342597de812f54494d5978fff4ef08a00ca78c6f1dac0cd67a58411fa581049a84f78ecbfd24e8be91f92008d90fa0dde13d736cf2b20b14889401cd539b201303366c0145cdbba0d9fdcc936c970f683eaf96ea7acda96cfbf5c74b83c0b7d78420f52b882cf3076a74d653d2be95dbce127607569052c3e7f2ed168a5ed26d80137f5217197688566387fad3db31519ff325aee39e1377865f097edfa63d62e4ee67401abe0fbd05bae4e867434e3e9fae0d3e65c467401abe0fbd05bae4e867434e3e9fae0d3e65c467401abe0fbd05bae4e83d57f49a2e09e47806674424a613d9010ac4d4cabdc100f59428eed12dd8017de607c81373e13d77f1e31d9b390ac7f4ffdcaa5de600d65bb21a4d2d0dd772f9f0a27b1dfefffc9ace53437a82960d734d33385bd2fa6f905a8bc15064879ae49ec1ee127c04fb0e486bf9c13771129be16c24f5801cad86072f972a515ebade409e425b723929a2ed21223e2c37e031fbc319b79b8de88fb6c25fb5f5ff87c1ca18e5a35018d0bbdef2d928a14de10fd1dfef7e5e0d8fece61e6623264bcfcfd2c9591573b9aa931bdabfc9de3c6a5aa847b7a83de9a81d0b50015bf748bbbda368529882df5d67212b4e230cbc00d357a7a3ecb47c6ba2f30a74ea6031da2b10f68e65e8fdb18829a6282bcc18c39d292a0e3145694da2b004662ab84c5cf58accde0f6cfafce3ef3c67bf1dad7c233a324bf0cb1db4900b6fe4b72449c4e537021adb266f08b1f99b42b7313bbcce2a7c0a440d07aa14fbce95ce84c812161a3a66dba03a5b70790a233d5c7691794298eb24927d51d81d91871d7188ca1f429f64fde5ffd97e99e75f8ae98b769966ffbd89e05fdee1fa59da9d9fb12ec319cb784bc109102d72b6fee325aa48c58079227909055aec4f48e0f435590b427be9f4b0ca14ab114047e789ef900ab7adbe2c7163e9f7048de74e2f11cc95b9f7935c1d681da932702d78d2fab830b4152afe907fefd397330ebde9bc15406e9ba140b16ba3212e663b8154dfb49e73fd7ad98089973240ff37a7ce52d2fba9c0b5cbd4bb634bed5da3d44665300df1cfa0c30cbbb0b566df748bcd724655f8810f4ef0f15ef420f9d6b7c2e17b52c00c3acdd424d099374faa549116440bb2d699217d4c703ed4ef74a407b86a60ea9c9c50da93f68fb6dd9144d35fa40ef546ddda07aa4833215a2e062a9d501baf3831bcde74124c4363964caa29cac6f4ead083b2fa88cc9d0f1866f18fe6f134b059d78335684c8057b4251f6ed23cff0a7499c40dc707b165430e7d41a716f2d799095b36e015d5d9fe825cd5682a19a8c4445a13c1441286315c6760a87f8c1bfa590ce53a41c4fd8fcce51eeafbee8ef6fe32bbe4f0219091e7166d961cd4db631bacd8de6e2ff5c8374e2685bc5731db9b81adfa778239d68286db92c7cfa5bb8b3bde5443d9e64113d79a5a823a843f4fed45398c49c2819774497c0f456c7f4151141be7a5e9b6c8bb9c2d8dea9569373cd5b8af20012ec4babcadd72f7f2f4f29646ea2c728b58b792fd769d5f423bfb5afba62aede71a9d6fa20beed612da3e087124006b00638f1fd4b336b0aa87bc234e580b84cbd8d6d8fba5ff7632a933c38d49d6199650c9b0aa42b022fe10a54388bf561ee9b97e727e1aee0eaecb13481aab3394892a997b4d6b5d8ee3c062507522042bae6c18b931eaa330b823b1023d3364c48d054f279bbe9d933e4e705b21e110e005b68e07e610b7881148d6a76ba42d2ddfceaa681b55a80a6b7f70940b6ec0b25d062dcf142dd7a36c909fed63b684801e142a9af3555b7ce585af98cfafe1c77e4bede7db4d342a15e1739b57fc962164d1b1956010392d1e2a10456ae4e7e48f7ab1599dafce20a9ec01da48499a89e12792613e69dc2727993524a1bef2ab81f012fb3107643d51422c202610a1a1cb023730d56b31a37f8c46b6b6129519b45f7cff5c00616e477d0c377f81d55453773e9757635cb90ce52d80a76c39c9553138d7244387db211f55e868fc79da5d6f6fa80d09f561538b1397257216f71a5183621dbea5e35800b0082199a36d1b831f900ae78b61ccbfb32ffd1e6127a992187b2749a38de088f46886e3dfae6b25fc0397361fb16cb2a23df8f30a2c1b07183c4f2d805149de0b8813e41dd59e60b257c927fe5291b0a4d6c0dcbaf1edbcfa2a5e25fa02e9e36fc4f3a85a0b5a3dd73398854c424eb81f62354ebd15e58c381d499c9e533acd86005413568cfa39440e9327fcb797715e2571c2207f362b16c69cd556240e12a8a37a24e94752764fe693d98337c7567fe9c642197e4a37b231fe00fcc4eba8007ad5a3acf4f72634e5c13e6d9240afe1d725e1d2b9ed79f9fbe3170a77b637e0dc54887db3f2e595a30a1b4d7d661c0a89731a7469fc88bf1def88e7eee9761ade6d199233d4f41f609e6f67b96136a652c448f9dce358cbff35369745e6ce6578bffd92168f2ab91e735d2503cfc7b8e1ef3293e0f09d9d2e4c5588987d868031836d2d63e39e8f16a7248c5ac599c9528686a97cf19069f0da8586a9dd02f6e9374f486e4dddac473b3f3231cb1904c89288f366fd3d101108db469ac5b6f64b653079a7c5cfe9bc4b9e5b9fb4f577488048589313e7b94f0f073f452bc9cc93662cd2d7eeaba488d400bfdb09bc2e499779e2bfb2dc35b77ed272b82af7d8412d93aefaaf40d811a01a5ebde3ee68e3adc55c3fe997b9b2f19d87351005449ef769d2874463be90ca73444d45b61f71299742aa18fbd6be8f586554db3cd14668e0fbe2ed54e40635d59c0b99331bacb0aad34073b7eff0601c87b8daeb87bbbf457bfa432c6f4e5e8f0073196d05e89b760a8d46bc554cb547268e7948e5a00196e6588130f6b940093d5fd9c757afa824541e58057e306049da16956e811ee3cf72033d6a7629088571c77d8c629d29ad47a790a230f6106d08c081c76ea46eb692404a17623ddbf264e051056115015591eefae1795176f62afdffe6581c18886d12b014df7de7dbd1a7f88e1fdfb559a04213ce6869b724a3b313752aa012e91cccc02f4575118a4eec20c37ac2cc6752f874374b1c64bac3d0f6e6069f2d3b2a0ecbec6bf2a6da08cbd48f41a6874ba87ed35bdb2aa7c656b3155c8cf28f1265110a34042c3681d0a5ec5d918912f43e5a5a7e9c1a5a6b1956c7818b3fe59404d60038f498b6fdbf084b4681814a4b57b88c6114b9595699582324a12c4dbbc4ede92fbf28fde15cd54b646d68839f9ddd6aa689bb4e1182c335915175830be7f1bc5a1f5e5452d5360c496e75eed11873c54e740f55d479c5a3241dd74840d31f427945b7a2451d57086e70b7a701cc4382b332eeb1ef3b8a90e5149d310a52128e37c0439602a3511368fd84da029b779e455ae05a3343cc5a7b7fbfc2c5f3e4bb95bf13da8bc432306adfd12d56bd60c749c84f1796f472b5c6d106a119136b3f6742e0c90e7b1e1827c9367195b2bcaa83a1573d11dd4c0097d0de395a901f3892aa830589a8ea827f24cb094c5559afb57f3ea626f7f239c500b10d09a777522ee1ed1f7ccaf6930692abd3a349d50f819df1cc7958f406ae5fb3738ce0390cd763e1f79d4d251b0d851386becbf156508ac3da591b5a9a58c176a518694db4d3c5780f2b98afedb95a87565a37813a19523efb56510838f2c14d9ffb444c07a06211e5cfe7024199e2337a0a6cdc54c42d3a2a666646cb05a0745cd4747225bb60e87e6c6b773eed0591cd3ee82b09309a218f37f2834b6e119e2a55b561c880a251af4b759d7602b420a8662a8257c74adb2937022f1c69bd45ade89c480511389549cdb7d053e14e0afaa5576b5266f939cb607c6374e7fe839ae069cc3c669a8ae589d040c74cffac629f6c55467282e349107ee50678af8b3558e930248b591f9348ad7db9e56f059a4e0639920f80d90004e2860deb94ec34f09d3ba343dadd2f99c5861e654e147624ff9d6d844e444b6656dfb12f14ef52fa429224171b918c8ef2f6011775002b316ee4b9997f330355231ec4f73bed5b502c2743603b108be41f27000f874c79a3d784b819e8351c7fba711f6fbddc54aea1c4f53d063ceb6e21c4966e5cd86f125bc2273aae138f812b9d1f36dcd8b72382404e03c18fa0a400e00a9691a2a66e16a38e8ee063887afbcd4b22623124f3a8aedff1bfbc6527c50dc24f0042963d789e085a6c579107f646958f94e4c74ac76fa56a5969f7b415d157afa3dd653bc1d01f91f142c8157c666caef210f84adfa3dd9bda8cf807741aba9489bae6af0a91efe7c4911df6132b9284f863acc4bb22adfe1a433e6a685b2e6de274c25f97b031b5c15697bca983c24d9a913f6103b907f635b1a98d425c4e81f8cf10acc7814800eb17b408d44ad89e36d9ee144e5f000d62f1bce6dfcfb4ceff98b07cdf4c287f4d0d9cf08a34771c5f9b1d8dfca3804bbf58665370ce801dbf78abac39a19947a45ffbb6dd4ba30df162878d27212970c9281115211996b755f37581177bcec14d4735eeea98f55c3392b4cff31428d6732872717b365ad1b58d94a9fb9745768d10a435755090d5e14e82e08e3c72ce8b29be8b626a1b8b87aabe309f77eb23a76794bfec276ebc8176e6631ad018f1f2faca2712de2bc9ed099ee66ccc622f0f6f51a0919db2ca45aa1a390a78562a3d8d8904d37a45b22afcec0e66db00a95d934d7d2a562e438308892e8b45eafb1e2e6f9648291c3072f3b93d6f8cd2f13479f835057e36b4d9d11ca4273624528c69ae125a8e6630507b4ce2f2fb3d729eb23eeccf86ed201671c6b729424bf2e57b07b9df97cf6215a688ed4bda14424cf3c2048144aca11fb0e59d113e5887e9f271ac949cc6db545d7ba5726d6119ad5409f3db2c0ec4edadc68b6239a576afdeb8cc1a72cd40d971b74e4667e8c6a2b0072f9a90c1581f7f8e2e4b2894a2fa046d9fa83b01c932aa74469133912351be123e01a1f0494e4fad5a390a48c3fd3680e9f5e4f95ea7cd1669ed305020012bb9d18c22bd8a57aba0de504627a981452b1966962486ed70f9544214dd7c7a23c837f44aa3d9ed0f876b75a45bc04af9b803e3bf2e5ef7eb7dbdbacdb079461afcef21db2b2df3350959e04b8e7d8bc24f22797029581ee414cf6d94bb8a1b814fd162d2726bc519e91931b7fc61a2fd5b3226b88aa8f40e6888ee0b7d20736b156a4d44274e33e2df66f02025e35c8b6d109abb67ee256d2f0a5e2ca6304a1f236135a66fedb098c13a04b7b781bced541b00ce90ed63b709fc6639ce69e96181c5d9b0d592fa1d10ed14487b4763684802e9eac833ad59e3c3718afcb0fadb13b5afe657b355032c900e7d8cee78e62e1834d98d59ac63476d7afe1f8d4eeda2ffde00997aa45e0c0f2190be32840203913b6e44c9270a2d54fa00fb980dbc1e5658a53ca289e79b9c09d22b74ec16f5d3337220a867a5a0d01a14f068cb110abf3455b4bf62f464c3c15d1e183e161077ca7c8dcb27f80f209204582ebc22c948ea1a55c92e21fdff9dea713d3688dc42253ba8b06bb24d39e70cfaffda9b1a7a6efebb39f6d09a9fbefbfd01c787e751afb75566deaf26101daffa5061735f7fda381836484cf4853f511172d071ee874594bf113cac49474cbb76d20db4aa5a658a4fac38aaaa142ade4f6a2b0a03e5d6cd0400cb65e3af497761e4caf434c259c509115f4bf26ba7c7096b72af27f5bdec0021fd36a8c4ffaff9a3c74a35bba24c826fe9ad61b60402ef010787c82f8f19903508153e9c142a053601c859a491a3722e362dd9798263a1c4422dfe7186c4cbd1b3a63083ca0075f04bd6317a310f00957701bd1978607f627c6fd5d4beb7b1514956448a602a6e0f576209692753b0c06407613b7cf5df9447ea90665b091ed93741d0ee345662aea3762aa64bc07a64aafdccd96641cf50b2ebb23389dc1c801672ec7c3f6e292eee072750a2d968e40aa20c5bcb93e10d6857b0b17301bb1613d61576e67beabd5aee4258242045ecf4a9afd956b1b97e11f1e6485e0bf5e575f5d5b48884566f7b5236a649e0ecbd5a433c3576d8583e1129f22f6eecd77b2e3c4db57eb59608ddb5e4a507bffdf214a566e8986667a59db08596c4d036d95ed29542c642442e231a7a0a709f557f760e48116d436c6206e396e4df8848e3005faed501f3d0f262d3bcc9802bf03fef9eafc4d6e0352542d473bc87990d21403466978ffd29e800e8479e2886790df18f5d37f60b3c36b747b7312b7c44247ca05968e155c400211662cf3fc7c19dc27f9e15fdd65d19a991c319b4ae4ed7e918c0c6a100c328cadb2627a7944318bf732c4fd410fbd93d8a084d2066148b5a22cd466d0f0815412ac986bc89feebb14c80bb7aa06bc33c82a76e1a76ce00f3bc1b213c14b86ef367f0a92940e0aa61ee18615316faa81205278291bb828dd2933a0681d2fcfee6bad02e612013620cc6b289d7977f387e70ee5834e11de3029dfa50d4df6f0f185e70e69740f2477e5a0ee247ab7164e04e0d59651edd9a68d6e6c9def6e94285dd651d120feaeec55925f93bf0137f77bdd126efc9da4a21415497f87a317a202f7f7f14ba642ba1c0900cffefe7f351087d4d4cd0fe4536620f48a55bb535a7411873cf4d6cf40e24a81a616448127bb69d0d46748c6274420a89ed01013281152e09b8997ec2dacef645edaa6ae8ca360dc7fbf1002e60fc6b944b6d0e24df45ffb975250390ab53a412928a714f40601b53ccf4ba4beeecbbaca0d31f39dd8dbe5fc4d1f078644e3f9d6a7a612868ee1460746b4f69192a18abb1f7403efb1fc9db91d373f2f516335612e91a05bc563f51b8afd11c88b6d22fc668e62bd107abfb1144761b2348cae47c0042803bba41538d1907db12166888414c214a03d9f00679fe527ad525fbc0b7710d18ab696afc4d6ef95bba2af4a57f1f563e5aed0d6b2556cfd5e7157346b69155f7dae9c15cd5a5a89ad5f2b7745bb2aade2d7cfca5d29ba64591efa1bcabf3de860641f7a9727a973f674048a1b8abcb2863883358e096e5a3e602bbde2d2bdb8018c0eaab4720bb6908d7cff3835c98951863d3585d6f88da1447c0a8926a5cd559720a8d4b169755d8722f0d7e5762a21ef3b1d19508a6da712f1b5f38652346f8f730379f1d1406efd209cc55ea1d3e406ecd22beb1214122b0e564d04127df2722aaab0fadb96fc2313a5ed5189fc3eced08c787b5c8d11cc5b193210b615a0872362f17175622347c2e64806c6b20abaedb0df33b11bb71dcac47f28051913ca378612f929709453da5c71095eac0cdfc195566f07078a229babae5c68d56563d5dda4c572485ddba984e48f48a4650f2bb12cfa2d0d64059591981c3a1c7b2652abee88236fdad16d11d62afd1c7a4af1898df4eaba341c81655db7530979df4191f1536a3b9510dfe980a0787365dd1c618b4d89b60a89a4392b1ae1909c0457ee2da23beb94eace459aa024ee5745acecd1485ee23e6c3e6a91a2c9602a979a1b502d3fe369cc2c8dc8a0368a9a1f947de0ccd9bae7b73ce6bc7f34dd943c46d45fa6786ff485c6ea76e90b436ce4e0dcb620b28c8ed6de48fa7421a4b4296c54284b9f9a9c537827211a334ff7503ce126f236405ea0cec6d5f1d333504e656cee795a7a6b7c521834c2badf2af2ec144d7b86c81aa9ea262455d7cbadeab1195618725048cb61b03a9329866eac87a40c557918937326fa353ae4882cb5ad7a2eb81f83d7d992c0301fa97baab9c008b54e8abcdb539e16525d864f0960f133d4cba702f0ff0cd00981105e93ec297d80ed17125fd55f9b7fb16dc99a2515e8d0b47349896f103d238ae7a6e5fd1ec7a3dc43239afc0dd3347c5ca643aad40c5d07e46fa6722cc172a127d2ea60afeb235d7982b9a94509db7899b9a96ce9d66dfa0209b23f892945f598776d116ce2af837851cc595ce1f70bdba864289c44d6d3838baa063c874d5e43b64c77e59cf4b55205713827825b5846fb8cb75e803d5eae7da2f882bed0831180fe0d8380c01dc0df8819d665338ede81a086a0a8f94241682560ce5dc4a0ae044fe037ff188688d182a9b725091828ff9b1fa7993d8dc2551080a1492ccbf434cffe0ca1986012ebd2df789a02d0b2d8ec912171beff3fd73290697f020b2b6e7229d52fbd473939d3170d1012edf1d9ef16e92c6826b4362867c1355d4e94749055673302ac4fc53e8fa368bc5f42e24cf503f6c6734bb0054678f3334fbb4ad60672328601f22689550675f06f512df89aa1d18537e014886fd4f1a5aed69ec39d3010f39475875f8d2c63129928fb272befe097e71fc33738c775fba03fc096cc1c3a8021ddb1e3cb2d5e982b433fb03b99d8786f5b6a0ac3015999250cadfa87c3efdd16b4a55b945faffe7a98af6663c3e50052c4670e514e3ed404e77a333d9c6027d82436b854b113eca247d6e313c1402dbc54820329b881d88b9b32880f68810a6247be716b9ffdee1b9516bb0cf4b6b85f81d80e6898f6e4a61f9ee0db6810a9d8bad70065b699b07bf7600fadb4ddd2dec7721634f8015033cc1dae7c8683a72dd8d331d9debe06a2043efdf6372e272b6bd730bd37c8285a17b11be044affdf5904fd3bb3b8dc358a05bf53bbb3674f28a67c503d5e1c352a3a1a8d210708ecb4e1f3a982687bb92adff297c5092306b2187deb2381a6f5d47f061a91127e12473e3b415da5b5a0a1065cd332bd9904d60ce4e13778b1d096cd1747ee0abd474136e9bc967df0cbdb7c513f1f6c6123111a13eb79071ed03fd960be57b8a403e8eb11a8261cefd89b240663907364d866a1082cf08c7ab5f707f6d82a0fdcad678a7ce7ef174987d50cb80158c2ba2f06d2ddd68c040ce935ef855d33b661269949cc2ea799e47265eb389953d1ebe2e692075a57ecd26f13230d165419f077b3a88cf442494122c9929d1ed4b2aeb42846865977d7b13ef4cc917429f95155b6135e0692afee83000804c6e81d75881e52d9c0c482f165ef7b898373306f4fd4f6608ffc84c148592540065d4d6e3d5edc6a7ca2da8690db0f2921e827713b4ed4ad3e178d0b76db942d1474f366ef04c91b4cf8be26ff565dd66a18abbe31b9582a7c69466dbac961aada20979b3183139e7e43329219eb3575fde2f87d87148dcf188053315188556808f62f286795f0e0174dfb2c214282483111874a90368210fd62e16aad17db3ee0333fc420659e8afec3c0d10a45c212f424a5e47408892b7bf1c58d1831427276a0c9ea3dab34ec1542938c7a2badd253910b2218038ac46a00a23d97004e2a14d91c72af1c9671a2f39e31bb08f6465af25253d968522a5c645a4d121e120b1c057eab4e9dfd0e805d77b3aec96912526bc4677687e516522d353a56a62b768c650f6105b4925de0cfaff9143f17b2e4afb767147b8ba3a45c8469c23af2060bf212dba1a011be12f3eb161ad4180fb85686f55964284ea52a2ff03fb40c81953cf434ac082764f16d2570e3ed71aefcd423f7edc4d76c4615005b6e8f62fa9290cb054624bf58e0206a83b60231e6807e39eb65809f9f0a2e965587f8a61d1cb4043e7ce9458873a02635457daad1ef2cb99cb0c5935492fe90e25cafcd8b60a3116f0d5dae8ee56a02a9b76a9da32c702a60b78ba33809a2b56fad85b90b5966db8b17e7d86c7c3878b8ef450052aaa4c94c144074556a347b0d93c7f59e36b802c4976b04087a75759b55393a92c080c06be5e7ead132b56efa8385ab76a97e818d15275a8fa713a847b152bfb78a9aa149559e051dd417409e8f04c708c1d682b315aef29dfb38fb37ebe48653bf42dd0e55c708b6f415f8e9b43e74b7862fc7f03accd0c499c9e90d60ca24b1a8ded878157ea9d416e0abafd3c31568da53f979ced027e97d4be281958bb2acf534c4e95741b4330e93e86c2f272adb1d46ec9eb4eb2b064cc67cff0aecfab24ac7c9330fcc8abc26156340fd22d31cc8e34d4d68fa5ed306752af2a6c47c4df21e0fd370ae202336f331d9b3da7773699e68ab9bb28fb5d652ea603307625147875eeace403d1a4178b8971e7989a6e375d565eb0b27dfe9125f004e149955966fd4406cc2c50931564120cc8ec20a850d78ce8ffb8bde1d520d17820018e8d788fed8ebe72ac857a489f5fc022564736ceecfb5f9b0a47f2d9fca4c0101ac3bdfeccb3912dd2e3d9f0d4ec4003181029fd92892fc24c0961a8227c19c33ece671533f74e7d805337801b1078604535833f2bd7dc214e9d112a8544c644a786482365d1faee01a0d870357a4aaa92b757c2c2850358d3f34365eea5185de32b4c4fa8f35c7aede0a8e2828b51fd1085e21d8266569cccdd030ac50fe51240a7ab04e0aa4231fa1c0ea6a69dc4de1ac7b654e829117d250074395e0245fc5000f3f6ac2a02610ad9e21cfbde0cbd7aaa0725316cebcd9ee380123bb7e8d3a2bc6606c8fd03133f9af47cbe5b4af5fc1bdf7cfb4f41b9fe1f56fac7882d75dead1d1d60f7d65943f27bcb54fe22514b2654400e45a5009fd43fbcfc9c18be576e485e9fe9878ad6ab0c84147c3f919e2150f56fa10439fe736a48b0129f7a23e56c0eb70434b10e2980998fcf4e921a3f702482af9b3189efb8d740554290df97f12b444ffb7ee3533149197e8b741b82011fa6f73de4a15613de757890003e58d16dab096d4ae19e1d9535ba9bab4a94c6fd42d3a1d840e6c69cccf6d342c10c90ba2bba71566b91f4fcdc1f9c687d3ee922d11f0449ed25027206b215d0d4c8dbc32d255bf93148d3cb6f05da190d22df8cacb3dc1a0473bf33b968bf46f507ba71e76be282f15078159db617d11126b0f002bb268fb617f6fd18a535b5925c1a82b0da5818bf025aa2592ea2af10e29afcde00df0f82eff30566e916469772a27572231571d4574b330434fa1c01dfaa5d737b8719ed9693a5c03196e1f24219982664139bc8898961b80d4e8690a1f9ac52e24a62c9e1b4b096f65c3483dcdb5d9aeac09f1cfb52aea76bdfca0d491dd80e84f37bfb7dfb0464e6cec380b028f50379fd7300df4fa3786a96d564b39659b9b1955bd14eb785716196cf05c6dc93ed5f7712a73a2d14f8fc19a1e28ac475cf9829c3b4bae78e980b71f6d9e2167b1f2fbaa8cb7a507551730298c34caa1850cd9607c45055922ed0354663efd8be50aaa3989d49fbc90b93a31d78466b3d1cc18bfac9a771e9cc9d529df4348f875e86ece6cb21ae772e1d15f62d52316fa7f49ad89817401939582c771a461d888297ed76f78e33eeec23d03e049760023bf747a2010d9fb1a295c4328019093c478662446bafed8895449215e39824a570e11119c02d4bc1cdcc9de08c4951f27392453e0709a52e2e424bfa0b452626f9114830a176652a4ad445d6a776d0629113135050c34a89c35fa0f3d858daa9fbae007ddaa558217f262a633eed0298dae1b054f8f76e162f8fd7f84d98256c9f272052189475e1137253bef54105e5b268492d61fb2abfac306c870df004ef9e40e5b6c8f10716e1be7f0285a399c0c24f3684b44617933afb6615bf7f55ba30c2568d18309c2464b66a372b19053e0577eb502d83c15451bc7e2e5ac4825b7943eabfb5af27b428a35a8ced9414b65e53c10b6d6621949951bce2692323950811262d0632e4ad82391d92eb0da73062efb7a2e092790dc7a3bd2c07174554a279770a1ab819e81401069d60142d2d2ca6ec3623d92d354781e59636bbb0cfd39b5443dc51428b0136faa94530200f62683788f170d16ae765735a1af3373dddeee6e3f42f91528040ac8c7dcd3ffd06147a16d6bf877f01d50066ae04bc11a0251982b49aa31533bed7821f8ac87f0794c0fcb792d4ec086c21e9bd4cf69365f6c5c5acb825d12f3db7c7ef5ef22ff5c448642e8ed6e3faf2a51eacc5c7f788e1750659ac83ae9bc1605b7d3024800286d6d88f66950b0cf6eb9f9de8c63060cf804065fd4b0c76c1c59a7dd16cea365525244148a34688341c42f795ce19fa39ef8488d946caf8209a75b01a86277cd82c0b2b1c8d8bfb821a0622a68b892a16074f0ce0f0d80bb8b0c0cc00673e18bdd807e42767c3cb768e34ba5d283c0b1c53f46299d31af341d3e6b68258dd803e30c5fc24b7fafd0b706fe5c556e48a59dcc7e21711b37fcec6999e1b500a4e9f9b1b7e8bfa6c6cbe2d1a1b36c2525eb672af9f20e1aca8a7021649a4c6e78b4b859123021c570a921a4a9698d21d364ba2eb1b74e298c4458added19a2b1414e1d68d7d8c202d419e5367c25c736e038a9848bac0c94110e6b5cdac3430a5d6b3db1c8d917dba6897c233fcfba7e7bce0059c6239caf5bd34f3b0fa5cab70497d27ee137bfcf44c2799c7507867621b31abd02d4e45529d1e5dcfb3854569c22d4bbe0b678380608c5224b19b55f2a23db995a763886ee2a8abc4444f79401ede8a3dd3fc9fba246de4bd13f01499dbab03e568e3fbfd3d7ab55bb1458a7b9df77a1bccacbf27617d1d3c83531f0c2e9e50438dfc61e5352abecadfb111549c2e46778baf3f38621226ba56a12192cc72aa52a187c1f07c89c4192a5b778e33ac8729632d93350490e30179bf78eb12e8c75e6fac119dfddf827c86f00a4bd1c70fdd3d118929d07b192f10395240400e6d19381fe87a67b59a7143c768669f376fbf7b136e11db8861e904690f009cd8a2bcab93ef3479b0246a5f8b3ca5eebd079d962b29527965c66df3d6e085b69b55f3c25a56ebcbaf7fc97892719be30ef30caf0c4fe7c4dba4a0182c76175329ec66fc0b186e24deb63adae5f3c914c8dc032bab5cff962cc41024f26a7a58bc6202fe0fff9f88c21d576660c53499531744bd522e3ab84f95973abe4e392209f344a660397cc8817ed76bdc79c277374560a5c9c88a87143a3414e66a332d9986b17ad0828e62f6717288ef88e036ef075061e147be73e829ccf4abe3120e4089a6ea46dc15fee2d291e463bb3e035ade4a5057256e6bfc274595da425b3b1946b228f5bbac30fd3019cda9411d5086c967c24331300d7f3beddbb5527433540c2b83d7f834a85d7840362e61641687b06ecc7ffeef6216e7c18c92bf36b347463951265963f00657a8ffdc688306dfca6784699df62d5581dc9cc461027b20d0a4d3e1dc8b8a5bfc5b20351fd2c066a8f4785ace1a6e57a76c1e26bbda1fd9d2a19ab0f313f9027356c942e48b90eb1bdfdadc58b6bfdeaad6bb76bd72ef89c2a0750105a97ae7b358a117a3a397934947519a296b272e271d24a7962fcaf06f35cf8939655c6376a6dce9ed4a7399348b4dc669fdb21a499aeb8550e898322d0729339f831f325944c60945d4efc78764f74837c4ee21a43787cac3922a8b3f0018c2d952dc3c30dbb7499c6cdd1667d5c398798ea55bcd339e20c35ab615791009b15ea92966547c4a5cb1ea2967b097a8af72c2896d8bccb4376f9420fbeb16d854a48b4647a19908f812d5a33ae8499d35c1a1628c06f5130675bfdada9f46dc28491ee9fcf1db17056ce9a1742fda3ab481a038bd4c8242ffc1f7fe05ffe512eb16c0382a997485a8372f5faeed5e2e0ab3501f93d309d1c698105706af0acc9ec8e0a053964fbb62857860f2d7e7c2efd074b60e812baa4662287438a1fe78ff70f65ad3fb4a7cd4bce398e661354946f9379cd0a3d8ae0b88aa3ecd2137d57dd2007474334813bdfb6fe6ab7fb33e029790dff61c8bd6ba338ad0240084fc0b7e5f28c8278f02da342ac7daeab0b7f5e2a17052def621378d635d0647d8a84d6634c68ea7c25435a6067ece4c1c3d84a90e43a5fbd85bcec8a9a4d633d7d9d0ad1bbf2d0f6095051ecc6d28b3a333711ca9121b491986743e693196547abd14dfca34588776f21f198f63f0d1c6c23be0f2bc4ae733dac024c330713cfa39e0855192f00919d0129a95a766485258bfe1e9f276adf26ca9b359ac62d2b328ed60fb34cc6b92450e5d5a0fab559c131f081d6c8cd8315c9a75797e06edeee4c9e0a46e07444401151bf4ecd13e6da91c4553ec2265f2a917b69ffef2f1e641fbfbf018f6a1b8583300359c5e9e90755d3ebff63ce37289cc11738cf26249328887186eba367416141fbb4f11308b849b51e630710328f526d363f6183c20a2f4a67abbe170e343b08961cd9ad8f32be54942a3b0aaaf44bdd4ae5b0b179706f4d3242112436fd7022ba8a50997ccb191aa2a87b09f9ec01e341084a3c50ac81b1a1a583508b5ed344326622a6ec07be86d97b0c75e49788efc6b163cd6c851d9de03e2544401ef05a29416e75649c018b5074758ece25bf659d86110f72692f989763bee194b7f456cbdaf00652e4c089b02c0215b205507ef9c9771a6a5db52cbec5734c60fc4f957496297d663afc4941def1293cb36f29c517cf3be6795d3cf18d15f4676190aca741ca97972c0f22c24a44190bf11ca06bba843aaa9222ea9ee235b696dd28f380f07a0ef945502f9d898c21cc25689b8d6b524acd5e5ab1d4abd05941a3a6ffd217279a1ce48a6581d684924826a3b5d82696fc59b10c37c7d96376e7e37b6dd09db9472c086ea53bcc63681bb7beb931c37f350773a22ce4b6d68c80177ce51f8449aa88e69cef2d5e0bf83a1703ea6b617fcedb70018370a0833029779d0f33ca0221ec69b43a53139ffb865c0e5d6cff2783247446616274ee44989e4cc4be241631efd54aae245feeaec2213cb0f489e6724b8149db159a0918820dec1233149b7f5499b78eb1aeca4bdf1d971f798ba50445add82123267a85a1d6d2923fde7f6cb15e077c42fe2881de0ad6922a78412aeaf04e9e464e4a185e1ada36cabbfe391eee12d4969cca96284500a6c9a9cd7f2e45e6f20439a6a4acf7e97f240b5a686547cb80066e8e5997c5d586069e56a187356430706f0770c0d870a2eb25944351904ad6e2918022199d8243e3c89cdc168ce433d91814ca9c319efbaca316365d6a06dc250d6f9f49103ed158491243a4d0a60d8063c46265a14c061bd70051c97ac6373812b08f7f924797be2b72e1530d1c8e5621d1645489e06cbff39c42abec17181ee3f329124cfa9265887c99e44f06a119be82c9673b56f8a8208fba88de8a0876cc673e04dd825cab732c1f3ab9fd9e8d5a9192c7e28f6b99ecca73af7c9829f2b50b20a4325253f0463e415b7e3ec8c49f7368e308f46869ca416ca3541af0b506b76d64ea8fe0bd329b23838bfb44a66404726d4ac2666da55f2c09c3c8a1680577e80a2ca7fe2fea21c960adae0a4ac02413e4bbef228c3d6e6e69bd673f2979305bc0c554932e224758870671448811def58d9c57679043ae142fd859b824f96de33ffacee2a8f17931455a0b7ff98e50e8fc8e2e124d427460a60a877e441cbc837cff803fc2e5ead135a34af7c6063a16f356b35407ca40e1e4acdf2b0050ea3cb1b7a144c814c72e81b86255b2762e031aa60d5ad39af9aeed75869476735a999e9ad0ddd87cc342f783cee2ab638a54c1fc2d575b4f5fa1811eed27d71426bbb592a5a986c384ea591e6b2f294890081b38890f4e34ffadd19eb69b313f43d8a615860963d8852a21162d10b99fdca8c895eb510608c4b7e7673866e9a5960bc9620471f0708b5c328f2da64b0631322c6d14eec3584bd3162cc3309fd4c1de9964d53b64ab6b7d1e16418e438348466f62845b75c687662fb18ff5cb0d57b0fa7dee88e14c62f629315159a393c0810c7f2867cd25de292e34879818bb1db0538491579f658e887d6598ee6d2d31cf7d78d2707bb052036f1eb6c5a34f56c0b7a263723a5438abe766601fad94a2519e3ebd84c0b4e84df4cab5402edfcf6dc92bde6d123b18da1117622bbc3f4d8edd586709bb26146b740569944591c6b67b14d92712aaca06594faa0f17ee2bd5ba41e75bc062771cdfb85f5d068a9d9cb519c2320d35fe6ff5d392c07d64adbf5cccf499a5d1de7df9df42c8e39efc19d0389b94f4b0c74a87e81adcd4231f295639c518f9b9a08793bbd7634b5c0416fc027cc612e7d96bead6f2700bbde923eb5d4326b2fcfa807512faa44012646872377c16e977fe4c32516a11ec7ac66a77659993a43a871d7a6125c7cc29e4a650872903f0e703afb0f10c04b05a9cf60765eb4a6c0cb6876247c13c9ccd10b10a18d68f16c0584b94568c687cc0cd4ee6c92e7cc661d0e2fcd32f6d6d0f39086023da07ad58baabfd465143549e2f8f0c1a998410182cd21db5c63a77dd34cb9bc2f43c8b63d11f642377af89f2e662d76772ce121b112b8244285feb47d931c845d1ebc5cb6134dfc17e8bf38574c4436364508eb1ca9dcf81e62328ea0c11c24c97f0210e0086fa32f12b8fcab7fd11d44e890bfa8dbae9cbca7f1aec51aae008b2344ebe861ab0ec222388975dd5832be4e6ed03544f1ed43245789777d595dc3015044a09587c57d3425201a0990c0807e13828e350a1b27a22aa452e05eaa1b8d0e4aefb52b8c8a169896666ab22ccc96b967738b18d6557644ab1cf0c5519056f87b8dc7fc009b0e3949b41606fab20fc3b4e67844a7d6b35c782d6c515dafd12967a9dce80a8409c3eecd55036079a4d1795cb414a737cd8be5f4baa7700b7d405e5c488bc133c50326c66478ee288ef1b7d31779684d7861cfbe625dbe690ae06428627cf907209b35abe88e09b556f9dcfb1dbcc5b3439420aade1d0c0ddbb4e60795815a647486464af4a2356690e50406c1aad249f7120e785a631637759fe115f9db290079398d73e40eefd33a0b9d2e169b731516a19a65d35e15f31b4f6761c366ea0f077c2997980beeabab4f9dfc5d0421b79e1777340460990473b9f4084923008ff4932dabfe1838eafb806b6d5b01ce51bd57fa60fb374537e83fa1f597f05c118c67f946454d8d6fab9084e12f93d93900b191f8b34b0c38b34ac9a2b4e417726da23a2f1346fb192b9309a293ef30dd2c278fb85fb1ac5d1251fec9e5eb84fe14a404930d0ea6b473bf3ffb5af1e3ddd32a0230e90fc245c30130b9303d2b96b7c4663473d88073aa8b3dcd5b21a96115042779250274ce4f9f9cc08dddbfda35326130d16bfaa88dfb9aab99cd4f8673ad69ca7cf43eddc9978d06ef16307ef1c2f61334a80c7e9877a33401daac6b89479a0a99d6444de12a9fcb58fde7c702de0682c796a57731a26ecae483b4d890bbc8850bca88aea65bcaa20ef6cb93f8c05f28549022153c488cac41ef27ce575ad1048b543d14b086ffcc2ec798168b662c9e99c917d99128da979e88697f915550d5e142b61a651b1bee501ce9327a7fb0231dc1663fd11554f4521e3f05c2efcdc3d10462e94ec1d688be57f2719e689efad090f4f00a2189c40a6d4bc8296d1b50f1d6815a7e90f1d183fc119e054a8aa82e0f18d8cb30b7efd2f9b2f2d4de2147ae004f9834837066712e4feb4deaf485fb1390b7cb3b2fa703049c391a2b4b4b9165e9d687c211edc94f1899a498c4a9d9a63e86c808bbb99fbc5a66c08ea83945434b464f482a2044d45533b20ae4a3904c82544cb9f226a16ed72c78c7df5d7b1cc8214a840bac78218768fbe0a89520357880b0208d0d9072439960c52bb06d26c7e6b8380e8f28faf38d5ea7794f83858f81c878680096b1f074c3195d9b824122f89fa981b9d826a35db6d01cd22bb29600d51ef231b4c87f43c2d683ac059cc50918a28350310cf65c891310d6f67586540104aacd341c0ed299b52ea12dced2ba63f552b914e9c1878d0d348af31d5d2d38869ee621c327ba93284bf1b1ca2bd62f614f4688576144aa53f3f756de315f563676d80eb36d22b75d233da7cf556fb58c01adeddfa0bbb263be29b4d8a295e4919af0f9567191048cb57920e06011df526bf12a64e8154a4565dee2fe8cf23db4a694972697e9da1c3b5ebfbad712e5bba2e3ca54ccc96ccdc77bd9d57ffaf8d5bfc7eca9579e8ef92f8f7d88282f3ebf30c9c0dca655643589c015369ac5cbcb25a14b19666349dda0e5bf484a777cd48d8901701056d3ae90662914073a26471d0139790d3cc6a86dc59069a92139ad874832bde631b6af2d167060cffe11f4372c27364445527ce3fa04eaecb83007681e56935ca8d9d3f6b8fb9cb206524f187849747ec117e6740937f80f91b6659b0aec951259a28373af2e4c1b76616204d9b845c97496621266071212f7fd4a9b44ccf1cca7938f98e4478289cfc8f66e626aa2b7bdbb54fa94cbdc551938419e28272600a26ef42729623c87c5363294daeff93339e7a3f15cea2e5f11aa4b904de41457812501038e36e3a00a07167ad8106a071e75a8196c65deecb6ccc3257c3b8cbdd65b79af50731b5c145c58416cb91327acd49c96a7814f8d9db8de8c644fe6cff7b3b8afef4e093f6b7dd6eb4c9de5b4ab9035e113812a6131fe857bb7ef388dc0bce9ceb93e39dfee94eb7d3ed743be14e3d77ba668f684e2802fdd3d30254888b833ad1faeff6b1eb290d3a52c8c9716745121e2fd603b7e6c60ab2869e125e0e75ee4ce1e1e24c09592f067bf3a28d881917093e6f56e365e7012960011904d6ce41cec46a8f0591e465e79d79582c6aec393d5305188da746859e3da256ad79b21ca42c08d574329db0630fa84e9cc0aee984dd359d54ddba476037cde1f69d2c88fcb9b7477c8e05d1b6400ac8fde90b30775bf7d8b7ee74de9ab1a9f64e16c429547726de657da2694eddf5504f51e10ea360048a533318d6b4661990aa322d65191064595695c99abc0781e9a71436851ba8f5d6be53ad3fe8533b6fa7aea2a708d6cff936bb3ceaf879e8e938b79e5e9442dd50e3dcad4e7f32c869f1b9ae2c367306304560a2b6602061566f05628fa69b017d79d479ed9abadb3cebb5fa5cd9e3e9ff5b73503a613552710eadad8c936855fa025c77d1aaf4c46825ae398f562189e05ab4416185c2a222ad2e960aeb118fd357a299eaae4c73842bd413d50286df6e924e1fd54ada6cf3a6a9e679172efc567afce7929a3f75d24ae4a32aad50cb0b6b54dad2eab45487a617a6d5e5716258cd2c95a5f679d4e6319b3535cf6b1af13ac3ea04a5694d7aa2ba439c569d7ba45de73cdfb9475ac8c1ab13561973510f4fd7b9bc2ae0ab73ded3badbbd59d5be3a776239c8bdc9029dce874bec0596b802fba8c5d50da3612d6a726e58935eb49ecb4148dcf19489856950f0d42cb573ce7bf83944d3b0a86cb39b2aa6c1f3526e71e53057d027845b08660766312a69080cae1a0d8f679e61b4373d9fe5b4375da3e5b3b565f144d35c9a5375aa6ec73377bc9535dd5cd91ed0dad3ea71bde9405b5a6f7a6bba3b7bbdd9f566ceca43d3dfe0defac0bd652aa4db9818d998d8991918c6bac239b0f015d67ad3d1acc7c9bca6d9d6dedc4288f210651671ce5a9f278ab3d6e789a2e989a6692ea7aaba9caad3ed762c088cd71d6f5d59b6d70372b78a57dc629f6fc53fd374b76a4e308786569308bb4179885d21ecee1304c66d1e9ad8f1670a4f3d78542d90c703c2599f680a946341a4e7ab6bab638f27e69979b76341e45e359d4c732db2c4d5a278050a0d81b4d94d7607a69576bde94b4d5ad33f68734551b45928a4e65254886d85565d9587da4a6b9d85a9934044aab590edb1479ebb851ccd189b67cf349db2a3d84f3f75f11c7ad15c16a372ce49f94d09465513d5eb118805b1f4aae9d4b6c75f50109ad143948976143a9b3061682825222242894e9d3191b9f6b6083ef7b736659cf367d76d107b14ca39e70d50144dd19ac209194f30cf9ce7170499ae9010d0501e1ac2262ad4b6137ca6bb5b20500381198827b0470f6a1e169dbda3ec43434444c3a66311447ea1a2d6c8e8e828ca584442d219eb88888040e3d1431e9a5ec482c01f659a46461b1c3bc843d38f5810f983410aec71e8a3cdc2b4259af2cbcbc4c249b7b710661d3425991939c4d166e1c67dde1456608fc03c743597a2a76b77f78ccd1ed09bf35d4e28020b5ea051903d2e2169338a4d4c34dd748b8c888e82199bee5e4d779b6d47ec00cef628040207d902e0230a2e1285d5741d45d19ac2b642057737bbd875cdb4425b81e501adb147d39d0581dd56686d9376b459a8959494b2921256327dbddd825785162c242529295db8609a4b4ba98524ac942404c4c26190360b93580e942eb047736969099f6793c69031e025f6083414ee10eb635e7e37e7ac3dffe996007f0662628f39da2cdc2b860c4decd1893db64f3807d41e872c88fcbefe897637e9f33776c163e15190890212135305676262728d98988a9898746a2e45999a46782c7c49c825c07f9a4e3ca004e857f3d0ccf2994d40eeb1b1ca04f2359b8023adc20df9279b00a2c742f5b1708f809ee799d1f33c518da6e7899ee7b077b22086804cc081ee85a0ee80de8b1e4b80f3fc0ef1da07e034c200ce87c06be7edb22ef7f608de336fd519c5a69a4b575dcf74fc3956658f2ac61c985e02ec59e717fc693a611f52753e9bf04cad31d6da4d1745ae6606a7e90404638d3106a14108fd888cf1162ffd83e1fc79cc260008bb8ec3f3994d40fb5878f401d07bfaee3766c1ab9a4ed82f3c0f88c29cb83f7fb209307a2c544d27ddaba6d3f3726c02d0df23bc8ad901e85e553111bf6a3a9d2ff893031e900938c83d760ef263a1da53d95e2fedf572bd3597cba1bd1cefcced74cee57239accbe572b95ecf6452df14ee1184f2d0fc17e01139e73b3c6cfacc3cd4a7d01c71f6c13678f8cd93172604c6d19b61569652a6177bf42d2ea01c596d320f3f64aade0afafc42b8e54258d37d90876a0766312a28692884271c5156b8bad65a6bcda2beb225c0ad109887a7b9cb4d104bb3a7bd2ce4f3f97cbd2bedce66d92ca3e5b42015f8d3193f685785db58cc09f7f027ec097dc25618e46e0f592845955e26101858bb3118d81899188516e8c3a2072385e09191fb109b197fe7a488b48b6bcbe79aad0728edc65d5dca2fafa131aa7814f53b27d7e62c3d6865e5e8b9a6cfb89c6367b95caa69b3d4c8e5524abb71d6169756f0c8c88751c5e091511136dbd82c83adcd69e363c4ba4afe5cb31715a5dd3899c4ca7175e4c3e25153539415aec254e6af18d66e8cc4485c85a98e5aa0370df3501f6923ddb640a03b5cb1cf0a724d53da6dba916005228800027d689e1e040aad6ad26f6ca6f672b2e9cd2d84a99379785e81485d0bd1aa76e7248f1f49cd74f2783d374d1ebb735fce640fb04355b4598629a5cd610d732a6732b1b90b7738c1886fd7292093e9e7ebefc7fe4e1d17f7adf003269e1ee484f904f2d668acdde6f24f0fc1032134f0c1c88b7cabc0244cd4be733d0fb591f034b3eebcfa9387e9aa3be7f8d379eece44420cd9d642c8aea96ae14e7acdb22ccbb22ccbb22ccbb22ccbb22ccbb22ccbb22ccbb22ccbb22ccbb26c199028e998a89da7834442afcd74f0774e86484a43fbc0ccbe5c2e97cb255cbbf3d26de7245bdb5a9113f95683c03c648b8880ace72d11a819590741ae6906f3b4407315b2bedb55e8373633831e825cd39380bbf5011e0095ad1090a7a77cb70e87bb35e7d379e0434f1aea7cee0946bccf8335b7aeab4f888489a7bb9ef2c0f4e2070f3ec8439d04d3c9a11c5327b119910b6122eb3cb7cd439648686626d685acab6608a031aa689a424843304848ea6bb7c544d6f5145078662676ab392b8450d33069826bb6c3377acacc4cea8ad3449c1e040e0d0dcfd379bc74c52c8820d681c00c16b01893e9f49d7bed4741e614506bad7db74240de07cd747ecb73206f7bfe33d903f03ae860dd44af739e939ae9f401cd303184f0b57fd06e07695aeddb04db40d881cf8139a9a7804c268d3bacc2ad6aed3ed761b3138c38fa7cc295e540c7c5fd4ee89878fa073d85cd7ec29e10a881420f74f24f3fcf3cd05379295c32b968735696da45cf91a54ecf5779e94556bb2a26b2a8af6e12c835f71ae4ee10ab1e72859f3ff5092e565dfcba9f8bbf87df39507d1502b3d4cef06cebdbc2b3314ca7d377ef593f32a7f2d2814ca99eb31e644e1139eb2beea09398783aeb2ccbb24565cbb242605eea296ca6994e3fbd156ed5e4399070f9a7eb183e3f5d2771070f30f104f29d755cdceb5d01e840e654d16fca8875ed466ece6462fde76a73c87a910b6432b10e74596f590762855b04faac037906f2cc1e807520e19a875ae801ee00e427d05bf70977fe6d9af99c47e4ab603a015d2093493b906b9a44ed446eced4e630e7acbb0a75ed6f6ca69eae33b5ce0aca58858e104d7fbaea66f174ac37e0154de08877b7235ed379b915f2f4b76eb6ee069949473d2adc22d23f5de7bcfc28fa6183475fb04db7d7792e013eae6ccff770174df5c39fabcf47bc2cebad7fc0aeee138ae0f3d547bc3b9eb7cef3d67bee11f69f8f7881dc232c3c520090f7fc0320ef39f69e50842258f841cf7f42118eb0b79a29f5116fcf4538c242137cf0735533a5de7a90500411823ce837e205f211af9bafcf77fba94f68be2dea29eb9aefea9a2fcf1df1eedc112fea6e17917e1676e022bd68b52adc200f732e928ca29eda2033a5befe873c4c3d4f8bfae9a6d999d5ad2214386e03d689c79ce2d6447dad6538535314064b54d91886ad2bc21e567a70527c5a33003b374d0d7e9ba669f2d622391e7e6bd77af57d7a7a9ee7e9a85063605465ecadedd52905b42a7951a1da15438c73a8f4b5445c3b958256618a24a1b57843bd306185ca221c5add3124a2f568c74901b812b9048b56263723a315ca895a74b4b654c0e04aec43446185423301698d2aa30a55589dd482dcf858638d35d6588305e041604a0d79bdbaab9bc513aeee97cec2ea142597b4267da9a8d2ea6e9d17560b46b4d65a2fad403e6a1eae2e981dd35ae4e4c418d6a4a4d65aeb0c1884ae5718e129dce08d5dbd885c54954f3f857b1dc099334e7e36c1f9a759e74fa18833ab23fe09799e290ff866d09bbe375bdef3526c6674cd6e06b42231b935bb515cdaadaac05335a66b769372297ae6741cdadd9ad7ec865d697b11f9cff5793da0e7f9d4df1aa4e6527500bacfaeb6bde9277b0afd08bc4314b56b1c22bf3dce28ea1915669c5da5b376abd93de240ff9987ed9a5d2528be35bb4436ed3e7fbb3d7af4794226385f443ac1839c6b78fcbca13567f3343178a3d49b1c9e67eaf3e803f44d3dffc62f24158af082a8e705add92de268b79a5d282ded56b3eb6669b79adda3ac769fd9257669b79a5d263aed56b30bf5d56ef5c8349db686379de94d2cbf4f73cd9bfbc80353336179a53fe220ebde34d59e879a4e476f2d364da1065eed6ef7081f5cb30ba5d6eef3b31b65a6dd6a769dd2b45bcdaed9e579ae3e0f57795318621d91872e5ef3669bcb82c05f021cf73ce19a5d2729ed56b39b04258987d1a301e4ec4e781ece6b7637faeef34e9df1b9d7c7d9cc4a6b764190faee95d0576253cfae7ea554a8e6e75d58b30bf4d36e35bb1bbb26385f049a5bb4b747fc395cb35bf4a4dd6776f739807d9a239e9743ac26383f04f04473a6dadb235ee561a6e1d205a5240b1884ae57c88044c1348347464540222727f54fe11e017decaa3f94254ddd4c324d8df3f1d9daa407f4d49b4cdab1b87531c7b8cff6c174d22cd0f2d0cc56583b5f0358b0e5a1f9db04337d6757d5b6cdc847851d98ee870df2503bd00c292277da7da618f59dce59b0739f7abaf93a4f8f54a1073b13ecd50981c3f3ad3d85bbf866978e88b15577a7eeb13c20b4d5f972bf20a1094344c022a3a32005a40aee0a2db8c91e93fc435e3fe42fb138abefdc10a698ba0af101a5a0a2e6658a7d7d30c1e858f09d2b224db27003684b44dab5818736d783d0d5eaf9aac47ce4f0a0d58191ad82d12be86093468c6580a83914a29028f85883d0b6a4f9d4315514b6f2a0f8e6a8183c1ac29b400218125650fc54f841939ca226a322203b221f6f464234bd81307c231a028970e88ac8d824f9d4430831649b40129b09494313b6d4d43f0891941682bb05f9ce15810a05fdc87590871a08d6c9f92e4d859e873908ccd1ee24dff9ce933230e8abb30548c21243ebd39debc10d11fc54e801a01b1df07d3e1f5055733a9fa3ec5157f4e97cc610427650dfb92184be6d5ba14fcfb3fd9d70a7aef356e8db24281b646cbe45db2612b47078e70301a9eb8af2805cb3479e88f38180dcf345ac6d7abe7343accfb2ecce55dc41c5c4b4a7037e2a24b4d7dfa9bf7aaf042fc8ecb117627d96e7ae6c014c30248021e1d91e2b5cc1ef3c4db2725a18d2ee356903f599aeaaa3ebef7cafbf3a6fc544e14e1dfd546b2d14a15f5bc0422a3cd3711ee2b54e6bfa6fd14f698ad35c2ec5c00d33f4e9049c22aa6adb3af939d126cfe554b56d814027689aa1985375bb9d4ecda55fced25c2ecda93a9d9a4bb5a4699a53753bdebaf2763a35970ad991a6692e979690a6384d711c8cb3a48891e672692e979a698d934ed2e454dd8ec7dbe9d45c3a254dd39caadbf1d695b7d3a9b9b4469aa63955b7e3ad2b6fa75373e9952b655ac8942672aa6ec7e3ed746a2edd93a638cda9badd4ea7e6527c264dd39caadbf1d695b7d3a9b9940c4e539c53753b1e6fa75373299a3b698ad35c2ec53a9e2c6992a638cda93a9d9a4b7190347d93e672694e5573690e3bc54aa93e7b8a647bb4cf67479154cbdf28169adfe899dfa8197a86a6a16b4ddc7ea36cb9df68db0acef8dcb86a132546dbbbd12a1031ded020b3268e899877a3492024570e2d778e4489f16e34cba8ca8b2873a6b8e082f56e74cb032d6043926895f892e2dda8f2b3bb28a17401848a1a9777a3609f6798443c23ee731f8c7562ac13639de77972719d7df61399a5ccb026794e33bf4facae734cc4151a293ac0d8a851f6eeb32a45e364cc16728e8e2aef3e9321d071b4268176d36e703a6dedb36b329ca990e76f4d95f65b636d5de6a9a88173040f932158efd66692a0d02211e7c58dcbbb75d20340d6cc5021e39aacbd5b2bf7993d2aa0b069c146f96e0dd60093e8c70413f739f70121b3a165ec14d7c1c92462dfd8cfe72266c36e54bf331599df196bccef8ca6bed9339ace5f6470254984bdc96af2ee5cf55c6cc869eba28c11c5cabbb308686b3b966530b0c87877ced282026d3944451d1fefce5b0e4803260f1017795468bd3b2b7f042a8e582569d18602c6bb33d8e33e1b9ffdd4061b7d9c7d04b3036a12b1636933c66b050d275578bc1b2731b88073a27c7246ebeddd42c44f14b7253d62087937d663a7c656122d3d7f72bc1b6781e551f3b2a704197d8ebc1b83bd73bdf9520349d6931eefc64a31bff1589807f3bf3195d56717a17553b77936957d021a087332e3733efbf2d84b131f33246825d5e0c4bd398c5b111d52be9099a97877fbc6214e7e20290b23f6e2cd42fa8461d901870515b3d7a8a7462861c18385932279aca8bc1690418584305d7f926479817f5ad74dab8146bbd9b1c7be0106ebf5d83724dbcd663d7636c926c572eb97df429f73d3c4e7ae7c8e8b90b5cf51c9f2395fd9630ed8a4cf638f52b67bcd20d6ee95cbd7632fdad2ee75ebb1475d59af1e7b949576afc8c78ec147db63c7d0a3dd3cb4c72ebcc1137bec421bede6753d76a19176f3908fbd35d2ee1ddb632f5ad3ee9dd9632f6ad3ee9df2b1177bb47b97f5d895aeb47b57f5188b5a9247db4751f7a4a61ca5a2edd48837e73cf6985377ec11351a21dbad737bec4637daad437becad8b76ebc01e3b062aedd66d3df6968476eb928f5d89acdd2adce3f55333bf839f76e971e5d3339fba0ae453b339699f76f181e4983a0617668f1d438b76abcac7aec444d57aec4a4bdaad261f3b51adcf63272edb9d637becc2b1b3c72ebcd2ee1cd8632fd2c81567b43b0765250725d6eeb44ada634fcd52333fa88eb3573aa24733d2afc77e74d5ee74ebb113b3a4578f9d3886f7fc793ad093cef374f5dcf2c50cc3a39e9332c190f0a9a7ec313d9e462826688f1d4a49bb51b0c70ee407e57aec407dda8d623d76b44a4fb1cb13adc2d143b2cb3ca5b250696f8f1daa4cbbcfe5638f0243f6d8a3ceda7d2acd9c5a8fdd29addda79d769fefe4d66e6df6d8dd1cfaebb1bb38daadb71ebbdba4751a83dd6948bb4fec4e5bedcecac7eecec15e84a6b57aec4567daa425ed3eb12729d1f35a3b50bb27e5a9acbd294ba1aebda855ededeb2d8f6678d44ff6889a53f98d4a1933e47bba6a4e99ef6904d353ec123b919576b3cbc7be59b8c7cec2b17df2544b3683eb85ec92658362e37aec506d5ae09d769fd8816fadeba52d5ad2eef38b94b44926da7d7e528976ab8f01f27bc9372d8cd000673179d434158ef082346796c8b908454480be909c30e72f30d11ca142be2a7e4dcfb9684e7f54c030daa0277de820557ba1265d219322c785451a0506ca24854eba526445063a3008f4c122e94a98170f1349574edd9b615e347e17cd766a3c33ec8a92573f0b81cc26eca6ab7b1d9416ff067aec26909981d9009e99b4b105e126c15be009e0fd0d1f3404a0a80111004f1e9c3a34659001030c46a6a9a1d41207cf9e01ee7021cab36bf001778032c5bcbec2daecabf24b00efbba7bab642c0a0270d9b8a51460f1b34f47e434648c20b189e36486570fe070d1a00c043870c30304e49718892327ac01d36f8565793363bcbd5f51f02e09eeada0a01839e346c2a461935147bbf212324e1050c4f1ba47a01d00000450fc40e4f193861d064cc3085418a89c3306a09cab36fc01d2e6cf0ec5246dc4183871c5a5cdaec40595a01d00000eea9aead1030e849c3a6625491d8fb0d1921092f6078dae0a200f040cc0003e394148728a80d4fc528dca1684c624969b3b7575800f0d0c13dd5b51502063d69d854243ef57e434648c20b189eb2ebeb9001064f46a7a926a90c1c304431410d372c69f0ec1870870b45cffe54c41d88519f1d53593d69b3ffaaac3a6480817baa6b2b040c7ad2b0e9c9a9f71b3242125ec09062607492e21005b541439198f4e4d9578091696df62011301203e3947baa6b2b040c7ad2d0a9a9f71b3242125e109a92e2d01495010ac306260dc3e212d1b30b71870b4f9efdc21077701a6a1179a8279040c4941407f754d7560818f4a4a60cbddf90119230c7212ac3060d45e2139227650fc103c52e6df6210d78804314947baa6b2b040c7a060cbddf9011527689a03668c05064220e9f969c3cbb11ee70a1c9b323e10e4a193e9800f14a9b1d08c204a03668704f756d8580410c4cbddf905176550d45a627a7a62160307b071e6469b31719c0030d45a27baa6b2b04641af67e4346c427a761d35206cffe131a02e20e4cc1cfee6183296df6a30f1b109f9cdc535d5ba1e152efa7736a5ac2d06b858ac6246df66094d1a929837baa6bbb74a1975d0a1930787675873b5c187af65e8b3b2c8510faec494d606d76a46153060c4ceea9ae1776ec9add9d9bb8039367cfb8c3d0d51577b800f4256df60a41671a2eb9a79abe2f79f61477b8a024e4a4cdeeb6424bae8989d92fb81913b32bb9272666a1d0b39fb8839267612e4269b367a1aae49a9868a2295a8dfcf97a165ca1ebba5bc1457229b841f7c835727791bbcd312277c89da05dc8dde6db6b0f727fda7d3a99e3b5f7b4b3eec65baf7dd5ced31a58ec2084152433deca53e7dbeeb611cc44cb09b7c9e6960a3746566d8c750a37eec2cac74d633c338929461bd447ad3e85e7e968c6214c31ecf5e5a12822ddeaf2f0a7a7450fafb556d4d081218c388995e6284c9587b8d894e4c5156064d39f9e0e9b42e8b724608861086c491fe8341d54cd827f7a9a5bf50c117ced28f0755643008bc610422b78114942adf67cba88758bf07acdc3f5b5d0791a1979694d4cdc4329cc9256332908cc435cf490a5b6f1b5632f4609915d688069f33a1b0285069c8a2c2f6eca0841abe395eb52802b55945084845511a3c345cb49091f584aea14c999996e41e03861134be304c6082c3a2948dc11c34126a74e901c972fcaaeb01d53ec64a1657169513b03c4ca15313c725b8c4ab4d83242040d8c4f1bae132e5ca83111454f1dac5c590c3733625e5a902a7ef876e489ab31040d9f248c1c199a5686cdc91732435a14608f1f3b2bc8901c695167454e0b87195e71ca00b91a4b0209230b53478d8f11b43a5459be989c2dc9a2a3849517126ccc117b6202caf20f960f9298a86a41830e95da0677bc689cd07203881bb8b1203194907d9dd9b242c7d4a26cbba186c5151f66ea5c19d1040905c68e2c269c6819d1a46a0912155b5472badaac4c515bc1c72a8d8bb72156865cf9b3b5a5146353252bc04d0c6bcbcd881a31261f1c27aed658e1d155652996dbb2068e103960f60819c164cc59982f6caec66890a1f25aeb2cece1f5c6ac871cac2a291d59632f54a49153c2abcf5ebf3aecb5d6c53ca59a6a3be1cd30213f7e0385d2903c39c295c48894183c58250f56098f558cc7fac6637dc283cde2a182871a1ecbcffa44d39caadbf156b607e43380071e08415595a5f59587bc7ca6ea6eedb5269045638f382d0ff35b1e62b8b13c85dfde5e7fe5298c9699b2a3897d76dd95a7f097569ec25958790a5359e5290f648dcc5306c84cd9bf94595c98ea8a4c2b4b6d65ae2ca5cc62594a97a5789e3da765b6fc96bd54dff96bc87706dbf9ce6344be33d9e77c06f49dd13ee765916f53ec739b91efecf63bf29dfb7cf6252fedd967cf39c4f05512e7ace1d6977667e4db67cf56596a8b483508e62aac9cd36ebc86e6e6816dad0d280a9f76e3b1af3323d998590f6cd96ecc95a58ceae2f26299ec6937a6faec3847115fe124c65a9dacb5db7c6b5a81081178c3af76494cbb430c5f4895bfc109640d829e1d8410b25490670feed86310abd59e3bd61472e4167a1ce9d8a3cf4fbb0a31720b3d8c54f608b492d00ab53d574851518e3db24cda608e05ba42806ea1079037a34d4ad99d2b84c82df42042d9a38e2dd1360d850c0dad5f6d5451c88409ac93d683d11522e4c6d7ca4c396729db0d7ce72c0b3d5abd7cd3c20b74237ed937863f40cfc2fe84f961fba5ab3609187460d0f310b3958193e345989cab38644c6039a184a3e2a14647074ac7c786292b94e461f1c5cd8a341e392a30b13228b0ccf071d312e4762600606af4c829f103cb8f2c6e7c54a890b9519239d9e18604727be1418a04808091518e596d112bc01c1d5d5e36ecf4f19ae3a43767cc18c5429c2b2eecfcf0b224cc065a8444012386c714397d74734e708002743933b64ce993474cd90a33ce11232d94c0d8fab1bc726ad1f065ec2097cba93937ad3e97b32247c6477d0923314c5d8a01047a95b367df0cd3b2ba4286f787a793399904539319d8c2b901972d5a8bc7dc345376a05bce7552277512ec05606e6e6e6e38eb054b33333324b2ebec6acde588ac3387dd50ece6a66be3a6f65bddd2b82b89e5810e861809e7b644332b1a8140cdb6443353e3e13e8f273c77a7db1b9e69aa5abbaf1d83407b2e87e2ac9c737aa6a9a340a0aaa2e6f2cd344d4dd3d4a88f48711a8767e2676bb567f6d9daecf8c46606e7b3b56606fad95a3383fc6cad990106619a692e97cb9d39d46c7b5b84cfeea75d2a6bf19b53c498e4e1faa2dd182c4c88159d36480f863c2dd09bacb69776a3fdc2a2dd1e1664ecb79a21471b1684ecb7faabc9e735f14b2371dbc7492412d9e3c518638c3146c34b074b5d2d30de6c7529b3d02a9c6c3116f26473830b418fa966681ff2392c1a1dafeb893cd7e292166bacb13e7750d43ee56130531d6bcdfcd13498442249a8a58eb3305632758cc4c8104c93cd7413c27d6a9a996340635b1caabbfd6082b929ccb1c714ab7d969ed254398b994cd981cab64b536d01b1da645e53d95ab10f7a2a6b994c39539978cd64ca0e446bcd80c6b6b887409d70035b55b8dbcf685aebb3a74966644903a695a53497ca1ed18caa5a5a60bc51fbada9307ba6ae838ddaefbca6638125cced771653a19071f33b6be5d8236a8524a2222ccdef4c759ecbd4ce89b536bff1da67cfda51d600233e4575175018cf4cc2261846eabc6ae3a42e04d5b37fc8797687537d9b6c40b4d66c9b6343e3a3a703816d0b06b6cb7ac1128934978f8ec8423f9ceedafd35063be3a89eaa69eaa9eb5c751172aecb7ebe92c8d77342144d3361d44c336134a7407866d246978fe320df0483c3652edf046bcb7a9d3433d060a6135e407eb5327769b7aac419bee439d3857cb117f5d40829d85780d45319dcc8b205867cf18817e317f7ac78c99244be5d7aca24036286ccca8cac826212844fd78b3d636533cc86f35263c76ed8f15617567a404f69a566c2ae7ceca1058db1173b08217cd0531aa999b08f3d76a39ec24a33532735524f99afd9a2ca53a88559882e5df0cca4ad9147baecd81d70ba168e201c61849e67e1799e193d8b9ae9ddc09e500b4510a1c89107da1760be1a887507a47034e0e8d0318644be2300093f68a6b4272481e9cf060bb3f0147a7b3a906f172277d97711157a00260c41339dc2118a7c80baf611902f1c01156236d8738a855988939a293d5da7cecb4059d9518f40765478a473d4cd3702d88184473ae191024e47dd01a7a3c2118a7c805dfb08d94f77801ee1fd9095780c2b7b6ebe63471fb08e3a2a14a1c98b88da9315235e56847e07b0ac10a369a6d4311b46c3277498d042b2e349ab35d1d8c484e1b942919a294de1f230f50cb45afc1bc31d29e0f4ec0ed01e50b1ee0839a99952df79f9c882d3c68544be996b2b2b79f4818797750f2feb3b677deabc9e9bbb3453ea0fa735dfb14f3d8369a6d477eeca600e30ef5c818302f9a2ac5b91304e9e2491c897c7ba457667bbaabb00405cdefca07339dfe9783b9d4e98d3d0f29075cdd76473c27cb601acf5d4773efbd4b39b9e1281153715627dcada58bca908a658b1b31ce25582c49b6a305ac47c41165153f6a69ed9f4d4882bb3336331962471e2e5d5c8158d977a707afe23f5338b56e7aa9ba6699aa689d903e49eedb1e918638c716641e43ea7b11efbd639e7ac5910e9e7fc88b2c0a66badf5c982403f07f7d8cff3445910e7e7d823ca023b8aa62c08fdb96da2a5391644fe9cf3d435c71e5116edea3c5779bad57577c20d823f95a9ab9f9e4a10d8abde83eca80bc9cecb790842359dcc73d56c4ee75217820a4da190537814c7df99c59845323197cbfbb498799f3b7bf4a96f6ef039a144e9448bccbbdb575531afaa612bc1caca0e9f207d5e550b9857bd027b548dbe75b3c8b78ec41e5b35789405caa35a5864f1f1a853608fa8bf0dc173a7cb94386752d2304ff4c28a903d60618c6079d329596c7cea41f698fa117bcc2dc11ee8078a077223f60894e5e47beaf7c07ccf7dd8ebf950f1bda05e3eebf57c02bdb59e8f3bdff3f5f2979ee3a49e52df9e63ac2c657e0fed159148a4899eab7aca449b8125eec41f206a60de5e1b384a966b548c69827c77fbbd3278762cb9b30409901e1e2641aeac9589238145cfcd9ef7cc1c8fa2a8b73eaa3cea45ec11056acdf4da5b38afc37a70bdce0a7bed40f6a83d4dd3d45327628fa985cf65d5f89c0fb1c7dc04f6d833c79ee5a1e55917628fecdaafab975fddf594faaeab3765a9d4572f6a230faa5f3dac0e4296d2befa04cc35b65f9d043c9efcbabab971d5af8e93abe3ab15e7c059bf36e972560687ebaa04dbbb1a695164cd09581a20ef6ec15637b709f72b46fe1ac603c6abaa07b14775c40c307ed888093344cfdabbdb47d12e8fc68051e64d0a9a2661d05ef4ca9a47fdc71ed1a2cfc1f99cfbd8634ed5a3c3ca8d071821a7d96b192bd494e420014b9adbab9d4cca6b6fa5923edd01f6a903b1c7b4c71ed72df6782e5db68f7b7a07dbf841ef5c9d50d743e621d60959b83cc42e15d7de31de31c6fd36b2704616cec8c2198d4afa18b9fc366ef96d2cfb6d341a8dcb0c2471d165cc971f5761de6d6c3206cdd5112a5c92bcdbb82487d80e2d232f4860bddb78012f67cca4ade1b2e5c6bb8d137041470b8e14b73950de6d2c22c3890a275a64a0bddb6866cacc14cef27b6a39c536b59c82fbec53c8a9a9a9a9a9a9a92a5255a4b0fc9662c7a4d83129764c4a6a899514155697949494d4528749d411f799039bc581cde2c06671e0c08103599e62bd582f0e1c5e7020fbcd018b8396df1cc64694b0268d913125d09480f66e0e40f0c8b142430d161d5adecd21f9e78819202a98a8197b3707a5dad9128ec98f353defe6c0b688625b44adf91dc526a3dc3e47c17df6286454cef23b2a63f91d95c77e474545452db9fa1dc516d596b4b241c7445b111639de1d55658466c72d88893b3aaabc3b2a096587891f59ac7419797754d61bb82e7660c0c9e2f2eea82d1c65695bb29c68b2e6dd51ca3d6e2eb660787d817b77d41aa835506bbfa1d8a0d8a0d8a0a0a0a0faf4813afbec504b74405df90d65e5375495df50634df894f0e1b5b5e6c9bba17a79a8f09825c58455bd1b6a859e3b39943ad0e859f36ea82c5646520b8796650b2aef86da22010f9c1336555890bc1b4a7925c7878f3d2d5ca8bd1baa6c43d90635bf37986d30db60b601eeb36f18b241ecf7062abf3784fddeb061c3862587222adac0b42cfd1c79f786aa2d6dacd4d49accc91af2ee0d490b98b8b3a5c6c8599e1fefde9055420c956411146a3cdebd616b6dc5d50e1b5e7e2cdfbd61ce1d175556dec0d1f1ee0d2b1093b80289fbac61ddd2b06e6958b73468d0a0812c4fad5feb97060d256898f25b03d86f0d527e6b18ebd204cd94235762c478b7861e5baa9c8179e9ea7ab786e408f22c51c459ab62f6e3dd1ab23a50c34d5a1b347edadadead616bc50db12329809c71f26e0dca3765255879c930637bb7063f453fc5b1dfc515595c91c515592c168b64796abd5aaf8ac527c528bf8b507e17bf7e17c730d861832d39c3099f16ef2e569d58a621221686c657dabb8bc9f6091f367ee4b03823e6ddc5acfca38e161a5866d0e4797771ab4617136e41d04ca4787771c411382e4b5270ad2821cbbb8b604c2298b8cf4434221a118d482412dbda88679f9db8840af1c96fa293dfc426bf89639fc17cc9621624cc1334ef2656ed21e1860a2a1540acde4d4c52f95263e72ccc16ac77132ff0756487d51c2079dcbc9b3800146f66bcbec43da1f36ee29b316fccd87a542961c7bb89459e8a3c59f9fdc4eb7ae2753df1ba9e9e9e9ec8f2144f8c27f6f4b464ec49f9fb89c9efa725bf9fc6dcde28c981c3c81be5bb9faa3858d3838e551bdc9bd7bb9f922576f850210547189f773fbd6c4c7839e1a1054894773f1dc08513a4da9d196adedefdb4858d46f28d9d253262bcfb8967c324f26cc47d06fbedc4cbe1d4f6bc1c4e6f9fdda9cbd06f272aac2e2727a7a5139b1f93e827ee73130fd9c44336f1904d4d6d9a94fc6e6af2faddd4d4d44445d56645cf9f363ed8bcbba9ca03578b1779500069d3f6eea62490b41245b2909133e6dd4d4a3b4a963d5a78f940f2eea63526714ddce70c3bb60c3bb60c3bb60c1996bc6548f23b4309bf3320f99d2143860c567c6cb418c246824bf2dd19d8d8f073450c450d14efce00e58a4e9a145f5e5829f2ee0c59187c2d6133068a98225befceb09580b715253801334386cbbb332885cc6833c3f2058c8a7767002bc350860100bf31986130c3608601eeb36360420203060c183060c0a0c4242a89fbcca46452322999e03e3b13932453d76fa623bf998cfc666262625a5ac1b9d3c4879d3f6aef66328183c5902f5a65cc20dfcd5425cccd1909aa2246e8bc9b8958b6359694422287897733996e7c669c25bdf0f06af16ea6186e5f5fe2caa290e07a3713d84ec770a76398c1efe12e6bb8cb1aeeb286c3ab21d570381c0e97bb1326717722eef3d2ae6a6957b5b4ab5a5aaab154e4f7d2d2d2d2d2d2920232c2e2e0a9837687eddd4b5560b26eb40842840cc5bb9792714c629cb8cf17dc2eb85d70bb00f7d92f30f17181ebf70522bf2f90f0fbc2d867bf6076e142da85b55f2691209532c628bfde7da1ca4c0d1424eeb0513363e7dd17925bb4e2d468ab8387cfbb2f643db92ae3032b2bc9d6bb2f6c6da06dc50e356282fc81f3ee0bba38ca3a7161ec8cdd78f705304a6094a67e2ba129a129a129c17d7625264294a8b0ba9494949496504c2294b8cf49604960496049495e9f9386fc4e4adafa9d949494b4a461c2cbc48e323375de9d54b5470a1b3e38565ccd797752f2f3579d396a5daa78517977d286137ad66c59058181e2dd49402c00b1c0e1b7852d0b5b16b62cc07d760b4cc02c08f96d21c86f0b407e5bb060c1c252049858193a606af448bedb4255da18db962d30c844b1f16e0bc927634adc108223c78a3cefb69005656d0c4d97d80eb2775bd8fa123882d0f852e3c5bb2d2811804589999610e51c23efb600a66b21d4b51046fd16ea92425d52a84b0ae13ebbb04ca8f55b88d525140a85cb11379ea4a9f19ab2a68b89770be1f82023b2162606981cef1626ef98c43b719f5d3817ce8573e13ebbcb04cdfdf1dbc572b38fdfaeebbacbb2b2a49698382a59deed5691019b9104a245898977bb491467fa2ca9111763cfbb5d655b92ac2536a0cc38f16e174ccdd57cc36feff3ea5a6e7b75cddf3ebb3359e354585dee6859ca7c4ffbece6f6a5b3a94a2aa84a2aec0aaab282aaaca02a2b54a850812c4fa966aa59850a4ceef07e57e8f1bb42d6ef0a3c7e5760c01a267046ba945e24bcbb8201a49c81b1870c0d3a6cde5d818b9693b63437616aefae904565060d9a8e1f634ade5d814415ade5913d26d2b4bcbbc20f2b355c34d0fc20a27c7705b50592da026923a949a424929a4442424222cb53aad6463afbec4848a0df483b7e23e9f88d94e337d298903a29e4d4a87273e2dd4855cb352a4e9c6023c7eddd48c93b61ca12fa20a77c7937d288ae3137d494fd21f3d5f56ea4173fc82cd9b1670c9b9b77238da0ec08133e6152ca28df8db4c624ae89fb4c818d021b05360a142850e893eb43e1ecb3534052c0f19bc28ddf146cfca6306707d8d90aaa1443b4de4da12a831a2c303360a0b921f26e0a2d701343e6cb189b3c5dde4d418d989a373b5c288152f66e0a28dabca1b193a74b0e907753d8000b09144468ac0951f36e0a504c2294b8cfc11c58300716cc810583c1e0d95930a8c2e87710eb77b0c6ef208ddfc1b6b2146368725e14117b77b0ea8e8a651cd59430b57707934f040a181c3a30eef87977300b0f17b41650ca66c8787770cbacc2a64a18395fec907877500964b365c9e3c90d3159de1dcccd3089b919719f8f72584739aca31cd6d1d1d111599eca71e5b88e8e943fd8df4779c6efa37cf5fb28cbf87de4228a9d256653e67821f1eea3ad3870662eb8cc4c59f2eea364708c891c36c4800511f3eea3ac0d48d4dec468f225c7eadd475b31d6d67e5475a18d79f791f22a0755123f6124c8de7d14c724c689fb6ce466e466e4666464b4f6d98dc8f2548e2a476564d46514e3b7118cdf46c9df466344ceb0d4d24c904979b75195084e2489f3670e9a182cef364a6270828d4d58094b5cb8bddb284beb0d0aae3c7fa85ebcdbe845580f1e59d4d4497bb791f2023ec698114266c713b2771b9599c4b2b8cf45a9599119dc17a515ed22b6b6cf5e94965654a42c7af1bbc8c5efa216bf8bc66898a5415251c951e2f6eea22a0274894341024e9d296ade5d941ca1420c16166971b06e58bdbb28eb4fda893a5ec4bc64bdbba8c893b82376e6bce500f2ee22351751e2ca6c4499e2f5eea21488494c81c47d066e01b7805b402010f8f5050482a1bf8156bf812c7e0357fc068ea500881c18666d905adcde0dacfabca38433234fc8aec87937d00cdbf1828d96b7256bf6bc1b78c5c55595236b26a4c47837300e181e267aead0a991e6dd40250b2a3d5ec9333ba0bc1be8c724fa89fb4c9422895224518a2422222222cb53e9557a4544a4ac42a4e23751d56fa214bf89d2deeae820fb91d6f56ea2aa2a1245ce3c9901e4c8bb89929fd3b8e08c51e58081e7dd44599fa9d6ecb03376660a8c77136d7d7e83a6051925494ebc9b48f919c98c25666d64baf8bc9bc88d497413f779086d1b6afbb6a1b7cf3e543684e2f7d089df4354bf87c63efb90d9d050dad01a9d2524d27461f3c647cfbb87f6121d2548f8919c23e3dd433f2a2cb4f21c712b8184770f1129e2a2ac4e1a9a9f2aef1e5a81111b7d84e8d9b365f5ee213e6ec6789918f34325ebdd436028940928940945bf27a0601350b00928d88409132690e529140d459b30417936219bf83d2197f83d2193f83de16843c5933c6247aacade3d21051a3f4e58b85993e5cabb27246fa4d811a60a991695774f48337685c5978c2b3d72bc7b029aac2142e82c8b5c9d79f70405a81053640a9bb0af32ef9e30c324ce88fb2c846209a15842289690909010599e42b9b6d0d967174296f9ec4219f95b28eeb7d09fdf4264525ec0b833a6c34f9b770b554d51f9402ba3452dabccbb859247154ed2b4e29ce13af16e21245a676f5cb0b8a0b9f16ea1addd1d3841eac8b9520295770b29bdec8003054a1c1d2cef1602434f04f9f913719f83d0aaa01d04f7d983907e7e07f5f91dc4e777505050d052a9f63b882da8adcbb28a932b3f926d38de1d84c1922b78e2b2dc19e3e4dd4120e8326749458d09d7977707b939f2e6cd969c2b5669de1df40124708e587ded90f2f6ee202c33e47cede0f1860bdabb83cc984433719f7fe7f2f73b97bfdfef4796a7ceb7f3edf753d2f9edf9fdd3f3fb07f7fb7767ed2b081f2f5d5633defd83000940622cd798ddc8f1eedf08ac272cceb8bde1a952f3ee5f1293225f56c07003a27cf70f03a41de59fad2fb418effe69e15ab2a6c6441c1a5ceffe2931894ae23efb943ea54fe9f3f97c64643e9f728f2fcf6f1f9edfbe3bbf7d639fbdaaacd1da4182489e77fb4e40a70d123a7a528cf178b72f4bd89cb73e507c3c897bb72f8b429a3831b6a0d07245e4ddbead26557ece44994135e6dd3e73cada1b1a6edcd4f048f36edfd9c2249e2de23eb767b26dcf64dbb62d599e3ab54eadb65dd1befd6eedfc6eebfc6ec7248085042467705c7e66bcbbad223249d145d985230bd5bbdb640867c4c879f3c20a9533ef6ed98021b388294de0f9f1ee76ab03111c493a5fc2aa687977bbe683471adb9eb8175adedd6a200db4813450dbf7017afbec40318080808080808096406c6526b12cee73cfac67d633ebf57a3d36b6ded967ef69f5e8fceeb9fdeecdf9dd1bfb1431b8c8f4b9ba62f5eede8b124aa873c5cacd32f9ee9e0d2c7e9428911104489b77f7b2726481b186e32d0856d8bb7bc82a1438e2c250f9f3e2dd3de51e374d76a801c391f6ee1e10930824ee33bbc56eb15b2c9bc6ae7d76962c4fe9afcc845d7fb1679f9de562e5fc66e3fc66db7eb3639f7dd850d2d002e3aaebdd6cd5672e2c2bbce8c9c1f6e3dd6cb20538d8c68018f10292e2dd6cd6671663b2a898b4483e79379b876a4814384f867089f16e9645d7971a619adcf0827c37ab5b9844dd22eed7bdb2fdbac27df6b5499215ceeff5cdefd5cdef755d572956c4906c0943333bf1eeb52a4a143145be909044acc4bbd7e4e7ae3d389225ecc191e4dd6bd602667cc5b982a4aa079e77af5bca3c5957e62851d2c4eaddabf28d15b3b12835c40079f7aac724ea89fbec9bd7a74f66c2be796ddf87f7f6d9794e7854583c1e8fb7e4b199318966e23eef96bbe56eb9db89eda8d87eef76bbdd6e99254689064d4e172037debdcb425ad1852d2d8db20bdcbb775b4a4ca292b8d76d1d9b5297953a9d4e474676f6d975481d559bdf3a2c36bf756b7eebc61eecca8a85962b2ee0bc5b579585c8d7da95126469dead4b7e56c1a50d45dc902c2fdead03c18d961f3564e840e2e7dd3a07f020434369620f9a12deadf32165c68a226162dcd0f16e1d58d66112b38eb8cf2adc6757c976bf552aacaecfaababc93f37327ce7fe7fac0e5e0727070b9b4b5cf9e23cb53d92a3361dfb9b3b2b42cf563969aa566709f3d5d4bcfcc8024dfe04923e184c8bb735b9fddd69475b4c84811f2ee5cd6daef5c57eef73b970bf3699f74edd334287150503f60e846e1fe09d90e3f35486cc5887b775aa5b45c3384c4993044c4de9da2658921c18a4c942f26de9dda3112864c8f903327c2bc3bdd42011991396b685a56dade9d2a392831a3081824da9a14ef4ec1d4fc4ec7d2fc4ed53e24deaddba07ceb370df7a79fc8377f9e547f9e55565739fef4334bc89fa7d69fe7d6c9f5a7d79f5f7ffa09d6d6e6cf53eccf73ec24fbf33c43fbd34daf4742724c027b446253f2c1603018247a30e8c6ad0fae411c4107214b69f0a04f208814743318f4a08d3b5780488141624a7087561a9b3a24d4e013448283e406a9cdef28b62d8fe42792ab6e863cd29bab477ae3e79190e04c7924c743d82392f17c0d1aa6b065d96afb2db4fc1d7ca29f44221b374f6c03e6896c823cd1b110f6480cc21e8339c0fccf7fbf9f2735652929ff79511b61fc6fe887f5fbf9047e1d7ebfdfef47bca2f0fbfd7e3f0dfefb59f8fd7ebfdfeff7fbe968f316dc826320ecd182060d1a346870acc51e3550d021e42938fec11e29a8442291e8c3e93bac7d07c73dd8630724242424242424242424c759ec11492a87899772cc833d4a05836a7e5489d5592ea7a40583fac6078316f852a3b3c44a8c1d3f6f30ee838e77b0c7a00ef6f8c3a1e37d3e6de37deef3249f476529f37d6e14f23e9f0fcbe72064a9a0fb7c02bed3e7731244f1215de5d07a9fe32d31ef0bf2f91c8f6529a2fb1c93f9cede9786d462461a1f6ae0b0a8c1c5c99012249655d0d4787d5f57f88c91b9d146c2279547cd4419931c5dbcf87c3e9f9b3e2776792291e840a2e31cec918884e4aa124730180c0683c16030e8f8067b0cea1f8e1bfffb85e1a8f13fc736d8e30f8b3dfaa0b04e3c94e31aec114a7572a0933b7952767272d5c9e1de69acf83fc734d8e3cfe79bf23ec733d8a3ef8a3d3a199bdc04fb26c732d8639315af7727bcebbaeb49ae17dd2b45de756bb80e42964272d727e0fe5cd775d7c49c1324e08ed80013e39a91f18227c518d79531ee94d9ff7eaeb678fee738067bfc019190683c92ab4856b03c926318ec11290ca829eaf4b94ae27dde52799f037de8b3827cdfd7fb1c27d9a3cf189cf141578362ca0f3a7ec11e83ee823dba67c17ff2334b5198a1e59f1cc8e39f8cfc93e316ecf1c9fdeadddde7ee6faebe941183c682cccdeb674dac70a9696952e7dded8c1fef6e9a799f9f3ec756ecd1c7823d3a13993acfe478057b64dac244c6a3eeeea817b5f1cea3a89b2084e084ba4982268f9a6f5549ac271475bca5e3d11daa63a0a86333241475bc4483280c649672a97c28ea190b7542d1a0a3e80f454df8e8a166cb09103938de1047c0f859834384eb883966c259a1c2468c093c6d666f18182dd420b7d0507b37567ee8b1024cab4509384f5053ec4916da924a5814258aa2fefbfd7ebfdfeff7fbfd7ebfdfefe758057bfc0575f2b7f183242ce3a04902c5cb8d77b71fe483e64d588f2c7d9ed479f7f0836dde2469d322636122187cf1c1a0922d4be5972548dcdede60d071157b0c8251a1221646c517e68bf2f97c667adee7f3f9be50bdcfe7f30f675adee71da4789f7b80e57d8e53b047df97d589286464b8ba5e9cda05524a191638deb69ef4795d3785bceb18057b74d747427215c523597924c727d82352fbc4a5ea9f1c53b1c7270d5bc4dec9b109f6e8b4e5eadd7109f6e82a09f68866b3a2d1187ce36e7ae3efa8371a036034ba0a43cc1bbd05a678a37b0cb237faf0c51bbd28a3cc1bdd680cbbba7aa39b35dee818c91e8d4918df7adbe2dbb66d97ad1b5ba7164eeb206429a3b73e015fdb3a09dad6aa75bd757cd5b66d180c15dff65a6ca255dfd6b1599632bf0db6adabadb7ad970e2d566a98f028d31239d2a556030957d5bad9626552cd850ffa08f6180c4b6abdc075731bdf75dddcc3775dd7755dd747608faecfe7f3f97c3e9fcfe7f3f97c3e9f8bc01e7d409a0509da50014911c50c1e2f3f2d3ec080bda11225460594ac9db9e9dacae2c668d42bde68c4aa9325e52a47923e715ea3d15dc01e8d577eaffffbb9b983ffe3d2f43fffb9fae77f3f07baa8f23ff718ff0b7ba116d6e2c8ffbc054516b0c776c9cd37bfe42b608f4b450716dd87c522162f5f041655148bc5b65874b5380114784ca0c1c17903576c83c22b0f15b32865452c2dbe8825ebdbd655c01e5b742ccca39e02f688a2803d164d37f795d2f0782517c11e95ca64f934adfa344d5d4fd334e4a7bd34459aa6c1343563e6d35eaa51a4be2b639a2eb57cbaa63f4fd3629a3a5eaaf874283df11999a9d236dd3999010b295db880a541f9f3a64a4f82f001e2c64b9e3da90a301746c274ac9dbd306a7ca9922cd345459a162547d61b332ac4de6dc22d2551335206450f3457efc6c854c8981a39697cc01832e7dd98edd31e40be14f101c625f66eecf669dbfe0e367d1bb52cf36debaa1a8e6fd5c87cebdefab0f562eb27608f6daa4da0e80944dd51ff80ba3a6529e65137c1162af33ba8562c9e49f24507a279f14577346fbe6806cf17bd04ecb138443595e9e709d80917407ce8e19282c9132d5e574dc448f95d79439219533623cccdef67e27fee74fe77268c89305a5c606f30de9f1938ff7312b0c7dffa46a319ab37ba59c21b7d04ecd148a44bb0f94b1a8ef7b9ea4b73f13e17017bf495f1f2410f017b0caa6e1921ef7a08f6e882803da619cb5fb8e6cf0b7db347a19a14afaabac4abaafa73555513f62aab6a12aaea211455d54950e55527155725b3547b954305e3e7d5a0aa91aacf5515557117128964a16ae00758da18166a6c8479d52c7073b2d4b021117353a5a498f11137e5480e1f6a9f3a3666bcb519a35255d5e8a50459d698376486a84cd610794282102e3578de8d95afa2c124b1280f554c2aa87966c6e4513f5157d58079d4dbaf471dd8c5cfa3ee5ec01ef5e1dad5a35efc62e551379e553dea1fd6d01ef50e743cea1eac593eea1f608f28da8aa7f87c6644dee753c3e57dee01f6e8d3e0f71a80df42c19d14f6bb29ea530f6a983f9f7afbf5a903c5f0f9d41dedeb531f92f874ca182a9f92a1fad4c9a7de01f69802c5e130338282c61b197ca8acb87144c58934ed081d2e5068d9914c9695b5bf6fff7ceb4ee4db13a059a1d24406922f4bde764a181bdf3a07d8635b5473f545df007b2cfed258f99f6b803dfed40cb04715832aaec7c031c01e318803e3b5f6f35a1f19e720739fdf208410d453dcb84c3ebf31c6147ce31c386bab4e98a2df986bcfe3319d6a241279423b5edea981f520331592ef6c95b1f6e41caf9168cfca2cd5baf6fc55c17716cb6625f259667bedd92dc36529f3dd77eea3abe4bcd6567a2b4bf95cbbe6f2adbd5ebba95d83e9d1a1c5e07e6bb4d7ae97594ae8daf59a05dfba4dbbbd760d87e2b5ee93e7c43ab3f6a9756ebdf6b36b8f9c138ff6d32c4b29b9f6f3ec82ef334dfbc9c6270fd2efb3edce6f145995a596ac86bed12b14ebb5a35960a8d6db6f54f9da51b02cc5e4da51310cbe5132d4ecb5a3687e7ebc46d3ecfc46dd5e3b0a9722b394f9197ca754dad36492f4aa8e6e72eda95776f29d7e694fc7ac52b2d7e9f2b5a76c59eae7dad3b627dfe95b0ee9274745477b2e2bb795a5cc27face7175bdf69c126927f7e5f63b67f6da736859aae8da73691a7ce7d6726caf3de74602c8ebdcdb9cdf6ad56b57932ad606df6a8eacd7ae6e916023faad72c9f9ad82bd76752c4b41b976952ccab77aa6a2bd76756902c76b752d8e761d525795a5cce7e05b67957ced3a2c5d8eb6dfbaaed7ae53662929d7aefb9af2ad13d38dbd769d19d5db6bdd199cdf3ab6d7ae73cb5246d7ae7bc3c0b7aecfeb1db2cac584df3babd75bb4efb6765d19f8de79bdde295ffb0e0c8599d73bb137bf7768af7db7cc521d5cfb6ecd83ef5ddbceedb5efe0525c11fabdebe3e6372f89950500df3cadadd7ceebb2f19ae7f59aed374f3b0f4d03dfbcb4d75a8f0e145b42f8608933e5d54cb2a2f01823c184d5bb5b2a624ab47113848e1822ef36d9f0b0a3f6440a999b8d779ba6951b6060b8f8c95286e6dd269c9196da8d3148382a66bc1b1b60085b9a263c944ab377e3ae2b35155d6968e0e053e2dd784b959f382c207ae2eebc1bb3bdae1164481f27684594bc792ba3e5a54e6aacd75e3bb0b419437691f26e3df63a4d91316bc01c5111e6dddaec75559f3229967825f3bcfb44be0ef183aa4b8c136b5b62e833509a6c9992a4488b779f76e2fab859bb82c46dcebb4fb0d75b636eb4889b530289779f6e4954e0d972d6674e5c9c779f70232852c2d24e16b82247de8d6ea526be662873a0d5817b37daa5a48dcd2c4d151a1e6ade8d2e5f6310a38d0e9d332c9466de8db2bd365156c4080b257edabc3bc57a6d9665cbca1f2e593cde9d66bd4ecd5ea768af1370434d091f52ae3c81f3ee5cd56b1b3de2f498c5e9d1f3ee5c7284b2b7125925a81841f1ee1cd86b23ca3657702ce15202f9aaf598c1640dc98d3f64de9d837bed315abc91f9596ba37ab78a7c4d45cc941676dabc797bb7daf5fa4b169d1f79be94bd5b55565892c46a471435b6b477ab6cafe39ac41992a78e8cab33ef56dd5e57b9b2634e96e59e34efd665bdce52a5c41a38246dcedeaddb7a0d825615b03eca12c8b4bd5b87f6fa05132743ae9cb8f0f26eddf2b59b7b977ced3b2c13e4593333a35366cfbb77634f6061aaaa2455acc1f2ee9d590466e821010d173c70babc9b877cad33e1e6678d95951927efe655bdae9396640b7945c69977f394af8dd4a8a3a44a0e153eefe681a528f31af899a534780dfc02ec5103f504008a390f000f813d0240c5e03d68bd07b7007bf4a076e8d0a143188a1fdfc12bc01e3b38007eaf9f0195cfc0d52e9fc109179f8153803d66d056c000033f317015cc63e02d0661542c1e039f007bc420c8d8e6b7d1c9c6123025b4b84832e3dded1bcbc8a8a9c127489994770fdf28268f1c3034780881d2e5ddc5371ad9bcd11dce1b159034c1a2889d2c6e5d5ee39f37ba04d8a371cacf2c05f55353ca9ff208b0c7a9b67d2929074ab92a156682eba51c02ec516a7d0e7e72082b01e639c43d0707813d72689f3ecac947f903d863940a05050555e4a1dc01ec110ae937849148f11bbc01ec7183aa4183da6bd0a0210c19e335f807ec5103b0582c168bc562b1587406b0c72291482412e3823cd117c01e894f4ffef4f4f487ec9f5c01ecf109a8fbadf96dfc5f89226d6be43829f1eb61768686972d4ac83079f7f07f6a304ef4c0fab106e7ddc5fffdd6fef787caff866ed069c3c26dc7932aefef8f94ffb907ecf1e7e434f54e4edec679a725efe409608f4ec0a6a6a6263f48bec911c01e9bc83e431f319fc10fc01e33a84b8fc1c6637003b0470c5b4e097ce06459e531f3eef69998d43c93ab7a4a045a9890807351a4edc4cbd467c6337901d823930f877cbefc70cf0f9d00ec71d82e2d2d2d2df900d8e3d2853d3cfe8277c01e2fa84a4a4a4a7b68bc9283608f4aaee593f43cf924e7803d2661b120e62dc09dbd853c7ede821fd9a305a1502814fa06ec51e80abd1b7cd775d5f5d675a09bc7c6bb2e00f6e8bacfe7f3f97c3e9fcfe72f7bf4b97b78776ff16c79c713e3dd9f3d3ab0ca57b8a3e42bf807f65841cdb569da766c992306093b597ade3dfcd64d3d05a5e6070c1f6b5aa4a1b56d7bc7c8b76deb01608fed9ae5b7d02321b96ac7ed91bc7d2b7b243b341ec935608f48c025f58caa0e5f5555b5ce9c5755d501c01e55a92e177e277d4a86ce904fbd4de9a0f9b44e971b974fdd037b4c87bbacf636c17283c4923353bec0a8e4c811850b1bda5b5619143c546eac968fba57298195294d4e98585375e445dda23cea1dd8236aeef529380557cd3c852973924fc133608f145ab4dfeb07a37e0b7dd0cfa0ab6f1f9443f6c138383ee818b0c760f08fdaeefc911bd9e3d1147bd46c46635c6fe452ecd1482d72605151515191ab45ed988e2f82f3e886479d037b44b5d65a7b147bd4ce1e8b8c402b0ff40dec11a80a3d5146f3444ee44944445ed4533889442255bc44aeeaa90e596eea2c6ba85953f112695952d1d2244b169b77b74fe466094fe463ba54f8ddf4dbc3339530529143c59d15565efbd0c66b2fb250bef60f562a5ebb06f6a8c7720e839ef96da235800d9989342b4cb8d29ca199f32626264f1d36ef36c73420068f0c2b3442dcd478b76996663355781ef50f55708fe2205c32b8d8a0eae1f6a2556e8f7a913da24b227b24f2fdd0d0d0d0d0d0508d203f94e6513f517f628f288d32afdd893d6a6f628f431afc841b577e8267608f136c50bd90900385843c290b09b9d1869917f22024e4131012bab1e4858484841c5f09090909090909e5f900bccf31b0479f0e4551144551398fa2a833b1471400dfba99f5ad0fd9639b9a73f6f08bafb576bff13acc868cd7bea43279d52fb04755556321c30d182e1a7dc4741a148fad297cc27ce401f2a6585e9fba127b4c3d893d0aa57d909b5c1fe416d863d08e329f734f6a2aea9c1baf7cae9723937310f494fae63c8436977312707d2e2897c7e454cfe57cb99ce3ad2c654e29d3f1b91c5acef11826fbe5d03e77a4cc8a0c102625743979737ac020011245d9a5c49bf35c87ad3827bc547cd92acb8d808b131a62d6cc70e1c8958591c94203cf94322cefc65d9f9b42d6450915321849726e8efdcfcf9f0bd9a61da854289b89a37916635231c86600800273170030281c0e8a666194045914e30714001666a65a60561b08c469940331638c21861103000000000046461b0220aaed11c9557d1adeab008fc3230558a7a4264c52638115267ff94379473bd865f49c0f6976ac4eb694c7408077ac2ec38d8356af4b5499c5de89d6e9885e320458ea9010ca51b79f439e442d39881526d8a8a45b03a202b927ed25934db68358e7b6e585775113b7a76d40d5a1ebbd88111c226fcea58435b183911804b450ec404054ef77ac76b53a4ae27f442b933d95f57dec830328128d993ae997b1314926fab47417b3507d7941211642c8cdb21f87bdf9b825cbb8d7030d9551d956f9723c5e10c2969073f383f12ae64200d226271a138c435dc02d9c4cd0f58732071c13f1b3486e776291599d71d545cc021a7e2584d24ca3c60b814dd268a084801abc2fbac9136db0c66676a67038c37421bc72053566811a31a0c1afd21871b1fcdb985ffefdd7204ecd821f9b534fbda8d79d422e46e1a4c88e942ec7cc974878f7f2f98500269d50b023d0f471aadd00935249d27ed3260acef98362f68058fae17160241621c5baa04c6199f3218e33ba2b76ad5e5374a4b1766b36040201d0f2cc989f27b4579b07d7f70e08010ce04a7845bc11180c4a0eb1f131deed03c90fee1198d2f3179ab88163aa0502982330135c7204be17f3fc73e30394bb7562a7da9aa1fde770bc2b45e2e73bd056c0e080b804761b01940240bbffbe21788006ab2a9f74504dffbfe46c4239b2585f5760161c4ae71d9ec637c4bf36694a08ac7ee8e9129abe06c21514538f3b82bb4f3878992ae1e24e5c471db1cc2edf9c993bdce6488cac5b92918fef94ca7986855e8323e2e4c183d6f676a928df1b813d35f6729e9ae5a1fe1a36edde2bd6cbcebf5b0bd95469b83c09d92a5c8634baf15a8ebcbb1d2342c331249e70f8584f20ea459dd84125e83d21265e0e468d0f514e79e9e056d763947b1fa21c75609350a017785c7f5389ccecd3110bb637d8e7bb69576411233177644b859a97419e645d867ebf13d1cc4bfc54d16c81f635aa276a09572946de08af912fb76af9c940f086077caf0096e5e026acdb9c50fd9504c292d811bffe6fdb45ccbc96db4d584cce9c7b17331a792d297438c044636742a7723e7cfeb0591b473c6db8a630ac5ff95ccf364bcadb78528603d46e59d542a077e0dbf483cd69b1e8261502c845107e55e8d5c872a4b551ba8589698b805aba57c1bd5008bd13f78f43fd432f5cafb021859489057593183cd8d9e8bc3c306f0c35662312925cb0ceb44305072b0be7ac8db6b261154268a3338ac2662e2d95446770126e436777347571a710fe1987afd6d89deb436e7d04a186b23b2fd24637436431b491b515d90a816e33eb04d64be007243bc209ff012f1a0bb9830e4360fd1be2e311ba47463335a5730382adb522dc8df38ac4dde8962e6e1ab7859eb203fea233956dac77d8df2a09aa7ab184fff3554f611d69cdaa98012a1c26b13202bb627a11d8152ed204606e13a2d48f2e9d7b3eaa2da05b4b0a5ca0f5a5ee15f46a36c8fd5d4a2e6988511f160d50b31d0881766125f4e550594e2a0e4ad7a0e66b49db982bed80300058caff381c6086b7bce60135508037d567ca87b30154de23b55ec714cccaa4602af577fe3905800bddbb74208888fc0c0569114bc51977bc9b60c6c992457bad9c280a6d4ebc8ba14453d97c66b6629d0ba917cce8f045e5aa65f109502a91f1a4a9cf68d656ca9528c5b4448f7d17793c9d078c21fa21567175ef0f8cdcc8f1acf7cc2547488be12b70ff645d9f5321e4b32865a05169497150b73eba763a0df89c1e5aac82948bb741a360c97bd5a1034a39fc276fdc25c0807edcec56b32f4f81c8ec82c5a3812115de8d3387269abcf81be9cddf3fbd2475a43f3025625244fafd85d577ed18b6d2cb42249bd7965de60efe7ad4c77ec85a50079b6cb1cb7e5644154b28e6964ae5fc1f4c618cb332823bbe6bbccfab6f800fb50f867752b8324b72e819a8d4e675025c864faace2a0b0adc45b0c697df0b3ab6d28ce1faf1dc9805e476d2f9acd5431e4141fc5a5905a58c1649b35803b8984aa9070c697d638acd865a97610275ac57d1c4c5feb602fd085dd2e9cc57d1e32cff3c5c015ca958563c7fc3c53dda808bf0bdbc2ed47865e6d8463abc392c40b62cff8b738dc978f58161b028ce172b06bd24cd40901ac80ec4212fedd031fb1a80f010891a27cb30349ec1641ddf04067a62e06ab3a21d78cc364f1bc2a69c3a9f009968949c30fa6ac06714919fac86014f260bf1fdd28e3e6d09f981f9b3a61b3f12f9c34b905d9434237860a857d35ba985f6fb6bafff05b19899e34192aa3202b4cac692add4c488f14c1cf26cc9c58480f2a4dbf125e2537e8c98b05ee6b8a37881ba4d2d7976e10185211e7596c0ea87df736364fd38b8e89d7945859a91ecef9ead1981b50b359d743db1e51072104071302aab3aa6a6f9530b609dea9541cb1e53fe07bf42a7650e654eda5f11db55e891bb580e31e891e469f3a182633c06954a60aa8cefd85aff8156aee406e4137077f38509c96f608337e2a45d5084c589a839eb881f5b277ecca7ee9986c6085b357a23d07cff492702c8c9d1685cb8fb7d50b7d152199b548da2fd3475dbbce8d2140c73d41cd66816933a75f65664d21f6086f031de4fe5a70632c18fc6fcc5a7f9e09e600b072a6598c1d9ac22707323389a8d6b2143cd4cd00114de82904c18c9cea36bd52daee9a09a3858c16a545199f3e3bfc5392b87cd9ee1aa4587ec81d6dd240985068a0c6b9b5318ccd2a8316d3b08eb2dd0f85cb2b9f9510aa9b0cba8ba4566ff9a9e8950e9ee1d5b223f849979205dcb7c32dc469d8fa8737538574be9a648d1e60e41f7e77b5a02d28f160b97eec5c623d1d009cfdc82a91e8a8f66ef336d9c2fca84887a4b8d790d44b4343e52070f4279f82c48e84fea5ddc1618bf8d4971e189ac45d8cc6aa09a3b6410ed0fd54378ec14182b179fc4070048c9d3a6c022dc3d99bdceec148b83421353f40e909320b250fa00c567728d507700e0510b4daa1f325ce96f44bf77d1f332a721db8f51b358a5e51c7fd623ef3ce1ff89711dcf034902fe948c8eab202091f596c6444d77926e6b302cdddfd223097d9ea83502faf1a863de7c075efead3092db949d104ee633b5fab0021d05152e8161a0a5f40ffd47b66c8d70d2944a4e1867e3128c9d58f0a027750394a251c0d273a27d279bef8db0d9c9408967126a00774c0cb5bf905edc88f2998018108b688a52a722e37542717ec26a4a5f17fa3bba68f2a3e8b6be86bf8b58599f38b54e8e453a99c7b7b062d29f424b27893819c047294b196b3d4842c06cf6617b1498b48eeadefa58049f2d0430155bf22542f9aeeaa3e4ce8995d185c8b46b2a5693963c664ea98127d79aea5bf72e4e7779f1583442ef9bd3b901cac0e6965f8e0e35d02817503af74137581e4df7e157f6cfaff6f86c72712a9ddc8fc0e47d06e9bc85119ca963a37863e0882c32a7c7c5b29b54516f5c8447b490f8c2419ca13e6f329f742f853b802e0b7a2d3d3e6882be60a6fc161fcce9fde0fad4c581296805d69f7ada3e08a2f4fdf3fd855e5718dd08935d25b39e871ef5a7a097e1e6c6d2cbd1a2f9bf0dde18ac71a39c5494a6e86dece599fb5be2386205edf527ca7806811416fa19165aeeed14ff569f7a75613373ad34f9f45aa935d24ffddf39f86d92c608be41df6ee3b695db40b3579d88bd5c741eb4779bf7da2ea60ba450d8cc931a162ca5e9a87aa587254a5fc4b392252130c14407366209c65d0918879e086574abf0777dc04a0bdad365966a0011d87acc4280b3e57b9aef02f8f835f074018e9045882a7192139920764a58e5003a11fac16af287c1f0d6d0e38eba3885034fe1e676c57be1f71e8742c077630c098177cf66185c4226068a96e8b64bef8f07d7f81adf4d115f4deafb710060481e2a397ee0fb2a82649da69a820dd154b9fb182f0dcd4d9b811e53191317328bbfc50c0ea0162cd272743221be3009bfef7e76e588c6f58053d3443b55c375e391a280af63c3694044ae91fcc6fd20b5637361c6b5fc759cc2112d3ca118fdae049c8dfea75bd7103c705618d868ad1d04ad6607d1740b36580b2063d9820ed0651ddfc309714cc16b6c1cdfdae7f72063b767477863ce0a931fcfd236309f708fe7759034135c58fb7c0163f411dec380c506dd9652c181b65a0e42c5665c10cf8b4f3d50051714cccc46d637d514c3038ebfb4e543af61dff41c743b12e1144d1865664a8f89d5807e2c7bef4c64bf3aea8b6143f56e793ae6f11a0e1b472c3c278443f731402d65585d450953490a97878c1c02cc4e3afbea16b5d89ddcf0e63b5209a6086dc20624149317c3020f8f2f475c1d6b4e8d88fa681af6a8940acbf73d91d85b70d189e7abf1a5c7821c3407a2a5d4da5b4f9815a425eceda52d23510d081ee826fad14bd639e1b77a0f45658a8e640f4879a38bcce71c5fc664cb837d9c4c2ebdba479ef90ffbdd33a71de2ccb35387de76fa586f8b8a6379ed86dc116724274e026ac292d83e8e47e9773bd4b7e42619c900f5659c98922d041a7247c90732ba2724715abcbd80695964cab26b681ea91516df9fc823e227917f9b95c403ab15906a25284e1471c7adee8920fbfe06770c14f093733f3f8206d3983cc885724c084d514ff38453403120d18b9ef25a9207f29bc9727451f9bec1a838949eb2058f722f643416833515200b96a2bf7b87f57cec5e2c1ef4e10783a90e5886c0b9a2ab4404621d1e0c5e424ca488d705304a5d11692ff10f39936a71aba390aa7474e1e7f47c67744eb4356f65696a96cfa14a97e45e846309e9f0450c7004d5e6b2bb9b3c59dd3bbf5df08288818c0f9c55dd05063702e71e03c9d60964ae1820558d020830a664a1aa99271ec6d46e70dfa9781399d14aaa1c6d772752f65723e216a2e605e523f9473f3a92f304daa1e2f10e78e91457f167bdeb2be15c386f9dd3930bbc4e923850ce3d49c577a0e7b8f5c0831416607d93ed1c0d3c4a417e010de9e08823bead6943e2b4bb311c983cd737857044665f2dbf38389aff0f713665244b43c82be774bbc450a5da28f82601772378f0ca922d4480112e61d998dece437efcb38d9328610183c688410abea5e4dccc574db467c6741f62fcd8d37d0da2d6482c80c94a029d2822c5232535906511182b566e46a7874c8a55443f46e09dc36e1d59cd3cc35f61278907f430eb3fb2097a31306c637a5805495abc4f4c71245a368b3def961e1c70304a88530635e83bf276ae2024b5b3268b52c826a5710fe16f087ac69b3d44cccc8ab98595943156a7a86c8188ca5e5716c47b8d42c2868aa0103e2e10755b06450ec7e56e79ea9e11dc25c078df8a8b071f92faa292590012329d13794daf84249a2b553a462ea27ed1311122f8cd977d19943e92d9956c64ace13e67891b830042542a50e981f9ba6d3ad6862d514609bf21e3e5445f343c688b40b15e001d1588a7b3a92dc8348d196b5b7d79f561123bd130279dc9ab4fcb3493e597ad7528919e915a59a840eb600cf0818eb7d36ae55f9066f015f027e20799f081573ba2a8532740d11a7c6ad0bddb0dfc22b90db046a7173ba223a01cff8ee832f828e938eeb6629be25684ce8ef0fe82c0535bba2380c3c1f3736d41cc56b14df69cb04cd97737d17eb813d2f32dd5bdd57942aa90436e54a9191c25d8d27bbabcd6d2ec873ffbf67bf16b79d3e3f57d026fc1e0fb2850a14355585cfe67899b3991466bb68c1fc723c10b205f50323dfa86132e5955cbb183b54c582d2117d98551a05c3bf91feedf69411f9bad53c348c51b5fc0c7896b4d76701a0356b910b3958f6867896dec68a5483de32abeaf4630b43c6b05f49caed7bb4b308fb72399905aa478ce1a1338dc1e6e6fb80d12f1386d9904f4c39ad36686006aa25a01617edcb598794ac15dbaea2f12eb809560c1ba4bb382db68ae2bea91cc28283771c6c81ed4f86a42d9c7549466f571de7f2c6faea2b702608ad8308175ac2ed4de24e3893e612c8566cdb4fb99423206dfd303f83212df12df15004d1a3ac04be53fc92c96f592942754092ea2e9576a0c349c1c1481e341b16ad2bc4525ef4029dcf9b444a3e9283ba4ea0ca4196e3b396afd4391ecf221286c56fa6da07f6411c48dcd6ca9b37d9d2c5c59ec6502de29cc5a661806f4cfe0dfb4197b21b7ddada80de407ad6106181c61734136e75de6bc718eadd425685eb22d77234e1f5914ee5acac9d607f0325726818d2289e2c87bc1a368993af2c0b3909349c8cb96d5ba613cfaf9adab44551a4671a0d94ca426f539525e3314e58cc570bf7fbd3ae20c29a10fb1fa1ab3e52a5a2e475c1e3ac558ddca62ca40689f1941ee64a02478a17387ec47e8ea1c249a84f4f727fbc9534a7903e213e25cc489f138c49d6edff297116dc5d5927c9bf3e7f3b1fee180b5062762ee25fac08b3cb2a88e7e0ec36de7674e757f4f33eef5d38a6490ef61c354e86a143566cb41b09ccaebba22304690d50cf0d2b2dc943d750ac86e631209e005943c16907ca4ced6a6ff3c5e481e8a2e97b3177c48160b89989615f325abf4f1387b0de0cbbc0225d76eaa1d70d2b2a8a175592300fb0856101eed9673f7c0cc5d771613970ef203620f4b82577292419673e897ea31cbab1c721825bef367fe80490208c6c0931359f10ce9b6daa3e68ead12946262396bda0414c453e71621438d2c120b92427038f60aa74a53fa2e0bba59efabad83345ac8516cae55c2aeceb4c2aea7afadc86356eb5dda22c1e7970d6097bbe3feba034d934e985eb9a48b2109fab92b314d978e4c68f6d08796479f40821152dcf9bb7c7f5ad0db8c81dfbed7509eb04136c3c62914696a12e311c592572564f856e7629445a3cd773c91f857855d52688a3045ec7e53c2d0c4ecf4a4c4f8ccb9024017860e3e8e15f8934b4a93fa8c4a96bf081ca684d285f254ff4fb3bb337162d26aa5fbd7372fa01a0839a3d052332f15e7412c56651d9e91b897c124af94bb8803319d71e3bbcd711051de0ba36249ce892b2ac30caf7248076e5c67f18cc976942149fa8f7151196229be224b2a8ff32988271855dcb8a892c89b694428980de8a6c95609268ec4c03d6a10bd46943fc940433bdd67886219d1578aa9587e7c1d3710558cf252d8900b923dca7fc215c1ba006c3a98eddc5ba46240b374a1b6cf8a7129cddda826707388fea06e0642652f399325f49f0f4613e4c7e032c28e55e7c339386ad82c2abaaa007c2b19ba7b8516db3011e5340fca5666c7add659d2910af25349c51dbd6d322f1faa3be927b1057df640527af940c4362fd46d6d2452eaea02dce8e89ee925657234565acdbc236e032be56012b422204930f184d1f3c78251bed095b66014b1d40c56efe8816c78a3dc185ce5ddae8490c1093c9c4e6596d7f0fcd03045c430479047c1b849409e7677195f84d1041ccb821f7472db7edcb0509e1b6a1a7e138239c69230add20bd19f2f2b2069dcf8a07ea63bd85265b391b819d9bd55c4eb4aad4d587395802c6f5a5ad6e2a044500aadf6d59908a302aef926d9e0bce28c10f1c52087359d79fbe6cfd4cda070eff0e796650616f5f886a3160243b5bb0655ccf21e241e6aae9234f024f8f0923852672880b096ba468d194fc68853ab6b9157b74b5b4c528612b9cb8365d25fb5008ca963c8c1a09d953777e07d46b870456b6c8e3960933e75882de6485547024dadcfbe6ad0b9ec94f9df90b59e72276ec2a89576a2b822ef65d2a1e08a6e32ebe0a4c6b6082e0cd0014b1de9ac9e7b83874903b41436f33f15e31f592c0cd53e05ca364b35443975d8ef55ed84d04df5469823a81dc2bf64b681ca50df1f543c109ee2ed5d89c43d03067e2b949c802820a3e4f41e9c597f341a7d1c723085c0b144b84e1089000e2d2405c430421bfaaae8338f5ab49a7be6829df9d0405478b484bc7f916b0914342c2d039ed86690e2d55316e921e88f97723a582a0ec809be9bf47627e1af6723da952eb513afa1a27c4c44576aa12e50293a12255a72d54037797d87a4c6c0f008ea349e5034207ba4d9a0d79d243894eb4f30866ee8a39fee985a686e0db3a7327a91eba588bbc45767d59bbda81f8a8738d16ac024142fae4ea6c9612fe0b1ac0de951e19799d42478ac8dcc787abe05854a43320e2b2bb67fefd6553f33c87712322d7d2276efc313da859d134766790d6d832c398ff764d6db617a28d07e1b58e8a4f8b073cf331aa87e2cb01aaee4e4bef5f47791e08f0b118735059a7f453f2fb9679eb6bdf1d7e380a4f4d67bd44f20a368257beacb6a8e420aa2c01f080b133e124680ed7885a0ff0619b140a7a98320e4e4b5b8f62f292441eec41a6e9a41940fe57c518444a14e131162879c9ba27e250adf8c81c61c2a4bb888cc1f6e1e0363e91e035d761bd104b4ac64860663a4654938cfd53fb8513c5270393eca75b08d2b985e9a6bd06b71d9433dc9b5f531d099356026c05ab20a84fb7b6fc4d84d8a45df89f62a3198d70d8ac9d0452b2d91df5ba7b68d18ae429f3dba08f3aa8d00f8563578fe01380b00f08366a601c24cce7aa5dca2b49829a21b65cce9156789e41dd735ef99f4fa1f149eefb32f9e94c9987aac5fe442c708fc0c152e56d8a51f56cc44009aad093a36dcb44b092fb98b68a52bd9fc778d821003cad0c3f55770495b78aa2ca7f605cf5b77c39f1d12f1e36033445c00c081dfabba904a9cceaa3616249cc5876ebe660eab27f1f51864018d8ba41f3411a324c168c739848ad475a4637fb5464fac78f8496bb0a9402bf7ec4c5342312bd9922b2550df3826b7648cb480cbe21ea763fc3d48bdc3ce9963c308e037d8e4660dd95433e94ffb5b017a974aa246f217afe19f241b7f001ee7692d8e1e99b648cb8c7c3ed9a7106094c03db9298217213883bad9928f1eaa7d58e44d6df4e06bd521f1db4324df63c33c7ab8a8ac00add8d3ab1940594189f142391e51d0cf169324e000e3c93ec20dfa637f135dc63967f44268ad5655a37ff9ad9811b4373ed81c4899ff09f8319209caf2be0d10b36c8403e5305bd3d6aca075ea511f3ac2d68c2d91693ae81a12586e9e3b5075ea5f5c9c6b8917459f6703c774fc7620165776d7708505d46e1577cec9a6935963895b7637907fdb5f1b29abd952803e59ae9cd3761d402f759492f425df8d28d0db700016b99f22284ac81b3b3234ed0fd2d626501e7bf552e11f71bd43e0e38964c4c0801cc7616cc4c1a093c49bcda61bf7713a25be6bc17c299b22fb12b8a28c5c85b6b9cc88cf605921252e9c815c85a47ccee784679573b245da23c0f9e982ad417aed7f023d8c05251988f239d44b108598df12022cd8de8efb8dd824731697e0af87fd8fc3d2c9c3252526cc41230d9a70583c630d02fcf239109c795c02728525d4ab6d63339d605877f4990e1d657a6a9ca9fa62bc17d6421f59b1b8f2842f00aa7e99ba608a8b02e7c7710f9d2823b25a7a5d5c7e3eb0defdddaf87ebdb8d2f9fe01239041eb43ab99491020a0fcb60da7ac902c7cb58e43b8ed6075c07c1f2281ccd6bd074c2b733ffb73678d45b779b94adb93d7f7750e28cfbd20abe5e8d71691369367e72f4718b04353698582d1d612a091d3fa53da3f12a24aca13312dbe46e1612cdeff3d51d3ef48549dc425655e22a5a3bbf4b1c843ecaa6277c8e648ec2cf88726a0f98bd293e0c6add597bcd79aee9cf57a9758fe39d8727bb3ba4d807d091a25c0ae47584f3ab48e1c05157d0712f8b424e23d5067910371dd29c683b10e948e9c776f1e1dc0e0518a91001a30a0c80d5895492360786b138bbd2bc0169a9aa884989837cc8e6fc4ccc946851405def2851a4dc11fd7fdcf455086ea84a97ebe0dd467f260ecad51da8b5de3f149a7b5defe8aaa1822553dc25bd85d754c3017b04e2ec06687511a0fccf4242ad872e1d2078545ff97a78ae5440bdf36c0eb481f11cfc843f51d30d664f69727ef530e246e036a224e7277c54d32b2f7b01e61b74f24deaff65437d12fe3c7ce57241c1a6e458f0effb72d7a697363b256831fc2ee0aa11dca8b0b6d6e08d2cce5c44766d8cb1890a7174d82b1e2dcd9ac2d31df0e0d928b6f062ae2e693ed2a6ba8f20210304fb615fa5b12de22951a5e6b94ff2521760b85f31a65d863689720572f26b94fc2f4d78a88567df6eb6e0bec6b76d72ca35660bbe17dfe2502cacf6358b5debea86cc2f4c5aa8d650d3ef919d8ec24557e1b65cede2c4798d08552238dae89bc7cb494f08b7121d7dac0ab159ed6605a433f9d176084f9c364bef6960086b9c647e121485381e9feb4c77636059e4e07e835ee0a25d9610225a4b5c403575207408e4c65cc6ea6eb43dd319c76a80e7d639a3aed75a596cd49b9ea4d3e85e85ecb115876601f5503c48eed6937fd63e2d4b0f1c2a7762911e238cb96d2c5624bed1c78a3ac4d313df2ee46f9ce4bf0954851e4e41f193531b1e67937131b0c0a7daf115dcb5c1cf9de10af1edbe905afd94dc63c31beeaaa00796dee01393f8f0b977f3a8e83fd8e2131a705d5c6d53ca8542605b93221e291ab46dd3fed7c7e500ee4651aad014965b0127176dcf6471e08cea59f0dfc72465a28fdce6f8112f8632c20a7b7ef6f28ded4a0fb458649e90b8852414b0341de418011a289d345425c5b4da2f77ea5bf2cc2395f242edca700b212550ac5051c429876ccd5a8834b1ccbc6b50ca2774b33b063a6df9eb7e48149626c4edaf85b8474012f4903a6ce4a0379004f256fab66decc9637e52dc53512b5831f382751fccb0f4016771753cfe8a14b0609821016369acd263a9ae3f05dc3ac447b65cc1f914dc0d8bb724deab16666b6c6b329c956de5c4ab6bc4d0c646ad24b2c0f4d43d399c59529c88c8673cc77286558ff2e3371c37a2c5251f7a592bf350fa1a3d05a71baa86df1275a22718567fd05683199635719980e44d27932a3cd255cb535cf45ab36d9e09e24d3a22e2fb946097d91f052dc6e717346372ff0fa7cb590ac1a0d8c45bc1de6731c4110b1be8ca7e52b99f38271b99da0074f6607ee9ef9010fd2a60be785f595e38e59f0d88722543c2a410819b5168c96dd9785c11906f518b253c600a112447d436b4a82de12d7e2dd9fee34647955e482d664b7366d76e692c97aff602eaa50bea40c75b5d3e9eb93f7570f0d75112872cca092b46852185c73a8f3f121b56b6d1042bc67ff06ea6bb9c874bbf725ab6de1580863f05201ab48a0055f7616596423e66cb4319d323334fa6b56352090fd1dff001c45939a280a875fe65f45c0d0c4b2b0e099f4b6bc73d1791c161b7de5fa9c8cede97c837b9caeb318d404a0fbc8606e0d29fdb9b7819dac810aeea4317feb87066561d526812a05f59162871818b1af1db96453a22cdb7786e82dc98627fa0dbe41137abf012ee78436fa3d9a478aa00577c71a719380a13262d4e9d177d5efdb8bb952abf55346068a791bfe7793a839c08ff879ade277085d31db1db1b2cf93d72c35447c91318e110fb0d2d030ee339d60dc7f8107100aa40e47ccb8fe33160cc71ef38802e6c1e2c7984b41ded5ba4bb49523acc7ec3dba1a2956e5a3425fc4670d0007f6f25abd680592326089adfe0dc4f8a56a2a294dd519e4a17a68f141125944f0a041610236d81120cf81e47a5e3398c64096230b49ef19fd8d894d7065a68ed1855224cf540f5e3689955686db3d507cebe413554212dabbfd0517d4a6920605708a0b483af84261c7436388f63553c3f261c73ff6d1400f318d3203dda378b01ecd9b3c367eab7dc75da75342305af508a0665de0e1ff420859252bf9dbd6cd8177e6ffdd7864e215e3de7ef847890c1186be03161d8c63cfb02e9da888a6032bfffb14adce3bcc4cdcc632a22522cde4d98704008347c1e6750a829199212aea8b78689ec803e9291528302b708305fb3d790d9d852c8cc5e25a114e9c7e4a48224a6b0506a3ec08233fda0969ac9e64f75ed9495a50ef71e92c0104db383a12bb6fc3bc8b6c5275081c664c96eb83e33a112e9c09c7a972b747790449bf8e9494a910e56e6653422637dd339aee8b01114d8f9083f7f4b63a0552ff5998b0b4d40176a411326421a21c7a807095dd1dca12b1cb2ff44cd45bdc67266eb2782e0d26768eec38cb4d303cad38ff48e388e0ee3cf7a0fbd43efd03bf4827a7f6c9934f0cc92c9cc9769e6cb24f36792f933cddc7f66eeff676c9a919b6c11cc8550f2a21d4895e61df66a3ba1515a9b6e620d44a50dbb44ae20739ff075ecf4434a12806ad338e006176d273c550a66688cd096c21a6cac494b52f0a37a7e47c99ec5b76d7be04ac9a2dd0b2a897376f750305706815a08bbf31c11cb5f8afbcf72898a93e1ed2bbcec2962d5e6fa22258bde9aa4238ddc4562983ec8cbe2ab7a50339d8184d09137ce67076e913f45a31124b10357113095b7c460a5a1575837e348ef9362ab5e5bc83fd09764f2017f33da2f1d17d9e8e58dc669d09b3ebeca276e97502ae6f085bedab9306ea2ecd4cb0627552ff71d8c86bc30d04d618ea47e665cb8c4d0677a0d8c07ae96c9eba995e84ebdcd57f90440b2a4b4c54729b050874b6236c8c290df153b8790e1150f8cb938eb885de75e8a4c3423882e5a87df0a024b35abeeefe0e0aac5e8bacc29f5dcdea8f99c959c6e55a7ff2492a352313e5dc314debd485441c2219c3398cb27d53c78c9db093b0e36a21de32cd2115c17709bed8ce9b14b1ecb8684cf29533bbf901775ba5062a811a81cc054392590bf3bc6ef06f56794f9a46ad035084706e3db436e9a4319b11ff3ce3e3a0de45fb45c62b6169c89a2b711a79c5b3a6c0b8ee02ccdd5484df38ee090712f8390a033b5c622ecfa1f5e89dea9b40b03f4508bd37f8fd9e0486b3bc6c0dc4609cb3f17130d56767612190f9dc5ad740da851012212d08613f2239380dad0d55e458944a3ea4b5e161a245f71d83cd5f223d382535dff81644a11c117da4e6916953fec4ccc8c292294e93b51ba166412075fb6293df585c753c9f4fae18510c1041c0155614e5cca6ea673e364c2b4671fe8b3749be23e6ec339f9b579198b8c9e348b8caf8020686676803a0f73252ba23e14db12473d53976623953ae5c8dd18aa89d1614d8a5d39b9f4ef0c9b5e1896e04a58d25df73f5f25619dd0dff3d69cbb4b83647bde837f5195514b9dd42486028ac8807cd005e9cb1e4ad9f2498317a2acbf14e63563ff4d31521e6a2fa7c0b3836f2fd60624e6162954124523a3e9a97bf856df747079e00595fa88f14679a16462c960a1684c1a25634064347ba7aeb7f2156ebc0b4f4e9c425548c28c6e853ab0363fe23042d6f540637f2f17ac90fbd675efd5c09a926490f909499d45ebf4fbe817f53e63c638d1527cf04142c442e1d5dd5c5e0cb9b77274739b9827fa6520b438693ff2fc6a441f64821bb1ed444ace94a932ebe81e0e63897d2d2f91969280263ea207847af03adf85121c4075de74d60866ae467d9cb194b8307ebb20c1bbaf0b62950f40ce8070f375d62832f16f01c709ef8d29bfc3f8efee9affc1b9feb4a4ef323ac05b2771fddeb61f3d40d264453b64c5e27d4679f0100a8b0a38d0819f27c471a03d819abe7d2f0d86523d644b858b1b61eba899ab6506ce2678a4cae056ef3c7adbdfa72bc39a671dd63ed376468b63ab2653388d19794b6928bc4ce7c55cb3503d67c26b0b06593705d86254eac1a8ce892c8a56363a71ed4137d823230a13e64e13e015753f80d64de27f8717648e7742e9c046f426c1e477778c6d40e691eb70bc88eeb7168e44123f74ca238791eae40dc3ccd88691146d0864e57241847d4f5967936aae19202c752594886d2c501f43ab92a0336cf6e3a1cb2b72c381c650c12fcb65a5ea899bc0d2a7b1c3b41465a57908a4f06071d0677499a55e59f0a66b3ca0e37cf13136a9afc6c1805cba610ff10bf1e50b29c9386b4b11a5bb8e92260cd2b1defec783893e7fa59af4d325c1523dad75b4193461c500afff8238c60d76d52e93a6e34d94341e41b7fbd1c84628dde500c969e682ce428c99c3d4ac674375eee73e780eda124ee6b1f246a0ab6f1456f5ae075ca7de0a27717d3ff46b35a3c8b922bb866d79fbb0424796044b2586800f5d2bec6b3e7ab859eb46881cb6574470798c0a1dc616247644b597f14a1c3fb68a20755e57689360a3ae732742e48789d8cab27fea48c99c0c565b655c3d7e92be7bda3c12fdf1af302bd20cf779de2fe369399e47ef46aa89dd98902d0ce6282c585e7e81557218371abaeb038c3d8c841131acea719a819498155cd740795642c4a33fdeca6d3dcf4220639846eca18a214d2e31a5c6a34f5130529d19b1481481ca323c68e8f8b3eea3b05487f25065da5cdd84d8e873320db517a35eaa3337ec53bbfa3a7802360d653714e3fa721dc97595b7de1dc97feebf2c02e842b776e2ea9581b72076f87add3671e00f2bd6af8c348c2b5be1dd64a4de0b23ebc7c494636cd49148fde0cbc0ec11db419166ec43fd903fb8f3a578ba0941886ad9ad7eabdc4a92d63d1aea547d02d9796c44649f0b5fbb9758483fb4c2f043b12446cfc065c1f43071455c7e6d434aa6578a4f2ca618b096aa2f86f5d3f068336bcd5f8ce8651e28c89dbe147f0b1c1fb0faa003fe873734a027ee86cf873b5375245b9f42ee790279ad0bc7e152d0848fd3669bafdedee9c3f2a5cdb838aa0c357ba787dda554ec8e20342cd4fa19608a4864b2e949c3aab9ab0ad617d71bef6c5554ccfc03b38cb69a2bf7d605d95c46a4558fe6510d44db28a8cca0f5fc6f21f4099b5d38ed84935a74cf009b3c49a35bc91247cfed0c9cc4648f7d29658900fb36ef846fecd46f178bb95a64834e6d84f7a5785cf741263c13a016ebf49afbc90d0dd586643590c795190e2212707c785fa417144dbc9fa510174845d1c5eff259fca49f7eb7ac3bb774ee8357155dc35f067ae31feb51fda0f6363ef2cd922d016addceb1185d4bc138e92dc99a2f25a9f2cc04e990096a15317655c0cb7b4d8a167ccabd598e243f306d66161fd4baed11d47031cd6b4634342c9bca1150953ce702dadd083f115e809f84a6fba02c8ada3683493909a79b4209da91bb12cb441aaf14c366f8e2f6628b81b1b4e44a824311a7b87722323c723be5d874e13ba47a70e5568dabba48c81f4e67e3b4290e9461b809e9c4cb980f484757ddf454efa86a97d96f379967911e6a904115266c28da27fd471afc2941ecbf440f89975ed38eeb81a43f6874d52b63973a19f8dc0709e13468c819bc46c7ae45906c49dc4a8cbfad2a663395a0f71abd4c3a289c239d1f4643c7c28d6b34be4df8df18aa7d63b358c931328a4e338bbaa99434ea05d29db25853a69c5b1160b9c03ffebfa484290312d747c932ed129f6b39e83b9661015c742266ebfa61fab639cc4ddcc80ba8eec34db93c07d99e58388ac81036970324c22e31e20fc2dedbee00a7d7ca00b7ce7105482e01eeea6ec60ff3ce5883f1311871254f3a91304eb5ffb621363b9ac55af773cb59e14ef54ec0ee82927ba1df5c242cd7453012b03a9b60b915e36ec319ec83f65caea46d7001156c6c7f86eeb271653544c43658bdbdcae623c02faf8c788a1051b7ee0c30a3e21ee2cd1465be31d491c68d8a30a6f62196347be4acb356d8ecae73967136c1b258d275a01f954508ad58c5cd741a6b1c896c1334468e7dbcfaef757c3ea314a81c818026a084d1a2b76b9f5e2346f3ff11911788f83c71b98e59db85c3c3b62da6742d72f13fc4f9c1339ec745540f16cea6416a2ab45f37ceb971a607f6e22f87a18c1479f2063d1cd8c63ab7c1e0bf98e68b59356f42c5c4b4ba4bc41722cee69a4c66756f4f2df6c915c6c24c50472385d13515660c3eee88fb162039eec0445741c423ac616b0364fb942374ee7b866fa7edc4ad31b91a25e51e0e8b08dd36f456e807a9dd7ca0ca3f23398f14b4e979eecbec72d73ecbe3fc5157abb1c3ab514ed4b8ecd4b708e62bd4020028976ef425fbabdd8d2bee63b36b319d4437753a952b684e0f129c09acb1238e9ccfcfa2acb575d4be3d78bfda28c25d408a0deef4bd3491ef476c1a6a70b4cdb1ef5f941c3e6301ec95243eee3122c0e5b9007d86d503cdf4e693b2555e9b6e40d1b3cbd3f0291b402a482fcfb0a8a2d421f213b3e5e436bedce40cb1afed6cebde59e30803c84d35a08f1c70b3817d147de168089c0b8bc02184271d990c580f781c0a8f41580462272a13dbc623435f9eec665a7814502c0809bf0ab29f9607af6be7cecb9496506ef3101064e46b0c527f06c4d86583732b0649523b172ab2069f6e696bfc3de24b0ab2627eb67aae9d8f4462653dc943974154f7fc646c836efcefd9413a7d655195930de3604fab02a2eca1bfc45c9a6e48c97b8b8de289525c2326e8c3d0a483e5b15487f2da2e2b99f62fa752f7b6ad3e4bf3bb4e63346a2b4d4e6ac773a15352b803d9196f72332a1ea9cd4a98b4b26ecc56ec998b3a9b1a79f79ed1cb9a4e2ac6f780b41e6cabe870dc0ace0ef71358078a58dafe7fd8e851159de221c0ff02fcd6f65b85c10345c18d30970478d9d55faab1bdd569d1855077d7e94a7f37550ebe3fac23afbcb63177455bb56f57022dc148d2607ab64ee116bd45857f17ca94d08bfa27572e0433aa8704d99813ce07bb681f02ec350d5c254d01ec989d9f095dd7f8821a245421c82448738a7f10aa5d374d1a081c1d13f48686212aae66a767fb83165f278258ac6782813eb18980138ca3f0e2fe3bfd43b997c21bde9369bd53ac8dcad7c18498a9d7c024ad5d760c59d164a3d07a6df33df891b12b24d1d52716ffe3909057a7e734a62e1326268c38d96a4b162d16e9078b4298376f13819471d421b8ea9283ae96923966db1ca226e0353d4f4100ef9eb907a65f8ded0a353de0c157b105e248c26dd818e2196e05192cfb309ea58e7a8098333f93ca9eeb392543cd215f8c12a49619461d83b4e29c9194dc41a8e47622d045b67bb7d5d5d5cbf425cfd2d55c03fe607470321c19ddd21c11b0783bc38316c0f7bc11fd6f7307b671d04cf2b5a3f517079d28c6eff84742439c629f4f42e575cfb7a267fc2f9d16ad903029205aa06ee2fcce0f768a2017cede35e944416351e2e9e14850510cb473a1ba1619015404daccdce24a3404bdd2441ac8f5e1c0b8c1846bdecd682356531b72ea24a6c20430f28301060834d79ce098f1a150e5ae2c28c7f819db1db5c1e555f6c67fa7da3922e45c10b1b1d52ec700be3a4fc6503ec9d2b96814281ca4c4c79dbb88910613f324593d7f365447885a51687e2462ba4dac516d646d188d0936ae12cb8453c176228d239bdf152c223ca54a87231aec3e7311114d7bb0ebd6f501fb61afa1e52fa1d322312112f1b904b1d732bbaf77b8137d95953dbbf4e844e8e1d05b1cd34a297557a48692a855236edfd75eae9ef9bd8af414c1eb1d2e6f79aebaa6ac7144728eeb8f84a4deab89f4e76a21c52e29a972d9d9ea7852891570facd3fc33bf0ff28fdde5f61d50788c2b1e429e95b3efa2cbe1ea98f2ff692d82fb299bc08cfbe1ef2301da15f3d241a156945c676a8a71bf1436c0b090d143717b627186934b995e6ffdf6db86937a79a5a5557eb5ebb455e9930aa2e76b8050814803d349df5734957249448f12109110a88958a5e4dc5677525ec0340ee75e7a210c4d9a277efa725f07f6b70c0a0323354849193f85dfa39f930e3947395ea7fa042a3f97050730181d00631a753d3b26d73a4dc066f0d78ff9a2701ba36cffd7edd3cc50b80f3ec558fbb1dd2811320d384425b12ede53ad42a6b11d3bfc33d1ab589e65a34cf365626df5c5083158b802980305f731266b5292ac8989f06be43910f1a40978e2e0b28996e39be5ac602d55bf0c12f754e346881e680b63e528f31e836ba016af1e23e482b849c3c39993a9b039961bc675483184b5525e3f0f10d3cedf7e3cbc09b2fc26500d9050061597f73ca553711667ec9df5c4abb519c5605e0d896061743e0d6c0b9eceb8cf52fa833e35a9d52363425e30eaad62f5a81e1bebfffb8bc648e144302a60d4553a81124e7e003b8f63d0430a8472c86279d8eea8fe9b80fb00567e153ad6e8a6b623b85218340e8033802e766a87b53d0a52001133d4350eeb91d3041efc1d4dab7f09427605545f68bb48238783da2a7c0ed752cea01f94d558b47dc51010215a158c934b95359ec1da07c18ea002c8fad2903562202a82a78ac6579d9f54007b9fb82d6161753b4a70ce162a1142b0238385ae957f6bc0482f9a72efac0b7268b82e6f2c7aa019a847c3c5e21d3656a5e82853c420f7ec58b14f3f7f254650b30721da0f4c70b58674fad814a98a089ba7372f575ee77cacb618e1795a19bdf537a8ffd6ccc047da690167f841161890ae8a44232d767eccf538d8949e253ac26d8f2dd03712e62be88a117667401975bc29e03e5cab2fb9f42c5eac607723acfc644426ea09ed67a71e505457ada4cc4ec315c2fa880b5bef5a18cceb33d5197204ccd50a819d2ad5a746c1dd1c30cfa2cf66b34864836cf48b303564521a8be50091a0b15a198bb237118ba199e230b6d1056d2a1f2f4aa5b3940b68d18be643cc5cce552a6afef9a9e5c06f1f6fba97d93323b567e6a44058c8738839748d0fbcf338fa85c0d378cddf31b9093e07e5c43a46f830138f8398a93dfbfdcf49fd136726b1271884f5ca13983db6815313e6de49928608ab23967558ee2129914e037b7f42202b8ffa03b72b0abb3ca9755d177da097706c6631143f6e00dd82d7f4e3bb633c7c824269e0b2ded6f4d46f521b828ed3b0a10ac31ad26aba789743e9f2b8174b2299c3992b2225acba2424e3ff5d79a4d9f8590992911425a2c7b6c7df8f050bdab7c233a5a79f212e8c4da866cad637e6c341276750725f4a38fb80b9c3dbca2c0769467c036204c9d326167a3f354e388e29ad847e5fddb338c5d7bc9473873aad5aa1b2a1b6f49ab723600fbf0a8944ea1cda3de29f21acc4c109667fda338deb46a8f885b5fe6de90f02d9f1c5c44414807618fba68ff3da1603a0b025360558aa0566a9d03e0241b0a993f904dcc3aaca145670a03ac42ba5e70e423eae93940156393d5e3f4459101d1303464f9d28d05704fb4d0bcfa4b95ee90cd50186ad0fba0a767e04b4a4da214997200829ff7758c93e28fd9b71518a4a64f98104dc21dbd887b6c04565647dc5a6cad0b6587ce117a1e105edbd1aaeeb7ff091ba02bbd4e11040a5505bbd319235ff5056ed74e2b4543ca1ad7f9b94578cfdc8163b8f8322833971a56118d22c29ae796d354167a9a2263632a607b367de66324730deb3cb0af01316909f0dc7fe9c8c2ce78dd4de75370b392469acd17acfa462f5b887e4dedd24ce787e35c50bd6ca51d303836e5a39d9f470897ea19998b9e6b8a1d320807038f65598f45e329c3e2b719b14c62545d7072be81bec79f232631b5d7944d7699ce7d12fa6f93676e5e609a9c0926d37f638d0b891e3ff884fc0b72fb70e4a5865db8f8c3abbf238cb0e0bff6e5b84e0449c957a484ad3899e419558cf162ea76da74de927e6f4aec994bffabb1c5d43a249c91c19acd7071defaa3b45df9e6e6a4e26084cc8331cfeefe06dd7c8bc4f5f75c443350d7c5a2b5ca0877c5ba74489583888e5a3289d064bf61fe134444a08990f19d954ad072309ed1a0b6172b28cbea90960a75cc48892cf895ae5548e056a19ebb3d0fd53180e941eb4f3cdf087030de653a930b04551acdb9785d431748f7f62bbfc43adf982a55d51f4ae57cffadbf1249a545db35550f73033248ae6763d7151f8c510ba45daf0921f56e35e7367eff6278f0a80b59b5be4f1f1cffdcab5bb39d15e9a34110b884a978305bd80a4889fcbed67303e6f4d4b51a04ae15d7a901252e429d4f4830b39675773bb85d9a29ba0b9d79240c4b2590bf6d1d12b3fc4394f94d1f29eb47fb2bcfde00256f75da6f82d876d51c7713ad6357cf4815037f6bdf78e476893f076eb60a1eec66c833de97c0096a1f456633100555a789f17bb38e7ecf0b3cce2b480004faf23a18283d3a19b8ccf4ffd4011f0b9919038f618f1b1859b78ec6db4a3075fa0d9f84da750aaee3498584cecdc3da5fd6e6df52a7866630a4137f28ecb4c136f3885462acdd0a517fa3f30126a6dbbc28c3fc7f92b375dfe3c5bd0525d285656012aab798d00050236d476f571d5a6a2f74e6dbb37606a936dec68c87ebde78bc015d89bc9cd1e0f496319002c3a76d5f56250cc23b9514fe225747739a0e76cb628d71daf5019f1b1dad99df682e04b0819f3cdeb5217a8ebdb51e302b8a78b6cf1ba8f7a5523fdb276d45db631fa941af7e49bfe31e74b25501dd8045eeb901c84c59d106fdef78616d8774ee0623aa4e69a78702b903d9dbf00dacee17d244dc22c90102f61a8715722bcfcd64e3303956b50b4ddc8f756c0a4511d8cb206a331dabc82d6810e81a7c2d75ccd6f51414050fab644dca41fc50a1d7be7d33f4b4ceefa882b21cb6e6a62268acb2082f7c3cd5c6de7357fce74acf07bff79fd8f9d88e267ca3257ae06493afd7ab8bb5238422dc4d55fb64791f547f17407fb1e190703abcab819f12da3ef1a8924295763fb08432011bba42a983be6518bf266ba7ed2ac55b443c968161301b160c93d1a962bc84ca4ad98b7e3031320f84979586cdef9546808df05a5096f8e3072fa8a7ec53697488bb638c70f823ab7cf7c89742f65941cfcf07cb8d657cae622e744e1bbe16930d0f732e2a7ef26fda0acc668146e0d6bd5c4c7365772be7e850f8b63fe7c8e627d5c43bd1230b471f3337f97200b6fa4ef239a237762276867eb01fd04ffada2ed19acbffd6275892875e3ee87d74d826cc31656b84d83b53f1037135d33eb28849feda35ba86a3c05ec1899ae20b2e5cc6a6e9636a11f22bcd2a0135482130d9fa2e648b6a93e4e7b0d0eea204db28c432cdd11d0370eec50ad6799ed83241719aa8b2adb4e29d861dcf041b814a92fdb91885bc316c679a5f4271cf1dab3456085e95e8add95d3224cb689744b1cfd8c6ae9a3784d400c199ffc125a3863ea659e705aea822ccf914a6d305daa9d613077b9f17128c1f277771c86e5d41c526e0bf07d8312906ae0d3c8245537dc61f1c9c5972d9e66d5ef964537b88580fe445ef641b497371b6c589f5ce2b33c3c1b7bea9f8a136b17f231763c4cc5b433a00ac7f01e40dd14d78c5838c293941d2fcb98b69b6691bc46d9c628ff7047626bf472019a63ed4611ddfc4d94c7a2045cb43688375f548fcb9c86dc44e5a4edf7f058bb7b5c31120ee99d79e58ffe8fcc2e413d035fc9508feb3811f9b33d7c24d07022131fcdd0f3b90af9eea506f2388eec402e02ea5e69318bd8cfe28cd6a7d514e3c93c187302086375b203a430df22b6f139e66bd9620ee056881fdddbf7a01ebee2f9cdeb8c84223d463d46209ad264a44daf757d2eb3496d0ce8a1adaba4aed5ce0d8ad282daec30c28ded196f0c6be9e787f33bd1899d165f6809c71e3f19673b33461bd018524014f79de637ec6f1cd0a1798fe3e25b4bbdc3a08cebd12ebe31ff43ab9f01d64141a6bfc30159470f37a576184ed5e9b65612a799d0a5cc63ff8bf48d035c78226b70ea3a85b2769cd72ff96106e5da42f73abc159c0d6eff79659e7dde1267f6a4555fa22f3b3c562a0a538951d26cfac031a487dc8804f90e370561638b8fce47309d067bec80236ca2aae4b1a02380e3757a31b49057488e4528d6e34788f8caf7116d45ade38bac93039bd484ab10cc6d680cd111138543960feec38e2876e3e20efb3e7d63f4f44bdd269241780e608df3a06b392c81416c45e8f16c9b7c389920fbe9044b5e505172a45884a203f7d812064d191bb20bd78d98ff7615b99817a79457f7fb6ef5f2621b72cfe546aecc8fd2a0b8802e4d110e2a5852d60ef15a64f6443e1882ad3c721d93be1c8f6b400bd47dcc57f27350205aa9f4e689f2b1e33c66ed481f472e033c48860f52a15b145ffcf0027cda9848472a8543c15580c6f912dcdaf977e27a2c2bdc013fd25a7c3eeef874b0e0df4706c0b0cc3be4927dfb7ed3dc25e795eeb0d87bcb7dd620c264ed45c09b8b569d26b38c2d3bbaca1d7506a161fadda2dac7ef8c4d3ae1a2ca1bdeecc1f105b019f3a8b2c380408ce6f4a1f6eab5b290a17375b40bff549713cb6333bb873226759c16c67b98f66e4883b8586f3101e22eeb21401fe13c2cc657a553051ff7c741bb4eb73cd0f5dafcb732d062f0f3f6973a98fa895ddf983f3a726cb1763ed2975d3b58bc83bac937f96032c73f4904b16a395989a036c8ccb44570beac0863828ee35dbb7b83c433d111ac8da7e3eea41d960fc5fd826247bad5fbf241313e643891f4bc9883e3ec309964ccfd12c221bd4dd530ec333e401087392a2eb04ba93a675e25b5ba82bb3dec875b6e3439d146c51f4df859c47092b905cf05cfa474fa598fb163d66e360954adf3147ca1340d3ba412f34ae9e8a0c495fcd31386989b2c35b40e72026b149c04f267473648d39728b49ed54dda17bda716106f9fa949257e824d6558a52bc4f6a8cc987698c1ee9dff02cc9356d5c1f66a37b0a05fe535ed30557a8b9ca304386ca606e887b53b792b7347a26f69407f51ef9fddc6ec8452ac7316762e78ded474849c5e265ecb8890414da9132aa58c3196f24d81d770feae1d8d02d74e368af7783f79409e79a05998f598fad93eec867181601aee4025504ca776eff79489eeba834f590b53b11cf9cf241b8443e351b51eff901dae346d90dec496c1c5bb4201f32090815b61184b510e2bc0e07aa8baa8f0cd222436ff4aff7792c0c96a62ab658dc41d399b804c65a403954aab10025112bc1997534f3c3a3ebe6a3b673949a7237c8981b5872ef00f5f5366c7c6a05e97fae62487531e06d2245ff8d221f8e229052a4ac36c22f4e14a53a917308c31d7076d2a849bd6fd486c1d1fdb574f42748606da2492b4703617d5d9d7653222e525d81b4b5dbaaf812b05121535fd83d4ed0b1a8f11ba3ff22eaf4e93be37faa8d560ecfbff2af973770279f6ad8c2e97f5dd83833141b9b07f22fa657eacb365b94329b73522639d98bda31b514ab174994bf906bb7aa79e0b6e3ba45fc2ba1bc1029255a04ec87d18094e28f2e119d89add3c8df9f3d92e1118470e7049d08ac573d84be47e07d13ce9cfa091755110e434d83a2c61a3637e52ffe9ebd53e6e609760e211eb0c8be42f57f572f795004fe1b75ec11dcb09633377aa77420aa05435aae574c9cddecc08470f22d25e447c25b77e93409723157cdb35239a825ccbeea699e3b7f7c40a4c61b5175f819f99a8ac0b82140b9d4c9508898d3197c54720d8ce097f2f8850d81d28424819c0c3bee386dee91e24acc61b261f91c54566bcbd63f833d0786539dcf4e51c1c6042eaba0fe51681ada03247e61ca2614abf2cd74c2d38cce4dd0b78d162fb40029e033b8b8fd33cd8a7a6816558745c7630baa4c255982dfd20052ea05006cbe74c3d018000ae0597f567679d8665905842f307664a83862b39d6bdd9a51b906f71d9bae9c06650e9b52d688ab8101d9703077632017dc702e737a7c2fa9bf012dba320e73c34b9cba13fbf8078292b2882fee0014b84b0c0a3aa04b88f8cc7e7016b1217798c35c8bff9422c423d703b996d13ab934d74b6816f09d71a168f860ae7114905a98bef343cbd46fdb4b8698e1ad1d76ecd19cd658c7fac99586fe4ccbbc7d1cc36f606878d1be673dcd70a460830cd949b9a5ac9143697cd987659133305b0963c36dda85d726e4c1e5e8dca64044aa1d6da3eb0e0dacca948f6c52322e6704a1c00ff8baa6e9b63a4984a2d5be1468fd26c2aaa6c0b0913e131b02e8c56ff2fff94c5c4236f9bb725b347841fe6d71d97be95d5d9072dac89ae92e68cd1e3602ba9d109dc40cb9667c682f547b026dc8c720f365ba6eaa1d4f5f5d271c5b4d50b3b7a344dafceed8a68783f6fe6e564e04699cb44ad607cf80fd8215125bfe511070919a07111f20e69094c508686104e380c12766c1acc924202d253e7348bd9896425c96deb25343f826e2fa7f666f2ebaa9169759f76d0d7d7b82eddb865257a747fa479cefd8619c7d6d2c4dca9827509832574c11c6ff347384af967c4bd522a2b7a7ff06b081022c51886d3a732a2056550b99d8167256c285a48bfb8ac90ba22b96ea08f87a7b147c4ab2b5db9767ac8e57a88a222e29c0e8bc1a81914b978eaa9cf77148e66b8ca0e8ae671f057a25ca3c01568558d279cbd9602725a354e5338a5999fa3f57abca0900530bf1ecf59efceb7763838286440e02e930ddde321d812fe97969ed38de228dc6865241764afe740ca0b59fc5b1e09c3101e132b80ca66621d3df6982d6f0e364375002fe945ae6f886d98e20da9fa7003795d70efa0ace45606a56846861b6c2ce66868f533875db4a2c8bd99a7db3b7fcc1d1a6ab9269ff4815279f3ba0072ee595d4ae9a7827e22b32f72fa47adc4b21631d7008e853d01bbc338b36e080d7223ca09c40dfa5d6e216db0c230328d215fed59da0f574bb53707b12c769940994210f36cba7e4e16589616956a7388bd840b2db541c54fc5609a9905dca554966d4ef9a931fd400cd2c3bf9a02ff85da6e20cea059f95935fc402cdd6ac7e6bb96d54e3666167c18906f101cd6cbb81d0d647402271378d20de5adc0d20a0b5e918c3b028967fcceda928555850c8c5282d44dd0eaf853786b678ca0a9c15a66ce55ad86763f7f82bfc4dc011795e1393e388f87038880f9fe7e78cdf4ffe5cdf2d16fa2dc27d17fa30e2fee973b7046d11f0d602ecbe8a71516481f6c56bf92653ae50682cedc3b8d001849f17f5923b3aeeb0aa5ec81ace7224bbe204137319e897a429849347ef17ed3320d2d0fba33b2d0f326dcda1d3f80f5e151f6a5687453fc6457a06cf0a716618dda400cda78cc7f0932664756d02a444509ad83d4844adca85b787d7e7aa7b48ee05dc894e163ebef76b82d4a0ec177137d412b7b38b2974d74847c467c431d94f7e9f04f9c47e0b1480df63a3045a8c7560d0d2152b0a820acf4700e8ca884526b51540dc5f9ac21722e5e76d0e50a35e603d66ef6a5507a8d06a077e50051f7fa417fcd527ae91e69ea45f8b85fddd941ec049a597b54932f7eafb6281d472b9802230d47f1a4ead80372f68875e60005bd967062b44f6164fb3d6a201a33594ce037243005533946894678f0969e5223fe7f07147c2e249d58e39671ac56bc553a0a3ba3530e7311afe3e0da38fa4735c118a0ed8ec1a0b8186c4128dd9f26440fbedb1412e976ad51e55915bf4056c9f642c85942c7d1942c38c31175b86adbdb0b3213754ee015089dd53573597e5958cbbc4e60b60647174bd11ce6620fe9f51bac81d193daed36145e3b034930e02771a19a0c4434a088f3338796b25e3cb389a104b07a4c0f3d096f3476bd198407ed08ace09a645f30eee1ac53bfefb3f388f0ae00a54f2008087b95b6e4f176a8edb8c49623293b010196c4ffc4c7ef8cb0e9de83c7d4401b8649992bcc1b89eaf82c86eda14517bf7a5a1585f603f1f4681026c0b3260ce95fb88daf287ccea9a36394acc10b3984dc9a78f789d79355b65121df43a87646e806afb54cb642930e8b1c784c39a12a0ae7c417ab17decbe4cecb019f457a86cb896a5d062685bf112e01da507880620d60b81df79c053ed4e656c4c52e13d0beaccf2f30b44f91f447d9c395370cb1e6b9fa11e27424b0a66c4bc51841b0ff2024eeb093177a01816226662e85699d74c7200469e15d533a23d390754515715f603902cce8265fe4970c33cf8b25ccfc5b95d4b17eb778c355bd07d32b3386786f336b03bc2cecea2609559c0ba38d2d3ff7d79046bfb3c4f10f55844691c49fa4175c57df3b49b4a37d329e8642c52c8c19871c8deba48db52f8caff1b3a06cfc027f72045a13b85db6d1858c6b10cfc59a0d9fe9a8579f81a379d01d214c80a2770fd4185c4f22bfdfb64a709cc6a41cb639f3a91a3b3eddde0b5b0bffd59991fd5d34d1f11099c9aee4e60731b89ce799a1551651d4ae222469eb8459f13495ce90d652342222b78427e4c562488e328c437bffc65053a1bdd01eaaeafda8fc395dca9435cdbc6dbfb17ff391b2e304687ed336aeb09f0af4c5e2682a57ee75b8039f4d6e79b4b0c39bd04df84723a92d37941742e20f8083fcfc77939be849ff1a37c9c3fe14978323e0af9e62225f3f7453fbd7ec25590091ef055fda0d578ea3205482f253112fd07425621905b9f9469d69515e4c868296e41b8166d921850b79d4c2c52e83c34ef3dd3cb62805b93bb6ed5fca37b0deb0a624237804c12f4ee5a31512858a2b6ad958a01e216cb35b8f651ccbee816aacd558589076e8b7bd047ff1a6efcf00c6018220989036e9b7b5259752057dbd60bc5007123a871cb43c930c0e51cc9987810976382315c31511327bb016f2d7d5231406e810f41d52856945da800d159985f85dd069043080ef992a5341be64a51859a1afe21ed41c6b7497e9a367b75be6a725c11df1f2051fbb6f0d4a3fbebc46f633c75232ca0e117f5f6f3cd6b0e1fa9febb37b182a7fdf22068f7ad0f32889b95e06b48f8b7e7f5f6e0b04147a64cf3ebcc227df5b9883feed8960dec068c4e259fb1fda3ef81fc0813a26c188d3e495ce5394f073bd1a5d0822031491d7ea87c15321a4386cc2615e90616194092b82e63057c0104972b7641702a7eff811277b8f74da2449d323336b0400eb7812fadf98654fb63add759ca35937e4a541c6019f14a3ddfd429183759e40b180a75d007f22ae09bb8a638055343712ce5bc244fefe616c2a1ebe3527319e6d320cf73e7858638c678f249136896cf663a1557ce1fa82a06a51c7c252efe7721815d554e5b1982d1d39a66046283757cee56cb045725b49ae4a584dad68791041e4f10115fb5c8775bef0af5159496a1695541b5f645ccb43e93b160bff3215ffbac485e8bb11d028e373af25186707c684a2dff8d00dfc6ce3166905f5940979180a38c98cda9d4147aede7d82b83c89df1ca0be5351596990fb602b657b20416c5f3a016a5ea21ab4cda265738ac357f1244e5755f1bddf75552e858ee1beff11714b2bb98701b80d28c3f3177f346ff4dfb47c6116c3c5f7a87489fd3d3c14dc88bb622998cc6498d1d2b2d1fd7fbfd4c198a7927ae775c6923f2d382787aaabb1816402a697c4c49e303e5e37a742d3000893482f263091e93f55550eac408bd26759f0790ef3094cf7693d1bd143c21245ac802e98f597c9873279655db9565daed00e69973d41c796122965ea717b61249bc4dad0c011d34f4131a1f2b3dfcb4100ebe7a93c60548251a1e286bfc00f9bb130c7ee526080b50251b1d55d2e881f2395d02d45514bec96eacac4c8a64532163501302cae4c68e959edf45b76dfcaa7df1d537765049c30384bf3ac1f42f3683b080efb892c6c74a1a61fee027dd188acb990a08d90f52b6d04f68f048e9f92cbd4c0d85316513ba89e78fd2eb067e03416d9f7d2babf375a8acf181e7990e73f07f298802b0eee048a5fd13f809cc68022a05ae745630cc249e03330468f56fa1ddf1259837991668d6e5f97785bdfb627b2ecd7fd70fcdbc332ee493aa38ab8a30490b183eba4e35046755c42bd110f40d7266339020aea480d1da4f891fb160eafa2db2b79432a594640adb06d50677072dae3fd389e07abdbd36747d130b5c4f36c1f5654f0aae2f42747d5ad4c5f566d00aae87b22faecfb383713d92bd0b5c2f16e37a39dc5a703d94a38d1d8e777ddd2ebade88d1f54eec645cff7cceb8fe093bf45f9b0bae871b4261a233721aec30b8fe2e7f68695c8fe7a347d7cfcdc8d5b8fe6de79ad4bbcf2114263a23f775eab56f31703d5b7f6d3e77ea1b76555e10d6f2203dfb9c9ee6bd37f1e5a7abfff5dbc881f08617086824f71ac98d21ac0099daa555a66ca4d65aeb9c73d659679d39d02f6bce55ce55cef7de5be7af89daf4e3fddf3a07faa94fa77822bb24165d3efe699db1d8ede69ca6693af30a917ec678e8a7a9cf0de0481559e1857b8ee41e5961efdff106ee71b000123ec61b3ce8e92f70e867bf81431844fbb3071ae50febdccf9ec589414cf8d90b87bc0799eb4820152211ed8d733662239b8f3963228be460ff75d32ab79f77aa91da2c0076ef9ceed4a835d5d71d8348fdde2a8c5a21074a53ed4be065554e361a39d04ed32b15e45218989d5d56dfccb021b1c7c9491285bcf98a3184646faee09ec856abc597d518427a87c2ec0aa91279f10502dcab5e3586b08bb2903c2d6366d9217971176521719044cea08f08d741c9ead674b1aeeff1db7a732ef4902ba0a044057b7d215790f611bfbea9015a0242b62ef14de6ae13e358d8220658fd852166df0a5d19bcab8f975ecf9f1a4190a1e260a2bf5b82eb777038d1a185cc100537c649079d0c4f1cbcbdb82c7c195cb9c0edf0d3e1cc424b11a7c6d4157e42e5a4cc32ba8e92485eace942d251f53c91bc38b33de419b94a61aca01285e445163664bb36c582cc90bcf8a2876c59774bc1624242f222cc0eb2fdfd58de125f8e4b49149217db22c8d6bb58df8480f9d49c3c902bc8435548ee43903036865c415009921b71e6001761b6ea542861768716634a646b74b1be7949bd9eea53f244663826232fa931ad8187ac6166809a71659eba8c0c0c2ed6370448cab547328d8b91d8f7340021a8267ac4984b2257003c1b42ea78410076fb2987b36512d91e5d991944a6feee8f818b41a9779d833cb28a71aab5d6e9fbc1d0c8e6232641fa63e27a93cecf39bf198ad537331aba271261f211ab9919d8213714c9f281fbd663dffed8969fba00714dea81be4ddd0f0402811adc28be007df6f9bbc517a00ffa8d64d1d9bb3e457aa06f62f0ae4cf09ce871820a32bd6bc223e9a987935b1732f5363840a06f5b230b90d5fe57dc3e074770e307c7144765bffa7711db68b0e592e178d225e5f4ac5da06209da911b932a2782451c5d937ab76853f4006f48bd0650baff695b524f0b28d024676a48100cf151914591bab144a649d69438a488d11921d32b393a92927cce6a0421dbccedd83617d7e27bfcab36fe8a5e9358bdea3dd06c91fbf5f8b7d6b99880125f1b3f387eee35ff38a835b0d1871f2fa9ecfebb7b166bb1c73369dac1c5506bad3108ecb377c11fdc7ccc427ccc43114503e00dd90b9907c0c7ec626308bc8106adbffe67aebfdf0fdcaf436010c05d45ddbedd5eafec0fe8dfe36f8d694eaed91e08737c71d4633aa30672cdf6db5883d4df740928dd2910f73bd57eb73a3822fd18d0376eaed97ec8c274a206cd3ba4bc84ce9b459b6e20a3f6695104c577f8b99a163568d16f5e989fb3cf2c51fa8b93375dea695af4d463a59fa61e0683c039fbb7ff14df9c6049b706858c098909327b22bec155cc7c9ec8284a319502993dc6370a8806cd152599c49ec8ec597c630266d19a143ca70e0f64ce416d1ec65a07db352023b1aef12087201f53bd37c6183bf5ec658eba703ccb1271ecbc12da9f9fb5b1c3891ef310f46f96ed9d65896c67bb678947622be7fcfb47591c36fa59cffab4e9b3d1bf89ecde29ce670190fc2c0bd04f7d9a020720b88739a41e07a9acf84825969234b97043db295ac2454a15424f50aad0a890597b58ca34352662d829d5a3c712a69426c8377d267d8d4484f1141f4260496b70744e1a1084891d123bb81452382a994cbe40e6d5f8d8638c86c6b4842485244a847cfdc7744a3d407445763a9a486c63021c32c8c0c0a0f0889006d037b82ded6ecfe90614a92f244e3bd156e40991125f091f203faece945544f690d8a7391fc0f91ef885808210e40f9ac6c7471f7b0fb0d1c7be639fcaad40c964120bfb17dbbbdb0ff387a0df9e987dd73e6af8db8307623a7f3b319804ffe2320ca4f8dbed6fff62393a0bfc8bf3f66458a53913fc9bea08fd6d34e3ef250afe4d9ba088fe4da9b64f95cdbf53a68b7f5327d8df15b64fa36d7f07f78e4a269345c837a5fb3bcd4bd2f87bebf418fd9b8586947fefa60c75c1bf992a1369b17306a3f16f2edb3e47c9805b2ed3fd9df3debcf7b7d749a4bf75cedf5ae7d53d35fed542db6ba4185d7ae96fdd04f577067bb7db09a6c1bfba0cfab7d7d11b7f0bb796fb3bf998b6d90d5babcb123f2384e53976110a7409b2d39c6756e49c73aee0d28529059ff6cb09f541c8df680810a71c8b3738d5d4fc8dec2fa7586780c283900c49facbf2230eff720b769583969cd31403591cf6afbe8048ecbfff8f0e9a1ad558fe41c8bf0311a8040dc6df0ef7d0655f38f1b7fcebfdbd60509ce11b33b1f3b7adebba41966030e8b6c05f905d555ef33b74007eecf597c1b8033ff0bf2040ffec5f4864a2fad5dfea9d62bc7556598838e786b87d10f2cf7e4290040b933925bf75d95f04e91511fc6cc45d980966e4c2feb682de5cfddd2f1d7eb129f3d35f560219c9a6e90765d62aff6d8af7d67be7546bdc5936defac5bfe1ad8f80ff0ff0b3f85b969711f0ffc1f1f361fa31fc0b3fcbfcacc138e33f56fe565ddd5cdcfff8db9f9b8b361f6fe8f07191dfb66e2ecefcd66d81c01fbbba2ae7dc6d61c15b6faafdd20721b37c6c7ca9f92c5659b6f04dff8c8e85980b605e2e547099215290e94263d16348310dcbcb0168b2f11dc12f91d39636e090970bb607b8d7fbc74babb7174cca54fcf7f8cc693be47535ddc5ed99b2ea57555d55954db9067eef09c20f35fede4c7b0539ef26298ce8ae520e3f4d27a06fb6d1461f3db1ab2ccbfbb681423ffb6d50f434e7654e4ef8411c8dc2c0cb514f932618fe344db7cf46af895d6b9f72a87992e6d4488b673af89973ce7ff6af0be71cd7e41bad8d1edc68ffe26c4fec2ccbaebdab4422f77e1f8f78cf0317ab9e46a55963b5420c8275530c82e5479bcecf5bb6fd45f8d8eb2d3837c520f857ddfee57aeadb3558805f041442e1c79ea79e25480283087eb9ded246f835614800a67ea842876a30f56eea23a418c4faf19b15918eaebb2048e69038d8008c27057502c7d363b90489fbda7bdb79effd87d30c5485db2cc34e7fb7db161c0677fdd5500cf0faab819a403078d2df0d6d5ec5e0534d821f6f89596540d15f2cd75cca60a3bf5bd93c6ad15fad1462c24a7f798a268ca2081f2f9b28aa60cff251c959f36e74277decdb8bfeeabdcf5cd3d9ce1aeac74b2674afb14e09cd171958e981019854fa89b9f407f0f192cbedbf4820014eb49c27766aa5aa1ab9b3d58085918ad8d6df6d618ee5aebf6c06b822517f3771aebfecc74776c518ab18638c31d619638c719a3d5b3b0210d8bfa37eea5b0d74fabb53e3547ff7c720145fb01fc10b369260f9d8afbffd20b0ff8584fed888dd6f41ae3b002337926b1628fd657786b7fe6e0e827af6fa261be59a6ca4a3fdb1457f5d239c937f1b65547496070b90ff7aa52ff9b39128a7f2755df79aae352caf0a7efe396a9f68d5d234e56a4a33ce384d35f62f5adfa45c33fba7de00543ff5387d2ef5acd164329944eac04b1b62fff5b0647e0ca67331023b6ac508ec443fa436820548af609c66af7fee92c9d1dfb6938fb7dec7dbcac75edf74a8bbe48f2076466498ef4eea47d18f281d71298822113a8b6212a995301acbb2b29b2ba2e3844cdd3a60dfee125a543e57ce1b575d6d2282aa7ef8403d71f83051597295fd385908b97441213b6bdbc3bb824cbdd6421f0319a1a0f988bd0b507f37d8c77e26a9cb40e91d90f4772b3ff6c29cfe6ae5c75e835c7f798a8fbd87b7fe6eaa8f7d06293dea63bf9bdafabb8d3ef6febffd7b7d83f7e084c4b9452da5b140a6fea86f42a8533225ebab2c4d0959626789f2e7c69a8b2b360b00b9b165649582eb0532f51694f477037dec35cc75ec65eafabb733ece79a8ecdafb994ef440e7a22eeabd7cc4792789665dc6adbf9aee635505b085eb0364871a112454666c35f654a9ce9554a1ee52dda595b9b81bfb69d241939e92cabd3d1a6a1d0b208ece2eb146a054b0be4e0177949d957395fa6af71362db7e4c4531829092fd27c4c275f7c8cc49dde93f29608ece6601933ae7e250facff9f6abeb1b8833e95c49d5a104faf8215991d8a675a7a5a13ab567eddaeab4fe00c698fa1d01f27062d77ecebe42ad4bfa3ab5ea7496690398d6237cbcc432fb4df9b56895542220d5d24be957c483871b7c2362c5045089ab070f1d74a25f3f5e7aed78dae52e81dd1cabbafd6f57d7f78399df81d1c38facaa0a30abf39ff54b88e9e3c88a139814968f2c57860f2ef5c987332bee848f3c1c7d03f1bddeca688d3a57628574976a05a26c7fc25c145650aed6db8f97567a6c544ad8acfe4bb6f50a3bc0283d68c3adb3516bd8d56f46e74aa1ce36815a7d0d637ffa5ab622e96adaead57f4a78aea0a8517aff787945a56d7696c5cad3d9a5150b0baafdd1d7a9df92ca4a5dd1593936acaf1f2fb1ec5aa9fefb78892505a8a3efe40f4767ffdb5b2afdf75fac647774f5e3e50f18ffed9f55f9d61f8c342e965d7cff3d7ee098b2cdc7f9245ecd47f147a07ec9cbb2abebf7c29e3fd733f15256216deb7abaa1470bbade8e8ec5f5635be8fa28b4bbdead0d6470604f1aa95053cb5bfeba62326d55b5f055555555762b8598c879ba4a2372e2e24a8ea5233c24cf153e655f1d73c223c29ecd31b709b6d4f388202892b687b3e922d9b6aa95d6227e9e4ca1a490450ff1da11e492953f162e7e4a751dfaeb1ad5b597f35527a91222de6b9a0d51ebb1c4c6095cb60364c59415a4675d9218560f9e1c2a253c787c7c0da564930a0d233cda30af918418239251450b8fcbf973922494dcc1c3680b8cc4909caa925d690b7e74cc886a7a2b92e25382e22b8fac876f2fc78aafea2f4c62f9cc31c683e8ed6e6c0a5757934eb8c7ae40f9188a1aadd0445c9a634cca829a46564af8d041778346598c2a492467ee25837ac8504fc9247888ea6a386f40796d6d3931825326b19155e5cad9b48690223705698a532ba5341c3123a9aa6a8acd5c55c522904411bf0a1b7f5d7df7d2572c9af2afccb8236f483f5288a879691075a5141d02c3cb62a2a56061a65d65e862c2e0b1eb5aba7ac539fb39e79c8b50b1e7b21bada719e5042487847c89ff4452d5d1f13994831f764bbc1c4796d468b65055555555d589c46ece1cd2f40680165d3a38e79c73ce7908194e97e503c239e751fae4104786ac381f6e1fce394fa1e3b22a9c5a058f11ef31b222cae7dee59c0f87c3fd83e1852f07900e95d692a0b6383a232e3c2b396c435a290b9aba5a78354531d98b3bca18a231a5b4d493e39363f5f97175555555555555114aa2ece69ae1e4e9abdeed790da94d00337097978ee657b355cf4e459f216b0ce8af2eb992a0ba226a25f99c37935a9f73dff39bd5eeb2ca6ac96e7d5dd7352ad760e494ab5c83ffcb762b438055e4dcbc8c997c57d86595156b8a82f3486596374de268006183eaac81e0450fa0b13214534cae1f99e55f99cba5bfae5f51ecf814aacff9ce1a4388e305454721e76062e1560100414d1637d2bcd29804c0a90f8fca468c154026fcfcd5bb5b3c4c1138e79c730cd4889166250c2c4c6b03a72c1e153e685e5fc89ea0600f8d16ad446b39e7bcf905c49eb59c7d4ba2e333b60605fd7a52327d9e9c3ca1d4d85c3e4012be16c2133681ac2ebfbc4909b5cdf0d1f32a8183a9432fab8e0d2a88abc7aee591026ad109470c3da35b3b537850986ae8205f6291dd57d5222a5f2d56f57d2d1541029484d44170082bb908f888d2f10971f2e502f912bfd69a569b85cfd7849edc9c4f2c21231ac8052a2aae8a7c15f938510157d199dd93b1233a905c3dfa5c9d85471c191af6755dd7755d4b31e7c6c664c9c98c11594d781481564187348f20f5e6734ff8834b858ee61aa2e166b5ce91b4882b251794ca3a4588908985f4390f72ce57960b3fe79cf311543abfdf5a6497624b954bea08e79cb39d757b92260cb7cf391ffaddc3fed6097f5dd7750d51d5c4395bc43c3e96885e3083902ff107116309a2c6723169d38b4665fd406a7d83c9cf5a0f0ebd173c902f310a5d320a5f16989c9025a190a9962bb5073121412868a539d0d556b537b4f343a985138a243eccce52e40809922014b4d20203a102cecad1dd971e5e0917615128526cd1274c419c44087265820ff68e056bef868a3c262234b439235f2f54e080c252a2975676acba6ae5d94bbeb220168ea825b135253423a0bab3a58d3126cca5be255996cac5c2ab6b2abf9ddcdda5b1154941ba3253a737e3ac89ab68acd9f3424c4f4169585e31c16aa9a3d70ed357ed7252533a5634c5270849919c0847509aaacc50265bf4384a45404199507d2d53c78e8e8a1b6107c4acf2f3d5267346cfd1b7259859cb619941f267dfa61e5c76d2ac370002015e7d9d8109bd35d0d03b91e8fdf168638383c37a08b27907e19210c9c38fd1c11b32a071d5c605aaae1cc09cced5c373cd1f32f8d8973db313fbdb6054fa01357429609bc1a5aecd1f308099612ba0708335598dcd470cbc822c478ec10b16210d9d9c5ccb052d61c79039c4f5960baaf1d9126186edc0c3cc0cccf0d73b91e8fdf168638383b36d8c224890112af3114cc2d058a5f835b4a0e8c63f8b37bcc8b06082172af10623132858184af82cde50934721062b3bb0f170d43003e3c644f58d360a951efecb6af82f3bf35f16e6bfecf0bfacfb5f560b63a25a1813d5c298a816c644b530266a63f3f30641882e1780f5142e1560d4a050a152d770b052e1e5c52d1aed5fa84c396cb0e4a5c2c77e2b7b5883b94078f5d97c6cbb2086481ce219bc618394180addb5b1b14f85745fb4c0c3e4e3062445e3b06583d2887d8598688c5b162af58d3676ed5f0b463ffbd782d0cf167a54ff5ac8f939c6bf31793fc7d0099d2c2b540a9542256785ca97152a5f9cff0a95acae71512283f387081f7b3528d4822f54ce68cd5c68c9c7a70b9d3dcee01b16ebe21906617789430f739cb1d1e0a1039605d2530e58c062b6501913152a6784ca9ff3070e8e34182eccd0c8188b9ec6024d0c0d0dcd0534343034341368541a0b86126822b474210d4bd0a561571abe696858bc217b9a20fe38c862103883649a3f00b52e2c760627de3c68b965486b73411be2a188f3c968a34f0dc0c5ae830a3938cecd010642c70b426838c85d301699b139c2b041186b2c82c5bc0ced0b3890b130357abbc2065a2e5d0591431f850dda580b3cb00ddd7aea256cd8738b4bbbe55c1f53af8dd9983d0ef968ca3a345ad5da10584e9ce492203d494b50a20811538594ad2d39573c6b7a6c616cba6f5dd7755df594ba06b31b376310116a362faac90cbc2e27998da4b6271e54583672f0924d3c167fb5a2b73434ca51be7833ca5b10ef070645c91c6e4a36a4d5ba21d1cc993566371b95f64eec4322e744f5d9d2442e4719b122bc9c1e500ee92cb574b08010d9012472f583af2aa9e307c78e94aec2b99044da15129fe65ac63361148f5647e936c51a23eba8be32a12939e79c7b71ce3906241617f28b0b802a68e077e4b4cb5795428153ea523ad519e9d9925992e2fb7962f2a449f3d1c0f024774188c98b49c857e51c60a72407457464a52fc31b19d4d294269f1395a3f5a84918e20e4965459848aebf169330a1a3769900fa6aabaaaaaa8eb062c76e5555d5561c31eb510666a5fcbaab9b32b28516036e6bcadb0eb9e2109f996ab906bbd1fd4830f388bea5eb9ddff317c147a975b04910331532964cdd95a8f2993284c9d68c2515abf7d6755db78442d6301fba75dd54a99d9be4a77f743366b06956c45d57b424a111b9156a0763421d7659f9d14ba56875d947f753d323960c31c0079228a3a2a11d566a06585cd591f1e89194a3a53c81847832fbb0ebfca47efe2ae684ca6a3fcf7770a0e46226df089e456df0a2a3c1236585d21021695c4894a5c885d65752db1226407414eeda907811a5b560a4507012bc8eae2ca4772e3f4efd0b8a8a0892eb2774ac423f5bcb2899d6755d63ece91acc027f1540f2646c4d2bc60e2b1b08c264c95c185a5edc0d21d58c5e84bc1b55a8f4709ca81353a263a4026d48df1eb4452bab256f840a1745a07665307040493a5740b102857536f78bd21a6f35abc039e77a8b734e5c9f0ce51a8cf4a4a913b5d4a2d035a1b1e24a4e9c06aad47eb49892452cf45d920e61638808468b9efa82ba2d77185901079d6ad2493d7774884e008fa21a0ad152d02f55855d2b0f904ea6aaaaaa467f3f16362b39224ba743e77e7aebd0ee00492ca21cac2234641cc08a330c480aaea792a88e8bbf6abbcea13689264fee0ec958bb9c446118f668556f31a9467b739f73ce39e7219e20fd7e6a5d8bb44b1679d188cba1b4421504f912bf5af6d724123b1e70625d65c83a352bf75adbd2900acb27bdf3356489e47e4774c11954d8a191bb534582dee2d941b175cbef26137e552c1bf3ec4eb6c2cd820fa70dc4ea274c47af242f995ca35555b5695dd775ddee66dd2969694b533774ec9031f5465454c3a70c4a3b39ca3b4a167c411aab6e9ec8fba551cdbb1fba870f0ee116e57048c0ac3d34caaedafa33528b49e79a2ca8ea63432ddac674f2fad292cc8006d9d0ad552a8a17909113cf3c253aad6c9a58fe38e711deb20836e8baaeeb5af64d409901d1e36164eec7f53472050a2a055da6d22497d08152650a89cfd29914852a623f4f369660cb287433a36a314c68e0353bb5c5534e18d56c016da36c3c3726d175d5a50c767585b5e8b9b4078d0d78ae5af0883e25e72d1d98817579c56863526a3732aa2044694355b4dc2a46e61a896a9b5c96888d1e329e7cae98a0827c899fab458c15779f7bd7c934c4b682a7e9461cdf493134fa49434093ab05205c534878910512668134ec3555c08e98181224ce0af225fe3bde6421c753438f2d67c86c091c1d930cbb2a9e24455ea44559477a7c62e84c81295151f444d06feb2a952fc068d2a9881aca8dd71f52544a43d9124f4ea6b0a51c3c33921c4063aac80e8ed9c64246f2c794b103e3c64492fba92272aeb8cee22c51214c20ad3472189928c2c4bb71a285f0c4515491b32a2baec85b0cdd66021ae1869c067a0926d12339e7b254f657bff52fafeb5aa53ec9017f57cc9d1b3d6b1e50fab09a5cb4704271a00d8d4d2809f484a9e3f3d389a1a4074ed5c96189cac261f34f4caaaaaa3c3b538e4ca0b0cbe103f729d17252b239b7aaa235ba94c35ec249c76a0998912410d195ce24f2534287d511ac1e41ceb7156c48cfa825689126460f484bdb1b7bce4d9960aab15d6b9948a80f8f2e08b46a860a5ef8480b7ad1e42468089a508e42120a4cc5e9c1d5f0da49f204e36a4ccfca8d3a3eb51c620a2b254bef6b68d446799ec4817326e3685a8138541e50555535441fbb79ebe502c593ab98a7270b2d26fc8a00fd70b88e8435c3645c794282a82448663479d4fa984da6d993d5696c67dd7ea6a36b301faeab50c310664884c9c70d4d723e8449bec4786a8dc3451285dd13d8724995c4886965e588099cdc5aa5860548f41b7001508ce4780a515a3d594a325376f53cb15a8611b156a22cdabaa5e6b4e40ee088d2978625e3ccaa04d0195971369c9a74ccb827130ec85fa1ebbaaeee1913352df183ae07c555901d38a910e0008a33e265a4f404c9741a02c452e2ea33a91440aaaaaaaa17dc006cd090e961a28fabe9a96345280a05a6ba68482df17a426126a28993ab2d2eab7457744a358ab38d4bbd6ef0f9d42c15117d72ce5b968c2d79229bab73022d11c447550b2a4a446e43f4913d44a8aaaa1a426988ca57552e9d265f557559700d8ab1380312a1808263c9cb0595285328ae10617b63a103b9ae6b27fbe0a5e4a32637a5cf24073ef2a09c6e705154205fe25ff1038271058656d0d6d99214521b31a1dcfafaf12605047481246f506761513f448a4cf56611ae1b5da48f6baf62ed1131f68c3ef79b7331bf7952b1ad1d78673df0f87e6ca802f684892f965da8846c776639aa0cb248200020800083170000280c0c88235118a6599ad91e14800e43a85260542610c96381401486310c02311000010000200040210cc3801c8a74ee099c04023e740ba02d7477029d8106b027b3d2c49c1a08ef0c828d294f402640101423ce81da13b2e24dd0f7ac279f7660aeb7cc62cf4c1769484e3f435b0317489b959c4f3a65ac74feca770db9ec1e40de4e1e7c8ba1e05148dec5263105e540600e8316ffdbec659f3c04cc4b4184c3687e1b9100646f638608dffc4ac0e98196bc21c97ca1c8035de0907dcfcdf0ce192e3f0e439324e7f1ec54bfe88e76b5c4e99cb850793cb6ac3c719d9f48d0c78b405a4a56ca4d772927ca75f26a8ce2455ef3e2edf74591c87a19f05902ff5404be8cb991c51b5d281644e9f86769b1599123d504ba3daf8b3a153fb37763f60cba5a0a24cdebd29890040af1571a92737404b3a36eac8ef82921e49c4ef4df427004c48d643b5af78680de0e68f7008a0e0052a3029b7688c9258422c6392238bdfa8c4e9091dbb938600c10a647b40695a011e0bd9431b8e967cd7c0a256583583b37576d08ed9203e316c929784b213ae0d528382400b9970035576535095fd01caf711fd8403610288ab5994f5591de604a9dd8ef491892b83bf31964c91302ef064ef0d4269fe954e4903f27f8e3f070369223803ab40ff5429e156b953d2fce96b85c1352d2b1d550cf1b4a4398d29a60413f1593f5ba2febd8dfc8badbc517df90adc3f5a0c6dbb448f1d3d50ce15c41db4a15f11e38115e5534b636e93b211aedec2fd83030a153cf2f7fa9273bdc97118142074252115828fc65c5287e1d2bf97105ccf2e23667dbd23b9067913b89314dd35a77b2074cd38c57ec99f183a17d4d75ffb9436a4b3aea963a478a3b32bd08da87c66422c75ddc24331e38170232ba4c9a09e028e4e93063e033cb095b64742901131771798eb7ce16f25d7b57389b54428b1981e0b516787854f284357e4b0351609b34d0717f84a3a1e22a393308cfbec2d337f032095c3c9a99ddaca693bbb3c8295e127af5dfeefc43cca13a6ca28628a50ee5b20da45fe90a1020d8670bd750782d46a08135e98e3851863f898bf16d1ed7afdfb0b2b27126a5dc4dbe9c75a6704b449df76918cbce615fec354b342f9480cd10fd108c21be0f3df42f7d49069bc594e2ddc66ce37538539ec783af3f6543627683154fb445041cc03b987525eb7885539696e6e8306f0593c5e262d98d465d0576639617518225d34406d1d29624528ee3f99388592c58e1042035a0c4390c5f1c49ce04395f5612511d0271d6167fd7f92ff1c6cd4445705264a38c7bfb13eb58a79fc455a5cca6ab3ef207821f9014b58ee3e39716e76c4342b86e956a1dc3165e54dd5e982628bf6ed4859d579ee387032255588717465a0757dd46769e959415c0e9c9aa3350b06ea1c70a63a021e0f4a47a22319cda3b0505884e4b2a763846bd0c429be5199ff92bc0d5a78be9c9b599fe045897e6e53a145d65e989418c3378be13ddf909c3b40a40c041f80b79a53d32f2c8137b98bd4e48b3dd74004a086b6c7432e8d04d6e2a885f2fad0b02a070a680b8abf52d9daee51dacd9bc6970fb1719a2df53d7b4437970e65c95253afeb82e568ce7b1e761ff4fe4bd3b7a5f14e58c629ab3a22479a0714d05904101489eba24a0398d116c8a6d7bf7de68931014a42038c804114aa97ac3840edd9ea3448a389ef29bbadbe0d6895e3ad7c982838eac638620f8cdf41bec9ba2e2668c0ef72022ca1da33914fb5817eb8780794e3b069bdd289f10370fd63b90c38ad752ee6e1cda39b4b39320cbc5fd7e8636b3c292ed435dba68ca0567727701251d33f2bfeadc843737a7b1b339b7d75f58729297099a334b3697f41762dd3816ae5cc817affab829c6df686394fa6fe7fee0fc085d9828f8ce9dd0560c0cfeeb4ce0a7dca1919016b4a6178829b8f3d7658b1d3c33832b07fe001f5e147ff2441ff9f79ef53140b1c2c039d9fe091c33809c4d962481a2253c1b00f2f32b8d94130852c4aaa1156a2c93d21ffc6e5e3c77df90688d75ec2f320331f0b044b65c9901d419c7c7f73baafa180d6fbf9225c2a506e6a230919a5be9576e809afc03adc15d833976c70b713c21f51ddaaa659c53df6d842a84855ae61f2c7038937557cdc49f83cecea08ae288d0cae750a00c22832f7be3974b971c4814f570ea006f370227dc550d60d2ed35c4b8bf361b1f9411a53696ab70b7449f13721e2bbd3fe5f0f66caf628dfd28d1103be3e227608c7f378c2b0da0e66f8b5d8e8543bd31aac3f34c20eb6c6283644f9cc64a97392b5aaf77146882811c6944c8f1bc98d96108ce719a551236a24f30d7c8aec3dc6d503ccf322fff67a64d86432995c15e6ed6c8031b59a1d689ac9a0416cd1d51274a2742de84428e6465880fc3d0c91fe79157b7ba54f99c852adffd15ac30d08a4fbd98b3cfe4c57d5e43ddc8b00fbf1d1fd3ba13b3065e55d948da094018f2a509e9b68b86eddbe206940b4a93d96cb005913882491ea0c69510b78332e8d44fb304e3c7fd7686d340a1fcdf0c145fc4c0cea3f3239a660ab8405c83506bf5637bbcf7ea80cef058968c6ca4cea422f2a3df95e2b76c546e120a1b95f67a28c9ec3a4d0afd363ae28b86451d3a13383407ac0c647b48f4a855c3b53e3f8607e9614ca87288cc78a9ee4406b0e47f5bd05864fc33d94279221a753ca209d000f8d924d40b67f02346540c821631a1b9ec38f654bb35594ab0339bcf2a77508be235ec77a6eacd25629b36c94c377417b46530973d362f47b9ef6303c5a91430442c52fc6fc533fb52479a7c1ecbabbc334bee909b4ff901463c794bf4f689d1374424cf0562de6cb05994c655ce41117a519461a26050f24cc40596118d35e94fe12e81cba4afa000d8bfa26aeb8b07792b8ae14278294121c742809930969aac872aa977b2aa2092d4861e737a20cffd5a6338e79db4a949ea615cd4292c3226e9b4ffa8c086d2df4d4c43892c6826baa890c697fab37a0ed853e45bbcbd046bf94546b1f906a40eb3a8b5bf1f9453ac0fab3799d39c7c830859e7361fef2cc0e678b6c6b94a9ae50b67ae59695f0517ac55b60a2e5f1662a58603b0cb23fdb06df44dfde859e6b7556aef7732d2cece5ea31e0941409afc2509005774fcbbe08ad888c89c50fab922566651e4ab2b07664b7bfb1f057cba0049b419b6b4ea8e7cafebb8943393de443685924cc72425389a7e6a86bf5af3727521f8465c0c5d065ac4694a5ca1fc4dc06d999d1d14a72c97faa5e353ced3a00eafc7cd40be28e4cb2bd600c38a7568280a811b4ffade3d6c87dac54d9e7144c080e01e4dc3a066cc368052b1423be208bffe3bc701a12338eef7dc496f051f8a90aa413e1121d26f81165b62e8ab066bc8260d9ce5aa9938c190dae2c2f9f31d70665a20c60dfb41bb85254360f84a09d20f3f1c2e86fa34bf46c30c2c9b8d1bea8df76ec37744e9c230382988b6207e8962f22bbd84d25cf898017c51620c97c516f225cb54d0a13b9c610b70ec101747d5907546d9a2a2f46a12d8b411c77e43cc8c162540cfe91a6397b68fab1116b7c7c173314c3cd8af051fe6d5f1f3e0cb2cb6b91f4730417df311013a600646b35b322210d3f7e262ff9b635dfc587bf7ea17c839f66cd05164a2ea3bbf1c809ad3000c63fb3bc35b8ae4310372f18e07d05d4deef8c807fc59408635cc6322b2b911f72a76d4574968c20f5ac3e2729150e889739435497dfe004e5282a1344bbd0e47119fb671200b6ee08978ae7c0b1e3a0ef728d383f6a441ad5a64b3adfe60e22639defd82a8e6c57d87ff16429eddcce5fb0b4c263d179c4728166bf83ce7244e23a76a28c2bd98cb1bde56c001c5bc4ac32f3065ee1364f6511b69f0fd7d7982e0fd69139ac429d46b1a86fed3bdf6c403de2c41674656e9b8f694e77d92a503cc86c36f5bd9298bbff1c08a9ff49801643449a8f27dc87879fa96298f4556568463621aa1e829e7968e1417552f5f79e0bbc191480eb1ed1126ab5209b56b7c2f8a3de6e5c5938c7584a0f35477a1ed498d38bc377d20211d159209d861fc971a63c5f53342ce81eef79462ccdd12d802cd956cd1df881ef86493a82776585b8ea160a68e94171f79c13898fd843aa48c73ed4448e285a30e67866982c7fd2cc6e2130d2ae12dac7b1282c06f538bae2553ef4c4844dad9bc73f2374cb6e876c191804aec326e7f487ce59e9d90ac00b8cea24945dd05a83a89eb66ff25ceb483ea340db81d988337c45ff0206480d95b2e1c79d9d533acbcd0cac6073490f6373b5b5dba6406da5f4e04bd41fb10106a2f81973ff4b2a0bf4f9639e1c72ea02cde605bc5ef5fd7f6355b5aac77bfd7b4f7b6c2d3a443bd5c99d88b04e2a23d5cfaea32fda8ea7cd54ce4ce32d95f010ccb47fbc0dfbcdf51ece489d1214d767a2251c481f0f1955263b44032be5448b1dda3d70a923762a64422b54d2ddd3004aec9986cdb28697ebf0a7c504e692eff9792932a30b9f319e4f413a98d508f233e55c93d7d1179aa91081098a41e66c4da0cfd878516b1ade6cf41641eb4e75d0c3f3147153376180081588ccc7bb11b44e7f0b9ff99de76a9ab2d7211fde321a7c6d332165334d3c83f8d8876c63e7aac7e71ea299ad58a3569cdc31b72f0a30abe2ed31a5997b5b4369bac38d18823e0f121d91bfb1fb1d5c4a05c377971f333e207c6475bcc22ed2609435df72303e9a323c97d5683883bf4caddb32105afb2d111459dc602ad2e26e32e3269bd8cc01b2a33c972da6d14f497e303859c4e9775bf9e07f20da772f449fd8080cd1e4b1c87a416eba517d01beb062b0c8c02d35124724525f0774acb3e0086079fd922afee1ec3355187725d4ae9122506dcb8efe4cae810fe1d9015f1e26101fefda08c9d9cea1dce89f87349eef6a92841ecdc5d6054a7522a24d667ef96ddaafdad2461e39e9326c912ce6fd35198fee79e30e97efd4ceb455409b135bd0934e173a056ebc8515a623d8b149819758725c2e5e474fffcba471737f1c616d0f4be1d4c6fce5f4405cd4bb327bf9073282b0f515156c050eb81a43f59318e98aa3a9d13b681d4742e7f0e3dfdaaff0e8262c731b4ef3daaa34342d45c83d2cd4478a11315538cbecbf01dcb2348a69941f5a76597164efbdfcfbb7188d7c1a01e60ce453258918b2419ed295ec09c0dc8886d00c9057651c284314e26beb8dfadad2e15b5973b9b4a97f6866fdc6fb46930cd3c82cd6403429ce9758d12d2ebf780ab872a0e3f86fe49d3f26c7a21dbb17b2b8b5b6575d09538d33fa146a93faf3bfcabae8d6304bf67d23fbc3cf6ed2fa0ccd826be035e352b3e71241290e6f2e894b8519cabb38e35c2f110a2f2e3f5647c62c476bb78f935034751cf6e96acea5e2e6d914482bf6c7c27d66e3c7c0cb527edb8d476280ec1725fbca6187339104240a535901e0b7a5e95b2fd901923ceb19cb7e381b43aefcebfe0c3add476a00aebcc447b1b84ace25321d85f688e0ff50dd6b40dc2fa77ff281ecf52cb35735204a643a970e2babb69c19e0ea92a4b0427660ec632e46d3a24515cbfa87784b69b846f4e0be4ebbc11c9b3e49bc99a4e8b94ee48e859817797c695e82cde551c3901789a1b6c0cead10621c73ad2869d9568710ab109856113ac2e74b63a00cb1c31bb6614c52ba9652876c98a6e60385bb1cb5e4663477093a6c5e6777d9631a5381c6a9da5f528566277dd3a2f1d40402cadd2f7444d87047477a6ddf8a37034914f7899c832e861383813ab7053caa06bdeeed2873e7a5ae87d1625bc0f49eb24ebb6e776eb3c07f3196ea4f1495163a3bd702716e87bad465fa02477ce4000e92f16343ab18402daf8dbda70ad1aeafc05bc185b8af7089fa4e04e296ab93000acef50e6c52c2a25af13b5aa2414a9c8da4e5da0346825ef9dfc24b15fd6f9da04dfbab52daca8f681d0730df784d6b3ed0eb3b281626c966a8d9ca09667dfb5dd172bea0fd872fde9131d896277e24e81728d2c551e328c99728038bee1400af2114b9eef0134cd67a081b3c81295c763b5a87069db37cefa83893c86a4eced2c8b3b464351828e1562f5cd19f26f9099c7bacb415fc4245260abd7a83758a37208e305d20b6baabae7b1bfdd3d918db915185cc066f68ef3f037d790c61f2716487637f8e1bc465b7bdef133c191dbe6cfad55da8d0467e4268ddb5775a5015ba65556b6d2a03a7b1366f52da5a4ecdecfd7e11c5ea72a4f4c1c69359bb25bd0f2efc97bb4f77c87189bde59697965c62567f726d68b3bfca034abbeaf2f544e36f8051c41a1509e0c8ae69bcd01410266065b36a4b1462324b976a170010351175351cae0438877ce207e518b96d752c5d9aa81c20114b232a642c804653a9b14149574dd5742c5e2631fb987334404fa842044ac91130ce12dbd39377311e2964f32798d44155188c2720d480107643d7c0f41055008d228fc149426b8a4fbc414825c4cced3799c49c036b136236f9c67ad8cfbab537c4528b236ddabf457e54698cc81208f4ea0aeba1a4af172e0ed918c98ac045be0cd7cc2a1058b65c782ac117ab63db596e400948ce63f604ed2667805430fc00b5877a0f671ab3ad98149e2af8c8e173a31eebb7d7248a24e1895f0f689e8bd04a959e0ff11b0355c0460a6ede5b344f98d0610cb44a89ac1dbfa02aad4486fb371d2926b84d99afeee58f0a5e36ee104ec1374c0056e0f5709408dad78a613f336158e54c0685b875d8caefdf9e2409eb49dd742c7047402e5d74b2152be20007b9a80489fd2370306214825ce6b96c0127cb744eb7184dea121091de869c35f2f2600eacdaf20af049ef5cb7ae1f4b467023b9cdefb520b09fae1bd1009df78a272ca58ca6419303a803806650c57a79a998ee9cd50d6820bfa3047cc8c83b77414fcd865a8f2782c94ceb6d6c68f5449e4835f9ea7450221dd03263bdd266dd7b76362e0ebb0e8c894a89fe82eb259ba0bbbd0fce9fd8b3817353f938a9bcbf4b3f22bb3b64a4d7fe18d63ab9e41f20a0449d5441545a623c6f093222de8d455c60b70e39de811e9e90ba0b9e00b385abbd6b1ee597208d0eeb94b44c1061eceb528260ece507d41ebe087f08ec8a935ac443651bfef5deab2044d09f9bf74de4ca273abd7149198550fbbe5563ce471fc86fb7c13ebfc08e30ec454915aa777bb27907786ec86300316febc93fa07c86e64f21a78042cdcb2941bd85af3df1cc9d4eb0daef49f006347904925318621dc021a7f570d92abc99926db61cd434d00186b888f1263fc1f84e693587063363210b37550e0db9b72af461822a2ba80daadff3525148afeb5f1d1ae30c6b710ce90603284ad4433d65c47fe469431461a838dda6197688beda6155231bebc8d08b7f38d334dbb14ec44364142c54e06697680efefc177c12af44e6c775af32c200e68e0cfa14b0871e7ad7a121f45041e8fa63a198550175ada68521a640cbfe6cc0d1f5940ba262dca7ba188806705b9d9eded26905f1f62053b24a9b2b50d3c2f910806f9b2380c5d70a2c99b5a2c1a41805f788f9499f6c9412b88e9be32eb0ed0aa22e8080bdb45945ca22c5369b36a0acfd64cf33f4c2e54ea4a5dde32c5b9cdb3f2fe9a3f6f3b04be7587670ec6bed52740a15943c885b9cd2701db582af88560a7853861615221108793d878315fd49d00c47afbebc453807a316e5aff08417f3ba6141911fe323567036c37488296006d0ff943199c92e42fd7423845a6bffb80adf92a7856d490038e516e9c992933dd7fb80bdc4249725e40f16422fd38d4f9374adb927918166b21c74913eca3c74118e662160e8347da56b9fd6fe99dac63a96a0a01ae6a1e381a73bb124869710279ba323503676bcc1251e1e6703ec9e85c3635beb7bcdc045ee51c0e001181ae700d668647b6772ca0fc950bde1b962190cc935143a145fd755054bc1231edd493643126580b08a2fb2b781cdb8b9b954e31d1ce1c7ddf6c30b665a4685f187f814055395df50122db27e4ecc482f40bf1a58f5a8d5cdcbaca3be12b637b71e41037ad6a6ca7edbfca626d742e8891ad6d1c3c2c7e9a2c98349921753e78288e20def0576a1888ffd59fc6c4e57364c43020bb373d0445fe14d9322e23a1de58080f9632ceb57d1e0beda4898317d5db2d6641dc9af10da1e78c2751ba5b51b0aa7ee1496dc41fa1a268a481980aa251bde11cd56fa14ff24ced58ddbe33e54674333b69a4b2e23c9db94018dd14a61d055c4b683c155337ee6fc380db507178b5febed59a05be00c3ffd0148b69e2d69d8c99dd9acdafa878c2cd000370d09efceefab9f075ede159485d3536658ada15ad3ad11ee57f01c96709ee02b26accd699faa321889d175a6741a58020bd8a9cb7a63ed6ae125965ffc97057efad0e551107f492356cb8ab212e7d3084b295525c3a8692ce943171eba2855e50b981e9cb30ce8ab22b072f62df474aff1a5b44e928fea3cfddbc292dc91a996867a23a6e3cff947668978535062b33701771aa87aca7bb1b6e7280b90822f361366ceae45c504d8d30e2198193b01f5ebea5abd19d7d79c4dfc1b7369fcb14f1ae05f5ac14b0cbb3d8dd5add0f506bf0bd0d60bde5ab470a871c717046500a45f4fc885017434a2c42708306e6b7d14e92af65a11e257da280bb41fd154793c903b392a3ce12a9853c02c3b5cad3019d32d71093197da5b6653bb7dba90d9e27f62ff4ff58c790dbe8f8e8e68c90b260c670a2bc01b19cab53f94a91f0556d832f5a7454c5cd5d1e401feece89ea046c5fc2b20865c1b6a32d9000a286db83bf8ca4a35189f2b3c2af2b31aa24fe5d71f3506817ee551475c9cabe668fde3e28e1c91d910ea08163a3276bf5591fe294f9a36206d8ed6a123378bf7228a79c05b1448b286856025f091183f41507208abaebac280e6edf828429a1fe7e5a889c1930481571678b82e15ba1554f71a25151591aa8a0578f06e732a7f20982598c06cfd2958252b9025174ac986cfaf35c193c74dc3ba523cd0e72a4d36def94af62d42da754996a823ebd6aa22bbf47927c2a6e60a98144eb23797c0073d9e9ea5ac1ddc2d0a2838b8912e82242e77450a8b79aba01394dc4126e948bc808aff7c07c081ff28bf821fd19a660db88e2ac754b755dece8cd67330c6e0a1d634f2445d3f4b078ad614d960796ea12ccbf8d752a89e9777bfbeaab41fade4fa759601712182c4d10a2a9031ea36a57ac146b2272cba79857ab8a0e032ef2c0d52a8633304ce5905dacdf0a18bfea83e781e6ee1a1328103aeaa2645dd8a4016283cb1227bc5fc958ea68a874e90089218de4db70f60931d8a2c46c79f5bf04d217a766cef59f59c29f8c3ec3527cc80c71a2ea7f2c133e297d5b440fce28d7fe66393f9e0611a32203e194a8cfb2b19c16fbc024e58f9b8971a26b36074ab85c1053b686756eda4cae85874b9df112160f640571cc8341fc96c3c501c9fb1c280ffb0fa3ec36286916aedf61b3dae4b459a978e510127898157b3c86d209fa6d12f73c88ec06f07c8391c2f1879263d09c7ec6b2caec6f04edce1edd409e0dc594e730ac6776da81d4b054abc94b5beea8d751336caa5b636ab8e40d31176b2f2f85012efc47e20baeffca04c62decc2698e1dac14f3e0a58d7456e3d2db393efb2f6ae286c0bbe089cccbd0c7499d6a49345e7cdae5f466423a497c3c3d7212c68603d5213fd255be703fac3119d031f7bcb70eaa3278c7a3cec8e4cdff640d0a5212feb5d175a7aca6c3042e71ed4d0d219e6570a901226c1b0a3bc25de01886cfa482cf470879557fd06700c1f3d4e90b0f8984eea3d9127d6f9e7d5f783068d7108296329b04914a537eb6f428c8b599e19387f919c79f0f8e01661eed53fa799f75dc99bfe64d5908b689bb3daa03bdc5f1dab4b9baf80d0d22ede36b4be93e1e724d56cb0a185045484bd0a351d80e4e400c40195d287a5bc368b1eea1622f43836d4029f31ca23ce27567b4d82605da006220026456352a1304663036517514eff8d336a3530f25bd5a3a532ad61c32ba8639eaa93e6eaef8973ef3b20583c9dec9bbbe4cac2379095b36c79d55f964f7c1a2928e9982fb5dfd21d5ddc649e55d79323889609ce3ab9892269de9a0c922782c7b13d032f406202b124b2d0a1bd694169f1971725787a658713f1d5d0c4d52df66a5f0901af0603f49013c4b1cf69e4c8db9c06cfc0664b3bd01812d76f10a98f0c144525b11784c9cf9a0cd243606fbc68ef5f5a285da380460d8f4787bcd9cd82df8f539cc574356c4b1ebefda246e3425d58b29872ba4c9ba1a0b602c16d63a75cb84a88605a05f5cf3a9b21119596031a4e24bc7e33021295ba6c022222f31a0d48646c3cddf27be23a9c89c994d03021d0016372dd6998b260a636ba4ac6eb1ef2fd6329da4ddef69ab42c3c5de12f2a5a35c801dceaa38ac8a18065c49f7dafd29bc1e2d49441c54f4fc0258249c250eed3acee1958b8abeee64573738e96d0b7b69c2a7c0fcc89bb69538277c9ec76c7c723c7cf1c90075f3578a25e20bfc4c27593ce4687554189806accbfe8669dcaafa871072ac84d3918dfee84b878a79aef7ee9210c565d62ad48a0e4dafae0136abbdf4a48b083d82e9ab4245e1136eb026cc1e9e784dad0933340b75ee4579fe94432fd659107acae17337454e1488ef103defd2eb4ca4e6ff9d6165eba53d3c48415fe2c6a2d5d507fa53beded45dc65585a74ef4b6451a051d8cad7d865192064d289743083a224bff64702fcc323ad716257328b172861b9ec86e1eaa20f212e31def9be0e79757ed75609add853775890b62b3f89f8ac55a7b254462e26bd293b00549f7c5c4fb360cad29da9d2ba39b6bef041bcb224cb923638f7a9bcb0048225382bdda6d4fa8fd0238e6ba2a7561d273b12aa770d5b930c7e7ea549524bcc899af2aa243232df7608e712ff6ec7121645272618d67bf99ab7f26f2459e1e017fa96c46c4669ddbe6153e72d56d4f6a4bfa81b7b20954f9f1fcdfd588e5bc75ecd35c70398ddc5fa0352041d48dba7580d711fcc9024cd1d9db7a8dc997ab2a054fab250fbdc115bafb5f43a10beb16657dd69efec0d760a3dc82656bc361aaacbfb7c5325bd078eb09d7bacbbba8f472dff24999f73ef32d5f8f61b67ef0fd000bc525f38d22f2571a7780bb7c37d5781d65204a8757e9b6ec05f95aecc5abc9beaf948af45909a9a3858be4e5e67f198b995a03cce8163f55708856ffa4f64cb19f698d1adcd7b315831bc9ba17bd7a4ca5801b982e679b905026b4dda98fcf8f657a44e5fff7ad33b6a985d6c96a6f0c25aea32200ea1722eb116cda658a1f5a3e325b4fc65c08984b886f5d822d60b3bb17dfe97309842c97c6d5f388ee7f8c9b2768a997855c73bfc1b3f570447a9536339fd2ee17946e6bef6d430989a04125232a5ff3b7ffc648953122a1d64d7c0964263e26845c36080b7b8a5c8bc9ef1ed30b0d2992100e34530c690459381c67dd0504a2abded4c39703796568179fed1d35f8e1ec067a61a7f58ec0c69d172795fc2259fba7da4509503a0fc83b07f96c7b8b564b5d9505a152eef1ccb9f1e9ac56a4e2935306cdce0d0e18ea00fe86b952f5cf262111cf2412b5e430a27fc63722544f32147dfdc8b4c1144db3d82fe6abf7384bdd829599c3db011690420ea4d947b602593907a0761cb886c3f4b232790aaa274d18205f9a4a2ebe7ebea660715320a126d1a78244ec9c8b486b9d73209bd863fefa91ea32b85a9650ba3347ef040bedc277e6bc5a63fcea24df3d6c96fbe613da1ad6cf77765d162cda83a989820b18a39435ac11190a04fbf683294fe06fe7b450daa622d8180e67e7d7ee09f52d2754e2866f091488560b7b404eefa9b32da9f23b3e7d151b22a01832363623100f7d043f2a0ac418d84dc0a7cd450622ddca11f9bfba739309b1ca97c935badd37fa7c1de84ab752dcdda39a37cef2c8c9c625b1481ba7d5666526ffbaf08344cc43a26273b4a92bd1392af9bc42cd14efd58dc91d6cc6f5514dff15c5a2a93bbe59cd003a4bb0c267b8a11e1ed8561f16cf1f94057296f811501c6707e690afa07b61a3201210a7afcd0db04777338635c84679e262169563dc14bcfc4b7205731e98287b1d0053df4a54a1b94c3e5abc5adb881a61e8296aaed357feeab82a44ac596f521b06e8fb52425528672e08e9bd9cc1aa8f534106335b15687b853fc15cad6cfe6271379f952f41059773330e8b1884439ea519ea0323007bcde51d36b70b94c910f1705277d2acd16ec81cf3717d247d842a48929df91ddf3c925ec5fcd57555d0af1c22e787dffc7ff6f0235c4ec496e9d4c859d88911bf8c1322f5c29aa3ce851d3ad7d850437c16fd65747e2fed6285aa68519b9bd3d070e3dc48ebb4bbd11faf191bac8501789088f27541bb7958d004775f5f6e4b2f507082915b0812fb71a8342f5332daf767033a75d3e10a7c8939c77266757c8f22fb33903658e03833f5cd51fac21b51ba1429d32a4d1f1aaa9d28d54c3ad5b5172e06b150312d3a8efb5b228877a30f7f76a965f28f39ba8f1472a14c4d0b9a6fbd0bc4226c7f864da90e51ef1a285bb0de66b30bdee34e89021b905ab48d26590fa6fa532215779c5a45710596e9f09feae82796c505ecc3c30b6f8fdfbc73ee568c01d201a2a2384ac2a35fb32c5696f97ae08cbf5e77a0fa1a5dafab6950649990555e33159e25a5739ea086b324d39eec76f24ad4c6068c684feebc15e2791df19521b02cdd59408e59e8a35956d063a295bbb200c448d6371ec41777a80cda9874dd4c74e9dd01dda875a53789f78733852936c33f689be47692b805b8698241fea8c4d00abb14150a212a2b687a4c0ad46a8efc4880a54fbb8480a9f06dd6dbb01cefdabe1e508b1e3b898451225c49819cbce815c42451f83e503784e83d678ab777214661d26a279927acfc9988d2e18fd95d1aee8c573d417ae262a20f2327ca127968489ee581818e493f93903d7c7112af476c1d48f673359deb96288b0642d841f8ae88406b2a2e05b8de44733fe56125e26cdeb9550e2f5089b64a7be809032684304d85c6aa6bd0a19511cac79a0a5d96ce006c0c044f16dff59fc8e19f5cf559f0248d031c0b5e47a499a41fc8ce33b131b78500cb9358ba7b5de3af38955ec3cea2836887ed673732ac16f007d13568d9e9332e75b0913185a6f4ad48d0aa4814b60df013eae193509cd60fa783426785b4255e98d7e928cd8b41e189fd5f2c4bb8cc7b497ec286ebb8f7832274086bdeea8d66990ae9de9cee2b3e0769ff8762ff32796bc96b2fcd41a2f5a49068684fd530bb0a08b428b11c4e3addabdfd5b258a04bfe51eb2336a9f3030ae47714bcac26c20480d97915a705673c46de58ce8783a6a4c38510d6bab4957e434ec350ecc1763710e8be460351c4049bfe876e9a9408515f8347c8e39351f5575e00e13ed4f893925c65064fe260710066dc1bf020f74597a1e2de87648896db04bb969a5a9fcfbaa9b62cf8879bc56c9a30d96ba7950fc940ec9914260291eac414a0d5b8b5176a7ae2efaf7be17f065649ef6823c8a6cd5233515bb4c474d3ec4add7cd42c22870f5537a190a660328b13bd83f93ebc9f379b25c3f743a5cfd557930d45e03f8f426833a85c36cd5e2cd37dbab582d08b8b8f28648310b4b47c084128f4e2f30168b27485813f69798482ceb9e08c2a62511a88cecd8aeecc1b06115b2d1293d609319e511a99ec607fa256a2c9206114075d82b3f10a2ba4c0dbbb24c95a415e986c383b5a608f15494222a8550e5656fd36c2fdc69822469e154bc4a565d5c39a3f3868b89f0cda1172982e1784144651a7439ae32a3ba980def3d86d57452f112484a6c860cfc147de5d2932923792fc19bd464b0ae89021d9b8c9c1b95381e8d2f35c8ec5a53c82c60573f93f64cf51957f029f3d99ff94f7393a1225e482082ea1cfeef3aae9938a23ded96953eee4f3868c33f06ff8813c495158a6b5385c9999e06a9d391ca392bd20e1e88d689a634491a7151956064cd7cee4bf9ecefe6f8f5648ae7cec2278ae76ad6a1492fc222e0077412459d18d6533f9281970cc220b150ca0e6547ac85cdc133296c35e624d114a8f1f44d9ff47905e1164aa6fb54b2827dc9d40b18b84d0b4dd9a56cd6bd0f012f462a9f76e78f16a29840db216d268314088496a4f4890885423c88224d47cccfc7e43a7317a5b2abae7d603bdffe232fbfbfef23c24d6a9143203628537a75123e908011a53239e1942189434342882eaa8165e753cbfee86c63208d7eae1003a2ac323154dd735ac83391fe2aed361bfe591227ce8629cdf2b0722df0b00afe8df8ad7098e31438dd3e7b9a6169302a3e728b62273abb8d202d690f8cb2900d9e59f85588ed4294e1e32e98479f14138be9b61ded19e57ceca597e67735619dc0550e6fef43d2b9354f99ab88c0a6ff93daa29731247a9474b08ac7be663f74b7725fc352a7ed757e8c9d1f867fdc248aa3952eddc547318ed2d6449587ffadd8bb2fa42d7875ddcd3750f120f0cd43e0d6a85472a7504083a310b2f6e9c65af60d66bcb7ab17ab2edacda3a2ed8c405b30c8591845baf43f01ffb10f9f7bd745c3ed8aa7ee140232bdbe48fc4af335413d93e649b14963c532de96c03e1a79dad415ca8907eefcefa7ab15740104b78b538ec5bb2243b7ed26b9889f08e535492d1aaf5aa7b2a90baca078fcb84557a539edf5e54c7141e0312736237c151653897ee481fce1f548e5e580879377abecc18c882697a5775c0e914b55e9f7b9e6f75b46dca64070d75e83a31a83e11b5bef63a0fd59e81b56cc80038ffa18747ce862cc3e532953196d233642f0f296f0574d83b4b4ae39404321df1f47325e84f7444ce86b222dd1da34c1b2a6fe83e48508f58a3f5e14675be470a2deb4db01553c84688bd904b4e74ed59b33f8bfa9ca6c267080286c306720f3c1f3e92288b3faaf171af1701b323e28565e26df74a42301a8be568dc0d0166a47704fd78f6d5eb64b85a0655d6f1cdfed809f56ff91496fe3d19fba1195f1d05d2e15d09af310f5c849c9f4c06c2d42c84c9f0f3f08ee073007bf370b13e1b432f3884e55a254c980b06f0ffc1545414b907c3ba80c1adc2305dc4d13ee8c51c509807630e695a02bac5093d13d69757fb99f8dd7c48ef108d550f6e757c6bf67b28be7f518c1b201334712a85aec3471e08fbca221372186c7945f0561d1a32f6e3d34b5dd4e79f9e9d52607d24b6b0833589c7c2087178b226224642908c4691b3da4efeb56b16c586154e5a1a95ea1958c0da2ad59a77349eafbd1c317e280a43f35eb07186eb86024c31ddcd162e364f373b8cfa0136538fc436149166b8bd504805dd7967840063871072f8f258301e4f3cd6fd3b8c9588fee3fbb91c008d27c536c9cb7052cd26fdf018274452e490d7149446fe9a58ccdf39d49cc2a16756370bda5cd3d9c3e0228c2e17c948dc5f49b3d81f1ffdc159985c45d7debc7970f1a00fb20073ce364333167dcce5f3a8c2ee5a1d7e94e69798d47851a7e5b197c32ad35be097168be7b946fe03d30b3990abf889c101e17055d8c6374809bf16b45a0f7678729dcc5ee905004cfd4d860c9a954d4f20a53a8959f8b3c44866b858e6c5881386b94a53ef33b432ce82955a355ea0b36b329ae2e731ed6cd5f9cd74973fe4bcc76fe94a542d006e0ffc993bf76c49ca199ab855e2c450e9b5a88090645fb5cb5ee130a3e82ff523266ea88267a8249a933f025f010b0780ea7f4bbae8ac62fa6eb94455879b3436674c2a0dc69962c71de2f0e5c742ec903d73d15e312880cd03da7890b7c68c2e6395011c48c70e07fa2193230d3a565f663f18caa574625fe8a7e3a584133e04cfd1dbf49b4a1dfe6666f3348e0172d852f97c66583b1ab8fdf9a38f1297eb0d393ba52bfa0107f7f58a59524acb4cb240f4d3f5c8393946e94e0402e2c4b92593b2fbaa0a427cb56b56d10af30d6f094eed88f727ea13249d0465711664810a60e01a5e7d62a6d7baa0e465e157a7d82f46c650ab85ea5b11242dad7a674e871aaaa0983530700a6356b7fa636404109292e6db063900df1d2d308de276ce8516db2c8602305c587f8f89678127e7f8be4e01f8a1b09217b958d9d6b6035a25bc5579d090d4c62516f0b66f39888909b325b9213c3dd113b917617c5aa81f0d68e47251dbfcc0021bbbb910686861063e9469d3ec11ea5cd27fe82750129a30c2cf74e48e96f3313ba9a95a9374be37a95edaff2c4ba3fb7ebf1022f734f5b5f4830b292a748ca41266e9ab0e90cb4ea4c0fee740bb44b9f27772115cd7398b3e10c52bd8c392ff15f5677ad1ded937d9be5d4118323a9b7549498c585ed84c7979db0d4657235afd23b412754c3f4d1b15c50a7ef978318dd64945db8a194b73115fa7e6df7866954600b279d588b771e0dc68358a03bc5460130211ee2ed69c92f23e9c3e0488e3d11dc52d5ecb23687a8a6cca36e9b3503c1266bf8d42189a2f9c84dc14078544f86873ed86c3c0d31cb233cfa80e6a54ec32399d33fbfb7b9aceb7bf0ddc94bf80556dccd23b423ea33d62e31a429879699de2c61eb4074b3332207653a9a8804329e150890987fe373fd0e01b2de141483fdf1a1e3e11bf0147e7a87fa0df77035fa8eddc524d3a451ea013345a02a055c406ad1a324634cf1486218218bd4b3c4886f49c15a8402e1c1a5a0a2a6f67d46c9ce42317c6f3f1ea7c08b552862a149d9d5917ca64ff13c66e85704fe6de7e07932fe6d4fa6d58c8cfcb00c52b9cea4c73334730420e05001d7e4ccccec47dcb10baf928765d17ab1c4a806a0450cc3b194cd391c739bc4bc0f19782f47f29622cd9f95b2da1e3ad8a0052bf4f0013cc3cb99eb21716007abb27327ac665889f3eb124692c802c64e9f10f293d9c620fe01e4af983183dbd55817d2cdf7ec5137dcc115939b3ccac642f0a0af5b4f41e02e3b4c419196464da4142b1193f057d59d13750742d1436be8053882651abe9d8ba68f3149330c0482e743dcb23972de8644a83d736cc15f99f8da99f2379d8648f2b53c719610178479f0bf0c5829e67e22350d153bd7b1c1e6e6cfb6d4a5b81cf3cf7492ddb9ab11ad0ed3aa8b6adc4bebc7608eb3cb79f4c03cc36012ac6602d546010a9e9e73900081921e3ffa53201989880240a83e913ca1520fcbb611a191018a10010fe6fdb4040a40cde4efc41b22b6db85186bf68179d6e8752f887e4c1741f87a6ea27b4c9a6a5399fe786b69449eeed16bb02ca02c102dd0ac43e19cad8ec2c84c645a1870eec8cf6303a1083ddc09509c1b94a99db9b32aa43dcc5c163508fe958120799fbffeff4ca2036f06dc419fe908233498ef1586fdb9c7327eb3f39feff4f6245b8a66f9c73cd763ceecb0fd5b5edb787ecbd7739aba3c3d721f1e5165f7b1761dd5e03645459708c2d57cf2aafb4caab4b85eb6c39c42cdac004526cb76d9ebbd1db916bf6aecbcd1ecb4fc922b1f42d2746ca21ac24675eb2ca1c12265a615c5e30b9c85b0877a9e33669e306f4ad3fe79c732d65105b9386ea8e3e5c3fb032c8f3b8b2138020dfe8de7bef1fdb6b13291226e53d1d0ad31eaa6a6134e2342c8714bddd73f7ef8099af0861f7250966ed71def1ff0f04bedd649c35d5e8e4e008811e19f16c108ded2022e79c97dd80315039a35fa127e0af8594a69ac95368269479ea64a4db846b7b18690fe31130ba9c467db84c8d21c5cd18584fd410262b7138c46067101b4d3dfa74fe5984907db933173b3e23a611933555935adb1ba92710ca9fe7746d49f853b54adbd8263ef07f7e95438642e9f0b89f1a75e9ff316b650f261f31da023f5051b26f18f2b9245a7174220a7f4abbe4f8ff3f223d92a1fab21225529631a73334556a16553581c26cc6a9c6db24ff7c3be28476816b350ecd7059512602d712ca8aee11699232f46ab8edcbfeff7f97b76ff3f6857ea8e9ffff8f857268f0dcedbd77edd10c62a3754bf557a7627979948bf053b7280cecc54f082a414c35c1b29619bbc48ce51c4b002b4e55071373185106b18d842169dd9887109fa3e98e73ce39a777103a161344554336030dca9345b80c1b9b41b4e3bbc769b6cd8d9919a3222388cbbb13e56524a55d6a614c01258b7049ebc6bcb69b1ebadcccd63a50d57e775d0e216689db1d17a1414e6bbab802d69c680731b187cc14033119003cefd5439785fb769fdc35b757881d4b7bdb7bef3da4b8fd97b97137f4de67310d02325b6606df6e26fea3fedd01e630ff7e02873c85b3c78d7ab8e3bf9b9ae8facf4310bfb6e69dbc8a1d7bef3d3b83d87aef58c994df1dd93b27ebf36df39a0878d487563e549a456840be8d4f9d8c7bef5d0c4a06b18959d1ba11c084a25f51d3a8b037ab41f245d3c422b48d244e5b9a003e4203db09f0d5789dc8c8de7bef50539b29ec889dda2316d39a8fea8b2f9518261d6db530f1ba136bd79d5db862d5f99493e7979f9517740cebf312ad951e108027ab864c926525280684b5074326c191738e3678cc938b050ca5ac284b48d88576672bec2df1ac31383b05ceab08956b35c0aa3e9717469f1d1f4277fca3c6e96a0d4f88905036b1f7843153c29d15e61496d2ecc5d6d50f698b6cc7374c9c150014d90ef3290a9545a521b9ebcb27d3891331c0fd32361ca48c5dde7e78d472d2ba3c5fdf162e3125358e8c50c5330e54a7148eedb26dd8bfd6563612407ceb8170467e323bfc8067189aaaa185c74a5a48cd2cbc20665031a5d4955552bb74768b4c0405f667a1e26114d9126e1b53b42b8a880a4a43c760a6901595d2ba596162c3db2c25b2bbde37c400e7743d8654ddf49a89b819d8ff3fd8f676fbfff898e48a19e09c734e026b7bbbd5b0e09e852d558f5c5be38e57b73adba79427211ca6a5bd92a4ceb30f0aa1f12834b4b17d9a6ca93009e37d9faae8f2d8c3e34c5c63f9ffdf849d416c34ff4de227bb9535d4945c4e665a0cd611ab066b46f70575cce7c016763022e75bade01514ab157a8145b9d07a368f532654aead625b0983f43e80627cc5bf7c414e602b54ca70172b065153ce958a8d828673ce7d7a223e401deeffff6b5aaae685ac71e2fac698923afd7e4968bf1fefa75ad0ddefa00d4c83da04c3d0b07d999e55777d58c27559b39a32b9bc9d325bd93483804ca8c05793a0aaa26b0a9f13c1b59f7d62c48c89183ee215f68584a798cc928f876c660c66a3c8f5128e11c55a124e540821a18bd9114c8f0e2f5cc9434657c60c1c95d763d93a02be110bfdffff0067101b3d74d3c1d351d5e2c805cb128a198322ad52e33e19317572c8af19d3c06d6ed79bae434e96ba5967c7246400516002b14133195e972951c95fa5d810c3ca6ab1120dd93037ceffff9f00630cec598442339a1ad282b1e29712a55a3ed22db794bbdd76cd7228887c6989c27281a9c9f21aac7ad815541c8a028b12db4a9e69950601d9c939e755d9db4dd6729d386bd12a22cedab0b98e30232f2c49eb6afaffff49e862cc831c61053e777c4c3e2ad73e62b0052c33265634dfa9aa0b788aaa50907c952cf78dadd9b19447ca809cf3ad98012e5895d70b48a5528267870b2b48050a74db1c6d59c8ace58e4fb372f8ffffff8767101bdd3fc7c3144096c65664c75c25d4a648b52e1dae947afe79928cdd7fee2c443c837b39feff85353df59afd8fc5b19a92e6cfaa1931deb65c69447befbd932d9f47d6d4e59a20e4162386cb598b73edd4d1da4b3245d4c98385d3a43ed14adc48ede4d39d73cebb5a64109b31a9e3c3a293e89af6be819754ada3699aa6b91c7665629242caa2c1f4fc14457f9e485ecc5c5df5ea55b763d7e8bec606586fcd8aab24d85480d6040a78689d91c6e352e78e6f9aae02acab37f1f725e2909fbdd97bdf39b9a6f73322626e06295f309c911f624b4f4e463b62f74f4b5da5b0fc4b9072369580cda445b5e677e924054544eab055fca8348a385ed99573126f0357dfa49ea41419a813e03e49015123a160c9d9aa2ad1b4914fb34c2e698ea7ab6d04092aedbd07771d00b294183516a592e9c609a8c6d7e3ee9c18410d6b2899dc9ef9a02faf51f6850c3c2bf9008148624316651b77dcf85ebfe69a03ec3af7a8ebad8bec2ebbcd2eb47bd4bd76b174efbd772f052ac239acc63786ea6a4739add8a7c79504388a852899bd840b2410bc4086e9dc1aa893e7e66e6645a2c81ac686507a3e1e27a4ee620015487e6a30365c9dcb9d44d23378dbc07ac789b1c99a39063d535690667f325a4889cb4d1403151dedf8c7e6263439498dbe5fca359907eac66946486d6a0f7d301cca3f1e50b25a572b8b5636e243a3ac820cca6bdc2a3962a5a39b16d5b0e1bffed8311e5f40dc83b33db66ac61cac9f55b59ed2c692552a74f94cf4d0444956783b4c670b6de4703ee122205c3316116efbffd756b14c0e6a29a2652b77756ac051aa649520d9b9f628739e5cd0823c36f416838c802aa55d79aaa1a9b2e2f42b533712925c67dd24199e951df47151194f55c7a0bce22ace39e7f4ae8ac3ce5e7d4111aa85f4ff9fade9ffff3fe1b0d9889f6b2b4e06588ac150dcfcffbfac6914a654890c16d78e782b7cd8852d77d895530f56f14c39c3db405fd6c4950d6d6812819c73ce390f7981d2bb82a8710acda854f185016fc0a4d5625adc9cf00b116aff6485676f4701c21def92531a48e2b2114bef61562e6e0da085227befdc2662d48c6aeafd0049a95c6d4970005391cbd912571a0c6ffb346baccbb319af700827b0693b5098b52523a8519480fd9c91b82d18284e843a69e1133fc3ef0ae32bcd9835b1c3fb2504db199440d8fcff9760f7ffff5ffdffffdf374321e218ca6138b7f49fdb5b7ac300ddd2a19ab24123d20c954bb26030480310ba6d4942a22e69a8d6d5d4241fde7be75b9cc80f392f6531a1d8762ad6dd787a9de687dd12e7a39b7d2f21b8ced68308b7a3b46137e32dd2ffd3ffff5c2adc1c45af9245d48428fc43031bd3dee781856f761b85a1d104b35770dd9cd3f9ffffff08145bd32b33b83ac5a636f4927191c8bc6a5ec8b2524a757550bc78704ec0790538cb0f04c3fca3eef9e63f6e9ea5e49aeebd6efa62e8103b1fc0326b7140b32682c7e683e27c6a1c34cfa917369a345b74578a26bd37450553b44d45dfbdc39c6d337f8a82d83a5539b96f9501760e876d03608e76ddd3c652eff1776fef018d21a8d48f767d3300c403b318080400c44018c9034d11e50314800315b488ac843438303c3c240e06c36040101006080001200008060340814020082687c88a81d9004b7892e68b6ff32ca233a401574e9cbdb25ac87aac7a9c21a03282d12944e83a9fc24a51229be433fce0d89646b189f012a5a2f16c622ced673669784eec24c0b1b6bde025317cf510454dcaaae98b684312a9dd408b9448143ca452b3c0d2f4c66ce153d40b5b1c328c1544349f36478e889c4f550b351d0b1d0506b1a2a0a23b5bf079f7294e80ab1375bff77fead98d6fbbd32785fb34c1c88cb1d7832b8586bced0411dd7c0cca60a1c6e007e8a5a22e5a6326973b47854815fd6a5de5202ffc56c363f431f6ab1ce4895a02312848138f9362e39ccda71b15bee048c3a8130b3c73c5d84656ebec0431ad06dc409fca8aba16e5ce3c68dd0466ff8d747c1c2f243b9b423401a6e5290728d174f7d1a1bebd90a06fe82816f2dd31a5be458573851e407c60da24a33a3921cfd8d621fd7efb74b1fbfb2f6a2f092f0b2229e14831a9d21d242f8b4805b17e2767a9de813c8d1c4910c5692f9fe23a189f24a22a913bd8837d59ba9f8f9b97e5b955bf9c9734442ea94c84a79b9045b8d82da8a0dd2d820905a278f718bf2c3f0a985df55480699d0401a021b34ba93e84f7c06ab3faba66f71835b81cf6b2b30ccb6183712b44998c9f6b4233a114c2cc7acc9d4150d413abf13900808a8ad5b86a946040ad26a9974db9c26500a338fd221a9f1e2243a35ea4a56645642638ce0e4721f55c5e648e3e05289f5844c926364a16dca6ac4b1900e253e5cdb1c854c4dca11bbc85bcc20b82f9bb3a3778714cacbedd8dc8420d747e034b44f60f2a72e61079bf7e1da036530929299839dc8dff3f4f84b572fb991bf5dc2a5b146bdfc4d8523e418256ca1ee5f1862950e6c896a609e2f9a36f31b9448433e0fe43e83a20b709f0d8e37a57de666a4c73a3419a0319e6499ddcd5590c2bfa8bc7ee611046539002dc5ef79911baa20a8e2770fd54897d4413bba0112bba4cf35a652fb31c8594d8f068df5c64bea435cabee2dd01ce1cc825e2a1c1ca1a2bca4073db489e81231fd43fe4449f74fc1974b8806dca4c153541741bc2edaa5081fd46d1a1431950d2011d54cef26693fbac08ecb4d310f14e09f73cbd26adb9f28d5172ddec7614d23cd22da423a8ad1eb1aaa62c21bc1528eff46bb4fd396a3d3f53e70922844c025322d57d3b4a14859812c9651148e2d2b0133df606ee2f3ed7c48046816aef724632035e48f3f25823ff1068664881129da7009641796fe6edc395bb75289c2643ea60e2d501fd66b91198b8b14771e2cd93e5e493c4f8a7fa00299259edaf1c1062a37d234d00d2f5a6164610175eed87d9b5e157b306b8da8badc48f10032805e6970bc654692380a23719e4d2acaebed1fb8c9b0cb236d4a8365ad56072d74ab6baa84183d17455ebe50dbf2e111fab084ddb7968cd8a5a0699070748f4372493366f2b3aeab52aa514c04807fd32cd11294c3e42c43b03640ad413bd0aa6a21bf8a3a6feb2cbe05458a57aae6eaaa26c962aaf62d273122f5a18a2ef8be1988174de4ddf22c6bbe7919ee1a07b3361a4f2c64b22d972659b2d30750de21e2f47870b818a0db48d6b892fb7aa8db9b17019b72ae2f9869558c1ab69f1fa868d44a5c227e4e3a07cd8c191c85f5a264c9c41694f4b36a69ef0264e818c62e5c5ce4bdcc27b2e60e67aff0d17d17649fa2a7af302ac8f15afc9cc14009ee9a649ea5b81e2b8fe2410c8fbd71c03102491ad601e17b02b658e19e1ec11e0a822d1aca9d5d3fdbf94c5bb0e4f92b8132208fbada6b6ace7bb449f1aea33989aece1f28e521df3fd4a44f4595fc34dd82e17f54f27c7b291aa8f82b4bc9fec76db016ce9a6e4869b5a566c900c45953ac70e8b87791e413632cd8762fa5adda1862f78c35c8a3d33936845825454be6a77fafb61a922ac44f0b4eac4333962705fa1932ab3e6929b3659d95c127582d703fe67218d371981cf59b6f162c18ba2be9fe18797081de33e5e9cea3cc7c4f600f9b9710174368fbd3762d3bcf5596c10cf45ffa128887041c16273274a8745bb6fe8a9e6cc44fa70091629e3104ac06a3ea93d52833e358594ee14b4b82ee07d5f4cf963c5bb397c655e132c3ac6c30f792e999962bdc10c684862d560f43eae627b43d9245645a77fd48c98256d0cac7ee83d5e2a2b1d10653763c9f6c82cb807845ceb8bb9d4ac4f5753d2a6ed4111b1bf1dc871403868fc66e13041f2324114e33c8b5913a109b2872ca18a6c17018bbebf6bdf94b3cd73ee83c2427ac3adcedd417bcda125b429465ca2e63b8a81e8f97ec8bd84327768883e1187ff9dfcb55e04c66333407868cd9ced33b215ca31af490eec94634c8e5b8ebdbba5f573fc5fb5727334938cf78850c60a2c3312f7b9a9ddb0cd75c836d077a5b172890ca787a88dbdaee82e60b0c332ae8333df9259ff8819a61990ac8e716f5c2804d814815b7667b8ed87173e77fca0e1748907e272ba3236f21fd1c093ce7b9e351c4054bffc1c90ffbce9a85dd6062af5c75c67cff1a77d9a1db7ccb8aa048463a75c7b89469a4c62cbd82c3c4752d0b1b1826955801c56d2459996982720df1b1d75eb9d267753d23ede4789f04b2b9af258021a1ad2184ca83755186364fdaf9b2ebbcb52d40b4d10608be2327c2a34a6e04e862f7ac2ac6944e9b9e66d42e1564a4d615179f5d04adae7d27760b8cbf23b9b65648e162aa3b76db3cb72f9d9ead24c42dd61763f86f399e5413d4405a2c82c6383e823f1cc4f5f2c9cff3e3c51dec51a9da30adbfe5c19b208d0700ca87b2ec40377493826d42d858e274d3886136e9195636ab26b822e2015ed57c25a791ec35fb66d588ebb6c3df99693065e1e8430929ad402fe22ef6643f1d1890f628d152d7a3e0c655ca6a6e1e28e6adaefe6601e7a373dc2624ed5d9441d7d4a4a6a891dec10177150413c33e21739b4d75458134df60d1c453064988d065dd5fc4fb83cb0f59d3d024f33c01cb50b26980963212aec4a9208b0103e0c6630f81aae9937a8a6dda8a2a18cdb3b04913fa97f0f9358c0719ff577650a563026120629ebc5b679239b8e6bffebd45cea0ff9a0cf7edb56366e5e52eebec1e4e3c3456d4a91bbb617d5fd21f71354b409f9e00a0954249793522e7742f168b73bc0ad4a346eaf573086a56de51369c51f2b090d466d5cc0ad8d40c0487e8743238ed29830e4f30581a863a2e0843d160d04ed0c5fe7d5540879d1ce333a6d509dd9b944d6cad4e4f7557323642287a78a27f621ac3a105f4e8f052743923345f6281e41400a5240b6340a8724e1af63824044501854d62c560d6f842d03c630cebf84633c63f451d8fc3d1c7bb8db5d033c93e2863a22792c800116dc1efa1449d6e952f18a0ccd9c2e62b21dc2c70d03379d00f0cfd64f37eaf765ddec429d031dc5cb0272043a9b9b872f76d8b226028d069520495a64e08aa87a922a86bc299df72e7befe7eb6165217e2d3ff1da59fd13e16005889234a480ba3a83cf241b49a219a308bf7a790100e6a4eb72a41b779aad4699bea290f5e6e4a1f60f270f4feb4c8f54b353b807bc551a99600b28e648c7f41c8167afc60b2bcc99b5337f5f538dea09f239c2a25257a0a9410371bdb522f57d7882e91ee74ad01d6d1d0a13d552c7d111ce38878bd86156c674592d5c14aecf1cc6a99af9064ee5c448a49242fc27047e3ae0998518ea66c6ecb25827f3e3d7befdc64b016c1f1f4488cf1c93515513a78c7cf0c23139cb482da0b9f8ae47cdc188801f031fd857eac932da7dcd7715cbb562493554a7282c711cfc3a6de89994c58ec948222d1d9bfae130f4df8c0ae96509099db8e881aa3489d392fe1578acf5e7d7cebf6f5263d85203fd072a352e8cb2fe8995b56e65598b54eb20d55a25e699f86d0cb3313d04105c54208020ed87e2d8c35240913628f8b206046924def1c11683c69b5ac7203871a9c6602a9da37f7790365cbcf13bb5c583277a23ac39a849bdef6b1b9499842b2d116e8348e38b961d2ed4fb3871cf4292b8a43d3da9df6a6293ab8cb46f24e05f988ea42aff9aa350b27e9b978b04fb173f8a44cef6c1749fb26a3a18e98d27e1c1b798db7926e643dbdd8e31f7e74bb3296e8a435cb81d1a036cca8d04eeb0d62af2426e64543586409037a53888af18f69b50e0d41ae959b9d2f098fcfb5a6502454112890d078baa5d68bb4a8b8227d0f6aa32f6245725380722065413f7318089c8c7f5ca16d0a4dffec0a88b65e203cc72940d2ad5e7c016b6061ee0731e10e34d27cd85e31f4784ffd6450b839fca3cc5a79b1c29ebcb0427655c074a7912d30b153959a311a1ed3f1d71d321d781ba911c865c7fae6427b5e38b0b70204538d439f22476080aa8c0a5c1e4b7e73fa085ccbc639294ec49123e529592d8b291a09022f003f7c85d9185e407ea848fc87501aa13ca4261d832f4052c4f9fe3d9296adc931660964580978fcc17e8c7f492de27c668ec7e9192f11eb47fe239be02a7e185ad48a30254954e0203c39a06028ffae69a0065c8109cb04d90dbf94564917efd4f249c687d37f321bb8e89cf04727c33580ff74c394e6616e7ae9890c918dea8e7c250b2c85ef70d443f24cc630bb4b9061a8fbf2a19cb89911ad099d6ed4555926ed648b5d117592b2246ac6b0833b14840b763b6d2e49ec5641cbd58f6e63de7dbcd55fa49322df99798b66811dbd3f39b80089bdc4f7ed898c120300cd65b098cc361b4a28f8595ed45e88cc0b882b4601848dfca70fa7c7d9249d689a7177b3fe20a00cabe1c2ceef3c2b0261b30d620b79adc79dcfa48866bd521890f83cc1a5a0cb0d4319bdfe854bb12efa800cced284419099dff07840a2e6e584f11c1ffc6220a59bb9dc3e1a2b4ebd9de3e922c2e7147776f1af89929c9a88fdf896fae040063b1f3c6c3e4702e31b32e64b078282084e6ccfce4d904299089c532db8c7740119a459aed7870e9f5f3f2558c8e5c0b80b47838cf848ece8971347e651193a7d446c4b879deedfdf6ec08f25677a304724ae3e3d5c6ff94af6e562bb2dc4eb2ad6e1028d3442d93aaceb4a523061a8751c49f81f06caa1986a78d50039adf280218213d2850bc6f363d21c0cbfb70cd4db61ae90a7ea263e3694ed65b92d977c7355be5f4064c82ce2f42f103aded94785ee716bc3eca69b86ce396f045465bb5783019ef9dd325e18bb61271b0517368ad976953199a9cce42fe5e220761d0046eb2e7f877b9515250ebb8c7d558d929dc3c60ca0fa4d58cc4cbf58d785beb2780c97622b0040d565fea91fb14e70e380740219360c0680779f25a8fc139c298425dc96ebc3336476818252df5a72648f4ca153c40ce2ba749ecb0a2bef726250149327e6439f221b69a32ba1c33b24281c6f4413766da06907243a4df10ec811700aa5fb2bbed239a13557555f9ee168950821658bf84502d1a9c6d7c597b2d510bd35c7a2eb2b2cd19461ee13a176fb133400b4dfc6bb13d4443886c0222081f168048d3e3a3a2fd2da4374bf2c63a550725227c0409ff68451562a289aa812fbc310969460486254d68649c08f40befe4faff6c22c18464ed5d20b84534da15ad70be6c810b6dee0afbedd72ca9589c6c5f1074a3809b6f828f5ee50f5f89a8a14014c44d91b186d097c6f6db83d2884b07ebf6615b60ce4a7da53c2aa173867c3f01fcadb3698db343681b765f58fbd2e7d635270a6431cb893c7fdc01b824c38586090ac14da51ae45548979b92494190604b6a2a60d2ca31985c6c7fe39791a04fae0205ed93582369ba480b9c030ca53fd38e53b02dbd5438cca5b221578f949921a2adf3f0401c4ef34cca520c2925cf1fb52e22e737f426ce5488c4cc4d88671485455d03ddca93e0d947598a29e34af95b1ffa59909ab00819292c4222e2ef84726d815e410a50bfc2af8ec196a026c1012b16397a74498df975c013d956550f45c6d481f311db6140b0173b4b24ad46638f4c381871c7cbaa179b8b161baecc81774a8e726660e57977cf1d9889dae0ee14a772add93c4bf4188c76f88c5c6d0244602831308ccb708dcd177c5064c1e758126dc211484ce6bc7d66464b1c51afbfacb297ec8b4819fa768db583a72c32d678bd5c71fbcf191325fde71ba728c795634695ee646a7a366270d0aece502c23c9fee9b3412487d0b6ad7791a9819a2ce6da9233a20b44919346f7de9a0326a41e2b44ab6b53006b3deaae56db9d5126dd428f42e23f4429c3a17cadc115216761e240b0eb1eaa8200e93e7e8d4aae4e2cb92776c27f07b541b4fb8be97baf4f770e9e28b298ff02540d74aacb5bcbf4310094996e864bd69d919f86c90f9b39a3aac584b3202474846769378b85918b2d3c9b963c75197cfd9c94a4899d2ab54c61b58102c0455d02ae14de2df6a4b16157b3ef040355fc2176f86c2568a96b406696f308e8ac4b81e9d247b3f1d02a5df64dcbae3fbae5c022aac8892290dde1813ab4f74f196ff5f242243690f05d0c09223f03491c0bf391339f695e23981140fb157a4b7a4de2db870e3038f87b8e3da61ce1877c4aad8b52d8b031cd628909eaaca0a575ba97011f8d2e8581b5f626ad5a333da22a3d56c7a4985e7bc4748c548f2c6e70823f617c6400b9329a87df522a1eb71f6a3542e3cb71b233af4d3cf2749702a7ff40d64b21ba55b2850af5a649f67f6df8c93efa433092b421f2cedf4afd141dd21a445ac9ce2244d5e31303b556c1a02e646b0812f0db173ba4824865c695fd67b478c73c0acd5689ec03ac538448b36856e077b848740d72bf8edacb3d73d79fec4839d1998bf656e923ab70088318af0aec1672a5baece9738e830df0f7d8b2294dc7780234916b76992386d8e65e1e8be7314b8f2efde416b322241b59a3bbea4e8ba3da242c7df30aa876a5163029e0f227122723897344b1912e6dd3072c07ed0e624e23cf83f478ff02d81632b1c4ccceec7d05d0dd8d9fd3782cd9c599aaee6664ac4d2b2c9155a5c4280f518e7427b7b9b99e4b1deaab88ff4ea48658ee24f3bea8ec01683ca8e78456901ab1c746fea953cf46e1442b553359d21f97bce1e4de7efe00ab363751c7480ed133c67b43303f8d10e0c744f3758e345ad9e81a7339df68124a9e183242420372e30841d64687745b4934e1df6260a9184d2ebbe2561940da2c08c16cec52024a7937e5372d996a4729095c01f2fc0c02a10328bfbeb2c2150e44fc8bd8f683778704ddcd0481bd5dd33b745b0bea50cd07510483671b2c6a7b1cb2f8d6e201609d4879fc305b7c9bd869fc80b190c7df345c767907e6bc165bbe38473b8cc326d32d0df37172b50dcdff74377cd7d462e8e36b520dd00d9fd7303f3bf398e422318ae80635c98461488b727080cb42376a55270e61285e7cbc1a6e458b9e3bd4198b30f124a939113216c53d7765b298b70563c9de88b37adc6c24f1a186b5f1acde3dc673bd27e644689961226b0c2148a94404b2cf4d9dcd9db2dc26d15273dab6969a16d5acb99b019d56e90b1d3c0f6597cf4c39ee39ac71bb62eada7d56093636bc0a2f4eed30d8d6b5e33f37b93a7ff29fec7c0f66257ab170011f5f4913b5818dcafaa85da21ff1c3e4bc0e9c0282619e662007b26af72dc8faee68b64574fab6b57094d540896b51ce1193adbe85688938a36f56b48b2e49f496481668051e391635981dfdee04c39320262e0e76186783e5e4cd8771cad996a20e2f529fdcc94886820d4397bdf72ec43e28a842472385c0e3ebec541b7a716d3f2d66b760872ec9278814620360ad8211b7c43ea1ca6e480c8e62000d9252667d05e0ca53e3a8e05832025849e193b3194dbca864f66828fac6d182151a40a4cab1a25ae48c327f3795d115c001c3175856ef1260b9c8f7d24927f72ddceca2190b4b055a2c11390bb4ce8a34a91b6e63e364dbe65e6331d810edecba1ce1047cfd3ba5a05f18a7e40ff0296627b64cfddb1550e76857fe675f97e738a0d3cdb27c746c08a8342885c0bcf324126465bab36dd92e8341c091b4c5371e0341a3d98e561e47a4bce390c7130f0bd812687042874551f1593a4604c31d1311c093f19b59c4e7f4a49b010a163652c73492ebc02f30b5969bc3948e9120061d3ee4e69cb3a2e3895f0052820449408019de71f33b9000d2604398859d7db099ce0a8f96d44065af280ee09a0e8a49d9956bef3f49b9b1675cd77611806d655400a3b9f46c0fd75a00efe2f1cf5498067d550a2c88b716e96700f504bf6ed8494317fe28af0daab259e4cf13a30605c8d1dd04b2c1019d8461c4fa537f1d1e5c65d77f30d9be688d11375dd9a552fbf32b51a485248b84e28ad4723488c5ad945be417721d1531294cc4d7cc17de8db8c344f522b7d0fe3cb15ffb9f988a908724a39b35277394355c70ba937bd116e39e89932e352763135b427145a20ab2f0d882a0e5f349c70e99428a5e2c00ba48730c23b08e80404b145e696e41796262c1b3afb05372df764eb110df660c8ad1a3a54f9338eea2aac89c7cfca7a635842c9c7c692be25e0ebf56dbf8df28cd90a4b84a866a183ba5c556c07b4c623a6613b47274866ae12d62023d472dee8158907a47199f1391c1dd7ccff60281ecd88b5e8eb8e8234b2e4cae2c52d2ebdddbfd14bb5293903c63b5541f6c864ba5214b52ba97555980d4430cac5b4c4672a28e8cb0baaaf8766187b0a92b04029df9c076ad25b338e0a80f18a9792f1713b8e81d75e7f85a60faf267837baa2c61a981bcad46dd2f3d85893f57133130089f64c1437e398357a6a01436b74712a2e0843b9af0636a41901b02177045019ebb954fa5bb4848e1ad4db26c15fa84b2de35c454d279ada346aea4dacf10c3809a4d5a1124b09f762e235c6868aa500e2b35f5fe7d4aab3df3ec343907c659a10c22cb743830d9137fde32842102674991424187d59b2eff88d175e4d9d9136e48f5583ea5f0584917e30f4bbaef97b98e5601996589b74e49a687d90acd469a198f136f4b511e79bb292fde23aeb86b98f4cbe404776b5760894c8e61e112d22bbd9c901958306829af23ccba61090509489f9f74fcbd24d5d35b988cd3ffae2663fb7a2d8c8754ba491850fe46432eeac7600b254e93e26591a0217d95c8ab08f923c91e8e1b614fde1cadd45e1fa98fe1e4fcde0a321721ff55ff36556a1ca017a5c67e464bac34f1ad414968f847eda2f793d6d4c8e0a60558a2854acd31d9da0063824210bea28ce0ab7492a86feed13d6f56eca94814c6cac92d1d2ef25422703eb715d9db18ac7d4274906b0fa1d5f96888422118bb78d48a3585857ea51631122620d74290d969040980a42b11a5e75378ca1cbd88b3a71237583a6486488d6791246526638a904cedc548bd90f3f9cdc38be18fa617b5797bd6ad3291f92676f74dc098d39d15b74b823f3ddbe86c9d567ee1b52cdc45d48a9369c2a2eeb933046c30e705c872c3921b11685021aff86fa4ac98b0e8f12e1eea081edc51e6a53c345c9b3e4045c00ea3361ab0058031996935e20ba25627338f69c5cd3438a291e9901a4cc2ff939942fa8fece8d2bdcafdd537cbb5e9250fa85c31b5c0e48bd0fd34d28091d1082e59d89392438910b85e1ceda1c867c5930a48e832abd31c8af87738b1cc55af8df9ee173595d2b69ed76e26ea7c75e528886f6aed2403d86017e6cc023babd01eb30eff338a4e237ad03aba699e400aa9eb55d1411d93f270c2d2070c974e50c8509b398835c74a6235379c3849cc5cbfb89039922847c72c721068d6ce2c9500580a4320d181910912ae0b7a1fa36121ad21359c2101daa37c2552704c6d751430a4432c81e1274c3608672689c4270a4214e175bf05579c84f441749b403b290023511bd8b5640185c594a80d964c3c363c5e5a74507693df5c4f943cd2b928927bc69d65fe76cb94a4dc7b074e024a02330227482cb09f251ccd97a67a5d8ec3bdf756669116d6f1f4f5de7193b064e91967a020ff934926b2a498a8532cae495128792ec2944aa329238aa89e82feffff3fac816c2d18562a1db2520a8a555d13992630ab2ae755960de42d2d06c8c9f2a553e870e038dddf83a4ee0a3d04cd683ab1431842ebe7bde05a931315224a3145d0a1a10371dcc212a1f41b728246e1e69593fc9ab430a5c85db128b312ab45151c17665b28304678b440f4090e0e2fcb4c818409fa21dc2d8ebf3c259ac00805c388a5cb057577af2263d8ddddf3cbe10cf9c6bca6b4cc38a794a823600f1f19e4c1cca0bca9b0aa93ca2554e27f2669dac8eeee4b310cf55b825270ffbd1bdc9029dc9470eba1b8d9f6de9b4ccfcb52845b4ef1d697c6677c1105a84a6103418007aa3da4fbff0fb451666baec0476a802377772b3686bd497724a13856429cfa43c2ee6dc20abf7b3bc0d386c0db7300518c0372de9168b1c22759d86982b030db116b910d4a8e492dc471098308e343c7c61789bd3714442713fa8975181e82fbbd83d9a36ab916e2de7ddc61b519f28dc5d6504c8c3a09c66870879d8c80110fbc344249c8ffff7797d1ad5b181b9886355d0b0b0be3bab300c5cad972a41a4bca3211674509a34a30b2341d81b022fd6000756375aa613a99666d7164adb80015f38157800779672b7b73307bd7d68595151e1a3107e9830fac9f5cb4ec5efb0e62bcd970dd81e94445b3c5b0102f5e9473c0360ff74db8af5eed9012987413d0ffff7fa26c1151a8c153da58105d1ccc882912d5a9b0a7251214cbc6e96d8b55aab923b9e3dc5c360b160444231f4cd010b451e7d4b013c0e24a7125e38461624477edfdea90872ab0d2816de3650124f982ba37fdf86bc528695a9e8cdaf5c94caa7a9dbd58d1bd68ae9d973ad0dd3d1ac35238cf41c1b4bbb751322c8509511f6e8c8ce7ff0350d541c9431ce4645e9525d521d58a7856c6ba3e584be8a815e84300502812e55541f4b2b7935c865821da9c4595e85c04b15c4d477ecf67436f15fdffaf80fa7c667a0db956c2ddb57223500434c0ab6440e6859816cecd8f870f8ccb4c510b1b21ad950374e6d566f35789dea6f28150dd5270e362ca921247edb0e2e1408f5d1d53da55d26a242ba9d391130532f394cd27e7d616d2c48954a2c179d5916039fa32b40a1d9b20905ad5a605e7a7aeadcb59d5c633d3d61494cccaf8d058754b2804dc17cb7f1f559d943b1dca46a3bb09ef53aefaebeeee7145df48dc5188b73bfcb64c33bbca8d0e6d04e8ab1c64081cccf3fcfffffffd5fcab648f46d506aea9639f5fd8640a4c6debf3723b59709a975223ad1fc5ca4285331f86eb062ff7f811a22d587a611c4ed221212934f5f73753bf5a4cb5228ff3a83e8594d8c5e15f3274cc58a4a686af584d664f53339a226bd198f592b7c9c80645ac4489d6ab04d153494c90cfa70f7feff7d1b88c09703dc21cc160d6114dd2697facd7adc1cb3b5edaa92745dabbea8d02702284585372b934caf2861324040c714a314ea14a6aa69d8d11995261b333b9c115df52f0a6ad587788f4bf223d4ed8f5047ce3e563907ea826be5d0eeee2561c8185e0ac394c3268cbfbb7b490d3686d95c76ec882750acaa4e684cc9cc990478c6b51752371ec6f074d99b464472a4158579efed91e2e2e592e3150804eebd7716f98ab4ca91ec12a923e7a510a2bc1ff2d2b743b8f7f0e568aaba06667702b33e1a74a14a6a422d6a50d020a1931c1dad00c114dd8f1816bac4a4c9bcc405fbcd4c4107ecc2dbe1ff5feaf3810dbfd64ef470efbdb77e5e91b668eb483841b7315298855af1fbd5105f4b87f0840f08dcdbd7625f9fc6a4e6294602c9650dcfa8fd3a5aab47b83916bdb968063d561454ea0c1b1c518d27a2f2764098b8a804f554c94dc5103b52d052571acc2e06a87ccdfcfba6ba84eeea1a5e72303b435f36503acaab3717d91d63cb887bd4438be5a87b0b77bf90db600e4acbe6507fd518e2eefe5ad257a4ad5e9f440bfbef83e3bdf7dedea4b69544fa90e584a6f7c9ac3b2789272c1f1dc6e1568da7ffff5fa7353384d22664d7c15a98de4b51cd0b9906cbf1f93cdf78614785cb079298f7964060cb5bf3fffff215699bce6788f446cb6465fcd537bb9796827b67bcd720d01de8127df90de18ce689864dc76a0409475b62331f52ec14f184889515f417480d345b59aa46993d652c025f777726640c67ff8d687d657dae12f8ee0ddcfed36f03758f83ec1270d57e90af938ec6026960d79c59ea8e1667b1b684e9e8fe5a41bea310354d59314069332649a5f2e6c9a84dda53651366c10b76515ca1d4b901d8ffff95a0af481b9556af254ad8dd80317677f7bdb770a76cbc2d3fbbb8f305aa6691160ebaa930ccfe4d1c40eeae3db21f978cfb11eab6e8c179f722d9e2166d04b9fac90c10380c6f11263afeffdaba23328e6d963bc09c24cba8307682e33473cb03b35085a54375c4bca9c91982936c1fdabaf74be67c39d4d5218b2be43a987150a40a81e512a7b4a3b26878ad26a47bb2bea51790d798a18cc40d4c1596aa6204bd9b131c1dae3c2a9d96f31efff7da976072a8a747a716352b981db9f770ef8cdf684407264129fcdcdd4540635844d69da6eb48aa4bce9984e7a537745606b6c774ae8db8160163eb152f7a593774aa33eb893b8b4bd9208d57ca13cb94d3224bbbc624878eeca6655c1a5ea331ddeb34e8ee4077f766166961f796a88203f12b465da6224e7f99834aafc7a55bbe8937e381ee06b9e6feffffb7c39582e6b71ac365174b24c1168570fbec292ac82eca6d4f6fd39430c22c9d00a1ab3c4cdf9138f451dd51dddc16332532d1b702a2c6c2975b6595fb90ee49b44657ad160d6331c7281e4b1c2a5e54622c9541a11b58763d2c2a467366672f86a87ee6fccd29dbd234fc3b958927ae1a5e479de1cab1dcc130e74dcaace1cf2cd2920193be0960925834435e8e109db585782eb86bcb5f100e06774c8f6c497f5dd70d6dd692e77ee68a60610cbbbbbbbb270518b2c21093b1b04b4c057492b7cbb468c8dd9dae18fffeffbf18ccedd43309ffff3f9cf793579477d421d47b19be47c1517777777f3ba38f807a089fbf35a7c206cb523c9b52c731ae1aaf180f78d434b1144dddf900a126cbe335364555d92b827bb366ad30987316f47479008ff24d2eddab6ee3ec58edd370f303c615ec8f044f269bab5499d74b8c96a8c41038450291ec08a31808040d0451248ef348d0391400020eb478bc78302c383c342c200a87816020300c1480c10000000c068383813020440e9556223b03e123c2daa70b1357dea207bfe8115cf0e05991b2004ddef243c08ad2566aa0e788c1f03c23a59aac2edca5a0dc78b97d6331b10a4e8970aab7ed65fc71db12d4ad783a1177eb172f2f3a1e190ec404a9e64dd93443ddb31370aa378502ec08da93a43309ee4e829b753b90d439241ad13ccd7139a4c6fe50796352db5ef47c17f262d26b3ec7f588fbfbf51e869224184b2496a014ef86b5209e3b56e844b1f74b7910ad4f1881d15469959588e43458aa58b3d5a40d3d7557d32767c070f751af6188e7c7505a1f0cd48c1dabad8fe2ab776ea515de522483434491468eca381bccda871885913f280f3cadf518ed0d23d0759197a9b213542b6eede1a8c3b6000d569758c848370bf64812bb5908203149205cfdb95fd98535dd86f18c19d779674397868b8c5aeccd78f6ba70eda73293a95e689430af3b447a0276a9fe124ee6b83f44cee75490fe5f425a194e196a6a580d2d4b654105649481a81f5843b6e656e719b8f018774c50d3476cd5672a0a1bf56b75f3d68867d69f989368f483fa26caaa4189ed9c7396e4070e8568c513b5785ccf0f1c0c14816c9099fbe10bc9767acb0e530b89728f4b2c2270d8078786042bf03a759dfe20fa311a2b6eb001f63ea618e47262f84a75b71cbb471fa8ecd0982bb8452f3c2b90139dfd51bdf0f18e3232c4be073c6a5693f3364a1d332abf5a902d0ba3e070302592c6326c7ac60baa671b169f9db2dac29f60131ca109d58e4ea2013e3b335ecc9acbeb084a938cc5230e33075b9229bd699948cb85c7f4821710868fa1e42d6744dd743e32e9c97f2dcabb4e02f663853045019284c9e160fbae6fad8c8b3e8c97b432ebe34e5652e659ed8f907d4fd623306edb507890245a46acce424cdc8f32bfd768c84ebc23a8e6c692465e69fefd74c170e5ee35f2f8d433a00870ba6ca2818312c604c6824b3e48004cd96b18d1b6a359c8d793559a3829e032a2c59d55e25a8514531c9cf9d69202c682a9d591126f1e5106f80a77fbd9c0fe9c89e5dabeec70e587f2a5e41f90918b92c831d0b22e56675ffecd713ec4a0061d16ed84bd00906e2368b219b2eee5bfa990b8f4f81565122e566811f1d747f3d00c20a6fc2d08786e70c1a71388069453738439f125461db5321bb2216448fc29c9e7fd284956171c3e408b4007a9bb9a4ed9c8084df003c028a9115c1b39ad79411364bd8c053e82db0de4c522491bf9eb6e92f32a8295e7d0cde0d24db5c734c16e6c8e42180ef4da844a72d4ab717fd90f820dfc305349f94a5fd2e7223d303f7ed023fc8f562082c6c3af042b628935add9d3e4b938dd2c11468cc0adc423cbf05b253d6e70f6b1771157785f929e2682873114a1bb6b52e3b810c360026f310b5db744dd3c16367d4015448bfc216db1375bc4e283171d082c90a64664042d5dcd5e442489820c0cce1065771d573e6f135cb23f5ff43f769803285488385edeff25319fce93b4e6b28e78ebc630370079ef10a68e498b236efe1f11843e4e4310b91c16a73b9a7b6d0479fe11eb11b2b420ccadaf5302359542fc6c62cd248bf34c936a0d6ea3c952638b63227f4facb8ef2ebb23fbc5a1158eb5944932992382f0129a9af435459d296f2b484c915956eb8f5497a3f765bbf3c1a64fe97bf93dafab974a82978ac5f0464a14c6dd3e2302fcf4bd79b985172bcfb94d0fc50f05adf5c66cead0127c2c2287e3ee063ae23b36900afffb9b2c46207d2916ef72ded728f6bd68e04f2ace81c518d6f44cbeebe4319840d3724a258fcfd398b056c85a420b617b252eb00bc55525e650aaa7c361ee6729f9cb0b992c096f62916b838ce1c7272c4ac6913aa9d32140cfc4999626f5ce2116c1a4898881619635013afb274d1ea535be1484e60e9648515282960bdee6d648cbac63f6ba05ba8b372e95329f8c5884c6103546528c4f1eb45e62048d1845684c4b7aa0b259c6fc53a619ecc11fe1003d2204a38c79f71e08aecb0c18b886fdc3d4420f02741d6cc7db41475eb5e67aa8dde1444c2301e60d14d7e0c04ca524010a582e9351e416a19315fa79f3c20b71e96a02094989ed832caad3be3382e6b5071a2f344359cdc0e65e6b3ce991407d099d1070dd1b5ad2c755e0a0bcac5a1c18eb5f2af84c5d39959e057c997a4d1a18f490155d55f2a55f793e64c30e1f88842db2d5fb32f3f6fc282d80b405fff9a1428961dbb302c940f774d6f03431f575fc8dfb5876c4840dfb46e4f5627bc3f9b8ee9ff1a06f814d00d1c4ef757850e40519d68e5639022ed609f024059be167b5e909fb978099c7f2613f8883e7a02cd466fbc443dc9ab4fb3bc7982644f6660e960895fc505274f579ad05b8b9107c2a10c6c11ee824aeea0629bd244ffc77bed7367ef435534c5c578923db279d0878be2493f9398839df092123df615ab25d6ac34a3efff966e9ec0e498a0dc71899594f7ab9613d8449ee63120fd38d0b25a7496fa5fa9334b3e418e581150eb0c74c1cdb918b782a04b34cbf9c54bf8866f84f01e9f427ff319c52944b6f3455d8501bdc3cc52cda05cea0255ce2c0c74e4000e4ed402aba001220bf3ae1adbe9d086ff6aa6698441e593789170bfb5990a2116a1a4ec732f7bb89a9f3304c086e4ef70953830870dce8da135fa79121d19e4cb100a601723f0b0e5d88fa5752b5133fed1006440fbb87fea2d33d8403fcd8512a863120dde812edc6eb1afa50fc4e941581a9d9fb323e77557baef5ecb7142a87ad8073c7c23e52240e256389303870ebd9e7a21a2faf44004927b9c898f8d063fa1e14b72b3fd081fd076ace5b665abeb5a0b1df67071f3ba4dd1877ade381015e8570fba5088a99ca75ba85239af944fe27e844608565b81093d41828d448ba2c3d768f85aa2cd31d1b30a26f22884770e47fb2c44067c28c4b6c1be924be2cce91bf6294df2aa7a2c8979969a69b7c8f24347b783dc8bb62a7a1ceaa980b485254506fb6357f3b59eaa6519466b3bd240e0b367ce4eaa0897f7464f9b60c084c6b43b43bb0dd3a190d5a72d95481855784c730ce63ee508344b4395b5759eeec4811a24b05ba535ba6f0b44389f1a93b8d95a6ee87a7fa479aa74e37557d6d60bbcfcc516e003039922ad670d58a9e6d2306c20ac8567f0cf863dd0dcd0981b98658724e72b51e6e21204c6ba91f77dc6b8f30adb4969adef72583dc85aeba0c25546df9e36be311ad5f474300cf3a1426d183f8bdc45662408571747818552c1710bd695f20506c18a312616fb6c7a2b6746fbf52b9b6eaf6199c277c934118e820c8317d0a1ac3d17891b360364ee7a8b4349e80713876ead37276449e9c8e30bbe4c5a8844ab83957e42ca7b9a2290c4d697c61b4be4e8ac47befaba086f6551e371cf2b6bdb02cd267c544e67b9a35bde49d3cdc4208e78e06ce07ce543d31adbf44247b3743269c8ffefb392b40509d768588051474d13803bf907382ca91aae5fe6b55b2960f4b49c820899494e8163fca3fb7531186991c47943a55fdc34c5612f9da7fc3f338c7777dcb503541219c78c9ba3e3fc840205e8447bd1ed10feccd2334d4ab5e901ee5631c24fc7f37264ff92c87239018fb30a47e26f70aeefda49bba9ba951faee6020b65cd297dcbc209dde1e908180279d38d962a4d3382a4d58afef8dc8dcacc597bc7d2227da090a6df5481c5d2d1b01cd9ba4c54647c41254e469a31ebd96f99c1e78296c2f6df4f19951571a070c2dbdd1377f67e863b178cff157cf0e03beefaa4ce04628a515d35bc631e36f54f4a0482cf3f3fa13f905c1f585f2bc4d2a8c37a660e3f3707e389480b456d3759ce253e9708946e44a0ea62a89c9469ad999f1f5cd48feb6be225e73dd4c12c8347e3548a095573bf961f5f3054b6c5818417fb21d337451cab517a20665aa7795d0537d07ec738dc8e97e7ce38af1b3cd7f524af8b2c8a62b2703e2c2a2b562190f368b5d68d4f60780e628496c219f6bbdea6ef71f1125350c4356c70fde225a73817e8e99a10d3d190b6abebeb5068cbcc3682cfdff96416dab13305641c5a0377960ed32a836b1500029c7368a5149e741b5b19683e5798aa0306ecf251a6394d5459d97a3e8601b4580d74c3755e0d3231718a99c6c4c5cab58d1b7bd50765726e0937e6355db47b487aa7076e4994e00c30f94bc33108f03b0e85d619fa6909a18f273f172ec2f22b0eacb50444b4163e629b988fe236a38ea11135a525c3802736dfc24890e68774a80014f7795bde717ca12b07c0d382278f858f64fd384fe652db83a5809004a6b5ecaca0ec85a26143fa3f24ea6af618fce73dfb62dee545ef25bc087c40fb5c337633df50b006b2c91921b8c411e4fd4b6be920f94c6c86ab331271bd6316dee1f8bad07e4c1aab89fa666724191d8611fbe27ba5aadc7398533a8c8e587d20596fca24043222ce4a9b1c68a91164ea433e8c9f690300c7b769935b0310439d67ba44e52e0fa8f15f69861a717ad7c50071762f67db6abe82cc2efb3a9da702609070922d13c309022faf3f2e4e601aeb38c2e34e86f3da2c682646421e167a0f990a27e67c7799c103338457fac27f8eb5171c574ab3d3989c3514b1b885f10c221acb742e7cba15a005432383653675501d4e5c0f05b2b78dc94e06d911d791c3597a4878f1f2466bd36144e5e3188cc3ec3c9570f81a8b962c73e94e6a764ecb0323e4c090e09612de265e9b9e395d86fbc824cb25576f46f444a1033be12e9594cfc76c132a82ec6e98ceb821e611291bb3dd645b367449d29bfa85dee45389881a02efb454e8c9869b0c5ce49512b24ac3f73a6a612104d4193950ca81c46d46553bc043697c59665b185ec23be33e72f1b6820f6e1d895e0289cf2c7771136c122021c51b59ce9431a35c074a23026edff523d82c9bb19c5544e9c77ac13741adc452a5b7b23e0d4b6171faf60ca252b1ecf5d728ffa7e707bc78d4760175fc270b07dd41b88e237a10ca041e299d4879072596f7c3a78e1c12688085e66b93e2d3cc89619c99b28a65a46933d0e62e9fe422b70530a67086bfd4451f6a898212296b666ccecd5500f4106daa05e3e7c1f4ca40dac84c8c5fb65a3116803a651a2b761113e24608411a33e221681464a6b72225aca4876de70cad5f671588a0e32a87b1195c9d9af7cdb5346394616aab76b201e5b33402660ad77a6e00f20392aa46500d12933bcd96df3448b7fec3d08004b231d2ea70ae863340e2140829176564ad2ea98054236e6c8acca6e1500014903b137ccd06e3e8a710fbf9abebb274bc69daac9a39b32faa2ee64e5733bc04df589e286b84bc8d1b87a1274d60e132390080ba37dcb0b8f1f67654b345429d84b136055310a565a2a6af2daab7b4a3bdd6264232a969ccaf63b7b7e2d61c70e166b7acc79fa4c380cc8dd2f97abd212ed20262a849652fc6519493791998cb3941ad710ca8c584279966e508c3dc210ca55e7d052eb07ed9856e49b403a2641708f2b3863565c514a98bb9af7902171c55a405772ee57dbccddc7c22e99cc940f8308a178c055718db6adca7dd24eec6875e42417a4190d914d119555941270da2bd320c1a54c090bb23269396b4af4c2c3183330c5b51469840126444952b7f873532769a116ce7ddda9d47356167235e6834ef76a8a509b5612b951eb98dce0107db6414ac723c383fe8c6d9633afde69af1c639d2c6f257061d92b0f0e820b78e8b70fd01f3b561e3536e776e4abc26ef97690366724996c113a24858aae813a2a130bd44fbebe8f9819dd0c1245c872d682096a4cdb644dbcea80aa29d8586bfd494c7cc6aa0d97c16d681faba15cb5d7c12a7feb82e236fc8ffcb335928cbff6ec9e9170e3a239f95478430fe52fe3bb3d8248b1a74432274f3e667447e9e234ae1e014863c5a21f6cf4e6cace9aff2f36aec04b407b1214943147fe0631a93c58d7329c7f145862eeb663bab852019a4e67979c0aaa63eed49178549c3c21b45c306bc215b000b977255f8a422e1b1e01316a4249bfa844267133f6a2d296285f1f1666c93a45edec20bb76a944516b5785b1543e49083a84570606b258bd36b7f1d1da64fda5a456538d69920c9078775422822898db91a42c7b8aeb0eb9232257871472796ff42cbd10bd25410929841e43a26bb8c6e977c54b6c41c2ce025269c3ed734d6505e1e1761820bb0859f1117d29718216a26d3ead6add9b5bc25024b5f63dfc10baca5ada81598b100343b3caa751a24879216646069b5e742b1692292c3e8de194ca6deccbc1581abe04003d916bae9376d1df6f81757ae077fb11a866fc60b9e80a0f3d6589de3efda9606636f893b39beb0d0e5dd615aef66db70d91ca71c2c219c2886e6838c0c80cdb46d4df12bd481af94a7ec0d3c2294cc80a4778263fde87ce7baac11fc37ae724d6344f7e55148f35c3414654de8e06e80c29ff94eb821177347932ea528bad86f0157c3c1e9fb6e1da16be60425abba56e730bfa2504a62c42001272d80f10e158851c416cc8695121014a71eb6c1313758549da66121071193c9d8431c00929726f82d846ca4e0c4f7608bd39e38e65fb2ff379a36307b7cce32c9e2ec61ab10782e53228ef99f9c520a5b016cff2c0701083455c977b8057557507cd4fd508a077ec0651f5dd527548e2939be298e6233bfb26376c89a96e6f22a8ea659c682347a0c96edc9244a2249a3c341be432346a66f68f93dcc3e3cb8f408780f11d6b8b5e9866ce75770bac55a49f4fbbe6106c76679409f273890655ec021735f93ea7c525b924924470d2a380b0ac35e8b02823271a863f97b38fd1068b6a8cd67e6655c8cfdb4b5e55bc5755c39a482af539c64814363a1b0804e0c77ea50206a3b1ad62960232bec88a22f24e83a116c05f04dd6dc0aaf554980244e92392e9abf9f76620215cd42c8f2430a4879a539f3ca08b7fae4debc3fbe51e5fe9cefb25373e785072b0d86da235cb28e161c2eed08deaea9c7a7576b11d6731113ceab7be9aacc82efaeeb0c0a71b334c8c2360a0cb99b0e4266c7edcc8c361ac529562e89be663820500e3ce64bce23cc3bd425f13b0507759a439631d011d6cc21eceb002c7e148db683e692b90d0651c89ca6fd153836a0604656a8dc0084eb3ac39742d7c121c39b373ab569bcabbcbb2a7511045c8504188e31f1fc20b72090e8e8b73d2afa4f49a2c7118d6650ab6c3b104c5d9b0975c04e1e774e61eba0cff4ca81370e99bba06adc66e81dac3862e66fe4be49282805dc655be0cc71b9f828723bf0c9c656297ad67ffc75084b9c1192e7d086dbbf9eea58f1f513409734909009091c97843223ae655a0b72132c5f7bcd136024a12e1bb8974de4b0160ea4a6f6cf5bd5bbf8f713089cbb082d1041b9d0aa836636938ff239debd63173ffc0d89f6b2520b175456b3a71130c704e6155e00962ef8bcc39c729576120945970ca367056e64595534e0c821d84c5ed7e3bfd26b4d3461b5ebc8cfe7fc3db5e164c0baf26d86eb5fd9b8dcb4d4f25b3b968478f03af5392f801af3723a608762ea7482b09d3a56552beb117c52aaef5b944f6383e5650af8ee68ba0a4f934ba1113c22fecb2769220576e05bffc5131ddc9e854c699eae93eb6208451fdb82713783a72eac079aea6977b035961f3641c07386646f98bfadc789822138beaf44531fdef08ab2a55cf5d03258e0853f7c4c49e260026fb95a41ed4c5a2f85fc7679eb46312132d6aab80b6163e141f6a2b48b319ba83d08aaf8888ff874e87e9691f18760ebf156e403a031a425978603e046d829c12c06b445c6499bec40f0f88c859b334d0db2686230790f8d94bb080f417583e51172a77aee6cc33e2ff002c6d0422e4fdbd62c22a32ff7da4087026154d884dbbceadad2603df4197e74c912921db3f4d90277ab4783ce71108c0671167e5c93eab4be09030802a336db68dd5c26fcb183d157fd8d5c0ed2d14388b8ac2872482ef5ecc7cb36105a1cc645109837d91872b0b8ce364dece481888fd1b7213f702ccbc17e91497e8ae268679ccd640d5b509bf1a030c9128802c66da888b7a46b1708e605591909321386185b2184361a60fea2ed267491289dae241a5216559cd5eba06085b5cb61f684a231bd1bf8ff352892224b93224a104f16fc221e9fb2c2ed5fd9938349bb5a2e929a47f3614033d5a392e331653cb253343c652eca24bf503822ead70e33e6ffcbccbc608dcdca64bdc0d025031959b2cd132cf049d672b2fbef33117522fbd938b482af261f52c5e72ce54f4fbfb2d6b2669ac223109f4bca1c2ba614eab7c080a57635dfc64bab893d1cfc3ac94b7597f1bcae2859f82a8b632b10aea13b787089a1995c635a015d0186cfa10f1369f7a7feed0228a4d208aa23171877d24b77ffb440bfc87995c631b461bcb1f9bc42228c00d0c40fcac7db415cefb58152c20ab941a765eec0302444b526da15121e6ccbf526d64ad5d88af0ea7c299ff98d9139df7371cc1ceda08b6c125c851b494b2aed0d28f8c1ed0a432c1c24d2a60481196eb8fc6df315828fa7bb3089d0359aff30a28012b83c44dc5ade7010a501fe8b3b81b8d079099a71070b594693ae2f8dd6cb41c19a0d1154dbeff1468f22d84e7a55d94528bf6089cfaa447667e3f4e3634ffb45c39a4d54793273b36d4ae76cde828207e3a3677b0b6d68a6cb7d95aefc2ed8d426772d4d96ba346896c343ee4dea8e87d8972d6877bf6c3c08f018eb0bd9b02e729500efb742915aead894974820d0c5d32e3f18fab0846f4f91f9e938a76b0e80621772c6ac849eeb7d0078c932f03f0142256433c1a53d213dba6354f7e749aef9119337ab0bd279d39814fdd2a2505e2a4ddd75955e419132534930ce026fbbf88c25d9bc68f200a45fe7f4c1a314e6d9276574f552badc3164cd8004a4b8aed5f36993f15b3ebe4d12ca36f3c31acb9b6fe1674db82708bf3363400a1d16010e8068f4bd0337dec292d383ff7e481e9e34859bcb144ca6c39c974ba0921061d88312120e125321fe7643740d3e2a1a665e8d461db94a28e1a05e67a6e73424c50102e034d0de3be44d7fc09cf991426a8ff3942e408193f367b63833e15aa98f5ce0aeadf7557d6da4989d42f42260870a3c546aa35346bc4e53b30e0e7187e491fc9288b8df562cdd01e2022f8453e6e5dcbdeb8d0791378f3af4bcc2b7759815e95c4b6fca31733ee7283d6d8202dbc3abd05ab5fa0782f45ec962b0ced590d2822504ecf18f232a36c1d86ae97a46b345f935269dc7671097d4e42e3b145db93ffd2ae132e447c6383f97978a5ca6e13b00f25ae1326fd00ab536215427dc5c5aa4902b80f8512841df5630394543acbadc8ee1547e9261949db0ef008dbb145f442da081518cbceab58fbfbe5ab2281a340bc43657cc42b2947d8940495c86f06a290e3dec6393e41fd0ae6c99f052d4a5df0e4bc8686d419ca198e62e5d9dded41dcf345560a6f0d3f081192683c46d0dbd88e9eea0642136a15757985133286fe988d4435966be4b82b17ee90ff08549b48d815e9dc01f4d4024a023e61594056daa4030568cf1d9112804cf091fa34b5b068932f27d255b900e20fc1b61beb49f6349b1e72e3030f1719bc40d73374cf46a2b9a10cb4f42a523587f6dbe20529d77037d0b25c2dca989da7d14a42b6dc7b4b99529252ca7606ea05b00548d8739e758ffe80aa29de92ed0a698c89998df163308a8db00669a828e5142aa7971646e1a4a8ed88c9223de5782b5b96a8c73cc8eb8a320f6be6f3975c7835d633134199ad0a42f7dc39e79ce3f80e8bd70379b19960a187897da3e1afb012116afd8bc01c1f85091346dae0f2b913d2e353799f91a2b17caef4b060969991cbf6f3f4613999190bbeae2a503aaef05b93add18e13632c343635bded220f086c9633f65b6db9324c42fa104bd863f9f9e99042dbcb1a0601a158864f288639bc335e0df479602a34027b7c007d1a4208a14fa9041f9813ac57d8a48520509803ec7951a638813d3ee450a27ba173e012363c2147609830b6067f1efc49e457ae067f7eb6865461c2d88b64c912cb95fd2b77af41516b3c9865bd4a22365fd6dc1c0636a9aeeb753fe7ee76efd9df8da48ccc2ad4f4f1e554ab9ef1e5b37523a16496d6cd7bd87a30db8a848d750c41f999ef63c26ea8076e0c2616fe6b3ce0f318d4d5e0ac1be219a8a0897443b6c1a12c3e329699e57c35193fcbec65315be1066d440603323e4343ed5b427f96405852938ff4e1e6934563393439380439a564ee6766e6e6414eca5f5e115c47e6265472c18f38ebdfd8f5321adef68d57666666669679999466c7ccfdae2f924c73c91a51359c5dbfbfb9172692edbe42fbbb351a7f0af30c4c586b3de2b325845a89c921ee65eec9d9b11a2159f7e824cb353ef8a4c976d98e3b63bb5db7a43105db31b627db6a6c6c281b528e1cf6da58af570f1b305683b372d21999238a208419e93a0c212925a5b731c1b61f2ca914725221d8f8d7b1cb92a12d5752e3017ff4822b62b7ad9c94bf4c61fc3044fb225483217f422517fc1d762489ed775d32327d71cd431af8ed959152970b3c1a2090063e9c2cf032f8330a755006d431f62deb7ea600dbf840207d2e620979ebb535065c249952a90d391719e363e1df7cd1c1ba6f3ad63548e3e69c57ec2f59498832146a40c7106b858541dddf2aa8b907e4c5e0ac1bc7e0d30bbbf16aa4bfb89e16dc60bbfb4b8c8f0ffd8ef432c8ddff6e1cc6ffb02349acb347dc25d3d72523c3af26c9f4fdb3deab3199fe7b5992cccba010b75fbe7b8ed27e413bbab50025aeeb64167a68597fbf1c7ed61018c284096303bf93aa9fabec49141e004aaf9348f7ac9756f592a87a7faa40b2de52df0644a368ec5e7688e4e6e8f800b65d570c1cc0ea3018d0cdd6a4578234f0bdde9cce6037ff9bea933596667e401bcbb6a181600fd5c8c6f2fc5bb29c597e12fdc6f2b95e230d083241f99b15848eeab52995f8ad7a33fe59ef57157aed2b56891214d65ae65fc109ad1b6676b66be397c1d9ac2337d3cbf0ac2130b075aa5e24b6df75e51fe84bec87261f03ad127834f001016842dd0381dd806617525cc038843cae186840965f26643d8fc2423d8e04194190c1240464ec40869306c6086ad0030e5da000e8084c04fe616e5c8064163b58022125d18bd4fd32064f081fd865441df1857ac26405a74513e10b04ba6289185da4cc408a1fa4502268b2a1620a25784045075f5cc1627012767aa62980785d8ee86e4f810b0971e7e0eeee3b474876bfa1bbfb67ca257ab096c841774b1a3b0d27fb544fbe8c62acbe7d28c2105e125c05a5a57b727777c99e8319d3093de9ee6e1d749964d00117f4044da028610b21aed8210b332c1268e1431155c4a8010f1cc67309bc988e80af0750670aea490320a2602c4480450e4d2fea63c4cea275627abe70a482070731880098285828e14a0aa6a8428c2abc38420a9c0822038c18b8149f254c469c800026d8c1871b489d1bc824ae274c0508312a09a63d11aa557ac240020e54ec7006efe0c99719214f84d982090f3e2461081e42777777379992cf78c2518085055488f0ae544834594118b1db251943287046e8c2c104e0b0e47a620306602295ca9b881d22fc528d485480464ec8bdbb1b0848d324cf1451c830234a16504411ad38c3860376a8006db1224c9428f88b6e17d48472720d35092239f1815edc508c311e0169da45db083176cc8b4af468e131c6b804d234e7eea28c2ecef04204a48b32e10535acb0a87725c61843f0b18c2d95114a10c6155ec0507152f2928326549084162652f0206710f325c618c798f2689a12318c7185c40d325551e76283fe9080255fcc20020ebe5801451548dc2084df20e5d241145caa0ced4c414116f622c618b5e0e91b2d80a04488f9a131ced643131b53254690439fd2d34e069e206f3e3a30c1142e3ce862045660f0138130450f152a50bc6009260083bbe8eeee36e5c7ddfa6fb9f6b384b9f010750a53c0dd554ad9ddddddcdcc2ca8e0e24b4eca7d6551a3a3d1b0161d37be571a00175096936160e73c23265a507e968fc91d59f84f07d6f00ea4812f9989c6037eef3031f10eeff08eb39799783a4c60139684714c2cf3b0c0c7012cbb607987e5bfd0f2cfb4d99a0ff92f3cc0f5f8d962f300f7027c34f069bc6d8ba46750e81ccb206e91341ef0cfb0f0278c02455e06bd4aa0f180a51004715103cbe97e6cec7b1bfbdee5bbaf66d53de52789aad44e5f9aa5aa1481408eef51d6463d16a3ba2e67f6e7cfbd3266ddc8382d118ba23b24d0f932684d7f595153b3ec2e928c9c5eb44193517a932c851acb29ce67d21664993967ceeb5a0011d886e655c4a4d705200da4b982c2e616545151658716e47ca014cc5d45776c010cea8953d5f3673b5ecd649692f2bfc0a3c97618b19961014243948750fb8d26938094f2b9114bbabbbb9b999999a96867b6b18c820a5a37ddddd463eab1bbbbbbbb9b7dfa79faaa557176733777bb47ef89a393005a37efab6639b981221331324602a78e20e865cb7cdd81dc657e05dee3788080f09e09831ed25104e57f172ee1570616949fe51b824b465e3496af8c2714c408f895d1434d22bf6392fda954d3d432ff6669c0764f1b702d73ff80edb6fd1537f744536d8d87747666eb30b8ff7baf36c02db2a822e5373619c20cd658dfdf24ac29d9f42895a6ca31fe0a73315818d668fa270d89d4020df46215108259fe8a6368e951bed611927236a0b6c53514b2ceb9243ad625d1c1ba2349ba61f2b1d77b4d497b2027bd177d19b45e1d989927a86b0560ae81ed7572521622e3ba785eccdfdddd8cd9d0b17de26e4b085bc76c78b15e25925fd6cebae1fee9b9716666253d96954cb1fc38467e05bc9a2290063e84b09a3efc210d8482ca592403b086b690a4246a88662539344464d402dab648a0e6e9e2121e6666ee2e979c94b95dc9c21c9b99f95f6466666666eeeeee1e4034cf10f1780750b316099778d690185f3eeb86618396eb0d4e369f16b3924d8e03814a797d562ad9d8c4d0a84104d65cb5068944a3d6699ae2bb295ee923b75c45afc99033d9cccc8e1df2e9f3d1333baecc643bb067fdc0420d4833d90e49faa26a336fbeeabdf71e5f231710d8d527ebdae533e9c8f6c8de8c0527575f72527e97e51e2a08d9bae7b70485dfd57e41a17b10c710f8fc5c711872a9d7c8b7fbec7bf79a1b7f63b225ad2227e9e272c94999a77d11543ca79224acc727ec254df2c7c6b885c618493fb329026b622ab5b119954aa22cb3fe27895451da2e10ebefd3594360b01e9b93ee5dc6cf7cdbfa63f7039627bd7e444f8e28c28fe5ca135f0b61f6bc2bf51a7940de3cd63d087aac03c194f75a07db6f5e2f83eeeaaf91cf95f480b8e0d745620de5d1c06f9e2d949ba75db1b779ba5818bf79b8799aa7791e94c805d56407eafe524d2c8ccd33e9f580200e39ecf0039a3d4c989ef925ac8939fdc48449ec590d8831c44a8234f04b2260399d5bc2ef71b1a143f90871292a289f1faa098a8ad20e1d289fb6c51338503e3674d8411dc9133edd01114803ab499660f35b82128132ba642ff2b6959e2aa258ffdb562cfc16ba7b2c33618509cbcd3d961a1202c7e96fb4f1afdbf8b76d7c6e3fac8fb0fda01fdfb51fa38fffda0fd1c718b111e61a8f7e11f61a8f7e0be3c6a37f6215d64fb96d1e37daf6ee697b8a1c3311ca6c322a5ebfeeb7d9d125cb2c8e218c836348bf3f89ab8c652fa46cd079bbf742dd7b6deeb9da2fa8fbc6ae9fab39611c176666666666e6eed6c14333932c123a87b534b611093b07a2e7709368894634a6923ee6d3e8041543ebfd6c546f26a256bd3693086c94d60bc4fa4ff54a29296dad46fe636f45ac4becbe7b741e39bfc192c62dca89aae60c364dccd07eda4ffb693fed676a3169636943030a144e6c96b013efab9110ef1be4aecd61ef9bfdf75c85ce3da123bb27aa9a16911cf767c9cccccc369679d0cc3a15104f25192bdd0d05b74c172e9ab9bb703c724a495b9776c5892b5d2ea08b74e58ae361d2584eca2d45c78e9cecdd3d432e27aa02b2e30839bbbbbb7bd03b5098411939d8c134702cde9c67440cf0bbbb1b7ab7373fb8850ff898beecb90af9212491de7bd2be27851f14ede57c159bfd5776a52f931632cb4983b8eff9bbce775c2f08216ce6e607c1cc18089c80e7ddc7fa167e3ff7f365d773f5a2ee65ab91ef9abdd31a32b2ee1f5b3771c224d620bd5cbd976d35852ce89312c257711e08f7c386d1debcb96e6fefcb6e09de5cab934ec7f14aa3c705287197394cd5a463f362db7cc89faefb5da52f6bcd820de89d9649a4bf72a075bf8037065565c0c25613bf2bc571ad71bb7fecc57b8637ec5858df37ec5666e66feb86ffb9f658c44a1c063123ed8b755b6efcedee97b5fbc2b5756f491b540512009e475600eb10605dbdfdd44b4cbed72f3ffe9d9e7ac9f21f0eeb5af3d13f6192e3bfcad175cd62dbbbf2b2f6a31dfafe0109c16facb91eef7141ed75df5ef6d8ba7f38eef9658f051b482c66acfc4a3e1faede29b68ae34ca8acee63956fdd7beec9971969571e0d84b21999cba6bbbb999979c70f3a2bc306d6888890d223e0c2c420aa2d349a36401069e3a8bd5dbeb6f24bda3bebf83d57f80e0a61f82369ccf78db6dd76dbf90d473f44dfffda0febfb49fdc48b4cb167ddb08bfc2dffe95ff95393bf8ccc0169bd73b4f5b80a33337337172ce7735e989999594eba855e2c67bbf023c4cccc2c677777fba0594ea0eeee66660e02cbf90333f3b39c4098b4b1e4e25c73ce39d78d3b4adadc84107657503d2c5bc7f2573aa450156c8f9df3760f43587eeef125ad63450f16d2252bd8aeecd378c04701073a84bdb459078b1721d0a17a9ea0735eb2d136311bdf1d9b59904824ac02d8a4971bc16c87608809cc7205426376f7be5d1521f81bbfbffbe68fcddf6c377333d7799164dce342ce6454352d51cf8a12593f64006828034343436644eae48ff8fedc7c341f7356b16478363e63d637563db46ea6af22864306db53e34159f5da609b8d3df1062cbf831f68d7b6b96ad79e487a4f2c5e56a0a308dadfdddd73c4c5f4d95872bf32da097e7a3d7ed7ddd33e53a1f40494e5642c26aa9a33b890849cf4875e2ca70b3582b404c18515382092c452aa2845275a2a954a2ca70332c33d3ec2ec830a6335c43f32f9e4ee2e7bbc24ef07a1eeee6666662f8de5135353dddddd56b25053777777b793d2df795b49810c000f94257377773777773777777777b733bbbbb396eeaede91b9c1781302c3c02b90cccc3cdf647e5f2cf3401a58e10f6cc205f248c84372c8635fd0b31a0063a0ea1b8234f07958417a609a68897243132adddddd72522ef4623979c71035d498999959ce2d266d2cbb2483c81200b6df7bedc7f434c618e5aca8f67732b09dfe5943a46dd9eecd4c03283dae59c80959fe796d31e92564619003e3c0f8c0304ea8fb0b8360100c82611c98492f27c4503881e284dae705ddefb9bbbbfb1d49c28dbb4652a1a44703ff7a01cbd956d89b64794563497a6198999999bbbbbbbbab682f424d46395136fe2cbbbbb334960ce6e57b4b24b38a32c6e891a3fb835154cdb9eeeeeeeeeeeeeeee66669f6eddc8772dad85bd230b7a7a8f11632dd424a5fc67b5c6839da5fb3f2b880ee912daa047961e59584ee61f2b1cc85d26874f3098e11231b22381ce9004ddcc3cfb5d4bf3d0dddddd2d279d825e2c2763e00054a094040066099631b3edee9eeda0a2da5dbac7ae0c952099a9ffd1f797a474d9484622f6b6b0d6deedae243e4602ca14ef4142e66ff0619f192b58cee746504103586fc13a8d75cc7a0ad663ac4fad86481614fe45f5d21a55bd998d9fea2d9df05ceb093636366a6b34b7d468b562a726e4cb6870fcd49ba618fb45d9ac581f0935c10403cd8a8ef5bc898a7d6666878c5389bba710f128ad1f2496d580480472a006ca66b21d4a30bb5fb91c78afcdc7002dd0448abd4dbbe2840dacf12ab2e8a415a5a8dba902793db248a005fd19cf72f23811eeef9d75436af759abda45acbba95eb6cdde39bab99211e444b53b3333cf04f10c8442b66099c63256cda9d5d01f4e849c5a0f7ba985d6eb0c8d077c1f415017d3b713e8bb6ae37abdceb28288bc7d047a3eac1ba7ac9b5855a3776cf41426820f637c20298afa988592188ef54968707c29df291a35a216f702f54e23cab7e255a3de67adbf2290f577ce558b72f2ad778f42944f551cd6c31fb9bf3ba4dc7aa1112802595690eb7d5ed07ff4707455b152315e237f389ae412d96e2dac59e9eed05d0992183f66f18fb18bbd23d127b1d0521f7f9e8fd1c38f593c6eb1771481bc277a1781461fb58ca818eb8d4076f4145571fc451f5b14b6ff4eed478d8ff51a19895e747346ee6f89461fb3b81efe6e05113df523cc9df03530fa2860369e06367a91086bf187a3702ce61d8da930ca7af735c6596ec8f431e6632a0ef9a377e70327b63f6a712f60d60b1dbdff84d68d5ef4d787ecfc1ed5eb78b2a3bfce07b69f62b2f118fd09588334231ba2a825be55a316d7e3276a8111889ab066a35bd9013b7d0567d4028d5c230dc8883f252bcef4f1a9970c881456e5cb7cc84e1fb1698a51cbe3a1cfc61730f66dc332441096882fb6641b16228eb0433cb102b00d4b14285decb439fec732145b00dbb04c09c3629992c556d6fd8ee5aa3d1fd4a2be7d35e1cff97ac9137a4f64d150596759416e3c7c9e9a9d7476a675f37ea07533d522d0468dcfaa0abbf1a4136c7c8d8f79eee1f4ac03a70702a79c87e18c2699afa68975a6af1e94a97e7a20efb91c5fd5fbece87354de81f0afab1527fee8497fe5097fa90d068cea745fc5317a5804d2f4f70a9fc23f0ad88b70fc45830142dcbf770f7faa1e08b45ee8f40effc6b482e4f857e5805f4485bfd2e2f8f66a7060f5bffe0af5cab7029ca8a9e6f8a934bdcfb1820a5584424d41fec4b623b7a3db01f7defbaa55eda6c94dcf3a4c0cc55eff9c8773e393d8875d685da5f37ce8e05e700f2f3fb1d727208f2d1aeeb337deedd80b9fadfe4e53bdbc63bdc6e47eaa38ef6ffc346b4c35268710362137fedd9c86d875f606db88bd77160d6ddf8f6ee8e07ab88f56901b5fbd63ef65b0f90e73eb6f60cde2c0ee63cdeabcac3f857a25a95e8942bdf4847aa9a85e928d7a4957bd5fa3de2ca6de8cd24855d439e762c5a17e7a473d6d817be1ba7bf08dde1b559ceae34fef5f41e71cf5137d87d18a437efcfafd45604dad7d5b1000fe7efd4b62e12f9df9ae4ee767aa6c166a83b53638bdb375d5c76abdd0eb3f3f5a41dce354a3778b8669dd3b9deadbd53baa42d6bfabca5f875be05e68767ef30ec6cd4e58bb95b70396fa8ae7344d0ca86ae51e7ca2fb014bfd845154956c25e6b805ae8777c5713c2a3c15a218c1c57bfd9e115b8c08c288277600b661a1f2e5bdf7a2f7a27ed17bd11375fc07ada82d1994587b5bbdeca2f62217895cd45ee4a2f6221cb6ee0efda1a81e81f3afe8db379148d43deb15bdc8fafe9bd376f48ee32fbd8657d2a5fb5f3ebd1c5551a53c06a358836d67bd4aa86b8a9e8401123e3600b6614142075b8ddaf3317dc5cc38d71f7e12f667aef8ab23d05e675dd47fe18e7df2813ce8e4a7afaaf9b1aa6255dde92786437db30ebbd0c6b72e5b37fd8c3f2f7c62eff439efa6aa47a0ad6e128b339ffa2bed1dbdcb69e76abc73f5beea6f4ebbbfb01a188534ee69383789eecb71b4e63c5b517f4735e7d9e85e54af55739e9d554eff9ec2a013d763aab15e776f93b092d18b3b5482a8f4d86ac44060c3dee73ceb2a874d51c266b66199a203151eabc3362c4580b155bbb46129e28b25806d588a9862ab56f1bcae5e254892bcef0b02ebbe6b831662384790d8fe661b76211421d0f2bb23d0769b6acebb70c75a51fe55effcea658cf16b60edaaf16d6014d244d15b396ff4570dac411a1a58830d62ed65a36ad587592f74d6fe5751ef4160c5a1ea757d73daba7f93fc9bf31e17d6897b21561cf7fefd5eeba4615aaed73dacd089ebf1ea95a4958c9efb5041eed2e213db2fad2c68b316161487bfeda5d33a713da2cb9f813bf6e63c1ba47980362c5280480d8b941febec834e5c8f7e67c50a75b027c4962b7402ed0c2a1ced71c8e0acab479c75f6d991d5ea03aa3673a96b3f468dc77b3743d59a8ff70c5f90aab51af85a6bef5e92e726f0de7b0f42c8950ae62e0d039d73a8146d5aa872a788060000080083160000180808844282f19024a931e37d14000d6a8a465c4830140c23922409521845318c32c6104000208610631052101d07f36a525cda76f6833a87e4ff3e405b5ca6ff8147162a2ae847b235868e6c6b3c1e80bd0d9551084c2dfc1cadb00faa9cbc93a82e8d640c66d260e544d97e88ba32fee1282b491ed31a7046de09a098fa83c3d12b752b570acdced491e333bba026762e6b2d7cc199d0f835432041aab2dddb6363fa72796451bdebb1a5b6dd99421f5c81c9636cb3b2ef44df5ca0652487ff57872bcdae7df5cdebf645e8e456c4bde46234b1e3098df2a7b80b88b5013bd1e1de6c4e50ec8b913c809b53d2ce29be28072133f8d08c4f9381335253108b05f15a8ce01b5c53210b41334c2be26b4e194f268c7694b1b04e986496e801b1a53d705ed47eda370ee10c71a7fe1234089ea5c849768a1fed418288c2f352a4bd4c52710b2b97625d8195b0732fd8dbb166f82a700867f721b89b14d988d9c5c5c5a07a15abffe51b5153ff64fd98f5183e04bfdf77ac527b3497e25ec2eaff51f851c07f52f42124e4546358f5f2fb62aca0133a0028ce3cebd5f063b21d5b9377d62ea89f1d8a01a5e8b66cf205fb605cf4323b3247a157d3eeff2b698bb8f7da9fd1748d56ee0d435042eb1089e57f57030d9ed5d86551c1b2e1dd7bc1d3cc5966748f4d4cfe51fcb078adae8b757d0d8c5a32a547454467a1b45443bb7216172eceb8645e7d6f7d51c438553cc978cc33b6468a5240e9fb55cee34a6153e8c689eed18ecff4298cbc7073644fc32febb0fbdeafa4cf9883b5c1d4c01022561aefab1057dce53a1b69d97d8393e86a48e6fc444562a4deb8e14ddb078f08964e5ffd37629c75c25dd98838d50f075ab48cf2bcfcb5e5cc7380e0d818f132b1471fff63b8c86373cf3a74851801d82c0f2f8a9bb7268d18b5645861edf1425a3758b934bbc483ed352c89fff1426f117be779b1c8cd30e863912b36b0ee17ca5d483198eca501289f0438649ca5a12431aed0a1e8abc1a4c72b997c2b3cb2ef7336459568d36d77c7fd8036713dbcaddd545657c227b23730011fc3c5b2d8e094fbf3931b086aca6901670218a0884968dcf3fd3d70bf4e6a481de3a57cd411ba3b08693f42f169a2104da1a807e1714aadfe6f295c9adbb118a7fbd294f7d0de8fb6d771af8e04753dd1d5f375539a41ec4d0729044912f432caab7a5ee893024806b72dd43bd7e14b40aebc2b1906d2e0e14ee06a6156690062be4733c6ef525e632f8030435f2b0a49bc91e46a8100448a180a3166a708d664f5b0a6e824b2c351e5d8e70f07ff9e0fcb9667d41647d92bf3d528eabc4ef69b80a1b855bfa367fb765e50985d29d6a9f640c50a7e3b0d503c9aacbeac4e17cc85c5659821ccdafd12de63abf43397b70dfce2595f1dec2854a1ff1651ecf8bada494025434ac41922ea61584c37d134951cc715f96b56b8f8693abb8976080701043ba38f5a1094ea8b9771b1b9bc0496db7d6fdb16464bfbba1c80c6ad1db4e263d6a8d60c6fe1169a3dd716df6654ab6c194315148984b25f9358211c9676ec116f873d0a2c153502dc2a162d1e0f0482a796db49ef52d8069d6970a1b543c9bcf8cbf90dc20b6a3f3307a98ed7058a1e9ac1820be1821171e0c6fcd0772362aa8a8276f9d6b3da1901bb9328918202511b8fd59f51a7b6a7f38bc6b02fa3c69c3a8fea3eef508c7a5eb86e343a4c463d9042eaaccc493a872648bc18ec398e5614ad811f0db7e87cb574548787b29c6743045900694e24c117884bfa6fddd5de2e0378fa7d88d028a87be7e228ecf6b2a39aa5c12e911020589db15f8be64db95b71bf0c4756775b239b787ecba9a8371518442569b505e63227f5db5eb0cd2916573ddcd7de0afd6902ad3ae8aad4dc33350eca218be0a4a30bed231e88011a2c3e0f35c53276818983c688d2a8ba498f3c1d11b93a237ff16d955edc002526428031d2f689c4e22cb8533c929dbeee9f5b88101c6331f2cb986b24ced3444dc88a24677661af615482a63d6917951b1c08c0ac9120fa09b32e161ba8eaed15c7e3d4b3521b02476805a23df89bb8b703cf47f0e5d0a8a417f76c41191ec6f8a340a2e4df51084aebe051df8d9d4bb5f44e2eb3518e7c2030ede6c2ecc3a0da05eb38b467f22d1f9b381a237c37243b7b1dc0759f317588e823e994e5151a7c0768fbe8870ff0ba8e0fe6961ddbaf1f118332fb5a9de6e5671f87c24cc1bc73dacbc0bab5b6a1dc2bda45759de22e5d10cd6fa78e2ded304e2a288387ed3b51c95178cc0a06fde85150036640200007c581cfcc9eb68f704155bfc832a3b462e94076370f2799d75a8c917700194dc5b184644aa8f091c417e7d0771758b685621f7e516596840e8b836e8453e8f8c376d660c0bdd0d2706085750a2229e966b3f36ea71afe0f6eaf2b50a6564b9397e4cd32a8ded66d89a17b9e601fe43568b1faee63f128281c49c6b3caaaab67b276173d058e578ccbfb3384b9597123aeea4592d85e3fb83b7d5b54f614a89d279fbeee00ab515c144b08e29337cf51f3e275641363bb1c4738919945332bfaf2ed61a03186876713f02ada1df41d798ab793bd2541b52d41a009862b53767ead53e6eee18535c65d01d1422f6509a599a72ac7ed80c94dbbd73930859e187aa9c1a4403a338064758b76241388eb7619c352fa0ce999c0d62db27fe2961c306c1422f17eaf7166e91355e2aab9e68fe25d04bfc9591db373fc12e55ed99dbd6c433dc7c170db92f65c8ed2c540438f26b6a77b7f7a049b63366d78af1bff0f418f1105bdae699ae84c2254af9d81671595f23bf62a54eff2b40075df837807c8f428705332427c5cad915d60e03c1b9f0d57f6a5ade305add67c02116bcc39be75e09fa0a8fdee7a050901c1bdc18b5c188236a3fad2656926754e89ae2d4077f54faadd29b25eca800052d284a8b314e652c4fb0fc130c7c8c8603edc9d5790aceb3f64ccab86772401a019b7de4524e654aa8289d77a9faa0e2a0873b4d1bb6d4bb2b152b6e963f24e0700fa62743fcda5a5742ec6407ec4614a292bce57b02a4608ecb483ec38d243d99e095872297af9e19a9046da6ef416c6d4ce7ab494e18eec3b8f9360e1bd4062a343dfda09445323dd4cea18b92f462b38fb3f039b8a6494e040c83cbf6229be1d58148c641ae960f18969dfa0dd463e8f44716af7642d7d72b1f3423aee8faeb671e61d49e57c084e3035b3ecb05be6077cd748b4eb0273c0b04140d10ee120ea5ee235f21c01f84b89a1a18baead5d875f149d70484f01257dc522cc7172d185341dc5205c9150efd1154f529166b8a2b5363a8ee430cf8bc509116a26d0a1171d157488e6d58a43e3101a948f37469414839154473bd45c251b1e7f6b7b64534aa41f34a01d11e36f7c9531a11445511cb41481ab85bd6e9ca83cd0aeb5502aa2ca0c80b4adc38a4ebff4d33d827824b84a58c606f62dd38aeee14bf1f452449a6e3d8ef3f321f141af4c26332964d95daa64d2c82ca8ff919aae5527ab394ddfbd455806614a91c37727f0f35a34880d8e0c11c54a6e72bdfb68b975fe241cc40a704c4dfbe11784d0812837666a8fcca22e63e9068e9034f7651a7fcbac79782e3ed79ac6e0715e4fbc1dbc67e81c94e6522692dfedbd3dd3ba712e5aa7501957891354df1bb7a045ec0463dccc23f8086bf46b08f12fe18b9b5b042b2989bf4a37e5c73a25ff4e59e91a66a665573506196329ae472bc9cc032dcb2eaab4d1994a8308520c535fcd2a345285bb25c184fc6aed6824b1a0bee446b92ad25f44c055c38f74e486c32f83bca7c809710575fd882517cf70c09c9ff99b017e50a2670c84e068fda2b5bb93e89875a53411e2254d940d074ee1ea507cd6ec02fc0e073bbaa4fc32f4e8eb25bd5bf394b671d8aa74094c505e686bbfaf9bd0f13ccaffd1c1e7c8cb08ebcdde8663882675c9a9c2434b48fe43914c702f800ae8cb50fe13f107ec9901bb23b3182e8842fda6b972b8ae095e89bec34b68d7a0588a98e26f2b2cbd536449e9af0debec463133e1f1f90d800758a32618a339b081bf973ec0e908aaa2633ec07092d9baf9875fcd019aaf7052e79ae491d25ad053dc1a959ba65e2b928d30e5c6207d0cfd496eb76297a6b216d4980d119d6ce31306015006521ba7a108b068811db4c1de0f1bee778780a3b80a270e8e28cfdf2c8c827ff9a2b6f52b9ebab5a8be4af5c45460da3cba7e25002123cfb522631a8dc828b39790f0019d7169d90a1cf1caa7b853a0e880337172bb00598977e1a13180e7f418336b5cb7eae541e8cf1b7540d7686139a439793c57400703fa3fb3238bd7302b6e4b52d55e3f0416edc6faa116f2beb75d17aa7e694fdeddbd7e3c16ea6385f50d08894783faae27826e84e076e43c858d8643740dab7f70f00bbd608d8aae40121e81e34840f40067a244b4d2712848d039275771790f17fb2330e80522c1a1ab40ee43762c4c2ba387da1ea2146dcfe5e091902af75988bc1907596c8b59363b848cbd999f7ffc7a7d98bdb46e87d54467c6615f1078e4a2b78a151c420d727c7e6579c2fecfd9990e04c106c60dac3cfde03a27036d0d1858715fc6ea581c75c53ed7105d4a6ff260d88f21a03b4a9ed3361549ec19d0cccb93e87a04ad0fb188a35b3ba25d8b700b4861a6af32f6f7bf2015d5fdb506eb9484aef16f08a1f3bc881ed03122968fa130dc73ac4fd123457307e84c94346c5c6e18947c14924a1a6e5ef303bfee0634445e08d90acb6de5e5f5412284f568653e46fad9449c64fcd295a166fbda95d7eb408653ae6ee44b1ade89a0279bbef752eb7fd47d2568a19c2ebdeaf4c0fa8f6b76edbee727df7818a4a743a7649d8ffb7b9fa33fd3de70499c9da35250315bac60c9a298e76069b9c2e928b2d875e6122400323df30533f432077ce8db4e502b560c1e46b36a7604a180817918294a9c7515915326a77be53932edeedb8157cf08b53b60c5f8d27701e6fa53eb3d98e4c17640db818d0606e5a2725a7f56b19428151f6c9a51b8531e9088f38329973c6e6dc3a8115ea8860ce2e6523403e6335985de31dfc63957c57743372f0de9826906f1c94dbc3d9642d8e06cecebc6436622a50fdb5bde07c00025f03b98f00aaa16e8f153839caced58e9a28bdb6271cbe0c2ae33454b7992c8ac11f88bb91959077d6f3bfa863fcbe86ca6467585024322802b461aa671adc8e159f88c0d622b12a40a0c2d540abb620e7dc5fd8b11405af21ae7d065d1ae8f8f7ac64d9d3bc28a96174d34db59709d6f17b260d0e0a0ea2259cb9a8f91f396caefaaa1c12337b30a66c7b30fdacde1a3e2f859e2c452b8e860935a2da7bebd0323074ffda3a0a28a270e760d9312a0a0e6e19bef5681ae3cec3d24e33641896e08283e6eb707d2bd33f128cefd6730020cc68f9e47b405f2a282df012bd10fcbc67066d5ec9076d9b507371f63f52395cc6577c4cfeeac4c8adddfcb6c10bffa85989a2de370c9ecf2f8a1228d750da8fd45b1666c0311ec948245154b5185d6e8d8f18c68cbecaec76613e670db01854518e7476f1505cd128d5b44d811c5613a80c16ad1af20fdb098e94466b47e414f0fa7d486a7d183cc49b53e66e9a06dc7d2098ab08506626a19c027f076fe4cf5bab14556b56011ff18ffbf0489cae60323a49ae2ff2a4a5672f2f2c04d72e7a45ec30fc9523cbac4e57459668e870f9a91d0c3e6fced15f5e9dcd843a4d32cf0790497df230c05ff39b1ffe8662cdd9376644d3a18c272c13682d06af5b4e6922b9e97fe16a39efd120fc285da3602a7cc2d4cad7e186c829ad945452c859b9940a805fd6d63d8e592508e35c14a55f3dc10fd44659488f972ba50ca4d4fd99a1b55bff427c8c9fdc8c805f9048b15fe79c79054e54de102f1808a8e0c2139ac649b38505acecb79903d1b327573d2ec021f1f7c4e78c4dd8174315e9a8d00ef90ce45a8b014a5899a782b7be3857f07cd7fb6994a3987c0d452fb63a3d42b71dfbbbebbe394b90dd8ddba65c3f0b00a2ae8ab4a9ede564f69ee85c300e68b92d3313d5af261be446292850446af2ad9f2418ffb6ba3a268fccb564efec9bf416b74d0f49a42a355b200567bb0e7af7b0341a888813fd30a44d183a7b5afb869652de574777a52147fe3254592f4b5424f9015992612ab933a447964a71a897c1677a0d5c030d10481b210ddf1f5790f88fdea3fe1b1c964d8642d90ac67ffd613075b0511bfa65ad0ac8572578e706aab1d0a85802de6f2bd181d55d91abeaa54e6009f1129f2123f530111ebc4f0cfee23bc5d1e9b85ca335a024687db174893d47a3ab5cbc63ba63de460983b0c72a09e937d8603ec2034827caeb01ada8bf68e0fb7552b5c1f4966fba2c4c7aa4016fb50ac7eae5a59453d7296e75e9054ae38f3755110c338d109434d86c36dc8dfea4029488ebd06b6ee7a7cf40a53b06fd785ee7109059a31ace039ccf5e440b7b52a5695f006c8c95c5362788e62adbb8f105205ad8703ab3debe163f4a8a61902be91354a625124cffcb22ca090593f5e08c937c1ecc4e1bdb78f5504cc4f934bb7b78195ef0aa07c19287e8435a56bfcc115f78692e4bc790275fbdee1c8ab3ec7b98861b6700a0591899ece597fad9b871cc252dea684d7a6801b81d1100c091e2330a9e2b0d460dbc0cc612cd519c0ed87ee541e29a5c3ddb142903909d36c172d85268fcbaf1468fd27db30b882ddfb06a50d75c1e351ac13282a97d2b8d258f28cd7d1c0a202a1716578c1516b25050eba36d163f6a3590f01533856e5a66fe4a208571d2dc2c774711be4557608746e56a105571409ec112c0f13608010d7ba789695e795196959968c8cfeac8efff2625bc3a17ca33b0811511aaf213ae513a2a554496b9918a76c13d9dcf93fbc30ad034e4073138e84870fe6cc5372e485cf9e7c8c5c0ef114e28b0959e206df908cb2f69166ca623a540092220e9354a886e2cb0440208abf8c4be2791cc491fd8785c622832daa6cb207c6f520d05dc82c1a92ad18af803c1530e3bb0d65488e2f2ab3b9a33868a82e949bbe378a939ccd7f16289127b5a81c29ff88cda2d91b8f923f8c908042faccdbf3efd7f13adbe18e505b945d2d23a6b0bc23a63020c920d5ce36e6609190151a7c901ff7f8ad3ed744ebb8118a353378b959f025cf7abab48e81f83c2971b97d418672df9ba9f0b6c8d8d34fd285f8d256d22ac660e0081639c1133ea7e7d3d76ddbe8c36ef3684165b4db8674b7698a376a20795401e2e141f884712a7102fa553545c73bba36991a7afe5012d858d6a7fcee55c7068161de500f384f6330abf0de7adcf927ea3bf090978e55045eb9e5bc1fe394ec0af31788c1f210d880a94abf08dbf30de99aff1e6d10f2153cda92741af7cd0c569a2c1d7c7556b42496c5a543751dcfa8c2f8d801436380769fd453b084882ed318562347717072c68e0434dd84e42776d8424bb3a83a49831c26b0f65a32d13f1030ce083f557447735f572825476ab04d48bc55ead286d3279521079879d2e5f29d8196c0a97014fad16ee4940fe71afb19f11e01a8df3ea2265fe42dbfdda51c7d08e48c0bcefd3f42405f8e087875e40738c1a6ce6b95648a120e03b21cd5944d019e1032d915cb838a58c7ae0e41d6201c1593d8be5fcd1a07d043b763b0493d22108f758c8540d2f7a3d04cd151fc51b281a3a1cf57a7080947f10773351ca0aa6818a48a40cb1d9db4c20e0413b10c4a7bc3b31f218d5ee0c4e8764c7ed3d0623f8e6542d0d92b4c27e67e043d0a143c8b0fdc1260b6b9f4631c39ad48eec35318ba0781321cc449bbef00db253054e397e62961c03b03a619a8c27a4147219e0c19b359f1ed06457f20e7e57e1e881bc47a289163ae63053d1aa1f624bc094238b96dfe4a6a36ebef02cc51a4412480b81718d48466d44c1d284166bbe35803581a449696b1db2eb05ac1adb83a41e1d4c475b7b2e9e4600d366166568cfe21072d2c9ea363555395913ddb9c2f63aa5e2321aaf71db0db4afc5c71402cd29d4ff7ac5d959848ea858090a0b72c70702a37727d6573d6960c928ed0135146f6c1da3b1aa7bde82235db7125d4114efd6dff72ef9b560940cf2f6711666a8614ef573572ab3c90d2d7ff761156bbaa6cb1820f03baa2bfdbb9d33ab69c8d3eb7a50c862b88d1de38ecda5c06de0e75cc40adbc9d47140fff4c6b7594c2aa7a89a4e207fa4c1eaa7b2934d68ecbf17d17bd0cb51bea793ae65af27a97c01b5a45ef8cd7e0160b56dc6a7f7b9d5b29b72d06c54eb0fababa570fd7f41aa60174f6d6350239240216488dc756124b6f2ae1e0729e3aa9726943b286b6a6331763865a54e11c48ccf85a26002070a90b4f506c16851cb76a30cc969a4088c1d2a63378a1f7155b2d2cadd1b559780e70a3f4fa1a170d828edbd6661db80e17524eb5d253cb800dbbcc021b1ad225c30a6ccce4e2ae72cb3088b686741f0dc3d673131336d45d172c161722b0a3dd0aa912bf8cb009ba09ea1a81087f25a796db497c6d6ba2d91de941c2b9992d07f274a36d5c40fa2f0e0e69d34520ebe13d27b2a17d9de424493e4edc8a2e4767a78a4e227c0c99679b0f9d63926f6090732ac2c7edddb4ca8d3f5b41d9489884cf79d059ee24001c5860810da49194d8879c047bd606c3c7f70813c9333f3a618c74cee5078e250586b6933da4377f0b51704ae16762ddf52592dbca0f62ff6b80a03b0ffebd7a39472af8af96feeb628e56f2a6ab2bf71f9c750a6b96b49f410d043d9da4d596ea6ac0592f076a5c5181d7443c39ef045476f74d07960593883107f036c09f10383b98b3cb00fff8bd0b6ef8343d3581dcc45f56b1ea1e54f5aef1073995a02a69de1820e06494bcc9f9554ba5a469b3fa1c00b77b0839ac08cf52c3de4a4ef9844bdd7a342d27854cb20d67b03041c7f79fc649b0f5a81c083ff586cac7237e3ebe035f5a9103ef10bfa09e81ff832b80a4479056154e8cc9b06493cec914cdb66833028fff31de86b834545fef14271e3d30c489cc83218381c5d672fa4714a8b1e380e947d1cd64814238ec862a870bd8de5223979bba0c74e485d9d11a3752fc5b9e1fe207b41eccc46acd9f97cb0561896df97217ec8bf8d750a38e7f1ab0057a5c62eaf2e1eb4103d90608ff34945ed7a6e941516d277e278bfaff87f41646ec0cabb95257980cded5ebbb8cfe734da1cd8bfa5999c43352248933eb67368d690655091c746ea757305f6c764e01f5b6788661c58400ef3597952438547f91576800f023289fe0985e874c7900356b7984d26f21e11e11f47352d564c806d75cde7beab408554de0f29b9acea0dd9cb71609c986d3807e87eaacfcb4ede9e7d737e24b6e03c1b0f754e041f5629500f40e5cddc836c4af7383540c7d29eae388b721b15d490e72cf9464c90cb353f3eea0f8fb8c1bb52affdff3e06f10dacd014a78c8fac9cb862899edf663514e8106f001fd3ef92a58c6c09564c15a07e3e0cfc896659f04656014760d787547446bc56ba2930145b1779611fe55588ca1414db3c828936004fc4884788685694b6e745b89bb499f8e4042b7f9d5827a547614efbbabcb51bbc26008fadd7507d3a35ad6bec76b246796795a0715ecd445207c29233d25fce3aa8f51bd706fb728180980d8f017028b2e8b1cad70c5d1f1782e3605cd88476736e168a04e1be77268116d10e7b2f53c1157bbe4b7829ef86f21f916942e98fce7d12f7afbc80fb515d7acaf775cba1bddb5c4e951e9bd8a8e9afcb618a379e19ae92359088cb7236955cd20cab06c41f8cc46d79fb0fb3371b1daf7a70f9785921d31b11e50331eb2444afa7740e0211c22c67fb48421eb5a319f301a152825eb06a0ad218d460c27bdd93a7776297afe638cd49200244cd10faca433ead78af044a6047e2f6ee9c876b25a041b84f5c0e288fadc99417fbf536af3394bd6f325d6d9901b16dde08d732efe5e174b018729fdcbab7253fb7fbe09b0090f6c9f8739a21e0f42b4a5af8a11c52306c8304657bd7312a4cdfc46eb2ab0f5f6bf761556bbfda86837fc3bb999ab89f10a8be58dbcc8e794d37ca91a8008093c4efc05f8fe491cdbfd7a1b62dcfddbaecc291661a4576f1cf4e97d700c1161e9ab2e310a570bdee4ddeca2954a58ee905bfeb8a90fe1f6b639e1bbff8cdacb0f8155a1b9fca187e44416df75f94879f8f27e9d9a308d2d06f08a41cb15ec96ca623ab094c2e9531802d101c4d48f63033f347ca3656c0129bb3ea60850dfa9e411ad362284f75225f881794bb663beb9bfa4b980019963dee1d6efa6fdf1cd86f136d80dea0c9d0a939518a330c60461e590186c57b51fde283d30f9b42b1b14146d11eba2846f6d3fe13e32585260f10ad3ef77dbe51d947696f3721df4f52f34b930defe50347d6f16f8131445a92091389aaf760e1811d94e43617c298fccf263580dd5de2ca5cfdf2f52a2b6330626e63afaaa8bd1a38cfc5070678e6e4a8dcf776de8ae6c9e7a053b5710ba205c37a1d1209d492868048541da5b7d6b5595720bf7147106931a4b8e818215010976bf6f52c3a65e83e1258601b9dc19692188537683066c410b2243a0ccbea0953b7866df2341fdc2edb6028d14d1fcc29270a1f5ac2f15ea40c20f33013681f75f05a5bf86c902570c2a2acba15de8875fcd397a0c7011cf5ebae802fbc59f278b7f27b96e5126af88c5914806d579075b4f61a2315ef495d46c496379e4486e07686554bac8c5efcf7eafaeb32d09efa08ac83adf7fdac520ff349e235f2de6ed6d3650f6390e74de79130a562fa53ef23e771d3b3249ab51cad6832c45a04ec50f362dc00ae353d4722e06d8f86b258b7b0f8c48a523f60185eea692386209d523e64c50a2bd6389c00a695d37c94fbea37c194e8c646e65c87721ca64ab01209b0404df438f2b535b972e4b2bee3233e4800db3f690a5af630861578a96ade9ff28e5e0379348bf1b78e7963cf9badc6082215c9b90ea2c4dd65e7c146cc0020990102b4df4c28e2e903a87c94573914e4c1542624b08b9850c24f4fa04dba9921a48876592800db17bfc93328636ba95934e96545b528a099dbd90d98aad25b7d55d0027cb12c3fd860514096bd3fd10924eb9ebc76c5a0d89a0c3a59573a74a9358d311f3fc18e794220762e197edf43f5b55a08502945e22bb64a04677abab6742ec045c7eef5d9f023f79b0ed73dc6a3eb3c9ee994fd582f0c0e2cda8af7780901bf89460109c957527d60321bd690a7aa6866b6a7d17a74f2737fd4b3e4b9be6593278b6087d8c5991dc35f0430d49ca006534c2de610eccec78a00f0dfea3121cc91fc8833bad69e9ea11bca6e281e4b00fb28f3e386cf9e4ca9bc324d5976d732d068662525f1a59d467ad62401a65a9d6033bf29d6fb57f67b19003a03f815f95ba582890589ea5c2603b13d5610857a66031fd12c2c16f405e5c22e16f669d98827ee5df5bd474f5ccaf70f0abc1aeb55b1b5cbb231a0ba8f4662b6d622d30de2eb3919d6e8a542276444b674b14da542d9f0ca5fda484c1d65479a001317a0667d130d74ad35f1a6994d96ee4f6521b408b858d7faa33479272b9a7bfe952da009e55fb246f4ccc91a290f824e4007d71906885e7767c918983dc9121a8c7fa31df3fe7134f4c574769aa92a228a161c47f52977cf7d43a0f4b8418c20b2057dad18f7e73a6006e45f95ee8f0668294a9ac8b71d51a1f2d8763bb89029996c0baf47e1df20e67034bb1358088ab0b2af0e816229fd51d36f64bd11f2810d8182b7c59137329efeffdf268cf93bf5c7563a0227a1fd2a141e332a78d58d18a71ef8308dfb8e04a14d4c768602f50171e2631bc000bd3fc0dd56c5b7c879e0c4c0c14d7b928417dc87e0be4aa34a4461f0294cbb70d9e75a26c8bbabfe9cb745522c7355f0672b9067c8789f66048b88e13e5d833869e07c18f837057228c1f121dd22ef7f9cee33c6d52ddf13133c82ef89fbe658706d071f612cfeac7993de28053d9aedb529d1c54342374be4506fb4a9f1b7d3af71425206860023a3a6e3f280aba3fec42b5ab10831205d0246c1cf0ebf039d4d1aee40c6802ba34f558627d6af9ff5bbca31014e0b48183f1ac40feb5fcd63b6e6ef70ca8c4ec4ab6a7d28432237fdca6e426b5a787eb9069dd98440bec27d06f0cde99ead295ed872659e3fe3db8b3a8fc425fc557b112b11552728481c52603aed4929d2b1706144d0028b73d0cd98183c09b6e31b027aba0f1c6a593a4e4d46ade17b664c0d826094cefbe99276ec92ff721524ae689a933ac4014a2fb89c4f92f3f633d4e5bf4238a7bea76622778a97638d08009020152c0e290819d42118310030090b1f8c8eac8476f445f72c09b82043eec9b81b4faa8d838c06ab9c4e7578513f7c203781edccb25d8948dcc5d5165c9ee90cf4b0c6a8238f4efd5711392a97fa1125aee05909f80c5ed94c251052c816334e58a5cdbf67d8118f49c15bfb00803a0694cde08d29931797dcfa09d4cbcc393011af2c37ce134bbe8daef2096d19a8002f86e823720fb200b69af40735f588b42c85d2cecd4dbacd25a124f166f142d94cb2a600b9202c1686e8c28e57884d268209f185d9134ab9a1afce693dbc58585abf5d6435c98b4c4a172ae313dc3f5dd606a927ce3091f08530b0da68c5f1b8de90c0c5fe1c27fec2722a5d546511b394232e74046a0500b31aa438ba4f23cb48df590d388c2ab0e2d1fbedbad31d29d5e77a832f6bb222dee79fbe81e8c95c3ea6f917f0429e611dd89aa4c0735673bb68b264fdf180f2f0bdf50100956d3d071c4f0ebd9d68157ade97eb697244020570248b2c48f0ef9077715302f8014f85c8614b8fb3a5edc56d1aaf05064e69b43eab7138241103cd529800e9909c12ffc1fa82af7bd764964d2376acc8eb4b3e32ce0c35d714aa28c09535c527aea7581514cb2120719af385e7654061b365c796df8e714d4b8b8d79c9db5e2701478f4fad6580d5843ca7429d652e753d0c1344fb19e5b422bf7adfebf626a9c65e800ad1e6548284b096c692ed1144c5d88c663143a320dfb59856559a9384b2fcfac1b73dcf580082cbbe7917c5b935ded98d45404c4a0c6ee93f470fc2a2bb9c6248e0509771798cdd023b1ed2bfe02dfa31ad1e70881f3c7209404f6d4245f2f39dd71c95b9a11e659e4d7bd6984021b21c950a8f4890cf689dfcad99257750be0b9fbb6a127d001493cb959c7ecd80f54e37484f0da000bb3cda89f59bc80968339b3015fb23413abe72b6747c87d86c98d9a995b438796d1e0ba4992bfd887397032c81ebb3eb4fa977ac3bd06f60586e1c8ffba0e933835603f91d326264ecd35c0a1f591a0743b88e08be2944e8231139f0ef65b962a50a59138453be4a73e945b53cf63140f4918fe81f15bdf352446d9628f81ec80a66755f45df32e2ae8684f190762ca45f2b9b001570f6854696d8b9955775003fd619c3698a3fc30418e0271868c4d34456aabe2bbad348f3ca38009687130149990e3477c27c97c93dae522f911f6a674cf7de3f8bb635b7d2b76b0a78537e86a03aae1705ffcfdccc562b2ff9fc47a7962ca24a328dee7c49076a34fc36bb7348bed581a94bf29896d018a39979905590a69cc57bdc8ea2d3dbb027670f35237267aab63e664fd09945b4353985c7731177eb5cf7357296c3e10e6f2120cfd9307ae06344c53fb8d1209a91c81a60fc591c4bf211d23c80f6cb22099a92ec438cb41f36bbdb0b1a8001576f66aee22a0e69ad535001456eff2d07f846bdccb5158dede05067eba8505bddc7cff614b321398e7f1570e9f27bb65594de3bc238596893d962b7e1d5dc9ff3d47833bd8d8a274c82243e089817176f177737788c61dd6be2c774b2d3beded655f6e9a91dfed754e44cd285c8a0a2722abfd3908440742a04d79ebbeb09271dc9c30be8c55819d972d0c1a4a60d424e1836229241adc7ab572149ac2e5a01417c68168f66b5d254dc9bdc44c75504b0cfdc8c6d188fb8f70b4b0b32a8c54f13a7a5cb30404c84f5e67ed80b615d9fbd27c7e4b0d55ee08d5556ae0cb8502030fb101a7eb7280a5b263c2d94806ed0414b823f2de1ae964a52633303909240520befa1336433b46a24c82b249f5f657785225fed5c35a8b17bde8fa07d6bef2b1c2945aeffcbe25c6516ae10353f8fe54b1289d1634146a856623b894616873fefc5a0a42b167d1148eee22acc72927cd98d2278eda90a8e57f62e407b47d3f2866f2c57e93a9682f575c2924803470eeb19a36f71bd9d6caeb174b9bfd31afba3343adf594f9145b5dd00448820924ecbe6a6cd90a78bdc26776aeb90a7669416725d00593ec32e5d12fec7e6003939543f870ea04efd4ce321eb2bf65b1a5e4c19090c00e3d24c5d4ce3262df2d6668bd69177a0d6764ddaf371c6fdfd1ffc914890e2b62eca127b5d57c45bf323012c544e6886a40bf425c04b344f9146711ce120d7859f6d3e7bf95ac2c0a269ac69a7b0fb7f81aed86cf0d154d43690fa8b56a5a322b0041bf7f5b62fb239c4279f211fb54a868f3e7c825b383bfe660b4fcd73fea5428913133853fe98363006651a1f3f7d1b1ae30ee909f8c3e71b26add2174f164046257f19c3cd1011b60135dd615e39712ebaefccc04254ce28c7ac189d493ccd4c708554b9fd1c04885abdbf29f6c101ea21f44f3594082fdd2af92707611c01a32f443b07fe90552143124364482fdb696311198c20286d3c843eda4e55109f81cde1f4b87ba51e1d53b19f0a84081d2743c364c1044b7f175116f825d9ec4d0ecae0b58f3f255c439d0358415150b5c0c250b8f641433454dd9b801255512a1b550b5fb24cd38f430b6c58709759209003025236ee189a4cab30ccfd93f9d1616717505e6cc9ede3a4605f3426c426b07a38924dc526b56b38923fc4c74a4a0b6708c9d5d6be24d46430cd3e5a0350266b4fdb5947939c48bdf495f1b7f09f315d1040e2f0b7e974c027267cb40b8d97b7a9b36948424c01fec371b081e82b4fc2510c1c78c70167a6cde6fe5edb12ac03ec2825bcab0165680ec59136270e26b7f4b91c5f88b45dfaf97fc54d23b6bd615969acb7483eee8464afc294f24815301eaae2b10d035268379d61051ea874201c9d9c513a7c9651bd72d8851e68fe2b17941eacd8ce7bc56ccda8554f546c56d2bf6bc84bea7c338322d2dc316eba31e1e92ffbe8be45491f51e08dded902d9489ca8ada5f49086493d5b92484b1384682f69982bf14976eaa953c884c39498c7bf43bea8fbcdc77841a487948c56d7a90cbea9914b701a5b36db9cde1d5593ff6ceb3606da2c05ff6d6973f545c911796f2c8944cd5b34a9fbbdb411d40d1944f8e01ad03e31291de9f2324c7896b064fc143f7e1e4611216d3416a28708d9091891dcf1001f76754416944b532ef29e6df27aecdd6e517f1884286afa80f3f23d8618801acf14987152a1238583ac0c48b2fc974703c7a4267e815bf7479c635b54c66be3b4d0a2912ac4f961107e062d41f31ac1b6530b907bbd7da073b011c93702575e0916bd3d6219fa7645dbe442e8e47b00b55c6bb1c63c5e9427c2cfede5987237138030316f884840c05be7cc558624051009af289e0ecaa5f7ec70b925d80296b05112d71b124669eb27252cbc2ce2a1fedb8b7ea6b966c9a5399dfc44afb646f4cca1862d6f2eafa9b2d4ece360275b7fa38296f6156aceb2341ef33cef30ec6f0ccf260e7d2ccd5c22066611a2b74bb11298094f8825ed71c8cabcbeebee0b52cabb821de6259736e977b4200e6ddafb6be61653375bd0ef6c52267186e62a65d2952887db5728ccf0ff98d2a9fd05742164ed1278ad4daacde6e4e1d9dfdf68fefac97dcf6322fa2dd34b6ceaeceb4180454434d775dbd54f3fa0737ed0ec846194938a01f1edfe282b66d05a019cd293f1f685df5c851258fedeae110bf0d11ee0750fd38466501536bbd7a07184b77d508f81d9383fa1b37d190e7937887aadc603a4432186c5f389b700d548a519b9c39fc3ad97b2e9482f987359a54360bb15e70ed0b7c39b464d5e4a453dcf3f2524710e85339a72404b4880c448ee7fb5ebcecca579ec0920fc3f82480c95712038c23a87961b86fc4659df9ffea56f473089ece0fd572449c045c6e9244a56e6a4ebee5915767b1e41d78e10ea52d67d44177e7957b50d344cbe0302a1c754c348bf5eb8f2ae0ba731cc0a56c7b3d361b017d0f730a841a4d4542eb317c2f690b5e39e5bc2c6ca02b177b0db58d3834c0a8321537eefad0777ffebec418bdb78bc06d0633b1bd7fc01f9eb7d14392a0f144ac4f43cbd8b5dc50dafbc7081fae504813150fdc98b474d5ffc727f3ea8f61b3b0dfee6739b07d3270a0edd59e8ae523c42a92f1032ebbd481017549db0b26976a2d0e55174f8707bf9b71e23d7815c4af21a8aea08bf516365c7e28fb4ce2c34166470a0b7512a2e053c5fa043dfb7eeb3c0fbdcce71a561d3c36996c170f6ad9fa0be23cd1ed24252da3891119f5d85200d5edb2bf208c95d454b48575278c3241b25a04cdee9b16451c585d5c3492510799821e25e1d6730eef477192c5dd9b382c914080050e0ca0ce9043b742e61a7b7960874571e5fd0fb82ac8cb4aebe992e6c33c30250888bcdc0fce2c8ca9f096ff188f12d77dd290ab044242f03e4a0df9cbc5972e2539ccd60395faa26300ecce36a6dc8d7fb86326a57322b99fe28fbe20e566d1eba2af5a162809a2ec6b18521d9291b68e48c59575b9b617aff88e5b239462e0c0e4b6133085e4317dcfe231b1917d462b9a4412d427869e1617f69848d3b1c34ab35df6ea2eb0af028ec9c0936ca0de6be0e6c1021cab7a764ae64ecc48b52b0d5460d707b8fec7fccc05600e3b4b0a8689e8b73bf61c300b062d3aa232e0839aa49be154363c34470b5c90d5c58c711447d8d4f726b401146e39e06ea3eb27021634058e450648f98ef730f2e4fc89340718a7a4d2b4a25149755429f8cd7e9593cd47b78870359ce6a6608578d927b5e5c10734be9165ec4457d11d19719eca517fdd7795490effdd5891d35221390f649adf71741b37751422ecbe4ed1696bd2900535f08783953b9bf0c16e6d4813c2bae02543b105888686f8a48c81f8625c61d07b783126262fde875f00ea00245e13561ef031d41f12440ebeebb0e4fb4f560a03074701d490ef3d5b662c639edef8375ea5269e328c3e9f4c0928aef10f8139a792aac67ce1817d6e26ab00371101884d75e4f60146f1ab45a9500a2e470ec6ae39c01ac441c52040b1414999b555477617fd9d01c92b2a48d2a479ccfe38e27d0ac191c1c07c326a09c0c05bf0dbf6b1898ce37f0472c45b6f8232d03c4cb2838dcdc4d6e413d3b6780528cfb0ddcb18d9789bdfed9e79fd2c3059bb82967be020e566c68f80acf212396da752e0599230e4de788249eee0f098696881e887dcc9bd8acf9fcb1cb90fb361e839b84ea38b793263e797a2051732dde839658438d6f326a9c86e9ab13209775415fef87de7d3e95b9ec5cc14aa3638a249031411380251feb66526664fa35c06e212dd3ff0c007a5d1655589ec010459a86d33d4517df62604b025b9e1d4e3bac73a74251ae617bc23f4bb482f79c65c355e220fa45f4b737ad5584c44f1f4f347d75000b738e631474f079d98f904b1f3fc44f5ebd1e7242e095402ad59348b5b6e4a818f222a7aa91b312155dd8f4c369f874137ed0e26331d3b064918ba427d3a4f6b5a7805e76f395b1f8fe6ed0c9b7e895c251bfdf98fe024a1941ae6664adc18a7e15be210d4898eade7c6162c5016ac51e31f93f2c3c660fcfca0c351ee88221237589def032be44b25489830aefc2107c7e57e81af3fd4c42fc064fc0d1bacc4fdbf9ebdad5afd80b35ba97e67e370f60d83b73e6453834fced0fdbaf26f497c9eb9c5f202e0840de55ddaaea95070d8753cf3f71c13d76a7f21d609234319579d97d9d37b9683ff5f147fd5e1aa96bb4a00c64f8f909b246c3bbc1427ce5633bb9c676b37d212673b5e94da0790c3e379a031bed2bccc8dc4fcdc33fad9ab7308034394df9dbc860db70ae5a909dbd858f5b3ca58617620f6d46823783903068574bce3859c3f5ecde8c856b0ac16e1125ca25feeffcb8ce75196489363c6fa810019ddac7a22a3cb74af4ada7b070998d1a1b2142b47c220315974b21bc0b698c5fcbf792b6351762638be3e631ec2079dc29689d1c590f0e37fd2606c69a216c96376aa6074e376a63911f723115f657186f330ff1f2bbd3002a288a7192dd698bf1d7f63c0d02cfb67dffd2b764ce387a5be7633314ba9b97dc5aa53c28f83e81341f1bfbb1a49de69225f0b5339e1775494b5c62072d0116a4f495de4cb77d256740fb60f69a8338776958b9b1b1d3a8c4f842632c25e063bc826012f73d7acee438d42f9d8b26823e5e9a043bea0380a186de162ef8cf4774d46a9987f9e18c5c31fe204fbbee3f89338c555c89cfcd2e074224c00f4de4fcbeeab83297565b4410b6907974fd08a4ca440fd8e639263d60faf48b793c82fce79d78f6b4294d7cc1c6cd817facfa1b0957ecd84baa2211d6d067bf80772ff5ee0918def767e0e81a603f65f79c340f39d2846aaef8e004a9425d16aef38d1790b3a1bce27ecd0c59dab8118caaadcfcb12ec1fe222dca5f967bf164ae70134f1a73e35fc14226af4599b72f028d6a105c02e8c6bc27311581dc5668cf6e8de3d9ee0431385458450396aae22de8e16cff61cca3d9282aba7af182a9c60134e7653dbaa5cc00e387e82c6dc0a560601cfa921851fd11d4fb58495dfc2b9c1e9f5dd4f618aa274ebb113f4239e1bc55ba616910ba45b9a90a3dddaf686f874b1d29dc4398bbf860da27e8c2d92bbb505ac70bcbba7038fdee22733e925f4bc04187dc9020151ce20a9b849e981804b0c41ec9d0295adeafe159ccf52147aac1f8c508bcf278b14ae74cf3a2bdca28d38dd904b14acfeca6df13867f0c5267ae008f2dbc2346b63108c4222c2828c923f3fb98efeb487025a2fd9f6d10b7e47ede102c12041565d5ad8497c19c4467f9ceba4ed1c28d562bd353c3a63e702ecb94e2dc2f3a952ea5306f346dd00f21e3c488a567e7af2d01aa6c25e4bace1088ab416bdd2d3c30ec34c4c1bac4346f31ec0327bc2873a68cfbcc2edecea080f57b8491fc3e9213a0b692dc065f18f593e0519c9cda90bbae747db901b7c600f954da873fdae73391e3528ed4473fceafc557e5e8080a51d43f1d63c862aa0b9f322f4f1f100238c157d3fad8a5ca0046a3359f7ecafb1751e5af381c106f42298452fe9b8a07e34bba11fa2f8658c45f14a4ef7f5f3b9c33a236c7d4592a82a85fe4f6940f08fe19454b4026cf79d34ced981ca3a3d297dc95e599492e27b7eda4460f26d6a98c9536fbbe3c8b9d1f3f6221d2d39f2e573a83640de541df1ed3a0ca6557bd4b591541058a409d2fd80ce2078a9b1f261c68ce16342596cb66407881087d53ff3e39e27b5cbed175f2da66114e5cf4c7b507cc23d14a7c6945076dea6e78eb16cde15652099c572b903f45d1197735057978ee58d45b566b4cf94c42b21c97ab94c9f2afc56238f9ac9b4cc82027b6c58a39e5593dc829351bb04a508614072d727229ae15cd1813497270822b834f6a6eeb3286e6edc250f382600c69751cbc7b6b4194bda9afcba18a752aa70407fc26fc6a803b92f380f0baa4f0479f244f044e68b96d882b7cf9b9ab01f35d2b5f227b1907ce3e0d422dbb1ca5eff2ce16325bc348a18ccad2699a1557b79b5479d40c876fffee443cec9551012bd18abfed611d47e4e1428df0179a933ff275e625a76911312ca07f0ba9723c3561916a7f108d7356366f3e9469fa95859a94dd58f649620a7749533697a0e32e0d39ba182b4630295c190269e3a6972dfd9c04b92878a73a5c8580c6fcddde569b8b122f7b45c968eda2729f0fc878744490876e76922e284b1b4d30b83d0d017688cba93e06c0513d203577aac687b4d05ce454b6e7a5db41251680865a75fcf6ea4ae54270fff9481f052ade9ff2b20ec22bef9f363c4d0e1b54fa4e8defc3537b3b8844ea37195222bdd0dda06389b477f5ac815cbf9af74ac44ab40b38604e55fd40ab41c4094869ed5f2dfafc2e398402b2e48519732d01e46f15391f947d8601960d1ba4a2c85bc9429be9d96c8e79aa0e5e1d685fcb7c20571a505e5ac49ec63d75c1b628eb53489cf188e293db78d160d3538626c2aad4cb8596366bd36d9bf84753f138ac50d0d2dd09e850bebed26d97fec199850f847356cfa4d1b5e7117b8b4eb33027c621cccd68ceb94b92e12203c9b99591b71fa12bbe87541aec143e56c763dc3aa65503552e70b83f0c01b77406f536914a48610c0d62d182c045637486ab9c884d3db11646b7601112892d3a04c04bbc33b755d6b6faba642d8c5f11a680c7be8ced62d8534d18e83e97c998f9f0e8aad6dfcf4a9a2320d4149d6f5892bad5d4361cc2b0f442666a06766ea7646a6dcb234ddf0d5a4a620d6749be239cc26e6a198d9caf873b9ca46c95f66cd8c032c10e71caeae035581964d7754f160fcdcca0166f439f9877b7b99095c19054e8349a8d46cf20b3ab92b36286e34b9520065c3ad670abeed8784c262b37a5d809282abe4cca798c5d4d4bb45aa7a95079f4c771f0c0546cbe86b63b39a333b38a2942654ab03c9134385bd83412ce3455a311aa41dcea6fb6341fcfc29b53f4bae30d4fcaa085a254a0d007770be24cca00eb702d28fa0545cd8214cbd7c328c4bc6360b6b293954fd9dea9517fa61be42a3bd61330d5cd20ae716f21392f3cc2f2733e1aa59b3d5403afc04c26ecbb43e89442282540508f0c92770def2056ff8b8c873863f525bcfb21324f6c31787756a891583fadb0f52581b454fc20603dc3c91e74a9903cffa48b50441e209a9ae399eb997ace63a0952e140978f6ce0621f75e9a190f6bac6c05d5a79a272bd273bc27f178cf1a958f572f3cf929e2debeb5ba7d65fa6d05950210dd1f33a21b3b59c41c8a69ee42343e31998af52ed399528a2d911edf1cf3c93745818c398f5ea4d825c42c24cc87e2a3d147b7f12750a8d6673938f1e3061700f019c68872b8836409e97df44f4784e6a4e71d3c222505c64692b1718fab92eace095038516b7bf326a17266ad5dd85e5910d11c485a7011f344ac838942c5074cf33de88981930a22a70f0b817c40bce24f133569851c54034fc8fafaafa2ee96cf47e736c6af5ad883c1fe2856e2238d05f9ac6c88c16e4bd2af9a2c2cdef2011133dfa0c224c62e854df310ab939e8ba4dfc0c84def387d043e65fe1058c53e3d5752227cfe460dd2b228d4ee226f1f8f84423121fee033162c2da585a819dbda929f0226c532c4fbc391a6e19a18a1cb609374aa794bb1fbb741c8b64aed42d5cd8948b6c712aa13d10fdfe34aac230d53c1c054dfed1c8526aef10ea93de0a8b7d2e8c32e02e571db7b8b3490168a60b89e67091aa6775788d5b6babce36478c522f15bee6e69de2dc9abbbd369e47f02718241124a6193eec11385093e5eea094b2049f015c9b837583d413b922dc43892b9818f2307c1e700c7f203f9b1c05f775979890e958d7c7503037ac91e2df6cc776bfa27de419a8ff61e064cb235cbe4976822fee08db83100380ed9b4daed97184f1ee484852c68ff07b3d327e261183eb158c82315903f2516d5b1ca19798d4c4bbb3cf37038e85c68645d3fc18e9858a9fb0739f2496cd7cac4b4a50e2d8dbe8144370cdee3c4cae6996373410d26e5f503ad2b4a3498799eb91a256045086cd2d15db9008b08d5f3146d5cd1235b5e595e7a1435e7fafaa17ac2f18830426f3822c83a201c500408b25e024e1e98f10f20486b89a6f861c2e4d26c3b6fd488caa2ac8620a3bcb44c21cbbe72a14067b74603454a2d5d184449b35b20fa31bdb1dd240dd2bb7b522584db49b943096a6440e4fe63d23abbeffbe08ab278d376f30054744c55fd7a75aa2e132346249506ed15c2e6d2e2fd35b9b1e844dcbd11472cb2470b5644ef7290295a4090d358653d70d8e1e50b569b05f13b1b67378ca21fe2419bb8ab7f78bbae92b5ab56722f332d888031776e94fd8b0115876288669021a23bb9cc0ac118652f1117c60e0b04ca59b8514c32f3194788d0ddc4feedc5ea0715e6f85bd663a56e681904a976398b8369cd8052baa1caa8b2ed5dd8933ac15cc6a010252614ffc5c3f155a6966c22fedccfa83ff9891e16bf0edbde97148dbc1002891220e63c7f1f994574fefb20108fe46fcde97d7365e631f1f8037aecbef1288571acb04d67b336057ddb9a4971dc3e28ebbf7d2e59c95355f07f8831887174d8b0445b835533de205285f0082fe8054c200e8acb6645806f3d8c0b46ac93e37459a974654d2e19171d7efd6185ae4ba459678fc025ec8d3f26d884ac32ce8cfa5f2aee3e107306d9abc502664c3878924ca720decdca8ff531ac0b8dbee3107844e5ee0dae52dd243e21900b0db14157bdf01730f28208ccd4bb68304cd052c030a53c97a5bbedc69c857cf213f1677e74aa0c0e727ce57a2c959521b104fb3300c801e75902caa34f0ee3293c9bde3a49c407f85cdf1c59a2827364d7d6ea56609cb9842f8451f4b44d2acc1d2523f4201b0a81ee1dd91d63caaa59be02cd30c6951148f4003cccaca01369e52a8559b137cffdb6cc3428d9db8c8a9de9cd34205858f9335b847cdecf36708f4a991d41b0b33a825eccb0e2dd6b6adb43a4948a68751860fc0973eca05b6824e07a9aef0f6f184566ff532316b399f0caa21808ba50383f28098026e20f57149722c03055cfead293c94a93fd55774004a9cd32f795fbb2590fd749d9ecca7c2c5c27d2465d2114023d899a39bd0ef10d9e28d2e31612c7ca599e5bc56370e109f9279e32ccceb5c002177c11c9c545a4ef667ae411b3a44e7db4f26372a8ddcc7098d30b3b41c5eef0c9d8855bf9529a58230d64553dc28d772e9410d5d711d4c2d0683e04629a2198b24d43a8055f819202838ea1834d8be1f259e5cccfc90d548a3e39e39083bcb158189a9a23c9fd463586e2a4778e9d319c98c6e88d462eb797fe32a6244d402f204c459e751a2f241af609c3621dc34059065fef41159d2d1e58682641a450e1209a72fc990df9c9d874367f2e4d9d211527515282ec23b306b29148a0486fbdd92607e2d6bed4676871aeb9a37f29fe55838fafdb95c7960add5c1c57936d3e2761a056ae92bf2ef076191d160d9da16d9b683d3e851c4cdc5806c23cc6ba89455f3fe5fd0d229f3d8ad7cd0a571cf40a5285ef51820c56cb86a23ff5c2dd85f5e0f6c7279199805bcb9d59c007983f2ff929139507d42ad5bdf7dcbb938fe6bdd18828e98de5c67686cfdb204f4d3762101f3b939f6ce2a0e0fe507ec583931823885d42b0969eaca1409eddd9a37f34bcd742098171bbabc998e2150b6b89bfc390b4839ad2ed4772d314b5679347ce93cc6f31ce6631714ad41045a95e48f0c002cb1bf3db8c6d487964d93cbc016ea2048fc55179ec031f8f83eca2bb42a2c287d99078fecb9ecdcb001f5dd40d1bb355c8c29304a73e8d7a9e73cfc980e8f8f4d09d9ea930f87fd153c8054e883f24634af512fd97d4e11f9494f744f4c33c52edb604682036f117ff9160334e624ebbfd019744cddee1dd440708c7c8e6126d2211cd668c79e68d4d27707a9f33b2e92272061ee2d23fbd2de3ca407bcf941d454bb712434c5cfe037af10a895a801615251dc336f09eaeffb4f0b08228e0b4134705dce0a6b58445a34df8bfb045ca637248d771504b8192450097d3e628ce85bce37c0cf8fb5103276f55c17f62baf2c10837330f2dfae2ffd65a2384ecbdc9de9b6c22a524010f0852088e084de3ae711ff728dbbcce735eaf73349b495558a3a11ff7f876894559caa698dee6e52b288b745eafbfa855d19e3245a6eca42142e752364505d58d97b482b2168a14be2e85d3a3607b9fb0f768e6269ab2264db31a25306c1dd96bc9deab30cea365897c3c8723b4ae0cd47c5e6213f00c03bb854df0641aa3c43490ca9516f0b361c0cfd0f50c6430a2e6847019e43be552bf2094175c0821a493fa75f83a2fda2c140855e18c5afab93eff264b19f237af919af966f9c4b2265cf5dd0aa12accbc0199dc2c6c59ad83ba286a32370c7e9f58482349e6f7391f4b8de610cebf47eaccefd6b75254f2d467ca9acd3487d4a569189acb3f4bc246de30914fd8e71d6c73a8d1702aec433dcae4e470260dc55ff391e5dbbdfa44fb52f95edf8c879f8f93433fd4f70ffe7db1ebef96e61f6c7e049b17c1a22e99f7cc8de6da5b6718ebcd6259dd22231527fc5613ab2a2c5f8c147c177754d0cd319c4c889cee7372873fd83a77d3da9a5f67dabd0266458c8ce3e60a1b79e4798cbd7cd7eb425597e85ed1a7b604b5310088e712675a8256e6ad914cac6e586666e6f8eadcccccccfc806adf74e9a784c863605e01435132ee23558f6c4c0c17d90e806b666666e67e88721d801868bb3939462c51028bb21857c0f057c0ac80d920788429e615309b8267b65926db186a3ff2be013eaf53d6af0d867723f1dad9dfdfc800d8fbbd1c4b6c0ccc9a7005006c9e629b6398e6c7ae93c0400e03667d04f6711158e71f8c73c626f991911557c8bad3107e314c513ca9578a233c877cb190bdd8bd5adaf3201f9d3d275a96a2016c0dee216aba8c9410b329dcc6acc9f4f9151bb3329219c2e884004e45ca10728c00b0a844a3ec11c28eed1d55bb4ceef1710a42c6110f323e40465280cd2b0a767222a5e593766113eb781904db7cc2aa3bcc723c3527625a3d9f4fb49280ce390e7514e21c04090939bb6fff0302211fb4324f520642dd344d137c7f2299a6a999de807d421e5fbd6b7ea21dcc7bd03ad7afe22d6cca090199713c0e7d2202235484d6cb43a7571f692ab27d0f5f8389c4a69b531160fed464fc8ba9e7fd6453c5d83b604808166510c6951619c0610f5a1fb25a4d7c9ee2419b821f7b46b5cee2d776c96af5934d115fedd2da2e59f5fe56e86868baf5e58f490445b6a08dac4f8ca164150cb140d6dd2b8cafa241b0cd3f30cd3b58bc8545d9c4ac28025dd27ef52b89ac92488ab37904fa040e5dd2ce21e1a968f55caeba38bbbb5b55bbfbe8644d38af6845c938f4f370e813245dd2eef15c1749fb49757d625975dd7a45c9e23758140d60afa91eba6075926e1410ab28d5c99a4c8f8f4e62bb38aa4a13c4324843af3760d93ec618e3de80a16427213bc2040c776671802ad777cbdb90b37bc344336cb88d711e691ea364e6bec44233ea30cb90377768487e76f6c6a6e0f7079410a4034217c7bea2c896f6b976641f865015fecc3f4208bfae99abe7d339988c13022e7ef3bd5141aa878684c087d8823f83447acbb99d91534ab7d2225a1bbb8310476268637f989a399cc3c5b13736858baff37d5a97df4d2b281bc97a70deef1b18c0f972aaa47272d6c69a40cefb937b07b30e1babcee1605176ad3cf56be5ee0d48eb0d5266f1fc7996f3716f48d97583bc418232376fcd4b5036ed8d49f7c69a4cdf1bce2d8e2a9a506252b637da4a673f3e00f2f71886e43cce392fcd9368ddead2a5d7a28c61b089264d1a1a8d62f5181f8d2b2ddea57d975eb491a47d94e07e34786bf3b7a19533788691eddfa355a525abbe7d4fa22178ebefeddbc7ba74f7defb4a2dc60623935e817c2308563793f6b58348af4912bd300d06f21e6ad2a315036fd2302184ef9d5df00e8f79c8aabbb4efb9e01d36c5bbc4ae451a5ae9e34fba6baebdc5b746db5ba735e941ebddcd1aaac73b6cff81cd7730cd37d875c642de98e70f7357d1ec82493812fbc04759ac96b35b715e6c8a6d4bdd23a41ad210f527c5e67c310efdc06feece2f36c5bba3d6dde73dd8e62158d4259b77775d83494c72d1aad2aee217efd5e7a461c63665f0f5897efc039ee49e94c147f9c59a385eb9b8f3811d9a1d97a24d3155a6499abe6362e6697a556577777ad235df487dda14dbf81a5a1fcf69d269da214992248364a9044bf9e951a6a1bddc14d69f54d9ec493a49d3a6d8e59ddeb4fbf64dd3f46953eceebea95a0b08b8bd838e914919c3c42ae4f1129be08e111d16f268e423c2c5c8b15d5c4307ef46c4503b91f6380fad9cb56704ad2adc2cf3c1d1f40747d32cddf1d355f4897749fbc8474474aec2f0293e44ce1ae039c228e29b9183300c74448423a008faa12334f60eba3b324cc3689750886398f88611bb05867c3b867bed8e914d97878e42da5485655c48480ce910da2c0d23e44e0493f760d5179be6434218e620f45d1e66966916669669967676af2c9359f06e722a9ac5d166619866e918149cdac88adc40b648062593b2ea9d922aca7ece1ae437ca5edb3d8a9c34eca421928f71626656e1090bc5c8629e367f6cd1d0f468bd9dff9ac6a2953346c9de86aa7055e1484fd6e47d7af4134f5d6a5f5a19f0a57835975e5132ea1293b306f9a52189d5cda89f540d55e14c7329a959437b4843ebc2d6f6f24d1a28992c4ed3eeb7adb478efa047bb4a57e1104fad51076d8a760ac59b6868cf0d25ab2a279b82fa7b7c959f93c6d09eff5e2555a16aa42acc72f791e9c99a80d6a4ddcd1ae4df256c7f61d42d6cbe61d255b4c4f66453540cb1cff4288b74abaca29fe9d4a54b2cca4e3645bbf4912a65d42726693c9fb4c7533fd914118592496dcaa6934d51975b03daf749ee0d738e6653a3276b22596bf9a0f372c89edb913d763ad8041002efbd5e12ad9eec6dae397f70fed1c12226e1d0ca321bcd6555521f8662bf599aa5595e38ec6248af77575abcf7b5f1a4d76d7a6d5a1c59bff73af5418955149ccb47eb0d32bb5e69bec1a4aba21c2ce2928a56b44a93ca9044eb0d0ddbfb7b63533cf7c94d928627104430d234b198a41e908a60a6b7e51e69056555251d6d4923a4deaf14a4292929296d05124a14a3685a69214520a9b3698a5e26944699a669faa31e2fb1884922ad5246d12a4d34d4f4e4e484e34a3ade88f7b2a98a968481c42bcf7453524a8aa274c8ddc7795848c423e5bb1443e2619e3d2c428d78221f31972f45e48499e645a849844a28a0e647e4f2ee2ae429ea3d271ff246848c903c425252d2aa225192fa444d54d3112a2dcb9a22225894cd29298aa25cc8a328e9a81712e271f2ee5194a37aa27aa27aa2288aa26ea2266aa2284a4e11f7ee30be07b3de180c9730125fcc556e9aa6698a2fca4743f1948c4e4a4e4e475114255d3c75d10ffcbcc7735dd4dd47dea45913dcad93c06078f47d929fe424279526a1e0d62518120aa4aa6590c2a60c5214453da9d21c85c5484928983c3cd243253b0633d386ddce757777bb6676aeefdc748eeb88b7e3f6c4c89abae866dd6619d1f413efba1d64ee118e5d8fa0aebbbbbbbb439e81ac596a18dddd6037d80df2f6430edf215f3963f327acadaab7b5d69a6546ddda6e6bf2d674d339e7e6ce0846643d308801b621b227af237bd9a68abb38b2218268ebd225edbdb4497047dc938686bb282289119f91190212a3831072e88a0ea193f03424ddf77c710c31341dd976bf5fe1b157778c5686e918e4aff7a36ba45b0f24a45be23088d08878403addef86dd0d4f2286770cd093595766d59759b700704aab871ea3f52ad19f6278e59778659818282f8d41c532ecc7a011510286470d004ae96234c636449bb2abbbe179078d0821129263de4103028973d3f1a6239bdeecb9b4ba6fb7edb6dd56d2509fc4f73552953677ee6498f72e0690784312e7eeee5f2468ebc10e48dc1d8b67125894599b03092c6a2f4c02031d41eb1341af8c8ed0eac99a8786d04a92813e5e50649b8d3bbf6e3c926e5a0f9a87c898caf3eb6cd9f46cbe587574433fef120588e49b439fd8972e6947016a92cc73bdacf5c0bdee2d49b3265c8eaab42cb4328a5a0f36856c3d5893e9d1e36977abada3eda5f520c6a6a39a2b69eb01b6580e627c40bc1ef8c5aab60508183b60e7c0259099d9e361e629468e5c1e8dd7039b8871d210a9b42f1cec82ed226fe48e7f2edcf1234af18ef247bc0a7e34ba690f19f76643bf1cd91836c366d80c9b61336c86bd3424cf79c7eeeeee0770f8f1f3f17d0003facc1b5f0ff5c959433c4f08d8107948bc5e11bca6a2a8a04a525f3d10320c1b1d356b880f393821e0d2671712148611f036348cb4624004ad286805f547682511a1f51e5a3dcdb0aa1e101f1fccbc2b2de2737933e2b311ba2418e3737933f6f900fbf59055157e34faf590c56f3651a545860c193264c89021ff7af40071eda84d471637f1bdebf2787e12920a82af28e27556995a7e5cf4d17833d6a4391dac7a73b0f9ab462fd10bbc983e1798cc7214b4266a3d1acdcc557b99a25ceb11abd6c2f489685f3c2d170c76810205084442f27b3cd7d5fe688cc8d7f692393a4dd57b1e496b7bc9a6dbf068bc428102048a1106e6d3737934aaeaf5302347d1892823a4e0a3f19245005811b125b6d0d299899b4abeaa3cf3fefa84c81fadf241f978864dc816f8e49bdc841042159e58e88a3810cacf29218786acc93c7627cf64921bce57f84e474eebd72b94927eaec3bb3faa82a19cb3f3e0f7bd7ebc0369d684ebd58f0921adf0e38356d8999007acaa16cbb2a09430f22c2385806f4af9f7dce1596653bc43eee1e47ccc434a5a792673737ed23adf79adde91af15959772c267b1cc9a3c0e569d319037167209f33cccc16c22f681affb6b63ed37afbb791bfa81bf345894318fcf8b664db8a4ec229eebee219ad93c26651e6be25e9d619847f59d34543392c7a638f7abfc94b210e51e157958cc4981067e767c5c46663e2d6da487d3c07523331f191f1736e1dad5a683e6ae7bfbe38373ce7d5a3685036976eee3926decee8f0c07d2b48ef4e8761f978f4bd6d7388da6379b35e16a9043b89acf8e766e64e6d3e23e3eb4732333fd4f4b7f66b88f4b6b5ee3c7259b3eef2eef689d9cc6715cbb911efc6971b2baa64ad906d38cccfc20a95f9571e0701f191d3fff9131d2837f683a64ed1f198c83718cf4c8a48338b27a03e3f8c8f8c81899f9c8f8b88cf4c828f891b126138ddc0b8d96cbb5ec0c75e72877d5889961131445a34861974461f5caa87594a3dc791d5551ee517f9d2f573454bd5357c11cf766e51c5d577dde3d60561dcaf3fcc93947bdd7f9c4bf30396bb8be3474617533e6cef5b136dc75e82e29b9a5aa2a5e21424f923bf5a05edd99798aa275672877bd53afd35114f5aa9acf5da738987c631f973010775d9a578da6aa621ec7769a2f5669e8c75515c87551573937e320a4163a8b3922e0c854f20b431b420eccd68090575ac0ad0143f119c8e05c9890afe39e8fcd71c6edf9787817a7a39f08b235984338cc811b07391cce2104a19c39a7ebde1a3041b084706bc0cc4866991890d7386583448979da9811466e8d98bda683cc713ec65d8bc9296fd97031315b6363a494591b319ced7881332d8c4c92348f110b286513289b68caa680d3c4024e2936b009d8139c24c8dddd2acc58c845b39b99d3136ea6e99a1755c1f01c5a3987af9c7fbcf63f6087ef5e3994a6ac09fc04a769fa3e6201bbfb2d420e07ab9bc5a76c8aadfdce445598f38ffe47d3cef410a7a7a76c8a89560cbc494384c18e7982109e058c7a64b55d050b49699ae2596c8ae9319269b02398acaa70caa6e8b71829b46ed10a6fb1bbe05b9413e4c68ec59a4cf00ddb6fb0f80bb33eb1ea13d6022f41348e1c2f3f348e1c2f41e4681c393cd8e6d025240878dd4d752380a4bb9b860878badb43a32e897abb5f72bce478c9f192e325c7077f0c21ba96ad076946bb300f992449b463c8f8fd34d10632894cbfae4f22467ce4ef9ff779e72244bcf31198a7f3771158e71f2c8a46b00ead2a4d048ba29237ddd3b907c47378a96520af2acd499732101a7a076149a16b99ebd0d03b08031e05597a5592a3cd32f5547daad27777ab1d642c13817454340bc3348c8e21758c666118e99b437bdeb04150b8371665f57aafcf9e0b2ee9bf47146ce28174dab60ec8bb8a76b7e1d4a3ae7e7db37f5c1b05c075d125fdbe28f5501730f41ecf75b9809feebe2edebb2e4f7d4651ccc0247d817dcd02c21f4a9066260424e9e8dc98adb1305b636376a6656b6c8cb4353666675a36666b48ef715ee10a4d6f59bf472692453eb0c18e96c95e598fe4eeb057337630eb1cec7a8c6224a55983fcbcc320a783ed54c0e3dcc23a57d11e0e167507036570f36b730ea6e9682a40d2b90870af9bbe2e8187d8fbe5711076f5824aca47730523a07a47ef257a639a84458e53902c796acf05ef10a7e31d56ca85352a39636549ca5955e417fc825ff00bc993163e2d5d4d1aea7d5a28d7de9a57296935d2432ef58f8c8f8c8f8c8f8c17a7c365cbb699a4a464bb545252d4ac34575f4b7187396cf1c64dcd9234724aeacdd22ccd62044d6b6f8626724dd3ae71d3d368de0ccdb3319f86be477dbe4f6a6a36b3331fe5a676c99c8d4676e7ccd950d7b84fedbd1b8d55c9ce7ca498c31bd6f0c5164ffa2ee9a3f1683c1a8f069cc1c2f06c578c0b7349077f5d516ae24c9322e7f17a5591e226ceb51135f01bb3311bb331d31522080402bd440974721223287a89668ca038e725ad28d5c9c949d6ba202549622125295dcef6565ab0887a8428179db3dcad95d75570dc285f2d9857d0379a6fac6fce9187b5a25313af9d935699929292b226bcc2d94907936cad85aabb14b96e979ca921754af387d56ba585fcdaa03458283e8a9ee65d43ed8c7f9beb92b2646b5e67c8e4ad4716651415e5c84b4eeafd88ed8d35a1e0a3b54ff0d6da14a9f7f1da31565a304cc3b03496d530dca5b92aa763b410908de54236b47a3eb6635d1b0d5561cbbd599aa5599aa559fe7a900f3ab7d2626decc06afb03c8ebe2581c7b63a545b436e2dab0362fdb4cb73aaf3364d637b48232eb92d450107a636fec8dbdd138eb9c60b9e01d98074bb2a44641078361f00b7e5159960bde8179a8b0d0a4288a7a355d15ecbe4a2e5a43b3d968f805bfe017fc825f3820348c9e21350f9ad72c16c3340ceba2a85bd665715e5fb669699d0f9090ea21201f1d4bb39ccaa23497d52ccdd22ccdd22c1990562e764f883aedd9e8ec9bd1793dbc1e1e8dabb3ef74ae8f4ee7b95c7f33aee7c3d509b90afeb8426ab3a616f26a518bd6f632d21664d7932d49b6a06ca7b790eb55f4de87e4c9a4952a2893f6b2e8a3f1683c1a8fc6a311bd503934f99c73eed3e21e1bf5e919c8dcc6d8eeb0fa99110f5f3f2e1f19779d9516d63f2dd5bd8385aa78c5e8de89ef38ab73157c55d5e307e79683af6d7aeb58b73e6249f0d56a1f5485b30ead1858a91c7ab9f891b1266eca482b056987493e32a6266dd61981aaa494124a591d442359514e4ed6445e5a2b2daa83e4a3abaaac8364754dd7452b4a2635933c591319a9e9e4e4e4da4908d64a0b163dac0852947516562413c1443029299b9516967516d686aa2ceb14457d63559546f30afa47e775f30f4b433bad4a4949494959e9ac8b61031db27d91453ea8811059ed7ff87f8cd54a8be994349d122254e15b04294a9a5c0fcafd7a92dc98c74855d5c2549c285b8ba2389c692bce55b0b59fd5add7cd2b5855b4aa7040fe515daf95c4b92caa524d8f818f76be316bc26def74cc6e76ce39762b2d9cfbf8c0cccc9f19ce398692efce705e7146aeced31ae911619242d791ce0aeda268b389369b68b399369bcd4a8bcd66e3e222b7d9dcb986d1d266b3e9189bcd66a2dee69be9b539df402755960b712097fbb05ca772d6ab0e6773bd83455109cb58d36d18be90a80886df4a0bea2ca847453da8179da2288aa21e45bd57b9a9f7defb837456af904638271a23f54a4aca2929292973dd8b76dd2b2d26e8e07bd14a8b686decc045ce39c95d6a895a1c0e4228a977fd72af34bf5e1de5a83527ad8e35f492a6db447a83cc28ba373af262d7857f9aeedce42637b9c9496e7a8fdefbdbbddddbbda35f45bf2f61a1f62873fffbd22fb514457777ee6fe71cf5a81f92f8f4f7e38bc4f9d85ca0ccd1aae9589c8fcd554d08b2b99c7320ee9d8dbbe6729a5fbfdb74403c23227e182e803f007f0c7f891f003ffd69254155a6c34047d08ac28d50115a493c21b4de75369a8b56f5728dea48123c9dc0efb5f7de7b2e7887c73cbcc73b708cf7de7bef8f9a9ad7786d3493dc4cd754d2252d8aaa7406695de1179dc92e093c679b73aeb498738598937bcc3ae7cecc39e3946faf5c7dbef86855e9e9d7545d98452385ad8d37d18de9c8c90e09cc5253d1b53d8a2250048a4030828f32d810468710be400842012b840c217c87f15052af32d2bad2aa949d9c74e454035723731f9791994fcbc787f79e3544e6dca3fc9239ec7d8a6f29bdfb1f191f191f191f19ae46db42b7eb7dec9e565a3c97a8a347d973d1ebe151d7dd2f9b8fc81d9037adf2ee83d68b3bcca1d5a3a1f55c3187702c1bba6903221aa2ed888278b446333f76cea3e804fdc7a3e804004a5ce4517422867f1e452702f011ef241e002c8a4a62c0a2a8a404f60e002c8a4a2886615154722c8a4a1ead2ad3495018684531825610e8434568fd432808ad9e0fdaa1f5e2d08bf6b99a91721da25a7b91f6d178341e0d1838428161b00bde817958d7ce39f96769a8cbcd4777cd34fd72b1a4aafc45aa2265ed0c1fe517fc825f486e4c68cded4c738e9d5b219a9be99da175b264755db4aa486b63cab8362489633666637ac5e206334daff624bdd730daa563c4f75ec8eb03f978f5c843c969fea8e43d4443eb0b4cd22dddd20e3dd9b66992a4f648147c550c2eee9631b8f82dbd26751462c4120a0a8a949d804e669c74504e50665c4f5e3fc4a844057164830d0d24710a8b12222a1774522e175cfc2a65d293120f7e517486e118866b4cebf223f30b17bc03bf2061926eaa6a01bfe0170ca305173f925efb418c4ad4e6f2c226963deee3f271a1ed6e1a99f9b47c640051e5f591213f326070f123e9b5b6ad87189568925a8843b74c2b3c31bf761851d49f631889bd4ba433263d562cb8a437cb12602f5d327fdbd666f7885970496f471b2236ef71688b639aa47349a3fb6c6fd85893a5a0869d49ba049734777ea2450572c821871c10e08123606f2c01305a573269ca405d69342e6ed7f4901023d536203dceb4a34f76c151cd2d09aeba2e2e374483f2d46e7b33d6c46d738f46af93680b26c9617568c126a4b83a4492eb82e4dcf3c179605d7041073631c4b52e1a0cb83cac0b9b888fc69ac0d78383aec7bad81d36c6a3f166b4f85c5c4407752c1094f4ba3059b7695df47bd7e5f1fc24241534b9c8685054885189ea5e64a4238b2e42561a5838a304576d30b2e0e23c6c3b3f2d23331f1994816012253010ac0436216122a9551a8832a97d6674e09a0e044c16ae8dd15a1a0fcda5cd683db009f991f171a90e08198c16a3f1f091f1699123330d061059c368ad32101f19233ddc0e58044952e2728d465295438b10c655a3976c5ae10ab9371390ba1e772fd8b65d45af8562612866b06688aa1c2ea9b5105cd32bca0c56b836539180053820021458d1316aa404150960130b04ca5956bbaea9d23c50878867ed8c7bb1858df0c515ae908b77909a3162f37061d664b786c43c52c406aee9d116a416d363039494f00a949431338d6a2f21430c8c935ba3c92649d59336666dbcc01cc4a884ec5c273cfd28e985853f5c1d115c1574097185a8b7ac82320862132ecea022010ba80ee9daa0e8de982548649832445e8832a9ed0f20b8a6d7123208712d0845450216b0381ad580004299616facc9ae0d17cd1932da286e9072c715247c3b7c61a5cc0e55b8422fe551540a8b94aaaa3850555f905a6b1cb826d75e55515570ed55d553d6e4d197f2288baa4a717f92a650efd0d1870309db08b4b012451b0115ae108471ca865d52d09a2ca427dda8899a1cd5282d480d45d3e19a5c8b1405a9e05aa4a8933589b49d80d644a2a44d511b3d91b20743c4b34b3e7ac7131960772e8da4e6c2524b2b96abbe679461e10abdb7ac3ea3ce261caca8f741282828ac728f264579075e3a318f88ce14c1265a244d5c90a689634c2eaef6ed889858b836ab25486400a1b00969be695d79d633bc840cfc6287375d482f5628452b95aca93d29e8906159e4031ac0d4f0a145d1b328f26cb730c9d2a5d23cc2b5547a6c42468ea612a24c72fbea03d7f4cdea252712aea5e2fb2f4112e94a77bf331fcd481bc69a4812045a6681fec21724a9c226767549bbc4fe9e44214f4b7839793979397939b1765f4eac5b8fe65a56cb4b8f5ea401e6f42a65271236814c4852925e2c0974a22208e9c4b2ac130b6c26dd77c21c664d8d08d28e0602ebd8aca79e3e725d7a577ed3260fa30134ad28599d7f7c8f957adfc2a247da688b5ae593e9278e86dac99a48d494eeda49afc3a48671b6b386f7e913b60d93a2014c1357350319759f307815fd9e8b06f072f272f272f272f27252adbc91ad588b56955ef1152bda8a15323156440dc6f99c3ad28a152b56ac58d1de3587914c3641687d6a958e91d6a944d2780c3e823434ef260dedad6d8e924f522b22a3163e36095f612fd86c3a99fb355f705d05b73901cd39ef4983bbc65d45c7495ad874179d9cd8744a029a732e6c1329cc7de74435924ba83b78ea13ab9d8c3af5893d26a1bec124438e0e3290c17b345f70dd6134444cb222287871c94ed6dc207613420aa27bf0ccd46f3fbd4fb44a779fd1a757a0ecd4f9b0f2a747d8235a418eaa701645547ebebe4fd7955c4a55389b769a5a94b1987ab6364dedd324b5d63a4ab1a1a7d6d19be48c7f7cd8f49def8ad8be3d62fb87b5b7af06977d625885cd9e0a707f190dcfb5a052775dd9683649ee04c24be38234440bc141c8cc3c78cd6c5e1f888c3a7fff7807c1a2a8e471b00d959a936888a2926bd7a5c30b46c83c669887c433dbc2332d140ae6c132cc83675a9807cb300f9e69611ecc03459fc0215228ae78450688b2f678ae85d4151960b3fe290edd8f8ffa849cdfeb51d4e0540075771caccf47f04e63555301d4271cfa443f3944a43dbd47452f7a4c69b2feb63033f30cf3d8ccb4b4b4b4b496d65a6b992c3a5a7474668b8e96161d5884009610ab2448d860110220f61ecf6bb0c725cea9689e0a781a8cf30a03f9857d9070b08f974847b4a38379cec1460e8285fc031389cd730d36f20a0bf985892c0246443c214cc2c11e97c07f601e2e8120d8e62a1804abfe815dd76c1e0805c50c4cb2d76017f62ed95b2d2d2d2c7325f28c11a53684244407c13d5686499c35b7be5fa736d13b07d3bc4fa7aa45f7d461559168083e421a726f59a41bf322b8321b333549461e11d2eb90dc50014f27ab3774245a424646464646c63d42402606739489212313039361aa326420cd1057bfca9035f32f13c1586c25e1a4b5d640281bc99c804e50da49039da09cb4d61c15a4934b7a50b2ce3b9955a455aa41d2ea2a3a9a559aef11eebcbc8a9ed87b282727d0876885ba39ec0e6cc2440cf76e591d9a45a3d16834dbe16c56c5e4d63596d168341acd898f7fd00f904fb4be2e5910caa19b6f0e0f5225b2386ba87eddc2368b1eaca21c38932bd12eb39643bbe29bf50bab5ec3a6ac5b58844924328050f6d76ed8ea41ac424a8b6026c992a248b2a2261966214a4d082988eec1999336a33654f2edeeb5baa3358299f6f1b95b8f4ed11af1427e5ccaa291a22148cfafd599abaa3d1aaa2e2b4953aa943591a87bca9a383751555555d5231611cca6442c526ca852aa884594624355a52840debd611ddfeb92ae01dbac61138d98c4bd5f70d1884b2605bc68bbabf80953d1f249114cca353df05e2382b4a381c03a7e681c3fbc745ae7e55d8f11c38ec8f4918a29a4233a9d0e841d08691475206c1dd8ddb9ee2e2a7540dea9ae815c029168e7903a47bfe4782f395e72bce478c9f19243922f5995bebb2bfba583f054951c8de387c69123ac38a8e4ec198a6aa968400000000033160000400c0a060363d14494043983071480147a9e50685298c7142589410a19840821040c1010000100121200000db1da1b6931cf903fc47be11cf835387576b7ac08ffeee476bd26af6401ed9f15bc28a363a326ca55347ce4bf19c54351c88dd2cbcdfcb1adfc022a5e35bf64fcb1998a91447fb9bc3c943705b2c06a15cc963626b6325392fc1b62409129c8f4a37ef507dd4086cb28876bc38e875f653ef9b39c3febefdc876815249d5e4f52bb64d4517bc9afdd006a6330c02b136548463291d4951f9126ce87a2662fac01f0fc812a370b94268685396f934703239b70d785d4ca92dbc6f2320e909e3447ff3eeed5ca276ee4ad780d8a447751815527468cb0edfe99ab51a14c68cd5a843600a1c5841970109a9d45843c3206ab4d7e3fe61a1429e731945940d99249294407e1e6d25c1a7e8551e5a1c00705107a36b1a87d14af5d1be2e1cc0210d55c1b446c83e61476edacd7291d609b2f90162f47967465d36b399f77d5219f88c17ee28d07d1fecc578e1ca8729550bc8d1a15272fb26405669e321927ac869d77e16443897755427f5c5a6c0a8461517bb06d0ced04dfb456c5cdeb7c3518bf01b39cc1d26ba5b00e4391843de8d8019f0546ddfb1572194d6310e0fb7ad988cac250ba7cd384f612ef67a40fb21c1c659f39587dee1732a735f28f89dc4274bec86097d90af6f8c3930c0ad9382378b4d273c34d370c7ce3a77198bc268bf3cc053293c0e4a98cb89799f42724d6adeb0651b7273b8d3de36e163d282b1e56987a8331d2b4067059088b1c60004eddec21f5f1eb586a9dc1da8cb06d37b4e686d69bcdeb1e49ff685efccfd64ba74c9a1e2b5ddeec4844ed499667ba016cbdd2dc31558edbe681a577c28066546560a3983b77aad7ef7f9f47b75ec6195377a73e7e6168f63601a5f83c44f81f946f770b663875683fe5f4682025ce60f61159c5cd1c5b891069fc5361375d8d2606d357be57c062ea4cacc3986c98f939dbf1030c2ea0bcd6a7a94548e2b90be6a26725b1b90110ccc49cc6cc4fdc6dee4a2f98f6bca912937412e5f2606858eee0d44ef21fd0b6a885fdab10db6ec3ffc27f4b5afad5e25bfa924fe1d1eeb25ad6fd3785666d12626d93d6f3ef2ae12abc9bb2c9a0036b7731ca82b7c93e4e0489273c1a69fffcb41a2bbb9769bc9ecbf96c3d1b96e76db1982cf7a6df66efa6c4ed9a4049b1930d1fd307e74729f621711e7b0e44e329a77318a1f77cbea58361b6e2740eaecc1c419bfd5ba474aa6bf0a354d32e53c8b94083b0a2e23be2c0ac5b7686269730bedeed8123474aed9a732c87af4230fab334a7747618b3fd3803e8c72a827a93e803617f5353a83df5be1f14e6d7756b1f3a40f4fe0f283ca3fc61a5e468ba54fcaccf29a4a4364bd3417a813bf869cdb61b627a448378b4e517f0b2a12e461b6912067928433c51d60ee8f58728c6e241b99e634bae4c87cc946fb8e5dd9db83cb14878a889236e2ecb4cd78d669ee25fa3583774ed41239805c4b3f683793a0af6d44f6dff93d9f38f9009192cecca2fa680c6362aa92a9502e1a2f22ece5806f2026093c2e5640102ec0a1a3cca301307130497a3cd3ec8207861efa00739d99474a72613014fc23c199d44411426cb1d839273f023dc5c52bfc84ffa94f800146a11c4172683270df33cba893d842a6e3f5c76ac309fee12eb5778d59133985ddc7ceccac7738e6a5885f19647c8834b382d98292cc0d220efd235b0c9e5eed18448a71ad4387a39c5330a8b4b60fabe7ee5bf571dc58f7e834c409525ce4f42667da7c27221a762cf92a24297a361b9a1c08984916838e2b90ae59912e0328bd177f85cc6c0105fa358b5cc3c3ec7c7ca4cf5594470de845c2a0bda887bf06b102ab4d4546bad86e73ea22a8ad22bffec041e056ab617c9d38c9b9ba05f25711c0113483b8499465f30afd72d24562e5f06ff0c18076db2e1625fd1dcb10c47150ded4e39c172dd361629b7fb8eca0b11d6ff5f753a012b07c06140bb8a494fba4189c3b5554bee81c706bc071d086eb3a708003e46027566d7a510c4a32d350a32c38d2f46aa1d0d2f1bc643b728d2625b8e8dbf60560289cce997c8ce84195fde66df9c44e86bf465662a5e14dc459dc4bfe52e5e35a71acb79068789269c5d9a6bd569b9e2fa954bbfda3b7e92a3c0a0888860d87e82ab987299250a6ed9f803c918914ee886524999c89e62111445b8d7faab19c590f20924bb086bcc8fc13925662c0885885f90b4e01d46d27e9b9728930040804427acdc74a4a000565c9b193cd6016b1c729c20253a5604fa73414a179d42a910790d78f302bd44c1c0cb72dc1dd8735cdafcc34ed50086570360f1d14a8e1a859fff88a7a67277153464311d8a2e75c261d5dfae5a72f5c5ad1a1d43f59606ed283536914ecf2db04056886f6e4bd3408392849fb84901059003a3b4459ba2c28939b05730cc5f4436058318e6172691532d400f6b62feaf20f6a76d4f2f3845f8210b41a24c9ab3a482590bc51a84a846114b3c18152967b7270101bbbf62f1971d416f15e3ac9d585c195d5087ed86ac123629cfbc3ca195da92d4994a981dc975b6d16e641b2f571d5b54e4c1a6173eacab89b6092256cb950aaed94828a0c12ec871fde102cf8e24691eb3b8d0ca0eee9928a4a15c1367c289b0c113d447a10e2ee0e174d840631d8f7e397af6e3474cd373ea18c56549b6b02339a2ff69a0a75ec7d4d6ace58921fb64d6edf0cdcedc22e1b83b591c4b07921c0a8fa5461b164ad7fc22b7a5ae0544a41ce377521e928572437ca884d9b81cf2b3ff2f30666aa34d8a5950ed879546469101a2802699c83c203327e98a64aaed438903521d9fd124d025592c9f489c1b5e4c747e2443adfe1250764ee434648c0229ac589924c9f210d2464df0499c20c2834095e9163e1108858b7d31591892b7099f16914ecc032871a3032640934c2eba4a3edc7cc1dc220ab421e3ad17b432ed53cbd0e2fdbac8dbaa3e7a2cf272c99c8e07143c01fe0701551001935d972a825781d8785c1d1346a9aad4bcb500d13ba40c456624b6c004107b369808193e73f39c78c46dd03938e0059787ba87e86b6d564c748e68c2f56f14343c6280b8f1f0f27ac36be9810d3f0d58457020c8dfef9eb903865bec315982a9d5b46f6b8e4925da7a352aa46743e069e32d3c411bd5047814482e8fde00644d8d760ed233383ae1917581a52b07dc8a6580d3209abcedb4f17c283a1624acba2be17705ff70708b9529187591b4a322bbc550a84255a1221dae3a5b04d1b96638a8ce029b034b28b178fef4e96d81b1fbbd76f382d6e44afb3d61183f5ffb4234462a1f8cebcd048ae1440d04cdb6839b90fe044a95adb1cec8cf40c57e6bd84988c2eacec3d2704744f756958a6d09ad633787d7c0ff13f3848b33feea64d5008f18df8d9390dc066319800e12aa7bd3e7ba36dc7551d27f98f6245b9c9ed67278d90083ca3f84a37c100bc90261720e2137a575eddcae26cc9d63d26c31b75235e251eadd563e185f179270e2c18d9a0e8a8a79b03f30f52d51dc338456cd42609998c83eb81ee6476438ff07be23f18e6254cf8ce2a6c5cccf15f0822815983d2ba8f2224715e930ce1a20afb895a5f6b02f1a792c4e93e2bff8c1630255bd8792d24e16b35470c5980919a716af5ad41678280d5dc21345bd0a12d072f99022275f5d0aecc225e592a7be5269d3bc4545fac58c2c61aafa205a0feb619aba5f6885dae185ec3929bce58376b47e323d290e2fd4a16bb5b6fa341986ae029465dd54a1b9a6da4435c59f6dba278f1c8318c7aa3dab486e8bde7e6d5aa62aba853d1cfce5769103ff4bed30b55017e65fc350b60f9180091a9b0422cabc2b89d1e77ad433a05f82dd98e331327455878ba59b60c0fc29df10b2b9024beb82fe4c47769ba127d6477dc5f0e8e7580da6a7d61419224b441f12ecc69a907371e27f55df27a1e81a6f077fdb99ae83221c297ba593c5e6c175e98359ca45c18fa911d3c898a14bbd217c094512a437616ee7c77711cab3b778609bdedd1b4bfca9f4d6e33d9a4b01e05e9826289872ea41f9ddf3d6aa5be24a94e0cb1b4a2efcb9b298fbcd9f1b249ddde7507897253fc4607f593d0fb20ebe865f04a4b417a9b7609480e6e2582fba781871718ef5fccd0d5b18811f2b8746f55080ad0e246a06c8a9ac496bcf994da5369d84ceb95cb9c6bad4dc07d33d2126a90e47b8c015fc0dcce634985574f7c7078ac611c52343ecc1657b53a4449e2c8c3bc55153d0b320f2730214b20a3e7531d4a965dc101eb0ee38142c69af2ac49db06938061b9a8707df3d95123c3645b126a170452a013ae318a164a835b904248d66a1d856048807d598c67f4046736356df1632c45421fa8907b2205a9173f6b684427325ca9aba322b8e45700d98c1465fe81aa5d22834cd799c463f9c2cb7f11ec7035aa591d2b01d0ed9bb4741a1508fcdd3e649cfbb94cc6a4603231dd2cd87552aff2e8ed4ff0554948be6e9bf892c5afad1f81144e0192d50de89ef12172f3dad380d4c36643769470c167b20110d0490ddfcb68b37ad2e0cc7be9ea015b2ab10cdfde5f918568704cf6420c3be754030a82e44e9cd779b5143ce2b7b97df0ef24a39dacdbbe5db7e2875c0a63f4a0e9246c19b5e2a0bc1e6768d902f5ac759b94b8bc628aa2fd7a0e27f91e7e28a3f57472c42568174ed3aea5466ba0d141aafbd08fb97f33d1c1bd6b078906206371e73945e973074b2ec2e704d9636e939e86f59d4786d70b95d3aa7a717601a646954c6fa29bccbaf461c871374295fa69b0fc6481dc209fc97e95c3123d8efbc529411260adc03e0795102dcc59d4c42a968fc44cecf7b10b7d4b6108e859658964e79c271d4e80d8c44d085fe2b412ebd911effa28dfc176a3480f946030c1a1130db3060e8a5cbd6ccb77dc180a599aec5c42fb9e79ff8f55f96aa54d10fbf64301c9785bfe05cca19cf6777d5cc024f66a4e0ae9ebffbfee8ac50b0e26286f757f2cd690f8bccdd9dbf1a521152cc37844cbdaa379e2eeb9219d5bd12aedf7de2f1628f7817ddf5e5ebf7652c45ca59c35c1523ef77b56c5a63316364c4cee28639c0855f32e25af5b01726e83062019fd603bea6dc99461ef15fbf0042c2a20fcafb254dac172d63c07af42277d31de8a50580c0a9477252910b4fc2dd04a4f40d1a97d7ca346097c75e63cb9e22110b482ce3532d7f065fe78c6b0d9f3aedc819a82ce65ac62c305d66f884908de6b50be2bb6c4529a7a7e1c60c29872d564b1f4bb973e00512f7b5187d604e74f5fd2172cd3b614995e3ab85131f7d4a730b5ccda2aceda7616dd062fef87526df3efff82233a8034702f07a86206dc521052016d236353802e0f5110bb16d345cc04aa921731c7d4302c098b30568419a273fd769a2d2c3b2e00eb671605c735ceaba0609f9e2920c37a366d4c2913673d03ecdc010ada0f9fa9210625d90bbe4d6bf514c50eec9c764287f1d6cb51c125ee247720402991129e918ee5df442e6ed64bb0480977a6a481fbcb865eb8b22066406ee7993fc4b9cb55c88e597d64358dce73541d5c60598c7ebc0f66deb1adbcaaffe3413001a5b8cd927140646e0305940e87a98a96195ae6a0cf2d2f1cdffef1a5c5853e4472731e67e129078b778fa65a362a443369bec1e28286e1c1497a69159243b5c8431079357e5eef6529c85009648ee58bb520caab9a10ff5977df54d995ca6fbdf9c98525781428c597510856bc8a7f4854634d97064a8ab2635e1996ec44258963c6a2d061bed92d12d0a75e8b705e8a45686a377212fc1d0d81f4c0568e3076326f02cde46b1197130a175395c4af1ded2685c9227043a3742132ef9edd7a893f7eaea605048b086f37e296080984a44de5c391766cca99e37cb05be387647c007ac8cb2d8b78a5083b947aaab72986680c42b41a5fa4fe9aeb04d37cfd9cfd216f005e2aeeba6a5a5b72acb98cd66293f03ab5effc98f70d5a114348f58499d4e99fd4485e2d20df0204e0a85ab63366f5a2026bcf5fe6a0bad5e00ac2b49aed0350c9900faf24452c6fab8034e71a54a430614428b080f70528346456c4d3e22663907e95c2f8dd76f1038bcfa802fd109d202d1aade0e3ab940f488830c97e17524d568c782c0956259a7b84ead1d1c6698b67fc001b1b721409fe8c35ed5b21f8d9cb71ed728f68ef883bb7f225aef60a343aa106c73acc476722a20e371b85c4ee4b360ba5731a559108a58f2d1cd2c51d7f9e493708981fc2bf29fb70518c63c133dabd53630dc7695d4fe5e13ce216789f2055cb33e43a335a6e624ca2de3c8700ea9463922eab08590c281c517d9e73e37cedf497776e0dfc8b2374decca073d9f5da7bbad3c8b45a6b21b65b79b35a8d15c7b06c961e822639200c2925dfdb168b5813bc251f22e6ee530eb95cd10a295ce5c9cfedc1f2e2c718f3b45d82b97cf9db3e9751817977466ba131e37112964c00f6cda91ff4cad0cf45a813d412c2d39c128380683a40f2761dfdf5fadc4e17e47f876bdbffd1a92764051bf0d32c0f4f1f635eaf3caf0d2e81ccc26780b9e57443b8914360ba4c9700d7788b67d8c346ac2940e3413162cf431837799e80f2a61d141c2fc41beced29b0f3dfa8337e18e7a74b89f809ba6336df23a650a539cd9c41f8269461a3633c1bb15a8d9d05775aec94441586b7ab41e34d51cd809ee39547ace9e502a2d298e79583d984bcbc871fb9a15e797bdf081ee3ffca60e816d07f52478df161781dfa57db579425c161dda48f37a824b9c841b1eed767f0f72d81c8b5155a68c26abddd9a3eb59deb68aef2564120887b70a276d0abca538efdf01bd10b2df9359b47c8188f4743b35264202fab56348ddfb6e53023d254120fa423bac7b932233e04d81987ecd36240f8b13a51ba5a5cf90ca1da5d2db859b72b5851a69d5cfc796b5f3128a35dc5eeb4f7cdaffdcaa2a67753cc62a724499c7f30bdb5998531235a2f28fb7e82aca7cf2f6f66963663a0f0bb3aa6967da43284be65bb67b459355d505361b56f5de41c00d6bc2c0e1e50f2e69670c6c2510b0b78fb2de505d14552718de048154e25f15ca5d601d4e5709152f21442aea85d9f9ecce541070319701486a5b6de6d0b68fc019f4dacc341944d01881f35dfbb5db15d5d536407cdd48a00a08f6722fee9da62ca7d5eb1f79c062e37e6043ebb0d574a2157687047865819842d0d54b9755ae819d94f21a74d49a11cbf1fa7f46c7e4a240790f0838fa277ee526300a42bd639211c5c897e27d3dd62f0810419ff91d736c7705543aa6970b5906a00f0528c331ecac3d65132252e5cfb738d22fd61abe59fdecb47f2625f71c0a7a4e8f2a35ba319710dc1bbc91e45b3cae514b1d35e92474ba5d00cbf58ac81b316c92c046a737ab77ba3ae5f427f5f99875a840600f3a251889c06c69b35dd93c0748abf2d840221e175b59575e24a0502379a81d1993f2385c22cac6ad0352c5a7b4569fbc8f24e33068b2069ca51260bc83841394c7c70377419c695a2ea57830fa920697fe773af9386104b5867e9fe77dc031d23d324f5f103f8918cc0870c65745e92450363c9441d1358a09e980a3406b492e8b56034ea45fbda1d2a39d662d89f30571482774596511a76a216c787d110b0818357eba85301346025a85bc7510f7db4326f8147dd948b7990e1c4d0f417a6773cac38759b84ba54571363b141db3f00ef6391e817846440e79bf8b6a345e785ee7c1c970c7faa7a83f169aaae45778fa236f0910ff93a9ab30b450b06b17c4be38edf28ed54beb2dd8b400f4d7149ed2491f086bc73bf4ca10b2ddbc54e0bb7a7da0f31ac09ef3918709c175e124808a3999ae3068595913533fc596adc97de00fb0fc60127713d3a753a259385247cbb4a8d2f3e9e6337e04743302cdc05c3ff120ba03b172d83bad44bf9d0c43e2d14fa5a4dbe26bf3edb7567b46439cd5af8941ca941c9f00a78bcf12fa5ab04a7155f7362bb1d7d70881aa6c49d6a84fd9d7bed25cf12b675a580188b96d7f4148c032769bafcf4488e9a22aee8cb2b223aaecb817e44fcc186499da0b442d045c74977a0182d657194a57d0b79022689d5c4032cef9c47233adf373a370598b61083019a09061e14381e7b5de3675e5951c2284b91f1d536c01a96b80d681bfe1c7342cf8aa13c58f7ee588261cc62d72ba03608d4a6c09017ce6178f4d71cabe992f1720ca6ad41ee7e1a471fec179d122fe70ffb2ae91b7122f7fd03a19eaf171852a7f2f01df6aec0cd211715f88ee26c417bd4f755bcdeb6bb8af7f11e21d23cf1412cc40fdc5249fb91718c328fd791f021a569ef2a0b4360acf1cb30477152e6e8960e73215062a5469d683e17d5c9dd428e7617b9f2b286d873a30aefa9616cd6a50eb45923b145d2dc181656dddf352848363793099ae70b7d148f076f75c876e663d67aec832da9acf9cc4e6ff47042b61f25341ea74cf75e05d6f6fe1b2c57714a9ebc86bb83785c384ba7f6ffa5ad508bd56d661077b46b122abee5efc7d17928b7d8c9f438d6348344fa852fc7c6ebeae4ecf73f21ceeace43f09bded1111ab9310ea9d110c7aac70c95693cbd679cccf2f415fa98a68d0b977d788049a2acd1b32492184c7307c59bd4ceb7938e29e7f2228d807cffe217e8f8425042bb7b8fd1d39c1d104835810ee85d9d002691ba31b315d7dbda83c2488e9998caebb5a8214d5686eb343db95293110d5a403316c62a68805c4b110a7a0f58cfefa6795f55139d461eed8380395a36a9a81b5bca5745838ad69c8a773c5dc9bbe52cf4f41d968357383b1011eb6c8dc9206c453698d6eee7df569dd3062ed606c41201d3c9cd5fafac35c041c6dba1639f679ada6a6050387bf92da6283f65a6b492ad7352d0d6e60c07e82d965416bc58bc7fb9c28b32c53c142aeb741583ad852539fc8ca7dcb6aab73d58048aa53799b4e7347ab61b99437722dd893b3ab8537192d0b48e1a6ea5ce035161fbae233b09ab3d7709a692144b7afc5c086b75c710890652102ea8103c36832e3af03f1a3675ed4f468492037845fe500071d6c78854ce9e5035cf0908d42af389a7279857025223b5129734086d9fa073e819f579612be1088baa747ad6a04482593c80d7b9c94fb329b6b584a22124b0b8f4c8f1754d2b62787c9d45b2802e99503ece3524a8e6c937ec76378eeb205aef19180759a8ca585e650cbcad607ecd1e2852e64c944555872de4aa72ecdcf75e070ad5036d5869c2dd6e69d3a49d1abea0ad63e0da33874de31e7be95287e8445ca7d1f21662b2b521284aaea96060b7dffb2c53d4b48169ec0ad79ae4ab61903c4b52ca4c9e5b780fdc11436f720199391c2a152609634fddad933ba2e5d9a5cb2b9c74df4bb3d24614c10bedf6054156908f7ce0a1734fbe00f94669951cedd5f840e9e35115584c20f83b5c32564db895c83cec66dba0e755ddf7a879263f8217269f8d9b6dc7a5eb9e036e4aeaf81376c352c9d856b0bd0c5da5e16f240c5397997d0f91c03a11e58117ecc94183a38bd9c499d58963f1ab53ab527f205f30b5a470e9071a60c26fc104025d13332bce4fa8612fa0c08a5ca40c59a974a74b6cf415cdd1ef4d8ad139d6a698140381a0773843e1ee27100ee834271691c36f6e5fbd533154a520ddfcff167b6814c80cdba2a4d5c8046605504caa6e68f58fe91331c6da7f049c47fe801a059685b37a7538468e141101b320aca9b15574e3cb40c0c4f63186251d7b357c14b3939ecee0e8b06093368e31ac552c4beb14926cc567df061d557efffbc3d23fb9252ac00d98eb3e859f0ca224b49332b42e8ad5f48ed5e310018deb12e138838782634b0fc921322584eab99d2b0f64e812cc434af76ee9183d7ae3b2277bd1c3c8e40e38eb47153666be33b598cf20a631cbf7d4a33cae5df5ad6663932200ad1ef8810274f2f74158630f448c0f2784b9ed7d4dbc9246b781d75431ea1d5b24b9d4f06c705e26ac1564fec6a56dbdd40971d2ac5bcb312d1e7df8afc194644949f963aadb5179e486bae8bec3d3cd9e7f34eb9265ba15ba2d418d127d10f5bf6932d9dd772127c402861284d219b9a02b5604c5a63d229ed490d86cb65284701284d66da7ce01061ce67e57c776ace4eae8ce73b12d28c8cb3fe8c68b93760a9f0ddcc57576150cb9f1be5500aa1ff19e29d507c00d304cc259f8f78ca64e2d2a3a6affad81ae29f5e02a4a75b63452a6986e01f6008e8bcd2425c572da25d6c9de12654d30925c0211cce093df0e3306b306cfdee61b9b6563457dc5f544e8a4313ff58442117d00f965f4caa82632ff86ecb928b91b573b826a911268bef3e737767a7481fab72c8847e0c91990a1be7f9026d23a8648d4b292ff5d91fbc31b16447092b4cbdc11869da3331c873b4162775b7bbf8a364dec86255a0898a939af086951ec2de9179b13fb1d9be0c61a2c27f443c80bdc5932ac03d8e54f63a32251a1feb1ec64926eefee9c00047723f0405248aa58a009480bd4fe0789d28fd2c20f73ed4cbabd2cedf5bd6a01b5d872ecd8ee3af1c63aa598aab739ac6aef0a472fc30db39c414fa2dff521daaa0a0f16ce0791eeeb11c2691c14613f13c0ca4180ca0e36a6a241c6bbbe6aebd2969cc32b67a761b52387151423981010abd9a5cd265b48a891ef8d669b78365aa825b50ef0e939e701b2480eb5cdce5d3f6a0dcc5b40b850db4a85734abdd0a9c84638e01c9abbb63ff533bc2c1795616ee0a794693855013eb5267093c36e1a8bb6de3fad2f23a9a4293348659ff86d3485c371d42514626ed59909cd260175163186752c5c96065ff548d6872f9ffd3938d5920a0f9f62478ee723664e3e991c8214584d5497ec0680e9a1054c7202dd8a91af6639130b17b8287509d6b2b67a4d58a99e06ca0f8477d7a58369728625b20a2d9b34c75e2325199e5a1c95832279ac6afaa0b26fdda0a29c844e387a124e0bed0ff36ca615e4c943b08dac0b6d81b052e61c2689410f71d1a73aa3a0d98b497f3ed46398ab9e50f117f6c14186930c421faa6c36e027e783b7eda66e846c1c1bee85bf4bbecec6edde2252172e9eec97e1a0b4778979e17bd7cf3bd7ebd22c7cf6f141bebc51966ca6b614356e2fb14f68344ae0b2c0a6b63567476ae568ca02352381a4215cceb990014507c8d8fdb72395c10c2241fbea96ee2217e1c84d02ec5b9ddc3152516ee5e8d5db8f8912d878d80be9dd40996af48fce439c096b3f8a98243e3fc5a4dc5e3de5e395c07dc97f1aac471e035d8e2bfe15050b82d429cfb94ba3159fab44c6ab47da0a85250d7c744106e30173eb1999f7c0aa744e1be5c48bf9a7382252131af09378e7b30fa0dc931b038640ec914560898d67672be58016b46744c26f40665f62e3df19d8e06c678596e003970d8ef27d4ccad6606c604fa35ecc1307b6636dbb9e2e0bb2655a2e6853da0405b46b34c8dd896efbfa8232fb76ca72e9f81019cd43b90f17258c83b2647cff6edc9482c2bc70f8f06f2b5f85ada409645c2004e4467e860bcb94d9515ad6ec6bdc5805e64fb61d370c78d8521810c4beeace647044caaa1029895bc081fbf144429cd43511a617168e6c284f59637c3e5a4f5a54026c7b41fc033ccc4a5eb3f5e755bc53c78a242485470f89a75d3886e3f3084e2fac63687d909301750909e50ce1d032517ff3cf74394c0745fb55b9eacaea755b49ce3d7ffbb5006e772e44c515634ed070b3d17b12ed00bc804250795e366acff3eaca9fd10253d85a7e42d910a04aa4a9f6e4b444ae9ad38e8aa55c7c98cd28a62d77d6c2f8e11e68256145969a64064afba6907db245101e8697c7ea13ddf006ba009a0317ad1f13b9a8b8e093295b36c4c60b63f69201bc9f80b0dee545dd1424b7b5c6b9e86083d9944eb657fb52d3f31b9cd685fd0dc7b1569d32363972af0fa79f9eb594703db03666a0df809543a49cbafff6ecca44f7c4b060b0b0e26e82a14450e01fdf93721f4426f6f0112b8c6f142a8e2b36ce592b71722872b97f087e6cd032de86d7d37ad077239ab59cc4fc1fab31b1707b3475dae35a549257f9ffca6c91803436d1578ea785983009fb0ed6a260a78a369808e7d9443ea72db6064ad3d81dc570c439a75053eca6c2818f64de745bd038118e9f8ad1d9c121d6b9692ec03c357664a032601f14977cd42fdf80b1ad8acaa4c2fef26abdcdfce576767b43392acc642596ac0d703a36f703bce422a882f09530e5fabe2fab72e532ef80b191d9544c2ba5945c7e64bfef8380d8443a19134da2ec89c6ae51d0a3958137b6d373281bf2f32295307b6910cca3cd1a5017e41c3aaf4c86755dfbdaa48c63bdfe69c9cc5c19f4f2ffa2ca9a13e0bdbf65915d7dc51f9915df6cbaa72f5b7ac449d7631252862e91acc5bdd8e2c06a45add2858dd1ffaf624fc6dd02a309d596aee95761ae64656e98223cdc0a058aed3088c39825e494cf737f1b08f64eb123768dc17677965a736bf361b6db278bb5b94670f5b80ae3d92b718fb3257f07746ec6b973a5b9ac9145aa4865755890c7341e800c2bef8f1e94018eac82ecf5714797b646ac8d641daab482d364b1d96ec139d535fbafe990274e5c0906d33fe54891fc8dbb44ff5c0a70d115368b53bbb8bd97ca1526e082e4ff9fb2ebd9c69453fac817ad70a4e6d6fe3695678bba6b33bcd554e122530a042b391a5aaa8b7d842fd5cf6c85a3a48b8079ea9f921872464c996acf9291a799a62506181441d713e408fc49afa6cf72a5bea0bbeb9eb092994f6f2b7b61258c81d96b3a88e3c40159c42fdaafe69f74a1270464f13b9895f265ea42135da7d756f5a0192c29fe74a98f30f14e80a86f84bde46224561f4c6376010a0921e57ba5ae7bd5cc91f91e90255533da8b6ce3e53c0f6b61d4f8e97b29f10f32940890ab7eba61b8d8e5e9750c7ac36c947e5a273d44911cca3855801e7aa0587fd597e32fd84d509a7263cd8b877eab153a602ee62862bb0bfe81df77db6c25b1af86906910bcaefd65e5910a14f04694e004afb59283cacf30e35b8502fa462c6332bf3b8eacca80600a2f5c6f9816f267960f456a5cab919703c4a90e7fb79fb246cbb2d306a94705fa00caf84fe8f9027d24656a9ab0f5f9a8d4964c463a0af65943ad80b8da53136f2ba348a1e889df41c6192d228c1f7dd862d0cd2a88314ffbb0b4883176391d5db90df09755b1a78ee44e57cd62778b075977a671130c4c442f075c55d3d4661056262633fa54aef6e3211cddddd7f3c05d1dd7ecb42eb713723133807f5f0ccd79c24e2a83f2c61c42e6887d4ede88567403e3fde8731127c1c40114013f38e7471b56192a7351237a6cb9a8f5bed52c507d1dec36719f7610f6cece89b34b29b29f469a8bc064aed9028b4edbaf02cd3f67e8df868b0128c721e38a1b878f6c111a2fbd5c6eb20860ccac7d72f6e4522f76c5b03d5f83a46813febad77e7fd3a03f24791edef1224963674b91729ef6fa7a65f234048f206f0f5efbd71e447881bb6ccfe1a153f2cbfee84d7c0e48bd015f95d2a8faf1f31fe37e185c6ba7ea31488f8cc2c5339f144c02c5c022462aca0aae16111cf4ab7bc363f25a16829483a562f48d811320305c2a702bd85d25e0ed2ca9e55adf352f9c45bc1eec570d7ab822484329406b8cd544ba7f6164b817e25f476c54206218db376b3d2a59bf7ca72bfb6223900c96ed8f764596fba8e3b03ded4f924626b7a8612765af59ecaad4d60e18766a408d48b8750e0012f6f5a9b552063dd685012b59fe8d470a059b4755db3f25634f0a438082a947cb09b1ca8005ef53bfb2c673ff9c91bccb6071c4d96b1aee2b2f8fcb05e6223520844b0f92114109b492f0f798345417a3ba0108b57da5f5025de22c44c2bd53e8fa66e8776e99aae07ab72fddf0aed78381e39dd60b3d5bc140022629c4150e5f2c9bd4f5e0ff5d308a36b6bf91809741b0b246f9784768b071ae995f18f5524645ce2e3388b61d7f457f1ea0fbb74b829aca1c82f47e2c1b746477f3752e24a1ec4d3fec588af7437cbc54e4f15d30e55df5344fc100bd01c72e47b383c16e097bcb6974ca55f163dac2fca4689e64d06002e64c3b85ca910541237653b1681805065f43c77ec9d58fdc3e328057a4e098a932877650c890c6537aa2d8ae022dfc7075232a87fb999dfca52d325340f62a9f6825cf2f57634eb1f2484b10d72f200cfae32bf77c95d2940048b5f89dbf461c5b0ab32b936dc8e76c354cb8bff1bb089dd4cb71fc78a25afd5c9b8194ba7cfd68af8251276571fab9a2a214409fbf8c4f9f62a87e9925e049594af8c21e92509189156c2628074bd2d516c83bd4c4329754cd0487cdf6ed75498e7bdbedc859a730a7f7f132646d50e024c7ce42491062123ab455145f3900626a70c65e9f71e78104c5177332a35d4abc3d3ca7dbb9c09967e326be7bf06889699c3f08f2cc57f313398a37072d7b775f3f907158cd7cf26e81020d1b79d8931741a107853033d403217af97f8643a4472b41e4124d7d2dd66e9257952e44c62b97a6a0a41018fc15bebe7eb92c6253f3d10249e4e8762d80598af47692f0408d88142698d222e0b7ea34fb48c73e554814f7f9c305f996d5cc9d74b3a5c7d221f468a5f6b427b9cd618792a25f97e520e6c2d9ff1ce8c6028991b3cf79ed0daaf5880af5a54ce2b5180b596cb2cb56703e5b373c704b8f813a66db036a332e2da00d2fe3965a789789704436f755ee31a2f7245368a0bee5a17a62a02b325cc0b1ae6119998d9a3fdb2804e401333484e4b67c64758bdcb45c67a1111226e1959b538b30b3e0a87a12d72e35d59f0893901dc1826385fdc6ba7b628137397a6a9304c74784252a6b688a83c70841333358e07454d202f735bef6d4ceb38b744aa22a1ae634dd144bb1d448d325aa4260ea681735afc3ca06d71ea5d44c9ed22f3dcfd797fff7441fb8a2bf7740d2a5b6dc4c7f31a5f0d12cf13095cba14982e2cdddfd3f2a76b98816ca788465737183214acb6ea27dcb421ae7fe3bcee22c953cde01c3f3bb3f2e6033c7fd4eb766c9248758cbe7446d78d7e73a10f144f84c6611104e4401f4414f9c2857da3acad1be29c1d53ff1c1532d70f60401f0c0be24f0ab2790dc11e4ddc24b34add8a1c1e4435f90db714d19fa5a09aae39b1ce2572d09e836e3f5461383abb633e12b9d2ef7b41688c59065e8503409531f40d1796593b6285dfc8eb796c680427881a3d1f3e708efba17a82072f08e100029d60020c1959abf46fec4d1e09e81266c34bf2c7a868e188b43e06cd1d00ba7b0445830c5a7157084772bd1d78a6f288d50770585704e608884f81084a1314006c7065e25d5115e19b2aa477f93c7c3556741b841365718e0fdf95a9e359d1815586752d249d50de19d180262c0586532741a2a5b23157cf22ec71f6434f390cc0bd9b964d5c4d4f771cfabba4835700121850592177247c56f333d78eb708a9ee8ef1db354817688a2d390f8174d9b25c900ed96c4bad95ad289899722f83f0c67524c93728eb379dda7975af1556017c247e5aad3200ed05abdb845cdb14b5c8d8a3209ac3abacf3b876c4330fcad27f6e38047284c8d36e442e887a87bc6e043cb40bfab7e74585fb28096dd12c42b09eb6f9aedb0656e75d33f5adaae573fe2df8af5b8ee3f9aa74358729ac1ef63b31217e589b53f3fd86c6e8280ca412ae09278de009871e1241406138638e82558efcc1aa810a86489bb6a459d46e00e8b47c182b42d536489f049499daab56448c33c9454c05a9bde55a23da8b2b27c01a900588b311db1f700106c6f33d05e8eaf5ca2af61efc0270ccb94882fbeacfdfce810ea082adedadc1468baac0b6bb1a08108ba165bc4f71707edd2448e3bf2c011fdcfa770dfc9851a347f8367394d507ba466f6b64562178af752408f4081c3a998c9c8f810caaba2cba021783b75df7237ad0bb4abb161403e741e6259ca8c83d6106b0f007ad5818999b45377e258539507504c0f8454a97748e950b6fba1e08626aa0d79286d44831da1d0c7c12cca8ce0dfe0fd426922c3df06a6d6aef202480f38aee00a8a8eaf49d5cf199a59b5cd3f9e30e23e806c22bbfc339c64e1f2790eb708f49720d0af75c330751384268f5b6e712ba0ee2a4288beef7aab2469336714dd765193976ae746218e6fc2b75a3f413b2468a60238c6929a5e9b1fe24813f95b8f03de93c79a522d4d9261830ca04cb7e35317044af356e6940161decf98494cd3d82a23cd4113e7c98b8cb6c9ed36c24546c1eadac466c83010cca630e1fda2b81446e70ea1effb5c114c93e88151203f4bb4e4c2e895dd47310c80b93c7d8db44d9d41860072c71219e7651bbf5d3f5cf6ca4d9c871de7e50431f87fb2380690704fd11ddefa4ce3044a57ab90e9bfd7426c61195644ff724004b871ea141c721a6ee154744cfcc36c85774c32196df919d473c7e6ae145ca47f29c38519553efc5386ed7139d30d2765a2d691b5e7e932ee224d24d1abf58ec8154682e1a245a3adb6fb24ab5c453385a4e3a63d46a2ed7eb923a86df782c74e3716f87812da472c91e04852b7f7002ada2cfa32c61561112ab25b45918a7c6c161ed42dc5625ff670e765e643267aa1e886971a9bf70c18df3c73bc1cf864321685047cbb565659a208c7a349398edb48dc8844d9f5088fb1d0a60a51e1d9596980b9fdb1ff807c03ec024c387bbf8d8c86d4ff4f51dce3507172c8b1c4244e16340560465bc75062ad451ee64ec290abb8919c0e257c886e8500b0d3042eb4bf07b45bcd25d5d79691469522728064267fb81d18eeebc05e5a0df6712cd2c6881f9f23ca4ef946af89882cd13daa03f30e669e1bb2d48289bc3796271efc21dec004c2984b3e3deb33a0b4a3bb574b7d300f7bd89b6d01c72e7d2d3b391f0c9209bc6ed207eb8fb03323d9777f1b4228e95d9572670ce165e71363d040bcea587ed209270461dc84439a8f8d6225f1eedaf5222f5e4d4342aae9993f1aa64e6c30dce482aa7582278cfb66b4eb071f258f163371561a1693b0866fd0a6bd1a87699bdeb4b3787d7fc76fb09b6608fde1886d0a35488b0866f224f6f1a694d48b3d2281f42700f1d847070f1186bc846c1e737d99d51b3a38778b9f417e2823f1702806fbb555899912ed4e5a0ca8147efe442f4dac3832683da8d87230e33e095f21d6265894f002272419cdd48d6c9809b48bdab975f0a93382c230d244cce03181b63590d6cb61785ecd01b5b3487db762865583ea813c696a0ef9718e79c7c0caaa6488a45a2ac8032c179d105fbe85606ddf96e8861a48f57866b6ac0ee0b04729811c33220a6a4e25f28209a2e29ab4aeb30172de98395774f1556ac756b86348dcd37f86915b4bc7ced33bcb30b56066ef96e6f4bd650775617a210074fce1adb1b480bfcfa40b680a2ce011676e4f34c15c16d205affc2115b4a1e58ab201264870a5fea983eababbe62e5818b757e1c7c03b3e71ac8d702ea4a24f4952b485f8f6bf21be08e3a3ce0ab90daa8bca833cf1eaf140880c6543daebb9fca75efba097f7cc69e12480f2f02b195a438f412ad4a64ce71f623c5c7fd4bef74793e3c43c7768101dfcbc81eebbddb6da996b69332edf90b2c20c1a8486145951f07e3572d1d749e93c3df877168d646ba15e596dc0b0a5b3b29052cfe8bc97130370f225706c6e634f56d78f48aa84be647ffb24a8884e7ef32f5e4362b2a12a173507a6c0d8e7a5d13a654ed687836489320109aa34fb96b7895f7cfd36845c1d4d740d7f7e3d97e383f6d1662ceb9fc3040d9657dc39ec6ba8e5865bc4902ec3ea1ded22f605687fda7c41a9d32c64d34c739fe709ff85b4c6c29209199951d6938d3accda101d5b98ef332a495f532ea1f948cfac70b35a97c6a9de484ca9f88753bbb6330ce796402b7963c2a0e19d89265961644fac5c4657a9c5a2f57f1bb797caf7fb8a93cbf7c36fabd577281f04aca21bb4fa03f3fb44b6df8f0d073835c4b9c00e783e61b27d983d1c0e3d98b69f0ccb3435403a4672fa9815626259326b14e2196b9be3c9f065c5e541bfc5baf006694fdbc4471707e5cf9563e8811c800f0fe1826b0edb1dffd7eac5c01d223446aaa790dfc1de8fa379035e60a7a4d3f0eafb19cf858ae34fbfa7c6c177a45bdd92df8b8aa1365c1602a810c60592ec3ca42cede09233a03bb118ed1dc8ada103b7c11ce0f5bc52d965a67cdbf566e8e48bfc5d5309ffa6c2b445d401fde66abcc420e08b80842014a027348ec764003d4d5a571f92859aa2d3cd92c24852ec8d30268466950ee32de8676981d1cd7f10306381c17facf004a75e3c8f990af28d3c93949e026bd5d0e106a5e22d300c300d6ba3341fce88aba86545339c439533635d23d7f366bb3c30dedd3c5a9f0cf582af0dd58ae02d42020efbc573e56566b5082dc896301f0865891a696e940a5290ca8ae72a64ef7b2f68e0579afb751e86b8081081d6572704ca4547c142950c4b799671e9406b26aa120593df506b429097b17bd14f69d4237c239106aa023271626005749a69420b8c1e4d1a64af4586598243e364acf86a96f2dc482727ec959787ef8709c37f67fe7047a27f03f821ce91c4ae6f8a9e976eda6481d3d334a65f214b12565f4e44b4dd9ca99e61c592ee194b5bdccbea48990d4a3e6b1812c7f4db00c7d220d7488276622a16c4bb8959d211efae018b3b150145347b0076c2bc2d440aee2643401e32175e1ac0d46e03c180288a30cf18d084c5ea95568eab186fd3076156fcfcda8c61d95a6fd5fa5158c4f468c4bdd8a0cdf3f5dadd98fd4cf56d990882ac2659adc70eea0a515b8352e55cbc216cfd3f2f3d07ed9d3961a8d2514c12d8424da5f64ec041ecfa86314066f4cb822b84038bb6e9c1e8e981cc9c32d80201f60b395fd2adfb9a4e7c865729f8aa2e945982d83d76699ac55674f7a45de18a48f7f79f02c95d05ed06a880df3aafef0096336ec9a4023fc518486b068ef272345e24b35a85bf250ebfb159a51a66c975b6cf99f146b54480cbb642ccb54be44fda05c0db63a35f5d1da873dd522cbdeaf0e8110cfd342fe6a04f76d9b94ca8e12525f52fafca091fb3baabe52364f19f4d8238de9aa34453cd16c97b9e6a85e295b0df0bdde411765423e54f4923462bc4b91cf6d5e746d19cd23fc15d63fd5becf50072c54214f43817e6e4d957f054cac0e9c24b93b665820ac208c3fd388df7ec19510e4884fe23f319ee2265aacd350ee937c72b738741737cc06ccc86eedbd1c77ea9679f9342a259a07934a5e0053225f32400cc6bc542b21965957e4edd091a5a2d3275be4da9cd22b0794ef65f2ab0fb34fec7a42f5da64f2540a3f0baf66f29fbdda4293ffe0bbdd6999689edc50911d3dac3c03950230fbf34d84d98e9e8f00b849bf9f7f9a78cba53988f3cfa3c97ffe0dafb10ff114d6a7e53f9fe64b370a7d690e4c5ff90eb69f72332aeb73e0018dbf32d7ec1e453867fa810dd089d743714388d1cdbf555dd6a7be07461baa16fb81914dd4a7a629c65fcc69623701afa5151ced1eb80420a903921115c9111adcac37c4d8940052bb647f4228481cadd93b6b7f226c9008a1a0139403b5a84a4c89076782c4468b19dd9fc87d9bf411fb3562d5429d18e0fc3a46a58629ed7870008e8a277d306fe67528c16dc4111aeb0f67130652e430cd5c9a035fa86f94a5a7c8b4e6401f1cfe55acc9219bcf9be5a485521116897f5cf538d06983ac1ca10008b0c457824952aad8e46e923e1b183d83890eaa5fe593930de4f9219cb9a84997d39e04ae69a126436918823a273b8b4293eaf1e7cc31ec558e252c7bae682db0a0e0a8d4aed7f591e90937a22dc916850669e32686883f18b0ebe11dd21a988200ca1d3bd2f2d4d805e35e61534ecb9338cc45df7fe7f1a7872d1400121f4405505bf9f1ba2deccae23f2015de635718b8ec8d9af27e676178fce24d6343f8020903380c11db623b88179a723e3df799ce186e592f7ab0154b063e27533a2ffce79a4d3bb7f044956152a0277ee2deacbd5786c55cc0cafa4e0c21b6b3ae23cc57b30a6ad04a9c78f733d4236c846ea0e5d34be3798a345fb23ed6ce9c41509f1fb2c130fe383cd424d21289cdb16f7543b0fddfbf68e4f619f70b6db8d77d89c83e547503d00ec32d0b5f74a2f127cf14280451e6c2f3d50330ef64c18ab92e5d4dc3a05dea43d2a172b1a6d369f9249f0dc34b890eefe7a89e50de7c1337e7dab467d0c7c4e7eb519234bdc7c39e30c573e0c2fc9e2497ed1e4c5a608f571d9b49d02f223e75b0614a352e3e8500821c15e2a8169d75aa17f7d49e3dcf5c6cd99ed7dbe311efb4f823baf60c463f6541d0c1cb0cc3992ed7b35cb3bd9b8eea10efb54baab041c39c95f533198792ff53f161f970d9e7d763272c9768f3ea7dc3fdaf6700b93ca58d107ac1224e2d71982e6a7d4f3bff62055321b123cb052d433e0ed0682e3d6935688a344f6e987156fe23d46968f26e32fd3164afbe1747852442f85e41358fc41f07651d6b8dd4714adc6ba495ca2a8086c375ea30ffa28c0a4cf8fd0c70b8affbc42e88d82f8a9eb559644b097c876cf11f01b472b9dca501f4dc945f82806ac739b8df1a3ade6ad9bfe9258e92fcc5aad4899ae86b495646f40259a0a1c890968fc9ec0442fe42b466297790252475725727b13587f50ed0d85c28641f235aa690641b15e9aff757eeaeec12eca4bf33e753fb84e3046dde71ee355074ee7bcbf3c8a9bd6af28d6f446b80b7abb929e4b800a261f399beb1eb5a1cbd44767a2914798755fd611f5afc6667d0b9a20b6b7739bd46dbcadc42719b5a72861a5a041f50584eb392151473dad296466827eb8d00f970c7185c426b5bcf52033fecf822b0dad49b93b04baa7fe58514108c2c0fdf49880dc0200e584061337111a2b37e70cb6981605a2ed8e898c4ebc2455832df02ae46c161c74086feb8faa3f87010b6f696fc375b88b6b72c63da9edcd2aee19d29c70ca5a4bab65d7343c6ad3c6be93ba709cf8a45bc393b5801e12a188e23bc74f71cc7dd25414758ef11791771781f8f3b08f20a84d32d76d6e9035626f2b2fe85ca921f9b489eb1e3b72df0133c002dea815fd4ba796172967230242c8c6ea20575b3c31de623cd6a279a8905ea59cbf00314298a72623f4c4ab7cb9119dfd96dff7f8545e75f6aa99e835022a6c01706a8a306e6b18776d5963de4bd0c61785b84cc160bea3562c2e0360960bad3689d5981db4c93de2cddead492351a3aa84ff36dac7583580527e9de4b58d89bd8664b5a7247a0c44ed38cef910576e4a10c1abe656755221cde6565d20a819d6067a1cc81b4c8762c70d2646039005f96bea7e60988d99f96a7e771a0eb411b9cc5c4037bce68d08c476f8fcb5d67c71124854b27742304a5177e9ecb39851fc845a956572b7ab20e141888e60e8a9051bb5af1fb8ac8a855a1509b9b84edc3ca8a3147d67ec02e6c42aab232a9156a78ab16f50999e079246c2aea5f63e31ece0438eb2f86ad7d62d8ce13ef3c9bbe56ecda1f151a56427e93baf301beb005450451ac890f5547f80de79a715d514ac155ccc2822869c8f5aa1bc40948551143745907b6f508090100b041d5ba2385be169dfdc9e1714cf5247cb76c506e7ff9a4c5feb6f88b8c1f8de44feb61d495871cc08d821219127d1164e3846c56f7fb89fe37952f3729ba436612eb3d43378662a05a3e7c65dc1cbc44acb179e667a99c850b94e65779db71f2c2b64649408d686b50b8e0d85700db58d1e8a7711638aa3f9e12a89dc61408dc52f128c09bf390a7b47c42423b3a839a23be96e606c959f6b849dcb95324612fa29dae4227b259131cca219bc82e8a6f83bd1270293e5591dbc1ca8e727350f51d361bfa9bcdde56792c1812a62f0eab2dd069cfbe9e480a02cbc52806b08e4d216ea057eca2cd43ea0e99838a982f65030a81b4610a2687bb66f959d5382646228089231892973019ac82e42de86d414879004f5f2382f2cbbf922341f41f1e28ac565bc455c9ac9603df8b93b670b0506576f4e5aea5f499d8b0ac7da7c46cea32b2383042e4290d1f6e7d900502f960188dbedde27027a0d2a88332c2b8451ef2545f003aa03c3f865b28703509fd6f5da87fb022d2db44cfa5bf2132a8fbed6588259607ddea8d401d667fa0ff16a8969fa16b527c796921935e11ab9cdc276c417762a655b66a1a24915089733a5db389b41adeb15549cb13ed77446cc81433fc56dc7b8d7215841981a8304434423e2b09855c11db6d85c0ee20ab8939ecafcbfcfd617d64236ebe561efd5ef17c91b10b72a06952a9ec717dc88c488b5426477f32e2a7b13321f49df60d61a016c42691f6815adce1bd0f3b42f3f71ce07cae44bc143fcafbf13656a9f299e358fe82df016496877e3bcd459de7b87815e9f88d5f7c09acf6cfe8ac973fae0530e45dee997a80af2fd0418bd9fab6e0279c16cfa4e0faa9db0bbd585f58a6042ffc700f9a77c8e0c3520f5e6c073bb426a195e67721be4dc61ace8ced95d7be69d4bd59f445788b4012c2aa77e3c76c1878b6624b40ea7ca969ca0570d5f528798182a2c5543025d91a5f91865556561898358e7b3b567242d5718f4a4b836afb11ea1b05981d463015f96e293e846038cec21a893b2e0535b18473627161e53c67378614ba7e0c16a2d434840c2a1db315d94100b552253249cfa9d944899004160db803aa86c92bc07670fd0f82f6ef2f855ebd9eb287042758827c8390a8739091dc50c28f401c686435ba6324294feca9249e75f2f86c09e77c12daf6c9d0cb8c625108408794d8230a2d7ed032694b4536c4c0954603d1f22a8af9232277573d12f29898aec7584c8c7dd574b7e6c5f32556c56db57f5f54ebda419ec1d00e4b38de54403e71cd560754ceb93a98f7f0f8e1e355f9798e7f5c75627b0f4342a660584255e7175061d637dc185e0520559d8ba899311c521dfa0cd338e50bf32ec50015b9fe7aaaf26fdfe03c20442e77de90398dbf8a9152990968cc23ab344012bdae77346a6ddd4c2c4342c3f759ee8b22910dcfb713a9f978d7a8a8896dee51464762cba19456ecd68e42cf0e3f9edb34be38d098e1c6ae79a90cda1cc35df06ca4a777b4f99d88fb062a7d29079f803a241ea39e86d67d7847e21b4eb2f28e04f075fdf8c60f4ac20dcb69770911f17a27ee66089f5b9ce5848b28139cd60ace09a77a5e1345542a4b08b8c9f8af41354c806155e7c49e98255733f24f0c039b24a4af454984788548e74d8c45850aa5d3ab8c4681f3f3e1f074032580f9164288f160c069a356276e74e122aa4bdc9a5a353480582c02485a86fee9852802d02c4e3f9a92620b65ec9d6c88225276642cf6501dd69bd898ddec94671976d740b448cb9a68184de73d71eeac2ff1d2c2bd03a3513199738095f404a5de21a9314ab2b5b56def8ffad7136c56e6e0ade750cb7019ca7c38f8e12024c179599d01497d6b683a1ea029b381cb905033b3b741a6536bfacd648e91956139d4fc3c3e162d75b087de5111936ecc2721efb2e1018b577fbf6d340793efff042f45e564aa71415dcc43dd8eea0a603f9549372b77ea3f37e8bae26ee8cd1b03a8111e7eee398553df187740d7800e2387eabd03bd56d422d1cc5640a854d2d09c33c5b41484d1f92c00974c79c871c74b26e98d944df014215ee8b0c368d7fcbc6eb1b38e97e46cb715d12ec6320e021c95c2d11a51ad287c2f5335027138b18c635c1d05815585bbd900a95134321588bb6334912f3c61a079bcbdd57876fbe74b98577cb89ac88764586d4f27aad7286cb061d95c358048e37d54cfe004dd7872551003dfb87bc498db894834cf6f984bcc2c1c3c10a5fb833339be96e880ae009ba05160a4715cb58bb690333a4107ccf11f1d169bb3518c523e8704634ee4d97b8e54376b5d9430029ca07b81bf2fd41d0afe6883461ac54117ee313bec9a588c2c76c168f6b125183088f880f91cf212f87b52634a0a8a4f4df997657d283e1356c8953a6e14326d5568a5b7beb61aaae162c335165b84fd43da6286a558c33082df6d6473209e5bec819141e17a16a7ede2f5a16931c74189f0937b164ead88f6c5a23153184a26605eeea3b522b1a2612bd867b90582577844b518ad65d3fe7737094ae6ccdbac1312b920139c7d2f8ab687643ddc2f1c1e40363e0eb613273a4548318ae8d46b08d06ddc5014a3f6344dd608d724135d8a473b806114e7c7927568358473dab37d3a01711a6d2af82cc7f4cf4bed760c16500bd56201cf6b956d773f586b28be21f1e3cbdff8847efcbb587f1d5dfd62e6ed8ada613cd0a6b9bb1d3d77fefc81de6030c6e7fac164815a6f46535dc3d35ea8f52c88d7fb124c4d6028327576b976c186c725762fe3da8ff3c5b4edca130546b6b90205265641b514b7c8720cb3d393a799a41b7a7df37178dae1e5583c3ed9dd419823a1c3b015e7d969dfa87e90dd06f8a00e343bcd969a3250780e8ed2d0cb11cfc5d079fe169aefe60bbb1c258a33aa77dcab34070e49c5a3b6ba5d793703b2be43971a9b5ef1d21f0bf18c48a4104838d1e009a9803c2e84a9a7c6f3cf9efe86c773b5e60681b6f430552ec87c1fd5ab34ce44e3bb23cdeac0c44b0fb0155aa649f50f604c10f924d4b4b99230af81aef428c125ec0f593ab73415b1e1ea9e080501f21eda37715a05231e15b94f3a75ec9e7d9103d23fc5889bac737b1fc8e25ddf475ac05fd388d189846a14eaf18b3eb7f64a98dc0e47305b2660c91763e290e43f9487e4c2a6916348c2b1ea16ea2665d411938e399b63ac8b7f98f7ac2047928096d8f47af9dd0808b7564f161a33bed9672b09739294508e9805673fcbb3075cc48ce410b9588f1cb181b047fbfbb94f6704853dc6ea969d495333ce9e549b297c900b8248027def361ddb84f318b5484a2713cc4c2ef3aeb792c7c0274e69e8b42b68d8a479fd0433931702bf5493f35d20482b6a950822dccaaa0bdce7d44dc9bcb501e1c87885642bb69de76abd57978c7fae1ce09792103ebd972739700ef805c29f45b92ccbf22f42a9a260d96398825e70c0c2a9798acbf548e6333438a0c4220696058ab0329d9498a019f79544ab79d46a1aff90f8ab7da8d1230bcf1d01c844e63459f2a14244b531bd37987b87d065a3fdefffba6cf010cc5cd5daf91211a03df5f0d58f3c8e47e34ad9b34d0ae2598c3583cf0aced862bb3a6bb022337f6503049b38ac1d8805eb75d5fd2f81439b00c4a6078d2829313306ecbeafd4e34c5a0cb4c0a33c64da91845883a36fa0c3da5b9909585f84ead6c60390789f9e160b09a469091fde228f07cb7ba48a59d4e1e6b202c6868b0a8998bf021e0e433cb2209c9a325c012b9545cfab8da300b51d771f35360d06b0efc8e41baa5c9931a4f1ae7710177516a491f566dc7f6ea6197740547968c56ffa4dc65b4fa594b8cdc8a39b72216a33ed41c0c6011976808f3e52a59ecb0e49aeb220a6f70094a4b80738fa0005cdc47ba6fe53cffa942c03be48884014a480361cdf9bab9dd21e948c600208a59e1a98796af00c22b12461afc11bac615f70f87b3909773b87938eb6e650ed8b553436acb8e39552aad97ce25e97e937f6fcf60f1217425556031c875e4333c9a79279aa67f246fd9afeb9b1bbd2af95dd18be074bc008feaf1ffa298bfd7280889819769f20a8fb19a65f096042a0ad2f7c7cbded4eadc018b67328d1a994e16e8fe56e651806e586ae5b6956eaf646205b2b798370387ce4b6af691490f287992ad4b65f6fe03d09c087a8e0d4e74aa324b5bd45992315b018376eef09a8805836a53491542b2dd96635c56441a70ef476ee0d598e550925353a565459ede45ea52698dce3dbb4344b24509dc9c6f9317c8317b2b7aa41e33ef3c4ba05d278dd41726278e4dd0c5c0aeac6490efe4454954904871d508b27869545ae56fffe3ac1d6c201b2b40c48de0465fffad239ea660f40d0c3fbcd732399c28840d3da4e0ebd65d8f3f1560cffbe65eabb539dc19aa9743dbafb1aade030fc5a39ef220c439194d8f42b9be8be8f3a241b8db5d9509b579911b34f7110d8d33cf98598fbd09cb3341cd9cc3a6647ba8185929d7dcd34321af605eb8eda08ceb006550c30b9f6aefceae20d61c27622c3dedb861b3ecc50119b34bc50f8bfb3c178a0c2b91df8bca15f269e8562f1388d0d4384c5e03af3f011ec666e540af879f11080a9cb540500e7472a639464d9b14ec360f6b7542c700da44ffdd20d07a62e107123031fb56cc3edcd0da6bdeaa4e5342bda43b1d9b032db54b0b6ed68eb6c4f75986bbf7e5bd6183a65c49233ea6f76a5ffa68fdc9181dbf558ba158a9c74bf9555be17b47085dd4c8424db1fcf060c0c6b3211eb993015a635bbe1a40690ca4a216c0df8641c76e62a093644309222942edcabc3b4b9b6558d29d23d8f7b260b0435d31dc7efbf9585316119f8b2bf7410ddd37aeaffa137628786f492572748221b102de55610a09d194191948f32beed9ef51e28e0e8428d558b7ff630e604ae34501150609b3fc26b3d8fb9567d447dfb4ad5aab6c3f949c898591db5f95b7cb41e6565a53273d054a8ac6fb57724740b9090c37da165c7047b1e57b67f4c04e708198cd7ab052b5107f95ad8572b4934459dc58d589393a2a600af0c810ef03dcaaf15dbc7cd32685c01c2105430611cb92466291caba299b3acb998589342f1de55ab04ebce3ac9b88ed6ef1e22c3e373b50a19babb773c6eb0d0abe4c00a974f8ebeb8c8256121a9703ed659ffc759c8bd1423d6460881f84156095e3672db55e58052622951ac52cf24c141fda3e45c9b2f71e0afe8951bba2ba0b74fd6f135efbe28c9114594afb84a678d10dc33c45ad3c8f112ec3ab791df744d0f79a64cc3b05b38ce84053b35873bb73546f6691f0a72d2748c3ecef9118247f88ee8f7e868c7195c1bb14190bcd96cecabcea97c9dacec40212ee0a6505a4fbb62bd2ad6e24017a863b40ef3d5404bf189880d74ca42aef662769403ceb83bb409cb4f08b7234828b93dfb19cce424b7a8e0528fe6f65e8a4f74f78665a11fd57c4d9e4f13f38bae878a1887aa43fc41b190ce9a7822520747abe2531666e9d40d85b8efb3191d9d10c375f729c619a331e4caa851a197b860efdbc64db3048f58d796d97e82389e40f3b8a8d4367196e3d4e8a614075e87afdae2738c13dc35e807efd3b2a27b2106158828765cb50fed8eb3f49deb0d22dea1298f69a8733299976dfb8804226c794551d72cdd5af8bd4b93d3dc2e85079d4729a01763ca2e5a3b291f7c87810e0e57f32e4f0afd7338f130d45cfbc2f8c670674f79f30e7689d798e3d80a44254aebc81372bd4794c67a0ae6cda1c808b2e8deaf5dbfe1c18ba77cf0d111a86b0e4eb5d0599376f94adcd64a0e9c6218f87b750f8628813813c82eaf4aaf9b826ec39f0b4d34435a1aafa73c343376fc66234df4e4d7e8dd9e9b132498e36384d2d87ae08894027be94521de3b174f99fa98728377c49a5e201134470481fd411b72b5ce56533c43e005840d4300d8305715b27497195c23020ae989445360b88a2f135758df50793faf77edbc2aa35b007e2536eea3699f593787e9a740cf72b24fd0cb37a1d10220c7227e96df98a325ae2a65d705ab449682c1520e516326a88349caa752bac30d81892fe490833294df5b22692952bae30c3110a5832f7792ed010f39b90ca85a86cabc316ef5844ab3f06311a8d17dfbb340650c26b89124c90c5ff85a612e265b0f570224ed07daa685156ae5f782fc81f18221360cbe47dcd2b221ad969fa16756dc953aaed0d51742b30f6d3e8a5d13edcea43182f926f97cc5465d6ece253381011d75f476c4feeac01a6eb39b1cb4c75b505539d3947a2d2074c8ee08365f49e29faa7eb6c3435235c7383753ba320efc81a3bd8f29f17b824ec40cf11ad090e66f700d2eb21b6ee947f6206fc038e89bd20d871fcc7909d9a93d7fec29bd82bcc5f75a806fb849deaab841fe8beee9a6907850c0e18656aed070d34e98e6dcd432966259a4684eb46a7f90e70f457eba8a04521c3862629e8e46896e920c658e721a2e8beca34c8820c391fbb764b980811b553c6f8fb90a1927151bd4e0b63bf970c2751834e9f415411d8845291c3ec6f4fd643bc4c164105a2826269c07c4a86b5872d51d4294202ebad99ef7fb7b61ac2e8a4d6801107f0e249570e698556277c9b732f1faa90af9d913e539525728f8a919ea6a6efca00cb1ad9a7bf819052d8a730fd6609d63c3ab44633145ca2a86eeef57ac0ffa96b4e1a7e154ddd80c2a2fd0e9276160c0b0156c28345a462b30b27c169cca40f52f67f1b6f704fbce0bac49a910c30acd6762dd0254e960109d47ce79eedb45f9317bb8420b86efff6d85ef82e66f1dc7e62afe91461fd9cc3a300624307c5894e2dccd1d7c6be045f94df96b23ce022f60ece3311d022f4f405fee02af5baaf7a536ff67299d151696eca5d7d1b55d6f01090ee691b7c33c1f36bf12948e5f64fc7f3a5925b26f2b802dc6dc48d4a62b9f85ade5ca1808d320bb95703b845480a6bc13e46f48b15429e9bc97540e96d68d8594a3f03740d9386e0ced4a346370ea7409ff0ab1233b38e677daaa31c16c573176c2e0c57a1e1bb522d8d80e00b6fd82790b608885720e1937d0c3d275c235b48c50ad2ddc8c70a753212b49d1bedc487f86993185e0d00b85dc5920a62ec9d8591e7c9b770ac9d540aaff0cd83156c9f448cde38efe9e5ee6b356c485622f1c2058e8bf1bbb7f6c30ce29fb1d608c833d883ac017e764d5f5072dcc53ffcc338e90c2cb5769e5510bd99b16a99a6725b43644aa37324cf60df7ff07fa3e90feed231369d7c9c7b4a74eae3cbc2e269aad4c5198f6a1de7cf9b3267467e3526454bf95dfeffda0298c97d3a28852f9b04fa74554957aea3200a84363ae645b3f5a28f17f1993fb007df79cecdfb0a1319255ebccd5115e9b4ab85fce317e912f9cc4d618aa558ec3d4d26cb9003ed008a99feda309629af55440a26d320701589c3ab4c9ccd9fa01d763c21c1cccc25a5e7aaac806a2ffb5091b0549796075148ac7edfc9588cdec24dba4b93daf6b2919119fd74a0def7f1693b58157f4ebdec4035d6e28172772af1d19a18f9cb8cad148c223fe9749519dc78c9d1f03bbad70c8a97fe79d8cc888fc898a9ceb0e5527bb8a2311d06cd4afa51f6c16efa3cb1386a150355e7178964dc3238d21fe9bb2df2f8034308b85e549fb741c74496fefb4d936a3ff6e161eff437676f8e39ad449311edc5310c9cbe66e63ad804d201a4fb20a5c74b3f4933c29a30adb127c46d6f0f8bf3ed7b17a0a0a67111c3e1d5f4fd495ee85e1d201d257519dd721727ed424623f1fff1e0835b910657d30c778feae630eecd1250b31838a329d5d476d9227cf92c4979668f351799792616d904620058f579cb9f81391adda937600f4a58c8cfae428a4e22d076d0f467f8d22df75800767d240f063868a1a0f02f9550a76ede5fa3d874108626ac07e3f6e87bf0b616f99a9fee2765b50bd4c069e477db200de6fdde3c9e6d88c4a3a738c880bc3b448d3445f3a797dcf0f7f28251186da79018d9c70c62d8b102a3d9281bd578d4d398e18ac4857be3307ed37592837a21491649fe500732ee5c720c513e0f30a8ed0d11c4501009fa74cc14c5aa9de24c9522b20ac139e004b176576cc5ebe8153cfc1a215cd6920415822e97cd7e36609ccb795e98547d458eb19f5dfe7429cc698993de36d030eaceeff63ec1be8af7b415bde80106c968e0095cb57f61be53374b770b63696fa376de105977a411fa39f450b02c78967ed4e4de52e4919d64d188458cda89c3a7adac8f3870b394138656497fcc52d88356ee3735324ef6afca03d405ed87162fabaeea47e5dea5a8b4075888a6c89da771af5bb8f53cc8fa8f5e7e8551757fedf58777d6f7bff89fffea055a0d27d6f8d341e314a9b48b832e2516dc069a6e57672bd110a0dc1648b7cd42dc710ce1a82dc0a6704e93edc6d5df686aa2bb14f011d6f22d94c6fab38800eed191cafb554afe73769fcd14bdfad2f907fca4a80dc6d1412612f083003a670c16376e183cac597b774b05fa4182e6c4f489afe77ad0c6b599d852d9f22feaf4e5e91eb8d452dc5956b7fc5b1874dd15659fae186debf29ce5d1a204125aea3d806e48053f8b3807048e36ceee745883549953f06411d3c363578d1bbbff77027e31fd74a3df182b31392334ba8f2d3248818d8d1e55272a63194850e30a6ac44adc3c83874033e52782227e9f516cb53e2ab5b47816ffa5d7c7cf001ef6a150ee43ed03d17c5e489a9e8bd9ea088074d07ea197b648835fa8f8fbe6c03375a0ac9506f4c920e91bcdbe96c312b94bca04856a1e72a289d1261a5647a18ef91dcd7de532a3172ad468941ec2a7170812fab196547f10c8e3923b4fc13658903600c57fa59ace928f6cd9a5e1ab4c342699739a087e79874ab29d16aca42cba088a0233cb264551416a0b2f3019a75c525840a8f0511a060932679801e34e646938af8ae2d99162517e301bceed4c31b1475ac1f2aaa84843c3fa69d58d1ae7f3806594020d6b5ceba95219dd4c3448c4dce336d561fa5d10c097d1ab0bf43eac41365dcf3e460ad1b3e5131a61270fc2154ea455c94806f2b7e64ea1d8bc4b772c82434ef0a4f4341ca1131926824fdbffa90d634b096d02c2e8a959a5c8675dde1b08426ef988d3a6a495d3cfff33913bab086cdd0b152b96b6cca79559e9a59a936f69933acfef18bd016d7a8030c0800c8c6f6841f7c3040a16e42b19db86c854e41cd844527ad2a1256cafbd7fca4fbae8aeffd3b4050bd568bc38c45cf7a3ee903c2356a71f4156329074399c28a1cdf6652beccd40ad19016091c64ccbba18be77644ddf3fe2992a49365f78dce2b0e9de3cc393e454dccc4a4b6ec4ec5942f2f3001249fd8f68e8ac966be8453d804dc994f347b23598a76dbc9ac43f372376220497bb0d9e8ce3d8ce4e5aadf27e121ab693e581c3a34269b25a3ae2155346c5ec4e4f901b4090b2379b0491be512238dfe0505475ea7250023fd6ee73a11a236684721646f86367bc1cd91a8bf1aa1ecd5d919dae8348a285873d6841d3b297fd95c0f8139ee38577399f07829d77660b0f7d2a037604c38d271617974e4066540a382ead132105f0d50c69e7e4c16746ed2cf0f570dca216fdd7e9b1edcfddf432ba3cec537392df37f0dd464189974efa5bd74fd77848725b0ca992e6886ce6a718e1ed00c040050c9eca061c09996a066151b541b2fcdf63ecee7ee06748a6e4c190c5d2ee038dfcd7ecd08d93732f4879a33c322830bdbc8255d5d22643b61205c95e29cfc18d90a270c6774b51c1a68b64c52f5d39adb85c277805d97ad3ca94f3aa14f9b71357e2f459eb1359cf2d6b0cc2f0ecbc041dd9efdeeea63850ef7ff77d7b08dfee9205fcc0f67f1e159ad114d83dcaa4b922ae4f661be14f51360339432fa2c0bbf80d47e3ebf4756408971c0c1d6076189e8f3f3ede59075a50d9d1089b1e1eff662694eaa492756a71005a883c3363d4c594c13a8669593373fe011745028758f5e4795b5bde3c7a90487d4b6e1d860be6ab62e32c90b4a6814cd55dc73c2c29557dd2f06c954715c1128f1333bf9dc7dfa3dae02a4cc6872f19c2d21a6a1c62bff49fe195f6a369e17292289bdfe4372e82da2efbb6169d64b844cf2954a2ee9661beb8129a5a7a43133e8c03eb04c12e17999ab4308a4db67787c464550d4fe2e4dba0c0cd6db66270a62ef9230eff0dcc66299c11abe69d8fe3a50e29749a1f992bf3f7e8e9e25559b1597d2ba5dc32167e000c905ecc6671b561b241beb9bb003b57dd00cdd41c724776b70e57b995dd5bc7c26d1040e9ad221ac096cb6e75b414f72e4f6cab26d0d695cd7862bfb0d976a097f5f1009a12b0d6944d5a4f33c6b472c90087baa37b2502aaf8dd26f5405722e546ae01f2d12278c54b6bfe8ae2392953e61fd39faea2adef2cb7c3de965adeeebd9c83db8061adc851e706186c8f7767be31ed4147f910993ce7efa51fc164209b4306ed7b2722f30292abe3fd2c86540f6ed78d8168586510dc14088c7eac6b9bb5a863736b112f55dff93116812a4477a4b33526606e58d68c1e232c79a540175b8f021905a1616030008fda52ef258a7a3efdcb5fa014f66481b4afaf445c4f588c28eb62fef15c4c92e00b0807abe92edf500b99613d34664808f1efd162845b00a2357bec38a28aecefab7c7614423fefedbe6f125788c2421c1074b1ef6a680b9edab258f8a17503a4c40364d3bf40820d4746a3704f0615180f9e49d77dc37f8807b83dd1121f095300f0463d2e55d680fd49cc390ba09f667a0b1e3c4b5456f157972012ccec0db1705dc46e9d2da009261fedb9a173864dee2b63f009c253c25fa4038affedd379a16bc5e0e4c020e66e6d1b849a0ee3bcdc58426146b025ac21cc98648eb19983792fbbf6a6420cefc0b32f065d763c05ace59d13e6fd02f09c2becd2d78ea1f919650e90155719190377755148bd81ca1f8806d7b71b51afbd388a881b4a1913b873f2db80ae5ca065a76ce55d045a61ce15bd4a438a210fc29707318ac4cd2c27c3074f0a3dd237fc1573d03c65e08d7cc510e47eebe326501ce9bc7153250baf15eb5d9fc6ee4e6ac816af919ba262cde569c950214e76c82742082704f8741a45ef2a42097d0c0de681e9d57b86212e5751045c87522551f7361169418efc47a807c1238611c9f530000210b2ac7e68786355ab34c390681dfed5f7edae65e11b0a08a84784c51ea26379dd8e7516c1961d530049a20300373266cc04048ea964699170f18a2c424e50daa7079d30b0c6455e8671f201cc4ef60ccf5a193d61d8015a2d58b536d1b417f0439eae7601277dfc8f75116754949fc439d6fb2640d4813cc8922a314230aadac86c2c8181e72f5e5bce4ef04de320d35b59457060324de8000862aa6dcb9e59a86f7488b010953abaf7133cef51eb55cd054dea86615fcb1e65d76b0393343263fb4264d2693d6ddeff27659c9b6c7123cf61efeac10f4665eecb9ec1918a20c1d055a175ce015e2a58621be766d0756ccfd080943909ec5d87b748dd37e8f26560c642c3fed849929cb2a1dac6ba1a0feefbd6cce3e51fb5cc3ab352d8efb5466fd4591038ebd238dd7b7bea6116ada4d7a3f40abefbd6e7f7816f898195189797343edf92c1ce3fb2e1ee3de904919f191cd66fda77b0d7a37bebdf3ca88f871d90058cbb8cf047f8011669de472c64e786f196265281bd2e71426c4ce531ccd4e1e206d787cbf424df1d3bb76f118fe862fca54f7b9f7e77c1313955b6bf922c79e5985e0b33487f8ad5b2881fba4452a25764064d5ab6c6bdd9d9d3c761213dc231c79d70afef8dd6aa86b502b3cfd10693dd595acfdece9b1dad5c386a6c3b38d5cf55e6ffd1853680c8d046ad69bc55620103b4a0702359eda575e176e9f6709e78c135b30b4e2883dcd189c9d2fe0b9ede1fa6afcf521a19531eab28aed581093d93647ca3764780f4c79ca08e451839c6a34ab7b691f160ef6ba4942b6dc7bcb2da59449ca380caf0c4f0c0d5e2da956a72eb7482e5af5cc35dbee9b90cfdcc2e24f7c81e1a1c76b4d34c5557c8d4312260bf9ac8bf2c153c97cfb64ac412bb960d728cfa4a16bf8ae67fbacccef249706ad5f4f6e69d0bae6859d63471226770ee443b9e5ed9406ed0b1068f0ba6bc66cd08dc555fc139e80211491c47f0206505c4520afd39907c4afa7f9e645d1fefa149bf90b0d4e69d03a0b29671068d06e5e0caca752657bedebc0f63714f2617da15df2657d4a11fb519149170d178bdcecdb3c95f493c717e7a150d84f1f0d27c7d9e38b06ce3b5fc0e6f9a301e59b779bd360e39cc7577c71d8bb4f25bdf39e170f76d4c739ca5de01ce5d2519b771f0fca37e7b171ce7b5e3dafd8f18839d755d27b5ed853c92f0617b0e79b6a21be4e9e3f1e9e987b5e361ecf17176c1cf5f17c09bba07c01520d27ae80bd501f0ce5a8af061ab0e7e9d8bf3857f77a984bb8ce2ae3f4dd47a373ec9dd7f3c25ecfcba5178228d39330ecddc7c3336586b99a1e430bf165a5850e7b286171a9933226816241b17e893d94731cf5e41702f9d435cf4a3f7594278bba185c40f9e9e3e139f9e9934353129d501e4a94ce44c996afd8c90f27e6dccc331575b9d54f45bf2874cad15d22cfe999f530cbb28cc812d4299125eecd6d836a6ba594d26a29b5153f51049d5448d22f4ce13ca39db95b1267b6e2f48d119c734e6be328a2592c16ab084a299d55055c2cc2554f291d2549892e2973d59e3262b198e4c88a2e168eae3cbd196468b01d2365da60337dbb949ed43a6b66b67a1f2562442a9573dca1e7ecaef25dc95570be22252949a196f330955d6b3d1c5bc4b1e224b2c4c6598f11e765902238aea41f79e9ddb2737a159cafdf7dcfcec8134eb08fdeb149bb3c217e74b0e2574e05f1092ee1925b91cc1472fc4f57a15d60ec3c1bd7ee95b2e699aba84732512c7d2453f4c4d7ee89e62afa917929e62b67b1ec76b2d83de9bfe192c35804c618c19d1d493904c1d8c4faf4556c527dba91e89a4afe7ad8e45d609427dcef6aedd9678106dbaf37a81373a65bef63cef4eabd62ce7470ba081057d3e3163fbd4c1c459a091dd99f5e716df03407afb86a39e33c853d37888b21faf5582464bdfcebd4d2eeae5570f4b878ad6bf1a3a5b3c198736223478faec612d7566d460790e520577e59fb11470a60e06588312c388342153368e2287683d10daf36c11b15f6dd9def96ad3e9221d3c5134f918c7c246374c39f969041cc645cf098881366b54d534c50d021839453f9c84732465ea230c1876014edb1488f5a6b8c35463a298d39e2e8c5673eadcb9f5d141f6fbf50049f519f5cbd3de69c37b3746adaa6695e7c75eee288a9c7da757a2aedaa3295ed5a29ad5405653a9d1e9d4ee7accd029d597b8247f79899adb3efd5ee7512e7784aa72d720a45f0f4cbe0681abb7bae6c2dac94b46f7738333bfb5eed5e54fcdb2d948c3d3d4eda73564ae7a45305e59bce399d91d218959c4211484d561bb40cad4feaa92c9d9e6ad36e2629f5a27d2a67f418bde716ea5546da196756da9e1751214afad453d9aed6869e6ad3ae6c6badd796cf49e7384cd570715e99f46a890972640f97fc7423b72360be4e62e4f8b18b277942c35059e67efa49294737418ddc2e3d36d97e3ab7033c02d636ee97d5e4305037a920293276b8b1830d9bdc2ddc753bb4bd193dbc9d93a8e6a95b354f274ee724fb54516cf624bad1371d0bd633df2e3e8512f8ccb9585b4eea9dc29e243ea36e2beda480cddc2ea7a7eada2de5cd2c9db3e79c737e9785adca4945c4b5568f2d7b7a19f5785599749595aea2b2c6e94d3ca58c229db2305d7a6ca7d265678018aff75c3995accf8be5898c9c41d9faa35ee684faeca73dc2777bec6fc69fde1d6d6b9db6a79a6de7a435f6f4acf0b4152f5a9ca3d3e8338aa6336d7c4a5d7606b853eb58984f58df9fd7cbc2fca8262d15dce98b7b9f4432de8e99d6a3fd3c5231404f95120cc7717d3b0fcb0c6280bd5fb16b407c751f0dd8e3eb155f9d979aabe95a3421354598f93446e6322cbb273cd4afac2dc4ce05ec3629c3ce69586a639c8c70bf50ca6b1d0bd5ad632f94f2d7b90d53b72afa7642d158f88b73966556ce38382d09e36cdd4efe22c78faf76e9dd2b668e73ed76b22ca31927559aaa3357ddcc5ae1792adfd24cd228d5a9731dc6de9776ce53b5f7c060f1c5cdce4924238ef9ccbb7332c26f99f5ac7bc2aa747b833b25652a6f14ed6ff52cf3ec37024e8590537d4005ead60b103f30030886bcfda8707e4f65e4ea5236bfce79a1e655b6e79c935d94ec492ca30921ccac10cb68428832cf6ddb6b9b5b16ae77d36e3a6dedc6f9e6a938bb499ee734155555d5556576e33cf95b2633b799ebf4cd5cfae44229f68b2cdc6e65b1e53c850af84c665cb8ca99a06a1f023bf648dd524f3e3733b719956d3d49a9ab2e95d28b99b432e35bfa7515e85912027f47748ee90e95d54d80234b0f2ff690e81c5311c2b84598a69761be6d306090e809c34c1b58d0308aa580bdbb02f45020c6980276e23f603f100c79ea3406d36391cad33d595335d871eed6c9b13d792a8b4f217decd50b3bd73aec2a0ebb6ac3aed2f0e9ab159eb727ebd8da479dc2c854b0532a377621e6b922eb787da95ec3f68a525b10e2353d762ffc30534613429829a389a017ea94740223e348c6c7e0df51c14e9d43fdc971a6ddcea97a2aa9d513cf9fb017721e6e1e5aaf9e8a536d2aabb94a6af5e4c9af9dfcd8759f0a0af6eb18bbf58bb73fd52f94f29dfc10fb46c53a75f93d9bb471709b73b85b9c6f1bb785163e1cd530c7d5df7c763b1be7859d73aa6e5accf39d4f8f8b1e520f4faa5645159dae3a4ddb795678de5a99d7332b5f769cd72e0aca9dc498d339e7a1be50869c57b79cd37047eb9c70de8e372af75345c99cba5baf93350d773fd38f5dacaeaaef5ea8796855dae764fbe8aafb39d954d9e7647b95fd9c6c217d9d29ab5b5141a94ee5f75cd934a0756ca08b34b420c3670c184478600ea135ca98a2680a19b841c787b18887337438020526282222871dd62c051104c5134a3485b1e80da7830cccc477d7e143a5638d1d5f4c6aea018d177c01050eb017a02022882ac42cf102a63aae9ce00862089d23051556901733fdac5112871b5bbe6cd14112610861b18231ac38e328a9891ec422560fe4f830164dc102209a804881183578854c84a0c3cc17305003cc165ebca4df8f9d7c434abf52b248d04ec0299c71584b983428e1c84116a20794c584b504378b0539a698e3092c583831a6670bd10c9ad62893c31b4d3449b13559d1230e8cc122381947d6122628744b5e8c83f347325a78f161ea430c068e68c5098ab0388104130db0e880e6a80a2e5600461725b6203383684ae1064a3c71c49a1d90f0e2d5832586268e2622bcc08e5ed253d2a3f42b3d5585bc22a55fe929232a86d10e8cdee8410a3396c2a84087184c213d4abf6e248139c28833d0e8208bf902328d86f640288d0e55a441861a46f8d00507242272b8d2841839309a56488f577aaa93aa986d503746c8010837d6a891861a59f4b0800746a851820ea216f0a093820a0d4a37e0f8763acd7cfff8b64276b78c356831744cd15da463b3b44023fb8b325d7cfbd562ccfbf848c6065e6857f418d22f655ac096164c916608a51e76b8c01452c8e0cc173f24bda0bf901eaff4140fc8b4c0c31847cce1461354ecd0460a311042820932603ac43040d9d0c670c30d1fbc70b1820b5a82971ea5dfb803a39f1f6cc00108c6032358193556ac81454c163e6b3c2009130c41041d68ac01224b8fd26f155d80a0838b3137f8f9c9d274090a175e9ac8c227082176f08a1e3380a2d54ecfbcbbb36806893276a083a12c68de7855b96105455a9811a444183fd8204b799072385029a4322a603f5bcabb334fc3b6f1dd73e8bbbbbbbbafecf6c8c537f74d833ac2f8eeeece6ec6f22057629d145458a15bb20893ef322c9928d4e8b44ea73c4526066b5ef5914c1465de7e2413c5984f2ac39da0c8d163b6f342831202ce43fe74a4ab209d259d89741007593afe9ec423337eea25c51195c5efceb9f8a954887ffd49fcfbf57c9649eab5877e12e8a95292894c8280dbd432b560ae3b95dab414cc4899ae22d914c2d1a2458b162d5a84b6b64953ba253d7e335ca106b32bd4605669ad538eee0fbfd47b64d4534ddda74be5b3e7864f99e2ecf83c9e3cf6173289947a7bf5bcbe5c2412ead2250b570989847e12d63e3f5d1e4dd7945ecde9f25e4d07f285b12995fac2b8d4633a8ff9dd7ca9d317fa077ac8ba9f4ba0155c2570ae122bb8386b678a529c9254da362ac14831e4904c92626c6017298652175b69edfa6536a765175b1b7186eb6196413a95732b6f46cd552c92df8e183395a76ef3f517defc65d4b703c2b7e3c4f293f85646b19f4e8ff9e6389c3232fdb04bcfd395b51ed690c1184d00c9c1f492fec27445a31ad471821fa22b7840c58b0b3092484a020d3264b0a507054234a9a1c1115f986e7849e7a8f5f627f60be9670f490251d4c783f2fcf1648f47414f3d297bf145bdf6ccbe70d2c828cfae33c34c5fa8d9f2d4da1047a9f5d88452b75f343a22f645624eec6ea7dfec12c4569474ea3418e9a45ec1cb6292722a29fde2edfe6eed6d882cda5c238eabcd35ac0002f5918c153e6c2469379e89455c1a5ab7866626751453836ed6773c325ad21a8d8e111c49698c90ee12178b843f927e3a041a9cb5be50450330743b28e7783a7af24950e2dd8a45b0d329db525fbe10a7b5763bd9162d68e9c9cd98603e945ed8fd7170ba90b86421f96427759a9f309fec3a0d648d0ca48e0d26a5b6466b6a7066e992c32c68c6a62b894797d1e5d04f07e2d153d15241ba75728f2a8fceb557796807e2d1873d434f453aca69ed197a94a3aa0c51da97a9bc6ca903aca7729d7ea1f4b00aeb35bfda1776f5aa0cf23b10931ee5d50b973cebc39ed85b91df01d6a3be50cad78f8a74cd4329afa19cf552fa75edbb59ec7e5950d6e30a0aa40b1339bc423fb464290024b215ca30bfcb8fbf90b8f4a90489b771e9d5b779318245a63070881c5ed8756db1c53c0d164299108e72b8c5c22c4c4861af01a51f43c8ef49fcea2e3f55fdae50835e1a9c242891fd7fa42067433f82c886a8caa7f6851b989fce79192a93430dc605c8123954b9a47d42e9f4855dd810fbd8656c658edf0099d30669f8e884f6a365d180342d5a90b6a5c1b9c309a32b84d228fd5083d12db60935788532237ab3d04c7919a2f2ea5529f241be0d48e56d3f5ae4cf6d7cfbc0dd2913ea1a1287cdea1ff8100f7b39aea4c719648b4dd517b2c02de6110422d3069d5417e24ebb9d0f847c55e2d1bb676afc03ff3226232dc8dfa7e26c3c53f3020724896c8fc840cec8d4a53402030f332ef77b125faae4a735d56f8335f803881c6eb11f0d662687599812ea08a9979f99fcb2a031d93f7a21441b434c52f810c41a6c5c01630634b89245186abca6f7b08117b06661504e9f876b1f9789c9c4047989633457558a3498892113e667511600334c4b1bd28fd560b189f4e99a0dda0df284ab65e91bd7e92c4c51833353235bca98bcaca957537e991a2f4b23e64ce7e2102143ee10a7a793e7443e108a00c0b334621335b1c9e9a7733d98c8e1f643c59841cc8626493ea4cf24892cbb871199ba01a8e3f430410ef37b2a484df9705fe621f22624bf2df6136a30a6ed4788991c6e3f4d5f2505d29a7ca69a42a82278ec76565e2b087a1b503d528fd46fcb72e4db7e402ffecabb47d74c83d35b4864f0a6e9d574d0d3981a9c2ee9cbf8f5bb6bac68f279113e1a9d71e2b9c66a94d21485210233e4e5c88c918646436a503ba36dd182342d1a909645fbe982c4b9d8b5108bae0c200986e4db6273158489ac39f2d3372eb1c998d8e403393e42f0e1c363f4e160b551c00e3f0dc60777f8903526946b30d027e8391fe8216830d035a66eb54faff55e4ffba9f5d6fb693e0d4e0db67169359137210d06248d4caf9aacdbb94a6990d0983922023314e61af9eed2656af0c70fdb505193fc8d8b90976e5127dac2748b7e97c90be7cb207f8bc59ce935899833ddc81459f584aaa0f4873d2a2731474c51984bd4e0bc601a1c1202264be7a4a73deda27460be2a8a74eaf20bc17ceaf17310d78b616713da912e8250ae397cc5e173fcbafc362e5b0c05997acdf96ed10d1344a6df057387ec1b29ca424cd4ab12958c4491a5c37e6eb14d75bf2d264489e80f19f4106eb76878ffc71502f23357d37f08cdd57420ce5d6f2bfad9b274cb884fdf80bab5ca39e222f874b99d20d7d9edac7c7656768cb813f937478423ee447e8eebb42a8af4117c848fca57afdec625c7db848e88708dacbc2d0ceadb62d247296b3f9f066b7047960c7e217ecd43f8c223af79a8c136a406a703c0dbb834381d046ff3e26d431b9806a713f136a206a77fdee6799b9806a7bbb71935387d88b71d09f1b63342c0e4fe3053f3c117cbed455cc32acdf17d556664f4d3815c18ce8717261443fd1e5e789f8774cdb3a26e85c9c474cb5351af1ed33ceaab52e4b924e9dd8da7a2be29fd0e4f453f27fd5b4c8369405a9006d37e342f0b924f3f744fe24d869a29cc90aafb87d5ed3a5d6ba54d60692a25614912bf41d392c45351b93424a74b094b4a29599e4a52cf85258ec4b94befad26c0681b3eb7d22cd6e0cd8c342d9422f17848f0251f3857499cf5f128f1241feb4b5642a45a00126739eba3810447f28149bc251e3d2126d9d02246846e853408088b166a5a7eba9452762f207196c76e014b3e3af4d1a0b9f228516cae2609dea6c48b7395054dd716bb468832259aabd58449a5b99a1a6c22792acee5739e3d15e7f17109b0edcc6f48a725f9c25f241e5e968739898729252490e0c55e29f19278acd8ab29471aac1ebaf0557e457d52a9c19ebfae2cf216f3e45252b7ac926d9aae243e3dfb99aea8c443bb84c4c30cf61910eca3128f1acdd5f4241e3df22812cf88975cf4f7362d015a2368f322251dfa49345d5f86a64b83cdd5346a707a51130cd6ad3033f2e956f5a194d2cca85be11d7a170883c16c5882c15ed3ef50b78a60b02701895e2f1acc434cb4f43325a7f4d343cc35fd749a4493daa50446992aac6601f3d36358b5fc54439baa4f0dd260dd0a31914fb7ea950a94c32d4695681a255fe41c0431a44412b138a21a441c91830e40ace162044d43951a4c52c2c59431b4f802c98927704064c21a686039c2044068b8206ac1c5193b24f150c70db4c42b7af0218e1c52e0458c8bd774eaa55baaf82834383f8916262b1bbc800131268b1338b14501451731639cf18312d0d24f12160b766613035bd260d34542bd61ba90f8f40b9b2e257ec3879489064d170febe361790d9a0acaac61f4fa723d894fa7b1e952f2f120f97890b81227e15321896724065989f7a50ed52f8c627e8b19d1816b3c43833c0d522aa5f6cdf049989aab25b196d0eb55f3ac4825b99492414192c8fda12bf1e44b76d7b758b724de62dd524191b77ffafda634e8bdd0e0a41489a77201c916eb12a623f19e170a8d1c6e3196a77281e5493cc9c793c459def3da62dd4ae2f1e02e6480b8e255438f1e72c0f48a5d42d8699278b28b0d329843e8a5339178f1c5f2e24b7a1a6870b2bcf842423f18380a9b2e9ad4ab7961ddf269577c252971230d20242fde48438c1444a8408e13fca4f1821b7ee8e2d5f373c4450e673c61822b4dcc90868e1bd830e38727aebca6f7e022cba60fb7981a2f5b6cbaa450afa60f5db911659cd2cfa5a69934cfb40b174d9f683ad6ada02906cb6bfa34d347d345c5f8027b2975d274ddd7f4e9a5c1b44b13030683c1c2b44ba6595a82bd310419b0d7f409d442334bb7d4b42bbe846233c8a888680e31fd5c337d7efa168b2f5d091a9ed1152596f0d20333c0f46059430d9fa3352710428828460a30571869f146181c72e0c0e18730aa9001134bbca6534f8a0b0d4edf86a66f44d3b7581b398c4d5bac69ba3623e26afa123017fc9c1b143fbd69bae20bf6d3405b8c2e4d170758f082344d148105961d5ed369d374ad90450fca3405e1c68f0c5ed369d274aa349dab5b6c8bb5cbc8d2f44d084cb722fde99b191ec07e86db999fb8c8875bece766f433dc8e7ece57b821fdf44a93ba155e21aad4ad5083fd52b7c20eeaa06ec9a506d3744b760b06fc214dc2f9904a4a95a62be5b109bff023e9484b1e7e5a4aaeaff4109cc816ef745f74d612ac751c87bdda9b6912a8814e4c99d3a2bd20e37b3333324ece524b83411268892c53d50a2e1609e912d0c7403feca1a11eeaa31e6a1708404dd462221935621da68dfa4c2375520cd6b476a5a442d3c57a62882c3028811534587a692a4dbb4e8dba25d42e000cb5d3a130dd3a436368ea501a653ea460be5164a870e385d218fa909a0159f215d2a46fd7aea4b16e8553e9b974abdaf02d5551faa53fe99753e9de9c5329f71e9a4a2df46b1acd55fba90e494474d116c4557bd315c8557b3b5d816cb140bab6eb2185410e1f765dfbe635981873861a6ca7238753e97b2a754b4d3883c4338da669fe24bee63d7fbdea85f8eb0caf94c9a899e3a7f4c4f08638930234ffe3e3991414dd4091e5091b6c471a597e5d542ea0eaa8a38e3a5ed3759a873a0d374ca79f6a01d5a9d38f06eaf5fba2baffa25f9e2be9b29332bf3b572fa925fb87398ba32f6d30c1030e57dcf06a07a7abc7cb14368062091b8c41dae2d54127f082cb1a659c51e225821d04f1c311195000ad79b5b364770e5c3c3232a2e9e527c3b48928fce0305f5fe417f65ccfb1c9132eba329097d6a38c2e949f3cd4320f6d3e7e29c4953d7d666e04c378e685e99244c495751bca2da1dce2c4d20c62d3181816f2066fb794602972094cafc25c31d94ceacc4b342f3dac60882a50afb25c2d79cb4b2e2f6198ae8eb03b8f905e1ebd741a4487664c88e8e52b898c97f22553a9d71cfa5738895ebaa43f2f815efa646a977cc9352f612fbd12b52bbec0800153b5b42b4a2984c1e98a2f59372cb89934d3203518d11c7577d3331fcd34185d32d1222ac6cc51d114038648c8cb161a036a30522d47dd1dbbbbbbbd5a91df718506a3ebf834487f9ad67c9c430f66aa6930cea59e2a2d8fa4b7ce65de49294bef9c93a9286577dab4ec5e89ba281bd4457d594bc949e1acd05c5997351a0093966b8a0f6fc30a1989b14836c9e6b40011867cb0a305154e0f1e37794b9a2e0660d70b4b9aa6ab014a5c0e60014dd70346d8d22e08ac20345d1110e29200ca052db33ab04b3f52f71a05010225052ffaf9f9f9f9f93132d2604b9c9a6c6340ff09bfb0a401668ede3a18cbe10e336f8b1ab43bc4287100eb013e02047c8508ec18d24502ce7599808348641f539cd368b773e39c8683add174f188f5359aae9ba36b748daed135ba46466ffdfe4cd70ea5fb737feecffdb93ff7e7e7ad14eb5607b175c34444ead68d508336c90a4d178fa299f4f2f022c0c37c002bf4d699b43ca61d03f8f01a3c8aa6eb001f8fa246c0d7af2fbc79073d6e72b5c1998ff3e1a5bca6e6e7a48d7d0a6b7817be4cc614dbf970cdf3e1239fc123c6834bbb26f0c55e9d2e66c2d205719dee8adea67e781d11100f33290d3161c26281a07b2a9583f490c2c50fc575fae668ba70d35c59ef84582c10744fdd20bd85f2e1a51248c0e334ee632744f38408f130131043bcd8e0fd3ef076c0de7a0b3e6f5de5c506c3eea713e1c34b396cdae33562ceb6134704b8155cf3565821bf01019c7dec46709d1e61842b0fc04d6f9debecc78ee53acd7558f3581ebb1d162c3be0a404cd898794e2c2110faf4c506072a3c20a46dacd0d8fac75d549a148bbc959db01dbe123c5eb32ee8b291648a2e011f0050820b196b01ab0a40b1e12061996f24c054969a08a52f622fe828691784898f48161d7fa399bcd8b6fe784bbd5cec0a3752e5feba2f8f8ee0b45f0786a5d330ed7690bb00971beb3e1a668ba30d39ab71ede18bd75db39a18fca321e52fe64e93c9315673bd9e97463b7736383eaee3de5939f9cbb38778bf322b55ef40dbddee9c4692e9fd3ba9c73c631d33c73dbed64f79e344f75d2b44c3b69a7d377d24e278ece586b9f18e061a65ed9fecec34c9b8d17376072183992c182e9a3512ccdc7e7bc7eda65526a9a952925aa3b6d9e159e5741916e65ba76513bdc7bb3c3bebbfe363a882e2dc9a6a95bd7ef186fd1781bdab4f1d6b310b1b5c11accd2aeed27c7ba15c5ad672edd5ac1ad67a1e962805bcfd633986e05c0ad67a26ea1e0d673986e9de0d67351b79ab8f52ca65b26b8f56cd4ad216e3d9be99613b79e8fba5500b79ecf740b8a5bcf48dd52805bcf68ba85e3d67352b74470eb394db78cb8f5acd42d1e6e3dabe9d6086e3d2f752bc7ad67a66ef570ebb9a95b2cb79ed7740b895b1f6eddc6a75b4adcbacd4fb792b8759b2c3640dd5ae2d66db4748b04b76e13d4ad1f6edd664bb75a6edd26d6ad12dcba0d976e0171eb3642dd62e2d66dbc74cbe5d66d86ba15c4addb80e9d600dcba0d51b704e0d66dc2d814d988b131ea9610b76e63a65b29b8759ba36e11c0addb9c894d566edde606f10415dcba0d0e62eb895bcf41b1c90eb79e61dd02dd7af6e9d68e5bcf3fdd3ad2daae44d07a98b7bc96b7be0529bdf55352b712e0d64f69bae5825b3fc5a68b1b3a0575eb03b77edad2ad772648ac23d068a868e84434741a1a127aeb5dd274714b46d38585d0744bc7ad7748ddc2ce020af1929f60a9a6bca4f46177f4d6f152b7f27461a2d90d75cb006ebd03d3ad03b8f58ea85b2cb8f52e4cb7a4b8f5aea85b0870eb9d986eb5d0398b09c87230e539b57442234b4fc526a1ec3ccd7144c0f10fc8ecf5c72e868ec7083cfc03f2513d583dfc0332cbaa4839719e655996659914e74e0638c093feecd787121ffe0119bb187652fe01f9f8470bfc0184c9ca9fc407e23acdc56ea789ab027044156400ef4fe2c76ec7052b4e3ccbb29bcc9fc4d8edecb877b743c45b73bca3715eb839b7c5d738ce6f76efb65d6d43656210010367c3381c2782173f7622b84e779e13fa1e650547793b3c7878ec7646701b6fa7470f8fdd0ecba578ec7610e09cb7e3c3a5548949bfb914d4f685fd9b77ce79a12c7a0ecc735c447a8edba478d7420baed39b15f92db460008fddce015ca77d2871eceda4dc63b7b3c4416fe787732d5f793b409cdb61e2dc9113bcbb9d267ec48bffde4e100f80eb343700e712e0ddedb8e04e766e5e0e229177bc1d21ce09f1d8eda4e01c0f5c00280af03a588fcf5d48c00e180c0683c176c08838e703ef50e252f8a6c8f3bc05af13d3a07504785d5183d6a5785d9806adb3e075440d5a3f80d7813180d70d1d11b93922727344e4e688c8cd11919b2322cefdc00cf0ba15bc2e4b83d6a378dd0f130070eb374220b8f59ba1225ec48de0a00f717ede7ab805bd756e68ba76c0e6cafabd39a752ee20c862ed80bde586de3ab7345d3b9426169aae9ba2b943895bdaa1c42ded50e2967628714b3b94b8a51d4adcd20d167aebdb951b261e134dd7cdd15cc1ba75231441ebd6b79fe9ba196a2d69ba78c46e4e397873f41613dd0cbdf57b734a4b0281c3b8008ebb1d284ec48bb27bc271274ca338615fead68d5bc74cdd7ab975dcd4ad935be750f8c6068c2728ee0607719dbee97654cef9c03df0102f7fe01ff887c76e27a5e254d887c7ee7e4efaf307d8c693ff01965d0f4779f26df0ea773218fe09e976709c0b01731f5e79788d98635d050fb32191587fc22346c46d2ae56126c223f6f623c2a3082fc51ca510564694e9d58e134ffe7bf28f78f2579e7cd0938f51f23727de0d7192e73062141b1ae23abde344c09d5cc64a048d0660119c82a7390144c0428464348e60215e3c624414425ca73910f00b37d56ee7c606871c7ce3c59cfa914c1754dc7cf09ebb27fd1f3cd0089d0b3e709dd67154f7a41f67c9e190a03e1a197104f601789a0b00090e12440b0b07616991431095178de000789aa3708287d734f13a98d7f934683fbcf493939099420e95916e47fbb21c2178f259ddaab3223f04e744c04c3ccd5d4a301020b90908093b3e1a19f103e4086e799a974002fef1c3e7c7122323603f72f0124f731296e054ca86540945a8498d8095789a272901fbf081a6857db4e0f0d1c2d9ebce7d744ffaf3d77998e90b97518c8dccc22c4f73242edca347173d98dc8f646e00eb91048fe0699ec304f3e0816402e6e14513b28f648ed6f0709de64cc03b3cfa448ef88fee09fd1d5f078b39d68f787829074de847a322da78224e280958044f73231e6e6a8271703ebc64e345ceb813308e179f8827ff644696aed3dc0958f3b218d97e348aa979221ececd89c71431c73ac8238b71e15658f3788869904751ccb15eafc8b8c9431e456f7dd539e9c74b98a941eb26c8917d098733627383b604754ee21c4ebee79cdb3ccd35cdb76e475b610f6d1cdba03ad035075720f7a9a0701a8742a15cfab471f9d38643390a9583f36b3bdaf524909528e732ceb911f0e669ce69db46679c93fbb2f82baf1ff4fab1d71f82179f02c00be783f0859d0d6fbd88170325e22dbdf5cf0bbba2b7ee796167f4d6dd1be2f50bf1e27fe0f507f1e2abbcf840bcf8b18717bf7f0714cd37e9dcc9b7546c723a75ce79fd98f3ce65b7d36d7e551ba77956e6f3fce68536aeb24175270ebbe6d835d79edbb20acae69a6b7743a1b0c78e05cdb1ebf4e661bf19b2d2732a3649c51c1c1c9d566e5e4e9357d3501e761e9e3cdc9c73e9a950dd69cba4d60377de6907391a1511fb900718b47312e5f84d07775ed7fc7ea1945ebc9ea671dc178ae0b7eb996b1ffd78703d525aeaf005a7886638611adcbcd42ca3db903d218738611e45d4adae3a7c3b6a48e9db5160ba25bf5161be1d270c188cda21f7b05e2855d55e8a3de43c547598abf6d24bbdfadd503be44a838c2bd037ddb634b587156813dabc6c431b182d9db9fceea2f8f8ec0b4560b72c0df606f46d5a42d426f48d42e990dbc32dcbb787a8a16fdfb26c409b9676e5867d6ff9768aa325f60cc528db63b7f7bc2a0af8ed2d8768908bf227472314acf9688402352fc247231dd2fc4d7aff681454f4dccca44f6e62bf2a28d46386abe717d72c73eab81e207e3be9d84159bd94609476fb8159b858c42828f6361f8d82b23c277167d6ab7399a779cd2147e7248eaeaa4e5d551dfccc6dfda2809fe94c2f7329dd3af8f4a36bb8a270c8d56328ab8720033d1f5f7650eea5623f95f5ea5465bf28e05707bf7e6083311609e5d0cb09460cb18b3448acc0082213d8200b971258a1822e6de04046092aae2852b3b0987467403f4e5cb921290d2f4cfc840182074f98c00b2d5a9ca14676861bad5a82254c5000f2918c165bb4e0e1816068d0e808498632ac5be2f4c9d23d15140a83c1b0f868e6630745c2607fc5112b7eca2c8b17191d2155a121a22d5ee5bb9265ad48494a52faca182d4b1eb1d9adb5d60cdf9b69b5fa90a48f9e752745acd382896c0ecef842c59ce1023a7900f3edb4c374517714636c0eb208e37b4716519ce13854f44a51a7ce4326f1d334edb331327d8c696c98658c6b3cede981d3e2694f0b7ee62461017b20c415a53909f809c2037e7a04c3fa94043f5dd29f1ec37033906ccce83166769b51070f7925856e491556c842a847163ebccd473259c0d0483a9bce59bdaffe546acd497a98924adddbb3d2eed94f701d593863a6657b6da6b6518371ce8bd44773ce39abfd12c5a452da3a6f967977aee49cb251e0f86b29a753fa517c69c5b3d3542963adb54a4a294d7537f8b160f6d79eb5571ccf1aec0eab809d71c0b9c3911966ba94525a6b9b075c8c2594c1328b34d618e7cf8c69add44bdd3461b7dbe9c984098b0582dd03a0f48752a323a4a44c68a8bba8b3ac6b96654a46f2288946876920ae2cd06043e08adcdd32ce53a4e16f7ae028c69194a398d654663db670a5e1e421de0cd30ca76badf5cb33e3746bd669bbd2254f6f984de7ec76e8a4f35e2abf3b69537ab34a7d6a6165a419b5b6d2ccdacc567abbe532e644ea74465aadacb5ab6c154c195053e8cc1abdd4fc22d8aaa0d8fa55c1b3082ebaf28e974fa76d239c54e304411206270641f2210e52def121ce7bc76030d80faf7982b83243444412cd9820aee2eff81a3f9c20f40b32abc4100789474ea968d974c545c69ff5a67c66b1a595524c69cfeb34a59489a462f3b1ab36762a0bba108b5ef7f3b992b98da034a3d7d6fbdd23567a2d12579ae6deb3e9165cb76d3aa3adb5566bad4bbfd37677ada8cb4d3a27fdb20696e6fcc25a5f48fa486d5561aea267de0c0d46d78278f91a87e9f4a61fd2a792468cbb453bced3749da6b2e2eba2bd923e35ede5773735d9b1e9697e3dc5d4d8444a9a533127bab59987d6663d1fd2d983569a691aeca40671183166ced82d5cbcd09a65599665a9d4bd2864d99af6e92cad8566dd68d2a861f221613eba986be6cc47efceb22d718df49159a8ec8e34ab99cd325b977c741a64ce944d0f95d6196348e367a404b96b77cf2ffcc254df2cbba9eda66d69a5edd9a75a4a2995a19b055e69189d46b79e6b74ff2f080ece4fc7b552cf7f4b0dfb696d2991489c18e7a45efea6f58ba1c7cb507fce9e2fa8d6668c837132c6c1c138631c8c536666367af6e1dca0f530c6186908627266b3cc33cbfa6bd31eadac3293d2d66ce2b6dabd338bf5d35aa3f87ead699bf751ad6a56d3b2fa31cd4be974bae2110c06f3e1155b521a942e43cc913e6db2228a32a66f85e72f7d1cfb5501ff0bcd34bab744871cd210aac8b87ea12ad259269323c09129f6b075e9619659cfac53c93e9c06a9758a735be1d568e6797a997c51b75eef871b5c82ade70627cecc387a094839c45d1539c46f371ce73cbcb7fabd1f4ec655f0636b8b7c54156930fa1115141bd20f65c0a1def3b58b4b37f770f330a5dbe6746edbb67da1f661cfa8a535bae86bd28e437e9657de0fd3d487f4335ba374cdf9c5336836457eb4d65ab194d265a8b8521d709c27514239c619299d9f9c7376e1ba5cb7de025ed785d8182594a97352b69cb3ce8f31c7528f42d0c8d9cd19dfdccaf7e757c7ddbab9c6a01b93434ce91453c6cf868f5e5190716aa52eabb40ddf4a747e58ca0fa7c19e6d6b566fa532469b1b67ce8943299d4e854edcad5a67d3302a9df299d75abfb849a933334f86fab2bea4d3059d14e3c4534a4a29a5544ada30fc516a60aeda979462d39284c5a52897967e989ae4921b59f6eace7035a0a4a494a4032efacb4c8232294a59ab9452ca1865edf0db7962cad14309e4dd8a2f7c07a5d65b6fbdf58b111604173d19eac7482fa5f3de54ca87f8b044872ca991121c993670b75b32ce8c02e72ad2e90ddecf67ed56419329634c399125cd6a66b3cc566a468ca9318e0518b240f8424a69cb3aedd82476bb9c5e3799ddb2e79c937ac7e3834a2b75d9d309fdfe32a9ede003476393fa418c5ea32b82105d278f391fc312360f03c07918c7600f23169d87f1061fbdf8e827afc3e0f5c2509e385dee5cf44f023f7f7632e6549f14cb8e05af1d144ba3a4f494d5b9432516d9ae5966b4318bb15614a898b984b21a8c4eab9dd99c5fadd72dcd94b6aacbae421a8d317e617bf79d3326344454ad56b5feb90d94a3df8fce3953a939bf5073fa454dd3b448354dd39294969ae69c3395a2b118a3cb59358dd27b959672fda6fce8446d91cde563df2e93baa5ce238e1863ec21f821eb1bcba2798dbee5918cc1a65ca121a21fa0a01c97523a0d9b11e9c82815d440dd5c421a4e1edb87863532cd965884bf507241f3934a9faf6bb64431618a7c8540d6c9ec081d1d9d6e49d796b9d53c6e9e05a6b020969a79aeda897461cd55bbf5ba8044ba64e93a5dd433c82ee3ab697ba43dbbc418bf9ed6e56d0f73a594c65863ad2d1b6bf59942aba98e95b4886b189e8a0c1453b13edd0af57086cfbe10fcf87befbdf7b35281d88c91a3c7ee5a91d6fbba157a8e84d967857a68a54f9742ddfaf4ec7eec5a882ff9c5b80aed67a57e5da4f758399be0c2ed0b6fecbcc3e95628037d2ad8e3dfd377e574aa7e1bb4f8b3a279c89dfc7a3d9d4e1f96ec1df759d11c86cfbe2e28cfa84f8753d7755dd7755d773a9d4ea7d3e9e4359cbaaeebbaaeebaad3ee743a9d4ea753d7755dad5e6f6dd1902ebfbba5ec9eddb34a99654ea775dc6037cfe334d85a72c8faf6cd711a6c4781355d77aedabbdb639742019143563b4bd64a83d0a86599a69a4eb5ec88c69a5e9110a41e16f93088cba52ab314ec23cf22cad2290070c8451a948dd3411a0a2e4f17fd4218be37a79aadb5d65a6bdd3eceb50f06549e2e5b6badb5d69a655996655956c3193ec412e34a7a6c1d7cbcb0d450b32ccb28a58e039317752c3cd3adb5d65a6be987857af6ddb98ad65a5b6b751c98bcea87a5bae54a2821e4f9507ac7488274eac59824ecf9f08b318974d93d91df5ee3ab86882434079633696e40c79717cf97f63c57d17b640db7372f38ea5ea87de195dd8e148ee7c3c845dcd8797a5ed8b9eedb60fda8c8407ffbac84607e9711e0d849c1df951ed8eb0a4f0d754801060fde90638e3a5ed8b1f4bcf087a5f3f859096178fbe12ed83baf06092b8a01fdf8dc60c3eb4aace3f5f3e3853f1db063a9014bcf8b73cce485bd06fce5b99ace711ce7281f72fb7461a921470a3296a0010fb43802e9c5b94fcf8f8f8fcf0f9317f61ff085dde727f5c2fe735fd82b11ae3e30d80b7b10b017fe6ae8e982831be26022052bb0c1062f9f4b85101d5c5e3e3e38dcd71554130c967a5dc9d6c0602fce7d70005f57261db017e7383079711f962245e4408b9f2f597cd8e2f5a56fb28831262905539421e635b9f8d4c0e708336bc6387a4d1444b1050f6240d1850eaf944d818f7c135d3ab248d5ad25e5ee231933b025717c777777dfa08c3f9229a3c6b7cef8f679b5639c6e7d61952259b3954e9d14545841e654e63e922903c68720124958a42d7c7a90e50d159c404889962b5e008b030e2038b8c091a948420755dda1e22acbe4a0a84c99bff948a60c9126c4419975d0f1566697301f9deb80182058f3ed610864d02da554720a7b843431d14c16df552c7dbb93c88619b18c30df0e46115fc851860c221a2fdf5d7c116b00c53716597c7b175e7c1187956804b3e16598517062f085096098b043add9298432c68888450d90d40064e3db3f31862801ae01044b0d6c503024893805cc8697a171bebfd0036728eb14c220854d10ad2fbe65f78453f3eddd39b95ccced1482e0281be3db67e7c49ee0fb491d621215c06ab937f87e32b9503a29a5744e4ae9a4b206a7f0e713df0540157d37f9febe67ca2c0917503be43012f6f2c99411fa48e68a18928f64ac58fa0aa65bddcdaf82a9b5123558adc815a85b6105f312f69212f63aadd341d3c59a49d2a99ad824be7c8553493a3dd32efa6a2e625e7a0cdbcc4b8f619f79e9316c342fc356f392e9e7254543d3c8353edd59b4bcdcf23294a1540aa823a8840c7765490c32a5660680000008002315002020100c09c582e178344d04c5e20714800e7a984a74529989a44910c4384a19638c31c000000110019a196d132af7690120ee74a835c5af9be19f9ab647821b03d6d8c93d81b6b8d0a8cd4c6d06fbb4a2119cfa6c52f9e3813a1271ef9647d05724ca87f16151dbd7b7c4223a63696629984669c69f38f53d083e156d27c07cf1ba6b95d53be78e79bee2b2fbba80362f430d4e537a93c49ff6ce71cdf2536ddd8d394465f905d88135bc4899a30b62666d361b0df7d8b20c7d9d7e604d99835e21fef701cf4592a79c7a7550aa12ecaf725b5b1990148dbf1cd14390033ad09bfbfbd3845c951a6de8939708953ba52750998ae77c3363dbf1f2a8e9b66abc81b66fc3f89c35b100a504cdaf22490b2fd49351382b9d2a5367e802e0c204041202076b0d740aa0a2427b25af83b6616c3e0f5ed9fe3831f54627a60243204bbe87c0b96b56764e66d2f5bb34fa6f199040c28764f7f35fb2836d16bfe4d90d8aa8682b59a6fb6ec007d3ec2a81d310fd79fa72f3705c7873489e78e4feb410b23e32c4dd5fa10089d3aef07e9bfbdf0af5d2cfcb3d3156276e003b36d60ffc1790ec48f603a3027b4fc10dab4a76ce11c6196c33d258730f982c59f912161f982796517da77221cd58bdc4959def13f8238f2d17af2d758491137dc458c6b324471f094a206f0d69d77c890248013431e872a448c9fce8daa3f103a58925a134a39f51046fe4c9809b1834512982b978f672d4002d18ca576fb014df75328b1c05a223ec62997637942820fd612f9c846968ffe8b9970c908da5a001d724df66ee82f6ae9c349d888dba18850782f2765aa6b694decb1444d696d17ac1f1778b0463bc48c0dc70d48a7179c8452401994164ff82c706441e495ca8f72df575626788b30e498145e43d762eaa2b9d8e24a90176dd16053c79ebd0e64eda77f59cd6f8b7e415d8fd4411c73da76d92def7dd538f09a508dbd347eb7a36da4ba1283f9eca17db05bfda0ca83f5174ec83a1478df6911c362d5a111468a3630229dcca4d6439c8d08649723aaf82c8c5ef77bb7737ec56615eaff9d081144bbad34f46f1a510131f9dd6dd54ade4098d53914e03868f61e4e657a8df940c9dcc7aa1097d2e492afe783402047f3fcd7bb37120492503a0eede32aa9a231809318e137624638a56f4c3d8486df41840852b7ce6d135e143d6d03a4841c8debd347441dcc0c3a01c62f3f41a110ccac370cefc95c89580f1868c07aa9d59ea58e15b456db3e37bdf3929415e405f0a0e26ceda283044a413c53c2f6d8c33de84e25ba8a0b4658d3d7a0cab6f8d82b20983404bd71a76ce813686217ba15196a01c82b9a517a1d1ebc6151fff856ed13595e67117d2bc05afd12a8724f18b7ee874f61bf95741cbfc8f22bdeafed76f2d672521cf64932d487c223badf4e917dad47c5d0844b767d9f6a2628a55577938f18928038828a4a28609adb24ab8a320780015226a798eafb9a769d6bdd287cfac5e0cdbc431e8d116cacc8d3011759d48a46802d84c16fa4570ec5c55e47c61d600f1a7521b5288dd70aece09ef11532042cc9de3fe71af8403dc4381aa0e1c3ce178a9e760d3f9b5ae0f9c6d267593cd9c87ea02414d9c62d09f0b20a073c9cfbc6fe0529743d3f40ccb5421d78e80b49242f4d8cd1698f520e7066ed94a4dad0e44e998afba4542eca6586511c070b32ea39b8f82c55128fc020dfb36d0887fe60a796c88f39c0eaa8ae0124c4dd2255239b84d6922ea65ac4f0f1daa3554d73b4954cf6706f789c5d7aca6a3d2e3ad26432e829ff14176ffeb3913eac1784025a7033c49d027485b7c0e6a83f8a493286164037c23f3e35913c36db6ca084c8430692f9f950eb9930cf0e66096cdc1cdfd68d999b6dd11bf18191dbca081647486c6c41d74ef55c0086abe80e3cf7af17dcd01c8c48a04d2c77117dd4ae09358099789c9a319b24d816e4a55cc9de288879e492d11870b4679b7c71710953c23fbf628dce27a4d67f851ad6ab9273149f52f78f90f4892f9a72958fb1432fc4400e62f589f21e8547cdde573a5273921281a46f2fe2cc9e132445f6553f0daaef0508d4595feb40256447cfca5ca7f608ba108acb9ae03d39face9da4c84bf32fdefbc3fe47e63ba65ce96f839c3b25f55102f805d039a9389d3cf117061cb2bc9fe5678226b5f70a0183cf10f0eef96de4b81b74ed21f46d359b9acd31780b8c9a9f879abd7d2e67569a48a7f1c36443518dc02cc5e05920082a2a8df06c9cc5610abc080fe1dbcd110ac256824b67358ce09a130734c831bdb4ee9815b9b4881d8bb29b06666bdf9c5cb0a999354841eec7d1cdb09777560b07cfee03435c606041af95363db905b029c620a2e1e0720edabb218b9eb3773494605217ca8ec544ab0ed64a9d7d5fbf161f1ab0bad61ff1409b8686439e4d678a866dcf5c95e6520087ca106873465e682d1d45527122dd0c2ee1116b23e1e7b7d60c5a9a7605f5815fb1879a0e1dcbc61327008fb634d82c80a3fcedec5aa513384e66cbc0fdd1bfc804acf24c1852037e66fc080ea22481ad1708272fd01962ff051d6557fc3d2f1a6226d133410c5a903a03f6ec4ee542b27054b4bd2b041a98d81c09b6f0017b0651e328ba7333a32de00de561cfce4eb75e407699ce0aee926f6758bf491b3580ba16dc4bab64fdf641d2a18e68e3aea0d5068f1177c159fdc0ad58f2d0330f133a1793c1c100cd4b1589f172d2d1827b2144d26fa79e8a7a2d33de7702a11427efb04cc60d309743dc7882f1d26049d73fe9b57b39f5dfc9bd503804ce207e29948c464bc469853cdbb5d5aee8991657bee88bce4d3773b33d0faf8c576af72908e1e80b50dc1261c86bb731815f4eb1db39c57850f3f243ee525da8dd5804920ec4efdb35453b01db8b5477c61377a59dfdfc49e377c4590dd024190ac6ffe24727c677023f7f507990843ad5a936440c2874db33c4f90b084806ed1904896bb6b384795ff54fbb186767cb4073b5be25b6c9305902a8d8fc1f90e4a1f29782af8df46815621c486686b8caf86791bf76b036fc484ad0f3f3fff31b9303775e2b6465d9471084a295fe4058d7fd0937fb02ac775e58f28b44fb2af86670bc6447a392d6527492b83ca34affffac9f49a4949c673354605f5beab7b13fb30cae04e4d4c67f80bd0b8b6396d03cb4243cad90a5d76ec6ed8f3e0401fd1bb16140c7bff5d1843047e0d0fb727c8b15f48b768f356abd6767d3a958148198ed40917290359595d8ae6ad1b73eb444fd36f92156f7735f29bb337efae7103b209e690fad4c51ae294ac66032d014498ec7fba5684219b6e4b1df0bb6db8785dbbedec9b3193c8d12baeae4f06e720dae026e61b6d5b68cf282021b50f8685e0a3228f2e6a63c0ad0cbc7bcd705704af91c88393246aa81896955f8e431bf45b2aadd7d40dc188d942c1e7734dcaebcc34e922b1d13edd3d674bcb6f27db6efafbcb088f9b374f329702a38de9a5d68379e9b2c1dd964e7f932604acf72de1cc1bd0b8d5c29d6b7853cd380bf6d4727cf94643f9a44bbd2137b747ca42b71c255ce0f2f483f4506d4c76a5539b905dc8fde9cc5a3a2d40c3e4418013bc935f36a24a50ea45c626d2ee3c399986d10420eae5a5de6c92af31f2366242c9d8e2fb1c600912477390722dd556183be27327492b5befd4744d5a0d8bb5a9aa3466e8c32a418f6aae1bdcbb01a8caae310743c2773badb0ce818808af43da320c1fe1aab66304dd0e2298cc2c43a0070ccb04eb265db263a195f18af9dc2f87411972c4de59d871db004d6c234e0674683a7592ec67c564b04909f6c4bae702dfa7d656ed4ace9b3a0795785f9c45a311c9853020b82d909bdca360d4541f634fe55ec01e0282c11f971c4ff69603370f8f84c2118adbde8ca943595eb69ea300d1388bfd485979623a3846189d8f41447190e5007f86d2f3f9cd9ca7da0ceef708def0bcd75763ae857b560934d3aae1a3d5e5d25546eb4691431961e61fbc670727cc04db429a1cf320e8a2ed92f6caefe2e3b4c8a09be85dd7720d472cb8f935f6b3ccb1e1665efd1333c635a1c56ea545513348ceb295bdeb66288dfccb26c4d714266d9fc883bdf888f22d8bea17c3a5c74106d8a413645827e313463ddc29742216f2d2276dd41eeb6dde40b38353d8ff78216e11acd9c3e290d54bc13034a5e39c9c08fa7669f369b4e39c80d985bc02770bea5f1167ef7da95cc0c175c49a1b6a912c3df508f7ab7c931a4df52570b7bb2dd3abb79b3bcc3a44709459e9cf8fe2129ffc21cfa19216b1a33deb94be114bc67f34011ca99dadcb0c1cf411f10b647003557b382ee99ce1f3b2cc19fba595a24f33bca5e12bdb78bb361f1e1a9607b6acf2d71a1f10b6205211b9724ae51a1b07889606b18e4dd312f3cf6b58c26482286915bfc9041c6f94d7ccfc019134a0644c5c6df12a7728e8c85c24df6aa038f9efa566201f891d0554c78963d3ae0e674145f47d19ca1f9f42ad0ebd529873fd38b240b295400ed2c49b4d22d3a589cf8fbb841aa7caeb0b9c0fd74e30f398d15205d31deaf11f0fbc62fdd326d22da8837c0d8eda902ab2c84b8b75f8bbe9cfca0d5766d534c422158d35a2ebbe16fc49f690289f467a478aba93258b5354d5754b4dbc9b54bee2034b6a0e9f2b24f1ca016d018403415c8c6bb5ba0dcab708fa588a86247e63545fac311529fdd6dbdf769a6fef1426ea94b7d9d8e153c3f0371358b364b4141a7dec54303badd439d3112cfb9bc067adabff78974b4cd78a6176f42415b338c1e7a8513bded7ad95fdd612352dcf06e8b54dabe7fbcab8c1801728c6641f132f1a3f102c936d80b2c488d45b8212a2d20f2f74e3672251b0fbc9d464edf4452692aaa47b1d227ad14823d7a936feb014b9cbc3ef6225467039b4b82f52895ab09734393003a266bf137eb7989c83091f4d9978cc9228fdc959dbee22e3ae038280c960b20887067d3bb6d6dda33ba56e455ccceb4fbf62dd7b0f7bd3bdf5c2739e94e79754b0cb8b68282a30b2ed11b60fd1cb00f2f92b4001a96f170498089cf61e090abc3313325253c3bbd7a71a672d2ddf28493d2d923cea6018c5fb31e756852e285f0e99249ad138e66d23fe102b0296b46eb315a4c5bb3ed4defddcbfcd1b1b2716f525141fe4e405aff7ce31dc60a3aa489bbdb337ae54bc2657b6ca74134cde0277efd6a5278e26cf53fa0227f05840b48070eb8ada4c6e6bb2f0ad5c5f04a8689df889b81517f35668b9fe339bc0bd7db90e8a4b7de8f832d79506fb98a1499b80bbc3613f444920ee2b5125147f0418d2c6c81e5d58322726b39aeba30a3eebe2b13e5b7b741b84926db838402f68998e06e91de091fb037cd66cca79fdf28e70d186b7b04204559a065ea74ac227565cac8d94519649a1f3e794719ec2e5a35687f2c3c28d1b825e9fcbe7c7476b61da07c3c08bc735f4ca199f3f88327bc53a1276eb8ab9902a8cfd166c2e650872b619b70f14b87aaf13efb09c8300127e92178fe41f54a94c24b61fd4ba8aa6889022575d117853126fb0c0918e7223a677652a7b3822159f45924b4209b5d7e52e8448e8bbfafc3485d50e2b4faaafd4d7a44920ac55474bd2043c9dacbbf817dac2ccc008c8c9ca9a07b1ef57afc3a19678d2ac74572e6fc46a5d6c769a3f36a7af78a039d0020ab4e63a0b137d7b3099fec9135247d4424e316afef94f40fc6c331d0a3cafe121c50034d2584028d24dea06e7ab8f4f9fba1f855548b6838f11080832aa540311b90ee97a3204eae1f6c8edae815ef312091a8e3126d88e6bc7d449102a6ece9283800d8310dc789d99282b9e63df4167371d23d27c0089de42a3a398bb44442277aef469420d1fa4b22912247edca2994a0efc8fe4a285e61daa0088a24855ffd75cd38a46e265490d3e2a1fad8fd597a291b8d3dafa7c30f72ef6bdc9e6d64beae386a713bb5f8686dfb9956c5052f04b17990b70ade29c60d88da320915c5d2cb0879765258b5ec304f84cfadd3892da0e8eac99997163964d7c55e9b83a793415638b7391002441b7baaf3a5fa59e188b72856f481e73fb400e50c73e8b5abbcf984932cd4a2bbaed26b24465f9020c3188274fe2afdea5c6dcbd5d351c1e7ccab740e963a3e51e9515b0b55cedb81308ddd46c26245a978a9fc3912f02632526c022e3e4ffcd1ece6fd6d4b1d5207e11fb73b3e428ed7fcdcaba102ed7322f214d6a83da6ca50089546ac1f5effd806b79c542529c93de198298bff596fe3a722bc435f950f3ebcc110e561dadc97ed9a486b18a138d38a848d65256f5fba945b63456b706634a76e9286006829eb4cb11067d0826686b3fab5795d27b102f3faee22c1d169c172dd2f5f85cd75f8041f6a92555941ed226d38be3864297320f9239f77d31fccba73d0c27b870e1660fbebb85c7e47b66cde7a5a5a66937b8bd671c7f362e88973cf62596031a5ff30677202ca1bd00038b97ae1b77d15d22c1851257937c256f41c87f633806c2b9153df6464320987ae2786055320d224f5855741aa3c4cacbc6eb8c15b0a108dd3848ebec19197d3e576c6c78238fa0a3919493f9246ae7e54c43c81024211884c098625ada13addbbb381792a8352c1b4073c8cf0492e1cefaf136999ff7dbfd3d58a6c1ae3bd83c0d2aea164cba0f6ea3161dc97283fde0123967f3f8205d727b2d908b148a3f043b0842b3aab7250c4c90f33726da76180c10114e1030efba4fd58a10adb92e68265e9c13ed1f5e842af22b3ee2efc4f5e0a990f260248169b70a2b99c4d883c8e7c122177a3b85bfb4e7a703f68eb5c77230b38207b826bb9e9bb11047088db8e2d588ebf093c51c82d82783d008c5cb11dc309e7f6e394f3bc98ec192e394f23769ad60e1bf1370dc0787c3692d9080b63ae4bdc36350b64c6738b5a6d53278a928a619cdc9aa8a2e2a465b8dedc2605188a616a6596a537c02c31486348889869f90000e0457bb66c2715fefe69a057681708f4060296fcae9de18c9fd10b1cfd2dc5d16e8fbf3a98718e51070136d283a847aeea6ca7a30c70772cab0407062f1b6480ced76d58eeed07d038c1d72a4b57eea93ec11e47d1b78c46796cfdae727a688e9808f1d32fa10b93934f0e18c54c874956d0f9985b05493069e8145377567e429db321a933cda4df80b80e6c66bf72ff21c3b57da471004e49866c5a195ba8336a239919616f9259dbefeee94a16ffc078b5c6e37764d6c2cd659bc67e2568f36190585bedbc4170acdd50ae05d5a44a0be9dd801b8a2854960839e67da4c8e665ec69e17f9ed54b5b762d03881bb25ee483ff5e0723436a516a65092a18c928b26267e5c86f91807bbb7cf13bdb92b3e47b2ffb424da660644770e6527ed7386752328b29aca840016a929bcc1e2b1b2675ba001627f61863b99a7452d3f83383143807c85375026b93e52ca050c3bdc151f944ff874c400aeba31c43cfc851fe1f3c0d72fb65409b5b95e4619d9fc95fe1c17191fa86411b38b1b246465435499f36d67b415674aebd38d6d41554662ea6fcd88d9f96838df0dc68208af894c8117f46607ca25aa07ecb9be2f208f2e21a3bcad2fbe0fcc11694f89c8c0393722db074b8ec0db63c6719f6f2ab788b2a82288492742ceb883d4f1d425ccfd61d9917d6b3b62d3aab62fb78cd96c8b1a6d2e5a9bf4059196e4941186b7b4674e335139b95c6497ffd885d7eb52b7596d44088a86a066a013b958108a251b98bd636ad100a0cf04540b398d8731a24d2a7629b35e91deb6bd09127214d47806d1695221db08583c55abb7dbeb84a8804cc1b8c606884fba5dcb783e9461e6c49581a24d263070e4ee29c2129da460fe876614748aa9963193cc04c29551825253fcb710b8079c802431eda07ec559a4b9071a5362838c0bc7c2c350430322c4877dfab0a2a1b0462684b4040f5ea1d3fa1aab374927ca5b74d8e9a287ec700d7e2f3a610fc2b83b3dc3e8a090390b25de9ee9633b16c146b11b1129a20801fc78892f2462b3809166c4b38470b320450b7fd7b178e5c83da2d6ac8cb84b34fc2b3c40c858f842b2bb9efdbc8ca2c250b290b5c222a3d47f056d8297f44e1949205685c238c6a984240c7d18b2a8731bc0200a0f46ecf4fba91f499cfff2fd83a82ed2d83b66148e2bb2cbbaf0bbebecf15f85810af2c53f9a37265d60cb11984132b8c9352925f24bf51e7134eb1d39df76dc10fd0c661502cbe42e90f56ec22d68f796a0771caf230a306f1d27712647d0478b156ce46509354663d4cca6aa4659acae27b2a2a78e45de4ca732fd7177f4749dd3e45e2d435dc29100357ed8a07db50a7d8501441b8808558dd29165ca95c8ef7805a8951241f0d5a898f4c6400093ba8e34e5724f515d58aa83a21a8019dac09c94f24254b483ae71445a8e6f8f886cf04383ab3058419217eebc495fc21f5e101f994f512b7c36cdf91b3ee4e7f7877efc5bb3ba610172f419344390f850d87eceab5e14b67bac4542619b30084198d724e589d2d12685aff460a7d3dd08232bf227544aa536021f0bef6e8cb584c1b0b0e35f45f3ff117fe5d00e6ad1cb487f0fe289615e262bb74eb64d1d2f6081e15e4e6b875c2bf8af94f2a68a20e238959fe052eaf8ef5eb98bf607010abcc757b32ef3811fde6fe207f918e88ef397af786ed769b0cb24e94eff0a0e73c97a3540a886b9ea896ec190f5e2f605db1615408ed911b6ad7353919cb3dd99838d4ef22bc4ae30d3aa5bf6bf0a9ad2219fe8ab3b085f29ea23696e27d42f92102007554ac752de923a302822e932b915960e9a6c1403bae166596e724aafedcce84fcfa06ad1f94da719815fab4cc516ad7131fc75508f403ef0d78cb8875c640c433180d6cb43ec011e0fe5bbfcc87ddc6763c067c5664dc773478ab976247eb2a3e0d55bd1da4c1a424927b860f93ff5e66aa4e194bb65c676418e2929280aed8b4a811c8cd1090ebdb6012fc406c0486683434dde646660f5e4b20852c54ba9e7a3dff1e2c499c05b8201219a0dc2e104a63b998a87abbae24b6b76da59a4da5fb2c1c6f62f585f67bf6810f54b245c4db5ab912a494e95205414451bbd5f3f901fe9887529f126618173b04b962227fca7163a09b5401c545eed4b408ae5af042ef8f0c083447c4d7475bfef383a558c212aaeb2a6e816653236bef7f6516e22fbf9a788b89e979544e0ef1b42ddb773c1819e592ba7c06297e22de4a9d9c03fc5d8f52924175fd752b0b726e4d4dc063d371c879759c35e66cdcab8dd38dbc61f83bdadd49a6b563087f38c79260684e5966453fec96d84782fba5829a4b3be0e69ea5b0a1a282be5042268e923b6963d03d6f70bd04e8c08493d7ef03762997adea07a1680f4155c2870ef58600a1c314841f28ba9590f345a15c0b0de396b9630a6426d65ba63920d8d9b774bba71b7445d987d3ab2369e767e8d3a9eb013568358e403834065abd2956de49a18ff0d42200144aef7ca9f59f3bf84eaf7c20f3818d1faac373c99bc9588946df384595109522a2f14b61b65ce12063062b5fa1789237fb10ba4212d0c365ecc227a7c744715d77073ba8438938f6209421a80a1e72580f93fdf6ea55b8ce91111665c65c3f20cb3df35c29511508592360e0cdfba0de6d40967a6e92931841eb65ffcd53e471042251fdba03222f77fbe46030db11434e287b4483a1fa1aff58bc46d79381d59964fa48120720f453eedb3ff7df18aa8ced48fc7087a092f0481df97093a637e978b3eef81d165cbbdd4fbb6aaf48ce45d6f9b2402349d66084ad9063b7372c6f33819c51329f55a13a4b1898776a697d090a4ce4b37e6a62500ddd2c0b103aaf48cf4a15675319f91fe748fda8bb10456278b0d4f6b03ff351b31b6bfbf68adda1ad090057744acc58c2cded3a9c86ca3e4300f590c6f4f373e047278e3c8a2fd195d51a4d6884af682ee289ab2a37dd5df5ae758ca418fdc10d78891798fcf982c75ca8400cc49175bf32eb95e354667a70ae588a4bce6f06c711a01f9495d6319e3e4ecfeb94cdd88b228ad70b79260ac971a6eb571e5c6061fac598090a9b5af2952ce8dc21f7403c10487045c33a55fde73fcdb5a55567addc5281fda44d9b2d819fdffe692cc576a17f83309376d4a79a60499e7771d28588f90b70ce9e2ccceab27110385707fd3a637dab289b593a8ba147480ad7d8ac0664db15f4d68e99d26457fbb31e512ca84a70cf9322c7f0026e12bc3b43e7c36440c22f5bc895153bc6aae9ea360465885af52bbdf92a3c83986867f8e66537a2240bfaf665fae04ef1cc49b70660f5197290dde1ed33255caceb0194905c829566907cd21e6360bf2d681ef45fadc7b4535f65ea3c563b4a726b76e911a87e4576a8a21e2d562b660d6a4e7ed6e5d11238f8e050148df5b4b0760967f3a8911e69183213b87b82eddfd97c14855d8cac0e186a36f83461f6ec09e7d556966e54344b679f92cd8d64e304989e3739ddd13a36468e0cb1493cbb8aabebeef8d070420d5c318542210b35abfce11a119d6add007a778fc998c7cd06ea0e1098ad7cc0ecfb79df8d1e1fc356f17d433e31a886f809f7258a779dda564be03fd9c0f5480dbe3e43719a31ee4bb2f7a775a4fdef485b7e54524d539dada14fffbea9cae32e0237ef987185b6afdc027be89729da8034a4132f31201883360526fb645c68e1ad04ed15da738889832bc4983da197ff7b1e351b503fa61a319eeb348d8bce23478dacd82a1c78673412517de7c6dbecea802430c52fac4ba3a6ccbb755b3258788da50cf139c22abc413448abcaf0977bba9ba3649fa0bd5ac8beb76853dc30b5197a0b5b1943757f8514095eaad7b1ea65af98b4c93c039a69bf44c801ca72d45a1563dc0edffaa956abf126b25432002574334272e4332e637b2cf9e2b150fec429639ee52328de55b6a206b85eeef673ee497e71972b5370326a166a0792d3c7c294a801a8533f89cc5ed0bc9401465c0790c6d9ed358398fec184242339a9d2e6b5f5c15e86bca0c4a482bf894a174d8445abbbd14bd62c1b3eef0ca51a0001536a5c9a596181810c39c4ee0a2e1236d1ed57b809d02370a904fed10bf7dcb63a4dd5701433c9a6ba7ddce5386087feb1931833c23b1fe5146c7a9d1be6ddca03593be8ade5e7747395f8063996feb66cf369e3a1431f77b2442ce82ca6d6edebe0173f67109c73e044118b93e77faa95fa89bee0d16e5000ec26e65e255c454a107e44f950943947aa455d2d48c6fd1e17df870eba241ffca0559e4497d82448b31783aed47b8f5f5581ea45ec75f4cc80905230bcec9b973f3081a5f60e815b328c9327163c380183eb2ed921827e11deac5588655ca22307207a2817cae4bbfdb24f4dbce02a2374e641bcdcc00a2a0aa3521b170a582f510bfa3a949b265ea67c321b276a4e71cc33c5f24e6797ee665fab51e6783a0de5fbba61984bae89a57931abb558b990daaa48d8e5e1f5f7f22fc3ca5492551b3361b31cce1e931e61d9cd755402ae62b5618308b343ad2ee81e305a87d1f255c1fb502d2222f2920853cc54530de502e33a084cb4dc66f4eac7f7eeeeff81efa57c196aa6c514c5d9bb10034e09fa9e4853292ff718724c7c7e43bce5116e0c7d27be3640407e9152a5790ce9dfa90a7de80b26851bae693c91bda9a93189953167543b802d3aead4f771b83d72e902ebb117c04570a47f07033b1726d92cb7625b017513e32312d03e9cf2d211a0e8c0e1e5169f92303c1191cd9872b698ab010229f3f944a97de7f66ff3ebe00da58c5152866d2e46730136fc9896399ae3b48a4d00bdc2f289dcf070d42987658ba4b34b1eb2dbb474aef0098a8a98a7d5e35d0aefa1a6033406627201c0112bc1d49562953de61e06bd6b4b6312e00d6b831863ced0035b6170e081c4c5bcfd76059d76f9a61945aba429ec60cb8101bddaf2b301e449ef452e43e15e2a5ed93667027cf683be5d181811ab9bdf8a20e55203a1ca404de2ac8596d845100c2db1d07ddb955e8c5be5acccfb8bdb0ae6fa73d3669ee7a4877e88cb2bad19446d7c1623574cdde4281cc35fb24a1560558e6009c17a60cb1cddb2c70a167021b8e45a9ec57e8c93a8a7116f58f02f7e4c7c02e8dcd1d7f1bcff997943ea2ab5ec447747ac271632bc1ef16e84797bde38f6ad08faabba60d61057fcf4273ae7dec10457cc47c40eb07e62d0176efce8822914b654f43691300ed12d42d1339d59eb9bf3e0dd620db388482cba7469fc02f016eca6e5d294d4cb5304499f2340ccad60509ceda35aafc66ec2466fa4ff3ff66ef2144b1e0119d73e8e2f18e6dbd74f4eb54548ddc00e545ff20e34204319bfbdd8a497a1925d7f2da10f6da8cfb63d7919f364d24ba5ae6bfbed356ed3eba081f815e57a0bde9991d8df466839b8dfada5822d1102b7c6e17f08f57a677db14894ef3585d8aeb0a2201647228eae687d7240a891faaad596aab5cc4ba1f352e9022e87d17f14001f0c8dd9bde3957d451192323bfe110733e3fd4bc59364817dbd23480eab0ff2d5d485cacb2535e4e110f96134e1136a54df0196c866413ebcf544ae065a4eeb2e1cffcff5f7d18794a2cf4d2c3de22458f3461a9af3dd6e0b4a0da85af499caa9812d45570ec307e6d3c4b0b4b82ae35a28a42a30dfa7342c3c5a6e8770c328f296ee085394925b968d1441c6b8489652921fae941037a5ce843ad351f25db8512ff2d0939696722f35906392af997dec2e67df027e0c9c20189021de533a2d5a65abb80c0ae86e8dc6c258f34030150c273dc4e28a986e93e9907934a1006abfe0409f930de4fa480535403504adc14fdf08989aa0a65ed7e464978f15a3292d7a0a4e3dc392cebd7a83214511a3921916e8ca29c754c01d174ddc5d24faf236007527b1a1657e5aed19a6030ee42f936dcaa54e78652df7256a5f0503a01a6e8306872aa8f4adc8048a2f8c1feb25eea77a29feb6f3d036320711d470bcfc0b522265c2b0e27f4912e53b357ccec905feb266c1478dc7467d85ac233312a917e9586108ae7db9686e60b1179547191e17e9e5b2565e96c3613dcef67b18cbeb734506436c52761ea586a816306de4895c1d72d1fd6a08d31ea50fcb05d4d28924d66beac6727ee8fd5b69fbba12294e87e82296224919e2c2aab48364bc4458e9c32a2a2baa318e0c1fe909dd33f074aae47d55b5820f42a408c6da1d08ecb5929b634d9cb19a3cd4663c1870a56cf4efb86f764e753ee9c97eea38db806b6996aeb8bc375bf8f9dfffdb55b041ea254ca94b771cdbb88ad9b23c3604d0e67c455a9c7b9e6c856a0d71290f008736b428e5ec90bd2efe8aadd5dc035bb49b6166197c8a81f66e66834f1d45cf757d626ab116b075442472c1cd1e4985e4d7b474e5f39a87b2bbf2fa99344f562adc9ea126d0b6b53ee6c92d6a214e33fe483d7a772190e4fcfed5de7058fcbb778b536f2c1dc7150ce7380fc590284f20f5c0529489552d0636e210cf7024bd0563101f9b8e43ca31c1654b53ab0123384d0647302ed108bdc14988a5805d513c6cd2be02b9949fac87064655e6e2d5a907a8b4cf5a013e69e4a324e12d275c96dc8fff666d5ccea35e6519b0790a64dfe7ff07395172b724a04bdb6b1b75f85c3229bf28b7a69044ba08493158131f42b96f2c0c3c63c6218ba52d0408aad955fba0a05afb0ae5140735002050ce28b3a830c2634a3b819e5bcd3d699f13ccec6118f0be5f4a8e04462a46cc1a4b2d284b4bc3b3dc2957e7eacc9ece4328060750b818fb0ee09072a94114731f3c5238a2b96fb5f9c4f78b9139cb21f89216fb5ae556f19d3b32818c3b46f561cc932e75fb30aa314245de5a8cf51bf2ede6f10bc6c0a165717337904dca8fe5d38e865491b2ebe4987735879711d929b83afbfef9154954840364bfc88eb7cdee9da3fe618825e2038af73bcaa3c6d6531842d0508a1e8317ff7003b6a07eedfcc014c50778c0997d06795dfb2a3d19eae0d34c2ebabb707b47722b43a9d15e164efda5e19eb20b441275b9fa5c79b3774419f4f7051a0baf8fada50e224baf6219dd2784276cefced07983838c30b31b2215de615c2b1e41dd8a575f0c4587f4addec0c1127775159303403c2e328415494055a38c860c25bb49f5173924a229a37facd6a813b9b271a96f0388a773654e8822471e4846d02571e10070cc9bf1a3aa32c8f92d318ade89688b0d380002bdbc7dff1dd7dd61c547493388e215a51076233b6946cd235b8ad40d0da77adc288332cac6d8f7816d5f1b00782efed00e973710fcac08ee99b0f90e10e7bd55cf02574538947be99f0d4d084a72d00ad1c99237c59155851d90dc62cd82daedfb261354334610d546f9ab1e83370900f6e8054241f6026d47224372dc60e544e0ef81ad94afef1ab86712d0cf524141a38c109500657b1dfdfc4a2b1c424409870b58817bd7f850cdd68948144142ea037cd37b080aa474d5fe2c268f5bfdeb580335c87725a367ecc5610192c88fd42e36aa56ee091ed6305c6c5dfd1848b0a52a2a051d644e706f644880d3df89e265e080a4f8cf3dbf64ea4790f84238ca73581e8ee206fdb6ee8361d44590a76e67d10cafb6cb0807df95b27d7ed8bd79b23ab56ad5c0d5196a45eaa5487d20e59fe3895afc05f8c78be87c40a68022b5c155f4643d51f67a54095370d12e5522deb08b426d900e91c9b408a529017411c6ed3d62f2d26614ea2077e0584f6e761a92d8ef3b56eac0850686d83912d5d60c4bd0bcdbbbd425656419060c4106a0fc145ac74071bcbde85f0a6ba08fe161abf6906a06c6afc1614e06bf952302b9457077dc9c1033e76780266d3f5788b805404277e585588ea20cec846a99c9fb20fb82329dcdee0c57778cd3b3cebee5f407762682c5c867eb9885b4a0ad441eb48043feb3cc1c04bfde32ec0096525306cef688fc37511c1b16a8bd1df78a8da68467913779aa0f8d9ee0452b06dcb62c8d25e7624262f9b40bdbb4c04e6ed5730a526c060b881dca532088dfba3b43aa12216193cb9afd58a964ab646ecee9998342420ff8886d893c02f648560fe6758e57ee6cf9024117d859ba3e9d7766bbdcc4385347ec0d607d3623a15a1d1739454b4469349daa11b993f8f922f12e3b1b70d14f6e0f974896d5a83aa00e5b8cf48eb6b7b3a961ce71768c711558aa0152e7a405925d625b44146582c2615a739a3546fbeb3128b034ace74127901b2eb69f335a9ae21eea5d660e89c105bc43e172c5b4b741178fde63fce44a78004c29e106fba7dee054fcc8d556e3809227e381633928d1ffb12ceee68c4e0aa403618bd2ac25932dd1c9921ddc6dc16211c558560beede0fb900ab122c2bf65067b4a19923858b3e6c32f64f70c402b2c421eb60b5c02a048114b4005dc28278fdf5db38ab2066debd4ffafcfe59cccdd24f9d5d59ef0e17efd7de66afc62c070c2d2aab84df66311f1a01fddd47a27d9b043fd86bba4ab8787ac6d8dca13399c36f36aa8b7f551d9cd752b81e8df5ca42c42c7becc0198dd97f71868859c7b1fd4a908e3f95c43bc24358077cfca76ba724dafb765f8ba350ad872d6bb81f3712d70324b51a92ca7457f9185aabd35d0c9cd0561516972afc7317c34cbe865eb011dd81c002e8aa4bb6701e4e8888c9d4e1b303d03703874f5406fe1f924e8dbf39dc1de98329f8450e1fa552671b9dbb8e216139f4c3502881dcf352eaf38b014f458c8a7dedf05f9e371bc0d9a280863023d8234805e211df73e70faf1faa6aaa081a7783f7a782fb4e8a55cd7f6951f17ea456471a15a934e765896e0d1707d35c84747c094129ee2109c420e2288c90d19052b4090147462bc845219f9e8194f9da2820cc51f6ca9218ea9a2026b2538b0803c16665f48a8c23c55ba8a43178e2f22deacaf6334199caa8f72c83ead47f7bd9c85efb2873db88e1bec855ac3b1dcccb8fddec90091ee8464cda2dc392c352751290fa830b5a033bd6da14dc894227889591bcaca45ffeef989f5657d1b76721a7372328105b9eec537ab5be8a6d11ea66ac8eb20786e3ee34bf530a33e0152662bdeb1264c5b967d8e05117752797f1f1f5a02518d074a53fd726dedd6346bf8a502d8abe64a2c34c752884cf203c3769b136b356e831530923e9f668879b8dc91887fa614ec4eb15f0eb578739a762da68e17a9bd58c663fdad82b5452566a821aca8d4d64f82ddd98cb62a14068558c7e4426eb973d728d8e89300313bd3b57f87eda94bc7ade937c7f8aa1882927f73fc1d4f1edcca1ea3970903c46162114ce772c2ee4f51c81311d8018138869af3313bf3f9defb11dee59d993dfdb4d2c42f029170425ce101a53c9730c98d83bcb37f261b48e836462fde36a6fd40901db6aafed91c9eed1e347294b80e92a19356397cf56417f2065a9451b4d87d5b1eaf0bf33dd36bfa828ea5a8bcf4d8c6fcec7bfdb2e7c2722ba57cb1f536bcf46c9548ee4621886cab0327148ce22336ad7b9389558c47d16b479128687cc1f1449192a516625c2ba2f884a58a296cdb252a24c7acf62665dc22d5b5d2e10f1f76a7fcfb697c7dcd02012d2b526002a1af26fcb972e70e51103719830fa9e6e41832cfc1d3461dd9d7a720dfee77905448d4d0ce45fe70bbaae09334f855e859c7f5c5b07bc75ea2c12ce11c7f8de0c8729e99fb813d0f7aa98402f23921a31f06e8890f03ec13fa6f09f85e53b0076130abf08f5796fc6468f60ec343ea9044c99f023aeed78e1be38d9d8cbd2286dbe6ce7e59e0f6bcea60af2d3888af0ebc5306adad12b868af7208917e1a2110e891a3fa9d80957423f2845440b908d4bf9db3a49b7d60d78092c5bcddd88d3e2ba58cbd1993fc116360c52a6b97d3527c4365e81a7c94adb92680c3fcab470908b951ab76435726cab7c37eab48e72259f3c2b91a77100756af2b57730454f6c704da5f3350503567d3b8f2a17f1c4b45be8499802fbf06e9c2e442efae4bafc000546290705edb09708047504687de1467c0240e64b7bf24a050e775d062a969bae4ae57c3644e1804ddba60d7afa59e16a4d998054f5b55d167d274a66a95f6fac44f09f6502a1d1ec1139489f98ce1b853b4a705c49b4dfdd8a38e485560412bc87c69ec48a47f59651408d96692df9043b6aff030a39e9b3bdb8708a234d80f698afe0d7fda71531311ff32b533b107d84dca8b1181d3348d1af006337cb49fac0786646b51389bdaf8ba2d8dfc4ebca4dcc7546136b907e034c8076060c30d4db4ee6c3fc663507ffebb939f7a3be06bf7da45bd9cc514c87ca13660c9c59edee3101fa6cfeed58208e23069eab1f64654311b786e58116e9fe9c8f5c42698bdc6dfd8d4dac751018b2ec418df31a109338c1c8fd0f7b8efb125c59c42889a8793b0fbc678101f8db89c753a04caf3370b014f2de400237309c542abfa3412ad89035c1c1bbc687d4f22b38fd2daf44d07b469b1d3502818f4919e675bcf501b71120e807c9a9e2f540a486f8140c7cd15a4c68b7524fbaa92c84912a1878e87a32824dec1e9af3e1c8f70df6058629bf10d9a47be50ca3fe588a02c5c84f06a21048c4e23e0415250a0be221b7e23cd2b0635640639b6970b8d2bc02062b040cd3273c8604f37c203745f8ceef81afd24effd90daacf954013350e504f29a66a0831463e28fe684cf17c38501fabdb8df1f0d8548028d0ddfcd2617d1703ac2d73da00ebdc1c843d18ac355b286702ceaa13a795449cef25373bc4770d100951129390a58ff558d12b31e74a7c66ee07ff9545aa5b9be6706489b03e18b337914da1f91b4c570931755dd0be6411878bdbd8fac7357864d6bddac8832d2056ad5b53eed93d0ae048ddd2b664544617ad267f8c04795fbc1ebdb0e3929a8912e53c216445b00884f21d891bd194d2d22251ac7ef11a6d9376607840682f9a3fd9e6c990b78af8fbca90329d6ef999dc8a1d092487701f553ebbbd2b2423c478e11e0879eb26b82a01fb3eb2735a16fad00484fd0aa25b1386309ef3d73cad932890f445740261a2fb65a6bcfdf2b3f12c571726f2e573f5637deb9a2f14a23f0cbeb53c261f54fc6fcbefadce97ceb29095cc08648b4bbcd2578a9a65b692eca395a48a50395d5fa9167eedb48f7d7b31ea4b183e87e1958b8eac9af05347c4c6b67a73303f15956ad07fab6537f98153a2accddce3270d2c6fbf4db2de80661cac088a708bbf80a39b0297d0eccdf920a7d5cf4ac1fed2a894c49dde6a02377e183c382a61010f3cd96307c0c7ab5b6b70850fb07682da3be1f6201f4b223367ec0b6b46a48d2d98cd425c615515c1e8a114d00e96af0225f214f2786b2a524a49767b0bcb5aacef0d1e296b6e90869e5c89dc949e913c7d5058dc971e78d10cd681522a880cec6a41b28574322b9c9e2a714ae20159c0d57ddd8c4c0c74580fea153c2b085dd264da72755d3c33186bcb2bee2af021ee3957a85c23f77f7b862f278c05699757f739c05ecd78d5739b58c37e61b2c915087924a563d352db8f25a5c4c85700565508363e97ec3c25e152693df70d7979a32a2bb09def87bc9406821d8e53893405f24cfcacbd296b60414463213660dbb201314f439c5501acef7c0e72307d08cfbda5388e9ad1c6818169ff2e0bdf1133c2cc59e7c2f112acab35daed1a22f103ff3c4a49b0a1a2b7fa0544983588d9df3518aef363a6e7791b717c69f679c5d7008e6436f0864f9210f78f4155c0308712a41df17498a96a45a64f172189acb840c606a91ac09b51791b617a60df676523f699fd56ba0fdae09273ee6fdd0a21e32b57f2164a2c547f8b9c612fd1314548d143c3516b074b57919c025a037389b0c949ba970e7d6042ca8266b8993df4132abc031cadd2ee6a6f5a11b703d074172581e2ba3b2e72448ac8044e3106dc17b90d134e0995348935c922535307c581012dc7beb8ad0193d640d5211af1a52d19b26fd7b072116a1013b8758e1793566a409dfb7cce9acf0e92065274ee90db7e7499f67226141822a31673eff2803138e357c33ed93a7bbc1959655ccfe3e2914352a993415c6b86ea76ce9650afdf411911ba6b757364c91225f52a75326f29bab8491aaeed06f6d7b2b380981aed75bbf416183c40cb10cdd518f7338fc0094f77f26a515c155949c7a80e8fca0f62db6e328317c02c78f9b87de0d75ac0bd1d6644161613c1014c96f8881d3999a8faad6ac1598a145ecb96cf3bbe125f54c617a3e32971f098bd8309aba2ada623632828435c1b86a745b08ef787daf349c54262b6d0747b5517cbcd962c9d9fb6cebd485eff458807496368f16507e4e714b2bb1d35ee831ff255c99d23c770aa62869ff003517632fa552cec3105ea04a7b0c01919cb73554739e8ec18ee444e6d639c4723b121b42ccdff9118edf520a26c6cffa10e25dc11ba0550302ebad8eff1218df35b3cf1c10d4fa2e45f0840c32949b49654c94b921d36a4159cb1727b68613d0a73eb18cbea3c13d6863c96583943d94386d5221219943ad6ab8a95c846fbc3c2363e0d3fe14101232d236963b54247a8619806a3fbd1b12e5390cf40bb45c32892811a0f88b617ea52c16a445056a21a1d0d1131c01080d09afed6870779a8d152c0ed0629552e4be780f7612b451b05c8177b6534ac99709f541b081168a9a94db448ced9c8e823b03e77410be720683f3ac40ff39920914f12b80341091d41ad53956d9e4b69d39837c11394f66a7fdc65e31bc184d18d06c958259cc5455390c80fde3b9a7bb743c40458556d6db5695ec26b7d351dc1761965c7433113ea5b3b7b1007ad8a341d41bf223e95ada871e28030d8870d83e8a0a8eb3b9e491bfb6bce3c0cdc78a23bd4c7c7138765cc2ff3c00335184fca90568f975d432c0058db419816ee5d6caf4d7f71ccab01aa5f2b5320bef6c66acd525dd0b0a0f9230f755788bad30d77b13bf2871b26535c02a88130323d469b12ea9b7f9fcc3e4a47d03e19bba35078f37c57004fff591bdf86f6d7b990f5dde86d16eaf89380e0fc75fd50cc5ffa140200b42cdb20204e32bd0894653ed5438c2b9db023359f1b3b84227c660e3d12321f74e23c45d0860f9a33352340455ad70354c638197ce0e2b07b9b348ad190e7ef670fb1cf11c2aaaf73b573b180db98e65949e6009f6d944c8e623005d168e4c34d5b00b6cfe48d4840896862e9dda1fff7236fcf9c207936539b9834a0c602a1d19148faa4a42d6d7e7ccd20805ac611803d2b3de0d6ed03176be670f75e88ffcdde348714d803ec1e8d93395f9a3837d18b26cd40cf813e96d9d670c210ed67d617382423f0a60dcf7eb0bd0ff7814527bb25a905c16c4a097d37c01c81fb16ab4e586eb82350217eb9aeb7056102d8755643148e0f7d46a291004c7df1f466f68dc45eafdbcbead8c680c99309be6a380045101ae0c0fe8759454e77cb930b5c3950ae85daa46c0f022c21493740c89b68505b781eee929862d916025a137ecfc8ae438c035aab9f9a84af1de8c3a8f0c55334d156f250b9d3944c62b39b4df81b0c4f7671c7a4149cc512cc9a0972975d936ae5f7f9566a0156661230d80a4e296e1737af851eeb7d495aef218ab755bbf7a41225265b0ce6ed20b4632f391f8e42e1ad0ac93f107426452d9344e0ba8d4970a1d5631aece246e35851027673577818b6284c905ba159507f0a14eb8d3570051fbdf00cb6383214561cef8c928e8582b27dd8b059a750df9e568740cc5a9caa77b249b00a5ef0eeda6134507b1a9f19c6fe2709a5d49c5a5a484e549f1c2e1bf166cca16437112dea3696936f4490c6b6bd9a7d6b1f53b6c1bb6a52328113e2a86681678b5ad640d3452dc4d2232fd10e7d27235e876634d13528817a21cbf84aca3d91634276a31b1aa01c467141ed38562c47f516cdc6bdccfbeea2bd0fc8886911163575ab7a5ea555b8878c9a4c6f91639c0cc94764a3200990cc5614f77d165c09b21150ecf1b0d819b534ec0d25522bed28cb2d5618cf8220887d7ea420a90f906843d1068391eb3c5982666b03a236300dc604ce9618ad774a54ab55d17355d05bb3123c460c261f390b864f8f3ab0f206e8afa40615e5904f0d4719c0e9a628f8cb83fde4690b751e609939a519c17cee0f8c39939305f5e83ac9d220385a9ac4e72ecf9fc50696250d625481218c5f55130769c83d85c3dc83e0ac0b445ee7bb589238696dc2fc2a12f41dac991dc1b0693001ec0250e2a192aba0a93e0d1e77bcde246a915bff1bfbefc05a511fab98d425055073c3b8b337211d83564b8fbb93351ea3dfe77f70d67426070611f470965d9f3c21ba1255de19e07c3b90ff04f34aa5468ed81573eee83ef05b6e45461783df38691a17ad01ea8703050a007b89e350d920bc796702ad234965c6cd3f04e01ef5872a1cb3a070964ebc4f9fd810c80cfe2b1414aa63c21f0ce4dfa5a36a195cbb3497db7ba6cd162463601b170a3a103259114871224fc078f746941ab0b5060d155e9946684a95ccba37d4f9e9a8c8dd3a8ea8f08b4928bfc0ebac520ec199e5193cf524a533b6acfc83b38400af369c815d3831a941f38b8a86480999b97159df94cc4a8e3579a0a3603d78513c919d6df2d059167597a24633a00214a115fad22b16a03cb5780bacbd4023960c431fadd214ad3d63152a76ac98315147ae924775087c7332f85564a2dd6c4a0c9b8e5a4ea04b5f68271634900eed27170e78496eb2d2ccaf22148200de507de429bf94fa9cef36485a11c8f9e33ef447b309447b1d889c5836e06127a688e6575688e47778a5ee38e1664725ac2d243d0d4f2015e2d31b6f2e9c7a442f73f887e9f7ccfc19ffb1b10df047815a791ad1caf6a957cc892a397e63b9f1ec2427167f2370a7b51d877eb3e18b9481a6fa7278c348bd88bc99f5f07303cbcba09d06a8ccfcedb94c23e5632d63d683a9d72e973684828efceb0fc9040fb7568eb1aea4719d93feed0b02b54652efa696ef98d8560135e5c5324cf641da60e06f1b2e29bd04f97bb4810eab6d2a8c2a0d0664ec5e81e6e95000fe4e894d805fccf811503e6097d5169360cd9b3d8f266d77fc04cf7bc35a355534b1c543331c0d9d99704fdbcf8b7c17440a60f7842a5f62a731aca2dd8682d2ebecc492ff74fd040f09261e6c69eaea70a01cde5b53fce31a9bf2a7380e80713be8989b7bd0c69c3089b68218b570b026191948b6e5cba7feffe0707f8e4723542771dd54c2509a1f0ee916f2b43a52e06faa0edc396a17bc7a0981526f5c58e9a03221ace1ae4e302a33c47e33d72658a96e2591d0c63c10ec0879ff0b2545e446ccfc7e460398b672c077f9c60b5e937f3d0eab5ec8b9114a7f740614f40c59089d19b17e400f2ff59120c17c335be6ce36ce6d701142b8786cba3e5745ac796aa167eaa1ac9e855678c9f856a41e440b9b2fdc671c53c382e3edea8afd10bc5d7c4b679c2f0267e47447a60709f26d53eabc2d9c7413b2ac4795d92660f3edc8db2587814ebf653f337621b71d48a438a1a52f16083fa9446351b2445cae8f949085edcd8304d90a628ea2b17372823d75fa57554d68d3737abae054a55f13d79191f6f25973dd4c092d9dfdf6cacf932879804c50a373db106c09138778db4d70455fd3c7fc5a5032d8105cb40b0cb2bdb5cdfb18b36d0a026ed81d5963d5b7e1ce820c6845c128d7862835d123370867ffc444eae70d695ddb3b5db7ba4ae1463868cd922818098401ddfa7c4537c6bc5d3c5aefd8a8c569c85a3eea46548f71723c1efe67f517a007bfd3da97f04e3c04def39cfc20f781d7c8d0305a322c2820b4af80d13047f9af446dc5e6dd4503edd4c76b09a310f6ac3f281aa3f089237603f2bf13265fcb1f9f2a93e1f7ce57782bada895ebb5ab77edabcf047229910fa9460d6a7a3656df94dafe927496a84429b4da25d03a52f733cb16f962c0bf5536257113dba2621f962bb661f23415ec5cf22031d0dd8cc6498853425bcfb1545d3e3b6a7076a15fd4a4495aa94fdd94219f152ad12ab3546b355fd2469535c41547a4c05998892120ade3c5bba7ea2ec26473cc948d0117a372b0f6bc59a58ad8713413b5c7fd86b909551422537f53de655c9941f4fc800e3fd9f9b062ac3f5677758362623b7e2778b83a9e59182f9c23a5473320f638d2bb320ff329b1d1b828897753a8540c035c9bbfc001fc322c6324f98c2792f620e3f0315a20c7c11e58346b810527c706eb6057b38ba4d419ca2473cb42b69f80242f3092c2f84392e9bdba2c017176ad5206ab0a9990a58e0d02c6e5ea50edc02c1994721e626f4e06cd03f8f2db59f3cba2f40e1e95df322aaef720535fbf51362862556d3cf4cc3d0e2690d8892da54e52a37ac5aefb91c76eacfec7b69354d92bbb51249a111ca58dbd1600a0ce5f9fd86efc7e3766ec221a03fa36e2cb6de37ea4d076b225151e36f7a9536553a1b6428d43361591175b572eef8de9eae8d927f806e5465acd0e168898dba18199909a91c96b23613eb79d96c90371be42dd74bb36f06831c53975f8967831ceb1654641d1e293dc49b6c8b0e679dcee7ee52c1b644944e4f087dec8c5c5cd27997dbf37f7643940454c81847b5ad193572166434727c6aceeb3dca2a001898c691f0065774597567ee2b39bb8686fdd2887c627614cb5ce9df2e7f43f1bad50de049bb5d290df9544a956c290769a5ad94ac1ef1db1ee0714bec59c3ad99f8295952e30a61db3508cbe8d2a7292e7186cdeee52c9d2996bea163290dc11614bfa216d58ca3ce6853f1772f378caae8565cc14b7f7e3221808f8316417a1c84010fe113814acaa516651944fddea5221742ba0816eec085d41ad4b1e9fbfd671f83bcc47a9b78a19a9749cc22d7e4bf6e619a0d5e040614fdf752743480ab25a13bee50011ee1e035462a19223ef3c521276323e1efff70a9f37acc69c1ec18e1ba74e63e8ac56f1a2c5f6cc2287add9c11ef4f7e0c35247d46428c3b23b3211fd8df7154a8d1d09bd050bf6e85722c2217e84e9d75940cce86b4d6d62511ae6b2a9af7e752cb04113979bdf2003f6cb575eb9cdcd4d2e6b5c98768cd2aa2321dbb7b508dac3f1a9af362211298e54108ca5dbc7447388cc268a1010d2cbae40640fb937d65557927fcba4ce2388376d95b93ff7d988d34c69531c1ddc969af4227e0187a142b0817851ecb4a9decf7a69b04fcf9f5a7ed40a0e738c2b45a196dc678a60923cc20f444a10f77715632c74373c5c7c0566948802dbad78995ae372bb9909efb615cad2e1ef140f2c1a15afb616a17db3e64ef07f06776cab33b57362f2853102d758c2d25d051bc990470edf97c8869cb2886e860cc73596130e1905e82168088e54f1450e65a125abe5a7afd6489296711c9c3e35b7a0831a23dde5c787e2c101b9e66bc734c71d1551eff6c298f151c91a23ee4c78838e48012ea19c5627ca4adb5ef0b98307f0436677eb1d0ebd96fbd15ec7989144ebdd4d258221d8ebb8edddeac278a62954034386529c8e2f80d752a30c53e1e63d120ef23b079cc519b3e02916a50a37e1292618b47ac7b0e81983a9f200aa7773ac502ef48598e41fd8bb0982a2bf7907c903ad765aa752f2dbbad340c0ed2f2612495586698066b7211b95314dc6adba2f3fe6e48c829d19658a83ed2cca0abfe5881fcb352c2d5a4020b888b4a9e18fbdb449c2f40b32356e6fcd4c92ef744f3bc0f95cfdab2a54e454f63a41100ae67f753b39843252cd8ff221e9980942a75d966946a2b7a268ddf69153abdcd0ae66082bffb5399cb666b7535c67d4c2809530a39b51b1d7a761cefc9ba19200061de2bb429da1b1d7fce6f1b0b4cf2aae421137f3a79791aa41fa93c70f75ec8c327779c394cce6c0493c65590b3ab55ea40b7963006139a8404e3a3c47ec7ea41d274705647d198024fb1c874e650e67e77194f2a537aea28d96d1d5f4eafd7677d6f4ab031380773be4842d550445050784c1d910a8a45ca5e3ec817ea6beedceaa14ca0cfd923370e297114cb1054b2a82352f412c9ad5e8ecc59f846797f5bd6a16dec1eaf39cae3470dfbc371191852396875c2d33b8f143d8ae1778985012fd66973313d08cd319f2f8233029cf4b5dc1b6088d705ecc45f0a0879763108032ca54a99f7e9b6eb56158b924fca7414adf9dd00d91015c789d5c29f35e00d6ead7efa074a74fc0333fcc0c2bf4f3ba3d60afcc0a2b2d755472813dd4af55d5337c417132d75d7616657dca7efa7913f1d89c141f797a4e31300c647acf9a0446864a5f868a67fa87a90f2b73237adccf6f544a7b9308af27960173efadc1df4dc134199bfc7bb359fc37d4397ebae6404d8b272c6af0f9bc9459b5a2b0dae9bc93db1b330d57dcbf421f28402dfa08e0a456c64672f9e713fdfd46905e4faa09877b1863043136626327a5e742cc0b29093919f9159b5a383d2d8c515055b75563bd49b281ce9ac8675ea8a36e07a542903ad1e4239083ce369f778ffe63a0357c455449c397e135025874f6c099aada8d754363af018779f072f9b23b1dda55579e5d16efdceab115f03c054b34e588c6376d53048763f96b21e24c1515c8cb0a72c09637c85ac805b06287881050aea752e527594c75788707907af7a8b9c3925c888a08773c00c832a96df730c69c771420cd54dbc83e7fbb1069ba86ca625e279df695c3ea214f9ae1a8dd8414b8e9e42692df84fb5c3aa4de428c9a60e9f8efc38c27af1cd39e3284c3ac70f07701c66789bad3b075173c3ba994451c83e3761d8d6936f48e7c2aa6f05609a060525ac94bd73158793efbadd086e8e98c0808dffca1422537c70688c84525590021ec60876239673354931f60b5a8eae939821f69b9289c3fca093edcf7fd55b060e57b2b02cdef3e0236d5a2fde2f6cbd104a148c449d292b99cc1afbcb70f77c2524b97ed5a304db10a1eddfe935048e8449fdb2210bf87dd69bf5a63a0eb53d533062bfccfba79dfce0f222b6a1ceffc617fef2880334f1f3241a09223ee3012e32b1f6ffcef1ad568ece0fce3569f6cf9696d1078d01a3bedc4bf7420243b703faeb87528160e5462b17075db83f53bacead30442bd2fb149b77ff816e4fd3e96674c085e5d790f160371aa1be38cab229d7a10822e15e32d2c476e2e8e832507876ba2f4e0436b4bc9e79b5896deace208f21239b7e67dc653ebda0d107ad8f0a3132e0753411e1a073c030da578a1447cc8ec212447c5d8256c405b2f1755d6103c175b6469bbd0bd32d0dd7c7e17c24216cb752c337bd9a13b67ba181009a72d5d20651b121769d457e470e751a572575c4a5297f9d60cad0b4f408e6c1487e2ddc1f31aa24729fd68a7cdfb9ad269d1caf818a6b11023b7adbfe05e225f468d58ee4600c11ea40fa1220818396de33d24bbde5d09a340c8e1c276230a74cde00e218c81335fe25fc6aec38bc0a27a539196226527ae8530be67cfeeb8c365c7f5c2685005ee3a95208e0e25aa6ec15358a4cbc7ec17d337b1a893f30e9c85286eff545e9c40afe815abaa788e4c3fd11dd917fecbd69813b2a00d991ef52883f17f79161e5617f346868a67a9e53a7dc8eb5df303b22d1b149f1af2aee0344228e46628787d2cbaf699499907c5eda0019664a133cd27b9268e41ffb94cabec9e1fea5a3d603f968a6573783fc6564ea4528db127670e01717212443b50da4e37b5de4511acc403ca60282ef5636b816436cb607d4f2dda2688b0f9dc2cebd3521c206936ba8e69e3732151e5d331bbbf75d029f8a9113da7cbff4988ddc29292afbcc3fcd3c733c480bae4b0432aca9923a295df83f14941570ce9d579b083f0c0b6cb98c7a3d0da7e012e9d7cba9d333cd794c82c04716794a43a4ffb11efb93283a85e903cc9a8f6f547313b56922b5e0613b4a480a0e4ef27bf2432844fd058504b424ffea5fa7f4bc10b9ab909d14edbb999981c3b71e854295745979465e068a06af28fe6c21fbf6bc35b5f6473b076e5e203a57b3fd6be2ef0dd22d9697146a4aad422c9f6d6134852ad8464f32331f8db8dc0dce839f93648f6e7621e775064cc7adf394033b78751388d7d1739cc13accb3f87b03a8b15ced82bbd6339485f20a6b8a3eb629ebc32a96341e52643cb456a41308c8691df54e358b41f1becc6b4c1c94d979253b382ac2a32f3529539acdbc950694b01039446228995b9db4d888221ef6847e05714fe892a99595eba13f599fa2bd26fe7709e15cc51f3c5460cb3ea68a01fa4be64cc627f04c520384dcc7f3d489544231e8e1b93ea12d537ef1acd010ed3fa880f6bcd0cba26e5b44ba6d8644a718a48d914a6b5984754a6a4782723cbde442e37f563a7f48ea0e96acba7aa4a880010f01c258488f6faeda1ea47f0cd196d619e2432f1241b82b77b6839b81c6518092e41e1a8ae0e403843d02151c3ba5c80085931a93786704cad33942350b1d0670109ec03bd5551cc9767ecff7dc055716965db6cbfbd0fc10d094241b98680ba2c305271b0a27bc0569dbf733ac98a20d9e7e42835bc4da05603b3aa5dcffdbea0ccf0eadcfd7abf0e0cf42795f5d2f6c2546f0a2c12141fe19775cdb1c8b758d59cb764e011f3d0e365610fef3b3effa7755c34b854905e1b1c6d98389138ea56e2244d779eea56b124030edcebbd197ebdf145a4f4bd819630236cfd5a0b2e7779770a981d2076040329b23291379630683dbda37b4c88df4393ef27dbadd1affdf0ce7ec9a088c49799c3080b200429570430e4cc358bb22b0aa96549e5b37d1fdad1af4b473c673ae30dba5d83da653212bd82c24fae307c5147a15817498b2cbf5ccc8501c329df3728142032c8240687f471ce4f5b0a7652402bcd363c27302c0f0e71e34300cd0d3c3f7c52086cbef27305919cecd3a8e63604bde1683dc8366ae0800a90c9334edf58d44d5fca73aefa22222434d0e54b42322d0ff4b7cb349633fca6bf657f5d447ad8d88e2f69625bfbfcbdadfdd16a9f84bba1fb1f2eeee378bf75f823793ed1524003ec4981571149e14f0002c9540b82315617416d3d3c753ffcbf16d1201c6dd4e2aee044f56de03ad5a1a323a16f98207703b620d7a2e833dc71b2a3e8d85966c69fb00d5c2ea9f85970ee7360bc2f72141d3bc375478deac24f500779006e7e9b68493b2fe7ccc8c1f68503f11c0901a75f0b535282a8924ad306f1029740e205c80f9a061a21d572216702abe1d10105d1704adad3d96b09722182c25952b48a963c6bdb522da53030008409d644607eac373c126a3cc0868500b41d2c5136fb147ee86e9e18504f803b3df5bd74944b527c581c003eaebff36bdb9e029e4b78aeaba9830a486a4c23464f5de075f504aa749444902e62be651a8c8c70ee5d53e0a24181c7b9f8740863d0018c0212a8c034e4e538706be532bf0988013a4390a076ae87662af24a649a94a4099086cba361288bffa6a5196f2dd2150a0f8c15da5cc36cd8a4b68482785cacace7330f1bf310f4e2a5c09daad65e3c9e8a8a07d80702724aa59fdf66583b4546374bd533b714dfa5d325d24b18af6a09516686cf9a24585ba5334c7b0c894290e6b998a55065a701e32eeff77a477c5c39f9d9d18284b3cd7d0431e068006ba39c21faadcb0a6c1979bfb65839d4fc33730e8694259161b9f520d094032204c61766bce3edc00948d5a06c21e6c4d1ce55660dc630f2bf27aee3468404222d9744a9ba8b915b1c16505fe704135e1b661e6b45f4706f68049a798cf6972dc068671b6d68d9a11ee5e6a2b2da6a2d8195710413544c74abab9b2d47ea0db00ed566262cbefecc40bdf40fdf81c874f933c3b5147d088611c8518e97daeb8d5e98cee6e2da9147befcfdb6d5da8696f34e86e2e425ccdf3b25445bc808ae796f34693bdf98ae2fc55dd92c9adb4994785ddf52001d0f781ad170b33fd871a286c261d77eb1f1f5f9eb4ecd80a4d7e6b2621c16e9c1e0d1f888f0ae37be9c15fb8c1f7e25f1b5707119b0c715c50814145cc3f0a5cf85b98d59d79cbc6b3621d7db2735af2d6b7912722aaabe5c5abff19eac601261663d4f1d461d5a09aa3c069e3985e07870de7f13812e885bb062857219d3196b12ead18921612ac9d729da6f3944bc847b82a92e645e4be94c0c73191de9fe0730d835a68487fae920ea71172263ec0f299c5ecc67dc45575c681d871a0c1d6c59ceae77bb0c9812fd33e9060eb7639934a9e3c8be70590c24e853d73a0aaf9cc8cc2cbab38374859f807dd50509b01b0317f75185aa08ca6b86df69e2dfbc46e0a76483698d650ef3c3d2ea2e6c6d69cda49a2e07d84e5e0f3e4828ff5d2d4b3ed42039e554f702649ab0dca9c223d8c35df2b4e89fcf27cc67e6ee598ffee9f2341e99cc07433eee4db3e56a44c639baef00a6a84850ecf0aa783ffce73d0ce7c06c061299f929d02151e9f8d63d26bbf2c7f542165ef19e876e37f0d8d1f167c531c95e5c9285847b5d0b3894d75d6a378859b9f2596139b824ad6d5add27ff539969c92a3d24fdc1481113d7627a90f9c6bd2591703c0ecd1f15ab631e5a53b15848ea0b3d087584e3551a4ea58d0b08eff90df50fa6ca5560762fed23130aea97fea5be9885c00d2e7a1dd34e0ccc882f75d85d8a664556e56269b18365ad5e6091450fd3e43aadcd4c0d8af4e459c01f47badf539a0699777e7ab802e31788bb3b08ab97c8450f05a50f977969a276dc31c63ba0eb91fe3558327225967f0293f05054bc0ab1c4c92669941e372c0d5662697433351ffcdf2d1317476aedc296a72aa496645c5cb08eaf81e05cee8aa3f4df8b1a6cb0023fb35f77b4d9a6cf2e72221585c11b027b27b87a0bcae4ba87337f5a5604d0b4d5cbff6c5a1db325ed3fb143eae6ce194954a64e3c0f33adc2848cc3c4e212031bb95526dfb1422f5257b49c95c5f93cf923aef5e0cf09aab1487f9ce742139f99601efeb696112a7417f301c390cfa82be550aba7727f303a93bab1d73f2341a920fc89721aad8e9fad099ae10afd624ac55141a58d5d8011157b5ba92ad56807a4b93d88c9af9230ecaef20734cfb67214bf2181fdbb2406f46c4f159fe2d6bb1a1912bec2a6f2ddd6858ada309b65ee30ff7757e5459d35862a5ccea086320c1fa80fed0a1ca75f5eb57f299d449bfcd3067f4a9655f25db0f35f10040ca00e73338006f1842ec1c26cd279866f0f64aaadc8f30b3abe01a585e8202ba2c5f0a14b8c410b36c6273026f8429ffe97a53e7ef3c3fda92c42bc698e09089d97d8e35dbb5095883c7ff0cb55bdc83b14e54f40628f9eb06ea94d21d2c8b686a3ac031967c845e4eceedf7fa2fb40a8e4fcf48c98bc40440f239494ccb3859ead4685e6802819812fbc2c99d5e1689d09fe77d08c8c1990b39e1cad52685dabbb5c5aad63d3386cab88fd6b90bb7bac587c4fabb1f6719db715a8776e48d36a58f07041cf2e024384dc3e9e8dc2f8a3c306d955a9897fd7c11e68dfb3d85b823dd074cc627f239cd31e6a17c7c1b74be7eaf265d718e35baf5dd4069d2049083b396828c6cbb830f7167da17be2528b4f45612aae4d55fa1d1107807647a658d4896d6159237d6a4276569509c4ef3b525d03b5e46ccc3b639db21314860f5c7206e37a840f98802284892209ce430ccef53b2c56143172bfaf0b1a68e808908585ea5d53c25c2072e27e1bf64b145cc46bcb4e43a43184bf8dfd98c443f8539c932024da3f704d874d0a872b81cfd70009be24367598a659a33fe58963af77af1b47bbe4e8de703dcab2a8e968c15eacb08d08c2d860d32f3b7174b418062c8a8f6e5ca4fe2367a175f21051733fad91ea7c19b1f324db54b5dec80b3e7b23eb84ab71088177dfc4ecf5730e78f8406c928d0085ffe06e8447cfdd832cd1078f0d19b8f608344c789908fe2c2ad5bb609b0af29b87f8713004bbc07d090f25fa6ba75cdcf490712520dd9ec99f6d7ae79b1a4ab54e69fb61003c8a58dae8ed3366c841e1dd0a08fdfe47423538e1a32c62d4d5f03da59b6a11d7f6dbacf956e9b50792ce6fae8ff9204a26bcab53d87d36fab885031d8df8ebbd8107e4cfa1cc3a4e615bea2a2e6d0ec503c326480620847e10edd83883a4e16b064e2e2dda1d420d37dca596f989fe058e7a9a16c49dfe4ab02c109b2f1f6c36926c178dd728d87a41be66de0e1c0c1095e90aec3e802a0cbdee2d59b0207409493c1a96694ec15d359ac8e2e032859d4319e41553758286368dc06153fc5380f9c95731e9669bee586e0a2a415cd5496ea211593216aaa70d8a0942a968668e08319335cf4512a430e4c75c185cb294787f81088ef350e00b407dbf77415d493b2e1a2ed429a68596523c186152ed276fb92f010b9f4e788c82401954a9040ac74f989172095c3a8836a1d93be7f2f0c367dac2753d47bd1ea63289b2a528e3b8bdc80a277ee4f6d58c4c8a99de4521761e6c97478edb0ae8db06295231b3c37375fb471c565a301f1ca77083a69b4755ce67282fe639aef7db2e7edbf1293a4f2f8578b289c0bf931c37954d826ecc7e1df63fadd8a6f25851739963f120cb28890c0cbc56086285f8368c8b646bdbd4ba4ccd6ffa0d13394c2451f4e04181ba2be68da784bcb2d50a2353001438ca235407d6a9201e1a9887be296d44d26363d70eb7643ed4f7920f956e6950e869401210c2789b9eb3353f4e2f67e1069ce516a2cda111bc9b3ea9b60af809d932c5622103ede20f634ed0dd6db3be47f38856277a74c457da030357313f218e1ee4becb38747b3d1fa4135520280a7e5df2b34d43695179a485820116559b8209c953eaa7d07b9136e597d5ced59be0d83d6afed47eca031c157f220d6febceca633a7973ec322752988fb6db084bf36e0a025f9aef5d24beaeda03cb9954299450f3e7e1d04592f1957f5740ce940ddeeadbf114ec54ff569baabb2d12169fb8a852315c68f0d7f40f983534c623ac3ce0bb9262d40e4ad120f61b122f686e2851c10d59c59a2bd485ff1dd872b172bd736f974861b3e842ea994792b05a3b70240f56efda2e686774f4640a694630ba149a5d8b5daa3eeafe985ed999faa9880315ef5ba15b90880596bd7395b1a9d7f3e1f428f6feef9ff605e9abf69e48d452b1c18a1b73d0b8cf0cc6b2cf267f9fc7fb0d7e4110a6c8f656a68d1b713b40d8606f5057029b6cecf9949df2991e800450a02ee229700fd93adf38ea44c793cd2929247b2f92e2f4d0136f930313d521b6fa3185a6b2e12cdab53d6eda9febde50a1ebe92278b8a0326cf9efaa2047bbbc72e14438c3af0377b2cbd5b36e9da69624e8a146f8add316a467f1079d83a3d44ac0868cfe1375bcb588fa46658c28bd81569173dc46c7e28a9ef1ab6dd00c521e83a029823e779f14ef818d6b45ae6adf3cf04401d5a8c52345fa29cb8b1706d3c14c81598e9db1f2dfc90cd237673a9e02e59a3211150e25b5bad75a1f30b17637f6e38b23de6af1158ee2e3a317c67090cad7f3313c3aa2c1516dfa556573a2e04c64598809ea67bb54050a21ea6440e31c6cd028facd78147a2d7fb01fe05dda560dad74b1128aaacc875b1a9d37e3811e53401459ce997b10888e551c8cb88a1d04919d645d1dc6433a7cd18847bf551ab68679f5542957993bf2ab8bca4313b19d8a4860b54b2b93e68274d79fdebb9d9e32e35bae079eaaafeb05425a5071ad77c47cca4fd9ca4d4c72f0c6ca4f2765d452c930a230e40aa97a42a2acb8492c02226417715209034bb4092dafb1f206502adf63c02f08df51f83083f131befad2138b60469f3ad3510e2864bd5643a2427bc3f783c844ddbacebd73427430c00251b5c9ead75239454626d7db4addbf0e136acb28201aaf3f8731448ad59c262576c82659e8676a5107bab09cf0da6b0a536280387546f6a0526132e0db582286f9a83076322608f4d8bec94546b203fc0581f94379dcdeb42a9384eef8708861c503285024a728b132ecf7b6ae47cd1e866322c42f1e08b037a49c30a8bfc1f7af4ed87aef77ca050825d36c3391d4794dab2179271b3975ce6098c54069c74fa35814246a943e13024e84b1a1b68e1f422b109cab7b29af34b189be4b0be2649052d701ed7440d32a9e59b339eeb8ac2ec4cbfcc1a2564af823d17cc482af8d7097382459cd14678cbc9c2d51fba31d8d57983c6161949d5d66ed439389813a9d6ad1aea06a2ca7d1d637f5db0e22b825324ccc59dece9c5d752e1257a6634ba8ff0de94dc7df0f05be5ec3bf940d458c3ad56dcfa1110fd2d508c651d9db6d45aaaa7662a292258cfb277d40ca46cb44cf93e10a07ee2d66babe552365762b0b419213679ca101a7b0824d9890423878b5f8c94b65a8e3dbf7e755ae092f7e4b74bae28221197a333c937a203856f15c8037d61730f3519d856a339d001dc311d08fdc83a8f0fb170df6e5951c8061b74594ad238d2161b3ccd71df512c19b493c9c71e66d2e1412e55486b6fabd6a5c9577b352851a4f363230e0547e6c4d59597af8167349cd8e05dab48146b3334609c70dd6debaaf53cfa3cd5232de0003dcc53ce31e12a8ea74366d8c16f1326c886ac69664386d1d0868c64561bb2e22be481127e3a14c6569ea92a1f32af52be0217d52f4661b8465f0841cdd16e611b5482f2d6d2f7e4d00caa1b0168a501db551084af4b9f372c10b741f4a2cc7b52a5636fcbf134a6d1fc2984a0881e536fc2cf90bfa576001a398f7037f1c522721b6444c206b4f74e24732b8018ca4982065591046ad21b61738263c837bd4f307e27a82c04f1f9c941c47151ac8267a8023dfc452cc92e8e61f5034b5ccb5c310a402b910bcc16b9515bf0cc423c482ca8985d7d82f582bd192d64c8c3f36c61ec98d1400dd1d8f2004e25f2a56690bb30324445fcd41e03e6d2bded16b5e90476c66df8bcad67945827d89165513ccfe637a2f2f6ec5f6689f39b3d4517459f4b2ea114267dcbaf8e78a622101ae0a88a939f19dadd7a4807d32c3210df383a25bebaa2583e957792a2e4fcda564e86b7ed3979a808f2bb0f28694f478def40346988dbbfaeedf94439305c3e8e9642b2b6bbefc4e63b58805783ad9b580555f6cc5fc87c31c83caa7adc63a79c9253064dae4b2c3264b13be455ba3adc91352f32b2554d4418f94689ab9ffa3397536cc50f284e80833ccc6b0b1329ef2ad0384bf3e7e1fbaf3dfcfddb157f745b4e0a9357803e7ebae1cb932b8c1dedeaae5d460317f03da0a9389fac945ead1d36e691b5e689870d615bc3224e35e601f7abd7a9b34319995bc8a4f1cacb7bf0843bbc395eb751697a96b34478831b45e3ba6c70e747940d397170d4885850371ee779119ebca1f777d66d8acce3da7d9c700c62de872b3dbd11084b6b0fd3f28701d9e85969fa743c2577fc55486793455b8f83b3200cf38bd5f767ab931bcd3f2bf62c9207e214c5fa31ef4f712f53cc057e84d3bcbae733fa635a47cf593e56237fe9843faa980af2c6df976daa3f6c731f761f985203597cee09b7ce86b0ec42a98d2a01d41e935a9469c257e80a318bac2edfeaa1fe314905f4a8030ad10a925820d03a4e070f470cf6441978ce0061291d62cd0b043060d28d7c9ef31c7c60edb7977f581038dbfa6954361b179d4f83602e40bbee081b180254438fac6147c6685a1eec214f2e64bd1385dea390b6f7de5bca2da54c52065a0910091809dafffae7057ba0a3152978d2f17316502c63dc31022cf4fcf9f3044b628440cf3356f204bd5525ccf49c7fc14043cfc74a2c8561869e33ce982043cf3792421217607057de4d2ede82a787ddf18e2f58a5439f3aaae36f1948e185f9fa3e86f94abdc35a2b772eb4ff9eaf70ee7890241208888118d6bfe1b5370cc33338443776905f4869613114f249eed7df5156b5b87fa1eb09e2a4a82df7983059b1f624f940954739af899e2f2593c874fdf6e004c58a08bac061cd125794c01c808828485b867802c10be0d0a2cc60a71e39a5a69a7a45133c441a4429a3b360d8a0fd7f9c56bf6a3af304573569e9862d87a6898cde5166b96842c38d26186c4d5edc702f873b8ca3e35213154d4be81d6a317a01a9eb47262db1addb053205f6af4b38cfba735927d35b6dd56ab5a17eadb022307d49209ac6dd739cc194220345db1813c66a1923c6d620368c024ec88438020a24941003b45b5f860842fbff17233070822a6040c41059408183ac878e4b5ee2f0420649d232d39b9ce9086f67d25ffc15c500f98f6f97e9ed21c192a04ee5cbbcc888c98f1c698c5f29e34a4f30df914f65e62bbafca23133e6f4c4c43446ba7b931b35791193c7664e57c62895c1227f32bda21b311dcd8c64b248e9e94a19a431464d723b9374a632364a17599fd0f6376fbfed87ac967f2938249fb4cc5bfacfdcd9d1522f49f1e5de7ce08e59f4f72ad5c7ef5adf0153f050d3f11beff87d6b4e928d78a8ed683b9280107f77b071f4dc9f9e5fe36bf533e75e0e30e6915739c69d379282bb76b4f634fa483d59b00220acd0f3e9cef71c8031eecc25f827f729d950b4678fa0fe533dce4f90be056f1eb29a67be0a1cb29a6e19a6fe84b81f926b74f733c78fdf446d03de14f84d621607e3a1fc2dc3d4f767f6314356df21abefa76ea064fef609cd9761ea1b99bc286bba8c316dced8620415359841e5061b8517322eb6a0220d1a65d8acb10110a110372842aac19a2f40c052b003154c4ba801476cca86456c08560d811735a67b09b3c38e5b354b6d7704972d0cb6d171c98b1448e0948e4b5e96d01b6b7aad911492ecc0c20b117a877426bbf152f1d5bab2b5c3be674f65bd0c6183a75af2705679b8059ea23916e0abe392971cf4f628d0ed8109f154dea6e3929798de2c59181a23adb5d2e9458f8773b624a5d3526badf5c6b09032a3153f2d2b0fc368697475338bc5fa11b23c2f58c5c298b6c6e86274554dbb744a3136d9762d32ed2ea34ed4893ac9e6ebde1966726ad27e2fbeff6188449d9034a4f9baf70a56d21ec3a2fdb5d87c59ab55a7f9b2b656d97cd93bab48f36535a71516ac64eb953b069759694fd7e93a5da7eb74efdd2ed26f17090929cae2dcf20ef71683ddd88ddd98939393934c2693215d24a4b7b1f9da6e2ca61f48cbfbd26d8b79e8aeb8c95254743e72884c2c10b3e80da58a26318bf66de72091399ff634e7734e9f5e355da766fda6afb69a553b58f5138beda6af05b52119d7acd1feba067937bd5ae5cc9a5fff4ed3a6e7fd646e4f42fbdf2f683e12775342bbfd905489744589ce26a731655c36639251cb53acc86842b1f2fb40cf6ccdfb7bce2f0b2cefbdf7d6392916d98ca922d54b29a573de8f1ede2b2fecde278fcddbe434a68c53199d51264ae9f7b8f75e2a69934d518c59b66b8379acc0df09493861dbaecfa6ddf952bbfe99da6e322975310e4606587e1ae9cdd975f2fb1e77d118a2502f3dfc7ddd36a5f7f1fbd4cbcce4fbef53a8efb70fe565cafaab9970c4ff0f6f63f31f186103b2fe8d00a38bacbd71de6315f7def7cde9cdf73c4f6219f1dce93c6efbb48f0ec69d5c8cbb521f7f686792fe05f4260fdd994ae04c5a496f67aa3680b153805609b44bd8272c162bb35aeccc72f190c943b75fc034d92b6396b0e14a1057b4ffc6244517598f557152eab436d1669cf3c9c74e937ac803db46bf20ef7ba6acf6765e6ae3e2b7501f5f7edfa7c01f1e3aea0b3dec68b4823b9697c5748f9187fb1f8fdcf6940be232f510b4825ffbae604d6a59e5a115fcf383223018fa4e14acace3e107456047b915d345d64639a181b793f1f7320ec69dc464307a3b19ed5f67dacc070e954b65f2d0ebcc43ff50092cdfc9b84b8bbbb4ffa277f53217a987d3e23bfe5c98be34817112f31c9970a6399987fea933b0fccdc990b4bf87345f28997745bba7a4dd9f93cd172a76f1eac3964cfb7bb1f9fa9c9cbc2227cfc8e948fb774ef3f5c9e68eff1da3fda37f27f3bf33cca4fd3ba4f9faee15ac8445fb7bb2d87c795e93c774a4dd48bbd715c91c2543c5260cd66a85e1ff44c5262a365131fa439d9c9c9c6432990c090909e98b7db12ff6c5b47f03de73f29c3ca7e939698f15e584bf4c5adfddbe7f434117356d8d61f71b1187fa328d3c5dc701bdbd0cbb8edbb64c2b783d1f45fe74a4e34f305525c678efbdf78787f12fbdf56af7e66d6d0fd5d5a1de1ad6743aade6394a9f30f22891e608944cd39433d33891a68d1b3520d0e166166046044f2f400204559238401b4a3138c81c2131454d951b354c50c9824b136d5861a3045bce6862cc0c62d006136fa49122a5258d16a8fac3ea572aa59553c705cdd30d4ac8d65041c59738c6a0c2ca137144d902884bc4aafa0045972b96e0a1862fac8040031770c18229045fc2a0a1e2d184d1be54a7a8c01b812d63c2b18ac3871b9b3360c0f183ea0d1bb8c301850d1c59c0218607471a374c9d84c30a4aa281061642e440022baed0208a119b128233669c40093364a05283538d5677d5ea02c6c700a30b1b2b27d419ae32c325470c66b07d2146cc8c0b18333801105078c1218d356f446941980d099bda039a0f785f6e1c2af080ce35d674c1c28a33639af0024a15613851023262d4d00414606e1c62b82a258e373ce96e8da49064f5ab1b1d564ea915442d2d1eba2395193d30219ecaf3424b14676eb089801b656851461955886164c21561a401c6165600610232506cac2a0f0ec576a6053a54cb8f91948e4b5d54f0c4024d62a0f40194d22942162c7fb7f40fd64f6bad55516aa7101ded4b4b3f7e4ab817541d4e357b39cf7aa8b75f90951d71e5e18bfa68a5e88176fc8f8351bf6491cb1377a96268f3f1a34d0c5ad56159e18f568fbf767c7c181ae0ae1c1fff01eebaf9f831b84bf5f19bb80be7e35b400806b1aa090ee8610ba8c0eb3db901a94d0674ea6568833fdae054ea05df417d81bdfb791e0bb0aabeb081307c411608ac4375802f7c3c60d6fc8fe1fd7861b0f7de7d2f0c1ebe065f70c17b4154f9b64537bd68a5e881b88f8feb476b7fbbf6a3be4f9caad081ae915ba95a80e7df7fe215e0148286d90cf407da2d8ac270427ba006060d5a98d14afe2e79bbc26ba01525790609a4e42b6865499ec181943c05adac906798404a66de7e45c74f9241f040d14df0bc7d091d3de6a1db4051c14160818d008eb31dc0c889a46ba703699b9ac6e5ed7f5fe6edef6fb7b9e948026f07e32e035d8b87977b47e32ed7f51d8cbf3a592de3ae222cd4c88bde3e4657544c0b35cce8ed66b45043a6f78c4d1b749d5174dd12c7137552d1f52f3741c9715ccc3ef3b0fa875ef0762ebad61c24fe928bbbb4afef5fbcc95df6ef77f153019c010a90e759fb9eb3f2650f24e1245cdf7bff9ff94402f265b6e2fdcff4c024cb7150f4e6b87750d3f2b79550b483da6f2093a10cd821abad7d3d6dcc5d5ee4477ea5e6fa29f0c61d7f1488e38e073a185d1fa41a0caebfaa1febdffa3a96f044a2375ecaeeb060c85261cf53e968698385458c7f29e512a64b0890c082044c18e0065684f8c01645557801aa24404117346cf980374bcbd8d272e98c10da4d034519377429cd174f5e687f8a552afa29f898277cd0c19a1f288185b84b3e8c15fa8b02fd78a3072bf4d21b66dc484f45b3ca1535cdb981194fc5351d89da498c74e8c990d5fe5286a93d6ffa50a674d2f9778e81c0df122633cf9f40600ac5e50addc7958e50709c519942ebe838a382a4af87573aab4b3f29c170e80250344bfe0f2dc19f1fb549ef04736e8c3feb103a7e747bed3b2731c6af31339179c8e6cdfdcc4372cd548132994f33d5f170d3d7b28e06640a6c9f32a1afcdd79e097d4bb92dcf3c64f5cabaf64ce84b7f979321abe7123af3ede105d8e59c32473ed552c6d471c04117589a80066f8a753cbc3947d5f287f9bf7fb8e58997c5d331c650b2e2f8183b392b65b98bdb3e7aef2d8129dd401ac3aedbba958e6aaee08da5285780b1850e67d020c011465da678230b188c918226b4287a5423cc701d1724f0b84801126ab248810eab6ef52b379a564e9c957ba7b8d14523811b4b493abcc29f8e4b6eb040ef906905115c451e475a451fa7de6a157d9c6eaa95906b51cb2f484aa1f9f32f93f9dacdd1ce396bfd822aadde25338537eba41b26f098b4263cac6af5c0a2745b0d2a38214595347ec892c31917a4a011031dbe8461021a82f88e5855a41e99755c72a3c8cc13140048026f4b291d97be60f15106c7f7745cfab2441c68663ddc60d6c31a65cc7a689acd7ac07265d64395590f51663dd83093626626458d9994a69994d94c8a1533292b9849499ae9c0349372058592728a60524aa92a877ed59bfef198d7744ee43bb1177ba81afa11863aee1a62f1fc8c5c48e1a42b381423cff65ac83337d6f2d659591bedb7d72cddb4fa3f5e87e8365073b2fd93a9b7cca4fed5b4cec7aa7bad0c536b79d73c64b50a5c3efd4ede8f9167ebec094470fa9e408c3c92462da5bce04a65b19cc0508c3c3c9e877ea3b5916f2398538bd095081dbf9aeb0874ad72b504ab08741dc282f59dc87f327590cc43566726f46f7d19661eb2324c33548cfcfdc3d90f487adf4d312b94cd7c50f22be7474d295d22bf66a7fb48d4324c2d9f06aafa61068dcf6babef4ae9cff92ca4ccc0f2672ba506963f5bb0b0f5e1eaf1ea524a351f3bec4969e4ae08cdb80d1ec5dd5d8c3badd3dddd9f05adfdb7247d4787216807c1a97b6de2d3571d88a2e9bb7f6a0d37e33e72c0f23d07899cf16e51722aba0a4a0d8e3c5349042fefe3bf4fef65f5fec7b5098a00059eda7373ce79bf9343f293461b28a95c0f05d8bb964aa3cf04586584b1a4e23b958dcfeb988b6920a5b660ad1ed8184b460b24289346068b0f1309a992294208171a818c9289f2832cc248a88823c76bb42184101157ba355baab0b618d1d2d4a3c197d62081f6a77e2fa5d2094d9750a3e91b71d7d5f45348e2c20b346a4a29a519fb441986472ff4fe1144fb5facc692f65f19a1fddf9764c0a44614eddea2f2dec614cf35a63b6da9717efddafda9d31be3a512cf977c98874e427a3c9c9f52ea49925ecd2adff157c92b6230d148e948430d182be44c97e30b8a859a996a02b1b53c89fdae745c22830a324ce0441759db46e90334b88cbb3a982ffbd3cdb85359e960d58c8baf74669e4f391f470a2c1f4709cbc7c982e577c0fefd0e24d5ef80f6db772004a6ba0321b0ebf864c4745c1aa3cc4bc7a531a2d0b2cc7cc9d92cf2cc2f81091c3d3c42fab0f52367393487e69c0178cfbd0bde734f9fcb3324d1ec02f75d9e81cb39b4fb193cefb9870274bd19674869cea829010c8c6000259604126a38f104155888019a506ee8218d152c29cd5c60051010142c81822cbc60e28b2320960f587bfbd5eb4008ace958020a300b120d2c5f7e3903d07e7b17b4df720efd0854b30bf66fcea13906200b3895f1d87c2f9a2fcbcc974ff32da88135c0f26d94a6774a9dfc8b29fd5062d54d4bc7ef71a655e386610bfe600fe74b16aa22d0cf7d99ec47f6137de22cd3b30496bf7770aaea86ca48e79c6428bd59aad2c05286dad3ac812aacbad93ee59d2fe3ef39b34499663267adb55aa1239dd1eb2229ad9abd1bd7a540d3760eb07d4854da1ed9db513de9474d9b5fd0dc26cd94bafec008efa3c2deab7d484094d761c18407e2c41dfa1d48b55a2bce7c1c3dbf43a5eec65933342502362777330c6400a8676a73540d5229faf8f8f8f8449f0b024e7cdd596d2e09276469daa2e3efc0228fff8f9ba0c455a99aa8886887c520f175dfb33cf21d8f5768bff2e88322bc285f51ee6c498403e44b1ec91dfff87208f99245534a1268bfeed193b07c58962aec872466b99452242f57cf145b9cde3974fc707a7cc9a3994d60016c5aed6103702013a200b105b03c9af248d54453242a0d14a3165ee818c3c8a229ad42d397300d5667d462e4a1124a964a9aa3b848737dacc1dbd34b5d7000400d38fe9547a6981a036c755c1a438935c6954b63bc38cc1abd574f17a76ec7d91b2dff5e57b560647ea85fca4c7bc1d0278d29caf4e2e43b515f2f637c27ea8a6f4be6175f0f7b31a3ad79958c640be619f6c5e8de2dccd1d17df7ed15f405cbdc89fabe7f41374769e37ff50d63642d07b21e7bf7e255d57109cc18bd5fe65191d9195f2ddf99b1e02ecd3b2ddfa7e0d043d984a56d6679d8748591969b9a2b74b820c09e8e4b56a8d1f2b51f30a7e39215663817584183788f80719a3b516b17d4f11df9958ae003f678f1155c68aae3121820f45ed129a4ebf88f1e774530465588f223488bdc888c2eb24ee001ffffff4a156ffdaddbde73e4781c7048ea1c9d0d7a7a4ca22963a69b6378f880f7535dc1f953f7c0721c070c0ae7998e668e929b5ffdeaa6de804e82c21b473dcedf645645e526f9c5c39aa38732bc5f4339d25df45105ded3e8042938e7b5aa71e6ebe7cefc09c2cdaf6e7e957384a8bec931f2e4448df3db8f74ba1b5007549d20027c73138493551ee264549338a6fa6801a6bfa79151cecf9f54dc75f3f3e7d1ea77bc24d20cfd2595e6cec4517ad60d381d8babfea6db015224d46fa9e45f908ef76f2868c70b49bdcae1c1c10b499df33fee47ee8a3bc01f0fe74b247984bb76fc7c79c55d3a7ebe944fb88b839f3c1e498e0a9989c6c1015921073c563b401828a4e6d714c7ab389287f371b21fbd2a6fefc70b2cf047ab0726043492c23db259cb3f3ca4a0d7827da8e32e241d55bac8eaee7cd990443ff5d13506933acc7514d45e769a77bd97e0d4184c427d77352d9f7027bf2393071c787ba2bfafe0f6b65401f554a39f0af62df800b0011fd8c4d3d7fb54a81986fb50f44d1534c72095c8345a03370251300713bede97c0ad0bf5860cdedf8d3c1e0c30ad4a5ef0507ad3eb07bac8da93e620b19a3ed51f084a40039629aaf00014c3f5a3ded6d071f601244d6591bb6addb2280619658646d7298ba4a7699e4a180b8e1ef67848bfe521fdcdb23a917e4825177d7074ccf1ef893e724be4a95fdf845886ae61e85abdd0f5f7102d6791a7fe0d1b78fe963369c35dc21d8ba63f5ff6c46c0aea51fc15231997b359e6883155a8e86a83ae9b34732fb7619aea38e56cce970748b1588c0630ee1a23cdb82b7641a3a4ab129aa9a4d4869c7d485e3421456fe9a4ebc7275d6bfd29e9c4e2ae3d9ba692bb6297345874fdf984bbea11ba96602a514aff88d4d4a38f0e2c9a72a015ef5347e0ddf30077755f1fe62fefeb1bf11e77b9ecd78f61bebe2c8be64e0583ea49f5a4ee45619c8bbaedef5fddb9379bdc1567344cd1f5271877e9d060cef6dd472d8beadf5b6f6880f76cd25506e66c59c8b5742a1e826ee461fd00ac81bfcaeacf59fda9547f62a93f9b6c7d7965be2417dfa9ffe582c1524cf4c13aca592b094c269495d2af4691be53ea4c1759db22598dd6fbf51b0ada3e1fe32ea959ff7263e8cd7a5cf643c9db4f74e2cb956607522ff43aafe3b87c2b4553634ff489a2f9429f3c747f57525262516991b218f18497b89143582d8a7270340b2d5040a1d8e80eab5fc5dc28630bd31630378b2daa10749cc5bad01ce8388b4131b749a54ffc7bc1c8e3946e795e77a7ddbc52834127bd48a54f39371d796830fac8fc91c7dfa9ffff4fea72a23ef2f8ffabd1d6604dc7598c09ef8722f46e69ad068c759cc57a680d71bbeb7998c6872b7be264f08395c936317ad05aa0745b774b6dc15a3db02aaed83551f84085b260d15ad78ad16cc15a3d30596ceec4bb468a104256c4d4bc118450154d6ac218c198c7debd8e6fbcd436af1a2e523c4fa805314f65eda6398f8e4b5918c9a81b343e718526a50bac40410b9a3569b8a89182468a20ff1ae20be2a0d2258e33347d5aa4b51041d3bf35d03446e1c841d3a7946228b2d878b23366b47f3cf384f68f568bcedf63eef2e934bab6ff8dae3dc3d1b54d70a95eab13a2eca36b83208216d64ea801f043fbb7a26bfb3cecb5f4f83cccb57df29e0fcb7bfe9632ff9fe08ff6d87c2df9105ebe477117de2a1494e419e46f1692a3d0c20af9778f2b390a2fdfaf380a2ba050f4402be4192890926c83924ff2217ce843c763d8635abe94492d72e6ae0f5ebee4e22ed6cb974cd269abc0df2b9dcdf2e077f8a3072644c2f032012f5f78e9c2cb974af3c5c223e0f7aa003236808f3dcce7e5b3e0ae204fe4e55bc05d455ec86fd50a85df3a3fbf59fa7708f4fb8791df3d41bf6142bf85e81d65f27bf9362fffdd85f33c5eaeb48e96bf593b7e6899f31ba6e52b01fd8a9b107f09e857e64ef491b73f113d0cf376a50fe70d45e37790c8c2c02020911d02120189ac068b8044360824b2134c401640de45be43923791670d09f233a58714817dd2cc7bfa804416f649fe30e414f2eefe834c748fe44de439050cf9f2f67957807f12accbdb7b4e01dc0f51401724ef21ef09f02e135d2eefee5909f83e894be5ed4d4fc0fc2447e59dc27f09f8a42eef23cf2580fba4cecb1bf533f5eef3309801880cf9203e79077998cf27c104f0453211d6792379229908b33ee9831f92b7f73e9f1424efef612f044440ee2921b7a089bc109bbc857c909ebc4bf820dd82f64979c82709c95b080a20911df24941fe851c80bc733c98892e097917f9ed00fa266f143ec801827cd2901c79dffc7680edf5017210c95b7f1003dcdcede6b01112c400423e29c84dde01f81c06f8a42d6f125e33c0f6499a4dde395e88cd0741e1871029216fd5e74c7483eecd2715d14f0485bc89fc10143e69882aef9ebf09cabb842f923f097c9db7ea51f8242279dffc90ff010b905b5feb7f26ba403e294847de45fe2713793879ff3c91155a79ff03c944b8e60d6485fa492dbdc20f104864f527117917f208ef4126ba3c79ebf89b89aeb64280bbda9137d0132100914fd223e4bdfa4b804fd291f7fd2002ecf8241d45f20e7a222daceebd3a707ef22ef2445af8f92422abbc47781d2d7cd2cd9be76b0bf9061b922a4ede3afe07e78900bd2ef2dfca441748deabebc127ed0802cabbc8eb4ce4017d92febc5bef4126c2abbc81fc8e4c84ff933cf8a0bc570ff44945f2def1fa8d8003c83ebe470f235fa4878fbc7b3ca59fe443c92719c9db88104864833ea9c8b390c3bc55b04b2c0fa12fb2a4880a7987f03613619d14e66dbf83251d7c52cee7ad63798470edcde191893c2399c833f249453e84bcc3cfc9445827d9bc4378ba42bec17e127d0ef2e6e08d7c128fbc797c914f12ca5be8833291cdb93dae8f9c4ce40965224fe89382fe47de3fde4726c23aa947de3ebe834c84b51525f9861e9fd441924ede3a2ff4493979e77cd0ff4c0180007824e0cea7008af04740105e083ce183c0d71b015d5f0434e181c0135e83afff015d4f0434e151004ff821e0eb8580ae0f029af03ee009393e0c7c65573621f78000f812c09d0f0028c2930082f02d10000f04dcf91140119e0704e17f8000f001ee84a0085574fc1040108e747c16d8e33f003bf80cf67810ece01fec91a3871e801de4e8a14e0e073c563b74e0a86e72d86090d32950db214b9933342a5d96ba7cc08ba227a1168accc430ea18433a02a327ea2e2e41f00e5f98b59a60087ff8a72083dcf717800c2237eea5fcdd81d4e1fd46bdbedf5af7f7b7d32f877787dea1dea1f7d5e0d4b2f280eb4b163cf4aa69da6f22dabfd3fe6a6f25775fdeb71c98c443e76e76f25277dae42a275fa3ded59685bf3f3cbcf287879ec4437fed65b7ef6b6ae09b37145bb7965b39d461ab82add043ffc1b90da36b79f8fec2b3fe76ca1381f84f10480cfd7109dadfb7088368ff1179fcf10df0fca8fc6e7a32d721ba0a0ea1a4770fed2f1fcfef6a8d41734eedce39a7f676ce59516474b4e1ab2925053b2977cdd9ee9cd372dd47ede39cd35aab596ba596e766023318072145baf8d849765ff86ccea64841675396a853aaac749c4da9c1b533d6a84c9440e24b2fd16510ff18444cdf97413497415c172007311248d45ded60a503a5e3c7ad59fa9ba678c0daac71c71d47fbeea1a7bf056504e24fc1198178de364620f76304b2fd2b137ffafae631b06727afedd7a1e84776d6f6a99321b9e6c9d54344f4cd32f2d49f9e0b008ac6c04a3f5955d79ebee61e18b5f701cd0ac27116022d9a7eedba6d69c61148fbd24518a6af69339e1087064a55d4a4a649a9792250d23ba5fd13e2416bb0e2b17dc41ac4870442dd453b6c03bce3171d9d32e0ae1d9f6670575542fb8c0a17e9cf8274b564e8ef32dc01d0fef7028940fc7d35821c413b0923e0323886df23686fc00368e024a5fcd6e8226bd3396b8d1295c6044f98018eb32e8c26b5e27d57ad37411c06c7252a9ef47c79efbfa22ee058aca332d289b2d23d9e0398405d3603472d5f9313533aeba4b5fe9cdbb553abb5524a41406da269bb9012b381dddd316766153da62c9d5e2af53f6e41141916ce9fba362814ca5a6b8352a07dff52788d2e05da8e76ddbd369fc7711b8e9d97023119de87b76fc9177e413865e3c57e29ef46c725309474fc82b0f7e1c7e9eef7e1df42858aeefc46c72d3fa8b9d11d8742d95cacc2dc8d8d4d8edf3ec74d0ecff3beaff33c2f8767f3e1bfdb97a3fbc08802b7a731185339529f4aa5501eca4bfdf6a99b9b8e4b7deaefea0b4a712b2f258b1cf0a0f352ada192525ecf5d3dbcc763738fdd3078febef183d03cd4e76d1c65904ef3d9ba8fd65a8bfa716a93427d9cb49112f51d977a0e0cba8f028fc4d57cbdd0d474af7d1428356a0dcebd14eab34b32305f120b96272c4f118c08447b1b508a1143ed259615c6a9df574b7c032cfff36c9a6653939681a6f8a4b5dfbeaf434d1d9798ae78754b8c8abe6fa78e5b6253b4d5374b270f35d90406bf86bd14eab3f9ed6db00d0a65ad27c9d0da63707b4bb6e7de7edfc671dc97fa0b1e89da3e0a04b95fcd170cb6b2f63bce43a1c8489d0265e79ed4b0f99247b7fb302410ed3950dbb204431ec926f9b45acda6c883ddc058e414d1476a2fe5a80fe5752350d25bae991eb481bded6d0fd4db03bfb8e35ee419e3c92034d69a759115252ae57d1eb7a1502914ca7ea7799fdc40d41af3deaef352286f43f2dd0d7aa9516c78183c75f442a98c9677069afb0be67c1f75a7dd975abbdb6bdf922e771f4a0d6c0646e9b8c485167d41d75f775316c44e58ead805162efaa274ec020b15287d7328e43a856decf5eec5db17646d529f427ddef6d806775de779b7ebba1bef82aeefedeefd4e755da740ba6ddb16b47d41db831645c6756797b878d2516f0fe89bdf438d7506ef95f63ad1476aed579ae7d92a4e7a0391dc5b9487fa3c4e4a19676bc71029cf438ad1c0f4e9c471aad1a1a9adad740ecda07354e85e9b60f53934b5cd41625f7b5b6de5b8aeeb3acaf91744238f9c3ee7b4765a6ba7967317f3aaf667fd6cf5d01f23484069e953bd4dcf46fbc71fdfe675ac9adadf638c3400a8f97d3ce2a7020f5d9f1e69929f905b1da998e950c7a529b2e80eeff85b4e9c3446ee77fded2798d371d5b75ca796df91184714a3e3c08e7b50e52e07631463f336ef3bea7160fdaebed77df71d8969f4f673fb2e4ee979526e997a2a0f23f71e146de379673b9bcf334a0c8edfd195ce4a731d5575bffd37d5f6fe1a13cfaa0ec7a35f90e713d6609c9b4212ed138a6740b169c30336646ccac03a389810989667a8dc50d9e0660365f80945329a83f2947b0fe8f8843ce7a850df7ffbf838df92fabec3a3607dbdb7cd52ab81a80d0589ed6a575e79af9420500ecccaa446ad510f274a0dccc1142947528a78e0e22b3d67cf8a872b7abe4e122d3d3dac2a8a2d776d184c88bb260f4557424a2925a329fdc8a261f0fde18f9fd0ae0381f8e0096ce0e841d383e018c1a8a71ca3f38f2c3c06de57e3f8d38a9eb32854f44c62035dd4d75ddb3d28ca67326394f2e76c4212a6db810cd5b4961951b5b2963a69d2d2353bb9ba8933e9ebe1964863a434461a69a431464a694881f183564df3136fe2e5e829f06ebc31c6e8495974851ec6a714ece2c47463e8f07cc54802a8e51849d8914b6a0abe9f63ffeb9c7326dd9c637fd2777777f707010cc8ff8619b8228c8042881054b10512d00c34e3b92329a594524a3ddf101d6b9aa6699aa6cd1d39e79c73c28066be21face84e21ea8ce05d1e9ac9ac4f88a3ab31b9a7440d271a68391de445cabd4eaf810d37136a58c7ddd017c8f323f7c279402fb0dade0faabe979185d7417074a4de508eda3bbefe8f7f4a3f7fba8e739a59e97f7b7a1e82ba3e6985c24ae75f77589cf9737f7f3e9139abe4b6e9683961cbe68fadef77d20121fcdfdedfed24fe83ecd51e1ef7779fbd7edeebb7d7fdeef3a9049131fcd650af868eeb9ec84fb2757c7c833ffdec8b3fddd40f9bb9ee962173d07a96bafcdf9f96f8deaaf8c962147ca7370ea4f064dbb13e9a465f0b4ff7c943f8e69d732502f556cd04329a92516d352c10d640a4c3fe608008af687a29f487d5993e2e0051b61a4133c3e6cb57492e833b57b5e8668424287c524ab34e0bbc84156e9131b0c51460a96e9adc381e401c7990e4a7aaf3c79a5025dd4917a6963a643472f53a2c8a1a31765de50e9b8044695c8d2c1c405a068fa51d3fe21b937fed6c202e88287f203b0464cbe17c9974f01a142a8142dd784414b15aa1901000240015315000020100c0704e270503424cbd2921e14000d789e486c569e89a34910a3280842c418640c01c010000c18333343b40eaca079ea411373a8415f7a3158055e81c354fe32567f3b997988169e0b612d73fb3b113bf5c122e364fe9743ed6869712f133c18b206823d7a961684d70f9af15f6352d16855c7ff404a7f6921179e806cd671a4c4972cac046321dcafc5b6538a0c3c97f03abc9540d84dafee2866aeeffcf2f159b74fbb4e3b47d19e304d68762a2b94a3415013303cd9c4465387e715bcc4e330bd514014ceb02a80c48c35acdced215636be8ac880cb0ef25963253f0d6bd9b95e6386050438a80eeb426d0775acd1fc8a71002360d1be1a1865a9a5d953ae243df2bf537f3dde6a7cd91993c7a2cc203cf68bd0b50cff10492b61a02df9d5e8e3af1ea9ab1a9d57a6a404347ab0b83e8a3f4a6d255817814e8ba8f1716fad58e0d5dce9174a1b0eb6175b4cdc2138b69918ce3db1d40033487861c215547c9ea5721aa4e39f681666abe3b875376b62b73c0e0607dac702b360e2e1f6d992e67906582360714b0209572c0b91a8f64aa5ae7069cbb5f119ec5d31ad498c93477fe80dceabec21893a24e192fda31b53aa5e2808334d983001c97f25b1a0adad898555b4e2fe8b5e53423276ac10ce2e06787324c55ff7533281c67d7f0111b2f3f596fb5ceb4eb1e326e1ee2f4345073800bb1cc63a8450558c1e46417865bc92d9aadc7e453a4f6895380466be0ef71656f611efb69647032cf4fe2d467f002d6824369cebdbb72ae5cd929486d752c73c417d7890d6682518127a38abe43176a3902b5f8849b1e21555c756c8c443e4b28ac7ae042362677e841d459a3de3506a854b3b211b0ea8bc728f22b65b55f44140c252c0d3bb6e9e4f6d97ae2301fdf8ae81646ed40356ef9ae54c6c9f0dd8530b5ad14c6e7a388a31c8e1f2f1ecf1fb68e7bc5e1a1dc67f162af5c5f5dda8629ec4abb37bde1dc43d18608c29b91edee03d195204f88c5b21fae113da21ec3e6423f6313823073cdc4686eb92d542c5730c8d7a8e8da72808200870641f9b706662ca4d0d5bf3649bfd52e8b51c2b669dc96511c66cc25b1535128d730ef694132d47261fcd35f2aa7a8172c2e937c84bed2c6f639235bc673c0193e0f8fc2e6fbb3b5ff9fa5a84c966bc237932abbd5fc10429b51985037c54237189a71cbe77bfb9e4b1a7d3670c96e5666288786f204ad76e2dfdd1aa393ce047f47c40134c479765a9fa66c867c0d3dd62411ad34b521ad6f511a9c6ae84d64260fd78a718f1937fe9d19b184cafecdf9bb30b8f80c52c432f63427fb97fdefe17310953f4f0055321a9229992de80c6445385d31ef7f3012504a8125b2ff83ebe37beca00a25d5a64ccecfd97ce621d05a25a62eab2e92f01bcbb6be972302eb3bfd71b44ff4698e94ba8030b5505735be55a70959bdbb59600c793ba996ca2d7e294fdb426a2ce41dcf7ab36aee388d2dc6857e904c0a0bd2ad313a90daae5a545763e4dcbe4703c996a06285992e712a6b1f2ba0853af30942350705222f5757a8fa19149209832f6c9e7bd23e73a06499404f7e861af9b72f99770d12c30b839a6306a08ddcc1ae6181a039fb3fd4333f768e3a221a2c565a58fd35afe72142b561fd09dfd232f33b7e842b9dba04c534091b742dd95bb2a576bfe55a4665018f8b198ce6f2431dc35ffb8555522c6a84fa3092169671a0a88328a979394302fca1541a5e760e7fd46b839236e59b207d1b6644284a4312171c9e2c2d524ba38d0ad6baacb4939d05b3b6e060b5d17ebd611daba431b0f4377f126fe76fe1c8eea6a9f7db18a805e2985b409538bfe26c94ac7c850f93f90eecfb6b4cfe0fa6b25d31c838a8a75e2c27fc2700a753ddfe57c76c2cff1fff10329d7ac26280443d67fb0adbfbdefe3f40e3f7ebaee1238a21aa60b7e1494e98a3cc6b0f45b8287eda556d2389db39a51fd2d5ddc830954821c88822b7aaf82ff6ce923c9c0367e40ec4e57387f3936f3f888cfe1b778a3e70fef45a3607be1a801a1e361290c15e9e3a90a7a1c5cc4e84e78b7004da6b8cbcdd89fbdb6e3c2179458003fc5ca2c701f387a173ca5edaed9c0402126ab16796d4b7c22f985ddc1aacec113af10a0fcbec5dc0c610f2b66f4517d3bbdc6598a4cb3ef90917d95f124ac5c6e32144a6fee24fad77211eec626af2b32bc83a7d72bad75286be15dfa4bcfead4fc12becd1e51316fc2bc2c5d4a49af69f42d24e1680ee12e0546a01fc22dd4a3c2b6f9ca4721a17783f446a6d71ac68c2204635482ceba36e95e83b3c11693c2af7f499e9be762817c1f9b08dd065cb2c8dc3618a5ff81ea7f7adb4cf7b9ac54917b8d3201b41e3ed181d9457428c9c16cdb61307dca0e34b7388610bf92d5bad65a1827f840350fdf9a391a32d0ff28f69c04e5dc1bde6e1d799c37fef297f2440ee6093c3382b0a9b38d24f83fc8d0162708b712f9593eb9963e142d784e3ee6c397fb5029b2935022dc3bf53ad74881e7881cf357f7648da321325311e4cd52ad7a40b1dff98e0acda01e450040446fc875314c74d7f502c06d6935f616070e4b96b1bb53e67633bbad763a6b950232de14746ca55684c724cfd5b9d1677075645881f5c344b8f1d4101d5e81c830876218c38af6c17c91fc3ce64964ad588a88e158e541e1387306c99fedceb0d4734221b8caa90a19968740db4deb8b6d6853f123a28dddea9c16c434d0477a0b3f789c3b6b1a1eba64fdac4812488ba88ea2730e1b4b0d62f9405618ead415066c188807809fd21cbe55a2c6a46e37595803e2fd5e4db387c04cd8c77d5053569b8bb374380eb9043a633d632f88158d7216c6e9df7165285e4790f6dab0578a8af8d736e42ec354f0a435535252cbd95dff79220a144925ea8a103ee40b0c8bf84f723dc9acb0859770a3763710aba80695fa2a33255433efaa0a02ded7f5153c7c5e24eaa947622fd18901bb819c5506ee9f7200631ddbdc38e0e83dfed239b8143904721892d49cfb104ed392d141977a073c02e53c19e3cd4b83ee32272eca79d9a1a763c925328e05e7d5914c08883e5625eee4607c567bb336ca26953345f3077a86326271226167843b2055f10cfbc7cc71725b9be7752d6851721ad7ed0523ec5af9c2bfbd848b06884c5442147716dc63cf30096ebc1007108449f4c6988452b087db4a60c81aea93efd6d11eaeee81ea2bb94ec0214e46f150f39199a4f5f28c6abf14198defa338e7b36d29578254d603fa3c9fe289c54fe61e0a833f73d322709b7f30e6871246799c31d39d733e4e108dd3a10a2db989f34684aca9ea90fd9caf51da571c4c528aae66241e0129d3acd15e9da4e164bc378b0f6415b091bd4b17064cc6e91a787aea7fb947e83c75a5fa9b3ae1b34f3abb3ff9592714d134d769aef68050a44a88b2b6521691b9ebef47823b29801654208562299d8295134a017b26210ae481627ace698744ca6e664510260c8b0aac63ccf3f85863ce1f3466131e581446b191fddb4a1052fc08f824298deb67f07e768c2bb7e9b2ad1459ba95a646ef1c64e321982eae620b55fec80c46322eb786546cc5d0653a9f32901abd9cd9adb10dae342cf772a0849d73cb475488991ac5736a2bc669edc4dc8c9440e91a86a4ff52e670655af8efffe8b7405180019f2227508f5b188283a21c778f6f757f5738028ae51adb643da9d5cffd94439e07fcedb0a3b385475fef4764eecd820d68932660fdd6cce3a203e7af54e616938e3b0f6c9a9b62a5081146f0b0cf2ffe952adf3330c608398ec1f0e13e8b5ad890e3c265183a58d8b99daf4324692179ff0f1f3117d8c91a62259d5d67ebc34a5badb33659f1960d472733399da66320447b7f7bd200d12e09e05d409418053f5d91d00d8ea8f9f4674d2d4362a8a45a4c40c31798c2d4097220e3c68226062f145c7f16de80748ffbde87fb8cac7b90208f69181be632ec856ab1d77d06ca0fded02f2d3e9a7288d3dc6e3c6ecb2a6e993b972c193892a83c281a951b3940be08e2609df2290f8a227fabebe47de3415b07887cf6a0c16e3bf0048f8795ed14fa534256be747aa6e2b33247564c8b01f7aedd0dfa4b1f76733f25eb5293f72c40978831e93fe15476dcc8157538828c9e63d76b623f3fdff3c19c793ff1fe86806ec662ab907729b03ce48a8bf44187c905ca59737e8f188fe73acb40c3279123dcc7bc3e3417192710ec71f1a0a79a33c2b037d0ae58622397fc398ba539a5a2125d21884ef3ec4373a95bb1241df5ebf89bb85a8e4091a5766ce9a8d0aa2d4295909f58a2fc9e0cfed8feedaea896534f22c430abf0e0d8c83c5d9e58127aa9aa4b803a22c729049ca98f94f84dc0266a4db194976659ea9985cbdcab1e9313f00784bfea99281c41d5e0874c326d76e30f41dc7f11d72983bbb5a5083618cf036137cdf30c4fdbfd1db0c03407b86188407e7c12b62feadf018bb8fc4b186a91309648ee97604f483f528d4900ad31c59751d3caf4e6aa070715eca56cdc5ec5728e405d2f8529c9354c0c3177232d64e174a43ab9d4b9e1045a5fca2baaf4ab535f5a5b0c077cd5c950b20d07ca8d916a98c296274a2c46cc6dc51d93985acae89a24682c5f2858e4c052bf7c9f2c5f6133e3dff6c51e499686f1092859e474345093482d4611b1cce760dfad2e93c2d186563e1ca6b57d06dc7927161918cc86a8942460700daf1319d1585011792b703b125067f598ade0ce686db2a31855612ae02073d891aa313b97ee34e5d842e05b70e545f600691c87fc864b04c8703f5e5d18ed78f25b85399c505a3ff119588e615f63ebb19ca80df2917cd24e1c88ba3b4dfdc4056fc1d995880ef807a9e2f8b1a39f39d5dce2ea46a5868bb8dd88bfb01aa2b41572b30ff05059b367e8cb37172502edf6b42a8d6c650bb0272ddd16e62f17a8f506080c30247c672461e15e710d1919d9a171e692e1ae67416d2ab0af03e2fdbc9e630030164bb3322dfd39adf5e254e69104fc0a88f7bdbc9cfc926659def2f9d65ca2ec3e47a1312ec03f6148d8515d32f22ec7743fc652f77e006a116c2a5d0981226fddc6f82caa94a301fd35349a8b6c4e6254508da5f20d08de3a883fd100bcbd85607e662e8e63311308ee288950d751e091457652d1307432e81d6e843b02197bf72483e27127b019371b344650dc67b30744035bbccaadbfe11a2da1eadc147c8d42d63fa3becfee78e43ba69a8fbca6437acadb90fb15bf09c6f6deebb2926f2162892091a60ed10d05f9853175027db03e234bb6372a421c24a83b4983d27da6559e8a3604ae5e9c92a7b23b76edcac62e65b2829e0981021e35376af9e09a8ff62966576cc49fea9282185747e538b53f069b4f8d2db3a49aecf95818ad4d02083766680c734aa6071b4fc0d1f971ff3f038da21d415919d41bdd4a1d0659bf515846f11099687aba822f52970fc53e407ff333b5e1ede3a5ec99a548138ae028e0d050be137577b97621018a7a53f0122b9c7ea47a045c04c946327fad53a660d416e913c62bf7bc58ec93f6bdaeb0f068f20200f751dc3812ca003afd185ecce5260a64d7b438704f72e25d2cf2f54858a70b4d1e0eada3480944c772cb25bcd449dcc1a941320f4ab1557e7cd47cb60f9016d49f47529fbe06874e9e6b84d8286804f1dceda9ce718539c09cb654009c70ab09352e15e54532081fdbaba52510c7edfd4915bb61f52cad058320734d24c9534024f6da2beb53c7132ab05204f1aea45ca5f1bade3870f5f950d40f26ebb868d88489f4e340aac51be09423e5de01dea2aa4b1fae23ec0d91ba032352fb179112d6530d22edfa1e8b29cfc46721b3956296f489532f626ace3d138c3dba10f9f6aa2efd2d0766b0c6e59a49a285d9c03217edad4f07ca229f43ea38009228e2c5e3340766990e7de0b22b927eacc100b1e6305a2a34035aaeb286001e2b52500a6e9b8bc24a8a9faa1b8f4946c67e1c3342a9eb08d912fdd9dfec9221a744860553eaa661f25759361fec2210878f2c429969357068328fc918eced434e64cb1cd7ec56bf06d753a369340147eb90647ca9aa4498525da14daa649635ac31ac8f883dbc6611b2e99d1176259b1327d4b6f4e2845a31e52caf2eccc0cb82b5b1d8994203ee28a77116d46e5abd585a47e4dc0a45efd7d070f4754e81a16a66fcd84b1c19e6e6720e8474f7e85b4013932bf0d849e67f13415ef28ed4e7b337957cdfdac8d8dc4c70d0e16fc6800e24a7359f47517f06a8811263264c722b4ccff38c0ea58cb6eec2f1a057552655ef9d01574252a48d33e2d8e8173a2868b2a5e9a7dc8cd469478e30652263b27d0570d91a37d21f06ac3ade92f64efca46daad3e26c4e978316bf23727687257bf49732719408ae446f45f738176e3097908b96f37f779da0e54f4c52483e4276ada9abdb965883ea2acb53edb061efdcd1e5b1f35a07bcdb843d5cf5c61e3dc646c2201927bda56492f0db2e4d0d720d1633691f8b0b1acd1e810963fc954a6fba5e98e7c2e7e1839f75434cf25a5ed46b0e6b70797a0b371c2388663b27061fa2fce8c60c0aed457d668d907707d776193483cff2e143cbb4dceccd85b573ef16e1c4af47abd9e84669e1b7a113cee4191198edd3dba1da8a661539c037eead686a051f2e9310a7bde4eb6170c06165b5304c85dba59d75f8da23736c475239f6c9ae4a2859d8b5afd0909f207b732ec62b9878b62732a8c1e2699ed3c016eb65511fb0abd5bfe6b55d3071f30433d1850e101bc5bf37d8acd90421bfa5d5d74e0b80a1603fc0d30770dd1c5e077e206c93d8af83b351ce878ae241c39cb70f2ac25ac70559fd7cb690e093d67c782ab40ab0f02fc4b67aa406871b95d5175f43ca0c1ed827d9eacdffa715c8053607ec6c42d82bac1d23eff30f39ae21f1074001d3620bc1f8951794f3541c308d6b0bfd8ad841427b9385e6d60da97177ec8ba81320bdf463c2e8a8fa43818b913d7a3132a6c2a116574cff87d7363f935e1fd397157a3f38d06c5725bd20f54cd4375743445997132a22271b083af3da3d500110085d92550dfcc7aa5a2f561573baeb49229c4c16f194e4d52a9516f04041eff082af02a077fad4776091490b9864e0c8be244ebb54fd5de61acda4964a1b0a981b430565346a500df23c133c7a3e25f510b22afcca279dd1ea62d2221377a6c0f3a227b877ebd71da10920df4734d1a8022c6ba266f3e34631e5ac8c24ca3338e706f646f24b3614e5113a1c51595182087d2c905d8e70c5f21ccecb649a5b46965e5557fe42dfe5b2dc3f090ece67d5bc63cc2b3d9408ee5e1ebbe2930d196d65e708e333e9ad06dcbdd1c4889a36b8225b4df7f20223393e26a2b7be90d00e26e078f6692478798fed0c0e400e751c32a56d0a602b948162c165f6f63e5f6fc61b19c41225c8ee1829ca954c2158d3e23c69b2f8b0697863bd898f23e336431f2fdead1473fe0c4c64804619b614a4cd447b9ea41611a7a217fae260457ca33822f0973e60853834d300d238ce205aac40d87cc97570a1a25490644c21201384240a4b8fac43f0a21cd930a11b1886616315fb81df6f0f127709c83acbe4266fe30ed0b7ae1d11b9bdca33e634fabaa4fe34491a5583bb72144e05fd06561cd05cdd3223f95bde352b1d8b37519db577536a4a2eb9722c7b305df63f69213e57c19c413f814cac103f94b970c509ce81de1f55a29edb529dd91c14a83c0d57f683acf620ab6820f5c1a450fc387d5c27d47bf5bc066aba5ab2723d9d6cbde1a713deb0778967e48896ca2333ccba1f026a1a69c09d7ff0db5604be753d2375a4e77d0fe5f7bd2cae027d341beccb9439333eb04314d6b4218708ebddb8ffce4e5121a4055716ad0595b0231cbf7f0081fecb53d99a1ceb9e5201134b43ccd4bfc9fbe88230319fa0d8f65bce32961efe8b910f414042220df178cf1ff27144b6736080d513982a774c5b3b644f28e8a4d06a1831b7aac18c5ff06b04f87a4c68181eb83a164cce65b2649867d9619d15deecdf9eba6dbd9e6794fcd7c18ae69f3a1e57738da40379a56d77ec4856c284294cb677e1c55f988a20d236e2de787d5e5a03d05b2003327ca0116314299dc66c798bc4c817d84b13c65cd6a98c4f67966ab97ae1bcaf136de59cbc9f4a8b63607cb268d29df134e2d7891fa94a65521b6095b26adca8a89281d265b83ec51ccdb0d2149b71a868c587121815538f4a16fb4a58856ffb2260bf0b81611f9fe6427cbbca665dfac3eb4031dce115a0297c69b621814758b5ce0d3495b6f5bdeafa8a9cae189d66831b8c2b4d285e176b0bc02f8184f7ebb9280dea8b64dc1a6edfad3e7a0e930fd6634a1eff84264bd47c1e050d0e7c6ab7a145253e29bf9f42878f0f7186d2ac2e9d919403c85c71411c13db3e9c2a03d34190385a1a636c85f5183f31d9a2455a7ce725cd931c7ea2df366194123f09e3f6b445b320582b2925f5f3c77d9ad941aa63dc8defae621d68729ad9f0d3446d70feccf7baeef73972f39f5ee81519eb089915985d08ea60a166f9aa972c5bea2baea722f4468e85c725b3c20631748adcc1b678fd824cc586e9255173476a642664adff449fdde1516f5c0a8691c4f2d27c695fb262e51b7699d9bd38073bb3e54bb3b7b300bfb15cb4d3ef387ca69b9fea6631f0e0bb4823b5897737eb15f9a799976023cb70cc5cc1419396fad7e6f618bad3fd9d216e8e3c8db18fffb2264c4a7404f1d7d0d1fe3e3b315951972825dbda6e97e26900c9910e2d23c5bcd4f22490e8b7d90444bfd73e9d0f470806a123e947d36553b11b7a2963dbbedaafcce3ed019211760553aa3f06b29e25435afa89f5263233b76b019edfa964a041bffa487cfd1438dfbc92daae2ba88e8a3ec7a413d7422b8240d0819bc3f31f69bbd8715baca7629ff8afb1abc24362c5b50cce633d6ac193ba0de3cd649fc1f981a760b1893b135dd756e9ba404c5d179560f004e27c9c2011ae3c7f08370a55028c43a83ba9057a57de5a5348d326f27d9cd67d40904d3e40f85d9923422049e1b114834464a5411427575d94735912e458099f419b945f8cbd6d0bf827b978f4c2d25f31a42334b92a5ab0e544f0787351120361070a3b1077216381a1a3ce5cd3f8357326fa1322773d81b31696f98b3ed700c5df1f72cb4ec094e4522c65e54b5907023455d6615d67c1b106fdf4946d28e926f031c9cbde98db1e17cab70bffdefdf67f56f6295b45942ab9990ea7439df2d9c181051747c03d4ae6481751f7324e2614a0eed3a7225aaf4db4eced89b453c06e6603075774aee161003fd2b361edc64c566f1159079b09cb426c895f3d685d0400c240f40ba8ad7c95287ac3b8bea0743fd6183d8ca087206f1209a204d574182f9281dfd8a78660f14988f23f85c8bc208bc9480ec46105c06fa1eb27bc6331ac7951aa94aef9ba5adab7e5aecc6e02ec01c54a84f8884072867a8c27ca76b52b18df1b3a1e7fe91430c303b29d75ae9fc07395c3c50d879d286bb585151e3d52676039b2ec1ab1cce3f8900fa89b78ad51f99eeb9cd45c1f9ea625886654a167f7d5b57e14b6bb685186f40438b6a1382def289e9fd2e877033ccc6982233c7087f1471c29046dd26a5f8db2e9ee07fd8bd0668346b003f98bbe9b8d0e2d3f3452d060e9ed77d2b22d1e719d36acbc817675f16cbe8afc3a5f617a9314fdbb504ccac592e671b2f72284078753cda99cd560d55846b89952bb48a969d2d614695dc704d9109f56c6aafdd62eda573e269f713eebdd544f0f015b60e07893b7fa634758fa57c088aa34f4224cc408ffb28fb1ede1dcbba7ba88e740ca186a2d541d11f0f69c27a73536c8c1bf404da8dc875a2e0469166bf25971fbe0aa63aa2781aa37bc0ac26eeee0ba7f7aa88efeaf22b533b0fb59025cdefd2f3d94cf87e7061e90542967f594eb455c14d24350062d6a7a720bb353790227b710d9442d9e2f40da77ad47d844b10f7da5cded178569ceedbd6346197c942ca7c3d6f8f3fc71499bd883980af57edf8381e37a876065d278006b4e4016ba821dc012ced5d88904605a2867a51d82bde3683f91df1135a9ab33e536fd6c8b1208cfd7dc2a86da952849a0bc5b1470af143b60f9dd905ec114263e4086fd5be5df3c5acc49e978b40307725d289242ff52410fca6cbaee4b02eb9b90b50909a84fbdb63661a0e057ad8fa5472a7d08082609d47c285d0986efc639601925379525faab53243550c2d6a5c780f10ccf66354062c7988aa07c092eb7528fa9404cf8fa542cab18fcd4800388219006c29679d2c7f202e581e44acefe237e68c2b5b7157cff28a56bec38035457a09c635bf3896030b27ecb66cc4973de2a93113f56ab71e3afb815d12cc095e777fee1d30aba518fe4f5485186d623d128ac1f2d3e50abd9e178d2f233c9648dfba742c674739522ce5c68822e012cf419c7e73ae2e69b0549915cfe5b478849c2e24057f71f11e5b50e56606ee50fc7ea0a40c8c140c9dc3efb250d2b25615057d9dcb4bed7ec33a3a88dbc013d8433e231735103e9adb319826b6a36c943a2773ece080ec2a0de6618c3cae96d0fc80a9a7ec09e6a3a2bae7718a3d7ebce40ae448590763d13464ec5fb63fe95881fe655cfba41f8b6c8d41dd1a8070d068548555167b8cc80062cba75416e7e6bda10d8ce21dad4d4961cf24110266ddb630a4905e4835bd2b0c049031b92d96acdd7b68fd9576d67f662b60b0399e9d28f1abf07e7d6e801aaaf3f86b2ce5c8290ab14a8af5016032b831ffd3a8c40611b51ef3bc1e02dd4e1f4f240104bf94ee2889307a1fb3f30ce6f36dc4ce9a712630d6a012cd9b835b644d8dbab899f48e1b083e124173ebabe2df4258db5a2a70b3c63d439430224a30ee9073cef827b474b0e08aa7b402098e402414110d1e9585c9ae047f9697bafd00f584d6e0fd899167e5a2951e782d1946f94fc6ce6d01f572581161b08d8c53f6d8a6f2716446baec573d3a4871dd2e5f0632189f8ec73988c7617fa2cac9a80b617fa042c4c4c6abb606b5011b43118a36b9f4aa36ec555849027939d15175ab5082ab118edf1e485a1f671f3aa64ac3b695e82d2137936137d844fc1deb58aecb54f55485bd1417e39ac68a518fa610e99ae440f9099806bd0e21990e1f7b5accbafc76920d0684ce16bdd336665060b7662c929734f706b2a7742cc92499056de43c40ae7d2a64fb5a8d086c72ee43ad4b5d16670d92906de02c0aef00be57cb2f1d99622c3adc41e7c5f33c76813093db2e55e04231d4129adac69b36ccfaad26c49764c854e37833eb5304edd7e37545b30c101777c8e93f4ddc00480b563a4f466e6e2ce3170a46d3dad4e916ac80f1b1aac22b58ec1c8e28f3d20c3cdc173aacea127ff085c942e283c7dba50d56175d5e3eb2acc04fb73cadc500a33e85ff510baa5cf6521596f8036d133e9635788b94dca11b398263ab0f348d1f32a9eab8a38f5b894d537d1d1d917377582bdb1102177a5615f2fc4963bd700f80d533179be02a5b691e8888dcc8d37e8e588336a3fc989bfe892492af2a92e901a093402a2092c21bb919de6d103c1ecf6e109ac5c4ac7a8e66b4a3054db091d41b1ecd4119dc9f40f0d7d00343343035e72b44b100c54878d519abf57ca9154bbdfdaa037921e9eb8e7a8f8512482609dd0ae5a99050017652697a77529e53c334a71f040921bf293600375ecbe547a13c29088e4d4bbd5c53731732801b7298036e30ec4ac7211b36c7f36323cf0ba201f6d4ac50c837e6299bbbaa384f17e3b469fbed4e2425ccc4c7dbed85943256f9d30106d6c99389894aacbb87e184ed9ae612a38f24b6fc8574444ad897b3e98718ed54e5245dd2b14dfb49dc772a73a3e4477a74bc15efd4e88c46608cdfea157c318975b08b499a3c2ec4bb2afb6e2acc09e454b5abdbbf3274c3d8e22d3e5a880bca0cc1975965461bdd513e7d179536408197c10b9be6b4c7cb3fb39c6821bef344b31fec7bb42dfe78bde77e36256f2a14cc744809a6875dd8998e6db09510036c362c2c24e277d1acf0ab72d328158a6f34b9bdbb8a500184cd4614deeac719dccf416838a75dbffa29ee45bd05c505569d8d96cb1c74f866c96da4b0f344c2d71f251104c684cf930b7101a6b10ff6776cfacc49bddde43edb65607d971257bb36d00a67e4cbfe756fbc10c08ffc07cbfb51c56132fb0862b94c37cf1fb4282e36453d1d4ee38a0b94cdab63e0bb9a08956b8cf03da543ad9f866a59b590053a53af404ee35a26683a8811792b5d76df945fec8690100aca8d2d0015b618f9e6c17849fae1b13fa2b7dd1ddf101f3ca6127e647c2bfde3d96121dba7936e031c01c70e64b8cb0c2b04fb4503ff0fb0c58cc0f6579fc5129368156a6bc534624c5d07e4eb20a4ac1e15c468c0eafd8d544d55bd20483b36096c8be5bfb62b03c07e1d5f98ae384a29f60af25893ff80b8814c573ad61ea9f6b8f557294713f0fb22143554280ed3a3b34d4f5d84474939b7d2c9f7cf205c4ef228cd34a68768c3b5017dff75560a52b948d85be50d4978db3323269617e53554e369ebac14441a683f059f055744b6e6170171fbdec7755f7705c79fd7ede47f67a9da7d4c6dffad7ec4f64b83192273203479e42b3bb004c91c19df282f5c57944a3a5cd2722699ca258a156c84a58acbf890ac0fec296328a1d65e18f92229a2ded082312eb29d1dbada4af3f07d66e7670f679d2a2d71a45968611b3d2ee4a530c76ed29d3c5bbb42199fc83824d11ed71f89c38a8e699ca745684628aa2f1980d547d20fb4beaadea7fd83ade331aada570d9201cdf8ff4ccbb7b2cb518fff63b69ea76b957d9bcccae01cf6f64fc403ad6fe91e9b8a766ead699a21694f077cab4e231424be8022c6ba1b2ff52fdee1452ddf9cf9a4fb42483895dc8fbefbf6db171bb9bf4eb0270eabc66b1262495209736bcc67be467896dbc27e95712d9f3f209695271cf6166e3c8b03a6a6ec3e84265098769f1b1bc5c23d67a4b3d34d781ec71f60fd599531c520269cdf52401ebb17499cf9d965af15c4636b260ff6c120b0ba951f82e0b25c94a8088fe014418044b8c8992c757bfb20406d43be1f6707e6bea83a7883cddc26628d136989b63922f3cb25916ec701ab671eb1e91f708bc9f28e2806c8085f4c9c82428f8859900fd55e5af851f9a8a12753942f3f13a07d704f4c5bf0da5ba5a0e523d6c046233762632605fceb6a320c9839714d0a1c950dd31f39dcb8f71d1bdc1041a100ec28a38563492f69399c26fe632b03fd381b7aa2830b6c1210b24d0ad34154b22082b82696a025ef2a14a8784b9cb050d62b1c4bb44e7ae09cd029b7822f792449a2cab0ad0eb80a91ccc70245545de9e2ceba97c50102264833de3498694d931e6628ff6edfdc900f89740aa6c919f8bfa439fd21bdbe73165433673a6616a4d6b40b56688d0e3a0c6e0d4f4070a9337c99b6506e1e46242bb5171fdb6f310415a5bf466f480ea6cc8bb7b220308a472c999b829285afaf33e0ce46d073bd9e3ea117c5e07a70ec21ed7611ef58769c298cb6c2df9b23282b427fcb91fc62fe82e97cf3d7846e5abe50f3c30beed49de6a66c45e42c013168e2743b85d99184f982a2677c699f99f8f9d2704b1324c1b2308cc5b288f86672b1b67c8dfd969ac24c64efd82600158c6b50a4fbeba067f29270155aa2c03fff3e8ddbaa72bd5dc9dbdf634ad63a0ac04daf04dba889a2ff327eeff1d4f697b2a86942736522c03b3238aeedef5f42c6f32010d4d412644c36a8257fa3750322729fd01b6c79a25560443d349934bfe7f44da4a0576929464bb5e356f7f16d113001b9b90ffd61574d0a643197a36d7467afd8a20ac223d0db41dcc1e8991d6f0c969207b593ac3749f89ee61f07a7752fad7962a1a26d622d501cfaf6f29db67244294643cdf47a190d4198279aa348a07c07a1683022c5948488e957244752264b46a813ad6daea984d13ff12948dadb173b2cc3a34012a03d0aa321e420cb1cd8f030e4308583411b885dd73b10ba4e03910db10198f94191d2dd1919c5e9128a800cf050fd8d82db0b3d8d7f7911db4445b3654867a3ab0d0bb2126ba3235e5c1d3a73c32794a999d2c90131c2ef344a23e52ff8ebd7165e2c62214a127fff6d28dcd52c214a33934062114ab12cd7d2a7fa2ff983e900cd626e9f9f15f0127307b02205e4614f9bb7c3bba2b2989e452b53277b1d0b86ee62038cd4c83eaf1f6d1c4ced27dd351db6e0c808c8af606b44c54c6368a627ca0263a700a3dedf47b499d2a99b20d88521039e2ee0eed524eceed01d66814b20cd43612cfe6a388fe223af18c0c28d253ab7cbc109e39acd70ae146145863af286137aa820853277cbc056c75bba48b8fcd64f901027d799d0d52c833c66388acb9e65b2dfa8956599119c064fe85fbd9cf651dd0bd3a5827c5d2f88fa54eec05a2b93f2ce6d547b8c21e916fd7f6512c8eb63b907c37fb9c288e13e604df58aca8628f47b1783c1ea85b8a6887a651810130bd8ed65c1b53bd705e9bd6b72ea7d55938e78fc5d215b9a7d1c9b3237876e4a8551953e636c4e8e94e92d39c2834142eb927a186305977217f157c750fbbbb8fe054d3146d99f883e8695874916cc3b41139ef74fe2e11be3ee34cc9ec7eefb1d19ab4c0e6741e3ad4a0d642e12679b48f907de26af3d160f0c925dbcbca36f8c62425f7bd7ddd549d2b7745582eb00e9c60ec2e5c1b6d44457c6a0e340934f4c90a26df0c179933dfacfe0e8c94aa1cdd7e220324d24bc7439e078efb5b1d529cb6c2d48756e52243bf11d1401c782a1b4d3c100872b32088285c751d8e31588a6b0e48dc91b46efb78324418ed83fc543db089616b6a701d2cfb16c8626997c1662f9c745c1816300822183475551921547609e0d07ad1273886d8b34160a031e628426b1b8cdd96a0349baa81b728e80302d985519847901409e47c6f4470509cdecbd93e3a1bb491ae52685bd0a482a26cf441d4546a7203854c74c5af04e9fbdcb81bed3370b1425bfd5d8addc2b72fda93f08b6681540d71b3265715f88c6a588a12ba0f9681de65fa550007715ce561582271248088c25d1b1428908c61ee7c46118e9524a4a5649c38faf27622ab018812940b57de913bb9c88e070cc3ed39cd7dbd873f6a5b8d39edfaea46033d2538947c9307c0270d4ba493d830cd84112d05a38c1dcf2e231b9d0ac427bb27b16dddf0065b48db0079df21f72559bd0a7379cc6224f35510c1129eebca4e5874e2702323a8a1686f304ec843017de5b44fc6413385847f7b9f162473cd17446583333abb9b946b9779aea95c250fa5dd78174af9c3b8fdb4d18412e09ea4fd29959d16e4e8f240d541d2de6df3153d91abb55af8c8251c212ccc882cb8928096b85fbf4a7412a1d8af7cdf9701e677a28a68ad138313453544ae1335fb34cc9e89a0d9bcf800fd62eb49283127be0c9bd059ad64985f337260d54530576d41131565ce9e8db98f666f5e46553c2b2104ed52901194da3866b3019c968d664a0b8ad064e51614a8089e15759bc81541a6a347216e2a36814260fa66bbf731c4f79521af134d15f01a8e45327eedf90f27f8758969f94a573ead6dbfd69e4906c8309248ba802577c5ab5726ddfce1620ef52230f2b5693b54d28d237f9046f57420dadb5f111f37aced30c4b4d52808af318afa7d29d4de2b0784803760659202c8b378b59efaf5385434199b82fa7609248f7873c51b573ddd96f1b87488fa0cc24ebf2e65dc53a3650ece109045aa9edb601f2b0fbec20bdfd2df163834b11030d2f9e91cb4569485f18be27bab2085f17ab70afea8af990b63118a5483b8614986c0e149502ed955fb858e49407f2681caf6291ad107173e18678b668a3bae97f1e52aab8a6919aaf532c6ae88109114338914c083692a0a71561dbd1414a7cbea0a3f17c7e797f7c215197a3e6d6abf5eb240a2e0565eef22256b13b9b5db65eefce834388e7ff9dca30bbde1880e390d533be1a3044a9d74db52ceaff674841a3be82882c48c6ce3b95c7a5181caabef92b3ef482c1d03ecc70b852a550e621b2bfcee9100485701e9df4b901cb8c0114e0a2d50ea52272fbb2c2694be36d59634aae07ec42afa2acb26624787251d315b8d1aeb5c16662a1629bdae25bbac9cb943eeb27f84bad5636f9bca3aadf8401bf97afedb26315632c9640dae2ca2c88ef20839b8bd7c83efa31a749988ea897842c35ba66a1c4d40a551d652dc900ecefdfe749d033ec45727c9fe52d083403140dc507e7ef8482f1fbbe791004f435edb045d627f86de1bc4474ec18a331b7f18c76554e724fa10ff20a47a3495898be773f4bcdbd5ab44e50bcbaa4aeff036a048a3057936e14f96040656221dab8dddc468b4fb1c2a5689a7fed6466e01ed1f273c92b08d9d8c5efd84a11c5f7d51da960e5466d9abe1ec4988962abd9e5140c966574d7030ab8f68f832a18836c5da52589a493dccd0ac38b77fd806ebf0858db00d891640c4ff201da001147d67ab1cbe8d7a7b9ec8f5f8b66ab857bb7e13d4fb758fef4af9ee804255bafdf7a687b582e278c2061f320a17d4abdb89708169bfd9ad1a45c432fcefa0610e8eccfaab288d2c9153530471e7c350eba6a0c0f807d85deb847df09704b000ee855a52bdb09365999cfdd5631e4c7c329324e29b98c0fc7cb2f45b666b1322789f024a0913a4a98f646c5da44740c8e6d7859701f47a2582c77011fc424c2d5a1a615e2887e4f8792452910143a7eb43dea250436e1d533140da7297a291913135db96a81e7544c7c6ef6ae18cf92c301db82f6fdc52cb19ea77128e237ed22365fceaed0a7256c33c6d4389b51c1158b73bce170cd561876319854e170d4b376e9c5b8c4c2def56c1d8753d053d1ede3a8546c58158c8b47b117c7e02dd151322dcf9d5b2825cb20ebc729d2fdd680152f91d451441775da9174bc8e45924237a28a3426547e028ccf6f7abe9a8c674af3a2b60ea89c77f4e5b7046d567e1a2ce19fe09759b6aa2f0bb4737a6cb1af6a478a9206402bb42ae9907a053bca24c340c26a846143968af0a6085048304d63391ab8c38b18eaf60e5c8690713d0e88f7f32822819fe08242609afb159031d0eee7bc61be5354e3a962f44df86ec5c3374eb336cd8427c831db65084792ba95aab226531d0856f2447f54e1db354ce46f168a69c598d797701a45ee476dc55949c372600ee40cb7634ab61da140b010e61743c81ebcb8bef82d4867110d545f43c584de29c19e53c87f477f22ee2c02b10def93b5bfdc76d3f869c2967ff304f1ca7079184fbe1bf765643e6833e4f2c6e04d8fe2c2c59194e2f18543a8c90aaf3f8a0c747e905b79b7a8f70912b905a5a68c1eff23e8f219bd949d81e67bcf0e1582e5a80ecdcf278c6c878127d7b1cf14fc90fb4a3ed817e1c7b45a6ba452b0d2cf3dc9b6919a4ba206027823abe65887bf5606b814d49848e28f4470322844535be84eebec4803c8c92c49d562858ad9c410330d8fcec67df637c75fbe6efc5625022c008275dbe62e3c6552f33c6b05038451486b1989ac2467c4f13b8261b1dde81c36674dbd5220bdadf24cf619f3601bfc3951d869d505dab7006edd41909ac3996ecbccbf1a0248c8da4d140fd1103ab88732624470b0977d6353b2814e09b97c4020054215dc73ab4d90c9fcec30bfee714e0a7a5e365108deeb9792e09ce8d5fe763495ae979d3140e974003d8f26118f9796a42c4e3da94fe9cd7db82b484f640d315dc1fc21013e9bc3ac2715de4a077d689b73b4236fff681b73d05c25cc1aac5b99bcfa0dd5acc5a4188d91a114e6c01d29628528528ba803b148bfda183df75be8fa81a7bed21d6b6bd9bb9576f4e3de1c423acc4f043e0c4adace62689c0624be3c93d40dd3336c7eb799739a46f1205a954d2dc7589b5b8d3b54559cdeec2d55e70a003f6c0cf02a65452a51162a055e08e87d444cda692e2cc26ef29a94f49fd622a690f3a1b0110cacde6383d76280cb00940a942a76ba10bcb53da2696ee7f0bcbf1ace8a03c743725c2ec7e8e7ed34e926514485ffd4248dce08fa9fb8cf3a4e200d1097b20e1d73c5f817042653f00f39eca6b0eaa4bd69ab7804d59ee0e9a9f76598a010adfc910411b05cc9b8196a1b142433bd6b164a91566ecf1b087eeb6ebd0236b6bf57f3f9d250cbd118888e763c276c3368b040fe9f3fb0f60dc178b36a7f624dc0ff00cdaec6a165563b0278d497d508f94fd697a0ae6f35b7388d30de2d2149967427e123a82804d1d78f6172e7abe0756835893b935c6e81943aaac79a3c800731eb22658096b3d8be5bb8bc987deb3cb24b99609a30766ecc524eeeca67c28a5f95767a8062ee660005fad0f973714cd1cb0f261b62ab7b8f08bd93e05cbdfeba2f2f268d9f14a850335fbad7929b80212cc079867286004039b5d64c066bcf1af5909f46b76d05c2bcf21aa14bc2e034c55e096fb36c101228659ee8c656474ed2516393de250ccb55821ec72759eaaee5e50a0d5c459e653118c07c6728e9cecabb9360b5ffbb0b66dc2fc235925656ec6bfab6a87137ccd4ff36d0ef7bc8880171bb935d22959b9de72da8eea9473c6734cbf236734ec9d3dddf204387186fc0c5b816a423676c8b578c248e492045de3a687508d894c8f4421c75677e9337f94766d7bb26063c6bff59890666afdfc8cfb82b58ba241dd15b6e0b685517984a5ce762c439cde5c2327636385b27ec203039b084f5a30ab0f9512a2f0442639d1f5a258b0225bc3937fc34e32bba3338b270b0539c3341213f3b195bf4ea8bf12e45e77882ef16b1e9983b7051231bb4569a06e9f3528a231b46e59b966ed961262030105c5dad3724e6f4afc030d05867399c6448a1c9c7de5abffbb942c9b4ddaddec2e8f341aa1c539baab28e2e960973db409c1275ed80341266c038096e1bd2c34d34d620c0d4e2e9246ac066ace3a29f684d293bb396009cc0700af0b2cd6068705512bf2d4b80d76264b0e514dd388e5c04f726bccff16157ec35364a093297ec7e56e3dc55d86cda3e44cbc54ee9ff3a8b94b20753678f47f2817f9f0f1578d52cae6850387138774ed190c313ca90acf60d260e2f710fcca03c568ea2ee3560d741500c7ba9ba66c68b171ecfb24ebf98b0e6c845cc22eb4c0805445bb1b8a1895f4f7b8c37086a55c34749edadbcf0d472b57a037dcbe0717b2e99c246a4bcaf4bee1eaab70c72109fcbe9cc67bcda582bd1f5d65583c32b3da4751bc1c3f04d6eb278837b3d066f5d80f4d3866172e4d7993f6a45ee15b55d116b034fa83daaeb57352d52a8e1f43776a060d10b6359b70b691137178fd89ee9e7582d9c44c583540aa82832d09cc096e00949f8e1ce35edbdf95331604d64110d61f46dc9f52c841a07b10e33dc67dd9a25faef39c9eeb701c39cae38f9ccd84ec7d2d897794a6e172907e64b287e0b7cef9a57ac4deda862cc215213acd21d0dd7259ee634232869506b0db9bea7345de9eb90b280b53cc23d57cf3eabe0432d5062253c9db53e11d5317187c86f725f4478368e2f41d4dd54c3e72135e86f33914a1ab23cdd57396ed553028350a3950add4bc30019754b47250744c6e6962453d06865cd854cceaa9ca7eb26709dd24a4e2a118f9680da6f1a7fc4c920a348cdbc43a21161f256dda7fa0fbff9e27f56f806403823a8de2bdcd6a77d08e74f3c1843fe11c9d958ca25d9521ac4ad461b3b3be22106973d0d439f0aae4e3800908d279395dc1ad9008b138962dacce90572cdcc41ccdbd96a5b5de3382ddaf951c7720f34d1e3b792d9054ac1d0da4df0158a3e5b3aaa277d4e3de52de7319778d72471d1b379a83e514e5b7ebc01d349d70029955f958a303506605a5d7d6bcdfd0389a6425db9beccafae4ae7eac5e27ff5756d9158d6b72b828081efb41dc7a71477a8cef2454c133ab2bc469a039d47159a941ef1573ebcb7f04666c0f734cd01b21f2ec9d4e4cce8e02c58c1a6e07f608a76dd11dd7803b3fa6bf3ed0c9402f32d8120c3f6646ceb454293b484a51d5deaacf79722f7a7eedb8cf9ee8264d4f97241261ec3ccf4a7e64fa070afee7dd2663b567455084c13d58be4e7cdeceb658ab5eb7e4575e4e5434e83d098afc293fcad89f2cc6a1ba53c441e48f940cb6211e8604915b5e6d869a41462418a7b2869314fb16f2cd2405291d45845f9fa9666070ca79a6c377418d4a36ed8cd23ba5aa5602c7d1fb7e060d8608200ddb1ee1a1d0b4748a9cc684ccb2450dbdf3c50c1946f4286184d8bb99c6b2e6f6df21ca4aaa4369d48fc1cc58cb7a997d1703f29a1e9a3a4c77e9999d84ef63f12eec118427e0ee572489cc7a851af96b540591fa3548b6a64cd2761df07f870bd60c51e3249cf327be22938778df74498fc9ea5ab39d3a997cd78ae13ae3976e52d63aafb04c0b89f556222d8f38f938ca856e0e23aca78ec01fa148cd0bd91702301679634b2a0fb64a64eabe2437fbc4aba08e8c9d2f839f4b10372b911aba1840bab2d7afdc6f80852b450948f234d0f80c0d62876caf69e730dfa8a46b49c94a92db439642f2aa9209bb82194b39a11b57750da38215f2eb48a7598ae9e0d5bf690865d8b692bc109b07e5104c7a98ae8982d5c8a6e887790ab2ba67201175c3524cf500b5a2d906b7d8a4085497773516ab50a0000df7838f81a6c9814dac5859efd087f0c94bd2c8791e7056641caf72eab597a600fb4eb15c3f85a679b8e370227633873ba1f1b96b040aaa3730ae1e3e76cd46ea3415e03b8c23b7c124bed0116f3e6a16364a051d5553b9bede0726b5b352177c71a59b99f7090dff2850a2eb5263d292b7c96683bf0e244231ac42e6c1dc61729c4f4c2be8647f8fd0a455cdf63d6a00276f002434b110d1218bac2f310ebedac12d9a12e6310dc21b2ed4e6ad60104fcc517091274e952c9ea83858fbd48cce056b22450d347da1cb4c80ec50869abf3a892b4a2344c209e374fbfa7e6e217f6ae43cd05c2cc1351751d8bd92a6b43d8975acb7e323d6a791638e6dd32f864d1b46bf5ea48207c6b1c981e5b1e9d2c1ffa9b1d90c21d57af296537ea2fb2aa096da8fd09772982b25d0967abb1feda34d09c504cba510876f50377e12cadb574ba501447b701a0dcf944455612984dc5c26142a439daa2ee43f70528c55e1c3462f428491280e34d7859ff103f3fd43a5110ad5b5c4f6e732c4929500a4e0204e4e387a095bfb506e616be9502eadd3811f9ab3547284a778f9d630d58324cebeb2128a945fab89f5b88203175ad0bf6e193d1827402c0ba48560b24405f42581132a5e499b2411d8dc17a151275520d0a28a61c5d86abd2ceb0eb70377e953c340d616c183cec0e944624a06b3759e86550c6717fb10dc5dbca1188e4689edd35ba6e17c97fe6a6a496ec8b810d186f8cbec7ffeab18f58fa161e62ca4e1ebc5b8c73e611bc625f95c51af0c88ae3bb5a037c907ea0c4160ead7cbb0e56e741637ea934940f46637686e18aa9afeb06c145f608cdfdf164329ad1f3109e0bcf0cda9a8c1565068d2c3a16e6607a6e9120b88a656b3759599a0a267e658d55470315ec2656e9063d554c84248440e751fe3f070a139f433953d9bef24e11f5753c8765d8c2a08ea4677c75dcab8a5bd12554de8f3c6cc1c1efb96d00f5c3bb09816854b4f648ff2192e05ea2c4a2bae4615efcb12ed67b93493d11a21f4ea9db8b287730e1284f8763a61fd8ad34e711e1c7776283ee49acc11049680308b237dd4d54e7267025a34e42aeaeebabe8b3957eb796de2808a9cc37cdcd6846b7aaf2e4d035697da175c28cb3039e5c6c19c86e93996bee421a2a67d0d6a767b90ae1eacf0905d5e6c8e7c7131732425d080aaa5a10a00480b0d75517c6ad1588938c6aa2d229ac377dfb1074b0c596100b59c3195e55e49f9c833518df9a533269f2b2eb4d3d88fec5b36802828088b650ce4a8d4410626b6d2e96b4a3e7e0ccaa1fd11966a975df49d9ccb11be1d695277051c1f54c14dbf7dd2fcdbbb60d26fde9609b78862e1d9dbb577a2d6931bc6a213492f9b4a0130946b4901396a58cdcd633930c9f88ac1cc7855c86ee235ade11bd9c5fbaa05b2cbd12a1d5dd3fed496793b325bf2fa48118f032e98ca7d3548fc90f3544635d5766c4657be37a2bc41d3e6817257f1ecc1823ab8b9e22808756434788cb186c5c3b64abc2fc197211c97460894f3aeec1eef0cc1054290359d98a001637a3f2cdc25cf7ac5f05fae5a11878bf4f4717b3bebdecacd925e95857764de181f95108d52dcf7ae3c8309669020734eb2c372ef21df6ec68eed31db6f8a351ab7f95c84398dc7f8b3626c4f004cb3a1d4e2b254e4a807ef0610ec8b099c8a27545e57146022206291df2210474339ad58a0101532d1757d16a8a7ded9760370a7b2888fce5f70d94a44da477a07d86556568277e01d1c24a458ff563418b6a5faf59d7c9e62f9b245c167beb5a2a8a16626aec453124a09f9e6ce0993ced93d08f7757394198938a00cb7c3299e75c46880820e23351e3395109644e1304c46c5d661ad105e2954cb7462ea00ddc76a9101dd748cbf3590ad4e6aff51545c4b6eea9e6e684cf3021ad42eb265a620fcd593aeab2988614827774b37c89b24ee5f97e5a103029cb7ebd4b94a085c138b20a031e1f08dc6581ccea4db9750d24751d092a00881a5b4caf770c5181c4110fbe4c5240841794c8c0cef2493e4b9bbe4be35d8f64ca4fc9bb839204ee44b7058035eb6584742dc47bf36b9de1625e4cf170147c768ff73ed0e26026865cee0675a9a7b70353000df263df23a08f1273db4b31df8a95e459bdc1481b181930b2c0243aeb0dbab931048f9166b82f4f2c0264b5a40bc6312c5a7fd4ad75aff1cb25568f62bddcb2aea60bcaf42a67856266e7d4725ef9ffa9463cf8578ef9d4baec3c4431d1d9fe82733a580a479068351c4af2966d4066d3d6b03a8cb5350073f96ed1a3f2a16468195018cdfd4b2b8e07cefbcadc6d7c52c9a44f69df2e7b985b423073bb02f051534923a081940b1b3ebc025c3671ac1a5f9227773e4878cf8d20b0d028a94ad0595e42d57235e19af81ef512855fb6d3409502ec25ba0ac302985daee5592dfe953c32da885ae07e0d0ec7efb4329279a4b25a244999085b8eb4409c8ef6fa552211de46f17edf326fef5344b28022a8c2110390bd9519fec17430271df681dc811dd118f48a8134c22bcc6effe49e1965a39465c8641641b2df61966352f2e3e74f883955d078ef65e2a908d350c3a7ebc7d4124fb79deeaf9784dcf27a2276c84a11789724f76a66f956a89239b9017bc71683ca2a593b6028bbab3c37bf2e11cbc5d5b32a084e16e6035ae6739eb74f365d9abaab9b98ddb4ea8c24976ed6df7e635929ded8ea2d82af3f8a36258820771f4592ce10e1e6cb9a44223c06a99cac9a4307ceb9a3cef5806da1fb9c575f5ca751f3dfb30f7aa445710bc3f22abff51e66ce1ac5ba6a981055bb542066af9a3618317dcb2776da3f4911d41bdedde3658d68791fd1d4a9801d04a81f644b8991bdbf0f9955c861f2b6c58b1e9fb39c6e35b318165722436ac9c68be56240b474e26b9ff8cfcdfefa48be864e23c0adb7782916757cd05881ab73f1f650df36018901838073806e07c708420334467f04710eda98ecc16d0eb027ec2ddacb4c1a5477ccb907f0b2c719bcdc6323b180e9eb2e39bbf19d2fef8167a00306800a652a3b01080369c2546d79e06fe028e4b97b45149d3c18153b649d43df9cfc74b4200c4f5ecdce2596e9c25c53885966cf637fbd2c1f19870b22ccc443a1f0efc7188748ec61092a8c8db62779ff70b24277ade38676e8a3a5c30859a293d4a5be2fd9363970b35268a232c3dc6992bd55b7ad5f4390bdde56516e1355ef179fe15da6162b98c4a6a6aedf5ac8c44d0902cf203332c704af1fb3ee41be46820227fe015831c3d22e484fcf6d38bfa9575e36412b84d4d82a8cdc4209f8a1a0f1c401ac47d83a65a1fe6b0bd8752491c61a2726918d8b02ce0dc053cb396b3c7e4dfa8c9b2b99827f0289a7fc0ad44c49045a7910b7b3e03df6e420ecf9544cb034da3a3cbf7008280a65fcdcefd04a632e80b93b4fe35a429e5ad791f5373e43af9beaf011a588175cf409d91be14b369409476dc604df51d2585839eba3832fc98f663929e0100d59edf24c1acec5ad046ec80946fdd1617d768822f2c8a655c678e338a761f85f29dd5ae340793e9f8d003ff9fa2f5cba2072aef710820a7baea8e0a7560030c701e12510982c7cf0590c6380607542953a9b1d4856c26cd7224e4f9c19c0ebd227aefb02ee66db545841b9e46a3607b912229c791b9a41ae17ec073d5c592188fc82af09aae5d7d3e487714a85ccf6ae4daa405aa60301161171ac209521b2aa123a4e59feb3f23abc461fd0ef02a10da412c76b7998e8cec5e8abd08a07071bc44eec0c53c68aae23b7c289c180ac9c697ca9f9135cc5887f0f9ba8893145467d7aec832bbc741fb02c5589014c38a4feebb769d8c5730e5268845242802d77594bb2bb6557ba362b6eef648137d51b40214ed5d5ead733c99c0bf6f0c7b312c02d0d62ce79e88dacb8a8cbd5e64de26c6325dcdb0ca42f71c17bf41d70a7f0cd33267b49ca7a48bc40bff81f6a2985e6587af0b86f9640348fd21d157a7a10f1fb8a6b7542bd03b719c8ecf4f57ba35507065ef9bb1d707729b3b0a46d782d391f47156603d7f08aa3cf3883d09b4e311881fad1e06ce3a150ccfc47227395ff80214378d681bf2c1511b4f7a01a9f5c2fd7389ab1caff10ae424507b75e7e95a83b07b0b4b93fa051e48ce8312507a47d3d62f3ff8612dbaa529682cac115af1874a193533ad22a60f3126ee6c17e4a505d26f07fef7f1acd6815360ab38f4f7a374b95afc09ba80aed58617476b0a535b845c13f298105216edb737d870c6a7f37ff0c9f13701251924c10272663d0283978d00634da9ebbd4acc1d8a20bd1a324ea623ae25afa2d52406833c67e9734910cb0bf3882ecbdfc86c81ce47c0366fc3ede48c88114ba6c76fc439c5485aecae365c9de62d77d61fd40116e0112636e540c90c031822035c47e104613caa34285c90e3d0b14652e390ecd38e1a94af82ddc07d13f4c860a44385953bebe51643806a16ace5d43b3d72e24f6c126fe9031136ccb3017831892067a53e0e88e8c6bdae0da06a06f13c59b4704a85628973a9b16522cf884647100278f678b9d0679fececcd576d61391f04bf78839e6042859271837e2e4455825cf1b9c105ac8d43d3d165bbf239e0107dec7fd6e9ecd20ad1557d3452a85568d2968fa3491a4030f0ef90eb8a34e17c4df69fca9a7060795cffcf5a5cfc5b4617c4bd79514eadff1871aa8474e266953fb53817bcee77682514852facb589019906b8e870bbc62b8c350a4d46ed550614a43625b02c40ebb14066ed30cca9f651fbeac760338821bb7a977b7c54f97a9e32b57d2ad0feac00b707e298fda3e6650149fd65119b33036dc718ceaf23566aff6904c3551d3fc193bbf4082c9314c8429c023ca19e2043867529a1f2e98e9b244e150b8568e1ae45f6cf5b144325b72a6861111ab3903e37879e060f5f67f88b5c4484dd162fc2a05182370ad0d094463fedf3f51702e2cf9a2379cf8f1103357098b3e984e92c42f813a9acb5f2140076c84314c5b383783bc17553417cee2a700456a0b66770c501ab4a63427cb7e99f296c09a8322fd1a7d7cc7fa34df50ff034f549ba5372e6ea76408f542b354eb0f0e2689f24f96bbdeff96d8508244b41d0fa6a62446dd2b7e1ec75a22371a6167ca6b66c3b5890eccbbeb255b4c554660b897b1a98686db84fd271baac2a14ccfefff541c66819a3a4686889cef325221f99c7ea59e7c36b92018716702fe2f909c98617acc3c18e9b8106120c652985e00acc36fa946d8703b0f4aba35ce2caa56709c09257efc925eaed6cc9c283ac3c712369bd338cc58ba08fb328bb46b67e74e0878dfe5ac82cd9e54cc30306c7258925aa7f5237d3d729b303d4afa799d717c22a09d9d1efe2cb78273d276f91d8cfba78d38fcb4ebf8d52c20811188daf8ff1c79a576190da947d736e0d6160e87102db4c8aa016ccff392b0df52ab645a15f6cc210465286bd4a5f9029b50cbb686f79fa5545ea7f3d18e61e594a5aa56203d99cbe86c57edaa20fae69af552d8a67b6fff4accfcf1dad99b0203808677a682406c5331e4ed916862856151023b93acbcc8867cf333e5ce8f2a52b1cb0e380e646b1cff78f5447cd003b0a0f01fc334d0523a82e40b543eae08a1a8a1ac836f9b53a9d3caef151cb6b35dcad4c686cc994bc641c237f09cb04e33d276b79a5c982e3726438c43b6c4b857161afd452f7853556bacaecdbec355f10f570286dcc730876798d59f138cd05920f680b5feed60757d50e25b435edc80ef485836ff6337037d09540a3757af938f12f140e086eb42041331465ac59be6fe5e5b2367d396f692270d0996c193296b87b268ae5623f28f6c79b4045afd9e8d54d5cd3496a529dc8f05f33f1e4858099b2e854e24a4311341cc10f5d190f2149f265a7891a3f2725096d8363504383677a5036ea8d2f31da5952a4dbb29b8923d76cd830c4fad417fd25b4de8ac12c6bc6d85320f1040501a5535eb772706c6dd6d631dc867caac94fbb9343aa1492df7bb237680d9880bdb01d99b128b8e449a73baa4cfc1b45f0ce75517aebdb31358eb0c6e778c94639f9102670878548e6fabafc29932ca5f928455ec5d7bf467dc45d5762464538e1ab27aff825a4ffa07df6716e2c0a320d5e5448d95a35c43b2b5d7ccd1192d8a1835605b8a1e3306e83b2c115a155e3842d23fe74830f928acb1e98b61cefcdcb783a1120553b675050d11750cfadd13bf5b601ea0f71f84a542d7d6b337502acddd7b4a33b05bf6724fec9af92a5ebf56d89291d99622b071394bc05c9d1ea4a0c61eff09441ae2a43ccbf4382dc9f8166529abf7c91d5e756252c541ea699fe1e0bd70b3bb938c9ad2ee86d50256b6effa9e221c75736b8c86772eb0fdc67d48dcddeb8ccd6bfd0d210bc2d9dd7552b8c75b30b201dcf5d60ba4ffe920cd4385087c91f1733df89339ae313f91847123919b36f45b4c1b817f789112940397852096ebcbe45f801a0c7b0bd718413e4fd2e200525658c5bf49b1404530cf3037efdbd43b70343f6585ac80e0d9bf12c26d4250852d21e3d27db342164dab1c90967b7f584d34c464fe9e2e911da123ad11386a4210246e189a4010c46af321488a1bdbc78d8484ab7bc7e03d5849fc726790482df13ba7b7222cba280ce2b5fd2068f2eb4e6933012ee4d6b3902153b874acb0a46def82344c360dfc72a5a1e0fb09b6c252c397353bc08fb6f3ad1ce43f323c9f25f69dfcdf4f00c06a64fbe38e94fe2ad6a32c0166d0830c59e40ac178dd863667c8d593da4c804d9c7e8d37d21126681becbe56de1cc15013a1e502b0c63deb08278cc38daf1dd1bf70078e2d3e59bef461cf21f3fc84a6effd4a1cdfc5fd9b6866bafe0f48afa90a1b09388cc169ca6e5ffdc050f195c812b03780ba101734003c409e992857be0c9cbcbc2ae575480e6d9ad334e847f6641ada5506fdeb9e225e10ee23fcdc572e6864e0161eef8f5248a29a801af8729639813b12f8a6d04785532144c3daac17eae820476c6100e9ea60eea31b373fd5e894f01b80defc24b6c45a37b9b81eb9aa918ac1b0f83266909a21bf6713ab982e6583c8362e2e853dbb5c7d2d8242f48ec6041f84f97614f0173424090fd0b24ba3a1acb49bac01b3627fa6dcc0c30c5e012ad424d8e6e07eed847cb99cb0f23652e350d105f7716a59450668c1893046e847b403f19d98ff5346207d13843ab27bcfa331c5acc6e174f52e960e664067779bbcaa8b47699336bb514d72f048dc04ab132b536bbe181fea7cb7cdc30e8c4c377b17c8baaaa85ffcc9ccb9d7792e7d06e3ddc484a0230dcbb5c4f89bf212b4eb721e694f17b8f6b43c5b81f815b6036e6d36b8487e30232e5e77f580f989d9988b8843ffb9fb8aab71e98829c26d2808b38993ed66802858636f4e13af5615367ea0c7312003a1af03e093780bf5f511e5719df5bb319cb5debee0278272c1460b069c115bf1b7c1412af8c5dd9d02bcecddf5d68c0401282ef71ca056f23d79c9dc354770194ac709a4a3346cdbb5e3dee121c6b95016a5a2ebdaadc7afd0f519b04027133b3ed3a258425cffd3d93b8f965c610b182a89a87efc04a2360f3e8e915d088442bfbd88977db16612eee5400f3ac543c28460813d2b3f98c7ccfd9565f7c11d29f10151916523039766eebcc19f3f59f5be411027183a1aa9431a4e0f88f8054a198355f1becc27b02ad6b599bb6ee66776b81807368edb64e3038f68da68b4ead5cf2e565fda4b13b91003af528f62ac10c34ee57bb803133ce04a3091a02c3c84cc0e0b915d1127207e29f1cf1634bde55452b2088311bca41c306f53eb608b919ca510ac3b1a909dbb8b3fff5745556e51750579b30ce90eabee6497ff402d641d2e40becc2856bd2b9937528f235c275ef147520c670e400d069243d91fd589d732d0405dc9554ead18b49ba7ec944f87629c486e0616c681e028a03efb2ba762a76eef2d4e67d17abf15bbd03d6fa25cd2a9b13bda55fb4cff8d69cd6b32d82067f19da5d3641072bf83c18da031c3cc0778f8e2aee0970a77f2cf7e0ce5721f25a44479db6e820baf11c384a35760fcba5f25d791d49e94073a75a610e431904b88f00f50882fbd8bf06e51277be9873063430890486d48c39f9c1d02de6538908bada4d5ae7e56eca04740b2ae4c84cbfbe2b4b668c1a01341f024a80ed4a5b505a15a50d39c504355366f199948ea23885f50c9668723cbbd251e5cc8584ceabe00a25cf6c362eab2e6e0d5a55b67b608062089c64c6423555970abadf88a838f5ae51c30362b14516510ffd2a43fb4d6493c84d24b2bb7bd30e6c049e04c20436b896f92f68728c8854234452915a0ccd45ce9f9c5dd49ff3ab7ddbe489b49339d11b8a7632a159c96d2feaa28ae8f3c117bee15a1c976ec0cf5bd0b5175b283f396b179a26c827e55ba4bc8e9759f12c344d90fc3a5e46f42a9a46c7cba8c8e2d3eedbac3eed66363c6d7eaca075bd9d411909cb6af8e793b2822261c876dbbaec0e5e37281ff31af06450321264996fcf176915da3d1a9f0c03226fce880d3740173bedcd1d790e7b3080f0b497a14883a31124c1cc2343086f0fa39c7f0fc6f75e7c8f44720d39ab38f8ae6d031b6622cc88bcc5fd36ba698683cb788c4e678cd5cd56774824820ce373e9c13a27df424dff06f431af445f6882dc7711deab6f408f1f8e94f4589e0dc209cdef49096b9554d62a2b29abf516a5d37dcb04441cd0b25e4a6b2ba6d75f5f7dd259ab6a5e4bab29a7b6de927252907503ca488f4593228c7a624c69bdf0521a4bd8b510466c5575ce29e7b4b2d6789abd41c818669713190a49028f5d3976684d2ed4d8477dbd3531c125ecf311872da6af6c060989ac3f27528b01bfc235d02d7392874bd75b78cbac463643939ef6dec4b0f94f7bb4caff7c26a552425861098adeabf4edc99d5aca39a1db1fed6635eb8510c20927fe146c5515d229259d77ce89b17d6bbf82e6db0987c8d9db8cfd5e7e2f4e7043b5ee70777fdbc35a6b2da85a90b515044ac282acb5d6da7fb8e292ad1ea4dd067d6a0581fe56f75a7bef5b9d92b10b5b6b2f080402555012950402a8aa2a0afaeac7a65f6d37841e3e76f5b4c2409fefc56f2fabaaeeb5aa7b2d7661cbaadee4abafac1bd238e0be6f62dd6befc5185fd7c51883beaa2a7a2f06b29f4fce39672266548c70910b95301deefe26183204f58319d8f8c18d0f144693ef1588101922c48f2142a8605b1f29ac87517d777deebdaecf65bd756ce5e7fa5c178cb884c37e0d6ee380df82f8635e65dfd2fe2caeb2dc44f64f72c4de5b21c1c8c6ae52ccc397e2d2fbbe17ab187e9886cfad744e8284276cac3d7fc52e092aecd85512537862576f73a5f6f9bb360c6cadfa80b04a4f2e2e55d775522bb56acd6e7faadb9662fa57576f7d573b3fb6db17cd2eed36e643c56e1dc24614c51345f15f78957e3276fe96dc84def54de87128a4571ecb7ceb184a0565b3a7b5314fce0fc5256bafe352fe7cdec60bf1e76d57e4083451fb36c11f89ddbf8e987cd529d8bbcada6b551ffcf9bb9d10546a63176b0dbb54e7cfa88c69b6db0951a2091b6f25d96e57c40850d8f42d7633fe9cccbb5d11233cb1e9db4b0317c8e482f087d65b41d704c34c40f7deebb2f7de14f7047f7ed614f7edcf473bebdeb729a5d785d116f0b02841bef7b15c2f5c38841551e728cdce519d726d55297598629c5280e9bed2af9afea42e535da5acc17921046fad9faba7150eb8b34ec9f8da6955d7d7bfbe7eb53eae3ead324f76db2971d3c416d1f0767e9a7c8a12f3223600caf5d7d7e7725d55b6e5d835bb9664f75357f7dd475caab47533916b71ef78b6abaa3cadd729753a5aab55bdf5ae9ace55576bb5eadbea2c2bab545e45d8dc05e84cd80b6b856e9f28b203ae6bfcaae357f2e54b2d0add87f960f9928c6449deeecd56522a2584904629212542b33717fb59e83f5dfa7b8ca116d83c9989218490cab7733a3a350f4f7b3e03596e4096f723e937b8014f06673b6024b8015f38e02cef7dd84f04fbbdf42032920db896b7c3147ae4b4d99b13512bfb4e7830ca272c5eecf7db8a9c85eb6eac5bd97c465f4a64b4ec36abea134af8f213e528bfbed4a59861ad22d7f45a92614662df08be40c059de27d9ef371214b6b3c27eff00d7f2fe866b91414672e369ef311fb20d1b5ee460287c3884676f2e8afd1ed2e7ea7b2fc405218ed8f3dfdbbe3f6b0128c90e9758829043ae11216f23a723041222a89f7b95952c060c13b27b98cde9b28799e8e1743038b89cadc3db381c8a1d71d0a16ef939ccfdf684710cbe6f1c2e8a2876cc82c84113e5d304f1d7a1c177ef2285dd1d88cdb1ddcc2c003f3e8f80a5d13192d1f1321ff0286482a4d050778e9d63bb8f6e01d67daef8723055e790811c3b071c34c776b814c56e61e30abb425f46a41a310320c001eec3fa06c8c2e369b092318f3aeac283d3f88ea78968763fcef7de93fe64b6c392bccd4851c004f93e0dba6d460c84fecfb3f8b419a416c4b7e3f178a6bbe10d39ecf05c248cd5e501b7d7a326d63ccdc7a301dfba94d5d65a6bad94c65adf5a6badb556167b3c0d42b13914faf1781a7cf854bf9e07059c793b3e2fc89b4301c57371f16843737e64a763e231edecba9d8e0965ca79808ee96402b29d8ea9663b13101b6fa763a2d98e8047dfb3ec2fa967af5691e83d0743add9082c243f67d91ad430fcc576f0dfcc8c3f25acbf00a4909fc3253f226f2a2a2ba4183566bcb84c10eb48f0c58180663b1d1d40f6cb763a3fa4b6755cb2f15c66c418f1448ffdbe864391f63bc9c5e5580109978385d47e5fe321b17fbf8fe160e0b6f2785e129450a2081326ba5d11267450224e3dae18a37b8c1e9fe83d27d3f7ec629f33c619618c32468ff2212e418ff4cedf28a55f69e51801a3bd8576b2dba34d33774397cf1963ac2a95d1b2ac65552fbb8aa841581d358561a12cdf39d4761cc83231f881d66893a025c0019e4b7e571fe793c1878ee338f46db6917ae83b7d8aeaa13487441a8d34ed5f34034d94866674e6ed4b3f17b6dc1d6bfab6d22d2a8128facef1475cc2d8e7c2f1c82681a0f69c3990657ead398b44ff9a361a45257bfec47e9340e890a7cd0f69aa93536bce22d1bfa68d46dbccd9f37186049ce48817f6491561222c58b2e963222c70c2c634a33bf00ca5b1ae0a9770cdf8ad09f6b9b0090863ec628cf1a4a04bcfc7f446af7e17c6d87d17068152a0a05cdc8299bd552ac09ad24b48ddba4d10c294e505f8ee8b4a26866fa312ecb6c30ec82173a38d430ae35c22c24a90e16f195a5978d6a9b4a8d9ba2aece2dd5b2f819ed2bf35484fa381827c7f239dc87a6b0d3567faf97c3e1ff328a59f9c93cceaa2689761a13225ca5b2b89b522ed322e740bed3029887a234aa16b5c92c5d4a1bd4ba43090f67dc17741185ba26757fd40263530c9e40221210454df0a973e353ef6b9db8c629a5d4e647a820f5d6267577f3056d6bc18e05ae6a35caa53bc057ad0bb5d99bcc9bb6d750a0dcf6dbb628926ec7a23ba4179abe29ec4d18c94894b01ae09d96fee09a1dfbc07ed37ffc0ca6f0e8293dfdc0530fce630d8307ef39bdfdc072e7e7320fce6426eb88ea37678760072c2c9a9f11ddb4d355e53e3364a70526e8627efeccc9e9a9ad90359660d64c93a86cffae1e03c9c87f37620cb7c3d9065c29a9d9db7e35e53536b6a7626dc812c13f64096f9383b383b383b3bbae618b4db5105cea5fe5481d366cddb812f15b553513bf35f0f7ca1a9d4eb49bd9ed4eba9812f1485aa41d5a06a70e00b3d9d704e38279c3d1feec017ba03e1cece9e0f7be0cb4c411f0e26fffc87d333610fecd95906172fe4b6706ec73168dff461475454ce343b81018676216d85a660b8e0452d8626c3c7bcb8610ee593b7d5fc95af2a19429614a9884e422193d7d5044e9b9fe913ecf9a819ecc943d260229f585a8d5826263aa7f8ac2d3d813c6d3e48cfd7b3e669f3353d61d0d3859e2fb40ea2ad3d0cad8368c3f815ad8368af3ca67510edff4ceb20dad9575a07d106d9d8ecd8449b1e9c8bf6f3e78c8361897586c0b9c0f8f973878389e167ac354f209ccbcacf9f2607f3e2e74f153897ece74f1738977f39236d204b8d8381e1e74f1b07a35fb463338b702ea09fd2c1b8f8297920cb7c51ce39def36a6af6ac3adb7b5f126aad24d626b13789c549ec95c4cecb42fba6299f21732e4345fba6945294542a95aaae088542a154dc0b97688b98035f280a9583ca41e5ecf9a719f8424dd206becc13cf89e7c43333434d33534e69939a2f73e0cb44491ef8324f2edac0179a722cf35139a81c54ce16e52c796acd34355f9e5268df2643a87c4a906233b3a2d2024abc8248d36460d1301ca0a05818876f160fe3619cc40063c58aabf236c5e4a668dfa1172ba7d3e904c3052917c6e13be5adcaa5ba9a5668df263064ba9a9ee69ee8b79c0190b9c7830613d955f28ab72c2ed5ff573f0b16208cc337cadb16976ad05b5cb20ffab800b56811c2387c8bdea6b82ab4ef79822f1525caf994d5d3a5ba456da1b315f20c79ab50a4f6fcaac773d9ea129ae7b2553daa9af9d58e0ac55ce22eb504aecd9f9504ae9ac0b5cc6fa1abc9b5f915957f8a72ce6fb38ae6699347a966158a6a860ad9e7bb50c1387cab785be9556be05ae6db4a753da29e50906b8f141ed5948287ad9f900986d94a5d0a8be1b6187571be054948aa413a39c93e781ac9d3886b99a1b72737d7fa1597aaadbf8d422626b5d66ca29e36ff444ff434ff8230df16f4b6630cbba1266aa2266adaf33f5695822ff5345333b5ffd2156bd326a289ed36095ccb49881a2406f534c49e4fb37adaf33fb8f29842de26aaf2d8f3276a1a91a26b73f6561151bd781008c2ba95ad3a79f59bfb0112560001d86e63d1121b55db39293c1dc8421a59d936d2b47fd1c8079741e95b4f25fc410a3bf2401f7c06e9c365bc278d469af6af13757c90d4f2c8035f68cd5487ea501daa4391b817a94375e08b0402a50f9f4122e132de8bb690abb01f75628bb204a2b39f44626fd2875cf2c312f6469558b287e06414c1e9b89619509d132852a9b6a23287b2a45a0ccdb2e40fd7e2b8247fb89657dfe29b1dfd299dd24cda3cedbd0e7ca1447096f74650024dc2e3da396da349ecf7124891fdfe5122b88cf74ee420a149a043844087407564903749757ee0cff5246cf656d12063eeeed5491309d54a77762d32d4bc4aeb0f36ba751d8eea631e0ef6e9c7bcb90b283e303d762def4550679761882cbaa1d0cbd95b4889ec60721332dcae084e137b3e7cd485f115803304c6874b49885b49aeb62b8283da95ac605555959cd7c6c39e598d8ece3985b0ef3d0d8c60c7856f071fb529ff7e942564f7f006fe25172d58a8a4ac4011a9487112320161f973e16badaad229237c37f063de7b306382cd7492557d5b225186d57b3bf8c0a384488f144da4522929638b91f6953e199dbb6c2d52b8ab34e67db6d50de1abf41d8b9307e38a9311b37f1a8c99b6e98721aeac38edff35389d8200072719b3f25eb06b847348355aa5f896045f6cd8802f375c8b83f5524bbf3a5e3de95fdac948eddb7232766aefe1b675f3f9aabdc78e97b91ed3343a5ee6fa07dd4d19d7d43893efa00ec6a5696f4e032b454fca9aa59c9287685da758f92996fc944a4af7397dc619e743e8526aef61ef68c6c8aa2eab0a7eaa164373298358c10b2c106e32597ce5909cbdf9f5b14fcfe07a9f81282050a8f836274b581b2f94a3a2b382723c970dcf657e7cf9bc7b6ae303389628851a7c01fdfbd7b411696343de8b9b4059356272264c4d60b566a953eae44738ce63813b066089377328432861bd55feca57559da2593fda7120cbfb4bbf93dbc059de9b88e040dc06aebdbf2107fb3d911d42d88f07560d4e27223ff6e654a0369e0b8cf6b1f801424a2db450baffa63e4cb6aae857d423a5558a252774a7d42975890d20afe0811c4b3a50d50a4935ab2aca5955b172277820c713f13db0290db54e1e3ab0e97b759f6bcbb1825d1f42f798122b8fd1b2248455156315530ae02fdf2b5adfab62b6d19945602b0c22b2c826db53c69d9c5a2bbf567c7f817b166e06b77119efddbbaf6af98ee7bb4b49a65fbd755195363e83077132de7b90fdbcb20ebe256e63fd2a1dffdec7a513023cfa281ccdc0de5639630650611faf24a90609b3277e43023b6e7d34d243e79452da702859ab472d86267d56afe3651ce7d128ddca55e002f2e9ac247ed737a0bf380a99d2f8d661f9b69dff6cf419a729803fc631cb4d64cb5e0cfb98274b9685a120bfd84e2705355bea7ce488dbf6e4620dd23441b0fcf288c396d7c0b5f8e9942da812f2b17e22311d3f6bc779daa341ae70cc2e2732b5212f596fb1102342767cabe2c4dac16347c65b498e6f3107310cc3b047df618f3a2771894bd563782bc951668ea3c2e9a36076071e52a4c97b98fc3d951ce35f5c8a37e4f0b4f7aeb32caee304f8c78f568cd5db5535010a5c17684efaf46d8a1bebc3ca666fde8308ed73f8de8c260ee445fdb6ad3456af799a0fafa966742097e2527d3a758a4fe94ee9cf38a7fb74777fea3e8f78da734933fff1b49891f8e9693b2fc99bfff01fcf055af7d621a7bd790f54541ccc8b70bb008a8074a5e460e65f98c6d602512f9c0d29df8fa08df73b5ccaa1523484c88f4a3921a4da4f4f7b514e29b5185a554157f1055ccb2b5da05654cae955cd625681a7bd1d3630e960bf1fd83c41b1768fc6e63bb08115f06470e6181037c01737c206ae6dae83192fc2b53c07e244de9c920a5c007fae3c626faec48a8359713070db97f281cae6de19aec7bfc18f8bf51b0cdbc5707f733e00fde68080fde68498fce690fc6f0194d3a8240d5a286a0a158d0400401100e3154000200c0c08c4c170482810865d6f0714800f6d8c4a6c409b0a64c22487811004419031c6180308018018008c4186868a373ceb889ab62e7f4f3c07477f6c2aeeb7cc32c893a3036b6c62352f04bca0129a77ef0cabf71f802d43394a46efbe749a06bc366826e0d686f21a2b406e1d3ccab70c3c151127c916cf3b8d4825ca1bb11fae046b392cf563366a5db455117661bac5b6ac3ddd3dbaa744009e24489406c87c29e2229b1283235c40cdbf00d95df90ed7001157b4011121876bfabc3ad98811cbb04d5bb0065327b485d198a4e5a9b24185871c0f8e930ae5a2097228a321e8c082d6436a0d0bfdfa0e041b1a9bce2e31462c78e425bfe1e8bd545aa1144f1db7159ff8983626d49337a1a090b2813bad3483e8002fcf8ce3b4e833705d26778b037caa71058d0e33118419c4fd922cf84dfa1163cbc9ad25ce4a15f6780033b133f4f598c2067db1f9358004f6a8e88f09b2627092807604c9e7fc7fc67b5d3be0b696a4d9d708ffef83bda27b3df82a9f60fd03c83a7cb24fabea80e999ce1502998adf61969f98fa9459011cc4a9e24c66cd572f4da29975db435cc4a94422e732b3c0b12ae69ee21d98e5e50ecc14082ff08c3328410ca6f2ed42d7c1dcd650dd25c2dc64e40de4605d86681afaa6fa0bed45f1ed026b274ab37a169c80a1a1049e50f189e75dea84ba4487e2f31a21e07bc0e19281957bcb20d71117ab83c644eea086d73e3f4e754a04f037c5c425a20a4158405e43660eb97e3d5c0149f24554e2b379c70a88a4ff0370a9f5b9e4b1529ec921b0551f503a485a0db694e2ac3d20fe91bb6239be4fb544204ed92f204dc0997b80b4e569a689cef3a963931a7f4efd3ea0d9d83a019314f9011081135c9348bfcf6d907a7b05a2b37cfed4074d5ae5ddb3e1f49c4a0ccb2bdff94bf1c40c1a82b6841f53ff7f4eb138b8a07054ae1b9d829f1db0329764bec06c334e1b5f6dfb9a9446877912a220cf18a8ee39eddeab0fbd1c37547dadaf80fe88652ec950e42aa20d7a72c4e70b65295c9e86f8fed0f0a20534203608a21fe93ffbd436e35b150e431ced0ba822272813d595b30dcf3bd3e9f6ed4381c6149421bf37dd148cace07d2c66a5a82cd51eb5ecd07216a4d85187bb23be0c6926cabe8f80caffd7a7af5af062e93b237901e02b60fb756c5addbe3bea6d8c1e2e95d5f1a1e08ef0824fc40e140d13e78c4a7329ac513e017adc30904607ea2dc5ad315f11daa130e4faaa7fee644c59a19ca17151a913a49d9fe7de933822722d90848c38bab2475bb50941c661c08f6d0bbf73831697b0636339951060e22625d483ea343ce33868322d16ce53d9d596e100c661b8a51923d8236aa45f2688d8d4ec98a8b7d8689caaf837f8781e36fa7387c79099991bf66138d5ee4018a73b6ec84280ebb08f8d6a5f17eca4d1b1f08ce44368e829bde845eac8bdc7497bcb20af037bea923a621aedb60d95c19deae399e99cd6c1dd64997d661c0706b43b1433dbc4cd0cdbff3c2173ae084b7b010bc7118aa108b039dd5b61b695779873c0b8e5319b8ed65c36a00637f123246314e5cedff23659eb47dc9684c868164733f1f96e84d211a88a66d6c7d5ac6db0972be4cf9384dc20b43e738a3e769d0764304be9db95861325240ffe5a01e73c0416d8b53580cd977fd010ea93c427776f1a71fe86c7f9db27d6ba38e30b449c376a3814a5cc0a9f72d1d322f8c9a1439cc418b2d34ada2ea969ff29fd3ec6a84556caa597862a43a5b47439d1b15745715baed5a4708aa1dd5f62532ecf8e22f05bbaac09279982720ca2252fd4d3777ae479ce1da694fe75fb8f98c07a8c3528566869df9b9e5f8c6197d42293a3c305b1da24ba1ab842516b480016070d0c2296024bf3c60b52fc377766c088959cf70db764a2bef9cab5ebd663ab646cc73c8d18cfa647029ad8a7bb51439f039f50efbe1db43533f01f9fe09bf60e90fdcb795e7f3e9bb1743c023d47e9f4afe8c8f12a0cbb5a2c556f3f09dba8370d18c83db9eebcd8b881de6acd0c1c6c3453a7cac00c3526b138e9683351f00d87c1f71ec4b967c181686348bc346138dad3f27edb4d1bd2f267748e6acc96514c5a61743e926e1e933a62bc438ff37dec10bd15c15c6f0d92238c3b3ddf412474c4f1042b6b55e6a0e111f58a8ee214bd96ebcd93f191b5b0fb4ab3a2fd0e813e28a1e94ae822131f2dd48ff6b017579a49405d9d2d4309f845e161714b681b1c37b507cb1332bf3113588fa8f71999fa8b903fb3aedaf66dc0d845f27114eada909106ace09a6b1579704ba14f3c326d9f2e33a0277b2c9ed0755db45635fba783c1c9d432356bf11bd80136c0ae7ed67e1f95f0c4530179ab126305c3957b51b16fa70afe4786c066465f59ff707396e508aeb5b30493036b031f7f125ac0f9658b86e0019cf34078e109192a2a43f3bc64e00db846f7f41651f1a582273625c643f6f292d0a70091c0b923f81ffa14cf83d3187e52bc5419cf8922b2fb1fd72363eebb7486aba1f1fd9b2f7a7d3f96ee746df7486f4b73bce5664083b7df7bd396cd44989559293f2a0734cc3d77804613c828180efbac6f0e69b2adf797fe64710043ce58535fba064bd5c980a5f2c7a750b155149322c6eb361d2957486aa1e94b7044d5510898881ad0228519ba8b808057b38f9e2aa09af7e3d82140ff7de5a56f3379c91a62b5c3e53512a1d3ca26e2aabc21dcee7c2b68935e993b2500784ab651afccdc1ef90f31b3a7c400058e5bf36be02d07f250dcf102bc52fa921377338c048420e4416e40a7f83a7373a2f2ec0205bef7d0b663ececdcd9ae78db71f886757c41f482152d0fb1ce383961c435e035101b998782a7fb2b310463894b02315f1dcce191795f026986d08ff9d415d2dea7223dcedfc0a27dbeabdb9310fb8bb11f9788b43b5c187889705c826a34d8be826b99c1f0ad1b05c155fa63d4d853185abfa69f7907f0979954a83d2d589d73f8980379058cc71be7c2ebbc5f6a183eb5565646e0453dd386a6bcb74ccbfa7b052355b9077e1ed2b58f156fb455691b3693923fe31f365b932b2d847449a3d89c0f589a16eb476cc9de8c09311fc40f988ac8c6d7a87aa8319d41734106a6921bb207363fd9f77057f39052e9f0846ba34e5d37a455e836fa964c1894aa3043ca2041b2f71523648b7283c7ad32a1ca1d010630db6d975063bfbafcae09261544cd3bcb0a4314cce609f42060c052c2141e1d6ac7b1da40549fbf893d07ef27a3285b355e2e1c78cfb8cfc1fbf368538e0d73b567a0e9f1323f244178dcfe53c46a906ed029758c18a6bc5343829c7b354af4cdc9c212e76cb19f871a3432a06f4d47e3406ad98299b60a238ccca64829a9aa0a66d0fd834112a00c0bfdd4efab4c10112121832f79cbf614886e9ff5df8435598dfadb3c551ab4122cb80f250ec86b7517b445fc5b4945eae6ba08a64545370a6e25ee7aa4c51c19c68340ab610cfaca404b4f5b4aa0a032e46d641f36a6233eb0df827c1b9d78904b482096cd9c747ea3a03a1e1ec89613b572fb8ef406704971250f932b8a89d32fe8834f89c22a31745a177ff0eab68eb8154f77a23f4d8f492b5194685237f3e8824cdb901ccb0ca719e40d849ab0bca44c9a8aedbea6b0d480fa23e5d0e8101cd7b06cac46c3e47899dcb8c5d48ea10a9716ec876b848b53615aedbb78caac651c5c80713b9597ec14911516a5701741f2f3a541a8e6799e13f931c159a382fcc914fd5b3160f31ff247d4989a20b8517f0ba342744c17cb4f567e68138e736d0462a1979cb8744398e2f5d81b1a28555847e2661a030e4afe5691480f364ff3992abf4bfcc3fde743c11e35a4cb241f721257437ccd0f05d151bc1becffb0e372723d358448a4ab4eddedd598048aa5893143a122b00a28a6deca0de8023bba1ec1184fd846448ade72335bd62e80f4ffd6f28cc1cb3740fb5a199238ddc09ee424d6b10f4fa9a2f5ab923c927f9c3b3b2b32ffc45418c04b41c5733c61e67b3549697bf3591c67a73e03c6361045427f4acb495433e06889880086e4baf9b44f54b6775a574f68b3ab9189091da6ce59843b416c636e15ce52eedc79afa5778723158ab00447b2d9011bab3a4ceb2e156420c85b7cca6a804640b318f8ca5bedc2ea9959de2710bb67f37dd36078e7be747ff41cd143273818c4d9004b6e15a8d8f513e2621a8729177eb58dd03bcfe7eeb346cc3f20c9cf762df8afcc32afcbfd38aeac00d6bac789f9745d7a12b79bc2cd0986cc6e5a2e8db8a9b143b2898fcced2b83e3c5ca4fad55098207553c0b1f6cce25b0d102fb3ab1b1d339062b090b36a46b22aa1082902057474d86f398c9e49cbff79037a39d398b2d290db17b27911bd880e047eeb49c6f3bddce26510e50a76647b4ce67b897082fb8964ad672455198e9e0ff9a147e29fb1aa88c825e88c40d3a5646d49dae200a24f9e1c37523349d592e7ed226dd8cce74b31a4420d410af150471a475ccb1e244b3767e0d28d0b1f5db56ef34847ba9bb1b035cd6b607e518dfac5fc84160369bfab727af3b19d3a2055959f4271b11f464570441f28c09907862ff087556d78e49758c0fa663c008f9707dfb250c00c3c8c47c77fd920885b1b3638a036e6700e4db1320de0f5aab859c5cbf18b4b77d90c7c53c31760b7c142ef9f1c08768f3768c3520cb8659b7c82734881a73d7e2db4ecd6f611e21196d6098fee9584065e8a3dacd81a0a95ba39553f2ba99aa5e111ab7975a30a066d2203a08076863ec77e65792f2dbcb713185a718bde649c107d178d777d3d78230eb6fcdb205a56cc0b4ea91f86d4361790d13ee3ee647cbe113f23f6083c20cbc6df6a2a464a4b868e469f313d1b4793874903ccb86ae5e593cc6744f5f6920b20f71d6834997eb1d9cc2c89c11444bec61de0c7dc710cefe6909369de4a8a0e43d578d08e7b628c84ddeaf99884b682ed9607d6ea5267e92f1c4273af73ebf119c3cc4d4f010de64180962566c1663ef7c322eb567da0f96e1ed12f243110e1f90bddd08c0d8750e45d37613718171b7e7061730f66c10b64798e1055422065e3a33b791e7d624e5432d21601fc81f61791f027bc0fd10a0a4ac6b3a8809d196261188039169cf35eaaab489284d7cd1ecb14cc19806345c308f532022dc237ad8a7b3bc126f06fb25f2b99348e6aec6183a2c97ceefaa6496d971fff5f2b1940939bf46b06a2cc455e255f9c48ecffeaa87c67480d42541db3c4fcb47136e9c179263c5d0980be2283993c928a05a495c44cc6449338592b5741f6f3c9344156ff1c791d55d766c4724d807e591cb6da38d1cb70366dc4733c91231fbe08a134dd97b36b706d204d45e3252930d636f0789a5148a1679f80a8dbc4f08d926c58964c7e5385c0ac95b63c9196ef1b1c65724aa7bf9e983012a64ee8816cd2f4ab27e5926f392bdf145eac6b5f9d1a8751647f927ea7b2bcb79bd3071b71c13347eb1c09ad8693d6c865dd88fe8cee09d6dd88b7ce38ff246f870049b7c5b5af8c8251b62370088fd8f208d15f9e090ed8e2e822fe037087709c320d8003ffabfed9fa68c2cec12302df112af47fa053844034d811add844d2f7c6614cca61e303173b59eb96dadc3db381bd824464569a69398fe99537bb57f4320fcb6e00747c2c752860fc251701398d37b3e9e8b2918f06583f6bb7bf43d9644706bbb794d40c675b1d6e73e6bd347fd4489ff9c844154c8a63748e0db0b177aededf5629e7b7a6b984ddb319eb83f852c1328ff80bba0fbfa40ce2ecd0d10f80c0c3f31484386b08fe0893d1ffe7dfde3440ea44df8caf88f99fc802349caaa7863b7f11031042a930c0cc11f244de108c559033e0c8cfc4ec7a3af8209f305cb2144ab66316f8e8595659002040b2fd6eb629b051d86645666ccac6866f2bebaefd86a096b3edad27012bda6ebc5d62a6afbfd6540ada5e235721510e34825a8f72d67e23836cf36f505c011f3b5747e1ffb4ed4846d230ec82ec6ba274a11e7180ae1ac3f0173efabb17b86105c52f05ae0e2470208b9ccf444e0e952791956e3ee33ebf1032fd13bf7fba73b0cf57a7757f1f84133f004d229bfdc63b81996839f5b302492eda84056a01a8649f81400d0070e618dd062ca6e15e15b425c2ed0f6b7c16a1c35e8f45f529b0b65695c7a781131d86357924f45ad0ba70c89f5bf9c9de118258d112775b87601a33294b007a28dc4d10f217ce233a90230f72ee3661766054eb2b4e891a13f1e211bea653749d67e4e1e916cabbb19f21961c2c8b77aae9172b0df7e2c96e59cbc70579e442cef270b281a34ea4dcc4d7a6e6dfe7f694c447b6c777e8fddae9f45da0ee07068835c4bba751e8dff57e3c399c13d7f7099fb3f1f6c9f49ee71f6df7279381f9c48822e72d8a11e3930fbc05a27e1c2a9aa952853e5ce6cc520bd4bc1071e821274803a3ff7e04823ba2bd4ef97c4119ced7a551522f3cf6ebe918bea12d05f80763e16e18e15b1812f2348637dd3e6cbb5551d8e43ab12507967561afa534d5093263f612ee03c1ca0ccdca97331b45bfa78135669d4f56efb6d6c5d1f0a2b28437888225c2f2e8d3f320aae8f1715cb7d8957cf8a6f0ccbe7accea70b08f4f3b86a23ccbbd29cbb34086fdbabd0b1c5159a515972c3ed1b33f8557e21a89bc15a9cf05f4a86b47892d7ef40316ed426cde968e788caed2171098f8eccd818b7fffff4644ba0005dcecf0c1c0b19eeac201b42283ba00b1b0e11cbc58b1d462b0f82c92098ae6b1c0025bd567c878eb6d627b7c0182002149e173561d0fd346103366ed8d2442f8229a16f9978876537c37588efb28a4f35bc355a5241bdc69c0699caea0a793227b41548c91d697a505cc29cc258fe06e79713483a94b7579e9606607faac010654efa8b2638f65af4a0af25c43d556e61eccb60f4b775d5e6f2836d6c4e23d33919cdb31270d50792c2de48a4e49cd60c376031e6d3214935f1654e2d48bdc3c05a1f19fbe7656cd4538a944a6651c5f03944de7034f76d96046119e5afcc09373ad7bff9c5bea1e7413c26cb86db3113c048f40f3383c695020950a7394d8276c917157e14db269b110bca63b2a53f16d46efc227ea41706b1115b9766058cdc8fcda5907b1ecc03cd85fc15ad95c357d33cd4a6c9ba7da08d37c280e2d73831e9d75b233cff7071e6e17dbb8a6999029f861aae3bad64edc143a553f8a93e2521d547faa2e1a3a4ec0050dbd03129b27e8216e2170f92acab6f40d55e578916230449616379ff48e93ba2097755bb7ecb55168d02df29ead7dc46400c48673598654c4c2ddffc8be8017b83a264cef84a9e36eb874dd59ccd28ccbe4d8382a8840add548c9ed8464c2a78a82d1d8de07fd504282bf02539faf085d487ea7668085aea8e97342809c3c7dc3d974b4d1eff23cccefa5d06d13eed781079a79581273f7d4b7ac3936cf5e6c66cf005586924c86b43f6f25c7e947a13e154625a11051ad6a0df5f87275cc406b502a5a73d7042258c72f1a105136e51c99d9c2d99a2370298263188f1724406d380a6c12dcb1454785cd67cb5804f07d407f0b66e46f99145eaf37ef114600df27abf703f0ddf2249190f1240b81c48bd7bc7f1da8c82368d810d70e3d5ff3778e21b4711ee3fa5403b214235a663cbb43d0d4581f06b8137aa2029433a3a2483101a708d5922c10b7941755fc67073d64c7f0ad49a4fb42af9242d05196651cd0c8020ec54c40a19330400a199bf867665a14e8bf3c903fe1c672920dcd3c08bb512ac50fe6b0174bf0ff0abe4e3201ac707c619f344d652db3104f3206ab99d6f9cb3808b840651e233381ba9915a7e560f09cdbbc2ec153453ecae8ddd478c2f3166db0facfe5c5511a5956445e756046504bad261c07571cc2e221f50660f84c15193000dd4ce367953668d453aa385921966293a14dc63e0d5a7be42fa549df57f7680c1d110ca435c558b48702dbc83ba44096ead39b5c2f2b77df54d29f88e214b1b3eadbe3dad7cff04af8d0ec031ce0e24bee0132f8e31c1c2d3bc86801180d474c45a4acadfd8e828b17ce6ccb95d8590cfc2b5cca6abc290b2b895776ecae31d9f082a440380a8589dbf21c53498c97ca4409cd8a780a1460244aec8d4215a42a8db6242a80af43b9944db18b5074f11ac54da65824a8f4d16a59605e5c90e1e4ce393fec98dc6ee49f214d638c6147c7c181803fe1c4382526bd6582734d264434176f0fbbd67d22f5f76b74300794ee4fbb0b506f0439aa65bf83b4d0abea59f338d22f809658ab12af9587e4a765e34692f79234c64223806e0e95ef42e149eb15de4ba434cef498b8dd3babe925120fb4f1812a27342c9f76d192885a29bfd164230eca0ec6c04b4dbd6d43857d6a0255b5009201abaf38c09e2b6cb05c4c0ad4a87f53587fac32f19a66ef9841e42d195ed08ca0d931c4c563ecfbf5ba0396a35123b4f29f6c6bcf92deb17813b6011dbc21567eccfba2a53c5e378bd42f33149d69dfaaee0384377726aa0bd87f266dd41b5c9322db62842d30780021855e9638255d979579c765efc104254a9bbf04d1a8a2d1249aca311e20aaef558e5dc6ecdf249988e94a8c8a15827f012151d940a2f1723f16fc6394cca2f420fb27c004a10d129c659e82910058b8ca75cf65863df217665e00ee3052af4effed34ce36a3638d7b7d45b1c1c0a8063f0bdd196194589957147fdcaf41e19b704e88bbca560e6c0a2c3c51148c184a49ac0d87a1229be9bf5801bd57aee47289e78751391f40b74689b9b8e7064d2c4bc337d43f316a9069d5ae65d35041f3d4918845a048c4226182d38dbe05d9c0db78a6772e9cfbcc4b946f578acdbcaaeac0c8bf89e8e355f68c9230610be001b5ebb082eb6e1890e350d45d5868c047a52a6bd338bdec1a41b0f30da0f29087730e8dc2b35c17436d4c97660bbb41481f6aaf0845be71b1603a702c1a7fcb2706ec3a5bd2cb7ad85b7eb7eb39f280d2e7fc1ca497e03a0b63cc9f81a6aea6569128bdc2969a99db0d06a5900ef05b5ec459ef5f3b3d9b5395f219c051fe28b09a86ea992341c7e7d0ce58938ab091ee37b2dc331029b5567bc4ad1e9d139ba1b43ee93fa011650a0a0363d2c6cd0a989bb2056f44bb5de4ead30875a6eec662ec85fb93020d82cdc135a00775769fe8e0e6365234a9c7e37a1df9891a7d838802dffb3c4bcef6e6167ce93e4280ae49cc9bef5983d9bffa43037ebca40b072ffa50810a7814e473b2b6f63d151736a9f9b63f856109e74fd254b863361db2b279437b7c9f5be594f3458eeb9bc3308b66b98f8539cc3a801bc88cc54863eee84a847b046dcfb5ddfb04f76c206eac0ab0cf071e01e9d049433fa23f4c5667d2cae9304763d52063eab41df92b04618a48e957b291a72d21e793eb282a32c32f416242c606ff3046d1a3603ab3c5db715fdb138f1172936e7970a240e4562c1ba186ebf677f35b0214b1b96ef5d7a0f940b38efe025b7bce767c89fa45e05f04b80fa594b2817a7c4dc636fb709cf59b1ab8e1b6068264b5019b21dc76a4c34d0d28be8ec949c5d7824e46f7812ea852a9463618b380c4262949c689afd35dbc5d48949a3a6d72dc98d258181e2347a4822d93b2ce23c944c99ce26a8ec2d23ca25590717809ce943fd4d8a164e19d739492782b6f80a31bccd0bbe3f88b22cf108c5922ee1ee087c057c55725088fe3e73fb6fb152d3581100c14f32614554c69a6a47cc326c11c902149ead27c98dbdadf14ee513345a00849b93181c9a7a7bc4178dab5a97607d962f8cbb0b8b848b270e53b84cd3f1ade4f13daf224361464988de08430cbf16bcf48f0428deb12d31fadd5a3a80904c874a910e4a302550e2b22cb4dd8439f7998470a58b07d758b56c6f25122521f32433370c74b5fd402844279ea1149a65aa5e4cfd8c55048a4b91cbbede05e60aad7fb5a2e069def983afc61467b55e15051c237a1e41b207a618eeecb8f26c248449c56fbbcc871811975aaac57554645eea191b82df5991b5441c4c4234ba4e6a4604fb682b127b49ed46228ff78dc8035c3a71ba87c7947947780630dcd5b59641e3ba4a67803d1191463dd7346f518a077a8c290b9c7821b49233f83ec48f5fe1816c31d839c32bd37ca906945c443c0b358647f9abb779a8d0439eadc95f8cf2e1ee772671c814f0714e9c04ddae173fc7326e9797c42c93eb0f7b7603b6688fabad86680770a4ddd154de100f8dd7d005a361f64f590e671e1e1e6c1a5eb06778970c0da71acbae2c32960f4850fc361027a2a1683fd8c0342682aaf7354af709717b97411089268a0224285ad14eb60b3e2575ebaae0e6b39eef47cf0867c2f3bb1f288a417e722c102a6ee69bdc612cc34ae50444546a1feb8d4312feb81f5170067da4c0a6602e0ca1d3a32a91ca9e4247403242a14718e19b9531410a961f52ea04283ef1312f7116ef3769c5622ee205917b74e963dc75ef34db98db726b3d0c292a50388083174ef261c8ad0ce7ce702fa8f9cc6596b810df4c5e7c198c867312ebedbb4c07c22a4e8f565607328c20fc8b00533e2af267e93cc0d8d6de3a639961d2a7d0a0f5201a3dd578378c0985a6dd73228bc2ee09d46a2dca9def2bdfb12d414488deecc65e9c27eab1da3f8254c31c1004091d900ec3057c3153765c1c43590247cebda1c4717b009343e32da4c89c134f8153ab3df8ed10f030acc4d56e961532a8470b55400cf20068bbaaf5632c4114245aca0ce203a9b416e427575c0b6c8183c4209846c486f63d3f7900090443afb6dbfd5355c48764fd07176e7f0d8dce8636f03fa03ab04ac0a054bc26850497c4b601e1d889ad76bbd27630a914a4c43f7742fefc2f0ad5cb1e93caf1cd324d2a17135cfe360b57411036b6f6c9054951680941a90d95c070caa52ea64556e8324bfda4970c5de48604acbd1f3c73b6975002e3fb757847cc4507d8888df3eb24755bd64ca9c755be3dfce99bb8f7ef5c1cd5af786a163ca146be3b154ce807e77db1e43fb09da87653f11fc5dca7974807a819bd7bd6d45f5caf602b84f82a7b233a3b5739040e3d5cfb5090914661db9a96eb4d584c9bf2f570e1098abd7cc142b679d8790be0277d4d2c9b26bcc4f30ed516750e180cb6279b919b75cf56122a74dfc98a6b1de782ec3856baae08452ba7d23cba17937fd58b7d40039346f83927ed802150757c245e5f25ac167f7ea239c06896c7ab5b11121b06c4c4d32803094d4d5ca4ed57a5684c3119e5ee7ffa48c2c4734274cc116344d90edaf5a3c07fd48d808c1a61f9650429121796b049e735e16385375597df28fc4c54726137af58d2ad9bc403669ef0d55bca87952f13821f71f5853b8ea2d984b76b6d9d4610e8571e40a66493daf581e78c7c21c4e6bb1755cfc51bb1f6345b4833c10d127aaa897b8ed7ca349e79821074ba88700ab49ccc59c76d38d4845af4d5d4ca084c58146535846e96ed071d208c8871161ec4089abd1f27ab48fadb2df76683d79b564822a2b04d162b39de19dafef42a12475d43ca72c42821c10712dc788643d73bcee71175191d01eac2551dc0f52b489278ad8de395be3f6b9d78e68ada487e6b14a1ee143528d44edc57eb881b79c2a7691bfaac26f6825630449058b52571b8a599eaa9ac34b1ac412f8d351423856a89f723ade9dab383c1de5bf93a7f2508cd1d9adece7cde64ef179d759ceb4a5301d7e22e06c205ec89f945dbc5d0b9aee8cc48344a43dcbe2386a6ad65fb01d9f6c964ddacde71356fcb745412a58b2c5f2253607fc53bca00727906b17a3771f879cbc6db2e150e08620aa4d02b5723a3dcb213da62c55da46226a1128373ae7b391ade590b2486cc308bbeae73593e6e63d6d6dad535126aaa1d268838b44f2cb2780c4b2f54ed6db7c1c9457d0da34c2059cb2e2729586c1fbeedb34c234eb7559614aa215c2a63cda0fc99bc275d39590dc6e8c2670554e49c861166c9b99361a0d358456569f8efa10ff52a72c229e5ceffd4c51577bd1b30f994c9c3023c2c2fb620389e7ae1264c758cdb0573a7d8200526e37381e016092314a88f6ec188220d380c32577e1ac499f945f8194097212d800c060328194ec6ed66ebf27f910af889ac4d6fe492b6cafe95305c430d85d29c38c1f65f7ee8941673f39981cf6a27455780a811045e7ce44a029f8c93bbd5b2cd26975995df3382ed2717c993ca1c7854a703fd74d937b0b38028740bb54e273690c9f90311147aad506f3b9d182ef3270563139422246ef70daba1d93358ac50f4aca492adc11e09abd0a48be88e249e946b54c3919636be54241229b08e18917a33868f42f405c7c5e10c7fbe00837ea73ce3705f94b0189d9d280f580838c14746e28a0d350210dfda3f7eda8d395099798df9c38b5df9554a5174bbbf3ae036a01c2c892fe5d59f1f72da94f8f5b717b8fd4b3c98c1ab5869421f7a573f2bf145e6ccdff0465770d236ea52e2bf671b6d59f2668231567a037bd425bfe8003fee661efef2a41c247891688a43071be4ca0c44388a8eecd78eacb8eaba49bca04e05dd0f41df8e7393612033588ae338d13e4f80536b0559236b7606db3022e552f5d4afe27f24cd4103a1849f3f3fdc81ea90ee012a218c9ff49d72a3691cc4bcd1f8e1dfae4770b9b0a25eeead38cf3b7261a9af44b89c6f7b11b8d9a5ee08c50c8cc940dce6dca0b56f0091ea60c091a88e8bbe4bbab21221a8f1981f1641ee216cd361e7ddd8f60bd5a2e503a3d0086d583bd76177d0d4a3404b35e6604793b71a2ba924e543782d64e6853455e1be6253ae9caa71490f98e96bc9e8b1bab77460602a3067fa907c182d6d54104881f5c68b203b2f2082301863169bc1b60f88e945a721a255803d4ecd13411af58c45f377c0b7da53e578ee1f9c6a2af820da589d15eeab56ed20f3a4acfb43547ea8f0fb5acfbb01cefdc417e0dfdbe91839786a760b0035065e4a31c730ecf766f455bbf666ec2a083fd8b10c3500856306ad916d64cb365cf8c1dcdf70fcf4e3f887ffdbccb15e6d45b02c22de847ae2b69878c31c7cb8cffcd8f44852bf397bd00859a83e47e8bd440247a72a7484e02fe9f1494fe2cf1ca021c3c4e01f7f1da4e11e014a22bc849194dee1a8bf64f9f41bfba24cd7926be60253096d699f9829c858a1c886b12925e649607b2758d9af60a412083498b4ffb0b3a751228a10c0ff48d3413653751d1eab6e4f51030c4796e404ddbf6c227432359a4f8b58506d239f8f843955429e82ce6d69fe123ffbd7e9996a598c2358e1b503e0051fd024ee86ce78bcdc84f80f0d82b8b96cdf44968662095f7091579d0a99710c10e5e42d1e3d51f031b343504f6e8bab35273c7c2425ae8b596a899238e062fcc1d993508f4ad5a87a6c439ffe836b7bb1bebc797c91a3ffbc06c30e8f5caa221bcf866731f3aa1d6f96ef8b070c358d69e308c6d0b8525f418b7ecc60c36d06396b07d7c205919cb33084cf95931d222ed7aca250a6c768a7cb0324de10b2a0c44908f4d7412d1882b4ed00695b1d36ce56c52b301377f967f29aef7690af7c6be74402d670f96cd37fb526cc9656340007db472f8d8478c388250c5bdf9f7ec3665d23eab78acbe8b9c812d18b4243866ba0286d6012288f1f7885a43791d206874648aaa78189c16ff07148341e12c7fe6a962736835090b849569b1019a0a7d569d978f304a1d0909b2359eb15fb91cf27932d2bc8da820db5da6f374b0c2d349584a3857bb90671a6fd01f0d77f673442493b54651e53f5c0470559cd7764b827dbe8f2c0776356262986c46ce2756a58e646e71e9736ef344803f304d026807d412c583026e4a7cddfa33f6a58dcd527f130502726d2add09f53ec20bfc4afed58f4af89ec685182ce7b581dd6500d36ab8817d066e81ff87e205382c6337a67254aa45efb9a626317144735f8ae110f493446d1353265e8699c821c73bfcbf41a6d2dbcbfb3c5bb9fe9c1ecb745e20be2a9c074159f43f1ff10edf9b98c5ae58abf1bc87b6f9d1e0130774dc484231d68dc8135246e11111e1541da664c9b0e92c2d7095b9a0e6830ce630416792dc87fee6f8e125771dd2b4998fa1c773eed2cc0ffa15798eb0ef59fedd8a51efa85188d22b22ecd9c5503c51dd7913d4424d2bf82d9037ae83962be5a6c588155796366e0f07f085221e57134fd591c6ffd7234c07493adcadb793e5470197c0d167ce0757664040374f65e34298716ec78c71042654260239bb2152562e21e70fe917397db20c65c23944989d8aacc9812a168b457cd40cfe718b7e45fa6984f277ab739e8c241a2c698228a8f1f2b73c1ab111267be65cbb10fa2dcd073594896c96239e26041610e1559d8ea070944073099580d9de4e18ed705928d5a1e49db585f04acac3c75b8540fe93ce46d8065fb4d92562a8cfef54c4652a44f988149e82452351645f245e610758e00664d1856ccf10af5baaae296ee6e68c8ecdcb8a56a2102fc18fa8a5d77144381925084c8065bddf1df12667d5dd8ff157c61c722117179d748cc341228c96b94a85cf280742e398707d34a812cf093171e25900e6d57881cd90b20b080e09161581c35c4bf57f5deaf3d02867f296809a211c76d9142d43dd297eb33012e59741a3386f7dea106162dcc5d8a641534e6ecce5f98ae889d1c4fa5db53883862342f40cb207a3a7701f9956ad16d2490c91ab1fb45024e12de63e9a9b96105d49ee109aa9f6de0aa006fd12909203b8396ca3eab13aaa6416c3d24fa77dee93126ced603220eb08ec83ab9bf5f05b1f4f177084a86085a8fa109f381af96f5d45371ec77d5a113b63b9165c9b123da4309c8565115b5ae002f61ec9e7e1f6698204a8204d74d90ed26c7be4544bd766150f061f816adca1ef95b158ee1ac3ea372c62be6993db0c5a33d104741308c09e3c33c5ba4e958f7878f3790ab435b3016e4f66a64b2f54c2552c05b22e848ec4341e078b4c3c473e6cbd587e28adbd5565cf4bdd57dcb3356f0660c958c61a330baf02a193733afc4c50862bc8ada4cce5dcfc23d8274421006593f8b308ae64323f6a3acb9f8ab229b1ae64dc24c5c0805dd46a8c7eee3534db20e780e7bcd1d00c570399038b0c933c04f0360242bd5f7057b4da878b6913eb417139275e8267a013e1568ea21ccba77f7003de3b6aba80a49b98a63961b2831a81624103ce20b6b985bed2875424abc416c0c9f0ef06c85222bfe478eadd6f1fbc6c4f23a824861108f589b9765b26500e87db1e4fd7137c794d76f86c14201b194da9cc73cfb1ccd2c9775ddfd5299560134a191cc0fb2603a13d1aa350b2c11e90d3c49b6015e40bde0e0cd296efe443bf097efe1204080aef5fc675e89b0447a647f113086d92c368e1763eaebff1a0d26e346f1f5900f25b8425ba3fdadb1c3bbb252bae8694742c014dd4e7bedb09dfb748a6611a1181b3890a1f11ff1524491c928d5c02fa6e9bd17c34c80e1b0043d13d02f869f74956884bebbe4031a7dd362dfe4448a64de96c8c7844961cfae80f1e52b3e1d930da057763a1eb46b3421fb35e4f09d4958fc111ffd368bfa63e10d59761ee94272dd1878075020b017ec52d5b017ec351a303e2a167d15d486348f72c2d1087683e7d7e52402cd8b046a43d0532e7f9f9ae5503daaa70fd9758e6b8b0147d17bebb8014f880f1dd6f41560c422a327bd10636edc096da433247d26117f0599e86b020962d2c35fcac47c374bc5a0ae06300cc610b2db265013d932bf194cf64a0cbde1a7a9653d5f985395d16b96db8f1cb5b3b6cbb3d9f335f5ebfa2170a057c6476903c3953312a8499e65e6bf55e7c2a75e9ded541bdcf19653ce9935a7a9f9972e55f11d3e71eba664cf8d9bc3f768295293f7e7143ef2eb24e6656eaaf53ad2484407fe974a3356d3382b0d68aaddb437b23338573425e3c94dca8b47c242ba9dd402c22f712c08c54674feece5dea7421a498e9ec4937f54d60ac7126efac65b7284bd297549dadd1839123e474c29d4424b1052cad4baaa4cbaa2971fbda19d3d18b5eb6c23cd93a9cfab399d0ab039dae39c3f7f299602a93b25d9230c2eee7aa39d91a76bf80a572e661f3b87be529ded59fb32483ee97c6edccf44918c477ccebd5e31dd72f308f211b6e21685b0a1ea560a1391ed2127b3c4f63583c17c1eddbc3cda3451a48002fa0cb2e32a3f30d58309afd375d298548b30da6801250cdb82bc926c69b6994b50e50f1054191efb1843a54e32df24ce9d7afa2fc4bd6ff015fc671677b4fe77f4113b5a988f870eb6650401050a847bb7efe4330a2ec7e5973aeaa632d21b11474921a2bd4f836a6f474607a3fcdbc20bde9fe6c509d28f8ad21f73b1e0a9ef6dd6643ddc84bdcc0c3017163892f91eaa7d37217a02f040a27e0e594436b541b516cfa434566e1075d988016b958ccacb70adcd6514babcefd5880e4aa20c291dbdf6f603b247995f524b66aae22d467b7793cd504ca1415fd04428d9e3f6d001522b0d9b761815e393fcda1463693999622e8ac9002370f2155d472f617612524b8b3929c0dd21b551c777719f6c7c9fd241ac91ed2906f29f825fa45874a8801b524ee428960d59225b5599a2c725bce4810a8ea28b41fbb66d13eb7a32420648091d41d14f4d62d90da44324973dbeee1e1abebb4f0d00a10d3af309fdd3fe4e4847f68cdb4644ec86e10f7f2dc64a7ee4445856752a1c43d6daac15a7fb130246a827261606381b43c81bf2a7a389bf837839527f9922ef5f39899b6e907618b780a6277d4bee5b3e0e8b1ec62b1761e2cf6814f6385ec53ebc915e34e40f8d5ac4d1a1a58766361fb37220fc24a4f1a1a5c9f75a4de6a39e56925ebd7f3da6a38300d9b313dad5ade83dd2ae6ec02adf835e85483b5224f66b7c25efac203b062d115e2eaa70abb4e2a0f991dbe1dc7a91880c08a243c699eebb47c7fcb8846f00ef031a2c99d0e87b90737675c4ebc9e27560bf3819602f619d06cf693ff24fa92639298ecf537f51032a8053a1611a651e2af074ddd8fab9f0191f64cce9409ae808033414da46da62389fc708bf15f0a066e8390379d2e21786328695587c2899f1858bce7781adcd77940a19091944850474404a1415940f3d8108f8face2ef22b42bbc7b7a9b46415f888e2aac114d4d79fa317a5e6020bb4004944312191279ffd935ff5a86aeae40ef191e91176bae7993fa10e0dc6898585a71024f0c9168f80d9ae940bc54ec89163a5ce02f19491860bbbd8843769a8bde3861190487da85f41f8abf5625bfea049c4207d553ae114a575f97341ba9b7be28658ce7c1351b238588cf82c70b4e1fd1742c3c9d0684130619c81e93ba34f34b42763dcb1957765c3e03369bb8764c2a6ae64ab9f472b6e66636f1240c3307963acf819dc91173cce1c45350ebc21e2e8aec2550edace2102f6f9ba8dc5a4a240538c0badce0514581aa308d6d4aabd4400662f29e3740bf4db90f81559722ec0588ae7b8c7968851df89bcc0569ec6e3e7ada8c1b734929e7fe0467711513636a9fe9567516712ccf17a7c9fe2216d35b2f69ddc879e9ededab83706402c5acd1d190323fa3cd2dff3a889d5b0f02d9b950a801954bb02ea5bc2795820d855693af915f34d0ed387460acb8585a001dc3f6488f7934dae9c26dfb2d230f044011e3590fbe29f0d4030fafaed3adcfefe9b2ea64d4dd702237cf98d548267b313fa7b79befc65eb6fabb68d9a88d052237bef2d03d9075d07ce0739c8da97ca4003b9848a4ca2d2d9ae03dfada440d4095cf9f695d40a0882281408822b9eb59d65016bf66e675592265e5e969bd7dd9ae5077edf497bcd1fb8d28228f9258190d1b80213985045169678e890052074ab7377cb325d71c5115660748422c4d082229aeee04150fe17085281cee65b5d4686cefb420b983a218a2546cbfb4353c7e57d59248da6cecb1be61df3de797feadcf765125307bf67de34ef9af72593a933e32dbe5b6f1aefcb28a6cecd7b86b78d37ce9b863700de97574c9d1ade97594c9d9cf78df765d3d4015f17f2be8bee0079bf9b936e59e8af7b773bffb4629e764f330057e65316008cf25c99438d2743551baecc286b83b6857655b09e2bb3cad663539900aecc294e009b4a1bc09559d50d80c3472bf6862bf38a7743c7a201cbe6736566f97cbc185cbe32c700f3b705d88d57e6d57d38e53482de17274fbb2d1e01aecc2d21014e2edfcf95d905f513d214c17a775732b35470a05250a8f470e5f8ba400f2a29095c390a092281d40beac3b192f96525876a0bedc2a8e8b832c3b0e85861f1b41b9302ba32c7c4006281812286a7dd1d150e57e69d55a7f274eea728e3f293c13244b06a82ccea2c05b832dfa5002d37c6876325f365e5e0821201cbd32e5e055d99f14b106b85c44ccb876325f30c8c0e2fd8091a17035c9969620c0053f3eeae64ae39408c8cd7dd8ef12670e508e49eae902620f315cdf8876325f38cbbe3d7d3ae18c3e3ca2c621e177bda6dc9ec70656ecdec80691c0157661a340898f1b4ebe3423e6868b6e86209b9bb2da45d9bfbe9983901d8e6460a6abceef615125023c3d3eecd4c8f2bf3cd8c1e325a42ccf0b43b038d02aecc33880a98f1d540f4b46ba3660157661bad0588610f5a9e76716430e0ca8c4383012d1723d0f0b44bc38c065c9969a8d1001a6117353ced0240e4e1ca0c001b1e6ad878daada1e5802b730d370eb00187b8f1b49b43e30157e69c191e7073246ed480c095f9860d086c61c3d32e68f3e188c00b8ed76911b0d11444c6f1baaba3b34c37c3c675de079e42944a4ab5c21263d5e2c27a818991f9c53334353266882d1a356c6e6a8037fa26bb173dc81d8fa75d1fb742174ac013f0083cf7145e2091fb83801743e4fe1eb0fa42eecf016117b93f1e5c8c90fb6b40d883dc1f03be1ae4fe16d0ca3d851584c8fd29000443eeaf87ea07b93f04b4c820f7b7c36a88dc1f8f2e8a727f3b322eb690fb439a400b16b9bf036027727f06582191fbd3610a5c8820f7179455c10a790c597e05b83645159a90fb9381c93d45157098c93d45155600c492a2638b2ae48ea50a096c0105520f5b1481a3850c3fde17045045615c0d21b368e083734f4185a31b68b818408c2a04b0f2440f8b1236b854724fd18424773c0178e7f2b0ac73e50821bcebf2af950d99f5accdf96f7cfb8d9c1b356a0c40f36ee822703b43e0767ec0edec80db9987dbb901b733036ee705dcce0ab89d7bdcce09b8330bdd9911703bef703bf3b89d77dcce13b83d1ee07636c0edacc3ed1c743be7703b17e076c6e17606ba9d75dcce396e6709dc1e71dcce3fb733016ee7f176ceb7b3cfed7cc3ed3c80db5900b773cfed6cc3edcc733b07e07696b99d7bb83dbaaecc6dbac9c8d840a41eb45be33b57bb8c8bd4c3757a38906b9424c302af80052a7021d72889a3c08350e0473efef8eb1a256d13f80526f0231f25402383f7462b47ac6106006464140868a8c1a1b1313303beb91905820edb3c8761a82193c330d088c92810b460c497192c242007af8c7bd725039161810adc9e376a5a68563984321303b3dc957cfca2ca3ddc54ee4f4646e6864025774d513121cce905e4380afc38ea045fee9af6709fb9bd07bca2ad6c0212b83d6f70f865e3b1badc3575e172d7b4e553dcf21796c1c6d058b2154c55535465a264e885148b5727fc0282f09593b31c57f3c88c35c9af1b346bed66b5cc23e26122400912452f2bd58b76d50b0e54ab17d54afc0dc29777d58b17365181054d5f2815e5d70da167c3a963431b53582fb4deaa562c031b765d3a220aadd73c950ebc50e5852f3ae69257ad49342dc114e508a52d3425c9af9e82cb86143b905f301d910455e8a9848859bba7228217aabcf02b1d84afbaf254d5326d4ad08e28c2344dd3340da394524a69d530ad0bd6064644d142925a6ba55c300226842b180981054cb5663f59599b82480b986358f3e9ba688b1e3544f812b97e911e779f49e9edb1cb9c615cb515b514cadbaf4e8d522cf4407ff68952ee6cb5dc69d826b1ec5bb5db0776dc96dd6edccd9e5d1a3e9cbea14749114a10048360973a60cfb06f57669be6e91c85239ad82cd3589acd3aace3366b33db988661dfbfef62c7ada4ac5995a0e536cd76588759387c9fd5b4d76aadb4dca65969b59417a7c6acb5d6269124bf4e799b5996d9ce6131e6819c1da0d267dd6d1bc35e2ffaac6a745a6b3bbfb2fe9c147fde8766f75583d4776eb93151fb2a115e47fb90bd36e885fc76e9e757bf5dedf4aba2a8bdfb4c2ff3e6372390b85c3838a2f8af5661a8dd20d434f1db618edefbe321470f9fb69c085f9e0fe53e10254a7e35175e56aa7622801b99de644a6b9aa679b4d3534caf9a224e13423a5f54ab7b206bf827297c7997c915bf7a08769cb2ced9248a1d2c8f86d2240a5580818820340561ec6e5926b216624ba660d282cada3405d315b9d64f8796b38f4767a10927241d4142055c308dddad7a6a73866db5b3cb1457aaa4eba9c3a24d710e62a6a75894d2a60586248aa4248922050539070f294760db462b0e54c4719d865ebd86bd0e7b7debc86efbd617c9b2fb2a92e5acab41341d341ca4e2202c1cb063580cb64e62143c358f3d9d40b07940f0fb9ae7fb3caf793cafeb9aa7eb38ae79386edb9a67dbac6d1e6b9bc7f2685a96354f966158f36058df64afd5d2e6f94e3f9bc7e36e7968df503a9b677a77f64dd63754f60d9df22a52b7cdc33fb464efd672c71e84db2c6abbe5501c26e28561188661185a7b4ff73524d377f70544a638c8066edbb66d28d4c6a15028d4c66dddf5b31f460ac3300cc3303c9d408628140a8542a1c2300ce9e9cd5e43f23deccba1293ecd18473a9a2048d83d9dfebe63180dafd2615372f8ced29cd139b97bde766c37fbef2584e8f61235c9fde59053b2ddba13a91bfea1256f14079b89d46720883df620f6b4ab5d67ffce62229b15a13c4ae5a22ef6cea7a2dc7d13e21786e93bdafdd4bd9bdea78328d7bb64281de661efbacd039966465d862963ea411c69a31044630a376d514a84665957bbe1a039eab977dcbd0c10657a6b33fc438ba559ea767b766b5f94a6408c1482944aa552a9542a952a954aa552a9d48fb8c6d43d90c2216d49954aa552a9543fe21a555b28a4993e29a57c7f409dbb6d5edcbd1751931c4437c83c0b872dd30bd1f20f94285f21dc2ea764fae1e0b2036853a64c09030e1b7e59a4d4e78774f431853dd04c63120b875cb352177090e5ed174b594a89012d6727caf3c301cc19ce302b87ecf4990e3fc85c2f44cb19c59e54992a35e830d94c197c678e3b91ed2f2032f8dd12e9291949e52ff0dc3bf0725b7c180672e7301083dc7610bc2fece07d2886023111fa1d7ac43e1c20f6d309c33cfc7d860f77a07010a80f118d28ec5d9f751241fcda91c1dbd3e927ac9b64300891edafef3fd08cc401d43b733b50a80b4134a2b010a9871813a1f788c829b98a2364d91afe95a8a754f051cb88c221405d88300cc3300cc3108542a15028d48fb846d43d80c2216dcd300cc3300c7fc4358638b422a43b73ce09ce2e041289e769ed042f6864fc256691026d0303da4676159817944c0ceb7d1f3f9ae754f3196fbd3f334a629af66d1b0c14a47b9fa9ddbf139384afe6e2bb2e67ddef3017e9fee5b6ae511258e3628d1ff948e333ae5152872f03ffc8c799c75ca4a38fadd75ca3242b9e46fc918f33b8fc5b44fb75c145b61c8601fc766d9601d6a071d40964fcb7fb76b52c030fa12d998bd47a87676ecf1b1a0632775acffe63eaa09ebd75c3c8ae17b0560b0fa12df10ecd56f6194675c8143d1c4269392194d6d2dc651c076edbcb8ad3ecbd45b40f6584d06a9ff5f1c5c4645f77edeb0f07f6e19039b86d208eee1a9885bb1d467e38640e8231a8cb097a27103caa2b456029a50cb4427bb285c115f95657e64f7e38b695a45e4b91212db7593899571ecc07838552d6aebcc75d560b6bf5ce5d8643e6daed8ce2503131f7993666d3de8591e587343305164f727f4858a3026ac3c28aac21dd18ef322e9c82cab72258ee33b3eeb86ddb4299235a40cffb50dfb61dad3e73e5d81243951833ef420f5f39ce90814ab5e0772a0f2573b7c75c20a6988560d478dc8c4605d4bd72acb940d056769afb0d41c1cab7bddc77a92e86b75d8f25e6cb21738c772aef7489f44df6956f48df646f3921860cfbc409e66e7fb940a8a8e021458c1072b755b619de8605135965bbacb3b05c99592df8cb2133cb3b176fbbe1637c3886ac1471a1f972c8bcf2aeb9cd7620056256b01d42db0532c51f7d937d061684406457195224f5a332a0209617cf637d3beb85e5e23263b90bd2742d33cfdc1ef1ed31465d79c9a21e53f7e565151438593e3bf367571f8e15c86d2b9f0f161f2ef6fb34cb6d9b64610253eedc31645350c343425ca4b5c80ef02133837d608df7bd00497e49137444acc9f384a6138a27b39a651acdc2dbd88783b336b01f13942a9050a4431561a8dde994e258b815efe48228f965a3080b2c8ed00226412d40aa2e40d28442f5e4cd06a0c58ce3388e8322a90465b697524d7616ab9b05b7efd2d971d672d6a2ec59271668cffa6cb769dbf65dfb770b1434c5ec9b0f11aa8042c18fe3388ee3be5d8e66d409fc3ebbc5269bd80b5eeb4e53e84f07cdb53b8137f74d96bd450a952b47d505a2adeca9bb83b6b2cbcf870856e59d4a154d647b69965f6e2a888842d6be1c5d85dca1b66f7ef2035f4419e8cb31732bb178f6524ef45027f00bbdefa35de7626956b93d56edfbe8ecba8f66ca945f3d053be7e6cdcb85942714089e4ea8d3c9cb49a7d76831eb70f5826a9d7ebdf6524e02f8002d41f16e7891587e6239015aa7032d663a4000751d90380062eac82624132368eebe4bb39d3adbbf0fecc0203ad873ff30fae1f8386e0575fa40ee6167b10fc767b5bac2711cd77520e6bccfda6db3a8d307721cc7711cc7711ccb954a662b7b27514b082bf6811225e5776d9779dfb5ef2facb9cb6ab40e0fe2d459c014b3c6b1d76ecdd7bb3577dfd540d409a45d065a478ea0874c1d7934c54c22914846d034a79e758ba967aa67aa7f2b5836e99b4c264141c1ae5c0a3ee4a175241148a60fba2393d0bb724944eb782167cf8600312ff540f0d34e5b58395db9c4143d2c9348254b487d57fbe77da90c4ab90b4a2c1ee1bd0b85f7be87e043fcf0de5f218b87f7ef49dc87c27b58e83b8887bc7f38f4c29c85b0476efc0ebeb2b89fb6ea89c6f0b238ec8350780f0f85b45589c6f7080621a78c491c9e7d63bfb02a6daf3b7035a161895692fb6ac92f54e6b473df7a671edd364f77ae489683cc572be5b09100042979fbdcbefd5524eb70a284f2892872fda69dbc1bbefbf71eb9ee7b8ff01f3662c4e3be83b8694bbe47162739cce2111e7c8ff020369264c4881ee0432c91d0563d884f5bf33d4eaac94f2589701e8576151e1dd117cea703cc128cbea98f59124e3a2f97eba7039dd247383b6835b959d23a8370b9c3ac1cba6bd7d1e12c73f835ff83b69dbbdb278e0d2b3d31451d5a964ffaa67e5e2ccfa3a227e88e1deba5927cd23c5aae97452f5984c4089924d7375d62462122ccf0d014ab58af72040645d20285ec2708e827a8d63a2bad35abb36dc8548cc0cb2d850e5a905fed248a13356caab5d65ae79c73ce39e704aad507a8e27c4ca19de2ccf9c97985d55a252596dc4b544041a909e342a74416842f9a9c14810a3c50a29282706a35cb5eb3ac52ade7a747abb5d65a6bd5324ce585248ac014250b2665f80cabf5263683052a6900235c4d71aae457731576a6396032ad27caf5062884f206a6509e8a393d3d3f3d3e383f3d3f3d343fb37f7a7c7a7c7a7ee8ecf9712109e72715214dd602480b2d1c30757a7a7a8a10444f0fb60295dc4b54206972e28326273e403f3e4073ce39e794724a2a65954a3f800861526aca09cac9f15152b25628bd5a290b29817e82e69c73ce29817e82e8fc09f2c9f911f404c8b5e3c9132054247d3138d24433715c52bae47b6cea33978feb72d219d2d965d7c7d5e3922e9f29a974f9c81cd1f52ce4a4227cb932b5f1c9a2c7e6278b2c286d572af752116890ab93298b706acfcffccfbc41f3af76320f34451af467aff5b3d65a6bad73ce5ae79c13c814e9a30c993aaf76520488a1a9f39258c815e1abda44e16207e5e2c7121542a832c0e9f9f9097202e40afa0972621314f403e404e827a8d29f209f1c573f79b515289df9d556a880b4a1a58d79fa974d7605ed88e2fa71e2a408443809c5905fed249b828d6bc7a762977fd58abdfe27e7f23e1748ca4c66a7545249e5059a22bdac3407995c7d1a87ac3e40b807e3f850fa3175800861529a732afd4c1d20fa201aa5fa748bbe69f7967b890a2872c54f3c9103da447772666be6d44083509e4ec144965b0a2854802101401898f44113ac9837602288237c10050998204a41156068220a4af8c209162cb0718515b658f204282c5002510e6030022bb6d0228825444939618913453041c1020dc626e4a00627d081133c504209511421b0020eb0e8a288055890d244144b2862a2044c4f2021ca8747e048810c4bc0200462a841113c04c1648215dce003433861ce9b01397db0215f64956de81b99cd39b10f35007d2367005a949f5f569fcd895557dfc849a79497a73b338270c4122a5c30061e1c511c84010517bc78d2832d8cf20a5e30297af282112021490eba60833208f1052ea68cf24d23595091ace45e22c20c686e29769082fcca691aa2698818b99786c0045718a5525969cd04c02aad35579c6bc52af5a918f66cc55c3f53aca712fbd0cb79a0a983ad807c7e5aa9522a7d8070cf14a9085be90710215387a9befa7418bec225224021531ca50b2a71a8d8fd61fa6063bec82aeff40d2542a748c9724a2642a74cc912fba0bd88cd37fa66beabf846e38065792bb3ced8fd61ce2abb8239324b5cbb33965f39d9956d5c53942fec14e760d85f39193bc5b0105b6118ee8942f660393d1447ac79f615425347e6746b7ee6d89c55eea51f4891297e85399ad44430bdba6d9d56b55f0b67cb72cfde53a74eb15ed6532d5b4fdb9e5d95eb69bdf6752fdf7a82a4bf421fed54bb210d4d94d21d7a349a97679a477434808115f54d7fce9f66b0408bfa664e1d30b936e99b29a70930d9042b6a1e9a84fcaa4d34911be72ec2da04264b5c69d842286172ee22a4472b7932cd682194af4db0a22f388079016b324469f082cabee18850b4993bae1c2861bd2a87e10d4d84af9c1d9b2932412795147c11e59cbe99a7776699336d9041615ba2598145a7a4c40aadc31fa0a025254b5db8baccbda48449ee722f2949227bb9979444915f22d3096cb05841a701254e29d3d7d08253cafda61b60ca9a64faab206b92fb9f0e702a865f5e2c8e4f11be6cb0204153b6993aaf1a353e5f46104e99676e9af981ae693a53791dfd7274ed0a2dd5688a529ad26c778c5ea94352eddfc524b6344555941ee05295f2a1da272f65633f6a400aeb31074cd15a6b5f856461ca455b99901f407ecc1d397e394420cbff002244c33ea07e3d4bece3c79190a9f3924640a6cee9d987482317ddf9d1adec7605bf6c9872e54c8a1ca01220822753eccc852a53ad6cf7b6abf272164e31cb56b00aa7f0eb2ab7b73b9683fb77f9e9a057b964e5803a3deab4dafb0af3abb978d58c7aaab99a7f4969b3bc968348edf57a59a6ddfa225816ca300944f342f57828a9b1d03cc543f443f3444d3ad6c86acce2518fbdc79c98d546e62b66f57baceff166791c7997fce545daeacfcbd444f8036e099c4eb84196e5b87ab6c98439953042f684252594a0441319cbbda40413295a5c51832dbed0021464e0852e884ee00525902085214409c210c67e03e93134a1a088221d0c118512c6453642092ee8c20790306232f6db02f26d8940c5d048c822f7d848c8f28d3384bb1dbbd9b1eef56ab7692a541802a6a3332625ae2eed18ce9962cdd18e69b856ad6a5a4f4eadaeaa6119566badb5d65a5f6bc52a56979454e045a70412ec5c6677ba2b3f1c56d629626f0d958010486c73e19c29f6c85b4cb3d6f64c11bbbd3918e6c26ca665d87b300cc3300cc3b00ccbb02b744db365d8e9d06c61ef23681909f034fa761d28b6a1bec1ded57045f89a46598ace349a3a47c78832ed1e7ed9305cad7e511c6a1e3063efa617b3249cb9ebaabd8ef983ccda3fe93df319d237d87de88e1db1030d691e2d63b7985d1d2763328cbec1de7d9b4753c430179969cf82641fca241269238a103332c21ec3b095b5525e8904cbb24b4c66364332772496467892608ad85bca6b1681cd226611d28679ec5484466019966559964924ddc28e61198665f8157e6050fa01648a4aabb92486dd5e3f934c2553e784ba977159b530c9e2e5af69c4ed7115b324c41eb324cc668e4fef4386780657aa7224c3905296d09e8862e2207515251ce4fab9a4752492d94cb25192ea473edebcd2bc7e2ed13c2b97f1eabdb2c82635f8e6af79b444ae46349159a8344d0952e90b02f879d76e912cabde498fe6d278cdb5f9cc6d1ddf1a5fb9da279277913066cdcf9c68545da41997317321fc199a63ecc9a8b98c138d98358f4f341e7d9c81c5e30b891f9ab9f88985661c1fe321fc192752a930d28cd7d49c68a4a1719a0bd138cde7696c5e83876a6ef3219ad338d1882f6b7e86138d33ade30bb58e3f8ff150d2c442353e031ec2aff1a199b74e348af7e61a1d7d9c712953946153e3d2b0ad5bbf72b52cde19771611c1642e41d284eec8a6244bd8ac65d5ed2c9bc8f052589240054b23a5d028579a9ad70fa9a19939fecbe69acbd22ed25c96867d10a279cd6bf0d08a0687e63de2bf441aed3dcefcb50a8f67be7fe6c61cdffbfe40eddaa62df95f991b766b3e861ee6764f5ca728956418539422a314dda9648af52e5736512497b36e53ee22c5f87671cb3dfad8f2550b6e7af43106964c4c96b496c1dbf9b3b91b5d6e8f1d43c37309a515516aaa0821fb084152ca9f29ae40993adc549a3a53cbaa161d2d1e01861b597a6cb93dc2dc1eb5517e3ac01cd437558b5912da9cbacb7bb4fce5a9bb9ce526bdfbc42c1c6612963251ee1eb4a35e86512f9beae593fa956bb47a8cabae11eb2c87b946aaaf787289d55d9d7593b6b3dc231f61be7255f7e823cc3b23a638b398629d5ae079c514ebbf7bd781227cc9a62b5a473671a2c5fa9984eea85e2f9fd01dfcfab9d43ce1eb67135a59c0d7cf24a60eea5532d15613ddb9af32af471f557fcd25725d527a22ff749f2cbb1aac085fb2285f36350f1199a9d03c2ab78b64f9243f918e8eb4824f1769e63567b92bef41f315961b89390d7e12f81e2ca7390d36b27296f7588359f3aaf778f47106d35cf51e3457cddc48ea34ef3173d555d848cb67de63374f278c34f3bbf21e317ecc7bdcaf60232bbf8fc1469284567e6f24e6f83dca5cd6bc8cf7f8cb9a98c5e3af790f99cbc0465a2ef31a6c2449a8e5323792fadf23cd3dfa4873d5353af291e6471f67661220cbbd32d8fe366999e6cedc9984b6eaa5134d9ea03bb38964a23b5309df1eefedf1b74799db234a934c4cb99e45e61a88083f2c9960a984be5e1ed19d98d7cba296942cba96b6ea636ed3d45b58f362cc654dec8390ea2b5fc1432b158eea3db6fc25aa70927d8fd62869ca03a13baad7fba03ba9d70fa9d9bee5ca26da7a22a14c236612534c72535746a1adfa953b8b68ab1ea6fee5ce26b455afba4deb596ed316eb32c9f52eb7692bc60d62c80a4f1dadd35d5fa968b16a99bbdde36a64b93daedc1e55b7c76db4782ef54db5d9c7259b5c2aa2d34481a19fd1f6714db16708217cb9b087452af6bd7b07dfc33b887b7c07ff1d9c180747dac01d47dca8fc0e30bfdd8543e422ec2504a129f7129cc8a2ab6f6903c3afd99f4256f22281d8355bf47473d9ccdd9636aafde69a224d0ab567363d33c32e1f17e683613eaebe3dae79978fec76f934c699e2ccc2aee67401c10679d6fb794d5c0b3a7a6bedc67def4b8efba6b5567bc67df3b1c336b17868cf2ea461234915c3421c16b191ba35cdceeb3aef1a0eedf6ec46be6befedd985b667f8bb867fba63443bf7fe777de896dd5e28bb15b5732b1c6c2449de883ddd31629f5dc83ec3120b6dd770485bb3db6edbcb92d80721fb6d685a8b93e47bcca2d4a9858122c91588293e31451c6d73bdfc42f368afefa695604ca529ce287d534f8da658ef33e911a64553ac3a50d0a28cc9a2790446f380b99e8649c8cadfc1cfbf6811dd69307610852aac308621ba1065ac57698194a9c3bdd6cfa34ea42d7910b3b4a10fb3344d231a59f2e189c6efb224e81df4b40b36f8cf7effb076ef4423a761ed43a2878742a229c1ee1bf9cdaeebfe099e8e3a0985ffc20f7be7b010f8fdbb3e68ab1e7577dcd3e9df392ce43dc443a87ba71f8b07087add245614f8f9fe0e5ee83bf8590f0fe1d056fd879bb666f7d39dd3673deafa049872a8a46b1a277b20640ad10082001040005316002018100e068322a1400e4589acce0e1480137f9a4a5e3c9709e3418e433108a230631021801800003006c0d0c8ccd44a002c65dd041ea83b2308c735f364618eb383e89ce1e02d893be5d87992424f33ec1546d066acc7fdc730d63f792b07f19e486d8f8975b7da02038610a81a703bbbb4b4d09a41550ca7b0f45d61668531d8bd72f1185b83291795d18171c4feacb5519f8307d99d8d003b1a63a47f180f481928379017936a5dd81dddca24755933f9f7cc0084083255281776248218ec974ffbbc99f69bd0b24260dc94ae21e62309a1332ac2a8756b0e2d8957cfc7fb4e0b6e3bd4baa95a77ddec4395a552afb66f7b1d6ce6ba3ae6a93e476eefee046ee93b516f4971ef5bb0eed8e4100f3a2a9469f30b0c0711ff8a482586d9192b6b3101cdc50c8ec2920c2ac8fb7eef6f2a5940491e0fefc1cbf2d753ff08516e6a7b81f112b39980a83a5f10481418d5cdcfef5e34ce826fabba8bfdccbbe20e79d3f1c8a8ae0db05b74b69976ddea87349214b4cdf0887f45342d79998b234b2dec0cc8210d9996d4b6d10fa62502a580c8e7148b259afc9f099669ec19d7d506d137e44a987d455af236bf1bbfec23667169b994bb0b254a228f66422b95ed16658e23ddbf65747592ec2b61895e8ddbaa110410459f827995c8950e025c04175d1ec8ad316ee9b164f9006c81924c91834bc99bd554f0fd5a432d8c76e8ee3091ce99ca0348f15586ecf377c4670c01dec36ca0e8cc0d786db1d34243a1fe854239ad8f5a5d3b32ce656ff466aeac9640081e7b2fb22ba06f3492be069cd984f3e501a26db07f156c8630fe8d9366b6b6debc38add52eee4c3f172765eaeeae385a860b92959483c69beef86170b13402f15219df76f6bc8c8326bd1e6d9fb65a82e05f25e97c2a9691da5408bfa53299f4ba1999765e4e2e3cb339679f2f16587d014a1959249ae3e462072b7148f3ea1b6591de41ee8ebdd282c9ead76c0d6af053ae0a314be355ed18314133fd2af0b9bd4a94fb54b2e9dc7939db1ac95b4fb5106db533859c8699ff9e10dae3d199590877f451dc69411bbbed3b957d8e16f0025d54c1c66b6a36ca200c3c8799ee46c7e337a1101f5e007c49ea6b5d4ccef4d2c51c62bf47e40d00f1be94db968259363f1f7ad6def77808f11a64a888a60c288cf18701aefd8d014e69c8752843a5227b154d27ab9a3a1b70733474562dacc8f76af56b9b15d25f05df375a6d01646adb497dc18c55fe5b5c5f4b4825d1bc0a5b461b7d2a2e2e539cd10d277fe32f3cc81c9fb9e9d77a49d870fa666a1a1c11b43ea520475b3b092a37269c1bfef91159d97c9838e50cf38a56489e7035d48104445702eece41d12e30408be05528da907933717341ccca5af76955d67a67f4077ad30d5250bd5e9583b68b46ec106700ddd5190f8106c5631347a001a02500d225d1db5c4a71f1ad35f8ad939f06d4e6080bd9a8d2bfd92bee95b6e6f20a9299f29dae41256df1544835d85fe6a131c85aae022dd5ccb7a25d026dd393d1a89124a92ba51b560346520a29253fb2c0c224258b1d747a0cc741933ef0d02b3624139907ab89b90baadc0b609364b8ca7c55d7ec80f590948cbb4fe8cccbed92a25ad4f74f520e805b50912847bd324dc882610b25fe772e15e293427e967eac6a27cef7f1f62de1ed22499941e072a50900f6d43dfd210e5c1c91f63593e7c37ecbc03b6b7faeee63ff87d39d44c4c61df86fdde6a71fb2b8e36b150ddfd3d31873fc10e3845c6b4a08c606a8c248a08a67bc3b1995c284665793929aa9ac17deb02a071cbaed4996f12856913475b29072856e168c9dd56f20d2bbcfba1441089afc097deda5e16d4f2cb029338872099b77a099daa446909fbab09f61f9ad0555fc987a7424e669810d633f07ebbf3eaedf83dd92b36588b442786176e45a04ecec797739d0e6e0798c1f825a3d56b2983b590e42d31da286e17ee71324427199f4fe41f938236634ebb96b394398001204a998546eb5eefe6f825a4d5828999c1196889542bc9c30bf1cf224bf5f8a1fc4768f7d6214843d189b918c6e0f7840c5866ef3eadae8317c60afa1fcd82afccee472b2747a2dc4adb666ba92e490c2d50a05823feb90d2e2491c12646bd6579c91162582070123a811078c262839a8603285e2f9d0871218175d13d19c108c9168c6613202f2f52e50545ccfa416c8e27f717b087edcd84ddedca25e4a92e451a1b856f72d15bcf1b0e76a4404017b0fcfbbae4d844e77093b0f807803bd9435bb1346b429e761417f9b21dd4bf916ebebe788684a75190d8ded16b1f6b7ba456455fae21dfc1d355be2ef69db9c3101d9b1a5c29979bb9c7f7e8de125fea325c66ce689555ce6f936f04ed3cc699fd32c432939e4209bc3f3347512c1a7ebcd87e3ef5249fbcd8edcac926425e6a845386f5424ac6426d5b047a62945e4a17a72271fb0f7215e43613840c254a73b974ef3c205eee795ff454085907167e711e8a6dda2fbb9a1b0d6ea24748d8ea0e6c987e730288c81c21f511c0977b4ae550db7915bbf252a7b0de300bc602afc7d5c7a2494dbc39c64486a64a412efedcb37c8f703acf3eb848d5ca42bc13feeb302e5029047bc7a2ba426479c1e1a6fc65fcdf90b8deb9cc199cbdbd98f4c95b861fde76b99eedd482ea3b407acb3dac9c4ca027771729c12ff14699ea8f827dd504bf99e592981916c39b10c7755130f0c5dff71c7420e1a0160d39b7da0b90db76d19315640b40945d4ceb0ecfa8733cf2b18a4d81f20df4bda6411f8cec0c5ef891149aff4327f52dd0d2b44c77932119a38482683cbe195db621e75eca548db2315fc8761643819127b238c5e95957471d9f692e715abf7e66ab77346f1de3c2b28a2224a22695911c1ac251f099519c42ecd6e87136d19d9cc377b0c0a38c3c8d736bd6ebd16f509c4c5e1d6fc12a75ff8a1534a0a717425f53a7161b4700651981349cdfb4383e475bc393e9eedf705b2b5608c261ffeecdd70681b91e146cd890e3d55307e4f48f6fe5de0167cdb49bb87f1a4768838a71a6943e79994f3e6b68f9752194e19c0910e2bd74bbc134abb556a90e12b2abcf962db5f9bca26aaee0233858b52363465525eee825da2dcaaf1ae96b39e6f58d3274f351221e966ec2015ae0cce0341e68efe50037385ce872451ced3bf05dcc647121b5abbb982c51886213acbd1ed18cd8a7b5e64f4246c2e2e63ccaa8a2dcb7e096bf540431547dce602887f3b060d762638e968ab5f294a191e847b16403d7f8abe42e22380f205b1f42aa690dac486aef47090c4ea2e34e82751d970115f7c98e420ac404b2cac3809317f79524286acb16ab6882a7ea00dbfc5b757b98661b20ba6a764636221937d16097eb4907178f532254b19b0df7e981aaa2c364975b579182aaf425f418e9c6a3f9fcb00d7b80186ab3238a61b020cb9937e2a68953007d4a5f249a4fac27669c1742d6ab54c6aadd248462109f7cfd2b6c91f47e9c7dfa04fd644cfd00e0f72cf51440106e3838235d017e33210270c58c6727c1ea419cd7b593aafe7fc224b60d92ce6dbefd4467c14b46445606c6d350d03db69f2ecb133e5e0e75e675249ed783c09bf0f7ec7114c36b6d5010418d07b4c61561078403d05d1172354dbcb54709c2ca970bced56a429def50a3579668743ff8a657509d4d2772a3d2dca74a6f2c090869a09769cf34d6cc9b1f42a2bce795fca00070a600b29d711253f362ac9b491b8bb14c3935851914f9276060fdff20ed1bbe6677655c1e8c25df96149df6cbfa427d108a9cbefa1e0650d56d431d1dcea367df3de3a46e688208054645fa264ffbd5ce4f1e93d324147aeb597e3600988115a6fafdefd3041976ff62248e814edc07e61256251f1a59203abd2f47ca9a305b0a6fbddeb062ed1b48f1f2d688c8782cf6da61065dee82f132fa143f0e499d9825468f0e27aa70c08aefec8fb6eb481166e7de376d16a507820d06545dc62655af9fc2db498522f6a07a33e3200bde0eb94d48ac74b582e5c76891241775aa1b80375d3490ae526ac7fe0d03d4428a6c07f4764507ce14b8da1f00f7763afe0b3f61600eec22b9e75c175efc2d7a9a27401b36faa4026a289014819a61dd847531f95f53d8fd856b4a206db52ec134ad8c7a1872a6dbcde2d8d67631b5ab94331d63f036191402274763449b8b4dd5037d142d838d6207aabbf68546bb9b4d9b42e96311e06627ea809343f6790f6bb2afe5544142b149efb0f1821dc546fca108af61ac02f205206813d6adb1265c6270a78ddfa19fcbf55a84875adb7be3ae07874dc49b386b2fb9c859e6420492709346dc90bc161fa1c5e04aefb4410501427cdfe9f1c1cf530af46cfa7c50d4303bf3f60e57c51efc207dda0dd690f71d30533e8299a1f3fa8d2d9c82eef3b8cb4c9ae130fc21a436b0ecbb02355f16bc250ece3f0d8199f5b5ae1226ac71223c2fb7d24edc80d108027757068e4fc5e4e9c62220ecd0d2365feaafd47568bac33d742a161da93749bb3cc0b8e0dbc6a97876c3412f7774469a3d0067cd91a04c5d935f4f63606b738f854a61ce6308e9f6f0ab4cfb91cff06af9062889b12e8481705c4b1309036e88064188a9235571760d3d9100a2e7496290d2de215909a59d915c80a52d37bb6f5ddb3d206e7bb42d07673559ddd5a8e02c5f955bd035e4eea3d6b6e61b8a9376d3db6d6218d4e8a0c9df1498c0a0bfbf26171c4cfa01de43143549f4865b05aa479ca3a2537390dd465d8fe6a4507c57e08f6ec09dda52460097b008d94e0e5604d48f1ad4a8803d4ff81ab2e560efb95d95c3a5e717bed480591c335a4fbc01e68027c25bc1b80cfe2956e3ccbb8053862e647e8eca6e9048799449bcb356d9538f1e3808d0e4a9d7df6e55a2c6d573e7c68e95968b01e4ff93b100b96745b344610a1d3f1a33e0ea402ff2484a8e42ec66f014502343b4ecd7ea91309dce5d36d1cf00954e3b21218884cefb38e165f8792cf589c8c9eacc9eec721e5f4423506a02f99ea9f3382f2c57799cef7d715270e568276a0f968b6b82b1871acd05a4ef5f4a94598811083bb26b1c7766f08530c496e90635dd045d9b46083636e9d714033bae491840638e5a9f814bb82a807d403daf6939c810d350845e2dd7d3dcdac3a8881af1b9b55e6eb3bbfb941be4fef7b02488a4f21c40179eabcdafcb9d60dcb1492385970f03a03cdf2761a94618e81c633188c6d2c33f88ee94087d874d005c41d3f969747767b0d214c05cf96ab141c2f8fa6e6440f1e0b0c1e4652bde956f88bebc699ded1bc98c03ca9e259b5baf92d96a82557880863928e9292b8c564f586296094396c2f1696c92cf317e9a6171bed72d258eb9a447d636ecd532580693ab721513a37e6ef3a13322e32c88166cbddd36623095f85ff2baa6dc22b3028211b112069323a29a011fada08194fb2bd78fa5be631afc50b8ab33df24796d3a778ce1e9ec99651c515ba2714c16d61b79a2d7cecbf7a7fa4b8ddd243fcad7bbec56ef897308ad3054459ab906adaddcf3696746a52851ace3081c3b136cb7ed7e54708b867a1f72d32b87507a70e1010a4039305b3a196b74a5a079a13af8c7fc2fe48f848fc0464a045c982ea50fcd0248b85087419d6f14bcffbe02c5815612fcd2cf1e586312c33681b2f18576e6b7a28015daf6d5acfa8e44775c97464a633c779f28f9e0fc135d0d15ba63bfa65f1b72f526a690c87d9a1ba47c9f905255b6a022c4268a0ff887979aa2279516d6b7d03a30796d2c89b1d9e8df9b914417932b170499566cb98f3353ea723ebe69b8453e94b802980e2ad5dfe543b24b11d8515e441991b28aa02f6c87ebc52d520709e8cde6ac8b5b5dc70f44a9a9b969488f45a8d3459e4aee655c6cd96a5c023453b24a15e73e85455d1681a6d2ebef04149a6e65000592ef8f06c3f0f1b8a3be05f12653348b44a49f925cb44825bc318e3c9076e544347747899eb2aa23ee7a58b191ad73f03a9e3f25f61190d1746c658d59acd44dc6ef32926f4902290589ca18867c15c217df504d750028638aac618fc8e629571908804f7eba38bf53b5ff21f8d5f1743cfae96127a4d8d249c54811827671d0e00121b11d199b328c53c822169b80d2a3b490579063dab849c70b28b50d8a53cb9185ad547828fcf146e27ec1b3e999f39c8134d67287f930b37f976080379d5c88f3c1bf84465b569013472f600d8ffa9c3dd69923d192fcfd1053e59e7b590cf08a3256f01e4e5e9070fdb329f5b6618c53841e4ce87b15120b1cea3eb7c67668f74e5c96a04d44c5b74b9f9edc434b8dc1d714ba6d358e7ff48a950c1332123e5b2e846571a2faa6d42c3a8edd9609897a04e88d4a19640b746c155e77a332996a08888008b06ad988870fca59fc1802247b25c09b20ffc0fdbce4b13fb548a6c14a68a590be0bc606eecaeeb7bd3cf989fe8d38a5d769b40e8b1ce201c23f17f057c01ea6cb747e2c655d2ae7fe891403d71a68124da323785c4a2a321f9db972200dc5890dfc566b4e83455635abe4f13823f71c80e45dd091aad9341dd899e959c74b9f6d3d3263c251ff92827b6ee24c14ebee653331368d961f0af052183b1354910b7d31ffb76d2897569cab6921599fbc54bc980bb3c7f8420fa4541726621b144660611df8b828e8ced6540c487b0275699e37054c52b3f12be37ee2a825b36f5627c0aa99958a63b7073c49d5da1e0572127c3abd97003e8864465a051fdabb8c38254751bed478073192bde038597b32582874d5aa5935831e1e8a2b561586ca61da547e9f1f35194a7414ad90d34bba681d5e671e1c066fa034a8957d40398b99759657fe67a53c2370fe86cd23448c81a98dc1192a7ea06a9483d9681de3f5a43a10e68307a0b77588fc140aef301c59babf091e21708db785fed0d99363ff69dd4aad16e4494d5696a2eab7910ec70546f75e548990bd769f725339b81e2eb408a0b166601a4f302e25e82db5a831070484e8e9b35df61587561439f8949feb5809ada43b0bf5622052d8068be5cdd20fe0e052f08dc2a37f6a25701ee978364547223b95a87594ba341913162ec5682f874153f43ee93bcdfd5dff376323944de596b6c67cb2c01675c53f2cdf89529af70fa52e171f80b34c7b138f210ff262feebed9a356b55bed9f83d5ce8ad2478345ca8b761bb392d02765f82494406d4d2060ed066072c04f55cac673935c500c49c49bb1ae4423fd9425df2f36105474b7a4c862cfad34246cd299987cab93e61767a2510636ba9e4f59d249bc0dac773f37b04fc14f244e0bd4f30cf314ebbf8e5768ed92c1c7b9e2e42288446e3791bdf2c1fc031a0e3e4ed5b3001fb2211c0f02c399087878eb0c4bbc52bf770034684c002c58caaf75af70564a8b7988299cff2eee35607647fe4d1f087dccd82b2b003f3b38c20ebd11f8f4be5691c9282a2e4a762385a3482b33195d35de78f42bd8c9b2851c5f05e67f305053454f762758727de1cb3f610540efda703328e0013139fb55a01d2912b2bac3ec85b9edddebccc5e5c81d1244ca3d0a0f303988efc28d5a045069ada140ef6065fce485c3a57b2a7ef624b91493ce65b77bb83f1df79e6922541ff6931fb8dccc8c52778b73e2c556829caa5ef396a273670ec86ecf0141aa49eb2eba6338cf56ce53bbc59cdc81dccea8d1236d39696bf8cd781484a7e325cb39b60f4fd81734a3680621aec0f3ec25c337bb34a31ed516c7fc437edd92ae9c2d67ae9cf25fc99f251d7450d7c0d283e9828427d0bdfafa64a8d2bf094907253b64132b77a4e9cda3dadf089e70675da35bff0757578f3349b748d6fb8b61b36ee3e662ab98cbd12792d623f444d9a2e04aad858288b8fdb6527b26e55a2483bfe7fbb0b37f62a83699eedf5703dfac6d0821d878878c2efff78ca4f35aa23a3d5f39ef3ba80fffe756d1b784b667e2a2d72312f5f885a1027b45316902844a45dee201dcdf64285658baa847a25751f3bbb465de7c817064369e36629a9e0203d2bf92e937c05487357c07e5de84dfd50140f3c97e1ab891d33016a6d3ab675f30283498ec5be96e3b73d408c25de19d136b95736b565980081f0b94309f0913707e2339f0148be8634f7dfbb4bdeebb3a08dd88adb915bd26eccde393ef53a758f45424fa172656ca40445f4598fa52f22ad76259dc60b84ae6ddeeee3a3a391e588f8fa7977d702b9dc6e84377b38de729c81a52703db177b5233795fe4047c6cbf0e472641f5a3af955a4362c44226fee3a94b34d9865d1a06d68f0962216d4551759bdc2a3727a50451e87e81fb624cc2792ba6adf222f07cad9e327a549fd03986a069aa16b10cb6cf2d635a137259460f17730f1b8d495c9af34dfc0c00841fd1fc12179a8c3788782ef19b2b0a08dd84b673dabc8d887d9dc0bf1f812a9d979884ae836640ebbf5bf286142555d31ef225cbd0f7ee8007575022a707f6d5e509367d62f1ea34d92a65075dbfb3368705d09d34c9063b9519afa331f02c00ebd6ceda9ed1c92ec490988d26508fc13153f3a9084a593c55ca5135032cebed1beabd130572bb286d33538a0d748dc0a44ed023cf5cb8798f33353f670e72dd6f415c830fadedfd91418180ce0fb931996901cfbfc409192ffd888e78ba20e3efdf681e4399bf5d86fc0fd34be9e06a478f7dc4d3afa58e1ad463bccde5603e992ac5e08161679645f060038188514b73419d8893d31265a3ed0d2499fb5328902b6c2406562a43dc552ec020854e3843303c7299fd70c543b9eedf779452bd89ec89f38e9dfe41fc2b47b1e1108e32a002556523f083362491e47324087422c0c0ae3b90e81d2f683e0e08197117ea7dd5ec9e90e2a1504c9771867f8fdfbaf222162d38ba60ee7f282458cdad3f56e8f9c482629167e64bb4113e970a8568fd1122911d4960c3d08d91216420f72a0348942c986a7c4d24b35f053a53457708854bb95cd10348c5a529a2d53df38dd440a08d57b52c2e67de1aef2d231c0d1fe9bc0d0143b88540a3d3251283e59f3298815d2e1588a90335568a50f85cb51e5c95856702a609fbd417aa311db7b5e50b0d8c8387f4828af2f7d7c92670629e808989a1db3ea050626536b4efa83572dc5c21bdf57fd58a509f845b3193fc9a7756b0816c9ca0422cd58d4050eaee09260f66d46923ebaf037433da44d6a5566ab849fb7c225157bd487aabab056c972cdf787b0c6f6707bc74e66d7e60c0140f7f2b164fb3269bd7b798337a1343c533f0231ae3a105e587b65541831456bc95b5710798ba23f069a25ac08ba7a998312262a70ccccdbe0bb3076ca7d6ac58571aa182e6228769102d8aa1bc2814718130a62648c68bf8a1bf308fa8664fc490eca53742cad34fd8b017b8d0920821ffc94cafae3493158046113810c058058d117c8ccd918d0bd180416fb7f3836ab92282de3f9014847bc53c35e08ace2973d45ed5f219cb8297d2922540090593b3f1165365a47a61505a939e88da5e8ede378ad366fc5906ea395fb72edbdb5315c543f820002ec4016d45fbe48dd6e0f954b408ce48d432799041878b9c0cc0b84f2882c2a720d502b0bedb8310b0bbb8c4c5111f93a299cd433c74945232ca5fc6d666146429cd938487cb6f662d037c8fce78d229be7a0b7de41b2c87e69922614934fbe2841e837691d1198cac4be85e47a27f514746f4387087d9be411b32493a1046e876a57db8a9f4ba7bf2a21b321943a07a000eca90d5ad6e4bd905d428690648596499ac91174e24ced6f4e03948a9a0cf20dea612e664e9c6c7300d4cc680951f3af1adf087b1f0badd715c674e33b90cb48d57565a3626aa905992b7de543d1fbc2d700d519f00374cb9f24f9bc465fbc2f125e4a143f1b5462b934ba3b4eb4c71897eb57990bc4348936069f643bb993c495eb4464e9ce4d307d80b43c3544b6863f384adab62b5a0ce23fe7316934b42e39c7028a469bf09cbe4942ebeecc0e70f8783e85b062681dae7656622e8a415530a57edcbc90610cb8ba51f6c00925972e75087362a78243382a90ceb91ac0defb19bcf033f7404d08cde7638d749877c0dc6e8123c8256953c5b93a083ac074664a3aef32cffc780b154f638b3e4522b05c36e5e3894f20e9b4a8f42f1d95640501cc6a6d18b02f88fb422fdcca874792b3e990289b870c9acdc359a6cd835a531ec32e9ca9a07d6ea8244ba30e32c41978fd11709be308d18efbe258290d1bd1bec064569bd43c233e22f3e7c652c4e38adefa9ef6c3462fea67d40aa19d7c381416d7efc6c68810c291143a4ff17f98c2a88bb64fc881921a3aa982f2048b4adf6bf689114680240665c0b44d9cec6ff97c8f2dfff50cede76026ebd3fde72e46dee52ef645fee00bd00aa239bb6586b6641d44376190b6df1d4e8d324f6bb427e4a7d1a07ac90ded3e4f9d5e4656ee8972560f8c3cd59abdc5d089686dc5124ff3eb58119320642bf7eb3858fdb8906fe222f8190f8c0c1a3605f8892c60e454d79624e7bc0dffcda84b20a3fe0ee56936f2deca16e7bcd081bf3c9e8cd35f54ac4b754d3dd2c8d521fe49611340115b42a3665a4e8d246c4d937918cce40298712df09077432fac8a6b747c89798b0e3fea5efc368f46b43d83413b019c62cb8319c8b4f56d7a0bf3ffa7cebd6202b1da2ca6bdc296a1dcd758f841ce58a04d76049362542e4d21b83093823adb341df7c13ea334cb0177c591a81fb0b0219bc108bfcdf3163fb14834f19c597151f1fc749e17dbe2a2ba38232cce656c4dabc50505c6c1ce8ecbc772eaccb8491f80054bce0ec627de084c7c1d8eed2e027d60b715c567ea37a064a1a219d2af8f55fe6a7664cedc11c25ca8c13690f6d4a62593163cc25de10b3b32a5150e0ee0c628b07649a820eab595003a58ba4ec0c1f73aa4278c79fff99839a59e96e7e6d2f6bb9be2ba2d72075693a99a59555b488778777f5855c8268d4f783155b31224054bef0b3f1c0bcedd00a2caeff16995915465b3d22ce318c367e1ec185ea7faca9ca9326a95999fd967a98a53dc60b8f3be27e2128a947abc3fe1b1b29eae227c18f70c6394290678531a26b0e7328e5292dc471906fba4e2bbbad6e9d831efb5e91968084822334e0e28c63cbd007d66846c72cb6b1d70d4d3e9e69ee70acc37cf0829c5f22f08060145b81c811dad918d3ed001eade417ffbc88f3a9695c068736b6425fdfbcce410e4482c3450945ff9923e5af661ddd249cebfc76426d95e2cc22e3453f14d88954172c731a8347db10cf08f077d81a5a0301224c09f060945b223172c61be93a7a8f503c1ebab3085260e37cf7ab574f821b058b03cd90372bdff837e9b016d9040a037ca1a0d3b51c9a4683e09bb28682b2e2acaf865e413c570aa5d70bef9358f7ee455418111cda2bf3ce15f4037420942d6c0fea3ee610149e426a43c421356430d280d190b6fcf101e1af650aa84ce49d108b6e31a7160bf43f680853460904aff046c9712c642646055e85dbc2ee9099f48db546a600e8cfea1d8f95e3f15c35652f41e261aafd41053abe55f96a2ff901aaa2f733be85eff895ac15c8dbe23f08abad1e3d2b1c535c4d9edc06956ba63aff0533d1f6347927738837d70a83c713b82fd9749ff990d0e72dbbb2f0817bf6dd5019a6daea339ab585aa4b666965f4ca29d416d685278d1d653edf9cf38d2be134c4d5eb3692c1caa167c3f3a591084ac4d352f1c602ec2351b6184953b255b9049ce7bc6bdd44355e042ab8952d503896c0011a3f61012a7b83fbfcc2dc597db5c60b5c3702dca0a4f5d52ab6474e559adf0e1cdd6f74cffc4ff4808432b8868f40c7bb0319b6e622da1d67ddcfee8f88a5c250ce6595eb9aa15e46d8af82c0a7d12ccb4961f71683aad2a1ab1aa5a09e6a3710b0a555870acb2c251cd292bd2ecb35b46e10515996d0783fabb82db59ed2fc45a5f69820087e5d9b2c1d39644121735ebc166ebb09ff7719eec1827a6bf518d62930965c4a66274b79c59624b14d54049a2e5a21c07c777ee968c2d298f0f2dabc43657bf0f4125b610d52e3e5e503156f2875789ed8ee4035b832c9203f78681445895853bf7ba3a506f8605081148d4b0fe803d87ffd669f877cff51036da7273d1ad6df22ea8d13a4408bc20098b7615eeeb968688aa7922f3921367d2288a47db71f694666f361ff40023931d40ab835eaefe46fef5180c9ce155ce39e4aada4115ce7ed23591706b159887b040d60228c0ef718be24af9417ab8a91df82a15083196f93f3a0a9da0159abd7e6b7c56479c9ba0bef692465fdce925124da45e67fe5d19a2860b23478b9b476de912089fceb0b5d39f9c68d85c15fb1b36829801be101156eaef7b2eb1f9ec48ed078475cb0ab92852a0e1f70fd2da22959d571ef4094ed29c319a2833aa1101bd03292d827d62ac80288c2777b9ec3341ed1f001f9c0901aed5ade0629834bfa060d2536c1d84c77ec49fb6517925a8aac57e793cd3b30412e3f38715907d5644ca1a7d617e702a5ff7082a6ac3970938d02c5c3b141ac92a2aee7a7abb4197be4264193042ce5c541391223af08adedcd08463d6b5f39b1065b0dd167d24b62128c966f5fb74b01709d647893bf128116c20a2c077da435317a0359d4127a730c1e93e14ebe5cb9076be301c6ab90cdd6c0a91c8124e385868333884c160734a63944a9e6dc64b7fe2eb71fced92dc9c990809bb052756a66af59248c75a61b28c85bc7e90e78457135a53336271188030d150a239e67e74b3be160a901a73dc564d6ad6146459acbc05e6a13bac9a577347e35fbd484ba3d49805b4e4a1e67b2c897159cd484fefaafd1d136d8e4c9d1ef2c5f0178e9e4ba2e54f0f801cef0a8659ed8c4a269ac3180db58b949249cc523340283ab083458cea6a050ff2c8bd7b5a16507e2fc0d8ed868bb0d8417aea05f65899c92881b3f22a8714e9f317d0aafc01f7d0147c76452c6240fb55de87f147997f64d32809edef7a24eb9b5017d941d8f57216c4d7449800672b2f63fd7f6f2d8aaab0edac40e05a3ce7e2bd6bef3d6cf5c12a6c32c067cd20e7457d884bee1fc63615bf7653c12d1387ae02763146d0a953f71c7bc0bee12ff9f308ae1aa101cbb1a36016ac927811c8be7a7a93ae6866a426d0942ae66a99c023db1b806d424866ad91881bfe29f016701f536f3b2955fc35be3dde5a9e2f0fdb3402cdd7795b0fd09bd2e5b13f24c9674173dd77fc86dc233ff0e97de3e603d2192db3dbc577e03363111c1ea3c08b5147ac37da7ab8d33f3401abc72a77bed5cd48f95322290c4038bac2ecf1afa143b918aa294324d9396e2cb89d13df16474cbb40a23b8eeac420f9e1e23ebe9ba4ca083dc3427099b266a77cac8d21497b5b81a0495aedaab8708c0dde96a0b9ca2dd539320ee96d7fedaba23acc805f12db1fad9083906fb8e2cd0a081bed71fa9d285fcb8d599c5e82a9554fd366936f1036042fab798d2bb2decaf863b8d23672d6802b31da34e502796d153a183b40bededf2de388c844ac415236e01100a98608f0cda0aebecfd68b33841716105b120729df3d0109fefd8ef4d26311b1df4f63fb37927bd0dd191494400c4cc56d18d475a1f201a4e1f6a6c80b0c411cc172e3005732305fc460d333d680d1ea43416aa56d8c13c8edd613af0caa9946fdbec410361ca699faca9a1768ab65ed021d905cdd8f284a1dafba0095e32a100946fcba3903699c1f3b1010e327726aa5971af683ee49b089bee4c5a6a0f786ab52bd8a3b29d559e78a82463af18ada2ac1a29d1fe1d670d476d1473c4404e31bf412eab96340730d2be7392c29ac557050d011ae9976b3e17fad18bcbea0bfdaf36062a36af88e56114f5108cebef2ff71b47f0cde528428cd170237b95d52f3649417eda00d198a9ab376ca406bf8e1802ccdd2f6d799bea21a5161cdc4c0fa880d16fa274eaec35593e780396438d62633a909f91396900b16d4a1610fad1cde0ad2794ee9e2b724e933144cb3e746d0be377e3689e15b0cf22a5cd3b1f102b44946483987bf022c60b61858f08dced8887d28f05569caefe1457e673a77685710c75d0a05ed8073933d8808d61fce4dfb609a08b3c9935a8799c746379e352c07481f3e7aacf401a06d5edb84b6f0660b0da68baf5c0e38942ec217da7e46881bad5ba5caae2aac0555f3b17365b21cfa0315a89d858d8f1b426b2bfb8303d7c18b8f97dd20160916114ed8c5fb36af1b19b9b8f50980a1ff270ac8a15e2f5856afe94845a27243a9be93b471c4f4e4aa1eec402c7e26afc7de69328db10cd9d618e2aeee6336ebedb49bee284cb3a4a91fd248f03b4145f8b667ea705c0f0ddaa0d1af8c2c2ced6a2cfcb77b595b675c5f5b1bbeab2dcda0ef69d20bc4e34e30d367bb6cc4b6456ee23b22fb54fb664b49458589c83d730e2af1f9350ec119c04029152aa698953d4abc94e2b3c2c47899aec4d17e77c86f0a3f8089b675dd60a13f963feb0a4e9a946e3e4fedeff365d3e478c9449fdfc5eb72a5dc936ebca4cdb85b5ec6c0217bb9ed4f21ea778933b573a52e8f7ba97805bb205f632677b75ca19c95256b67149a72e113492f533f721eda144ec1b2be49fd97e79aa12c7706ccb4f74ac6c99667088352a5f98350dfc48d623506bacd18367a2ab973d06e586c7d5eabe61540c9091f1c591cb689da4dc723f75db4e8a9207c83d7f8e05c487b02689a1fc867197a0d1d38ea1ec5f277033961f3658962aa51401b3b2790d2be9d117879431097bec3efd6df76cf06928b000834528a6dbe574e532bb80c8eab0db8e04a8cb9ca3f81dde363d7f20613c7983bd5b6e06c105ae6e2f535624a1f89bfce4312ccf1334e4798e15f0aee3752b9a052bb4e72ab5ce629db24b82fb7da0c7f085606936f01aec1c103bcc7c4043ebb606e55c5d874867b32beded14f55b25fd6b6a9057d16d1e5a02f349962ab256499bd09bab584a4037d6fda634c16add62758c95b9db7d851d8aa4d4ade0bd8760bec1c94e017f49e46e5b8a363c7ae71a9a3ccbf30b6f0542cf8029e94566f42817eb3a0bf06db76c7da1a5c62af838ecf67b6fc6232a378f61856d65bf8aa0acbd6750eacc0044d14b85c831b1b4367a05448790b96cf98f4478398782e1fde71837c881a047e0e872c5e57b3b337c5204e42ef3d2cdafca83de825caa66981b1df67c1b7191524fd0b0d5159a0608baaf5cc5c9b938439cdc8e20d3607b3005f677b01d74023e5aa25df19034eb4d914095ee1a468db53e23dcee53b53ee136425c9332c7cfeef3781078d03fed60596cb77664e4cb7c6279a7fd137fab0406887efeccc08d419825620c30d0d1e0d30c58f8ccfd0c42e6712a82ee6d3dc1cd83162b7769f6a3c9e2161e83901df99befcc576aa2a6e0e17c4ef6fde84d5bc27f03e8f0ca905e09937c95cfd21bc6ed7e43af57c93d08371f8f3f402970414ae23e9cd5d33c5598a6104daf9fa3c262225e4a68bbd30c652560d1a4c5255e3ee9cf5f3095005ceb76c9aaa76ca83652bc4adf0bfe1e64804e11626e1ad83e43e6643546c4f9a95a5ea3c05b029c2f8d9585a86b51dccfb66285a28f06acf295191b4da83beaa53b43221ecc30cc60bd1553aece2e8fca800d01844387c9b98853229eb329a175eb2e6076962f058ca597a85a934e941ca824a7aac76c718163e76c86970a6a938956ac028c270c9dea4088b5a6fb2c65ec14651e330797276e760f009dcc0ffd116982130f566470d44996db7b03dae756d4f341c3c12fea3893aa724ba3d7671758540c8e85082d4c00886fe482ad065d42b1b9560f59e1552eb3b2b800a1c211cc8b9d197a8668d398db495807f5b28db4afcafa29c91be82f269e43167cb1d987c93be826a758ef807387f73e4d279d4de01d87002427d7dea254c1574baa7a2841c99d1ba370112c75ecf29be4edf44627de91265d5237abc86c3585328af84b0211d642efc2c6db71db8addcfba4dd665831de3fa975edb36a28bcf4f73b9b6f1951c2845421aac15e779b1f3be5c60d3391e36c8e827efd5d1c6858caeb93b0f1d14db4262934d14068b31250c3ba83379ff38e29f1834bd458f8639dd8fb3f192503a858689b614d824f647b370d7ef1cc54061ff07d850422a4e5c76854c5dfeb0c9dc1a84415f609085af95d25e905ad9a4cfdd435ae6cde60e67bfcda5eca213be2c327a2dea209eda6b6b64ba99ebd9d85b1accdfa2545f88dcc673ee2fe16dd32a32a4c6f534194b8f24f3dc47f74cf29fa6245cd73ca3d6e9962bb889bcff371209f8a1f3068af50ca672e2e2ba354aeb74ec7415739d16d23ec4f9cf7231ea751e0b583a39edf92f447b3fd90cbf2ff6a3fbb1996bfc71968ecc8bda32559406dfaaa3ac03ad425efa67cfd884007a34723d272ae08af7ec4cbcc94de0064eb6737340be22c3af54bdd3dfd5f8affdbbd94c7add21dd89ab90d3d8fb6a054de0fdfaa844adef5917594c3df70ba36b1e1684751fc97e1ea2a4affe2bdba832b09c0eb90db33a1361e58b390f167fc31a79d46e0ca41348b7dfe23c00bfd8c51af14b12b2cbaabd28f6233e7c2d62a0a48470f746ded6875b18b5f74c33517843d964408a6209d9d1f9af302cc01531a963d29b24cffd7b94937a4255084bc740cc58bee5043832e36152ce41b8ced19a4e08312cdeff31b3d1ab088036ef5a1edcb7187cc6c554c04042cc1588cdd43c6aa77d16b285d8e55b86c6c09bf020d1061cb951a479f2758189a2ba1b3ac30f1332dcdf411bd94630af229c03596fcbbbcdca34514474ddd33a68e3dedbe35a58d95f82a24cd0a5e0fd140ea49f56a2b34fdd50face58aae05d8e2d98088a5b3c934bca3edae61aa93856d4962df7467483793d0f3bd517a2084ad383e3e31faa23861dea44d1a8ab4d6cf56f791721e19cce53a5ded0e272d354dc8d0ca6a17b47414a9dfaebe5c57ced0c60a9d27a9c2962ebfc7c958e3adb3a355c843c401df74fd683061d6aa402f7b5db008d917cac217142f588583aff9cd76b957ff322c839154930c471ad0c907357163cc5641033457ea7e08f90bc6e44e5958fc539be9ab1339ff3f381db7d037e224a601c61c1a41325bf04b1ab0099dd15e224de0cc584ac081c611f333353d68af554ebb394c7322a4875977958f779e709e01ba22f675d2a7a7c8fbe1fb9b5398cee09b3e2a19e55052334ec048df70dbcef2e4a3dbb318388ec47e560bad15b8c1871380e12a74fd73d9e4fd687de7061a4ccd181f7477ce2d052196b72d3008afa94e3114115d01331501e715b9f15726cc42071368649e8751c122303da9a2ca7a8f6f262508adda9647d5275b5c0b11e22e16da65f48fd3859e5029706cdffdb7ca110b8f82727afd3e6b7e579ac39a5fab3c9a838ee61ddb206336be51320fa018b2b9d248b5a0d7417b41e43d3bb4e18a5581f9de36891b45e696d897763efc6b6f12f0fc26b9b66cf0cc9a9f9b12b9bcea97bdd920e02362fc7840549b99052ec9367f5b955d578583e37f414edaaa0493b6635b1491ebed388b1dab61aaebb9235d4c5439a23e7cc4d5dd2a4ad02784c50ccff74fee83fced5710f83e5569dfc905cfecada97ea1acd41fb2818252921e43dc751f99a0c8d0d8fa8638be4cdb2108e812eac6362af6f2f0af4b48f9f29c01161a1f96bd9e52168baf475aff4972794e41e0991b8b1bc974575c6e607661c607983f445e3b93b22fc4479ebb0d17c1385b987a80e86b0e1e64e0eb16d8e07db89f34aac4d7a2c122bea1662bbbab82f5333add2fb1847a41b9e944a0669038d1c136d72461d4d8fe02d9e7930170cfa64ccd22d6c3c465fa419649215069da16fc25ce18a78ff47fd2ab8ecb47baebc96122bd7da2a64826f9319037f566955f2b8b586d363312aeb129464fa2d4f729410da20f5cf64fbd68cf54d3458060e3e0f4d5c88446e0d605756b10975d585fa3b8d8c5fa1af9b80d680914a1e86b24c435e8705a59da6d11259fb17742a60aa3c4520b7e65b7d13e52e2fcdcf7bb8288f528e1cdb4f1265fda6d5dae6bb67d6f6a71c36e6e4b725465c4571a725cf082d5a8b9e07952f4c34d43529322faaa623ad76b673d7b23bd78b7de2547d1175c9359fe2f68786ad351a39d1e78807bbd05d1fb82d3d487ccc57548e2a9520f20034a5d0c408afd21f7fc1c3dfce8a393ed11a38129837bad0c99340a24e744ae27deffe76620b4954192605b2a5f218020eebfdae55ad9198a4fe91fe08e7aaf06b74bca749a5528c568966cd13e092ba2dbe1c02d21464d12f4318c17192884ac2277bfaa5db5b91b60c17ceca47af58e1acd01ba9263518f1f78ac7b3de8f6b2033d095dbde378f30ea86571f6b0958453fbabc95d4b941bd66035813bb9107f23853ab7a73a16c64ec85f2e9aa81bf47e4c53c9c8ceeca4458c45aeb9264f46cec4f47ca7a36d07d871c0115a784a2101f4a338d54d4cee20cbd78a07a7cec348f802bd0b05b3b873e0a08e79f55e873cc3ad1ef47b45253e454568b08428338abcac7dcb19a1c2d62f4988426a64bf82f2830ef428b3308c6a13e96361f369b391eaab083e25cb8304af3ee1d039abf49e748f00a582c29e46804a5aad60421da2c8e9ad21b5c5d6a8caa988f9b050096a24241b6d8eacb41c916563ecae0581693a7662016b929e087b8ddf9d067ad05c0361330c424e0bae5625a42335ff5e417f5537d99a3b0db616d23e657fb6bf842896c3731562364c6849891eed795510875a4b08905a333996475d4d35e89539909d1c49402f1c74febac3055183c59c2d1459e98a8c320e82c0488f496d7536237fcc31d913395bc49fdb0718c0fb00c688a777ae222e4deb7b30f60ecabb2ee6ac41e6113cab25205b186ee94d7568c4b2d17480e1b94a7c0ad9d2774df1543306540e6e00134a42f83f711b283e8661da0ced3038fc2cb9297a25b3ff083c0f4ea2a8276ffb5d6a33dba50573d7d2cc9061cd1fddf895c9f7ade25516667099cdeaafce4827b00f81776c68c2d9f9a57c2e38fca382255b78e116f56142778222aae5efc11ad026963aae8380736688c19a98c0d2f80af9a58682649094e6a12b13fdde99ac447df5e2b3851eea35142fece8f192c3fb226f6d0e0b79874eed9c125a002a34cd8bfbe33261284d3ba119cb34f99b0058a4d28bbab4f3b21d85d0687ee8ad65c3348d28c3413b8264e9f0d31106069fd63511c90682cc75e5d3b6b0a43602f2c6c499796e54e6b0e54417a6a5014ba38e848b9c68be11a323efa403b82a1a652222e63dbf37bd0c889ff8384d05476042a4ed217cb0121f1367df956e509cd93dc76f693dec52abb4680e8dd82089ea47cecf3cbf0c2b4e2a9ff2008dd0ebe706074f69d0d0ef7b1b9046a6c059902385931bc62d30f2e1d42657ac4509d8f568a93431520f773103e86d909a4bf109a11f34f45cc335b82bbed95a81d038c916b745dd76c6712bb78a1601ddb8108cee60f7215de7d1a09caaa8c319005cf8b155988b1d68fbeb0d4f3a63b1eda07b63b07c37aefbe58fdce13e933178958d6b54c43ca0e477c5b5f037a0fefa10dfacb8c3b1342defdb04596c86d027bd457ee61395ce9963039ede4633d158796f64dd3e4751d8acfe38e1323ea8f61661b66d84621920afe1b055d0aeae63f6e96d4b49705e986b74a20b1e8d5db0adbcf3103df7a9bba87bd954848eb0317a1bddcf1b87364555e1c5235b7e26c02812feab65b0de35e2586fa2044561b62a9be3c35713bb1647e0c6ab194527460b5986f56d024ea83fc1729ee2eae0b6aa7337e35c74000159b2e73e100ca0d12bdd04a80998b8142e6146179d49cd1054ba0a2a41fa2abbb0aa73f72f6e36225221f81c4a727ff90a173468b2c236d5049493f5bf5d313a63b292a66721d12007ed8b2951cd0322d1425c2aa3aafa3f09ab0c1b68176aea8a92e615e43463275a88d94033c85b07f9c81d5e7dcee5a0f2cf76199be3405d79de8fc316f54c35ffee6868e221989a9268bee91537487b3fed06e04ea66c90858e7660036f5a3d070a60a1b19d62af2647c6e57594d2e42aaee152234528a87ed620cefd225b1e1d8f1a70642b3814609b14c7da4a132803f76532ec57992843fe7a90662259ef7733e5298de50d64e2698292d8a38515ae08cf2f237fc1f520c4ba20630841a2b2a3f0b8319786375eacaeb60723373e007487c2a3fa422e04c472ee2830480cccca2342f5936851cfe7ca4004a4e5c7d154a5232875610611a813c4a98ce9b698cb50bc2721f08680863d6935b8bc45962b2268f0204ce4c058364797b0a70f60b716d011e4abe7ef60d65cd49d49a77724f279715a0530ac621106aa63d425b3f3936462df70ba25b0dc6ebe4f0d0bce762c70cb2dd84a3111ddbafb631422d7898a097d768c5cdd7c6b4235cef0d6d119fae78300df0c0c03aa1d566a5a4058555107f92bb2e84a0782b915db14579374935010c6388b820e7d29bc8b1e7dc1fc761f3ef00c4431ad76d790bdf2e2e276c2b89875c61be0af819a1e80f691472a8342094f5960a4ddbc8e81e83f05c4ee12cab6a54c29a572067c06a206dc8bb8ee392e94a9dda1666ad350559906fd5d9ef29f28e6efd47f9af5d4cf3d330e0fc6611d28540b90cdaaf8db2c0ba8facb5bd5fde577d2b24143b6594583ee8c3211819a3407ca5ceb1656e5c0cdbf16085b28aa9696abd592e26ab95aef72b55a5a2d2d57cbb502ba5a525c525aad95f3e53308dc8ff2dbddddb8bb312e689793bc32899eb147e886b6eba541f798184364603162620c69896132994c31626486c8c4c4888901e3d2fe1ebf6dd4187222454cafbc86c95931434ca621439ae342e736d480969c20c2f6c4e5a0fbbea830febeeb832d0a663f5cdafe4b4b830de3bbff028381c174183f97af058389d99f93d25d5a7de955d83368b4a5a5a05bdff9dadf5f51046d29d181b613a0e5a0e84e2dbaf22f0b07a2697aabe2bf8209aaa2c4051fe0dfd8a8503e770b143fd0094ab7af73be41b05591fd4c83ad8afc46b5b8d096859483e23a3bbd9a1fe7772f12c97775c772683327b64820a2a3b62c7ede0431685ff2c47da717dd7b0f23f4a2af4654f32386fb7dd584befb4edc475f35dc683f57c44783f241fc758e2c07f4cc3719176b594efbc869103f37620162c93932e69e06a5ac5761f7e0a357e16c9d5e85b287ee216753f267e7744e4e08d5eda4e4d2389238a2266ac512946bb9c5a6488874c78e1dce6e726766c93b5625eea8718aaaa257a7c511ab2108474c36a3c9765cfec5a54dcaa66d907d9d1486a0f2675a95f8279ea92695b02105493cb16212abf1651efb917da47f6a1f71f5022aef2ccb2e0ba932cf35792a7ea76c81c2644bf3d967a0c11935e4f09adb7ce6b4fe390379cd83862334f41957e33b2da2f04045dfbdf771f633fbd9d4be16f49913a97148e5a8c043149ea8fe71dd51281a9ef2024dc5f82832e6469ecf96a59d87d3bce6ce233441a0191a85f3c7dd791a8c338f1ffda656a3e3681e9e6ab5bf69c6de3b734610efc8ea9e471ad51eea33678d7e6e08f47da459a3cf797c38bad06f58f13b12ef88748efaadc607452ef492771a8272fd69c1c3594ea3a0190fe751e3f3a80557fdf3d9aac42f91cd6a7c92110b1cb8b62dca3080eaf19964c422ae8a7f17e2b8a148e2e78f77e4c73aecc324c6f589743528254d7e943722456eee3e357a649a9434dab22cb12c8602132142631a6c59ba4ad04bff9808ca0fa884f1a0ef0403fa53ccb3c4600839b3d80bf4d9f811f6b0e117e8611020088fd7081c8063f60a010182f07881be1a93a7e4f4942440101e2f9115441fe829e9001cb3d77a0af4cdf9e23e1cb86e2485372af7c15c5a9ad6c23edd9c0d1c1423df3a15a5ef4459e59d5eadcea98512ea4e51a38bb8801a472e40b75589a85542ad61597353feaa65e15f623764408d38a0079de6697e31df7d367ecc2fa6fbee3bcddf17eddefb4ef39baff835dc28f7205b83b1082ae43e343f0c3de8e35b08c53db7d08386f4c43929e550a8876f0d16693072219028c4b7663188fb984883311609238e4dc5979978a0a8a02fa4dd4fc0fbd653df04683c155ff4ada7dc7d25497e2a14550e28385c8b5ed0dc9d121908dd8fdfc21c3946ffb8c2bcf139b6377fcb323333f3333f3323c153fb0ba9addbbd110b5b75556e830d687cb6f1e2a49371d039e90c9dd3a393f20d8e8e5eede8da9c71d6f4de9b11474c2e88c8956a55be7cdbc7b51fd2a07c122228db7a551b52a476d7296a1cb920d58ead8afc13113454c38ea9962596f8a0cec5b8d39e6e981ffad017e5d79083fe801ec47d1d6b50da3c274583a0dad6400fb26930860271b3592cc3128f2cf154f9618956e597783625a5113b6838423bc75912a5fd4bef3ba42f7d8ca7f932de8b5e66f45d09758a4ff2fb22a14ef14bbfaf0e2506742b85c1419f747a21fad2c3107da9fb1afa9de28bde7bd1c3e89ee4ab217da7f89de6f742f4dec7743ffa47f981aea75887a724dbc8121e505617a8948f8418c0a076f5975308b1038a1e3528420b3e2ff93b82c04a83f24fa6aaa26355368efcd621bf63f2db46be775e53b94fb52af297a0fca5a03428bf240794524df6c805a61fd425865f26c64caffa6bf54ab732a25b95f82a76a08c8a953bd7b274ad020843c7cf7334e87d1cb120b5f4aa8504041a82f4e3d3f48ae4e3db009765324ad68ee3baef74c3e8e5bb18bdfc1bd5462dfd8e986bfa8d7a102a9ca9f45d4e51de93a0485fab41ff462e7655f6e5a845d7ee73ad4a7c46795d41848a40dc216e7e2e0dc6c8450e55a3c1f82f31ca28638c31461028c61863f497a86a30ae14ae58e39517296031d670893246f985747938e60541da5104ad2526df8d57e90ba7fcc239e917523abfd0a46ab025042a9700d686851caba4394da10f26b180830551c45edc772a42b9861e04b648951face45bf7890a55fc025dcaac90d1485f6030307352fa0e7b81890e833981cd6266b0239a409b49d47069319226b1a05b16ada1726576f7f89cfcf8bfacee638c3554b9af16a1f6e5f2d03a13d46b382bb82df7d9fc7cc63d4b191e37e99ca1b3d9ccc51c4bf6a14163c486bfd7323067b3399bf346d58ab139ee5d4efadd8821e86e27ba65556e5295391ff3f81e98a021f360752c168bd55ebe02c955e8bd565beeac49e9f6d6fe876f6aff04e1e02adbd476516fc9dad2d1d272b572b8dadba78bbbd5e2f296ab7734d8396ab77ac8f1d1b5e6c8d114bbbd5b2dd917840879e9fcbb1313942b9f98a0f2c315f282f203253dc9777bb2d2d2b2663cd4fd084557c59f04a5f2947b9f6b554aeb05545d1f0fc00a287044e662b7db6d865236b98dc3c8d4f866c65994dee82d8891ae413a9aa30d3dd024800409c20654567b51b1daf0f3d26354ac23a7e108e59b04d4c681e3acd2f3ccddeb4e4428a9d2a04455002fa0b1a4464195a657d185fc4c0d9e34c834ab52517e404bbe9a1ffb35f449bef4d59cbcc96f831ec9c7d06f9de4db2fe6e49bae2e79216006943678a3556537c15a324985be4451de0bd37f073a8bbebff7f68b684253f7853e17beefdf4fafc196683618c62f3688faedbe55bd8f280cf8632014fa4b0f6542851db811fa1ec5972889fa2868fcd06320f4fb1808c55104422ffa4cfdbd3f2667cd10cd0b28e839978d705fd234d8b1065b7e4bcc643299686cfc48771a8eb9fcc48c308e7d9a6e6f5a901354effd918d9a440774561d74c3363fd0f9b347e94bd4858623d49f7bc0ac651d1855ddab3fab6059bc3729117210aa3303c1a41ab20d9d41f55fce41e94b3e34b9b4cbb2f0fbb35816a360531e0ad57079f843f901adf95163f2251f7fa0353f624a7ff235256ff235a53ff9f827fe18932ff998932ff1f7c2e44b1e86c967e3474cc9977e3d05e3e4537d36a4133f8660137b957c9465f0a308b1d7be7ec4ef04d53f3c40e537c036804bb00af0e792138f6d4a5019002b06e28b9e3f0423103f7ef75da77a8272157df8282eabe27f5a0195b56b66e98d2250802a7ab6f137996217a50bd2f3f3f70dd28700c9f3bb2079fe505685fe8d136c2bbf8badfcd51efaf4037f43f44fd32bd2b7cbe27de0cb387f2f42f5287d87ea51f2efac928f6ddce69d155ffea0cd113a1ff432f4dcc7360d32ceb373df9c94721fe3b00ddf30c736cd628f363978649cc5369bf25ff724865023dbd05909122c159be25f9495f8940a28bd9af1c4c9dda896a5794e934945e55e81292a15bdea979f424f50c0e92050fc628352862726cfe48386b1ca0fbdb9208732a84f0c6bd4b6e19e3b8b8473f2292d138a6aa565c6136b2024e69c3070829260089cf91d776c240f510879ab52bea36057209b0689b45c96cee166c771c88ee4b4143cda888e2e329b47f0a043de70bc5b0e39aa4daf463cecce911c1d38b319ce461c6779453c233a3c297878477270c86e767066de0d6723fb5015e0cac9a7a85a2d4c823373f4b856bbfb85ba0912b93a358ad1fe96fa81aefd1c6dd47ed912f878410982da2f2510bd76ff1ab35bd2ddbf5d99ad064128130d39a0e14a48d3d2d22c128e0b4c8c19b421b722467ca400adb4ba39d9158a2099555992834a1b892375b8e4f12d0836285fa6f4989e9af547a61bd01004439a1a7fc61eb9b32ca0972f8f884e703855ca77217605da6950be04cd3cb5b32c364438902a7b746e3e40b51d9ea3234551e587f2889c1a8e681cce68b62af21935c22162473c75a757a32316942fbfc7878d3680ca7d249f55915f830f6800153473d62847a7e4efa0f550f361ab72a47303d25365ad86a2994f0b192a7f231a9ca022546955b8a4f24b0dd4e69e6ea005f5937bab59d4c7f52223c3a7653c9e6cd644911a6e6d36859f1a2e1123eb53e57beceeee26017be52f4966de211fde56a8cbbed59d9959f2102768e61218507e67b9ebf2fd02a855d877c178b652eeee7ea174b9ccfc5d5cbb1edd05f3964fe5cecece0e5658bb77777bd7963958af4eeccecea327bbc05e6affe7a6065bac8ca0fb735166a7dcf48386a6ea02a8d139dde4041a9a5a856fe566f56459fc5710a15b435ebfcbcecf05dbd9bacc981f9a18e0ef1932994ca650a8bbdd05db8fc647bbbbbbbb27df6c0fdfdc5477cd4ca639eb68d07974f7f6c6f11107473cf58b3ef453f4d1f0947fe87b4ff977dfcf8d39faf930ba0ffd7aaa6d8cbe53524ab9c33bd179c7e78793a34637e8298973526a32fd833ca30e9007ea5bdb9a487fd7fec29adadf44eda6d71f8c111f40117ba9745e21d18f8eed4707068717fa3c29dbf6d9746c3f3a3622fdc3a2e8fdf2ef18eba08819c85e215531c42b345596a5a18bf4384b04d336ae8ee6a3f040bd1f3dff388bf43efd678bb8cbe929ffc93edce3a9fecef3f8c7597b22828ab8f3189b3992fc1d99ec40bb6156c57f6b4788d86eb69b73cec1dc6c446c362237db2d66fbb9f52aec211efa109db6d96a355bcd660335f5318d405dc029321a74d088458d067dae66fdcd0a3dc74967bdb4fc5ca1f73ac57b84ded51ef23ed4de871e86f721cff3be137de7496f5f3b92b4c1d30a68d730451ee008b41f8492316359e6fb5f60571e58d0bf86284423fad48834687c686868d4f0a1518386064d911a5b84c6c616a1e1e3d3e990040f537662fe7accdf17c85b60ecf2b23cad1793c9647a6917d88bcb8b0bacbf5d7878bc976787129c68b3d96c211b0db1ba8f7fe76e53dd2405547e08a771402f23fad1cb784f3a750875ea2f39cdd30c7d353f62e887be86e4bb87117a9337f96ae8877e5f3e24dfbd0cfdd0e9c5e84b1ec6e84bbe9a1f31a1277d4df79dfa472ffad1c3207de9ab097da7fe4ea0efc5e8451fe33de94d5040e553131b2a3f9ca1ef3e641f12aa6b253ca0ac2eb0adabcdff04a6f4ad7b647c9cce1c91acf2ec4484ad3a086aebf490aeb5ad6b2d6b9b732a55dbbad643bac6c5aeb5ad777c48aff8bbb629ffb95deb5a09d75e918eb198c335a609c9a121d316c522a89ce3d150670dbd877c0bb927649f7effa571d6e8fda4f687a1124aed0f0350736ab15aa36fe85ab34d54cf5915ff8e080a1ac5741f23fa913c0141630d3947a693594f8144df0c4f71557e29f0c1f1635a8d99c63187db1a8d8534e8342ed63c76a4358b5946635aaf8008990d01e20364377e4c8b813ac4c4a92e2d8814dd8d1bb87a0d396801ead2788e509b6dc081967d3d55c38d4a29db69ce30b0179a6486c1b08bc3c4f8f4b8bbbbb36034dad2624b9f968b0bb602a39452988b5d2e306f17ac65013ad09056531025ea7e396ab8b3a8c388279034319d2069e247d0fa81081d422411c40f52e038ae9b5684175020842042f4048104422841841140685c7fd692339abedbf4b329fcdf1c2185eeee96b31f44756941d082b3bbbb33373337eb08d90891820e777bb77bbbbb77777785a0b9a0d5faa1882882e082266e20057fb0bd511a8cdf52ada87ca5d551d5f22f05a657fc31d8fd552a55123ea8a40e1e1dac9c7cbf2a7a7bfb8845af9c749f3cf32cf13f7327d0847023052472b013eb55820722ddcedcfbb55cddea4d71b598f7a3b75cdcaadcc2ccdd6af104a1455237884e13356cfd70abeeeedc7152f5cbda9714c91df2bb3fc9eff462f4dd57d38dbe93ac19bdf779bf2f7f1a343333481e0d9a991923148a8c76ef3dcb422c5b16d1fbb30fcb72c94a3fb32afe1e8a63a18f715ccea2c08d09d5c3bddd6891071777cc70ce39e7bcbd8706fd7907d75cbc36c3b7ee26461300803e19484f325a77932fa133944c9f0ca86df0e433416d83255f0050eb43bfd6f444f30b7f7b22003ab444175bb865556aa8614b334bcfd5356234ee7f59a7f925bfafd3fc4e2f48bef430e8977c35254fbff4d5d49454cbb295e34a95633962c195a0685a96854403c507ca95e4c404ed1ab6d4d824184f45ce7b128aa2485071f4a9568537dc2bd4580aad80224a3925b74c10a8063337ca1941dcce28e3d3e855ac7103e351761d6a41c74372afe86d1fe162f2a7c120e87c297fe4112ed6abf8827bc9174ba186a1464dd1c845d77ea9036551d7d9f48abf3003b2a7f2a3e48fa75cbe767403e334c8bff5847f9ef8f32815e87c297d4202901ff7464ee48ffcf1b813e99dc8b0cb413b1d61974347f5ef72fc38cbf3e4cfcf0b86b8a9a1d7f108e5e852525264cccc2877e3e68cb3e6e7f294ff9c9e02e32cd1fbda5c292929393af50175693d72c414ae614a4aaf28b00af0af61aa15581567c908f7c68d5a906afc66ba177d4de8e7d7742f7a29faee6be687be46f4ddcb17f3430f43d4f17c18a19f9f8d1f31f3450fa37bd1fc4c9ef2ef219e108357878279c910eae682b970f97accffd6dd73c1606c333aa0dc4d25839b99714b99e19a3123e3362363c6cc0c77ce91c1393332e072d6cc4d0855b6d7c3a22c890e0557f653b5548bd2f26da9561a6cd54a6b57d5da1a4a8c4c0cd5eeae6aa685ea5f485542c4aa730c9d1e253067fd9c347f1a53eaad8a77f7b2845810589ab79e07b32ca0ca3caa87ace3257d1249a8f4277fe3e5df6a9d4adf6902257ff231262fc3975e86cfc68fd21753f2279f8d9247f46081d95f858fb8d3f965ce8d73e7c690e39c5b7f62094b80c10da0312114052d488b58571881f6efeff3f42008ffe8ecbf82896e71b97477b75a72880d31a04d114488219c0ec02477f765462fc23c1004412fce18a717bd18bd49631231b6125fd0820d39463e3f9630041138b1d88a1e4ab117d47cc115554bc5324a299da5bb3b0341f973fca0e64ff8200733234fe0cc15466294eeae069bf3158e7294a31ce5382eb6cb05165db0789b7116a514891800b1439c02072b92d048ec90851fa2c5e5e2ad96d4814e1226f8cfa13b53392723b3777b777b93c0bdba2b8e70840f32c7bad8da5e9a0df6e0be87fc960699bfe52cee9b9de297dff69c3d9598824cc28de77edc8d2bbe40bd6166f4e28b078220e8c519e3f4a21713e3f4e83ee8ac18410985b8e38821ac2c41fabe226d77c9e8f2f66e978b373b3b3b278393931545281898883cd8590c34ca96f21b2699d991a04be341edaf3fba6005102c8a52b9ae680245a9fefbbfab5d30be7b7b7ba3fcaf1137d58310410d3f881e31c6821ef0ca4aab65a585b6b2b2049e952b4361552d2d57cb39c535e79cddea96b1dbdb536a7fcbd662734def6eef6e1a10d55b5330dbb0039dedc0ae524d5513343e3333333333d3b450bd85f883e00b09896389442231fb832a6701e01d87ee6bccfa120121b1e6e467f81a19def4a697e16b66f893af31bd0c2f4f7e868f91e14d273fc3c338f9190230c3034086377da7f8fb02c00c9fc90b3b702304abc99b7cc7b5a4d4a4a4c4c444e4795f52a2a865e1e15083569ef466bafd4d01abe21f512aab007f0fa542a5ac8abf0ca813948b50e091104c016fb7db8c0a142244c8cced769b959a0485cec77dbf1510743f3ed713ff8dca1f2a2e8b951be2b7cd0b4f58c1ce11729c607bf5cb38cb460c083728f464e1043a2c14559801e147144d38e10baf0310a1044cfc20d18348175efd3cea01fa9aae9002dd6fe96ad92b3098abbbc505737971cd66feed2c64832e4a998cbfcaa1b521dcc845376a21bba1a672a8294341c83c1cf75cbd61a9108be1a080f8354c957fb02ad1b98f7d5830fefce6deb90f87f93566651f5625be73737e2c3b414056ee656519ebd41b3c18212748167258810940dcb81162930228ec00082e94e0e5322346e8600b498ce106af48811ccca004b49b4c0a9c570c55ee452c3b1121fad0cb88bef54f8686a7e2b38e37e964198d31d2e9cde9d149673de2c57884a7c6e723bde2c9f29b1debbac0370901ee438f001cb26bab57cb32bf189f55a0c829ae3927bb38e98a1edd5d2ed13dba3ba703f7a568848d486ea765ad23931cc7011e031b5916ee8965b50f46506c4446431555eea7a96d306779274e7eacfedd87be43c996cd68b21da6394bf4dcd732d1271275229148f4d588befba8f75d37db71236ca4e2c051d658bbed5d8ea4b0a6caae339fd691edc88cecb876643a3299ce8e6c877380f42a74f7ef1e5ad6b296b5ac65251f507b4ef0edb8a5bb68214b70c3c9691e4105b11aee1154507b686863da4a66318f754fdfbac8caef9c65e9387b9822e7711cc86311e4b5ac45a1d08b3eec5bdfda6f7c87e7901e8dbb8b5ab605ba9e8279ca1f45167d34e81e731cd7e1b11fa8cc53fedfed06f2d8b2748ec7fa4336259ceaa1eb60e1ce9138a788e3f098db78ec6693939393e3361e731c1ef358afb8e831b7e969d0df63319bdb380e9bdfd83c16cbc9f1588ec73c36a35168204080d86a436ab521dd92810001c238a827bda2cb22ab7f8d994d35a7f99c9486be292b8f4c76a0dbe08a2a9d71a41c81986ab55a2d728c9102a9ce3f2cc5890a29a460297ac55ea3b150103a9ceaf2ff1fe51fa64e4f52fd632c0b57ff191901d0a1a28e6b44916a8c3146067de7916ef52571088002da35fc9f2316a467d4c6186344ad93808652472879a851e2ac4afcf842bee8cbd10bf922798aeae9550cbd27039a39c59fa7f8c9c4007df731bc4f865ddd6f078a31039299911112e374c136d8806270323336d0cc8c4c0c9b4c8c1999199b4c8c1919cccc32369b8de2d01e243e0820c18e5c7415fdac4b81931a326d131609bbc4748246517d8aea23166984daef0b67b8c8a81ab2762fbb6f8a6ce081b6b4386e398e736f71de52a95c2e31c618497ca6cefb542fa9cbe21d4e79a5e108a9faf36c59222f517d91507d9b50dd3b76733af8f4b8692e7a8c31c69728528d28ae3c63204c00f1e79d15ccc75dc5e77eae37472cb85768fa741c8a6b8fe2fb88050e1df7a7aee39d66710e35e7ea4bcb81109ef5a821f354f76838f8410db986031dfedc533d6423d53b11c71cc7712199180dfebe6c402537838134e891771af4998cd90e90086416b91d9e6540f28e7c199daba8b46d1815b5546a46000000400043150000280c08064302b17044a06b6a520f14800e7c9c40664a99caa3419643398e72c61863080000000000c0080c0dc0021c90f1e8fee07974591ee883225ee799f6579c7b8f4cdd3b26b935214ff30cebdbd31096a56a1aa7349eac75beaee90146392ff22aebaa3fb1d195164bf88860526aa4538d73c3e63873c6d43e7f12288a3237a1deb9106b0751a21bcbd23d8d87a81b3f2094232001ebc36d346e4a4e9c77334c3748a862a4e81d71c3e7981acfe211d620acf10ea9a9eccb93009a9e9b8b494500a128c366fac18cf497e64e1c983eae22553197621edcb45437d14af7c09b8ea869c0f63a0c0fb35f98b9f5d4f994fbd7f1cf54abd8b108e02f6da714b7be8fb7a74c298c3089c295ad24516212ae91811311d2962245d3803855d56de92ca55a9045ca0990953229b98c0b90823959e4e8512709eb0d762edea7fccb36870d4bb8f8bb82227a8900eb859ab02fbac8c39ac52cea57a805e2c1d6f85ac1d579705649a229141d600b8714e056114968937e1b5335855f43373d883e01390c0cad7b67cf49b9eee7e6cf43017253fce404b22fcc4e4714139424a29097d6db32bcd6739b05a14592b58cc53f56f4e8e259c3a8218b6984b39e813e441972c5b2403ba12c58c7001c9d78b55a9f4090bfcfed6fbc11e023b839fd9622fc8b5985ad396b846e71890acff747859f71ebf20f10592bcf81863c04322f76add098960a5d987e4a165afa31727cd0d23ba617f55699cf01af4bd8f72e15de2aed42b8bb3a464295a5ab0a9659e184f2ba07c8a8820093b0e64a55c25da4d59c84b02a6feaf245c5a67c812735ff179ea41c31a1bc8b3dd3f5d2fdff9a8f9c9239b37f3c0bb32401f04071baf142a03cabf31c97c625d79734c0f682a6294bf45c18b2d40dc478b876d452f55b8e1197929dda8323e66c6f6ecd2181a9adb09b5fb4999a7664c4a1be44300ba51d39a12bc0f862bc7e9288edf3f4cf39f5faa56ef6bd1b47de47e707ea0d3a04aad543444862c18beea801fd19befeb571e64ae0a3695e0ebb8f33f5975493fa35e49ed5bb1726f5890c96e5a25b4aee7115d10a832a36a331e1f961a10bfd7260986cf2d65fa96d21478bbb8c20c74979e300950c3d880c4afb9b214b9e1994bbd09934d01ffcb6c86adc53637058d346bfb1322528647d91ebc32088bbc57e53d28a650af6403b19f5cbd8dc93b637da5317dbecbf3b6d0e657f4063f794726826185a13050c95ed3945be82303b39a304380aef8176751172b05197b633ecf06e49490e82185a2e2101e4a3a97911185366c67ea1388147afbe82db0792a7a9d59416f772532a4dff91ee3715001f3343aba8ea618fda22024fd81002941c5f2fcfd350a64e3a703c8ebe5d435414b8ec405826a13baff13b27e630ee1cca1ec243e59a7f0e617370851348b46f88e4c85e0c82812091443a61727794ec719b1dd01485dbcc39a6d63bc33b17af7a3482bd745bcfa890e4328d6140d01d49398c5cbe41e74ec261789f7a913cd1a0f539e0f2668971006e8d06f8a63a132c965e1e12cf5d0b287faec8ff7a018ee6a2f8185cc6c653a19bc4454bd09ecce347c722aaf54b44feb4afabb8eba769d2fb2bcdff49e65d5400929a7b5b9ca2216edb7c04fd1b6218a948378bd47dcbf8ac447a986720a7916bf120438a57a360db1978318b75eb71dbd94439c8246dad54ad19be49e84bacc038617a21a175a86392e42332e1bd98f7da43ce607ac58801e29fcbddefa926041179abb5343271f5dd9bb590db070e870aef63832b971ddcbef8b82ede2dc74c1afc502e78cb043848560d70abd35af4669e00a4d207c0d69555a714be21c0416e63d2e00876c760611846b0b067085da947e7bf4b9cb3e700134611a8c7f95d5cfe8c019ce36f265a23fa4b18162b9ba37c33ecf9215b91432334c1c5879446144a7b6a6860d2738784423e7eec5b340ba7802ef7d52b57f73f6951a3015dc442dee060770840244805a2764bceafd0c3bb8b78a95882d8287b90fcba423192af9612f52b8731e9ebb2653e7829a067bc0bfa6235194936f36c85d565f81a6a4d15889af37e70c1995b74372c57d881ec7188283068f763cebfbb7744cb5eb87c8c22bc6056e310d4d4b39f5f368a42a0dfb4ff983a793cd6b56147c9dada78a235f7e0e773611ae56ed3dda247a8f1c3932e9497fd3cb4b68e41e1a3b070025a214479da89da37e2f9f762762cbcd8904d6a4dc6c994e7d2a362b1bb2270a1d29f5190d9ab67b06d51f45962bb2da5f1e411b70caa7cc727cbd1c74ff7dc079987d20e07552c75c0878d63a0c32336c313df77f70a48c4b7ad30920a196d4731d368ac6732121be1d58860b650ca905a886245f905e71fbe03e58312f31cb48b235be8fa570b4ef1863e094738419b10e660ec7c0ac6dd508f5a6317a475a5a7a082ede93938377b4f6a4f21e559b01c074243dd802ce9eac4c514438d627b78836068f2c7c61f4bfd82e6c89e19636ba7653463ce79e6f9c645947a71ccde1424666a314ef1fd28157fe9a437c58399e514e7643cf5b2cd8b0647d6e5fdb241756d3c75c2de27eef9300d8385eac217b8e0f1a10b76847dc0560af83f53381962a3fa4996a3294c30d43ddb887da330137b940dcb14bcb1d2145e73e771f101620b9d1eaf2982a918727c1444c555bc7c850e0118bcd0496d1d011df771c2bc65592b5277abaef71cb768d1aee8486a538bcc7146e8c1cce9364d13d58c860514eb7e041e9dd1496b3929daedefea8bb950231387d5eda9cf8d38c916751d7d2ff7d608051728ffc0df8b8801ed507edb02304d5b746d032f69fbfb2cf73b18ea8c6f8b21aecd7a341b76c423d88ab25b596d2a47d4749f155b834d07b7533c039608314c79b9e2edabf1f21432945190c1e0d381123485baf7614a5e97363b9da925a408f0109591c7ece4e721c3331b08891c03caa6bfe5aac7b88b684ce7dc010ba56f647a19f6f3acf8ffbc164b9208a0f0550371ad286a08bc5e93c4ce3fc910927a6820851a09993e480596297132493058c56ebd8f0066298e2d545a5cbe9bdd86371ec1f08337f79047f8c46010acc50769268a7c93d2ce158360465a1c026115aed6a939b0caee1c6f33d6cecfbd0d545a1aa23ba10d2329a4f8d7eb32875f2f19458af25eadc548b3cd170d62035ee17ee30bec2b31dec48a8604de49cccd56fc29cd99e20dcc6620361fc08008c957aaeb27bf9a7f957ca8557bf936329dbae16c52b661c0f1321cdb2b3bc4c4d553d26b7e1390908a9be35e7d248de215eb44ff1a1993c1f7af1b638ff320d4877895e8419bd0e516f383297c4a17147d3a641ce89798738c7b1a75ce5f819cb73ae4ce87022a58d2a6e845843c03e4b49d1512cd5faf8db14ea7137c1521989694fee10e76f070fa9a55186093226045e70ec84064e4eaabc1785272c2a220b34bff4d4babef354b4bf23f8ce4ff87f55d9f53e14621f1d5319309a460257d89d680a5625fa9d4de003b74d6353b05b5d3dd869a8a9dce1f129831c98275d32f170a89d7e43d5fb815b492b0984fd92877b231c5d342ecb37a3df31714d63f187e2ba7f0519729c038ede486528e08c4876d0928cc09e9e60a0b08ae23e3a316575aa56e35f6b2e0ba0e242305f222a834416a8bae459f3cb30607cd6da56d3b8d86a4455f14454d7a5306380892756d142feb31bd934ce097a39485bfc1d6ff64d6c9951d9b16e7b9ce38ded2b9c94de697e69c119940410256b00d1caebaab90eb47fa979035e3c151e15f4b00c91e91eb979f8c06563e1ffcd6a5f4b84af9105f092648ffc6fd0e5acba03408826af7ae784659e1b7c288fac7f2fcdeb809882c5b57e9e58a58792bb421d9db27e95d35631a9f0df826922489f27060df65f74ac80dd62f78dd0f7def8943c12a526af1d23e09e6d44745ae618b4467c749c6673c85dd04ce543455e0c193462248350fa9b669ae16314a3b4f21e0988beb86dc787340d9e4fd0c51dc2c0c5522562e735fbd033d5d917f7bfd371804425a8cf789dea45002fd2c21bb6160a4d0cca9f36d5780dbf29b97555f398c6c730a59de9e0aae89c7e805fd939d0a58ce3935c7dc9c9ed763d570d3dfe42fb679c603011be00c5795343e350b554b061a2034c86cb86edf7ba76d400e460037f2f1653325efb4b2d01b8212dade81b1a2acd3241455efd6691375a91f2efafc527ffe7eab659d861e22f3e614bee6f4338550552fadbfd2939f9610c4430667f721bdfb3a91074b13d1bcbde9a53172eb8e24cf155e643ba3dc04491e42cbca31ddaee51e2454f7313e965b3b60d9e40c574651989765f2e480240ccf9d18e28975a75a0b456e54c13ab16d78f67ae97e519551c5d30d23cb13e92031e37a5530289b610ec811ae9748dea94581cf50022d38d501388915bed35a588dad6e424c4346e19c15d655ccc0e5104d9424815aa0191d75ac1c42c3ab415e884991fa750d61fe836f94dd92d4f83294f41e5874faae3a46fa4df4be90930cf9d10c1685bb3a20cefaf575b18a15e20fa73388d1c22317a99fe3db20f7e508160b369fa0f1f70581823ef13a5f84f15991279d6a591033bb586fa06e8365b94ab9d08942d6e454cefe5d2470d3a07a6f2d19a0aa8e495a8d29ebb4d20b0728af596721011c7cb2d94697bd8e2f09de010ab6021b5802a182a7e8b647e7615c0664f5795ada322b56bac7af01717a47a74b62acf5a0dfb1945e3d68a08445fd04b8c0caac26fc32e518d93d65a6a18315120bccc62b965931ab11cdbeca02135a329c08425e4027411ae65960cee98554a53fe5c1541e8dccd47eeab5f902d54960313bf0c99140e76a0ee668616a1534ff9df555246c10762ec1ccf828dc202ddbae41b248e97a028718bd4ed0e72b3cf9356bb4f7899d0916e3470affd5e924d6b346e4fe88fb512631f4545654263d91cce8677d26b2f54f923a5db8f2093a521da1a108fa569f79e173601128c2646576d835395cee8620cda02a4e2019d38f202e7da348350e5481fd3c3ea3d72bfa18fd37851e07d72980e64de8678a715b38ebe9b747bd236e1019ce3e860b3a2a18375137ff17f921067c4b45225606261ba0e6ce37c6f144e3b306886ce5506f0d2074b029aa1601d08e3f66efb240a56e02ac8484f3d7763ee9047a749ab3ceb6c9033226e392bd01574a0c51cb92cfdedb0f205b46df13f5086c29d8eb623482373f497408f9f35522dd72997e2ecf930cbfab184d49adf211fe5c6496e23a8b0bf12974d231e2015a52d9bf038878a8c22bdac75e71d2c302de5f04e141a6b095dc16264261145ea27a07f6975dc197d17e48d2a6386867679600257a83ce1e50c63d572cb8ef8295e21a0046c45991c9ec13e1bde69a89ad0e584778d7c9825fcf25f1f7bf0d1425607903ab9585bb806bec74e41b790057579ef6067177ce910532364978884f9aecd5aba3035fad31ddc6de8a0304c2f814428128a880a4cf8362a3351b4c48935df994f99cdfc0b476203398c09b7e6c765c3b5852b6bd4660f3ae7f460049be6c8835b962d09972813efdef2c9df450851f57889b5f94d1380dab47a2092d7b3609c386451900f28a376fea555e622292d17d1e4f7ee6c909a7a8c5b2452b165fb634602d0d26fea17516b2c19868d3e12f6f6a98e980e49147d67912bc749858d5745440b899794d178103052c92715f65c3e70459523d118df43f1d3560f511f81e25747bbc5ebca841a479f9826de86285ddf1707e058c8ecc63bed6ba30bf9182f9998399abb5c4ea45b3d2ab3417092df78dc93ff9a574a62fc59056cda0164616870ed6afd2bf2b384e390a7e0f222bef784fa2082e1b4751ac9ba5fb1291db08f2c4052b029ee4fe77d300817571cd067e968c81621f8dbabf4c2a0c7a6a99a71cc74ae64673041891b7ca384cb0aed28c4bb34e69e0c109fb34f2509b371569282b1c1a3812e009c2f33ae5c7aabce350381f15adb4e91e18eb786d1f7fe86f2c5bf059c1fc96930f99b8822fd493c37dfff636474f6ee04e1f63c858614a4332dbfb8522761d0106799ba457570983611bb213cfe71f520428f443cbc750838ae8c5af6ccd41f15ef07fda4591feb7a2bb772a335b627fc5ea94cd674cae8afc06d2c420fefaf9ea5b5dc8902f9370c4f62d90442413473e07e792a0ff6639bb292092a5db3dfb4de2f1050bab78865c9899b3ebc38b8f526aa7460d55765287b72cc8139b3c67ee595a004c769f073575c52eb61236b6c9a3df5149348ca97425011c2db014c7fa91be3e588f801a8900edd4c9f1f8b0c903774f86ff6d29c42d7d37c2edad7bf8ce0827b4fc9c154ce43439ddf95f235b220ef500f345a234c158602732aabc611d396b4dce134b731ec90bdb33bbd17de45724998ae91872ca7311be87b9f33839639ca73626f44c86e4c5bd048b03935ea58a6d6d78a83bf5195d888d77e79e1ef9dbf2ccf89d650135defc71799c324aaa9d84d34c87811478ff157ec001e5070c174ca1aeb58b526bc116df0a27772d810348e8f18f080adce23e6c5c624ad4c37a3b8259f112481ae8bdb92a12c344753ff06cc7087d0e859488b19f060df93260e96ef0103ab392510171e77187d1ab450064e262d9482d5619fd003006a5d874545425c2720206a970b92715fc33a13ad33257e5303eb85a89c62adb16da62ce15ef5a7bbbf122eb76be6a81e0c568df064062310a14db2d2872ccf8380d53fa32d3ca11baf15678d9aa2c4d30717a12dfe811437e315d6490b58219a2dd1e9e07367b46757d9992d7d3ae8c00586a8a188e98a366c242bd3673e2fdb75bd7b636622b8e608b77d09f1407782446696b1529a8b5966adee225d26611ce5fd4ee4527adbcc58f79930ce17ac5f68bf5e6d229f8594177f85954eb520dc9a1c2ab23e1eac89af85a1bdd836f1367e78ea065d22d2c246f5b2abc90f00f326c38a642048928840e6651e1ac2d7cfd3bf1a12a616de8ccd24ab632878df21811454f964c0abb3b321b37326c32f3378ee05ce23af6a19a4ef76324c4b26d6c8c59e9e63e6886896a45dbb8346094fb19a21012e7ec7f115ce8f522b32529cc52517e0ef5f1eda8a9f0f8b83aaed64d4c100484756e0a9785ee5cba47d23574ce6dbcfff9f4e78a7b0d8a4cf45222a3c9b4236a057db11930650634f3f7516a2a1b7f7c81985f6c7357032a38dbc19e3778d1c0e42a84831e48e763e7146e1ef7d188fd29fa01043d52003fb14d5e0acee4c1881cc495c5dfdd85bda79d4f993c4e5a662cb352990adb151761c26e76ed1c7117260b4d77dd607d95ad1f0112d6688d07f2417f015afafd6666e3382b4524c464f0dcc3b35d368d0b86f1027b139b7ae6e2182d84d80d15d7e12cec3bbd8ff3569791efb1ee31c366e5886232ae3e3b907e131cfb60d0b6e23470f67140ca406431194c8526cbcf3ca1b8c14d790f26636bc8c16117fa40b17d732c1d0ccc70e5c29214ede0995e43e61eb9579ab034f135c09a62c3219b6d8db0b1893cb7c8428a117e51f839c6f3a1e3b02de240ca387a556754023c6fad64e920acc285989ff92caa73592fce5ff296d9664a29743680de770d46c9d0d6237b7549d329a938986c9ed5c71d1f9126cea5a3908802c69b676863b9fcc64a72f30882adaf35001e7e379b5d3d7293a0df64529eb16a4ec1fdfbb9d5cf07ff0dfb1943903001d4b4232f623d500f7a9bb7e4a4b73d856c3ceb9a17a2acdf78b564062d6b5b8d9531d1bc68c220f3e56c46a2168fb70be437daebaca75109f277f1de69e39fc3ba0bcbe2d3bc9cbeafa88003db8d870144e049ec05b40679382a1fc206d6d6686806464ccb917d219f131bf63008237ba481692c90129a055e925c62bb932e9cb60b7c5a6542e1e62de9d2c4190e9da70bb112edbb737d6a644be00f1ec90476c2b2a239d0dd66dac72dd29fd607154b06039b59f5598cc4b9f7f175d0f34d6af9a58a0dc00e542aece3870c0b72c05e7e144df84839e7f0077a566f6d05b48f39eb63615ff245114d3f980a2590f3dc0810754a92412dfc8d99a2ef59eadc85c6e59d8ad3b3a498dc2c974392f072a4489d5a03c13f4e1f03f17887aec9200974cafe05d91a1cb3f2aa4cc8af4e22b13f9b233eafdb82c31c33fa34971e8ec0b94355197db40ed217bd1c77419c1bdb772e5a104764f4f63ef011c484ac0792f0fb9399dc48efc9f84ec242c290b8a188bbd66aa0c9407967bdf0660e360dcae56fc88a4d835dc21b5f8c548c80a222b66d518a10e9694368e01f8ae65b7d611afb2d4dd0c1b1af0cb9624031146b7d4694564ccee23104aea52c03727a2821ef78ac153e9914330aaa49887b11be2b74c3c80525dfb3292ba8152ca77e933971698b0ab42f118500eb5c9484cd45722c4cb52d32839fab815a9e4c2465b002c8ee76faaa221a838f5e07c88768f80bfa4f00bae766053c43480682ee1835414721ab6c7bb113e3f58f3d7d779ffceac9c52860f0399bee76aa5f373b52487c97caa98153418fdbdfbf29d80db47789c5caf85a1404d91e8b17ac6fdfa754b3594ab693a9d9ffdb735d59aa2a7907cf2c4eced31cc7d35ba27627e58d4a9e69a01dd5c8ad292dd4d6f84aef7922aad97b4d1771d80fe710b806fb2f957fb2b33f7cf02f109550e6729d5048f318991cae3aa1c5e045fd48a1197b780c87d5a0d94e1fcb15604a74fc31011e1c643da09ed356708f44fbbe4d138c31e03e0796c3b13c77e7b3cbb9aac86eff3eab58b2f203ad6ebb405432abe84a6c075a36018ba0b75d58a3ceb41ffbcc99c191dd575525f2195a6f38c95224560898101d7fbea8cd0ebf844d03d19c49139893c6df14419c3c10a4983511b5c12dee3f5abd0e9527fc8d4f45bb526016624c160ac63861b7123b5965d08b2c4143634307d639eb0d23b093875f1284e0f51e8c8636681492d3e11b6598038cfc2da167e4e8afd61b379127772b71b7714b97a78dcd34fe7d6a107ec05efd3f2d8ee531354780ee2a72afbcf1cb0c93872ccc6b160751e43c2ed4c0e110dd2059352b3ee04b7a57f16a4b7ea86676f5211aeddbb387b018d80c60a17d26d9ed067efe108033e7d0fbc3e0a13ee3deaed2fa9be486043a37431d7e2073e2d8e256ee5ea9bcbcf495a5aecb371faa94f40b96beb7f648fc9245fa7dc3aa7d4100960a25b9b040e2c4224c89e08f5883c41130f3a8de52447e1846470db03b1508bb43ce1862e4ef835f17e3aa87aad222aa01a624cc271af1f8e1171d7414ced8afe5be04a40967b6539ebcc2bd9c10b37fd109a57cc44823dd99529a4affdb545e73c6d2f3f423f123e8533d894e52c27c4738f6c0c845cf4c19ecc15b6f9fabb851e7ed5b83f5ee54b06406d926557c721970dfb0146768df6a083fd7f57e152f887eb3941ec873c14cd6536c09209de6a1241d3783c7af9215f05e811f751c50651b7baef491cf6a73d6a5cd870778f945288d467ff8fd2af42ee0da397fcab7a9ae01909e846cb9545b7a89386b90063878a66ad786a5a9838903e03c359fd7139b4fde5393935a11193a379fa08cbd4b06d44aa3348e769e3456758df8ff24a6f07914a734787f3ab8c7abdc4bdf24dddc58925ed72a322573cac38468718faf90e435ef1107b2eb44355dc31bbbb67a75439ba963202e31c88b76a95d47714210b1e0c9281c9a4afb104e584cae58fa9a5417c83fa23ce084311ff2a540938a10d31711e1289182c20e58448dc97f87499c4184b8fd72e16cf95628bab0998cb938c234f1e55c506cb5e966ee897302dc7b7229629a3ead39c540f4fc103d7b45a2b3f5d4634ddc730277ca6404eeb5da7925769d6e3d36c2e8b972257ae5a48d5b32ad027ee7656f11e8632b9d1d1f378faf5d3aa5e236bcb96c25b0ea400f9d12046a95b67b50a5e0e63dc85d2c234e6fdb147a1e3eaf8bfa5427fdcbfdad59303e4b3560768a3639d91a7f7df901ab13a2c9dfeacfbb34ad953bd144a851a9b45b38e54d1c308ca75bc5afd3a31579c4d945598b8635725397d7d92f2f208a566f1d4ba092aa5eff9635041a31184f1084c010498126fa6a66943ce64f24e603e95663684e3b4df87d0772793a6300d10f7672a0d1f0c386243bc495722d9005401c89fda6711f824437c786b345d8149818ee3fe63df89f50dcd943cb750058dd8ac75378f49b6ef76f6f9acfa36263a0bb529f1f2b76d029216e219b0d8328b14acaad2da8daf8664a8eb63796d6191173fb5f06f51670c6a4614b91aca0cc0fce69078cea471da2c4cb0f04140888426834202d56c4c51e57d94170408629e6db1876027804c2f9de2b6114b1970fe84a1a7459624230b077ccc063f188f6d798d7afb9b9f5ca0e37ba54b8d9bdca9e5ca93d21493301daccdde07d1327073f6acab331593dd29353d8301a076a7a7f6515044590455a50686ac28a9b916faa266dffb2f7d326a0c09621cb22cefa13f9b91e051167b847b1d07d6e7753537a02814b995f3dc69c88b3fb1bb0395d7a6930cebdce54af6f310cbe3b4933579354ff0883c32dbcf9e9c174ec9aa907214e8ff7a61f8549886f32f2edc1546ade10c0317a5019e34d98e3ff247c917f67c1d148ccdfb6246370fab64dc677581485a2f9d2bbc53b73b484e865a1c8914eba1a5ae58a0167cf840e809d12bddc610685b453edd83236b4fab33ebc046ae8ca9475b2162a393ab2b15fa271462f2151cd1a65d8c462ed5114832cd10499301b86e138f7e6ff59f7d786224de16537b3ea87c50cbd6a0f74c1890a503bf82fae9d28d905e8a3580070ddc548e973baee6e244b433e40616b38ed93cb2bfefe65e2e354346c502b47640769022633d38ac59e49b7088df7d62d715ad538c6f6ebd0a32cf2903d04a3ca01fca37d77c9325136f0aca385df6e4f043a3ce0b9c5f1158b38b95ba9556e2482f28d76d3b20e908f948eb915b605eb57ccb6a65f311b5144ff400c767c477c761ca876c6398ac51489b177f0e5f5140f732607e55bf832e93dc7474867964dc788d85d3506342ea9a9cc0abf8476042e17754450ed80af37969a7c390b4bc5cb84a629eba4ce661f7d3b07590f34a85d146d363e717e80cf3740bbbf88483eea031a81da28d2384b152a55b3230b8b44b60bb90cf392157cb3552a999fd1c3ce04252639e831ce98a64cece0233f75c7e80e8f5b09f786c2219c3d997cf34713223f808ba1b84fce73f2b37eb396497872bce81c7ce47dc353700cb4f0b8babc3d758485b9bb96aeb0f094c262392550e52d269c18a9c54355864a9c7f39275f9cd37bbe04f3f7c511ac7b08e81b24ac236404468888e799e3d3efaa301798380a21e60a7eb1822082ba0a3d522781cdc39fb6ab0f3c8167b48a4f146bd187d5cf79bc025d09cab4f5732eafbb9bc235664829b6aed467a7608b1345bd600b9553cc2bfc5f6dc057a56fb0bf60540f3f4e5157fc5b269863399de0ab0073c914d24acbdec43e49bbcf829933593c07e7c475d486965defb71198973a46875a414e643de4b47d76d0922748c5c66d71e7a5c390205aef2a9346e5cf3a32db01a3816a462fe35896cc86ba92869a3a4529461410dc0efa8306e9c421029d63d703a565f1fd42a02dc26959961715d2adac1bad478a10445639d92e8e67e778868ea9b931076827bb3f6f984926b439ba695b6180a59d6584d45dc025692f24c0915af498ef213e6295bad86095a72249c2ef3ac8afa8a1c5b4da62f8f3abc1013da360b06e9085578d758251a4032d461ea717b8b27fadf3410fbf5a8b7834c656805cd3d1cab0b0f72fb37176381927cbfb006571323b5afff363437d62fb8f56477ab7942fe5b4284a048c7d8b42faed9f834c20cbc2dfc794dc10026f7e6b5a551578a5ba310eadfc8dce52eca544e7e76c4b2a4f00d21e42ef516efb0d14a3c6ace7ecc52257444390550daeff823058291a9116b3494c2a03065fb32cac431946e8d1e2ff86258c44a5dae9354eb3503ab8b1882d19c50432b6c7faf466850bc23daef631d9e249afec64767a67c556a6918f17271fe01432444d560a65b07446c1af7cae3c4ee23707ec07fa238bb8e4ec46b69c2e8eb1b205077b2c449e4bd5a340ae6a2ba8ba9e44e72f1c64d38b846ef074cea723326b8ed75ff0a09c9882b725cd3e6e0a8ee265e2fe77de86f9ce8e3268869a00b50e021d2701639a24d64d55bbf45d40088e1a5a8138264a4b7cd0abb773c75cf09e26ccd79682535edcb345669391c58a8ccf34bc37054cfd6a27ca15725023efb3c369bd93262dff7e3438b7158a365c68da10f45bde9c929ae4a60a8c25abc4231f5820858406eaa3f75da66fc58bd2802062bc828ac2b6d8e49cc02c65012c7c449e3d505b14136f624bc83e761f0637b7f429dc97622a48cb91b6ae91b6a485179b9633333ed505e4709ef13f9978991cc6b11318eca9813b750a9c2eade76fdb3d9bacca1b0bbf38ce40ed9ed6a32026271d36afbae4d31fd42856e2437d848ffb85e2f2958b311d6f08cfa56c368cd0d37317cadc65a4601053468f80f00c5e574f66394770cc542c6c38ba53e9945ac4f7ff47f0be05dbf2bdfe1e3ba91ed002b2aa6cdeb86d7eab910fd32d891cb3389d2b4ef7a30ba956ab3fc6fc9bf874a1a916d68987c206a31ee626487c8363be5e08f7b53654eae4421a0695dbd8a5740bb028952f6bc37aef7212154f52ef866e2f13a6057a8f8870c3609a00a4c1fe261be988d6e3d3dc8e1d14051c111af9c1f8c4783e87c85d0f45e146a3a81a0d50145ea87cd0be49748b82c5731097ef17eeddd0e900572cee64a2b1e5976583a2ead3814336326052c460f5f1e617e5e3926cded1548b6d76376f226102e4f1befcf860269d3e3217cb7a9cd5d2176bd84b98e0deadefdcab62c58448ae183784b703bb67012691e526cd1f28d2e8b7ac2eec8816872185a735031b5433fe7d93bae4a00132c561f687c60e311bbfac831e9157281b411bb567e78a38db08294b2bcd6b9645a779e06db5fd361d06978f0c8623e56c5de3a9ffab652774134c0ba6e0675478fbf78e482efddee7c9dc5ba02ac4efb0c49735cc0781af6b9343173cf07745dc591a213fd10b3eaf179be30d023b89c1638b5880064b510922e7300dbb947fd6e90802dfd65194dcbef30bd62a90a9e3c95f86ba13509d5858f8fa12145cca8c6c8429c20b502a29690936c34b1b522071a1bde25c6ce7f563799efeb0623705676d31e54989e6396c0f63984f04b548ddbdb6e62c7df17b8c01fab4b51fc330b756bd8bf9e0e2780090df621f0034a5986ba8ae48ff53069c766febc5a2d80c04567e42b2a37f98439286b02e43e4c43b6823d0997fb0f941376af0157e3e659c1bc364bdaa26f38af055cfde83d20aa3653963fe116108e028f983217198f670f832111196c25884cc5cb153de0d4307e354a4aa0c5cd5460e7075e1971193a63e03e92f8e718905fd93a2c557ba7506eaa91b0d50cb0379708c85a944dc910ef3099a600c08f5ec04a3804bf3092cc0a6176a96612d83de621fbf06b8175861fe81121e41b8bd11c81312f3a720ccd17926ee463d8328d8a9bd131cf22c441090cac99aa101770a93403c4a7aee939fce5cbf9580ba3ca11517259367b1b75a675b8b284c15404b5118473551a89de3bd775b34d8748073878bbc70f47fb07d45f5dedb9833dcaa323b34a8b90436c0392b1e83821f6f13265b86b435e495376683be1f1e357772e4c4935471d5fb5539b39ea38129f095307d679ca6d593105c4ffca1cc532381172ad40756202cffc86405079c452b46c75099b01a4b6711e75edfbd2f3004de3b73668e801057b07c58e24ac347c30db4e59b9d2fffcb84c85a2bb6020f9894c9ec6fa450ce401c0247e1de475f8e91208a86f878239ee948c253cb586aaf9a70b15ab8bc503b40c07c887d9cbf4a8b4373f50e7a85433baf4cba34e439e8d57aba48a3062d1a9fab4ad6d583b10049a0efe2614a858c34b23f233b61b21a62f09d91019cde5a0f9b38fda0689afc7144c54c7e2ec683e27e6008fb4631e202f9e3a02e513568c15500e292014a41c3c48107ad6396e80ac9207323142710cece4a57efb103c2431712c352ea5bf26954769eb61d109a0b48a36d7b1179c57845442923d0f53886845545b03692437cb5b1046b5e0c2b782405ca801ab9ac9d3c879ba5c4a28ce072bc7b29ac22f5e470f6f186fc3af4b1144391fd15b29b9564e4026d01dbd66eec5d241d0b512b4b6feadc25a938f1f37d2b0278f30bc2a4b6ba60d21d6e794c553f736e2a292378490e2e344e38dc7849dfedc1fc41a1658053c795d922e22e8b4c267cbb4f68d4da7baf878c3a404162a6188feb1a4c38bbbf3be855e41e28f9f4745e94c9fc6f8f4f3305d745cf9c06bf8eb6a8c796e8fe98c49f6cd3fd7154cd0a83af3a072b0d9731e78f630761cdd921446145a2b2b0952c90930eb80e2a538f7b9519fed2327c829731067878fd11f6a507f0f1310094a1d13cbfc33007b50c4f357e0daf584227fa366c0024d5be72598f1bcec8fa89f4eacede7e6c6d1a8c157065088ca27c72f197be5e5bec5289989c7465088fa634e2a42b814c52cbf019f7a7998ca31347d42e3e308d06fe8cc5cb958b2def8092ad13febc73b4d62e28d338d4320805be494f927b18037c0c488d587cbb259e852e9d880ce01fa3b0f4797c50be65a07378c5f4ab97897b97a5bf47e71b2d467a68c456dbd4c5caee3c2776d7da4968a1e26db8f7bbd4bd1b5622110fc4e32d9d974a12f91a52c373278e5b1dc68a6dfad218a17c23ad922cfb7f157df28924797e439726b8695482195ce211057a9dd966a48b5fb88b785f400233799f48e1097c76ad773f1e6e118708f3663528a0b7304e11bce009021a806d2fd3f11afa2da6dd167c834b55da3136fc83ccb858eb93ec46a5c2a5183ee0770bc02a4a316d18a05d9c1c2a9e00ff6d00937f54f2a6346255eaae9123a8ab33442558606b17d54656a125da03dd539b8e042301d5150ef32b4df0e99d70b781d697469cc3c878500d8192fb07125750928432d121b02ed2409247553492a74ac7c906ebcb971ee4870fcdfe84497e8fe34c16942c7de52f9e890d8c5e8004aaff43a0496b87b29e95f893aea82542f055fa015238c48bdaeba5453c0c18d9da4b34570a17a0dd9f2e9075f90dbf551a8d98b764e86699542e94b4de2580c7edd29d801164138eeea66f5c82c804b4996b0402892b1701c1abd23d207a345fe11c2a431055b4c2f9c3e69dc64745fc00940ec40e68db90d56e2f1447124a907b5cf5e99ea2cd6aa079904962201a6275961601c5fbd22712d265097fd072f216acd4456947cb15e2a2383477a68391e79f3368208ecb9bf1f1dc2d36dc6316a190dc7e4437861f9449f737de6d7c5caa6a68e5e813179564e1d97beaa94cada7de34d595378e5747940c52120e323e5149c1a5310dcb9e19023b5c2e51b9c35667705bdeaf688029d4a9843797d09bd97277bd7e483fca6d2b0002f71f2c114e6c1b7ab8b544bf8f1479e013bfd762f942013e933955a4ff7a6689bd2b07aef097a77724a3a537a1c23e7ddea4942ad47f9b4474682a2a83685ea095b71a552df8b6b899021aa7921e89484687809f434441d6d8ddb3b159f55707e6259dd621fd38b7a3b0321be76970a281e293e39ee8746c1e56e0c393fb6cba15de64c76e97fa77f68ee47a321456deafb4ae25ea6c1344825d6e5aa2b8553707ca32729c02afa0b432263ee72ea3d8c86c6b596cff4d081db8b85d238262d298404a440bcbf296814c072ded228a1dc762853152c1b7bb83c01a83407c2ce122dfa9f6d2916f0f2bcbfdf1ca5eecb9e8565d10ca096f0fd1d2595d8af1d9befef31ccd0567dc1f8a20141fde7b84124a42d6e6bf83e02b53f9556ec3c086231733ee9edc462e0b412dd42b73658ed290721b4910b9a0764b90fc7b4c584e0a3d3e50319d531e0702b1c5ea7ab0bbb6bad806328c9394048b9468461c24c78f6d562453aef6e121a47e0a416b637d966f57fc42ce0c1be6e9aff70ed7661c0b2b8ac5fe846765b81f9289e58c2b6170b09d6675f19d01db87ff1eb0be4b5c6bde49fe118b6dc13f6e766e72466cf9ce94eef3315b46bc6bfcdf4c59bfbe3da455b901ee00879f13428ba34fb5968a7823af38e7fec2a9925c0c09c96cd6532c211dc9eb0ad455474223bcf2e2dfac8817937003a9eddacab5a215b1f457c9b4ce1370d0b6afca5c1a14eb35fe5ccf399af6921819f304bf35f04dbb65e1a5504e42b6ab38e912852fbcfe92d8097a248cdc67e90629456a9563cd342486f1dd48e52be159bde34ce3a623770c19fcebae6027058e3ad610f11cd1ba04bc919b190b2d7ebd2af4bd64d2306faf0715b918766e6d798f74a9650a035fc0bc9fa892f528650d7df0a47c985906a17b773d20bdee9c69288a1e69389f66a93f74ec1ef8e2269e386556a2c7fba7b5e70f78ca2c18f15a709043ab7f418f5193b4ce6676379b2a59b241606cc57e9bd0c49e68156f04af8a80e5fa32162b3c73f6340eec9d7d54b5c54c54722bce84ce4de6fa1375fc5dbbb988dc7cf31beebbe29d7249cf23ee160d4f526c844295119fc053e6943425c956d30f9ab80e916f641fc4ebbaad676ff829fceb0660fe47feaa4c2d0e8b38bbb99134dabc296ce19c5da630b5afe58969f791a87ef38420518fa8e2223ecd18d0d2cf5374a0becf646b899e60f4e49b78366692130cd5cfecc1dc8870c933bd0b37d8ab4ae7fe6cb2c0414a9d44a41cbd9b347d67197c3467bdc8da351ba0ef19c7d315e732197f0e8e78491b53121fb0d6c4f1407b05c7e9b9b6fbc47c2bbe1d8803048de943c9e45d1514131387a847cfe6d915aa1e098c58891e28dff4eff314f7ec516485bc6b7111be681a085a929817299a8f2dc735fdc18eef7de0befd43096aa504f3b919c47180b9158901bf4a2d91ecc87bfb6f42897141570f4d014908c326beaad8f919b192eb72f1f87ec8c7cf0231932c24a1a94b8012521db5adf04eff27269fa19939c6be411dc23e50513b8fae7b7da464e81b8385b52080fec931fee04c010f489a5de4dd1f329c8a1f4a1dbb0ca41fee8d77f95855fd73040e42692f189378ec816595debb0a10986abeb056cadc819d531e72d51397aee59579fc9e3f0df13760e4c073d93d818d1ddac1cb90b769fa9157586bc249cd0935930132a3faf91daabbb2a8d01181f32ef073e732c6fcfc3020933a86f4082b964beab248c7883644b45263fa61b618a57e2775745812715b1fdd15e6932ad02b2c0a90302482ca2c38ebf15f06de22013918b159198bb2c9311bd22930fe6510f2c3a173c35673b0bf1f06d8ecf6a873f05c5b860b85b55069da36b1206e750ef5a7c06b4d399f871ae70be66b7fc2508dab98c631e66ed37582f35e4eed2ab6242cee46203f35a17171ba09817efe88693dc15980f0e38eaa48332bd0b2eea763b3d5349c58835b826ca37c22ef0084e0d7161eba50a1fe19bf87157fb803cb81c7f8bffe53115e40f4fc19daa81ea10ae58d73672f6052f2191881f41e3f82dce1a2ae1871c32f909a6e7c8cf4e53bce22e38ba5b9b123c56d3737b853497799f60eceefec083cca118a27554c04736acc157f8eff18c41345f956e16bb5b07779952a32fcece1ac76cc90def49afef160b026cbcd34b4f57b9914ecafa8c2b9494395861b164dc27dab3e892526f3305f8f9ecae458cc75179dbb7134006c21f1a829f758624d27bdf96d88342e6500306d26b004c2cc9467e29eddaee7804618927037605bffac69cda460690318e1683cfec2e5a44b3158c539fdc79fc64c23f696bb3bc9a81282f76a70d4da94804cb2b623b19630e61f5317a6d975f2cf9429bcb6d3074c68a9f32cb1588aa46181ba56833dd8b5ff792d428e8cada61fd1796ff407b7d7cb870a37b881a4309867f03dcb1f89523b75e5b6a1374d168a042943b74f6438e0d220b0dae13073914002e049b984b70250cf8a2aed9c9432cee6d520038da9e7d9c74a18d8615a8e72dfd8b54c32645a6acb09c2a02f6768b2f56fc175ad0fc6e41d082514acc334f8fad1a3092a22478f780d3fc3cbc9974407c8cfe65554624abaa02dbe23b3e80295154257ebe0efa91090714bd120464c9d52efffa3421192804e510c2373267d7f7338661bfc125adcc77dfd66f09092f82f43010d88d89fb9ebec18c021aa3bf9688ead928ec17c78132256bb88ca3ff7a2547c1964e73af730cb69ee116937e3a211bd72c91f2c57d8b864fa1aaba099a90368a64d92567a5c35cfaf06e4b9b81812c95a4973cff165cd4f2dfce100dc0ad3f3625532aab05cb29899968cccdd5dcb4782d2d8e3b20295abaaab3776336e8c476a54bf4a32534a118bb25c55b26db6b9b08cde401960cb4b28ae9c0b3da2bc75418e95072332096a0f8a94f146db2121132c82d842c3a1290fceb500d8548218e9875cc98864e261a9f1143812302386030a6f8b6ea8487669f455d0dedd3aab153c169d3b35fdc861dee24cb993e6bff13adcec278db4a390717b997d4db6bb2ddfbc33595989c9f44f49013e49eb093c03100000f47e90901ecb1fc64ab2c9e20f812ccea1f6f3c709729a0a67c3ee061d62e27f4a73a0ec6e624ac1f466b851e3c9b049fbb7c13827f036563d4e991362486581e96f03485209a1d4f2611c77be257a4f8a527d278dde663e8aac5889f919a2d8ed342fca86ace62e41f72f3be6196ce18eb7046682fbfb6e50dda64b916ff71f45a60e498cccc4e63945b5a27a429dadd1ddc9b8494ae9822cda57b8c7996a22a2b7d0f7bcfe3c324706597b087023cf705ab9e38fab9e30c6f3c40f802c421d3a5e2a0a995a40bea71704aec7cf485cbab745b426c1d6056c4299acb50ae409275cc6b368273a38e0fd859f6d54f616bdabab70ec60181ed4634c12065c3d234aaf93b20b03fac204f19998de12bdb52cc00b2bba006572c23889e518f7764c3ad8f97c37647c295f77776fba74745571bfaed8f738385b790d2fba634a30c2b8501cb9869288cd072bfc6a042824b72af9fdb0bb5b9e6f8e62fb4607362665c91680815880300b9f6033043ae76427d878cc994699ddf000e433d069366193673d2d029ed6ef2df3248df53865abbaa76d19ff4b0eb05df444d58f79a89f69b288961463f05aa23932c8782682a02677c9811c04d1419fd475ccde64cb120510ce3310ccacdf6e589da10bea368f02709988015f432e489b802845474b4140cfe4c521fda86ba7f55119162ac1cd46909a65bb9a3890f189438a5fbd5690d6f7d02763b5969c2c52f20591d066b216ca16459be1438f2c87d6b4d7c27198105373d7bff656427742374e9555f59bd5e59853e067ce05ebdb503834e2e61ee4d7bfbdd597ec466c343fb4b75791fb2735d5cae446e27d9509e049e2ddb30a04581d6e4fe01602bebce9aea7d0284e58e714dead15396da25d0d042527c0d1a3445b67f8170848046c7adda93846b866670280a24523933014baf83b5d827d03d40189e3c21ec30a8cd02caa84e108cbc1e6aa18ab53f43fc03cf9c20867482652d2be6004d30305adb7c2b66d949830bbbc762f2692254d0bc754fd477c1fd1c41cb3b87985364b8f401d761fd8e2377069468f19861d91b9ba8c19d8513dccb936e84fad23e84fe5efc7ddb5ac517d0d53bf6d0e3d123855dd2221d6ea0192d33e0c9163c012b03dd174dfbdc691100f7e150f548ed892633ce4337e6dcf8a7fb906e7ed1cdc03c96e8004d784cfbb1bedce2ea08f4de9bee27dc56a1353c72d9cfd2ac513a708c93b1e458cad2971c7e4f545b99f6c6dcd38243a14829940d264eabeeb1481b61625e25b087ecd136513aaab326e82c9edc45fc3c70dc670feb69f5b56fd979bebfc4c27ff8da39c0eec7c8c0aea74ce47944abe3d8a3502a7479c448f30ec87e2c954a3fc5ca9abc2da005fd68518019732cf8e6cced8520a5486b0b98db262886d29e2da08d8937594a565b05016f31b66961972b6a73bc82a0a8ff6e45953ee701000421da47fcd4139e39381bc9edb5152d3ad4384d411a7477fb4101f14ef0b9a5485e7c34b9965faca824c99298a04fff132b885660d76d6affb474ba33c9eea8d9a89068fdb29549e2d401994af6e97e1a47f1c66ff2bac848d642597a02b3dd757107091061bdb2562b3ccca0fd5adad56dee5e74587c553fd35432aad4ddadb4cd554f29ab10980f201e4f2133018dcbd72c86c15711e20077ba25d349d233b18bdb0d8cac531eef12dfa851fcae46bfc54124e17833cf3923048e9e385e53c5fde45cf1b8a04b2530676cb62abc745f17e4b10cc3110c8ea049604ead62be6b98b8ef7dc5931ee391e4cc2b14e616d85d9284a5755348bbbf1e68b8899864ef07ef7957a8af1b1573c607e2a957b0a969b89be352d6848042bd33e7409803af668474164b7b7fd46dd8b6e385d1bebd92cf2d537ee9b4f6d322bde67d4e01c9f34fadb3947da22610e2524045ef245a56a3805271f18779f700d6089020c3cbd027a6119f6853b5c95c58ad0d552802f86509598499b328cad70d4422c414e41db30dc49841e8d0012e0def2ad4233471be412845077bcb522592f249056258ee43c147bec5e56424413dc4f5ea133b16c474c8c6b699db1d3c8134adcd24f6e518854689a5138f71c1732a2696c8ffb09e87ba24aec05a4f149d37b0348bf71d377ddcefff8b3170f1c693e2954ea65d875ae1abcf0c415069e6a508ae78b0dc6aefa5c4100724d49f5bea4039b0a98cffc926cba78df361bd19fb95e650393645279a713d89c604513bce14ce24c08b06570a9e98731174dc2bc52e791faed47fcb9b3c529f07d06e8e3d687aff4120dc0f637b8fab4bde341b58e4dfc70c0b8f634cd22f4b600607a199d1ce1e06ad6771208be15810b75a39dc02ce93e9b6ecc9b3ba00eabb2a60a6de8828d0e758a02a02210d56f9957a5ed573cfd246efe1c2d1e868b5838747c33195758590645fb4a1f6ed056db9d1f2be3f3309113eb667cf571365553f243a5812d47a58396356b69c9f2ea8e7058fd1d926a990ff37d9cc486fc1d8fafe2865c6f0e018da7d8677c6fe87d14fa434b1b59f246e0f289641212f6ee0527913828186c00e1582c52438e447c1457fe5ac8b166ceee0070c58d786c1111410213d5b4858afc5a496c78b8e8bb91566a1ac4029c3a2087709c9178df19da41a958cc003334396d527b9d85bd4721e2bf396209353b2fca04ba124b886b0c70f3eef2ae441479ac1c821ab16f30d4f0f3752341d61f196dc2e4b5d94478fe7bf0cc95ed1b7f5d3281518c1088d42aecb4eba2801c80622fac520f4a556c353b107ab2a27a581f1c2194cd9b0f405dc689b55be4d46f79e82e85d5aa812b11f5d09e4e3a215fbb560f6de903da5ed4436c6ca76800194c0340ba0fdaff4eea81c332a093481f9beb338eeef970ce600bedb83ce11f39f9204ac9a9ee9ef3fa926a3d67d32bde059fd9d120308601d405e9eadb5167fc0bc42e4d10f3ce99f5fa84a0463d5412e7f44c57b63c95b08d2149daf056f3953f02969bfc2bc80dad0bb1d3604dabc03fe5c655ca52ef552939f07df4e1f097824aee755bd1f2f08e67565eba22f12b0fd9d71a5c7aa82b2cb671d0ae6c535303e2cfc9d58b5f1aa144789b295c8ee212f1129a6537f84a8e7ce5400a25e221698c2e06ae4d934ea08b3a1a2dccb5e517b8432e25bfc2f5a5b377ad9397f4d91a4250279da3ac19ed6fb26cdbdbcb635144abe11cb6635fbaaff39bff9b0a818d5e1c98584c6343ea5090e49af7a49a730931b9fa644796195bb013ec8d9a99bbf5384784b91b4a6f65355797a27f7b8856eb8e1855f3c1807a4a9528c0f48f49986b1fc31c01f68f5e4ee268234efa30c2bf7191fe49b8cc80c9c936b4aa04f75b654e1d1ba549f63e6874daa948449cb443e4369cf2eb566495448fa52d3da8468eb0a2974fa99b9345d327bc39dec6fd25450dc24efdc1389246410173735ca780829b2fe88ce06ffc04f423ad607fee7870bc303b64ec0fa828b6cf3d1829903c7382c83b5e04878c34d215db34a83ab2b4619bbdad94313fce97bb62a1864324710515ba2f1a792bf06154d68eae99b0ecc66b1ff55f68ab241381580bc19a73ca1cded0354e42220edec584152b12b098c82128a428ee7885e68f6d66ff73c834971523b6793be2b86cd60ff3a66cea0284d8b972b32db9888887ae444fc396a55cbc259c9cc380c37641fad6dcd9f14310d1d265d37d08eb176e36518b5fbadf63960e2abd901cead710ae5e680e253dce0ce0833475eac3bf67ee2c84e07f5c9972e05a4a82d278d3e288362778e9a730120d19c6180136201b5a83eba1ab4566e96f2e6e18a15ab8e7f443ccee43d462e9f1a9ab190ce9668c5f45f70b2543aaaf00f88a9c61aac89d1519fb4d22a4937909e070da6278a24e23c4e36a12aba73ae110f0273a289b6cef5d380762dac269694964488eed71386e7fae4301ded599bb2f45b828ee40a2245c652f2a7c96d51ef93da0aa48b47180236e30b2d4606e7f155345d8a211a62cd4d275188171adeee6c6bcfeccb092cb8a597cfece96a1d4ec07ce12424887804bf1fd56a285a474384caa322a7c1a7a54bff48a7920a8b179d14022dc8f395971920ca2c35b40b65204d83867f7b38c8a0e842dd16b39743dfd2752657bb08b0af965fff00442b120cd81d3f4d5d2e6d9a14cb8b29c97226188d10332bea092a4174ac7bc2e75fabf87b4be1ad22a2fc76608c1c1fe8d7875822930c407fda01e1bbd1e1022e4c9fbc229c0375d238b08e883854bcf3a64e5c868365dd67199852d579d64816144c83cc5a35a9b91c55b1c634fa4d1a05fa826f4e63440d90dbfe733b41922bcbbd892e999076149b73bc1401388671dd5a2b194f12f9b259f4c27913191c3fbf483f26d26cd20bb40e4f10f120dcb0bf1613a29d665242d314fd71d64252be28681d9752545748ba7806f8459bf04445f1259204d7cd7cc724b1f029c5ea135f3b7dd7f7dfa4cc66fe843bb6216b5163534252d3fdb2ef0a290754d545eb68b69a373cc950aac6617845b7c3892c0d7e6bc2bc09192c4ab2a646f3700edc4dff31921e76e74ef58448a2e3d0826d63b8af95db75704664f97f6a54486df5d8a971724757aa3fcaf3a38aaea79e02a6e2ab28288ccab5c7950cc315e396408dbf1cc338c95faa86620394876d0210f06c70a5d7593087632908c4bae40d80e889f20e7584545394223834ae253327aa8b157f39fd403d2271eba3cf1d9869af49ff7c888d638d09af319e07d698d27c6447563a01c5ca55b61b256d1f54f523a2f7d443397de84dcd3e97d678e95787874a682bca9bbbf127d2df4716e892ceff2656201315c3393b7aac4c9580184d542c7f1ae4802503d8d41ed44009c9585b99eedd18a4b5a8050d4bf9f6f19f00e718949bd53105f651e51b6831b40c92319fb2b8283825c3ae215be1bdcb0500424247e0cc65ae34b677eee7d79e2b640fc14bb731936c6dd34f7fcdc6b0d02ddc3cd7f57aedfcccd58ac9201305b9a0a02e3117e7338cd2d4fd63f1089cbe5b364211a9ae5e236f137fa4fbe5562e22c05a41158a98b7bda158c0785a9499de69cb6518e305d1833c8f07d5bf9f2c845d89f2e167a0aa40ce474b5053647516e2c7c353990fc6611d882b4bb4eaec189e8d2a4473d73bcf588054105c59d67f5a61249efc49ac92831c1531cee0b4ba1e957e036a3e24dd5d54b50188ffa8c214f8f093291b89207a24e8ad72421f85e1bd50811a758c4489a29388ed4f136a65f0ec1f9c1a0a6f7f0e9c4974d0575fb3a70a6f5d6254cba74e92e486edd9c7738db622a6975c3fc0ffd48baafe90e814fd622adf7894500344e046cb7fe5806904a7b0632d4e84be99e826e5272be06213c6cd8dd88ac0cb2587275f6c29da42706850190bd29ffba32ceab097768dd72cc3bda0541dd221cee1609b9ea160525cbc189b220ec8d9b22d2b20b2ab745f4692601758efc6f2b30b99d376f47825b3c7f5b1c5fff064222f0856c9d27d29669d70c1d0b706522982a9b42a7532984b6481e02f204e80db79921e72f4728460c7ac79e5acdeaf2f4e9239760d602a299aa3b592aa97615da8b82a59c2c06232dd12dd7b45a7e03f685f22f17cffd2099a0600eca92967d4a0c6bc81404b1118b1f7abacc5794197ed61ff830cb6864a216d313525c1bbf18526d2de58e3c024bbb501b7804198f168be6ec2094ee02325f9b00179725c4c3f3ad4a0e34dc0fa2f417a4060c26553358114e764c95a78c818559e2481693982a9829d7b5891d7992450b41aa6e7a57d05298571b6e812fe4d5d85a3d10a18437e68517015666d399c576ab8563455ebee5b2339009620a5808b6ea290da2b28b437aaf084e0fb8eb2f289eed640690f2b1867d4d3dff2dcfb0d8676e0134d3ef49a4e2e524582db88cb440f53877cdbb36752e2cd3adf0c3126f889e21f50e0ddedba1550d7df95e2ab5ac55ce1389e9fea99fe5176a587e736603a540fc1d4f8d6b9ea582c7917062454a3febf650412a95149db2d5ba10d4bb475041f3c4f4e3ff684b0c14b1cb51c50b2ac459cc08a788afc17325f79e3aeea46839fbc44809c877e3058acc81bf2b831d164b94d3fc3ef00d8ef76af870f3ebe1d14b0fcd5ffb32e4ef370c499827c76082cb174c3033f3734b5605990b1477e1d9f99ee9e7ce2ba9e906f55736a216904860f3fd2025b01b133bc51d835d0042fec47a0e5e89830d20dc1efeac4fc09eb86bb46828ff809e7d4dbdd8d8d809ab2381290dc6b50a6ddb1dffcc43e00b026401e871c801bbb39278d8e457525f88866d5f50e60a05781ee25f09fbb26a8b75e27ff1d37dcf6fe24191d3c780ff2d5f1b7ee8295f9ba1e0aab96f064c1df0967d43c570622f39a092d256613f69ecac4f0cffa453aec8e0964684c5a369cfd0a3495b1389791a81583e9702abf1082d701b242267f4bee335de714c8b7c1ae3f3f29c6fbf29effb4827ff69d92eee3afd207896125f35527073e11bb8e08390b4469b763aefe12f1b7590bd0ea22191d7d51173764fa8f14e6274f58e13506a0741a6dd8d61e49b40a9ba83795615dd95ade32c80d12158df6964c76eb8e37e2ec52f29f178179c333017ce4f69c06d469a728383c7fbe1b6cdf9d4bd40f0956edb7d0e16c4955686bd60f1c0ff77aaec3c725292797f9d37a4eb0047021c5de3593cc64c761f10d56d12d4c7156077d159e837abfe058b14fbc36c5aba46e8685182633da287167aa288a852e2f2768e9e6e6bc06ac01f1cd382d1298451bf2a539d7c4da6a9881c69bf3a99680ae77f31ffde16ddf74f11481465b0bba76c2d43a5f2fdf329f7a81d076e10c2bad04ffd60a72b5958a0d17074c4c5bf31d02b651bae51d14d18aca473019acc3c2650709c51d2017e29d1b6921804d4f73200ded029d99aaa0528da31ab5a116ecff63735ab51f14e7e2404cf1b7bee886100e1e5657ce7a771aeef51009dd6175bdcc6842f321952901ff6166d42884c5ba693023f0217023abdd44ca14cdca31a19a974dc38803a30db888adcca20a807918f2b908f930f08897af820f271a21e3e7efc273ab55a58ab496c69d775dde944a433cdebaf72afebdeb59df777a889f252a8cbaeeb5ee0598245de7bccc8865f5ebea2f905cdeb603167cbf33ccfb34eca53792a9597f2bc94ca53755caa5b711ce779adab89106575f10ee4aebfa2628c11a654abd4aa634dd55c01cd1b1963645d08152c8c55c27583116f3bba68316adacd0d3c7133d0a433a5539ff2a7979aa913cae35428146a5e50bcf5fdf6c897ef9043c518e3f5bd0ae87ac59bab39638cbef226432ec5c2f30e44a53c957752459597f2bc946aefa938cfeb54abcef33ccfb341490806de81a694a7f254aabc949752fdf25410a23cae9b1e8487107a9e0ae1d9614a92eb0679c995abfb5c2eb6596a59ee569b6db6d92ab5ab5aedf52bb5ba7677777777cbd0414d6be32c76dfaf5fa6582cb35a35b071c067242b58d0b0945c1f58f196244934d52b4df09830250a105a6248c2c41dd51d75959d3b0e85ea4e4143184025140ac54a824245d9218466faf4aaaaaabf4eb1b1a9a2c9bd7e696aa31db2dec4f5708021355cb09c6212ed74f289559a38394175ce4583e5c449eb0c6fe179a10a0a2bb851813a20c38e2c5c98b2101e4278588447090b09033e578152c29627a8805103d6b02cf502e42548c88b096904237d695d3a21840233c5e01ce73293fef91624233119770c61324913156cc88dfec45593884586081e2253da9022e6ac84346848af1a9252caa12021a520a1a1a021a032b42025290f9576ca9c4b9860f105163360d76969751d193bc428729465092fb03461247bb264c507c5a19742851a8410424d91ba703c00ad82a67451814704cdfb4278ecc2300c5b6c775b443e7a2c292d0d5999e23b4c0285a5b76fdb77c17495c76cdbb6c9246ddba4847c94979931fbf7ff9b8a09737201611761be635b03651de6270c7629e6f1e9677f2f3722dafaf0f881f23c364618e79c930af82dbcad8327d82345dbad0807827f973812c0ef52877c0ac2672e1f8e04f02b0af2ad0fefa8b4fdfbff1d4614b6ed1c6f69b5a4759c6a75dd932b05205de9c284866ddb1393cee9b86f759dd4af0c834abbbbcb7128e0a0d530b9ecb2275f6c6c3efbb76ddb66ad5116adc8f499ceb06ddbb6fd833f6bf10149cc10b6c4eefbbeafa3d23ef23aeaa35d47e542d8799d4f5ef420e430130cb8a299d6a839618a858b9d3a6e72d885619e1cc4b0bd969b8be2b8a5a9d42d794a4b124a6e9d384d9266f91dbaaeb561b87cfa1de3a22cfb28cb3a2a919094945a2d28509a6813b5c13e2ac43af621b28eca252b29e793923e97cf98fdfbfffd39670c930edaf80186a88bd0d22ac9832716d7994efe15479aca035cb06d779d942c69dbb66dbb859934da08e3c492521321989ca0464a82972f5d3e5f31cb944386ffff7f0d725d23b661415369ae887669a9b66ddb4ba9fecb79f550b344337d96119ed4b66ddb595e13452f086d92a020dd3384dab66ddbb6b568b66ddb3afcaa2aaf57fdf5ff557f40abd55a86c64867315b0f18b7cc86a80dec62615f5aaa693737520e3dd1ea6cb0a839b191524a4ba57fce29e5e9c4713ebc03e7bc96148c3a09c83a40de81495c109050124a28c618858082928082848084bc99529a4049495aa02439290b04f3f9cd09460b13982cea15370f31d2a5af68fef00e3c5d7f35053ea61f6882e2f365adebf56dd5566cedbfd8ffe7acbc6a72d02e69f90dbbe63c02872e74ded8ae90d2b68989a2454e4e01f6b921c03d36f07469f2399931fbf7ff5b8c19018e6834101cb0503e4b018e6834dafa01530e785d7a5d00e048f07d2bb2e0ffeef76bca4113418e6f8bb5a942530552502bd90a18d1f4feedff121efe3fd4abeddfff6f2946b48883c532f8ccc1e7ef230245d8b68d25e90182bb7ffbb67d39ad00297d30810f34b56ddbb60ddd08a086eb0677f9d4cba72d0d2208f2e910a5d0f51337201efcdc5d0eb7c0185a11aa5bdbdb0264681deaf26dfbc64898e94a98292634cd99fa6f33d05acd667fdba2f81d7e0c9694ea936499b668391be857841394491edff5e14c78d28cc777f3ffa7e1216896b7824791d979dd5ad7ebdbaa554005aed0541a2a5c5deb7a7d5b555555f50ac2f47863f6efff373cbce968618f11da25b4aade6a55952a67acf00a151ac2efbf48944e1d37cfddf397cd4ddf1c77ecb76fdb8f21ac5cc9fdfe7dffffbf5c37b9c9cdfff2dfff0398f1edade03963cb299ebeefeeaee5ee97c49a27046c41a4c7098460d8323bf6dbb7ed5ff9d7c63b31eab84c1c3c6da8dda3b80ed519f5c4b3b8ee818f5766dbf67e77776ddb46038123e662befdfbfffd8502456cdbb66df714b160a24863f6effff7ff1fbad02344969a1d6402449653b8de5dddffff7ff9c4b74d45c6ecf874a4a05a7de3990d4766dbf1e9d0f16d0ee71d95d9b1072ba020f855900dd28a05c40a12621d6a3370a60b29a52a4d9216e129ca296d9a07fc1835ade8e601db11812d9e38fa316b66523555c76cc3545555215408a1c20dc156abaaac91a215715fd4bed130a1c33a970c442adf91f8fedf7049b82f53abda6adb9ac6ec9c8607260c07b0470bf88ca4258c4f39cd60d0b8e1ac0cf213e5b30d67b72022be1a359044f30f0e2981f02094c91899c92885646236990d88cc80384affc848b9d98683c9191c6cc3b9204a192994c94c629b5094325266030200122df0e0c60f488408f98932c88f7f62369c5ded4072041e75004fd75ed7d1d5e83a7264747421ff890c5d46f898e9c278845d100321cd214f27296f4e10c26d8756ad6a21ab23064556095555f5590c361345a24a942059a35476ed36a7a6d1e856248b668e8c9cf78967dd68f246cefbf8878544817f667e66d4e8105e5ac96d24b66d2646488c8e1cc960db323933a7490665bcf8cae818b56dc7c82b47030fae817e5b638416b36dd47270449a08e2860376f7d9d8f1d8a05d62d9b11fc9a2688ee3f837d7b0e6544293a499f5d9b66ddb36a1e5845cef7777d70abc20bce4552f6d4971d0b06848608800470ad062dbde42b07df81fc24308e75c4283039519ee2a1a942a55555555b55aefc11f4a10420855c110c19386a7503201e462fbf7ff3b82d1658d36d3c9e97c2a3b2611e7c28952bf1c1def7847e58561d8628bedb5dbe55a923a4f68453335bd0c82e778474a89a4fb56cad3cadded8ced6a6b23e5fe0b29a1eddfff6feb605a2d0acd644b850a55b3394d39280595097b6cdbb66d4b99d921261b9b8e0b079169a8544e1e758a0600488204331808201008825018c90239d133b107140012455a3852422c342a8d04e44069281a4d411c07510c00210060200618a510724caa3d3b743183769bb60ceeb26d0534b614e6ca17022556e12c87d9abb9a859603f2c4621fd23cdda98cf2b80e0061b73904f2263353836308114d1efd6cdda80f3651cd9aebae0b26375be7fdbbdc7f78c105f917fe8209398c5609d4b273cad4b2ced0aa1fc6fa55748813f872f731939ff76850a762ecab0e0a436cffa1925ee152b521347224774edcf18fbfdabb9f2e7bdbde26728a0168329a5d6af17e96337b1294293f39b456b01d4d281e9b3b8cebd03690b3e6eb93f8fa60195aa2707d881f255387860a9799bfc93650945f25c3adee06393046580c56dc46035365336b49d68f37a8d3e7a56b8311367500494a149a925bd1566d8c0bfad1d69d9c950d8d913b9a4e9b77a781f2a99b4ef35d640c7c8af5c002ddad0bce233ba1a67213ba3622c080147a10cc0c28eaa81ac207bc59ece3a8a80806527b6a750075e65dbc37aa67a25e178dc0211ae40a5ea6aebf8445d53c9fbe961318fb601d831953db8a44104a24ddba21b63dcd2f5f54d7f6800168e744511b8d8f8bdbe2403a157ffee18801cee1ddcf578d3850d7fbe5a0fe8979c25a14fca4635289cca689472d2fe4b0a773467f283600e9924f18c49c1734fcc3683ad723279393d133b2ef01b343599048cdf09fc78da121babf6757a202dfcde9185c1e09806a5d2e782ca3463483f12b43913abcdbf4d82f977917886deb650f50732bd2599e0a5094f449d4a08eab119ca5f3af50b43a90a7b0d535b22709bd693a2db2dccf0011b5d37b2fac0ff1ad644d8d0d2a27b45023f8f28898ee5203a514c629aee94a235c48e81b33c09f17501881ac3cf40ba5ab0a83141b33fb4a237d6ac5f21d5076ccab886c68fd144786fe270356f1c36c4a040be477c27554ee5f7b26cca82baae92f204324419b0b1a909dfdab97591b2ec4f269039111b98f5f57009243175c2a311d2168086f70f132428a72ee0c7a141cc727c236771b14557bd211c800475c8454160cecee0e278311bbb42f2b78971c11158ca0496b433660972bd85ba5080b0983c53cc5239662128c83e48d88d40ce6e139ecd943357fa0743114e7e25321b67d2c23875b4dc5df2a1aee952f35297401614154376d9fc8042a62b47dd86460348b40e00aa9fb058a2bf06a31b27accaab32149789a91e77cbbef41a7b11eb8f3eec4321903764133ab2bc782d43182e2eb5773248ce420498bb7ba003d6069bb820e553d93029ac9bae1ccaf4ed218b8eadd0a34308248b85b88b64cd93d55f65faf8d4ed9369d5a7dfdc7ab1b7935701588d6df8d7c63038dbe138a5acc77ac430e041eecc236118bb20abd6de11a466ce36186cb4a352a65fa33a88bcbe056a371e7a0a9a6a284ab28ab0a402d5fdb08670cd17a5c9d94fbea404755db5c4b49fd78d6b554fdb03b4bdbe0cb494aad3f7d29da7e7cca9713d1de2997c499628ba59b6c29fd20dc2a9e53011b9218e30eac35543d811e65866abb37e178af99a8b5e2b650b4f2b9d9dcccdbf20ada11a7084420d4745418b0285d38dab5abf884affc7893e2415a1dd0424d3499b50f32c47e3a3b03f65a9124311cd74d0defc293d36f70f7b93d4032ca8def9539ced1a33d9ae1c608df450c7b781dfeb698fb275e0fbae56af03bb394d791bef25d7d93f15669a06caca4aca109d1ebba42375da71dc41e1d7214b290093bb6cd49de04582c43a8d7df9d8cabd9964dd8d6f74fb32e5e9487e31c1a5f8531576a7a38330980ff4ea9b5dd330982b094655f67c4cb582b79bd3163350983886c072feedec4f1230575588732ae1602a5179c6cf117713a008f3200fa6bfd35e6b2ccd958edb28e02f7ce1868394cf95808b8fc18e85427afa9920c0cfa41330ed4c7e78fda9d8511e772cf72ca96158ae3d3b28dd2a64d0fc10ebffceb4730d969c425ae140b25a467d865eb2b10c99cb6b998fae8f7930227584332ef1dc085d0f64c63e8ae6f34321f9e1006c264fd877fca626be00032f5ecc40f8505e5e8cdf740badebd5117033a075f6bf0b9994ab21024c1e251b37cbaf31da0c8f05cbc46783a70aff1fdbee7f483c24b973acedc9ddbb7681d71c8fa9326085b4855988375114b292d34263ba087e96e22e4c3d994504212c2d50400ae6e9ab6c3edd115d4232255c881722b911ccc422fa1b0416b148415702a1beb3c4a7e7b6a938cfdf2d869420cc91947d847ce3d5656f6c458bfb74cc77ca247fb10174531dc431c81a2ee112f3e7af059b6103e8dbb73ad494c6cc50ae6fc35bd43163ae8e8b7e9efa9d2f4d1597fc22152d87250645d99843589eda17fb60b4ef935e8cf9e0406dbb7cb31198a41234868a7f7b28816d7783d52ecbb30d041032f3451c8d8ec1976c02d08fc3c958e05ef6c5ad4e9206ab15dc81bb8ec76712f69d3e7b25bc7abc9eecd8ff7f2646985cd1d7327119ae6c6a35fac5bc892ad3c0cb1bc1c6f9a11b3ff9f3fb2fe92ca16dd803aa9c477cc8fbef0e04fbab11133cec3bf71500786d7777e04e61ca4335635afe12d3f2611df379e11fb203a930f3466abd27056a88a5e8b442ac3eaf2044e243118d7a7192919a930c4c294522c90c097659ac5e324e05d5a173a02a2347bfa8befa4419aec6780c7919fdff1d255644ca80cc1c0ee4b569595ba56ccf4ee4fcac6dea1c7cc4567ce7c028607ff81b1df21516a7c83adbc30c03c6c941fb4cd598bd9b88c6442f3dfbbe277116476a60eecb5d0d593cf18edf9bedce6fc91a99c42fbe6e4c58c7afeeef01b41addaa2f569ae1b35aa4d110d2ab04688ac9eaa941dd84dac451c122cbeee5c1a4901714e20c40fcacb0fc34bd8601e5d7ab5f061e8a7833a43eb71198c61e759e2d85eea2b35a79e9257046a8cb47dfb4926c985a2451bdbc6d0f574cb79712685fea63d5393cae17e5ef054e1901876fafb1d444fad7071a369c0a3a6008f96556f50c4c35ecb29de3f0b93ed25e36aad52733f20d64266c11b7e278c4dc4b197b7ddf91c9d476ba9c48b74664e8175f9cca64e59e784b661544f9f5f2bcd8244c44c15b9061988b01f01d81f48ef7523ac4a6c2e6081b03aaa6ad3252e6af69c7b50dfc3da48934ff4b3602051b45b84cf0b66c4d07f93f96db354500470a8584a56f6354c9cb02bb9f1bdd0a2486779e60a576723971e8cfa5ba8b2ff0ea51a454210a1bc73173b130e8442a22939d18ef5595bfc3d7676cd6541f7d0e2ab82342153ac428c80230d2ccd83781acacba99954c63a72b517733b014058dc404321abe93c976e8b98be8c175931d65791cab8109dffaed6963ba3c1b751d51caac761cb660396c7c08b0dc6c30df4dbb60b516045c0ac6ad4de50c57e521b0f5157f44e30e6bf9df49161f1670bd3bd415c260176a3b2a2bf72242b9d5ac06fceffddae16ba49b0237155fcf6d8185143252afc50f8d08de8df4e44b770e6e14894631611b899f039fb8c7907584b06527456c1e69160ff517f85d847d61bab35830900f98568db6593e10f2474f060f034a411942a93441b9221e8bb3a3a5f3c5530bc56191816a47a8865b67a2d3caf5ca611d0f2d271e1cb23ed10b760feeef7960f530b83c2995f9ce870c4bbf8ad980190893f3b163efa746dc5f84e7281153f8667db8d881044d609c901d1ac02b1bb353cdbeecfc2bec312a0cd0940f52b4274ff97d83824cc4340dc26ad01200a90a8cb1b74f70c9f5e3febd05da3440b45484b87e9b48fef10504a44d43a441d4e5b7c848ae48966cd7a81d5325e3bd3c4bf0dbe5b64060cb0c4161054b67dab965e0978067479ae7aeae6b7c5dcabdcc6dddb554a158dda0d6de51e7aac45e8cc171e314067183b5b5956da4c6056983ba3d4824c503d52fb304b30de9eee2a1de79883c8e6132a8989318f538968fb6855bec8e1a85c109b087c43d1bc0699ae5760ee8ce7cf9a3356955c3efee02d4412d0b4929044cf09c41eb407b7c878a527afc37baed98cd04815e314439e587656f19b7903ecc7d813892c05f38b8b820030f785d66449a6ead43401d2961a2b13a4252e1858a58f907ed9a6001b6c9c325f4753dfdb966f4e4edf304ca61605993993b83a2652d9d36914fa763a01d11ea53d4d519b74bbc8f50b3034091558b0cf3724f1b5d5188643177ad6667231c4faacff0e2ac54e4591ac6e9df68820fd575d316f72a7e7a2231eea589c0c5db733171f65f0067a68387d42cab69e63750ee62104c4be27c6b8d297921710990d3ca9dee5239ce6e2351f1210d88c6caef9c9b38582422d70c73b342f30c8aeb94d4325c80344789e837ea337811f131e4cd9a0b3880becf6b1a5df2ac188fc29a04934dec44223aa4c8289a5bd7e051f012112009a128f19d7ec48a6e881ba4a65bc95a19ab647cc8a246be503d7b5b0896f4def0140825fcbb792e6c6a3706d8bc173f6a5c7bc901d002313ca9712a901c1f746261ce549594e6292f87231366da1cf29381a6feaa5d30a7d13ce7c06a65ea790511aa82a617646c99bb0e073489ce6dd6331f14e250b03943b4effdd840c867a32d28ac851ff4c997173608d0f0215169a7a902917081a83175b3d55000421db8f40d75e078d0303cca5a7783673e8450693647f6f213d540a741811b7580ff2188e615645d96fd6f20cf315e4035eeaf8e15afe0557dfba0c1275012b3c993b26456e0134def41f02c42af7e63634d7fd0c4022e030b34bd6c2eba47e1910d451c3e00699b794b05ba1c93f46e174d2371b201f9f99a4ac20b79934391a751c577e531d0c40fdb6292b442fd9d90fabba974242479900a4e7c9feb27aee6df095608d70ea286cffa02f7d902eeb3e401381d13f2f5b55be11a6baacf1aed75c1b47e2e94c7454c290bbdcbef35a977f3a299005a2ed6e292d5f7aeea0ff2f79a8abb7ad4d6d13e72abbcec3ad9f0690369cda670bb43a353c847cdae36a494614e4d6c8023f05362365835207fecfb51b53a47464ccdd2aae0b0aa106ecf33c370ff111ca1710f3b3293c33ce83a9dc8d7f38b549334ebefa4877dc97f7cee578092c1b4faca8932338495805f177b4f1d2c40cf61cd4c5e7e3f5e06d4ec444bdfaec351a98a4ca21ac4194695710eebe0fcb6291aaaeae00d1768186be6f34815047c2e3b9abae599194c6621fe48f25bd2c9d7e5366ebe0360d547543fb96c2680c9fa07d3470efc9b6dcfe2c29c2f4cd78cd846615654e6180cbebb1864f1f60113cf934cde3f2e2551da8214fb664d2900e845e28e9d67fa49f98417674b6527b96959d9c4ba5631c471454b21d598686b2d0407d2927590b27ec88beb57e96065133517e2cd6300f63495ab509070d41dcef79d8a97329a469bfc25cdd2aeee30e24ee4dcff53238717309036bfb869c933a1fd93cb49cf4dcf0e1e464db639ef6ba38ffcc157887d1f2beda59896d79b81e86bdb76b86ae7dae3b12a910b875ba10eef53360988110cbaf0319d0fb03ef2e578143d6c29974b797b4605475020033e46abbd89aaa22d232f65aac96240a6aabdc829bcee4e8167ba70207cd7017645580e06b23391c9b12d3917a8996cd020576e013930038a046a155cd7196e981adcb81d9e623224fd850e6a8339494db256a51740f360966f4c4712981827c7b50780ad356d6df0ee1a1a87eb92c601d1e1090aaa82a0b70bc22fefdd92a80175a47cf7310688a1447ca212ebe508496d854a8886a0d3e518dab2ef7331ec191c29873d5ea9bb36afe05df3705c329b9341c8098a186b9d619c0827104a21084d72b9a4126e51d3c3fd273c127c06366e770f47a4a8fdb9b19b38ca4762ebca8970c819d1f8f3437e4adf64774081db8b3c1e9ebc1ef26b60cd48ba1e56c6eb9055ff03e8751a8701bc6a43e7733eac5a2cffe3824dbf37726178496da00c5235fa1ae27201037aac3548552263e73b342f6eb34a709d5e1f6e1c8f3afbd1e84c4acfced9349978029f677704340bd60a6cdfa7053715c5879d0896af55b36f364f7e244be3359e766d13ba5bebfe9b6ffd9cc12f9a0d6d0c42b851ab735170b97f9ddc1f68acde38c6a542b19ee711d7de94aa003ad27cf7d8b3af9644109b8fda4c21dba6f595ff53ef494bb973780481aa12ade54defcdee97e55c094eb0c9d80d526bb52bf2bf06345091d730ee7aeaeeae7e1e543bd6524081466347b08ea98bd7cf9a26b0989358f520be685e2e93df711ee9a75183bd7b596b0ddf85956197efc9c04122fc80374fc9abb8f96f734feb1c9e05c73c1612127646ee8c6fe4e6c799e2a695161353f8195222675d9896c9dd00d09e738da2a085caa856d5aa52cf047dc38f4f0c95dcd721931ec4e56d98b02c6e1940e78d050596f603ab22c0ce19d015c55cf1a6a9b3c7848cf17b63bd8c1f4bfb438af47d15a3f35785acdc0d771c0bc7ee28b1d6df80040962253ffb3e7a4669b63b2b6f2f7c4a26b13a4dfb30fee23dca204449022227fd81099e3bc70a489809301cce27015e6c33a9dc5678a1f393bdf9f2933db396ee68cf38b3d5714cd39c45b37dac783f14dff0f2bc54adcc546d617bb631aba6b787743e1007c561476cc4e9f735d4af50c031edc5078bc498eae92cd40449145158b9eef94d6ff93eb299ebdb35877341f67ba002c458b5b129466b6382691f55c181f927ba57e910707355210e546c01e8fa93510bc523787b34b65ac0a63a406b1b2feeef7880721c5fcecacbcee3574ea1eab81e10a87cfe1639b156cf40c9815cd71eb0abdfe7739151d960d7b398ca821931a582641ef074bbe961cc7ad07da493b57be7619736b2904c8054c44739090e72ee34be5116277e24d00a86087adadae8449394c4d743b459f38de05cebf0c0c9db6d1925c30bbf95a9d09225560d9c31cb8524f014522abdd64ff6b6c226542e597f8767fc2b266a4d13f4965d920b75b7bbe29b23a5f17268e5149a202c8800f1baa96feeaf186d0ab4390e4bbc97e5c6ac3a4fffe587dca6f56aaa6928db30e8675b03e238872693bf3899ba6da8ca1967df35968e0f2373e19c39b6fb8d0c946fa9fbd172db13f4f90ee9d68850fc8797e7a582931ab4c5ec628d285dc06457bdea10318110e88200445eb794d81374fdf79060c97400770468fc283ca4ed7d3b891281015ba2c3a45ce76463c9cd83324367ac70e36a52ef4ed6ec2d7aa14a5e317ca3b00d99dd6914afe0eb956414937f093549f18598f21560a75c23a7178ae6c4ece7954399ace62ff51b22933c10228d9b32da1a2352283953c731577f1d384d53d9f92b3e85229d33356baa62b813e37f509d1127959c605b0dc4eaa121dc243052144151b6e6225abee6c8be9d277546daf3bc8a8dd7ca442fff8ef355e2a6e7a1fb78124b4e4d0e9ea35a5dfc4824a633eaa405bb13044875c912730e6887e647433cc82459f41b03281fcc627b640d73aa04ba5b46e15892fbde12217fbe835df90ff3a32be3355e993207f82c1c114cd0bc978a161529c5043137787d4b7da193ff87b6eba2b55e1e32e31423e936af5519e7f07a5ffd77ad31cc8b10411ce0bf92a54cc2652e9f410a35a18aa299babefc14613a3f107fbca52c6a76c8be54c4e25b9d7069fca4a7bbd2fea6a01d1cb0ed2f8461559d164c5b9b5ad733fc0a7dbe6778d8a2ebac5eee54ab23f7f0db36b614a3adca4372c08e4c68d9a1ec7b5602572558c9b9de9bd96f0552c5bdfdb8103c83cabaa467e433dfccd83d053ce6ff42d818a4eec2cd89bd57fd4913fe9fc83fdd1b6f90ca244f5062a556e3f37da13b6d396edfe28a1a1722127beb7e10b229649b7ae6b6d7e502e86633882709f09e2d4250efbe4fb42a03e765dccd06094ae7003762e9620c4113d8725522a86847254bac28913d397a8f1f03e2572b0a3dce8703a2ef3b5be8beb930c4266070226b2f83fcdda6b0ba5b31b062f8d7178f12140aacf24c297e51d20f4ad8d08b62164c76a96f3b0a2c3089b057d6820769ff68505acf3a6d0514a16ad91bd43e5a11c312c04e1e11ca2a7494ffc5dd3754afeab1035b2809ede17d0fc4c35296ef70377a91283a17371e4c9c308cc9f130236c8fa647085f14ad0a96016a1fb6cc211b3ca3885cb83f791170767c39e48b5a3ee6f308aceb90a1b4b338140e81e258083a098c1a13352361ddb735191a72cc05ce6dd42eec4589e176dd5330fc140e750b4fe1ebc5b5a7b355e91a519b90865d3aad1fbb34db8c410011122195205e92e58858c8670c4bd75cc9865e756c53163ac70d5863b85dc85c6e9a2385714f7635add098d3a80203fa047d0d5b0f360ca89da93a2f42c8a46585c5eca73e145364327649c97f20bb3d5fe40fec7bdb0be5223b535e1284da0794665663027f7f6400a270b9e0e5d52311b02f8aaa941efd44f7d119d9183cdd0231e27a6cc1dd0879facfae89e45ffa70b64615438aaa8085c2e8d2afe9d6f775fa3ea4d5c6c4accbbd326cd038072b15244d8f2b41ffa025306b675a88d473df8c020a2636a490c58590558aa2358fb03cd53afdc9df51ad5c9fb51e39d4d6dbc25dcc4b46e0a67f3beee0816a078db00c20f64c04eb2a88088b83e4a376b9b693a2633297d309b63d230d464bd35f07897a746917d36598c2b8e8de1df4999209ed2a3a9937b38b24ba52d9a24598b248f55e2e5b4d9bb69dc44a704cb6a92ef5e0399e90528c377e45ff6fa5ec0837414ee335437e12f84cdf879a90686feafbbcebda632d85ef11b5a4505fd6e21333f9bcf9dfb55a4a30d5bf3d9540578b569bc7c077737faaaf622990a21c1c5589f8d5e574ac1188705d10c75841b3e9a8beb8227c68f27b454ea4b3385b780699b68a40f445f89a83a228f5161875ea1e709c24087f541894e8f70e5996ec38ad7ba9407b6633a9978042731cfb9bad3b4b3f4d2812a7ef205b74c3556e6d2e5f5ece6916c9de230c5cb5706ddef4de0d7d18c7ce71f198f8d070482e89c77c82ef50a20e0db637f91a2249cd707e18bb4ef7630a61441f4ae05788d773eb7d55099e07000783dcc6663ceaa24a16a4c0ebfd9995702e45d9504d885ff599848a731a91eb1c4728bb824e6f15201d1b21351b2cbdac2eecae29acb5e04b7da20bbc6d6fb0a61112b742452c17846ed0961ecff2d0507b724a0860fc5d11a1866a5c1a2a2c5372304c7c2d161b14bec99cea6cf4ecae8340ca26611439b6e6cd4d340f70b67fdd78b30af2b87dc080faee824f9e3735aca389ddab03238a51693dcb26198a6281a6ef3d8350052ed549509b4cb8ef11fc776fe0cb2c78dc7683c321f233ef5a53c65a54eafae4133c020b181195dafc7b9a790c2cca1b9c6482a0d9d5cababab85c184490c11504b8221f3e4b55f9aaf062b3315a8cc6642983b4898f64b523166dd766e5fa1309a0ba4d5b1ba4b1c259a52bd8c6eb2bf9854ce6937106b3848d8d776bbd60ffb1801d97576c71fdd5901fb5af0f48bc97755052f498d30aa03bc46e0c8e81c582c8c1dc93209cfe067372472af83fd74d42731eed17ceb0e9ae7de0cba8698eea619416b32b44a1dcda5c0f36ae46fec7704027f08532bc4da5fa9ce003ae93867be82fa5b7fe3869b6bee779ad6ec8507f6ac6488926de9010ed72f9329e1573cf42eb720ce2c55502be1ba15c8510d863e2cdf1b95c111002cfaed922424b99b67e1b8f3fa215580b9b6a85724bf6045924af3e7a1ebd18f233439886ce60d44a2732f95f67a1919aa1751b37378eb64485cfbf6214f70374d88480d3ae7ae39d0560f31fd23e0de2512c2c468114b7403077fad700f59f7a9d932b4cd1a3468bd8bf97741ce528f2310a426f9f344ac9dba51132163d4065a29082e68a822241110ec7053eacbed56cc8a85c885efda8e316a0e31cebd767a1150b6bbdcc8ff400750c9bada2066eb1fd9753b61aa3eeaed879b6c1b99627678042146395dfb022c55fc072f7eb27bf607a69acf4d58f3c09eceeab4ce05a9d799f3725b8f3a5b7425a208b4256bdfa64ca3cf16c7c09eea0ab3c7af9db178b1d6ba879dbd624b1a796ceab66f98e632208a80d5decd66f7b7e234ec85b842d496a23285707ebb6cffcd0ab479555e1298b72432aad10d708ff5ad575a9917b0e251ce5dbad4f9b31e43e953911d747e20cea7455a5dff4beb57b8a1a3f63a7256f62fe7b777c34c19a985a25e2837eb3984449e79beb013a41e4aee965223c925e59b6357df5d8dbce34f012dfe75f87fffd8648bda66e01fca9983cd0f38971dd9b79eda3c253732d8b786e5e094c7da47f57e2b72b3cd3c93140877ddbc99e7837c3959d9bdc2595f0b77062802c071c317953a17e293d72fdf925d5cd442592d8cb7412390c428df0bfb3693ad6ae6ce7bcf69c0d56798e20cf8e95df8be95165baea88c73c62811d41f4ea19dbd16f74729a428b465c255ddc56d03e543d5af4923925041222df388bd882139c47fa5ed4736f0eee2b74c5e7986995e809caafd761d7c39302b215024dd66f7ec060a78e4f77ecfad22eddc54c6a16753a37f3550d920c140c2c4ef42d4a5cce8a1889f4ad9d30925d6791731d4f36d87719944981028c6cde5a0876c316b85d3c7f1daa223ee6c0ad5d8dc60f203a7a3dd35ca52cf3efb6c37751db6f37854436aedea3aabbaedf4949aee82b7984d354a5d7f9b0daa37cd62be4f9431cc75be154a1d4a538b780e28a5549a32ffab9eb4ebf008a331c4f917c16f95d7efac6e633e4b993c0b8607888ca43801d6cfacddcb11bbdf33419243011299021426844cdcb4bbe936655dd342e12eb339c0b508053bd875b36fe494a7f09cad5c9183000478d4bf5639c0b0b04c04c1b003903f993be019e86384999c7a7f9f203a6e31db6cadadf4acf80c3a20e400d7fa596cb6dda90447fe8d721405f8adb5ebbe80da39124a137ef10844ac2e488cd1f6f9a1616b10f08c444ab513f6a6f85c9c23e68ef6ce3efe9078d7830e1a3caafe73b54c17e5aa0a6778c420fc9b26ca3aa6106bdf6eadcdb3e7fb53fa2d7c66a6c60b2fa0b93dcabe532620fc137dbf97438f70c68e4923640b5d647244464e613f30bac374e9fa7fd9a996c10849887da6f952f7b4a09d0861265eed0e6646764d1fdddb532151f105b89b1eb160751465ba8e65a920a5393fb91fbcfa3da53c10fb4460e14c9cb0c08da1bb40298c6dda9521572f0e1d1e1c1e2b05e99a4e0425c72624e538553e20c8ec66bf2f06ab84aceb84875f8b7a13020e144fe4c1f95e09c7240a8191551fc17ca49873709760cf8bc18ad6bf613cf2260f14c60f262b917969ad08267ddc0eebab180538e79257d33a79a48746ecad0799c327af213187e4d189779ca117470d2d7a3b7163936bcf6e6c3e8ce6377ed696b017fbb548d8c464f760aceb231afc54fcbbdf77577294e66b1a82e9722942f677c0c39a3c974509925b183752b7f74c824c48d52b6c26ab11e6bac3cf4407086e703fb84efce4d13b26a64c2fe015c664f77845573b7cd91f3d4deec393d224005d56f47b9b428e09deff4fc842a30bf60bf8e2d16d9ccc72791f42576b025f0ff568eed1c40857e8ef4d55a1e669ce8ba0ad7674774c15e59e802e197ce7f1f0a9402838cda76888b6de83cb2ff6aa43354e50a38dea12ae84593e6e28fe388b495eda62d21850902dae53bfe3b666c57d9dd75399fa64ba3e22233c05bd85dccb6cce610f3e52c2cd8826199f00f6e7ea9e6c4dbc13d8d49eb3b0aefecc094c94fcbd2e554ba41f2143efaaf7f2bb33f3cfbaea76ca696312122e46a80d8f2a42c09e89454aeacbdf30cbb1e5ea4d0eac1a8d8a8cd1cc5d71012f7c0b2c0ef974a71cf15b6675bc62302bf8f4e6671ef019e5fbce26a5c73cfff307f40e1a7980cc4abf3de5aec3cc86100252934cca592620a87f3cb2c7531dd2adb42a5c6ca5062d5c8505167baf4bc1194068f8a12c6f0a60c4831fae4208a2c3e8f0c5b847bd6d94196a613d6101cf9502231cd05dbbfab5812185cdc37abd51407c26a766ace8c46dbc43d287ab0f178e208dd3975853bea23223bf742c49388d42cfff2e7177d28e260cf8378cbad06a75c68e9df0ea6479333f35bb397820ac12047e9394382e89644c51433c921b4bf48e4528dc47f175658402bc3b26c0a553a5a615d6f25970af7debf14b717831479e399a25d88280a2bc9db5693cd1ce74332357af2c2237c6ec71557990cf984b3c76971cfa9919beaaece107140e912c54272fb710e9b81c7e37efd27d4099f15d1ac28d3b69325e40cba3d4a3a19ded3fd2e31dee35fa2c87517f118b8f587fbac4f772092c641183dc1e6d2296de8f9a8736af014ff4bddb1527172af22e564eaeb113534302a9b7c0ea3672d8bbf53f12ad4eb8a4153b7e289ca91a66298d10209dbb47dae92718079103eb5cce02eb53e208b4d3902cefc9f2780f5e85cdd00754dadeaf9df18275c8703a602ef68827b521063381087213eb3b63a77906db67ca0fa797376650e9fa1e66f7802d7529a154de8ba28d7100cdc427b01830401640c63176486803b593a7ca2e95d98cd9b8c3a7f50800de9cf10e1303765e971cab953737ee9457766dc8c98e694fdce30bdf0abec527c21813a065e0fe5f2ad4ff4030bb1a6ef485921cfbac8f109ef58b2d284e97c9872e0606c5319e78a0c8eb2f675b19172b604cfe52f70ddf3a3aa323d1f0438b6475ba88559ad0f26db4f83c318728331d2c0d0f095ec078a498d5e082a34a008e7a47ff515d4d7e88f4270dfb66bf45d013ea6019e1f29ada4893d213aba1fb48c863c5be505e1ab19e29a81bfb9eebe281ac778b41d53019964cf0c8f735a6fc634caf8ce4940dd767ac860a14915b4a4ead0a9d5777742bc2588d92c1a4b0cdfb9bd12e1faf9c3068be90fe3ad020233901a1bbc29f952773838560f78c5dcc6eff2d914aca5cdf0d336444ec1cca5656dad7e2833326098041b28becfa9a6b3c9c9e99191630e885b68cef7dc003db52a670831e20f106e8090a6c942eb6b30eaaeb9ad0f2212d2d4c5fb53f05a1df46968303b8acf55a92b4bb33d4cec275d9ded49f53d76e813dde1d13d861372a85316a2c8f5c791a8a0eb2e04e044a4b35265c7a09a7f3266c05813f8d4162490d1d47c55d3a708120d36001572fabd8c2040043de8de891e086787ed11d7e3118432b81248501c611d2f91c63967a0ff48f96d765449f43c41dc70c2eda1e03796c04aa47b1dd7c64905bd036124b73a1a01942f034a2816705a20cec24a079d0e0e5889797419f8857ce0caafe084fe7efef64f02aeb1a0fcb1bbfb9785e5cc2173fd6bea4a6868dc4970b01b3991e4630360a1a68aa26781203857e92328f8b2732fbfc2892e5a9384ecbd09917b6f99524a017606c6069f07301ab087ed0b3d8c46c71c06fb5dd8af9922ab4648fb2c0c464545a689f0b6e73cee7b37f76eebf6411d2deebd754792adf73850476b2bf2afcc3db3bec592d2ffb503ed64dd386e999979b9df4dcc31eb5e72b3e3e4b6bcedca5d76264f8ad7e2b28cf7babbdb84ca7d3310ae1c87f35c50c7bcf541ff481abf5e823a80d0fa7ddff77d6394202b2716bd1e7ca06e105e0fbefe0b9d66d8fc8d38ca7af3deac7d5a149a821eb984b8c7d98ad439e158cbd97e07f79bc838af818cae55192152570dc41bdc01ce03794e4fe388b38ed1b709698b2042c7663c6fa1bc234884116684b379a8283bd6e2eb15b6de157eebfb40d60ec1016bd6aca9df4356a18ec140e77793e3faa863fe43ce718f21a1a1203ed4c3879b99c160b01b1572daa5a66da0db2d116159a8382e95081d5be25f5187c728c57106b50f6f36e2bc7931c88af66e906f06acfe2c8ddf95f002b8f274c1c2dd19e1ee06ea60673292f1bdc10f073fe3c759c1dfe620dc209c35cfab47a4c609c75ac529ea5e46b8cf20ce7b2cea046de57ec7564eac57b5da85a390da79ce6b50ab5d38a4a96a10226d354774258ee3e277137ec76c1e66f36df3b2b109b7a76108641da72b1c259871c768a7fa6f22344f7f10ebe78f3b25c214833a26d475b0eeb8eb1e369bb339e7d2d2d2d24e69d0e0557bad321fe9139c68121284d5faa2edd71be2faeffb8ffce77b90e82988ffb87ec68ed683398b92415d19f7ca674b73893a42e0f731336f9be46dacd55d21495c24240297f6dbdbdbdb3b7e902b9811d1d155ced1ffff1191d11591d111d1118d2b222b23ab23242ba2abffabbfba6a6af567b5becdbdbf90ff74ef2f9d26cf28deebdedeebeeee2ed4834aa8c790d090081d731ad5ddbdddbdfdfd3bce7b73e2511775ea15cda9fcbf8d5f7120a11b55e576524a29e5a6c43a956ce2254c78093731efaee4f52e2ec5853ee552de45caa7a438eaf0e8ca75abbeb436fa39b19f78894f6dbc2ec5719ce4bc4bc7fab940718182e202d53e7e2309da715f4f61bed257bafb4a3ff5d6577ab7aff4e852cea5a7b47371a9daef5cfae98979093bb804a8b31fea2c8b65ebd741e9b3715f7a72cbb1c96df36df3ddb027078e179879977777993f6e4de16f3b96cbd97706008202712c5227974b8c798cfb421dcec7d61bc12ac76df5852e1708be5cf45f0f12515104855cffbd055e50d5ffdbda2190bdfa00ac8e44d508567d3a4febbfb025c63a26c17069b2f691f102b8f77751d631e9524a96df8345dcb7604644232f77e0bd371ac1aa7f91ffe621b77307fedcc1b666cd237f630be6e8a494524a29e54c4a8ee38d67409c434ac9cc2ca54b295d82e1eec8d9aea71bb57778f5df9ddee716c0b5fbdd9ded8dcaeda2cc9dfd061054b2dcb93d3467b3d96ce5dcf9a3632c472661c666aaa4ff8edcf9bb33da34d55e1b26364c5d68b3c48689894df75db7dc87a92b72d5d77eb67af06b34ae13bb8fdb3eb146db7e47095de7e96c986c98fa6d96b44fd77e1b26edc33d94f378d0e07fcfedf7180079691d03deaf8d5e9b250c6645aeea585bcd5f1b26ab662bae623055555673bbadb2b26152c554bbbbd4fee72aae62ae6271a45572da34b18e903110bd632bf752284804111aa0f4b4d980c93eeb9352e729b57989eb00d4d0a11fdcdcdc1d827d399f96fce8ad92b40db776770f394fe380c201f918faf1a3bd7d0ef5d00fdf6d877eac94de54f287aaaaaab68a2e7933786b02ba4b4421b50498244b44b1c493845aaf4381a5b5742cc04bce2354c4799a4a0f5108159d0974db0bd98488cf494bebbed3d9664645384989938894ba93b6efcda527291d2529b54f7f23b50f735292f75c62ee095bff35eb6b75c3d66f61eb39dc9698c35b16b78502b87f76ace7fc5100cd975efed6221dd67ad0628eb5d1d3c2fe30c08789238ea8e35a8d33080630604e3a6f4441f7d9a348d81f44cb85c8d7776eef4a4d79b7b856f388d971bbbbbb1b14192ccb56e8a945fc2c1652d75638bba05c59217011cb4d8787fff63bfc37f14be0ba7d8be5e489b2f6d39eee39668e7997777799d959dd7d315708e7dd7b55dde7362d74dbe64686762fb9d9719213e3ecb22ad589f540cd12c511c963dc0e94fbc989cde3ef5372322b590fc7a26cb63377776eb9979739e6ee2198a8edde1d7925d5e6bc59adefffd13e45435e0ffe102a3d5eaf44e442eb01abbeb8a9d1ec0d2f5147c8f53a3dc0e787f5ae580436570fc76710f6bfd043d6ef58ab9b8f1f2404394fbf2b5c5f5a2bdcba81e1d2380c8184f56cdae250f71c9d1db7df064d7cb0e14c165b48e0e9f06f875f980026ba28740143112c44b658d17ea491210a244e50c1428ab6bbbf3b2b16c946e06dfdf96744421d5f013150231288c410c8fa5550f0a32cca62ef14e6d36538509721e054ff8fe61dc3f232ffa9c1b0c4952f2be06206633cd1e1b483982564b0c882865653a18a2f4fb0e041064fd4508226222f3c3922451854b419e5a7088d245ad338819600261a441762b6e080e50c184cd0988b344c38a104102b64c181c64ff9616728fdb9aa5123e66ddf7ae0aa2da41631ebbdfe9e7edf16bad5f1ab2d2b8f0c02f7db3196c8485db79caed20cfd3acafc67042838810aa8a622a0b8d0fa480bb8d0c10827507ca8422380132f0051e5042c663852c322832d686090064a6a0b5ab7b02db1de262c42c5c56158cf51fd7ddf5b3575233f75cb49df7fdffff8be0fcd4ec16654169b7317e8fbdfef0b53e78ffe048a5dd09738caea4f234bf94f6c7958cf2c66fd93047538d9bcc7415201a66a807a7dfc7ddf074ae0eb3854c16729a6627e96ea1fd7127701c3cf55e0547e36c3cf67180d3fab797ddff77d3bbe020942bfd7a1f4f59ea57f8a482b1ac8742153f9fda97f6066fc0a97f689ea9f22ae27a929aaf62940e57726da67a768a8a2f27b9583e177ab7e7ddff741d19daa21aa82ff1564a9b5c1ef74f3389628283a293ded46e4a9e6e167d5fe1677e1a98eb1c8524bf83d2f64fde7f1671336d1bef06babd562ed0f50982a4f5078028a48175aeb61fb53c3a2e5892b544e38796181d6faddd6cf6db5586a4a3e5556aa1c35fad3d26b8bb73b5c1b88104e87e33677777777afdc26a5949243e81a0a0f067bd9a572a1f8046842c7492985edc872d088f5cca2a4a6e6d756f8b382ca2fa14770c94356094a406ee309bc4ad9dcebbdb1ec96524a29d5c8624b3ce9aa8eb09a43b7d0f1cbc9c9a111eb01fa1ab31c75939aeaf2514f3ab2b31ef4ce7ad073c2601f4257c55d1b1c182d98923aae733f41959dc81b73d93d1776389a50e57bb79d2f27a5d34f203afc41e0da75864edc3327d203284924a49414f6b3a9e3caa9a0fdc736362908b10a44486d1a474971773717326da9b8ddca92e4a8e6cc82facb2072673b5277777372e5dc29a463dd494a3f545463ae6c6826b01e4c0007116e9aedcc646e1b9a202ba7f49d1cc599c9fcdcfd83a0e91fda37b6aae3a4b02db3937c93ce56a2575757bd396feedefdb3997298ba99e655fbdc52904bce5445d5239bc9a44b297b65cbf6ee656e666ea6f22ec6e872d8a0389396dd76767777e666e66626306a7b671f0005f1524aa95ca00f82a40771d36eee6eee4f06e62a66287a7aa89a28a52abb6c25c7706f5fdf755f77f75d1f327777676e666e9641c6d42d5f61dadddd999b999bc5f897deddcccdcccd4a5d0e5b0e1b949c9c28e666e6e628ff6226c70c6856038837de80663ccb0104d4fc838804a3a195ddddcd4ae29b8cf5b43337b73333333373f3f7ccdc67de2ceb61667ee666e666217677767c7e999b999ba19ab9a7999bff6689282c6f000ba827a530d8733f1537594a4a4a3a41842112a42c555e30959939acc011abd0dd7d3b1c6b9595462f9ccecccccc5eb8340a7b1a2f6d99e536039ab5ec6eef5eb940ebfcdcc44fed33c5dddd9bf9caecefe99939b8e1856ebf1c333333333333d32a951b0c0598e1967f179662f1144b318b99ac074d888efce7fb21b8c0b4502a95a5384b49b94230fcc239596a3d70d120436db8c5023d10f4c0f97d727aa0f716a0a2055e22fdef87bcde0543c3521cc4feb013555cc553e4aad70ff99efe10d7bfdee63dc926943af37bbcde254e80d2773d2854c4c81b112a62848a6fe4e5a22b240a127356622e43688151a92e859754ff25d63318a3b19fc53a62f91fb9b39ce52c3f2232ba22323a6239d191134919491d214931d1552c7615bbba32d3d566db9cf18de2a66fc7519ad6eac9c7faae8be2908feead1a5a1bfdcb8469a8aa4989a9a9a9a949a98ababbbbbb2b24a9c8900f1264b1a029dfb068f367f0c6dbc25148dd18673f676b759b7227168bc5aa96ccaaa9e289a2ac6f89e34769b38f2ae67e4355357c0cfda88afd686a6a6afa31e4a36ac8c78fa11fb2aa213a54d5d454d5545515f56406a7e22691f3152ecb1533504657b25c11b50fd7c9f302dafa11666333250ad1150765cc983ce3f5325e49aa06dfde0fec6703193fceea72fd06212c9c394fff109521ca9b1ba9c1cdb66d9bfb2671723c1cd2547342a4ade2c88e754c36a3fbcd689853c7bde2244cc4f302da12c79c3ac258221b9d214222c7eeaecf7aebadb72322a32b22a3a38de808e88ae8a80a8634447475c5af5c5df12baa9c76f5e01dd7c3711c3767cc0705fe31ffe997f5ca8de5ca1613ee9a767b3d90dfb4eeee0470de0e0e30a107c3190830d8149b2abe48b2aecc49be6c1f9fbc62c454af3fde9f3d62a93ff091a4f657c1576ea8e39734039719a254b0d2967d3622b5dddd7f47573faa4872c78aa9fccbe2ec41c5c5759e6f9e5e2c7e36f00517637e50a3c44c0e34116490020c9e9c5c184384d6dd09e12d6884bfe4c26f19946119ea5cf77d044f32b7cfbdb75dd7dd89e37e095cabfe5be8bf4ef3739a879f73243fed580f3925f0f085081b64a0449627de8a0c284c31b28408121affc73aea0af0882da4d3e34046163a7eed35b46d3ca1f259efcded37bcd0af1068e2c80a585600420b18224823a587291da86471c56374023fd1041a95222307a3055392d12691821924d5297ec00324af45ad47f2cacf7a8f7545b9b65aecbd7b21ccdfdfb13f45afde6cfd0c29d2563b9146c76037b2f4cf723a27e784102011f58220d094b1020a9a16a0b4900393941453b4feef8fcd1cbc0d8810657444924febb675635ffefdd83edd87790e9efc1cf187068df6019db675031441c7a7f265fc33fe8fb511bb321668095e8bbc56e76ddb37df6bb55ce1f69ef75f0886e128a4ee17b63644eafaad19ce1008af59b3664d1d6b3b1dc3d1847e182cb268ea210c2d5b90d0d806344d5e70e5e58a16a0a0f1efe46d89fbf847e0d1cbe258a08ec971dc823f591c377fe4388e9b1cab9bb3637120f8afdf401d2f8f2b70a47a0fba7a74ccfb97f7ae1f5f2fef5fe2f8d5f5bcfb7abdc4d1f5e07b2e7e90ff63ef85da07fcef5de02734f48922748cff8c0f24fe39619b6fe1c8bfa20e6ce44aa363fc3ffca7264586a51f5e4015059927b415e3258a20c8a4a08b2d41d0f885865e4c7df076677bfe20fe23dfdb429dfded972643eee55b60fe268a4358defe707025d603a48495a5de238e5279876c3f5f864358dfc9e71e03db4f2a3db69fa2cefe76e110f99ca8b3535362a254198105c90c34580c473811c55496a81a36c949de720b6f777eb2a0bf6458e92888d1a46f01f92e69cfdfefd109a30fdb96a580fe02a1448b105da6f8f2250bad5df01286852d56d8220634b4fe9d1cd2b5c1b28bc7bf3bbbcb01c93d776d34a089d7d33ef29b71fbd7d33e630ed9e21c620c949835582001838d160c41e405342f8471268c8ef1bb4f9ffdb0feed9f34785e2d567999fbf34f4a969b4b87476571bc409d5478511d7b4971cb6ddb36261cd74d281db08d4b8df23c5007ec0375c068c7c23147060d74a4513aa4ead60c10857654ddb1355597353b6e73b9d8b5325c634d87c78c6a535b1c3950abeafeb6ed6fe08e29ab368f95a3a3037774386e97ba3fbdf975c88271abd5dacdb5dcc148ebb2be1b26ca0277b0f65bddddddb52cbcd4f23e0ffcc0d981dc06822028416f061700aeb104d5c558cf00ced0b1a767264ed5fd761850314945ea6a05161fa05861460c1a922e5005981f946c40e108171afff24f0f8a97b5254fb43843268c24aa2fec059429767082a48b134dde4b4b2dcbd392192c6a564822a586e40a27a92d62c084164c30e1f18eae085042796e800a628a181958e9729454a5062952383c01066f1391ed7fe5d8fe6cdc921953a5091d9a7ce142191d4d5990542951418c20ba703acf3eb785b15026b4dc0d03f7961c6cebe742202600e169002eecc50644f0c3f8772af175abbc3efc5ceb6cc8957a3713c6a16652e69f302b74a4d5a351a37d3a07b6f3de0642d0ad11896246490a5f9cc810d1419a224ab64461815314099e92445d7183164c98a868d2e187309ea4989cf4f69649c117464ca1e0490d5d9ea460050baa389284122b767b9c2a5d1d21f960dd2a501b4183126084704a228ca9143ce143154638a912a6055778bb138018c48821c45598316ad4d440eb2d549254493ac207275a3fed87d552f0c518576bb48872a18b23be70a2a4431659ce3cc10fe35ffe6924db38e92648d92c003228a022713765b438524493224ba664d4d3121ec43c4963c57700013f8c7f8d02a0258c142a294d588185c65310d14107196e1023860f788f04172829446145ca1315377021a50b162c5439020a8d7ff927087a7bc5f840d5a62c59e2062d5fbc508184c62f043106922bae4c4186c64f74b1a4872d569044191a077420a287215cd04313332378dd401ff0d48255172546a831c2a40523a42873050e52a468698a8c918598334f10e1c50601c6952d479ac8600505bc827eeed25dc3c59d5814dd8979b7387906cc56fb3ce55cf6596aca3e6799edee9252dddd5d3064ea7e10333533e128fb41fc6769483dba59a7dbe7fb20f863fcf4841a961fbc3c89210517525c416315d668e1c40718be709ab2544b42010a199ac4acc0c8921d226298a1082d509e589841c50853154d46b48c792985c1a40417279eecc74a388a326286c9551229581ce550068a1454584a03f52f3069a18b28b640edd06450a024c91054656e48a28b24351c69c2821ec2c812e64bd31543249d01631f26822f42f0b0f4e504235fca487169b282253088a85014802c505145a001e2c9548d19b84085252e3481839a08745133450ba817c028e322d2650b31495ee02109c9db9d1b52e853d8cecf80b73bdd228d3acf972d49a89c547171a40c8dc348618111399051d3021affc754b03e6441424a150d2ee49006cb155140d952658c9125bb33fd0067c600428c92169840e28126b808838553920d6368cc636dcb115f5459192106aa0c6d9fa47ce143176028a939523bf2c58814667488a2660a087c214673b382b739e79ccf2cba5027ee079c92a8c9e2b6fd722a7fcf4fe37bfffd3c4f6c85e3c60a61a10ef7b272393424751d763bc9fdb6cfedae381a75dceeee6eb76d5be77289305fd1fbc0b592f56cdf77ad70e6748c5920277e40b62b8ecbbd64715dd775ddfc6eeb58531c856a2716ed17c9e7b871c551268ebb2f7138912bbf9617dd73674ef798b3c3fecdf9b27f766e658923eb65f040a728c59f322350fb6c536edb16823feb77f8d7ea9cf2b9ef6ab5b995a253eb5b22ac73b834deb6beca45f337ecde2bda9145832b771d0b74a4b0f6e11c1a53dc7eacd52eecc465fe183fe587455dada0440b2f62e800c50c3440260a891a94c240620cd7b1621caca1deb736f8773d0e8ca0523fb27938f042f74129b21ea8d78614747c56a8d3fdac21ee58b975415f62bb2d38d5c6c1843907b908f44154f7412c96330deee06954ff01721abc80c951fe63d79146e54dfcb5116b1e5e40b81dccdaaa31b9899db8e2071deb9f951381b06c6278b11a3bfe3dd6aa8f22a8cd108a582c166b6eb5eacfb933bb151878e26824abadefede9f75a40b87adf216f6fc7de09fa39727c3ccef13f719be7f33acf6bbdb3def33ccf33a1cef7c271639a0f84eb94eb846a200aa613d24c09838688da0c2c5cb1548507335167683c0417303b80015565cc0f566871a40a19682073048b9d408045d07f193dc810f6638b300f8b7a47fff61ef6cb20374e375228ffd651264324affddb07997256242fea9723b408ebd8263ee730a6b1b34edbc1b1c28e0c2251377421051a158cd927beec30a6ca1a29860043e397cd2467b5edf7e8d80e756cbfc7898ecbc450057969bb3a1368dac837ce00ed07edcbf667564c54a1a1d3cfb57f96a6d3e20d2ff667fbb117a868480fc012f9fec926fb407f7660bccca596048929c67c21c30a338c41e3c00b0c2a38a1050a0c5068fcb2a82bc87891821037d0f809258c40c19234505a20a1f1376f5b3c6e652c507e0eb61b08fcdb6fdcf672ebba35ddfc1dd299dbbe0bb76d73626db2eec4d1e4fb63dd4df41052eb21a4b6925ba2dbcbbaedcbae464ceee060429f99e592c7624fc7589664ec798e2b92dfcf8d30cad2c89652226dd2fbe5f6344bffe1e62bde7f826401f5c316458e58c1131aa350c4911c7870c116595841e3a7b01bbcddd9b6ffba3ecebf6d329c2f9bedff7e2c0787d2bae0440a1469b834c9c2a5823552699cc68c1185b6fffbb16d2d56e07e7580424340419e8321703be35e5c1407f6047d5e8bee7bae3008e883200ed4b11b080205f1ecb69f9fc85a66392b1c69e8a1bf0cb75f50023a3c44252a340414d48de1bdc422718bf8a558b4bd73918b5fc7645b282bf1605668cf2cc707e2a42c67f375b8dfbab1bef55ef87d32de1bb9e6fcfcdac7f594fecdd3df7a238e37efddc8e081be7ec11df4666c7923787f234e2aee8da820d90cc92b9511ee84b1cfc1019148aa5f77cacb14551cb9de6cf0a3f3b0dffee1e05daf136ef3b87e9b07268eb3e2fc06e1368f4bd4e161f32e7194f1fb337e411034b879ef46748523ad2efa74a76335e88f3b35d631c6619c671c9b1f6f5ec6dbfc5617cebb705ec6cf9811da841a843a2180bf0ffe3e0ef8f4bdfe70c21a3838e288e4b21d282f28819b1b1d1e383feebb1ee7b7d2d75397b81dcb11c76fa76bb86edef52008e2e0e0fc0eef71be566938ca4a5f37378f436f429b5f706b756d5c4f5dff0ac7a3eaea1e0ce7b7c29182f040eeb1c211492e272e8e16d0070a92cd26ac41229ec7157122d2c6ed76ee2292ac45dcbb3fc771727fecdf8ab697dbcbe7c4227f1edbff2616f5fbfbfb161b07b3425f06e4bd42da31df699fad3de04bfcb6822028e6746c0321e83873e6e751013e17debcbe7d3c195c28cef7b76470a1e0f7b7fef3e9e6013ece4d48c3d9b1d74b1cc16f89db311b719c558e00bef75e2a17e654cf1b5f620876b45ec73e0dc7a34adfe33e2e348013753d0d912475895bc4a247bfdfc2223a02158b582cd2e1f15b59dc8e7defbd0e4fdcca5578e158abde37a8c3a3ef51512784d6d3dfd17afab50a86a3aca07c815cab1c3215dcc1f76028c3f1a87eac6f85932580ba853b758452951df316d0af32ff993b950db39c6c5d8d36fdc748cd488d266b349d0970df7d0fce5f480ff99b28a4a1bcdf80887e6eb6473989be2c8aca0a4890ea3f9ad055174711d4ba6e72ca6240b777b1c8fff37fcff9b21591eb3372d5f1ef97bf5289929084152f447a28e2c51ada4e91840bcc34e1248c1c54a05dc089195018430542a4608596e5cb093a8c41c60b2824fedcef906d08951edbcb1fd23d063ab131b089e2d2a89a072f3d90a99dfc8d7b3f43b9f27b7b91fceebb0fe1bd7b2e44f2dac91a1d63b9d301276bb8585305c50a62a0c4b0a58c0d2e88c1520cb2c98e86db3fdcf981b6079dbfa8848ef7a31a2a44368380200123150000180c080503029168401c85a2b47d140010818c426c48164aa46116a3414a39030c01048008008800c8400dd20e70b7cac5c7e5b16ac6b9267016a00a732f52813eefd2ef8b07dc574cb4c391fa7652eb888e1dccee86410de60448850f8985175dd12e9b92d863c5d74038a3537bdc79bbdc00175d456b5c962c5c740fc256a98a8c15a78e5a0a6665e438152e18b110b22dfe9f7bdcc36c5e191552ba22a4f8e30abc8ccc2b929aa3a52e93c5221815b61968575457534155ce6b6986c7e24d483580e06dba886dae928b07cb85c73e17c351cb68c6bff58ab1b177fb2da9041292fee536f41b52e9192b80bd4ba93669322afb5f086f60bdc512aa568180445959940cbeac1d75f984b415832cb4a318b1a36a1b8950aa385262d5133d247f0978febc704a15d5e750a876941850159381d1d3efef4ad6a0d9b3aada1e61c42c6262b6a54c00bfd406bced2630a009b344d20ff4d1b76a5d7abd7c66746458c9da96985dc445f7c5705f19f2c8360586ad890bc0dc93caeb6ca77f42a1ac90502452da5d4a38acc5f32f344dabdd573a257235856139fc90c093ff93e04756c587d817c2fbf52ed2e082360f78336c6379cea95c1338d2e152cef68c081ca9a836cc405fd2dfb2eac3698ed46e448ba232c1aeb372fbb0945f2f3d672f768c49f90715b2abc4a69c621321689bfe6e368c200d6ce8aa0155ffa746137b99a6c356064c46b6d27a7bdf077bd86497bfaaca51adbcbca73713174fdaf03ffe8b164966916c5996cc68e5e5de61fc10237467f7276f4ad2aa7712a703253398c8d8bea52beac0a95ff9f6aab53e49b749453681a2b26f4831510b7104d376c1ce986383287d53ce7228877e5b20365516e53c1ddd56d9ee6e1b9c515276befaaad007a4395968d79b4f8b50cf2ad7c5d522cc45296baf521ec46059c7de6e47bc6fa10cc761e4495df9ae38a6ace7ce312455cdbce62abffc65433b4a28bdd87947bed0a59c53dd9851efdd1e1d2a334af18597d06e1359d32cdd11e5a3c2575f21344b824e0b11fc6cfa45f30a4625a79fd92f7afffba66267c2be148448f11ed9bd0d5095aa7d4f7984e6b306e603a7a6f8048a2ca83152e2eb403418384b089d62889bac320a9401efc6be5f7c693db4687f320ebc3eb40d0bcf5c56c0aca02ca19170e760af31d1d7458db45f22cd77d1d362d4fe459cacaa0a574cb71a82d982ef0174cfe9a43b0b8771947ac4614b9b79d41fb74b50a99fe86189269943ba98cc225de0cd912eca26df426ee1983e10f6cd831a22533f28f9f8249ae60e1cdc843f9252fd484ad406555ada5160c010acd2bba7d030dd784755ca7cf23eda3d704b70e438626cbfbad6b0d216fb5b3da91730bcd37b5d5509c6f209857ef1e3c65cb6e89596efa05633fb585646c731607a6ab107eca266df8e41e27fd113756d124f9984c973ce19247b35c204390d149b5f23b5731e5ae0352a8d466934d519ebe5fd2bdda131d8f7372dc352b6d2bd86d8ca154a2e065a63ca08b72c03a90bb83405ecf71d7b39b78a2b42f92741feec1aa467b597985e28fae05aa84ce1da125d0975a6fc941aa8a9edc4db05c9845655d79e5fbb5fb2ad13086d5d4d412d896e92daf3d735032223365175e7d369fef150c72482f1396ed8231eee73b0d1886d50c8ac8374d9c98e260d85268ab2fe0c5c30ad85d60591f44fbe1232f95308eef0e3882bb8b2926073bffafabc1ac482eb9ab5c44df81a1fd5c16fa649150dfb6e25e00c22d026e284aa7e0d847a4f5db78c0140819539403ce8045b472b61f50557cec9746fdda4b4bf67f09fb61b1f6de43955f3fe58217135a06022dea638442694237e270d3c35f2289f34db282f8a020faafb761e9c10e3717956677eb5ebc5c0d2aca1d100257a471d8ea3c3d2a4164433dc20086eabe5b7aaa751a032c0eacd0167555489c6ca510b8626d40a9a2c143f026de9fa1d71371dfb2ee113894558d828173e6e6fa117cde76fc845a887ea0305f9fe523fda27790da90daafaa911b0d43628bf0381963f446b2a09f21cf819c8c62b79784e4ccea26500c73617f3a2c585f3b52af09a28ae9b21ed24614c2c2093a0b31953cf8c06ab51c6d338bb70313e00a61597d9014f837e464f75efbae1a2167a58cf9f6a92eea369d46483d6fff3f547c611154a7efa8fd4c26a036524175692f533ce980a95b28bc6318d81311de5c116d7d590be9e3337ee3cd2715de86f8426c20b3abe31d5fb47935f2c1dd57a47ff197c0c88fb87340193d564997ebf892bde409615084d87bb88114daed9081e124f70bd316ad41782856e0de16a24296570d33fd016bfd23924cc1a31ffbc8c1f0cadd586ed1ae3e1b8cd7ea1b7bdceca7b886cc8f87fd4f8a9b79ea5d8098e6c5e8f8cae319d92c7ef6e5d9372ce86110f3c63e8a744f1059ab6354eb55cf9456aa01ced2e36303872b00eaa6559472f4f2a6412bb98b75561be11da102114990c1c59356de57ebb9966b22bdbd63ec618d816270de5dbc089a66a859ebf6a65fdac6460f70fc1c6dbdb3cebbc74b42eac7462f6b5ac79769db233923471134404189578cd762e53228d37c11f54e3a51eaf9ed584c7d0fab13e8362e60347544ade70ad32410597e6ad4cef6f9b2d6b9495b6bc51c5bc7d16c0755f0ecef11b5e5a83ae20f39a42f2c61457f8b66037b8695c74b1cb1061b454aa5d0c3f71d1e3d24524a06aad67afd4f1011ef831e7152a1a9342c20ce652fbc1d182d1dca6f6d120af82f115fafdaedad776abcc8e9ae7fdb3fe47778f838ff225166aeeb7b5cdece2b383542a4745e7d9985431270123aba27416bf0c68f4b017e5958cc9597f991f914307bae7624339e87d54d5052634743cee9475694a8b8230fca6b2ac5498c75cd07cf6d7a5e54c3ef528c4687c78dfcce05d0d64abeb4e7aa0b9d60e0c5af20c3b3fdd8be7a73d8cfba11259a6e8748d0333764c0fac2a8e1a7135abd16a4a8b652d10e52c52017fbe5727f86ed8c329f76458943dbc5c6fff8e85e008befc058ce8ebbd56774dd1b8368d11eb05b0b5f70ca0495117b9d34467812b92ba20edda4558ce6b06c94af168c816ae2554c426fe1b7aaa53a7b771a687d2da74351f76a2b712ca6a0065d6c6cbb0674b0b53628877da827c23bb3b48339123d715efc8b062262f76fa70d6d4744ddc82b7d50b3d527b4399d6bbe98689ea7133e2857dd6e97e80e6ab9ad27715e6a9f579d7ecbc848a5b4182d7a2f5aaba71bab1a914846c2ff1a831418b21a9a8e786a8d7e81fef410aeafef6769cde4e9b11b89a68c19c09dc25a1c4a98eb57ecae9addcc2313bcfa9f0dcbb5aef84780074ff76ae6e19a2a79eb75294463ade551610897dac7046a4e36905ae49d9f6d27160becafc1a957a2e2969121b5e4db194003dcbacae428ee4f1cea94768c566e2404ccd188e85f7c9037f71ad0590da8fb0839bbc6c385e77e930cbac9f0ecc026b6db8eb0860fd6ee07f18be63b9001f8e884f1448cded68309de0c507a631bdfa4875b305937b77524dce4b59dbaf827146f0f5b826fe07244a3f9df9e468e531b075c81cd95052d602a958911978c45dfb5d44455bbe02cd1507d49bbf280402e1539cd5ab958f3f006c6115a548d2ad9bc07431d2b518829531afa589f2bb05562e261250ac3432ff0b31db06fe40d4a7172b4383d17ab44f096a5bb6c5523ec5901e2af79a441bba5d4d78a3738c6ba447d60954e00c93ccda65199630675c03100f62ef9c3aa4fb75efff123c0d8194712d8e916d4b1b5367655180661b20770017ccb7658d65054fc6ca689663f19b6bb49ff363e0824db998db9407ecbd8280a710e6dc2efdb4d349dce54c7f36b0425f9b2d3e785e881e6b5007ac28ff51285646b1fa8d53beda19f562cb9a831f1ab567c9e683dec90551e0d0d512039705ab70f7951a15a388bcd552dd94c884ed3ac60bfab60231c6db1dca227d67a2d65624f4db647c2d871dcc6aff4c7a1d9bd71da2d48033dd614912f1a045acf97c6e667414ae7284d7ce5ba9e86965ba83cb25895638c8a56cf823c0581bcbaabea49b7ec5996e2ac9815c8e1a0cc7a8c03f554ec9b28c35697a8036cff7e24b874a973c7970fcc7cf2c0380c9f2be9e5c42a0934945eab2f4479d438c8cf2545b165afa1289943c05a2944d30e65100323ff7f2f355e25fdd2415c0b9a2a13a5e43f83d3302b0fde4d2de851d89e04daa38f4e3b8bc45cb486d1093ea4553bb1d1a7a839bb65dcd7490144120126a4f30f9cb3b270c8ec7aef71630a7138f856cfedf19780983ba585a8e813faa331c91e0adca3a68107d09383b8029684102dd96cae36adbe33af974a0872534088418f979bdecfabec46500ce62d10e50b16da148cf0d4d91220e78b77a5b3ba4e33eec261a8f4a009a1719e468bb4ae27b7ae758d8aa18c8eeb64d379191c50141b16aee47d5b6b7073da95ccda5532e2b6ca5c22c150da580b5a552ab2f7192213c531362e1c57ca6830754f95aea5343456e1f0d629360744917462057bf25b13ff1c404867941de5413dc8d1ec74bb6d152037dbeb07f7a3e0c6e1661edf102a8dbbc1fa28eac2c832f2539831485857be5ced2f6b768cb4e35c70a2553f934c084cedcfec1b396a8fa6d616a0e7360360e4bfdf7f814dc3cf99ebec478a180503098b9c2f6c9117bdff0431f29677db0377b13397b765565044f60da13883f59b15c37f856bd166e8bec06112e2fac46f6c81f89a666fe8835ecee5746950eabfff856c1f98b67ae7d76d0325c637c77f4aeb5078505c5be4e9035c725f64997187c3705e17058a9d4cb2b3f2a759d1e2920a1c6f1e15d052d1c40c25dff5b27198ea7948950f14e648634c7b714c26d0c4dd057091caaab282c1329b63f49d92dcd855ef60fdb4f90321feda8fa9969f5e709e1aabcbc1f898593f64334bb04bc712c55093f749d5df0f5028d0513704cb8091d5b70ff676384108decbf64824792299e97a71915438b889bfa0ed85ba558d9f8142f3dcd0b2506486ba83c8a7c288d2e49b63194ef7ee77f35efc44412c4ce451f29ef0f50c94b95ab1f62a2b4fa35a629a29e070d21b2f4812a7f6db8a1465731e62ccb589eb803b3df9b15f29d684e5cedcb48bec4701c320b776036bbcdbc02b22687bad9585995c396327c62c59968127d6d8b6ea01cb690ad9121842c105cb2747d016fb3c8af87369678bafc0411cdd6af9174153078417ca9ea4ca0fc8d59545d41cec6ccdda3a3a74578c63c192423e8543785c845f1184078685f09888889d7ef351ac70688e539f24bd570202d7fc48851b64e87844959f72b533188211ab6c4478b4a83f8e61c60e1d136f6631acd51c8734dccd221eea809bb3dace0aa92621aef8e459b76d2f2956c63719a60490bae9702f5be136b45e7a42e978cbad7d803a50d53ab66f030bf0903700eaf1c58ed2c7ef6912b0d12ff1b426a8a603dadd78518cd6ffed315171f2bcc054c7cd32f991fd1d8b4973ed1dbcb71992048a51d805c3a32415517c1e1f1c74b0ef3c15772850419ad3ed1f47c28cff7b3800d5799ae91468fa8905b4f4324a78f1a588eb182f3256b80cb92bffb8b8cdd3ade8df81dee1704f56096c765f9dad9c4e0bf5bd37524d71e12d3da133a93fee2064813a05429acc4324390eca194725c3a5e9fe16b3a0c4254c50a74b624c82bc6c944d5d2a13731041ab7e35115910c94658820fe6ab31c25973a6503cedda15710cec55506843213fd3e1f28b3342806dc42415401abd064dd01f6641b62473d60a91c846c39f42333d1560d662a84886a8655a34283ecd6018f106b5219590db645e4c682d694d87c5cf941ff6302cba872506715379c5ce4861dba3767ea247bc6d634ef416d65550c6cc0d90378706d7861a9b73829d7b1574665ef7600a757d2172aecaafc51ef78dddad6e5da2071b32b5f40396eba9ece6700e301d0d01641221746e8f334c6f253f8fc8c0b688cd7c5f73279d7cd22e05264ed424e443f0ceb1f4112fc8db91078ca37194b6224cbb849e38081d58bd221340e06d5912df301ebf093e3057b594477ae9751c4c61358bf526e3fa6126b95549f2d757cba9e257ff83fd9452ad0ae5d05ba2674881443d29bc5ded2070c60e6586e6bc2a7dc5ad437bcc191434eee60e93ad4251f5bafe090c3a1178e1f4f6b4b1368f331ec6cec8e7b6519f57c0f0a585f2e5ddb703fff10bc98a460f8853d08d2f8329cb845d8b9ee58e80f075d6009f9a1f7556522b4049878f52b7ebecaa1c74c1e199d46c91cd98c0f2733c2d6d30cc5713830f70017b77ebc3b078b2b1e53e98f1f157402301b9795d06085f7f77c876bc4316180f6a7189f4611669726b008ee84f197b5c71e7837e62e776e0d86e8999d0f8d3f97ecf91b9712d13a74d90a60eb713ea60a60743f600e2aca1172d0b2910e7091aa494e7ade4fdd6e62eea62576882a702be0b7812873381f9a7359d143bc91dc6ef1e95e89941e2356f1ccfc71c7d67a0b8609d9a247cbb4c1173debfe734b331ee66b5e8095f588dcc7494b61e8f5cfa47bf630cf2ecbc12e12cae4b944b25168214dc248912fde1b204b07c1d54cbfe01d303f5aa4c321cfeb98301334d1e5bedf12cb628f2fdcde27a6778d33f2709c66605bd070343ec047fef84018580692fd814b0c6765760e09f230303ee88996cfa8700a5dc61993e84d554272c676648355b946f3e3c6221213f65d54de6580bbe1163633ed82e20d845a8f90de17084bf1025141e4c0361a41ff0c9b7d463c6610738f2a9d8327dbfee74f2517da95309bf30f184b8e96ef7b835a6d9385d5c7176263a8c7a791d024d3817ac53578ece2d99ca449cad90696231d918d23822eb8310004e28d61eb2186168be09122f981ba491ae97536a7990e4a2c68ad9c9569144fbed18e41ff4fd625e298a4450dbbee6f342b6e9629d442c3214560fabb931cdc51e00f3ecd6ec8326b025439597d0ef4fa15f113af074d81496d96295ce9c6edcc251aeca9ed4e2077be0d215e2cf1370783f8c6edaf0652ff0efc9b7dbeb7e1312a780a35323f76478b676b626fa6f3302aba5222adacf41820f7f01c44e98d42a40ee12b52b475106948c14da5db3b3d591316b1963a4f1e75b00f8e28419263d7de38ca248cca1ee95d8b4775b459029589201a1bbe72402ea84ca1728b623732af6fe01fa0711abde6a650f912d5b0a871bb5f9376b74650937897c944bbc5e6b161ebd869c053a0043e81c755a9b317ddf2b9cb608b67aed16dfc508aa4e9d45e9f97d38c881d82e581534e6ddc6468f3220d75e10e7cfd0f428ca5f0a79ccc7229eac404dc3982eace869197e7540be81743bfc37881555c81e6a11591196a83e2c122d7d197dd0779a9775c45d15d79118c921171f27d4e35aa3333845a31149ca0eca5d11f2a22327863d922e53b3c20cd233fd18f558ca8b25304c4aa801728568d582fb511d6002c418878127010516c7eadc3b49d4e984a9b48557966ef8ef2046af07a7c725c431561812e02912cd09595d9eb11f827fcc0000ca1677fade4f04d8e98c3dc380c3cf32a86394cbed4b94618f6397062e9ef05878183046370fc757967dbc93593024095e2f25c933b0bed52be69cad5080bc2b194415dabd1ae60c5acb1878991f43c5b102c778e7ccb11b9bce5027c319f8851b8e5d7475d7c6ac90a29db7aa19c3efc13114296e3681e9d5a7f1f105caf2cd83ab360f0425520b729212f8c87d70d1c319662e3e74029f21671c6ec55794afbd1a7572cd07b1f7475ade1e927bc0cf402b9b3c09e6ad8b67677891a4533e136ed5303cef7c4a2b82ef00504215d66b1eded2b7365cd81a81a4cf3a7664222a7d51124000b781354d2c9c125c6a919c4ffbc6f0886d3e177327fdcaf59a1c8ecc9b6487f3c0612637b1db608552b169e36b171c09637dcf9729bfd1dc5608806d60a5fed581ef53967d759eaf4289e1779b1b2c111c41d2329dffb52ac6edc516f3af40a935c9fdaf121d8e3d283f6408927c6077ead2b261bb86547122ae558caf4be9575e2d28b35c4114bf8ebc3f9b9f90932f629a095a5989c00e65c3982cbeb1a9337802f4c5844e2990579fcee5224f506f7f02e042a9381a197da2a5799b54dc185d8e882c7a99ec919d0fb4a8b0ed999beba5860c2b335ed909b17b8fcea3fa0bc2278a30c1d96a04bda0d447d198e1a2fc10dd80d327f271564a3382a927bffd2ffae149a5a487dcf38ed3801568382db9867ee564d759abd61d774e77dc2bdd0b25599ec6332a52e53514ef62d304bbf7739d1e66d35f7bd62f444266e98ea5d42819b2d1701f32f138a1a8284c0841d7394d13fcfbd09702aac414c3b396935f8390ce1ed84c357f1820e9f3d7038c5ee8ab2f8367546bb5fc72e0574f43166a16237bda7d322e93fdcb76f995421cb90f8be3459849279e417b68b84bcb2ff2cad267f8dc55c53aae47f4fe0129de12b4e7aad63635d1413d4a121e2a73a2b00674a79a98145be392b625473c7aae2035340c6be23c8f2124e4919bc3c089d924e871fc2754a9abb505f982ff5c974e8a40993c0715f8f8393bfded8bd306640af082a495bef6d0a95e547fbe72ec21a09c60b7df5f1e20c19870337df580474c415b1859964a41d7e607f665c3a68f48a30f530aa06f60a0b32134770b7d95a98def19780656b97df90ee93e837455fb8d530e10632d0ec881a0a4ba143268e8161031a48adbede191824e0fc1676c45e3cd89f04d43b90b21594ec23315fce42d459077bcac9410b8b0a87e4f3399e0294d971a4f67102865f78575ead19425d0780d8651325028fdcc4ee812c9215f8b04868a0d79098d6f6bdb8990a7dec3e2d2416f86dd2b187aff013822effa1f577a041996946002895ffdb07eed1004f8ef247135d33e80794cf1763106c160b3e7411e023bd97ba12ae982c703868dea717ed0281ac8fba7a515fa9e8106450f41bda049d04779be995dfc9057425834bd71b8d15f7afcb47151b569fba9d5ead7f41003097b61ad7742590e4edb6a29f7aaa90f59f6bbdadfa4b74a9bcfcf19082eff6b209f8c7d28cd0a6ccaac2a8ac6915a382421365b642b4ccb53cb04838d8a2d8dfc20c573a56d14cdabfef4820515b830a6616cd29fdb65a711db1ee6710ed441b7cfd0987810d68f3760020fe7e009139ff19240b63c1515f84eeed439cdce057e077ec797a6673c4de376a70a61fe144a3188999f17812a803fdc009f544d7d8a43592bf643eddab61f9a586bca94102e146006b79b8f831856a1c46ddce831faa86210228ef717fdcf8e0693802a9c6eb49977018cb46e4b87cd33f7b740caa5811239b2e5087f20cb649ad30a909218b59d5d9b119e03515269f60ecba28fffef959959f40407b6a8d5a39c2e6875b80d00d85969ada0992ec76f459719e29e4f35e8a83d31409bd811fc9ececd13ee0a31e14535c3b2234d0743b3a331561f8d08a36e45ae81a804be4d75930df7373090744d6952f817146b7ba3a070c9f73baefc6c1d2110ef300529d771c9effff0b1b3b9b7390c1fde8c415d958469dd8d691aaa708dab674d960c88242e23ae9a5884449cb474c54d821ffbd8beba00614d9dfc1e05d2e40d3778b358eb05624ce8adc33a2235ce324503dc74d6bda9bc1ae5b0419639de6e69e86d1d076cd97be88c119e6eca22b4194a25b9c9602002a0d51013b4e64807ef2b90b3d80e84936888fdaeb28a07e8430a6fb97af3b10ea27456ab43c2321d5eb4668129ea7633ff827c4afab6b687e83e82cb361df559588fdecba713ba0a928b2806488641f5eaaa10bfc2ba139bdad94be64a837de738c3839ab14b0a906b67c95741a9ca1d9235d674edfe1d82f150ac0c775e38f53559a6ffdd4375865e47f8933a3fafa58b9e5726388507e21a52a85943e93e68c299d28cc484f07949ee2e06f7b38a8f976100ed65b3290825c1cd041415451dcf26178e3b51acc0bc147ad7a03e4b721bb1e2f47e5943a6ae25a5301c29f494d4ee3d691d0f7673db6235f58c85555f42cece7ed95a926e28c93b6e2524b851c515a11e432f1c4e30d223687a3ff3ef64c46222c5eb20f2a51dfcbc654ec7d7e7a24fd20ce8312429cc10e1fb05ad0fc319ef9afc48b63067c09d8974f0f0ac177088fbcf75092dc222370f2fad0f5fa94504eb69701fd91a0cd43ade34118931daa0da13ba5c05de9ae61165af698cae050011cfe0ef6dd31386d02258963d9e05dca44a765d66990b9f4020f1e63cc6e6b198c0c25f41e43bf99d9ec9e8b7e7353bda953b11de734c6938014d8aa9b9b43f581b2fb7508287f73551d0181a70313526b454a483fa5b1c4d89801b58c791821dfc5e61e6a9494f0fa4e5201b5f5dcd4fce114340ef2c4c31c655c3568d5a4d5560765d5c4c734f81d0f69c744683bb22f9043b12a14a7177dfddb4523f5aa189d43840e9ab39662e35eb6231728cc828374cb6506dcc01497347d7c792c4d17d8337b44661541b03054d002f91d35ae90d04cfbd56aacc9090ca19d597b97da773b9c114baf24ae96c8357b1edbe2a9f4b2a2d6fd0e105887ef6e04557a791ee4fc8dbef76de1a21e3f0d4079b195a33c1210734f04dcfb8d0977a4f02bb5fbc117d4f34a5ae03cc9fc6268aae26946ad51d38401a3c2c45c44219feacfacaea3372860968ec46efae4af8018e7b2417c59d79f62e37bdf2f234ba82b36c6ee974844eac9b3fe0a6c33c7294af51856a6e8b7d7589085dbf345714fcc70bff94300b2c90859270f58c6514f4c51bb630843a978aa7f311b4d007873099675fad1fc02d4d936b4fc5b8716e445ed42fddfe1202326e8809dd553d7945f10c26051660128a6b40be6b032efa012fba4b342eb384156ca83166105b17cab6d617965363321672a46593988864ac6a942d68a04e85a2aa71e8f4a0795609842868dfb97e21282d013445a27580df6e4514a419a8503d68cf466b00998d9abef06f6e742555d88eddb624e4dac7ddd15b8f2d7dd2ff20672d7c00c6956789bf07165d5a76981418775a1da5260b1f5c0be3a2da01a1aa942809beac2c06a7696bc10fb4f438002896b11660d2bff4882b92249bc88d9e012b2c726c972346b79374c79be54fb1da94d1f06f62989a2f22b6fd81f33c9e1877c49adc9f81056dbdc5793fb0a902caf055ea01004d3f563a122dedb44cba1de9577023da1d55456e8ca4a109b063739e9e2eb3ae16859f2b5ca95076c957dc356c94d87d82a4960ec07b6456785a55ca0faef5484be05d88a4a2446f4463c019030f1c2b9836bbc91954e1394cf405a423719600e197d62fc17da0732ee978f577257a0279c4be37e4d098a3c6f4f0bda14244935d709d2670aad028939d70c47fbba12ab0616b42b9d065274270fa225d8dcc671fcf08e80bdb0b548e4cda1f245f59df8d07ba5bb6b38e01a5e2b627b0437f0700cdb89d50b20bc2f3390d1b92dcf0c6bd7dbf2607f28840391d2a306b71bd42ea89b779baccfb93810fbfd7f19585722c613abfce35b4e3b557dee7b5f93c98cfbb6826b183cfa44fbd101bf0d8a563896355b652eff81e7aa2a811ee8de30fed9411b44b887f05a3e91633c29e29dc1cb9bf203c1a2372cef8baabbb98903ddc3c1c25a25c44ea1c2e6fe982ea1a324f0f22256200f5272823198f2ea1cf7378513ef16ac5a2f4ea7b28be02736c1820063071bbe8a109d5b98cf9d81b55ca83d4b45e7cfb194c5af2102103d1ac7113cea1fc6fc47906385d168f1abc346dba98c6d77bd12fbb151991c643ff235508abb4be8c74b91d3fc9f8692dddd72c30114d61e8273353ecaed08383a70dde745b14cf48ba29817b029f4e51cc8ca3aafdbe807a20319c4ee61d05805f6e14e09f1a1d765419f13d4a6a75093e7da94e364f124d534502c0893410b5852779c1c8163c1e2488c0529c7b6cdbdccdb490512f23436d1d8577ba1cb81ab47eb22fc46a69dabf3ae795e1fe4ef344c9bbb4fab17d8d730e59fbb31cb70eb2005ad64b79efb703f69d71a67d1cb63583f101d13aa1b4ac20849a44c663595dcd6877841a40e839705b5cb041c65cecf5222f543b9dbedd4568791535a5a6eccf7c245c706b42e7d2a3dc0396a739a45e870443c9ce0c6abaa52a960ce1598254ead37c6493d30abade5d9425ff810738443e9b5e623d3076ed4cde42ebb96f0af75626b87de20af1d8f59dd2176d4a8a5a752d0c5b4c17754bd7c8df0ff14f57a0c956ec3a54a20517e11ebbc6787d8cc00cf0fed904b25400cb35ef52535af4165fcb61d8aac8567ebdb8e26cc0c376bcf7ce9e1de7ddab3009251d966cf886f192dd229c39c8c669d781a41dea7123f93dae416a24d5bde950ac44d79ca171b5166754edbb9775cae3a605cbe5c4c6479b99fccc5dbe265065c94e1356dfc97f96c718dd584bb433b78a4ee5bfd53e072baeedca7a7b7e858739aef7d5eb0a758f0c5351628ae11235c7023cc5e30567f454bfa35390ea3386833d6a6814f05bb4f02259751ae01252eba0b41b7f6f5ddac1266ef6a4c947e73766506d8ceaf34edeff75353800b071f1afe84aa90f2c2328076e763b5199ed6d44c10e5fc03e094995122257f9f5206d08f81e06b0072358b882dfe958b59aed0582ebbc793cd95983843eda693c7fe37e4037acf3d8544f02c9743f36796e97191d86f0f6b2fdc627311bfb85b62922c6ea815e59a14fcc151fe03f4724e96758902f47670703a651885590b8fe616fbd355a5cd306beaf183214f6170255a1921713541eb436b11514531640d1920bfcee682d6fdc1d681a72e83d2d203b787b16c209cc10ef7ed7663af9315536e0859b0816cd0f9be2f0940f2a5d57bacf7d75505316332aae896f826a10646c6eaad36e6af7f70e548d1fd4944dd6fa77d9c618e6396ed23f59de5bb2805120a0f87907335b5e58674e56e50dd7a7d6688160e2177498f2cf189388566b9ddfc2ec31ea84b612a00e24ddb2c3761e8e216ee72657e6525f88cdfd0b284e9f9b05ae832f8fb4532861b486229d84908dfef4664499692a720517f21b2a91f0f6501442f7224849a9603960f0969f7645267056dcd1ce74172a6b60999bda6cb22383e65ab2ab22b804c1833a89147229b879754094f09d7dd3a88581b4e6d26505627f3356391db00b73ab49ea7722fb8800203f497c1fe9e4211eaaaa0bf5ed88943328ea4a4ecb08ffa77c708016407e8f185283d4b2751dade4d08b6b9943786abb2d1e801d4a0fa851d74c0b87719cf6dc3602e20d2b469776a33fabbdb1368c431596bf8a08ad0c4926c1407bb6146d7cbc908f2099dc9d40d009f982f81a04bc781facd793265a92e8bf95313cc39dd438302621b0a2436ca1ee9cab2d4e36bd8520a13bf0fab1698b29ca1fa0dc031274c9ffb3e1f8302668dac477cc59850ae1828d2be1afd13fda4432c353fc6e189d02bec1d948cba98a391025f9523e269c837ab48ae97c356ac809c41e6400615d778918152da96745cde8d81940817918378a7006653c0bca82d948c0218434aee5f9716da8ff8c3e290681473dc6059c1a485b5b3d08a7a87076aba8365d6ed068e29a761d1380a26695a7b8706994e79e20b32e2f5d1a0fcf71fa2a7d29f3a4a7d27f509d47bb63a8e8eb3f57c69e00f4c47941b17d4483accec9c0fbcb9bee1c860cff582af199587c7b6053dea41799a19e82a4beaf00612b09320a66660776a861613d120a7079b3315737c94dd6b99216dd2c8cc42cd7d3008a2a27ecb0bf2c36c6724e4e0b29a89d1d6c228771c132a94b1bc30e8d585533871d3cba38c1b31639969e584455b5e746409b99b251919ff52380f62939a55d272fee34079ee7fa42fe6bf1313b31853dc0d56747a0b35bd2376880f36a710441b9d0ee1f51b119ca78556b1dbd0c3e1c86be2bf464577d0ecb8294405e9fca377eac589c89b874611415a8a97052b1a2dd0caa360cb2f818ed9749b8469c0d3a78e0d963fea781b8462e51f88de4cd79017268a8e1f63b650e6e262c34727a767a036a995b7adbacaafbf671371b7487c6c09904b52541daad10e43c9a973242dd5205120a07dc509d72d254a42728b0a6621e364c22abb1af64711677e9c51a8b999a4cf4a90419c8a0e5381f9b25be886aa7cdd325313006cb28b78b5fcb879119ccefe5ec75ea80da6f20403d17850fbc2c42e1183b008ad7a39a792c7c852d911f88560b254e0b377bf0eff5c2ab29e567fba6ce5bb2430ba68b23bc63879d649c67677fd866939e6812e8fb96a23a6e293a9f070836b7264f6e0fd746326af849fad800067eb378aadb8a0ad800f8224e7267a5043e6d931126a2de27be6421830d06c4fdf70cd6b6dca018f2b8310b5279d2bff58e320827205bf93abadce2544ef0821accec66667cf30b7470ad23f1aa8b6636cac137d67dd08ebf4175ae4bd05bbd688046975391017b89e8a94fc60a061306621f44d564e8b673330d7a5e0855d77d2e09022e02896b50f99229d3a7a35ea381ee38d5378631383c2e9cc8d95409f21ea287d79c4302aa3ae77320267b20b4e089689c9f1696d45a4b679b4109794ad177421e6da072a6d23ff3cdd93516294ad236ea04af1be64ac7f48354e75827d633ca65be5542d5429c99d66f3f734ce123f03d4f9c62d98de0ce4fd46c0b965e2438f741f59b982f76f84343b0b739be82e9a58c06e89041e179918e811585ba8a34fd63a77850bebb1007d8c713bb183322e066bce3d2a2d2ba06712148fe9452bf040b3c8e03af212ad075e78763131410ed85b5f2e76e5c769165207e1ad9fb4781c10074ec2184446b93f49fcced99593f6cc27cf598d538331c9cba4c76a8117079e90469863e01bc2ca667acc313b46dc8b5acce21d1befa5cf91b86d8b5082ca0017e90c491f0da0c9a3a26b8fdd30e6190a5838e15d0c50788a618100157652a4f11ca0ea48089356a7dfe6044d9ed6b241372a13c0686aa74101134c04c7d4414c9c985d5228f5782d4f871b6605633f0d66486496672eb886d88bc521dc27f66551b70ffd77e0b0a531c36fe532a593840e82d0b71418b31aab8841a7a7e17250af9a908c36923e65ecf10b4734852994b2fc71be0f3d42e5d854de57e8c0b9cfc0ccbf53db059b51df6b6a61fb8b7f5e23a9f91c3340ef66e3f51f8584b16fd526796837da741e7799138d573cc52d4c2e8629dc056ec6dee9301e6422b5f20b45c6cd90dc690b7f13f793799e603aea3a8d05d743ee9a510db0740aaf8cf4b93f10a9606199c175ab1352cb5ed258477c541e8b76fc3d8743706960d12ef6a7dad04ab03cd217bfdd3358072a017465c0fbbd3af26a7abef5befe511056d3ad97e99290e9497e919982615a4f7695f4df53cd02e975395a37a2fae0e2a0bea78458904961dab2b52a8dd2e3f3f9bf9b9ba403ef0a1629d1c1758a0e8061411a71e42e0c5725550b07bafbec1e4b0ffd2eea64de54070e3b9f854de9f5c3b51eb1e050327100c84005117c0a2f3eabfb58e35636a89b4a653075273dc967e031d4db9fb6ef81345825e5a3b399928343d061b5a1981b577cc13af025057d81aa79eb1eadbaf58c3c7323caae34c8fdcf8d6c70260aac18c84d31cf99b9700b755ff945e42bf6af31fd61fa0d727a30552c19d0dbcace52172bc01ccb3074bc79d622656ecdc61dd5958fe7dc366bd06ce46e374a959d9370401b524608b7c8b9fe726c03e07102b72cfd1c8e9e4e34cd405dee8a873364131c80d908b9b5df3c31512786cbd922c31d6d56982b1670415e4a20bbbf755452b62e507f822aa41b5fcebc8272563d3df22dcfd54629d8e2c13b9237fde6e785d84d9d2a2bdcf137459aa6f978706892a3eb59fb4769bf7048c6880382d8134a9edf4367cd8024525f64c69302c7c792609521983cc38dba57b4abe3d01e111f80fa641ab2b9ce20a1cd667b7ed00a4ebc1cc2b2c91866d77e38a4631cd8fe3611e28e015865a71a150acb2c2acc17bc2742f146f8b9714e1629a1e7943997211998f00e7a17fd8593ab901bd01707f68e64326abd67a63d263917b4c62f507c470628afbb66e0f1d4a735b6ef5bea2495c12f6590c8e660a351f80223694405036e4508f88e9301f69d524c9acf6a998513d57b470201fe03dfe2f2279525cab36e5522e44d2fc1cf5eeb8147be1924d6b03ab41a2c97e83bc4415cea546253c62579cfaf0961b80b1be285f92ffbc99027e77054eccb291b8a86b4b28be20436b5fe4be7dcee85a2885784ec68379edeebdf11403220454361228241b2ae957f5fa120c1a2e2f51eff88249a27ac72ed712b7fda64aab4080351b1c19bbbdd1e471bbe6b44767625bce519292bd1f4384b6bb31afeed7fa5161f2fdc47457854aaf1c06b2db1343abb0639dea8cabf6a4c97fc6067b8615fc5eeb765102d03242f412ff0f29d79154888050e7622fc234ecefaf1da232d75b1060f94479ecd7d26d2068aa895a027429d904a82f68252619d4d42ff4f5b4c14b5ef414bc13b5aff3870f8caf723af789d44e1a237250efa0c81fbde9b7459ac58004048bc79abfe86c05b95a2aad4f38a56f7babea0fa02592959b15ce1563a9377f5e61e8ee27a889ba13f63d0d115d34ea13f414d5c6bab253bfdff039eae43292ea240cdb08655b30e78fdc59e868de700ba9461a96076074868880afde3762c91d5ebac59c7f9f73df366cbfc7e2ed43b0521e71fd76e488eac76ad3ca2d5b67cd09adc42f298ab91faed878b4536ab9b5b2265e5fb5a1ba04f4aec3108c09086e50e97fe53eb9a4e73830dd930c26e734816ddbb004570e3293d958131421adaf0672182a90af76130849dcbee5ed4819db49883605fae220057953543c3258530fa85ec6ecf3bbf4352c94055837288ba2d3a650aa560fde30385cfc1bc8501e6990f2d0694ff4605b81acd11542f4fa911d0d629d41a8e0883ef46bcde64409ceaf45be9ab9b1767b8f928bb09f16684dbb57e7f30c76f6257209e577b00fd20f4ef08ca76009e9793c8321c4f45ea407bf0949445b8e73442ca1ef9ab4ad70a81a5c5b2d9e29475d9a7a9b8653f98910ffe8e62d2937f948eb34065f4d7bf7c0a2286d22bc219926d86fb9ee7fa88af7286f803bc90136fd1bc99776f550d501be79400816999e1e3f159ebe022f63f4ad8f8066b073c297e4de78f0d1440488dde5d387dfb3b053042f40d5e2f3c603f733d71296c98d793b9bb479ede71f4816d497e3ba75a4e52560ea5d174dd4b2d9e0229d0caecceace270f22a4335a62dcd3fbeb46137952e8af2fa9b801e2024c31332ec61fcba79e88a2919f8a10650fec1066ddc951e15736d3488a500960769361b3a990c50559f75bbf4dfc4c21379dd6df7e6409919c128aab0185230841627ba188175d3a668d4c2d131b5b2688f06f9621bcab650dcc350066b2b12a9c39f9d8a724ccb320959a0ec978c43c303d91924328c031d67cb3800b03bcee78adb2d01fe180f82593830679c7194f77877cb93033a7821cbf098eae16a01afff29fc2cd7e6326216bed6ed8d76d0278f3f5e78d87d091fa320c9e2f5e10d0c3ffa053993351231cb5a05f795d63e998645c219eca142a7b8bcafec5e7372774d5f8192680305fb4e847f07522ba1bed2a5407409008fad1165b8654b562b41d9e9958a49aa9ac393a6ff74fda4ae1a0b2f07ff662283e1814532a7b87654eea9cefb08b0a01a1ffa09c3f2e190eb235583fa3af816b1a43d1ae1323783ee68588e23323faab1a1e374a9620d2886f3c1d2dace6aee833e8c389f102db71a7c01d86f85f2fd478b0b3fa5996580c632940889c2daab7d051bcece605288e0616c9f0e4fad067e7da55874936bfa5c2bf22602980074ee13a4d3827b3809060fb61a838dbd11b92d1864a6a4bac180d42729c83319a38f716a404241c88802818679bccad1ef2ba024e69e0b5e7dfea0227aa2e068446347fa017c000a3047a71b0dac3ae263b9a7aa6f68b240c84e2ba74d8551813e9820c023fcb4fd8469fd3c91467803724b451d621b919e4a9c1673b5b15e243a63bc9954f64bc3157c9eb8e36cf9b6add7bef3b77332bdab69295138ce68c6ec0a277fb0405d5053c608ba8f81d84f3f43c382b4d71dd4966cbeb0bde3fdc5b9f26486c0e287cc15e6a546c9c612fb4a11c511f34a42dd162b14483a5299bedc465969e4cfdeb2fdae3604e181878d8cf19dfcc6bfb5d32a7b83572d630b45a1e3732fc89d8fd4176ad3d0d34e3db4f330afce9a536289af8151aa2ad6e4cfa4efc62d65f3edcbb031856604d753cae2dadb5ff0d8c313510ae4ea2532cd31b0502a03c2f5d430c91dcef8379cd0af46223e50773b28de32cf08eda958577204a517c829b10ca6643f0a07e225aa5ee4774bdbe8a6ccff95eadfb4c3e27e47a39b2ab7e277616b2e4a92ac0ff165bb6d211d3950d94160595ad65b41c15fbc7bda859511eff2edcbe737ee15900510ac3be64d2ef92856f7c5033776ab9109501421ba255d3854309cb95640daae4da8c8f9762ec5f7f0809aa7faabda4e9d4b86cdfe6ddc4e6c94c9d6b1b85d41f6ca208b71c08704a70c2629ad90c2eb3f207859bec92947ff592f8778d711c346441969c294ba477022d6a4ac9d981183bd2e4a8f01166185b410ff70ae1443464c415613bbe70748197798e21dde6d13e549de481630dc0cb50fec79c1a6eb28aa85ac21a8a842ccb3fa204226b28f89d2d8e9b788a91ef9d842062441e78affb52068214278ad4cd4a9c01d5b1f687dd958c7453bc46d3cc49dec2c0b75e403d75a3d0c1bd3413e687ce1d3e4823ea24d62cc94a419fec122c2d2821e103dcfbc94e42add44e1d905003c0281d7b459ad2384657d2d59e34be1fb6568d203d079778a5cd38ece6fe5fea3f8c0072943b37b638f4c203a2a702e67ff80085d604da00769ca6d029e3cca1dfb09370be3f596efae809c83603cabad359b05f9a1217703de523a75f05fa0490e99220037d90150c1aa78037a9f8da89a74ecba363b8b9c77977066eca2d62b30cb63a83dede5af33d0bd21af7b617af21f6db5e04ac545a3d40168ca63fd3ab5c26e9f02f2ed48898b79348341be501f9c317202dc3d2385319e240dabdf9726a99fa501a1a42312d496b89b0c287562eb7f16eb128b11449f6e83a41e3c07f67437aae25d0871502a0be477abbd34651d7ce76ab7089f7591706c5e215230751bf01bcc36294bf899131d55ed94aab32da5ae1fa41c2b3ca2df5babbe227c62ab48ec8aace8255f1a6616d16cf0ca988f8cd2a53b713cdd73177ba693f15253395d64979e8fa91901fb2cd72b7a534e6fabc1e08cb048f3c789a46e2f6578442a5067cdbc85f7d692f7b8e293a6f88773ef44fd267befc30956c686c60382093687e12b2b15e5b408bc5a389ca7be42a775f46003ddc737d1a266410bd8d0c8e9792dff60c2b5e36e6ee2b315a8405a72ec74be332bce234420cb3a3bae8389affba5be1f93ef9b45668acea1cb6bd12a02e99685625a27e60435ac6cfe6a19afd0f473fb5d9b015face7c11e29f6ddfaaecda8e7db92b7c32dd988af0c1f6c2791b094b3ffb4a289f1e84d2acf685af24ad2a0cb123465c180886ecfa1cf00fe330fbf952c28b176dfdd63e0f21c89a4366bd2fbf10208ff0b2b11f4f2afb4092c54b48a083ba1d0999c9e0baf176de4ca06f07910ba08fce73a13eea8ba653f331636993eeef516e1bd2d69f45c201bbc8f46aa70421e1099d7218b09f7aa7fba1c04af17d1aba5a4b6b19a633c3b547edd0b7151b60a886180edda3757b59db336b9c1ef3c50745b53eb454221dbb49612cc2e5c9df8098ad9e559e966f081a0581b5cd30735e6976dacedaea2d42ba7c8b4d4dced584b6b14b7e457aa453edab51472adf693c0310675b4d52106e0283cfa090d3096d63b52d124133a7e1ff80b442ac64745f6a96270d31b15deef859d126e5c5a22091f0104737edcb6b25dc4354c19400d44b7494108dafcde3d743af8875fae8227ce9161fd5d0e3987054be149c69fe648879bb137c157ca4ca180cdd0b641c0e67aae99fb461b530456e2dc64ef81ef95e29d148a7d7f4dceead5ce1c320e7855a152a1452541a80e5c2ac758d1d6a1d6532be6aca5b642fc15e210c79a9aa5f5c238bb514a3d40b0843da12cc728c89b74b5cee1fa41473d430ff09cbeec2d378014ad5f326741f1a3c1698531b0cf04c8757b45a2022dd9d03d72e494aa702e5cc4184c91b49b4e9cec8cab394531a5d45033a5726442882326c8c75da0aaaa061b4dc1e7ecb5d32a011f19dd260d8b34607163343f53e67705893931c4837465efdf48cc195d60a703a45b88798406d1f4c9d8226751f5e7167a262b1b819cc1bbb3e129dab0fae5c21a9a91c39c71aa52b695955fffaf53fad3e5d9f981b8274b7c951be57c6afc2efaf052a9e52051057f9977840fb1c9963f23a207106cff1b6b0bd01fe910d873703d517d0bf7a0df7d321b1fd046750d1bb39861fe1467186f4596119559fa57c651ffc718c6e063b3434857c0f2ed482cc35a5c1108480efe74bceab60e2550d90906cb53c38ba6178dd6383931d61f4caf440c66ba118f6bb8ce6e1e1982bf2ac85e0aefdfd4756d2de89e87946675d4a5e539072a93a0eddd0b4086a75651e4472e994a31e5cb4179e714ed31547e9007c3dcfddc775bb945978c6b16000d261242f46533d2c50a091c3436a84bcffa683037ba10750ad2d9c65b551fb8d093391e27f84d249af23cea278efb55802342f880365d44484d7d9a1fc8261bd2400de81843d8bda241856cd2952b644acc4c064e64132a7a4ade7571029d3dd39513187451d7c6857d784a0f407bff64abe9041ac81b28756c15ad9b4710ccf57760bafbba11910e52544aa763b530376fdac83733393a9c3c9dde4c4d3839166f36a5bcdea627eaa06b4d4029d1cf5f102598ab6165d41336a1e796dc905d18a2175b89768724ed962f8810a38cd8a9ffd4bac092e2053f69f42357438ef04f85a94196c195e461996fde2a9d00b8347adb3cc97efb27feda1ab28d7178119cdf47c78f863946368f9f0b0f221b378b100bd833a6863eec267763eccb79f65b804cc2395e693c0dff4c41908250299d676731cc554b1bffdefd07a93e30aad0e6827339c210a51202348bd0388afea15fbf62c82a7cd9594617d501e5c0b398861b2d8811da950d7b8521570e4afd4287d2071cbdcfb5caa98e1d892c0a12220535a5f61142f9c1ccb71c525e378bd9ad60d68e90c302d69b42baae3a42271866dc990cb3a0a1488f1d76c3cbffd40e67a20b406704bb34ec9413f124d80037906af94ec16992aff9ea68bc8f1a19a878bfa03f511f9b39423d1d898f858277bb0e1c5517da404ce02f28b9088b9f7e6ca525012bee2baedcb3d802e10fc240361856092a1c49ba0e86ec9d06549ed17b26bb81e8b55939c3408aa8bad846542fb2bd1420093541e99f317a405ba5c109da80c3ae22e2e603552b88223a68a6be7e2f290389a78d66b19d57539ac960c5ee4f27d88afa5a5664bde325ebacbdcb32a20e22cbf30f45148f9b08567e8456f9b3b5668bceba53e45fc9d8e17989de90a976e70a7dde904d6951a7107478dcf2870315bc906344b0962e33f971f119b895aecec8673bc3d0e06d9fc0cd2aee106bbe61a62050a87f1bc4b596eb18b2a50dc2b6b0fd038401bc236ab864e250cbf137d4960ac3e8a6064908939f632b916aabac854a3a0fdf44bb390b96ead9c1d9d204d71fbb8279e523297d07c26ee5f5bfe02f4e229b2c5f08fe8035b6bd12b10a9d2b83e3841007d8b8528aa8e95c6844464ca9f482a6ee00438b509bd3b762a3444279dcde278f4c4e30edec3acb28f8e8a70c6524e1f8f8114b3066958b2d3ede32599f01599340d8c38dc7880f0f81795fc46bb241ff11edbc25bd13ff3cf0da4dcd3e9ec0f1b2e9e1c3ddbfd54e48b7dc11c910377230e6d1438d79f1852c840c7d6a546b3b968eed1b24ffea6f235409f34bbe0dd30e9d62fb9e112820898d288d2addf7c66b47b2659b753316744a215384abed31f08b54b4560d6fb4716be4c331f69f81e55521eb3541df8fa1e5344c90f88e1cbc14106d0a0115930aeb97743821a2be361898a02d8a2904cd52349e5ca2762f537582beb4138231e380bd1e0b2886b7e14581fa5bbab094195e1ddfa87d089cbf558da5494e9e6f07f17af2073593a5cd5f7e827842301a90a5b45dd81dcd1302d926b57347eed2169a3105b995e8f47c9b96181e1b1ebc5b612eea9106155c1b64b09517370d2d9c1ff854869f243f59d678194c0e1500e7087690de76117e947acc999fb4bc91d080a1989f20a78a2383e86e8ad3a7ffee8bfc7ad1118d76796aecc96651b90b045c2c312767a3ba681a63e7a8bedc9f7dd6b2fdfe037ad0b56cb8fcad7cad08eab61a5380b6dcbb56905264707949a6ac10db63fce3d7fba9ce85135c19a017138bf7c90744979c36ebbba72cd7a00237005c919e9a2439b7cf38bdcbf06db4e32793d950b30f45d91fbc796f7c5cb13258d60033cf1b93b643a800c551c57e65e4eb8a059a8ec17f96e15dc637510b0ea4af6cb372920c5776639508f319896d644d316f15a1991a07ae33051031e1438eef593e7b32c4e558d269f0355616407b72b30f9e4fa81250a10cf23d57c20880736345f72a357c191cae15ddc88fa05c70254eae07690830b1d9029393fb2d4e91450260cdb9527000d15879f023758a4dcc294db0a4928878f7c062f7d934de64a9ef568c86f5940cf977e61b53b2a38448a690fd41484626b4e3a34d4284f519cfb3200a82908c54b8b36bb13d80cf4d22b2488fe75484828162ac59a51b198fadc3d5894fe10883f06c8304a32e9b4e39511a65a1caa597ddba78c6110f3ca20c697e8d184122e0d983fbf8bfde2c701f6074cf9b18bdc2d8b6481aeea117e19b8a1ca3423e7aceaceb6d007c3bd7d54968ab990cf25c38b74a194c1b833d014b5165d4b524b30051b9698f51dfe014b27913002b0e207c1cefad5b2638456f0a23c0fc5f25147869b4ec6e3012d9b28d995bbca00e555ea82d198cdccf1c30dc2adb413651366ec5da661ed30b48e0aaa7835379523c0645bd96458eedf255b3b703ab85851e8fccad70add31e431b80087047b85de7e982d8bfb00b249d0fffade98b9315e0883d913b234595ae1696426a869406a0589a34ffe525115da3eff13fe1c586e3924a5dbdbf18b8075bc5b775753a8ef79dcf815524547e52e39529b212079dfbb5eb8592bb7174771cfc3ddca07fca9076ef149a7872511bee599f3028eb08bfbd7668b762030ef45fc21ea73a1bbe55cf8578e0085176c987fd99befc4ec42674fdb3b5ec12f12fd553663740d95a7b0099b228e129b56fee2708048b4c6ada085ad3eff5567502877966bc75620b2fb5c27cf60b56add8d9127b1b0b05f6220c3d749f3671a0fc431eb534423189b3530cc43fd1d10843ac925d8e1128d93328b35f60b5e5cca21fe15ce21f98ec4423e4b9081454fb20d897964ec2fdc5df7787412d75d156f130e56af9580a5e6d5a18dba0abde020bcb5a64cf767022ed865162379976e68bff59dd97711383e38e1c197ffacbbd50e5af407bb921628815d654a377388b58e8990b418a52d94e17036a55f6759545ec8677e10c5bcb7d9af8cb1d4481ec5599205ba8b0ed720be0d965bfedbe6be864ad3ce306248bc1e872c938a158b42c2a65ee666f2c1c405abe2709005156dd707d7a9f5d3a1ac319602eb989b9330a8dc7ef8b5b3ce1bd068ae7e850bef3dbd886544e4ef88258a54d2f1926e1dbdfd60fb10df356092c13f47efeae4139f72b4fc48d306f4708d61c695034c3e15d2683c9fac20b12268d699fdc313099819e35c00ce78933923e674018ce26cc4cc50c52cf0909b38069c08a02aa55e30068d1c0af4b63d069e1320f658a9e7d06fa6fc4e9cb3d9f3a6483c726e0de7c9949ca991e0501c528519ac2be422eaeb7767272d5c4f29c9caeeacfa163a5c774bef65d798ec2af9600d33a31271f7d3a9b4e435ce995184da4b4b0c7e9c1d636fbb610f6e3720637cf8d83430a6d9c11becdb9e01bc681ad5219cfa8eacf46dc1d8cec9ba6ad58f7642610117ec5bf62d5ad6ed1240af0380dc09a93ab7078cae8921f86f5fc01bc9ddc6ae48340c3705f556dc414fab792e0dc5d9df7ac614bf01843e8b20bf68f0b88bc5705ab0d8c5bd9925b71730fa9e3aab241232825ed8c1c52aa5ef6ccaa46cd324fb22e788f8fbc732e0d6cc389a82468204cc867ce9e816a8494d26ac329ad77475519c2ea1ba95acea301c107eb4eb0d7f78217e3ae409e27ccfc88551982de028a601989a9b470fe7181fe4223ba6037260f2fc2ed2f34659a2f5a7b39816e2da3b942c08a8f07c14f85c8a251f09daef01290def624ab9e44a3145d824d4df9a451ea6188715d18bc26618eff3f0f7b0e402cb4635023b01a9724ce5592823c250fcd0aa627721105a1b72d1460b9b25105419abe527ab8b18f5cc9642ead1d3d8b47084d5942b0aba48a030b0531ca537b056caa7e8693d5bdd88a4a2338c02522c16f1bf3be07688df98f5a58562c180d8bd66c2cb4b8b06ce96c8fb92c4122390cb158a5928cfe79ff07e49b91b4bb3a24d09485eb4c7c15c06d94d104ba04179ebd13a3b9385e1710eaa4139e95a0d96a978f9acebbb7953ca4290e07ec08d7b3f08956393d6a29776bd7d07ba4e2d0076e517feba13af3ac9440961ccfb515d64cab4a527cba88b668682d468a5ec612e4c8d76f91a8b6f159244d9dc61a9e3260610c107df1b214f178b77f102740ce050f391ecd24252f371bd5167d6ee1f6b8053130c06d6660d1520f52582c8f2f498a35d1259c5fde573b5f2f64107237940b3edd45950683e022fec38bf210c309d2ff2de25bf1c9e4ab9243f383d82c175b1f49dcd9dd381ca36fb1b14ae078b61347c0502f716702fc4f42e2f8a077c38bd6481978fa8e6bcfd41182e08a8936a1766066e21ccf1ff3893156461be608ce85931bd80fdd1b8200895d5c90400f792f5131d3e8116ad4fc3efc77c8e23457190c3dcc6b53293fffb5b7a794f08de6c0608515667bcc08d481704577aae225034912e9f3b10c047f309a43d7bf8d2f218ef92aece286dbcec82d23e3767a959635038d74188ca9416fbe41c46457c88f87633cdf1375c505101e6a78e075cbd40e170e4d958e0a44bd8e579baef1a9da61dfead9059012d6b9da7ceca8baa4e00adeb1448f3e602e76f8e920893443227e2f2edeed5971163ef0a68a7f6e9fa7fb61e1229f32c341ba6213704ae4f67e7e719e4b9042c50d8d9046735f4db92058328206d2d3737f1bd9602aae85a4afc561a404a95789371bd8571579c0948b09db8283de6d368750b1333979dcf6cfbfe1545c338846b6a51c762e7f2d9a5d7a7bb2416045a9449983f1436f69fa4cc85fb19229cd273ebb645682404780b0090630ca1bc0fe976d5eb09f729394401c2282f5650d058e5cbb0fc6fad1ec8cfc5eb0bd26b25e16df12ea4be23ff7007500b63eb1e0272bba354a5a794286e0e97650c7d9577b9233196e61fbdfb27496f89f0e69745fc2addd12003798e0e0b9377ca19f0ed45a371001bb25201a0ba46993e1ef792b1307cac970c8ea0b6fa51fa611855961bd5d11ca1d8743df4b19fd82ec2e886900b4ad639c2e43b8fecdd0916a25781ed387affd998b95e8fd228129137163786e20346f942462cd9174c4ab6500104c73da75199892eecfd1ced5fc8aa195f8f23258d6cfc465042b3ce75ec423a49ad0562fcc86f2f5bc7a96371ab1ac3a77636c72f75acbdc6bb487e9b9c20ed5353b3d41e1d01e6de48c36046eb0efc907e2fedd4416fc7d5b7608da81c80c332c5e95c070a7c73d118b67e4fb8d30b0d555a96b07babb9f5b838d2b5654a834634afea92d278dd029abe8e13b58c16bb7327e07484e4bd969862dfe2a3666287a9e65998b7bf775b47dc2cd7f105dd0eadedc7c4dc8d20e6d358755b5e7aa38c812f56899dee7d8fc18538b44d83b2aeb968d332c40f7928a1233b5eb2152625a6e02f51ae39b9887d2128a6e668ec99888876e51206d7be608762b0d97ddacb59366d085eedccc38eec938ad44b84286dd479e6675c56c34a11133ef11116f23666800ca9bec9514bcf65851054f7c0c32d6e5ce0ab95873cf35f9dba1d1d26de085cc4ae31b6df5fb99ca45e2e4fb3c5c983b6b524572d3fc406d47d2e67b47a7c55bf41c11fddee634cb88df09cf317e26621aa2699108b6c26a55b7584b98bd19f143db1d7900886e303d56cad45a4db04ce459c58d261c88880104b0de021b60c60b6f18dfa554b0b146d866507815e43434614f935402a8129d0f3534dbf5026942f7711417e28ae5b262d66f101e15425f4f5c53848b9dc32e8a7253426b975ef4ca8fcbe37338981babb66d628180240d249e68d512912097c68bc761d820bd6e65a43c6125d08feef85f4186da636b8c5c410b78c3e09d25a18856c8d2e0d65a0c2c4c03ea63de8456200a693a1d6f4f3550a4a3ab45f9ece5db33d8fb680cf6db769deab9587e43b89582bdba62305cb792d97b8e80800355315cf575d7ebb64518ddcf954e52d52ef46ac7ac9af6dd438f80b3b4192242f6de5b4a99a40cfa075008c108404a68332047ae4be2e7856b6d87dfa63f0ec498c822e1f7f97ce799fa3cf8f1155924fc1df0bd1211f9044979c70ce63469e04b6b1210eb9c4b7ce69c4decf26ff9ff1fdcfd547ba45f57c1d69ff36370808d4bd5b1bdce7383d697f2898dffda265fbac09e01d8da7f8f1eb975df61bfce632d92bec612092a67ce315263afc08d4471eef69aeac818a1daab35ead28ca028b3dc9b2275525f5a844c912d7b05de59bb433e6591ecdf0db4ef9be5395045d63acbedacb56b5c01284baffddd1dbed9e36ab41deb0ca0487f4953e97d4cc21edd5d6a5b3b34eebda8ae3ccd5d4fcae3e9f95cb0f03bcfe5a9e39dbd10427ffa9475729e67d927200bb463978f1a013b7c60ed93b04e3e6f9f8412be34b44e16de5e78fbf3f62f9775027afbb74be86d76a96b74a68bbcc725f6e9ba5d0ffe187ebd4d2cd3705bb21adbfecde14c97787dd8bf33ecd3e5e2ba34b67d139cc984b92bd4807dba56566d46b081609f4a5c0f71964a1353133eb26a143c89703db8fb9494de5c0a6e5ba7da6eef9b5010d28dc8a7aee97adf30a8ab03a9f7ed7661a6fb668fdcef5bd7f60078fd5cf85d3822d79410a2b6d0e331e15acd7df6497b4694e0e9a9ab0bd730cf3c9b44686adaa9f7cd22f98dbb700ef4393ff2bb4675611b8be4bffa7d0b32f4f89714950efd2e9c1ff99b9c14fff5b68d37f4487d98b2696312e180b4e1c2e50b08d90e1368b08061cd7952e462a4c7ca2bd57134b45c1e82b3748f8ccf7cd172634d8b355235a0a48cd9f2a1044a728913b12f263a2a700a702c82a6f37d91259b37c497ece931c7a70dd1a7cd0ec6af3967b3cc399fe745f326cd871a568c1b55618abc819a8a92726683cb13241c15d6f38ccb71ed4603231492295eb6a00d1993854bd23e1679e166fbff038a6fe25e7ce108e3fdf08a44f190659da435f210e29606cc8e9514b24829a610922205102f2e2699a4860b4b0b2bcf3819343c7a2ec993c6c60aaf236d7344c25cada1c1a2ce1b0a395d9acc974eb3c1666595538c8c16d3b671e37ffade8761db23112f44902c76f68388b05b8454a892808fa446283f7fced9be098bb34dee8cd9d458990d40d521ab36a07c531dc11111ce377f04e897df007304e79b7604aa0ee1b7c1b2fc11a73a84d5a460d3904da69f0445c34ef1c794141c583918b0e2c71d326d7c78f570a00812fc4df01fc1ff02fe3abbe733b4e747ea8f3e1e7a10be3b512c7faba3d8e59db3cbf2efdb2edbf67a93bb544bf38136ef85d41568af1fa4fad4f5f4f9d2d49e679aaebedde3f36d1f1f1f9fd5b72ffcfc9aee0b172e00010161f8d5b781327c1666611652d7f34c539f0a026bfc197eeb672faed6b85a6372b549a1cf6fbdc26291275b638edafea66fe026f77aa2b8772a899bdc3aad739d6e4898a56ea4fa57cf4210b801caec59ef320fef4a9eee5d0bd43d10f4d6aff597e5bb99bde84b6eaa3953ed326569de20435242cce4451f52bd38f462d89c276c66aec4702483e8092cbad0e824f15223e86fcf6490f78456bab876def668458b0147f25b9ece4748e8278880d004232698608209845c4808cd0ec40074c1f720fc16910cbdef8d3448f0f7af962f7d08fb3e2eb449d7bcefffd6ffdfef01f01dfcab0fc2ffd5df590ba4d64cae6dffdb1f007e83ba9e7bc3ef3c06b27846e68d07795c239eb5759d95a142adda9a7bef0bfddd3ceb3e5608b5426a07be85ee7d14e08a473433163ccf110d7985507bbe596b6dcae3e9f1763a146a73f80a82d0a0a00acea320f3fa380f879eded1dfe1a3dffb1d879fdd1c903a704042e280d48103070e1c3870f8590b44dff68e5410f216528378b8c29edfa5bc2b74e07d134cf852875f9b8456a0b57604873f52d75348eda0aebe8da21cd4f5ace08f844448ba6f79475f41051fa4aebe0dc277a845ff56a0aebe9d1ea96bba5321753d777a3fbdc5bf197e8e5ee879d01fe250c15f355f4a1d38c441edc03707d428140a515c2359dcb8baaea84dddb1a32fa5fb4a16e3be98c983f73954808ef0a5db665fad26cdbe288abe0777a312ec2335888707e1423f2507dea17be0dd212abc52be84fe915210fa41e81ffd1a1414f408403f03412f941474040ca2206882a01141ea7af4f677475608b542473fbb712f8415ca2024a4167bdea26f1f68d728f809ee8607817f6f7b1e00407d0dbfe141f86ec34fc317fdaed12f3b50c3ff7e1950ffdf7b20a8ff7f7b08f8b7ea0ab555f4effefffdecbe3df577ce537f42aaaa4115fadf61de3f083792e0fe86df8aaa25f07ef56aa957c8865fdeeacfee9fdd451a7e7917a943ef0b22fa5d1f434241bf0a0909fd7a8b4241bf110e1452d7df414240424242ea1af4bedf05fdae90df2d16d1a0103ef4d15e01a036fa4c172ddee25def70f7d7c2dfe209a4fedcd3826a1de8f317bf053f291e2415afdd7387bcbdde61cafb0d57f444cf94778bf76fd7150287e44971c62e280ebc503b0a94e88cbaae343e5d972ea2ba2ecc84aabbd497eec6495952bbad52a8ada7b6f9c6b80ddc564d4a97bdcb3c0b56e9aa8b5bc3469116e9be4e48d100ab6f877b1c94696188db0bc18158bafa6ecf034cb448f785db7cec01fda7ea4191967b50948f24f4d07f41d0d775615dd7b985ecebba1c78df2bfdfbabae6bdfd75a982948ab0a9027288c8c4d09ded75d988902c413be6899b2150349f0be2e6a213d46b3b8735c96f93dff32b02bcbcf0050953484b3b44055d2fbfa774d75bd3d03e83fdf96b683852bcbb22cc3c01139f02621e9c083efe9206028fd19e87de95f26ed9c73068640b0bfb38a2185f4960fc27b97a7ae4d4940f4d43f9ecf77cb1b8c73ff83fb494df9843b5d600f39e77cbe2e9fa735739975ce59c629e745d4e59c73be0f04125924ff0e6fe44cee44d6c9cbed70f595c30e15952ee115189752cf304b221543ed8ab8541604cefd02a8b84026ad68ed98cb70650d303034c9cd0e1dad373bb0eed81f7326e5100c418285c894284c989c56605b6911e2188e3164577c80f11549f31bf98ca67e9a84a0648a1531868d619a920658d68fee82230c941b5c6b4eb2c0e1a2829a15ce8c39520566a3a473ac8186a402e72c8e0ee31c0bc816766638d131943344c336e30d1311266cac9c49ad10e639d272bb85eb419e0922c7828a161a2754b1e5d0f85642e9786104489537534bb458b04a579dd6c681833d48b66c1ca3cb80acb4188af18b56523ad2925ed87e2f58a7aba8206ac86094b541a1820ce3d90f54d559933750b89445bd8d7d01dc5049f912d5560687f19d184626161099f3866ac8962f2419117398020c2770626f725b2c60fcf05941ce2b899d2a29607dc56d9fdb0e67915cbf083aa8551327126006b59ae223ada09b434cbc1a02586866cebc99f34ab32595b146cad6a66d47d6989c565b30e79cb34eff8608331e91b3a548f10d2e5f1853407979c1b1250173a638259873ce39c4080ecce0ce0870be8d9f643552ea980f2c3728d61012a74c9c2d54b67421c58c0665642cc2bec2c84df9945ca4364e595c01e478a3ca1014650b2f3b0c6c4549f1c6880c3a39c2e40c5590d1c21246c6d4f1c204a4cea4a474419372270c123165d28827541953b29002669ec61365c22f618ac4e902b3facef4937c6d1183c71b22374e182b574881a2edf18a8c1833516669b29290bd173ac8ceb478ed8071aad83963f0821627ca97953039c19c73ce5a2ce32c29392e2c65b4acac15e0ec7852272ab8fa4a296793627556006ceaeb881a1634ac385d4d440ad507f9d4d934262965aa525fdd22148478895971720c3bc944ed9c7308881ce370c11882f9ea60f437b3b836ed730831b3664a853227a8c16c658a371590226405982e3749d81045a52b6fbfbba56dda783c7f1a4ca9e40b264a17dd522ec7f01327689964d3dac0d952bcaaa2d675264b14517efc0465f05003244e05acb160ce39e70e160945bafef8f6c718bbf06d3037c9554f7e2099cfd96c5a94a80b62d7e7388d9b9d9f001ff812cea73b14be3e76af06c62f5b389eb06989719ef8c57ca149731a2a589aac708c01e5c7cf9259bafedc34e7c981ad06167df3bd3f6bde4dedfbe69a48abbc9ffbeb4fd254bae6bca6f8ed38d0f5fdbb81ee43ed134b99ee3e60bcdf418b4e3fc67fefbf8d526b63adf5d66f55124359b55a5b67dc5875a3d28bb2d65a4973e661ad15e3e160bb8cc7302fcd8efb76f665adcd6fadb5d65a6badb5f8ed3b12eb2954cb5a1369edb51a6e973f5b5cfedde5afc98ff0557213c2cfc6ef4718e824e5b9f5b21db6faef25da5aa8927be56d1f1ab24ef6c879d9813c3fb1b32fd93fa313662deb24bcd822eb581476e9ce092962273a763626cf6f1fabbb4ceac8730a790aedcf44de3aa7140a216fc429ada25a6fe52dda2e649b6a1bbe11cd38d38e16ba96554de499d4feaadde6ac13ce484bd34a4b4b4b4b1bee58efdc852bd27053a0bfef52be24bc76eebdf7de7befbdf7de8be1afd0dfa1bf70d77783ae4fdd0cf7bd8565ba6b336eecdb75bb6ed755bb6af74db8f7357045b820d8a76b753d34318d48ed930897ca8ffccf332d52d794485d7d6bbab7b5d65a6baded49793c3d9f0b3f16848630bcd9f3a0dc434270f7c96104c1395506d5a730784073185e63fb7bd61a5000c0dcca870e74a29a90ed5d6a16dcca874e74185c3e6ee543273a0c21733cb7f2a1131d46dccead7ce8448721a4c96558247feb5416c9834820c17b404bed4bf0f3a17f8f2a752aab55e4e99ac538d5586b3fb2bfe23b474f39d0be7b0abb0be272d63f346efb69ceaa9f70f736605ccb3a69f8f3aa53d6a97cffdce5eebee6eeeeeeeeeeeeeeae93bda1fbfb77d91142cc2a8fd122f95f00577ad1f67f236e777777771f1ab76b959774a0ff0634e9f5ef1996479d316720199135af3950926b82ab6f6725585fc813c298a489135c9376ce397f3e3dfffb5229dcf9cece5f613be74f31d307ce68115e3161b2c5cd003a946051c58093634b30e79cb3968ecb8255ba46045db34e1ab28a8ddfb1ae05142d29921b0f2d6a3ec834c95a018a140cc02c4329722eacde7035c1d293c93c31f2dc4d55e39cf5e75f0927cc07e1a6699aa6a9ad887e6aa4ebcf8f8e91db34f9b241152f852246b92a4970d45081c95c062a6c564c117e0df101c682b7302ba927708831ec2c89db4121890b82e62b07171b50d25762e7245242142e5e459c34f131a44e12373e16cd0d181629fc4042a69836c4180915171d7147ac1c31c674363edb98b7f18fcc56968db82e2c2e8218638cdd5dcac82c5d5dcaa57cca996e5ad0dfdeb40dc2e1fcef9c2f25b19a33f18c97ed8e31a522ae5b900b8aff1d3a930dba1f8d4d76a4b48b01e8107b826507961460a669ea39db04dbe61320471c1972c2315da438d0ad593ecea6697eb0cd026cb33471ceefc062ba85875b6cf5f8d9f84fde65ba46a1504815b43899218896b129727265c839147894503bbe20e162c3cc9db81c2651cc47d69a2c3bd804d7749b3f82699a72b689246b9b3cdbaca282551c92264474c8099aa6699a9f4dd334cd131de85d002521a9deb82c8903765aa83946c1b2c143cb99e9413129b3238a9c1634295246461484a5ab9111f0931e3d1dcc91a16ee31fd4fc715baaeb6983d889e47d3194176f48a215194582237ca0e318316efc04f025a08d8d71d8b498231775054c10630f67a90739e8deb563b32e42bd972cbd578403adba92d0d65a6bad75fdb784eb2a093e5be9ca5383f88978a97067f4f970917db2d6437eff214a9a92ba5b4b74550d2c124682b100887829132fe23cf6fd9584f3d8ee5452f75bc4480c6216e4187fc199f4bec5d62b83135277777777771f3bb7cd42c449db8f2dbc6d16246774db1e8d30f92a66235988689dbe64ed953e4d3478fe2c3efa597c14b4bd10169f28a1dcafdcce62a6e0f96bd2b6492276f957ffdb775f897fa7f9f6546d26c1aa3708854f64bf5ebe4c3da6b9ba341526fa7defa3b275a2208b3b6292c1b1d2494d1a50a9a2c282cb8d0e30a3c3ca8f386eeec4c151a6c0f9bd19c9c0c238891293ca6817a7b95b53c45878a08e822b34b8ac15665c65955f53903e16582553309ec9e195257fdd0c8c74a46a1cd95c542d29a14c2172c15641c1666c455714b0325d599e928307fb1931695832d820d940115611b2bd99b90263bd9e4ca1f1430a1c154db654a85d5160869a28308a7356b2dc84a52726582773bb2eca8d9a12e55da7bb1bff62e72ccb49e4fb51e291ae3cf7eb1050c1432a2e0c132c686ce9e44c2c851bbee1906306a78d7f6045a7ced61a5b10336557ae937e6087962a517260e25411ed0e1aa8a9cfc8635a6c758624e5dca40df1c0480e35566e70518d9d4d983c41a990081946f1aa82834630276b0ce3921c6181268203fd4564a5abcf976c4e3a9b1e3b5f63c125858218323fcc96e438430b4aec8c4959a203cbf04a052bd2353d9bdcca93ec86142fc06ea040a1460d990a3518441764567429b9949cbde8313403a284c5dc1a152c182672ce9044905ca1f142859fd959a37503adadbff7e3d9bdcddb1af62edb7c3de36cf2f0fcac037b28dbd65a0bc832a51508f7b9779ac784df621545666ba9c89923e279fff16ca535076ab6ad937af888f4abc4ad7f552a6efd4a43252b25a22fa1af5f29872ff1be676bcdc3f3dacd81facd817ad7b583b233eec6eeda5e5395a8e640fde80f5dfba16cbd0ef0eea9122053fd44fa3fccf830b44ee73781edf26d58b5a5222ba32bbc5f8d90bbf745595bff6a8462f78c84bb57f4a6b67bab04c8ddb3b1f5af121c776f2801d86ef7feb44f13c8d8bdcf5d1e766faf3c73bb87dcbd07125a270cbbf74052bb0734b57b2f81d13ae5dd7b251a96c9e747faf56e73404c5714892251356d3ede10b7b5966e6deb74c9adfbb56788dcbad719ad13efb8756fadd31008fb96bff624b7aec8d6f96ef4ccd83ab7b6ad7bef85d001097b15087f4844faa96ae2067b1e2aa85fa9a8244469a844fc61eb51874e076afd4ac3fb64e54b44c3ad5f89789f2690b1f507e2d67b6d3a6ebd0a00b937286efd1750a5bf83b6e2f038c30685478aa07ed40d3341fdf082ec827421a60290a07e14a91f5d1b3a8f7d81c6063ef62a802b5b5f70dbfad70fc5adbfc8ca978e8e0e2cb261978ea858305694e52b7a3ba2f2e1e8e84b1f9ac094869a078505631dc828b2d741d146551ee19794f7631a5aa4a28daaf799864d46eb54b4f57310965edefd1bdb6d6b104ea43873f67a74eca068fbee57a4384d468b84fe6ac1d8d6cff3531a3a50bff73c00da1f8616493f075ad21503b81503380ce0ac9305a09d8191832c6906c60d9cc323b44efe46f67a744491bec4f31a888722d7bcb557a5610732faeb4006dab677faacd3cfd6ff59fb2eb8ad1be2b6fe5337b5fd2fd0b0541786ba164e6e6cfde5a35c7b551a22b736cbae554fad4ac3bd811610d5ce73c6e5eb371a0a416ffc431d6057873a006ebcdd5abf99c76e0e5de990d3068ba4d4933b6da492bc316d5b59d5962a38608eac389edec6b3944bb19c764ca1b7948f614015b86171244ece1492305b47263c5ba7878f355165beb8789059a82ea10a51418e5829b3460e8d2340a2e074b12ab58e45761d9888a922b2266e0d051e951b6788a4a0030d94343f822057a8da96c4d88a43e19823ad4d4a95b63847be9cac2240eefc6b36ee4ca444c38f5c956eb8d010831b52ec2a911c59f45040ea8eb0eaec0d5c9731364166499e309d24064b1595112c35407079c44ccd96592bd3a6c59b2e36362323a516e96ab4dd48073deb8cbc70a7081c206bd8cc61193133eb79211246eb8bd7132c2268723cc93a6de0ba8055b515310b9b33a3a1359c7332b5269873ce59e79cdfac4b775dace8cb961d6fc48808f1824b2266545a59c7e49419526ee0c6d2d51aafc294d1b15036c6a7cb6494792983d860a9c271870d6deb1c92d683ba818c11258e8835034d09861aa43532c94245650e07181642cabc746d6186a898525206488d744db974389776e4b61bbedcb183a6cd6c0bae8d75b932204044927857665d5fde905153074e19a42c47dc0b3a5d6441aa98d508e69c73d6528049227e002942260b96266580944da154544d6688c9f106c50c599c0b2ee642cdc71829b22546d27e90ad918a71e58d155c922c453df668c0b8b10109620687e5e38a768b43e64b0a3314925867e7f62223ac9d59612385c6160b7b02d91417725f900c7db85961692c07b5dc7d8a8b12272d880b2662650f32283c0ac08226ca17911658aec26c5085afaa3239d4de72f020db2a8fb4c048a25d09b3c845e0021649c9ea02d6c91dbfc071642b764a3b4a9ccc2ec850a019637301034e74c4a9985206c7c4164d0bc7b314451c452e532ad0d676816c83c0a3e7aa312b122ce5b1b3f2966339c3cd9dbd48cbe103e92467cc56ee188bf253a56247199d3228bc84cad2d58e89f0e1a31ea90deae4bdf86b0c493a3636448fe53063337ce998d027c582d45a6badb5d65a8f59d24f005fd2b0f5a7fa815a6bfde98fe7ece3a566feb384fb19acd0e36addf861a30952c68f3358a70e312f960c052130846b7351327ebea4ab6fbbcf22292149579fbd5a63e04cd152539124498643cc5886a31e73922dc280a9e0f5363f114301488958a241fada92a5460b285574648901412d1006470b878db9b2a9eb2e2686c5d3629e1493b10b8b1b5aca9ae7640b2c4a49173a67658eb77389d78a3637729c41c172b12435276cbda82aa230c6a5c411c6a6d545c441e58c591c32df91710a782dac0c83ff05cc585119434af1888115b6c4e7490daa2c73595d5d5658d2372a4c4b97613b7caed6b0d5597bdb7242bc01c3020f39315d82a851f380d02a0b0f38584e48814b62180ba82859dae6b418d2c5ce132816732ad4e0e6e6cca84a1b701940e021650487d98c23584e5793b1e5316ee75b64ced8c180850917ec2c66c2ff6b5a423406fd47d42688d1cc7c990afaef022541acb6462413f45f063a8226ee8f1f3fea044fa05758fc80044ff464a52f1853c113570d931e557a6382277e849870925194113ce151c8be6804f1fbcf040f9de0090ac004b19a4b9eff4c10ad099ef8911134e1264a284426c3a0891317c6540f34c1acf23c00f74f5caa38301541574f0fc0fd9de9c6095cd07f1ada04af18211b31e8bfa215823b54c7b3426d0f52354418f49f86a9e0097c3decf24e7ba32ccea5d096d9d7665de5302635beeff7718b70630b1b4305dd480e6ab5a5fe213aa0d3e9be84126bf925987bf73ebc75aa75a0ee6dcf003b95c867b1d0af0f08dcab6f63219614fdfb740acb379fe7c0a635e97a85a5ce58602bb658a77c73f8b5ba5bc49f1f381083497f97bf10cad7ea90ddf9022be1c698e908c517210d322b3596e0bf42fc774a6f7d6267f50216c9ff26d1b89dc54cc124f07d9998afb2551ee62b8c71d63ae78c71d0cc4e4ff9aa87fb438c0f535ad649c3872921bbb92677b7edc9ed6ff55197e9316dd46549daa88ffae846b796706fbb636ef26ad9ab75db4eb875c25869af3983c8399b468c01c64918600c02638cf10e449d9d8934d34c34f368a6a5d6c9cda3893491593b5752c220090325254b42e84d0f610d1185dc4e5fb2426e43451cbbd3f7dfdbfd4ae8f3cc1957e1a1273d89ad4e64a8d3cb333b7b9fee937e7b3d64de79a2399f6b09d7e5f5f0bb1efc7af0d7af73ceba2ccbf75ff90e74cf596ea78531c658ebb73dfc74753de8dfd3d3d081ee9f31c6daf594752a9f9e303eb3fb2d51e81e0c5929061ae99aba181fdbc5e4d8febba4dbb6c7e4da5e39d8fe766cdb63d26adf1e08250c1efb3e10b8ff6d06eefbbd1082d0cc28d9f76f8f77be3f30f5954ca9cfbe5b0bdc2edaf6a805b9773d3ec0d4e76aea4b21b5bc6def8429e2240a0531a499e0f561c7c9141a65aec4a811bc9fdef75d773f628c31d65a6b5d426f2bc281f68fb6a4173fc669979d0811f803cca47bfb9f04c26238672281041edc451f552f0946a3f15a0953cbc367a6404abd01487a9f047bd574a0c2203d1c770aa19ca55992529306676906472c7e792d81c2864c16d9714b982a1f69d47ef891ed17b63daa55a949a51e3c79193dadcfe77cde0f03a8b42c932fe1bf976780f37939e79cf308f4ed900f03a8d61c688fee9fab897d9e2a91aadef5c71aa1e4dd110fdc7d5d9766d38a74b5c702e07f9cfa8eeb276d1109c04c66d04f147d133d81deedbb92964322e8a0ee7daf7707d1a9264e0475af9ea5a6080e54cf5237833a55054bd774631e55d759eed881a8d2f084832a1a8a5a6d831c07549ae0e8284b5a30b4359df179d393c5c74d6adf9a52644c197b98d1b22565bcb2e1c5a5c40757591914d50d322e78b419526709932c2b31266a6538b290956338eb09d79db413904a56a880c54acd97569c189b768c830667cec60daeacaf1b295820b760594992460c5f8cd9cc563032040d2d6ecc15a8e1952e3fd08c4c79890bcb6ff28bb335498997fa988c9a34d8a67ddaf729b04a575ed35e49346dfdf87fb670600d3906c16233125c7d48beae92a80d21c32308b671fe71e07d5e586a7753921fdda7a00afbb6650cb514582d6ae33ff1b957f763163adb4826f4b6d7123e4414721bc2d2a1a4a4b48284d62acb9c9f884f564fc3a7ab27e2131187feb2ccb92c4becdc1fff92ae878bc1f570df04100ebc2056a89db399f1fbd26716493e82042260253082037d04205a7b25a1a73e0c3f507d98fa10e3c3f0c3508ad63affce7c74f76b7e9daacb59f72ba1b7f9ba6cb5de69adcd37558dadb495f3f4256d9ad7d4da44511445d1f3bc497ddb4ecdc468ccdb4ae88dfef9fe3aab33cfb73d54ddd9377f596713131da8b369dedb2bf3cae3a545b93939533dd697fc72e9df5a229be6a9b53eb5763704e0cfd9df4dc88eb3cebd9ba3f8b64eabaef6cbf267ad7dd35afba5fa3bb3f56da5abefb1ea81ddf687ece79f6fd560fb6387db3dfee5ab95cb526b5d9ee763476fdb79a2f887cbfcde0b917399b37efd3bacb5ce658b240a58051021c28fd7910a38bbddcef6cac7bff24cce6d73d8f6a8b664e39ebfc5f857969ff5f07ac0183f93cd7f96bd1037ffcdbc6c5ebd0657e2ec3b92ae497b63bf1934c8192c92ff051a11f5d6990c19ac93f564d6d8eade8bad1c57f90f0f3d89abfe6737b659dfbc06eede22f75eab111118a102463bffadbad84a0749d7a4db66bbcf81f9e805dcc5fe2b5409e676b6fd84cddeb69cf36dcbfa8eb91eac4d5e0f778403af6ebb6d59dfb82b5493bf6f48d28e07e4d99196247ef68831f729b76da6af744dda61b6bf068a49d7240ddce23bbbb3b9e12e819d0a94a0fdf43e01f18fefdd77d7813258a48b811ca8d7c1ddd8f38f45ba3e35da64ca46a150e823e8d8c8df9a1fe4ac6dd6596b6db56bad33564b0861687b60b70f9d32ac17c21f3bc63e80c2524bf742941763a7802d5d7d3b235f5a49e88cdb37d09f43d89d69ea8c3ece9c4b2d27765bff24cd63678d560cb7f19de2f986a4aed3e9743a1ed32d9a40eff06aa9e8799ea5d6ba9d4ea7d3e9743e2129516b4be129075e2cb43b30a6c252f85ae5c070e771678d76bab76fc2697928ba966f5ed2b939309fe7799eda546f7247da76dd920ee48993e227e14bfe4e72ce39a7256dfc249248249148e27277f726242e893bdc9ac41d92b1b1b33bcbb3bfacf496655996abd65a6b9df6ca377ff8b3f9e5af03fbe6979f7ff6f50f3f5ecd6ca6088186a32d3681c45adb069d6fa854ae341631e80cb26800000000a3150000180c08068462b150305023350f3f14800b68903c6c502a134863b1480e23218a82180842180618620842c428e51c232b00d2f69bda36e9e97ff6aa83ef1534edbd7ea56fcff4133fbe27404419cf8bf8e5edef787fe7a78feaf14ed4a25be9dfa51044a9279cfe19240b24f5d4dec95babe6980d56cbb18e46f7922846003927f9dd388836ffa46e5f59b22f019b01d801fc8aa65e39b522097b95f318ed3c7d205725e5a351bd15024ddab68ba475d1513044e9a6ebd55dfd86c085ec5a8ee5548515957a97d12be50233930ecd6ad592cea4c37a7027a2408f012599f7704c6b04ce309512a08816f638e3f007fc9118006b48f6104352f5bfc82945a19cbb8f5d1f3de297f7639076785b2053abbf5ba4fbbd5a1d5e5ba185f89f9ba3b873f11b9e2c9f7c34aa3311fb10f6b334bf2fd59447a337f601f20bf16fb045cbfffa6ed80851b1e70797537a616abfe016c3ba2d5c053c0c1fa1411c470de0404515f212415dc275c6847cc1b8b81bb133b25e1cb2940580be013a8e566c23940c5638a7e2307da34ace83e8bc97127f90656bc9ecaf946b856f2ababc75b177bb7e8976412e02845b5790257e4d5de1b732a84e829141e195fc0ca64b9b6f2a6998133e90298cb2a634f62ab2a432c26188ba4962dd0c8b3631b313e01130aa13d66b0618d98447411530f22e242a23880aae1b9249944f26b84d16608284216df64eda96eee26a064c3166ed845cfcedeba69c6fb77383b2e65fd6c87a89e700e0ff658ad8fdec1a9c3d9235d5ac50d539aa103f0afcb160910050d95500b837550820df01fe604673e5cb2ce7e297cb03a445a30113e0cd7831d769207eac47c5b5bf9ad121d4b263efbd241d6998fd3c5a3741cbb177efc0229ed038486102e42e26dbe3946c9dc6a41b815883a5040e100ea8e46a5d90f2d9280aa5de6bab5eb0713c17221709bb9688669faa42347088b97f95c554696055216067157b84757e7103a37d1d1e98a6ef7785272dc7721ac654a6be96979d26c92c42b170551152263f087f82303df4ab6bfe63c16008b20ff2b7251d64f2cc94e277265b5bbe623ffd9ce7cde5db88963398aaab15748769bd3e7daa178899a72a91da03fdc522e1133a905987b62cfc1c53356b35284ff9334ab314f401c2202f02b8e2a606278076760abc2b32efd2d440e6318cd3d52ed858421ce3674542591405d5704b80686786491ecf9a1ea7bd780bb1abde746e3fe6b904ca3e56604f7eb68371a17c05e40349ae700566b22b3326bbf404438a30ff66b4151b44641aa3bb5248893027a447b64294141caa4d1a7e4f99f4187539c275dc1968bc33f49134ccfa325520bc81ce040de9e5150d02fccdc603fb7d26e4b107b980ec2a79e14d69421898db8f69f0c7cc928ae9e958748ab0e59099a6b7695e71fc9805c6ac81224247d3fb5a25cb58ccbc670eb5e15fabbfd5cf8e261868c2141872970c73f5dba57ebd48f884268259d6fbaaa9567e72fa9fa1384be2f7043b5f87ac7e41f688e60e36979a9774a9d90a8236f09ecdca20776886f8df4da5ca1d11a5af9230794a77d7be06c368549f4b4e58e28b7ec94f1820a2da872cb0278887bb1e42ca61363554cf23a69e0c5591ec0c8ad040ab27f0a4026e9d6c7d5cea7c2d508aac5f460a48d370d1d71fc260a330046b0238680baff0321d9787fa832c50b350fb6eb7d35727a6069ea62330209055adc5ee9d4316cc260df81e5c082d6fad794053edf7d04bb532134f4cf389e5e0906b3146e9ecde89d8d071ff258c44bb72087ca74e6317bef249690509f8807c5b40829592d16d8b29778b8d86f7907f6d4b1e317e121b3e8a714261f59dab011958919d88c3a31e1a86c94b339c5dbacfd4081b60d58e5b9d6aa7a9ad937c5759755af9c931067b622abc0bba016e86c8088dae14ee54dd76fd38b57876ab102a502fc87917d2f5e331eec59964c3791dae1a4e8c5b05951b9b5fe6cf393aeb8c0e70dcfb39d6515070ef5d9dd299372538445c558e80dbf27fa172fdb86b0c57c9869cbd22a4bc15f079dd8024e26c90c229bfcb6b3a4f4b82489ad34e8a43417ec714c5d39445bcb43a725fdb0021e7501bc94155aaf177ad490059c1794e17cdaeef798e902feea89100c39f4c977a8333e1c861675b373ecd135c4992168fdbd51bda4e4d17bf03837ba9ba3a26c7385f674e740b602e79fc2e22f3f5c85b8973ebd8d94bbda7f51f552b658b7f7a31fbb68149c77451c127bc3fdf3ca5ccecfc07576c48f105f9116e824ba4e300d39197c8d009c1d9386e85903f6ec2010805ab997c05272748101e7042e923592725c7228609a33bb213bef9163d4c5e0eb64590d1433b09aa8a9073f921b265bf8a53a2112a36a0250f421d10ae80fe7fd714f33829620038b51c2f16b21241f402ae106dd676302978141818f894c81f4239e0e8c0b038ba5e9f8b95908d4386208c0001547279fa39cc7f654dcaadcd21fe2c69aa9fa3a28b299f23d6ced0afd38d70ad699aead0c361bdbabbfefa1371b6fed32ea051b199b0a7f22e4363d0777e58f5c2d8ff5781ee04ae50e486b15870712de8db36e6ce854a1015c461ece0d8508955bd399e6c441ed6a36016b3710a2fa42bc944f4bbc015c0669e54b4f6c1e57c669e5f1f0901ea14a66656923021e3ecb30ceba4eea20ac5f95616c70e9046b9785f97363b6d7546a4ec459ba5a78f2e07c66cef9e6b2e064f084e019bb00adcb7e43b6928fe6213825e413224a1f31deea484de7a0cccc11f98589e66723df2a345084f014175b045795c25bbec6c3d68a76d9f31bd4fdf9e569762a3e1da9c150ae15ef4eefe29354261177a643de3fb761c7dcb60dbc809f66d9f43a4e2e44c4f4589af5291f584a29bd8db276b51f291fe405112881a159746f8e03901c709fea6499c5dc619295b8e96cbaa180f40b06ec06d8c21638724997aa1fd74c9f1571da51771a0e881285979d55f9e952daaf24ad6033c4f8ac6154dffaec4608b0e3b7226af5cc223feb6a34096c6fffe2cd7fa56eae7934637397347ea22452ec83b3098c7c71e1a98085a689d220a6257e652df1ea95bb0304e9c3a6ec8e80b21f70d0d0fd9131afbb552f0ced40eb37e257c5427fa94912596b100a847a58167e6d18b2aac9fd1388ba7d42eee645badb6d9aa09a0dcc5c956008d8a62bbf5543f6ff1599fbfe2d7cc8b03a3c6be9d68578174f72dd8cf4f66ec078cedd1eb99c5d0798fc71921113f50ae0c4434970698bc52c89e493ae516253181f9c23efec9835d450d717b2ac8be48f49a98c8da3ee7ea48c9b518ab93492053b88c273b0611fd59decd7aa961381edee7cc481c4b9cdea78ecf5d4332c8cd2bcf1544be7ce008de97a87b37db6f08928fafcc8f693e0ceccc61ca68f3fac7e0d2436941b9d3e0fc6c3a3607fdf255cb4b55bba38e43e7545051a0a9e8cd2800339bd747a02c23bcb5ea51cf2c0ba7e19dc50bb3998c7e5d9b11df4f30bd884ff0d7ccb3e7e9cde62d44976abee45a3453c4df47e5e3198536b5b98928c48bccccc259c532fc7342959ad3306174c6ac904b444279de4a5a59a99b7595a4d36d7363c41a2ec4feaae4cc3aa2e6a5665ca0d7e3c4ccc0df2fbd74cb61e901281fcbda60d5e326b69565b32af5afcf6c02974574d0d6ee8c15aba6cd5480c7ccba9a36aff3c31d5b2c28a8944001c40f8da464593c9e0dcd29e394def83993db81de0607ac82752b62daf02b8064439d32ee202884b5081b3de35c50fcd72e70d6d9d86daf46b0192c9bc677cb7a1f322e82d4c1a4135bccd2ee4abd7d7acc5587632aa541c9f142f186e91738d3420aa11283409e347dddd671015daf7d2e187c528e1d980fd3a611f2e0f2e503fdae16abde6df9527b440e373de5b2578c1abdac08c8b81bb6280d7bead2514c7d3caa0d598bbd82da1c7e74102bcc09cd69f944527a30f09b3ab52697a5118cb45db67a897f9fc90afd741ae58c97cca1a06a33eb6aa4b0e2bac05dd7cfe103d215dbfb40a83d11e0ac30a64643eaa000b8476eda0c2dacb1340682ef425b64c12ea9c2998cff586940985518b4fbd9899ec1aabf2e6bd966bbe312b43eb3b5eaae0140bad8b4264a324798259e28ac6599bdd6ac84fe30751dafb53143ff924e14f546788650ab90772846497a650f5e4433f98994e6c2be785eb03f409cc7b80efe5cbce3e3e7935d68f98d8efa689f18eb6ef9453e8516dc5667fbcc07c8c4a58249edca72cb6a2b35b4406206853d2cf8f081d3a9f3a04a5be70e36eee75a0cc179e0341ecadc26984f3eaaec908209268d6c01e81684581030b99b649caecf7c8c71ea62362361081f7e6dc424902b40d9df681c1cf6a0de32aa2347b44301b7f9df5dc07d89c5253444f4a60b98cb2c4a701f010295df27b15214ef975dc851861f4b8389e697e3366a1cf8f05517d67741b923db57ef4f45623f359a359a9b4592a4a0422bdd15673c857225ad41190566b1536a57ad4bb21b4d7b287615a04fedfc85a4a70ece7cec8616d76e9b9a185a5cae0c17081e5d24647601533949f6de5e99ede6839db96017ff20b2b1bed0af5bad5d32348a22c03be8a6f561b5e12ca4d200b57fe4a5ffe866561be26d3ca54c983a48823e2fd90539cbf9310bcafb29631843ec9c0fe9226f19e51bc1b6961ff922412f1acf5812e717d301283707d11a4360b983c5fe0faa73c9ada6ef7b4d8d63bb9fecf81558974b75657928612c6b6d6e0d82737cc55475fc66b1a9550e7a384e9c041423b07de743b0ff94304c45f77e6a91b6bc25e6590ddd4e311747505d73dffe9eb131878a5e568928633a03c240cf0f49fdf6e4258505a24337f650f367a9e8d17fae567fd436ebe3afbc893f0a1086c45c4d48f8588380178d060ef4ee8cabf70aee0e1a2830cae8dffe8fbff830a1831287dffe60a68161c394846ccd499806d8ddf79681f527660655027fdbba9cf01cbf18c6b2ade0e4e88070a465130e72d901d279196787c6e5d68a15286a71bf16586fd8ffe1abcf8f37295c484a77d531548aace9f7541200424dbbe50aeb39e56f819f099d53f17f10a0034c849502f0dda532b4d47c974d2684aed50aeaf2906fa45839d8b8e7c19c27227bcd7456ea5aa636956c5306394408b2e83ffed42a1e63f1265064eb6d740f243f5bc5bf988c23ca2e3eef078ddeb7b17580e74f58ff035275278e05de501e55a03dd67c9dc4b2778ded8296fc14445913a8e35232dec0d5dc48ef9b1dbb537630c9ab05cd90f0d569c25ca5faa9d3fff1d36d9a1a1a755255fee582c2c9df0d4000c1ea813489204d5087fa04ba94607faf297a14ab01e0408851046a94dd9cabe1e5ccf0ed56e749aa4b4517cb67e0defd92f8bcfa897c3835ea8891acfa6320c110fd0b773109f851258518aa96023249719ce01ba2ba1e27f30fe4e655897e2f151306eac37a576c776e011b727d6844cbe9a59820cd044c365c3d7d28040639c869cb77a1d8cd1bc1f9f03e60d317591ff1348677c356fcf5b131663bcd1fe9303bbdad57fcfad84460f3836e35635e2f965b8c6353afcda6128857f5d604ad7b17689cdc74800f819e95a3949f9bfa86849035d72fa3a6ae2b31e9996a4ebfb813d795fcdb42eefca08fc9f9489133514f9a9940ccb9b0d336ec8b98481a21f7d6dfaf1ac45d60eb8fc666353f8c7d5e0c11b00c57f3bbe03bf8902b5ff9e5e64643cdc994cf0eade6375cb31df1ea5ff2ec4bd33e0f4c2cf759cb911f75bf601ec968872e4bdc3f0675cf432b66540d841814eec6e47d638dc89156a9c20afeecb74dfde02f1bc0cdc4e277c74e239055faeb4aa59430c4d709371fc07ee09bfb5c65afa97dc1fa48431426efa2a1b648741df92a87f550e2380f671e89030ef2b9212ccb63bb4380416f1a22f449d12c8232035fb4c03d98fdbc77b285beb6d400b1417d4ca6e9754c92f948d00f61f34ed562f38bdacf438a9c9a4bea63e786290e1841cea579991a9a40c146ef7a2e35487afcb8f8159af90128d75399c271ec6e4c01b55a215cff61b6db91e1496ddbd4da786d2b1b1ec11888e929c52241d394927a122bf20832d9933a62a64f057480e77160d882095ebb334c81ac4fc669ebc96080e77d4efed75e83f2bceb26de1aaa08136b5a5ebd36b26b1622a843377e930c25823fcf065a925d5f11606797105657f9ffe906fb08d58daf6843943755b4e5d60bcceb648ed04d2d9b15be30b7312dc0d3d4d433a9328cbb7552cf8b451f7f50ad4b657c71c47fa704b4b5382621fc6fa0611decaa8e88a64a173e65aca640f60b12032a068808dc7c4b83d009dd7bbe8a0dd8360b819e8f39446c215a580ff1ecbdaa4d0179a0f31cc3e16db203e9e33e8a10353e2142929372ac40320d2b284bdf501ee9c6d294c6845a8b0133f83230c30a50c465256aec27187481c5ab8a1166b746b82c413b83f400dcba44c0733cf9c3acd3946e37a6936c9ac1d9ca4985d7ab6b108220587f19ab7519fbcdba85b459aac42ee355aa62f25b7f4f1ed92ca3bfb48176a9ff5b49df9b8c570683d2366bd3021850844eeecd95f1507c6dd58ec6bd37330bad04efb52a7defaefe4a6b0949d534e7090b334e732ec510ed7d9b7f00b8a86153e4a9298bffe6a5e320abd21084eb01222230e86514b1d8ea4a7c93ebab263c483549e0f63992d2a72604be87379769ea9744493136fd23251b1cd81dbf2a0f3ea51700862a5271af583b2935b30b0ede4b2dd442b68d1065594b2f62183218e6436a94abdf4b0f2b4401121468ff3af6e7ed92377f0edbef340432ae11c63fc11ae266551e2f3615a7c7688a13a7b445fa74e79cdf8b31f6725d200b7dc66980a1c445c6823e2b5c2aa5b535919ba916ca10e1e27fb863955eefbf7a7340d2c7bc7262fb811d7f71646eb656684bcc8e3c87fcffd9661e7a887a8f5f9f1b1328ffc36d9f9f8255774663387f4e6902419a4a1ab3e5f50012b007d8cd4be38d6695c2224ceefe73f6b2121a1c1a5518c39de93360b4c0812d553601cef05a89c64c2b4deb24b0d27f96464f7e31e4074302f95b4a5c2b9c0e485c6bda7d018c93a426fb0e36b81d91c21cfc7b51a42c12098e8ebb802279447c02f66faef14ae0caea5293da252e2f287780fa612b8f6698964f89b88015fc264ad5bed91ecaacd579d039b207c35622ea4de467f4049da37118057e05100406ad9a6bc0e24820434edc94301e245f229211faf5db5356588bc310171090a17a9911e1aa5a20e2110467c36abce85f7ec96aa850abe9f0638fe9ea19d5429beaf250154a546b90ee98e1a9e99d6835618ce0e05e16447438817562ecbde555d3fa0509dff55e6baab98e29c9bb8324aa588fb421145cb2c84482f46e893f8b23825f089c9ec2f382d986e1c4ceb10102325c6191e416541b724d3d7f39de4603e0d0f8830490968341dc3b6d065fbb20bea814c8c7cb152517a0c213e78d26ca967a61a6287d53cc67eb8e7cce51f2a5c794ed5a750243a06d1723e3d11ba2ed6093f3b623d4322464a54be29f7255bd7c2052f5bf6b12c9817e6a48b9c254409d95fd8c653f23a69898ed89a4fa0161beb18a6481bee7fd8c9fa121000303d5e30c76a0503bd8593411cc8ed6ed0881ace465bf30af430c9710c35b3dc790c68ba49031a0c6bcc51ba97d7bfa5f3440fe39b2b2fbff8709d798cce4a9e79ad515bcde669e92c90ba2a06621195d520b16d87177044a32ed703d66b11f1b8b37a84b8505026a49365e40b0bc68c5a4cce0e2ae407f51a4de4d28e8f76bb6ef68497d9c621d2558976b004d66f8e4a5f0d2480ce74b71d14719a5133f553e0aa3e29851143f298412251db983e3a8756063594193472595ee2dcf6d0b8c2a55c7184074fdf070c911ce420245c7f98514fc94ed4794a766827375b8a0c43cc798301ccf982780ad17410e1605cd677e52f23576988317ead5f71327ca7da549b99ef61e83ce1d6029135a38b6ebd3f91ef73617e2f2978a9c75e8b0c530e42e519e9d2791ed4622e8adcb80d17ddb6b94cf870cd27aa80458a86acb944cf00a7a84414814912a58f5d485e4cfc1883ea798352267ff639cb3636b2e4aa2be6c8c63663ae4621c7e3d884b312e6dded3755573aac3c397dd40128c3ace7fd8c1658ef67e7825cd0aec802a471d4cd49463127cea865020737e0a5496bd010648c05c29415964869be13b01e0e15fb5516e0b86bb130a31f5a44762833c705d2b3244e9398741252ac9673e9da982307c4ac45bdefeafc6d544ccf7bec4063f886b44e8fa7069253db855bb1d1d935507c625357118a0e73690533073585686b995da2ae8844d30ce14032a3fff2cd09fadb82d07039207d1554e894099d4caa81d0f49eede612b89665d0854dbf21d08c2243e30b0a2acec7a904722c59c19176f97b55c6fbbfee33c34c298d11a56c341e6d99031c00ff826d1f7029968db2beaa0f17279a65d70b57d991e0d28ea9754b2a7cf79b78bd2c817be699636adbc72163cffd17b48a81a5ef65c55150527fc412c6f6ebf3b60d3970810f3e2f49adf626d0dcd985fd6f283ec28659c55738dbd3eb7ed3ada002cc232fad04855bf8fe6595b71421fc5df6917884f4296f083f0e7401e3c6897ee45fa877d383309013378dcb9f41ed1e5e4b792f5b0cbf2734f753e543b52710b406ede855f4a55e8330fd0d3ab562d71b9da4a104f07aff30423dbc4a23a6dc9aee33b97b84e73c2bfa585e3b5ee154e516a20f78a2d1fe64a7b5c95573033c0206065d5298957aa3931c3ec89f65b651296158f95e2a0ae60aab5f2d410f44943312ebd8b75cab82d1aaf961ca670b48bf82907cbccf909f83279c7fa8de25792fde8222cb0f4b2fc306f77939cdc96375217a543a811581a6d87b9f89f0950abc29d84974f70c2f96fc22962d3927e447a4a30e53a25a53a9c74a2aa8b5aeb585d8ae1daacdfd9299d99c30b224111df1a2280a11417319bc27876db2a26a88b0e3e0c52c88ca66143f4db7933dd1d7a63ecfe705f15ad26c8cd936d3d7e5bed5bf88e7756ecaea205347a877cc2e5c8f255a3578f45315f9b74785859ac74f8f6e49ef692b3ecd49f30d790e3edbbbd206207234b1e35d297323119357608d94315a6894f2cc3460c82908412796fb2b0d071201593a96ba01c07a5c7ea21d11510c9c954df28ee8b3409c019cd5e56ed094b79cfd4051cee78a7a90f3518a7e5785391852797e27bc5c358a4e109dc464f9fe3b712d929df990c4c93b8289ca9c27950355428f3706801f3e43a41d2e0787653fbfd5a7d7cf8d88992694802a522d0ca5cfaf99efa405c93748de63723833c6b18e92c83f7eb3eb87c08b60048f1bd959e611ea75ea18cf2941c995c33927efeac4aa08fca284f7bdcee8c0b6b7f25a7baca1909d56eae6a1b5a135793adb1dd11fcb8f9cf728ac3124722d102673e79ed7eeb43871fa14bcefd00d95252e7fcc4b357c781d643efae1e9a655510a1bf26d1f103dbbb28306e82e9b517dbe21d24da95e048801a180d5dccddc4e7fb31ad0525926da69de554b49901f47605066b8beb16bccc7dc83ac3cc75a12bc8de55df017e9993cc309d9268599132c8cb2c8aa7f3b4936edb2b0c873b5655cdb56d2195efca381d5379c596f6c7509f8c6d2786f7787eb86fc64a23cbd78ec14aacaa056ca3af4782dd533b955afde331b36906bec0984b008c121055993b65a31c5ce4972022d67546d21759c2edb20471f5c79f0b0bbbb3a7be0c48fce7a9edb838fad3697fe1a7ff5a8c45917e6c1bfca202030fa6cdd5844d9c1cae2d699b22eb81b71afb3f20db2498a0751fa4d123e6a30f9192041debbffb427c210d9cb90d290b354a71b19e306ad6f1b1d25837db2f55ea714271a14ae420213bb00b20c9ec04a2281856c6926a236b50971df014a6e9823fd183f817dae50578adae19d0cf7ba66f8e5d5728aad8816d79173640140c35bb636ead955106d81f9b7dd8f8239aedf1524205371f4e34a3f7d391ab14e1dfe7c8c03f7d28f1437c749ad8146f9f899f19445c86e458160fe29c57ad32327ca8d77343168ab8e03aea68bacd803056a7cafcdd4296bd8c5d8c329baaf852502ec5d206a1d6d5207af6c54427f907fbc0b12cce82adb00e278e313abcf4092e4c03b06c8ce93a169cf10a753668407c47e0bc7b83949a52b991ea115fedb74a0984a918b96a9712bc9bd124781db705d3c18d9046cb9924cf9258a8464ce9c77346d763f01f36022685dc386d3bd85757433640c88537ba003ea02453a0f1683fbfee47079ff366835f480789584b01378ef9f07bc7f5e382cf107af825fe9452eb18bdf0fc2dc0b027ef00d9b49bc6e5712c60a2ba74b669a917744a894298c8f9d3f79c59929ac297a22f8719e0b32cede5e8b46e5e6d0a803b497fb7e22e2ec5a1ae74370ca7dde14eda18450b5c7d157cdf03fa0688fdaa6750c3d9eef2d048a39cd98fc6b8e8268b510058cd0800b3f0f158c959dcd68e1d0c53bfedfef9e1d2e487550bdad2191ab4bf424a21b551be3ac5b868d899f58360aea70120ba374007e32f680944aa52049c4e65ade61f1c4584673acbc12bd0494f7e7f7709e03414c66da54d7cc3efb529ba7965f6c4da75554918595f03eba481e0b72865ba3d52d72230cb67b5590c0dbf0ea2060dd351c5ad3bd7d431c971434f1df7a132a4e284f1b52e2565eeff67de9faa7d93c56792ac2b69da92311ff9c76238c868e39df5d1ff61c94ca0e5d64e8fd6f19ed1d9a502a5e64865b18feda86791b6093003f07759b81c4ae371554464175f2be47b9a90760a1bf69736f5ad6d5f433380d56e630a9e46e113fb9b1dd1ba651cb41d3ac969f9f167399712be667dc404f296f2ac4843e3efe03bf4627c74f9ebb8bb1b656168c20bfabe5838771a4822272f68cd5b989fccd26af896c2d5aef0e447522ebc63e63f43c2d950ac83246d6bdc50ddd9a9aa06cf6054b4d11d1c9aba49859d5566d57b9eab81cfc6adedad6e19397c1c7fcaf4087e77d320b632d1c1d43af31bad522a0e6accee80ec35b531f2d7664cd48a2210108cb894d80aae626dc063ec40b45df8eb166f490b3f0293557cd94decddda0b44c92a872370c65c9331ef388b54b47403db17ee30a0b6f97681398e76790dfb2d4d1f6d256b34ee4ee7b6f4094c411cbdc70d18c8df25a1cec1fc4372535df2a69d555c43c32cff64dff5dc2d00b6b84922aeccbe979a1bb22661ec88a93facbc237fd35c1d13795cd5d3ebba6a5a8ca8c9d6f8f62b3e5faae76aa4211242f20f424d8eae014a11215263de1bd14e04d46f1e862e5e48ba355c843082f002c7820e6ebd834a0f33cf627872599eb081914b0ec26b666b7dface2ad41f8824ee36328b1002460ecbf6f4d5affe08b849b48307746913c67e058a655a9aa5b848089d3dcb9e9b644acd038dad392fe89acc480379b1bdc6ae154869b3b4ea47ea5648eed70a86355101928f9292478ff34fd06b33762e2a6de651d6794271f142eba5c8c16e6feb411df35e64de23bd251ca009d0c6bcee8e750388a3603d4743c3c998a11891ddfce1b1974c9a8aae280b1b2a96cc98d471c8a53b83e5370095d1c5ec73e456e427d695646e2754ef807834ede1f16921549e2675b43ebe5919c24b3088c0887ba89fe0f19c8ec4e416de2384cf7c57be610edcded406cc6d337070bbd746c7654095bc04ada2d7679940e439bffd9dc0edba590ed68fcf06ee328baaed9852d19820211f9b278422216672204bfcde7539bb9f31698b959a79854adc2737cb553924f900820bedb22c604f71a02193dc821bc4bb8e00b381757d4520a4247fff15944b16c6e2fb5fa100b7e879566423ca6d55dc272c0e218644d78fe443d4be92b8d765275000366949fa5ec6b682052739274f16e19700d3fef394edcd0a2e3dc506761f68e6439cc9176c62eebabfec879f64557561dba00d6c8b4c163971842aa0e7f5003498a8043a26bd29a4e87661525f5318d80f08e97afc6ca239f2d484f3faea2ed10dd744f07c51354082cedfc2c1f99c8480a940bde7f883c9e053d2986962d6c5aae7e8dded4ba0a52aa5926c54356202020d4f97ed7bfbcbadd84606ff46039dcd8781d5da741926e4439bcaf54a5f3d35816affeca86d8645744e573d30b863bbead3ac28f7a927c87a6b5dff7a0d723d601ed37551fadc30db9d27318a51cd1992ce02e26982cb77153181d7029992aab6139a15ffc3eec640a972a24502f07d931311b3589daca8ddaca8ca53ff8150ad99cc80df1de4fe594e0c76921b1c11e543b96ca7d107e2a5061b76fcef96f47c4a726acbe81ff262357078b0a634fc8b6f62802140f90b44f5be0336cf67a1a20e4db9583b9a41bac7071135005f6cb851be4d2ce173b0669d710802f43780939119ff6dfc469296c7dec8a4f827077f12bd724847d2c366f6d50f3583be400fa514a83f35ab4edd5c239565ddfb9a877e87bac002306d5771a2ea9df8d0a5ab4a1bca523185db467641c8c0fd2f4be1b1c0425a2d8c80963f514f17950c6541fcd9b78c0aa4a9955ae701d6ac16fa665f6571f36a98ceb8390da545c8846121cfa0360348e5c4fced1556e501a41c651dc1fbc7090d5e98ed1fe2fb4e74833c1a9d1c10eec9318c133d293fe44f9d83ff7eebdabc8426fa1e23889594aff6ede906046342078f2b07638c382507515e008ff02dd7afc1d3d53434cf9454030308af7ef48d152bd14032a16f5d3f4d2fc2cd3a5d0a16a902b7fe767926ebe97372b1b93c97acaaa10f4de1c9a4fdc47dab741dd740017bc223c9b1168a809369b129720241741d27edb8de20b4bc07f3102d62cee1ffc664a10d29a50fe4b70b80a34a9f5611cfb013e6eab85fd9ce6fe6bd7f39d2cf8f016f121a993e5ed9072fc9ba7dd66395cf720be830587ab4ba63686b3d29241821729c277a8b2345aac068c11ae7f611c9b4c87f21d9508b9cf6ce3fd3879aef59e3eeeba222c1a5594c0b5174b536d144e67c507f3ce978bc8c4ef000494ca69ab72af3541b68310da348bf09e3f3edd60c81978e9d52a91546d6b49c2c58dac7a204456cea9c64d26049e0af81f6eb2448b5b8e90e455efa434ee71056f0394adc8c1e470e677f56cd4959d4d9e9aa84e0d88e15182d744b6f64662ed6c4e4a7cdde0f1392ef5c9ddb7c0f4a69298d69e1c7cde1d4b744d4ef299ab990c2eb1b1a7ff93e16fbb146941012173f03f988d4fe3481d6022a410131f798ac94448f86280c6e284f14cce178afa1dc5d089d739e64f11077125b496128434345bc195a7e64b2ad17621f32c9f397365fdb274d5a33ff56aa51f9fa24eae98074263adc8d9608bf4498f97ab7fb83198fe298cf8e7fc64367c93b51899f30cfa86c2d415ed8b3e9f41a3af31ff649667656f0ba3ba1248f6406866d669a4cc6cf390a8c937eb255a546f37e5a7318ffd36963ee64e7fdaa2fb999ecf0142b3d5975856e54177ad9c9b042208ff0fb9075cc24374d5b732444ecf8e96b3505d8f6301a4237a08f260819d0ac4afdbb97e873d5f42b4e5284dd71758a642792722592d63634c663cbc23c9688cdc37a13a26af9500cc24627dc06c7959a13fd847fdcdb3890d967399061224ea19a3203304b52d16ba0ae932c30183a089ef350fda86733f958b24f3bb4b847126006b70cf1dfd000a0ef743d3bdec348b5d6f92646511b62b0e5068b8739f7d01b278d080b7b421b064e84343f1e67ae23a2c0fd179271740cebde4464ed0f420d664e99c984dcc47f89f1d55e74fc44746da0ec77703ad06dfc08016a92bc7f228892ff87152731fad85200b2bea75cd3d1f5b1dd420bda641c2f305e0dc0be25b1013d2c9e328f9e0b08064dec0215410c6b52db1553a5ad99c330f41ddb2a3e9d09e533ce1c90da1422c636da61c8e77abc7905f51c77cb5101745a052f6a97b7fb5913346ab7245eae4f3242fed9d61735bc26f5318e7b04dab2640c56af74ccbefdc4c2240580a6a959b25e8b1d74a770e6d1ee0ec941efe0d595c3fd26cb61e55dfde2ab9d86ef190e36b5e7dc7476c22a4d0c342891ffe74678cf1b8f3dd808d1acc42a54e76ccc2233a54b2cbd0b6636621dad79360058fe92f593324442301cbd062a46b036769af911e44371f7d8cf8e168d14021699c7fcb68153c18267a0b144cebd5ac0db96281897dd262e0e4d9d40f891d1fcabf1da1a5ece7b9070c224681b3b99c539ca2aca60d1f55ba8d8d2d1528c83a64bed8a592bd51f6b76391367324686b4eddea1661d070f9546cd69d1af8ee764b5fdd58dc5c4dce097d440b70b0b02f6b5591bfc138785b914ab8cc8235229fba7ac292e27db40b03f9c249ea2d5ecf3201d09364b4b6f55549c93dab4edbcf509fd5a9ad4e1592e9972b3448ea88a6945336559566220bb11828a785e982e80b8a61946c39acb91a9d6454dc37925ebb047e53ffe354b34ba6220b3df753b81fa0af558b3587915d993848b0256cf0a90f64e614a8088122fb59497a39002f463da93dcbb769b4b0720df287d7db3e22f2910b3bb29359e62b8df7f93827a6532833bc5e5c859b403df66531422028976299aa4b71a797dd8edb31bcc599a8e369ff530f4ac7769e24d7e452147cd55835f52155d8fd4fb75620baa3e04a3a049011141fa9e75af926ecca48d6913a152a309926f6a3a06c4778a849c9afddb9223f446ffa161718bf0237126a0ba4be80dac1c93b1a25f1c7b88e99517924457e04aa7c0a59386ab53a13f63e1feacb6edcd41e2b22d54b39dd3f584f57e33bb7ba7bc42aaf0017dbc0567315c86ac28ffe6e798c91b0c6bd8ee9820884432d927dfc2acd87ba20c39322aaff8b11aef8054e4b9eb89d5078a0da13e52c271d31b10d077e3c5ae0a2845754d654b4c8ed6f0168649972f119be129e36d22008319d36b8b081c80a3941dfe08cc876a40bb29f2658006ca1bc70734e04db3aedbdfa3b86a12e4bba870e9a3dc4ae8b7caadebb69b442f8e183e9c19fd35b5bd04e77d8a1a0d8a38b3a20ec2162fd530a8811b15abfbe8363d24bbaa31359c5e251d261a0bf0714cfa3c6039f9aa33059506f11d60b7420e3aa0faa5db2bed6ae00bc17934e95e0d2ae08fe2fddb990bc9d2bd687f558027ac5898e74fc2afb2c204ad1b01345d74fa2a7d0a84343b5bc8555668fea312ed57b8cd3f376e06cbb372df601836bd7c2636d2435432390c5b308ee17613fb5784518025506711449e7c69c72c7e2b46ddf2b35505492d4c007f1ebc0730313ddf08da9e5a18bfa936046530f5a701a16ed068a52c4a6ab23695c5b9a1a2f5118515bfa45c7a93c1646695d4970ed04fb0999f1cda7d7d923790c0e2a0702a8f87d39a5eda9eba61a4dce03aacf8f9b16c1eea53a58bcb9c8a6da0d1b0506d938999badc73f04f6104bc8a70e29cb7811d125608b8f867ed264730ac1ffa4a5798075088092348a08ee948ae1a84b68aa66700f7e4be528dad6b5d912dbc2ca33411b23ef921901e640c75fa12ac4093be2fe4acc254736fa7dbbee92ac9244a01e258f127c8a61d92e2abe4032bf9e292ca76b0f0cb854aa52045b756f442253c03547fc9b2908fe205c344b3009a7495777d365544751fd753c6e7967e16bb4e77fbebb22e403a709d6a348f46a7c2227793a15ea648a3f1b15e1623af0911d8d9f093d3694db00e1cd4a573df5933e27d22f9bb450be8dfe5ae209448eea4186b4b15e91e4dca8d5f25c01a991f086bf2c7c393e3283895445487bccb51b42f83a4c65dcc3a01e50258e3084506faf29b75ac5370ce1c7ed114cff5f69f705961d671c1516261931c6c8afd804b594d242ab1ace0d260582926ad954e45ecb9299fdce92b3df8d40f85cc8c46e2dc0a0a7a29324615075cc01e1d479d60721ec50f217f46e62e15066cba26fcccae93209b5328557a3b8de006dbe7f7f75b530437d86f7ca7c46a247879972b624448698931211c6354117c82cc29251c828017e803382955229243f0a6b5659bca27fdee10a9314e96aaa29efd945ca220d7801e245baf26b234b08b90eebfe66db1378cca05f1221564273f03262375499a9107566bb7f3970d2f2a295067910b8168fb0bb6bd382ee92ffed8065a0d25ba4a6218be9b0a1e362fbea3390c9bb301d66dda3ca33bc0f585e3f6ae1ea09c69378774e0cf4625448a2c08805ff13b2543da75237133d28d0dd53d8a15582bae7542a8c2b7717801bbec88fda388521ad87a61f5ccc8e8fd550865eaa0323c5eaeeb63ee7950e70bd541f97b6dd3f7bbf64e33da629bbf9a4fbe0a32fa5048d12ae9336b3a5a7c302e72408c80eed5d26984ab1dbcc5f90f4e474d2e1f284b9302cdcb377ddb1037497e617bcaba838d9ca96e2970286a2a0f67f58e36f638e03c21fb8f93769cd5cad40d7fd41e2b2ecd64f2a3044f74ae41e3ca0f2cbcb2396f64b1c7dc5e76e2e60b9f8e8d891a2f2b1ceb54b83218989d695effb604cb46a85f1e74125fa3f909fb3e428708c508f60a7f6259391dcfba1cb84bf04cf93c4021402df6e9679194476a6206e0c3e115728fba5ff681ba79e7078113b27313802367b01dd40a69fb334e0898183369c110a38ce50610619646d8a66a51936fa09a3b21115ba041214dff0dc7831940e4aa80f0cd71b6fe2703d75d72d314471661d5de5425039d72c194fc6f847824a031616b4464eec74a624526dbb48439e07e68356c4137fe66414f2c767f6a7824bddb5860e0f6299271b35d5d8ad5f005f3d4fa18919fac4b2adb5e682de0365268345304b2b35eded08c8f31643dca6028b200a5290a2bbede788caaae4c8d84e94d6e81ae23263614188b503c3fc6b1d795b332c14b7c63c218c7dd174b35d6ca3abab323b6e69f7c7d0449d0e554ba00b515b8b8f1c557a3f1721b814ea5e2523f7afdf0b31b6d882bf049d6196d3045ba66255f427a79a3c64546df59854b1fe87d88a8481752b70f847db5da9e125c31a2acfe584d5df41e2b3db2cc9e88a8e4dc1b741eccb872d502e6f238ddd3c19da158628e3a92a222bd66e948259408a4f0b548f87c05393b6b6ddf75b7c82e07838862425c52daa026fe5656cc13cfa7f7c5922df6c9e896d3a4c15e9fed1ecbe39e5b3c607f19dc8eb5170bfaa3ed63714b894a39f372660881f1a195e1b3c8e47e8e41b1d4072429313aa0c8d0900539fe830018161e66cdc79eb74eb6d740a52ab230f71cc0fe1a80be1ac6d27de6e214a2554cb5900efd9fc7b2e576801b0df2c32e014d9307940b551cd988f3fb348e309a70d504e4d49d568347bac6e20e15caad55d037b067c8b5e029d587de825ccd8dce8b96ee9e8d82c7a1dc77ba277a75d93c3c551da74dbac62110d3c151d873bdd926299e56a6b5c06622f2390143e2eb28496227f796551edae14e45b7d07755c7f6ae0f9fa735646ead498d424a46bc89c16814f765a3327ccd2416266aea9a305f9d8c9292a8fd26c9e23a6214a373eb82549a4de269e5fdf0fea2b4cc9bd884b57e68c3d655893fe36b5a57125906145ab940428859e1d275acc38ad2982ebbc93ad7ca571473aff5295bb063cf90f120551423dda82a84a2dc0eb0f10f45b1b58754d53769685f14e538a3e8bc50ae8f92f92e4a2c24f485ad5c7250b9a1cd856dbf57c72ccc4ff145d9cb69f8b5a46c4c7549d0b509f69b847a7d6002f1db9985025d13b26d6340550da09c8bf3e9086eb5b87092e9047923f6b0b44b2b3e24a61f81f1ad3084c3d2bf6658bac443c09c37e31102227ed2bb35a14175818ba73fe90886d21efd49d7cbce2e9dc3ad460abe63c3b6863fa1c0f8ac231c65c6b916e886505490bc39cf33836f3c4f6d9120c93c8da2cb30c3c704acb4106f7d14d306a585d449ec32340c6277dbe5f04d08d0032e073568725e210690963b114c7c5f846157d0a4b3e7f7afc6769f34c1cab04bac40b98a941b9cfe8ede51e7712f06026ea38758196a702107cad2d58fb2c5218f7e7bac0cc16807ac817ca1bfaa86845c12656e2899ca9726fee4efde3a3f875a5947943497da40316465046afa8318430e06500c4f6cf830b46b858521324d133d931e29325c4d132f0f8a618774affb9f752986b155ed2296c999869119b73516eabe1a3b91396ef89d50810e3a27c27b9566833e1717ec08ee8c745812c5ed4f42d519c563a9a8f152a00c9581b788ca3897a8048831628255fab1ae079e9525b594d2ad5f3edefeec8fe8a6684751d7e8244d007ec4d9bb69bb48c2b09a19b2ca28cb15524f57598427f83f8147bf547d871a8f3590f8f9bce7e76708729dfad14e03344fccb0ceb694bda3e010ff86a7a5d01f6637944444452ecd9e7029702fd97141cc4af01c648236987f72a3f29bdee8172b0ab8cba548b104aa3f7dde2253df8e0b8e0293300b8cd0f2c0710a0f99e9172f9f6f0065ad8a8c83633bdfc0f0cebe9e4c8a45778a719624131ee3a6994f71f6fa0ee8a0c7671af1c89773a859d008f5bf1c0a19ea30f55351101e60575fb1c3c9a60756f1a7582bbe3fb82a27b0805add050d2e6056978e72ff0a396f20b253f8558aadb0561bac25118de01e09e96ddf68d05b8fbb884ad24e42070da39539e44225209112096d395bd3bc9cba647f30910c2e3150065adbcebb97164dc219fc23e099e4944134e029477469c29d32e85fa2c523fe5d32f9afbffb0c16c13bfe845e8314c94fd5a76a1f7d9985d09774051f2945fb1f47b5848c26a2f416841ad79bdd821166b8ee63a106859741f60b162fdd12722ffcdd7e089ec182fff838d7d6132b7baee8255c847ee79822c7a43b7bc0cd5edde3dd7ae0263a327416162d448712743618f8ebf0b034cd59b213e71d26d01b2fbd5901d3bff513e09b9d003a9f00b180d9086f043ab79d419d5e9eeea753dca1c4640c5112ca7e955c4c3ce0cc9096a9b1c41893922d60e826fd4aac3ba5a7b49b212a8186914136f98e4c0d3fdfad389745d884c4e0d8452a509f2a39254c683da7718a4b31972283fe22571f8c0b7d857b43f050b7da0d96d72658c2245769d48272b4e3b05d199f67bda37daea8d1af79f1e8d27617db01836b6441c28168342ace009a7b2c190219523b15e1b951d6bdc930a8726605a8528793e36ba6ec3b04ac9c068a37b3cea9e465137bbd1c7ff23b07ff92832a64b37ebd6c4ebc87595f3acb9d21ffdee8ac5ec83d4befc042de62cf37d3e9e1215dbefb95bff57175007b4566ebccf0d4b3011fa4578f0ace77143611c857721a84f6e1ac6697c8c97a2162ab142f4478d7c4988e1f24bedf8e4ba4e62c68d7f6814f96768642ffd9aa5465bfcfd890c48d3cdde8dc9ba215fed86e52adf9fd540fc5aa624e998b8f67a09fd8e77247b26c84bc2e31bb613201c13c0b2de9ef55bdce787ad1a42335b08ccc4bef58935ec6d978bde83395014a2b0359225ea3cbe1e7f325e53519d76474c181d2e505c64c8293d38c105c2d08660462c7ba9f4d518188b9ee105d5a602ab68eda64354022d264b8dadd649927c676703309013bc58056282951c700eb3da1f73de6fea824cae9100fe2a059f2d3c912f0a31f8f3068c372bc9b2fe94c1f05cc6bf834769af7622f0dfb8543d3e0b01da2a7393ede3eab65f5dcb1c2d7b5e4de0eb4735869f7029485d8c7c93fe78ba16f080c40e48f81f781c043609ff4448cac8260df5bebec17a5de992570de7d2bb14fbcf07e8bcd4e48bdc66f03cbf8138ec314b04ebe069d950d34154418347b3706bd45f642d290f02aa430635c8e3b91c8e3c200e4a38536d6d6236446b7f51346f27df28ecbb2937e647482f91e07db04fa3735797413e97b732b4e3d69ece834be42a681922ed406c5f67b5950e2e40b3237b09a827b6af0d4ce51dbbaa4671b3d586ab0f1f4635dd4bbb0bd61966d1bdb9eb25e36a9413f7df3990047c81b3736e049cde12e79dcdc9dacc14b38ef6832a2f8cf9a82b3b66b9f9800fcc95fd3b5e047a09979c76a0cb691dfe9c4dd4bb0cc0f6846bf54f9b666252874bce69fcb99ad7d7a1b8018e18757f91b5be7d50986bbf452b938e119a4189b665c1ecc759afe06e46846550b07add9440e698357188857796734a15838c7430123193ac2374707c3b1b7b61992022c333a4de4b3ca0182195a48da7d57a08a4e6f1524a015723c34b8f07ed21c7e18a547d230083fdcffb0d09a054fe441d475331f1d9e068070db0cd5c6b54b20d81c823bb33ce19477b2d19650f30a1782770ff33c5cd448265da07e0a8c8a007bd5a4f2a227188d382ff1b467346d780634cf0c3087ad0c9f5b14627e044071a41c71aa150d82586fd7e62caf30da62058c1dcff576096f890023a3c7d4716b3eddc368f941b30d6c2fed0719f452e3a09a5134ed0c087f6c4222ebddd115ce668847f107c4d42b1b0e3b22ff60bb86e1d3bd3d13b07771b8d3f7a33dc5459dfd4d77293a66ac3a1248e4a87a19872816b36ecc7a5a6e63630b43f2fc1dab3cffa2ea858de67985214f213644b40728007666851882145803ed21defb3126c5c0de5492deccd2b34be44f1a3a0d0fd04f67c6435bb41d33e8622f4439a088331c91bcc456886cf5d1a544b7bfca7cca52927d43c0f72599e41bcccaf7702bdff63102f6085ca12571e658e51b57cc078df03c67fdf03ec67c5609baf4bc7ce5a27542620bfc650d4d9492bc5b485d533d87f70a9dd174127c94f4eedb1ddb3df7ed5ac5cf6f528ebbddda04102628c7d6004163befd5f9211063c5c1813af98549f8cb475ac18e32aa62417862d385735af4bd843f435ee739317e5c0adffad88e5fa787418dd33ca4b545e75b75cfceb30bf11545381504ef651150e606e00ec210fe0227b45fc4669aee42f51f5a011c28602c5208adc5109587bda4966b19b97d64f91a76b08a366b8d357d9bb44a115862ea810ce4bf5282230842fde044d1879550b8ac0cfb5dca4627947b6d2c0415a56d01d6534834ff923fb7a04d949d358d463a5f0cec78c9f44ad870e92293a707619bc43176e4448facbc47a65b54d4c7eceb97319e0574ffcfc79ff811a41db9669bf2d63b2627bd5cdae254ec317409f9773382c3706725bb2a489daac5cf10a00180a661ebc02dd337f85a9810316c0075c173d0d50bf81b6c3d5ff0a1159077c5a56a50a2c1ec88581c1cb7d3b5591fd6ccb4f5455480bc59dd58a5d3e1df557a910934775307b6f9f0c785b062f774659470dd1ce2d059b87337d26d4a78811193b974296ed8b031f05e3a819fd8d0f7836b84a02f1986d2805f918e56a9119df0b6cc0b0c75c1322beee6d0ceb5a15115f080c29ddbbf027b49702d7b35a2971f87d75b4cac10ddb8da0687b5ea9bd68326c30f901264453ce8bd241c7dbf4f8967fd25f58b9d94037e67b5d09bbe6b64367b99d9ce7298d1e532f03b4301f89ba095c452439b24aa8baf0dcfd3478c6a2d30b6cbb3ce6db65db5fc487fb1d47e951db5617506e092abf06734d244f4266a52472adc07f0de2e58581493cfd5f5854c33ffccfda601a1a9ce10b3d8605e0303fb4448715820eeb24d999f2ceb82dbbf5bf0c57be6f2a00f20597e38f715b7762126b630d4a747b2b55d778d6b34e956d4e9dca1252bc3e5cdb17635c67381b7329ee1c22e2f98599a86531f2d0339ddac19cdd024eb63a4c37a5fe403099245bf3473f4167430b4163943f4b93bef6082e4f2a1906b06e778f383a7d4da702b1c1871db52d3e6c389decc373963a53153dd4bdbae5c4bf2f5e87883669840662d10134477ec1ae32c9a45d00cf7c34bd2c258016a1d4b8c647e0024cc4ec018e115d975f95da706149f7ad3d4549fc0f5c275fc9e7afe6ff39bac0489693a1bd4a57ba7e566d557f8496cc895b4efe234261fe1f519a5c8904543f4db6657b6af538295ba6bf761d600dc409fcbfc12f2f7ed5e83ce21a15512228068fb8454539fc10d80956049649b4a4a34ebe39f15c49200556640798bb1725cc355c61a4e19b47880e4080eac53658046b457278c2a50fc844118ec355c3794cb9134ae19aa2846168847707bbc8049f23ec269d79389d62c19356d93790c090e873090d145350b3725f30474298b8e13df8cce75fe736fdd9ff597e525083d5f10e89ff03fc7b0500abfb8ec40e717972385081b869d1f6503f23883c4e4e81b799648349dbb5936093c8e91970269fbef7c25a06a4c65992cc62f0b6f6b37539dfa193d41f069f55d24b959a8171032f11d4e80c524c171f72baf8428116075e8b0ecfdf19941f4968e339a73c51e6bdb5d8a1769753e04fb990bdea69bac48f99dd06b86413b811c89bd9fae304f57bb2524819e38911f20706ebe9609bb5db4903547edda05802816b72adf97052991fd02ee8a52c2af5833bdc90635bf6cbc473016461bcfbd8d23c5ea91f7c845094d2caed964dd81fa84c0365bf45cd1a4fb310d2baf92d7de3fb6ad67b3d0ac76841fc2657e75c2220520672c7fdd7b07c283cd8c6b4ce4efff751ffb616749a5c572bd77b956e0cfc37f38d3ffb8bbe3b845981af0431b5d62aa84f2b156d01912f465c538624fc401d7dea24f4d82538b8f17b6cce1642d8c9a409f81b526080035e0cc5a9a0e633f5610620f30183d80e9bcff9119e003a6954340dffede51cd032d5ee06769832fc4493af0e97d4361b1ff60fe962701d57e3495ed0e57ba453e3a08b2623c7bac66832cf0ad8ce9a56e359b547ca35d74098ac89541219aa447d368b3136a572cb7bb1a425a3d0e245b5319be360cf88bba0db18249f8be1c1e8cb62a523dfb8c49b5e6f883af47b0d72f540d61cfcd8ccc96667ae1f91c474cef8236a389a9d100d48ccc95ee0b823645f0c5c2456a98b34e351da828f7dc51d535695f4c5a8f201ff3c7796e968257806b2307d35c1b0235ca8c52c55ba3de6b0ba58668fef800999484f7516c7e1c41c69644e3acb772445510e96f9a21ad8d593179c5d3cbbb3c779ca5552c29ab3aa510a9fa295135e880749a391ca36c8d9875031f76db684ccb21601ffbeb8fc4b64d94681f912a09d0080ae50c3a8a08cdc99ceda4d5f5ff431a203fb80c3a0742da698bd663a4b9f757622d3eb6d0b66e3487fc0cb3479f12d1932cc62c7c2ed9cac3339cf1e56152b07513241d7207f8562c7d7ae33758f3185cf870b62232c763a93ec7e14d2e8314a611d947c04df369932ccc4869fb341d452dcd1f618e75b4b5251875ac9a70b19b7e31b6459eee263f81651d9c782cee8215268190da4e59b970d89c56205188266e37f099f9b6d427b78cab992c1d50f78c3eaef8566fca228e6c16a7fbbdce2b8e3c12449153b49db843ae5ea8bd45ff5e4eb876f492a0e15f6a0787b49f170c4717cb92988e42bece588e4ac24485f63e0b3e67acab7b7a1bc5ceb863d3267d05d0606430b280179c580ef468cd002d54c08d189a6c3e74019a299b7b30f81df90fc132fe5051bf1cc1704769dd980d4739e0d09243ee576771d7c90b10fbb26d004076a6d80535e90bc7ba484a7564c08acbf0eaabe6b9d85441f8146c0ee927116c33417f03f480c68d9cb500764ed62a1078d44109b59cc43596e1224a3bfe105223214a381a810c6c7bf5ebeb1b8d1ef008dd71dddc84f416a539d3f0f56c26c91598e3ed1d00d47db09cf0dd9ca4f1d2767864b4e72956d357e485cd0a6ea6923d928adad258cb8fca79c4e63415c6942ac2721a6de4811f7eb6c45990820ff7b9a3f4b1d0118f5d30ea73545ad2c7f8e97cd93fcd8e8572ce9c65371472b2d85ed9eb930b59eae0dd5d6ded3daf8909c759b73714bdddec987dcb9a181c354449503c165a8605db25c519a6a07b19c4f4be80fccc9b96fd00b1442d5493b925725d0e406380f5a61f47a4cc33bf77081a8536d635f6ed380827c292b9ef20fb2e486473709eb975f11522920759692bd42b35cd17a08278c076cf5646664de9a01650d225bdd8ac1a44103b40fe1ee82f5ad01c14919694ab60320512ad2a909995282e18486b031539f50e6081655e634be7e5506351396351448389cc8e8b32dec3dd40c8a6f67d2a710fa9b24bbe6e211790a6ffb60e8c41aa1fb8404e520af1d7f40bc2e0e374c6c98d959c1458357f3ff8d4fb7fcc1cf5cbb4bb0299706d1b3205320a1c2a283207b8776a11b900c16535375bc6e28cddb475f89afd25dd3c159ccfce8593b6fdb3989f5615f60a3054d8cbf863fbba8307ca1aabb7f469baff061141a6be60798c764be691b076d33dd6e3f6e2bb26d5373d4be3196f4bf12cb4104edfdd5b7e166c599c30b56c2322fbbb66c21e9161d143353aae68654d5605f87ba886d1ad7d39e9c48564cc98f4fe86854f81bbb232b996a332048e1fa3b6e6aafb4b740396ca46bfa38f675d6cda008b1d9e23f50031ecdf8e9d427887f8e419798931beb3df7a771963a5511c52f6f439e91048cb9345cc3a47cde3959aa837f98f022f78eaa726d1089b8026fcf2e42b267be6246af8d721fb986618693a15fcd0d4270a91b738f8e540f22221d622778bf20a99184cf6ddf264702c19d46fea7ad6225a18ff6c169344046ef932b062459fa9419a70af58ad979565759a6fe59dc63864ddc5d811b9e93b18c2c7f8549dfc0ba8c18a0ffc093386b8589743c223416473cbb3be5d16b90c8a9f170d1848df34b650747e5802227089052a02e11dbee52bcf723999e1ddc2a4ed7762d42321de8e067d3055e836877e1e8b768b58be8d0f1f6113f5fe434c4f12d39989f37b456a1f71fda15e6f6768b128c8ef4e6d548ccdaba6733ff6f97ad3b4677abd77684a0377c6fce86de6f08289dbd8475768ec2ec0e9ff5782f03ee945ae40f71e4f1ff03838f980cc6ea091e13a7905c269e8bdd7341725ad0ad9cdffa57564f235e391610b6f4c0b85cd3042ae39f17a6ddb2c34991461c56f98900db119e474710ddd7e1bd4cd7f4bf51503849f939c203d5c4926a8a49a9b27db98ff0af7cfc08251470c8e1cfca16490ef644cfcf3ac63bb3ba27ebeb2e9adfb48b24b3bcd0846f302762ef3212f33f59afe1dabae57a3925317237fe34b501526e451d5b8838cebd1b98b9919cacf9782288a1c3c9ed9c015237244bc855e9b9acf9d8dc9dcab85aed56dd71d3e15be15f12f3ebfb3878638a75e422411834fa08ca6a66e6aec30bccd0bf8e13bfa25303134b16cdc0c04ad579f8d7420728131efb0ac977aee8a4e8a2a79d68281f7d38dc4d13a37a8e1f60ca03b68cf98bcfa6d2e693b349ee2e735385cc0f57e9c0ed023aa8bdd9b4fc12671dfcb50484e8abef81f8f16d1a8c8b5c22ae6e3de1f84e4fca2299995a8d4df7b1d584745d7c48b6a8e153be6c533add27a3231e30fd33e3e6b9c0d52e07320a3085fd89c1f63c031014fc5394e83a08f3bc708f917d780b2ce929f8863a88d1f3f31118ea734bcb166944b7a5541dda35e256fca538b3869d6812819bd8001c3e7e01b0b79181b3d2afd45ecb6707921a0187e407574b7cf6e4ba8875bfc4d5a70b113b7a2143c3fb1afca6c92a5c8e522fbf389f0d0b4aff2c8c0536ee8481a59dc981e78706a2cd1e0831ab5ea239c109fe1f33800d13819e18d6650b494f503831f2b5c6157cc8d5546199b3e6ce12c31771928b550245f4da6f021e905273a3b5ddda9989ba9ce6cd4a45dc904e2965ee6c153412ec0a8923ecc66c320cd9b545af167ed88970e644222a2b13e185c9d4b3ee8cb1fd7430576ab1e1b85c6bee88fb2383d26e0d98d9a7e11faf90593594553d6e3189c6c2bc2d914f83dfa78254425542c421d622fcbae093f537d92c988a95098d41a99eddb7a1d32c987e208dfe7b00b43a400ab217e25ae8045776e34b7dbce26b514ecaf8f257680ae2198e20c72850ad6c28465204fcb80e257ff57beae6f33634afebb99b17fee3f062c240fe35bdbaca5a69bcf6e2465291becb26f0c14184df1ac6e5a26f8a2933b080eb4ea55b6043c820289803d0d304419944ed030afb369c5920ccc29a0e7ffb4b1139f89f88ec9015ac404149f11fcdc0f3a9f715ffaa9b8ef6436d01283ab8013b9f0ebe3e786f60f8c522375dc0782bf7bbf858388392bfc74db7a4f0cc8e75df010a55711f21d1dade7bcbbda59449caef099e098a09b4030e4c0dba0318f4b86fc7204d98a8a334b88b27e7fcf482cc0e4ca1cebbd187d6f05dd218847ccf351ec63eb6f6b1f9f868d094a9631ea45cbdc2a60f99ba6ac6e143a65ee6eaa9403fc8fca1ca966ad68ab38015db26d7e4e9f5e74d56040b2e93bf9f37190c209a376d7cc8556fa8b09d13e73750d8ded46240c00b543ede3cb57218b67ac828f22550b794bb9fb63744bc17328d9f36376a389a1b3452307982f3116c6c68bf4879aa36b438a4a21b281b420196f4751ea447757c85508f1eec1e2d589bcea34bad0b203841db6d6951e5c4920bcbdb5dd7757325572d8ffbd54b6cc5d2fbda5388e58cff66538e72524010b6a6290eab2ae378c96dc0e943bbf62c6a8ed39991814f47036d3f0f7cd692364893765695ada760adb5d6ca39b6ad300ca997214e5f8e56967f477076d13167fee868e0ab5358ce06bed209bbdc07bc492bb5b76fade40fb93a668dd124d2ab607bc8b4d6a69535eb9480211fa1e6a7cd4d106038a0210e9abc610989c9e64676c3d41413028430d9da4031210089ca471b1b277a0eb1ad8d12ef082826ebfcb4b5a1e16b927b7edad88461858d14900f3651d84e3a8d7c4fccc588b73f6d6c66f8d255cb015b8c2d959a27784a7d2af5a118727e9a0026c89a25585fce34dc12ed6d6c5a784a9d3cc55ef0a4d336abb4bce7b68306f056f676fc6e0d920e7332d03efcdbfadbf3b7f4c148fe7a2643eaafbb94fc752fa38bbf3eb178320054318babedcbd6d73a46ed6bd50b63b86c548c0795fa238f7665d06cb17d0b8531a52521b3ad1d31b46cd1f196030fc2b0f2f689b76994dea6694a93464d1362d02086156fbd67c5c33e65c17911411146121855bedd463e6a920317525096988c589961986c01c3182688a8e185d8ed0825e0e4a1de6330a27ca3f9f2edae158fce4aa4c135ecc4724547105513aa32689cde9e41f3d677563c2cd995cc770fdf13aabbbb69e02b0515938a2acca4c04c1829c0724687b73ecde0f0d65b2b1e96ac5f0c91c30c9a5b33a8135f86ad76fcc59b6fcf65b07c91c4b7ebac78b45f11e389165964b092056725cb96334852b0c316313b395b11523890e5928c512703854c18df9e6382312978ebd67ac64eb4702693c986e0d8b2e782d98107f38a0562b24cb93085c50bd21499314cc68811d3f4d6592b1eb64609c4ccdeba5dad78586c8414182ac539d65ec30b32be5a314874e1b236b76894174abedd6b77f5936fffa0ad10a5c9643222b1f6136e2b1ef5cb568f8f01bed431afbcc5e203f0d6711ef2d6ba2fbd75b28b29de3a500dd306262acc0e6f6d6150f0d63b2a3b801c174e7cbf517261092d573871a22156e6b77506293e80d800362e7a00f3ed35efb8c965a883dedebea54294d0f2611a5b44f10903de72053be7f82a613a763c1a8d60f600ee5806f9b27d051ef782d7762000998e9d84e97805fb1ea04f9da49e5d4d06ac3e7de8ca01ed75ce497dc6daa7ef9852e4a345b2c2a66fa05434ddc774a02128236c5e4d389f31ec835267c188ae4828f1bb44921c1287ba2d206eaafdc0df0e44fd46c5a697f969fb6943c192072910100a967e9ef969cb82c983363ca10af9a830ea18d3fa260461e1040cac40a85f347fa8ef4033ab42139830ea6398d0d0c8784a29a54d27cc1f4a9dce28d35293b32682b00084f38e930ac202f5133030c28cddd188c62875a9202c9c8001eca56ac0467d0a0540aa7d09362ac68d4634f62a811b41e7dcf86a52c50220d57eae8070def5c4d93991f40adb31c5891b4054698a4d2abe42a04d5e40dc8e23f0a377c01d5f408c6c54ccfa516c4abb09d7ed68f4f2185961b6dd84a10aebeef6221ff50a70fa800250d30dfafc7c66db00af1246f0ba4e634674c626ce952a226a8c40e28490d83ce2c1882190a2c02287375562d3295d89784e994ea98b06b63061d387fcf4223f8fcc2a34674cf367beaee3d7f5797b36bd99a67773b3919a68d974ffd07fb82a6c86e26b041ac33ba6642f6a5a2bc7711cc79529b440914e55d8f44fa45415369dce3c912655580aad150935864758552e5b06820d624809ac3cd7897f53687d259bf46972c6fc89ec3f9b4e99a653194d22c1c6a8acc26ca0b22a6892b400c40c653029e36b0853c585162da4886ada4a4a1732493fcbf8d965cc0c25d82a62af12ae57afe30838bfe3ab89f5195b01b9ce8d46afeca2362a3663affe41dd04273750fa41dd04ea453e80c41d53f20fea26502ff2e13293ab0eeef9bdedd44f4deb262826496d1dd4454c0ac58cb2438b132aa7a9258e28812186202d84ccc8281903cd2c877a636fcfdbed8a474b7962d3443ab6d3fc41937d727152a6cc1151415491431762da1cb181091cbe0c0115e52283fd5e7f62339a5061d729926ebaa49d7494bf48bae99276d2519a664c3b4de49d1d32155590da18e74c674da5a672cce415f0bfda8fbec71e69ec3afd32df42456db014a40a512e1376dd8a317fefbd146afedc59bf89a24b155074a1854decf6586209544d4d981faccc98a4907ede7edab450c288c630b043432e291447a3b0f320efc540855ddf39229714ea557d7e57e713329b164d7f6d5a3885321b172c487f6b779380fd8563af1f9e7ba3118de50d947009cc341559b3c6898b270ac870860c97304eb520305085f028b351b157092378b96218ef98e23a4a42cc932fcc243931839879051432a020328312b42f5624812aecfa8e29a405c090d1a1062eca04f14206a4b8b2660b106eb08cb9de891ed41168b9c28b530b5b940123769d4e55a10b2081c35412a726c86013bb4ea1aed3a8eb265cbf6067bbae76d57e3982ca5a6b81582d45e2072d72423b332acaa68326940dc9426571f313ca56e6465125ca9734cd771ceda64d1b165afe3a5dbade4b2e9d3dfa20b9d47a94ec0891a91117905a782cb035b9a783286d89e06a92d28795917bdaada5e0b4755656b533dabb4b9fef3105f24370d6f1fef4a15c378dd642369c5a8b1569eaec8a215fb693d5153d7cd94f56b0f9b2afacbe6cdb2cdb4b5b0ad690ce0e3c405e276f1d36832e1093b47e671566b91a6ab1e99dd84db35a2fd6d25a9aa4750a579ab45a92c84db38dad858aa50bc796adb75fa6be4f79bc4f55c8424d226ab34286b747319bbf022fb2f5a2be6dc919387b6ba57269a55e69a595565a69a595565a6975ab855ccad42fa55e69a595565a69a595565a69f58ed24a2b6d06f40a07700ae54ee2645f8117b93da90a35adad8b09d35afc30f9caaadf79a994f3cedaaf54ad46fd2269a1d934eace28d49dd1a73ba34e4d43482da53ba34b570bb994dbed0fa82a04649d4c4d49494545d96cb5a156aba7c7a7b4b496551895aab0f6a929aa1e6dd9b4a7499c8c13038b824b2dd6e2c441860f34aa588b946a0c07554011156bf1c524e6519e20a24d911809b292186eb1c748ac8a465489101c9c8891c06373b390614d9418663112d0d0218667ac8a46193c6d998a91c04b32b17013aba2514745c1a485180974c2c4f0ecb86bb175fc257d7be50b13c8622d7ab045ec8892a0bb8bd49e8ca4a7636c9cd27cdd690acbec407d5c7af8ea447cd9a3044d0f6dfe54bfa26da9f6d4546f40cd9fea1b5075778756855e691a56fdc5a609c949e9e9eb52edab23b17de5a1417d75fba26ab2f28839f387e32ebd33731bf8bef49b7dcfb0cd9f06a3020cc54d06a52c5fb2f7f326839030640303e9d3cae10c73191db6c2f0e74d29055ffad4aa28ed31cdf20029272a4e4db208c309342e484106111fd0d4f0a60c236a704fd42f5e130886016b191c55d840dcbe2b4074b9941652a4ef6e3a4ba28a6f77137c7b5114df7ec215df4e6561682011ab336abe582b5dae008b7073bb7946cd19ecf597a20f7c24a093784d383f6f4ab3c73f6f4a49989c445dfff486a21d746353510dac5b6f2926511d1b8cf9631d29770e4eda818e0c8c5ce9ad5d27b91bcb29055561d6738ba9c886aa426d73a67a97f5c6cac4db2aea30936d94266dd7d5da75e375ba4f38aa72799d5ac8761095b57e9deeb55da7fb842f188be7bdf7de3be7b5a30dc725f2f40040c973d4d1443b2b8c6c7b249728ad9aceb324bf9e3a493dbb7c641904544f1dbb7a6e4ab2a7e18b004e1f1c45e4e9e0ce955c9b44fd9c774e39f10584c315463bf105a4738fce55ce6cb2c7578fb9a549f72ae19b5ee25f61d52da250c7570844df4ef4ed28dcded2446645a2afe2dcc284e95b0c42f4d33ff1554238820f8baf12b8199b2b1340efc61790cef38e1b4df83ee7c617100e3b178eed5461d45def409f17eb620280a1d650d43b8a7ad7dad652b72d199eaca41de08495d6a4a8065626111d9b8bf9d3de4438b5c93cbd342c357fb6a022e27bccb7535cabb0663d0e37b9bcb41a6ec297869fe60fe7458d6bd8463ba8de8ecb9844504ca1fe62c2aa680775eca9f10302ca20031c385eaf19335a4a079a5cbdc44d4ecb4ddfdeca21e79f5b9c74f91277ad72decef425f9b88673ae71639555d8cf985ce237df493d3acc789d16e01cca9fd36e6badadd576df0f07193b52447571818b1921ded88022250725901051a2862f3b5772d95ffacb24ea7f0101c1f1052474d0c1d18885e347e30b08e82b5f8d462b07a9e388fd34cb25d0c415461d0794acc37154651d62ae30eaa0083341aeea3438c25035550b1540298818d5d30661fe4fe5fbafea56961cf9b902e17e019482f896fab2bf7c91e5fe52c4162e5c94b2343942060b381c0993030d424ca1c5a8030d51c7b1267b1502ea14c0a1a17e2ed34984bd558031babf0f8b5fb93a817aa8cabef66c204223c2649d9e7a8bca909aa4159c9e83989629b48aea87472a6b92264da82160867cf1af2906272f4364ff8d25d03711a92f2d139128bb24871779de862cf9d232292d3df5f996a983e62de9e9a95b241d44b34b5a68f230c9a5556a0310c92aac90dfea307fa8db2378e99394946ed8b2770582e75f5df1e038da752050bcfaa95cbd498c572090abeaa0adee7935002d7bdf58e676abd4413dd2a4a50ec2a3cba7059e2539741f59fe3e1ea41ead819af428b4770e7e636954f51fce5b1e1f726999aad0caa914c839967d478d5063abb1a32a2872582c5d65957aea9f98424df250f4608526670c526f999e3a759ad441b718a29e52cbd441f5732c7e58fc92be41ff7a889f7dce8baa1d833439cb70c6945c1ec98e5e074f0f795aa7b059618079a230c309740803056cbe300181335f348961e2a48b2ebe3863848c10244d4c64a4a727a2928af082456cfa340098a7d09cba21298a2ca40c518a21832a4c58c1c5ac4c952936b22c31051a318c5cd962819b35557811449a2732e601c03c8bc03ca7bbe6f439f1fc1b48a976dc2d960db96c91d513e0f2f1a3d54f4bd00ee6778d88eb9dbbf097ae0a8e650ae4473db716ea49a072d656d6e6385c811ff5f6dcfcd0973eded2eb2288e088162f9adeced7c0d0dbeb24c5648b985a0000055255d4ca43fb841647a0a5ace432dfdbd47a9fecc18b6bb95aa762e7dc01debc61f3d8cb233c7ae03ef5403f1d51b05e6f1f51abf5b45c3d3a38f0dbd372eda885b75cfa1f00e3307fc9dd5e7c147d4081da7d586bb313398aefb00553ca611ba9d0621cb20d2d8e809413b9ccd6f3fb1d2dfe9c86b3a97b8e02d7f5e0466cab1038b368b9cce50af53dfffc3ff7404f0bddb217e4d61329f53ea72b1edf58afed61c7b142014435d8616be50009b035459edf8222b76cd9628c318d1772254dd8e036062a561d08d7d96a5d9129934ca9ab8500798ce41e0f481fa010891b0c696e309479fa27f014c9a525eb0d02bc3836abe7d94e2877ed1dfdae1367ac1b5763b2ab0a85de6a2e746eb55a3908edab951fbd27862bb1ecc250fc1cf4a23efa6e85fe6ff46c9374d5d129ee9e40a431dc41378b2eba9a74b1a0b87868c8399e1dfbe79d6f364cfdbc2d95f902fcbc2d397997e77849821e3ab52b1e20cef812013b8e83801dc78fde134ba3f79c25aefce83d7185fed548b9a01a805e412faaa1689bfcc610fc7193dfe8238d92a953ceace6868033366badac21f2bc5ce77d843dec796e048e1e38aefc288647ccf2a398e7b30ab11c08e8acd168886ffc4620a0b39c351a81e351cc0bc559419086a018760b63aeeb3a0e7b1e65003931b6b8c72649ce894dc019febc5fac6c7e4965162997f9c3495455a05f65654df3ed354dad92512ba36e386861d16582214edd90cec9bf7ede64b75ffdbcc9a87801821c38c9d44bfa2f22ac8a02b069cf6943e7a777dcb5239d44768573c5096b9c6fafaf21eef3a759dff5415bab1a106c9b26fb3439451a0fd24b45f1c17959d5bb667b6bd33b2fcbbe42e8923a68ad9d1546af7bf68eb8c226753599265b5bc7b906042f11b0bbbb5e2f6abb33d65b1fc499f58e19a4e012c9d45d44ea1160ad5583202cc5f124e3789229b66a32755793d4aaa9b5d66aeb9c3f15066bb9ea9db5d6a78e41340082eb30c6def77918880e7bd85b92a92fa11db73a733def068238b4ab5df1e8b0e77d383838383820d8dd79ce89f3d5964c07c0943c6d48c76e1a34582c9c9c73727466b45a3468ececd4a8e1e25c2ed775b97466b45a04e1aad5e4eceeee6edad5ba5c5c721d694c4aa3eb462312b05a3834728dae5123d3c8d9d199c1c35379789a6787c7468d1a2e170f8f0d1baf574f8f8d232cb0c0e5e2e1b161e3f5eae9b971a3027751aca2288a3caf1b53b4312758e3e5ea693ac5320ca758ce3274e29e5508f6f1fcc93c5a20d01b2b117a2ab8114ed102718a2d529167883cdd330f71ec918ee3e458e5118eaf78547babdfee7e6f52145720d01f71b47c702e58f1e021f75831c00083c600038a010e1f9f0b2ec000030000802461301f9ff0020c2806175c70c1aa477ddc2406380058f198244952cb2a8fdeeac8a03320613932d0f113000d6030b771448e1b15e4c86181e7c89143b49123074f8e1c3910f0049c3e6537d563ceb9ea7342614067073e968a85157c024a28556295dc6b6f951f943851a244c90f4abc900b9076b597ebb0f781d97b8ae2643b88d29ca9439fe85393e410d608671582d599c119e1ac58a84262ada84ca6449398e8aa099d5127b46946ebae1084aa4523b4368526fde9538555e004fa54b9d14ff09d59e3031f50d3ca97f4a9898f264510306146d5982eaa0368a84b2ad2a7096b9ff469feb40f4fbf5a611cf6ac70136ff2603594c4655746ee19265f027d5d78c8210c1e96b00d3cb8e041c91e1b1d3288a66bca393f6f3b48755576884a92c19fb71db65c2b72f7f3b683137709679e1da6c8b003c6c9b543132334a26aec704391d6174d3b3b1099c145158d3274b8806a4d19c931f38587193033b21534642f643a5b9470c8d072aacc5864aa32122356535138487e500ac3d458488ec8008ea9ad9008b9e11b330bab62f0cad0c02f64c065aabe2a96ba2fa83c1da248e26878892297c798aa8e08cba38b280e08df74c081a9020d01713024a65661938d0e5e4c7571248c4c8a225349196797fb04c1d4420e37844866f8a0b2fd796b81880e2d94200d1bcf4cc63f6fb2344964ba3799fb799381c9f1f386a4830cdb4c3fd3263698db427de8c81a0f7a66021c17b63ca9820a9a11555ac43e31d4acd12266e9a685ca7220f29ddb0e2200eea6ac055f86f8cb11a44c935062662af3bcad8e99baf8ea9389962718247670e2c5912a605035fd5147af54a635294678ada724565d0e31be9db34864796b2d0dbaf6891b0e4ebedde205d850440f3330863c01e648072e45543de1c54c0b266254cb116f306daa42ae3a96f85d549e522b6463d4863718f99ee27683986f6fa32444603123c614267a8895407f5402284c9c481195248d1431eb449b2a8c42612d0740e4d2f5d4862a1b5ffb9ac210739cb7ac58027d99c2f7e4791e7ec2584a14294f2ad815ec6d9380f943adcb8531e71dc7715d11c7dd3b663cb1d892e8eecef3075b970b634a622c86b8c3d8e5c263d8e4ed2a57dd76d71f4d7626ad65e1337eef3bccd7aa30b71c3d1b10637a2fe62847db67938dc50df2d4a7c8f3445ec1da2d6c6da7d57a75b9aeb52bdcc775cec979d789a11583a3fc3def9bdefc3c07c1e779dff8dee8d7ef987b2fcf13fb1a81c66685e1eb9605f5d15e2194f46fcedff115c2ebfad101b0c8657ef1ad78002c72b64edf73ed909b73dc643ff7b9b5e1fd3e90e33eeea3d6fa5c71debd4e29a597f3aeabb6e370bd9e42ebef1820772fa594de79c5ae78cc2fa7014a4c2cec7db5fe24bb56ad17f54f215a5368bd4bd934e074ea2cccc98685eeb6b68ecd8325cf7176e5fc35028d814e82377ab649908566aab0aeaa304a65733611965c52aa3473a6d0c2d55961e4f6924e551a9e3af54a25f593ce3a2e67720f793afd79abe10bf8c5f54d864cf51c5bafe23ae6d872e7ab3ab2c64cd724eadcce4934bfdd7610eb4bb6dcb59575e7cf12997a6941e0f9cee7aaa8b995083c970148e09c44b98b5c7fde6ab8f2f4f5f356c30f4f6f46da3c9d44f4a7f28d9fb71a863c75d04edb3aac72856f4702169169fcbc19990a9b6e46aef8c2c8383f6f46a0f812e8399b9126b82319ffbc199992c5885308469a3a2336b860ab2a6c3ebe191162e44b54191c6660923ec8e2a98897d9075f6638bb3e29c21872eba7adcb097ca8613039fc69eb12054ceaf203909bccfdb475a1dd3519ffb47561eac2051408ded6a16300b64cb9cbd93b76d3f9a50169577bb9ee76d872433a3de9bd5c7fb5d1cd9a0745385f347f9432f6a2cc793769b3ee5874e924b245f6032957648b662d6872459368aec6507fb092187c00fe08e357f8ac3ffa1b08d6db6edb2da8a48e9f6a32755c0730459e60141014490cbe7ce9f070f90adffb79391a05ed7a391c2ee7e4ac42cf177b393a2c0f8360f819e5f0e4501d5bf18c165edd7beff57eb0d6c85aeb27f88c704ea256888d66a536ccad496367de11a8d67a2779af570faf4210c15bafb61bc91b827d9006a79382aef676d803c3152be7e8cc6871393a198705b6685cf05bb13e70b56285e02a041aa1fd39a708eef8941c08b9b5e08a87b53dfa819e64ea259038497bc103ec775d2520d6c01d74bd0fd049895a1d040484b1cf0e14bf495a67a9f089dc24ade35508f63f0f80dea4cdf2c63b7fac736f43f0d5297939ced2f20d24d5e39f4075a8d6fad28326bd61d469d862f53b6ab8af970dbef4f99b82bf6eef9d1df177a6c4df2234fc2577bc156ae9a00187afd5290ec0522e7d92f516c994eaed09a82b7938d7384245cfd731bed67a9be1881b0d31bc94255fbb7c75d5315febd7f925c6b14bc34a6e35e532db5a6bad53cf29a0b35e8680e9abdb9ea1459e5e5ada385e6ce87f3e055b4c64cfa9635c2f96efa6ac03fcbeeff3a20eaa53dfae03482a5faf07d04f77555c5723dc18e89ef83deebaaeeb3aaeefd48ebf23074dced022d7f9d362604bbb30c41dc518638c31c63e5b52e48e661d878e3d8c31c61893d83db143d2248e558b31c618638c31b621c61863c718638cb167b177d829c68e31c6187b517352185f7c1dfb2d3389e863171edf368fd53c2eaf99c71f0631873bdce10e77b8eb3a6adf7a8e3dec55d0ab18638cdbd2ae2bae5804ef55fde8abe747ef618c1d638cb1cf954e984cbda871a8c30eedbb16027d724e5403912bd3b08ef538d87061a61037ab30309388ce999aef9c93eaa0dcd4e63b8ee93b2f3933ef2d297247eb40e79c3a24524e524e524e52ddec85fde83b9ad821a1617550a4312cd2073ba62ac44d7533927477b9a46295841a03474e6ac6986c43742173b3ce3b9cbbd9779cd4fc996ab2f31639304eb4036e8ba941e75d17f3a7f33a969c11df2935d9cd9aec92e64fc74935d93927726048b831aeaac23a2f6a28b924af540795e1649844d6bb0be6bb3bf5ddf5fb54712ddb2e140876d851a0cc9feea9619d73454c0d3a9fe5517fb5b80a618c39ceb92823e7347f3aaf6048ae5f724edf757b1ffdabe3a4bef3ce39aaceb9aace39a9ceb9a9cea74f37a2b04303afbc2a1892bbe3bcc4f9673786b38c43da5b07977830bd0d95265152380b973a68f244c9ed208da95c825358defa16aa29de7a0956bd05b378eb65287bf0cafcb1427275100467f3c7963d5c5215ba9cac0a716e5df44255a13b5561d6f385d2f2654f395585423a96b88e535c8c1bc3a40ab351d93a277bebe0ac83acdb57ed2a81d30714c9e490c729f7bd4e238020061b5718b5549a9cd6e23c35393d478c4cb3b5384d15268034158c1ab6468ddab4c6a481591df8866a727ad300dc5001ed30e4192297df0c841bcf39c679c2a182d3548540c771faf9cd683fdd46c7686c257a1396b301cfc18ae74f38c93b59c0f61abdb538b349d4792d594d7c75560b4d91af1e8269a19dd56c124975d0ddb129d556484f014a3a4c2d206c058724394043401c0c5555d86ca24d0e4f4d7c5122d54492a9267ad0a1879359132f20e91144546d8a87592d8b921e4c6a352190f47822abd1d003081a1354497a08c1c48417244e4c3cf9e1072626663cf46892b484191f7a34412d21450f2292968092a4c710b52578b0a1c70f511690f1995962081a2c5730b18291a812442dd7f879ab5203b843ce3f6f55844c41050dc84576fdbc51b1020c93777edea89800f6f326a40440736ac80534b33502e420c242c7942f572421e596c419258e7cbb2bd1e5db492a4fbe9d0544c42cc3a7a80ca608e1d1b9bb6d7737162abe6b7c7777dbaeb466f252a85a6bf5a15a5d5f6badf556ebde8a87a5378b071554504e305192445923fb763fc2f6ed24100ddf3ea4c3b7174939f3ed3e64f8f61f48487dbb0948b8795ae2dbf154186043b1e1e7db718662e5db3b9719b0c70818bedb7136e2886f774121f2ed9c47d1f2ddf3dddd5dfb5a2fa8db5a3d3e3a3870eaa20826be3dbb9c041a9a028b299e54f17d23028ad30cdf5e5d59a868c289986f2b86c84f6ea0c20b21664c641922848c7aa6c9962db60083e444ac3bd60e81eee6f22dc5f6ddddddb5db2e4181401d423cd1e0dbf14d882cbedde544866f274cdf3b687c9e76d4291b30ac6095d42485f2d2dde83ab1a1a29c9a6c6d914bdb64422593cba64175108ef338f59ad4412ea75e953aa88653afb30eda71ead5cbf662c3cb7e6aa15e6a18f5eab9a3b0e92f9fbf9c7aee4ad3653aa586cd1b5eda3975dcda3aa82d15ebc546b135abc542d928fb45e7c68d1b376e2c9165707ec397540025b7acca396fd5903ba90a59a60af5d371ecebb88d1cef115f3a3e7f86bfc4dcf3f9aba7e7250446d14269eddbd6506ba27ccfebfbbeefebe1b9a5916e72699b9c74d08d717ce1f87c9673ce8d2f1cb78fe3158c2fec368a6d7212456c21db70f1153afdd03bf115fafc9583363cdc71def9c7b9df70cee7c4d3e7c60ddb5485ba671ccbdcb429af690ce0fcba0df125c24b041bceb90d9f8fbd3cc51d2796aee7388ee344ec9fc80112ccef460ad524f52bb6272aefa449eaf474c90c5a9e5f36ed8e1b2c61aa2dc04c619104161bde1c1d51c4cb9b29aa195c78a1913ac8c668937844faa549eaae1a228da24e43a4524db644ebd4a4689b66e8e4ecb065d13ac16189d649004956a275b24da0689d8469a27e65c8b752d95af5d37150e54c6697a5fa89e3a8025a011617b64048b4806343288268b3c157e7ac0842c9971eb27738b3f8b2d5748287358d01c495af6e5d6148254cadb5d69a66e08c5475f10515628eb450012b7c8061cd0b61242113731f55080aca542b57a11e1c40e8e8a01ec7e2cbf0bbf58316dfed38e9bb4917df9d1820cd62cbb4049972c09f03f97bece100fb0f54beb44e6523f9a70ea25c144fdd3a75d0bcfde0e4a9db281dd4964a8d7350fc5ae5e53c6793789e73ca83a3ff812429688640419b3350130b1750506dda2c29a18109893775906d2591973c5d8239cec5f992a55698bce472e55ca92a8c7ac7d4a4a565c91c12b7b419497269975e7883256c31b57df7dc73cf7de765d33a913e155500c6e4924ecdf879fb41cb736e83eaa967a6550c2f64fca5fdd9654a565d10c3e64beb54855ed46d53157a753e63d9b5815276d22b5515b2454c18f529b5aa0999bd3da5aa423356ab6449d57730e97eeaee26ff2abeb0d36ccddaac937d1a81c63ca72b8ec3188f25779b9aa46ead9397911b49cf3c20cfa9d353b7316fb43658279d2ba0b5d65a2027c5d43acec338bbfcfaf5f943eb12e844d6f97963f284cff8d34685915a657fc84e239ed28692c96436c4a8630ad69e027ce953ea809a57707c39bdd0a83ed3cc3a4bba84842ee1a1ca572a6a48c2c357f72468be3a497bf2d5815af8ea43455cbeba0fa9af372527d4f0d531d0f4b587325f9d851dbe3a952529f93a6f3ea8f9db122d4c96d04aef121d237a906244c89212c862659e630081e6c815538ac8a214e39098c2aab576d84161fe1a5544919cd0da1c05524f5345357f5c9cc861f1871b55108b9cf86af7fc286634e2d167e5381e3f5c3c5fb21df3fca977c63a2bb618eba80a7392a9d7cacd86aa10c9625d299637618d97ea4a35c8e17e7a2ce60ac3ce89779657e227be383f8ad55a85610fc51737fe40727a18f6a318fe516138f43c6cf7da71518561ffbed108a8c2b0371af568e41586cbeae43e63d8df8b1cfbb0c78d27348931506118fb8e25d95faada2a764f64a1c2308b8cfc02e27963afb50e7a9130634898265518f6d7ebc7e724ccd83796f079936fa44c1586bd5ea11dd0c76e67d5a93e592b846c01159b315a0417225c28d354d2a46bab305c9d1e4f6e46bb636381e69c33db19446bd580cabdd67b1b020f54e6cffc1078883261b6b2013b077b462711920e6aaf0e04f4dd532b0890d4b1d3247be20e917c456fd64526ac03c1731d4d768f9dcec4fed50972d9b39ec9963aa60e2a3b29a98356de792b7550e81d8d6a59077d47b1ee7581e0788e5fcf198d86b823909c1c37b28ee347b1ce7d96e49ecd1f1f213247bbf3ea0b4a9e0124432ed341ed9dd3a91cef9c4a51aacebb889129d413369b442c2722dab123478e71b4614347e7fbebe5c7ead9fce97c2536ad6715d67928760e8a9de3889de74ce99cd2a80efa1ce72794bcf3f339b8923d24589783875cd2272135f9ebfc13a95293484d76ae817923237b6f7cb97a5ce0cf263b7f79939d774eeba69e351394fc7d093963d5778ee32504a9b0ce338e7f7e4215cade395dbd46c8711cf7dcc8fa3796de0804c7f368541d673ca1c23a27754c22cfbb185e85fb2adc177b69fe7478ec2f72775032fe699d049a8412336272a0c02f6aadb596b5d64a6b596bf5a1b83b8b2d67efad96abb5eb5cab75d55abd6abf4c8476b59ebd1f8729f6728e934eb69debbaae92ee6eb177bdcf7e6005c3feaa0bc8dded6857acc9fa3e967b0d24c2416afb030a369d2358dbc75a7beff5796e7cae0ba968829f569e3e948f0f7048451c3f3e7d0ad4e4f49256b7966c4781bb0e02ce73ac4c667dfeab8e3f7ea88e14f470e7794f14cfd25a6bdbed74ebd65afba5b5d6da6bedad160710d65a6bf1dbd9852f25ec64a3575e3164ea969614480710a4d31010955acb82bad5bae5c6177f7e0351afada3ac1cc78de4cc2126cf2d4d66efeaa0b98589ecdb7bb6d0927ec67e7c3e1f48cb62603bcec162128e7dee89482f0cc5be117b128e81a3d77d62d250cc7350447a01c73c4f1a8a7d380cc32b965d8ed3cacf267e7e69bd7ef0bdd7711e08769cce0cb1b438de8e5927b43a1e86f2f101d80a3dc79d7b22de0919d07d07709e738b0237e2ce41803ddb6e058476ab971d7fe0b11b872a8cfb5b7d9aac628d708ae57d1e3ccb23a0db3948559490552e8e13254a94fca084d2a2daa8144d96a5412b95b2190000080315003028100c088522814024ce54552c1f14000c7a98407852990b846912c328c818638c318010620c010680d010d94428106a4a255c887fb0cf0ebb545c860ad3a8aa843968fa20f1c07730e5307ae4c04f208fee18cb16180ab9287cbcdf58368678dc43e092447eaed8450afddc60d9ae429f5825d5c02589fcfcb12b209d4f3da258e9fa248c5ca1e8cf12eb6d81965c97448ae4f513eac9fd837b04daf30a2e0974dbc548562469e446e390fab418ce0aa6e4e1553b57c4f6aa696926836b6d05ba2a33eb6c617115c6026c29bb15ff0e979a982d7e90c9f70af49303c2586a564ef49c551cfa9fe68dafc222f1b76181cff814823d4c30516847349e3dae3255344535835ebae7b68af8d41b277808e440ff283af4ef2455d34415bbfbcc453fe8f69d50e21c255577038dd0bef298b7816359a68e2f486a03e8fa97070bdc93e4fabc1fa5ae26cfa9b4605ce446bd51d58d9439484a8029b1a2cdf7a23574d7b9f09a194cd8fd14de73357d9a3abc9bbd46026a184474d88f156467b4b4cbb4d2224259e1388fb1f12b151a14d200aa1caacddec06b719ed16bf8a2f75bf8e0b386a27ae21cb13ceec03365bc6a4a9fab2ebb64e9473c069bca99472ce7057d7631d517e61191c6a3362ae0cf42b32a327f188025f22b5e716d11397b16e2bfa5798db03c2405ae5afabd44a732ed2849e42ead75e5579ff675edfe7abdbc80c8190919972d1b52ab098451968cd5fa6812f19a9596dc2f2c420853140a8b942203eed13bfb58399636335d215c79aa020c2d8efb35596918a2367aeb896ee71f492bf491d5ec67ba1ff0a6758883e41cf7be05ccc2eeb1a7e185b395127d1996c1cbeff998f0a1c0fa5617d9782cf1de44cda76c7e75bc586f650f2638e10ac9aa5a2b026328cd0f7729b0b84e356a644688d01b3ab8fbc3201bacd876aee39cf1c23211bcfd7e06677cd1bd35f038b11ed42144254fed530378b117c14d05a65b070f15a8c0872bdbd1b8d8a0412fb4fcf6d75d855c92b1d51f72110d854e16e426d05a7bfd878dc8ceced32ffd39c4aca5bad1774880213f695bd0aa8a2f2f9ce8e2e0500ded7e1d0580de6d619a8fd25102550876156951909e3c2e40c4f072d3a2842dac57bcb833e36e87d1bd95e2544df25c25b2e0ea02b38abe31fa0933758d2ec5959c0136b658ea36ee29498b7d266976f92e7d0c00636e2835672f36b2bbb190a2fac46be3289d22fcd4b251a5218845eb8f9388e69c9a20c439de733711c3587d194884902e5ad0af330e52132c7df40548fd36e294cece5932a939daebbee47f2ac3d26cc925182afa87de7385813daa1a5047cf070726ab44e009263b42c11cf98bf443e7e418574b65d1c4e77cedfa31fd3bd706149c4d951559aba57b591a3cda9de7e8205e89c31ca4a3b3c4952e844b43a8e0f3f7f8bf1700efb599e150a786cdba8e72ced6d3e7816e5a614536c0a1eec344cfe6d6000a8a313c7beed013a2f8d7209a1d0dd5d1b98f5c9fd8943ed5bf602533cdee82c44408d1e8ec5bc2ea3084ef613e9f743aa6bb2bfbfd1acb3f5493b8b308b22ec721392a83ed725186a06c66f3b451dd3558a8c81016e18275a4405883f432b5726b32d20af3f43e93915f9220c81ba258ddf7c5eaa38a7ba26a549cc643f6034674d7b3323693d265a83a885a6f784b5eb801ebd8db6f4cce00c8281af8f81a5f6f2f0984b15fb695053bd6d8a205e3b02c138fee08db5035f1627302d60962008252daa3274bba62890f0be715705d9da047d9471a3375a005930e7a303425e608bd6557dc41270295a06882fb0eb2a03c68b658ac4a3bda0814c1f54d85e59b84b6e2e08874e126a54ce0cc887405f13da70aa9e4895ab8be435a5d83a39695dde913c5ea226304b591f75d1b00fd1380e3585fc6d201e072e724ea1cd4c1c6435d9c7a86e02b13c0f08ec1141e277b3cb4b4cb50f832c2c439e975f408f33afa9afde3d528ef3ab631859997ca145220de0c3ed0060c4afd6c97ce9f491ffe3adeed84b99fdc4ed02773c55265a36a09536ae808d6f55053211357bc01bd3887bb215617f9dd6eb0cfd96ec8f6e216abdd10308a9664fd54d6d0f29c6bbeb34bc24074f72494a9cdb3620be99d176d073ddf79c78202058b11303a8743573c365ca5af9bd0c85e4ecfe19dab1aca1d11ef8cc7c43bc79de29de5f51406c51b5daf096c26264e7f32a311bcd00cbc6183b25a8c2de26059438ad2d09e0f4399279877525d37d5b6009f66c16b6804c2e2db79c4e8dd2052d48a4b2a4b5646a44ac5179d045f3f7572dd0b7641d7626e18c4ada231762935923b64759287f892aa5895066d6b63045547c531b0b923268f6d9847c78166c4a6cb8f529ea6804ed1cd960207072d850a13424eb0845526573cca80cbb68e18d0175ccbf3ff8cc980f857b4ac754ff9f200e081526538991d42c42adeb26cb71aa8ba76d1de9288412c6b99d48e305ddfce5af619d60a074b19697dfd50dccb86f245032c01257a31ffe4088a84611f2ef6063a5f5a9b4b5720b8910ab7de49a0989f46dd4396c95101db1401175b8ae5658551b9f295a1f8ad298fcaef33f4e63ead7e1c6232baf748be38632bc32379af2393910ed96aef68e7eb62de52f8d67ba086388dbbbabe5c385827604b3b81e9845f396365c28c75aa6bfac805826fae06ee67fd87e356607db2f90e5eb562997fb0c24a63913a6d8b32f2dc1ce135640d024e2a5aad6d96191f1110f9cc3fc6cfa832b2f3a44a206bb8e14dd8a03065e5e444c673c3ba8eeccb9e6a712ed8c0a105690f344077dddc4dc55f7bb09360d13fe63e833c995b588e756e0121099e0703bd1b3038d3e0d7507bdd2bb86541d9bedbf33f773be7a18f12a6030d5a07a2fbd9d923df4ccdfc740e5cc27341f539803a8ed52a93278ca02f98a3420b825adeaaa6e1935c1685690c2c5bbc88076fa66813d970e4512f10f3b7dc4f3f0e76c2dcafc8d5c20de3ec9a3e118dc76192c0350b4a600f1f8fd5116ef14ddc52fd38db8c6b744bf3bcc9533a6f76064497e960c715f1c841edec7b15d82f641e1dc4ea3a0771a1d4023fd016aac9f189a5ca8829d15eb4f2529fb59784b31b8cca083a249ae1e4a304d41570cd47852a375f1e4185d08d9a6f392ba1922fa9a78a330fd44fd2b53b25c0c1918fd85268da0011b74239650694d3e401770bde933349642206bc41ae7ed5501549d6af20887f301b3c9d9bf0f978f0da9bfe4b0329a4f4a6164eaa1ec7d2f340ef50cd5b0c56057f89d1f38092c8c40bb848d3722ca1dc4414bf21932872906824161ef65019a30c2ddbe1236cce7c9541c409508efb9bf1131b065643314212e9595a04c0f720e603c3153e6df4ae8dfbb1c0f7e61edcafdbd7def87547118eb414fb341ceb68ea6572b907c9f8753400454e4bec2a4a89a72dd70825eedc4062f3a990187785189b291c24de61c4a52894268c0a286a166851ea96cf602c6697e72c3a42d0413a459e2bf90d7bfd35a8654fc87c724eb17f5a8331e02c92c45ced17092deb6a757d1b7e172ad71ffb87c62a5f2193099900369c2e78db59c1b870a8f818d16600091a66b0e28d612bc32b2d710a23b8d744df730a8e5038acaa235b9b74678e7ae364d7202c2acc8d2cf7da5f0af7aa498d2bd04c618e621683a3c3a9be0893414e94c9e065326979776fb81f36e0c3af613951e8225c34e2011fd3c411d4c3b4ce9776579b1a9788a24b095a5712548246d7a0c13a722e0a4a80efab9e0d5d23560c43e7c3c1869cc14217c555c10603ba826b026dd8cc66faa70828b5318371213e878b4f49cb291641251a7083f2d855690852c8b8c905ea85dd1514e31bcf12848135c36e69a111dd3f6fd8f776678563ceb71367a8bbfde26685ba1ce83177ea59dc76b535c82a1e93d4e7dd2f576945b5224fa4f22912d79eb94189c628b71cd96169890734507ac7e865eb0392374d2eaff0070dadf123cec2dcef5334c9c16eb9fc161f53f92a2bebe2ff27749c06e27da799aa9a18061ff02ea69e1c0ead2cded3f700467ce2e49894eaf995112668d988ebceb20435101faf5329be16def2516afdbfc3b0f9a1d7cb393b1a1067aec5585b00a070ed91084bda79ec10812d7dba19a924761c08b3d748422dc961d53268f4bd887a17bc6f9fd572836bc2c54b58e4eae4b1b0feb996a0ed1f7691e1a0ebfd5c9139ccaf7f185033d382715b0dd66f5240c3a751da1dcfbe12da78be81c00b86f0b89f73f2f5dc9a04c25f830553eb8e0954e6aada2dc1b8ad7cab2e157d71b46171eb3b664657519c67dd2196aff766caab64fc788e580606b93ebc5832ef29076d78223f9ba48e0b519e4187f3a4ac124b5c4b7631a9238f7731901799e7e56dcf1317e48cd826307ae254b3d9aafce3ec7e6b3b13f75e110e302a43a6ed8b9992ef1844f34e5c42d7df322dd7af62c439fea08592753218b22a2b5173bac46956aacdfa14efea3f14bb8df39bd1a814ceef2d3bf4cd0f5b05b672f39f90212a2780e754eb6cac5eeddbf46f21bdb75f46c1905ebea3c3084c5fe41802dbe1897bbcc17c1113fe4e351be7069b19074c8da9943768530259f8c21e2f31c23fdc3c09a5d380654a7c00a5624976f62309efe2e1903188b2a30cc19f9a8c7803ca4cd2314b89435022f750701bb4dc010d4189645af599b9980a80c87f4a83fe230c98b5d6c4ba02a92ed6dbd51abea17c0f8dba0b78fbb11befc3d0b18b2dff8b995d7ea498cf398e1c002a80d148977b0612e4a0cf76671404a05ff0bbf1dacb2453eebec041662b2671d3dd19d15220633149699a0dc78ad5c78594d3d5638eab996734f358060099eac2890d8daad07e92a96599548da104bade2f92a62efab17c4d802ecec47a50d74f056d3fc7e48ed4b217c878624df6ba54985829ef36ecfe2811296d8c29dc806193b52cdbd6e675d4cc6fcff5f1f62e244dc70767e1fea5559c57ea569b4fc168f051e0ff7856beb4c4dce5ffa8ec33b10312d4e14c1b57120768336719e4d9376e055cba2405dc9909d2c2fede9749bbe4c6cd551c622533cdc47afd68761451cffd612521ae5668e56c7cd326efd367499667899b4202c5e0d48859a9a8d358cdb7bb6140427f1443e4c60beaa5e58ba1e6c67e6546ebd7ea9191710f4c8ed47eadde5f954cebf83a2dd8942d0573823c2a2f8c364741cb848eeb6876d6c787a5ef3fbe849a5d4f1647e8f1de6e5e4359382ccec07d1a98799a6e4aacc8bad91d9ecc60a6f0b543139c74dc8e272495118bffdb6371dd6c256859b092b282609ebbdeb18ae3044e593a9fd2d29b278c8569536999f6f0e8d6c45c46433d906daa315d7d30be1692d0a2f81ae0d18cd8d7937adc8c4d62a35eb32a665564f73f3b99bd803f88ba497ea4e1354194eac2241617b82de3c7d948898e106bfef06b91410db91162806291c080f215c99d4ba5007f5c6d4d9d6ccf2bc16cc465607b51acdd096b8abfe654df22568daf7e29486c8aa80eae8c6e13b809b6df11311f4cfdd282640ad37baea58fcafbd106e20990b2497888892d34f6808382f11b465bc013b025d16f7f6e65942c80bc8e98d744bfe9e547fa996038dc5aced740b0b6c7004550c494f104779c1c116e59688724231acce1d5bb87042847faa62deac005ecaa153e815c263946bf6a22c41c98d4ed0e34b0f731b08557cd315d8950d62f933da82c95a46fb67bd95d43723ed792c21c0fc09b584d05a2f629dc8a54bd279af7057ad5e3bef80d86ce24091431b9a51707d639509632958ec9368dd93ffc562e00dc9a0f30e0246041f85311d28848fd41c162f3b93ec8c1f473b42991c8e117b87cc259725422a7e84eef33bce0f213ded72ee3e8df65723f163f277f52f4afe03c7773149058d73600d2b279c9f0a1b5866a70ae7f1740f363e5567aec7ca74d83f85ac3216cfadd6b73f4e53533354148831dbdf724be86d1bb2c8c49d59d8d4036b7f61c6ff42578220ac589abf7876bd32025d0e2ac0bfd2406c8ec8c5a81a9d13fcc296d7b1d55ccc5b671eaa9f4eff66b0ed6049055c736f5ffed5e0800b1e7728a96fa2d7db19885972a43d8ee17280d6d531308640f2ea35a66e66895494ff719f03b676a5d406ad3017d177c253c576cd16784a475e7f84e74fddd17414758195a1e75e21c0ff0ff0f1c41bb83f1b0ebacc36ddcc1725353a062a1efb093d862ef035a6d56f2f489280f86932dc81dfd4670c35612eb263c97351f1b8a9b50be7b293f8adf07e3c4549b8fcba031d9060b966c52d6ef19f126509e587f808d6bdf208f2444cf0553605097420a70f3def96992806eebf3e4bd063d5c4ff88aa58be2be3598dbb20fb88a4b7650aeec982a6dde9554d08542522989a450c4ae002047d78ceb4ffcdb10b930ad76746b0d105838e44bfc167fcc757285d29b0d41af7b117705c5bc0ac18f79a0cc03081616df43d80ddefbcddca7a29fc0f382c6988cb9f91e28821044f456ddb18755f3b6946a7f5b485ed6e01f4365983c3c8331d3970be5897b52f8c56490c4a3f313013e71338f9b82d56e58246b69dc8a1e76b36d4387769ce01f5bce79c5e3991c4550051dafbc81773cfec5f17a5b10b6a2e467cd51ab72954bffc76194bc896a40449a6dd018d0e7b94ac835233a3f222b9ae0827140e66ccdd723b19b0d0c1a69885549d2543a424e017c63227121fc5fc82bcf42451f0828fb44a59e25fdd4164779b76d41b997ebb4c4f526b84a34b7bf36aaba28be9cf529dde84fc85a6e0c8251830ae74b903579368182263d446a1cab81e33a45c585651b90d6e77c5526679ff4adba319535d53327b667fc272f2d5442100357da7d6ebf2a3623f059b0812abd98b4d3c713085e6bab22759ac683af9789b8cef20dc7d0ae9d457dde0c667b6e093570899c1b58498e8924751074b7002f2c04f8aa6974c427f2af4f2b6c5ef2aaaaf7d2f04cfa1b6cce7f8f834d7a694a6c3be7372171f18fb973778ec37c2673613adec0811a74fdfd78bd683c81148b1728d6e040a6b909921d36a2420a45402d62fe372bc2eda5527a5e661115d93f8f88527fe6f0ca5a2eba062c1d5d1aff6f001cb05493dafbca39ad28ab50f96442645d424afa3e6ca88af0e5ae403351ab36fa1c1d4413810b491479bd2d28d4e5cd31ac3b1ecb9c6269704af944c8e198f26b336d9108b7edd904c26fca24a908f16f068308dd884261835805ddea978e68adb3850b3c66e5cab0fb422ff3035dbb12ffa1b88480aeae302fecb7d2f92847389a90cf1f6b27af76aa09ebe627ed56633273b9feb945ab049c8004214658834c0e6dfbdb15b55242b7822da763083025fe30bf92709873df1139e1d4579206539ac0a9a9b9eb9905688346f18804c57aa5773ca4ebefe8a996e9a0a6bbe84c83d013e4fbd2d1109a30bf9000fcca8a258a707c7ab56c24698fedb5a12e0cea2db19ac57f9af9e3f5eb2e269a5d5a813913b922a3426312cee950bff0b8a0109e7f3656f315c3711581f0bd2723888e55a9ba6a0c599c184bf89af7685270e72b3ab38b8ce5508a85d4f78fca8558c4718ede1e6e797648dbeca36c68f6824d5c0a01430201bbd570dbeade7a3ed7c61f1ce384aa39997369aa1d769338b88e05fdd0fca7f87598b85141eaf38eb76607d9635c79b0432eb45ed969b5042e5c4e325c7543e7ee24ff5498c40a1f8b43a9baa87c9a9c67667c731b8958f606a98dd6c2b687c980f3341a74cb85de1711ae954e2cbf26bacb09b7e6270e0ee1d183107e55c436a689f62f6f5c8987c944d0ae53b7ec722e93c4aeb3ca0c7c504ba7c9947c2ccb3a5a5819983281d0ec5626f3b854bb94fdeee735915a3b6d36cc4d27a78e9e896926e8b29396397d22b78e7726e699a8d38e5a36664daf76076a264c4d21b74e9e894926e8b0d36562d2446aecb0b93037a59c3addb99805d3cd62ed28815ed2c4dce469d1590a5e2922dfa74d9d4805797754679a269157ac82e97af9b9f638332813ebd5adeac45864963a27eca43bfbd99c2674104be95f1bc7b985c1942297171cfd37757b13b30bd846a186fe146e11d96f86689e41731ea129ec05f28ca8fefaf02b422b41c7b63ff212d4e8f035d715d0c067ae18a74584eb641840dc0786553319404d7165b00423f939adc327a2d3a10249237b7c446e45db03cc0b43d486eb4494c908f7114151163655185ba17f446e652e44d21968f5d02b6142ce2b3e0a29a2a3c926cf65d0190123737ca396a22f30e2bfc7e1ba8c8cc4eda0962e6c9550b0219d14d52ce07a6f583d71e72cdf5ac84c37a205ec55d4ec27d62257786844bea5ce5a2a5ae1b94dfba998a9474fe838e547aefcd2098d03437c8ffc9dfdd2f64fda2495cd86a060e9b17fc3ccee8ade3e52e8c0557811eaef249fa9e8e0d8bed2511eacbcdad200e9cd71bf05f195f7514d8cc2114b53f02d570928f841e2592ee460c5280f4631ab7fd689854eebe8c38cc452421e6466ece862671b2d1e6f5119858adb634993f9186239934897845bcd08ecf4030e771c411a9d22a74119a27c032bfbe0fb0158ec5fec85e6ada58fca550f042b4427238728309ce25280e840b2ee27a478b215ff297d30403d9bc3fbc883a5a17342b1eb1439b2f7f45fde105660a77a7a577b6b579d97aace681b06f6538882823022b2e0cf822855ff5aa2d806e3f3342d118e3a8bc96b65728ef655605fdba1428e8638dd63839c9d08940fb4daeee52c2833773aac613c1a9cf1642f663d6898ba258ae45a0764b8aa91db971da8fff79fe80517698cffb11d90b18b00a70de10585f5d604dcca4eb000db4f8d5f06ad0c4545bb099e154d452ebc9f59e9396c2a3b0d074a67f03d8fc18ab21aa4722f58e0dc10d34f3390639cfe0df26cda27acfddf772e6df4fc241386148437efc4d9623767565d93280ec3d946043e4e8807a8dc207a6c913a323780521163117274a0ba22556f213b183f1d71170734d1456425d1521b4c0ed8a447bdbfa82c5eaa98c188c8c07b7886adaea4dedb1d217c3305e5984d2a5c11846d6faedf58094302cc593011ed9d7b9952f57758d5d778dea0b90bef10084bd16c6a363aefbe0b669bade302c24f8e1d1a367a34d13f00fb7f8a0ab1c67891a8ad359470ac3760350eea386d5e7360ca5023f72d703c3329595664e6fbae6ece273bee67e50e2257e691f82b69d71f67366130e9c41a664440cbcb5e444b59e9c553f8fd5c72ad2bb7145a37237cd9a48e576cb589f8e240d61cef0a303562c493ef0b3a3fb1daf1af2b43b5dfbc545b40ac3423a967df43907ac66c59508bcbae8cb199505200becfb88360105fdb449f2d651c0e6a165f6f53bf9b6001aec9e323550b87c9d31beee459e72ccd09c2f134188d90c5cd1bf41bc66fcc721050990818dfade288b62ff14faee854abe3dd997d9e8836f23cf4b79837e42cfa78613ec29d5c19e9dda41bfa8ff609fd3da1bf999bc511cf6e6eaa2c70dc0d20a3c254c7438cc80bba4e81ca45be86e2922f5758704068913c31c9648b9e3d11ba2e78ad06aa9af6478974ce4b83ad3c1e9195c70a16387d7759c39bc6869b9385ca0cdb8aeb0c8ee509f3c71a2996a7911fac45aa5892cb0de5aeb3d937e4b55724ae29cc3b654f163deb9cd6c3724794506e644bd6ff223a0985f1e25427ef586393de000141d5d4b293192b2338d52f23ee2b9c5067eb5de4f2977a078b9d712e6a210625c8809755bf13462bd0a7a69b812d42ebc50913619c22af86a5e94fb5e00a5491a63e8e2183706b30fc68939ddd123caf387ccd53a758300b4de2ec89fc97a91abf44aba456dd7309be74594d5bb6004bc82272f8dc2219c522039e822e4fe54bc1fe89588b4fae7825aeed4dfd790aa73bc2ef0e90562571c6f9b351d8f17784894692c0e812634f4381fd143f800bf71d45570474de61549bda0f2e22e792d8a3779807fe7f1aaad9ec22310ca23805b45dcf62f43ca8f0cbb3d539daca4d8539deefd97e22ca93296dc9d4d9ff268fb43395216192a8eb8716bf82f0a24686561600e5df760f6a967218a9b4129be9a2775896a20a312dc59cb69d9d0b2048939ad3214692990cf41ffb4d0ee0b61d00b71980592403a0cc647201aee8b12a18d96eff421373432a35b9d820555dcd2a60f8ab1ec4ce8039b5e8f5f0c9ee9bb8eced84e260c02f1fedf6920e51431a30ace0f911a09c04e5fd2fb567eaf9014dde998bd4666e6b08fbd406667a7fe852a3b4218ee7524ac5889ae18bc5d8fe219c554f826a117222617fbc5e81c2663643a0381a58510847e75adb7e4b95a2acde6bacb72793af71ec60022b68a68f062fe42a834451c97b5351548088a2b7c8cb9ac40455321977d4a2c1720bddeaa32f05bb07828755acd6f75aca2fce53704a8d12ef6c171d8f9fab2b09fefb2f6c868f3999f199a3dcb55350bb6400a6e2b9f744a944479f8a6783f6bda75553c6d50a104780180e4826bfd1ed3e52abf172dd10bd4b0d90b90771f331f0904c682a41cb06625c721156b9f3746b56ccb01d78bf62a0e92b696ea0f4e0f9344aa8535aeebcb9dc23f9884bbc01e9b9c2a1e01e1ff2cd2628a21f3cdeaae31feec357d78d00127e2b275b74856dfdf22debad18a625d8599aa5fd8578584d4388722f3a16fcbff1f432037acf75600fca25e2df587032ce9246c85cbaf0c976a5605db108463339275ada0be1aa98c8e59c57d513b3e22903a0664b33d58298546353d9ea058b4bdf4a24d8f152986703727fcf4c9e6ff17108c3af1eb4bdd6309f13afc2035331b242d01c22ceecb33c7d323875271b945cb29aa037231aac0c563c162f57685d894c4be16502bcd99605f54c86eb0c20c9c2ff2a3802797f811e38e4baf451c58ba106a1235118f31ea60ccf0c8a2513a0d52596969b5195ddc574dd13b91e88a3883902491c850a1f5121f5b5858c93379563fdcea0fe4826b73ae8bd69a3c37af0029034df87ff1155b5960967d1b4c53ea6c51c9db23b1a70dbd3d18e6910aa80b26867e5328129b0bfc0ef86d9815ce756c0a6f766f6296fb1ec6c730411b6c74076ff6cb7ef416814f49aff67fd956efe8ba4a65f4222dd4d4588e91a6b61ebfc83870b801b5cbb6cb65c57606c8352dfba89865dd82b6a11afce1c1f6353324919766163a90f6137d71521dd6000c28854069c4cd8b6302e438abb0dcfed13d2781e45c2b411c00a5905b939273d291c2b2f3389b9571f0f54ebebb0349e32032c4737a7c9bbf23d5c43e802c272dcca9c1e382396fd682b77916dc2d2c8aa6d9a941e769b60981ecba0a76ae15c6fa56e01abd322e0abe1d894593decef5f23a61cca2d8d80570b18a5dbbdabd663cd726649d9dee089cf52e0b563838e61b588dddce8553b6a473ce1279476fc18f9fa680c583dc4c3407c14ee3bcd27de1ec5c7b4ec093c24b36ed0495e281554f0a2934c3e301f3f7fcb841960949fa88fd5449f228d303831f6d6dcfd9d94ae035adc03ecc726a2cc12b2376696728f50a5cebe99cd15fea6323800a0613b1f186494dee0d1d4dbdb0e464896de94ca58a6e44d6fdf503a3c5b0c83ea67448a80098ce35809b4efe4436bc64c15c5cc1565100610e8750442265dba381b38a29af159bb5f3bd4a2a268c01881a921daa84181796f7cd2531e46b802969534274dbd134ae91a0f13358d43b97a3c3e7a3c59a07dc2f60f6d72bef582dc602f932bed13d5fe00d9d52763550cb9c474336b53fc287517e81aa8d1a10c9f91f5a53dfd947a89bbec837a811eee62ac7c89206a8edc4721ffb4049f5d03469781050372610f1a337709799bd6fdc5f5c015e86ddcc7fc618f2cb222dc7fab5fd4225417b5d797eb2b891f143909870282f2e8613122aab2ed1bd36c0a17742eebf4e0734fab6b09f93f5b06438b8dc74e24b0581cb9a78ab19bb068a8e5c7d4fa7937dde898f586db2bd425e001aa91058c3d5cd49d3db05867df997655d8176e37286b0247eed9855f39d8ebd26a0463f5694afd68ca8f955a409fa22c96f8c3b77184d9b6eb09ed204b6d59eb5762d48bad9dde94b89875983af96cebfb2041f0ccac300c78146ead2d462ceda09c235187c4be385f6bf716f1762d60bbd4e81a625f7611b5e2a7a7abfca0ad36e61c17158ee47d7198201cd49dbebe1419653d21709ec01dda4a69ea78780c56c8ca6c24e10993bd04a0d258e42ecb0a280b83d8b74e315130aba6a4a064cca4dfe373612c15e4befac27472324a2ab2ea59152162182b17f627ceef0a84dd13ce2fa11b8c0996858d50bb048b28156290654eabf39fa2af7eaada34180755914f20c6d5f0fda33909cf19e177fb54ff32803ea1bf6e928181b884f7395ebec20943ef1da1be1824079da31f82ce92109a201b674de763845cce53bd52706ac1bc3b08df0abf7eb2b5ed1c6689b587bc59db0e827cf64fee229afbbbe13600373a424b42f84eb405590f5a009f1ff59eff78347aaa43db7139093bb58329327d29c073f27630a3d32010e558201654dc2be09009286a4f0c1efa46727f9e33bc8e1e298d3873c3fa6bb3d44824dae5b18bce37de0a4e17dfa2767aaf182079712005702470817efd0f8baa75ba5debdc40d940dc0c99dfbae0e8da094e4b02fea6245cd7027140df3ff0c0b40196a2a0f429d27eeb5eb6c5fd00a2a2e28f22fdce21daa63e61f6392a5c2a285c53a2d28c2d1d6ebb89d8330be4b82dcce9f5abacadb320b6c0d18060d39d68a59b12cf74a9c99f62d8034700c91de30dfc5b73f0c526f70d09e259bf705302db20eb9c57e6b9823ca14de5898bcd7d08d77246670cf2860719669243d2e170d411567b9e8e99e60540152fc280eb8488def9733a7da4226ae1f0e74976f8381b47c49c9bda764f3fc077a138bdbb648a1d6785a28c75debb9e5384636ab330babe919b058e0d05eceb707b860bd116954ef7275dca6406935690dc6557e4501b485d3e09aed589cc15c18b8e1d6067e288af2d8c0e230f6431e1d0dd43f544e0de39cd221f0cd8d247c52de9768c266f2fcc8587c7d12beadad04a4fa58298462d85355a12d6c775f1187b88960609789e40da5fb00956cefb3fb3d0de3b720f9de840837184a0248249579eb6d9c0b387ca3772b6544a96e799129a8c0602421707c856439fd3bb15de65cfcaf161b6445059a6323593bec418a15166aa95d74e29930aa9322463a88fe533b524614517ba14b7da9ed89b76f832232d5f189a4d18563eb1f63182f6b463ccbc35f12c01849ff1865d78f3a2f1532f84bea41637e826c4ab223c7a60b9ef4efcce2435899581d17c4f699b85dbe845f10f97c06923ff5d19e5fc7b6d2e1a1e7f60ed35f81b175a351045473a201636f1c2396c534f884d62b33bdbe28c77646d44d6944e894a49cf07bfcca12fc09b2af606c7cc4f095737d0fbfaf3261ec89a6d64954ee0cb4f2fd739514fd4858da06cbd2ea665027e143412702a5799fe4c20b524ceb45a2154c8309b92a719286dd016f3510e8c470a8fef2fceceb615b3b44fac133ece4fa3a5b8e8b13e1b65984c1b0f432d5b456ab05fa13da06814c1654e904d9c3c32da8acbc712d18bbd2852c5e310c8debb7ab8619a117b55665454e50cd7f5a43331ffd10ef317538abe9a54f3bd44287bc550adfda80f368254b7ec50ab9a234103ad1c5f461857ecc04fc4428c18c35fb5306f39f74018391c8ef12230f8ba20926e9d6db8699da12f8d477f00a4e265b1dcc5ad60e8fb8d519bd6345996c3ddb15d4cf8db07f8f7e3c198135a5518b76c58d4d56bc5bc41a0c926505242d51ca75b2f9b102429bd32e0e91d8f886daf9caafcd9121d1d46a141b6d195a13e1830ba027e22851efce464e77e4350e4da9cc7be0e08f5548fd42c58ef566b8c6a352264ee359a53719e98bec0b2397f60c855e676b58a27dd8d44f4060960fa2fc1544d0784ec5447871681b011e530a44f148a312a41964a0981de7794b9eef78d8fe2ebc90676d1309e85e51c14dcc331743be931c955bd9c14e7fd92df93d3b839e623060de8bd056ed1db03e2fdab36b7415443fa70e6909492c6c0ceaa9325df2e464fa9821805761e7652313b2ba748b5550ee03c80e8ae96f0a6989ab7a49271efa6c0e5f7c44b0c9b3154d2447c55aa4114da4bcc4a2ebf1b2be40ecc4c1de5ea22a1504b24beef086661043441443e4244417bd33aef415c22f2914ccb1905d729b4280e1e7e14eeb278f29cddb68d9f094dfec97d1dc1f327dee87a7f9f4c698d5e91def675a7243ee0f33bb79bbb9d637d4ec5d8c1a72588643ea8e469ccbd6f047bde415fd9f1ff63cb473544ece9ad910b97e793a89e1ef1dae04e7de97b72de7cce341d6229875b00dda95b9a5f7ab8131872478f3322137c7393a3cd6f27b4a3c7cd3c1227a36b435b33033b10f45bed505b54686572cd335612394ca863f9107a593b2ad1efe64394af5eed725ae00b50b45da4ce328ca2ff3ff1a1435a7f17e15bb17c59b6c5521153912300214355504456a0f0481671d745cc79ebfbe2ac3553d66444786202db8106d4d1129cb2861d87aef057ddb1758195f3a82d1bdc061e4c9e8cc5c8d0d63201bceb5dd0f151f018d9c8d2daaf20b11be6f27a8ef7e36cce28c1a60723015a65f07eb716b2fadec22589b5fce71c208175cd65b1eee8479418a5265ec33508eb88e85869490fa9e28fee1975ee5274ab61035494f593e246dbcfa4cfb4aa742a1751f8408a487df19b68d5e07971d312d7783539564911fad73ee47a81e0533efd3d23be0e1ba494829757206d1dc5726f4e443c935ee39991b7b144933fe8543a62f201bfec2df0a1816048f16481a409b05a9b1244901ec84e4fd7fddd53ad2b8851b0616212e7343b17d56d9adc4400c8b2b53d2305e28418ee48d79eff3398e7861ddfb245b40ce34f3bf4ed9c619dfa03ddcf2e74819b71c3b47714c7cf371fc3322fe314dbd8811a722b8e51f1150bdbe172c067327485869fef4814fcb5543e0ac46343fd730002f23b2853233a39d417b35dfdec6ff8148f38d5b35adb736f326118021ac351123a171b06c7379618bbe0f23ea02a34b1a1c8041f31d0b759ba2dc659fd7b0cd5103126562fb5c5856174325d2c7b57c192d1b047e5769648e0948bb9420f68c2a8201c1f064ff6875be55238e402ef08a7c808203ab2aa1bb24dcfb53469ea61abebf8738604d0689b1bcccd98ff42fcaae8b773193015b9c305dc9c8d6ae6ebee154a8a2ed593aa803baa41275a28e787c52e842c49331ca0c10331a478d2a849c3e740b3e5663c6c7ce995ab07865c324a123aaa247d1e435e357c5ce702c6cf37a3edde0e1e92088f5f054c926f47b4c5b3c2a29198aead413922196db265787c6ffdafcc359b0d95dd902b4632b5929f93103edb60906c6e5cd782c841e42a20f441328cafd62d41dd483c83549881dde36d96c7eea9b5152d559d52406768e5c2f758ff9a19b8e32fe0de90cee25246917157fd3e2f863b3109221b0550a6b59e30f9e46d3846702f2c359725cf64b5f9c973531abf692134eb7eeff0020c699d6891316d2be60f0d1a44838342eff6e7f7060f54684f2854472247c97a5308cc3e6d416a1083b16214d93894172c6a2b95339791ed30e7b41ad6d33dd40e1b964f6fbc2a2c439a686f986847e771cd09a46feca3de94e1b39ed2d3f535473fa97b97abb2c56fe2f77d27083dc1142d66c9ecb0ea28c80eea9bdf266736393983590fba2e5354e0d2e2f4b540de0c12fb8d2fffa259791e21023c2988726116b4c9748063a204d91958e3d2c33334a477aa2cbf1b7e27c2dd295d551f127e37b8e765cec48a2b615f0952aa99f8ebc859c68bd32aa19640285c3d9e56015b9b36dc1deb484b28e886afd7a40108f75742451e75c862e92ff213501445f19d15d4802f242a4b9de70f048f504f79d0b6df5ca5899b7bdef16d2f1fae8dd2a5e24418e75d7d0e1517e34eba985c2e03e7649da7f38dabd442f9b94ba06093340428e7f02c6d95ee2ecc503fae5bce11f91281e7c1bacfd9f1500b6688a1bcbf918a73bb10b04add32738971ca65d344dc32229677c2d8958e9d9b79cae63f270e607a1a560e8963efcf5a8dd7cc1f3a28a85d7aa3fb1ac4b5f163348abcd3432cf554d1ef65f085911a9b05d2b1498f2ce1a1ac91f11cb513b4fc5f98c3eb353d627682a0a4a5101061fe39f30861df3b1addcb07299afa13b565e598a1da1ba522794895a841038268b645e2e0c2433560fb2d12af7e69be03e7fe5117cb94888a7d269de1bf03afd688bd0fc99c2f03638bd5f548ec671f4ea185614213f121f3c1e30135e6d8a5967c56ad41b67519e3604de5aa10878b8774de3de2a14bf4c51d10112434128c7b68471338895006474ebdcd4b99604977aaf7cd54742bafc32e1ec5269605a149a0d6461d454949ea1b632d44d5446e12417a16c08b2c2a8a42d447c71a1b9b32d2a10892e4e35024f301cca654fe75e6dde06e71eb3b1a32add011da1fb11f576de5d9a5b3f95dcda833e98a72a03f2947acb9568ffa190d429d233be1ad125a13eba89d619d418fc8440a79648ac6fd0cc63b997e4a0d27ef35e72149ddd8e02f8e518f95733081566da0bfffbbcf91ae0d28c611fc3b7e1981a73b9c8f232843240d2e5b665d8bae85e19d95d615ddda8e8a1e5d4bcfe0a625b4dfce24590be7771a9961e3205260c9ee48346d31f6a0353f5c5b984565d9f4fa73d6cf15b9a2e438d1cbe880155dd4ab20281713a972028fbd2cadb37abc3bbdc9ec01aff65991dc8a2d8fd8d49a04632c4be5a50f50a823671232e7008503fb4dc0377813000e8f74695381e54d154da5b891b48d135b3d5b61a0d106605dd0e21fa405a0ff208bf84eae2d6bf4132bf4445473a9473a3091ff86d3c1ba734c4b7890eec7d134c4a83e87f818a457b88b8da374ad110d1ec80236fec0c087d5e9a8a2fbc4221ec8f898314626387ff65837fe2727dd37f1b1f755951c66fda0207600698d467546f4071741e809d67542d3edba8c238911a73f64590f1e1e4e4dc642093cff7568fad0df9128544c2ccb9653ffc64011ced45ed855b0ae2852e3d3181c1c1e2cb58d2cd7af7d4f00a993b7587eff48500be3af179e7844e969e123aab3a32b5799b48f99c0ca6a7510dfce9e0679ebeedfc164bd1a56024564c14f81c81855bd519b42cf04e11255802780cb6258d87248ee3ee5c5f197218cd07b7af7618afcbba080acafadf492c70fad2e682d7f23135fae38ab6ead387d2ac8f7fbf1e5e71ad6b5fbd4f272a2af1e7378e25a99a2f343baf4637ac9333aed06b470b998ba9c8adf7904c6e71745700bcae8031ff18ef0c53c830235927eaa3a6bdf07b86166e8f5c01f8ff2cc7eb88efb50f28d7313b8be0931cfb940a0c5515635b55346882233ddd254bbac7000aee373c3b773ca50fb68c8dc4294f1741fa3f2bfa6e4beaf803f7b4550e5938f17c25538bbca0f21bc885995146a5564ba560d050e7b6bb1bb40d1fbc549328b47016938de00148792d6f48be26d2f8801e53533c338e0ce93be3427c6213a4507bd01bb9203ad6c2d97662e65bdeb76a89f1a0598c4880af365f50d53a651bf2c531fe009ff6f480aad76f4d58abb8f022c1676b5da7825e908136d288fbc0c954197f2cdb268b414a9bc1f34082b7af971b5999291149cd6318be0af50950a9dd35ba7f85c63430e227d0222c84301480be87fdbc57c247f62e3b5ce21e3ccc5f8d5d32e205d46ce81cd275cc9e4f082bd132954f0c94591fa280e26fbd0beb73ef6ff37aae5acad41efa4c643ff790e0b56d05c277011acccfe0839270c015bf9cf80f946863afda32688243a206c4f698e5c88f428afcad7ec9f60ad17ef711f6d61fd048c25eead90fcef1f4789c4bc4863eb97e0bb9833cadd9ea2ffcc5a45a49b760f4803a6a0e0107ac9a7cf23370a0658832db0ddb914f339a1caeb9cd516bcd75462d2d96ecaae431547affdf04dfccf003f6c784e87ae6ee31884ecc99d6ea332fe4488f72659e0db23868ba8e1901ac37f88b10cbb1fb5b51767a402e40950dc387c9f701dadc89d3505ebc70a994ff1fe5c1e7be076f884239b7883235d87c9778655190aed1a4c14e8b939bcd5890ffd44e2ab0ed8c9cc01dca669448f6588eb790696ad3e397ea6426e8aead32d7da32e54ab572531fbd7f39fd48617ada910f1c7122d21f9c952acbb51387c13c2f522b629968261be8497136feed2973feda54b5e1fb9a571378147b824ec7451c999d3f2ac582553e0492d9fcad5a12591bf6c40e40e843023a982d63faaa91a5e5553cc05ef9b517732df5179e7810c10eeba1269fcb2acd55f78c8d703491f5e2342ccc1b58e42a775a7bee40a706423243304b45794eb5ccf550f4cfdf06bdd5e1e41f98e8911f81adbdd68b3569831a30dfdd072851775f0f7031e14f89ed083f8a8334c2c6fb34b17f6f9b7c6c67835a12e5aa890c4e6826993d067428a8f60ef8ad030739b7fd865d023f21415f3a741c8b42cf3ee80670df9b3f00c3b6d83e86f48d0af8f43ef249b38674a024e7a5f74733be4d2c62a6c43204c0ade1ba9a5fa5b3ff3975ab7c4823a74d8c7ad3c2d08bd19391b520316d15c456a76a9285bb3c867a481a0aec898b4735f3b70dc550aee9cca19fa94269c9b898667ec22ba47a850993257b4a94bc5ec3d895dddbb44e2c74a167d6ba707d7af18ffd264c15589bb31751400a2da30d92239001b7b651616324b37ab99c16a4c00060481bc16e290e6f967854712e5c69c28640d7f0d8c5b5184b4a04f9cc2071a9014e9829a9116b63a389888fe582ccbc706f2280119ebe199a0242126bc056ff78c0e6807ebec489b86a5afb8347bd4442ecbe4efedeabdd2766b4d5295796f9bb5799988beab20e8015d3912460d7465a512a812e47effc090efb6a22b09b10d20b2123b256921dcc0a0f9932ace570d138bb5295e583fc35ed817e99f20af681d73d379f56a1a01489e53bcd3b1bcc63d43d152f0b8605448585a63650bdd5a3852a2972b29fda1271fdbe22323b05508bb3f6d5c272c1815385c8e94a0b1a0f2f69aebb44c1e60c854877200de81d079c0527dff955503b51af4c19ade9bc8f006efda7cc5e3ccd7b4b1c6a305ba08db9f0bcadbef3df2cf0506dade03e719cfdf317e5652c05e9e2b4cf78512a557e71f4684a450a21e41078218e081ec618a74a48018f784eaa873935c95a512bde959f22ef4f11e97afec5fcb40c3bd621a503f6918d17095b10ef285411acacaae7284a5a3b69fdd18a77758549f0a1c63a1f2c63372eeb7124868fb4df1922f65ef3d2b43f411bac190518f3b7010cc901dc114ffc94f92995411d731ae758a48e6649a06a8aa6692ad9289bc659715b56dc024a1c613f2f853b20580dd722c07391fc9adb72a7229345b5e754bf2cb03545b654ab908e28ed8b72eaf69d9c9418e99dbac1bcef06c1558536fb92a52cd139578ba4b1b141c8870f5c8cf212a1abb8329090292fba60abbc4cd85b5a5d412556daa84d74090dfdefd26bb056eb3a4084e57c6dbf4dae0610b1be1e0a79831e700be0d58ae96b6c27645b8aab24fe3caab30a03b6af17267c9970b3c2b1fa16a1b3b6d0485467c6e6b75755658dc9805302c4d9c8438a8418d7fd0f18e1c21c51885101cd549f6d61d410368ab68a005db029d3e70159d0b4f4b0f258b083e5d0e0486184f58be182d8832cf145d14fd842b697034e5b2c12709dcd22514faa9b014aca4246557ebfa73c02c92102b67d96bdd3a986bd5df291661487123ed12054f5a2c3c7064a116e2b8c907edfa4981ac4286a1dbae2d504273e51d3c41205baad4ba98217364701e085bdfeb59325ab68bbb5fd6173a6b80b4114ad63d188f04a1069089c12c092c6dea5abd028d266c8ddd9cb59d32679ddb5024de70b10a772a4c32e789013a766af3b8fa7e7b62af719641a3ca52c16872a8372319ae0cfdf01f521b184c0ba1c35f9710531d7b610c27db4bf710c469a5191121236dd4a5e39c4d584abbeb947ec263510cad32808aef67cb904e77eae7652ce5fa65f6c5bd30450677c20c5b7d181e16a044ed7a712f4b82a1c44363ab587a049ac7a6aaddb37b51baa89b5347b7403050fa90f3ef211415157bec92a385209c8a3a5b28ab7331c1266cbe00dc1b24c68df04d4a6d95c2c080ef4ec2a5f24207b6e55e8b4dbbb8b40c61d9d9b63b16603fdf49bdf564e27866340cf30af5b3626369612250c37b51f0037fd72cd12dbd7f9d106e91f16af44df18e767e25b9c8d23aceefc8355a96740abd36c644dfb3faa0983cc5d3ec52bbe629301af5dfd15390514c0e5eff2080daaa22dbb6b04bef24105819eaef5280ca9de7d88488d9f7394e92073f0203a002771268c666735c1956525dc1a12b7c50751167a5ec9cc6a4cf25a5060ca579822ccec1259518a67821ae35ede1ace053427c1302e0cb5f4dd13171561d0296290d91712d857f1902aa84e311ad5070e806245e217c5fd5a1aa95cfa42f58accaba5a48c61440ba3daecf44afb2b15522b41314d82a4a1dc860213d6fa05bb00096808795b9ac55ce7188f8514001f6d0d6431d88160b7daa963fc4a1be434613ad1d6ed1ea484b1a2c6aa38a72b24b0165042d4f12b881577eb91f5a34818f09f8f7fc225902e058e5cf89906f844cb44a84e26dac457d74410210623693c1dc9dd5d6dfae01b41f9789705940b37f27531aac89b7a014bbac4b4e1b48f0af99a2dc513dae6d13549754fdb9334fe10669330fc78669b9597823f04354c4b366c0eb93658292f88d034fbac561b9547f9e8b5915a08c95dfd3edec9d598be98288f6ac92cc2554c3a3059c547a5d095e4792c28e045c8e91da716501e4a28aa1e124ba03439f6af9f31a096a88aa63a7630468f8ba05191ee9aafb5449eb4be19091fbfbf5a5dc42ff62c203fd8b5387caccdea246b2fccaf97fe51c232984013681ec0108f5bd00463e1b21ab052fd9d5dcb1759e44be8b280c283a76811a08ab146ea5561a76f9cec0cc369715ed86598e3da81e772d70d2cae6880428256082d67342e1653eb4a95d352ae2f7240f97738eff9747c2822ef19a40f4f0922118d9d9b8689f6d20d104b2034a968efa0fc9a58a00d0d421b008e0ac3737c4a07c1ad0c138135013030c17fc4390fbb2cffb9b8dd2de25ecdb89c24d5b94c39b2f16164b145e6583aa76616b79b085b6effc249ab7f7126cef4c06f841f982a2113c2e370bb024d39a90587c52e7b9c8bec24ce8c2a3cda14e556c3ed16c9f1219b225a27e45e19ffc098c12142104e38accd84d0273bec6a74ce111777245e35871aafdca1be13941a86b9e45349e0ea1580ccbfdb3f3bbd9e68e7712c063b6a4e79ca7fdff420610e1fc8e854625026d4cfb23f2621bf54bba2219ba31d0fec9ef41712042c39d62bfe42c95e0ce25fefa69ea5ebf4dddcfef837f7bc0e4dc850cbfdaaad3b45c121ca4edf7cb82bc98e056b0d0d1822200d252e88384d11ea307c62b6b30c54d5180cefcf9732775d59ded3dab09f8ec81825002e15416abce455078453d08d7753901c185cdf8eaf6f8d7466d0beaf83424c7a79bd28b78633b458175564715b1126c5af8b2eb6fe99d60067cbb03298b66562ee06e82a8f8798a2ee662a72df7cde0bb94dd408fd90443097321ee49a6f8920be8a884843ac702abb8c690a85ba4a891b80a4a463036e15f50ade8a47be6019f438c083b5e631cd67c150b784580a02bcba9d442569da632db2a1a02176bd2d42102f15243eb57f5ef2dcd4d15641836ca8751f159e5e3f8befa49340cc27e66c7d53053c005d70df3317e5760a0a195f823d4163a984503493b64327300edc29abd3037e63656a9a7e70834c8cc92fabe1b3e0a9f908210181c448e3824cc649043941bdaa3de1c595ab14587f587899fc8d008216df2c10e979759322dd7f5c14220e97d4f2e5bf3c54955ac8517aa80d340acbb8318f82714681d68e17cb51d2e08548638a5c84ed4388d582a196e93a7fe9bfd1d23bc7f9a752407508cc485b1febdfe487c5856e7170f41b36c817f6c922fc7dbc0b5aa03192eba184a01a159acf7fe2affdbbe1c0c183d536ed1485bfeb8d14f1cfd81c139b7a3f6d5821944da9ac9d62664cec9d8486be8d7794480b4def418694d65f0d1a85176eb19ff0cc1b3a5f4695a7b54e34ab8da7e2b3422b35b19d5b074868e601e14b0ced83093a15cd1d1d7290c8bc0d8b8c52360b715592e34f403f5236e9ccc219ef9a85ceb6637e8aa889e024aa60f9f853c963ff396f20475bde40f3eb82d7b9561cc1a899920705903943828a1373131837d2fed5dcab43e26fa89531f8c3fec33d0618769ccd556f027432bdf375e037df1e709ce3fdcadb905434333601d4e77153f19dfa8018f9dc13a28f033b0f938b4cf4cf10b21e5a92d8bca7b1d73aa6aeb8e7919cb7af258a8c0d7a0a9127b4af4c350b2619d79bebf28b0101448d74fc179edbe2c9ea21d318b436e789f4e658c16a03e52a53accf60b7c8913fd8211fdbc3164c4811c80e1677a18784be18ac962dcc79c3aa2db9bea074c243d4c5d7724d4cbc5e44587e7ea772394aa01140a2191be695aa05e0d6cccc15a3ee1def279fe2fd3d5ef7dca774ffd112e4a1abb315e5b3cfedf32073b9c78e63ad400014429064bd274272fd91c675526ae1b46839e5b3425805e3a61921e6c8fa90de46229f03414b8607204f679751bab5a7e944a7aadf0bc5d35f9546daa029af1cc4135e1e60a0149bdad4527a8d0e97524f430f6e287212abb69f952ba15807811db36313ab00e7d28960b6fade2c417ee1fb8022cf381a358057ee010fa205e095a9f06e26dac320e2b83321a2ae228e979f5b72a0c533d352c5ca83daf3ac9a2cf494fe2c602a6dce0bbba40c23e98abc2e7d3ac628b9302877349a129a440bc18754e0517b80bc52208d09c85075dff8c2e34eadf60701b58d7670c793b35db5b26ea3ca0b5d6bc3443ade064571c33f472b48dcba79f634ff2d9a78c937a7f3eece0c9c44418e826b6d4f793485cd79ba51198b886070d7ac7b6f3290251a5912baf62b426d5a4f323b3213969b77bcfe7bda87dfb878f88bc16dea05e7253fa4a4c1e14a759d2680353cbba0e8e50be696e4018e203b998138400b70f909395742af9911c248e309a03149fd932f6c6f0f2d6ae16eca2f23802a45ff429e7e922f0dc4ea3db9f2f73ddd975507334b46670cb02d3eace0cf93542e3afd40f8969867705e681f6968ef314c2d6e389300abd6ff82e0310e1c993dce44ffe5ec3ca1b0b5447fa71853d60e7a56e033f44a150cac479e57b2482fc274b0a05544b582297c2a527a75e42b4543168e75ad96cb6b824d9a19cf22d1468c61b72b049e2df8178bd3e833799974fdae30bbcc9a7d5ea2558d8d5cb815f3b04e4f35e0b6591a889a2c494a1122846ea9692836d0eeacd25a905b0d68afcb7d444eff1cfb81bd7782a8c20611ab7a4e41ce1b9f30d2390cffb21d75eee24e6f8bcee82412e52f61b21fc569b7f3a17dbb97b4c5daa59f3590d34f1597ced42a41c24b90ddcab646dd1ad759c650571225ad89d69d763870dba1307ad75058721a0a871ecb04cddd0105b96abbd4e53440258351871a41cc9254ba79ac81d436b0af77b468038629808a963f5582dab8ef55d1c60c78ad3223646f2be49eae40c196e6e64adca43dfb16a3ffdbb659663d34c4651c51c335990a5a78d1bd9df15d90053ecdd1d8346d1bb00225f3cc531d4181bc8362f0f8be2b2935259fae58dd972665ceeab8dd3ac6153b41e21ad1f2e22a84fafbe3ec9efb593ceaa959b13039acfc33c38438953a67b78647c75824cedd84a346c53734caec92bc81c304d063aa16abd99b47bd1b394a0e5f64b321cdecd663c70b7572f0e0f5dcf3cebbf927ddc4cbb10abbad8033db244e0fa26a36c3e8665181b63361df2c23cb473fdcec0df7e0baeb0c46e426220a2b638b9e4a1633628c0dacfa641172ed80db384751ce3d0aa8064f840d64a4d16cf185066fe07c46e56d992db667272f69ce5a9f253ddcbc51aabf20296247e9d6f7778584de4a94d3d1971d4f0499545bc7d770f5ed6109e3851a74b56551c1cc5e66f4391355a7c46894acd00aed1449d4a44e60b7ce737034e819ea5e3a2d00318340a0f21600e7a0da0800382186e204e311623d81b99c9cf0f67e3fc107c79d758355fbc0f79240f451fb1e3b2c7b89a4ee7106766ce45184dd1f468d81ea69f5742c7ebe69931e99f2f79ea461108df091fd2c5ff942b0efff41177eee511fe9b146b30e4ad64385400a4e8e34f70075fcdb411459fdf2f61f6bda7d88ab057c974febcafdfda88793b14d53f0b7da900d70fa83a58d430580b6d35e8fb9966ee09d2ecc0f4df50bdd55dd406389674c2c8979a17527a70746ae185669ef224cd3aa17adbd576741634f185e695ad4933d6f8019b937bcc00d1126a5148482b646c3be54feef6565b929b8338eb54358027476b643c29236033a00676740b3debbbaa14dcdb40f75267e24dba38cca4650e9522e96cd146388ecec6f0e9cade0ca26abf4e943f0acfe4700ee38c0c292cedac00a84c4d78da0a1cb5da92b9ce09983b9bc83eac518dd7e29f23968e0b2afd924ebfa8774fdce314634fb830692443eee4b2e727474e4e65008e0b12b4d1f307ff135d8f31df277c6796e85f3bc4057dab665588f94d94c01c3d2278ce0fe31c7226c2e06fd5ea4edb008b897938a3b8a70313e16c215de2638857468c76d4804b4e3aadd00b8755f826b5a3aac350a7fbc8138e0673e0e76cde780ee05a4b837a16b4071b0870d83ec197721af033c7007ba2a48f89ed981dadfbda795a6a8d736e2aac4804070a42cf1e6bd6eb303053a5e0f0a8e276d45902252d5cd4dae7c5dbf39e9221249de65ddfa247a4aa1f69c167b4a3f141d6f6fa73fc19b08a3480956bac18790c35cad0e8e92e4fb72a405a8342ebd079eb6a7edd87dd4754f7be06cff00c182aaddd26611f12282be58fab716f759f8eb410bdb88c68edaec07460a58ede0a3aeaca53454c13a6850c938eec2faa02a5704428a00c3a1671e5d7d42d0e4f6b2e67e36b931574988d9e432c908b1861c8c86a79d86eaf5b7cff15c4abe0cf670d30b7272b112cf3f964ad4b07830d8a1dca0aff227d05053412c371b435ba7af31c2126476579a5d141b5f23a79e36a0207f2e5995292da2921433737b74426b1cd1ad37f142de1e48475075049acd98cdc9df8c3dce187d501c0e7fb22d57656cc33c6858538a156dbf24ceda25ae0b6af456bd7d964bccd1dcd9e5b7ad70b0f4adc02e378c2202f435ed3a3f7da6a3c5b12f8245bf6f0ff634fe0f1956cf00941fd94825a9305441168b7d1f1f1d30e0d1e0b76e0d6a7fb400b89138e8aa8304440090f590b63400e2bde94289e8f8e8a5828a1123f8340db955632ef7bdf4c3dbad4a3380096026c897c3b15fc67e58320f307e518bdc70f29371399c6e441c71b65b074257139ce2b6983f0bd1007a9c74545fdae44eb3fc24a41301f75d48eb3912feb3cc9d033f11e2749fcae8e91e3ed05e7fb0d9669fd23a01569ab54b884edc07fb88a03a0ec1580f2712590929eb7789eda91c49b57e64d3e54fbd778c74a371657e38cf4aeffe579c7e32b31b04d4fa7e994a0eed280df53033ef8d21d60b8517d40ba09097afd3057146a9a7108d1d5494f96b387a6a76bc1944b23f2773df55c07916c3f4710892a2a0ebf0ce4719bcc373d31a0e068013552b0f7075b6eff5980bba3ac25d2c5f98d12948bf63be280cf14dc01d58d22885c2b8abc51cae97c064bcf84350b52dbabfd6471048f54307114f2c98d33230446726b8850aff7ce2b0b41447c757d196f20ca0d3a9139fcc2e2d536c8f8c5101226c288dcfe4b5108e8611f06e2165d1b512e02746426ca8d66c87fd2dc44a1d96ddec9c4c4a2d6ac790ea77c1ed6ea2f481c37b70d6d27bd7fa298e0a8e73343183f85a416e0ee44d9675ec6c1283db0447527a9383ca2629a05498ff913899569edfee763ebcc5b2ac8def28665e63a936176cb1876e640e58d66a312aff98b6af460f91cd739eafa53e825c87720814d9c8d0eabeef12feafd29e6f12a28c43f39f5632890790924871da6f0b2603a7ecb6d49e01865a7e6e37a639be29bf4a428f46aea3934bb82f6aa0d2f4524aa8b5d1f5111bd4fc2f6a34dd494e7a19cac0bbb6beada9be9cff25c92036b9c865cc252c72c2c68fe2a340fd0b3bd02408babd7f2e043496c4c1e157bbf1c7bb0f904c5759fe8b1e34bd65a24dd6c53a2c0fe2114dac0a6598195292c0ce49249a108611c052205c417100612a6d418224723222617267cc752288880a406872a7b019009369a20a2959f842008bc6e7701fc5b81365384ac018ee8990918ec208adf14f0430816555437ffb809bc2d337f6d5657e586fabb953603fcd0b507f57c94bd14ea7fde7966994258ed4a84d20a5102ef51a39afcb7bfa0bc2143db8e2f7913b2b21a2b1c985c63522b16786ce2f03651f35d79087349025683f6f4b9eff3a170902994176ea1eee284d124ec7e0a710d51342bdd1c181a56a0cbdd165f9c3eb2572c83425b343f701207b68b883de259c869ccc601d0e73ef56d76f7496ee073410690c23b6ed325694c1eb437e90424af4586a84a87be4910fe0eed07c4794b50b0ed3927d68d74501b2d1162a6483416bcb14f6f85d393647633d0f3c6c8ea1c5f17376cebd1e762076c97bd43d66e1bf9d212705a5149854232202a3d9a38bd1d3952e9e2400be1d96f7cedb2af84b2f2a9e971daaf63a38b96865cfe04a75296ffa7a6a5d8aaebdb0dc550145b93814459964264c83eb58aa3a58b676ecc2e38bb3e30f02c15dce879363fa86d8faf69b52af83ab70a4ae4a31d3abdaadaeb0f9da450121d19fdf3509027f47e01d33a66ea1f970bedea7294113228a907cef206068fa48a6e00f89f795cd1f1879114b1137effb28788799073198b4179ec84db5880870bc5d36da34fd8e7420821ba73da895a8136a017b35235ee5253afe3b1b638819cc67965bab711d7d2e70a5bc0e45bf0d4ba96b6e7d42a99407f2a4215edd164ae38e2358902c6eb0572b69be44d855f168e19d84a56eb7706fc5a1bfd3a6f340dc40c3d00450b36a8e21174343e58252de017884f1ea8406e45ed71c5216a65a5f2393a9615b1529fbab84f8d794cea865d3998a8aeafe06929eaee487ac2ed2f6944f066fbffa186a328cb8a26f146a2fb10144cb7965ad010116d0b09520148c1da454d9119474165715187f467f0832b8443147d52a4ec45b27596cf67a596c79c121760b866ab989a6a873aea307136a3f6dfcc61e0eb120299373711a5e1f9bab6573a4c7c4ef0b39372642ef768b2d8280c52c68ad0a5b6a0c386c86852ec5f749a12c53b516b107b61d69e5551048ac9b921113d10b7200fa1ee3afdaa8fe750639b60ee2b62c37483dd90f0486ff0856c38493c281cc08a28de2ecd58b09f3b30a91e402173bddbc955523a499927e3a73af96d2a20ba95fc53cd8d40ddb060ea055e04319de4200f323339f14127c687d003cfc1747686bfd39452a1ffea23bfe53341ae754e5bd9d8a1828b2ea146377b0952b2b89ac54aeb3b9da4d29bba3f8e6704aa67c365cc1f1339bfad5edf819eccba82cb7bec6ffcc21f695de61f2160d9c0d9b98f44dde66811dcf51b4cd8fc52c7e27a54d3043aa43ddf784dd0cbdeb873fb053518371ef0221a0d7c97501640ade7c0382aa6f9a4c18af7870368be120d719f65adcf6447f06ff04b2bbb167e8402b2cf5666705b2555cb2943a346b72865f32583700fe72057facbd092f6625363e0e4faa0fde8fe7769bbefa8767f59a142973ce1b610ae2f227884cd2f5e289a07d93019d71789d681b175afcff7f2100fc92e6b953a06adc826a9a893dc2c50521fd73c4f0a65a81298918b1287e73e2aa69ced155ab1269f352867465402ea8c36361358598d03011768b6825f32909eb25327b1f542974e28aed5c5699cd00bdf4bf8c1897afc217f335eb9e46deb5a5445dddb645a1f4c05ae338588c693b6ae74094aab9b0dbb1c75fbaff94be9b214164343384ab6246dac508158a906c8768961a6478465134e05708c8bc9353a1599d4c6952314fd011b35f1750a6a3f0eb849754cc133443d478026f8e1708d9a07d64d6aeb2248cd93ba4e21451f8aeb13488e9736593ba074cd11c27060e51959b5dcdbed415a8b28ee08355587b1ee80d7918df41081c62a754b379000dc610d8d79552e4136586e56e6abf6a0e5f8afed73fdfc1d4d57f58073c051a871daeadc140e70a44dab8f7a0278ada4235331b849c229d94573d5d44e521fe6a712c25bca8ef25baaba6271672f51278ee5756aaddc8716b0a3ac8d7577863851356a9c5b5762c077fab9a7705a1d3bf8c5c742c28360be5d1488efe441b04f48cce67cf44bfa556a1cb15da43cb06a54a1fd15ad464446edca21a3eb280845a642493b4e0841406c1725229438ffe89f1e42293047e27709b916dd16b6d4928c2ef2f960bf411074f1cbead8a65023985ff11eb840760848427bca7b12d4f4c2bb9ff57abaa7e901d46899b57ccfc86fc0b7eda3bd2aa253025c276c41007f081e962faa032319e7ff5c1d45af7b1942f0258fa09587c14e41a5bacf8247d93cc2c93f8bd7c36ba89aa080f088e8d8de75fe183ae603603a183841f8e7a3f28901c1911b1a2ea885f140e4afc1957290a38118aa1188faa7733ac22a40b21f89e3e5b8e2fd263af3eef8a605695014effc9001a6f0de07462052a601b920c0272b7414928626a2bffd7bfec1415eca889d820b7f4f882a0d688fa894720a61fbb51daa8f05127eefad29f8cb55edd1abd14f3c1d1e44577e9b5ca149c3908fa81a3331e7e734e2b770b8bfe1b23401695fdaddc1686ee6672d2ebf43e2742ed03af0a280945de2880a13b3307a2f34603dea01fa530000901a6f29dd3d5793f7d9b14118a9422a855cbe972c9b726adc0d754c0f8259c04922cd771c2d0c6d6ffcca65ffc67ff61dcdaef19fd1c519e323e493a586b22838c20d0ade18d66201a1ca1b34f966770b893b113b45a3578f7f037aaa859d65d1528a4a4a44563b1348f5a015220eaa319936f7601ba1750c09d348292cf3ef8448c20acdb25345ec970d3ef3d7caaff6f30b7c522022f4a848019a9fa16375ce5f0996139579cd984bc38fc541e889d70f7a2f7ecc52314e00f40461c4db3e49b9fa34af3e5568ea067df5e80268016a8f7b27e9e11dcdcf629d027b48fa04ea579c2c246f5f5e4801e0d4a8ab87ce45d6a539797fd87c889293cdb6050e1dfa8a8ca66e5ac38bc73af490febba73f392000777485f67afc9fedec3bd94f1353b5b665510de716e19e27c25964c2a938320956d54c4fab34628b7d42f9fbef8a344d7ccb2cd3e35855e8d2d5aeabffd1e1ddaa19d97796816a9d07c655b555e09696161c7adcffa7afb90bd213d793930984fc83ce5f6ddf9b6c2f7345546a42f4e225b0fa9f3b7ba54fa523a9ac7733dea907649310b5b21ffd258dfafef57f30b3a84ab9ec4654ffda0fd5d1a2b92ececa265335863d402b8cb153634d726341d3b31a2dc1db7e5538cce76031da5af8f01244db702084a7ca68777353c9fc47dc1b5680d1de0365e7b2af7fa43caa4cf8d50225da7a2d9288528581327774e4d49633fb1fb9b5d5b543f0d7e154f00c48050ceb7cbccfacdcf617c63a38f5202dfd11d7b7b27f6234e14bdf92e746fecf3bc5ea437db2a4a612216f09854065b11868fa3b82f691c5709de3e8d7c1225c313d7f1847b3c2abbc2768a08b93443619d3ef88f96c54e0dc53d8382bd84899cfd2ebbd32b95a42b434d2af43b0bdb7cf8c5655b5f9658c1535cb62ce6dd061749ca5055a6b24436687b7b04929d85f06f8af70d25b309ba0e3f608883ea538c41079d61fdae854b26c8a167c99b56bae587b22efefe7bf456478c0a90c4deba949bceb38671d8e77d071f64acfddb870842fd9daa043c120d41d7a91a67953584c0eb0a980e3f8a2e0bbe74fe8c5ae1a09a50acc1473c990d4513b9657203c0635a77bad0c91fbee9c07a56d64c4da129c2fa105110c422c75925fc31c66516f023e71df978db5d7db1328a2ef257aa1920b3a676f7f725ca4fcac5d9214276bb767e1c5fd690e907591711e0ee8fbec8e28ac87e8d877c5a72fa57b7403f8c38276c02d1b4a0e6d73b0e9c2ccc4f5712255b601bcdb1a69f5ebd9f9ba01438f1e2658faffd3cf1f1782c256bc207aa236ef07e09669865078534464536f02d932ea2b9f17b35aaa6912348d74e65614b1a6c70f62203d6ff04e6444070592ed5b78fa0a39f4a4a064a26cf8554f6ea585b5f9756d012e4701746aa7d76a01eeea6b8a30cd37783251d5d35f7016acb7bc138ae77f63a1f1e09357fae0e4ecd05f0b14604e84622bde5cf710f425f22caabc29420c2b1b9e0f4fae5aba3211c0bcf04840fb9f1047c1eb8093810809b521cc69daf9f02c1229258aa410e774b038b52ba88962b6e6bc77c1cee02da87268e88c046c664e210e103db4f59d7cac68cd562ab1462a379f4a076961fcd16d1cccfbaddb58165c6be1790dc29b14c414f3466c5b8b2a58cbad63125b838a4319e077493134b931aef34e2ea66f61247a0705be162f342f893d95b9aba95ffa3e2d6ca582b6eb939972f55997c4c946e5617fb46f92a6605272667fa28559343f9ce21d195920421904c138a6c904e006d52372d69ed4c1ba67ac0278cfb4d936412529c76a9802d86099de8824ae6288282178ff6afe37327c06669c71ca0c91cecdf9b5a3931abad1667c6575cc276c04ab4eccea7f7396d63e1fe5b77616329e406ff6863153823eeed606ad9389aeb73143bacef9175a00ce7e39fc2b5d0ad6125fd95f2584a2c74618b3660489e759956e5af7669853dc3ac6a28429a44aee246f2fd2f78b5cd3514fa257ca9d9c9a11fb75e34c56cfc7714707add3f881eb31dee8f22da9b847cbddaf691892bfb6debed9b75962b92d336e0389dd4ecf2325d4fa035adb2a935920d032930ec46212175c0749db10bd930a96f85e5e0f981f3e1f3085191e325ea7b301be97c42f7a4b11cdcd29ef05e07250805073aaee09c74707f04725166ea4a9630aabadd9b733f0bdc4828f24217b6fb2e5de52ca9464380918093a099af676be8f74b396bee526a77255d79df7ffd6ae5ee2341996653b557778a5a5043a744f94be3892a85c90e4a1b103f7c45257c5c82a29a99810626b013706103d682d58b263d490a43e31b54de5409f28d2ce60fae2c8084f9c7018c189a217e030421353ad296bc410839a86143190a82206241b0d628861090c6af00003152650c8000312150f3ae5800ddab728a8f62a3105e629099ba72a620881fd6910c696d717e44a3c2b601c19c17082fdc13072c0feaebf77ac312ab158b2c1ab355f90e7f882687fd144059e0fda24289a2fc8a98f075d7c91039e7fc12c4ee0f9335fd07c777757e207ec17bbbbbbcb7c414e3d9054b224f1620a3cbfe5d44117319c6f747a40b1f284e5ca1357ae60ffc78204f61fbdb801fbe7c48062be206fc2abbcae4ca1f2822faa1c5539a28ba2a62ebe80c11330e8c20a1254a460f50202152578fefd82e616f04a942d9690b2c51b5c7481fd59f74e0dc134ebc10c365450c414614a8724533cb57184946ccea97191c464ce39e7ea0b9ad96bdd603104167160ff9bc515ec0f3a2161ff9701fb8f5a8091c3056c4da9827d8b2b8ab8a20deca04c19292081110b8cce285ae30a2b5af0030b66479c685b90c0eb971e3aa740c1f32fc805cfbf57c6a81629a4b076b8b9d56ad933df5e2b96b082060c4af104fb6f56a42019b17bd114033b850537a8a86aca89a54988a62398aac0f3e7fb20441c6d38c5d186ab10731928e102ec8f80d8e469b562fd2790d0026d80e7d3f96d8568bda2485501c4184711d4c51c6c5cf932545c39fddba9383a4cca2b1f94728ba7d76b528a375677e2ea6fcb7ec70122b8fb0bb22d76df3d2bfcb19df4cfa70609d335a0d5fb73e210eec2ece1ee57abe7bcff1ec887f0170e71ec89eda47570df85d906730f34554a98e2fe5a4927d6838b7d8b60ebfa187365d5da16ad5ba0ef43b876325037a6c8ed8f99e1b6d014e5094b2c58364529829ba8e882a927f3c3b53237dc6f31b930dfff36e3f7df9797b2961debaf749e8f01447ef8d8268c00e710cc6957b259620babb005be42f9c3c7165fe2f4c764b95942750671cb28dc2f37bf30310df2a3051194dc87d274e85c32a2ccb7be250ac93ccd0f7d63c8845aa22b85d6ca06208021a3f9219a1f92c92266fefe26e66043860a7a67c41f0ea30fe4620b39deb82d13ba6644999f81f921592b74a5d0fa988f11855e68c8845a0f233671bdcc884d642f70bc84f6869e1bd73fc70d36995068c7490f32901111e18836a26434df0a853e1f644462cc90d1884da6f57e25668b5731456e67a3c485f998db6af98faff532392f39aefb99504ad8b63d953bacdf582fa1f45126cc09250a2d1c6ecea11a270e716dbb415862ceecb2fede3027f6c3c797d0568dfbedef775ba8ca89e5e8c47ca4f73731b7e02375c1dd7e04e9fee56f98a910defe4504f29ee1b3c255f8859f7d2f1ce278aac22139b11682f88e0cd2c20f1fe98ba0040ad307a24f02fd1cfa31fa31218cd4cabf1674620e36ae8e0cb59fa1d60d998d6b684b706cc5cd07c09a3876b93fc4b18c99baad229934ae7c192657ead0499b4e7a4f50ce2a6bfd82b6eea9b5dddec77c31fb7f407bc588d1c2944ab976deeac43fa0add5faabfe95a63dc5dd071f7ccbcad7b39aae86dc4bdfb1bf7a6a57331fdb68f52bb1ce7cc70a739ab8ac9f79f9f96089d29b0933f5617fc8488cfb7d6b56594f5a4c6eeea49f57eb98aff2e06dc29fdf4fbe23fefc86923efd2f25005eca57f772be9ce06cbdf41d98673db9b9937e8260cf3c6fbe5703be9c5f1697f5abcf2d64baa43a780b7e370c73e3f0c530b35efc97ca46cc8e55ef81981d8b611876966e3e88bbef40cc2000440ec4e9b2a0982f8d98ef8c9841993cbe8879c45dafd8501267b6ac8fbefac24c716e51e918649f61f6c1265a4f5a624a529a89eeadd1491bafb25fa374524f08ed9cce7a3eb4a759081e42a71c1beb9860c51b31c7c41c1f1df790383506885b5f2c817e8b417ceca7172cdf46895ba42826b34f8395152942c3cbead39023d37efb2232741cb226f369b0324b1fe4ee0c3783f4675e200375f305250e7d1be690304a801c62ba23832045c81f60fa302e7bae6212873e9ddfee6474d2a69345dd4248d8acde8bcbedb05455ea0dc5d2d2142b50547081e294e5298a8b149e4f5dab4a4c949e58dc33899b1b57252bd2e78adc017d7442f2bc2b39b93c0b3d923873723fdf97a63b75cb09dbc41f13c672dabccf558c59ba2f6edcece1f94a4b4a3ece239a4495e8114552fafa5d59f07cbf22c7f9ee848449279e263c5d0a3c3f8f78b6e85624cefcdbea25ee8b96c1e1ca97d9e1ca972fd374e577364a5cfa9aadd4ad1297a88bba67d2ed386172c268b8c20c577e1e8f9c8d4eb5b444cef9203871db874eda647a84eb77b27b71b934a86a1486ee092c9ba058c18d8f9c0aa41c5d687ab8f5ddc895d4235c5b02b911d78b7c1cebb7c0b8d98deafcda4748ae247d24ae2d246e6e6922b559e2dadfeaefa0e1b6ec84892e94c072c22d1feb97c072c2fe391356819cc3d2c8c59829de0b1c37b7b62940dcec452c96af1493e5662f52c4bd48c3f21bc9c7fae2722b2d617e2b99583e88ab918f9512d11935a244b48808ce21906d579ae846b81a71b98d9b1ed91fbafe996509db99f334d3914c7a724467505880b32bc1734524c311383b12142457c27342c19309cf77d9d3bfa01c145cd708d282b0e4f6d3f470b3cf90f88e1be1e94b73ce1f2ff8b7d57d34df91e6bbd17c1ab6aab8d9c620dd6c59188ac499dfe10ac700f1bdf4b4a74edae4b62da99b6387bb0a85fa061b2029c958dfc9cfc12c42520b0f5c1cc958437c9c9fff27d32463e46609f5d482ba56f010874dd985e8a3ee6ea9f8018a3f11887d6d041bbbd3f3fcfdf7fd270e117272ed67d9e5051fb9979f099e485dfaf8c3a90d9287d01f3e0e1112e2638c969ba515895558210556b8f2b0e5e32a945792a08892c9ef82596ece4961eab8e8e35d2edac89ce0bebed0fa7ab6fa753ae99cd4ab47676b7775a57dd2aa6d965375dea77dabea75aa158b5615372deb4e6aefcb7c698f839994568e5a6fdb569e67b574926b6bfd4edfa667dddddda7d74a35cf52ec3edddddd77a6e65313e974ebeeeeeeee4da9ba33303a15777de7a3f5eb00f6ca51eb59ab39557195eb2a0296e73bdcd701ecdff5819c0341270295ec5422e5b4d070e56f5fdc1a2c9b5eb0450f97a60596883b33846acb0b8c9278c10c4b6e0c964d53aca1b1e0b6b06c9a020c0a86b533534ca124e649660a27d803fd04d7231fa5704fa9dabafe54a5ea547daa51f5e9bf3e9d418968d1949a539b931597f49086b23f27f623e7ad9626a59473ce6c3f88f6dbcf1226d6826c6f35cdf3a4940aa05f4d682c02b15f29f6f7a762ab05be5661a6ddfba77a0ff36dead68589e5e7ff805c06d99e03930342787b2efc4c105bd60a5f4f5cd932944082d4d7347103f5299d49c1cd8fc719275a746d40943e46f9286160b82a2c664e20b9bce73b79a83fe923c52ad1fac8899e8f9c9855ef59cf7256256eaf0a7d7b0fb9df8238778edbace52cc75465c969f577798b221021c13a45f742b6774a55e106ec7328d4b6a0777da3a1c46d05e7c0b2a98b14f6cf8aade4e3fc4d9c51136a3e31dd77229168be17cd6fa9f93d355bcab6d47cc2f3a5e6d47c9a5194080a44e2fa4bdad54e4a1fc71df73d170ea1d8ebc22c04e74f94cf8540ba211477df710fa4ff13817022105709dd7362277e12e30d6af3feef8770988570f7b6b96e6863220bc155f49744f84b4bdde8a44d9e52d5dd7fbce0d0d10ce2f8414a065548a144e6370d282ea482b881890964fe4e24e54a50293529a59452d6de4c6805501e4cf7f1fb8fee5aecb8f542955d9bd2ad583675394387db62adea5ef076f102e7d1a9e6a0c57cc1104b9a8accc462cb1b559a6801850f6ac4105eb1822850da408242a20c55942c335069571a77c1827d005836155103abb06ceae284655c8a1581657e0289379ce0b04618455099e2e4040aaa1cddf084ec5a6101910a44e2e61bdc3dfebdc82f19f0d0850cca685a03ca0c7c98011bd8f39d2560f0c27ad9dce8a481843d8d26d43082fd4735a0b07f8ed413d85fa28105f677376ea6394e39767ab0cc3dcc30d28519639c3144d3196c7039c2050a9737b07f7b1e5417505c71a5a80434500200368ab0a031c31860ec209bfd3048220616082eb8f9e6c679a8acf5bad1d952e4c5162d5150444d29238832a6b053c704fde123a533236a667736121fe957d105828ee43337a28f29cda11fa3fff447fa8a72bd9ffdbf384d2268d55699484e5799efd835845b58ee7c457945b92dbbbbdbb7551ec23f5eb0bbe8fa04d7b16ca2410db85faea81799b9912d44d85fbabbfb949d83d645b70098e8b8f8e8523e7ad4749a30ff7e8180911b346e9653d469f2b84c5403bbc0e585198be5e48ce3bf9cb24b97c9e98942b184fd9b29c7c8dd7ece1348f0d1bb2ebf0ffaf2971c2999de487cf49ed51cf14d25a55271ef33df719e7eb24444440483f477248efd5d8913f6258ea4e2e609be93b9969a301f4fa8e2cef721a5b50c91b562067fc4aceffae8e81671bdcf3d43e23b8eadd84818b07a6b99f07176b7a53cf6d2b760b859b6de5562b63053cc604b8cb1164614bba7205eca2c608a80133671489d0fe44c6143f1d1bf4e5cf2c27e27145a8a68d66ecceed2535ec48b1a8af7d2e411e2dd4cd2ccd2554105145468e2fa48e166268b9b737a96e323502ce76c6f6f66de92a1c6c8cd2d65edbdaa2589f346124b4eb47092c9e2bae1239154971c3adc5e7298bfb5bdd456248e7f4c979b6f96bc89c0721ddf21ee8d8f73b6a4d4b7d58637f1e6c677a4cae7093c54865fca89bca8a5fc7b2ae6069716f9e84b325b644d0eaec444fbea4ca40f0a2a0091d0627ab97d6b87ab34ad28717ebda25c7fe1d7119542a489f642449ad0efb8ff4ce8d7c49cedaba2cffcc8917ce646349c71723325ea50154ad7744fa17b4f14bab6135d0e90b297d1d0b2eeb39532a19675e20c969b7dd6df81213ca7d84f46ec4e67fed4c89f12f9d3a2a31b5e51eec42c4c581437cb252019125c97c4e210de81e4beff0bfe2cf8fff06f61b98e3bf786f0949e7baf28f735d7fc1e52710fd7147570cc47e741060afe2af80391708132b0bb3f0b12c7bd27275c4c14242959c7c529064ed4b1f62f384f9b21a57d1361ad890c2358d3344dd3261d1aa13d0dc9174fa46476c2b4afc9e1d2d780a6f6c2b460100d489ffada0bf19dd790192a7e08f9d60d6e4bcbeda680422079dec280b56b03d674c0dac710e1305a6e7e61edb5a58d8bb7842bf79d90eabd97ef855d3461f5bbb08926ac3aa1e03bb9a51b2a541b212e6c3496983a92cd4c71fd97206d4abc5b824bfffd0bd23cad3e0d55f0b152147880516d086ee10b0c62490b24990cd1b5b66aaf7958c813973a15c13d90a350dfda9bafdbe41f472bd4371c0d4124abc1a1716e226d6bf958bfbbbbfb0b8249c3668beb9f6dda884ba7fa5de43b8ee485731369978bd2491a0aad5ec8fbee55a1d0f7aaef565fb4ba5c896bb0441c4cb22f943299248c9081724121d57f52f37f93354644297182b868594ef3486b8ad9138a79996f8542332f24b9d0608b1559ebbb99b091de28c34876c47d6d14c786b81dd6f19dd6f7affe763356dcdc6a8d71b5cf2dbc69af7a4dccdec3fcf62d983a13fe3081a348860437bfb6ed7720b91bd0f6246c9fb37d6cfb971b37671a21db3ef6225e31dffb891904652865ad50ca3cba7d67095d263896d886398887e94f1965794ecd10aa595c6144920cd3ed9779e236086454316a25b9937a7ec4c9dd63407de54e67a3d1dd2d65b56b97be9a620c94db3f77e8a44df70611540ba95a4bdcdc4e0e83dce9263912499f9ef47574acbd1704dba999382d4894643169dc4e25e3e4e6d6a40d87544b35412561fa459852da7445a9d6b391f84e23d1aacc39e713283b14c9bc0a289e5892cd64715b4937cb284c9f529129bab98b90b44562c31f326ae6889bdb8936154c7bb410207bb4986e0c113eb4105605988ab993682389433fe68ddc464e64b4b8b935bf454fe9e656abca9d475e0a984870988bd2159ca7951cb52044a88ba0a860e7827313893e352a24c41871f338c6f01643c4ed16746638014dcfaccd6aee558a198b81a0b5e214e3f66f729bdaa4da9c734e5ae79c73cea694ceea5bdb39a737e79c533ecb0d5aaba6695563c15b686f6a4635b491a390c9b37a51f585de883515f0f672d46c56c0dbb79cdbb77d69674b9cfab8d3344dab745220f3a9a67d37e714bd6f55aba7fded392bebcefbe2491551455067df96ae7dd2faa37f489f8e85167e3ce1582c27671cff41f0dac891be90c9d3b3d95401d797237db902eed96cf69a46297dcdb66cf9633e8feae5ff50852d8789d7da1f5e55799ef63fa44f77e98f2d047d6c0551b17eabb9f27e481f57899e83c4b1bc1fd2a7eba4151a214c5df915cb26244ae4e6ee1bb574d649e974ad4ba076d50dd13e69dd6a4f3d9856ac6d7b56b80abfd0a1fc69eea00af30bd3bf79b98d7fe29530afff3d5d7dd6c1540c7f22d1348d0489bdf721b1277a9b2acc8f552afb9caa622b86d99fb4da4435082a7d67d3b4ed73b4dc4c31a5dd77f46fad9ee7bd0f7f4f1cc25ad885b971c7bd6a48c5d5ba512a5dfdaed2705a6bdfc7b4da10d61c8a05283afa43ddfc21bc8551d75f9b3bb40e7fc22e5ba90c373a292a2aaa9fbaa39e3a2a0a0f608fd1240c2b9e8c8c8cdaa8710d949b299d12c7dfb3f961546105165a186d5edfba72f338aa71411f7d6ce3e6f1ce29f5c6c80556822836b01cb180e096d302397a77fae85a4617b83bb52074b979c4de63b4d267250611a61e8552ad87793e61f72e431a6f603e615fc22e85b3d011de404b61959889cc302702a10fa4be96a9985b0abf70c77dd775620ed252b87beac3e654b9ddfbe7a325829e1433fdeaf1d8f99eefd0365a82c0e4563147915bdffb828a3009a97f419ad74ffa583f6db32a8f864c8290248eaaf3be1678bf4f5382673daa46128786f7ce240e7dc1689af612f38d3494f98242a5279386a669e83ba6629600963eca78312d1a4fe6036540106cc5c080e0cb05419005ae3e10044140eabacec5dbed3e370d57d14a9caa537368d5b4ad568d6a967a9bb7b55a177cbad65a0fe9f5023f8a9b46787e279b5ccffa38e95c652078669bc37ade77bf567d109cb817fc9597a3c9ed2ccb86354e1f2f7c5f5e606aad55d3aa56b53ae2189898971bc35a7d5e4c4c4c4c8e9596c401189df42e47910b76d2a54030d43748e1ec7948dcb62e708025176760c1c5194434f160460749d8572f57d0a44b1632221d84162f8290b1fe0b8542b0414664662663d11a5e0fdc6029e5607f2004e85071bf5f7df7de6f3c8e2e3859525abf277754df1dde29d7e952f111c97e419525e5a33fc792c29b164a0915c1128b5e76c51e2e8b2dc5bafec6d747d625f2bf45fe2c297fd6940bf3810469e1296e802a11056e11c8fc8f25c543c9cd2ca90e9236d893cece4b6fe63b948adae7c891e3b53074b97ebeab046d7e0be96aaffe829e030e5e402e33c5d55e7e0b682c86ff7960f372f2f47cfd0f8178f012d3305b243e56a3ea12c3dc58f47ac22aab0973e39aaef2abc9c0954d3820c11cfc374093f5f0f89e509b4dd8cc36df6e7a4b7cec90fabffbb0f35eecbeefa847b3c4471a241f9de2ec587d08ab17c006e3688e244e68599f61660da8322fc71237d794d00f7b98986fb2363bc2b0f7bf09bb29b0b071e7747323764eb08ec98d9a255fe35f33c577fefd6b9ca40fec6f3eb3b08af598e60520e6a7d9687e87982fa6d9baa909f357bd7f23b076ecd8f106f81e3b441464f0f9d8ffbc8ee84a41e77bdee58a00cff7e83c90775393076686d34ddd889985736780b0000f0b6b8a248e3fcc6cfafdccc2196606338b8505789f30f606086b60e10afb8839a262618e028439a69edc5c73348bc2fed5c9cd51c4c74714ea21c2a4d0f3b18f89423f224c8fe842c13542c3de6d584a92799126a66443329d4c3385bd2794fe0e82f7d61cbdbc7c070b1d77edc1c2c63547d3da996b8e60a16714ba604f4436d404263a40ca62cfe363bea35e4fe8d47760a2d613b6cc9b4d9e29f3f78ca40f4ca4b3ce95662471bce7a7ac471422228b89da4c2774c1be0726ba10019e8f7d0408f03d1ffb1dd84b99d0eb892cf63da290abebe9115d1d1589e3dfd323ba601f135b459c00fe3a5238c3d04cc1c4165158e4ca7c8699ade0cebcfc8276cce47cb67846c7cc003e837806fcdc019ef98e8af4c179ff8ec9776edebf9be23c3eefdf2df19d10debf43f21d01bc7f77247d60e367f0c784f97ff0d9f1f752fe7491d6e1ff3d8fb0489b4d9e9e0f01f6a9c0f33f2f3ff9a5b0f33fa2908bc70bbd9ec87e5eca765e7eae9b8fbd503b91c1248b89ae1d381f7b21d81638acc862afc3236c1c0b3b8e2225d94fd84484efda1321dcf13c428963a190a4410f7044c988783390fd884d767cb7230ce1bb96de7305db1116a0c812069a3c950a09ab7f05ae9f23665b05d7d751bfc0f5070085eb838f53df27ac4f1c56ffa6be00c21a425861619d499caac46145faa7ea2075d4f7ca04ae3f8a1964826b5400c4ca03aeff8198dd46cc16d7aeb107626eecc1d39e07f2fa3de2ffebfb630007ffa2fc46e82004f2df18685289c3f0261cc21d841900af13baeac75ee7774257155dd08982451832219d271243828aac09fd9edf791e15dc5c730480af39f29d0c0b0300e1983362c18168f39238268cab7d7e4580e77bdebf0810e063ef5f0a3bdf230ab9154f643bef5f0a3a1f1385a4942620aa90e93cd0ac19c260983b0877c24e0b198d36ebaae43a6b85d9c67830da8cc3d99bd5d8e0cd72855275f0b459ee98e41a2daa910d73d5016798990b75d61cd5244d1e0c4cf1031cb32c69bc5103997f8dd2e4f1c00c2827888cd020e58accbfe668f2c829359488824a0c6e48c30532ff1aa4c913022ccc4041142d5a445de9b490f1ec8452d6b5b73301118ee0424a4600d1ea84525675b8d9c2ba211ede01101d929b5fddc4cd3635adc39559d89094850d47b89bb832e69249778d8e5553c4ed9f41c1cd39d84e3be382dba3cbc9c989494a424ecce783af077b68f5c1d79863336dc6a26beb9ceeb286b044b1ff0a4bb043d12736a4e01980c05932b1c1046749c58a7caa74da60a178be0f8aa78d8d0391901323b20222712518c61582e76b21902114bb4ae8ef9f435cece1a3fc29c67c04c3b8ed53f4f1f29d1c9d988ff2fbe682d22eddc02a018890fa2e1380489ca5cbbfb194924926f948646f8b12d1a22935a7a4947c2792ef4595467171239b60a1dd022b58a059b842b6522bb59366a25b899ed1f992ea2b134afe648653e5488ab835445ceea7b8050c94600160b9c5164cb3b18c16df489e6c49792c1d21752db22045104c829111b37c9907721ff4472a7e17dec984d2c7980bf5f2f761606062c27c710c7ea12f61ebe52787b06cdda7f763c22c84af7d98b0aa24cce71bec3b3916e81f09b3e5b67efe0b7df9243384652865440bb48e97965c82f412c2c0c084ac971f9d491c0f7d899111937b7f267d247e79f91be6217cdfbfa0eb32617ebf8ff92d524a5f6062e4108e09db49eb7861fd0d59ac59e8488e543dc586367f23021137c9958e906060b8eea1bb9f9113fbd1c2105d9ae93c34a2cf1ce63f23d21913e20c16373fce74867d47da16133540e11e2c998a889c70bf277d4a98af79f6a2f9c4c77e2042e6bb4cd0dec5bdc456137303d17e729ef52221dabb4c70201b56f231d682a0e87487d289001fad0541d12758a526664b31085a1bb6ffc8b7d31b0399b2d6d112678a58bebb67c7f27bce39e79c73ce39a5c491cfcad2b54f5a35aa6d53d69e1d58c2b0fc50f2bce4e4f4264ce5152c1f4b1ea07f51cca0682bd7b2fee9077d2e8f10b07cab0245076a1d2ed6a3db6fed573aa95daa73d4f15836f51481802ad0d63749e966a9bd4824295fd2c76f20c23d9b3c2f876dbfbdf04bfaacf0f6364adcd5b366db03396bfbd5f6ad2337e7ccea17e498f36eefe65e12677bd70e5773f17073cfb20b6f9fa554fdcd5240a2d03ff2017247f5db4b40cacf69cb8db374f25ed2879312c6799ef779dee77deddecb0f05570a53b6fa295b89424464abf744ed0502372cf92871cf1a0eec899e7463b05cd242021cd69995382ee9337ffb4eaae1afa5234b9271d588d580bb87cfaaa89254fdf484fb73431571236e3404ee7725aee44f1c4a7626dc6f3baaa5fce8fbbe9735c0dff7fdd58109fe1edc2106fcbdf7057dfe8417262092795ed7c25df7b4eb6634e06e660577393c81bb577d411df705a92e1786ed81b7233ed8c7f40a2b05d0816b353204ae46d6c0550a0e52683002d1e40a22197d2be75d9a6fe7df2ff094420220f0bcc1073c9fa796d1444ad175c25f7b625ca5a533d2e82c314829d2428a0d4460b7d771e8a4cd7ce9ffe9913f614c5a3145112c7ffc2b79a4cc913a72677b26099309a8c149c224c618c8431a52293544592f8f17f4356a9892020a14073636d287c3f25d3bdc89a5cd2871320858fee7c8f1923929756c0f9330faf2833a9fdd540173f30bf2dea98a523afe7c2075f4081cee441b89d3af0ab930c8c8612bca2b30b5314338c5518392144b6660ea62446e6f5540df77efdae5ea67ed67bdab1924c7a974c2167f5ecc819c0837647d36499181084a0a26fc8a4e8a3929a5f4007336a507a8417476d610cfef3929a5b4e7fc0ea4f4f9a4f43a95949c757777dfb44a3d1f65fb4c77efbbfabc8e568d9b2e8ce0788a2cdc2db258da665b5cadf04afac8954fbfc42d7edf57bb764a254ebbb77cbb5a751d35c10dd6a8437cbd841127049d6bf4b8584a0c4ad6c0fed655584a8961079c034b2930b4b144b734c670cb4721a602dc2f2b604491130e35d8125582a6389060d9148794155836c5b104ffa6e1dcc274c98a28a0e0290e71ec0110e717888888f01010b356520bee7c549f3f2c5d706188c52ed4df24ce9ccf85744e4cb710678b359cedcfb5b871b6138b4e3a0f77b91c58c70a86bca6fd37b1316d5336a60d8bcd89ce26ad4b5d70ad4c354a8552976a94caa403954b40404a452fd2c72afa6ce647dc48d1119ff98c09d8a426aa412daeebc8650297514d94cb04aea319d01935a248e88c26a1463fd8238b64912c1176893db24448d81b72681e1df1c8e1318fe6d193a9b4b4e4e35c5a9a50cc275369423197e6925492f23b20b7b4da8e29293961423a51b2ad55d153d433eb31d253d473a46746839fd98fd10f929fd94f921fa39a195cef756345eaa317f12827c3a19c0c8ff228992457a607efde2963aa48cd1997fae876041da8ef63fdb6d977ef569ea554455fdbea043c714c47a5038555685c4e07dbd7ece64da3e82837ea3156abca71ef514adf7eb92bb54f3f1f34a9c7a0e0eb2b0b267c019aabfad9f76c8fe175523ff54f9411ee42cf72e9286aed10ef31fa87b355ab3d46eb481a630aa91f236c7f98b0fd49d2fdb75269bf127357edb9ef7e663f493455948a0b149eb92679dfe51f25f8c708d79f24dcfc9fd90f12a35a7f983077c6b53f460ce8923cfc49d23aea7707a9493f491afbfc49f233fb49f263e4b566c45e4ed4b48751bd7cb6bffa9ef53caaa59f0ffbde77d282af7f118233f7f737204c1f687257cc12ca5d8559276f39d2bf7aa167cdb81d100f1efd935b157e3f4719501f685a1d5c5f93a19336597584e777b1336c7b96b0c548dbc7809e23ada331eb57abbf5f43abbd676f7bcbd5209f26e6ae3d475a07f7b43bb205b9ca4885e4862a25af428267ad1ff734cc3d487a6698fb8d76f37b8a7a8c70dcf72ce12e2ce3aa7a663eaabc086f6f27cfcb7362aef673905a84b9d7eac3843264408739b1e7c8f6b3937a8eb48e7e20ef29ea39d23fb26786fd55476774d226ffcb114ed830b9a0adae148456475896649a6843570a55a8434356c55b995c6ae924c05311566435ecd090790f33e963ceef292c168ba6bd6f5ad544397dba947b31b7d7de7b0b5bd6ed39d1d484c9747871e5e79ec22d61f5053ba5987492e7d6226c71287a2187eeef0f4c7912a40ff79e63ceb3facda5b7f781a0776f9757c0aa970ae8800a61958a7bc9d9489cfa1fe0fa5225e50a585239859ec0df25951aeae4a4554e3a6b9d5aad4995cea426f8a3e1e176104b7a3f55e3ca6f15b488b013899a9c445a984ea9260a854c98908ffdc20e1257be13612087c10bf4d93da597f8cb3b3969ad9ab66dd6725c93de5a85d4759ef77d5f5077f792debabb59fdacfb051519c1dd0261c96d10cbeeaea6852dad5fa65fa667667aa6bee3daad968ccc8cf705753432343434ad18181a9a974b4343c3a2597d343434ad5abaa16b4cabe851f5a9d6ae7508fddbaadc77773767fb35fa1bf02e18888b56f448d0b27b57ac7f9a46bffa2f5c2971f3060501249cb0bdcd54f934a2ab8992473ed28e42e24c6702679f8227d30a6ef628963c0a6bdfbb56777feb4e6741b0fa5dea58fbab246e9e2d1d55d81dfdee7dd0efc421ac0aed7343b8436981266dc772465763a5a629d570a9897299a07f5a7bcd8c6ddb680d174bb3a66926681d2360da5c479aeb680ea1d9fe6931ecf3d0f0b226f55fa5125d266caf7a1fdbab44d93ab2c52afa2acb59516b1db3ffe994ee70743f436b7fd57d278232b8b576b5ab2478d5a39ed735f6669067a4ddbc6c9cc7de1eabaf955559210d2f6be26ddbf67d9fb51dd7bd8a136992d6a139614dabce24795ce3b0145fb0cca1cd6d73296b3dcff37eeec0026541471fcba752a461dcecfeb8bebfa669fddcfbe8e7ea6687301de255874ee98e86b669dd6fe10dce1bcdd9229facd534ed7df86ba2c6fdb069f5becc5fb5aefbdb691ce7cf7157e344326ea678dbb696efac7e7b6a552a158bc57a1ffe2c11ea398e7bfb792ce0fe389b43819848e4a67a95083edd0c62cac2b436a367a8b46d7585450b15a201000000006314002020140c8884229148242293a54df614800c8096407456980a644912a42888318610830c210401008c01404343430400aee422c25c1b409928e20eb26c467c0e4ca6384123f21e09cd806d82881b4866fd25a7fed23b9acb61b290098e018edfb5bb9e21cd89d7ac1df6bd3347ae61c535983411fec740e701ce8e3fb0cfa34e2b99204ac9a302c38dd8a259c5e964b56bdfb10125041e50fabeea92cb5638f112d6e3873caeaba44b0e20b41cd7ef3330bfc28c4fa9cd75cf28fc109b8af91b5cb5907c933d9978380b3b4887e7d2728d18e87772fb6530beab6a59d51a72f8d93591281cb80ce7fc0a04dacf3a727aafc3f0399edb85b204f5c549a310d11a1c9b5dd6e7c60e4d358cad0d4a5f5a3cd33fda48c25def7975aeecebaf42ab3e8d50893749ea7ffe0b6cc64e05019fadf336e93d7cbbcee33491f23c0c47ed758366db341aac0d641b4fb8ba15db828c9412bbda9a1cf476b9ce011151c04ba06f966686a4a6ebe61f2b2940bba816e0b097b35df63cd01b5643b928bf454e46a412eeb093caef3b0b66afcc3c5643cea24a06056b9fcdfa2e200206261a8c55cef1fd4a8083e73ecb08876a1b0e590d302d5a8055cca152aa29dbcea115a317475ebd858c22c0f8e0101d20063efd3b15bf4189c1d696647d9dc16b69e31ee078410370651cdfd79bd7eaba7f00e486eb46568d16c967f040c54f215c588c8b9141876e9b2161733610158167465636dffc128422d80b4d1ad0baf3e46974ab82c18954d0b278e48754ad93f5606e8c3df45fbf7e732995d52053e372620a9fb041067f5b490c2905ed1766eaccc06f07868c18663c104ef83dd33a60e59aa4673b1d18a572c508d0aa2fb983a8db685abb247cbedcac8c08d53bd2187d30fef67432bd233578fc9645ff8651428ac1ef08711adec4267c74c76b42c9a28e40bb44c4ca21145826192e130cbacd09015225b02f4dff4fa4def57f6a3ae14a1498beaf29cd5c58ba9ddda438c7e0a8b18b6e23f43bf8be5fac35a57db64802cdf2cc494353b67b446a2d2af8b9dead45b252671aa86feccff95a8d56a6fd35b1915c9163a8c9851cb712e8b01bff87e93019fe2bcbb3aa243c6195e46bbe92dc8208896d3229ef1bc1a7369c056c73b272cc95544a8d001ccc0ff817a96916e667ebb3b1f5cbdd8e06a90b81c6a022225a07e826f3425aadbd8a36436f78e96077010642e9cf226d2db07f5a48d42c895d4669c2c494603b60f6115fd290434849859b3d1056181cb7778d112c23fc04aef0e956f05ed8f565773d2294992e504c1bc53209c0d928843211838d22a03a85041b11196ed8675977bfd12d56a5e538d96882458d6a4bae466d354830b3b634e47dce4a20d15c55154b21ea646ff767a085cdff7cf92086f4c8e943fe67d4974b10ba6c28d49a3fc88d11aa48dd3ac3654ef6a51b5834629eb151865858997f3074d67b7795c2b78f7fcba31abaf0893225bad87539905d63908c9d79f3520ca655b4cd85a4715ac94542c407c3315295104458f2ba05c4f8d4d08e4429def6b97f83ef2844abf2a67d29744dbce9f04dcd950e150ebfeb325ddb6606dcc98f16203f30687c5fa05936aab142fedd9e42dffcf696505a4a8c76e24652903024fc2ce065ba9d7560f0984a920434378dd8d28e783bf809d85ddf2633d67d914eca9218ed7d2b580f3b714536074b1481e0743c42bfd2dc6741380e01d697c2b5415bf2578114c3bbe1d544b0a7d0911cad4ccf1ab60f2d3892632851816d678f036f7e57967a52b43c4934ded092c80ef12fe14513f0458894230aca858b3c194b35f23fa1ba520523f0a49d6816553c27ccd25537c2586d8cb8eaeb1cd68320f5db5528fd1b055d11e892134d331ca5c985967ad7cbc70b5b5567516d119206b66638cd70be91a4875b7af422ae1add03662c3d9d6c849ece67f94a56b8300a3d882df4f45899ea7566a67a6216a74df40ec019040830582e17cd7275a5668c2871e0936baff0d52fa4e8e69f58d9a75deea2116157237ddf1d7365d682a056db73cd62550d54290b809d1525597a9fb037fbfd4cd1b80f1956a692acd31f89d0ec09e158ca6aa665ecf4c968b47e85221a705932383c4a37869b088b4fea63ae5ad8deb1097823e019b55b9d4daa4beb1e6514c12575db7c674fb4dd2afe1a472dc3c002fa6c2540c0eb92b8d91cf00bfc5869260cadc32373791e8902814afc644cd34ed76df5f8b1b644fee5e142e4d6bfbc0fe5f265a52f3aaf0b7c5fb0dc41775bd0e958503c2f151743dc6f82c4fdc409e6ed5fe69d519c434461d0bf58010665ca1f9dd567c9819cfba2b90e40932dec918212672edbd42d1112db18c64021298cd19a7c92f55a569b3b32478087576e2b630f48311f526cb00b5a91cfa94e7546672a84806c030c3da0e07d1d82dc5c9861ea6f9b1c59caaab286728b20a831034988d6702d03c6f17c8d2870fc0ad1df150dc470232a558bdc887a744a94919be00153ef2d02f02834a7446f198e42e201e921bbb00252fedbe01347ef0b2cb68248b713642484827323a85fe07739d929ecc90094de9b45de055d651e4f97c4caa2e2468dd42da3a803a24e4ff3573aa4f050f6043f551d4265647bd0d8b1e9481375274c1464a1ea1d3fe4b13ec3a574fe9df3b53fb48980cc2ebcc06956fed453d3fb16d743fd4da5082e1afaeb3e817422912ed3bba69834bc1539217d583b874ff4c8d1eff11133568ebddbadc7ad813a9ae5978064bcdf79f4ce3a971666696d907754148d3fd07c6dad2fb831f2f8ce83ae009b00ffe8763fbf180823d755784853e96450dfaa90518b1b6fff2053c4d3e987786e25cfc962a941ecaca1e8ca51e65ee51037cf8b31e3c4514581a3f2065b3d174aa4d9952551d83aa06c220adbbca35ae8039840bfb0044ab0ba205e1f4c15b107343242f34adb20bb7662a1aef18fd68975e9e62310082c51c093c34465412a7f73ead062e09b90f3a6e08a0e8e980cea89a662ab1571400caf84b803b1028eaf2ce6eae6fcac5cfd624cec951b634f8d3d997a2eabefddcd302c7e3995f76fee067faf772534f42f199161e940aadf538cecb8eddfa562feb9d7fcc3ad3b0848943c2414bb7896d9c44d6828c1e07131f229093924dc94785a1e6a6ad4950642c23dd6510e9751ea8703dad3b5a9c9f84b7cf50093acf6cced5a7ae14ecb4d61f2df8ff48003f171d62eddbb3f8dc27de10f5a13388f23ff4880f7b55ecf0ea045b79be4c886a9e070afbc84b2bbcc63d8b821079578561ad2180ada681d20603b1caa2bfc11d4bd68e05b40b363fcb86e5ab7913fcd82d94952c7d6a6892d806ea8ad1bfa2059b55f26521635fa55eeb034a9e2e915c4e64e9f07826570d51d6aebc25f2377ea937a705042fe0565018f7e98624fa6b2c71e958cd3f587a2b74b64056288f8492a2426cd04e093ca272cb7743b7760b71cc17ecb1b7092bdb604278725e47cf74776b05928854b1615cd5586c668acc1aa4bc4b50e3608c6e73768f81f7d9571a9135c18646c2ffc514cc139bbb90f72d73aeae6ef34c252bcca1b1cff21ac1866e7daf216636f489eb34150c73579b6270a8dfdbf5abba30dd237a85bd71aa448d7a0acf0e7d7d398d14d5314f169c6e5062ceb6987180f30883590d8c9741ec84eea12fa4ff6640d791d999a948d6ef5beec0a82415d8689c55e0933f5004c327ab367527dda88912b607c5a15eff1a7bd4b854ecce72f51db5452de780e4b978344dc2b381c44ff774a80454710d161431e74c3d6d7702e850e167c0debb2e45bf9f7fb7d163fbd895dc86771af436641f81b981bfabf82c5d960736d798b9c7983f6e8d910d86ded5d11aa409f503313cb0db36ef6f32925aa9171c5740b9804b53d9eff0ce06571de0c3f4b5b8fdc8c88688daf418731bbf6335183e399d655f4217c994669ad17e52a76f2c586492c12e51baa4b3b3fe6bc4e90963305e3c9a989db7762d0fc0fa47f51e85ee0f752b1e2cc3970b5477aea6e236661567a1dd698c456b4bd78cac06f6fe2b6f32cf2eb1ffa02f420094950fabbc3b4a69383f49fe2172d5287d4031f99a9e38c805c40ee340ae710be2a85634dd7683dbe9c15d82204e46ecf5d9d490c6d1e182ca6377ed318b693798ac8d81d7a1d3bb8a83980e658f059776dc90aee5b725cc80668fda78c249db8a8c0841b3bf12005f9dfa3598bd9dc81ce940459e25187078bdf572154986990022df610ef65daa4c63b967c0f43e0ceaf00d2df3631215830e39a020cea26936834524a697d39a942d8948fd8940cd9b4403d6d7e7c736dd50e4ea9bf357d2e849cfbb77ed13c956aed8ba06a4d32e8ce4e03a14443d0010cf8fb1ed113b29da6bd1f6b5e533692db9d789085ed0f148305232a9831d89899b16fa2af2046f8b03ca4547aff8ebbd528083941383c979986cbadae1776afcf08a15ac6042845f5606dbbb695dbfca71ab2707c0ed69372c87cb3e41a94a1c90dfc8675bbc544c4df9ff119a6499d0b9904f4f42fa8ab957b855d4594cd4e5d0a6ad61bcae75da6926238e1b8ec604b7a7cd2d180830bd0cb19ad4b1512cecb9aad4c572f1353b22cbdd14947be4a5c33a0a8ca9858eab510520fc0dc34d12438bc542bf1acacd5ea413832a1940d3a03a8e6bfecec3c509d5d99caab6f51b4ae2d274bc1371ac6de195dfb49c82a44088f01ef443c060b270f5090c59b1f4010c7c002b89b10818b1a06a6842824797aa02db251def55a77b253fb3e4726d80726ed7f7c731dfd28de177b51a2da2ad053c6bac834b5a0d0a77faf3ace420908064b81473e4dcb245d9ce5cdff85528101d5507c00634b9e16c9bc75378c34e87e4adf8645d93f469a6a23894c6d733b4217db0e9df422e12275acf9ee458f468244af767a94eafad59aba631e4cac2b075c7571ed58d456c4489ec37a9890ae283eb948e1a3b89d5862be3f4e8c862aa99cddef698b82c33c15417ae0a255a1ceb96330b392799802d8a46e7c8b261ee042e3ad724e164788d76040acd0603da03294e2508071c3e530fcb8b58da6753788aec434c12d3419ad3ff8f8c0e170968b1ba7138b5cc1545845839b332e50871575ce10bf160e0f41fdbbc0384eb43928e557d38707c0c13d6b7a6c099905a8acfc2b0e89b642e805554a922460cfba5f068ca9e023d75fd5a85c3388ae01c747417386102a2e7af995c6f57076f9a5f9bb44b4c6cb3e151bd707c867ad32a9fa8402496625b0ed9228d4bd25c12cd1b7b1791139b069858b4af5d9cdd123f08f104372830946c62d6c5a005e66a71c8ca03f4eec93b5490d9a4a1c182a4216024b3b6c727e3ed8dc95811074b93ecfd9b974ccdcf468057b21fd6408aeaba20377614c9b51db9e9f8cc89e9d0f436b332ae5f26db18d9cf42f5159ff5945416a5e2417958d6163b5271a96f80ef40236be2ab7db8e437a2d2ac96ab5ac70bf393edc568d822b927b42486289edc42d159d5fca889949060c3d7efa6e0c400dad4466a2741bd18d90ad59a96f062dc3e79c0a39dfe53ad5d984bb41aabba11bac60942c21f34519942f3398ce1e7aa20283ac9858c0521b0fd663d13819fa3375f57187899b0167b0689ffe8a5c361a55344e0f2e1bc05c3bb22d6af9b8eba2981502fe6699debb8da6cccc85e825ec7402ecd86df099debaaff7fa142046869cf2d1152dd1efdac35e1b001a0518bb88567e1ca99d428e288a57e0b5a6b841fafff2ad2c108fa2fc2523dd871aa26c94c98e16524120fca53badf3e8b00e968a4cb587200bf61283ffadcfa5ff56ee806088458029716b83942e042aad8227ddd662b456cb15b00cf1cbda8ef12a5eb17cc7fa6f9246c4ba2a04bf2fc249c179b025898d31b98011443ecaa253e1cf1a7d0e0d55ff67e3d1ae2227235c541fdc5fb31a46df1b8c46b521cbb95f6f5d0ba830a81b18ab2610a8ee82499512540f17a40b22386f581cbe0bf23e611c72c78aad9f3abf7d85c019d4bb62c868bf2806a99ba86ea292ecfd3c6cfde936a26f9fb950f90f5288764957696109423796ce9963d9ab4e19802bb65d48cdd56152e5f643f380c4894aff50895998446461dd5301e1d7f5e6f58bb334401878284220a76f03daa3171ca1ddf8db8290cbf05ba75b3b3041283382c86471e6c5182c0dc7b9465cce2e561e91999a7c51b72c5304ed27f8a1640d0d5c8d9d9ed983bd7790559c1e42db2b2619e78b9d76a3de1e13296d5de8519f53518902b672424412815e61fd93b6ca60bd698c20016c22df33fdf9c31c3c52e5a662206e13056b9e3a4183fd5d4976946aa3a3cb6657ab094217ea73550b60d192d47ed7cd074fc21b6bd422e3abcfc3962dcc5d3d646dada5dd159813f73574754881af605dbe640ae465338528e8666020eddd7bf68ff618ae46df250c4f3e95614a7b031b61ce2a08821c461a786cdceb411bbc8d04a8f07ec238175fbac1eaa1afd6fabb9a3f1002f44aaf1b124da9732abc350a639f4b99388f98f44e5a2696c7040cf5b7d506c19016c77c52c97c7a3c20fbc95b37f7336ceeb3674255157c051b3b2d8914ec9f6d149f2f6fe733b2b3eff5bbb7ae9d546f4719689d2f878a812a465c02f0141735506285c2157f1be28365e64e16bb71548a903e6da6529df38d3ad94ef406a251b8493df64327cd325aa5726ea516347ec64fb68f216393c283f37c87150fb657197202e92137395a4b09e8cbda36b43bcc692b979879d2e3b8e42c96844299792da3ab1fcfc37bde9c39f6dc171f4a33e65a1983f428c670535d15f77ac26f7fbfe829330826ed5bbcda628a4c19dd179d128e144e91e1bf86748723666f33d06a59ed409f2440f29ed62394d3bd0826cf724f3f411a8e0843387904aac233643eb07e2fcbc5374f7fa3f242a69d1b861e4c4eeef8d3bc11ceb00d62eceb32a20aae06662fc05a56d85926e842b2b0e289b03661725bf5325679685df8e452780458fa1939b48ab338a43fed970976b0366ecdd566c6b7dff6ebbc0209b8e6a8026ade51a46604a35556b0242887b5adec84049ff69675593c3b7a9f9ea57f4543bc50dce5f8eecdc7f8ca263b4f513193111cb95d4eda3e43e63c63a63e018d9dde38d1e0b839aec759e98b6fd0aa665ca5b4e9b31314f3a86f5a4939d6bd237f7c71fc4df9187e7ea9136f81d6349f7e8811ecf9364b1cc32d6d1dce58d580dcffed40912f6e77f6d38edf1966062515fdbc90e90e0d589cae75202c7f71df37eda04a1ebdfa75db33b06730d5f2d15ac19082d50745f0af0e379fad9f45e50de691fe3c97ddf2921897fcecdafdafe0f28376e8e7ac0898abb3b4025896b504a87e758fbba6e94e088e825aeb08569cc191b3c76ff25168f9ce5064c4c7d4b4262a2c25a6dc483a910316781e43d102a9b46c89c3e45570f11fe32cb44bfdccee25e729092819a5db246a6983e2693391236edc243fa36c41f09ac49f17e54779e5e6c59fba3ca25fbaf76deef123278e164c2a2e512181de16ec1e13df15cad237c8050bb325080019f6bf9503fef2c349447b0a219740b9dd0dfd59ec9cc703ebe1766c30e7c5b9c5f698684202a4f810c175c8a82a8315e4b943032488f1c271d4e38b991b26593e4213819ba9b6a8a94fd910191dadbc9909dd208840a8f86748dbc38525a045b34feb36119da90c53867c842a125a75315f7f72cf03caef6a8403a3ac80f7b13435028280989b1b27bcad96a69fc0ac1ad7144e6c933636ee03cd3c2406e18084ba14f35100b8b93f764ced4421dd39b19e8537adb5b92b4bcdc12ec2510a0175414b949dd184ecf8f5a51bea43e01ad83642eca4450700fa2ae5439389dd2087a879e6437e211429cb8d793ba0c7a8343f66271b962ddc50df45a5f4abafb0a4e422bcf343dab330db7cc8956b3339c573108a3dc22084931bd78f30c499bfb4cb83a08b634831b82bf1c289f0a6353516839e5699a11785dcd86432ad2eb5583b1844c1394ae606f037f63962b6fa4fc111bfc2fcc1a4addf1b160143758a482826b368f0a170676b5d6af0e99e9abdee8127156fc8ae5127d4635ce9aad329a073ad3415dd3ad5cfbe3f78ba0fc466a8e65e1e0ced4191f5efe946bdd44690803352a126fe0517bf702fc8fb27be6929ba301b743df3a248dce1ba2a7ecb0e3f28dac4790a9930a856b5088117658161be4be3faf0c3717e5364ab5e985c65360c50b3e0e5faea08977cb9e0ef5edaa9e0e6a66395fed0aa99c1c1282ec66695e26edc6b1ba3e5541c3fe8be6564bd99a2194d8294b9e47c1c8de121e466b93eb01f7e95bed99b92ed747ffb574914d383ac2dd9fdb35baa30c80dfcb109b841855a592e904926d42505f2b32d0bcb2b197ef12be832202f3a252e4ba7a00062c876b0e8a04d248d392c7519cab561646b742a2b4d82a441c59471facef7b7c9646baef74c462645f3f3b9a2a75c0f4c337205baaa817411190715325bc2d487c70721d1cca2ae134521bd37aa4d798bba709594a653b0e520907838ce9b1e92dcf5f46a965fc34d14816fc2b030f2107c41014928710974e5626d9f6750a1e3ca7e187c99018424f2085f012bcf7cc8407146af5b71c924709513a1a39f5db4c52d034386f5b88ebeec20660f507275003791a873f0bc1930c9969a71fec72c5126d315220e185cb8c0a98d4f122f3098b863b3dea7c210735e182ca33c3b904320a831521f490bd039520ba8af33cd7723b1fc87eac7f388f9db5765d446d479611e9ca6fb8071215708a1045cd8da5aa543084f2d151b0fa174aa9227005f32028306a813fce3642c56a29c53cd81a14acd56bfb72a744e471784c7cf6feb345f98c4d7d4c328ddab567f041d92a739be86a59a10c308777d229b4761224579f0f9f07fd64ec6cdef699e7454adcf10c6c75e2073b49404ba2b599b40f45460adc241144876d5009a7a49617acd5e7537852622ce2d245bdfa6a4243f4a69722852c764ea56204b2484c0c0b74dc2eaeac48c848b2271d90ddacbfb335379fbd9cbebe8cde3ecc51f46249a1b4a8f28bb73535d9aed296a4d3f7a56d712f9566d8eef059b3116e2f9a7ff71c81890a776f38769b5241103a93f1738d0b036516bd2d8a9c23b702e4c8765400a516ee70b01b1db4c04eba50ab336d5abef645a6e1a6fb1c402ef812358c3b2ab86c4981b140046337f47b12c51438da2292b7e8e80a22db7528eb425191c9e3f47c1b245d51334962d66a7c1a3d49c9afa955b2f983f00c3f8abb975d8981b85473c7b70ea2cc9bf639176d5a8faa700226f5039a806ba157a71c6a21cd1af0d2fd40c4f03c3a3404f98b1d66b1f7f68dcedae8912ef4961e13a0a596484fc30331e2b48c77d22c5fe401f30c4316d412f6dfed24d31ab1210c6bf62ddbfdafa516c17b51cc8fa9f6949fc53f7a87ada6432210334038243b8a43d5128ef6cf12c84fcf483cd2497ccd6da4551eff76c3e3a5b2980286cf94523d43cc294adce323eaac5b73819125449fda5a315c002b0f528a4f714f0daa2d217d6024654ebde0c37bbeee862e24220cd43e3040fe850614c216a43db89a13daa22bc2daea7e4abfd96568dafdf958568e2bb636ab03157debb5a2ba74820a8ead9736c2b2edcda111922103505063e746963aff20235dc77d513b4422ad97bb8a373cb93dc3b8ad720fb70897bff6a518cc3a05bedbcedd82db38f7fb61e7636f6aa549f4ec7bea03a6ff8e42c862af9cdd34246a9e46bc2ae4cb75f1c6845c4b014358927bafe774add24f5e307b85dc649ddb78d37804abd3f39463bd6b66717e44050fa24cb7d2794deeef228ada03cf70d3c6bfc0d2175550ee119c021fc1d70c79a5fcd675cc19d1a2a9e509809c884099c780a0c354c13b581816727c9f45f2e9f4613f33c62f2e1dd3971f7e30e7cec9a730afed221dfbf73d4b6b02bf6bf40150cb5730ed31541bba4a8bc782c3f567ce0d094882eb2d6b1f7cc62bc71e47b70751e25c01dcb8ab49a0616967bc702b18e31c3bdfea34a9d3a3085b8dfd7bff0f141d7f1bf0160fd6248d94168c7aa45faab5d9108af951b764daab5cfed09719b05e8559dc2b0bd2f915c94fd8de1f9be9daffebd1df301dbb1c67601ed83e2df9b15d33549dd4907d7c86187735b3d20823e787558e14e66f5fd4da8c327155bc181c57227c6a60b3d2169994ce20925e003ee08e2afcdf41285ea8c75a12973093f65d4a9cc62027917bde4b4deb5bcb1363fe016251a4730039ee42302a5416bf3e532d3ac3e3d39bea68a513feabe57f3d61741a45ae02437941b33331ff400646acdf7cc1584fe709a3eaec3761af5d8b9772384f7a5b4f1b24f25b5f60d8a7677f0650a28aaf15ab90387f12e1e12e5c7b44fa5c97bab3224a5320e2c9f2f57f45b3b5527c9710f742e2eb62abc9beac2623227052ee8d459adfd83a6dd2d7c19405359ad6aef4be51335229d7c49b1ad27b5ae751a105451ed0d06f0e74ffe6459907bd29df06a433b86d2f235d4b36c1dbc2ae3f8b8adc1b91e4dba5038106397575f086093f8a06d50ab3b17c563f791e9d8ca79bb3415b5a9ec4cd082ef87735dc5a9681ac20055bb03e6347a1e33ff0116872a83da120114ce9851eff87b038ef558e1bc35cede5c7ae5c48d00bf5a66dece425a0c8229d3296dc57b7adccdcf8672b936a02c07a8e5fdc7ba1e864bb9aebf215cf825a1b5864c8688f0461eb4b412a192c475209ef984f2a9112db1457501d6d78739db2d59464eed9d1c1752963d7d46da2047d243bd7da79906a1d7c9178e6320eecfb4909940ad4f25c54d398b69f004e018dfb95a8a57d34245d9312990da20ba377e4631840280de6e8514c23f5b12d2e0b721a7e6750cd11da8f4a4a1654aa27f7ad5538fdc4d2198d63a8552cd7355e4ba8076fbf4e70d0b865ef3bf86f3c598fa2544dd51a2e390b676dee7eb106cde76634c3e6429411c60ae414c8df480fad4d951808e6a8415119187f4d551a9230c9ef9bf8be08199c6c8d143e0bdeebfe81199966607e7ea44e15632b06857188dfce1b5faa4abaac8962d54db08bca769d49b0b016a9036595ea2127dcfb24abf8b5a2dcdfbd42780a9aed3b8b24dc850427079d493aa4a18a21a7b177c58b41e1592dea920c1f7d94ef5e596ad5229f9f8ef63baae55b8b309d58d00eebc9e33819b990d9cc66a7a05cbb93df6b584952db14489b28300ee6306c633b78313ba23feb4d5efff64f61090ffbea52c957d132bc21b35d0c06b290c7478b3359f5eb30687d2b9f4942bc4c029876ee70e418b5ee639bc2aa1439b28adcc0429b794e851c62a7d7a89deb2dec1d18b07b245544c6f4ef7da660a880120b71c2efcdddf48381b793b2a4cfd757efb0d2505de7812420fed223180aac2eb3a11dbb8b77329f392a78aefa4e462b4207ab417d76d19fa52b8969a2641105139371cc99cbb095776237fae3b5a5bd45ff4e8733dbb350a5ce12d09cce8ce5866e7021e40a1f19ac2c62a18265ab52a4018ad825f0850aa5b419ce3048b1c017fe22b0409557c2908692b49819a56ed92947f0c714a000ed6ce05ed055a54170649f4e89cb8db4f7d40a8be6c9805bc5bc43c0c53462ad3d16ecbba7f8b71334e667eb37b5fc3e425ef157e80d0bffe5adcd0f9a40304e703a1c5322d1b26f78a6c973322d93fdd9f15f4569680ebe64b350ef44065ebf5a5bee72e695f4d666c9409a9f76653fada14c18213b94b43d5126b47d8597b3071f1fb81cadad7339f50556fab0e5e96043417adea35e2c36df8ded1ccde8596ef0c3f2841aa0eee481da7e4f506bd1338790b8bb6b7c8cb63c461804ad72ceea2e753670e6172e96990c8def287183e7ede12f904133ce74389e9cceb8032b31add1c0b1b0c81523d3a4103ba9c551f67877597ea9c72680383a158fe3f46dfbf53c468f1d2ab480e74b685d1a75f725a01c71bdb7b85d5e0935979e5f0aaf37d46aed0d6c60ca92275c7588f2e5f5d85b5c44e291417945fce417d641ab04adb30afb3186d3e39372e56caf2dac77443ec2eee7854ee226ade8c564c9f38b5371d035f4772ed7b6483adabb008afa78cb7b14a27857e2fb2f7deba0c45d36f9063c2ccc83eeb7eb2d3fd9ea678993142b1bae166b457179d99f9526744cd663746aa949975200ff8550c825b3be630c91dcc7aba7b7bc23ddedbe6ba2d8ced831e2f697377e315bd7a1cb20d484a33ae78016196570f51c728e73e5b958d76b2ce32bb1bc6a42c406f71f777ecb03212de2c6fe107f5ab56ec65e1c067331292f29a6bd37013ab47b9c1e08a68bdca526a2f6aa91a88ab4bbed003675564ceb2645bf7122885006760a60ad29efae8b15df6afaff56cc289996b2bcb8916c4874594215b9ff6363332ce1aa7a41dbb08403893d472644d095a0b8c07042b1a985b265a6709727432c9aee8646052d896119356666ae01de1a3fdbfb56dd31bb761b3a496503313fa5349ef7690feb4706a374a706a200aab6aa9b3250b482799f4f61cb30b7a93f969c5581ede95a75fb7c03bdea398e8a1d3d7f158d46fa82a6261188c5ef45ffc86c9aa92699423d72f037168632f21984cd2cabd2cc3b7d73513653e672ec6bfa756a4369db82ae083a1cb0be5338f0d77ef1f9a2fba5b6c5d2daf2c70dd686ab97bb9692c22071944ef011a9c1809869dc625d463d3afcce057a9d81ac53904549a9a0f81e2083b59c79767ec759aa1806729cab141e0f956c90aa31af875e608502ac8d30e1f0a3a2ff5c1ee736e9016557fa52b2de80774c41a6806c33ed42e2206712fc1ab5c5cfc1ec15ece64796cdec08d0a4930ba79f3884b195588a3f6fe5fe9f3832a1b7af239389136f9a4f13b7e4a39ae151e806ecb88d0789a56087b1b57918673c0042867d8e165c14e771525022744272dabbb0b690a54cf75a5866b1b99aff5b9171cee724000267e8fd5641baca9b165be0e0ec89be773148de447e396c457926fecc0d268097017c6309d21fb2d9ba4c51a223871e051d67b5027efbfc1b6072cc49b2aff51bf45ee43790c13d4b3200e4b4c63e567ab068a97f8c2e104e60aad32cc26765e6736c1bcc5dbfa4c7b7d06dd3df1f0b2273a17d1c2ed4efe319af4c1c75b3e9db9fa091f16916adee9dc904b7d098442f04f6903be6f57c0ff02b64f2dc64fde3847867f67b926a49e216b0b8a7f95dd06889afeceafb764ec59893afafebfd29a729bb316342132edda6b82acc900931afd7ca5961a71d8f257fd2146cd008be2cbe058f0eb8c0ed7412d5717129d5ab894f36ce8d88f5ad98d88f38801776ece2f5409b6e6a60080714d758246adac7616fa07442e474759af259b90e6130c8d74173f51b38b7acf4d7304dd4a73b5ceb962ba1c0eeefafd8004d16944b764ebed35a661736bfcf126391696ded0ddc1cbaceee7341b3ac93a92ca0e0389a9133383eba74b48ff92f661efa6009e1ad7f577d85a364ebe7dafb4ace97eb81f40a0b550fae8e7d8bf2f82db0f5718ecaf267d2fdfae7bff409de286136e5984b6ed9bddf1dd90c82bc51b60fc677c4452406cd17c22136c6bbfb988b124f59a8ed28b2afea11fb1019d989a803ba6933ae28b46291e31ed4497c26e75446c536ad57e8010b931056c3db399fe1629bfa70ef5ce9798e41a096dd92266bc322c03024a8e7fe08730ea24731447a8bd6fdaba5860534e1a5a653db0fb267cf727ec22727489c6f0f928cbc293d9eba86f9494a0e75c3513fa3417a2b1e73cc517b4c8795660b849d2affe8c5dd6643bee971f460e06597392ee3d7a3f55cfc0f0bb47549026ff7e7d2d71277f1c37febcc8a970f6bf97e575c59187fa440131fa061922660248c870adfdb904cac8087fc31555c23e0e2b28cb5dda57f664d9bcee46ae9cdbaf4f6720dd332a973e3dc4b4bc24ec00a2dd2a104112f8cdab0c4751bf6db2d04074f3bc172a45bc672769d6734814beb915069308133d3d54e197c0c3beb90d63eecd7f07de539d63c038a12c2fda6d190fe1b366b35c755584ceb151943debdacad43cfb8b7aede5fbd6df0944cc3de024459dc12ab7d8f725d9652d64155ea037b32c516a1150a92ba052c780cae29d00b38a3f14ca4a9d5fe5dc13c8310b7ac7b5d43d6e5922eae8545e663157aba0a7a3967965c4620207d9ec45ec5866bf85c4d5b327692435dd744519b1249d3e6cf478705f009edd59b0725110ff521c35c0a274059e64b3183fe2dbf596a9e08c92404852448920e351a0772a0f9d6ba74d9cf80dd0b3042f2bdb267463afb99b28e48695ef3f6519d63559950b9784cd299c671252ab59af537158baff82d7bd37498d82818d71e20d95e851dc4f639460c85160ac8d2adae230f4dccc3d1ee79e197d0a56cd2216d1b7bb8f0869e02bd2ee6770ef5d4653227795f6291421174e83ee423635ba6f80f4da4cd8f940580688807cfc7c08199ec62af11d52e0743b2bb07aafa493b36c7ce06efc63812abf34ceb58cca7a356fd977895a3701ac29e3456a970b47c133f147d3d24cfbf44082563aa93bb200d61e1d64baa996a5d44f0699a4771962028e1f48ac572ceb8728184eb501e26295c1602e05509b28583913a8595361a165f83d6c30e3f24ea5bd533ac28b9aeeb49443291409b772dfdc9489ae4ebb91be91d7775c2531eda23dd1a2b16c0a3768f692ea8ce0eeca52381266fb0611124e5f995cc1cdd3f6d28c627d4db13e7d4dafdb8cae1c72c18427e317e17fe5f9cc82f8cd2c7639c288344d8cddfd44e5558636f806edbf028b0adef454ce98cad30c6137af05be0b26eea1984ee84547aca7cc72ef5ee810d90ed4fb7f20e5fe439f96b4643d2ddd22f4dc2315e2bbeca7c45273f0b2b88977d8f521814b6af96199f1be19d6f24c55730953202de688361c21a1be0281e358fcc696bda63d5bac35404fac77acfb5ac9caf2a5d4dfd8e17ed5649243177792fdb129061c9bc0bb9ffd63f8cdf76d007f482cefa996b42dcfab15ad84d2fe4ab3048a044948eaaa3c23769982df4596016a9414a30379b3a4721a6963167184573d1c63a629137ed4137d81cfe34666f6e8a0430ce1401e5481a5b1c135ef99dd37a739196c45fae34ac4d52b8065a9d2206543db42ddeaec865650bc8706b1eba88685209b8177241691c9861d87d5fd98fe4222a9212379d247bd6963779b0d76fa983a5cdd26a077fd60ac2e930b8a6b651cd7028fa5e543cece6b7673fc2d26b2bab24381489522f9a5d0871b8226c91a6ea944ea13992e41b1ce7194fcd41b60ed84cc73f0b1028c9ccd41cf7a6198a8eda1a8932b6f86436fee8a1b3302cb29625f1d4733ad61b47422f2110e56ba29396309b73f8b8b57303cd740dbe149178ae6fc773d355de3c96f594f027f93608f751b2e6b9d0b9b4926738b93dbfd9ade89bc4752c02227939a8ed400f8d6a5547dc2adeedc65638689da9ec4c7d474237da31da7f4d3d5215af72e68bd44437a96aa3dca961004bc3c5aa73c6b37cea15f9878e4294442db40a33315cae36aabe4033672fe140dc5606212e01830c69f5f9420c7ce2695673e362fa6d0dfff07082bb13c660f8c89b90f9ff5866ca1cac1e05ddbefd3cdb9a45d24660949156a8ccc11296981325f33081e9dc904b891f9615542430b1d4a8ed5c48c8ace2ecb400f7778d3201093fbdf95c4a0b69e68b5355632c599d14c38def030e9da40e300859f391a2b243a6decff44b7d4f4c5f919d539d9aefb8d99e546e5b5de2f8a3890f36574d8370977a7068bd05559001ec588d2454d9e5ae3313813db28ce4dd862e61d48f6c22592b460111b9dc22d1b2065894e216d2b1a4ad7f9b0218dbefd9e92dc1da75644e2f371822c4366604ad21dbde36d00273c6e822667d3718489974a4b612f731fa42d1b65955e936bb709bb518250ce3bc9e1904c3ff28fbe4ec73c6388645c3ccc9021bbc7625356033a63305d99ff977ecaefef92c7fbc3f8ddf9ce41c79aba760c8ac6c80768705730024491c455de47537910ef656a4f42ee0948424b4d4b85777a46beb431bfb50b884e81743fcda2020d5cec1d8386718eaf2fc6e13bf07b3604d8920250e8f007bf5c0d5cbdd60e37647d110747578bd82ea60debf69acc45e19482d1fc3554d4b28b9d038d49ba255f2adb8311f0960d2afda5a51644442b4e40aa1e41b69e6c7dcc5179b0f95826153a6ca9486bd128aad58b0a336568773eaeb86a2bd692ca20e62cd5e038c39f3c94a3c9801288a1a88dd18834250f6d15c9435c1c79e84edffe718de1f35667d6f2a3ae7f8a4b92d8ea5bd6ab04b8050c9f96beec53e651b8a7b93c6488b9cf54a042da39288c16cd509b0a432ea019b5e86f000f254526f8b0b5cfd81baab0557f1d3e9cd23b66a632f6d7469a468b7b706d54e07b6de02dc7ee18e8bd010581db5fe1f704ef8f096e472ad6eb6ded8ca5cfec652469d5b3ceb6a0cb082f8047fe02c4f07130be996a5ae60ff6c26907e953133483d3add1ff4b225db144c1399a04f92c3f6a898e7c7419d635a49b9ed30360d9e28331780c7bce7d4e144c5514cb0c3d585388c49bab4dd60c004e6c356d189f7e4c050128bc1f68ba4dc7c38cdc448fff26dd1a5fde07a2e944895c691d93ad751cb3791ea7f2a765ed4aa0a80a86cc0ad60ac8f991206527ed17744d3455179be059593a08763bc60d897d52601e8749648c5ccf154c9ce391fd0d471d14dada550208a7a13c7b494c1be566e9ecd80e2712b299b8ec4fbf8f3d9051266fed96ce7daa366b8018ed4a4ba912be0a4a836e97c5331eb903875a6c0769430ee39a64e41f86978df19fd6db13d5d2a4b2315c2760daa13af07352597978e644984326de9a1c9cea04b1ee64723de5f04cc04bc64f9e9c8f68ca2cc0ed0f9fb183bb24f3a52bf287b9fd15abce51e10b41a63044a7a96957b5233689fcf7fd81d134f799272b7721acfa8ce57b4124c2ba32fb6fac6b4ed6e8640cb28c7cb983cb0cf914c6439decdd0089e3f2ac97cf3d8b3031cec86ab8fd2ccf2d88a7cee8c0e4439ff04c46784be4150842405f53208cd8566db055e3414c39707ae11d11eaf7937aa40835bc5440d71826f6d6a8901e122b307452c94525d009aa8e34a5a2d6726b39f1383970d20545b3959638a33cd9898677cc55f51e90ab63da394f67420942aac0c90309e28870d286770927707582295f4328a24ebed40758d469cbf79449524862cd6e882ad193330e91f1fc4d3b55893a67deb7038d2617b389d5d01178946ccc02d0303c2428028150837a573ea31bae26d1b4ccc0f493d427f819ee9a27914fc2af7e1327d90bf8f55fb62784123778c7e217abeb49b5d7c9855013476c801277f1b940192910d03acde165dde32d5566d05d23a27c29bc470cacf6a624a3b053d1376541630ca3d26eb83d69e586e52f1c36e3c77288d503ceed7683d3c03426574e7d6fa6ab93176cb4583ef3fb7ee8b78d2ff003dfe8657e66cca04dd07c47732727c2a8d9e86a0e97d17d96b1d500631462391992257f5a338231d8b53d2cb8b60ac28eec36e09e4d118431d6560d4ff682878cbce4136304b90389c70732078f16ea0f2fd0a5b95f565d6316834f5a804a846233f4e050ca770cfb73c7e2804ad15c882440dca6726d567b0560111d47b16e9a55e56274d0d3d83150ca198263c5eec61b6b0b74632f6594faa551ea6da3d4eb11a88d03289dec191b23a24693e8dc5e001813a1fd839eaa00dbad5f63f6da85c911606eed051a21b09c1f5aa01ca12e3498cc9276842a090e1dbc3658be82093d029cf22849edb709734d7db1c3a335d9d31012b732644a4c9e8be9cc761865f870e2c783b0ce64d81f967b5c81aa742f75cefd9aa1d4f49eec1725f31227178d28d7185ff74c7c68d125d908b50844d1f661bd09f01339c01f6c7c4b7b6777cc4b34e0f3c0c131fb1ba7185807aafbef88e5ca30065b937ff51a12cd70d840401cd6f8cab4b4da2894e2f3c565d83b969a7978fe1ffc340774eff05c8234da9fbaa15d74840f0c5b186d6dafca047f579b72c86541a1e5ea8addbfc87270df54c0f846ae655d1f3374a75f03e32d60390bd61b4b5db276f31ce9cfcdffb989943f9e2c50d896ad37e8e65b47d5cd2c1fa2b8ea33a0e53223f97b93ed240601f243b18245ca9a612ed240e778fd746b1bd5f27122954c880106c68501289f13412c21fbdcaec8b67d46be201949d9e7d5ee716d1fc54e63dc32c40e2f980202ba52c458a0658b8a79244ed32d88738bd652e588b88b71b2189481e45f1bd89b0160872706092373208ecd8dbda5863d6dfbcd8a779c592d94618d6d19b6059d0257c6156301a17b658e1db3f9ec11a7b436d4059e1e7bf6ffa0c4edc58fdaab92da6d1ab2534edad60459f8abe3fb40866c327109cd30ed0c4d96c2e4b89a91cff62a1e6d9d7d95d0b41b205c02552a166d90d5a5f398818388fe0d19f0b49f19c5f1080fb22020de7236d1a7175e7f498aab30bd917af5b797f4c3952fe777153c6eccf15bfea8bb3e61956b18d2c8afd529071aa5948322845506dfd53553c8d8919950bdd8eac5a7c3a6bb82404566825b031d78441980c0eef0456c5d3f94a3876bcbc9b3083c7f4f510fbd9cbc1429ae5e8090b24fc688e022c42630873b17c3a05028c6e651bef0250676619d0f4f215e9aa28171a194e41729de1d980b9c5ba441f6828615728955f1a25b5f68a1f835dd58e65a8c7427aa85361b96b39d9e29d1f2f27fe30a820e59f90ab5827215dc4eb43a3f9686ec064cb73917a807bf656bada45812abb657a124a3f2747305a03ea86ef6fea4878885557de88a12139ad50cac4c021953aa55bc2514b000735dcb1745162a8fa94b4c849ba76728b34ce6a2aa72d5fd5195fa2e62613f03df02d2356068751636617dd0fe2118e32052a6313e821d36b79c0b0dc33bd5048a27a1645e6530f6dfe1c8fb74fa4ed2e8288cd50b02aa518b1895c4be43c415d8e226ebb0d3bbd21614d74df1891cd0c803e3c98330fe3f630202081e58279f139fd9c24bde714f84a7804ce3433894eaa3ca9064aa876f853025672c5836a82756556e143dd921508bd012efaf2c2f7d80d5505e830dd535d8eae2f6314fc961d294395035b9e8c07e095d7a208437a53d919079607900f1471be98a0109a4b4299267ba204de47f1aaa9729dd0b59fa1c28118c7c1d73b6ce368624df781d44435eb681e673690a8c0ec88745403e768c801aeb55a2b5f36790ce318548afc4131c03c8aa78d027060018e3fa7e0857db8342ffd1fe4ce84d01a46923d845dec3888cc1e1f1fa0f41548b637ac6575ae2201d2329baa1ea6a12874116a7f3789b91a5d9fbb33e15ad7e8cc38904ffb936442a4dbc4a787202b1fb2a6e1b5dbaafdc8837687f839089c4a00e1c86b97a3f1efa4c84deed87be85473da9e2b6922f1cdca59a6905088eb492aee2b5246fabe8df73078138640e3433b07bed3ed6fefb616a45355009df14d561dcf25c7797e6dd5a214722523428a54cc0924c766458b4f10b2fe9704d1d01ad4892162d4b190edcce66125e964b062306a451fee02dea0b0b3c84a0dd6a96f632bc7c84482cbc3cef598c62bcc0fbe0a497e5344a45627f177ef6e03f74539d8abd2dde11be08296b5ac9217040b20dc2b5c747b789353b695c5feebc25b351e4c7738cca4612bbfa9b94e8c4839d5d445c6cb210e46f7d447e13335667812add207737e42a93d729f0607884910279696f4e0c1a3e8e72943c1a0a62e8239543a9710892d1b6debad168a91406479bd84613ba414a73f43cb8be1c7b381e75f67404ee2a29eecadd95e8bd1373e8c5ec037f74e413ea16afaa197daca028aa2190f959543091cd346dab85aba379a58c7461aa9926fa2ce062909d48ab1185a5fac3e850811acb981cf6902e278ecb0568a8771a7725658a19bf5185adb46ff2c4941e1397c65ea126502ec45e59449e526eca96586f9dbc5c2f998a40e54cda1584d9f9a47c6d3b023a8adb019ee77298df9e86e8d1f8e19b69e5f4cfd0d662deb057662275fdf147b57d7d66658d2fd2102e3eaf3106ecae7c4acaa93f2a09bd6054e7a42c03f95b37d48be90e571f383553125e4c00525dfc130795d02b1a640e02eae025ed952e3a39883f3f3507499856c13e45c5d73d1a4d7390d7b8ae1ee1b82aecafe446f0a71abddca9f188cad6ca24bf1f6c598a38185f21e63e632a11ea2dd5181c76246d75c68788748f2848115d9220452cdf5b78fa873960586d32b1dbd380b89c0a2361dbac06b46dbf8350f19958dad72db492a0157453c2700a34ba5f71359e880ee34a347c2d3919f7802fde0331850fc87a7c40d7970fb013bf931b788531334d5921cd15dc6a15364da84684dcebbf5f77d3b30aaf460a737aaea3c6a03cfc96c23be01105abea4d8b195a00ca5957e93de26d65006bed80071646dc92399c45f107a701cdd63be1b791420054f18ae27079eab21595ee6fbce7d15a322b7823fa1d49a36a3b8e6a0a8402b614091b24bfd49e595b08169a84197d59a1b4a52f5aa2f4f62e07eafbb0ce727db23ed86335c035e1bf402735534d5159f39ee3048a4065bb3c2d9ad72b01db78a52fed5162244ae10e642cbc8dbae10da7dbf47b49c77781941db7a1569b0e8f2f831cda4c35228080d6cfa588760b9a599632ea579992a3a228ef485c96a5e82252ab38f0205bd526c1af1342d73f491db7d79fe1e8b4609ec7fc61820230b175b01893e04b1456d97d6420261e10bf59c60ddc8bc5b52e61480663592c7b35c66c4ff8c0f84e289a301be70e4938d85891393ba12710d823014c911e134ebba88bc42febe7b01c42d1288354e33e60d29d20bdd45b81f6dcfbe0a15dc57a0736fe4f898219ac5f042a30a9be4001863e79e741360f9408e17373b759b37cd2259b0e90ef23680f069a1fc45fc0b83d100a756d241f444aaa2ce751f8139cc7f96713996aa7a4cd091c16bbf09742725bb78ea190c12b188f0d85a4dd1cd8ea91f07a79e4f412ea2729b0b1e2d3b4cf16b0b95899499eba2333e3f20543b546844d58782e0811bcc62ffd31310afd184dc223b698fe37017b8f9695c14ef710710dfcd948d62cf47ee878508af643ec0d111af5c3fc8fe5de6c2c6d62a9cc55b67bb5a728180fc0b4d45380a480074a27879e5531d2b38e1ad3509bb9acae8e21355f93147ae979281a5b940e41e641b27d79d7c63e5c1a88de36dca4bc1316ea1a52c4139efaa8dd2cd93ee1d33bc84b33a72ddd88384eceef5a154cc445221d509bc0f507cea22a77be90818b2f4ed0c437f2c8972fba1dc56b2e9c2371546b2e453cb17e8336c5a0e9ff5f945646b83aeeac41e527209332c884e94f651b1494c101b827dff1c1961ae2429e045e28a3c3c72e44c3ae2732eb2b6ec8270192b5f48b51b12c8561f37dd2ed3437075302a8865c82903f38ef3dfff9e69db5d43707a5402495147bd43e36f1893c3e904c8f8611a3e6909ae71bbee8b8da57104eae2cdde453e97803d54926982abbd664a8018b4b71541a7b47d33257657e262e1adde9632e1ae2bc02cda831d081fd128b72a2c073e5c34778e2a830cc7d515adceab2331bd440ad5b6e6348fcb64e377c4895ecd1a58a28f435e99caf809002e336f5e91f5ea9bebbade3491a9ebea2161ef9873bc2fc9d9171248003dc832f0cb538c28c5d5e45fcb43a4c566b610a1742b0b558e5545fe61e4da34bc49033876c5d1a0678a47204bd1f1c7df98ace9830252ceae23c8754998c2e921aa80f727dff3651b1914adb4826869230662998ea3ec3886e1e27280128c0b752e214e9abca1f801e694f4aa2bfc447421f04ea965715423291f85a114f3d9e6c54e112be13e84e07181c87259ef427215d18932aa0051fc9fe4e393a5d5c3a7129f42ad73e7a922692e2c408f8d07bcd25e43a498a85c43cb26a8f8c682954638365b1e98257fef9a31d76011c7681d296808667f104379a61938c12a5b4147976ddd721578dec961ff6d13135ffe97941e26b3b934b853127aa46c931f6d16520a2bb8a2ec0a2080c7c2598c154a694f727d3d8da49a44daf78b70b46db05e2089d8b93589c2f8edee8605599f0448c6c58731c243c9db33b52cca9448521be3c3cbe0d1ee736db881b390eb6a0e98403e9a1e2fb86b43e6a9cfe957582662beddb9e8dd3b9957776e632199523a58c4a602da3faad1897be8da9ce4cb346a4e08c5e4c7884c947f0f2ef0ae453d1356d9dd1634812223c6aa0ce04d9be5686b0d0c7f95867489a5e2a7f1c46780ea07b92531db73afe93268658a4a4d83adb71b4936c490242c938dddd25d31927ab8031b85d4db02acfe644e1f1407e5ded7a84d419d3aef2ddada878d43edaa86f35e07266655f9f17c9c92c4f34e44060b5a16ad16c57abf238c944c9939b3fc9004274e33b031ebb8b853230720da5ab7206ef1a966fd1fb26bcda339bca3b193fc419c925a9ab417dea124578343db4dcfd62125552b66ee9212150c956913752ce0b8c442b7edc0ec616fe4ebfb0bf7fec41cd5855d466edfc94d5315287e4f947a64ab3ac42e2cb305a872af516fb32c8150815b4ec0c6237d9d43e129412365732dc86f41020bff4b60a5eda911ba91346e47bf96aad9221f54fa7e92ff467f5756a98e6a87e4dc2504414dc51e55899f0e6b4510e747193fd2a259137a9a5a28d8927c1c92c27d8b723d5cd7bb2bac9afc487b1fc5c1f2a82c79c062a5c0b64ef0fcc36a05be9df004b148f12ab9a1ef65a7e133954a1beaad6c5371ebbf14e5bb6e7f3ffcc783ea1b01d22d3acfcaedd70edef3314794943446a9f0729112306021d01e88aa8c67ce008145f9c9ce22248d79df4f7fd5bbed62c398aca0a93941c241e91434f1f1f26422025dc965b550ce2078011b1e36a113b4e1e2b44cdec0d5af558637cb76086dda1e89e8c8882a7d061b4e562e605dfaf8286643c460dad8fa855d73f91e01d33ae4405c8ae20b993b7d66238abfc5664454988e0fd5f21e3f414494447533dd8a012ece713b3a7cd7c0e3decf35919ee2941912b3df93c92e971e14366649427b7683e21122d31c2797cecb18e39b74a1f29a3572e93c73c625db802b03451f5d52b4debc90b5295eb2a31650a67fbdab8d27d97e13183e201d3a8e141f69309344c66a0dc003c7fbbaa4ec6fd721098edb3e63206f074edc801eb23e1b799e5e6c242c782060660063622ad49b509d089cfbfa923da2df5dd632e465f91539df4e2c5d1f0d5a210d13091312f642790b355b3b7fb1aaa866cda9b9e019f60a30bc9f3b8677a18c103e676bcdda0b5ee2453955aa5120bed97e8fafba11351cccf1999c1810a9cdb91be032e486ec4dba1ec0a60a77ad63d3cd0099302a966a345c6fdd2af3231bbc06f8e44deb7d14c5e9daa2e701a8e2201384570b740377d1e60fa7919f5871de87c850de6a6c5f2ba74f9b3b3662c876fd7600a24878458acaa3cbd53ee9f6a90beef21c0f20095f349ff192c1c9fb54ad566e08648e029354536e68931ac1bd4ecdf6f907a870ffe3d4fd0ce9a8608d06c0481fd63af169df45e6253469ff237c551c7b057e9c16cb05b52de7f2c9267d1126b7b834b086e390e08e9ee2f72311fa86378ad34ef223006093db18efcbd94b445ec0ec0f2ebdffce8d82bf17b3010a89bc1c3607cac5dc831bf99bd409e03cf4615664dd6c7d6f663ce6b21671065d5507ffc6396ca6e78e5cca1a75cafe1d483dd5d78c36ab28413a7fbc97cbec1921f5086a2fe1672d3a8794df6b9ed50031b561bb219e652801f645b2b39a35aac3f0b99a99bb5b8c3830f7799a2ba93c83bcdd2e0584fb8e2c650b78b40e3aa1a478503c044a8fb13ff231a39166591ba09431170f46d058b7b245549427a8049a90a3945817d32f73b26c34a70d25e40b9dd65116317f89549c8e5d0bbc0a078f05d853925aec2523785b328ea93701c3c6e2f7603cc62d0880180c7518a86c0d4459f0ee9d14df19ef1189ac07a430205d9eab7710b799bf6b2ebbfc593e007f9348d1bb2bf496a11bd3bde1053d1f83479c77f599cacd37ee8d06a8b4d9d98a9ff8083c02f6446d50d67854b1bced55ae8517458f17c160e71465ddeaa0bdb3c1c0dbcc4d1187b2786f5ada2f3e1290f120b236fa99d3413e523e07667d9724e503e59decd38e0f0f2208edd2e0a6cb46037ae0f608848fc9e4e026095e80056682a1b4941b70b8fa2e2de689b31aa331af99a02ea6f4a961ddd9d8f4ba04a1c109e353b6e366f7c8206bcf2d2edde14a3b7a553efc74cbdeb4493828c08d860b8c0203d7a5f0ac375d7723b0fbb1b97d4405ce2d1e1a9deb70fa4bc0e4a52b9243f9af69d9b03436f0536997d436a4cc9f8fe04ccbaf3494a8e5836ffabcd35df5983aa9cd0e82a1674751c095fa0b1eadf3fff8972e2f26dfce3779f5f28a8f1d736e26242c0839c87303f89e10c4dca456f4db1c4411aec5d6f77a07013b8c94c50b716b6ee346364d19d42fb2c2fcf0d74db3af0bab81b69c40453bb2bb4346463792e7f8beb0caf2b53e692fb3cc2443e10c45d031fe7bcba3e7b9ab9547a730d4f15fd957f8ffeb2ad49ff2ab787d328e9da40a370ded07245cb9d60d9388b8349527d40a23edb7991d0524cc9bcd95ace7fd91d23055974af3ab98eb98743f3ec23a5b748d6d7434346ea80c2478763d060c3df89043c901162b384fdcc699caa4ad95e82f2e7533cdfa78b1d13be18d42cf4399922ac91d53e4ead67e36218038c6031592a817f568fd13ef0f3f17ebdb933797c79478ae7f75ae371ceadcb9cfdbff8de4b06dcb866f8b8ed2bc5f4324909ef2cbe6883db806eac29ba2c97139ea72591d8bbf83a54e11dd46535785d32c3c2a7fd18086c6db8cb06793d3ae79b5bd79f617c5580847ed3b403ee97c2abd8e1c531ead760651095afb9f633a42521b7170fd4e3153a8a4a289aee06b9b8fad26058845315f5a550aa29843c9af698e084f7f3a2f341b9d05738a15893a87a80bd5702be85749fbc493912e242532740865e6b5e9636c979f66549f4e76e1c48ffec6e2d46ab2a4e7e1f9e11fbf54375f34f4a23f731ca0e950890e5a44e0997e029899f9f7a782ff7d41f075c5f965d1f419830fa3876ba15e9131bde0954ba108490190b5876d78eac45d8a605481f9267592554afc5a42df4c0b823c1d4300c2b38b99045d80d89b455d887fa1c737e10e30e40365521c5a51ea9dc61a222eb7c22e2ce0191458642f0989b5e72761928afc169fae55dafd4a41cbe4463e438b6058ff668c9b76d3fc5bad449faa756af57b817892ef631a29818771b7cc79687a91a19108e00ce916c195386c0862749190ab7808e23093215b640863f79328581180b6f5264a86d02283c922043f508f09c9290616110e81ce03cffb7b5156af6c56d5b03f4cd49eaa2a48956e8d46af19cc7486ccefad04eaf22cdf58550d02c4e7bd5cc856c413f667ebacf5b1e79535480ef0c6537c2474f7a9a8d8ca1f0ce40d9649c0c499a14b23382a5df2e9564073992f73a632fb97c933a761f56b057fa4503bb9146a7a34369bdb8495614f44c0fd8dc075341e10cbced916d530405db3ef8d43499364ea36b1767ab25bfbeb1e6d3eda65b2355e3a4d9e09d3eb9c2ddedd72aa154ef00cb3d5602b3060668a468f30059b01ab1e5a4ba96cf937ec927ec9ea678da72142331f820b3d2d2c01789eaccf9d6b49b0d8fdc29ddf4d6b795fe1c2e05fc710c6378312fb422692a0723b71001314ffccb20f89105755a6ca91e6365dde2ae21186bf0973a2c745e016684859f0cfffd9ea4f0713d456919a658fe0737fcc17ee47b386c5f29da1c0ba94496b5d86f63261bb80d755fdffd19fec7ce550356813aaeb56999f989b74d82a29c257e2a169fdd2014ab53ea4e04c4b3542acf2ce0ed8185d5275dcda4eaf82c91a613570ead10d18e9ec78b078e9501dd011b22b8b528200c57095b2915d80865adbf2ae6dc2482993def0f1d596960e7e06ef535eabf34f0ef2dd18c08eedade7aa5d284c94f9af90b60695e7917acf1a79286baddcd5d396ce35cd8fe52c6a12ba7609ad77f9a4ae5871a74fa4a878becd33586b492af82a09ebb561cf2458c257ac1001ae25379ea8ab0fe7c639ab216040393dcc64efdc04e7a7fbc31db518cce84db20369585d46b1655a95b8f1750a98217417ac2c63ca6bcb84a56f55b58d84536b59e387d2e18c96df18339aa59f65c94b43ef67d9d8b72613a181fd8e096f0506d434679cf2eaac9758297cefb58355db95c484c2c16b8c98192ca39db549bd6f60b7a19848cc1326c34c72de374b43bc034c3dbfdc9e6c5471ebf7668d657aff301395416e326e510c14e8abc6f4a8ac12380a17ca1e0b54aa972fafebdd79ae8337a813630006138e6f57f07693ed179bb1478f61555e80cfa8b82a8cf25c78b89ec5529fa7d1df547b32bc647e4b936c821ad50412adaa015949933cab5224a7c128125050bd2b78afce7756a2908f5a627b5302a25ebad2611c817828f21161c41ad80ca669b6410ef983926e5ef9b7729786169a07327929054122ce05acef4fdf6c1aad90a307c0abbbf45967856987e7ecabf7016129297b10006c245fc2cee18b1c0afbc1af1426218df677bc51aa98e5b514850f4ed0c1a0a2288726c08211dc6169a6ae27f7c65aa10470630a0d44f828282fd1b9da4f80b8df22a664b70036534e0e3c934aca71dde5ac130c7e685fc752775ac05b0eb2b82ce7e1260a4c84cd16f4e26c0ffa15bf093bfd15b9b54d330cba17a78f7d64d89b6fd86df26ea086477bc04326b5e0013b8cf7ea8ec731ebd32056fbbe76d52eb05d4afa9cd8417c9fcd3ab1d1b18d7977128c10155d0d44c4f9ab3f6f7ad732976b363d54355732417d7c1a09b4239a1313756c22b668267e46febb93719125c453c253f2503c525733e45f9f7dbf3c7ec7039541452ae04f1bbc0d5734d8746853dc8eabf7979f0fa0c8c7edc1462ba0ca35e5db90f15073c5e5cbb82a260158a54a7a9dce719bf51d7a900489ee970ab546fbdfecee29a04f645daba667cbacb9e72e1b0b724d2467c900d92453e43a804da9530c6a3398ba3a3f021caffbb21637e5070ed270fad5c3e548c30203f878545be7a638e37c7261c90e790f4c2a657abb11d533e082d63131970636c66ed04efe0f539a4fb53f7663f6ab61f1e9740b7372f56651f749148fcf9dea59c113cc0cfc02147b1463e4442244bebf82267b1a8fbfa79305cd21a9ab40633e261cb6711944880543f82e18878e11a6313232249fc1e84d56110c3e1f8cfeeed4731754e03f73c1d41c4f4034b2c865be2ef21967653aab2d4ef7920cf2301b01b4d43f4dcfa157f6e85915303bae4a8c3ef47bba44e6297440d5cf2d94dcf25ca6190aa1b5c9c9703692d4127397d110bea856bcf3430b6579d21626b0bdba52c1d224570365a22e5846aa8e45549629593c9d27ab91279af1a6c22ba1ab61653366b5c51cefc06784b24b9e922552599a74a5e8bb22a11f89b924f7ea90b27ac3599e42472b62731203b50c539dbd8ce0133d96569ee84d9ff887b56852e6e2ab6b8f682f9cd1ed9cb582b9446f62ee765cb3878f6e86dd5107f225ee0463bed900ae57293365f83f2f09eebbe54a44364c5f1203ef3eab19882fffd8e82ee8a5606a9258c0b82350e350d81d3ec9215a79b920aa7f6a31773aed191cb7d789802cc17db4373e029c2c42c1630f47eefceb6ad5c821420f2b65b47ce6bdef77688cf07b721c4d6a323c0c6f5e86bed55a6521efd25c241e6ea5dc6943703c69998efdbfa06fdb039a08c824d7f0361f874c671003c986c1d374f04bd830ad753d54b3e5a87f502cde3fc2c9e14b9465faa30a74b19413b44cfafa35efd7adc95a7f4ba1edad324984a00ceda21b7e3786219c8e1887e9ca51e1f22b25e687a61028e4930fa5e8d07af39807a68ff9fff246c5e470525ea967bd228a23448ffd94279a7904d07e18c899109a1c3939962fa3a2a2679e82054c5cbf28d19be861179cd3f5d1a8bf33299a6cf1c54a74b53b17ac314e57aa250789f24a7535744a2c156d8743f0a2bd6947d9a64f1fda6b92470a46806eded6a35a7509f4949df79b737c93ddaa199a5d7d1659767fcb8743342aacb8f57fef73de58418be820a4b16861014a438e770de85ae000c14498ab2cc7e0e0282f73f33a36d8d87f73e2b3a9960e628ff5a953e47cc9470f3033b858d2d4688fa83cb0f903a076a99ec46fecdf6b072a3f6e4b81c66adc255c7c5bdaa2ff992abaa9c6ee964d441b7c38639bfc971c2a11b4611ccaa186bfda4772caf9ca60e804b1ea491e7405f62ab1bc25ebd83b462eea1f76a695617f84da648c90f4c6f69dc4427efe1a12b10f1f6e70affdc70aacc1c809c4c8c050af9123b2f6ca3d3b187164384fbb72b2f4d911d3268c74d98c547124207893f54a39f4cb64181133f04bdc185da4d3247ec66bd6d6838b03704ea86d6beb3e7ddd1c43dd6de18bb7e69da7c3209c20e7cbdc9d05dbaa6ce7487b43f4089f32f0a0925b6120f10f4ba818a899c079135476bbf4955350a5dbb33d262491cde7e4e7f2e1b4a6d2af1ff39a1b7584a91fca0deab246afd411da56cf30dc1776622b5d207aee1e8e863d957f11981ef1694625c47294d7c7031d06eaedf4d56c697483c822c00824316a5d631a72491657c9d8e6161555ba53646e99413a2a34d3356fc391207be6b206e02a0fa0989789fe7c3c4caa65b98895e2f70e18a7ef3e92d42e91736465a10279c874ec4e6ce66941629921ffa64f2115312661e4e4c9c24811aa0933ca1570b2670823bbd68c3280b8a7aaf3fa8cc927495e9f9cc07e21058dcf590ff8362bb216a31c212f026083a9aeb61f9fa82b21c34b77a9fd409fe44d4bf134c6e721c5b038c9a5e4c2c1051d38bb5cfe8286a053739c78d98e2a71036441b79aeecc8185382eb79201b3186f05e81ffb5b07d3678cb8d039fe8ee07e01c1bf1e3b4dd6a6154543d6829ae7551142df8b6ad96660294a3259bd8787bc59042798d99ea84bba863590cf635df7416225ee8ebaaec3ab546c074261508817074b90cc64afbf7f58960f723729ab6ccf28df458d9a6ef7fbd41d32a361cd63a45c3e4d3e50267fdf830277308c36801e25ce42fb911f098af53e7b640ea42a0e67d9b36389531ea644ae57071260442027e1ba6fce909b1a7542348acc07240ae31e7f51951e12b410f1fc692fa463694ee1d9d28a0fbc7e849c0915c79cb61dd6a994b1f578e1cfbd72958480ff629ae15cb1846148c29d42000ccbc9331ce58571220f553b4ecf598e218f93bbe9499c50f539eb9a2fd69e14536ebe3ab672a2cd52abdd182a444e31bf00290eb380d632c995b77ce1b9d36953371f34ac2cf6b8e190fdf7c122bc8e4381114fe7508946d408d529a2296293726a90b572771b70ce9d3d5eb715132fe4829807db98e5a4d3bd7b62900f7b0efc56d2de7fcc36281927a182f2df492b66b6c93af8bbfb5275aea97ff9842309369d2f05bb10c8c31f16d02b7defa38d8e4f0b284c5da31f2d020bc8dfcf232528b383a41a6c3c94c88aee81419e1fc87be4dca58b411395a78d95ca9e25311a5cb0ba727bd5361149d058d70044050821b927f41484354aa7f54486596ab417889d948bb278cd5a2f39b2a9f1e876a012c4ce4718eae9ff6d57485a44fabe08c6c8f9293f5a863ffc990ac1ee55854c86cf3911fc4620456e31ec2892ae7fb154b3abcc57c5e7e4631f4f4b4aa801ed8b78cd73e43486556c18e6592b5adbe1cbb939aab698883421d638b2526752aa10ee724a80ae04fb21e1316a03aa3f5c09dc61aae6fc7919b156012081d0951ba23f549c0c092fea4cc52c73d05db53214e3f083c59dc76b2e8d7c9a2f6543dc0c704eb076b26308c66aff75ab799ee2e5910f4d941e5ab638a231927d90df446db478ba68a9f41a005a7bbcdd26699a903e16d8159c870b7f695b5f4f6ebb8ce3e8b3902080ea6c0d6f72b908ca8e60a3aaedbb897eda80b45f8fe7916d3ead00612e46fbf6232eb36814d0445b960f115b627b1640eb42ecaa201360ef60b2c5c0426cf30a5871d1a11ab0b3516fb48e7d97c71e4b549ab361fdc18477c1b2b080580814303f638a2eae917d54530aa5f2c295103ba488ad898e778002318f34426223c99dd65179d6e4b8d43221404c2f11a08ec3c0d4b36fc491e74aa40f93b362a82bb81cdb71bd622a95083c12537cbdbfa972c1e3947ffefa7d0680ce882d44a8811b47c5d8624f472829a25d18a8d3d1adc4aa7047bb2691c3eb6eb0e0b1dd5ead171dbf3f423562888dd0f66be52ec055514e4c745b06d0f37358052e1abef712f4a26bcc7a8b0b895220d14faa8ae7a35042daef35d910fbf74bedfd47c0e51cd76840ea24b9770646865e0e4c3c415cd7541cd123ea765e6f5c98a40997f8a4ada5b36f9a8f705642f71c8518483f43c0fd2052ff5d7036d412b2cdefc02b3b6bd99778cdcd62228f2ec8a746b7ce18dd52d09000bc99cae49b85a9e3515a45a4a04d1d72deea9077b70709d9918885b291091fc4c51cc30e29f63f382d3a1ddc34d7e5c1f11128d1f2c5c8406809d63411e3126175e522f08c3e7465da6579290ed584e8af1f89f6fff8106e70e84847b09fa22a359965846afc0e94df61182e2bb8361b1d22740e8ae4560541a5a6744af97bf8bcd29d24961a8c59af70b5d2cf072c074cc0ff37d43a09163bf28a94cd4ad81d671821d4467cc34ed69742a1e255ee63281cd9b34f11d9a679a82595f8ccdd895d80fad4f538c18d36ee7eba11cbb80f5098a1dec42eb3dd885d6494486920351499e0afc5a1dc2cc6a5b160ed4be1827633d8336244680291c84b182c1824860b00acace00b3455f717bc95b01ce12cb5578fde310717c6b029325eb20cb94e13f5d64991c39fe6ad890248611e52feb74c979a201f202d927b0bbc0defc74e69ee18e950844e312a7a52839430bcdd0891607a1a7c0d3f6d6b9d01c6087f6f6406ddca4122b0c6618e10d552301ab75f3be8490d5ab4787234a66d2042116487cb3e025290405e4e4c994f28b6e082aecdb0eb015862e49d343d45bd7d48d6507a2dc06ad5984093d46410cbdae2923982c2a4bdd489516b23daa8e77c509ae8ffd785f10349bacfcf8ad60d6358f503ad980506fa045334e7e72a5b5124f9804b45952040b562d1471f07c007f7110a1cfa104c2b6fcbf53913376c538884731926f46f8d46319767d3f9110f1e4021790c317166a1f9d8b8ad0524711d210b3f8ff3de3750edca8cfc560c0da978d05e7132483d755ab8792bd9bdc019e194f3061d5e9f77143d2f4ac3aca93f0432958439da2d155937d261ba5e9e8ec85e4a9816ccc15a0181226b5607b00ab8f73f6df0442a66ff98650dd633c88cc2eb935acab12c4b63b7ddfe6cb2d29c73f027b3dda52c8b6155dcead499d4912a56773d1425a781b0725fd2d37148f6292f50fef0be74156a51f0dcc738babc3dc131a46ec33464404386b5c8302c5c62e15e0522dabf4d1c034f13e15803b0a3e6ed083876bf84c35f63898cc7deb988b878394eec03456230abbc66eccc680cc7c3adac8ffd84d61b5279fdea0b7bf9c0ec6d87d87ce496d4c12de7be0948d0ac59aed02af5d03f7a1df9dfaf99587160b7f07d9765f6cfa51905bb0d190cf5e0ccb007ca646fddf3a9945da5b211d9a15d7b7c1987d709a09f5ff02698bcbc81cddf1e8b25bccb0576f4f6c55c1068eac460ae6ff3294635a68d78e78b458fed54049fec6ae5a22e508ad9365f268fc3c518f6e0ee62ba7d5a89ade4eb2872899ac0e61854fc6874b650712a0eeef1c03c07efbc28d37e794c022900edc4e2242683c416dd61bc484eba0e7bd9e4f2990baf692b3042227cc146318d43918df95b75785cda6dc4a400e14969be52a42e72fc39de61f3f985d5ef89f26ca3a2da8e1c2164719ecc3786939901eb74c5dc49c41256a23931f0cda3c286f073e97f36f0acb318fb6c34e23e947115007229472f1828d47982b16c7a5e8cf4a6bdaac8562f17399405ec7bbdcf4a7ff0dcd4f07e6eb3e9b99cd49aadcec877b56c7063f23c36c5dd69f083a9b66bf866b8fa89166e1252bb92707581907e25be8402919becf3463e901c6b97773ab1a08f52c0dc1a0a7efce4c27291889490d8f7d477f808d3d5ef09d374d94569ef0aacf6cf091098e2ae693f99f2b131c5029006ae9ef630827a06071b4716fe2fda213079478b6f2a40f0def79320152d6d86e5aea6b7fed30cac9b3a45d61bc19001aefb92bf63a93a6d7d53426515884ab75ebaea4a37131d744cc17f309309f785a02d4f0f192c0d19f69b80447f840cb5e0e44e515d81c9528187dda1510746f1bcea23ee1f5739fcf4282026c811aabc47612b5b4d646bfc8d715c476eae62b671ff2c58f93fb4c289b04edcce9b1b32352b4cb2bb5ab54afff6be133e2190cc6afbd3ab8e6f77e8c335b57273da05bf64fbb6d0c8b4d2090893773c0ef3c5c034a4cfa765a3016daa80309f7fefdae7bb055ba7f3f47ba44b63af77f502ea15665c62c51694d0500c7624cdb0ac1b20cd867f318e6e75de71b635e8de37676ea238b1a1abdbf43ecfa8f32f77393b9266d1e1f3fc492bdf7de524a296592293d072e079307b9698ccef9cad40aa98550968f6bb48d83352c5883004de0f8ed2629b023dc146337741605881814ab294bec0b2cfb0b11d963ede545d9b75bc69a57f36a88f404df89021799d6a919ff2b1c651b3ac0a4183c35730cca02dbf880c387c1e264044ca5b3001a6981adc8ee57b2bfc362dc14ef699d2f1ae50179aab58eebfb1def5f3ef416fe1bb2372104ee40f9815ff43ba17f0149f1f38f1b2e227a542911b8237a0c9222488a01e65ffe070c0825be0ddee387011bb4e1fb17520cdee3ffe13d065b9e5ec05893bfb291c396dd8e2ba905908d1cc69e924f91b9498ac7dce40e7353ad6d5cfe21898a5f74f11b7013484f70f41e2c701857abd6895fb44d91222b4f8118d9e3ca4a6d476cd2a8d27f185f0dde8b3dd65a6dadd6bd56ffaaf732e5813b42525e9dd16b2f30ce7193914cb7c7c9a078f18bdf1ff546a421b0d7f0c13403ec600d0f81717c00b4604011311e1e6891422523cac474c97e2fc6a3d1bfc9d4b2d7cd8dc9e492e404cbf87996bc7dca24eaca3b6553769f82169c60388a60f85d89f4e3236549755e89f4e3eb2027528848ed7c2029bef7dd0bf9ae486d3f24d5518fe4043748e71cfdd7c30729823178eafbefbd47810baef1138299e54aaee4cd8dc9e4b31196abecb227bbf4f16e8747d39fde0087324bf62c2515e09922703865a329f315fc290b648ed399d404cf1c9a60b2c8248a87057bca3acf1e70caa6b8299cb2d9e338b239a5dbbe1ef33f080c995bb0c421060ea7ac25a32dd994394e96517daeaeb7284b9ebbe9cd792f06b6b85a4432ecb0e367477661070358681c1a77c4b62277e4a65186eced7bc170cbd137ee5e4eca7b6ff732d5b5785c54ca8e1d2a6bc5abc0b0443b69fd5074ef0d6eab02cb422db7dd18c1d073a5338c9e3d87377757999393234fafee99235173da0057598f29397ab7951d726166b084050e73b2b390e3afa319d03834e6d09e1c1de4d44a6d8fa68dc6b9ef1f5d124393e4f8a14fdf2ef7dd9cde9cde9cf37b99fab612e591d236323ac54d31476e45d423d6d608c83c1f86d8f493436a8c46a80fa6b9ab20c9c26ec19ebb0a922baa2099a2b391bb0a122332931c9a66496cf2de2b3d2677cea88289f1daa8e2d1800b4323c87b791e7ee7fd8e53fc24e3014fd0db89aa163089e29312225b10ab2205f34ffce4df4dd9cb3b11987ff918e57bd307c70df7251a2214f92f7307dca997c791b7ef5efceb21fa2159966e104c7f8a80660cca25dc4754da521b18dffbae24839b9c03232cbeb8e06d6ee10c38fc659825262f5f99bcbc7c0179f460c9fe29d4701855dd7be738d11557339b94601cb9be377db2bc91d2fb62fdbe1e3832fdee899b62a9e3138c599e0ce190588ee11024194b23592461d8defef6f631ac076fd6bed7849f37969c9265147d2c6df6ebb16d943e7def43a570061cf9035f00792801875d0381087c012fef5fc38ee38433340d7503cc7d17462fb27fe4894bdce49fc21538ec9f97529cf9498a8f0b8830252895c9cb6fa517304ef1530090e0f046de8c84c03c242af2a41084c3280b5b369b531c87f648e138db7f815ff7fd08fbac1a3392e00d0c67c871589620e9da18c9b264073aec80a787942ba1a2074c088308294029ff28a39982c3f8f28f3d282236d58018e316638c31366d8b607cd920c16194bde4d706d8b8008751166535005ce942d03dc7656e8c2e27ad934a8f76bacb51b4b9ab34c79f2418e20fc9325b2c59273331a74471cc39e73b0e4d0ce59cf34682352e2d9d73ce9177bbbbe577774ff9a416b6900694b2939e3f27a3c805778bd7eda4d5be8ded25f62987934aa74e7b544a1dee31e67829a50cbbbbdbba94f367947286b1c214399cb4941c7e32a9bd75b3b74eaac506ae30e55a5b5f745a8cc3f3bc6ffbbe2f7467ddec7dd559e766afc7754d29a5b36ef6be2e9d777610b173cc69839cf3be6ae7a0df35789b683d41cd723e4c8c9c3535e67dc5cc8f91326e639b6afdf893d6ef795f95caad52a9c536e7bcf3a3bddb9db4ca174752d29dcb49abbd1bf7f5a0cf598fbb37372af4e4708cc3a675bc80a375ece33a71482e832bc4f076f3c2cdcd6667c53836306c2010e3f03cefdbbeef0bdd502824aa691d69abece6c6f7edcdf04a5d69464bc12bf244221c3dea98d7f4fd232cf3795be7d87e4e6badb5965ee9f2fb85d0584159e584818991356c8c171323657cd6b0218e94d2992738e9b437524646867b594dc3f4cbd4efdf5a078e392e0d2c70fc8e1bc1288b6094e54712c8975e6409c6b6d9b69742b27dd96db3fd967b88fde1267f207e8a3a22d039fc8124d0361c049ae0f8dcacd588810ff672574102041798cb5d05c991cb83b7dc5590ac381d7097bb4a0f63541ff097bb4a0f352099942bbb5c151d544cd08c30a2c4c7499197121d5808c20583150b3288f1b062c1355bad726041c92a76f188e6aed2032b871fda625b6e555e77cb84136890c39b1a0427b02c0e628c9105be61fca02509b8cb4d450c2d6ea888f183160071371fb0979b8a1851d822e02d371531967001a6b9a9889184037a5859bb552764725379c20cf2cc5dc5054be47024f33f9856cbfef2c399a0ec4f03032cc3048c672b7f23368224cafb07402dbb0d57f6678013f845830b318da3c90177b13b1402bf091c5618154564b3eb9e87c724ea0349dc0f4985401207fa2082679806f3507e841effce0e941f2ffffd0e941fa2870177448fc11d0c86c09d96a79d0be2d9157d68fabe53f8c351e83b85411ff224f2c94c5e98e1b0ca2c886761956d205d65cbb1726822816d0e2391a7200986fb348850f1f0ee96a69b28489a611ad0cca7abc8e18c1225539fd6a913966305a3cb0341e0012238c4b31ce99478967d36fb3b64f3d010baae096f72dc56b5e3d18d2e787e389a738e7a7ce7dfd7435ab035ba71226326c30a8bc5922f5b9b25518da71437511adfe6b2fc842feb22699d769c52f6bfad248db241f2e42f7360595a9044592d6c2d071b6465a14ca5e0f0b264fea244e0f8a1bf2eebb25a27d2238d1ac593ff4d620aa29bb800dbecb008de234847f065657f5b6f08e004d36f5bef779decf2b8c925e5b22e4bc6aca32263c2137d737e736a11795b6a5990e045169157040e2bcba7b61c456b2e47d1203fbda02bebe5a8aaca12754c9022a11e691cdac5ac2ca0ca9a4059806240b11ec464b13963b1586ce290e7e343639e4763b14ff4bd44b1582cf689704c147a79997ac11f6df1b896bc44b2cf4540885ee7ee34667870a446709a6791fdbbd7dcee064e3ff9cf58cce1a47403d3a685414043a362eb477d43b728f530c6bc8a2a7208620e636c1459ad58eb24e98e41746c921d0c3939e7ac776b9b188bb1dbd3754d68ed767dd536be5ac156b0150cbb0c870e5bf96ad53a455a27be731c0c8cc3425f7994b681b58dbfafb655f6cd9be80be25602123c3b2ce18baf71be0c847fc8fe9e2477f1ebd14dc80e7b997429250c6667db6cb2260ff2f290a7573b0f594c124b3b4aef25c168b210b2c72064ff1e2d7f79ec058b32727f30f80d99febf9c732e99ac8ba5eb9ab073754af244852497fd43996fcc510ac9a863c61cfe977a1ef53c29dac63f447d2896ec33ea88ef60778e90f620fb532b9e494e3085f9e9097db9c96bd039fc99cc5ae992b68982435aa34b821c4567ae7214f5f15318adc37b7f5a6b9d95a328cd4f1e487bd039be681c4aa54dfe6e6b1e487ba664ff484b38e0b0b6eead50b27f786a55576dc9d34b2601cede87312dda2512dc5c1d3bbe33f43d0fa7318ec6fab349016e398efc2a1382f9b1f3484e7004e91237d51a2a79aab66aabb666f2a51fcee4f07a200db14b0e95a04ca053a2da0a9566aaf3d8d467e803f1cb14067784a44460cb53acb4457996d02044952be8c9d4ed5c9e8b6ea032cac47dbd676b7c29df4d2e33c3e1e714ee2a32909269ddeedd6e0b170c672e6d381c42236bc133b44f0e3fe0fdf6a252034a107053fcafe4e3c1d00379c8213b5104ff04db1c7ab9034d3b39b4cf8122f00cc3f3c39fa176d30686d3beac4f30c531060e3fffcbb6264b7aa260ed200bd8c3e383253e8009007bc14484c1226cce396788b16b2df94a543cd291e512c5ec12f5f1e45f5393e329bc81f9e867e3423051701861eeb2b463bf7778efcfc307ca03232b8cec5fbdb73d73560d6781cd8594031c36500c3625186130304c8047a153681cfa08987fbb39bb299b73d2168f0b06c39c7f58d4bce8afb941a174ede6a9deb95cb608ba9212d23db35510a9ef77280f3fa484d0f841eafbfeff4a39be827f4729e5b81554b82815dac65f052df00b3d366470ae953232054e66768d32b4bd731cc7711cc771dcb5b1e785daa57516b1e4b9736f7aad5a1500c50e043c812d9018631c8d9018624a952754b8c4d898d9b0722fc6a3115699b0ea656a1d77acba17e3d1e81fdb97610296a9ba5a2b0909d21038e468d931171c62152692046e49bbe50cd110bb641941d882d9bf09c494fd58ea7217bf0788b8b8c9ed631566e11656e195fdf838c85885575f0c326541ac8a3102abbad648a9b42f53d6b6b00aab6ccc3a2b4259e51e0fa52f37359601008cc3007df24f0096c9883492e048bb06d804b79be4cd121d5881658ada14489acacb8bbbd7788dd7b84ba26a6abce646eb44240820a26212e2c95f47c71c210c0c97c3a825aca9b552afc6889a2d77d4abb9c9ad43f38c11b87d64d4c2c2a1bbdc6ffd584b31b2e4290412208d7a8030d9004846b058ebc8f7f6f1256de3ae9c4929fdeabdee72d70b8dc3d275dda53b55bd3259cb64375f0c9eb29901bead3ec5a7206cb66c1e4082584a2dbd31524aefcbd4a591c7a501951f7bab9cd48a946c7d20255b9006cb258bc03309868fc9160c517053b0b3caa7d6dabf17ac74da79c150d2c85d60097e40beccfd00cfe12de19b6dfe807ce9a62f0c65c73563e0d0da4983185a4c16aee9f2e9ba9e6bce2953c8fef3d53a5ff69f4f1c27e2e8804397655acc966564c6a66bbebcd6413914ecfe04860390437f1201fb71e5268f443c7e192849f6164dce8d2282434e6afbd54d71bd835bc0ea5251c0ca94da3eec1eec9099aed284cd7881a5576bafb5d73e0fb7d66e2f53db666fdbb4785cae181ae7444d4867d9638c52461965680ab8c5ea0267c115060cc95d2b2527f36bef95ee5e655382787155b68bf7b81597b9cc652efb524edb789ffc7ba8134a7da4038b85c5a2755a7e927e94524a297599cb6e9499c9587975ef0d812338e7e380495bf64838e0ce336509124086438ebe7fa8266aa27168cc45b2d6994f9568937f289a92fda913a12fc27a84ba94689cee98e3d0207a5ef96f9b982638318910f51cc90ec604b58d3f03aec0e1f7489704e7ecff5f660646ccc28b2a57b090e477952b61e4ae72254b6e09b610b9fc92a3e8b1f264b665266507332b2f77e18a9eb451376a664d8dd609fde444fa618ecd398ef3f9f89828a35aa5a452d29c99edc96ed3f7ab5b5b6bbd60e9b6cdcca183754444498368175a9327a735896a5af320a29c5a8e44d12ffae44db8550553040ebb5548578e2341079f8211a38e0892e05225346a64b3aa2ac84ec80e8246511a061a95237f64e81db49f1c2d8274abeb5de4442183807e56124569ad5b4590d6b69c9c514eac31568992e147f64fffcce0e8825544b8647f5aa34134b410f3d35ae79ea23589eaeec5b4d6adba55b7ea56d9493ebe1f921292a235afe44cbe4a59485a3c355aeb60212b2e25597e3f6ec0911be4608727331bec9092dff2af942d7bd428c1d29b66d13da303a61fc1766fcd5c2aeb7944c016c4a3d1bfc914defcff9cde9cf6fbf3617978582535b21a265e534e191b05f30d03de1995c8ae6c110ffd382af2b82ab40abaa12cd9b5f06cc9212a8daa301f867cb287ae20c9317263e2f2aa19fce4aa504f9e69cda86656aba8a333c292a80f47a20f3ff4a1e99b51792a2bf0b4aa19b0199544d1947f4131877f9df9c77af06ce4137eb4ecefbd1439f4b4783337793ede8f476b9b2c406e3a228796c7aedac66d913ef957207ba402654fc18056a5b22ab72b1818181870a6070e27e0d68c2abb4a5523c3feb1a08b5ec4185f1e6ff7918d9403ecd9e3129e6ddbb60d6582eda6071c76d0f7f1efbbf44a343e60d2f643f206ce2cd9c01a6a84c09d5b9e24d841b42b3f24c9fe3b2bc0f27321b298601ba0c4cfb3f7a177f06385c06e1fd412b08fd740b38bde73c088c44ffe219efb2d79e2136f90d41c601981ce92637868495202c7fff85d25b0ccfeb124f30dd99ddbb66edbba7bb7ed7edb7697b058b56f8a16ed092c4f004d175642a3057905a179b41fe099438f526a6df7352a034dcb2f281e316ee172c12056e00cf4001e2cb8f003e9756e5f4a29ef9cb369415c56f8006146162870e15c8e638051ad7506408de49022e1428a2453249c8b7b15c1e1e55cb246090e39176d39e7e25c33bce8bae676bc6f77c0be03f6ef1ca50d1538942a1c6b6d0862fc1ead5a27fef6f2a58ffc719cd9d336520a2c59ca0c20933819a0749a517a912a227e922f5552155525180e5d4b8f6bf1da160f7254bbf7384e15a2881343c8f28796fd474ac0db73cf813648c9c30f9004f6211f887c1ef25f903be038630a9649d4a66ad9b24b49c0e1c87de52c378244d25e52d5257b772a55cec35b890621f93e0dd15a6badb5d64e4f4aaedb46dc6f922ee1728320486edb77dbb66d9b94dbec400ea4ad6dce6d4e54c93f927c8051f569d847e5340a95bd398ebee4699b735bd23e4044b2eee4cb0e58e143163700197179c1a50a2b74b08205136eb0722943edb500fb01a3053ab07e6022c8185a544065084e7228522b07ae5c8905a18758159869095ab2588293245d10c1da39db41105114d1042798e4200564f645cf154a68222528e58f47f70e40268513ba50828b275452fe9364892f546005079e6ddb46577e602d01450f530891f2278ac0250c16912955ec90f2c723514886da4d5c177aeffb3ccfe35e4fdc24fbbe28220b0f58557e666eb06ef090fdbb17cd7788c3518679c13460cb1910cbd30cd85de1029645123533ebee9733b30e0c7f66662998230c4c676a3333c72165ff199fa82366ff991fc7a14914fe0a86a61ccecc2418dec870661667b0e0ae71a56d10e08345ff7d38338b3839b0a8c3db81844c92d611a5883978645c32add6b93e0022ce423289aa41f2e4219a44e10fc542b150ac445304d7a090128d82016d0d92600d8a6090fc7a70241e606f147eff0fc5240a83333ae8933f3dd1506c060a39339b91d236fe3546e017588e8fc1298e78e508ce605b52b2bf6dd99628c797128698239ca18368ae250f9c81954439865b8ee3cc14114d334864ff7087911cca2cc9322e191e99961451874c121920a214af1c866a1d92c9937f68e6a11e4f613014932757e53014e3810c7ffc2a305318637066264f0e846766d9dfa59418cfcc666637582187d981c543f692a750e012ba3ea7ecdbcb8c2e658f5f0bd5da3a67a5a54ec592e7990f9610a4e4f0e60891f56f02aa02d452dbfb8c18e0b83d123f37d072811d19b114f71b5805074b72aae040851d5ba9fde569248122f860d1c40b09134a8628f10418b87a8083289a20d25fd3170ab060852a41113688c2e3a2010d944839ac5523e20a26c4c821e57f2351fdc5117c48820b1030c8a1966a40911911ae2574b1c511523eef9cd7c692676b37f0e6c60b9195394319fb8f6496c0b76ef1ebe6e45ea6b8edda8ab1e807114d94050a5c70f804485929bbe56bde3b4ba71bf94ac0f6def82fa25571bd92d9ec1567121589109911f948a46dc2f8722721812b2b5f22ad13494360e786b01f4622443016c73e3815f44efa0c712f53a357cf775b7757f214ed91a8d188f68c68cf88f68c46a3d1d679930399785b4ba646dcacfbe95e2aafcb9128af8b2f7cca893c9073ce7ba7947b848645c343adf5e57526513535b39ad956aba9d26a609589ca8f909bca185872ac3d8e1356268e13565996394e53e132c5715e4f1cc75fd9b1c8a197c32a933132691db73838e0b0ce6473c659673f5635ab3e5187df6057b5d6708ae05aab5b1c67562b97eca0040225904f9de580635eb97003bc8104df60619f93df2a5d90fd7d148151b28b4e02c1e45002d5c82e1a55af0001ddc001bb116de36f0120bd83935a6cc145fbd4993cb98f042b2d827506f3f3e5b086db2ebe75566915a8ceaa0fa5b4ceea8c86f53225465595357aa25010891285704480113ba6571a1e8d5e60800276b4ceb6835433a37574e798604893d4e0deab91c3d1684e17bc73617edf37e7d7719b6c0a8d16648bb2c844500d3e673745333fe09694f825af2b47e6c4992d709863adad350bc63c1188053ac86734f2d8e209a2b3d2597fde6dbb96c75543a7c2e19d9be469ce1a1b26b8ddf42d6bbd773665c24fb775ed096822a703735480e2c3518c3196bcebba8e7b8d5af0327bb1e22c16cbc462fd777172397cfaf5f8deb276e40b6460858b9410a9830d5250480f0073e80e059454e8af96b3bc0533ddbb6854f42fbc0972e5efa1238d22cdb8476992637e2381b1fb91a8b1b75aa7b64ef7fe1ea5513126631a83314fa28968852533b3c1d8f08b5f9ef529e4d0592990ecff90f134ff63f4314fa344f3334a311f49a4df91f91a323ea6347a99d20e941f313f03eecc7cccefc83ccd5f89b201ca8f9827bd0d34a00d507eccf8d1db40e3657c8db72106b461c68f9ef4118c41c6d33c10194f03ee40f941fa98dfa1f1354020a38f0177663c89a644e3634a335e4a1a33420fe490fea824a3d4f244533fa6d4a908248160700a3fc2581481640e90bc21fbdb985cc5f22c8b9b68fee326c7e2ac92cbe4c95fa6e4475288f24da4b39c0504c46a9d2eba811a28da18ad8d79998a017784a4626c4c696b9b96b39cf532e386bc38cd1318c360b0d78c31681e9e39a7b5132651d3f18c47b44e18918a1b342a27f41db287be82ec611c638404bc45bee2fb30ea207b1f462878aac0e1080544721ea74429b0fc548f5a688a602012951331b8816164c5558eaaecdd411f185e0f8ca70e8ce104ef08e6feb5b0453b8329889b5c861ae0308707954a29a54b0a0c560bf96008b4aaa25d62087ac88f4fca8094946ea06db604c90193e88724da5c40d5a12805f4c97fdbc21da4ec240aeef05cba82c3a6d198529e8254156562cb1656dc1cf7e2dc1b1fa068e9c195430ec6480d59c28a105c7001820ac02092f26fffeb7ffb6edbbdf7b64dcb4d3c42749287ea75b2966e24ca036536461965ade3ee9d9451b6e326d8116e72e130d268d82cd1e2389116b3d0dc80b7681d241865f961e422cb5a470a1d518bf844eb4422c4fe6078c9b20363163f398d86123874200f729c30c2f216c701d2e23835c7a130898a341a2cc67680c39b189afb9335f9eb01862ea594b2dba6d2dab57685a13e4d0a702cd1e45a9289304cc0e14d053cb0a53c5520d2684037ad533f47d976d3ddc892c8e291cefe059239449ac768add3c4a572f3956ac170f4b9b0d5ca551b5badad6f3f6b294bb6786834160c96ee87e613937244b758b52d33f40b5dd336b755918bac42860c79b1cbe5baaed7cd8dc9f43f1a614caae159fa1a6621c93c5a078646dd20fae4df24bbc3a84ba26e6e4cd7e532c514059fa0810c9c480941a10860a43e2a9c90922693cb715eadd3a45141e4c9ff46c149646f22fbcb20c1e175455587df86eebd173dfe0a881ef3f0eb6a1bf7ba0f9b865ff440bcef3eaabc5254853e3e06af2bac2a520d4730bc526ecc85e42ba3140c5f4a2925f8811a8a954a4e7292fb80fdd835140eb960289f860aabdfc592addeeeee5d23cc4d6e2b18cb32155712d57de81ddca16050418518aac86acd2ca1520c0eb07f2094f8a94e9ab2602f77048904a149da28779dcb55876c0e0386d7bc10b58dd1466e8b92b3f6f6b5d6dacbc35dca6bbb678c44a3156480c39ee518cdb0f8749ee32687aca78bd147edc5881635a9020d879e0c4f1453136d4829e59c1d3bca392795e2f29c00c382e141fa4ca29aa652a98448fdf8152b683e63838771dffdf65cc94717e5cf7ce62687b9cc7b645813dd64adb5763683d9ac04e1ff5fa23cefbdf76450fa42ce9b22283f49e93f115d177ba56d197ee1ca645890c7152cabd6d6dbc2aa25c42e1dd4411d54430dd2a54b972e5dfe67598344794abaf491474aa9055a0ba01b206de36f0304ee1fe57e82bbfb5b8cf5c438cbd131c127e0484e0a7262ac602016a0bf6d2f2fa4488a209408aa6e5c8135f0701821bc5a4ba5a4f276500daa0ecb9c4d2b2dd305d3afe993ffbd18cb1a5a12705893e5bcdbb710fba3a147f72dc41c7d071c76adbefcb026d36a1ee43407a2d1dce4b5a88a2b10d4403323050e6b5ee07cfc00e2a6201bf00018d64ca95e9c31ce393db045a3cdd90d820d7e7a884421a5462422f48540cf85d67129a594b6a99594058760a8c0918806be3d03ada33b47a4df3ab5678b2b9f28a8a44dd725b5758a4600000248b3140000200c0a8603229158482e9645393d14800c718046745c3816c883490ec4280832c4180089010400408000293335b40100d688641f47bcd21826546ccab075a1a8e40fc70265770515f872359336cdd01c4069ec4512aa6d6c9d8a2fe940a17ecef8b88f24e73888aa5a24f84882a84692489607e5a92705158de306af000358f94eef8037ac760cdab4ea0b9303d82c68f994a4ce9026c3534814d8bcd0632394651a9c15e4773e0e76d863a1f6fa40427bd0feb955288e2f4129ced8f99e55c654e8cea9c3398e9b7175b3f08741a35947f3319cb03ced39d26209ed2a5373b90fb47f46eb79c4f82b89c48813c0534200edbb5ba0e354d505de83213eb90dd4381dfeca8a305a3185f5ae37a595780d4f5976c372c2a5e85c33f717a3e530ed7ef514a9b609c56f270f4cb9c909b6630b6a148c5b17a8e9989a410fd3072bf135e8919a5490a075acb95b41803674ce6c29f1097ea3299df8217baf260d87221483947083f36f59bb5f56072ad780b5ce0286bc067481e51777e485f89d3b9885231b70b51eb28b43e9f1d73460707f2375cb40432d07381b5e500b9004ab20e41c4bbd71c3b5f0948eb01c487d173e0d3590c167b31d09612f3a41ce37bada04dd82a7cf26359fa1b354931b378e347efd7770f0464f03d0f36a14a64951b529c4af6b7dad80d7db2fe51db636beafdb62f23bc9dc58e542ed9601f626f9cab44b23e7004178f7ed87652e4840a779c03b41e4e5862d89de647cace1fc23993553b173047092be24b4b4c3b88072c01923c3c540fa1108566432f9d0b540843de44a893d818027dbe44deb39f69164761e45529b4c327cdb905b3e711aafcd5b6d2298110b73002d6cb15fc5b40a766eb8c3c2a1ec811faf3127fe9d8a4e7e7cda067b28d7f8d28cc78167a5f84ef4b913112abddee2184b99a5cf4cbcff73290ce1206fc2b399af441e77e709dcc439584153b32ea0f24b655b7c579958836853d8ea4bb5728a60842b7a9044de041169f0e11d0c81669841f9302cc31473090855cc9a0a94d149aff24f0dc1be3ce582e1e8bb0c2fb02499bf19a7a48ca794f4195fa1923f36e90f817fe442c45e5cf8b14a4b69618358cb6688c960d0a18f7a9d088c968e059208b570dbb8cc56f4d6d1894a712ad1d54a6f1ba29f99e7aa63d28a2cdb754d180815996955d1add38e291f516c7980c60bba490c015d1e52af1082a356b92f228264128bf33698b00251ded7fa4b78cbfb1bf0007ca1339b82e0812655b7ba5a01c7f14d8033570ac20f25ec59e6bd8f41390d5c918321796590de27a2f72ce0ba2183c06ac310c80a4d2c1363b3c69783c741299b4b2a32e6b3d27f77a7e9879a9aefebe08e445f4b6fd3c326e342f8b4e7436afc39e60a2502416567f3f0d922cd12afbca64fce52e2eedbef851746e24cd2d92367bd2018a3f8eb4177caf23a3685ecca07179b0e2779baa8d05f6a0026a9e19395732ae811b3eae3df3086d3662e90ff19a58c44114850a6f2b7917e91ff5c763244d983af00750dd93c582de5161a933ad14f44cb54c73f8934d3bfab484625573e191d85c2a78a7d3a7cc991ead503853329dc6c60777db4ff2176019f95f01bb1865994cf0ebbc889c5ef2a079db676b1d857e736bb810ef929ad607ba33c48539d9f9b4915b9d5d4e7b424c2549afae460f37938e8245189d8881f4a1b7e3f7ab34efe09f94e403fa02139b6dafdb5a03d3e19535a8d6afa4f588e45b780acf615fde77a73c4e93a9fd2fe6fb802bbec759cca4859609bd035c15556deeb8c60d9e7600b3b9903d0693be27d5356d1a11bc9d1468d559c843fbd53e00c04033c253ea97d2bb6473a50685a3e91a8145347e0e5a6368ac60b1a1abbb278108d6d2453b84496235b07ab788a64bcefd24071189b312019618b18711b93e0a9064c327c2af049ddb845282695ba6344e612744af88e12d2b520fb388e0c44f26066fa81b8a410077849baa3836b7165a248090819069fa37f0eb0df6bf39fc94d311a8fe35c40e9943d108c39b1f8d90e753219ef567662e5c138164d935c5740b81b15a15e8d0f934cfc7bb347b39cd40f4305603d10e143b023009ce32eeb8779a68b7c28795a4422af7c2ade61d02c48777f8908876b6af88d36beef580d523978b34ad114a205846595704d75112cf03cc91267038ba05b0323208fcc83481834bccc8320e69e62d27e6381c5c9b5230c6188f2ca811ca1e262edf937485928ecd556bec2f6e2aa213298efb33ae2b93f64166bf2ca8612882308bcec3a56702292353c471bb9aecd489361f250816446782e3e344a5fdc39b38b58cf54405eb0e40f814714de57c124bfaa5b22c81ebb0110b084469d0f374b8f7c84d3f3c4cc7375c143a98a0ad931278f6b984233b517539d15bf992e21068f8b94488aa924030161355afde2b2f778181ac49652a4a49ce191d188708efb3435d71215a95995e51eaff4ee420071a8ec4b3fff48e95617483f45a921a6718e9a83d5b0084e14a403141f92f86244ae54b064eb2fdfacacacf5a7227c9522446ccf6b13969c0344e4b208d322cdb0d8fbbcb64af2ba80f430f64708a344e342a9bb7b884a81618fcc60dde9b2514943659de373f426c75ec4d337a9b68a1ce57bd3d1381b835774a0ad92d061d12531a4a90f19229f1443bdd01a03e923e85decaccec5bead33dcfd6b8b3a0a09cebd5ade4fb1f5ea80d68916617df67f94ad1a9e6f8fde251208f4e788e3c82c184b88d08a75fd1ed2580708fc4581d7be87e2ff9fc66436be4573a51301a14234c05c6a827f05d010d43b506215e6b8e2f472c35a58792489892602a16782380b268b45fc9f71d4ed213bf295e3e1660f6bbda389614f4d72ddbf1aaf7a3b2ed65b53498e575d2cb17db6d3f04a445e597beb4c5663c3ed2b2ab18173ce831d7f9995f4616239f8b113a61d13cab45b6b6e6f042ba0efdb4dd315f49f072260e0aa6b46717b3984594e181409d48e06ead633a2cba1800ab734c1208a798fb2c853d5266e6d02c621e62f58bebe25470d68feee9b7bbd89a29fd465713042c223061fc736acc6d329886a6e06e4c9f556033f17220821bdf3597ac639c83a6162d5225ab6402e71ecac874221040269c0bce25666786d29801576a52cd3bab5c19006b716d166ce9cf92e30740d82d49b0d8aea731738553b97afaa97ef39fb14ba08824eec8b3d88e9f21b39ad3780c875c3ff654b64d60fbf87431a80db87fff918b60bfa709080cd22c771df7a985d96b2e5025c04699e8959d91d5fdee18241bcc7d548d8699452f74e8314b062ec8ca50fbdc77b6b9c47ec642461587aacc2c912dca872cd4ccd1c7a91cccc5be0c8c9826c9dac57545685b7922e8bc33d590ca145234b45a6522d3f60e369c0295508a84e5e09dfd169cc56dbaad13ce5d09c80628c78ddeeb964111178e9920b8975612ddb44dc8b9bef9e4f7abb357e66ddcf7336c963390c189ab5ccddc86a8612cc97bf1acb91745c3b41976e8268751ad627f33947ba0ac2d1c08c77d65f72a28ec45c82615bd5f9aa339937aad951ce0c0903d4e0e94a0022f3c24536c49041036603e2316f2e80635eaf6edc8d7a5853b8b8a121180cd97acb32ce297425f7a3823a39ffb52c8ec5120a6f8f1bad907491fcabdcac761b99340d167351636888c5967f2ac38235cddee24923e1b8f1b08e4b58102f4dc2dee028c10390c92f6c022fe130d7d78d500dfce71ca001506167a0f48f0b8a21502c3b0038933bac40ac41fe2b90e8ed15944e7ec1adf1e50250368882bec25c835b0ee69675f7837786774ae0790c0f36f08326112fdc5dc4e77e252310d776de7f6f1f7b039b644b9f2e30bb4159cf2bab1418e05800eea487f146611611527d285f0b1bc11585d4c90625bfbc9f85ecbf05fbf50cd069bfd319202bedd47e5fae40abf2b3d8d52eb9e5935e5419fff92b7afa98de79a3b8adf422c05764d4f3682799caa088b820de2457742812656994556fe6131c50b4c7743cc30d0c0ab657314f0aa65e1ce1cb27707cce9e6411860b3a6393bdfcac561736c1e201d300b3c734972e7fc037afde6ce4358b793e91d58782900a258172f22b058cc4b2d0aa4b68688d7449477435b6603e2b57003a210688024c2bd3d85847c5b70b6a7835a6117787c75cfe2d74a4fde455dcccab22c0985f3c63432ca8c5559c975c336512dd2d209683c2707cd0cf16b726306accc60ef6fde709b265806b53435f894e224a8855c970c32b011c97605fbc24a21cab18f0263c6b14de5a0ae5262211021072d4c956e1fcf3745ec577f6a94367c2e51c49a4ba49b5ffc266d1c28f2522602aaa6197ccd41f637c356038f5ab036ce4525107d5bdb5dd39b7851e7ec21a804fe359120f958aec48d8b7bce57f145c33975b7c45471c9a4c3844f6acd9a8aacac254d6367ad6827dd29bc8fce414fe40d193df5171046ce82f8ac06cf62e489c99685410efa245e8cbeeed9021441e6fc322fa77559f567d01b3957f436764c75ca6f5334b151860421c6c5c23ebc1c6ecbe0aedd1c9fcc692c0e3b26107e654c49b983c1dae1c358a83b48d346e22dd9626c44d659da1bb5d30ded39d2f4adff0c4417073c9c2701096302ca5d87a0928caa05fbed61e3770a3ea5f8771b19e09c90d27211ddd494cb89474de065412fb280487665e911c85a014766239b96d104429d9e269cb163ed1ea6a6bf6e049cecf20f0cf3318fa1fdc34136ad1d7edf41f1246ed512c29c476a6bc5b4e57e32a160d13e16191c7455dcae89be16327750939918bb4889c297a71d74202b59ddf4107cc08088898db44471757681c1b811aa9b10d1c31677c5f799681ba26449f77a8b62c9ac04f7234d3e9fd12f341ab7ee46ba2aae34ba28c0888a30016f00870d63c6dd866560d5f2b48f1b99477daa210573e64a16334c7edba8fd4ed8c8acfaf056250e0578f51d049f206909e128fb3bc6d6d64d33711dfea90a717fe79c8d80e1e5fe97802f50e9745c3bf6d04b5252bbcc2bf72672bbec909cf52f8a008003136f07cc273f51fb55a0a870f4be318aa72bb18ede2ef44f68cd4b876f8d63ea0d8baed012c0972396a6862c87b04a9982b7d5e3bf48e10f4dc0a8d6fc07ece1c690a0f66c23b6fcbba495845654bbcee635dc96b41c66028c327c290575de131145b240b4ab7557dd3a54590f3b9343cc3ce84009873188908fa4b43caf240d2f3d204c155fc10021ef72265e613607bf8507b529c13b14dd7fd52f2e5853cf27a314384030bec71985069820b5216355ec061a3aa884a85ca454dfbf55c925d61840bda63e294314910085d677c14f933d922397e999d98c6315224ad8ee47a16ad0cfebff0bd74706299187546e9c4aec563123c5d69e357e7a9671b38d2c654f428b6a6a148b0e93c285759b1dacb88e5972b4d0a9a635bde211de3ebe444eb0a2763e7c8d19ccdbce9a7577a4b53fc1be40433ec23d481da24c6d3369ab34be671ab7f86ffb246b6810abaf6d6872729199b1213f21fdba4854c4fffb38507124851437f82b2d58f7a4d1ad0412621e5377d420ad070d853d823508beef3b1ea9f4730ceff30da57dacdfc3c4c3030fc5a9b9983da21f48890a9cc9b21866a482763fbb0bcdeae7ae3bbba26a5259ca6c08870ebc4f3d71721dba03ee07995f3fc6c6e4e06636de8e79866fb8af308a7f1b445396894354f23c34690878f52ca5c41bcdcddddc81a7f57651f2c161c8964484b37a26de3354ccbc02d0e0960714fdd3064f9626cce14dd8a23cb03f76e9d729cdc2d164c93e4c8631de5b008ea536b96e465e0a721a22e8528daaa2f1f3da0b353425f59f8c779a09781da84539eb642bf446e9fc27043366a73fa9b1f0586ba991283c0d43f36d8510445cef97438fa26c2f606954f231e63d93ecb06648e3eade6108a4834b13c047a1d5b8367f268d7db14381f9ac55aadfa95ef728d4292b7ce17ed3140ffe1132177e59cde7d05f67bc3750ecfcd85bf22509de4fe6fd346ee2d3cfa99d196a2c768e6e9a62f13c225ebe0aefffe26bb3e6f06ab0eade9a1fbbd6688aebfde0cb7f3b48b094431c03a75fdce5f4cd5dc61c76b963dce72fc16ba82cf69659d30302a32705450d7e4c3710a0e756c816bdec780dbb56e747cece6f9ab7bfbf4cde77dba4eca72cd4ab94c2cf278ff05454a900317799f23d0e97dcb2a26f6bc21aee204b23977db649a4d6730a9e720bbe103491126ee72868893262ac452d236c1cd53af46d267faafd5811d2a004a4f51e3e2203d5998921c59badaa7e865dfb6f50e8ff5e613a6f1eb000b06a7b0e282afb0136315fb54284dbe72d4c0091f3e239c49451a9884afc2d7b792480e9478b075bf21f76654f752918c01d9a5b9255bffaee98264f22eb7d15b91e2262e5ceb941bbba6ecc76e8d580a04a1434a95827ad2e00dba321d7829b6b42be123213a4c651e3484b5a701b29d84110cd20512a9de8e0e6516b192f9302f460b6e609d1fed27b90d20ec8c3412a2d1534fcbc41a0c764626472ef9468b8ccee473c11571a3feeb54d43665dff34433e375d6337e605b9762d5200025d4e5afbe76108d361167d5f830320ca325d8c89de0e101e588a4f21dbdf35a61afacaf2c8fe0f020b131f4fb28a88697d52679800c64f34761e5cc3b03c30fe0da15b12379cff15dc7a602a912e1952a1dc154299c53258294a0cb824fcb494be923522db6849990998b220c8832997feb10aa0da6cca0bdf369db6d0c674e8c7bb90a89411cb2217ff8fc6e44c13e31941762d6cb1e58c80e549ccfe3662569e2b729b58235abc658747bd9cdb6cc5cf27e21871ad63f4917f75b7d050265c54904a17cf4b337c06ea40f1767d3168246f131b0dfdd88a79cddfe09cbb1ee7ed428fea281b8d9c7ea2016d988ca008b273e3882a8bafaaa3c8843304f315021a2d423c386bd4144efb823862325774fc60426c10633f78f7aff77b278258838431fe020583a823d13465aef2cfb3aec561e4e2c21364cad9639a316eccfbc75f3d46f8a7b0613d367eede409c9cf4ad06f1d20e5a757f827527db092d255b3811ea240feb85e63abb86264325d34a7786a613cc13335ba40e8b86934e95f78a4f949fbdcdfdae182f225ab3c5787e45f7d1b46c347dc866bf237061d5c105816612e5ea3ed07840ff11368c28ee80b340b17429aef3ca64e647245a97c889cf51f60519449fc617cea311fb92e5cd64a6bff03d70785bb6efca340c6f15d912b93f2a5c960a7a5362cef8464569277bb1134efd42fa67e0e0c4e3e36272f79879e520a7663b03e1758ce4d1938bd17003af7725fe2b21315d242a543fa2d29232b5383ca260e78e5714cc4c43837ddd35e71175c9cecfe38c037d74e4cff607ddc1e4362f879a5069c2ab147e8888c4c8c25318bd76b24d1b5839b484c1a4b446d08ff3290292029e56f114a4a6f00cc5bca94ce4b162e8051bc71d37c8e6f67516b5f19214deac66d24402e59e33619a8cbece4b81651ebf2feda1e2ff9df438d93c0a41945120c536de9bce40b186c9c59af855ea8c7f1860f86f627cf6e8ac5d702ef34653bd30edb2f4017dfb3f0aa5e3983729652b159ba9c406d9cf5a1194047bbf62a795b9ce36bf68d336f005b6c9343c7947c1f31b7bbf3db979b1dac18a2a833e84ed431265fbe4ce7e94894257b5363d90a08afe8237ead1656c7fe28e7756f2812db4f39598f66a5a6842247fe00e14262c72194106f9f4714bb4f0367b9e9a06e99521921866e126c10498ba6a0992be6c42539b5bab5d462273b96aebf0c424d8bd839f8346e677c9597d2f15b5f342e9a3e371d4e4a27b559ba69a1ad12e797c52a8d06a79a89ce3c45ec3218b75679bb16ce1a201478cac04038839d4d9a18fa3996deef98a0eca2f042c9fc6c3eb18ae752aca0c7a57d7a9a849f4528e73d95e0979ee8eede93d6885aa5fca332392df00983d1a3c34281a005bb229246dc776b6d0cf5be9bdca415a16a48b4ff5e32520f4bc08c045e0777ad675f4cabc32b279181dc196330d570f8d534bc2cb242cb9c4ced58947dc957125b93de256f88b15103262fbcf71968aed0b29d7a684090fdb68382c1d4ee37ce8f0fbcf1e46d56c9948f287452477e2744d002522008147643465d08f55f8f0b835ff173d51a73bdbd8fdd9398a4b38151b566ade04a4ad25ad3e407579fd6372cd1d52c6368389c9671aff9ad7b459b8c3c226ceb36a0d313f04eda0e303452fd70667f3c31991fd10f0f0cb139e59c7c33d222209ee5583e920844e0b093177f642cc38c1fc8622f7ccc86d37b41e1ad9c73778f393220cca5371eb690116c6a995bbe65711b0c278f0a20497cfebd34719a903d64947b7edfe717b04b92d88f98fbf97ae58c35760ff88faa918cb922e3d2f64d3db176f9cbfba579fde38df7cf5aa6675c8e039e0b51d01a5f0d508649e2d3c01f7e4fa61ea049f70a053a6891ce88281a5b9ca3c5d0e2aa8d6dae142cdd121dfbfed072dd0ad92354c162c7d95634ea3f24081c9723124dbc9b40278a475117503c88c9297045e76d5b374b4cf3e8d2449c6e5bfb136ccf60723ebaac162c1f60583239e48ce08af76b34fd0979906f3cb4c645a8b042392fb7986003d1dfdc331252ed3f7b8e27bd5944e4c1a0093d7a84b8c8e600c8fb7381d009d06374770a930d55c7fc38b4a7138f9153dc801458c26fe0c30e91ba400839484f73f53ce391401fb44a880e6a8a681d0d225040307da4fd27bcaa72d47d9edbed3bf5e66332e8e411b104df2ca0de895eef674a8c05125e8e51ac6c8c485881a6ec0180a78ed0aa8d16fe1014de8ca714c52d424cba4c0b3b279845e10c0867d14cd742ee89ac125b078ece78c6dc62f3f8fe16688d5ef77a20e33fdc21a5effb6fd181798ffb285d20b19af70091507e23dbbce4bb92339fad8ec89743539576603da2bfc84be05097b18b7517d45b5e9ac027a1e12ddb4bba17639762ecc91998fb088418184fd875752e1dbe33416c73d003fe75723a4b64e069d46d57e9f46b4a81ec7c4c8ed19f017bad320407306f74e78177fee8a78490ca4c66cbe598d28fd75821ac341ef9a0b20413a787d2dc9abcf103370894ad864ca610ec3f3fd312ed91435f6999416430db1f24201416e26c9c1568b62daade78588856e3ce2fe3de78e3a6931539e3a894b91849d3b819f821f230f0a6a72972775adaa36818fa040129549ed502448e3e5fd2b644d8041e7fefa2ef3e769102f5cbe20fe84605d452a970c19fb9f161c349b4caed4db91944308c1eb84e31ed9e59fd9df479b91fb1b100ff6ab71a978ca5597fbe29f41377ec4098b5e6d9fbe753badb0ddadc6251722c4a56c761175ce582a2beb707c14986cb61abd1752f5339dcd3b32be5eb4bd4498f124439a77e333093168c64a26981d7da72ed46ad6c60b3ccd190d9db5f264e315630e2c0f1b11e811f31d442564139b1479e8d7eec48c70902b5784f423d59e03fcd963606549bbb7d2bd065550dadfa28565326bb01bbded3c44db465232c525be3210eec93ae4864dd36ca24e837c89e12bf0441ff828574358dcef536c7bf8f0f77529abc90deced0a46310e1507b80fd22e0d46ae25f8773a66361d036f3a686ef4d1b79f246746306707776e6f30a19151670a206c7b1dd99bc074f55310e4b25ef963a711bfc546ca5c8d949ca93c045cac4eaeb8fb619a8360e91bd5550462dd5621e3af1871af40250f93055aa3b064fe56c9ae25324e4128dbd30d1bd24b4ad1efd2e90bc53ba90dbe0e894e77026af546ed5d7de087f0fcf39710ca9c51ff8990a9567532ecc905622abf75e2a44494b7d788d3614ba0360da9a7313fb06c9202d5f36a2697bb628c1dc280d0a5f90125a9dc6ef7b1dc954b05691e33e020fd643bf8332bbafd4f602eaf68815ec7acb37728627d339c478346cc7bd53d9ad1cc487e27ccf11c24a6ba398219ae5ed3bf7da3c8f68c0040184b46f8ba20b41277e0592c37037075202b37bdaa3ca0886f3688c0c89e7e14c77253bd5c7ba380283a43e51d6184615120196527c9cfaba4b97c5f789bb5f143d19a15ca97e253b98ab70a2f616d7cf84692a73396e8762a3360c291a087f254d6015b48b225973123caeaac90f22161a8f006d43207c03c2b1e8f3361c4d6457004296c1cf89a474d7a271dd856b28beb449b040331aaa8e337ddc922716e7c51ea177015d56bc6d2ae3cac952b025464acc398cb0701ceb4d5e4f1a5a0a0f4ef51686034ed49ced0270b66865c9742f8d30e3154a1817e2f30b6e9266e6f39db00e0955e8e282db33a3ce3681d908f52734a9df924234020fd87faa8ef81789649400e16e82a993e7d983fe4397e4f0e8207f64a3fd4bb12cb11f9451a884b7ac548450ab0c34c6c859a64392c0e4728b48f4c8626fd307e3005c4c28f4d80e518bb17f64f4e4fdce48804299b066a5eb12dd15c959ac93f8983c6bec5d07116d642469edf16d401ada8ad015604ef8520966551edc4108e1f91c3115632edf254213e732c31f992e01b4b2f55d4f3c3f8d92cb1298bef25861038b1a7fd117aad5686df02c88b6a46bf51e23f42bc66d58300bb13dcc934cc04182cb20f505b737c1c2d0fb73df0c795a1d9260bf88739937405d5ed460e051da10ad722a98fb9821f6022c5d8b94f49f46e5eec0c8e82e9ee244e35fdd957d9eba441efa6e978cfaeb7e51f350bf15c4cb1aa57eeddfebb46bb5e156496f681b273312f20e7754bb5bc9e5d1caa74da630515461673a834ae574ce96f7615462651be17e026788d1f9129dc4711dccd849fd107b24835c5d6ca1c67154ea6f7e5137e3a8ce2a7e1deec25e6f82dab9a84970536f2b54fec906eb8d408362f5e0674c3dc2c7b7abd993e032fbcf3d096f9cfbb0e3a2844065aa1ad76071f5d04dcbb7fc983917871ec58e5632e01fcb6b4a3049d2d51d89fec00eccf177841d90b72e9e0fd9efb8dc7147df70419d9fbb0002518714144add4950a9040532ab222fcf903c0e70f2f7e7f91a55d0d6c99f441077561c67dedc5d27c5404cdc439c4da3b4544a042a04c91c145914b2ddba8861c25ac3027639af181edb7a5e96cbdba507392f439134ba936ea1f77173244126aa0586aaa8d6e05ad1551a769c7f9ec09e6f8687eb4a469f6675ead15d8a1df2ce8b44d43b5d4dc6c3abcf061b1c68e1368794b39d396f2e26d731092062a1e01830771e46d4b718a72bcb18aa6bab13689438db2f49fc95f90c1e4c6c63b17c01237b660b9405f241ef2a03dba96318b4e9608b0fd78b2c9955f2cf61b69594739e39e8dc904daa6264453bdbc2864728c3b7cf705fae7aff4eae31be7e2f6a8c52bc25218b533a0ac58f3d175baef3c23fd88acc030a3e20f91f8b2a7f85a1bd620540e40261ab5e2f4337a2e9c30e1a861876cf0c14e1c110b0b5ecddbe4d38552e90800cd65a9eda4c0f3aed860866c6a59dce7753372108d88ee75e99f4c70bcc1a746bd82cddd6d74fe985d78aaea4a01c1824847ec7bd49ae93e89e35b618ffd89371bc3585cc97f3fc90a69a4237efc4c2d44bd5d08c12291a7867374b129e340fa79e6f7a94cabeca2aa98e16a7bdfdaa251b337b9acca3dbb375c2f6a41088288e8b26d56beca5c309bb4ce9e95c8952995f996688f6cbc037535d80249b3b3b73afe245d71351bcbec1360dd0b524ca9941023f82037ce005d1fd098bc4b03a26bdbf4d0bc0a00761d9e220b033bd40023e29656bc2f828e4546d94c105321967479c7b41203cbd07a5fbb67f06c4b160a5a1b4835e0f96c6ee72d8bddf8ba459e630d0eaa3994c035537a35f41ce20b1e099053c1c24ae6480115e5f9397996a3d5f6325c0300c1cfc7f633427a01c1d8f0db0f0d614096c168af85bac6ff6f5aa68cb83009225139c1a199d62fe6fb19a06d016c7b030f3e60e3f0ccf5d947a133d1d731a7c1f63735b22c67085744dfc9223d5e705eac1df42346e2ecc495ee249572c821e3de0bab4f551ca7e92297e7eac6ea4f9e6820a82122d053d7ff068ac6e88254ca4db6f68b088fbe30dc843a45bddd3e5732a4d4288efed41422a347fcf4e8576818ef1c91001cdcd0bc4c03ea47061f7411c39c169b8f239e129457b7a095ab0daef12f791264a8ef44cafe967633b9eb1f6618e0a22fc725fba4addbffe71032bd333ba130e89d19b95a2a2efaba7d5797897f5507f13f0c421843017095829e8407170621dcc85d4927fd5041f69c0e0832896c6f08b41a14b1fcc199b37729115026d41426b2aac2a9045d4eebd3aadb9cee94c86d44ad4466afc881060d9e0d91c02ca953f52564c94b81070c10bb94cc4825a672ed7bf4ce899e850f37d6ed82e03f2645d01c04897ded0e271b2f72426d474b90b5f150c57158d162699c33020146f0e4604514ddef7daa0d28918c80d301889c4d70a979a15c51612283b8de293ef5283bbdc1a311d92f5beadb7b302a4aab1bfdda8e8ac8370337dde7c7ba17cd224cedd7e63107b3777bf704b94974ee710c4701d107bfc503496e0ed125ef8f81440cdc0f16786ed165a7b9baf59f5e3a0295e4403e1cfa620ccb23329bb764cc7efe4578bb0157f568792b876f7080b1a0e792b2b34904807a453c7c61d2bd6f117da1a2c7545bf9ffeddeba528289e1ec21c2c991c9b81def7cdd69130d44c092874022a67614a0774cca98b671b1fe5b6430654c03cf54110ca75efbf08ca75ffabd6831120bbc2dfd46b74e8b0e4276a4d8a12753734bd29c027d038211aa1ca8f96907ab33131da0bee071f8b07b8e68d7f41dabc615ab8362da4b77078c65a3e41386bade378936706a0b0cad2d9560de02030ae6f01a5a715b60b00628de7314a0ec3841c83d5ca4b550aa85bd1eca8011498c0ff4b87871a60872b07e521484bc34335546c23a529e6c8f1c2f274c9a9847bff3a8059271248a39a0cd8a0e6f6fd409b8bee15489dcf02c126bd1622545b1389efca129fef2525f201d3b33e3d86b51513608d08e9d2897ed685296eb71697ce8bd18a4eb1da98f94e03417d4d815f3e0d83f6eb35aa7976aa9a08945cfaa21cca2f20184a434bdd1999405d83a6d9254f915cd6e47be0f587259342678d29987966501b3f3e89951fbcb2d83a90d90cbfd54daf3840b29c791e1833300c6402d5bc44db09620e750bb5eaf64320a768c3701904a1a09eb0a9ca34e8eca3d455314097895a86967e8b3b701a859843b4404f76900ba411bba07f33a2b8798bc15b0340c4dd3086bcef9189abe8891e338c462a1673e940880ba2dddf9daa3851bb85262b4c06efef9aee82198592f24dcd25111f07512b05d27ba4f8822e3ce4d1fffabe84f75fc5de1756e7a0ccd0146f42c824925a47343ff86e8ca65c793725f18adf1d7226852ed156702715bdb6470ace08869a07a9c085a605139af7f98012bb94f2d0d5f27ce0436ba8e3dd3205d711b3140e38434e8649e28f0e8c38831f20813ab5309ebb50a6e1b45b6807a0753697881180c189dd15751974f0b581f631e15e7bf38427305ba7002fb79fe912298e4129203c047d2b7033f8def1158a77b355d87245f8fcea097252cdfe7eeffbb84d58e4785cc4fcbada26ecb44bcc5d51b626a9b0094a37aa4ce32ff2c5f2ad5d56764670cf40894db010360d32b898912a4d541a71c42b6903a8d370b17e7ca12913a3f9a06ff930681d54b718213fde900c5f871071f92e4b96f6a9fe76f9f6630e56c01086e3e0e3d1365f65f9fc99287cb855092a8e061af0719106ca03dc0232e491803a89f2ac1c8d0f40308bfd125e70099754b5f0685b8461987913c4ec9d1844eff61c7c2a96e0aa4143998dcd132d0adb0a3a440e60a1ad40e44efffb01601fbcdeb532cb48d71d66e0706d064820c4b2218567863272a3268dbeb3888143d94ee6ffc5ad648456205bce5aee57ca39dae8fd48003423380a83b2508658281534596e045c08900a7676c42c6a556b08338b8a9511225de887410f61b0b49e3c6d6a987d92ecdeb04160f6a1aff25b62cdf2fd9fe91579d65e36d19b3fcd3b641a907b20e7026c686a0a71776f0e105dc13e927e2396d725422b3a29b6e21147246194befcdabf90dddc51acbfbcc889bf02f53fc434bc0820b8511211fe5c5d8d1b2afc82bae611dc830a09526baccdaa7b0d274cce381ae1f4f245d356b596e74719d7aded4473105a34b9353483be76db5bd2897b091d20d98cc9d9c227fda2b0862fd23d2db863ad6011980e89ce7aaa0395dd4643a7bc600e054db8f9ea98c6529210b9097731cd8843c1166dc4bf4470e625150718b38eba91dd4e335d095658dc13a7480186b8760c98ed78d6037f8383abb8b2c39fde64cb2d2318ffc8c8c8c9257043056cd9865381f8c59594843dcd916021c9740787636e0275c015278044e92e5f3fa4ae2e710d66a382461ccbbb817faadc2e706c3be9117fe2602a7f840723b9f419ca809e71157ef7e0a7136b5f8308a07c4663f59f64bf075fe0f5ba60b861733820aaed563ef935a4d1c3cb473ba3243553c7bc588a6b3cc6a3275186b39a24b1c9fd3723ff9b5a0b20b208e99b915888579cef5eead5e4da33f1b26e826fddd5adcad7128352b1697fe3df7097b3dd5992b4e6552d9a979091fe84b7f2bdb2331db362afdebce4985fa14470ea29f00df639d19f8372dc0d3b298c7512b1677815e2096a5d05d4df9672bb13b96dda81e2033f2a9d14eb8820e88610bda15b2a9e1d1be360939b0747ca10ceb725d46bc83c04c523103ddccbd04d81b9e68829d04d70851a2f83c2f2dac16e04f29b0254d93bfd93bd79be4922075a1c338bb16e2d326353f0fb90915da7adcd8238abff15b9657706b6a110ce66f0b41c41eb140716f279764813bea80c11b56908c8f2d05f274a26b1e5a9a2c16ee130a832a7cfe4d7fb56a522e905a25c18f2c4e46f3d259fd8758d71d8f81c771ca906381a00873fad7126e9fa51e6bebe22b6c6a59f0e040323e3f7858b40e2a587dffbe3b944d50beabde1f77977126c37e42952a3929442941d82dda8050a03541ab980e516c55382556ed0157c462112a74a0d52d184a2f3a3ad21c29ddc2ddf4e1fa088d60a10ea4a912d52065457dd4e9aa3bc0eaee8f9c59b52bb1e75b37f0d16d7b993c0d26a1c4b3198c3d94dbb91a3cfb672f5c830796161422422900103afe34379d159b35c1efc11e6ed54a122b0278bbe532a5a4ed269dfbbd2b8fd489047066417775e521210bb260dd2c2c6fba9f11762ecc0c3e7c0f80f8aa9418b0f1b9bcbbb4e0289b57a606cc10cc23b46c1bf1783513ad73c2d97e809bac4d00e341b296df1405b2a84b9bf09885e0b5277c40e8ecb3f20ab23dd240b60a641b893f298466c8513ca7a7f7e17e4a63096ca28604c55febffe6324473a9788a1475723b0172ff81ab0ad220d4714749ac844e4383e177525156338736881d83fa76a56263ce655dce8408beb78f63d2832f80a1c5c5c2f00db5dd03745ae10604037e5bc3b23586ee8553636599e743d28a33ac8ecc03a071af5cfb35de8aed732134395bfa6264d97a2fd418b15f139a955baa38b42fca0c27ce158b19feb308995d2610d752aa603e582b8d80cd65545eb90e69813694edc5c96c6e0698bd57169fc0508772628e31d1f73451d2112df135e093f8e46439d6bdf5421080c1424e7963353ea1d6dd882ca51179b6a05064b5b51681d5d349bb27eb4571d12aba2257594bd8f0a9d894f08d344b8d2a24a4a69c2a6b716074381d4c715a18969f819b0627f3626d0e330db9165b952e6fd644107a7fd8d422b75f7df9ed67f5035485ca617c482d514fedfe72da520ccce30651851412baf11f83c6670e9935d1f4d2f563a3896a6bac0c5171206dc4a15c66801c8e546fe11f56009cda2d2b4553947c082800af5ca23a7f6c162777511be088a4921c003da18bcc3c5977e44caab915a9a1009351d7b9ad43fa58b6dd17153952ad4d14911d248e9e6a383d2cf2c3cd584d188edd097b8ab5f985709e79864965f7f28e7033354e11e851829fb69c06d460ad2b0618b30cbb2893c1915ac3fc5210ce91ae004f0628f18307559037272453bf4a86b7e698e6a7cabbf2fd47d111253ef061182b5b7a598de0303c6a6a56a750ac56b03558688ef65495a6652fc3839a65139cc71c8c428f279cb5109181f3b888483d76c944ffd18640a5a748cd601e36831344ded045791c6457e5be7b0175f4b94d21e2b93100da21e43c5f9c807e98ca7555d6cecadcd5d7511f0fc30e60b4029fb416f8ce3aa69095ec1ca996ab0f432e8bd6c988c078953fa19c2e9b30d5d942e6518d7779d5e42929bbf4cbb985b923086928fb2577d1ac2aed47834770e4286632edf825c7f1a4995f84abdfec43c1a16c7b2370a62e33871e018a1dfe91c2410bdf28419ad05c8e0cef4a1ec91cc19c53fcc2bedc5e8fc5eb196c5d5a83c14b0f3163553499510150f7c73f0778646f046a6507774c32b70e5c921c448aa24f8188940bc7bbc3111590b9200aa969ffbffb67e81f61c2037e25b4b55ff2927af8e21ff380382ad309881afdf57a02575a240ad3116af3ce7af927f256d51552831356e650f93ffe177f4dfa6790f2ebde9fd60634942c606c78a233696d33fe481ec1e688051d45e6c708ea24ee2a30fdb3a70ff3eb6e7da9ba1110f07b9ad929f22904ba8b6157bf476be0e6012afc6edeccc80f0111b5099d123431a39637be9478300f62f1a3652262d588e610753a9b386d5073114f2c75a03609ef1d77c8c6b428081cd39ddd3385329b358179237d13ab2f2f76a4b4d05a7cd9c5d39774cac0e35e36badd0baac2a011a18e18e473da38c7c21980185e39432ac11d930beda0068fdacb35f06fee7d8c239bff62552c3923c02f2f029cbd682b7e8341f772efe0c12056eefa017fabfecefffd942ad144ccf51f753a99995dbeab1fef220bd34340fd83e6f1f7e696d2166ec24440d9561b18a91f76d4fdc0329aad13e685267c4066b153f3c02255f0d0a5803d3d6133440246a56f092b9a9831b25b213bd426cbe20353616b6a8cb3ec4351cf176613365c29d74fba8ff53129a81113ced1ac7a9e1f2ce08a163837194c70fb4487d8a6f27f22bd2ef43ce7dd56d2316ff719b2ad6c30f928cc1343e53eff34db527a41b1c8e64e99cfedd9e9b56476fd2bc8f924c2bd80fb860cb43d12fc7f961e5058a792aa3eb4be472c23c23cefd8bd8bce633321d9ec9c9dbb3bf151e3d4528da096ddce403ffe32d4c9d71d6b465feef1e2e1d75da70359513f16c95480cb64e3fa15f8f91278fda44e9e60f8c5242a84e4cb13144480955a28c8c69472aa71aef9a502f8f6d8d27ba928fc1ccf7f7bfc0405b233aa337620fc4f6760de018510e5bd58208b59f846c0a6418d05ca47f17e9cd609ff63efc2305065d7bbc4c31e5000aca1c915398b211f2e260adbb80a231184d94508a0e97404bc228f38ba2a5bf6788519912b06eddfe5ee325a800ab2cbffe338f4107d663f5b4c2f02036c6a782c7389f91b199cb5a28ea28dbe121cd022ac2cfb7b2a8dca633220cc7b5964c91f6e25b82373da1431a1091489f6e6f372f200211c86c4c5c5c29d7e2bc017379ea7d2c49170f30b466f7dbef2c7bac77af5f099a518c4eea7b204746c14dfdd7a288e92a7e13b63e2677038470c45de6b3015f725e3eaffbf8e1a0061c59f15b720b180fccc817784f58370dd0d8916359dd9868f8523c9372318a1bc7cc5d1a63a60d1c7108a0933d901ec4a8acffe79a5cd1cf8334846f9f9b2284a815e9be0200ebec58ec0104422810f33a23121e5344a603d87c5012d40c1e59243431d57c6583e39d6e0536ee92c4e3e7c289755ab13c84271efe74fb5358d1cf6202cb1ca6ff206fe0002c8445d9dc1e2b306543776a61a70fc3936d72ecc69ae4310122f94a939b3512f427f1774f5c90445c15aad436e7d5096e99e674418ed6e98b7e0885b4a7318c88523821e5fe8a22348420cc3167f0a7c3689fb7fb889a602eeba42fb19db0e28302cd086389b2052f769e8a76dd417029bd976711097c686cd587982259b9db509a1bcae272c806f7349abc70746934ee5328f25583860948afb098641ab6328d7a63d4bb40508c63af89228c06a69d8018bdc9f00d4b256cd26b06de55ac39ce6a82384fb410bc3a3bb151c82baa607703eba5394b97b82954284df5a3294e9e7e5287dc7096b510a009332f8899001508c3160166ac5e41cffc1a0d10144f24e92beae5178bbcb75e4184c0ae90e0176d544abb14afac751caa5d2588d97719f9b1e694e245957a404321cf18b4c8dc9b66083ab3408b8fa07480c25e75d5e0c5bd4429bf17740978b3bea30100dcff1fdb0e173a1ce5155045699ff08119ff6349c69177c5067b4422aee0932d85b0ae60422bb8ea9e423d5f8245bb304a79648571a5c5e2011a2092f7298e6845e311dc6590377bc562b7b82adb7ee2e4047304f27b7a723af3a0e90fe8d5f039fb2b731ac0f4c3c457f370954e620e994c7f8cbf5262e7eccca5de199ba3817912f4aa7ae1e067981e7c4ad81f2cb3a644e367a43278b09e923106efab35b9af5811697a5eb4799a58e2c064448c6a8435d23fc65e49831f3cb8159431cc55be89201cf51b7459f44cc25a1cca1319ad75786db0caaac92ca2cc9b647fb0f0b3058e946763ed7aa2822f6463f11433ce16b5158940ed1bc65f98dea47dd75b63119d4b2ea7d4df67cc160b304a44d079bd8e45612aef6c435292b32ca15dfaebe06173e67c7b41e4829fe63ac05c11732172fda5bde6960e0d9a3fc9845fcf8d405cb7b1d37a928f0329a7ea1d70333973eda8b5572da2bde8172324c62eb553580b0c75f2341aa83d672831fa3ccad0b2f9b513681cc72ff75f8f5f4d8777590f51f6fc0c76badd80c664e35d0f64fc3f6c461bf0dedc9d802f2eb73513c38dae582bd716872e9d5f2866cdecf628adb30c3e7432ec36be6c70fdb4df2b5c7a954d001e913dfa7382abc451837bbc2680185b6a76920de227f2be8d5ce5ccabdfc57aff50084010655c64a8c6d94ab199bb45b9e13fb33970fe6dbfd2cf34f3da8713cf2663f4b7796e0a02558106f4321a39d5ddfe42c9ac5fceb909ea33f870169700057704e005ea59ee7c3f3987ca74c85dba3ef9f78a6e752df0d9b0c5b26ece3fc2c1303ecf01021a1fedb5c25f9b6e0ee810675c625dfdb5304977deb26d401cdd0a15211235f0946aa8e3ea1fb8296b98a1a1aa62d2460598d96f87a4bbd29707497b0d4a3ce891e6f3ef5b5f5d627c1bf37106c3ba0e4fbef9ac93bd4a1d1263ad37e5e6b341ab92daba0c840741567a1e8aaecb3a30961e2aa6ff24a375f33215190840837d6f1a879a71ccaa187954e6f4965673890e1a49b7b3a5148a36447eebf8dbd302b1f5e54869676ac174af1f17967b4374010347e31fd9a0b33de35f2906ac3e9af21656b3363ed7e07d7589f166e3f7922c9acd47bcc603f9eb6b0f7217d9df23dd59451f49b6de9b18536baa3ecb2cea8eab09e589be833b308390f09d4959445aad5971793aa7b721060cd47f40b2384cef1226ac8b6354f5804a0c77c946c41684199cc05afec6c9b3d6258c0a893cb83863fb7f5e848bae93baa31b2af8af538b25e2a74270e1f1ed9def763ac8b6ceb6702c8f7653e3a8296885f6864ef8b575e7c028cd14eba96146e85fd4523c8dfe8ee3705c3bd858e454b2f9f2a7360b628a0375a094614c4a0871433db1ffca5de7965b16c9af62e0e089891309a664edd81316d815cdc145df9e80457b3ea205cd656c2b244b4e000e45207f8b2c702b33213624862e92ff447df3563b4b8b3e6085a0bc5c1eb461d005583f9adb486e648c155e74ad9bd7d525af5995ea01b9476a0188471c9b59d101aaabeec00ce5ac54c861d5dcaa1cac7f300bdb964f89dfe49846073089fbe91b50c6194a98640406817be8f55261f7654e230dc9d3f4ed626ac32542c7b8316f5d488d3f4f14558df9987e1cf8663b6f2e2ec2180fa1404bc2895f04a10bb43a10808532aee42c45bb885b03ea6b5011d9d766c0891f4059322d50d660b4daa89d49d3f4abc87e6d6712084f2e38bc412d70c1a4bed0bc618d1b667afda510a89e741af9026d2140f852ebc4830fc455331a92f1b728077138007c298c6c9c94af079835f96b1c8ac4118ed597e7e8610c63e59cf01b919d98ce0f60134171221706d1733ec449a24ce58e63cd4604857710415ff19ddf0292d8d635fe2c6f7e3ee51d48939c76cfb79658623a2d56c7682556661d1e411f4d9e16b0e396e79011c5881423fd5c673611344d3e13e2576e765ff0ef8eba1027fa33a63043b2ec6f7c655646d386b27a59201a908fa361644994b2778c56e196b2dc80816dcadaf1f26d1f6cf6a3c2ea9731332e3fda0fb55c47227bbe97d551697c2a8596b9bc15d8df54e3e3393986743d2b64f4426a6eec3bdaff83e5c8e57739d401bf2dedce296c4ba089d4f83034e3fc97a198ae62c1c83724f4cac58b5fe1e57607b218a6d51d8e980dc30d4b06bb94a8ce4a309fd995c423137453016777dda588844c7daec20d600b2f0bb4783f8a58ff37845c0e0da958f53812f5a19431dc80ada2fa244febbb93e0a0317f904b9917d594f16d4832cf1d36ae72edc70a7177e68c8d45be1448fa0aac7d53284da693d9546448fb9fc8d86539a9b43191679b6aa9e3425d5f366a17ae63cf5246e699a15013913174013e657d2bfa64e0194c94371e21e499d0e7a17491513bd255cdae6a4b3aaf9c503aecb099f76e47906128c1ae286539aa1e383f520759fe8b507c69a2817fb803fdc5308fd38d17fde3e4aadd2d02394e54deeb434e981e981708180894af274006efc79baa0f1eb988303623af8b6c7c3529eee506e2f60c34339e29edd83551f78d3f8a94a6f3f6cf7702c4bf7150ca45dc2769e8359f7e54a87e75ff5e7ecfc6937f02b1352912bb3a75b07646089a01cb1ada9bff4a8a7cbce50495365746914938de43ce40df78d6c9a8ea7b6c56cf68ea0f107666d7977d97f58e7b49ea0d8510fb01c53f2e0883a45c7f1bb48b5227233859fc342b562d0c9e017e4171f4f990cb84ae8183ba071b9be6155c540f409c4652d31764896be1fc60173a1506912a16ed55f2053677529761a6552fc3fd2750645ee9f9c1cbc07d1ff2ad47c9d76cb411e52950c8b3e48b5bbcfdd45a4b4c3603c86cbcf4777f092d8456cd24781ee7b76141a7a5f9816c8e471502502766331709ca89453d9d7c647c7c25870b79d86a850a356daa341c95569d7a7829e9d841954b5a2933302f5a1aec5b1e505c735e29deb228a41e7139f80bd9a5a06904a0a2150e411dd8f7b277cc25f26724ab15bb2e1695695f0466760569463856f9b5581dfdc3cac46a1a680c2224bcd9679ab3fc26e41ed5f9a9ec00f1c38a754b6975b58a4671cb17b31cde36469232be39e716d8e516292584415a8169dfe1a139d7c7b443b4c19e953275f71d0808b21da44b14c997c8c26dda8234693139a34237c036c41030abbd380664b9015c23c13052146963c1ec209aaf3df54ccacadbeb536e73bd272ead969ef53c1c0669f8f97b41ddc030d23af660ba9cdf40fba3ff4fee588541dcab63fe4528f3cd9c7cdbf0cb171103ea92516159a11a426f2c35f5ba9e0e6e7b95e7bbf0e80d69833468b062b8696a380cd96fe9e825d1abdbe04adf7aa49d03b6ed4b3134e494d0022a48b205ec3bfbe80e0167d4f28b3a9af1b7ca5fe5daef1343edee89e1419a5a15d6842b0d0e8f5bbe0280e6eb420028bf80bc396012361aa18283882dba30e3d31e0dbc2f3aee7cbc63619657beb2d6f606a1205ff069f5944ee075684ee78e6fa239158ec93e574c00303901efbb89014b66cf755b717dc97304eccbf61fdcf849146750169b326aa342c078c52c5fca30c8cab8642918a453c0b3131f072f57cf030044830e1cb05f3e1754127aec31155be62dba239dd8acfd218eed046b6c7e8b730eff745cd9a91f6f3efd798c9a017a3302819153d394711b740da18950ae6deafe6d5271269e6485e7dcd5ff8b0e9c0bbc6452f868e7bc36d157123c6bc30a92d79a4541190fbb1f2f3a93e936070131e06d78f6f9630a63968809dc0bc0f8a63394438148da2c3cff385f1c3146f13672414d0888d6cd6e78fd384cd366b88233c1ab551917df64a43f9d533d7a7431b7d0e2c6b2ce18a25e7cf9fed4a4db79f4977923832bb222f6261ee4b37b733bef30f18f58d64c2989aeaf32c618baafc0f3fa5e6cf9a69f4676dd5dffb1035a48a34cc824cea29265c89b320025bf5e90dd1f8623497815d48faf5410beef9419856f9b4de99db63748b438294f331d26d7ac4cdd2e70fd5ddbd6b6b77bddc89bd61a7347cb74f8d06205ac7f8a43ade1f7b506cdf095355bf0e0368b83f82182bc2220100737ad1d1748f83df27e35f6c0a5500641b28c0ce953ac0972ed45652a12a7fd4d6577247126a56f1ec00a11874ed580f3c0b43b8b87dfb6a53e94a018765e685e2fe4b95525dbe9c121a006cd1295c063550ae9015383ab0b9e59dfb170b6768f89c4bbcd372ae866cda6646bd66e86fdd0045fb98dba0762eb8c7a687a550ed8167430e8cce6f3c1338e00d841ae449b1e6728372b525c43729750c83c404b6adf61bde2cecf2ecee863d0936ad0a3df61a322c1fd840a5e2761234033f2d8ae01c40b64d6122cdec28a864958e007522326c14c4a96c203485a2bf9ca347ac7386f015a20ffbfb87a7c30114b813e339a6c275cc0a01d7d771c00bcc69ea178754ff90b19522de6574af3d9575134d6baf34e7ac4a4cbbe4b88a9a39a1c90df37c4ad75734fccccd5c865926a87ae2f98a0133a02a716d8be849e741e37d81373fd846d47962468a515af689928cac866d96278ce189aaf40dd95d768d82340477a339d2516445daa8c30de2796bde548cf212ea06cb53abe29ccbb817cd18147e10b99b2e39a489193f2c7096ce7cd6a4c2600b5f6597ed28e4d61328c8478a9ac8a40dc84fd491547dc72f83189b7a9a50d8c88ec172a5a19afc195de790c7846b517fdd99e9c2ef160411b3a27c9b32ea893ff2fc78a53e105e1a7599e8ccb0cd2a4ba7bd1e8429f812f1c7392b8d79431a1f3127f78aebc1daa8951b6f3c9247a9f6023055520b301ded9f8b3dec31bc389451f35032f0ed274ff5543709dda4eb2170c567f6514bd278ef8ce12d1a3fa7b410167184e76f033f3fe118e771de2327570fde39936a28db0b8740bdb1a00d20765ff65c5cba1ce13a410bde982a33aa186d99036fd8af60964c29d81beb4650fb946087b032b6e636c0917f76365dcb7ca92942934da4ad7574468801f0d21c93cdbf78648e6be8bc9347217b78dbb0277192bf9bf88de1a2e6aa6146aed44ec6c1e5b51f65b413e39bcc26be9deb02dfb68538d3b72c615bdd5a1124e5be0d5404bfb790b35532cde77997568e43b434907034dcf67df178ebe672f7fde44c0436fdfc1aa6849466273a1907d269204abb82a7b740d9904434fe39ab255f34322a07a7aceeb7767a5987b7ca812c62b0ca7be231db6d2fc7733b531435da5c40f268f81053226cd18c2c07b500e6573d48682b83b2d231e67db5d8bb8d62c788e63b4c4a86bbfc55b19293852603a4c301a9dc134acb8dc5e848251b894ca7bdcd62a13c548a591a8c7411d26f46ea1ebfbe9d2b13302e66187be23dbbc52b9d9639f216bb3223110d7c8b25a2a769e9a2ad7813e269e19cf82cd69980af979617b9cd9c23e21912903da137f1c7cfbb4524b071efba69ac2e5a5474da937b514bd6c73c130743f751f06081fd67e16d3fadfe25c6479d222edfedbc10c0d727e5ea4128c57c8dabc11fe0efddab0fc1ae3422c33fad0a01cb1a49bab454fd4ec40d00942a34e5f2175b4252ead4c724cb4b5b4f15dbfd17f263ee229fcc6e007dc196af3f101126d512c3387f87541c37ef67b6353c4b319d890ea7e08eec8ba299ad0ad118c21ff772890836514916e006a0cb68eb236bd7222eb89b0f96d5a87d17c19e5483d94dc43abce1f87315256cba2a398df75df6a79c1c54a02c0a7c15dec7122c70cb6733c532e02495f7842aa858898dee72a8aa8f2730b8ad915c6552bec0b189e3d10a2355739eca4d52f0916b96cafad63c2ba29d0d65bc14654a8264f22c9aabe88216fc1cb85826e540a5170dd723e1e58a52cbd8217a7a1fc76f0f09b6b51f384561d142c66cac9729f0678b6657dba4c69286a768ad74bbf46ee6164e6e28df6efd445cb4897a02bec7b71a415007903d799a87cce321cf1df2a4328de371af7b233351c6f64410d170ba38391cf3afd6339b79d55154f7c9a0461a0e5938b60cb75ce8c96c35e0ba677f8a50114c4e3d1b75250e199827d9a7e874420582ec0d07b708f5b9d67483f1d7c3be26371a02c4ce7d52957e1a888d33dabd77692da05f86dd1c6ef1072f96e43ee3683d4240412836a9b1b132c27ec07611ff8edf033f97b9e237b0f7a33d50847ffff02fd2319b58d1cefe511d3b890d56070195cc67b9928520f9619fe6f0ca2ea9ef2b4df61123265741e527ee29f7801196fd7030acaa53ca291e5c1e02ef5a0f3ae6b0f88dc4e89383f8251895f9711160dd19a21e89a7547ccfb0fec334917389ca69c9f716518771ae2e5491ca47c75015c3360012fa8390594e584214a9f81560b070e11ef643a075c14fd77444174dc27f442e2e208a755c9ed85bc43f3dc008d22ab88ed9063e4e6d90448ba513b95858561470455b4892ef31b9a5770e96559685f65c288aa8f2cc7674e064a81c8ca08f0f7198f3d6be0092d8e084471411c85dc3c9c1b21e64bbea575e846230ea321b09e5c7da89e22b48366359d1df800136c9ceabce4f0371ba1b25f1672d1835787762a81212c2f9abf5a7542bf3dd8519a9d905c05edbe77d7a7ac3d4c4fcd74a0c68cc86ff4fce05beb02b918784b23332ef3605adbb6171cd1f0ee005cc0e59ea8098a5badc84837428606df50d994b3e5621b24a19c1dfd21783d74654f4f1bc310d358f1d3e13beadec64e3c22f42ecc8f766defc315a463102186d835021ad20e7a4b376913999d594099575ee1ce9ff33583522ee319f535507d629edb32f4865d5ab397e820c61e4c6cb144a0fa7e88c49d09416193a18dcd07979574559608432237e5ccb0a3cc598509e8277bc414d76a324aea7535042ec64389b6ed1140c2ebe5fac75dd2188e23e8fe8ad90f5fabd0f62de721e602e716f1be5f4696b8d67b1852e505b1a72c4ec58348b6c7817a1c66c61f36b18104768a31344412a3c4fadfb0a6a3ee6e56eef23f2fc799676c57c5fc018bc4caa5fe2502a3b489800d049dbe21b41da7047eba7156c3626d873c08d4318d2d164ba0c80bc81d3243c5c87daa071e2a2abda153462bd4c7c605d8d4966204e26e470783af856c10bb4d02032fc9db8f1ea53f4f8a8c97093318cd7ac864693774926430855344841f604e8e1c54cfa76bb702c06c8c5b1312e1a926e4affb3237a6de238d1c391251be8c4f79cfc89e9872ab213c83314e7ef7131bb707747a663a08bad44690442f495cd14fc307e51ff4a75f60b850032905a55267705fa23c3081d67031f710dde288553655248308d519dc6b4504390dd89b17f073d8041cc529c7965dfdd347ef8f4155e749f9f8210eae7413516a1100a85fdba766011a045aef4a2f1f3875c9c89e09af7acca042a2239f50c0934a42951842f5979fb76e07eab1c201a10eb47275b0843042d9f331a276fd7e085a08450a25f284eb4a4160f6e4852ecddc57785004cd2122767eceaf9f83862f2716934b5861d9d1f8492ba7edb0a05a996e8cf95fb7c06537524f1795cd61c642bfd9d03fc2c4eadbbd7ab136a34b1a7e6dde2913adfbdcc63b5e154def1c694ac40f7ca196cacc22ca23b18eef385ccbd4ee0de28bd1ac78abb450c6a0390fbee387db63746bc178718a4cf60cce4640c706db6173616bcd83c848b226270173e224172284980ab5925f76027cd6682fd266e3d2bcd6a2bb57753572afd7c8c8da92d94662f852ccf7fd667dc23b84197a61b4b087d7f50413ab0323e173297f449e0eb76a0ad406f497b57bd0d6a9af93602ba51910dfbdcf8cf71406ffca6087aa97fcfd4e15875e59095439bd3a02b5fb1fa7a4510515d9f93d4ce3280c72d7420c51d8ff1ac021a29f0af1b75c4061a8ee95b2d090b4ef6bd579d12f9b495335d1c15f42c77f6930cd68f348356560c14ad603f696d1672772ed8fd984b439107bae355f7ac8d9e3b20b80e872393aa088a3ef2d045118a0a2210a07301c12229d76e686434f6c87673632ae931680c8240e5964543f5f7db7586d75a7f78e8a208456c405842ac667be2bd4ae27e7f70904f09edba3d936f311ac4ffbb6ba1b0943a6eb8a46320ae66cd5cc62c627393e59210ac8cb739a4298732f90ee20bd9a9bad00bf14d68c96f565ca62b18832d13d08801ba6d95da52e56d1336bdc39c87e128d84a1df0325b035f086997048b2fec79dd271edce0c07033c17e4059a86f1c054c5e0bc33265026f9b9a2e8d4a6321feea8332e0a8c0455c12b3e4cc21883086ab86db9a311dc2520deca68994482ff12e1faead46569926cd2a9bff1631833dd53c49bb7a0a8cd8ccb81a57fceb2ddb3763b7ba8992247d1795751aa219d200c641b3ab350e03b5f1e5a044816073cc4bbe8b79fddfe3207fdd0acccb24eff3b0c4771a34c480bcdc4d87e3b2baced9b89f59083293918fc14d75c049368486e9e035193c5a3b90b339e8b9a33f87a1c48f7f642bd5934d1c49889e9aa55bd46f09f1540cc68d9981e17f076610cec0dcd1770714271c09bd720454aceda4d51a3ea1042a0fe91cea0851d36ec888b7c33a40e1a7e18d356a4953aa3ab5ae6a23246701a42a41792a01e442bd9c44aa328089d48b02c9230f924ed47d30efb5aa5adebda889234c955895714820b1ebcd5dc29674f58ccc74614fafde12708c0e04bf9919c69413fb4e9062a8e69caac937c09e5c4345e6f53167c4ace8f56d0485c0451a7d9bbc5255f5fdd005ce5bf062fa967ff305dd287ef56cc966055dc840d19eb11046c65b8b5ef9ed8d625933f0d619b38cf5b2791800f26c81b0d9df414691b4bf286e3c7fc8078d598e790f8ede22a35a66966847ba728dc5e1633c340da7f4bb5f76910f1201c39084d01ddca78c1c86415874c675dde890bed30782d811882ff5574a9f2feab062179bbefe0cdc9d562e85086f54d5161ee320e54d82b418a605479e33129cd4efefe8ee3045968a812f6ec30b8e58df3b3aae725d5f6df1bdb47092c56a5bedc83cbd38c5895d824d2bf19696d07d274ad573653077c3d7ad3d62f8331e79f7dfbaafd55af420fb73180cbdcadf898b1e786fad8d87cb67e304ff5c2d6fe549f4656b6c2b5ffb5b6e784592dbbc166260b330c1ebf51b0d6e164838e8b5385c73b54b4d96577123a4b177ff9cc3205223f33f46cc601b18a0ab69d0130647d29745682a9637336ecd9a6eec8d98afea7163ddb0aa4a8e70cf3b949523e0c5bce5a79cdf65898996f3289ef9d299077e8512446c30bb4c698b52037ce2013f6146861473f600b759db576940c9fed516e8fce7abb76a14e2033e91f51792014b2845cc5ec80734a134319b421a9084d2c696a189753270f8503c522c8985267329d2d61505f9343e372ccc7c316f820f446913f423969fd79949da5020f51a7f69311ebcf43b8667dc53b738e6e5e0a2d53512646386a6549c152ef4fc1f0e858645f75823a0428374d7b15a460c8678b2c71ffe92b7878556cc68cff2722d94712515a77cb3e1cf6e41d2e3102d96d7da0937411bc01c4d7798270dfc9eb7aa4077fc6f3f578235a52d0c8ae86ad1ce0457ce600a2cc303ba92c6865a2094aa710e392e36aa27a35b8535dc60d64c5f6d820d5d21de671df986511ae59f7ac0d7a5067d29afe88c290614608c113031003a3037bd7c45014cce4d1d05a1b881705dcda730408e3a3bb32ada5e7a6969932449a44c52065d085008600854242dd16665b2ad7513a5661652b25f51b5bb6f9fb427efeddba7b127f0edd7e079ed4d113dd9d2e2fd96a43fd113752772f53352fdeee04169ad9c2851519b8ad2010b91590d3a43604268c907a5d68cbbff6ecfd3a2bf6d1f8ab3eb09b038a356282b272c4f0ed893254b16d64a898a4938f341e1b880899224fb068c01319132c44db5a9a88ae4f311826d81868d0e58eae995eaa90391d995ee8504175c69e20a911a74641c115256c3902a99874b2b0869541922e4b5692f21331407bbf09032049399928f188d8868005fc8e08b98120ff2e5b6d4ea62c1177002b264c9b2b5bc60b7dfb61a1a8fa00c344b962c59f6762fae1ed511a28871450c1e23d56849cc3bbd983de5e024bf02430e14c6be97c310b5da545c711def69b138e926cc3ebbe3a4bf8ecc8a9baeb869c74d58dca48df6ca2ce6a4d5b9285412ade5e0a614ea0f363e20a84c10badba0a921dcccc1c3f637018b36f38ed7728436b995c9ad3c19191acb69e3260de5a68b24a5ddbc4a1842c7193aef38e9c59c0c439b79c7f476dc54b9959b38272c282d37716310baa3b8dc84e3a61c5c4567fbef6881c65a0ce1b2a76eb43127f9df3163978db9de8b9920ec8e17e5a47b310ae3df838f5d28147659b1e2a48b119af2409b9e59bd98e98a366d2c897631429b7575a34d2f66639eac965ecc8b7da9eddf8d954fc93e42d31d9bb3d6a2bcf3dae8421afafece7699cc49ab59cd967cb8697b2d265ad90db4f63a0fc4b5d1ba8c74d2673b3199b5e2a66d1c957cd8989bb28e9b46756677ae8d9be88e619163712bcec90f5605bef779a5592d9b63613b2e4934b74d7ac5c5085d352d89aedba4572e0865fb6b9a7635ae251aa1efc8b19cdcc270ac295272abef4665a4f43cb1133fd4a87ef846cad4a8d63aee78324bf2ce9b6def5ea0f16296e4f8d50585718c5d6f7ab1f29bd026b7c25eec888ead38969bb61abaee6cd38bf9832f37d519a8b2a7eab224fb3939d69a5eccf462d6a5086ddff462db77c61d68ed5d92e86d9bf4ca101a0b56a0fb2cb44973681879a0fdb91678e0561ca03049c4bc993d89608e1cccc0850221dc10a3f4f776ecc9e4011249d4c0066fe49ca04405a9dba6610de3b18bc554e2cafe278a41055f00c97ef740e9577f38ca5a8cb18dc1f400d521a27d0788501d229a1d3d407576fd3a6e76a3e20d2138098349185112b022c9ffbca2afba57a512498a4479c5b2a306be007ef4d317dc1f48efa5f77aff85f5d3b7de5037485219af244a6ab904a1f1a66068d359a7aa43ed48290c3ed5952539f71ecb4b4b624a2c90a417653673e0bfe580fd7e654f9ec395379a222c75b584369dc9f6af58ee2a673f2d16b1ce2cc98a932b0ab3c41231b6bf5932eb2a25a5a2ea15a229b6bff51759faf4504838d71e1d86a11e434dc564e584e52494d66a157a888d1354272cf1c0ae07664ff77a601e0fcc53a56a9ae6b7b6b86d5e1a1e6a79df7a6214c66d79470f0c0a4d9df4c03cb0ed1e9807a64ab9acd8fe22d35631ef2cd6921369a9f78d96d2ee9fe90e26b47b93fcdb6b9beac0c916b4d65bebbd177bac8054a025b1582c168bc556d66563f6148b51200ea4e45c7534452e8e867014074fcafc464aef7e55ac1450a4ccca2c521c3c291d84211673073f27b5bd75e33197792ba6c568e9263834feeec1372b6c8b022042770f3e11eda44944b4eb681ad915e6e448b44d97ed72a41347d8b31f101a4633e8f77c0540e2efe0419b9f013fc9dc14862158419058127720d1660984459bde02c5f1194798c6a347cf08be094ab38234e168e38d23fccdd0bdf743c0ffbcee034203b763deb2a77a73d3d2f541b1e67c75e63794e4bf737323476d79ccc3f0588cc2b4cad04850771cea36e9ce8d0e14c6653ef318ddd19139e9b11c1dc4b155592676659dd896c766b87a93b97167672708088259b5a38abbcbb57297cb55efe85e979f5238b7a96ea742c6b9dd75c5b2966c1748a54a0db6596137bbee4820054aaa8812f8216632fd8dedef944a1533b6f9bd609bee45add5df98d2022d62b6bf47a4e50d6d56d78fa0365e8711d0535569ffaa1f8e6c2e37c3f5ae1b0ae32a252895d1685d82d62748d87634bb5d2ddeb65a3f25249c596470c2f6df70a80c68fb6f399b147a7256ab0b2b602249a224ff182b5808a9d0e6e6dafe9bcb5979c378c31bc61bc659b39b6b739d98ca28350ac2ebbc5164abe8e5d512e8c99b8292fc8ab6d54b7b658c5d227bc24e70140c45e4bdbc9707ab3fc6f0aab8e97e16fd8ee6de0bd402e18072ea8fedfd415340a91bd56ab3b6ff67c79e40e7f6ffc0ec498b59927f8e69d96776f371d993d7b2a427e80f51fd40f9b43e2c2ac3bd7e6d1741f1a1b67f0b63e8510cf8bf26e7c66fe4a3729286e3a46bfbf65e1e39843635252d7ba2b695a3b15c49ecfaa609dbb59b5dcd123e424f78094a65b8c72ecff8c42beae5003f0c7673235e893e68ef4565bc7013de1e1b69de4b8444952c4e9401a5892ca5bf27b32702dc208a39c65083871b304a7fef654f1bd051b1808d23676c1144e9efc1ec898231440eb8c051c112265a94fe5a8c097aea46acc5f218c3a7bda3d7a2a589cfd39e34978b361104eadac31f8515e82528c9f113dba770e12b5c78a5d266e9b5f25ea96d47efe5bd46a9ec202a6a4d81bedb6ffd5099fbf5397adabe7ea5270795fc63fcdf9fa4d9349086267b1ec61853984a35df8a8899718a443179d476bc30d45ab91b5815312db4d0428774e941e36d7edff28ff17f7fd2771de96b71bebcbcb83bc6be7a797979799142db6dbebcf0a0fed8b8a0a6fbe0c75630eb940d26d12d4d36953dd172856dd2170fe06a8f10b0a15a80a6fef8464a234029404df7a910c08d3fd338b60f411403bd8d2c977fcdf1af2ccf5f5eb48b5fc00f7f0213081f880bb127f0c35104da68b3b2b0766dc743f7eab878154422b718bf9031ce5150a141f1685086d0a608caf6d7726e2872eefa9e28456c7fce3b627b485092b7528213bdecc4d190cec7911e72ca4eec62a3215c17b324501c8d9d6c549f1ba925914c2fe5bd37763ba377763bafb5ec9bdd13daf4581eab0015855d47bbe22fd11fdad70fd153a7e90ffc2e4aa2db013cc8a1245a7b685acb49fe39772ead55df268f2c279d654f5dce2cd6c52107bd420f93b4fdbb9d2bbc14cc743bde89c510e4110df7c2dafeee25164390f7256bc98d2c8fa55f9f163a6df8884224c21b683f4b0184d53def9d1151273920a45a4ac998b2512ef6bd97e3369cdf5a6bdd5aeba23040664e9e965ab07683dd77a43758b0de5a6fce4c7cbc61844e59e44611a5e4bee50640802ce0003309d8f18536e96b48deb6bce16dc31b2712c9cca0329ffd36fd8fca6c4f4d107c33dcf4a73cf1fa27795019cfc4dabeb8a57e0b95a94f3e8f142885a12e50f300228cb3159f886d3ae50936f61547f6bb1dda95f3bab03e58ffb3a28e6b69f97147979616af32d4d1e503756c71320cfdbbe41fe3fffea43f0f50119a8ee2a9b58bb77bb77a6bbd1ecfdbd273f36ca89688b43de5ac75cebf901a3880b74965d66b0e804519acb2a6080a66a0caef8b80c6e8a27c52ed68adc8a8ccddf53c6367ccc6dc05d3ba6e94ed5084d430432dbfcf62deb5e5a63afaf69de77941bc0d77af891dae2a1c2a5371404fb887982aa68aa962aa188509d1409bf5b4e769efbddf4d2c16522da1e23297e9bdf4de5a39ee81389745d287d830d765babd5a6bf54626dd8b860bc3b3c10b7eb0445984e620086e0851e64c5d266cff05bca0838dbd07db5df05aadde915b6a8f053829c449f5c7a63d5c0ad801a4051a012204d41ff7ad365a1127aa3000714dbba93d5c40687004385ce54b3e8f86c2388d7dcd5e3454c6dd9dc69e5e9ce4ef03d484f6cf34987b0f87d4af570a6bbe6d9be7511b549c6f59c4665e38f102c76459d689d96c369bcdce3aabb3599dd559e53ecf03f1ea02035d35f0058c93a3e05cf2e185a1e78521f670e879a1e781337819f2df56f49d31f6bc307c2f0cc3300c4593484bde4adbfbaec64a3ebcf0f3f13cd0b3578f40c49899050861809343f2fd883438a9fa1b9b6a6d33a6be2cc93fcca2e568cf870f7e87e4f37ee34aec8cbe927c61458a1459a881064d430d22a268410517aa98874020d0bd20516b694f087e4e58515c38b399657dbc04d8533959df142c387bd32946a0c1aeff794e4508d736331521a0d8f5fd3d6a8e60dba7db24c1b6634ac7b4192ad54a654fa21b6d52570af507960195a142657638d1fe3554c66eb7410710c862b0d7dd210e7ac17d6f4cc99b41c984464dd55a6b8c0bf4473d6b8f3306ee895dbf9ef5c74bede1ef2ff58701680fff1fe2b751e0aa5478c04979a1b9769881ca939a62042cb6595b3bdcb8595f1566c267e0d8363f55adb5d67ada930f254aaa510cd5099d7da9c95b46b6261ad9140ca26d4d61bcdd4212aaaaaa2bf0c508baaa54b1300c1d35d0da533084a3b5dff096f3b66dfa1a1162859cb033fbb9afb416894852a3c1ee59a94492ffb3d968a66b0c909acac40a30d2286b8a7c33e0a2a4ee826959dbbfa60835e33584f249f745c82da20042f9047fcc5319b7a1ded39e409f6fb4eaaeb03d79fe3e0f213e3f1bedec85e522d96eb35dfbc44c3f7168124b871ef4356cab430d5d1f87c49a2743c2f06b42e158e3f9cfd784afdfb3d566fb9cf785c41ad05803fad038029f9635a11f81348cee587e3548edbe04d554558950a84cb551d0132e8292fc9f3c89228a6dd6949d45d9664df90becccce280c4e4261b0dc53b4334bba36a2dd62a34b60c307a808a8e9ce2a0f5f0c0d0dda7dc1a2fdadb5b310ebf34f6ce5df7fef9f100ae39ab6c2a3a0424cfdeebd77c3410058017062369b9d36cff26c664fd9da3ccb337c3a19d3a94261fc5d2d0a93294c389b85b3cd8513859af90caf50191aee8472d053080bd7406d0f5d307b0aafa024fff015ae2125b65d65495174a8da6e7228fb26870a6754a6e2d3490f83404f7825473de2f9015ba1308ea2302120b419cec2999b4cbc0aaf5cd97193b925f19c6e32316a6371531237edf841fb9f30459bf8bcb2fdb1159c634f6ed01f9e22680fb7273c8633ed2a6c13e7e49c399488436dffea492284c6361466b6fd3114b2550f98708208a2d9ca8c15ae12f3c744e06caf3fa60082e220a8a96a5d88b408d9603b46d9aab5288c47a99a56efbdf86d8965b35900581a07002e005811ae6a78da534b4bd812d6162a1a6fb3a5254412a2ea0f70fb87aa30654f9e0f37d2caf6ffcea03f6a94da43e7937d312aa3d52abe343621e809c72c69436d29963d793625b66f4898db4967a0bff73c9539424ffacded87ed9b101f2a414f7ac4b1cf88654b6c1f71f8c4f611c75169adb46e7f6ffe11156f3bd8240c471bfd3ee4327c0adee0c2ce6134442bc1a7bb0958f70ec5f07d2895e07f926c336425240be984a2d41fa133680f0fa551ab506d33747dc4f007ea82bf16431465c1ff8a618ac2f87bc4906549de8219a6805216cc3008336ced5088551c4acc4224647b2bbd310cb7330e6d86e1199e007071de4db153839b4da7d400056ead860708a592b72ab924f1b5b0fd63c0510712da3e599a694c8c5c232bceeffcbed39ebeef3b3fed3b3f1495f1b6ff87c44df6cf6ff5b176cc49e766dc6c937db4525a29b5df91effcce20741d4dad85face6df69da318c61175d2ef38aafff9ed10fab7f99da9effc509a8895609425712bd8fe38b3fb79617830d30b63fb9bdecc9b7957bc2a1ecc9b79617ce7959db11dff404f363ec494dba372995174266f323759218a30f111a87d5a927f9a4c93691ac61efeeec5e0bd39df798e5c3b4ea587d8a6546cbcf0b129159b253bdbed73d6fa867aa0f1d337c1842f34fecc715c10fc96764fc15a3b77b99e4952bdb5b722b65b8dd9d80791187749e1d5a73cf0ae1b869a65d38f560fa98795c28041ec6e7132a31942eff9212dfff996ffbc595b2940a14522b52900a1452b73f21bc951f588a35afff3f9d058a3e33f5fd3f29e375282c411f8a137526a71043ee88d949e0eb164da9918fa7b4f8708c4923c8523b48e6f79ed39eebbaedb64c0bf7d10fcdb1bd9396f36d7907bcbdd244e7ee31dcda01ff443f483748cfaed3804f4a1b1a665a40fc47a445a7e8638a9bf9146f484362f4cb673abc474ae952b6ecaa3b6372d89938ef136ebc971f6b41df921a6dd1ddb322c8ed42354663b426176a8a76d874af26d88213614541420d1f823428fb4ed4c21058eb233bb130395aa0a29c26d5ed576a2a1abe751b9d43fa3dfb7ea79d38fd8fe266ca716b7d3b39ddb55c5dce426f3c22eec56d9cecd663b2f4c55b771abdbb9a5b69beddc50b04f2da39e5ac60d6549fe177661a18703247ae3a3af0ff4b809609b8ef28c04d8a6a3f6e6449bb555b1686d36a0266c0535692d2a5b0df6444b7a636facdd72ce51ce7307e83c80d05aaf740b9571d75a7b13daec725aa4d0de4265428fdca43dd5721b3d338f8c043934b5a49725e57864e7b99b6c5f456e3bd800fb1e9d6d3b188367b390443f5922693e4216ab392edb930628c93f032a6dd223509c225bf6800504a1325013c6a161e0e0e7b8e79efbba5db507ce02b637622a279bb8573363c32d14a605b7ac1045932db464e2a425c998f6c45f8c311c78d3948056b8f695aa6a4d65fc5e8e033dd1cfddc736d8158a2a83ed6665a23a412d8c067bd29fb51eab2726537bba80159d2a1586abb3aaaaaa8a8a4422914ae5a15e5cac8408c9c9114265424dd384f4a09de82a0e20087dc2a653ac78b22f38032d6d9a684bf27741479396e4a61ec80b5092675b45545fbb6f456d67bc6d993661a8a3452171f22452dad5a6c649234839a033b449abdc7d010c5035dcd070f06d522cdb4fb771d23de5249222f554af1015b1ab0aaa0ff5aa5494844ed583c60b70b2c2baee6b9d614ca3f0a414c7d54a53273f1d317ddfc35fce3953197a02804bbe6fe6aeeb4c980511c3ed6d18e311f4d22d4f34c5a1277a1b412f6d9676c94df72975a92312d18c08f4018d9f7f46ac6d5cfe406b631466db7ea030fe2944a1753e0f4a5281a83f9cb1eb7b4559b161031aa0a3a951b1896480ca743a0c5000f8fe1b7cef41eaf278acb5568711740db516b18dfbbde0e7752e9c1885d191398942b13a2cffef5e7815d721439bffff78db70ce1a0a0f569280e1e40b2c31396b2d12fd97ec6a9bf4e5af4b8373d65a24fa27c91291524c3d82a4885859aa6d90512a69b3e670855e513dbd42721c07d68ab74b0e74eeb6a721d1c2aff94a3126a84057999329b8a9497ec70f3b54a0cdaad2426baf430bade995c62187baf36882c0deb0edfcdeafb0840e81dd9fc7517e70d4c1c93c76633dbdcedb267d79b57a09cd7d850125f9f3e0010000e8d0016e935ed1deacaa92102a43376703079c8c71e3e421692485d11e30f20065e062e046adb29084ac29e30af66cdbb6791e887b94a854211ee6f06d7e9aa67d0350c11cd1d8ba987871914aadf40b95714f79f57b7192b3a5d46690d217d0365f464e7409db7cd9a69f7eba8dcc4a95f9b98329596c2721fb0f9ea03f429077367154a676e7f7b58b2aa55e11abacd153758afc668502bf8be67d2b6e6f5eccbd46b1ec5a6fb0d40b2e07dff91b6065a05ed40ed8d134e2648f23fb1b88a770fec61137e2c6511e5b9e835da2dfd0d40eb4495db782201f50cfdb86f1d675f5a39050b41c6bcc8090b7ad04400a2f9b586375d0022b9a288b6c53881145b97d166b5880a22c52db28b747010b7589d6e612e0d0d4c9928d43bbd050182f4355b4d9f2623d376849b5040186ac973d81a3b39ce4af3deaacd965e202412f0aa84c67841c1116da0650885ea093a0f912b1fd2d1bf5545752a8fd0195c154a6fe0eb60842109da1c5b05d581b7b06819e3c1fbee972bc114a65f8a66779bd6054460c2ab3bdff2d82960495b9277fcd414f3eb363d4938ba0684e5e4c44446820e84ce321a3a1d9a85708db7d664f3567ad45a2fbb2a7ba5abd56afd5cb59f6547372b6ba2b0ac5e19a7fb5d59c6cefb328adb6566b64c4d29ac6c244e46ca995266005b7eca52da1ad3af1e5b3993d77c0034a461a75343f99d7755e8771f714a4f17c6213f03b51634344e5327c8f6853833d612028c95f6b83927c6584178892d044601e5073a08680d2a468532ac95f5b8292fcd1108db1832b4453e43cb1fd6b0ece36afce7d85da7863de6bc4210885002dc38e13b532280c7e2ff4aa9759bcf4864db03d69665052fd3844405803d4a8a0305a159554df594049f5c1106da1651185e8c9ae30d8f5beeeab25e5b94beac5c5cccccccccccccc0cb5e00bde68064ff89ebd335535035a4a2da8c5ac33b7838bc807adc5f790bfe3d42691fa3214e08e772452c7d103a30f275f2801a1cdd2c889d6b1cd990a82b08806a030feb40063c40ce1e1062d8822832653e880fe6007702c59c3060ed715578e0b278b38b459555b09fabd495d9e42c2896e735e213be28cd96c36bb51d50f1f8f2afa518563a5e078df8e260934f6f47a7ddfbd1f08ba5cfe0ac7c042efc52921bf087bdf077eded77dddd77de0e78d4dc04ec9e7b5c03b3327e2c61dedef08c8f75e2cc41731333acf136bb93dd15b9dcbfc9d37f3f35398227cc7ddcb2951fd6337ac68292da5a5b49496eab6a9b13c6a5570a2474a2fa5f7daab8213ad891acba6b4950fda6e0e1f00457af00cd63e27699f0a4fb4de428535b4a9a5546e32bb2d947c122de5a69b6e0beae415b393ee935084be6f764decdb5a810a6d6a292db53da5a5b24eb8ad05b1d8d2a6c8b7a6699aa63d7ee1c065c5799ea73ddd7bdef39ee7e9f7c8bde789a232dff61a73e3e43d535081488894016284dc5c81831cdc98f3bca95a6b5572cf7bba5605f03c2f2e36bd9e08be584b57e2a41669c989b4bcb582ff89dd73defb502ab9ff3c21a80bfe57f46ebc4ffde479f3db38f88743b873c89aa6bd4290b71deb0a79fba7e2deb796e68d7bcfebecf5bacf8513fbcf44b8aabbe4f35a14e61bbdd5f2688bcaf8e76a5a0b4608ddc2acfb590a2ab75aad1cd35bd65a267f556b783c2b6a9f2b71dbffa5e5561d3b6f4e9a77fb9b83efd1e6520057cc939f4de9b7f19a66bbcf6d7c209715dbdf5bcd9c1bde729e3967662c7e8bb9d79e87103a3ff737e78dd69df5eb3689b59fc1172c97b7915a92595755654926d4196c7f1a7b1e41dbf33c41aeeb1b0fa8dfeb59a2497e8e4a153f08430e1808e18bb213429322aa280308296b94fe346bdcbd4b745a5f38f162c6c5c5c5c5c5c5c5c58a0e6dd3c5a58439749d43868f1cdabeaeeb3d1d375a7bfc399f2d2a1d245404dd62459b1a4c83d913d65a0c6b30bc82d1e0d39280d0f84d7cbaa149de2423d1f8bdbb39df9cbb9710219aeb4d727f23104bc2288caa2004b4b27b2fe5a6246ecabfc63649bbbe49c227ca9eb8d17c52f475b316a370b5265e8d55094aaabfc4ae8f4f7c7a6f78d4f370303a1af209fd67d4de48f9f95a6bf54a9bda534be8037afab90b1f6653026c6af6d8a68b052559a0a6eb72524361d3bf5850d346497f0e567f686358ed187230b19620d1875c823e24d6781471cccad0db80bee543e2bdadcbba4e9c5c5d308aedff49b1fdbd4b83227e441584f289593d5067bb03f6efb7885709ea823f48b4f1e14b4a5b302f0cb6bf0fa5925216ccdb64fb6f378a76a7a0a4ff121e7ea25f9eece65c57f664f6c4c138984cc6c1381807f3ed9eccd2ead62e9179324fe626dbfdb64d4f963d99b64d4f86bbaf035fa0bf814cd89df8ed2cd2294b76b60a4f68bbbd973f2b7a61ad32999b4eb0021a0d09e9f888a3219f96ffd899ddb1241de268c88ed7f13b463b1be5d7f13bbe451c0d21e15b9e84d1ee8ca3fc3bc67b634924cfe30c5e821e345e1de34d695468d393ed5c973773934c832f6490e8e575d99397939373bc9ceb12fde3680ffb5e4ea84387d6610ea8e5c3176fd9d9b2cb14a665a49634e360a69f9f7dd232b4bd1639f3db401c82d00d015abe27e250c50fd44c2275b6b52fadcd1d17829fe862907b71ee7551181373d7c571a359c79b735dd765eb174c6ced3d5e170addb2b365170ac10d7567e76077b639770884c1b9f17ea0f28ad97e1fd14b6b4b99cce326ec407b2c0a7b3389ec694bf957e846db374b3125181b6dd988c3ff5ffc7d743a94d0f8fda9a5d494bf86907077ef3a777b6dd8bdf679f77aeeddeb390903cd80c062b1582cd64ae4d68a4a3197654f22114bc412b1442c114bc4e2b2e8e911b878e19435454229382575178a9054b492289f6c229188e5a61695a93432f04dfacadc0602813a90a8811e1c6bc0078d23fcb4ac01fd085f8d96a00d021a6da867122a53043d695fb0e88c45672c3a63d1194bf3e2655dac6c71b6ffc662bd686a7dd5577d5d8c354d0341160be4b94707206badb5d6da5289245dfabaacab5eecca2e9b75028c50a206654d1102a8008e12fc2234e78c1394611ead2b0788b52e97cba5c3b92996dff60a6aa5b0605fd6a5f2549e6afbeecb7f6d8eeae2fbfdfd3e7f90efe66ac355b929af48ceda5099da033d696ab868cc45632e1a73c5b64bd3a18175e5d75e188738f8000ed00cd8ad06ebb22f0bb32e9b03040495b85c2708e511800046308145112cf8c1143908a37437c8d8218a2fd26041a62559cc8cf36a9ad644df3763684c4c4c0c1ad9071a5a2412514ba9a51cd7e56ec32ba83d70129fb77ddef6799f77efbd1709ac6db012444a62e1debb6dee39e7d699f39773ce2f5d8666063dfd095a19f484ed5a1927686550193f81c2f88b5de8aa83d5f97d1f57da5b94162a6ca7f9e7fd847958a2a845bfa9efce72a2a241088bc5c3c9501bfaadd7755ee7759dd76db8736e0665cc801002855c2097f775dac579e33016b712d087dea4302d5cdc35537bb8f77df7da25efba84051a132a635302ff1170dc4e0844030c36ca605f1404f5408320f8e007043f20b6c1281004416f4bd0db9366c54915bc824593e97433f5877606ed9163d3d8f54d04c05ebbbef6ef084f90488922a54a973349fed76a4f5ee62c837d424417595e6cb23d052ba0c7f349fd22b64a1b49cef289f6d788d883ae77db31e4231f103274def6debb713f884422d1b52227a55b6b1511a108a150a94492ffee34c4d0702fd8cec301ed181a58ce99e3a6ac5c1e572ad5d02ca8108306654d11179a6095e017f914e1086518a3c44df786ca68355549fe358b52375553ac1c77c11facd5e524fe2ee7a69ed074d7f1f367c780f74608dab49ed7dd4e86edb90fb2e5a0ed8e7b23f86b755167cddc34c3970423b4379a550b2fbea0271cc54db16e8a7553ac9b62dd544da536b86517a4a196c4715fff820fa8adea0580227553e00cb5aca92488a0a623a8697bd790f017ec54ce9b0db36ddb6eeaa642af100e4e489d10c4e7e379795e1576af73f9b561f9654fb8f4c83c2f0fcc33dbeef545615a7ed0b60530b4e969797fcf03a3329ae78a13676cb7b25de511c3b3b3412d80615bc45a7a60f644c4a4af17f8e1a71e378dea8f2fa61f1c4dd1379a7f3d2f8fadaf577de5df3ea7f6f0dacaa89cca3759955799b5ed9cdb9fc69eb6284ef2c7c95a682f44555e87dcac94b62b2d168571b2da54300ab363495ec5a0f5555b9fb1be3caf0afb7c3e9fd1f38239b5e979bd5eaf94c70a591076b87658b1adea59830e292d89b69df6542a91b18f89b6d39e59b8674216ba060ea4a0a46ab19655a45bac3b85261ab59db58abe6a2aed8a9b049044d7bda14c4755a15e6cd35174e352b5ee10a1038ab6b9aced5f738d983d29a32c12aa42555277e1bee904bac2380c33a1409bdbb99daeed486363f336fa53182257d8b6a136246eaa3b4e7a6d55d2a66ab9b4711bb7d38ef7841a68f3c278ac40d3ed1947f643eff9cf38b263a299a8a46d562641ea10890000000400b314002028100c85c2e180583c269a77353e14800c738a48745a3695c7b32447621c8490318438430080800080cc08cd38000a8b4525eaeb47e8f032129f8262d28602a1b1d6e8d68c5d56aa8de1a39cedd5a79988ee64d8591aeeb0cdc4147ef14ec4a68dc9f8af72a004680f2a2e8aab5aa6772736adee8506497ae966b6703627ad85ce7f5a8d575d1ef8acc33176e7d5d762b2c778f9cc43e03b42fcf6253df08b319c5ab8529b57b97960968d772b173a6b49209c12bcc94e42907b624e295d2fe93941c8e5569d022731f74a106cd57229713a763c73b59ec2da2408aa214b329eb0e0764fa1cba1b1dcee5cbfa06c412c25a273db4ce972030676995368a210d27ba79d6f2aee3258d47d99755c8394cab454a2682da31f2bad7510c11f134b8099612b549918fbcdc4a71173a4e517dc533325580d18722626c6725d7be107e15d9405a711339fdd60d15cb55e41aca131423a6fa7620085ac586feadb908960c50cb6dea0f178a29f9a22013ed6627262d719a941b105f5cd43637efb08d23686c0639b806afb5f80c8cca9d2b397097035f25281c0b50716159c50224a8c775d309db3c63242876474e86ee73f8151048b8221761c8b54558b0476d1622964aa86c5d058b30b23840f86882392a5f06090f8810de482604350746cf22c824d257f7141dcff94190503c01a38156f61067388eb28674a68952da4f1c1c8b33da925a8069010d80acef82baa0e085fb20d53ac17dc03b8c09cf01b56920b477518b687184159a4fa423e22cb393b0ac0d288ab5c55d357bb5c6a30fe2aa37678d0970b3b08548c6aa74efce3f24a4bc42ca64051e96b1e78a6f9972d6dc65deb11e06bc84725333cb3ca717bca6c04f4e2a68be6e07bbd77314b4772d5754c81f0aaa26da5f332b9b2595a590b2275e7c2c004396b2780bc58420545bd1932375ab5f6ae6ea45999e4268e05d55287e1e6c5d00163fc6ebfc3350712979aeeadac5a50f9decfaa4c8df88929bab2001c12cb378c567dbe4b672be54f3bbedc20f357208ca534e8b1fec52debdec085c6d84fbf907b5a26ea2eb6a7108e819547024048dd545e65d7eba73d7d4b00fe30018adb4ea75b48a5585fb1f22953a07955aa709f2d8ff1468c9463a2ff80d728ffcd76cfce577cd4f8c4462eee1ae8e7c2dcdd59ec90014c1c215a3c2d51e91aebb2ae0957fb88dfa2a000804339df7f744d2952bb5d7ed40f9c005cfeb14c3787e9449c8555eb86203de32f12dac1a2d4ce29a026a54ba9d866e484c4257adbd79ddd21c2a9c161e793b40cccb6db3d2fdcbbdefe337ea26a26e4ef6cacde8d63183c12dba0114d64b3b0135f453732aa7d6f2e3aa21e3cb7a69358c0f319f4ed2c6dc0cca99c8fa8b6ad9d8820cffeb4abf0ce824606618c2aaeaa7649b8552501a219718c62bbf41613134659b022f09306eb0cae28dba061dbd09b753828e1166f52c9b27ce060b06a9901116fd9e647c46bbcbdc5787b833397885914a9d10145297f5633cbaf87026f92b664afa5127a191d2c2d2d091a71677801ac6aa301f5c7567c096aa597f1312e83ffc18be44ae3ec0cac0c7e133f4f3eef9f5df07970713222c945c7d43153f130eba49a79d90456b975b66f98d6158bacfc0c8edd3e6383400d2e1eb669104e5552945c93136d4f04cfc9289dba0ee1d949e4a2d49f1950015be8dda18338780c24ce4bd3ebda1c1155630385a454df2ad695bf6301ea14132b10629d911acd42775fff6368a1a0e685207b116a91524e6514b272498d5f43a195b932772d1c02983d2688199ef76de83da4fca5828699f5ce373f983ee57b841c3458ffa7d65fe6b64f2bd2542c8594aebc80f8bc853d0f487f27b48c2b8b8f07b4c081c1920478febf4523a8bfeace61e3ea8e66747e2f82048405702dafa3354dcc7f359bfd8b73cca41c4eb7447880c5cb482456668cadd77c90c8af77fbb4c49f8eaaf354860b71b26bbb67f0918798dae66afcd34d60bfb707b65261251a339e6dea829d1bfbfc86289b0057f59680f5231ac7487d1d9f105892fd4c3ad05ce99541f4f43d859b66c05dbd2288a743a325c072160087eda2419bccc43d97d7484861e95dc03f952a686c086202b8be0db8bb3d706fbeb323e995007bc1eed01e09639f978afd1072e19db8e930e0cb07a2a13e08d4d9e702400cb2b10cf0dc83acec01de2feabab5a0c23725a8785807d28a8dce74a8886f20961c6df241c090787f0af50289698aec7e850d6bc22f7cdb1e045d89ad9f39413b5811a0519e2e165f5afd92b0f5932c6cba1c0cfc708b40ab4e3914c92fa8059db5081381a34e854b1220c14d80067ba7eda8f4264d1cd3efb92c7a020c513976c93fc7c7702f608a7580a9d6596098fd17acfccda529b7e2295ca9b8bed23ac751c588a59e2849ae69e5537ee30ff7a1643ac6f4972492d74da0c178cce36157110a57c065b2c03944fafdf3bbd9bb9e0ae8b0cdde4b1b664e2aca6f0c74049aaffd612cdcfd17121af82fb1151261e99e7bcfa171f4f3bdaaba77cc768055ce9e50f6aa94064a59fc25fbf1388316b9ecd6262281e8da9840cc4a5af8a5b70dc46710a0c4f291d8a157a06181ebc3ec9df61d9bf35600fdf34250f46e33e73924bff6b3c44eb0f47b4bd83133d9fbf8b90ae112e262a4c8cc45fc8179ede1b9f33edf9c8b4d96ade11839992fea9066f9012be3f744d624ce78a3c71a7922f0ad3af6f2369dd4fc5629d06b63a390dc3d11145a543e34fe6e659f58063d93e8b04c0de63b2782800e27825292d517ed9a08acda092c153fd395022b2de8261ef7cfa6818a780ca6543e24945a219741112806de9222052db63be6447fa345b339462ffe8296c5a8d084a0b4fd1ca6cfd3892b72d069d3ede803bb88265a4e360834efd52aa518608b7c51f019b4b04e440ea8d94e8ba7876a9e2041006a97fa51500c58bfa2cdd1e370f0e5dc49cd8870ac2685e61f99220630acd9626737d6f6ae6cccf7880d84f4886b24ac00123c707cc9077bbc4296247cded7fbf4dab0d217ad0a5ce12d5f47a90152090c93f810fc53585c6cf9059f236f5c21074e72e7543b444608a2308b7decf6f54e65f4a47561fff5c0efb58976e113bd7be8aef436871b1f2b8d99beb6b588c01b24218453a2e8eac59ce85d3ab9595c61f099cb2c819a0eecaaaf8785fc05d612a897533c02a6a4fa9a3ae34d313e8d26fefceeea4e52c6f66782d5c1f866e7b4a90bcd98eab6c077479dc789db3aa862077fad4151c72f9230db7bb32413296877940a84d759b45b6c510265b195a5f426da87707c26bfe47214e9faae25e8db70aefd1dfac0eba3d3420d3be62924fd4f00002182b41a2e031e4fe901c66dd93e3c253e03a7460384beae8129ca5c8ffba7e1a87ab48fa71c2bbd61cb1622984b518f72e3331245f9f178216cf77037cbbdd7f47255f2448993bfc03ef50a0d541d49a76ddff7b3591d6ede8f96f7b75cfddd72ffce7f0e3b109e84897c5c6e134dd00524af49e14fca82d32669ff0176c6537bd81ea4df573c1830e7c4861bbd28f41fd89e66d318a2b03dfaf8029989f0d7b0d6bd86fc05db1389eeb1bdec390c686f29be49f764d9a15ee3a2891621dfb03dd29cadbcd81e66638d21333c99a8cf801a8dd33a1a5b07c40811f9cc92edf173d61db2087bc449655bd8647b7c59d59d320b1684a12e02656b29998c97a6f0ea3162e9a001035a12a3f288dc4240fc5777b56af541a8ed969a76f792f089e8408d3d73c1d996c3555cd6fc5847139508f3188df179efbd139e4770dbb3687df87759301d3032b23a589b5d697f76696a4a43b5028491721621a18379b89e37db9fcb62ab4699073558730994c0b994601e664c2f7154028184956bbb09127b8b464c803205f2c4c6ada9095f0c31ffcb79d47cceab82bfa4c44d68ed5a987490a34fd5b94258e0885189b74d73b2a5830dc7e71c709a00f8ff09ae543db9704a735e303c5a50392bc6e1b3314a148a312a94e15f681dd10ded96f7a5310ccf66ddd510b8c19b1ae93ac00504f361fcfa478250ae28e5c7983a8ad38ac8203b28204db16f4078605603cb17d3213cd404f274f1c8fed346d851c6202349e2f496910429c96cafdae5c78655988ba004c2b052003de9ddf40e58419ec0f9674f3474de01c17d27f1c10d4972127f644e130b078961d782f9ba9ba416f1a24e557279a417767ac112a0e65d7b1bc9d38fd12113641bee88d1aa7931be1fb8e4929a69d5083fd347de14ed56064776e5e1dcfb5f44642d90a1bf7c0aa3df60a99ecb943a3d42bc23cf6341d7b695e4953027e47ccd3395b0e88049ae8f16c1506391a59b64f19c28d021be8488d3240992724b752711c45250f480b1b89abf0162904f8418cc439fd63692ccba73ec37ab8bc0427f867b628040afefd705ffc6cc30c17300c6c2bceacc2b972b83fa31ea5554abc238d416fbb7ff672c9aeba59ce04861a1756d4521521d41f4a2a3749a5414a6cefb19495947da748e23e921ddde5f477119297b09b000c3c5d24c72a6da932cb3ac93c64643174a7cb21eaa1a533c1cce791d62d3da741a0ba96c5451dd096bb7700e1ea99f79b335988bcd1ba88fc2b554e805596ea68c8806238370589ef991ee3bdee04697f10788899bd5a36322471433f5111f013bc5a83a056734ff81c6d26628a1e8ae9c4f03d7d2b35391e436d38ba639901f38bc2961d6029a6c1aafa628f8c3975ea647d856c60bf90030e02304158ef4f6da275379c474a0120932c9a1c3a49864c91f885224e7901eb565b877d9ec48bad0dbcab5c8d6c11491c8540fed4f2fa70c6d9f00a20a8a074814edb1cc7426f0edb4847c528ebc953bd2e4e06ca7c5fa9fb5ceef6f00632946d75c86cf4b89575244146e657087535a6c15cd9d1e5d86cc2561f0d021f982d8a74472c3a2ba4949934e4243eef53cfbf3bc2314261f63a94b091f21bd20ba9e2a020e92f63a7a58f5bdfc8835c64dd6d8715714a6561cd884ec6d1dd1aedf81fe819380126456899dcd8578c8a1b5ff7813c8a48ecf4266135caefd255ce95c3abeb59c6e6c5508169646b09747521ce8f24fdff328ffc68f9b56db1c7b818b87a3e3b40ca50a09eebc136f391ba85c939f507079f8da52381494e1f978090560254447ab5408ede163597fa208c4b1fbbc73b14e920b2ecc7df6c11f959948a7b280feacaee5fe7ee8b93e9019b1c875a1effa6a29212a62151b36d924b6b3a923691d55f26903f3f6488470bbeeaa87f5aa928cf355ac116f9de752ac3e28744624fbe2b814faae3460319023465b33016379d63b957196655816ba21775e9ce088d7b589a2ea1f1005180e7ceed609a744a34fa820eee916fbf16573a997d8ca2b2bbec6990296f1ba036e3fa53bff763f31a7d4910f20b8f0b558e78092693193198a9d3d49ca4106d834a3c24a05320254b87ed1e85d3cfd025efd948c4c1a9ff210ff21b83efd8af846afdb8aac168084a05571aa9c156a19cf7005988642c7bd7bcec260fb75ca8be00c41bcbcc4185a928a85e06422b61ef8d153f8783fcfa23112244e1008771dea0198e3b03ad939f4cb0b5c56a85ec8e29a0b0ee1cdbd29e0b35271e7a122a01f840fde62f8fc6a5080b15e8ef6ba2786643bdd99fb8be2878fc35251b017613047b1d2273b0473a453897ac52f964ae8e693485cff825be993c662649851429a982f33f680a9dadd48ca2783e21b10a7ae67b284868702ed75dd1da50c3a6dbb0714bcfd83d3a3e752b100c031701ef0e1e78f2bb24fbebf344676ccbfd4eb2a8b74080f29157cb831c01a498b476dbf2c7d9087da7d2556ed5e9357628271e30b30517a3caf77d6f4da3b2189b05c24dd8704e13f1f84077c42f8de3f446eeb12b469971882ec92da2e386f4512c37b74cd822e6138abc261c809306bc684e7867cbb2ca8cec0706efa1ccef811e3ee5c19c6881336d2c6af1d42611b456d4d5af83d725f03869200b36094cc249e39eae82a30c09df4021a7ac5054100dd6a39940294d54c822f0f6784087bc528d9d89a6f8bbd68cba51a22ace54cb860ac15275bd86e5e3bb83e3c01abd20d0e9bf89534e2925aa5efad3710e320f9f8ba700b133d3b091cb86c34cd80b1b2a2a0088f1153a28d9368d4aa870110667f20fcd04d9871ee0b0ba68676f326b8b656ebf834a0949848a73acff723a2aaf086525dbc21fb9c0ac018d5edda965d332c7e7ab1d6da50541e2095402a99dc94aa321605a79b9a7f56f67557aeac4fe89ddf102d91f9120dcea59565975c32668439f166b66f99a5b137f949198678cb3a8066d0726774793a8d5d336b45e919f91739e7ab66cf802b43e638ccb6c29e0055f2c4b5c04cc82a97b8b9fc7e0abeb53517708ff009803e7f6c3e0f441e68d20afd2d93c198db9c09a9d9ba7302727517bceaa43ad32d24eb0214dfa099ae751bee13f2cedb893382938aaad6529f0d882e672ca8b967d233a1a6964c24720aefe6d4e3e11bc8020bb044e66e45e2adbc0189400558230df19ea983d3557de422e467918a698142439bccc9945a358640c807eec9d7c118c57231e35050c304c6ef74fdfea1b4de5f0ffb11c6f0cdc106acb374d9ce23a3e8d87518d3e51c8f22d1f72fe8d3c6098fbb151cd8dee0816990a57d3eee4b31e93ae7de71ed91d5223ac2cada623454c369fdad3eb87c1a3cf1db7f78a5c18170a656f4042ea5ddb1292366bbfe86d4e55e03ce6bdad59bcab0e6eb346be8315d2829780488ba7b396ab87c0344de50657fb2d01966c32dbf2864f22ded43aab6b75907e7fec0102211e2207f5e1a2abb9aa7eb07d9e73cb173fdc7414c47ebe1bb8f43e88f849b72a18c8f008eeb6fd286dbc56a462a630e3bb91e686151579a8359c55287b68cc6e5c3c388f8f8719db4c38890df3022b444dbecd96930860463357cb1704db5a96df5685b5d06775edd7080fe92dafc0aefdd464244f051d5884433133025ecd16cc49f5f2f15ba3f21df7c0d45df5cd6cb6a957c58f84a29dc7b16e62bffae958d511e39dc13885e5c0c76a92f2e7a943520372495bdbfb4444c380fb0270f879f61cf754d0a0e8405ac72055c8e8683c49c60fd36207e0b7bb262c831f2e678e21c623ec7e0997dcba3826e6f9183521c8a9ecf925fc52a3502e49667ca7e26f883ca22f080f889a5160db9dbef2000f381992f43ebc6a78646ba416f5669c98fb55c4089b586e34c8005ab2fb8dea7006133e5bebe8ab6db1dd23d2cf61f7a61bf0491e3d7dd3a38b7435c2ead79eda483d2e5b63e0e6ecef724f3f18e2b25dd31d1b3348592ac4763e00a628feddef4898004af2f93fd622ac1c2f0b01c6a638d50a391920d7122c42aeb290256b0241fd94755e151cb65af5002041626c2bf205d83ac52e1e1b435de33a63185ac57e151f5e5bb38edeb53cc9f931e7f0a003e49b8f04072b41d365c7f7d4732a332331f6031da484c8053f6f665c133fb7295769a39795508e0f11ea0baa2b7a60a959443c9b3c9a2283ed90a8251b79ee2cd836b7b7ee3740662cd13c0c25c560d0a28693bd8de717f06be8fa333640eac6c438265f3a02f2452945236fac092693b645526c354faf4359dc7a478dd5fd3d27f327e57fb2efae7aff4f83896f3c1261d812e9ae7349794b5835caae21baf0bb5cd53b40a0d2f2da4222467e2e31438c2aed97277ecec529fbb487b5da5d106eecab0ab856d29336b2c1fb1d4b48003cb245c1548c129be12b4a71b689c7a315c9c32a10ff5e6679d0a5b8018dde18b217e72f0475b5135a11062352e8842bbd5d12e0ec66176c7f4ffcc8c6e6c10551a1e1c9d3d3d2d3b3ca7a30cdb0b876da1cf2c924f17a60b6328bbfbf2a543c04046871f87aadc0f540190a9a42f117d4124087812267ea6abe3217a9dc9490ca1c957fdbce3a7c01ed1810db43e00d779c26046e0b43f816045d4d4aef0a8852b22d1323d8022114ae89d0ae51ef461af8aa304b79d56aa45cd77ef72dfbe000886caa001288e4930899d89ec9f83cc88a6869e7e7ca220f19af792ea7104b8690e8c2aea7cf8c860cd2f5acce672e1e208889dc172975cc575a9d3724fc2d92075bbf6337ef14be43ca648f7523da2544a4861776fcd0c4aa715786aaae79c467bd97785080fc817fcc586c7a27482973d54014a93ef3da843470fb0347bc9e8cdede180545ea9671a393006529736a24bad61446e8ff9a1474b65476c04f5947ae94a8d43cf861fbcaa894f9d3ec51f95d6151a1044bc1f8aeb090c593d0b7e57399d4956ac977b019fe077d291b78806d3d4a67df8b7fcdbcf25a4b040b56cff6c65e6ff4acf4cb081e78863ac0573218bff8625b3b4fef5e714fc8e6e7b7700153130e27c6a6a3581744c5de88538bb408b3ebaa2974913d2d4278475b394248179b0ac78831d90ec3792b2139de4d69b3844bb61e3103268ff6e308591d1ee5eeb122e672993a1f3c3d18a639c831b33a3d17ec804bac91589df0b545fde721e04261120ff8e9953845635d38fc6cda562d36dca09f412be04c337f792fd5dc2fbdc90d5e03af88fab2cc325598d4bb80e1099d8be1a507478935268f51b2be2fc8cfea130a72d0cdceacb7db274587d9070606e896fde04263180caa01f4cdcdaf5c5303c8d06f5eb6d525588aff6d8a39acb135f59b79ea8e1c5946e190a5382e4c544dbe066881b5e57cf225be4b9e182f87c34b34b88c535ad483e981f8dfaf98dcd3ddfcd33e20d7c4f8cd78c6b9bf7fb5efb663c88b6a8e25767407eeb56c5859c284de0c67e507022e2f6688c7886bc0649772bdcda1a2953f396d57528c78015ed3c246408947b348ea49ccb8326be6380a8395fa7220ad1f24c9dbcc1708e3d4c3b7ef36c6eff074feec4eb45317adcd0f94db203820aab3402d7bbab4001741e2419d87166b7308016bb05e968c783822e549ea739c0d8bdec0629e8a6180ec50514326b8e1c53872cf034ad11f9136d474c4a231218b88f7fd1ca29a3942558ca859b53b311ba1f60f36ddf0607042d8115819de7509889c85a55636b2e93742b4d6f35e9b58e5ade70ff195c8c86ba4110127627567ca80fdd452a54e2b3ba809e929e9aeadbc1c5cce766fd48b7a04f70b36417e80baf317a1906698975506155d484bca9d2b5b168006fdf53e4fc18f4ba4b073045b25765311a90b84d35d0fd6e7a744937ff7b5d661e754faaa261b98d85811bde5c1c5ee4d3147d6e66b6af4a3074e87c2408c6bfdd89c78a7181832bb5da0762814b2e93a35382692bcd7118d625c955f57a604e20857ae03f3e3fbf3a9b214c825528cf743240023c89820ba7d67bd5d8a44f86bf06d522deccb3bcdcde75ff915bfb5f669436f5c47365b99fd24a106fb1ba6ac4ff6541b1ae0a0f30d22699eaaaacdadb534986b87bf6180502d61b469d6f45b4c93789782e062e0b10528a92874e5915c657955f28d21274cc5e7ee840e75532743d6f2aadd27b795f0e3d22055a53460aa358e8a340389f56c68f5418c147d5ea8612dbe89cbf88a85ab66a88cdc750bc6b4daefc30114e594bb5781ad23aec4bb0c23edef2a7235498ae6dc2434361a1a791cee111c161808b40bba571b791716719b15bdc449373d6f4733221efc0f45dd7f733534146d98c00f5fa1264ec69a349212ec5e37d7fdf4097af98b7b5726b8515f9c466efad9df2a060904e00db2c8975abdcedcc4c3da9014795753615d79b62de1534b448cbd0b98af27d043e619f103b4c22769526d9af2b70e29514eb1eb9a13300961f7bbf7be07e50b0a16d5eeccb7b9dfc5601d8917e63513e07e18b278a1673c07c819a04b886177cb73f9fa76b15eec6de26e8b383044c5dc257972ec1f03a4943d54d2968da7ac10aba300c6fd7c87541152b5fc365abbe4521cb69766639ffa131090f2e1716f65bdfdc1a2cabb38d0df3739f5f34454638562d3a4352173806f055449aa426b4435bdc28dc62ddb0a7da28948944b1ea2f0ada05d94e92f5d868a290a416c397c82ed5315133e764b7cffc5693322630a854a3fac7816150e7993f49b0ad81f27be568f043e2a11c54f04b1194775e8a31d148368f19375ed564ca3e8b5b33e8860ff30bf12d4b575fdfd2cadb0e2acb096ecf50a41814bb0967eb0fe2905c3ffab6223a2aeee537d7339fea1db1ee5e45ff5d2c4f5bcadbe0a0ed5e58da223c5335cb6a113f62c72f60b5503d0a56a418d7e24a6fec4befee67c9ab6364e16808a7dc679d2b862a5c26e86c74482ca18f89c6458355a649bb3a90886e3b0ab79b354c13a2a51684de8559433dff6e53a234d9e0095827eb10049a8125a477cf8fc0c1070eb1491bf3bf8b787881c104bc19030975afca95e9567475498c003c6c09efde7128aeb2985567c9ccc52bccc6ed26425e704deec189ab1185fd52a125dda2f7475a584cfc57186544107715d27fb89b69514a218230fb5a87fd8747538cb0fd4cfc92682d90247bba4faed5ec872c90ef1f8cbaa950047b8b6d53a3e762fad4d75564d464ef0a2e684e43d63e7fdc0309431b6881771fcc032b30438c92a41fe4112be8923ec9080b270fd93ec0483e805137fa5f849111eae65f94d60f68cfc89cf006cd2033213747d0739641229063a4e9cb01ec47b88492f3469f66e11de40da0c2045bc6ff952e4ebfc130a186ec5b539f4e33a00ea4819ca5a9ae2027ec7a734e3ae9823a541750ee7d909a4c48ceff62844f12798c621478bd353fe04ac48a013acf20eeea8bd1b3c3f15ef59ba7563a5150c553652c7bd1e06571f72d8f9639cb1c6465052709aeb8213966dffe83d5fb4e4b978ed8b4d1b3aedb82c1e9db89cf2e8bf8092da318d85d97a7c58270b20fc4a2de71f9982501fc48599db76a52eb92935e392bfdfad1355e018647bb4b41a527a74c52e1895feb704069b61210697806f32fecdef802205a50a79601c9e8232dff0052d2d61ceb6775de81aaaaf015e04ced6ed1c97e8b1ae53cd716835c9d1f424a8dc6e03268f8b026e472b561ad500d02cd0cedc571eaa3ef1f040ff4becc0a554ed464aa283566d6293925303723fbe7b266799f9a2139f6a5f86a39368f3c2e126ed1d19ceee3c9c2f27dca5215a3a5758b5a5417241030f1537502aa426651adfe8d4f00f6867865e41c4c39367e4a242c2a254030bb03ead777eddbbd393472fe972e736761e8f8ae2b891a239359fca35b83302555289aca9a6b59c2544a3dfc896c98438464d7c123e503d50dd13b952badc182a59d085ec2af9c257dd8cbe8725aeab26a0712716989c5fd4ee5aeadc606a192085f263ae14f50bbb83c5c1d5689bf812f2c986e011085016f8ad71cae6a5c57efdbb47398b8a14207da32606979e898e1c96f6fc593760491e4a091019bf576b7ed07bd411ec641e4d3caf259bee758d144644f3e6e9a943da71402e3c6176f5ff7cc0b02974a84d9cbcc645009461f49c35424f115fa125d5e29403ce9be9441dd37343f05c6d8a8f56cbe59fcaedb96f3306e97491fa69291acdd5a80d016220010566a1ac1b59da677af3cbf33362ef681d259694614f842efc15065e6a50d93aaba93c1fb3eaa406c27132327707790070cf8a1405cedd80d5178c325f2f9061f4bd9dc501e42a1f43d92f1ff1d41eebcc18f26885e288a035fb0d8ebebaf32127caa264499f0bd22ba565033068d8654fb0030b28949dd0181be9e05ee28a9efe351ac06ddd854e0fd4a3c63730f99bb234f0a721004a9c443512fbcac416aeb704a96c70648bc54da1ea91e6022255b9a848979e27582844bc96fefc239e1ff72869ccf0adc1979e2797f82a495df90c078b49048fd73af50409f1c94657f36280b6dde3dbf442dcfbaed2749ccf82a624c4bc450405d6fff7e747e1fcffdac69cc3630bb258e9ec3a61574fef4128cfc848c11c7f852221cf91b344736890722d5ac2dd591861c020e2e951ae71b91538a6283e43cf0b0eeff658b4a7c8954b8436dabefdcd2cb6758aa485cc7eb9fb941e6fcb0a6273f23a4ea95b355c0ab035ff5e54230bd35ddbe9d6e074637ce90535871219a8c21062c6fe8827527011c02275794042e7dbc1f31d3e2494877c5f48f2aa6e42044d3272307519ead9acc7957ba030d2da91229d80dbfef18c77eddbe133e4b4fa54883df2167ca20d67d87951be187d96a8979f39d6f8e3b4c82ba1afb3dd308b4a8f75c5944732992908879bb84d98a108058903989b73cdf8ffdfcaad7ef2231cdfb5e46f7f53491c5373339fbd48bff4459f51545b70d1f4f486b5894bb9b8255fe609e2473009d70de4fa3276acb8fa28234bd3ec00e886127d3c9973ae11435d30e1b0bb0451eeca81a28f41333b84614e980af898533249b9aa75534129dc92c6736d5159e9ebfba6e5202e9b15315ddf09822eb4f229fec984d6b4b17aebdd31e789256fe4c7e1d8ad664f390879ba17501f0152863763df641544c7c74c09950c89ac08a02e837f28d69e7b147822f500a3b5d3e0cddc673e039f8754577e62336943aaf49380316923fbd7880837fa5a7fd3a2a41f83f2658e0998061dfca634ac3eef0e839a64df2e5fff05c41b1c43e8d022a5c142e48352e65a3d919d50cde624446043a89d714e2b1b6b472a423e9505e9de0edaa82e002c800c93b618b7fb91be4e9e95839855f0deb34e863f2e3772bcb01b96dbab0609955db9c1bfd9773b891cb154fa338f55316d7c1e4b358f071dc0123678930234fd289c8bcb4b97e2ffa53c1427388ac297025258b756aa53a103ab1dce7344c649c421b90c24693c06f97f224cca6a7007ad7a7241a4f242b766561f05b7112e31cc7b085e35db0135d40a13f1666ab114dd7cf807963c5d0cb3dcda3701208e6c0b4c309fabedc28b458e45d9329e678bfc8910c98b78a699a6a60dcb024743afc1737c8c0742cb9d737ea1a8ac4ba95d972a97bc855f6c95316f77c1be3bff036a50e1408ffc2cff7fc172aac49e13c9cc3e62cdd50330eaad62e72ca63fdd0bdf04956c9762f70b6c4ebe09cb4a036fce190c93844778e0232dde4ba061e97ad60e5d9d48cf14a936a42f5d90a82f44c80e451a60766691034a781d4d86fa0e90501a40c0065a1e793379f876d2575051da6da9c3fafd551309fdaf2bb851ecba63ae0b774c4b0c5079b7be7ae46fd7eae4b3e53a9534aeeb14da95c7b7ed54bc2715d811b3547952a41641c17788c54519519b86a86ab1c8ac8081822b75bdfdc6e99075e33b7e0b799faf2b0a6798324f2c202f69f40862593b66a6eaf6a46c2b9b879b509b4398f12e156bdcf138b2666c5cebd973f21249e5684c974489ce803d56b592babf0f46d031e1ff65ea02b33f10b035959aea39c588774a28743f8410deaab34e799e34b1d380ef43e221ab40513a246d9ef060a2c8a8ee733147f9291288e2a507a03a2767416d37e992ac8730d315b005609ca90395d11a44edf0bfe378001a6932655c7b0cedf47b166f456d462ad46523df05346a098a617c5519fd93ce8a02ac7aee9d2318f72793623d579f6d9f4542e6ff84e674f0c78d1192a784fef960161b7442ffcfb523a7acbb5ee5e9023bddcc8be8d7ac308a96516892cfef267be4fe8675deb5f48e7b0f25cb048088d61cbe7cc2bee32dce5deff28b1bbc52ad481bd4f07314853dad43f6090f53d9f5fcdb355f3a3093c51909cd617aa4558ea67cd2a59e83861892a6b7ddf0ca24cd9f3280ce56d65e509fdb25d7d7892cc423131f18e9f42e79b09d026eb946e34411020a129f3e51836f9dccdf9f15b21636cfb620f2b5422944d24fb589d498377c528b05e88d1f17922c69ff54e3dd1ae8787ddd5fa01fd52d8fcb3827bd529092c58c2c7ed0c28bc56fee8a7e97856dcc65d25ecef8e4881574b5dea26040cfb2490ec1990068882ad608c935c2e1e94bb481830af925c4f99a74880a8762a125f9285be843c4ebf84999513cfe0d9c7491c741e0069f613cfa10a23cf8db69e66f8ae46aee89795cd8b566f4073b2b37f52bca4579e00da3b42d03c71ebb0462e4756608e18d1d38c1d42e67e490c07532b9923f55d33ed87dbc2513421915d5907f18ddef17671c140ddf11a596791ccbd74c96bbd03f9ed597434f728274ef06bed38129e176b4a9825b9bb5c03e14f5176922f58ef8f84a3a6b575ade0a3b67a9de098f9a41bb93b3d4a1cb9088c81a7c811e8f409550bf329e418b5d5cfaa2ff001347e839b3e0bb9ea30c687999e36f3b7cc54e6ec2de021e78a1833d1cfb46619817a5ebe5483058adceb47ecb89d2a30a98fdd4ba5dc47ce290ac3335ee4371f3858a16c02653463c6642ea7752f9cbee4dcd4d1a6381cc957c3b10c5bc53e4506b8e474befd02e514830ef8c4b1975f64c413f514406a98f42d991505e12b567b4401f5d944d434fcc0d1cbe3c53a8d958214667c6104619d330ee8e1c1a8c10379f120d2cb1cab07e060e0361a48c66f5a794c141a3ca92c9afb255eb1d4e301047892fabcb8c60e051f3c240bbde9965bb9fb360078126581e0a9e98d77e5090421bea07b82477a22ba6b30eec3917ea049636e1149eb2223679a5a8a2dbfd7aced3064609b46b37b0db25898b361738f44886c486ec392feb5c6263c32344f6e6e008c3212cb99ea88bb703850f04e02870c00129291e84a37812cd8c0f0311a03b6e2d67230632b7a0db409a20b187c1212b7af95e6f6cc2df0bb64c4e2f8460400ebdd6e461d22c08cadd35378402355a291a8a55c1ab9e67deb50c541ea32348b626f7b29dd89390140b324e39b5d61891326c871688f51456eb677c86736a40e75a442cccd9b70033f224dd43c6162cd217960e350a43cc443f53221e50b4d3e6e5db1326da4f2b9a9e5ef89240fe3b9a1fe2d71249c5ed36bfa5746c4a3677c725533dff358363305ebc45c89682f68bb4ebb38765cb80dcad025daa8073c5a8232e50998de9a87b24b8d0e297bcde9625b3b023cc098b8ac3d7c30505272e1ee9c06db6864dc804dec00b39ea1b65c48dbb76ebcfe64d8be30be11eb5c67d25bddf07fced703ee5fa60f7568b2972b8172d629fb2bbc50d323156e9483f2f55cb2af2965a6403221d45c4c7452c372f437e046069a309593b3ed9de10ccce36ab6bd33d019b77e5d17c9f632bf4390a4db51f043c62ab0cae15bdd7ccf345cc8c6cc4ad4c225a02fe35be338bc8332460909cfbeb0f731d6ca873d04765f51ee11c0f1c6d09d1d166aa1312bd900ae4e58a9acc81f8c3618d1c73e6299887fd1753589f23e2ad6b987ab1e85d0cb5bf9fad4c71efc6f2056552beef494cee7cc8a8391bf35087e1f19a7a318c27508836f4ed57cc144e5ce7c5e1765bc0b5734dbe5b25ea3003308b863df36349445cc07b6d955d0b03db123b597183d8e429c463c2191af5974c2a327a383d59324df32502c0ae674eb489bb0f85ffa27cd03c51d0771f0292662a78c37ba782571c37dede63935bd87357d29a23f72882180f2765cadf7e650ef9ee7462ecf427e5de3578304406c846ea1450a9449e9017a5c2f8881a487fb9f50a741b092c88400d3f909a026b70920bd253d54bd6a13ddb6725c9c0a49c9d0c0eabd2a3bae4d48726dd5f78d2d4f8da4ae343f976a20c57690612579a84bdf244c70ece9605a050869ef88250e96e0d1b651447ed0b05ace5311aa4d9ea16e6051cce3910448aaa176c28b323bc84aeb7ee12d4103ed260713a13d6fe4f099d5d7c75fc8edd33989844f826f0c96cbcbd908cfcf4e50afbb4dc0ffa8965a87bd41ac97bd3370194e871f7c25e61d1cbadbfafc6ea9af8993af84bb11bb07c8c53a904661d759b00b6c2c35e42301a8c9e7266fb6bed8e449d6cf9e96809f7ee0a1d1248a37f7dc5f5a1c22f0292ba9cb5813618d2233ba60edcde041aa5740e9143177e7a80b294f3fb8ce2365b1fba46f7db5e0e0716f175a26834bbab9e65b081c932409fa31b7655adbc59a8761f23fd461b85298b597af60e55c8f8a74c5f6239460e65679959a46458f9a1d0eceafd9217a9059f8d02156621dad1675b5ca6a89334dd0eb00bba5a3a918ed0c99c83dc9eb28642a71406dbf1bd951ff0a5c68493997f705691318e361be28db8ef1760f4495573e046bfdacb177d8bba57080ce71fadbd56fa83a3548f48e369fbf0957f9cfeaefac252150146db31109b3bec386ce0ef85e923b6d0b65fe622b1fbe7888133665cd4f6f745b2d1e7937df6440117cc6bf4c92b59fb7fb186fa2bfe96e0bc08e02b8d553576d1e29740d81321af4ad1d19503cbac5e9a303239e0c96fa0e6d41bb94d86a88006f13a7abbb5b76aad09296c90fd33ca1814c9d50a76c4713656edf25f6a495167cb4e9f0289336cb6b696df2d78677f6f26c91010321efeb0b5e77e73bc6d449667f03a47bbc9b35ba8c190fb2f958f4305967999be859216354a1c47eefc73390c72921a708529514621c0b647381cb090b015b3a6953188a342bec16b22364e1724e4176dc95137ad43717b19cfd161e4b22d0842ae3239dd5232b24ded9fd0d1d84acdced0c7b41d5625552959611e5a930b637f0b1108a52ee1d920a87ddec2fc180d55adfe8146b5a22d9d60a2ec8a9de2fe8c1412e2cef3dd6602cf1da9ec5dd190ebff6efb0c2753bd6260191dde8b04cedb932ace8856c6ce1123da802f424b840953a420c89f71bc37f8f213a1b41f6570ba84ff344565667ab499bde75592c8f377934ff6df4a2c4d3685465475f5d19bbb0bf8c907c2b05a68b3aadf6722794b10844fc6d1a3d9398a04872fbbe9e8a9c2457bedf0793e8b9a6bd6210296676f48e289d88ee88b8a875692088bf8bbd5d20497c0dfdf3577bf93ed6b933293db90ceba7d59da45abcc97319ab5dd53e8d9355746edb5ef391678c900dd62eb77429144cf7ba788d81c98a476428b12273535689448dd8daa6589d04e196da8a60b931b8d2b61efe1a637d884a96ba67b716627fa09bafeae308b5aa700e4eb86a1aeb8b72f07c9035546aa6e5e6a7cd39a67c0a907d02459c2f2d3139f0d606cc41b77b52b51b09e375086a05a2b1fc92219c6d6f22d56193900d4524c96a15eb341b7a7a5f2a8c97a71761a62cdc8197c59a77743fad27e339aff9371dd02afa7497ccdaec03cb9dd2324f3195e0f5b7355d60731b4095efce2a854074b0b6136bcca0fbdd5d8d3afb86c34c402b73981be51f0a522ba9060032869228256e6689a70ded1644079dd165f6d43f516c3d58e20b91acea86af7ed4bc538c154f7875b2ecae03b9db0392119b2c5430d409239d4c130dfc4fa713b2a6ffc0cf33aca05767c062c67768428ee18206d1512f8fc5de4c426130defc0a3fd080be2caae2a9af6c471a0053a40d254abed0ba8c5d64397500a6b4aabc4ce534eea950c09f25ba4668e95f9760a0c3bb402ca5a7aa0b3ed10b7e62f97082722102652b3c2db324519b03c016fb6e6835d29ef813d1e1e19f855b72344b61afe04ed05ebfdc467bba2aadcb9d60cef71575e621fe984517acf85c480471fdd1b55a30be90248aa488c2785ea1ee7fe22a083e24ddff4c80d48341253600375f72f80e966001a3579fef16d33b667abe86547a59df6febfeb5566c7fb950a7db46abd26480c2fbcea41fe30e64a19ea97576684c9411acab0d11dea17be570630179aa4a510338f62d82d8d6d31b881c61fbda0e6ca8414a21b53f905618d47e63131cbf234e2a2a51fbfb3d7cc51baeaf81330a3b67ed6ff86fad2cf3cadb27aada5bfbb3bdb75092bc6eed0f31fea677f236d08319085c7e8d01d332b45c50eb8d8e64b0c3608277e86dc4abb5836025174081ad7c5b1f1b3ba352ff8d09a991defe931adb7b0d6063742c848c80f4bc91611094e268cc7649be95a223b6856edc05e30d3b8389930be65189a22d189191b338a24e4c11ac84a1b6304ed18c6953f8054c2b5e26dd0f68684d062b06ae7e1c5bd00c1b5a2b28066f187bfa0d1b7b2a42fb467d0047c4e889326a846f8e96333a22a6074afe04100ec5dd700c0df2128aa0e4bd7df719241d794a138f6d9cebb7cd959703451488e8e0cd07b02be9e000c4b484f9a29b0b18c7c79fdc6a9c3e0154ee9717344b7a00752f41cc80505d193dcb5d6a61b12b7dedddc3bb4eb7c0a79988f4ae33577da0ad11b8a33db4ad19516d2690beb015b3a0515e336ee552a800b605e0ea451ff382a57ee1c6964f93fe58bb9332b4423f48045cbf6cbd544408465177ea8068caab8014d4e531bbf19235c5a6d6d25c6371db453ca5a4816ed725dec9012b678d37be1b273ea55a5eec141fb4d0453d106a3e8d2767541ad1e6c697c3eb205571f37ceac7e1b90d399a8c9567091dc463dc232f74e752d71e1fe3c9ee22c084beec6c9c0141c07cbd3eef41da0e4981be88c6d230d8e380a450324e20bb052b8801a783a241e34494ecf2fc66a203c7ba4db2aaa15e708511975c9271f994f78e98c86c498548724eb21bd9e601c00a56ba45c51e0c4a554cf47a7c8a19440e07ab89706f9f5c0b8e0d30a4ab4100b80dc1d8e5c04615ed96d582c769a0e1b88c3ff3e7caac4e9d377489c24644e371d5176f6007085acab6f575710fff0dcf09bed0b0bc31546f073d56d102d3345ab7f89cc0f232ebd80a279ce3ef02cc94133d428a2cee016efb30fbafefe0552e7eda8e46f7f0f24c4e387e10ee0fa43d7818e870b600365596798013071bc4a5802e06aa87240ef6c19731edb252f6d812533f81322c08f13bca256ced7c968c6e63f7456a4b4879b642fe6fceb8bbbfde65e0c8358ed70c7ef5f3a3a540b34c75012e8eeedc4cc7b412d8f2424c1815fdf2386ba4013240845b08970ca06e0b61e2de1096375dba9b8e4f0ac8ecc199354fe37cd269d8dc038fb43b737c4712bc930b30505d05a7efc57efe2a3dbebb712eb66a5458413ac2714a7c0f261360bda749ac4a3f305332cb75961c3ee7f5c0cc0e99e9fd42c5470e5959fd9e287db6c95cd2ced1db06ac3de71b5899b7225c506cf17c51403a6652580143e63b08813a1e84ee9cbf590c69226589006528124980a50c4ec2362004d9aad05cfff3bade72004ff900ee1b49c0dd6bc52b90d08798274b0ec144df2d01dfc488772fd701a9ae9011d7fd7ad5f538358c1a2d452b473fcc8172023d3f8ba347c48f90ed2637231b6650dd77514ee031f0943a3c90add59907adcae2182dcbf2518d5f1bbd41818238a864cf9c70d0d63c3ddd86222cf410ac5fc9b3d3a3694ba032f649f8527ac823253c2193928788c21c31a6a3195bf1448eca1c54f7725c04670034117868aed0a87cc1a806803f15dc9b1b0be3a8f21672299b514bf559f8f282c27dda1d5498f3a39823f0ac8b9632bbf163944a4155701d1e2b61013999cac463c0faa74c2360ca9df26ec8a02b1a117bba02e41306c52cae6e90b5a561fe4d7d66c221c94442a2d3117f2a4d73994cb374348edc18d6d66b91b2415f3018175499ba6a2041102158964b5e529c103af0f6a189a7d169c92bbb08b4006c6d86593280df41d893030c1ade3f3511a55f996c00a1478030ea60593cb17bcb417b589d18776f49c660f1ee3cd94dffc2d4c3a8381a272cac82940091e5efb083e4b942b90c430d966cb0f05a746522b5827becf98b724b2b0fecaa72a042af4692ddc1a884b5ec80e1c3fd14c5f34929c98694e3ef3943552907d90e8c47913d89ab0914f9f2c2e5c059c410d40c3a30f170b969e1752bc5c2b6a8646014e45c85806a56c3c09c30f3386069917c69410009c957267f7f498e5cd88e4a5cbd4a2464ca3f8717f4c2db1ea3abc3609b6c4773ba65f0c4c7c77df42b4a35e66179b52fd97a13f5fa01c65f29a317820c6b183a9ec2558021bd7d4d8403ff8239b7791bee6e2c9051454d11fc2c6532cd973cfb0c60cc23c0f1801520aeed6bd94f109a72be6afc9225e656cedbc27492662503c71451c63fe71100eaddb63f4fe69be4e55b2dd661c1c1d7810e1d6a33ef60ca8ed8d10a0bce5ae0e685a6c216b962aac687815128ed6d353b511da6d722dc9bed419ccfeafea861248b46f83dd5fc6e4ffd5d24e1f99f0fdf19ab339d2bed9b9fde07929de34f096c3a8857e95fb14cacaed37b2aa986febf6d964769a3633b37cd661404576cf772639e1c5517ad0da147c5b83c371a1bb129344735feb8fee4a0e48e7246943551aeb21c85fc6237c255eb7928d3e1b282ce77898494bd62caff71c098d08112680fd2f5c41a6e455c541e2436d56f613221b2b1c023a7f88ea7ef335a5507e260b7a4ee1e1debd9f1fadb1fc194fc16360b4b808cd28aa53b5a78b314b53c051c0e9ad92ecdc8bf48ad8f61db13d27bf395c4809d7274b5fd987fada5ede07fa875f63729feb1168cb76caa687c2a3771bda6143af57da4dfe3205b205bd2dd04b977960d03117ae20ac2e6b93dd94a819c6ef19a41f257102bcbde036257d05ee450884f6929a0c8db55621d4513214a4d7f2c19dfec70cfa27fdfd7dbfffbafced8d8a61a25b1ff9314327bbd37afab976d3e7ed9cb908fee2c33f21d21166bf95f39afc7a7a6fbf30b04abcb8065d8f8f5f643d5e80cd0a581b6ff5b3e82e8d4c4b6f7d8a065f81eb23ae69078e4c46c40524c5c12fa1e0c5bb9c01b4806c3d9854898a5fa93067823a088d9813f4de91492826b557d2405f53fe4859963f76864131f3dca2af917215eac07cf82224eec45ff4e03ace03879952d921129521156459230d6d58222570e066aa62929dc3739da080d45be41694ae8522c5e043b365062e5efe3da39d8e0bdbed3108e533e629af25846989dfa0a8b5ae4cd012cdf1c2f8d56ec2bd52603370f146c7a591ff98cca777acb7ceb8d47e0c40645bed63b1f97bfbe7b86d35056b38fa00b0207d4f2849521c3879b7935ec887f5a3d23ecccdd721d95532a3e80f924e40ee36f98bce7f3fd052449cf81f29e6bc2990a5e9c38901d69a456ab45e4a0e0382e6d3ee83ba4188103a33b62cb014560a7be500b347143ba965b670ce60aab16aab3a319ca5e0278927355b224d315238e56b742c5e7b7194733663e298d0798f896d1ac7c15f53df53e47e374ebaa2be94aca9b81ea9b1034db84889310ffde8003f697244a518073d875fc77b4fdedb48cc3654e66f9ca48bc155a52d632d4c94c14b1383ed5a781db47818582e984ee3b725813d5bbc609ad217fe7493b1fc8a0090deb67d9b67da0ffffa6fc031399e2be29035eb721f9298004c4c05efcfc3d04b1f79abb23aaa05bcec24250d03c470c74e20923801e10215deeb93e0cc819c6a698cd04f92a84cb70561457681816ab64b8a0d1b94ee43ada447fa1fad3380565d40f553090be8e130c38530479435d5c21e71623a18fb1f6dfb603c1cee8942bc212c8f155622d4a513380ae526ace371c74bc639599c86e1fb69514056b548c2bfd01472be1b32f8d55145746137ec212cf35b5dd86b733185ed392020e408701db55e259fe459c6cfdb1785dcff245010cc8282b6a95ec61387df5ac4389aa06976aad34e80f46f84d359e5299dea960291d3d2cf5fa8ced9ff6d178d8a1fedd5b3855dcb3d7c76efc88ea2ab503af5cedaf3040ea8f230b97c14496f7fbe5a1336597b154d367ab063028b17ff52b020512e1b920f3041c72d8947006c914633f506f14cd231b60a24428844a420c3e92d233e63d98924b4933a31d253348c3be477d8cb1ddeb35a829e25444c86c5a086135b3e16b8bfb17c6404858f899f1ce1d067634b78e4e12160e8189788a0f9bdedcceb965ab52a88fdcd087634eef8893b910c48daa02b50e655aad6429d34536c6d843b9f43c972880f381916aac7331750558d1371d0978514519a25f5a7e3a9c203ef1ec3f75fcb45bf69ab30f06e6f250c1858769bc0c1c5b7888eeaa69e98a3c742f97d6ad90da4b96832fe3a1c764285fd755f0f73c465b6d489d62b26fd1516c2db65ef292128f85350b70857be437e1d9fc85501f19ddd1a3671a107244672575042f52c34fda088a779a641da7fa9c801a2948d2bcb7f6dabc88063e9f34792c227b6c405403464df0b706091599c20dde2bdbc730c745aad03409486c9df099da4cc11c3176e89f8b880d7fb22244f40e5c24c6763964bc399180b7b6d7c2e419f021fd4cea3930245b9f6773ecf78e647b102efa5c2a6220db6a66b823781a7e4d8f4f6dc56c0161fb3a579c1fce6d9bfd4ef4434ee6cdcd30a3ba097e468f5ac5a7f0102864e31aa8a98d1153c4f892fb39909b55510940c43dcc98828f2bd097caaa7b8f9cbcc70c88917041e64ee753a70b00909346764d88ae5932f9ef41af0a4a91af00ed60a61963c2503feb4b298e33680b7f752fd6b2989fcbb0fe4cd655e8e9a6043e1645cce28598d454d058f6b1719e434755ed730a1f5af865ccec639db24243b5bb0e0cc86338386519a7f2abe5b958004126f903b3cc3adfc18a0c5c326f4c9908d13fdc46e448b1f230aa889e9e54ef7cec56f271b9746b53c96b1ed2258a96db84958986c83ab80f25833113851abfbdd3aa4982f82069a010718dcb7e9c6a02432759e17bb76dd19ade07866e3fe7be251531357950ada085840391731bc7338c3340912cb441ee128c6eba3e2ec444f8499698692e626f5b3ebbaba3a123b8e065806ebc388153a5693fde82a823ba5a9ac802342cbc8c2a38ccfd64749750b0b4f560f4418b0234c8d63ed0ba121085311c0191f88b668f79f63b644323429e7f1b67112e52d1918452b04c41acf1a88973142dd24da4d767275c78551d5c4fdf07e8d10eac582f618b7a15b899cb02debd005df96ce5a379f895b3792b204b9d51dd34121cb0d410263aa3f86d8d0e470c6e9d473a75bad3dd8901d939781b72e7378094e1544572bdc50b7547cbed1b73b4ad10a5dcaa860501a74d5082e019bf78c8be41b8d3ec38dc8b23fb0b5870ff8c7e925e0ac8d10f8a782e5a7ce72fe99c2e2011df1365c51ec1bcad618cab67ccdc72ec6c81cd830a3f8856c7eac5a15be7ed1c1a41b2e89498a5f13a38d108c28c75ee5125670c39f2db485c8f168090e40872319437e09e423d7b2508b38506b5613f2112cff75c2d18e019f297189134853879051291dd96bdcaf29da9eb6791e55b05018e415e03d0cc3da1b83784cac16b75f69fe0d913c37ceea456710d668e23b616e3aea022f4d9359f4bd592ae83de73297116ef4f8f447af911f9ef201010a21a178c1fb956cf9e548b23d6d1e5e1f1482840d0bec8ecdec88f8342b483c566881395a5e8f357664e85a9766f6a1f92dae615d009f0b6bf92d1c584c8dbfbf08fc08db87f2bfdb7798bc2d1722b1e21701154b109f705175f245f52ac467de4d43f59309dd457582f0120f9d1b5c5e65b2cb6dc0e20a52bf9b043e9073c2030adaae3c64ff00ffb5ac16d2ea0332eab40ac9b19ffbe68b2fe816ec9bb6b0a89fb3f93364ee03354f8e6d1ae4acf9e0cc7b2e22d10a8243bae41d3fbcee19b4e7ca87f5a730b1d8f393e158b7cfb3ff6ca28ee70fb8ce0ffdb0d388c60fc9dcb1e8d8a96bf139231e95945f1d2bd94a498eed689894d9c293c88cc5f8044a16c0c7cb334624143beea6f74924eb8664c4bd49769a415564fc4c2cb3849604895099f12fdfea6156264e8fca1bd4fdb8ebb5de7bc990225cd7a269b9dd8ea299cb70abe2c93bc90b355b3c99b60a40364064ba4e6d9383e6780a07ad0a4ba123b01673ace8f4ab4dabdd85ec6caa2977e8087f626b59258edeba40937a00f43280acdb9fe28a2ae53361f41856a01628584e02cad10ac745fce64506398a7b4241035168c6d7918e4883c7a47c8b0f0ea48f0fe6ae1a74ebee8069516f40c66772952e2dee3807c07528b49544a5a0aac4166bbd48257d29b9c6151da45501e852bc0289946bf49b4bc0c5ff15092aa806096539133ed3e05fb763a1968334cb8d52de7de04d17b33c26147860822b033aefa7df99d18d9b1ad61d30b6d2dfd27eab4c20c5cde4c583320d562dc0c37e29a74d6dc2d2143829e5803adf99c410e0202eb38f82831339d6cbee8046c9ad0d4668ffc368f2f417c30db18e2507a937c014024eb930d82f74f8abe096fb84b2724abf59dd9632e4c6ce056790876120af347f03d6dc2ade35dd573e7e6f301e849990f80071abf5ce9e5d0a0d17338be01c581cf37cb758d6cf525b5dfe18382f48ea7fad37825abd0cbb61cef9374901945f48ac2087b13d6fd8b2702a528a3f64e69a9bb83abd9f162d1c2dabcfee73dab21668e8dde52bd2d376a6b8c8083db605d703814033722d3203cc4956250f1b09fd1f7f2dfd3b2627b2ddba7af8c61d6f3f71f7be3abd5e7082127ad300ef1750e382bd8ba25458671cf4314306420a7ff204aca42dffec34cb1e0d9c27cac6168d664ca651bbd68125ccbb19a86ab58c641130cbb967d33888959adc594fb00fb27d1044cb0b0a16477e36892223374ffe480697e50a47311e0888e0a5048b6b65e68788740d3168d7e5600400aceab072058e69f5d318d965cb2dbe84b24d660197ad2d94926dd5053a00908c655031876d5988dcc5b025c40390f2072bfe0d7ccc520290943b23e045c51a2a5201782d46901d1962f0829732b2978c5670d79d1280a7f5cee7756b45fbd7c55ab581f13902e6e2df1f9280b1eab4edbcf7e09ec2fe0476cad96437921374ff352554f8ec6a41f7d63548497cba38d4fdce8c25df524abe8c521203259eb51fc6b5b55356dc4115ebe09aa962fe78a699c005525cf33137b3d4409e85be537f67c13ef82697f1bfabfee76da875b47b3db89cce289cb791f6287f30807b54e4e83f642910d4f67aaa0b188069f7b6d781414ce6529a2fd7144fcb7e43769a7f2e67bb8f5ebea63ffb1413424c9c9e23971b177e6bc74e4260099611809a291aa797fbe2e34d125f5c1d51d934cf1d8f5f9e92bac338abc48181d8ff1983857b3ac2a50fe24d2997c0e096e8244e34a9692393d6d068650ab4ba3bd37a39f6b6c0c215f39353f82c70269202abec1a19164deeb2f03d4f0fa9d10abb01b8921d3e76f5c0a7d7e915fa3b9d8afad555ac0c94d7c7b4c094aa55cd1c633d869b5fdfe0f7cbb40d214d47c881865b4626088d2816fb9e838d60515dc88d09f299d83784735ca8338f1997eef4a0a0db1c081323080f6d3f99baa3564a56b2e701b64a0ee5bf8a7579eaf30a670a11fc79df565025608807f721282440179e282c21d5c40f05a3f89939655c25e387e179f7fcefe94c996c34c1ae5b4d435a6ad59000dfa508291a8a7b6a4e5032ecbd6a391ff5411ec93d09f0b6bedc40e97c4d53c16b682764e6a7aab058ae55cc9f5de1c1188e291abc7b61ce7246b758e4a8b00b0dc94ca1e6e685220b8202e00dc8bd42d995855a4d1a3c9a55e7ecc89aca9994c68a2650caf7fe19d0f50749879b95de07f15a3fd3b4f380f4be2abf5ce8f5e00aaaffbd312b770ac2c0a4445ea7e5bf509c8b70f9eb3778582c769866637c5e64cec57fa4444c06327415560e7356d86c4fba446f5c23b645d3671a5c65e27158c6cd8eaf23e7da6de8af49b0760b0c41540cd271d68c761861beb5f05a022a3e28cdedd6c7166d296b4c9eb224b5c67ad1ef5290f75467bcc62b72f51113b0d74f9ed7eb2270d476faeeb492352b1bafceed3a3820a82e1ab0b6863ab34401b5cc21c69fb8fcf70db0813356042be382b3c41328b0fc3eb23fb4051f9401b0452ffe439dcbecd929058d1e6bd5e74c86f50ac0cf1a6eddf3098fef1d09f95d755abe75e83595c11f18143db2fb265aa4681f4707027c671a04ead6c016cfef1a3a98841b6ff48f4de90383a2aa2b2bb077f95bb300dc08ac725c7b4bccf7045ab535f98884350920cf84ec6d54aaee5005aea38cdef9c268af504549695f9484e65c89931cb47e2dd54fd21f948f4da250ea66e6a45eddaa64b84586467dbb5b2b6dbcd7e5bbf8b30f0fbb308f6c62c5d7ab9672a00e4c84ef292087a83de48ad29048353ada8449e7e3e80b4ba7186737b8e8d379b13944a1ee80fc27147ab509d2e79a455bf7fe6132fae14cff4af994a53a8dc93608a24b608edb8a5561047cef37643486c1d4bdbc495ef58175013146f893cdf94b756446e0a7906aa09c8330a09853f71be04c8cde8f6e715673ad18492222aba28c65a10a4e862b8fc998d37663e9522eb07211d2ee7807ab8f4fd89cc182fa98b0c6fb87e35da6b6af8dc9899c32e9417d332473a85c526a790be20189c2760e76ab79a6bb199a088fb82406415eac19f9bd9cdce712d4eeb6f8e2b0cdf9b44b817672729b4edabbaff34bc020fd03579effd6225b88b6323e43b8b22978cdba79169bf008ba0140a16c3eab599ca5358a678821731053fc5b9d7c45a38bdc6959ae270dd8dc09f2d28299131cbb347d37f38dd3507eaad2d7e8079c4cc89120736f5181d16a1c9066735164db6044b6882de0ff4070486dbcc3f9fdc3ce70fef4551b9f2205036beb8b1dfe3a7031cd94fdda66417410269687303fff3e8ca12ce50ae31bbcfaac92f391c157953471d537a0fab81280c61290e4130184d8e612ee609ea477ecdd055b80c9136d9de5da9e04153b5a5c044969c9610e5ee84bd48f735994f1b51a7366a5d3a649337337f14ef5d6779887e4f4909531673ee038b479832c22b145100b14e8710364bb6a15b5e0f55ba3f13b70fc19b572ccd89328d8f0f7477c327cd4a8dbcb784929be789bf425f8afbc2b89b44982d71301f39151dc7101bde94b13526f439fcfae20709a3d49624e81cc16ed487921fb6ec0228473aae5af9bdf2a997da9d705bb57bb3483f50386123dc809c33b5b5589a5af02f6c53ae3b5f5deec43a1a5385fb9409f26a69f65cecee7c790810b6da4066c9da9a33ed40f1dba7951b1a6bff9cb6bf5bb19227bfb727022f65a0046366385f278c88b30efb514bb6c2d4064b5e7df8124a1de99d8d94951fa4781c377892c7e0cb596e2af1fec729f713e6171970373a0fe8b2a07cc15a95e70fbcfa8a924a05889709be1743dbc89d445997b71af710fef22f122141aaa5c4fc9cdd219f74bd6cab9ed95eee4e68afb19765c67235100fb59cb6faa7e71d1595158b3f06d166dab9167b519f7dcd18c75ff4b123308040a9e71bf128a55a4b6dadaac9bd1765a705e404c0bb25a7ad42df4488adedd9c2102264c9d1fb3e99e54428a89816b90deb51fc42aae52328dfbbb0a3a23232af757f3fa981a43d3de05d0c0d3b367e7476c422979cedb0948143e61327fbdae48baeeddf9817c440231ccf7f94b5113c783a9a6100e120ade1474b286b25233dccac40e96763493e6abc38fd1b199bf21ed191655fae7e881c5d01b96e1439dd2eed9eb44d78d908b4534750840d7e0552a775fd9d3cda3603b1e46e1b863c9c257b3b1cd6491390e5a2bbe9e488e18f83556d01f658e1f359c6849ea1a9b2c21bae829243392fa52e4c355c0d9065a978e49d521e93869efae57d11972c26195798a9f1e96abc7a87ca3482a78d9a9d328bb51ef9fb24004d2844904de246916810db876d3757baea0774be0905a13726235135195461a13af57b7b9ff6b2f85ce18aa9a37eb27a54a20039f931f7c3c4ca928119e5c21efbe0ace3d19216a8706e1d6d180ae169a3c24e4ed1d3fc2236e207aef5bf611cfc79910d482451a83b5c4c74c8ddc8cde3299c37d089ab0cd86ccaa4fa214d15102245b5e81e202044358dc06b2344b7bac05ba3588d14635353e59c6a7c4be1209b282405a62c0dbf36053a4883ad704f2db3ed103782dc4cddc0da565de13c490fa190ecfddf623854fe84e668e9fb757345b448b2db6eec6d337a0689005063dc89754c1c937f88fa3fd2db0f1836efabb297bb66b48bdfb74f59710ab34599e151632fd4d1ef68243c488c27c49b42ecf346f33b7d05f6d79633d3264add091a1ff9cf8e5313581b582353b5737730a2652ee49a83609052d4a36ca30a70f4cd457049dc13a677ec7ceb03fcc93d2a0cd480a247c5967d9b3a22be882ef0a2d2c5efb1b061a51e3850ed127c442bb93e3e9e4baafa2298a70049f41b668b93ff5e711dd21f7f4f9c24d6db84fdf29e6dd22822a3881f68c1dcb00da4b64433183997accf134a66b2c63b04e9e52cf576a8fe9109644d4cab14ed0d60812058503a09953b25773579355e17f03e7a5708f2e0b968c980f033cd3c828987468f84d8a09046a74fe3d6c8e5449837c47917b9d3419bed6de4290841aea7bbdfb70718e6131914e7e62e5ab065f78968c44a06162595321c1ae3692642ef7acb2030b52d6571a7d3f8f0399ac2f13cd4018ac9c780b93b1e8fd24493ed16948847c92c681e34a0bd34ed41baedcd00b35ccad2efe797bb1eb2df05fb3a8a8a746c4a6d38b3209407d1c0a19bed56d1d1d3b93bc8fcb88c6f4a3ecfa43dc7c6686ccac0a585531f42af400feb2542b989bdf276bf27f0efd69e5773385661e6046efeb0e671f581a994ca74a7053b003845990e4dafac24d31ced919b28184b247a4c17f89cf798433596b81b380c9d52fa5cade950909461672d1488a733bf64c1114c65914dd1d60b28ef9536dd78482b9837a31fab3e3a0543897c7632cdf5ba266c70a7859a314e2d76729b33705f9b63bd581531d493c8d9bfe63caa589d5953c1cfb197ef4f648bf228fe70111921330aed6abc7ce0955a0eed505735b3abf2361d3c18905c80a28e8ea256b65e0157d0e35431c312266739b56bf501192c73d54bf3979836562ff2c0d230882996a5b2bc037d4c0b13846b13f68a003a5968491275ac270e048f9de9c614fff66d3b27cbc7b373880cc8dfaaee65d0fcc4e0856460cbd316763e78cb5eb26c48d341d8e66b9cbfac30297690fd1602f61c6d887b0e0d047c0e6558a295dc6217d82d131c9cf100abc7ed6a5f773471e2b0e44886c533d2468d3636c0729745f463735a9674352c01d8610c34c905b1a9bc2377e65c0a7f7379e5559a5227849a82472dabd997aa1799ca10e60dc0a334ced2700e22688456171c92c83def194293ec651eb5ca7fe504b842155cc0a4c96a4701f694c2bf31913e61797058068cd89bfcd92b01c3247f9e6e14c855ac390be838dc13552b2d7ff664e457595cd5c375d0a951d1fbbd56c3aaab317e8b89e8acebec4a047b8e002bebbe514b3b35c99c105b75cef2a1f0cb7ec64327c5321ad8a27e65b116d8482a0f28efc41e0c1184cb24cae00548e4c2b390c8854ec0495665dbdb3165abb1c98ce30e018be0f70bab4efaa590070a17e3116873518eecf0e565fd2543f9c4f7602a038d4484323cac5e2c985b1d2fe0369b228d454b1e48c1402b93cd5276e20449d4930634edc43883aa5418af20cb0bc4c1a9a3021f9a160ca6f95ecb23c95e28ecc962e134a845c7c015d919d2f1be249cf35615943a64c0eb841da8c7bc97456fe125e5383988a3b1613aee4a0c0fecc379ed2ab36bec83d5bf506b42b764c263208c1d190e64cec73dcadcab74363d3e55594546d3c4ce80349e650559a95a4ac872a8ae1d7d4b941cc0bcd8e3911ed3c463aee6e08915914562274850e762d14e839c15a24d0f22584dd7065a471b09fc012a5f88db1a8fc64154fcf6f2c0a5a21e28d336fb94cd4430037fa515522e3ab880208ebf3c28ca5abf1111d674ad3acf741e18dd0155f7b6dd151f20389b6692881bd7f651d6db1e47a91a801e01af2a4bd7e607a3815e19f7d3913c3f13967a7a94f0d8d6771a42fa3927145192111969ea8eb0a08e5cf81acf09d3c748c85201c2423ad4ac5761a885b221d3dc3d3c268548d318012f5062e0c7f2fe9bba66416a6e8b54d89443b2d5b19d8da814a3c317594fe90bc32a90503447d97e2bcdc249b54ff24f3f9c22db59823146098e402ef5e25eee64d7bd7e1ea190515ec222cfa22686160ee37c052d79fb5db7a7c73ceca70ba7c57b9ff9df2f916cdb27326e8b4d830260e4143b3b2464f96aa5697c4c22ce78b685f7eedb6e35d5c61645f993891846192c855baf1f27a17d1654cab6f0cdf5a92c42e94717057d590aadcce33d70adce701b4a85a8855a9ea43d9ab13ac64ac0f02ac2be9d2454ef3e0c0b388a0505eb5bece0340f6b5f99462c20098315c4c4f0b359ce20142dfd0a8f52a4b28d6385f6408bec024fda35c3e6222c1c21119029e689b8b120eaf31cd5db975e214287b1c0d77d6b14d87dcccb2add383ba2ef9c9db10cd1c7e6205c424d183d06e8d0815e708ecee1a0a57a883a2f11c59b2fa46f07006b2eac16c0424cc7ed99259a3f02a49d217e1c2923a3dfdb49974964979427210f63cb5c187742201feec3c552e02f3ba753ac5657eace354f08725688e2cd6fe08a29f9cff35ce91d77b9a6569f4c57ba99178b90e78639e809fa9ffb8468e2dc8781b2ee9783e79b2e90e69fddb1d26041926d9b6bf701230477f00555c85febb3204aebf09154ae221683bdfeca112f270f15f8a446179591f61f37e0ae23b9f6cf0d80d9ae3b30755ffb73e384593215b874570f1bb53fe6fe5de38255ec08aa23aa025a91045e8f0dffc70498e7427882a1b268a2598cc5239322ca469c44008b39cff9dbfe04ea4c05f4071eb34d6acea10c0543f953dceb5ee6b3bd5fa71f4efa256859e3f414f6c98455e43a8ef8f5689096043acd19b0c32aae369fee88a203eaa869d72578a3b26a21c910234493ea5d1f8fa6e90bb374e7b85634201aae0451d462caa17009f1509a057ae60c772601f82ff5d3c02e54da05a93ec09a6b2889bc38f543503ac9e173212121dcf3484d0ad4e40b2d1a5ba290806aff3653e2ad27aa47aa3df12d5432915994349f69bcbb6a9d608f35bbba38fee8af081763bf22ca45d4130c32a8c80aea4405f43f4f59e03437fd2a8770a122ad00e0eb49e31500a71d507e98711475c02216e5e37076acdc216a98746e7ca6eb12d1f19e741124efa4aa501601e8811a94636b1313df1166cae179fd12fe69e62182f80b3c14dd0beb731589ed532341a1cb8a355931aa65ac9c3e13dc9e34111716f19c0e69d2867216d9841b5ead5e1fa742721d437c26cda8aef364e7295e4a9a6123424ee6527fe166a14aa8dca3c9c4f95b3998b3a49b99f66d50109f9b244e9762f2084f4d7bf24ecdef7e1f1b726a72376a3f4ef58c8e745683065e1d0bab5f401ef311b701ec01a40a031adbe9615d3052325207693177d5b624c9ace738100869c0fb925a8154d2415847acecd17903a6bf52e4750042c726cc718e0e2062568b8261b8000431c68c55373ee4daad9f7b800f7ed4ec2bf7c3609355473d1146c41742f6de7b4b29a59449cafe05f305270639a8340885be1cb9408efa1de6a1d0d3061da7ff7d356d40fe6c0dd0ffbe096b4b2a4d5637b6a4e233dbdea21d8fef29e8258cc159c4431ef99d20af98f98b40316f600667de7298b7bcd53295423f5f15dcc077eaac9049ac51c4f6229e9a2a17f3df1d12162d5831dc21ba106e59a5940b9029c7419efc7968c27dbc05f3425c5ebf909787f9d2a6526663082d04ca7c21fa5d5e08ccbf3c0d7d14f4bb3c0a30fff2f3a3a1e003f4bbfc0ffd2e3f41297bfe7c584acc4387e119107d71ceb2f63179eb89a43057744b859dc5dc58582fd4f12d4ad9b843e948473ae66dcbd85bde1a432ed31384a0a0209f1a445395ee9c99c29131a23dc109933645489b69c43cf9a4229b49c4cc946ca0c51974e3c3437762a65288800ca7dfc0add8ae65cf94646248b32664ce1812ff264514c9cb4b398269b144a2697106ed4993277f39693287d2f89aa201d280b4293361d2c67720233003141d8c1993c34c2e63f298c97f3c947968c5431f439efc47a0b8c180627e018334e838bcf3e04da68fbf66103b68266d1c260763489b221c09ac06186cd2640934de7f4a215333a5492bd16a5e2cd1006bc09aa7aa1a30c80baa9aaf090a9ae12226a8608932aa9973ce49452460f9711b6943751ccfbfb3829e3d9f3f481fa794967449843174f568c4a0c5525e0dd99352dc2a958e90499860a92bede05bf1a9b5d5e4db6b80f4b0ce971874ce94f6b844585cc1f223d45732d9f662032d4e99cca9ee2670b1c1d85b66add49bbf6503eddaaee99715912991363d5a9459382031a0017963b388712dd689c5dce3388f721ce5a4cddb23e48df92824643256e71e12188fc3a10b1072f154f5a1a72ecbcd96ed412c164041aa202effc2dc8115245041b1dfd1a8d828151666144392523f1acd6fe887ba8ee675b4afa36dde0e41de8ccdd5fc7d9bb7812190a1697e5343e6e8efe55f5e462f2490028d9ef42f2f1ff3421ad16adf8db450e8be5eb017ecbe3e98480413c144b04ff4e27d7da2cba6e39b97bd50f7dfeb3857f3766f94cfebeeebc2eeebbe6e14bbf9dc683496cc1814887a91e334489b94d7e03c9ef378d6da90f3d8f083edfd5f96b0bd9b209ef28b36f945110f0feb82dea23cb5569a81b00ef4cec98f923fa948801b5b26b19d8b9a1c3af286bffc1979034486feb28815096405bf991f273be9494ba50815bb8b616959db7e721cdbc7221ed38929a259b095048c319e3be7eee3dea3a6997fcb5f75481b7fcf76974eb04706757474cc58066243760059a27df8a7e0afe3df83524aef9c79db728f0bc86783680485eea93d94ba7b16b97f18678c33c6b86464c4f2ffffffffbe49d838303cd053357f7e3031e8698bac6aadf4e3412b0dd5061380f853405dcdd2134eec8964826e02d2a4933aa5b487d548da389e9bcbf71d76ab451ece37685f1f7af21a4de9510a0e03c9300d327565dfd7bf62e000d5f0aac4830c87fb9ee8b58579e9401718f0fa70a0185a89a1950b124c424fbfbb1ec537c4bd8e4f183607ba6c2013176aea76c6b7b6c5509036856af414020ac942317ae2f1a1a99012f2e4a1267ca4f09123121b26045093da2843b2fd03432b7a9a9d7b47843edb98d960428b482ccf33476344d388a2bccc80c91c496ac91cd84c6d460c00403562356435acf80d0b2de4ddbd7f8d5908a3cc018038828550850d5b14d5b8b2fd6b4ca9f103801dfc94ed3fa30879639d48d95a8ad8fe241c644a34c43cf91bc1c316254162915e222144af0124a1c5118cf59a8144dec08c33583227c35c3123c9f6d73265fbcfc4640e7e124be66c30bff9a48c62211313d17726263c5925eabad81649ff3d016a5a9ccf855e8776a610a80217dbde9f20ab888191cf03dde9b7a308cfd6aa24004500a1a5044253239afbb8efb0273289a2f8c9452f0fa3789e120d8a60a2d708266d569a348291449fc44d10915a304e0433c25c216f44302da2d70c3923c90c2472660a894562491b237a1bc144afbf18ac3312abc492363436066762d2867b85469963ed10db9f7b0d795997b471273ee2db2186bcb4b1609d8d308616492c126b3b894562d998b940e16eadb5d65a6badb5b6565babb5dbb66d395b6badcd39676badb536677cb72c3f8ee3b80f4c2114147a19457cf4d07196ed7886b1cbc4d2bf6bce36b6bd9aaec53db8273f7e0a6410e3d975e1d90dc2b3fbf3310ffd6bbd413485310bcf6bba5692e0191e710dcf30cdd6fc660b9ed91abee2788667d6e65c63b3990ccb7ae88bd5f4c939833e6849730d45f5e005cd5bde72ce79c31bde72ce79c3db26b72de76c6dce395bf9edc8afe33a743e3e340da487f55e4cf1f7d01dcfdb199368fadeef009939f22a476e09c81c1fc815b82ffbcf51ec90f2de7b71a514bf9d98524a29a6b6ab9fad4f4da14d29a5f4dea79b10d2851d2072bcae0ecacb0fda7efd5a4b25d4113a983bd06829f8d41468aa565aa58966d0a2a4956416dfb2c2913974023429692e84a1c552a954aab5a6e0f2813bfdd28f74a075400c4e3048109af9ef81414220cdfcecee9de9e26ecb79cb5bce5bee9494b20c3a29e93451fa939a686cf8a0e9cf9f94deeb5e9db3fac81a0aebe3b1acb56ea7bc11ebd3d8979b624b4a62021bec20032a98d04082f1c5e803145b58118413242c5858800297163c3c146822082b341d6a28830995e37c587fa83bfdfa97d27dbf821b53da938db058a49452a2e82ae71c0b513024d0f36bad3c644c676475def44c72d3792fc6b6f3bcd649e7a4f35a2c6995ec2a273ad3e7b6a462c4caa65275719db3ce59e7acf98f48593d8e27a694730420d49c006aa2899f52ad0664e59e47299d3470a05802f2e47fe5ca2569a1c5c7e00f3d830652a3a1f284165b528102884d3f1e19a4a13f69b0e7cf9e26bb61946851d680c899813d79a004902db4f8b424f1bd78ce5903b245f1f1b0562aa33355b69af0bdff8ffbffcf6d195ffba2278997e8235a26874077cd9c755a5c6bad359760022dca9aed3e8072006abe9a1b35d4877ef14057e98eabb43113119820cc273e383825fbc4da27ee3686d0f8f3e328a1c7e8881671688d310e8e748c29258d44a31baae3f0123c87e1ec8b9cff51ee212a0cc3102655f4c90b7b52c671dfbcbe0099e303efc92b3cf4e499a6ea0620aa0852bd20c74802883054a11a542fcc2354a117650c25e5072dcaf1c9cb9524690599aa907ed1a3f0bd07cafb9487ae3cec5ea4ab94c77efb76ccce4433f5bb88fe0514e2bde88790efb54abf54694d4f795cd9508116e90aa44556df7bbf022af2bdb783d29cb5f6189d6daf43c5e9a2b4dd7dde0972502255f3cb201d9d68d193d028574899397ca544741ffaedb073529887f495c47b5253e53f33859e3f1e26113d0905668b9e4efbc5891627d09432611efa4fd0e399401efef9a22f0adbc1007d8d51404aefdda8f7022433e546d1b79463321c59ad562b9aca7995577995b3ae9141d32de69c39849ba919c32aafb81a19b4ad91417b8d0c7a6e31c73ccfcb5e9639730e59e5551e418d3cf9d7e001d4ae0d6b0e19c0165aaca9bfdd1a9489013a53470925acaad062cdf6afa12182cd8b384a983313666a0e2941e1b2c44ace80262f207736566bc5c3597c2fbe5d776ff75dee72db6ab5857ee9208056f019ad4084c673d393e338d26884da416270d0dc8f8ed0a2049a337c45aa62402ecca009346ba56d2249a2082c5c2b9518ce201dd1a2044a85a181ece06278f406fea03d590f99d30179f22f955c5caaab0b5102bd0469b9800d747f6934a0c2f6dcd39cb0bdf71e28c2b0377b4227ebf69886084d1bc081b20049f2d6715cc76d1bc76d1ff729f1d1afd00fa37184c55aeb53adcb65b758ad7dd19a4df34b8a43206389556259608fb050b6ffc8099adfd4df68aa64a97065d0baec68a9a8956e96e6a187e1bfcb25f7065ad748077c5fb268d1ba682a5b57c9ba00b0ab8c8816adcbe5728d5b13742502b5e8c125fa47f4faa74a7c2f77cffde67ddfffbf95ae564f140a856a0d5998140f633f320fadccae3c2e238a6e35827971d1a2900b34350261727ed1daa554d2ff4141a62474a6a75a08f2101a906c19ffbcc1e1e4fcdef7795dd77df7e4e582e7dc0a0e20a5960818395151385bb246852ba8e0a15b93aa9ae60e1f0254754194163d7f8649063ddfa250a82c6ccc22b1f24c44bc1d3676a034da6ab55aad56cb5b396bfd7fbff396b7bce52d1a96c23044914005ac2654415e2081890aac50e97f219c72031c5450b81771b6931ea85e1805db9736d29364b66e243d0c0c284ed20b49e63d1289f4544592f9b67f1d8f3149d5e8c524765b9b58b05fc8e712d1752393548d6246a351cce8a96a341a9146a398a7aa18d2e8c567940079b17d7e120504a50525934152a677576b9d4cbcff613f53d625d383a1e78b25397e53648e1ef3fbf9645f4ce6783f56216d9c03c5cfcaf6ff64dfcf179b39be29f2867f319054681b83630d8ff4540bd568aa93d8d66ea8e6daa21dc7d48de2960a4b454dcd16433520d22603f2e46ffd01aeeac01d3cca9176128ff4e48fc731040a1a6bf85e7c2fa5f776e34802f2010e0e0e0ec5c1c1995bb43d1907c4c1c1b9257baf9d73562ca67071d921f48d3535b3a646e6d0a7518346103aefc83e4fb0f0efb30e74186544013a0f4df9f098c3a8bf324bb7e60b640caac89729da85271e72df6d5b7e3c5af070050fbddbd3c76ff0f8c453dee327ff2ae40f0a753a994c33332e2e40de7a814d29278c8a88d0e21cb7cc1cdc344dd133e3fb359546107aca79637b1d474d9f3ec7d115eac2677eadb556d408a8191e5c8cb3873d5fc6bd1763db79b59248ab4e87871eeb21d61200162af13729072de78dfa9d87f2c675de17023f14ca0bc3ee9f2b9542336b6dd6343308245c40aa09a56502984afc91142d8642339ad2e1a1d9bc6149704287ae8466215a141a7f68160a856837a8a3748b210c1b08045c95411c9add9c730643169c6d175528e59d046bb7e0db037ab7a0f7dcd1c34390011e8e9ac854f140992fc918128320222af93920843d41396fdc9b7368169a91c6ef08574d065b66b09af1e1e383a6729ecd5c32d95e6fe00f3ff9e723f4cc59e684baaebb0f98e5d9f6ed60c17e0b795f1286d09b0f1284d0e25cedd47ef878693082d0fb954e9a25206ff85f5314dbf7a40ffa50428baf80ffdf388e9b5c4f192f2f8f628e6043801bdbbfcb1eb47910e741b57a90932173241d22533b9486ed056bbbb459803cd1641361141e85cc91d34433bd1663801bf1bda048c19d39863cf90fc934202905fd0a2eec00c939db7a6f2b28e8e5e58da0bbb702992ea3a3444f5034db342788667bbe6886c53780131a86189600618c2858f440441720f8c1902a5a7c51a489162a989a174f64f16305184838913501230748acb89841e5ffff8fb10e500a6c9db981961bb43d1ed24ae79ca552ac3561bed033063deb159fd2aa542a95acb52514d8160e8d26a104fa53e3143b3c21810f230d06188801c492297cd0e28a142a7f148ebdd7a25062f4f0e941dd6949da03e0d870c864329963eb1f8f4c832fb6b29752b6006973a54dc807ba6644a98f6de17c6fbef9de7cf185c97a70394c19b1a0668840571b61a5a6528d0fb6cd676e31cc7675b7c94d2838d080a50ab281f885cf07d5f6307034aaa88270a0a4a703d8ed4610ae595a0dd770ed074d770a999eeaf740c1d2ac145d6c167cb3e05bb434ac45da34b145b4959accc12f716d33d9be7aa1453cbbe2ab15b6e226f0bc6a0375e8f4a05fc674b6d123a265f28723b827f327c8d987cea7ae3a0eac5c2d4d12a2e8104ab6a2068083d78a71758cb10b2ff9a188124564560090b30f8ae6075d6529b77aa66ff1937b1637c91c5ec515d2c65f0c61cb79cc4f3f6de5f4f922ca7b9186f7620d13bc973b44f323f41f13d14b9d1ef424c5f60ff1649508f4414fde9ba62a44f3c39305b954ac5851bd808d5041b9efe974208e8f403840c040903973038d596aee592e25428b3e6e1103614b2b3944d9d43d8be8351fa5cd148ddf6ef1b36c1a41e86aaded712919c7ec1225b1d1c2dcf469e6772f55a1ef1e859010d18b40219d88b33d4702e40ce374261a1fded3d0a0d0cd9587413cf42f12c231d1e4ff5eaa3c134d06691ed07de851f8defbc01e29d0938352f5e244fb8b389b6f2c10494a25a52924be58a2882c4a54e0854a0334e0c0e48a2f9e3c91c1bf9bdf8ebc7978244fec8828b60d0f77f8e0e1e111b30f1d7a7aa23dcb9e3225b14c810410141c60314209d5fc924c491d70b14a62072d56662d5091b660420921ca606141453597206309d0163aac7e604435bffebda00ed78239ef3522c3923982673e9b4d9c03eec13dbf6d1b49e650fc6e1a51e137409826731c3f0ab57150e6295d174dd1d0ad7b14b8f74021a010285748fe4daa28e8628416f10ccffce65af17089ce8fbf9b14c457f02c3f7e29dea0ebe2233341d05512d1433acf6f5ee8ec5cb684fe0bfdf75c6811b585f8a3424f33ff07cd045108819fb5b6561e26940bb4f81ffae83c10ec329e93e68df6b8a46c4f6c0ca16b6a027093318e49b72de38dab95e36ae57a5c526a6ae408c67167671c7fe5795e08b5710664ea817c3f93572cfdd6bd9bb77d14e9de7b0fecc0d72147f976d480df76e3b82de79c77b830b64933b7238010420fdaa2076d33d4799f94d7274d3a9073e137f029a2b8d7e26da3dbf6dcf6f4f3ba8d524a73deb82de76d0b6171eda044d39cb52e95fe293de2a3c37f7e3a1d728f9868717e2efb3c57fe14e8c989d84ef2ec61ae6032a1cd15abb5e2b1d6ea68815e3dcd8fa7a120d8fdd318c19224ae95aa03834011a99199aafb0d8c36930e14f2f4e42b6a64a6fadefb509b0b10a5a3d6fa1171ed40bf445fd2cf2394a1631a091f6fe579dea42981b65bf4be19cc1c72de9041e6f830a7915982816ec1f609c45ce91bb6ebb0fd4751e898afec1654c48062a5cad967685d3d1efecb16bd9a37feebadf55a6b75ac9ba14e5a27a594667d8dbcac5c823063b1582c16f3c9f93f0c51a8d116bfc6621e933127aa699fde7b572699f229d29538d9d8cc17fa825336a578e8311c9c982bf682b97c4e1031b1a50344b3fcb2eaa4c0af20b67fe7b3b2d582a33a0a4797c743bf366cffd14c195ab4612cb4313bb3341bb3b219830ec310bf5c70001800a106d50b9309263590b5e98396555849b6e8c92aac21db96558e046d59e5486dcba7ed6fcb2a47aafc9616880168cb2a318c3270065a561902dbe2c3a06595213ebb0a11d6965588acb46c5965050320ee5a04e48563fcc993bffc648d08bbae8c903953c4b4e69c739a6297e6def9f2940c6394948a1878642dcbeb4ab8c5f9c2c137e27ca242165bf40a9044f682d13d9f07dd33a439cb50d6644dd6646d2a8142fb4b050f81bc60356a555630d8aee56e1867bce1edf6b8b4888771dcd919474a69ceab5a79bc2ca14539fa0d0678644eaa8479f2fff112c612e8bcc55a018bef74f79d1b5e41c438d1b685b344d3afb44afbf22bc220e5c00ee1d9eb2c8cc26074aa808a625ffe0270629fd80ca93e2e3117247cf5cea3e716b5afb6fc982bd9aece59572b97d8125b24d1b242460d7ab22c91c2d481426fd2a6053ad393e76da394629dbcc4eaa083cc99ff03319e98610558585554d2891eac50a20452c08acc308974368ba4b5a0c9055ab43dbeabb5b5d6190d80bca03e967a54baf73a0e8344c73e11e8b1ce03fdc74f6ead9452d6ea811ef3f07e3c421ba55ecc43ffe942daf807200b2dce18bed34a173247ee9c3aff5d34b8866c8ea5e6af55885d41912b556babadd552ebe204c7076b2da594d65a5d3838d24847730e496fdeb8b921053e2a6b6dce261c334701e40d7f12a48d7ba82b5a943f285de512d66aad35a554ca8f0e12199abe0ab200c202592fea07a05429a5292b853cf9db2a6a15b43423a2a5ddcf826586b62863b1274cbe33761aa2db4681b6e4bcb9b5ba46cc4e4d4df4533a46107ab8a8aee427313b8cd7e78e4a28d582f22cde0836db081c37e347cfa77969fae208dbb970d5fc66cc32d2dac41863172782137d5db435572ed77585d7e63c8e738bdffc589339d46ef1b045533b1e4d7d9f5de21d293862960848b4dd027e22dc405fcc40b7464f435c9adf88d46fc43bbbb37be5baae92ebc2e2ce78467a1a434b95dde2e11d6750d1a2ddb2459041cfa735a092fed287359eed348875472bf474595ad342591e7aee759d54d117a1061d02290bdce23713b4218186e18e3f6891b6a8de27fcf3c5f2d045a0e175658bb4f6b252fce4ff43afb4a8c83223c88bdc3175ab00ba63132dca51033b37d78e5f70de08dbb6b9ee78c718d74c136b4ba539a70f70e0c08103070e1c38240d0e4fe2ef38644e48e6e030e3c19bd8f0a079c86db3022d4a19c6987e0e981fb3d2d424b3a7c9cb64e8ef04fb230f75573f9a0774e04461d4bff79449996c0a216b72678d3583b3a44d4d269b4a34b15d0a59ce39739bb4f16a10f323701472e93a4a7a21913e7b5e1763a2f15e867bd2c3a0eae676d92f2d65eabee4c95fe79c7fc4bc0c1844e6639e33fd188dbe9321c998687e945ee64b2005a2d95ee64b3ff3a49f0169509d0ea8648e97f5b45433120040100003150000180c088542c17050402698ce7b7714800b62723e74663c950764a1248a711805310c8348c600430030c410a39431aa0e20ebd607bd3235d551718c8aa92791d51b3be54e6dcab6564a94dce821a7fd53f80f076c7b64e10cf5019dd0de5573a176599c504a9dfeb5e62ca62e5f482ce307270933d5a21da101be627c56a7097015b953d3b49e8b140a4b2f20fce815ac2a70b1768bdcc4fc3e2853787c02fc7d0c86095c0e08877db08fe49f514f3aaec8fe9527b0b7fd8039db8c7adc4f075130ba2498ebc974c84c419a375a9fb8dfd9cf810c8dd635acfcba116e4e5737d3dd91b5e0ee93d7f1287e8d0199fee1f4bc3c0dc859b7ea4f7b40a118874aca4affb8b1082405d538f8f8e3118c9c4dc4a8a68564bb1445f0e877fd462829de885fb331b978d4011e56004a6fb6ff83f62814f70f77c5c04b50c5b54b7b2c5022962ab0aab4b2e6436bf7a2c0c250216fe5fa7f6bfb7bec15a934d021c11fe504aff1ca980e2c48208c5f8f88682879ecd26c3c9e28812444950071b1a334f32b9d4af095ed5c48f10131906dfeee4c30263a8ef9c803021367974c2ab3a7c89ac385d0a15182e7f1845ae7b05616251f6c4c1a2c32f2b032bacfaebb303a880e585badb46e0a5e8588211c46e4960a9569266f637fce04de89f95b574408d220c455718753177579f7e7531dd11a32a9f21879d99fb3e883f0c878108375246f11b79282210defef477cd7f68faf62b44f35623175db00766b193962464925bed1b3b671e386fddbf61eb64fcd921c57dfefb3ec213539f080fd8bcf2478841cb2b608035a07c6093b04e3d348330c6a2f6062f70c368621fbf78fc5257b00dc5463dfca2ac217f7708614cc68f671f6fa42cb4fe73057baa550cea9fd025ac4445c2430f623a487584376a99a181bb3b0c0225700a982f82eb30942e048f5c21a33511819add08b0fc284c89de26c4c813a293250888b8cb62f72f79049a85dbbc1136d83a7b26f10ed02d20045702de0228540c7af483db3a66b96b70462d93e94b59d6515444258d55a91b5b68145febf38d648e5388b16bef71fd0087d9f48091ef50cbef7c46cd3b3a275df9d29e52706b03bbf86ef3e88f734918bf5f6e4566bf81ec28fe4e8337f2ccc23b0a6d89052f4fff70f67aaa70d961f3f2e80f4b750160dabff91b840e6fcb0df681f77b37c1c32f8ceaadedde4481f85d3ccf80d54d137ad73935c232d5bef58b9d394d2bc874ec81925b0fdc000b2e1ada860988523eedddc00212c38281f60621662cc65aadaa735ce838b98e5181f5c391b54e3dbc2e562d24b498d428237469aba32eb847636938424a4404bb5b792f6eadfad80caa812710ade98b86019c7383966d8d3e47e2673d28c660aa09176c1acf454e2f38752b98907e3570709f4bb08058eeb56bfcc811f182e8dac7cda147e41330df2971509024ccbcf7f720505757436bca927bf17c5c4c4e89a34b0b052101fc96289fc1919ba1364f29aad3ff318caca9b79bd3137a602136b91d974f5546f728bd28ffbef288ea384ee50368d9e978a32eb651cb45f6504e21454ba75c548c65af592d8e19b1c44535000d52ba2929c344c70701c26410b44c84cb683f9c245cf8a2c58a110e83d2c8f4084d52216f58420b76b915851feab3772352e3aee768a20d199c1ecba30527810f1dc9a6fba7484646b4d553872bc34c39da78550f7d02a4f29b14ec12e52c1c5d147664bd990698cde7300b939ab862c663dee5d280d5b55f7b87912a992e3aa2548394a97a76104af37ab5f79348375d55c6773e3ae4b137b4ab6df723af12231b6f4c12635c4e7116e630be909de6fe7291d1db0c9583ea06275f5909af14200ea3c3d0e50b8b6646967355aeb2c01a491216bb99622d52c6ae1fdfc606043c0aeee245130df87ba135f8a82f3101e77cda6801c39d77325cdd9034ba5d01a5688461700d61631b2047c913539a92b7bcc243997d52c04baa49b70e84f2d85d9bda04879c441e995fef27eada4cfd8ab6dbb18fbb94869e55e621fe0b50134de830b11519c864d028492b785d75c0727373be8a8cc3722cbf4fe11f8a25b69dfdd82c42d9f80a2359ba2725aad1ce8e67805f8e5139efedcd78c3cd3150dcf1f0d9dc020b3a27367002f87569fff25521a7afff2594765716420856e1e4807fc9be1fdb6cb3ba666d1fc6c4240de60dbffe4cf342c6a2e289e0002c45d6abce4e44d01c0e2f621025ba97ec0505e4c9c876056f66254517d32d15f73955d69492ee1b19b893905add9dcc1bdfa72f114d3fe1931f812ef302199099f04dc4ae97b0298f8bb29b94ef8588e29f7dbc424305d1d9ba51e4bd1d3facd03a05d71d02576a463d86f71843bc517e8e4b820ec393ee44c51f5b17f4aa9116ac356180665945f84108fbf7aceeeff3c8ed342041c0995d06418015b83328c8d8b051edaed4d14d9750c02e44bc833ad6f2f307e7545fde814218c97ece6d6d2c6fcbd5a6d29f09db828cbd138128f655db813a3572de2663c6bfaccdcbb506a81899815e8563d2282a4468ec7f7a57d669b527f84bdd08902c60f390c31e671be7202ff5c808bba44f562e011d77bb83799e0c249501ecc54ee11e2897a96351ee994f54da41c51595d081d3f08ec53b962578d3fa355e722a0f233d1f383f9d6f227bc3d29623615fcc95c4d29f0e9aed8fc14dc7e00cc88fe4f63fec7e5d438ef18c77225dc1176f068bc9611a4cc703a1252e79a0b961f80cac8d000a99734c48ade9f4f82ac7b53047ee78da5f4f1a1828b7175dd7f27d7a71866143393c2f594b20ef443d7527378057de297279589a96e7b342e46c74de6a926092a1098cc022321e9f64a902800d66a1d50e19b333ab0df76f80acc828c3ca2a0f641449f959548c08c6aa81d6f4ff4fd28707a3cb8deeeccdb837b957dc9b4a6b73c7eb012ec1073d6220a5c9e829605d79f1e4046d8e58b08cbf2995198657a409202616a824c9d9c7dd900758bbd11e000e615ec3935d26b363b4eb814de83769c9acf8e5759eb75639532055315c73fdd47ccd241a5ccf3a712d350717b52b2a76869621e6f9532955c1e0a3b8ea44cd5a3ccc49b0ed7ce4e36381d92d113653664a86eab7ce2c19d97312dc5e88402f1a64699fde244d076b15512724e9d6e212b903225ba2ab1e06a2b9af1c9f623f4d86fe619ee03c893e3448311f6a601df9ebf3c90de6c663bdeda79e1093df0748162417d416645e20e4782844555e1e222af083478eca10809699b4c62e3226ff1ed8e642efd05af8df5884c34e63471898e2a04de251d2933e74734b9c47a66da294f3c92cb8b38d40367619a891ae8c0c07f1537815af3c0294238f0719f2d1f9eaf40d9e91f1b7122f645b0163826bfe31defc41d55412a3ed99753678560af0903cdf7c573c98caeb8d03d2425bb36b67295a6f359003bc635df091277d086fb123e4cc5da0037af61a95039c8ebc8ab653b3f3f5cb19b02984dc3549590971ffb09cf85a6e6e61144b550375cf74058325fe7492bc161b50932176f9f1aeab5c3c3763ccc2249e86ed3509e1c23ff5d1f1318ddd8e1f951a7acac710e9ae4bc2542833f376560c299a23d686bdc5d46809b1e3d161faeb1dd8170d1497cc4cd790ab63f1c77aa8af94dbc178133760726a7ec12d80ed42aecf0dcba234c878636ada9d910ad00992e98c7de892ef1d9a1a61afedcd4fe1a5ac6813fb86860040e41b809a4a6ac27a1b2375e1b1902a12a9f90396b26ad1c0602f1efb10ca28ef200d5a6cc6a5f1c46abd07a46fa32194ecef2af3ccc4e9c34b6cbd4b6b7caddc52632a40626f9e1eeaa4b6f3566dc60c28d0a51e7ef14d7b842584750a1336835345849845aebb13502bce76e90d255f007375cdcfef003fa4bff59757f89f9381c2d97518dbd440773f53b58d1ae6f08873cac8638a0f35c177cb124dcfa94d28d344dbdbe2d0134bc6da537db839f2220a9110575d734d2c3d2d76f9ee3fd7d13cee580c3164e1ddad4213a8bf746caa350ef31918a7c20a4906076e7221570591d1c5b40ac12d0a34792e61fb6c97c17074317d3b2f67cee3cecb69fa71fe87aca961c96359b00a6e8933cba4c0c42315ac6c857973a3cc79f7720ed68c0b19afcf5012b56b0bac5cfe6d197da2bf26fdfe385412cee4f1439c58da44dda452a757ee88b45aea1347e483864610efc352cd36baa6864f98a857470be1c09d7c8a217ea76aa0d92b351ac0d6c1bb5b22d38177e728543f8d170807b6ad0ebc9a8212f30460179d2fdbea56ba86647a48cf38c18feb5806959c8234611ef6e16b14b03af73659f6ccd02e29818f672d722090cfb944ef65891ca00fe0b2f4adff2ae227471ac727d139895c3622bf89a805a79f2a1ad6c83158ba0ca680d500116c80b32944b658c2c24d1903330e85c2e68a81235a99e83c34f075ddcbdbf262d89ea76dc642442ae62f639006fd86260121efa9628da89a04c9cd77955b259cea8041f5a73097151e82492d425d89362a7ee4a7d520ef2da71283df44faa5bbcd54198f5398f23c33ad461a484734f2910d6fbc1de9e3bc2d496970265770f46232b303abe4950e921789a8108ce67f260643046fee6e7429a9177b8adebc064ecd5cd46c2c3cfb7ad0e24b87da4566980b0ee4e828ba85bc6f7bd0870394a05b12f64d01ebbe3fd8b1e4100d60fb91eab520f829da82506e03d9b25164c910288541581e76c43e017f80163e55f39a6c60a32fbf8053862b5860706c9d6bbb426b34d3fbb9ffa64fe79a5f80da6b84dc707f9d525277e297913170237d5d42de2805b2c65f3a21c4a92b3341811eff7eb0c9f7321a4d5b21e6706c55c7e0407f4f103bcc37a34dc326a2027d6f7b5605765e138365310b00be8781a566aa93e3def246300502b9eb93c5dd9ccd572344c8bc8052d1c00cfa8de02b56e45fce2a10f8f39f12e302fdc93881d6fc766fc342551f737c9ac546ab6dbe9958040854531e165c153b9154d2a7ea827fc0fc33215de9af328069f891173d07173749a30aab5f31e2533a98248f0e0a1b99f5af29edb3eb70bd44186e5f53ea2d78a51fe611dd64e91eb17117439b8360d33f7f5005b8df42ed13097e1aad34adcb02f66c22d199018758cfd447eed3414bbdf68eaa96c0cd5520085a49e525160f98abf81d0edee5299f3dc6ac0a6d492bd9761ff7ba86145179eb869c80004f582d4df9d29ba41bd4d9b7dd3c7dbb098d6c5527faa3ce14621627da5f140b196876b65f6e1c6391866ef62dcdca14f10975bcec823bfa5e9c9c247efd2a22fa5a31b04f569e318b6ce64f7c134eb63fff8eaa4c153e30857c5973e49b21e3c883592c8afaecebd62cb85f065053e16d64c3cf97271bef7a9157038f4c669d7c7d794245f49b8adf82c4da7b21bda4ceeed1189561cf19b3ca6b9a3c60cd84d6560610eec72036120f7adc1b84986bb16a6003a265f9f25813c3af63fe0cc7cb48f29c6168b7e26a0b172a4235593e893879a90a8c567b5676569b414be3d8da9ec1c108228ad50779d0e233704a9e1135a40e563b280906726126b216ec3e8bda48a2b622eb69cbd01db3b742be3b49c05ec6d775a94eb5952488b08539773d44c7985bbc41eeedcef77c9b842a5e6eaa6c8175c8569926cb75b4a03502e82bcdadc387fe8c43d6884f3ead40d218fcaf4fb7bbfc8f5b8db261f327b521d365b6166eb0e2e55d0cdad3681f32a942c2e1bfc0d22e46f19c23783a2bcee008855c94cfa13fe543ccdf21cc0fe10450b20fb3ff079c1214ead10746c73fc1e10b345dd051348e3a2ca5c1507181b7a0c2db5e97d813bd6b6c3a178a6b0a51a9bdcd24b1772366c1f10544bd0da28c15f50bd6d09ce0171b72022cb8bb5af78a3c7e9b1b074135e1bb4e5e2b67fd0f01eb7500d0b9eb4486219e3033d66741319fe0bd4484e54f845a8155c7e8f1c87bda8cfa958c8d39ba4a4de062c3a17f4375c07801b682de69d8286acbc91ac943dd1edefa53466e6050dcbf50a1622de008614707086078b6d7d7927c798892fba63cedf29f27a9801e578433e1da7705295baae73673330d3af02d8bd37f678305bdfecb53747bf545b165165b92b42c5669c3ee3b4301e795c73722aa8f95c2012ec285d32ea34ee1e934fe76bd9a0112b56c36cd8d0a7a08485fa4cc8f6c2dbb495472150b5d154be1882fb25cc32e8adeb96a5c8a39098dab6aa613eb89d839afc9ad739ad6e92e897d5607445362288c2a1af27ef21b87debea04aac61c862ea3a7dfd6867d0669bf4d42b04363bb6313db7548e99f693cd9061e9fa55edbc96115148c57d3331819e2368c0eae571a4c0f82de830f6f60172ee9ffdd8b0b344a1693c5e8da02d755b581e43897598755aba64c48b49eb1984bdca17eaf94ee430236f636ae764811dc3aed210a782b20b3b91f4366d9eb648256c342a205c1e9ffad9e2d1e64cf7dbbfb1e76cf385c2c3fc095919979fb89317ab23d60da4f2468e141a0a1bff7de8a0e1571dcb401ca63a7c7b267c795942b6e8b38c88e37fe10f33c94cc5ac055df7ca5aaaf82f68a80ddc0378c49d12c088847baa8827413a1a245d5ea8d712a4a5258c54a38384441cd230302e3805ad928a9664f4c5bf527426560f2009a6b21ec914daa411e33a86397987a199dd07952e5f283f57726984e0e30e524a38bf4a6b5787835016677a185b673efe12b6c658e6f045409392356b118835450c72bd8729cffd9ac257cbfc5a584f1b44a1565e43bd7df63483da1dd2f2e482834bc38fad800be39ff127048af019812ffb853e5cab853f680d18f5a2833f92df0b4b95217b97c659a2c030b1429acafc793bbb884376c17d22f23409f0f08cf609f0b7bb232aa0466233c16a14fa5aaa8765b8b73188f51bb6a519e87d0cc06822e760c0c21552a95c85e22d8f7ec0bec1f11b93cf2c1e61c6f1a2396761383d8188ef0e8f66a1ac3ab6fb0e4400652e2e56630bc4c0df68df2929c8502dae36492705075f3181611a071dc9b58b37cf1806f0bd0ce7892f7da028c0c8c274b6f969a63bd654e7daa59bd5a1c21dad54262a013941b311ef0823eee6f1fce7f2e2e24a2dda5d7058a7c5ebc6c735c0c6354806329774411617227f683267bbf96741853cf6d4e5112520b30becd88c74c5e1f9420191a7f5f1d99f28f07e58803f0ad2a816fc9c4e4c155bdb74dcc6a93de49d47e7273d83b994720ac55f11cdc1e211118f9645d259dfd9e0ede232492d233ce49710da6d392708e8105a1a53065658a92ab8a21e4468638b5861932054aa35130307e05579eb392b8907e1b9b7c8122598067e61fd96e04964672be3c3bea0dc3e25a8233f757b8b1af88562362fd103b47d77e47824a05469ecf7057b1a68e6ccbc16d1a9563cd419988e4b0a8b4a1e6fe61e82cf6120b13966159b1017e61e19d2f81be5bc9bddfd12fa10078e0412a676356c57252fa0bc4583c458aec0e199a1ccd452cc7d294dea9dcb0c8d50cad4aeea71b7e0757856df4206b2fd80a956e73cb5e45679fad8be5541b16298f9723f16718e8b27473395cf253add944e5401ee3c02af10abf3615399e8674672117b3559e20805e95535ae1ee1ca6b9b45894035352e4f92fd9637afd907b868c4e48fa9ea87c2357cfd1dce2256f348605b41409a4bb2a0c0c744d8e04b18b4fbbc9a973c11d7ebc9c3478b4101459cc5f88f728cd4f4468bb189f5b41a4935248a9b54d96ff7b88c2a63ce119f6e54b6ccfcfc52ea121b5565df062c30a44dab26be53e2bbb89c4cbf67e6341e013b5ac8c268d626a2895bb87af4a45db5d143daf45019e7bb9bab3915ec79af5d48261bc6b2f07154048e51da648108c464b2973c031dd1efa4b17126a11959f65348ae60ffa57aaf9885520cc53ec5cd45bd24a4fcd9559cc7124ebddbae4c4a47ca895569bab687f2ce08e963f76d0a2bb8a290e681a9941b5d95da0546d50a220ac5c58330497fba3e055c92ac5e9ea47ba6fe2588620184a60c64586565f2656df23990cb2aa6905e416d6f03264f53630606c96f843d1be4bc16c70caa95e01f17bd609bd7c1c7134072ae9c9bb98c2f480afdf8704d4287a5578eb83fc54a75e4c9bd02072127df62f7a4abda593dab59a68201c9c62e7ca55c71583c6eac5f387a6798ef9ef4ffe20ed0fdbe9db2969e1238aa73c6572e5a041286db9b76a0840c06e0c9daecf7121ec0a7133564fc03978751ae4395fb536ad7a48a8dcad775c8931b7b514fe6d37b5877b04a2ad9b3bda5c65194b4f550abd733c0f03e7dacb3957702c3f135470ee7bf55398747d31f55ae875b8bcf00c885b23d92f090cc17d7bd65afe77e8a41a6832a824e41233cab1d1119165a00fc5494556d5ed03b80fe9ad0ffbef2ea0b830a430f9f8664c60c995401ae684e18f9851c7444566bc5b88e5b34dd4e581aff5cf93f4a11bcc9fa43ba0a4bbd111bb9624a582373b23cefb1a0507b779a4088afc2a630fbb9361161303c74a75af79b541ac8ec0ea6b88ff14aede1277ec8fdb44b26380b209b42e200da83d7da344ddda3f7388561df297138a0f6714c6f5e13d858f6313bfa7f9ce9ab111eefb31e6a776668f45eca2dfcaaec43df9aa9f003036a6fbf8aa54fa5d6b52d13d75d01d9bb8ea144c29cbacb304392177ec9231a0fddd5c66ea173decd092c6525a486f5ba6a219b7bf79f497d3deaca34c3d20d6c83e050dd829c01a66469f469822efd349d7fcbc4f920bb1683083dd8519d02da3135bd56134f49f07b9ea5f0bd04dbd065955fe9bbb329b971a4008089c523ee7bc5e7c7bbba9ee3c159d90156655ed1f69c8fe3f06430dfab5bac2216e2a9b091be77e89ffad8b7e1274c2eafeb8d78a4e05c75806a5df8918912af742ac66856092a41d398234506afedbfd92cbbd282ee1acc85ae53226c68a8498c894c479e4ec9d010b80124257636cf34caf56a16b5af5bceb3b7c6e189637c24f709847cb5dde39eb26287e590d0cb4a19f6ed4490502654a6179d1f24bf6f30d1c7b1a67d149cddaede626d1876a93b2d43988944615626eb4934181844bde9ea671970fd9f16df6d9d2ec7c4b0ec1e27c6acb830824f2b43bb8aaa416ce43142dce440eae2fe176a2aaf5e49ad2fd948a686471879614ddf4eef62e841d3bd030517d9db15532f0c4bd7257f88a81c18da23c17781d528a8cbbe1a40472195235fe950c8a1a3b65aa1b1ec8229565bacf9504b3ef32c69cfec62bed0712b9085919754c8d65535552a1a002c5eb8f180efcbb5051d855312e40f2eed3cdd68176629bd39aeb823b034f07d08004e8c482316f0be7dea02c5134dfc6779831026a0d324820a360c6b89bb4fd9bc8e2c70d4fe4bc9176a2e9f70508b91a6cbfd018697608c403334e3b8a05bd3cb0bdca30de368c07e79d9501804d9f996e3ecf9c78291980ab3808553c798da3ad71e0697eb0c9d6cbeaf3aa33f7c539ed989fd4a8e02e7229141849ee3015cfaf765961b16ca7ac7d73735dbd171bea3f94a601e375f5c1fd681436a2e76b065eba1fb22d655e484dd145d73337ca35f0fc2540bae22bad92d0dce064b1f9b268c72883819254d16c6ee533af5561d7b133e878d05a6d4ff9427d8d2033a65ab1472da760cb5e2fbf761a56470ca9e491aa955716cc59376947e1d3e177a3b422d1081c66fbfe0a09a2600e33f4d43af7b1e9fdf2174e2a681b374d2b94fbc7731999f06ca9a055bbabf71f5085279ae7e273dd343e3c2fc3979b19f9dbdd6ba5d5b1dc002b97007a7f63255a44afc920787053643bed61c86fc21c3d7ea9a215c23e9407001766204723f17a614137e6ac4c49efac158a9b6937a8b3b8349c96814c7cd3a423faa141127a4959493d9c4ac0afdbf36728d25546256f9ad12a9c86cf57f4cfb5419a699a84677e2d289102eb0eacc75272b47cbf61ff02f7aae149ac02eee6e486b90b2c913f7df049744f36ee9633495168325b0e38d2b14b69205d98dd70016bce1436cc1aacd2fd3a245c508718246d4df4d63223fed6b5c204554442d84282d50e7d3cf5d75bb55a09c73c03581c95b3e036faf30d1116a8693fcda75c77db6f49102e09acf88eb764da48fa67ecf4b3fa2c0aa5bb42da05375f7c3724eb718c330c8373743ccea1a5e27490d90f8b0c98203984e9055cb449c7398d3a4fcd95049413b4812762517e0e7f7a248e9bb62be08a45d4839d98b6429e8e05ed80db08bf80f4cf178b3cd01ec5f385aef04b3cfd8f3a651aa97551a5c68b5f22646cda147cb05491924084490d65aa62a8d40f35356a510258223431035b84639098d08ab7a32d1a64f3d3f52092c72a6bef56f3d77ef9f974a6fe2bbcb9074f7eb85f48a400d2f5f4990c440ac84dbc9d2014ff760de64e7c537d1db240e99dd1e8850eafd7147a3d0228379b92154b4626faa607c7aa83b57d89f2bf39a1b5379a49525b3e3f88f2afe5dd5e52e2fa340302ed00329d58d807262587da641b9d586dae10f1dadb6da2f45c5b29b2377c0f74f3482b1de578deace421fafdc45aea21b0fde70aaa371cb9206406d78316699c549048848a47136d36ef17bd47ba3cd2b7470b1c231d4183d61bb8f5a1fd203e38fa84a152265616809425a54b335495063a809e33284068535af81dc9ceb19afae83359442079cf5bbbcb74ac6680516451b0ed8f891a8dc1724fa5b7f950915592278385d4e5cb828f92920ba0097e7938034a2b3caee57c16e6d6bfcbc1a87209e03967e440fa185ee85fdde4a083354f164c427edd2274279f80e150f9b370401a960478c8381ff13bf157f10bc94f62815ca70c7c0ffd59e39ac7bb7ca572464396e186338ce88e8907f2792320585fd68afd45a8d8fea29aed3b9c81c1ffdecd6339ebdd2e159d4d727f3130fb68ec8bee94c70ecfe53813e60f591a9ae2ac2fee5aff1cb84824ce10778d903cc3de37725f36afcf9eccfba08701334310159ae0442ed416dfd51be8613bec3e8fcfe2912be7bffee29a0942418612d7f50675c2d24f30a14ae9c0eacd62a3911994ef8dd32cbfedd04de9e26b2b733025a4dd937fa2989ac36878bf5b4a72c150998393392390b1502e1a29a8ec8f5ff0c6366805bad9e3c0d97c80064eb2d5b955dee05a956605e0173d094fc591515398c146d42ad0f29f2647ba7873247cb4ba50316339c02a4a30325962e447ad2a512cd0473a367a79de61f4ec0a152c4b50b429a6f4f2aed888b04010330bf2511011fa451a25bd6c731cd2841d801175a5e8de3caa24f50cc43ddc862f83d33fcce8d4008ee055d2c3357562e4e1cf6ab38506d7232c66a293a1f4025f8e9a615856548824c69436bba9d79c14859f96f7d2c2d26b7aeef8efb4db4c55f2fd89ea498fe0aa9c10a61a1282ba54c10ccb46c144a714aeecd69e1f9ebec041e4e18fccce4bf02b4089fc67864fc18ee108231cb855aa524683d04e7c73b069427cf258fe7acd5196c32d2a6f66dd55151c3bd80b0549c0fdd462710b7abc45d141cc910782c10c855f590136ecacf1530fd635a70ae6943376f461a4fc2c786346d8a96f7a4ed1fc49515fb8ad65be388bc81f75d1bc07dfaec0c041d0def06bbce1a22d1f1df40b6680f0dc9c0e064c69b78b8ea2445362b4caabfa4ab12bbca983b8d83ecae9f5b76d5df3b21685b75df3efad88fd29d094daf9e63d237819353e0b2054e86bc1be658df7ab5099f2bbd607e7071e9c328f09ba43c8ff942b352ec013fb82961a465fc43025629e6f0154ea8025a8f9281b5e561dfa9b9873e517cb1153ac49e820eeed498036f71f35380e80162230085e427aecce36614951d6d8d56267acad80d6965d9f82c9932137e88d5cf7f6f67b0e197246172f91f4909a43f136e28fd49d942961ca30009c1a20e8abd753bdad12908454c4bde0efef65b12dc4e368b856e742c4b2979ea021f12d1d2e4cfe44d8822352f9367113ffe25fd6601e8b06b4985bae07bb69ce2c1b49eba02106f26408f1cc4a4164df582fd48a555d5245cf2a7fe5724577b6806bed037dfd6ed2750f06aed9d784e5a62c5390862f8847dd4eaf728f1bddaaf549dc8309b392c4eef8331d0e814642e73d22fc35c117cef534077d2b9477447f11e6ea6f8960f47196d07246f5e478623e3945d48e7853f688570fb016d4bb954094dd0982720c455b174a66303d41afce39ca28d5aba0e3e96d256e9f28baed12d9d16a47cdd9eb8787eeb95cd4c22d7b4fe9a6d3331d645304fc8038034b53585d2216617366d8275fd9aa7279012f45beb92812624430779cda7b7a0f333fa915045c2acf254de1f4906b17932716956ee6c032e47b61125edac4aff728789f439e58c08a2639645382799615d3ce2a66e5cd2a0d157e60d7d5260b6d992a69b3ff3d416f3fcc1a07199013431e092374dac69eaffea68c714137c1f802ae1dfcd2dd8a461b25b4fd409c2c49bad85f15792e5a012822dfe3e97ac41717f19ec810ea44d13195ed3fa393a9598483108a3a9fd1d59d16829ce669aac768ecfbb3e2097a4bb6fc869c5f02045d2b84f746a44cbd6a9180692e5575d0608ae6155e8736fad000a0dedaae147b8322d4ffe60e9e3f101daa7eb53b27fb03c0bd6571e53d06456797821e7e9cf3ee0f74e11d7ea0403fbc5c2a81a24f274f20be08143f356079a5234ec5f3e574785a1f0a1b20bd498e3546dfa2a30fc114cab7f92d1b68182c06f4cb05b7135e1e4d22e65d02c0b7f4413947f9330d5ae711edc7103213599e3fd86b8d9564fe63de4d0e5aa33b83a58806ce247c45ebdc43482435221f4b19e6eb94ef6a75e01a0ead12368b609a79c5da8c5bcd36988c5d461b8c93532888ba705e257d80c72aa8a7346c5a4a3a70eeae2f5144183d35dd6cf1b98560da315c26da50b40b1733aa005df964563af47af1a339fba68b08c2a79c6b3fe72e24ae3701111216b9109bd69602092b26509eb4e11671ee128b2c8d7a110f452303f6f8bed62ed2fbaeeb4702765ad25303f8223ace36fda70f87ec45719ee6fb14ebf6bf9546e4302a044500b24322999f2a1ef94141b1baa50aae07a02d66a4f3eb3bb5d63d771c205ffb6516e46e7380db0eb4ae4936101d538add84d5e71cf47dd097a9b7389cff9fa7302dc8b9637c8948a0c27e02f9dc08e8c3279c2dd5c6772af2e564c3c6359aea30cc4b4f870920d9e8cd0ec82544fef86eef5eda043aa1454c1d95bf5523af4c83c3540a44cde031cba846a7f039a7a568e546dd4a3b765a5eeacbfc2c8825ab437033c0c7224114db24a101180806442094a0a972aaba04b01f5220d154f5e0072222f2f0475fe228b2d6122c516443af8634ba505c9b87882efc79ca4644d7180fa08b78f6d2ea5d1dffd507f3074cefbe7c2b9f1209d436db68ed711a1c228ec4c47865adb8e91d12c85569518bc95db2a93fa548d49ea8aeada5be1ef5db2bf26ee41a9ce020a506c14d4ac54270217389c8150924efa1a621b278712074897e2fbfd427f9e24f9740640dc4591e490117fe0812a38c9c212ab3295d17cb0a22d2b1940c3915049225090e62beb7f0653a6b4c254bc1bdbdbc9e3bcc2c67395f444c72f1134ff75e7820ec5de3383a84822067a9b17428ae30dc2964854b2208e842c68f0bb5f35b88c2420bcd72f5b126fed5e54fb31445c6b4ea2854ca49864fb887cb932ca296a7b828be4a4918093709272e44166027eee670dfa2e24b9dd197f5da311b7ae1e0e44fb0548a19fa98504f53a3040a7526bc2211cc6c99ca4f176105d5e938efac5a561bda53e6132e2fea8bf854d858c54c43c1bfb3c89b3233e123b33a80982f3b1a5d028f868b122675d2ad163c180afdf34a5ace7c870c8c3071aee4271914792fc1798a6b53d4242da40e82e22170a326abe8ea05a4d55085466d052d2f35d0ffc8dc1af14a998ecb8a015dda554c9cfad2a4c821d2a6b888821a7011e9491e56af4e7e7167b1a2df1e016f46439386aae0cc36192b3dbf2ca953c07c99e89b7546f77ffd128f0247775f28f69667a86438e85e438780bfb08512a08c417165641fd2a06602b850518325d00425e5c6216ee448e0c9786d258424a9979ef6119046aa2ff3d2deffe899f616b1112485a5784f595932c4dd4989a327d55f712b2f98dc4ea2da8e3298946baa8356873a22d57e282003fbbfa556a4d96e4c2c46814e1a58833aed0939acffdc9017bf8434e3b1d01055de9845be3c13417fa9e4619c4c96e6b8d1a262756c1a54dd9a43d5e7a46a2064e144e192354939bf50607deae599356c6af7154b619ce06e525c57b7a9f2d21f9d018e300b5b5fba2eb31bfbb04a32114a83a27fe58219ddabd79046903006166090124dc13c7ec4e1e2a69e70f81002b1e03462bbd73f79d231199ebdf3d9dedf3c236494043fa87023c6506f6e42f5a714f7768c5baf6ef2937513871554ea05f19106bc34b0bf4b03c21f3737fa36dc88c1a66df506252fcd4dd61e4d4f182e5e76bd20fa3bfb2ef8e75c206905a8ad874f4b6e4bf40e9fbb41b785572e308193404e20b764f72699032fd9d06930d4fc49d2b6510bbefee9cf056ef290c835bde607910d8c216e11386f67d26314487c22660487355233c6c42e0213c5c45ce6e8679be87a7ea4e6ee0cc343b1603de47ee0b7c24a11e63129bf82d5fc8c30afbc41341002b687cbf854e45135698723626f6a6d8b6c36159e07a90051fca4d8aa3bf7fc4fd79df284c23cc478893b57a89e74aec937b00bad88d9b10525db93edd330152392e1e1fdb1aa83841b9c212b3754e87b38e8b4b8bbdd93200f854011f4e8ce8a2e2acc44009ad4172df784ea0c6cc298f24ad52df0230ee46cf984581cc8b1b365e90709f193b2e5797b0ee67676f3e09c8cc4ce163c5e4a8b0984215236b490d0440e0c140cc72fb652555f7a360ec882f8f0b7687daae36b1fb2f6fc4911e1bee4af5fb291660b640af442342053a1148bc7eba71bd6f0709b7f6db17392f5a0fe6df1f15470b21f761f13394b6484f9ce0fa2b948cd7da4e3b0605a8ab60b388bee517f2899d513d596dfad290a7c20d49cd43149ab14c70ab7fae7b8096d2934919b9a23a073ecb61a074e51332edc3cdb6371c3a0effa9463380ba486e113ccfe40a52fee338b123ce4f4a906bfd041704ff987306da8021479e2ececa9e2a132182f5b269d1cd4103ef1c40375583d2967a5918cf7036fa61cc04035da83327210d6bfdce687e3c020e8842c81287ba0666943404f73955f09fba46032fece186a2b8bea3e09ad5e3bb37ae59f940dd66bf4de5ef7f48aa98b8ec48ea62407ad87be29d45df0af873888fac2821bb47a2cd6d58bf4909a3a3974959af21fe1691a0ec011db276a979e7a0d224358788e559d5be6496596ad2df7efff83ff00b13c973e1b10e150cce6c1075fce00687a66b2923a012e8a550a7bc155b6820466a415dbff6fa964134406045b170ba4651bab35635c1db4777c05ca49b67224446a7046a43190c2347e3d7122544b68299e1caf638d509749d1686614ae6c80b37f8032aef12f6ee584fb8c25bdb3d6da6fec0e86b38c0b4450e57f6e6f9fe7baadd658ea168b78b3c14ad897bd9a2d561a02125f4a6f8b99d9352f4fd39ef6a8ba4e79695cb557e74f9de05c2a02a40489e18c0770ab38e56539be8a3f58cd0eb3e75bf71547661ab7c31d8ab4890d0efa0db58552a183ad3393f375f294134f735cd6f02d4a294a9f9eb8a4dd9ae2e368d689a69aadea891a1061f19370d0e4e34f4c59587e5db33767b46708f9e6359b4f4375f4bfa6830b49754c4833630d98a5d93d2b76f515176584bce76ad3a02bdbfff06e1813d881d7bab54c9ff04783841d480527fca1bb9336e407f4e6c7629406226dc426ada32f2071a6de80e7aa7fd45f926d24512dd930c1f83297324cacbcba139738cc9fb7ad030eabbf1c658298e3bfe3b83c3e1e30a94c3086fb4ecc83f954f0690102670e268489f7b8bb1acf0c04cda7ba025d0bbbcff294f72fbe9ea72b4ec6cc8ca3eed92a9f1eb438de1462758e046d60e79abb3038eac89b919bd20aa3c600d430f03335f8add1fb9ec0fa6a348fde3197c7464a17e8956eb3c647085af686c950d91e3852cda94c30d532a0a1d607e8e2df5e393bfec5203f457d0ed3faf7ac80b150ade4b0d9a071dbbe6e5b4008902112f0ad4f5660562f7cf259af996a984812825f89017d44373ee7e2bc92a614e102b170f5bbf23344b28f7fb1c4b53de845466d74852dca9ca0eb434935682c788916c8d84cf5197fa148b50fecc360089ec9c5b3d799eb0fdf459ad723b4b09b26102986797850fd6e5c5ff134f86a8da02be7024841c1d3e90ad3f9cf57db77375e2660e4888c554bcc287359202b7c092cbd0b7756d0aef29ab35ac0733106b3d9833bbe9d609a177a21e0e919acc2d954277a0b5d610868720a4787dc08808aa389da7818cf3337c629eab05059cf2798c557230bcdb1aee62d3d7787533e4bd30d2816adf984aa5a9ed9ec3676f5231c5ab31cce14a74fbf40fb28e1855cea16096d489c2276bab8af3e41e6589f354d88b1fff617fb4abd2e890516662a56d0e99539be48a3926d3e131ced9e8a5e69ab9b520a0a643e6c89e4bb5c7ea8157f2636637b996d7b128328c880d5964906d8076f1372c86faf3736e67884cc67dfa42ab0cd65ab343229744fe807b3d8ccae5d7b5fee044b4b2acbe613c17dfbf7edc7c2ae6200cb275d2d8786a91cbe3d27e1c9a3704a474bde95d8adcfd8bd22a59c21cc453fea6a7456af6c2cfc7f28574da7b99f81d9a0e259f4d65a147ecdf7e891c0fe282a2581bf4ca909c9740e6704f8921c9f19b4e236384eb7d5ea26e44d70738956c58c11c6042b9b108d25188978b12dcc816fd0d3ec3459e2d846721f226da00085c2508fcd0ebdd38c01a3befc08c261511c0179d47ef70fdf60cf169cde401ad3d6b30ac7d4feddd46aa54d0912683e417e29a9eeab31604264c9708aedfe53964609454e57080eaaf5646f8c0ce31c1815747ea2bf752d2ac1c7353f351d80d1d843dad213eded5a0114163c08ea0fe95826dd69811b02462dab1d37d9b134d8e61a8b4fcb679cb2a65f634459238c71f5b86b401f32ce4ab4f81a372328984cb48b677c380657d3d3a92515d8a2af0b3bb98bb57e8ad9af79fab0055cd98965767ce1d639bb624f89b4c9bc0b62517248df93ff9a782dc31a40aa133618693386aeb84461e5dc2d2361eebdf764ffbf9ce0dfd9bacb81cffc7fed089f96ef323d3a718ae876926052eb9e9cda42cef5451eae41d216a1f1d91bc6391a76928986f711cc3280b68afe1f4392bdd8a1a0db7b33ae3622346e6530739fb2499cb24daad5e4d871ef148df5215706f8709e489b1c1759e100dd2a0c275959e7509b024b0716d6fe5f33fb5d4ea687945f837feee7d7e688c2ab35c10bff7dd9d34ed1e14fad98694c8daf1456213c48ff9f16f5de12d0883478c783159f82128a839279f3c0809b98e12be76a54cb0c96c0d5189adccabd075c14c8d045d43a454fcaf60707703c8d4b7ebe5f84e8ac1029df4a2aa966bcf7112b2253d1316db8322450b352ba3f78e164bf16b94f9fdb598a0b01d5eff52d05d54df53c90bf6c720de73c50455a03d62d65326c62832dfb6e6a1434be9e32aca355b605245837d0a8e5f63781e7b3f75debd8cc5905a90d4f4b59f8a7439bc071b5d5aceaf9bc625797d76aec43fe67fabc95a5e7080d5d58d998317f68ff5800c14b766d3376c2a22520ee727a8ad8143dba789399fc494d1dcaca6f1af047092231ee5095dc6b1d528677cccf0fac6fddcd7e7b09505ca129608b01feb98125bdd7d31136283a76ada0bc6f06bb5f1b8ad1971610b41cc625d0f636138435f399a1f49d75378dfe0ca7b29101443476b872c48181fbc918c632470ef9531781a932a0a28770dd6f4140b3bbe6beef3f35558a6128976d16ad2bc474ec508e26d6976ecc59c1fbf3f45f456e2a1bb7701c8342397c34a9b9da4bfb740eb0bf318b9e57f6a9b5a5ecc059306adf4640de7fc94c237b77bd67a02d47904fe45ded690f99531154a68cb2f13b180e0d134f99ffd2d5a182c16938a4ba0f78f67c937ec722087b52ced58a37c0b803f42a9a9d0f8a922336166ab61096a2f73fdba32d369dd764f6ae798f76bfae663bb06a52ce0cb83c3137e87c1a5b3ea70ed5a4ef804daffe90283ee3622217b965cb0895cb6f8b0d38fedb8004f84a04140f59c3967aa563003f05f7a983f8c860b27a8781e5f19658ec125c6087937bf25e72ef32549a6843828b94f68c7068a084ab2fa8ddcf7792ed25a97ae64f71a1b999f66a8b81b7e6c4e8579e1d9f7a72c066800977a6059a210c684d1e3a1e368e8e83ccf8dc434c70637758c46288c9bed244e09e62531a50b227d7f2637049dbd6b26296d5c88ed5ed86007723c25c11e4b206bf9bbb1978d1dd5807d9acbb698611f66478ff28312f03246e270ec40898a26ef9ddb828c9de127f374a50044880c1b6960eca6c2de6c416b339e329ec63f022c0b5d629e8ba71acf77e7b716cacb6d691c97407934555ed8bc21b4be8f5cb90c9678837a7fff06a458380f1069a877d9aaa800d287c879199c3507274ed694e34aaf803b1d65b22bf43166dc37fa7e021c56b66399f675cd4442eb04af3d551dab581cddb768cec944f0087f94c996b06c2a8d32815389dbf532ccd50a5206a3cce97eb86c8ce8ed2104c4654ab1db3b3b2b8c688e1129594b169d195f0279e38540fe92dd203d5e919268045ebd5301940cdf8a0bb3e3dd9fbc7d45628ef6dfa7b1fb370513ca588cd10f2483e66f33a2f3fa25eae63e8e97b70bce0db2efaa5ded6857841e7965b4fc221dd8ecd2d6b3fe0625ba0cb8ff45119fc8bc7997ebbae51be2fbd61de4d2deaacc4ed868e5d29943afe2cae6ead5aabb3211efcd5261e7336b6f50e5c8ee09f6a5fd312c108429c151da96ebb4d4bcc8f7125e8565709666372c85b26e59a085c87558357a1c80344faa06c4b081631416dc64e1f219ce7dc588fb653c1ae4bb20da2ace4826cd120990058903ae0bd6ca84de534ab96eb2cbab2498fc11bc1cda4d31968a325c9c56e444ba20e171be37d5374b300d17e4b09f9cda8aff3651e43451d9b69e44aaaba50d47f21c225437040fc76988c4b69c3cf051b44678aa5d3300ee2c8084a3b0c47a6fbfdac8ed808f7d7494c55c241d3fbf945e79cdec1c1313b1a69e4c088dafe9540dfcfda9184ec8eedbc892e3b89b2401e3d54008d6887239a9626f886c95f3f8436769e1329ecac033b24e1a1936f28c37f3e7dc538c19268b761e60df6439c6d7a6eebffc0572d992e46e1febb82126149c15416ca1a11904366109102f293e2e65e7f0579de10f9940f0d8a3014e2d5713ad12270d5ee6b9317c6373e561d27eae04deea4bf3654f82dd3725f6764acf42bb7e0ebc30eec7c9007377f970f22d113b14cd58ea92f452603cafaff8e4c69a319137d6fa331ff8b238f9065a10ea35da0ea4bf3037c8372dec0252964dd6029bdc339ceb5805f3d08dd529cd68e5641c203187188f73e14585b9864de54718c3d5a7a3d7bf11e9c7714e463a444bec9d3c37879acbf953fa74162201b4cf128dadbb23e35907cc30b77217af6f2cccf1c5bc61573328cc314a3583dae9d994c23d7e06345572cb86bbacc0e1896f662a108dc19f7eaae4605603df340e01db59418d91a52a9a882b4aa6ba84d50d15cc46363ddd1ec1968818289dd03314b517c65a56efcb906858c2c565176d5a266d09403fde40d7ba8dbc221f0dc8890ca247dd53705e8d6973f580ab4abcbe5407fa5f891a99d05a9fd4480653e9beab2ff5c581f1c76d26115dc7c52699bede9a84f0e6afb897175313ede3c4753a6bff6a21fcd44c7eba37ee9235a7722bad4ef86790fb53a4950386deb399d9bb3b1376a0d94fd40bc2df0c8f8abc446f78bcf2f85655cdd64fa7d4d195572a61db5fbad944c4ecc48b57014e167afd4dd9703d2d0c152d5714e818fbb97e69400d3bb1853515575cf6bb88ea954a903125f41e27b393cd531bb21e76e4cad82744935ee46990c328ea9173e816d5034e32414eca8231cc2cfea3ebdbb01562c982d52265cfdd764dde54884a42817a58ce683f0cacc1410c2523121ca28f20df29477b33aa00556af5d4ebaa4db8a98edf82aac26f7d45fe78f641c25c49c8eae831e22d5cdeee0e8c852351c92dac8453072863a9ae280b005a1020e9b9d547d1077d0d69683868ed8af520499f291f1c9174b7b6ecc69e9ef594b24825e499684b247fad9e1b7a3a7d221bc399da37825c95c41956f7784030ee13db9e1ae02c8b752151504de7906234c74bc184c913e700ba922bbf3d28d8ee234d2455ac1eaa270d14001368e558229916c0e0eea8e41f6adeb81c7af267d63736507f090521dd2565f68542aa86d0f3d84f045a178f83e4a52f11cbbdca8376a43e48ccca8f4a154decf1c425fcb9ce5bb1e16afe09c5871bfe3ce72099e86495143f8abe4e7b333cc191f13cb17675aac42eaa0a9f06b49f056f5f15c3d419b3d57f68b81b53132a9cf4475bcc145e3a403910f1e5d27ee3aa34567c2e86cd3a3fe60fd6a6cdf74bf7b58ac0ca6ea34b53a801fb11a400e3d4539ba7c7ae808e3dbce0a180fa644336e79d262690b404fc537f170eb2742d4291aa9d7cf8d549fa7da8cb0dc9b922570da1f7e3fc6763688810ebb203d675b9cd0cb570d5abc930c4f5299ce294732ef213820666e327349432d8084feeb9cf37541dfe09728b9d641a2de0def843ea87b5be8be64ebb99f75db72b1126f38d452f85898e0e4f79dfa58897891064ad2d4811401482998295c4da114bb95b1b08baa72cca35888e6950c16d8140d13da9c5da8d1158b1005dfd043b6513855371a13a2aeb02bc6ebe50e0ccc2797a3e51c5d227ab135c78753dcfcec24ebfd8a6a0b0f8ab104e3c1f107523b064a2e566704a741874738d5bb2dd292354e208ef20792f71bda3ec05bd6c64de40255aaa89e3644eb85bd2e1b30f035ed1042a3085d25ec2fad5f256e11167a31385b4a70ea1203cc4b5562b8eeafb4cb87dbb0d13574aad2eee5dc8965c29559b38ce53cae58949054502d2384084fdea675e56f73ec6209a993715603866062f5dec4903ceb38c5127633d9aee5d4e6caa0f1e8c7de72583316428fae38592618f2727199a36aaea3c2f3b0139316cb86c64af7ac226600ff63d71b8767f811d2bc86ea498a389a3a41422a0e75550e12c47dff341c3d23431a5c56a188cf3cbb9110411bf4442a04e0619f0cec11d6410b6d13e1b33163422b80e10a651e772688da8af68576f73a9e0ad3e14e537b1e1f0f5dfd84f8c03d9a75aa8932107fefee5a6f8e422a1790627b81b2fb3c03d3e9849c793359e408e09bdd0360fa3f55812f801b0d35fe839de120e0b76576818f5514b4aad745865369e49b3c8d2d212a211ada4ff96f98bc74475d4f408912d412c5906341e4a0111fd7bafa648b3f097ef7dda6d7151deaa0136cd335de7e49183cd283aa330eeb09cd01757ffd28781290c5f92d9132fa73bf42d7ae09ba32b30431a5d00afd85775b4228102c90d5d71d08509e370b37eb879bde7dee30d1863a1df493339c3f41f11a6d0a775afda29bdab2683b39a1c4c4b4fc3cbbbfac7aaf9ed601fd7c408a0d9f018b9e9e5c7b2b6f61e9b0bcf91d5aca4e0df3ac6f869a46a5537743b050c7eecf43c13d6342ebcf2fd69070ddbd0a94a5abb7ae9794850bd7b35ff822c3d9d15a146d66c27b5c996c36b4ab3363f67c43c9850813be3a3c4337fbb7e51c2259830eb14bf758c66bcf81ac2df8ae6dc86165845f6176f782e8c9aef91e1eecb01235f025442210318bbadc05a2b47b8146e012f7753fdcd9f20920f6e86a740c6d2b6bb960107b4301970db1756bee7c36dbc9f90f01d29a88ebcb33f520afd390a0503d2d3c3c92808ff9cef03d3fdeeae84a08a2b94f33564470b3a5e334635692b621ef170b3a1c105656e6fdb128ba70977c699b38e09cda2b7a348737bcb2fdcf733b083da653be2c34802650c647f909638a45654517d7b20ac2e8e914214d438f100828bd34017975721157d9ebffa545e18d474c5b52a33ec758c4d2661a46e99174064522cb242f65682ea9162c4c933cb8faab73ae869ccb2c92bf6882a1698a04245ba59a449fff117831bae4ea280fd39c458ac8f3452dc288ccaecd4a5c04fdf375c4ac0e828460838c7ce416e08741660bdb20773a481170b138e2e3eb1c8c02117cdedc5b96b64d80f77631ab1b5962e5f02cfcf9a4fd72066079a4a0cc6419bf115b1ca3a5a6f674da7ead0eba9a49e22d5ba537bd52090e47e529e2d66318b120d9ab158f3735839be1c58b5eda40a078b8545617fe254172cbbeedb117b5e757738e0e62f2a022e8fa3b97010ea1272782371b9f86fe4791736bb642b55e9d4ddb96fbd16c23a37532acf2af85c6302bec0d72ef8c2433067b6bbeb7bc83112fb4914c194f119780074e568f7048366fab700addb8b72d9364998cd7c735103a540ae543387a791653c81f598b287e302ebe204bf4aaf4dd6d76bd485ab822ac5e46abe2ea8006640284ae648e939fe8aac161fb360524fe827093644de162808d9fd14f72fd522f0ada81f694a798b4c57242de1e4df4c85036815bd78c0f58882faf4041837614faaf270f20971bcca4d652024b6a15586218803d18e15391d921113087e452eb079642214df6992922db3729dbdd5234255e9be0e11a99ea04f66dfb25159a12895ed1549c70d48cc8aa9ea4290ff7dd552049c67b81b0f28ac6df1a375cdfd411c6e834a146cf6279c80af7920cd22e5c3c1bfe55500294b2fe71f275c5732d37fe5b95b2faaccd1b4519b0785338886631bd45c28978175daf953cb8bc6008013f536f330c66524392afabb6438b6cbb1d2ee6bfc84e87a50882c483bec8d0546720f10bf8d0a030a2e9bd53a851b167582b1f2e3e5248f13975300dfa2873402dd56fece6e82746b78bafcc364145c871953510f36bf4a2f250ccf96da2f297dad300637a2687cb929a6bb00c6d7fdee7e9d93725babb9752c38ecc69de9d02722f131314ade9b7ca86b838e4feafcdb052440b61e5a524d636b37511a38b0213d783289835ecc4e1f86d6524e5c893ec0904cc7f59915b2e45670cb29c11f675fd0983f894ecfbee05df59943259f160f2036dc5d10ae4225b896181b110af612bc2463fc2b1c77d9763c56cda92fae19990ff8c6168a8f6d4cb03413a4a286c6518ea34c44e672385f845c3689843e229ee2141e4e62fc69cc084c55fba55a7434e0c01cc163aab7ed0ced3ee1b9882a75fa61faa6b8400b65bea8104300775344c08874b919405598aad29e7a63f8db532402a99e1cbf73f58009303fbcf6c4dc4094be7d8eaa2e45a7385343fcd37d4a16d09605cf4c733730ad1e17be26120149b8780ac058d9ffd452a91737d033029cd17237fd42985edabc89097857e9c1a22daf8b53a7c639c280912e0651f766cb0bfe424026b78fd9631431eb5b2bf142356e7f9af199d512c7372fccb793d7abf747eafb287d2b73c45f8fa5919d5be9f0e8f7437a9f5e7c24a443da67b49c180c3a1bfcd772e15c300281d33dddb252e0ca61ea6362fbdde01158dbcd41c7d2a1f07f0f7a4d1ac42bd83af7c30d16cef0679a847019934a7899a2c3e44081150dfa66cb7829772a51d22e1f0e2895f2b7811d4f6d97a83d60814f7467c09cf20cfe18a5c5ce83626b571c0d501a1145fc1f0c4d587755f424976423df5881f7a840112c1e17e70aca484b4cd3b8140af7b48bf9c088299340b0edf2c5dd2d2d2f891c636c12807b56c5a1868b3869b46684c1f61232549357c471496d09bd809549146fae886287f61039c973862bdaac4b0d3292c585e2a0a267acf757220ec4f069bcc95088a070a74812398b476f99ce514d42fb377391055e2f5f9562513a645e81ea234965cb1549bef3b1c006d815649e0759c8d17268ec20e4760a54c0281259f05a834308425a77726ed5e94bd877ad517121269a0ebddf51b4e4481600f6c4edce636b22dcc1ca201520b5192c26897269b2d35ca837856a93da56f40585fcbe5d147bdc1730ca10b7aea24b7aa42791eefdcd81f4b61c58281d21590ad9347a60836623b784cb13f82838142cee91e630b487912ea717fa84c9012467dc5ac7b9389f7ef467e9c9f5c4d18f60298c3b9a5017523989c3dbed73cb0b74402cd92e98cea67556f52cf4403dedb412a45acaa1159b33a52f38b646b2364112769110eabf2705056ab6d24d2d6eb41584ce73569c83971335b65554178ab4e5f2d2ce1e91901126314312debcec1bc826f7bff39caa18e65af03227217cf69ce01e5941e64db04212712d18fc7cbb8eec7c98905271042d1a50618b1b2cdc44cc581a40c6c2b77a0f6cfbef19a1fe81a75a2ee2a890123240acbe06f527505a3f7003602fd6d77014d8759b2eea6edaeb451772075e0bb7b3704915216a68423fc35b208ba8cade1e54f579bb33182ce357e6cae01dd2ad886794fc8d9ac6321361d62e320468ed70dbc502c3934b4ba06cf7ee8c1227e690ea69922cb32c2d71aec1a13f91c1b6c237307c84dbb3d98ee108c8565a225114ca87e5dd101d7d090991a0eba9fcdc107a9e4a9d89a01d8c8d2c43dab804d02e21f74abc90345a729bf98278b0d2e347eb712129af33907d9fdfa44cdf4063c9c58c96b12e99c37aba1b6fdb016e45062eb40739b8e1f12194e2f3317813481e6ab3bd8eb4d230ecdb22a9ab3a53bdcebeda612c05bebb53d6702879d93ded5cc6fba1b59a0c755cc830d969b8c9abb821ab6f4349e6911deb577670f8a8b063b589746092bddceebc79e94bccc548ad8b8cb4c76b08f1074b1c5ae1f97c9a06be85be71251460ef758cba438c0d01db0467e505e9adfaf7f9d7e18d7123fc96c001011689a8f2c0389c15f573134db0ecc36509e832afc99578148019b872c1568420c77c301846431abac7ca217e009356d79a31383476bd43c53b20e9f9a2cc0640782988470e64073699871401e65233d50c703d7469a7fb0c220cdcc2586ec6a6107b7d127fef1b8bf6a65e4cf225cca96330d712d13950964840bbb5687cf4a2bec9027e04c929bc8e01a19b8e53f4e0c43fc6a761193b42e780467bbc2fa9ca0365a696ec2db3bc41697c722b817075a2a073ca567b503c33d728d2e9a557549b31a2069f98e3027e332573e0a8d0a38aa6d0d0f1d6b3d5435ccdaba2f88cccc5866fcad3396fa85895270aeade9d7c8842d603e1660102ef1c6cfb9690d01b6604c96285ec2ddae5896b0cf10fb9426fc13c8842cbd7c73adb130df7b60294e4af7395b08539bca9b92995043b3905582af7e44d9858757950f1941c1bda5dce6eed838f6c65ee6a16280a95380fcbb726e3eb6141112247b7fec17e45d1b5bceeeb9e843222fede24a209b9aeeba2590beb884220538c06ee61a263ce277a024f2a27f68053f4980ff49ef93e76cc3aaa75ca35983a780a3f5346ac772b606f071d20a4aeb9456e9f1570058a0b430acd1b3796d71ebd6422da3221e15bdf508e2fc20069fcb120ae2511dd44161c5f917961106e76a2e4a48613d80c6c0c45862838388c7c95d224a88a863fc0bfecbe768c98bfa45fabc814ad80a79a92f6de4b51c99c6ca47710f24c05b10bc841b4eee2193a0df2fefcb54559b6cb9e0d44a6c5c7e9e3e9bb82935a1e2a09be458ad04c1fa83473fbbb66ed9a6c832de9cea211b6a0281b45d1ac0d89b67a02624ac83e17f1cc2baef319a36fbe6f82e3147c2ba4678fc503d2c25570ce43cc72d87851f436f33e212f199dafce14f473ffabecd10e549a587d8667cf472644dc421b540c0198268744b88abb06acea4e2815152f407557c79bfc3675584c3c15e70727d069d5191abba359af0438bdca519cee58f9cafeb83497fb2568ea58f1137d0637f68acae3e79a4ccac94924f76834e8c260e54b5836705f328e298c0aebef05c99dff94dfe8d38a318c709365e05a324f5bb7eab9e3efb41787e52c2c536095f32c3592737570ae4538c41f88a4d1a6398e54b6a090f7d88723299d2e5716a54db126b42a97bc6da366dc75d90a5c88097394c01b95c3e013cad048a70c3b05b30d2a29a0e4a3aafa070053e978671bcec4694b50d395beae8fa1cf56dd4990cdf3a2c24b84081e259e5c92cd1f63a5b61a208100c83e8f5999f9a2be1b6bcf2f15a1cac82aac5dff7668165a01a2b624837b2db9adc524a99a40cd90aae0a0e0ba947bdf7305f65ed5969e552aaefbe9c424bc951f955ca21223af9fd2ec55b91b40e7998dec764f2bc0f870eb14a8a4a8aca0a8b8d254c6c7aa231a74f578babc5dbe5367d89ee3dd91dcbd321cbef273fbecb0d971beee297c794d99e7ed91f0fb43a964807d7a60c8737d7799de7811ecba328708858e3bd256289388b0d5f51f114ec28698d7828cfd33befb3463a246289bc69624164459459202024dfaeb23a58c9ea746ca6f8743e73783a36411c3abcc14b293b5d0a11b993722425a8f39c2224738c7cbbd449214a014a198a9f6dac59f59f92620d8bcb0d67b95a5acebde77d5527e6988e83a7facc9d9feec34f9fbe52017ef9c1e1a2004fee02f25fbe2c7f5833bac46eb8ecb8dc68b9787cd68c4a412e976769a4c55b2e108c1de2a58ff5ddf013cb0a5652ca293bb14393cb7c4c6fa6a4245171a292d4a1dbb48f29933fadf2c40393727854967454a0ecacf47ca358983f41acd4e14e87ed799d5b1eab83e30867aba3633b5367f293cabbee744d9ee77376d3519e2d915bb799f633a156e85426533fea2ac557fbbd8ed58832abd3af769d1dbe3d013e3847a5efc1d91259a28e998ed492142df1bc35addb9cb4109ffccd42513265bbf46d13049c2d914dd232aca4b4e47ee7320646b9c933567aac447309037b3e2751c7e209cc79bcd461bb47fb7693ceb7a3527652b0528afaacf1dcf4cdf7fa4d9e0bd157b7691c620db5ee7dd964f2cf334b8a184e221d4e1c306e1d8729fb40ac341d54b2d6b1d2bbd2e3f860fca2c01873786ed3263fb9cdf438afa8152cf803f58264410b58f0dcfd0a461e224b34e46a0040a12ebdfbd1b3f7113712ad37274a9d4f8d8706a7a5a3531a349d269efa09c8b3a5552855a92e75cc76772335714105e24cb63692ed496dcaeaad22d120c6aa0eba5a3d9938ab837a43aa4a9e57e4c32fbba65e7f2b2fbbeaf5d76af9b51ab45e77bb6c10487f0d42cc41bdbb9dc9ebcf7bd99dbcfe545e769dd7dfeae5774249b0f3bcfe4e2f3b94273feabd1453a90a25e6a08e7ad9de21a52da99221e55eca55a99453ea26d870bdcd17f5d477eb90f660f9fdfa57aca96608c0fa906b9e12e1a9e713bede62505ebd9d804e3777a94a393c3f46806c50bd591ddb637d2c506d09d4b1ec3141401ed3b1c64caa9529741e39d3c97ab516c4b2e34c276b2b779b520f4f26ea1700724fdec9fb5631078b2ca1bda797dba15aea9582243c95340dcb7597568fde716e3f12c2e740bc62b938eeb2ac779d1058d7c32b97c778d34d6eafdb56f50ceba4b436e9828cf2953ee92a659ee9ed87faac4ecb57cf058d18a57bacb6564b931fbf7d3ad63fd2635e7d94d99c7e51cfde2a529f3687463b8179753f9a85d90177763ea9b70ae5ab4afdea01674bd38935d56927f4f568be80c0883b4f6d9d0f1dcfd3cec7f3698aa77e1a8a35ed94baa5756c67ca5ad5518e33931e51ee813d529ea7409c99b4491d7b42a58c38f0a2460eb511295dca97920598bf4146f1a47a6b599cd5a5a7965693ba821163758c930433c5010e80de04669a0fddfb2eea1b83baa5d524e9d4724dfe16bdfc56df99acf8ee6484d0cb6fe5bbce935f4b7a091ffb1be61ab49f1e991481e4239322cef8ce83810f0c76505e75f282235fc11b6e3e032c0f247586ca072f3fef3bcce453bccaa4a7d6b2be7ace3b150f052fbfd3772b9eb4de456f1553a976263d50bcfc506f755015f46c4e8749a0dc00d4003506786a004b5bb5c41afb019708660b82a74e5bbea5e5ed1029f687a72d4f693107f5ef088c3ba4a8cfab9656ab9f863a5aad5e3f8fabdee238eb3ab23a3d16c812b1462ccdfad8204a2dd153e76c1dea18a5d48a2193d44fba8757b757b4a87d7b2a45c5a3af3aa60a512cbc48782cbe512c842f83e85bfa993e88ba54441d1e29522de9b01e4155a19390cf49a8fa4c59dda93bd5a7f3ac1ae26c4fc77275e9dc4ef5fe5c77beabd79d8e4df9a61bf37c36a59d0d10b8f314b72b36210f1cfd4c21c59a14c79e1a4a01576c9de72a3463f02a96219fe30eea50ace9cac34b1e6238f13724f4edb20ad529aad037d29b9c76e0e853ee82c69c472aefe4877da6a478c7771102ceaaa18e495751a98c101de9581255916a49c724a8226a954f754465e44bf95449544528d5100d778e7295c953df8f3af49ea3bed6c9e37bf64fa6bb62b93a540da986ba257a4d55b450afb6eb3833ea35c9a5739cc9afdf586ba2f48806ea3ea8f3a03e43f8913a1733042cd63020e6a04edd04ea61147dd182a73978ead9004fbf23b0cc0a700e5f565aacb1f1d4eb51ac894fad447ae9d25bb536eb4629ad4fb7d879ea91d2a35a0fadd55440b500b241a9ce53af0da34e7da663568ca7617cf6621002547dd015599f145927095f3f9395b238318ef2cd9ad3fec41c2288397a091b857de2dbb3cb0fd6a104adcf4b542a8a35479608cbd3615b9f23d40dbf7341035beba3fa30120e3c4474332a7545f808095bcf5d510f58c75a0838c360a816605ec5f202675863a4eaf3e5f927306319442638e902f27357945955461ed6e411d6c4265b12bfcf0f91a06fafd6c7fa589fefa2a2149a6906247c742a533059f96a8f2916d7df8f15083c5dae684270bd81eaa8e85b75b44a00133c3dd7a25b51ac599994620d8bea68be3a76328a61c74e451d76f55621d19391eac84f456006a5eda9fd766b8476d1c5981a59df56ca6ef8b439c1284b6052c6ce472640e0f9027c64424693cf928784efe867faa194c69843b2f0fae94d847317e59b665abf3432050b465982f58c59087f823664008a0682d0c435503ec021502e2e4438bea56e72ebf9c7046042c0d4fb7f9c6a4f1d023470f1ed51666bd12289321e7daa59a3ef04f8e0dcdd5e39ddede790c927e8a3c30efcd161bce990490d885c024a1b21e0e9d9d66252ac59c51a966ff7b1e25ef22861f952e72fe7f30354ab79b435905842b29484c774440dc90f12a24e1a2d4122062f28c1d04c0713183d44b3222d05e00091d16f4779b4ecc433c37ce9373d4839d4a6c5672f55c4185f0491cf118a6ca48ec92cf3d2656ea26e2293de841e4c830f1e33c8eeb6d1d0b23a7e2d81adc3fa255d4a09837d6d9b2b34d2007e80a58c33d912ff8c22c55977a7f0987551cef828a10a0c9bd1d131f983970e4377cb70c6105668b102152831213b61c81746d0e0a1490f473776ace5316e42cf110dd27d48e731038d89b9d203a66dad9c1cc782d13ada298acd66b3c56c5346ad4b152970aed4549dc41aae08ad2463819e6b0f72fdc1d313aad361f3f9e968a61c84f1e2ae876f73dc1d82b3f3521a6b11cca63ed57aa25f159a7306fd00f5e907e3956b0401cce69cf109d00f93aa0408547c9644c6f8510284a094943b3f35982c31c03bf2a7431d9ce50ef501abb1485815ed88aff67b31b6110467b9e3f31d5b790257cf247cbbe5388ebb3e3f384a9cd169f211fec69858628d990e750b20bf9452da4d3dd337bf15ee10154b68575d6f0d4c135df5812e6c00d960628437a974f4e05c6db7da620de7240d0c25de27d27305e3dbab17310509ead0a1c38644b5504fb713948e99bc9f7c52c7b84fbedb4ed53665b556abd96ab65aabb55aabb593ad87785d8f8fcd6603c814d42d431973d898c336c7dd304c43e8cee963ca6e775212f53b512bc80ea0c344fdeaf0919414c618c650ae0485aff00c137cc4b85c93e326c755221f506a4a42a95bad9d8a33834b43e77e80e7fae0c3dd648c4c7e7574faf6b852bac59b924c21f572ca68543e3f06cea9db8d8686c5a29ead592223d4778d52094d393b35c4e41125839c996e9926d3b04eefe4b30b8953d2b971b71ba5b439a536799b4c263095bacd396b85194a0921e4b9e79ef7018ef2c0ce7f788f4281b94fa7d3e974728b3aa94c28e7509ee23a581a18e59ce7d50250600d9cb3ea1723d3e18e8f470fd081b0e7d9236a0157d5aa1e5bd35d9debfac98154571af8fabdf282524806a9e4af3a6672e92c170acc27b78e02f3c94d2e512c9cbce34c40ea731e7f4a2129dd65410954001e240a6704a1054c00b1032a8066b22646104f4c7044e4036acca4571a0fa5d348f77008b747d4b90cc1249081735cf252ca1e40e84f67e2a5c75a8ac0b565c396057fc4b7417e8c4b2fa5b72881b34b107611c2adeaf25d4680bd6574263df4aeccb9e99076820de292a43b5d8c716102b7a6cb5fc9e82cae8a605e8732fc61e58958f30316800b3c2a5796c0b99ffc93d87d9357745d6c8e75432d6769647528047b1dae7c045d10a1c1120d96ac6ee044064d64a05464bbeefa0de738b3ce2425cf743bdd9abc47e726976e026f8a9cc01b13d89227bfe93a3739ce4c7a9d4b9fd347c3d9306573f29853fecca09f92abb5e996675249a9e469198b2da8fe7479e428c94f8f530afd9444b5a29f4ea3e431bdc79c3b60b043261faad71eab8b7c5a3aab6536805e051b85e98835d9d48621c68d14888c8e7a8ce9a49437c004e12b89e2b4f58309c217944af3153d9c2fe972a96531de9cde79c9eae99f9754f6bcf46e201e6c6c48e6ababd0b1a82409edeb92aee598af49743ec3901c7dd681bfc836ee5805c257fad15ba01f25184f29318420a943d80fb85667cd70cabc1944273b55094db0741a1b10ef6dcf73cea9246f20d3f8e9d27f649024e214a434b765cf204738b74c519070517780b98f4a90d46c54d801036661efa31224463e8747b196050b7e08c30749ca98e286880f33a8e248075fec24e13da162c9906992c4104b98008c309c08019116216041953be4f01b86848a1d284172826fbfdd352548964022240d7a4513eacd273fdd156be277372bc678a334416cfd80e9929e07d22f7ba82fbd9652d6a674d68f764879f8d59c93fb8cf3d187599b7e656573deaa633dbbfbfa9c1c67e76571d65eea93ae565efcecbd9c35be355f0ae2bc4703e9cde913eceb9efca427636c59eff76a8b036f68a15da05fc11bb20e3fddbe7c9bc61d84ce75c41c52a6f8e0b06530fdd20ea78f00059e9ebd5ca9b55e1b08cbaa76ce39adcb0e25a53d813081971e3f182470fce17a69abad3f5c2f5d9ad1b9e43c82b7434c690bcd571cfae898a3b70e6d4926a48f3eaddf28bb6ec1cc7195e3bc82b5f98a7ebf883bc68193bb9cc33edf8f5a3c077b7a068e9e579646a3d1a0cce6e461e950a5e851d63ef3159d7ab4699d2eba949c4b2b4d2e4fd28f7ca6b50e5d46e02c6b3fa3e9569fb6466c03ce9336693f387a9e343ab1e822a55e673a8c968215d661750ec4b5ead03d47b0f32c4de35187f32cb1632d60a62d2d3c3a64b180f9c70d971bd2da8fc20c81ab5327a1086759c653bfc1c2625b5afce62526bd75f716b0078cbff80b78d3d26225ce9d3277e9d23bff70662fdfcbe75f44add04213b2ee0d25087e20ece7bbf6fc8bb397d802667cc3596eb41783e2a42e4117afac2fcba1fca3fa912518347172c5128a6281f3956561b9e12c2c6e33652c0e63c3c55b2d073dcedcb3bf74b5c016035efc7319dc4130071877ffc01c8af48071f71c70f88bc7d90bcc06f87d36f365dd3fd87c5987f960f3c5e22f9fcd34cfc272d9e22c2d2c2c5f75d697f15b1bd6e2fc44b1bc637d15b5028b7fcb8bcb0d67913e2abee2feb5acea06d8b2200bb2860458e53430fe3975697b71ea92baa4ee381cf40c2b02bf148f287a3bb4200eebd65f3e0df4dff068d3281650dee22c5f8bdff8f2cddf68f9327d16972cf076c8d2b5907216ab05cc3842dfe2d6fa6571e944be931e8bb758dc1d67f6e22e37401e39381cc65b2c608b012feedee3c51dbc2972c36f70802d16c799b9dc001dbc81015b2c208f1c1f29345fd45f1c67f602b280354e60d03f8f71bf29d2c31d87df14e9f1e2ee37457a8ce02f1ee70b06bc29d203c663c09b191c077853a4070e87016f7c80fe02deec982fea2380493e9e6391e798e4710603b21c84cd17cbe3ec05f4f962798e4a0c88b31cf09338cff296ef47447ac9627dd5593e93df387917512c60be7916d84b7ff1ee45eacc17c5fe63601c0ee31fceec8a23dfb587e3c399c17c3833ffe44ce28001e37cbd7c7136adc959bece575f966f035cfdca97a593a7aef26579047ff9beea4b7de075d497bf7cf31d088255de5afa4608bcf77a6b7762a13a975364d6e84aa572aaf26ef5f97ce51f342f3da216703b44b9c43dd8555454babbdf44c34befef935256b06337e1942f7baf026d7ae5b90af4d487571d6801993f813554e7bc5e535f6f99cf3d668316907909d670fd8231a1d721f51715587af5ead9955961c7ae530ad20e61b8ed52173980a3122b6edf450fe0a8e4086d4aafa78c5e0fec2a0caa1c3b066f30ca4b812d06ace4e08132e4a002a6c4190573b43dcecbd3a922c905705126e726ca5ae1f00c5cc1fc23223d0563f37054d3278240512b620c23762006921a0b8488a090628c2044927cb0417c760c9d9a24694815cb5062051353ca4725562079eea3122b8ec498574cf1e9311d4b016193d216645e767e0259f759a1b7773bebbbf1b17c36beae3f5687d46146707bc6f45b39ce2c656515fec953c07c7dbe4ebed211e9309c8e0202ceb14806cd39a3f4f1b13d75980c4be995929eae6ce0305fb52d640af229751bdfea8b71e58bb1e82f0e53c606159f0e43cb6c388baf348b8d6fc77cadc0d9a8dcb5cfd451ed1295f24ea6a4a4a4a4b84bea285739c6790aa4be0aac5bc81250b00e512850a6c31dd3947fc0e2bd5f8e4b56ff24ff9091999147b84f5af44cf4c053679a51a27cc7b227bf5fa743478752a660bd7a94329bf9fa017ef52f70f53c43b3820559334a94990ab4a1c6098c72cf559ee245522957798f94abc09b22359592c27196721c25ca2cce543278ae027dbeaedb7494286f3365edf182d34fdf0fd8d3eb204c103d20790ab3d65ab799d77fc0de9a6aa8ef9e3ce538b3ee3a0a6c9dc0937be04d911378e3f9cd7594e3cc6ca689fa9df4bd057447f8bdd54375ddf5529ddfebb09087b37080be73d529eb70fbce55dc8d1cba26b0e5c2f56e8795d6e460eade7d19766d66077bceef674da7fbc1886886bebb3a7f5df575b7f3ccfadb5dbf9d5f577d9df4fbfdc904847e5fec44bf778a6fed9b3c4720e31c799b71927819c4e4363d5b2e608f0b3ca344f9bc9ace72750cc7f465f04dfe030472ddf465a9f3f7ad75f2368bb72613f51a6f98547ef747547bfd808c93d21863a4534a4a9974d25afbc5a65ec3c0d461c079ea281728e84d193b25ab6c1b1839324a628424a9ecce6e856225c1322a3e5809911e3ec77c4b29654c8e897987b5561a5aa6b2f90032697a7e2a2d154d1a6966502c2aa9edfca48931464943236d38bf2e43bb047390de7ec11c8af490de397026d86c314a601edc0c53d68aa0758ecbc15e8fb3f899be70bee6b44de73e9bf99a289a0ea7bb9c6d991881912d8ef454c943a3d186cca4db948eeb7285e901abf88adb9830aa2fd7c3712b475c0071aa5896b92ac0304fdfc10459b98acbb0721550061b2e69f3c52347c5573ca25a0c507116efa1e22c2ebf1c722822411a549c058cf375af09ccd7e4281083f3a640f91d98f1d753d2143a20928216d8f85a66ab2fce246a458527d6d868da292dd36d994016fa4d2d4bb9f9f811652932c706cf9baebcdfbeeafe887215602ee5ab5f754a6faaf66a43df9ec360de173ecdca601c06f47fbde752c0c0803c260a15ac8f1e92e7753e915a269b36259a53f4d4e3ce533a979e52da534a799ebaf7c520e4e78bc18726b658cc0ae1e9bdf70ad10ba81cc87d15ef8074ce9deebdf7769e5fceb3a1431c688ecb08dc49419eec3c4f305a4021cf6508ee514ff5d631937b2ea174ccbae752492e75ac730fcc55a84506034e21d90bd8492da25e72d5725c8a9eb680473d1348082ab88af07ce8339e4d4ef79ba19364803de73c1baeeb9c3ca53db83a4d6cd7790bf4bbeb9d5fcfa977ded7b25133709e4815fc1a3cb0c579e79e9fc01607be209168b4e79c02381ae940f9eb9d0467134ae5d0199509dc7975ef400dc8cfa7ebf5e321b94e5df7bace73ae7a9e9fbcebbaaeeb3cce4f9e73d7797438c30268a0e1ebf1eb0f1f8d7a68f2f49172b475f2a9910f3f4fa7f79ee7790bf4bd4eea58eb85ce3df7c01aae77e00c1d52a72e98fcbac96fe702dee490d40324662e37375a60940417b31b188f28195afed27d5d44f568f1229ddfd60b26effc012d7fe9fcf479eefa8a74ce7d8d62e17ad749940b2617ae5f9728173cbfde59d40c32b4b8cb7bb4fcc523ea012dee026f5c5c873e22891fcc5c6ed31a9857becb7773038b1344b1cd60401d547a20c6cce52fdf8de7c5ec46070ac5cc05163179903a2b62bde56b6d81a99b3e1c3aa4ce83074f651329bea84f1d44598bd309460bd849f3824927209473bcd2e1afeca4be9df4f42710096be00944f3e48733719d73ef3d367127ce4fa7dad42f28511ef6ebdd07d6c0f975aeebc0ec79fe21f327e764f7755dc511face6dfa640199af60eef11d5883e779eef1553a9865debb1763164be8c20081f3443add7b6ff49ccbf4f344ca15fc21f3d7397002c94e80b314ea72bc75d7e5b506ce13a86329a73e835ae6e2b163f4652d38c7c55b52a7947b2bf92b4f29d279cb17c467455cac16bfacaee5b258ce9970be39ee5ef73aaff703527f82730893dbcc667db1c31b5e4d36dd62c32578dd66def8327d16b06dac3ce52e5f4ecb0ab480ccaf8035a43cc555be0b48e7fc54bd937b9e075a40e62f58c3c92f386dd349ca1773027c3de5294a533865f2940ab79623709e48b349a5913c53c60304ff497ee79ebb2cc19de78994c3894487b8e06f488b9b3e2924691dcb710163dfe897c267805842cc413df5d9744869a66c36e997ac05012da014ea17f53c9f3c75126ef807751a26d0b119e4a3337941dde9c45170da93df7befbd5647cb728a9c3c88cf8adc1308cb323dbe73981d1c3b8c1dde6f8252e8fb21f326500ee500f3e8d1086871ea3340405605f69cf389d4b15c63f074024da12e70cb37937a3ae9907a4369f1ebf422a0059c4dfa756ba589d42195b4db24620375202a7f28094a387bd46792938ee51f348f349b746c4787b68e5d50053a919e529a89481a0ac1d23b1ccff33c10ccd7399726fb6d397b64a30de003893fbaadd6d276b52c0040ae6387170317ca054b62f4123a6590185d8cc934d65b6fa5392693775de7b17a2e23701775b87c1dd42fcee56739eab64a9a8d0af7729ecb75e1bc3b9d6ebdf5ba4d535f5529e5aa5beee22d3758408f20487324389528cd05b8813af68269e8af73de412d9b368f071687711e6ef80bcbdd7968711c1e7970f1cf7968b9cb6ddae6298e111c67e6eea0f77007bd3a88c347006f46701c7e03ba3e07bd87cb47f0cf417ff95ad5631c6706f3b52ad862008cbf78f597178f016f5ad5f17c7137ad0a5ea0478c03c01b10673977be38071d00e0cd0d001c00609c2fce637066308e33f3381b610430ce4010e6fb70e4971d88fdfbe1c0b83e9c59445dced621e73041e00972be023ba8438ef3950fd5403044601e4aa3391d3b798a7776e53a5df9fc32f8179c6e3357a0ca57befc037cea534505cfd5caa2565899b3da58d958f95cb9cd5c7d9eaf7c32afe22a608adbcc94cfe4f8537da9af7bdcd41db8f35c873994d621e77408b879a68cd2fac571d26509a6ceb9fcfa5e8ea643e5ad3ba77552ae23707c5973faa97ea7438efbba04cee1739c7cd221572fa551de94963ae4501ffdbad29479fda2ceb94ca2ce717ea5b73e59fbe27cb548677d71be6ec4f9aa511e8ca36a98d8f506297b5a0bdee830b30ce0661664f9c8c3e7ab8f563d40797dcbb02da41f8d820031a9439f65be55464176f09926465b8c75298d65d8e4fc7e4cd007904859328c83db205301ce3288170d67162ba4e12648dd06e1e900a4a8c227670925487082d904f20117459624497a810aa6df3827d0bdb54f0b49f07b80dbe767e26b2a0dd18e084da529ebbc9daabc33a5519e0bd0cf4d448dfc6d4e97608641f5797cc517f55c46e017268c07eac31eab566ee8bb87aa12587ae686bcd6d9edf2766d361c1943a0c962e218d143133288a01c1931c2250a2fd41041101143a4600b5b0bbc2dc8f8c286859204044584706504d199a66e4293c59dd1c6c51c91623ccae1f936ca39a26d321f8d7670f2f8a3d10e4c4e48c418639c9f0a88a6a3e8624b5a777cf5fe32cd3715c0d3d753991c19f6349fa7d34f664ae9f4894365379192b375d2eaddb04c1853065e75d878842666123aa2d319bff8735a1db1a676281db0199a8e4dc7f42508336101a9cfe3eb3aeaa33cbcee641a62f2f90d617957e095734dad388221a1e2080ec91430484d284e78d105120b7ec862073857404146115ca421c60f0a2c1a2968d064714d9e3d230741ac21c50c867e08426896c3ef3098a0608b275bc8008bda2cc3525002ef68071beb63582e67b9fc8ca218c4c00659202d1d8133451557b4a00a1aeca084892e38272a4a021c2b5a4002237888b400028d9803244c20460dcac841171f9022050130a3730c4d11809ee5218a882eac8d745a6a4bb2965e8ed28e72d5a957b0063acfc0713a994e2f7732791df8c1626867dec2f0d4bb90c2789c3e1c5fd64d9fa5818bb2a6c4a475175d17e3ed58a6f68bd3ed9c94eaf00dce213d95064433c22089153915091485a2bb78a28b28beddf359d3647177c0e0003282e8e0054d82708312cc322ec210f6f6383b22e0e2a70647d4d01941f75149117ae09ab83e2a591ae306934ed2faa86449682ef9ac3e2a59ca8952088e4ad480825d3e2a51030731560009e9ac9689d66be708ed31363bb84f850ee5910fd366470b2a803b7080ef47256a143d974590182e402c7688e182aad031f9ed4ad4b8a259cefaa8440d24be7e54a246cf67d810643e59fda22bb0564234705efd8a83df2bb1267678fde4b565d775de42fcce71fe661aec69fae9c3f93987689b373fd0c926702bfae9bd6f45301a0d01848f46434001422aba011314ca38ba01cd064d1050a7cbea3c3aac0e4b034f9735481fa2e333138f1d2d43e01d33d0e8e8b07ef261e041c3043ad696da7458dd4e6be91d1aa3c7d239e79c6ed3611938a6baab63acbfad7b7dec00526badb5c6a5cb755b90857609c2c22f308d8e5a1d8535b0053390969ebde7e1a6441a9a6930a12195451c1cc174ec50428439eb8d084284aa2333a4f81c6b6940f91c97bcfc53a9923fcbf81cd34294527e0330f2d3e104ea704eda7c4db7e9962103e7f0e76c3a2c8c350178f93dc0942ef958b323e6901e3387a680a9a48e0e27cd844da129243bcedb8412639c13a8c3391304eb700255a1ca537d826093086c0acd29f4d32bcc66078cc68bdb4f289634f13322a163466fd84c944921e20b96bd0e36fdde0c06d147253d203d013e2a01c3873fd5ae7e35e9667d9c15939e34a5599faa549f5428a99a948b96fca44af549bf66d25caa499446693589b37149dc118734974c9fecf9e9b0c3e971926765099c6b524df2e9d7f4599bacd993474e6f5510ae8e7b5aa60a7da8c3698dfcb4c99e7ecd68ab493c1dcee93cd487d2a80e0d733e913c2630df3b39b02681b70e674a0c3f0c4dafd33deea6e2a28b31ae2c3fe5285ff954be942f461a1e0566ce81d44f79ea93284e86850cb46740c328b0f0e8db65666831eac30638df7bef2da3eb1cafa4e74170f67a3c2f3e7f38778ee4bc3d7bbd63c50fe792a7773aecde894ce0ecac1896eb26050b36c35a812b26cec88aa201a689208c089c59b22a7d8521d5d5af66c160713543e7172b108a018c144243580c0d19112262a466029ce950fb0011e908e1949f9a1115d46e4e88906e3c984ce087116699719329c03419bdac33b014c2354a816793a443082cc1b504f8032788418307273f78d7c1c232e1bd3cdf2ea58c5f7c0cc84781089cab9252c7a257ef9b93b9259f29cba94a0860e9ec54a5ba6473ac4bd40aab0e33ab2ef5ab9598c0b977a8ce4c5a1ad569409c55a5dc3ba6bc81f88a77f60ecfeaf258185c14f8d0e2550367576d892a88c4099b2a174081b317c4c8112f42ed04459c07f159115a2d06ef8d36f37af29b325c342b3a3ae10520c039d68608d2b14d800a24b963028f0c22610832fff0de358f626e8a0886e80d5c3e4d199946c70e2a7ebe1d062654d25813c1160ba7975508e7583491fa863bb8bd291891073de21449df4ebd98b05d32ea50c107dc43b08ed6118600e799191a5b0f4c31ae298c7cbb87924746596b489d2613765c77099c5d352764aecc50d1b7c368661a8576f0079c2f0a9d23beface64628e367dfb094e603f41099cef1f0581d2cb92c2c9b7bb622e653965d14b592e168bb2288ba2006796ecc6970c7d862583635e3706527c670a4483a29114404d443e81330592350f4b66864787881013c59295cc142708c1f9fa60bd8893389d9bdc178f628cfac4a83a5b15bc21877a82162166d19e6449f483c8d2b7dba0647b1652bfa20267b984a846d4592e398a4e56b23370f63c6c23c24be2612772e4db63642cf6dcf33cc6555ae0ec55e0ec1e23d333adc389e45cca2a82b337f3d325c1988a83cc5bbf710bdc4e82109cbd34702865b49ee74d5f0a62021f1b7ed4925427408002cdcc10387b302238c312009b2981916fc72e5c0185126cc707305b1138944c749e71549ab488c4809882fc8925b4c7964b7c7b1e002ac4f7b27e82a211143a42df493f917c963f9289280be38bba07663984464af14d53f08dc50038798398cff30c311ffd2378c3cd4f2965fc9aba7c3abfaead0e8464e88d36d84c9d78b2e89d537ae52ad04fcf61e8670e4664edf9ca594b3d2c02675a80251cd64ed3ee616d92000fb38634f976574c0d7b2cf7564ac062b1d27019020a2d2f6859633504e8db5949c8d0fb44135939ea7845595ae08ca98f004528e38401e725e8910067fc981a3d2134e373b5c0656419c44b9a5d5996872d0dcc9394dbc1f9c690e78b95134491a3dde4a75d2265a7bac90e9b300bfc1252b3699af6eea2cf0620383af522d7237d6b28414b2c670b3bc42bea784531ad74d222e04cbf1e9135947eb57bde6ae572c5c4c8c8cccca024d8b71b9e353a0b5252eb2cc89f3d478ae2b7ea7009dc9e2967bb5f9490afb70ad2f97696cf89427b01b4c0f9c29800e79594a00e749080c9f4e9e191cd070db66f9fc0132c057084a5872c1a6030c9ea155626f0e049a027a2784810180110be74061a78c099c20ce119a6cc756b2166c966a542134eb0276792c0d98399024f1a73543a832682ac4f223fbdc6395f681c2292862d880267fa8e032023dc9cb45a9f93ba9521120c530467fa3e91c8143351f4ed2b97fd300b09ec853c18b284ad56c677c76a4b1049b284b33799991829ab65cdcab2699a59ebb06807b708e16c8b2612f1d5dec41114738aef8cbfe9d349f345002f70bef86f32a0de97906342eff6ed98156b30fc52d2d60baab70113e14ac00c8d2bacc90b002a70d846ac2819af5822a07dbb2b064700fc803d8cf1259d7a2fc1d5e71b9a102a8456e9a7e8db63649a26bd355b131c6225bef3355ff3058022a0ff4ca2cba99eec69147e80c0d9ab4138378fd4699f9e1e1e267e787a7a7e7a7c8048003484aed24829250aed0420024f100a3cc20f9e09a70cf30c0db67dfbca05055ef5abbd5d982584f3cc0ccd6caa4484a2845011ea417c763dc6b4941cc7711cc7494981dc340aedaa17e04c5b9ec099d282e87282f8f46914801a8576500767dc42023c654a5dc189a78f0d9a40d3e767067d7b370023b89b76eba48cfbd63730b7d24f1a2d4f9f7acb41039c6d9067877c304a42e7db2f0ee2b3fa794d6780fb46a3d1809821e142e2474aefca992370be66dca4cf2c560a4cb0f418eae8d09c7cb74ea3d05ed3853423851a900067499b4d04080e73c618638c52c6e9d52b0884b68c00e70825d208453a5919f9d064ad94dacc3a25edc3e1064887ede4caa4ebc99b139d9cc598962670963a4b9fbdef20bebd958c8e903d1e6b0498e65f4b3a50173b80a3d1113b7149343222c9cb1585c9486983427b4c0ecef7852286fa1589708d55e4472152bfe20b45d8fa65d3310801ea982925861014755d0c427e6627bd6e62fbf831f860eb5864a253f4f1533108f9e958eb049576b28a25a210824c167d860e1a2c98d18c28702002ea4dda1a2a1032a39f4c16b3ae224089a423b3ce62f18310b38ef3748461c60766ddf56000e5895977bd8864872b9a9855fac57c114f0760c10e7698d12fe68bee16a3a763ab550096c0392669cf9e0a71464727835934d650d54393911039dfb567b231ab558738dfc7a11d0ad1c92670fc485d2c21381a8500cae75514e2a18b1e6324907ca263364fc7f264e2a54b9f3d1db343f014ec0a677c66088afc30c41b8500e8b30c8ce6a58e8f73f6fda5a629c51cb26df3755fca6e9df98a2efdc61adb3cedf39108dd05daabd3be3fcf9359daf7d7f2bc3fb6775dd7755dcd3f56363352aebbf7defc63c5c5d8f909753dc618633cf94549153570eea321232400e12c87961c69590c02110e863c61021fb2f86216cb30d2c58e114a5cf1248c5996495ec6d8349942e7d2bbd6495a26a12c894b1a045226a9902fe9a7938a8a8b0b080a4000279cf0b969349fe5d0cba6c9215982fc8670efb42ce5d24320706e9d3e7dadf3c53645bf3f5aeec42c7d7222573ffad9d0210e1dde504bc49eb3e5a3cb185b4e2f210a2ca7aca293fe2f65a2c0511aa06354d801c38e29f34eb1430fbc37a4a1f387fd6cf8804cd9bd76de6779057d9c7005962a47e01c06499de9324a389cf14edb958707bd1763162b4687d944f7648d26647928e951865e155846d9612a05eebc7569c5cfa75c48b11c67967a800d67f11e379c750394600f1b2bb761897c44ad2017703d45b5e22ac718a752296f217eca71dea6a4f8ca8a0ace4b1595a7a8dc66e28f76684aa5be4fc211b23f22129e27cf4d5726a52f149d44920406d2e8071e263b3821f2d173c0e42308a45f7a0c832841104c9c3e1a055144103b4ba827b5c9e9c81a01510382880342e802210253ca472320764e42968c8408e1a57b9d173f2321647842bc403579e9de54a283b1819025498c7cbe443e1a09f9f9ecbd91909eef3e1a09f1618ac07bce2808a28f46412479e971842efa8d1b481b59f42a8a39026a44f53e1a0df1c34bef6cf7d14808ce4808345eae7c3412c2f6d23b939110472d174e1c781e3a181960e9d1730918ede43cf7d18888a18f4644007d74fbd18888249ee5a3111139df804e3681551f8d840892f1a95d5773c6cc09baab89f0f4e4e8a86081775a366f4bb126526ff1b95125990e512b5039e78c3748fa03c443959672d80053a73add4b5289e65328d6dca66c3ae9179d3ed8a713aad321dde9900798ea7c431141ac699d2993ddb5f7722e1aa5d11e22ce4ed9bce9dc564c80a353aaf3d17053afca9f2d43e02c956a8d712551edb6656d75aa4379e80f1532723bf2947a54fa4c89d0214a446b4fddd656ea589e4e6ed427143a6f2dc8ef08e5b3cc71d2b1a8c40c1e5e004f3d4bda53181138cfc8cac0d9f5140535a4924ec71a6ca1d5de390dc6eed941210ddc394a4b1dabf488a58c941876843a8cff7af9b33567af78628cf107dac718638c31cece2e57ec24a531d1a78b312779a21d06a88aa8444d3576492c95a281000000000314002020100a064442c1703c20d3335df80114000b8aa64e78549809a4248831858c2180103040000040000004b37103ee0050510152ab06c334aa23d61a64546111202742d4ca06e3cfaac7a90344a8f04212d80820e20f4ee00126ae7d959e5b2c0de2c4a99fcfc2af6d2bc199a74a112ceba66362a4c6692c2b464700285e1b5d2c5caa73e1fc2b447c31b8025c30e11d78ce88e77b68876188c5100625c7b37dc2f8ef21c7b3d7efe63ce4144600e2c0b128f45960a10407781735813125f7025d69533fd841f2141cdcf403707a14ecaa26f3673b7ca4a6f1738fdce599ff8b605585e5d5bbf431e98375945d3a542a263c214840501aa76284d45218498c0bbc25d9db88a4c4e42e7370c88cb609ab9e6425353864c51d250e9f711dd3909008baae98d7747ad8a04073f0770f6d39c05b8359b9e6c009b0808199b5a985fe988c654613e662fab8053de07659379d31e6c20a8f5995c9da06e6ce0449decb1e5cb54d17c5c6a5be6da08cd6f42a841a772ac762bd011b71b5f2c0603d4bf2489691e9613efe665c634c2afc9c7f3e1fbdff9471c6d2947208ec35e9bf1823b90e219e0dd02c9a9d4832958a43d9be00395ef5fd04966a95bf49ea63fad357b79f70bf321723e288f375997f529275131e00e5641c4a8a9de59b9c1a758231767b99146eae5daa0980e58b3e391cb6800a733d64413222feee04385e70245bae7cf54816d1faa02de8dd4d5896f9403a9f37b3dfcaa95402b7035ee707782a509db6e11c7ee08d83174bb352bab9a11683b6bbb8aebe31e80aab5367a98126c254ae02a270cf934ca401ec686f36048802fdae075a3ccf348506364c44b653ff0f5f4546796b62006f312f2d7ee830e8721bea310344b6652d41ca221d55ea873cdfcacb83c81d3d064d6c4ddb0101414105aacb80321737ed9033c41d1f1fe8cf78cd50e3c0ec886d0d7861c992a081d7e6e44dfad88d61f5c350675e09d56695a11ba3730ee49567a11fc720c6af0273dd7f3d67cea5397c254e1dc4eeb130906ee318b18320f86497313056909acec7cbec1a65d69c9e5e184db9108108281efa1b2d7a2d2ee12b9e56ceaf387a72b0d45d2df7a8b08c01f9cb92f5668101ca2852ba657ad9c2adad6e93601f029592caa243d8823776602c36c391773654c78148246ccd12f73f9bda6a597cf2780602082520f7b5b7ac401aa68714b0c69862d6f16fd67a92610eee9520c9829aa9f69e94ec0c1563c849e6d68d42530a068e62fb8a6326406183055f5dded58f34f077e81171fad04315da01065b5c7ce11ae9988b11d760593cef453239f68651b203ff84ce05062cee38463a0438ce4b93c6752aba5b9c0c023e42cce57014ced8c187d6d670de8edde4a00ae52ca037d4a8edb868a01b26bcc6fcd7c8306db2e9036e938ce735c7327bb934c1ce4b8595c441ede18bf79cb7881dcb074ff53b8319538201accefed1ab546aa3073084d3c7a227da1a396297438cc3365cc338e3bf5213699c109569d419ff32fc462ea1c311fd4bd645d45e4a5f3973e447f242c0767439b8c4684132471bd6cd64cb5696d4e590b356d8e2a08c6449362b68d4441fdf3da16c093cfc225f724b13d4158d570980de17060bbf7cad3f8c67437b47ccc0e72802ccaf54326c048a442092f5628b768933c6d18605b1f6d273e112ff9a9c73be1de17e188fe293965a0a245568b9a01b4b76c0c0fa5427591ab9526e5dc1d62f2cf9c0ca205359f1b1768092db1eb9d3588c76d1080b46064721661790c5d09428a0eca93b977b7b145fe4889eaf4031117ac0b453f97a8114a5da362f1025fb04d1cd3503c491d1c6be2baa44617d60c729dee4cfed16f131d669f5dcf5bbc4d00c652961e3db9a8ceba2b399869fd52f159ae6a4a1047338cc02b153feb0904d14a73571ac440580d03097c2702982a04028420bc91037b26891d1084cb7539653767994e457bcae6e0ea63a00c65acc52628557b223384a6c4b2034c3bb17878f65e0d187df755e2b6460ce0ccc2e00cccecd938911a8516e994e8c3b0920bb24c7e2ffca4c6075ffc904db334e92f3482902010bbd6201fd48503c558ac4bb12d0e9d2538534124655ecb5b6e8a72c7df1bd7f87fbe98873035415235cc78805fb255c6d28fbca8f0f5b40080f1e9a127c855b34f9aa6fc46b2a6e697988bdf0ce7428d7a6bb9966df413cce8facea4a444000f7696c23e694213f082544587069820387238f2c894804beb80b7e908713bd85bdcd89aa5e91202e167b8eb94adc07c1eea8910e16051ca767e823c44eedf40eabafab2cf84b137ccf5af3538a3958ecd5463e4ee1417ee285ff7175cdb4532cc83625c734bffd7bb3be61e3f285efab380eaac44d0f49a331d0641bcd72bb3e87dc444717de83c2109a5af02c712bf80abc1a2086ad3418a9dd0979098163102caf714fadf2711b271cab8f375368715fcedc1a9d079934f2007d2fa51de76e577ee5b8cf05a8be1f325856dd0dd339d471e32f7472eec9cd84eb2d52ccde5f7cc7b2e033bec4a3ae5c96dde8cee2eef8090ed2e24b3f71e45d2908e3a1056d92d6329bb354cca141eb09c1796a336246b7c0e73fb1f29328267246dd18b2c5f75011d25e5ed878d847b7b3305cc593cdf880c6fb49dc17013c1b36890e9c0d94ba0e80d1c2a92ea9f6603bac5f690ca49eb9e58473c0e76f8d06ca4d8d25b311e3b6ff5ab519a796058ee7571795f7d8e1a54130fb45b72b3cd18bc1562b56d2814ad3af199a129a4e4dd90a337c3f341ad1041f60220acc8c89e17ca2863d2f6c39c4183883a8335881b0308b09fdab82fcf72190173b211eeeb19091f2c45c5a6ac3c68e7593ebf2b54dffd25c4d30a38d31466eb081417f577e31d4586e7f51c5d09a5c76d9c7516b95a077ea4642e113a68935ee7e033dd886609219db905d7ac9cecaef18260ad6acb097e18c89833c4c1250d6262bd868240ee9187afbefc3d0040210c233181857fd9095989b0405472839ab7b8cc19c55615a7f43167b1f8c4ec31957964f958ba4e1a1eb520d891e1875f408f45e551b148a3d580ab017be918a9d6d17250de757c37613ca89d487aa5d1b9b766d6b15e776caae3fd9f997a67532ef9fa13db9782450388d4f83d609c72f2d30c4ed8da171dd920b66b44a1998c7e2d2970c2e3706e447e1dfd20b2017ae68dfa0e55a52f8e857322258e918cc08df4465f61c36e439bfb974f9ba97018a9f10aa0b28475524b6f23e4a293579df6cb49294863ee02f480aca2e94c19caec88c582db19d02f1530bb042659a4c55094496527cee65650e01b35838aab7f9661220c06ca8eb47c7b442e53cc74b79ebbdcecc23a39128f46485365d984bb5b5c3787cf5f850be7255aff7eeeac9f8f486618ea1161394aa4cc05d65f4203c0fc4a96f69e29270a612ee863c4cb5e9311e975433fe6323c87001d15d960caf02f091a49f3e92ae46ea07761e501acf07abd378431fcbb1d59a1557ed3a8d5bba8b12bc973a466871a4f276b889577f64198d924c48db0d8cc9228727cfbccd64067035c66b98af946cf6f70157bbca51038b0b3a1bac9a08cc4e28e791420ecdec0c1f9eecb1f6d838addc70a46c50c9d776bcab2003254338e31cc43a71ff4f0ef3ab47c64560829bff6561ca4ba26764eb1134ae41aa8cae0d43098522c22d8aa26daa3de11546bce548cece909984ae6091cbea58a942207a6c1115093e023e15f9a7b751844c08c63ea5c156235161b9981b3f269864441002772b2c0aee031803484531f8730ab97a9e0208e4464b7df5a719a8a494da4797af23092b30aad71b47b0113ec2d5e259cc66bcd3df2d0478db57d4325c85aace7bb6c7eec74a2f3c0813efcc425e04460b2f18a20e44d2f3512b2159c750364463763335648ffd7151a2cdbcb203ac46a7b3037fdbe2dc6d47cf62a83fc0fa83eb0804d0a05f2e15467ff1a7d509004b78825e573106ef4bfb3af903b1965bb0f1f596898d22217e2465893ac3be1c1bcdae629fcdf952750368a32dcdeabda2675a3f4c4a8502464b33514cffe2ac59ddc1e97cada82f4ee2da428b51390916be4ea29aceafc2940626e9b7e4955a0deec73ed1db44e36d4fbce1fc4b69c99355e79a9a18f9e8f058db6498f84193e9617dfb1f552b2e78c75256000eb1c4c678e3d8848eb658483a652eb1c76a0f73554ba2d6ac637023d56b3dfadae89204bfb5b52945b5d4571e0c08e06db55700cbe9e8f2e8d175d8e915c821e56d2252411583cc4830491e6955733804abb6514739529b653dc673916416f2d4c468d31831e1236b78d53c5c69fa2c52809784892984983ef5e864fb0f3c09359a8380d80bb7b881efe345a42b6a0896cc84c1ce435ab9da8aea5c67eb78bbd3fb19884c10011cfe723fa460b342c13e9a588a43d7fb4858cb45be62253bb128d773bc1da5a379bc701258f54998781b3aec931e989b0dc7ad654f0e65c179d560928a845f8678134d7b5180c90a2a977bf49e7bd5f4380bfe294d177ccc8bc1c737bb2a81571b9da00fb5f239f4738b9cf21cd7df2664a89c17e933905784afe36d9d2f118266dd3594ecd272917a1850fab9f98bdaca79a58889a4907dd26f854b036bbb6e9e390bd091778b398a46de5e56cf23c1f432c0c7302fb9f8350b1afe567fc755ac097649b63695be4692298252f80b5066ea769c4b4dc1b1bf44527fca7181206b89a64239fc1ec9d61d3d9f921c1e63c8e5c14d77ead88d5e692d8403edb2794c836017e9cbda4b58678c7462451392072e63adeb2f0f62ac3c5d7f8ec695299871e1eabb6157d5d2c784260332d2e43a25333a309ef325e83e58ca0b887dd38e7c99056f20afb85a88d2a3c44c225fe14ed11f3984caf237a2b6438131715e4605454345426984b1a973da1e067c807fcb0289715af2c2216d9b9e954017a5c44318a518e9fa1ab14ae7eb4b850ecf55ed0bfed1ad3011222340e6335c22459e1c275bc3d7ba9d481b23920cc854812872c176b3c4e802884c8787ac493eeac6b13ac65770cf3b3dce24e20bbc1cc9465daaf5662a61420f5ceb9aa552bad3f5c5ecfa1b90f1ae163a043532f09577a1b9dfa26301a225382b0fdf62ba372c30fd94396e072b0d8658e66859cb1c11ef884a6ebdbc8b252e9b2d8a93582b52e5c3a0cc42cfb1a27f3971d257750b955793f3fb1dc4183fd789b8b98f2b3db5806dc3738cfec46e1a60a7d046aab4ee6d18089213a3ac84b7b38073d490d44e9e50bb16da1db4801e9f86de6700eecee467a40e69d5977ab238a4c5e02c643d5ef99821d3059e4fef732e78ff704f0b78ac2ee9b8e91e7d01c3e7278f0788366b82e479cab3444c365053937605e15a1a3a8fe424ce16466d1de658630229131f91ffc2418691c636071ac3be53bc5ed47a26578b313c5c45b9e0ca4a2ed4069dc0b6791041cd9e33ad45cfb400dcb8a8daaa32952a7eb9781b75f8d5f3b7b23274ffc1b040d77f469aadcd4a3122ab14554e2f97cee01aa3f057e23d65b92a96135e9a86e2430e8d25236de6b62cd50530d472c983735ed2423bafa68b5e93ade1e940fe34e149c9a3163201f5203a696192a9dd5c02864e8e446099c1f80a77020c29eb971be91c6ead19cb56c4b820f8ddb653418531df01d473b52e81141600e820702fe04e775daa18eed528e96aa7ce3ccff2c8869d33d9a6d5e946bfb90a1054bc738e247a987b74e6edde584a314e4fd3e53a8b781c1b530f70c954b668647c45dca929783dde731169104f2b27652d050a09ece1c355bff97d541a14492bb318c4498d0a8398e2dcf0590dff460b9dd1c99952bcabbab0b6f472f045bbf578b599552af5d0c981a72f5d0eb76c640ae5f1f6b9920377c0705d66e629dbc95deb6fcecc10df296f8c0bf807ed6370c403dc18bcb9bc7def68c02d7b9bd45ce79cd250b5a52c782a58238dd8b6ebc502bf6fe30cad61e0c53f8a9625ff34dab8def1f4f73e0f4db2affdb8e201901df9201a174a9ec27282c6702ed58477d88036d0b13dc4f482e7708f7e1ddc47527ee1757de3966291e5fde9d8e5600ffc825d8b40e9e6a8873b4cb3a24214be02edf12dc2b5a7fd8f7a096f99ac2e75b09604fb4c79714efaa28e2c4755883caaa182353154626f11528ddddcf1e948e643a754c8a7b24ef3fa3c95497e9fe4130009c3f50e8214a554656647747b93855879e7472d4c1b220af5d4b1babea26b2db3819f7fa5fe5843bb6796f75b3b854d5021e737b5da6a9125908836a8cf9e48987cb502d47230cf9385ca6f2a53eb13f8081024c605a0482c7f324bd9842ebbfd58d2d1c3595e393caa1673dc72a801392a43751f8494c3b5f0608bc61e209afb6c2d5430cbf37e0558c2789ed2b5daa481f02ea09403facaab28255dc5177bde700d5b061aa18e5cdb3db53938742b531a933f187b366cc0779b100d8a88b31b92b48bacf02c33fef02af021829eccca2512b8a4eee502943a6c9f8f1e2bd3ce0c22d24b3b1a03e957072c109e8f4fae7ae602e1408454f159256e0ffca1734d3c381c01c149742b59505f221234ee667d0d7032f8612370e02a019ba30e7c05666425e1053dab3a442dbbef54797f44855968db2cfec550bb78f656ec342f0965f04f43a889457424d50c3209fbc491851837a8070648b4999c7e7b47677d10c37ed2c5a368fe2fea7deb7aebe712b3b3a7b2eb4ce23cba1d28c9e5e0a35892bd05455bb63e0cd0ac3863dc3625bb944460ddcf6cff6312af02ba738e9d234ee32256ed904b3372dd1be6814cc9880cbe24bb06ae6f3923f86097688557e8b8ec44f371275abea94b8a24fc353f243a402ad6219f29784f9b5e73063e441579143941fb28940cdf34df8b65f656a1b5d5a4b19350b1685b9897595f6a44116e617beb2fb8ed51af594508bdda9bc5c0b396073460124bfc01837ec7d3f992439b8202caf4741ec692fb1b48361300b8d8878b49effeee0e5841162ac3978c71af18ec29690751da2c81ac0c359e28c6c47101cbe743d95fd735e332e9cebb849c5f0fca6c8a5b2febc401e4972f23ae3bcc94b489e562f7d7da62711d240c80d0594bdb77c13570386e329c03731c4c633f9a7a5758dfe49350b3b4cb5a930250f49700d470a36db27a0900f745b126c73c445e8bb82eb88dfd89f4ca959718138096c04494304601d28807fbc47c9930d6bd0143a541f1161312a8c70338272dc20523011bbc6df74d3f9448f0134fca516ebc466076322c3c48ad9f1763f0a729e52f1e9a4dcf02a6e0da28de962193168bb5a2da89d9daebb4fc6f2bd590008b34685f2b79c1fa2112680f6079b92c0d81bda8f136d4d68f0346cf594c4fa916e2077cd63c6b43ae37d3fc7715028340896535ec42ffed9c6e7ee02765e6f48ec3a55250564df0194cb089e6cc49ffa38735618bc5d219cc07be041b3493d95f0af0a8f860cc3360538861a5f04ba46ea1cacb8c14f5c9af6036c4458bf58a6701f3b59e04911996b81e49f71d37a27b8cf00316ff9a47458cb2bc45e133871a15aa91a0e61cd3214d650ef4c39614f48d72d2e479f08b3ceb4756920d54103490b09b57650c680db320009961528ac23b9043da40bb283c2d110bda4f9c0e85abcf6abae02e1872036616055d511273b3710174af3bafae5144787c642583b506c1f5c171484e02cdd2e23779274e770ae4cace91ec3f0468cde38676ce1d8f94a1982bedb5f9afd02415bbf0efa5f1daae01ed8b4436de4a5a2479f7a7c63d171b9075bcfa241877882383879d07d58cafdae8f3193e4b45ce0e7dcd098f0cb46950ca25d6d7b959a312b66e1010e895d1e43d7380951a96dc866aff51f03958ede9795a42d3b672491c91107c6bf38b65301913911042be013c89018b498d2b8008b53a81b1dab98ce75cde7ba199072defe5fbf8dc0035524d6121888cb54d8ac4aeb9fbc7a23a45da08fe1870cf284d60382cbc3f85ed8d3cd4bc5e8da013611fa3b06624eea6e9a4b472e012b6f5f7e045b0e4319ab1d3ba17d497bf1111622c49a5e6e1a511b0604b83981d1efca746df8df15a39d67f32fda5d0b9f17a4f4a933d793ae81f42c2137c7893831b02f3993e2f54c94db7ec75842606a9aa289e1dacc8809dbe40b4379ccc5109f895251fdaa7f8e64baba8265dcf9090710ef063d6883024f8e8c597af5dd2ad58dbef63c84dfdb54aabacf77f52129b90c98a6be76b7bb76607c18f38c29952c9e5b6ae2e6f3b59c7265103ad299ef7d280ab3b116db06078bfa3b4fc83088c155113f220abd8278ab24a0b6a412809d48d9d80bcea6c1f4e16a66f98b6ff0cf056d99bd63f66fbb41e524e4f92e22dbf96cc17185333027c728046c5748f40da6a6e64c8fdb8df1234ce8658c28cd6e2cc0a5ba4bbd836e292a8eff93e834d79e1b9855b3d764f292f7c54ee80f4e3eabe06359eda7370398e5155d0050c71ecf27049aa36715b30c1b7a43d0175c7b6421724b2b083435e189a3127e92b5882b71339a7ef047947e287b6c3058083365ab9f0620a053b77604051f825f80669b3baa2b3218ba59208702583bea93f18a790287ddca2e7fbe82d086281700abd6914e4df5796f38bbd5a1216fb789dd94a55e9412280583ced63f477f4f7709ce4019e9dad6868aceb02a1601459e93f656b15178756cda9d782a6eeb379fdcbbd4b31eb1314c839a051a6f8179acad58feb33c3488a60da715b7263479f46a14254616cc2732ee28f926e4c5f561928d9817e49f834a71577d21601b0e2263178ff4b067c1df21ceeb28d60bb24ca61f9defb9081000c8acafbd0ecc7300e32dbf7e8c52662639e486f3c4854c04ece8cb4a0ef26fb97b8c53215de44f63f8360e61ec23450fb099870d098bf9bf177d225aa82b42182adabb53d2f880c9b03a21498c56c2af0ecc964d3468fc5f14d4356793c3c44dd43a83429e58ea51e5b62674b4486525a0e2cddef739483e5159c9220efa9b0749a13892105d895ae709c026727a828b0eaee1f6b66f182908024270406000c7bb9840c0396e1852576418cbbe3e40161d29a541804301b29ff444a858d9c3168c9d320629e166c20b5ad50365c45200f03103ac12d62f884817084c2995f136d6bdba131417aab20e4a68ae8314ae72b61108d89a3e821f14c15941cbbcd939c7a53646c7bfaab4ad6cefcfe8da4efefffec02b52c2385cad634f8b11608cdca510c2e47d737fa785ee927cf8f07750dd325219fb4411002fb082e8760bd4879489a3a2d8135fb7686ab0b8a96a633d29d7951a6015810123a82115f061c0010e504e46f99435b809a55534582aa019773519dda85db9843151f9bce7631b94662e433d726bbae06c6e1f60bb7f3c436a3fa43811a5da0a925ffca6487ce748d4402a8b42aedab7877f40d5fd45cc00abb18db97ea372acd307545cca183ecbe7a9297e765c29bc119749a0499f9c3a5dade010dbc06e3b4892ec8ffa2761be6c8074fb804da63de3f9e9914feebfbb06ba629c87a193a6df4beda7097d23f379f5be6dade792b79e61a5f4fc5004df95c07c2cdca3fed2f7f26bad6dec8051fa5e499aa69947fcb02e90f23b0ebbeeed329713a3dffd4725e7b540375b031c2f2839d05bde442a004ed7cac8d93d89c160f2035c3d06af0567b2158e5fa0df20b4ea5b1ec196443ac6ecf852512f8665c311009c3f428ba520a2b16a18bf5a1076f49bc8b3604b9e7debee2b1697936b0ae0142824f8475c8e99b062c9ef3e1d6351b738444966b4840f8fe78c03f94442e4f24494ce0eb6d8c49c2f56b53d4ac82c734a2d5eb3a325216feef5b5c9f4c44b0d168b32f0d691d8a82bb2d98f5313df9619ecad8238eedfe7aa206256fa36b952cdaaed548bece4c0a7d6fff029c5b165c4074d0486aa739336b6583cd0ba62c20917e19ef7d118936195bca71bd37c32ca12ec861a4626a31e8bf86c87a40857697f4778ef4855dec802f44414f9019ffbbdc18733d4999f0ae561f26f5debcaa14ac5211b5c661f1f233c29aae603e0df3862fc5af0cd30991593f4ec39416f4b09083ca0745c07064c9acb924cb716bcbdd31aeb1714d1839b42c37693f830f09bb23e0d415ac2fd796dacaa276b4272bd7cd52c15de93563046c0b02a39e982d03d74065d17de7f2dfa7bee4d6da88b032ae958369a12595bcbc8a5aa3ddb93de9209f1bb60dc0bdbddaab98ea6610d6c05c891ad5582e9b94dcdb3552f031b0ae69fc48c4c574715ffe6e890a8d623e1222d45b2ac03240f98fdde005e25a38f43c99fe21140facfe2ba817b42777eeb51295c1a8eec5dc16d070f61b62b58ca2a4904152deb76e9937465d596232a2948a9ee36b919571125e4520a16274e11c5f2d5947593eb52804c3b5c801d6c698b85beb33f24e0f1c5c201723d0c7415c8c0f3c98a0d89711f089e6c6377dd7e3f90bc101078a46565d46d1e394cafae32ad1b20275a44aa0e7225ef7574f0f2ae4004eb5d89217b7ec7b17414febf6e4748ae328324d77a5488973592e538fa62067d8586df9d487dedbfc781ac65ff5952134cd730946d7183901a26bf21a828be2384e2b0c1dc8565b6a30a1cec0abda730c0a3c26bbc037560c786772d7bbf17941e15e67fb31fa9290be891f8677f6411bd6b224bd57061263ef083856c9cbc1d310ca43458daf4ed2a85d807ac4003e55ed4f49d6d0136c985132e8da9a099398bd51c860db1b9d06357c16f577efa798f00426d81bbabeef053988721568a9eaa95afb31acad7a8de06c5f10d90697ee1e364293639243447c669f9be4f4b2a83be33b1620ad1a551e34c7baf85b0cff3107c77b6a8d6239171dfa8fce0a878bd139a1419d5705f7160b18733bd8c49a015e827dbb531140fcaa12a94cca75009693007edfb9d1c2b152449c0dc8529bca6421e58b2e31e7064453cdd7de8e7d959c701406c0cd03f8a9dccc21e5e5e39f5d9c06ad90240a44b2d9ff30749c829c20d9cd8d20999333fe2cb4620f8664a4c5fe1007df659d3787752778103dbe45e812fc2939266a8f70a63fbe188307ec79b2ac9fe8373054a4098229249597cda0cd5f31044fe176d25b575a1948990ff6c21b6204f520fd7d504083c39ddc319f60a6d40c09eb18257418271107998925120e988b395a036f42f8b7e729661b8cfdf0fff811903cdfe118aa73af7a2a219c1d1ec131c041ceefd93dc82be0eb230311cc70032e71bdaebb5375cb463b35c1f0bf29e72aadbb829223d50e103c07392c1d10d3c607fbd0db7e95472abc8e03a5dc9956861ca3237c3dd75fa3ecc644a6865652f63224915fbee0e08aa8eb09dabe0eb3cdc5768127fd2f2a15924e7767bd5f7b2aa822a6f59bbb07547fe728fe9e94cbce232b18685e1789df02fcd1d7107be82f6f5e7f12ef17a74e058f1f00aed4e3cb7ec68354ea579200859831b8dbd269a56246804cf9d6fecbb6b611e8660bb2d58331abe646fa4b10fa7b89f1dc5c5951c77f9a7b4a058e146e63e29f47a63d92f69da1c773ed518f297cf6e95fd000ff73481e74e5fd3dc55562beff884cff13705ccb825b77cf748c6958b3e75d00c3336ab4dacedd0244372e50c0c454d38a94f9491b615b89205632f78ef76fe212aed33ba4c692aed1f980fc57b2ef7fca402e1cc0ef75a49cd9df92c3af916865d31dd7051696c94f7292293ca65ca73f9a6a1f14e5664f8e9f44e829c879709880f74f268f19d9276e36fac9a2d823aca9ca62d259704cac128172856fb23886681fb460812c457e388596020114e66aee282f0dbcc6d25fbdc6838253ee8ca3cb54b9d36628f3d41eb6af9629f5ed27dcb513b2d22dc0b52b00c254c3d39c19aedb5b14586bbc54ea825b035c5923069cbf059aae93563779e4bed2ba0ddce3a2452b075cfd99b441ffaf83f46b7841369d99439c711aec3efd64a0181b30fb88486982104b13846525fc87132cd201f4e4948f3e5f86c2982f0312d1ed7c99b71c12af5da2be0bd614f347d1f28662c20e5948388bed461378ad1602a88fca31469175bea8b608dfa3b31b6110c6576188c8751f9600f72073f8c40716390bc14d0be344b8ac1971b7e1f698155a21e48afcf5f817608e74143471987a4a3b3a9f45cb59545214e2bcfcc56a8fc89ba02f8b8c009beb8a04ba392340c8d1734db982fef3b3f887c3b85fb85b848c33e16127fbf015a897225198bd01b744d59a9598837f90e0447f103e1b83f62b7a2c95fa9a7379fc29ff94c2aca436cb796cc038b490aedadbd6e4a7a003e817819708cb378e7913b1533f5744ab22796a6f95c6864a49dc12c260dc1956014335f51ea84024296d80217ad083789170877e04e2071b12ff2c5e13605041acfba96253c463e6b427df16eda6fe2bcb161af2ed99c72909e6437153a4a633304583f10f9609e62669a7f2c8f84abf164f1f97234b526299453dccd1930f6e532ab3f636ec48e1d75163ed1b16a89ff83a8e112fe9c7e64019cc8279aaeb0cc496558b1cb95d5b4b74c5b767338cc58c76e537c7fb607be9d27d73086290843ed4751caf00162a08c342c327fabc44448cf7a81e20ed6b08292baceed0d728165c6a299e01caba5ed54a3963a49990a0e0950d0fafac2e10a4085615dc07108220c75eb60cf001fc00285ed75d804415f50f20439f0c2dfdd6dcecdea95d0a8a8618d802562f616a48e82f761ef0e96a7042cace0f08fdc6f9a27c4ac58d7678fa537ea60060839a6af0c45e57c1c41339a89e19f63ab52b15eea97d4a7a15f2edd37001bf8feff3449b662849d4441897882855b2764734483196990d9ef5e3ef7589e6a94e00a8811871d90b1b784d5bca59663cd0477486476b8ead193501c5062b761c4bb57079d16756bc8866ac1ae1b6c1c358d885bb80f3aa84672eb43a68aec5e1b003ed7925cd2d201cf3acc1501ac099245df859d3de19ece73de2bf6c38e09e4fdf6aec516134919012c575e88a3cb5cd1f47d59d0b33802b2f4769de57dc5424a8120807ac76cf625759dc0a83485994724bb81c1e4f0d92043cc4fd803752975cbf14cd70133e08996741d5757b3ba99f9bed4d77ea58e91da5c28aed608c60358024c465a9ad04046e27199c22e402494ee13658873d350fb23956422d5d812f04dcd98f3e9b8d2bc4c69cdf2112ca9cdcc95d5eac7bcb240c975d8a5a650fc1b0480314b5471495429b68728fa1bd71fa2ab9ddc65c53ee81a34914952878167eaed24f455c81730d4f41ebef9b3614f19b160c9b1bfb95ab6bb00cf461d786ac24e31153d4da49715d814e66eab10035ad257701704314b305f745ac4725a086efca6cbc14c08d25de4084228109ce68e402d5c9a896a708b98839e5a0d12561c1e1603e068f54deadbd6082d179437a22824f458ed212a5ca93714d21a763b537cce97130eff27b89174d9ef18b9284c795a9cb8b33d0840cbfcd92cd34a370ba967089acda6f2b2656e3a6dd4e8ef91ce8f62fdaa58a108f62d7abf4a7aee4b7f04b6f5d6ba9da347ec125066f19d20d3b42dc11e1bf549bc5ef6b363bcc573e91c4fd0582b0a181b7e4dd4fde85d716765592a66deb055d4a8e05608f36e67a1f1acf64e2034dc07a9f7c0a146c0768c421d47d1ed69a3210929e7ec61b990d770bda57af71b1ae98f8dcebdabe235096476014263d05b5aa113069e784097b4d5031c828f39840fc38f0d7a69b51109e0f8c441c7e33ac675aabd62c7e23a662cf55c15bec234356ef6bdaf64a854e75393e97b08fd6ad8f9ba57f79282396a229a1ec68fa906f0b5a6f49c182a94f081d02392cccc1ec755a4d103342caff80fa1898ec62a0171c0790e84ef5f39af825a0db528bdf97d4b2540a5eab0cc9c67002830db4f8c18456d1d79823a56a93f988b9ee943eb3941c889551e63888f4c264a9af31194f72e579b4e66b7cce12f0137b81be33e5b16bafcab0d1f635bda31e4867192aec1dccf6f17dbc2dcf282054e145cfeb5e93949dda5a98222a849dc0563328c3f6ca36a9801094b8e88633dc1eb7527f8178fe08b1c08de287bcf16c8a56906f40c13cb2a73248ade48879ee77c3099823db9a8ad4030ffe9612463b1e9e0a8e53e9b8d905d2b3c8be8ab321aea62e327a7310e24491e6773c66aa92262a940b2fa1bb2c626be2b05346a15d73a32c8947fc1e71c5870bc7a48364b99417b5594641727e5eca9880eb3c568ae4d9c437d1e36fb90b0e4cbb44035b8a602240eca9223661df00508dec3212e0e9f0a529b70cc1041c454d5252e1893edf46af65d7a647baf089ef73e3b6244e1cde6c9eb156086c26de767b123e75b40ceebabc1ba81d287782027c69e5a807e7840c0d692200d236b72061be52ccf89838fbf2eb5dcd7082ca0a130765d9d114727950346c1e0bf198d290b5db1d5132fcb9dc596891bbabdeb0ba45528a529dbcb4f66909179b11742e9feb6cc03208a35a767f02711cb5a02ef1bff0366223d155a65b9a03da55d9dd92b5e56dd242a4e9346c4158a98dcbe55ae41a524177e241ecb402e226d9447b36320ebc1072660f90932f0536e0e75c11bec8340b59c16e6f68a9265a41ac018d0f75b896cc45b883257bfebb5661ac85ee4db40a5aa1258e209540bf4d24bf68a9d80bb64d0d9a6f5a15235f81196e38c11cbc0d90fb3e8053a13a90b3438285eee6bbd741271ca1b733215e941b1d46b9e9cb9b308f1d867a254ac35e6e84cee3cb8d12404c12bbab5de6ceb924c3967ca420b31818ff29539b0c6181818037cb7557844758895337e5da12aab8f21b690c352a9de50e2fbccf5be993b4c05a3a700655926e33139ba042f06003c981c189a56325bb76af9324b469bcb309db3539b5c37f67e7aabe3644bd152f0137199967fdd7c2bc2285b0e60a3913a923e530e267e142c2f6724b4336b7baf2a9217f4417d588296fbe981a565fc9d591cf85fa728cc4d0fecc9c537bc3d5d8799548be41718feb39e28f21aecf3063b7e3dd562bf4aeaf5336651da86a7b02ed4b760c6033fae903045dd6bb7621d3963f3843d6584c24a4c6afac14454362949a3a05d137f91129e3d12cbb6d61dd3e491486c2234b2d8e9d0ffb99d9420fe88a8344fb6ac71df9e8660e0ae8fe3efb9c4ec3d1076b988bd9cd57bf03ec6973dfe987b0e21a1ef1433c00d17c6b1dbaffb1213ed87e49b2ee04e6d9aa9e55b8ff12b09d24ada6168b550cc38641829bee8f0da276688e82a91742af49d39123b65c08d7d29206b0c907d41d8557cb06fc5056f7a2e149ada448818e29e95a69be5a79753d3e1c310c700b69e95f4f9e0f107d4f742e742b69a8a3b7bf3cc5611646ef8cd74ea514a30ce08d980c88747609bc8bdd5663e1f6992444daf2ce3a435a5476955352ebcc843f8b677510cd9f8fe7c86b2bbe5daea3fe845b5b5ca0fc80e0e857559f9b4a7acf740bad3f73c0c19def9a165793fd44898e040406a800a58cab0d09469452e655b417759b3c746abb48461384ac95b41973c41a034620bc004dc4ddc8bb60278baf7e0374cb893a2deb86c1479674ffc41e33b8d2775fb637ca6bdaf22a807a33b9a0084a45bb631494c8ccb3e9b9d641812f35e1c1411623b02f639f4dc94cc3adb094a99f7175fac687d1a8f2b1c54f27a46ca8fcef8a88b997a84253bea8144c5552b7a43eb4905b15650f06d4ed12a8ab8fa2264c9ec840e1c4a8481b24de699da72e160ae9157cecc5fbb5e8f6ae6d17ae8488649bf6fa8114f0ce9604bff4dcd5d8b33d984d1d87dba02b09396a561177c278061f9092e857789a2b00282b8265c105cc463bfa67d2fe7cec0a5867bc6bf18dfe99a64aeb0cd41f784a96497244cb3339960a61d0f5065f8632b90b7dae69bae6268cc299d4fa3e3414150c5d39a9e9b8b0087a8af49801beae2e92f69b4504b339bc25850cc521bc2f8700fbba9d7935c6a515f8ef27d9f6d6028a55f08bf1b736c4c40610bb9b149b63533c27ab8cf2d821c6dd33bad3d0460458ad6ca024e2b06b458cc23e5cf041e46c4dcf9954caf885f1b9e7111f94b9a8873318837c53321d54fa5395e0f8d4e8fbd11a5701e370e486cec7477c69f68148ea40aec6aa1e09aa3083b09fdac2967129f02f92f582ba2696a958c42ee394caf0139945dfc083d4ca900ab58442095bc30dd483b926c9337192e1c09bd0e8e386389e896e803b5df5c64f662a4a43d251ac83d578b92c1a863b5b3d23e2f6b705b8bcf05de701e9f1c6f9e021211965f654226fcd5cadcbb393a28edfae34252c74ca4e4be46181116e2f9f53b4ff77f1cc108c0d6919fda26743573b0f82f1671a2ca0fb960ccd64ddc15c152b8232527f6b60311afe55cc130b01c31b85f30b585f69410c9b17e77c08ac005f16873cf3ae6d00706da08da07525eba672e8b6860e58488860148ffdca0112cdd9519db09f83a3935044d8216cc55c3d1603bed2f14735413e5a43438937e9ecfe1833bf28eb4d20979308826593f12eca48ad6a0271a821bd2dc21735330daf9a9be4a5a57606413755f0d1f8e9b11e9b7fe47ef0c252f83d5ad0c7f05434c582ff5d90ef192d8148632e437bece15a40546829b4b11aad6de0a2ea67b61405a2d88242c357bad8ca2cc388ce18acdb974ef3b4bdc17f3e9e76d55b2095661f13c2b94387663c0af76e8f45e79451d865e6dc8ec8ef0a3ce8441a46bad96628d2b60d614cb5523bc2fed4d111ab1a1d41ac7fe45d3412591458733a3c7d23b65cbd1fedcd0bb40d6b4a02ba891c71a147143d50028fabb05bf1d906bb5980daccc401eadb35915221660647c3ae8fa23928d7758b7ec530aed51462ee49bb8ee672dc25e78ee2a08474bd8621cf28d022abd4ba9fdc137d0fb14d867c9eae2f2fbb554eeccc9685dae37b5e93d73ff667b14f09b4b435b2aa294162a3078c8d7097d4153bb1dc17cfa65e575af652b341f11e2d6fd954d03745937c35a7f363e650990a447a15f39619f257a5ccb9a19160edb73540f58f4b06461bf96ea3e28d49c38549adfb74682d60c1fdcde7c05e363bc0d6a5458c96ec62b4e90ef8460483f33725c047c35eaadb0849461880238bd6bb12587d0fab39ee58e51eb0eeff26342354afe03079a6091de7b3896e8e0f42bb10798af7a2d388d581a98a5bc42c35fe986d971da53ef0be7a81128a97c9615d0b1b99403a6109b1c0b12fb356bdcaac5cc30152ad4ff1739e56d8c508171abc20eae9c17dbf36d72bda3c945439beded8c631beee7193077006c6d339e35d09c407619d796daec5cea3b1d1af56174befa69a123af057550a1f488c0c9bae4dce3726ab727e83a174cfc5fdc0b3456cc06f3eebdeba42526676a14aeeb1807be8f25e91b906157d7d01dda5be09f893dc066a554f865cbdb16bf37f420bfccbb6db6274a82383c6cc0c2663bd200108c7344862f4690e92d7c8f00aecd31d8c46172a1e64af0e72fe9f3185a57a71e814ad5f0f0d33f7db151018ff3cf7144c6ca1b5654757449ea57d9c165b0386105717498d620839c39f85b1d01228153bbf43bfe1b51ba9718f0108fe1c0a09aa23f9c3d83326a65d280bc6843c6dc4a3aff32e86443923dee6e21340fee839a99425694bf86d3f27490e877f87981767acb3c407200097ac2108093e6069b0c65fc1c8a4622d8f3553ab77213a68b8a65a53b2ddccd69111dfba6c35ad64f6bccc50c664f65cf77bb85edaee120162497022348d864873679d7c6991f3ae7d445e467dbd9dcb45927c7dbe358b5c31449ecfe0d217f7913e83497fe781e4d22554577eb1ad0b4162bbb27f8a32cc61b50d4822e493bb0749448100c30102a10e50ad2c2b443654187f34322280292a444e6a4f5e38a8809d0f470cf721e29b46be30e59018c863b9e33826395679098ac5285882fcd6b6e90d0e3b1cf3b47cab42aaf44111c25885dcf068e4311efc18606a885415c9befd0ce3144f427825a8937a257d529819a237434fd7b7593e567778962b9a195e0b489f86417d63e2987306850dc0b81511acb5b605d5831861dd6685b79b09fcd3286e7a4124989648dec074f41cdefc3b6e6ba2037b3956ba12766682f2663696e53680b2ad68ef66a182d721e95d4055372b9b6f0cb20a5e0a93a9fdc03e8ea9d90c36e5c1de148378cc8441a175f7fa2b132c8739abd90976904982db0164cbb92ad3d2a8311ef7d7a02df5096383aa043cfdadfa0decbefd8b1aa7be45cb49a9b43228dd31f45018d17bdbaa7baee1d7fb6a403536d288a72aa4a277ccc6c24cc44ec1ee699e7ed54bf465bcbf458b6b5abdcf988adbbe7e7c0781b7e277908ff99487d74ddad48ad6b0f1fa8b4084ae851ef522b40ddff9c43f01b1d2a7247ef8706f58e397a444afa382ffd05cfa4a6c3d3d3e089d9e9430b8666ea02c5e458deb0c974441e73008e08f45f678334fde926d4bfa5c3e981e392949b415e67eeed162ec6e9c23a1767f33f74b7518a1868f7988f142417575a151096074d80a48b25014be6e60344fac207ef408a087a7f76c08de33b718128de5a81cdd11a3428eec14926c49d82c32a9198c5d237e62ef6ab5ff73d6e746cb6e5dd22873f7e6cfdd19a9c3175975da1abd0f50319c20b78fc1134084460c4aea6e687913fe590d1af85329a8a8c48aecfbe909287b1c46efe93b820c2da46d2d77c6c39ef309a2248c219771cf8a138e448ec2a5efcb89f01044d6bf12da439636671931b1cd53eab02d753ce8604850a5999f4bd05547d5cb57e1081290865be4854ad50098b2c8214c04a39b7ef77d64fd9c83ceca301058494a1722bda91dbcb1ef063588686c82c4de671fb2e2b093e40ec616f5e640423f96bd3fab2b15f9dbee2000294b473e099de8447d0eb5309ea2af755c6023379bf91c3151593bfecd2c0cb34a8a97754f398b8b0a4bbd231c0bf30bbffa1b0c908dcf5a4696a517d7f144fd8ef82ec784225466c9b15f57c69449cb13652fe15378ac979f895e06751ab406b440662ef70db2132facc6ffbe80542c9059bbac35650ebd7b222d98effb024a8f0eaa81f52dbe2a46282a76159e1c2bcf1a6cdf3511bf8967aabab2e6ceba80b5cf16aae7f813c02d7b6890bd403533c24ab3841425c05bd644f4372934c403d37ce0cabc570eebd8c4db011860c4212206ba48589d8dcb418827efa7f311d2076566114f665f5cbc00fa1085af326100154a905e6fc322015ebb4d4e0529c7a703834e7eb6485dbb687dbe2249e701a27bcf42b49d7e92ec7e7cac3c53d4f82e89ddd5273f96d4ae5264923e4c91c049e46d16dde1ff21466b22012f1359b3d69000d99dab16ba700c752888dd6d8db2304ea5aa4994a52aaed08e5a6682f390e6154ad1bcba83d5688e90f8d41da8a872d9c077a97247a435b358773246143daa68098731c5d8137714b22e2454a9e8c27bf21a4680e65f1474134a99c1242c5b66e81dcfd3d2f451213f6b0897d09ee24f6b4d5bb0913467002d682a11170fb622f36b00406181636404ef7748afbfed6e0e3433125871840ab13386f79c6f3080600cd35bb9468eceddc7d8862506245c511ec4951a96193b4714357307cd78b18c99d4663fb0747c57cf23cff60c8149f56544503002668dbc16f59f2d7d01928626f95b92a35ad016c0a075cba16a5ef86e24ca79f634d3a9e41159c39747a101be661771895b37f7bb58b171488000035e427f5b24bbf7dfbb69d13685029e18a0ba5222d2994a44521865221ca64cc482e3911c8f2fb71184964c22cb39d80e638253fee90ecc7a0ba82215e32f395ed11b2dd140f393e53040ceac2a926feb8311a00f26777ec2df32f3670e486c421167a83381934a6d17848171a72f3feff6c20b339bf3764e2cbe20d2a801b3da4aae68e4994523288bd17f29113b1f26ea448002e71e267b94b2739583a05d7fc32e4c33d1121d2e10d2dd344af1e97602dd85f7215cc3132602c5540eb16d8738bf8b3bc80ebe629f16a887ffab31b03d06a7d0c05d876aed78e7a344c7058f51034e099ee11ad5c3ac1fba0e2300978701e420143426046c26309d6905509ccd0eb99257c728ab8aa077ec3656ac00b6707252557dd9fb5b4684d6cffe08fd1c3c7f5df976125d71fef7918826dc7f94daac9dac60841e078217407afaed550acf9acd21a8621087b5686134d04bffb6ee1a3979dd1fd0080b2c0c4d84af73d03f23d1538c82d064627e329d4b3b33c1763b2a8cc4bd944d4ae0921cdf0245382bd5d3b1c3b18bac82cb3c12fb9980eab3b4c4c928597dd39ad744586c2330d7daa3a51eece85c80a38db0c4d47f71d1d24474b33909a6d13d33944ee01303536e3d3e0580077c71d72ee432b3170355bd10808b4ede9999bd2871f99e38bb5c818a2a2959442d12cd031984288b41aa1474d06ea129a55a5dace3b6319195f370d31d9a3099e123e2be5b4ba7e123863f99615a26b9b128f7511dc4f8591c8db1142bf5bbc325848201de112bfadd85365c70ce7d2c96ecd8334c2c6efd6e3543fd153434e9815a138c1243d61432069b95d1372611802edee333960c0ad5e301285d1a02c19cf4255aa48f20ccbf0b7386f0221761e3463f442ce99a6d9ea3ded47bb8e9d246b5bf0a86eb161b233ebbe35414cc6cc56f6f912b47027e02caef7cc296df0dd66c0c3c83ba075149a27840610100fbb6e45273e6b6fef9a5f5158bca3a796b7c2d1ca67d021db0d13f13f5e07825aa682520db76db087efdf9ffb36f05686f3da6cf9ad6fd4689fcabe50ca238777b19f973219e5870eaad83824cbd7ef103ce2f584341e7f7838402d5d572cef013f2a6af1b4b52cca8d062d4d87509d2dec2857ce2653b5847a3eab69aa0d0daa24783982f44934cd93c1d56a2746f95859f493ca11f0e3f2cfa36e72315c7f1cfb46d40bd5ed9075b87814f1ba4da58936c95be06dcb2f1c3d547431da185f6d9615057215424b1b562642d47248563259222613ff2bf6da4d1e1dd2073dd0fd4834c4d6eba97da2f30115dbf022107afece16ca59efeded5fc8e981159c98c4f4ca87c1b04358e4c50d9469b2ebf56e15d2d2fc31c34213dfc4e2c26b516c3daa0a4f9ad8e5a5c8b4a9e951e35d3ed9c93cbe743c8ab1a773c80e5ce7142a20a88a3fcb4789d6ef10bce4071263b815777f61adca04903c39c886cdd3cf7c536c81ba01b9e39e2eea62d6c85ad44233fe821c5d9839a321bdbb0c6da9b40308e7dbb65ad02d9a64c29df75d5e9dd2c75615da99d7f6a41564d1c41d4a6ee973c68dfb255659b500f4c6b31961e60c4be5903cfedfaf316045eea71061fb05685456e8edaf4ae6bdce5e2bfd276d6096229136e53f3d003c89aa71150557b39b1d0607851f268a42e83a700117b927966166688129284d107f9a8c54911232e573ede366ad571171ba30952a23cc2c6aa86fa167c8c7917cd6e9441a50b3efce0c3badf71bf17460bf019b4e658efd9da783b58b0fa85213adb7f294795bf6fe87614a6e59656c061ab81525528b223f063c15866c1639126c0ce60424401591fa2718e3bbd620b8ec0c1a3506cdcd800a017dd9f5631cca001103f42a98ded3ff7b635544983da1cc032b8b2ff8aeae8f950aed424472c6922a141b004033ae6a66e80d3a560f3b25ca02c4395f739ee76b65d5f5dc1bd76f449fd6d31a71cd8d27500fe35496e7c90d543d1641a5bac190cea8933429f83d10d86c8b297ee817a4f625667ad0a4df32ae5f7d7e42f0fc388ac1c83a7a55ab5377a34e74335305145308f017baa3f01e0d7da9f2a3c4c645194612a7939ffc06d4e6b633204dfece4b7feff7a3302d7067d57f0dc2f1c92d22f7371f21387146649d900e79430e61201ea26f16190e7b23a084cda3ef38710568716e1828c30bc6ab5497a0fed01fc18f9673bca9c423ec9d12662062c835eb1d295a61b86b0699bb7696158a55077e55edba4606bbad29cb3dad7d61ac94c7b4b8d68218c25766c0162021720a8711dad58e3137ec5c787e71e39824a626e6b5bc45b44767752935bfaffb5ff2041c77d7350daaea85dc0d5b3e559a1f595be77cf275035c57050cd282c2289ac3ecd780e13c9634237d14452ff5980f1c8cd59129ec947b7bcfc14c833a69404a4fefb810c3c90d49cf4d7a20fb057912857511917c0076d9b114921823166dcb73cbdc6a9793162531fe61d22b95a7f51d7bcf4c16ce15c57c0c080974d1273551ea4b3a20f32627fb02630eb71ad75c0caa82a952eadfb7432025c3e1eaa235baf75936ab341448a3639a22e1d7478307b7609befc96bff395b134ed46e84c444311e7e59b21b858e73c6a189187eb0c587732c1dfd1424b07a64825a2e849ec95f052602e40d3db65a74bac04d965d9dbe1a7d69b9a713596d0b9109589d303cfd13734c518cb136cf0b745780824c063abe94da2030f8318648862b5e8ed633947c9c413f6494473566420ebc0b2851f8ca80d4849867d36ab36921bca6577421e43f5bcbfe9426a4584baee3e862df16efddc897c74923d583534587178b592c1d5808c9a340fa8f6455a0de05d79901244ba71234e5a8c54bb55978e16760702e67090975c35c281c1f91af2226f13ac16c8551672e342c68841dc1ad687073233d4c43c57706b0b21375371cc4d1c070d0564babe6b5fca49ff301fc9e834b0aada02c5e56244e30ce6bb97d0f999036ab8cae735cba4b7cfbfe695c454ca258ce2168121d214fd00a51e7c2ea987c6b50d8337f9505710b001a12c7af0da7537d692e74e93f984b364b26771cd2c5f586a43b03951c7a3c074a9b113b38f3b1c09cf367a9f0945eb4e641a8c1a7c3d91d2bbaa0a3088a6badf5b3f71e4c768408a3073dc809c123e01d1c325669c57ee0d35485e395ee628e60c60b5a4549c7729c7e7ffde6cd19dff46669b3c3e99be0282ab2b1126c352a98c262e608190926434e8ee7fedaa0507d6e72bc2314c5e5743591693ce3f4c128c19887e0ad31fb8b653771b2b54abd47e03d135baf6db7feecce315f493cce2f0c2364b90612c2e1123230b26caf1a1e76a20bf05b775b001329be18ebf5341db6e1fec7ded1911594c16711c6edc8822b9927e9cfeb10e16b64bf250e255e82404010108c5e79c0e9208a22c85886b9eb653cb14a3db395401e0be09ed8e63051b761c0127d8f741379f0add898ebc84370fd77c1ecf153a20a1055f3c353f558116e9d464869e05398a5362741780eea0a2e25330a2c97836a46adede1015a60a3450d62a5493db240d0e9074ceb3d61a08017981db12c3268eed50dd489e3ed72b49cd2ff8915689f1a4c43c5a12544eb17b03681696a7280c39f19b4f67d111000fd343fc8c63c290b694f3c1fbe9b54aaccc1043dd86910a603464d4573ceb4b1f3ce15146e0c2b3baa9cd910b42f56204286cd931b834d2b43373a29b6fa5eb80d092b32f53983ea42e744c3adec58303a2e79b29954c1ea11c17be2c3c2b4577fca347e2e3ae94860b77d092767a0d7ac56a40d88552ac658d19ed00f31bc1c1b9905530746242587a3a9fd8015f48312294e9494d88fa27620a22f81bc294197384804db688b3c1bff37854eabb9110808715006ad7a9c8e4aae3cbb66f10dc454800692265c7f449d6312be4222b5e3e2628b6deb2f68131b3145b81c6b95434d698715eb1226459cac362b2af7445f630f2a93ec480cc3b81bfa24bc6f177c2e60174f4a74d8c445e5151b4499a03d40171277243d06dbc5d1d064c4e327d158cec2c5cc2880d3e4389849ac5663b94ca976b991d68fb600651e62534aee4244a8044d87015611e28ae08211b144fa8662ecc0ae7d05e42302492884c645b76bacc07d3f141b56d9782b6d0d47ce7865cdd603c305bbbea7fcafcec2efbc4c0a8a8145cc0a2aea91a8717ca74b0e789c3e6347100126175a3b3962cca3ab08c7d3e13c051ed3f77bc39e0eb6781b7c0468c020274f56052787cad6b00b6309838122e651aa6082fa78f5f468ad81c27cc1fba672b8b5e51da18de77271fd3f276a31a2735d61b50d978684df9b33ab023e83b36c35223761199c003113ea1e456369640814952ea99c279c9373721cb49491741a612bdd113225c66c05fad8d01e00902bb56690da46344ced576d81e5322509537fea6c36048a7a0c2447ef63679f23ba7b8233bb02e00489150a6f3b3dbecba976c05479ea8b949d4865a1910f978bf82e3da0c2486a14a3aa69d8d86188783e7bcfb26c621f07f35cf1480e540cf0f63a1a2c56db2fff45bd8511588b4aece27319d97b0e429e5aa5d3ee7fe13d5c2ff69d54289805a1612a30c35e6ac093c1237e25bb5627296d052acb2c9e1ceb04c2562dbbdb544dc79ccb13249ea9dd6652117e67bc88c530e0241a293e0577cf91975c0cd3159366eea876346c3c730482448f43c9c085ba5ee3e4487a0e3481ef8acef9ecf26c21074c2669619c975dac97033d0e8f41156e2dc136c7111a653b210f7aaec3a00eb8d4f768e595c087163366704bf9da2d901c2e59d011d7247362edba989a0c0fee103ee00a9a7979d5de433565c2977d641ef2b53c8679bfa79ad2f7e93910137945c7dacb1691d3a504ebe826d6568cd18dbd4b09a4393aa5eef59da91aa777518664094a302d7def6d91eae00068861a6a4e0dadb30cccc2b6921121fc8c4af60febc7dd2c6e435ec19c446a6deef9c5000a2464c6ce96c0ee46dc9c7cdb05464e2ce575a19496753ecd83987b3c93f51919962b3195e33585c8c4df5389ce16b26a0c210fb9cc004569f456689c09d28daba2bf045168269b2d9da4cbe6f6a47573b14130adac730623ea4d19b05080c5f665e8173a1a310cdcba25fc66e7b84c7082611a2848bde9a8285162b82033fa96ccc8dadf3413feb59a44d235a4594eb0d26675684592f6f2028c9f2ba5e66810aad6c25ec8408cd7a2a981e215d525938d5aeb6b5b3b390e2faa109d16935e9cc44e818494830eda4f2aadc7819cc94b2afc2745ca9b3e105e4e8ac29e8ff1aaa16be53bbbc1e94d0ce4b68c388b88adba45ebcddf65d30ab90a7d89151d400772300446a21523aac9cf318f7ad6553d49cc61e494ffbaa46bdc42a249386ced8b53d2fc537222340333fb5e16b23defe96b0aa20110602acfb6b42e1886d89c33e8d33818c7028f41ed034d356dbe8f77db12c2ba6d55b6f2fb0ec2ad868e61e1a9abea62e7e9ed55923a5420baecbee8be368087c1cc8714b93e1124c5666d63952dca5f4657f249baddc6af4f5b8e740979505c15a236815524c0e973b553146ce727bcdfe149d499459e8869021ecaa96c09d0767cc2142792e8ef683885b39139424cee3205fe62bc6f0aa2c4c73a0ec3fe6b6df201a4b743af57ddfe377fd59268a14b1f7799f126adfc03095638fefe06716c10b5258e67bef3d268070d14916d1d7c66e7eed9cd7d7a64edbec588494aac36b1eab42e2c3bcfaa6e09174e4f87307b38e9db98fbecabb42db94bf635f1832de016132fec5c5f40fef4e56d4bea65ccb7c04ebc47404c6cd995ef6a54adb43e4af6793c798513c10c490cfbe88c68e0c4f127e9263cd1a92ccf2693313a061c908ed68b503527c96c0d94bbc689fc60f12a529f3f672616891b5dcc6f489033a571b8e88f589c6383f546adca452bbfd3d3527a4fdf14fed1c175169559964f8ac27aa2257fa5644f32e72175cde91fd69fc6132aeb8a14b831ba2da7deaf159442509f34ac8b84422a2c122176238c235549e07103d30537197c5bd55d928f52ca147aac94c7eec846cf6985239310c6a5c17200d2422f6b724858ad113c50adfacb1c6709d05229ca8ae630c4a585729919ff50c7362ad0620e94e1996f04ea2713a6761fef95c83d4b7cbf7c4d26a4721e10715c8423366befc4f01a2349da7a1fec9215640023e1519a57b988c60fe4c11dce5e99f12922385b5743ad71d14123b469f7409e0fe8f957942412ab48e4a9c1d6f381861083afc932b710ff069cff1e470a96abc4d2271a9b23ff22a585c4abf20a824574d2eedfb5fa1c3a56e3cc826fd7cf0f9f9094a74a083ebeda3b95641e78b72428a89fc7785043afddc3421a690066d27452ff9aeff9e4ca57d56509acd34a9160ac70c1156a2682b30e6904100ac1365e107bed84b6c0d7feb747822ca2fcf3efcc48f43972ae5c2261d01a24e62301b37069e3afa387c0384643eef2fe0b9e239b4ab44c68869e30ed057bf7859c08b8b9ff420a0a6d6b2f1996b18ac003da9d0cf18acdd44a5e6f08c2579a124a1fef977fb2efbf435ca65fbf069abf4691649eeb72f02d7c12976a1daeaf00f0b30d0c5dc084fb4553d8b28056db895b51dce5194d1d676c7dc46566b4152ad6d5c513ccf8fe19277da874d71e58cae2a3fe25a3218e478744bdb2fd7cbd4334fe8f29667ff9a61eec9456eb24b0fc25d808b22e7f6d6849d9adacc4d6c8fbc89dbaf02c06a61f783e8eadb1ea39eba30e5040dac0ec555e13ed8dfe590c008c0745a83b7b32d9a46f9773bdbe2a95fb96a8d5d2edea94015512393708f7b99f04ac04c31c4c2a4f51aa51ac3844930d3766cd8079ad56d7de2fcf61a2b1c84594b6b91c58bd37380d2e4abbfd10c82cfc6731811eb93e253d26d86db58fb9eec2ff3675e951321b7ac64d428f5985d6421b6d3618d159e379893543bd88946de334823e3af6f525c4972dd56f1f4b658c04ca5b7b3108eb379742d2c52a342362124968efb18e627671b6114e9de5c89a3584190a9a547612c8bb2ef7a8424757d1abd2bb3fb70a537d44b1cb1e666475e93f6b443677fe669351e8830fc56622092e0460e9c7b0345e45513abed7763655d44dbe0da934233a353b438eb70aa291739753fec79b17b7af67a5b2e978f6d42aaaab0d794bdf8338c6dd82bd2440a4a07b9a7e5cd4657c34130149c428664607c8eac8560b2faf9ae910c8aec63a623d93d9266a7dafb11d5067c0f40f2976a8582afa64924fb6e3b5e38baf2b80c496f4e3e9f7d8258fd1fa4d817ac9910835181b7b31afc0af2233d1db89a80b13cf28be3c6db99f65e7469e3fa7a5c451682f6fb7e74e5a0f7a4e8e2a63b477bf9d7f9c1a8eece86fed094c97a443a418d8b93ce92db44a6ddb71101a9effafd61f1e4a5ecb6b76b76388cb58d782c268256737396cd41c7f5981938282ba7eba85888307134284465c8dd257a9294e188e36a635c7bf9d08c10d26355f368084edb0111d6337755943ac840ae3a1f64b465b69e87891ce9c340ca183960fac0f3fd697e5ae11f28746c60f5f96622bad9f2547491087b6ea2186f75d66070d519ab8fc92f30ce1560fa3ce69c77d32f20ddffbc1121dffa66506037f688edf92431ab869689610a99239491bfcee6822f1bdb50be68d3a92d94b62683f371069700c9339a9f243c28c41e70e6a2d2bbb9cc2f96b52e889429189086eca5539f072669870c7c7f1831217df0105c59d558aa8c805e216bd97a978f67fd225931e7af767f4d922edb2e2ff0a651ab8eb2028675473cb13be984f8908f35511717c9e8d1e0bfb5861afbf94ffb06c94ae3e179a87ac2c56b6cb248d7045dcaf1fef53908051193d597c25d72fca44255029c166a51a2d3e772f6d5cd0e08225c3fe6569d01ef7c00c93fb9867e21f7d5341501a297247a44517fcffc8ef3ec27fff0cbd1423dcaadbe8d80549712271e7d668cfa11f694184bd0dfea86834a37fc0247b37a07f83982e884baa6627d2535068b5798b49fcc2462bed110590b26a4ca37e8a6a5438c8b6b0694b6e49b564778af8402aeedc72f554282223cd98ad21ea5261d33f78a20ef408a9310e6500ed6116c0ed32c8aa558becc934466061589791203e17651d9c0d0556e948b98b95664149306ee82e3662a5758bc79a6948f8ad90d0bdb843cd2f1f211cd426147478ef968b628cfeca24c483b9baec9069261d2aa5fe35443d67318af3d4135ad6781d2f94558eb5ed60ed21e0c52ad871871301f1daa6c4968b00b5d3ce97002287de9a1d10f9104a20a0f82f0c54f6268c70a0dc0716f73fbc75b5c9162671dc2a4052099ed2278fc9b147837089afc35f2efa973321b712f973494c1d6629995a8cd475c42f3b4034a57432c1b21a372b83a58602fb132c3edc154df331e580972a88923dcb73604123331855d4b669569739b6726609ed87e666f48f5e171359e60b8531621f6f76ef349023bfbe57b96b2a0a334c5af08469bb750bbf56424ba53e9fa006b2a212c0cb58b4f3abcb9c5c345ddfafd92f1a9d4242d3ed849eb0347fd64b2ea68b13bbb3e7bd98eaf03e0f539b2a5cd2aff144a53d39beb3004bfd54dd92a4ef71edd02e1f92e496f21435b9afe2406b058f79fd95626c16a9d483edfe2030233767ba2911fb73bdd535995af3f65088f73967d3896c7f23d31d518a292a2a0918a24fea0260d455aa5108ccb8ce48f28d7198d255eb33ac5be87cede16f3f1fc0aaaecb7dfc14ca53cb8a1826e0bf5d2dcd9c397e98cdf8711a8b78155a09995fdfd909248b779fa92874b15bad5824eaf650535afa1f72c127bb87489958834a4111bde5548004fb2b2c907a89858db4fbdf5504474baf96b3f81cb1da6facfd2673e74ac735cce461215dfd358372661f306d89f90a6018fad487662ac08a48cbd52ce3e726804092bab24accfce86e0065cddff1789c532cdfc535ee8b486ef845dfd8598e68c08086125888189334e60b64c5acdf117abcefb7f48626eb797faa96194221d98886b8a2948308d0ae6e4fc6926791a32194335d7e99f782595088c3fd2ac255d7ba820fa7f97361b63736c6ec9092e58ec815c756ccd4ad9cdf271213ef314fe2139b8c2ab8ab301a88f83d649fd6d5317d48f0fd6c13833ec0063b9a3d2122c1c0c73927e4e9b82e616ea41cd275ef6edc513ac495034c6453a9136b2a64167fa7e1208c5b79f085405698d84b31eaa2e9f35f2ae700ac2fe0c60d866eeec321ec709636fbfac26e11faa83c830fca5f8516938b7a198afa14dcc4cb1320f27a97cd2864c494241942d35ae298a5070b12094e51db52088fd06df52138b691f4125d7696189f306778d5f69eb378d888f76c76378c0ba211c98816826732584b4e36ccd712b54948a2c9d0a6923e4a3dd6d939bfdd15a29d576028e002ea5b2f5da4718a2a1b6c936871bede6f97c01f6f882aa959b00b322c9be72b4119f283043a31d11682af482eba698d382b92dda710bfddb41d3e5a0a5a6110d58ea595f03c46f604985645c7fb00c7a0e268cedb855e2a83c44bcc1de0445a82888d5fa07ca27cdc529b8a522e5d0869edb4f8f0f0bc5bc66b18e785c9b805085ac4866579c3d353ef3aef1c493b17d194c4c93c11971091f84eb2cf5e12b5edc3933738321043cdad85e25e559c628d18c884f015a4e31e83371aec50d68a52e82d8f7ffd5a30597805ed201fd2a268d231af0360cfe7ee77b8ebc801e8f3d9069088cc620740d39a9ec66c3d55de44ba3311f0c0c3d997f836e650adaeaad4c0d636222d9af3ac383b39841043044ae7a6ebc21ac4727fc58806776d48ea6115462ffcc47aa27d9f7615923ffbfbf266bd7e348454859bd16abe15f360d8f1baa9954447b9f72d3a342b2bdcf052044ae1e5ca403c011a1bb2164a1115e02afc985ed3d48596723fb5a905fc7394864f02b88341d5980da87865c7f415407dd24cead9fdb014799b763653b404e2b4719ad164426e7523473deaae54481c7183c25ca6852fe34897033d11afeda232f86d8dfce04cc22b0803b64fac10ae0cc2d49fa13651dc972101d11a52f732375a7c4d73ff8cd88e7e85546fc9720819ab37bf0379bdb37eeb433b8b5962f6e73d8a355b766944d2b7d1c9c4b444b17f3f6d80001949d5dda926244af2a41de1930a02375476c37954211ff04a3f91dcb362ba78f5d001cead8ed8f75e7666b723d91cf90d8cd470ca123fd776b80410c4f309f6c110df84ee160ecba8dad3b7557e9edb303475af673d0275df206ce474e7823abafde1540a16655fc0cd0211728ecc972ab0d242fb0717763d291d58b647fb5aad98d9f9a95037c128954f54eea2bdf81ae066f8538216edd0d78d2c218e924dfc631cce150f3ce0d9aa4634abb68c2d4be2554e80025f300fa03d9581e6b0df005bd6d5d8e010981f4ebde5e8053f3ef0c326278c777a9c3f5dcfbe3edf76c8bd7a6bb05d9f2ae10f46eb7e2311100135927db154942055d90b8739a5df17314956243afa91112a01d7283a2942cc394db810973806efadbb63d6b9003e91ccad622ee6d41a91ad659445fc3f44bba9b5f48646ec48782b14936d02f02cbb3397f70ee2d9dc0bdc23be46bbdcee4ec0f3c064fbc5940b197315e7b11376e9fbf5922c1d6b927afa24e61e6e4b59d5868644612bfd231a8d673089050996e1839aa9c7a1ca9f0f01295c7dec2cab7654ff4243bd6575d22aacf0517ca09c5748c85273a99db50232e370f8a3163508e267ab5866ad6452f85a8487c235c08aeb7e5c72d92d57b70ada96d249046a14634a1ff27e1741a1c96a7a932890b544f115fd355527dc7caf3111dfa478bff6630637a73790ac382596002ceb8fa0c6188f4f011527be1d880410b0751c94bb00f577c16eeff0f5738939610c7ed38fa77078e879480d2a8f6715212161cca47675deaae401c75132766f1edd2709fa7fcb8be1284e40a4996ff4d13d9eba4fe3b3a4fde1b48f5477c4f0124617a835e53f9ff27e646039029ff77afd80fcd81851c97d4561a06a0e021775943338c7766847598f329a6a0f45c42c6ef99621c5af1e96ffe70d40f3a0b80a5e083faf7e04fd4f0b08f568acebde7b0572b891635e0cd1ee98b53ba15f24c5edf152aaab9700eae722896f5703b20e011a4f2738ccf969d4f5694d762b925a8b93a1d57a8a91c41419bd23c62d9a28c48b3ff13746079354f17d6815fec59bd07099116240335a79d0ba74f6f7c1998326b2225188c849f3af89ade934f763ee2e9ca6bbddc81c3a1510840df3b24d1624d6354ed10318418e4c1d12420a91c76c68bdf46baf1ee459618524ab4de9a41296e791e49915248a4bc9c2454f8223be9a11743c36276b25cf4faac3d74d2171f63e4dcae9d48098e24c9904ce446b64b4339225f523537526700f85b66e391e04a8756333586cf419be957ac7e5ec6e16669427189ca21ca34fcf70cdc7c2a8f31c94a6e05b60673f0ca6395cad71185936e064dfa746a037a7c567407ce27128d35a87c36acdf996373ce02a04fe71b19e7d45e88d1f4450b8d25d98021029ecf0dfc41dc352dd5377ce488ea2721b4a66cf1ec55189d50a972667f0ee4cb3504a7711a0cb5d4c4908780bb341dfb767b002e6ec7ac289e10dde285c59a054e82916229d798134f058808f5f9c6116e895a676c30d5c41731874bf0c93c1201af554aee52231471e887cfdc18f317dfb908fd2cade1cc5e81cacaa0a457fdd8968a42b30b9d934434bcc61db27c386fe8bc7c00ea36c56965b9f96c0dee97879a67ea3e73a216b2f568cc8ac7732b03141376fb6cea78e03eba834939cc38aa3a0c84bffe6739716b79589e0f6122284b96baeb02452b5b76c8ffe4200943a10297755e8595a68facb63959a281d9f44d16f4cbfcbfbb70218544205d49c29e0df3e302621b9fdd8efcb1a741fd46d30dc6de233d602577b616b49b709ecdb3954cdf9032a59346b0239320d58ffa20d2e013d6b0ef4f8a41264e6af851ee7f46fe5b62ec9f2df684edc0555d8cc01113896231748e61541992158f735af641ef7296d6979229444e4c0815d5358a94826281944f0659a688264da578b18003f7ca2ddcf9f47c4a89e61f117146545901ee419aa9e1c78427b9fc35c5dccf93b28def3d268f609dae10fc4ea57ff91a81c0ce6480fdc2e612e4109d7977ee33d763a7767f937f2c79d80cc00ddf2f3df077315c876af8a29e6f103ab791a18914d2cf60970c2968c184d38a998ab1dc9c091ec95c5a71ff89884efc42f85f6c8558e5bd3b67d008f4cb3fde01953b2652fe16b682205d700d249e6859655e742b620354631aa6ea5c9d88d6f6728a55a41e8ebbb997b9d6b622dcacf0a7665c285978107fbece7af277881b73e82b0e90beb2a28c445b789ae742181a06aef6051e28f4cfe5d05c79a88e6d310cc019ef3d227b126bd8f6765e7de0de30da94f91dfdac3917a2e3fa2a19d13b6a9da74a7e9dcee3ed4b7daa794e0eb91f126ee9433081430ccc898d31067a4080f0ca7fcb6f598514d6a94718318fa46577eaa0f45a605f14231173840a3919e4e1d3f7cc6812d6d6596b702738f76d75bab6084a2faeb1ed8630d41071ccc705dac06150d7c262a6705ebdf71e5a5b8abc76ea2d53330d345220e19994da782c2cef5444a08a409236ad95e14a08b39ff1333b9a26feca38d76f953e480e87f7f7bc2c93323863dd2ea6169109824cbb3b009128f2df133940beea3c061a6648b2944d9f30a6cb5a81bb212260aeb59435aac706f3ff96dae0ebeb125a0261b0a123e412a44897c469b840a55ac51b4603147315ec1957e3563c679073d6edab1cb98de8fc254c9204c8dc18e618eab0ad37c4faba786296acf91e4babbda2df8cf3bc8d1ec547b0ebbacd1e49584630683391c714466ff7574a4900f5f9d51b4f8006347733de1596b7b6df8ac885ba64858e8d9412699abd7487cec8a41d83b2df2e8e81e40f1fd436625baaeeb50cbd8f1fa265e87e3c489cc0b66b8216cf38128eade0a9e00bf7c68bfff3b712bf832085420bd5c122a1fc175a06253948f72171221aa2dffcc2b58f28a50df2e55840441b211e50abee33ffed238a682328a7f6cd4012a51ea050f5b242591a466d70974762f0fc101747cd0987949848e30ea59d93570f3221491084c127682d18cf98c4b8e3f110eb1f51057505728ceae23ab5040abab6ad51eb68a14c4dc2326a1c5a575459f436baa1265a90d9c00a58d322b99c519359b764f3db6358fa8c8a9b310bcb2bc8ff8f959fa6e3748a931e6dd7294ec5db657528ab0a999503855e1e20b98302a654261e0bc1dd2407a9695b278c19234a3cba31fe60ec8c4474cdfd0a0707e3a95d0ad1d128157cfc1c1ffbea222f52cd0f34b4fde233a175a3cd82aac86083cc140510fb1e1c8f01bb21cb57c01e18ac8f00530eb871f52b55ae7649d64e5fff0f88926e740d0c993d1540a2bfb4e8c9758b4ef6cdf7567811970b4e94faaef192000200b49888c862fc9d65bad7c6c0f8d87be27f50b4be119042ed4784a4317845436190388670b22a93c645fc0657d2f350ea1c239a2a90443f74ef3550904e785cb362855850c9969bc34c858224bebc1bffe5242f04ec11ebfd534bc5f88c316c591004f1875f2bc596889ef0942c06d852537a9570ead758f490ca779c5988463902df32a49454cc655ea44d586b321a1251b42e1a02816808b58edc664ced8187b5876a73217108fa93c4357a00f689542be9bfe050e5ddb10e5e40669b90f7b5c8c86a0ef56f0cadd6374040906d7048b6012145b3bc6419a02f30ea8ece23e602c03b1daa205fec288fcbd07e88dbb8be62293ada3189e2a807cc3ebe94e2ec9d3818a8d4976016738815d960e783a10d00ff426b815b541ce0b2b34400c4c501471cdc8eeea03662ac4a7b9f5a6a32ba6a21580c258e1c5b76778970a2c897b767e31073b9fb804a268e9f18a3f23d1a8c91fc606991c664b14206c74acc62c7cbc5375d9a0c59fb9e42f1c4455fca840e2f653f0cfa45ae86931b4e3fcbb387e74e2548143033ee232f28717167a03ceaaec66557faf5eb19205770738e286a51f2b76a90aedbbbef373c06b09cb3a6f7689af6661a824153ee5a8ce3b067d6bde74de6a9d5e9474ef6ef39adf409ea131dd2681a7abbc493a400ca1c41530ced1e398ea860cd337ccdfc357ab9fa53f29f0bf1abbaf02e6158d9cddf7e211dcc4179e5f1ef000567bad7fed739d7c074384173f3d69dfd14be459d8f00ee81d1009d568f10e0702eb1009faccebabd0def3077dffd13ffc61af309aa88734d869767b867632668e8a14cf8c9acba869bacf9a37b5c822b685df296d8cd49f16f252f3eb06a758f882ef5d599e84d2d23e8025367afc4dd6075e6f59dbd1120defa08088f618051ce1756100ddd5e71622b27b3aac1789dc1bd4963b3b54596cef50f64795346f39448c5a47bbf8bfbe0c01c33b31ca57aa8bdf3b98505f5eaead16c0927f23bf99b983a3d84212da3d3e8571967849b95636df66103e9f0a7c6056def0d952c2d53a302f41ab2ce398176e8f0837a3d3351f8c3f218e7da70db13b34611077651bdaa666f426f767413d67f64cf675950af654987ae977f8198c131c67b56ac155c0e34d24818464092c39eeb9356a0b6a5f1864fe07582d3d0f46972f9a0ec46cfff0f11db38cb3f3ea594fdc50ba944ffdb0daee7477414e7588490be668d7f229fcb6fd50ece42fe3733e3f1f7f59c2e7e5101f3f60f8e2a750da42efb978b083f1551321e91877adddd203004f4397c8c3c5f4e97935f40e8fd9c63b5364d589d3cbff9c97ebad6b8af2f19de8d46978f817fa3860dc069805e1ad075f56274db8817641c0d6f3c045a877bcd037a0b9ff61f593c6fa2214e97c2dcf5ec292b215b9faef226a0962e4d4ae7e9bd026de1e034786dfee8b444773c74c94fcf4955561355472ee184871bb0d42dc7e962384375b913b6a8655c41397ff87e46f49b1a4c518d739749ab5d3f641085cfd85a2515073cc30c7ee354a980b7010f04acf742226d45cbcbf52cd785fb69f199e9c5bf243e151efc081b3dc57d58d9dc2722940c771586f0640cb3ef9e20ec5ffadcdd9fb7700a99787c5a08e00de42de32a821562a733dc6fa8bafb8021ad91030fa5bcabcc6b526fbcd50bb9641e0ce6b5aa15cd5c0a9a1424903e7dbed9ea411769a1a338981c2c6f7784dafc972acd76e3a1170bb058b989cca2ca66d9d2a074c606ea56522771e84070438bdba07749a4559cc04bd3b6a9262167a6ea67eb3e61a855c61c4a66d76814ba91747b24cd87199770b8a027c08f777df95c432ed4a556b7e99ed9101c287df42651e99371968a58eda98b75853af3d2970f0c31c0ace6eff6890a5433b5c928744b0adb1feb2bd0246fcb330f26727112c63cb88494a83622835a6f0921a087bc7c163df72b7c270a86f5b059bb43c8ef3f391744c64131e2d3cde0fa4b95c89cf8d91114c117801cfb835c2b9b066ceb7b3efff04943f17d17f7a0055991ebfcc6cb4960451adc70cd6d8199b4dce6c5d2d4c00921c4ef7f56def575acd0ae18627423ed4d2ee8711767ac17159a05c010dc32a429ffa67665aeb3592e63e1d519239471dc678af4ef3b926c30489b3bcfb7df57d061cd75c6ee72399fdca263404ff1feefd9ecad79521ef88397f7dcc2810a2ecedb1d6daad80614c53a80aee3aa9251027e7690dac000b9b8af8705823bbe5cc754c6df5e93dee6f3a0f4934c99be72e64eecc623d8b4a38b5812896e521e6076a59b0ec755a16ecb4b47371c2b247e5160e37afedc2d5450df0a649d8fd76205c45bec967ebdd4df13e3fa89600e6d16bd503e44eca8a1aab90e2981bd846d4a684a5b21a92d4f0fbd2e22bd9a63c336f9148f26568b77d71db85115255be86688ed72fc074d7eff109f0e8fb46132b916ac0aa2da24e372a959676dc6393b5dcac6f12dc0933c637eb223af65b6bb1393f149a78f904396477a76007bb43a16eb655194a48ef810e5961edec68978f5524fdf79367679bde5607fd4090c365fda7a64526fbdaf9ecdb3816f793b871edcf2cc656c72c2b76f7c1e05dbab30071b2dd2f2c9827239625cc4da1ce4e32c474b3ce900e1a4ad99fbde4e1266f0650cac1dffb0f81d83cbb4c7c997232a489089e2d81aa9de5ef42b7d5b04526e9f33d1a242d663714bab14464a8457756144c2d7e4f94ae0c7c2ecdf41a2ba949d756fad1710b0b341497f924133a6a75abf19bcb09430c38df327968b4a96617c2c88aef61b06d4342d1d4088f1a931644fa1e3da6ad3529e5fd332684c8ebc8093c7ac4a88d04666418bc03fd305a54a15fce8eb2bfab80b24c840453a409e419a2dec1b808a82c74d701e155229792a7d3cdae09f7fa766b63b140403f3c674a0bf84c8de726ac6613b4453e53159ecce2e7bdde49ae9b2a441954320364a252da4e8b87a1b1c7c1b3f886fa94dcf119fad71f4ba1af2cdd85fd68adcc9eab6bc3e12689383749ed611ecf2ba2821ed58657eb7b76d85ebd84b3aeaeaaddd31eb59f28d06d86662b8cacf759693f7ffc3eb36721a6fcc3d02e4f301b2a12c6f85f205b57e1e6d80aa5e2c9471157d5d4864b70057c1b134f301fd300fa1ab09f7e8e2056f240564a72276e08c8aad82068c3c670d97aaa626cf16ac1296efa217423580200eb643f972df16d382d217ef0452428823a965e2ab22653faffa73c9c25a5671ed8da07d4c3f7b1d69608c946a17d0049ba97af303da6b82d581a8b0ca62a8157287eededd1e63829209499d20959da9d9d0072926d0e42c3fa41d4250db4ed50241323bbe78d15b20460b998f136e07ad676c8f9b48b76c924c48f199ffbfdc836a1248418c49a38158940a49523ed52b9d02cca6110a42663f1ab9877e54b25c9e0145a0be81c7e65010489501de75b8ff76454ac3daecaa2176662e3023678bc47916db0c6b8a6d510223543e77246a87fb67f6645d9f625435039eedf9352ec56187cee28fb37ad07590de40a67616201d82da5a24dbffd31d051e9e2a960c44b6a406a0cb753718b412f0dee75fb6a3ff8d09ca56fc2c0095726eddff1c610265cf8058d20ae7f517495a0190302a27280b1192d96c133cc064bb797ea5eaec7fe9ceeb3f861e87610a0e0d9030662423d2359e5aa8fa3340808392961ce28f922d3dce0212066619665d462461a885fc6a04b2575a905cdc45a55f8a3cd31957229eb152bcab7675867d4eafd2fce0f1c6ff7e8a3c20c9db430362c0f8c788b7cf93f0d890a608013f4588e55ad39a3dfe07e75f3830f71dcaa4012bfa2d19fc1388dc008b47766718a5c17a8681a02cf52a918706190cd7fb0f5af7db3644021dfd0d74d8f2eddd6f21f250f375969b97e2e93a4530d22c82519aaa3860e914b0571b22cf35ff6622a506565a1a7991f64311724d6971652f92d4a570a90bb4db8011825b77d441984829ddbb6c9e378b4aa26808de7c0f7e2265d7b334ac7b30371a0d7bc7e0c72b94cc9c491f264f2675b38c59010d36a2ca7125a99e6e9ef31cc682900e4ebcaae3172a8119cba582e2962dc58b9b2cd9afa2af651284ef3803be0a0ee45f36cec000016ea3ff19e43c4a0ef8045f20f54abd40905b5d24400ae7f18fb3c2d5e3fd4557394d12f68b1379aeca5faffab70e12ee103c99c71dd40bee6deea798c9d7ddbddb5bc7835dfe3ce56a12415bdcdb43d500412b053b4acf23901cc264cfe3a0e5a569c7744666600de1632c4060b5a8015439b3cc42f87f683846025ce26d3d3b4c9ee597affb28705bd8c34ef0fd3893a65f255d807afcfc1efb14794072dfd3d111b1d3fda6638220f56763cb3b39d6139deee05b6e4b7190a730cc500ac365bc749ffe48abd7cdbb6b0f3c03208f5a37d33d29ca0facdbf5070c7307055e7bfc804152eb8622d286d2fe49de4e73f48ba5f5c6d6b5279d52e5c459cc934c2bc3445682bf5ca03c9bc0a7a85634d801798acb4708cf747d7b5bbe8f660e8fcafa4d10ac723f52993a0b060a9a5aaa1d168dce390e7fe54812ef87d7ce451be865ccaed774db9f48b26ae3e30d10b255f9cc2c10b2f979e12f6a0882682e1260d91044245df4c91ccdf2341d19c84bb73768a2130eef084520af779906ab9aa9594088f2ebda13f63ed0f4ee6fb1166174877d1f94c8b5f30af25ad8849c676d584789b04625cd272056bc63021a9429555f3010baa20e1bdf5bd0abfcfdc9e5f1d65cc0ab06e8d24e259fe54a60cdec343aa26c349795f33733b74af14506910f850b5481b8a66339000c4041c16a0a616b74e8a2b27b34a853b7fb166b06584b07d79b01e95c40ac6cb2f79652262965720529051e0516e7ba524b3b6773605ca99db549e9681cb1c954527f9e4ab229f313a1a705c73f7e62b80b2e420f0c2777cfd19d161d734ca33bd40797dd452ba54b9d2d1dac7f0bae7a9be74b80c0f0984f45df2686c3c4b84258022486c370fa3630ae106a0a250001eb8971c1e8b0dfeaec68ed1097db5698d2d9564a67716aad3029add3bad44eedbd374c8b05af61d740edb2f2f175cb3f0b989e92cd81d131ba63399167b66e49775842becf0689805d51a3c25c2490d6eb685b4ed22941523a6af3295dca45aa7aea466c939e9952f24c8b43a3c400a83ff7743647ebdee6b9f54ccbf50a078c60c6613a8d920315ad7badd3f5afe1223b60ebe4e51738d9ba6591c3827feb5a1bbb772e96425a43ea59b73c1461d03221ba734d24d62a25254d99727b525732583188bfc99153535333c526738d29c90cb7d81d52012db9204158d8995b9ef14cc95784afd4d4541d39ba73317e614805b49841821cd964ae79220b3e5611f62f073daf47aef9a0483c746bd3f1745eb0c95c3be9cecde11d6d56d2ca4ed25cb7d53a96e9590f7b050c75f2513adbe407cf2b8b266479461bbdc1c64938879794bc2742d8cf0a0a4c88a802556b8748550666b4d30a9140ce42aa58832944f7406aadf507cbca0f9abb41b8c6c355aada26738d56cb65aed56a5e4d68e32c8e577b9b5aade6d562b55afbca9ae7aab11a116cf2abb18fe80bcd150dffb192d8648619599ce7469fb95fb06f8a4d662253890eef6c7933ec4587f4f8de845d170f8b872dcb309b9e4264cdc4686dc226318ee48f69a213427615a56c3a31755284fe09f1a2ef85625f9fcb5b97a9da702252c02e08a4190e46a5e8a73ce0091055bcf0c410342c3521c9ba6b84082dcc408512a830c20635f8e921c7229ed84a1f624448e992a728123ea938d8103631ab34e9410552f4b0d4a5e99a1e0b3718498189932351bae02db80b1d62064744984cb8e0882894f4c04005382891c31250a030816152bc2596e8a40e144c90b083104d1c2142861d1c9078c10443284c51225344114438a460490d2d5c129c4a47546981141a8c48c2a566fc5e30faa5e2192ad8b0bf53245d50276b7a0d7423e83563cdff9bcfc58a0b66b05539f221871e3a050c2314d9d1a0430f50ff7fce4fe89fbb8e84feba5d84fa029a60e2031334784283ea84962a8a308102292b30a9095f3802c0f90c742e549609ac0ac6eafb966c12e3c220d8e700d1afd97abdbfb272c5183c5ee57436cb60c9d3dfb777385a5e471cce8673f1b7d161e9d3599ccf1fab08c431ed2cce9ded5052f5d2f19cc481ab3ade85837660790084c8e1d6f6d416c9b9f8c426314e67730a53a40831174c419bc98aae57239b2259c975f2ebd40a52af3158d9a157fe8030a4362affd5bfa5316badb5d65a6badb5d25af9f68e74525b6b6d487728afb5566b5b70eb72eb72eb72eb72e372e372e372e372e372e372db02c56dcbd26d8b79db82bb6d39a2b5460d9b4363def020208868d6a04f286e4ad2d788dc5341fcea1725bcff3c3b9e7e3d2e1b921146e28d594681c156399511d6a27ac38af06749bd5cb4a335b25f8036f9cab9dcf21e8ceeebf5a95422e5a107a01723d8ce6c122bb331d885edfbf3b940d62dd731dffdea79615fccfe5c58ecc2ec8fa517ef44509363afaae5964677be070fa1729d55e520e6403e8e39e80a2184cf2542cfb7df854f3c85e7c23bdc73eade02f5b3a9491275fd497f3669816ea7aeabfbf34f12eb4ebca46199a809ad3e1d690f5b67754b3c46bb6ef98edb9ea5a6d82b20f8c76af523f306d09eeca26f93b90cd965cfb7b11c48d5517b58abb3b9b779bdcd48b4496ae3d941ebcf6e11b31e888c6a2fd7d67fd8307e36f9321c846318089736548e774a36f9b2981d650cc8b6207ef6349bc3721c289bfc3a0c23f6cb5840b338e4cb5e6866042352d280efb97125fc8be1b269a73de18ca15a2dbfa8da4772ec987fdfded46b71140fcc33e7791e8b2f30a27c9eb7a8ebf320861dd3e90d28d6c9efe365486b485bb2a8a0573a79eacf635cd8a756ab85d49f9f401afa73f0ab46faf3cfd3d29f7b9922f5e7f9d2e8cf4fd4c6f31828bb721bb64862d7a5bae31dbb7c4e2717596d2d2415b2802eb2ce9e8021092b648535a18285daae8b87ff77ef585da23f87c9a12ef5e736f6dcf27e5de40773b2654a8a1420ce4ea5f070eb2f3a95c24351165a9699c692744f8b4391a834f5caef0ecb945ef965aae00da04d3b7d71b2b9d73aa19e9f38863d06fabbabfc9e9587281c448c426c7a5b629e6e903061d3db9227e02703884d6f4b683d7b34a4c06d7a5b1294b3aa06fb9ea3941dcf1cef98666cb06d4ed8f4a6644acf3c5fc08e90b50d099be4000e435ab99755fcc4c1d6ebab9f06ed50adcb744f3b569ee5ec14298bae77d02952965abfb9cfb9b7c9ecf547d7abe77d9b92dc26e91fa72df2846ad5ee22afd722c19feec14c70aeb033a2f38a98576c598e9cc05d2aba0f1cca28a57b44e850cfd3f15a96d3d62984fef42fcae739b52b1c60a45ca253242d40bda24eae6b2368d74eab903649a73c946991c24ef5bb63416593b6bc3b6aa3f2992b9bb452dc9d15297ae516f7d5969fa3a94de5dfb77725ef0e85a2deb7679feea3140429583b9d28a794f290d2bb7bad354fa552f4ee765cb7486ac26664b55513d6c9bbeb95674d6d49fa7ba9fa8249486b564e564d487021c90c36fc5e01f3516ab4554b4c0b383fb0f13cb9a1600537a8c416f0e0461b1a5408952aab603a9c1d66b23818e7175a482d0e06ec08dd02b4a656cb4aab330babb5d64a820e5973b823db4977544763802ecc453510e28804c1e1ceddf943a4b2497cda78aa082cab0413e37bf189a9c06295d80f9cea9ee789f179be4e7ce2338a4d628c0b67a82239639c63f948f6e1d3196532c7f090cfa1b4c8e8c9ad9a407e3407c45110219fe3e178541dd846bf87c5662c168bd55806bed8901576ed53e2e1b0a8c7b0cc3e89c562b1582c9663b15cc32673ac88a8eb320ce80a19de624884563e6e2743d031c72e3ca5571ee25e5ec8b99e508d54181122d4062b86cac566c5a6cff9478e0133a072c49379a88d950d4cfcc4da9ca735ea571cb2d96a3897cbe55cee737ad88688359009199db5cf76e4e172a66ec79497708f8725032446f8c9c73aa2a481349c44a51e3c974311891f1aeaccc972b30a3b4f199115139bccb973979ba572b95ccee572b95c2e97cbb9ece26962933977c6cef33c754c9dcc39521b754b918e40d22dcf495969a756405e7a323f7da007bbb0ed15835168b338a40e9f581c9273bdeaa281cca3dd77c2807ae5f9c7e6506b12e5b250467214d4adc89a313799694a46b6239cd92b3782b1ca4d661a3fa21d99baddc538080d0245ac00d7a3c7d2a675ab6328135657beb27e50c158edef3b619fc07b307f2ce36b8f1f0ebbea783cbec6ef5eb18a4d62d3b4384a56e35c3b5851857854c524c81933e8cef36b574ae85e64cdc468bd128248378ee37831d6c13a01e8c8d2ed8847289bc43a98d6e1b03c45b1724227e9ceaab802fb442c7c5c7e38540f8bf3c2294740d5ade094d75d65b2322b544ffac136d0a7da5c35f2d7a8b35fff03bdcd73f235f2076d0de7421750f8fc3ddac945aa5c24d71ae752b8960c2cacfd1e592751b5fecf5f5aa8540b55a475a8965ed2bbb779eed13e479f6ff39cf67291e38be4a38a6feda2f5d28ea8229c1d7f8a1d13d0c240e51b068375ba6593295d4a6771327f174a2995b3e39f6c4415e5f1d60c26db5a2e030c7fd1c286e11bb7a70432a81e39740e94cf9723e3e41f39cf22c6276eca3f41281eab9e5d1996c122b06647ef63a07cfe2606eaf59ac95806e583513a3a38364754e5e8082046072cb262074bb0ac5a499bda1400e6b43bb165faad7688ea34c58eb957d77f533f8ffad730dfa19330287f5ceda93d65273d18ce45074fa5533905ace1dbbf630a306691bffaaf027157871520add6dabb81765169e9cef31cf0a79c95b37256ceca59390361a50e2c7113dba73f7defbdf7f7977be9342bb136345a75e5a25b24fb7439086deb9745f433ac628da49362a5e5940771600cb481486c8e260271d906e2b20dc4651b88cb3610d72dc72e3d0371bb04631a3742dddd52faffff2a3bdab0d26b4d54df58976578c9e6e026a69fa64e6946d22da533bc9bd158e7a1ea78a7fb21e4236cdd29cd3627ff7c397e397e498e5f8e5f7e795d19f6e5e3168f21bf11f063ecb8453baa4c0869cde3df3f18732f63ee65cc69cf183fb5d60948433ec20eeaa488f9d3f2135493ad3dba93790e9894a4a4b4b4c4946dd67381b19a512e7a5a51b7fc69f949b6c5d8926cd00625fca7d6fc18ddc99c72ab649b96fe8769895a269207754a69b0e49c33de9f8ace70bd26a85fce9452ea1540ec98bfde9fa379a79c522e5a1c4f87b815a39f5a958e1783e0513e70ffd7cd073c3becb8ead895e306b17f9eab870d3b07b136965b202fd83549b695de9ba2ab4e5b23e7e6b512d21a129c89ab992ebb72f19be1b22ba72f3c17dea775a03c04f5cc96939e690af54c155acf5081d23353a4f4ccf9a267a4d87a268a152674529567609d478b8e77345842183d03458cd8e2bbb4859e6172a1679e78a1679c50e99926360c3db3db756557a2d812ede5d7f5339ad92cc711bb72f2599ad21db1531eb2c4950c0cd50b172d626058acd8628a521bcf2938fb70105933315ab3b4e85393c521efc5b62a0a59960baa8e673db9e21098063967f34a1699844cd3cca6699aa6699a665e05b1496c9ee697b379258b409bc4e6cce25c9bc979e7bb5049b758e9eb64085a3859a5c0cca970fbe86d9fd212535365e1feebc3aa8efa24fc09369961b60cb31df11cbe2e534461b7dbed7641769fa3f3dabd7638bc7bbdcd2a072bc43ba1f37aad7ed824debd8262d7f372edb26280c522f988c7d35fa0f37add609378477edf6ee784d2c621f98b8ff8089733754736982658fc21c5e757bc59ee42c1c6744377563caa8e14ccb66e3a1d9ff3ca420fe5b935e46dbed6a0d1fed8f18378d80f54835052361913532980830bb7247070e186444f76ad7e642e424fb5b5b440b1af6da4366a6d61776d376c435acaf212435a8205a4259ccc45401239feb038de0afd6f192022e43fa6ff8c6edb1fe98ef55184a21e707bca6f16bec7f377f9ffff7ffdfcb5b063389975dc23e0c1135bc810db29af595d7e826d5f5f9551059511b4e003132756e811e248175914508860d0a16e8087edcf0ff0fd43d0dfb5e291559dc7f258fed2e1232c8865c325da5527c3324de74f6059513c8b0526a3cb5201b398c82c2426231cca3e27c3322cc332cccbb1ac425e0128c37086e936a983ffc378a7460daed961933a3849f67919834d211623599651213c5996cb321d3bb2926c32cb4a8b437edfb6ba23db2ff90b03169b38cd1d66c22109fac14ddd28d7c864cc78418c89e961935936eac870d6c1185794f1f560b884b486c4ac1dea0b4216e3978d0e6a442c46b16f181fbd8468331c5e22db6cd4464d3a64457b7ed6f33c89101942e4737ad8a88d9a94e7864dd6d0c1dff759242a8c554460aca8f83efc19d9243d797037cf42a11b10aeef1bd051af5c87383b299d7c85327042338b92a24801063424e087235424a15284922d25d071934373769c68276fc6aac5a8082615826628390052c10d8caab060090a27546179484615156f6e743ee041da0181b423ea2f9d22ed76e8df29d2ae68dfa4f0b33833313ae5d4feaaab72dc2076caf5b8756e5e7093e4b338abcfe2cce0b7f5de2b850b2ed010d26a3f876c579e6388fa2b1f7702fd9ff2da439cbd4f25034ff62b3d7da85dd8955f8dbaa997fafff4d24b2fbdf4d2a717638c6fb5ffa997d326c16e01ca575c16f79f5e7ae9a5975efad4d6fd36947280c4a6515200d4a310d5be2833a04e2dace7546b0bece25f581586a1532f2b605abcb0aa2a63573a869e71e96f9199467f8bbc35fa5be403c0dae84bfe0d2dc698999999998921ae2effa72ddaa22ddaa22dcae94dbec9f181cc6539470e3de39f8e74a4231de948675096b8a23c090e38a04183060d1a1c88ab1a5ac7c68d1b5a001dbcf4a5aaaddae64befe0f0806ad5566dd38300c8c0e02aaed2dde8db0a73bc8faa0ac9cbc97cffb6f0df6e53a405fac5f833c7b8ba5ef4ebca759aa36f8bccd1d1d1d1d1c981a1a2345a40d03c18e34e29a5547f18db3e001040000104100620ae64bade81f2e9d104d028eea369b4eccaff2ff0a5edf81f7fb8437bad15edf15c403af6f5e3e55e0bfcd0473fe7b1600b68f7787c87cb03df65f880e7711914900b83c140a95040a8adc7737d6f737bf4f0e1c30049ecca6f6800940fe596e2fed4007c8792165af87fddbdf7debff765c2ae9c7699fef8628c29e5f7f2fbf6de7b2f79efbdf75e3e81beb3a2b406194a378cefaaee0b4a73c62ebc0f645e829cff3d92524a294d0df56d3362d8b457fe351c4a7c303435e09c5984a7153ad47736eb1ba553a8fdfdff63dad354a95496752aeb14078aa60699de9dd264a121a52c4098db9f6686a7fce9cdf705a7aa8b69b2eccafffefdf25ecdc2ae3435e8dfa10c0cbb9221454e7eb4fe8b29970dc22afa8a6e9158218b04088b647fdf6ccb0d3720212252e19c5b1b7fb6e70a114458885ab0028b93224360c6e284c910967b2f2e3274f50cc4c50c612901cf86b00441a404516c6868686868e865c51a203ed5db10d157912125980cc540098fd39c2f93a159f6fef38727f0cb1e11d8a274bcf7fab85d86907f210fc3560f8f874cc7ae1f2f1232ad56e67aad1b1d3bbe2ccf074c3e183ab54622bc033f82311157e19fc93f131ee32970127014781037c247c04f508203fd0f711378095c04fc8717c1f8bf0ac6ff55fe1fe3ff2a355adab1c88245600d2caf8659fbf7e2ff8b71be65b65f065129d1850a860c2b869e9131736f93dbbd8dce8e3a1e5adc913de2bca5b24facade5a2716154abd1d4506c6da929dd89910116c9006bdd721932c012cc8149604ed300106a7c82252db4b3590f8f2d5df4979cd2aebcd542f96825170d0dca472bd5cc60019616c8c26268982ef54f529292d2d212cbca5822cac668c6154de7298a2b1936bb32ed762b0d5bc9d8d8704083460d0eea924e2733d2c0a7064bdb64cf5ccde1c7377bdad39ef6b4273eb26755b2e357f3a50c69686dd240f968a51adab46103e5a395b44e9b375eca1adafc94bea58fa94ec1e153f51dd5c0a70d7cea56add5f23bfaceef667392929494969698b4895d2fe5d7a317a86a0b6ddcc027ac8b86dde8e0050ac96444b3aa84f6c2812486437be07da5492acc8300e4c83122dda19d4b40480686ac2ab56143d03dd07c841b7c3fd4264841203f5e72f44fa9cd529ba5364b6d96da2c35ac5ca17cb2ebdaa687d9539ba6c5f91cb0082c230096416ef40dcae7e21cf87eb76fca97844f7ce2f3fc8ef295414097cea8344dd9e62c64a30120200843160000200c0a850443c1589ae689e0e20314000d5c7a3c7254401c4783f14810e32808832088218418600030c61043185286b200bcf080c3a348d7876db866f6a26794e6ef248cea1d83a763c637ec943c36d68f0b39ebea55b918891650f9c3225906efab33c0e64f440dc7426f6e9d7126712937f6a1bf3f450f7d390acb105af172d3ad4e87d9b9a2388069995cd65978cdd5f0038ec7a6a88fb9aa379639c482a6c9f84db5bb991e417416776e16f0656da0fe626d0726153959a14816423bc979f8c5f060f21d0b4e1e397dd7c4383e6d686126fbeae6952489d050f8846f4e9e2d1261060b9ceb362b6a3ec027e47ec777d6db6b9b127f642a4c63b06175d2f782681322effa4a8a8a6f6044f133b85384a78be12ad50702fda2244670dedfa227d847c62e2c7b1afa0fde99a92df50feca93714c85edfd76acd7f34383b5c417fd087835b36e3c8e965e8550b3993e04461353a015f086a19a495f909ab742875b119d0c4a2fbda75b70ab607c0ad8c6e5fb8392e5f0ebdc005de02ed24ff6fcd20c997b8f6c6d7db1e430a5779f863d0c28e35a8f4cfda14ee368769053a2b5825a55b2db2d098237c808c0deed3326138fc21a9cef8aa72ad5f0ab446863fcdc2e2d35bd34f48075a2b45865145eaf84e9a21f15193e5755b24b519d2fbffa95e51a80019c946fc84d272c1482d221fe40663b2205feb86ab6ca6f1438bd2a6042181d17a806b13e27a9dbcbe9ee9a3e1aff829fe5fc6ce48973ee00700d57068d41e84c160fd46fc05168306816561adc4452673c011093fe32acdfa243db0e4272d120c1b4b3f83504df40825e786eec4f13dd0be0d5ecda3e5e233d1eb3318f07ba4a8022b42f315c3d2a6d0667215d52927eb4d770932b3912142194a6e3a3fe5325eff06575a673157633491f2d49a737288c49c1c205792ee1a24a1dcba011429682ef18e2ac93f8d6a445ee0b01f10f58c825dd6ca0387bf4748208b49e8210a353e1e63f30478d9b47b3085f6d50135cb902c22b5acb91d62e1cee1d8e698b2c6194a453976ff23b31c6cffefe04b7316a6eac62672fcc05590aa246f98f5ce98085956b3b02abbcd8fd26f818da0f33eb5e0c26b4d739ce0cf4714c2e17b816e7a6c5352da7126c9fae82b21043e2702f1f3448116b0a2264f595320db095ff032e72bb884a0265f375ddb5194c09e2bedf78fe98611ef60c5943c71ee658406540c315271e2d4c60f1652386a69cb9678cbcb227831c8c7c6eb30fdad87e477e5192392f90a078f73bc7cc4aa23798e5c9911240e01b995ba0a749f7d0984a9463209a6a9c8a3c63fc516638baa5fc221bd194ca915e86dc1bad2fc2a7891d22e6ed90e84903f595501586914bc7df38a91224b44888b404889bb49f2ea0a6bed066f725c968254acc2d97812b670acff0a1545d25121250fb2105020f84a3793996a62691a200d1df95bdece1cc764fc20ab3b2c5c4a716886e3e4300b86d628b4151a0013944c99c2b36a4ee63e08112e51a3904f132fd3b7e3a54cca77c168a297c6e9435e9e1d6871497179086592fa15cabdbadf60e62ca2ebe7d6c2e7fd9b56d407e71dc0aaf5d0455f3a31406b0584a63c3758cd0f354cb4ca58d7530bf3a28a9b52567f03e61e1b8984e89cbea6722e61b8de3d94d646684a442839a4dbab3c753d41e18f8e0facdc3a140b528eb648931c481d8980bd7a5a7b11046265370814837210353736fc46ac950747a3ff2d987aaf97fed71b791800fd82a04e6dccd5f12a1921367b3cf07496cabe7fa3b0d3e880d5077123fc6850c5482cfb922937e33175b72236fc3f1225555057e5f961344692f637e867b8f6ddf723a3e03472cf475d518eb58d46395b80f8cc62e1d61cd0da3ab79782fcb1edc0cf4db20db6bafc205cc8db0b13ac87360b9b61d0bf684151d9bd67de3ccf595306b2cc012ccdd444e169e191d3c3f9582a8bb17a0a68e171a3e3a414113bcab73c90039d36853e97b7fc9dac6faaff01fab3af7aa6d5989d34b4b6e2f8dcba433a11ee55170343d8817ba51d659e17cad5e1fef210495d559eaa64b2b651763759cfa6694705b817ab987185cb6e0cf024b229140c71dac1d7505efdf30a26aae4bc76eaca5da74e95a83c2de77032179d7697e54581e2a4c8810e566f07ee876be73237f32780efa1d0295bf16bc037a53ba0c7c853d5e85856027efec56927c659d8e2914a34f5f524985f2fdf49b4223439fca239facc0c81e0cda34ed2cb8695a7ab855f2460b68665d1163b259beddf852a4caeeb3808bfe8a7242f0c3ac6809c2a196182e6e377a7324230ab932f5553f1a0d3fed1c88688bcd156a0415ce8c8823b4a2f28b9411ba8d147f71430c1115bcf5845cba6156d88c9460e58f8b70b0806233e29a6c934c3047d5af46065055fce000d83033d4a7913c08bd6192c2064ce92de9675052dd4555a4828f236867597a9a888afecfe02a2e4560b696a2a74a947f5990cca3ad239bcd8384f6799cf80eb96b2c63cd1b372c6f1d17e633b6ae4778698bd040ad9e92a70ee08a0ea58209ccc39d9d9cede3037f1e63a58c9ff2914f33c5f14ce79bcb83dd90bbc0e5358757c1a0808078b9dddf23724bf39f877983ea03b95a57081d3e8751374de01eedbb87b072627070bd329931af602355e62b2f68a5514a1dd8d653e52ea713cdcc31d372a9a91f088b8f01314af0d6642343f8a9d05ac479d81bf27c14f1deb5ba9a9c99fa2a5f2ec7dfdaadafdb17a614934280e7c821a9169e5a60674062b443123b556ebbc7639f49bda8182409060a97101fd43e60f5e64877641a562f7883d322b809e2040025f91f1c999b45b9f2bd1258cf6156bf60b1f690f14533f96a9340c2c2c3ac30c3cb7ad602cfe012a428f4ea0993ff6682c3a2f3ab8cf36ee559b90f63a2c675baa47eb8d83ea691d4bbfc63d31ab67a46f385a46b5a0923197614e0ed0b6b6b92d64ae4f4843346767e61958ba0ad38c3611ffaa6f4ed21496ffa968d3ea1e4c6fe4a2ad98edfe3c5f84b6926e9bfb3cdc5fdb75a8da3a20c2d3182b647ce204e185ce291a7a08c28308d9de83f5f643e854b0f624da1993bb89472bcb84e1915620fdfab79266c70670daed2208386be883848a1cbe7e54ee585331d25aec45106a60c4add2ea3ecdf9252d4ad1ec5a61f42206f14f13ce6cbce5e370ac132b90e4757cbd9ed617db8b797158d1a0b5e476c694813fb4897d0f44a91a992e22c94d0fb97332b3002b7f4b249d48d6bfe1fd529d26ee25daad2c97a31d84cc822514a8a013b29e81dd3e36c4991cf21777d2ef38d426a178b654b849e4712930354d1dd12c0b3ca78d49c346bd09a7659528ae399eaf3537e0de931019d1647b0f12ed2c6307fc8390852c48cb1cd1e5efef4c40534b41448bca1ae5bf4cde71ce6803cfc02605548d6656410e5a182e1af9b955c35018fb4fbc115d7e5fa19620a21eb4d596e043b3ba7ac346b1acdd211c0c059b86d6ef80ef11559c0d1b3dd983af460dc9a3214ed45d2084551fd0dcd2c4efcc3912c0c6b3cb3658cbc1fce893a3e5625a8925c4658ffe46570e9618a95efea9fd47b76462415c04c1c3ebea66d163a1b89c508b02bee2aff6945c17cf7a9b6f3ceeb0ac277754fffe7c3b73994e19cb537168486fe3e5adfe3b2d3c212a70a4783da36c23c15068765d9e6846302be811e2bb8fb11600e45c54dd5a14e8e42b9a220a1b0d386cdc7a0b60d3ca1deef8eb32012f00bbf09bdff825606b1da6e995f43fb9cfa439b9a86f29c9be8fd50c6692f899082418d4e952bb4cd717a5c2bd9051e48674cb04c6814497468a9cfe568d3430c6781cda719d720da97d5c5211b48288bee2ff63caf7465eaf16780eb42ad96d70d5f5ee568352bab429baa2f7c6e89d6d9dec2ea726edd0952e7adab1b09d39b9f1e213e79a46cb6974523af05a116fb413d98acb1b3bdd583011ca6944e61718962ea982d7de624ab114eae4e3b13584f38f3a4636ee13de1bf898751837bb2a6e958b0eb4383369e99bf1c15c5371dfd90ca549f4fdd6cdae19d53099fb9b11cf532e0f62d2a6a1641319250695712dd124d9ca9618c672fbff0a60168d0bac4d915a9343dea37b632c90ecfc60ed55af7fa9be33f3c17ab562410e9deab7aea4fda0674080f3177155584f4af7842f9b98e4f7c815a2c8b75017109f08525f71221d1b03a79f37a96547483cc2f1c8b999cb5f4053c708181c194a3fd5c009495c3b16c5c65cfbcf8be71ec55b18a0df2833ee28d40f01b9ca4ca06fbf6fb95f68ea17b22b09891af7fb09ffc4bf0d4e5d8e817e5ee8666d8ed0207b2dfd83e3dce647c3a8447a07ddef6137e8c4a58f5505b02a7146bad60f9ae35e4727935271527d88c4a69acaf1fa9d6d96328c7072993e6d51fe052a0d2b91c31228f26f8c4926fdfd5814d5e2571b7a88f30bc5291b2a5443f4acdd325b8e8fdaebae0bc10eaae791606e6762e691f7c89c5ead19077e163dbf251b4f97894c842a97cc11168dfa6826cde37e89978763a841817c97a89d104fba6613f6057fa94928c58fc0ad60292c425061ccbfaed88e92ff7db1588612918c3a0fe6e3f672331f6506128b358c5225e8c97c34c3457bc4bc68500e0f56b367802ab40b5daa5e4674eef0a689df0c609ff6da39b4c53e9e54a628c046c338016ea22c38b62b3d953ee3138afd1c2b0220024512d1e45fc4c634580dc0bb960ce3c6fcea1c9a39ca97a1280402902f9d231c46036a79c4e60dde8385b0e75151f75d13132e38e975b9cd86367e30021d2910ba589198128e59018f88b024c19c010ca660dd3280d54358c718c05217d60d0358ad1069a1645f40f809e8940ba86599e2ef3ca8d4ef7507dcff8a9e1acd5827cafa1c1a826973a91dde5d8ca69be2e6724d55b0880e869d80374d601f98c0d745b1e10931d527d1cc6424f0cf74c5891f010c7e62fc38461b2cd372efb790f51007b0fd8021b52b41f1c023579af7b651eb67c899ad6f183840dc8216df717d896982102aeda7be0baed70d848324ce63bd92abca2ef024b67951df39e117026d4a8a9e887131b02e2e83ee0a64ef14f288bb063e3efde72c49f2ad6ae3d28c1d4c0649eca88ee686ce56380c24b809690a573f8b0882396677653081bf2214e2771d5b31ca10f09869d84e36ee7b519859cdf4adb5f860292c78dce3e45da269b4209480b1e945569978b566ca861b7d3fb9b574a1562cd00669ef1467076e3f8bc344da1407ccdd570d8d8fe5c9e00d4c582e1b50485df4b08b165025b7b54e3db41f7d3d62b3e248f2820117db23bf97a6d45ea2fd9bf736f9dbfc28a0c1c25c5db3dd9cbb9df965d75ee912d03468b049ae9cd8f5dcd3d422a36792ccd3099285312b5fcadd3a246a69d91232ac6a12572bbe7fcdc465bbcc5d3545436ea9e8b8002b7aad3316d5871d2f291ec80be0a67e5e4a681443714a3e14cd5076a59018468e48072a6c84165614919ab651addedc4b946035004b24871fc0b62b0d930d02b789856f42325d5855681c2efd568ed1cb21fe02f55f4379f78e49e02656a43d0ec9aed01486af0b460b7b02b805f77c4980fa58d27185507627c771a687ba137d18a4617bc8fdeb5ed501a3662baa64203dcd785e68a4894686f34ec754cbc869024a96734af951ba0715db1281a93872ad39e2393b08dd96fcc1408d07c9880c11a6c6dca5514fa585efa84c13a8e04e272c9c5932cbaea0018304e8d5e15dbb136bb85df35a41110186f303d78cc780a48499f981ce5c5aa13fbcb0c381c3a6d86953af47c555aefbef33bf85016cc9b09f07976f2ae4200472ac360d4acb7c565cfa91d180be99358b86ca51035573de782b9e810a84ac541d475705a0d68ec677d14c8e2120392069195971460f4ed1fd438cdc74d8a02499b3b035c59818062e85d690315bc0d9c304f48a8ffa2871952f628ecde5d1222be8c05fa9ac735a62d6319c6b716927864343c42d1fdce1b687ff1bd08f5f5f4edf150c05fe82953f8491607dae024aa8af6b1567d95eee63168b6b1e0e89f7427195788dfd90c8ea2d29aa31a249b7ef461da7290b657e73b33e416edb17b2fe7bddff9e13272140a1f7ca5510e224c3f94547567ec66f41ebe0df198ad23a2decaa7d1ae52923d05504d05cd985a7abab18fe8d75db8fdf64a55c9a68f367af7844e121f33c08c97807cae070723bcab10ce3539971dcb62201c0af114d6fe22e722640227b393b88cd469a51d9daa3f1b63b465e4dda1d1cf81a4327b97a9c3a114a18897a4afb466fe3f7680445f4cea7eb465845cc0c848c1f3d1b690b4cfdd42031585c5e976b2fba7b93d63eb34369c44b764131efa3412628d25601f052c3e5f084cd287fe6a52d0d16186a9b81f58b92cc02b88d0d73372897e15894781e36a9320ae27651adcd7d6beec5cc257f5109be5fba8dec9bcdae340802d45c01cf2f0c6d3098cd03848b270b826d0583bcf7730e7c622eba1a663f9f783c053d7f5f49a51b5e3ea185f2cac929f0f1d499011180520fe6982f96ddd443a0b4d5fc3d118eb36217866955b3e42a625349167e8db8b20a84615f27fc1d008030ce9eda68375810c4db3dcd0c1add10e48d1971841bf2414d2071fa743b31940cc34caedc32be528e533f6eaf151454812f5a398312d08f425209000fc23117a6717409d93461c6f69f9d90cc2ad43ad6beece31ca6236f2608e0db45ec388c19b343689bccc8fd32a6ebdfc9fa9c83e0bf6117178fe3351442865d4fe92594c3c1ebb60bf490c3508608a551bda22cac694c245e77d2ea1d8da8595f3d8884883dab45fdc0a50bf0893605310bf4872610dcd88d21e1f1717b3dc7005da1e939182e50fdfc874f21df0f5cc184c02496ecca431481010c164aeaac62b652eaf3c02a28ee640e3acdeaa16b6c6ee6c65595ea15a5aa3f02b1adb4478060684c365ddd861533d0d527bb3144365890dc3695235236049dd47d43a394b9a762bb2af0a19c249f50a75a42e551601573f0b96eb3f131c472f3024e2c4c917426af892c08882c82550022e73a0dd0b256c8af8401ea6f129b0086f8c38a1191817c8980e7ff314a4dc3775b2da7f168a18484d9d6708d5314b7431733f989085183a7e2b8c9d778b8c2eed8143295161b182258f976277476abac09c35770983683fa576267277a7dcc1990bdb86055e3b26ded5ab95b50c5f582e9f32d803d781f2079af5ff9be5adc6fbb6717c55562ea8e6e9cdb6b10f30f51e320afbd3bb3ae2e8988af3cfc2ba10a989817320e8dd0158e5898ac782f3f9640fdbf6e0454fa4efaa1d884650068bb01c002f943112301a575a1a91088e897989a069ae7a3066401cec0e89d835b40bff34931dd9aa5dc73dff33ed0d46e90e2923586a23844302a3dea333911854535cbb8fc8794be1d6838d171ef24fde35ca2baa1e710c476faa9e425033b3b357da12c7d451388ee46fcdb80c4414f26c24b70ff77f1f052aa6868bf97b503e5c364db2881dca2292caea2bc1e638de6f890b4926187dce4ce293f67087dd8232d1b8d522375146e3f5c25e4a8315ecdcc04d8fbd952fc5740aa1249033e89b7bc5dc15318993dee5a32e42a6532c1c6feeaaa642fb36e1d139aadc8073f5ac7ff2da11fe166dec95e2c5751def14dd1641464736d52c828fd137abbeeea155e43f534ffbea46bbf211564c8d70a5a87b4972040683e838efe101959dda41519253e1326f743e03afd56181e2198573025717685a290403ae800060d30b7b4e97021d6e7b5f66e77b7b4facd27be27dfb094f6aaa28074a7acac22d9aa5ef5651c818d797a41eaf47e545432011ae42131ec7b308a520d46f0622c53386abd2c515176729a61b722f7e6657de0798b00cf28d27fc2ac0583a0747cdb1e4efb2ee341aba3cc3a6e0e71870c9e1ca7535251cb99015df6871059f684435041a47045cfe8f6b699989d734e71175695c3a4048543174483e16a83b41b434c4e0262bd0579eba24a6fbeea3d0ab490b797b7c6e4e545379ebaf4ee621b578cad064b590aabb79ce22d2b68e8c2f75feef32a773fc5a220fe66478d3aa5deeb59716281de5390a39e7dea169bc91f296e934bc2624e1bc3bacf4bddadfb11544f41dc5eed26b61d7e5ff2d1714fc4af81c1a7b20065cfd81926ef1479719711669ad92d0f810c07dcd1c6709708a659d915965cf6c91c43d9a0618c9d63c05fd172ca8afb53eddf14d754d5c3e186e8c8e58a72d49d9a5aa4566435848261f4f2acef5ced9fa185668250fd31321cbdad7d45081f7ada37d6f1a2d2e9a8150afba07c5ba569819ec1e4419359eb9db10737ed6bdacf1e6618c4bee8e107a2ca0aa7d990942d2d207177112c4597616648c4f1291b6b5709d65bbc0bd922f4f0162fadc1f8ddf830214c255d6849a00f00dbb9ca3f82759dc77efae4e90dd040d75ab095a8eda050a07c98c0f3775428d686c83047578b2cbf94e4534f946e629eb87c5f749e41767409a5bd99d4e6eacd68d020c7a980b97bab13535fa8d2416fe6879a445f0baaa10ae95990e816509fd4fbe22c988af92ea5e2637cd19b7a19314e0a31e41307c4d028b33a27d1abd6442539e6843f6bc88ee5fb50fe3333d5066fa08068817093c7229f4dd12326234f92dcb6bc17eef79da276ceaa6d72ed1acac3dcb5f45faf6e2c713e893dd1ef87537bc19945bc22ca8f5525295e5e3fd04463fe0bd4cf13bc12cb7839a26b74c07d814c14bbc84eab315c09651a9607379a732818034c80ceffb3fd8e2e8be4eb3e6a3136aa0b1a889865faf2ed089c6c4f49ea302f4cc7f96b4fbfbde3dbc2963eb48eb1790670555f404fc9c290ae7aebc0fa01214754ac1db8e7caca7e6e510e8ce73a03beb95e689a548f12dff351238610eafccf355c091b07c929d082b5fb57ff49c2be674c34d2fd9d72ab0caf0c0055a023e6613082056e84c0dcab0dfdfa25719b499e15e4ebf747938c286aee8c5d4ffbbbfc0ab1c7b5541075545a368f289197481f086b00b40bcb20c2b2e398b14157c9b65652c31c3f85af9baba4f6b54410615c5c95142318a8736e01342c095e2be0b997fa2ca674842ccc013371d45403b09657ed14bc45e17e74cf25aa16a66b838564798391efc42cf29c1b72ea88d2b3b4d5c280a30ba8250e86de255b7b29c8996ab67c56e9c0066de216a5e086206533b3df17ef16ee0432d0fbabd48c5609a6b761b18a27ae4ec061367a370ceae5dff11b159a6cffe83efae41f1b0e4a8b3226a69d35b208866ec564f0105d9186743278c74178424e57e435cbc0931fddf70f00d47ec67c9150cb3046ee2fb15cba64d575d09fe71551f9a540f13c3cd0ca5fa8978faf650ba5e7ad2ea23320c6739da8687a6919a7331732e199e8bae0c932a4dc6b9d0036620c0e83fcd9c373c209f7e9ab3fb65f5cb66a0aba028100fe28f70a3300eacc7de46821ecc03da9b5889b179e5a01f885887bb4cce1d2bffd125fc70f0de79b2a3e9431f693b4977d394be415536c4eec417804f3ea40245e7d4d1ead55309c7803dc1820680f4e1b0e44736caa2d08b5f240ab84be2ded11f6aef8a53c9ed5992513b851e3ea2817043ac02a2aabb62a40541e126e1b2558151189c63f46ff9e735766c89442299daefebbc0c4f388f24550498a370ad14ed2ebe9d5af5594c6563ad40dcd5c92a5f806da52265d59a2279dc7b43393e756c0d472c108f9cf775edfce70dcec2b9a39bf98e69e4b066cd54e0edc35fc60c2703093b271e894b2882281faeae34112a3040ab5dc5c815cd17f4eb3de17f57f1c04b3e980f9482408dd5c6478685c8fac22514dac70ce58afc3bd27d7f18882eeed6f15c1c7b8519630468bc35f8ac3ecbff587db5048e42717bea2124340d4043845b5d85c03c2241117ded9a54cea2415a9f3a04330a8f3b61d1bdfa6c70c04a533ce4bf444914ce8618cfbe13fe05ec9ed13de4725b2892a9b672a1dc19d5d48fb9c1402675b1fd740b25e2dc19f147e1b93291253d6e36d9dd63018eaf62df462cc168ab2142ae1db8155e8761a1b6fa827b854e40af44efd52342047d74cdb48a3d1f4b52b983107806ae25f533282f4ea83cc22d0c34cb9575fa97ca73e29e758779c195ab3458ced87829e8bd1cb0ab1254900988fe6fe1c21dc03d393f3ff615a2baa0a53e83b15d8f54f97a10ba9589366c53bcad4a0152d62bf3895c0a42b022a01c71cbe83c6436c086c1a0a080605f5d87c71b40c4c817e064d96dc7339ee302d7e50640a9129806b6037657523c18351cb040d1267644feab24b8aa4e9c91b0057ea248103aebfb6f195d928f963eaaae2587362b6905c00b95d7b398e7f564c46651c023feaa6d7bffa9ad29c260cc2ae3ba97162ea5ffcee3c92ba3dedc087309a98f4964591ecc4c9b00e709b165f50f887846dddcb9d77dbacd610f11f40b800df282d746b46f48f2f61fba194cc4226c8166e0ae23d391b942038ad420a808b8d83a83544af89907cf381c6853b7e569832dfd048b6f2799c5a927a548a297afb363131daa53e9c7340ef43951f9fe9cacc1e4c2d56a8538bb81bbb3ccb383a3b9a1a787d9d8ace31af5e26e70783453546ead4be58bde577e472ee5f342076487a1f924df20f76dc3baa13b8fdfcf3187dc76841d2f9e88e3525503de569ebaf4dba27c060026aa4c2d85fe90d01d4679c07a02e10e045a4fdf883c592ae094f08bb8e95f26f7052be60a3fe15b5a492f03feebeff3edfcbc676288bc17cc049aec25611d9925b92a479f54c21dcb96a728ee436c6f052e2022fa78f4deb310a340986e90be3d1f0a6400ab14bdc131be914e2f90dbbb5408b2ec28eee610dcaac02255bb4f55c5df372e109d8e1720322593c45998b2166a76624706b3e8febca634d50f041c99d2234deb8be3a175169c732c6c063e99a0cf420e11a7df152e7d8fa31b3eda9d484b9a83184efba7553e092475afd771905ddafce6f43d2c21636358018c437d2d6106b646f7603a8477c1f44c77d1121637d41b5ffff13c4951e84d1d37a22500218986a17bf2cb5792871d42fe25af593063546e3546ac573de0ba1b7932eb14a521bbc81cc4e50ebd3269aaaa8d037659862d08c6523d8c208a153de1c44d30481b0505694c8e793e37101c9dc19f54cc4f5f4e9891cb113ac3045b99b5231b28a973729d2e80357467991b02622989ed63f3eeae89b2fa6d7a5eb47e679a7198cc8a28d5f4e921bc6b95e3ee58e1648201812c50a0802558f183ae7729cbdd4a0d5d60018786f3b935ac1a647213a3704345a539cc1487a7a6f4a3bea06531e171d7285c1c8003b3b68f26722e686e7e42df2668367b7500a705027c07e36b6d599e4a5b0b4f3dd54587cd40541031d25dc098b362cddbc8f9916e69646af2b22c2286eaa09fcdac4a6879b76f30be8e43e34ed444ae3664e606d7179acdb23f12d8fd20d77acb623f3f046126358b2bbf051119693b4a95e21dc8cb4d9fcc31368c519088f0a1e77ae89418ccf9f848f01dc6dd4285e0fb1050fa607da20802294cb54dfbcc70f2b5e448315591bb2fee855d5269195e941870765a106817ff325edfb3f483ced20bfec8926427d56805d7c93c5dc212de9c6b75304519520610c9b0ecc8a3c7ba7dbd003f6933626c3b9a2408da7b5c608c645dee3575043529d33d0fbba04eb7b41aef96e0da0b84d4cf6a18c3574581b46e4141aa462599d8c3c08ba8cfd38061ab68d57c84669e5c2923f08874e94c49a468c0170606695ccfcf47b27aebf1131d2eaa60685478e1a9a65957685bfb10f271569f3fa7a3cd584a7a1892ad6705a786f59dcf3a2f755c0a0986b2f29da81413677b51c5b68e127b5f86f51bafe4570890301e994c4cfe197ec5988d21208a75658c5f4c881b0a326310deaadd2efeb4acf3a64266903c054e2eb49dfe81fd9fcc95a6aa6ede5e4bf79a35c7220c78bc50158b96251ff46439315a280df215b5562d8c3c625726e6b507cfd26cf7b4180824758516e7f7ba3ebebf41aeaf0fa78304ab9831efef809f284ca2b2f4ce62e9125332198cb834b21e7f554608f530f3b539f555b37523a9fa7e3fd58f9577c0da3b847864f906d4d7affd3eb09d36482093bb78692d107a34ab364a372815532017208e549dcf82bdca812e405dc817c3e65558131c6f5b2ac68a6923c57be2ceb1877c270b0ed3a93bfec1c2afc569adb86034d9d2d98e364442640dfacd03e8cb0afd310af177d77614db45ed073658ea3a3ba19de4bbb4009baa8f61df86fd8d38e8b1b8fabfdc80d2a1a08d9cdef185ca35b6f5375fd07593357621b54010d0d0e54c0465b3e5018bd133172d9ca97e09cf3b3c2f42f9b494a4fdef461fbfe653068aa44d312b1ea0f26998e1e29d4e4ff1b1e30a814f0a2a15fd3e377c10f317bbc316cdcd41c028053a08d9f786a8a77315637ab0cbf54aac9241e488b7fa2951505258426860e64259401082636db4b6cda76bc23fb281a45b56d21b6a817626b0e6689ae1e9280752403ef9375dae2e39d04189ca24b78e2fca09caa474123ddc334ce045fbee6b2b05e19af7d25f70676fb22fce14e9fe754790ed1483c4e6a3240826ba23e206d32206340600946aef7c1071109ccabfa549b7431721db42f7e4532acc22dbc230d9c1b26240c7f6da57354141628edb1089a339b287954cd1f280caf0c5aacfb57cfd667ae6110cb8a623e07781f32cbb26c6b4007444830621ebbec4a950a2f2fae1ea418250c68614ec56526979a81bc80189e615d0aacaca2cb9fd5d74439b4a0210ba05cbc8726568b31d2eac008ece7634cbea298c69f5d6f042257b6ec6b8d018eed9876cf22e923fda3eccc313a7bfda08c82a06261377667dc2452914a04b37246a3cf1405a20c936109597886d6b03a7ccf723580a06217dc8093cb194e5e2ad5cf3e97f964021ae3c84fd1b7e911b224b04cdf4c0dfd2e41bc403f37949ff9757732e016ce7bb58ecc1ac992fa24606b4c5e10b475f495aeaceb8f7fcb7ccd01b2095df7b31e4690a3955a5a116e634b407dff34228732b070af1eb3acc53de94300031af1bbecfdaa84348d3402465bc6e7fe5ea3753cb8b23efd30fb849a9b0309fe1800816210a0bbb9c161da0d04dd6300e2e9a4080ba3700d84b4d0964aa1627addc007ade4b1f826fd1dc2c0528da0be062a26f3cb0e04fac27b2051d712dbcf22ebf0bf78006398d7cde5e3973533e6fa5c43d20b69f6f0d42b268c703ae535e407d71967eb6e929e7be04e72d831fcd436a2ce97ddb9299b9ca9975faa96747f8a772aa0973625d68fc91ed68ca165c4895bdd0f00afd118d9632dc57fb3550006444c20f86ea2135c45c92fd0b52c7c3311bf4b11f2eb6beee378919ada384eeff0dfed63b966b091735643244f45488074b2a9eed8be7d0f6658c8d158f2ee010da8b9f97dd6fd69dc2e82838df10ee2d72f449bf5d58f2f6c670444ab4fc08207f6338bc6fe23a30fea1c4871209161206473b008b84c256df44d6baea0823eb5b313ca80d279dbab5d91b652a0b2abe56019aa2cbc8f836b0f2d73baacd6d37eb2074ae9f1fe33a6bae7cd5ef0e4aad58f8670dba3a621b4b913376b7ac68f7e8b430e7149002d29ef521002bd6dc193cd00ecde3125d4b2365c763067b7c4c4dad30050ababcb7f3668fd2d2968fc069aa0071d29a888ab92ab2f1269526f60c1d7daca4ed2b705383022505220d65bd570b156eec26a1380f5b84c1e7e168864438229f0ab3ad5da0ecfffe72e274b6c4937417dbdd7820558404cea8de4ea6f1ba08867584d0c924a9722c73829eb406328858e56ad7d3ca2488f8452df88d7b80aea22a52f6f9e607ca9ac500125aa3acbe0487c6ff988a58943272ee31026b9bec8307a986f176139eadb8e449d1c0ee231d4ec9d239ff5ed192fabc4e36095a6f5b4267aee36ce98f8e02ac4ffe963b93241d8c3d52f00715809c4421a992ca2076e87462b5a2bd03f3062c2ad3674f79555aeb16633e6954d647e2db5668835125702b4a0ec7987c8541a512ded1e13566bbe1b29e4a01cbe6b83bd68572588ba22a8cf5a656a1679168ec01d694b6db18014d292a95806020234137f4e00f4ca3b06a7f75fd905dae5b9be25279f0a89c32a3c5c4a2e5b9199174692eefc10ab5231041363c17f83aa9aae8fcef7a87673025722294ed4310e72bab51fb7f8547597c9eb65ab9d68bdfff4b8899f226efb753b80c262715c18ad34b1a5d6a77aaec1ab9c523d15b96659f4ef108ad860435d80ec11c57381d8178f3b8443d9b55c1b10af7dba12be9eb21f32e54a60a2e81d0970c3e27bd23d4489872141da7cd068a80a5061272a58f94e066ae0b5895e9a1d7cda616025ce00e1f89b6a19451b6750332af182a7d04128dba1189aa7e95f338ac94d0802a201abd17b7412d6fb1aaa8d21459f53da8d41be488c764f39a1395ae03580c0ef03a54bd276fcf0fcb8cce9d2f99bbee1b46de60e04957252fdff54e1dcf71bb7052d797b7dce4eb75aa0c0fd067019a06308222333bdbb88d547339b7922636ea236e6d5a375415742c33a3ab58400d06c15d3fedc75ef7946672b0b8288c4fcca8edc00ee4bde260fba186bf1d34efb6bb1eccf17c80664f3cf38f4bde0e1cb9300583cc1aa9880c79fae2ea5ebbb6f73cba464c9b62acf385e1da80f8b49eef19c6a7b4807533a94a47c6fbd2924dd6ebd1a7736a98b8cbd209a662e0124da9c07777e0379ef8421cf10aa70ed9ad54fcf8f8f6f202453ca53fc30429089372fe56560a502d85f8b762550027c2512e8b024e35f682ae62db5ca47c9fb38653369bd9adb756667273cb63183c1681e5ef5d8ad88d0091d2e6bcf2a2ef5c6a2b00d623970e769bdf147d7fb3b4db51271df1baf2bbfb093b10d878b139deca873aba98fe19c88499b140ddb9d8e70d49c41b1f198a1f5f772930a32e7dc93376b1c2b4891e02faa0cda10aa561dfcf56fecc06ba2ae5085b7588e3945179707c66e9082605024e68bf9fef1c0431b18be6b65a53a636464f62318ee1fce256b545e374c4bc71ddb1d07066ffd3f501b934ea07686f1dd707d24d0d71f07363ec8bcde2e5214d8b3c2a7cbb2f14dfc98d82f7df30baf8e935ab7f1adcafa25aaf726923ba2ab78262b3dd0d34adf7844975e3d89f3f634e0c66497adb27906dafbec61371ba0211cc184655083c10b3e2722b2e2b268d30f1165fc7a31fd9f5de6feed7c06e7bea0703f95a903a2dea63daab366e6c70d649f14f36755022f033af95c70c01d947cd305147d0785cc8552a17d35a750cf872f5be86a5554af0390f50f31e99eac3bfa8d2abd7ab94556d221ccd2ec95d568d6fd20197a309bb32123eaed30910a56eedd5b83034ddbef2b02cec1bcb8a8e914c22012e3626eca5b472822e5949cd16791220b07897a48a7997b07dee474938011fe2c4575a8c5c6dc6634eaa9333a381d24c1ed34f688913380e7a6efdfcb226caa2664ba3c90f20cffcb2943d5a2bf40d42a49151eac1747b8d08274a58f93ef4d1097abce380d1072e455b31e96c827664d62221e3f6f5d825c83c9dcf491e60b1d78c519770bc7a43b20ce74baacb9ef70b576878b8bfe4407e075f1a041a03cc82fa114fd11b56873776c3d685bc961e9ed03ba4d4399696ad9251f95815162f42bb50f9c31017094d38c520cd78ebc10c051935380f7217e43508f968c5e0faae871ff75439b385455de3e6ce212d89964c77797895570ca790941f8d22041ba6d54894140737f2c2e3296cdb14815232840233e509cce401fca0ff78440da93dcd9374284430a504c65cd7ed8e64827c2661820c9103f0ab021f67e1bcd305401f62d0fd55d44c4886365f86a0e5fad49794ec4e9a08d8b61c12787cd2de3ddab6b8483b0cc537eb1ae05d5b7e044764053d6505d5e6eee82446fd3c161e1f15772ffceba092e241a0f7a93cfd0412a91751422b08f2ea198cc645146884ba2804d3e5941aabc82ba9b879831178c8640913491d2c0251ddd5a3fed3daffa6778328a98cee0d55133cf9cca66f2a53638f23da16f7c8f330cd499b2821bc377f20ff73c45693f364b0e215ba46d8d85280acb767db73b12a793449bf38be994003428a7286d9b91e40b84c9fe83274c66413e2c8ed3cb2fe826fc8731c68ada09c217fd61a49b962d54292c246fc11ebe7c821e46c764ffa9b53bff79e7ad1b3d20e3bf1d447e5b7024985ab7557771b47c8e518512fe86a28e671b8bb7d2312d54adf0c8213a6d2f6d3e1ca6099a5100bd610c2ce93f5bcf4884e3216026a428f8787acfedfb0c9f4f401acda72df8ccf64d088bb4df4413dd365619a107fed82df0b4ab7efb502ed5a3296452bfb9f2f6fb153766ed8cf42b15e741925c01441721b6a3e9d875738f58bb68013b47a7bb614c80860311fed3e58efd02a0362ab0e938676db6aad819f78338d2130f8d7012e8b5c5d9a53e843c7179c20d7b796a02aee8c448c93832583c55318b00487e7e2dd52c108eb5ca88722450b4360ba58de5bc369c11833aa22ecac51c3b21ec942387ea008ec02eed9b2c945b078262bb741b43471e8e6578b0b81a87a20ca1c9a520ecbbf9e77a9adf5bde8a123910fd80608890c301b7d4aa9e5b0a6120437e3e9e3024ba6a92bfb67451f6969578e639b8df8239a533af34e4cf5f7963412f8651507c231f46ec15a619aec92bd7063892ad9f2f902d34f0e93f8af976660d65ee0f5eb40ce94804bc7cb23b061e6df10a6e872034e33e3db4c4f5c60948aa2f248d388df7096ee98b82f2b12d8e2be1d7ecbe8e8ee5b8c899b29df04dcdc6042241388bd75427cba62de0e45808f58ca858a50d8fb623c2e4d53d93e8b932e2acb2d96ba10a632c5e85387d4d6b3f3ce16bc69a84e5fb11e26bc27581d379c534f9f260118ef9c41b73372ffb342cfadc6e65ea6041249a8835fe086b6cf0b0626ad710f437477f1a98623e81c1b6d54dfe3d78a3f954f1e350b38037b65c31ea13491666765b9748c0d7c402eca5ab4bf807af0f21533f5b8ffbfb3cebc4283f7ff63e943b91238f5d104e68af485ac2b237cd20fd092660f4912f795588fa561f7fa12936aaea07c810615088259321f542dc3e2846e211eafd7e141950703868689165323fe512de69ffcbd56804836b7cd706a0d6930e4d2b046c430a934618ec8b83b387363e241102b6c2cdb42707ed6a9a05d1d2ea544b540d89981774fd38591945c28b5afbe896d0e027d307bf6c67c5a97a260b7550a7b431a04e43c12f056df9d37b655b52352c93d0f88b6950936e9d89dbcca6a6628599942e3cdbdd2e31634e42772b9904b9c3c1902133f63556ca40869e07ea6cc34d5aa0c70973266190efbb702861660242523599aaa819b50aa820af018557f62092ff08b2e41244df95694fcefa67a8e4272c52a8936f067523ae14d72b88ba7710980a1f819f9a90b3426663f10d830eb6b5ccc60537d6d47350cfb6a3f5e1d20a843645fabbb033b39117e591f0cb5013f7092ac3336bd78fd3d72f72476811a4374834451561d62132b04e9137ee33222bbba93b238f399c4f064101cecc20ba21da38f5d8e4302d16421d2e574019ab61f4a22cad43c44d9e977d39f0f1c6af59aeb0e98d10962bc10c0d6d8caaf2745a43e7b4e41d938cbfba3e94f4e444eadb0758ae6acbc3f73148f8c9f37b44c42dd089368b326e5d375872e2e75291c1271d2cda4231e62220feb1187cd2a05154f027ce082bb19a734f22d161ec6b6f34be8deb83cbac3b41f4c8b6f5cee37c98b22503cf2f1908cc9b9f3565a9742fc32ac98e44d3087f6c7f729dbf19c9f96aa116111df2836b7663211743487d270129e17f4723ea2ba3972e006ec5b5010299855433fd8a8990cf9ef01ae8b3991ae32b357471ebf6b6bc142e548222bbaceb532a9116018467fda32e4c04f7fe75f536ccd634d8bd0250687da97eca9ebc8d44359dcb299e367d5901cbe25e9d3ef81b7a1c9c130feb324e34ed9c5ca328e3458be6aa6443c70accbbc85b7ad19356e71269df1ec94ea8fb0b401271feb29f217c7c98f63a012819427046b0fbd3255a30843e8cc9f3eddd9da5e9966b6c4c594070e49c2e9ba685abab044c61866e1513b42b677812964433631556e3a63e00cf037104009e6e68219ff10abe0678f6a65134be557a605b381be83d4367d280e00b579a2a0982286bb2e2cd32950d2376ee90e2fb793cb1f2cc541b2f8ba2f4eb3b225eefe27f4f378e76688132248fca6db21f50a4f3c6b22d43886e090828f77be192ed7e77ba2871b284d3e843fc9761ea5347fd79805362ddd592d186a4bf84d27dd0732789f421cc9e7da8bf3ec6a61b1c27d0404e4d205e241b177b85349f7e7e70d55c05e621b92daf98aa6b11dde1139c3dc01636266a5d317e1c07ede9216be2401d53d6ed70e015ede263187c6975c7f32e96615370ab382b64114993078bf5163a45bca6a0edc095278346ddc067255751ec2435b052ed190d01912698bae45721098a72d64db830b4567eef158bedb4aaddcf9b411628daa40166f033bf600628d9926e8b7b59c1c63d27ec2b99c11b7d097ba7c6a2cba050ab403e987b474105f5ffb7ca734bc90e2fb871b0fc73f60a722cd9a05c162922281375146c4ed864ae8b3ff9a896892c3cbcd06f99919e9440691be191df467d3ae89c7f686537961ba101a6cb5017e0bb1e8e3d36c089bfae85f85f26cceb7ad01bd8f5e48c5d6f0b6e3abc5eb3fd2fcffb9d6504f62f97ce326b93ec51a5b0d1014c11eb0980cf965d0431d6f70cd8e669d39d885b56ea31f223a95ce721d2b7e6d089f457b31142bf811c99bb7b3b7d3585a12ceda1f62ff19fe6894d26d4044cee443217fea3923d1951e330101eef901fd346d0f94363630b86d57821a243abe293b8954821361bf805c1be4138fbfe295d4712c11777386c3a2d47450c4419c88dd34a74990cbc6590d24763d4ada8bfe25c44856ccad9e96d7680bea043151d935b1c2b2e30579d69c6026e43cc067aaf6aea5d72008650cccf68b101a0ab12301c50b2d9df7d9b6cfb4d521a3295eccf1794e8bd7dce5c269d457976fa87c02ae6a9c3eecc851c88ab4bc75978937683e9a1735917e0b8c5b6ae1e463f94ec3266350b2b57c9b228aa2206f58b12f11371d11e067561695776ea951b54b467e3bb55e12b72c092abc36467197ee0b640d4ebbc873bb2c7004820935914176913b82ac0a18d892a0105dfe0196de2749b52f63e7643b1d38af662b49979b9bbb9f33d6874d987bf083bc3e8740b974334e70502b4c88350074f6dc6a883a6d7e8638b2582636beae4adf7f2b601fde96aa02ddc875807406456ec33874ad3b2a5d66250d05bcfb172ffbc015f49c2973035794fb5679c6ca8ca86b7344e2e1065085a9ab18e00ff26830998d4f84bb447c0c63581cdd838af510a7b90a0522af6231469f670295d5f3b80f03cae2d5db9b8e65154e4910584ca0e6fea84f5b945acaaae242183d2d9d794690333828c30bb056ded4a5afe43192174158dba27df9aaca985878285579220d4a6ed25d1094d81d45a66d0128b3d31749391f55d923640ad893fe99d67708b94f2e8c46fbab3d54d0a109d25017e961d73e078ee61213e3d291dec5ca8b3bf0e8bc2bda0ae9f69fe2f9e1128856a7f60b89e321b1a5efb324d524880cf68c8b1f77989f7a5e747f7a67542cd67a2d6460bcb2641148a2b07265684046632829d7ce05a750d1802f6929b6b1c94f703ae48e0c53a81a1644c6f5eaa9629c10af02d19db01ae1199047133012ebf03cc6a02caab89585f40902a5207bb9a143c715b05450c86029288cf7a9644eb1a04a66f7d169cc0a8188849c07bb10fcc71187f8f2427d8fa9e9c2e0da8bd437f80e68755db626b25a0a3ea214a1a812feb6378157b43365bc01e3023908ff62e217b4b299394324c055f059a05318fc90f7aad4e5752ce0b6c772169eb85a42d10873641602fcb2abd6c4c7eba6d82e0d855ddd72688cbae6e36dd517a361575d80471d1151b9d304a2f9b2038d6f4a244890265dbd226084d8ee2a83bafbc0c8ce2f052a912b266fe4cc43eab8d8499ed250db22b52798e68db56d2dcaa1a902ad315af44fa12905de5b154926077c9ab21db89114122b3abf087223b7f69665777e72fd12cebb6f297481e8dceae4e19980cccae4612521be4a136f27f4f777e1a2776e5c5b0f3d3ecec2afcfc3461b8ec4a8473e36557e0e7bfa163579e0972b8252b59c20a75ab902934ba9d5f2457b8fb24dd56c893c4b3493f3bf72021c933d24f9025f13869e6acaf957f65e72cda9209ed1c23d176cea4d7cef943d8cee7e923cf994db2e55fa1ad3861326493786de715243bff89a4add9ce7f82e513cfceb19d4f3f3bbf77bfdaf2fc5c485b8e12a81beba80dccc502704b06e631d94612f95b9ee57b58339f32b09d1fe370ce59f8f3e31a8fc98f496ff4bcd2cbb25e5c25189e9d25204b5bb2cf507409c9a0945e3b0bc96cfb2c11d9b924db799fa5d9ce25daceef559b6719c8ae3c1878663b9b609f5968671ececa1ff5986c005900b2a000cdfb8fccdfe71288f93140f45e09e44d2045a0ab88a4ad4f8511cd694bdb1504fce950eb9eae8b74d65afb23d8b4d01536268403c50ae1dc2c68edf5ea9560db6f6443ca7f2086610ea04a0aad417b9fdffffbfa34057cf1bf3fd955f8dfab3c154fc09f227a91bce4175af3fb14925e7be369d032be1202afe4747e27d4cbc8630fd1d3edc3ba5aa30d81d7d712bd47e2bc50d31295f95f5f6b547adf88c479e16b79ffaa6989de71f6c24f34f2bf1863f0ba7f6158ad5f9c4d1f4a34f20a789fbff7c8fc39fc921238e1a7b78400cedf5b20d3af6671a4658f5cd2fd89264aa9a63793e37bb97cd5d81937ef67f2035342cffbf28bf93df2f3f2e75c9e3ce65e8cb1c99edece5b534a7510b73aa59452bfa15e3c638816ed1943f4b7670cd1de9e3144e71943349e3144df3d6388f67dc38c21da6e00c0a0ebcf18a2ebae1fa54e3ddfdb81ece25b2fb571b1c954325dfddd7b6fa6949ef4efbd97d2ef746fadb5decfabbdd52fad18e31b28a5743c80689f40b6972c2e0025b0836e1b449fab7bd88578425c8827c48578423c21fed62fcede271a858e4742ea50a5e2c84b8bb357eb90f7d570298eea8dc07bef176a930aa6163d1a81380fc118e7d11088b1077afaddcb5f73595fd6ac2049f4215dab5b7a6f0a2e2bb58173285651a403bba2c79e7ff98a3ed20128a8e0fb237df4703b83dd1f39428e1278849e083533d4b807e69c73ce39b3108119745844d6d72d2b8e129cba5bc022af388eb3c35182231a8d4853f4fff3b7d6118a522fd75385eda65dfdfa7ba27c5d449eb46feb3aa0a8e386b9eef04fe6679db2e22851b9657ebf8f7d86141f5114ef0a3a6c00df3f879f77f7251bf023e6fb9225f0a8f9e8f1895033420e9266e6e2944ff46d6fe78d3788434c62d237f88598b4db2355105388e92ada209922eaf0544629f8da156857a308380b2cabcbc6d8ff9cb5e987e483a7d3575dd4461d8d3c0fb53f93e9f595678581e089fe176a134843188a2be8f0deefe3117df347e5595fa2f2acadafbca4579cfa1275e0b2d6c0b9c45bd66f57979812d3f54529d5f5ae1a13a7f06c00e64021588860cc4b9a3c81d377d3234d9878a109124274c045d4a4c90ee1abc99026250862fa8a34e9c0e7850ea1d0b4ae810809ed1205165a3412852ef99049a0431cb2145dc43ea02e4670a48b970746a73fa1fea54937f896d0a52b3e1bf48b11ac85fe363dc245114db85801e882901c06173b5074cba6477450f647854e8bfde1a0c54d8fe892e41881470901214e1ca7484185402565831e73ff7925b50112aa033477cf95683a93ae8b910b7d66ddcb74b29a2d7544a843715c1b2d630efeb34bce395759aef5a6f3accb355799c7a03c701a71c098a67381115dd45995555911facc3a994ec88e0d7b6ce8f303916d6b3498d0e61647106d2a99c83a840b3fb656893401d1023d2cbd89e505dc2a7d0bf78696e9594820e5e925e9ebdfec95bfd9fa6fb6cadfec94bfd9e2dfecf06ffe668bfec6fb9b9dff66e3bfd9f76fb6e9310ab4bf890ced8dfa2452d7106de088147d3a3c25bd2fc52c2c267246164ff0b44a246df9cd8ac52f8c52d4140d76fc8146035d9da7bcd8dd9a9a1af48977b0f3ffee304a097de2ddd368205bedc632c633bb000ce089f9f84724fac4bbefb1ab539f3435bb9a99ccd31755bf8e38b7300e737fb9a78a5dfc692e613616f4afecf324a0d7aa63d6741ddae94a599d6c7fd516c96811d446fd15188a29a21f8fa9225a05a13efd2aea9b356b925d3f87d5e44c0aeeadefd50bb3ab4b82b55ba5c79af5b5f6d1a528a6528a78ac198a6af56bedbe6e485e976f415d09f52ba8db1c89df3cc98fb3dc0634a6082b76fdfa225a0dc17115841a457fb1ebcfae656562cb9befabb269118f8867fb5fd87650969ffc8faed6fd7ffeb4a9bbbb5b7777ffb16b3468dc682cf7d2ff34fd197a493d06054be3fef7699de36dd0a60d5fe33317d340038d6babdf9e19947ee0c13e29a594babbbbdf0e709949ef3f9528c62805a2c251844979513969979516d67d8f712f994c251652cb8a8b3ea9bca4c08863880253a31822d5f71e994bdcc195e11ed80f424a71544a679829d69a6460d619f603f7e0cad0da636830e9a0dc94a4aa510c3015a2c4310546e5459f565c482d25966f9f9f5d99362db5905c564efa4505266544852930868a3e8965f807a639e3030f64745092af8a9132533e6ac37eb45a6c00d9ce0f520f6aad0e83dbc1a714c3b77acd1683210bcdb0cf8c440626032bc19ad9bda463cd5c82edfcb2e60ecf56edf4a85ed654e9b8ab5ed6cc2ad88669626fc4f0b1d6c66a8feb2a19238c1b3b3160559fbfe9ab6c255b2a9156ba1bb1124906a6b28d400695cdaa6cb6c4534bb19d75b88f4b5ddea504f2d1c8415b1252343aaf2eb99d1f248d24128dceb2686834bb1b383760377a78b8e143a3bb7163e706cfce3fb34f1add8d9f9d9fe45599b3f48ad9d5f9f292d9b12b0f0527d867484f199f18b0157c768ec1b3f378020b0662d43c263fcbd31626c7135a3060a32d01c4a0f19f1e3c91a3fdfb2edcb45e1e93a37d9777e1a6857fcbc046191e67e187791ff861de3ecccb8f2590fb2f2f8fffa675f298fc9646975f060a346db9d076fe1b63b6f33fd167e915c6f69967cfa384fc20c9854b92eb66f4e152aeec6e5aa498c7644c92784840ee244b92824824216b8e2c4922d148d28c0444a259d37e064195d24be5a965916e1e93ffd36fc9d2ca4eb7b223b99c45da952497c7e4bf6965d2cd9af97528981d90b825dd76fe1e92ce59e3e727ed9c05f3f94b2ebb327d7ed2cdaeaaeac763f28b0f43853e55403bbf25551ea9aa59333f38961e864667cdfcaa9f14abfad93918da4abc90ec1c38d92bb67aced66a67744e98d4ea3647c3c4ae3c1976feeb2c9aefa3d191606e1a9bb96f404bfa79b7b5d6ad4d90975dbd563b3641767cd0fef489203a9b8a3b6c82c06c82ec9c34b9cfbeae68bfd034b69d3f35a3d1edd09735e9b97536150fe045896213c46513c4b54198dfd804d1b126dd364176484fde40832339fa18ef8f7fd38221471f308f1f97405c1ee66f5af4e57139e33ef0df1288cbe3d2f498fc3470d0e6ce7f240a111d977c794cbaf8b8ff520229f1bc8b3ef0bb94404ab0f797c7e42745a05b5866c79a2d1a9d5d4de0667b29d363cdec42caf0784cfe17522645461778ea871ba56666067564c685737337e47abcdc9254ce057d804ee08fb32cf6da6ca63693ab999931c1ccc5714b230d31129263ffa811bcc7aca9c6e26224bc3755833e71edfee09a9b585ceec5429fb876bebfbfbfbfffae6123a924fac4b5215cf3b1313586793c66a41b05e1ed704fadb5e66aeb3163daac69333de605dfa7f5e9f46f9a33333516f7e5b46e67ee1a3366c2602316faf445e1b8053e398a5deefe7848f8d4984dc89026786019466d74a1cdccc426daf8bf16b26bd7f75c2c3b23809254940dac12a19750acc75155d080846841b53beed083ff3fffcca6599661afd7e797c78020e7ac027dfe2bf67abd6640fe45ec13c38073b89c3f671960affcd2d1e70701d568766591d8f32df5fb4276154413b5fc302ea9387dd2da08b656ab793c78d46a351eb51a8a96637233be3f0e25d77397e0940c326a0b1fefa37ddb8bf93eef83813e692d6804cfe3418d7cdf11faa4b53b941bc162962a888c60bc8cd3cce1f7beefa32daf9ea38650ddb63c154358635b7b63a0dda162ddbab8c3affb1577dc7bb1b803678c31cee28e9c73ce3bbced0faa943bfac36dea3087599a4e5763e58e1611e08970f6be941d5ede78cd2e8c62fb81d094d225f4d27bebad746b213e10fabe6317b5714b039080521b4e7180dbcbd5463cdfa5511c2cf6c3987535ca140202f3e058088208629f1f048ea5ad62b8c73e8d8964506339e7c172b91acb2da9af4cab9f041352cc20071e8478bd6ed8e1000c5d2e5701203c15a82e6b533ce8b3c692a4e0af14d8f249953ca047f55c2e9773393793c5908213abe0f2d4180c32d414c05eaffada395763390c8315af2530dc050f56a1e2fabda61949c07be2a07b468b918a9aba613c138001fcbf119aa6a686efdf98ada6b3167853a111ec6ca5cf72b1f1f001b4ebd32bc301937d86479e80a01ec14192aa6bc5f72b0edaf5f384d8f6474275195e68fb57c5b61540758e9b31bd725c006dbdc7d43fddb4469b9b96f737ad176acb1bbfd3aedea22daf1c7d78fffd570249a144c163eadfb4acad7e81cbe518c14b3a3fe20593333ced697d5eea5f1ebb3aa9931db3abfa2cd8d55823428f0636cf754fc163eae7b0b6f2f01eb565eb9f34b7ab1db32d52bf5ad64a8ce25cdc0976a52c9c94d80d8cb03e76458fdc00c7ae5e767d0b24b333cbf256fdecb68651c71ed6ac66ae6e2f04d6656196c7baeccb5a6b6dceaa405f955144571ea0975d7999ffb3af2534c5f1cfba5e2519b4f73c5eadabda95bfb76f79aeecfa03840de8933ad1a9cf420528a5a7ae6e6d0a28388b5a1b69088a89592c168bc97eb0a0053fb118b53103bb05e83f62b916a3c55037e893defe76fb31f3e376a3b7194522f7d4101c671c179c8134b006da7e4c3142a14f7aabfd7cb313ed67326ea507903e7d5d43a040680ce102acd582080912d544cb49205704300c99b55a2071d12269eb490f41b096254718f80baab061d6b2248d0f2d30b09801d7b2648c1cb4ca293290c4ad654954182df0da4a3d51ca79b33b90d500cbb52c995ad26ac1d62a7ea0a684be2f8f3a14f92e0a8618ad07a3a498b95e19658587ca803e33ae07087b23112700620a21b66d82076a24075a040d4350b12b18553481628b25f015476c1c9d9d9e30463d4c70a29623c728440b75db7eb8dbf645d70f14743bd125be2c2bfc4fc481e310383ea11714c715751ee2ec9424e26b5b7176d2db496f27bdbd6eb7db8d07a6824a6228e3e4990fedfa4c684e6a383bba22447c7a362cc3340e87cbb88cc3651cca8995271f29550b7bf2eb76f9052b618cb30223a1cf8cc3617c2fce8aef7be1dbfd408105639c15d8a5779fc6b58830d18d5b964fea8a540f339c450d5161155663a0eb0401010e1020a91ac0ecea0c8bec844784b56dabacce9c55c4b2446f3f04b2acd1db0f8fa021d42c0b7c1b92208c488f9662028f59fcb8e5f1090b7e664e7a957d403e5f65a254074632d417f6e947353d81281ad8023df4e0a27d18638cf10c139b1863ec79175fb3868065bc140efa3431be33a69b9fa69940470411395c0e87bbd574301ad0608783cd66475447f4a967dfd027c383199f0c0f66a04ca6b166fa3413263bdd4ea7cbd9643fc40ff113fb89c578f24b16628c31c6175f4cc3a1e75d7c710d8f883e290d9fae084a1659ece8171bf26837e79c2bc618df1a3c88904b021880a6468d5413354835a69a278c99ffc44972e05a0eda6da99e6bd7b74f6a4ce879817ba007bad96e365b4df6397c0e3bdd4ea7cbdde8379473ce39e79cddfdf33f9d4ea71c7f729d5caeaf3ca13ea0cfec028914b9d7dc97c83ea92de7d9ddb183a211514491c3e570b81bedd34b7e87df61a7dbe974b99b6b89256eb69bcd569be99a682287cbe170b71afd74432a9c0aa7da42b5854e25a412cae17238dc8da6b37d101f448d56a3d166315b1135e5c44ae129125c54101e7739e7d3cba8bffca180f868417ca82b44b6911370a44198d289231329291f95510b9df3e757e2bfafb682720129e56572d3a74eecf35e5cc3355c136dd03456c11283962f5c521938217941ed00a36464821a9ba4503f317c50a55e8f620199828295634ad40f1d8c41326cf00095830fc63066a09e30472f6250379951063484a811e69c615e83868c8d041cf919fc0c9450e28978225c5860714522914854452291e8ea1a149c75b21a2cb5c7a490645708bed5c1e0277a146a08a292ec805a71d220695bae65da7edfbb8b441fcda140715e28f3981b1a893da17a429f7a171b1afaf4129be7ec9e73ce3e9373ce39bb995d007f3a4da1cf995a0d77775c33e333265b123415121592996c2693fdc068b697bd2cd7322dd3f22cc73e6d5be2841337dbcd66abc9622fc40b9179322cc3f24b175341a1826297832951b2d3ed74badc8d0926b00ddb6a33fa61dc900a062a18d00f36a4830ea2bb3bc63639368c437777cfe5eeb94e3ea72cdb27b5d1bab3dddd3def5e9cafe7b94773824459e801d7f96d93aa06fa3c611dd69d26d3a75d4b32146ddf26272827284768834ede6bbb51176d7284ec2a476875b3c9b1d9e4dceed327726c9b8a3b6c72909434ac95a66b699323941354ebdbe404d955cd09cab1e520b126ddb5dae4d8ac996393834428a7669353cb09ca09caa165974d4ecd9a7557499b9c206bd2bd332c0fe1cc202424c660c40813426a35951d74dfafa10dad3f8eedd6fe576aadb5d69af6a54e6da595524a29b5b4de276192195ef0022d72405f30fb012816e78d7fe301a2ec5c9ed94687898d0e135a2dcda58d0e136bd2ad33e4fe363a4376e53a435b47a7e3c49a74bb7b9edbe8d8e8ec3cb4d171c24427e7363a399d219d219c356d7472d6f4d24667c89a74c772908b31d6a5185ab37e186a8f3cf9a0bd7ab266d51f0e3d6c84b64f2bb61897a0f751c73557ba6badda0bd8fe3648c5fc3d68057e9397d5e57939cbeccb7e00c3b647fab0a63f0f6be2bf240b16cb9c35defc74e5497f42cbb33ce9692b7b8f3f87fb398f3019ae9424ff1cce1a61d1dfcdd236b7619c688cf18f5ef477f4e5b5a6e8a9a8c3a4365c54020f6bfaa7e8a047f565a6bc1705687b8f4fa6fc609541b7388abff237a637a1e557de478bf8404adf22963e564e16eeae2f970f26faa4484c2f4f5a0bff86b37d9ffa5b9ccd22b747201580f4fe22d802f8d7d802b0bc7b25c5af678dedfa555421fdca9fc0f22da45f61f9962d56fd54dc71b32f0b77ebd2665141a8a1187e0e2bc3aec227a1e06c90821e5e16d2449248ffb72cda727114c51acb2ae94af8e1001c26ae735541c43e298ee6b68bf99e262ae4dad934b6631fb1870bd463806cef47f8475f4713fe845f006de1b860021260c080822739fc30d422b900820f458021144507224ad0cafabc3ffa50c462693f504118bd479e9508088e6ec213ca8e98c34bcb1bcfbbac1a1be35fc5efc50b6b6992323206975da8e4acd92b52c9cc8c0000000053160020200c0a878442a124c8d2409bdb03140010648442624c361ac782912489511004510cc0300060000380310019439132c407151766a0bd1a507a78ba24b1ef75afd4550f328e8ea21b544ada45587c1a8df7afba5a1ade1ae76c9adaee32c2354ef53cbe6494cc4f6290bfc0c3b8e3f445ef1093793757f4f87dd7d626cc980706064007f5befae2a5e18451721af138a19076b86a17a48f57e0d9c40173aba6b7aa8b81b3ce9bea96724772734a7561de30f6ad2a285d3ca1e1deebe01b74d7c47a6000fa02068f318927899d8a7f4a33a7d7800c88a7a9278442a4d2cb8f52df6a441bbf4504ee7353ac0b48dd278268fb0fd3acd823d8ba3552e959eb3f08a03df349aa0b7ba3a4ecaa0b01461d1beb92a52fc764f2788013a59c5e6ea9c45d653160a86b73eefa270d626eb04bc304a196cc763b82e28dc8da6043611930de438f4aab3255582e372f0afcac40e71718f974b147a89404c35457005d7c41ca8856c478d68aa67caa1f4023e8e9b339adec689cb7ebbf75e94bffe046b703ec53cb411363b9f047fbe8f1ceed31739010aa05b38f2e1d617b5031f7e90897d0a01350a7fa33b1922d2d39800e3b3769b3b1d801754cff9852d7fe5d3303986ef3d4cf4b7bb9997adf449409c08eb0568f51f374b93e63ecc8c6e01968df87950eaa239fc7736d91b02f14f76090a14c0bb9a65cf2e106c954d6ee2521d9cd76af6c0c34757b5d1a15057532a0886deec76c5d7e12f4ab88b9319e653d5ae9f1a13da886e8d17c839822e631497533454aa6eb455dc0737c4eb3f0033a2761d46c149ad7259410a6fa703058bd896e9291d49a5552faf105bde2f4aaf80d834c5e846146cfd797af3ea21386cec7981657a521c3544db810ae6754eb2901097c3449492fb64ae4d0bd63e0b8ecc3435f768710d31c77e4ee5f89a56fa2c60b5894271d71f1c2f35e73a7070974490c4bc9151a530b55c9518002c0cb0fe4b48437eea66a1d208cfba57cc069e7464bee8af0a182e5e9c4bbd932686df89054aa0000dac7c839c690e17d2c72022e338b7aaf430ac00d8cb3a69654de904bbe70a02cda3b6aa5c46189553daf6aa771c8b8371901380fa5e635925eeee1f1ec52f45e4ad4708cca4187735467d5c6ba9584fb1ed264c20173ab1076d585c0a1ee0d74a84e7a27b10ad3071b7dd5f554fa1ba74cbda4b9e77adcdfe635e9d697b76a8dbde9a7e5f4da377b6fab079628d15ec5aa1d8f8abb71c8c86be3c12111d41c5e1a95709cca7138b36693eea3501c088a53530d4ad3acc135b44d8b3934403ab286c268d60457acf47369d830ed3bc9c24e98bae6f0a4e401c44ce054b136f4f36341fcbbd48dbd08ccdee11a63c3b8c0bcb107429bcf0e6c888d360dae5168b67487268445d154b86e8dcf1517ed438b2a1174e0042c4633d5630f1766a80543535f6332cd0da666f327684686936de1539910c5f224a17e0dea0c928746262e71f888965a013a4811d5dad8a5eca2b222196084412306f1c79bb889c1ca74122cecd5ebd8f581ab6e6bb928c9d120244abb1db722ac382b2ab12d2368cd1326b13794acb7f17b004d31d736729db2a6d57a9b1047362a5d8f26d7d2d4b4badb08e1889aa00461b150827cf5826b3c1db886d8fe230635473194c6c5ef34667bb439b52b341bdeabf1e3609ae2564b93e3b4355add5d136ad14d562a1766f40e0ea643d23e92f03f7024bede7804412c5b89fa63a52f380e6cb0ed93f1fc78af51e75b7bb0987a6722a9ecafa1d4fa2d7d6b058bf4adb7bd7b97527afd895f1b253d415b4b18a1670de3b1d7139c0a7324e4e58d881a5d873d1b5b9951853d506a4a9038f1f7109b36e638ebe54901583fb3e4fc63eaf4d0340090c90919e795b768c7c47cf1c8988436e65904d171065a20196fa74b0e71b6018f8c3298e319268b2c9e376217774520f725d9f92bd63407ea9cb287a7a6cc14ae0691ec4d7694d20fbf83b6da1ae90574d274668c6c1f167f6f3fd4aea762fc13b1e219f53df5eaa7e1883807985726d32d80248bba211eaa758c5fc06d0dd5e5320b8a56e237706d7889e3f26cdcbc4c139e9b5fcd762dd560cd101a7e4f917ef0359497477690e4890a79ea0eaebbcb66a72c9009e44f620774fee5e0b2e2af3f6d326f424f2855517f94e7554f20ec854a2653376c1c7cad67a3633ad3705e88a094cb0ebe11597819da7fe0e6d58b6fc834cf429063bab198c6f23eaa26ce1039553a442bbdff4135beaad75bac9df39be694ed20c6e2bbe802337282c5713b5115efaa8a1dc0eedf8536a7ef8bf666ba0a7a39d0a169c57bb0e0172498301bc6aedeb05d5e9361d2796492e0574d25620f134e32a95b7f5dea1ad3f928d4d42e624c3ef42cdac9f0254e82ce0fe1dc52ed340305bd97523500a7721dceacdcacbbaf6f85d10a25fa8b18a0f9f60e4ab5412ec16afb4da3a5427b4797689ca735a73ab06e29f4ae722d60d66133dd421ada99e6ed60cda3387cbd0523518f96541ffc93aca6cfc683bc5af61af4f1f4b4de36d30d2ddc451db3a903eb964aedaad702469d37d3457ad721d1c4767fae4c695825400ee831479767fd2ac00f89d5cda0a7356ca180a14f8f5f00ba2e12d48ff9290d058169ec6d715abd86f0f2ed8082e6c2ad8979711ceb00163050655f791237f4685e38dda60fa84de87a8b40b6348199ea83cc304568eb11b1023d30f78543696182e3c7cdeb21554cf7e80133f03d6ed597a0f054c0afab8d34cfba362c75ef604bac4a36b7c836c7936eea087ce5d71cb67814e97ef72ac1e968910eff91515b83c77cf88727c9a5e034c9a9beaa39ad249400cb7ca4955beb792359330292dc9da27f36f4a4425317d3a2576624db503cefae55ad129f7300fcc4067424a1bf7954cf5f78ed39685c6627aa129bbf25fbd4bc297bfc20f1df146e8f415a998090deefe43afef7b18d54c156e9888d5b335d9a3495d3a6f13284493291c9c341cca1f34fcaad318a1a0cc0337f324fc1e88286295040eae7d0a17cd6d81bbfd7b968c24d104049e6a0c8b233b7a92d685db3e31dc311d5da41c81a01688cdf31067377075df45fe955563162dcb8a30e1c021d20585b1f3ae875ec4f65215c2dba68988397b7cb5fe51e60e9442501d677ca3c41d8f6d2485e09f726473b48db83a5c5fd991050a6f96807931706436137ba810fbb137882947627e172b0550af3dc057221a4ad8ba65db9a688af68509954131f392d852d8607534cc0e4d23bd8f8f9c7d5ec8a8a1c36661dd11093307ae90cd788d89209d22b021d06b38e35430cca42085d4546cde9e610d304a93688dd14a42393b817eff06f49c9bd6014daf255c4047008964a161530a43b8ddf142bf34ca735e08d7eb1d0cbd5c44e03f75240bc1594b665a1bb6ba9aeffe53b1f3ee28a9085b9e26b13dd8199eac284a32bfeeab5e4f3361ea3f67865d13d1473bf771a84e6dadfc3dca4f32d6c1cabb917c3a0eefc11781898754463c44826b8aa0484dd5400fc8d385079f5afbd9c6c1b9c9e302a1077434744ca98fa6670eee238e136ae64ffc007feba28263c47e95e535697a4f9343600c06e526c43c0926deda280c6b3bc0078bedd7a9215bf30ff0120c998f7d4cfa0899353e0496c1da6e3335963ebc660f23217234568752f2089d16420b485e525af88915d18075835ea017cc4b3357a04432bb6f131486d15571a46989ea28ee4bc802c946b3f0e09d937d342391dc1777375139e4d5819b487507df694d19ebc12565c7d07b914b14cf7afb99b5988a7dd0b4a0ce13b0319f48cdbfae55b31f47fd18a324e84d29e142e2c904e5dfb89127ab48332d59f50a6650eddc27dfa028aab5aaa1f3abd968b7b622dec6dc1811dc05074556f9017783ee8f6d1082941a07e9b1cdea1b7fde178d420f90cda12cc599f33e01996c36b2e41486207666b802328f424004d9e2712ea0da7f8a3d4c5ad31fd2d85756a7cc7d19add1234834580240814dcc419b4e871d169001800a8f0e2442610cc8c309eb215f51f2ff090c09c44c75cc955947c4f864704da90935432e0a6808044d3c9e9440f0f54bf4a5a71b3ebc9b091fb256c7c402eb6363385559935599c250ec62081530fb71f8e203a96fbe6503d887b701e7d3f2d1cb630cc0448719cd3cfa4abb5875c033720d5dc7e9e40833eae3978b227d838c1278b4725038f422f3c246b9e7bc8a402aae697bc2b0418f6a528c8c8a3a8eae38dca8124cce99910bc6b12122e3c4c05b4ba1e506d05698e3318ad661fbbad2fd489a4894e4393e097d913dbcdc044086dd51978acf63230286a213583fcb1002cbe7800d845029ab20dc9d7d707e17fdf3a10a337a98edf2830e9ea608119223967ff6a71919da3452130b5c2ae46258152a2e28b8fa61640fa7b6d3b04fd943e4705d2c7ba092d310791ce04fcc303b23551e106f2ae360faca308369f4ad56348869e4cb58b23f6c9ad723ce77efc6a1f4bc5a7b2c5d663d87ad367c5e513411e67c61a9165e612accca7b3895b6ddc37f49221ec4d73573284b82f7c386bd737030590f94098b3a35acf39f730f43e21e0defcd0d7895c2c81de9dd2e96cc4890e5eb3728553813b11f6cf4a6d25b59c43d1a2fae33a23ad6076b2029ad9f02e2f58d0c477481abdbfbf60a2bdb73ac2aac3920d624899a7b5214fd3c940969b54f46583342240a51fa908c76114c537040cf340201572367357cda10f7cbf178b850687bf23c2b2508acc0a4739aa07fe93c4edcf3ab136b7d1fb9f0583bb69c353c4fd57fbe2ca80a9a33e8a8976a9022b79e08dcd8239fd089826388d80d2e542a35bdba874e8618819b558ec2a83be682454cc795a2806d8c010738106c192924ccf352623798b0eda9115a0c33736c5d5655a30adc7f9fddc452c56ed576f0e727b8fd84ec2aeb482b07c0479c4bb89c32a8e42b9f63db211a8acf5bfcbe25efc07963be0f2e01f085bfeedfa2e8fba1c89e7ee590a7f4a778c884a73ac05d05e42515742e084ea1e270aaa2a1fb4a3b8b0094a5a46604ed863166411bbb3ce08e909dc6bec72411d2e1540130b74fad735d2c1f7b76a30b7c026aa17fc993d550a0e75cd14688d325d3bdb16456ae49b6cfdfa5781929b0d6ebfa7787c7f4eb659894ef5a3711857a27bc19ead01d7604e74b2ba82057253d8c6bbd33efd9154b42f8431fffabade9891342e8b8e85c2a3adb1df83eecd46215e99aece6a48f7cec2b0547c76520cca666974177d09ca54083144e0747af5db462f4785f71b9d45e4db5b57a350ea2beaf6db199735f3751a73c246f6e137565953c468a16a638d1a49207a0c6fd3246cdd1657bc8546b8e19e4c0dd2f152ffc78ccc3846a5a303a76925ffccd09ff143796f46577a68a89c15e433133e9dae2e6906c54a621aa178a235492247bc0bce38413f309a7480223f36023a23ac6ab8c345333fa904ec1caa3648f4720524db3a2e993fff49129cacd2f5694b2b0775c9da4d4b04c32d500a379828b280b90d6a302bf5e70ad0c96f9858a9bb0d3accfe295d6d721da54d319a6b89942ce7a1bad609ad92df50c0a8544bf9bd0b265bb859e6627a096f1cd347f036102a650866c581e843e9982f998af9ecc72769a1917e8f882feea796e142bda35623b4c24fd6fe4f40f38826b938fd4951cd4aedf89520ba214d4ee6293e5d688c40b52756e7d95eb670d15cfe4a7886b84af11f3e489ea7e6b7abae8c9bb10a967dcbbf91b631407a5353880d41888851d94f24537439ae4facf3b8ff11ca961e4376a92511b0553d55cfb52459822123815d9fefce80c8f4ece0d7e7dd4d0954a006e7ba95a7118a3c4cdae1e9fab9904bd8f16ed2795d063145eddee521626f210749e3f89f3cae85033d54c09507afa0b8e7c23b274bd98fd5fd9b92dfe6a21eac761a4f1f65b7f44164aae6112613564164337b958e59e5bf6c2a4e21c0682d025ee20892cf9140560e25c8ab226c6c5a60cb3c155abc4ad745e01827e4e7b7e66daeef0e0f9de4c9ec529f73fac67e077cc35c0da0c477d1b9ae3068608e09c2caecfe809ee7dcff248551a77dbcf041e4b32c2cf34388a5a6ae075b4326f9706b44658c9dedc4d50db5dd45f70b77dee5d7682940c0ffec054e56f74a9d1d48c3eedcecfe1ed4e55209a4cfef61486522abe798fbc96c7844c8dbd95e52b45a5ef8dd8d8de525893f1042e72f970a95895b5ab0fcae0a4198a2ad02f0dd2dd7a046064c60992109ae215cdccb1b45893523c90061597990f0c584682953a19b03fa59835f086a88d6322b669625841ce2729625fc091fae3cc5519bf55d87cc49164cb9240a2a87606a649c2bf4a95241ced6e160ebb939227ae25915798c3de46f7c61c0c59126fc3890518d5d58dd4a7b4303627227cbfa61d92dd232f13121ce968555fc8e0ec3ea53ab8ae5c718abfbd7e1f444c10c38e1632cbfa3484f7ab8d1bac840cd659301201b4a9ae82acc3e9848492b1092e606a98f910a94d10d7017bf12a84851eb3a4bb58a5f726275d2aba6547bfc9dbc4ebc92082f9c4432940d56ffb5b8f8c6873a7b4aed19b895a4c687245712d010aa5ee4d6a948409c000d1c5bfac1b83f5e4b80cc44287ca9abcc1ceda603fd4a02ae61212b2af64473ac3d522f7b628c7bec8b12fba44e40ef04d5f32881d62f13c76038c951cd2983ffa8908e54305674f35b05f077b8dcbf91cafbeffd7bf6bd2e3719b6bf43d142c0c3eb3a9098b369b0cb0f7911d49b163c32f344d9384bc8cd3518507fbf548dee7f590678b06e297e9d494ec61b9f0caa5831a57d0c473178207a186612efb34ba880704e82c156fc90f5d50800dc58ff40e8c83f3b4855f221d2fd606574ea082df31d135de8372f49281491f7f41cfd6db577cb9964680483309637a8985f6f77c798e2796d435d2dfb7de1a3d1abfc1dd9f6a456660c48a86018c84132873f67c0087ee43003080a74da97c6f1cf8f29307daa10594c7607e18f890cd1b51cad24b3fd87240b78f998b33a238b4a1be6d9301e2cf3cc6eb5757bc16af1a1a57b9d755e51e29d7ff09d743b951f427f8c3b2efb4bc61f18bc04ee1a83a818027515a092e92879680a83292d9cfe8ed956b26c0b596d824034703e687f02adf76d79712bdd2044e1c91d466a543bdb2041ff6359fc3246424d6f7f00a78bcc7fd15066ec202f140d20cf4a744a5dc57c8db1251bad43e44a1f3c0bdb64969ece4c7c085f7d2b4fc472136a1d305e1591e0033d4e2edf442fca8365e90f9e5f11e1e6bbe54780ba17bc5e171bb501040addc459b4eb9ec5f21509f9d00c1f1ade7e86ca2e2f0411ca25e8db0c42ccdd4f16aa47c4225943c9f0fa2cce07a1e2f8a4823abeb2e533b74bfea0bf0bc4b8589260c79062bd4d6966dc3bc054b126e96fd0b59947b6217d811bda0c4f4bc8a527f2e8fe8168bd63e913847d0cd9eb81a5fb8ddb833dba77f133cd32d92038486cbbfff9e4993ac61c8bc30d60b45067c3ac7ded4c37f72254ee69c07803394f219b9bc0577b573a77bb71d8158a3a34dcdd62168dc1ea5fca809ba9a8f0bfb3a02f0f539e572efc995a0cedfb554a16d5d4ca13cc4b86a3d1a8d1cce234ca6c6ef54935ee20b6d0f5adcbc79e16c60594f23c2283df098acf7ff5f1ada25660fc316f7166a0347e8abcbcc2810f2c65452132104555140b3e3c80ab5850b6f5d5bc059d636a0b5c8aa1939421f5eaceea7943658c807a0dae66d85553af2ac61f55b91efdd09b779c80956eb8719c101975ce3e7263e086bd11741da27894bc2252039e50939dc842d35920bbf92fcb75ceada9650591302abfe4543b93e984d5541786954b03ee67c033016c0149080f80403289b3ecfcf7f1f47670d84a7c01cc40d97b6725cd885d32735cbafa9a68b32ba7418bd9105e1cd586b4570b3c99709e339ac862c7358904ec6cb6463dbc227c654e66936d1927f9282598088c632463d88ae1a723e6bdd506284081b5455cb199e1c556caaf0520391c2ab456a0ef6c3622d31aa299a7a68dc996137608a4e10107a83dd929b8d2036720abb120c79e007cac666a99917f7c9bc7175e77b411e77597ee1f8f8433ec979c402888a4a955b17fbd2a619a2db5a55d6308ac5d3d5b9db28e1c525cba61b7ebd27a09c4aae0d559d6d5c26fafc0d505bef202fce81bacf21939c9c4dc70742a687ca305def397eaa90e7c26ce017e2bbcc30f249e5cda855e3945a339619f503250347b9a420c244f8c6eddb865d445f47ab16a31b669bc8d342029d0f524d4f6776854cfb3094ce7ac0439c11ff89ed96cee71894ff71e9fa7a2ead17e68c11379ff8f81369afaef9d8caf268128ff92777d21832822ccb3e68ebb47a2527b956d9ef8ee837e78cf70c359397b257c7973e1f95327ce7cab2d0e7fa9361895ea8c22453490b3c76c3ef58f93eac1c34af3b1fce73f6091f90fd30ae63c6d1fcc087c4ab3d93b2801e673a369624671587295a6382268312ad1ec8ad46a79e1cd20f7e231096232b6a1fa5ef5749995e470087792b2d2e4c3ce8a896f6c299b5e955b4f1e7e2a8d1793b5ba12a4b70f1bc0cf0263e3549581bff44e1d465ce724e26c0cf985c05ec56f34797bac586e1572e2d3f971b51e09ad46c3f6c81cfd70f28a667ab2b1dce12e036d9ba5502686fc061c70c5d55a3fde15f6b2007cc386884742df27697d4027ccdbd8b5dc26962803aaacebb5bf1786a93674c864c0a802be7b580e3c99dbb83412b74003be39ce9655570b7d34d5ae0943d9c9135c9c27a8859e80a7bff6d58567a75f1194d7c29622b6d7897bdff72da9758965b7ae95af74e3b9171d76a14c223ff29a05f7ea821f6466bd98391e9a7303a3b2dfbb42b06f5630804ff4a4df61054e1d8bcce2eab23eeb501474739bd0c983554010dbb8b0c8253a732fb17b7b7bddbb0c7a248ac92ffe7b6bbf69c701dd696e27d9c4b9c7190cf13b69ffe57f1394bf2aa918bbe0081e2fde566d7941d20419a9750abe42de7f8f9975e62aa4055bed98a24321085849586becbacb4a08f2f38c409269ef307e7ac97d99cee43aa1692b5e5217ad122ca15bbc0f8179bb6b28b0a1c36b843f6a110fa4b6cca5f21d449ec4744bbebf543a4aa91a1684815e629db98fc140075590b65454e06f6a83317d14f0a6380b3be392887e4af815f68ab348d9493237ed54166230c3aacb4d5073afffa620cc2cc65712b429b8ae9588062c7cb3e946fe5c13793443163c1e1cd8007a0141bc0e112786164bc4a599632461f3dfa972d6befe36aae8ff40023b0608d05a92aeb1a2fd145bd0366c1d403cede68559aa86fc0e8c32afe8cc9a9a1af7860be6eea2aacdfbe6c36356eac3e13bdd2a8f6ad38e67d1e579b0d03e8a4e54781c5f4ab8dd9ad7af6753b08f7a30a7ab53f364dc51824853ff2cae44a3cfaee0990a5aa8adfd6bcb8edc50520ca901cbc4d359fddf5eefcf93b7b32a68767c550fdc7c8992e86d1723c3a42b34f1710dac4953362bd07d6f3d5f0965c55b0bae53ed2f9ffdc2747368519d90145c457436a0b50c42fad71c103c13a1afcec81d0151ae0a582e3d11eb803e6def3ec07a6000d6c6afea786a2530b7490af757d8f19b8dcb0a56beb1a708812253e4983a1bda9b83461493eabf845e56e3373ea10a57ddae5d75e9529a8f57fa658b568158ffac501d2a67cb0f53d1b605312b91c986afed84b5d150a2440fdfbac91fcd60781b9e0a9b3476a50584983e5c958e2a6299c5301f04bb57f9fa48dd3cb6001d2efe452ffbdf47c9011a4c5c77811f5bfec4acd15db404dab6279cf9443b82e47ad32de31c7d324d2228e0ca43405a5ccb8a1fcdc3011f0e3f20ade5e8fbfb0ce0d8c4d62ed9446aa16513ba14bcf2db6165aaf919d4d0054b9eb4c5c82d049ae1c738bc3d38beb63baca3927e25319f883a2d77faa6451bcec1868251b1b60019d0a6b253c02338a49016fed9df05b0b8043fd707a59733db7f890c69e68fa439039447d4648c80e67c4dd5d8e97672750142a4f3e2c0846dc2f4baba20b0ffb4272e04770b1ad7a24c35fd1db3366abe5b9fa3197057a86bea278a531c1732b324d5047c7cdc8a47f517a0b8b48d9d57da702137c5fa358332232800bd4b5abad435a7fec438fc36d08a71d173bf9576935b53f4a3ec7e194d3aa88a1a06a0bc915fc894d76300b09f00065068bcb54d62472352d991b9294109b8d59bd966b338b34be412d2b80d93b1d062db7a856d6b725b05b2452e1e1ae643a1135b298806f04269fc4ca26bda9c87c203a9e775eb5d7ddd3a0ad487ee30b42993511ac4bd32cb7edf62051cf65e95f45bfb24644225d66e908f23c27e32fcb84c8c70db58280270ac22622d6b39f993935ae33b9dd8a9f21ee765293149b816d78ab56e11323f593b94a6464a05b25b7da80e9f609f223904857abb2d74c1956088780a5c7b6ebd0423b1ffc5cc3bf472b382c03fae767795c283be78d807f7ca777b70fd9e5333f7b5ff39ef83e2480856be53d2530d3931e5c4d86b246c7e45dd76bb212613a5c3012279dfbbda691fc50d9acf4b9e0d48bd7f65be63b5a6724c46124e2c7eddaed0ab6b9a5199d714d32168f3020ccdfb59aeb449bec696788c7681b3621ca3817486c9b80150b1c6d2c2e26ce51a98f17338df26c64178124a7fbd08d1218d68d65b9c846916a0bb11ea4b8a9efa102fe40c966f745d44a89dd690bf72b58e7cd4f91bca81555338dd463678c89d31dbeac0db0508f872e671709b89d98fce5816195a8198b5077236f50e21b925bb96832189a1ce3ad5699d475bb73dc1386157251478809870d340c14d3e45febe1490aecc2d71526e5c2bf168f34d44367285d18974d54b3ad46cd6a1d2790f8ea0166012bc9687f990578a1b5f16532d73821281746c4c0a0c06628bb12851fc70d74b7ff737fe4906b3679a64ec44b7f30078b5be78d849e883c8b7f404086e31f81bf98200c9bbcc762cf7474b0f2be93f1eff10d11aa02e94031c3287c9e6acc1ca389b1f3085123a6473f40ff185905e51e6391b4970d21e8111b28695d623a0a3522d0ff3088a2d8debe5150cfa7a995322695203b1f2ac018a210716650e1c8a6b64f2305480e39c06ee2657f9e7020d424249a0227480c07bdb7027d1241d04832a0fd53bd8e1fbe06f84445c4f6be13ce564ec4bde41fbd9cccfb108c0cdddfbfbaea0a224e3ad2b25b5a1417ba0bf275af16abd3e218b72f1145ed558f02291f3282ea2e41d2c53e0853ef7094879edea105d17b63dbcb76f1aab0406ce285b93d4b11dbd4493dc37ebaa59c87ccc30f3a7733d86d929a5fa058cbb38b8c25bedb2a80ade9f20376990e274c0ef5411208bbca6810e923f677d1c68520792d444ecaac95df7b8952b33285bc859b8de1039400404db644e043c86f90c19479d8c6161e782dd1739460d4b76f624685a3670d0891dbf6f8bd3a656e4f52400f7b01b147a8536433f9faffee935c33e919b05d17e1128ef37607d9acae33f9d8524145eda3a0d59ae5a20bb85a6cdbfd8f10bec9da7f14d84776f974a1be30e2c52d0b4cd4ee538846e2f22143b0ab820b3de22f4f6ccc7691a5a729d67a41f6b3b005513c65f5b83f166e8d81a7250666ee781209536d6f1c43cbda864afe098070a84ae56288a6a29e30f436b5a24d9f3c6e2ef9d1d0103eab371b365877226953073f7943cae8ef76aa0d2de8522634159d6aa4de2238b29cbb4baf913f9f2b0f0237012aabccc72f98c9c68c043cf58f338393af406e683456ea2dcc3738126aaa05f6fb8c2334825c9e350be024d6fd6f7ad271e4c89d5652384b6df5191bb3fbd91e681f788c0d304840d20ef0be2c7e17390f6feb34d730785542507f722fffdda367b0a6b303ddd7d73592aa6b6aaf14e1d2eedc654b06ed992280254ade84df76b553708fd27bdca700639d16b87bf4ff7a54063a7322b1dd919cf528802b61438b771298e9035137dc59380f8e828d68652298d75822e76b375028d6971611b627c3a8332d90601f7c7bc4107fa0747251365a62f6aa099eba421b636bc6de2eceb926c2a9bb29ae8e1f334db2f6d0a1adbd8195e82cfb177176119ef43df257e743467dc6a431f12a12f2e6461b9120d34dd1acb273c59a6903a6f1471ff5c7efdabaa324762f655b5ca91ea259e865afda97028fbdc0109fd25d9576ccd7357472dd58ae275eef01b306b8a1eafa0b01c958de9ee06f44e8d0096c7703677b90b672610e54a5d1dc085265aa06a9a86010b34dca3ef925420521c10443cc4443b82ab598439c2ba714bf808d3eb3cb6370089d4edeec0a8ee042e9dfb8a5677291bb9d430753b386c1297c6cc16c1674a90bf7b77dd41fa49237554a523442286e5df89955c39a733e11cf6add6310ad5d11b536fd38826317f8d1147e7d761ae7ad634b82f6478a4eaec042b718304175fefe118b8f7e61ecc1277eda64030be00ce20b8abc360da007cc6a7b993da71ede9262c5f49461e464b1117cd17d6aa3e88f7b0c86c27705c0c396af60ed3f938342005cddf0033c12d7612350e06bacdf307b527567d5b6cc46bdc533b0e19b8d2c44147f50fcfde8806ebdda4376fe52c353634946ba08a522f7248095800b5d621663f986828094e696c2f46f8a936c62f925a1145f68048708dc582cbe712af887d79683f946e345191ab746ca49b761fc894c9b52e74801b333eb7b4e115969618181ebd20fe8a355d2bcd804735e6fb107c050cd2b4b5a3123798094693839a6241ae80369a6b5c7d65c0593905eb075a315ee44117439ded624937283cf5afd8caad20cd61df2f9bc5473b7e70e089d0960d1818950495273c9cd888f3227cc22a50e16127b0eed5a1c74fe18453fd0351e1b880d9bef34b8ae9f0385e369083ad83bfc2ce7b0d212d2c37bfa00122c6dcbd83b4e7a3a8d872f8beb748cfe9c69aeb8d6c381d0925117adcf16d39c247bd7e43892d78af980fd4821d65a2fdf7e65ce2397a8c331cc575bd58eed1d14c9c914086d460be161079b6e194562a6b7b9f168a7f1c4ff083d991909ccea248d8e0520e7fa09d7cbee24858a55bc33c760a44f5010d8fc3d00ca7627cb110fd43679962c7e48e5fc7642a91c79894ce50eea1a7a6c529a94195e3f2b8afad2acc935dde1ad8a337ec2f7f668522520e05d4a432a10c837d0db98493c3414058761e0b2b696fd7265f01d96384361fc1731d43e608559a9b578c555da003a6f367f8d804eb8d982020e9f3986b7fa267135a5dfb72110646f1aef6a9e2cb51fb9cd1f4a9a852c435143efe89f4acaaf2f68987b43cd8b062eab665696aef9360cea1036bed788d56a337f1a7582dd34b9737c00033a636ee016e8496aedc139ab763c70418bcc8a97d3f6d0e9e43923f782cf169603c8b4036418a5b0ec03da6dc7455b0c74d2525e1b3cb038b73b7e1142182823256edb3dfe1eec52d750958b2381f116ec95d93eded692b31f764bfb3f729e09ea554269dd418225dd0edcc67675e8a431ae73109b6b010f07a9116436907769b4bd769605486c095c43c32f18b3a48b5b4a15071be2b0e5b8cd04702c9f5f2a541c3cd508bbe6022f5a0a058299867241b007c8059afd1dc8873f81ae1a7b9534b886bb1a3a8c1f62bb4c8b96d6744d5ee8c835d8f35a949e22e44a8b8a728a69948a28f32662611e28308b8813ae74c205085c594bd3a4c44fb90147c3a96b19c2dda1b43d3224b243e4e22fbc0aaf0055438eccc5fcf0279b8509a2033a0d9e664411d984dabc2a017c711219b26821737342f8be46b3b77f2fdaa75df14856d753be6e0b95c0ea928da1a868ab791bba9f6ffd5a32f8638f23f4eb4e1c2c54a6cbc993ac96eab4bf4ccf66cbdf1c2051395dee8769540f29764664999b3f166c51f587cbf70201c5f7ae4b03ece704acbb938bf5da4418283348bcaa6bdb67b5e373a41e1224a36de9e2a79172b4b7accf6bc9ef1c28289966c746355f2dc5796fa3cfafed6bd9622a79cc8177896e6f46927eb3c8ed473c76382507d1943ecbf475e3869018bee4465281cc533a2429547053a04ab82bfe9c9508007dd8d6149b67d0f287ce0cc48dfac771535a82c5ee22a0c0422140443c671541447c5715414c71e617129b7120b6471ce1242f6ce3f79b77026d980691cafa0bfd9168b6dbdde97bf61f0e96e90c3247e449c102c069901803b13b8ef3f0ada4f06ab9deac0a792017ef7cdc27cb1ab707e0e2d7283eceb08f2f67c6f082787ab500a0a8c5da05ab62cfca06c2ea0e4f06f913db33f3111488e676cdfe8c71c3aa0b3efe37e78394bf1b6918b8bfe9d7a35d09adceee3b3d613e004706b5609b9069f1ddfa240e9db8163c7d1bdb9a0a313bf2bed0dc99f1bb5f3df37d15abdc806f37f259097d989c064c37236c829f40feb0eb8d71d00cae5f6ca7240cc48a709d80f8d1146ac899251b89602d8df06050e566292950d415bd47f31e431e8741854dfb9db95d3be9f31849978263b2733125028beb38d1f2a8cc5b89f398bb9ed7a14045ead8d1b8ce36c497a5d3067708f2caef9b8b51f2a3993026aa104d46408bfcc0cfd9b41e4806072b7c8db23aaf006e22fc9e87a98649c53470df6de4864f41cf62f5d399899ad6f7480a489fcfb1f1a2f0468b8d43363d9464ae5a0a2e8dd41f4eee1864aeee5fad99469d898c4d562a13b5c1c0fa96afe267b66e60444800cb58d4ec581e5637f8cec7b8ef92340d5bbef65f6786e6586652d81d2a84bfc57ae02fa28d73fb213b9802862e1e24a6e43032085aa061a0118c3c89570693634d59a5d81bc8eae533b3f3523b35a6ff2a827180f97c7e0f48020c8eca925c6c3ddadea689e21d7d5391a15aa4355374c9444914d4f3e6843f109437d79d58d86e5c1916b90734c5ebf39d711fe1ab915d16da418976b828bb6f41f81f594798e3b895c28ac96fe6f8a44579cb14684bbef1eb978518e0c237ca6dabd2f97d93f4edc2744be33ce3aa3c2f88043d5368688facc82660109ea7a938b0b29f8982c03b1559e7143517f1d5114ed1a08dca3f8dd7a985f8c405d30312de416fa136ca21a9a7a1e6f45e2412c88e831c4e586ca126bd734e2b342c413eecfb6107504df82b243db86b03154b26a9fa93a30025c3807ad1d169eafeed6a2ba3927651dbe8de72253e9e3780e650613d0bca56c2eaab8d55d45065d8d74668dca2bbff28f469dde16b46510b570a7c32b5741520c351c9a917cc1fc025e4d1b36ae1ac90823107f666f43127ee399db4740ec8b01afe58e44b965caa190bf3c2b58d17fe9fd475e8848aa51bf56200b260702e7533687c6cb43ed477d0aaf8c59014bf5df6e0378d4aa31b36343c5aa7489bce9ab8f65232893543829ec51bb9cb0978e8c91698e468e97d550ed226efb2be4c8c5512df6a380fc50b1d14c796785d03840ed887b7fb5acc6366967c3eaab901c49fb98c616a4958deb658786f43e795ed6d9e7c23879990fa51d48ef72a8f8e125f340de2e0a80155109280973a54d15abc6603515ea702dc5be5893f63b15edd644c1ac160e64954dd29ca9e8b4886b061d8a581d694cfea916298aa18e9b369fe9e0e21e1b147131368fa817bcf307d5b30c8a65ce1df244fad50fd1e07a2f7c444a2758686bba1b4743bdebe436eb4255e5089f7a832cb98a60370dd58ccf5fc4885501185c4c00a50262df5169b7d47a241fe5f6c6add3dd54ea3d5ff40c8fb060b6950c3a1a071fb8b9801aec3e8ceb23b097b6b4bda01589b7623f4095db591f374eb92a9fa7e5e0a218065aceb39ab6ab5d065460c5318c5d3529e9f9daea6a84aea8e1a3bd6468ea842383932720f5d37914d08b5e80fd366af677f8fcc69ee522f0e768f9ad0864cd3d0b8a9ec66ed66d01efdcb1d695743101e0dd3bb1e8d15e0d11353e95070b8c0d2d36a93b99fea38cedc4c65ab888435c69b8e0a74d1decc5950f2b76101a42179b6a47794fb50d1675ee6d83523be606d41a47ad37d3699198cd415de7e5e359e86ca55648a47689375b3323ec31969d57cefd7bfd06c4bd70ad6e06fbd475abd222aef32b3fbea0577ac420a9f1c2cde1c97594b4d13492e84c911d573287d1f0885accded3b4967a7b4da5b78cb75430e39cd36010d519d0ceee7923356f3edb1cd3e8d95362a110e4f2cabe2d84a0b054d8188b4d080ab718905fbc1eb4d37f19accfcf375b654ef83b2581952ec86d9df5d5eaf7dd30efb5550da32e44e981de29f83139966e91101e4c1e19210a5539491148369982c3b24b63f996a92453a978e6e3cbc22c95b80c45fb625f5dae5305cae8b93e044f74622ee72e6ce3b1358d6d135686a96b993dcd5d762ef498ce608358c0a6220d9e0b8b496fb4c87485afe6105e75b172712ec2580334083da918ddf14d4777019d6a1c73e18724f7d042c477bfec1b98e6a3631b81c98c01a39418ae7c87856dd44076acbdbe04867cd981d1ad3525bbde49e72b2e1dca07cf95f3a5979c6198e7c91040ec60e3c7db219625c1540cf112cd3976e7c332780a8d590577a92c4c33ae84e50986f50ce115e3413902499a18e41195738e1f6ebc8aa7b68a6f53dcb78e9591ffeb90b86d8e502c90b0b0a7c69a1c51b211851a4296e5e1bc0699ff452f7ed2ff5872474d4a241cc97adfcdb4810f1ff0fdd088c0484780c549a08dd131e7560dc715aaa0c8d364cab31f04bc1f0352efd9667cffe101eeabf8755e63dbe1ac240abd5bf447d96a17ecce8ed48357d3b2e69af7794fbb284061bbfc00e6037b134821b93cda26d9e53bab59375e28e3cc9058aead2b62777333a56ab2233cd6cf99da16a215dc89a446af23d128a0bc5ce07e5dd2e5c99063a40d955ff0224577e240a949ba73fcf6854e887f46a5f5ca6757ffd826c6ff3a8734551298febb0adfa7886426d1389d83b2b4bb38aba7c79382f3a6977cd2d4af3c15e8550d64723902281ee7e8bf0335c29518bffad54064330ee24b3c5f17f1b38ba95fb043254e8ece2270f5a14e6d98aa9ef428c4e153ed402b1f7e26eb70eced661f8ea406c729c41367de0c05600206c095d3f6cbfbf72aac050bf1c1a0a7de220955ceb6fa4a59c7d0f1e664a2f024625e256aa88f338905793dfef6b34bf99c1f1106d9d9b759f23c7e863b70471f64b16a963c912b83a4d759a863b2cbd3e5506ae34e82c1524508115e17bd9c25270b621912e039a2a1c6af21341f1a1372ec7495572f01b84d34147e3b809ec0e9485ed692893989461a093cf49c7876eefc10fe159fd50ae8b96a7e21d0318758a9dd2cb3ba305444cf493936747f890c5f043f502ab964788c122e61ba5a510562319177b87310513902b1ffa4b3e356a5319c5727cc02c3e610fdff5d87f35ac29ede364021a3cb0718345033dbe405e6570fcf4ac1ea785b48b8bf1eee78821c85dbd1b035a5bfef19b53dae894775e40ea6d322acb368e91be6d49a0a8362e7c766258b455872d41318ab979212d07b2a617043ebb8c27003344947e1f7c3690ee123550822e94c284941acdc87a40e0201590ad5c59f150ce7e4d346113513a882197f4ec058a07e2ac97dc47b62ed27a79bc10c5fece222efc858eedf7a6e894361fba6627fcb2273715ae4fdd260ef7e9f02f2c7402519422813ade3c764bd25a522d93df478b4037434d388c53b2228a6c5a56b4f23978f55a71b0d37b79083f9be8f6edc6a7bd0eb1400551150459c172804d03409d629dd0096e9405a4e18fc6d81d2f5249bdc55f72d51443a38872b27e0678dff67d509289b03be668e42182043435c60c4d89948e1d4006642332670192a8886b91c91913c5b5206b69169a17e8d02863c422d5cfe29a950bb424a5d2558937c0464f25735300f2482cfb776af8d9c0e3e701de5018197d2ad70a1bed091cb73bd84a543ef764b3e494f5696a84af8cd0fed7bdb16abc56f1cea401f2ab0b0f82ff82041826bc8640a19d5c13b35218227642ab02cce25bfbe40bbe8dbbfbabfa865a6f39bae7d833b5d266b27004427cdea9b59fc6c37397ee2907facf64f7d5e8cfde026b57aad66356ee2bc5003e9661258be3074ea63666515023d8916e199a3bdbb3aeeaa7d8ae021b312e31f20a6bf133105eb30f98e265e16519482bbea319c8adfb1a41b795914d83c007b0c252a9d7a6e0c67d8bf128042568f46def4a199e58077f0462af84f0b462882f71308695e24476681dca1428e46e5e44faea6c3b03ea0838aae3c39116d16374c8a297649f2ac8b75647f626cae2bafac8be2730c3135cc795ec72a500c14864fd999b4a6ff08e537be2ac8c6250df8a69c7f1713e1bd45967abe42147299ca514540bd3b13561df26cac3f8e0bf7ed07f1b29d23f2ea500d3aafbfe6996c08bec7d6a1353497be43e13358a35d780cb0bd10a5eca74dfe29627ea0fa8213626f217e102a451df549225910c0d463967beef760e1b9d657cddf02c265774fd7441913c616bb84a7ddb751f9daa2ec531581c453e4160cd626de136de02f6e9792ec950863ef2ebf75c7c5189738f870490b16c672251c819edcbaf3811709878d4029182d30ad94ef7ffae71058332689b9d2435805ecc532d60860fb4f45b5b301f784d9f8f761bd644b2e7b289cd37753828cf200cb19d6a02e867fd4871f3bd2501d3fa62730b190cf66a9fc9fc8c84d847f64b135827ee02d989b0ab301f058d954b65717fb44ba337b43f8e6c827a2b74667bc54e739f5dc40bb90d26e195591aaee6456d9c523357dc0224f4752e9f021f5084602a00e1a4dc56f5b6d07a3e46cab6fd213954100b4371cf019df217fc8c2ff3858f5b646e0271a8c3bfcc7174b97dd346b63e47ec276487f4ceaad1e0e22581643da00ca3f45842d1f773b35ccce2a8bb8fe337a7710685cb2e87dac9302f2e20d3f6b3e8c0104bfc65f12595940a88c0e9c34a8d93361bc39edb91ee62da1b8dd5a32cc32245c847a8d19681422a0cae410d6f9d930f6c77a54cc1265763a6752f90b2fea7964eea19ed557f3ac25c83bcea5c8582abe05236fa0dd1fc359f976937b2b8970eaab08236282d30414508d0fad6580a0e45806a0a259403bb6afc1206dc4b04d40a2d86d24a54f17a179924c9fd03d3bf3ca09946b79d3b8a0193748d26b97454204aae9b556f104052600259b21a8141b08dc76748be1e695b1d99f4be90298fb39aa934f033c2d894dcf2f05f095fa84c7c58f6cfd135accc172ea010a7923dc4502cadf65f019ed39e03970c957e50b2e6efb627bbb5724ef86321eb25d0d6de7dc138c94882e3fe3bc060b5fde221532c6cf4679ce55c9ad7085785efb17e07c7b30a07caccacddae073755d0255361da690196753e13bc4f5bf4a11a2446c85405b75380d350ec66ad1893d4fcf001e57571da8594d66e6f5b2e0896d397f9e44c2a81442cd7a5b0be046801cdb3c13517441a267f86cde7a2387fae6ade2303c47fc9f810df23c5481975ab267ac3d1eb42e1eb762962d51bc28d424c8a691319c7862874d19ef0fd0b8fe8775e160cf80ef23015bece2503431a10dad9df89897facef26b29821f55170bd6feb804e08fe56130f83852371d2e89cfb69e8e6365ddf42ce9d69ea15aa06124e0d0f039b714226b1d526df07aa8826fdf9b3dd24a5462094c092c81e4fe0a501afae3061c8b24421dda61d03f386851cc6f068d6fecc3e513d8161f7d3407cf3510071f4b6f2f91ab733616ecc1b52b8c8558e2ceeb1109f47a3c7a2579b34533b8f9f957aaf472b69eee61bc7c45f983b66102311b6c0b5fa537264648b10ae43f57ea5d37d823dbe246dc5361efcaa7666a51aed1f159c918c44704ba29e7a659200eb39a0e9503864496ce0781081397a373e5081f626bb48b486970138a5cb96c1f63b32061d04ae55502e38aaf28700e3ea2bb58f8bf5e46225c181c73a808d409b8d5ccce8ebd74442385a7cc32db765b937b4b29934c01a10a0c0a280a14648fd209b2d88a24129226cd8a24994eb5f26e56aba094af564be84f7087f7ad7c6e63befda70d95fdc9f2853e4fa100a278a7b37029a42286e880343313a479234d3d4d2d25234d2da51afb1355c12b3a4f3f26214a424b32e4fa89fab979f97669f92cdf437440d817986d893bfa3cf93c81f1816a1737bb9f2c3e3eceadf2f179fa49d2496a25f1ce17306154610729aa9c4e5290229b5510e72a0a4a70ca9de0cc87a0cb365b5d6b625a2272597115b98c5c472a2c903c1bd5539b2ddb6cf53cf580e909e3f3949412737315b98c7a6a638709c729f41335f6d47ec9c7501d6f8fafc72ae8f31e419ee37c1688033597c4847d986d9502af0c0100ed068019cc067b8262413d7df9b1fd64f951fad1f2b3d462ff84f931e387a95bed62a6cf1312da10d0076afa3ccd964f94cfcd670c122155f893d4d99a45cd537da07ba0abc9b5e4d2e252720db9a6b8885c565a045d4edfae2d2e23571617524fadc7d6f3a5078cab480051dc4183a09da017068aa9c9a9e605cc17a25b9219adc54e02658a2afca52457dc91b724cdb6240911b20a52f90ae454cae8b2034d063bcacfb993dbf543f0a1a266eb8977dae6a57684949445a9c52020cd653fbe17835fcb8ae927ea47cc981f3db59e5a8f971edb2f7d14c7acb73f53bf5c463db5fe02064c989e5a4fcd0b5d45aadbcc0df60566e37a535f06aba0ea6210d7c1877a30ffa4a485a9a9c577fa32e4c526190a7f6e49662d761221285ff84b5780d428950f987e0169177733c19902af841e04fc899aad0e7fc624110af236fcd1e18eb5168240403b5b504f35fe09363741c9cda0fc945cc97f0bca9f01e55f50fe7cca3f412e0794bc2383f8b3666b82dce3a55bdd539382abdece37419cf78c7c13f4f115bc127a2a0c7f8077b62688c157f00a10a7a19dad09f6782f4810204080ac827a883071b9ea3db616bba716e4f3c43bed44be5c1797e2b894d7f34db0e6bd23df04797c0abc32c48508f10a5e11d2f10cfc074873d910129c609104a5f679eaa991b0345bbdf4b67f1a02fec0c1adf620e04f1ddc6ad7c192420a4d6e13d64f7f41946149a1c97d1c6f623fc749589a2f126addaa83633ebcfd870e8eb15ec0310c38d6c3db7fe6e0d88db7ffc8c1311edefe1307c76a3866e3ed3f70706c87b7ffbcc1311c373896238663f4870d8ed5584a0680e642a18f495ef8f624b3fe09bdddcb00ac1624fa0f466692f2ed243059f976a6222dbc6400529b27df5e13c3b7f390e1db6fa07c7b8f28df8ec10cdfcea2e1db7d0c65004e252ef04e7b0ea8e405de69c70195c0c044cb408913de694f814a580095b4a04488773200a5cc07c8bc83017885c623039d055ea1c164a0f7b8096dc00ed8dfe1356007eeef701e600758bf23bc02864a6842cc740333e5f0ed4aa4f007cdc9d0780620cb3cf90d0195e8802ccb00ec644168422533986dbe1eea8928dbd7bee9999ee8ad7cd11b75e01f91e0043fe18504a5763d163e4ff3f5484f68f179e227b2f83cfd44f5d45644dc91998e848055a93f900e04649a55f08a8e539d9084da6c7d19b7a17e84dd848030a8d96a0702c2a266ab3d047f40f0076ab660361bd48f833f35f0c709fc69fa296ab17d06fc31fa39fa419a837fbe7c7bff70c162cfd74f961fa6ef1f2d473e4f41409f271fa8a5f9f209d3adf611f3ed372b1058df853f29209e24899e9aea67cc4f1b1c83e2d7601f12967ea248f0d22f20de4e42ad5dd6078355900d7d9e5a6cf725eef8e3f3f4ed3f51edb2defe23e6e7d6ae94b7fb1cf9d838b6f2761fa47e3dd34f14ccf61305b3fd44c16c3f5130db4f14ccf61365fb769b1508363f6d683e68ac5508fdd5395045390a5e1bda11d1a7b2b2a44395259b5590759bd512faa92536ef85bf74c51def4fd4b7ab409b59cd2a84fe94736097aa6e67b31f6b4feddb53602522a156a5bc74a9456d8229d83741eb01e09b60f71cf8f9784574848460a53d6e7c66cb199b1a1e3b6864727ea8b478c2e909c0c0f365bb5085ce55e1e55c15dad99a1a1471a55757819ca7c0ce2938aa964a4879374b5039375d05d6003451502d51ef40967195d9d9ba5236f30e8fd205ec7ca5aedce0697704e8a909ed62a716ac3c759e35a40d9eae969c5ad8f223333da59752ea5c97d32e4adde919d6ca6fd072deeddd2aa8475801056b69980329470bfcb47969431a16650875dc3162e0678729d80ef45bf7b8e77c1b5ede913e6660a4611e35f073862c29c350f5f1d6280e8dd910abbdc5f9bab3d5c4a45f3b861cd004ea26290c08494b29a5ad1cc29d7df551e7439cea36b4ddec39ea6fc6bdb3e7a7b36a0357bb6a6bed38db2db99043f22ecb6d4f6f97ccfc35c82d82cc3e7d82dd056d174bda5d1a86e05f736f0f4c2b651e9a84e7c9cbc3239da77926cfeb088f163a5f4891a5f369789c07c64d3c3c1ce31a55a2411669060db05c85c04f6fce59dd73c9852fc40790fb66b5926ed18388940b6b518e28e83c92233c9cc0ab62891f794965c4e59e9d5840e2c74bad122623743f3c9301048d898da7a727bec81ed006185c6c4e78314518320afc00450b1f6420a3045ff4a492f410d022c61a4a4059411b2ff067271686be7b7662e1c98fe20cdde1153d13abdc0e4739e6ad3bb9cce1061ede6ab10438ab9e773cfb78762163aeb422776089c57583f8294df0b3a68a2b9d73e9234b127936988ccf954fa9346d187a1e2861f335a594cd5a8b537a11f4b09942d7de84f552069456baa50373508577a653a973c3fd42155632a19d53be0a949e02e5cb70b7cc9519995012cd965c9a26ccc9ea887898718958dc9a6eedbd4dd64843e8d9ccc94b8b4369786b511eeb80b42bdde39d1c1edc835d36265f5e0f9befd6a4bc67a7fdf3f90b56e621a1b1649e8bd22715c224075d43259283f69828f340968935d2e7c88dca84235ec864a66a98e3c5952f884334615680e50b6b4ca625dc0a04349ec6927dee8126cc1613d9923e27480ec698e241e01679b5c4b6a4a9548a53a9a992a1de01fb743a0abce3c5956398f00b20c0ae06b06b8628d4114401f6e8156fc69a2f2fd4408b4d81d9e2396748c55ce929323cd6e9d909b325bd136652ce66b33eeaa429ad04a58f5a4b85323485e8861ca6bc74066aafd3da13a4b35872850029b3ee715fc5a91d27a594525629a33a8e69ed925366527a9d93d10fae0f5eb64ba66e0dc13ef209e640baf42e8263320ade91e1f81d7528977847bace0d37e59e972517663399aaa12cb10c4b75e93ab20868ca9ec9312dde5a42cdd6944db3257d494a6f6943b954335bfa25991e3c3129f9fc63e60f97b6d82dfb6f34ea8e130a8abb4dcfd249935ba60b5520814cde66cb8c5b38ca97344c4d16ae71050d74fe5e5cee398bf96ad9ddc2c2820b16e339801af989ef313700d29b99b7f8b6d1e25697365fae742efc40130d00756ee7eba1381043e4a20b61b016bc20c4c212627630da420a07a0c0ca0db53a8ec6c4c0a3163a5469c289349a6048c24b5c9801650e315ce8a2040c08e30b972da20883082004f004d2196e08c1041c5bc8180c2a9ce078411d373c49b1c21139ac11154417562441e1288028820d26a12f9ab4ec50c336431162aee0c18827187218fa820a1a35c470f905eb22071f7c6062a826a403061b54dce0a40553f420632627d0486ac110548870412ec941460f4852d6a821c98d052968019824232f6250410d31e270828b172f7eb8ec47547901c905221664982531724245e54c32f18d0517be9dfa0bdf0e0483130bb49f3991672727603ccdb393932edf84020232a1cdb25af2853309f4de4b7d1ea87a5e7193b50df5d677c07047d85b13768029c8b76e82756bbfd0ba97e29fb7f992dcaad55a3a649578c77245ddb26e6d5bdb379a903b0ab9a216ada7a81b47ed4ab9f5281573ad12b7ac5b96f599242e57649d33e290a44fbb457aeb32be0239a316adcf80f6572157c43be013775ab74af60b473b5e2506f3aa2055e82248f93d8084f1587e98dba4be05b8d1ffb2152918f3d439a74e9de3b82dce1f475c0982f4ce53a00553ee71e028bbe7952d807c1b3ed41d61855705d9b13a0752bfe2b5151f2e3b7d76dae18ae77914d88187236a3bbc9094b4830c518eb85911930312332b5050926a569ea0b03cbe99d4fcbe5bc3e2811d69918b185862904644592bc408e2c7efab4981a24ecdfdbeaf26070a9da55a4532b3770e926df058879360da55571ce5264b35be7d5cc934641a73ce5a7f31a3985b8e215f57b6da79877cf5ccc53e824c306026981fdb49cf7468d95c447a2d1349744054a9e327143fdd3b4115db4f223f5db50a9adfa7c1176e28d581858d2cc0908d37044384b102441114242064edeaee6e2dbe8d18e37bc777777777ce4f9d4bc5879fce8afa5925053f9da938113fea8da81ea86041152a327085051eacb05121860e5d1048889914f6e32787d561cbb773af263ec890d4850f34081149244c3065453f6a3fd9b282080ba216be4f8b14493f6a3f1705924319dfdedf37e714e304d19c73d2f9394c11844a9917fc90e3d2679ba32b5b00527145c2406b286ec3823b368d48d3ba879e7eec1826d84f7887c6e38d3b761dce744aa4dd7eb338c499449a9cda4bdbf8d52c1a8cf64f336a467547d1a1ea8565117ed9b0a774177ad0463f7d8cfdfc21c7ed1d59b414dee92063d8ef871cb73ed33c95df5e5a9c9663f425269975b697a62d2549fbd03a4c30eeb4f65e7ea2468063d8c230a3c5761f735cefa9e5530c4fdd75e785a7f9fac6ef8d3bb27870aaf36f5043b13dc8326b97b328260b823f5aa6d6b27274eca555f7985f945bd5adbdf4eb933bea7c757183c93f9d4a59571c8d0262b0f9f850d72d077e191c37c20a3ccd1cc771b23d204925ed7898f5ad2e0b36348a2b6b79e41a3f9de5d06c49a516672893b2c8a4db62538b1d0fcfd090fd7924c303b45333b5387de469a5a3d99aee8198db473f7d839b5c835b330e25274bfda4e96714eff0fc9176cdba0ae228c77194b955d09139eef8edc8709dd6666bba8caad566cba89651dd93731982485c6eb1bae4e418a19ffedce5094bce233626271e4d8020a73399d361d3e91465d73337172e7bf7ec84831c9f110e6ad8271ccaf094b8ab67271c6c38d47040b2b6c3018827146989c381488659c451b53c36b4008aa8511c64a0491e18cf1118d26db6d8e230439acd165b24d515b686cb3d7379d29252c19531a223e38908389e7ef872eb3397a71d903c6ef728576b77734d290d2b9dd6721ccf2ac49c7336cbc54adde7a44e27dbebeeee4178b236538e0eafbbbb69f79cdc4e99b982312b576dc7a52c08d652163bda558ed53f2b3787a8568a4799d6ae4c7987e3ac4bced659b969b9d592fee93a39cf75a65c322b15eaf40fe6a0c79cef20394757b2ad5c5ddaa2c1ecb27bcf4e37e8308230430bca5f22feec9c1bed779cb596c50a298b5043ca230ae257e1cdaef96a3d79caccb086637c6fea861670e0a02c8f3da3f2c0788ec084a23acba305b5d77e97e3e1b14e304c010c71545310a5a3681250e415a32b48f6da94d3942319581c8e164cb758004761bac53fda3bc294227b59a32fadb8505dc1250c2394b839cf5cc2a8c10530ea18c186288eb3cd6c6f9eb99481c3d367271b86f891b544a97896bbbbbbbb656e4080f8ee3680fc906249e160011c2c984f4c3d2069ede9a38c2bdde352c0632db5541eb10b2f9db64be665d3ca0a211b6e640b4fa3942e59cefec79a1f73bed3f96e83efb6f8ce69e7b6f30bc47752d4f8ae0626beb3e1858ee748c6d93a6403ed41431a4f6bf6227df7f5d8f2d5e46061c3467e642719de80e2f4d32f0b0a0b7eba4759e2a78b33c4f0d379dac54e3378f1d36145fc74a0e944c3d2d79698e393b3d96c469332dac10abe6590228d3b93b87455a78a6fa713cb0baa9fce6404fe6abe5b13931cc450e5dbbb004870b1861b5d68d9a10b91981d84a26c41e3020936d272b4d239426b1774f0dd2570810a1b5892a0e2c60a3e9ce1060d528af062892519ab03a209a7fad57cb766a68927537c3b6d97cef757b342f2a40ff72bc8ac1621b58b296a0906da8fd5680906a31f6bd20bb71fab969f75a9368dd5a9d67e7a95b222c162a5b2122102d2d96c55af44b5878f2c236905e469c2ca125ad4a2d10cd31d2b51256ad7386fb568be8a78fd562991887bbe0128ce16750d6ea18cf37c892191301c2dad4e89e68b978a263de2d8ad5decf4c293af3ec7b48bc757a7b3f95a415665acf00329b73a5057a26e55af4dfbead5a85d335eab8b33549f017b1271d9447229031f65d3286ba3b4d5f8289f78ec70f970d9a3b4228d747c9448afbe319830427c6431a18f3c06f4510abd741f2594191fb9a902f111f653babc2f6de27c892d97f3368784a3cd201c6f0fbf0947964d387a4d388ae1c8b3231c61932af56dbe2ad16c4ddfe134e16869aeeb84369970b45d385e2e1c5942c2d1c37014c170e4f170844d6a2be2d3e96dbe8a8441c29175812815f11fe1c8d2c073c2f13a4e386d1b5cab01eb160979b66e3fdd479649a963104e5a7bea3dc29145fd261c9dba4d388ad46bc291873a8f7084fd386f3bc2d1d2844a371c59d35ba008ce78b14d284f5d261c614223cf18518c8779eaaa4a94aa443624eac29105a3b69f4e0494b7d9a2b3a9d3352e704d450961d878879f5d2584e185457ee71ac7c1c40e462821c30d60bcc826bf604d3516e74aae56b4c5d45d2de1c17d42a6f3789ea4d96c5684ac84304ec02dfec9c43fbd57d3ab061abca41cbd4053dcf17e09612cc122fb94108613cc01ffa521f05227bd84b1c49219eaf6298784d7eecd20c09b097aa8eb09b01304ca94524a5b5a99e9ec314f2ee4e9d1fb5ecd7003a6830d29a1b448e4873b72348e46c7b773503828ddeaa1a7c1684a9fce983bc290b48b9d5c80fa76a0179210a6c31d391a8d630c73a4bb5ae23df34e055334dc9273a664a8cf4f328701cda79ea5b473051271ac470efc944f6b58674336cf9339ab208fada5b4560ea49ded3e09526b6d4a824841aa2395e77ddf8a995982942733b304d967d867d8bd994f829786e7e4e979343bc41a25769b55d0cd8dbce15153632399886a8d31bc196f86ca9a642d9e70b8d23d29657fedcd49295d055df76aadaba019f738ae53492965ea4b7deea93e99b30af27815b472ef0b026fb82b1999947b333333771574efcc95595d1a9a7befbdf2bd1428dfeb40f99e07caf72c28dfbba07c4fe69b596dc04bc1531ddf845dbecc4a04d673d3b3cfa3f96a28a5f912e2ec937d12cda2f9029d7b8e29cf3ea5b0ab6f43b30ed3af399bb3293469f3e59eb3b7adfb4bbb661a4c434d225ba9f3062f8425e52fb8ec47cd710ee27ddd3703cab7df0cc81c97e2b7b9093a52a5f240b62647c3ada9a2ded404452ce601086280015b1a5e15087e717d74406977a7522e59902f9611989ef2ea408a5854660c3f398e9fbcc64f36e353e8388eabd2bb18c3051501f22be726f4ab278a85a6f3e43193a3d3bfe9f748cb4f4ba9b5264c13240064c723e52aa803de9975f4e0a77354fc984a8527d8ac71533eb2eda74400eff0f0cec7ee9ae18e6c9b73958094ab5c054a2a9eae20f378250268011ae284385d58423b145794bec97cea1d904d5f41d9f4d4674bba5c69f1dae9e3b0704739a58adbb927bf1a35eec87a8e712e9de5120810168b4e6f9a02174a33bc93a3dcf2d2050f32142f9d6513ef7c71473945690a0e3bff24b252245d5298992b90b22cd6bd4ab3d54a526e792999146935f84ae38eb0974ef305fb40312ac031e935582af787970dc4052fa5523fe11d295df2fc240b068d72ba12e68d3c3b5d41819319a7aa902f29e980628d71bba04350225a348f381607738c3aeb89cb44188ef326c3d4bb66a04038d550a9dc078eb1209dfc205f9308aac3d720690c1e78108bcde66d36cedb10bcd3de93b6c65585923667f247861a19aa729d074452078e51a7c06c4924a424423e31995466b85b3826fba88fe6d11117a655708c7a3b758174cd30c6b85e502de6bccdd9c48277daa78f73d63e87f8764642124d209d7caa61d3e64b9cad76d6e570bc14e018131c6b4276d1c51863b8c0053f3214474581f3c63b7dc43bed524ade60a95b32731f716c7efb16de69f7e6adce1b53226a34671469dee810b5428be811ad724e5abbe614ea39e513c7e606641d4e57a67c1701c3b8d27b65c20e0e977d07872b7d9500955b9f340bdb051de39b4251225a345bb7f9a243f08c835bed4fb09840e2dbc378f2edc4824089666b8b4dd465a751377380d2f28ef520c62dafb7704c8aa258857cd9d97281744936a4d8ce1a238bef37def851deb0c022eaba66b852cee4ec1663d6963b02e0e5ad83d88dcefbe215cc664d3443eaa72937272188f8b187da9ba5931050bee56c7291673b5bbcc31e95eac2b957c205ea2baa2b296f96e0a5dcf3156474e52a57f90a32ea6c53a0c8aa3215c879389af0b7650dca7721ae8fb0ba346bd37ca99cf35aab5e6cf385453ae7558963501cbb796e62b132ceab05dcd92a61e532a10a2a5f852578fe852aa46c8b1cd06c715c7fdc079cf3ea009c33e75e0a14c262bba65bdcad1c9690d522c7d525dee160cfd52518927659e71c4849579738c6cf711c076b91f334eead4f5c944acaed9e9d82d8d225881f2c0cb73e3b05c1a4061514bc605b020625420c1561b4f4c3d151105468576c414489124452104ea05c19329ae305a3a81e6ab400cc161d1177c7331730513cc1054c12528031ea7cb8ab672e6072e8a146f7ec70054e760f2ce5e4f913876e907a5c738a06033955950c97ecb5a6267310034d0e6c529f2795744a2a29d7ab12c3a3935a2b25183e50ca75573baea31da574d290da5a194cd341e7ec593fd936dc6aafdea1cee4a96f44352164d9b8e317ebe18618ac68c1ad4989159c10e2045778684389282e5ca1a2ca9d615a108061228b142ea670c30cd9c8d3b2ad81444443125120c9a833992f6aa75321a6902215c494499f462bf86aa24ce0313347c32d91b572dc9492f3c9f1ea00aa1e2e916c59259a2f1e6dfe3d0ec6d44bd0e6fb4e2c15b416a4b21a5ade9134b4aa90676bcab8e6bcd464713fd040136ce14ad92465825809c7fae79d0e34ed741b2dae75e9365fae741da22b67eaf8f9ec40ed294b737b82fc629fac4b33bdb854f69c32573cefd5025ae6b90a94b314a8c20756200542e8c1c5049a338e87540a2ecdb39391146b839391134e0988353a2c8060c1b5f6bb355c445951399aa982864f872499256cf074b8ad801862065595a38f071952569e3c9aed61a60202075ab743510a88166ce07838b269dc5095ba1fbed440955819e2782c172544514d485152c556040d4a76b0fd50654809955a0f5b0f13743c2dd7dd759dc70417328cceb8f7990b195356400614a5316e3d6cde9c73cec9712e274542e98485f408a5b48636d353a84ac3492533f39c734e50ceb9011a27d99356aeb32995b72395b2dec71213c601fc922c2f486a729674300045168b2539c62c16cb729572b5e32aed581468e9e3f1baac940428d0aeceef91d7c161f55c0d847c5b2725fc92338eabd4b94abb4a674b4b4b2b1e32337276c26cb5d3b05cce582c564f168b3579b058ac1b38bc310523cfa16ca794d2eef64e811bf2324c01a79bd4a73d52f7ba1b47fa946008d2670ef72934e9f9a540bf497dfb1e9dc3fb5acc69c7f1163548a31dfcd6cb265574aed3ebc6595741ed0c8eb4bb676a154453df9c93520a9b1ffdba950d9adee0d85f8363fd76ef7e0d8e9caa9b2a494929a5947295e3bc725cc7d916f9c894e29c737a900fb4b8d23b184fc74472c09f1023725a64ff408bdb1bb871a5f39c94ce1f57f8192269917d25474faeb32aef93a157a552a928e77529c9a24da5c2f1039d55a9c0a4869fcecadd93a1f12c47ebb74a7568a83c4ee5ad40f95dea6dcaf3bed5a74ae5b058f672dc0e8ed62ea5f2d0b8415ce8438c2bdd5a9756655daa38975c2a64ab84abe180ce11fc0c61fe746fc78e5510c763d20904c4834e24ba674faeb32aafce6cf0f5f38ed4a7a98e997e9ececa5de52213e9c33c4760488094f088e25c75ea047f95ca4bd91cbb62b19a04dd2a840669973a92f99ac9d940fa4ce7efac4a9c016540200dcef05495c554ca69751653de7929a7e12882b72c5b4615a642262d56da4df3d57fca83c72a88035a52d262af94b848dac575920c92a5accb738bac786af820851a3cb3d9ac851fa2c8481fb2781f06f33fd67cdde2eb1de354748545c4a5e8824b3abfc1153ffdf210f5b387a49f3d8cd9218e96dd2a68bb9cbd82dcc1947b9f9d76607ae9d2c5cbf2c1ab4e57225880ebf8d0c726f5bb5db6a4e2b1ced823eaada72aafe812feeb2b8f3d1fbd53d639b672f60dfac57146ddb240f08ee57c600eac733bfb136f7d6cd9a6b74c70cb7eee813466cab20234642a9060660575cc0b66deba7d01f30d1c85532e7cc1760b961b178d323ecfce96f5e96fc5bc0599ee68dfbe75eb06fbf05b0b470d6b759d246e17725ec314f102d1ccba7449c4a5682663590bb38e3a64a98fc3bc751b10a704ee832ab21bb7be82ac03714ab071ceb950059c1a767e13569b500576c30b3a8e642a90404608d51649322c2a5f41e6cd8fe7ab55f0d9c26549a602093e346458689c041d1541c8b0a83ea8221b5942c6dcb79e2a4a19b54bc6b9653d055fb6786bbbbc4dcd88e6b54f162aeaed0d081eb922462e09ce89b7be43cb1dadd2a5b3ab55520501b56b8dcbc3c709456fc832b9ba82b3c339b72e64ccd562c5b44bc6addb28abd4aef0addb13f08b2b9a2deb52fc114eb51491bdcd54d2dbd451d1dbd4d07b36357b6b9fde32d45b1aef58e78ae68b7bc22deb473c27e5adef0811d0322bf355cb1d2bd45b9b83cd816392885fb0a27bc41496f4d6ef54f2289440daea4737a173bbb45a00e75669b6ecbc793f8eb8fdab760fa4ddd12a19c0f30d50dfe1293fd2a2f50637b0849fa745eb21782118c5954ec3a8b73ea1783ecfeefdcc550278b65a7395801c9f0f75a973394b68ed2a2bd75aebcc9101ea2b39615d22ce24495e409c7352c02f2061cf8f1ea8b188524e0f54912b7e15a402d362f74085350ca1716ce6db716a75be3c9b746bbda1587c755ae318f5ea3a5fed7c01f1ea77be82fcf0ea3e84e61579b3cff1f1fb21b4f9fa111619422b3284c2888a28cd9711a87b7f3cbd48247d7f4246a03cc9ab03d070c79ba69b9a8f1bc76e3278f2ed19ac96fcf81afe788fd6ae9d6ff7a0f42bc7bdd9951ce75509e20ef7365f39fec4d79c1cffe12cf403f472c08f365b35f46e2dfad072475518d5d3dffc294cbbfc4b8b62da5543b7b578c40db224aaa0bee78b93b17fec017d40df33c71d69929e7867da7020f8495470fd29039a37a65bc18f548c21be897828f792e73f9c2fb20fa756ab0f362ee73edcb8952669cca541a2396ad7749aa490a349928902f06e4bee8d772aaf44a51ea86eb55f1f6c5ccf7db87155292b65eac6a95bed375e6ebe7838b5f0a609881036145605a78311f9708f769432c1a007aac8d2574469ae96885f1dc7a6f4e571c2343d0e98a51a10a776e5725efd87371716db6d9ce72bc775d3d462a5fe03cc096b5a6c362ecb7db8714723505f71bcfec871db0d979ba61ed3c70cefadb101c7f95d9882fcd1bb598a23716eb39c2938b5b0068e35cd178c882689c8d01d87c088be1d66054634644abb461452b42150860c8ddead5697fcf26eeccdc12faf28c6407dd3e4b90dead6ee63dad53d81f1a85a8b62bcb4d86196f0571f4128a0956f50c84790f6059c6213e23c8144e00c1cf26e351c6b8edd7c6d7ab71a9c1acb47ef46abdf38adfe23c76d55882a8b89db03474c8b5dab210ba756dd71c071be8f300589410fd48823e6db3befd6ae1a2fb676d1b88b87b7e33cb5ab265cc20fa65d50eda2f1769c30ede2111a0913d5ae1d210e4d6804ca4854e38869d7c5a9e18cf191e7c325fc2b1f738472683950bec33bf41de2ac42236272a67c8f98b007ca5385630f948e27b98c0f36eee86e5c7ad3d4adf6be69a249ba695aad085044c90854bbc6224adf6e04ea8d44d16431025544895be47aa086d0e20871bef4cb6db3d53860bedd471a5786a337e5a7fb50e3d670f46843681c0379a7076a723d50df411fdfa3179fbd0339ae378a1e084b24131902911f4088100942848848c44551048988a1105127031c5114451f434451148910c969c96c40d6f13821ecbc7d198e2378ea46a08c44b58babfd58e346c4340742b6d1081418ef667b2366b0cb8b838d8461973786c5761a7a372877bc69aa7d7b919b26907744f87ed40115a65f3add8289f9f611564134599cdcd1278d12013430e24effe1409cfae8dd727c86238fdbe6b4d526db1f2dfd00e7abd6aced29071447e8c0030300b97147ef46fbe94062eee8365bbba83fada47fb0128103716a38359c5abb3819baa8019e18ca6d0d8015019ac8ff885a9c374d2d22f1eca404f5f56992da35de34d1247d3b8d52bbc68fe89594bebfce089aa49b261c9b37145b4dc7a9cd970e8e4d0649007e9200bd6ce6d2084049d00e1078d42c6112c20044188100363705e8c15a61f0e5fc00c223e3bcd3ce79378ef36efd0a4011137d46616cdfde6d09313f7e454749dfce55db97767558be554b0a88426b578d3203dfb89200aaa7ae8028b3283350fc0a8ef2a908aaa7449e168556c15aa340793ae78c0225ca942843d2a308458145f9682934f3665876d0a495ebb06049a554df4a4666862fcd8e8f87d8b36bbee661f3754d8d8d8db4e1513363736373737353c363c7cd0dcdbdb9b999b99159dddcdc7c461e7b17274753ba3819fa274f4f6ccf5d9e34757982825f3d77798244019a7dbc48f7a95de3b5c2f7cb45ea17379445a95f4274888b6fbf4b4cfd12929925218753bb6aad766ded62a72496befd82b17cadb4cba85da34ae916b5ababf2edf7a85d1dd2b7f37ccd4041cd40cd40d131aa94ea139512c7d8bbe7237e944f78a77a07a6206bd2cfda69124ca5a4aaa994987a5429a99c545e5830f472f58175484ab1c1362e7f77e158937cb431a7cf94acb476d10a65a85dde142bb588d6292dca0a4555692d8c40b3ab491b00810708f2a98f95f64a1cb379e92a1ac77815c2fcf103444fe98c77643855432ae8e2444c172750cf5d9cd89edd3e777162c573cf5d9c34bd2480c7591f6d50eab4eb3aa9722e65bf7e798aaa4e2d7a21c7d4620a6c5f4156fd4e6f2f617a872a60a1ae42fb2ce15361fa175ebe1c5ae99686e3f71fb7d42227c71dc55fe29c278fc831ee39aece9ee35c268edb50965b9a2dce71700e303d012c9b21cfd6f42b33e46ab3c5491ff99c7ce6668b736bb3b6dafa95539f6a987ae3848ca87150661219b6e7388ee3869e73dbd5cb39d7e5f0d479582a42c73967cdd7e4a22c1c4c38a958548aa7dc534aa9c400cb98cb85725de71cd7759c4f9f1ebf3af7b0ebbace612eaa244b9972550a044885380890322f88c3e15c3e174aa32c3c3017797cb664eb2629114f5880e2ad03b5edb8ae03a773e088c2a350f35586ec4115301753291a094aab454de658226e109ae2a7bbae60b9e08e36057a53c41d91bc64630b14272fb9fc0c470a64873b5a7be70b0bbb6c9ab4b40e716c4a25aa4a554bbb3c975e97daf5b9f4ca54cb6065b9d54a5729ec8344722045edf2d2eb162fbd7ef132fc326e1d4240955134a46cd933a83219010918d8171e01f04e3b058ae1727cbb1d68b258e057d9799213038593189c6dd511b145194534c051c5172a3c4852fae189c8a90d27b87041860b1b329853f4c0c4048682a1b4b4832915452d8b3a90905c08c34516968b2ebe33e804c38a55470493e08517b72b6a6624e144c654544b32b261718615d9c8f36d83125e48b1e1080d29b215a84ca1a38d3027b0994007d9c8a3a4c921a4a112d83004d214a41e9c9090be8b583eb2eeb313d2ec53cf4e45c0f14f5fd3c7d3698b9f5c627f2e59f14e4797dc25f327c771cc71542533fde39d06f2e4f6eb34922b31fbecbd89437af9b1868e6fa75d04102c21225420dadb3bcc88469edc1106932f1f432648a0e8db67444c01fb6a5c58c0c38f5c234269e427869222cf06a2943a60d043dd9adab1fe6bcfa15b5d86287c3f9d82f4756c0d9eaca9e12693529ff6520a345bde45ba9c4de94664b8302623f4ab88db7e8408d41de52c47882571a8d3a7614d7bb07400e926480792ce04470496523aa5945740bc233d0842c7ca1de56ce90026003151a3aa916ae266674e3ce9288878f8582cd6111ecf6159254c4660b9489f9d8600038833664c501162020b1e7208e1054d5db4b810454d8c265a40a3a0d55033a33ad611181229bff86a72e6b3d3105d7c583c7ea69edc52451674522a93fa254651228e92609264d3104d3fea48dbcb465935f081cb426ad25e8d386a881fa5d0d147492b2b34b1a5f6c20f6fe8c055c4811486972e63c6b041d60c70c20b31509c1145136264cd2f58811b4f5cd0a20e3590640d85d251bb52b20bf91a806c75acbe5adc6a19f3000431c0e0479954c310425126d524c79c74eef99049a91038c62c9578a7bb6e4e0bcc1087f35982f4e91d903f65d3cf1d605cbef325bd5d0c4fda38c6b4d5d79ef2ee880be9a2e82cd69115c38c708d9792c62e59d24e982f29876c4997cd824d85360c895ed2c1592080775c33dc13641c1cab2e9b8a74495a4fa7520ec9420c61d7f0f20466676797b4763515294a97341c9b0709e5280ede911df05cd999e171a52fa8d44d9476412c151509008020006314000030100c8784428148241c8d6479f80114800a779a4e7e609d0ac42488511432c61843083000180020002040333302008b518c381fb575648b30703b5ee744a59546db74d9d1680bf733f87f1e3601945cdb4176ee8fc3c1864378a8caab7e439351cd30e563e42dc5d7bc721c30c2e5d886c7497f712f49edd65e27620c715b961c7804cc881349cabc486d51bdaf249f885d7455360a1a15d24fc665a2a620cae0dcbad7ff05b14376fc9305e27f8c20536ab8f5f0763351106c2bef84155da180b3275d54432032003c97dc740085d3442b41d4fa79d7741c8ac104efca4f3f75288badf45322d3c37166d91e0eb0ed6099814a2d7f29b181ce2f0deb1e28bf3fb4fbfcbea345497ef50cc43ab4629ec02d9a1034100f8d23258b796aef7b8db7c49364ef9d23385ae0eaeaabb8330da8650ecb996038b202c2b09c80dfa2f4daecb695bc483b1f9a7e70bb00ffe87ea278cbf085ce807fca3bfbe28d9eeda4ba126029a659d9a83a4a10a6ca33062e2ea31132cf1f420659498932488a3ae3c7680ce447139240437fa8b0952025524b8df2a28565eb3d2fd6a79d4c9fe0d06211796624b54b3e27eb67cb1acee8d247ed87404919d320a9b37666aa0d5411a7d52c408e6a1721314a1d5b7e9c7c120356f48c2dd307547f13b80c65c73428eaa1b2fbc36d70707c803fe4c1471bd9bcd6d46327b314bc34d5012c7af524d755789b82c40ebe2c43cf65a699a82be7491b3284bb190e30205dd890b39631aa5c64245648fea1070d753de74d3e6c60c072b71e813259dff4676b05a50db9d510bffccead67337ffa3f973994edcf03497af8f10fa36147441c313f2fdd9dd0189c5be3874bd9fc4f8058ff468c0424d33c681622bbf9a624ffdd28526e7a97150178087f2e6a3ae17e2fec2c13752e0e18cd903ff0d8b674fc33b51eb90e4820e3b12299ca22428238187bf7f018d929b635c7168d76be516da95d045b94a7a0fbd8bb65f1011a318e8a42561960226dd76a307476cab967ea18d8b832f0f3eb0bf55d2d28680f88c5c8e66cf20ac78b10f042cff1abd4add7cc7de0f80ec48eceb222c4f68aea21b9043303400a421fdf27a6993728edff5e5a2d0ddc144350787878f49817ccc8cb089f60b34a9f75e82781d69b3088033578f09ac3b0e9a86ee99d2bf5d312591549afbdb78a6ddabdea1fc3673cb1dcedc753896b92b7e31c2a07f04c4ad06754af0d4997173e57bbd1884cb64849bc892b91dad602e3d8e69fa630de71222e9095bd8139eccc84edb0691ba2a8598f9a5701b5ddfc0164c1e869a33a6d62edb4cfeb4f5bdea05f1c8343bb95381fb4171dccc61134a32a5a6d3378d0cc7c8f520815ddf6b8ef9580c90f11eb0c0d41ec0af7f22564d55dc88a7841ea70202ee44ab9f36ecc3a71fc98e1ba4e7b36353a04cd03baa13c74edc977ee33b6545ffa903112be92018d3f8f6a84bc59cc238241f297d1600deff980f65902ff87b23f128240e20f09338918c82a0d138136443d12472ea1c06b831015f7ab0830bb082948709d9c972acdba99888b73546fc48c3b8d7b4c7be3d0520efdc74fd5512076777e40010512c797a362f2772612a077e7b7a0b21873c59c32ffcb09a6ab5df8e3751889178dc47b6aefb98a20023e861f4cc52095797a67104310a2ead57bbac1f66c217620a8b0f924ae8f3b4eb2a8b798015e67a5bd0bf020427638113eaafb85e64805e8146765503f12ef0813714ed1feac8c97cc4a1602c41e8c9a296d8b32bb5ab738302dd1c6d96a3999701c76b8e508f042d0be3206a00283e924d3bcf29d7518811961aadf2143d400478159783fa6d7ecc721aa341b4ddebbcc91d02d98b3d68085f7e26d1a316053ad4a722d51d02ab360df4eff4905a38aedf6645bb427efa48a3afb8d93640c59967d8c103d9ba4733087c83287e1fabceaa0a1813f3feff3fb11042dc2aa1978b3e3dc6f6827fa1c1814b9a9eff829f9eeaad94c471c58427130b39d47e50c93e5f30edb68fa9c64058ad1076c079dcb9dc3568f946c3a06ffa50cc7942e394f91b316106f9b5b1fd89668a4312897b96d3016aa906fffcc68d37deaa321a2d090e5b4913b924b0b1d2b87c2c7380f299d4ea7b1efd85398dfad9a5e68e8daea39a22cf1838742fa55dccdca22d613d8f07b2e11e9a16cab5089da8c8a6650f33e3df1316659350cd836464a89d4acf6f4a090302ae1bcfe0a07b1cd75241d77e0e0ba29bc05987d0b4f7b1bc38f857722e1151d5cc601f99a9b98b976e8cbf37e88a7ba933d14eff275faea39984cedb248691f10a30cc08086435f306fb013a07902514a48cd42e2cc4a8f5ea4c9a6fc26a224500c0ff4a7aa0687659b3121e0d52ad403cc7e07d44f4a1c9bd3967d64da8d49d0d48c814ceb42c9ee902ba614e4c7dacad87fbc033388aea1ba93e81e543adfd55689d8493db581b6e42c7fcab4af7d512e940dd74bbf31f49ccfe89bb430f39c918867be391871f7c0d5e8198cdd1156207c40038f0d918547ff130820a2d30df0807cc193b40a9b5301bb6e3dd01a66c0532e383c2f108092e113667414f1c861b0fe490c7f8c1b4d888961dadd61c961190974e65bdc609071d042741045b4d5a40fd9fa3cb3ffca31f77822b4cef9d748fcf6e39f01c7c44069d14d7d29140d3811dba7250c7ecbfdb1e40c96849867093412c35120e6f706e2551b92ade4efb6d7b56558fbca57aebe7954542178793951d8634222c39684cb75a765caf4f7bf358a4ae676177565705b23c1e3dbf975ab208dbaaaee2827d79af1803572e3f095e52a701f82eca6a8d2ebf9a15c641e353280b217bcb2e6a182300e8d61e276c5a984f25fac986652576ca6d1b76d0b47f525737474baa3bad06fd40dd0db8b4190c76a7eeaf9d9012d299e35923d8635f57ffe46513df484b70797b44e04b191908432b4bc3ae6b1a9f670350965ba230a85080b5ccc8132d0c2205cd1c719238d9c724fdffbd9993883b2a98257d2f6057ff44fecb1f5184159fd28276f6365c0ede7bcfecf14f7f21d7d9b669f6a3ed3d02115a234e847cfbf5668f77dbf061df4d31788e6cc7855acd4218ecbdc3ea7451c27aa8450c6311041f4ee8a9996aa600d5fc9b268273953458fd24a78d63d845bd5b4fed17663aea245554a7cf2b70f0f5009e561ffda93e8356d4337e2fadfc74ca1733c587f8052a77b88c1879a915a8ac8ed394aa8337c9c5499f622906f7a243eead027c01f3397d436c1f7e09fc84419fa04f803db49aae79db8722a2a1e8044321bcc86441d24a6b135dc271229e37a2ce57e823ed331d9180530765c547e0bb005be0a1d524410eb3b5201ff638fdf74ae59f458ebfe0cc6032148294befef8310e53e2f65508ae2ecad1ad9aa2efcd0acd9b94065c704408847a6d9d7968c94703b56d01a8d80b97404cc5b01872032af06846e6e1dc00bc59c45060e2f3a62826ddb64edd1046ed46acd91a8d527a6541e8b04d00ed315da39e9fdebc4c3b721190168b0dfd95f669a78b9e6d863a4d5311d2c8944399fd968605f66f670a732c471309e0d57c697818e7b499b086257a2b736859f8a170a9540d632ab5bfe4fb2e081667d8213bafc2048decf45ff073d157b0905179b700d7ba80d47cc91e938b4ecc1b44c1f8473cd5057e6be8bc401ecd28f50cc3037cbf02c697a82b9da0a3a41b9c8afcd657b88863499dab8e032cfca1b687d1cbe31d3693bb669a90920f0f8a5280f34e25a38141b493e9821e421406a531a45126ce79a8721f1d64b348d1843e3e44ebe25bdaa3e7674aed49d9b6edb77cd3bd233fff2768a878770f1685e406264d865e4183db5d6f356485df6c6a4b8e67e91653dc0d614f76b6a5cd7eab0b3cf32ae6629f406e40ba179a4e0610845becca99385e1b02c55ac1ee93edd17a4a2eec2ee89b0f2c89e6c30191e82ae6a34edc5b82029902688bb6eac2743111d6ac4d9989148ac8160709c13b0deffea8146094ccdac916f2982b3cb46e8b6f23402f8924b69287e96a1ff62a4bf8ed959413130f5fc82d61966372b1218cd2ff048fec3074cab143bfa63d4c7c39e624979c21a3fe029fd5401f6cdee3bc08c0791ccbc0eb555cab49921f68d635efbc208a50a2588a4e58d553671f80f49bdeda49c006f34f06f5cd7aca013e5dd9a65daa84bdf6ae631c1ca5f212f8dedd6cf5a55ae5043ff57f613d1de01515331aa3e4a120e4efcfc13eb2cc4aef5daa5d8145b22d257c204351aa6deacc6fa743fd7bac597320f84238371cc46b3394c405fafaa13d9d6998d9fbf143c24406a8e7ba6ab8e4791f8b3188951fc4428bae2bbddf31ff7845bbd9cf0fa387e8e5f2e84482ce1dd105315571e1957a0aa2f971d064939053d8521c7cc99034006052c4b1b612ce330b6d6b5a794bd367fe147575403eaaed52dc3043deadba8bb9e3050faa93297f1d7194f65d6e1e70e03f7276e6e236b232743fff06670aa4cd42384f0830160e56b14d08583f09e8cc4a3b3bce508c005c0729809246becf504c45edd9d8ffc631b8ab76fcc2430b7c582661fd3431bf8fa4aeff2088d8c781da06acd79683418012813b873b8f84af120fae40da5ce65de42c7bf55750feb9062c119a0503cebe79273be5d027bce0f774099343d200b31de35b3dfa732802d91dbca4710747911288003f4db093e0956c556633b32eb16c5d4fe55a8551cd80a2e3af64a72a17394b2a05f61e02be9a5e1b2a29e303dbcd3b36a550674c1aceb18a193257a610235a547f292e13510491029855f343d79713cd3f34e756ce49984860fdff86bf8d47082da31cd30bee9442482ee689ff1ec39c7fa0adc12a5a3a21454a994825a4aa520c5d2dae3a5e2e6fe90e1d2b39168cc9a53e042962304f903af9515678058985f91baa35198429543693495a53eec5bbb102cd3647b1e2da1cf13ca4de52b6392dad2634c59a616b204f8fe4a7198e01cd4ea6b7eeb32af60e1905556e9aed64680f94dcd62f876b721e5beef7544c8cc6ca4223c6f8239ff319108110a2e3e37adcdea025f7f18292d553a62caa96fbd132e0981c7213b630288528fb316167d1dfff83c3d46aa14029458cbaf8dc5873a159fdc8e5af95e358af66b376689549b7c1363bc3357eecced98bb3cf6214bcc610379ec7850728a640e898348060906c4086623b6d066e09d27d78680d366d0b98e10a2a3a97ab9de36c9b8b6de5f409ef0820fe4b5cd117c915fffdced54912e87eba972c58ac39ed79568854cc93b40200e1ec204b9fb46fe2451d904ac03155ece641d0f94eb99f93700ced0c12e5d20e349e3136c2e6e7f00e2f2996d28eca52dbb2b9308a3b483ee7b0b26a744083de9896c64460dd2feaca3c3af0c620409730d2727412113724036c7629493b04b8987d1208efad90669879a6161a5e2e09be0b8e3664f4ca899679ea8e814f7e335db756eff0ec5813fa3971a83062f2567918afbf43d2b19755dc1d02832649a84678ffd9eb6b1433a77b1d62fd0fa55b360d64c9f55aa990021468884723b55e66b39f83e6cb7575ca88e41108addfbc1f55f5daae97d3ed267d7649d61e3a75d152c18ad152781a39a1acaaf7d02bda7b950f7bf2856650fd9ff5e180f5552496984650ace359010c982a163bfed4a8914badada2efe7d7cdf652dfcca1c1e1d41d35a96df65b3afa80ba3877d0bf4a1375117ca9220e63ee003c8ada11d06e823d0a34b089a6c64b5a7e609502b2af0c05b97597d2b6354c3eb0d26b24253f20963269ce41d5ebde401ff2898520158bf403228881dc1bb54d5e8f95e7b2332486b9a137a8e3d2d83a80217a1c495ec36718aa68ab8a657b928e254f7937aa6ffe95452ca59e4d40ded5023bb19c1709f804fd2a0305580faa4aafae769e2d090156bbfcbec546a1b306b3739d5f175ce3eaa13deb1c8620a6c27d2858f7122e778ab6ea01ed4438a2b22090ec64c53f769539c98fa5d11411aaee7e18f3f1829e722534c16410c6fb7ae74e7de1b1e58422c0780f803446b150570e4eb107ff8320194523ada88eca58df744a0b9780ab8c24582cfca2479ad06118de95a0d6dfbb92a9fadc649dce95df7cd0f13b097f9db0267160efe0eb5e6cc5a38dc6ccea865549b3969a3f6ad987243fe14f47363d09be341bad273ec32f2453128642d8561a5f958c4b9a9d32c1e4c6825395127f7eb209e593669765c6e335e0da1503b9c8114cead60dd90fa0a652539dbf8ee8d5aacd24b0e77c6c5e9daef4eab470f954665576fad550c0e6b560658719f80d5ecb462dcbc2a92ca68be4df11324187eafc09d35b2d10ece461e613482b8f7064ec22de224d5bc1933741f6b76bfac3bd9b3c27cf7f325a4d1a4e8e3118edc34724a8eb0420505ed289fc5b4890791b42d50e4cfc39323c8f1d736271e2eafe555c63f538ec4995fd59c6cb1ebb5f4ab9f09ae0fd0ecd7ade199d0cae90190428dddda1bbf62dfbdb41d63cfcc5916d98eb18fc59ce571395b69f76fc42859bb5c020ad89cdcac7acb3b9f05a9fa72564f26d500d8db411cef1a91c5f4db81b8f2469ef4c177a55cdc25b912d5b54bab8755d59c2b11cc5d82791a022c6503cfa493821e41cd4c234f6c25609ed8ece51cd9bdbcf89ac5b14763a971299654f1bc773ab05363cadc5a33b8050f17535988456f87e40b5e23b39dedf3c7338a1e803830fb00a59a992a1dbfebfc77bf6cd07eb1472bfd0b3ba59839cdaac31030ffb254c3ac9b2190cd841259c335a3a2d7e1a0475d37f51feb634cf783d8d3be463c6e83d6b564438227959c1740bcb80ecabd6a4c56d4fc2f3be7be16d4889a9792f8793e7f6e758385a253b1a04da51204fc7dc22feb5853de589cc6c76345218418ba6f66900f173facc88673e2ff196e8bbec1269c1e216e5ee25a64c9ecb8588bd6a7f8b7b1d8ae17f33ed2f9d92379517cbd523a7c8d23d87a689f7543bd6f467eb0435071a4c4e33a48520cd82da8aa1a3d7f837982bc4a5479bacf90980b75d1b88cf5d0c4f4956264c9869f2b7d0d3c35f04c561dcea846f56dae809a5c82185fbcdb33c40204a222613e7e59bccc1b992a73e7e327d524c00f43824fe704bb9e99ada040b00ec1b5f30d0ae1cf5d5a75349ecd79ee02c6425045dcad1ec999470422152b8b9d99cde31300e7514172ab45752b2a81ef0e16259ea7cd56282e11dc7e5487c9f14d37c4c776a00fd0097afcaf7af67bb184e6f18dc9a2ed25541ebfee4d79a4e2d7252dafe153cd9754637ccda7e565c7c30fd41bf4847bb43ccc858a9a98c0f78f4fdbaa9c5adc4700217c7465119c039b85f1185f58b434d072667c13a63843b8d2d9aa20044dba5d7cfd6f2e0fe5f51c7c8830763333fc6673e069b38d55a45b62d5162e2a1f04ad1012759ff3b0d8067d4f0feee6ac478171f9addc89995902aea1105b26f8cde8dfa1d1ac8074e01c5c9a44b1efc89144a005b0b2751473b75584202b6ee1ec15dcfd1664fbfed5ca77e2373200811fe9b04361f8931bbd1d8627a6f69f7ef92aea74d6642c8cf6c9b25aaca935aaff6ef55a26d849f6cffed046224cfae279cdc9cb7f9e350a30e65160c1ec58f720e6b412e6521533bca98f25b9884c038705879d274d3a6adbdffe8f244764c356b5650a2afa37257ef448c686568ed15a1d69c726a95894eb7a3369df32176102d06f3c419ac6635e7becddcf0f98c6b614483cd505ecdd225907a781374469b0a8b463510f5226ae5538de21fa2e09874a22084509f6994bd920dc51d4015d903f37c1663cee521c021204741f09b7ccc41c3225100465f7590a73c9d0a53ec527b366097c1afa20c511fbc99189b5d8f95eb65fc7a93658a098a5d984b3f5a460437219d65632b1d59aea4968945c0a52ceec277fb7f96398dc700efd9adad510f48d5434011308fd39fab81bae86130c874b56b09f95a98f65accc344441e9b06db7782f5658d0e40fe9bafbdee7d7537dca463734fd2c89e91d59f33b69ac4248450882562b9a21dece4d4be001c12e6b981e1cccd36d23d1023d9c090c65d9557c1d3d4ca618ee390caae0c6adfa737dd02691b1654369895bb13719c10a473ed2144b1ef8094e0b7e012a895754246e61d48721e38035e38ffaf33d2faab470d961c2a8469a89817d2417e7cedf6d37f32f078fb89c4f02bdf621952cef3a0a160ba8579d8cb6d48dd6f703411ad0f398141c5578f1f6e31b51a37486b9040357aa69366a2c0401d527e4e3a704d825129ffa7dc1e5ed35d7cd4965d79672605202da169eb538279185a42b7e77c322fbd558abf5a5e15af4dc602ce605063165643d1af191c97d5fd1cb55c8c0c71f34030d92df76c0a1f065388396a9628675ab8671e6aa7af8f9079cd5d34b5bca18bd514ceba8304c31112ca021da5a74a2d8a33815f54c6b16960a27bb288cbce20072be0b2aa1caf32d3c9ba139734baf1d8a16b89399af1f1bc27ade37581d19dda85e4d1d03c144a35420e6adf0fe0a524d8ae74b65b3e9818c3be37d780e11e78c11bffb93ed29bd56de3f22eb2d916ce39c54a5d1c15a2d0eb18c36966248a559dea227a5d13530b836a887729d3ed77628203303562088a0f38f08b103cdf5b32f6de0dd188f3455e2ccd02fd446199e46edbadf56bdb94c22f052cdafc8426b406afc09832f4b0da9990adc5249ae3961129f1339c583940e11c38e46d70a34fd74d6996b30ff541d240b01efaf2520fec7410409dc53cca0ef8519eccc7ad71d62af948ae96676b215576e242ee753fc0037f7ab69056edc60e08b255a0775275c6fef5fd3ac9edb4145cb19417d265d7887e3361bb3f70e9c938bfc4f752e09be832ef5da349742f90cfd8a6fabf66ab4ff9808a143c57baa2bc1164044015903142eb427f0b61ce29e489fc5ca0583b3f77f184954b8160d5e3af6ed867f1ee8e8ff7d9c2e09eb61884c21a95b5b9009908a4ee8b43a99fd5fd099124d434ed189563ccd14cedf91542f3000d31f4057905daf5c7cb67e8d6db9b76b83e02eb09023e706bc96071232d16fa9f99867df2810cd6e79c7acbaccb7f39a5f2b984947d751a6607a8f606420500026470794da57d035622ed5fa6bb5df52b082451da24947a9cf2f1ae61f875c149854d77c60449542093d4f45cd3e1901a6269046f29b8c20233024f5fd368424a0b1d1f47d103cfe136cc08f0e765961a6ca79efb1c713b905c4b62fc2f6bd9969e432c75d33544e70b29b5b3e5b1be2a88b19bf55645a930c426f6b3c8af60e876fb3a4eca64067090ebbef8e8a2d76d511a0f20163ebde43f5ff80a5111442fd7a2fad3979c062ac8e88e33936cdafcdf6b972abf9e37233c3b425e2f58590cff84e12d68bfa923278026e3c872fe345fb63c3527f58ca43508b8a58da0302a0ad2a9b544af999cb4cb7e832d450fc227341df53b52df19d81dbb6db6c3e40d9134a99012ba0d7c0248c43761e8bf2117e8bde4050e6cc8686493698546b9b4f0dff7bec57a0e078b69b6de87318cc45c3f0994c75a7e93e336944f1283e5bf01059a4d5a013cf9beee9af4570deec3caded706e836289d0a6135262593ffed843c629831acfdedd2843d87baeb183297ab14c281f91cc2826d4ddb0aa6c536beaca7b8f03a9fe41889644778e866a471c3fb6598ae6e5ba3b9ec49920989fea34e79e414d4f4bbe2c6717b280fe67ec7515b037a5fe4058e2a8ca658a71bb3990c577496f77d74ae3a3c32d5c28c2b6de4a66cbf1e000afdb65b5fbf162626c5d0745611d7852762ab70adfb1994b64c3f463c3b09c2cbe9a5f6310c0e5ed9b3856b1bd6944ae860417a5dbd6c32402dbc2ede1f800e81728dd2e54f167b57f8f8dcc42448f2798e39528c1e13431680a733704ba5e12b21fc8e5699abf863054ce46c19c0ef6b2066f54ece4fad39f4ef07fa8a5ef2900fff2483a5e5a869469881679bc46781bfe0bc7473a0ee7bd3b0c6d8c8a9f279f1a387396cae5715a2c0b9bf2327f3eb4f88a5b95cf077109c25fcb3360cb18be5870abaf2404a3610bbfdc99cba86ffb3a1bf8e790d0edf98c4261614fdc035c1c7292692dc26c1b690d874f4fd07d7395a8598481b5019ccc3b4e67e95ce8a61fdbbb710ea6f559f3f61810b61a8fa1578bcb5568a0f6c6dd4879208452afd222e9a15b78ddb334ee552d1acff70596f6de43508199e9b0dbcfb8f39b1ad056279aa8e24ece7730039b391702bc877ae05d531e621bf9d5975bc9f3de0a679f72984046691be6e87c713f227baf7ea7ba3c50c312d7980d62028b878426610a077dc16155dbc808715d5b95fff773231fd1ed3427865c99b2708a4a75d89914ae17a714cf84dc4250cfad303068741d2b023d38a36bb6f478a91b9d568675321119f984d913607aa1d5c8be3efa6e4b52635c222f93167e9750f7cff6c83879da80755de54cd5234e78967371559ed37fefcf55fd2e27c63fe7cbef4fe00949e48b275ceb293e0673113e3f666703727afda784cc641bc9b201eb3dee5ec32fe7ccf51fa32d5cbb0089c47341f9a61ece4167ff0b3e6708ab357fdd0ef990821cf71fb5db3916f945b29311de050d740df004e02d8f2a344320bda11ec1b2bbbd4c9554b6463b2bb687d212decf1d1b4a1f5ae9f6abd1b5543451cd4d3db9e7141ff80765025050a9d69d93f75f0468502b00ae9217620628e80ec5f15b4bb0fd61e27f47c10e28c878dbfe7ac1bf16ed4eba8d203233ba14ce744261be1b143d3489386bc4869346dfa06404baa7de5e1d1a5fd26cf45dec6e72534a3582c061ff9b56c8aa31bbb76e7452efe5a6c3874a2d24f9d103adb259dede370ebc2cbcb9fff9a67086184d88a1cb98bc08cedb19144d5fa6110101e605022e1939557ad4059f03665471b3c02d36837162a6c7a94e128037a3a60cda490b47f92f8eb5953c616c11357475d2c505d1610637f5a9f95413de165d8bd3bca2ac8d5db03274e9da1417b89c674be7d5e68c4ac52a0c2e5ff16dc08ebeba8847be84e29578451af9128a7220a80a37b4ef950d7e45b7234a465470232d3252d94d5499110a6e365f2712459fa84a2b3a4a4dcfc62ff853b1b64a8eef8aea9a815854a358204b74cb641884ffe5350315752e23ae0331006279c76b6277178908d4834bd64a31643d77238a4acd72917023bd96156c15be8439594c7855c5cca958c324417356134cdd43bc2b03e766800e0dee2a17fc40654778fb2fab0de10cdcb56f3c733b8eb4d8b59b338dac4971c8648ef0efb3277331539ccfce9c35a8fc546e20816a8dc7aa35a4ab3596cf371c80dc5c5ccc817f51183d43e22908c1fec301e62e01e6a93dcfca6a52b2426599e61b3c035e00c70d147220500a2a3b9f4ed359d622561160d30cf22c060bfb519be2b1f73ae62685d26f0ddd927ff1074fe2278d44b70239da95b569d085b20a5ec6baddc4efe39eb73c98952fa842927aa53a61a5c590bacfd248de306ffd67df6d4a64aa853c8a262b5707d8e21f2e0a021c5894cf6c46fdf3a93341447376e21e05a45509d34ff3fecca8b23832c3c7202bf7f7a4910fd7ee561ec3933f1ca07a86966a12f207547c0a8b48e2ffd49b00a6926e0432f25f26e0820d14ebdd66a779b310e51ce4f8356af93b7f279deb3b10bfd904435d724c6a8360b0375b0ce4c8337fe7892eeb6977d979929b535cbfe099490c9631cd16d13cf4d72d42380aa404ceaed6f19e995ac1186265d45c350513c8c98bfb79d016b119178d95a5751b0abd87f2aa2a6b47b7c560350695eb5bc998f5cc16259b2b76c49754ea164ea3350628d7ab053aa15634de1d5852aad60209bf9ff1452da49f6231453c8d567b7256a71f52ac28e225bbd4bb5aebcbf0fd6a2191f1b1914fd24e2d888f1e385f5122c3b40554fd565759be3d356ca67b252404c673e3786dd2c403b88f75e1cf6900ccc23d66cd30361ffe8f70521fe93569b64c710896aa6ef22ca3158e9d08c7928c33846741b869c6f30d087110bdb873ba59776aa4cba60c1198bf8da3a272aed5aa4763d4f683d3b54cb7141f38afce25e696f119e5dd15d9ea1cc8741c544203ca02a041fe33444a64d53cf6ebcacd253a9851859c2465488bc180a700acfb82ba821b5700a9c0e4f794a00948f39c17a239ba7d3f2fbc26954fa1b26047625e867c83e5a5f0e95dd0bd0837a544618dc348d77499c23696e08a1cdd02c8a240104bbc0c25589a93809d9a1125687f8a04c615c1c0a1c3ebf5b6a61313aa116d52e466ce6cc1170b5fc3bcda137c3246d2e393b85817f81e2aef085040d30912f3a548eac31a979ad6e108ffef54e2882669ac71638d9c045e7870d976729c3ab0b0790926f15679a19d26bb8c121f1f911cc900543e6c1851d4b4aeb63047ad8c86b09c51945db01269e5e3d8c1a13093b2ea8afecdf9e6722eb64f81457f67dbd4170330280d9aa1a0a1f37e500b4555b88ed83b3c13ecabed3f48120e35a3ef3244e23fd4cc2a31cd51d1f15dd4dfd41d38941ab80335dbe2798ab1e4d24762e7ad383c9464a5a674d6dfecf6b8c390eb4b92f1a85409dee788d4c72c1152d3c0bc8f8328aacd9aaa6d6ddfd201c283004366a0f2df7799419a1ae4732df08ec6329fa63b5a021ba2fb5c682099e0258a88e4e40b2e4563515ae10546e94c2502335575f1324068c5fdcf97f2aa6184451ca2a053b2fc60cef117e6d8fce906db061cedca027f024e1c815d7ac07d44fb125a28a735700dd4b5abe1985b1475c821b64ea0cc4755e3446373a21ad1d23c2eb202baa7dc2241fc23c3610514322c8f6a5186d227622725323f0008a5dd699849295f4be6484fc9be7e7834d9649be5e9560a344cec6912def95be64299aaa85eb1c4ffdd4b4d4f1f6af021335afd6129ad5e5bd35da1be8c74d3935e857dbe09cfdeb7b15725aaa6be55f56ace7a8bc7eac44a5006784600d68d8a34c14e04561a1739818a68d86b4444081a71d869588708964d95a17f0b6daccc08a08460bd311521781103dbc64498a013001b8d230482dee2c4eb7f1a95b311eceb44bce3e1d9140e6e599d9756422aba21f553da12fae86e4a2a964a6bd9a194053eef89f964d12022aea9e902ea08e9df13638649c749c5d9828fa64b9b56f3fd08ffaf386bb82e95f092aab42ab333d28c205a3040498ca6be240743e6a0aba4e514bc6b1c98a71ca5df880a1e68b500138c6df8983b1cee74d85c5f045897aa54bcba23bb47c97337ea301440e1feba9f351bef845fd184d3a1bb6db19dfd82bfaeca220225be5e80d129174cfa30aad0eb3be76b9f86de448403ccd50a369dc2f872fd75435bac3c7e67e35981f5a59406c94fafc2087fa44fd8ff0f02a2b78be44a699d08e7671bd19fbaa6edcf344fe41a17462334c2c71c1c150caad9566398fa3bc0d807dd51995ac21ae81d0e410445e0ee588e008f59e3dc7cea095b3fcf2c515df224db5b454d755f4dffd09ecb954adf120acfdd1103cf741c0efc7820c6d67d60c5bcb36f108c5e34b6c7d4a650d57c7d1f9570ef8cc302ab91a037333ef05e7b34193f60d443672c3c14d223d2fad42f646520700451430dc803aaba04c53bc199200b58840765ec4e38e6f19e9e179f67e1f2512d603a3329a6ddc391633b5510f61d36c8a440825dd9110458d50e0ca12192ef24b099dcaedacb90ae5cf30701157e781a1df0240b9acb74f922017d0d9e818664bcafd88761aed9a853bee41c03fca0508080ad895ade5b01ceb27caba8aab3ccfed95d2cf525c0d241c73f8192ec02d2e3fb474ea35e0b3f3e45d47885e58f92af559c779c70f90c77bc3a3652e2419537ec854b8f6515d447af0ad6be9fe5d344e82d1ab23b551dff7cb20cc013331d1b10aaf736e6970a18ca62e291979f7a40d7e04e777d1424f1f4c2068864103aa141f709438ca9c58e57f130e00bb97dcc12e72bab3c64e48723d2605c839b089b8fd5b330a38c9fd9016ee0f9280512bb2b8c19113334199f927f26962fe52bc39e1bed518f785adf0cce1e3587db15d32363dd281125db9b507756be3f67ccd0e95133e3e362dd52cc7961b2ce69de0a415876a23cdceda53583518852eba74958e9a6a3d14a4b12068f85bc619f27f32ca9c5d17fd9e6f0006357c430ec559a81deb1e177a16601e3efe9e8473cf0fb5688f868412275f4bd99c0fd927ff639780ebac27f75b04dbffa731892f6db2e0d905cee153c9178ecfb2ebf7154ed0380ed1b4580e6c424dd1d34eb2c5dd19e4d1bdd65b228376d08ea35e43f9152c840003b46c02848301ed9df2e340a8185a2400436c8e2e226a6a0e5cf128404f51cc141fe59b2938530d415c8cbec91e151b7020705b6a7e6029ec15b328ec62160eb2008ce202a7f1dc1a6e2bc05b4786cc461e959722ee86a9f07113c2dc109e128deaa69eada03b7f077ea028c59bc4533e8e43ddb1a1d6213d2384c62c26b253b351038764e5afecfdbcfc90c961ceeda12cefe2524f8d1a46aca15e4d5016aae6ab2eb4eab74b1266dbb95b791728c65b97cb794f2cf1fb8af53eabe027431813370c8617e0e7bdec37b5d6aad66ed02eb1f10572910561561252a85df1bdfc259d23d46e09fee0635d7b6ecd1d8111169cc126734e042cee72353f9b782b6d4695e2226d43d3ad1ab630b6aa73aa1a7d03d2c2ee7ca3e3f3a86c971f436cb3655dda71738a1a10b350d6778bc8dcf4662f3906f7ae8a7c7074465dc70797b09d74ac479a7a2e812ef2bb029adfc370473d31388a55e7d9b1a23297a5c2714c47c00497bf08c564f60e633ebba7143ba2f1071f2215bc0b8ff67da776443d6324203e50b9ccb87d683b0afb06da05be1f23994d531d3f1110bbf635809e7b5ffe2e46633d7708f0338dda6e40be80979c1d3d713c2f21ebfa0f8dbea85111476407bc13172338690be177d16a03b04d97433a3674d2d784140046352b11056cba60def56fba7bab5aa7d41fad2f1c6ebb4c3fdab040b920dbb15427bf779e2b5e85f2f2fab036d41a6117bcd258a9e7be6ebf29bfdf064f39404cf2117883234cb8dec315dc53fdb801f1309b7889725d2734514b72301970cd9a663c158f79a9a2ba2b9e0d13feeb7ca25982c1f0d768845cce4d71768e67b6f2b0a77c24e0fbbf4706b94bdaf020ee1173277ee5184a430aa9237d7b4b905677a8fe86edb77a1c40be06e8145fa2191df7609d060d0960c886ea97510beec072c321e6629b2c77bdfe80ecfce0d2aa2edc6bd66a6f1b794c4634aca61e3dcfdc7ab8bcd76d3b00fd0102b9604ec045b96bd81575b491056aaf2368d80e1797f60e8ed4be81cb0ced8e5b32f2302f5b6939e02e83099a6536510336c3b8c6f0248824972b8335322741e8642c7c9b1c245c7813afdf517e081d73802d5660f5c35c2073a1318a6800d19d65c222b544fe1a3acb06a21c2462372ca9c1f14d6627d690a81167b167770766f0cead1b2814b71cef3a0b555f391f611d8db3a72d80b03c75dc5a9e912f0067395f88cf39f7672dbf6f02ec125846274e674d15f5171edb0a1dbeb224422b55ad0297fbffdb453408cf3eb058a04a85d6e64bbf9114b1b5f027931d063e3c049f214770d9a42fbb9211651f98f5dccf06aba7f4a31c93ee92c5ecfe9988b203896ada622fc5e4680fa4b4537cd99da23cc0a837da0431c4e809aa9e4c1c22ef301a3a32258f62018eb6249d5ba1052c89500eec777472d8fcd90148001d3b40985ce3ec3d43712aacf6b1ea1a458a5553d1f1ebdc1f76c6a80c87b00b766ecd25593f8a8f10dfcfd0688874efccb4ab83738e25ba8f7aa769c1b700365341c70b0ee067ac22d4cb58cb3dde6ab0b670db88567cd765b7a1cac309cd3341f8d97d10df3b07503058704fa2b050c11a2edd0eeb71cd187b0bea5cc00015e3f870497906d49bf4b114054b546e08c5b782360119d30f68fad369d18072c2747d597426aa20efc1495259121c312a2134cb22386146a0249e37ce94bcffd2b3fa1b89a32872a450c6deff2b284eb15e789d6e5568df3a5937858a6a5df30ed6edb774f2faadc77dc321f499c76b7e80a056b914fefb64fdd419adf8949057eacd4a54b2e4ea7a7c2f44a480bb04415cdf10d7943e446fb873f598404d0b2ed35c88b1b95ccbd1b7e9c20eab4321a5c958884989359675f5bbd9ae0e6f71e6d9d9a4507ae0ab24e8aa450346e0522ac5e1516c742f25c066ae83229479731f8133b814258d935f2dfb57c7f95a8b644c1000bf372adc559530437c868aa721d50431ad03923ce10db9a09bb2f92ccbdbd0e47cf18aa7c6fc933defb97ec69e273258c314c56dfb1de01be3a41f16b2710a5a717f10fb4bbcb9fdffda3241b3ec6fee00fc125f6f96204ab52a7073a48748111e6c12447dfe790af89ed0fa5b6c458d9a187d56fb1ef72fa5a2cd425efe7ee771e3763d4d7681b4144ab0bff10b970d900eed35df413a9e182552f778561f1654a55c2562ee11132c471f588c26172fdef763ff6d1e25953f3c132e8dc0551af6fc3cf452dc62fc2eec3a49538c9eb4f4a304c1eccf7917164598ffde51bc1a227a64a4e43d5464be455a32173a0431aeff0064646ed02c5abb6a5fffbe024d71f3840909ad6bc26a4e8c120cf267882315804bf52b322b88925d0b4dbc9c20af6c17e90cddccdb4a99449ba08888ad1b74a8504582566984a7e9172b322c6e5e11a1e0fe9ffcdddd34a8313e7d55d608909355a5059b423747809a837ffb9688e950cc4935922c0c37a95d4eda52e998d7ff1f651a1c40fa66f10061fd730847f2fbcc85e70722a07ca26d25577c28c48c9154f52c78b49c4911b4f650218e08f6f5f67627270e103d4c7d41b1098b4d0b8d2456d05177a54b00c48537392163c313242f659e1612032b8d8d4649785b19bc301eff18632327a6ab83a34f452f3782d2286eeb88e95e4a14e452c6a404716a3c1001e3bfc2d7d6d7e8c86fcbced271f617f813e266ac4c4d2fe2200af4088b2ff2aa712e4fa58ca0092a37ef9363414563be783c60250f59a06876ce22d4e48b5aa4562d55ecd697089bdbbe292fc2ea9a02cc5b20bfceda679172e06fe7f6dc5dba4c48435cf36411ae48c8514d25870bd847d1a105142ac6747f5f4af371d80960cb6017318ecf0428723e717e1c37f3abba461d510a8aa28b6beeccc2be818b039236990eb7032a6e06aa238f1c9085cf19a5732534acc7a0d6f5917a898be430120b1371b7a1980f7eff251b29401d8fdcaed811965d2fe4080235638fcde074405616150762d79504b8628e4bb14e813de9a29d2291749b9c88c5ea71b47aabdfa53f112d4111278a88b25291975c389fe0a1f3e15d53a2171ae12086e25487a3e20f23e35f2f73711720f523141328580f675b00959643f1c007f0e1fbabd415d6ee16a329e5bc66b8878111445dae6b03e18cbf9de750929738ee065c1e57c582f6d58f29819e18648479b5bc63bc1c5697ad31ef7823a30f3c8caf716f7d431a59086bc174aefaf6ae92841f97f4ca01864174ec3a4e9916241a761c04ef06090fdea1d24b193a2bcd3dc1fad5d3d567fb944a66b40f5175930c591c4665c8c2851543cee6eebcdc0f298b67ecf15d965ac709f376e3cd866b203a2b8d3bcffa505a54384ae1d25b4cac916b8083739b3f67bb39269e431064b003c2f00295cfff35171a7e37a5426a9a623ac4cbeda97a0dc83572a6de8cc2a8e702b4fc07d0c6f71266260035be97e8bc52c51bd25e180afdb2be4b6a2845347c8529627338587be76a07d71573ae689c396c70120d290148a7e2133edb133fdeb69ddd94e7aed71dc7d1014081a7fd597b2e24770b62f178e4c17b624d222863335c8677d95e99a7753a17599880e778797c0a918867319705a7a55391871f04f8fcdc6896e19a5d504ed06e21e496daa8273c80cfb64b3b97f3400f6117ff92931d0989f3d245f47d7317f9c1596121ccb66d068d3f3bbd68056ed2684f2369f705806453c58aca2bbeeff0cb01d5672739e0884d03332f14628650b33d9baba59ceea93de55d09c44082a96622e52865bab581f761cd06ef79d9b07f7f1ac88f3d6922fff02b8f7acabdcae6863c39b18bb26fd4bd76f6dd2e2b8d3c6f076fc3cab5d0eeaefad4ca34a10c9eda4d04865b7a24a46567093f93b914087b68acdbdb0d7d4bf0923267dc8d90fff83a0f0de507888a077acb371c964d6070e8d6a72f78026b5531dcf2d61752da83596f683042e898f98d3e8d10c8d7b14c41b3656ff90e5fc88f0c560a9d2a21c290839a0bc5c0c0c76f0fb429b5f945474a1a4cc93cb90e29cdeb68b05b29ec09f695976af2ffdc9a5789fcdbc32d34f41db47557f6028279af185e44c8540e71e8a554e1cdf7e2f1d7046993e4f9940b6d106049e97ae68ad832b186dfcde54e0f183ecf0dff2409851674b3a78c4c583985f911382442f209c58df0e8717d541fcc58341772ad8c9ca46fc7ca58c407d217f2646bb7a340f4c62763387eb6853eea19ca865b4cc23e52ea1d3db602971129247f1c9f6b11b0fd4962caf30c78209142ce1b4baed82d38161b75ddd99b1da093dee5a2a057f145ab4f53198ead5912676dc86a1d049536e85e11bec0d635da4a90d9b376a722cfb08a5d89e6fd094377526838d6761b8a548007b7eff8d80dd2e476965091f970afcfe6b013edd983a7c4559320d8f4c202d721adeeacd9c8d30b8bc5d890c68e059a8cb08900695563f1ad9b2be836c28a2776f31dd1e41f12559e2853fd431a9791216533662db178c83a97761e3e43676bc0ebd0085935fddcd0d2d040f6eae94ff54fb2237466a6cca6831f48eb2ec4e301b4004691b0378a043c5d317356675afdea72fc118fb935c96ad3628890edf39a0abca831a6d5c2bc608626cc33fe93b6b9eb41d074d4c5e58da5fb7884e091f0ebdee4919a28192ff7b791f8e12ede62771f46cb43fb1fdba9be67d6136c539c4576c17703432969334ae42ece264d054a52000e8a856a63029be45750a83b25b56a800cc3414552a34bd4c251835bae6f8bc52825c4066f7c56e7f63a67cb5f908de97bf7615f0d0f202795f1fc474b43be08868c154ca2d283a5d16eec70cdd4f26b796b0514db3c30a6d81013e62ab456da1c14404034213a25bd53f41b8bcef94c958962f18ac1b11f8d3db4f63e45de81b1cfb50fb296753098cd5c1ec97c923d407cdc300e7ce0f8c0ae00582b7c3e84ae979c31ba1bc308c014e23b633ead6e2d09ac7ef294257d247a6d53791a2146311f44244401fe217115d517a72695ff0a970ec62cce029ebc9898190ee04f777f6874e1d623522153e3b8e5778aec72b55ea5dcb22afcf3d08e164e8c6b69eb0101e4e73d2a8d14d238ce65f03d0088ef9bb59e28afbae5f144ae231fe3a81f833fa70e252ef9c79ddd22bb41ce073e4b72b10004cdab0f4af623988c9a616e0827c25233b00bfb113ac468efbdbb0216b1c3c63996f76061fd5d5d47ba2448875f033fbfd255a2ed43cc50ee9c66ce51a42d3e1a1c19ba0d780f5ef581f214d7f4112e98cae546d6478690a625fcdebdf0501945a6b2cb9591dbd46869b9ea93f8d04699fe8eb9c8e98b0aaac832722ff1e50628b813707176e3171cd54306213a469433071bc500e8d2a4d0e1db813186a8a0fe505b91031cbd04fb10e47cf1259f096a341614aa8dcaeaeb6b2ef901c19a9179e48b2329c84d00bf37d8cf9f3cc5c09c9074314b3a5373d846a095e26c8d6d707a826626442997d3ae7e4db10995517c7ccff02019ad9e772763306157cc55b34701bde2b3aa62b9a4503cf26576c8376eb5d1da0a10f9c3fd9f9ef955fbf8abe46a02e6c25d1eb38b2814a57345cb8193a30378ce3f7191156b163edcb9669f887ad270a4518e909a774e51b8dbea046c439ff2b94077deed438335340ff22e94dbece15a216d39167a2cc508f2be081c00167426341c2bd43f8f3abd8276ec6479ce1d60865f048b6cc46e58bf466454d48a6cfe02e1998c683aa069f520a9db44c3bee54baa2c38537e253209e5a31869230cd9905b59fef48674bee95b16506f856ba4fc38dd23898e0b9384f6d25c54af5b05babc9665e7e0efc05e4227496d3367e9134da3ecffeb400bfa469230bf8d49afcdfd5329a7c7824ec19cec22b8a642dbc12a425c92d2c395f5036a3df9e4154f8261a02f5f70de4932a27c8823562195921c97bf0e31fcba2d00694e92545b6ac7c3c166ccd6c80b6e5b1ee47b7fe0241f70c625c9872f79aaf8687adf3a1b46489d3c1c0cd1e8841a54a8133dcdd03a600165d6ef53e9ab66855c2ef3171c1c1bb3e1f127d3f082247a7adff52c9f11ec93ffa7745c6c7137677860a82cf2468fe0a1bcda4a7a5ac4b69b28a85597038f8ac6b70eab1c8b01179e9eab1e0f65e838124dfba2f4ce421f65821e2aaf2105aed22f37c17c4c231bfaa57b857ac9918d48cd7619213052ae5446a0c30ec40418a02672d228d1248c7f9d44f08e6a863e9388f811d6a6c4eb34f7b9a32d65e608e135fd43ea13a51404d838a5c544bae9713ac9d2c0f65de2b924a1ff5d9a0ca548629c8a6c2266f9bcb6a0660d8aff8a75e96f11ea6045ce21f6be7f37865e00b94a422f21f3493aefc485e187c3d463d68e4c18675008a9edaa04120234b857c92d62e872fae61704ae4c3f3bc6a977a638e903173e1bc81cb9ac36f3ff70d5f8d3021470a6f8177960b1a53e4122f274c34647635f22d0a38efb9ea25fed7b81389dfe5b8868a0b90eadcdaf307d049613eb52b0e70bf03a27752b9a2fca3a3cc24c580d389cbf314ccc29558188f15bcd0e3f869da86693741535363a94c029373a8d2600c1740d5017cd0698d3c56ecfb4ae0aaf18e9c57fa0ddc30eafbe51a9bae206f495010b4aeac0082bb582c0f2513e66e3003c13dfb6e306691960d9c3b374395df6f4c52ed7951f70eab39ddf89618e9065480004500ac0d1171087cafc438c57d752298c0510c9ead219f85fbff7b3a874e0967b73346299926008dcfb3ccdd366a263f8daeaaeb252a358767397465f5891a28d6f29315590753375e669da4b7b3ed37dd4aad83e982c17b017e1f02643c01c1e054175512f0a500297fbb87fb135ab93b15500e43e9e85e3b29e3afbf463287ead63cbfe0f3e2d1e00f3750287e7d296b0681a51e6e1fa739b8f1797c141ddfe0505067d193084a4f326b7edf1a0384f90ee8af420cbecad1b3ce01f59ba381970166ff37d14a605bcfa68041ef04259f6ba8bc2129e093f7f165e66e1a1160ecd0b949b8cdea54c41cc100176ef5ea0321a3898010c54806787be889d545f89b8eaa3c040413f04e32ea3478061eecda786a65e55af79d613d2b59eb88f0044abf279ddb91161ce6f289f9948b2ce8772bb89c97bb1effa559eb82895777ca26f5f097d6caff039c317a2357592f469210a999d229d63f7eae16e233b2737ed100725ea58dae03cf8a4a54d6879c2af78a98f757a8eea8e464b46a2f7662aee33438509235fcbef9ecacb44fb9f77a2003d785539d7ddbc6edb2f07062d1115ccf470f9ce5ebf6250ebc9e06a327eb875ecbbf2cba3ff9c4464f655b451acdfd7dd706834dd61e7aad2576294d4be9cb89f6a34942b2cc6a01cc326fb159c44de5db37680b1664a152c3d2187ee17641806a9e6aed01cd1d70094354511cb8608bf25c3db5a3e971081cf95392195f49c7a0d19e7d5737a062c015de57c7eea22b2de46e79ea9a3857b6949449ffc851b50fcfaa9265e26ac89a61f0c16197e7fcd0f48d7e62af70e0f5e98907acce959e8e7030f5955e9abe495b3fdff77dc579cace5d65350df78a8d48d9782ccc959c92c4eecbea38a3776f2b806efb1106372a51bf49dfb88754a51212b99f5aa41cc798f7a1954afedf53176950e0702cfa08c8d786ed7d59db6508731b3e04e8b040a52926736857ffd4d1749565c39388f9ec534a3b677c4176aabff5cb7ab1bc4cb4fc7b94a90b11bccef63125d4734d48d846dbcbe91265bf749dafae9413fbd355f0c7460545fdf4f703e867252cc924633df9387a378dffc635c995d6c2d1307390a627d3427d76fb4ae1d4fe5b650fe3a1bd1b6c104ddb5316048d837e1094ccb507054a278f81b050d6bc39433443dd7644e36f3a47bbc3d9c898db1f2ddc7e4638ee982eadc90f2fe695c0a6c72f3a409d15c0c6155cee4995f6505ec1b196f0f981e721c5c79b75e3ffc6568f6eecff7639d860c3d4a494645a52848688549747cea90e80fc9324fc0bcbd077ab101151043b63163020848a1c562deeab235cde257ac2fa7912ad78e6cad8ac395413c9a6defe22ab802b1b738269b4186dac3eea9af1b0b45efe34f4d4a7ea18295f330df5975146761169af332d19ecec237929ab539a3a9507364021a307d884e266963b47a3e9cba5ce203dc616debdba5c032b9903cd61bd40a3f3f0bc477ee30a8ce09644381c4f0ce393c3407034144e5898b4563bbe9a2c0f3da73165776f1a1c9965bcc9c937ef3b5edc9a41c9240dded42e9904ea551a367d995de82caeff834b4e37be69dd2609ef05f6a17aa114a8c61702285f711c61cb3ce209307fdaae621ae429de4f5b53801048fb783a1a6a66d7b69de9bb5b3a6379bd5b19349571a5407f2dcc50dbb0734446f401c19af29e04b1c6eebc4cdf436a0b48ca4fc15c19a1e69fb2dfb783955e39ebcd06dfc178d97a8cd06613baa89330062bcfcfeb4e9786d9297fe14b23bdce39e3d60614ac2462e9ff4c4b90777a9f7286df16ad7b3677a5b01b26b1f07897a4e69f98899407bf7edc5685f353749797a0f88ce71c6f3aa0549db74950d77c6c4468cde5b0e9752e06ebd8ce7fd14541b4dfe5da0a9464554aa902e01dbb59cfb7780685a79ada3f59c6af7b267f77c393119361254ff49f37005f9d698887f52dda5a5e09b812848e57e4519d4a92393a73116b8e9bd2e3add004a30c17cd2d20baf24ebb5587f056f37a32d8825a9d5c40f44e3cf83adece53b04e134b00b51ce4665f41ad832de85cf37c5b560d2748d0d7d60c7e54f0fc2e918da1cafef4cd93a0601ecdd30390f9a598870144a524fd3c8e4c72b0d1734e2ff603635879a9c24aff68575f401f2993d89a75b94f77a948d835ab73c89b3ff8a7dc022c888a8da34dd1b0db6958c43ea6cd810c2d71d610f6250a13fc125f09b3b7f410ef80670235611555c8a1a61b62bce732573a20f8a54d7e63714451cdcb973fd4fe2fd994b0f10506588c98ed9dd3d0e5bafe1b5ff04114f9cef3e79bb4516513076e25ab780245344c1236030714bfed5e619c9e9890bf1c49e45e6972aecc285db6505d75eb7188d0fd50727acbf42e4d64c6c5969c1e2637f782c37d365780d8590ef73baed92192b887aff27e13c91cc30106fbd5fe46a1d285e1429645ed77e369f0027ead80f8ebe28e0369dd89360e49b4788d3f9488d973ea33a37ece84226ca61b72b73440f8f0e3a3072e32ec4bfacd76a9604b4e827a4020c2d5170303e8fec3f4e467ebb9f5a0862ebc240044cda85bfc20975a5dbbe2c7809a966186912d05ef1a6036c8c8ab3c373e39aaf6c76c76eb3e0dcb1897c625e8a305e5718c18d40461cc51f98ed9f1f929c3e358842b4b951b50396baf710c128959afe77b2f4215a231504bad5c17577ac59213847acb075ab7ec046824f9f4f080f0545621df8bc252d9e11c870ce15847bf1ae4a69aed9da89d7eedf472397365a778f5fdc2b03a87ab5faaf5c117bde0bd7501502631ed1d268aa81822aa9f1ea6bfdba6788329279d6be06b03b704a1c4ab73077149db4643c85391f3bf153b40a49003942aa98e37483b960bcbdbde3c49a0cb1cf9678c68eadcd71176331f83a03d48eea90752ffc7139ab2d9b0579fc67d158d2a680c68a5c4877ce7cf759e949f1e248c2fb755222117c682a33ca6304db30b91c1cd8abb91d9159df83705e22db6ab1186f7bc2f70832daecaf6910ca5a5958f4dcae4da5c672e0d35c8e7cc95d3d7446cb86c8a941b266710671aed0aa5cd00e5412ffaee559ba32b5cde89e8a7a95f32867b9e533dd04cfcbff4d56c21c277669ff9de73fd0b41c144f3f8bbe4a097d838634c4e6bc321f74cb2079ed48df74a2c0f598ead37b2389f4673404dc9e8fcb5965053bec58ed4d23e0171e577699ba5ed7254eba8d129c6734923e7ef46db96509164b348243058b6fcf490d86836092bad6da5647066185c16f77c28d5234205b76ff9e4c44829202991c6381eba973db24d03d45a26748395fe0852c63071d283912ea79647674b1e9add586900a865838495ec735e4210b29d4609b63c13d65632eb1f6417f728fd6f712f9a82c977731d25f992680a861db4a0a0b8bd9542e1adb906126612598d0ae736fe79e6889a7d8754a87088d2af2df5dcd356561ae114e0a974e657fcc69449ced3d4577964c50b50f9510a25e1b26142875d937c48768647f4ca5d0e899876f47981377ae451f8fff17fba3e817524a9c58233c70f7bd8f19a60afca05633cc9c176819d6a91324eebaeef93be8b0fb4ec7456bb2f0f2fd3bd96de054876f7182d8b98c40b97d3c13605c2fb68db7d468d42dfb5876c8183e61dc59fb44efe9e01c147abbd67843da6568f5030128b28c39c68e45174751c3d438f62e078667656d749699adaf1760e1fd670e1207d51a298508398e2161ee1023fb8b4dd12001fde3a217da2758416f1674012f1aab8affd7c7742a128771190df8c045fde00e9ae270adcd91408b299447dd01f9a92fe5d47da24daddd859c0ce2faf24fa10af842edf854bbc91b2b2d733f663bfb037492b9ec2c6e229cc8d734513bad64d5bc45c91dc17966de21d73245d9389b18ce9f1f0c06f3bf02ca4d2317d259ba16fcb474091f092e297f074f6ea0bcf9370e70713f0c5709522e83d6feea4f02c98315eeefbf8c91017ac5e790e6cf6c9ba89e518630c2fd8ac3a2b5a67106f267b21c7f7b0b5efd6dda7432c10fba9c71484308e8054ce1894e125897b1bb3f82166104405fca7d313172f92332f242887e023fcf9209adbee5bf7d47425825e4fb4792de6ca5bf227887ce331cdd8432d83d5f74e9b7ee1fd9eff8aa2f1a6c8ed657d827688675cf1eaa58618784ac438fa8d819b271865539d5cca37a4bc42b66d8b1e2810d270c0b9b4c6d02bbdf6f1ff0804216da50cdf5b7747fcb61308db3bef45b8794db62063124cf1468075697d79df7b3fe7d4cc63d4943280c17b7e092648f67565bfe264267aeb04841501ff612b32fb2d17bfa97ca05f6a70a4207c9a3237a6ccd223b5a27ea3688484a80bcd15491127f40f64fb899a8e8ae2caa31ccfe70f110dae72f30ac851ada9b53169be19432dad8f2c4d7ac43b9b2455fa1b6f51604b0fb03317e95321a8bc0248837756ff4a6741af7eab7c18332ddc33cebdda78629f818f0a9a57916f01a4fead34352ba9849c7c2c8cfc4b5902a17b7d69c8bd060951f8791a4fac223b9dc8f892c9895afd65ae0e14857deeb2e97161acb30aa5e5a5f4dd6564c95525477c426c99350b7bbd0c7122744063cfd042858e645065b0f65bc3e66e82e9121ab8f1012a13184400e1513bd028a08a96a4ad5790232452dc2fc2dddef73139f35e7ebdcbebee799274da9e98826c2d7c18cc8a94f0455fd090a014e3750f29f34a99cc3c96a9d38b4901ce5a9b0befa216a89e1736fb101fa1fbd28a18a68e07e4ad362c8161a405e7c764a2056fb6577664422caa9266441ac66d35083a0c358113e8568b417eb27fcdcffb174705a2fa7531cb3586f9aa218e31ccde59c9fa547034de7d8a195a0fcfd7b26c5c78049444d13ef1bea4f9d9d02c28d133857081864ef7e7385b9d4e527be93217f82f2b4702b9f7101d1d4e9d6311ad8eb0c3275217e126d138e33d145beb5dff8d7e36afc0b27e967e1ab36162e25e885533e3ea024fc648b89e21a230b62991399f7fdd1b388c86145b406be8e0d5c654a2db42ff3c5b7ad38e9610720667890297f3ccc8a9af8516734629c90a5642bfe94194be048e9408f487ea1b12865bec082a02e3cebd5627e4c6e2a1da1571f653e04805f2ff7959b6231b4177c35797ab4dcd14e9d27c8f8540bbfd31193725e56ad0cf36d71b7d52f63af17e95f331d6aee734723a9ca4d846df093537de4bb08e6fbf67ee8bc6e4090f595c8ac11c795a7190dc04d6aa88b281fa7da78fe254f682232d33d5f6bb002a5badfa76b8ccacb26cfd25ebf325c4134b1a213a94147c70f1f770cb697d75578a5f61eedcfca91285ce79775463964497a02a623a499ac0a58bdb9e1f69d93b1d03a230a1f9080f6cd5a1d19a768b43088b9681efdfe5d117078a233157ba54146c046d73226f89260c635f2e9290ae431154c914fe74f833ea4145f3f1fbbf9b512ee387bd41d086eaabfef892250a9a9876a4542c144e27d87d4d7e2fb859c08d3e9790765f9c11df0a5df63f2a0463d8a8e435a6600a329baeaab9dad680c6cedabcde889b1a21ee8f8e1848bf74e52e01bd0872574d9967bf1274ee175febd389184557fb1b537a9818e2a3005f630fd4b84cd9d0bdfa1c04a945d5bffaa0d6109cac9bb3823ae369d863291694e92e4f49c871d833e7194734a71f3d9ad3f27baa85aca9e4823b5a9e6dd6608a7be77effbf05c148e7b5b010c290e96d83a508b428240c25c95e598c31f78606d091e17584b28b80a290382cf5846cf131f3229ffee2d7c56ec8ecb9c360566dbac1d6d51b113634c3035aaac64e6e3c4908e7a8166739a8c72c36562dd4a69a1754208c74c9f4d2f2e58c868433104d80973dff93124944502b5d88b89a8a2383536744f506dc39734325f062d623849f0509c08995ca24be3dfb8da5a9b20bedb97187fd3687fe2c7e047805ba4a07574e3f16b1023417d048f1748b8af5f227b21ae50dc83a178b5bd14d4b89c937f38a601880ab6bfa8985efe2dffa1c6db3129642876050a65deea0ea565b931ea02a226db02b535ba087a381557298dcabae61eec6184235e765a06c6d09e4afdc0dac69be58e0beacb637b0b5f505b061b0d50cba8b1fe2b0bc38649effe16f575efc55534a4470d405f41fe84e93bc808d8bc5e787a5723d6b0e6a587a6a204cbb46fcad7291485a1786dbdbf9c10612a0aa7fca1cd221f210faf4d921129e5b56b2474675b9e6e083f4ec6ac6e6c15cbd70689a047ac58c289933381f74dba862453b7e87126465a8d8e15563505e26166eeabf9c8621d4900efb96943753521c8947e97e389c65d6f2f5a398e710bbd030403f0a4887c805ac2b599476d332a33cf1ba1c15aca6b45b269087a85a9e479faad8fb04ab48c703cf7810db853005af30502ab3e1817bf140acda5067cadfc3f8eb66041f774eab31959d06c3e9507a05caa0e9fed4f0c08823e5afcc1175ede85aab90f3c3d7c8ec78d885d717c59677cace1bca655714287cbc7edd6ca8cf564d14bcc47fd1cb50e1924ad4e197db515c3de42226bd0931c4def10d1003fcb226c41e8338dd124be28736e500fc510d2d70184ead50f122f4d3abece29ea3726de9ae50d5889d4f4f06cbc10dd4e30b38693528677ad16b185159c2c7b682490211136c1fd0b36671268e18caf2803e0f6f91a8155e96100b57feaa816b78d427b4815765441d0af7152227bf2348ded07f744a8921e1268343c790c49f31707f098a8416d5ec5bc8ac1fb0b742f1a3db0263757456879e23aedbf88d7bf50d41a3839a829af1b7c01c989bd898ba4b1bba05309f3e9e2c40df701712bd6ccbd4df9672f1d088b88f306b1777fd3344b22366e2c4023ae20fc5a351f925d4e988c9d0a35fc9f2000dacb064a6e917aabb8bc15a285eaba2279295059dbf7f518f1f6d59008a2c09eed1751eafcc8e67f11190b01b8b26e852e2287feef8fc5f826bae828b8a0696207e56410c78f7a7d981712296113edeb03d44226467d98f18277f4650963df60681b72b064e200bf99bc526da604b94bf86dedbce8a1a556e8622469a2d00950f17f2b2c652d872ed5aed2981eefcf2941147bdfd078feab8f70f8922a7d376a424ee3b5e7aa9efa94d74791cdf6d98f3a8d45aa3c6c2e3a88429358aa3ece1cdb3c5a113c7a5486308cdcd07258dafb00ae835a7ace6f902f7ba71637d2ca5d0be8c1d6b5f3bf928eccf9ea7ce0df4b27004033a1578a3a98146a55773a438ce7e35ff638ebe6fd55c986012b84d295043fe0f3cfc3a6f80db9a2dd9440109fe09e0e29e7a63461c2ffeec7ff4de6c8eae5a9b1336ddc1fd4495015966aa47e904a03e032778fbe13cd478a901d5b2267e480741c7453e5b37b2e9ac234ccc93c0d5f5c85c266747328e61e06d14250a0fdf9e1014031e8a22782d0581ed4a5d52c487366e6bddbd6d8004d040c9d66f52787b4894c3e804ef658949bfe9838203cbd137319703fc8f16ef74958a525a586c78f438fa36e5ecdb802d64ba186503b59dbdeffd5ca2b2430f4f87c1100488e5811fa0f86c31d7b40a5ae476235ca74a6c518532c0903a1f4a8840347dfef721c4bdb3f7307aee0df66b1c895796a0a533fca1abfe289dd500b7176af94b6ff826e46770de9ae967fed5b6a059936f2f52211c11e50bba834370e7f7105715357a86254b75d5a253a92ee55fede016c9f817d8d001e78d6594cac5f6cee303aa8c8cbbf2f4320f59318b6ee78b71603465a03d9dc9e95897940482496f63777c8e4c19a9c34bc416e41f8df00ffe374504545c15c2aa0df20c78d918d0e6feeb4cdcddc1e5d851dea0fd28ca9cc8b35fa16ef0ab36e2c100d5075b505602488bec048c9baaef2d0c79862a1fe8beff0586eb2ba9796825839a877667a12cc065a6512fe8764599b7816cf024228dfa82beaf07b21520eab1fe3aa3b7aed69bc728f972572a6af4aa42bfddcab243a24045f99a6468d5395d4415b85fb08731c1bc24111fd3a82c66ec0d36541a154e22bb69e87f72a5463dfe2d9975af030162520b0528acb0bd68047a20cd30f5f0a0ad6ba2b760755234c16b44fc9e1124fe029a69008a1c76243e20ec04fa70278dc50fcc6f19323462af2f9301f49cc57fe21ee48747983c73bc8608b2906ff9bd1ade4d7c340b572be512744939f0ac6ed71af2ba26e7e41a1cca2bb253816943dbca1eef436d6035454108d62fa41e2649f24bda9fa77cf939ea63de88ac44ed14b1935d8c4122cb12713ac53e1c22a48b5c86e60c526dad177067be6ba6a6251e7c36f39dc0b4be8fce1e6f6ce884eaeb1fd75b6a2a472164d0714e1d685aac03ad264db767856511728fd519543fd3bfce2e7345f489488a155b0609df03f2d6b6d279eb590423b4d6129897bcc3e7a69b925df95816cbcf2e309ffc73736d4a0500ef1355fdfe1f17cb20ffca8dc5614dd46a079ada661e087b9e7e057b6b7843daae14dc94cd029bd0e8f79f3819338bf78bb848324071e7f0c14aedb33a47d17ec905572474456a83de1c4ba8b08d4ee62a15a19e2704bc5fd1270235286f10881f1ac596e6340376e47998c481187860a9f1c2136cb62a4ee819dd538736ff63b7707d689d847080289f13cc94db86d9146247e40d8c2718c769097d0d1ea5c2597222c49d5b5d635ae872f5ecce559cb3a95fe350080e8b15ac73224114b327cfea6206d203d3cf1fce8b38afb81a966636de92e5dac4644f8f80152784b0196457be93c3695e371789d55fbef341918ce95b17c2c32cace05da6b5fae1d2b21278411e392253870c1612617b88f79086c7f29da4d55ad678fe8aacbf9cf3cc9ef68643d901be0339085a44ce808198415a8666f2ae9de242761ffc1bb08684cf0a7346ed74bb575fc309f2ef548bb822c2f92c0672515b80faeba8472c8b0ef2b213b6da1a13180caf34fa52b6552562e53cd2da016467f059bcc9012fb640a32f72c6affbef380fe78e51cc3a630ce5c6dd188886951b198862822653346795bbc22baa9e1f961765cf21879eed082ea85834bd91cdc0f114ff061a5f292e8e95ffe33b46f9f84bd92c2442e36807bad35d17cf40b18678faf867ff63319b7259efa8f35e16a313fcef963aff8f91aae8587394c63547cc433c51fa7334a0b359e170ce13071b2bce6e9aee4d7d657f73b458b0d14f349e4d2104cf20346883b614acdd80e7f203303c61b06f910405fe7b8d51401bb325c2f5dedabb31901e3c9f7f1cf3a866d11f55a10f76459177ae751b6feebe3e2dbba6158ce43d885e62eb85ab9cb2230c6b62d78b7ebeda5612c5b35099a307db7444f1629446210ed8c9bfee46bde04842f845b707799962fa4d4ccd024e56d3024ae2ec5cc43c256b4d695de3a5186eea953d8e9b2488f9f292cf21794831d7bb2e9c4542a7b70f1eb11dc16f3e1b27b5de74b0eb5a1d249df21f6c560a60e900b92884c47863cb0af07ee640d5b6fd85e69e23d0b64f2230686c3d03dabaaab2721eb39c300c2636bbeb0c7eee01ed1aa06394e358c410c6dd5a176165182c804e87f20c7393a8d653bddf7de529b66c85c16de74cab905a013d2282c2ff801edfe01d4dc64600af587ac32c92b38b8c07f6f6f65f3e0de1a1bf1abdf42841a0a07288ecf1a13a74b2da6e71585cb7388a337effb1d87f6b81cf310b7cba9aa85434096247db94a63128f6dcb35758079136c6fda1c44a8401a6cd35b4c821104126b504ea351d10e215ee7dc8df8a300cef9e0e401fef306a815148d8b61286407f48db7e89b53b3340b5f89974f392a446a5323df58c8305887e4b9ebfd19e026cd51a69a2eac6ab15913d19e71032c7d6dc2ead3e648b302f388a104bdde9ba22384c2794bacc534469a3191fc244c1306c87368d8dee453cbf798916b84d490207cd761073f447da5dacf9e22e24c98215b49e7a5a8e9932460be451ced725b8205ea662f1b690903c67f21d6c8faff97ea2e0180e113968e3b1216042512a271437dc4f2882de49643cf149be2bc759305899968862979d4b3336461c185f9bddffb765d3a9a82eb4aae07d4549d2383a3418d288757a587afdbb7c268aa914b91337553896c944ea0a2af3e6ed483ec66bd6d74a37868bbee605cd4a678412a40fb2487d04c452f95002c12c2a0d0563334655e4acba32e61d619538652cc92b7f91c46eddfc2911a3242b77d408af90407a94896b7de3d594b57b465c194f58ff49429a9309d5229cba6184ae95cdb28cc268d173222a64f2dcb3be88d42e241ebded9f885a89d066e6eb84b6f30007d0e312949a5ce24afb08810a1a687722c58e247c6d0789bc896941ae648be9f1f8f05d116f18d4a909036e0d90a448621e99ef2a527caf4b129cdccc883fae651a6f0a9a75c2c513426425215b191297a5e27f6b95367b5fb027c27be96fee784490c640b810e41219c80551ff93978e902dfd4d1be43236e4627c57fca38420bd8a4cb4138cb509b114641a8a81d085c1da6199a5ae4b88eb14649c9d402c2d12a3242b58404b400be1f5f5f59603fce1590dc53ff6535a10eca8509eddfcd04bd3cbb556d07cb143ad3afed916852db13b51c7c38d53929da7156331100f6f18a283c61b66d70945c995077d792d858eaf74d1f9c549676a64ba956799c83777dd5ea04d1be42edb4fc1891e33384fd1a7148cd159b0b9e369dce4c3aacf020bfd5e5fb5d4ea34541220bc5eda3d2a2112f69756e6f84cbbcb7678bfa55b5bc9e77d1b5a739375b3cf01a486f3d76e31fc143e605462dcf61345635406e7f21449cf4d38e0c2018803432181286dc34fe0f3e28380529a9f6b08a9532bbcdf61aee5b9a78e9908100a6981d2132d4927e90063d1e718537bd638ab864562c8c800b426df9f68104846df033e8dcc0c2380d70450065f7a3f2bcb8c9d2e489061ba34999dcbb44bcd993082519fef9d83ee3988fe53a8a2e489069195de37095d19abc7498ac379f561273c865cc773d81e9181d49318d07003fb4a4234ab807c1a11d6174b3588c0651216aa0d4e5ae69b405160b2260630b4958c55dbdd48bea813e79c24c4b1002a0820c58b674844e22f911ce7005bf586466dd70c3544b76620d528927552fd99d94b23ba3bc86c5c03d69c2ba902df9edd76f495304891a1d161cd2f001eecc4de919ce68683894552423cfab90f112873ea3d4590b708732c62bacb10468a54bb20fb43493a6dd229bdb2829cd1a17a1e146493104599c1367bdc301e58b0267922d474fd2c471f566b28c7c37e3191b17f6c6d46ba376cb48c4daab96aa2cffd552eb7435b78dc6a710e70afed632959f5c38f5f970b1612421bdc73f57e1457db186cbfaf36d060ca7b066ebcda5db06ea550b6affdef73edadf1eeca7e1706e8010815e3163c81880cc9d4d822962d67a295f539608c50e8ee900a2781596ac2a241d9bfced15c8803c0c01839360ca82854a78eef62f6b02c2d4d668ec25ced2558ac9e098a669d4f74b389eed8c51205ea13a83a947d77314d13e2d967acd710c489ad6518ad65ef286c797b6fb056b7e804116f1c1fb604f86f01132ac24846d304ba8a192a127c2f1685e288568ee3d89af90c51b176ca7a59be4605f245029b2173876c1fe03cfa260650d2d7f55bb8320d0df0697c778ecb66572e3e6a823b236f5050239f41e04369acc03f6f97eb1fb9b32f0e72814167c109bd95cc6fe5f6d3b3cd30a83fbc2bb16976ec526e5c56a9f7c2d148feac11d4d5d144abb1fe45c6db5249329809961618f4c030fd453593e0f9aaae8c9cf7e9824f39698891c2a78179aa8777c102ce7cad13d35ee2a2ae14bc066ddf5ca6c0db7ab02d69e4bda61ab9ca750a8232e3e8b6deb936d153587101251df99f3daf26a88c1a0b373b7355400c59761375b5224cd2fb983f38cf5805e6c732f85875c33be88c1e1a335762b4a1a066cc7c98b857a6b9a810b7849bb41834e1cd0644f1ea47558b066f8cf141e5bb7abd518941420d9d47ea821f7d960552586ab13ec64c0f2b4c760fdd6eaca17959049e8868b5af29d7b30001b039f2aa3309f60af28b2649cf78e04d6802756106783049b31b962f6129a9b81f4e66985401c93ac92a0e5a3a2035e532cebfa5beb057a563b821fc4e84041551bc9520ffa326af11e2385eeb8015020d3dd76384f426defed15084455795b822cee4733c7a88a217087cf42829dba38bb6d1b1dcf7947dd4d9dd2860362041d4a35ed7f53786094886dc7814b3c7a10d4770e2531c79986006490eb5299ba99aa90530a92d6fe7eeba4f7a129d3c7ef546a08260e1e7aba282d4fe0a7285efb7f54b965ce168cc62f398cef8f638e147eb1fe329fec986102d0eb32ce414c6f78b1c13f9435d7ec72eea79ca9854d0f47f5e5c199c69a9daeb1d1ba052556233732d486a050aa047a6e9d0454f424df48957f3719fea6a77c4277a5ec8fd9aa6b6dde678a34d7dd86d42e3e82994c37b298783abf8da15eca2350c80b63ec3614801389d1e17f8480f63906ff8a4ec091f92f715e24e54d1b2df793e29dd7d5609f794ef4f897d7e1eaec50b469d02bf50246c09c077a91f4b4c16fb9cc417a9cd8e4eeddffe40095c11b0b8b3a92f87d657bad5c9e8ddfbaf11490cf0eea2ef251629551abc752217dcd20fbd3c8b88d7682f9a2b0feef04fc9798ce23596542e39872819fe0f8277073c47db9b682625b5c3ecb2cd350f82b317ee756481e0191e107a7b155fd0fd767811547ee2482f3e27767a5f3237670e61c884111052a1ae74a460ea8e9f7406fa9b9194bbb3c8e261d3cb0d87ae1ec1e6bb025efaf4df6ec027a5b6da24bd35ba3e1541a0f7cd592601a4d109cb6d32423537e632008a73b08f2e9c25d6ad282976c15e896318ac59a0923d28daf1217588854ed86882c7835e2178d8423b8499b85be95f38bf5cfbbfdac3e345880d4c14b47e808680188d72d9933c4cf5a236f0b285d6f694c51ac6a0540158828280637b60259691f3028005e9dba410701fb9af08e222240b44e80a39813410316094f437802ae9ff9e41d418c1b8f86d8c0386b17668f8bbbac866565cae278eb10bbd07e61ff88a51f0464ca113af95123b3ce90fff8951cfb429578d3eb727d2c30a919d1b7acf27a98109d81264c9e00aedff9e275d009fba6ea4a756b7aba5d90ab4b2202c801e57f48c6403e007ed5bb269ca23741f16803d23980edd92c343773e47b6de2348e2b0fa79d23c2179862ff338ff57ebf109496134d12fce1d0260b2d129d52da40f55f21b96510a5fdfee264bae0190be6fd34ccfcccb357caf04ba9897ba5a20d2aa9a0eb1f0b0566d2d5601cf9f3ff79f1720583e2c8f8662124bf063e69916b5ce71d016b5202793ccd4a68b47e7cc85308540000749d758d36d00b6d1080e2d7a982046e5cf7d1e366d5d60da505bb2bb6db9b794322519bc0b5b0ba90b40dd923fda2b250840c4a42c09b164a349b102889a14287e76a6c8a43401ba4949e267678b996ce78a26294a86d8c942465b03881d2c966ecca0bb9d3485d1c48de9c2dbe1da2d6493153dd41d2937eb99e07e4527155c0a851b41930a3e2a9a84ac0b9a96749dc735cecb296a1481a684bd9289c6048d8c972af2469342054b7bf064baa562898a15dc1c40a060c9ac99be7b2a4f34a857f144eda5ed2bdff22eaaa2a2089b82cb3e4a5394e05bca143df876150c60e0b529648fc35eda840fb3252c1cad3184c403176f5f22f1900510252b50620225414a643f82df4a707876d087332ad759cf07a6298e363c0ab4e75c82cd9aa89dd9df897e6205ba5724e2561f5b8c9ef3ce8d5a6afdba4374529f74526a9d8e364fa97f4e9d06e9ef649fe3a290f2dc588184d4b80d1c9e039a2f954fb738e76e057ace7ae2119fe7dc863662f286f30e5b6c41dccec7165ba384e47820ee18b6d848582a21247aaec5136ef2861b0095dbf94843f49c8f25143de734445207e639a729923afd9cfb92d491e1688eefc251f51485ee0c21b459383893bd39cad5c059520bc8c9a1b3721874472b64c8a94f6f694a0817f1d9618721a1bc610fe58df5504384801635845d288f3ddfa186dcbb004fc58013f5a87f60832008822c6d0b450db1a2957c3ab554e744296ee07b2a733a38c9f97d3e33847b1dc7d99bd7716847699a456d58cda2a816f796d0678b3a2a54cdd6add1e1563f39f7853370a770c513b533071074a9ff927b61548ed3ae1c20d2f6940ba95b7943290585561c77fbc53c30a96c70a80389f2d4a5d1d3b1c75318d7cd5a7b0a0ad1aa51bbba163cf52a025a133f562adf11fd589586d420c4861076296ea5f665903755488ee7f8642341f5cf4e708254526e3a69d7926afa0a3a3be956f54a3f75e54df5b14e13dcd183f2d551ee41f18ada057a752f4abb3ecebde9abd3eaf40a17d121cfab53a27659af4ea1b4ab739c5bd152114e11abe6b4d453910e89455cea4c6514e82b0dfa8a866c55af59beeaf4f0d56f38872059d553e10c8264556fa9aee21ff3c629cc3150e14caa0e56ffc259a559d5695dd4518aa6cafaadcce4432cafba0db989b1348bc9a659b59b6335abba337d759755f740f688f07116b51c78ca51087c907c88bd4492317dbf449201415685529513744e14286f98a538723f03d883295d4adc769e05013d77cb9e3695cbce602c711ce7c5650e75801eefa9b82242fd472aae888c948a3380dff354521619cd1c002c3064dc3b3b0552a727ed44d099b2b3145741bac10099f96748e50d3768821294a20ed033d61f574474ac881c992292f933806f6708260a5edc9132d8f4a9b3d4a9fdab9590ae279250d291a758be1e3ef4f0c1d2396ba6b83c5d822e3bab6688cbd58334a57409b0668a39e7945d4c950bb5a1387b38404fe5953d421f09f7ab22d655f85929a59f9cd5f3449e24302bce2e6a15a96d166bb6a8733ed28f4efa53047db6a4f770025229ab78e4feb8a21ebe94f2e107e905c81be9349436737613e193f255e9a5dee24db1a0c5651c1d2c9b66499fde2ce949baa77b62a1e374e972ba54c01465900218018569170555dc3072a499dd50661075808109225d061a707e2c3203ce0a2f6538aaf0b2c74bc93544c2fd9c775c59162a6a67f653a7744e59a4f315be9ffaac4f9bfaf81c579d210b4fc3713aa5655cebdd89697c2979d3a9027c15e5b659d27b98e915ebd1130deb7b34b4f993f57e40c398b79e5865ab7ad5400cfd8f84f95f09fd9f09a0174a58cb84d92c59ac162a527953bd76cc226d82e5d3b9f4be095a13fe9b25fc4749789bf7420e05322e03e0bf4efccf86ff79a711fefb6afe0373fc87a2f9af2535f3dfc5f19f8beabf171b32ffc174a10e34d80ec4b08c8dff6ebcfca772f90fc7fd6f26f5df8a06f55f0ef0bf9aefbf1140fb7968ff13bbff00c0fd6753ff23a104d086126602d8ffb558ac962972b5c57ea2bc74d44ba49f273f27b84838c490624d2f916237e94a2f9162472f9d7b8914bbe24f2f91622fa8434688b845c4b5d391ac143cc106c5129f98d8e03abf9932ee78818ed01f6f4cfe49a84f4137d628215f1033ee780a623f059d8498d854b6a4f95ab9c0237e49432fa7e880c9f35f990de8ded4ad5d724a0e62df9eb2d2ae3953b724ee5d4269ca365fa7d96cb507a592886a41f8f6d451bb02f0ed21d3eddcfa780aa2af7b7f96b8ea0924aba9734d48579d35ab9d3a47945a82521f321f41f8007a095d95ba35ab845b54fbf114e5443bd59a053796baf1b3fbc82967cbf301f4239206bd513b608bd7706c098328ddea9f7be3079a9ea25ca268cfd370862a7bd489e84fee85230d7ffa79f6ef939d824e3329c794946f61fa14edbb4508b63f41d6134871bcf9f625be478ef9b878cabf5478639ce7793540443f29db89c9cce714f431579aa2d2ae8e09176fbfd75f78f19b7a118b9efd857b43caef4774830dff662b175efcfa8b5f9733e562435cb9e0e22977f1948fa7a0d3900d678084d9b0e14d6c881768b69a7ff0f37cc9beb1efe51b0a53b714530e22268aee29ca89369e8268a5b19bac5d63aa768388ee0502ef12267ebc42361cbfd9b3a76e29a6540de7afa73c15aab853d029a85f269c664eda254f4646a7a3ef53d0f7e9e809a51f4f51c613ed543bd9be9dab74fcd8a79d6572e425e367bbe2ca45bc21e9d9af084b89ab1752377cb6d9624f891fed12ad78d083d17c39e5f6d30393670b20f1f0040f27e8ee25120f4293879f9797483b1081da00a3b6247131e876a8c222ed1085b7031327ee25d20e4b7c3b240122ed008442f2c182e423860e2e172e545cb1364027605080e46304924f0f374035542721e0f06e33322f9174e862a5c314cf21920e2bc8a18350cdd11ab69897483af430022a0d4fbd44ca810c31a6060000b7b0c1f112298726542f91720841094839fc98605f22e5e0f3ec9d10394c8ec59534f8c1f29f5cd956549a15a671a78faa5ab3648e384f6a1846a100c5ad8eb3e3e64a3b6ecd6a195bcc4b47418a3b6b3a5b13b2703a108528ee748b7229ee17b33365dc2044a09e27f368dcd1937ce9dbe9e71f6aa7b24f54156d747c206a07c65708a881b3bc0df75d1c85c3c5651cf495834e6ff88c735ebf180fd2b3863031de282197551f96af8989d0062704c2d271c369eddae1aa44dc91feac72b6a452d75e171eb716794c1b343034df42f00096dc71c70d86479033cdd7d7245d3bc8903790ae1db766b5d7f9ca01c67690d1b4e3c689636de2a938d65a259237341750a8e5850a62fcf421849fed63bd818489711819991b39dcb881daa98e03b5e339825c99b4284abb5649cd725bb3a8ec70c7afc957b6fae50043236e4dcdc73b4430945d11b523532b6a5647a1d5788d8fe0352e6134a1d3388dc8b37a81c673780ef18655159bb8d3485828f6c0ea374208c6400fbfa60673842e44b3458463ab1638f6557429eaaf51e256e7719bade67173168bc7cd431e4ccd42fb083c9a7ac478dc5a67dc1d37149adc91845b0ea711c1188dd7885fd38e5b4d6dfa11e69bfee542d4ad76a1b9147912e85323ded86ef51a722cc56212d5028ea73ef6ecd45042a35aa8fd3d44c01f799e8a2b1752b01a3ffdc8dfa446e4f1006c07d36c354a015e0772a89d1a988c223c12eafc1caa85160b762805d41f6f78ce3f0fb42805f48f1d78ea5ecf5311f45043bcd3773a9d4e1fd73226798e08f76392df61a559206a88cb0a3b82b04a5ad976a0b1b2edc8b2b23511499dd395a9f1e8b10690cb0fe52cd08fde836381e31a9fa0974c6db6642e4b9e631b1678dc503b3cac34abdd85887dc68c9be367cab82e505ca2b818cd947147f0c7952d478d1f990b5050514e4e8e0f283e5043e8bb10c99bf61d396e163b7618c1e3b6b2edb89d7830b5eb84df71e37165655bb251af3247cdea55154ae323a3d4ac4a65a834ab65929a15448dda8ca74cedd3a132351e4d3c9878dca608c69ad51ec48ceb52e4f3faf99a98ee88f3399cc6c76fb6b2ad92bea69a99322ef51933ee077e90a62b7f0049dcd19364a8c8d496ea4da726e92cdda64f2c265bbafdf8f12387cff9354da09f0efefca414fc59f2354dda57237eb4d99a353e828f20f2c8d91abfa69f5e23f6c0a8387eb59f9e23046353e640503bb53ef1a466f992a32029004384e4b843f2260001f65e95ca9dc5c2c1e99c6f2579237de502093c49180b2f5e007be26e8293e03d309b70e5828db39c25f29420d2e0f28f766667583ebde5322e4ff0187fa1e0302edddae64b874bb74956a95f372edd5669d78b4bb7b7f9dae1d2c5a5db2bfd4ac1a55b2cedba2edd8bcd178e4bf764de4fbf5470e9de9276b5b8742f68be5670e9decc63d22f1e2edd73e211cd570f97ee157951fac5824bf78cbc9a67f3a8f4ebe5d23da576590f0120860000404813e38e012086d2bb8a0c4371d5027fe843f843e91e7a288e2eae88cc5126c67b1ec67bde86f7fc4bec47687542eb23cc09656c0471b435e278a55d89e39d1147150e717416cecb84154bb362424e16724b426ed62ce92f21e7a459d25d42ae28e48c42ce16724a21770bb92b61173b859d17764161c7a459d25f6127d42de9aeb0039a2de92c849d4fb7a4f708b9a6d992ce23e4ac744bfa0a21b7a442c851e996749c90abcd96f414422e4ab7a4ef0839a2d9927e13724cba255d47c805cd96741442eea75bd24f08b9b05ee9967456586fb325a78f76f6d25269d7d84b6f67fde241148bc57070d22f9f2a7be9164abb8afae593a20101ca4bb7346b24ddd6da75d42e79f403a6976e6d36a95f1326ddb373a967ed5ab1ac59524a6f57b7c44b6fa6765d6957f704cbe424226a96749aa03bda9e9f52ba9dd958d968835e3adb9909218f8d2031966cb02437d2a80246829710f28035180f0f15f664c52e9f04f1c98ac57aab569ad52dbdf4e6a10367b162205ee22c346326edce4eda05a55f122699a6c212069a61650aeb2dac569a259d870fd77fb4b397d22d91745b24ddcee6d08d259b6605f149f768c055ec154dc59c2f9194ec80d24ec2461435e093365e3800132cd9c428b77dfec75fd0b66072616e835e38002d884882d9f06b827d62948b1a3279cebab4d455be5d76cfca33f014e10269e58182623218c429ae18457cc165d490c9a114c048208089f0113f2611e339141146e239ef5008609f3570961a384b92af5e032794d060365c8500c6853270c7b158bfe40e6c5cb50862c2434cc45cd52193ba22a038f1a3a4f2b12420d74a45a3020a8ac9aab812c27df52aba0d8f243c2613572db08b37465c765b4b13df2a9c33e1d25de187a525f0eb51e5caa327464f8c4ede67a3c675273894b823d398496b882b8f9c14fd74db9170c5d010576fc6b8f2e8c9cf931f4ac6a52e8f9c30fd7494d3e9d2579f4bd84c010e500b8bc0608ba9208c0cee8c339398a2cb932409b60ac39533ca013c045bcdd74a5c5167d88cc8c3b0199f0955f3fe5c9610112ef59199f053f99f0c282353652a088220f8e1f4c091ec24c504bf937ecd783b177d0ce555322ad50d99be4d5dab6ec8342d7d83f1ed174bcbc8c8c88c48b805d0813ce8f2290e521098dc7e7a60010ef206409401032d7c482376052440b36c49b4dab3ed0b79a8594ea8cbead2002528d78b4f717cf1396d0b659acca7bc59ea5c87b161c36128c501c625bb4aa57215fbe4c9939d3ffef863ff18649041b07265675a930c93cc4d46e6c68d1bb48e795185a34bb9f4238f3cf26ce947a6c18833340e6f836dd8105fc20ef0342ba88c3bb2cfc8414640ccdeb5783b07499d21f2f98756bc0294e95f480392197e9e77c86eca53620c237be74e85985ae2c4e10c8dc39fc2b17178b6f6de3943e3f01fe8331cad4f2c89a622987eb8713a2ce540535223c24645908483fbc01a82b9fb6ae0f9d3e9e421a97ff2503e3b69d65019d79fc98e1e6e0c566e0d5768d2d3840438b0810850b04609964820044c5c590ac20c8638818c01102fb5cb0a12bc8444d183444b55fcc84943cd44273369d7500ced5a19a1802d8956b372d957a184cd8412a66a1594fcb237b79892e28e94b2f5da619123d4bd3a5b9b163d8ba422740214d8a0a90a170c414889357c92d8210536d0e2b3d96ec0d8041288fc3c36e7b6ab7f54f211ea421595e611faa3b4b1ec9622a3fd51da8ab80043bb58cc91556c9ac51d8e2ccf47b72ea7ca7a4d5939cd92dec3e78b36dba7f747a72b604121a0a48c2742a0240c2b4c4029c20a7eb81d3103202b174805ec9f6490ad348b995c76f93d3f4ad740cf374761669e4bf366639f494c1dc43f658d160588090b17fcc84253d4c0e1471e3ac222e84786c2453f696c549bd987f4f38fea2cebe3a7cfd1a2e0833b32104399aaa31ee2c8d2d1b0e946e6f4186808228fae70f2f2e88a297e3a015cdec64f2fc064a6729374d919887f54ef17fb3011fc82716bfae9f4f23233238a279c2069413885397dc642eda23e819e82764e16a5cd1212df11e9eda18dc55e86aba719dd24dd768ef10f9a51bf90c823f6d3e9e5656646144f3881711807878611046ad7a438cc62db17b4564ad33db83c71980892564ea4e92aca6e8d9686a600a27422f24705640aedd3e58f34536a3fd250a680bc6977a571e7d1335f7b8511480419ad1124248b1a8e35ba19317172707ae4684113a245ed1a515952a3194929424890901a13c8195d9a9753b0b0c086e36cbf5e4ec1b245930d0375c30546b3d016c10a2c576c3da44e1b0151bde42b5b278e1512b9278feb6c273b9690fe4edeb4b3e0c4651fbb97ac5aa7d34bc34f9f20929fb47680290f6511f41af7c80a2b3f761063e986b822b4867cf16d3216a9c3de8cc6cf0edffedde66c46e3db3f21d3a588e38c4bbdb2d84143b8541c9174f755491b13e2556fbda3cc313ccff06c257731587e4fc480ea5994a173e698c5917d9c41f59e739e385a6bad373a11d58f453c1103aa1f63782acac0eef918c37be20c2ad0db31026d1f559e739c2855b26fd660430d32cb4b97547e48f7229ff048daf9670bf5bb45fb4cc327bb99c526d24f4d272c39dc4ee5cdf495d2ad3ed299ffe25620b073fe1b5503bfe735fc3e47ead4e93ee4ab8a215bd359ac30c4e1e27190bc996e0308b77dac5b481d1beed7f847f5e9758ad439ea17e873ce4ae5a7abe60b146bad265eefbcd66a35d5f472e6abdeeaadde6e95e9a74b7913ae8a9c722609cfdc1f9d5d7b3b38cb19246682aef41134c027bf94e79d3c3f799f943afc7521ac0b6d4fd44e0d9ce5bb29694b9de069a5740489af8a4cef812581754ec386d9d006fb5dd88921c33ad1c2aad864e5c284519f302af224814db1a74bd23dadc8a46be4d2d8b4e04e8761beacbd37c9936412eb8bc028b9238d7d0983bc19e2b2772f25772d630f0cecb7ab7cd2667cb1bde7dfc46996c79a2dcf69e8b3e57d2ba5dbf9c73368be6e609ecf99ece9a47d9c50a2bce73345dc2ad42e947ba07b3e99b4eb73cf49bb4eeef924923af23d8771e28ed25664bea464cf6998afe99eb5f7769e37ddc56fa07efd86e92ecece0569cfa5f30c92375e8bdf709dfa0d2e3e9da9bb70fdc5a9b7882eb8d8f0c9b6667954dee379e2c28bdb10795ec43b5b9e7b4f5c78e17902fa8bf8e4b4d42ccf41efc2fa12d5022b35cbf313ea25ea34839ae535d37b1ef37cca3c6f26cfbbc9732e4485e017b2986790d2055fde50c25c42099b45b3e5f90d574af7e4fcb3f67dd0f4dcda7b552a77d60c7a8f8be6db00c2ad2e6d3c518617dbc908a5db399c0fd96a02b4c762b12730ce83b4abfa91a4c2398c1397f3ca39ce7c4df738ce47d67339f286a3e2aa7309ebc42673a574fb2508b7a698be4a27372b9db3e76cc9296be9a49c19dc934e4b6b4f59294739dac9abea2aa54b7cd3b2a4b49bb3ab9474ce39e7b474ce39e7eccead7c714ec520b3259db356ce39e714294dfaf8f45e27b99f21ad9ccefb78b9bea3dd7e7aafa3dc77684f56367b4450caf381dc92a2f44ae6b88a83d3230785c3f3a1bc3450ea469ce3ea1057873c1411fa1e191ff7a495f3c09377929fbdac0a820fec644b6d49d1d4ad41e6cbba6c97afcb72d93838383d725038382a481665a1859fa16c51ef401411aac25305dce7fc9e5c5c503bd55fc091a6734927e75d930b13aa28a59e16358cdbbd3caaa20aa46b5f1e5521c507c5055f1e55c1021754c1e45e6bc10b230225282d665a0ca56e1543f8006251d452050f3f7cb5194a0a16252759b7e45b0f768a5bdc597b044eafcda1d6fab55d510349e79cf40b07874be26c1d5027fbcec9b7774cae7c940ecab777b376d574419dcfb777b11260c9c12d714735317e8cbeddc9b4cd9a2cd6b4e89b367d5326a2a1afb7bac4cdb820ce6756a3fab344850a4da66f9f55661137c4011581fbf9a661aa4a494c3ed6a3ef995af4ed7506060e558d7d5bb98561821b3e52255bbb646adf3e522861b4d3a076c18c1408cbb7cf26267c9c56be7d2eb5ebc567d2a47db1868b8f138ad20fdf36394f0091b67f40956f1a5af07d45b684856661dcf8919d7c3ba91d35956f4e62c2553e1fb079a046aa9ba8a85da836b24dd15498fa4a63910d7dfb387f7e851fe79535d93483292668da41e90627e802f62384ada93603201df45027c971027d8f0a9238030c28b418a3960556e334a89d1a9ac357a89d1c545a4e8ac59ec667503b34145c5159395ddd72f8d5ea46c4afc270c1af1c076a67e51ed1cfb80ab53383a3e971f80dd40e0e95cba0765437a8f81b1e83dab951d36882c9c8380c6a47e68a1f0306101fe336503b313030187f41edc05c2cdec61750bc0d7741edd8b02f7e513b2f38dd72b1810b172e2e24bc8b8b5f1f9cf12eaeaa82f42eee5f08bd8b4b19bc8ba7503b2eac1d4bee28b1b89706f706e002f9b1c75f974afe3a6d978fbf77c98abf5e04fdf542087f8f7ac082bf3ec0e1afb7a0766e4eca51a89d548bcb167c8b83a89d16947fa81d9405611e1c691e74daae9b07c11dace04157f140870775508407fd84da019dfee7a753167fda39dd9a2a66ef7987daf128b53a58f256cadb5b513b9d52d053cf01197cc4cf49bb2bfa1aaea181e7e0a870708a7c98b9740926a2c4a04e72c78f344f9d52b74e3cf59b832970a0b443fd061183303f7ea4b1d1d123a9881c4944375072031c90e0dbbf9c2c35b51f75d020043938a2c1951a1071540320d860ca370e13321c0c148bc57ca09452974775f0230ccd833fdae8c081ac41007e944634198cf1edaa2eb2f8769fc1ecdb593370f2ed3954a828c940055dbb4209941a6c01c60e52469083e88927b448220d2564a8e405a3a8e9f610e28e2e039f123a5577510f74f2093fc23ce5f194fac581ad491a36e0020a8dad553268dc91ba0d4c0c90beb9e042e85b65801b1223b035894959e28812475c2102880ba618ac5994ad700289ee6ea9d3473180c1534b290b822ae59fe04a070a476a7cbbcaf6ed8e4486eddb250e4c199ffcc0656f95ac4c8e6adf055042a68410d7780bf812a89f1ae9ef10e6de7e9e1c63c078927031d8f5242ac09ea09c874e61410d6eb02430473b803d697724dcd7d8388e6327a1f5c47efa749e47f94c350a154a9844a18c748b7da9fe6783194fc162413b81548b73ff004243b3d8a768648618422c965a88d641940ab0a4a221800b682a20fc43023205f609c81be66eefa779760ab48b3d15caa316287d0ced72ff8fc1499baf6062662766283133731b69177b100a4cc19ad387cc9f2821fc3d9a85d32c66d903a40e09cfce321fd83bf9178487903f1ec00c45ea8c5cc4b784ec2806e21f19c7e40dbf78493f807f300eec44263113697b1de40dff27a4ca1ba681bd03ec4662105f706932694091f2c60647e56a77d7e6222662286c9b2d9ac553a649b642beacbff094a7e2a4cd1675eacddd9304a0a269ebc9362baa95052795698bf2e3ac629999278d326a487d8e226fa88b34b8cd3463b59acd96943459dce2b2e3a03e6df3b500d9a24e5b9c494ffdabab5adb8688526aa5a9e929a594ce504abdf69c3419d0a4b56b751f867d28c79ef2929b44ab519f73ce22f3e5943abb8a663281617c3c69ed2c75aea2fcba962cee031c5318538ec254aa2954f7ba4c8562cb09bf420250e10b38234640b6aa9f4e44ee1379f9596154e4e24ee77ae58fd09f35512e6a67825fedd0f824c78923128ee3388eab5cd36e66912709ac26e16e223a9de9d2b6fc90a2b5f7aa544e6752ae3caf63ea5738b33e16c80a11c18893592656f6bce439e899879eddab9393b56bf49a80da15d4aef1e4f33edccf13324ee899e98ad8c3aded9adf577d7c0ee83374819e9d135667b2b17bd1d86c55f983fe48396d36896f93c97ff8870e8eb5f8f38cd33af84777a28ee79367c38ea98f54918b3b764c74a85b4c4b204f206f78564104a00e4bbf28d06ca16186fc41853805a6765de99a96dab542397f3d859e9f1c155e3a9b2d8e8ab752e95757a444ab52b362bbf2dc25b17b430f86de9257a559ddd26c7167a58a9c387312472bebc2aea9bb226f3a2cddb2a2d75979066a21fec1f9700aecdc5c399f672a94fa19a6beb95addd66abdbbd231713e2d22162bfc638a9d193205761f34e40dfbc8f120764c5b5ccfc7934fd3b39f7cda253bfd784dedc2d2ae239d23b1a718d31c4172555812f3420e089902bb0d39a090fbe19670419c50b338213859b3788526aeb3db9895754c5dd3e9c6111ffb578015d092246576427465b674615e702990460c3e8c481d1b462420a518529490f1fc35536e170145f1526a944ab79416202bdda464eb66a0a96a6aa2b3900ed16894679a486794ce26ed59088e9f744667740929e9ac9d0e499d2e92375152229dd15913a944462d40a4820757e6f43175ab461c6ac8e7f3a5381ef93ec2cf40f3957220e940b439345f29d148f751ea471e62252c4052cc39a7d4e9170f4d289ec643f3454bb0042582e2d91b2504c7b74867f2865dac420da59f6217358b3de512f50285a53a8cf98e42722d5207e5ec7dd42f3ab32707dd480a355f1d4557514d254a44e5d93b514a299f28e58eb5d6aea37655a319561acc4b548b358a91f9eaa2ae89b46b4402ec6c44eaac7458b9239de1f8fbcd4db17b552a77d6d746c8a533a018b9de84e35b6ca29a2ceec8b416e794b3b352bffaa85bf39512bb688aa34a1c6f0f1d3a88ae55dd1651a4e28e4094465035fab1a32c1d9d51063731db19bb317879840653d14c1ea971f4dcdf519ebdbb66cae5b8a276a4caa5013f444d4c673ce3389e4c9a25b53083e965f8f2144544fa48a51667e4f032accf280448d690cdcba334869e51280548ef161fd02cf61a86f4b713a1dfedb24318e40d3ba594555087508536ad543450544444fd92621419b54bcaa3294bf8979e6fcf2e67cfda3532ed87dac52b960ecaa48be2479045ab111535cd574bc320755a5c09e1dc864712dec55db5f3113ff2113f7d9512795868066b11613d709a4544ab1109cd60ec41dac5473c6f01e5a5adda7808e1b3fda29667d8e36d288fa630f9ea759ded746a5eeac09158c0d0220a18e860c8033a4aa45d77332a4c428fb8c1500e86497298c104067a906631019ac50ee40342443f4cc1848a2647c098032418ea410553a668620918337b8d15770442009c2646fb643a183ee9fcb361ce27830148ce1066418058b1484d15362c1dedea2923826b5d2689eba9429a5311a68f4058456e9e73115dd18fe07b27ffc2cebd93b86a61bee743e67beed95015bbd3e57f4fbc3c3a22fafed17f0402839132849e9f1d880bcc323edce9591fd26f1130550790a8163ca2b722b30e34ae8cd175184a781b4a1a17b4b7e298e4adcf39e79c6ebb2566e28bef4456b3d88688570c16da4bc2d8e9f41b87a1c50a07d2acae11bae395f5b832a9c38ec330489dfa752584eb6fa78053b73a42989b8491183e697bf1132218e4cf6fe71142510f1f7a74f4236df226afc8a6d8947c34ea18af6ca5a269560e1b89a1080c0768d7ca6d8cc4500406a903a793c1d24b9731ba3712dcc6a57f9452fe611342acde40696b2fadeda54d7ae9947b1231c588dab5b2d58a84e247f02b163b3323a275912b4abb5ab44c8824936649918b7b032218dc6024780fec7a4d9a2de9d683f48fb0d650f2e4724279d0bfa176d12174c60677fa0ca687cbceb59670ac4b2f1d158ef5080d8fd01f12db89d84335585c96f7248e57e589edb2b24a1366c8beaf41464d917dc86835188d0f301bef819970040e110efde1b2ebab678e98a0b46727131b4f76d168eda241586242e5a5cbd1b2357ae9d966d2ae713a79e97205c303ba226452d36f1f42bf390b138cb846664bba0d1177d5fec37b60ab16570ed0711fee428eff10799eb4e7788b2ee8b80ff721f2e8780f6cc987fff0b163b37691f0d2adec588c65612cca04ddd96c49b7012cf3b28a27641006a770a04073c987443501aa8904a1a06812c98322098a2fb80a28cce8bc18cff8803a01b5445c5469f60aa48e0a97032fc6281282b44ae40b114ca893289c60298c5050a0381dbdd480edad638a020d49636c7da86cd992ce895554c5bc94c10c963c8be3fddbcb2aa430e247ff8e5508820090621004e3b1518c8660497c28018410409d1558b104d3220b1741302e8a74b8c1b0c4e08c2558873850609ddcc1113cb8c13aa4f121059f942e4a67ff6879849f4ae9b3a5944e45ca3c7bb096ebb84ae7b4e14cdb4958e79d8475a15fd6b7e7d65ff06ce793569f4ece16e75205f74a67c7b36b77f7cea50e4efde193364faa4bffbe1a3ee9bc864788d0efba9025ab82a0fe3c72f2ea1f47c4fbc9b2c579e51ab5b35a00e89fbfe02f9c3e8c5b836cf25cdebe07d6036bb7a7d0e7e437f4f95cced603e1d6209b1ec9942a74f30b25ec14da70a25ae0f1b6a59413d5e28936f4a92dc771734ecb71f3642dd755af539e4c7fc23ed932e57c56e7421f4e85f62961954e2adad033cb9c9653686f94b5764e3b7520ca233e395f4fe84743fe279cd3f0c8c78544ead3d005962d8f03deb7c3207b5243cecb8064fe74d6f7c0ac531491cec591abdbd0c73a0f4f6ac879245305aea74349c331c9886ac146d79629dad0dff9cc92a5a3b47b427b9a0e4169486560a73f82dd0c7d4e521b5a03f3d95be8ef5644e6773ebf73ce2702384e61649681bdabe2103fc24f19cb5319aab338d66f7188d409d168018bf4ebe9f38f58a9431b011ca7d0f4a3201fe11f394eead01ff29b2915abbc69afb55d934e2ab264d5dace36b44ca136536a4353dad350502a44459f22c29a2805f0c8fa3324422d8b473ac911a1dff927398a2ba9100dfdf41b26aa85ea53a4cca184f44cef50be9ded9c28a902aa4f47c0c81d4f1c6495a75fadb82a18fed1b19f16f54501267d40bf80746b3aab5b4c439c664d2041d806a72888055924e1822eaea896b8a3cd4ff9853c4de36c51851faa28510ce8207386297b18fec1ff5f7cd2e653b5cbb905e1b35f15123fb6162da039fa9635544f69c3a838ce30653f6b70e5d7265205202ebf2c6c2eb1a045c62465cfa21cef8bf3e0b0272e3ee27c4c4ce7323eaa3ec63f86f5313a3e06c6677cccf918496b8939fa989898182b8fe3468c4bfe91f218717459f94bd864756bb2729aa6679f59c1303d4b988d2acffe727b76172b77291544d1b3b7c49e1de5f3ec60d0b37f42cf7e9a3dbbc764e8d971c884b8e1356c526b72c355611049cf2ec39ded654209e36a4741d09ebd659fa4eb89692e069fe41ffc83e573884482d823616e011c4ad8a40e1b22ebaa487b0f2c090cf64db0869c68e50deca373d2d9c28956c2a8d864fa84cd9e49ba1b053c38725082192c092705f183046c7a873cdd0e60496056009b229308b034c1b62841900cc6c3570c61060c6049629ec064b33082ecc410c6a0c13a5c553182713a1bb290048c474a51c389125892ef0651c06cb3f06ebd1379748e502308968453c304b04e0a11866ab0245d0dce8075a26c167a602b172c0b49c0ac68c5d50b9d7bded9d50bb6734fb49ea46259c35efb206a87a3576e15693a950d67175a912767c91342b0249d14b0ce7b60cd6a16a67b9d22d8839b8e2b450ff35dbb82f1c92124256cede291f5c1a884516e211f8c0be56c75e0dbb977a60c48e6afa648a45d039f0c8d647e8b2b22dea20df36590cd923839b776b2a351a96c5bcf9eacb5765a18ef5e0fa4e049ea506fce3b799ee78122b537fd4f4fa75927451199222dc1c9632b032a69542aae61eef591ce7f9dbcbbd5e0b4943a379f7e953ad2ab92ce9652b2d7c3c82fdbf648fabd6ffbf46f7a336cf68f63b17fb66493171ac6a29cadf6e25b29f1ee6e969205194813a8eeb4b32574db3b1858df8939dd6acfc9c949e24497d09c3ddb324d27509245106c50de345869f8a53ccff321b2869d0c4723d6b9e93535f9258a6df0cd2ad39bdef4e6c9e769ce53cf13cac7fba7132af47a69fae9743a8d343fbd0045fa4503e87382e275024c7082d46bade2e7ec39ed3cb7968a2050bd22e8819eaa747047d5d34061980e8a2390a43bde977d7bd0de1bf652bf823aa791edc2abe5255bc44b0095f4500690cf89e07b3d3bd07bde32178e3e72de8527ff3c48f7fca96ddf7990693b09d4c52673489ef32f65802f253df7fc74623eb1683d4983e63c9d4e3e4486dc29b461e7941ec12950e7c2b1959e36aa793e2133fa1194e2adac05cf7e816fd29e7378cb56056121d0c9cb88d2284789a588ac49dae3348e9e69c931e268659e6d88a3eaf9451cfdd9451c59cf37258e393d6be19a7655cefa5c8a4b333667f3e5a2ad228d18fa4a1ced8c385ec7218aae0a672eaaa4f352cfa4df10472b8e37461c55d261c4d16d8823eb451c715caef494385bc4594dd834fe79e9a038e6f88c38585857dc8aa3aa6b5a4d75e5cc1172d36c49544f1a4d83b3a08ff3393b9fdcaa76d1cc4e1ce90ccdb5767d4a89007183643606ca745ba2485de55cb670584d0401c9624544433c4bb2d568f2559d631a2eacc9d9d3cd459f7cd938fcf41936c3be992b57baecbe507655cddd1305a203d4826c966a30f831e7698badca8fd2a8369354a452d3b02c70e551164a3f9d8a2312fa7532285a2bf3823bead061d3604c135a66edbd23d39666cc331396507fbbb345fed1849f53ca9453024d2a9fb481d1e2b6ab6fca7e608b901180b1f47dc3afa82153861863e9142269b0599ea7c2d15b2cdf68419a6f53769bcd21293e889283a774064e868a8882868664440c54d4358e0d2db58c16d404c4746b4a62baddf85603b205258d3da3599beac4b75bbbdaaf53e71b4a295750f9c254d8e21f056f88029da2860c6104607871274a8810037043d8a10a18dffe41662a1c99360486a30c4f2192f644292b118a3f293eb6c22806394c390a41d87405165c6451cb814970fbe5d11a3e9c452d070120c57e62b12c66bc952299dd91b403075618c54009e88ef46733c126f8388b5a0e3b6e00341365b22865a1f2f2288bd18ff4b3c0e0b99747598a5e8b2dba60fe2173f2124926241b42f6d34396670727f07113179481aa0633f0c9ea02360be63b8232460bd2cf0fd20f6820fde0031b4cf9810aa41fa020fdc004e90724907ef0415272e5680d19d2cfede5142f925efef4e0655e22fd1cc5b8b86c6b6a77c539fbc8ec3c7e82a6d3e4cc17ab5b2b3431e784992c9bf3e7688da0771962bc2f7b90bd44e2a1e9a5df78c8c173043e6953b9ce7aa70f44b5a4ae0b3b8cc388e38bb3b82202e3ec2c8e361cc6639c07f462c6884fda25b530a14b78433642b19f3cdb711cc5a5271adf8a572c828e12794011e529e7f944d05bbc07f6f9f51e9864b2b33583e5d2349a6012f664ecf1956b0969e0d8fc5afc890ba827ab057c0efa93aefbc41cd6e7a3ea1347d6d7451040a0c560125680d9a2ae23bb9daf3c97309e2772b64ee2ca138bf8d0305b54882c5960a0c8f3891c9b2d1d145c0993556012d6a3c407b5a51a173315962431e7035315ea2ca34e03f50e28c142d281322ecf382bbeafe605352f98f4c5d59bb2b325bd86d37954fd9c5f3384edeed6690780bc912c6f6c144b1cc74d8e72955bd55afb25cf49a728847fcef95f0d226fda69a5d5b39fe385416ccfeab35269d9aa58f3053a4e90db5f18e45a00481df6d5db7839654b1d2a049574f9e5b36f07710bebc4d172a2e46ea16290ae05fa53e4a48e1764896bd4093a5bab156557abcfc9d54a75d8d89871696c542450b528c005c4515bd44f2175e1d93329d8ac5b73c4ad36055ec775371a3f68d2831fccec123f08c2c1f98192205a5a6aad38e99684d22d6b254ab7e48f770c2b44b059dc96974756c8e83a8f03c28a0e829059e9e287242b4641dcac3c116465760491151f9010e2031b19690821048c2232c210e2c58d8c192c899131c5114464b04008213da8916144088454591a238d248ac6581281902f646324755d87746dbc3c12630d31d0f0acdc1c2f8fc4c04197c65dbd3c12838acf8b9b7a792406918e9753ac8cc1716af6491b9ca9f2a99ab2ade470323333b3b5ac21b822d53f0b82ffc56526aed5a60da90aa894add4954d2c15a21101000000009314002028140e878442a1502c1e0983a67b14000d849e487e56190b942488510a194300018000200400460006464c1300888517a3e66db21ec41b12d1b522b31ccc48973e666ae4411df104f1540d4a45ddd62aadaaad099a605449556d95a32af669d2512d70a04ac7de8ecd48275668daf4ea404931aab268587520bed8cbba162b292f95ad772c633d495951b4b54755ecc91cacb84f938e6a08a76a8aa76a532ecab610b5c140946bb75273d24b7c231d18e5647e94c281aae228798fa8642d187628a23e2ddfaa698f1436b6ca4d4ae9d88c7b2ab9011c9ab7c746d2842165a564eb0ecb784f88836a9a9252a9523bae514fe0b08c7e823e60a605cb0d723304880e2f1aecfb409402b8763d793349f5187ddbf390151054b17f57a647baf31003f89e9720bcc8a162fcc53ca44c0bb8b050fccc9dc0ef666fe11ed00f2a051200deb32994f73bbe9455380dad85af97d3e09f00fbd6aee9e3d0ea0848684c99ab71a7598513f395dfbe2f73b288d0362f4855579eb965e710b86cb744be0a1e88d631de9c78d92521907c2739bc3cc9b0d197707e2cdd6c68953579590a816825230ad587f7158243e14db61d4ff132cac32476e734b78621c6862dbf8b0c2262ab718766c4e23ec9f1293c520069d9576226bb92b24500c3e8ac6582b445caa26139df6998286d102c2a7264357dc5df9130c3d0d982780b2cb89de192be91c5df18c65bd39d0e6c8af160fb000eb2e7371289cf161f864ea8977037058063acbfa2f624f641ac7cd5e599203660a449a3d0358fc21526a768a31402bb384dc51090ccdfc77db5bac80902d68a7d8f05414c207a027d5b1ff0dcd4a57e4550c3617c9996b5639a3ab414ea0c0910054a6e6373a7b77afb9745921dcd784790401ff8c841be48a58b136bb2a41c6956b40a258b6628cd8c30bc701ed45baf74267e7e515ca5d67b28e7604d147da84b7dafe3976f06065f98b242cc6a29a53836b4e763753b6783269ffbe9dcbee847b36a009b02a676990dcf93876a4c99cfebba9f6c71598810f1a648cbc483c48c442dc4d6427b8c6d112a831a9ac1bb90f1d66f2a842d8f0996aa24798af4318fbe35857d39b1694bc65662d828a23f29e9b40e1e67d48b869f5082267542cb55b014c7786894cca042f9600b5d9d8fe5a7ddf9b89abd72d480aecef6fb9d19e9cbe2f7adffd261e9143cf600f137117bccefef1f8545f28d19130f01a056cbee1428b3bf86b82412a8e0a50d339fa302ad8c846df9a3910ae21e9ed46ddb20242f060e23257c355d860dfa926007d187da0647f65a7b446016344203c352b20848dd165711aeabc78470c8bc3874d56912b001cf6d166271237768ce49f59d5a1394069388cb191d2d1f6cead1d9e8e49c951aaa5e68eab198d19970ce5dde9036a80102dc7f1226735bba63cee01a1acd84099c87b58d19fc04d9e98de96af2b5f405b82f2b4e49fc9b05351e9c72fa95e6ff6d45d7bf0a3e582ff60aa4a25709c8ebca78b760a21c28ce72192bc3a26461a52d1f112de3ead163fca7a1b8eae4b8062456b40f32cb7fdbcbc9300fd80746a4ac30e39f3f57fa2d7318195e5bec37daf2f1cb8c9a3036fd5183766b231f4103c2b0efa20ed0b8f7e91687982ca4fffddadc2abc5a012897673f229a4d2fe3635df3b9930dc81791d79a6353481619f245e0c5d87fcc19d6b49b56ca65d9c3f793554bc7e3d39aaba8baf708fc7083cb74be4a1feaa74ed14fe604d3d975dd9b8528f892b3514798e54a0d15878c4a0a4f98840ca649131a77c415976232d0ed6939fd342dddb83ce940467d32d1bae117f9d032371adaaf5fe3136ad41de9a7ef69c4cf40839e961a9a1c20b7ec80bb7265bef11bbb4246d725c1ea27d4ab9e6cc2ccf8219d2a380bd7205808393f1ecde0b7b69e4531e91c3ac74871d236a45b658fb942ea6bcc2b144b46a62c8c04cf07fa16595695ef997c314ad8165539f00235930fd4eac972e8d9111f65d96654b649a4ea9d3a80cc8ccac07447339e85d0368b8239020939361b67dbaa8b8b8945a0d8300d8dec0848c5277593e09ba733638e16dd8e9fe1c648dd980a323788895b6358091929e45fa6b4a091b27dfe98639dd201308ded299ff83cacc45ca32c2f40fb0864df653867e730f6913901edb30d979228885eaa174fad6f6ae785993606acf7008d5e9840e2b63fdeed90b6bc6244f206c3bd5b8dc6a219616a23ba5ba86bfb96b5f92687c6404add9ed413885cedba61a1c2292e6397ba582ea393d88b42449c3092dacf7293180a8d8cdc35619e45f18741d8bd40d76e215417e24f532b6c7517ef2cb944d2c297836a4bedf5c7297254207dd560aafc07486a33d864941da2a228462b05efe0251da0439ba712a3cbdb91f217213dc19f461f04ed2843ea41f0ea7f6e41688eeb528343f1ace2db11d094dff3e08861b22ca8b88843d79af0f9870e6230727d92a451546fd97599166ca560b77a0e8c0c7d05a1de3004d8053770b9efc3904ab606005e07610f7d0c3f27343f4b71baa7a6b860592515ee85d7ea262960d0ec568890a0ca4094f54ced73ea73386475d2dfab8c60d37d257c54505ab3c89b0068283eae1b2248c401684b2fb931cec5ad90528754c1d51079d1538954b9128c56490a35ff7d3094ad88c0a0d1eed21f25e911740baefe18ee0f245a185aabff10d5a39ca49cf91bbad27dc4f054204f4ad8cb87de799fef1553f997456670172f2c2b1ec72092509b930b91c3b5097c75ef44851831f434a4ca6d0c10b48fc178282ee30faa5e765b13e073cf191f9542909433401365c6ec3ef996b2749fb7bac5a61a0828d15f020e22f266b860e015630ce0000c0448ec83b756135c305b81901fa9d64eb16ac927b3af19d3a554fe4e0ddbc862e40ff739b8a44ddcb6cd3b2744ad2572bbdd5e5d6987281ea64bbc0b1334500af3e6037880e7ceeccd6267d1206394314d224e4290b3eeafbf2fad7c578e827b72d9be48743c2ddb72b33ea2eb686ea369200b57d84ad53369098de484e3b5a6ca18d6d60ab7d8b97077c45728d816c211bdb1936ed19bb8b96bbfedb9670c9fc6902c026dc61790a280b7d145134f30ad90be2129a9e365f6636358d7793ca1f0105a3f136920adb9fbc6fd09a95795d19a7b083aabeacbd5812ea5a98baf110a90fc94425ecacbe4ffe18dcc2f044fb01bd02feb8036e52910e0fbfe5fc82bcbd72babd90284936b4687b2aca12dcb8a02bfbcc2a24b056c5ab8c65b4f3103dd85c2b7c89ba53e13d713e832099b5e8dc78dea6fdbd57508ef8d32874fb7b4848d6e83ad496159e33143bfd09df877b48cc8e97e389760f3d53e50b74b1004f18a190b691186351c1cdfcb40568e1f0ad05671e9fbb632761cff1a3df281d5b057fd822de56a80abf6c9b4ab2fc2d8600a9a5fc7f7e406581f13fe401e14eb4f80e6086dd703d62ad68bd3b41603acf3beaee98f2f7de55972a65d5be1dce18aa53b04b7d2a0a7c0e8bacc5d68be11955d12e6c1a4123706b370fa8ff659192ad7c817253034b99db8ac123129e17f5ff8af652b7e180ee53a532cab5d6547f84c928c2efc8c16afe9a10b3605de247603f81a06486e21e359fc29b8179f6243a237c42f1ba8d6c3ccbf1fbdd92c0db4a065e639b5fdeb19ae56ed0fe66ba7b4900b97336a767936a8d880f6366cd3645bd3e572bfeb2c861ec4b1c94fde4da41888be0e3e17b70c4c0ddf50298c4744bc9fb0f2de4091c060e1018501c4470afb7a027a6c96012d9c2da20a989fe9839e7b1e831711d00b4bdbd5fedac2239bba70d6027d66a1fc264a14228ef4e3646093434aa91e1b812f0e492b195d8c410d428bc81db328cc1d8f971e2838406dc33cf9aed5a03652cd66284728b66dfc5c0cf6c5e59d660d00228fc1fc5c6ecd4d0396540ca0f0cf4ec57f44554274b89873418485d01a1cbe605de1039d28d01caffc43c575a5d556ab5143fce22d1b526a272800daeed621df2fe76725b73eb8c5c3135b045526bf84cab024fc8bffccdd51193b5bf0dd0a1fdeb1f9df53e7204d7c72abfb44079fd0d8bda0b2d3fea91f41939fdf19f0ab15d3cd416c0c7d756a68ab01afeb5b0bb7840ea4aabaec99aabc444bab0a65750676229a19bba05188accbbce6923ce372d421909902a7542339354aa8fdd104a880b2a60963460aa6771e9f4931fb6aa128e9e295de8aecbf0f359d0d5dba0790e377cac700236299ee396bef6b280a95dc2378842b099c180834237b823ae50eed35eeffb52f206a50ce9ebd62478c72c7e904b7e1a6123991c1c4d9cc07b580924774e958768767bb131cc02827bca6ae60d1d578d6d4c9c5d27b7cc3c8aa0190de5939d145b82e6fdb65a013494d6b5da9ce3af4c15932a141623ab7cb1a6ce846d852730d8b307bb3d9116c22df16d3006345880d8d249d823dae98aae5c20fda7f19830510163c18a30ef56c5f5101fb9f097022004024e624f598b50e48b500dc09484918cc44dc21f84e367d96d0d87632edf7490c221680cbff0db74f1283fed42cca94a8375d940c227261085429aff708a04b59247095fe91ded7ad5b601ead6cf3c151e7b96bbeddeed96e1be4b114dd4a1b5324c35b940ca267992d1aa8b2fadefa714e4f5f2d5b28227d8bc10215e60d59dc8e5ade6f2b1ddfe5f5609c7684f979c6aaca2ed1cbf4f01ec29cd3600509c97ebf5269ba05c6404188cb3e07deb9cbe574ab782a9201acf306dd68463d2fcc6aa2758d72ba9c29d39845b9ddb4569c4b804b2a0881a7947b6a0adcf425ce244ab08e41d53a9ed47f68ff61e806c0391fd35d15872f0574fef71030f40c2b312c6161f451a1420a11e42d8433906a4da6a02356c75de7e6296095c519cf317b89b99bdaf99d734971e12e18725c9266cab5c86fd05be0954aa8a38d247d03161954e31f81d645b85a9e94f527d34c43b0665e7bbe9f5cf2173a81f2d0628e429f080a96c9210a6700ec548aa9f4547c31f59bec4aa30afa4decbb856ad1839a29440f67809fa2c1160f0a780b37ee17144ebfb2fc5fd5cfb5a0e64e90551f5a7036b8426872d34d089c521ff84c7284276ee01b1dc0d4f306c2c65fe020c11af1a67a372828c98d375cca15c2373480aa59288f11c099816a1c8b94738370982c6c47a6ef30a2f1179fe0369a48c35c227d97b12b61225e74396a4945c60cf9f55bf241d1c0d4ae965e0974bf68c0044634ec220cd79e0fc1a8052ee00a0361f3babcbfef0b420a15d408d9606a8bcd37adb6db1742ff0cdcbf09441b8aff167a9c0570211ad7a6001f12fe8aba55772bb89962c0403cea22ca928a0f3253a45ae78160854d59df5b4d35cad9ffe6ef1894040f6a1900b583a9e82afcc34738c70349bba2ac2372ac61e0f7574c947548c7c39cdc6818d03badf6cc7bc961766eaef1addba5b0f360892166c9787d3c453f0f22549e35d96a5572a0baf046fa31229f0acbae46f5b27bc60157fc889f5fecb13a6a36e258af987ff01651b5bc245b76bd3800dc7fc5af21dbd1e8034651edeee084d15158cff786f715153c0d04a5c3f2b291254c1d40254557742f06bc3ebe57edb90d1c34d5e238580c55521e7ef7775b7b90c15dcb741b30d40c519e10583cc7aab1415ab10b11842e0b0f5cea1dae18ec130a144198f1f333f652e5b7d1843f74d469ecea158f972dd7bea4265ff1eedb57b43cf42b166f6171293a2c350d8bd684ceee1d36540c441cb00fdf606086667460e00b00c01f7a5ab332f0e1d0fc0e2e48d509dafa3995b6f5f39d95ad9f05b06ffd5c89cd656cf7bcd2f2db65523aa8dced179f938d6fbee0c57b1c77936805032db863231ea62261e1b3280866ba8db3fe16632ce783a86788cb96eaaefcc35c5dee4b25886732f839876990700c279ce0384b7385bfa287187a8b572c90290a8083e12d741738b0baa42e0b05eea64d1a7fbb88f58497179bab9c2b034500a7bd2c03fdd0cb8a57141b3339fafee71a32c21c4d2b1c4e72fbcb9c0bf9fdcc6f4ffd55264b717f26c0206478a1e99f2be997c9e5058e6097d89152d4a0552725d941cbfc9b1d6804287de0069a2e603f624bf18ab24c332324754d0dc71e4ab0c36d8f5c884d060fb79b4050952525e8160347c43008da15812975ac4108f4a72c6f0bd109aadd5071541230e4515584e40fb0ada325106bdae71e97fbd1161badedc6c6251b720503ff8bd0469fdc00a2c1570336becb4e762205f40c040c77d894fa83ac9bcd7ab292cf75ab08ad7223baf2ee69069d06c00cd932d7a43d63eab42ccdb58517913de44991c5258a9ee6f6af360087d521d62f4fb7a2b2ed7081c04b538c86153a3a5e56b711fd7f223bd12c1b34f845828d6f83957706d61314765faf1e6bc891b22483cf74def2281ca4fdd442d04722e721d3ca3c967bbd5b351ec7c837c9ea29323dc208a127d5180db016623fca41801cd8a25363abe954b2ff9d3a9261f23a664acfcfb60ac1e57fd1f59702c0c0b797fa6ed6d4742b245cc2c52924432b42f6960caeb74da1b5494e6def334fbead4dcd2ea996bd0c3896fa39d4e29c7cb9431058c337cb6ea72cb63963edc14e05f275f61dad01e31d79175efb82e9f75e03814013adf85ea508b03b41663e41604f57890732a63f487fa26648a5015b97e6606628aa17467f4c487c75357ee39dc423bf5d1d373217c590832c900cd250f2f89e15390e391813ad124789acba20f938f29938cb061f9c1eaa665cdae754d4cb7d049d0367e62291b0635f41451d7564140fb550b5fdfdcac4ca576f6892984c61b7ef47d0b81c07f2c96ce02d574de790919834f332a981cf3efed305652c6fb37066b2fb24bef9d8393d4b7a5d87a9b1d15090c587319dfb5d736b5665c60e389c1c57da02c0682f599bf67734eb27cea41ec22c2a6a7f1ca9ee0a21d201688b3b8bfd4144393ca866ea5260a8d5f43f759a5b9e6063218b0bf287e1a6ddf92213fce3264e25e87913a18a0b302c5c9f98b26a8944b4578d24942592d60d56a784a70d29868bf98fd46c07c3020f8372128372fde49483af402c1ccdf1de3643ead44661915171ea340602a1206976a2402c70fd930467110815274899215ea54081d368b884ccfdcb7dc09f0241fa7206c5eed39f067789ddd88a9044bf0d8956268c2558bec64cd60544ac46016a8c337a1de4239f9b0dc322a4c7d16333dca6774efe96549b01844230908f7f2dda7b8eb2980fd5cc10f00ee1227442a6b39193d2ffa906459b8a7c31b8aa546e307b15261308ac7ee46b545b42f632507519d4216eaad7c76c9c2cb47b55a9266d12c184d6311128c7f9812ee3420f07d86f57d50fa2b50d918030afcd9a1092c0faa6d89f63e1341c2c60cd553806be9c9929ff436ecf00365a9e46e9546afc375b58bdd34130c4d8fd7bfea6b2ed17be4e9d9209c5bbb2451e80153551edfb118247477833c18b821195962d883a76a737a0a292514bd786af41a17f6c4a35b0008c81999fb9f19a7c934686fbab7a432fc5c54474d783f06b1235cd4e24a8f81b707807d117867dd638dbf816809afb9b02890b5bc202d0d1a900c4c2633b30caa7e2e673dce091e0819358b4e0194903187984bb379d7bc0083eb6673b1caa99470a1120c146579304e7d17822ac84aeda8a17f46bfb950a1e713c39c056f201113bd8ac3ef0ac0f04cb119f8206b0e18ee5ed7daf2bfffffc0375aca9d29dd781e3e314eafe3fe4af0324f3c1e9377204e83949eefe2dd790c8304b8617066a08b84bcb703611412e9e828e32034ed593471411e25eae904a70f0857a16a8ed8be04320354b11aed154fa96bf4178e9ba1bb00110dafa27a6820df1351a4110e001e6d624334447e00527461ee56d80260517d1ba67fdfb83345a0b3f83e343a69a0b4b459a9a89ae65fa73670a6d21b0c9240440b587794b9ee8f146f2ae299aa8a81b4cdb61e102e4dda834f18880eea3fd1958010a027a7367d99d5b8978da9f1f93d400be2453998e02d78bd11d284fe35e78fede45bf95263c59706bc12c1d8acdde9f5ae8e537b3e550e74c1986b0607437e33c58308adf98452f19936088241b2da1f414ace17f502eda427b63e526f76c95d8652948416c900cb637d14b8f0fa34216576bbda3a5914b7178c8db41cbbfc78f14e7fbc24466fffbeb1dd082706034ccd5a764722d3188fa390f21f9a036e8a33a18d70ff89df4ae92a1546633a41095706be76ecbb14a245542b9569fd311f6b28e28da10fe586d984769c2aa6241ae4d1e108c8d9e51d611b636704995e833ac14b0508af0ad0e04e3ba3b42e13aed6ce968a066d991b212cd43295620becb94849e425bf451fd0d042a72dd1b3999292c65d166f48c5246250e5253a9cf4d471d968e6c356b0e7a3a4986ecfd99cab3eb9702a37b8d4ebdcb98e96a48270987cffae022b2cbc15ce8e4806382d979288df70227399a4b75e3867bc065414575a801c04c53815a1c8de1aa5848ae3a11a35d2f1e59c0597a72ccf7426779b4b13a9c60a715e092420f12c0cf153a0dd38d059cc6782aee46010229cc75cbb42f39111498d56f55a343e425971de9f0be4151c935541f29238a6e45af38a2580e76e30d6a2af33191b1e6e0314dd78f1d64da036860e0f7b25871d041afa9442195bfa0118b374db946865814b46ea2805dc5585587e0008641a351ad5c2be528827ca242f07e70b4314d206f68b8cb22e5c9cdba8a6d945e9537d9ddbaad811608dcc4c079050a4a243402255e4a8cb93cedce066634211086d3f0891eb1e5c92cc0a3109b4b7881dc1178fd484b7611be78d71fb38dcfb60bb46fa8858e6501299c5af399d595dfa9b8f451b52797bb23dbfa01b5f89c3c2f594fa6a8333a8ef31303baf77e7cdfb147f3f35b371e8e31fcb9a944c793908e4aa428bb52f636d72ecb6cec3e308a829215d427ae9678529688042fb619411a86d9b9852d1abec15363b533f2f3f15e9e67a12a06dd1a3f779ddab6167064834edb20b14b152dd050494ac17349377c5fe96f6358752f24652673265b009be0dc059635195834bdf412e102fb5db7d87721082350a76ba2e648ce80e31213789eab5fa6eef9dd7117133e9cbeb7fb591560dc604d1cae8248e5b3ca4b0a4b23c080cb342233a7cf40bc7cd828fc3137c471fc8419d07d14a052acad07a3fc5dd9dd394843847680c461f26614a4749d50ecd3c715ebde4afe039b04241b02b5181d8844f647ee7e58b2a9aaaf775972012f295f619df3db7d6664454d099392b3692cab5bfc9c0064080836e6f33984080cf5df470dfc0defb62eceeb54e97117405d918aa8975390d24811254c19c467bea6b79b01e560a5be067b8a41ba2bc2c1e367ccae68c0e2cdd9751ac284258d3227e016ea2d37aee07a3dba031c473ac4375608b4843f88ca8c447b2330b5b4c277a8d5f7432468b447420951860f496b76b4834b3debaa44eb7ef15ec2a850b49d54771c13d465e3812d1b15c531e6a218eb6745c4f83d54a2fd51bd503a62a10b5a87883ab09ba240ba8617c13cc9cd6fa164c3dbc82b5c031fba4bdc8e10306504563dd438a233829a395c57a8ef185b4f90ff1cc9cf5d76c7e079a9457786f8fccc6c70c5cdecf19fc470369246e3906439a1a5568958be75774cbe05684bdb9663c4554cd1402788c6c499c05241e0ac53267c0f529c3ee879a8d038c9066fcfca39d79b8be2d1054b07dd20e2491213181890a8a978343a04a7179b840a73c438d03fc407b472e6aeaca2bbf117c210c6e69d986134d8661f91861f0b03bf6aa4bc42d4a3be7506fc592ce5449e189410b0cb8bbed792a123fee2ae564c9177cb43a31cb1e4d6b7efe00b1834acb934106c8bb8c726c324ac9d5b19e0fb2105d035054872c375bfee6416330e833e421625be409f2d2077846307d2ea6c341088f03dfa6d2cb9226ef2566d8bcfe8e86054ef801da316b5fc985ee2d419027a906eb6a707717522ba7ad19046c3e7ebbfadb94a1d9d7f442fe9d419023d085f27f7dffcb0ac78240e37aa0fb1a867107f6f9995e17e3774240363fd209851d5e1fb4e5709a8939baf08d915a71754777a00d51f03b58014141c7146830fdd4f453fcc44820c2660c7afe3fb2037f6778c237087611b297a7da48562bcda60fa26f8b4e73604ae4e5a62f023336679f390c2b24d82adade5592ba2c09ae9edd36070131de1e9d83302fc4cbd252a9a4a656d406ff7a0d0a410d3116bef93d96ec19cc10f6677fc6e6333555d755067b52ad88c9441e52989c7777ce3cae6ad476f3f874ab8c972d3fca5f04da2e3fd093ddab0d2416ca601452100b2fab147e7a8ca0504231310e906aa76b5faa15567fdd070ac89739d5035188bc31cccb99e40c36e7093596879dd2743d302cdd30ac6254dab8119d733291ad260d94e90cc584eb3c4e448eef0d1ba8308b1e0650b474bab78d82a35b569450da5b840c7649ab15ae46969d7f0b8fdc2b101270642548d12d14ba38a97eca4f6c626c94882ba535893382fc227894b9c3460959267c8c93d0f5380093f3f2682dbdf8fc78ae9d1f4a9e899c8d74251238a3aeba8a31422eb17cdf62bcbf15b4c1a97fb1a2fc1ce806908fdf2af665a06e92f3d03ca39d06dd7618f1c04eb9672cc66a82abf92f06652f5e4eadedfeb077eb2e01e602a847d14f6eb1089bb221d3e7e323beb308696e05b24f339087c1499bbb1b1325098e0e691328ad7e223c6af25f89048f98b1d037da05f8456b6151f002f22527b3bdd89777c914e92cb23a80b06f18586ebfc2546228625ab19757133c034b8ea4d38be00c40fc1a95bc861d373e8c5f582a1f42aff06c021e1f910c92015f735d35f4a0012e7a0586da9479a634e50bad026c9ccf3a55adc28ed1d6f4dbdc7ea038f5122cec152bffb921f0ed8498af31b60ae385bf9cd2ab615e2f9e65a5797a7f5593a0fcb31ffd9a315f5f0a9c6968213a189b2748fcb9893e663cad5e6db633bdc2db566ff1e47d6d9673a4cbd1145c3725a66561c8b0c24258af92422e62e96b51088258fe0afb46c9e8e3a1089028bec11e8997f7f1b5ddea01ee8d537b5b46f718110203494d42b38a6e4a226f013483a0b886b628f516dd43e307b1e156bf0dc9788c78226fec67b5c3a1684ee639908efeaaae5d4a8586ab3cabc7f84e6b3e261294dce739327a723a20e0fe4b97eef28a7d46f5b7e8c0e97e9b45b8d9b51611f2146e251b7e2c3bba652e7538724c048838670f6a88123cf4f0812982b36525d8630fccd62fdbc189eb4c405941b652f769c012daf38c8c917920db4f527b0d16069aee1232e3c486660fe6f2fc82a558d63830da08da6a0aa194848840e3a1ad99416f6a9108a1c6ab55e1c1aebe63b5d7d8acc9a65119fed6d17676650b46c8b85ee09d18c67440dd4a5db38405e861918fb4801fd140e313234c47ad0f94c0130f1f2083b0264ff4a692fa37cc78269a6c723692e3a8eb0890fc76e70efc230334d935fec8494cd1a3ef246f80abc0b242ea80c6aab0422102263337bf3867bbfc3f11584628096f4ae02fefc7fd93210e6d41db38700679a1d73744cf1302d719653bb38185fb397f95d4104d860ebd7175b4051a7c6ce30674e23040f22c4d8368734e053aa6692e1d2c482676a58447d6e7c305d3e9d6fc00fb8931450dd1a66541e082d5e8e69e85a65e02aef1b7c60119be4672b9b192cdc38ee0b6b94d59a6116017706ca236fe8fab8522741d0e993e816ba850b92735451d27fc7cc007bdd1a3f0440b87ab75314f248cfa754d37603e1ff4c408852696cfc7a6eb834f8c42e4deaad3f50e6cd6d796ac640df5cd64f341153b3c54ca0d7de309f895f15ef5f8f762b9f11802bdca2d2b4744bb6a480a0bb2cbc1e178a50c6e7978d83f85587daba99609946d5f8bf4b0a0c4c39cef70b699035c28ff390eecf89a3442dc9a35a83d91deef9193b8b10cd385694b18f31b4c0a261473d741d83c2b9341927facbfbc8c36503de0f0f79e00b77764ff497e498438b71521096ba2931bd1c3e559ff6c6ef809f0901446dc5223317f3f703134f2c43ee9e0feae99b020f17e9074bf2b7da823ec42696bad8ecf04df413456a48a02a8190dd0272e81e3583501279ed5f14192b543b3396c44fe8957bde111dc0b651e425d3e9b52b0789bc13ea02a50e4f2342de4079e1a019c27b3a12f0ce538dec61e303b4602bb8386e4cbb590060e55ed059c2e1d68ddc19c9d86d62d2c1d002f13444672177e95cecaa496cd617bbd87ca8ff46773d80ce4e8a2bfa8d252bba051c3eab99bb26e78ce88776282a6173fe3fa8a6d74df3350fc1ffc06430a2fbc900e4851027c1a248bcc09ebb61bcf6938e26b533a75a9abb32110b09f3e984c42d5c5e3cb67ef4b0aae60e670bb30270b039f6f22b6c714dd0e223910895a8713662f2a07e1e7f213fbd7f49100e33e0793d9e283568ed88a245cc3912c2e1318ab90d2daec3843d7f71593003bc96641f7f9b29ef122dfcc51659d3bdf267349b1e4e285ff604c26e250b56de5d5be481bbc04d35d5be3516711ae6139ed61b88c204cc90695590dd04cb8c4b806df3ce24bdd08ac345ae1d11490e60c234bc27e23349fb42123bc849260a279333c53b9ae6ed4b7f06249a4010edd1437028aa2794f36af787a48d969a9a9bacd7ac8d75e8130a81811c183504f14aca65a08717e9d516779a523cda9b34d99bd75c153c5cf1ca14a918fd699d55ec4fc2e566a4df8c2449f113f53ba1f55747bf1866732d375a903d82564230cb0aac0ca99d7da6ac3aa094f5969062a712393fa8d3ec51d1133992905aeacc447eca6cc8819c7c0939022cab076679cfc2db66efe0fc865a43350f61e9f8c2d28fec9e59eb9d1b00c9774b7e03608f45e5de9890e5749590144f482ff5af6871bc516a810033841c1b85f938e4cb70a9ceb66105fa2a247f250fce5d53f1652c60bebeae4e6b7c202d88764ad2d9dad4d072015e82b4ad3ea90d28b9b0e327f97fd1f133853a075ae2f93801b5d6e2431e81a7d524a2ed09c94bd31f51c8467070d268c2a090f3a067806d4bf2d0a9a5cca65b7a52da9d2c1005ad9cb857a2f3557a1d03467ce2c0adc0ab4d3145beb5fb302055724ac2e5ab5cee9e326624ad7383c127e1aef1bda4a2e70af8cb3b97bc6a3049b274e4989214169b115269c598dee13ca44c460faebf69b63adafb644cbf33ac42256af3cfe3f95f3a24950c770399ae411dac24f9d3b49a592b4b7e120df7e6e4c6ec434d36a2de53b92ab2df48af7c3396f3e987a8a933b4ccd846aa05024f3f1a5a101deef61d135e97a4895d88edea0cde5e19669a02c98cb33e2dcd33784638b5fc3e23de1bdda2c340fc149ec7aa906473e7ed729027673ee5eb03acae8f9be3f6c1cbd9bb5fd3289e33b2fed69f358421b7b90194234654a2d291e628c3664860908493d829c08c1694190bd25df66d4597989d776dad0a1d90b4bd4f771a2dc965b74a7981966306dab42a7a00a73bf0d23e20ada99fcedaa54502189056b72d9574206650295ad7ea22d3adf8217468c99dc54818a0b0f546d8185a2c1a45c561addfca143c4db91dab623623903d8688c68a9448cd13ebc236b72681332fd50e1a4b38ae3341fd06e72281e58a968fc71278f4d237f715049a1887198b6b308abd62879c170469426b4d8f76ca204114189e7a08e3fda4df8a501c017358c937a1c156dc22c56ad41ced06397818f3e84e1777b8f8a589154535c639617ab3672ee936ec46a1fcd5020df466c95654c46ee491a454384c37eb3db8167cb229223090b95ac726d24d722cbf37122fbc38f902c7592d1081cabc099a5aa8e283d3b7cc37f2cda7444af66bcf709d16c83981e62bc63105ae35275082b2002019980b8d50381d002c42ecad38dba01b812faa2ec31cf3ec4799502d0d163d0710e163da30342ad86a436063b1f306f35777e3210f65f55a829786668450b3488be945d79bc5d520b2432b710e21798b8a833d24c76bc4d20b96562ba5aff4c64a411202bb736ad760a04aeee7a32af02fdb9dfb77a2e365db308646070a3e6424ae8520f20a376e1e89a4712a882f8be27e0aee02cfd1b0f77a1054e5f2cb25f5cc4526a12c48c55bdaa85d35125ad74896ab9a33898e559c4fe6d74c6e796e9dcb91cc4595dcbc9ef99fec445aff59462210e9762f479aff3a75e69a59d9430a4c389cbd59d503cf05be9cecae19643ca0aeeff2d688a8c0865710196f3c78031ff49fa927e65ec4db4520dbf5ef35995c993f76e09cb27ca02527262de86eed76a0cdbced5a49e3ad0ab79913c74455602bc3aa120b664d21c9a6f1d3e8420edaaedb0ff5fe9887b580a0759d2102dd493baba07b00bc3b2a7e1020b96b8b56e607d8ecd7d3c7a1a1fe7277a4378e74d237e9947e6a3aad8a5b0ebf16cd654443e9b02402c2de539e8f02205723ebf935f9f39d3494cee7bbb562be7b27a1c0e8b2d9a48ee819a03ba307a98be93207cc262b0f99593606c058adb819b675fa6b32fb00948904703da94158bcc6ac3850bf45db51a77a7842949221dd83854ea07efb91afdb18ca5d74694cc7e32da6ce5498b8cba295a4e06d3350b0b1214d9bdc3aa244486782375855fbe6ea4c7bbf583003fcb7444f39ee95cfb6db7ae793daee383542074c720c6ae7b421edc076718b03b48811c1f5ae65640ac5a171fac34778472213462e7ca2a2873aa5d621a0d0c835bf69481d2fdc0ac72e898d78b607c19882fd4a7d91632c2c9c7e0d3586a9e26f9ea63d9fee2a8342f09562d9863793853d93eab0bf734aef65d98b2e67d004e530cacb5740a9daed3d098620fb4f00076af249f500e042e6c26c5b0be5ec7c52800b0994ac1171cc02092a57a66a27949c729300c33e08f70b384274bb5dee00718610ecef8b49adc871e469e491cf1da0494881bc5f02dfed1f97ed21ee460b2a73639bdfd9840b2a7cac693dc21645a4be4149db17b97f4ef2aea10965beb6f896925536c0e4a22b050aaaab1085ec502d3331eca72d5d37592480c20c369af86fcd2c79374fc48407028fdff8376dfa426d43336227e101d731582344e2e3d182d01b57eb215c94923223e23226b4644b2d4aa6daf632cfc045b01a72397766dee1d4f4a81d37486f87ee67c24b76735df0fc772c81a7f005ca2f766f8ca2d4f01d46f73f5da05323032f4391448bf4f666d2e6fcef96fe694c910fcd826ee7b8eed24c86b5b49df3fedc74f113a2870b80d9f66cd6edbe1a073777e030ca94fcbafb9b32562c851aee4d80c32bd1e46f5493430d8f5e45994a517c120e354b54c742e35e5b00a5a56b96458155250921551b5f21124cf84a35920c702288043a276cce5962d0c8f12f672ef6696cf6baafbdee75c57c104a5208ba36cda031a104e1f6e9c427da06d270bb3257c8f8523b2bcaa85e789d15b5bcdbd464cf2ae02773c2513f9c5025bb918e82e9cb70375841ef67821e3d0824d2f5639e6c155ab433d5f40359c8de59ca9be8f60ef68857418a2690411b654565520ef75a6813aa98222ad05335a6fa6f19c8e1510e3cde81a47e2846b92e01ebc81688007c519b98c15c9c40953ad3557cb8f64d0c173f06e20fea6e2a72fa9f84c25e5cacff66ad51713388e2c4624485a7b01b20c6f336ee4e7ad30604fc252a018a71720e7ad6dfd16a831a9941541301f1ed4414eb26272facc8b335a99b0a96742330281e5662c85620e0b0df719a3c3945ec96423170dc473727f7dffbd2ad005e5a54bc81718e5a7b909b6063c22f6dce54b25bb3893c58c29c4f9b05152274c0b42b426a4255d1f5b8b3e821b0c55796ba0ba50303d390c6eb3bf0c175560af43321e6fb767c764217507423a619fb4af33884c7a363460893c36b5c47b0c1ac6ffa99892158c198018640ae4dc960231dffd42888acba5ce7174d3fdda9e663bfd8b667f2798386a6b8af8bec937d29f6c85cce48b719c278ff48ee2b1dba232f307b53ea116b4620cd934d3e6807042f0b04ecc9396f5336fded6e7759c757ca84c8d360281723ebd15c64a79c8f656a56c85792d75213cad1f2bc9c13bccdc8e065bd2d762241f3252f8b56f126a94bf395a3a7c4226f756b6a4ecec291a3f08474ddfcb1385750be617b06d572c4c59052a96f5a117fb3f52470aca6edc7d1c8510fd0b022f1458c21c04a125bcf619c1e0b1daebe5d7295992741b5ec080e2b9add449d72684d5f411c558a96d92fd18c403f22878905c20677d1c41723da8df53a5c71a558964519937f1d053c903a4143d112dc7f5732da330d957d7bbcc2bd293c2a293ffbe5cac05cebef82fa6ac0597b0d36e16022fbb918bcd2ffed4607156d09ed04000ebf9460025bffd50a97db7da978a34783a3d8ae5fa2ed1490b190216eb1ed2498efb26295ae4cc83f6d63374c3358062a16ad1fc33c3ca3bd5a40ac7ba9ddd55a654b30f64583ca42c364af005be5ae3bd8b04e928aefa10709b62fa2076b7abb47c48094a2d8f7be6889f46a857c79b44a489aeb6ba7fb142e37b08637ac907b3280aee05d6c25c4e780dc5b40a9c4c1f2b944b21e58ec0cfff2090acb6c679d6684e1713a14463b366c23c9818c633d1fe51d196a8f4810f10884b9d653c77042ba5cf9c6f595eccaac5d33826b558f308bacd0851837b9f71ee0691f0e5677b26d833b5eba10a8f6bcf559a7fdcb2bfb6313bd00c8cfe8c2656eb7ccf7d5a0c4c6e9f1aa89ab3a33070a048dc90778a4b2521132b77a112d4f87971f7c40fce8126bc76b70382a1ef67221a4574f1ddad2b793bb5ffce2ddfade910c9dc47ed66f029c1253eb47aef2f113914da6b19fb901d431ce9fed465be3648991857e76cf090d4907302cd10749bda8486f0464dfd33f99ba35121d73c6e4408b57441fbe1b602b4a81a6fbefe2c057a609bf42e5d2ef2d43b64cef1dd21dcbedc0732c93ada3aef2e4af8e342c5bb4a6d4aaee59772c31c9388aa5963eed2170a53dbc2737d1ad0b38e178159488e82350801082424a2638a1e250920906363b4da4269a7ec4128cd237c58fd79c413b301f3fde8385da3589a82bdc488f7bdf2f0263fe8041df7ad1a03feee4779180282d8013a3225eefc26b377c4188d85e63420a7c4c4ace67ef6ec0445449325704fdcda06d20239371f6033a103a3c014bdcc49773d291411789adc58c4033ae258071f185f4e75b5daee81c0d125dc6ac2364eb77ccd17ea23bbb71c0338729d6a75d02b5e60d53db4063b0eca65e8957adc991612cc6756221e3cc42dd12bfa6872a6708b7ea90e30034bc5c89b209b40c83d3421a49607c49506ac4d544c5f86b02c628d082e66c694c6a59f8610b7b82c68e7efa2a1fea6a5edf84ce827ddfccafc092c4944b4b06759675b05c60661425e2ef429b155d1fcc0a5fb1429654436a225948e906ecff1c0d1355595ddb2d0d43aa134c04021bdd82e8a88efa2921cac91fe94672df20415e0914277024b40d066df069134f261ede1987eb0b5f1a83e9cd0b60da3c163ec00d1ed476519186df5814042b0a3a12e9e00ec67e816380b56966a8125989959c6e83c971534859eb825f2a8cb23d9b3b0e21f6f66c68e892557c39fa8257d64f2865ae8d06e8f93969fc452c014a1d83060e41013258b0b4c4c86a9c8225dc2dd38150bf99988545ed0d551cb1b695a5a5eaa36d8d9759ea5a47d178574d5e81f775a247c4b20df1be6801421a59059a89303631965a7ce33212faa904d8d5712a9efb2bbbf401a4ea6c32724df0c12684e66efecd6762aa430f5cb6ccd00d348f3119fe6ebf2c97f9b7d6ff697bb895499903cd20b1e428bc05f2ff363c98fc076f5b49e55e0a7d04f3e946b308092c1abf5ebc597b62e2058140b0496101cff2a2e69a185b24101f0f6a203b64af517bbab6ca0dadb72283758e696b3f0431780ad37d848e5ec427206e57b803953ee12d451f3e4c93f2b3cb4cecdd6a09b5023f972be84191d20940ca70a0053aca81de7019ded1fc8dad376ebb08a5f010320a9c898cd461f9a275b7f9a49e85ec800a192e2f74695e0428673115a65fa5d951167dc3e5800cf760c938b17f486dd4fe3a88bb055c8b57cfc51f384056d3d490ab284e39d3272b8f8637290d91455a3bebf6f4f3393535313b1c65c01f2f6ecde6e0b60c4f14459f2e1e4831df14027e30facccfb32ea769d7ebbb58b59d814df3809423bf302ca992a70ef63c591ee6c3f3a1776cc57e5f0faaf01b250f1cc76c38f2561ccd211a490c4ef4af2b0920a624454aedddebc5525e3ade80a02e2c20bc670ec93c7f15159ac3e620ed208f594be6b78d0679cdf55310e1a28b6d0be19684d2a4c2a86fe717abdfbf877fe231cb05f011f010f282a90f540edce257a803965c2b1bc9852bbe49999f4e127aa1eec7776ae9528285b0483d2c1a90606ac02dfdfe05efad27542fd432495078e5d2adc1275fdf74c53fd1ced6c8457f3bfff77af026d5136389c9d36c0ef5e4c0936b30bba4997bf1f0d489a2de9b8fd13672a1c36e2d042578fb8d37a888ff0cb5a143717851b632e41623d4afae28f7bc5f8d7adb1e6bb2f53ce596592ebcedf55981fc50811d28ab7c3fb9aed84983a103fa657b7d3bc6e3641649b8b55178350e603092b81b4da44a8c9421a89f8fcc2987a9a09ab312852e30af136749ab6fac2da7293a0be3fbdd4dc2b8b99290471526b6d5620d31fe3e4d0d3df4b8f71b18704cf2c849d573f1d1acfd1fc0ebdea8784f4b3e830d6e46d46f7bacb46ba51c9e93b0e6c1b789a05b9b8affd4ad96d907a5fd5481e31ae950d8b7e05e2504f3e5125e701a22dfc2f795bbac83fba7db93434f5c9508f6405cd4a250910d532cc5a3039173feae3c47ad8d87aebc186387aa096b4694a3ca337e57be1bee6d0a383096d50fb2501288fa454512c126866588ae341dcadb421af8c47cacf2b8cd1f09dcca94aab27615b586509f3ecc562949c163de07309d72423b58b4e85719039ca949947ef28db32e67e848dd6061d04abb86ed9a8f60bed69e2e9c209b8a386bcbdf1973b103aebf868b6318503dec4ef6b3b05d369a3ce94a0938fe3605e809f56f5ab37625821aa189e0125604d05247310db3d407afc36eff936fc6f440f54bea23f4625e2da5a127c98ff492e09c00131071d24be5e2e1d1bd9ded495bd8650126932055b33cf45e21888a74c3789a565f91664cbab6af344510c1875f816ad9f11f6414b8fecad6c534e1acafd7d40a249b686aff933fe9e6d7c7ba705f2638567c023825bdddf277f3b52c3cd2f2dd79a82faa504eb09d6640578078dea329725855bd49bac4873ac65be2dff8a865381a20959909ef158918225bc37933828cd11b75342aa058d3d193fbb0649ec3b80ef9a06c279cedcb09e323abab68eebfeeb484cbfd9714f96020c6839b9d7de028bd90aa2b6557b5cadfb250c54f9ab44a799286ec82cf371051ac2c6aaca0d9f82d4fa778532418827f895527be2ed3a271952b2bc3cda45c4253d1e5e987e0e989331579e15517c91a1d430d4a8084bf24a6fd0d7193cb48692f919893d51f74e27ca86bb1d148ddf80151a745a4d1df077d626671ff5a26c08433b910110098484df5b4ca36f23c81f5a762c35d9e726a848c8421252ae31c18cd4ddcbbff70920a79d594f4caf806aa8717c69403afad9ad3a40c395e086bc2d46c3a59ae2cc2830901ca75db62cfc5049fd48807e1c7ed8d18d920263941bf9971bbf1bc5b20948e1c55f175d38cdcf14c4f04d4eee8e093fc8f984ce00cf53ca1e596c7d8fe80dfbf1d38d105c0c1043c987d6ac4d46d44a4af0488278702023e72547c2b1625c448c5adc4ac395697715fdd1f5bfc145135afe8f1c17d2a319b2f8052d563e4100d169c5651083bb2e4439eabd3e5185149a85fabe370afcdbfcb38c289e84a8ea0e37c43bdf00a775ec10a77e3ea2a6e3a95e7c14b7e924ba2c1f6bd5b7d8c13c4543a2dd9e58168b9ef0f10669d778e3be2ed48e0933a3a0f9f0202b3361b3ef7dc5d10301bca670190ad3e16d09c78efefc884a42ea1d99b32656e271ed50122ede7ac1c00202da01a51544c7809966e32c6e147859c9be82080ca9d0a00277ca6ad78c7a31d84435f34623725fbbab9e3b95002c48e891dcae1a9f582714b23b46aa704078a7e6d1c3f94a03465bbd198f96c9a536ef6c8930cbb2c9bddc4da4027bd918d0c471367f615f9912513b5981a4a0617869091c2cfe635e76e18ad0c3e8f6f2546b2a26be637b9402a953786985f008d70e359fd977c2e0c88d950fba85e37a1926e458d40b6f7e4e4856aaf1ca4f4cd3fba2972dc7918197afbb9ef01db2446cc8e957bd8ca61bc63caa95056b542982e012987cabde8b6d7ad01304272946c2a768a96c440b39ac00d7a6f20d3958f3e6c9f91b03633b6f3489b2bef9751939af7367446017b0e7ab278ae6c94df5e763af4a3776f1fbdf3e52134d54606567fa054dbe5459ac84820f55f9703f64980daca11a1d697f09f69fff790d215d2e624a1d460f465a27fce65cd1c4319dc1a2a82ab1226a0cff3e61fff88415550fd3827f8d9338309d1783ec4cea0266d9be8b21736568289bf4f90be914d0502dcaf0214a403c4cfd159055120ceb8b37a2ab33c0e8abee4d4897518990d5637b1675c18c21ac9bb57c561e5eb32dbf16667a1036cba855308e3ae53ec4dafbc63aa93de44000708f728ce42e8e769e11ad1d28104f30939f97fe628c33fbc00ad626f5301403b0eadaa3be5ae8c2db0e500752d5fbdd80cd2c26dc983d7b92bb5681d3fdce474a3d48abb98e2fc6a7a07532f704905402b73e24643f68fbd95557fc127cf68f5f3d281736302a3f7a3579b41fe52eda066f05daa1d06420182cd7b64e454472e7df90b786060cb1e504e98f0f36d6e1a01b5f9a78b92ed2ce0610fcc0dbd8d0dda1a4b6bdd32594a18288d6a9f41ce7ad1e44de19d32636f38fc5fcf0320a0c15eb004e105ba8faa25a4735ea29ba23ca05cd8d856dcbc84153cee318c8b4800e9f9a6b39ccd3aa6e1ae6c08948c4af9a410910685c6f24889c3f18ab96a03b418f93a4fe4cab3087c27260a7ca779fdf33ca5583a017d4eb85eb8089e512dce1440eb38cbe5df2c8bc4546d98864fcf4ce3da92e65331723bfb036a08623f037ddb0e485ace2c46abe7eb4964091d2350c23a3a7a370f2bbfd8d67f8910c5175bcabeaf05103dd7d14b97bdfdbc863331e0ed5a9bca5d28ada8f62163cd3a4807613d89cc27c934b6708f9b6683f6454bb8954ef6459771c9638461dbc6746fc3dca5cce18d8e48e77ac1bcb164a9911cb649cd5fb19e101b5a8e09bbd6ac3f08fd97c3e513c4a36686abbff4fc8d81a7a084042067b88055fa00f85cf34003d5744563b96c9ec367744afffd57edd032da8eebd47b029610038408c078ec1a7f4047209b47584f8d68d99613f0ed6ea9ba455e804e83873560456b45b9709dbe1e1c9e1620e96c75845da3d622787f87fc3948ccbe224d937ddaad216c15d778d73c2f87c0a97c07e05089fc1f81941fe0d70664ce465cba8e705222a5b1dd41af0ce44bfabc793559e14ba47b638a21ede9585ad8269a003bf7d5496e040f36ea8165267a5cef36686e8bca9318a6d28f468edc45b4cb8f00be37a5749cac14758926a289f54bedbe12321e2017add6dca76e44f1805c0e5d7ba2284e53d6ac771126d3ac8cff4f79a63027200d88e6ac1c0d6ad3de2b1e287b91d667127bbefcb891aee97b0e0ae07b3d8e4f700fea72673f1029de7700d9815a57dc09795a38f85c840a2ec0848817406c66f143a88436d9455ab3baf296a0d2f1f7c66a0be153beda2000dfcfaa5801408f8573a6edf971faabda66bca9adc70441acc7d4331f51292cf9e124f52470ce3f90546e2090c119f5ab39350522679bd148a646019f9a1af6c74eec41e0ce45f5caf505612c5217360f7fe330fea411c39f79068b206da524c69c8c240bda24d79a4e812927c6db00b4777e0ff956f746ac816ada50420943ead5d1792c4ee4d0f56ced0dd80b025dd39296f6902d51f4258f0ea8f3dfdb82d7bd3a3f73caa536a0db2fd931bdbc4d42b2f4a16b3801efa3c6fb11b04ff2477633428ddd407b69097d931a6565468d32dc6ed6017f8511956330c748ee5af14469c6fb5ca298f4224e88b9f46470b696735b7ae90ead5ee3c2b968756faa9a9daf59d35fba14f6d4cbeed8a8934572d137e7dd90b13504a8a5d37373080b814b6e961adf0e88fb235af26335fd40b0f293480eeb87e86868f8dd28c7dc35038e3cfa3ebd2fc672c919781782272018465c70ea8501f82efe316a80961e088c81a5c786af218b31f34e53efdccfa3933c1a11f92c66d9f9ab4f56c29e8c4e287450f8b34bcfa9cbe00c218d58b8eac4fe5b69cac1d951e3a7e1a7b8f39e1f0dd37b9721969f11deadbb9db7e366af43aba223062ff6f4e0e4deafd3d023c565e621f81edfbe4fbe4afe32df17767ad0a73519748fedfb5e3d287fef5b640340838060e404dbfb8731bd3a813be976976fb97de4d6a8f406ef0373012d44e8079af112a1bbad98abc5e9ad276459e6cf63e631442acecccf7ce457eaa09f6116d02195d2ba271d11478cb7411ccedcdbd9917320c0375d49b9b2dd80c75c9a8c5b369e3b8dde6b536d109b2dd0a4afb980d567673c33be1d33db4b96e74496fd41b0c09c117bb428a53b363e45bfa0cf951e5b8a72eb18334a79b986b7105260dc56a6bde6e16d103980af9a2ce625a82ce9dc7455f0d5031a7a1cf75a281131748746be22892c444d504630e6012f4139c29f07a578fc367cb507a6a48e5c9fb9d221d83a8962690b137881dd01fe6fd3237cfca919df6bc256e46dad066e69885f9f6e50fa906d4fc10536cd89fdecb7a8d299cdf7294104d18603bf984b0b847201e2e077994b2cf0b02332276cd09746193efa1aa0bcbbed985b184866d8c09b11e558df43c6483c72ac0e046b3b1c4952f823e9dc3150ef0e3740e9c5127f4282a82c577d38029a282af680f89cc98119200119a11ac5317ebafcd82ef579f7a73974f42f92060dc4099ac8d862c3cfe45a8bdfa867ac49ab7c30645031d995007783ed9e05b41778ce5954395a01bec72a4039d018fef619725b7085d9ba3f2d7971eff2f9d79c8da6be5fb9fce1f258f71ffbb3fe88b7da546aff675ead04e50e227f3130a4cb79b039a4a4abeb65f0949e2cfc7ce44c28194c1e81504481f00b0be0ba11b8c1affe06716123d4fe547f448f749425e9df80a98d83d5a93f33c501dbcf7f5a57dde1afb9d3305e3f442ef33ecb5391c8eb075f1b5c229a951b119e62786f58ea828df7fc74d6444d6d14a733b2aba1b27cfc1999ae54b5d26776ae2010b39dac00fdd90ed2b0089fb3da687f3b43061bda79386e648dfb5ed4e9e19cafe3a6ac3b339e80a20004a38ad34a1d8856f6fa1c9e1a3c2aec1b64827630c949bbf3b58202e673cd76e7c6b73be345d42f4faa48046431e2bfb399d59dcfa2b11c131f951eda8846571cd622802b60c54ada49654e4cb098ed72f1903bfe04486e2616bbfe96bc6adb05dbec54e61489f748ee6509f0e500b0b9c100ce8ed3c1f6e0f9c08c387983aaddcd65b480f4dc8a61bfa7079dd09ceccd68dbdf80cfe74dc3f4c49533a120781d6f50700832e0f20289b5e536b564f991c78e04c6fba920b5402c4b782913975b945212e88f67265827a44fa34d5e4b1a31046fadda5161b2ae6d1166c81fc5c4f7305b4c54d42267e36bcf392f50a4866d631974899221e0d15f0f0da3bb4b67bf396b2c0d335773c34260dcd0582f60f25cdd8f612b2d4014191b2c46e871f0a2511fc7bb54e3ae236b07dba9bea249a6fa848f33adc147ebfaca03aa208162fad2f7445fe1bbcec61638107aef4b909b80cffea4f1fc2fed3df13f36cb285e5207daf93c18262df658aedc19b8a1541f7b06d0c02e67e1c935ee3c3b38fbb310d770b77387fb845fcdbc15999b99afcb6cced866322f90e1443158a90e2014312f1bc3d76b2ae6ca69d40e575a76e6a3b8a34d19ff6d0daf4220e38e251a9d1efa0c2ee9f98a6cf853d02e2cfd20988e0693d1fcae65aa162ac7ed3c8fd20ec9ec41df5b0a3f5d11f2963bd563f284eefd50fb6fb6ef77313eb03cc8ad4242e4ba805a83d6712c266fbb55b37a63a9b6e6042fb423659c6a1b2fca03cceed44867ac958ac013ce5156cf02e2f7b479548b0a2656a668d8d2e7b5639d722a0b9c918391123bf777dce8a3630218fd4852905e83c40e51d511f534ffe6877756096e506a7e58eef718b41b43ba8928ed3aca4531f7e19db8a5512fcadaa573e0a86c7b2587245b7bfbd684447d2425693656a8ec02ed3fa040a73d84d07fcdfef78334d62053c3bd4bf7c068df9fb4840d72b20e8875012f0c8d7e1aa8759bfdafbcef27a1ba9ee5e84e0926922eafe31e4465699f1dbc8ad3db34e026dc345aed708d99793a873d43c4c641f924c5e01510143efbc10448e3394e7b53b194a8d7ba10c3342f6aeca1566662e392e4deaadc760dd7ff7aa2f821354cbbec8887bbe5ea4f80178413f24aecfcae532dd851a0f5d18c5be586089eb851cd866797b9a950b156d403a92a7cebaa266f27a1cb83dc7a5ee9207b9a6bbc4cb0fa3f08299993c7e6b8210f49e9a9dadcffb2c6e798072bc7bcd431cef280faa25101b2ae7452aa8d5b321fc043d22a1c24e45ed55730cc61171941f0686e56686cb3048259bfb214d2b0065c497e555f4b70289192275334fb07f665020d72df0315187025103149f59fa3e693cf310a40575437a47a2b1be8e1807ff30fa6ec034ece84b37042838ec7e01702ac42a191ab45d6c8bae238ccb65cbeac0ff81073aed7eb65daebb60f31b90fc19e3ff7ab03aef8204835b3f89b2781b7a7e56e10c55e8f40b04071d7e825882f19827f1cec72e3fa145b1d55591d608ace3687d7f9a0ff14f03c210d1e23bd1e7b475c1a0da74baa6774c67a46ccd6576972e6638bd6df17508dfd5dee54fcff26d20c2ee402cc4edac2c00d61d5fe255a1444f398c2428908d386a0309207e788757b88a0cb1f9a967980f8d0a770743aaf99875e4136830292c454deba4bede22360b3e33088249a3a9214a0f00a513bcf3d92b42e367de85da578fea53026aef2da181b17abf4fd014805dd99a3598339994f974382c621f1efd3cc1052d4a29ae1677ca41de1fb7427718a9e1faa2734c9a128fca39730ded316b5919be13d30eef11e0ad1945716b2d12ebe240efe85a1d21284c3f268250ca8290a6f86d8d8258d9d49c0fe73985cf3533a49fdae2073cee9aaebe5524e5359a0a8b108ef06be12437a6e351f2f0adf953e26e308872c136de58337543cfadcfafed3ea27682b1e8d81d7e1bbcc240e3b303f1967eece32a097f2ef8be1fa25c81b9ab52368930f003809a0ff87d5d13748deac501937e5a3cfbf0023a43b0221ca4213a0fce302dde1dfbbec63554a2fb5f8c7c134effe875a6d2ef74d76831d2d5f3e06cedf9141fa6bda867c64bae24e7cda7642bbfbde96244e6068807c581395ba0d8b5173900f9bbe1541eb5769f1c005c73cf1bf5704e4595943b629662b52b138bceeb17ac2b680e9617eb427d0943d5dd739e7113f34e57ac0d8edfcc30fb08b982681239d64581b8bd3fec88ee0b1e8916de43a0091d0d8a263434b3f2f5a5d66163d144516db906de01f0b2f30b2e08d75971adcf85cf4f14cb4e8b2a6ba064b43acd1bd252e9e082ad45fde6ad3b52269945c370f76c9b41ca1ae862c030c54640a141857c3733c45bc71bc5d311535efbea29d0deb556b48e7c9ac3232ec7aee209269becbbd44906842319ea1c7a3cb5d077aa6b997aaf4648f1a7e2ab60d6f6497ba728b24cc2fe17ea2bfac8b1c256b09f95957b82301f4ddbffc10c903233edf5e3f1bdc7d97f1d8c834b4ce8fa1a5ebe96da5a5daa0320a0b8c8dad5a4a67701f12582f58373c42a87c24a430f7f1b6dce0420e5a059617495a11eea1178aa2b3061d392b1c3bd61461d0ed564271379a054789a01e7df97b794b159d5d77183363740b7e8884bfcac70cf0dab04c00111ebc04490b1560bbeb0769361008f566ea81ba03c7642d2700cc5fc63210eb1143e0b0c0b9cea37a25cfd7cd7aa35a61b9f76241d44e9f2a54c38ee7804d0d69014c3caeb123b0a53f1a12120bc34f674c82646703f08540fa3dc44017e319816de8bc242b03a3e433273ffbbcc9473542fbe793f789e9ccddb173e4d7e9f14adee199100b310014996d1f3dfb14915bc2a6e64a60b29be9d07b602d50d6807f02ffe8598aa216931f9fba2a685c92e8ff296558edb07ae48e1aa563c1a305815fd30014c3deeba825e44bb5bfc3ee8f4fe3ca7a70008461388f847f3d1fe4e7f18a5d3af9f94383c9bae07073698c2755e0acaa13f6b7ffb1b12b3fe59bf87848b1251f9e0e1f7bac863c615c9c2cef147c4972b1a658a4d4bb8bb1c843317928862b4576aea7de2f8dee9846dc16d08c19829c249e88810ca4a5fd8f1926008ff5fbfb609bd3f8358ec510976cea954d71d3ead794291632fce19f029761812e43c27ac8c99681d777d51e2874b9c5f428858d37155cd14aacc5875b475317a0f8c3d9dc3c5edccd26b48398587c1e292d191b18d193afd0912feab205597cdb553b58d1ce6e04620d74d62962869325c1a8f0bb35946dc692758b0f5fbeff84a10841e071bfe2f1aed3c5cc183404fdd78346496b97ae11502eae63c48dff6890688f2eec9f89c2b209296c8bf8ff282d6ba71a0290c58b427ff6f201ad90879b8055446366adb94384e4098fa12ec8ecdb795c509395ca701ac85a685600c1b6e8c7f2cc484afebb6efc0f354ed5126ff6db6f0954ee15e0b7c03188ea4313e07f5aeb8c9892ef3f1304512288872c0969a7c4bc5703240e472e8861cc1d2cd8e6399804dfc9ff7dc98f88e199e20b709771a803cd4338b1480c2a573f2092bcf65c8b993c2d98600d80f155616ea0e6be1a010572ad2e39a2c971d72fb326dbf7cfbdc60fe64fa3ff01f8da1e0270131be924363cf1cd1f22d8e26ce98f2300a6b440b74f5cd3edc5b5ab40eb52a5c9e1183a02cbd27dcbbd8436d6db18c4536144b7fefe45644f1837dcc6ac9ba5916117386d07be0f21c4fbb96afc99d8bc4419cad98811d9f916169ac39db16d635cc9866ded4d5c41d8df193251cc03f99e268c9f2adc354fb07002c4b76595e8a3c5586709331fa9eb5a1c5b910697f57741c0d255af2914c0e2430a47225071bc7c549bb4f536e0641f4e29d61b3c1e34c86929f7d7ac10b5973b8e00af1472288504e572effa8f6b9c415a7cecbf4695a1d6a416297c7043ae770ddeb3338fd5f13a25c538ca67f9c6e5aa34511b553ab9098a11474118ce7a6c984dec83b24ee98c62e38750f56879b0ece76fc0a9b75af982f492424a9bddee20e006a266257fe3629caccdd0d120e5222b2e9fe2da715f42a5edf0370e1d657087d4f8a127dccf32b867c124f208120563f0dd09514062b6f3d87f2188e74e9b670e4f158bcdace9c39e08edf9bb7aead1c55658ccdb1093fd3df4ad1da635af6b47caae356bdf6980ccfb0420f5b862ec4aecd91c530ed08b02bd6c7ff07f9e9eb91308ff357aceb9ddf56170e3fc196322dd326fd21ff41865678214a177288dc5c91dda6c083a7270f389aa7fe8d571d5d99c483146e5f4580015524aa9eb4f547fd414aabc077bbf6fead77fda191c5483ad2d3469612e713e3e175149c205384b3f5498b4f73a7c529aa061791514294a153cacf59ee3d1e8c0baba839eb080d556c7ba90d6e0dbebdfd65ca78eced8d65bd092055d44d1ba07ee1c59d512e9bb597293723bcf884ec2b703cffab5461231be0aa455f1f98b8523814827edd379437ae8049130e036ef6f80fbbf0ddb3320bb1428fd1c5949293e86286e2f8734d7f7a64ea4f91bce2d9d5191e29e3b26190c63e59541cddbd630552387d6bbe5c7daacb46136eb0c97c20023d5491a8fcb93ac198e326960c555c869895f03d5d2fd6b1d22d8cefdfc6a64bc1c52e5d9b970596979a47954436a580855dcf0f576489ca36bb90ebef30ee97d0c9240fafe8196741c2399c663e88d62135c8a5477e45ceea14837d3d77e68a9a124386bb0585242c692301cae40f01adc2c2a84068647178a3298536b93c8b38e4b3d47752e5a66b4c0d3dda75fe997a279c74eff449134b382b47a3f3bd0e709abc6121cb0f75369f938100187d36cc60f3385d7a70ddbec011a3533d9f2146fe2def40cb5ae675a88fd67dab40628871b36229d3356576b664666fa0892437d6450c988e99e70b1aacb5c7e92aa2945743e9f8e032d6a6c8fea8c2a823e0fcfa83c3b3fad3fc610a2b81cc6342002dd7aa6aa7c6e255caa37c065a55cef9009052650eb0d5649bd9b6b15b5bcfd5fe8115e09ac28580934a0c0570a0570b2f1082ce46af4ac0418c7ed74183ce2fb3a0cac9c0d3e8cf8cc74618c59a8a30596376d8771bf2ddcc0a093e29e973ef3b37a7568fdb355a44fd329eb12729888819f52e9a6af62cbb25a76e11de4379d1857e6ad6878df538b121220582361969f4c64485817bb583c524d5fa70a9487a2fe8db58dbcc9a1593ebd6ff99848759c79c343009d95dc69573b58635862e839492590a4c222df1f8cd22bc854cc1cb3b66598bf636c16e83b7547c19892881c140c05146af28eeee4e79d45511ff9c56dd509243944bcdb2cb3e7a83c14921d3a28a9fbb8c8acc0f500ad7ad35e4121afebf7939a0778169268de0ad3bbfe75335bc36b1d9d684e30dfd26b10f41589c18c3d0805c9ecf77e8a66520672d28ac62dc0cc2b2b8b6f09c690e62d0b91e2107137fbc8ffb8115d813c4ec337dd568ac9baccde9efa7ce3b6cc749fdd2f24a80daafcc2827bd04077bc2da04787c02e6e8e662d38217ef345e056269d8f17aba22166c61f5133431708c3728c79c9d898f874e03c5246926419cc0a5245f9c3203b041ab5dfc4381ca369e7d04fbe310081a3d280ba028f7301190b1f044cbc3eb83157aebd88d9b43f00f51cec55ab46a73482a8f14dce80ed39af80b38d8f06ff60ec6bca4f02f8521e759246c20048742a2ec6032f8a13286e5dc469c0e7360e1a133dc3272c79d8783e2356df2b8bbba0664a94b6d2fb5d501deefecb181d4251d9515041bf564657f857df4ca2714babf30917b223fca1dbcf3ce933f3858662777677147b1369970968e698d24243847110f6732a9002340244ea0b96cb7e11e8270478d8b8322f17082d6d3e92b7ebeafb20333fce77da822c67ad7f707fb0d0092c6090e7671df12089ab4cea7e57c735fbd170eb1390f45958e98da02e55d93f62edb00f2e19a1dd1c48ceef44f330330856099cdfd44a869d18fc1412768a7d2c79ecfefa02c0660f1f3c104e40e6df3bdccd7a830a09e11b1d7cc621a09874a6e9a12103e20c5af88467bd408c510c32b4a813de8dd2cb08c5f7205b9ec90fe0e37e212cc43eab7298d7f828170d300fd448df92e3c86d471221095612b0e8942be580c23889781fda641390d32ab7829f65f3107af6971b5a064a7adc58cf42be9266ee21ff009c85ef15ce07b1496542e2b49b0236a740b091082f21c29645e5bf2616d983b033b2b76114f54dd0aa920c9d68dadd0dac336900f95569a8b064069cc5f4b25c4204cc5afbd9b1fab7269d346e415170a69a5721216e5dfc8b0656c6bfae9d18047f4790b72de1b3f91e4b99353c08d9a90674457729d3c3c83bc6bdea64dbd8d023569fe30b7970af04e5613b9004b6b1592f5d7b6fdee7244d1648ad60e1cade6182cdcae3a7b2a0dfc5ae9d815a61e75f6cb69723061c0f519e8bc065288bd9aa27e065266cc9e98b930906a022e24b14fa35ae5ebf22254acb4faf4e795d02e39b51c0017bfab684abb33c719409112277d10f522e31174dfd5b06c97aea490212667c8f39407508988b0b78fe6accbe2a2f055eee893e182f40b3f7d525914652342948331f2e53a0bcbad8b77f89528ff8c1119a22df98699819ed1c7ddedd04ac2c2e95a7502625a0f31b8405b58ae690b8f2a752ae149e32f00c34ebac6a3df2c0f96409c39d6e47c641c8e942b288708f7ac4c516c69a96af2c5d4e650f8dcf1fdf060b2bb0ef1295128d5a6eb5494dbf78096058d147086386c6a81bc275d9f286032576e5c312d151af62fd8e69b1fb4bc76aa699b5e14142eff64c2fb3f9e3decd86eaf4eb9593bc651c37c7f678b2033dbe1efffbbe430cbfc21f089b946c66aa0e5cce9d1b4f2c4eaf94685418d8577ad37c2dbf9d85aa855d077de7f94fe573f82f0cc2651b2971e342cce9a178b3b4fdbed3c6e42ddda70908688115d4f9ea70253e03d1e239ba7fe49273fc3edeba73972327dc01705576b1a3d3b8c9edaef97146d9118d196e408a96f934965e4266cc2805b4f77557576567946ac12ec0ce5debff9889ac8f1d6d90bfb80a15f9fb1fbab9eb302cec9d96a2ac566b1a46ad57f9c465cc498898b6ebb259089e7ad1a14aaf422f388fa0e6d4a6db3c27b0aebfbffd87ee75291d768bb32b20708c9b5f019e4f8d27170027c7e48325a05110b312ca9274b664c84b1a343e7ff8c83003ac3f8437ed3f0b515958efdbf02e54b8ac3844d41dd44fae1bfcc186a84589271cf91c707dd8fadcec6531e0f5d75ee69d63c324ff0342117d5bb10d0595250412b175cc0618999dfa86ce31b401ea184c064c67c66832058e186cec39c253e3e686889fe9bf0a863e131fbf6529e08869cb7abdbd8999c9df98b0616b8afe3fd8e714afc8fcf2bd941f6e7a1b82afeae204f6364e68bb8ffb13299e218e2e8ad6b18c64ad0c9a9799c870006cf757a4240ca4568c71d1ae9ad5415e21deef6c3504e8e8aaa9dc68d744471a789d939a5eb8a3bc0d8d3dc3ca087b0d30309772caf87b29233a60f24e9bccea5b9eff34367f14514fc0b3f78fba98f3c8a3b13725cb8b05ef8074d9a7e557153d8885e3fbc26f402c71ceaa4dd42b54790ba983f4d8478f784628191bcb12ecf45c391065c53959e6da1159a2457065c101e3071e1df8453c63c639c4c0edcb116889f249c2156c9179091b9bc26a5dcb1c71cf3946f15f175048fd41d7a756c85122a912cc7594636c1fd7b9adeb0b94009f3520e9a6142ebeb1160825e85112c82e210d4a834826b7b4db25fa26cda3dcd79c5163bcbfc1efc044f1fc8b6b40a313fbcf45200bd25013e1a654cf764aeceba1d9a2c01a79a6de5af84c2e55370eb2e15a87a392a17e0ba983ebd0faff136a77d99b723ecb935b4efb787e66ac65fc0b2beaba2368df891e4c3a4b7c2fe8f7ec6a608ca638f089f95c26d6f60561e1a3b245453be3a58761e85114ed8e725c18d0c8ed535c6e5c1af26008892248d0ccb7b0c7806ad6b0478486ef8a996072650b9647fd466ccdd725a714a447874ffa57b338e72f49ff8be1a3a004d9fcea039cb6ac3130b0562f36bab64c7847a664319ff9ab6e89f70e31deebd887af11d40cd31553ccb3e1a4173137f9230e50ce873f6c9c2edf71c145814b71d6e60659ac0ff5da601015e5eb838d8893289d1b7516e559187b12d580d13ebe8066d047a21553cd95c73cc8e8df004ef43e0f6db1eaf2ca7cb0ad2d03d38fe7783f09874ce2beb5de7a425bc4a2c23cc334f5562fa8c009b0e2808051e43f76af0451458b199c2d43441023f9f8cd1a2d337c184719162e5a80ee1e469e14f06e2f86b242c76c64f199f61a4b407be136a436d4330fc13abf363d92f98fa86a4cb28b16fcde6ee35b5c38911b45565f8cfa0981dd3b2b3d7821b739f49a96e52c1daa4b63639b1eff5fd4a4b6ac70f0e8219e43fce7c005fe3254c77d509963f9f2886209135710f192595ff03445c95d1f4f634ff80536d286098e55ebdec72692337d8078ca536db91b9cc0f5761c17e2530b5a46b4b612fd89ce25400f0c6c509f72b09678193a879e8b9d8c58c3e7f3b83fb911562486c6753ad828eb740342a5fddcd92f49ace9874c800ea72bd7f66c9dfb826eb120bdba72c9fead5fa0adec9b33fd5298eff041d208b94c5ed40645f1546f02d594ec3a7ce4c6495f85f180fe5eb8cf6a023c8384d2a358aafd126e6fd84d14a89bda0d228177df42fcd0c2dd01e1edd2b280b2aa243d9dbc48d543a436d487e34a53e3790e7fac9882e7e15f77435485efa65f35807b8260cb5a8f733a233d2d70aedb4ed05c23a19e265a492ec2d06612be05209b761cb0d30bfef4b8c31e1cbada752039f9c361baf751cb817e51020288c198841ee4922f0c1e57802fd7fec2e0813b64ee5096e92e06f6f21a250c687020b4d9b215a6f337a23a29705d2e0e9787bf20ec44feec3527aa9f69de989b454b51069da8391ff4deff6c1fdf6634a57d1148a3a7a9778adeac3c4a5fb036b9a4dbf507f45ec7ff40ae0380e848dd7b11e07ddcdc0bdcd6cd9dd67336e78332b75f0067802bf03dc10889221b025cb33186b6feacf88ea9e6f4e732d4661499994909fd8b2a591edd6424c077d894dac721917c81c6683bef68929c09787622b9323073d2127217d5a47c22a6c6b02d45e12512af6c195defd6d440397f6e4ed3fbad7af57dee253d330039c2f2c7d124d2838a39f3a9e5d5265b4f77ca61c969a2b144df534d5512e15411b3e15eb8ef0b32ddea1dc4914ab2ea3ad8e9e299b9b700a8f3bd422da95fd130bf5d7cb3141c042ab601b8a448d22bf96265564a25443a996da06221a2af6bb20c3bce71615c9f1cd6373ca12a2249c7da59cba2e6bf453e6c0083f6231f41c06b9bcb0c3a08c9285b898b2801ae6b90854dfe9be302768f520153e75f881833a8c4fd5fd627d5a46308d37634da261fc639ed6d34825a039988d6ca3eb5028471e346b5cf1daea53dd0a235f8600f88f11dc5f73e406b7811ec23b2fdbe52b8197ea05831f73b7d6b2b3a26668e25084ced3603497c2dd835ceb88b4b30e84ee6d3e0bad096ec0587523b002f9e8f18fc9341fb4b32a7a40f81262b54ded7d0d52c25227928c4579ae2d92edb470ecaabe94cd0e4e76933ad8cd817392c646c9ab45edd24d96fadec1c883727746a9098ef420336131712f579536b5c6ba76d2ca0ae4d2c60a936e99705f2d1e90403f0f8a23c653e0cb3835c6460f036bc028bec530e6d8f2808e3e01a8f2ec0d4296b65bd9c98b5246dfe9a2d74b990e9a49fc47e3c31553e809512f2c3d5e1a9decbc377338c71494793eb6d4cecce6c54d162dd9a00f2edee6a02149965724b3a11c2b5ece31b1e91b10047ab03e1cf16ff005ecb2278a05ed7464d07234f22ab7baec21349188eadc92888816fc6ef1206c10819d192faace854c0a59dde79e7481d2723955c5909b2924038f24ed1b55bfd2d6ddb6e256ffad58ddff825949506f9935316108b221d6ebd457d8a91842055f30909396cfa1844f921e15d2aa7c8c1e0a658e1a667d6d3f23a6f2b74643e93b48ceb65160511703e9773e4fdc8751650bbfdb6aea7433dd89979aaed059ad78e0701612433d78eb2bfda370a5580f731f883a4a9a8994dd5b7cccb81ca6bd19f3e01ac851949c58a1b36bc4399892c7b9d8ce1b818f93f00840e05a11e02df15e8f7e0f6be6ba9eddb5c286a70d66773762dc65a32c1812a2e263e7282b3770105704022494973bd562b2594e8902edca5b424cdd79aeb1d49f447c057f3f2743d5a646493b1e5ba20a3255ef6016173e0e0c502519a562045b24ab535f6ba81f25496c45857f8c182b1e3714c718bb5f605ad24d21da803b09fa38d610c9d85d40470fb6d6dcd1601d190d830c6db9cbddc656aa221c66c1b4680a29c9eac8c23c98cc84211078c3e9a035c8a752681ae4534a87d3ce2c1139a1d514026950e9cf3f2c93212f463c5348afd51811c2098042c4cab49b8c039a8be850381692806ed7eeaa71f12efa0d0c743ac95ed43fc1ba21ba58538d1be5a69b55a33b90e2b0ef273eec0db0cb5523833c9ea3bde3ac495ea8dfefb842075048b65a4a27f815c3c7e61a984556e2c981d394724702f5210ce51e716c55d8dd5cb2c1e4838f4385cd1c62c1e7abe9f96cde42b562c7d13fa635575778a47e73784d1c98284695d5dcd908ee7256f7baeff26d8a1383f482afab04d46d7bbec479aac53b8c479a82cf617ce856653b4080dbe118fdc03da6e1eb6089943e8bc80b145b1e7f06fc56436266bd6e9802098b51e155138aacdba834b24d104c46dd1964f7b11b73ba51a3b7b6087c01dfc677ff3d2052f9cdaec41929347519a7db8d2590f800fd2354c0db458958e81521cceae5539d8c02d189e226e9718020c04eb25bead0b8fa4cb4bcc2b3b4852c3545a34bea388ad347159c3f38beccd4912313ebbeaecd8e27cbfeefaa3a012e4196161cc33e646d78bff0ee66147322f118719e888e234b0092bfb5e18c8a9e8f2d8f33eb44d08337b51c33ce9cceac0ed6664d0452be07cdecc846d38f5fb95c2106d5dbb41439959b1b0604e6c8b65f700ef2ec29ad8237a76b3004ce0bc064e40e71cf7bb62b4636099f556380e61051d9a7971e5b075a68d1b41f7b84721d78ae6ec462fe7896b3fe7d1caea38450fddc568d4b81a142e565fa409dce678fde3ceb13e4bf91654746e250d4c619cfd64e77b78c94c1a1bfebf29111cefb43056c991d7b3a62bca56b3a9cad42f48184f961b6b30c24cb50f5f821877687e09167e193b41262853c31419890ac53cab3cc43258ad8b8b624508efcec98b1a90f7b2edf53600b75d1741df381286c02ac66e71c37bcc75bd4c521b1e707a1232e1191ed4eacfb354b2dcba9bff6a67c7bfdb211715493819577b9fb34d77671dab4aba43290987a22951134ad9f0583ecd760498bc562110a5310ae83c977bdd0a50c8fe2e36c7be290fc3db2ed2700955b56574010248ee32bfea6b43209f6ec684f0b9cab24cde060bc70740ae610335dd29ff06aae0a9fd98b9eddc89f2482190d47c637906e6f7237414f7106f4be4476a6e707c0c1875963e71a087554deffb12357141904ee97c4f0886eb1f872012e5668bc11fd515a2ccaddf0b402c74a8d372b9cbadc1c6b220f14e80e7149e985773bab2824d6111e8e65873c8cbc961916b6004a574388557ef48b6604ac67d72ba9628acc5530a726d75d6293b913fe7fb0238da293dbfd241081cea28e937b04d237071307bf19ee33ec1bf5e91ad1c3dd68d5d5e83e1088f4199e296f69453325a2d88c3b023e11636346b627ab02fb3a014e6dee0a9c9401ec289f10170ed995930912b553e7ce99262578953a23383e174bde227f63ae9ec2973de5883a230a4886c89b2fd32b8327a5a9f764b442ab50951c9f48867a4d3bac6100a85096c80b080403e2df351a6c656dc88d9315522d10f5cb8f22ef865f6534b114172e9560e2f8888b8e6bb81295cd686f8fd55c41299873ea825a6ef7e491825b1e58a8f356e87dc10a6d4046a8d0d7f1a304950198d45109ac199201e9a5be78ac3651f132870304d52960c0b5c349cc1438d4e234c40bcf830956e731e8c5b3bbd3cee5456010949bb103e3030dffa55b5c8009fb8878f2b0d6803305fb899b7b644343e23026cbeefe63f440ad3640f3b9439dfc5141a3dbfc0913e917828421779bd9c58a59920c400de019725af3cc8bc91339e79bf376cfb04cc31a4bb5bd51476fc0c921caf6f35dc5115a4a31a4e047a921c730122e14cc85905948491f6673301897baaf52f36e21a9b6cb9b71f505a792db74930fa51226a465af3b708cd12482c9eb163721c63909fe97c0d2dd56a684a4a390f5282f52d630c6aed1723294ea45e30bc866beea4acce1a9f9277a45070106c43934cb4f5243e8051c89e4eed61353f0f9a0c04bc8caf4c78058b04d1f700d81ad8de1764167f608494c0c18978e4e0cd9c05ba2d8709d80a9ba3645a7e4720688cb7928063fb5e2c0d692a0e54d8850398262c4357b625fede9d63732dfdebe9867e4ba097de97af15f49544065177b1dfa682a71a387675baf505fb2fc1ce94275d2b14dfbdedbd849e065f9c02ca1832376a8ed2f42c06789f3d6f6ba868db29703b15a9db5534184b0484119fd390b6bf95af105dfe87f69f70a1e8bf072a6683bb755bb934bfd81f8cbbea1dab971f50224200388f8dc402e22eacb625cc05f5bd8e635022e0a092899d7844b4bb4b21a026932113001c6492d812470aef2c6d5d7a547b020538d2b69147e1319a527ba26ce8d80e40e71317ca5b830ee0b9202fb90ec8537bb5581561b3c9650ca347da253e793ac66e0c9b150f43a2f149201cf85a3bd681f43cee746db3df7da8dc2edbcb3f9327ff62d6f1bb6d3e1a90e5b8c6236b0a603961d8a2016292a0caf1fca81740f2b7f75452f30a0a81b8dca9cc0ae44add3ec14cd998ade906b16b77f38b63d3a67835744c919ddbe20f42cf605a9e817c9dca01391d4ab187c56e848f97b4939593038aa784863984bd2c777c33b173247dfe5467ee2f2a95fb87f5f44ccad546d065f020c89cbaca5d5e4b333f1571fc5633cd8f52bee1722422c7544253b818b6cc074551c900370fc19f43cf585327f6be536a641262eb75fec04a17b0c58047c313e5dc08d939cd83b4b6399c6eb8dad15b057079c7a06775906d949f91687c2b575b7d6f5f218abc1663ff1a51ccbab6de95c4187dd2938ec22cfe7d8225a15a7403990d66a269a6af507d472ce03e9e6b18a54431448de3d04cc71c14bd8cd9409fbf510ff78790cb03e9f533f50dbfe1dcabe4b4c483c8cf132b44778cf49f26b664158dca9c568aa7e2292256982fa69414fc420beacacc292a95591db1c9d5435dde4b7dc96ff7fcb5d7f22a50d8f46a378389734016461e61ece058534d2222e5b489b2c28ec80d7b7e18b3582990e82884258001a136b1d22e091a4f0ee7a9d15569c207fd51e6e20e3907a62b47efcf8e3b4cffbfb1832ec485fcf44a16e559163e1d23617cbbeb10a45e5edc48ae4f543d9090b1834c34abd5228fad07ab9fff2d116fd7c17d9046a1a60a0cd1bfde28c936990372f08212e781b49d9039f9174be1f973a32c4e120691e795f168b92e4b7e272cc602ea38327a5a304c61b53989c58f799d0c0e0faf22e45190a5b49dc6a1d625e0652686cb5c0c7d9c03b5d82330b2e32d4030be6a6cafa44d152c14180847054e84820065cda496c8d3230d60753513a37db5cb35d182d7dfa3df429b4899a40c96070f082e0766880f619a20b83b44081d82ec521bbf08538488a2f0ad4942ba2d094edbfaba451419f1095fc48fbff0e7496e44647433baf1a410e41dfe72e009c2fded10ff6311ada828c4873fbf5d28264f4a3d09ca932c192457ba2158f619766d2ce6362673c4b74fd16963f149d49da29438b5f117850041100443585b33c3aeda9be1cf6d22d3c66f9ae8c60fe24a59c7934e10ae2fcb93424fb28fe25bce958f638fdf9f1cca932678db3fe1237cbb608fc9c7753a3cf6b94992097978fc7789277df8228cf1d0e3d9e357806ba2ff128febd82c7b759473f836e6f213be8db69c26513b3505f96944ed9ce1718733d6cca876cecaa2da59d676daac9dbafcda59ce529c6f5fd3ec97a6b6d257ba3781a9d3e4f04deb75e3d7524cad6a0ea69e721bfe20534b7530b54e4399fac96df87f4ced24337593dbf00b99da83a999dc86ff832966b94ddcc247f8c52a3fc2e88c4bfc3d5de9341bbf9b8d7f668aab29528130452233dce336fc3433e4721bfe12a638858ff01f99f853e05bd8254af9a0de69d6c46437cdb41b84a9f79069f7ccb707d36e21bb3b98770799777330ef2e4ddf31d33750d626cd708f26d09119e8fe31ed0c3fb4d0fd322d99749730c71ccee270b9a7a727371b5b8cab7439863fb761dfa009fe19fe46aed1376e85e69835fac62d15cac72fa2f826569111230e96982d3438ac22091b1a8ac03065061a70f8c35fc8e5014a09224939c3b7f0e747f8b59e85bf1b54096e4b6648917d863f99275912a5c0476859c5b00273c52ac67ae604ac7dda954ad799137a57db68f420449b3b3cdea8a0048512c294b0e629ea4dca02f8d65a8b8ba094a7bdea00df4e24d064aa593fb29f575b3b4120da5e3b95ce99056b2278086ea32a5b74a0828507ac328983044af889d055f3c0c19a076ebb698bfb1ddc57719fc5fd1a95d27e05534afb368c806fe0a38052d2f011cd6b1848954342ca1a08ee0d1b8323e56310a41c8a535a54cb8034237a235a0bfd7673e028ee35fe8ce66b7c6dfe9821bc5e1f804db3b516afdace75eead91816cff01e850144d8750d2c8f64f4163d684a96cffdbd0d00d70ddfe493d14457164a7d7d5f617801351107285ed8f82545114a58104cff60f0094d7151ab63f062f1445d11c16cdb4fd2f88d1056cdafe48562f1cdbdf026dc6836efb57f09ba365fb9ff0a128aa036666fb9be8a128dae3452c6bfb0320cd5868d8fe2574288ada70c234b6ff518aa2288f1ea338046cb2fd49fc5014753a02d3b2fd29f0a128ea430a7966fb8fe8a128eab4c2e86c7fa31545511cbc91ea86ed5fa4a228fa84054bb77f0d47d62ab34c6d7f131cad6cffffa128daa344511e706259aeb6bf883c435f59e26cff1079455154aa041059f46cff09f28c084c4b8fed4f9467aa5eb2fd693e14456f0cedb4162cdb1f04eea128da34b4825ac46cffa11b435ed66cff998ea7b5fd3f0ca511b5e8d9fe1e7056217cb1fd857e288aa6705e33b6bfcc87a2e88efb82d863fb77f01e9ed792ed1fe42b8aa24fe516aaedcfc15514456fcc68e82d69b67ff92347d09638db3f964a6da961fb035dd584ed0fb3114504b2fdc91445d11c577e906cfff1a2b32a8d65fbffd810c56cff178eab1facedaff39aa0d585ed2fded8d230b67f68e327e6d8fe20d2ac069aaf0e45d11b434c1acbf6f71444d34bccf6bf6509c24c4e79774dbbed46e2fc659e34b4fd6d88429bed240566b89600eef726617c44bf264b19d66f6f4ee38ee83ff18b38bfccf0c50e88e03bebefb02d8c838ca2fa55782dff00438c2f2d3ff8e287262d83b55c0a47c2b6fc38f0459b9be1c01f33688622f8187c9cd338f0fd5a180776b598e906a54548ab33bb295da34e061a4b9fa830fe9ec040a5098b3e277252244ba8dc00a34eb842c5e995b4a2a9933e548290413add939dd1e703a582e4e521d501b16243840a94d72f0bdd32870a16ad75590b10181a5d40f287d26083ba67a562f5c2ab88b2598afdd85c31e3c10234fc758999033b01f6bea440eb972c54f6c0c254468e181a4646972a2f622156305d020a0343499514d603d11e9e3a799caa38e110652306e8c7a64f951ea3aaf3526508a851a63bbd3031821c014ac330515d6290428af8f9c884c91293638da960aaf4783981678035d461e191b2a30a160cd4812a0c3d4daa6895413d7506fa65489518c65bf5c34be2c0a670488113933d71c10efab260d2b5ce0b258088fd7abd5f183a3b22b00fbadfae6b6d72b5534bf487b5b6c0b4db6912650a63c390307cb0c2d8d074ebac59e784d97979a1546dc870f991e152c50bfa998172c5646a97a6c34ffd81e942060c971760baec762a843d1878903d3959705ededb89a99923315e3d334676bd3aebee0591c36ae60a941a6787e7f5e343bb4cf5ace8d8f5293fac5ab0d61f3d1a3aab6c563e3982449c5042af471a29fde3f106caca92133d2d2e5144d4ce0d98cfce932b3fa1ee0894962a71ede1325aeec07465806429f38425a54aeea57360f8e64059b9fa218166dd9a1c6ba4585913d4e325a93164caca16a8fa96a82c5cb1f21383502b335396cc287132e3a467650698cf55335050335e5e693b49ae63b2b8fc3746ebce3a264e94315a28939ea94e18b542d342cfaaf7646506aa297bce78286521b5afaf5c7844d6ec13c5be4496ecd3ae1ef669abb0cb66f7cbbb44b54ee9426f58272a419038144b05cb073eecc33eec3369341ad1041384082142c49bd934b15f33e8a6faa9d4cda65eddb6bbaeebbaaee99aa6699a5eabdec5f26dadebbaae6b9aa6698a732ae24db3562b2a321a91478cc07e4770f000df40dd96fd71e5df6fbda9cd36cbf7e94e5d755dd775cd6b51adc8c868c4080a282061cb361bf66b2b91748a729d597d2fff3cb0d9fe67b39fde2a7f33cb75739f7f6208e65fce3f9c7f4646d79f02290a966c7f125324c86bdac86b1ea925728912d86f090d44d3e0e562e31a18dbb60d8a1aafb807f6c6daa94bb007ea6cfb04c1de098e00da165b6c61af2b298091def324a197068e40c94159da20b6e53dd97a6266df10dbf29e4411b12def89136d5b9eca07948a6dcb535fd822b6e5a96372a862d944dbf25421e26c5b9e3ac3890b591719da96e7a4b72dcfc9bacfcc73126417008e7e916af610d54f93243bc4b6bc264d3c263c2677b69a4c32f942db96c74409886d794c7000c1c8f1270644d30068e307dab8769620850bdad1da27ea80ad956ec3f82db6165b5992f537d6262d21b36dbc1f3f285da2d07064007d602ce53022d5e6cc963a3aa440d9b1945b53aae0e68d53112d310c19b5eeff083d7c68fdb8a1c48ace004d49f6fdec379c91d48f2ccec893dbecf6d7a5079a40c98a22841783066e8332328ce1e211430e8b4cca2e75b9bd0c31339526c90e1a5e7025520b303860efb80fbc616a4e0a679ec849b284c8951b76e840b1a460858a0f900d6e6aecf4204923058b9b13b25ee843278f962724b9861ba844e9d284478e9d3e67c8e0e8aa91a686902b3edea5810e35bc3d2c1ce1d28252931974f6f4518247891e2e180d5461a0cc4026059e8e061a1e18363488e4bcf4e1f3eab3cb13030d4c685670f244043b17ec3411f2232523f2b9a5a00aa131a6851c5242392d36ec18b32463863c2417942a43ba84474756983725b0a0ba51edd8a0c347cf807d31745c6c6c39b9c1e65962ead36381c7025428833ef2940a89015da304e1012506a82d60b4cc8c31480088d49a1c8e1856cec4e498e0a3890d1e43f4cc10dba324830d9023768abcd0d5b4802168b46e5465edd070613d575db2b4682c6561010912f5898d3d4650d0a3fbc00b797649d85ce9a304e7d9412faec4a981c99e364d38fbd603229e385578c0ac2908794203777e0aa51c1553d7993a582618c1dd47ba7c2c990dd8c1eabe5954d0d3654b1b2653948a34ad3193828e1a5dcae0eecfac2c98771b8c2c210c43ca8f4b6c4832b325204c7240c048532e8981c5d07234c64081ba602921974c0012c375471767eb49d52f0344563729d488e3630d53950f5551258c784986790c8d557dfaccc6a52cb07149499078e7c58e25ad5a172d3bc4bb44063a9ba185c38baa9810a1d19ba431724688151bd8cc888acd5081f295185113ccd05304036d46ee45130fe29d18363a7479628278474618a318738648fc82f1ab41aba969852b15d8c127090b6564a063e6051ad997177382dc05183366a38c26b4ab3563ce496d4619a31a1f988608c978f2f005069f204ca62a0618302e6876d89249c145f3f2dc3096d896cc102c9bc3b6648624d9e7cc470014f4c2438ce825470d286a48de14144819d1876d7978aaf478219d947ac4b1618a173a63d4e0107f2a5a90f1650f9b3e3c2021d663df7240bcb34fdb46c0551e1b51b4a8f8ace0ecec2ba74a579e1e2dd0b0410b97012976d8a07af8b8f025012fbc98b1848f9116e47c09abc008d9f24d5941862e4c706729c2b04d6429c3030cd31c1b7170f6ed06c0f007b0558e17b6e2c84be92b94767f3ef252fab6bc24b91daec8be45b8fb8619add119bbe2873510b5197400e8efde5a25fe51b5277e1e016cca717c0b5b8180144ad8933013015825d0f823698e3f5ed8eb0d833d90693788da0c647b7c306733f03dfe6bac6dadd2f6c087991ef60802a9f604f817f4294f10dd3fe8388ed864cdda13632dfc1faeadfff51ae86dddf6faf031ad01fac3308cc1c1375c06b14170806ded090b7b80c55d742c350fc9d6ceb6766a18075a07d65a80293eca6f410ddf6cddb6e6842a4cb67047a6d695002f9cb0bc8821f3bb34e8aca0832125630ae7e6afc18da1a8496c7a972d79b85e24360b30038c16eefe6ea02137926e4ed003874d17564f0d56a6702494088223496cda352a6851716e165de14618894d17fe864f0a707024fc8841a1a9e80a4742072c1cae8930d851c31523b1f9fa71152609ce4dcba50d6e04140e9b2e2e9c150a8a23012351c281c46628f5dbe1c38d412436c315507831851b33f60bb31d3c842a0d45509c9bd60b131c097e71960bc2b8d0c3e5cf79c482c385cb4a2f255c4c09d7e1957042af84fb806b340ef087f89570fa95704ab8f2957041af8493bd12cec32be19470f63f98764e69ceca2d5907f3a1a4406a52c64c141db4c047fe25d694ef7fd50f40e4287fcc1142d895b95b8194f2d6aa004086f2bc4f4c3b250c6536af0e1f4d3129ef9320a4741dac61b44627896efc2fdd7e49ed44aa3abf8d715676e3b62eec42884e695fa84d695f05b6a63f688ae0b529a5ecca909c1265cab0967d19cb6d2088944ee519feb83c4936c33f757eb036fee9e199d5deb3f1e752944bcafbb21f5fce9344b81498cbe1dbd1e307d3b02abc0ad3846196dfdc9da96b8f8a90ca6fb7cecdba6ea4fc76d384507ebb577e84577c0b618fdf0060e2f183597e3bf1f841377eabe0f1835d218a6f163c7ef009df901e3bf9ed82c71f36f90d83c70faaf8168047f1f82d9843da27982b013e9529ac50982df011fe00981ee023fc189897ca8ff05f60de2abf3bd302f3aaf8087f05e66df223fc274c00c0bc527e84bf8429e2adca153fddddee3aed2e14baf167aeac991bcf585ffb1f58c093ec078000dbbbbccd003f03ec9e71b0274216af84bb9f9ed6fa364d8b612d9f22601aae41c07160cd621d762dc368afe374dbc74e595d51aeb015f9b10529bd76ca664430d8858140340dc2edefdb6b2705f68e6adbddb6b595244992ec6d24bd750fe73420a841321cc3525fadb50581f4b5800213caf363ba768290413795d4ed4a52b65f10942f52afc86e1bb53886e09847ec770cc10f0d11bd1a4a0f53e5198bf576ecb7af88ab7d5fc49527f9fbdc16cbaaa1b4e7dd9ab600bc633e7cbbb1ad55c676185429ef054eb15f8996b9d82fc625a2978994f8c8aeb877bf3db2af758994e50d12d2c66a810f9a3133c8a0d2c0d91e94122e19603c695205c93e0b6c1fc97e0a2eb41b25be37042b2eed46e93f922190019a946ca0df5b25b82d17291f9b167e7e70db17ef25c7b7e2b5f80133a258ac4614012520ea0b3d3cbe3051c302cefa51f9319343ed24776c8ba675b169fa479b1108e4c6f80510559e331c9e220099d9dac211b49ee11951074898b9b54af2c77f3df976bffc453ef9fa4752fc2b661c92b56b6d200edfc5d79f10dfc3c79a7cbd6a44e1e3d7abf0d9ebb0d681fbafad55deabc13547e09704e0b53617efe90245affbe3d349d8e2e7fb27f467d88ad75f2dbb1be420811a2452ecfed820be8b567ccf2fae00b75b0c14be0adf59b4f662a0b06641705b23fc63b4462af0b3904929ef9f4adbbacf6a4b1a3f0b1327520d9f642c4989c465e3478154c40763fc4829fc5ef0c568952eb616dbd8bdf7c6624018871cfc31ce3309d77d862b26e87838a979b3a3078e17aa00b9a2068f1a3d53422c613ee244cac53a25a6284d2b9ae7776587528c2c53388a3c95c9c2b2810268e30ba8d199bf915a612a47560a2500915a75dbff81ac329c92e099928294295a098ffc630c677431a1cf6882e64226460cb75104ec62230968b43d9cb1596802478bcc13115e0bb813694a1130c976725bde14de141b7540f0158afaf57abdb4183ab8ae29af2dc59081c245668aefba0840149e1f8e840f3edc385ae1481871638d4978b7d5faf5faf9f9f1e7e7e7e7e70441b65f9fb7ce4fc334fc79e35a1653fe3ecbf7b7b9bb97315f4b34bbb2f28ef75ebff6defc17ffbdf7cb59c6eac881df6c15282b94ddbe9f813abc2853971745b7efadb32fad85c54779c4663647f3f15108024f79e67d5b6ca4a5f2e98310cd7f963821aad2be85dda92025a57d1042374afbf649739c990cf04f7a51826f2ff9f7de8bdf92a1f92020ed35d42e6a2ec6276b2ec87fd54e25dd6eb1c3578141e062fb5bd21d04a41dd69099466b74ea1819e310d44126948584b05f21215208f47d00b366e0d610b867fb83007fb44ca361bf34d0973e39413da552ba300dadc2aaf02ab40ad7304dd8739b876bc815ee09bb42aef027328968f813a7442971893825ea4429a22aea442c318de846c4127b6296e8137b8e3348dec72f6cd2cbda7aa8cd208d1ba47bed3a82ea0e5cadc01e964ea7d3e97461aaa538e8f3f97c2995ae2aafb6a77103dbb9a696333083a1b8aeebbaea344dd3f405fa7ca00ff4891849180c0828162b39640e1cb05f0eb20da2600e4c9f401d38a5b14adf6ceb7f36ae704d41354dd334dd812b6805f6402c1206145bd7755dcb344dd3f4833ac86442421e3c7c98e5d90cfb9d75e8652cdfd68f4ba7d3e974baf0b782e8baaeeb0ae6c0147c0275e05407994ea7d3e9843cacebbaaefee66c0804081a8d88688210394408ec3744368376d64d657567cb563f2e54d485bfdcfbfd32d6d68f6b08844ea7d3e968e12ffc4d104284887fd3ac15e5a222ecb788c3fe61ae9ccb4f62afd7eb893d1d3e72dbcf74659eca6adee5355b8510a1d3e9743ab3565464643462040524320912d82f09525b95bd1996d8c33f9bed7f362b4b8db94a74ef59eed3fca4355ad3aa188a3d50ec6523239dd34cba49e734aa9d74aa51b7f9c7364e718a6f1a4db1d5c63d8c857d784ba3f8a6cb99aa51add56c026d15f886d3355dd3355d29c0a9104c42bf80607b029cda13fe384db5ef4472bda7343e91f2befdd8bd37ebc61fa2b77dfb620866fbd87f484f54adb5d65a6badb5d65a6badb5d65a6badb5d65a6badb5d65a6ba3a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2ac8d8a8a8a8ab2362a2a2acadaa8a8286ba3a2a2301e329a6e23b7b5a0ad9d2ef6bd42466b445e9cc150cca288fd8a98c46028ea577ebdb0df574886faf533929924b15ff287fc216140b1329725f65b92402587a00eb22c9361bfb21fd79e2eae1fc804a2bf0e289387dc87593a948786b0df217427856aa756ad2adec259b80edec27bf00ffbd22727a8a7544a979a21c8b7caafb63fb6ca39a7d9fe60ee85390cb1df30af455be5e81a28c4388ee38feb7cca555fddeab75af5b07c5845bd87a2288a3a966fcb7fcef552555555551445511415c18103070e23643f7db94a7496fb74b5ea61f9d6755dd7354dd3344db14f555555557d4af5ddea561afb54555555f5853c146d95233aacd7eaf62e966f6b5dd7754dd3344dd39f8fcb51cf79fa24a6699aa629f6611f0eaf5f0987ff03fffb1cf8d75c30b1350eeeeb9a8bd75f17f7dd5f0987bf45072a5858539b17f8cac7dfa203152c1c88665f84bb69e073a0efa6d92f0193fc25f0d75f0226618d03f1ef9740bfffcba4d91a0dac41c05f3f07febac6c17df14b20d690b0518e12098c1ac58b3fe79c7588712d877fe69c33066dedfc804490d25a9c33061d6b51e3238c31b6d662077d3c328ef6832d82ef0e5a533441986dfbe0db1a0e9f06eeec38fc138777abc0e40ef39f38e70f901bfcf1c424789e25185ed80a2b92d83cc18db17e91d83c1d481bc139875a7b2e8086adc09fdf5e117f075e04c31063ac01aea1a82121bd604e4a133631a5d1ff98452210c439bf2c2c35bedd1ce23084ad087f4212d4b157eefdd0b0550548f1396fe036ff0ca240ca6058a53461b38121884269f41f8a9948a6f508aef7558002aaf68f167764b739ae01e08492c7679f796b9b010d1b5b4055de325a8333f0f0fc542961dbf278592393f2675b1eaf0d8f5726eb04f4882a63dbf278eb0b8aa7f2a644f1155a5df2784cfb9cd1d1b3b2e46a0275e8448de4c20d1d5c6b74f0c85909e239d2e4709323ab9c09f9e194e554877795ded8b1dbb1fa91dda72e1d7095e38d9183020d63d4ec13e98718a41a25b92d6f8c96a63151e68c81a252ea6d79639cfa8c9191a60cb7e58d411d20864bb62d8f08179e1835cf78de7dfd4ffc77e6e669c9ec7a5b84fb72335b7c947f0caf9933de2376775cc65a6b6f17987736d31a63c7a05b6bed4df251de17d98461a85f76367474c100b67d33e39cc18c6f6a45f2c60bb54730eccd83d9db8e4a1ddbf5adb17d035cdb6003249b4d458a221bf895bdf22d00686f308a64381ba2dd9d6b17bdfaf151b88b8ae88ba2afaed1bd76e66d6fe6701dcc203b0e63f0b567a6bb2fc9190451d81321ae2181b593dc20e8a0e313049206bee79208348d4edbe70fc19d419d1466ed201886b59901bac85194e90fdf1fc4d63ac9b7b5d9ab70d1eab3745b58b30e82423bd794b6d661dbb7f49efddbe5b7991fdd77a6ed7eba6e5391beb3a7ab3ffe64647bd3c672742edf26f00b5028f2d07a867e6d11fd8cab3282acc0656948956ac59560b0c0864d0d17ee4ce9e36ecd9cc101e7e7c2963d5170e7552d60420d3eca700913478753b262260d8fce12a7a52ddc79b74e34318149d695b58522b8f3fef689ad9f1b28415680410ccebbb459b22225eac75b42669f469b7cfb65934f5afd361946cb26c5d0b011a08413f9cdab8c36cfea84fda3994acbc548ba4faf029366bffe46428e9a279c7e6b57e8f20b1e9df428f8854adba48ca2e88b1f8ae2b657f9d1fdeba50bc5c67f4d283d1dc7e8f2de5ed661a9512a3b802c0db6225f2f6d367e109a0993d95010f6628567e39fc1566099ccfd3ec1d225743fa0a93a61e3f720a24a4d1fae283c1d6694a4b4ac676a7052a78707a763a867dc662074d57409b3f1cb602bf06ce3244f55b45c69e3a34a8a2b6d159123544c9cb4783cd160c1b431c618638c3bc05660cf77441a3303b0575b9cb6f3b6acb0fdcbd9bab4fd7f5db3fd6d281cd9fe489687828fc785ca765e971256b84c5605cdcf4d2ab316391b7f0cb602739527791f0c8a7d121921609f28b6535929a9e06cffd9142f8b9bed5a8e6c4f8162a9a1002bdc430c58e0ac702b51e14d1a33172c423050860e93a7262a3876b8d27a890105831e1c3a750ec842631e6094c058e0db0cac152129cf99c5ea604694f36bd88a7c7b1be317a98878579250b0fd43bd77494a524696b2db6bb3f16799ec0784c79b3736943182e294d29c992954a913346170fe98053ebaaf616caf5264fbb8dddd3d694c79ce66332bbb8db14c76c54cc6a48c2c65b7828dadd0d06bca939c11f176bd0c9ec8686faeb4bcddba2d6fa7ee73bcb3ef9bd896b763f2cfe36fdfd956e9d3b292e8076bdfa7599126da6f616f63ce1e5dd2de7eb0b4146b91b4aa776ebbafd533e579811b365edab8460b7b3f5dfb7631fd98798f7674f27c57d5201925fea98140eefcdbf36a55b5fe60e19bb6e24361df0ff3db170bdf2cceb7b57f7e5ab5273028a2c729bfdd26eaa852a5f124cbab02a533dae738b5efd81bb148dc39fa9aa652d569e763fd6105a477b13ce97436fbfe3d41a67d825bf6fd7b8a7bb693ed44bfb8ba2b85cae80ac53eafce4dd65d3ab1cfdbb5cb2fffc5f5836a156bdf17b9342a72895c2297c8a5519dd3a9c8a5755777d5bbbbba3b056e41425281b4923f9ea1bac31db85a6d90c9934ef009cc813930772d2e7dd2812a9b23b087d55ad0292d0ef6167b607be304603fd6682d7016d60256a3f9cf6d176bdfb43c1d4befccd3755b876f7a372bd5b7e9f0cde2a6d4ddaa557c74417005ad808420c2ef87cde003bee29536820bcbe5e3033fda45996cd676d3666dd429d7941b3ad2464612de0e15a6ec9d2a223ea87435e9d9e169ead4e449b4fbe436a87b5f6badeff8fb37fab7d28b247266c48931c38b2c383b7543093e186cf4aec01870f7ed335e30564b7c42f01fc1df830f3cf0a45ba359b779f62fea2a3df8c06680b10e4d6aa2eabe28f998c0b3dd843d724f8005f6f63704d88cc5d8ddd4b4dd84d35da7f870e75181f2983bb6265e6cdf12c2081e0499a8a8946c76672d0c91b211000000002317002028100c0744921c85712892d6f814000a58923e64583695c8a3d15010c2280aa3200a611884100300320629a58c328901af7673563030c2f6b076330d324136a376ba9b9304684af80ce0f103a650f70f95e22564701e2664850f830cb688415634633fd57b2eee3515ec04789af8ccfdd3804ec1b0d4cf0d6ab81bb4d058930027f2c593c422857224cd21e9b7f9b3ea989b2ded11b102e6893169e9cc544da87b485ecaa1513937be55046e12ab36a1acca56ba782d4c4cb8e1655b630711a43308ff1c84fab41bb597163235b29eefca09c712028961555003151cf3ca4c90bc591b6ee9c40b4a3824f61d61c921fc85ec5b45a42c3547d36ad9de822bd57af288e2d62273da847b2bcfc455c4e7e4cd5e4b0c4dcca61ddd2c081e3bec9a328928f1119a0d339bf8000d960a58889eca166b360242c18532e263d0acddc801b433a0c6b238d9dcbf35850e16280e0bafa2d34bba69552560d10412e4d1dafa1049c80631c751615c21bd10d0cb08e6e8bc1095326abe0df23431c94f8a87e45faef0a33a7d9cd519975d3ffccaf666a8113f249e889dfd3c36bafd3ea16abac94bc79dd0576062206190edfa2a404a58cf3ca9a601bc0102b250076983d23dc4a34508ae39f6e38c63c3651ebe1f205c9c7581e8ffb142a39712a7d826a06120d25116be90fcdb22d69da1a4f6eb1d5c966b74f24350867059aa168d1d2cfb5d91b1872a926107a3fa258df44b17e71c035b8cfa05f837c774a1707a835c3ac7b1445866e8d4a594ffb83f341f611630171e50b2cc01dd686cba916514678c5e6560eab089590fda0903b96c8436c9a004c0856646650a935e3a477186803f155cbb052f2a827d9cd337d3ad58d2611736325d151b9fb188156c2ea49ddb027afb69c9ff283c4e6fd168607c385e36a5bb79b919e612573b6418b450f7540f90efb0b2aaddf444c562f00c2cfc0843f68c905603fdef5a8ec062f3cdb2457dc0fa6807dc06de588f986dc0573bf943c53c3e4686ad62fc8b06b857f05f2754df1d211d8384cf25e13a5c279343f583ed275946c8570feed57c789c2ca2484e306642c5749541e0edce16799d1a6b4c8581573dfa98d0a8961a9d57e6e6e1387fad4a81ed1848ac4a3c105e31f686f03adae7a3dac2ad2298aab7823fa073806be845bb93c9e4ec0257c0beb96dc5d54036922cd5bb9fafa0f70a40ee6b4bfb61f94a699ead97e783c8a4a62ee09a932c7410fc5ad880ca902949260bd9bd800855d04bb632499393b35d12b03f15d0418dd5326287abd2dd238c763dda5d714fe19984ca996284a5691065abee69940f504c4d119ba3433aad9ddd2cc887f54c3ed17525d3403c46b8b1e79d991dc38e80ad1586aaab48351102fec2bac620424638cd3ceb30bec919651a6f2d10c86cba92994f0ced44fa71d5c9a1130b642e8136733b604819614e7372f8b8a3ead549bfbee38f83ede79757e3d15805f08228117ad3953f18d71dd6bd68e4c0e14be6b483d1043a1bd49c31c07c33fb1f2f225f083fbf154bd8f4d7ba60452042ff6bf00a62c4944c341c122c4d4d4388b6619b4a5e1c3f04f30ec82a9dcb63194eca31255c563022988b42174109316d07a6e68f219caafd07e56b1ed11ddba1f234d3a29b31bae08f9c371e013cfd2dce73e41a7fc79b552703f17790ba1cfc8f3c67890ca4914fce5bee283c66e73ebe14e5bbe879470c0a0ccccf77e8ed0586ae41b97b487d009c4437ccb80da946f5cc879f1e80625233f39fe1724b5df828b606864df9c6334220bcac5bbf931df973409d026dc05ae24fac144cb5c342c114768603a4d85b566bc796f36927ccdd846f3544dd050142c098c1ab40b1d6eba265b9890458d9ef40975253870d6c0300f8b8355a05e448b0ff79bb1958b099e982b50a4ba1e5e910956fa9015e882497abf2e43eac1ec588efe2c6d64c915eb132899086cb0339619e8ad0e821bae267e79a284eefc3e70b7aff3b41f07d16bc8149f1340cd72da77ce93952e35f4665003e97c08682f87b42536e729e28b7af1d7b70c9e05d583dd82cd4b02a6407f8f4b0ca22e2dc18fc42799c189e7e52f912e12fa9d0aea620e8023c900a833186250a6fa82615252bf0e24cea1c7345b4da26f863c269fd174bf3f95c1185ab0182e87b26ef6d8d7cef79f043f1c9047aee35ec41208361db52b709e696ad768f90a7112286563121d007f01278d18b88502011373c66f4537aea02077576ebdab3f11039f099343c2f7ff764df96bced34937675e7a713f640464654464e077ed3d91b3bce01f0b309fea23bb04dad7d3c3297aba80c12c5f30329ab8d4d152122413a7ba70087a88d890fd286f298f8a00060cb27ae859448bce52aa0681435e2abd5329d508c11ed075537744d2b21d527f310e43e40cf8794701eeac7d94467eabb3e7ff7009ab418571852d60a54aac8460791c96d94d98126a9a44457751a883d305c00cffcfc44443e4f2a9b7b5e85c827be0b5cb69dc11e4535a1dd6242166c5f290b63e6846320951bca5a270e9bc9d7b2e6b918bcd3945b3651cfe6f7c802b78e8e74bcb984f11314d31d56b2a00395510b880df99fd51a7d986218ef16ccb8033d7ad6301582f822c74b92492e990ade9ee78209d619e2a140948464f3c82a1e1774004b1ce11a20f83fb14663c7ae70e66ba7749a02d8a424956f3a5d99094d770ec41801fc113690f21eb03ab6a04898b87c517d5c08fbb6fc9acc145274ff4ac530b2f4d3c2aace493c87ab860ae1a0458f8a2f3ec562ce83114970f6212c08da54976f018e62b28107410bb312f3e2b48b444e32bcd591246708fea89cb5fdfb4d6a76ee7fd58dd3047a4021da8e40d1a27d86ce5f8096a3d49033ccfcb627efb896106c2249879e6375bf051d0f264f9bd3f5239eea72641a928f2aea770bc6a574e7155c30510dfd9129b2ff174e330fdda1b193117bd5366dfbcb600b8c664e810bbd2e58cdac90d63389c5af93f3d6e452dde42af0167b19f82316e3a5a7bffeeb724de2cdd3ff2341ae45c7f57e35edd2e695fd5b735ae8a19ad9aee1c06567b2320f926b0b463e4cc953ba1e2c0f23592080e66a387254e499e750a32c0200a84f354c33dcf777b114ae8a35de93eed8e378aba20c535d5fe4507ea73339169074f84c4270c7eae51d3ac8f42371aeeb4ac66e4022514520d1937770b21fa63bb01306504793936ee50441d8afd0f572dfd1a6bf5c95fd8fad8c7b19304e37dda57f3e8c0716207f3ee548e0ab714cfe6dec63c35f013d15672f93b5d94aaaf389dd7605e958eb09c76dcd4fc0fee8679c4fe35eef478fcdeb0003cd5f03339fcf7b69daab971da7aaf3da894058077d4922a6f9246d4efea9879bcfee9084075e60bb59a761900043b65187cc9bc561f8120c00437d4afc882598895a2c0835ac29ae007c51a5b79bf2cbdcb316052db5fef39e179ece3f6533298f8ba41fa5981b5fa4e986c5419443181ad7c2c3362043210f29877c74efdf571b86c5a17c97cf6c62195bb6687cf0098a9b3d66333f7403c0ce3f71e8c3c7c537dc54f3280c586b1b4151c875261bea7a46db9bcd8eedcd5037ec140a327d79926afb8819125117f0fbd011745fb9a1d719b800bcff3bd52ed4d9155c668ec132a12f3613ec843a6d19de06c64d55570fc68764640df1323b4337186063f46c4d91aa8a4295f5b73af841e66ee5d585555400f78076e76cf3c0a3f57aecb93aef4a5f27c4b2522ddae410725e0dadbfb01f8c362b50a809816f5d7084f0f1e0363aeeaa0cbf423e9ec3a8d2a34bfd07a9ce289f9e948719a04e8131aca29f61e9bbe75852a1ffe8515cb569f06971af2942d4682dcfd90481a4ecb5d51ef55d4a8338364cf8a53b9820d848da0da9498b6888dd270e7f6dcd16c8a601d3110b198e82e1a08527241e2289bf706c21d6ff693b9d0542960c6a85a3ea2deda488c44ea0b2a0620acdceb3ee0529dbbfcd5ba8e74e6ae139e9ee27ca9ec99d317aef6330ab33fd3d2bb9cbd1b354bd41dd3f593d09534fb1be5ff9987fe37c78946f8520d00f5c0fe87fdcbb6d11c6a751c4f75a8f9ea824fbdd6b69d6024ab19dd889911fe4be2a7d8e361ca8655140b01cfddfcdedae423fcd6c843086b61b020f2f0f662127f40d1526c3b39c8cc17ae9002466e1e13766bb029f1560abddd7f92575d697d85ab91ecb34c64ed6a09d987017d66827484c52c619e2b62674f67a511d80c1ab9179faa0d9dcb1cbaebe3127c4aee7e1562a5915c1e8189855adfaed7ce4f93649cf0e4a7a2e92cb942289c4b4481ea04751ca9a21848b15267dcacec11a9bf960afd30c53d808e3039d7e114807b5803fb36c059562362f614fefc6a97ddd87522d87198c20cd3c0ab98df8b69291de94e8c7b8d8f164fa0d5ae5d27ed12e530fde7517f319b4ec7344496f4edac324f63cc4e5b88f689c038cbe3622938d6fc1c6875824fac87b51d961f1a0e2162b01e98c1671b4af027e4cf09b82d6c412087e681acc5e20c42279191e39a024126c1a32cfabf82d58b3dcc3726fca5864dbe2ce05b9c57f2b14ac192ae22ab47f240abb6297dd02c34486e4f1ae3f18ba6194359ed925b316684806e6f4a4c89c5d5bafe2618251650eaeaa74d3d9ba6d5dd95461691dea287b33ff75f2953150061281e514374823b40fdfbb9efb019915bc011f98ccd4b00b1ab34610bf07f8b67ae38b92671d0fe7705d3e1244e4030f5d97b379a5600f4d6d5966c53752cd51f83b0633cb508fe9595afa33070244dba4e656c1624bd57430b0c07ff281c484bf2f544d25583d40b0f065a78158228c8e5c63c8b89e91f3311e62b9e796abffa9a8c5aa0dd2485570ab4852941d3b301fa312ec400a20a3a0a1c6ca86be27afaec883e4c620f47c9a9b667e1d839776790ebef81b8226687f4b81d10c84bc44ba941e839c30c8752f65f948468c2263897c5f716ef60d31aea0694cb152b518f1f38d9e363eb4370c54cec1bfef3abdc29cf8f5dc1daa30a3e1783879cc4b9dd39c58e6a2a788868dfb829220a1e1699fd5bcb1fe10b43fbedcbdd2a2ef9adedf498300392bd354c6ef1b587aacd4501808e308dfd9b0e50487f92537aa1269f056d4370f4181c8cfa5f98bd0ff3b1bc56b3eaa0543201dd4d03d630a5aa02f7fa6121268f8296d326a34c330e841c65fea35a0f1d49c27950e78453c13cbb563afb8ac287d2dc5978c4a8b471143f9f2fc99eb60eb39f220542f1a2b4b3b0a807893d86ab35276efecfd96df727375239909272e1d352c15416ba8c1b4a143192fb57104d2bd4fb05b311971b9cbbf3cf9d50e1106628e5b007f3832b7ba300891d9de5ca1968b9c7f9db39bd4ff2b51d054436cf4b89e5d2b1f4aed7ce2f10998c4cab03c51b42a3d716521230f1100f0d914b42014ef796669b73c486a04d98247cca0817ac5dae5b64c93172f6c2b9c2ef6de962fab4873e2b641a714d4a7ee7bfa0558eee87718d5f27bf794559957304022c0992940d84a7aba99b898f023aae30ab0b1538a4d95d2a2dedf1ecc621ffd8ab90be424fc2d121da63cea8a74c0ac927a5df4d36a38e054381095a0f10bdeb95a4b36a267ccd2e06b184dbcfffd2b2611e085ab33167089175ddac06f37c1d871cd460ed6b9683869efdd1482a95cb2bb6668304052c64ff9bf7ba5d102cb6ff09ba82df828120bbd28221089d0137b582e3771f62e8b8cc978f7dfc54368c15d661475530ded50008d1456ea26317b93f0b49aa653a6e5d58c282bd9ce0dc16a596d02966c5856149f8a65de45f381a0172fc13c1959fcb532934c5625463e4e457f9ee4a9faa6f5046c3a802dac71b2fb550ab665547bd9549fce3a498d324f232d1a76564700c97deff80fc669b165c1a00526ef5b593b970ed661c0f687ceb93a9a683421ea1cff828d004cbffb457aab8583e71022a19256011298cce5323430024391c0e415465fbfb13110612880f895327b611c6bf6bc06997e88aefe730e8152086bc0ced2045ee9f78ddaafba496977e2837a1394f126ae162248c3580e6fdfa6ca24968f319df4c111cb5f0c3a01cff0ae8928e6b7dee4a500a1f66fdc8b2d196eda6e3e6f310bbcecd142ad019100ea14abda0cac0fb4acec566026d77beb77c61b20875974540cd112d87e1a034cc69f4a1f4ba8ba6f5ccebb53579daeaa6438968fe82418a15ca20d527516600d77eca800faa6aeeb72e09aeb44407a3f969297e7a9117c8bea70e75655cb49fb77b3295cefbb124c62184e1d2e109c0013d2112877d4c9a5c376a9344fa2a0f83562018830e1c2a3404eb3b4604afa8c6493898d0d96a812b198304072368e89378198ac4d3ef7d2f31a157b6a04039e34f8009cc19f2dc9ffc04493774a83e10b3c1ff8a26a86b02f419f4fb3e0003cced74475d6064db2904a196000b044e118f8a6c07b5a273e51918f375c54920498e5282598e3a7189cf4b4807c46e407110535d8a54398d62bca35cc1cc66930a1eaaa6883bcb27b0511f65d757bc73b50fe9344624ef1bd0e7419beee6f08951e6d82b52407d74a38cad30db912bfd7c5942f5cc697e04edec337b86def3ec42b22bac75e2c1e4557a1cac08b2001d40e40404daa3a7b30f153f7dd0bec58e01ae5a7851f2894bb4845280cff70c77cb52009cff5aba04375160e1811838267de297f934f819ac4442585fe1ee9a4e16f4a62d99ca2fda924048e662bb7023a67bcdefb03d038c64c5f918e2e3f9e2bed73224142d4a8623dbdd1f2c38ea9a8341e4a227702d3ffc818277c8a3aa91f12c1c5197d8204886fe557402303adc0c70460cb2a0178fc9e31230d54e8251cad2398529f683b999a5ca8bee1ccfc4a1ce2c10ae65ebc39cf1d913ef1011ac3222815da8a055dab5688467d1b9c50ccc57a8ebabe2f8d45b644e6befda3356a2a324dd68d052640a840a425d32c5981e143923cd03429faebdbcc399e1ffd7d329e81508715786ac21213364dfd4a44aff97cfc11dd69689609ac8d52a92ba13c143cfe7b51bcfad78a48efbeabf5f94316fb9df37a326ad38ee155a048bad30b880bc1519abdbccfcab72ea6cc6e4d1f0d75b4d8572abe7bb4da8cd8378530774bae6c6bb5c30c9158caf56feee6772e9ed5223aaed4a0372782a4353e5780c32ce5e29cbfff652a4402e0ce88060f0815b8628161c04303c3f2046e4d9f1d30079178dce7f46cbf710e12ed3f39cfd4cfb45143bb5121390d1483b5546edb5200248a0295d0c243750c68e9bd4dd52a86a833d30013ae1c20338c452d3a990228824c1f4d288bdb8f0fb403ee493a2502d2ac749e1997355e6c670bd89fc4f66a3c5b033687e3ff0511965d4e27c0695d4d710487b9e586af0a6ee35c6f689e4ac01457a1fb59dba8c293ad7d953d1456be27d5704dd73e84ddd2620c655cefffd2cab87d106952fe9362fae2788842fad2c9c7c9f31e4bec230635ebe355de17963306bbd7fd810a7c343f89972e00586912c8c4efb5175ffeb2a48c4e677e9b84d9a73efbab812a23d1c4ba7c7c036ffe48a4140f22554bb52cf8959669c1f0c6c1c01ff10c77c6028e2f0e0eac58865842ca6f89c12342d934b626067c39ed828f689dfa6d6e5b8723a66b312d695d35c4803ceafcd8dcf6100de6f61523085aaae9c325694aa26a431d2bbc6943beca5eb819df0746fc10d40e514352e020e0477b6811304a2fa6b530b8a7206f1896bed0bf6013528a4c684a9ae63064a2c0d6ea8c9f2d90fbe311fa738a05ee280417e826856a5d5a846372d90ad1deb2c408413d7016ff341fdc4f0bdfc07f3dff6cb5fe11d146aeefabab18a57f464f92120ee0625f0fb6d5008c7c413efd1ff30fcad20e42c8a191c2dfcfa77e82876bac4a973c2edccbaaa99a9da6feb97935b4fe7d8a37fad1d19ba1505bc73fefcf6940ebc97f17535ec4cd7811e6131010dcfd905b18795389856451dd46c02ef80ed0e603ac612c59a6103161c69b1af31165ef717358f280b9bfcba5953923230f466bfcf265a2f28728ec515d547bc0c0676d23423623e119a24ba561c20927320bd0c780913754e772af2c51f63b575bd4d92c3c935a930e195bedc4d2d182e7e178ad2a8fbf4698c71e0c593d8a6d97f7540439fb2ddb9374fddfd677a3abd47c2bfc3b9788c01ed046e9990cde562c2c2c320331858054ca04f9406c1083819783bba9dac78e1d9903b62abcb3bfcb79be2da018c0240ad5871dc3943877025bbc80b01ebb25c5eccb29c8bedc5b6e2966dd9c513f25c72ced22c4f7a5e5fa803a5a8a956782665c13882217cbf6f453012ce4c5bc74a81d4371716267dcb8c7741d421816794109f7ca45e7ff0f20e2a1246fe7f14dd1b62cf9c138afe5440e79da1e06023c87f4c090f17d436d9c4059722cb0be64969d820fdbe9ba9bc26af21f4da3cae9fa4adf00704f0a439d5985d83b33400eac2cd77a6b0726a13e34daa58180e127a76c5b315702408d76b4cb2c469be91d4fe83a705d627003163422810e205c213a40ae22cb9e7382d29153a74bd8bd5eeaf01f0d0b7a1aaef274f85b95b46e6e20fc85993b6d29e689fd34815253e9d9fcbfaf37c3880f12139fc408f68765703c595788ba2cc72a2c6a112dfbb819f2060dd2e419de3b681fbe6c78e622cd9e8f1581309b7e4bda2806ac10558ddf6e1966cd6e6c201ea0940ccd9781981030fabbc3c0db137f83b78aab2274827db274fbc26a944bd2e427bb88d476af9541e1bb0ad0c71dbd4b9af7057bce609df0bbae1b30d040674115f713aeb02fa01b286f075909dc3d0b1992e8b884fa0cf1814164ad593ee6dd03f58141f65e658fee0b973518440da9efc3f7a55d23128993b9fe081c3c9a8d6160270c66bc4df56876669e301953e253eb9f86d8e5c7974c2d60b7e2b0e2fdccda253d1858f942ce06c079225a828c11058751ff0a9d158b0a786c996264884e702b11ec56ff67bcfd4607af19684f3ce3cda6c69ebaf94f1403a5cb61b00dd508b9152bdf3d4f830efc2d02b6500106caee61eb580bef25a64420e5c82f52f42de075a4bd9d2d2cfd8065c4fc058199791ebd85323cb1b0d1a3fbd2fc7b902b1ab449c788063f25fa3dfa1dece2aadb517e61f00c3c444e675591456e992abef43593be8342d6f6166b6e84ba2b57af398c6fe3d5cbe353e5cbd7e4d1227a3c085d96832a4c9dc01159106553282aa3998a2aacaf425ecc4363fd56269850f1e55891e94caefc71582fe869fa5e78ad19266f1257a8368f6505296f52f9aa120d2ad51d41145778d0f880612988cca37f75f2014197104750ea8f352e1af45ea11b686b20d788fd55e1fb63332f00d8cf8dfe031eaff5e825aa94a5796d744e8d221ca8e62801340c7da12073bbcd0e94a1c4f3876799e73ee3e01e5c05374046a9e72f1e645f1dc6b93d03fb907ef83ee99307cfd96f5d336e5f57f5648cb2f361424808e80043ef26ac06323fb459f25001b0d96e1c4ebcb12171a0127ea4171a96b375e0d1e13a17f1a41cda2bf78197c59d1a2e8d951a7998a579db9221b1e88fa80d467a3a3fe0fc85fb90a3a784f5b53ce0e09fbb91e1693799ee8ce72d2707ee30c9ecd33e57951ee3d41cd9ca7e84d77ecee58e4b0372062ab7d99f3cfddb6ef196548e067c082bd408940201ff47a89d4438411f21aa1a2e8aef2b519a0c2a8bac3a66d02289399d62a7d2ca6090090be58a4f6cf4c32c29c25e63cd917b188cd5c720780c889def9fd2c1527eda0540b6393c75feb68929285248f10afbc16b62cd0ccf68a907e6e4eb18c089e5ccd91afa7224d4d4f15e63ca4baa20c2da07483b50d867a6116809a347201043ed76ba111beebd4311509131ceddc41dcbec5132d32b1a5deda77eea81182697efe7bc4cc5ae8bb9e23ace1cc750b5b31a4feda7265ba5ce6cb354f64d29cf05457de7ab3066cee831914838d27f59cb5382c10db495a1fbe3bd628e61ce5090efe5418d9208ff587feda431c68c76fc7c94518d172d60e182ff3a8008f472171695c405f081e9e89ee56d993ac6010f4d83bad0a0b18a13eb891040a29cee8007e0e147ce3082f96637f1b8bcca0a2845b92a805047bc7d6154f87ba16a067794dc0339773506c060f566ae79a3a21c867e320ddd109a8e6e88d2d82e24ed7e194c0741fcb568d13009e569b7fe0ace5d7600a14d936bb0c99fe09fdadab7b8a2046e58504ba728d50f7ad0e098255d95fa57881f84d3ed697de94b82014cbf603c4dfd1cf4ff00d74ebd9a17606639389f526b42a91551a0a80ab71f7f5d6392941900650a68c7f145dc05499efd9c9e269a40d3bb34998b03240040185ef1961224fe3e68e448cd41030ddc1e9372af9b1f79fb86161ed1cf5c7e8b1e59ee33a028a91f64d0e0f125850321dcb22472e4010c3586e554a4bc0a22b33cc11d8fc3bd18012dc95d3a10b4a2ec4818cf29c12f80347b3036605af69f692bd5e02ca3c5b73858850aa45b116731d199fed789bf61cc4f6cf3084f6e93d438cd36bbbb83ed56dfedcd46280dd297dfc9e68dd9430791d03d1e7e13052639d1527dd10a9ce0551c9125a0f39855546ac7ec38ec1e9835d2b8d99ddb3cf3baeeddc1467cc796241051002a314bbb5d6c436b56a13a521a9f9081a9b6e74aa5095c12599509d24b40a00486d21edf1cb6850ba6db8aa68a7a1c76010e5b54a77fbe7da47a54b48f394bea256ba18619d665d3805c1abd6dfba9e9cd574b506f47193b064727469970519c2ba947fd8a5e5725005e3917e9bf0ffc53282af5071830088f154503edae76122defffb4954ca7ed10302335a5aac1ab423aaf6d1d143f56c7987b50dae589c18246a012345ee9769ba7477c0c623588a96aeb3f85b239bbc8af6b7a2f5e9751a826a74b480b11337bf47107b3e0a4e6a87710ef21d0153064c954f3f09eb408cbc490fb158050cfd9ca08a3c1e28ec310fe399c67abf4e67a27dad57b38f2d48995d241e0060112313e8213126d6ecd36980568d59a6870c7bfcc43a3781e164ee6d8b0628401dfa942aca5601aa179c55a761665b9b728c2817827e114bd239136a4573d666cf3292821449be2598c1e352dc3bc1dedffc7d2deebf2291dfb24ce0c199fc97831d99acbc3105de8644045870fdd5c1ae88362b3213c646a701bf83a193d47e5a73ee3c9ccd76b4f3b25981c7f475049b1c1a388a7ddf3a8f32f1a48007baeaa0d8eab14a7db0ed75144dbecca7d4c154931bb9552758c79657f355507d70d9d46a30e57b5ba7e5a322547b137b159e0f555a329fb00caaf994fc860ddfda1ff3927ad62734ec19853fdaf54d1a67c274689f03c5d293172573a7578af717c7748dd1699879471b73470664e47f65970d1fc929de22c2a1a7fb81e284b5035d9346dd1ca9b611f6a816ca440dc052450d32cfc8194aa2b365767c0408ed765bcc97994147bca2fea7ffbb5097cd7b7b8de5fdfa4c328d680fd583482a76103b81b241b2ede57cf652ea4010ca34452fdac7cf39d66ed37b70c2f9174b191eca4b87c584e352086d21f012d4238c9ac51ab6a2c7695609e93054b603b388b18278bf01e7f827b8e9a77d3b3734796f86d052b587a43b919fa32cdd36806c40bd6589adad364401a4aab394d147c9e918bc69e684e13019933e26a82ea6505958b09baaf26a85c4fd0bd9ca07b558792cb0c2dd7097a2e3394b84e507add03f6547a534b74bcca1029572dd1d838e39da1a2fbab5634aeca8a94da1a9e6a5fa51189ad3322255f633476675e052dd2af9aa2712a53afc37b8fa5af6e45e2938c5ca771bf0221d2cb138b66eac6b21e5c37409a8305f5b3927a3727e3e7d0347713aac4e037eb24f4744c64cf49bf2b25561bbf939c291d316a1d75ddc42214b2db6dc70723948ecd1e24ad75fb7a56e3005888447d3734b355ab6c245e3a22453c744e9ef33404c4f580b9772b6dc955610810e901b8db355ce13f58840a811e20ebdd821d98fb2556851e152a04bac0ef77eba0692e9fe930e4e21c4241443fb8906e22a89fafb7edb76d7797e4fd2fa5da8929f6105be93afe9e72e92d3759a3c8858d5532072e577aeedcec684ff8c8992245e1fd147875df2c39b1038e3a91d1c09a2690b5b1d11542daadd141ad00aa30aa45c772db4f2926fcceb51926f57da9a96e442246780e94df8acc58c472418b81830497bc146e26aa4e238ff34f63b7a65087045d79ebb7ae51dd241d71688794fbdf7a5e29050c86c247a26407ac3455d05923d6b28392e2f6013df021f3f7c4539fb212818490c87f1abf586f8c17bae4856156ff8b7a331c50e379f91f9e91ad7e0203fe990ea008b1f7a880d5ae632424e4a0eef815c8fda7c34bde802f388da249ef85a93acd604a313e0c273b5efd812d4ea4a0052fb17c8a51a38c8c31feaee1de217e543ccd1bd29438f51430c797480bfd11fca5a69a2c485675422d3ce91428820a680176bafcc811478f948e9800a1048809bd0f96043e8d2f5b000d585b6875284f6d5947c0715d4116640ffb6d39a8aeb371bbe3d823e73702059f0cf7c345c89bfc41cc2aee52395fa9462191c92b55487ccbb9bafaa22ff3f35843043abacfc5e2c4468c32c2c6245782e55d5f134365227eb6f3966363569ae4f56abaf75ee43a486706788935676ca364ecbd19d2c4bca38eeab95f19222015b65c947217028412833169ed7e4e316c02aef6b2bbbc3c06d00461d1dd1eab5865be7f7eafcc555204e62b53f09ccdc8d6311c4b7fd8c78e20b4c4dbd2828c405e47ee1874a32676ef91a2762b0477079c6ed19e71f4fa657d39329273581a6ced37c29d623d696d6b22df092a0604dc06c740f1f94f44c664fea7c7a6d4bb102094644033ee4f5513af3dbfd5308f52104445ac480e54e807567111857eb903deb178d2d8334a7cd3088d235f95d1c401911e568ffacc42d6394fa368ddb8b11ee656ce69c8f1a4667c5efe8b32e4d334359c128d022eec02afa6a86b0eb84a0ae941da6735c03dff562daeae2cbf13f58e32a7bbcf7ea885d2581c25d32c2fe620c45d093c1a06d839303fc96b8cfecafb391cddf049518e9e72ade8b8dae4258295bdfcab04f7b6e4ef8bc5cdd51834d08c5121ae4135195aeb7bef916a8fa6114685001c6711b0b3517d3a8781879c3283d1aa7c2a63796d4290fc8fd597b11aef808ced42b1d5d32df872a64e1b6f236bed8f8f21980b932180d413bf83db6de4c888f8e2a27b12fd61994d5c9072799de8f94433293f4f39c30e73ddb00970cb0e81d26885c9d3218026ea42a1de2a199646936c801ac384e9d07c479a80264be6320f192d054e5ed40a24f93fbdc393609fba626b7d4415c62b8110dfc84bf48faae20f12743593cd54c85be78684d72fa307193491b06d356b22f839e2207089931f87edeb7eb8b8fcc7f9ae5ae001aa05ec84a166b62b662e04be89b9c52632ce593ae69f70c2109e0f84e77cab5f8302290db7a1ce809f0c3f12a323c27afb46ad158c74d26436034c8e829af52c378d4b5630f2b23062152a582f3e898c841d8e3b381d3dc7e4fda8f6fe60f154228c58734c033206130ba61bf18e70a1f61e7e96f0e62eb460528955d8764d8c5ab5f9dd1e8d1ac603b1d8f470caf88ac75fe24de98a37e538271cdd6ffdf131ef75bb8029b61795c94dd64334b7c0b08cf4dbd7158011e06cd91401e7be9b9d965a31dc618533ec13b064d13a254bb374ff9883f07a2e4b3300949d532bc4fb5a81149c70a5a557c2387d754e9f2c13ea088b4f8bf333c11011da1876681f55719f083eada573b8a4bd7dc739530e35d87fa764a2541b77a2cd847190a8981e258ce704249490088c19b3d02024c26e6f75c38f08dd2af2f8e00089a6e773386e77a34cac3c26fd117399fa23781b2585dfa3bcaa490807995c44e2710ce33dc89bf2b0fe52d070a2b23b3c92a81b91568da9b41bbd981b75ad8162d7f95c06070ca090da316204088550740b623d8f500d15bb251d7b50dfb3b96c71338199c1034a831a850d3f960c0cbbdf64b476d7354dda7b0313b22f91884d8783a08fd112c400bed11a3fb1cda4243ce15ac2b53a5e8e369766dbf01746dd2c6e71c0fe0e69b66b887775ac1673bb3799dbcbb2b3ad75d64b41bb12e916151c578398316ae62c83c61f950ea8af429b10eabbdda51f7701b63a9bda236a1a92a5f9024d703238fec44945c570d0a4c2256b69e7f56cd677de42c83ef80957087c14b2c1aa79ab6097493525312a36784f798d35cd952bd40368e00de1d638371a434e13dca8e7f7ecc07c74448d1278877114e20c9cb256ce4cd13bc6a51e7760dba88b383d01bcc3b80a71dae50175cf981304b7345f708a1d6f7538258385bb5985693979461411f854e02f47f3ad1025e00de3d638572bf6c82428555c4facc9698548632114d3b63f489bd10f6e4816de5375433ce9cf1a2b5006edd76b5719431e5a0db600a8e81f2f21cd1acf9ffda8e830c4be512de9808f07431fb311318a124b62b4df1e088e7356424235e1850b1d26d2f7309f78c487bb16ed8bca196fac3a5c8c348d4dbde31715aee0e14d2cbf9077dca22f1d219333bb2034b6a1b28861102134abbed21c907e806be77f3a81f57b0811f393665affb5e3477cb1f0a10e161a4bf5d209fb1768cfc4f6febcb81f848d4ac21666de8f6fc044d6982a7db008b7f984a94c9bf120175132e5f04d0048605ae58f4d4b587a4b8cd866638481217ca9153cdec5238dbc81e23d7891d7a7c886abed97798cbfbbbae9c83831a699447fa4c91a693180d7e93ed27afe47ef48152c1f1233a23ec8c39e654868b0d76e5e7519b9955a4a8e1493bd4d6da81211e67de8956024e8e00f7653a5a00add733b92990fc6b5d32749a8738bb574c079b406d12b7918d8747b06a1d83c4eec982b86f1cdfb4457a06bad03aa862fb412a8b79eb42fcf41236d10aa4ad192097b4d28d8e470621782f62c2115dffd1d6338f0235b1b308cc00a22c5d613a61772878f2bc1869286248ba8df22b0ba63a05de07a15c58e669c05327ddc9b9867bf285e566b892903cf2ad17a3bfe5e5406b70a29e0fd71ffd2e0634a199321a6430fab5cb75920145de877c844f98121d611888505b42429814062fde62fd38d78ed42a7dd1a94c0acefdaf1c61b36ba175d3a4719e4cff36a45b967c2948cf317c9986b07ff593e1c8627654407261ec1c0e513459af8bf472c5982397b6138a384bb48d35a6b79a5c9149423a9eaf295af9b9dcdae64a125cecf58613fabf4d87239a494cb062d5c6753b74e8d80aea527f4c67f2fe5f23f632a72cc1d8b2bc4002dd260c704454fa843539b90d01b635303e10753d8747b38a8c32a06a24313a1a9ac6c03f065ff5bc13ad2d1a6cf553dfe33c4351d1555f8ce65a933c50aeb881644d0e402e62f37345839afd1d3d4f97afa2d6f61ff7e490affe2581655e91db5195f8aefd3dfffe6612596ca9d9a11dfa383ca86351984759cda113744a0be47974e43943288f113df55a6c13ffc7549543373ecc54fa9e297685431f5bb608da3652ed86944fdbe8ddf43af646b87590335a535ff46aceb5460920ff197b572e91cb715b76103fcafa11961a79f562ca282050c9ec6ee3c801163308432bf1b1d8a5159ec3f341b8d3f41b582fa36d0d839201550f2219f2f6943e74486571051894e6454bf69938699d1da53500f59ea79f66eefe6162d99a1e8a7285eb36f44de423c959a2b717104a8238641dc0cfd06e55f5f8a6912129d40b0d774a63370f9a1827c1d146245b5a45d2b35d7a238c4a7636d492c71252102338b9508e3ad036aea28a61f9860a02eee51424567372eea4698da23a6c5b29c76688c6339cabf8843b4abe73ff7a1ad4d51880ef263d1bb5d5ac0c0fff78dd3961c5043d11163190aea13c68b98df2ca127707c374e3fef59d7ac36b74359146a68326f55d4017b9e82f9b105ea11479089450c8d94a99efb10733ff5ade1f62b3ca2c7336b4171db68e55cdf8115714df69ea6c6b9da505959734b51af822b2b2a8680d11480899280c4db13b290dc08fa9818c2a7df854096a0bb23acd0b7599ec9acfab0c5bf19b851d4b291c58776cd1aab3d2e4b652c71c47e30254c85b43e72f214307743c3b7337d9ad2c1ba6c17219c00d4d50e564c2c7b31c7eed6b58ede1f4b691ec27a2d63f998ac83f54aca1b9381a7e35a709a5c601213736e5ed4242664140d03d21252c066c862979751091f54be60563fb87c50261bb02b41ae5ca937f2b71904bac695e11ccf149231a66eeed7afd56bee1304c2c4c0868db8e08435aace174bd95d68ba6d6b961dd61a042d74fe604002dbd601eb874ea1ada0efc9a71f0bbdce6673f4d0d479325cf725f695d173cdb3175908821d46c95d69721241416219ea45f479c9a079a10ef7caaafce6b0e5550c367cc369b05084d27c40c585f85fcad256784aef4674a95f2ae65eeacc780ca88d5c59b93a1b9007c040a407e621e1f03326f54d87dd6c94e7936b93d6c83497a22b64921635917ff09b38d666a58db4b4fc0125de676a86c190992fd0472ba28a1c40c04c167ee33a723cc49d288b5a1e73a4c9accc11b7b49604e65b2b1ea7974899225134c5271662bc588f5041cca2e81605d4e3f68ba4d85822cd8b68468875d71c4c432ae674db8305cb3c448b487f7225f5c105ad8d41938852f09d45dae89fafe235c41af68d94440be6bd52baa3dad7baf4f5af48cd65dbd1091d03591a322adbe6534284107a01850c1b2290cb9b2c979a518e55bb9cbc0bb5815cc62db729e84244e8d23574dd85e8d245d1352e6bb142476054e8382a2e48c5341c6bc51799019cb8dc080094e6784bc53a4c05d1541ca31e4204890e6b30cf706c0bade5c96bfbd616082550a493f1f94598cf5545c68caa3652680782a716b4189782d66ec9a5287e35c76c8caa460cee9c82cbfb0865e34313c6d2f937220dd57e6312876842a3ad17187460b8390a2752853a92fe262414cf677a7324ce63d7b983d7e847eca33a720b8512edd6f20b5fdc196aa01ab049e7fa6673a8bdedd0732c2d754f1a9d2bcd4271068dff5f0c9497c25531bbf3b5e758f9db509bbdfd0874e376e1e8f60e21c9c6d4d4397d2e2001a2fb84d59915591cca9be99b7e7920ba5ff9fc9c3201c8f0a775cd91040452fbb8d92bf74ef469b9ab361e00197427b35ef8e6035641b8bea77f5abc77649469598e4deb3458537a28876c9c6dd369fb81878cae2436771f8dfdecc7f7e23ebeb2a360692f860dfbd17f1466c3d14fa99879537d334aaf622b6a7a82daf0c37aef36bdeca4ff0a5335d53883baa45f2be7d342a373eb61a0b3d84b9297a9cac643884c398bd0c7ea645ce097de589057a88c0be8c08f49bf5c1c7554a43f5189d60ed49c12030fb7e4a3563621d453c2791ed3137add191c6a72b091c1323ff3d8d899f09ec5d9fb15bc2964c7e8f76de93fcd7eabfe71fc9fb85f81ef25ed534faf06a78d609569ee0f026cfe5fc7208238b6e3cd197ba217c4da3ed2f5407af1923d172292c456c640b10819a3e3286e923cafbd2b8d1072bef183e4b8cc42781c1ae12ffe83f87f2d7ac636db6e51412136caae4563ea5eb47261f55b6b1c58cef7b1744718c699d1acc0be61ecda18e47298b988495b785ffefdcaacdaad207b6833ef67e18bc28c32b5b3767295e2827bc2ef713fd8bdced73e4ba29881770054ae909fb993db56b63af88ebf520b085b2507aa4dd4c87c5b9f26f0ee281317dba6ad4ffad83aa2b345b1a3057b16be3bdecacecff0c396358c4c96bd240c08bd77aec748bcf33decd8b3ff675f5ced2b7fda4996bb4079774781a4ca0cb75b3353786e2dec9fb4b2a10e2448d9f16263ff32be0acdb18a7dc0206ebbd0a7a2fbbca4d21dbe05acbdc9299436639faf57ad728b566159643df0e4b8886831e33833f1bca9437c2a2e82950a1fee0eb38040ee5c832a26af03b3da1433c02453688cfa0f977e3c599ae2c674258e4da33755bebf83d693188acd1b863798906ea159702166217000661ae0d336b1842a0522ba08ca7e8532c5b598b511b2b6ccba89a88cb405dd9e4f0e550e7e17aee3839643397861635a91a5cd22ee3584f041887921605fdeca9501cd513381603b2846d5114e93c3d550f85b50bb36e6161933c34b73f5c65aed297a7bc5208dcb016597961ce99a54fcfac136ae81644990eb764435bb5dfe8a76bbc831cf2d9863b5dd2eaa7d364cda888c22b20be3c90c17a3d08b2790f12802b7e0b7a25c3ce8450a4c254597d0061176728bb3822b39faeb0c4799116f7bce0c090ec195549a7777154aed2b4df3415158d9b54cb6bbfea441c9b900b0675385d177d2aae6e49e597189400a94a07ce6c4a9ef54bec2d0a4ade5b07db344e28f61937bd3eb44417f27532e24b0fdb41a519a7e1c5eb1681b99f065bd2dae9edbc8c7d71d6e6f11521b0ec3e10f9b35b1adfd70c5149ddd5fa37abc412f91225fe50c61ffcaa857cd105351962c14fae245b9942fc512f1c4c1cec3805dffea236f4e3c81d0e5bcfb4b5e848bc52450b5099a6478837fbe09a0ca8d274570b930fe44177404e9357b22804017dc7e1a60ef0cf3a418cb4fc04f3850d0fdf546e87454be49e46dcacd043147f0af891fb59813d3bab327f448967213ffc8191c37f826125fe890889c106772c88cc4b71b42676f64f83776e26509e5048bf99ee0438334e504bd3313134ce8d14d034422ea2ae5a6c18885481db6eef8f36308281284bf1a43276f9c1f16914fb249f4d2e51363a1f78b049b10f02ec1df4668ea0341f74c851b114cce8db46f392418c405e0913d7c05269e20e54bb1e381001293012f06fc6b04a0ccb2e9066909620edc3f719f32a8823ff45184ce14eadadb47222572c246e1a5203dd1bda51374cf00917a4f3a03ff8143445faef439a57c0dc25e82092d86f7dd827b90ad010c303aa4bb0428572c843807c7eb7f5b3084984328be651519135620cbaf1054587c3bde8539d82feb9f045707f17eaf062c23097ac437e4334237b43456ddf19268a8de0e9596ebe6e71f06e818c87fd5e6944caf8891ad4aefa1d6fc0fa8991c4c8471accbbce8fed271a4e3103a5bf355f694216708d55b5a4a1af0a2a605f34dbe1cc0a29f862f3c98223c7a5ea4db5d9358f2ebfb0327fd53a0d06693a7fcd3b1d1a78ff18f60dc4e26f2b0f8199ac6482039bbbe4f2c8598a4fea455fa94faf3689c72f8a634ec4c3e435e6a8d8b1f98d8eaf514b5c8cf0b159e4daf401a238812034d644786aa54199d770a0b7d4f355d318b516a0a7336b03a2f5e0d8f4b3b3d20a287da98bca3add289f9b0635c657d01a9866f6ae6414470e1a92bc247bfa6964d38d0bb5d60858e55347c67a76cfb7e3f5c02b3b87d3ba427592ac51c85b5240dbd0f92b2cf4273ab6c8ff1edf3cd0d23ceafb9ebc1307186977eef8b31b4649f284e0d51b53863d145c0d1d020abf49cef4f49b43ec8620c51da0c0452c00b31987861ef32f41c4e8d6287246fe2f5b4d2f57f3e51ea6724b6f89d7c7329792c0755b8a1980951219472ab4d8fcf12f140905f39250aba0ef101c6714054bf5510cceb9cae00fbdb5f24168eea8c2667e16739ceb0fd996aa88ac2f17aad8152e6b402d699b8162250fc4c0838bc612ce609daa01247629081c1326357f1713cd2d9e45b3c92a293d5d0ab740251fdad5a173f837bb7eb435e44ea7213ecacff8d14513d08f37aa8afd6009aaae0c85da92f6ace9f641b94294a4d0bc6b1aa46c0f373126474bd2d03d8e7b9b7fd601380c87e351d368fd4882146fd06489d2dd18cfa663d28886f7f49141dbd55f9ecef64a05488d7cfe1c899ce44d42fad4ccb2e12ebbf2f526d109d1e77f2fef74339ffb261d36729396df661b25cf44304a7bfc81e9892c224e189c069da45365c9966abe8b00228699aebe74446aeeff77e81105723887940de3990a23f383c58e2784d68f8871c90d43a2e03f77030083e9a6e0f0470c4186c103a31cd427be5b80a8316386c59d8001b88e40a69fd3b6bdd1e639481512ec1a10e3f2289fce648ca26e210689f1f48420887cd99fd0cdd022bfd0f9e4419dc1a8590357d80a444c832e099b3e2b3d10e20bba8d9324847b34c80d50478675354dabe433ba8b298c31ffe8059f25c6aac6acdea9e11f54371d73d21817f6c699afd3b4fa0f473476c30648434e39d8159b1518fc8ce9dc3572c2aa1651f786e4e8efe81eba7f44077fb113b9cf9bacb9c4dc0620f745b9c10069cfe00f9b7feba58fc806dae02c819243e58f9f165a4865248708318b6fb0103225c806b1088aada03eca72ec04d4a55ff8d08bc2360dbcc1f367860572d72ea3fc682a546acab578bffc0b031cbef15b7beea751062806a1b0007b078369dc95dfbb0d5632cfe0386c9588ae160fafc9200397f8801577d50e8f17d54087110dfbfce3522e5733fa53ef96f29821a7fb81f6ca0e8a8cdfe61fd1cd7071cea0af841d3a326526bc6399cce161111007a1c346c0eb006676300b00dff8e7fc004977038de93392aeb31ba25c2e132898fa5028d7a8bf183272a2dd670a69a7f05e987269077c0919b640b730c7f464485db111b1ad2a2c4f9f4834174b5ec61717f88ca2613ab6bd0c546d390a7c1657dc493c05816eac8abdea7d3b600fb0c44d5db23f652557673c706805744a7d6ec4f63161e279c3772bf24153f8f8e3b0e5b8674bc56bb9f1f1ca31c127c4695c5160245180fb810e4691b82a1e2452c7249d03c3ffca4740557730c10bf7af8d0811e9088c19531175c77fcf331b56ce0136ad9f2e93828711433b375bad54a1aa2d36aba2ece0c1942b50bf62133716b2557b88f8580f93ef6dbcac187906179df65a28be3964d175a5c6a038a0c5f975a309a514d8b016d064300769c1dd6eadad48fc022cc4eec8d78213a8913a35d076a8e55e231bb025954413456dd7f3bf55500240c7d4b1b1f6985a519b0f6a8567f2348ced5268e942c486970a89999dd84104288442eadecde01fd080609950937abeb665f9fa94bcb7c20d389828621ece18b165c418229e47441480ac21914808113831a2a5ac082245213f8118330b4d045133e80410a1e4278f8e2155199f6d73eedbab22b8c2d8fa8fa55cdf6da2e7efdcb09da90bbbe74e407721f5d0ea19dfb10a18f38fdd991feacb6a16bd742fadfdcb557bd7292dce5a95efbe823fad1ad56699a5ec5711c37bf5d24da718118615adc43d7a6847176cf5afe302c147a0cc73dc4697a4489e07070d76442d7f40af7c170a1430ec3b44a7b48cbcc6b3b0405969ae430113b2342b2c81a2a596ec56eb324626b58b6d7225781ee9a9e495500ffbbdc55da39efdaaf568564400f7d2615b91de4de81e30215463b17d2acf9cd6eec1aa6bf1ca36b8f195d0b9d2562690f1da6aead693be4a91ec705e4a9fe831189b48f42fa13953f2bcada478f099da459a2873ed2ac1c9548afe89789aa995d79c95de5aea2e7f469d76ffa7657ed2a7a4d755378a2bee2f29357449bb9645783784dbb3e5355b3aedb5ffd51ab3f96a6afdbc764d959f6fa933de41d13158fe5fa883d568d699878135590c056b372e659f6d7af66dd67d7aaab3f69afc2f4278fe97aec31f51876d6f6fa18ecdc39cdd28e65d7b46dab988d3d7695d5dfbcfd754cabaefd7595bd0e53f5577ff3baaeecfaa40e221569604abb88c427c8537cb4d189369225b4e3e30db4916d18e3b1cf6cf92426325bec4bb6240950c40627da44abe14449bd8a37d166a2e205b1192ab925685045a3924552ba65f9935bfea4fe72d0cfc768c7340bbbf6a95939ac797a98d2585ab8fece96ed75cb6a55410253483fc4f6c1503d4fe79c496521282495a88a9232de50efe352510166e55c4cbb7cc5aea2ffecb1d363bf5a35f5777d1e3bbd4afb7cad1a16b55a230e95880d3756d22e935dd378a22a961d729ab65a856959e9e7a1cfe505940a68fdc0a9f9966dfd5849c9d7e0d48944d156cd4a6afe074ec9d38f8ca01126f417a9e1f084a00d28eaf121e2e168df481e74fc6efac4225ce018215d66d3b95c725026f9964d8e73e9a19cc383e89ff7511689dedd13fdf344e700a4413b107f08b1e9352de2e0049182a78a9f27e0ec08e9f12162eb11223f5efcd45a2b91d9128144204422102211480452b3208ed87f372e1175608033834d230e4eed519f3de2206b76e4ec23f75d0de3895e334cabc57dbe057a2acb3c8448d907d375a39b324c59cd84bea475b4489d26d13a84b4cb489f4e5a26a75e2674a965e443d4feca9312b08c38dc1daa67cd77efae9aef5eb54a3ef4171939ec9b64f121fb753a7335ed03107467af5fc59d459b7db0877b6babb8edcbf4e17adc32b3e4499f9995a392fac348fabb971f9df561fab357a9beab3fab73cc931e233ffa3cc99e04479bc808a21c431994234ff49928daed10d978e64a90135483b025e7fa8f9b9aad1a97942ca5e42925634beb874b0abfe6a6beaf2e05d4dc14fe8adb107f05ba51e392c25f89a884b087135f84a1c1a1b1a174d6d3c79aedf431c86c29991e6d4c1e79aaa0e901cdcbf92e4b8e9b9cf4bec1140576540072016661d35873044e143e52d0dc34114467e72222595678c7e7093e12efcc961f248a9ede9d4d7f8034e8b53ab22b8220479b284444d1cbdcfaf1148c065875f100ab38824d69686e8f7b4d671a664e790dccec0b679856cbe4de5ba56fd7220db4d17197b93b96e3771df89ffeeebfc3940ed0b97f8fe1fe7567cd738fe9fefdd32c994b6eca2437c9a497b2e89a6749177df42d7b87a37bf683e1b8ee5b86292d9a324c5d386a8926d12e240d676b0427aa25d2a7892a751a94bfebde610ae7eef831dc3d8d7577783f1f0e883bf6c8133d8e28449ee853d8e35221286870912b3d2968970f791f40dc5d0f44695b784578c3759b27a4b16d780fbb1cba2d5554708f5dc73d3693d2813dd39fa557ddd3f922352c85ddeb2a410ee64ed4055590c0ac1c7b16bdb2dd90c371ab55f39ad5222344bb23477fafa2bffab3aaf9cfeaecf72cedd863eeb76f9a956959feaec35486294cc389baf2d7a1caa57d803ed7116c7655c03cac5f611589d2b1669e66ac59998f40ea6b6c429eead4b5d6479c18049f7bccbcd42cf9794eb37254f2933523876f34127d2291d9c2d2c2587f59dcdf5fa406e791ce9ebc3e56d26bc9eb65cd6c31798d45768d3fbbcaadca24e449de7c3025391e70eece65d363e4605a43cce30f21cffd84e4a46b23fee07104b1250221a26a68afe214a13845a69182c49802c35b2302d81299107d6a7c208deae3e37a0e3d2e7a411ff75fe603d36a954ef256c9498f3fb13e16992df2f59108b47177add527e5079e112736016d68af8f31802df10710555f4f845deb6bad4ff981657dfcaea3fba7e3915dafc3f4f83351f52128f00783b943eecbb466e56467cd63cd92e772cce3abe6f133ad92e7bee551e825d9bb468285ee65d049b93b04bdfb07833177528629b86f869b84c38e349c2891ded10a6938eb5b200d270aebfa96a775b43aadc344d5737a038166aac44f6857db3ea35d855dfb752dfba66564667efae356cf430b02fbf6988c95a3d29e6d6765c752d8cd3075e5ad1eab3dd4efa887a9d7512f7b15f6f95d67dd5ffab33ac73c76d53cf6ebac9c4babe6b15ffdc2c2f4ac31a57204969146caeb0acde4a5c36b3ce467e655dde7a596297dea2fca98bcbb7816d1a18f3df451873eeed06b7085e1102c7e36bc62c321589c606b736369c54e7ff79f0a665e83a68f9284d8893da3d34723b345741a7d480f414167cee101a65adf4d9719a634b975f9bb964d8f1c8e2fc74caa3b0f33a94ecbcca4647254a677ffaeaac0157c764090eab44c05aee0b34393325de698d262c9490eb9ef7ea6470ebbdfbd42240b4cc2155358416dc43ff4d80bc97235f1c363b6c424289549248135805e6483e3e3bf4b0a8263a809389ef3813d871ed87380f1293f30dd3e28f5f15d0df3995e8f6598568bf492b74627b9f665949bf2c94df27c294b9d4d1f7d429b3eeec85f22b1c8aad41de5aaee285a26e75e66befbd52aed275a467eb9bb296b37c93055ca30a5559822c93045ca3035ca3025fa606c49f64e92b79332fe2873cf72e8a20cbacd3cc054ab85efbdc57d7bcd8fa901a706460823a5c1b45a43689856cba3ef748bd32f1345dfdaf4ca278a86a030a9c800c7797910cd68a64a4f06f650fe3e26de6a16f6f8ab59392a162cfd830157f6c89ed922e3f5d24716992dfaf5f267b6a8bc7ed2cc16001ce52b4964258dec5a67cdaef30879aad306e5a6cbd84e4e4c47315d468ea9efb329329ef218fd4fb3bceba7e8b3f0656c875c4797d08181a4c10c340d07d2a8d247f64e7f5cccf20892883cd5cf2c911051f554366157d90369d4879a60add6fec58bb0e7c1b3546e80f1bdc7d74beeba66b798a3143db27f9c8641390f3085f2981e30ad1aaef24d7f39f0655c8777fd3b5bbedb707bcd725f0e1008140ad97038be1ca57f5795fe69991ced32f8a56b5a25ba0d5ac6bb08e732c9f900c87f0d39c655f2c9351919a65262fc24a75ce7eff0fb60504c00c83055438629950c5332324ce90c53598e1bbb595f4b9a181a4e542b45c3598fa2eb5b273afe7c3a1699a87a938e3eb67e2779abd502bd74d25badd0452f39c824479cd9227a15e5d344d5fa924c92759448a7513eed2aed419fc7d93bbd0aa43f7b91a73f2bc2077d166b49e4b3a2c7e08b342b7450484b9096462e3e79ba864c6630693204af4b75dd76d063bc779ad5ddf3406779df36d0268a911781360e04d29f060281fefd45721f7602da4a26d1c80473c7720e96f7790d7fa2832287237be4342b0706f434a4646652a09fe498fa3236cadc478fd91ed2aceedb479a956198adc7f4a78940f71f76eec3be5dbeea1e302d93979ee9ef5ec73c771df2dbb1fc5d9d83fb54618d0b715db77d3022502c21218d44a10e84618acbf35b96ef30137ca0afc78f22bdfac0161de615e4599d562b2b971d22799ee7d1733c88b20ff0d5835b48f415de21d157a51d0a1d8a34097a791577bd0633a53948159322a61883401844f1e1af5fbf9aa6359aeb218410c2cf4dcaa393e4f992bc45af99de835c8ed13d910733be97f143f82310a69ec484e4601feae9b50f6cf87b5aadec95cbbe5663d7b497d53ef000b30fd7a98ddbbd3ed4fb70d9bc8a0d8874be4c0cee4b8aa4606214fa459a357a8c8b468f7196e89f3005125d3f6674199a158395a38af1d159bfe831e6173d26c6473a87e87fcce831628c51089b2a048918c43ef2c17544bc39890a1cf202c3386769c3e86b73cec79b29e393e413e5b3e4337f9666ca344dd284134e2dc334525121b9ca4b2a24979172141d392cc6a8cd39e79c73460d9b734e0cc3b039e79c7062775e64a391c009678c3a07b8af0634fd22454f796b7494431e515ed12ea3910cad72191f9d54b40cfd6997815da43f6d0504dd7487b9b91831d15f2696b76da351affe6197f1d145595ff418191aced1b5168948f9e4397f7f363d462eb9969261ca848792946c72942c32b9e82f72d7fcc1944a24393bd19fd661a2e65b2d936e99e8926e956897899af324ba3451f32f920427bca8051856ac560d0d34387b8278a210a861f6574a0e07f6afd668235b486ca6988773ce3967d5b01ec932a7c0c49e3fc15560cf416e8cdbc1005bfebb6a8fd006be76096d80b6afe6d64ea18dd0b9afaeadd5ad7d6545a14c210deca02cb187bdc3b06fb3046960a37cb3a801f537cb470dc4b525bc9be678a8324333589acca05d2a39d83bc8fb256febbeba6b1b777ca857405cdb3be89a97b79521e0d0577487becdad37706d1f40f77e857e890eb5e61d5e5f9d6c0f6fef269085cad36c29ddf37e674bc9bd6b35e7303aad59ee92fcd5cb979c247f557f39e6491e235ff27992d1719e7b947bc430369ed464c31ca49732498ea5f922bd0c3acca08be0412765d87d77ce6ebf0eca387f5f8fb829dc5e865b24058eef329725a491b3bae131bbe1ef05319617156aad2cc0dfdd46f0e30f776de3324cf5609fecdc63b46f9a6371cff417214e109b1b2db3c10962730306fe2c366ff2187993666597379167699fa7263726719fd87bb79a8ecd8de93b3c3d263615e53423299de2f85861432446ded3ac2d661edfe61cf3589ec57d5ecb79ccf6ec383e4ccb26cf7470d7e251724c45eec3748bf491cd4d133a5314116213448a1d9e1e6ba4a708164566cf6c9101a3078c9e4d2f65c0b87587111f1fa6ad8d0dd6a3fe9a9c0798328169b5483eba297ff7a6c39449d66ef298ec26cdda9edd44b372549bfeee4d2e9f9dc5e9edf32a13fd61ff6e76f94d7f98a6f4dfd55ff6188dd33e3bd049b287334c55d0b68d3e182dee5286a97a897428b964bad4e5124c69f25bebb6a2cd44a128c80a8f7a9efe2e8c4b3ca251c76d9a9761f1070c9d2339602af41c1ef0475e06bdcbd8f3401efee8d2f82a9b9668e6674bc4f13cd975f9629e1e9d1d1bd10690063d8d3788a14cea48eeb3dd357a9d461b40143dc57468747462122df2d4de808e0fb9cf6a180f26a45bd9b97961cfdedace25117190355a26e7baccbc87b58c7cf717a9cdd05cc3be65e75632cc44f5305134af600e67e7d863ad831b7428e7419af57d7e2c944b5dc4880f11e953c4880f91b8bda6b391b2d332292797b288111f223fc9fbbc88119f4ffb268948fd6171c738287ff629ffdee5cf6a904e1f9bbfd3133139a59735206aa294a39452508c83a6fc4d37c1a68c71311f0cf32182c50f18201bd9f231e2c5114983d908aa01d9808e00d9c418639c628a1a3ac51437480c52ff61d2c7c77e3925b3bacba36456ca517e925927ffbee59879d0b59c631ef42cc7c877a792fb300d33e535bd557293a76494cc9a07fd24e7a8bacb7f9905f221026dcc4d2935792f65d14b323e974927c923d143aff98301812e12fd48ef10b57cb0d6a1830be702c219cd60126406dbc1d7cfc7d44ffd89b27f911603da046652f432c0e80177f080363af8058c50043ba6e2796438f04894c2888e91a8c92812318e943008c66922e2c0523c845f41985affc56079eee021875801bd88345408b26fa684251f6c29afdf4c07315171478e35f147023045b5119d3b33e50583fe7a4c3cd42cf8c8822ff8e637f597831e5e75a86572a656c547fd4d9978aabf39939a977799f29fd205945215235cf4743f48f5b7838fd8c4a61a088a8550610246c78b0e25253081b357a5bdb2e3e9e5293899b0d9f1271127b5823f7b477a47b0a308f66adb2dd719a0c303246a6ea95fe429dee50a8c37e462110f48b7230db7638b3f681b7210b8178880dc5403816dc839609eea68c5954158a80302914715855029361975e4099e07dabcaeab5e578d39ee79884d786dce3b3fe7fcea538bf19a578c33ce38e3cc74aed0a0ce8e9f74ce9803bcba70f68503bfba6ee484775e37b3e54ac5396178a4d261811e240b961d7ec70f3c240b7778208290912ca143d1e1e89074485272f81d3ede489693c347987218e3f0318864f9613ed4878f52481693437a883a0cc0a1000e1fe163159285c6e1000e6f385c397cb442b2d8704880c3ebf00018c952faa9060314e0abef03d470992d2d2c04c82af074ba0df92a1658c927efe1865c3ab9c000f2a8b48346c63fcc38d970e2b16bb84004e064c32908d4c986930d353c1e0099d6a0a2a10c93be509c4c261d4cf24a8d07e83c630526e7133ccd50b5e4124499ce924f3af0f5089e4ca61d9b3e7231348627d3e88794bc611e28f96e409c646a0ae2cb109e4c26872613bd92d9f9a414802470fc6a740178ba8ceceb8624f7004fd7435824912d004fd74145704659073c5dc756347180ac430d8fdb8112096280ec0251d70b90214475b0676647946b70dc0ed84587505ed96a3c009467682b30389fb2192a2fab60271d7b1e53b100974fee7bd872c99e5c60544b3bb28c2f6c458696b0d64a51852ea0903101df212930828604c6806087c075e706f8ea5c1ce01be4fe604c090d0b5c57a0832b0aaa15be00e40c5f686161c0160d591270688b6d092cb4600ad91070b6042e8ca00101df0d8778810acd0a6c371ce2851d2fe8542f6c5ea02902e38211cd0b20b727db8209ac163e18154850bb7073b918820a2e2347ac0e4a9045901364f1c3040ab4b8292205467686705144178e4c14bc5b1c49c32644109a2c30de7088133f603881856cc7092858c10921645738214555021e6d38c4099c5aaface172037e0b9f1990200c4d9b2351688224969eecb84d96b44c62d74af939b50e3e5ad64bd2295de68c134a49ea02f0850655a29c74442fd145e75543d582ecc517f3eccb44e11e2c832fd067432299c669dbb6711ad7659d8779f85e746290bde80485aaf480e088e9bc42a2eba25334a223d2bce8249148d8035b3ee14b97aefaa293845412afbdf6bae8bce82c2195e0b5d7e27fb6bcfc90075e23752f90467c2942630c5abcb6c41ffccc867a15773cbd284c8d13a695ce73801e44696864961b523df509cb1929af09ee95a718e5ac9f7a35e79c53df8982aff994ce4b860e8ebf6106d0fa402a2785d75e10b5d7bee6a6327d2bbcc7728d4bea3ecbad1a9714762dd3260685b66cb45dcb7138e6b96e4e128610c28b864a23ecce39e9a4934e92c92ca1d742223013057fd5a02748634e3a29a574d249a1d64a5b10fbb6fe66dbc3b499a6ade780ad56577d228934afaeebc22bbda7a95e96d4c4a5975e6aeb15845e5baf2794d0346dbbe8b5f57ae2463ae98df2ce39e913975e6aeb15845e5baf27ea652fad970d72d57ad927e8add713975e6aeb15845e5baf27c42027a5d5621896d9da838e0c07378a1ac096ec52f3883bd892c7f683553f9aa66d17de188f8d3dda6f5c3cc5b1d45a7ac3715c375f5c5c5cee553d09035f43b6449b169b1b425602d83f25bb2f8a4304126f90f53c62cde9bf805c561eb1e6d291e727d6781e87e3dee372907b1e6fdae1caa58d3617c48147bc411ecac0cab82351118798036f90efa901a421af3d758c02d290bf2148147883d0c6b5f7466cce2b455bb81b0830dc828a0ca312d5cab997ff8153d967f61f38857d1e4b96280a1dce6c66fa93d1e42f32fb9cf35a2c71205209ee4846318acee59049cec9b073397b29478ee38e71190e1ff59f3c4c652088d59c57bc2e79c928638c71ce39a7bdee9cf49fcce47c9cc7e6bc337297d4305867f395354992b95fa9fa2269a690c3e171c7dd41879c0ee1eca2839661c43f9c0f280f96371007a1c883ab842bb63428dc215be4205342e489316a71c5d64eb5671c0eedeeec188723c3b430c1c67e391c98e5705c3a846db308c2b6af1c0e7b69cb5e6dfb4ac0beb210c20811f6758a894441c65ecd8037f6dd82cf9e5c90c19e5c48c39e5d78c29eb30b65d802cd9e375b8b581898e796e167d3d3df2ba0b029bdbd4418a2852836a5af578b2d0b3918c0a643b2a005ec046d9934315399117fec558d1b14422c36a547c426aab057310a241cd9f4f417977e5a41c3a67779d101e60a23d8f43a7ae8c1a6dfc143c8a60fe20a26d02ca1e60a21b0f98173052e8214e1d16981648143b0b0854d630f8cc058075b5e62dc050faec0a92ea6130056d86c27c06fe5645a87b78bff03a7bad3d36e643a363936390bdf14510ea96853fc93c77447d12c93773f31797796e998461a69a4a6e3c798bcc3373da6bbc9480c380b1caf792f7925a0efa1d2c80a1b222739076594f141b94b49f19ef2508a7794929c8120705e756408c3a6d7b4b861dba66d1a26310cc32266354fcbd10848831e3b4167c3824d1f69a4596643210fbff456f7924c5b41f989cbb5a71c45c35a49cbf20a880d4b39b778c4339cbf0cafeec6220dce464e7e50b09fe86f7bca51dea5a0e86f3bcabb9f60c7fadbf497e3e4f83128dd4ff05f6606c6c65d04e6c6f42a6e4cf758007673455270a49b40d74a19a644201c0a792f49959090462210f6608aa39824e1d0eb7d037703a51db513ad1f5e1e49143d2e51c9d2c2f16ee2bed9b9c1e1787a7c4c37f1e4db4b27bde4418860715324e397f2e8337dcb9ce771f76ef2b89f944c3d687cc0346c0acdb06996591e3f2b08c2821b186cfa78739359537d96615a2d929bbc457ae9dadc628e43401a47fc6815b1e95b90c6a5a67fd761d2ac1cecac79ef9f8613a583d32cf9ed7167a2e86f963b04058ef46eee26577137e17eb56af49296911ffd457ae7f27693ccbd9447f3de55f3de31ad92df3eb7a685ae711dc7719eb77dc48d442110f6f4cb44ad6cfada7dace44c20e5a73cebfbbc82e8ecd0d868343435104339e950ae14ce2bd901451d9e2a687a24e904a650cee5ee11638cbba7e498f232cb74d2419995a3329d74d67792ef924eb26bb2d68a558c8b1d2e767ee022b358479365d7300d8382a281995d7bc0b44a2f39c975c893aea57c2685923facbb0abf3bf64ecbe4605ac53d45cb98cefde433294dc3342d33e9ec44205147cb30bc438fa7902c571318673fd1329ffeb0cf9370efb48c497f98feaece314f72953ce9f2a473afb65e23510854c25ec7d14c54ab8888cefa151e49543d9e2d5407314bb5255b5e2f235be8e7a314b2656a1b5f4f73ebc74a8abe06d36af3ddd7e69d1e3f66ded378c23044d9845877bd6402b471335bbc974680a7106608ed95ec8959d062d7fa8ca58541959326524a1819524594524252d2a4919452824026071d0564722d6e3a839e9243976172955246b9289b5ce5cb6c441b7420b6c41be8c0233af088b558a6a30ea4512fb2c1f241401bf7f51c802df208d8912b7dc07cc71ee201a664fccb2dfd94cb4b181414130d532a99e4883351f528d96a5ddf2a794abd8cdc4ab949343d25b74807dd24b74a1e9246648ff4813688d45a034370c20a32a4eca77dc81e54a279459eec71765999e1054ec14c94fd953faa754859d8631f77ec238e7d0c02533557bf7d88ebdca5d7bcdcc344d977358c601e6716d91a0a4e9482c73e566167cdb6d65a6bed9c35f66a62db4e479eec5f643c62db93bac0f341cc964e7ff4dd61ca9ec76cf1b6778fd9de7167d56f8fe1debdd3acebdc11b225e2d847ab57775b7bcdc405ceac5691277aef6e233ed8f173da5c5283c2a7833bd58ba43fcc820d7ec0e026270c653822d4853078010d477040e40b8ab91da64ade45fef2272f34eedffdb43494fe9e52ba7df7f0d65a5930640a57f448c13383548d3636d188fa0f0a6c836111ecfa036ddcc363950551f55206d2a83f1102ee997508ac02da98bbd62dec5aaf80c2aebf7250bfa8bf185e59236eac25ab63bca054bcf79b96c9b95ab5ddd332dcb7cb74f11ad7e5bd05f7ee2bc8e59954976752f0de7f52eac896183e71270aa94e08419023110b2af66ae39cd0a2c25ec59d5aabccaea5912c2b08463d2259a0135a6048967b825d2f97bf7b972e7f57fb5071ef7cf000539fa8fa1e3cc094f64ecbc8946652f32b977998d2beb980616a3b4c5119c9029d20441176ed3257df8a417010e004b6893bb385c7d2d89a7ac43b7e9195eb323d97bdfc4581b35ac190a7fa2c4b9c6311590369d4d723d006ac5fc096eed58260d7ac1ed9b5d31ad3abbb8a3d31c3590fb7d4b12ac520c01698aab7de4caf30a657a57aefb5bfd75a9c4b8a6ea0419528f0a783bb0f4695a5f616b0decab4764c944419c1ab4805153c910a385de00eb06a8a21a59452d0246d18ab30bb30efc518c693665202bc2a9524cb6afb499cf341cc9b6b66dec893bcae1eab6fa378a7fcbcd1202cf263c5968fd0c6b58dfcf4ecc8e1d8467e4ab023b441b7911f20ec086dcc6de42767c78be3018a41072df0c21842800521782105212a421b711bf9b19795d65a68e9b471eb62165f6c47a21045036881092360b085125841848a9e22499c000462c0f9a204dacd486621026708021a7630c4901c1021899d1f1c0143128828030e8e50911d81849ac184084bd0e2094610210934e820878b18bce00948804113864ec8111a6e1ee164c3215d80610b9f96991364f153861a1b248290020610f9c20812d00081e78713231fd8706d90b0090311459860051262d0050c74963085163610528622b432aca0bb26a0c2dd465b174a48c3cb90051c4f6ad470b9f1824b9864c3215d54015f44e8204fb5c6084738a20233f84021f3e20c341883144ac800c81448ba88718bd00b88c20a5fc8a2082668c10512941082186460c50c7c308531e888c630045309565fb8c119b6c00152869d511521a9051b9418e20a42dc5ce1838417359e172ab8740464a0c29409e17384204f20020d3b2a3facf8c11658104184119061089010322081ba403e800384128461070a5afc80573043088cc88289224ce1092facb079a185c925c11524631043954e10e2851226362226386e1303184a861083266217432200361cd285135d2441e2026b74cefb22471b0ee9a266afee6e02c38b361cf28531ecd5bd9bc462db34d21e854038c6df792d5efb15ddf2c6d8295b9b1b9651b646372c9fec6f6b75c3b2696b76c3b2c9d6ee86e5d2d6b00dcb255bcb362c936c4ddbb04cdadab66179b4356ec372686bdd8665d0d6bc0dcb786b78c3b2b735d086e56e6ba10dcbdcd6441b96b7ad8d362c6b5b236d58ceb646b26119db5ac986e5bbb5d28665bb35930dcb756ba60dcbd7d6be0dcb746b271b96e7d650362ccbada56c31505262fcfa686f79bfaa7be420daf497dee19b7a2052134c196f9a1197b6937a096f9853671b62d1ca11d553b443d8db67e2965ed775ab1f6315ae1b5c8bf72a07bc7bf0d8d7f7b5784f4a5f5536d53fa86c284f33b20630ea8ce58942781523e0d5b6e9489e288d7a244ff487f873422fba7fa0515401d2882ca0f252fa604f39e79c73ce39a7ea003e38fe00463840153038825774d3fb65d8e3ceabefae3efbb8b1bddadf75926d63bfc82cb2007e0179e44987ac29e9e015dd13428d336c9bf717b660bf7a456f75cd2b950db7bb577425936113b25c17a5f033218841b3e54ebcc7235bbc88061c39af4706f8e260f8d5f57a0eb0bd4b0a18deeba15e8f64815b4eaabd1e48c3ebd9f2d0eb8136600c1a1a650b54281658dea0248b70c365e29c489f15214ef20b2f3766e0526322b1dd2033547e521a9d8e8cb09ca2c68c93ca4f4678bb7402b92ff84969843715225081d2cb524aaf8b527b5da5aff858122cc184baddadd6aa4411945e96527a5d94daebc2a393252a17b28cd62ccb28cdb24ae94f2e45a4a818638cb1e7799ee779b5eb3a25b6c8325ab32ca334cb2aa5b874aa46b28cd62ccb28cdb24ae96985c716e1397969fbe874c2275c3af1d42d507a594ae975516aafeb86102a8accd82bdbe844c5c505bb6017979f5c6c50bf0a75b7ab5ded6ad7711cc7711c57b7ad564b2bdd6ab5b4564b6ba5d4da4a2ba5d6da4aa9666b96654af020cb68cdb28cd22cab94964e5494e0398247e5625c2a9dd2cb524aaf8b527b5d2a2a2ab874a2b2048f1155dbb8ce2b618c31c69ee7799ee7d9aeeb3c23945e96527a5d94daebbaca8c257a3063c68c3be3ce285d6586fd4196d19a6519a55956293dcda861b930da7075b3af32edab6dfbaae356a1aeebbaaee3388ee338ce6edbb60417371d6419ad5996519a659552979e2b0297192f3c3c3c3c3ca7151e7b4584424affe9b4b2e2c2002157c81572855c2157c88a10971b50c81502a597a5945e17a5f6ba566adc58e202f1d1630281adb5945a4bb39be95aaba5b5d65a2dadb4da4aa9b5b6526a6dadf88a820655e0def0c6defa81b3b77e3c158219c68f95544e8cb4d6bac57be966376bed76e9adb6daedd6de4b6fb576d3348dd2aabd564a2fb51aa555cbacbd97de6aadb5d9a5d766b53ed65a6bacb5566b312a638d1b4a194b5c8c042aa76d748267cbca0a5ec12b5f99b6881bb854fa4fa79515972ca335cb324ab3ac527ae3c68d7be3deb8374e2b7b7563a5c60d1394b68f4e272b2a3368d421a2e47b760f863d11f6ac6c17d843f3e3e4625cca325ab32ca334cb2aa52727f7045f57b5af7a757d758265b4522ca3b5625846abb5b6d26aadb595521b6b1671c6af6a5c8c4ba5c7c802e5e94e54bc945e9cbd8fafb15a38e5ad1c8e1a11257f2ffe5ed588a7d5699fb81c66ecaa571487fb95dcf630e280ddea55fdaac6bdd9a5f7b2d7cd7eefbdf45ed6de0c421af7d16e40ee206936d53d6618616c7af9817d3dfac01ca08511c65ec9507a2a33af28e1bc34ce17f922a1d5022c62059127c8934f153d4278e02f94c22548133849404a730068703c0582de06488d3cb5e4a9ae946864e0e705048f1f765ca0070bd0a9439ee0495800218410420821dc21c61b643c7184943622102c179d3ee40642ca7803c481521a81905b4a4a6984f106f8c905ed4a16083d88e52f4ae927d451473d2509a494524a29a594524a29a5bc4e3a5401c0e1039f16a8042b5bc98a542aa5660600000008006316003020100c074402b12ccbb33453dc0314801277944c6a549c4aa324495214648c01c61040080100000308102846201b0050b7b852d72d16177ccbcfa856c15a7ebe85802eb1b02341cf1e049cf7f3672e4be7c9b0bd6964c41612f4b2287008832d7b10a111cfd06f9ea0f52d3a4a881fd4141bbcbfacdd972747f6cb88a5b6c94312fe119987fac4954f087dc82213fe4f5ab7745c5cface1b1ca0b5859f8c8a006c5cbb0cee25c59a71c35f1e43ed0cadce7cadc3a5ccd398718b857cd21e717c73ea1a88ff4a8622bea4b4cb1ab99e5497d2467eb9f219b7c091b9610d788749fd63b9b8a2e717a9b1396e25612c80968fbed8dab93d3c333233dae7e65d223a888d30edc2e86ed380d319cc1e512e82221b70bdb08b343d380a3758d10ac63da7852b0c8c63828ee864416e96fe8b1cfd1e0d0029858f2795107b54f4574bbd70df3bd6e1ecf6865555495b3d3dc4694a04920b0da3443239046790a4c6d5f6fbbb256a5c2c9a8714dca363dbb343326116196daa5711eaab1adae2fe2f4e8baeb3d949ae14b520e58e1514cfa0c256b7a45144c6df748c099e54c8fd3f1b2c2d8be5e9d36dba4f39ec1af2ce261e38bccf6dfa71ad3145b4a1db464bb36a8a9ce2dae10f3da954adab68fac30478a2aab7eaec988edfb7717e901459f70fd64a331447fb6d5085f325b821ed7bd4dc9d2ddfec0b0f9752e9e5ed7d1f995e99639c6769f3513270d8df9275be234634a068736063fed4d514d86abed2715991cfbee53268ef6715c7ad7081ee33c652370becbbe7cb257ab21dbffd50a4900cc757839fb608f8db99d54eb9c62d8a4ebea53fc283489adc1ec857176d13cfd87a10618abac8797dccd5cce09124bf5459ccb3874840747139152298637adacac766de6b374a1b6ad6e31086ea7040254e84dbf8bc65b4f43c1ed17434c8f036bbe928e4be9450406ffa74d965841b56519296d3be92b0c300d6395170eadafb3038d3c834a29b787f46a7be16750ff002502642c09db0fb019710820056f3be0806dd70c76b0d5f69a8624e25a96097f5370e7dcb4a3b6f32e829c38737d3524d6cd374650f5523c0ca06a0f1a6465be77e65f8dd2513f1db100b7a2384e1db683f234d48948057533d2b70e1e43900c52660781d6cfa4ac2f730b030bbd35fc457ca312fe4d71b7a6df2083d4fad4e4b4e40e355f74b0fe8e6cf911d18446430a543202f1506f9d745585ce61b9dd8b0d3826dd4b8482d438353b2c51d700d49104d099f1c79c96c026cc71482d75e5694a5d55d6f8656f10c8f9523a1d75196617ef8e3fd3b36ceb3cbc88bbd3d7853db93e80d1d8e4273ceae154f6994a73dcab374aeb1e4083ee8094e64a252d95ab77183b9a07d1013c269abdbe1c559dc58febd61858e1797d1611d79e1aa5c2e3cce1f88936ae906ca5ee7ee219dcd3b81cee22ede8a56cca33c84aa3acdf25bebb049a4ae80c1e02ee7d108cc0ee125dcdd2338a4d2a6acdbc43fc460b2bfe5fe695452edc56b8d0abb9cf2fd61aa8029c5cbd36fd2612f663e45f742862f1034b7703a8e30c856f362d5332f0865d837a9b15054e61ccd4d83a4b5fc481b0167ecfdf5565e8ed3458b5038824a643d10c8136d2e9b04f019b7be0dad3904aa91df9a2771f36d79c2c80720df310fd8a3d644e4f149a5a040f882c782001de590cea0cdfbd966c24aa7e52494278fc8b474571ed2c612101ea3355e70ad3c1c8fe43f4498f69cd9d021f29c2abd1bb503f55b79c53f62704496b7b58e31b5bcdf15df302eec6ab2ce30a7ed5d39692200790cb068da0dce889855f168796e469662456d512dd326d3cf528fa850955828717904ee467ec8df6f8d5ac5b80bc8aa472bc9851740bc67ae7f1826fb8314a0cbe952b93eee394d095bf2b7e87f60d472a10880eacdc91655719b8f724e89b6149edc772e1d2624e040f8f6b5bbee5195a9911b2811d17d8b51fa21e6bf17b44190eaadf2a4a6033d8243e2669a0401ce2bc80ce6ea55de4dc0e07cd3e3e0823cd6d25b58b63ea1eefafc7945d335fb424ab283591d0cfe735604162bc9d211a7a39079af1296043ac1bdf9cc4c4752dc14203bc496a55b92114d00c7e39d2c5e440989667fb7205c3dfbf2963780d589947a7156983151973014ab66abd25569ce83f8206aa4f385626611fa4174470ae6a434a650cbd8c555c680be0fe160f0d7e1dfb64098c406bb130c9ede8c95c9e02ecbffc2715e56206d5c305046c2a43adaa5b258002c5906d3a97a380f61d2b631d0c59b4f70152e506e636daece96079386beb66a588b70daa24bb6952fc41e88e02315a198265d62040f392e6a1023a98cf396b2cbb09fe0bb51615cf4c5043a6a9827d3d6d10e347411a2810b44f8dd7fb4b372362216af60cca3d149d476d969015372f6822eb7cc4b260a59f392d95fe8a9a0c523cfac8cd5028dbc6bfc4d2c28d84b62f2e1c52f59e2936e9c503f497694dcbd04ffaf9d6850cc2b34ab286a5e691f233a24f6c4097eab88123d11ab904c101c9cda5372cad2d2587510dc30dec82f1045814780b70a2e3993cb9e9426c86ead45d740ec1e505188947a695054bc5227c8e9c88db6d40932617c906126f66c74b26152a8f414e0ba13df14af5122c5499964e88cbbc37e6478c10799e6d48f4d40f1ad9faebe170704bcdba79ec0e0268c83fc5b9cb86212eae97aa14005c808a11260c817358089cfdc63d7032a5b87cbfdc2325111ac31b5bc6fe41bfa478b3c2993c9c7e71f51a5a8c878422f85a58b4482a07811b2d7bfa0f26fd9949719e85313d23548e5a2806dd4b12aebc00be1bbdddfdf0f9eda963f97d0cd4035036c15816dec3e77fe8bd679af4e020eee550cae59325509205247ddecf70226ce1c146efecd700f354f996aeff0701f11005259a1ef83ec38a8ad069da0ccf4eb0209911f694977101c8d08bb883ccd5f4f44e1efc83eee81bbd53af1b718d0d450ffee29bbcbfb7a34be6d9c850e52be61e1ebf002e422fd85d840fb6163c8e1ec1e4ff0ce5c14a08e16363e0e0d9ccd5131ef3490a8f7587ba978824fb0fd0f7d9151f99b23496155bcd65860ce7dd7dcfe62283879b5cd585abf65d0849964e90874f02853ef295c7a30c7c2314a06aa591f49899da98b190b71474355d53c33fce1cd83e5f595ef928f4b8ff204f3ef6eba78b17e23024d984465ef2481980183f04ddaa73c105537a2f3ba39e5506532141b7d5bc025bee691cc45a9b87f469fba82543354c895dcbb372eb91b3a4d0f83a886b1605b61293621fa7d19291a255806b6ebbc24ba681f5ff9d28120411621791ef2350a36ccc8e013ebe6b9f31e872b605e8e4e03ba1e21fc76b8373764bd4829fe60071beff0282006116bfcf5daa6bc8d0106db4ff38944d924c9cf93b2100b21ceaf2023c7724397a36bc8a41affdbb802b94ece0668c412eef9c183daa15aa4c67657c19814c0e00c5bd622d2563a195188b09410421c95459488cc86430a2f46d451241ae6f69deac8b64ea811182d4900504b9cdea7c9f49cc601d396452274648b19433de94eb3bf04a52437b25458608930397b8fa6c94cea80dfb0941987ab4060cb2a9d5bc8505556943e2a51680bab128f0d8d2a2ad2be8a50aefe7b657f86c95566530abe8c37640decedb79c4263e53abb2fb9a614c3df6892148ff6ac84135a684b1b63184746894c1a1f215ea0474b187e4c296a61b706739733fc80ac093b2cca1f5aa4e9104791988a7cc6e993370eae80ba85af50b732434f55eedee8e4e0c0bc9fd4833238cc4cf01d92bea433aff78cf20e03379516cd1cca4472cd79b9ce0cd64a43231128cf69809ac06d3a85a10c5364d0df063909c5c056504f67b8edc23d45a44484cf08235363af02a201cdb66df592c5b248a5b3b391aa0c103f862c04671a434c230a36748d15e4ee333aab7ee8fd1dd4095fdc1a9fe698c3b548a788f5e7998e475afc90dab515ff6dc43a7ade910292d23cbeb931ba134fa90b64ecb4f7da6d5d969946f4be1cbfa79f2690cfdc4ecbad2a0e63753d9d0116511a9a36fe21eb04b7745e3e1a365d2afd7df4abda62012a3adce91ddd2454b51b32b233174f6b2fef3496e4fd60937ada2a6321951ed7a93fd1073e8d1b2f36f0c32ec6ea2de80807f2d23e1624160f612b2db7c823f3733ebe1f4d30dbd4e53d9fa9338f6d306eed71981556a5d31a41a3af9ba4edc25b1a52a00a8c63e3f58a4ad3c835decbd7c05b4bc13b012d13808f6f843d4df99a0150e82f6bd54c1761058d91a8697e37a61e70ea2e4d46e1e6282d04fe09dcaa94b1e7e5d65467e6a761a50374b8fa00f70714755e5082e132a906ef117b62389c1afaca726878b25a855d7af1effaaa7d0de5d1ea324b9cc7b0b97446735c43a5a94d534a406b90d534cfd71968e0d8bf7fbe0da013be04049df76e1ff61c330871b1d2452e83caafab43f1d04a4fca113a0b17ff1495ae2502e08950009e91a5e1089ca2a75f6e68987c569a811ed3144ca4639f177c74c38c618e570c8802208d4eae27cbdf4d4bd95207850e5b10ed579fb27214a6f62edf353b0e52e9b277f2fbb3c6b6d7bc1dfa78e127076e18269ec2002e6c52b637c662de88f79b73aafaa0984fd5314fd81a5b65f3a7b032f4775646ff6e2b830fe21d50c4fb81e32966664ab0d73512c940b5abaca0addd3edba0b4601c5304710bb881f63f69c741a83c464ca074713bae89218807952ee712ca9fdc6315b73a997829421c276b0a0d6628206c1aa0a12871b880e2a60aa7c9771c80301ac7cdbb377b46b6cebc39c1a378d27f39c702d18dfe317b2ea76ab033b60806f39367de12004aacba460ff7faed70dc96e7d0b03fa8020dbec7655639407c7460b661c6e92c482df2474f1f6f1074c11fbdfa1893d56aeaeae5b7af1a5eb20941910f9d026a30fff075ee6c429181697d40ac0a7cd1e3f0bdf561cf0606100354b2808b67fe72ed156d5b9917cf683686767220ee324b0ed305f81db51403e153d66fe6b484c3caaa87d7eb792f9c7bb0c8f8986b39f8386a677392abcd7525e103d3ebf121a0987c1c81311f4da4b85ee11c100d9415f47ad0fa9c3850cca2c4807cd889ee83b9abd8900b2c6c58a4d6e4681259834e93d5ff08674bf9291bf94a96a1ec6e7c7e43ae0139c918c4aa6a411989801b7198c0a0f3fef6c19e73061013f45213ca08123637455787dcf189fa91de7a0176317fd66e7bf4bbcdb0dfb736aecad21cd07814fde5624d81f7a79d6602ae8b2947138897ed048b04dfc108dc5919126ff72da714e5a1c4b4d3b05bf1fbd0635b57025ba7cdd9fdb0b2356218f43a60e7a4310be511237885f04e1de503f95ffc97573ae19ab1421348565c4da4cd9d63db1c689d8cc18a74fab59a0cc5a8ce0afa6262f771df288d294920fc74c1b6c5cceb5808040206bff9ab42d656c3945ef735e1880745dfc65ca3baf552b7730468005e37227c881a4b9f94b1c9ca709e536f58d654ecff336dc011cd89b5b94d07ad8f83edb9c6beeea9ba2410034374094925c67310812f0f2bc02370c1247b57e6dc2b7edd2b2b67b957729273861f487c7d001d164967f07eb93132abfe7ae6fe2ec16341c2adf3d27f0a045228962c5f4364192203b79b245c91da88b01a76c873d2bb43d10d1a7eeeabd86f4e28aacad56ae22419288870955c05025384c2585a99d10a5dcf24247a416ebd4d08e32abf19409113238563aac693f44b7b0d114430b31d1a495ac1b33d336ce60dc702045ed277c38d637089879886b7e2d10f5d5a564d2ff3f0c8d5105e3cdc23118a44d538fe32274a9c0586a0c82c81ea5e7ad76e766ed03ee1a53c56795f9aca30d43542462ed4620f951a165dfa11266ea93a3d96cd1818017ee69ef44ddb9e959c7b0705de269d5abfada1dd324effa2ab1b923d51ac9f75eae2a6a3d24b0b0bbffe3d012e82ed36e14cb2d12d0f92fad567038bf3e213189a4b6064322b21007eba61d632c76b06202cf823ba8d07c280345d0ed8b47b0444279c2c32e0ac40df5dad54e1fb0b546f9ac17d76637a73066b494e80b9eb89e3353a03cd8767b4bdcd1e370f3214d214ea8822aea093857dcb50e39c1b3f55807aee18820ba897d4696e0500519f7f4563a3b9e71e10eea54aaa23fab48faf22d5643ca1c9f58a3deaf31beb33af26acc45a1d3daae05abbaf8d1b289ec445fb27bc2371f123f7b6269441263c9b10003f1d106399e33403a66089faa79b4d43b1dce4fbbfdce34238db88c963be6707f71cd98b8ac373320770150fa91e6226863c00c972026650cf8310f4c526257cb7e0ce3f10a4dc7b6cdd6921c5ac5e0ba35d5aadbfef3c001346d8329658f9d086277afb18398846276069d1455a1a971a25634700da92b9f53cb99e0fafb84822e0fa2280fdc7c6d306febe80552a853d947e50ddd678306ea68e23ea754e235ef129b714a8ac8fd3451976085eac15a1ccd364286156be90ac86aa7623c56641404ce4b512d78dae2337b25dac83c9f7146957a7b5ea72f60e6ec8a13dbc7c57fc03dd94dbb901b38353339c33fe15d1e9d0be03e4988681eee433471797e3842cbd3c3c972392e90cccadf9b96e0d013a8227754ecef510f9ff77850e8826b5c4162c25f6b73f3e381914b185a63db7bc1314e53f27e7894e4e19c0f89936b0cd778b1ed5234c8e8827c6321bf35489c5fa7bf4c861e83f0d0b7f10e067d7ded8d922a5461fbb8f0eda43a8a1865a34a150924c478201d513d5b0588ba15f8f85539b3df889231f42c72bc24082669938080ad221fc51cc59a681881fe694f8c07be2dbbbf4f1d50c5eccfb1ef9ee4cd4f8abe862c07340ad49f3dab86c04e301426919ea8eccf78519355a183e46f8dff68a0b1d42d2533878877c4d3077643238617c8a6c836290ce36c4949b03fa4e5889d3d05373565afdf77b9394af52386e3d024546a7b14c85f48a14865e0462923ea509d183d6a06fe52b4d0e40e57ed33f07836862dbfe738eafbb625597e923d034c11a9395a0c8047163430ec44be8c87a77af9f7a42fcdb893d730a58ff6605ab1d449894d13762bfbd1c74bdb1f72feb34d3b477147010e0dda67a6ec75ffc5c20f76286e553addafd7d8c0f73994b9fcff0a16453f056e6c1ca5c659a626db5078420dbed190c92684985d0b174a80a553efe92a181273071cc06709c23dddfcddaac2721adaaa3fe221944470064c7ee6d37ca4abf19108b6ed3dcee7805226ba3cc7ed8b74abd6371ddd466d2843924d80d4364b575233c12731a4472afbe3b0675a32c13d7a97ab832fc5184db35c9597c3d9ad255215ff493dc0723692632bfbf78aba2c96b15c1859ba587a27e9c54409338a2436bba9f131594054f0963b88e98a28ea889320110c4d7398d44a6618dc93b1bda8b48ab35cdfe014d4eab9bd4559456575420bb97609eca4b88347848fab34a161a27bc3c031e7a0f75a05b381e1d7a2d8fe8ff67a0a3cf20c32bb307e26dd4881de0912ef24c39d05028dccfd09c3c0319909c415aebcf1bc64aa415fe6911cdaa409f5e1dfe9268e3f9e1a3c6db9db661d298ec3ff258fcda44bb751a90e5690723e83a8274888d424d7e9fe66b6e6ef7558f1553bbc4a2e1d25086465f6d2ce9a17b09d47342ce5c06b8f5b11b0d405adcba565ae5f8be0ddd0f25499e9c06fba34eebd3a7f40f72812011391814aefa023053a2fcb0c1b1545743b1ee85a61195da35429b949d72590b2b4a817e53a3408f667d966cfce1047785e61bed858788e2287cdc1ed8be1f934ac2af88c52bf4a332915fe4e87f62f456ce84c6620308283e22fda0c7a54db219c00b33128bc288cf8f476ab6acaafc2598321389ad6bd9345ad13209ea9c1ca60fc47eaa46d8bea5e773fd248008ce5e0e8023fea4555379515ea4441de46b970600a8a2053fa2e54fbe188e9e198e938ba359f9284a3c1892c514b078f886b72537fc6a08b066b412880dcb13271c80e8a99bcd334e3d912a737198394ab662e98e1c85ee6e725a0e80d5dbfb5a07c58c08fd2b2fb93251b824424295eb621d63a7517416b41739aaa0338718d7c348d3a7f444f226f121e0e510c48e8265c7516ae18be42518d0789d87251caa2b885e00bbc9235c719f778cbe806b20bf61be44353fe1b0c840d440d4deeda23966910e236ec0dd4b8ed5f9f559844a6bb0a0be492aac6901fa27a9d2b416a45f1154a61a16d467095ee92d1a1644d8339e8110f8c5087648c6ab8fb748fb1c2385c39b84fdeb144703a5ff984b71dafa3ad012b80f26893621b6384ce4368b9a101aa38b2e4e6c16878377eeea41e7fcc824b559340aaf238e0e2e03412319b93a66963a57242a9cee5d8fa8428ad89d657ee9353c01d79098dd7a84283c58105573498a85feb194a5121975f2357be6c88bbb2c9738d487008d67fc387b39b378cc058944e1d7503090e18349f027e60fe8b5b1b9997b018e6cc1f18a8f5602f1d4f4a9c02c8bff57fede1d2720dba9d1c3fd8d3b5c1cdaae47ffa7fbc707088a5e22a748aa05c64a82995080fe7d16d90f90719d880e7781f9fc57378cbb0eb74e75541caea003f78fdd7102d25e1fc8cfcf78bbc39672556eaff0a059cb12c86213a3d12f7ee8b937e0b2c328d8705fb3be73f5e0a690a29857b00c467630dafefd6f8b7bbb8d9472ef3e9911cd2bdca0c6fca3f33ec46b0da293623b06b43f2411708f1afbc8885eab26389d6807037a1363cfb154902b9d9503b758a36810599ad81e329592d9757292d1b09ce6140499ee208d070357fb8c8a1ded74d9796118681e490d288627065a8724039acd5303dd73c94e0e282c86186fd7239cf65e1ba34383861b255d8b4d5be0d5b2a27fa5407be942c9ac50a9fa2a2411ed749502da1f0c146e415e8d86f89795320ef24a350a3adf83e017259c35a260316ab8792218683e9774ba9fc2c688e9767af0de90c5dc63c11dc4060aa7eb050dd1b13c5a61b2280aec65cc941354c5565080bc71c75b1d3f5225573c76195e8778dd8485e7af210c612c18a8696d350d844fb81f0eed8978f4b04124b18d8596c4954e9dd994f490f2c86846cd2d6ef1b04d55bb17f9576401de5c1ac68ced9b197eacf88cc77a709cdc014a39064c370304199ae3c026f63aa2a5416f9a23b4517407c1850ad9a2242cec0ea8cdd4b32179cecc60526677689ac72be21d9095a1888d7359d2899a98029da5f25abed78d370dca24a1c32b2fa30b4dd37a5b25c28eb4386e26126b65e76a8c28b54363cae90e703878d2c8d134980cb8d8511f82020714a7ca4bb8c3f4680fbb2054f46b9302253f50848450b97fab682db48dc60571cc1978eab65b18a6c642d45f21252ea9c7f96d06c2db32cceb31621fd41d2a32ca0f5a33a48157c963501dba54eb331a67df940a15be7b4f283be5812a60a47e43c3211c4d91232343e125caea5136f80eacb30abbe899382b96a1c06a9a7988774b4b2af892c458f111310fef1a88a4c2ddddd583de6795f665826fbf77c20a74277d14ba90bdeb450742a76ffb04adf837a43b70ba376f4e167f63226b48538b68a9cb4d7ba799ca44ca33283e3d0a28f6cbd8ea691ba7d630d62d03657c0d286d47dbb8cb0241167af49d89762c78712d0668f96a51a43a46828c9bec1eb6faee4ec250e1136884ec85d3ddea12c25524290c94a222af68ef1d29dee19954147c62937b13911b67c5844c25e7dde4a81473ec9c424ca3ac24849d3c2a09001930a5e38838b54b363ae2e85f2175a73a618fec399104a81cb2ce43212808fcaa66c3352fa971a73d18bc458d02c784b48399c0c706b875285091369b7cb72b2dd34b29379ac7df70c069628e042fe5427ec4a69ce248e88d00537d17a22313bf8281b52b42d33d76fa5918da989367b06082169b1a0515e890cf7d95e5e6df1cdbce7e6810997218ea75ebd22e121c40b12e3314f5b8c9b2cf603099e5a7f4d2dd303b6228fe76b1f39cb866081b4c008829fb6464d314e49cc3f9e0dc82b7bb71e5982e7103f6797cc99457087941abe703fd597a8d28de0beb28d63fa5a39001800d0c1e0382df853734a658c2a48d02177e82f10f93c47f2aeb41338075d529f93d7eea5420d7b00215bed716a9cb242c90e7167fcd7ce0890ad46dc37d0ad8fdac14a2d5941d3fd9f5f49f194efb005d390f2d98f93095c42e71e1c6f78186c48a02e660b617b4de049f0bef68ec58de91f567b86c2749d07a438e776c46e07364ba2ef7b86d4568860900db054defc3e78a37d4f87b20ff8690144fd5f3e1d91d2aee2a1f5802dca4eaa067af74f7eeea8211be87d6d5e0f3542df45e961c21880347963322b4178bb0963dc7120a2a6985705ddfc473b248ca17e43c7d19c7308d77fcb4d07e41ce934fdf9058fa4809d908725f1c2f3487565a291acceabcedd91003d93d3e5f28a6047a0a11922dbfd0900a8a2fa1129209f571197e8e24570029df4a01fa764f8ba01b01f5f152a29025b90fae0295c2e736b5efa5fc6d680b979818ea948407ec26be939cfc8edd596ca2df7c5c8e5648bb9b8e606f21655fb95a5f73d4924fccd54fde6e9fc82a3a7892e5b613462247d27514a1b0adf2e9ae7903265d88659707a9c44a788af13afa90c8af8229214e5a846a1560d208739725cbe61975620e23e29dbcaaa8393ff4f5ed4a6fcbfe2c555b9d26a6e14e6b7f49058532a8212548237805f464a71227a7b246532b49b5cddc4b384b6081954f6ddbb3c4a6ce21a6d7b9b45696919104dc20cefa9ea303275aebe6fe4280916f177b34197499a06bea35c194e11b0d44e5b9a39b06a710fcd9b3ed9d8ce4ce8a7556cc29786f5a34e8c10f0ea9b0b645b0204916c5fe0214d3dbaf500e6dc3027e92a99d90775dd92d644551294f56d203eb720f79eb559e16aa152f228133506c4b117c8dd749018ff8c60b90e0017f33aa436401e88f37c327e99f18f23da94f4b5ff952eadaf9317fd109367b2b4a0839c18c78018b20091b6cda5a92749e8a95c457b7e7d2916b161c9fb1b1b615dda027a621e054137d34a967a4599bf0b0724cc4be1634e7d84c9e12a202336462db2b28ea3936d694d6263c63322add833e0c0af5493e33030d14f177f3606b5f9516a20d6ee81e514cb2fe167d26d41112a3c9c066ee24c941062abd3433dee00dea29df0fe7a1802ad618656c1bd620d846206b5c39fbb416a009ebfe5cc1c0827106bb8bd84bbf9361ece1be6646d5e6d611af53c5ead1c36ab39294b21e7c6fa997f90a61178540200cd6e8d90b8a0bc12bdf1b6a836d2f88310c90bc2f7020c952f9280d0823a6652791241b81b80d44b289b8732fd348ff8e7802f41d40a61fb54ccb0477a469905fb4a7b648fb7d34164e99e3a99a97758a68a6ffab18e2f035c6a8673c509e443c5a936cb69367503cbbee25a40440b6328fc3e59e6225a8573568b4d5c887c59b421e8490eabc94b296af4a57ae49255a113ab9c8a3862c8c1b8099d0494bead9243b6e68f73c01563a42053d8bd156b79b64b10c0c99803c224d5dd3dc44111312d2b0ce7d7b02d6536b4a2a754b13f85ea60092c49f77cf61dbf575c6d249207b16c40653b4c9356a82e5c83f280c25a6a94db17fd58a0ddeab41c3dd9d3acd0e6b0d12efea746f428548c363fc5c1350b377e0b3beb2356b71260dc09d510d67d7f3d8cb4780dddcaad5024a3813e3ba064d4db33ae9cc44e87d64d72cebe0595753f0afb50f95647fe89a6b1c188e2ffe55ed6752322482062735217f1a89a8f63775c14495225b6793078b689ca4c1eb8fdf774510fff6ae73b0b5d015477b2a3d3117b09d8a1065d34ba2f29a80c28a901e945e0e0200c4d2c1a8e77adc1b01fa30ad0511b0c9dcb9a8be73b7d6d48c29d92ffeb37861a33f21a0a918f30753cb4b345b1ed6973959dc221a62ef1351cdd614b341927b156123ee3592bd97307d210b43b3705819435656d50b05cb0775eae1811466d5969c45456a746d108906f6d284302d5f0545fdb4d2db695f9ec36869f460df2e5a16d71a3424539a1c0ad05c723bec9e79077876878fd7772cc71b39e4cfa88ed33aa1cd4fe4f4fc2aeebd61c0bc8a0ed08c7eeeeb3add9c29ab60cab2a082da1e03514d66c91fc552f8d3e3a6435f859dee669e05c493cb606b442b77d0789d7f017f6ccb4028a1a5399cf9b364075df598517db7c00aae86cce9ebea1b98c6e22785cc05cf3ba0a9f173d90be48aaab52ba39fb0c2e99c4875bb8e3de09a6e4de7750cbbcb4882f25b333cb30ce2eb77971f920c2dd5ce287cfb0d87ed24aeff2f939b21a391080a0b8bac2be0097a38f88f644c1e8c8336ea6856ee682c7e91cd0aa37b1d497834aa5f08fcb13ded80ba92aac9c2908b37c28e6854446b80201b7f2d345ba02cae439fc1299889fbbc36007ce4a5197da56e31b231dd83a018d17de98b376bad8c4fc11b03fd0b1d46042449d4c300f25a7025a1f16f57f8e8eabf9a2cfe45dadb4d01ea02922be7255e81aa43d841f2cf78a98c6640069fb277ba7356a7a0484826f8f06c203983f441c72f1b2266cdb23f0b8ae1bafc17822f6f8d8b49d6d3c79173a4666f81b6795cf08c0dcf5c2cbf86dc0c35418e1d89d28bab89570387015951c980f75e1dbc7ecd9bc3bcfd5d5a8b6829bd40d0c56662ede50176a1008f207aa6d5e635073193aa5e3f711807986c079769157ce4f9b414bc372d3a94f8ecdb905e1d7fc4d6cf0087f39870304157e500b45a10c2c558af2c1ac24db5b0c4a38aa6cf4687cafe8dc00c7ea27ee2f9b51bd04605612234cff7521d68a3b4aea721a6075ca3c527998218e04414ca1338d810498836054d712d542ca80e803887828de80da8871fa41ce4e88da259229a68a5916986b242d7f0d8a22822b3d744b42a8c19b68c1528f1054517b9552b42f5fd4fc0bee98144a7c2af66cde7979acd6339285cddcfa44ec52de3d60a39bedc2f983b0466f6f7df732b38943c9ac966a1e3f5eb332eca2a3a3e1725158826fb5f2bb1f10c7beec06b02aa2aa41eede949828535ab8feafed71b48342e9b8765564b41b96b7f2682df90cbe60fb7e572361102834892fb6ffd1d32308137c8361ae67a37d562c193942e1bc66dc6496940a62739c76138656a13344aab3ebc3b7725868f0bd2fa4f86d3bfb6cc08d47ed39f6af9b804454f79f72fb1960eceeb032767113b77ccc4400a2bd1acbfbedb7c9eced1c564a5ccc5ea24f649690f0656cb0a63a8f81ca2618335acd7cd8fa20ea11b49dcc5350fab6e201ffda2343e11e82a4bc085aa30f4df112b962963fef6cde1bf71c7cebd6d487c84f23d15854db0017ac4e4eedc43c50d8313e5b150021fd10df19d14c2bd1199a0486f7c8057499139438dd905d40cd73d85787c591db77159c45dac3175e21de763183de2016ac0aab4498596b0b06131f81b47a3613f0cd9488731df9f8c313a6a5e37fd76bc7d13e0bd0ac93df335432be0bc6e70e19781a082ff5be3c22a5a6625594cbcb9ac65fda84afbec1d8fde25968446b6ecf6b86010cda390d2919c053edf82e594477bbe79547911082e6b6f85821fd1421ad0986dc7738d8656fc0376860d1a9c42b4ddf7d232f2dbe96dbf515ba971f7d41a538fba46e24dda489e0fcea5338f73d61bb07ca8bbadae77ed2687e672852c6245f6ed771fe78dd8382eee84fa9717fb6444bd6a7852658e62a84d327976173c0c9f8782da56121ace03b6e3f5039bb0b56cb1759af688ac0c8aff1982abfe31ac403c1fefa0789c2991fd81d3de958936f2885652063c282791a1dd7cdc367a611de5dab895ed17736510c2d9da22b6d408bf1b57f12ee33c35da73ed341b3562aa9635a699438558e33d24aa3ae2138ad05252c5a434250f1f3a25f2bb93804e621202b0f443d38ba7edcd4ee523aad4300768bc44e81299802f0b9bf6eaad0d50a84900352e604b4f131178663ea7dc06873b9159d8708277c4b71feb9e9b7c4af1886a8beaf42191c799b2df4c155a16f259220369e56c79423816887c5b3cd070ccb4eef9e4f5a67a04c833436012195c830665f14cc626c3eaa5c6b9229e34e04cea8613c9dc8f075a97fa70d5c8f02f3bc333edca3fc10c7c5c6ea57c0961cce55868010c7ec03cdff29950af9243c47b6cc34a3a0ff2d295f4dd251d101f6dcb7497860e4404767e62e97cbb2426449ace2f0b2d33bd4a7fb7c0aaa615c7bb8561baed4ce10f8c382951db1ea75066c23a2c32b2e23c1b8cba0773eb029e0164f04dc306dfd605514879db322bbd1701156dfae9b10936ed01b59f236485fd932c4772db79de0e8ad10923bae9b704fcba9555d30a7812151a61adc8a9114cd26df665db09adcd4f7dc73edae10ff70015f6e27685fe60b6f13b5b2a6963757b83530140791c93b81b41f593633d2d608af5dc449f27692d3276192a9c652b252116b4fded9a2f4b79739aa96176a0069f22195066560a8d6d4cd55a93012373c8f7855c94f1acc057b952e03906960a876a3025b0154ae460de9c1bcd6c4e096cf86f6e32b0aaa146113fe10680bd7c070e2fa5031294a6b82a93c4db2fb53b7cd58bdb1b5d547115bc827d0647155ebd4ed4d1aa6916cb0121241f5b65122e36cd260b97f947a4a9a615bac3fc11ab88e122cebda67715d69cf3f8ba81b7ff3a800c96392692d310f91a322f908fa17f499e21ed23012ac0684c1b487b595a5d9e230daa49255cbdcc1da23e4cdd1e6df4bb57db00e99a24e28024a0c56c252d221010f2572d01ed9024b706c20544a9f58a0176a10a92a2fe179d3b5a6a0bb3f7e587ee420ec7c7c47b4df448aac1ec50ed7d54ecf341f1d52a4611312130a5da7d8c73ee028f2b0c9ffc2671877f7bd053f84201648c33b8ec85044fdcbeec08b47528072547065297a10c854176c4be04c70c6015ce82d55c9f66e880cdac5f50a4c2fcfb5666bf020c0c6ae59232c2562c05427465af3dc0927c05e0f107b9568a73db521accb012ae8e6d75be02763b361f42c5187eba614a70e364d8977267efd50a48642249021fe208b4df35dcf3a93a4550df09001a801f3f1dea62ce78083b9fc9f185f10ba6cfbdf2c9f9505680413eb5ef4ce63314b9c7a9735004a842603575920bf681303f2cc17b717cd766f7bd90726fda5d8752b50760f26b5b7530bdda43372f0d88eda9009af635800dddcf22b1578dc92b61ba8f80dac1b6edc337d125c0b813617dd856f30f31cd0840f299c490248bc0cf6b5bc0382d5881dec6928a41014b2d133b06c6638cc9a2d6eda4204ada02b63e0e5daddb70fe6ab4e5ac7d4a5cdb88e0b6f526e2c605aa7a09a784a992a90465c8fc8f2895b2b6e75840e2a1f1e19241cf4933442abc96f1ae6549c8a920d25682ced4a2f5f3f52f8614562a0485881203ea0fa428037dfcec2cc9ca5b861adf7853d8daa279d2329547f9d60c66bcd02aff3fa559705c6ee1daefa3582e5a0120151d3f75e4c0b4c5b9835c8a8031abc1a6de4e7975dc4c5903bc27297e739a64b25d4b5fe2eb126d18421dd8c4e301d18349f4ef6b8ff59806985079219176f185713c146ee0323af22ec506a0ac23880ea55c5519b495701e6481ae8c0ecd9ae7ad1a9b219cc61594556a406939a26e4a0cbce6df87d51b7d7df434d9cd6d023785705c7059c9cf84df60686a3e2b57f542b53c8349e382350b31f209b16cac9db278b1222d4b45b9f2ed9444483c90c461561783d9e480f95bf14b243e858572d02c13e9b8124832628a4e74350de0e1d88ea1da1e159358119e21aabab0ada80eecd4e6d850353267ab736caa8243551a580e5536550494a588c2d9e5e22215c148cab5f77bcef7f07ca23c3306d353c6784f094a6e28be1d4a495181d766347348c5052b92dc54c824095e1d89372c27ba1b185acc4d13973a9b0b37c81070ff7132598f40dadf6a80b679de6221a6f34a891bf395220c7d6b19e83a8927bc6f7cc51a28f02676b7b774d645384c4cf1d805000d9907cb1ceb02e843433707a86698f1d0430f8a1089ca82693b9b130d134f0cd778fb8b614ec634d281a66ad44b26e6d7b0f4af362828daa2daa43183a92070b49f18c48be047e53268ec851c7819904f30f2941340e59e67bf191a53c25cbdcdca56867d3c8d3acdebebd2940dcd6588b7273689019c696065c43567d90fc4fcb4c7172a8c50989074238e2ca7a6eb41610e29f0e0e49101cf39798dd89050315760b5e9b3872c1f48162f5bcf224f26eb978a5d23f9c07bc5a331308d1312b7fbc2434ac27cb3da76d1a3121626e7cd5a89fd4aaf6028cecb1aac29ea88c1e6fb00e1166551e3e537e160da039dea8d59bd4ec5847f5898176d28189811d289ae154fd655f1e1a2d3199bf9f2338cdafa8b9117abe48a3b7aa2fb9c2b4411ef334e2904085d30c67cb3d4a91b226d27566fb70761eeb67bcb3e9093a787ec9340d1ff88d0b48d1e8fa773923e623c2329ff4353d342d806a6779c722d933309b7af8f39f12c20ef0ca5c99edc7828777d031d511284eb63db00878a5b44f830a9fdbf377daa85fb369bed4e04de7455755d16a9eab2ab09e9ec8a85e6c214ea72359581b459103c16b77106e29febcf36317ea55ddc419572e62c4eddae1d537764adf8ecddbae0d72748614496e599f5022a71c12185014a461ca2ef0bf1613d4c8a484f9021e5d65a4bb1d2ad925c8e2b79adae5d30b6d810b51030d4dbaf1879e2bfe0e994ee2a4634eb7ba7cf8a917960863b9546ca2d292e8e3dc55afad1d1a8d6e9c644dd2149ba4f5f4ce772b28be474b23cd679312f99075f1175b4449bfed0fcd316bdd2a46ae7175357c422ecdfbbf28eb3fc24355e8251df72c725ae1574a3005c558dcb8d4aef1c84e9bcca9a2459122644e5951254adc68c63401563546ccf0d57e1b7bd17ade4f0a762b1484340055d48a2897b0d7241206d4e36aab645bbefdaa2c749b1076ba8b999a5600b86dad35ca209f33c5fa056058c40b1e3e2ef92a3a5b3286e845161452f45e9958a1282c4b86504fdaa08e5afa2b9126b9ae228995cc9b34f1f5ac5242e6a93f708931627531b3f3b99f63aec31a297d633660cbaaaa9d8c52746b25cb5a59009a96dd05d57811094d010fa78d72bc756735d189de8949bb7aa92902cd10427c03694838048aa6d95194a6488d85c05c0ffa01d0cf415956a6b91d6be4f341a4b81cf4dc31408c96f39e8bc3030f366096b61c0c092a4cc64026793c10a8ad33de854a2e08e0c49ec6d406a8441b69016d257a55dab12c951447e97db10dccdaf15c2ecc5e4b3a3ff058209822de356c91e287ea140fdca172419cbfe1a62bdb7d76c71ed00f6c5d46ef6e9775452752e847c1e74c697803d1c657cbb5a3ef9d61ce357707b91a4367eeca369dad96cba23370c4020a47c1b31837d117080aa1a7f7982d1e4ded0d2fac318dd9964b663c045bba76bfcd3d3a30436e1860193330a3689711ad8b118fd6b05d19162ce233fb307b5f0eb532ac480963e7046e2fdbeb721b0f59b3dfefb6ab4976bc06aa842f05762cd0994aac83438c98b2705ba4a437184a05935c0abb7a87de8dda06afcc7777fbc8f149c2f8a22f0e304a3bd73152c68f57de1af080757be4ec8a537d259879fb62d5145e65baafb0f1456c4880f5ac2812ed04164e09ead69b21f417e2be057ae91f1a1209ccfec2d0605a61db35131c580d9f8aa67f20b63b8531730d649934d65071bc58a1f682f1181c133c18cdffe758a17121e04da159f00603082a54249302930b8398cc693f06a067ef58adaba4334601d0d604e072586fc3313217bcb1bd32cf67fa07f622a135c5b1dc3b77506d10730001c2a7050bb28c38534173ccd310fbff1ecb963937fcca6ec5108cdc0e041ce76b4c0637d363eea7bd51ccf2449359598962bec8a422366aadeca0d9d0c15de42baff5e218de2de89a3ae3ab492f06a00b2b2b5e79fbe0c97ecf1d9ed7d05bd47669c82ccf8640327a82da323f596b48c7a02936c149a6b28140f95fa872d2bb7b847ba3c6eaea96ecc1f1b3afeefed9b67bd03379eaeef62338e032d55b00001b79b276fef90a5422bfe74d41915618d29a9f2e7ebc38c6aa79852a4d1e9e22b5ac1dbeb536b84cd0a7af9174714120bb7dcb4c51fe8b9893e3f50438eaf72043ec4da1e9fea120c15e5674206aad0d0668fe6dd5ff05473f06f4d1b36163bc2b56eed10429179903a7bdb81a5a7a3b5e80d6ed31a8fbce6b1bf778e2a0f9b98536a20990f4bbe9a4cb266de4c668a0f15e375431511f0b017cc151e440b039a77ae09c9c9c07741c78821b14404c06f12ec1016322b4b9b2b89f74297a614954608a3812032f95f179bf7ab0a08bbe1f4a23d885b6e7ca6471a8bd5bd381107a16650b4292c0c5d3a75f8db5f16da411843c2297f5b4318d0479baecf2d46fe9eeb6bfe7a35fd078fcc8c4550fe2e0e6487e9d5337bc5b8ed98c6b70ae596ea7d825e3fc3255bcbf26f7eeab742a66586b9c98c631d1be17e7599ba3d4557be9d1f1082f543632320c25ce93f4d6f0cf45da113488f1695416d9da844a64183bbc92827d88f45e5fb3d8f2b0070114be92278fb1464d6dc6e4112c0aca78c1e644115390415e717ef5826b5b6bed04e031753b98341d31d90113d2c8845309192208d34f61d98d883cd0be120f9e1617a611bf59b7440e0fdd628649469486c6d6dd92ea4f359e058413abe22ddb786632bb0ce6c64b2d8cb6dabf41c90831f820e90d173a000e6613b29b87573be08c1b7106b1e606558a308f3058c26d4604841f424c19b12f28031fe9b9572578e9951f5824ca5f209b13ccc425b537949e288cc556e7e0867009bca2d4fe41099d9b84f2f0fb72acbf934ba43965e48d11a6be396b313cd623802cb3c063062902e78188a88f1a826cf88458ebf2366f14fce55e29f6c65c33957e4b0b1d61df7af63f961ddcb6f3c03b06c428e2cb3bd3d0c07bd9314428edf3b9b00c91a64907dea7fd55028597ad1fc29d689a8f850d77e1471f0467e40bbdde529e9658f799147da6e7cb1d9e2e64263c57f4c1388d05068cea2a02316e776ecbbb02ece56f8b4539a45a0258bc9150e80d7e278b3bcb997ca2d8eff8f3852e2ab35462fe893ca4485dcb6e009d7edeca2ed0dd4655ebf496311f14be011988404e220f584b8cf88a493ea0e86a88c9b4dc636d67ef0f0df6e018d33fea8138c330f2ecf5a76a1a8daad65f654a04d62763071ad23766dac24ce70c46cb5d37f40a773045653b073b191b746f039555b2a91482a7d4bf44074cd051533a84a350921908fd61668f14e54d51838e6f8feee8ca560646c47e5c44fb408d0489aafaafbc06826ff1d37bc2f0d1a15f0cdbf2636b946c43f5d1a7826e756e46dd608f4b8714c223a94d0f305de34809bd3df540bf4eedc08720b97565ab2f4d41ca60cb19a1b21049db4578659f782802e0296995e609cf7fa347bf4118e368e9d85d9eb78acc5ec018b8057b1bc458544f5ecfb1adcd2432bcff35fad4e281cd6b4e5136b8a2178f88ee3a08389e3e07e7eda314dfcd1c1ec0016d332ecdf32eee6bce52efbe5078988441e40c0e148d00071e9f1fcb1f69ec1f185ec88e9158c38e49d67824b73834f820de70522901a2da668b9a51b3797a5c6a957eb78eccead487513f0581061923c2344af9eb78cd0930b898dcb6dfc2e6c22b19852f91678ee43bacda41daa0f72843bc3dfd448ae60185320055ab45511fb200373608ad970579689b34dc521f87ef664abe0242d8a9928c7a1dded451d110819ffb3d0a562bb14fbcfbf81f3df763a27caa87cbc4ab2aa007def6c023983219ef5169fdbd3fab9bcffdf0379b9ee4bb3029a9195454a18095d6049a071cea4fad3436209d59f524bc1cba881673535f00e55034fbf1a98eb27bd9916d0d5ff3d072993437de463c94a05b9f8d791a2df807210fd9e8f0c62a2a9528d4b6196c59052dd53cd89685a601caa5c5718e27741a0b63e2185ae93fb978ecfac0d70b5b27831c66269011f9d0889000810d5fffc30f90c219d0aee31e50c1d71706f7c801f7a1640903762299b6750cc00f44f53dcce7b55bcfae793ad18e758cb2c851a57b6b4d47bb433b935658de90d8ec4a5b4c88a4c9064e825356e64d82281d08045f6982448ba94d9c5be9d48a1a264642e0390da4c220605737f3ea9c71923a5c5eef13ef71baea0d742748267d40e95adc8f1ca65485713e59b2f12597a26e45591636ec7a32099f7c3687cd2844d5ede44f4e0a9809e16c6bc9c74f6fdb960655916491a900e7feb87716b4aa5c7a86723bc3f4f35a9fe8624cd9514b9ec3b63abb354e4068b368383c1febe80ea1c50d069aaabd3b7b935ef569542e14054db77baf3eff82da02af6041167fe3029b6f8a8ff22846d2b472a9c545e317304d65c2632ac66345b3dbfeff0a86ef8049ab4caced584a6010747904a6c09ce37cbef590187f5d941c9e0673ce4251fd58556109dc386cd528ceead6276acf025c148acfd69807cd991cd07f2b9b3dc28b6e6194a7b0bf00b2756d5445f8a9324fe31394334a2c8dbee834a7faca54c5c68e9df4668a97b326f4309ff79e9a646cf6405983cda08108d00c10056084ce11602bd4e45c7511a43a0a363b2af34f44e6b3199028a62bb1f061da705ce4c8ace6e302f2b58f02c7a1e5888b91dd4668af5a1bac79030980b3fd38f933ffbea14a5f48dfd48a28745a763295a0c8eb67dce8acd28791576522609ed80c1073340d4db19c862e0ea2433c484188dede6242cab41ac63d596d25150c9383c0198cf16e8050f7a6bfe4353bb8c6c1d48464cbfa3963aa9ec46686024ae661c03855bda041e14d1aeefa624da4c917d650a64a9c094a3ac18038efc2acb71a0c6f3ebddcaf66b16a64ab121e322e412185de21ec3b2bc94b73167d6912f02fbc5ccd1d6c0692a9ed119b1cb1640887d0e16c85a18daa7cf7ba197fd201ce738aea4ea07bce80d44542092d154c6e6b2a1b972fc81950a62653e4f978b03f48a41814e59955f13c05e523fc50a0a9f9aec5120f99d88f7e1152e9dfda32c0663d5db7602c0035e7500554904d76885c18d35094dd2e56d7fc8d218e8b4a533e87e6a0e5c3c0ccf7044862e263ef03fca0180da65a531052e0e6687c61b050f3c7ac60c3e423e48a836cdbcbf33122421f9ec3522801ee33c3db8ed81632c1589497ae2cc8826346489d0b616a67197cb8bc8e72911b815643939d983aab88263ea71add156f58a1bdc7b2cdae7583535f22fe9c1a32aefdf5c6bd4d13c66843d5e2657b54ab22ae83684f49ddccdb73730b194de1a792018d1110ea1463d6ff31e15f4be92f5dec9887e27df76964e26f4212b476409644ee42ee7b5ca1c816e64d2042963afe941d37d01f38ad32d793b40da07c2194d64f722e10232695cac3618c0ab93499aa70b9b806f89d7cf694a1b0e240c962804c7d2a43ada48c0fc32303a3d5027d465178fd883896f60721ea2aa53b85550ceec32596557ca5586098a68e6cceca82d2cc0025d5d3ae556dcf78bc7771898ff37484eace81fecade578bd3f97479ce9e247d855bd21cada939705258babaca90ec1ab6db44c818352826ba70a1d2a0a791456aa552cd0e0636c35e38251b8cdf27d1b2951b6aa14a500c5ab2def521283bdfa184a25024b2379248ee087ad96617da9cbcecccf46956670981589bfbe912e6d412625f30e51247410a25f50370a6e83a0859a21fbd555b2aed5fce5cb76dcbdafa7272152be07c927a6c20dfab9cad2e3b69cd4856285d2269ca4c58ae719801cda64a6ecf55c9d430de08f2481d72b079294cbc9f360c912be3cbcb41c2d1e18c857c3da10ecc5bc897575e421bfbdf1b26eb68e06f0696f1cc980446a4b48f2f9769e3223619822431abe91d69fa5d9dd4453598c64aaf9f7a1ab89f0dc3fc8dd915f25968dc7a1d9943ae81a48044ac91d65118b25d040e32d8ee3f36ba1a4ccb483a3d2e94d49451deed197e895dfeb57c6806ba309225601b2eb7cb7186ab9536bfe1c6fa21c4824fcf21165a90779681cb9fb9c35a33cc868c4c4dbd138017d2f01a75182440cd96d23b138b2df98358b2da14dda1166c16f6fb5256d6d67f58eb27cbae19782236fdabd2e17a05da4152b66f873345537c9a0853c0a3295c49e7bbb9ef482845a0e540e65322f01e22179823125ec9653d02c0566009466f8721137910ec8a30b65f1276eb88d724a14f7d9f2fdeede0e6ddf5bfc5f105046ba8129139ab6dc6d39f15bb7aecf5dca63e2451d2a9e43a804921f984d95057a98c0428888dce06b97db6a30db2ef2ab2378a46b92c33e0f383840318298182ad131ee607a375254451efcaaf6e62d78753ed608b17f0196ad6cc77c2b0277f6bec4736a61589be6bdd0ecddb30bb5e3a3343c0a51c27035bb4c7c76443960dad1e2bfbaa7b1a3b12455e2afebed921ae7eb98e84f8975a82eb9c71cda61b268757f1d0a97e98e4af67554ab7e1fb7c6e0485e965c0d2cb8557675a71b4dc8ec496486e223ee20404a0918a84f84f02af5e0aa9bc8e5d6b2826432361a455d3295dc94faaa01b224e5321d56db3dcb0a69934911a693426daf0aa0e110224592c6303d6c6ca6105d84a81bae16dad5e9f3f6efdf10501686f5dabea414ab2e6329901971374f785a370a85086433d0658d3a9be1b98ed7027b9354bf59a2fe4f0746023b4d8a5d8604a6c4576f64cc504519b59d8671ac9b0303e19b7f01fb955946b2a4f36ed0e19e6dcb07310a0e0127a93f3fa56f1967239efa2ebb5b29bb97fc38e29827f3ba9a2b43834868377f84a06261271349b441d8b226ac06fc5a34b809f66ee87a61c80a9a2030d2bfd21a8604b3b38e518cd1503b2e67b5581840be9f4d732a907291a069133d436e3e7d318444a4a858dc3306e5ef6737ec00eddf75e2b9ab4bc4b0409011f04a9bcbd78d81ee8a38bbc6447fe6be96cf8b83519e550f7309f0b11351fde20d89835a6e0ee4a8cf335cb9006a7a3409a2e419e66da1ba3b1fd2114429926682eef8f93bd9fc261b57f9f10311b067c6c227d7e4c34e96d57de0693dca3e3b9e9b5d8dc91c9f65c628794f32dd8a525f624fc87672d3690f76b5b67b601bc47e37e1bdb609e7c6f292383c613d0aa06160e4aab9415e01f00500680660cf0370e4e30e8222393938d37733f78a3af139eac64131bd14227218f6c0602018ef0946ca43d8cd940cd0040f53c7c3c1f585b15929ec7437c6d3540bb3abd98fc081d15fb1f3c953fa3f4da0cc422f8bc6a670c28f7da3a89241e9eab9fc6121f674e9a5509c7557239a556d77d1282580b8941fe13d5ee4dc031e19fca686d6b70a372303c6f52be0f34ad422b3baf680c499ab541a0be6efb9e58a3aa32a7411e23a1704ed660603baffdf23911658f3540efc86ef5626c2d96824acb403822da22b98ca25ecc945f338820c4c7a1d7782aeadb0542a6241c65ae4973905b9fa314cdd0e8b61ca9465d7c850c97bdd8b0d6f0b95bb125ccb6a9b18494ed928e394472f122f6840c68d999f5a3f9a91afdeac3912a5a9d0340f9d7b71e32b84fabe9ff061ba48c37b3eed9da06942636a93879dc4707b7a11cc2b01393565498db5b76c4be95dc766074112e321825b8887729d6c5079fd44cb98d641f559fc690659a106a04d6ae2330914023f7b1a964d85254597d94ef3dd8ed34a9a6e0e8c16667845eb676ea1ea1a48348d0c04dac6905048d9e78ff2c6d268a02751fcec5c044d193078d9ad8fa92008d59e94375a0096f7eac56768fac893d33f2e67e229addf7cd623f585f4dfce1fe3453e3c82e338c9519d09fafa7b0b5f6bd2b3a812f1796ae64c1fe3217668fed517806feb024fc236eff7be4e1fb5989709d48692ec9f4b87208dc281e42a259814cf4ac165ebbb0e5fc2502bfb2e7c5b1d1fc1d322f177cc7e35c03c64abe17c3fefe001cdb2d3ce6d3663816c1989e261fd80d7ec228a4f5d58e8500207804432af6ea5cef9b51865ec10a6a1c9450ed3c0695ce3b898f4dda269b045a648f70da7b5d131bea52ba56e9fdbcc1ca08aa597bb8be007a829dca37534e2ea8a6f05ffccc4aa5f085339cce19ca84c83044c31cf9b4f937c0affbbc43435fdf249255a0521f825b6e254518651853bdf7e533a2853fb8aac56446d2020ae53d74a0397e353e385b20b4b5b88f80f7559c978a9fdcd2fcffb20ed9ba2262a165598406448b4c3c9cae9b9dfa998ae39effd010c8a9b938e93d02ea060c9148def39178d6f4b5bb57c8a49d578199d7252d12b49f810b4cded8446d3a7e04feece6df158b85e235bd6701de546eecb0f977cc3235422aa323580772b726fd152e9821689acebe36d674f5eb9b3e3d4e55946b88a656bda7c3e9b00a1ff5136d2b7c58ce718e37774f6676b2aeadbe7435adfddb6ab245e2a354b72202df042f42dbc6062d4b485c8ffe442705bcba0fc4f356dcd9262bec35521e3f8a786c02a2d4b4d2ed080a6d544dc9c11a5ed624d0c5ad429cf7663b208103648be80a8d6cc57d6ac49a47da571e9659db3663251f553502edd8d3febbbc16ca136e9b522236af76480c69e825e0e478a508f8a4678f4a714c3db5ef659f5527dde35264d4672e1bd4980e83e00ba90fc4431029981a900f26fec3a858fa51c3c0845b41c75e898a7d93b807d32b33cd6c43afe8896aed9fcba580f369001c5fd18edb6996c24fc046fcaba41fee550ebe138b9714dfca582df4429a16f1823b610472aa0e3b9f1a6e267eaff4829415bc64a44a8851f4f94229370d91541e2459181438d282cae8bc05c673391da5f65383129373c3e0a740909e01ce06deb1ef60575ca5c56b1e65eb87d2224fbbc2bbb0fcef23db256e41349cbb76cec109319f3730f84979f0cf56640ede63318189f7bee37f86f5c8117d2c6770c2fe3e307a4e297028e61537b9c461a1e69d988999d4609d3d2c112969c4a080b51821f70693c4c2dae1efbba4ca75c2f262a2388a539d935f428c140271fcce8b91e3b65fdb95223a88fbc19f0d8ba132036355b84e8606151e6d6db8283cf660638d27c717c47d91a6e89853d7a64c034b4d9b7a105fa1d2b76dfb5f105b5d5d187f1c0108f535311b63234fc1773441fd2302de80e3d26897f32bfcdf475ef3721d9cb84bdaf69e3036c454f69a5039b5f60dff1509801eee1d79e7e65e902b51d4af929b1a8226a65268b2bed89d3f15d67b8077534c8bae525eef1b0603e7826c4d410d36e2dd1786535a011e39646301d225badc608b664849e4a0b90529d8b3e7d0649a2041a04404ba05eda44c4d65c5794e9a325ce1abe4976e252943b07222cabeed2e89b0d1d7ec61eb81d6742d8f27243d94ac68194678fbbf19596378f1bb20ad709615310c5f832920f18c5baed66005370eb9db5e78ef1a05ae0d63867b41e32785ed06eb70968c71edb502d67382fba37d0c94c65eae00defa5e058c18ffc09723ff8a0d820ed748633ba775cfacb2767343feb2667ab10af87352fc7adcf9cdfd8324b0bac725f378d09a76cad319bc796a7efd6b9d7609f95170c6c872934456f5b9754c5775d9996dd8d29d60705e33c089dd4e23d884ae4691ffc60fe02d10c1b064726434982ca0543926b53fbfe9aec864cb7e20c8b684dd01d01a44a03ca73fe805d30d2a14907796c6ca63bbc8cd8787e73623b39bb8a55e76cd01aec6d8a0df55b5e6defe2463fa2bd11730f1960047e37cf0004c00554310c5064f9f892bac47d9b50083e8c139a712c946b9c824e7e23846c49c8de7b6fb9a594494a19f1079a07bb07474fdcdd1d0c9a46bc1553352a8063c79c73ce59a9271d211db9bb1760ce2f0004340d3aceaf41795cc74ad814a0da00b286ab48a6652525d804a652a593f22065fa3c41327d9e1f3fe5943e27206752e693ce294b51e080a34d1e16326d36497d7f7fda70d97d8c73be9efde9512c3176dfa146257b24a9dab787533008d458fc6e8b7dbb7db7bf0f765d28312d53ed2b51284979ca72b77d7f729954743681aecbfb3909ca639348993d89c562518c75cc84d5e337c0eaf1e7a03d51c885da7f4c1172979dbf13693776fe1ff79e257e5fc595684529bee8a8331defc39c64daecb1efcf1e469ab4c44ff44429c5b9ff1e214da5fbb9a4492e367cd67377a8765c765d35c8dbcb9820d3de868ef7612e1b64f963aefa282885480c37c03e25701013e4895801629c1045051ca0aca006578228e1a143e988172931c032a44b1021ab2033f4e0a40d6c1912e5064868e02109246c82f0c85b3e2582c88087205dae131ac82e5b72a85ac205253d4e20ad1ce1430d3cbcd8b0c49624b8c9a64e58888f2b04bc547aa660ee450f0c9b233eb82adc75d9c2ec8089212fc05eb26f09c5440cfba3504cfcd871f382faedbce88131a39860c18b11e785f95eecf4c0f85e9f0e9070ca39e7dc0383f274424334e610322f47fa3b7404a7ce3153f8b265532a8a31fd31e71212c6249760d397935222314f9b605c4fa33ac2a751116c4a7df81129a31fa369f8a569d8a569b9a56939d434983ef2c595a48cfe126ecad48f1c813dad554a597d31235629b32f234a29936f2b90292823ef5add1f8f9b25ae3c2b47cb7160fbf701ebd9043817249074ec4e4f39f7e57cf4d9c4788e7b36f986b3ed0336d6538ef6a5fd80f51705b578b0a63c6b86b9ad13cc0eb6b06acb11dc5497904a10255ccf14fc13e3841a7042fc00999ed038890109292160f06283130f07555b74106181123e9c785244c0319c608b110f4a5f9408220739708152132f0801922088201d711e904ac0c2416ee0c2911ed4a6a850e5052924c10088244b4ac4900548121b10265454171420c609b01f97c0a6701121f0a065881f3f8069824101498e68a28b951198e0079620b88a820b84e181071e4e6a27c8c107238c40c245cad4122f39d8283318e9f3b17201d0602acb0d9270c10da8108009090ba4e880840492231d0d2006d23305ff1420c609ac2da174d003f703f93418423ebf6ffbf92fd8d6021e98051d40a91f4c074e28b725940e9636edc6aad0b402257def3b4fe697ddb37ec6f759b37411d310f8df17adbe7b099403082432423222a96a3d8e9294786878cca9f5de7b318e8d1b385c56e5538caf4fa38e366ee018777cd67dfd9e3a7add7fbfca9d88aba55689cf7e67b9b7cf81df6922efc127fa62f7fd0e71dffdfd4e13315d3dd4bd6b22fadd13b97dcf1377361299fbeebdffdef3c41c409f9803c83332dab3de5a8dfa12a872eaf3c4d8fd7759bd3a0343de7f19a8ab4f1311e51c40f469bff2aff7ce1a0fce27fec4705915725935a25fbddab8c17d27b463e5ef89f43b31c3a6d4ad12e2df7ec67dab8becdfdfee176d967e900484b6b7d6be7dacf15b31e662ccf1cfb08f39bce99dab7f28b54f0160ddff0325cf7c5781377176f6597eeec39fe17d7eeec3e762f5b9ab87f07b9a88fba1ef39d67f5ff550077e27bd9dd773baae9ed33b2e931e8c734d348f7c66c8fef4bd773dd3508bc9563dc4bd4b135909c47d7deead048a558efba297b62d4dc4445bb2fad5b7dea577ec6aafc41a085c5ff4e3d24cf55bbf7ada8e11ad9516b2402bcfcbcf7d9137a328ebcc7a3dc41181fa2736893e3df510d7e9d735720061f186cb2c4e90bcca41e9a6c45fc83939936a528d37377494374eb178f2e6a7cdfd1c40d67efd21fbf5af26aaf3c7730ee5f1df3beeee4495bced7136f6591113fe22faae97f35b2fdffb2a7db6d29b1e7abd83de0c73c270f5397426ad54bdf83981c6125472f6bd2f8ddc7b3f5c6d36f7fffe8dd2be7713a2814126e037d19b54d9bbdfd6390872dcfff80465fc97fffb1abe01ec879f63af445addab07455adee0cebf89a128a904b71f9ac51c7b1351a09ba5670da608df93fd3d28d26eecef7ffc13b9f7c44e4b7d4347faae1fa2efd2580fcd6fdddc8fde1fbc980c1ddbf4e938c28f9f740ec1b0cff3dfa9fd03ccd8b6d9122c2187fdfa06b03af61ae1470d7f1bfe4234fc7ecc044c81edb18ec16c360090a46ad810a2116bca28b67caf21b125d4125cf6dc34288f0c48dbbf004b48d9fe423db6bb749a73c230c104147b88f2b88e9940816ddf00f5adceb1251854a5acda7eb0a476854179e68ed51f336c45983cb6d8f561d2c7dbf56dfea6ce03f85b19fef67328cf68b36553ae49807f0e1d47d0047ffb06f0b73a9663ffc85febe7fab0ca92f2c18b35e5903a91276f62d3a757f43d278166e75337fc71f8d7f0b7119bef719eee34909c52d29a269f53d2398bbae7de01de63a621eff17f6211f53af9f3cba80343a635a4ce74ff26539c4d35772852c7959852a24ace60ee79d318701a9612cf39ebcf598f3aa3aefb191cf79d2e6292b1263906a54938e85fb9227da49d57e4e5c418f952fd24e79c73d6153c79930388137300c59ae418be7d0ce3184210b081c2c59b14e5994fd3cad3fd182eabe1b2fb3494e49d012c8921e433fbf7696ca9a0d00ea11df4a7fdfa463de8782f0ea5797f569133efef9544ecfb31ee3760dbb66d566d4c9ebca1f9d1dede93a1d9f2ab8325cc3d44c7f9fd0a20f761fd0a9640f72cf242d0903a730e2175e6f6585306b7b4bf7a07d85f79598c09d930fc986b8975acda9f9175ccad8ed519adcf3a07b34f4ea449027e2969c0d744c2400974d77b45b9b92a69545cb1a6c06baa15a56a7be6dea9e7df38fdc66e75eba9411b7e6efbb97d2bc2e47147fab0b6ff0bb7e04847d745444c45dbd3c69810feaa67fcd0aa3d16151ddd63254179ac7dbfd7be674509b2a82c8b95041d9dd565fbd3152adea1e3887d0018688eac2d05d23bfab41d310710b54ed6ceff893154a302b5ce4be544a954eaf439cc510e73ee948a26713f2a5225972d51284dd4e927861095eadeb3a0d00efcdc7b9ed889b126f947ead4cfc0acedb037be5c3d93a44ea54ed489b2a0d22abb4eeab4ab10bbfe8f02aabc57ee1b8a3f95568aa7287d92fdeb7f18851a95657dfcd51c3c79233f943349c3a7e24d19720aa86cf9513a50d952d33ee0e37a159dd7a8173a3ae569b1fd3d49faacb6d3f7977ee452aecf11f3fe9ee44a32dee4ee44f343f969fe3e4df8e113d5d03ceb67c8bcf734cff2275a4547aff9d8d35a56709a5a565a507236659032ff96152732d8de02627b8d8ee9d8acf9a1ef6b50fcf7530f8135138c2960e6697e68e669e6cc5f3d047b194d44f343aea7c9ef0a61dffdd0eabbd54fed4a2ef37ffdf49921c7bcccd3bccd330dc5be733d24f5c774f79d8ecdefdebb9f41f39deebe088526621ab2f99af79a9a9a8fbd8ddef19897f91ab106029b2fea6c3453ec6b9eb663444cd7682197f96f246834cdd7fc0c9aafd1aca799d1794fc3e9a18ea8d3314cf343ddd3b81eeba1ee699e461375ba3535234a97e104c9f43771d6fc47f891fd5dc997fcc8938c4ca397e82e0f45ffec4bdb5dc99ffca9e830481dff9695fa2d2b74a6d3d4ca32d54aa2f5c55db5ed2d2bdb5b5db6b7aa5a5e5a615c3bb6ffacd461a055d4cb0c36edabb5568741faf891eb06cf3e11736a8aa07b230c642461784fe5637b1018b42964fbd114fdc85d893ecd8fb6bfeb68a379064fded0ead4a6f948ac317d8fcba8cb153e91f6a8261a3511511e33cca3f588b1f9dc8cd573daa58bba5a8dce6a8c90949a504fb2e44d5096241035b2e99c45dcafba075d1fbe03b85fcd2f4c439ca6ab07c52297962e0bdf863f047ee8499b3eb8d2447ee432d7e7ef9e69c80b67a83b4d1443dbd0397b1f7e1111d3f79f2ef2bc9a7341024983e0fba2904aaa4d69d3e8d34c3119fedbc7be4ba259c7e6e7cfba88a9e8cb61f719b33ee7ec7dd64baffc2fcd6d1fb7c20992a1d01fe147764fa2ef353772895e73a426ea44a5445af5894b474b2e19b25ec2d1e904cbf3cb486915751a22d7a98dae9278f286866b5c90b997358ce73c3c326d9bda3be82c87ca6a393c21c8952a25d1d17bb63b9efa82c324d3a8528ff7542b349c653b978dbb6c7fdab8bd26b17d3bdafef54bd5ae606cfd52b535a2e317a9e3f868cb155e3c79c3c323d797952704d99fa7853ca76eea44d2b4ed7b9ea71428b9ca67b2c5b63fbfccd5db9f50c25ffdfcfc96ea90330964e7b3de67b11b7ed6e3b334d1eab37ed6d350d39acbaccf0cae0fff0bf3d067ffd3a1265a816068c11b8a39bb3c5ab383f2c8236ac45a6ab42d45da96266d4b95b6b5dbb53fb3d45853ee36adce952816b9be157e7e07ac9ef53fd425320dad74fe965814eafc141c5addcad244b426abaa56aecf9a88e9e66b3fb7b4cd4f934ef7e6fcaf7fe9a256eb5b1a04af2f9a3597bee1324b9353df7a5d0effbdef6ae98d44a8635dacd3454c45d2c31939873fb14e872151a787f2eba9e4323b8fb67d0a0aed583deb718264b7cf59fb23fcc8b4669f1ad99f55f6e717fb2e4e9628c59528fd864d1bcd603ccf16b14d6c13fb84675a2376ca36b154ac94cd62b9d82e3609e5a1d922d68811775b44fa7894c2b8d3be1106ba6f9fc6d9a781f669ac2d616c3aa9bcea4bcdc8a7f674dd90ad6cda0b864381225216a48e43a1339d2677b2b2c5bb20d9b44f861da873d9d4a79cca9df2d0280b9bbe4d8287d029cac213c5f85223e6aca34fa7e814f73fc0301e6c99e6e0b2d83418966ad360381497d126506c553725a6c605f96f8dbb35796b4bb7766b94a785d124a107e5994d746cf299d7ee5dda57e6ddc377194de4efd2b78613822c5ea3f088faf47b74771805e97bbfca23cf2de4b746c7fb384c32cd971c8acf60e1d3fc0cd7c33e7c9aa7b9536cb27ed343f95d9ae8f5e10fbd3e9cf9d74f3dd48ac9b1f9357f41999f2fb3fa1a4d24f32bed44361ffa54d8046aa27be4d767860cfeea5d1f7ba6a19a0f639a08df3084ed3b653efc221b4dc434147b99bf355fa38b646464bee663ba4702d1c6d5cb883510c4be28464c33c5646c3f7fd331efbb9fbae6659ed663448d962e93d1345ce6d2b1f9322f8142ed7a999fe17a195dc43404fbf08b687c46114c3b94ef8966bc2a363f3d14c668a70adff543e1bb5e3ad4614bfb962ce210a7d13dba7f93eedfda35ba8fefafc4e934a5a4cffcfbdaf3c8ef53c1aa7e4c5adad7c35c1d4e9bbe1787864c9f766bfbaef028068a362d874b4aa6ff43639c369aa3e6f31c651e21794ed1b1c59ef36f86645a569a3743f2ec52038304e689ca229c7af0e58bd3dc2169b86cbe0d97dd10c972c7eadf9740dcd5454c43f7b72fc2f72ad1717e4c08e37b5f4ed170598c6271fb6e7b4edb70d9fccd35100da9339588e041123d7842938c24a1e3c4e1b2599b4d52677e7eca4fb98a9c8d3eec08d143c49eef49ed200b0f92a6a453475f94dca967a5bc44792494172b7b7e6ea23c126a070135b02055430a45b24b89148e5862b2e5fe6032659b92ef96504ca43069ea51719010251c95bb2da19828e9b8e4ba251493126c1b779b14e1b4f9c0f33265ad28a59452f073cf3b4e6ff92f9ad0f0a61ba594527aa985e13c564a29a5947e86ed381d29754a69c594d270f57352aff6e6bbb136bcc21cf8551b18ac72dd07001ea1e7c9aa9c61a30d4a4727ae7ad9ca0fe4b86a2357812b9a9c02f3c90170b1e5eb1f624bf90490331bd286d49992a58c3ed6b42f810a604a9e3efbd1ef4edacbefda4637a58f5cb1b2b4f137c33a56be6e022775e84b5df31c7e362ae59161abd671276f69852ec73d5bcaf5a23039fbf9eaaf3066ee6c1b9e43f9e3326a838e756683ca0695a492f9e47be1cac6db903ef2288595fa6d8c65fbf7dc31a131d78d005247b41b476fd1e645fb32102b61ee3ac61430817eb8eef3be29660067f99a8b504fce0be300dddd5ff84829cdb4522d646fb84cfeea9b624cc6fc1cfb35bf29e2ede5af565bc36f8a31a11d6eaff54d9102b67e07ecc7e0dd02ef6ed9bc3d57abe572ea19113325add35b02b052c33967ad355fc99a7867ac2b2cc1ee0ba364ef5ba1a54e1825cfa751097cdde77d22a8e03f10f6ca9f96fa4347f940ec50f73cafddf7b9bbfb5c7d12b4b6d65aab05c120f912afa472f097cdfd138189151198dc8c6de82d10883cbf05922c678cbbbb0a2492d6ea3ccc49296dccddfc695b30d79d2075e4bf18f3adf327c745c8ddadb59616336bad55dc16b7aab5f6f3eca5f96745cff58aa9e162385bd271daa0a029c214e00224d0acb5d65c5f14f50a02481d281b05bab5d491df64a340f7943a52f46ee894beb27929d151226d14e88f6734d251caa7719bbc7bc69be9b6cb8032668d8d4dcc0b478affac48b3f7edb52f30665d60cc6a21ac6f586bed4b29e5cbdab9715ac4bcf066ad7d9adb6a6d753a41f84000a58b4f82d66200b6ed7b399fcca92fada640dd64b68fc13a323b365caaad76bbd8f592b11cb8ad06b66fdc9d23c70101ace055ebb53596e5bcf5d6ed5b1bed02dbda6dab77c9ba63ae6eada7f75e8fc0b6e2b6d5a7bbbbb86f0440192217545938c0ca804131785b711d68ad15e7b6d25e0a767373d75eaf75a5a99d522665e10576adb745af7e4f0556c67b297652e77a607b90e670b01fd82eae76e96edbc54bb66e7749c97671b5dbc54b77db2e5eb275bb4b4aaac55bb5d756bcdd25161fa63c568e96db960372b41fa8d5568bb7abc456bcdda5566b5b0b6ca73e95881004ae3fabbd1be636ee0359396cb95e3232311f95feb2b5562cf1588966ad152669a472863d7d1a0590c3eb9bb57e9667a18be16e85a294355f2ccf582c66c3b2190a9d2c6c5aebac3febbcb5566cbb34c9d8a09873a2909a00301246582167730977b905ab29809cd357aeef5c5a5a5abaf7deeb0fbb3418e31923a327a327fa846bccc0a69cfe56060cc2313e6b7df8c79f9d183e8ba1db7b5086eb9538f79c7352e9be5a69297556bf5aad366edbb66ddbb66db3735f6badb5d65a5ba51c2b51adda25d20914f37251a059f30d9f92ba0452f11e93cb54b19352674ad18793a2b3f9349fc61a6654a8008356af825b81714060888602e40f5bbe90f4e166535a11b67c1d49c2ace519ad41c462b1582b70c7b7d4e919cede59333292a9411423b465498c4f8341f6f576b3dd905f969696e4548d29027da31d783e71793a81cee67c923af62ed59824cc2a4b4baf2dcb8e49c2aca2b9ece859b2e332fa37373738f786d69f46528e1c37ab3c4d282d16b5b20083eab36851710df376ed52283e85e199a54a974d7f5be2b2e95f4d9b4d30703dc9f746d997734b9c53469e40b5569974b1a796a188a50b9919991184680195e796504c58d8928e43b2eba9db2164f292e5e3195c24919126c63d08d1a2e24493541608abc2e66cfb625bdbc2da97349965d324976db1d817866cfb420eb6b530b8b02d0c466c1b751465dbff41daf663d8281f51b67d1a944746fd7061aadbd5a35ca061bbe31c76da1d1ec36033cf3c4716961e47b400c4cea6d9b4c0346ba14b8f146cfa319ff37ec203af38e32f7bad2f5900b3ebbbc0a08a43c0420d5a78470f22c0e2021692f26c05fa191d09b3699ea940a38c5608a27866946978bf78b020f3f001869998706dfa314ec0197f99f60a010ebb7e0ec10f561862d7ff603ae020c67321b582931ddd13aa151702961d275081885d1f671b98c038e32f6f610ca254904a8107bbfecd394401ab6ab51a0f2b847ea143470ca27484d9512968d954884dbfeaf004a594524a5bec1a55bb61d71aa54b9e998b969b153fc8e1891f4f50fd00c8a62f696c784d6d0cfa9275da6793e0f7dc5a6b659032cc3de73248196e01bbd32481eaa0f85784b14a94a7c5c66f97b6ff34cd3ad9a78d9fa747de9e664f60956af611594a6db97944609d2c15ab6481ac1525c78ee3243be84a74c4f8719ab2d59e44c795689794ac121df1e3f0c8da2a491dfc38469936a12855cd2f3b680f07227da03c3d7242b1489fb9f17b12e5d91e67fc94093983399b492efb210693c73e7eaa65f2740f6bc155d8f8a5f4c14662e3977366c4c64f80d8f8a90ae40c87cb70903c29903cf5f1d31b260913698a801f3ff5217be061e327780886511a5a5cf274dd8f79225ff1c348987e4c0864b140cdca1208a66317fc192bd6832b6fa563f7257e8bdf8e74c49fc51d97e1678916bfc56f95f0db25fc57fc89e132fca08873bc649a55daf867d27d72ef4cc2ef4d5be988c3035f94a696b278a9d8da1b303589c740e48dfe0f9deab29d0682a42de356f9573babf6a6734c6e9a63030049a6430635203c5c098243b7430a96502902073fa87074f9410a3a38e2070a5498f4dd35cd5e77f729ca5d2b75da76566a05450a59be4743edc9a64654260fcdbdec1ef43dbaa46a29ccf479546b13e5a1b3c9c4a956abe9482265c9964d2995a1d569d34aa54ef74279becc1a5292582b58826fabe993f5293a52eb3de848add740aa6f267100dc858ed47ae1b6044d985fb573c1f4cb26b7d0915a9ac56e093a95ea5b82de14802559095682f7c820cf2f49f64caacd5a6dcf1db856db4432e89e5ee848e791bc61c2e402cb40ad474874c6fdac7beacdbe19385b3ded5b759959a6154ea42245ca93274d9a24b1498c3cd53074c6cdba99677758fa95be3da23cf72d129d65283e0b775e2098daf5e52d31a4329628a90cf430d4dfeb222995d1a497ed55d3f0acaa47b24705a8e692d24c7a7aeae58826d19ad7a88c3e1d22d3af4bf4eb514da26f7343ce40dd28543cf3f6ae87374ab729372641f245bc2537a5bb6f2b69b7577bb74d63ceb75a7d7a1cd7514fa4812b560e5baef015c6c8ccd0d4c46c50a450f152a4e915f50687458b51e602841c1d1bc28ed38b39020d8003a0ee58116eb8a8a150b7fceb13c2aeb8f2e8b8bbbb7b0e0742e7c26bf1e180372bcd12f387eeeeee9ec285e265131393a19981c16668646a62622f1b178a560a968ad5832f44a0bd15dc0dc6d958dc1676ac327741dddd3d47e680e0424707c8d4f11caf2054eba212d5bb8dd9bd489563adb256d97937deb7e20335b81257ac67651595a8e630450b4525aa2d974dbe91af9437dfc8af981a199a19d80c6c06462343531353137bc56c5c36285a28528429546415cf7a71e538380e37de0d4e87c38263d102b718b75176652eac0b102a08399ea34375429828a24c9d493dc72b08d5bab0f36e637881f0fed537d48511c982eb70e6f46ebc6fc5076a7025ae586f3f505959450e53842d14f603b5e5b291b17d69794a990d2f905f31353132343233b019d80c8c4686a626a626f68ad9b86c50b450a40853a8c82a9ef5e24a831fd62b3efc5501d4b0e2c6bbc1e97058702c5ae016e336caaecc857501420521c77374a84e0833049d10724070a1a3a375c4d7d1d1d1d111c00ab602a41c55c406df2b3f01c3f79560c4e97b7d2f9b9bba03244138b999128412132d4dd8a06506b74a0b0bb8232d357446b424f5a0a5e604105d361be49b2da18070da840061025c25b3d8120a08a39b822c534064714ba82c2bc060728b2da1b22449f901ccd6e3072e4c7e9872e4871ab6177ef8d1d5208f5b4261c1c15582e54a0eb0dc50856508a743ae79a24322db14d11d5db944e4145b42f9e064073e8ce03ae1430fef87ac43031ca0a648452992635b424929112165e445c928b684ba828409ae5cd97145074fc7952558aef8087245077e22aa6a47541047d9664ba8a825b28a2da1a28cec04604ba82d4b705d2a062b0a6090a9fe55fc4d9d5d5d0996199ad8ee79089117dcb0c4892d2500a2e52d6fc0820f2e406a3b38550172774cc4061f5655cbb74545121d49824852c40c5190d46053da23e3834cabf36d28cf44d214802d8522525c5653b26cf93026f233112b32aa482d5751d9f2c122643a4869428407134d43866849591a82c4854c9b4986e8900f3b22dc526522253d119259331c6df9f257d8407eac071a27a39022375dc26cf93430f8917513545bfe8d969915c430e19c5cc093b5cab014856ddb36154a90b4b32554103df44c4f055810e08b2359b428319141870c2fc840457ba234d53a5f3637392f6e2aa546b26c3a82116c4a47d0834d49f0c3a6479a8cf4b029b82b6ec8b4d7deef33fc7afbf3ef532be299e911191764daceb62f187476636fc87bc7be858d42e4faf6472132fdf9c2fbb3d65afb3d443c99bd39a50f9dd2c74ee973a7f4e1b69cd2a79b734a1f3da50fce9620ecea62d7975253fa8c5b4ee9a3624eb0be578b4cd9f33d19d9963f7f53d996514474d8f33d9a164cf67cfa15a9c56e6c58142192b78c2252b5a7b7a2ddd834c7566cf94ea408d0e69bd2e7b7149becf972b565141112d012644478ec09db322ac80af674265e60d0a68a01057b4a1f9b297d5040d920b5ab28f7107b4a9f9a297d629b6a48d49ee00e926202267bbe87438384c5101dafb78c0ad2c4cc117bbe8a39a54f8c4cb86554d2961d6efadeacb2278a155b4609b1818b6f4ed696514933ccb9616050d2933d7f0cc224a78562cba824a33dbf7a9595c6ac6818d854276ff92e213db0886d19154308ac2d7f3ad9730518b4a96280c19e3151428cf67cdff9a68c902221c86c19150469cff700f04de9f36df933e0a6caf465540c5df6fc9c9b2da38268d9d3b3d57a1733ef8b82d65a6b676856341436fd9b6f4a1f39df00e0a60fa6d31186884c530497428e89c23b64153660a50cdb320a49881726c76c19859402c725bf72f0bd90bd226e11416c5319ece1db91bf1d381e3287438725734d3c221927e1808c6048be5b4601110244deb68c027284002046f7626a84331e71167fb0030615478cde892580a468f2a4c2892e2ea0504ae184102dd898400985132d8821a684cac6892620354aa0c49cf841021a25463561c00c81d920e53438cc10249899c10916a605493248aa66c2341112c3f44586865961c9ebcb25588aa1e283309bb673839609b6bcb004099948b9f00e0b7c649cf197912cb57c708217584e8c42bc5383d10a67fc651248e51d9c8407b8d3b3f3a2c7090c419ab640f940851e3524f1c0054a2995810acb5085731338e81174640bc63b426c8cffa3330984f1c330c68f337e1afeb0ce34d4a84c1ae1a3241a947edcc14f3eb620a6250e053e6e90d216bc836978c1eef4ecbce849e2254998ed684865d283091295c94dc3b989da519093263039f81154822f60b8fc08b2a10646aa475053ad5291012dd4e8e8b453c54a93289bb6637f906b68a2898f2dca13dd0a79b5444724b768606d905f30e076e41c6505d9e6e00dc1a46baae1085e227f5b42d50064299ec5a874ac18ab8ad6292a0000001000b315002028140c0844029150108789aeba07148010719e3e705e99c9a34190a2288a6118638c2104100400318610470cdd46026df88771fd61ac7e604c7f18a31f8cbdfe09bbb12cb252aabc2150e1559cbeeabd05b0e33f7d2f4da79f8bc01796e461c5c52a51db29c0da3316f8732f43b7be04fb8d302868e8fa0d9397c1013e2277108e27d0945c3e0fa13f79dec76bd3bc672850015ec5e011016dbfda3725527b8a3ac97ee738a368def429800caded0d271bca861d5780a3860be1ffce07d2d525778274b95ca57b0eb5c0936ff06ad6446d5fd2e71564e2135d6fb2cf36cd000b84882f851c0043debcbf52b1afd3917eb937b43257f11d1684e9ca9544184a71e8e2d880f1014c1e905f4ca1c350aa02436249c88f116319257bbbab7baf949a97fddee402f4700c62ca2e38e7d847c2fb0d336246c1132fe0d4f340d80d8b892c6b92c5b6696e611a88bdfb4f718c0732ce528cf213995957c2a9b9219448ae8100767a821fc7f816e8517e5701ba80b87f60bc132f63aa389b0b0d47395e8cd0245a26a852f5d128270535a71cbd1c271b525d6c794d74a659274a56a8d85cf82d7b38d8a475b33dc95578c42072e8936475d75608839eeb71db6b4d1522a67ed5467682116746286723393815ab5470afc850e2b101bf9a16333a8aed6af3dde058656386afd44fc222c489ed330f1c24c46d868bc978f1b3dd4b6c03e327ca303d2f3b8933b88883bf9f639d97f04eba16eb9e1d982cdca4cb4a32ee11ab1be31eeeb9c6b43a1efd40c5a593726dc85157b91ac0a1ff7318eb25dbca0c0ae82677da3165a0d803e939a0ba9f06cda1c53aefd88e20e6afd03f2b686ff2cf5e83b6eea78bb7acf565b178feb3eba9817c1692397555caeccd3781b54a405a8e0308ad94635a79d14716372b54962d0958fa976833a4e426ef247f0ac97a5420d60919f9cee5ce3b98acae3b660868a0c386dcfc00c5ba3a5b1446dd287f4b0006a29746ae2aa591be2a694427771d31055be7326d22d4f8e20fd1d156b63b2b79aa31eb016834c10e021aa4f66c34c13873c12dc6e4f9f35af1333d1bc9281f41e2b0873740b62554652d90543a9dc98506896157e70a79b2ba39dc446041e5505115b140835d82a39e57b2e3d7ad886985bff3b29f114c80f3fda8d5b00f749111333a97be208aa4c7f63a4646e123daa3a6b071d0a0ca527fc0147d544d496e9da19b375f55b5a3ce060cf49d933b1ce3ed44c5fcfa7639fa18a3b33b2b387411edbc0a133c033d576521442f73c748ae035a420b66457ffaad8345ecaf5c1cb95914fee88e4ae5ef025d92eee970a1b26e8819e9b5ccdbedb0bf418dc3076d964ec19be258a7ce413c64bbd649c16b28bfcb3fcba3a6ed641033c971a461389a28d65386844ee7d0c487e489fad850342b5414a816d12009f3b7bc54d27d98cfac434b8c8d0fd65a624d9e8ed40a651fb5b7bc14de5905e3a48b81014b02f42e4a6aca4299dee96aa057a893ef2d1de7f8d2ac70abed835f1459a484ebfb8a35b41a655957cd367dd2126d5cee32a41a243bdb774f7beca9378f447f7cb952909a12c2df1458c97c001ec6dd174416f2bee6e58ea9c420ae0a78a2a2ff6fb6c6f15ea6c2ea88ed951f52babf2cb490816079a459be08df0f5a8c8933278d6f4c70e0585e4e7c37987248550a5cbb1cb8bba47057a970af520d47df688aaf04ccb284d7bf49ab2554871c5ed4f9073d24051b2925bc1c4e382c289558cf091c60a1107a0cc2070e5e832658d8a8a35e6dbf8294bd0e01253b7cfe990d234e106153999475c5594b82bb9482732905c7520ace52129ca5149c4b398fbba2c96a7a68a725073db10194131363966d5eb30dd9b3d744debdf380f99ae102deda26aef585f22a4b11742d17d7522acead1cdcad3c385b2938b772706fa5e06c25c1d94ac1b995837b5b194fe88ea9c7c903aa9434004842b62438176dd5a98ca08be30bbd2c7b66584b86b0978cb02e19615932c25a3284b5648475d9ccf60af434fb9af5d31e9c15b71c20010e28d0035b029effdb0dc24ac735e08fb3a54edc9ab04e7a4999df33dbfdc705090d04609f89f3187e07c65a6edfe65f4e9d21e1bff02558bb35f5f9035c104ae89d0d529364f2ffc37441950e6f8454eaed53363371d69536781f99e39364e6766bd7f2a95a129c6647701e0a2ad24ae7c4955f4eab7fe378e11fc84b3d9025309a231f25e449ed4ec492de8d0fb0e02886f6d295ff709cf6a330ed8f20691f87d37a0c6f9a0b0e2d848cef9b614cf1af2ce0b4e45d69b1a2651e83a702306c1149091a81f1ea5b4a8539454cca549bbac1c0c8f68d53314fde369a2ce702d95f01f09a614cb95f7c720697b6e7fb19ceff639cbcc7737e17e7fc1d26e7fb784eeff139dd89737e1fcbf97e0c3b19ec879f202122603a83bc8182c1d905b37329a7724dbaf8112cada310da8fa0691d09d17a044aeb6898f64750a3e54d0aa1d6db9ee2f8d41adbc912e58882bd6699c67159d34048c488f8fb847315c65ba6c1c989a4268c81c8d95f21672ec4fbb256844b6e7a5139d6c832f66c2b462f217ab806d6f0e979f6ddcd89dcc1b6452179b140e8859507d85a1e59fac7e760a62d012b2d30056c27e00c6e5ad65ed976cda83f685d6ee73e7a947a314bb9c571d7b002cdc8953247aaec6c136023a0e950e68becb849cea106c555dbc4ce61bfbfec0fb330de5168b0317e16be952e79d2d182215ab6f923b00151fa8bf6410d09e1484151d96da4f6ba6c580e097f1f3e68f2995475370c340fe2240c62b76836c71345abe7d19b1fb28d1ed26cc84abc784944f14248d105a8d29570a50b908a0ba16ad740151784942e81ab5d0829daa58557a044321d1e5cc442301672cf7c49a263bfa6bda2ebb10cc57f950c8797ac91fb2afc90ed40282e802a5c01515d0052b804a27201ace00244e90298c25ef1238aba543870811d0f051d5863edede2311388eec9418ac738d665f9fd2ad06fe9641c3f0e200947cb53b7ec5da82b15dc3a068b3b1a5ae115d599c3010d2de98759a19f21394a2c3106345093074a40282672232e7883c15dfc145bfbf1c56125134c620b91c2161c964ad4010d962103c012ac80d74d27c5738b8443952ec61578ff25619e38c7a8bc25a6ff9e2f1c958b8031bfbef08cc1b0081ef88d405bd316e719a475260153f8f4cbabf5bbf4166ebd5772523901dfb9c3f4e14ee5912ea5420f5c3c0c999647bd2039f9247685c202dec2424546085d3c94b7c22dbf4c712adbe7d498b9a7147b198f84d2b55402ff74489b94d08f6356582541c0b0d042e8f24f2b56a40eb2a025eab9b0829cff9cce40c242db26a1a51114646641454b3c88263cfc4d14a284a3dd7263321622f31e5edca1c0d14005cc6230b405dd8b06f9cef525bfb300012cbe7ce7477eb0dff5e4b51c8ce11a1395e4f03fb4044af91fe1b6871bdaae4c750db0151a5f451a2f035198c2b8ced243a5049b400fc9fe4d28667f126ba19326080936d1a8ed7cd777121a32457cc3d393c1beb2b9b1840e4ed208d6e561639054016974eddab1f0142f366a5887bea6e0c0aa4b125dc113abbc4fce9e11617b58fbf69cf8fac3d8f37df2c58ccf1589b410fab00d29df9948f228bd78e19e7ce205b47e73636d9178a4e949984c541b41d54e2a5a3d77ce648957091832654514027896c351d3575ba2b44dd77d88698625f8b3a5d5b6cdb812ec62a95e59c64dd64afad6bd63859b5ed5d0695863f9a52d559939ce6a942b4946ee9b940a093bb9f61aa683847cfdc859568f04ec6c013edb0c28e8dfccfb52da18deb9f4ba85d79849b607890c337f7dfecdfc60ece4637d6843631740bf6aa98d496ea6d291cc7cff8615743319cc59d3fd67886377dca2322c9dff8bfa8fc8b093bedf6740045a8eca13d2b4d8a0c8faae9262de56b311a2a65790c6e80d9de7a0a3e336cc32ed78c5ec8fa3c23f29f4064dce2180510c29e2113f364cfc322414716b3e80c8fc96f1cd5b9b18b2933bbf0d38c180c63f884b1037298ac107168acffa9dda73a56e39c06d0fd3c4af576592a5fa1eb8555b98b42baa739efd3c0638afadf08e3dd43b429afccd89794503b33089b037b2947122d966b30575b84fb481cf4290155d63540a9db5fd052a56d6c4aad41df0209e940dc949d91b2a81a43e2f6ef2f1614bbd578250ea2a566f1f9081bd6211c438a031c6a5c412ada0b166b013f37f6cb0afad3ea8f75fd8a040180ae1465cf1bb808c41284af3b83f6048bf6b3114d3c332369bd4736053b52500cfecb6b3bb035684409375bd842d2bdd140d1bc4269d384f7659cf522be606c3df5b9eeafb459e47dcdc24eb514771ffcc7aa21b1baf8df5c5489b0824bbaf1542482d11c8f2de3e22121f0121583e4a1643938995c17ded1d09667bbf09407d01345425a2c0b526d69247dc7527e6fa2ab84836af7639762cc8f769312f6b8187573d6e2749019312c3dcdc97f980b3a9a1ead348076d7050a07431a51880a65fcafb9025b64243db061d355b246a299c3cf5804b8e421370bb7f68efae0b0dea1353b695eab51cba0ad13c30a8af46ca68b462ebed2e5b57b6981404c103043b669badeabde968392411b20d431bf7107b7aeed99bb66235b48b02aa9312048826ccc57bd02233ade4b59e8863095e18a949839af0e26a99b5bbe7590dcb6372bd70013942ea73675720eba019e79f34a43d4017d2d75f6bf05fcbbefbad7c6227fe555865afbecafd3825746ead7e57803abfbc05d8d8233e2c6254bcaf3783c8f91e724e5e63c8699cfa46b1353e9552b9a19a8abad68451635c7429e36ae37fc0bab548bf042734db86274afe57b451e4e9fc7253066902f326b7b33bdd4fafea46dd521df14b14cd3926fa5f258eb552f57b61bec2dfca18084bb5ea7d893c50e3e95341358618177d4ef9809a96f101b02263e87146134cff2d6169d61cf623311fd84e39516de29dfab9f7b8c868f4c429d8cd7c920888cde890b1fcb633a959d131b39ef3841feeae88dcbd8b477d9a20be87393646a454ff037ce7355223cdf933ce5892f2241a8ac15f0e56b4f7ec472e03d8f0e104855d01bdc17bc775dc69ecc5dadb7ea4df8af7041d5343212a4010893034bc307864acaebdbb3ade2e34874fcf0e7b1a84c8f2e959ea4a5d012de92f88d978e96e14d5e7be78e1be7f9f5a92c48d7b4b8020105ef82a4e7742c31a250df8532b8943b30bfdfcb6f462e36a3247fc0feeddee1a25b38cdc41fb8cb98fdd8ea6f417d78c5b5112ed2265764b7469c4a260aae450a8da1758153815454d05a52a4785a86d8154c519116a5830551dd13e524557e33452e337e6db8ef322ac561c356e363a9bedc3754084da0b4255ce09512b8880ce6d1fd586af33490ef5a7e02030d030fbf2e93a651b762c8a5a83a98263217cad5b22f2a4cc85a3747c0f131745e210e66ccf01d1566b0d44fc491a84c929dc06242c8ac4fc155328df60c3325d87aaf916b399f26ae985b70445f74f0183952bd8cc87a6cff81fdbc154523421c2bd58b3f0ca991583614e0b308cc2cf983be05d4bfcf21be15327850e79504226847df2f40340ed44cead255616991f39857de1415fefe76bfd0d5d62154517646cffc5a24dafc1b7259e5bb3ff0b7d69189e02f331d8f2afd6bf9d93927a2d06878ee891320c9fd1f31d4e485c1e6253c0c9d797648aa98fb339accf0d921cb723ae9278495bb4227923adb062ce22dd69aea9121af03f7b722b1bdbeda912ceaa1251d14de2d1637d93f9872ec99300009e54422ede668a201bc72315be25317a56f7666bef150bdfba5a660b90970d305f9de40af0497f29b28d4ad3bf308c77cd4028a2730c49386180c1d4fa0b439b02403e2cfa0b4385b08a96dac080bcf4c32707e6e9d776841fa591777dcf0671e09a07b7656c0c7093d3d71123cb4bded2b86050764291cf10d08a2b5ad13c829099b039603ae7861c0df47d1ef36558a65631dd94e405ae14d79e709e216eca51d604fd5823475823739a4bf492b96c0d899da86670bf6b032372662c54fb1c64becf98281b500044c839bfe684a253f741a19d3f34cdf95febdc11d5608485217817c8e6ff49a3bf9f7da122ac797ec66d64b03ef0d1ae298941ddada80c9159b2f75972b28d6f0a78ebc2b23cdcb43ae9431a173ebb54d377d2cf61011d518763f5df8413574ac07b9b5c3e946bcd8f7dc20d841985063bd3497309d744a781367a0238b68cc3cfcd386a20c98aeacf0168066f5352851108310552de8936fe1458c49409d706f378253920c72d05ef48a4f08c1856852520ecb11733a01c90cb045258756ea449335d5184077ae11b3c457737b1c5146c631c8508d2c799d4b12bd011c3d565779dead622aee0abec64aafe786c79b4b8e1a973e455edc12b6201ac101be75655d7b86404a2c523e4b1844073e05d21266caa3fa413b4ad60926be891ad2828612154ca891117355ce130ffc83b475df58b5de0f0b460224301fde38a4b2ca5e2ac8addef0704c12fe0fe55fec272d042e95dac413cd28860dcb860b982d4b67e1372a01b65be33f814a6cb14ac3102ee0c6e7a510c4e059ca04867ed04d448f5e1c602ab127575ee246051295c2c69c502164235db02c8824da54cc2f15623091675d134a62a9a41a7fe7150941aa196892986caf4d1a37719ce3ad69532ec04f7a4337c81f77d1e60315a0b3f446e3fb4ef9941d508828bdd1ad053785c9655e08dc269ffce3eb09913e18b6d8048c66d02ed61611bdcd2a8be4654c6e6e8e5f45fa8e0a15d08ed8712feff7184068224ba5d32f723c2275ff072428eebcfeaf7fe9cd936ea1105bbbbe5d83e0f8f948cdc84a8a2282d6215dcb2720a5113404e024b94571a7cb4cce0485afdfc2ccdca000b36f2fd1ba29fb4407fe44b6365cf4c092f292ab9385a06add3fef9d86985851adff20a6da815f40098a1740b805f54305b9a482b4dc48966bd496e39de51198d0c37be5546ae2914ae33f6cf3c0e18e8b0f82051d4f1c979a259e82c49b3548d39bb1b29da993ec062a7082025a27bcf2150251872bd5ac3db38747b66ca6710d5134249fc795a68554e24aab4f2647782b27eb954b8cf8cef0618840817c09aa3a3010c2854ca9769a922d6eafa7df67fb8b64d26d98d4d2464aece2ffa5b6c9d138df5a1644c2114ccc8173b18c7959db44278a4d49cfbcec06a5e1ca991e83a5cf03874c5e9898574edd507f3aa5c28410186bf8a64749c740f46a1cf4df2486f316179267c1dcdbaa9b8dd3ac0aebde226f4740cd4e29e9b7705218ccc3ff8467db45403de8ce6d2339823c2909a2e849fb50ffa4802c96a5d4ae609961146e89d18641fc62327637c4853073a6745a6f566af9714623e5a699f799affc947ea3dc8558cbd72b678419c6a08e58390df6e1202616c4af12679d6f02cef39001434b6813e1153b6a39bb1005bae9ebcc95eb730b4fc9512255df9fd077bb155ae041662ad6261cea5cf2729b935ef45d209587f6d8eb2991159468293c3c76d494ef18a61e6a7805789b2525286f30b48499df75377bc609fa986b5cbce2a70d7f7e775e5c67fc16cbb480719120abb55e2442ec6f48ad0b31060902ce6e3784b96d1f7404293ee961c9a045be6ae3461c1136a16b5a192c797a7dc51b2ccb6c0a7f0912511099ae29943c6f4af77441c79d30612f680e9e7eb17f4b3b0d605943099015dde5f29765c22a8db5c04a0c4764e055cdbe3afde7fadb380e930677bfd9fffaf28701ed459e4fd3da2c78fb5b87786041167822eb0584952c3d37578d0d34896292b17982899f974cecfe469ba931b28f81962272ff05b2f54e932f7d65026ec3dc5ed4ddea8f8d9844fe91d8d85c0b1c025dda6802a6d345ebe3abd96a3e9b50ad9b3893ef603d9a86f41152b8c870addd544d85f84f5b464fce4050d385d1980371ee9f2e3ef63d46b12484a82b2e03e17d9fd2f2a8abf77904480a21e78141812f8bdf7bce2a6cdbf90251d77b60420809c4ad058d1258ad6fc1ea0083f69a25698320004dde378f8207f34524d1c61d65f61781f6069edb599c9830b45bf15a2d288d1b8c325af0c3d6b4abc8d13e95eeadb3478e1e318cd94b1a6a91629f6986cca2e3e77c6bc1ae722d51c28d23fc2b0635675f01f11c0960e6c3f4b10c85fd11a9d33d22c8e01cea8758319dc49813ab7d3e632fd2f10e168383295e13fe1a62e0da4e0ddbe3d0538488e1f148cf73a42eaf681c64e52c1b53024f93c080682ee26b8d4adf623bfc2568f9d7d5af2d2d4b9d84a9e566647832bd2d0e1cd16c96313680bc410c5c09f82a708ba55b1d5c7b34b9e37f212033faa2c6a8c5ffddb87256927bab1495c8433c234c7ce58a19dd5b44447222dd3e7190779ec217f24121f70ea60f4e4f1f5c6bc71cc2813c9f6c9debe9c94af0cc2dc8f153508f9bac1c9e8365a7902c5e1c72ee542de1354ad52f29b1b0134ac8e45a41e86c1d7e30c3a1f19abfc0f34b8f7ab5be311bcc3b55ffcb0586f1cdf4b3afbcfa7fd2bc56a5a99410380f919f421d7a86aff1bd1bcddcc312bda4e557f3dd4d7e97f710fc28b382848bd33e47007f16b1ac1b1d316ca866c43fdfc70a386b6f1d34f0733d5ce9ccb8eae7da26c7e6f4833c40d059c9c727db0bde4a3b3ba6ddd3e45c0aa75d983ea3b050aef3501bc90651b4fff32708b42e29eb5a70e842ac53e3350947f0d69d709cee0a6bd49c875de2f64ab6512126b9f7c764516394504d189566da312d6a6580d563816faf874f69616596954b7cd392355e33a5d6bdd3f12a423853953de1c68a3533af3ab154447b71de53e5801dc5ab4cbe4ffd9dbe19175f941dd5965fce6a77dfbb61619611bfa81df2a0d1e0272306f644668356c80b0c853493a6d2ffbed526a4395e328fc0b93afa7122a3377356688507600a4ebcd107023a01409747d342d70cb60d0609cacf9de288390bc913bd4cc183bbc02ef310cc12d26043c34e85bce529498fbd26452ada6b096f68900f921eae6c30837cd526b1450b9fce84ee4c1ff43051f742bea1e499be3d231129c87a8f67158f0e1fdbe7be401123cbffef94c7daee296099489f3ed21aabbf9f760b538bdcd48a795fe61924bfa5dd71a34f1d88fdca33b63e4af7ed7b5d9cd6095dded2b7e873133433333f8d8bc3ec13c10e1f361f56d88b52d7a0de6e9681b4d0a873daf85fb6875915215f24c5c3fbe84cd87ab6bea1d0fae7f5318c210eef4ff656d869a1d22185f7078b185465cd2c026add78de0e474c5432a0cbb4409aa0202c9bb03ffa03c7082927267eb5c71a38b71421b2dbf54d0cb956fa65df890e82d52bc4f41f43ad136f76e12ec85274915889d0da1138ee6f7eeecfa4c4295e5161431d9d6f82bae75c2715f23f195ddf79242ba46a0c50e889a913855cd5c9153e90246ce6e2fc1f5114f215261750f24543241899aa948657839e149e16e42d3d435e2137eee17225a2089a72a695b1ab709d4a4593e93cd278297e51940787dfc7fbcd580a6d746ce2eeeac4f8885925eae3fe03a6889dce585991300b1fe63b1e4f7f17db2ad97bd10d545a10cb70a5e22239ad6d4b818dc21c5d830cf7623502b1ef500bcaee606b256931af849c7a6ee4d40a38d0942ee72305c41ee61f01bbf24ac0cfb35ec3655d8d6c2be26bd0b703820c0eab42c11bd31f30c31bfe2f2ddf6d5785c7c0f94e39585f2f5752a4ba03b62229aff68b3ace0019be2bb4188ab8249fdd0be080efe10e4266a4ab5923f2e92ece497e02eca228c922f44d4661f363fca9104985045e3832251a3b21dfd2702b97223a3eae2ff55cb31f02f738d63828736fb23138923ef1675b2c488b8ba5914aa04dde4e1abae93d28f1f66170743170f88238ab11ebc0cc0448868e9a0ab391c2f97cc6d997ef4e83e99312e5e7ac5e43634384df8ac2bbae24b987207c1d4fff8083ed30c4a1adac46d40717a7c4e1704671b719a31bdeb6ea6a98c3f9c8f719d3668da11ae8b3eae88010bd2225cfb6360fd4725bd84d780cb678cd9f8b9cc0b361c1758a546bc3613de34617f500b0f93ddc75b59813b126ab1780558c2c443af116a54a651d8d0c157c10df318ec2485f6544dc1a1ee9ced48214fe293351e79e789274d4471b26b40c80cc69c2e1b2c09c33ed7ca6bc78db5ef391a76a547772c0f3e0ae8d575089e2559e24b17c34bdf08ed35092ac4b483b176c60cd64e7a3a92b8df9e00f0b76f0baeda0519f5e3ab6398d403befbb3d2e0129222d1d456c3ffecfcd54bef23b770e82c5b7639a3813dc2fcd6f800c51e7894cae39e5da87b62d16ad8bdb91873ed3eea0b0465f239906ab6abf7477324051272c611e666e7f669c7a689975010d5f431222c874b7bdc905930b4448cfbc40707cf33c83b912ff1cb4144a778b431c270c19f3dacb193ad71e960c26c20180441b3302fbacaa8a18725d23b28b42cb09506981a2aacd53c6d7d092004c1e12ebbf9ed96906494cd5f19f0a811394f7215ce9f7f1e2a7198c4d8ce3a20c3278f2fdf3a7158c0fef771bf601ec38c26196de6686999e0477a4cab49b87cd4ae1444febee2af3250369f177b22efb02724617315d81ce104f36a6206f3bb9c64e8714b04ea0061fd94c452c8a6c031c8453f93a09d4cc91b9202c12d0f88f04d276ef45a107aa6e8e5a6d880b1778ae69cfa2eca31179c1be84dc8f65171edfe2d5172e6ada67b76ca56f56a5a5a764bbb418455a6c266f151b13a52f38bf72b31102697814b7a3fe18dce388934930dd74861c73c210f25f890b40854b34dbde4b74675375af1c20c42918197144226d9c8e39b1348048cbd5822007b25f1b90b2af1421dd4264abfbe90ebbe58d6b77252446bd609b27a5d2c918ba5742a68320020f496f2b666ad49e384d04eecb6d92c220720d73d1e0fa8ca1a18be4cc221db4b0f38fe3b4c1dd100459a378ad5b23011ad94c19063184ff085e7547800d1c6a74b611e0aae8b3dcf0b2d80da503124f954e5fbc2bc27e4240002e1c42f760711c42094cb0083dfb05286960ede5fe071a72dcf71d64d1138bae6126c2858e7e449c4d13c6090a7e6ffb402747473630823798364788a2575682b660d942bff8e8613bd532a1fb0820b3399059eac423e40b847c18aeb0b858ebd07595a9149cc62a3249b97585b646175c603d906f40f1f424d167574aa6b6c2fffa84b35a4081711d8823bb1388b7c3c815f60d1455ce80d91307e88c8d69a9e1da55ff15a0a31979591ecd8225883f3eadcded9895d6123f899a55529abba553d5325caf0fbdeadb02982d29e219217e13d9dace60f1e65f0fa451866b16df3780c3e5159a2b095935cce1c9d18b25f21aea83638b7beee78a0eebf13a76b546c4dac83dd5276f7759b3089bf3b0ac37b8a9ede129e0e508b9612628a2483f4902e3aef27a4e8f21d586c1be009f0854e0100dbecd704ed9b9c2a447c1bbeedaf4a7c2ba84a4459d39f2228b0a022b688de7709dc1ea5c17f91b25a6d220442348198c5d779208efc0138695143f93589deea370e57790b06824ee954276ca676abfab2d547909de81149321becb213e3cd4e9dd8b4a0903e50c4e8ee1997af48c02789ef8b16e2b55525d6962f95b206a15e03c91f0d8c57aa9cc1426121eee97b69004098988174ba1af6dab07a903a41d22af3944fe55cd72f2028939f162c4546280725e559e91e003e362c3659b97d91dc72508b06146cd930f5d2328daaf3d616544d350350bc82ff574e00b7b667af248702e4a668dce413ca64a5dfd74b4d056f609609c73b5bee156641624316f0c923c0928bd027bb3f0a1b7ba101675b5f1cabaaa462037ef9f4a68a0cc06b70baad6afec034af021061862e0f0d920baffefed9ee60379f34128021e811460a7a5fe5f02ec744bfda93f21c613958c237ea387aebd9f52a52e0459c11cbad2d512ca8e2d58854a96cf22d76600d5775deb5aa550a16d79c6dbc1b25f96c5238869c0a09a444eb7833ec182d94730babf742da93dacbc34f638a38263c279e05bd9c65c0e87bf665ab47b3b3e852544db661fd3b0005e5fcb0869936d1cc7827c7ea8605f93100944c544baef0f14e6db637543208e292034bf34e4929799c44e3c443806c2b0ec1c73b506af764c9129fee94010102458f9300e3f1a157f0a6fc01658e1467fe407917b9d8938c162a653fdd8d6d4d170bf01551f363eeef7be1cde6f7374a2a40deda5bede6b50227a25e4dee27f0c206419b17a2aa26f3ca880185203dc652898707db2d57f5b33400133d1a691cac16d24f73999500072077e5e23cd9f7a20c308685b872b4f579205bb3e65b53b710c6ad7b32d4e587d40aca4bf7b99c4228c003eee6e0695be3a6f728e3f06c3cfcda10034be0573081d14076fe8ce22d5931f45792095effce4080a26753446fc7626e33617a053a8f9746b05d08a628677e7140357c1d67eb9ef25f26674a5c47e320130eb6b091c7f61f527d28cd36aae9f0e6dd559457a15d5bb9de86abaf770795c4b79af052c820e11880a00c44d40c4d29f1a9ac2b8af48ad9705d9f44c7ac03d72983573b327c4ada67f534e8dc7b9d652816294413d6597978823aae03fad16b23275e919817da92a4b5494b52557c41a78e47d1c716c8fae02c8f6b39d382667a563a5cf195f58a6964ca8407ce3e0634d70bb0c1a348d77f3fe178c8cb09c54eade6b3c2e71a9686e85557f8dfcc28706e802b8a32cafb39429ab5f7452aa9d4b3dec02dced931e00f2f453c71a27cfd88d2fda413cc32ddfee79a97fbea48e8de559b6baef3c47ae2ca6eea68ae5b4411e070c24f10c875f86c0fe0cdd36bc5933610de558953ca25365281b74f07a2bf321086b1cd0d45f1e9019be01b7671e34f3d40a820d70f4ad70216dd3cec6c1796262d00199c4ce449f71acfc8c52f950e1760c1ebc2f51e71211b004d31f77c7d76ced806c5b763cd3b7516603cfa7b60639c174cf2811316084a2ea7311bf3113d0c819741e8eed154a54a0d32c1485a1c98ea172147ac59d426c68e87f829327ec231ce1c3a11a12c080d34500f530764f33602f71d4b8ac734a4e1c0365207dfaa17f1a41cc5d7ce81b700f43e2afbe761d2439c99daf624e32770892b07c6503ab9c868b79c8e8e9ddd997c895005591d41a7c28aba2c493494d6866d4ee2041667febc9a4fbb532e4d957a14bc246d34e22ebfc354c6ddbd1e3e61e6114772cec872573c938c661caf49272fc96992a291e46c7a032c8f0d5600a8d8a798a531b466380b1ce7a9c4510d9d0bdfe40c73cac73cdf2cbe9cb65de87d569a7a82b971bef6ef031eb45d129f0018d1480641b4e91ddc5da99e30e420a4a018963600b8ae2f849e7e2247bafcb04a41aad1d23b627d8ffe29848446905f76c9f118757ba9a907f16c26088f3c7a41b5d3f6393ed37cbc43bee52bcb3717592e6ec4f4eb199c8ab1439e3654e49d240909f6ae5700fbc8c81d03e28a8c749e11c8a41e291fdec562549942d8d531c902a4cf1e116efa6c3ad6b86643046cd890c6679a05faf5517a934843a1f43d72c4a23815ae6cff4182a4247452fbd29b0e17da5009b6606086b593b084e60e1e07621c3d828d27a311f9202ebe69eeb06ea90da4d372a216cd60b041d8cd4ed438903c05042192ec809444fcc3d2d09ba411a18f35eee0b4f22fa985bd98f63a9e16d43318fd78c6bb7d88553696316f5a28226186a8b864d14e9e3c9a4198b2cfb11e80c241cc7a15835f13d2ae7e3d3dfd29ac887fe3945e57c3c8c2d46be4cf45bf6c41f6eef18f19963ce5661142bb0d982d0bc57c808bc61ac42f7892cc47a4504df4034277191381f8fd47824218bd97b49de4c44bc221ba900bf1f4b8f90b958b442b3b62c83bcbb77addcf84876f71025d989918d4242e37f5a6d0473fe7fed92bb62b28dc11a741e43f4413665da01d0cb4d9fc51bbe3223eab33dfe9254f9e7efa564ce6aca7eb44a5a9610ce8efbc82871c64982889434be3530dd6d84d5fd3bd37648f61f795c232cbc1ed0338abf4be12e17d878c555f1b3114783b2b0c148b1658dbb7ef2623cd8023f0544827f3e84be4d69621c0acdf87e06d27620dba0c7866a03233e0db6aa5a38860931e03a442246a98f4893bc0ce8c8a93bcea5d0e7994d1b9081dd695ffc4b4b4bbfefa324595cee0215d19480338c2bc02286a92eded390cd4df76b1caca405351525dbfcad4c8866fe7b9b9cc79ef585d74765acf4fa83bdc332adcd1d8db53f011ecf6e3a5863dccba6ec0c6d1032a49e3f65afc35fb867c15efad46397b309c0de591856f86e1f812c3bb9b61bce2ebe7f178ee9f83310e97bc84783b186e49e616447b6518874d2b6008c3109e84d20294572ffc92baf0fea87e17d5c45b1ba8d4bb44e1412c55a5daac2f23c4e60eb88aaf1d4881edbd4bd23dc36bef69b92d3706b8fffb1864b3a0eb01d4f826efbf7783a5974b2c80f3cf2c06667808bdfbd4382fe34d1d215728840c3fe843f19a9a10e4b59bd42ed0e6c86694403734e1ac8209856a2c7124c59f06909d659ee309fee37c1d64a1bc2404325df63fe507d872770a3482164a29c5941202b89d3e4eb15dd0c2e5f886909710903e7278aae89bbe39c988051420417439e6ef9d9b29cf721ac3abce4b005ca2a7cd3f129e9b17de5cc9191fcffb60165d6f1e81c82ac9d69044a3fe5f4ae2d15e0a74c3935f0f289de8d940bb9439b8350534f2d4b06382b2b01a1d118571eac4ceb883874db316141213f157973be466bfa0ad709d00ec9e0210a2bc01754e93434eca855f3b8b5ee661b33e256f837e8815016211423b0cd080b22f2f7a6c170c14ed47d85a58fa5bb365d0cab255abd8e2eae31881e0f0d6a9eae2409da22865e2357b957da8d0274cf59a35b984e821a9a3636b601cec1a43d267837644c5b97eb2b036a9df9036d2698b494c6cef6494fc30006337c30e61d8423fa40eacb01c10eafe872df6bc17fdc66244698c90598930d11d4a42017710865125e3e62fecb0f02929149f31a982ec6f4425656b6cff89a4eb0228505bec77c5a866bf100786dd8b6c0e4e3851771ef59d45b8990fbb5c0e5a80c1e9caf0aa1375aa3bcb648217ec36f01b2612f4fdcb06b74e8ccba2004217d582a997ad2749d367514085cc12e2f2a98fd14c49652a275c355b5db1ed77f6ec848c1270380ed0bd1e547793078841b408063bd1ddf450e32d4413d23bfad47eb1e0e3629603bb570f600ac60bc84a882709be053781f0f918b08f6925e0d3bc4d578c0daf619c3c4d2b19e46afddf088a808b4017aa7be2800fa8a5775334eeaccbf09440e0b7eef82e4b160cfe1add551d0d48b8f1186a11b11791cf0343ee67b79f0ca01514003ad3b1c9187c4a20afc8515978afce26e731fe3b7b646ffc92b987f30bfa19d3d80132b13a409b900e00c554d0891043768b20bab5095b07166010621a9f8ad088fc28e66e152ffadbc7f3b41448bd8d5ee6ddc6bbb1af7e0b38c4d570c23583792f96312d59631fa008a947a6296bdbb43f2364487cda71578aa420ab19ee3681208d5a9448f02d531f5d6548ec65cb08e08fc549d1dafc7badf96b66fe08fa3c08516b7a597fa4c21d35dbc5aa5ebae44293c5dc97c93cd51d4894818728872d3faf07b8b5028765506aed73965857de83703f3733779aac41af9d540b8a5ec399eedb370a3fada9ac21232915f60ec600ebf181177ed9ba0e9bb2f63785b29f894dd13022aa58fe6af2470ffe6d10afd80742936ba8ceb69025481eccbe25810cab301011da2ed095d104e3e8256bd3769c3f33daa04c1eae7e881fd049585223d2a04948aa896cd0fe9198b42d934ba2a33c6a677632a7b76dae85cde84d0904e85cfe293e7bc048e23657b6d10b2cc3e4c7e5e51f20835d081f1a280ae86e220ca9f48d42b297bba456c423981150f1d0bf12732b1968d2191a9cb2b81af03032e3cc50a6c8c055b27e4d8233293aef733a98d0bd7f15ab6bac6cc106f17ef9f8c0166f4392b484b76b590a8192e6870b28d975ca441bff050183219717015a547232825fd7723cef8b33f069955d28a92043ea8b22301a2429c81d91c442a01764b0306b92e43f546439fd4c2979cbdc2e5ac76afb0c75b18be57b321bc1c9c5ef763be258057784ef80f170eff9fdb84b70add0573633eb877b1999a052b4a377bc4a1b061eb6b1d4ae48fd8833c387a4994237c79b9124cf135fa85fad28c4429c201ff75ef2ddc5163c6d2bdde14552f2db0d08a8aecf7049f2ee3fdf04806e4ca6a1dc6f2dcd128f234c1c0194a7437fa640291498dc45a687d3ceb5206a9df39b91f9f1ad85cf29faeae669bcb0fe19623b3043229792f469d31b96798c467e32be76db2b60600f7e737a60c658a24455924db0a845f2aa448dda116bd2dbb3018e7632f3d9024dc51f126225ea9ed079e9bc0a74d51f1709052084d81608695b1bd401c43e7300c8d03e256336534749d5a08e981aab841a88ee39fc35ddbd8bcc8c2a4ca2e594de81dc168bd2a6db2eddd018808e5a37d8463b0b4047a1698e25cb558503ad2cf3e6f344c95ae19fa1d615709164453d7100c39fd3e64058940fe414816fa9a3389968ac16d244a67740bd32219993a2e4c0cd9221f43748ef5d6af3afcea8add791e382bf5834659e67f0d4ae89e3418ea270727b4df5fabc9d85b5c58bdc7fee0801c33caed5949dbdbc469e0b6d90a191bed22fd4a4f8c76eed69becf91ef53c828f58d5db22d69b82403ffd0130d097cd0e93ebc4c89668fc73f3c9d45bcb6968a66e1d400004588bf39e2b2b79b9613d67d89380a3773edc4ed1a5431ba7e4ff994d3b5f186ecbc73834749025a3c084f9a81291bc6ac89671e5ca374b09a8b2e987ba2c92b09bc8e32ccdd6d575df9471bfe18aef822ace9d57c1aa45b8603dc3a6b6a19963e8001faace675109f97ef29fab7e831396586098cd194b32fa56fa0de927a0ca8e2a51c8aa1e80bba3e391a0a516738c18d050cf9cc63e26f4b03ddc8e6165f903a3ba43fec22e3cb71b66e7ebdc75045c663133a3f4f0d85d05bbabd87d68dcbb62897121e6431faf747d2bbc341a98732f9fca8cf4abae1c8ad3863e27828b9daf4003a13d704d07a5c4803d34b48b078530de502f16e50c65a979fa5d1ae38bc2d2f7b07885409afd302aa185ef98202e9fab102a258ec1ebcf8a6db3dea579ca2ab5214e7803af7af64c7bf89332ef8041a2c9f973cdcdda215df3521a5d17e69b64661ea805fe2f12e3be5ca970c1a7cdc30f5b2f063601667c5c8ee343bc0e0ff683675881c6154bd0190ecc61f99c2ff23c5669b4bb2246f7a1372bd6f848b0aec2044180b9a57955ea3cc619f423544c80a32c3e3477e0712d9cc163c3296818ebe447da0280d65a706b327dec589031b396c58c312d9320b753054839ce6a375ba6e3fe31fc79f1e7c31583cc1fb32ad5c28f43de328af321131868861da1307f395d7ade9b9688e79a835f2e58c42525f42e1dd861f222e92189529bb946c575d888d369b1222d8674fe74242461e7ae36db492330e03e08610fd9d4129744842f7c4844ccc8773dbe414decb178fbe43b2bd7190931befddd3cb69d95edc889b2d593f501cc55bd97fe542727c1812461c873adb21b1c706eb9a7b5f2f0a69cb6eec50490d1d368edc8bb6ba2d7586fcca4f5a6a1eb3abb18775b9fe9d4de2e63db7aea2b63b86d95446f77be0b9934d7325d6f88e516bb48a9b8cd4250ea63f8c3af8d315453fdb7eefed59b4f1bde267fd216ca5ad18db6ffe5b0342b20aea568fe55ad098e822933817c52d5917a9876a1e600a4619503988ec47b5ce1abc575d4ebec3762a4a9c1b335cf24831935313a9b02cc1dcb3421e48360ce06c46c666c2f9c1a7d03744e4d24e4dcbba35bb9f9beeba61c5a9412da4e7699144c5f4200e35244cf70a2b1441cb2070b965b031bbc04572fe85524c38a5b723cd43e39a93b87fbdd57561a2f3591be6adefe1e11a4ce0a21517e646d51286ae128f5cb2fab8bbd2572a8a97dfba8fdee241fd889bde1e32a6bc9b887c57b41b0cae7f9e5303e0d1c25e36cd669b5cce6aae4d5001235d1b80dc631a5cdb0649573fb842950b42bc8e113677b94059ed169aa99bd82d86c6719af285d71dad110a4003697b0c876cb36b499228a12ea66abb5d7cdc506dc7eff1476a425c3c806a8dc5ba68532ea8038219747600eb2a816d0ee0f37ad9f4ecf27085e8250c0a5cfdbb8613b71215b1f9c36ca949d3526d398e57b20ded2e77bca9b58fa21897c5b9186378b9a7daf90275bed0028b17427c9e84bddb684091743094add181b7e1d37958b0efd40edbae350a66b23d78dbab1e8bba7b9048eb79999f9d7d03b332fd3811cedfbfe2b4af95a3f4b6e997fc403e65d5d524e403eeb7f422b15c5d2f9c9bbeef1153a076eafdf2800f6157fba54b4bbe568c9e1900cdb128d74e993fe2a65ae5e311426083815233d25b1eb4af21f3d40d16576bc2782ca545306b820dec7d6109c8e73f5867f4be31f38226250d5242de88ad54824299971341efb5790a083d56c04c23bd8738649f1abceaac563ef09e1ea64d780c9cd782abd4f95d2184dd2ff159735f96a27f26c15d089ec4f07f38611eeec5cc922c434dc888e6573942aa221382fd2080ca6e89afe1a2090e00c17dbf69c40673619db38cd20c6bc7c9b6f9d4e96f9f3fd8247fc74ceffb5b180867f667173f5e2859b3a830072fb3430fb06e1800dacb9d98790cb81abe8536ae3a10b3bdbfec1d5f8d7149095a9572f90f2fa7aedae02d9231ae0ee40a649192f190261016f386b8f4c878136bc6d5f6d631f4924c88cc3f1543c3c4ab9bc3f6b646fff4a803b4e2ba04265a12cf6745288fde4441a2c8f740d715efb775039d9ff5b7465708bf1d39a2b24d0bb0cf021ab78ef6f00eae1f635bbef5d4013074d1a8a1af632e7e24db923d8bfdcdcd579e6665b08ace019241c9c06cd6f4dc4466ed6d124a88eb440c923139953a4f9adc3ea4347bafe7c181f7df3d696d81e99ebc873c949c48a922aa4e359ee092b84d82a4b1848fe019c13ac630a79725027fa1f4eeaefedde826e3b6fedd9b7fbe8beed1f7e560fe4486d7c4bb19669e0dca7d31117a1b2a1f1b428c0daaccc84aa16b8f19754a7bac74dc0df9eaf7a9763ef6dea9d86093c627166f2b4fd2939fde81f51342b7b3990b5a1666d58dee542aadae4e5baf12874a4e4499f5475efae89164ab73775cd133560bb9718700a1973bad5704856ec3a1bfe41cd218e90345e68020fa2a561a1c23b7905a00c7dcc1d471da9a3cd360aad7b12f465dcdcef4ee8512873b3e7b68688487737b02c3368be84a6a8e2643dc0503051142f980273a19dad9c9f940a2734887db7d74384a182db8924c125e7fce19e6197d9803b724aed1e99154c7776b6cf95ba571d20fc5e670c2d7ce6c0cc4742ac8e25e6b2fa89664c72aafcfa6a2810b2dddbaa4d83d119cd9fd53f5e5851eccc78eed86dc52aca0072a615077d393d6c89f147758885f62de071f476872f3da343a5bfd5a772e4c29eed726285b00ffdf19a310f23016b6e0c5922fc7c4ceeaf579072946af901cdd41ea3d8df4af3689dae90f0660a224e5e46503dbe8d02c3953bc0456977d20e7769c656be321472090431d4a67cad40f0c2a1a17b68436cb407b5c58ca94c4c35f3de5a9037685be801c6e4b82aea79c12f2d401f94c3b4eb8ae9ec447315307b6aac08909aaf1d243a55117ac1ac8b6da80d5174a317bb272155177709c6460b086f5c9e3d5a5468b410c423aca339d4037481382d8518fd6ed50b7e4f44b11ddd9df716e7d1583a3c1781ba372cad7bce9f94994960af770836452d2b92dc7ebca87cd679f9f3a05f81a62fcce4d908bf01a95d0e0e5e7a397b72c70f4c904a37bae3ebc140e8c0666057a53e88e52e584c800f29e4cff349e3f2c2bd38baefccc788c4dc28b0f8179155d70f1a78bd268d979f120ed660102b42981e9d7832fe5b7039d13c7b7f1d43040135837249c4b7637918eb2e9154d0f6b7bc40483cfb90f99b14a3357d63994de7d8e223ff6386247d8738c6ff4e39ae760285867820016cf5faf778eaad2f6cb81d1f34769824c6b26fee2620bd3e4af145f1080f6d642ae201c7ab6d4cd3222aa48f61210594b0e4a42d759a9abab4f290708416bc62e2d40748e73bf40b48f2af8d15a6a7116c8b50c3b349abc94f76f71d6db5d1e43c912af8cba16f9957ab581b055adec250652454d9c5e710e53110964582958df19adff42b63250b354e80741ca0a85bbf15e648aa130aeebfafdbea76d3c431c7bbaf82bd4d341e76e9ea1fdb32664b7c017c5c14fdbf53d50f10f3a61527ec4f1bbcbfcd674e667bdf386c6f7c29ba436584c186187ca7f6c79ce1fa5fdce207123892fb99972b4c2cbe2020d501b6a1f4de73a542b87a25933d3d2a39d8216e63dbae2dc99311121c198456e8b8b904a4d38d072c73e631ab326e510ceaa3748e7f286380412d9be74978f822b35e5f38255543f0d620f82a1759f97c6a6927e4e43da9dd81417c1337dfbfb0a4b266cbe8c5ea0b43efd63b476d20abf141f5b604f6ef27d353b2cbc8e909a7df2f185bf993392cf785f93cb4d1662214dc7c668f952bdf1a1494be9540e2c767209936fdde5975f58d85606aca68950431a6f7d85f272ee7e508ea35cd2a474348fa0457e199cbc972b2e381d315e3ef7efd8b41a3055f9f46ce0abaf0b3c108b17b1a8fca50b9a131e6fcf5bffc9da113f1d5658d3eee0baa7013ee0be477c7ce9a51d124ba176541127fd8c27121c6dd357b8f0c61cdee1594d22dcae3d789e8c35298edcb615b4232169848cf9ce8c040d5fcd810c9df34cf1bbdfed497353840ef7ce43c128acf9a08b1fbd9bd4679b01eb16ae5bf931f4b9b9a53f37dbb96da1f2411f0dd4f13b4b370f3b650514b15850930de0c206329488c888879809709cbb67d3da86030ecca41a8fc3abeb6fdbc49bd37f8475e49885ad530eeb0c24b2404408696bccb11d05045c7b6ac36a08ae42f6a613c54837bf092fb8cbcbbeae85ec4abbbbddfd40021d5bbe99217bfa9770d2e93ba5e8996298cf6d843274dbf9428fd72feaffa3b20dded6ec92bd8e59f80adc1646cf5146033865f4eb85792d6a91c1b35d3e3e2b1f7ba96ff6c53884359b6236d566420f73a6e6f1f2c6e04c2f5c4916df95ed51d77479859d8809160a5016e43892933c4ba2545819d84a802d0aa220f498b496b600e83a9244663e3b382e9e1d8360240cba91b1dad464a04bfff04b1563f47a891aae3e5db1721358ba22b97d81e1482b3b423f1792b65b83440e472e9a246d48fdeb7b56705cb90f6a20a0cb5eccce4b872ab8452bba6a80ca514201deed30c10e9f4efed9a5bf735e9e6f771ec3ed220cc994d4e494a9347a8661ccc8900acf3f10cd6a1ca26b3304a544b7c7285379fe0d9b0077320a20bea8f21642eafa4fe5559ba62cea54c4a247734209aee7b8b41a6582a237cc30158df83c5486ca82fc881a644b110f0f04a4038b7184e951146efd3d0223fa306e526de35c9284236bf3231bbd229ac512c850ed995f7de7cc8241aff537b846d448e84941d0bd0c796a65a64bf20b4392b279ed74ce9af8bdef26c8194347732e470073f011a27f32e429fbe00ea237c41b85f89b2b839df12b3d575fd45c1501ce68452be791dfd481a40a976f8a05052c108e1e8ed2fc1489b993ca0e4b633304961c3b84d0f4a2223ecf68785d5f789eb8c532a0c52f6df0b651b96e3528c29b469a245bc4c0be280910a562487e63562afe344c5809dc3660b7d5e34767d185cfb16a53b9eb63f9d8229fe73bdcc6a3929161167aaf89e58fc2e5702b45bad99cd7e88a1d755bbac79cffb3f063520c577dc9a1fed3c201ca767d66a196cf31e4fe4fc33ce04d9a32224dff0c3f5afc732c5417e54c796b4126db25a4d5356d68a939d9ff9e37f446e98e638c147bf9c2fa3d859697ecbc29e1ee600355a3ef6dda8e809e8f94fd07717216a4063def1802192e6d36ffeb523ee155cede0932f5c833b5b82064a0eaeb828fb48c3ba6916f6d23e68b441819b8f4dbcd40df0e346cd0076c1b9a2ffdb930454759905babf1f751f6cf9575deb87e01e515754ffae70601ea631573fb0a468c5e93b94b7ff7669e326e65ab25e357f22c2962696d25731cf9ab7c594733d917fff69ebf921656062f936a38f8883061077732936e916c26423473df05cb0684c87ec86b3edb42b27cfd877c4a409f34949bb7b7cba110f8d02b9c16ba2e5e47fd2c88bca29f7a5757510496810f746df0fec32734ea13f33a170cea6254a51159b05381b46a46678d0bd0910d84a2242f72600122c5c24a9f6e7430a95bd20b060b2e62cc287d47bb4e7772808eacc084e069140fc5e83d2a837ee30755830cf2e8ed0f1cdfe212b17cf705df210f046d7e1e1a54b8e9b14e5e4e05266a1d4564916d6641a49c540cc275c98358f2e2e6ab41f41b66abce76188f91c62cbacb1584236d82642c6bc07a85409a8f16b006af7aa8e06534322b618e2ac364c671cc5b779e3292ae6ea33f045706c361b440914e0f57e7c52aa6fafcae330d27a4511e2b4656cc282b003f0e33af05aca2f97374361bc121bc702f2acc530bb8e8e67fd1f50ed595eb273c2606fc46613f930b6047d7250eab41f17a36b30f2c3e8c67af2ae731d4fe623b3215161203a3afb03dcb86111fcf56bb2d659d1be0b567ebd06f45837f2542537ccd6f4cf7c4a67cae921c4a98335b641e8ff9016e2edf18b57298a294ddeeda4f1bfd8802102c90c54374c9f0d264272e6073551a71b9cc00216199bf29785a812558a6e6c269884be63faef05c04fd03949053e361d6c4c2ff40d36c544f2402fe5497585c8edeef4906969d61dd18a350523ca6eb96fa9916fff58449c0e8c53e20d46279d7c01c16f04fc806d89c9a67c14cf7a7d45874daf751c985047dc59b9b1dd9e0e7c1dd8a6bcb9ca2eeb940f86c9b78334911075e88c979c9d813d0f692d73eed0df839271a4954de6b5cebd83c150979fb1adbe15320003be166bdd6a02adb12849bce088bd7da5c775bbf5a66c062a0271fe7de56dace701578542390b393667f45e904d6bb1eaf241aef406557b6cb8bfac573b8efeba817265b67a0dc8d284ecd0693c56dc683380243296fdc041b41949185a1426f2949e674e482098135a2cd508d3c722ee25c8193dde180c1b8a8d5af962a1c7cbb08862de930632f028fd02e3c0d20ddf204779d6d2574dd5d8d15e23760b1a89bf276137b8827b5728b51d72fa40c6ed81f2bc9640b916a5e6a85457d4829a95e1517bae6b856936260d77c4d53309fb0c75439d37aa4dcbef85440b5d16f922043a7d9b8227f8762acbbed62c0d8df79a313571bb5c900458b9adf39ea455aea26fcd704af5242a243e45e17578c0b455f168d53bd3ac47ba33b3adf08f6eee7a69166316596d999a6959cc2d7d00ed080916a6458c943947edc8d839e323d7f2ed49c2473147db8840fa0b806a26c8d00751361edb4579f9e5a0924b978b37276d1e16109d5ce5890758063fc3c557b69f695eb7d432af97383fa5238d8a28294a0dfdc48a52aa01a4a6c483562641ed4d4a0813ec9355ce2e86113afd9a0443548e9599ca9d82bfc44019ae9d0e9118990fc6ac9a3ff0a8a77856c867b00f2f5499cb60c1f79c4f6bb4cdf59a396490baf0838cac36ed4b657de97bc69363bc064a9458512c5a563446ef82100958a3f29243a7a183f3ef74b25e6831ed51d3ccda91d881e17cd6a11076554eb5271d98b0a4a211eb13ce67d3f0a7e82f148c1d68be812021608cecb1b21c1622c74fdf54dd9560cbacd4254f0842beacbccdcaa9ca5d4bf4944d0b0f829da84e438a06096f19d10bc985e4fd79e2f82afaf05b2850d902cedeb8587e94cabef3408eb816bc29330b810ad200d73419fbd34b890393ac34e8a5b8169d34c251ff9b176e09002757b847c061e35ee2bf3644cf3e235c0da0f20068c644c9cf218c76e563ef3da6eab0bc5b37b417f95b6611f877b21072dc9cb51d26c836287195095d659492c0b87a01013b3762ce768764191c7de3ba43e84695833566ee7c1ea4b2854cd9477c3eb0abdcd6f55f8ec6bb844d228672ecdc5f36476e00621a168fc6ffa6296368ec4a46e934d69ba19d8428f162d9cccf977d00baed34921c318e5e4f4f3fceccf879ae0bc026b8520ad12476569e60bdd4806dcc68f47b61e89dccdffc5f6c1c782f729fdaf08565f7618b3a3dc2123eaf8f07d011e14aa6fee3e91e9af56091319fd4a7785d9c1a345011a7545b0491cc8af3588b7fa16c4c4193fd1f14116aab208a395784655d9a522a58f622f9cc2aa89221672660428409593a6215b305d641d9118506f94e516b6b267ea13c6f4dee2fb2186b3c8586a2704e429a35a950097f2856074ac0ea46bf85b9effe982b976203433d74405787d541d8360209c9f205bd7d015f00537fd3413a7b4a4f50b012b4166a2c6491a03c04c4c660d49faa9218abd1ac2c56770c67c8c682f64ab4404f8cc1295f6ee2aff2374e69e3696458dbf99f96aa875c3dbe4955ff55a1db25c2f27f1bfc3a312bb5e286b941c32c22e7558d333dc914da107cdb074d84c1be861dcae173c37d18d668fcc46f70aaf7ad0438859893798f35a5553dd9098aa1b66577583475a75131723e3733d9617366e33659aad3c65990427234a9c542381f7c947168b0e8c455fc470cd37ee3f90caa3ad7b4597f7114780c369d2e3989bb0a8b582cf10af6b572d16df405637c91316c1064b8b35002f42bb8bf9363c3b7ddfc6ee64693b9bdaf24f89fb98a4e8321fd906e0c970771af922bdfc9958065da479d7c221f9bdbd3a66c4e9ce6be55d5ad9567c4eef2e12a6cc22d9162cc6409bbaa559c8e56a2b6ae3bc2165eb243b5a66e235db286e2af9c5ba4cafdece48d46c1b8a0c1612017c4c04ec9481a61a60a4e589918f14317d4d83def2c2903cd8e1491d7f091468970210872bdfa0927467f6970dd84537144363fb5922709cb95de0b613110e9573e4aa5b119d308e36720356c605b8abec27ccd87045f5540208489d95984b2104d7d84d28accc5a74bb0ce62d1a017f7eb77ef2f4efe3b8e51a66325fcef5c1a75baecc618761b11a32ad41c63714f23712258187a607efd529801a7014b97024d57a015f3a8501deb017b929411b419af2f8605196c1d48556db2f66f79ea6f455b7a24551f83660621d50feddab72653c4805c29b6881ba9186df1be52099d59914b3a2511d828afd53bf4b83f1f837574bbcbcbb236396460531c7dbfa80607dd6446e75c560db6838d97f33b8ec92c01c981faf6b109b38ee38e2977a70473ae3b85ff370d0b9bb19f388906725e8ccb4b96c8f8ba7cd42998d96c0173dac32fb5780cfc2cdd602c5d452d80d630afb57a6ede7121eef080a4d234321d2e3def2a8a83b9075b9802ed6392c443b923829517c8054d342744fff3532726f4ed349a111059021e081bb01079f4e74695592b7047b23035d6c86da5f093c7a8e615b1bfff089ee4b3b68ca1d39a6ee540f87f0f443dc4cd372dded616360bd6c4a091713a4fd1f3acda800f0475abe2c034a1191bdfee56e7639cf2e19edf252473fdf86bc5a597de0b081c125eeeaa11def2839452d8112811e3db2dd33154a6ad1f966e9d3755aa9d8d1cf2d225526f4ff708cb2f88b45747c618be60780c51980236db887f4ebe6af21f3672ef98f6c817c7a2688284ec79e76032212806e0f4f40721800edafee1bc63687ece56be3e4b9d647380124bc2d56c2b67580f96dd14a951900f44f019e3aaaf5fb58f16417945b316bfb5441ffb11b3c9493607f17d3561ea5ca665a1f471b5a6e23bea17e5e9f89e19d3b4a74fcffaf3d89f6b091e36a0b09998706601215009ee89da70dd486f785fd07d37340a4c997d072f0196793fe4bf85942ace5dbb5f06a47b7de18bd6a9304d1aeaa092bd0db722558d678f7141b75126a70ccc68afc0640f4fb922ffa59c5f761c42312552f334500b3855740a91e420fe22e22fa4ebbe9813e8a45be37246e099e62891de04f9286d274722c993ae899bb85fd2ba593dc0dba65420b3be21071f53742b9bd26126374b437511f655e05276bc03ddf07f0f5e67ba3bbce5b61bebaf22baa65f9d298386f3ad40b0093851456b8dc303ae9e17443056a7527389cb8bbfbf4e973cee93fe79cee5fddeb0da89e6e9072c3d10d3b54a0dc8082932e35a324376cb9e1614ea8dc70c3c98f4f315245796e48e2c9941d484d6e207292d4748070a890ba0391c60fcd1051751260c01890c3188421b86108108481087e84608720621002b61fbe60187baa276eaaf52b54c817e2a07e918a50188b8e321844858da70c7a83d9254052ba14a3e29379b03c93cee96f607c57e5eaf421c4a6af1322f54400e221f64402d7458f2d61bd5a1b31f01c6ae0de424369a5d69d6ab45dfa5f6655a7a6237ebf524731ac1792d5a5a9208c89bef1fd7a2aa223a81a5fa0a9e8630d0654c8854055700452911b9fabf90aa56216e7c156a8b071076b2a0663c3181833f9c6f8e5a9d8a353e157a3627bb18d91d21250bf928a138963e7eb46851ee760820a6b2f8eae98ecc7417c4985a0c278a98206ca15be948a60fceee257a508b31d5e007f24cdc50ec0d7a9008c35182b386c3007153696c19c8ac0d85fe22e1ddcba03daceea9656204a6a940e3d7545ea3345046f03ff95efa2b7a6a78d9cd363897591e115ea33a7a83e9e407958e0b870fc97dea2146d5b31aa5bc60c47faad9c23eedb924763dd01459cbc8a236942e19784ecbdf7967b4b29539201d608530b80086dbb0946d8b690e9ff6bdb51af3e9da255f56d1deda724c5a56f2b28a349d99d6dd1bead7db932c6d390e91f84c6c0fbfa129037baaf3f019984bfce7eb44a14d85ff1589c9266df13a9689f02d1fe4cb4df89f933edc6efbdee616fffdb380b000a7038c66f25a65dd77500fb0e17e9b7dfd47f394f7ceb5bdc2a268a9e0800d1df38ad3e05a2c7716bedb72776feac1414264ce8149d6292ebd3294fc2af34fbfaf48a27b9b0a257b48a6ea161289a5c1fd3295a855275b8c3f11804ec2f42b3fd21b06c718b7f8b8b74ee4bf40dd5514c46984af4691e5591cb034f6a3c7a5fd7243e91cef83d9cd9dc913ebd11451a85450ad581552a9df2a3fa32945cee8d1e4647a57aaa725f6b9dd5a87e66739bfaef37d128a7d527d2994239adcaaeb9be11ef67a25ff951adca2c7e743b2d55bf133bea49ac63e7093c3c82d3ea7f8c7ff1453f82114f924931be7e43d95082c7e12fd22a94ca6995863d427d7b670c4ca79c56dfe861fc48a790d81fc1935cd4b003d9dbdfc21eb21fc1935c7c7d23fd246ff490bdedbe48e70e8f43a2cc138832c3108d8a5e88d2692e6422751afd162296d94b208e771347caa27e4c1c41227194d55f218ac00d895724d2198639705a7d105e78b435ac607d1e536986a51fd1afd2a577bdeb7b4d3ecd8ae114fcf06d214ca5160f7e2dc49647f32510e7b310e9d0755afdfb444fb9dfb29c4bf45836f4c9a167eecb58b77193793d27f6bfc41ddcb78ef935e420d4416793f1a419fef68e64fbd86bdb9ec8ed7d75218766f3b6b12823a9994fe5edab9ddf526d25528c8888e8efcf0ec227c2453ac7f0c87dd3c771f48f54b6d6dbc4b45610c1361cfb421194348f0267d733c82c170de9cc7d119afb87c072ff1676107ee3229db99794d3362098fbedbfaed3e18eb470fbda54ea2b3fdafe65b2bb3519a76d2f83caad39edebd3d19fae905162f1db7b14134f82e2553c298e2771b236d7d16c3fda98da92b72a0fa80cc525499b4fc74ab6a18a53854371c969369c36bdece68ef48ba03079fb4683f5658b49defefbc0c9417914ae396d620ac8ae74baeca7b9f148c2f42779e38a27cd0f01847d30d8b7d8b8e6b4c61458218e6d416e68e82596973c996edbb68570652b7e7b1c338685c5c344113a8ffe94b77f89443a8758034e0b6103b7f1667981a9c40253a013a907f33d0be613dcf9fe935f83dff85906f12499bf1f6183ef7df86af9fbecf77250fe0871e0945be4b0bcc4c9f24f96585db4f2d7a1a54ea3d469cd8d36723f0d992cb631dbabacf669b6587effbde48662585dbeaf1978d2787178d26be049fedff390b2a944e5513f68639fd1e7b2fcbdcbfeb66fbd1fe51b1ef2c6ccdf73e049f3bfafa332eebfefe5ecc34dfd84c5054d7e91251617aa5c65ffd6c1e7be324cb8d469dd2d8f1c4b0d5da6a47089f34d302b9665943543b2832e252483faca24cba8ec4fff78d654eab83aaeacacacac8e9007c56342c783b2d311f29e8c6476e8c8b29cd6548ba2b9b4e39a47feded3bdb22ad5714d25aae547fefd4e3b2ea71d97d3aee3a27d28213a88fed9f179f6d98a8979884bb1f4fef926cfab3cbe8c2577fc3cb58ec8dc91765cd993bc4dd6d240de7079c3e50daf72256f78d496ac41f2864fc91b2e6f7896dae02857324ef399d36853b5bb943573daec0600240d51d6f0972fa3854be733f8f74a06a94a5529a32a15ab5255ca8f7ce64a5266f0d8bf863bbe842a59d62981491e3b2e245ae156678c87bcb9873b52293a5d767d51115509cafe5528cd93bdca8b6cc4ad50f268f3b4711af5a48dce3a736cb416679b7087cd14cf2ba7f9cb70e1da3eb67a9ef75be4395e79345fd2a6eca69f69d350d056e59b2f3b7b63e02fbf31f0fc0014fa740d3963c07865b9b91316217c3c40286f3f1639e3eededdeddeee2e80d7e854d5b5d121e3ccc9d28d20f9068b8b54b61fea904df8c9dbd350873c024dde9e082b7aa838e28cccb345de915865a49c39f2ce08f44cb18098193d0520a2004bb8d7b8810e3148395835b0684de4ed319f1834d09878a1046bc8851822601a227178429289788f58763c76800eb7711bb771b5d718c29aa11692f4e48d863bbe3f3a6c1079fb4f6e9bf71a3d90c515a1638bb2a34ed131c9e40d4ade1460ebe4ad863be6156b396b2d6739ce5a8ee3acb59c6dacd7981530c728007695b7b7e10637f2f64db353a9ca23ff3086a4216bc81a8e474eca1ad6bf36cdb2c5487aae63113e735f75589087c8ae2af2f6be63c49913a1c896ed13f12108a0519f730538650fc83211d9068e2928db3c25c933a62bb16aa093e9d7d9c83dfdfa2fb29fcb39c517fbcbdcd986753e2916f590f9ab60a55ca593fa9c734ab1a93f4ed1f673dbbebbbf226b41a425d996dba8addbb66dfef43ff0a71e3642dfbfc3462693af63b82f2d74b0b4c041a3c58b16aa2c57626991ca02857f1ba02c7d32105859e8c8e142e8fb24d6f149b720864ffa273bce9baa2b504f5a79d0909982324850569c2d5551507db4aed05499e21a4427ab86f4c7bf3b64ca8ab3a58a42f5d1ba4233ab700da29365b5c59978d4569f36574dd5550871d19191c2f59aa44193217f763339b67124c3c995f555b4010930299f94948a5621c465874e18ab293599fcd97ad3e68a53f913a13c76c88469282d2528888cc363f6c948e1caae673ea9544709549675a0aa2ac8b24e12429e345dcc9e4620d71583b29003a70e6bb28a6334261d4b2ac3277df4a143a84deeba6957599336af647f6448b979f2d85aaea524c5059de636bbc85d736bd5ae161dda1ad282b29434c6f6933be89e6a7912f7be256fc81eddd3b7df51b14867cb613b0595f96444ddae95ba981aa44e232448be8cbe912715d19f4eb7a66236e276c834dbb387f3377144ca5da7fee4fe427794511953ee48f352924b9ba9df1b3f1e9768f2c690ceb4269b19c9e742a66e3aabb7dce8d34cf148820addc9367325561734b9fbcf1fccfee8a2db721eb6edb211b77b1b32711dd740e40dcf96035269490a4abe62225b6bed8f8d6473b1450d38cd620ad021d069f6abfda5d18ed6b970c7e7aefb4ffa10e8342edb0fe249f3392ce0db8fb9b54ff31ab646d9e259b648d97e536d855c64f983145502ed8981caa097e1caab26dae4ab27b676d05c5ef808f7dd4fb148e2a21017c9cff1e10fecd33f427191c435a779bf348fbc59965bf43df771103832c75af6b8f770935c427e7d08484a6553371e5010bae5536c44d237d2fdf29d72f4055afe3cfc6b4b548a4351c8b2960e4296822c312164c972561422daef82885f57abb8d695ba1322660e37d12e5289d428ac2d52b92964969bc0c9bda5dfd5b82ef75fdf7650a473632a649637dc44bf6230856f04837857d95fba5883e20af1ae32c54d1337392e01479c29f3f92e93320d7c8238684cff7e8a63adbd5726fba7d16ab53ccaf2d2129305490770438386a4617f8a967adf874799ccc3b56239b936639829a64e03714f9047e6b9000b0bc329c80d8292467f96b78453c53ca95f0cbaddf24d9825ea5435c22c4d3a5999e60fe6a38dec7decfbeeeeeed9753b7f9fd8d9136d6419ea186532bfe085cae1d6e2f15e99ec7fd63a2b874c3488a4e15f834b06d5052544147a610d1e297eb404c240171af04891f3c211503ff4fc98f2834515c70d181fac004d61ed6025490b3b5c3d01998008ae8620f3860956abe9b1c40b5661a43841288c0b7aae7ed872441a3e7fc84c6d519102072a5f8014e0ce0d50a41043460f15253e1813f582941b1bacfcf131850d9f32649ee03a639320420a90150b770a5155a9a3449ead14903ccdb17e2aa045cc9c255c02714539616b4a1b1fa65a18a26a2b4a146eea84e91a225015201c9441a3c218282c2a6c4122b6040e9f3f48e24481460615424ff0305941891b7b44075896606305c9172778f081844b8e9f207a78810918ac1147599e206307871562c06206aa091efce031e289e610a5844a203d73921402b2ad3026cb843550e030031e1dfa386df141abcc1d364a06d10162066acf1327a04972854c1148fa30890283952692fc6843c49c21968062cd98273e4f9e7670c3041aae27c6b0405327cf160e53434cd9b334f524a84ba11d8c00e4a30f57151c2e3f044103212d164b04f1441515345f7cf8138750117c00ede08225424e0b5b2c389146cb0c0e40aa2042cc953957dc2cd1a3c78b172d37c839c3268b1240560ca2028a9a2f4c2ca96104554870c0c18b0c54dcf9b18547892a4e7208040550e3304412384ac8704159d90324a985386a9edce0820e29e471ead2044e116b9c9c60e5e40509da03c4923d46b0c1c3831049aab2689132e5cd943d2ce0d08298292e280cc1a70c0c4294f1b2041c1a2f6cb9ba93c3132af2dc9162cc15ac24453821052109a2ace2e83102100d4bec3c290305104c5460a2901c0000daa1891333fc7043109d46831eb0a8a92384151c02ddb983e50a950d43684d9955fec8c044ea0f15415c7400b227062dae30625ef0418819a63081a1d00d83d450d143cd0b280cd252c84f1b3b630476ea58c10288871f7c10926242171a2850a460a18e9d2d40d080a7093d44c00122076581e2091f700044678d07d1c2891b2c535c05d1054e92209e88400452505ca0e80e40b2a2283923454f145498002167073e7ff698e943e7481a2e4ad0407581d367db0148122552cee880670a2a0a081f777e70c1872b774a68f3ea61047874a022850f95fd4109354738b9926213c6078d1c4a7052051a289e18e383d6962e1eace080e40a9f0ba4a801cc1a2d506cfa64bdb1128513564a602551c6043349f460f1c305500e76ce076f0a29496347092b5e7e5459196444971050484cc18240932d490ca2420c201b7e6c4d00e9401329516c4913050629e4dcb062068e1070e068b1b1e1470f422c7992650910535871a4e628c1e70d1933492401e41aa1254f9a3a4d34f1c56d0f42b6207142541329292cf848428a4025cc0067061efcf49a21366ce2f82113c70c0cb3850ee84c61a7cb0c43ac00050f439e50014686334f30a9c2879e4048fc00c40a55bcf0050eb843154dc4f8c12225a7490f63da6831c20a0a9437960a8a0f431471821e263a2b3f74c69099a1ca9e1d02253922051d6840814b9516664013c889a0428508593745c41046100c6b4e789203a4cc1155d21402d3650a2f3ac0d8a2849d412c8871610bd5f2044316159b364ab46101072758b85089e903050a1c252be4d0458d09960d0382e81267890e697af0f2c3c91a3f82d0c08082191c68144f688591218624f2e09903e40a134ff6fc8064892d390052c3870b9541223882eac70b80a892dc50c54bd50a388cf98245cbcf191124e902f269217184931bb268b1e10a8322e6b079f264cb8d161f51459450e8496b054153d644000917b8d2ccd9b3e7ce0f0a5600c24e9c1e8478b262d578e0843e80888052e64f1d1f0e3813a689541518ca98a12b845a604c382206139ad840039a142143a127c0b059429dd0c04cd50c3518f18402950f1ac270818288264db26cb06924d7115dfc747121cf1428a7335855ccc961071bf6e84193c60f9e126a28a14fa142406aa012870a0d48f830a162cf18604d0d3524c9d2c29c273f68dc9902a6cd99398578307381416500b500c49a1bc0f8c8f3c3698998285200c2cf923c56fa4a0bd4551b3c264c8d800a2e13cecc41a38296327d6c19273356528298d2d503143976ae5069814fd50e56b42c19a63c764ae8634505191f477698e233821f96ecd065c7d8c822c41077a874f1f285859f1952981233a544d4f6c30f1ab034f1439504cf9d1b762cc18a228b55550a537cbc680250559799276e5010e3264e1829fc7839b325cc8fd89a2853534831a1cd9b30370a2d6ed858d990c64e04deb890248e134468e962c140c0c99715906811420a8f949baa4150f89026ca1e6b8304a8f0738508395fe6c0e045f8d032c5091263fc6c71a933bb80fc58820c0a35d4d9f342962f5ac63cf1b0c21a255b757e64c00426a25062c21159aab0da9202a50741583f3889f263e4a2439620608072c58b17a727aa29e4acd9720288259c6698e2ce141b84887a628dedd26304666488028d151425ace429b4f507082583f070696a33e50ed6184037f4f9c1c19695142290507206cd96a4a8ad13c6f499a2cb071f47523cb53015a609992c5b039e4154628c10c286207c98539c528062a50d9f13b0743863b5404049951e3e4d9e6c699343befc81e404892f3bac7026cd106eb35cd0b5060c1059c2d0b0c5876f71fa656ea8e8e2421362a202b1a1c2b7640f4de40153f5b4c3133d406c95d3131ffa305104d70b56ae36212678226a08404af8e86141f609428d9c3b5151a0a8e227853c2a10c1248a931228979312aa3c5370bdb0e5294b833a348c9181d09219465084152e7bcaa8d1e3678dc592a1a8e20915549c0064056ad0d31077e444c9c14f12a9278824415cd97235680559e8cc9592262290418a13c69ce9210c943242acc9d1364b382de47e695db6992d4c4b0355972b3d4be450c64a8ed62346047ce658b9d2849a6944e62587257290f0cac1a36ae0ca418200a4a8012207fd291a9173729020dde4a0984b51bf53eea9a40527545630d22cfc119483045a0c5b5410270a513f60d1ca61444ea1872b07095486b6d24a3c2f381194638a9f9c1c2e7626c19ddafde93671471b18dc515e81c083029e64b16c1894fd35a875d26d9a77ddd0f8ca0e9347fe9211e5f270da0b870634d4d0266fef7fc5026c5d19321de970631b0f77ac65cfc09324560d7464db8ff2a7e859bed12c6ff8869e7146df7fdbb60d8f14bf0ccd7d7943047995e50d118ad85c9fc8963d6f737ee7ad070272c543645757a698058ee3c4a128977baf2092ecd8f5d497b9fef6453a6f75f44cc2551374b20c37702aca76c2a359b9cebe9948c29dfd27c3c91d25d74ce4e23979df851c3865af65683f99e7dccf822378df775354dcd1df510ec7a453553e501f09a5547e549f92c9f5311e65b25ba95ccfe3b4fa6ee7b79fafa4d4f2087feda0f0e34e1cc188f81f905f7f842ad5df22b928e47a6b1545d840cc1ea6390d3f8bffa4d8795847dbc7df33a7e1ff2608b683f85bf4c4a7118c38adbe8c17eef7db8f6e0763698740a77ddb7f2cecd0751a935cc5173196d9b3103b53265276acbd5726fba7d166f893bd95bd7d1add6637d9b66d2eeb2b7baf0cc41fad86fb39ec4f32dc51728d30dfdad943de4dd1dd4703413c09c46367f061433f247ab50cfef7df276ac089db19fc51f631c2e583f0afb4b6f3bc877df88effbef07bf89d66556d632b50070ed700909f4aafd7ebf52f4cc2fd2338702d8479e4ff7d3e02f6e18ff20a73e98761398f42ecc13cca4a64317d2f311443a85eaba059f1386bfc1c062bfedc2ab99abdf0d8f9d5c25a5ad18f4bd9b2b0af812bb5d1e3f0a4ee6dec8b6077e85b88721ead780944398f88a4f0eb6bbda084dbf9f5e32c87cf0213e18b61586a8976d8793f7a955b7baf4cf6e1b49d9db848d2272d2dadd748a92c265ea7c9385bad7529d7d720897b1cf5ca936ad3ab2688973e3c2ed53c3cd6bc8a96477975559543fe17725829864b9d8b4b4acab9a4bca5de69be62ccdd7c8bac430f581265855744b9dc5bf1e98e5e953917bfb5f8f1661758666d0b2ce53b97ffc98e8d301609661260e94731874571a5f4bdf7d25dbae7d5b297818747ae467b5991ad73d7f2494fda6a8e7ecb7d34547afd18cb9fd1fd7136f42392d28a1f6de42f83fc7d78e47e5b213a4c0c45ee277d4e9419734e9e3b0edfacfed1f92e0e2161ecdcb27da0dddba1cd8238e610eddafde779d498db3df7f641df823df8a1383ae5f05e5cc443e6fb3b64beef943f11f69e385e207b7f45ef61a253f6442235bfb01fd13540eab45aa1b8dd8f1e15259365f728a7f9138d9a822697e8110d713b1c935a49a5ba15e6a43fbdef6fafe3da58ea3fe706b247d77425a7edaebd886f0ce28426d7a72edb6cb24da6956ea2cc467c3fe7f46f9a0990591baddfd71f96326b8eedec7fb3d60fc4d26916c7ecec0c31b7fe273ff949a9f5a2dfe1f75f7b0ffb1ddec3de29879b08cb135ba06b50ee3fb17b4fb493291e83f820e9b457531aac6c22e26067ad37fbf60dbfe58c85db5b0fbb5d5bfbb57d4917c716148a94d26fa23fa78ccaeedefb3bd554ea3744efed5155a34779149158bbda55eea859e0b9dedba9147b222ef644ff418cc3bdf55ab9ca1c3888e45c0ff7687b0e5dd92eee83f2f6e10c3177fbe9715bd8893f6788b9549499464119ee702a7663101f94e7dbfadf7b6253fdefbf2a8ede831e2edaa07bef7774ef61e9343cd62fd2d97b6efbba754c15834d937cd6939a5e6423ee18c4a92ad39fdc48390e8f41a49d3c5f8a4df367c576b287dc4fa810f2749a7b11df900b967bdb74d28dce6d36413729f1b83d7761d67250b54d4a9aacb9180cdcbb6bbcf5a48ddbbecae72cd78944680fa23fdaaf23ed05d05aab04fb096bb9e7383ccaaf1fa3d25c868fb31cf7dbe3704fb498c3544a79fd846f48caedb73df108e6cddd3d46c473f7ac3f7deb2d0898299eee4bc85a291ec14c93c0918a31799d366b4c56514e2b8edbd7ca49aea5c441c05cf13c615239a94884663ae79cd8029a01e683dda66ea574972e5dba9475932de54bd952ca96f26798913230dcacca38eda56c7987a46c39f4c427fd82317baf3af08233acee0c3030f290eea2595f1a779fd3a7cf9196b53edb0d360ddf27284bdfcae334a995256d466452fa37469b7e4f4ac14b9b522e5fcff8723998f145c6986294b39df7812153f80a776cd96d1efb8f7d8174522b61b02be78cc562b198b7bd4cb11d5cb69286bb5f29e58c1aee18d9bde1bafb0bcb6df5850712b57b4fca244a4a12d93e0422b10dcb68ed8e69b46634b56a36e810239fc9ee1962ae3f8ee96db3b2570a32ed9891ad04125c26990b17769632b021ed30151519196d3060c0a830e8f48621c1d768c46bf1c95cd0240df92e42a64f83fa2ed62eb7c8bb48d29a837b272174f12206337223a396f5c5bd4543e2782798604e30814fd0b66826338ad918f455b4019dd9c808068c092688c5b8ffa2286bb3d9f4ee60c098608225a618e18ece36fcfe6bc0c4c369f2c57087630c0b99624ef311b2f7e7d1b243064d9886d252820605c9e28134eb7697349a50c7422699d364c8983264c890e12d5f1fc07270efe5b133160e1bf9400e3b8fc25c163124f816226e21c347b215250dbca371d8a373110066a20c97d1322a0514c898e1337ac60cb9fd873a628831dac769f265844c33684737007646431a6715cc0a2aa8c02ba8a02b9043af1104b490e9e8280001a8a0021b4c483468582047a77c0406a02b90f3359230c3861b8000843a8eb60a645e2e8d96fe1a9db245a21132596081054d41705ee01774b52064aa218350998bf3ab388484ecedddb2be400003b041801a3566d87025375fa3532eda60667f9ac7ceded808466d8218b5da8bb55a0d17d56a2f6ab51a9dde4847722b408aeadedd534afa0a12cbd4b19b4f89195f261e6fb7cfd872251e29c83467b8c19625b692067d49652dd7bad1cd52902ad3e7406e86196b2d68ab64732ad39f616606183a030c9df1e54a496978c3d86695e5cf2873afec6780b9163683d1661916ee30cad269f70e0d4929a59492564a444444b45517af20db4f11af48f2f99cd35f86b47b8823e5c9a90589e05d6579572010c76a459569906ad55ea674aa75dbb80ff43e2969bea1bde19ceeeeee33884fca1b2da534c097b7e7f0e7e1a9b5d62af308d6bf75abb18a4167b3b9d7ae5db70737dfb6bf314fdaf0b87ddbb96d1b6d4a2f2ccfbf9dc3c6c44e7272939bdc52add8c869dd9c5740dbac55722ff1489b626cfb7944a7b518c49c384a0a802cd7a862ebb4d8fc2b42cd4168b93ec573cd000071db8f1cc771b4e380b5d6da740174e62ddb721c96b567edaedd74d6f02f74526ae7ec3ae70653fa56b7ca5469a594c6e04e48cefb9967485f0e5a5ae96cfa331441f1135dd29034ea775cfd8db3b3865aeb956fe973a2e5ba9bebc6d4ebd30e9ed68ac109e713c19fb2f4fe93a2cc9efd0fbab7cf6123f32df746ac94de739e671b49dca5a974a4fbf9ded7784ca5cee171f9a0fbf947b8b70fe222f9f5a7878ba4fd0feacf9776b2f79ff745df5b205389fbf910e8bac9bdccf1793fbd0bb4aee7799ef733f4807b39bd67f8afef6cbf3fd23df7470281c6a80984c13bb4e23524def0b65488fff5fe17d6ed75d716c360d8c8d8dfa3bbba7253102ce41b07e9c77204c7ebfe8b4bff7dbd1e067b7577e3ae013a17c553eda8ccc521bb669687915cf1388d02197d83604198b563998a4cfda3ec925b1c0702070292052946a2d1cadcf9a3eca2b9db3263c68c41da9aebf0e8ddcdd5b7d636c889e06675c1a7a3a55d966a366cd4963af728351a1252ad7347e24f5b85618b24fbf5f145fef3baf78f84e05ed84b1cbbec1d95c1efc1b1d9234872c5e60cdf7c328a6222ab946a2833da549d1fa36faae96f9f62aaacb65ada7c0bcab77ccbb7b67c6b4269280ee5491c877fd2be97f2538e5a9af3e9eceeeea53cf258ca8d9be8b71d97b2834b1b763b78eed856dbb416d3a6e7c99e27bbe75bde37a73dc97ee53aecc9c0db792d0a0173f77352da793d12c9b47a1d2d75ae644a339d42c04c71d7530d7dc29c53e6f078c1d3edbce9a03f369cce556c24998a1a4cc9c39c933e8d0dc782df95dfc0c9fec6cc9c33b3e812341b4b195011a99b76d259e5e1bd91d24a593f7737991ad4ace4300f8e7be2f1e6cd1b9f4feba45f6ba5df37d6613b9147fe2e582bd91f4bf6ef2692c6976be4a549f6b7de569e0e7bf640098ac5b051104792b9a756b12962b2179b27b955532cecc47db3656565490f43df78527d2b83ca8e846249da96623971c70dcbda7baf40bb657992bde3cd82b612b8b2cdb448cdf5a5e5b619ea902512922339924bae3877b4ff3dec250c8fd65e0a3e8ed93d288e5d9199ebc76c0adf864e0e75d03cd626ecf5c223cd0d1365f8f77bcb819df79fb755599f8432585aca9f67032983cdc973cfd29eb78228367495723f012406069035fcbb7b297b1f3e8b18d10a518622c80478717cb097372260eb6bc330fc9a27751fbe0d79c37ef853e97e18b61628d6e651dbad3bb971db36c58371b6e22d391b71e7963cc68e68b8e3f6dfab7aaf508c195d71b4d9e796ccf5903103135979a35dc57986595221b5dc44bfda5aaed5e616a2915824ca7954f495963b7bd1bdc057240e793f369104ef50ae3cef5bcb95e41b2ba90435ad547025a8f0494dd584e262911d2b8d569e4a33873f91f80015aa880f40218f96278d4d25b5b22c13565076bb0414ef77ccec1579dfe2650ef7701103642df09116dfe25dbcf8232e5e868bbc9739642f73782f645a2da8b97aab85f8a29c33ab6bf445ff493989621288a3f744efa10eef593c0b31482d7ba3d4d29a47ae75a575e55744af721a11762aa7798d1beed8542bdcdca1d7b1e287acd3bc1fc22d65f4fe9e7881a9f4e28bdeef0b8fb2915684632abdc072bac0e157cb1edebee977e275da53ccc2432821b5dc248e4bb97ef49b8577e8c7ae336c68e815fe0c757886d9cefb9738fe0c0f72f582ccf2d6030475b4d491ca5448ede57388eedef3de726fffb3816e67ee476abb18d7d65aeea837bcc4bd5547ff6c8364e5d5a0f0ca5c219b559a3b7a595e96bc61b4595de0add9ac1a172109baa38ca2ab2ce3c9287b5992869755748564d5b5d92c735f414f0ac11f3d69e8c71192ee8f46727b20371e3d7b9b82dceffdb0a5dcff9a91dbdf54f967c3ed794e50f2168a433a7b58c82c8f4e64f2e6a18eed5f864cf763fa682352fef018e6f1de0a32b5529643a21c7e32c9fbf03999d48fd435fcc3f00994480e233b9245c0ac3bafed4b5b67526cdc4864cbe15379956161f8afefee70488c225b86e111476e02c31f41f0e977e2d8e328af8e5cb8fe1f2c0cdd7dc2f0083ecd2fd1fb501c6d64975979fbdb63032325ce55ae3677a2cc5d64cb153bbd9a1a8134a3d1903c772454464652eae200bf8a46806e67faa31155dae6cf0e294f3103f9602cd759375c6ba502d249143714a791d99a525b524ef3a33537d66bc66e2e50ec7dc665a5bb7b924b510aebea7a5db18154b3519d3cf72816b8b1c04d4b650a86f6b39ead59db515b0b6b5fade907824fa53c8b47bad11e8da5751a47ab924f86e04aac3468f207b39e54c473d3fc6d6bb2d66e155baeababab6bc3dbf7c4e086edbcd845db4ee893b3914645a98bab6cf3f6f8fbba0ba06e67cf7b1c4e9b933abaecdf752ec621242fc85c21de556e3acae18edb95bc51cbee5ded80917bf392ed8f43486a35ca8d5b58894fee08a3855586a1a5a396b72b4963dcae44e83cb6b0cafe34aaaea8ec5a366c8c4e55b9e9fba6eeb7aa5cffcb60c58f76e85b29f6df18d821d94a17c0f9f5e17fa168a386848da50b785a9d966cfcf0d83d4cb420e85dd083bd67adb417f42a1ebfefec7f1d1ea51d1b9e14beff52cb0eff1b83efc397ad14865138baeffbbe8f1385483b6ec741f17b1a32d9eedc4f53a9a9ac1d32bbbaf287b10cbd0c8b2030bbba720ce19f477ee3caedbce2873ef6443fca8a18b00202434f8471cca3ba627675e5a69aff345aad46c569bd6468ab4cfb8ad2d7ebfb1c8f9dc3b7ddb5d735a41c3ef81f28d2246ee7d06b53c903afab5df928d8e10e91c34df5e1db98ea8ad3bcb7b8d7618278efdf523dd5fd9c084277673d68b13e8e19fadb59068d32083a083e7525d883a0d554f2e05eafbfeeafc5979e074eeb5e864c1feef0571d5588d4aa4af4ab61e3de124256cfc073c75a761b4b41a41dd954f287892f82f081d3ea8730edb493f3c0697d153a18686a55a96e3c725f6156065efba240b619260ee9fcc242c03c02c9163771df545f0f9b5f9f93b5ca727777e57e138774575757151b80792422372c04ec460e8fa015bd0b907c30f05f8413f67a187ee191935c3914472af55c7b5a79cb6343a9228fce82c5e1538a052a95dd6914ec875ba32a133f40d4e7b8987a6739710473a555eae5168a4f2e5d0b82b6f1c7d9ef3b710802babaaac8dd2c8f14e066b97153a8e37b6fab56ac6598b882e8c7ae5fca1b314c64ed0a7c63c4c8234d1c67f99347dffbe7638cec9ff7768737241a51e2940304437f2404436f42e718c246ec5bf05b0c431cf660a1a58e9610c4451bf477df58c82c377d58d664b175da9d9b0cb49fcd84d0a853e70dc81d04bb8e28c6428216b215405cb890892d44094416626c840eec80f4d50a7c85af5e922be4e2e292325c97eaec3d6c7b6de1066edfe66d019ff2a8e46d15353d0a15c34800008000b314002020100a8705239150349ae49046fb14000e898e407250198963498e032908a48c21841004082100008088682410085491f700f761f90214093768167e13d7818a9dce5728a1d0eea4d33d539e5af3f86fe2ab72ea3ea375bcc69718044e9cb57d12c6d6e9f74e5e5244c01cfdcbeafa4d056ee2042f659d394784a1b9eb1dfcc436901199a54d0bafe1d64c75e3c4d27e61ed97e44933596a8e2f68d7e304435c2c6ccad7c9895eb97c39f1d334ee21e86c89fb21058dc40e21673627c65201fcbc1a804dbb430e914ebd8ee3a057f78b78eda648f4037e988bfb933885e94511b1a1ed9f0e54835767bbfd7a9a8e66eba1f873d9aaa5c001d23eb2be19073e2a9ead1559020c939937f440dee58016153a9cb62e027552f645a2185cd1172ca1e2d6f77e1f5b3525211fee1ca97e10bf96df8494565a65c7e255367bbaec84623cd04c93d97a8d034d3e7267dbd89fb8dd96f1bedbe70334d50c560dce1077ca6291c647eb6c9f676577ed75420dc5efa1e68f51d3e951535add249b0406d2198d62bbda087e933ec7f0a8040f9c3fd62dbfe875e04792dad429505b4b0c66c1b1910f6275f58dbd520e1b34e7f93d0bcd6292b53a63312795a2c1b511deed9a6cdf91667d258fa661d3f75589d3681c0e568f89ac07f20afa2568835c4e0d20deab2eccad939953a08646eff54435c7360fd627de3cbe411fb889ad59e02cdf0841176a847f5b122f6f1b10cc8f800b049dcf5235c78614cc0c96515410fc10eaac550f7b5506d936720a308d018f76ef56a83b8b01f293f723ec5e8b28250c7a7cf4a680fd028136540f934ca25d817b36aaeef023386b5a8c06d1c2848068e6e4462e5294c41123e1f1bb94c92ff0eb208efa8e230dfb2fde398061907f4f9c3dbbdabedaaed0eeff8c2b4ee8b4e5f296a882528587eab9e262573ebb39932564bb0622385a96b7b8727bf9182bc70be69f2b95250e02be993bd26f21d5818d175b8fcc2d4c37b9cde1a9088f9437093766c7a7b0fd65a19410533b8cd637564870767d7fd210d6e67e4ee7042ef2fd27e069f2b0cbe4c35ce2e087c8807811c717fed1907ee3c9f5fdc73fa2368c3a8b7a12c4310abed7c7b5248eb7a3b1aa2a99d6815201ca2a9dc5d0f2d5ffb03fb152ab64469200c32bb292d3ef23603d42d005b0e97c24b6e214f622bee59839d21dd1ba216c33d7112d6eaa1fdf0e250457b89cf6d69825d452f76f90df22f00ebf353e9ba39b83cf4df4dccad8d0b9fb133512f00f306758c6f2e21d627b75ac7b79a484d088643794f9e19e70b796574b81de1d37c63578a2bb1cc5fd3de87a369e6c4b39c9dabce7132398d3f1d95a78b6d4b42abf33c46482971931eb27472d40312d7e182c991e30e79ef29eb5af6b7dc6a7a0588e2694ab3682aaa6f4d6eae1c5fc4901737313cc31e681d7980c6829b7d2068807ac1f759c7c4e06317afe21c83db0ed9b950975671236b4b19b0b279dc57da8a4d802d2de57a64c3f0e896d6a2bde56080a466c917546812097bd82c8e5fee073c010066790a50781d7fa511b503e2c483b91a5b17b084eac487450dc4a98eff57fd8079ac07c9a706dc1c6b85039fce975c632755c4915f66607b9a1cb8de64c937f3b0f920f3b80806aacc63c1affd5384e452a0024cc35fddc5aa6894767aaa192c9ec063466a8083fe8a0b2bd9abe2f8460d33b3b828205337f1bf32f0c14c7fddffb1a85ad0e01a514fcd7f660f1387826a86276dd8e82685ec7705c5414dee0d3ad18d8b0c0dd98cadea144c4810b5285566b156c9896eb5089317bee137fb480896dc325bd2c8438335a087d1d961e8bfd6822bba8ab53b33a70dc2e216346db75d27522c85017d92d55ec21575954f0249a98a9f60bbd347233a74976ae6ad7bb1d5123363e4a292558f4b3f4b0260318d2c1e49006af73dced302fe9443ec8704b6597cdddc8e622bbeed3c17fe7f5a41105e01c5c1caa018ea4c81ab2323ad58e56e50c576559800ee394f56cec5162461d519d9ffbc5304ed942b4aca55d624f98cfe9864ac3598ea8ffea72b9e3e40784dd09f1501c0ef86e17b9c222a3cf2b69805d6966dcbe7eddffdb321e2ff3f6272dfdf99076ee571c60f12f4eba0fc9776ffe1ef94f6ef43ba11755f89a8739f01e04ca7fc1873a5d4340f5ca448821a267f229b9801fe11a1896e4f05684371c31884fdc111768f03f1766f29b2560309f2bc6d03c05535de86e16a035017886f3094c493cc3b39446087cfd13515da6283021d1cf52e4a6d56c283d7b7a34ad90cf42f16aec102403a0bb4329179541a3431de3849cd505eef0ce4fd95d1fc037b5655bee76460d19add5567a050746906efb399c48d86e605db91c4d6b7ad90d3bef8a8af32e0ff9314074c705f9ecfe12e15c3101a63514dd694d4f393fad5e3774b1fe40f7b5c4b8410b2d706448df69448475afc979e7629573c62165f83761e1a28a70820d9a7a250ad91f7e7a6905280d3969a49f32358e5dacc8848073d4bd9cb96431d2d9e6ed9fa492525a17c6782558c8caafce5ea37242e75a56aa98ed3c64442742f269a67c7a233f70393cbce01678cd31cd4e1aa9ce12669a083073025e40d05b0f7f1bf08047d2581f877000cf70e6b51da920ab287f30ff836611bcf651a05ba1c9622c9775371c617347b4e18591fedadb1874e4fca5c0020780d595465767625ea4b3325c5c7066a6b63a802ce0e64dc3cb9692e0f0a380ed1ec76d05f407e074f55fff3b21dddcf3642ba0480feb6542a84a3f0cdef047705fe4ad4ba3c584bfe2afe358baa8bfaccfb3b5ee12c93990e7d17a703dbcdd7ea6f4327e58789aafccc7b866ecb560efff93d1a35398e44c70fdc19f0258f08fa953f34beaa3fd7800ed522a998dc5cad3e38925b24f8c4d5902a32bdf372634b2a0b4e884bd1b501decbd0602c0053243410224790fcfc68477cfd59b4149630bc5ca81544dd2580cf9f61a24a4bd929691acade8f06a59535760a8305238a22a4bbb61a5d8570cb6d1af46608c4c0a00b898aab8f4a0f633b538bb47a6576a99ee7fbc77f898f27b3c80e0aee6ac93e3f2e8335bdfb3cf0142a7c02f19d654d8043bb8718b6e1f6ad926ad8d893af93afb6856a33359dee20a7b65459fb2b6f1e12beb0dc76b437a09a23d0004944e8a00147bb14b3704606477e80a1fb50e80fc416e24a58023ef3ca0347741aee562bb22d268ed6fc01ad1bb61b0af07cc487d551bbf0d069006080e1f47881a379308978b7be4afe51dcdf5874ea15417fcb60a94f15c8ee0144f60041f42c77a34f91819bfa9505ad3f936785d7382a090aeda2154fe2b4197ff4f1384ce0f577d625032ee4c7f48d0016a86ba67af1be268e2e3864c36c7051abee1e225df0684afd3aa09e211a3ca05c7d5a755f4d43a226d80a5705fb565675657ee802ab524d3b7a476caa1f9183e1d0ca90c2722ae673e4d9d809055f21ab01017528e1fefe519a375abe522d25be294043b7ed2c6add163bf29c6261701fceef8f9ad5baa3ff13ce0aea3447422937c04c416ed68db7f6cc7811aa6f8560e070ac44a6fea506c612197db0e4f8f561d498e330665bfa23ec649ba810e494d38a6287e814cf9dcffd1575a440516c78528fd0d5fd28a6de3501db3b2daefac84d0147f1dd0f39166631bc3d177a682f06a35acc9aed7b0da55c72a0dd7700b9c8c1e96b3814a65f284812c3178937f4cbb781f93c4e2b9879ab1e2970be648f063cedb2961d2be34d4ff89d2e5a77049e00417123cde92f0cf26cde02857def5534e69f32cbd4f7428d44982bf2404740172d6bfc1cf997914569a1d9a3040ebe24ff2cac31b38e82be1e704151532ab15e913b0e8e5fa18724237f0b0f5762d7f62af081c2b189c0c073b9197e29448eb0b3d953e04fa456b8a5308369a6a833c3d83a72ef260d457bddae69a25275ed5c3070b01a5547a61f215028ed2981ac97c975e45dff23e8d9091380fa1bdae333949fe1b51dfcd909b6ac8730033646c32f05df8e8dd65a7243c5e689b0e9b7b02e6d206dda03921c6034c2f07d4155b996bfdb8355064738cb41607b69216e76bb4e5727c1af2c97f1b29297d1d104466678c5560c6ad0d523d2042a7450287e8fcabebe6cd10993600a545cd08f2a9ae3376f39113706ffbd4aaf510786415da0211d196f140333da3fe9a767e3ff4f04f6587a67908e6887a6fadc461eb82aded5174db3ea510418cb1876b28fbac36b497365a3723b1483bd9cd670d2c452d37553bb3cd90b5bdbe0a7b6a0d2e89de948829c15a1cb6838f9e0fd5a0517d4102d0b0baafa86aec5903b5fe6f94d68aa28a549cb48debfff13102a57379c90e84bc8b6697ebc81dcc762a9bf343839071900e9be8cc8358ffb6212b315a8f878d0e573064afd99b613ae8e2aa7b2d1e84abb72b92770504529fca68a903d664fc9f09d05b34d78374b1080df9e5d837f3d97c932d50edf759b1d8fdc331a444d4dc00d7e2c122079a604424ef8832a748663f113d5e3a3f10e2365956e11024c04d8efa89ab4709dbff258121b48cce784c3546f664611d62441acc8d287afb0047c7f189260b574ccf7c10c62a3dd564d111083feb094d47bf5433a09ae04dab51471a65846f59a18c590792f6dd7bd23efa20b5e5da47e872752f8770c851e215ce04db9713573d65a2af1335f4acd03e2548c2877c4ce371a1a7d9a1cb306212179c5b8f08a03d88585550d31f1355ebb1a688e6d33207a3b0de5e25224055cf27916aef30fe8b8e4227298e5ea91b90a42b0faef525656a4f9a04cb089678e413151a306d663297b6c72fc811fff594267fb22fd5558c0d53438f29c0ebd8e1e1c87d932deebab111b3fdc6f25d9629f4025dac5df29d3c6b195e0d94508256dc030059d110367ca1ae6fb306f5d17709eda5aacf31a7299ae5749f1baae8b8c26c8f9659d0ffab876ae685759451257ed64300d5c3ceb6519f3d66476d9e606483b0e32d5afe8ec35cbe68084d8c4509abeb7267441555797c7abe464a33b6f0114bd181e292e02d84df8b29c53a74a0baa12ce017c56b529bbd02dec998cca69d72fb69302395c5f56937dc109f0ea83243a2f110e661a9c4ff4890a9f215a8f34095ae8ccf38858b050587fe7aa152d9ccde1df032b0e22df410afe2b8698ccbf77c6f70190117b1e08abb7206667ef6ebc4a9c3d3d3618873ac098085d78cbb530f62645c0233a27d869abd5d51c2f189e5999c7615aa50acbf3d257526e9ddc59c16a4206cafe831e8aedc7abbc194966c9ada9b21b26e6360835e82dfa04f2ce444382fd22a51121c3fa73749a28488ed32229d8cf9c488578a3c63b24a108848c8da66899fb489d334d9ca52e48a5ff2a03837a59a600a21e4919b82e9d42244eb998d21ff952d47042e1817eb56527558f07eae6e6e29bf2afdc4caef9cf20995333f1775c8e544ef0080f640f4cc231b134a3828d0918d782ad714a3c94a388c242980a61a928f5c63a37d61b966fa9ade68b8252b9d15413b61adc35012f620e7cd7f01ea120809a1eac411bfbfeafea6cc95f373bc65bc67e8699906dd61fac5ee6663f6a39a73111326ade8dfea851fd1cee18ae0da7124687ad19a6864bacee40b0f2a407c646838ab4a7e13bcea756ff622e15971989120b0fa58a08cf1e22c3db7f2aa5ef531ad75ead1fb3030600a7ea44de0a986094b20b1d52e26943f9f6b9e3058efde50c6cdf21474025cdb0546a0d461f7438c23f93a81df08dd5a26ef67c73032218e6a62314bb8aa07e68497021ea00d471562ae3403e2a9b6ff14227e0b9f670a4cf5e7c5cef89b1c26c65686afbf97a81142343cdb688f880b748a516d4dfb214a1be9ae189d4b630cfa262d991b2a4b2a88aa5e36a2572711014ee66d0b511ea8f2f7602042fdf6c9244e89c9ea184dbc3ab6409d44af6ef338d65662cb5d5a85789f36f63d0c89708bddf035372dff0fed3c6b4af07815407b940a963005b7bf91e1dd2b94acdde3586407f2f5b37cf25da46fdd0ccb09adc516175cd1a788a7cd1ffe21a4837618cff70062d4ef2a6901c8a1bc0396c32543f4bacb7d840c8c863152573d8c2a81e9ffef116f2c4e7eac2159f6df32dfbec26df446a6423c321ed99e312c216f6734223a6173ba87306810d4b8bc4255cde6b4c9fcf79460fd439082f26243d4650b850504db98b88ecea56b6537b8a9c59eb4045d2587e594505c3ceb7cddf9f0ab2953b7b2123e1ef95f063b17c20c17258df2480b9d45ca9e11effc90328cb6060966a009e821544c6fca709ec799cf4a4fedaf1697ef0133bdb63ca9d2ef66abc1f2ca6f581ce2eb37e26632d0a7c68edef824b95527b87d7dd2513ba9ee7b8d93b0885ffa42620fe3d2888db85c59837b3861ca49c8173b03ba74a6064b5d70dda7b09bb8872ed11e0b9cb089bdece9c35bc5fa409fdcbe09c2bb029d652791b3b70eb45d1d354554f8afee7564f79f582b0084593682385a7cc423ec74a985a1bc9a9bd61be9f40eccc8d906de825288e374b64e79889432fbe4b50792939d9b4bc57114463483d6c983d80549ad38567263bfda8ebb83cfb310278bf762864c5b42c43e172c9f7227a6a07a60656be4a43aec7da5f56876a4d82c81a4e0cc3a3b74abae5f9b265288ab263fba603d3cc8cac23d198f58dd3ed162627c5b402d2e48a61602f23644f2ba62407ff02854008769e876efab4637fb0b5af4a64553b65c21cccafa32256b741e75a1c5045fda71c919299ef25d7c3d48ff5d69b9b76ad658b6e717907b8619bf8bd5bc881e71ea94216161730651fd4c4ffb842ffa18411b80952a2a1115541c372e1968028b94eb6e95b11269c6b03f9fc9df1e5423bde64769a0d45974fc08c373e59529e8ccf4c1c762def1cbd770623ede0e099e963709d563779254230895190a2a2639e00332090d8ab65e3a80d3618d159eb499e6ea0e07d88d13b01d9aca73054ab70975ebef54ef74eca5e918845bbe4be1dcca54d86a3aca2e748eb4c5eb9d5e6d93176f66f188308e41d94832c686604dd02c5e77cd295bb09567f132e486f62496ef2e9e299801a34ddaeaf9f159e800e6fcb707c3532f04c28cc99cdfa95578547ae5923086e8040b2cc103987256583f2b4c33eae8d1a166db842282e9f2f3b6514edb0a520bad9c1d6a9824a091e946d8ae4547b8c4d0f6e1a6eecff43acd47f8053349c396f1e8da336cb9df7e80649499d495729163f92760786816d064cc36bcbec36a3b80aeaed13312166e1a06c52335102cf26b17c114d1b15075da72b7b40cd87edbe62040e4ad16318c999f36584d363456989754aa8db5a09f2c2f0ff98c75f8c9f89789b662f000e00efc554569557fc0a354f0d97c9c1518ea4b51f718d40b177b3e28fc22969246297acbae5e52ec00780ad57343399ed9d30cac5ee9486010c93366e9625c18e5063a6c94ebd5e1e7ff3a8cc7c085f010505f6e1d31c184b26967c0a6ffdbfd634bd7b2301d7a089e26fa4049f0a6571c9174dade29a7e8a515c5ca06e2b96a61c5fc186c7b7218d907db8a37af7162e44808c06af56289c1c6d81ae8b4d7aa26644f0e59647ce709a8ab06b185354b1f477ec4bf6edafff109be2bbd29b3262b52e68cd03440c37a8fb3b89eee9344ed59d88013cac98ed45517ee42f75f911a4467c29285e5d70049efd5c9e831cae33dda29d9cbe508c5e559e16d156589523d3c23bf04aae72db7967541a42b921471fed7b55d6b97febfcf09a024885f771523f7e494e6a0ed677e8b976e92dda987b9f016c44b543e93f5ea9f57770a0f9badad6e2345e6ba89a68a3b14e6ecda5499a60d0c8ad95c92481b552c3a835177e99fc5f32c33174420be706453096333fe4f410148f5cf0f93471612f987240789a3804fdb89e19d072df2ca3e6673909dab79f46837aa2b9ef32d4fb5008f1a9f71738f4bfd0ca01cf11ed2984629c64d2b8400fb48e06c13c3814faf471988b85f5ad0679c35415527d5f9947374b413bd4ef8c1ecf89359e2f8f33a8f070ef06efd284b82423e185fd86cf41d34f2d1353fba6470dd437a129b6286d9fd6770e2ab96e81f17c2afac05d1334253a919b5c017cbce7ae2ff89584bd2d06c3c5ce497090fca027a540148e8ca3ba672c407455ebe69e4f87824b9d64b6b87086bf1dd120d0828d261ba8dfc3159550180c9bc3101dee34f6c4ebdd61647fc9fedcacde1c1d4087488470845fd5f2988407ee119e2e0f2a72d681c91e4671c0367c62bc250e8d756fe3c5d08eb591ac0f2cd0a199d8dbd278d136b18b6b9ec38a34c64a848c9ecfc7a89ab33bb51533d36b1672b5b1cbcdee282bd979b7f854800e94364e3957f6b26626490c9c78086ef827ef70efa71ed00ac779a9e909799d3a8d52e41c8c8151ec311265395dbc01c10f9095ca47b00f4788f9664911b1a0402f02866afc8aadd3f53c63108a6574e840d03e8b779865501b307f941aeec64834382f2256810e6b30ee27e6ab8d31e89420e0447f002fa3c38531e0e4fa3f3c37e4a20046d8d71ac7988fee083360e8369188193ffa2d84b521bb872f942d2052b2437e7fa2bae000b9c52a2b5b3a7d867ef0eb38b15b0afc4391adfbc11885604d12e768c687d3585ea0e82dcf5eb691536d1408250fcd9766b98b1ecef1808b4263d9e4034af70a7ea5197220020c87c7c283bf209572dc768e424b957ae78e3ecfe47b6f21129c0d15e440b3f9938ff9590705a8c5d0ee0a8278f63cd0c6e4650e88eddeeef984358df0d891a882b08cbc5c6fba1556b416d2b7aaa365ed59478bc815d7a3baf244291e2a6222e28fa98a5c7e2ad2c2b9cbced97170384750ae3376c9c2168dce6fe9f169f59da91e2bee3eb3ccc1d9c9a678572bef7461ea48f3ab404d44a3de90217490a7cbf645ef31da0205fd6d81ec11d9b9809bf009280d4a05ba4e6f761109a8396eb0af5e2118e581eecf22bd8d9bd9e828cd5e3cd309458478f6c01760e22176282a140b8de08dacb7f1fee6e15603cd58d64309441f6956ff0ac23b5802701427700d50336f5c26f020ab6028a80c081c7af9f67816162775cdcce6be27e939d452da3d2b08eff76a0e276c54c52d55a3c002ca8e9fa7cc0f8414880d763302b650848ea980296c759d26b72161e7376ed41e24c71be16dbe939781e32276e8a6e6ad4e38605986733bc06fd614bcdae384bcc8560861c2f65cebc746ad0ee289e87d6b097f4929f080dc8c2ec4fd9954c8fe6fd7a3e9715d04539b812629b762f1c6c30e734672671801d2c900e85a7b013bd30df6d47dbed424fd2a5942a12003e60d6d20c34ed5af7d34f6a7ed1488d14edff0e822a0ef48dd6638115cb2d18efe3e19857af7136cd50dca3763c1d5afd6dc283ecee67bf290f7580a64bbbda94afe5a59be9c8f847abb39a50963d2e3b128ac72b9edb90602ea0af22c579cc86b84ebbe19107932d8267b4c41f8c9a38a8ac59525e4ff406e31f55b86f791c0ffdb29817f695970d7d25cf749b190bcc0760479ac4b502aeac97649529bbfdd8d1843715080ed6158433fe94f9fea7e7cd7f50968d32e8eeaede9a42c53c63f55818446c7cc68899dd6e9db53b3c7118c39c493500a758decc3831b6a93ef72ad8cbd1183b79e4478c3349295fcfca42aef5ab4f606196790089325b605d2191b4b819a7641dde6b4ab483025c15f91c5f7436c3036dc30ecde2968f47b905a5f62f7f18115f4c795835510b6caf16eedd8eb672e2264f4bb5c31f15648fe31f8146b811488be9599090083bcd08d4d54b88b34e169cc82c8706078c62b42b166c556a9c6d90c89f316d22ad501fba7f97c7456aa3f7451b83790b2dbcc09bc7054b06aec00f720f96fcc87d61f51a3a65e04315d07471e0df43379412c291caf5aa42e50fc3b71e5e8ebc24cb00a009b29714621293383d54822ee9438186eb8024d56d54195dfe3a3daa81678f4bf9cbd71c523e2cb303c24c25aee6f7626a275ee1897b099ac9e35fd2626efbd493b00c23ff73ec7188acbca8dfbb96809a5ff182abe1e0dfdff91422091acbafaa7c9a164d28c3696741c0d67ea06176e66a35b920a7f001b5f984c8c893a44a22479e8d279bb40eb6e432b30d050425d8494eef3327499824cfee3d204c6ce6603cfc99bbdc2578d79bdc66a38c7f076c77e1bd9dee578077ad433d2a54d49d80784b3bc7293cb1303154a0a90de16b331930d866094ed1c9944cc14ca0d82a7ac9dd4bbab962d8f07c499bc75764a6a5c46f8319c2f5920e60dea7daf427614d5cf330bcfd0e3c235bcfaa537252646675c4f5087e7a722b58f8fbe12c8a8fe97083e83762fdadc9f4d72fb976aa5850f0151fec19e2cb0454ca83cd5cd51be218517478c39364301879aa1f8c811e4d5cddbf1d5ee5af1dafd24dac2fb11465d54c53e4bc524f0cff7e82368d154ff9d6f4a56a25794b5be543a1906732bf3f4b7aec544e1f203fa064ce626768ac71af7cda1da859530021cf81386d5532a871e84caea62dc222d93a39102f0f281018a3b3f8c1918884129d2f2c12ba747a4c98f96502bfa1c65a6d68f9afa61afb2aa7aebc9a2afcc6c5e2e5f563cb22748693044d5390c521a4cf25f7fa48f595e3c7b7a715d73c5a9ff9de56581c9ec3e5988a5680b8adb1b5a0d54c506c0a50c8a282ad3bc3d6f7ce2c11781030650a629ba8f631587f4d4845a0f59e6db227989d0dab4a210311e93e75223df5d2b898cb38b55800953f357a79912fb107b55f08051a38dfbcf52f04b7c4645d3ef76af2e9d06bc45127559354fc40b9b074c1be53bab35dc6f4df4e6b6641aab0f46cfc2cb747df329728c487c5c65027aa8ddc95bf3512059177030b941ffb4b1a211efcbc4de8ec10d04b5ef959fac8204e01c7b39dd559505b7967439e2d5fae2f8b31566809315a1db10b37b7a7e51abbfc524336d0b98330386425a8b8322933d8868e1a1526a50fb56ec67899cc8be0d5a19405d613199437ec3ea70287f592615b4e4b101c12afb4c99801fd3a0cd52f9e96f7d7f278c4b5c66d9c12bf6db33c1b270ccd93b650bf22d010a18b587d4419c28861348ef7ba825a369bd3157dd0e2dad35858cf16a735741f39b4fed40422d7d8add44c09b02d9c32eba184905bfa0ce646c24ce2515d933550b162f332d77a05033c5715934141fdf158f82195510252929ba421625faaa788c797c0fab1247bc732b8edbb2d7cc407629b81a11ba37f4bcbe34ccbf230fd614000b5d4f5203f8f1fedb214417f14b3ff83b5d9201caf8f3ace516b27e5762473b7ae0c1a9beb8c027bf217fa94fb118053ba840ca63950e69f4b1153410f636367f33a7f04bcde80ff075b1999f2c301d325eb4600a566540d4a4a8852a23605cd6a7972cb085cc35be069ec54bdced3b991231e988b23945b40c7d91c0da7f50110d8828a2d07669b3e63dcb256b508534dc1d5fab67fc0010215f820e8924f4e0f9e4ace6e5b75a8f21d6bd9dce41693900fcc0727e672718f5b024e5a136a4151bb272e2aea66010495690858ba9941806c99b8a216ebf1f5c81db9e240e4ca6284c4947fbe839ab0414f7dbdc8ede15b1cb45cc7015d812aac631e8676e4a018319c071f74453e2077c5c67ccd292d612f85254a2b639b5f6507210a335fb289575ecf57b6071b1d3f00d4bc60354be0d1983a8629a440577ad036752f1a53e10e7e6ccad4e6291c0138a59105b92ab8188e056c65b84870cee00e96a7ce005b11999181d7533536ccbce4b42526d9243dc49f1abc9c16b78ad45219e2a070088d3f0d219538dab5d448b2053e123ed29a676a2f5c3b9843e556782764a4c491766b57061e3e0dc05aed42c893582cda50e472463b9b519cf56e6bfb6ee9ffa8febb1a72c28840adea8bd100b902fe89bcc4608d25276eb836438013b2d485a181d2cbd1f6a11a3d46caecb6b6cbc9f59bc01f5931cf27807d6795cb360b72a7b4d50e9fcfe1374b48d2542b9d75da3c23f922412c3cc18993ef464c6a1672296f6e3adc54cbf8dc93d28d9c0873b6c252950d2989c54b2c02ee67b4de7c2a730dabde33a63ffbeba0813585ba65c7fac9346cae59e05c6ccf8b7cbdf3949434cf2d982fcce3c7546d464b2a79eeb3f0a2c76efbe67b7ba50d616aa19eafb1e25285a802f16f8162df1849ce78f8499437f29ebbfaa7d06a74d615d691fe5f0b888c22334715be2dfc8781ad934284c63ab1e472d94ac547bb397e0417c661cc0986cb63861313f8f4aa80bf8403548689aa07bee6c93b2e199d984380e3633b6a2d5d1b5c1a6ebcfecb567ae67c746c3a50d8c357ff7dc03bca9561c34a5aec0a4f16346f0f39beda949d1ff2a418b7b9ad8cc14078d44802c0e6f943c5834a6a981d34c231bc443b6e8a5141a299c576a15a3a9cce5819f2281aa3822c8d222029b7a0689be2212a9e526563df318d316a7deb884f7e6a5775262fa718045533091d087abea6120c13e149290e635b70fb972622bb5993514d7eded16f9ca3c578f6b445d55c5c82ebd2126ad8e525a7ce5e099c77a907089ac79ef9996e44366bb6802c7ac6fb556e2cb4724cefa0b91530fe08f24b6f038905a3e5fc4b4f265557bfbdfa600930f1ca00fbc1307671dc8dfb609f903b480ec969411d47dbc521bd701e421646fe85f8eec16d5893262cc87d3f66b0e61b0eb2884e58a7975934753f055c035e81c9a954f17f1b85e624c65f7130dbf894d7955adb39e35ce08888a71120436a9cfb1a7226c7df5c5f26048dd8d4eb324eb2efbb0dce30cad2da6bac9d28751552d919d3907c2bd47aa98356e938ce8310102a115f3e3ce37095a187afd09af84a332535e4202e64d69c0bee6a9a5577d508b2d1d467754dcbcbdfc6eeae2ae996931a211394afff6b2ec607a40d44ded114cc1f96e1b97c649493d6a7ddc29f4046193332733d0285bab0fd5a5439e170f0ee51730460685e452a147915474e64ef8fa069cd78b58d43f5c22d076a62f23e62ba0fa67c43d2c1f567f2207fcee48ec0a485feedbeeeedbdf0fe3624ef06cb7f148e89e400b48e526b1cb56b49e5c32e26af394c0692b4941d82dafda91de2bd19743c65beecf53d223c9d37a26ac61f03b79f9dc853fca55fc75d8080d1bce884b36c6143291147626973678f3a746f32fa7cfe6537180a842046af96f920acff2876f3b386e99405b5389f140c0429441e0085c771de2deb727f5730c764643beae9b1d7a6256089ec96c1cf2f915d68c9c5d624c6657315050c609497d17240e5b25280f5e85c06feeb25a9d665a5c0d33f69006337c9717fe9e5d875f0b96dac989b5d0a4274a28bbdad37c613b97565562faada5c32ee9cdc55a841d332369eccd096bc856095f537961cf65a998937b5285ca109ff624bcb6c19c700d7a4ef2fd6818f3d9350ac1d402a1d929084ebe6c122546f6358bfdad958bf07ae2dafaf57a4d291b148b6fcf5ffc112a0a86a3681e53a01d44fbd7702c98ebeaa646618bf02a6dd1979a3155962cb152c56970888b296d7f895319c65838afe8a3596b0f13c31f6823242e24ac58dfa65dab72a162c0c3223d6b9261bb35cdab4e5ef8db69fec8af91c44f17e36a98575f39692e18c19d0d2f50c8d53c78e43e27b4f802bdb0638f1fd500323e2c7193a7c939a506327839c8571bccf6b8fa495b68534e524e95d2273e323cdc2c373a7aa563b307b545dde933f109414708f518dc97d74e4585b788bdd925b22105efc44a671306f5babfc6c8d5a806b871f70c37b7e90ea91fd92ffd2dea308be57eeea689a417064e9b332c37b502da8b890e453a3c3abf533c4211cc4c7492c756d42082cb2f051808a7e3299b6b4907648e62bfed19b66c95733af37956be3b7c86238062c51c300b7691c144e45e00c1a20164483f9221191ce06c490da3a3aa329ce8d91293d591f34af02560391d7179d8857e936ebb479b7b80ab635754800a09545e739a20e47857e8d06deeb162fa9e64ad6748e14db8846730a6390af0ef0267e3001c1e8d1995efc85cafb011d37d363bdec1f404cca8d3a1cb9d5ffc7a702a0124ce4f4cd68af25dc31025cfa11d59c789f2a790c5712a9c7335a45d1ef3ac59ba0b2888c6dfedf6106b477b444d02c002658418e12b9883a500e898ba5b12b055e799c5cb07930c60350572e47231b5aed39c757c7ff7696ed7e42790b72663540aeed29a0e44428321b5691bc78c84a25adfa1f724d4625326d36135cbe7a97e4257b9ecf51ad3878060313900506e6b7a4a74e2fe9a0086082c32ce73089a7d15fcffbccadfd7608bfeef0f1a0d36a7bf6d777da13b90027fb6d267794318786b44b2648128d50bc802f40d9c1a20d372cf4169fb3ba0999abce971ff0006487a33d764365f203d7c1f1e16e4bbfdef6de58569237e2cd55369d0c65146057963f060c2b9dc98061550b635462baeec6ee049d8fa131cd3a41c3258750dc1ab90b4f7f98bf6ae3ea435a3bd90faf71caa33980402b1a6e3095160a8da776fa27c8f6751935fcaf65adfdad94b60cd550fdc4c64af2ef64f1458ee2cf843961101768215dd06e5bbf8bc68b5cf67b6b3c4bf315875e9ceb3bfaa327e73bf01801dc1a09e9ee29776d914e558d0167a8a24ac0e82d36dff92689b18b532c2fb7f647adea2eb071eb9cdab9dcf42ee1f8f4f113f2a77692c6ba104ae36508fec7776ee1b5d4e1d978c4113718f302c54b654274595f3a761cb942f616160d3ad4512958062168ef5da7dd2599ecec0f113479d1bdefec2daf72737214933037cca3d2b709727b4d9e82d10a5db066b152340dc367f94f188955976e243cf913792d46823ef43629152be0793446bba58eb29871a6c06710d6eabceec43eed628fdba0dacf2787382711847c1ff0358fbb220eb7af6bba75d88e1c926507a3435623968178867064a7e53e5a43012771d80913e89dcfe28367c294685b9184156f201b143de9f7ae76fdfe061d9cd33cb195535e5ed2a1c9ad7643256b92391cb8d3a9ab26d5d7024b1843917011be53bb0627feee642228b8c3e8b04906da7b5f5d8b040cd570dc9494a8401f10e469ab7914bb08ecd2f6e46c10116021fd2751e74d178c32f141c6d70c8278fd2ef1f97efb464ea219008eae4d9dd40b0d311d2c47e8c2a05ffc503c1fad9661f468ce826c94ecec9d17d9240c80b0582471e1ea020dd54757c025fe32a934b92651411e8d8af5d69c07aaace65b031655e06ff1ba57e7a0f4e58448e67051ebe298091adf1c3bd01da657649c407b6a91f692d05eaa00d5f3cac5b759b75303def943898c18c8dd1877928ab1a90cd9222bdb4310072bb08f27157e05bd19ada79dc41940755ac93af66239442680d275b0378dd8d410243d9d2274d618933ed2f973648850d53ba5d79c584072b62b6c27d382a6d855a0cc5d385ae0cacf387ae7ae682abe3fe49c0e05000853c866b7e716687ed0b0e48fc5d1ecbc1dd3547aa590418317ef079de6e68c03e4d70e4a069f068ad0ff585b31cc38913505519f0dfd4ee16a17e7dbdf0cf01b43cecfa8c883cb34bad37c29bcb4893619474600027822f4ff7d4ffe45039c059850bb7b72add58493a3be0fcb81002c83b28c9cdf9c03a54d9630ab534d443ec1108dd5e3543dad8f86db82837c4b7a5d2db331065468147ecfe8a0c5da88462d5ceaabd78a921f600d7a954e9c263274de8b157264eb5d383933bc1844045e86fc6bdb6ff6113eea6b43e04026546fab68f335ea60191baff11fa89bc7da90c490ce24ee9a4a9164f3a6af0b2705c0b19be6274f1d3e6ecd06fcdebdb09c8cd68e305dd21d89946ee88ac1c8e14a37c27ba9fb3ec03c2fdfef7938f3d2c3832e72adf8855a3ea42a33df4e9941d35eb5131af12bb81311f265eeff13ee02919dd10eb8110249da88f509b9373b77055dc06fccf17e2951126b773f78f3e26f4015ffc76970ff015078c265a56bb06aa775f0c9f0b755dad3d9218b0220b1894dfea970b1d2b828be79acf1263a3afd40e0b5a813b0cba1a8551161740d2161bacbe060023426c830215c5f2e6a8af60553b4d9c20050d7a64178ba7e50bf01dcb569615119ce7476eb44880f97947c92a4c9df9a32281f83398801fcec38413e366b30f28fa18a822845df53fb26bc94b1e737891032eab80be396e28aa3020e955920a346230a828eb998a269c724da8f01f5e8fede998294b79e40b7634cbb50ee8f2c5acca67942096ac1ed9a952282339832df40380b82b209a0365e9029a8d8aa19502eea67c0fe9f68bd49abd989cf68f827d32e97f6f6ca99e53d9727c3285a0aa91bc1e7f6b384afbd761131e88c45ac229c4507f06117f6c9f32f8122d1ac3d413356bb337e0e1e7f07e03acb26666601f7a4fad84acf80a61c94988052d83ea476dabb2aa9ba1c3605389d8a1c8a2a6c94694f6cc90a95d05a066a69e806566490a947666bd408205e75691135dc34fb5224c1ac62152483d9cc73881e3d8288c9c2cbe4549a6eda812926fb14cfca3302b6ef1e6a590bb62b76618aec3f1d464e1cfac3d874b839035cdbcebe295655d6d558b8506d30cc7c42868729524401ebf72e6c076a818f7996ec128bf49292c9ecec836da684355aa391579d52ee0319e25b52263807d29e4d4cb16e9f5a589c4a014128955af57861163531004b7db5f1cadc17023c5e18e2cec35287b338a5374767079124f01c62ae1e8b9c06e1efc8455269d698404292ebe3beee2b3cc4b3411fc15230c42775483118ec079635b511b180ffe2c40b352dbf3bc278ed4b28609960d7ad5b0e9769321a08545705e9dbec0fa1dfccb844beab512da1211a6bf2d1e8c650b2be80d47d3453abc1e27715fa89a94b146bfa0305040ebab0362c24d2dab13089b42913614b90e64126809bcfbe12841231cd99ecba8ded0c1fd530a066828c1e23db058e61d84c104890795116089ae61b325351fa722022076a82a0ee28aa2648c045bfae8ec90558102021c34e5330ef928c024868336bd33652da7f0ebb531a804bf31aca043c6e23e5b8487d2feade901e44f56f5b18e7a641f32e17372bc243e06e2f6d2fd6a2444853ecb6cdb9f5d72b7135219f12e1732580670a9626563c10b8194f49868b92f1256dab3221a251ccd28104c053ffabb4669eba230d687debabf39cd67b79a6b5a69c4706cc513b7d4bbfa6e4a0e1bfb8fb67aa56c2cfa62ba24d565c01097eaa3133cdec3cefa7706d0adb173d0eb9523c2b81d35ebabb6d7b2d71b92fe40c980a249fe26a427e512747da3f59a610d3e9181ab113b9d8e24751ed81b00ae2db8a2156030dda4835468f04ad16f635da57fb3687e9f1e9518e5ed5bcfea78daa1b46889f74d593c49c69b92284c4d09a939f8c88b62f556f457257cfdbde1cd78608d13f9a3cd1c59f5d9b62b41b6bff4fb3230184ac40a84f4901ddb78d3dd378ba6940b39bbbfba7013027dfa126ea0a6d28c124ce7cc268deb82557c38948469e19e4a1fb00cb41c35215e4d8907e0f54588f61bc6f01b208347d84ee1e54f0c77ba0ce2a32c12b25a5ba91f693a05edbd8b2de0e62b38d81fefa1d09ca590981eb2714489b035c05c5a6468e8d036b6410a74882ab75fb71cb337137968c58c396a90a51a8690b661e33d3088bfa4a49b120b2c55ef8c8d2386c0d241230ee250bdcce8446b04049de18e4eb47b3b88f7cda48733d9f19c92b2b0a07a5512a83430d0340a389298ce6ccb07b6d27ac413cc4cf0e412f311241db342896532ada2c9b6bf43c86c75e891b45bdb5bbcf1433382a73a82fd89f91e1824339ac3e7eb39e0dc053bdabd6cc1c56f46cae3bbb9d197feb88e10ace164dafbd736e73a4137069bf34e27e28dfcd9b0507975b7a76339a110f11365393611740eb879990b5823ca52576c70b459548a2ba21debb02f7e781bf70853983db0d8ae3f5f8ca050f61b08c0d335ecf807e09178ee5306d13f7f355bbdab4656aa8edfce0a232b0f1d8507ae27438e79f02d2d532fc318667257409e15101cc3141ee3409ac9795646bb7ca1ab62c30160344260cc9469664ad163aa8f8f0b0b1c3926c6d3a6caf482f9b2f46292ce56558c0d1dc1a7dd012c25e460df25edeb868a9fca193173441328613fca8667a579fa607f4622fa43f1cf5ba489992f3b0788ae01259098b1df06a97c8371079e0578f2c12b3ec1297ef63f6376a844074b3ec5b0520df743a85a8239d82f9a72ed6388a7b869c87f210478f4daca50939e2d463732fbc58d36dac4ba5e371f5c7941a6f925961f56a2b3c3a0c5d3c6d7d7964573435b5d3b15fb5805aac2f508e598ffdb33bc7d09cd8bf291dc52c217c82ea969036a517c723ed8182cea8c902cd7ffb8b3d7611c9ae500224c7e7cba10ceea11aed55e3641493c4598282eb96a0e00c3a4c9c90262b0a6e1b1f02250e04ea34a69bfcb65bdf49aa3fb4f58196f330a099731e30d01d32f62441651b019c0894a2157db531b86e2dc512eb3af1c4d97590e944326c9326722364a60e3ea9fd41724843782e2a861b06b927bd5f81257adfc576cd1b18c3ff05a26b35c85e83028cf92d0c38b30b23ce04e37c666a1cf9d93763b1649bedb8a7e5b1b3235536a19c51ffec5f7fbbe26d080334ee076a68f591664f108800cfde21ed3c76708ebbdb7f8c76300a2c3bb6bd7f3f94f36a1856c5ccd4fdb1d6ade76750a15b5246d2aaa8d5c20f828fa75c49db11c64fa90230909d640211c1d4a028e67b9bc12bb9be765114abcea1999f1348a50eded358df3866ec187d380ce8a395cee20300a12585d40c33126c5a1099414f2948b03557545002d4953144801b04d72f49e8186dd5af27e72b71d85014cb7400a28846f17f4dd7e1b516cc69b450342f8425b49b4b659d89762e637fdcd40352a36159886d28e920dff4bf9c84646afb1213fc7f7c78d7ce5ce9789157ef251d52b66958c90029f165abe30903106652bccfb8a3298a74fd81b567ec120469acbf6226eb0e3874891115302a0d946449cad8de9ec4714c97f23fc493586cd489a9780b7bc3637777ceedb5e83977bd7b32ee83028b4e96063b353f5e7690aa6843edfaa5221cd970b27cdca50cd535bbca7b367a1ab196ebd432804b058f83d4be357fb57f403023ff8d2dc7ca8766166b44bcec418d7a91e5134bf351de6110a43d4abbf0ccd9c59b84dc51532defef252b87c3b9e34c90b85f05ab34233123704aad1c442c40692e67e014fc41ec637813d2556c574a1b6d798af94d84511ce1630f6f680c31e3c37737f15cc1f2959097f169aa63ef04a110cf689b8746c6abce0aaefffaf83378ce6700931108d5c620cca16064cc81480641895e14d054a0076a855430f676affe0815453ed688b83a52744a1fd2e158f964f4cdc12e056a11d2aab52e0e5010a3d60b1924898f08bedd80121d2190494ff61008c44f7630c0a6acab3e1f23ba2eb14315c3b803d6fe02ecd609ab568b5e6bb9a887728dfe85e4a4f44ee32b4f8e74df3ee74f4e740ce41553f1be02c46d401d74603787a4c877ba460705ac98044f0b6bb1e46c9f6ff2c04d285867de31c3a86c0a3e80be12a228a0f5389b2396ae679b0154742f558f6c477505de9f4b4f52153c219942c076b8533b218c882f16c7b0e49c23e1700e6c2a5daea865ccd0b0e051642d49148831c1c2475257f8970db1f55776cfd9dc95cb0d925e327773dfb0ea0fdc61cd3e62304c8b4768814bb08ea63e52ae2d3ef97648dd224f01356b522a0296d8ec075bf7f6504cf2879c2d464af2a893843be09baa746db35982e60cf06dea25d30e6c7f2c2f645609899235e899a6029f87148232aba441fbadc1902beac337e88a659c4ca5c1d841f79221c5d8a2493b42a7c667876faf6bd4d551f2c06275d262db1ac9941c57ddda795932830eb6a58d8c54878bb16d4f35b07908c9944dff3593c310d01aa4261a054474f8ec75f33d504ada1d939bb6ae21c2476fc80c458dd2ea8743b7a72ecdf3a3214b12997431e17ef23096fd1a983e0175189c48f61eb335b104d80635352e5cae800af523c8250d4f846c26e04186c31dc1e052cda859a1c7137c3c3fbdd2ffc261ac526168fe373b1576fa7c0ceb5fe2a820f2d86a55c03671cd8ac9e1ce390c5612bff898e738f40456a850f93e5b9bbe0e9ec33cb0522a186a2468a6a23c4911659563c02ad6a8b59fb9ae618042920aa25a9f14166c02196b5fb8811b144b275b77683b2cf12b9d338a4f1c247f1b12f16496a9804ec182220a5a911e29257fb08894c4a65e12ee00db94f4be780208b64aa20416dd1d37f456651d3ce494a38e3e8e5e7f1e5bfd4874dc8e2705cb26cd20def0c13798013ac94056e604d781b2487a8786e13f1222100fed94a0506eabeea0ce080a484fcf370fb4b0a812db87e836ec0ec00ee36841630f10a81b8fb383d1a7588a5c93318335f9ada3057b66b035e11f36b4ffb3add14227db11e1458eb6b4d17955228c2df836a99c684644354754736a3b4bb2df092b95cc594687e7439ab5260a95f8aceb899c3441a1622a1e9eee609b5fc10a4932471b7ccb1b64c841c2324bb44c2bd802f6a8aacabd012f3fe91d0d32a02ded28c46a14c5a73a2118b828b25db5cbfe38d72d07c0653f33c54ab880ab26747bba3b8d98a02518542f2741785fb1a37327c33d1425054a295a86a4f93fd4c8b76180d0fc63668bfe8c34c52f3e4f232a25d0642be3cf62ad9edc12040fd0ffa904a7dccaccfef349e31ffc1f038383e3ffbe42b2175879907bed15ad76c8f662feb88a663b8894c3adc5cc2bf794e68ebfd0692eb5ee479f877d97cb0dd8f3520381170859a946f7535da5eaef45e286b17cd279bd23ff664f041da320c26100b25fa0eafdcfabdf38830884f29dfc41767f887bbcb4b14ad5a4165f29c06a28b810c650af2887d4c957dc766dab6ebb0890c68ad2686c666f691769d0c1d882baddadb14fa380c7c928f6d34084c3dc865954d1c8d134f40ba82c22160cb60bc37487e31ad9264dd00209844fc017ded4435e231024ef721acefa2353a69774ca5de6d8ba7e602342bf308f9c85ad97324423bae282c42a5f8286aa658a8cc1daf07ff63103cb11186e39c8e3392403b5022955d91e7b37f34bfe0a3f838253433760a13a2f38ac6d2a944d6f6fbd7c6f044dc4aef63a05138745cc712b07db79da40ce669067a9cdfedc47f1f8c09c29d6e5948445b25b0057eea8b01e8a6ad76b2991396fd0fac9c1ca5e904d883b361d0519286ba5f92009684f1c7e8a44fa98229609e02ee450f667a2f76489c25145237171d0f0bdaf78a1738385685f408a403fd37c8af086ddb08e1332490e2c06bb338c6d5516b4e13515cc787058ac70589dccd3cbfbcf57e761563c94f90dc7b8b1986995b8cf9ad07bf2457487dbbb55cc58cf5d72d3581e3277c860a7d27d3e61b1e7a3a5028d68ddbe951d062ccd8f5f57568b3d2f73b1dd903489e96aa7bdca1de6d9049a416bea60743f1fb12b7eb9125e6fdfd871f7e1f2ea85811dc523a8f5c6f50a13f8bea7481bda00734068f67a7375c5160e245600072b051a5b7cafd0e6a6b2462de1b1842bc890cd1f9bc8080ea0f8a6ed25c07b2808e3c71101c2cf57c8c903203c9b5ed03b572674793f61122a9872a250707d12954cbb0966438a7684ac789ba2e99ca4b58521574d90190815ec9f36e1901633b6992e175bd9505b1a98e513924a8e4cf2e5dd1ddbc89d5edc1673840f49e19f4053b440849c3e075c13c3cf608acb3cd3e3fc0efd5e66b274b6e0c55b9da1c998488906a4db2c8a1030e7af75ccaa557fb2de9c2453b43346621960fddfc11acdc5fd85835b8238db37eea2c0d6c7ce95df772e0c1d1a01caa4a26802fe2bbf91647f8830cc069a1d1483ea01e2f6f83540f168ca78bb1836fdc94d96269a0135dc748ea89f3c4a8232b2d498a0025e58d378bd2b8575cd7ca830a9d958d3991b4079a14ad93faaec8828c787a2fefbbdbb16c925e0bf17ac8152302af94bf711c34bf483fd88fe87873e9f5fb09ab25704807566c8ae80b187d8119ca42d02b0a946884534bbca8897b1d54358cdd301ebd1beae3c1a452d334e72086bef051e0433a0c85d6504c3dae0e031a918ee0ac10dffd6dab3f903ab7100cf70f41997c7b9ac03670f0d8c327f6172b7290b43569eff185090d35f926b1893d9b8b294f341e589c4d985af0884fc0782d4c82558d5dc3bfeeaba352f24eee7edda4a1717eccf396857672f154df328819b501c28faf33e342ee4859760fbf16c2c9b298b9f63c7e2b6b335310c38d974072f31a0504d372b9ffc1e672ceffeb49cdbde72eb455cad35383842d5e78190c6064eee1a7b22105b078a0431f64f2d1ae75724b32da7ae762f4c2fb172f86c3a511f85d427847f928c178e06f176dadeb3ec33bf25c3a498065249a70cd060f2e885e9ba1dc27d3ac1af197dad3ab279edbe2b46a39f4297a694cad66db4c6911baaf406ec3b3588dcf2ee2bbe8c2f84eea89b0a659c46a2594bdca58aabea1969e29882bb7c4b2b401de32f5e047b9c9bb0ddeb4e4ebc95b342569ca6790ed0f9a688a5471c46c7513b24a951ef6fe01ca8784d967a01acea5f79d4f2d56035cba70ba2656fe3c75cea1132569f3ccb04bac0e7ef48c195c6002914da7efe3a65db98b9b1941d9253b3263f234eb199d77415d2fc44f5007009b781fa1058cb882fa8294f423cab658a805b459023eae196acd49dcab43c1d96d68e45f224499ddc1daa2cb303eeb786da4cc6e804d0c1aa8aadd11da881b41da00fe9f750c2dc2a8c96c072394459d9afb9fe2db5b09cd1594ad6ae008abf13fd662927642be29771aa801c82ef654d62c00afbbd5de967e6ca9ee419c825a461270e5807a4c12b31b80af5bc9d7d4b9412c108c6a6fa18286d8ddbdf6b8a91c1fa662c8f5387452bade18b4bcd162915c295f8c0bba6af163066d9384bfa8c65025165d5cef60f51f5f7730e90f1a46407da5ea39fcf78ff67b6bc8386716445a69a15c7608070c7187f57e945622e636cecf6a4d1916f0eac7aed16e7caa1e6a98f08e90ad7bb4776a2ed25d1593f566a2190fc2658262a0b815453d7649aa7d8b34a0c884ed693bddd946148173ebcd66be6442671adbd456c2c1b68bbb0ee3d5d620be5d38ab3d2fac6928a930275ed1b60314d0420a526711bcb3848a846ca4d744bcbe7bad3dc5ae1a7df4539779058905e3158c3ac6906f4f62599b979932741851b1c68f387e096e541f99a8bf18aef7a85683cfc7b83acf5a798a2daa4b0c400e579c2bbcf569ac453f8ecca0ffc88c7c8bd3a723e4e98fc25fb8d7a5fe10be4c1224dede725d44ec13c993fa96b34a9605f6cbecc5653dc8143f7d3fcc03c1a83242ca71ccce5de83e463a7c51a2280402bf410a92389b0ec48332ab244ea38656648a6b1bd43424e1b820150299574166b8ae53ea58212362105d8e1528047909d4d9680d011048d0251040e759b87d7d5ec2f073afe2fc82037cadec538bd50efc127597d3f3ac43dfeade0256630c7bd612382eeb702306acff4ffa25cbb072062113414c2f4c9ef5626fb7068af1032d02afd007d1ee01d59d6fe1c4a7f4022ab466f5b84d172b30f94b3ff47ff2669efe5583573c1ab59afbfc1000d94337b9163e5d5908c8b14b943aaf7d8c505dfafdc1b93152f6059c012ecec83837b47bea694870f8ffad767f8ee3989222378be82f0218f3876bbe0ae836fe2cc4091dee109391acfaea46a61c05d96535935e5bc35beca27a5788a5f588b522ec952d4e072293273fe171e1d9150a5a8ea8ed5aa4504f08a75f265d90c8812d5b721ae9aa7a597902b496909ab3c9dc3cd27db55adc269717cab23e2bc610bba8011b59ca3ed8a99c94117dc8dbecd3d28953eee33a5efc06bbd419ccd53fe90d0ee09ab0051e7beae39096815dbc45d72c4fd216a2928b0a49158c461ce47278da81e011571d85db24fc25f155b45b384318982913ddcccd0218c39d54a1eef171183b50fb0c477962e72a0adeaeed186f4530fdb2fe22160db0079d802b4d835111463ac3957ff16a8943985876fe036058661227a9fad69440e5f11fd47bff44dc80a7f132201adee560bf923fb86f13736d144f3d2d3dd5e9915520a0dfd453da2c51ff0d13132624f03a743526554bd0bdedd48258f29d904a262b66275141a0ff03ca3c5674dd90477a5b291796e953e9448815b7b40f122b3323932db73e908b2ff0ef2679655b85fc43e5cd69c0551b8ae29f851a8450e86fa42b7ec4ec9783cc91f850d15cf18d5b5421899d12699dfa7be6156adf6b1769738ac3b6a8bd6b4f7100a6ec9280462290b48472cba3e6189136d7d62afc15e92f5a9ffdea41578f7724e80eb891863a4a45cb1a37b53aeb518c6017cda9b546bc585dad01d34dd0b931d90bfecdbf5001dd276ae1afbe6d1bf519e1195f28088e25c7d37dcbfef778050154ee2cd3c5d828e9803fc4d6bc0e7fae79231141796f43b25c86e0b027cec4952844faf0b009d77428c34bc40c683c443428421bff4fb0a349293e4b8375c418ec42daa850ff11e3c5b8fab05583c9edd53dfa2a7087651bfcf675f4a2dfc422b23870fba6c694509f3d6baef5b7e7d2ee1f18fb2417494da50fb34e5ce329e340b391588004488259ea5ae6f89c07b9279d281348ff8c4ca112c608165043aa1e18f0a7b932be77668f7ebb922634f242950221845a90e1d5f690046887b717b62ea43f5d1008052917888007e68739f4ab47e2671e2003e7d90f1587d7987a6f9c064475044fafbae7965119e7131767bc59988b709052b0f62fd4ad4ff76a7b5c2e1041b789afb9c116f7033cb36f9257ced4ce4e2181f9ac48eadaa694b5a5f6e8c2e3a05a7370bfc644a65d4c49138cd8c9492b0c0a067d516c79773410faa7354bc15d24acf1a18f4e59f07730ced5bfa8b1f58715e29fdac20b341af796a5f64d08ed527ccb640084af3e397d49011448cff960dd5be91910c12dee1f6493607827a69dbcc206d4c9d9297e633b813c6ba032349e99d84948b32fec41ccf20be0d5c0be56c7bdff859c252803027f4f18db81c52b60a0f1693fbe9e23efcf0dbdddcefb8cc405ce7b2880695e905302f726d8e91e94b711e2eddefad0605a9f146620e46a20d52285161f307829c5390146f04bd3572228b33a01b9f2b3879176eed2d9c58d5c470704e8e4864a3b08fc7a8f60e1348414140549123c3133e3467df0d558bcf5a5b884b16ee71e6f693bf60425e726d4819764deff9b628a63d05b0341e7fbc22a64d82ee98db6ecbd085302a8b1d63443a2c290246938eea2cd54dae5f219eb614901043f7db806e87eaf26c102e0c3d90ef73ab192edeef6b14dd0705bff5fa8ddc577321f816450c9a07aac3b2675b81af878e640bd4968817e8f82b25d8486c671feceeaced885322550de0dfa801fcc727cceac73d296dec602ddfab1ac15ff5a75687408fe710286e88ed27f82ebc90bb9fc0fd2b0b3e992f11b1a6665e4d05497a6e539e25b3ab670ac5ec317b0e2da203124120f960c434ffa87321fff19a2d24e76ea75a5ed2e4de819f450d5d3a481897be35d492b1f0549b55128a237814a29cf3c851c0630562d111e424b65f6a6982825665d147a91ce45531aa11e49b77c3a0c579b27da9fc7ff0ddd9620cbef56028eed380e5250a1864f89bbb07376590a2e0bd9e6453ce00b6d42b7ac2e66e115bafbb5cfbb0511374aa1a9a127ff23039ed60d89195cb05eaa44695e19de40378f97d5383bb9920cac9b1ce0f181ce5ef5d49d14024aeb8c56c54db593f3ba0b86751b56dab1784d83eea7bc660a2f0c939f6bd4733b1bb86b8c7f3cc836437e5424f01cd370416255c88cb2ed46f5de8f44747e04d94f2a077be2a321d0388d1a7da44c957f45d35862de7c48f1569e8358ff313b0b42b27fd7f62a9cd09d92603cc924f740c58518fb3f4f9aefc8ee1bd83019ebd4d46429dae9474b528c2c94aecd8943ada6fe5342a98eeab23a0d459c0a47c3181b905be8973a445c77c2b386028a42131d2002b2457999278ec182482a52b72b4e9658a31e7b82274872f4c238afa2a4c66c6528389c0077878dc396e10c9c5e61c835dbd7e739c0090e5c9274bff7d7f5260fe27c53b3986552d64868bfd96a5af039c5378186d0d4ae86553101225b9c38e630d53ba30ac6b5215d5ef8e459a0b53723c3cedc8d290719f4b1ae10b7c8b9dac72472cb1b129702a0d1418e31cb103241177e11438ab9e6d061078db1abcc045f4cd51c0d1040ad3533fb7899edf6ae20afc160e8254188221c937b6166ed94f1e796f3620801e6bde8abac57516efaaa0495c4440bfcc81b05e4040e5158ea95bcbeb90dacca9b4c9b2ca7899fb40d67f09750acb8b39c7ae2ecc0daa3a78e89fac4fff9d779ee538a3a6f03da04193153e904a41e838c03cd60299d3d9a297fe1baa03dccc4ea5d6c3a9f6c395be653056623183ede22e3755a1c3a706c9966e3b3ea596246c6c3fd4f35f0f343a2480697aa3f6f0b79ae605370754ae28a850dccb359c36970cea0d8ef2fccff5d29986c6f8095fc68d055c3e8fcc517a4d6c0a46962e8b0a9d47525ea951e4b10a4ad7d269a5b22c0af7fc037a1d968448b71c5b77671e32872317606618f380b3a7a3f8c2cfb3ee7848e354a09750adee11a23703c138567fce766a74879a716cc520302532c4e60882d04a02bc3336c03868c97dcccf6a9c915859894b6b5083b8d1465625b074a92d27a89c8c9a5e4cc0d4fdfd23f8c6a6b2be8fc08c6148711db919d7bd0d20294214f4f93f826e7f06bf5ec209ba134afa25e0a8fc5067bba35f31b3e31057a2dabf0c47d43b1157d6a13339d40059df9bbfba48c61be010674183918d6433f7a7389cef21984aef684a90724791b0c4d9a4f0d428fc3a753920971adc5188885113c689388be4d315fc4c55182407cecd3446264a5499efc17e542e18526091cc9e792497f932cb8f6f664ee3bf81ae2b0c6d44d58201d0d099db14ee2506207fe0c4900dce8a01323b29877cf862e92b408cbc1b3d91430fd28470c26c70e59309c1e9f90d5ce5aba7c061db49b208440e6a02b7b1edb523d573cf6175c039b85964db9ea2e0eebd74bbd9089c9d926a5b1538c31fb998c4ef318147d4b7c4ef482bfa97c1e46c5bd7e4a41d866719a7e10ddfd0defe6f14bbfa62cc69e0f001e008e952cb00aaef3a87f3ab2526a135dad3e8b583b606c800e4ee6b63c5e0c1e616cbf834a86331259dab09a589d23c7438f4762e4b2d2045d087443cfa8a84038a9afbd80550f2fcce72a8d446a4e77101854284ba997411675440c623daa1ce27e9f04fda0eaf0fcd28c724685bf7cda67ad8ededa7fb3ae6c5d610a1e7cd488f8d06f06786d2d5dbd44a48f95b75f9d8472035f0d94b00f5f2674720eaf1719f406ae0638f80eae1ef0e81d4e1d3be02938169ee0bc01f411d3b4d3e950388b97f3c40c23902f057b880659d4c625481d5cb07928cc7e3d1ac713b608f404046e405e805b5bbc0f5f0b18fc024c36681a30376083432d50c71318755bd2521678cf60f4d04c21bf4a90c78e4772c2bf469b4e7965f3b2278e3a5f1f2729ba5d6124e69ecd94b512bfd8428463774d4e21b8e19002283ce5db0e79abce1ba8c07204e4a3c8f04092f759f89897e2bdf8622d95ea993137d0c0fbae868761edcc4d546ab7b48b32104da4a50db0c6b5bbc7107a1b616d256c30065bca850d8b608b16de93507c2ee1e82a180d38fee36606cf68b93ea0ffee6cb542ab0de5d5608363bcbc6857ec7ac09a40ed2db34b1b4752cd33afa1535e80862266afdf26a2da00096f3fc2099d2bb570e80b3e79e05f7d9970c1836d8526a18b42ee62744dc9fa6f3af91c8400f156018302f669d851cc1ff5f6adae0178a2d60882c4fe1989e2052a640df69820ef6cf9c7be0f8eef67409d9f31c8e262b4defa187394ee99095681594e95b04e823d208f85cbe3d6ca5e887a3e14a4cb7ad7ca4a70a5c972e6e0f8bf7630a76c41fca7c7bd0f57a8fe8d08016b16a06538229bb8fd7b4d33911761e2a1624454297d5cf2b8f6ab617f06c12b98f67b8a045f338a9f419b08b0045a52ff426b2c4edf32a2359397d5e1a99e53b48f84272132d93ff30785c457a850a480b6bd0d32fc3cb085746533f27d9b2c49d8689a6e624ed7b7d115f3dfbb444da13ebad3770024d1e0816d2bd0d3d0b18b76676b940bd95a8e3aec1c8f752c59b53efc317cc41394e0ebbb3126d5ecadacb4eb6e308841669485d988ec8c5a357ad8eaaff722a0e5af468b911568f0dc982f0540b34464778472998a09c12a80b4318261a445f66e0ea23a16dceac3fac37efed2919f91aae0d5f07f664085f5f635a875e115140daa1a6191c7c8b35eb88ced2cc3e717d1865831dc93b3fe796d55686cc2cd1ade82f8281269cbc0d1254146fe2e14160de452d7c155de910a1c9d96026fe0060ef3b4dba77520ab59b0422eabfc3ed1fe740647e87e6e0417321c303fb1886d664a4405d1c260ff29255b26824a51003610d68e00ea96670982aa22e00ffc45b76f39d390f2a800802c21caa1b36c52202bed826b3e23c7be8c8ff042557140fb73d82a6bedf06f54531c08a38e804e88e45cf01237a45c3f10ae991318880ea458fc2cccae5fc669b0f3c3dfed5e79c8878a14efffce582afb2c488828db70c3c2729930a11e5f93b0e4d459b7f7bb07cf16cb93830e0df89776b803973253597ea3058f2a56443bfbb15dcd50807004acd4a1579a372e459f91efde0c4d1b482bed8f29874aab0289ff84590a295851c2a18adc25e3e0743d2b6ae59f640313f4b9e59f618fc59e30f50cf8f00dc20ecbf04a0eb929c1f88cd82005e440bd43d058174c501f100c9261b294016dc51c78b14fefd421663559b772b10db32762866b9a0143eec5e055197299e22310cb45269f68c360b22b368d2733ed1a173b4f17e8fd02d7b15565462219f90a4dba08a399631fb60bb60af58415122877ed199e8511803095f79f3a8433d33b917d2e981628530ef90e96ca2e0c893a6a07776a7a163bb6e652e8c6a42cdce43cdbb5c70b813b9891e8ae315c35d2895388af0fdfb222a3c6359eaa513faa2aac7d5b29f356bcef85288d5181db0a79addd81ba8f96da9d6af59f8c5b33fa2d9f3232f72ac7084f27b09919ddab3332cecfdebd5d662deb4a03d8aa8f4a60073b453365b597516d3bdc10319516bf27d32db215aa3024fa403e1169035fc447372ec1b57ba4687c096ea7954675c95d404d840802f371f2476f02f408373ed6374087c3b047afa36945930d81da5034547c684f9f8c9a995816ad70acc8e3535e10ce19418ca874817958fe5439a81c23941b0bac81edc3c41004378ace987a3c882ab29d84854f50f7cc10e8b21ff926be2d0e1ac91922f09d97bef2da59452a62403fd08bf083e0942f5796b4aa9a3a0aa619cdb6730817dcdd5e8cd04d819655f69b1cc50d3d12e999999995f9741e95146869e9a42faa6b3724ee965c846ce912adec78f240f1d48dfd087453f4c810ffd0253425884a4e8a19f8a8038f2b0050fbd7828a5941a0ff8c5cb47242525451c78c1b3c3238c686490007ba82c16d2c4e7b86eeef9a1f3cc7ec824b0d1a2b25818c58a3be83f41df057d0ff4ea19a53473be42acf4c1db0149cb298d157b7c0456282dac3adca8d77e53de6a7bcb4ba51b9d7fa9f4b260532517fa1296b85aad56ab8db48aee249fed872d4f94565e481fc373e1421763b55aad562bba4455926535bc86892712a9e42698cd0af952c6c5904c8b9d56cb2bd25243ddf1e18668f169e88e4269d1526bd09a36611b9dbfe590643592935657b029920b3d09d28cce6975e0e54f372c10ce3aebac33e6a1d74a9da7c79f37355de8833407fd358cbcf6f4702410840b8daec651103e98670326de23730a4a62d45149b132bb1d9df3b2badb7f6e44a2bcb656081f8e4fabda6b68553bcde9bdac7b44a8ee11559de65452a4172cb33cbe1b514bac75fa841b65e9cc506af17072ec484426554a58aeb93e410821bc9913327b5914831e8439e3789f37309438a27b6064b6566be7ed9c571e04e204b1aabd7dca66261be01a4a58e6a199042a44577490e5dd892327b07cd7400c8b9d11e958dd2c17fa09bd6640e817407d66272fba8c7998a3841a4f046abe3ce88dff3e6b9cb8c3be447dbfdcdab28ef17616152c3f8c31529e71a2feda7ae20dd067dde253598e6d96cf5bce7e693d4a5f2bd37917106fb4f103597c744c76b7a7a6437f0b98b72b111f7d0742df5070f9f7ef79a45e7331361120eaefd91499de1eb505f4023aa122f1dfb349554fd50b7fe8d71f7a43aa07f7313e1b762ec22e30ea554afa66f49fd24ba93d3365962d2bb367feac140f6f920252faf285741f54617e6d9957f80566bc617c7fb8b32d7ee5c16e6caeb7023cb1506a8c6dffca50d5d210a5946e693c11be94f5651871ea34d478a263de96f3d6454a2fcd2d8f9dcd1a1fe348f1805fbe5c995f9bb6fdd02f5fbe78817fb9757fe0e49fdad64f3dbb71ab0580627fe0972f3236fbe53af0a20ec4d5ba66166bd77f718dcbd975e0253de82394fd71da59840f1b45d8b071d448a03c196ffc2ae34d1173bca91fd11f144c856e7fdb11b69b237c45df7dab15b1ba65d552146c97653f4f9cbddb3ec51827f4d9ed32468ed10a4692e82c573a4b67814882f09d9a29b7131664c53fefad834fbebdd403eb039f30a31e73845d7c1ff8e4dfadcd3d8ecd59645d2041940489d8d11f12578c20e20829da0f47645220a1354142fb0012d916249080c40db6c876a05119ca62a0313982e3e4c1326a57c8a6d09ac8a2683e1cf194f090d0c11e4fb1ef0a9196a75e136f268f866d7d60a3f74ca7de4d7fb0a3b76ba75edf6aa75e2f4fe7d9dd2abf60422fc617e1f50163eeee6e5ec1ca0111a8077befbd07018c1b729378a8ba75701f9f0d8c35efd6486e12741db0b3c4a07fcfa66f4a47fd1795603f9a7b523e8a153cfd5bbc0ebb9d4fcd476fc8fdded6cecc5770ef31f30f00706e61f3f8298f2f6bcc3d799cd1d237345ca4bc1d1ec9fa0675234386c77077bfde420bbe05c06bdcdbb91258196f2dcdc978c959c64f2edc4ee85d70669f310306ef0c1083773370dea954de6d3278274300dec1bcf4ce7ae91dff0ca7719b8d9f8a9dc6f69e4a00db7b2a1936d5c6ce6dec31ccf0ec3018e01900ae035dd85298c6430380ebf3a0f85467291de9c0874fdd2c5e66e83b3954b3ad9a93f117361bcdc9f8dd5e0bdb824be7165af0a7f1b470659c06d59c8c6301d890c0e041f80e0c170afb0ce9db866d3436796b666c9dfd19b505efb294bb70bb191ec3e5d6d997a9540b72866fee33626c1728bebbbb8ceb340d8d4be9820b00f016dc85db4947f98c198e518da785ac851900d85e73333ce53a906693e11a0f2a757db297e1dbc523e3d6e6645ca7515bfc185b7c1927aa452fd3462fb3e4655cc6498df2327208e2e43c958c6fc931c1c8b8354215591997b1642c4bc62d193faa32323e232323e358142743d99297f14c46e6c9c8b8e63297fd24a19bb64e1a75b2e8dbedd675cd25a7a57373a95a8f3e7a0244ac475e689b04a753830da7676424436626064a062ac68c4cd12926276b0213292875ec226dc75f2bdd24fcda32a3dbfbf9b219f615f57a171191471f8016db5d445c89a8544964f99cd5512d90439767ded5e85209c4215de9644a4b27d809c7e475757a5ad0474679c844ff5e805ab087634f1e5fbb9dd06b4ea36f601c2563462ae6c6e4a692474f6d59abaccf38bd7519d651d63ae969799277f1491e838467cf8640a97876ec49412f67b76c9ebd3e95939c743be9321ee3c667c3aed327d781339bc9652779624ed7e7697993f5a8f5b0b868328337c5986e6dce3a8de6acbdd24b1bc9bb9ca78e6d1df7d4afad433dedfcc84c4b1f38dbd367cf167b5c37d796b3bf9bd7c23a0f6b3e843ee3d2f69ae3b62eabb177e3c2489abdb28ddf92f835ec2a61d7bb61bd1b98979ce45956d27cdc7f6c7bcfe67a36efd9c4674d07f509afcf496a3d0a90022b4d88b34ab527c8d90e2bb71f1a1c6763390dfca97936b239f8ae3871f472fbc1696ba3d9fcd9407fda47a6415198e9964ba7cede4deaf2889746fcd3a22ce225933a37b982972af8a7d149c47220f83cd6fda1df63b9757ba4d78faed3ed95d61def7fe84f2f027fde4ede1f5a047e6c82bbbbb9f987e415c25ed9c8e91bcde496c7daadbe544f3233ceb72b79e631b6994d663b6db0e424d78176d3bc94ad5e8b9a966382d9607da059faf2e54ba963153472cfbda4f9abe6af9babb3d985ddae66a3691553bfdcb228cd5e0b8b39f5ebc23094f4d82e7db86fce1a36e98e35c3312f1bb90650fc8e09f8f2e50b13ee1bd8d95f379e7db4a21579607703e1fc9039c63527395b1ebd6e1206c6544dd5544d25af1acc46728d47bb40f249ce91f86324bbccf9aef107ecd5607276cd01a9b4deb368d8c0b8c9352f79392eec866a95086c6cee543fb38f68c8b32ce368798c7d332fd9cd39abdff74fb0d3dfd3f8f159a33df8cb972ff302750ff8e5cb972fcfcd0ea37840c910d40794f8a08682704218713f561e88e2b3d279444740530315d83c40e4b3054521b6349010ffc011200cd8e0890fedc5c4352cd73082651c3c836bc0d40f8de21a46404d417483005abdb6016660a3773927ea1dd7a0d2a4fa93b789e53911858238f54604548fb709757a1f070c30039885d481935ccc497eeec06e6daed6e99c246b6d3a8661da8dccbb6a7186553ae5914a2754c2b5e5638c2d5cbe9f8d31468731cbf30a0b35834a1a4b63e9eeee2eea1b2b7d63d438995fde58fa86faf5ae6b4b27ad601b79c09f91a8b9588ae2e3163f8629f6cae2d27271d11797e6daa378e99db4a232517d5d52dba5588e617435e54227ad74cb4adbed12ab3f2efa65593ca365bd28aabb3fce728b5df459425cfe001e0d65590362f4ccfee8f272abe918391eead2de84cd9aeb25b161107238dc5e15ba44ef72ecd0379d8def14bc3afa618ec611400d7d0324160db5f0ed43da7da08c3672a2ef881f69340e8d74d286044af4207c8794016dfca48da6699036648cb78b3c7c65fa1a6f426a0f0f63760305b8c6c62e3709708de850e341011e846035cbfcd4374dac6b1ead6b9dd2d19f3966a9d7e68624ea762bd5a8dd505f3a16372112dbf8ad90846a18f6f8415275afe16ce4b48a63246daf6d5c1bcd71ffe56273bc0d2c7b737d03c4cf239dfdf22262d0217307d498e6c5c60f352d73ebaa1702750f186f84551ae53b7c04fad804f38e878f414de2ed284a0a281ace628c357fa1681090c45fdfd44600e6966571adea586fcd127bb2343621e396f117efe596e672905e6fb7c390197e805b8a077773c617f6f2a7a530a9c925720bf64586a5bebc7609167b798729b15867bf3b3b041fbb9d4d812cfacbda28133e2c318f9befc656885392291eb083ce4fbe5cb26428c9f717167a433b0455ed244a0a1ed796c9b74f991faf5df26cb058e81da6a4d6c01955b04c842921cadaaaa9234427666666ceb6e474998590e89fc6d3a1ee95d2fde5a539723e2ca58ed41d9a6b471dc9257c80e46bfe5d99228c6fe9c3bf16f6c15ee2d9408f81c2769d648987de496a65e9bdc9e0a1d3d9f27d213ae2e8231791514983514925cbcca45aabf5c62eeb9636d24629bd8f560a19661a51b6590821845c7b4a1a548f1cb7ea1bcbe2da391addd9b081f1f06ef40ff169ae25d09c909ad5e785394873ed4127eb9de5c17a598a9e9de32cab524a8f2ff49c03e55637941335a09afbc1421bd8cec6f79c2ef472c3a4dc80faad4b00ae31bd4a1b7d13bde1edb8671d44efba28bc3c879f1ccfa6739aeb326d6ace1e69645b0e3f369e4daf9e8d2635b9a53429a5a65dce51c6dbfd50abfa8bdcc52cc777e63a9dc373e817ec2e07e8977643fc1ff831db72b04723879ff76cbad55f573a7bc749785d324a282fbeaa3b945e044222115e69dd538c1003414683136cc77134563672fab2e617970eabee4e2f662754664fb5ae5eeab0fa1e78aa1008588cb7db210ef9c8458c11c63829d163357314c42979ada7a7b29cb4595ae6f3b45ab5af9642440b63a42fce5a835ea4300b139bd745ba48f572d29d53d2984d76926b7cb9d571ab9945d1780d95934e3a9fe4d3147c3adcb28661587ee622f6895407b2ffb846e75c699a9b7ef96535e328629f083b907dc6c1d6b906ece7bb6ac2428ff4665a5e673f70e2e8b108618c50b0fcb3a5e487e506fa03aa007b8e392677488d873a73c7eeb37a1d56dfc377c673617d564fbdf359753e2b4d87e5d5a7c643a3ebd093f90aae36193016e6312698cdedc6d7f61e3b7a391ddbaa55371d56f7915a7680e8eb4b4b6ba55ffc98ab269675638c3027ae886a0d1b581f70562259524622c1c06cf10ab17ac966505e1ba5902b8c85c9604830303a6d49b262985f8eb1b5d67748b72ef45989b475414ff24cf3a791849e4400ae8179b675f1a95f9be575eb3ca32d68a287b05a3c58165d3d8107585f16dab59487ee99a50ea471503fe66c2972c651eddb519a838e4a8165ef38890e6c1fb0d2ab610e8a5dd0f700f5cf1ba2cfdb6540e83d6a3c56fc193b20cafe9e2d8c728a87e51763f4b230aaf1483adff4d9d5140fa7737af5e9357ae481291e74def9d99cb2aaf9abdaa08fb7bbba60714ac09a2ebc352deeb3cca2b62a6994452de7e8c2d72b73102950432f62d574489f5a4d73d375203bb3ad692e42d85c3efa23428d291f6c67b35aad45a12037e31776d5c51a57cf393f3a6badb5f04a1963ca879a835ac2dba21f2bbd2eed3eafcb84475d6d2d93b7c4eaedf2c7852f5fbc3cec8480f8db75785dbe87bd99c05e0dd6d1896dd4314d5a3e2d9fcd1abcbaad63886d9977d4b11ff83d1cd92fbf2a46338a39bd1d86f9d3608feb7b4ccba7c7ad56fab3359ecac3833a9d92533d64cf7b8c66ac65f4098fdba9037a085752c86c0c29b0d43b145bb57a76c5eb29b02ba82443c9c076281d1416a7ead9d78ac262e660e66b838f1a749a6b14caddb2965b164a06965d566ef6a47848ff796b220d16b6a390c56ad4d9a30ae1500c22389252a2a1a9a1f1c2b22a952bb8e87611a1943a466f4ff5fa985b971781179bae557f5fb942cb67bddd35a9452dafd5b24818e64fab96e5438858d78665d1c8216d397a6658d1e0bc5a955e6e6d296a5d56b5e8e5f5a957cbbadd4569dcf2ecf2eaecd4a5771c766d29ac5e7cd58d48add5af7a5d8af9758bc0bf3cd60c0a4b3bcb7f28e74560e4a744b07b5d3e9d2757873e6fac570eecd76a6fc76feb5bd73a56ae103206b759d9eb57be3fb408dc615da7df6b1bc786710853852cc72684d077c820933f8d859e09c035aa471d685d9d2615f9a1cf45a4ffd0677fda02a417818f751a80d9ed32874e37223ff4996fc72387b0438716eca90f7d08913ef2f2fec05bd31ca4e17ab667d33ee4c7699a6be8ae79878a3225194e1821116676c9b7677a7d49dd23f422f0e1ede6fda14f5dde22d0c6275d4b31ca73bd4ec3dad28a168451b243787facb7a6eb34dc76bc2f12ef0ffd2943126c874211f9e1e17b80a006e0d7dbfdd08fceac82c2c270b6040a9d32d56175fc984fcdf3750cdb7aaa63ce5b4f75ed1549766deb01e2d7e13d633e25bf0e352f6f4ff41a312d11db3a9882febe487f0f8d57cdeacd63ac49c75c46b7960ad6cd914ac5606b3c50c6ac9f7f78b6cfd36fd2e1b3f979cf46e2bc1dced8e1f6b408c563855a58fe1adbcc9b21fab59db84674de6c735cddba19cf9b3517a1e0d8f524630486710c4f2c5fe6582a4d1aaa45c6596336743a1d597a3a1dd59a552734345a3219b0b09dd5faaa2858f6ec3ddb6d512e0316258e2d4c9b981942860c19be7eec3a6884209fba48e24a144faca755cde9d6fe4ad0b148b7ce8544b8c1941c6e422f61aefb2209487299571baa5dee9e5a547a0c94783896df9a459f37c557a7b9e8d0239016ec3302d23fba1a9ad38dd7baab8f37d6396b626c08022927a8b951e2db08aa623be11a918bef4e158993f8432bf13136e6c403b1f33fad0765243df0c6479e4df40144b1535ad15ede0d69d437d487b82ce142096791650a22fc1d1fe13e0271da49aba2d76a6d971e4e965def6278e78277317cacf111e76302a6f8a85deb4646ecd788eb6285a33f8e11883e5dc0bc4d8c641e04f320287cb3ec0e7976acfaa07e5eac5a61606fa7877c797b8816c1b3893e274e012ccd47b7e1e4638e5682e4bb2cbb4214dff947205c61ca2a674a16c192bee93a09117d53b97cfce2bb2cf24e9dbf23be14c1bb31ffc80094b0fcb41d306681ddd0a303fc540fe8d429e7f0f39e8df5e2d6e510270f6c1af434d2ed073e9d597339fcbc3ab7947c9b54c1a9b90729ece853ca22f0630a30fed9b996b90d82ed5e91aa06d6068853d32ae815c29aa21ae883005aec8f6b4373d04d4358e87d83c16bba35776077ce1b9dad6da30f422b9e7cb9334ca619f674727b5f73333144a03cc665646464c89021c385de64f299ad8b3fe328940c136a8b11e3a84de86d8c189f89711d28b3c5e64c7edaec6b6e46fc8e864c4b1860af26c6c75df1317a8fa78a0edd06888301208ea870faee6db18e8187935d56c2aae8288d54a9a0d987858ff7b10a888f9f3961fdb508d1816f0392cf2b7838ab167c9c45eaa3e0b112c681793cc147e712bc1bd2a30fe3c02ebf1ad3651c009ee28d3b4459e9ab8f9bfe6a3f479102f66afcd17808a5b4621882ec7c6ade3a8c4b0f027164b8742110e7edc0780c970ed437302e3dc6b6b221c3b4cdb8c9636262502894ef788f72a18fb175fe31fcb475f54f3eb375fc336eb74e480cb76636197f9a157abb01c997b9f009ae61f2d3d6359637b90e8cd96273f6bee6ecd56919dbdbb15ef2d738a4cc3accad34dedee94cdab4ad43bd3f76d5534b20b05713a4566b51287fafe39e049a73769415de3b95005caac02008597ad004086014edb4e7401ca10e1c018a2caa18b184125eb0d3ee5c4d3341cac69ca9a0d8e75837cce08b3188216c62a5c84912488e1c65a1326509115cb6185979e22409922c8e88a83059d2858b156f4583bbeb1b5979e22422c9e288880a5cd2858b1546519ef4105ab2888268c84b978745f5c4f2553d813658c2082324ad9ecd738ce7834d250907d8f4e773e36f4c05c54ec7981bc298e2218336cce7567bc29f30e218c235e6543db130559c2089b75f7dda308471d4700d681fc7d6308e1ab84687aaff1836a9ebe1edf5296d3b3407bb06c6f15e8dcba1a5dd78bbdaf50760898dfe44f87d523dec53b77fa9c01ee3b01e4ef5e79771487fa8ad4215df788da7e2b877a39f0d7be737f0318ee6faa6e34fbf2ffd710dea5c4347cf6a88150d1a1cb75ac9a39a2c3b9d6868dc6b6a7080bd392dbe18e38c352671892be7782f8ad98d04f66aba6af4d1bd183d01fe5df152c4b7f6c3a3b90e7ed2d37e78aaebe0bf5ca7a193beb1cef5cd29c65f6518933fbf00c5f2ac3764f3706aa5c11ec08914ffea141f291688538fb42a7aad16552996228853ab51c5528fa2d728760a4704a3d76a2d0ae5ce71ab15e7c42410c706a88a5e95402dd1eb96e8b00846471d25c1f29c043a81388cea121d2681385c0455d1ab12bba46e19d2d19f6345ada56ffaa37751e358446dc4c5ca4730a210c330e2bb3e02c38aef2d1fbb4441f45d7b39f2d1ea97bea35f46242c8c631e9d37a2d89b9c424552692e66692c6d853dfeb415cfa68d78fbd9da4a7346b4ad741185b1dcaf8efa84263649c93065c2e466391129a5cb48192aed2c738bc0afaed35b173981384d459d420b14129c7cec217ca4599a8b1abc140b018840b17c74194c626e5b793671c84ad3963d9b1943567a578fc8279b4ca23929abac9249cca25531c6245a153d72918b9c951863f42755ca472a1f9d93409c88c409c48159c0285a159d098a888f71082f282e960b2756aa1545593e72d15bd9daa8ad889e6d9da58f9a8b1049ab3a8b5645a7322465c993249c098a080b87d0f2ed0505a3c31bbb28c608dbc9291f637c37ea7b471d2dcbf21dd2ad2bf4fc1d14e4b9b72af4f052806bd098f7c56ae21957d0a8e1381a3466f3518ea7313bd1d4d0b091936323478ed99da469688a48203967cc4e994663b5aaa139d9b0218566333c32990b58f9638cb05d73692e9ad55d9a6b7fffbcbd34d7f53617194c6c577ba64b49855f97ec2dcbe22e976318b317e612c5bef72e759f2c760eb05743dda6188079e611b85c738c31ecc23c73202ed75c28c58092678e038c6b9e6240c9330702e39abf177aa8ede02f37956200c9330762720d0892670e84a9244b37c538986e4a9248971b29992eace418c92f17da79da0f24a51b040548c949de8067c49226e9bea6c172cd332d03e2cd3be940b1dba1b9e740d1da7ab85573cf6b4b2add5c8402a47a57ac6e1d05aa6275d25c8c31d6682533338cd397b783891e63ecd8b18da090c39d9333856433179aa727a9038d0f8d90645662ce9a1a771d381f2e0ac9662bd89c6c5d580e49cbb0ab557d3beaf31699dff39c1d687ef7408564b710446e04f3624ece0981aa76e729cd71ed766327f6fd3fc83c44801c58a672594a732614d88ea57cc79864eef57945884d037c36cfe60d400a22fc3f300b475e7a10be4343f5f7b67ae9111dfca91edfc39107aa4220a92d07e87b457d0262ed2a454f5b8a5e8f71ea3137080a8de1311e3483c16c296a32b98c0331b98c5397b94150e80502e3a81b14c3613c6806e3cc870c4551193486d34b46a373f35183146bc3db92a22eb433b3a5e8250264c6631069c0dbf9297903de8e8cc7b841414f68670758a9bf1dd47d3b311ccedcd48f189e2add06bc1dde99f1140ebc33e3bc3373573b32423b257fcdfd8037d6d037959a766ae89bfad06d80ee0336b1b72f23cc245bc74af8518b52f7a9378bdb12eaab91313ad6ddb7ebad5b75abd748248be29e0455a4db699e79cc666acd310dbbbaafcbaa4daf0e94f2631bbdc70ed47a650ffe534b1abad8eef4d1461aba58769d3e62c1a3a149fdc035dae376718d769411023530300c352714f3ed1ef702db57078421861862e048ea843ed290a1656049ea8462e0349ec88cca2c43b8951e13db570601d0b0190053ce33199890a25101a00595ca0557a954db0c954a860a156346a56a620bc78f31ca88a37144c95b68a68a82854f37aec90b494c8e9571c87fde44ec4209fce7278bc92b440a734bec1efa1907f36b028e10b600e34c9f976fd8bbb7c5f7ed1a9ab08ce341a38b05d873ac998b8c119eb032587a4a73dcc34fa2ce57b4bbbb6f0f907cc83dcf6146fdcd1bdb653fa87adf545a8a14db7114b62b884ad2423c1c16e2a9d895a084273c610a5388b2e224cf86ad7d37780630cf07cffeee0e9ebddb9e71c0bc847d4c3484b5bf1a1fa727d8e7f4dde09ecdc361176678ceeffd8c12214c89e1d9b0c75461bb181e7c0d638c8e9e61dbc0ee83fd07109c3c07a9918175e13d08c47126aea0e2045700a1e58b1df6defa87281818bb8fe6deeba8b6b0a729a72eac9ba0609f5779cecfddebd2bd29d827b043e0e1d4a76a97374ee1be2276c263f9eec524c176f5ebbb5161647c63d1a1b8e8d98485c7b3692560f1dd41b0a10afbde632b3e30c45bfee1988ef08084955c098214a3243a030215df71122044f96628a46fbad2bb62a4e5db815c11c291ef9a85ef5e16a526d65710c7e67811a4c2446fcbe39824d81f46b0df6bce798becc24a51152060520508963c7b169f5f10ecd574f0e8290c2fb0a59b9a5ebad64b8e83f5d235624473eb38c090ae4395a6f90aaa34d7dc86bee9c9fc72cdeb90cf1edfe95bcff4cb2fc7665f28ede775350b92dce438941c5e23d04b6eba46a01889912102fb9abbdc74991c8776ef8b83c9dbfb1a816e4a5ddea61b04e5ea1b044d759a4ca67bc11be34048de315ef2989bba4cd331b8913c662bb9a92174230e7f3ca326ac1c5e1d931b3102af1093778f68cb0eef080a7d4df76d6914c790097402a560130e01e79cf3baafb946d29ce6d956da529897fced903648721cba9dd46e24c6a1bf9d9ea26d1da53929cdd1f7efed5492e36072375d12e93acf982d35a7974e6eba41253f79500ce6abe827d28db9316ee26ba4745333c681408fb9a9e9262f797b8cc94b0e24c6491bf498ad9db4ad4c393728084a03de0e12235080c47869c68dc45c3e0255d44b1ec34f97a34015f5287ef218ef384a13625c5672040a33b7747908aa2895b9ed04aaa81b31b991d26522ef78a80931978da08ad29c151bfd203592e6a893b6ae152a699c47c55164f2d45f07a3e0a32a4c6816850a2db40a2bdfd54c79fa1d249ad42b363b7894440b932d48ba4b9423433049dfa4f8a839ead4ab172c34162fdf3517617cd75cc0f8aee6aff01d44f2d46720c23a7538049d40257447fc0995b48a3aa5d49b7a3bc148dbdb814afac622a23ac704da1d45df644eab536f2ba48d77da8ae72d5045bd359e1f0f522dcd51bf91847d4ff252c75a9e7adfd404d25ebaa9497220252791bc7481984c770555acedc06ec773c34a5bea72d3752f2fdd2028d7055272d30d7a410faa48294b731845df748de5a953cb824ae01226d46112d049e34491421d4ee91bfad4211548d437458dc33bd42ded6a2c3289ebbaae1e9857cf1c7bd8cc9e765da9f1f464fe7e6e5de635cb5cf339273631ec769957efb2b75cdb7a7e82befafb8c479c3fd0aa1a76bb218fe2cf7c504ff3d3aaec50c5cdc4a95378441b004c8c705605783835580f4786caec69652327c6082da4d002091158384204494a5083226c9162092d17135e78ed92440a09305b0a83060d9d2123c18327654778045389a9e8fd587d365d359e212b0326b480354a1624bd02db92194d2937a081155d5890840a2e44c0326484225cb10112531031f18212133580410eb164890d86380211484084f7c587151461480840107951c21639aa1598c062664e481a0c2173828923488d09d70f55ae1d500182c833c8d981fd2113c177ce0eae900a42b085102c400108888ae88007bc6c39c1921bd8e0053440010f6860844d16ae585902f6ef8a9522501b6cf16d79fd89478e94e081a8f347ad478c6875fc28f8dd0f3bc24c8317a6c8b213bd1b30cabe797d43ca62239d3246a24ae50dd2899452ca558c11461821841042b9411f51588e34c618e323f2e1c307f4e1c3c70f207d6379ce3f95b455ead46083456dc49793a3b9b6913dd1d5e58f87f6c97823d12aca7bf739e74f080cba0bb0594a1125acdfdd92e4ef867cb1f931b324b57ca1c83c832c4868232787e9df952a5b261845931e31c2d24246ce0e888034cb12bcd00162bd1b2baa3cc740047b0d8ac651342e84022bd4e08a111578f0e50920bc280a628a2278c0050ae60c8a1040ad021111306707308011c4142054590108a26084072b28c2962eaa1802141ecc2089a44e74cde774dcaaca15f5df952a4258a2e31ee8e30518342abe17a2aca2b8bb0041800579373a08f420417c04f115c4d1fc91fc51b7a8755f9554def89a90fc052448db9056b56746b0d0b9873fbc5973a8cc36b1ab261c0a052dac2d395083a269ae0a2411e5a89f54a852f41007e54f78a0668a1b00c1355334111341d44c11af545182f4ef4a1526553ef0ddcaa84b74b7cfe6bd9b39638c312a018b2f2cf1c2121542086137e423d80ec489d05647a17ae7419c3725a9468d1adc8c45014e4c7064850455bc0021c4c4045592108526d0c005514ca008242680f283228880821d2d8ea67084267ae0c5162c9064e1094ce072041f5061e7496185284d0851c40a64f0c3ce5352050a9c34a7e52d298a9e7b4cf3fabcf9aff0adedb8527c79ac7d780cfef058ccdef6aef40088c76626b76ebef4018a2db2fcf328df0dccdf9d2f3df66445e2678e6d5bfc4fe933c7668685c71e3361df1529b0c08657bcae4b5ed7bcae8bafebbaae3a83d40925f198bfed5d91228cbf36a1ef1ec93bcb9b44ea213def2c2f691d75cd4924cd061dac94b1a6c372eb06ed76cf2db7341eec09610930b0afd88c175d7aec919de53d96438f9a0f211dfc7b343a6d019643f8fc6aef60065a3e8fefbd87f144028f0f5982b8c10da06072831d54a5c2151848e1c3151e28c150173bcf1f8fe028c2e8532808de20283870007a5012de81d7480fd07be02e6af083233bd73d025dbad00e756b7be189659415db59b97150c56e5385edbc8ba08ad9a592ceb1b19ac962bb9609c376abe7c6e2d9990a2644cfcf9e03c933511f75c327300c63be9d94c2dddd5b47f3b14a3927a5d5b22ede302ccb348dc45b29898c376b3798cc741125c1638a394da122e53433c333b29f6ff70019999999878a81c4cef75d1ec0b0ba7543ea86c5a7d55aaf85ce1bec79cfa68379e8437ea06cda74f6969a2d7b76774ba7321a61afa66218a682c2529fee987cb0d66ad9886158ac447ee837f7eddccae88d37ae621058a43506e13b9933ea5a7e51778dc70c3d561fa55b1a8fac959f7f66adf5587dd578668c31de0cd1b1a629a8d46df6843dcb189a1101000000f313002020100a07c4218150402899ac99ee0314000d8ca844805617c95110a41442c620620c008001000010082401434069a07181ddaa605845e6819cea16a03192feedd8da33a2f85ec096ff4eb857c6335b853511c8881d44a9f6851cd81795e48cb89f421c878c4cafe034aaeef8f7de8c04e14b8a67e566390bd17bbd82d1dbf2aa7c8593c280c3e9a25e7539973103fd8e73b4259d19ac375be65b643b624a4dcdf3958a3291a2890e98f3184e864c76aedc107d9498f117f87c694b97527417f443403909acafebb6bf9870f95641fba05fa0aade626eddb4121ad3052bde5b6987bc7338f5364bac6674c1c3ef0cc05fcbba71e391ed99ef642d013f486bb04b732b1e1524b76efdb57f6699f22499076a13117db52c0da8e996962ef3eedd1043220579ff3249926c05d602eb836a389f0c56ced3fdfa25860f1423d1399d8f2777551ebd5c741e975bf080335b7661d8d34dba54b38e1716afbac2043c5d204c350093a1e9a33ab1b508bc36398e6688329d1a2d0834625b6ba9022295a5751b4ca0533bcc82600ae73989cefeb9a9c0c1a2fdb840853a45d385bacf9b9b03d4b74caac1b4a24a5a3ce71d338a11824fd9718c0a947ad323f5c6aa468683a2cf561da32adda36ba77bfccf4a7b9e83e3759c95eff81c8a79f50afdca2e3ffa9d9593cae85b4b467b5bd3d9ab6ebb393eb515aeb62a9fb0c0a9e85f0c77e8aabe740db5eba83c6fb28119d7a2153870565baa88207a7c40d1879bae6115e73053b9da083ee9b9fbb64d63523c0f816858e9f0edc9fcd16c7983b79b7219495eedc709404c0bb935026254a8c97e87612eb3af8e8e38b0e28171c65aefcd02d609bad27c9ef07ceacb715d078d1f6a549cd34c8fb7cfe2c8f886effab97f3115a4efa7301775e80b4911b95092b065e06b4f83be008e85bd0c9ba0fa4203d8c8c4f658f54b4f9443f2ce731bb8ed98a1326366067d61330dfea54719617f59eccf17be275207e0d50bfeb8967cdb0113375b10a282bd48c65ee252e8cf9710ec64b4f37ed96191598d513b06bd67feb991d7526ac46bd27891344d78b6fa162466e2c2da7f607bf8aca9d27bc7e1f9b38b751858928e56f323f38cdc5cd64ac9838d6619606f03557e9e25e7818387e422188fdd427f1710cf0e4f481c6b6a65efc94045b43f97e4e06c90c3312fd3f81e1afc5db3c42c360f8ea029705482bd4c05358b8511dff7cbae267dfc02c35fdb2b2e00aaa711a6940e83bfdf4f014d8cb5f9d2b76eb2f87f23ed98726ac126976853135cfaa52a9fa67562c7acb61b08821c0ec668ed49002d7e1bd1d941ad07fcd0f32485647d15bfde6b8422d7880c562691123ed1a711ccc571b13e3837cfbd61ef4c17d68188a599e0c474faea0c8cff9c4440538a0653b36e4fc3905130303e0290342318f11e44d39112efad0d936dc29da78c305e16403cf11d34ab9e182f101737b2c336abe1a25214b25bbf886cb8813e1f96066f341dd59e58cf5b4359729d49ff18acaf32ef14b1ff5b3b45150c9532a2e82a61c0aedaacd78a4c3ba9c393658aea6043af0350f4db50f560acc0e37b7cee01ae7a556965b72ea4cab58f0b003ff8810acef7f8403a0e3d0ac46e6a2fc376e523b684e63cc9020f59654562dc46144498d1297d974e6ae1336bcbdf7f92a4b31ee76e3db836e9212ba531df1af2efbb441872e7a25e0c486ad7ff0ef5a06ea0c9e35c19c1a88016c15a0c4943ba0fa06a65eecc179de5418e90e49ad5d80ca0a04929e460eb7a4454b2b75cc1cc6a21f4ba59afe5fc862645e8708dcde1f663901f0239527775be0f995754234852caa94b4504329cf932c67ae1bba032e0973782bac183a0dea6524ce31b6ed4819c6854bcefdb691e0d585bef9da158abb568d0ef0773f9b63d1c8267636fa018105fe51927b2c0b9defe48b2c20e94486b61bce54606924c4a2ab50fbd4f24f4d4dbed9c89c0319f857fb360af91379962c3fdb9e480f499cf031a5ee73a367b0362249bfb9869c496f2ef7d1fd84186bcf385c9ee1bbef43cc6f53843cca0023488ad320725b6110f5f07ed4e373a2a67c34a6b464dd80d06ae6487e040a3ef1950b77926386c1438239aa2154d9206056fe19828f5d3d4ba6ec8e2a838cc172587282f86b1ea407e8392c8cf952087c4df00d3bba500837273b7947d5e5db1f5feb0a738378de4e02a85a1e929d9d17d8b9f24a90c6b90d378ce0a7b2ad5479d9725f2ad76f26d059486c7f6414e7647b2f9cf4ab36f532b6efd69975bf6a203ee0fa388c2ec5b817838b5fc87e5b17cbfb93f41cf338876a9d3e9b4d61ed736aa41a7d1752886b11efb4e816dce009dae67c89cca46127171d8890586b8092873f2a49a280ba480e429633bb68041f3d7ed105e05287df723b7d03e14682bde148273e15e920d71a4c36c37db19094eea3501e8c29dcca9b6c256b0578a9a40bd3a9522330d6e02dce6d68a4ca152281831b140c9a0b2902d80318a52933cf925402a1251e56cb27e00458190ed324d01ec1868f89f8cae4ba9c59ec1b550b45bdb84df031ee2e65d1048c498401bf35e2f32fd0ae489e145ae1d8259400bc293df405e30bcfd713e447f4057c31c95e03c267d1274fd158e19f36a6d08aeb4ed6256aaf08a62c447489b9f4430705f3fb042254b219333338ee540087fc67d463dd0c7428c1c49b66285c2e815746040dac727eb246d978a0382bc1f7595cb015cb889a4c72bd94694ba86d87707b22c63018040c6c6b9a2912a4407e410ac263d2559b3fb375cddff5aa5ff805096ee46af0da1f9332921468a78543935bb2d9272b7fe0afc345de616f6a889d2a34d1c212df0c83e38df4f545990add338f876d9f7138dcc5372d9b7d12d58de0fc83c204928f1d0fbfdce7a694a573a0b369dd474dd2c9575e449b0768fa116551139333bd4e70c5c5af481884d69942a0a7765786fb5b20f4ab67da89576c2a0dae6f15ec976661754f00c8f007b59b533b5393f83b6ed68119f73ef88a38ff955b8bec61b898da2bfff5785d3b22eae4bb9dd77694be9d5cd8dd822675ef0485d53e356874451bbc687cfb41a19727445bd6a34d79f3c62490b399aa942ee176d400969e006b5f40b043d35157dbd3f015c37878b51bc067a0b019642f5460d4137c180afd7f11520363cd8864a338456be197881fdc05fdb91e7bd10aa40bcbb940734f974a482030c33a27b614811a0b0ed99ec3e9305d834f2bf3fdf3308d0f435b4c958ab67cd144c6e63f7cfed7e5bdb531268376bd72f24f932f86df28aecb0e11bc49a84e17702ae65fe89964edc4f9ffca3f56680ddf07c7bee34b36198c75cc91ae0602b8bb3f66ae68d3a6e248f5eafaff4becd12dc26e683426fb52008df86bd395e89aa673b27d2e08c7df8dd068a9126051dffe19eef7c9f135329a012fc69d13cdf57b04b3c1b0b44173b01f78f80ca4b8b502401e3be6dca0eb19b1428b22204feaae01efd2326d6c66c1ff3ff1e2c550eb81a17cb9f57388a819912cc56f592dc12c16d493286fe48006e7085a58a0256a517a9456a7402dd5eac6ee88cf94bc352f5830ae7f9e2ec54ae76587a47aa0c4683f74d51dd2114c484ea3bc349e1cab3eb10f237208a527912e90fa46696d32b6f7c99ed8fe83a71ce2559bf7e497cd21c74bd0a69cad30a00c453e7da529857f734cbe95f8807247383d8f79de41ca22b90872a3a138a6cd8d5d9d5351e47b6ecf114553757e798e9caba95a676a1c3f0e17d63ebeddf0616bdaf8b59cff7be3d30fd6c5a69e4d296de302f6e320717168d49ce7c24d3e0517d62856f6be0c6f03d945685604d97c1efc24ced30188f9c1c6a1ff5cb5372804a9758681c248080107cf02850c1406baa10df50baa401fd4317c0ddc012fc6d407cc639e003e2c49bcc98a79cf21e8a16ac3ba75352c79e246a0f231991c7fce15d516b6f0190e1021a47be18b9597ec1240643a909191d35bc29251bcb3412004bdb48f64464a1edd90bda20d4f8e49d6ded39f1002ff7d19557b1a985c0b255c5409101ec06b5eb171ded7b7eb32c445fcd5033bf9cd671f062eb77634ff2f273f71e9dd1b0eaa00fb15ce0c4e1a50c9216d510acde21f998fc5320047195f973d3fefcbb938e37b4ec137b346b9a17262965b4357fba9796c1ae18941f04baf7309d22fa408f7eaec37c0de569c093ae120d0da707265dc318efb2a21e773e88c4a0640932ea12f1210182cc8e1f892a5800781af1ccc47d025d8fef0c79683dfc517a42bd4dc5158c017e696b41cfea6a8cfb22807f8402eb4d2746a26fad9bcab37c4d22bacb94a55eab4f73e9dfe3a3d714acbc633ff7deb794b8ab087cda76bcd1994e72370d28b47e6fab8b1c09298f2aece6320895c2be8df0846fd5869812ba80a1fb5fa57b218561ac2d99024e5001623a2197a9245bfe0ab1d9225cec7f5a3f3fd99dcc828feda8ccc7d4cfbddd328983e85aeb9e2bb50049fbedd6748776fef3f97afe4cf567db6f495b1c2af5f32b551148dc1b8375a09487e363e955666aee3a24ee7c6fa4a8e79744a5bf5270c1ffb93dd8321c5effc1b1dd42830932293df7a62b78dde1323e33c2005ba4317a745c46ec8ed2b16329fda6fad6a9282fd05762bfba899b4bdf20d9e7eefd52eccecf338b04d0105e70c817f2b0bc19780176507b380ad50c957e40144469a9c3c677eb3299a47b32c15a5a7505c2327dff359de8120ac8a839ef503a2fa8d3aa2376335e9c864446bb0206354866294d8648d262b65d1e2a0349f0c5dbb94827ae55c1e4170174a3d68300ad070d11bdd6b97b2d68bacc92ac3acd4bff68aa579b633202f535a40b3e47015fa9cdd89fb073daa558045d6c863140184992abd8ee0075b8bd59c256b4fe987a74e8566d4bbc287a5fade9f016ae8e749ecc52ce328a5209b3985a31bbe7a5ad90dee945890a19197928e73f22c661416d6d7504ee452d834efd58392566e49afc654a4c9d90d5864e8d6b3ccaea8316b92779a8d9b2dd0a490347914a695e1c2ae6bca1b3cc040f136ab88435b9eb5c655d49bf5aee5e522e8adb078b5b73611d0904d5318845d5e7ca68eb1d041faf5cf32995f85c34b7afec63cd0f6e9667ff57c266df458edb797a65925f39ba04c90399e3cd7882c258e02e6e3cefe26660df0e871d83809f58f31e7316846a6ea290a26729a359bbc8471b8a28eb618a5e78c23fd5343e6ccb12fb2ed9f12edd37f2b3a41f8942e68db6d266a2bc47be0972fdad3025d688c9503fd731c238c301a4d568ec3564504a08bf3eba6ba144ec1832c906f05f1ecf3c50e95676edf58292048ac6b999dab5f57ca9485203c099cb3e306cd76e6e36ee68f269a0679f069f6f2b11e324e95baa97fb27d4219876ce4f91e8c78349ff10347b4df906fc54e8915385a83b94266464a49d355f49359f4236fbb839d7733243816e0d520c3ce98f6f869e2c48a070df2a9fd0c2bc1ee9e55f714629f841b2a5bd8f9154f1d0edf37ca240e3206bfcf13bfb21b0bdf421709379424ce28248a99440ab5113d07bc5d68f130c0bae1c28702b6b8cfb8a1db1be63b5060c915a00415370100f27853fe3b40759a2e3815bb1555c4f16f797f601954cdc9b5a23a6249e09436b8015278ea18844b3180356e3965364ac78c02ff1aef5a934225549bf9e480336018c65d2ebf11eba1c272e44d6c292d293f54c21ac26f4ac0694445bcea8dc82b66971bbdfb876fd17818c16aeb9108900661d92db56b1261b714f4e87135052dbe634500a9b081dea546f4b87459ee3192aae9d883358732c7bd1d7dce6a30ff75760a032f1ce19381833321fabd03b790150af646a63b58998bc977382ee785fcc37f54724ef35464725686e28fd6292ae03c16878d6dbe59970709893a87037a629e8d48d87521d2cdd05427568668b47963d0c81b61b16134ca97cd33c1af3094289f27ca165328cc52bd1b62f51b79489321251b749c80ae25f9ef2a37122030e80e615c5be49aef16d634148c70cd21b0af801999b5f730adf45de4d99e74790f780d4d573547a341573e1ecdf5034fa1bf42433dc579a1a2f4f96f9f9f2bcc85dd0f9e2bf8928ea1fad4cb28c2548ba8d6bc933673c8760c671528a0b4fc8631e316226a35884f90981739c9c3ad155665975e60f5bce89ba7f99a925fe174175969ab9ab405787e7a8c1a3a3ae4f8138ded8b59733f5f24c5097d5f65a0c583655e0053835d74e3f6d11bc9f5b076a1c917c8932617a82975776b00f12653b266e09ea4e33d1c3bc8fca9d98197a39d8f76a539d1a6690ec2a96332648ccaa4e087e8f83d398516bf1632c4a95e9f88a883d26a0146e87dbdb73986cc270b7cc095ab6f3a5970c1b1c9a768425d256bd986fdace1d1468d04bfa1f76584e8add83aae5706419c8d972bea479b5c048defeedb8beef8c4c509d5dd19d69c58a7a4feaaa367d81213faf4c6dd51ab56e3defa2b8a7b8c6653a1758d2eb75855f9449677e2dbf792146e28529ce71d971f86f182dc55aa8f3f0be101fb096e395f131e8c3433e39fb2afa0dadb76ac00ab69b52ca8f48dbe266f42ab810f0c912522606e950dcce720bd4474fb4a86fc67a51718b71b8bd013a3de30fcab54343dcda2c3ff654ed91b1d71786cdd134ea462847d1973e38cf1011525615f0e1188f6a29787ec72e4c53aa2bd4525ba65157d5b7ce502f31506bf87eebd76d1e0daeb18601c6fdf07503a89429e20392421fbe41b5ff4d5c0219297f19efc02735db80a33bb40acc809fc5a7e2c111c5c4f6f87ba9c9acdb37e19e9aeb4774b10e2a868e42f698904820e04b3faadf60d50475afa953074ddac83158012cdbc32d619e43abbd65bdcdb855817e0f6666847850eff53c1cf3002a1888a47dedfec62ae8449fe427fb82cf71ecb4c253eb7efe640c6f550728fc08dfe43cdeea2822d5443818f8052a928f1e9b32c89416305d46c555fa0cf9314934810992d107b92a3e838323fba778cc35c258c8b725643ace13684fd600d97815ac0528dadc2227e028c5d3044ee21867963a01d54a2b0be3bb79588c47f73a02a3036f20490cf69ee0dc070c9e48739b6466a29c7912819a3d525845755d11f452239eb286ca2dbbe34a60941f612161b9f4c14d4b1b8e999bf3be8246dd67b63bbd8236e42444bd0a755fb534eafe3bf294334591ddbc05f2a30bca7f176ee28710b4b50161837d8fb8fef56fc98ce0f40b447e3abf6a412b7b06e19f518472ab680bac55235048150dbd5b9a1d2f4285670fafd4b1cb10358d8c2cf7543e47c824bc38bce8ecf75e3f34ee71a7e98611cd857afd84e1e5fd7d50ab93e58e845dd6952c45ec22f08a81b32d983b0f77810cc97508b0f3d71e8b6516dab849050561f8bb17f8b0b38754b87f88731f9ec6cc7571cf0a8a226da242112dd6ecc3b73f90417274d3bce7733ee5c75d14f417823860ba541b73a2c9312d77c6bb8fa9c62d9f95ceb632b80fae69554d013d92c87b77415ec017418f96be4ce2630316c98d785682f110189cd8043212ebccde76f8ae15f2ec4fe50010a122204bbe5592b0173ce33d148374f652ef1685cb9169e38a8428acf1bec29a413a022dcadd3143506482ec711596891c3e121c2189101725e24b678c7c5ef590639b9728cc842c3313ca2059b281025b91e35be373ba5671d756e41ab6c1097edefd1c74d114cd0219642618ebfecfacedec080f24ad006a252a22c7e874a714cbfec831486026654bc2d2a90576bfb892b445e591ec2e012d9d2e607a56728c70b0039521540d97495f78b43452cf9ebb5c56116490354f2ed4ca6ccb91b353d6c7001c728c6d3cce1ebfac2b9fad34f159422bbe61ac502c5cc35d17dea923be059f4154ade5f6d232651c0fcbb875a8145aa3c9e4c7b916e93b91c8b535ae22fbe338ff2e79691e497e00152c62ab018ab1193b257ba55a344d7526cdc7e6a1ad15ecd44f534f18bc6e0b404a5f573b78458b7a3ad5a3bb8c043c4a40d4eb16ccf0fe6838f4849eedff30d36c85d3c3813c0edd3cbe780483f53bdd8c18ddfc76729aeb95a5f803b670dfdb4590d2b448197c78ba484e0983791b622eb5b43d439c13d0f9ef19972c684240f08b78c8c4969ec0f2b79eed5912d3272051090e3801b68ad3598e185a9fa077dfcb5f26a17809ef31708c23d40bdf1f8ffd6f8bd24c8b2d2fd420678b53c82c91513df4bbfe241fdccafee49c18b2fc84fd0716c4fe63e54a12dee29fe063cf6303bc3be6f4e057f0b577c1ba1e547a32a39390a43d3e05c9c63d3b68c983f145a0974c41f6a0bffcbd7fb2e44863a152c77c780624042d3fc1d0a336bf764c203e841ff442e52de2b70b9b16fd77f73719c8fd5884ba46912eefbaa113edfe61c41ca63b47e9fbe2249c689dd10a9f62fedf7d92692dcd8f738e498e001aa96a953d5baf3e6d1a8a5ec097ec3b299a2b7be4d3f3d478751fc106ea7c8db9490b76bb41625204846d88fc3edafe10b1c00b356c81c206a91a7344bf917f0e782f233afa808a3d2eb87660321b663efe500ae365fa0623c793ea2a0ea458405ceb58eb30334fcab5dee4701373295e54335c3b5611e3598b6492d0af2f362c37ddca4214fee8c71f6081e5538b7cdaffd3131e30a69a1937491584c95924289af962128447f1c7cb4540ef4df062c2f145209f70e42eed257e79eb23d481629fc2c75d2440072628bcc471e3bbf2f4c3e26d2eec492db6000c26ffe29d22c60ef8022a4c97254047738e850780f7c2d2059fe61195f4bf64b4a8325d4f87a9e9ba1d5731a2ed2d7e5fa67e93fa30342f063685e582c6f3ca04b0679db90b392b5491a98483de1a303458ece0a99f437ecf9f8de3bb9b52599e41b77e7612814ad918031ec417fe79007f9fd0c3a9fb32bc1a9fc0de61d50f89eb84b8393ee0b5319713b4961238fdc771b197c0eb0ddf71420375451f1a33a3164a846c869d3a91ff5b3f35a44f2428b6306e430de39896193f1b5ed77cf3d35a7d7bafac435d91f4400c6b9e9dae36424cb31a987391da5bc032986f14b241145db44adfe12f23ad4ddd58b7a7e4f5ee6135b66eb87d15b584fe560b4cb3e14ba756cf3c7e8482bb95bb6a199905211f153f9ec4778030d1cb5d98443a84e32455a7e6a9ec8b96c5c41120ec85434ec43237bab5e396565659799ab9d2c9d75d2506c5c42264c244258f63e663cc51418d1decfe7673c51957aa4dcb5062f0bbc9785109bb6e9689d6f70f6efe43d22b5da8a552b000043d7be2266cfd7b9d87b4adaeae6e914ec24d72b8606e1c0da2093b8bc691d4a199a1655108a35c74107ba5ae8eb635da1bbac7c7fbc73ce1dfe6b4224327e6e9d1babcd5645f93eaebe2409bf1cc24c9d93142443a9238672c7fdd983e0b99478b8309b1486834400c627ac8ab1b9e798264bbab6d35908dbc94ce3e9050e54d1fd34be9df3b90af803b8b63fc8481df7e52ecae23e57ba99e15e16297a76a53d16db29c14c828be8efad653486576b25d03a225d51944689514eb89e08ce850d1247e2a6341095608818eb07c85e854d67df01f8a3abb85189ca1a6c03d631339dadc4e77cfa7fee3025c129bc177b86c62862a7ecb0061f2390fdf6decb12a0ef5c9f88f885bffc311ffcd8a2ce736d32b103670ebd4d9b2458fc93907443259ab56f1151ab1b3c4bb8fa08613c261787aa350f76f4212fc5aa62a70735258758fce7281d99cac02ba274f8854bf4ee3374c564a72cb76adfc604014047d72a431f2eb8eb0ceef180e6023f7035e22077ceb4f17ce90615c2fda6e0b97c583016aeb496aa1324e5c22ca8d4c4a5d7e898b9fec50945239dd06c4ffa49576d5aa0fc05bd389b9cb052e67178234e81bb6cdc1e24b7f5090b93f59927fb21c2af8d3ece9a2c24757d3152568f2480b330014f3d9db562dd0cd6776bb17c673732583f5a296db2a6b02f37a6b9815c56da514086f8fe07375e666469ce58d8daf3573c0492552dd12169b96d11c0a59f633356e410e32b58c8d468897075082f3e1fb0c38d5d164b0927682bc3ea58c627a4e739d2d1c34388913fa7948a371e7661b1d5e043e2c79a2bb3eec0bdc284fc0df1380b039f6c974d0ab6863a0abd5b7197fc4d63126f26fb12b30c81ade249cc639120e85b41e0f90dbf59d94d1b52019986d010dd0e17a1ec7ce2f1602201463838887d0b2792c33a42b073d158a23418b205becf6aeba74a39eb59a49ef0181ad2800af3890c5a37d9a196ccbc13544e8a6be0b71212a1208338879a440c967d0deab59b60ca65686847da49f1bfdba5fd26cb79d368517f80a86a130750f3718c2a5e89dc321e05ad551ca1aae983e7ab69890bc6ea53eeaf701065bd856079e69deedd565a70ca517e210edd06ca0fe3ef8089f728d849d81791e29c6d134534751a5dacf39b3059b56537426b841907c6d0f5cd9c6de66ead80b90d10107dd8ac92ee758e0cfb955b8906af89ce145e44f13382a63d24093cc55a28c9b5df16530df551e7be8b1503c3f57e9c9a9677c0be683ed6782b100e89907e27804adf6e1581ce4565a48d58acafe300390a4e962d296f67a3e48a750430fe99b11af3ab13dab5f493e087b25d63a9b9bd97cf813c50e4ca590ce1af616f0a8917edaa8565021b12a23763de3ef88e8e8ededdef64aa4cb261b255c8341bb302dfc6740ea301cd50988c456ac6c42741663ed99364579ff0712966c7ac76e3f4d360a2013c757423f8e5bae00ecf67f32d2fa2f8a0e8e9e0b08501c8021d22c66acf2f4e7358163e937dbbe482c1cfb8f0efa68f41445ceb436c54522025900f4ad8f8885eac18a6c104802de686731053676595b1d030f1a42b93d097b5e74b598069c25a55cb1db2c1cac8bb9574182bf85d8454402a14a79dba2e3b7202a654057de04b46b5de30247ff10ab9ba3eb7f7f29d0f8c5e4405a07285ff55d5a05429cb7e76e0ceae49a851b0b2741644f0623a04ec8fcaec192bd8d393c67ead04ef4882af26aca111275c6ed0ca68147431fb5733ec01d940c0e240b13503c15a98550e65417880e9f69531100f999dd852d3845a61672316ee7cef8e734835b75b2e7a4a59f3d9e7f333d85b730563a5f39a1182f6ffaee1f4f5c20d912528023d65a03ff2273ff8308ddfa2dae32b41311f7f3df9109dbdfa9886c67f177dc5caa40815aff77bbdeea6c62da66432bcce4405e862b7ed393502aaa1e956f33acd4a9c509c6886378a94e248f2bf6076b360a25f11037c8d3fc133e151f2c916c408bff552a82c1876f6472e7007398895043eaf6375ad3f9e54240a3006482868375b2d4e8ad8f4c43b8c25b484ae3cc2d859dd542c11ed136d6c3bc41c57a61ee2dd81733564f1147203e013763bdaa5c3606ce110a0a459013f5242ca49cf92199a863904cab66c459647b531211e3e7eee6ff6393ee3dcc9477274de0cf2e7e1e616cf8ebb0650556dc5f8afb5b117f2bee2fc5fdad88bf15f7b7e2fe56dc5f8af85b717f2be2fe1aea0862099977355c2481da55608958fe1270570dcf4c20c5c92dda22986a2622a2c85f3409cde49c4f23d6afc4fa957969e6ceed9422fe56cc5f8af85be405b96682d225044edcaf68e836a98ccb6676cd654440594546539aa3fa7b40ea633d58e3a7f4489ece0ce2836fa615fc1bcf8412166441359a18e09bd910a0a1be1a96b7504a8f2e6cc3ca2d65b381e79b53d5aedaac6e337191438eb9949af361a39cd1077fd41680d5a9c5e31eb9f6cbd4d481c7edcd77ec44fec13861c3acc4d1d411abf63fa99a1dd5aed4fc624f5c7c95c8e80dbb3ad6a19a8a3bec45c7284d0d1eb8db20fb60e1882660c3967f9ecc75d15be044e379fb70dcd9cac5323f6da112e8f3e95b72d1fe3cf709fb9b4cfecbfc4e9bb9f153b08988fe99f452d7bd797ac1ff43b5178550fa9468befce9edf156d6c8ad273db04afe272a441ecce10f639dfe2cebec8553849d821d745d91d416d057d1733483bea0ccd9299006b9afe1a99ef99abcbef94b911dd7b3292b6814ce70ecdd09df7d5d4481fe55c8a330970abaf29140822628819a84cd28ea32b1c3a6fd042ffbb6ce090575f78ee2069977fe2cd097164487eb904ad0da1ce603f1d0806d7e2e6f2f0fa82f5290b3a47c989f696672ef1ae2b06b4f0d70959680691497263ba81c5e5052305cc5d4951f24a69e029ef15de80ce17cb0c928ca9359a17b65de31bb6ac54ac46cb937454ba5c0ac11ac0499d3b5cda97637e28c342872ab0eb56802c40bec20629ef9515559964463615d2901ad9b51dfc65b6fb6f406039fb52025217031199b7113330facb5e9556c4f1c71413bf71033faa5553981a10f04541aa48e027e69d019aec3b889b94675fe8bd27585dfddad2fad3766ff936f7710b6adf60319321a0bb73d344c039549a175a97df554fd9a949eb4316e8b94b10eefa53dbdd3a5010f2d0f88ac0591799390e41a5fc303aaacc81dfcdb687fffacc6e7318449d5b21c9d5a9e2a2864eed1d7dfab1b6a4d8e753284025a4c4a7575db4d4bd9781d00dadb3c00956c76eaa9eea42051dbfbb22c5c30fd710118020854ec07b9e7cb0b1379209973d444371f9599c61789992e83aa71daf5b46e0a3cfeb32103d043c235786385adc23d46514eb8c871ca05a65c125d142c58037cf6dc3f49be7919393b2032bdc4f6835572932543895f6d6b650915d70cf564d8114626a09590c1529398af190170ecac465b5f64368ccc9a304b35ffe72579ebe339824675acd89e5948625429c98e322dd66f920312c7af25f92f3bb7af78aeee55814cbfd066d8187082bd3ff2751357a78959a8460f2e54ac5d7ffc16db23ca0c4e3509511191e5e38474b45885e882cbc4019324e7855db185cd920c6e34558f29fb54b0f80aa81499fadd0ce92c330b949d8cdd601c590131f30d731c18df8fb3a3a18f0162f360f4c7991fbc3e7bd08f228bb037354ded3e8fedd4ea07df07e07d1a2c5390e0746d089a016c0477c2f31679b656c5cc2e236b15dc94ee15b4e3afb15d93f7b5125eb0545afc985745556283ea0d375ddc0d544f49387851a2bf2785bdc207094452a511ac6d6275c7f5f178c122a282487296ef62b51dbaf5b549e4c70c778bbcfd4442f7e12e96a0076787360defcd2f9cd7df92fde035c1007b1b5e82832bd045a009f29bdbd3bb244d7aaa4dee06e95f607e3fd9294e01122f44c987efdc80ab93af42c97992ebf70727ef0944424292177df336e72501545d81122280fafa2c07361a823d6dd19f30767f2dbd7b29444af7449cbf0172850a3a435b701102b68ce360d00aa93aa322fcbd807672ce993c76c9cb7af6cb537c2cec5af0456ac5f3294d3d1b74aa4d37efd01a537ae4a2cc140c2437caf33efc55db29e2ec17da8e937e9540b30ca94f19efc571bcc16394118ff5eef1b699198f9551aef55d040a3982ff78cf66a2b2e83ec57b03a38b8bac9c7887104e1cfb6b671ab9adaed7eb18f5a2aa38acaa462cf740508371cc03cbd2666edff59ec87643948d98e1787a79a2714db1f0377ed690be8ad76c47b3b93030c1177046af53d5ca9b0b9e964f5424b7b6209cc2b9acb9b1bdea117abe50798dd564f2e4747849a1c8a22fc6e55386c92737dd4f5151d93222d0e72ce16743e486424e5eb002e17df25344ee5a55c8ad153cbd131f4341a6ecada8156a9f85d01d6956dbbba76c14560c994f000bfd61297827d93a07ada88c05c5093bc582ec894c2af52fb772463c8a13a1d1cb60abcd604bbe89e00a2b57c275448cdf0d754e532e95ca13032f2667cb2b8489e5ab994a71670b5de3e16cf85f8ee62221f648fbf74e637a320dca9c32eb3b2f738a09d49c0c80c1e76c8ee17844d00d953d3c8d32b5a8a2b5500c847db50468c2c666cdcffee8ac621d3c81d1a1cceda7d003ef5e97815c4475af988452084413afea70fa634fdead5500c2b77b160491d928d871fdb334f5e75f61983a6c71a6c4e16b56c06c9dbc00e22373d0441f3322b05c6853348d8234bfb73781b262959a16172dfdc3682b1d0867882aca92834d6d74bc81040469249aecb634cb941b639c2e7ef4c32d971b14936482a2f0e3070201ab8990207b2eba5b00574420e874f45ab01636188d219ec7467d7b137b3d2b77af386e28039de2dbe54a4f0b076329c23f28bf8d3a6eafa2c53650cd628fb3c710b725034c4537f8d3c7798b18cad633f8018f5dbd664e7539629ffcfa456791816b36a4a89ab471d3258e89f93e4a02fd8a8afc3631db5da18ad17ff945d03c35d80827cf887a29c34200399382acc08a4b223d824a20a2b668c3ea63e02ea526608d4462a4c9195bcbfc8ac21c46959f0d64a8327b4cc56fe15b15bc8202968f98a8c950f79b7e7af6ad6bb789721affcb9d44e29b0d76766b9d5c94452e411ce8c4e56a480d482b0451e096ec0fd28102da1913d9bb6fb4b6ea1e5318e761d25f6b51dac39db1e1500f413d5819bbbf7788a8e6ce4bc8788472b4cc83f6906f4f786e511a345e6231be4bbdb303f5a84a3b719cf81d500ae2065cce97198da734337132dbf128196c9e35e10537eab3592094446b234f5d628ab4bd2ad2d20b04e9c2b93221b8fa83ef363509912396d45d21881ce993458d1f505949919e19465d2720d1cc3887a55a2968a74391e778c27be1956b144633a9c95313accdd19b51247cd307b856ae402235881d67e9f2a7d1a0d358a31be18b83452f85efa00d227d4c9d9490d1c7f5e72bb42af6c4af31dda32fdab35fd81914973c44aef79be587a232d825e4ac84c7b1e7ccfd9a69ff1dc59542cb56d140522d23aec67ac0c1a8d331ecf83a4c11c76fe89df5b52001f0e119173fa8a48aa6ebea40f0ef10585fce1782b1ae4bafeff09075a3893d17a69417b4b7be8de7ffca0208200fe899493f7fa066a6c19d968eb292e56130779313e2903fddeeee6e50de6ddb44c4059f190a6f6ea637d84becae73d5b2d7b769a0151cf429c66ba7163823b3e342ba613e048fbb25d3d575e3c8cbc0d19d41e3e4f42e44cb5c35bd20fd612ce310ccf6c3981a33a75ad870d2aa62246535f03c3ce7c9579432e997e99c25cf62774e9e25ec6163d9251a52726f04d9a0d9f3e59acba6d1d32b53d197a0c681d73971965df83ddc047c94002f9d7b1cb60e095eaa2d2a35aebdced370d993bd616af2999f0c659a4ec524f1ac4319c2c122665ecceeb00802d7d90555ed94aa14b3fb31f73410675032cb84d5156cf7ca08464c8fa81c9b19075ca49681961e12f760fc37c1ae1237ae0da9473c2af43672ca640e47ea4675f726a72177d4eb387bcd478eb6a0b35c7bc39ac20a8da32c579c7b149ceaffd0dc1c99c24a4468a5fdebed76b48481d1da16571cd81935d63a967ff0f5df366e83f85580e6e3af8f6af2c5fa162b012753a07260e66edcc249ff037cca1a45e90e890cf3ba91e23e8db5361375961b136e0c15b2de41005772b62beee0728c8d76eed5fc986ded5fd1a6b0aabbd55674813acbc9740056e9a77302ae3857e7b013d026bedb9651401f685407ac44373e79f041e7959e8a051f50811b1c074765671bf76a5354a62f4cb04f92d3cac180ecf32b938fed08b838284c242d524e45c550ac8276b1c9926d383ee122ee426234c5cdd3d988a0d2e268c0ea04d44139d9b5dafc8dc5787e6d8d0be60e0f272d14c9f49b579acaa26c647114412d0137c5d76048e27cce00e94e9177f5e711253af4175e4bc9fcda2819e571af9dfba370b940c1b547791468053391f8ae48d11f6d8dd6c3fafa56a05c5a5ba07676035e3e8ce09134d38a234b35f2309fb8c72f3b5203f1bcc5653b93ebd1695df260fc50d0c708b56d957f14daab4b501abcf93226962da1c37f999e8f4246bbab50d430ceb7880973164905a34e5cfdf9b97cbc9e8800ee905319d4e6aa9be3bf95e99711a917874eaaf5b8141a54ddb5f2d54f1422303b29590b20b8f2bc679c1fcc13cfd71d447356dc21956ffa555d5b20bf2d66fa3285c48c521193d3d3e342c06569c2e30c2abd080291d603a4919b58512122144230a32d059750893464d46d5db913be9a39789184a3857d7b3577ba60bce2d396eb599ec6c6188ad1e230b733e6b364ccb874249c7ff28e38b5f2b9bf78d17c41f389395068b1970a4faa0e457e18bf204639455ef5b723c29584f3ce1404d0ae79cbac6294005a15e7799a337f56ec91ced62c5a7ca8233675691b24f2d25bbebbb5a09f3d4a7f3ad0084c7e7a063db46c378a08615ca5a6bcb752bf801f177f51dbac2a9a8bf92c79228933dfe600a04747cc7790ddeb76191f4a74494fa9f599d97d47f2c78d96bab8f8d91d4176cee70bb63c3733ee01be93d9b0ffb07e65c604b8c1ae06a659a83957b46c8324b640750ac07b2287ff476adb0407bec6fec116b341164d2c6b5dc3a2a4c3d68e2ed98bab648d407e7a57550b7a8c6f7ded1f91a47e239d2a0ed0609816272e9a7708599918828b001fb06ad873135c5de9b1dd749046323b8ac3cbb5c03968445a07972fdcacc603dd43a4da3608e211374b10615b30f0bf8b8df63118dc69318ef005a34573c18f0841dc26b7d6b3e916f6ead42c6ab2bbf472a652f9c553d6cf9f72ead892340d43a8fd162f01627ebe9947613a9836a9ee7e71b232916240ff0ea3ef049000d2581af708a0fe64cd783ab7a8279e76273c0819608102c2ba8f99e1a677aacc8a29cd01f6e0e7ec11c61a2a63f9de6f80549f8b31171e6d44958777579f6b47cce09344cd0d05926ff1fde4eae6f7c86e9d9562c59177e056c7641404c473feec2e73f6770b8a483e51deb703f06bb267825c0799e71c0cf464a0648f12db8810350ce27ff2b07ae829f9c227dab0d2a72592966a9274a37ec5f74cbdb88fb448bee7cf8ad2a2b83b46bcd96f54131e8fd626da3177b5a12d8f714e65cae5340cd66f9151c7b657c75d98267554111746009b5c6853c050003f69a6f83bba63f9a399eede38499348631c92a5482525c331cda39471f55f593d310e07876b0bd369d39c19481284d0c86f6776a5be5e4123a9c1da709f73070a0365f2bde2db4b63c2420eb565d903f7640a8923abd9107c520e82d2997ef4b20157fadfc9e80003add0913ad738c5d36a4dae1d3de822cc46af8da451f8e9277440dd116d2b695b0ab20f2811f17a2e5d971790836beb8795e24bdb484e4dbfb408c1b1e19b0c4c744e5b64e6acf531466f6a25659c5b19c753b197ba69eeea6392038e052a2aad2a69a44715b5732b43364e192779d172b5d2040184288dd1d0afd254f638a484be3ff022496f6bd6d5eecb1331c8c17d43cbce265956f8776da21726a42d1f210d5f077f5562d5be969783272d5323506f48172cfd4d2390f551c5b9cafb7d50a49aa6a1707f5433adbb8cce5a4be66a1724e8312038dc8c3d01119197581b3fb768814028e895d102ddb382fcef18a12fbcab34689a88bdffab67da449eb6839757906867d7b881fff1fb59f262d18f2db9993b2dac916984513450a5dff02e712f05a810521445ce7abd242c46f58f3c6b60d6aa40cb467fe4a0f72c43523f853c5e90ed6b80833d735a163697d5aa57b7b8e9086c69a1fb9e356d56aeaec9f5acd98fe9406a94a704509b7fbe92ccda2f1457cf5abe120204f74904446b5edc52d86e43d34bc48a00ef340ee9d6042e27be0e9fb5bea00ce180af7888c7477e01c281bb9a2df2f3f5141d740d754f191a351a5a714aec2dc8015a2b841181535ba69c681549a96517778a51085900785348231c655a86eac2f26445b12ac7e584c63345aaa445785c7c9dfc2c1582a109965abd38a8a7a76dad2015c5c1d6a7708f1df96af59dc0034a4a5801613b9b117946b15d87da38c75973e0f5995fc90c88983223f857d7e95554b66495d13ca66beb3a9a120cb5f729207384abda08c059fcf62b9e110b3f3067a23ac720ec1e25041d9362060c6f85bba2c2dba7ddc3ced398a9cea48ae46e9441b76c7cbd3f50da0b8f5e8ad47295de128c370530e9fa4716bdf02a6fba741f0465615ca3f612c81657b30f56ddcb9d232887b6552d63406ab8a24f830314188b2e1182802e34cf10302b56167252822327243573b36c1ff714c254476ae51709bd2124dde64a6a2dfde9836e89e89eca2e365f94c671afb783f888e27ca0370a403f0ee33a6a713909d72047a39134eb381059f0f522d55e07aaa77f40f95ee598981c63da9d1679f2ab717442e3318554f2ae463244ec98dbfd7639bb04f9d9ad9ff8d85e7ffa20b1739b3b1ee5b3d1babe67ec616eac20edba1721058cd7f7c6b5f818e105bc3ae8f67397a3765095850722fa5f299fe324041a4ae842a4c9c0cd9e36e72bd69894e4ebb3e9f0e97c1f3116e93e36d6412cc7fe98c3750a19ed1e8f68a921df628792be91eb866ea1744990f6c90a22987e3e7d25611916638875f06d6f8bf29e43b799c298a2bae19d79975c8440cae8d56ddd52ab9a882043eb18de30017d9902e30faabfb93cd7b3392f3952ae32cc713a00f6ae0e214151c15003f5ceb7e41c7216f9bf77d3f66f18cdb69603061c8aa707dd8018ae438d7589c0819c958ae29f0e159490ba77315a3dc8f7c23e5833a7dcf24a9d27a9f5db8dfadbca814a527fc3a706c97ce745a3f052550b57e29ab57e2cbc6e5b0d81cc7af2dc47492605c7abdd4093ca44f6e0c80d1f6a18312893c41f318626356856690fb4bea2409ea811f3f1d77af16211847219461334155442d55d2fe0ab55d0514803af265728f18e1a1a22e9a790116d4f65b0290a77da953f058beaacccabd232cab919383e3ad4d31392fa0048b96d7575a9adb9b597759fb2148483c2efcca137ac6e19c0a6d4621316c82db7417b9d194118e00b856a88d5685628baac24eeedbecb6cbcc7be33dc8296c34f7d1d52cdef645b8cb54b949c04adf130d34416c02a0171a07065eeeb100f8bb697f6d735b0db5646e738c927b9e531a36fea6366d00043489b64c1f766b69ff1106e21f6b4266aed356670052bb379552ac9df692675012ec8caa94eaa2351b7b787ea4b9ab0954ea38696f2c2c3d94881e13764522f54422dc69e07a50b5a50ba8ba215dfd3c86ba1328eb3066519f2b8e822b3b5e083efd1888ab1c7f81f6ad2bcb0478857aa1fac5717b27887cc4c60ea525e0561dbab2885b36f7e78fd5e41511c69be2984bf3e4eb9222660d61bbee913297a7f4161f5949b144045482d18dbcb29d042e347e5b148c7a2ef8501bffb3fd31f83a4aa70a44c5640c31a3e6e7098ceb1aa06c453252ef9e6b6f7ace636503c4707eef13d200c2f24faf6735d1cc4f9090acfe46770e64af5fc7a3c3b628a2afb7f58de178f766e73046347aa765537ad5d23328ce2ec69651a8a7688cf85c80f51f2f623677a760a69e7f51b3d22f1def11eb20e157a8e165844576db6386001c5e568049f3d8aff8895c872344b043d2f6bd4093913ca5839b96350eb4c759250e2d002a20aa5b69db0227c8080611ff936bd05335ee80a2397c6c580b6f4f7e8c3c1cb744c2e8e13ce9a767f28c88bd3d24c502268243b17c750d99b9e8b5b8c12265ed8446460bca794cb94243db9d9b071e8a40ca481426b2d73b2c2380ce1e38202eed1cfc94e1000bcbcf5b12629438cad40bd647988fb29c5188ec5a052683064a9f0c8baf0db93278b9622778a57b9095a96b8aaa5480a3fda01ab28997fa4bb96b1a839f70ddbc91ee8a5ee7fb927318339e9265703beb05a30c8d161806f6f1d7ae854fa3fea92bd508e784ac378742503668a8ba348ae8e4864784eba21872abd3479329962ac928451b37c876170bd1ba73104ab4799e0a0ae692bbd4f5cb793ee522c0b23b4f1c27bfa7ab5c04f2402ca53a3226d38e4e9139f2067b0b96576d443a6c5ab3ed6721893f53ca40b09a6f5313c7b86c3ad494994289d800836e4e4684d85189271a63395a7154a16ce3266983c29a7a6310e4a669de184939ace1e68544499d384c206634f3ae0418b26307c4380e30cb907c536862c4eb911c1d7560890f7216c7af62825aa41928af1dda9248eec93f147f71f5970a92e44a56d6610ad02407ee09d52f7c46b8680b8abcd31b7b14f30eb89940ff5df211ac8aca75319ff286366cdeab4707c43b3edab2df8d0015930b54739d43f762678f96f450a344e05765acba2d2f8fcfc7ebdc548e3d9cd234dccc3be3b2ec6eb8f9281d4886b21161a67afee9826144b2204914b67b99d66a24927a86815fac22c42ba966904718867730cdab0a8467d2eb773a073b1ea14f24e0e502ccfb91922cdd2d246a8224739d015552e0b674de8bc5925116723150a2c79904e5ccc242b4ccdea5a5f707f93b0cca59d650ec6ea847c872e6b86319281b1ff6790b15140d87825cfd5f05e7bece02c90a895130e9acd6a42f141d35173a8c1d083fd04cf4098a4dd5275a9b8965939ce201341ce40b4c92576bace0a794e9ba1a2f2ac727cb12c6139f53ab722fa54f8a978c655eaf05d2ba65ac9a3a07928311811d7e043a293252b75ca6ecfa7c3b40fb9158ebbe85d5d42213a90ac9a108d786e3e6ca4f1353744835c582317a692d4d488351a7dfeaf784459d6f1f1d8eadb7235db1ce0e26c31ab6c753f0ac1959de8b773e6ed5e92c8fe56fdbb974f9cb293d6b8f538314e11a22cb73f4e05637f1ef6bfb870fb1e718721cdaded75c0f60e3e879bce79ac02081299315c51563f3688813cff3fadaed753af7f5623f3c28691aa73035abed7ae5b65bd78dd91eb799495167e73b986e0e308d01d5a101ebb26f354f594e6ad5be5c5935a8697c82a10d9ec397610932df99f1c36707c2f0e720d07a1b0986c50e3f2eac5307da0b25e41301f57b77d87d38f9096a3f11a5e565ca5416cc8352d1665c1dbd60f602d8e7cdff2211c0867271433fd2d81385d4bd26a7c36770f7f21dd8d7740bdf0b1d8a66fe5ab462776a38aee1bce8143f1fd1b833599b68041421868ddee8a7eafa9dc9873466ebff2ff4ff86a695668e85d38813a1526c022e0e30558ee37d2782490677e1f809013a9f08270ee7a967cef0f40fc6df73116daa4cfd5d0f98e883ccce202dc030a22fa8b6ffe03708bf9c5d4f93221a21c58e5946000abd3fe19be044024037002187d03403a57a845df7b11f5a7c631eb2345d00035b10ab8ec5dc7a25e761da7c206cdad4eb0751a264efc595418a2f231cd05f66c28c1ff8eb13de2355ee73cf84a2c245589b67de53417bd97d02ec23efdd3f3d9dfbff79def4d59ba0c1be89eaa52b8573a5d2248b2ee48f96d941fcf1b69ba2c7c410f5879ad92f53ae8a4b4ac0e840c9d3d7b7fc2647350873c929bfde7d3e0d416652d0cd290ec051537a487e71ec5381b8cb0e71d9ebee5f24c91942603311f3b083e3f6ac9e599b08e7235b17f9b202ceae8fd1991981920aeb60170230d0c82542c7aa851bd6d5f6e4de0f0c00f8ecbfc9fc033fd016cbf873bc713dcd41e726be6d988732a520f6c7e87fb2620e8c1b979a4f6a0ff908e5ac3d7ac2467aeac5d291cba0080e20336b8b3d6040f350c8dc7a0c2ed975cd828eb5f8d70266bf55b0ba68cfd361a11548f40bcc23a076e45d55a4d8257c582c9d9e2e68d953d1209c3efd34a13c792d29b076b9e1bbc8c382658831c7106476fea6e4b47f5cfb8086475c000c99b0a24dd118632742da840c6f09a90281d095bbd4c11ad17d0fba02dd9a6063c9264d8104ab3415ce164f3d129b56d8e9151c4a16877f97a80c0e12c474451d49c94e2c0d25cf2a1427229409b62955d3c6c2cfc6161bccab71c4cb3b004eadfb270e232a89fc1bd50509f80cad6a864dd461cde7d87375c57f9020efdfbca65d597fe3010db5eded724d223d5ccdb09d5f319d7407c2f1ad601aa847fff5656cb651b9450c0990fa7520ac24f6b9d6ff3c70e49bf8ddf43043d1c4d0f4836ef7a457d5359d71c1b29f6e73ad1094c6e156a2bb2329ffa7fc621033fefe857ff5f3a6d07c5ed60ec9825a2a3bcb0f97fb0242a97b357394374685e848286d98983c51ab4e2387c06f101745d06edec828b93b293f91deccd76770a95bd6f796ac81473d4d201d90e2ef1805e3dec993fa3c8b5efabf3e583b26a16f4ad3d0e0599b052fe561fe44ac65d76315db9555581ede8d85d4e3625056da1a726e6d170d727800dd8741cb3c7e846a1285724d6106c27e5567e16ca50afb09024fcc60a06e1f032b2ff830926cc36a02e16bef1bab3c80e21fff01d62c7d44961073a1d9c5b3e7ba0bf2b8f87ec2385578662441177e26b23237b209330a91ee09d3e36f4fa3cd370e4d006235c67ee7a5a5847949d720b33057e6bfcaea86687702dfb837992d6decbfbcb85a18ff4a6d5eaa9000d497ec89a2901e1973761cedd1ed731a503132fc4df696b6cc8d967227cdbc957cc2a8ca6698473d6eb036ca7c1c44458590eafe3e6d8a9e1bb417a0422079d43185c7eeff34a4575ea8800aaed5ac341eda7360fabec8eea63ba02a17128f057ae638e2a232fd08bf0687ab3fc7c18f5ede8d353334dcff48e54b2847fa94e2e4fb0ea72c03b62da4ad2c36fadc38c9ee422c7a1ef2c3d1f8f7a410fa5973b4f53098416f7c827342a469c61a232900315632695c6236ab25690f7895fb010644d1de9853328bab20133aa7e3656b745951b0f27e8bbf0aceb2609fd259eae66a137f39e4ee13c200a03a18d8f309fab0c96a530b2640659c87b7c62eb7ed6544c8c8971b128609713cfbecf37439971b0f51529335791b4a74a6d8ba706550a6d1b83ed9d20c0456f3befc31041c0ac8bedcf043f639f20f1a2af9ed6ba79c5afcf2454e09d41aaf102225e62265be3335ce5e122521033d97caee8d9c9be02fb1ebac1e27490d1868914acbef607fb318e5dd61ab18e4d9588772dd2c875ffa5542a3b1655bf891e674382a53c5fa1b912974e2481f51609914046b518c847a4fbf3e07df4e9d7af09908ea0edd29486fa910c160e2dee194f4afecd5822cccb8ac33879876ca20bf6972d19d691191577efcc4e83e2230257eb890b2d88a378a05386342aa192210517f81aa6141b2516a2d9b2722277244b95c6a5fef0a5365a4c5e71a1165a29a676fc9ed6e9f590d48ca9e622772be0117bb87bc3a7c9b46d60edbcbdde242abd321caa78d622172be4612d90f90690c30e29513c9f5cd3b8b1662a1a62fb2b721868887ad1ad0b7672143bb97890ef6052a0283f1939ee56680c919505d54d64794ed7b6acdd239df17b1dbbf075e53656bdf4e71a8ed04cead879adb1b110388b149013becab5ac919e0cbf84809e327dcb46e5142fbad4181732939232c4fe2d0920ab23204e3450b34d4febe5739940f069446349fcf6605d1016d006e89d1eb63c4bc060b26a0dee18f6b0c8dc2017731fb5766bbf6a5525def300412d182a965f3f136112389781eef335cbbe6536bd0a3f8017a82d7b352f668e9e15fa9d08ad44854e4d5c658e3bffa56ed922fcce83512206846ffe2e81aba0f0dad5ea7302666b69c622d4c0f2298ac03cc171726b2129d4da8b08c9a00d9149e4c398386043301c4d9a1327d8f066dd059ab21cc6885de68ba7661474473051b70002c83cc820420662eaa667a422e08f070afae8eee8ef244eff26a9b582f8d60b952b5ab50e3ebff6988c17a2ded6a10492f6dc0c381061b139ab09884f338878a1007ed01a19925502a259270bc33ee389e568507dd29f06348d471002443c25ecbc38481a3f13b8fc87db468c3209fb4166e753e9259c62c86fd8f4821e0c3ef8c9fbda9590757a01a1208e736a6715789a96c77a4b8caaa3cb6c0274a756e6c9da47154dea06a4171df4effa9f7d7108427658e3f47e310a6051dc1301e2a3ddd99f209310e954185dafed7a86474cb86b42d95cb16123dbc4cc81d151c1cb576962d6b0ed5c0f51c84d256dc22dd4950dec3b4057312a4c12cba40893419e20642163fbe4fce7e81ccf2410185eb8645bbf60204e199e4db7e3d023514056362ed7a155007e9c6d36dd678d16d7b3f063a403538ac1e8e51377d45e2acb4280c6f60b957f234e03c9c76d9b77442fb05dd56ce785a6082c4a061823ccfd75cc4cb433fc8928b6f4bd125ae3673958eb24f72950227080669d4d9f7d9886e1a61360e9344e438f60c9a879977d000c59b625341b817335fbabaf5f086b173f53f7195fe8b00fc4d929ec6da16d5d36db3a05ff7061e38396d32147a7a30c729511780e6d969d1fcd100f7b76c25a82c14a8d0cbf2829c80142ca585d121aee8117c8570970a515dfe368d62630fcb1ba816050ba06e3c00a2adef949865da7d77239bd193f3f548609d6d6aaa31402a1a437a2cdf4cbefc79dec828c9110d17791130454f5108d6e24abae5360285066f3261cedb3eb42a3a82e10541e80950ab4143936a311519008ace6f998ed38a409b18643c8c26591a7068f4499d450653055084dcdaaa6fe7fa696ed76229f699eafcd679f313b44b925d2183d337554e847960e702d3b2c805f581851e4beddf805d911fbd7d000e9673e9f4d1b8f3205e5aefd965dd03185d9ed41dfd6f0589036cf86ea29fd74e81c1f93b82add3a382eb00e4c42c40861546ef42d1a2444d2d39e0dbab93775362d3d264834be72f8590597cc8f1e9d099edbe78c7ec7beac0be2f136ea56773a17668169f42304469a9142494f54d48f9757c532e156a0946063beef78c6a8bc63d748620b6571729729fbb7e977887bf699931b0bb969f8b8a68867d3113c76fddd399203f9282380bb8bbbc56b16e3744e06449aa8d85a936dbbdad1d5bc052bd7e26f99604937e8e14667c3054b96407373c34dd72f88e7a657356ed8960d1a9a2d99083883fe9828a5409ff31734f8967f87b44b43d09aadf09252718d254baba039010894d5b132005e75e71015e911fe9327d47bfabfe437fb456182d6c4738e03125b71352a4b4dec662e16d73e31fba812bb32874d3de46a4978d796534379c427842da77162c00d4144952c56a5bb055405896352d1b2adf58c03c90e933696253efeef0017eeda9a1ce8b0ff90c4b7d3fa0650ebbbe6adc2d2f5397ab0307409f5e4b362268d05d8ce064e2a992e65dab88fa2f6af3ac155ca767f540e5e1c8bc09cd4c2ba0ca0fef1c5fc850c5b7c433571417cd23442fefce8189eb2b6edd922fde5987ec8b2ab2ab353a05d7560d1eb70d5254279f20b01d35fe24eac42d7b3d0cd6564a049dcb5f41b6edfe176b0373919a839369dd784c0cb39c4330071a437edf84ad1ccb28e54a8aa1ea2e5067cefc8368ba475178e21d0799bc5da1634652013aeb597d0ec91bb5c11e2585dc8ec4bdd158a12b80b831c745e7c203b7ee6df24d438ea9472f53e90a6aa6e652439f163116f60515c7cb3df698d4f55d8da9a3b9b4965dd4d611f2d03ced09046f5090c09b5e6d91840722ca85e81c43a73f00aa69d2ced5e077d306255013564cbea0151fc2591546db68e43c62e83206b249a4fdf0e1c9165c62d5c0f8ddd0264208e0fed6f874ffe6af83c4a121ae5f8a61eff0f761101805b6ee27c4efa8b062635d5a654ca73b51bf7da782c2fd918f3a70ddc52002155928ddb525ff152aa61263422e9c8018d9c0673922edf037aed683d2f345f8810ba07254235e713dcf946806e7cecd4e9e905e9f0235aafcb829b849870b2d22a11b336322296af43d431c707bc199bb256961864dc71f2dd84e42684f114e7edfba5d949cd44d44b5a85a1434d69343bb78078e138f2fc7bf545568ab03224671365c7e2c912f062190c7d5fcd0d678e7354eadda1a8072544b114d0ec1f0d866fa0b77cad2e7d700d4dded135d82358933b78a30d6d26c93790fcd43220c13e24a2162210071975b1c6ff7b08e1e3657b2f9f3de4e98a0cea398bfcd5c95d3edf63e9227e55036335fc94f80c6427025b4817486ba98ec4e7ae223446442db2aa2d009a56af5082ee63e223bc2f80b8489c9e8231e113118a6ed51e83b8d8bd8dadddb0fd48bfa516985120fa82603402644aab0c861c317d7d66ae926d394126c2cb0623a2d78f5eac70d25eae9608625567999949533b91ceec59ec6de03531a0a039244b4b521d642792160dad23c8ab4b0c26a806b8b5d3e63d4bf84ea8c06db0033819aecad90088f408a44e10f107821de8ebc3a5591d8b8759792baeced1f2da4a4be3a76a839530533001e657dc0202c40815308f8959b734d15ef5bcfffb3b31277f43fda6304b8257f6ae05e56b0901114397e2c70e5164441475288529865e74cb622b117608f262ef40e89c88e7060a13c35fd0c4806a8b0e217bf6bd7c73925ba697787e2a258c16c9ed5c4d1c98ef3fc8bcb2eb1f908e57b223bc0d0b893a4997de3ea65fc5ddbfbeeea29a3a05ca6f9797ca45118e9b196f080a5cf2f4d6e34a70e53b5c5150f9e0a6d3588c3a8d20d4000adf65b6214e7fd7b8c45aaad26d4462390dbe57ff584516568129758003c7893074f02d3e860314a3ebef3fd48607f5442d42534cdd0d2976699463985349d15eee99a30cbaefa80a7b33bcc241f9d0afb717ce895c0c3d85a66518214c97bb60c8618f366dbdd1e87f91314390d96c3ed9f192e27e59cd5511c1712fc5011b170c1a7cbca4cf3c73de0f1048d535ecd0900d8da2b1b3162d28a8950a5d60144ccc41f9784a89f17615edeb15ee3e86b8bca3a34186d982fa93e6a1351e61668f64ebb4dd3fa03ef89bc5888272782a4a6eccd55c1f55a014664cd4dd6080b3ccbf8f408efc0d38d7e5a9bbb9ca80c91ffb4adde1990e46504237e5e2855f46ecca656b75b369f5331e4f696b5fc3c307040151ba1956068ecea8b48c1b1fcc310aa77f63176b894446a67a3024ac98f2ac136939196d465b064b854bd417cd62e6b64c870cbc72ace961deff82ae2a5f4a9c87de526c1be1b8540df3215d596d4c4a699019fa9e4e08115168cbcf60a78bc6b6d9535458cc6ce83a52e0c44d7e4bdb1c18654bf3977734d8f10a998122a748705029c3b1c04e51b162085b74ca99ed34c70a8ca09c8dbb38cb57e53b830d916c03c81a7100fcd72f1476e912ff9a297b8f1eb90aeff4956bc20e6cd69a49d084c126c10b53bc2bbd1d007caa94e54fae13c0bca1f539268a7101b0a62ea4aec3369dc0f5d2d884390daace39c6eb902dd63cf9d4af0453396d07c9745a2b56825e815543e0bdc16bd6ccb15e262c75bfd28132fc55db18aca7a213456037234a6c2fe0bab181f79f7dcc59edbbf9a046a0836f046174e81ebe370d43419c5f4e5b5a75dca10a313628d0c4cf1b652433151960ad261bdbaf6123af55994001047a6ad2c57ea692e3121a8f2fb4dc5a3800224be6911c3fa47515bdab7ac56d52624147daf230b5aae07b1ce36dab8c42b279f5ce83cebb45ad02b7e549324efe0a3856e31a3c50df6e52f1229f70fb8e76f72379d752228c04d6f2b4ea56f3e6a250acb829029b7055adaf8a321f61c99767771e4bd3e28249665d975d323e5171d7f1f0fe0e11874c4d6484112c21a5403299e61cd50f2524834af9cf1d97eb349d3865b648bb6d0b00bb370dd1e3d7993afe4dfdac6cb87af9bf484db333bf38f21a2b89addb251d21fa5108bde52eb2dd55e9c0878e088cbb07cb41840a0ec46447bb2c439ada44b923cc5390f240d41a9cc087c5cc2654e2280a58eec074c725fc78615dbac3b0cab585d6126132ac71d06ab48a15f88fcd3471c8a23b73ef807f588303011c35a5e3572bcee60a0f2b6d28cd6f99a2164fc57e4c6e488936593718ecfaae7d1ca323aa2aed62762026ef4e2345faab9dbb0cc21018ccfaa776dbfab8e2024b07da9363d4b4a6ae76f05a1ffa1eee839126054579e335c7938ad1a32459ac24c9c269980bace727c3480d583ef25b49b5796a74230ef98744297c6ca23c9a7b77956405b9ab10e77caf4e40ba634ddfca6375584b47b5a6f23be5be7a52234a0cca5b55c243936c4615b9b12db1447d5c93730d497fbc0b73005e9f439073932a47b9a2037a2de8ef0c5a58953274e9c4701a6cb6394d758b41713c2cfbf249dba39d94ed39787934b4442d70a0585f646c6fc294a10d16f31309cfcd9bf9a5e0d5664fb7f36ed61f50538700063fb1f129141cdbf1d77d250b99945935bfff34c41a8c7a6d3e2b3e699c635f0521873ea65a90e4b4fd932f4f37f6d7c60d131f9bafde8ae2dbdc1bb82457fb685fd1a1932328e7be02de5460e72bc6f51f8c2c0b440cafd76211329b8ff637f0e9791f680bc5996544e127b94f2be100143b2997bd1a54665c0916959b15269c6b199a2d70356bf338e50489a6d6a29f3093e69273febb56c1b475e853c906246718348ddd9bd7c200a1faeb546277ab6094e6da350b446581ebb840fbde4b06439f9110c4facf3cac35cf0915fa838f3f6744baaee1198767b2b791b1440d55b50ee21446541dc8d8dc7a979f5950949e65ed3553abad3c4227fcd54100d5d55e19acfbad05e373db54ccccd08ac34c7e50245613789d21a5b7ef0d61740016c701bd361f04769e444b4e76347201f0aa15d3580f4d3fbaa632c81e23b84049276b2e2b7e9d9640f599cfd2a508615349f2f9b3afde360b44094136eddc3b6b853604251de5b79bb4ca4862c21ec9e7ae701ca93208b091344a2946157ffd5bf279ea289c017d8ed7797e12871d793ecf11506346266e082817e52244734f12be0e10ad887efc68038598c6c3c8e72e9ccc70118460f5109857cfc354e7de7b4c06a1d8bfaf229a026cc035725d6345f20a0994f15040b0b9eee6295f247cf63cb4bd723349f01badd063870eec38da176be8bc5d634b5426550ecbd24802f640a22990c622b153fa91339b32d53323b41d83c4a138cb2015d1b2b89690051ee1b75d18794d5642c6e19db73d7cd9005b909af5851c1d3d386bd62da5664067f4bd3cdeea1d5a7d74bcdb7a7829647935066ea950d9d61f54baec474725a35863e62cf5fd28ded7284e2d2f13cf20e64024920837817fbf6f4c6c42d9b8ff6a38eed8ef8c6f0cbdfe0cb725cf65610985008756b51c4be24931033b3c72399f36880d7a180e71f863f5cb0b1f79a4ca1a1afb64bd82a06fab42e74279959c556615a397214ec9d8eac66640cc83ebc977d5bd4d5eec903cd832ec4e41159c313eaed9924f3194ab6be50bca36150cc6ace527f3fa1bfe4a71c1c15bd6f672adc1500885422678b6c0ad2ed3131c54c1a750fbf2a98315529d6e419c43e3f726ef25a0b1f7294f4ac68692240a194160ebfc4e30ebd8bd8475226f5312d36b6745076403718efb0e5acdac21ea5c56fb00d66e2db36ecb6a51d52ac1dd9ae0f8b9899211c30201c6e39ffcedce860699efac4b847603959d03b0cf00929d8038aeae90b60c0ddd096417edf4452da88734be0dc63207f88a6d3eaabfb17d6c074baa55bc601bf344c6399c35f8c3227eb11dbc1211f88e724caed10282d0593138d344c8be9dc34254175c162f4efd57a02c17d2029d1663d0d595e70071f1fd3f64cffac46477e085b7875ae3eecc11092df572735b41c1d58d00abd93222f46c906cae4690e095bd07590b39e9ef38facbc30ba698ebcb6c21718c5f4415dbf951ec04876dfee80624906976f580b1ff8b55b924ca9807e0126a7b3a0692cfa3c9f38dabb847028e1a1b00b9232090ace239f336f76ae06885102965afb3e05e12c3c73ecc47dbdf07cadc782a263c7d00daf4dfa1b8dc07aad9d7972143257354c0575e8394fa12f59d0161e7b5b616cd4e58a800561c040f77ef55824104cb66455727850e989e7209c796aa9b428425d1b8881c49edfc2a454e592e7166d391e618c9b034f0d1ba689b5128fe97ca064336d3fed300fa8085a38cb651d79031565e361c1bcd2c4db56c50eb7768e070978ea06db971888c3d9e2d379bc0ae7d212161d490d66bb6a5f813494bfcd8c3330ef187721a70651e4fba80e965310ffd16c30e7ea637f1e0a279fc64499ef324bcfb793ab02091091662844e3b347c87893d0d51ed1cb7256d0c2761f8ea8cd4dc04472f72d6633f5f466e84b473bcdd1c549b39825c65745a0027ba189746adb02b9eaae1a295963b2133ce02cfd6275d128d5f6d44179bc14d793c5ee13592cfd474f4b023db431189e9e1e104b5f2dd458a5668932f9641edb03967f5e5812d9fe38db315e10a463426a0f7af12432dc9151d3bfd0e8cd2916a3aa0587cb8b08c45ae3ea89f844372b9b2b83821ef59d4323a6004264549ae507271a975ff4de5a5fd38e09d7186e772ff02a77eefb78e5782f386467d726b4a79ca811636c1bf9b428827f3468a42fdd2e1be18e7054e913283937e5ee6969e962fb8eaf16ce6461acc0c2ba168ea03fabc523c7c74cd5be2dadb73833efe454f1da2788c7565f3d144b7fcdf2992f05660daf65a83c630235af927c694872d2af699dcd0a12eddadadbe56607d9c5f0d5a04e44a46fc62f16772ec63d6b042c3a29223ccfe6a6591271744f9ba66e6f576fa858d1d54168b068469bcbe0dc95d64a866c633ea6ee326dac00eefc13a21050575835e1c5d9a2964c96f700048c49e5766370f8b2e278d47045822689e9c28615d5194e45f51162e4ea9c00d278eac5ff0c152e121459e13e7983e257af138230058c846bb25bef4efb02924e923bb2a63d1e2545dc663c30f840450bf564887530c7fed372d63bd3d8be9c50cf23a3bcd28b6b53491573f65562d91007006a608644794f106fe2a2d54eb3ec1eba7ad5c7e9cbe486a3e03c529093bbe075121544424ae9e49268bd98fd0db63cc2126070e7465d7104da4c3320587b66d0d85fdcde8695443ac4edae06069e3b84f3d50d9dcdb7305e19cf6eb66efbeb53b34db7aae7fc913bafc702b86be443286a86251754cadffe666d63e60e44cd06a24a2e43ecb214e4f64aca87ef9a547c7ab2533a9db8261b44520e5d7ca50f3c780e60918ef16d34fd255acb90ffb0c4df3e9bc4613857ff99f80e3d4df534ace8ba985350e6790c8b910deb6865aea1fee37c2fad45836223e204abaafc49c1537ab184ad7966f356ec603f3a1c56e23acaf34361bbde8da688ade465ef436a2a263a3accf46b9f585f48a07761a9b34361b5dd193c6a61b0fe9905b9f89ca9f7d246736d777c54462f0607dbe1e65d00162c2fb01010e81661c5c9766ca0025e9a5601007e44a78e99924f0c4cd2cf6b1d8c162870d84c033cfc287adfdf422dc12c59aa702c1fc8c7229a8fd7040b143a19fd3f3489b0dd5ae37c150e1327dc69c71e15b090c6be5870fb3efdeb2e366aa8ed487aee386e22c22568f928617809ef6962e33178331d362c84d70127fa1a67dbc706af2e86a325c9c7993bb1bd4c8bb724e7b1812a4347ef03ca9fda55a1af37b25052a55ea909a06e65c793404ba7461e0694d70532ad6c0b34bd12e2b37dcfbeebb1808643437bf1f5cc5de779edc6f90c03a60a0abc449fa0ed57b01debaaec35f3d1fd9c5547a52c9a93756383db200b6720b6b584a7d9bc98572d07cc28ef0f134b247429dc37a08928c7a0cb7440c56bf7fc18e6955791bd06d63d10e32e4d3a927164f80d42e835bc025a69db13fd639a58893bf31f10ffa50de49539ce71279950e40d9f0240c65e70bf9e218bce3f928ab839a995b633174930bb2bfb2448692d2d154b43ad628681e9164c49d3363b7bdecd6cf2c40f288c443a9073b957de9323bc81a0ad74d8c6f91d341b3d1326a92b3f80c17de671426a323f36516f96b977e4ceb24fb959a0669309c3e48ce1c15f9c14be1b2641f38e01268a34bb3d02e3c9efb1af10afd5a040596c9901e78cf71b3df29a318cf79bf17a8ee5d6b20898bdfdedf04b6e46a0c321816e56c409ba6e95e1e1e98973558fd8dd0fda9a826181662903c8f62895c72de69545389a83c22f4af29a13d5ee5263c9e78ded08897f8c6667fbba87810c726b165f3015ea696979f915d2af3fc7316de3d063a547ac6de935a40245de1c74793ba55efd508c589282aa241f5285b0477ca420f00d13b4a23e2371c4c56bbfd9a86249cb041607551224d6a5cfd6002829c649ba431c063630ec76ecf3b754022bc4a6793f3b34b50aec39310b9cff2a73c92e3a6899dd07af72cbf8e5fd4c62a8334e9a0ceaca8e20c8cda0b0379b90b34735a71bd1a85cc6c177cbdb8a9dde59209d2753f34998672b7ad0a7d03e5cbaf6e9002ab81211bc0d1555d187c5dfa5ba532bbf44e7301d5219473fa698aaeaf4e62f8611e51d4574b30fa3cbc7e9babde67ffa7c9c5e3a3b2d1da3f6e513ecba795e3e845c5bed4f6928b7000ad82879e89e9386bb182d84475fff1ed65140a5bf6798bb19684167cd1d431a7233cff02092429e964f28b9cd3a552c88d822595208e066e4b19e28d31ec173976806e9ee00888626840383ba224b459386842a498c52768516da67f351584df0974804daa3dbf53493f6cb94abe05ba3fa8462c21ee74c73feec4fcc4e8848363b149485a52df8434829082efa1c2600bd5eaea58db02d5329931555a7d61cd3cbfd9176f523f6a4caa748e20813409f749a679f12bc4e8262f9cf25a0b697e16d5a652e39c44b66bc99905e12f2f5dfe2a1223db2bdb92929a28bca8f4ddfa8d6e0af6f7591f0f4417e95c6dbbad13305a9f3ac76648552db3ec22c65b8950e6ad9add4b152523f347b910fb06079c98eff457823b0273a9c7eb41dd42a446e138ceafefa49c6993a011afd14dc4d838de178d360db38775b995cbf6e0985d84801a61d4368b3f7ce54d938bf8f4a03d056f5fc159fec0be370ca3f91b58a08862f1b43e4756977629ec299bba6a6c424a315204751878200d40d59aaedd3675c2a5d563971112a10507d5055808f8217a519fa985b8a389e3a6eb504495649d47442203b4042dcc8b597a3cadcc5c38b633f811614cfaf36c00a5e3b50e716375d076d0a226016d9c7f4bf4012a878b51aa63fda7ca6eef3fa65de9d11b24a090709876893a11edca16e369630c5d31669aaac6a75e3b07a9aae7d1a4ebc6817cdddcbdd07232297ec412017d69772718ee3b5d48dc984c27b59c0b45aeb6853257a6701266ea7d1e0f36d1d071383250eac584b1b8900ce50ab547350153d46e46e16e6fe4bb8dbd9e28a50e816513d097ef926402e5f4ee5ec25b474ba3c3710cc3a2a0cb8aa14bdf3ab4b8e0f7542ebe96f02cb83acd1416de14563ce51e0c6ed28aa7d010d89aae2f38fbec26ec1911df0bcb831b3b348bcdb22799c0e433c10721455ce9adf971086418e7b8cf545da25bb42bd029068c8e18382f37f4e02c77d6911f3106c1d2f4d4e7c97869a73989da34c1a65aed18e3b2dd9a302073971bf1f4fb5c4b91f5d84bfdc0b3ca6971319f482a7c7c7814473a0097ee27325bbfc8e4faac60b6a69d603e5f91b7683b107e1be1e7c7196f3fac07236527415e3bfb680fdb54f8a5be7e881f52548f0add84a9069e75c2b6d1e42b8897d3ce162188ada17fa884bb849504e76904101fb434254c110293f29502798f19b45f5a4591ff3fdf66bf29817bf22691dc9c8c73cc697d007a143935d096a110170b3e1916b11fe31ab99021cd4df5cd88cafcb127621bb8cfc08127d37c2b2668e31e53637a6ec517068f58016ecdcaa4c909838f0e86362c97ddcc01553c4fa8bfa9a4a1239ded5e4d483eb7f8107570be9f74702543cd2b79ac888e991555688b0dd93f07af3e2559bc59c3913955cb4ff5172cbf93cfa7c442410aa3818f8ea6fc4d7a7978466c310155995a58290735e572db6475eed3c24ccd2e9ad1f432020ec90f36cc5c3a729fd8844b492a40a43e4ee3f3fa583dce56a5424bda587112dec749aa069bfffa6a077d62972a42446dc034e808dd6481cabfe210862b71fc5de39e2c3de21123b9ddbc6307b51cf681e6cc230b82527653ad68dc5a5d09d55f8a17720766085dad6dff830285161f71140e3abd433d98980a29aa7617ee057f539be4593059b29d770a19ab07ba375b35fd3bddbfe90272cc52a69ab1b22e80bb899b06b11eab5ee56a45ecb9236abf6a7b0afefdb06cb882b33222c61604ac702c1c0e64df040b23d13d3c8ff4227e9abdbe92a9b07171982162b64d8c3983dfbb5221dd4b5766e424ed0da96baf28e494dc09cc5624d5e8518d2c413a83e2fca64b1fddf00011c407cc1bc2b950aa2f2fbe72dbe17b6726f1ccd903f090d04e20baa978dff5821c7a561cc0badccf6da66bb2d6c8e0b161d2f93d61736e4849e1818e57be3b3de124a8216d103076e238e180195a626d27c41839c87da86adc84670e5d0c3321c42bdd258f8002aa0f8e4298f16d009677c3584f7971d4ae1f28f40eaa7576f31508aeafd2c5afd74e686c9c1d241c99ee6b5d2b79de978407b7306140fb4f44522c5c328bae271fc31519f2efa2f8052892fbc6854e3e40154c092cbc9ee5fb2812e08876c00533b1c7b0e46f6997336de4b499947fb34af16c0270fed447b9a24ed03d438160f3cd58769afdd353177fe723f093992ec514f5e3a4d8cd9647894aa126c8f083dce19ec1420caefbcbce14527a498958b1f68f19f4e6fdf9a9c632c55e64c26cb88328a73fb4338bda042a00520c6f7aec4ff39bd5491960463a3a885024216702fa46cc895c3300b8061cc307fc37d8ed60fa048d9b94610211d8badf380d4cb3dcc259fefd306532627a2a42a2c8cea3cf22a3b6b535ca07a0ce639af211e65fe75f028d3e8b642628d1c79797e9566741900d71676077cb373edf92f08f0c863f2cfc8a6a3edc60baa9588e0eee0d0731fc6d9bd8c198b397a776a85e4b91993cbddda15972d0ab8b0350f438079a4ccfa76a5cf493e116daa6a9cba013749d3db109a7b65a2ce18a90bf1818df25a869ef893f40bbf1c0cf2d18be156b3e69df276a4eb4ae73213a87d9baa20baf19dba9b958c15da84a83f827df2a8a59a1effb9cee57c0ef4a0e1d0c516b4c75105569905d663596313aed57f63cf3220fc3316c9acf13f38e049e1eea07ed2f606a029a7047f9cd640b0f646c58a8b4a3b38b513539c6c8f6a2dd318f3f1e3ea64f0ea8c5347f93bd73877a611025c8fe65939c0459d5168a732e7dca2824e18a54febc419ce4afa5f26ae793107a10e62c3a5ff3308113c9c16cc63b3e3ceb5b1756eaa1407d5d228e4d26e33690cd295974b2568bdfa65877f2787e82e05c633df129b9e9ff2fbd27e0b04efbb63337e8487d7638fff6477761b3206c298fd0ca9b667e32efd3e946e5354f989921fdf3ce8272135da42b3aaad197a8310e9c9c466ea559574131a52fda2bbaa2893862d3b85d6288a786f60f61411efdfec4f9ddf54a11d27319225d27c4d842f48646b164b7040afac3c95930585d493a61c140804d3138be1beb16e846ac54baf978fc0a516b808c69bda81d1c8b445c2e39d8ec44402ce401c23cf401e2a3b32cc296ce64ce89a3df6db8f39f13eeedd9eb3abf24b2a136d1eed608218d1042f6de72ef3e0c740cab0c388f2eee759d4ae549248ce657c518bb35b3c9ee7ee6ca4c49b9992b2333f3644ade342eeb78eebb8b2fcf56e2ba8b1f3baf48a7a3ab79a92b5ddc75ff5e53f2be5f99f7ea5d1ddfbdebf43dc6debc38eb72f4c829eecc4b311edf186fee0d5bb237bdb737f3eeb1d311dfc9609dee6e98f11803565decbf34176544945948f96828b3cefa11904fb67928b377b484a46c739bcbbc75988b09d5a1b80d5562c9605d66168bc5756b75eef1765dd4e97ee978e4ef9db9774693f16e32ef8e6793ddcccccc67666632950a635d0eeff8aa2b55bb1cde6dde5dd575a6eacec03c64b6b9b4e1d1ba0dd769991bdeab61717ec02cb38f39f3e7fbbad8e9c8790dd7e92680f2d051522e3d3611d4844f2e3d76394ac78e2ff66339a4080000b03500000000000c2982b5bfb83d3964ae710068bf347ccfc371adf3e2adc7031b238c7fd724bb17bfab1cde6feee231dfcbdc388eebf426795ae417b90d1bd8078e673ce486e3f8109ddf78919dad391c7765e33b8f3b37eeca065e0de0c6f37bc0f11d1cc40dc7f18c8338c2c70dc7f120747ee37127762d6870e0ae5375f7f1660dcacc3ce4b28cf7e2f6f0d43800708e1a8e3f73c396fcab6ed892b3d3dc1e9971f6090353fcd2f1e3ff63f318cf16b747661b7058e335dcc595195f6d75961456eb8a701c57648619669081c362c9a041838dcd8cc78ec7e63a5d53a554eaba9aadbb1ef95fa783329d92638eb9eb72943e73efce2c41c2241bc9a5c733e149de2a1731c6b85eddb5e9dc1bbfe1e2780dd77b8d2bf3afcc5368fec8dcfbfb1bd7b90f37f07dc081e364a97ec3b7d8753de2ddfe5d5517e3f1caf0798455d01916c92befa57b973eb73b1ea6901d0fa547bcda9173ef31cfe03813b3066bfe1bb3ce2db273c32db293c3842a15b0318a12aae4cd857be9becbb83468d0f84bf7d1380d7cbb4ea552e16fdfe77933f7aeee714ec365eeea9e86e3a03a1ecf9bc1abfb1997815757a787e4996f9391b98ce73d7632325ed6a0c4df1702918374eefedd30cbf8b1935cb7be47cf53a91e3bcf535da58a99ea111fff3a8defea621e36675dc667e0d50e9bb36e73d6b71357e381a120e418a509a22cbb1296569e58f1b079eb2dfca3749baf78b07e94ce7acc72c6675c863264dc9a0fc9aaee864372f7ad737cf7dbe44ad7fb6e8c3759b766fefd5e99ef614b8edfcc37f33893e3ebfeab8ebb986b6e2873cf64d9fc371c9267bcbb413adb5c758374661ddf704896c1d2d123a7f86678a441e3dd0cff6e4ba6f1b025cf40e358c7c31434667836c3639783069ee13368b0e13ec39d477752c1b9136956c962570f6757f3cd72abaffe7dabebf46af58efb66b9effb3edbf1445c246b90bb69f5d54b2f973ee96964d463ce78a9f5aafe3263380e77472bfe8719beab1b7128b3f7cdbb211d9a47556c388fb29d3f4239cb429b43efc7da7fddbbc76883eafb3e1bf9fb8c98a3f3ef53f11bae0a15bfa1e2aa1be3cd0c1200327ff97b773c5f50eeee9c54701aa9916ccc69a468bb67e479d4ad903e99544e979f55bae572f9696566c6f358b0f0a9b93273aabb5cd54f1cf7991b16c9338f1dcf4cc7e3dd90662f66e55dee2b8efb514c4c4cccb79a1bbd19a4baf7d50d8be4d5b7c9d5acce9380fc4940c66ec5f7c51bced0e96fa5558880fc3d765dd7c99b801cdfddefa96fcda9aecc635724c7fbc3cd32780619c3fb77431ad9bbcef42ef7d59dc1b4a841499f3428df23da20b35c711c667905c6a1cd2b1ea3e971c51b29cc601eda9c7a8c39a19753dbb6b56c87d96e7e1df51b54ea8632afb8a18c99472155c1e2862d39c665b83fd8e43eddb6c78e07b58a97592853d961c186d2a7918e8ab66ddb3a100c71c21a45b3284b9f98d3442fb11ae5588f6ee0b8e1a19777021080bb7de7c6c8ca374696ce8d9175c3c5716fdc2ca80809009909cd5ca71b694a5924a1748be632e621183eb43d72e6d1449a2c30738fc121c8ddc3e15598fb27b134d284a26c73174d68926bfe3dd33c9309b1f8cc55dcb04856f1ad85e33a1dbfcca71c6d1b77f9af5b31ab7026548a98f2cc25c41b798e3331b1e15c4296f2f449b7662e4f8bbaa5e2dee5671384908eba15a3342128cb4f2a55b23cd7e9888f7951b9a84e2a79d565c7b322f5e190e6ef31971d0ffd3df5b1b84eebf4bd134a8392c77743ba02e788f87b4ceacea2209d59e069f40206eb20f87d9dcee34e4cc4ab01dcf80def01c77570103ac7f11b701047f8d0398e0771c36f3ceeb49846d3c8c52c9a46b3684299460dca9ab3b8e137dec30db8450f3a18077e8f1cf6c83fe0e41a16352c58b8f8cd63b7838bdb3cfb77db0508de17bfb161bd78ec7860dc17b799b05a9c050e6966f12dded0a68b2bf0761c2fb2133fbc1ac08de3b88f1bc781871cf1ddf071e3388e030f69a4c992bf818bec7c1f0e7be44f763ca9c72faef8e5e2b1dbe17bcdfbf1669f4711af7674fe706c90c5556771c1bbb8ed73fba741f916177cec7822ebb611b7858aba2569ff889ff9fbbeef47bcd09090114321912cb33871f23171c2a4890464fede4343310f830835d8430f5b28472981993fdc23b3387112db4983f2cd446661e244a873282806db47ba153652962c9320e9a06e8511292be925b1adcc9c223b12dfc55bdcd7b0481d67deb88c49b1a871815b605cc302dfc7893b7c84f31b2b1eb19cb2e2dbec78e4950663bec52e85c31e5962e9560c7e68f3f7d0cb371e82f9fb670e8e7fcf374ed60d5fcc577c8bb972c595494c6ccc439994e59506e563aed3386edc2e5b118af9fe25756bc5e5e595cee99d159d8ec6924a83926501292fadfc40d12d7959a55b973885439bfc3de686357c64ecf1d6efdf538f37c4b951c6efc61c5b682e8bcb4ec537169fcc5fea31379439e6db7775c4fc7d9b1c8b1bf3d80920e60f7befbeef3a62feb087c3f89987f3287ec553d78bf16e91bce206b9320b9c152163cc5c75c31a9467ae33b306676664643e8f66cefc992c19432fa6c3d1fbc54253663138b4d6939f3fff7e1ef18f87432f5b99ab7098651f0e6d96b138f43c999b40100747c66629333b1ed5e9575ce6aa8889f1baa5c2a1ccaacb7810c49935e6d16405b9b2eaab6faaeb5d8b0305ab7a6855d7e979e45d76de67f09177ce7b0a875e779d197365fe5d15f72ecc63c703ea2bf08af01966f55dde53753cab2b7f1daf109923fe0175191c16c9a8af767446a9705824abfeddf0f97bbc317edf75e6e71de6d1e3515da73d1cd2ec3de6df278425284926b12281909088ac147df17b188f70f2f77d0f71722caa9165d686def7ddd4e385b9d73324a38eba4e7b3766d5ed991975d9f1c04454eac6065b1e51e741e1acc196eb7413b5fc058759cb5d5aecaf9fc27337b4399c471995b5cc47bef00f36f409942f0c36a48d336a64a3e51048db5952c41e4159ca1043590957f216699db3ce06a794739e25852d92512d5952d84e87b6d11b0ec9d2c69b39bfdd962c270fd81453605a4651f4f2c02a9632a8066526969138b071daec0a5b8c36cc8794524a67cdb09a654a334c02d1c8a0380a66c7b22ca3f49396609b31c618e99c9d83c5cad32cb322bbe9176477db491d1001a4ee146ffa396038d5c8a2144f535884d239a5300528421305a51ca340b940672b509064f9688324400443124880a2841328f18421ecc4c892a61088dcaf4179be3ab135499d81edd7201adbaa03218da6dadddddd33c6ee4635d8ddbd0292a9132fb25f66d8d55863e67491d54fc9e4eecbd9d194b917bacaad619a66b5aa5934f164e2b81507acfcac2f19c7451b229542128c8e04a00945024842519424283902087288832921091a9832450c4c98c205a02954d050606b8e51a6204d39ca6884c9310a109810658a1046f37336bd62e9159be122f9862658c9c92cdf2c573b62c4f48aa577f62401f5426d49bd509160e5279ddd00a09f2d634439cfcd5f456c1b8c2c58f9ee4c061772f743292428ca413af75f3071634abb76c0ca7cd50e58f9964957a44f74e5b04cbbae16d41668a52ab3715401f126e99a39f5331b40dda9580158a85cad62580127936657ab1856604a9aad21b145d993d60bcb32cd6432994ca5d20b28a050dd9cf3a217bde69cf3a217bde6c49d694e596bad4d3f71283829ce8ca6b181ac5372a793b52d2e2f2f28542a0503a3ba542a5555a95a5c381bfb52eb8b28a45aa6ba1713ea04d3303027944db5b878def4bcf6525e0c0c8c4ae5793131dfb75a4d61c50a95caf36262be6fb59291513133f3cffff73e998ea75dd0c0769531df4a4666252323a34266858a994e47e7ec05142ceabf7de5bdf19ab13dd3e598f95674c88b693a9e14d8c6b3a6a6a66b6a640d66c18286a6a6a6450b172e40904517720556e62825043957ac141064c92d93bbb5e2117f451c64660e2877dff3c9fd8cc60e03134c28caddcf7d908926a0648e663bc9471a204282ac763c638f19c33fb0902cd32c2fb1531c0e0112e30dc541b2897b66beae5b233715d283dde4b6c960d35c73352595979452ca1916c9530a114e72d32bcc78e7e5dd700f964be71ea30dabedf2ab1e3945eec13d14902792fb40280e22b1cc7dfbdca5a1c41e730b99b94762c9252da4f8eac1f036459e3e3e447cf2fc0b27b6e7450dec8b1a5820ed937bb0e99335398b364984a20b808008fc40ff0d2ac92de50347729feb8cd21df294f2205f83cc3cdf749e8796d3025bf69ec8d15c26cb1e3b6b356b356b6ffab437951e3b1e6da2e6a433d3ac04c928827226857296655926a7e4ec54cb613faf5da958f11c32affe72f0326f9466f24a1214244e243d913bd9259d4892b40be4ba4d9bd257bc7eae601c759752a9b4852edea2d6efca4cc395400d66420d14b58084254b1be99f46d2495a49502fc9de4292caee2cfc211a81383db033cb9e4925272c32bf1e825289cc0a15cf6ae4189c1c7363700c8b189a989a98ec31df302882c0b0246734c8ac5940eac8b040040494334c763bb06e071a2e03d42d9967078f955e94ceb3e2e6dbeb0caf97312e7f7373195ed4c002093233ce65bc9ee2cc8043191887de7c7b0f9663e050869bedcf1b163227bd2b5e6fe9f2ca34985d022b9ebdc706f370d7e9174958eef52b5efa84e1cd0b7318577599f402e3a62e935e5e5e5c892593490d66331b9246c4a04c0ac51b4aa3ec0029d3db1335999d5eb924de648f9d94d9b116fa791707bfda28285d9cde95a42e28485bb878965bb0f08e2cafb84ecfeba2046625b004d20b71817bb0bce22d5ae643a924675f49a3a43995744ebcc25076b9442863d239339ed59c5d1265ab9cc52858ace4ec724ae7f44e764967c6e5ec598b679757341f1d35174088a02e470b2c64e6159fcf321a1c5a1638f4e6310e0f1e87387166c5a52a642e77bb1937e686366bd75bb57c359f82b9ab89736429ee2b1e3f5a9ee5f996a3f0aae51505799543e697f91617bc6ac13d58e65e4f90ab923c3b1eedf6763f8133f33c6bb3bf18b2f3a18c0e0e53949745a326b269d612b6b984986f3177554add95e603e6283c4475986bd7077d0a0ff14eef42091905232632878ddeb8d3ddcb0514dbd7a147b7eaba52152005fcd02d9aaf2f1c71f9baba9216897e699a761d346b3a38e4b095baeda79b7e92394caf3dcc7bf80483573e52471dc5bd763c6c3f61accb61525defa90bf398abc2be4dae5e2c3361d6b6609f7dca81dde5da75b11153ee3aeda2b9e8ccabcb81a9ae77ed9a324dd3b41ee81130261b326bda36396dc7f62ca439b06b12f730efa94e7f51ddb8839dbe9dece92db72da757da727b3823c7d09cdaaed3ef1cba731dc4ae61d8638751c9d88b1958ec3ab33bcd9a764b3037a5699aa6ddd26d685a942b5672f6aec484128cc8ddb51d25989b3abda8fbf0711d4a170707b6d4e9e8d143cc5178e5831e75141e62a3695ca73030366c742bd2ac7d4bd13458c25d8a763c64ef5e38edead023670af64703b43fc7ac611f0d5ed7c1e5e2d0e0f58de6d0d2a2c35e7bcb29cc8d3bf606e19d7ede20549fdf5a6e77b5a7ee90223ba9c76eb9bcd4727b971bb6a078e8aebd0085891c618fb0f5a9200d28bd845f903aa27bec7674ee30d8e0d56049fb751f3ca50e07e9ac3d769a06ac0dcef52de3ae6b0d43f32f1fde559f07ab604354be7ee82b3943f9409fc22b1f1e2a763dccc7e0950fd590d4552fb27344f7d3e949b61a6e79f71e4c7bcb4bda5d5eba0b0e32730b1632b3761d74e6a6dd86ddb5d3dc59c3749e2e77d376ee5b77bbad89f276d525a2a5a0085b28da3962eb2b3e503a348debf484d5609e7a911d1dba057387702f20820896d82102f301265cd9894d23ec2a59bb4ec35cf9020bec400aa11d9d89ba71a7843d75e34edc416538036271831825edce5100452f14d5212f3c91c3787442ea8295285e30ca61ccd2a74e4ae97574a602b88225b2a24ff61359318302f0025064c5ac43bcd921b2fa54c87d27f47350609f63942b587218a10019d9220d48051bdab0a1c30136abd3ad28edb36c593c43de88432fecf21e5e8e605dfef2ed2691f345b2bde1b37d774ff67293a636cadb752687d360966919ce7ab80ca0e78f34d260287d6cd7286c59b762c419d6d69b74ce392f4a29ed6efc991027b7ea254f19a534d6cac4267b66184ecc8951bbcfee7fc5ee3ffe2ddbf43fd9b6d8ad963debec5a6be51a9c75ce06637d1673329b6bed2c5e57fd55af5ab10b67995e27d8e29c73ceee8e15cc3544703efe316762178d08d6a0239bc726e5917bd249eba4ddb30bdba4349ebc1a22486f04204f1a11ac4187766b228d4c79e47979c5b0c600589d3cc030ac2485bd728cd2852308d185201cc95eb813e5388bf2ba90031e2304715d1002010f94240e05d2a02cc7a164688ec030ecfa801248701c5042051e5002c97565dd22c7284af4809a80522e38214a1750b04929b96085460e178aa0d3085bf581d73234336cdce430429912a954b99293c398e5892cb94fbba1f8416e2c94203716a690851d3cc98215723f071fe47e8f273e68018adc5740920392e47e04a26c410bb9698e5dff091b7da4719162439c7c8536dd0a6942ce66385cbf6eb303bcaeeb3ad773b88e73bdc6d5446cf2f2c63cb7b9c38ebe7cf46c8312ff8897a778c5a37f48bce28121109570c227d7671ad878d07a3ad872d05eba2b8cbb76eeaeb07398e4aea4dbb31b77b80de7907fa891af4b79571277560f4e567de905d94b3df44e86b3171ad84f23f9c413199f18ca4e4ca13ec1822c1f9f40929ff0b9b890e5312792206ba57546cc1402c962e858b0821831aa597d54868a42769128b63a2fbbefaab3cc3d728ace4472bf6f678d02536b79a234d6dc197655ac361d03152fb7137d39415b657bc3b696255a94b05db13cb33773c0c96a19a25e8d491b6d883457772c60bfc7705864932d866b42a1f5c26ac8828d4430c2951c8b48502587efb0794d542cbd4cf3a52ec795279e5d0b0f4ab49401278a28112c0a872e1c59b1dd0eb41fcbe518c5092472c8fdc009a18c8dc1663946712228879c1349ae905497907959c659941486a85ab08265384bf00015baa27060e2a08524956888c6c211ad81105940ca8a10223bd2ac88a459191694342be6d07a9d59ef5c0b4a32ebb672051564f9900687880e146951aee04344c4383c8125661856ba7a956394216ce022428c33c6f9f8897fc4497b62d7e5c939e79c3473ce396966ad95ce39a120d54a75885ab1469d00e02ce3c9b825d82ab10bbb2a16b5d8d2f32647554dccc932abd2d191afc7389d206cdd4884d862b768a457ad2d7f409afb190a17d0810e4e40033198a0bfcdcf994323099ca143db291bf81058f0241645a328c3ccea9032e38010054cdea65b33e3ac70d4449e566890e7dbe6d4042151e4b3d33b7dd9f1b42d326527d93821e4171a897e38146751d3089366ce390395431b2ca8d082242451aa80852856781225e702a0cd8c32ab5c20cf39ab2491270ad560144452e0c1142958c107619821075f4022620a2433c8c0cec4f1f1f1c1c073c8a6d801123a95b073ce6850822db02198e5147e70a6e064c357bd628c317e668a29c690e723bd902b772b467942508e1d5d1cf9e48adb49fddc845c2041660f96eb55e9b34cb7cc0206b40a5ba49142b2bea19039af76f91e2c632f9cd81735b04066909935bcda01247baebf9c5bcff57a7136be5d61585fda34ad1eab3d43f2f5a8d3b567e6eb52883092c3f8841e49968d6e9cf62dbea8828d52446085661cba15a584004aa6f43a748bbe47677846831a96b91e4e83407aea7b62bcc16990be470245c2ac620f4335486d1aa4b51fda54acde15566bad33622dd8b53f4465fa0dcb4ad85d95340ccb304dd3e4f50cc3640f962560bb75619c25450c24489c371432739c7fd1010b24e21e2cc7639fc77090992fbcca72c542668ea72c471aae76643e3e3e3962dae0125b73f2c26a95b4db5157d05960e20828c8ccf1094039468e519cf0842c7f75b783a4b807882cf10b7e54ec64585e180f92caeb959a80e3240e71b2a474ca7bdb95d2d7d739e79cde7561f26a27c8a31ccf3a8a4759c6232ad84a71a4619c93c69b496ba49961b84299ebf55ae34dc5932a60524ae99c3348ad18889683d44c29131327c71969a491abb3ce7adf609c6731f479d5ab567ce1648aeb29a55efc8f967a61af5776ea056cce593feb7f4c2a29957d1643f2726213af76fce0655ae4a22d95567abbd6f82183d2e4d8f990f3e21cbb15c53d349ce1dffc9ac416a30dd8452f3a29a53407cb326cb2e88c94ceda190822e06383d02c29a5320a9bfc1785bdc1a1cc37dfb6d8dfd732ee30ad56ab9b388efb3e190130705824c3f87543991f306f1fc3e290ce3bfbc2a17d8c1b18f7013d5f91cd8df9013d5f51bcf99ec4c0306c0d0c1b03c65dc5b8604c18f6d78df1ebba7ef3633ecb3730e66d8c0b9939060e61fc060b99190656f20535485fb2ec7858edd08ebf250dd24cbd60bf250dd6fc5312146df89ec49b998733af98f98a8fe84b819581510dda15d85066d665e0b81733b0e147943fa2a417512c51ccd2e930e5893fa278438f73657c850d2c9781ec90e132eee23a8d7365c0b1c19b8b74731b1b9b18df62e0150f188f711d301e03c70663bc48bee67c8c1bfa902f19ac0c180132c6cdcd75e6cd5ddde67e8771873448dfe28632b7f88b9a215ba3414a8f1aac39fdd6b2db7457df9306e9817c4fe20d7d0f119fccbac581ad798bcb8725a299e3c30cbdd0e6290389c7097146504a29a5945ef72f4cb0f33ebad5e2f4b3e63e803535c7b1e6f771d6fcd7992eaecc2d369a1be2b0b82198c3ef86debda1fd9db9615d71c39ac34f49a657f10d657a991bf6931c7e5fcc0d239177c388a4baa1f481b9a10c4a851f51289172f87d44a76fd121871e323670e816fea18d328fa9812349723dcd269ab94bf366a373e80e3d0ea5e3cc9c1251b3e8299d354a44333cc13e6601052cd80007449065c90ae8b71f2ea841fa1135484b4499be64445f3aa22f11d1978a32ec82bdc206b69443bac385339c7d4499fe33fa8e3ea2afe8850f8dc6e10af23c6d7bf783037cdca27c68102b61258c45e1838f1e3a481c1a04830d2793c9a45bcd7dbbb68b9e103969c24467163d2172329b34d893c9f653ef9ecc279406fbda9c73762daf23d2dbcd1b2a00e3e6f6ee16c993db5eba59d52e0e741ae58e2787b64103eae0c819d485e0f7884eb6e51b0e69de7862eec9dca264300c2b69736e316655e3b46bc808244982d05b14920695fc1c69b0e72c619396eef5c3228bd57ee6946ecdbf747779ac5184451de6d74f3fb376fe20987a38bbd269c00671e6cf9d327722b933c99d4131777a771a31871a049a4a1aecbf44d19eb7bd4f87b99ee47e777f6a84cfe1240ab3bc1d9d2814a3069be88926e744711c2ae4b245991e4dd774aafd684b1aec87d757490db606d460bf7435245a124d8916d4606b471a4cc28693e8277347ddd28ce4fe247ad29f54a20d31f79c134ab768ccd9e9c11226387842054e60c1ceace20211444185221021053bd30a4d7c604082241ca052829d0268e1064da284a0094b886267ce1d4f46ba082151edd22f2e477d661d4f0aa561d74a2d9737f438abbd05eb91b9054b83d7ccf279c0c6cbd276cc6259ba457dba558d748bfbc98e5ce7384e6251d8982d58cb228b85c10ef7d3afcf6062b93be9561864e6d3bbae0a7578498397d00957234025d8f0072eb78475491f2db1a7f711908d79d523ac49f2f53e6ab012d5a23a549bd4245549b7ba5faf41dd32a152ad253607b1150a991975975faf3c8836f460198543d485ccfcf28229936eb9e0f83a24ade43ad4e0757d125d9f45d7e7d0f5d9e47acbcd4e17c7746d401a4fcb38d4d54443358ab0f2d85037c1809264f99fa20632ea241d64a585927a084b1d4a9a39b1e5cc892d9f64a522211d1dd5a25889f205745464254936c1e4afa12617d0ac4946498a8088e4cf1016a1a4202b40473f46a8a4131579f9646924cbc70b28cbeb08965b54967caf64f9ad4291236e1a797a095bab542a413327b6063473e64fb37ce4717040f0f73c6baf20a02c359f2c97e47036994838a02c8fcc1f23b2a3b021972514f92f60b0f29c1624844d66734e2a7b0a94ee29e96d2872ce196b956d9424528c095ba409abec492bcd686696690dc5680a2683759e77695a495e286b6bfdc64169a39ed247218d8cf4daf04c4cd339b11c0d8b204b1b8a1314b65bd4444343136d887508cb0116020b93a3940cf0a0f40323b4246c4b8e5232700227ec29472919383203cf6699b55936b38513c86436e32c50b36292a0151e4e66240a402b9c1a38336a4031020a1315d6485109be220cc918b18108628e60b4328202af89a1cfc80f11aaa3a1180c5809829912e461208a0952484052618007a8258c603080c4102f46495218502202972849280c7800042d472f194e184060339b7136095894e0e36271322a10713ad2ac98b3236956cc56091f301935b14040d2259d2e9004101785c874011588609b52d44d11543a0210f704128d094d362424c996482ae9a0045813479a0552a0e492629449b1c010403998e0230508721861c80a1139a2fc08a10539980892e2a38222722c618a2c2dc87240c162696eb92ccbac274395dfc400bbfabab0e650323254a11102511765072aa12986b8c9aa188cc106b9bb1b8a4d9679fa10f3751a5b2b1e357b7d5cf1a031b6e28d88acc8243a894f2201b040893699de1fea7ce2f3a0f5b2eb34ebbe94bfae1a4640c958ef73268532cb0980e548644524fda324b22201b02c89ac9824868d524a29a594d258b596b7e07002d995b9bb1dfa19cd4188d6f216bcc25eb36f8aed6ff5b2b3e55b4bcb75f45b5e246b59a665d90dd2f984679031ba6bd24783f240b86f3d1c0ed283e5ed326f38ec1dfa4266865718de517124aa3c8809c10ff70b884090b880066d481c4cc547b3644e0eed23dad02381b0864dce01680eb080032c600a413372321b4eb0612cf241be63951e94436115c3ae08052024b9a3151391143fc861bc2285929a069248721fbb2a074e6143cf53004fadb556f00936a4a1e91c54b3644fe7f99ece14bfd881959f3702f1462a01ac11822157c3c6f6516d738344f28c51de186fe47764652492eb55eb95dd1e0a10c9170e27407798bf502d50028b11b980cea93159f4a62db43103c72602d186fa781a4aa573e89cac59f4110b367b89d3bebd70a617d33993c9f462baab1793e9e5c505e3c1b0969b830eddea1e6e386c39dc1e90467adda25ecf1bec745aa6b39d7dc761b7d793e9ec662faa41ba9ddb4c9dc9dace5e20d6da6316ffe89e65ccdeee3874eb74fa1c74a0a7ed6432e1b08b9da7031ba250ddda4eefc99ca65b1ba5b7e95669466c1067f7c590c5ae173bb0567230d8e26317f16a473c761d11d3d8dd550e31c7eb8839e2fa2259763a7668728a2cbb495d322e3668d360c46162cecf1973ce3967cff5fe85641d6d106267b44188ce94b1af902cf72b15b2daf18a7f64b92fe583f46039622159ee39255024774f908ac106e7cce48a4a4a299d4479d2ccfa64b5a374ee4068967feadb816479c3ab1d250ca473e925cc436208ccbce241b5d8f5f0cc98182c06c3b81486a5b0542ab55da9d495baaeabb73fa0473e3ea01472376d2fddd9a621a5ad67e68d26730fe8919ee63d763d3c2e3037c53cf552eaa77ba5de73faf61e0a702792b70339e1201c7799b7d24bdf52a7eb8adbeaf4d55337e62d9e1ebb2d65c270e93962cefd3acc0db197beba3d5886f9f60dbb42a69099630e7353e76e0fd683e5d333d536b90b03491de33090f8186cc27a80c8272029dc83e513bebefd450d2c573a67c29ccb9c2edf68fde9a2bc7832954e26d4556f51a1502ad45f5e50cff28b0bea9c45c94ed5a95287c142664ee110857bb0ecf2172c6466175b2a6d0f4bb2547a8f0d088652a65b320dca1e9a06b9edf66c3f99bac71b79baa1cd59ee30b7bdf4ea65dc76575c69bbd5041748a9542a699acc3a62ce1a5c4919234da31fe2ac7c6459731b765dd875d18b5ef49a76551c66329b4788a60e7b97cd1c8a573eb8d3391744b021a5382b1fa6eef55af76c296ddfd834764c257c8f98df2e3cb5d2e77b30f9d25be220339770b8e5faad4e297163bfe44eecb0cf89619f189e7d65e5838b4da39eab2b1f9de9dd8becc46e451377e34e87f545832dd268f598b63ddb7049d3b29776681afe91ddc5e55b76439cacb95cc35b368fbaf4db8c6e81e06f6d96956e53ba38546ce9a18d0e1c3c238c545a5eebb9aef1d8f9a078e5033564b2265e4d3c64fee54576b2c9aa9969935b8d398f28fdd25e63e670cdd2e29434a59b5ddae07c0933ae46ae49426d46b7360dcbee75d48d3b98cb0d7fc0c1b9cd8c97b4af4aa52d4a0124839a1455b924d72a99e45a9fe4fad2d60abd05d42ba05b1503b9d66d5a79a459f51ea069d4bbe8c101ae2b52c97e806e69da6d5193a37669977669b4e3d1367c7d3b926e95300470f28febdbebb54bbba10d8ef6a8653768379c91717258242873dcc31e39c3a51be26499b59ef787914ace019a550f6073602395bc71af59e6d262e591d25d6e68432f67b7377c08e64c1e89d9248ffc8093b1efc82312a85bdd2b86facbcb2b96479a467dbd8b97bb427544b0a573dbebc6ca608e2d4a3539e668a83b44e30015110c6187088c0b4c30851dd4bbe3d97e63d328e130cbaed71b993ab5c4162f650824eea8a50c51246508a22c31308104e9c1725fe6186fb267558a086628a05b61b492e7fc0f0ee8960c0114791e87393190432ef3b021647a4d6c36b3cc5a6fc8264d245240004596c9510a088cf2768abf12885e899443da23b39049e32fa744c2caf5db49e66d93d995d755b1796c9b3ce8fb3ae87bc88be498c9ab336b8cf47587d9780a6d52892598308a81141218c921953282244e72394ac97a04537248a58ce04996a7b808182960620c475c72fc01125c809123136350a2e39079840e78a068c84c939dd3e910d390d35b7488d0f0012492b0636fba44a215b61085a01dd35b2e9117a21d8b8fe87eba445244ec98300e4da3bf6d4db4fc25b1b32f6c66d78165b2746de0c0712fc99bb26c52ca1f092c165d8c2e966593f9ecfe909f3ab4e3158fecd875641a0ee5851c7b91dc3dbbdd65c4a530880d1a52d8bbaaa7b9bebb2b1f3eccd885a31c330e0de2a0434a20a40f4d12368823e68368b9bd0947eca3c5e21729b0a1fc09bd9923270e2f71086614176c182f7d6a6489c322f353fe34f8ad84430b044e3dc166df6892b071b2ba1e40b4bc4e0381617740831d46287e40c286b1c88a2644d66101d18698b3ccf3e617c0d08126b2f8e00b4d50d991f7624e4d165c1085941d0ca1842576525058c288139e7c20044eecf0d0440e68b0a404265802113b5202c91f3903917d0e659398a026b965c87d49347ffc303104e429ee98c0b0c51ca911528810924244122944203131408a0786a40801254729423889528448225f394a11c288cc0528534a8dfc9860ee907922337660aeba2b1faab70a06cb2b4d836ef5c626628e248a8d94a9340203021bb6510e108da5ca8421c2c6bc4d1f8b448e51ac58c932171d4922f9c488a8d65a91aee04c37cacdaedea75b61fd3220b860ebb1631f72faa9e5662a683748f35091573bea312c7d1a945d766b14845a3946810296dc46ddea6efa9565195604a429946658d0697c249577adb50675eb6ac91736b978c2862d44b96d481fe6e22338eea58a8f4e31a785228bfe25d5d2423459f42d8fb1856ad49566d1a3b46c0893a6a49094e9a74fb7e6dca1d732a1a1505ee99f2c8b7624530f64724e30d3f7118dd734d2ade94323e9c8ca154a3f7f3aa777e833ec1afaa16f239a09bdaeebfae9568c22052699ce649a8485b9eaa12492c1ac6050742b6c28999e5e2dd442d18698691bbd14d9b07f905238cc70683b09730cab2e8c8962a5a36e3873d842dd44479129f7925462c3270a579a4acb55d7aaba2a60c003a19d4791c2921ca34421490e658e51a460244ba24d0841487d654e23f2488314b4911dc8a19c02d6eb9247ba555b6e3abd34d2ad96d3cb9f6ed9d3b56fa69bdd140ec9406858bbf46990b65cbb2d3fb5f4514b9006690b6e237b7b0a141b4aa04c2550f71f44329a4d78fb11a473f62a33767fd41cb575323d763c4ea65f1a100dd2eb576759bdb14120563cba05e4ee51fa642b9c190de278a18d3a27120dd1aed2499de508a55060928d523587d3a7ee84f327d3635745924fe8aa860dcd474ec954e3400e25954cb51f49645403c98ad151056288f4a934f7257204f7abe3293dee6c573e9145128a34da326ebbecb8cf8e87cd1c9645a52b89e493243ba55bd745afb0ab64ba812b0a2d9cc003576ee0e4270c3b7509222758200831084306bcb0531f637d164bb4c59055d7c5912320d170824f61c336eac1019345bfea41f5be0a0f491dd921a2a2073baa37cd103b44a40ca6b0d327326347f5d8f5a080c9a21fb2aa573deeac7a88f97c0c1e12b790022b0ced106924a61051c48eea130f2152820210a610851d153e02bb87874c131479a1c9ce10227d22b109507081949dc6475cd769f9446a57429139ac76e8d02095443290c4221a4620897af868d0060c5615a45b15af7c68903ee60334127d5ba1ef233a5f862094b4d3d76917979e410a5bac618da0143d2172228da0143de19ca066602f269896d4adce39710848da11957aad8a66a573625eaf5da92eb95ecbd2ad2885033fb9bee45332525ffa69eca253e46e1b9b06ab4ca61ccce90f34a04d0c2258fa9006db3458b92946a69b4cd75f2c614fdc9406c32b49339a399c9366d50b5f4d5a5e4f8fdd9392066be9dcd5a459f515875966ade71dbcaea45c9b3458eb53536c7831c9f59452ad4abca91a5283f5e53495a28749a94eb1c3a8522ff7013d1a957853b376146fb429301826f5eba1069352c1dc950a86c2dc6a02d5cb0b4c2aa43030982362d22dcce51b8e95503392a7d350ae34444e661326b90e2d6910ca131b0dd68ad360a562bdc78e076649b79afb3215ac6634851aac9f46f45c82e792066bc839c1d9b6ebc270fdf52f8824991ebb5710487252c670180450a6475d67c6a06ed18aaf250dd65ff80a6af04ad25db84683b573cc45dd900ae57aef8617e5b06042b9bee5869ce98632f974c33994ebe7922b89926e69afbf82ae25dd2a3d7b3d0df8e3fac464e7eb9a4c97c974994ce74e4de73800944b4ffd0a22610e834321de7bb00c73154e83301cbd30b4e3a1f4d4378ceb4e0777d3e9351d15041ba2509eccbb75c2ae140ccc5b85dd0bc334f51ca8bfdca26e68ff1262426676394eb7b80629b546f4267ae1ac3e877a9cfa1af5a5ab1db536e56a460dd6b35660431c27b91ea75b339c742b3c21c111714f8cb429da51b72e4c4af9d3508c14b61c5ca633b01de3157ce63ba849b79e583902254f2a450340c8612fc9b387343094c376926736caf395c63e328128e5b2c49dc436b1b1c119914662c992932449526ff692f950a321996e282966d4c0e260c34683335e7ce0053bafd3b373dbe09c86cb6a60c3d3d8e0681ac8f3366a6402074484408a1e1c710128458a78c2101640220461400210a5494c1c3ac10669124626ed393f73981184dea26a34382f4aeb2f2cf3ae13c954dad0c418b2b3da99813c2f536badd56405300c31032d0055c1c80e2d020e9c24d18223357882ca0ea5f471027548d824b745066c91267ce193e9af5c1ba55ce7d888a759a956ee3afd31c18614090464f28f79ee1b55d2ad9658c32e291575ab5b92bef4844a0132ca510a10510e4b394a013a924b4f3ac7c81131324e5f9a19f71a54cf21f32b3684198109614a821a64810d4b3f51d8f0236a9229d6a45946305043cce95504758be6f42a96a810ead6fd0aabf21d750b9f7a9e858939d893c8a287f9d5ed90af15af78c8908183cc1c53639ec30eef2f3e3b9e1738ec9171efb4eb91483e3e3e5906fe96c45cb00936fc8cc8b8f7fa987f9311f342c65dbdf064c8b8d504de9501c4f3bc4b4faaea63645cc8cc3270a8ba0abfa086977e660e256a167d9659eb792ffd645ac2aa64fad3176c48899e647a1659eca9490e4b44ac1dfaee48b73050b72e926ea992744a54aa7b5ef530456a909e1e3548dffd74abcef01a455818b7301e66d9c27868b385f1d0cbb6e63162c488f18f68d6a8818303827f871fd10adfdcdcfcc6c6c6c6e6f562491aa4ac16ac16ac875966bd45e865196478b90c29542a43a58e3ad62463493025ddfa4e8f05614bbac5e2f49810660436d4ad99531a704e4f8b649cae4e4fe9e951b7644e4fa974ebc55d4e4fab742be6f4d44ab7569cbe868bef455def769506b76f1ad772b78de399f9e6e2c5757a8b8991b192616f5155c6558f9d4e579587735df61e0ccf7a55e64aafe46dfe98fbfc7617b7911adc2eb76bb7a16870fbcceda406b7eda806b76fc7b9b4c1ed322ed7e0b65de67a0d6e7f71651adcee72dfe0f6984bd3e0f615176c70bb6e5863c695c9e147147e59323d0db73659f9d4a34c2fc30d5741999e75c38a25af88323d78c32b49a6b7b9e10a29d32699fee686323e99bee686d751a68f714399a04c0f43862883392c11adb0d7cfdb6d930675ab052f11a24674ab3b3d1da24ca893d93f844166b63fc5e86c0fe3d79d57f7794fb744b2e9b1d3e918b7479e82cc6cba89e6d2d5c1d4e11c388e520a234610434130c9d3de1e22154986711be3f6c86c0fe3da4d07196b73f0d9b26ce1416fc088ee96bfb88c8bf39afbe22e6ecc47827af468b05b540619677dfa348bcae4f91c7afcc0ead0e3c2c1e88736caf33670a862e7431b3a387c466464be615cdc899f114aba157e4d3e27dd5271faaf49b764ee0c5cc933394ac90012f269de36ee5322d3875d8e9f51a6df0f228bfa5414e42845035632cde14784a45b619cf215752ba44872928fa85b518a0684724b7e5032fd76cd3927eb2175c921cd252ec619e33168f88c83378c3fc860d6ed30efe21f936eb938fd37d42d23ba35bf23ad8737683ca491e74d9e3579aac833d5e5f91a73668dcfd36843ce270e8d348833c5ce879f914c7ff077a4c68d0dc6c0618ce7dc186fc0631d0fdf924f23f0e05b38ac019e060e71c09f7008822fe1f0e04d20485fea72cc70f0dbc671b2d361732b3b1d37bf3eeff51837a439c661dc506618353d58b63536c60dd219c675e60c183766179786196ef843fc418671f0373787cd2d789b4a833587716b3eafcdb5b8a168b0a66b5ef3979a979a979ac7ae795026841a42fd23aa39575373164737f28a2c50aa7f52ed936bde354f3d76cd91b29aae99d7c8ab6955cd55355e8d57e3d5dc036340107ccc3f23dfcf916ec55894e7d7f1302969b2853caf797d53e20dbdf06764f319a828a844cc36b54dcd32856844000100008314003028140c874462b158309e69d2543e14800d91a248704a1989a32488610819438c210018002300200003341306051442324d2529f5a03d4141d6bfd085c24feb17205815f2f86d88b218d8a7f87d6eeaa810bb0b1cf62256b06f8e7534a14f9651345c80221daba6628bae4d2f4c7e177d161227903856dc0a6e8fb6c724ea61f9e45ed960380ee090734fd2761ba4cb08049ac8167c2fa9e85eebc52e0b8fdc1f42d6e666a4d578f6b045c259292ba4afd95a860ba4962c49a9386a11ab059fe0e1a386d8441bb20995dbb219c4c58444998caea7bf8ff5f4f1d6266ee152e68280b42d10085483e70b99cefc4863ba1fa04bb67e6faff2e9542feb242b9031d8040a0a0cac5771d37fa44641db6e35791d8ea1b750da77ee5a1fdb6ffb1071d45b4dc5e0c0a5ae390aad21be9f82bcefd726b298ce9bcacbec478b4630f63312ea68d0eeea914e0ae743b571a788cc6c4d329a2fbd955ef7ce26a1098d0903a95bcf0b78ae82998d0aefaeece040cdc5eeb1d0979db9f831bfb47cb0b82bec77101c5c117d4e1818a8611d640f44b1db59b09522da5b61d128f15417ca33a7a622f0a58cfebf8688d202550eee0e7c05325b7395bf2bababa87a5a755ddf51e5f43904e738e12252ec9236980fd4131afe635e6e2f8b0cb07c3ea5b409bb3d4cccf3cb4b50c09e9e40db524da6018f0fe36bec5c2c6e96cc23ae3f06d661fa1b581716f14d7db95d40092f90bae277759789cad0b7c61b5c4effff3c5fe8e6190fc606cdf4821e727145c41c727201a872bada08e42ae7df22786d3ff0117bbe0197068f1ed71009d02d85eae0cb75ce53e50a3f02b29e6a176e54a7dc82d89c40fa1bb66a01f481ade033847e70b2c7d6ec18b14a1fcec61d062a9e81ab4e9afcc16b695dbd7518acc0ffedffccd77b5ab466592761b8984749299fd38e1c5d57ea7086d846765f2b8cf785fbce061b9f212b879874b66ff11ccec484f019362a0cf0eb21eb8488cdff5af8cc8a2cc3c0cf1f9e59bfc8cbf5ebfea59bb37cc22a10519e142b269fe917d1a3a302cdbb353568866a29d73dcc46e42059b2dc99ab4b54dfa5ad483d4df98472baa2dc094956605801701ebfa6a87e8cd0f75b298ce4b0a6823104ab27da3b866573f41759444a10d073db9e3492443245b9710f9986f63623f9e4a43b1b29966de2160f848448004ab95bf7abc6261215bb6f63b4fcaca52887132b09ab4d7161751b38425d54a044b8c6e484d527b6f1bc48807c0737740b981ae48c974e780214c267e6c301440a1d0a54dbdb839c28ffdfa7d6965060450c4bccd1e16ecd4396143c5ccc8981b2ed78b3b059b4de3bbf6151f608f3e072378604fcf137db8c92134c880a4af91d17afef3b46654d1c5deebbf7f79c8058743a29f112101c5fd756c55c1f1198a8d1483579c9c118b59310b16d387f0f2b8f2715b0b1ba99d1f0374d44f9331e52cdf155dcfa7ec08064eb544b4ef65d8b03037230c1f1184e3a56c0c1909983bbfbe24619afd8e0d796bb521d80ac70aab170de6dc245b95e8135e2aa2d0f5c83e08c2104413cc844a5ce2a1112c9883251c1b24b4f692bdd88809519f194d74a15b7a88146b02c83a63e38e78fad02e26779a1973da7a2925001c6026229db7f793d14b13039e49500d9b0f2681bc22951444be28520c93bfa668d9d39b081e8cb5e3edf7d7d488331953d40f059158095581542c3ebc940f4fbe56c5183016e1eaedc83fcf0aa752e44179e3051827de2c5268f8319f430b85a5f495a87c797e52c87ef8936d14cbd259e41575cff905b9f2b1d1c336382ff0c701bd06cd309de0edd243187ad0c12759e327f8c92b1d840b5726caf13e24e174dc15f140d8893cca7dc3dc5977154bd128d25066b2ad5d12993047e195bb6fc34ae6125d9b878529c7a49e137641745d4c34a66f11309d9bed703e348c777619cc2716ba73eb43152c24d82b8f613e6ea450e6fcbaedf27ba3e9d6ab05ad6772786e5620b981aae3c8f20a0a091a78892da34f5a2868bea3a4139a74dc17846c048ed067968c470641c482be8313eda016fbbd92f273c21ac3a1c8fdbc1e2db5fcb0403d6bfed45f57a561ac687eb92d4be748ce4745572b2b775257f49691d840e0378091118f60bfb8ac398902fcf6129ab453dd725655559d55cb7c426e4f76eb41f41e718bdebc89664ba2a68e778ae9d280c7f12f375e1bdbfee0f8cbe5b2573cf98f6d886bf3b823d5741e52800f495b86f16b021ababf39e58b245e1a71ecd937e9fd5cc7ec59f3f6b33b38c31636c15a7ddbd27f40cc960a7a0954441616f52e2449d3c663e64080e560d54b2d6cc76c7c081363977e84fb977059573d661f4c01a8168f73e2793728b63d81c637941bdde0603aa1d1083039223d71cf3820c49e294712463feecf5233dc3c8433cb0a5b7dfa4b5e58dc7b753c267256e6260660383bae545f5bf77a470fa8ed589be5c1fe4a7cfc0c3c962925be1ba79e46a59989f15978e4bb04604096081e51f3c4caacd98f368adbb7e02cccc736d65d5b08abca2288d8b0901b98cfd400056f193d28c35068ccbfd17644137727453e4842015914b4132f6812d21b25108168928fe0c4e9c830ded22db6bf43ff9758ede9fff3f28928d658256d9bd864eced434bbd77a35fe76e6562b67836f9f16df6bbb881dc55eeb9f06d1129c1d98ae1d5054e9e436e6e4566b51f12d5e86fa051a6db7bf98ce859d042d39083c31afe807b8ec4c429887541f5ad329a9c29dac059d06e3e673986c47001da3574da40cb6ae618994eedff8217cea5b7313778b709c54d4281daed036fa04ec48a7914b3cdee0658e5f3809b28bf433c0e1584003df4e46143e21c21f1352d0119976755a026ff4b7ba1c1be2c9693a14a13063cee3b3f30979fa05082d12de61424242e5c94ae3acabd67c1c6708e40ccc0604e1cbe372584d3d56e469c26d27945d05eb3ee617e88b31c05d1b47b7c84caa8a687de0a54f9a6e5dc3000358f506ea2e9571cf0141ace6d44c627b03245aa3d68445520b3b99ebbc7666bce7bd6b48d4f34c6bf3c5483dbe76d4d16b5b64500ff809355a5720d2b189378b21e32fe9fe511d7b6e29ce57882786956d4292e8cd79d54a54a3f78b6b291ff68b1c617d6040244626220b60a54df3e9b74c70a734ea7fe8c5917ef34afbd0687dbd3dcc5c514d798c4d2e5e9e611b0ffe6d2cc621bc244fe5d2c0f240a153cb1a5cd12940b6a5dd5ff91e4329b4a18552645ae83a9782a815c5ca69c9ac2868e74c6534386e916b3135aaf1dd453b25fa0cf7a9c4fb0d2f067fee8c24186b9e5e34b157a3fd4f64cbfc44fc5a305c9c120a14f189e46c7098b68c54ab08e9aef7f3ae39c689628a4c4217bca2b400914845c116e4107f9c6cd008903b695b62f8a5e2351eddf92c7718bd95481b40688cb8d20be12ee6ff008431d52ef3b3d4e627aa2b44296412be98889c3d6ceae9be866c54d500ce3be628977a88b1b0b553a56bc521cb0dbba8b866aff2a954224f4270222e631ebc3535f440b0f8d48b61ab3cad14fd5f2f745e3514d9b8212b9187bfd239a4986878af75d33e22a87a2e45944f7d08814da294eb74c9e940660564cd987c3678f20fc5260a8c0784720c91425364ca5f8978b9e59be3a7c3a2f6b319a778580c97a330e4c7eb92987e9ceedc92c892611bd0984fb8074a8ad32ab7b1781d2c50698c9eeefbd505274ab2fa98de0ab7c77c92e56ca84ded12f88770bc3b485603a76ddf11a5585e55f5f6bbf1bd4749165ca9af03a8de4413e6121827aa9c02e14cdb245b8bb2d2c1a6792fdd5a6bd1815635b3e7b8c11df46ab230814e98f4486895b192a4ac4c67ed31901a11e34a0f1acd88022e04274bcd8039f711265e469bdf6920abc8641a83504aff20124709b1a9b91b9a71edb10648c433181159c808ccc8e3db81311b69ad5bc3bbb9d5fb766f56b4a3de663536bd32dd05264cb84947ac017df3764bd942c9a5980e5eeb4c19601b98f1a19d4e200442c2c43e09912316a326e2985c956314660e925263a874057828532ffecae2399a06c328b02529a9e3cd86dc70755adc8e5c0c94ff385f3d62d7496f1d7f6ee19350082d88f4ae64f69e15d1572d5038276430e5531e4ca274fb8d64164fdf0638ac2e3b2228e70624f1474dd5b1ea046a5f604892744e5b5c81c222be5abee25d206487f4b5c86d26f2401bee494189e7ea5ca5c1a69cda0401606db481e62829e6d7ea6fcb1810391bb3b64564fbb6b47cfe36bbf327da2d78309fff4ecaec67abb99516142c825b9672d93229bf8a42660f6b029631fdb23aaf0e688d00145822074424adb40a5802e5fa95f3daebaf609a656838a56686c66d2df317331b4dd2c2496d75a5a79ed49c12ccff0e50b95b9382a89c9cd8d791c74cc115a967f4a252294daefdfd8fbf22deb57ab1fc609bbe307e9731a338bf595dbb9ce00420798f30fb277c463adb968b69941c07ddafa179edec3dc3740ebe9576a46a2b9c6262e5cd8548292dc66b9ea1f92f3d82195ccef3ca78002c3bc878fc6724cd0011724a1cb9035bee7c878badfdf235b7a6b68db832b201c36082c78457d2c3d7c4804ee5bc50d1029bc9313c0149d85cb685849ab3513fa2d98c861fe9c1fb290053add6e44efa002b31e2602faa5aec44b53f916fd9fb6aeb2fa9f199368b681ce3874666ad2bf1ee5007c1aef4a4d7af34c7d246d3555b9937cdf4207eff95ffa9a537e1b1daf557f2cf354a0e487cbee9c651ec5080459f2a2908496ac6b2779b83d65c9d49cd814c2df54040c72cdc9398d1e981dc2fc6a1de6956bf3353637befa80f5a56f48d7add5bb54ab6343a691c5e52f9490ad78a42b4330303ce6492848b42a4418c6e4ac4a10bad2d61c5af11369b482d6d305a541e6df8deb82ff2b6fc95fc7cf86b73c87103eca27df1b145db7aeef917b13a0c1e9b3bcf9be4577613fda3a96992e74de45a415bd5aecdfc38f836bbf975fa1bc49a01482bfa4b7bf78fdc056b094d6575d3f6d608fc51af88be5dc24a123377d5a6ad71fb71cc055819581db2ab37702b8008de6711a13e13a37a843ff5e14bbbb213deeeae090191c2e179198e65b03075041474f14f73ff3b939185019a28de657f40f2a2df9d5f1d918dd077ef865117513f07c37a220c5d9441ba008b51237b868ec0351b49078219b2222d452eeaf1697b6ef46232667592ed5255441e137e719dfcf32cd0d107cadf49948ebec58473290d163db267fa6d8ae19ba334751edcfdf62a96c9447bbd371edb15f7df5567b6eb0ad3e6093408d30b7a42293aa9a8588e3b7f6841be5603e324f298177cb1d9872d5b4dd9abf38d5004ffab4a45d0004ab11502125a97065f7aabec7ca8d2686197770370d459297bf28b53d4ecfe4a7d0b049f3ab5553b9c0798d7c4d21476b166aefb22337fc75393391f009b1078f415f0d7d85acd9c1ac8a0042f8a0b4b79cab3313d6f95babf684173c5314422b4adfb17607b044373d9397c0e4f178f0389578f3c3b1782a840ca5de7d2e5f05b6a245c4c80766cf4a9eecf332cc3adb8e3560a1d33cad477edc60ef27a58c1eb6d02bb0c43dce7b700c2af48be4915e481b3ad61b42add8af9cf1c46fa8325829d112050d6dbb61e0804688a9938072db33c15014edbb9f14788d1c9277cc0811c28c90d0687b77fe90c65044e823d0406d0e72bbb6a8fe04d5a1be4779d443c1e7cc6df0cbeaaae75162c12a2ea7a1c53a192c83f8c5217c631f51d5d25afe05f3206d36fb139eac943a29554468ac6dce920b03d27e69a3f0c07f7fd68faf669c5c1abc522421e29946511ac7763571666ef2305732045658ad4fcca0337b3745890a8c66a3feacb399414776883e48f7024f3f98b04055666df5e25ab68f8799603f2f9d8448b70073ee942b1901da82a1cca2f203461aa40fe6227b2ed4463f885009e4ef90758fa70e8a2a430078630039e6185553b8c509ea8c13150e9a08e586c4c30b24c60a43db32378dd9915eead39034100c0d1b15e7986110ce3d96aaf2f1761e257f490a9d65073be79ee72b5f678a40f980435d557a8614846c2924d47268084452eef28e76984fe72572f36f46f118fce5d5affba092952c563206f1b921c9f0b93ee68cdc73943914d6c408c3d01791c02e4137c1a00e586d63f28c434e526525c21a175c1bcd295301429d3e7ab7571f83c37a86c792010a1050f6084f00e07c1f31eaf3de435a47cad19bf8f89210949b3d01f57e3bdf9370f03d47bc1057574168ad043e727e9cc9c36bd7672a8d931d4ec2c06f84f7a5d90fce59f3c641a3d28e351534afefb74b2b24b31619534677784ee9bab47cf31e28cc538c6ec434ebabf3718f9776346ddf50dbbb31c1801adc872111f9ad1c58cb20f4a03b5066a95cd132487a132f49086f1a7f61e2ed9099809e30b77a1d84d6295a9b5ebef13a5b6f67e651e5f006b14612c3760d82af3e4903c821d42e340d9e8b751869885c598a82e03b1edc0bbfdf027e9ae074fb5b53e560747c3d6221bed4e07b4ace374bf2643cd0c15b50ec7a1785d22d6a442137b8be17e2ec5969c210bd6b76fb2ebb490f3c4ba21789cd2a58ef6ded3d808826806e05bf44ef7167093f07ca361bcd090184cf01ea964bac1222ff956d2a071544692259d2200ba8c37d74be9825c061c2f40c0f7016d85a3cdf41ecc46df249708921388aa76dc4ad673486aabb5f98a3fa94648902650cfa0805b3cb56eace43464adc299e49f311704b3842680885710244b39188a467480c69d2ec85075d449128ac7b2a8470dffe13580689be15a81be067aeb140d77765f506458ea23980d79c4e1263ba59954bb42735965f223944b8ddb0d01933bd97e41ab6336ba012d75cbbab16d07497d4aeb2c1924d42880c906e74a3540ee5f4df74acf60011a3160f74799064eac6ea7d9e6b086ef96f33a50975904d2824ec90bf7115d4fda1d7b2186ccbf35103ef4b5156f796712f0b1eea9197d1c23aea7477839b24b4df434e04462ecd4701faf2e1162ece7b4e096715543f27e66c2d09293e465d3062cb0d703696e55ef240e68c5165be38c874bbef8777d7c7080961d9ff6eef19d23d1399c58aeb412761aa72a6b357d8aa915e2b68dff9ffe5b0c9a6edffecd3097f15d35632f2881970116415debb464c6aa4663d5bff3fcc42d89e5feb8ce1268911b46322198e1a92e946141c646141d882d0e7d01fa48b07087fac86c9725c3f37cfd3cf93beba502c432d6d2a48b3070cc79bf5e3385bc0d5c49e9d96764990e112f256ebc4ec41f83ddd919bc1e494b164ee600e371971418c1791d81e071dd84d60bf80f2b0d52c990ddb4e52218f408a3a551257efa6c80632674612b643d2d2ec3215901c06e38bbb0092215aa1f02f84704900b5714cc54982f4a4a5c58016e2429a5cbc47727460e25434aeb24872f43fbcf1804181fe4616fd5ba8c7c6cf006d11ad28e2f4f0d43930cd8c95629933000386a64ba78baab6d5e37bbe79e1e872c414e0ae62327447430dc9c69a2505474a5c4105833ae35cddf3f48bc9e9598974f1ea2a4a7d79f2b0a344739dffafb3dd055cc929dad6f77ed567c0bfe629177519414df031935990f68d8c114202d6fc4ddc089cbc293ea2e77f13224a300adb6d1a6a719a0af81e192edac2b5a7ae0d49d0082cfc7db4daf688d35ec4cfe82bdc2065267ec46ee6aa554e3d9479aeee4d7e14ee837143835186adec45b21c1dc67313b69cb593ce101ef8f4ee5844fc180187dc6d6e3804348f46cc05bdc010e91dc3996ef62a96f5ab29d14ab1faf66f7478446bddccfb7f8314aca3498e3f42455cd2a2548011554895dcc67c585d33d7e6abf6a5958e94324a2f51762567c8174feec5f086534754b8c8e052f217f0eafb91354e62280e9c8ee68709cfd5b4eab54642e18ad4ef3214668df318a717aba74f79ca6c124dcda35d1902e52aa06f75aacf6544a4bb025d2768ee6f13f0423565383f480769da6da34dc6e0d49f85224e48fe44bbaf12d2693e86d3836676521ae98bb82e1a390a375f9a0b67765a120ec2fa5104675950aa516b86355bb60fc2e2ca7024f1f761462790d0426d391c3eb54263e4ba2abac71cf881a16414636ee4cf065c8db2b74e41a12faea783063d8a6315635be7bcaef91dcb8ffb9ba1066f30b4b99e38e25c1e93ef2f0a31a012d70d845c1c476fd9a8e2cb2c0155d2252c7e8317490719086997218c318f2cbc93144ca6fe562e0a80c60fcc9542433ca92d0490c300f0aca5ae0123c2c5e54c912d8065d7a29b0575be79a88db48661bc21559014f8d4fb7afe5c36bb700b7ffed900099c05ef433b1d2bc59520ac227feb31a5b1b94ac68abd59c8ee6b3c396a4ae4dbdd1a8d505b0d81216d90832b1c9f06d490e8931bbce4aeadb0ee3dc55f35ac3258bd4873b4db3185ce94b1e6be166373f9f9609c111f9282d7bc34f2118c67087fef11a4c057db783ad70d8071d8b6a1400bcf84d92f78ea3686ce9b89a47f84452e19a92d24be2efaf70fffcb7f3ff98c96276acc6738f5452e1b2572214be7366722338117d8c7e4ebda5660e68c94f25d751b893dc11c128570db2fb0c2538773e7328b23258bf1bbea35c48acb2aea1892fad2d7f965c08bbd1bf5403996bfc45cac5700b1514d2a07616753f80ac751b018462e77604d2fbede8cd692ada860ff8046ef4660255a5b0ddfccab48d6056110a264aef6afb1b20c66cd8492f5c64d9a414dcce7212a67ed3932a45b07b0c0428bd718e5b12bdbecc2c58f42d8b8e80fcfb02ebd8ef01e14bd0353d1c724c04d1de49eaed2c30cd466529b427ee0d60ab4b9e9bfa83ff4176c1ec8bee55390dd23e9991a8607b159cc4eb3909f2bb6bcd4811d1cfd6413f91e2a714416b4544ffa28f2984ceba456e51c188342421d9b2918bc3d9b8236141c70922f6c8fd93bb7befe3e68f70a2d2e6fdddabbefffd434c553941333b9078ec1a46f4c0aec2fea547ff2016d66483fbdf0f280cc92e20d2c58ee8861e3acb674193f98af162aab28d7d64c91aa57286e07bcab666c449378957aa4be7ab351cf3aedfa527d2ff3afff7831696ef46a158933ab6a31208717129c9b428a7a8b991586bb399cfbbbcd30146fe9102e09aeaa85afad8e719bb7836c970513854028377216ef8fd3da54114457842d779d7007eb60fe2389e87811bbdf3a459c2be52e922123adff4aad6f6c183da2bc280c2dc020ae186414600b9c1721861aae1abe2dae14cd8b662cc6e38345c3d08ae5d26e0e182a79b556c6446fb451fc2aa3d018390a79606651f05c88015c027631119da87d25cd8a7501964ee4d8f822535f4718f8ee5ba224ca74c5073dd796b970df9e7a6419a1cd0ac8a4d0e5ff9ead7064775e2611174cd792eac626bfac01d04c9bf09c3cf32cf6578a4980f50675c244840fa192183018732785df09e51d5027e77dae6c5b8ce1d87a19e05e400ecb537fd2d99f16b3d8209d29aacc85342c6b87b49bc78f059d23d7cea8df64869fd56ff94483ca0bcb3690ab9f03dfba151cdd931f4d025f4cb4c75b69e153bc4a04964da3244eae6b55d061e360bfd325330d428a7fb7d42f48830c59426a2ee701f272e372acc59b37f612bbdf0efc76d642d2b6d9c38a8f4ae13fed5f4169bfdae1313955ee3b9ec67e4c94ecd27d50b97331fcf0b5ea965154ca727c946682a211711f26939f4759800da59a5fac6e8c83f1c44d4d2688983f857a0b1f10512a60e3476ee2e81ab3f7d0c7d9638af79f077fc00aba966c074634ee0ae48e596c1293b1c12d8c9b95594672a553e44c1448e0c21bff1faa90f33fb6f951da96913a39c54d292129664f3dc8cfbaa36ab013fc534466c3ad2ec581b01f7f62581a991ed2bf198c0cdcc67190a1d4dc2446ee272901541d8712c23f760a102762b19d19847f79b9a49abd3a1068eb1171c132d6c3d30eecb83c1e99cb8cf989e576161bafae44f89ee4b61dc8a1456248dc29c395118a045d5239dbb0d1a885f1259154fdc20e96a016305f697cee40103854035179b1a14fdc7c28d55a5630bc7a636d6e8beb1e3eee001cbe020691b1b8ed99875d51a53c056634de439e4622d2027acb3ff60db00e2cbe286258c78853547be5063011df575bd62a8218cfab92848bbf83a52f619caa18c299f468c6c078b474ff02a435591bc54c26fe8e9d91151c304ec69d2c2c0af270edd533fe507ccfa52d7ab385f1731dcb5b42668b861ab3accafc7499c6266b5cbb7f88219d83de0681628e26ba2ca4b9a03ce28efadf7973e5ac8d0ad4e96e2d1a81700e0e46279eb730274986db55d3bc4a4e76a6cdbbc69b0405567270c80047326e1ffd3ffa9f59c3de7e7e5de0f0f79dfdaeb622b727d82baa3299bdd861233ea113977336363808ebda5e39cf475049f6177c0e08f1efccfab85951e4e9283acccf1f1940991cf7e39b885a3957480a9bd01ce33695ae5ae381a4a8661e754b8c8a3e84e465b16f3a007e966193eb8981128f4267554dc7bb8ed17bffd8cb745f115e623d002985c007568af4562bbb5f52e27f47e9ce990600e0ef8026995fc01c54f533d7e3db317d4f9dec83aa20da6d2700298bdc5c5bc4d34d0b44809d143df053496dafce0101b964ac99feed07600dcab099d49e4fe345e73cc1f293bc456cf69e80ac804f22b2e3fe428bc9cf48aa651569722a50a8ee5821dc51418661378a29dc8cab95cdf8c44cdb5a41e0bed9fd9a396b37e0f4d20ffa820d72a04e2401ff642369d6303a009c966a2f9348e0b1a5fbbe5369843af82282556183a96f07c9ecbb81a6cc42f5aa79742dac030b0004fc75f1fe1ac2c48b2f14d839d57e174fd5f892faffe90b8b4e3d3d192dc8d86a8e2ae29100f6e53466dbb971fb21e084b69dd28c7aa4c6d23c79278ca0df80958800094c534cccd45817b95012b81a5216ad821c825dfd0b89bf1ff090a01a8f9b5c09a1daae620bfa858f3ef441dbb9fad2ea8c381fa9f68552110f491833063f69db4d7e7f7f24bb69e407b21a354edbe4ce0dbba939570f380f8515852552c9ebe959511c98ec6d97a6c664cda46052f505deba4039a55f03b53d23d4ce81338024d2cca916164c39f3d9cc52288eb9bba4f8c931b9832e9d37a8f6875368679c6a62d2d713f44af0dc2294b17e5d1254ea99e0800ed6771007daaeef169015366ffabb9bfb3197d19e2e4b2cf561a471207e81d1264c1517325be5435f390fbd22d4e9ac9519868c2c9347534a3ec433118d704746866014cb09f3bbaaba976afb8f7174bed405f5734d81d773ef1baabc1e6267c2802d7e92e3b3c016d6ba4bbddd9c48a4a23c5f54e2640570dea6ef22752e59ae2b69389d5158d74d79d4f802e35a839d96902511f9b70d95016df4b2ec6ceb91b4c0a81175ff524bd4dd1654e8805fc940371ddeea7b94d2fdb718b37a23c7d1e7b4bb5814edd35f2ce3b3b615534ba5c767802a2ad9176bff38995358dc6612713a61b0dbd738727a28b1a9d9b9d2642f43518d73b4eb4ee35a6baedccc449030d6f2dbf8b1c896f6271af001098708394f71288800b3709382f81084cb871037d30096e78fec95dbb390004a2d12219790108fe2b7a521d19c491212a1c4226e6059463ad4b0d96c5d9114d408702a2a1f087db8b250477a77a8291f824a001af6cffd2fa5719984ae2c4e7617c8ef7c74d39f24369c2fcc10c7005c8ab92e7716d15bf5471eb38fc0ddfeef777c35f2e59f399377677c71247a87586e009a566ad1a530bea8d462aae20c474f89282e01f3e9a59023276484495f983cf8f487dbd26010245b6fad0832eb6c299a222ca8efdc4211dd913d5aebd1f2caa2254c0a0dbb6581c506895833269756ed542d9b105666f4ac77a243d26f90a5b28c993cb15b702f048f35db95112a41b057782ad53bcc77f25e8bc699a4ef17ee6ae39e81825f8f5374a017a737546954c93604ca6b9674865f2136379e4321c1ca09ec080623b67f7219b77b1bddd31490031acd0c93c07d4bde86d4a5af3fd299d84c49e34db09d0902b30575fabacfb20e8cd142c511104e7969cc2201ae4f3b6c9ebcc549e23f4b5d00801bfb4d2a22c74141c13219a3bdb5246663c331b268ab6109579124aeab7dbf7ab8dad204517778e9082cb29a6d246fe951a4fb2090d3d2656f01bb5a21c64b6e74b75397b39b6124ad1bb2e1fe60700990c20665eeadef11f9fe18a8680183c8a4e4cb621f808d7f7bda68e8ee52601bc4445b8897a22baab32eb6c0200004b43f361863139f3f5a2c0460085f8220899ef4c19d82aa85dedf27c5653b5ab394000e6142cc406b3f2793b803f9dbb5dde00260c247252a5e18b7ea6b33c1340d6a33cce748a98130c1e10cc15af1b9a16ce664b2ab46c3bd745560d91a9233378acbc2e82b548e5e2f11fe103d382d4c2b568fe1cd20b9c8fffa06a6abf85d6ad98053c66bf9c3c956311087a1336407de85bce77e9bbc26e8643a4c65b72f4327ae438fa483045b22bdebacf3780b2ccf2d40763808b883a5817c1d625d90effc0383cc206d5331d3684df8c67708cfad403ae6f170195bb86e4509c2e336595aefe713c0a9391bbdbf3c6ebd670c70e3dcc2fbdc1a9e507bc083873d584efecbdd91bb3ee6a603e572255d9d657eb78f10848c1b2ca39c923c7f179c309a92e3e1fc8c3bdcc1e1ccb6bd9614a2f4014b48270008719aeb754b8ba8c4fd50c77751ddc2a80d8b7a8852132cc71339e87544fe4605e86b8912c13f7cb772298fef9815bf38f1596a3c50c9bf4da0cc6e06efa1735d165a3a14d1f10588f717ce9230cfe1161bdcaad9fe7668251800b3dd575e9380ee1c2cb1212090ceeccb51fd5ea9af1218918705a92e09cca6a47a6d89454492067e411607f5463402a7856a3df6af0d34695d681b9ef3f6a16961f6453270273997221e98f8e97d1c8a44942800b7e4108f76c6834246d19b0f2af7d4c0e0c4bd85b148c3f9b21f51dc5a19842bc5c79e38cf9283937616063a0bc5d925c12846ac4b2740ff762619c5388ed8a4b69b20998fdd83449531c7d95b0e4df5f34240d178c258909cd23fb2895e9f3013705aacc8014fa441086e197860705ea90a8ef6a587cc8f5828107480f766be0eed0d40a600fbbd02b8e041cf6b5858a4ac00c1cdee971383921d01308c762431556deec2ab437bc8cb10b95ce0e7a76967004f213d79f6cfa186cd277eda1cc3b961022ec82c15454c1bcc5d0d56b545da8492dc045f4f38ac620fcf0f79671974f49c2c9717fe4cc11f736f6229641fa2d0536d3014f82747e10d227a1c07ebb56b87ea1638d35150243333263bc2f74f19e127926f2b149f1c73808cf6fb62ae82b1511cd6e35c4f144f98cbd777b14eace01368048d5b36e83d245ee44270c8218bb143cb004031d9aadf6a0fc060c63aca5ad3477a8cad9da3580488af1634deeb8b137bf11a4c351432a37327e08ebd1b5719bd19539fbed201ea029b304418f4b1b71f0b2f779ee8cf5663c16361f98e7e92941d2dfc3b185eb74f12427ee8229ff427b6288f6049f76962289237ec8fe00ac55dd214b5c0ab353b9a484f743a298008492da90b008bcd2fddffd90c7f320ee9ac531273b2ee76438ecf349061404f98c353f837995887e12706c42e11dcc4596dbdf997249038527a4038cd230693cc700c215d39e847fc13d0530d10dc6e56b4b21ca3e920229c651f2b30347fdf9733c948fddacdefb268dd262dae275204dce7bae537a097b6b97e86fceaa0349b577cb3013d27697c692051ae09d9056401f5651003a77f0ee6e55de4e67dd2dce33df4e7858ed27ec08fd9963e7a06bb59b30a31866738bd7380371a5ef966eebad42e118c5311b8469dd97a20ce31a62dcbc2f85dd0bb3c065e19ac6b0f08fa13df7a0c3aaac64eaa5e721cb2951b3e20233e33b92ed0b9edb90caaf0b3eab43093c9976cfd9f17bcd0e0625124eee0b1fea577a610e8a5455d41be91c4cd52a7d52fb8f08e4003611522bc9ffec50e9214eaaff8fb0cb7e79a8bf8ac1e79d9e3edc8f480d57105ada8e50071fdbefc2b137270d1ce0d17f33e09338db73dca8839215365eeb7103f0139c3ae6688043de478de22e468020f96921f376c66dcc0ff53c35a627072853758761d274418384b438d8fd9e544fa9935172b40e6b22c4b0f1be05eb269dea79ac488be65ed9547b21d97b55c9dddd26dbcce7dbe4aa08863b74e6974b1802a954fddbd1f1f31f595140d233e952a4ca4db22f2fa255d17f6c41bf3a2851857bb1e3c3beec798026a5e24bec1454ca538f7adfcc0855738edf3a03e579840d8419df83bc4aa53961c604e453289e309dbea0952073beb191638fcf7a73b16c0130b002933e77c20c4d77f8e02e6bc656a36128ffc79a774723701b00fb4ba211f8678bec8ee495cf3f01926606163de01a02342f98ebdf3bef0a2663d3df3ff41af7fbf6f0229f5feea40c8957f9b0033b0a849fc8658c99c9264a14d43b81191cff2f81f6d0b38780438a6e2e3fa048a1009659b619ba2ba04ea23a647bf8a68aeb9c868807e1c3b68be58828c74bfb76d65c4df94727e465dcb75d844781969d7d804edc8a26e3b94cd7ff507f52ba3b155caff81e8a57462d5a6b35e9b1927ba1fec716d6281168e055ea19631d9ddabbee4e7ec9b350e1860882b3b2c75ccb74aa34883c2a255330553e65c3135496e0f305649b3b3ccded8907f95734bd6d1d19a28a02b3cb9f6162f1147ba3802623a2fcdbef11020eb2b33bc0e2529a2178f9ad1852f9999b457b9864a11cd2040893337092647536b926032599aaad978c18b407a14f8af2b8a2bfa09796bf92bfc84bd6998e230130139da2ce27d248bd65dec2520d7987f68f9cf12bbcd6b178a36fd712cee178247b2271216faabc932283234bf22fe7714fa96e807140df5280c3d2422812b63ce758c2c57fe014beac059d9a69bc59ea3f79f101d44eee9f7200f870dc9575aeb1994367d3b1a9cfefa46318cfae897e5a7f681b370e0b2752c47d5ac62fea96d31e49ed371414e59249c86baef0f0ab2bb6bf78b7aece22d26a55c869e22cc88ef966b0bdca418bcd262d22af5ea19fdd81bda200f6005a3c2d6192c6e6ec4e2b51843639ff5fcc66e5726228caaa6662b0a00360b121b8f3f9f6131e8b350e879d1bd88efea14f78dcf9f94992f9b42b7200e20427128f3e2e4c313214c62250a4588877ae2dd8ecc1a9f3e7970d02807fae7b48cb7325cfe6ce15b8a13651ce9246d823893de86d9f6fe8f3d66dbba876090e61df35052bdcb8165e5e01a23921affdb95f833ef76e1593585ff14d30168fa0ec26be48b1b8169cf74be2d0e638435fb75ab2a8fb9a01429c252cd29edaa9eff01a7bf92a85ee3b35cc45d8200cdc895c1d67d51abf197f9b629820deda5e3d6a85436639ff7c69b9a83d0e37b455e8afe95486efb456a3162e076eb575732369667e293ab8db37a59abe186a1ac0899c8a61ff7093ecbe15503b0f359bf99f0f06598521fb808b14a277a1e418235744148c8919a6f49b5ea815582958080d3a8be58dc4d73718a380586dfbe52a01bec9e303094aa90b1f42e4363de5d3037bdc2e374db2e3ae6672bae7606ba420687556263937cc250bc9e2350cfdef426d022a3d9fb8bbe431370852dd2a05e3152c6b23825c2db10ca2aa3e17e7eeb1cc965607fdbce9c0d5047392bd8fc430ccea47ea422d3e1824ade0d4408487544513e4a64c16a30a7d22ddf7602d99e830bc9c1df223d28cfdc3fe11e43e9d4d5043db58693b447be4bcb2fa86fd081029e4ac03cf433d29994148a34dbbbe30f5a9836bd945907686e466f41f416a8d60ae7b9b2c5549ee147045a27f1743a1ca770900a8624fbacbf69b8217c01eac04cc8e2a7ee250d874be5bb34cb99aa80e84dae046ab5db8311332b87a64f3f49aeffcf1db53d007772b29fd251c45206b700138d0f8abf7c1e784887a09374ac80d821a829efe5e6198b78ea3df1aac62fbf7918cf597b99e97a3dfb0555376b76806ee2ee8e59dc295957c05b72de3abe036ede9d9799e4d47833c6b9daeeb5e09e867b4fe6c8d4144d228a2673ab317263a8292e0479f02179152cf31f58854ca0ee1c4a9dab4744f07079217d5486e5b108c5cf40d340de47754bc646dcd1c762bbd84425d171d58e92483134f7649dd749c202595e3efc6e8b2574b34ff12a6f2a9204f6e7f4dd0c2781d74051f7b3badab8526858e344ba074f970b3dc1474e3c82d7f4a7eecfce0935b459307b59ed4860a575dedfd8906e07845ce43e49ab454b2d9d2cf52cdc3189f1e301aec90a841322f7b671dcc7d52a55d138033a5bc06796940df12fd316a8700676906e27dd28ab9d558211e9448ffe4a099cd97c44fd49ab176a0d170077c4fdb0091b2f1e7c5491b48ef4a731c0808825edf1cd46c74a86f48d5c428e48a7c82adeb37143f431d8c6d335ee3d71c2c88b9c52dd240e96f94b700f302847b4d2728e209f2366a4afb494bac16d2a64a8fb64ad44d390cdb9e380d3366217852c8849c931ef4de8e581b0577ff2e2c9d651d37b242f0d65937f6c03317a56b356a75fc681c618b0007fc624176d61a3c5845c272399d76d6d6b82c11990e78f3cfe2a66906465601e67f32e177f542b85ca2c8f80562467eab17b43f90ee1b87c0b977b0695680272c487ed272c548bcaed58caa5c1589db6dc08fa5cc96694d541af6dd91cf6f0235bc79eb7eb0e9912e4e2acabba8a54b9f1792940af21dfb636dd8b107bfd441b4f9cd2e6b9b50bb1467b5edc565d4f0c1200a40bbf4765301693c4a5a3e2c23fde6984be1336e3c2ebf9f91adb38520deb89998a00c851e2e6f82a28c8bb30d0558b940dffbae29159cfb3503fae021af0ef6f3007dee02dabcc229b6e080d24572325850488bb2db15126cbe8cebdd1c64e78be3dcbb7896915da5a2ce9e622561d33c810a5da0df9c541be9b5fc180f07efd2be91f0cf1d7a0334eb658ba92ce85b9a9a78d9e179121019ed66aa43ad14d49da3fe8a27714a9a1d65c84245272d275dab5cf9e66cace5d9e1c3bf568d120e0d876caa813a9c1f86cefcf2ecb2d30d930435040e1dcb525dd2b3faee1a838a1770eb13103c4bea1685a926a21bbe9efc1be640c7f8c3537fd87d312a9663e8be4fca1535d6895e7ef857f5923b48e0c52680c932f033f7c77e2f418cd61dd535392c3ff236734ca26c6d957d9e8a5129a1424eed061bef446c0858635b26a06d862a821489d78a972b628fe348aa38548b00d2794ce7fe69f3900439e1f80bbd45342ed23769d77c7685b56408e37f46b739a8610d746df9f40e1d09eb3501efd4548dbbd7a22dbff38beaf0091394c3c3f5de4c30c3c1b1863d219b055d1aa6459d94a05dfdbecfd33952d2ae3e5b3b3f2feb22e1d9aacd626c10c0c1278acd8a1a7abe7903414b2ce648a251352322e29cbd9c185ccaa90e422b57c46455efd8964db7ca0be000cd7f703dd2de37c00cfac9db3e72c33227b6f628d2595ba56c71704f07d1e5e7b2281b0c76a072723c2c933ac27fc700478231ac3454f4d8ae0f580e01c72165a9284daf0c907e40170443c45b2c518921e3c736cdf4800ec390967553abf9f105bdaf5f6ab48c298f63e77d06edf26e6d768af04473cb37f8d28a1aa7a511683bdb059867280bac063f288f011efdec39e453246dcca27590043484f87d161566f43ce9c1ec12521d46b63b027c14c4ef6dde139130cd1c2c6d08d228319c40235569e7c53525b086982626ba8fb50ce30e9b022f3ea4a133c1207cb397f4dfe660dc53ef4658e6467938eb02a6fa7ba65331cbf7668f0177d62510027d668e25b4154c078b99b565d6f21d94248c1177216d6fff8833529fda106b0f275041164eefe1a7f9d88125ca6506908f4832adde7382561548118f8304d0f510ff2a9b676653f540f49587b8b5a0b641bebf876a36124d247d30253c2598440013844f2582aa12c871b595d8004300d5e5cb3d461bd9408b8910d5c22815f4f5a12593f2fa2179fee57ae43f616ccff3e619754dfa32d734fce9cc301a083f9c0a81edc050a9bb5fbc9b59399275603b2f2aabe114b2a76feba2bd6f7b8cc89554fac89fcaf88e85e96f618fdd9c138833cf908e57cf90964325c761fd3fef8fa131195a9e27895585ab1e13e6906b2af28dc4bffe5160f883d3091fd8b924119ee0708a5b852f8586b19377a3296853079e7f84754bf03552fb9549363bdd055533f0383e635b113cf95a238813d82c1ec886fc422c973b5666c2b950acb3381dafd8af4f6f62649035314149b01be5b3694bdb2439fbe6c0845ed4b61b47873c7133253d1f447a9ebf1a762c18b0c16f7c7b2f4ba1caf653a49e9c181dda0c2804496df2784bb39020b2372cf0445b60ab7488d6c62880f34121b5e682330d7cf50dbd78244f8f3837706911ee7291225b00f875908a1fa43478e943f198354da73c1f477f69c264ba2860026a980c693fc617e424481acd443d1f935d57b15b7b78f7f70262f450ea75febb85b1e0343cac564cebe3c8245998da5a1f4751f5600dbbaf438ae8ef44c3a62dc71255c2bff0a9206301f9524e4a9037ce3ff6e3e9acbf4fe248bef13ded14a57417ae857101bcb7ceda00301312ed2a1c40b25deb25adaf9c982c1ca043ce2e669beb3e2c40fe91e01d75c3ab6e2aacf782b1935d71e7b5c3d54e7b93b477c50d7eeee1f58f4c2338b24fb894ce4faa653b3bb0aa68d3b34e78844f85df13cef7238b9317eb97a61fa1f617306109450d834a974ec640222f923cb01f3fc2ad00da6e7575ca04677756d32e6f5fc2969dabce614c76b6c0c6657e0b4d3ae2ebcfa33c17a0a0bc7ed7dd865e8c1e53d787006559f1d5b6db263fd9454fe2f05c10e34ab8ae7ddc6fc5fb6b7c4c333c31be7a6da80bb8827d119854daadfd068f6b452963e487935e6ecd58d040286225e8b0be93a7cf386bef4f80a743957354be1e748829ed8d60a677e36ee5e87334dca6a11c3fc79e0139613d53a74f9307be1bfc911fe8637bec4ca70721258df23a9c7f9e0995336360ed46fa90809e5b3541d67c22759eb2f108c5cc96b934fb8fa9c62421c4a2068673a22bead43f1c3b8055547d220e2c113f8ae997417418773e9468ce33d93a0cf1e18273e9e12fa0fec57ad1018d9b20fa91cba29f050990dfc73e2637e4b0dd566af37356dbf37368d0fcbfe931e3de0046656e0de3a057da7d0d4789444a2844437269f299788abcd803a028a71caf3f37b9c7b90572fbf8664e9b5a5569eaf946ecf37995099ac63107303adebe88f99753c07444d748870b5d62bf0d5986b878634d73297aff9b3fc58f11623c3899cfaef155f8ac37efbbd9fecb95687bb9bd9cf5ec99498291d5444594782a59c88804d3f6171b3589f7b6aed6faa999b4cfef651a086016a7f13039306cf835b97515a878702fcd709c2521e10cb2683be57545e9e96338eefd50f5604466bde092d88a0a9c40d712c10d05b42b7803e1b940a4623b15531e10c3a89804ce62bb058a42a4f52fa146f7fba890fc770772dedb20123dd57c506b40c3da31314808d0eed7ab286fb8a794dfe8eb27237b0006c711dd28231b5b2dc3d3e2e37814ca176e1daad93bdba6b8f56b3ac9837a3b999f141568dbbb7284855ec5a0767ac37cbbd8009cac93167a82e11c560a5ebb8ea7000924dcd1a3c12c1c4cd6e4b257303030525db66918c34ec60603ca07ace2938ec5d21c66e19b91ff158271096fcaeeda426f055d8e4c47c5e3a0b7a69dd1c81b7fa1af2dda0ca444415d96163312cda1cb2d9e30c912852937bab603166a28f000beceac39a5ec3776166979fce19cc20a2c323ad038856ff5293bba9297486a4f8ef619f78626074068b0ae92d83f050c620d9f134619088278d0beab6652f94b674480c23327c77378409aa083086f246ac69e87e1b26e393a1a5cc2d0e50db2eb79a9955c653ddea8cc5791318f4f719f724053b9360c59359ac4809ad174a2385f56fd8979cb11c4d3f9222d09e7b62fb84cedfdcb10b640adff2584543cbd9186db9925f583a0e3e4156eb482563dd6274cea553f3162a6a107c4c5ba77b4e0f8574e997e051bbc9499882d01ffd191ac4e8e00fa5cdc66e9881ce45ae85706aba25cedfbbd467caec7f6cd445c5d0243473f61ba33a759a57a9f8d44fb28a5412046c8d663c89f6e57455b6d51bb1a32b49a469898a3b0f6a64b19b9373372eeb5b9ba31e03f6e6dd0ea7c1c74bb0572f003773799d7aad470180595d9352d468cd1bacb54d8eec094532a84d7abffc4844b40f95e01de65f20ad6cde53072419dfa403c16d8038c4bfc40c8deb74c2b8c23be9801e2f59d373b5ed0c12167c8168694e7d7c8471388ca746710e485e213e7200417b74d30656c9d4715b9745ed29b5816543f4a3847b735e4c2adc1a0560a695f2bac1d1a75f42064597949221aad09b516e10ed1326cefb9a33e591ab5f618926f91c3cf03014be5250b81bee3425d57409ceb6d3f8787471383c5bfa375b78f0a964eeb94c6e1c01cce5945f6699b5f7298f015abe516e83ff7dd3f5817d5124095938520f6f6790704090e038832e5e78307622d6317afe1a588604b6a6f14f00bf37ebbc2f562852239672b06754c988bed2fe5f4d38fd9ffd9154cd590e554c77756035d94b6828de6081096c06040b120187461b90b0bcc9084e331b088a939ac93b518f73537b033eb9a238a0c74c0c621d9ff0e427661861e664cb060208d81777e0643a53a2d4a23924698cd473c53fc1c8124a0c32f99e0e852f59f33a184732cf93fab0e1926dbbcf4688552c56c58372c3ce9e01d68f4c0734c05f862b5212147de08964f1c58733fde2e1af78e529c6ddb94e7459b7813d16f93ebb2c41baee86d9ffda597995822f5f1ac338b4e814e391138ef9c9361a6d93f70d2e78ce22234a49a20e60a149ffe86d8bf07111595f8b300036cc28ff782f88218e373773d5c0a73f3b626cd1ca6513fcdaba4d6cd71633ba318266a2004e4ce8e6fa2557fa6530b51b7cd4c5d569e63262b8a4c7697593179883f78ea3afaff98c42c7d0c52dbc7e4a9091e6cd74b893a56f13606caacd644b6b5796d2ef91a170fb283e656838f2d18ff8ad5aeeecba709d5b6e5fc19abc6e32ab3870fe0a85a8ce0445ac6b3aa76287790765665e1c2b2bc4d6da7c0f6c74464f12a82a8256f2cb3487c80c78e999d139b26630991821c7f518c66ba0200248a7c72dc86c0861540ffb4e31f4a31b800779ec2d7f7e1ef035f7e808ad4b9401ba6cd540025fb4f9fa50bd337364771b40ae883ed739285d9e0cba86685d9075d4dfbb4b1509d9853b76012c472192cb6e63fe702efa3a12aaa9c00adfc7c2c054eaad50c5262b6b96ac5a979a30d7f74be29430f755525dceb25a6cf47b345ed1b89c6a414675263a59bc8ebe0878674c5cf720d72f5663381c365649b8910724203986fc7ef7027d92bb923580583b3fb9294c8778fe3ea7b6dfc7da576c2ff6f9efaf476c6b7ff3bec27ae0b0d182f8f4f53b3b3a857da0f293772179f1415f1edb5e24ef126695380a9c91fb6cb0ca12c988411390e0777bb6bc8668a75635c435c83414413c886d549d6494f9e2782f89d1373ee3a87a8c44dbcdb8639f987e7080fe2660fe0b3a560b26e4d9e75bf1856361889142201b568bceb788df81dd8dac8608055a4e0336b89b77cf2778e9da6aea985ea99d8065a7904e889d50789f50e0097aba0bc6a33eed76773179b9fbdcb6e711ea48c906741d0cc2df2745b780b927a86319f2c9a7282d35c2d828b82e0e5030c5bff7f4a00a5c06fbda0c63019d0c87100b1eb8258eab93c5272de9e19efae0aba610dd6e6c22a59cbe3f96a4917a02ff9ed0f4cc3fc2c5d5a9b3040efc9b5fb0eb956cbb196cda53f3546276f2451f01650f6b979f1a966fbfed5937efd15c1d5ef103243eb2f4ed929c0f9216c334e73daef536e83f80a977f0368aed3e01a51a9ed0de8bff9aa3d211158cd93613fda59ac148f30ecbd65bd42a085ee4356688adf8889a4bfa0b8e30f31e0dd7ccc11336dabdf6ef4b0cc1f0b7d975f594655a282e3ca098ec8a82584a8a6046d2a0880c54a300ee8c900e18343e6e95e8877800c8373cf44daf9c979342f70026984521a405001d52f7de61461857240ebecb5cc6e47715d45df200638d520c4951e0b36c88c91de5a96253475ee45b099b4b4584a22450c6c7161630cbee6f19bd4cd9afc38d1c423fdd556eb5634a26899fd991140a2bc893a44350bfc7011965ab02e71511e3d2896d14a779e84dd5d6829b3eab9d6f1c900bc234a88bd3c4069a12ee72ec66e749c9e2e6a60df76d0001e107bbece2c63b13aa138ef0d2506ef2021f39a68cb1af35bf4279bd3c8a9ffcb629fe6921f77fd07e5eafb8f1ee6392bcdc64b957a5cb4d0ca04491dc1b63f4f14e0dd8d63b1f46afca0646d2b818411463f8be991c3574ac048d3aa363b07767bfb230a3b380ac91c0878da489cea6f3a73a5da57358d1f64c5acc47863d0201cedacaaa298e3221360b6f9191b6dde3888733a0b07b35c57be1053b16529eef755512c18ad30b16351fda17432ebee6536d8933b21e2003a1e74a9cf067208e4da6b15901fb9429f17016a13b9d4f638a76dc8cd6c7cd6ac676786f880c210e4b67d9a063c2ebb0e0efe6a3217d1f3eab6492cc798286ba0f6c761785edc45bc6862e0f912def1beb18a6e0cd539759e784e8be20fee2607990aed3f546624af0a29e12aa4befe6887f1c1db0455d36e140a141c91213d3865a302e0952b97ffe342043cf01d52cd1ea230d16c409cc2bbdf1a5758822b8ee9a5b4c3215517008989349889568b54bffb54a0ee929563ac6b35f30823c73ef77860039de054d1d20e40f72894590e04b6733848b82365044f91dd0d923131f3f2b447e2af58dc308312ddcebfa9ab03ad26826d810138726e064e428fd87503262116d5d49db3209e0243b721473f9756df94502c7ed9c6363d3000b3f209459f31901da7538b8bcc4431963c193b636689fd8e9f4186303affbad642a6d8c58f9c8f41f2b772fb312966713b335e9e12f042fc951c2d7ec8c3781876e781251472ddef134a41c0e260bbe827f2b4d54f968872ee60b6c7b2c2673603791bf95c155b007871a205b83cb33936fbe54a313fb6776863bb66f78ea4bb2a518ca3c1c88a1cf8b0860dfca14d939d1982bc954d7d8a7e82000099184ce5d48a56be36bc3abc1f28f2face1fadd364fcfeb378da49c034f58e838ebfe7229075303ef9fcdbef890dacb9f3ee7371003e0f5cdbc3822f2b1b6a23f225236cb392494805f67ba79006a3c3680bda2a4c1d74ff6cf159e06429438e0702fe98242f041ec2e9c79b02bb3b6930f04a4da525db860fa26feac44e4f9a488b8e306a8643b1bb45d0a6295b5aa6ab85a809bd9d2c1dddea990b377e2226ab45477e8af830f4b368a1df356ef5a50ba0fa79c99e48c46df343b4c89d0d36c347808f79f017e0e0f87201b00b39aa060e85d778d8671607ab9ded3d0fe2601a9bd3076fdee2882934570bf2725d90993f13a7b7a4ced83c5c8909f8d9c43e2cc7bb7111654b4fbd12ea5d4c1b2296344f5a82c0481095c7fc0c6d15070c8d11ce76540243acafd524f4d47c91d0d6b8e5406777a4cc844350e51f01aaf7bd5e144d2520951fc99c7c6a5f87bbc03a7dd6f088c8ab7d2d9ae2334a709eb86c49e3ac1b9401f6ca434e13a0dc036721bde22b13f09dd050d6f0b2d74c4d043811e6390182ca090b8037ec3b0cc0ea313af5956e405f109dbcee3fbbb717bbdb87a569e07dc7cc9b65fd5a2a9ed37c18e65af5f0bce7d704f797e823cf1056eee162aa0f1f09da08aa227c996103bbec61c9a4d2043410a6a1e350766d58b4ddc8f086a464e936cb92eb40677f5055e6dfd56233c18efd16be52d5c5e00ad56358e8c09fa7c4ec54fd6351236655cadce96b2880b9e613d6e7a8f6af15aaaa23fdacb30d2a59fbabb642d4f81154350f9cf202b249dfcdf7226f39df72922a70a91db2089b691f10be00377b1938fe69b2e5adba632e573dea8af0600caa6929bc519806bb9b084036ec1741de742f3e6b90416d90e09af23941eecd6bba66c30ca93674b1496cb60a6b4d69aa2b9ff878c2c924f36340a0c119bf75c775ce4c703a0708dc4ed75ab60d9cfb37e1abab89cac4e129df590889829fd2f79466cafb26dcb6875cb0815a6a5a0df625a6b08b6b5085eb891a77e9a93d6c9b116f891ea40b3ff1fbb8b94e0cf95ebe259967fb5ef3092b37b012589ece19cee303411bbf5eedd35b1f46d081a28be77b9a5e9a536f3161931c1fa7bce744cbff34764c296e828959c065c7616cfd1854d2e2fd2ecd98f9ee6b38a5f78605cc2ab94f754cd8f356b49a9a814782750c2c2f7e3657cbf49af5f9c68cf70378c916ddce3b38ecadf144c8bdc7855a75fee791601f770df157530cf1861bc7ef3f13c247a4c28063e48a859df10b2c00aa0e2234b4003a26a772f3dc9faa001eca026cdaf51f30a7ed392ffdd35d5237a1704844bf731c3a0f0ba44406fc6eeb792df4649ca01884610a91ce2d6ac09b7abd65a025e88924ccad86d3b9c26ff37dc14fb7c8d4ef3222dc582a84a50743d2b3a6a3cfb8a77b253d8492e64199b93f732599848a14d48d341bc66678d4307ebc68fade0438dde9344e259850db8cf65b6cf554efeb5108e87e0b4b910fe8822c47be4039573d2e60f5c4a1e691f08c0d9b2a2f59f3b007df12bf6386eed65bc5c1391b076c5856e5e04292cd3374e06320beb19cb6147405edebdbb129db08c4a41969f34c807c9c40ce5b39f446b842d015fd1307429e1c9ba3d3f829cf60a1160fed866560c09cf33eea83764111290299f0c7a2f3a71a79fc335f421ddb8e1f7b8efb7e45abb6aee533190c6a69c69e81395481ae43c3978c8a1f14c14c1e67c8fef7105f3d0c7e4568933a76613dfaf6dafe0c04f5f11c8a212174766e7888f86e22d8564a2850faf99b781f18fd4da409ed4a2b428e1f5024f59c969ccda821f7bb03922b6ee5cda87d6b8143bf438fcdbd73a1f784cac27f07cc695bfd4a4e495b247117ca6a7c5425664a09afe5aa6d77566df5d991f4b2536bbeae9635d8c154aca0f4fb6231831fc203ecb5c60c96185ae694bfd0db30f077c7b29888cfb3facd451985c813b6550380d800bdc568fd9f2e5b5c4bb7b4e4bee831008665a42fac5d009f6952a85892990c1699f45a53569937792faa3e175c45dfb42cfb89a9e166f43d0bf4dc9f95c6d430592b6611abe6ca1e5db6538cf659cea6d94d39fc131bfd2bdc3d8ea93f08f17a34e0391b73893df6d991e52eaa2ee738d5d94760720d81087534d4b4930f24457bde192dbf048cc7df4babceeb14e826d83daf117ffb06583eefa1e11c0b90eeb583d89502b66ea06e110ff10a15920820ff2b2feaafbbe8b2b757b732c8734c27368cee3135fb10690cba96d4ee15dc718c108b06051fb218f860e81dbd50e2f00b10ac7a37becbccab92d6b63e74d85bdfba8b93dc8f301c8777c9e7122fd77a1c940bf2fd9e69f079a68b4518dd9ec452240e032f4d8e5536b7bad8bd92e83e86db268a983a3e67ddc202b11513753fe5a6fe2ded651faa5a4d943eef99aba91a75c5d34911b592ba9a8ba6fd338455770dc8a431178c186615786e0e825815750dcfb9767a499f0fcb8ac3899f90b7114b7bfec8325e5a130beba009388108daad020a56851849f2811adb35c26811b92ca019228edda996748865fca1273880029d449c4d7695f9b5a979dd55a26e96f5d1e1b93638003ab86f066e2b1b9992e0f7d611fe66fb08a30f6e9fe43d6410ae730a08c4471e0b44a4788aa1f31f0cb2a7eddd3bf9764a16854683c0ee8192b8100ad18155268089dca576474f403d1462b7a14bf750794c84b507b76670cc7d890cfd98d61edc8671147fb1239a8880c2a49e42ed8f970965a17db8d0d3d4477fab538444820870817b7220493d1cad0595122c886b4bf604ac4834639e71d4d2af5fa35288010efd620ef0606ac5900525094ea157e2d4e0ac7511fe41febc50fe68dce738b8614333863a035c71152b06707b7dfaa8478f32d8013e24bb875ed32e7d306865da8fabe4bee9f6552ab65a5a2b032cee5c6eb1300961ab5424b4ce7dcddd7ea6962b813490a5c867c3d056f642d06c0682244ced72fb53a4593190e0da6e4a8872cade285da70a8dff0c85b9288246b9ef60e76a834fdd4db27979a941ce898aeb601b8e1bb635c81d6df9c6a2110c581a5ecc3d5da2aa7fde9dcc9dd49cd2cda52865904720830d05eaf9621abdd0c0a8cd03bb723188b17fb92bc7e71f1a9711ff91472307cf65480fbf176f00c5b8b09c914a1b207b452ad191a1c3fe964a6674119982b0984c316eec9a9390418523a084958790a001cd9f8fc23c67c5db780efd78f0956a6d0b9631325ff4e1f495745e8ccb33f896544664f4e18da0895d9cc677beb821bee697b222e06d18314e08199f17fcbac44ea387d8aa4e759d6e9be4184d2ff4ecc41350d4a8e6c681f4640c52fdeb77e797b6718f0ca96709808449488ce8c421cb8990b24a433c090577fa68faa4afbb01e612e84768bfbaac5a20949d70720c9bd6f218f74755cca480c06b43bcb3c00efc2c5041d6079753da747eb601c8f1cd5be210c089e1d07f36b07f886a01700905aee7f70cf6de5387ed8ec06f9ddcc89b37a7c2eb0e611bdf7575822aa31faaa45c63d210017377d24c657fd330d0a8e8a4a3f19396bcc85b1f4126c3b03b63995a35e5c7cfe0fc46de53b88319557e729ce4d85d328b830473930f1281daf336e129bf843dccc54b0a2e5818ab4f096ff95a3c496f90a600f168153e06da41664b46f781dd4f4af6255fa5f6eea3b7d27cf15e2e214edec1ee61e791d7f936e8031fa10cad257f6b2916af619d8f53ac731ea70072a32a36e459c8bbc5d90173369233b7e0a6ab70180f08350fc3c78b93f03351b1fd5eac254d819545e3418139ecc7da9bc02205d08ba83453e0b3a9be081ddbeb7917a554f3ec80ccf7430f4949b16065e094d8f7edb4ed70e9f3273ec9b9f7ed90cf30c92410924690da4f5e500ea35238a1ad6c2eb67716986285533269c3f0dacba6858b3952da70715fc16f1e606139db28e5ab4c2ce8fb0fbe6b72a25a7395da8a9cc71c8dbeace952ac7fe3dc944ba9329fedec0366d0e2a6217a0f9e553220d7b878c50245c9a49d27bd5c52634b51dcc8dd45b4808d09ba0066f58ec779390a51a0040a250e786f5594e0c4ed9b1b256bd481e984bef6d06c330d142050e17ddf578de318511a7d1425e098187a2ed621758b052e8e176cdc40c46254a640490b52085832ba20e93f94e8024d508476bddf21a520f17dc1b01b98f020806b66015864cd858fa9372c6e2eb168313aaa52549cdf75fc8c151d3e5b5fba9426069e25856b45422d6fadd2a47acce4cb54f1319060b434c866d3e156a3e745218dbdd506508e6dea225eda0921319760132946a66e134227a87af88832f496ae53e5d30bb29c49e6be1f90a61040ef96c4b5067f3ccc8700847361e033c46c27104ffa87a87178bb265f29258c8d4d0e33979b7d82d607adb1f8c074623b7a9102ecc2e1f9253c3edf4eb4f0fc26dd0de5c9e05c6ae7aae8e1d74cda8d98535080c03a8313ca2acac438509c48a491564c0e1fb1ed896dec85ef7a39b8dcb3c0ac717c5a574255c02aa630dbdb3823afedb5fba03c7bb2f1301e46735de3d6741ad505035c5bae209bcfc6323099d57324705d7a8c34ee489e534640c35bc6a74b879ee5b0bb8dd754f171a7d8a44b37cd90d68bc41e2daf15f55ddb64a17566fd00ce697b4db33d86208976829b3e1f5a7416fd601a290010d323d3434954d93240b28073ffedc7f2b5f476f167bb233632f46a1a6d57a1424afdb0523cad12ff1ed84dfcff152bb6779b30a87661af3e9ad7fb2eede7911eba42d8ae0b3a4922f2c72586453a0903650a8519166838207c7e29c3969ff13a7510dcaf6e7fb6c2b548b49460e18012baef2640890c7d765f653850a98345aef7961d74364543d8aa69700cba09c95034319a7808a8cfe089e9c956d47cac62002c9eb1512e0d74bc8fc74bac22381a98142a690601f86a1a9d0f5c0937dfd851ce08c88be6e43d8fdc8bae35e07fb117fee7dfdd7947e29a0b55342762cdf8159d319e769ead88f9382b463cabf363df0670d7a57271494d8d2cebf1c6283f27485c05151e4b122244ffafd02c638fbb649bf153a866be4239af62f0c8fc4e77693d955ca92fbbb10924a373c3a78ee4c661e1ef97ea11b0d4f51817344d67ff2ac42ee6461c003432af9855a5f76d4daf015727d5087255605939bd34b12451b36ff1db5ad38dc1035047c221be5706886cac3d501648a329b2411e37be97a9a476fc8dd11013ba9a1ae93c02dfccbde868009346905d6b6880432c563f99dd22dfb132e4233c69e39163f8032cf66bd6e465a89be80e4a133c65b39b75d509fb05287e27da7d7285863e3f718c08bfd0a9e5c06890c033c7108b553e436f836a7f5613aa3d7fbe2aaea5d6f5e59fc6962a87c43f734072accebc95013a31e81a50c8f6f2d39832030f25eb07a3b04b8e0304d272f2dc9b47310febd8ced9ab4a655ea31a7691b6023ff12861d76baf6e918c29aaffb05b465624a89ecf744707e6e220e0ae232a1e8c551096cc798985b3194d07333e6bff5dd4829489e49c1209f7b6d2cb30f978bce64ea9b3a514eb020fb3bc6dd5cb65e8d14e833bf021be4561c39df4e9cc1790befaeec343dab7a63b6d4dc8c0a8cc3772b6f938b25e2a47f45d3a063adec573e04fa2b41aacc76bcafee0f2ab456f388583681dd8160ed31f5979e7dbf2c37affe648f6305afea669af1717ea1a819048f26ce28ccd529d3dfab373faa04591b04d031120367913dca965a4a0ab5c6c0832efd89e764974764b168f6c16b3d9b124cb9843f906f4f1a973ae137756158fceeca78b5e2fb43520a6aa41a07f0509c3dc1057b6b05db2016dac4ddd3d44aae9e11580058c0c45252fdc62fc7eeaa412cf92a3610f6d8b9c098aab0c4da270e8eed78ec81342f0696ea18a56125e3fa58bb6bf2e05fda17b92d7ff84a61b069885e3e2c8a17f3d4c93fba969632035108e96daf19c79eb521d4119d63aa2b6d9785009d4fb529dd4eba3484b45f2aca575dc62ab44877c0392f2636d703bd28822f8a1b6d747492be6e5318f225e454ad4115bc930ca147e2aea02782bdeb052789cdf0e2cc670459724114910d8f83112db217258d4bfe7b469c2fa200c6eb4b5aa9628aceb95502881d0f3ac8c1636157bc9481f0bd47f55987d50099c93b0254738d76692e00bbc5bb9ec0d53583fab86c6b1e87cc69889ce2166a2b523d900d449a4c5b5588ab53faa3746101609a94d39a0265f01b9768456ab700084f0b2942ba9891513ef35f793398e607f17e3ea46f356e429a06a03f91c1870fec3d1bad8ee1804755273326342522939752583b2fb3e0656668142f1879610530c4d576c15ac2739bdc6c43b51d00c1199b58442cde7dd02c4bae538d89c3a6d312e4c34404a4672aad4dc04f7b56fdcb6aef4353d554360b3a7ac18a71c39396fa62b743e3d0b008ce25c278fe925e3380090bcf660b042491d72eaff0847d5bc944a4f686dc8f38dc3aacdecfc5693e59bd66155894849f0f8261ea0ddeebda1d747489f70d193bbe8427eeab35a9562d1e052c379614341f867e707f4ca2ea893bd053a69c3b9c97d147b2c5ee2b4b3bcd1fce779d9b2a3ac52000a65443737f616f9a9e32e71f763e03dbe80880e552eb9f5fb72b8e9b17333daafeb47cbb7410588373140b4e77d0f3f93e248d80271aba536271445c214394e60b7ee14d3ac9c69aa2d673c088f097790dcf61d186b066f01dfdc8b206e6f97e8785738db5c38518c98321d31e490f18f82564691de082b51ea9fe89525d4b5623d24e57458edd1a479d23f278a43ec5b12610f3bf1c8a6cd6ddc66461e0d458adcf37616b4b1571bb7ffcc4ed3cf7b75d31cf4d58f96e1e0b1821e6037026069f56fd183c655e90aa20d07f8beaa23ced84129c32028e2d71a54470a21608e30f65c4ab1dcfc3a48bd88efd30c1d3dd112033ef59bdfba60ccfa263e6acee3be5e2ec7bcc14b63b47c2b07154e9f2188b670684890647fa2bc9696c915be52674a70b2c7075a7153024c9a8fa7050a63e63c24c3ed8918241da5fadfa5a1113ea0ef39c81dec1f71cf39b873bf893f22c10b37301dcb9d47d037f3035b31d1233f595d26be61d8941561e897251804cb52358f05a5526a25c8f2b8ebc75175ef74f271f95642730801e9f7f60ab143fa5e67ab97f21fa19f7de4384791109d7dbc79021cacad82ecacae773a034832cde04ffbd3058c46f8700686a47d0b8601121d031cd0defd98fc98b3b3ea7aa53ee629e5d986e79c31de7dc073917a198bcfa4fd213aef21923ee9681667df752800d91749f5180e776fbfb67e569fa4f80577c17dafd108476e9da0ffb33179227f4d0982ea98987b47d0a57350740ed0c7977a1964943c0e09ed5426f34a9510d84bc5a0436431734c68c8e8dd91d883539dcfdca55ca86040d78d83457d8084b4f1e35d218002f8fe22a4737df71b4715c4353e9256a42ed49808561b0214b5e2470589154dd215554b1969d883a0eb348f87e143eafa40df5322ea3351092e85710d90b3ed5d2ef0d627303885c01913c3d594f0b9178d7e0e717a8964887bd2af44c048c77337db1f1f4ba9d2fa096a202a89bbfa8b8bf1bc760d3b84335dc62437777d378c9649326031c3d7dc9384fbe4208f9f51e8dda1a48adef0491c16c3e0171480c36be122641f880d3b058c86199334e45dd49bcd30c6cc731de352a32f227288ed0c4aaa7b409c1c519a062644e12cd11f0a8d38feab8244ad032dd907bed4ffb07d2e6dd68003f1eb739cc03bce18c31238a918f17c889f27047d603672c2f4edb2ea224216ace1bfc863ec1090fa9c47c2fec402a01de34edb21a1e652b6865774b4193b826ba8d82d4b57c80ad1c4e049a174deb209be1b19ef756c6ddf69e9466ac05f857aa9e85a7b16ae8f0e97c98c5134066b472a9f1ea7ba83e9f32b84a9cf806ee0db79c38c31ce611a8d129ac928999ddbbea18ee87b08d653fae943e1950a8ada04a6118e43f98f310c28e29862cedd1fcd1703543290f5a4193ee2de0a2803944d7a0eab7151f2ca61dd325236147f3d525b9f654f802d17141efe2dc3e8ed1f2cbe06d76cce8370f00e95f71105ff7e6da7445f70cb6af7b3ccba7017b86410941438a7e620fb1c5b94ee5dbd6b35b6ea9670aa15137d462baed576c9a65217044ef94112b2dda9cbcd100d8aa518b904f5b0e002569f0fa19f87f47b78cf0ef9210d1a891317d703443911892e23e9125ae2c4636a0c262ce4e2304156aaf89b1c1625644d865da1228bd8cd37f44e4d900264e5a28f11ec33b6b3191077f5376df0200ade31d9e8c751b52fef6a9caf91023eb19423038a5e07d16068952599e51616ba175c74eeea2c6efe68942747f10d7b9fe402580280a34703973600f46cfe728ac7ff38dd22da778266fa5b2345ad57befbdd5693237bf5ae1b5cacd6126ce5b24494c6d7241d53b7d655088a8ebd5dd8989708e83f6b5ae48b393704acf937977a7a1cb4de08fa07c49bcafb10b01d943512a012719ae2615f423edc2d1fe611386339660cd297c28904504d1ae002c07cda01f8ded57d3cbfb4778d07462697b1c8bf7c9efaca93b5d2391b3ee2c09206e5b7e223e5760e41a6e76daa5e59a74e6e7e191ecbd4e6fed8d14966654fce19f251ee4c1f2df62023da152163dee32c199cf14b2cf9d41e362a2b77600ad9562731e6b5732a59033e00c9fd62dc2b329c47d783459504979dfafad2b0314a2ef94f77ecb791274648443d4e3e3238b1d3331812497dd087b9ab8cbe727080d3a2f7746e9fc44471ae48a19ebb8ce60457e19bcbabb745ef84436c3bb4b38a6337dbd1ecec3db2a8869a29f1dd49ad8c48914b4f19743891632a196b78bdabd0387bc8aad04cd7a1ed3a4970ed7d9e20302885b58f54ed3331ca784182d4e13911481ff931558002e7acea8abfc2df92b62daa0f61ba9db684e65a9a577eb6697e570590e5df385906e3c9b6d6b464631cc46ed81e80b723393ebdbe9951cc88ac74ffece1c82ce8e8a1a2542412666ff4e1e6f6697fb461143d20792a7c78330811106e87b71a052640ed28e7896995877e3ca97d791d6ee9c5a9a34f81cdf4c81c03b64b477d5066267a1bc838dff90719b7df7382d875ead54d30e98e68414cda9fa14ab826f93b9feb5bb90f21ed369ce50b4450a1dcc0409863cbe73ed3acd02d1f62b71528e1480cf03750ff4f6791271054aa0969d1eb289b68edb225063f4a12920a2d21f13a732e157610450d82ce8883910c28a23087dc097ee0805345adbe92e23935751b3a4d35a4e052ec0323de5e29d06b492040b900998589d9f9fb75a2a74b287b4ded08c23b0f77f6ac85cd2fbccc087ff5cf59c31e84201f567c32561707e35336487aee85699b2860f977669a2c9b7576b212e14ceed4080f4e33e59ee068c14a19772ecf9d16ed358d57495691bd6ea843f2a381dd2ab53164cc8df05010917e8e24a0a27f1ec658b039ec3febf54d4ef5a38b596165cd0f6ec71baeb9c9ee4c889055324bbe1c0d433c85129f4522bd6ea7befdc0133bba7cc767e30519251aec80f03e5fc6b3681e3b1856226273e329341e60fd59e3ca42c11a55816e6ea0b56a8cca5215ad6b11df3fc86c94ae10aa87ec2cc5d610e722ec912df82ca0e332340fdd80eff795f7c9bae61c233fbe9c9c5b87ce2f91a0616f602f8af2b8203c03b46b083f11afc97cc725ed368a7605c862443a8fef4f88bb37cd1aac76af22910be5a08f4ac4aba389cbb78936c1cf7f3a3c85084301299c08413ef92f8a842ff174981224f1dafaed98a3b450db176b50cb941a0def3fb52d1f2bb88881ab00ad87a9e14a7b8562585f903df48151894aa98159bb9d77e2f85b884c02c6f23cbec79c7c13de70e337815de75a1b3f60e0d7fc07e513a75f45d93b9b4e90109642f32c18d137d84dbd401be6e55dfab30714a360e26384dcca5715c5d9dfd571efa6a82afb9208092f5107a5f6db601e0733369b745805ad42d487dc5fa0f976b878c669af7455f24c80962650689461f027ea483403ca45542edd7ba11afb30b1e9a65576b424febcc88fa06a921573e3c8a1e37d593e62fc22047e9c6b5e69002ca54ed97d567827426c4cfb261ba446dac913138fb4d0ae8347a671995e5996f70e5d9f71ce0d01e5dc6f372809c8831cd18c94b91e54250322c9500adfa24c28f24e2662dae451d9051e7b6dac755c33099b56f8e60329d63534a5d89c12653bd95159a76daefb9e98848aa5195e56e5689b8e7cb21424c6aeb9c30e33afb337d0e7728e949a3b5f3bcc422bca96387b4ec038178c2ec42d38c32680989c02ab8b2a6d49b5e955b8253cb7433342f21a2dd35f1594c118a329d3fc914bb49c2408fe5471163e42eda207e6560a9aa10029b34c3bfa3812ac87e5b120b073483d78d079a0f132470996d689717874420441254e21a49f9387f04e1f4be77d0884e8dee1997f913248d4cc48fe00c922de8d79b4f455c1ebc106659ea9d22129c25b5b5ee9217c0b754553cc371eb9aece1090412e3929cb2b862acec8397f45daf0aeb5485b6875be2c500faf6185827495e0ca620b3e47639cab7cb253c629e03d087907a421efde377e8b109d1281c8e9d8852d13bd7e8ba0344c75b61c2cb528cd5fb6f53a137264fb45e89c8c302028fa9a6177ff5f939e1fbbbeb0cb30df1de5d62330b1395196046a47fe328413870b3390006338c1bc1e8534cdbd29421de49d6afa2aefa193fbe8951b688334805b6dcd9d9e4447516d3cc808b99bd0a75a789f0c8d21b5c7ec1082160a04b63f3c233834f96c6aae9936cbb4a814899e3d05f0f4511d83d85cb3fdf53348dec87d00d0fa2ab4dd0d74a0ab12bfcdf0ecfde43f421731484e3d5ad050a7512d98f7915563c4f17a5d4761e57514d43d1f2daf4b7f462c72f5c543af7e272ce1fb997e2ee353be693d03b37dbd2c4e376e92727525b71d878375b4741d592ed83594ca58af86d206e335337d41a6a2e3badb150415a4e95680e252ade9f249ba3c7be3ea394ffbc6242632ac746f970a538ef787749ca8713b4e446585f7137e2e56ab06bc75992c5f17c82dace8fff4f5243421d6d4172059fa87f9f4c8b5716f10ab2ff6af843f45ac5534599ed880653e87d9b6add9a6d2ed9434608721e2e9013b9e837e5d58c0e62da4df8d2fb06839e8bb982e44fe47c22d5b4b587d85afbe8b01102210dc728f703e6577a96f4264f0adc1800d4706e5aa511de0bc7bc12e63a1097f24a90cc79488c20b26ee2b4968fbaa12221dd7a209431f2742a941f2e0f94884377665e8c5724913d828dbdd9a6d09c97451be6df7cb962c14ce945771af84c4ae2b3fb12b5d25e14dcc645728b8d94875501f6f0827a07722a9d55386c819c0164ec449ab126696cece6709ca4030d879818700bd24c37273cccf185dd36cb647593436505029c4c6aa36d16a73b87df397615ec91dce7da8e3a78e67e4209b6693c35b734b3aff1f65a02845cec47d297a39cab3ca96775e8ab874272880975f391c56dd524003d2567f07a5ca8736b341aaeb4cefec2f67f8cc207aaec8f1fc26a9549d6736479878e66f2233b80dd68c111d087dd1f51a874512b8de38aa3bb96331bbeaf605c3420817be8b90f8c42e5c2361d3f1f53cf93308dd670c3c6d2d40ca0c322ec0c3ccd491619845ba9d84f7a92fe6d7c08502343727949f63f12c82a48e6b52437fbe7d0641f1a61cdf234b5ff309c6904a157bc4a187876e9c4fd3a5e38c84423ca0af24465e6ed0ec6f815c0e120d3235cdf07f6798428cfb85653330481378ea3454e403890482b628ccabf1b4bc34503c693d067f8b20c25000322ba35c2a56620b632376c6350f12aa5b91c024c1b10a20de0d664dc35fa1801f3985701c0fd0c0a3648b8732970646a630579b419e7919e88e96781b6a5ac343bb720b2582410142ef9d5dc609e1bffff12ed527f7701baf0033d15006e7df70341138e501e6fedb04cde03890e24d40fc4d6b8b7300e60597cc340e6c56afcc552f6fd52fb74839705790e50905726e553d450bc83d078ecbc2ad7159a64d4cc8e9a95a76a2a09c36ba4e6d31850bf5652d0ef0efd8c07604083ce33df963051837f70bc6ef43e4990537cdb8e49ed4c9460e709c21aec37785039f5a15e19c51a8637750ff66a00f7601ff8fc20680719f62894803cd5918491950af73fb22904c5b92f4927d3390f30c6c492f01b7fb6b04499895df0cf50c944540c29aeb8c120c4c6ad4a1799de5d55a000d8cafd7768130f41ae454518c683f033f53b2343fd438181f227d5724b012bfc07736535d7bbc3ed25b7f729aa142be9d8119c734393a8ae1840db523212c5ea181843534990d5aa5ffb5cca568e01603f83bfa622e5ffc82c5cd44629a478a0612be855830f86ba9b387eb9dfeb9e37304fbac707e43235d37d7f7e452d43962249bffa3d13f98fec1f81fac7fa93b84b67ca60b61eda0feb325b5b1a388a2ba7948bce1f2d9974d7fea08c07f68914ddd7f4bf1150882b1657959a159f1e3bc73b93f142146eb0ca434b1cedc339f93ff8772dc011ccc4edbea5680dd636cbd0ac65b71bf4fba8cf621482f7880c6fd5a2bc90fa973a4c3f1194815f52cae441cfb020451909bf52d6dba04ad82e9a73b7819e0a03991edc20d2f38fe6f4e6d01d9df772ac7054cd8326c4cdc72a0e9eac003bbb4ad67ba8f25505c9c1a6d60202af1898061076e37cade617d8112e9cd0275f2ee7aedff7537fd77caef09eb3aae3a7c92969b468b77d8b0e18c9f5c22d9feefc6ff68f54fa16d87f53fc1281467dea1240104c6026a3c0e755b3092324e07c9094408564903e0632b121cf75845d3e438bf29391b75cd28cf4755343a4a003b8ac9becc3b00443a86c1eac3fb7f37b3abe402808c78ea30ad4fd4db1241dae85308ee251ef8073686faa51bd97b6fb9b79449ca14120736073d07749a20fdc61317e830459c1fff2007b1cbe1f5d72a88d28391383f862208b1d391c35a1d33a65189d4820b1547e2fc783811934c49c7e8bafee40e4c62622753a00691d8cd32904469c30e49a254410c49ecb41dbcf8a155701912bbad065c7401123beb831831b1dbbcfe640aa480891db7044cecb833e990c58f778a9111542af5f4e723e8852476d79b1f0d16627f1209316410248168e0237637bcf9d10489fdb1b0100249ec5e6ee0212676379af0113b1c5e7f1207a024714a51c64bec60bcfe642b0c22b18b79c1608390d8c930a1612243c3344c8868880190d8cd2851a3c44c0dd728010510af98d8d138b1a18162c3362d2b593871343f1a09b258c344ecb8bb39c1075db46a4a3d1978c337b202f577820fba68899d8d37bf1a25c4fea413b02e80c4aec6eb4fca200c23b1b3f1fa9337bce02576375e7f548c247ec48e3b709a60052e787908dc2507245c3b457c2178f3a36122f6576ac20621b1e38ec7093020a4104410418b71ba1e9e64a1e9fc685898486a473f1acd5170fd24894ac4fad1689adbd78cbce6354c442522973c20db784d89eba512917e4a44b1c72af4b4d493818cd32304f0ebd1a3478f1e59a53b4a66123a619c748cb359e99fad15a5431062c82fac48a1b57b60246435ad7a9ab79500430c2fd1824ac43ae552bbf564ae691cf8ccab3c12f3ed5bbb12b1b31f381e89d97ab49d8f86056bb72f86865d89a8444ca1edc7a2fc686f9aad536e8da1f6a59764d0d55a6badb5d65a11303da3318053f944567aa1be549fe0073ca07d976cc96ea5acb9cd6a9996717da19e396756360f3ae629e504a7fc40c72f058b2d5c4efccc3c459a68c22afe91ae8a34f1c3957651a71262ccb22cebeeac332deb6e26e109ae75f3ced2cc3c74fe40eee0ab779d3dcc1ebefaacdd5d73602267d6923a13b2e034e1a172897977be2b33333333336b5f83ddddddddb4bbbbe9910a048bca75d6b955e95ea094e085ce12b7b2516bad9a6b55f39a39f74634a763966559d69d65dc9e65d676a0b96fee79bcd69ad5aa84b42e418d0d4dd3b46dd336d7506f6463cab4a39db44468527c5883d963a37da4716da76414b02b9ea3805d79f62c3c261cd6984941c17d1d373bd08763ea751fc7b99dab0de4616d0d4dd358d36c359d91e5b42e1634ab9a4f97a71fba99182e7521ecf314579a50afb57e33743c6cf051c16923c85b6f1f645cf63cec94f50ec78f04f18ce85ea2b830e82cf102c5a15cc0a1c890202649660697faed66b61cc771eddc1be96e66e6beacdb3aad6efb03d483b2639b998ef42d731cc71cc731534b43f711f1687f65724e9eb27f5ce03b73179eb3eeacdb82a392259ebb7f4c961411f09c7577b792a13fc2af51d2f0197da6a2cb0e4fbda6a0b8da33155d6e78d9c3aacc997e3bf7c80387555965fbc558af0645fd699031c809fe63bc9f65c926253271d1b5772d6b77edd6ba767777d7ee9d233bcd3c5fa06468c869c16ee62db899ef62ec3af6ce39d0083bf7463a8ebbe71cbbe79765d3f9cb7c76cba9c96c826377c6bd9dabaebb3b88e7a51fde67dd07199773eb3173c565e1388e39aebb53200078825717724f78ba73b71a5852a4555071f2d4bdfbbaa8b73eee3ce58f67e881b60cebaa7438436c50ba06a59429659e2ee8545ca877f4a3e00b944b9d524a29adb5ce1bbaef8766e6cf05695df823df7f2f5170cba0e32d6ccd57ef0a76169f2506af934b5dfe903a4b5cead3b3505ab32c3a118266be8b4c8789cc0875d41b6190f26c1f29cfee91c131c9738351b476f969deccd56957aa3538326ba8cf28a595d2aeb373d0b16fc1b566599665dd19675996f9dca2997da471bd535396187c8172ab4f2f0b777737b3ad37bb6287bba8ce2a70ac8499c70a8e49be3a73917d0878f65ac7249fb99ca091233c05d014402392b7cf53003d3bf7bccab818228c1efcc8ce9f0e131a48a77777777f5c7f3a7ec6e92a7bc7956ba53eb8dc76d373d1500c3c9a655996655996d5aa79966959562b9d5d7400c0e1054a084397ba3da2a37981cdb395143079ea3f9382e27acf566e60e3a95346ea64c4609ccc27133dde48e5e700f3bcb0f35138dff991c17025499058b71cb8814b6450899bffe010ad8f7654f29aeffc887afaa11ec76b9b5b9e91561f3503705fbd561fa902988baf6014e635deebf7001d2c4eb4214a234778cbf83272d10960ff01f91ad801def21ee836daf80c8c3282243c0590c8a08fbf742e4980a700122588843da653a8f78113245c80842b66b78f45fbf95029353c21810f311097c8a012a5ffe01079890c53b4fe83c20f0aa24512040bd291b480240816b60d94167cbd380d13588942060e60b0832a4225395c89010f3c386144041a621016dcc74794564bc7ef838c6bbbbbdb6af2d5f128621e66aecc332928ee74a7cc336be65d05ed0c2b6515954274d2ced5163df287fcec78817f8172d99bb3bc0e13b6e574429932a59486b4bb69b33103d009889820b15c72a9b7fd5a9d716a00ba9a14193c670d4140183b2bdcc87a751dddb80d14d215887938d77c23621ee99a7336f08a6bcd108879368e051c6a3ed6251588cabf207fac407f02c78213ae70adb93ac10a879a6b1bebc57ab14a05c46b3e7241af8d33ae3089559a045542acd27cc816374c7acdb78fe7c52acd790347216abce6e3f69a058524b14af39c185ce923ebf51c850f0e2e95b28d11c20a71571b9d95660ef35ccab8c43ec100fa4c6a37edc9cff45de6555a7b565935d3e6f23bbdcd59e25ea0851906695653cf322f40085d2ee7acce333f09318fce6761f7edcc54e62dcc1590cffc021be0c091c98a99a99ad1fb3143d40c337729776423ef336f8102d6ed6d56bb75eb14c63c366fbd0acd55bffdf19648bbc00c33d7c0166698b1d1053242f68d155ce9fd2365a1639c7126c8884b643ea5dcd14fe78e38249921e6e9f1d361a85cc9c12ef7e260339cde71af667142957bbd8eb89a8fdccb0b6ad606de98d17e0c17f41dd2c6c199e12cf5fc98592633f6f90c8e10a0b4bbbb6bf50674d425056d3f8e276682341854404fbd9bd743cdccbb8c049f20ece3adb020cdb21d648a8b2aa2ee69200e2a6e8c776dcc539bd896a7d6765dd77536b119d2d1e6e8a98d161280309d9d8631871c5debe3c9274a093cf974be59ef34e4caf5b1364645ee33aba47d4df21c3d7b4754e7d6fa4f2b38b481cdd0f3ea419a75c1930fb58159c1ab8e43eab4f3d1e6e4d3f9c9e7a997c0d1bab6655ba6cd520e2191ee6ead3ffe0ec69a760a3a3da13743a727374c9c82e6ea26091b30341f6f8826911e493243da573344419b230d94199a2f56f504915895420aee887211b9f99818ab3a2804ca1ebe422bbc4209cdb05152386c1fc32bdf23897934ef1b22949493936f6f4709cdd569073659a13dd4707d8f3744dfde3d9258d55c08af6fa75fa9c5aad640d38b55eda7a0ef916b7d7b47254f53954fe557905985e38910a649d19d3a3ee5b8ae1c7a067a26f290e2d4ccb007678635b5ca5adbe7373842c06b8ad43c4f530c39ae11aa18a18a1cd70f1f218b4e72f76c8fbb995249794091ee4827cd91e25a3b8d50bab18a66d9fc4eb27400254fc1b1f39e4b610aaedb4e4b4442ef5fa07fa4babecbb2cce767e00881afddf7a54e3a5b33bbae595e4d4c87df7e5131233cbb279b3a47dbb4819ee74dd5b3874077f45efef07c3ca5596bdb578f54d757d7aadb47d9b94a7d959c55a22e46f062042f46f062042f46f00285d85be7aecb716d476f3d85b9d3e30122363946dcadeb5a4a29b98ed68c5a2bad3de514716fb34e6e5d87a859d5adebbc9a95b9751d989116e0c4993c5a2d424e954bfdf4d1c828d5afbf7817c2cdd17783d4291d9defadd7efe6689a60fd0529e9ed8e585de2ee88354b8aae07647ef22e3da0fa0575843a65fdf4e9b83a65bd4eb9a38c110c953b7d24f5f8486295f51c22eeb8c335de1d443b8698a7e4d67724c13c9bef70ed80ed307ae699bf922e451b437584746039985c98ce94c992319a29ebf68aff9431d2119a32463a4253c64846cb64e12475cabaf52e6ac4a9f99c213c87ca2de2a3e563075eed70cdd0eea8e2c3c998b2f2d6532fe6e19c47ab04a11d554a98b2c33557250071c324f6324693036f7e74843e00087120094239ae8b23090558b36e629db27e83821109473e92748602f0ea3e9befb4aa0312c020e188796c7894a1c2d21f75b1aadbbbac9443e5561f56754ffb8d16bcba89cdd0726e9d7975c30587d6c71b2d6fdd47d25b1f6f98bcf59b1fe6e99cfb6460acb27ec385cc156fddfa4d6cae64a8601918381f79b448d0e2ad8f3e92668782e98075a08c0f078e3b28d80d8dbd75afe423e7add7a190b31ef76da51e8b9a5d273b083c57828f262fd01f758474a6f068bde5d19aabd6119aa175f9e9b86668fd0693dbdfa1b4dc51474847480a9930fce9e57aeba7d75bef3a1e2510e550b9d27d5825fd268549c4e66f7e58e5a38cd1cd0ff398dcfa8d11f350b745a38cd15ba7200946acb23e648b3bea08958858659d4b456cde84c42a9ba2e0c8e908bd75012431cf8eb73a436f5d4768ae80bc751d57b3a65b0f7c216495f5223f9e03a39cdc82d6e278e2868f426c26d631cea81267d09052ce09d699346ab5d93257b582748659b53102f2d47f08314f78e505fafa9189aa51b33c05ead3c78ae4638dc100ddd1c6a859ce29ea5682e3bdd349f881d3f10e69dd913e0e77b4316af2d46d8ce66a6a896d399aab0916e11fc306c9868b4d924d171ba3253f4f7dbc69f237404f7dbcc1e1a6f574de3879fabd90812aa0ec8ace366b7698c4838f7462055492c4f9d11c2176538d197e4842c2810e40e2fc1849cc0f5f68212629c168074fe8d0426cb05223a02a5eb082a40c8624a264528e7cb02421ce8fd55081166267bdf9d1273988fd21a13da821c68398a467b0028bbbd1e00617574d80c31a2610938444b4cee83c242926446d8849180685d85f4e152818ca31cad23279fd856b9c1113e7c73968d922e97afd310d88a6387ac922c88a23717e3b476277a37da4e4e00731490723e30c1c56764003212434a6a50826c424a16b680b929d235186293618d5e7e9d58588cbd018aeaff524f4d5c7a9e52bc8b5ba2d0933a8fc6899c0ec0faba6679ff6e23224d4e036c4aae94090346af3a7a066695a666afa16a1315c5c867e6a5d4e44f5a74504e633503302e38755d5eb0864c66d1a95bc6455c7798e0a428961c21473ce392533334f1a60378c5bd5b0565009e34726daae5cedb9880a1744d4c64cafb9099837e6c67351ab07df3d1751b9c18f214c8a986baf6f540e41021869622a413fbd54ea99568719421c0579ea5e0c424ce9969032060e3070a5c04a1555134008030b58194b601125dda0c480047f25ce0ca553a142c4f0f3a7cdc1456a414d09428b20640882074f7d8b8999417a4f8ba44c79ea944eb9312510e329b56d14c180ca536a6915219e9a9e52ea51ebc9e718103f3f2f0f38bc45143fd63c7dcd3c757bb73c2d1272c275dc00a70a8cb525a8c284676d380d51c39d3e2369b80cc3d2e447effbb9c809a137400d0bc6bd671850db3253ecd124f5e078a65d7b5dea3979f3d186f452937ed658a726f5767cb8a3774fa6eb230dd267259f12d3c093252273be36c66469ad4ec59aa5bd9c10e130d4c4b5e4a726f4538bb5b8bca54162158e1b431789792ad1cbebe5ca5ce1f0e92f309a1fe60140112fd077e2850666fcf4ef8c3b7aad24785567e070081c2b0d4cbc0d60fcf47bc43cd5e7d0e6c40b9a2b944f4a3d1d319e140e3da119b6fdbbb9d76a560ca8c574685eeba77b4273e5795278e565319757c547ebe580e91b59a77da8ad435194066b160d9206e3707c5b972d29d6accda853d363f628b6c5b6d7b75dd960db15b22534c3d96a9686a4c53c6c85413f9d06a959da96999a4d83f416d4b22594724450b29fcc678633f319359feece1b9a2cb9844774c5339a2bca452fe0f2d3bd3164500f54fce879b0284b7ef4b4fc3cfa99d1d85c8d5aeb8fe66acc5ada96b9cac0f8b969311b4cf0a337f4d43b8ee8db4903b49e0c72a85c2eea21f6d2e6e757f3327354d19a68f9dac6b3c2244e693e724e7ce56093bbe2ab730dd74895c00c18a09fb565adb552afdfe93b0b43e566d508c85cd1d551a7f904f2d353754a11d528a84b25aa4150aa50bd52afc0687a644c12778cb1304058748c33ee082262d5742aa59412a5e58ef5555f52887caa9d62a72318a00983c364599f7ee3629e9d9fa7d829763a9aabea5c26ab4299525b4b7efa1caaadeac4a5dc53ecb4c56fb3581c6beba7d3ac60dd8248a4a851204d62cd9219c2073d7ca185891e48204e3f25354bc90f59603880cd3003365e202a890284276670050a5e33e020530333acc0c245121a6d88d3b974da428f4eb1194ebf81823bde1b94613183d104bd0601d1cf1f585c396757ca11fd9ccd45c738230c6c655a83c30a03af4c49d587a57311667145cfa8a29f3eea3ca35e210cd14f1298c54398f5821abaf102d384fc60dec53c36cf9276d36eda9436a528a15310ab4e41a522a8a01ae5c5a39c4e413de3a98759a4fb053cb5c02855ee786a31e11bfee2d3e910f3589f5e7f98a74ee7b136791598b5c118cb4f17c2439885c3a7176116caa7fb18b27efac6dd519bc02d8672cd9005bc4255e170facb04d61e607eba48219e4f3751c12c98960b460929c4038f7e76a0d419ef0e18a6a5c573a0eb278c123fbd43b9e68af34155e1155702ee0735c419c1fc34cb44c5cf4f931696a569073f615a39de943457b53543d31abcaa2ca83d6cb0a1666db18669420ad9ba489de93aeedd5043bf75e94caf8e35cb94d42f98b57734258d5beca7941958959c60609856b32e08d3c41d4f36fc8469c294f4d3616ec0424c5ba4cef469daf213a6899f5e2a72faa6284b0d60df3ed41494d00c834a8082e23357a81e389c3e7150f183a3633f9e38a39f6e1a6ad6e90b4e4d2fc33474d201a7a6e3f84e58f8640587d35fbed38def24d4a9e9fd9da0bc9a751a326d91424e3db0cef4792ad281c9f4fa797af2d3479317ad669d7cfa298879a84f14fcb8bd3cb55e3e2b368e3fdd0f4912f154c51378aa49b46a9552848195668e1944e1f39ad3c87035d6dd41f4f661daa391e16615ca0c35e6202e2734438df5d29c488b796c5ea3ef50eec9af9ffcfa3803c47a358b0bca69e2f20c25183403c482754af313cb6805d6cb7fb8231704459b697dad30405f8b582f4e695e9d650366cd2c9923cc92af303f5f9d239242a694af2fd599ad786d07111a7ce525d2c9ca9f602f4f574820bce6a3498dd194f4b2b362e5a5d7a14af4523a47c43ca54e3e8e97d5a51cd2ba9a8749619794cf5c7942fc0bf34b5fa806ab346f304cc2e18e303eaf79ac5933ae4e5de115f784adf08a0b9aa1c63ca6665d1f5947afb18c5e2bf9c8427acdef674f1ff793daac984e55d79c0b9a2b6d66e84f35fc0a8e47aa7b2821e6b1ae398c0ff3a05e73981fe699afb98ce61b10e329e9b5173c20dbf82827ff80fd28d76964b876be07fe58f1e4bad367d7ddb454c4e6ad775b0f65aeb5d6ba39539a7df2bbcca391e172cfde6525e99de69dbeb0cb4c6961d2f49266187699a1e61af205cb68aec61917eb8ab91a8fb4eba3fcb878727965a2707ab160332ee6e1d79c439a68f08a6301174d29579b7677333383b43e8343b25cfbf485fad28fd0d0ebfaea729ae94a7e0e817933b4331ce58f476878869cb99e237a094a507e12a9a4a7d79a4058b064e153ca5abb76eddab56bd39eb4d65a2bfd9105b7776bb6bb4cb3dbb51c5732993c206a5cc9dc7276adddddddadd91723ec3770a06038981c3a62626e8c66a90c9da13494524aa9a6699aa4b5d65aa936e5466b5ab321f080c951734371e837664fbd4b792a6fc7f348e0b90aaa409d9a5f8207e48c6982b7fa7e0609008f67cd001262863ca1d4f3817e06004820000f0032581c117af4e8d1a38708e09742edda33abb5a6727efcf8f1e3470ef8691a9033ee3852effed98903f05c1280cef06b63002522e11380da5022448a1421619ab05aad562b137a88c0eae6201c848370100ec22ce68113c24580a700052c8052ba8066ee05782a78af202a910aa515ea50a7cc18f2a2288ae2cf01780c20404f8fd70022458a7805288001d43880c7020212e0a5f8b6a4033c20670051e34aa9008faab0c20a2bacb0820a9afb484d9f10f0809cd18217815aab04989941afebfa74367d8047bfb185084420021188400b12f02a30010aa8809c01e48c1054336ab7052ce0820b2eb8e082054650510c60200319e83400c48c2b9d6a806a40670495bb8005cbd9776b5ab3cc6e9652a64c993265cacd53b2e98d506f396ed9c9d3368ee3386ed3b2eb7557a2266aa2266aa2265a2a11d1b26a5f4a2bc4740aa419ed2ca355dec0819a2b6aad73be8916fc0932773aa46e3feefb2746b4dee5f0b68db30e639dfe58d1fa662dc5c211494a5b94528d524abf0a663a6817826a469513497bd1ae792d734e161cd14c47d3dda51ef6cacc943fb0c5b8d241da0d96c1cec9d94dbb67d8dd1dd34dad6dcdab9f51205caa0fab2868e90bd2954edbdac9f285cb957e3d2b39efa58c2bdd32b775a651c997acd45a6badb5d65a6b7796bb3a6074d0d4780822f4a03bc227db139b9a191a1990524a694aab94db3aee9362f764a336630ead4c4c8e940feb837934ee9c1f947e93c39a7d0d41f643552bf51c480e53eac9ba36737377edda2370dc93fbc574ea094c49470db7db874ea370bcdcb82a4a29a53b955270460757faa9baf452a9a79abc1d2036dceaa59eaa03882bf5349054c775315026a5946627fba2bde4a0f1fae7ed77373b3ad93a9c2b40a752e814510b2b68198c4c0e8799f166719e143dc9c9d2ce0e8b72a333d4321c352889e3bbf1f272abfc4a1b8707ad5466ded5db478e35c8c3b3f90cac40b3d6be51eaa1b49b230a82f66d56e74c3fcbdc177345b8e106d8a32fce4b8fcba3863f841e9dabcea4a9d453c1192e6e0f4a5dfe74a129f44aa51e1d385cea92eaa0e1b677fd4180a55deaebb8ad33d5584d968e71c6eaf3cc221daa3f4c5d6348d107b65d31e4ea82302464cfb831cf4543405a0b6e0e20d8c08b8ec9353d172161a459416206760748c040878b7a2e4242051c106d807161c2d8620b258e80b98e4862872380c8c0384287ccc9c5f15c74c4924e8c7bb95432ae7d2e32628cce05b7f45c64840e342af7c673911137c8811156b0184164c4901136643db0f7de1c28239ac480030b239822237c9ac4d29801898b148838786169226ad1bac10c444e34c91273d93054840f3a9c004b4cc472748ba061862d0ba1ae081f1aac518c438306cdb555e9a2864c8c21d92ab118aa988323adcaab45c52cb22a47dcd0e2164755889f69aff5aea88356536b9f6819430b975ba575029798c55e15aa00e1f8f5acbd3145447cf1a3fb0b381ddcfb5c4404161e8820b269dc1dcf4544f4e099e0fa731111307044dc1b2eb836ae8c14414324b163c310446871753c170dc182ad074334e9ceb8f4b968881f1586f0b19495986c8b5c47fc18e38396dd5b4f197de6849e3d68862f69f02422050214000819e4e08b2cd080e1480b9e365cd0440d39b842863462d8a6a8a184ed872b5903907c389ab28216b011849c2eac9802450d28d600c2a77e91a381f044f6c4142fca6510a00009f05cad1b92882f72c1e0678cc7cc3c175109c206836e1cf2baa3fdf9cc76d2c8ef97208d01e4d84a5ec97743b2dc21b03bbd93cdd3346ae01b92e54a1f02bbd2896e76338700c495d3c648f6660bcf3f70103ebba4dded99a0c595ce3304b06720687877775b1eba2e478a2b5d0577f29c73fa4b1a5752da26dce04a6ffb7c93c69573ce59ade8184747c64c293fa6593b3b26fca01b9cad622f88be41d4a51ed74a6be83b9d9a1ed312fc827065f873e5e379c80e778c89a999ac12666abaf48aee0e2a9b2b9dac66b0271de38ca8a09fb5bd93ddcc154afd82b652cfe438c9314fdbc93ffce33f404ceb4fc900520c7a5de923d77232c3597fb85ca9488d2ca9405f72ad4ecd66b110d70adaf1dc0aaeb492a7694c32e7e6d51a264fad419e5a41567ebae9c53cd54f66ecf0d3bd3126eb25a84b2de669fac281a8c9506989abcbcf17218fcb0bac9bb361681f56bdc61812aa15a4aee999cdbf04356b5e3153d3b5086d718d31bdcb4b46c109ab5a8eebda52119b37bd58557d4a219bb353aec595c36655e65b8fe0a964959669e0c8b588ecf86d8855d54d68a27aad2733bed6f6fad2307cf579c5649d82ba7d98877a98e2a8e44cb7353d0c19aa190120002000a315002028181209c52281280ba34cd56a0f1400116d86487654341947a21c866114c4400c820c21c0180280310620a454d1d80093af87d57008e107d0f382eae4915aff97e6c010ff19c4bca31e926f67c14a71aa581f0fdec3c384c0a429db9435c7e0eea58c0612b544439cac7356348e7d685eeb58813a6dc52eab77e3168d28f46b2a33a886b6d8c369c6d8cd12a41f546baefea52768f8167673d449d7143c3c8dd076354a33ef0ccf465dd5ad3d965f9f214e97c9e9dada26562ed6b237a60a33853167900c8a94e3a141d803c2c08b9528c6dcf56cb870432db74c442cdb9652d13de599880b539508fef38f34ed9bfacf37f5d27d2fbc81d59bd89784a8eaef3706cc1fc63fe90719ff582931f9f663bf21873710bd3a855cfbb93ad0bcd0e1cb5f4bcaeaff1d52ead31cba5e41d6709eb0865c05a848147e96e962c5e89bd67c2d3c07e416c9d7907396ecc37fcf9230f82112393b9a53363e4b608113ef2ef61f0551a7e167d4505da9edf1e5a684989ec797b2725ea3b54454e64911996dd8fddb78edbb2941fd2b9740d5b3374dee34f1c53c55b7575621bd9d9bc44138a4d7f695e11ce30c3cb073a169b9a4aa2da0d0ae844c81d281ad5982aaa508f815424e91c55b217a4d4fa8dbe5004bed959a3752efe50a5f41b38fbba57491fc2af4701f3a05d08914f3a8da5ea9cae9111f353ab850b0530f2c2f0c1b0354bddcac308cfb7d38178c5bbdb3c4a54b7271091620719333a1241d33170adbc45eca1058b6d1b7e9e89df4eee2cab85d4653a9b052f82a3caa2afd3f283a30ad6f651bc87f75b0ad2025f4a252dde964573d08629ed56bd4ffce29a0c7eb2a0e8c798184daa538ac1e4a020a19e3905091a00870132078f4f78e8d1396984968950ae4349e2ec0cad9e2623f58de8e705a84a04ec11ed69181b30ca0dfda17211cdf0480b176423f38b9bc5b71589c3294a89ea21b157a27ce450c8fd78366d95f6cc83fcc975dca8a99012b70becc1119a3d7186b7ade561604251dadf57aae54e633109dec715da3fc89afb81b4db292851c403a85cc85e59e68d41d5f4c13e13e5fefbc9d1f9139262bff219cf5df41c134b0bb7f8a25989bea18420e19e801cbdd483a747f9d5de180459c8988248c69d1b86a37611376dd2fd5a82766a5f3a2a2496892b6412ce7c9e437843c132ef3e7ba8d827c03bc54fe366448d37f8a9a6a3c178e5fb41e8bfad9841d76ca5213e128150c9fe7829c3f5d018b22f4eda8f19dcde6ba443c878b739fb9c636330594e765658efa24974a0bd812842e8cc387a2b84f98d5eea8e80565e8a2a848088bddfbb9e1ba7e248fcdef89f1d8f43ff913cb258ac247087244065c053125a4acd62c0f66511fb38c48a348d16f6fac7a4425bb5f57e05c9f9dcdd4c19890e0e45f88e09bea42046b705e27b1d3ed108ab697d6824452385cac3164b121638ac187566dd6d963e5775bc022bec77f442b376d6ba0d7ce5d447e439853320957734dfcd3e3b617fa12d759eff61675c562014e48a3ae0584f5ffbfffffa3800f03683455428c27ce68f6f74cb2a26a1e78d021b9eddff676442ad1bf58573567ce920248a863a9fbac1decd72cd0e19f96ee91ff63ee3e9fbb6a31dcbea6582fda9b0e74d608577d28162998567733c1e8f05abf1f7b4397f7f0dd78d8de3e251bb38ffb45c041b35f1c17042714e3e58d3e3f5057e475679eb9db52d312bb8517c661c349fbdbf875bed931ac4f3e13d45f1861a7f51c82acb4d790fb8b086417c95f08724c26e1f9c8c0900505ac1d6053d9483ec5266a5d08bf5b5e31abe97473ed65dc7f5e544d64caecbf324b328e004022cfae956db54c9d4cc9c4bb88e508d9fc08798667c2cf81173582465b85c9eecd3dd78d88694dab70191c243c688955a14559cc0bc0a98980150496796e5034984b4dbf27d70da916810652d2b4d5773308f1ffafd12ba2f702f0c08579aab66ae5fb9bbe2411484f5c889f542205d7034a442d10a80bdc45cd9827ecc90d2666b645c5522f7a5e6ffb1185bffd98c26f4fa47254e5b3f6e73c8791828db59edbafe948b62d96e047365eff035c38aceb228c44c03f08c14b289d3c4bf0f3870d744f2e0fe5929c94119143b2f00d91d96f7024bebbc4706fa8f776f4b0e4e0a3439211bcc0bf0f5ee0dba3784a02ad56e9b63b234bc95ef293ad38f0b4be0d5557ab92bfcda7584424cdfb3fb744ab5a32a68c3c8123d903fbf5ff1ea750bd147043741d1fcd8a47c821c6707650392b0fcd35a84df178cc7b20bbe906ea65f076748afa2bf181f8cf82c06dc4fa1f49050cd715d25f1a4892a222609fa81a44237f8a5f2b4a25dc33325452e39766b82e3ae49a8eace19608e1bac4a3cf33e996a277d553e2f6136549182aeb566a4b74a4d2fe85b87b54bc1ab07e9515b437696c63f30f0ce82e198eb91655a3f7277ddcf04ae9ab07926dca85097e4a7aa0fe1756f55ad8985681080a05e79d887c4c5bb609e58367968037b0a8cd9abb4cf118785c35a2b6221749ab1e5e4db9c173fbf86d457f1ea0a93071fac4245603e6d247ee45efe738e8681718d05c409f774d73cf4cb3cecb94b4d45c0cbc0561a2b9c8cb07852e6c0ca97617539d3e6a022ef0b5f26b50d0f1b0e4b7a7a257f25e035e8161b555ec837e9614b37a90d6f917de20d336dbada1941d6cfc77963970395e7eb58397afc2b17dddc72f806d46ea3a63f853f441294c9f51a2bab0f0fddafd486b2a7efd50c729ca254b72b9287a7cbedda89461754223ab9483d44aed23a55402cbacc6aeb72e47008c2a4af8f2a89b9eb2ba38b32d90d32ef2950aba337a90d59ed995316b732c0152d80c2e62fdeffc84213115b157b3cd2e477fc1e6f1e4ed1ad8a78f9c50e50ad00d334beb77d3634df39fc58153ba26d106a972e60b4c99cdeaa75ff5c15f69db2e2c6c4c248bec2906d9110c914d61ca3db0003e66c47693ab7ce01a2cd304200038695ef495ca0316ea2f7c6916944d961c7863c5b7c342ad5c8089b5a6b472039b0298e3ca3e181820ff43885a31b5636a93fb35ab62b91efb4deb14aad3229750e1c4c4cb1a106056fdafaabb9624b707e596cf82f2e79f50972757258a3c6f6c18793ef332b2195cf4a3a394fec721dd709782516283a25c29a1001e36349d99593205e557589ea1fab0cd896c078e3a55e46aaca94f5e5accab943fe0faed6fd5e0d29aff3cc6a2dafb23dad48e724ccb4ca404436733d3fcb4d3c2c8dbea786615eaa6937ab03e31345ff4355cb46061415196eb1c0b93035632baf9e0bf49fae8547636f6b3e14d71ef55992819b03de9478d5f872a0c91e37b1931fc4fe756a0558394e8f2a5ba3167e6aa0ee872bd97c6a720db711a1e302b136577778c20bdfed633ca331a97360d7da986b3df3242d44e077e72608e55c6a5b251310f8e99d5bf667eb285f9c10c496db2bc1cb81e5a818f6b8b31feefe30ab7effb78443b6a5b5709fe4e940b8eb4e7b3466e9b42b7b207d17302fb42fc754ca3be3e709b5ef5945ca1b3c5c5e9f5ed8a30e567003dd518b5bf3ea8bee48fd9995956e6f500eddbe61ed0442442d3bc11e14d8c4bbd0ac071afd93d7267b9b41ed8fbc4cd3fcb5a9fb178e1548f03b2c221930fff2bb6503eb05a38446e6b3c968d49ac8f056da7624be82c8a013ba0bbe0eed0aef462e5080705637b51b8abe91a7691bd960d718622401948b9a300728ae56c4fbd92b36bf025725afc0be098b5c20ea89b1cd810fe5d8ab96df77723b4b26c533c65b0cb227068a01806e6fde1e3ca4f75d99a3341809ee3a956f219a1c07da907cbbfdcfb22d56e253acd1d79641e0bd642c1910feab51016da748f9df89f75ab1d6245db7b24271860015b3381a10c26c896e1c4a4ede7157de275194bab03785216f177b7c1ee651545358a4d8199025eae1a65a9c0d9b0f25cd5ad5c2ff5d1479c7008a901770e17833ed58a8d929d5372ca73aab2de538a5c0eab97e71f9ab3536ee35f4b440da85cd85f44bd5690a16d2b930a11d0888f8ce5344f51cbac912696bee2e563e3ca5d15f1f49ce45ffeaeaccf6d0360bcadc0b8e7f68e4d48105f6d9042f97c4cd9cd18db009557e80795ac18da3804a01331aa408f560113e38c0bc7da84ff7459e0fe50764b4a949c698c1b19bbc9d4e43887d367eeb51922345663abebcdfcc16a697c9e1498bbe1f6d6bce3bbe7b9f4354114f3bdcbab827f413078bfad1b9eec1ef26e64d170e7212cdb53e6b51fd47a52558ece7d785c1625e07bd5aa23865f86d793e1bb5ed69d51a770c560c5c03f6860b485b587d2c4b6def9275c9b03f8d3f99241a5bf5e947db8d10bf1a87229f2f60f5b2fec79709b433912b52d41df36667e75d0916261de4ce0cb7f1bad8fc793c8ed7829990e0bb0aa0bcf82e2c4c482355aea434c8e50b124981c595a2baa803a81041731b7ca92f423d45e7eee63c70adc163d0bda203e8e4aa0f2bc0e0abab805bb5a4eadf4fed43434cb7656aa6a2244cd671d25fc0b690947b64b51262d0318f48b0fd7157d5b05d0ea575fae153ef8fea5702cc65cccf5e5e603cbc443121ce795201693c5ab7ac2fa7af989469b30034888970a6ed36d250dc4e7c60d6bd8c23961c679c808bfb6a28a97d06919ddcae5f2e52c675baedcf2661996556d2e2e719c652c2d572c3927657507d7cb0f2bc84bcf254b9683e5f7d29f7764157251f9cf68856cf0e1e315af9e816b3cd9d1ec93a85dcb89ab031051ff211c74173f147750d9a93c42536a8ac35ed0cfac68fc6bc957d0b27ec8acf2591e7025fe23bdea21b964ede69fa67a75cf7bcf74acfce48fe1fd5c9ddaaaa31e2f9473eefe3451df6c4427b4c47c44ddb1974639ccad26c54b5e44fc119fae1f04dd3ebb018a67a13d99ad03466ab5af82100de747da4de1ca8ed86e92d656f01118bcb3b64eab3fa5882786985c5312052348b0719c29a908cf50cb6bc084359eda5246733dc7ff34bcb80ccaf2ede8a3a501423301f85253d96ed290b514c32da8e95e763f6f8f4596e26ba08e133da19f468b934cd38bba0ecd178f9d57328b75fe6899d7478f4a1b1ef12dd639ee8da5970cdd3d5b9a3db26fcd0a618f964baac90f876ad838915d21dc4a8b7e2187f93b6f7ee756cbbba6e65c0a773b17a5d05a1a0eb0627e32254d29f6bcc2137bc8171f9aba6bf0c14c252552bbf169d52aa29b1452d801c2fbc2737ef7a0c6eea75c73edbbc76025b7c2e5b173d55cf8a4417d3a9485adb282a77bf9c8657f7f42c8e9f73d3f1fe20da6816feb48feb290b9df8b728d4a10d454c8ebf50d647a640ba3d614d2bdfb4fec046f6ec623a93ed849e635362d23514d184a7042b5ae45e9de1c39c5f50f2b5f7e25e8743f1892b2126e28afaac9f6d265c4db114c9c8d6c04aed9ff2709034fd2815f0ecb1abb84a41d19bc93fdf1950379242a7cd6b32ab257e905210dad65fa89fb9508e3a51345856a794faad129447f9e738915f4b3508876e08957c7a0c56c2c92d22b45b928ff5f341fb353d967ae34bc010f8771f2e897ae13d447a82139b05e16049d1a50387e47204f40864c469f5033b1c9b8f4f81f2968830f58baa951c75570e430796d53713a8932b554291a3a9ad64425e25ca1f8a3d59298a840481533b4f46154812ec033082cd6b2b4bd2d05db61829d22ed983eb1ed18739b25929be7f820cccab4288f7ac046bc41dacd5944a03be4a60c08e2b500dab500ac085dd440e37d92c67044c715947ed2144ce6844358a4578732bcceb83a89b4581848b5e584c6a7de3c6946595e5835b310cbf2d1147d1d622e8e37a479297c6822702f8964949bf103d1abc2b347c78aba0616a0731fbbd44d6343766a8ba9bd20ee53e07c9987a9069e37367c45d68f726a3aae0ff94d13ad89154eb43c63137062249b74e98ddb1587b8021e5d8b18083845ac80eb6afa7d3419055caecfedfd4f96cc2b9ffc23330dab1270546a58090044f4e63a1450d82d81688965654d6c296f0db1f3272bfadc75b36a055efe0469fc99d852602df8042c0b1816e8afd64c2c09e82612075f0b8e9c2ac39d391e1a099c548696650ca3e465208e45b38ac3aa79d166193780ea3ea9a90c7b256996d81d827c400ebf05cb56bdb1f7b7ea5ad4a2a61979ca407c76eb012493bf104157f5e6ce125583c66e4cca58caa7a9bc084aeaaf417d8775c7110509bf469a4891cc7177a3669c692c90ae716c77e6473a5b16a7fe8485db3cffc4f45f2031a03b7a723330f7d56fdf760a75d8f8507dd954254ebf14aaab364ab5caa1ba4a300294a58cfb48b6e488dec4b295f10e622669be43cdd89bfaec4a30424262f5de21e40d5c73d5d3d3755335e26078612253bc59f7d5e9d8738bcb23c349aeaf52d1efc5602968c26e4b181c0e15fb66203d7b966496c182794e76d181169b0fb740621c2bcc7b34b32d9d38c642938420891de4fa02314bc9f50e68ed05fc51992d2598df12cc0326cffea6f054192d9b923c03812758f54a258fbfd913580442d51979ecca682ff66cde115f6af5cccaafaad16e60140e4a5aba538962064a0806d4be62a2efa6fb5e78815374bfe131a98d81c0376bc67a52f58f37274672d6f03e858ed766af871e6a5ce3d6991d036aca7e2edc38ea8b2d84d807c8bddc048c0ada0b20802ffb3bd3f7d9da93d736e879b8e9b1ee34a065987d6736c76c1c5e63a4351857c337edac5d9861cda44222be6a1ee827baaa102293cbc24ed65bab420101f144949671b9cbfabc79c9a732cdf9f7238a3b8c413e292b01996e802f86bcf2a2fe870b4f5d59ed865f9fde89549196ca71f7ad1101340e9db7e7bab16ee97916f49d68024eaa5e0f43af918d8a744c6aead0154704482b458f12f7374eef7a2e822f12992a55217455ec502b11fb67c8738fba50a5bc8590b1bd12aa0062edaf8ae823a56ab95345450528e2fe8dcb147669c98ca29b663bb857827737f000f7bf5b4e516644627fbfba5a13a2c30c3a509a005ce46de317c9c92027f7be5e05eaa3e3671c2d9f21183828492223fe0c08215f571c1af54d33d4f1a51b424a8c5a96ba0c384687605736b2dcca7e8bd6b79fd1761c1e6e42f9a0bee9370eb44304266ddad72412e86916cd08a2aca8ce49f00b6523acd653e36fe482dcd325ce1fd5f8ea916d8a5ee8de2fe7328599eeeffc443c8c83f653c81c59561779cca6403c03f092dedf6e6805a44a0eb1715fea52097ef096f00897447a1e68382c0208ba429691e252a87c99754c4879f15834fc614b23a3d12847102f3e6429fc3ef642c923962d3441eb08c9d770e5811fdb0705e2e409fbbca37ae35ace3efbda3bcaa8761b5d31c06c8c24fcd49e177797d2442f06efd8e77fc521d2356bd545f49b2bc8a561ec7d2ccb6a161c2c21b5a5409a647c23327fbbe7124a4278f316df0a5907cd350a3b91066f4b0d11bfa585f973c26b94fa36739c40033381161bb5f475ec0cd64c43a45f57cefd478a46d7e44b558f12228ebd6a0623a48bb8fc61a5dbd4610c9f816277f2110a1a7d8dd0456dee588680cb024595e9fd0fd7da1879f15bae4ec48fa0f32da853998e5a6c88a2e09077709a3e71c6539e804c57a69391ed2de97b480c86f6234039711b3dbb269191aa312be1370b148758cb52473c69e586ec27fb1aff74fb539fceaee9e18ccde909075b6429aab126bf9839a4acf7b143f58372e90e744f1bf8b313f87b9c4d4944ff07174a30afa84145a7b5cf50014fd1a982dda77c4227f0b788ade3f9ff955f1e92d98d2dac36941347b335fb711bdbcefbe22f91d7a499ae5a7502d533c3d3af0c25cd73ac21abd21bcf6d216ba630c5705432b70724cc43c588faadfe5dec5d8e35d035181cac395dd4d286f2c365f4270724ac63578ee8ed50c8d4ffa3c9ac993958d2d14e115bef45570cca231e4ed2c5c6c044b7b32181d18847dba60486f5bb5c8f6051cb4701c3d0b04c5238bbf2f065ede9612c60900af14c2c8d1058d0ba40cf92accf1271295f964a0c9a9b88be24ab25f42bcc72cbfc6191c25e0cfef73e544ea21efa5b3819c5456409ca6b911101b30f5246a87e3a1a02cd4d6f50b9276503e756b1330709828c635da8662b38e1fa3bbab7a2b220b7fd116b6d45700b0ed704cd61b455246d4b855bf43fe4782620bc85a4581bc6bb2ce8c54112adc067b04519e3b4d0940ea99c532b216f0f7e33ba95dd6806cc1a9160c951b8de42d064172cb8563be3bd4e815a5809c508e2c01f3440594f74dc6fb99f1143691365ffae2b4e22b641c1253064abcb7191fc65ace105699db7a616bd101a986fd71e5c345064dbb83e1213f95c01c21d48dd21f39ce70215e3cb02f1040f5d47d9354ad84dddf665394b9ea478e20ed9051e428fe0aac5ada34b27a5114266267dae7f8595e7b234690998317919050037a42540b52bc3e057b24dc9eac6b5531915d536c85bd478d61606c9119e660a6a01e982231d8e70e6997939d33ee33fb26e1db1688aa7f6399dda43d72064f0dc368e0b0069186ab479fbb1727b7109a355decfdbc5f34dea8fab9f8cfd79431b20f05fde0672fb1d1a1a55ad0d5fa991e3ac145afc5d7717668424713b577fbc288e97e382769ab6ea0aa738b5f3ce971023c005d96d988e869e8733b0ab6014b419aeec4ea40484e32e4d9f95c94bdc9a53d38ddc4acb8aaf4cd9f25efc4f66444fc296d82649df3967b21692ee2b3f4dcfba6ac864348d8068d65bb8a1656f96e065fae246de75c536e76fd25ffa80e794b15a94905a54d63efd71372d5fb554d5f75130025c169c2475f24909a37206bb72b6ee9809a3561020783c894749e4602bf163fd98c5a8e1599dc2fed9c27117cf0ce7d5ea7cafd3167e93d3b90f3b2ed6a875c9e6e0c6abe7d42f4398fea3e808c3b7174033a238c83965a581557319767eb5ff6898d3c6da8090192cbbcb2b13783ea16422d64db54c18d75610b65d3b62fa32d81277d4cdfffced6303224e50422cc0613c6ad73e39c1e13890278897a9fc662488a9962ffebba368b2f6c3d46958bcb63a6c2d89e5d8ddb85a6c98666f9a092396f1ad16543cce5e90d0c69a8bd517c95adebf7a7119a3c0d468ca28e254baa104634cf2f9ff63c64078a740ad38ccb0ddce88cd530faa262b7727499eb1fa00a2b2d54f1840c8d13b31a0efcb302c12c426a1d63d151fbdf32fc81f577ded8f534bf8af537ebc2bbdc824c3ad0b54bfca6ea53edc1a41b08ac8a7ab3417d5ae64757d3198f065d7236006caf6b477f48dc18455abcaaf39bcb2a217ec0c0b322a178e09741a07bdf5e94a3cb0fed4c557cc3ae4c8d457d258182371d0528558d42ecd45bce68aadaf8636e38db64b2d4262995e12c1f91189301f94d7c02c5da82d0e3aee2199916bac3cec3920524ded2eacaf045511c74034ba5724f93f57d00ef78d384fc08cf8e60c9cbc78b4d6a781f5dcb51620420cbe220991257664b029181c003eb9d89a88eb24c458b5d53542ab180176c69a2cec81fc0b1aa3577e9b67d461113d7190c6ea8ba6d44799cd741eb46b43a8a21b38d8395ec154e9277ed1fb49c36f5b61cefd8365840866a21f30bbe8cd703c41ffa31418981dd4a9aab220703d8b5de65290ce091b8a492c6c1d29c68552b58a15df58b37fe7a27648146c45d10e276c9cad63f5d22d98cb352c470e8efcb858db881be27154be0e4dd033c638d1cc49541deb6b90e5d878de62c58fada187452029f7bf314b3cc7aa8997aee0a326e60cf05c4489d40475d154c403c2f3924b2a85fb9306fe0917b0cfdc1aae13763671197dbdaae78bf335aea8643549df88114b2e2a9c64c2f0e58c92b77eb52d399562977615c4823fe17c33dbe9d09f62bd2f3faae9ddad315e104c5e6312d07bcffe792d866e2b5cc9bd7773b849776fb5e79df2f102a48c4579a0b64420f42aa61024782873cd1087b5f927c301fb06cd9d844b44dfde456667534d2e7a9b1893eb9d020ea34ec99d2ae9c4253e02ed221ccc084159635011ff1e9549ed5662163e43a9e15ebadb0b38fa2161a7ec29fb12568e763a0ad11abc0a8c6c3f41761bf2523513114b0390f8c17a4379c26bc66cf1afdfade28c5e47ae53e36871a57998278771fe257f86643107b93090834ff516af5ec7b49c2b2ef391e0906ff0c8567f4c8eb082d741a3e9f4dade60c97e25c14d17e24ab234d046217af976dd85ae0c801db0c79ae2bd879ea91ba10bce8b456a6c15f38dbe2b4bcb500bd0b5360a4cae179a71fe6aac4b67410dae6b2d65240f4fb5aafdb43888162d5e99ad03e84344b11c4e6b3e4cc20c12810128bbfa01b1304a67e8fd97937f4b6a246c190c9e2ddfc036756b91c91ddb02ce3f04b4045281dad8c70474a220d41a6b30dbc5628564e7497d6dd6b1eb67be7582a3c494a5a26369a6fd1ef05fa0b4b0208567e0eab5203551bf26b4da7daaf62e64f41bed47ead3f59441698f23d23cb67f0deb3c2ee0498fc242adb4dfd3509f0cc4a31484c239c724ff416194a5372a1b0014a96443476c623f0acf8cf7a1d5d7cb8f4e39433d85000a4ea46e9125bc8fd8b01ef1dec581680c36c0e3e867503847626372e8f465febb14b92357b4f8a0e2c71ec372305464dc80318c7e91422e95923182c9aaf70a85db149dfa605184de1d14a1cd5ae171eabd8f3204c5c29e5645701b5683e5615186aabcfa838894c4688898cd2207a88888349ba2e5315fb679ec933461c60fede983cc09a877ede71ad5f54353257b9a1bece7b568be2b2d9adddc2ab2bd1645912c7b6d15e7acaa3d0e762f21abb72ad02c2f02c9141ec32fde3f0ab813e68ebc1424254860c3226d0b88e8c959b8d73202da45f5903981fa758a6e51f70aee60314ec5453ffa682042ee229c88196a3bce40f90fa43ef301c3d9334b319e84a95122d109647b273c6bd3e235e305c400e497b8cc7635a779a2109300e478d3aeef1b45aac2e8901458494728276c1de93b440fe65bfa7cdb3a28a0e2a6b8d7481b5ab3a1745a8db60cdb224395be565738d500660e74a3872f7f0f9b1dd3092339d581cd92118dc0a55b9ac117cedc0d2006c0c44aaacb7e684587df5797192b3598a0b36cc0142469a4f0f70564e3c75155fb885fcddb09202283bca17e72a019f9f2b1b1ac4a2ceab20901b3764afeeef4f1ac6c8ce0af7c97c01548a64ccf3aa1bb0c903ce8ebb44d9a8dd30cef6c79782a82c98478c730828cdb3fe92ad701948899b925cf83b4c4cb381ca30e3819a93bb492241c1384915572fa07e24eef8d65d5a8d5314d415523d219c664c52cdc31f6720f1c48515916e0b2c9239ad3b3c27bec5a3b6fdbffe3c8dc0da90705860854a3e2b59dc5ad3621217054e5d236c726a785e73cd9179d63fd0c47327772164f0cf80f60363c816898f23f281b279059e663aa152a16ab51a5a429a621205b0a7f90aa3c4e2dff1b054fcd93af4b8e249a609de1c5176a785b12d101370615af57a58d742b1d49efc6b09e1ee535252db619cc049ed2adbd9211f379bb06d52cfdc40f4764d139f53c5b65d6436d13d73b481569838e3bd1b44bcb8002864fbe7e1c11db33347afc142d3373bb741d31b6be36e82767afe8585459e618f49a31be56d119939b349020f47c747fc23821e651dfce5e7c9d2b0fba382f9b273a6474249d316b835cea4bd8084f6c2890f2346693326cd5aeffb02485c964d561b07df870c731f18a7f8cc53de964f334b2ebf2d8558a0114d0932c1b06d02f216fd2998dd154c2ac4654e26c0ac7116906ce3b5c5e53aeb3a56a465e500fa852b5ad7065084903fefcff76dec3b670e6df6c8fd273f8c3b8b33606fe52ab7ce0928f7b4d20297d2cde01a6463baff446ec22899386293809d16423231a78ab20dc5c34fd39eacea7c80f3bd66fcfc4f951914966fe3e787fcb2470d05a9b0d50dff8bb98c238f48efb417c47fdd33694429a92b721d2f9466975d14927c1f57f74431dd6ecb2de10db5c2db6756d731ecb4d53a710e095ad630f1106dc2aa109f6aa146bb4286ff1dd3df10aaae9103191a8616f39fc25e8bca8dc3a6060eeef8775c86342fc496e18be385e93a0dbabd9d6eea04f8704c682f204629c8eaf84bba02c6f845bd789c2ceb307c4cef93f18b52c053ccfe0f91a580d1862a9fd07ff5691a63220e8da4d8606bc6717ca9e9db46ec3e067fa342f5d6bea8d1fa70ee09af5e344ae82e743af0feb55060fb58c14175c2fb92ac3e5672d354c270da1a1c179c816bd1b9f1369308f5550419e1086f8e85251081a530153117cf094364e74d26321a9a35505c060b7ccadef3be13a10680c78945b97db88626b5039df99aeea0b19e9e73fb8970e2cf7dbf3d6516f18fe2e783c20f5390b9ae00683926c639c41be4d3a0ae23cb2bf026433639a400413ffbd128c2d2ae4881bbb83679dd935f09f95d2ca387f8369812dd100c839ea189fa6b0acc711cf57029ad7914cba159fa8d426d646cd86d6aebd8f63a4f9fbffb1291f73b55c3dbfeddcde8e669349d9fa884cd11cea5ba24122ea0efebf119fcd8e60fa5104cc03ba2204a73e3dfa0cdc1e75ae158f5a1a1f1222ae3f8d753b3c82c8902d7a31eea7d665cd300582237895836231d39c50681366aed62e1bf656662d715cf5ede9a9912ac1c70d6e048dc41bbc647736028d784e303c62d008ec8870ac588b865843a2ec83b430a2e13e16bedad4c8d7cfeef7f6111366d6c3b086223b782c8347adc1f5851a24b2346ba1e6e98cf8918d437f196d780d02fa26b4b9ae7ccaae7d607cce4733427f89b7a0adc271957924690293090595b9c0011b8270bfa65e14f6c386cb58f04f35f81c2098151dac6c384c65dab68e4a444306559e99d72756b236d7903378c8bd92b7e24046186ec47a336dd5abfe99207daac89827782530be56522034405a06ae06234be6be05bb4ffa7cc921b916d39f06703579af9e78b0a07a5e112572e075694abeb3fd330fa810ded3514f6f1f9f0d59132a0bd03b3750d14172434b3905e67415eacd2ffa6cff6db74a381f737066738a3884c8aaf0100a6d38272e7367c8335723d23a61bd9414ab2699fdfd495b72d90bfdabe8661971f1b1c2bf1633f5170a195ed97a8066e2505405d50e2385245a1aa2cd34ebe9516da4bf134dcaaa41e17886584e8768fc7e3125ed62324602ef989eec3454811c886802d2eb1948d406c6fb47235b9bf03418a48ad073d368302b87a2bb6929a795d9aaf400751f9d190d86acc35ab72e68bed12087d4f1d472f995299139061400924bfdb21142c059f76070764a7fe312c13d98dda8a32e5bf4148bdd4d9d2bbcfd731a6764b17b881ee87be5b7f6275eeaa1cdef5d01557416f6585b87522958b5c1c063b009cba5f0608382d2276262d735785d0d1831dc6f290311e30a6ccd8b921fd8a7001f4606610077030dd8c5f6aa23f89aad5c055e47df0077edca3847fbf5c6e79fc48956431481098dea626348e703da8c4cbb45b9cc41b6057ad3522b1ea43f74a7bf3ff47b9fb0a752b4690b046b7889728487ca631c930c4296e90412163d8540d92e3078db65f59195045d36527a553f3d7aa7b3e70945c0e5bada8036f50eb490ff6782cb3df6ca0b3410443a50bcc3a4e733daab956102fa0d7fdd2053ed44c16f0fcfd84228ea6bd5bd6b5765e00659f5f75211582779ad3498649a7af18b0a49a83386af756a764948451c0ddaee01a3af87535985290d90540f35fd6a4c261b437c48588ce0a12691fef668b4cd186a61ad4310bec962542446647e622bce9895a98c93388e51514fbd8d77dce51892a181e08172507703c356f075c70fe8cef8e0cd768a53acef6c5ceb0d7700cedb52be9ede9e6407ee0484a2dddbb7ff7955c763363f0cb63682f68e039d926d93d61cc4c3a142bb032445e3bed8045846ac4313c476663c90a92d2d7304732b8054c9d74d93f9b4fd31ea18a5b0f3c7ede5f999fd41d863b3beded17ac151d28e9b42e48acbc3f7fc36e2e595bce762bc69481bfa3c63240fc1ac8ae2a79e2bc0e6c1a6a8efe9a97c3986aff71f91bdc824a8dfec9e4acbacb00cc40136bd7f88a484f845d2d0c8173636a697b1011a95827dd57a10b0d4cdef2b85cbe80a3540ebccaf2b133c2660fbab6256b4d5d936e84bbce24e9808246866ba906394eb84151a8a183257747a9cb084a36a557c4e88fb8c70adff7dd24190f50f1235625d8b456ba8bd131a561bca53f22d22b494816ad59a26db4b7cd1228b6381317b3c7c596766887eb1c3c2c6e5b943dd1d6251916275b3a935514de466a2bb65d33b8f9994e025b58aebba8984be1b00a0fa9e2974ab241edb3e935c35c3adda2094577248f2d77ae330c50dd58301a3008b0fee658e4583ab48320cfc70e0061476abd18c8540fb448bd3642165b8980c0308101c4cc642f6f5e5f946cf214c32bd421901a5bb8482a12588ccf1b6e3d58022b666b355fec1192d51943e6bd843431f3f491665e54fd72acafcfbcb21bc721eb15a0ecfc792e0016990b98ec4ea114390b6d656131f15face5c24490a60ba2bf8be2e3c8af07c0e36693cc2f97a6f3982d3a12206c00c717470189cc3e0a9e4a011e52361f0ce3f03aed4a3398163e706bd645963eea34b6c91987b58b1d6a06ace56657c4ee5787b69d1afdf7a7aad610fcfa20462f96e30756c86f76473d42b458853b35fc85e3d34962df299d6518fe7f5cea110bc97e5835794594904253f4eab1924699937c86a210d8b7f0746aa378bd1ef096af5c7061beada14da9b1ebc9df7f3a11dffbae9724db84276ae3c1d1e6db258bed793667573e653bebb56b8a1ddd696adf40dcbc410c9890da4768fee44b6f2e16745a3f5f5e538959c3825f948135c26f488d6b54fd57ba29610b6d7ab2f0297a8e5118da34037ab7e6fe8472e5568428a4d02dba5ad4ec467602e39bdd3dd30d693b51b0da02584db6023870ecb3cc185f6dfa83b59c0182681ea799b27819e042a02ce32ca7637b61819e6bf7413bdea73b00afab62d3c1a02805b5a30a203bdb982544ffc2268befd24b2b1b8f824d3d596c5089111f474975b92497df396feea8836c9a819aafd68a0ef43a12086fba3f7e868e54d8d5552f29111d716bb21c233cf2e1a484ac5213ed57b3000ff7ac5a69a0d4a8f99d46e7cf11ba345d08d89867595c0da29ebfb0118f6f019945d7ac9d8df165442878ef9de099f0dea52f4cfc0e46fdda88b51d643b529700b9fe9960e6244742e11fe8dc7b1f0fad97273efde342c4c370672070e5c945673985dc98d62215ed378c481c94753fa81f23390ed15bc2c3d573071884ea329a6d18f76596826344e8158adcb23e27c27294c8a44e945614721a554325ca4cdecf32e272b0e881daacd94617c696144bf959826bfd57ae432e07ff7f701b81815f165ebcfd624b824346e8c5110d8d3ba2d2bff44309ce6e4630dd0490aa8c40460a5d19b40a1189e0ac50518b330fb72f8eb9fddfe04278fb674f7e25c3a1f5053f8d810c3e2696378e69ac62a4e89ebf71bec9cd092d5cf9a549e78d99b4b9055d0375e4d648493ec7b851d4d2f9ecd5c9a5c56ea6f9db47af58921541f2f05eb6c9b6a881368aafc60b8153334329bf2cbb4ff4ef5e3dec2f7d7ed192ee740f65e2567b118fbf24b1cb49fa7c5d490fc8335e7124595cbbc43a15b49842de84151c8c802d62963021573b44c1671ee8691dc22acb7ced1ad7599aef55360623bfa23682fd75cfa69124fa8c37b832a8bbd8e8c69d64c0d89dca1371947d0b9d637043c4d2a6ad36181a13321447d995e6007a224228e6d7da6eb9e2070739df1b0180a8c3399415c8afa06ee0098db8fb0c51d6f119a666c6a608d7b951f7f345f7c5400f71013500a0d0f1f88e7768e120085a04749b52817666fc3108f3ca01f139dd60ccf00ebb6271d67e5de2c8c8f7cb0dc9e0ab6fb0be913984034df4948553543ee325d5d39ff1298131512c5331fbcc0f50bb8d608f7d37acf27da3ff7f9ead18bd0320a9958a4001903f1630bcb1b753f315a25c3bfb9c5e269557ab4b6be74fa4b8e3c825db0b8e5af71463ea35e97d911fce31b7b27251afe6c44cb7a07e25aab4eaa298c79a021b542fadcf96499f981c98a60e81a4668cdef4684a8021324c6968e4fbfc67b6e454e0ff92f2d661f3ae0468037139696d2c3260214094cc4790a6611b58e5cfdf8f4fbf487033e1cfedf760567fe32d9f2d3d00722fd17971428c86477b389b4f3b4cc0faabfee32600419d965462241fbd5b4ec8bfa87fe678db8a450c92a7492e3eac5a78d9d851dae3e7186ec310d9315c7816b76f0fa55237aa5f983891e2051dc4464324d0c4ffbb38f03aff92b4095027c5dd9c7213fc44295c4a5f2c7b88bfd93a052c51e0bfb9afd1109099af560c6465c1e1f97eb5ce7607d916851e68f5833645b42bdfdced0f8feaf8a600068db51360910804f09cf4b6dbdfe8d198a336b0684e3a3903d22bac6affc04f3c8ad44b724e4ce63436e06a74e3fbbb562be033d25945f4bdccc417fb8a370c73a607c57fa44b7be637bbc111c8686753deb43d09f132b1dbadc9e7fb994c089709422f5ec0967c9631fd7d1fb660a554662bf4f65b107e91b862284ca34d3524daa9a752f8a24f8c3bdfb07c9902053c417f61b40cff4569d3bebcdd6000cd9c2f257d89f5873afc4a62383431fa98e3932bd164fc8f09aeae1219a49a960f5e7e028e6c6333d58351f46a34d8569996501b42d2a09a4512defef8996abf5199b625fe43254353a09b4bd8df0e0477b1e64daf53849b807fc41ece5dffee6f521ed601db64f52c1d2ec28bc4c09965ee4a80bf03fd45c4c5dc82f7653e2bd78744b7b7804aff023704a7338a5ac58ceb7d63bcb10dd0f6b421cc195b0e09001537a4b8921b40ee84c931197c5ae11974431bf8917d02ba743822226ce49f216898819c7da86dfc722f6eb9c6b9cdc2ad78785a0a1e83deda7467aac284b0bd02e9d8b3cb4cdb81b0583ff383e40e1b341351b1b1372c973b7be49b2a754f867536e4421c23a574064a32730643201821848c642f1dd28b870dbec0e706df6e692fb52feb559376e777d301e3a90f0f690e17ba79866f8ec3cfab86112bf63cb12051ee5981a4f8489544be0e7d413b5d2d89e2f751d2d271f3d9cd9b3dd3cbb8accc3beb9633b6dd39348a47f893795b9b4a87d10ccdab75f527d7c5cf6f93828b4f58ccaea34dda1362d549abaa6125969de3e50002c887aa0aae129ee8161182802d560fd190bf121203e5526fa35e2b300d864303233588c3083a0967bbaa611427df830e2eb3644635ee11a37ed24f26e81a88e9a31f021b64d57fa9d32023af223cd130a61d4c7f4518426c826697b75deb911297c8cd17827d491d4e465800f094365726674f198c8310774d8cb31a8e5fcfc66955760059b994166212691688a5d9c563b71e278621ebc145f99dc8543f2e2de0d07f8914490e157b877e538911707feee0dae1ff91d310e1691a079a2f26299f2ab0cfdb9ce34b0013600f6870d4d1c9b23811001f0166a27cb1c5d1883aa314861a78045ae05c7780377c47b359801c176b357224ad9e8a69abd94a362746a59a1e03a8ebfeb09db0f70128a6cf3f7956435d37b6b70222b7103f3758c48f59d5deefbb85f3993d0505b60be22fa816f7f3ea8e08361b5b72f10e47c1d73b682b9990a183b02cb0544628dec51d7f6adec81f2f3c0f59fd770028cbfa699ad7cb6f05a2792f850553396a9562a87c035e3d447c728a29fff2f467d9fc2960e389270f15d08d334610015e67c4ecece854ddbb03323220530a0302abfec30ea7b20d23b11575ad7ead54df87799a83e7223173ab60c2bd017e48168e2c732d479a18bd7a41fab8930e54826321f78b33913ef3549b1ff22d4192307a1a0e88415d815d13b71ccc500d7cecc8b0149db39a2539b4fabd7178380e3471b830b9cbad3118d911ba03d540025c4443031404cb3339068a2e1603b930599dad1041fb24e5a8b6644bca39c92020fea715045ede099fc5ff34f1315cb54c730a54f9a3875afe469e4e46e07880b4e7e832041036e075656081d950d1ce4e6dd81d22e1b4a664fffe1625a7949b1d7f535331be51dce44c5e94cdb530bb189e51013e17caf5382dc4377254f69a94ea5f9a335e77255243096bd6519ace89263cd680f0d3f81fddf44b1f47782b94eba96ba335faef18134ce08d3056d453d1ea03f42a635d385258d225e4c3a0a78291130eddb0dc1bb8ae2c2d9bd50c47f5dd1b218a626651dae9eabe42658a061153d2b7fc3350b72bfa740b3a81faf6bf62b695d0a06862fa36853809d8090baa4a2832c7a6cbf569ac7bb63587cec07e1b6520a0305a7ae668dbe5565e786b1a1c33e3dd1a5624d798058d66b06ee8fd6db8a95d09d37895163b1623cde2b68d7236ea0bd24c65848e39df74b27c54cdbd90f372d26d79b7b31a969bc6661989c37f1236293a5e3c6728694217e20db1dbf1864827cb13fccd6a15a2cd48354fe8005be9cf97c3dd6b6290bfb2061a356758b806958511f74c58155eea3a4338104a1e5e685c6a2a88ce1e7398b6e8f1af80f32d18d1a09eee8d8f55424cb0b611926bf9e9b174a8ecbcc5c34370e52d11b0e89f3eb09b89aecc7a486f70340ce342db047bae151dd56fe111e15f95ad14251f97ce7d7e5e9ea433cc31e0a003aab19748b8549254ddbc10bb6dea49867ec706eaaf00fd577932fd5bae29ddafdd756d92f7a8d2858641f567bfeb374c86c114ea41eda0b9cc89ebd46053acf577ce912af981f121625f505652e2f2ef9959d1a81f59da7abc08a839bfb8fd959f3d1b48c792f167fe57b4f32e5703974d9860e6f058982fa7f43ffdf072354f433b3e5d7091ee56e9fbfa78fd68eb4faf8ca544dc5e007cb4c9220ba71db2b743b69fa75a067b2ba1e61a0a5a000ef699248e16d49412fc0a7c56236688cb07ab79465f2de3110e6b2cce8a617678d1b5fc65edb08eaba03478138fb006384e7a414bebf6f3541ca012da3c3cafc6841382cf3e24a5413cad21cc2262864f68924760bce6b0fdac55bec867d378620647bb1580264a3c9ac1fa43a73ce0c55268a3bc51749877234f0b8d1c84e16aa11f427cac321ab64da8be7a46924d8ab82f0815e73aa6080a981a3e307d2a42a99681b25e28376ef01ca109c27d76fa06a0aaa7abf7ca29e82da2f4631c164872b294bd7a5a1378df40e2038d6a59b5cfa4825659482959fd64a90507a9aca996f8ea2b1b3aecdfcc7c8cf34dfd2fbdb2f80b6925807aac6f19a61268f3f8f9866bfa17c13d1f6062e31627730c9a60be93498bc6dd897584142a47d601e2799f373cb5c99281b248525d41e0bca6bb2edd92c31a74cfd12a223d328a0b3c63677c8dcfec880fa6338ab3b629563acbe7b365ace71394f44f7e553749bcef8953a21ae74684e555a0e01a90e3049454f3956a0cfb3859faf0b2a088036f0edb4f4116aeea0d14279319ee429d62278608076d178717fd334468d0bb4304b4a2d58f1e29650146a0ac2135a7b403488bf606c783dc63ee184bb0c22a32594fe908d68bc36aa4a20a6740b6c8b3a1003a3cf70b5a2ceff603b1d50ed2567c47bbd51d7bf589746d52548ea8fcb0c4e7ce02925a0d90a72e23dc921fd8cf76fe797db519c841790ce6f5b250ed7a468e82491e1c7730596aa98db4fbce61e117387ba427494357d9bf6340b120deeda6fd1637aec046e96233d6384f6234c26ddcc5be6ad9acbd7e8530bbfd98a1fc209abac28556ab0066b8bdc144d96f63d562d94999a8c4db1dba442e117e3a8da4977c529d2b4e8ed1cf668d7d9841cdfd9e770102bd3fbfacd70aed70bcc5d66a2af97bf933aab4d5b25150a3cb23d9872bec84fa15f6927b327d8b99c5994329260f8be080d34f1c08a31b7f57c0212a348d5456e9379d0646ba9fddc40ed217be3ef95c1be8cb201602c501658757cd1ac3774b9ec83e9b2f53793952e67d88198696f2be13e0481447b0e549868aa9d626e79dbf10eb7bd588ca6d83b8c84a1c7a826524cf875f6361d69e2ffa284b4fe5a59f746e041bc2a507dd35d109dfea09284c998ec9b8db4798d3f67497eff6547683e77636506baa80a64c38a7dcd1e04c6c85a59fbf2eef8867b68d56a63b3b97a05513b7856b479f8f9cc19b9df82b450df9a7ead1120d0489b8c4efec776873df53cee14fd346211c7faba70b1d916753dd539a39f28564c0f81db3df005e7d7f7aa75bdde2c5ef950320821decb7e559af1f3d493d455427b7a2663ea231db8496d882e4514e834f147bd0abf90f88c455326546b63ae53f46a70528231762afe0982437a03d55cfa7d7942b92bb065ca9596786dad59667e41c648bd11845db607ed34446af52d5b904c7648e3651efa44632643bed3cdabac261751086441bc1056d9beb7049265142fa67f1bfcd7f53a9a96402261de918abff4ecab4e1f892aaca60abff64602b9a36a5c3db1bbd56f7d19dacf413b7ba6d3a34f14b8794a2000f076a9d14e76b07dc4e935cb476b39ab1971b9551708d6e105594975075622a7f9e8419cad9e949d198529733409554f9a417a57dbc997f687c02875812927a63ac7ba20cb01ab62d5ff7a07a63f1865f351b1a96c04b879fba0e0e5b8dd0eb416720e22522c87dc24c5a81acc0f049bef6fc9042fb0879cfb18990dce6021f5f0c388c9f47e9ca2bc620f8733d79d9f22e78b3e10d8999b7dea091271c2173ba4127ee2cfe8a3d822201cded60fe80348d1da39bc3ace6e7a06fe3f4d59bf74305680fcd2a7ac996d0ad8db0c9f80c7daba3a30fd23f365b89630cae3859f9ebf456c5e6eec80d8a15dfdfafc2397f845452458542b29fc398531596022131c453a1a9d01e3ae648137221bcd58827488cde7c2aac286b9a6da4e1a0b76875218fbb1cb0ab7dd1ca0a39eccee6482da315e09d9ef62ba06f8a7211600e08c1e8f2b5e58e5ae05497aa3f94ef1cf2aa04236e3da08387f87b392fad20ce264e849ca9131ec36bf1bbc267fe257e8d221f9e0abc3664a44302c1cc1e8aaedd3d944f3c4cf71475b0556b1e2e2db163f6775820e67bb2ddae8a5e022aebee51aa881864a2d7e79a0bd993e6c391f8e6cbacc3d7754422e30f9c794f96cb5fc738578f64d52f5e5cadc0ea82babca310ceb2650450b0ecfafd68f44624568d5a832ff0b20e09b267a40743647510713869119a569bf42f48aba5befe6e7fa5d1d8ee8ede73d767be88945c1cf3d96853c8eb63c4885df9fba83dc2e66301ff28a340d81ec72dde02974ff5b7d2ee8a7d581c44ea1c1ce3ed1bdfaa3ffc876341e03da44b67a5f30103ae21c8973935fc0aab331d93c4574915b608d76da0168727b24bfb5d039f16254fad44fe99cfc8bad2bfcaaa0d407fb9eb9a2a04203c121d5678dd8e266041818155cfd33d52efae1fd632fffa0a5ed6ba15fd04f4b4b9b4829a594014a077c07e10732bb83be64f45d23b7f66bbf8cfd8f9e7270c0f880f0c13fc1f8e2eff0c1df4f8ee0870f7e7862f1b4f706169129a810ae1dc778e0dfd37b0bb2a74d14dcfe35bf8e42969569a83f4dbd5d6559bdf9ce94d5d390d57178cfd4243eaba724a829095f8fb91da1e4de7ba4db27b8285df720fc1a08c7ec93238a3abe444627d8b0c62b8f4eb0b9d5d38d2290579509631ecface6168e80cd11d835c837c3dccab2f0471b3bf735d0de4058061394b34f66c0a3e35413e998a40e71839e6adc10403dd54eb4aa753dd553f0b5d65a7bc3d38e4c08d3bc768cf58f6abc52b9b51fabd9966fe9ed75fc62f821aee35cc7e3c9ad2bab59a683807429feaa46753b5e0f28b730005c98d9242bf061891326924882c80e7e6ddb359ededbf5c1a875bde0e2dc6cb4f07bd36bb7353c8b0f3a6b627fd65a6bad15f7cfc036cbbe9df146e2c70f204076b2be3b353e176b80b3c0730bff6d81b4acf4cb5a0be1b85bbcf3b995f100523330f0d4f6be1a8ea556ad9165f8f55bb586036cce7d8cc7d1aabdd4aa25b02e4d02ebd229abeda7669d0ce726f80d6dac5c1c029510dcd3cf248d9a05320aa6cd2d6d7bb75f5bb72efcf8af12291a5823fe4d2bbbb6755f144b258cb30d64be9dbcdfacdb47472c64c73e6a736e7ad3edb76cac65d1cc4753862ceb930214d0a2023601a3149001d7275000a3f9532e46f0578c9dfc35b2cce24eb06a955ccf2fe355828fda9cab439a75fbd8e68cf84d3b962090c38651bb79171f7f69635f6cbff8a18de917dfdad80c6eaf4e38eb56e7577d7ffb77da3e8294195906c306179ef011850a86f0ece42f21cb2c153da22696cc5a40450f3b12e80187157a047124070e36781c31050f37808245490d0eb04f73c6d397eb09aef1ac083205fb21ceb5fad32f621cfe0786df8ba999c726aba3d665b303f1e627747a0c19b83fac09d0ef0b1e3ce53c05e2183164903083a71e846e9f0c51c4c80f3d45552058bbd8113c4de527a1e38fa159b6b553ac9ea6b449ebf1c4a7b5fbb476ef1dd3cfeaf9593b8d03b45b1bb26e64c0f1a7ac7ed39bf0d49432859f5f5846986526dcca1f5a1c9ac29e9ace6c5712df7bef88c51c66fda1d5187fdf067598453c5e1df690a8d6a166cd6054e79cb32682b4ba6e538b1be1bebd1fde4fdd7fe5a2c87b7f5576466a466c34291fae4240eefb330bff4d89d15796d91082480c423920424baaec1440870f328841880a831876f27f7e34ff49099e7ecfff58768ba8a136b67bfe05f8f4fc40327a84d8dcb7ef06c2b174464866e587c183a38fd1fc2f2f7cdf39a8d9ac7fabf2dbe8f903af39a3076eff9ea96ec71dd477bf272fcb6b869d1c91ca6b9262bf27016cc06da469d61b63cc736befbdf7c390f65fb3ec64572120bd5ddc18b557773297d77e1e1900bd1fe99e58b4c14b79cdeff6ecf7fc6e61ca6bce18c2ed93d664d226fca58ec78e826b43e33205244ccacd7671ac1501bbaccdf9465b9b1dc297a5d602b3d4d030cb8b51d4720384115c7041b27a4d4d9019d0e620a7d6e1fbb64eb5d63a6f334683173f38ee311a94ecc394680193b28279a131c1cca8ac8da9d141a6a7d65a6b513a954259cb42e6a47aab32594bb385722b4b0803a3d76255fa1636fed7ba347739cd52e79cf3b6914e1a8cdea8a6fcbe128616d285b5e20b6badb53a07d9597f9a73fefbd9d810523ce79cb78db5d66aad61526c8cc89614c1857144b82f1cfbca594b5a783efdaec5649386d941b77ff95c6ca3ad97405ac8adb5d696a4081f88dfdfb7dcd27bdc34abf588cc2204a336a6f306c2684996b550ebf04cc31cb46da3118d4cda910493c26f1882b56e5f873cb460e90b5be86f98520cadcb7ea86d18829f5b5926d270eaf21b5e7bcf348753b4160ad2fbd6edfd187454a9e733c5807d1196c0a538ca5129509e6528ca512950d4ba6ed023d032bc85fa535cf38cfef0fb298a61f8af46ad0ba33728daafec062d423f128af1d7637571d6fb03437124cb11c985975e604c3127544a86856a8666d5e201b0a2f96f844dc3b28f4643639a270c9a9999f3ac79cda8543535231a9b25046714c3510c37a862c18265bfbf2c462199f0ba00c1954a8150da047110460778711396a27891b339d9e67c5956dae498c8ac1fed7f502874cf6821f47b7e348cea8f8642b5cad68806f821e4efef6e0901df86af9a647461eac9330dbfd0fc6ab01c7c347d636242b0413b79cbb26b522f4f8807754c0275ac9ad42cfc9a5499994935a9fae6fb5dd377beb871816063625c63cd8538d4ed8bb8551f85ac0b061463328980c3fa000a6b0948d0c379d55cc0023b0e6c80f78251a6b28cbf1db99439f9ecf6b999e2e8bf8c17106c3aa0863a8113608c508a9f79ed480abf78040094ff61c8535fcd6689d417a3dc349bf37d8b6e52b550697eb4d048c7ffa546a18f96226394314634c0ef83955ab539379b138463fbef8f4446a155bf67d701d7eabda1a1747b55939a6532aa49d56599ddc1e12933e5336576231afb94d121e1e987a3063976fdc38163e9b742ff56408d0c40d3ad58d19e90d19d6474323a9b6361341feda3d9f40fc26fac24e56c0e89227db48f465bed46c0810901b6eed2ed93211cba88b58e2433d62e39df28c1efa357f0fb1bcbc6a6f2e621373588228a284643bc4c9c87ef2dc3b4e29573ce5878f487c42946090e6a759cb25919f61172f3c13e9687e1a752362041032860288e245814a2607fe6dd2147512884167aa549118c1ff0f0f0f0f0e00c8a63f8edd147f4097dbea2bd41739f56098f0f1ed3e5c1390a1f1f9f549326fb037d3e1f7d6586297c7c7c709438f84d110404431004c10f0bcf14599a4c11a4087c1a53cce0e3e35314040f0f0f0f0fcffeca253c9fcff6c12fe8fd65bdc1265f91a813a3682c3c4c680de6ffbe6f6b2c3c7868c44b2ea492248bca717c10144752db28f9701f17d24d9491cfb63da9e2a6cb94f4dffcfa6cee0c8e70d2c4081c4030c9edbd7711fbfbf60782dfe62187bd73a6b277ce5496eced43849224488670430811c411208a6490338f11a1223ff8b077ce54f6ce994ace79ef9ca9c0d0e014c3e463d91cdb77437ae0e1034371fcd66b5d19efcfa4e9fb0ccdbba34d2deee41e4268a150ccb0423143aa64b2b2519d513bb642681853804579c44a18d52caba1aabd06139efe33c184bad53d43f16305d8588d45f15bf4d6c8566d759d4aa0e76bc5ae4720f6fca16de9afc935b28cdbc7af5f9b39e39c73ced78ea4cfe7b3fa03bf1d6a9d4d62288661a8b7fe6f84007dce9cbae7dbfbdbfb64f5f4a0ba85516b508fa4b833f963fc21fe10d7dc01fddf5e808d4d424f6602efefefe79d73d618875aebdf5ae33c4280ce796433be367fee99861f3f7ea49ef41c29a208bdbf9def7fd81d285420c58f1f3fae2871297c40f0e31186df073ee991e20a13297cc4ef9322abe0c78f1fab504f4f4f4f4fcf2e439b43cb81f7dd6779eacff99503bdf5c744d489519ef42ca1f5b75713653de93952ba70d2881cc51d298ae05f91a65f1b1cfce1f28334ca953ff68e1d647e8bab5b2b53badf5bd37672bf3e1b1d721082430c647e852040a80cc8027f4019191999b7b23004653a46c5100422f33100593b90b5830108fe00e2f3e3053d379e1b6cf021f33735c8fc7ae3829e9b1e37b69b16dcd070c30290b50359bb9799b1321064edf60c26a896f56f30049c9da622be0c51e9f80547aa916a349d5403ef7749b51d528d5483a9651684d04261d42cbee0e21a6a975bb86a9cc6699cb86a27b48a63d7f1cd5cb42d9cb3a6dcaee5d09677d098cb85e3143b05c7d2d10636b039dd2b21e7544ee5544ee5d4d84b1861c677fa0689f38886f8fb1c41f19a9ccb2021460aa3f8598f8bc81736f316b5cee6807648893e5ad1a22816dcadadb88ddbb88ddb4a766ee36e3270390789532653a865294ce39e267d75cfdd645d2693cdb1575259e71a20ef42ea14d34df9f139937a243c254147c7e6587b71e0425996752ecbf62ed2d396ddd9260fcdbfa3546a6777763b9b63f76ee7c48ee32ebe57ec5bce0b4fd57aba8382c621b266c7215267aba5c4b5cb17861ba6dbadb3735c1c5ce3b16d181d7d461f1cfb5eb679e0d6ae7dff9ddafa086d3c725c9dad63870c35175c78ad95b9008d41c01f7bdcc7c76dd350430fabb379b80065d9b6d95c803ade36972340b800213219836cdbd8137336bb7df66dfbd83caeceeeb16bd8346c9b0b4ef78099e9ab8bf4f492542de4a3dbdf3c6c42ece8f6b70eab231eb938b836c282533b1ead381c0e273a11ca29397275c4a124d6853f1585e8f8ad888311050e6676c5cdd94026399ba3419bca2dfe566f9c83f82568533796de6f65314647f6d5379f3162d81c8b592949bd593d84459da8e2167e511595a462929e847403bf25cd54d5e6d82e46119574fc4ac41c968951445554b525a9f9c97e5d6a9c8632d45f7debba36c7b2308a9af2b3bee86f58077cb7d65ff999fba55ff83502ca32326f215c968d6f7fdfb46a73c0a7d2f1a730aeb80bda4136c7ee20eba2e941a35b9a296eeea07d04a704a3f84773e74606c0e9d966097e5f0cda2ccc5e373bf8cd22cc40a3c1b022bfec7fead157c72f9b9c7bb302b0bcd1c1efdfd4f8fd9b19f8fd1b1948175254abc6f48d1b810516a98654dec450dee4e0ff82dfc050b225b1859581e0b971b985fffbb4454f531de745188620e727aed5770ea330232f30ab1968b415108c89c61473a30254c8730b48aabc7981df47ddd0f8fd1b17666e5ae0f76f58e0f76f70f0fb372bf0fb3729e0f76f6ef0fb3733eea2fcb9dd469acd152e5e20b830b6c0add605e309106c7e805a1b2bf87d9b2dfcbe4d15fcbe8d0f5ca50d155c041c8cf3ea2d52aa719765dfb971351bb7eb1807cb01bfff7abd48a9d44ce3172a5421a26e55a128ae6e55219fce4daa111f29d5088f8e5d6243ba0176063afa7d128fca11a4f0ef8fe2e7f8534fe8171cbf37e4a91b781a83e7d6bd5fc2fdd77d1959960029aab06108072d4dfcb07331c6a619980a328572d6f35b56ced97ebb7beffd18b5eff7badc6bf1bd17638cf75ffd771481cd2d16ea37b5bb7eb975d930e34c84d52967ddfe0bcbc89b8c02d4a08013b5e79952d7f3ee6a7c83638fcd7d4f6e5d65ca537946fe12f2bf6460dc6ca691206f11b914a849cc8620bb55ab10e956ade2d3ed7fddaa556ae8bc5bb50a0cb85bd6791b9a3d8ea52995ed1aa35bfcd9bf81fd354ef854df5703cb4cdc0919c031bbfb7e13dcfa4ee1e87b7f78c3404df14f59f56739e6cfcac491030abce28a2b7672484105dec9cfac12af74a5b4beec605bf7ef0bd08bd00b1016bd7f656eeac6dcd11defbd2fb87eef29cac5b97fc57bea5c98a428580461df243077c549e7e1188c894531acd62bad5906d3f1b2038cf6029465b01b2f406c7911c2b11854e0707a5a5a4b6b4c691d95d6d2daa3b4a65e705db7233a45b93a2f1d58e9f8c553948eff9a3e5d4f61d0741845e20565f6eaad45bcdd14fc8a8251d4f952096043089a3da0d549b5eb1835aab1c2ea51a303e8fe7d36477d347f584f9a3f2e5e74814f4417e7ce5cb052508177fd200c493d992555b5537b0aa3f6a26271f0d79830683066b9d5d382d1d57cf15e44af9d75bd74af28553afe13d1d5794141e244f49d2fd5069e92d4924db5abf5342c4bb05c6e615da48b827e6e3a5ee0a916a66972d27c6ec26c268c665d26ac87ad75d80b1676c3e2e8b99f21231df340fb9ebe54ddca7cb5e01559d7cb098bf382620998970a33a2f163b26031a2f16366739be69774d1d511a75c9c15c7c45d161b13ab5834e6532cf272ab88958d3f76bce5d61884d19dc4c6c62138e8cbebde2824eaae0ec9c9d575fc3434c873c5c328143c7ddd7065c250264c090c7732614253ae0e6cc8e2885560477638063362510c4bd2f1c7885362ac660c919765b01b3fbd8e3f0616db8ad18445f16358104e10b4a77f8f948e8edfe54c39ec858eff8557eb69d8d397da5f2a46a338b93aaf1abca49c4e3ae6276c665d78c53379d64532cd1569ba33a54d104fd17093a6e7d37ca9e66b8af97af3c5cb2dfca69101707a78be743ff095d962c66c7196ab4ef66c7e23f39a3cb72eab66049e2b9e0b5527416861ead96c347f564faef88b72359a3f2d5e6c71ae5634df6ea13ab95ad1d0d068bd5a318a57bc1974f6dd983ae912452857a0a971ca15d8c1f1748ad9df067fdfdfe01713631ad150ed543bbdf5a7dad91c4b237d1b06e6e5e5a5b4e261745534a2412280159ebe545ec7ffdae1981ae5a57b4dc1b1d403aa8681df7ed11985af9d21c5662a5c811e99f69ca7f779fe9bcf0edc33a56b82943a75730e311a05c77f9f8ce1c0f1eb57e5e0f853cca3dfc78901c77f7164acebb41d4ceb33705682bc6f4384cf7ad6856f0902396e9ce069981fe75a6ee1b7ad37dc03ca41b434f37a1ae65a96e15e38e3b454cef986f9dcc057cb5594a85270aa9420558a90dbc4498f1078dc3e294249ef451cf972aa1cdaf8e1082974bb2655849c000222c5500fa6a06d79819b306a87883c01a20b4243112a86ece0062ff841071eb0603b55298c5e1c235c9fb51e09884c606dcaed132644dd6ae9f6496eed79c40031a8b3304a66408505a8ef706c24e2e1d84d55f8732c2d4e860060dda62e30c69d7c6b8e9fc52cbe1ed1184f0fb0baa87df872e083319610d96ec4ad7fea9dc9de87cdc9fd7e0670cc3e3182d6ef7f4e368063a29028fd7e53fac5a4d4465f00466f0debba3f83847fb62f87b70fdce6dc7e3f4d8567f89d319ee476b4198ed19b403ad3d00419b319111c4bbf5cbf332cb347e0c83b21a0b061198ed1ad8620faddfd3ec9f9e8f72f108ef17eed9322b6f42b94b1b5442a8ea531744e9cdcffa2e0d806a2dfffa6e0988843bfff11e19818833ea35d6bea5f408cfbe53c60770bc0a80541124b84a82571838524ac134a8ed8b0a336450a6298b560831a6e5576b060633171c10f237c7801908e2148660054050eb0e06007315c71e586a11e52fc0879d9247ec8a1dea0c3f2821319a002a4a74991a22d30183de0054f6cd13193c10724d60a229d1245acdca0cb61019e65a4bfa3bf390032c4071d761002fa5962272489238c40421ae119f8d6b22c01525e9061880c497c9802045400192227831c9ae0653303d66583f0476f6decc10f0b84c0010c4cacd8a00187102baa0cdde003111b4108294143922d3bb4200614c0a8fd2ff7e55c39887c96c0b0c4c78e0bf0d4e08829a2d8e1086f079b256621e57b7d9e40ff3e817df4f1836f63e7fecd65997e13be3f4d90033e4dd8faf7a9c2fbbf9def6decf07cd7fb28dc27c10c1610d7ff00bba34f9b5b19851a61ca04b7dbfb5418f1f1c44f4f103d5877ca9ef17785bcdfce7bef9c73ce4b78ec0c74943b1af406f3cd39df7befd55be7d74e0000081878c839e7167aeef776e7bdf5a986d5dc1414a7e68af0932088608c2ffead738963a9a9ef3a4780f99d8f67761a6718744d4426a8ce61ac6c86bd314bf6947fe20cdc050a144bc025475cfb063c2452b2809341441b1ff95897c850c592158288f08116229c109b108103229aec60157153111dbcc461af37181091e39381881b4078198538c4491e84347091ca9315a8625032c4b7e3badb274a8028c2471e7e54800252e2630525319c4a663198461a2fb5f0f8c8cae7c3b91471058ec2559164c86622c94ddc8197dd3e49c2636fe164b74f92bc80c4969e5a1cc7fc09122c234fe114c14d34fec24438030ee324fce13243f60e90e030b680a4053db5b8100912157c40f8c88aef063f590179433400553eeaf6c910115afcb6ce1637a300252c6048063d45558e031e1e1e1e1e1efce9707c6e22432b9a3fe4d7dcbeef9cc1e8cff835b7940cdceaa1c36b5938765febbdb3288a6118eafddf08015b01afbec1effbb4fead8057d73b6a82b0ba0da2331e92a2e9e853f1d3f153b2bce51d91483f22dddb4bb12c5f2ccf7134f10786e183e13923a3ddeabc031b3f5964b821c9ae071625ec9614a440c8ae8917dcc0126489110467f03da7b0e24a0f3ad478286200961b20b10148a887243040711281b8ed291fc11f74008a180a33b08bad869e6eca619241c7cab6f2b1aad99cf2c791066773f6f76478c8d8646e594687d571e10182abdacab6f281d1bcb5de5affcaf6633cd3158f8e1faf7458143f3e539aa131080dceba7078a632403237195b96e1c1e3eac8e8b038672ab3c38506999acdc932b48e3f93cc7047a6461a8d4e199a0c6db422710c1124b72168f941922a2b604114183420050b152b3f331c78e0b26ee1321eff7e968e54967d8f651400cbb04e72b6d765c541a4d65f96398fa4fd11ebbff78eaf31fa367575f089c23d53b0aefd038081a716b7de1e36f6286459b8ffe2c031f2f75f5ab97f0336e7fefe19cf019b65a433f569f8e94dcf9c73977393cebb89e076bd3c2e6d64dedacd7171987796652888677ab37b5874ffdefb67e0d80ff8299b7d7863d6f593b70c43fe7addf58c59c1530c946a5b8a7620fddf1af21490cd21757d7bb9a59f877cbd6b6e696ddb423c05ad0a24be7e0b6419896619060aca2d9b133e8afea774ea754884a7d676712bd11141d8c3303c6dd6f0eae40f3f1dbbfd8bbb3af9d4b68b83c4e684a776811894652884a656734bff686699b6e5967efd658881469c97a914f98fa617279e3a975b5b787efcfab54d3f0a28fa9fc333fd7e6f2d8f331257d34f3ccd6ad482ab5c4c30b71ee9a5647b72fcf25bf81d16e28c4aa552a9742ad54a8b4abfa032b9d97898bd98ab75d1565a74ebba7e69fefc6f13d6b3ae588e182d36cbad2d18c545bcdd4a9a3f38542daaa082c5ff687e0baf1d16dfa209222a576ad6858dd8762c5aa8ced72e684513a42b49f3c76c61e268c1aaf9f3082e49996bb9d09ad57664ee92035b36f3a5030b002b1606150b6b71be76b523681214571e69b5722ee7924373209ad3b996cd9c71c9654daea6498dca9a814563d95835a450a7189164dd6a9ad4e46a54d60c2c1aab06962d55a3a26ad4538d1a53a38a352a59a3b26e63b9db99782e65399e7aa72a5033d4102821540ed50407fd1447a93ad074aae2d443cd5043a084504d503919d42c859aa150b3136a16839aa16628b5f34c269752b7d3f174b6955785a6569eafddcec49b11599839e827cd9f55e9f22111ef8a0e0ade9aa5cc23ce572bd10ec6cb2da29d75c1a89cae4c39f1700ca644958e7fbcd5483a151425499749ba918eeb483a92ae8a755121c2e86ee7627231f14af3c77cd2fc397f347f54268e1c4ce5e76761ae597a458270494e3122d97bc9ada7499ab27be9b24ce918c7604a5814c36e305a2fcb603d456c415906d3910496038763b0177a31a5de50a9d7e3a117a4c75f727de6e584d5743b1d4f67db55a8d468b3d7961e46f1ca894ce76bb7eece196fe59954a5f9738e2cce75e5b3d3bc4149c7d3dd562c16c706a306830603078c167cb5ae17ef459465bd3a2f2a55d69d6ec7e3e9ca53173d519a59a9564f326140d665b3ae55905b0f1d16e5d17550980c19e161c75399afdd4ce984d576ab1569feac7e74996141c4bb22ae3b00090141fe886361aeb4e0165ead375499604422514482a8cf4ae2388e23298e6216c5555c5d566debe96b8783d5d6ddaa5bb5acba5545d3f368a5315fbd51f52c6678aa9919b345cd3902552e6648f347f5a58a85c9734b2573d2acb4a878bb75e5ed8878453c9d8a8666665d753b225e916e464b0ebd95a47bb1aeba1d11af48a7ba2955e4e82a552ad00ccb199569774ad2fc99f971265dad445e3bebd265d9086aafa7afddef667dd7f18b3366985bab16de6e5d793b225e114fb76ae1edd695b723e215f174ab16dd6e5d753b225e916ed5a2dbadab6e47c42bd295568caeb49074bb75d5ed887845ba10fc368b5a0a9f50e4c666ba4867b17ac528ae79a12c33c3f3ed6f1f1c7bc1517a8b3abdfddd6375f4a7fbc7fee95161c36275133d2a330dc5ca746f17b12dfb7ac8ca7650127da4dbd7466c8cbfe9ed6ba19d1bc5b7ba17a40bab23ea2ece082cedbd186bad75df241a3b8c39ad8a70eb67f56116d88d2d54e08cd852b41ea9ae032ba66f258e780486bce4650d4c27cd9f9adf268c675db02db01e6c851561144fd1a9e60f8ed5b710ee9c573a7e58131607d7a458dfc26b87e64f25a240b141c72c9a5307eeac68e0a9eb968572ebfe0775d7ed060afef2229e268ef35f7c0baf1d10de052a040d428788a8103a05bab666ad15c89befcb2db5682e1f9af7525f98af1a5800e007c17c49b130f0bb305f502c0c7f68bed6dcc2e7f9522d0cfc2b1e0915820e41834454082a844e81ae5916034b6b85a2184da0421915ea7954a8840a81a8508be6f2a15d3e7806e2b945fa805e5e4a3d8b4fd6e06a92d4e4582eb066ac1a6b878a854c2a66c4b2a1402388aa495283abc9b15c60cdb20c7683b5630bab866331a8c0e1184179f820a91e3eaac9b16c28d08802c1984c5924330c0c39be785a4f594e3d541154100a874a62d1fb339fe2a09fe2a89c6acac882a85396d37aeaa18aa082504950b899534f75eab138f5644ebdd499f21ea71e2ad7f1b3545346aa29600c48ded1014691d437d388868e69b17fe4d269cc1cf48fe68f499a29ec5721ec29a8c0fbcb974ebad39413132349555951ed4e44272b3828e72bdea9288c825bf8a562b405fceaa2a8d675d25d1d18148bc3c4690a0c898e7fd4755c9b9154959593951391485249929a49aa0b4925a9241509eb826271f0eba2b0689f2fd5ba30017cf094f7ab634634f6c78c0ea03b0afcd2d59ad449f387f5a3f9e3e2c59dd8a8542c996c7a1422a20100124316000020100a064462b15818a49924980f14800d68885068523c1788435110a42088a128c618420031c0108490518688681c001ba6d72f52f88b090a94543125810405fb52094e054d4357382d0538373683e841c56a94d50560d69300a3a709262ff8372dd49e6594ca567882766aa6c7f468b830df84b9e9380e931653e5c7eeed71169d92159dc254112b408904af70bb82893e9d8495780f751fbe45fb462c664c2c8f8e2864c460fb2c79f129da7bbcd45ae2103ccb695acfe2e46d975fb7d80f0c6ee065428a0c7472935d78f529b5a70946de0a4b91124695440bbdcc9171cb7e38052af586156b88037597af0733909ecc23cfb64ffce5e3e98ad5fdeac2a781a8951694fb8429aae072e878ed66ce7f9e76db9914943d67cf10a18ccefabe86a884829671a3f210046e715f77a9d803972b36b8b8364e3e4f639b910b7f2e1e276449a7bafaf3ce5d57ed81c3efe3b31bbf567fda4d30c7fe6f558ba15d95a410a5c45028895cd4783d988b99483275015a3007f5056a6fc4b54996b25b09a32d809927a8005fd5b2c4edfb04dac4e5994e0d7018d739808069a10294153842b8854ed93d11a8d52a0d1d90673110e33f7707f1885278cc25213a47306ca4b92452d0432cffa868d9fa99c492bf197c642ae529fbeba5c7cba4ae582ae4b68f4e2342e44a902d8dfc3615c3a075f3aef16d01dd1138567d43c558d2d2c41bc80b9f9c0d376621b36574158d444ad25c4bc2d2a6585389eecdbfee9296d5aa7b85f07bb60c6f71b7091ce8097914eaf2f6163ad60f62cf3ae436567e62f26ed1b028cc459dae074448580498d1245335bd17913ee2386a340b118efba2e82c66281ac8cbc2fec3e2170ab03ff5820ca2c5c2f48feb47e6068ace0eeffeb2172f57f36cec4338840fb4c547d9f45ab0d74ea94b67e83436fe5feb1a6758882005179407a274e72822a43385bf50f42312189ff56ea16a16473733496c3ee8829a3852e4f2934acb608a5db2d1f9cd97e9a798c980dda537e791a9c1c88fc26221b239c070e9dbb0429613d15db973ddb9842252b5e26939dd772c642b8744456a7de20eb511a7ea395cb20f465bd343d8d7589355bb457898afebfbc82df47906bc5622b28f29ac1831cf36e8776eb37c6511552f11729ac68579396d30c39f9e4da50fe75feb5fa0d942565f720219ad2876c4b7dd5db42d50342d78dc37accc10362626c275c6d110e1622399bd7e5b64426ad34fa8e6cffef4314df8bc9bdd75b64fbcd75be28167a6ae7f158151342dca87c54ae18a6c93d3c6f1623d67cae73f3a5fb608c920b9bee3e43562f20b62ab3212ad75e3f4b6f977e10cd6942c9889c55a0c5f94330a423e815a13778e235afd5971c15d2b63757efa7764e25c01e0c0b8be40c60764dfd45b5308902212e604999cb845b7aca449ae1efcd92c0d5d5d02ffaf827581f0567e334884038c65f9ef77a062961f9d0250756bf213f024a4b42cd0a4a5cc2acd7cd87538c74851d707e6458195bba501b6d798c0b447096d34ee420859c1593ab56c4b7b4e828ddee1de4a5f4ba6b6bf76d5b426752bcd0e4120b5ed2b3824d46a891525847e4c259ff870e19bb0c84af5201ec01a28a46e5ec4c610011ec5dc28aa5832a0dbf03af5e9a7855eb5fb9a2c4f14c38500ccd66a49791278a495988c3f4b2bfd017e41a328dede253360c7c65970e4c400d4ed45c39dd1dcc554b635fe140f8cbf5bb19b1fa4b191d96c9b3f543fcf7403f413b4e6b4ac084476c5fac65b56ec6cb60deb1a73e6bd6f551d64a59d942fd82185a64652ec1fdd43da542f6e55e2ca8ff2656ae107f08da591878a2d7b3f838fd400d19db70474032aa492d9c9cedba3841367e8e65d091de59a6ee81111a011154e3978998dcedb24db7856e234f9b9091c6ed16993bf6f848071e3578bbfc3b3c6e61a12224ee092a815763b62a88e511229456e8f48b06d742781633e34bae34265cba9d654122d089c3d08046eb392c799c02546cc056520b59512cb099cbbd1fa446c3c550406e260814d2ef08ddbfc326c95ad4cd407d53af922fd78c61a04f5681302a4ed154f8566d49eac957fbd3561adb65bc5a5b7e1c626f24006d1e1e5a713c931692af91a6c307bbb230244b6c23f74551c048d21bacb49f6209f0ab2749683a067782aead546c562955c8a15d2b17d60766b9ea0f9a46e84ab50f3ddcbb75431b91a1466f7df5b3d638b736b6371344309a66dc12e8f54236801299c738ae733d716f6ae5b518285d76e20de3f1e5d1b5a15edb0db91c66b11aef931ecaf409712728e007f03b744c1e6e9976b6bfd9ea9a286f542f4b5ebf521cb4b143ebe8d0a4d7f8fe573412fd14953bc76635b9b815f97509f28653b26e82440db791bbddb06c09c47eaa51df4ae2aee508d2f750e43db15598f8b7a07230648f99853f4afbf2cf069dd54b0f43507041a2fd2bb4165e326bd4b0c505964061dfdf1b696cb7939ac32a8dfe81d83bf30669f6e2d20f105345a9f3b7983fefb47c018b29cb3b5646d26a1c22088ef862fc6c9c9fb5f381da2376600159f2bbf5997854e8d912fb25a6eba88daf5698d91556c6f20857cee155b19258ab2b21f52cab5c3b283d949f452dba29723c42fb3d4f3ac1f67f40b4df49ab6547b55c21986d3f12473eb8285ba7bcd60af277958dfe48fbb97ce86cda3745fe548554a8f2d8a19321126675326c0c71433a54cffee6d2f81d1d617f34f67ac1d9be6eed90fc4afc63c42449a0e11727e04fade7657a0be7e4757a0280529dc09e73b85aa16f5b1c1be774dfc949cd9fa792b9b339e082c5e37e4eb1a4b56cefbdf680ce8b7a5762a6a011fa12e80fa5ecdb7607c789dce050692342d916ac066d1a230b0e9475bd8498032a7415a2e484c24bcf830d48edc89ef670b56c4b7f8754c9381ef7bc5dfbf5fa5fb491421677e95ef80d19cdb55c32b0677e10ce48fdd576177737be3afe036f74268803f092a329e1e4afc31b9d583a645683bbc01b2c5ead3f69c6efc418b333e14e47fafe26548652cbe282edb494dd28d462a4c9ef2e3cb9c8b7f18ac0fc99add0b73eaba12ea5d6865089a395f165c73f90de6603f2b7e5dae8c788c0af63a2a6454e0c5f724248ccf1e6cfa14535df0667f76fa2ab686577741700bd0ab1f05b618c5dae97d1736128b7ac3d0562d937e8b77c146346b70986676ce9e29cd6bb94238e1e62fcec109b3de93551c0011a061d14847482a88a484da2885c9251bffd24611df2249a71c943f2698114e78903424569ecfa622a013ebed5cb498389d98410b38274c69bc6d2059bd3a4745303fa8d3790140833584499c3273c2a00a4a110e55094df1410906052242aee1a89a304db611ad674e17c237857e9c9af85f3c93ff81292b74e952f508c21c2df922fd931d5a8c698d056de271a926f80590283d5bbdcdaf3aaad5566d095d5afa4b9457e51bb25dc0e08857601675756c8efa1b0f0304e44c44d160005a3c07d07ca9c2236d9698d3b90684636e7495bb282406f8a1b33a37a79f884f1d1302bcdba4ed868419cffa980086ecb08962ac7d3731834ef4ac63974ff604015b768880b03779ef47a83e6b29fb6e8a6b703de19a5ed6d7e68b81e28aa1fe21f3ca7b0b04195a665103ac2be723beeb355b3c7954b4e03ae8261c578661a3107281c1941952c994ec6052216949ea9596d5c2be2942b2263dc4af4887a91248cf6b4ada2e2560388f456b0d58f70534de7cb75b45c18ed7cce3b434cdbf575e06920206e8e0899ccb0f937f3e4fd3288100e294baae00118b15eb2623547433cce47ef5c09c02c6e3fd8c78cfc642cafea800e00dc607edd9422886a726d78454c06cafa5959c1f048e0b989b5de7f66da2223da2d394df0c5eef25dfbb526cffee7db38def6139484b68eb32021179ebd848305e180d4786e66ffc636e3ecc73df113f9ba698ce4e399dee10345b862411aa5a791d126a8f23538a6748235d38b8ee4442dfc6bfd9600766156f567c48b6cb6f30aa52bc3fb4c64069abc01f1039a2d3f98ab198afdf45a45c610c4ef5743a424510dbbfad05cc1687d057932f4adf2cd50cade351367af07b5b25d3ecaae432a16b464f04c90a7dd1e8c00e4d3f43eef9bdda2845e3ce94db571dd83b79ba5e12a6d641b9e7f3a0e2fe6f55ec87a08489b1daae41865a4d1c93fb238792d0aa53111a233c5f9305dcc10f74ec7a33a375d9d0294ab9cc20e0127caa4b19e586d35061c724f55f18e932e5c6a1b4a6cdc7fea1e568e9db56dd4b2446f45a755df968303984cd5ee2b8455cb5b0219f9a8dbff585d879eeac32a869123eb10c8436fdaae130b1ea7f367376e54cc104365d5d8d27de9552ddbb55f5ae845b7b4915b2b1dda5f1e445dd08e83a64e73a7e90f10726bb22f109bca4d09e25a2df470cc1100f342758ea906220823c04844bf7aac834d24415f3d52e1c6177615e3241119065c25207160df525ce040f10ee445a4a6872b507e04a48c220ce2aa426e4aaec34ee30e405b35c3d829bab5f0c48efb55845db938e7c95804c6064858e8b864d4d6079e26727205759b20927722376cc0dc280561ea315fcc5919efb00b15a0c28277ba19b997385507b2efc07566edc3ac6e3892bdfb585f241f02e1ebfa039fe196ebf00f30c763ce42ecd588a3df50246ea7c9f92d3e874a72bb7a4ddf85ff1fa33e918039f5ea7b7a090051098c3c036088207016e0058037efce04f30c000e7d79ac9f12637aac5a82555fb148cc0a4dd8041b1c66a83c742df3d8bf21f39ee991102f00b5ab376c78c837c7c1e6af50afa2ed9ab372bbc4e216ef9f46864a8e2a9e8ae86479c3f3d939269b24175e4a0fdf4107d2e5b253c8de6822f4a0e07cad4133ffef5530633f96f2657fa7374240e75c1f1042c0418c86a91f0173decc4e88232bbb2eaa8946c9ec23bb229d273ba6849a28178f72b6d3bf7ef4e6366a5aaa245322b7ae4f89f6fc236b7e57153d0b07994388fc7811eed96965237cd852bec77d6f55f5dfee111041695a62cf66045557fd918e38761933a7ce61cc47f40802e3fd8fa6014e7ffd1d40604b9fd0576e0d1c01b82c03412f1339148fd978d1a05ba2960be466d861fd31acd2ca5fbcd49b24a56e64665a91131589dc345219ef546b69c2ed2bdc820e12fa8a9807a16881d1197588fdbb836946146bcb93ab87b13810bda31ccc4f533a599fd57bff035b55273caac2b3e32d92b2cebcad148364f64d60d7c2cfcdd2368750bbbeed63d7896fc5f16894658d0556899034cf54592a8dfec70b57ba878b7b75f285be1f9d21c1e32f4524c03e8a05646808a90429fe533e9fc9e2584f1bd9ca6ec1f6edf8452af7aa32c63f8959562487c0a8be654e048ef957b23738abb5145af52fc2622e46fb79fc281a4c113b20c91c87c03be49768cc8d510aff2723893530d7ae8ba5b37dd4540c2b517af017348b6b9a98ebc24e3580b751ef4b983ee574dba8da748be2144ba5f5878aa000ff8c0e09bbafca89e2561a2e84320a399a62ea474b482452286e6ff168154f6c4cc0f09c00a09a56b7b7aed7d804960cd3e7c3815f853074271ae8a2acb5ac016d36046db5afe04f698713caa93952e680465d45444f78cef22fdc858e2d9ccb03752a31d22266246a01012059ec37cc0570f0ff0e047655ec61cbf797899ef254648de1461821146ee6e897fbb42685a1a0723fc3210fc779cc8625ba88d86890f70bfe2119817ac0897a16b1cb647d4604316edab552f0c06661779f5c158e34041e061f1dbd09965c8b684d229321375f106bd0907fa9ef3aa7ff0decee6465fb3d5984f920903ed4b6fca65f71e0fc70ba454e1871709d59f3aa805cec1d4767aa06f19d41aa3615428d9d3e7205ae0e22b8791d6f7c18853ada0d4f72d8e2725c1d05cdc71eb53ff16d2ebfc7965129f18e81dd5f1cfe3137a0e78a7ae3fa2186d7dce4faa3a55b31199c65192ba63dde093816334df6ef3cefac687ea71093636935cd073aee68fe4a28dc635a32227ab2b5d01c655bc0df937322feafd5eb449fda506d626f529d164eb60bf11f171f444f8c6fa84de56d44526d1f8d08fcbe38a472f4e356833bc8dc11ca3e609f4ecc98cefccb344ea266993654960401b603c2754622075e69e944ecb7343d4bd161481da1a3a8c27e9f57f7810782e1b164ae46715bedf3987c987923e2abe7ef6d58357a7ee0366118b3d6ace45a7c2ed13664f5e385cdcc62e55b9f9bda29ecd3c607b4a0df92d065a202ae0e7c3936c16cfd0d3599d12b43fa81aee918d2e6f8d9ec8ba53663ce80b9806626f7d01934446097df1b410a624670737e79f2fa5076d5d2a183ba9f5aa45a4bc63d12200580b4ec50c0b63d34d0de9448d1c81f831956706d6d3242c612732756ad5ec60613d0b5597812cc5e2af9f049317c46d665850cfe0b39ca34ea4108a8d1a3b42cb8f1768f030aa2676759b4de3d3e869cd644888045d13c3c927252fa904f4dc94be05de02b2a373361c3568193bae3546d44f19eabdf5dad149535adc22a24d1a1feccb838dc73f57bc628182d42a2838477f862870f5ca05f5f99aa8aa813acd2d767eb2c860dc1821e20059728b204fe0897e0efb2074d9eea861da313c7a2fce3412d60248f1211cc12d275ca2aff33880ed144074fb55ec5dd4c5bb8e045c849d43e41f19040f902777b47cd5bd66e96ced565252035a3f864eafa761f6abf1c15805eaf258d679e48061a0b8bd91b22ea4d97ca0c6992fde352f4e860061ce649fdc1e9f8ef210fdda3cd0f893fd6e9b8a2ecee0384c4dea2cc7e3b4803902d90a07a697d6c537d8088dcf6d15e75a872403d3b2e85fc1be02e823cd6cbc09531b9fe967389ca99734d4de7a98a705e3063efe49cbb10eb561ebb14607b625bede0626e2de85930a1c4c4d1f33d60a835183bc4c06f38c1ec8452c284e9fad7972566b65fd2cc91c419c42a00b0cfb6aaf5b6b7881b7aec6894b58dee19b42fa164d90e0590e7d52492e04df7b0ab11649595b8e7824b0303cab159be89380c3aea99aa9b8a3191d26727654013e5ca83e54a012901f2f0b6090f0f375a81212fe22cb56113dd26fc96a24165ac9381a238e97295457f4d291a959037b222f2453763ddd6e9695b1909e4c2294a06336e0b7a047b8b74832ea327e2dabd122bd49f1543ed0313c600ece2c465cd58a7fedc4ca92c8c910743363fc694465cd806020c77ccf13bd211fea15d9dafe27e90414cef3b328109b65409e361635e98b2053a09030fbc0a6a07ef25c334ce8a962ed2ccaf51b52fec1e9838714f97649e687e019f7abd08a811a6971d5d7449b8000a40f34c975584e466ccdb79571bb898229102bdbeffd636bb7e5e839650238a3c9ce716e0ce47c8b0082dd1a9eae5b03cd921a91d3fe5c4de468c5325cbc2de9f0fb140ea143a246424f14de1e46dcf24b59150ee1514434454da9952f83a2de7c366680aaef8f202747614e835e7a635180dcf51622719e5d1ef803a6b3e531149f73f4b860d388a00f8d45b12c78924064dd03a13920962b172524f53f09bd916d4996c073724d1e80967e9b7e6b21141f61bf2d6583d577ac5510008e9ae1c1d5befd0168a198da8f1bc25602a57c3b3c0ca3a7fd5cc7fd9606440bab9423909dd97e0ace2303a6198ed044056340efa3396260d08f96b2180040d61f4c9b6b343068d76823b168d0bae21e7a19cd82d36528cc4f8773d04d0052d1aca134e857c2f0a54de577347dd332c69eef581b3a2199b42715b24657b7cd83baf9c4dc1e6324bb202c1677a9b949721dc63ff17b18c1e2d891401b2363d1c8a6597d85376f9fdc2a149feb937fc9c689f53d52d96b0471bb15caa8fb9c470a15b0126dd32a52570f7c27741fe4a1b5b1c1cfe24b5c967390a95c193a85eaaa97012e56413afbde3ce9775fcfed4030e69ff1c4d66ec301e096b074738e7708204a204d988798d60d8d9552071c6022042831ad15e9e5e568ebc778fe27e46c2cbae9e75b775bb074f94812307f1c4e362af797a85ee4362cfb84c0d160058dfbed6eca1b604ccfa04244583cc5d13ef49cbd4795da20deac657db4ba32945d3aad93e2a9b20b53dc92f4a4887bfdec75fd6bbf75d054eb4024e4a8162d01c061d03dd28181a21bf9abeb3dd8208f0243a314e4a7f13c4ab436d887924c782824b2376c297ad7a54bb15375c7209745b1835f369c73243f778155866390aab42bb8dded6196536d7ff388845a51b89e4277e98041c814a3dd7867e60b4abd14f8853df8f9b5d95b64c86d4c89b4ebddf39bf70bdeba1e85d8740d39c1f2013343d19523b8d97d2e2517dc4a7ec4446c3d4a2ee0cc3ed4c12daf7bb2b084cb3c5e031787b3918990b069451c0469e95413befebd3193cdef04453952f866e503855378ff6ec9a88e7a026f46ea4a8c7a37bc951b84d6be3e3eb539d2eaba148096a9b3aa2d244ea69317f4d9881090b5c764302461c11647abd3b6d711b35352961c4b7c9fe86fecec4d1c744bc61ba24f26b4f2766104489ef5aca9d22b2d2e965e740acaaae47fc7e61d5ce4d68c9ba296746cf2209504a19e801c3f9812d143367c56c67e6423085d3c9f019c6c04280be1c6935b79623faea0271c06b655f4fe48a28fd28262d0ea94349db52790ff2f2802215f18aca55a057a220c80cea40869a53aad95eebd2879132417086738baca77bc736064cdb5075782f8b19d1e9e8aedc1540f2aaab1ad89662e8413611b669499f43c9669d599630cb78119cd0e84e64d1035141372d0c1ce3fc71c5321638127a150ef23ff31e7047f061983e8bf3806d54f5e434f97ef02f25c7f9cb2c0ded4b693113c220cdf66403e55aa82f0cc032110f41a6cfdcaf31a73e6198f4a9465c8ee3f774cc60aa54d68f81df04234995b0928a9067145102d4fc3325164716a4cb130d270d135a4baa08d002b5fdb3b8a39ea7902dfeaf3a3c8f9d517cb56679cb391b752c6b9cb76a9258db2b047ce40892db394766d2a5703fca0e1bade5b3eda5551a0e8eb42e6ea31186575c1fc3150690bb217e3c325d8d10ac93a9530544dc874489f3d128b7a36270b9861e1bb25829c7da5678ef6c02090cba32c9fc40a5e66027476d3f8dd0aacb8803610bdc118c674056c7ae8f32b45d519a533e1a7c182a4473ddb3fd56940009979883d6384405cca36a930fa99916b63dbf4fb18531ff9985184c5efa67c1b2a82fe33216fea0b65ef8efadd078c3ce8fc3ba4f327324b0e1b79146ea3f3f654562d68e7e5cd8408a08af01928f7ab3a205101ea324fdcd843f18131b31fd1f56b9d4fdcaabfbf371d926e3c7760166b417d662d3b9fcde33c26596ad216fb7c86d8c459bae562e5506d4e17d023b164cf4d6021387d73e59b5a7325c65c652d9debfd309ec6c19100e31756229a2bd6844d245c2e775d6a13806c07c54b8f0a38f0cb7747bd3cf940a5138b52823bfdaf6fc89dc640814767b9b83a95117e0c7497153610a0bfca4fedb3614f2390a76c2dde410f4531f467f2792f06e8fd37f4b5d72da79a598f6f28a10e7a6f9ba17788b75f9c00bd774b02bf9140efef108514a545010ebc3089e03888361b32e493498beb07ecc62fec5b488a809c330870ef201c1d9a9162e3218c475104aeeb60031bf5d82c8d588a4d8ea314bde4f93f9fe2fbc351c583ab39d9586c8d32d29fda8009688aeff56bc0d8f87780e48af0ba3df200a7b1464a9089305f37d2b0081b07155f6e12589ad672c00f5d99727a824d2b76024d4ab677c684ca85100e9003ee0239300295ba71917dee7229f3bf61e33a19125bc8f227d746c54c96d92e4af5ab66a46429d0d1a57719adbfabd33eb97272888ad7d70a50e250e45fe2f5bc4c342132e9a21e527a881f07aa8ded011bdd1e28f1d33d2f20774553c511ead3131a126be8d0b92d0a0ef49704b99ed70a8fb0434e41184b4642013094308631968df20a390109174f27dab2e9a7b7c4ebbfe6e1f01cc9a926625916ebd020ac0a0a5c01c177261472b460f0bbda4ba89384b3693fd86a165d36238e9b25c8f05da49ff06cea8516a47bf4261721eb943b784a174a72d69188b09b13b05caa5600306524043b695bde271d02d9cafec9885591754d411e5c7839220b4453a396164cd89e36cfc1340d9cf0b1b945d6bfe60308087cf1adb57ff2511773233f3201fafeddc023f8f3d636b808b41e10c16a1bb447d87b1989460910ff6865f530535ecdf312c02a0f96e8daff5d3c0e2f69f785b2c417bb9ac1178a18ea58fca750d41e977bf2f6327cc113bca6a846fb7dd1719082e52a452ad7796cf613acb02e4f7fd9e437dc2c456368474b81a53d1aa7c9f70f5ef99c2ae707eccd73522e499b5e75c026fd716b353d844a4a205cffbc0b2cdc269878fdf3d6dbe7b1f09a561b2e5bbcf6ad4deada631ccc5f34cda80145f3907212bbd9946aab973ecd8efe053e817500374b7736a40f7b6d66c9ea87556f15e21e6bc8b13c161422db56dad915a4eda49cc484d19a8c6bf3a4d76cfc231a2a1e1a89f5486c3da1196f2f1314933d48f33e4a451de2a98cdc3aa097fa6082ee6f6ce170e66e0e26d3e7ade8c7e83221acffecf61c1c575107742b0c4635c2a6bc743dc64ef058a9f3fd132736c0bdfff847f624b6962824b81e88a202103c2b25cab3f654f7954bfae17b2d8e60e1cc42c31252e2f9b7e951c07ce30816365e81cc707f2c2ba16818db6098ee42ec4de8461ecff34c95d36f65e81a94f80af75ade8935ec11bd57ee297433a21550e957221e7872a8e8117566152378ad627cbae64b76397f34c6b776e2011302dcdefb7b343b51afd034e2b22f1623d9053dcb4aa78c80fbdb967fec5967e35c6f9f299c854c80aef7e91351e6837625b9db29357e8507d2d48f196bb9eef4c5389afb00890c8a3e1ab836961a82845eb44409edd5fccb3eb678a7d4ed9ab31bb5139922e5bdf691bad4698841ebdf560c7cbb727298e9b2778ca4e20a9f4313023be974f907f14e8f7f483b49573247b41a70ad35524deeac5a9551cfc3efb37598e4440854b3f69a195479ebfd8d5454ee86c26d46691665349296ae13c836d7ece8660d1a5c5929c7af63f269e8148fa8553c6b27fe38da500311d808f54a3d04c3dc83f4018b4f70cb8a94b50dc62c88229e844c784fb2ba3ffb6ac0f022caca988207b62e3803898552543e1a20bd01510e1fc82bb4fcf1b6794cad94bbe77eb2751d239ca1dcbd7f0528d2cdeead735451a4e9f10a1f61466021b5cddd87f885eae0ca1bd0e89be616128750cf44511900743f4bdf6fa33b41aad228c797cde430810f69bcfff4d40e5572dace36fbeb6ee9d3313f468c7a8f2273daa29ff2939e373978d41befc544e63755ead1e8cd9b5ea6723a99f6d4f0bf468afadf02771aa39e216cfcbe05ad7b9d763b7ce8f0b1ca74babdd7f115fddefe03d64d39282b4d98d294d0e67a37b058389b51351a91d4c090772e62bf0d2765357a7bd2f3dddacddc2c638a204f20cb9c9f811e0db1c2bb4160ed7958c983909dab21c011e896f250d682d18c462435fc5b9bf94b1cd44853f0ac34d8ab01f67850884d4a2173ea3bc4772a8fcfafaae6635eef0d43b79a8baa06e2641500398aab8949629310c9c4ed4faba16a88d6ca95a471dd4d47874df31d5cc146344d970fec86901e63f8e10bc38eb4b454a4fd50b687e486ad3f9cd26642af019f3db3dc118570df58d67f1196f7263fa4b73cfacf528876e325e72737ef4f57fe2bb5c8dc9f7943ab736ec68460ede1ba290a4ea4b309b600794c6263f970ab8d947ad49efe5b17e3747c72905a705f58980a743e00c85ee42166fa3a37fae38d4afa3c7c5c47f5809d9009a69962f1e2c9fa75b8b6037f791e080caeb4d2adf91c251fff561b9342c357b6a2f8fbeb32c11d697778f354fce7f5af9f1590af78eeea3310c9bb7cad8b9abb5f6cf1f5145654cbcbe0581c3e651bade0074d4191428dba1a2713dfe3426a8c426714ef6723609a59471e96a8ef0fb5ae8a4f948314da6168db88a800fb7f23201e7c7a0f3fe4185a03a2e11ea198479c32b4ffe841dbe51b110e49a852d879aaf49786cb984ee8bc7820e8a3ef269f3079bfd4030a75d0c3826a3d202d7e7d42fd10d3c2b45e8580038910cb71cd73a7cec5bf2ff6891865f13149a24520a905bb70def5586b9649ba090de5dc0a6f66b77bf5911ab8b80edb89f34dafc004d321a98631f1329d722c2255cfa533a6daf926510568200be69b6f51a2f12e3208d72b61e4991e51ed0e79d328e710e4dd029bc881f1055cd449994ef7e227335b0c4c268cabf9d17a824e9c78b5719a4c273e48e38be4b43426b67cd2d87c80a248afdda7a41fa80e68d825b817ace3c08126d5bbcad080355eadc7e419fd6b275903c0ab2e34339205264b196eee440621042f2eed99c95406894b68bd58e214f5de541acb023d20dadedd8a0e83250737a2159a0a23b5021a8fe23ba99d80222c1e689940c46050fbbed8f0ad69c0b5b0548824ab97d81b5daaac31cd22097188debd97c3dbfb91cf33ba0ec6aa0101238b462699f3725ee7ea46c0d8b09e8630ad5be55a4fb4e1061ac4610519f942f14e5fbee506165e0b58f8e26ce03394f3f3460b867457dc0c3d3d470c6269dd08aea301ec07866df174c75cf9f97f0c30b813c777f4e0960acf43eae22064246b6ad387308067b67afe0f669cba5c6689d8ebfb5129584b77ef889564773b13295cf781ca5dfa4c5f2d114db2d64d021a13d7d5125a3351a68090128f423323aa66175e2ff8be72e417e9c1cd0f3b5329b12c47df458d0e10b594b0b88e7e4dbcc6b3316a8b9d3f41a06c3338c6bb8d4592cd4d0fb9921273c64860039dc16d7f5b4a6a163223b99302f4f4ad16c5bed6662efa412462d291ca4a8fd3046a24416da9f49fd5172c9270b283d0f7802138087d999505153fba2cc42fda9bce1509cdf96b168d145a447b83e2bd13c97125451639ae580d8d4299708642fdfe6c11864f63daae9d0cab717e08468b6cb6012f72a251293775138a8c3e3bdc70a2445058a75cc801b81fb15319847d3fed917750c6e97de9f825838f7a704d4c487eb3fca6bc46f715d504696675d74d44c3b85404f0bbbfc07bcb7f02c2e07290e12e11ea4979cc874cb4c14f429cd1894d754e483f6afd40e2bc314bc77ddd81152f1de04a94ee4bcdccca2892849ad2674fc988cae657fe90764d632ef3c6b8ce1f6f795a920601e41501f97b4849fbd9bb00a9a296038583f145e60b4dcf3b659e37338e38c7df2701326e4c490ce02be0fa7bfa618cb80d04af40ebbc3f5a9746721308d42b10e8999820377aa50e7c962e0ca1c06f591ec44b30733a3816949d440d2e9d28f1fe14794f7558249420924ea08a0810f6cbd5a26452858d6fa80d4c97c29926e30257be9168860e5ba62a93215c0262674a070d54e296c7c7f05e22101460515e933c89c4d99caca7521cb07929341e2a4832e31a0122e9efe8a04cc038ce0dc9de0fb345ea7978b685ff21efa8c6f0ac18f5c67f20639864d405547197b046399b1166e2d8f7dc78335f28e58a4e045d2128b00bce9041001c95897eb1b4ce70dbae2dd74479e071979258a834d2176b3859f3a14b954841bccc1c016acdb1a2785253b777a938ca725218024eb428d2b7d4cf18299561ecada4fc4f3957d377b606914b95197102fa94ea9b53fd6eea90940a92f25bf5887a33378e5e935eafcada1ab832dc14b30e8da01592d68caf864cf06e3c13f26afad5e731f789a13c5e1b566df84c9d3eefd7ac67c4f17267e30054b4bca011c2da5ea95c8bab2749a561cf64b88eccd85d3f21f68cfa9945eaa7e6d649231a48593bb28cb5e4bcde79db1df4c246d9a72641034354e926a650ab9b353a9a3b58c89f0a398722250c8224e3fe865a2889fae2f2a8c9082611b44078e3366451176cc999a241e11d48631fa13d00c762e8a4b5a8b5d0e0d2c6808137ce109d3abdae87815c60d8cd04d414f177efbbf46bc7b1df02d7af8e1b5e4e084cffac6c17acdafef39a9284b147c02494c00870a2892c6b4bfcce02297732ec6a98bf3d36208a30adda3930f529a6c7ff2c50596ce7336747206ce57b826f254d77b3cb6e2ab57827a17082feba258ba306033e80b409530cef3eb0f5c68c9c959beafb7440a8516ecae0c1b16c0354dfc618454666b55611e1eb2d63e9b8a535a919ca23787d4a7335d91cace77b4a2f4b23f79e470c75e053c955f56dac5c1cf3d2565cc21d396346cc72f4beceb28d4f43e72ac9c651f9b83b308d025a2180f7acc0579592ebc1de853e9769d235a6d26fcfdf07ef366bcca2e8f6a6ddcbaeb47f7db2c521f0b0e318f0e5659dffb172dc2f0e2c0f13fbbc06b7cbb3ec625ec933ef9d54860b8839c92949cf26369238880b51a2fd11786f82075acc93de1842721a841129fde503432f0217f9c7005b53a5818077135679e80133f936d88742e1e16987063b631a44dbb13e1845d72222ca59193ac38a622b2a59ee8250ea2ce83a7f21cc7f979407d5072c61ca93499f2170decab63edb5e7eb387fab79790d648809db3bef891856adcf120e3e3836a2678ce940414cb942dec3bb43926e696aecef3d53ddbc1836b93f5414623728c50b8bfa7ac7dc9d6a21c1543afaeae95acf49be8540d42937983e579188e1025b87a40af4ef4227f1402fa7143f08e757ca6a4070f7bbb1bc3ded971d9589a2e6a7f7df5dfc10ec91efe77a6dfe898b87974dff839b348d3f34c3905c30c9f095f1179a0998e11871d3d224e65ebda3452217c9a849251dc864acc237794241d23f35d70d83a5acfa9f71781cda5d4f900e07c977acee4069d739e0348b9f5d69fd461f30855078f8e03adb575578e5bce8855f87fc650eb56b7d5abdbe1eb93eaaf573359b75cda0e94e53c6629c7eb018e6239fb94a6b9133eba1902f431e95e2f6dd76304f09c418560b68012492dbcce88c50ada4c5101f8ecb38d7d3f94590940999bb569adbbdfd9374abdd35194a57cc905d9d760886be933b4c69170096fd6ded354bcd7acc3abeb4aeb1fd3c241d62810f3b21c05645de08102363dc40619d5bd54c3c56d6e9f51aec37d0d16952fb107b99dde3a118f17d73f48798924b9b80c93081379ba20835ca75ba0347751a1fc9ce807850384bf72330e85e4ca49e17e78c20d3122d6bd8325003234c4f99c3636564db1954a63e7654c709700fe5b29a948678641e9264ac4288ca7c6d84c2ce43637c6302986d8d141c94eae01741be8f6ae95d328464a1a7b09e589bf8b6edd86965e971ed4fb6b5517613df1420fcf9a7824bf05785fb3598495601ebc4f38786f0b957bdfc2caa44acbe64d30a825da55ac9c5f4dda5837568d39ce4999a924e9a00a50e5759a46598e8c586024116d4dfcaddfa1481f26b7a7024be93f87506bd6ed61a2fc10c2260a3caab0a5601f4a10180ba70b1baf43a497b7af4984ee40f169fa306cd4da8674ec94fb7d25bb91700ce9f291cb66a56b0d481414bdc9804216615cb011877de231722df443de35b0ef89c65fe0c69df4c92676b709920825d10bf361f551a9a0853270e084358ce884c74b7eacde5d4269122487963669678648d1f51f19160f6e686572b5a4e036ddda22f55f6087c0a8745e1e7bdd4d9b5ab61f775170ca2084705e6e4bbba312814c84a5496c4a70db3432be323a8d58130b6b02a2a4cba601b2146c1528c5eff2bb8c8ae56c945827e2c4057453d4f57f27cfc6fb7492f8e98a8fe5b6da88480137dd423a28a924b52415d5da0de5149d4bfed665827c53287e3db9adc085565abb007853a879685d91af2635880c03a854dd706f471a09986f114eb99f73639692d0ef979adbb47883fb4edfc12a1eb92e3c887c3aca481c7a9c1bc17ec6364ccd6d86bc159dfad9b9380c6b753d454413e5fbeb5fe375119ae4980f725c79d184578076287027efa6a72a6839547a6fd1e5ca3f11413bf121a2e2832b7002cdc84d1bf584e1a7b4297c58494faa6bd64f305063ab7b87bacbb7e1a66f9f712f68994695df2611fdb662ed6f439f7ffb8c83e13e7928f726cabae74c03a2e781884a288f9bad844cd5451e022b59699d33e9844bfaac92723712b0d6a12b46964e451aabc127fb91b52e13a725e9d004955f890cd101d55a6013e6d63460b8184219a89202e57a2b103ff88202661122b4d6ff81a3ce78326069f800c1240373daa8572309a46d00fb0de1ba9f1541eb5caaf5d61d0abfd4b2bdf5feaef8dcdf53767f5f66fda7856797c25449f23f27668f958aa7e782d0d1186e67c7dfeddd67219ec29a574dff67b6a83955537fc8051fda24c5eaf615031e7e414c3c5bc6c15a5dce2179e7258c16d382f3e38b9714d01240a8ab23c549833034fedbae18b20f3de2c989cf8c43808acc8ddc52171ef6feb11ef1d9e3de8cdb48ac2715075f32b827fa7da09bb7efb2fe82ad98149ea821c71c16bf66bbb8a36762417f0371b0e47fc006465f4507a96ee81d6658a1a5b394a5f10a301711584b9ca671341808bb44e6579412bf89d3f4740a64b18e30873d0508efe8d249d8320f29e9bce0bc70b48df5ee2acd4eb1fda4671896c93655326c021e9c48f70d9848207e1a43c870aa0e5d8cca0a3222c3f8ce69d1fe3c448da2c044da311f1bd6ac0db6d857baaaca16922924c76760b61dc26ce97faad813945669f77e134b05db2c28385e5afd8a693f82e4dc16e8d251f9c64a39d57f8154cd10056d7f669d90fd33a44b5e23f948a4cd17a980a1f679158eb17d68be7123c6e707deae747fb7df585f6ec6aaca780cebc2d012fd2f8b64ebabd6ca50c2dbf53c26231c0b72a9bf674d589b7a4ce703b6cfb65c5c925faa4ddaf4e83cdd1a31399f5efdff287da35a3c6bf501b0074b06797e5a026119c0f8066cc26fc6e37d67447199923a3b4bf9e3b1d8803b9b3f7c7419dcd93b39593703c1948140a974625dd2d48b1e707277cd89e721a313f1bfe70ec607cbdd6fbee846fe996b1bcd899b4d0cc5a64612c05de8801ca6eba7567888787b982c45249660f425afa807477905f855cbf4ada20aabfe32e515f7d42753515a20993523006c2e4cfe07978497082b406133376ee3136f17d2c51df809237bab6dcda43bf298e9caa2213f57755889ff366498f8d001d869f5ea5fe9b785a0b98ef5d2b99bb39f3c009030f294e67e2650f60d80c8b0d5edebb410f81269d71c00808c0138897f1b47197b64eb80a3afae0153f5784c1eed78d15dcec1481265c97c15a0a9979408a0c11a017ce2886156b7c85fce4a6885e52517a7ddbaa00c157058cb65dc54cd82c16b037a433bd15b6b9db58644637ab2384cb6a0bd560cd13c83aa8d7a652ed7444a3fbcbc0e3f82e0ba567aecc5761eeb7e6c36c80ea36f9442526eb9bfe4fc2a070c44c379df3135233a7349e55eb4a6a315aa4eb9257972b2f3ce327536a0862ced5ad64c42b90dc2b883f4346555764020c3ed3a4d82fd886e0eb1b84374d913d70e48b11ac5e492b9f272b36451d6a439a5bdf95c3bc6c68998a3be6772b7fae3b2e03005127b1738ade6d40b8df4f48059904bba92a00ea38674a04cd0fd00e81d5b00fde124bee0f8d92ba555a55a2b873491287ad45eae51ab166244e3ea991b3989f98f475e5cbd22fc045de39b98f77bda523155ddbc80228eb18c6a7e8583e968fd9e98cd8131bf84ad3a33f523070da76cfa2eb244c229ef79f85fae68b080b485fa012d84deced39b55e8a0c62757abca4a10ab68fb99f8132fe19d5f8be3403b79d6d4619e3509e759839eda842479c3d8a38806f4a55f10a03a89372b9578c49d7aba5612ca6333d3ea1e0d2f59490248ce7c5dcc5473384b6d66b647518564fdd26e4b07e7d88d6d43a0c4348ff2128c267bef7aa728fe83138064a005edc85ef40208b66b0a1932f371086855b59cc0913944f2c1019beb6ded8be0bb29ef17dcec85fe26398569982a36fabfc9b29083ef85e95f8a8f1fc3aba42cd7e983d841ded7d00770af4c3ad29decca04b355ab15c456d785fc80b56b621ade44368a3cafc989578c0c672cf90577e4d8e953af40fa46abebf130f69b9c8eb811d407b5a37668b78c4f54d0f405a0d31b370187c32dc22723cbd663c7ed90c6cd2d365d35356b4dc5c7e79013c9483ba2730e79e77653b39dd7e5db8f4042a270daf7410a1a7f8e15d30e1c3baadecfd655fbbde20f5af90ee94346e4657e6157e1166740acc6da7eacdac1aacdf8cb78d3429469087cbd036f863aa156b5ce4feb7ef0d25dd7f8779633a7ff803ab2d0f375f1720746062bb72802c9aab8c3615779e06c4cade60231e0fafd92712ed027f7d9fc07abb24b8912f6e41fb99c354eb2eeba293f8d14768cd6e10e784abf9341ee6afa89990861df54264fbfcc4e8383187062e88d0ea30dfb1add0a8a8e95118a5a9cda1014e912498e017d4fb6e57abaa500fa75a610aa9bb3405477e81f866db6e3c04b7c2a97a13fcd95a21b111685557e70c2fdc095dd7ed540036b6b5ef40e4175a154e95cf2cc14876aa071a681e8319920a7a05107524f28d9c7f56e01329d270607cf4fe1487c32d86c9d2b531c285a9cc08fe94000b20f2a01ad535688d81b1234a1e79d925724a0b702b0a812f667d8c87e08003188361ead9c1895a140562d602d4a05848c60526cf88d5a6fe1081ab8b5a0132a496b45cfdfecdf44628b4584748465fd151e0a8b9599f935f729dea0b32fec20a4a1aa8e256ccac580520fe7579421ada85f6f32493299c80a453507839ee7ce6e14248ce12398af6081d57d1867ac3105c5d03f08757e8ecbf5acf3a5564baeeb9a4893a23d03207a559fb15ef4f7535d1072a6c64298c2e0a6cc07aba935c72a29bf8fb71cb7e7aa0199bb8408ca1569b08eab1f9ed85f1e616e36a4943286b636795ad720933a38dab3942c54813af707881c67d0e7859526d55857230ca708773298e5b63b04af93302630fc199c7294e7bc15736a08a8636b2da13990dc6e36657a0f1027ce3175aea4c7f9cb819ae8a596a8de03e3941707396bf53f6ded2245c2718ce684c874e026bc807975a4c359aebf1f8fba6fa7b64bd12c17976b6e3f25095a63a1d7b2ba8327ec94421622cefb7cf035e90290689ab628812cb7442c32773c57686156062db141a3f3b88b4094e72384faf327f60460edf6b1c6c272225b0e1537cb4023c092d19a729d7b60bc1cbd8634b49a66c8939714480b2bb9b2f5ede70c75959914d0742b8a7f15ce517df306026d0329099d46bddca172f5059fefd4f005e4f36640840e148415712cf29a58d93cb3ad727298199e29628d2579fa2e4576176aef7da05393a27808106af4bdc6f10ebb5c95b9b4c549523bd89a4f47c3ea9fbc0b5bcec2ca0b40f8a3eea20eeb3476fc3106ee4ae8924ef4fcc11a24ef92d57624d6a6d88e64b8fc7205c9a3459168c6f2a73c27a238455809c5704ee35330b67b08f5723fc778ae06ec5fc5e739f34b23f88f47784330de6f0489648337f002e7b206446e27853a3f29b96bf603db206ab49a32cfc863dfa277c27c7239efb7f055ea2460f3ada5a2287e0e05123906960477049526e3f53bfdb536cad0186acfa8465d74d4d31f81aaa984cec1f69942c594bfb2265721b5d0e79fa8bba97a54486b514cf65af8213d329a1d8c491935a7912a07fe82ef14e1946ac253a2e537cf19aa0754b70348c4179dcb216f27fe9a4b3397b81171202747e760d9b68bfcea7495731283b8fb0ed0c2324fba509ff70234dfc351ea95044c36be6f32021638eb3b871f20d29053fc93764b69480626eff29f133147ac6842c889aa1f49992db5524d06588eb400517a57cc11f110c515ab3b561345c2583b03f4250fa38e304981ead19a42c9a0f7b89e242dd15202aee55c7aa4684cd17216f98b1ba410475808d784e83eac52454b0f082155be2a88431181fe058ad9be4edddf014705b9e29ee63179ef54702bc7263d1c357b13066a686815f768a2942e5c765402dfa821f6c0c001a3ab32c327e1e3f9cc0f1c15529fbea1db314efdbec583a92ff924955b27e17c80a30f2c13c40051dc19d2c922a78867a44606433c623b1a2f120619bdb1752b8f2884a04752a04be3bab1f55d0d2f82434c98fd76fa7bf5304aa0ba1f29abb9722ea7fc843e26e76988851913194e1ba81970a74a4c88248a31b14dc0b6be71ab799a3a38e9e5426531dc77698a94b1fef82fd60607c234801387df0678201a3ada2437c9f24eb228334f465ef2e394e90af4723f7973d552680fb29f7d8f6bb7a3526e3a3ef1125e7c88146570d99aafef3235ba452a8849dfb03898fd976e7ae18d4a056b810ec2e9f8061f1250e673def1ea198019464259c88451d07ad3e0b05cf4e606bd6db3499a9b62543591e2414c74adef5ee79ff0bcfd144fdf26f83022591b4681c28561ec243888578d291adac2f3b87141547837fadfc3e98eb50e2aff306c982eb240ed18a64c95e3376e8b7807fb26e9388861a962d16a7b532a36e3136a147d1250497137187ea6da7c26d1cd620a02260003c3e91f37b6e990862f7155fe74b8e3d1a393a03cd625e98ea124761e56a32a926dafef13ff8c64790a7e731af4bde73c51270b1a427c5cfadedcf34b3c90a325aa4dc20e72542ae754be8d44dd3cace8bf71acbb79d4632de81e4f896019190839d14cdf5b2dc901d4fd7f5069160e3b5cebec88a6008de6e8c8fcd00338749bc7b23d4edd106e4228f609e544dd2e1c603f51a100d44502c3eab449c350ab87e3b1b2109f9d7863b33a4e0ae52fc3a28dafbc4214588d367124401e3df880b72b94da04b1e64bc9dc15efd3f295f841cc09e0402f432ebca9f96cc78563c7709cf392167c8a4756d7e5bfb7f2f4c110f6f45b55d6efc09703e868a2df39960391b868e23b440b897c1944c7d98e4fcd48ad6e04e515160d3d02489d2205dd7ed068ce367d1b5aa4b30660210e3ae299483048937c7141dce48557f9167cc61a51c3700dc529e4829547f3b61194860ef1802b2c1b577ecad9003ce93fa936b80db0eede296545dbc594441484da0afd3bb8c962fb8ee9d293e435acecf5e250af419254ef81b30b76ee40927c4802320091708d8fd21420dfafb6a76f913d81caa00e42ea18ab3c9354818260d30ded891bf02de8fdd63947158604297d559e0aacc9885bceff45db6c836e603ae2488032bb4e6ad8df112f9b95540d385bb81eb747480c757ab6b397da25c2e0db341126b9dcd5b21890d3c7c17c8bdc10735bb6214a123f92ab67c2475df7f68f9b447e3b0ccf8bc30b4388628c47bfe07073f2d77e39d1d86920174796074a03fa59a194ccbae1baa6929b337b1bca2bcfaaa813418999e4b2fb768655a8000e32a66b00af5a2ae41a403414c3145e31a6e9c736f265031398929f80d2b88f04e6324002fa1662e7ec6a1cb2e1389830febf5db6a2cf75d52349f5f4c3df54178f830e42baa6b08b0af0b92a067859d0b2b472d6e6aee12dffa09d57ed185be52970220e239bb0520848962aca0a1b606bb1bdcc19c102748207af694542baa5c2a73495287aba0a5486961fb6a973e76ea1ca9c8718e3864f1228057868b09993966bba466865f6bd136880374fd7f2a849b3ef983d1dd359986234731b76367ba476b3c50d149451edac9c6c2744d25fb04159f0051981c1ec0a0d5c5f6d1d642e8e2bb67dc1522e8fa4949d4ca3dced1311cffec000839bbff62194051f7871962b74d20ede2cce1cb058418f98d0d9b88716843f7a7e7436f5df943e63e0847f39644a60878dc7eb2b9c62656e3118374021f9f2e18499ca9919d20e2817e0e3c17578d1a099dd749aba3271810020606b4f535d4cab69b1e3d85e3a8adf29f485974d5a51deac0b4fc79cc4c65e2688e4eb275861561ce549dd75980486f8fe78d25c44139fe2e79853c7c0f7ce7ec2154f67a3030a00b54f1b79a4aca673cc585868b3c83f062363a9b55430b5f63c2b5d2a9e0ed7b7abc2a35642db7ec4780542b181df494ccef8fbd479506d7e62f4ecea78133012f969104975eab8b6551bf01189ed2e4a5974cade921c095391f5d85607ec8879bfae071783c897ca6952c778ccceb1b8cfeb36c760a3b1ef24533885e0218fdc3df64041379d8af6a74db7d83965a7f2ac8cac759ba23400027b0a31917ee6d555b4621b9ee5b979786f7932b4f967570988c9de2dca7678987fa2db28be205884f6db26a9d9c4cc96ef9d326404f0862900f4705f52362196ff6e7cdf5a8d9d3bc07f498640a6c523d7732713d1e07da59f4e4d71356318223dc1ff3d4e2fab0d8dc0e8b57cfef703ed5cbb2bfcfbc5d2a626be4c188ea248b5b89cee19cf3420c7afdc6f446fa8be78f5e9ab69ccc8593e73c072d5d8865df11b4633732e04b930ce966698901387450e2d03ae880fadf3a809d11df3bbead6a74ff475181914487bf3b07c14694bbb08100ee7a7c5fa5d0a7925e692ae16e9d2a5d971c2a212804fe05d4b6d4320ec4cd2a7366586809e3d252d80a701f294b02b5b5ccf0af58cbdd8ed20d5d43e12b658b090032dbf4ef48ef6932d382a1594edf2539985d1c59febbefebe06871468b807d66523674bb6c282b32bb1dd4397202834593b63e7d81c5edb46a1fa8520138dc93496a649fa251844ca1a96ca529de9a3927ce03eb9857becf42b4a6af6748ac7df9af261373a1b1e12ab0e9c1f0024de6348696279930cc2c9aa4d06c5c5620bc9e43ed099b0d2ee88c352c849a1d3cec46e71c791f251991b12346c1d38b39fc6c318c4392ca3ac2f6be1f284c0fb0d63c0ba5f836868897b1d8b6c361de789648500a5bcee6f0de32a80b9a6dc0945739b72ee8209bcfdf08f4c40fcbe2c645e25ccf9951ce0951cdad7fa4ce4e8e8ad71fa59c83c13551092086b9b43ed2d2a89714b6f4b03ae90556f35548b5b9a683302c5298bba874dca7e5b1678ee9817e4ac6b9298a09a2b6e1eebea1948c576a38973675497650a82304c3985597ed11692ce2711653e1219dec6804a34878bd09ca2d0109923e00154af9eae1364b0a394a38535d11562dcd81bfb8199097e2afafc958f1cb17bff8ef6b63822e77c65d5b63070e035cd49d40a965456b77759b50e6a7bf1c398d3088b68b9723e2c86d5ba667485fb3f6e15f5d49e1057dc8304f8b0b9b25ac291259f890dbf568544de159b9bdfd52e6790283679f49646bfe4b6d8c1d7e9fad4ba699e3e207394c039aaa54930c2793e814c5185308c6a0b1614d1ffd8769a996a23783961e5cdd9bfcb435b226b2c494dabedd1e138aa69df5c059596477c5e4b6a54849dae5e49a9e5719fb7959896947d38cf41a5e5c41ebd14842abb50b271114c15242f6dd1285b8b768a1a58854c8b7178df693956f23967a8c1b8ab04a5bccb436194c4e45f11e995fb63f54f74088d08bcf3feabeeb9e851fe35b22f1384bc2cf7d6421c56fdb0eb8adc78dabf088fccb403cd3764e10b6c049aa23b99888a7e0b4068b41f2f72e89cb496fc60f6f6150117c3960ef5920c680bc1ab05243e6bcc2d58125c62d712c4767823e189e930109700ca4ea9fd0e8877d2b2f4b544d443a1a249cd5c4e895761c056dc1ce53508366f646522b4d870cdd7d46ee4e5505dd1fdc040b9b6cc3ef4f5fd62fd19f22e43bffb4ef9c82b62421cdf9dc848047fd4093313078cf1a5098831aadade0f6e0c64d9edd32285c8d945125cc24eb44e8529c74053ae81ae887cc1e7291ee3efd7a0f9a4a2df0942348887088f56d2248e42dcdec2807215128df8aa9fb731cce2798a465d0ea432590d34f066c83336180fb9abcc2526a30f41cecc60509a3a0e2ffc7d31109d8975bc7c08259f9a585231def61305e4209dd868fd7d5d25fe906970f8e80de85e6f0855a218344457270bd5ce412e31e6267def85a42a41887ca1514e032e3f50d266bc50275357966295d5945b0d0d5f541a4f65fede598d8b18f465dee2dd592673937e6b9cd09976cc9621076438e9bcf7724773cd181c5a52b348a1b0fa209fa8d577a1e5afcb7d3d48d149f99daf53f040f91b42a2047bc3e69d8f1183e2495b4d91666bfc5cb7ff14e7c778033ba027d61e35042f942d982099796c8ba28116168107748f988f54843f91a91387260d9ed844d870bc52f15c434d16114a6b0cf0837f376c55127904abc47e50aa9dfb936a69a94e325cebb5337a89e2a57fea8ec431f0841279153f50664e2c781e30ce88e05cb735f39f1604d2b112c3f03387002b682c30a064dd27dd48bb572a3156b5d953972e2231edba5cb623249bbb4735a61811b825bc2d8462ae841006cff8b2299d36d16427c89f5afbe8e09ef04b82b4f313b14e2e9a8ec7cc31ba68890a94cef2aed005550f07a48075b1fbcb3ef67c9a67af0b1b88fe49ddcc480a04f31f62b30a4ecf41d5a520059f6b805396b74a4f31baa25cb2f72e95936e46013286f9637c4a2adda682954146e8c5f52ab9552d28bd8f3eeb6c45f274c5593f002d1efc8130b72d484a3dafe870866f476fe89a3178c88c7e2960c16083546b9c3bcb0073b02fdaa565378d1b21d65a76d837e6bdddeec6cf9c0b3296eae82f0a0b18b04edf4dacec1ac79b5ca432dfa05b7e27a1a26b6638f5119cb394c34268cd27db5a9e7747b462a5fc293789a178a08d8960a8927db5ab7394928dba9ec6f290269ad161615629840cbacf005bcb606a56c5a2f7945b2c72e1abe5eefc487732c91908ec67a2fb68fe6d6381dba5ebd03aea9f5f83b070439038047f041aa7a7bd5b2052b2da1c96cf20bade6378cfae106d42cb94593a15ddf45fd34cd09cf7789d02fd35ae933457d24cb0f1495dd5d2bb0a06e801502148211ea6942ad760e514f2a8a6f83d025ee8d1c9c9188d58d5566d32ddddddddbd654a5206880b610bf60b3ffcfa8a180890558c0c8e4a916ad0aa3c593132d7899ef7615830304131356855aaca93c5656b47fdeb0aa87fe9f8b2e586a1b8f270e451d5a097ead92575bdf592f21ac5e9e5e57aa5710e9884943011dfa75396866035c6fe92bad7a976b5b0a380e406096df7de8b225fbc866cf5a8f119aff11917c2afd6759fbf65caf9fef586cdf875935f2bbf8e835f2a87f1eb94f21752e40932b8a91f250c6cb28e17ff527e5dae4bfd14d9d281f2ebb73c5b3b0e70c619673c8cb7745c4f79aa3c4d1894fbfc756a56797ae579cbbb44de1a7995d8e4cb04c5e541db27c67a312e8db778d0d4d88cb7225063335e6333a5e93468bce5214c8d4d5662932b151a64add184837bde5a8dead41e443f653e14fdbc1f8635e83a05e59871aedd2269c8181a3653bef0796b90ec767ed620ce2786a23f9267756276d02387d41ad2a74b228af29d4ba0d680eaf4771d9581124fdf4d8ebe775808bf28107ed1d88c734e9bb438ae4543eef0507bce6fdb56b674b4f360b30605a58264b866a9b3dc936e5d2f5104d5b195c2505e82a1d75a8001dc541327f5f5fb5abf52ce65a0ecd5b93c0ff075b473cbdc7ebecc6c44f46623da88daf3ee25026b5c112dda3dcd5fe2b25736d97c364d17bd61666f4aab5ccbc985552084a82e8fc1b74731f45d9b7ca53a1ca8e48b95dbcead215c4ee8052a2f50c0fbce999e81deb4b7571abebd5939b40fdfdd3ea443c8220a48a89bd42f755607b88de300e0848516cf71ed86a3755536383b3729a0dbe6ecba11e2d2a77e9382cbae83fbd68eea9b6f5da95dc16e6500aab0afa753ae007afbc4adf12ace0e0b38391c94f650c5c43d1908a8614782902861f2ed3dc2d8e0b676549b90fb3c64d8d32956043d9338707ecab82a21dcae9dd6f4edb4db9fcc9b1baef91d96455d57dbf3eeadfc799669cf32a02796393d3539310dd188908e966aadd5f34a7ebef57c27437f43b6ef2a536daa57da5e55a5ae24f7ac4dd4ca9a84de5e816a7b6d6abbb1f885124942d7cd0eb73e3b61b3cd157e388207673839a3092dd617b062840a7e40c40e643011eb6e0f85869cda133d926b035193c964330c293939ab51d77e6423cd064bfeac4267655267b69afc6a76f2eddd4dcc1ad45e85aaac0285cc1e7374ab6cd6715c2811bf241076c1606463c93dab118abc2e9ed128363122d246f58836ab6f7bdea8232c37af230c6c6e0e24478e6ea10523aa65a35a8e644344fc6217baaccac4097fdbb6b515775cecda99f316f8e593835f3e39d8a43fa44948cdb0a4cc532b2a890b03901f3e727658e0ca93d66c36ce87639028dc3ca4483eec33860f32c43e3b75df461edeb6a6b6395286fa9c37b9c382f78538be3a772187f31cc7b1f7772b3499011c8fe339e7cab3d6fa793d7bbc101cef79fe3948da53088e1e9cb3c02fca029b1fb9e383f37ac673258f1a441fbd0c224375fa21f59b84407451149d236d797ae4e923fb6a9d8eb56d6d22b20debc8655522bbb61ed93cef471e67733beb91cdeb11d1057f2b96945d95acdcc873840b7ffc882186115270cfaa7456a0edac4075a932e12849fcfabc6387722bd26fb687c92aab53f4f0f39dc7c02f9f18d8dcb6f007bf7c7e738e52f9c1e65681f895636b72ab127ef19092dfbce70586d1981086d55847654b0d9afeac32988d6dce420bdbc604b383905ac00855833431426bb1a2b33ee85ef7d764578ee4f7f94ef7475a6b81bcc02658fe6093d25e72bb3c99099b9593965cdfe4a3fca6be1d45ba90230980da3dab937360e94284b058e5e7f5eceb52356c7eee954ca5642536dbcf9e356c27cb10bbe8ef642162933e0f36dba9123dfbca4f33e5c82e1167a9f0cbd2dea341ba99915d82ea845ec3d03bf214cbb0b4a00bd67a48d20fb2e148fe1475a844c990d216a3efbcbb989db6d605125ac301966aa97c15fa76af5685c80a59246c56df8282c0d0a35ed72e65dc5ab34aecaa0e8029b72672fd36c8f6119b55885f1fd5a902ba08ce9aa9419fe95c9b8cde4abdc42faf6163399bcd6666dc2096099b7588cd66fa28f7b44a94a46270698d8ba6b7355bb335281e15a5eb198d3a5cdf54d8aced61931bb0b5affcb0597368b8a725faea413e1f52bf63a5af41da3baf9ea54275b800491950efa07be4c995676995b8d0797b48ebd1a54a5b987ce74ddf5a256cd6263d40340b9ba9d2f7c8b64cec907f931be03f9ba94a5ba9305b6b57f5ea6787e183af4e6b0ba10abda935cc16415dd56b4f2cd3d7daf4d5c5d112d19bea0040baedf44fab447ca2d32a2dd9a7666a9d3d6b75b9c3fcf63e62627ff8057af51ac65e50577531bc316e19acae81e9abb751cf9aca69f367cf584937cad950be2af16ba9be8df2d59b885f2733792795c626947ac466ad3d5057f5cfebd415e14f4eaa4efcaaff535cfb953bccff9c69df9e2387e7791e4d81cd1c5c5ccfadf78352da44a953d32eda019074db3df74617baddf3960ecec12f5be0d70ed31e7c0adf40f0e8195feb08be6a80baaa77a50f36bb1437aedbf675be8d3c31b02906d19b0af3d515e079df6e6f97e790ce6cff4aea2db410a4a5e3f3ce3fa7df9567477e6402d8a4ce12e29e94f6955d990403bf8474ef81feb3bebff003c8f79bd7339e370f83d8ac5fca864dd143ef19bf5aa09f35c86887f9a0836545c2e613aa539fe82391ec41f2609332937a4275ce6b5057af50a80ee89e772b57af7a4eed79f732a92ad42091997cf5cfcfebe23c5c44fe2b7b7c62238f3cd6690da3f7f8c4c69352f19fd329ff3998f45f79facc3e8807fa9b846074facd632c47ffc8cf4520ebd8bd1a7c64b4a120a01f1a6690c56cf089754f7cddc8175ed86422e3b821a4b53287e06604d4e6ec8696983c7e72a279debd2c96bb4984c35fd75aab8f91b541ff6db67e6ec9cf435204f2ac2f42255f368e0a9b3c2a4025827e83c3e56afd6c18866158b7da9f3eb3efadcc4090cfbb262c6cde005dae894d2a9efecd086eadb5d62ecf1ecb35bb58e7b823aa63b7926be268fce2d8c64f960d18d24ffe95538689f1d59517dcb343d229e990f0ebec823e885f4c63936b7e2b4ffb9bad7fc32dc9ba515236dddddd92324ebdec80d8b457a88ef59243c226dbd4ae334e96277f4c9df118afe30af66dc91d29ba27bdc2b42b47b8267e91cece61e19793340634507a27e98b2479491245922e24395acb529ead25c994bbb50be0a6e8210ca6b725a566599eb4e645ed37df61d27fa76d13bf9c5f9b8fe0cc62dd4b53e3341eabe5274bb144f4868788f82582b3f31097e5e9d170b23caf2d4f9675cfbb97c572374d9c1a39357c2313c002f378b9230249bf0679d2a8544e1bf696259a21375059e4694f9b982be2afc80dd43fb923fb27777474dafcc91dd9119cad8396c2527a04fe274b01c953fc48ce1b06219c44af40e1d710aa539180087ab63126830e81daf05c7778763a1465c6e4cf7a34a5064922a50287d99facee6ec886656ca8b214fa87ce7e107fe6340a3a057c9acf38cf5e6ce183a7225690258929621e2002081b2425391923089f1da0347194056d09299e62375bd0e0450d7810c41065c44eea54031e9e9fd97dc704536a90826796fd654171cda7536a5fd494b828c23086426213a48128e070cf0dbcac076c31cf27c69134b6913e313a823410044110044154cd6e514385c4665d7a982c278cd3338ab625714f70081ca20184a2a15047edaab6568ba235cc6bd751c3b618db7a595e55360baa061e358c4675a85747a1923c1085e480aef4fb731bf24023366fed3112dbbcca79c7384a6e442438dbca6d48e82948fb0ad2c023f008a48147e01178041ea16a2fd83ade8456a84c29a51d94e487e64890c8015b6c136a57f52797fab9b14865a8673033d39bba79d003b6d836446faa6f496a0ca1c64039a99a6638176b42936b4293bb09b1c9358466827a26e88a3582c411e54dc699a03bd343aace04d5ae3340ed7299e9817a57c5724bdb9a50d7767a295aa3872641de933f678090109a0102955415667a386780c014a882d8645509923cfbe7cdfca09cf8b50df118f4b5216167aa0aa0125009e9bd59bb59fb801a73295541aa12a892a89a9e7de667e6069410ea04a8252827d5912b93c9680820974f5e24b02d8edbbabb9bdb6c77b7b5d65a6fdbdddd5b3a8917d0dd6c49636666666666de6c3333777777495ab9373f785ebf006156ddc6966b529dfbd55d54a772486faa73a55c0c359d920593af4e2bad51ae35b522213a4e8e9bdd4c5718e9544b2e9d4265cb532a589e4eb981122e9e4ed9e2e85dc62d889e4ed94228cad32937507aa631d320880ba6cd6e6c14c42434139b206125ef19b1ac0d9bed9b7b54383515a56ea646b5ccd99fe2c948deec1fcf5e6d949fcb484cfbe1569b02bd691c276ef54aba3893433615d355f9aaab418fe46b189e5c6be521f53350871ef44a1a61fa0cd0da83e5e93373d14f9fd98ba7e82bb2555564abfaca7d62436c36934ab61ca0f295f750f5c4b8cab7a31268b80c855f78b8ddce4330dece44ec845fd7db99dad5cefa1559b4c91e76c53d59c69da919be967589cdae9155a95261b37d169695c9534c3d562e5365c81e195f7909605c7e01e2d619e875d6e50dbb9976e694ddea04c9b32a7d3b8f3bbed9a398c651d86c7721b9a7580aa1b5ee236b5d4d71abafb2b8d5575ddceaab226ee5380c9730ad2ccf5bfeb0ec65881715dc23fef32bfe2b2b906ac93debcf77653247cda93f9b8ed60e9bedf55b3bea730276180524345bc2911a6f48e710eeadb38cc678b4abbd5b5cc9426c090526242689f488f0e43eedf866dfecaa92c64d546ec91e86a9bc9d888aa4ec0a372319cc9c58c63206fa0103ff7c2d601993519d757b6bc96a0b0d4663ed5c63166d6cb94ce397eadb1989ea80df1e32cd5a189d8113925263e1179d828359338d97f84af7d3b75b7e750b48b7738d9798c6482d6b589dc956a8f1b58c32e445666211d625f74aad9603a3a7e510fe0eb0fe242293c97e080b8590da9cedfae252af074a19c8a4ae2601a84968122ed5d99e47c824b5f1e1b6330bcd3d58af8b788a380f818018764316c4affa748a2d646f9d9e0ce52d3b79cb333ef2ba8d870f7e9dcd82f516b82e2ca5526b13d5d9dc6e3c9c371093b727bcf58d748571b9a0bea1b3f7349086b1f5d17bda413f7388346c2c7bd8a688eb2c0c519d25145691a8cb7a116f2b126f2912756d6c9f9afc51bb9888818090745018e3405dd66b358af47da914456a261c300ef4268a256f8348f9f0d6cfcf02d11beb30532e1814563f8ea4d46e5ce9e64202bdb1fec53d4978eb8c03a53ab42b4fefbba9ad9ce9d92825a43627fdfa072034d73909e8eeeeeee65ea70cb5dd325dfd25746b758971ab6d39b9a96fb721157338f498e7ecd511973d87a3bd5ae25667176ad86c56f5b07a51bc50957471509ddab09e76b1ecca1a36ab75d17b50dece436e9d8748221e3f5df614f568b7ceead26bd7d65e4474ebdd0e76d0d9c112eca16591d1dbbbd2d9acd75dfcf44c562a75bd08ca5329bf39f7deebb734e2a35d658e79737e0797c6dafae61cd430b18e3c3c7e9a7e730b5463d66d59848858026997e84040ed12a3d57504da6d59a4a8878b5b2f82f2b61e015bc4c5adb5a5cc96468a54a2766dde3eba5856a1d859817e1b4b9307505d74eb6715fa422ceb513d6ad7b6f98b71c4e3c706d1addb307a8b6e3d02a33707356c2c2b52bb841a26963cd43097b22eb56bf3a0df1ce68acbf9e6b569eb6ad36f5dd7f57ce81df97ddef93ce7213984ffeb389e8146782a2a2efbea887b7a9c9bfce2dcc5a35424771a245b3b3a48e89eb7d3a7a30b4140df9c2b5d2c83781e7ab78774b441a887e48ecec1d68ecebb7e47da901b39844ffb38e80df51a720711521b92aabeba539df02b0a5f5d5f5f3f5cfa02844b3de46a83c91340937a26042b876dae535009faeaa20f1dd56127bbb8d477f825745fb65cea48869e43f1b8a8be7e185a1cae8e9affdc8774ce2d137ed570ce2d5137b34642ed6a9809ce99ceb14af0d3fc9c3f9be9f39605b9962d57e0ffbc9918566733994c360316ce5b4b3f716e65f687bbcfb9bd62cb736e83f8b53de75688615b8c033f3ee217c79d15cb73fe3a1be991a07c2c4852622a9c27a280c4e33ef0f3d1c1f2fc56f8dc9bf1afdb7e66b433dd4c49d9e4dcbb34425a54cf7937519d7ecf1359f4d004929ddac57909a48bec29ea31829b658f0d1fa1e49e119c76c358ac1a6403b1c9b90db283dac5f908244d79f2781a2fdb9bd5350d03dd1b66e3a0109cef9c2cfb874d2eecc83ec226e73846b7e3808e903dd4ae7635d3c72acfebe5c902bd74cec3ae24dddd4ffbee241904f4b2ebc052756d988286be1ab3b0670d6b2476712e829f1e8dd9ac61f5a99b81b3cfebd391b2913eef1cf46e6a1bef69b953cea6ec6979d9c4e53466e336ea13cbd8ec5ca40ff207d902fd86d31809640b2c5b0eb071123c0236fc4659e486db7012ca22453d6eb80d2fd253d4830497dd288d987ec349287b8a7ad8b88db2a7e8465924a75d9cdf709b92d52ece632830dd6e7ad9e17e1ee367338dc032ddc66df8697e6153726ea364418c1be557c4f28f2c491a5208ce7f8e33c6fd9cfed93f23bc93f4c920211b248d31147e45e1d78c73ce48fcf2dc9d73aeb112d50199d63f0cf3629cf7117e513e7a3ea23a0aa00fd2074936a2379cefb00e3ae72109d6380de9347e5ab2860c621df490244b5bba0f613306e7fc26886bc36ff84cc94c98899d9ef3d113a1ac519eded328af052dc833266293731b654f510f1b96c26edcb8e124b80d079dd2d7e7a0d7910754bd259ba9996e92dc1825ee599fea13d551397723747b030aa0bf63c641d21ea1379cb793536371ce5b4b6b08bffd569019ff3cb446b73e8daf9a7cc6bf7287c11a1fcb8fb43c32c073fb05f9661c245b35344e4706783e5353b6538b6c1ab2b16ce1d7d9432fe3d7d9b319b2b5b0c979335920fb638f501dfaab95878dd4b0fac42ece3da486f111bb38ff1ce9395751719d39ca475f795e18a4cb79cf8e869a88ebb88355b6787437b1c93114366b97692f39dc7619b7b141471e3f3614295200e5dc862245607936b151da701b364e6395a85ddc0d526664042f5281dac5b90d27c16ff85989482869737ea3ac4847a6238d50167d7ec36dfca44f5fdc286dca2ad4aee69c9d9e989a9c95f873ce43fc62c22fafac4e6c12b1ca8ae5c5396723aab36d621d75a43ca4a3b564fb0f947f248cb796215c7da765848e984ed59fcdb402c39043b66fb9bc902914d972f1fa2e013072e2d7e79c57272f4f2244be72487feb73fa4c2b5b9fdbd657f2114361937301f01043030d091fe0e0890461d01b60f144182c38030752a8542a6c72ee21d9da71c2f05f59b1d0b12e7d7ed6a5e7be9291d8e49c3b6a17e73b1c002d7c5499ea15a6e7bc9d38ef27ce9b89f36e82f97c68b00933842d1eed2c7bcf7a8b964d36afb1160f6b6bacdb6bac4b56bbaa77ceb55b4a8b5293c85a63b3b6ab76248d714b94b64375ea0c9f84e543aa5217f5ef4ba5e80db5248ecc0c1292315b26c25613b03462976245ec3e5fcbd68e209e531f9fa71f843fffca20adaefced3fffca0054f1381ee9362c1e5ceae213b7d54e5597c91a36ab3b4ef59cea6ed2ba8acc5b21a5abe30eea8129f7481c6ca6b075dbe6512daf7ea6536e0045e8d937af5b7a7ea5c0a68f1888fc00d2755d1713e59e39393f1ad6436d504315403123621037688ac1f4b498881981598ac194459dff00427550cf2e4487e82ece9129f7c8b39ed585143a679df7b91fedc2c1660a526ee7278ece51a5cb4b99c2cb967be68c3a52de2d1d5d47b674b447cf38e33def0ef09eef70d7f97cce76cb46952ee5c9fa416f38357ae8dc5949914dd0457208c9aa11e2e2e097e7ec383cde904d84dad2e1f9e69e6f658b73af6c39fd189a9d48b3ff00e20d855b043d3b4ed1ed5e60170f865a0b2daf28cf6cf47c5469b6eb534ac6af93369d140b0c31f0eb2775c46b588db3dfa786d198cf09b24801c58a124c641102d582c5097a800311586e880286283df5072994a400c57a8cb8a424012236e34604e0c48a306234ce3d2d319062465a3c88f5d094407800ec33a5101e003bbbe7f1dc4beaf07cf4ce1b5dd81c0636f9522c41b59b3d77a764d7e9092df7895f748a164e9efd6e614f054f68b05d791283aefb38daf8825b1bd52e4eadb5d68ed613bbb71a726047d6cf63791fab03adb52ccb514a291547b15d588ca21d67adb5a5adb7e3ba6d7777776b8bcca6b6eb82fd5afaa0375c370e65b9ce65c987677e29910bef136dfb58f2c1e4c37ee197aa94c9090cc5facd78ae5f22c0532729cc870fda5bdbadad387aa34b67b7b65bbba038bbb5dd7a4ba57ca4522f3935364f5dac4b3e2ce50da77170967c6c4bbdb4f4928261cf4f93e23c5dba386eb78649a958a0b5f6937c3af3a9afa4b0eb951080a73a4faf8f259c5f1a57d85c36f0e15df796522bea3181a48f762df9b09732f960d3fae0175da55ce8920faa4365344358ff90551ba8f4863da7edb66d9b8dfd21fc944d4faca4cd875f1886a228565288cd8b95448d3aaa4c86baf7de94981a5bb4e4615f5a2bf4d7ca952bc96f3b847949c1801f0c8cd771301b8ced17ce8cb067eac6e25aabb76d9b4c5bd6c6a94e7801db1c36c72bcccd6e9bca83e9b6176f0bd2f47a9dba60b96d1bca5a4ae9b6f150a7edd23d8e620dbbc1223cd715b776ab174e30c2c66937a537368ab03686cab0575d57d898d128a2be58ce82638b07e8f443bfed9cb5561c2deab625c317d192e14adc624819d656555798081d79cb9539b21fc2dfce664943d334b7e6c565bc4143a41cf85fc7d510e1067519d60b2dab0dd146a4fce2d708247881e587f0d35ac20be1eadcb8df9a3c6b73a5bcb970a4109be73c2c61e4e1bce438ce398ebc7143424dcb14e94829256500801896d0b40cd22d9aeb71268874e438196ec21b19babf4fc7dab23866bbe809332c191a991d8c170cb9cefbac88724959dea80dcb4a6fac8365f53cbbb1c76d22786e548aacd4b5a53490faf6e1e158cc65b496bb04991b6205937369c3dce33ad2f3cd7696b3bed9b256254ecdcd63d1adb78eab3720420ad3b830c336f350baae5623276aedba4a44134f8ebaaed6256a2d2bbdd9bcd625b52eb1a2eb6a35aab58b5abbae12516bd755225c407f1359d0b0d045e63bf7bcedc7390d1b61a85107971f37b5edf295dfe7dfe802cdc17bdc959439925273dbb62d44d5b73db64b9263216a246b0ce5d296698fcd20189294ba2edf6f0699f3f1b863b282f117954a9c42e5516adad96577b6bcb1fff00fe2154b48d9c4699a36759c37af95c8e3a4a1ca342ecc34a5d65a6bc59b256ee5626e8c543c905840ba51e256f126895b9dde2071eb883a6214459d7a53610276287d0173e4bc502fbe31caa881ac809217ab98302a402d40619bf356d61fe6c1b3b36984477564a83829b87020432dfddade2e166b46a45487368cda20a2116f66b7d2b8d42151086137154f9678caa6581b7a9222ba42f7696d080805f7696d68863b069309ee49af3cf5a51cae1053d0d5d39a104cd09a104465b40f5338859c1c55cbe7f46323c57a3939f83544b7a5268410429ca08a2ab1c67b4f6b4294e04f1b32dc3d5b8b42ac826932990c491697235412125427494a33380b31c3d7ea7cc450ead0c9485fdd3b798889be8a3f8ea3cd8f3852f831c78fe3383a5df2a3dbd1bd1358f9d12f931f47f7247e745389d38f8e33fbd1735090e547df51e2c71468f9d1c59167f4173d1c79c450290cc3d06f171fd68250e2c35a92251f86b26f067faafeb3dfe77704ff09495103428ab7ba33ba9ae76ccd6f4eafe0547fd6c4c08437c053a58ed22a74fd79fd598fd0a09b044c7cb77b351268f11d5482efa02bbeddece1876fc7e92106df9ed383956f67c187137c3b0f1fb4f8761f3f72f8ae95a08aef762238c8905401e4c3b75713207dd77ed8812abdf5192b6a0ca47b59de124e15f2cbf28c5cd0c9ac3c716409932c3f48fd1ce9800332baa0a20b338a965ca800469eae2a251e7ee001cb0e3278f6008c3cccba3f580031c6134e3440611f22662e289a010b8030fb418c2dacf2a7c413339899198591872d68ade0c2e54f1a050712dc0007306a388c51cb818a226a3a94513bb254dbc1e8ade38c3cf64913ab13469e56e900293182203c3b00461e66c93c01c00d5ba68c608ab77e7365ae68f1d63a8e11a86e98c18491c77aac1b54353620b121076fbd84ebfd245105e81a79ac559d10c58f12cfcefac9410d613cbb39f27091aa56c313128eb08019e1aaf0a768060d4f9efdc67dd204a6be6c2c010cf0ec1e0d32193cbb0d960f0f5e4c01d262c6165c24f149e2075282aca0a1a665885863812204af96234f579ea188873d2154a2ec08156ab22fdeba1fa9ce7081096fdd3bc3ca5b17e176a14232430666f4e0add760cd00c65b771a6619752693c974c00226a50039a2d024aa24842d4628638632b2d8c2c3962bde3a4ece107c78eb3b2cf0a81979ecd296124e1c4f62d408020e41a822041ddee2c868b139feac01820e4940c8e2a9056f9dc63d6005c82888329ea494e153021d6a2801132c9e90328498adf44bc205b32f0522ee793956fd54d590a1f47a76ef07393c3beb074ccf3e03650990eab0aaaa4646cb1664186989f2ec323ee321668ca767580e3c93c9642588d59ab7366fa9fc9983662d156bb56c01005b916059c205163390bc75df8195b76e16bd751c1ed4e0ade7f4c088b7be73c3db294e55de3a0f1f5996bcf51f5982f0d68128bdf518a6f8a00753c690e2ad57a01a2454059617aad3558c1d88b1e419864318b51412360c200860593750e9fc59d3d4821a802103838bb74e6d30c5104f3650d1420556387172c5e8e27faabc294d24b8e2d947561247bc885174d0c3b3873d8017e98b289efdebc19329d78ad613bd8bf4c50ccfde39ddd3aa52c8c10eb41c50c16359d656b3b518118d66c3ae8d2272586b8353e5c5132cae90e0d9ef152bcf6e594c78b1ea1a18ecc40ba65891c133ffce95140d9d8a5c1fbdbd3a05755f1fbd48e8a21309392074d123707d246f2889bd903d1589110d50c48c30162362455c4515494faba062e9cf7ae5db29154faba02287af57f8057ede6ddd5627afc7c813b260a98ead3508dfe7f6f2e2a997b2889d56a7135cf6d31b15d0e2e1c293d330145005eaa3f61678784e9e93c762dd7b549d9c4717b81932c07a5b0601dd7a18d6f2c431436b6d8be36ec8bd743a58cf796841bffcb20e5eb2150b49514c9545421ffd863e7a91ebe28ecd6d792f098220ebb9f204f25d298407f8912db0d93dd875d4dd971c1d45e6380155a7fa3492a628c4759bb7107d0afda4594a2130beb95a9daa579de80d5215aab6d26a53b3a7368c783e1e5f2c2e4f6b56908efe146b569cb015253f3ead5939f2d5bd960efe13041f025a8384b6506b6d535a9424252a5e91524a696530865c468ad33017ef8b83f3629a2977d4bda10b49632d27b7728f912a0514264c1073f19e4e81163123345e1073298b3c3f592498e0a6fc76946f47fde9270f9ce756e72fee134b91a3773edeeb3eb18d895faa176f90e338ae565a5fc6171f9db6eb73191ffd85bda8f355d83519798ce5e6d4aefea1edd259c1757194bf788c17f580f1b1e580d15fbcc7e82f654f51e73d234e8fd163ca9edbaef67163baa39f4e632f7ee2bc8b8f650450eee228d1bd933b22c1e0721082230eb1c9e49b6e2deba1e68ebe7d0383cba1d22cdf3408dfdc0cdf5c9e97c36188930be2db69e57ce85437a5481abb51727b8a7a8cfee23d30cef21897298bc8f88b8f65cfe829b7b1e5b2c814b9d3ae76197263da9aa88ef8ed1b167eb16f47db518d298b4e80c17541951dd4aef695abfca4b42f56a5aafc416b458ac08c3e8e63291b4b2345aaecc553650ced6aa697b2d67800ed29ea940a0a6a971875e6291fcb3a6474abd75265113bca475aa5b5abbdd2682c64b209cae938818b2a6545d68d14b1f3cc9f2ee3249e4e7901ed9b49b6d44b50987cfb76a537a65e626696f16b631d7143a7e77d8f472e694913c53db7a37353f22d54048771694e96bd3071cfed684b10f6cf2ddd619be4835b9376501bfce7211d77701076eb21775cd9dac1f9e60ae03c509f73cf37f7f91dfe9c23bfba85cdfeca209c77de1e1af1bc3248b99141d8bbb3721fe7ecde67d93b67ee9cd9634e62b359263b9271953d6b416116892a60d02cf4a997962c1214669f1c2c7be92b7be97ae549c1f8b39768953f7b89b7a3ef8d69cbe27ba9c69aa9bd9bda5b4e2ebf7cd11b93e7ddcb1dd19bb64ff689ea6c55821004960f52619cf66963ea247db29696584bdfee42d2f336a94b3053dcb36ef96e1f19c0eee3e4ad0e765b562d6cd61f10d5f024d629d022d67272c53fdd89cdf68d6973da9e36a6ad8957430110d041c626fddb37d49af6a9ea22450e324a80f1d63d277200459578559d7515d158a5258b13903183135940e1a307258868ca811858c8a8aced8813326c14d7dab08a7bdab06036564443135d84a24abc2a7b733881e299e99ea2e9a4c95b2f892ba3a812afca758419154422a4364d5b7c7a19a8f554e6639eae9ea6609ceabc38f5737ceaa7cb53d4533fefc394ce238f3b5992366ce80dfb48de188104d3550269020ef28604c009d7bdc5b0d4f2fb2481c48f0bca70e28c2fb4c0000d89891cb494c08825aed71f94e726cf516cf11cf3ccccbcb1056d786b398c6f29be9ddcd37ead7123849ead78662f503c5cd824dd9cf20bbc9f589e6149d904cbae9e53aeacbed396745208cd895b53aae1a00b4316f7c6883726b4f7eacca81c81620c1baee8205605892d78f0c5145758c9410c756d16f65e1ab7f67aed92611515d0eda798be9d7a4865401034f22b99faabd263939d45f237a9e13b0c82200882e00ccc0813c157dfce476d74b244289928e6c6c494675d1111b11a9401794027a01d529f27c74787f1d1673c04c9d3c2385d952ceb8957c53a6b1e7410c657247dd638cad0fde83df2c080650c99c258b2667c875b98d949400d5208bbda6748206c1a1d39999595888d98c8c908765aa04daa90438719dd7e0f7eb5ab6456342bd68a895631de420cd923c6513c62ca1e4cd4b0bac5a3a1445b9868c6db790bbf447f892c96c7c4c8ac6456327eb2623c6685181f6378665e6688b6b093b312b111c3e8184970c14316355061c595582b61573b0f8c6ec003133a20f14513b194cbb45c86b55aadca5346094d19c36a577bcc503b2be1578ce7c4d0a00cf311e30de41211ad2a5183de60790a81f11e796462627c1543d25fb1e8cbb0566510180fbdc715603c743ac6c4f80ec3c4b88f186f071213e334966a4ada6a8a719ab229c667ca1867d1a61897a14d31258cafca2695e72f50beb1d02430244f215e796b00dd93f57dd914995acc02c2b34849968e2a6badb5d68ea0caf6c9b2b79e0f9583aef2d1da18079d635cb49e78552c18b71e43d217552b95c334a1015a558c0a54f90ed3a8298dd4788d873535a5acc8c2c09442fa552fa85a761cc7d668ad0eec4be7759ef779ca4150f45e543031302b18186bad6f3666a58a09436f57a954d64787294feb312e866e63c41b136ab18db2de8c8b8be55832312b154c790a49a9ac751807411004c1158c6a05530649f9e7765c2165cb9d94b5768663c9c4ac54b64c39cc4be737dc72562843b60f4bef234f219df53ace6edb5963759083c62d0dd9e24186554fa036a7ec52b3f56c427e8be137a577f1d5eab7ae3740dcfa3fd8e495bbd8189972f48d3cdd7ae255b1ce9a576d64e8323210d1e1fdca77384645b62240c39bd4f09127e45f39499f8a21696bd0288dd0701a1ed220c33af6a051ca8a3695ab4a21fd2b1abaa8c41a3207e73cf5a05470ab8c089bb5a9cd1dd8f856c278e881fe327a7df1884d282ddaf0eb29f56a5359c3a68d94bbb9dbb0d9d4b08a445dedde8d29cfbb2a4fd6ab8890f116fd257a6fe44a4537777155796e2ee3755c618b2145df4899d1c7948cf834be9441c2d03d6bd36f4e550bc3689624aa98f283122690c24aacc16842c809136568610519b14b637a3d2272596ee23c8976b323cf6adb5c455f15a3f2558caa0cf2e2a0db718597addc61733bcd8625805d9bb7e7d098db4ccb94a7c362cad35ce56ce58bab72beff85f43c458a7e49289ee7a0e8593673b0b0d9ed350cab311b22018872ab536d62b35f84ae144700e17372f04b14bfe5dbb60520c9653f6d6a88c5aa2a613dc3011c1b3db42618ddea4475da366cf45ad24bbb65546a1de3a9d72c54858aa4b563f3eab50cb2c35ca33a9df306aaa555cfbb9586a4aac04ace8a8474e121ae551538a99ea0e4995d9aa07c23e2a18631126b3b7a1ea2f2a7e51a928d62694955056bbba467c7c121465bf0f90eb07e08eb63f48cefd29633af869a164d352b3f4f6b55b4d4aaece0c7a7b52a4c5f1b30bb42bb11529b7386f6ede116a3ae9a314cdc84986c4448b6289b8cc8055b101351173522267f6e46dfdbd146b3955144fc3a3b941327eea99aa96665c855d514442bfd5c4e236fcf0ebc2d5547aca66f20d58cea54d54c3563d88c4c75a48aa2aaa9a84021535d51cd54482a25d5928a49d584220a4125334824f9f6139cf22111a96643ed5535db92706de272de9533337ad3a48a2355462c267ae3a2833b93c2e4a203171d501df60e0a32ba28a086a188dad5ce62dd8b02fa0fe99b55258aef19110b45d4309726ea6a77faeea7a36f94ecdb754002e1a2836fa724d8027ad3bea188b60d45c4b06d083543414121a194f8456b52fc7ca3a87c5b26285044df2e3528921a8aa03f5149dfa81a6a09652b38e3d7a99a1df1eb045b001af1eb73e2bb0970f65d49ae600b3aaa33437ba98173259a60d92a0da09872058b01d4568f1e14a200a3c6de4255a17beaaaee79f764251955f1da05848b0a6a9264fbc9933f737cb52d6b85b4c0b094acc70f222bd8f2d56c2268121130f8935e2182883fa9d3d7994ab7d8ae51dd865fa8af8ea3aee0e82b114cc4efe873c19f348a93db0a5c8daa02970158726b5087d4011a48ab81b40fd4b050aa6181f4b486c511162c78ee690d0b228f0161e7b4c2282d5126eac4b1d09b550165a355d103d4d094135441058609d18c7604c912f7e49a984b4e89cdae327d07c65b36619e07bda1955d4e9f2b36b515085da9352155076cb14e688bd960e29e5c1387c46607abb1ce392dfcaa9f147275ef2b735170384da9194541aa5da9512a52526de90ac73511f9d0366c134bcea95d1dd7d4aece89c0b8c039932748034370c4e47981eaa8a3f93917fab95ae6bad56870f4d55989ab759d10c33ca6aeeb3a2647baaeebbaaeabcc3df1ebe4ae7c57030aeab8a72348be73ee0a09811d866adde484c431e1d7598538227e79e75c10f6d951c342efbeb22209c90ad4aece2dc991447470c90d953d6c769d900d17dc931baa4243dff9c93d7de7dc13bf780bbf6af73384480f9b1c735c5dc96a3410e22a532d15c910223d5556812a123af298c0c46dade0bd3763b3fbbce923392c6cba66b522d83fb26ee416f31a56c4c54797b293955e8fd0c51ac93db50bf440f0db86a648f1047e1e37e39ab827aee6919c87e4e6dc8c6b7aea645cad878f177e0089a1f38d64b5abf32645d773e47333cfa59eabd4f38df41cc7537ae395a710d0678771b0d9792569d879e75c8be36a3aaf434eb6efbc46e117ad3149face69e7674dfa6e057f8add1432e8a610fab342f9aeeb2a0bf1eb1487f8755e227e75278e4e49f731d1092df167e7e43ba33f3ba3ef70b01a66bd736fd8e65dd7754c365a6a965adbd96062b61da5b44675680f9b9cec398e13e221aac3cfb94763a4eebcd57d4356398eebb8e69af3b6dd13bf9c38af5a38fe79aeebba6e46753aaf3527cf11c015c6c56959079dc646073d02a383a21709bd2b232016015d2c693be83beca3fbc4b66ef41ea28f622982e4b531823a574b6f5795bb397b751ca08a0385d5d913ce73b424cfd5dac373d4f57d2cc424780e87b213bde17c36a33a9c84de208104cb88d410cff9f971f486f35aa33a35f8be548a52ee86a66a96452994524a3d6badb5d65a6b6570f9d5a0e739dd51cf38c32bbbcda3e6e622f588547b7f7ce02d09a1436287ae073515aca0633dada96087079fd6545083d1c7cc520c51061884db7a5a1b82e98821a0c872534f6b432c61c510446014432ca90d71c40460eda9cd18e206ef89fb0da10302196096cb3dad2de901d79654e161c3c9c14921670a120f7169a48c71c726b61f28c13d71bda7b525478024b8ddd3da12262ccf528f06f77a1eab65c5053ab08668ac340992799af1707e88f1ae27de29b624fdb0ae151b7a5811cd642e1941aa284131587080a142b6c2010f2f34151640a9284d30b41f2eede9e50813a0a2704a5541010f2e50c86e151d4621145396204404d0825c70bc2e7c0871727052c8691a3d1b1c01a310a1d8e18b0151c8d484270512c8644450370325eca24cd8e5cdc009b39892f470c4a4030f485d9c7104a80b1fec80001accbac8c10e084002ea820b200448699ad2456d07042411b58b7a24ccc0f33ada9fc7ac05ca0e7fe268b93463744d9c686272e20a6f06276a00323921e506276290c40925827022054ee480e44261e23c15dcf1e9942686108326b0d026bad8614440134e5e1356ec2042016a9797a489273e1634b1821e9af0a1891f1ebc256abd8327653cf9810d1cf5ac87002768de0faec7838e76bd2fc27872c50c2ef774ca9329df1301a6c4a8246c56964dcd3a552310000000d314002028100a87c482b150240c14495b7b14800d87a44a6a5298caa32889510a196380318000000400cc008cccd0360097f32720e36e7a6172fdfd6f24e2fe10e76aa9f7c1b6a5611c7cded1797201744c2cd6bed49592bb54bbe5bf706fea3d1a41281260ce527ac0109b5ed61822337625082c462907eed847cb30f308b2e3df8b92a0d129b4fc7b8005052fa4226dce556375ae6516cccd400e6f94691131cebd80dbbe814d54b3de953644e61e7a9d80598c26b904ebffea588500478978cae7f177c59f5ecef27b5772750672045fb7dd3f47d52bbffd1aa57ea080a0f64fd6837f26b61c83209d54436e960048664b6128a6d53a4f9d3619b2e62e35b298c520d978335dce1710077b49680cd11e614517dfad336ffa4cebc73e5aa0f58d6ed39fb13e272dd2c7c102048410cab19495f4843a81ffe6871386c61d4891fb185c850d89c05ec0f60223e2b0007003ca7e49ab443207e016aec621c31818076e8088f54a93d29e082f34541b1d0bda2bffb4d000733ee353ead73a5c6abcd6101504ab31ec81096dba2686ab7dc24ce6f44d46fd1435fccc4e8d48226153a309c5866d856b205a90c873cd6e9f25d18660c7098d211dcd3e7cef9749d0272f5e609554cee8bb21a264f4489d995c8b91d5739deabbfe16319d6d804da3e40fdc031efc63ed0826db742e6698828c58eb681e2d878e820c9e917280cacbe340e490a38bbd7a61fe24466c93783e11dafbed0d91323911ed57a719c32ac674dcf3c3800da83a40ac56c4331f7ba944a92ce70c16372b20c72c69a09d26e64c98ac01f844ce6430ce09c98d84d0fd034bc8958a50e19d1d0a41afd76f6a2a50d07fb48092163af35ae74b6852045f145c892c43d4d4fa760367c311691415050c4fa0f010cab5bee15ea74a489209a1f4b58c67ee90d54d2947c9ee42ff4fb4fe428642a65ad53da591181485b7a38357e86d6e336b03fbc0b114f1b002d3ba82c961cd26624d32c281511c6863d797fabfcbaa4dfbed5cb908321f07c0ce4aa20250638ef199b23d7f1d2c3e487b3bbea0e978f09bfedc1ed4418c9bc34cbe1981becce2f2f6ddf88f76d94869d79f1fae808ae801aa8cf3a48839264e21ad283f822a5eb32a2d96c4af00746ef3f719340b7a7659340bccfa9e85ab2fb9439ac830ea59c0123befa35edfb50fa09503bd2fe8cd0ef04667963512d66fa9d6e3a7477501c48dd945532f84dd4414d70cfa3b29974c05cec37a15cbe08ab48cdee7e80bb896dcaaf1da44ec2cf60337ca6cd540f1ca8481ff63aaedbad5d45d4519ca409e775e609b7d3a022e14c5e88cca8719b8743b29d4babd3e62e47faae9b86c33b424cc47c126681d929e1afa7198143e32c8dabc9504c38a3e9da3c51184ec80211de7b27b122cc28bb29701f266e335756c02ac32043b541b73a005e01cb4978e14e7b919d4804213a156239aae558ef4f1480c2ed8bf2af8444812c369777f660239274ce5bc2904bae95bec6e3f79ff806f6e26defca84d6a563490e4d370082f14a7ef75daff388d6626aa12ca9e937d1567b8d2012386c330702b05adf051a02ca2655a25beeb9d02279cb136f7ebfd3ac7d26a36b147f6a367ca5814d02b59820a87be55aa91a0989b9f241eeb31881215d645898930c6ae8200a5b57de27a99e309561169ea7d72be4a5002d5a74360610cb38826b711cc8aaa0bb0eff10ee75871f5dfe0ca57c0e9aef0da74b1c3e63de12af7f25b5c14de136969167b1a56395cbd22bc703f7cae71034344d6b69f4e567e92bafa08a4c308c570df80af584201819ca652bc3c8fd813bf94d4d5545ddb854a5ff94fc4978916131ee9ff44061a04ca923750fe52d53f9409f1df7bf44154aecefc8937049e736d95826f4d21f7ce92b8280e46d9e2eb1c7b8e7e62da55cbc00da4ffc99b438fffd03b21575972e0637ef8b6814669a1768f00356c54ca794f35144f0d00945a75a9b5f990d0b4011d08c6129c2ccb8da5e5d6bcc87139db86c979f4989f3bdf1a88db028065287404995e86646a187d4840972044047c084466ea09dcdf0ff0ed021bfc559caa1aa9a742b788cab643925b9d84bc0a1815e40362216fa26f98b80b725b83de442f45f55de27ab67e51bfe51eea806a014454e092c0634d253b06b8b5a4b8eab82bcb366671e107af79517cb0599a9d22cb3c116260801a3f77ba182f1d52a038675807b1dacda1b93698f21673d8519daa0fac0d7a2ad220dc4709911cdd884129838e8a72605a19e2641141b4ee780dd5c6d41bb4526a359003bd6a328e402ec2ec7bebec1036afd8233571a29fb024a2aa06a41309d64e0468641acfc7cf4f26238923c5a3c5bccdd1bc942aef0d771ed89c360021dde9bf9646b0bbae635713a79ae6aa2d2dcf004628c71de9cd29317b42d2a7062f369f2f78a110476c28a792213b4f52344d30efb6b811272cf1045ffd954d353f801f18bc69d74a313ead3bb4164a0b026e5ac24b90dbdeeffa3efd9c713ed7619354c75a92544287f2f17ec3f742fd9d21adcde9b2958256feba321ef284a55a8670daf76bb5f0e428de5dd86454f95d7906128c605944dcfdec3bf7df2689e39c5eb527705cbbdca88aaaa0c38902244c3d0f279a1d617a4e46071bee1c2db46dd355a2815617bfaa249907d0938c883832797b2b166b127792ff8558785c5b5dc2e11b7e5ef096cf53ca332ff41285112bb5542c5110f6e9cfafd058f3768eb49cd2adaa48af00ce94a6e60e83a825610469e7d32c700020819273be9e4bb67c1ff6f10fe74df895c5cac317b633b1fa7db34c89ca20dfb94d896b4b67c8c8c50c1409b6de95d461632c017b0883b628c2bf7060f5fe1db9585332be19ddda8e6e2bd982a6d8d3805bdb588ab7a8579f8160dc97550237ab5e6290d2ba669a2c8533500beac93473fd69f014b07850db3ba28f60a60d633e836a980f1e3e4620ed0744217c45955877591d74c7d01774b463ebd376185f428db325c6ab98e068a02a588d6c9dcdabf825c111e6c4e74bef201fa945c4e6121320f06edb2f9b89eaee32e2a84cfdb1adb2ae31ed174670863541c9abb3769d647b150673194a318ef9a98e1fb5ff3b722bc600aa9b0af1c9cd3ba11acfbe877e0e319828cc57c4df0c5e7a1244e6cf2a8abdf1b7403e1708d653f15c05aeabfdbc0054b150a3d8592fd28a71fd747dd54801a99865203b37def102a066fa054e6dfd7f27573ca5c69471e4e38d328a462c04adf9bc05eed4af96ee62831efb6d151f3131e1467228127229e53126b868edcdc1ac57b49be96cc15b89e38b6578087d5c6c8c2c683a5903b73c24ece7f7ff3c9eeb1bb42839ff61fc8c507e061fcaaf5d3e6733bb6fe1ccf1c617749b2566bb707466c4a0f193a62401cba6c53b955a9609cf849488ed7cceb97401b00d65e87ab5862f5af32079f458b256db9ca24d574c813948d5ee48a73e0cea24f26b848020d4c947944223acf797cd1cc88e864bc45fbb7c265e0a0e11435ac887bf7d37d77aeeb84a6507562cd89f8d8632f16318a380c6da6902ab903c662bc57259aef10294caf707e9d568d029fdc4beca267324f4790ef95744e005fb6efd62ff145df34dc5e0a78cd01a797a36f6e80398dd5be66481a6e49f0681cd43f526d183aa30690740355bc9356d2a17f0b2de0175090d8800957058a13cf027b8ff016bdc3df76ba19a64619e9c0388504d578f370f10afd8e8a2689db29f6525608d475c79982dcaffd96349bac8183c4d3ecb169023876e928594db08995ca6b5853729e3cbf7e13393852085d4a8ccf4b33f64ab51569b3184451316339dfcf60b1953bdb4cfc12c9ed8163e0a9da3d40751c07cf4ace5f3a19f6e60afb3127daa5b0dbfe64d24d2668756121f8191eed60a8c1b136f7f52e63aaea5edbcfab394126fce530cd87b5fa56fa42d35bffa3556bf91eaf041bbf38d7c5ad31153ba6ec2d92aca8bb781e9c94ff6d5b3b234aea5210d4d8225f4211741a0824adf574857c620d9c28a949d5e94cd79f92d72ddf455b2ae0630cccdf7630f7e9f4f350954323c3d2722d27487b807c0abbfb8ab6baee129b1585f9de68e88b9b808968f92b871d1e9237e3a8701ac7d8d5cdc695cf7352236763df4449cb9a39aa467559ffe1070269dde01d7252e771e821f7d8283e7d1ad332aa2f9abc29ae813a313c3c804ecf9ec0014a557194632148f4de2644458c3abd0e37c97c3b11ab2a2a3257ee30a71d0c0e555477aa08e78157acb2e9ef2ca309351e543fe06807db71abdcff0329c2245f749dce29901b582c7df6438f1c24fa66f524182ae96b8de7ef128fba55f1a71f41f3772dff136857254d07d0aa52385a8f84c3bb5655c47f79da1a0a3e1db208bafc3b97ca16d0fbf54d17e3d3555f96a5208191d83584a09f37c7a4a56bc15d1d5fa9305a50989d5d901c3d721e7f3cfcf24cb64102d31a318b1aadcc0436ffc98da10da32eb46474d8a2bb941f0adce0d7abde2ac8d138d422385352163621a49c9047d2299b1c69b3faa0bf61450e199a0d670741704041c9e2e8942746e2396135d0c2013865ca60aac6006839a9561ec12cea979a5a307811a51cd217e1f95f93729e1cb32cf2eabf1639cde6f58f8fe76ce372fb49fe62eb322faf5cf9e3fc8c84bff502d1faef9e228b9799671721d05e71e54d4db659455d5d58f24675631caedf8597a15a2e45bb559df6ec7a2e28b6d13738f4249883adbff6fafdc1c0e82c474f2b2347eac8e5bc13d85b0a46f18350fcdef6e96f1a66e30215b16c1b706073da62d4bcf6066f7982e3573f04ca0d76827a3cab2a874fa77ba0da88465b55e4dd9ddbb0e2c521ec60a18c7dbf4d8bc8d58c36807098fcc058dcf56f6439ccb70c26a5e33f1d84608e03239459753d9a5fd980c8dc6f6b47c4887dc50520509dc0acbaa603a3195be497a79b43a5e2a549e6c59ad26c9010e0e69f0ba5d9e6b0328cdc9b392850c28569ad8746f067c6f757a1baa038b08e2cdc2fa8c5ca4402677fc5c4a5c10d4e85175951a9bf7e94b5cbe9c5f446c12b6fa4066dec3ad340dba5b73d5db2f04e6312dd379b99277066be7262bc8f4d5889a09374d4d3c775d843ea8b3ae4012e620e72751737d10d72d46126c9a90becff6146a447d2cd3b72e46a289aaa81e9ed61ac3d60f4988ea157f97c8535102359daad76507051514c72e989a023d12c4f746d2881cf18485d7ef26e4243fa8d095a887f8e8c18522fc48256b6c2e0856526c8a03a63ebc6fae8f2e638c93aeae786755976b1348566e9273a4bad672c5d8d6b3230a2c244e0cb6864440fed3ab89f66d37187141bf4d9916816511f867728532199eefeb090a7f56a0604979da9eb6eb11f5eda00fd76919370caee86655d8752b1ee96f654d9449eb86f66ac50fa6a4b86721f35c86228c3d90a77ab4c619efcf011f053cebf757f28ea5eae1b7414eb17592ec018890d85ee2da6fd133b1dc4aa095b023673cbaf1ddf940d2df100272209a32c33b1cc21949a316da9e63154db7174533fdce79cb7aa141bfcdf016134161af240930ee5c1d98ad16995d38fd04aec670528be3179dc72a770074d794a8669fcecccf232b95576f7b9374581f8730c29f90698947f28686cb24c15c3619a8a9c1b30e4e9e9b2d31548841e8e5964afec7bffe05366290b2cd94bf1386bc06d85327eecfbe70754bc97e061e070e49a960355047f340f1ed090a29c137e520ce1642a5f1b94eea082deef5b491c8cc86f4b205500fc33a912f1ce873f82354274d8e69f37c560403cf0dcbbb3232995362fd418eaa25b1bc5915fcffe4a924939e182901418f52b0cee40165a1e97d7e64fa51329699ea5f75aeefb766425829cbb6f386b0a5978d26f5177474a949fb4be41c5c4e5b2776e220f5cc4d8b0ce23967aaf95d74bbc3e74abcc0b40bda78e7cf59c590532a0a38cacab2836c9362b9791679fbbb666549fe2c156687516eeef3c6c465316ec2eb76e206deac2c3c299d1568943d6ee9973cf234d93f6b4b5dc1743c869ea0c45dcad6657fd295864a773a1a8a09b9db61d2d04f9e7a09c5d579f1d1789bea4620d844c77f66f49c2536b89f247c204ad4fe4c90d4e49f436612d1c455538577e86b2743ec032ba5898aecc70bd8461e34c8caa6b43f2831879ee70fec55d674b1a4f58180cd73dc82db0a0fc16cdd85405515c0a1c0bcfb0c44eebed38b3fc8f1c657a6de16aa7258e58b670841494ed47a3b9c55e37964a0a6e02b41fe26ea38ae3877989a50ad83c44631c50fd3934272630da357aafc3c0775fa55e62c4f5652320ee9adb435881ce52b09dd1b7efc2311f73c3812c575070c26a6cb0dc8c93d806e90fa58d53d4274a408b19f3db6038b05c82683410eb0e8bf06c02050131e226c86fe89f93def15ebb4a3a4d6b27b968517560ab22a1915798d482bd485bf8dd0016dfb2cc0db54e45396ef81e7cc5fea341a83a609ce9cc36642220765b6bb34c111e8a153ce70e89b67576e029b1d8a1c422ad24031210f432505588a117cca017ca8aedd7ec7e596e557203369e2001489256c0f23a5702909fa3c1f0242203ffa8df1710ba426c857babc9d0b44def7aa64aa2b3ae8c8192c22c2ec8860e2367d3092b1d573c35dc9eff49dcbf81ba28edfff8e5753c342e76f054290b1285add577b9c31d9d1bac32b5153d26b85245bcb0ce39b2df9ea931c25240d3c45a1f740033291119d9d743fef667d0e364829503dea2a20be61164e2b5dc13332c480642d3cfebf2c6d4576cdf102fad3d194659874c6ba652297d038e6b56528150eb868d44a981adfc3bcdfc402e13eb623e1a8aab5c0f1c4a222cc25fcfa5beb2432f5d170aa7283f89c2ec26ab678cbac5a19a3e635506cdb89c176c5e242739ffa3adc30b04f2466b15e45457f812d789ec214557dad9ecb4c784bb879264e8c983308a53425c63c84b20e8411779fd37a717e38c925aeebf9139980b8fb25e9b03900945b00eb9ce8c484c732fe3fa8ba45df6c0a1e585c6af643c4f5ed2eb7c8fa87d102e30486476fb729cf7669b0c4840b70de13a74ef7a96ec26accc22d71fc37b26a5f0a8b38a902cd133a1a7dd2922077bc695897c387fc39f72a7477a75464f15a0e6ea264b8fcc14adbdb45d1d55b05459c55ebef11ce2692faa1c6bea487b474509d69bc61192e5743945e10247c40f5411b3c436d341d5f4a0399c721a9cc48c4eac8cb6d4301a1e6f554986b7d34d94045bbd01b8ee63049ca2e3867e079530179b68605a069f5399530f13160513b549f938d47c970a258f82aa5ec73678dfacfc2ca0ff2651229e2d2c4ba7e861d36d8cd45ee1d268902bf08ccdc8260c6d58022112a37caa6e8c3961404a077266fd4a09871e81407a2304c144c0dfd7634d90eb24856b644aebf2f5e2800f17cebfe3a5fbf5f6f36972319b409f59766b1ff9fddc7deca32e4b58652cd410f859c415b8686ac0caecb4fa0a1eccdab11dc92a3cb74669decf2591077a11487448a5f4a69c138329a430b9d85c03406257b7338849fd5623e0caf7bc4f3870ac3f4a80a7b20219fcba3ac3cf5809841ea4a8a617336d0739b99ab3a0c57dd07d8f5971bd722c69080cb39c2ae43c8ea2e00031e74e1d6a20a85fe941f2250bb13ae4b63eabfa9e5e6879ff96e2f99b44209715fd6d1293e88c4ddf7117aae4a0448e341761d8b810aef722f9b490571bf15347699efe2da466f8bde82d6bd7c20ca5f871e439847642145d5c275b91909fdd94f554ccb5d47d7887613c42e14871b8511f8c726ea9c3ee6cc88b1552535ff7fc0b6c068f33bb86ca15a185350f4269d178ed6796f0a330fd52f5922a35189df15407f828a99c05a7b2e47fadbf690d31ce8a97277050620884a52c8030b5300d1f507174bad5eb038e225f779834096ed0174f4dfe90786a1d57990069c8af54f8f22c240cdc8f8d7f06c89effd09db78861a91b13f78494272bd30bed0a809bd8177032102d0d8df69054e26e8fddb6902990974e673ea815041e8f6edf481922034f3e11481d219f4d6cf69074247d0ae1fc2266eab0074fadfa9033992410beec2feeab208a93c54aa95fdd707e4685cc87a9067e01d81241ba6138aacc0d73134d6479c98c84037a6d72e1080e1abb12a450be9123b624a6e0363faa6649bf10ef4dfac99248a4684f46d96cca50a47a15c5e449a44bc581c5b54e9c80aeed1cb2339b845fde8948c9289948c668482c2fecf04a5cd75279a2ee5fd2b0eebdd0385e16d23ff1ffb0b7a06c4b6b22a3c93cdce7db044eae9f716c1632cb9a322104ce625a38033422e4c7418051eb75b4c5c48d0e30ca7489d9088a1220a088f30191a50a12870a704e0982b4e893d82474f506c215f355840e913b2fea74260ac22ba4282a0be159b99fc3a3946c0ab8b230aec5c7a1c425890b3597e48b3055960fc645b7b85cff875cc175f663945852265e008cac12a8185dc845924b37928f0a7bb281d008107fb705bff21e32430c1cca91380fd74f76f437892bf045e1707a13657de12879d708f5cd4a9163ffb23a0d1e796107cc180a0d9120ce99c8531d50c246c00e379a32d453c8d3bf7df833e4613204193abb602b64bfdbde935049702d541d3dfae5924777b9818d8ce55229212ef57903e7db33ecc3c32b9566abb86b6504149428936bc7464c9ea87a79300f48d1efd0f74483d0609e65183a3072539156ec8dc483f426fe426873213fa60a9901b1d4826347d4b81dfe8403cf1020f45e428f9ec991d872da231c3210ee120e417e9c0a422a78336a168a3804aa6887cef5fbce1f4a07c0db294c2561ff6e00a2875593299414a8bcfbc08808de01ad2eb25985dc5d438ad1834a81549546a994c6cae82f1dcc5146064c8987dbdf4b31cd3a0472ed82a1d0eaff8f66f6316a5490d82ef69e5f7a0d11d049044ca0ba5a61d38fe36382b7e7393abf9448e3ede1a0fb66f26aab2f8d2844f8eda63cee7c2f173c0d98603c168e4b9fbfdd905c5189c0b1478c9a0916d82b348f2d87111e4030a28547e1976c7c95a349272f53c061c968bc7d051a58dccdd0f958b747852888d758158aef88cabec45f1fa316d7b91adcd0e01b68f20c0a7ecca04e420f2c56a8044b225b3ba464df7467f4113d50118f6425aeb993e911be8fe0caac35a872907104c1ab9a05326f43842bbf4e5603c92b2a9118e19f01e85da549d7f08a742e1a3d6ab61b8fcde5592af3802561fb36dfc40d0c02a777392318422f804028d604b75649359a35bfb6702000e2ca82839db31dd1a0a9043b6e6b76d1c8403d0be39af5ce5fe3e735a14b036aae20f43d4d53e5cd592f243af0686bf139df098c1532250a7ad260cd20ed0c851357e0ab99361980f8648f1a3707eff8f5b3a30f81c103f9011224e438c3e1fce7603fcd31eeda568959db6937f2766f2366ed40b2e3efa2087f043341e20cba458c8fec0c8703c442314aa81c576717413337e4675ae70d7a97648b5ea60dce81cde2aac32e3ee85550dfc46c97c36e328779566ffd55fd49c0e97692ef33a559f1d47fac5baf193f37aa72b4b84ea74cdd59fddb062a070a8bea0d5770e8d67c8c4a8aa765155ed4bbe55a496bede2e1d572e693312b725aa7e4716c0db71fb048de676e4db1f2986d3f0229e26eb744aa1f80c93312e6243a1921b70815087545ecfdb551ae98ff45f266fd81e47b746c67bfbf05c94dc5d1e63090885d48e3d77e2850c35f79bf0947e56da0945ce6292ad97271ff537a74da630e8e507f76fe2d43bf2a1485482ba2769d27f9f802b9ec4d94fc98f795fc06655857475a36ada9861b876b7924c469f5760abb5f802ffec96455c86c67f642d7f09042f2ef869d4096e07ab81d8b3f1a0fb2c17596eee0c10411f9a2018c86e6cb60ba31f4c7256680c86db8ad85be2773444910879fcacb9c4deb4f5d6b90d5644663c5781f8b76b52a466f93dbfcb3d4ad5a99ceb109578240fda013a17ef4547f12e28a51af9e8f06423e96c1e5c542b0ac3b3aff4bdb65b0f9e36d3c0edb4e585cc3cce838bb46f3711ae3f669b9dd01e0d102b443219d2e4f805477bbd7c9d3c911abfb4eeee002a3526a6a6c2f3c8e1996c91858cc553f3783c1274ba9f5c6c0b1f7e6efa1816db278cedc981932b2cc34aedda18656a3699e0dd8f06901fae1d52aad8e84524e8db022ef03486c7de043f88bbcaeca541dff2b9bdb6a4f5061740a5a2004724618f723fe6b7656850debc01b6867654344730a907e3dd7379f71db34c788be54f72b66a003be127c39585ddce695fe07e2c9606df97e0eac37be11a9b417e2b58d38df3ff0c9b6e30d4f7329554a3cf3ffcd9eaa6fce8ab2088d12d7ac8ee4360801d04897166f91c18230e58f2b87005d27a97d0a16c27681cfb3546ac7f0baad39af0255cbee32ebd18af13a61ade223339639c5efbadc02729818eed49bc4c2405a53f119f45c9c4467dd09111e7338051c1ada00a901da7f367d3ffda227ea6f690fbd554cb818c337c15cc4c786af9c96392da1127d2f624002b560840b1f9a32b04fef6d3e5874a7659532116700faf867479a5e277027171d496e791043c7fb07752d9f29fbd65b5de4ae75bec535b6bdc78e6e0d097fcdad81d86b5867e8e9f24bf2aa228ded4c713358d4c1a96337dcb60ea6d32f48dffd08e782c43725c7772413d8dde737096cfa3c2865993ca6bb1bfc811154f46fcac932cbfb70725402023da363d1bb4b9aaf60157a8df6d32e88e2c0a8b46c3db8b3b918388d5f1e7155e317ece219d4f224510a3b548fead2a7990bf4150280bedf8496d652224234b953b3c460869d6212c24f50b33512ebb679934ed9e0492efdea5f62e63113d28a14f4973662af998eb833c59d678c2b6e1c965dba920ab19cfcbf2d893c388d531bfb0c5206027b3e8551c698e317c188d61b8c019c824bba3b969c91203e51d8c4a3d30d6ec5a4eb336cad003fabb555d5cfa4bbad85fcd6e35d30705768e69b775d1d5e75bb34add73167178bfaf0b01c050b2998036c3caad4f060992da2d624fc7e68fbf4aa3a3dcba15d4353228b5538425da164bfb8a2b0db4a741b9826bf8f8b3a08665b8b44c74bc9355244f3067258bb325b0c7104e172c610f53d11f577d20f31499adafe2c0e19c2e0a073a51910045bfd7296307d45975ef922db3ede32d169ea271da7a97dc4fc602a65d44759e6babff0c70164f722c916c56a560cdce0fc22c966df51c2b22810bf095ca6e8e20fcd043cfe4111c3123686dbaeb630a7306a32bb237975bc0bfc973d821fd191686a50c10f29e4bb02f6acc0d1b0361beac24724e3361f476139c05a8859d695ba242efb993ede216871679bd44cfd703f5b0fe1fe0e1da6bb159b107e68c36d257dc2f7e7fe6e5544e7364bd3298fb01cb016eb9dcb82e4e1749c0bce0203be7a4509996f51c137a301cc2890c689e52046483413366788585bd4e80fdc1e451d529cf6ffaf4b20e531feb894bc5153f13a0b909d95aa149d3e5b9726307abc631b2fd3c542e89760b09777c4304816fda9fcba501a99def94bbfcd2f17869f6735f2a188477d4543cde582f36832f6468277843f56ecb265ddfa9979e716dca1a4974292c8ed0acf71211027c34589875ac227979e76b80b7567c88c81b0538b246dfa2eb5cc7d780aa55634dfdb212c2870efec504199d46fd566c3881887ec01bfc180831918e8fbbd00f2c7695e810dc32f2b1db46f8a6d5117461ec2a1e9386e6046b2cc2d3a988279b3444316a0d561582309cb0b5596e69814b1c4ad5f1d7b2ae8f6c65bb092dff0a1f480c4ec266c87326e50567c116cab44a9e3f1c3fc934222df8e10cc3e52e19772d3d9ff18513086db3ee49bbba6bd5cc01164c2d07ee91101d8d611d7ffa8bb3fadf9675953143127bda477d2e4ac3fde92c8b232fc77d457ed0ddf4496acaca5ca6e825227c9e18714dde6d5de40da5ed8d16066fba17a522c3e4cddb25e5002bc37e91d7221811b727381180fdec061f67377cd785bf75a49700e62b6678f1557f92496f08aec1bd11730e08aad041cd757756f496381c0b4fceaecdf0b6fe63d8f8bb8935a8ac86e82f7feed88d71ebd6013ba34090c6148cecb193417003cd07de1b84dbabd33e5f95568f0394cb2623e74744b7ed63befb5fd7550bb09f49827119928117d1c877912ebc04f90c0fe48fe5e67568a96455d4b301a8b87023b14ab681150bb6d94415a5b58847f912a87a10d05dcf42ffb5a4612651b50dfa881ca3d583f8c7014fc4bb4e265c18f602e691d01a3d824a1d882995daa32b52bf288416199eb36e447ea8cf1a8a6ea47454bcf0e8ebb53c3952ebddf1d11af42aa8abb4e0de45ce52d7bd79f9a3490661289abb69943c3098478564bb25bd7bba459f0edc0f704cf980d0d67456c391ebc1f3db4da540cb8bd6abe48e3a8e7d66663ca525c33acad09b6125eb55e78db515fdd36397792fe8f1520472c80513656a276f5122f2468535a0c00d39527981643281e4ad9fc649a6183c0ab69a8e5e976f3354dfc390587c36502fd72386b48c79d02120de69df2d1de294d421c67bb500bd588fc82b23a0e8923bab5b7216974045a450675ce9ab029fd3ca93cae6e59257cfbb1408b5105ab43ca772b3fb715e9a0b3b6bd887e4df391e2161d2eca470fb89637d0446ddfa8e477839a9605ad8d3ab6500be81dfe491b720289688011dc9b047f54a01115433acaea18dc0e3165b4c9eaaeb485702d79817215a8fd3079527819e8f8f3101ea996409e26fba70d87304024d698a20c129920351160355fb244266da46bf8f32a3889d33ed8f8e88ba3467ba27ae7129edf6b659a2c7a8d7d191ae564cf0c4f1012215aa9bc06f1b7a498a999d5cd85ad0586a4de20214fa3517826ecef0e23810b6d4d93a887d30fbb9402f6d120112e89fcaf05a4a233171ae30b42086de134d38a5522f8265c883904bbe7a3c38cc67cbfed88e8c07b6ed4d714a28fcdf3ef5249a4b1ce40fc4d05e8f04ce18106ad4b3aebd255c9ba1918aa5a6471bfb3dbeaa12110d29472a3a9880c3f7a433692ad7d93babf67c604d5a073d4907c85140a7058399d2393553d389b478198a70771d6dd220b7ecfb6d0f7cfcc9cf8d2b3f3e4453d064634c38dd2bd04c2fccc998c378e0b6fc067463d03d1980bb50e3b0e91ee9f7f7d632c027d2bc9505a5e134f02c86a523e82cdead2de2f400e38eb27e0c4346bf6e61ac1b47277a7543302b6974a640edb7668e09335263b626eae3838e6b7cfcf93c0b1bb93934731826f591c9da3cd66f3e12107601e9f84e1421ca6bbf1789a6bc5126544ff5111a19f0b671795b83012550df7a6e81e8cf0211a51790f2cadc0af8f6e17030cc413a2dfc88f4115b01513cfea5890992605e0b559bbfa01d3a00d72ec07bb2b6d7cd13993187081c002891ef086307f102e8001e812d84381bf8483cfdc0c31c11ba2a7b80494deea08081e5c73962ba3e6d2552eddddc230b65fea57789252fb03c8ebc4ef4f554b0fb1371f835b36268c18aa5eaf6325f7cb995bc40db67dad16d9217e8665ec1b154494ea0cfe27486311b58514ad6987696ccd4add07490c1047bfaa824c32ccb8f92246783c1ef82db1955685b6b91b1f431b19d84343d3b3f04406eb7687c3b5237f0851ea73d5ae1b23a34998484cb90958be7758b8cf820e354b28b2fd31f580501a9e56b909371f902aa3ece5bab348dd4b8d5db7126b80478c33b6e357281530508128c42c737c1744ab7b565834c252aefd58a7021e1131710e609408fd68805335541b7e62970e2bcbc1366c3f7cc843ad6b911d3003e3bec9b59cd7256cad1e6d9c4f6cbb976dd5823eaf4761d3ab40c1611f732392a60618e8929f040b3cec13ad2ca5d1f7f49c164c8c182d25728ebcebbda42bf368c82a2b5677054b7fff7abca1d5f474364bf223d29b846eba729db18b211a5e9abe12be0edb35bfb4c50d9e1b0b41a0ba9b1304b661f98e21c02ca5f617ccccd4ff089aea70f80e5adfa9e4267d0f55129cbf98ec9a36ede54a6a7cfb02690e6e7721d6535e6438ad300a3453419f34ca11bab4330d2cb1b5523c109c2ac7fb4cd701321a972d6d16e15a377ef2de2fa3506bdad1aa4e788c41a370e2631df91349b56685b1c00fb43e2f77a66871fe1260785acd394d5523e2101163b49d95ad546a7fde5ecad364448d323995c6d2f8d50381638426587fb675e4a5034181b143f98ac4ce81be6880b60417085d90981f0d336f26aedf8df4c76297803dbfd605aa825fe0e193b3d208ac05e92b9ec890c45216531445579e07db2d5b085b71cdba1f8835eb8e31990c5c2759fb04583c736d1e8fdff28fa2ae43bb486f96cebe5266db8269e95b68ed4d35564fa4dfc29521b1cd1f4803a13550aaee7f36652eb5169d2400cd23bc1bc577c275065aa0e1492302c4d677707b50c6cf977a992eab4e7d190c1e9b087fcebbf87f7bc0b225e20c5b54fb41bb6971a4a21bd6b80f756a9ffe0404be35422a70659956b48d10c2ddd2c9148845af7f7488d03300aadc4e5841c06698c7e35469b4862bebde8b7c6bc71d7e8cdfa4d32635e88f1e799dc820a033941e2fd3fc6138dbb217f57a023bfe328ff3469b8ad648e832d59199d3120e1da4b23e36c2685e16cb073e6dcc77e5088f3173ff790471f7da000fd8659f57e8112664df5ad1df1ff1c0480647313b889cc08929f76043ef97831574f5c46aa98861fb6bc24918ae4bc341d74ca66b63858a383992a9434a4ad48e53c8b1f8d4a67f78c5989c23105cd2636538128086d5b00b7bd8675c99812f7f899ff9128e36f76d7f29fb85f52e0b9e407d1ced0421c3593b2400361e61ffb8a80a53e4fb85a293eb911612c8b9e44a356eee9910c915c716544f2d41d9e97980cb52eca94a9ff0068797889cc89bd4d5a91b03293789697a0a4667324ef4c081cafe1ea8557189c799d538e0c0a93fc69f117d76d5dfa18f9906a0cea0a9f1bd35a5ae95801dd95f8abdec913132156f4e842d315f45aa23d4b636f558ab594ff43a8d38c7594174ba74ca8e4a1644b5ea9e687f2ce78ffb85539216d53b36e788126cf4fc74af42fc5aef6a9a33e47ac12d5a494f8b1d0b92a11ada6bfe2ec5c9c0eacb09b517ca46533f7902bc139c8b843ca485429f084348885ca486cf0b9db968f223cad6cdd6b3698cf3ede3c72bec068d9990771a28c936e9365cf788e0d6e2d629d469f257895aa9f23576e58643ce6f97179084cf44205e916221489cf57944f99e63500ea72c8e53f03177ad775583e862803e0701b62a5c56acb2ae34d28e947166be7233f450b5bc555b5867f594c8052db6e94d8d46c2da3c1bf7da6c9080830fa5d2cc6bd652dad7881183db4a76922243f90c13f3beb28e10ea7e9d5806c937113fe5d18fa9258f45c1a12a1a7bfb1109a3b0938a7f38fdd91388295b71408229b4725e07dec481dfc2c7d9aafcb7efb98a353d0e5bdf2cd8a53256efbe682492cdf92721858ebf42adfcc17617241db700793a4c783b70655e68d33b9b7a89f17823cfa30f03b2c48baa93fee2994a3ee85d098b20a35319a5d215ea7ecdb7408fbbedf0c37a0ed227a9181bb8b3cf78db355e988831d084ef7eecd9d0e6afb2935b20e42d1f5218f0e9a7ef76ebcad48ec09ad30bc9cae7034a15f59e78d8ca5c88f211c77edb39c6e9d6deb66dd164317a7c39fa76eea44c333cc91455c8fae3ddf83a0c5dacf30b14ba5150213655347deb05c290681d7a18efc9399ea47ed7506e52e6bbce3bdbc94a110e40091c51aa641598eb2a4c6eaeae9597d08860ed754adca74077ba0fb80170e6e07068aee1607b294a86178faa91ad32e3e1d7c7f97f36c8f7ef7dc0c1a31935cbbf0f518f05b5a8070cea244c64ed71803b3af4e30842191d3d66c74be4cf6af66565cb2a6946b23f82b2ada7b0a46bbb75f9fb294ace030cdc80a1865eab26650b101fddaa944802c75560b40d7d06377205a45098f34098fd4cc177106c29fa68ccbb4d9c65b258d4b02d37a5161aaaf3fed3b02ec3fd34edf59df480c5ad54690d0b85c61add9734f57a5bc02ce2888d333cc7cfc1b3cb180d9f31d295af135f4a22dfa826b8c03c541c9a541da7a7272404a06ba257cb425161a9cf10ac7ab887d070cc8177ab796552a9cd115ae4dfad52491189f5cfad25afd02e9045e68924d0c6919c7298f02131d54e6a1e747f4c77d1904f72d27e1e4c217275aa3a210542c918cac7663cd33a971cadb0ce13a943f47b8019a4081a9f70e6599eb3942b6abdf57feab84bf75782c22de1581969c42329b476dbcbc05fe95ea44ea15a9adf15d9baa2d1a82f9845c26b58f6402d4041f3c90d39ee8a8d7cde1a3ea38eab5907ab1542e8c20fd55540c15e00546244f58b14afcd995a225716154709da95db5060e8f344c4dcd4ea9e78bd271490d917dbeee9d52cc7cd48bd74a68e6ab6b83547d9e898ea1c0ea61b5882b491ca60495ffc5765a0fe0c16d296b3949383637e020b43f881ddab980f5daf346f59cc88508ed4c4d22c9f6b8537d91641ddbe36dccd7843022fc37b4a234f8be5f7b2da84e21424d40b91a815a429a538442402dbeffa5964323b7bb4debb3fcb528136a0c27dfa039e0d020e079bad1184e53f8e9092897b302e19469f87431bf775f8b0470b9ef55deb81b764cbada25dc0c51b0c78366fad9e0b72fb3f0186bbf12771b755c24c06d914d3b51f63b10643dc7390ec88a157fae7c101e434a58e1c78dee454e59b49d6c85bd667adaaeaa9d9960567803ffc8af515c36995bdb6f4d9ef9404212df076d67f939d0e7045ecfdcf953e02aa82b909d1a3789145ab96a68e12194c651073a191d981b55b106bac3294076221b780c197d03c1c71ae1cb92f4aa4a27127d4a7332f76516c403069ed0a8e91c202cea7728b39c5d7918f9606fc401fb8be7c6bcb8977273ea288ffc8a560d874f4c782a199da01a8debba4fdd2b7638b7cd2ef0f0d8bcccfeeafb8f9d42abeac75557cf21c7ca8b9267b296a00615aefd87592ec465154c3ee04cf649bb33582f3484670daeb2282f1c5064fcdfa89a7641cfce127bfeca48211200fbea2ce05fb762da48efe24e48f89789f328cbef3765f0c2bb9c67d7a48785f1d98cdbdfa94ce8229f2c8ae7fa24fb8c508cdbc167df2df618cf279fa3e883a8684f2f404e16131909bf1bc831568c22a965a320d637640d24d98cecbb4ed9b1d0931e8260220ecaee98c82b9bfc0b9c2f1b28e1d9ef8959787b10dbf4dbd640888a0708d854544afd7dbdafe328bddde23878c64dffb1c876765b45919c204e19c8b5bec3d87aa40a43ff2c1928b183655e2ecb4877feba0252ac3ef2b68a4f20a159303e27baf291d6d78e8750c004ba6fb95bdcb9e416455ae07424a377995488a7ac4054ef007e5b8288e726ede4189c643c6e4a19696fe4210212d742106cca9c3387d312869c2bf3bb2671be4a7ece8a61e14cbdad0d271b86cda649025b143aecaa0a0d5720104b884cf6efe5fa988a783a8b4d17025ec124a2877ddc6dfcfe0c9831b396aa9e77c1623f9958c11ec6b33db46e8f8825a60d839bc27ded4afa114073fc62833cf6a00501785017315b7bfbf47202754150f1ab4275783ec129d9430d45e6882d1e1d5e10e49bc0248208ccef36a6de5ec201fba78f3704c990f378ca03ef9159d444c872bac51681f955c9a45471c70c48388d2f1e8e6f2125a8c21e91e6b4382fabadbfb7fac89d1a3cb15450d4708bcd3f55795d52243ea37c0df189c3e12ca371aa430e3ec865d3c3c0b810ff331aa1d2ae555bb57d462c4c55d6abd6e3021420919673d03150ebe7ece55b97cf8eea1364c7c7e10e2f5014bf5fddf420cdceb77c1acf843e11d275368ac9101efbb2ae1f4097186f5b433b0872d3b1441dc8e29b538c461f32df766f4052afa47efd22c846e99e12a6365bc9371832eb5962128de997e9b822fe89180ade23c7ffa5847fdcd2f7d4449dd7dce7a4d79f7f7e1099f274de86186c47d4219d5fb7ca3dbfc784b36830e805843f61035ca0f86d7cc6d8ab214f239469c75654f93a5f912417f9a770dfdc8943da33c86278b20e52a2072ec4e4fb2e568ce2d86bc4c095bfa7a974b85bd2288437bc05d6e20a430b57f55af644737d33669adf8b6c3b075feb412dd7a30074b6ff6e9485f833bdfa4de3b6137e9cea1dcc6d1b3e40b53fd399fd4848e0aab34f442f2a117dd391409aad8d89aae2e4f3abbaa7c003ea3d2a9347c38386d32402f08bf92518910d92c179f9f92376f3ae60eb54e3930c9cd423c2c510d0de1da187df2b29ec6b998185dcc9aa88c6e95ef35741020b505a616e5c166003cd7017c2c4921389530f2eced242f9cabc1efc2394292ddef93fe106dee087af538c779bc209722027adad0dc6f66a0239df26ec3fbd56101844333af6919fde9710e7f83d50291768ff0b9949744f49c54d5ca92c82128eea0a618986da47015b0cd5a425c23909863ec9829336ef44e0941d918d1319c48fe6ebb5ee8f1370337485a6e8a6e4ed499a263223686cc0d9406d99d0ac5e46490a8dd2da1799ad32774d1b1a6f5bedbf1210d424b260fe8215116e25e364ad8079be564d14638a512a586f5eb91b61225b791051993a30081a30d014ba9d024a7a0aecb7b6cca4c10b026539c8d0c7960515dec52fd5d3c3ba9a0f8184141bd51fce13de2c85e945ad0df71ad49079f6708fc13c9c4116f98846f9289d8707e227455c7084c502f834c5050c0ffd704b366d409468bf2ee9f4818a25ffb5a6400aad4e96da016cd199a2efb145e1878f9aed01e53f79131c912d3a1a9bd81270c6b70acca62007c822c2d93373fbcdf4cf92cd7fc08f1c317e1d3ecf811410a2223e731af1a173121f0296f810dfa63d367f885630dd61521ee7154a907903cb329899980e924ca1284b0cd5ec1148c9d82c097c0be6cb5a621b19a294b88bfebef424a5400599b05c498e11ec40ed20a66055bf08c223ac1287f5a15cca138a37f62451d1444c40708040097620335057f62414c5090205da0e9e070aefa9e78b1f302aaeca279b7fad49472a93af251990333d58a6c1f071310e61837f0b75d438d2a77c1ee5ab6c217e50ef2fb8846a148dda441e1cde3d54faefb436585d2eb4585804b83a42f5830d78236f35ad3b493565f203dd2f977b228c26f3f1302d8769346181b31fc8898961d481fee259cbdc4148315319d383329934a64e579f5e12b8e50e95da333fe89cb12f48d08d558c78068dbc2762379539131e03488e1c8926ca4e86ac9948847584de883f84b2226ed2722925e71ea39867d16fcc5c7e6fd0da34ae9e496d146d20cb8fbca2e4fa5d69649aec827931cb281678f132d338ac0e1cc400f1bfea636066551a6ba334c9205f8acfd10f60a0e90298197d9adc8c8ecfb0d9bb4357fe529dd7b70572bf2dcd35c9487c18e38f426765775c71b59b85737d04c5993dbc763955f27013154483a5128aceb882b749f9e58d5f35203607fdd19aa0f616c0a6fea88c2731881ccbacdf976d862d26c69b132f24ffb5a2817a946f6a319e4c4b5f21418e255b55a38c6263dbb33b14431532ef3542f028c52ce039cad31e6e7e3a8f02b0b6ac1e098cbb01ce5765d45ce7a3ad9a8bd68e50eb8e4aa3b2e0f6add65e0dbbb74f4d25605bc358f807a5bf3a16dbd69d2b770764a013c88141f088ae3be9fb6f542c078fca6d17e44d0f084241f0ba9315fce847fd313d3a9bb1b1ff00c31683866a17893b423af691f5d9c2d7b6894e33c3ca372d18cfbdbf66ae3f68fed900cc5115248c827fd5a4bcf16edb95236a9b66659f6b9f989d148d584a6a45c85d5cd4cafc55c69da9349d83ea6111a33b1f0017277c0a7fad79dd112ba065225b1d128e60fcf78588e604f072af1b046fa184dd994874d3ce96a00dc4d03ea95411d2b8a6d12ac60be2988527ac10351165678e0fd644c25014ef43a4d2ef5cb5813006e92081b85c7aef0a824cd652907ca6b6575c4380409bb61cd363e86523405c354e114313685897e38063ab30d0d0d1ede82af028b718adc5ac08b948c787308052a9b21a77ed6bbb8694dfe2c42208ecc285751bfa643870ba4dd5a6e1a58ad516848d685d841d892484826a5e54d4515f70b539fe00e63bf9ac05dac05d8e10b3dcb29244c1be4a88d526c3b50496fad3ae7c29f85e64c19bc4426b63dbe37445e33c3cd404290b3b449cd51ee2313479a5d5a17700f44084278a8324b8b08e96a3124a42a820fc8afc06a2fb08f9d6003cb8cbe709b0408c81dd3fdb502d3aeb8245d46ace98eefa89e784053a505edae3ccc7607947bbb43523ce0156d1e30ed4dec329e8d8fb9d66ed77d15e8ae3a0906b60894d9d8d6bd8051c7fe838cd81c286f614eb191d5bde825d8428a6a5d929d6083170a86e56cc9d52aec7ea3e85ee504b2cabaad56fbbb4d686810f210efb646c0ad35a535cd6843f3c53a9644d6c8a3c8fa19e1c25d9d805393a7c34d4ec5592918bffc4cec332735dff9e92c7b329e7a4148eaf0768b86fe8731b159e370787790c8b6820f906450459ae58413b7263c6824b9325ad7b29564ce72c2a034341cfde284c44c987ef680827f95c46a6f1e1e4a4a8fec02c40ae81a032986051a411c8331c44d29d8f20e77ab0de5d2f6f244ff5b624f2568f01455f0c9120a53a699335951892a9c7e4a578be54c2c109f3218dcee37250ab55bbaf9932e2a1fceca2dcb2e48142cf65fe01ce281e2ae43b72da33d46edee8d903a78049fbf21a4f20808986e2ed83684e2063cf0838fa18a446ce93e118e4d818662a2db4e14a8eb071567ae607d2e3106932a4e2de96fe5e6af6088cf9b575d881eaf4b8c420419aeccf2ce3da7b0851427ad58cee20d0c89c271c309b72609d0f348d87ed494541bfea3d5313548525f3e322c796bf5765edd0a24e0711f74fb4e17c7b3a56d63162d5f34889086ba8e4d906c7a2b7a9b0fee6fb8bc4ea1c0217e4ece5fa15edb7e2ef4cd21316ed38cf1eaf67d47577b6dccf9d07a9e6b89522704da0f46c335ac17fc0ed2db35b5aa2069449323b194888d9c3b76dbaadc7440db31a3a5ee1fa6f1e329d2b8dfa6788503d1cc6111a0b94e47dc2df48ecb69fea62f19880f79b8b720d7152ca329cbc420321076977dc9c6573c2b0f977c6fad268702075be1b81fce4dadf5d0c9144cb4211a5429c5b81ea9a676a6c84a7d80d4b07e501b93848d61f7b61a591a86ed71cb9690c9b8045485da2a45e8e009d43155257083237bc9153a390809664cb9a37d7f24b410528e0a4c942149323f621060cef00fa36ed9170191236400cc03d4c598e52e1b0dce250c63d28af8c948555b678aad551ea320ad938318825787feaa542022892da5f867b58d7c5107f2f8567c3441435dde57ea73b67345c06b68b57d1f8d18dbf66130961101ed85f64948d2dac3459ff92c8378136d4943400d7a933f6985065dc0165eb643bd8e94aee6d43c46a9cac8909709fad89887f68496742e1ec97d166102849d8a04d749722103ad1e831f09f4332ed04a01da6ee6703402c81890842c74a842abfff615d5bfce003cca0f6091c4cb27deb7347aceb6ba5f3ccffba680565b1623b1eddb72db2ff2ae0a2a29cd7cab4f5580374d0a8d6b39c12a4f1c61fdb48936a05422a8b65eb4f03cad8f4340d13c98a0d9e86234513b4352abf167e270214c127717753e6f073b9e69bf8b2fd4e05b83d4e1000b839282c9db91266f2fd5c9a314e7fd4346d70569600070732522c58ee074c3a46eb66e032b2482ceb8906c7d45fec95b7a29f7816897d13fdd21be52227df222db0824c5b242e0fb47925c4edf86f3b7ebbea21e948d7a3bab696f698c4b90ffb8bcaa5ca6acafe1799f1e86a5a3d584268db7cfdbc9692d8a8d512643fc24dea5e2ff77405c98b91c6f5543517c3f4de47632e7bcc6e2ae4e36e66939e67d08039f77ae68d1ba7c3620e3680e97421ec0f95524b3d2b2556b2ee966778bcd3a5421208343d97fe38f7c954832a298ab623af884e05960724d192a862ddf0f851b0975fe117111c77328bf93962c9d2af05929fb8950b28ed22679796940c9220125ede1d846563e28e4b7e01d960d10583dcbb4ae6c4dc5af1b5f5d45edbca2efe38aa96df4aa164c6c70434e9e33d0c4a0e64bb16cf2bd7ebd0dd73ed6289a420f9e46b5145a9f63e8dffb9af89f862fff25f0f327c531f3513d9ca424a8690c411cde461e78b164680691bbafc4151324571ec7cf0e659547674162ed44921a56891a4629539517010fe2f1decaea9474b2706f856899afec3736655d77086b47b021d14c1675e0f370d44e2e638271346ffe0f251953d16dd1cd3c92480c1f62574782bdf3b19a7c13de8b38a800f6df44388983be32d6655bd6f08ebbe670b69a77b329ec0a249160a49b65522692199f07b4a50deaf34b747bacfdc7f45b15723cb7389c09dc442389730ef3b242cc7c795196ff50862561be4a5e42f3911b793fa49297edd11cc668eaf5d7cd2e3d8794544c883ab04c116e824b4ebae6c8e1e07021b98590cd1437f8b52912cddfd60ad7192e5bfcf4593166e71b93b3fab53dfcf028b3f8cd42c9daaf8114eb3a8e582e6c8d57cbc7eab1fd553129d2311dc83cf247e44a3ca5df62db4f25c6c497fa193b7355a4caf53308115f6a7f686b980ef60f79368570ae577d7a017d8d15ed005d95d9821d4409e45956c933a32f0254ab18d192bdd45bb68afa239590e0804ea30b3298b89c4a7d7dbea11bb83aa827589d0ab1303f210ed2cf876995968500a45fb34d86c8bd4230cadd345b88e5a171a0637a9058530fbb69b8e55ecbdaa2c15cdd380444005e7e633582847f94faefa49647114c0972e17f5dd7de7c08f1764e5f75eac3c5a8619e8b5c7dd43b78efd8a087051d3b846e853b266a0ce9dd61467d0c5753d16006c13735f58c0a9878e1a3d60be0a8154db1610332eb684e4917a40340d35683d0a9cfd37c62bbb1973d11611f2ad304cd5c031503c9d9f5187c0e6a6f3189b3a4cf190a52935cff9aa469001528e2910c10c21feb833335ea61ab5c4b4b1e9d9edd80644662e5d8826ef173a1b17be10f77444e2961b5024f7e0fce9e73a0631578b3c3d0115089d8220c200b147f97b492b2650943037e87afc1fdb51b5d3dd75f9c90a5fc79e6e3099da25d621242ba8f3b73831e84f48d644255d82b7bc58b713aac7f5d44e011bc4b2106792ddee70958697737bf95524c0a0ff407c1e6b0be0e25ce8e67094585a2b08ed35f28cc2ccb80978c8de63e16c50f20d9de140e01f7a070c0de6dab07f00fda3b960c2810dd25117aea9b7cdc0e76f711febe7c2dc52a5c650860caf8d4c4e06c7e950d8af29a6005ddf501e7fc3fd2576f1e1843d31883b67a9e0337d5ed5119fa8ea88127416ecd50da32cdeb9e228cd64f784e5d6505f4fa255b05a65c69b59bf178983905444d2facf856bbfbf7d1f937dcf8fe8f060ad20e042e501f9390c05030d439aa9dae4ace874076f2e9f038c9757a3bea1782834dd6d6c1d3e4ea955867fe802b75b758f3a93f8dc675fd92a63a1cfbf573ed763f9c9eec2ea4a9a624821cf9c7945cf0e465148235709ba03b1b9384ac6b5f7b2084e289477d2b2f22108103b4002a62ae538d4dde78a6e58aad2f04d5aac7269d05f7515dd95c72ab56710839c72473a308ed1fcfb9dcd217e075eb8465649ef74be13dcbbb06be57b4f50f85f3dc8bff37ce9076eb9b53fb12a7d149ded86f5cda69d2de30f90321600626fdd3f248a05c4ac479325824b20309a39a7319a1a8ef6c0060cf3ebabc54a9c6f28d51a890acfb449c383b388c35daa1ba42e3ff9589abaca85d76d105585f4715b3a073b4405a5235103041d2588a4cbdece0f8c243a1f00acce22eaf9f2b22c89ca119f19c96664733510a35981a492f49951236e55f3851a82afe4f07a896a9826b505e0d55c81383e875b5eb2c9b1888a547c79449bc6869538051bb6af12679e3b2a86813f24fb7d15019254962d6556de4b431b064051b355bf7d0bf77e5c28b9ef188ef7fe729a5d86fd040caf43c7909a6bfd5e22231d0dcf78c2eb876fb076dcfd5cca83efccdbd58e46aa014098a5566d54a1948f37e79c4f58f2058a8eb07da2d0b93859a17f2200eb6c41eb0edeeffa14d53868a961678a301634a5691613104fa9644d5b49217ba7b67a0e21ccc37e7b52ff0c6a3300ac508502789793c8fc68d1994f3a738403589ada8f4c738fc1e83380f1ad53852a74c94060982075f4f53a1eed52286170c7a7a000c719456efbe02ab8f3ca3de73665d854298e3d67df5e461ff38c0fd64e016b7f95ce1a5a612ec2f038f9fef91ea3d39311b8a4252e9b1bbd570003d238ac6b5c30bf368234d88fbb415b28a15ad4a3a2a001799b9554988dd81f8557357538e03b5f1654acf5072a9e11cc67846466343e08c70699d5a48569b0097d54d385e96f08f40d10aef800a135c3fe869c20eaf2e26a191f30d4a93529b324358ae2f7bca1bfa3938453f9558228e3ed8404bd4e2840a76bd70252b78c4006057a8e803d1f36c6602964584fe12f0df32be838e2929653ebfe06771351716243d6c673e911205ec3963d3604aa9e470ff36e0022abb987c63daca10d74275382b177f5b37df847ec7ff00bd314ba045f271a0d66dd6109ace768cc82dc74e51ef7917529cebf283f4f2268c5e827eba2f2462e0915bd168ea2b83049ede1ec16a01d2455d35f3841c952146e93864fdac4e13bd59d1fcb0a89f2dce414ce5fcd51797f93f0c4ef377e4fbbf7026053244fe6a4166c811c39a1abf7e83ca528d82e7786ff00b06ce7307c342fbb07259edf39ce2ddee03259e8edae98b2b51e6dff1f5eb5c4a6b1d37b940d1b9342c2f8e7a426661ae82949055b90a417914eeb95d8a2161c1f9b672b7b2bba7a0e8c4b20f270eed8a1bb056311c541857b70d0dc1d0c9aaeff785e939ec306a95ffbca6a066d70ff888585d7ad1236fc3973909c286106938f3dce9aeadc8b13dcafbbe48685c09424ef352db483e233fc391ad00f5ec820e4d9e0d1674551aafd6bdee59d25f7b9d393863b0f612aafab979754d9aabb5d1b009cdbfa6f8e7fe984e8e1fc695800d1d105765b253035f93eba6bee8f4f9fcfc6786168e607d6425eb751cde3c635d8c52dbd3a4cd8b9d54328e0d0ec1b309fc5c2b9e05fa6904b4faf9bac72189a7bf3e17a9815d63ce8e1425d70d3ccbea47b7d7961325e536488985d297ae4adf84552468e812b866252d58f455bb2b142a048ae7962cfd8a464742b036bbd040bb9d8b3d6c653d3182cc268d07470989f6d5e36fbf06d13686b83accf3222761959c36b1461564c18ff7859322fec2faf69923feafe973ee3dcca8d797896d1f872e734e9133b003025ca09f77ab16225f7630af111a24af7e20c2862580982b4f2e37a4ce387d71abc3a488e02864b18f047c11a46d8e30ee983323585807cb79795c8c16e6ca7c580fe4eca1ea73b684e4c3e18991d91a59f41073eb2622064344082e102a6de49e1fcb71c7f52961c16ac2f57d02157bc1801bb859c038ab3561992e8936978747c77a8569b1a626fa55ac084db28864881ad4c67b8232285e2368357d055342158ff45840a1cb3705be06fc266652b974ed401237d34883f6aa1f6489f6eae917bf5e22693094b80770aa58a786b2243cfba3ca1cfe20de0d7762338c88d1f2201a9c21b7ef1dcff607292ac9d2702ace966ba9db05da2614531b33a1520e831f00afc957d36b9600b816acb57b73d5f27eaadef3a11f515d89ebc27d6e33a3d744d0b73ea0d21f006e0931df70fec35eb6fa2a95957e27f1faee1f6bb26019a89870da7b52c974b0838817049f77b47d2aa88fdafa65362f74c2ade4cf4f7ac7e85389cb9654810be3d7eeeea765c2fd95ec75d3f0d2c43c93b970225f0fc7dd6fff5976282ffaff7e598f540d3257fde4e1c77288061d3cff68cd86b097913960bbf19943ff77bfeb83f19d0d93cc286b1798bc2703bfad55dd1827f301c7c211d750368f710f326c11fdbd36c413be0247f21715eaf85f0ccd8ab68c85c701229cb02d776ac768f7371aad0b8049b42841d3822add91b98a46673f41f43146fe01f996309871c528da3b3e6fc21b52f7bcd10fca3a26c8ceb917e04a19fbc76431a93ef4f916995f0d70c13af35784078386848aba3dc338c5d8f5dffd66960184687b8d1f995b15c256c88f09c4392181f02e072a10be4f43151d75fcd3318d6dd060583a26a8b2fb50c76708184642add16695894b8d321646c36168ab4965402b73bd794853d6817c76f5a1491b609b8a4f5efb8f75bcb8ea540a4b92aef6061db23f818d1e24bf866eb49eadaaa6dc7b41ea0f6038ace19e6817024d093456dfbb9a4bdb06edf62ebd7ff955a58838e53b7acfa7ba82000f2b2166cea6721a3b3c3d6884de63788712b3b50658acfefca8ebf444557cc15552de8e174693c71828140500987009403165a1cf970e52f7c42b8888506a9d36afb4b815e4a2ef784ccb7553e801bd7fc184102bb7937138ccac9e56baf9200192f72c2cc80bd4da10422de51fd56d4489a1c80dcc2e39c9e3a0acca627064c1638afd6b730ea1020c17a3f3b55e6a48f2c021d59caeb4fddb02cffed3119c8336a409a631bf6531870428ad55f99d131e3b872138c32bf9283516a8e705551526154df6384dd0f18e105be7c379b8a58441e0061513fd794b9bc0304d03d5a923ff7337f716e8aadfdcd3977f44eeb366d49cadbdafa0bd09637290019e0e37d50a021c4075c83f69309f29a9cf579ac555a7ba8c5e99d46715e5f81f7db1ff783cb234b595c22a873c0bb79375f3c1393be090e0ef11ba14d8a09d7f29ff32254e1c15ec77515cd06184f7444c543bc6cdb5b883749bafa2c8ab96e53ad119d41a53238f2025c736029636051f80918dd753508c6a9b18562d1f05352f6252b09ae979b512fa5e7c7ff76f2d468a6d89b973cc192ef6e261ecee8da3423160a341d6ab450940732e51250fd8a86bdf58914a880a59d0b28e0f145b043bc62aa5ee5c05fe8db5af64488ce1b024e110cd88fe820e4b54f9e0490f4a8af7d44d5a763b0ed2bb2d77eff363f786aecf55747590a8e82f8794495503203fa7d68ca90012861677652cb358f4ff6e9eb82afefe598354c8765a9f6eabec6fa9d0cda42258981fb67f20bbf9de5c0c9c7666904d3934f88a5283f0aa8db2e5a9c6df55ff6bfad8ba8017e1c0f4bae59f20156eff9096e9385fcd11a18e5caa1564e0ca7be1e183651cb2ea63567e433f53f0d688d4fa1208a82c6d625ed651bdd39361537ef3fc170634b71cecb657b0193d09bab1370dd53d1a5b32d606e8102f7cfc7347a223040609571fcffcc28243c37aa46ddee11c95137fd21084bddc41077dea0a5d17440a4ffe55912ec57dbf92773d8bd407d903c64c7a263592b70d1e0b5337d304c75f1e3dc98533ef78ba9d18be2a6709df42f9c229d15b57a9d47055995bfd68f7163a4d4562256bdb9947f89623e5f8ab430a502a54b7b0180afde9f11a45c1b143fbef0b178336dd1f16fbc2d53a92a5c4385f39174e6ef021eb866a729f4086f07a4a118f0af584f05474b3c07e3af3c9f6293c4a37657e4785d36d30b2e414defefe6838306b96484998686cb206fc610d7022a90753738b741e58b4775ee5cb62d11d8fa37d0b313e7c3938d757191098d7ff5a914283fef2032f64ef7867a24dd340a4dc1504a59b91ed37a241ca788247c3abb50d082e25c0920d7742dac2ccd51ad59dc5b4006ada0fb1d8cf80b9f4d53884006f828dc413a9316a3f0c56b85e81bee2dcfc4795454cb027dc4f02e652b28332a82dbafcfe3dd06f6bd31fb5094b0eaac602232aa44acfe8f78c74c9a34f1f3bea058bd39424da1529afe48b8a406b9497ffef2352b55cb6fef1cac29abe5aa5d0c2a34424e56ac608cd3d64499021413ea7bead593f1ae6356071fb510a3f36e383018f7255041d8456f941ebab96e6ad8515b15fd31a8863fd066ebaf2deac7a62d404a790c1f3fa552af24884f75912ecf00b83922eef7e9d6bcf6d3640907e2a3f5be42e6885768200e745d484f6380a7eca8004f5f4e1ca5f21d959ad53b7479dcb8b30fe4dc544f2cf679372b6145aa43afc43f745fc1fb51f06f76b6cfe1f387de1dfdba9833fb2fedf615f3f1c81a841b7853cf7c1f4dd8fd76cfbb6db2ab9c98e2f488c775a2e9a2a1f71454ada626af50107a588f9631a0f4b0fb4905b98b311d3c6aa68c96229a1b7d2bf178eaec6747a6474b402c23c4fa1bf6f4369e1a0cb3ddc7bcd359dd8c97858192f0c232c5101e2402284d84c9fb43172c00160e45140a5914586112baffd00c6041a0d8c0d965f15e22c2af9288fd3604dd75b31691ecc89af2728ffa758d568b43a34abeeea661971586d58b800daeb64de45c01deca1ad9dccbd80ff5beaccf646b3b287660eca50199ab978447e070f45afe401c091068c0f48cd00372584576ad3c7ac8dca81f84af545ad0e43a3ed8ad8f3a265cdcad06d2a8b41e13bb81d5b97b209f844975933c35d17f28fe78f4f9a57a01697a314bf797f07232fa0a1dd39a93ea3f37e8980d5415785c41dfaf525f066f9547e22a2ef77d82145d1d753df0df8c96cc5be124d5a1ceac0b46ccebb96f4586833f6da56cae5b95429e60f58ffb99d807a99baf29f8930de59d8823b0becbd570023c070ca1b87721fd8f0dec9696c610ffc95dfa016bbc8636fb024df06469b1261d4b0d736d59b7fb0261551dd648ea84a83173e531c3c01ce5652cc3cd3a3b5f9359eb5f441ed038edb8cc5da1728db42242a37d9bb3703a472f42c0134d201115376fff801e9eea1f0851ddb8513c04454f781b1b5cb9751ce03c97a7c7ec698788d2d093ee1994763fe5b876ceab8533d71ccf77a5bf6f022803d4e54719555e19e1ac2cd3f074564df363b7a19b99296ad8d68a37ba8709ec59679e516e24361535eb304f42c065f1c684cb6e3d598687532a17f687a8356bc7a935d637a97299c7088e1492f526763a16be3b934648fcd83057263048d734f4e734f8d70d6218a8d17d9c9bfa423303f50db7377d5585b3e4b0c3dca8e289d11167ed15ea6cc5341f498d09e66fae4b5cb9f51fa1064042405ddcae9055dc85761798b1ebd55cfb61602bf5073a58159de59f4bcee5d2d180d5b7d710b52d88938d95bfdcb0ce33d30266e18fb282cadc3ed3806e8560b8cc660d882a52449ec4c1f922b401a02bd2faeda7e435a2cf97d403994acbc945d77789d0fe507d97f5279938112cfca242f371196696119a3efe05c9d1ec473980b931472fc60f440612e2c834130c0109317d995ac5d32426d2028967ed1620b4b5cf72cae86e27e1ccfea8b951ae37c591ec2710fbed68180ee19cb183b8ea2e089c0b641d6eda598431fdb24f34258a78d48075ca32c9d2cc19b5662d73647ca6e8ac4edb20bfb29e1652eb03ca207566d688c36cf608468477a70df1cbd7210eb245d2c9ff2e0b3ee269b7fd91e125bc94e816e7ade02e845987d4b655588d691574d111ccae888f8c173eed6a9fe1961ec7a9917dc9378f93be2f28f5567f023e4c92f23a09b6872a0162c2de579a6f37272b72fcc6104ea62aa3d3b303b9e0418e0330cd3131a6d5fe51d45bd8b68fc6f4f9ca2c878798fb8be51ecf19929bb88a3b53e41ce3d8736450f9e9fe33e7a00024fe489408547500d7eabb6111c4f25cd37392de8a7b28607ea8997bcb9088fce3b9274de2e24c558abad82ddaaad6d5168c9b568ef16cf3931a55f8e8c13f50dcc505d6257e89f980e3d12b2b3ddc765a284bc5ba4993eb247e18c43bc8e3c6bc9258302b701bbbde3c70eaa2298cc4d4909626b24f847d393c843fbd435e52b1bdfd3e2a1a8bcbb4c8e097803d06644e5841464a88116fda5a345450dd67b295714df5a4ae0b74fe81374008098a4b8da50cc0a55b4bb6101f91e50ef2877598de71d38888f03699db410d26de4ce8ad481dc480ca5e36c3175e89386e9818ab5299a7c93d7c91360b03e21af938b031de8243e74484ab108bbadb132cc0cd4800dc8b6b3a169c9d14166ea2a6ca512436f27a0f4f3893e9ec24819c2058e7a8651b98f6c0800a0942fa08d8748446b4cd6956cd25100c1bbf89d89bedc66ae24591c6eec784257a20a92d22ede8a4c0f0cba6dd160b7471a7982c9631a2c64aa30c4c0b0b31fdfb3005c490d2a58752ce41aa119d8e1dac2027470f484b1ad9ed4b1406fa8180840e394267f4aa14c5eec152666b621c47fa2ab6f45fb527f7a654fd97a005a5c2e49f4aa22737c659dd2cda5aed7232f5b95f376b9d43d4404d274d4dc3dc2c221bc95c63498057c21cb9d9bfcccb3868d2fdb4bbfc7f764a2a747c6f599deab90e53acd82cd9eb7b3939cad2fac87969c5169b6d5d28531a00e8ef1d490e14b1b30bd0578243068a6b8875cffaf209f4b5f8e1c0fe507c802b4a322e24d47af489995993a0a5177bf41b84cf1babd516b749dba3d71a08e8984b8c25e1d06aa000d3b045e918f90c232a2b7752ec9c4c6f1bd76ba55f2f8df3c46e7d4a87d3c6d5ecf4c1998cdf51a8860068a2076a689d2828aadb4fc896d38f235812a4374cb2b60ddd10a0e1d3fc597747349923c305d006da300f2ed1c8bb5d18d9382768ece3de1a26cf1f261b89f605d9e04e61bcf44dc7c43165497c866d2d19b9d00d1a44ebea7322aaae6959ca8921e767d3bfc1b692ca5dfdcedd6de2ae4eab1ed75918c08ef84d6c45d6f850b5f48c65f1486b0391874c220175311130e7a41824bc7880318957969554e3ce14a39b0d65564430ac12027c1ccb96f22e705c6a588e32a43115ed02af079514aad8342f77b600a0c5b5d3b98ece0e677046d02529078d9e37e51a291174a4e86d2fb8f8f6da6b820aeffe3ec6879652d5b955f54ee5cbe284df84ff534a4f2d5cc10e679915d15a7ed8431339e10bfdd38349e90b0182184f0c89053dd57bce63ede097c0525f15a53a11b5c63f00df1c7226553bfdbb5c36d7f68f7c41b623558aa9aa91f6930feda8a0005198cf888a2b31be77f52004800177e0a3c30dbe8d29282e3768b8908a52979d0bcf4c51ebfa4de342f0d8e678f1ab20f3df585b897a9dba7385207e01ad5c2423de4bbccc796a9db719e87092f2cb2c18d4de456a0fbc6c3fce32961a8e7f217bcd6e9887e876d80cba1dfba923984a615d38095238ce1f384bd2ca10c6f34ad5a9b69df25cb89a63193be925027dd2775e6403178f5f152dae8e8fcb587e800f1611d9d1fbef67ef7c8709e119c1fbe2517a5afd2bb2a836036f3d81ef5970f6df62436c1e2fd4157b56166f3a4d0acc4e738467ec56afaf9b5b29aa151e5b7021d7460e86c700d0d248e76d0ef69f35e12e6e6e55338a4bd6b0290bb211712a7b1c1e74f7962fbbeddec2d6cc92cfb1f7f04616543d8f527016cb073fa717e732c0710d4547959e091e8c658a9f2c8aa48ed9c89c986874bfa0fc3ef87a3deebf669bc2f644b341e925b4f72d8d83817584fc7c736de12a68dd25a2261f179b0039bebf3b5c061d973b327f72531fd6e005d88d6c1e78a3a949918702efdea8fe0d459c94f73e758dd333593454ceeb980e754c23389b5e4e60bece41713af37f7f4044e07c7903a248f8b1d8cfb7066a474ddc52e074b1be9d46e1f569e4bdf9296039343142bed2cf3f4fec7bd6f59d6526b16504fed65b30f6431ed16e624d880de8d951f904021ba4891514463fdc557369e3bd00c67e2fc0ab7ce0569dce84e5a41e148963b925541d6964ff8954497997d28701e6260bd4dd99e10cce432b31ea34db9420f0713ddd7babc91b3a2c5614a0519da2270739fbf955724633d038d0b9b452c9387feecd72c4323f2ce16394df91e0d466874e261b928b64e3cf22959cdef7ac6c67e3634cc8f2944fba34c47db84d7dc2bd7648e80fda5d2f9e7f18d9212f5a528c8654295b2ae74edbf457d6942beec5e2049c30b65be1c470da965f9b326d1c6facbe59dcba2012310be5ad562c56834882f3b20dff8fd730166ba462d1d38705659624408bf24948d8e5c565e0c1037a92ed672b49084f4ff26cc4c40d1ec67181aa2785a6005afb3e2802fbe27277117968529fe31650c4228de1b1cf361d5d5d19eaa1a9fd9c27e142153458a575388e2c5970c2435c7b39019c0cf2dabf91aca5eea146eb69fb99adc144240ad1f4c299a4979170ad9f399e1d814fcf27dd1ee23a9484834227419640ee438e4eff9fa74a5bc14180a9c3ff17ae43e5b54f922e96f29ed4683b5edd7918701c4753b1eb5d59ccaf6009546d131da84099d6b1a80ebfa0a213c1524d5cb2fc8f90c96fb6a03c7293d5cfb6fdadf60c819c379fc23de0b1e2c79ed40c916ff5e5a1418562da68bb839c9e28372bae4c1cdfc6d4d40025b5d94fabbf12936a31f584253c6f217252e709b18014cda517ed7f3a660895ba53ae4ac50df543122c4bb2bb183f11b9ecc5ff41dd3d92d9845c70cdb8e80704d72be2cd1eb8c940afa537bcaf323b6b5b226379a80bbc1066b9a1532f0b6be26335c203358061598fff38e1f649f4e77aeef87f4911c6d9818f420229da2b06a3fa08f9b95d18062e6faea3edf2641d8d35f473d2873911d030554484889eb81f7c7a20ef3931c5df86f321348ecf296b33ea11a0d9cb84614e340348d2c04d1b16f875c3893326548d37f0bceba34c73ca9c94882574f82ff807532b5fdfb2dd31c97a0f0c8fe314b4453e1e4e773cf4439735072e037082b4bba80f4b26d1b70f4b468556bc873087c0bc9fe87ccda14d5191a59e687f100268813c76649b6bb0ad48583d25a88fb539fd8b9bb7848206c7c1a160f388446345d9c32b083192f2efeb37cdbfd5815ae30fafdfc2f60b253422460a907da1d7715f48cbebf8be56b5539e8bf7c2733826f28d8ddaaa72ae30150be1a6debb3b5333d1c291ae6fe135ef674b410240bde6cf54f3075348622e0d4e8059b9ac58238329719ac154fc3b000ced433dc01edc52b60aa467d58bd9b16ece3663c837c2be63389ef02eafa17586a12c74e50f779c6118256b899d1e95e70bfa0798fb11412f5bef40d0ce042e7457545411e5c6826ecce962797cf644c0836cab223528a3505486b349a4bf4aa66af21eb81c1c76561490a99b05ee96112dccda8888e217caf5b715c3f5ecf0910630c49377e8f94e713820d085f283017dbfc981b90ca9d0938cb3afaf07a06824f400b423f4fe4f049d43c3441c8b26e5e233842716450714cb168d0009e5faf015c213cbc61a12a553f1826c107adb56ddc22265407446349e12d2b43cc99b2f06ccb20160bd6506bfb396397d394f4b3a5452e06f21860bae7a31a2e777339997e696e586f12526119a6c654fb59df07d145f5a55186b76473ae92abf178d03733b2d52e2457bb36a071dad4632f413e4b3b4f8293b701b83c198a981846566b2a95c04ad885c80a93dd61c0250c548c2d19fcb094140e9e53b5ff89270d10a7ec9523e9549953fe698040a8f2db0989c8050ef47b2ad4755805ef71ad42eddf40fab733e36c0b8418d69a954d325ba78c4c172d97002a06045a829f8dcb76fc01b8929cb1dedd51d577fa49dfaba1870e52d95ab0ee360d15be370571ddca3891b0c2f2f799a52b0e2a7b78efeb470b013a2bd63e8379d5f902a62b35c1fb526490a1291cecda570a8219fe2c714e7435957d7963e3214a9f36395cf87a5c5d0894237c7a893819318abb43e71f7b3a877f425086e3744f093c3cbfd1016d3d5a462f0f612c851e806781bee0ddeceadd34381be8e7fe950b27a8f4a4f691c466df170a72e2da5518814ad1a42b54960f12c32e4915575639d802efd4c3bbc44135d7f2491e4852cc9266caa4581c520a55ff197cea635a9201554ebaca6ed1689690cc60c869bbd2403985d3b1f95e51f4aa209f7f399d2c8dc32b708bd5f8abe2c460f7f5eea64851ed4da4ca826988c09644f3640d2663dc3aeafb24f35dfaff7f1a4e2a5da347cd50f6d526ff0d717a9974b4cbfbc27528f753e7951a70deccb4ca54d4241b0a0f112288b328fa2da6d14a8bce4b28658638e96febdfa0e1275a31633b3dde218ec0820dc641c30a0221fc362a1f96966eacd8ffbbccaa44e2fdffc568d3c11e4c832dbbdf9860eaa5e781e80898f2520dfe9f870d724d38370272b1f0bf5b82e01980f551d3757a90fcc07472a62c3d913913e468e255a6e0ad3f9ea09440eadbc7507383dfa98caf57892638f50b0086be2c2cce2a38fcdb190a71c300273068296f4dd112bcfe5c121d6ac597e23f765e59855306781d9bec5738883d502059dbc2640efcf53d129596120e084980017c0ce202889909104845ecd645d6022c746889d5da2ac4c615121495b7d226ebbd6681bf9a0849f67548627011a1021eeab423677f0ff43edefedcec75739bb77745019c55d97efbbb7a13687c6dadce037daec19fc309100b18c856d9ebf7dc2830fc5df202f38409c61b6d7c56d538ea8efbe5fa42fec3f96ecc5b43e869da65fe09c1328d045b1ecba5b1d93346190839fbeb81b414ce0227fbdab1710d02b647d5c1c052e4f44ef0d571050c968d30108af3ba8e50c678d3d48cf5c89bc6dfd3577d3bc56267cb811a52e8aac83d57b7e6741cb07a69c4f169c34f06df8724a03d9043ef85f0531879d3fa91fbfd6b6c1341ee1df38063fbac9a88990bda5dc01040ec70da60d34cdd2b24c9472695dc2ab95f6a0a2525abb190c19196658abb46a1b0cd538957c78d267d2ac2657b325902a32942bcb6447e9c864a1ce91eeb687573bf38fb406e61b349756714b42bd2ba3693131d951c84587bf845e50ac73fbf5994851a8306c1fb26ddb3693c9047e9e49eb93ddb66dcbb20c44927d03b76799c8b027404c1f9e00d1e4ec2ccbeabd937dd263ff78222cc7b159a753923b65472873e15033699aa66dda2626c93e395bb7539f98e8ded7b2db3dc99268622786656ce13a544dd3aee338ee1509b76974d26b62177547baaeebba4929ea66d929ac0f6d17725df78eb5f29ab689b5d69ad55a6bad477855c239e79c3da137bf9092279a1e4faf076d08c6ec7e61f6cc204584930d174f01c31d9a55dfd7818766f18f5010862a6176a9d801566224552fe5d6b9a39c64c8e2223c1b3dc8cd5ac167d993cb81cfbc135f9e27ae9c49e7a107c303daece0ec3abbceae53d548efbacf3375e74e3fd27ca46350288e6366247c0d447262f17bf965af128ab555f5a76b07adf68925e7896568124b542796efd1b866814a8c6c1d8869b0071e67a3034bf8bd1196dc0cf284328cf9b523c4d0933b672c89937aed34d8fa2e47465c56df38a6e64f97d24acdd3997cf3504effc4285798c83ce651660e7e8a4c4299c75c4aebb35168fefd64a35c6142f3ef5172fc741d148439c414a511c39fce04c7bfe3f877b233ffaccc71d82354d5c55e2384b375657e464cf5c17f9711532da67288f9e9313ffdf47d3fbd6c57d82e7e38e7e4a6455110499590aaf8324e08c1c7bc0c3ff124c65846a22a3e683b885148af9a3dac6e73cc28a4624ac904eefcbc25235d3ecf9605a2476e4a7e9fffec12aa126fe8711e79b61c6fc9af928bbe5976953dcca33b9f89506ad74ae711526d8388d24a1b88459e925ac24cc4784a121a1184e55c0ae3838e1a841da414c59706f3a4593797ef43b3741885fc1ea6196a64b90c0e607ebe451d9af4c84fe5d02d7e5115f35d00c303c9404a588ab874e9f2ead241445b8c6247af6695cda91d24f0f31a22eaa016e2c1eb1c67fc60465117622c1d21082e984b49b820092da86ce9819176b5d3eba020acd7be9d63310ccfd7f9558eaaf8955fad0e2e666b8248964ce15eb9f36968106adfdee7a57398ed5ccf625d717682304a7d6a09942b4c4cd72ea5a58950a204b125b5c453153f3553535cd2e4dd5b408af160718411366f49add9da44d796d4d2c414103dbaa88a9fd9d96ae1c70527c2ca4434fcf0abe45ba572c8cc41414a4b94952865258696f8cd049818330775cf18d151b34a66e212719798ab5facc44b4cb08264687b48dbb641f1e509364c696ce1b2e58b238660b4a50a9810926a9ed0b9c2999a78c1185014b1a5899a273c7ba7381e0d5d8e0876b919558db2a03b3f6de079dd59ed1d306156b3da4d87e04d9d92863b6bd44718ed69a3519808a34694a42d130c06ab2af078cadc29a66c98539cf6728fe135575ae9a454bcd9b3670c60b7bb6adbd711d18ea86e5c57ca514a2badb423ea0e964d71a29df5f481bbcfddf493041de5a408bd3b635a96b4b85102e6e999a1c8a867a0052923ba01125f0c6909a3886f862f621fcda843137edffd686ebea2a16ddb52b004161d335a40842a8d30c6cc5c2715caab1d9a2297e634df0f683eda535457ab8391c2d32697db03c38a6704729dac4e1cdc5ac56d708ef55d066e77e0bb5b3da0d5ee13d862ed31c8a36fe6cab5f64f385fef8c69a9526b15e39c96155c7ee5686e905bde1411010630a4b8f428308a70520a97052785a52f5e20a1075f2c21c588257290841438f0c10c8ad0c0e04c5b0f0c47d80b23286e87a8d0c78db9333686d28d654e30b7c32f8b2157b10c7b6c9a27d9a5dd2d721d46c81d45811a417f5f28a1488bdbaf218a88fe428adbaf7dda030d8828010fce1003c6829e00193f0002147200840417ad46157561a57e345f4813c40d9e811b3c5da411533b1a1d1af40add73cbecc28516ae0b226e3fec2205b7bb58e37616a1db599070bbbd00baed85106ecfc08adbdb178f9fd082859e5a1ae69dd1222c5bbb1a9d49229ccfc437b5f33728114bf85bfef2390c57c475b2e665aa6597052c214d9a41b41aa32a8d8f10d61825bb059e71cb99544e235cedde96dab6690652bb7e803a0a57d82e2eaeb8335f6c055deef7c945d005637ab6ea0310ae1e9ad555f968beb8e54d98bafc85372c61d2a459d9b57376071d485e6a1514a68f1096b88804788876ed0e9824cdb5b227462cc7d578cbef7ee217851c2f7b8836a291b8dacb5ee26a6f2870bcc5725523f2207e87880a73e010cb20b7e4221ee8d7809275e022fc8439248858b695318aab3d462c0f8a6533715173a90c456ffb364bef0ca2dd003fb03ab9f94d1a765fb759be9e56dfe0b51325c3f11225796895c65903fc0c4d56bd124eac73dce61c372897e3441f7ad478e8f187a8c759ce241327b6ab1379a9de549826e990cbe55aa2a55999aa8965aae65db24596a99a97b5648b30e6386fb9e3064142c8efcb35ab66ae9316da693e959d6fd6a50a286e972a56707b6a32f7bcd6344dd334bed65d05a5699aa669da4c0e5a4124da719c3f7329b57cc269b67ce5be900655dee078d5001077bba594ab81ede260ca41d8a12e5cad9a7b3535a2eb0aa75d137ba0b7e46f40cad5c001304a642a8d01d3e53ecea5cb438f7346641897d9e58e5dc43c50d53cc741e9713ee9713ef43eefab9b58c69c3f588f934a8f5042194e7bd2e36a8cb0d2008408a5c7d9415335cf8573d24c41619402c53a681e218427c8600744e82d6bfc08018b2c6082d03a693acefd661855cd4feee3aac66aed6b9aa6699acc35ad65440cb4e8647b29656887a8699f548788c221c246988c58aeb4932dbbcb9def18f012e871feb31e0f946498e671ac55f34f9ae4d60c1373614bd8466217f53803343fc9b0b2021853999aa644d8aa29a6fa6fd22c6e8a31498ea9c1674cb28b5a353fd7b8f3a3126139f608244cb865faf09df333421c373345383f6f0a756fc28bfad1252c79eefcb67dbe675eee0243b33631a59daf26726c0617b05821c2cc728c8f7a9ca796bbb8a006c7e6fb68be8be6dbe83ad635e342758d169f3fd2b3ca18a008a21d66f6d1843d521afb24fb687aa43deb10680d6284f048f61a687acc326d45ea80f5ccd0378b19b101c3cdb22dcbb8332dc0b819106e769dacbbfb668c8559b94a696f2bb76c2b7723fb7586121733c808a38856f61a28b9c30a159431c50d17175c5ad957d97bb26ff673057953a73cd52ab2185b9a41413488aa681025e98b55f41c17244455942953716982750961495f3410a2435c44837da714e6f2e207062d9a0213d590c0e2d26b302ec26929983e5c1166107afa351aa58684c98b51d26484c915c1644ae221f4b4f48ee00d813245e1d27b311c97a39cc7844b0f0661921e0c3cc2a520132e05a57069cc082e8d3922268932a6894befc12819e3c136b1447d65a28f11a2bf492c7bc07731429ad06968aae8cb18a14b27c81561fa247191d3d01c424f7f2a62fab078c5a5a755c484094b135215979e863a91a3a7a2247a32ba287a1c5b84f39627a48a6442aaf44a979e2231490e33552f2ec26ecc21464c7a82c9ca4e994eb9fc12c72de9ebd22514c10296903fb908dff9378d692a34b89a6530a7989f2f5a6071cb151142700acf8cb0bae083220cef8c699102930bc2993b635ab838248427379c10825e3c20841b0f3c2e687c4284592cfb819149085980616a41165b78485958f1042e3c719ec993c2bb020666a184a98aa12f0b1318d161f1f2a600e3a8789956dc128cd8563d2b9e1e2a8a3a6e35841f8d0bb92fbcc288c3810a3221ba713340a25a11d3569c900ae8aa67c5d333b46586212e59c8ad807a862a8e6a4c063f3f542c71589498004018222e5c8225e9e1c7ed38a209c315793c68e20dcd4af82d41c3126a47e84a1066494b3af098d0441926686206d90e9aa8a2a34108de6946132ed034ae797a60e08b71bb771c3de165d73b81979b3dbbc6725c165336748b4777b669c89e725cef44e47a2799eb75dcb6715a5629a5cd9393d2dc409e3741fa7537f52acf4a659ad01dee80e950e7362dabb4bbbb51b4bb3babddcc62d9e1a976777777777777770e2770d39a691bd781b533795f8cc77da08985a1100469c0b9a8a31924a6fb84389e3442b7ffc51899804cb0cb13068db909283c859ba9aba18c263393cde0a8210e5a2bad343942d47c9b864c40e15773e8084d413a7600551350b3e68e98534c8c09c8046402aa193a25c106e66e54284a697ba935b24628d6eea6b56bad599669611d79d334a4c951ca5b4f8d87086e68074cc8cf6a46bbc70bea1018d4ed06ded4e1a655ab3932ed9e4635dbd7dbbee9996c395feb14b9bfb89627763f42bbe6c01899191cdfb465e699be0a52ca4d540b4a9843394e3232dc56afe940a13a2ef5181e789c75266e337d4c88c4a01bc20e6095261d911ae554dae252f10621ec88c02438b78a26a11d257c6076430d604ceda9b25ac59c808c4f8ca79075fec4439925d70be6830f424a218a9ba2f35c48785367c22e7733ade3b8af366bea342ba3df6ea84106365e42fe669b2c89356bc70dcee465de57571b58651c3f90bef60d2ae6f46d5f8109d33f640ffd8290df554e5f67ea1a3654511c2daa228bce8b212a389230f4041cdd0c1ae672b9506005159e1552a89d17578cc16937e8181643e82eadd4603a4c495d976358b6b84c7f989b43e8019015344c10668b19b4cab9e42596440dc4d8a2854aab64170f31d18c7d5145052ea02fd850a35572121522c8000d33ae60011659a48ce00654a89146d0154b6db4501f3512855d0a84c512aecc651e8248646caa70ddf0271049783ae3f47a3a6141e59eae30e39e1e032239a1bcdc98832092980a7e5e210467c51665c06a67c5cfedce81483a2ec78fab0e5529bbaba140cb16410872b534991c54a185ab754ba5e79470e927154d04260cac6ec7996c776efa6c17b9198451afb14d7aac47bdb3e592cb620fab9e8bba87b24c7aacb1d929e889dc0c8242bdb3618f28d477a0e44dab50af7fc245ba3904f57a1d742e6a8221004a64d2638d6151871e4737423e27e484cf99381b364e85973dac6a142d54299fe36cb9e4762a30efc8614bf1e2388d2d51178788447343fb039f6c49531f63cbefa03dd263fd6761e8b1be866671aff54bb88e4de20c3dd6d79b80d047f78de338eec74b4e8597e1a832ada01a55e025d72496debb528d7aeeacb2bfb8f53f8a1096406e5d5d20f51be7c364eb5d5dd38f1f3f7efc38abf0430553c789a20f3ba94a2713bbc876cf0dbc27dbcc122201a2137b5d993b636680b91ea73ec398644aa45d6e68cc060008672c076c5c4e8895b09c31ee92c392e9c39d521c4c1515db8c4bdf9c9029c22333d4f064bbdd761d9a1eb7772fc32394bc3955599d566d73f6b81a0ae71ddf9dfb669d74e7442038f0ed3e6ff684dcb998efb8b76d2012f0f559b27022f77aeef356a221cea29e084b3a24522ccd0ac0f98df89c73eb48cf4b29d1bc5e152988842996223a63ec15d5da65c68a6a172ef2c42e97debbf1ecedbdd46f0e36b949a56ebc7e52aff7ade63737160a8fa74ca292ec1b3072b94391d2ca79941c317bb7b8c5e351bac5e313cc01e71cf71a911235cb139da46cd89e7d1329961e29518f599ac59408757a8aa5c6f432bc1c6751af34ac7a501fc332bc28eec63b6751a7f4721ed500bf81aa377bcdbd6ebb0d1200e773aa3c9cf3cd80741167e2a13a67116a8587d06f3adbf5380b84a34cadb049646ac5d22e2b4adeb48ae6220de57273fa1a7434c3a3231da7347351b2e364c2234a66465c98191d6546a9531e2f399c97e195295157e699924ca624f3393325191e2187234eaa1233ee37dc2bc7cd7033dccc0c8783c3c1e1e07070c7c1551a9b3e7de9372555ac12e5e6387513696c06e9d223bd10188438e75ed2d801700ee50a7773c3c3e58e73a6a70984b38c2fbedceca594cb65379d7b0dbd26d4b76fe20493d41cc5dd2cec91eb00bdec4d908692cb5e5f72f7668de54c36ecd10b972e5b27f5db0e4ebe84890e3678622965820ad88ef32d7b8cb24191b8ec66962b81b8559c3b6cc95d4edcd17d311a8b2333da6e99b96a1497fe547ee27ba437a826b95602429b97a86ddb72c8c452fb137ab9df0071b76f1bdf520adf8d0c42e8a402f5bfb313024c62e472dbcdcdcdcdcd39b14a08a2a46e4428dc4a69df9e5db3e5137aeb33ae5586774e556633678cd376f44867d64b4a95bff4489bbdecd084bd6419b779453810d2b25ab9ad074ab3ca7934825bce255a6bad272e212b39c1a29776a73d454a0d84a2aa940db54a8a49e724b5e47b951413eff35691f64ba9b3a72a5a35256d4729a447283d6b294dcb3a244a63b1309752971350a09f52500aa8135ea80e4a29a5d73256892aff843e13c1a534b8e547b7dcd3e5cb40564d72113dcf220370c2893964de0138f1c40c326f39c97eadf7c5ad8e5228bcd444e8bb2720ecc428a6770e267104465aa6734d84deb32155d1aeebbaee554c6208a2f483684d70492742e156ff277c8f2a357011a106425c1102c70b0f7edc5842690a305af404c6891d1491618323845a3476822658e186120990d268f55d6012ea57812a8c424163707b92a6ae22314993c83fdd12b74f69104d9f06d12aa608cbb97481a06485358cd60ac4402c0406e16cf54b7e6d5d2f51b213695285552a348992340a6a856910134218d0eba75995a9d0a057f78f8998cc4693bd4455cdb1faeac46d14dc060a435fe197a641b74f29a534a99b26354d6a9a44936895499a6ea255dca65adca65fd031a819b7a91ab7e907f360a6daf1170eb6c1345806ab3f754a18305dd78993aa626010b69e60ee9c5e42264d86506a58d22cae7b39b7c0c00344bb09fae8eb455faf1e4ad6255ed50633298c89d4c5b1b81d831e286e3fabaffa3a5522a6aa8f0221256e3f71bbbe66909ead9e91e121263923f2125346f4ba642e3a7d38064cdc66a0a96a206617bdb443f2845e5e624e86e20d0e422f8b4094214fd2871e81c812d22722103db6e9a556b5ac3ecb7ec2b2be5e1998a429cd4e5fd3e719974f361f7aec03f1d59a9932cafcbe3e9032d78228292332100dbafdeab17f188892f5a755fd2a8af52585b0cc82b034abac42e5137ab72c8a1eb99f8050e62ffa027a8d715f976f16446586fa1c1786a849cebc5f5f949c11b9ac8adb9916332fb32f6e67639831d5b89db54113722f4ec688fef4ac46aeafdb5694a24862e23695dbd4eb0175b959b363aac8c86cb01c5bd1a5f71a465d2f7c5e8bc2245f10299556d1fb88f4e536c4a5f73cfe5eb0455eed576972badb2e1a381725b59ccce5ba34c7cb4ac5a4e3ad2d652285b511a67c3c95a42f8f9714e6e3f44c5578ff4c9f9dd323e7396de2d2ad8939847efb3bc84555ab71fc51a8304cb5514a05b1e47808fd8e973e2c91b70d67107a1e96c6a5449f33fef427c8cb55399647f1785f8577a6c4fd1851aa15ae01d10711cbd5ea43c4721c7221627921072202f9788b9950ac85d51021216989885a98accc6e47afc5a8e791cfb4a5175e6a4ba4cfa78f98015118c785210cfc5a587d1ff249857c52209f2c04b9c7b244c4251311cb8a5132136a153d0b2f39202f43212f51434e4dda92b6a42dc5f002cf919d98989898181c1c70c42a517cfec2fb5993170ee54afbf8bcf0eeebc385e3b8f0024db3789c52574d0eff4c9fcb60af02fd397dce22f4670ea13fada014aa94c25129fca1142a65402d88e56ab512cb711c2296bf10b144a180886518b220a23e9bcc84503ec42f3c84de268858f2b03d8e636b8f1910253324aaa25a8caa78000179c9b1f01594542faf2d6d59cad58f97e37dbc44e564424259f6e55220628c85d80a624c252e515203ca9028d9415b162ea27119c57235fe10cbf12a88e58150404b261e62b665b9f45e0fab730d88926da40169402854a86399ca1ce9dbf2a549dcc8cc9ccacc340c8797d0e73dacd81c1786461a5010172ed2b0d56a1c7f144ae625a771b954b40c83f5e951329f0dbbb48d28a901756b4046ad0119b50664a401519f933e2267e432fc12358eab9591908b0115fa88d6ce1e65b0b7e0a4574225d1d074ce678f38e48855a2c4d04d7c0ee54a16430ce2a42a1e62c9c3edfbfc08ed0175fbf2b0e593edf671c42a5160b80f1318441f114a9193e08a068cdcfa208af47cbee78dda1276531825b90d18b9fd235dc442e1d60b2390d2f239b7a09020ca077c6ea425a5e553e5033e6fb14a08a2bcf028ad092ef111a174eb85176ccf6f6c99dd9458d2d8d81fb8c696343bec0f3a280ce8d2f01456d0c2cacfa42dd1dc522b19564e29dc27dbcdc42f4b386f8fa5ffb622221d8405ded409f2e235f869c42441b1a36855bfc53e2772258da2eb57b6ca1266e72f577b495fa6bbdd13cbd32dfb75bb83c29ff0357db2ec35abe7b2773133ba5c7a67cc8cd8f566104f2c9f6c37bb499c3f30c7af1ff8961d4423a56fad30536742fca9b3e2a112681d6035e4b6581941fc656a99d7b19d2d02cc16bffb9848d398a8c90f56c485b95c3af485bab65c0ac6b87cb95cbaa092b2a14e8c4bef99b22ccb4024a925f30498ad291e80450e0219c8c70561c94445cdcabc8ef28f0c42284d9e4aa06f60d1a9b489f76b19e6d440241910f3331049166611962b9f1684e58f6455ccc41401666b4a7f0a77d3bb67a16522366a1bbb746a69430759585902136ad09a52d8c28a1b5eb888b95cad49b42a57ff5a06195e6f75d8a4092599e8f43e4b84f5d2da5c9352aa5ce172b99220822360d1aa356422e3831e4c3185292e177ffea4850d966e9ffb1a97d7d5ce278fbfaaa44170b34beb0c52c59269f31b0527ed61b352366499184e6ee338e678dbb66dcb4cd9b671db9d6c5cb79d13e746b7d3eb64eb998925376fb2b355a20dd9b39492ea7239b9d90f328eef4db332ba514a29a594524a29dd324a699665599d95bb76aa0dc912f6b37e1982dadf349bdd5a6b92e7a19a95b2a1b3b798b281d2be94dbe29cc0e42dc219b341d2dd5e7fc3f0fbe6afa6a49580a0ccf8de4f70fb91d6b46c8add4cc86896d511d6454030328e2ab53640628fbf9b267b260c357cb12e6e82ccf0220d2dab311f1cddfebcae953268437509a1443b15e71cebb6d56b96ed149d707c83d2accc1b54adb5d6ea856b4b174454314480029006818c32ce826a03308c224e407908234a701d1161841011620c8da145511194ca902209a450c9765bb6044521d3d21d512ddd1a9996fefc5265054a323082073840020c3008b797e8028d9f2354f0c2a2d51195a1041a4cc14204430c2184328478a1e24a9614bc206603d711aacb8d1fd50740f5e6c8162ec8c8b6177858626a90184230515747713a33d470034786954ac6d06dd4513477c6c800baf5ce1819546e8942f2be78939182b830bfeb2d84b63b2908745f5a2c48888a0329036f52c8df2801a60fb64081953496a8410f84d0e20dbc49e1c6514ecbb89e1cc7715c4f31e5076edf05b5d63a4190832aa2104619563c610d16d010428d2b50c0a203257a441078de38e3892e6c60861b520ce00446444105558af0d2258c2d5e43f8010a9ea0c6115fbc8855a0d182130c210d27e8400b077919cd6acdde53ac9496a0b99ba39476b58da8502ceaabeff76bdbcf499f037284908fd0ee81be6e770dc3ca7df445b3a8a156b57a352265845fbd755e6d66cd9aa6ddda5d4696bd72999024c25abf6665f4bb1ca5dfbd34ade2673857758f34b5375464b3d24a51fc8c99451a8db2117e2814a529337186b5e7f6602aa22205aa3a7e90cdca4760a106b5395ab50a223162d455bb26969a66cbbe9e966959adb566307a844cd3c4fea493ce1b5416d2d05b7e618f773ee40eeff32851d201eff32c51b201ef1371519201ef1379515287f789c028b980f78900515201ef1309a26402de272244c926ef1319a22402de274244c903bc4fa4889206789f88112599bc4f2446c902bc4fe4889204789f08122573789f48122597bc4f44899203789fc8122505f03ecb45491cde67bd2879c3fb2c182595bccf02a264002869c3fb2c214ad6f03e6b889234bccf22a26492f759459444f23ecb889233bccf8a511200efb38e28d97a9f8544c9fb3e2b899247de672951d2c8fbac254acaf03ee9a2640cef932f4ac2f03e09a36491f749204afabc4f0651f285f74921728892e4fb24112559ef93459424f23e6944499ef7cefbe411255d78b7f03e9944c9d5fba4122587bc4f2e5152082573c42943f01bad2be049c0b574deef795132c8fb3d304a0279bf0788922cbcdf1344c915deef11a2a4eafd9e214a8eeff71051f2c7fb3d459454e1fd1e234afa78bf274649fbbe8d159b217ae9b91ea7e229a5b453e04fcfc2106899d8fc2294179e2083a396cda965927a8e086526f1a095bac71bb03bb19da31da49da41da59d251e17cf8b07c603c413c423c433c443c453c463c413e339e241e249e251e25922e222f222022302442488881091212244448a881811891139228244248988129125968bf562c15840ac2096106b8845c42a6219b162ac2316122b89a5c45a225de48b849140641029440e914464116944c6c82312894c2295c8a59e570fac07a827a847a867a887a8a7a8c7a8275625e73af6c5b572c41e1755f571aed7df06ac0dd10fd6a64803d6c6c8076b13cb80b539c280b541ba80b549eac1da2839b1364ba54db92c60532f1e6c0a56019b02a2804d054dc0a6842460534311b0292208d854d1036cca68079b8a39c0a68e1a6053480cb0a9241d6c4a690136b5a4007be34a80bd7935b1373004d81ba003d89b2003d81b2126f666a800f6868800f6a628077b63b4c4dec406606f8e04606f9070b0374937d81b2525f666290016c76583c579d560716034581ca02416270889c5119ac1e20c01c0e210b52c4ed1b53846472c4ecc88c53992c1e220c560719260b038452c8e8fe5f182e5d16379909607cbf2206279f0581e3b96071155f55db03c8aa8aadf82e5614455fd95e511a3aafe10cbe388aafa422c8f20960710cb83059be35ac1e6a86c0e8caafaa3cdf9617382a8aaaf82cdf1617386a6e47c88205c2d7b1d3be78e7712ac5a73b6f09d0711261150e491b4138bcd161a87159b3ee0fb3daee98373fb46b484a5ce0bb43f5e33488f3640d646b43630aab209cae17adde6918492c71176bc942f4cb97dce962fc06e6b79a25ca15ce1e7f66b8688c25295a3da7955435aea5ace735236c524f59ce7a472725236e7399f200d649091654f80c14ba88b30f5f2b4745a3229f51c51954949b44f99623ba6582a464638554394dc41a1b81d364ad5d00e1b335b42da1f8bf6fd03eb517cc9d194689fe21f578f3da5c7061580f39c77a00278dc464c31b19942139688b56c2ea59563534c72a04c34a268e55c4acb9be122a49447d20c4246486f398b887a8e7adc89d9f4b886581196395c3b2e4afe392fb9540e570ed7bdb813cb1167efc47a2726ee7c99310ae7a5cfe1615da616912497a935a9aa24a2747b27766f2caa552d863dce968d0b30d889ed205152650591185680b0842ab8b4fa3b4994f4c145050ca4d872c50e9cd0eaefc4768ec280c140ca8e6e82048f6b40460e28fd8b83497983838cf0eabd18cb48c0f0479aefe926b1e4aec643b4eb2354fbe7c5d591bee1a1a9aae7b855d29d465a862e27de988ef3238df315256b666870bc136b2c942b486ade36a9c76ad4e3bc5f7a1ce94bfacae8abc91d481446a59e32d1ac206aa5eab8d50c27b810157119556a56d947b7be6622c8b6dc4a297dd117bd95b6926d30bdb4e395fe181196ade4453b8bc27aa42fad959ae4567d2f75c85154ca768b660b7d5172b50ab7ced263159b88be72bc6c221bcbe313cc81c79b5bde677958ef293b5b5f9594cd3dfe78589b56ea3bac0e4d5bcd5c070f553bc3564c55fd1628306a0dead00c52c90b507185172c9cb8c1088a68d5d750bfeaa9c7b13796652c17f11623e6c231e097f4e5d6d7224228fd2bd9fb8f12829a93805b3562aa859f7a36aae7a1aabd76a9ae1b6af214e472b984d872eb998da25b3f2b1bc58c6add34fad3ac6e8cdb6d1bc78561bd768f873a6eeb590dddbadab8edd218caa57931ff4c26935239c66204986c1cdd324b7a985b9f19018cc988308bf4fd6c3847d363ec3747d341cbcdd174cfd6399ade4b26d3cb3635534f08a87e26cb5f0571e0fb8961b74d563659df64795cc83ebc2fdb8838d3d2f461139b1e36eb27539925cd19a413cb275b786a6a7f60ce474cad1e05ed753e11080ceccbabd6cec8185c96443ba56c89d6ba44c9e6b83044a1b2244c92664ec8deb8552b8176825bb515dcaa3971ebe7ac722ba723fa106fa4eb30b556fa732b9df289e557a3892e315d1a7bac1cb3a597cb7adccbac8ffbf8045751669186cd21f59d77ca74c6930a1e53c9a8649ee9cbac567b9a2e6549354bca924ca24e57247b123ba9eae4c19023cbb21c346f1f76fab0d961b03c6506e127b14ba88a5fc436e991bbd3c783f1929a642f41993e309c5fc324939cbf64b28a9c67510b975597bd2822eb1255a900c67c45ddd9f4f7b8ca129a5e5e67ecb15aef9d1744455c84a9f0905a04837de145accf935824ef9652b52eb51746c41d70bccca1a1a1c1798e1c38383aa724735cc83d3db716f1d26a1c8baa495c026bf62553cac0b46b823e5e46cee757b34e343e5ed2ab23e487ea0ca6eb29613adbaf76b5202c394cbbc47ec970232294189ee21b39b7685ed6a56cc966607aac176233251d9b7d01c3e395c77d8865739624d346d84658d2a525ba347d3ad00e798c5dfdb32d1c8935721fdbf3172cc943b4c4b52e7db9270af928c4c76b76afb37c3b4e26acf9a7e9b77d3d4b2f0591047905337dbad7a556d5735c18d6fa5a44c923afaf46cdf22839c36b4fcf6a7573c6f1e6fce6e4bc0cef4beee67c527206919b2ad3730010722d714ed315e73479a61f3185b92613ca8432994c47cd499a5e8677079b4024a667a69bc024f47a15cc815d542544c8c74389c1c8a31809f2236de4743262c48811235162789456b762c84186c77030d3877c3d2da2a491d753a366f5b05ef6adf9e121f535445e9ee7256ac7059837e4f5744ab356af2d4c1f9d8bdbeff6e3652bf1907a9b1bb1355015bfc79216ca0cc28fc19e2cbfde3f5c240a935631eb878808e311613b30362edf857a1ddb820d3fcbd529cd12227aefc4767962a5e9560a225eb440c4f22c88256a05b10c5b2536510f0cbb9dd8534691c3fc68a5ec1f88c4c792ab599d0f91ba7a9ca2524148976898aeec81f98b52b338ccd2ecc41e18764d3fd22b20a092cd044c105dd3bded53c1eadc87cdde43491d5ac5af610e06d583a2d1b1df0e5456e35140988a0c404c224f8ff50421bf04b2d4994ea74e86eedeabf7fa0c4cb6d475412c5d4f861e3d7e84f6b0e1455baeac2dc7fadb1f98e3617fe07b634b9a942d399b259afa1a5b5226dc7a545dfad54197eaa54962c2ad9f09652caac7eb8cdd263ed96eb89b80308697345dd79dd8721cbf2ef72f88a5fb8965f71ef8754d0f62696bd8ed4e56037c8bc2a466955a123cf09f8fe960966412b919640339068f5f468c183162c4880c4664e0570c4f364de98546024617ddda3d83c03e7f91dca4307bedb169f896a88c4483ba2a318b70161e52ab0e0d3755cc379c25b37d1946c906e29810fd185629a51d7df71eebd86335d9668261d513c771bc29439ac94a01c143ea7bac291cf540a0c21307a1bcf0882ccb32304910d7e32617039a9464cadd27156bc47f6c96f75ae6dcb28180b2a07058936d1a71bba67b1cb7713dd62ee3328ebd9e26d3ec91d2a09d5bd22c167f142ae41aa8559dd840d3875fcf794a749d8c4c4dcd988290a6c9ced64083ba69963dbd3bf87a9dd99a4fb0c966ea616711ce3287d467282e6532994c99dd8eb2dd5357c7ee3081f9cd393e495d9bed59c67d99d5ee35e9318ab0bbcd996b6ca99344c7a27a449d7b29e5b278be1ef88120921e0741ef4b9a559b984c5f73f1fc90671146e221f55c438f75498f751addb0a4c76a7a8ded711d6bbf59beddc424273055f57507242ef28487d4d72a7e133d0a22e9c419f0062957bce8ed404920a8aaf20f0fe11f99c3a8701c67534aba9a7703e85ec3a58e3a679d706716534a6a4427dcf9ddcbee9ce824256e9bc8404c056519d689369eedcbd6f36cf7b01d245adb429e8e8fc11ab1684b162f49cd48cc04133a352fbddb79a9e39c897848e53eaf492c4d672098c93213a820a622321338b6856c47d163f528c84db0890aff21fed86c0735132f99d733d10c4aac11cbae9f0d3483644192410a4b66246f96e18c99517459b833664612d7d3be1e96c7459b736b7f207e98d6f32559388e157c14d9ae8305166c3755a621a5ea9aeec39abe82355d654d6f919b414c62d9c38a819a653ab79541dc1a9b7b1c8e6caab2e3f8bcece50b676f1042d3391049f61bbecf64e9d5a6f76f822653786f6eb22925a8eca8cf9b030e00f58c99b974d2c3ea96ddbddf9cb39c98529289a897a8b3e8c413734024a8f36dd0245670ce20d96d2c0826d19edd64e9f5b61e56d749ca864f28e3537c28525a3f1ee5c7b9f5c376ef165b25dd3760e4f28f1f3f7e44191fa5d5adf1600e2a7c3c1b713d67993ede2bce4b2ef5b26f1844677df81c4bc3c386a39d1e50b336d14977ae7e7210256f9ab1f02baae2882cf28dc8b01eeb538c054c82ba771b5b83baf78a7aad793d03799e656f9a02f4d3963d77da506fe95d1e71824926067aae93ef31f76a287bee3c17f6b8dd747aed4ba66ae2c0b9f3333eeebccc7c789a67f17bdbef386cc95dcff31eda932d7f5c4ffc816f8c4863513df45c2abe860c881eb3d99fd39ac452e7ced93bdcb912224658b22b0b09dea2795632161a3b9b48c95d8ecb9e95402e77af5686d22c76b52a3bc7856179d3e73b65a22fd9c56239da1a747ce0ac78c0492ea1aaec939bf334ab2fc2f9920625def498f11429b3a5619ececa73be4757b3a6347883943be9d94bf5a7c9946a51c978fbadb384923bb26c87a883e372cc6cc2c0c343b973afd59661a53cb5d6c432884bebbfacd6ee8686e3388ee332283dcecf581b45f74b329a1ee7bfb059f445325556d9b337c9ae43ac075f786e76eff4f698ed6fdbb26769ba3c73d9e63255652f790669910a310ab303d159352bcb7e43b3fad997641955c22b7db84e7808ed5bb706454a4bbbe7696f9b89fd5a338daf6513e501b9d9119055102d256b6a0577b73855384138efd139e79c993735ee180a26a197e79c2514ba036f3217e1348305a81a0669f8a5f554670df3d21aced92c5adf9beb361012d09d5aee8cb5d1e57a415e2127f5c8a9b0023eba652d398945f6d223f984d0b58577ea9d7aa7db3d26847cba7d9e76de52600a14958cf7fd6fdfb679db46edd863edb1b357d3b75f67e34a150ef45e8a3b7fda40ef89294e54325eee9c38721cd771dd970c9d6de3ca026f52e00b1bf7eb32052e4c086b8fdc953277d6dc3b46985dc812c2f2574bc59cdf3d15e3fd94e334147bd77e9db1331007fe97f2de9f36f03f31e5894ac6ebdd1347af037c3d11488f2d9aec122bce4b46985d47ab5e7853a764d75774092567bd1622cd24f0aa2a42fa1525e79c7345275ddd1b84dee45457051496fcc3494c9fc97cab6d20d796b579d6ecf566975f94a49452dadc10eae332cee5154f9059a40938c91eaa629feeb9fcc9db575f84fc6dfb2d236c6275e8b19fcd5aafb16e9072797636555f72cc71b5be56e69eb0e4ae766eed0d228181e76aa7da3dea65b369c699c6af97ff6b1496f5cbd5bc5ab9ceae9ad8650a56aecf9d5da4a0743dfe78787aecff305fa6b89e5954325e3e8bab1ed9e3415872a9f9724ccd8f577b4d4d51c9783571d5637fbcf596dc7d527fa8f7729517b764087ea3656211488fdca455fd9edc3cfa69046199da3e3fde793eba3dda717e461e87b1a58c950bfa63172c45b3fcb815102e349ec068285d66c097183698cb19453db40951a033f8053950ca6239f872f9256043075174f1e6d308c3697cb97cee8934bc5ce697384f809fb0ef09d100070d446990a50209d1004b65a308ef05191b534026b4ec8d18136cda1338ce8dec8b1850e892c235d858a3cb11bc35b67c62d800e4b4b8fcd81a587c6b0871376b7409ca96e0876b007589e2562882c233be54993380c4106286c351049a9a63e6f2d71081eb8b1d5cbdd38c2d5decd0c284262b6a4c556c6a8a8d2df574a7195b8eb8d9e2bad9c1971d2011ed20c6e582c1f9b42de017dc1078846ae4107d07423b086226760014da8a86c8ede005d3d101e74307496018cf0d15be2e8daf8d99367e7c5d1afc8f8c2fa6032eb833867480850d2c3a68c175e9b833a6831777e47d612e062bb0010612158dd3ac80850fc823c388a32d574b1140be232c47568e9848c1ed1b11ce581a5d382842500a42740c61c8eacbc1d26521be31c313e245f84de13a7add194b83e896e19d47ae3b636a28dd12a54610d4e872f95f04626820c5d038ba338686d12db3d79dcf72670c0d2b77a211050bae388128c219fb8117208ce007602eff33e2cd2aa1d6a5080d5809030ce13f1d201f1aae5bfea68bd277c6d02d7b38073477c6c4309a398c1105255a00852b5b7869e96022ac8192a92550aed07afa1639aaa224b7b88aae2da945c514ea54c52dfc14f55015936e4191d21aa98abfa4c9911ab8590a9dc586d8c842c199410bfc67a1b011c048b145ebbbf7f197d2ea148d898981124365ec89eba049c69db11860b9554e628f17a38344386f5f24ee09624ca375fa67a1788f79eda1dbffa18290e638ce48f3fb448612fe93c249b683261761d94141321d14ead0220ced6cc91c0ca22478997714f0df1b1453f5dfc37f8f2223a6aa98ca01bccc997c0f0f9607e0a125a825020c4c2fb74a2846d981aa7a0955f56719b05678999733260419d107a418a614b540d1888da6d26c4d90db98412c94efe0bd1b6031420b14afe88805c15398b1822fad4fbca2c30aa3366ebfdb983e93db2ae529a6687b629b449137511333b16c2cb7a90f397e5c9f9d2d2f8825d444df633e732950aed00f4a8c14d78baa38458fe333457f80f038c428e0c3cf88e16c71100321e92c119ec4548d11537404a098aa220fb598484c5131f5fd00e063c42857be833fc0f798c77c9fad232dc508227620948497a1376ad06a1c63bc8009274cd1041743b47ce86005615021c410a020a2d552b05842164b683c81684b125afdcfcec4202c5989955a296b2b596e63992daad35deb98325b86a3e0ee20223128afca33397091dd5a75469729a59467a55d2a63e79db132a72012993748c316e408e1e9f331e7afb8d5aa3f066908dfdd649d50f1267152ee9106df163cf5819235473d8758723b4e232a1d87b8849235228ae36677844e3049f86ec63493dd0b3b4ed1cf6bfac9a61ea39dfc222cf98bcb0745203ed187272d63809fa9c464890b6acc585867a6846588ba41f1e7d156ead6ee43932c20a6644a318e42a35c25bb063822e8db70d0ee030f4b134111dc7a293e4c1903fc7480ef01745c8718848eeb780c538aae57ad9218a614dd18a61451b18a2b862945ad20748857fa572abd0e7ba55f7f19b4413b02c4617e2ab9f83ef081e0e3b022c21bb745263d2e4125219cef640cf0d3ac79ced1313fded4296718b03b3f73b872e478f51846f89ba39f634ab3aad4bc9fa33ff0d452af0bc2cd728080c419413958f8222c7762497a7adaf4fa89354336441687e808ad56d412044ab7ecde4306bb608e6da10644889137086bde7d27d6acf2b4746bac4d9656f5391ba22ec2df9aa11b4cc1851056b690f1002028788006195698800a4f8714a1ce4be74707a643a5599e9d399c03766d4e07da2a37a7b64a0e98a51e7b24f5d83dbe782d822a9a009ac2e9039fa3e3ad6931aa21158e7ba045fdb33baec3b290e3a590580e175581df61bf9f4ea7d3ccede9ce3cc7dae8b0aaebba650ed74948172147a290588f39b1a39da4f75543a14cc8331f28048b102c4288c09c83e2417b100441f0ab54248296222d94cc39907bfdd9d8f986124c589a685401ee74d93902c59d980ac682b0cce1da89d1406f95dfc615c61cfb25bd262145ad7acdd0f401bf82ebb33d42c298544851f7696c88b80b6950dc111263c56690064518254531270c29ac4752f748da12762f77625df6baa5cd0a412bfc582184e584c4aa15b7cce1ca84b8650ed78e979da5dbd73cdb5755a41aeab1b1f4d8f4deabc87d5684f352d516559639390c2592306ad95c4aeb48f708130e89a295ba94d64e6ce7a859f42052b37088ac85bf602fb80bde82b5601930166c0557c1573806fc02aec2523014fc043bc14df012ac04af8093602418057c023e828d6022b8043c021e8285901225041ff000077a3ce9001020801204bb58043c8549c02f2e827fd8040ce3143015560103310b98096e0107b10b380a9e828518066c85a9e021be82b170164cc45cbcdf734449cef27e0f12257906eff72451928bdeef51a22483f17ecfd20bae56d0f491790b89ddfef60ec60929a2aa267b24ddc371bac71f0ff07ad94763633e634fd4c65c6fa35bf336b72d263c0e4b73d0ce9cb5d81fce60587bd16ee05c647d9cbfb01a38cfc0aa70f6c2fa70ce627f9cbbb019387361c7f31616036722ab3a6b612f70cec2ae709681ede18cc5b270c6c23a395f61819cadb0e579c8063957612d70a6c2e69caf581ece56ac90730c6c05ce30b043ce2fb014380bd9d5b98a9dc0790adbc2590a2b817314d685331436026717d89df3131602e720cb7376c23ee0dc024be4dc84dde1cc84659d97b00e38b3c09267256c03ce40b6e7bc02cb80b30aec0be724ac0e672ad6e78c845dc03905b6c819055601679885e17c029b80b3096c0ce7236c93f38f95e16c8445c0b9086be44c843dc0f9658f9c4b600d702681bde7115826e729b6751ec216e02c020b80b310960067979de1526c0e0fc2227914bbe4506c9287c00ee020b034fc03560007c2d6700f581cde016bc339606ff8131b80f7b04a2e6359b8d49ee8476df85b7bd662377006c3fa38175915ce5fd81fce33b03fce5e580d9cb3d8f1dc85f5e1cc85559db7b0193813d915ce5a580c9cb3b02c9c65602f70c662819cb1b03d9cafb041ce565827e7219b73aec296672aac90f3156b81b3153be41c03cbc3190676757e81adc059c8b670ae6229709ec2ba7096c24ee01c85dd39436125707681e5393f6123700eb244ce4e58089c5b6059e726ec03ce4c58f2bc84dde1cc02db7356c23ae00c645f38afc036e0ac02eb734ec232e04cc5163923617538a7c0c27046815dc0196663389fc02ae06c022bc3f9089b80f38f357236c2363917618f9c89b00838bfec3d97c01ee04c02db3a8fc01ae03cc502e03c84657216819de12c842dc0d965915c8a25c083b0491ec5e67028968687c02e39086c0dff801dc081b036dc035600ef800dc0396071f813abe43dec0d97b1aaaba2d245a8021255650fa3db9f41222c7762a50a76755e2b00b5aa2fa428a987f87e0fa41e4794fc4b2145b747d2eda01e7b05d70a535678d95871dd0dfc876be0efef28513203efef2c511203eff3b8287981f7795e94ece17d1e18259dbccf0344c9f27d9e204a5ae07d1e214af2f03ecf10252bf03e0f112529f03e4f112527f03e8f112525f03e4f8c9211789fe7889210789f0789920f789f278906ab21a8a40cb586594c95a9111100000008008314002028140c0784a2b1502820a9b2643b14800d8ab250705499085a9263ca186208000200000000000404a34103ad9cab2ab24c6020ea6d7a2f35c769b9ec2bc8072869d2ce1431415c92a27a98ad2ec8c34a73988b66580cae8f803ce74ab577e5ae22b344b802a0759a07f4806106592a83a393ebb617650da8cfca3705aa6c3dba4d93333430d94697d6d9177c728e8e3200ae391d38323e2305396ca4e24250a6a1431b6c3cd93e800020694cbe2b7d995ce1283ef79e29aee52a7aa41f4b6d2ba7110f7d5713a741fabe6c0996340bcee56dd760d6806d7d50a1695ba39458b9eee50e04e5c0cdc10058237c51d7f4738721c650f65c202eb2a1ddaf79d3930f8e2df964d290867748664ba6e61aabe6c1f5bb5bfa14899283fc198ed29717d35c4707a27d861efdc4360c5f7599b1906254323d7892c3b3bed4a0f5a220d4ab571060d4e322c815688c1d712cfe416023d5ee8769ec0bc1393b1749b913ab1c38fd897bdd859cc167a4ae56ce703e04b660f0162d60b7d862ec72d52d0b44b348d5b7507ef9d3c5869cfc7b2d07cbf19e67dde622777a5888074a2eca9b8282209a47af7f8d892c7e2f727906c58a7d8e842662d3a310b9acc06289516759dc406692c7afbb4d29b9018f1c2624952b5fd7b13664a5f424d1e01eca98e5eb6ff4743bf3f5c1128f61a256645d9a563469207ca5566531bce65fee7ba3468f8f8bbfbb65dfbba47255cda462cb6222f731dc69f2ba430a240c9b12f0d4d6b68a2b95839da36de1940c9bef3c786e1712fedf7360f8eab243d80851cb60609d932a552815bc6763049dea0ac3997f243e006cea759075a053ced5df299e2383620b67e488dd154c35108dd95de2f81d7b738a9be72e3c667caa369c09506de88d4fdbc719bc0033c4e52058cbaee1acafd2b614236e3ebb141741c14d0152200ab0ef770e736518f4b09bc30f301d859b947fb04f028f54634c0c79541e28ded132b8c6f18ab0ea5649f26ca7f1c886e48b8a8a051f3fb22398ace18e989e26e8eda86013d8331640c8acbfb2804c9ea7a438b8b55a4fbbbffae24a6632f56072a8976b4b6302b69b69f101f1ca7dcb7fc0acb04647b5d50c648398fc14e1e1c2887de739ec33ebe3c6a269e143b3a689615d669e35916641f33fdc9680c0613bc6991eb80cf841aa141a437388b0d51c6689204667c20df7720cb0657e4ca9e65015b4af5bc1e0150d5df7a444cc7a2b55b9bb378d345609fdb8ed831ecd83b9031c1c53f7a65dfe6a50ef392eea0a955fe74d6bfa94ddbc49a191301b13c02c7d7360620210c4ab034ccc395d788cc60b35a150beb8511056c91d8bb31166c177d3feb926bef567ce114a61dcbb02e392bdf0020c8f0cf3523c768c6722d965aebb8a6a6efad42a9820c43e19608a97e46ff38aa4a4c64447c4ea3e668d5e7d84194277173ed386650e670d81a8ca3df352bc469414a4a919362bc37d602904ba1580e5618ca159fc7ae53e951588daa10a1473836136feeed46c67eb50a1e09a25a1a6e0fb3be4b876790b8a838e6bd5eb48b422149f4621d539f3cdb57019ff65c5ef50bf23d37e17ccf9347bdf4b826b7e0dbebe09c3505a3bdbde70dba9a588dc7089e556614d81a3021bf159527036f1395ddcc539641b4541183304d52ede412e29d3029b8f17365e9bd401fa03f4042f994eb11089ef1d1d6f25e92b0389ddc59c9f91f0c97ace373cf572f2bf2d62473c3955fc80cf27b8a2fc0b4d79904321f50a364e609b0d1e33dc2e4fb3fa1416fc4c66c3b262c3c0697c80c5ab66b45849276add0ac6b3d4242fe3437a014d3048c25ca8ad61f8c8ae7bb2369f9f0a22f988749b4deb688596532a489253e16be23d88d77b915c5bc31c1f490ee98897a4704abbb78905a2e83926bf9a2053eee97de9dc4897b5b8b6001e44262830d8c9838bb008d55db85d0e3e35ad163c16a7d9f67da5cc7e4fc8793a6de0a8b6e8cf6325090a64b09074eec143e9d58212747c21030234e963ae1a62081c8d7bb239ad32fde8fbd5536f94ba9ebe74fa1cc958de137701387ad2a423afa47be0d30f5e7d66a856cfe8daee3de11c4a132179b777a53b7634bc2061a0ba92fd3d352b52487aea663473a491527fb15af13b47dc936ad552119fff1e30b9dc158870d1651292ece9849f3579da6b89f8f3b86e4d5fa1c51056ab1314310ec47ce04978da46a2e2e55fa767b3fd499b19afad6ae74d8dd0c0161f7972e4379c13a0d715206f407e5f94d995df0999c564510bad4f228a7f62f2892636085e9b96c9d277839a2eafcd2b8edafd13de22bff2696b2b210c74b0c43f4ab42e4bf68ed51a99782b688f1e08f8d698c85f2a9abd2a6700cb956953ff2316708cd730a80b4372d213bdbb45456ec92d8cf3c1639bf64dcc49a76512b3089f10baa456b22039676383a91386bddea8221d12d90bb8c64a050dacf7e29bd18731b5b45ce4c2a2d876b2a9bc4c218617061e956cbda015e8acc4d7626d021af2f7c3110d5c43f9863f390821e7a5a068ea5a7a757ab7de0e8ab9f4378b2c095f1eda3c1bafd3a0f46fa4961401bd50bf891395801d6e43c310cde64183a2388db67beafcbfc00fc4279fb3af8db56c12a3443ceb393f65621dae00b41f32c87fcfbc7c725479a56d3b8b37d231a9bbe85590be12951c1aaf55a9a00e2b345f7f94292dba16ee547602aef63a0e1fe800b40912a45ddc8891b751f637a4d4bb57d0354677127e32e8825b271dde90083c98eaa435667218f003ba889dccb5485cf08d6a7390c9a5ef0af5d27e5e73a0771f55201611ee3132649d8aa081a4fc0cc9a2351d641001e779159d129495806b133beddeb75b9b72f44788191c743449c5b2ee98d6bad088427940409f1e04a5fcad8697272fcd5bf4c0f5e09e51de80e159a953905dae7d4966faabc1e85f043bd55029166c20de0497247105ceb9f70864a6f0a425a4bdd32494b2083450f7be969ea6007bd4bfe543d0b7d7a2b03ab7b1def861c6c6ce1bfffc51d13f2402b230233b5635897c6989d1af86e09461fe7189607da75904ed5657b71afaee777a7f516727a029ca4249239cea847c883ea0191b2ee69141036f8d60ea16a88b69825b7fe48b64e82f63c623bfa7c92146093050b4e3fcd0b0fc74f2d5ab17849de54717921435482b38e72f5deb07a9d8fb03e3ad312082a2946db08cea02ce2b587274e91874fc22b0274b3fc62c20949e4417ea0dfffb3f1189763f732b3a5ddce8bb043ee76437dd088c5b63e43b84907599b4d764ee7a66ad4b4681eddd62f370a7c8cf08d30b338331c70bc4452dba8849072345ce466f61fb751e5a17518fe8a5ac4152be18e8136542954e5f3517ebba8a106b38924270f07dca77d77ef344b47145a7363b2456cf14e0e88e4aca036005d0dbc9284fc3ffa2cd5605597950a2710a602dc57428fda53feeebdf0bf75742f7228fdb269efcf8ee666b7bea6561571a2461f46fdfe5b421008d52031c7f87e4ded41a067a7c79b4a1d1d11128097658b7dcbd6a7964d02d01e409c4ae43281aac09809a44b0228dcfa2309e843e8d46d554478e9d901ffd134cbe47023a1b186f47f886ff975c8cd32a60b4062c84466a3af89faff4dc1ad1d03a77a089c1a3fb49e767700d028c4af719651cd83e4376baf50c0301cecadbd5aea660bdad6cee8c417d75b9c9f20c0d73ab6b0b2d58ababa426539885c0752dc7b08a01c8582ad80652e29a65004e7cdeac2c0d7fb3a3bce93f8edf12662ddd031dcf68ad4127245675a73b61b3d23117f4f37e3aa1f853f6f29d1f5f897b3408fa0e8f4c2832e64b81b95e8086850d2b8b2feb37133c49afa9fc6ca2a25133505bc01401639e7dfb134975e59df1acadc6142233387a6c6db3f3728a001e878b37299f64f07a55455e86a3eb77b772353bbf3877fe5d5a86c373aa0a3ec432d40819e7f4a6edb973c40cd6cdf42981540dafdc70fe80c0f64af76d2207d08a7b544962996d77fa5b65a0d6746bd93acfd1c8395376a73ea94fa64beb377e32c8ea3a23668b304f6de2067680323c2a0400310f29015c3dbef93d7e41dba67c5ad67eb254bebbbdd426965d47cb521921d65f819d69e304c47e556363c3263a774007d8ef31c1e508c73d970221c7393047b2374e130fb8b59e148dd171eb07972cdf34c1eb8df548cce9a28c51003ebd265aa6e8bf72f601987b9bb9c5ba7121917a4f269310f4c4002c85025066c2ea1ba58e35d203b03493c88bf8234b591d50187e4db4524c314c33ab689ab4060cc169d8891bc419f75f00a8b319e9998a3b812d24f353570a8c52c6b39ce2654b8612884b34b6fb4c5318bba707e2dd7a1ecf60893ba3028cf70b78a4ae07c7847e6c25a72f1808418ee569b5727fc62b03f595529a592556153a33809e2ceb8872c145ab15ea1df1b05c0cf1fd2cf1d55670bae450d1e8576c89a93bcba238a598923f876ca1ff781199c9b1804b165a64bf2221e1085cdcc48282f1f48fb9a87f58cdd0b92c5b1465b8163df3f9aad8ac5945c037968653ed0667913c9bfada04b5946c75b4fb1e52a99a90c044781c0b6fe900e46657e4be16f3e8e315d5912f4d2785481e082ee6c68563e787218aa291358183aa4d372a63af7f2a99b3c4e2c0dd4ec35528b951968347a30c58b60168008cad523ea8ed2fd324df4f1b0a9d2eda0b43ea4f8f2aa89c6ca90236f5990240c0e0434fb61550a7e2ce4dfc9c41b631d1819511b9e9fa380b285c2919da9cc9d4f1beddecbe3ca30ebec672b367a1a68b1dfa75a67d2af3a96246ca794651003a104c392f0f34ee12d69ce54731bd8c446c030965d2cfa3baaee371e7d6250233023aeffa702aad704c02dc93a94addf52cc517e3048dbd0b4fd91186782726b1505ceb436a227b1abf062844f7908723cdbe38a340036c7014fe04f8551fd864f7dbc85f9d5057059d181ea4052d69008e2ed829bd9b4aacb1bd96fa8d5a5e6fff2bfd257016a4f5e00879c9e692f8353a3524e220550e31bee1326c6e0addb17525b527fef8915ae83a75dc70da00a09e1422e93367a325f509cd4d81d555f8cf402c7cb35f39a1e2f8ac2000389227fb676945e020acfa90e5ee6aefd6aaafde309f630ab925768f1280bae8d0fcc06eaa4e995c3871095d43ce321fc3be25c24408937a2a28741a275a41070a34e8f76fccb74fd5464dd473ea393d3f68540ddc095bf438e7bebb4a91cc6de086cbfb043a263f505040248c624cea1dcaba5e809868da138b57b8485a82a48b24aa09798b50448a4aa9adde069d0721148c01dd469aa318fa221c316fa898669a56e3543d482da607b7a1b16718e737a031b4688beb1a26bb7156593cdd5d271632031404b29b8c6a45ebc5b032aee22a1e95f21eaf380159b206b42b12084091f7660951fb201810e06cf2164d044f002c20fc9a8e75d72c47743de4681af52582c1830698d10af56e0118110a54b8cb535c0ed0b545e419b4d00568412020a1aa770c302b5bc0e514f1d2baa7f9b3656beac7b20b3dfdc1ff4fa18cd47616262e6f063151a157550c7aa4efd2b3c1c63ec7aaeaf2e2098db416f0393c9668872dc73500a992b91801467799ba95f2bff78e47c011d88659b17d61da611c7082a4d08378c08b1ededcfc870b540d32ae30e0bd9289dd65020000c4e82afb54b1b4707749d9856b4638e17bf04d6c7e00bac080ea9d27ed9a35d8cc50e4e8169420acff7ddab3b7303c67342c745f66a8eecf6873aa3efc6fe92079864dd5ade19750223414308db7736fac61b9d6f50e574a08309c450db436b22d9c00e2b61878f77f655cb219c2a7fa7995af41c4fe44d7f12a8f7637780dc5e66d50febbd218bc18082982667dae442910ad020934a3ecbd6c8a61ac8cf2be07f2e1ca3ae0617a4f4c980c9caa13084c87bc3fe8120ffe938a0b0eecb66b9f65ad2e4d5684bc8016ce7ec4609fb37410f014ffd50eb59752fc9d0e0585cff396437d9641833730bb57070a8cb9f13fd471fb327360acce5a580843915a5f401ca44dbb9e9a499dc29a9f45329ffaf391a82c9569c00311411e85e94bc9c9109b3890dd0e0a0d36111f640dd6dd5deefc77df184541aa60b3784551b3c03d0b8d7c42e9988186763c467b910198f7fdcfc64dd373557ebca2d3258bb44a0bb2082f16967dd9af5435c2b2715035cc0cae863d58318a45766c7f34fb9066e4a1d3d62872c9431b033dd6ed262b4111d9afac7dce646cb7c8fab48ec0e3bf8de01deb55d19e13234b2e9bac38de84de2ecb957e6be386440f27654cd8d433f263304088e4c0c6d50bb85b6903ec528064db8a3cb637d40404aba81e32916a83429ac0f39c376330f1e6a48fdb98ecc23e570aed64317cbdb6282dcf2588cee2ce1db1623af306201ee98dbb1fed2019f73797bedd550200f0a819986376ace3a71f1a197237f1a34baef1a99bd8f53122bf01e475d44e0b469d2b7504372aa357fd7ac3335508214cc2e49f7aa9da0c606e54f42b711fadcff7b981303f9620b1e040fdac1b891af09dbfa38138a1dd9336c322525b7aa7735a0b6212dc5a5e112447402c43989bdea3ddda0e56e6751974413d3293fe1353cc73adb87d19621ad237cdd0b32d4c127c7b7a0561587b078fd96201c0adde6b26d6c4bb1240de95e113f3aafc9f58a639d7b8321f977be2f64ba4ca6c0e501e831b75c28380275239e843d5668cb980d1fbf9223886f1ec6dc3d14e8cffcc1f57a9051e7c66e59b495efa4887bc82cf79e9120ee18ca9ea6a54451fef68fd79c682a0babf029ccb40860a601c62251062bfb2fbc9b7d971821a34f0b9a213d9ee50f151c11e5f9af6337f482a4067f85fbf15ece96ab200b8ae88d4a786f89b867ce4be1d86604bce29baebde31482ee51a322ca3604f847a70a5c89c0ade2f8a649ead34d751c278384ababeac1980acffa32d688c2f499d40ffd8c52c09d096a2835cb12d61274ff331ef7ec82959c82819beed01dfb8bbae539ffe19de38e32da8e181591d46c061abe902a2f16e047801a03f093abfe8140672b10e33ca3dde731bb17e6008bbdcf79543ac5c7c49acdd176713a70690b70b3fa5963c165979cb2350216b4b2a00b31741efe3cd1cfb85f7c9280ceeb0142ebb8cd03f76574b36b4d6f2c86029c8dd12789c1cf6d32d6427f6928f58cfee5aaf3af55116feac5e6385a53c465f9147187fb8cb8a9b7a2121ba6e3b720d4906583fc50c3e33045234041a1e7dd283e458453733435d8eadd6184d231ca9999e5864ea8485aa1c0a351058ec24472bf99abd597b8741bf01b2de72c74f10315a1cc76ad2ac343303779945f198ed0c66ae7819c2bb4c955a462b96ddc3caa2b8ca76963257a00ce14fa64a26a355c9ee8164517c643b13992b4286f02053a58fd1ca63f7d0b128ceb19d6dcc151a43f88ca912c66875b17bb05814afd8ce286685a9506ee4077554bb7d15d37462db4bcca1470ce920a6c5c3e8dd6157a86171c4b02d16e6d015867409d30261f47eb02b64b0382ad8160473e803433a816911307a07d81562581c2d6c0b8539f484211dc2b43818bd1bec0a152c8e08b605b7813958f8b13cfa272b4b48efa1bbcb1087197701b23a548a7bcc563c69eb0956dc05a53e5be68fd317b2b8155f1da334920b47d73a9b65fb257a17aef6f7b7447b36723af833ca10e2371ef4ae1345fa4d9121565a2526baefd101183b78a5d1ecc3870972b7c1eed4c5bfd63d9ede14b9c5132622aca740f8da8b60be58d70b6045b6184bf154dae6c4ca767f45d387f359c71f4ecc48c629d44840ae9bf110c33b0d0d9fd8fa25034530c784311f917d9207fa03833e7ea34bfd8d142e35e52fad4d97a9c1d068295b568c64f6201de63419e6c64f6f97c3d2da099a70907a15cd50590d7ab25308576f4d56ab16ca1f1294fe3bab44bb3d1d3e5d9c8f5f7387075053cb542519fa5d71b3ee9d42a103dc807f6f0ef79c39746bcc03dfe632ff6d534047a2fc51df0ce396227dda0ac51fe6e5befde2c847c4f06f53167a8b1ff5da1400de20e77e7df3d05764e1c1fa531d434e6fb1bf82fb9141754d671701882dc30f8baf2b5434a27ddd3e587ca980a211e1fbf661fd75051585085fdb03eb2f2aac28a27ddf5e587d51812210edcbf6c3fa75851589285fb6078baf2ba068449d7d3bf63af830c06f1f072d54195b37e28b844fc7cbe4ada92107b174a304ee3ba08bf4a8b0bcc78d3fa693ceac7ed2f179d4b669697cc33dfe4f97e6596f154c32e88bd2572a28beea0c3ae81952b1e8ba057f0cd9470dff19a24fcb21bb40d3b3f7fe35cdfe874944fc5758cdec57af0519e7249e258c0e9d96c872f2e2cf978ae275fd0b399778b4a1883907e8c7de9665cba5ce020f29ee1cc1ec4aa5d35b4c5c7bc4d2a117f925dc2cac5d9649f5aa94361e073e9d05520e3dd010f7af308964fc50c9013f6d00a798104a3d791187a929833d9d83cded6e33e73089ff7b3cf7e8acaed1c046ef786e1dd910c888d93b942ffdee307f68e380042bba79d5008078e22e3ff6c052d74bbc929f9e71fa5250f404fcbe726ad51fbdcc2ecbb197824c866a7da9a0656cdf75b6965642995d575eb76212ff4eff71fbd5390447ef541af50c15d28e69501a620f403c31adf3099ad6d790fdb9fd711793baf6c7e0ffac6ce3c6e8b52327f5e77667d993196c914df5eafae234bd1afab0c0ccbf46c6fab8e7a46b609c47d92af10eb04988de901734b186177f9c0b598288612625e0d740bba8c32f9b1271e56d3c00402cbfab368682e5ce33a23bb1b1223eb03a53e7f0f7b893848b877fc7de4f1c2b59a789e3e3e71d42825d1519dadc35846e62af310233546870a0c695963ae7c28312526dbb9994a51126ccf7d24f06689b39f540f24028f390102b8fae12470210f2d1b9659eb18043bd49ad8d9bdee05513a208c1066dd7cb2b53b3af515568025dc5537f3d470c2101c2a64e773fac3bc17ec11f3df2e649f078c4063480e5e223970aeccf231a923a40e692c90f778b52316643d8fda2b502f86a6b9408b526d6a6a1327434e80e016ba99fa4d94f0565b8650f9f9ac75ec0a30f1eedd2bfaac3188066e54384b88eb0675939bb9da31beb502f852017a2c8e111dad0429bb252aca025f91a943111be97a2d45b66c3a5c61e2840a48dcd0be04041fc7b0f2f8aae0f93af9c2d70867c660d03bfbd64b7a4db54de1b1a755acca6c7141f6f1a62cd2a5509b642c79f764c6c1e3e2a203ae042c1dc3dc1e2765d5dcbc82f318d57800e0aba9c3c1ba60814b7cdc5fb271ced25bd6f6a71a13cada7cf8fb60096399e9150d61acae5e27d46784066d802982dbe372190706693a4af01c15210f253ffbeccc2c1a8e8228863c599cc486dd30576f83780f1c5d346f48518e9f4f9dcf2268399c8febf9f993c810e15aa9bdf0974df6e3b8264d036a93ee1a0cd541d678e617bbb9f5a839a86f2bd2411b571346b8512187a388c8b69d2a1791d3224c5031a6da12cfec7e620348930b0193d5f1874616ab99583b43ed99b48aeeb61ff4ca48d7322d8d82a1f106186b7301073eeb15f58f9b58fd0fbea06c4fe9b8f08613c0c334e3e869ff9e14f08dacda82455232b11f8b6a876500fe4f7f4ee76cf4c99d5d52474e4957c0f2a267ead9fb4ad2667f1cc7533a8b9c53acc212b7ea6ccc1819c95b120f836d7ef92e19b3f2659157929d9ce399ca00139e42335f855724b38f4054d2e36ae9055e4084bb548c4e959cbc5901f7535546fea88c61863c688be424f5e9e307e243c3a62a42a4b215952419c83f09a26cdcf80a88af1a11c31a7ad1a9e00704b314d2379c0dffb630d0fc54eadbeeb2835910cc7e473d9a3e8e99ceb572f46e02719cc6b363c8c1a6dfad397b574e4f00beab831d706341fc6c68185a01812249139adf1aa9515eda5a49a143f928970b7d7264327b2e8b2d4332369248080b3f922c145bff03971afdab66c82ab807664e8e4aaab9c9df97a7d9b8661a9b26d27186179743d074cdaf69d76f422845a744e9d7b15fd945a20a1c2cd01e5d0e88542bcace9802473d0421517bc6633e9f9d30ee8b18fbb88eff878f7dd669cf8d6793088f8102a05407115f8fc8261d1b10bfc778206059f29b3fa2605c1924ca4e6022a882e48a8cfcb5c4223838a1315359c8324ce92865c1c14e1e22193d3879d82bc47e44a0ca4f7855f31d83965a2d716fd05484178f48114c36149d62eaf296193bf8ef05ac5608df560f2c5f4af31881311b380e1582435a6140b083fd4d030b0651c93fe7d8fc659f33a54e14b68ce8703700538bfff6347096aab9456f903964d020eeea1ec6f9690f3092e0a192367cc9be1806432eea7641f415d6dfafceaeb06d15033688e20baa30c93af04b5a4956d8dc163a788130d94415eae6db083e4b0af50f06f02402655340e3a000127654f5f6fc55e6123da137f8b203114e11ccc928cd42d6a5403a60f3b20e29f381f298bfacd01c00fe67922dc896776b82b8c676200558d37ade26c50bfcfee23a80b8625c311dc00b0465c9e5863effa4f601f81b65bc5f666647a27612fcdb5eb9de4a9d101bf9314485b2c6def34efb5c52c57572ae3b586ee694c5b0207444ca70274fccb2ead251b1712ce63c72b977889dc9be222b8f10041ad0302790f75cb24856bc7d6d158167db142f8577ddea3ce677d06d8d1d109927a51ce741176bf6d14dc4d7017a7a66e0a8e5e6e9c5316c5d710522a44395e489570545b2c2e1edc21aaa755944868ee15061e363e71837c72149af44e3691b66c83312a247d0ace90a1b53812887550e37930692725814b0acd6cd6b4c6088f1fe0f281b9c443bcd14c769b23a03295e24d1fb7944c29dbe866a4c512e475a01c862220a5647c5e82e0e3787258d8620d5f61f0f34c48ca854865aef7378accb5b43a516455f0d52fcae8e1aebe56130442072ce63a04800498b1e6aa747a60964f8c7a39216709b6d86bfc759d42eca469f67a081cd2b7562c2cd17d423d8e1c93188a30b659e556dabffb93748de98f70a2dbb98e8141fc0fa238147ef0346c7d605288e126b215dd6804465fe2034648a097e017da85aaf88238c419cc2339c091c0e44a84e66eb63eac9b41054b0124adcd00fe74dc22dbca2d1ab32fb0d8d561a10288b93e2a58e5e7ee34ef15a99b83975a109c99da6075aed66cb84bc013348aca7e3a20b9c93682cf7a11f0046166b04032437f9433376ef415e5be98dce2a4fd0429ee371f9d5cccea3a631d9ae48403bb025c1ac2c32c844b5487992f2a7dd39d770a55d2ad5ee33b487be36cd9e32e858298e64c9ae2ee2e66326ab06e1faa55997970a7c1a6e2060fd3a0522bcddfa1bc3298e49a679ee75fbd8a6f0d8da9719fac76328f7834238384e9ad7019091c99bf777107ab796c7229328d06795e90b9cd53a123b003b95d24929edd93515751cddd12fdc7c6a30389bb86c90ee66b49115f8a7ed2478f55a988df864f1d04e991e85350426224ed945213b561b47bfdbdf7997e5e08dc01148d9fda81883f6d9b96a32cd8df3c014c206267005dd4f889613239963db2124b8620c2e6297c8fc8e5e1fef2048da52c70a8ad4b27d959734d21a7f3efb831932868fc28093ed67fcc0ce1c9a9797303f596794e3988c2a37c8f5049960fdc5cd98733f1ccc81c0a4af6c0e5f228993ed2e035be382a8e7e8e5ebc3b53809dfb22d702a68dbe490ec407201be949839e85fa0043601d9cd5336e44fef241747eae2fae301aaed33c17bdd233a5d9ab665ec3cd8640193f68e185d3ae922d268079051914458bfe2fe86e59a5a08053bf9182101cd5a4de37065cbb9ae5e58cc7721ff3b74d25016ec711d676f04513d2022a09f8383d62b130baf91ee0f99145546e40e9cf3d86fdec2ef98d7c3b7e4f20785a40e5f3970b220dce08d13066ce0d380b84e4ca841cf01176d86a9cae8b9a5f2f0748953685eb9e297707c6882cc282dce3a6789a247700e24009c0e4351743dd2a9849780b834c00683dcbcfb2bedd5c087c1b869009341d78120f5633a2a2097c34041fb78102862a18e5cd6f9068cfd1507f4a8983401322f1436249ffea01a6ccd542ef2e0357c1d9a935282a0d980851b64aaa8f649609dc5f01d193e29c0b29924118cf07423a7a1bdc181f595fd0dd5a6310aaf7a1af4fb70c5057529408a5a6457259a60a09592aa959d731fc1ca9662afc975584e01bc2b3f3b829834d00811678ac2c4c0ef0eb4078a443c09fae4bb7044c5405de41ee1c062ec1271e26673f1c6458ebf714c187c08d43f543fcde3299be0401c500caa1c71415e2c936745816264cedbedafe5b0a32290af7ace5d8a2f8bcda6b40c13629900d183cf75231b5a9281f7de9ad3d607457b9f817cb9d4900a66ff105a8705eb56a44394b1d1f2fccc45aa1ea429e58bb5d5d588ab561a05c5430f721582ef98428509f7b542cfa3bba6a7386daa99fa5118d5331d69a44ab46910d18036bf7e46c8865059e44adddb53a5ebac2292585a448c508ab28c3ef710c0bff592306a9519457bac8395cbc4e283fb49f3bc203854eb70f430b513d4adcf328679444be0f052723eae4b21d62227ff2b2b70637c3a1631bb5efe225389450e83615e80b30768fb2f7af69c9df8e4ff82619df4e0551874f1d831fff75d65b34849a45a8066f2c70e65e5fd686d0d1e0fb24f7e1f46e52afd6cf4fe5388796916d8596908bff708eea8d5b5cc38ad7b8b938849fa8cdf80c399b4e2e8a92fb9d37127d7c894ba7c1b8acfadbd3eebb3359ee770cad81860f8c80fe12dce2ffdcf6a74e19fa8814f6445b7d484cbf9fd6c99206cd73ab7847b32bb445e868fce6690d82d6faa67bb4248096095c606be2e97834bf81dded680c679087a09f2440bdd1b6871038c5d11cb1f576c8cca4cd8f1056d2c6a75d53663e831ad3f0fd56e19785a02c4b6c9c5a2c7e47f63f5dd8b9e27a2efd1577911e1eb593be7cd00cdf6f66b86c62f3b0af73e1626873f7a196555f8ffe7b579e28e102ab7a2b7a01f4ccc8fa17c2ae2c2032e9977707a82c3fa770202fa51cbb1cdd6a61bb460234eccc6564c97f8b9c99a297a0cb11c2e0cf992581cbc3ca367de1d989bd9b0581c24dccd8273c4ab4d17b98279158315c5b98c4dc46505c1b7636272e5b511cec700804cab5856970dd082d88505a96040b3b9e2b5604af08a24f396b346a4373b79534386adb6849918c849c93759c2f0baedc536c424bbb73fb0213b7aabdf0ef5daee664fb128f464cb1a3070407529c9ada5db600602da1f3e4463024e5d9f4dd8b230d17836f396f9d284e7fd7b62d6c4f15d120d0c432136975bfbb3d725ff73332b6c025232f91138263128c449b80bb93688b03000adc4cb7c49ef9c83887f935e7aad69a865be661bc8014c677668de22ddc11e118ea208087288506ea4cdb79ac81adad0dc5e90a9712702ee21b644921b993482290a18394d4a68b121c80d67c8265aaa207c405a84321903ce04c0185a461818cdf0d545c342e262f000e310db372cefc91ca81c544a6dfe97e6e330115404cc15c8c5a79d20fcb92082f54b41248b03dace430adaa5db4a63afd137e96fa36a708d3a25c4278108feb12149aae4e1d6d3b83c9bc8520a674e28e9466245e96a8e978c20e6b70ea131a2d9bc72cd0624167f6e327c07088e6f970600353942d04e5e900e68188e22c87826ca90a004cdd11cfe77aaade78f0437a2581e5ce06ada8f1f856cc641260da932297a897d227a45e2df197cbf36736069a123daf0ada390147ec3e05d0450e18f60a25135ecc0e0762229ada44783011f631c70a314954d649dfb43078935990353f46a7c4b1a292ca66091e472559d40900b400fcbba936103d45ed127e5a4b0e4a86e439ce946a322fd60039f53f112a2aa237d0dbce6f520303cdc2deece9af680cef6ae833d51e746431d4112a5862c70d2ecc6538585b4fdd5710482cf064eba2d851fb33524799c630ad65bc2a58fe34501a1cc0b1f3ce4acc1d2350b83cdd37fed7388e9856bc51eff38b184a63a7a86912f03c1f469ca6b3686d7c859a4711b26c53732178d4bd33c1b0af00b6cae44c512a379de78f9bedf5ccdf6f7de13bd4cd410a223b17fc60c2b493584bb60dc5256ec0db29f35a67cedf7a8b5dbdbc20ea8e1feb00343445cceeff1e3de74511d297e254c721d6db15ea9b559f073703716bedfac4c0ff0bd4b489503ead95f5fcb38f32bf3123c2eb8c1ca66c3a1d0273fce540c5aa55ccd56d3924b7507b6272c53c738a7cb8d07b2e5b416f438cf33dc52d28a28b7f4b4491597ef08f0a6452f633562ac3f2566ce1b3cb30cc7c30b49b51cb311874e3ec4d014810900e59f2505adf1a74845b12448d55ce244ad90dde23af8010de4d380f631c5c0a12ee6bdc040e541ebd3a7302e328443206a68e8ff890e9748d765d918150dc9b80720a3d5d5181c6c9813a32d729a94fe23da705476721c82bf6137d411239a1e45bac56b2913729fd11d889425f0e8fc0349e316d9af8e27c8063e56bd9355cab1a967e7d35ed164d20815e160f4e06737a9426c9c65180036179cb3bbf9dcbc0a5bd1551bf0e70489c17f75b836a5ce8185810432fc3d20018588e9c4152fd92fb52badd36731dc5e4421409a868fd1ba78b4652fa698d0178eb9620d808a1166bd163861a7bc21b3518ced71090ac78a66fe83a3fb1ea028b8873c8ac88324b0c0e7d014bbf1ffa76a07973f2b436d32e5c02fa68ca41bc5737205039a08a9b82a185534db2a7e0713e0ac391bc60fccd8037b0455e42b09f1c0cc24b81cd2851ebe1ffa2e9585580018536973bd0904939b84d8be4633ec55ea91d6c300f8e88d5c43a9b3406616ee5142a7ad6eeb6327d0bd0e990924691154cf4f41115e2b290285d1c2c87ea03067bcf85da40c43b361614e0bf658a77a2d6d6f76b3c35ab403de32625f7158a56fd2bd999e5a6d348afe0e708c2dff4853160989cbc2e2e6e71a7146627489c0bbd8ba5a49a04714d475c57dab4b75639fef47d3fb3793b31731b556d55631825a9676354d7229bf8b0956d4302be892981a3c49ea9cd2358c336ec1914cebe9d8aaf7b0a313278a0c119af29fb8c6b1b13e48c9247cf9f8e33a72af8937e4002dc1e0fc8bda1686c9ef0df4c98d48561a16fc594c0fe96a1632a83e3990353565cb493fe244b97733383578ec29c6140a5a29d90ea298d76465a35d665a0edf86575e1d4fbc7cd81b3eb8a3276de2c74cab79e77caa2a67ac96a1c657299c0ad474ed8bd97e2166fabea63da8d7216e0418facedc31b00d4e1c12f03f19fbb64a5a47d68e7c9a36793033e2d5658567621923cdeda8e82a96d338d80df12a21c044037835df3e89829eaa62b1e299963b7a8b32d5756c0fe81822248a98ee2b6ff00ee37c2049182923bc11ee8099c2f4084c369944f02761276017c4c8bfcbdc00e41cf29bb2d4314701778f11dc501a4174849008642ec828021f21064e20a060201542aa4d199b018cffb1162d0fd9d7df57664ac4ce993dc4a5a632f2c382b54d742d551fc523bdc4942eac3ee11d5cbeec4e62bc9ea19fa8b3deaffc6f45a0524b5804c0cef3572e6cdb3b6b272876f908254a91d807dfd6de402fe3652bdf05f167a56d239eddec4103e96cdb3f0ff58f410d98bd54994761b00a65366027dcbfa82354ca68d7b3155d84f03850b518d228281d809b3d0fdc888a9e01e542351812c87a1ddb3d3c30ceb4aea3fc68f16ae177f96e2355dd6a90e63bbf3c7cc4c71f928e79cbaece482c7b1a3dba088c6447136e6cd0094a486d0c7995f97798713731ff8e533a95c59f8dbf30e9511143acc24c321f102db62972812ebd0e3d4e169803d58ec928356949371264ba5cf930a1c0654fd434cdc3b08ccd32401dad42e8be3f2d25e29afe6db0a7b4758d0f8db04cc2d9d2902b53493d3f4420a9968020799d9c4f365ce068674be976a40cb5495d3491bff6b5d63cae048612730b647b1cda157b5b918bb386f7eee8e0147c9212994d3ff5fe0bbb27fc47f60d2dfb1806c5f7d848dd2de04f3aa258dad904adf14e7c5243f95d99e0e71fec037d3c3ce93e42e019df0d11fec36099024bb5e6e99a58bba78a2cb3875e67f9dfd5a584642427fb7f8bad3c6e04c60812d3c33370cda202d1f8387492c0364d9711dd7f9b48e35c11cecd566ab075e16977c61a59932f5dde659f0e936174f8f168b11a4c49c05266db760077742c48d2090053e3f62f66dbde4f4630306e2f3f7aaf1ff80e488c0cd59f4b765618f6f716386befa2fed59e544b051ff41ad051ce735ddc388d976d63c75262857c309c1ae7de5b38990acbac671797f9acf9dc5c0402ed152d0868ce6258e47ecdcf48613201a43239dbd7577a5a1c922e70733f19a0774ed660c2f240b308d49d5bf3130224b045f0b9b15b76f50de02b7f293710149413ef06842cba063e11b819fd98b8a2633b68a98929bc4b14042bbd7297d5b5b4f0dd91599fb7191ae34368d48dcdee8c5a0fd070e5b2fe62e503d6af982fccab204dd55303399ba18279033dd3b42ae94da9c652eb1ea2c02a08f5795ecd664720863673b9b2d826b3999b1a62bfeb7fb8dd887fecb80947b81eaf3dee7cc8fae18e52e435e7a4414ab37ea6d2224dfebc9e021f3474c1260ab5e5684882fb4579702ec3b6c21722093fc9d5fd25d5ab9b19f3afdca76bff22bdc5e10dba1d5baf0f5ffb3e5f6f933b79e6d7247a48d424f475c4741cbb4a2ffe6dc63d2ff621c4745bd7bedf582916b1926c1ad718d7abddfa6f430745c2e14b30c84e544624639fd895c089357c1207259bb29216767fd1c8159ba800e7804271e7ddd73d1820f9d2006743cd5d7004d9e134f02dd795aaaba8c644652adf8034e992e2492f21674c0bcbf42808ec39316f15d8192c329009aa5cb0fa714d7facb269ba14b48d6097ac090ba5a42b4edc8e98a8946f52d3efc383ed6f3f1f99444e17f3f0e9fc14f10b7c3e159612eef4e26e1c1ae43f604a3d8a56db7ee6d825df827736234b8f58bc1efda0c223fad4f2f4b6e7e17454f5ec29ea5c2f82360ae9a90b8a84ca52d2784f901402e39efdb16592cc5d3bc1210a67a766b9e90a35dd9ce4fdd9672c37311cb11ad93720bee52f8ed2ee0e75a5a4cb79415949db800af8cf12eacd93745e488d97ab7e73632f4ac496b6333037f2af5dcf4230048e9335352b3899af4e043c3cf7a6ce6fd42487c4b28542e52e3745cd889b4ee469e8fff742e4a95d095d32e1a2c3dec0842a2170ebecd3ee1857e939dfbf060aee844996614bbbe797e69724380fef4a88d7db33bce6313687b0a4afebdd99632cb272fbb8fa2f7dc4789dddc931feec52d3905acc327ee1ebd923ec42c9b993570a296d745fc57a2847e798122bf7571fa8f93e55feaaa2c2feaa03e1c0eb0f4638346cc4ba6d54586bcc1507432b1ae5b6ef2af465ae67a818a579b0696bf5587b68425e3fe2e2aa79571e13230f7aae22e5f9788cdec566238b8a1d34bd0eb944d19a5c27798db4323a205b95f7c5d4b30a88a80dae9c41faa73dc8ed00cab213a19714b357e46a5e1a8a68212c571c1f06c7b67abb408b1a27a218b222fa0394aec1dfea9a46ac9c1da620d9279e987a8034f016597feb33a488ea3740bf742a360362cf48e3a4a7099abff2f823fd5f47ac2ffa2beb4652a74d4474765fd54c250687ad8af27fb25c5802aa1a4a476b5dec1672f1fec2e848ce6fa4168a8ad6c7eb5dda0c660fb89a2aea3fe4eb2f96ef733b4462a4702725bea99aead2c12b5506abd2087ada8b8011d95338ef70e442aa591a2df0cdd8c9791ed967d9e11ced114a09881015c296a3687f105158268a4efbece2606531d94a8dbb570c5916fb843bc900760b9ac89358a5f880719b6c9ca0e173848e0160b478b3416e32101861b496347db1a0a83efe4cb82b18d43de044a2b754e855c08aa32ad4172d4a2fbb61eaf1139ffcf22927375929ff872501c29fdeba94ab19df9f6c724152d9ad827d5c5b7c31bc8cc8ffb637a31829931870bccf96b693a4f77a782355429ed794553ab6593fe7c90d6c3d374ad9529796d90688391002fbc2ebd0e3c71ddd9b46aa60a41031e62a0e0b0472841e720f2470913dafb47b2d3ea801eb9ce37b424916e76b66d310b9e3ebed5b3cd6829a8d8f2ba6b01130bb9380b0ad6cc24c69764f7a0236a5a29061363f7a0f80f6e735ab6e2cb808554575ec75a399c5a5af304ac9dcbd766d102aec67c0c91aa71886a6fec28fea584a85eaccfa74c5163bae12317e5c3917dab300388d317a62f19344a68271cff1eb9dea473522b242f57ad9801dac894487130a4e42e8d7ac71daee543b32128c2a3ab15d8a910d2206f212d243e046087fdecf4fad8464241209ade57324da84cd4736b4404f5f633e6d6f64f17ff08d571c41fdd2c5d507af7d14b4cfce35671f06a946e79391c8c657c323a4ba87f3526d86045c9104973d1f68bdad04c55d72eb145b5d6a2ca6331776231730edf789aba01dce00e1c7d9a0efe8d70df73d3ed1722fa084167fec9f2519ed984f9824f218282f4ab8f3a56bc644b838c4f8daad5b1dc9e9bddd2df38f0cf9ae323128b37726c9d756ecac7fb2202a9fa005ed3585214ce1e0f81c34a3c5d798e128cdcf18b5a855890003983b1a28b202cf1ea6085ef644f32014763ba785504e3934b206d89874f0241d2c7816609733f6a7d1fa3a3e31e603efc0e0d4d6042015b5b9b187c9c4c9f0088145f44391b4ebfb8938069ef7a941888a0eca8b7e88384fcce02285034c60482f19f1cb83cb0329d0d7878f46fa4e2e503bb8c8a068e827c30eb075519bb351c7efd82aced6445b7c2721e10129f6c5c9cfd08b49b3c079c3b3850d4f857acec3b2a36529e290fa430f83a81b81faf8098c7ad1994d9ad4148684eaad2e7f4c5ba4a797161aa00d8c6ec636602a523d22575bd889e14bbaa7ee054c1d24e5d120fd74c654dca2af2f0a7a0b7cff930cbebedd7ce15b73b2b04fa22a0aca05f99939cd6ac2692988f1ee6cb55c57248f25863c03c91aafe9c901fde1ac77fa04037132f50a4e6b5576575b60c3d79c0b1525925139e10ad2e765fca00b86cf60d7d18dac9a32eee07c0120a18d7cc11fc4303a35619c445f3e071569aaf19abbe72efd06d62679d9662075100986421c400f5ab07ba19cb84d2c6fa8c4390d4eeae966f92301fdf4796f3b92a367ae4f552c39eb3253908109f1a719d521cd7d86a36d3a17bbca9783314b7e9153d17f56a963037e4bc4df8134a174ca23b656927ec35365732cd224bef20d6be81210b670f01d64e4f4be861586132ce318c827c36a8352fbc2557290269c9b59ba8c775d210517d2b01bf4e000d5e34522434359e70437b0f4cbbcf245d1fcf8cdfbc483766e2f628d36c3f1b7a4eb5f0a9cf56e819da11b6d078f5ada3e521caf4008cd2f57b3ee5ed2fc67ba0bd7f4a8367e63541ff47fb787c91b2b7c4d3a170fa5a3e06a2c09fa5f7a8afe40e0d6faaf1ddffbed5a01c8cfa7fca63e9c87fc9762d888aaf14119849f8b50a83bc4329251e0bcfae5513e959e331c7f0859f8db9d19ab77ab5876bdc3df415e0d0e8ced5662c0b934d561f0028b8171c354bf080028e1dbb520c59088f5ca6692d4a772e7b11f6f734a5dcae3b849b88c3faf14b45d4dfea00ec0076760a54f62e08cf4501f861e1aaa5a3f3f51cd1d26bc649fa367b110d962de054ad075efa4596a005c3c73c81c8600ac45e2b2db01e94eae0ae009e8d34f0492b6ef76e6c69ae4543a880896956e16f7f8486ddb0773ab9f76c4a23a23749987367373d2aad8736c8b7f16a5a987d0704fd042c4c363b2783e7294af5df9ca4de4a194538a4f8869bfad94d75ca9585364faf46a4c7d5c8d57b6d62df1bac60c68bac31dad82842475a3fda53b92394df24f320b7897575cc644cab8374150a41e33389be97eb63a8f9f068a04195e00cc0e3569e29c4cc300784456017154f0018b4708118c375119d569b97bed293941190e3a7779520791861c1e76354fe917ed3da0756701274dccca6084d7b1cb992fc3804afa691e9c7575af3989e9670221b102ee01428fb7c56c3db1e0c5789e05292a76fa31211517a7cae275391224a7c1407a16a6c3fb7dd7160145059e077172f647bf9d638af80b0105e6861b339b49d67b390bf02f62a8e227f8fc43a252cc30ac653b8f06c4c8c30f377a82624d40646a035d8e0762706a974b52502e2453348b9b1e9b14c47e806eefc92eb1f17a449ca26c47536852a0ffe7802e6f4260d448b19f2042875d7b740430c8d18e13102f5742c94af460fe3e569ebaf61a796128ad10dc8be6771413574144ff375e61e100268e5b56a0451b2c2d0c6d97567463fead046f8f33f73a7a5a6e5a6e7c417f3a95ba714bf107b44394f7f2286cf2fee2108d03569750e8908bc1c2463dc93041aff845dafa15c6704415a957c09f144f4a42b9a92132ec1bbb1bd56c9af2309ddb88392aaa58676f1e82d7b1c6edf76d34f9f3baa885212e64630e684866205c4742f32080d67404c21e8db212613d0e105958201d26eaa1f39a636406fa3d7d576e21af2d911a7eadd30782828c02f96582c17f7673d327e15540c2d12fd7f8a343d6270d69ebf6e725048f3b3922f70fe04fff7bb5fd30ee557dba173c294a8c6660846dec786d09083d43dff4b03988a90394482ec14da2d3d5fd4dcc4ca5ee5e97c079894f0794c5fb6e71d03109dddad7ea9d3b011e019aee97927bc4df490d096451423c3cf0968138946a9746eaab93fe36fc59c1d7445271c1af017ceed24b3c751cab88f0cee7d6423861a41b5f42313e10635648a05738022d34962cd094237c67da2033a33117cafa7136a7c992e897302db14acd4b40246f444e1b2605f091288581fda4ee85648c5959b59fffe4bbb4bff3862b376cafd2c2671ebd6ae607581ac800c12f5b6b19991dc8d00aee5f06fc141c37273d7cca7e0855b6086c435072b7f785bcdf20ee494e34df7a5c89e32e4fe930844cadad37c22726774ca3d12dc6afa70659425f4969ce95681c1bc633bb7136b4af7ea4702b7c80dd021b6d2450bff45c141064baabd4057464bb67004a65ff6927615eab43218b4acee8b5333a3c85c79e67a3c22c21a028ffae7a3e0e836e10425fb72aca4693dbe6e5d70e71d48a89e341a4748c64d81e3fb1d6d3c22ce1e5fec452806fa3876294d9011e2e4b3801375914e715b1015d0aed6094d6cb945a8bde1d71df0e9823ea1b78539da3f068a68044540c2168badd325cb21a7ffd67985054ed39b0f5b9ba418656dcb5123f9eff744947f274040e951838e2d0a147bb90fb7f07059949e6f1a5ad18b4fd98243ab07d3cfb3f0a4c08a43ebaf4be1b90abb464b530b1158c9884e9e1033977812fc3f0e39bd71644d1f8cf3fea1001f688f3e051dfe6988ddc8561fca07d09e84ca4b8cf863c9147041554d31682d13df034cf97246a10efbf13960cc7935a902e7c6ddb377b8ee7bd0ce74ee50f19c169facf28271c710374051d4b88d194b57280967a820c4ff651d00e775838a3020f9b45f3b54a14727eb0e74c590617665c9371a60ebcd5f3ce98f35a2c9632e2d0ea29a49f76795520f9cdf25d70764c69ac966d9c2abf85beffc6a8368069f0b10c2c8fa417eecfd06a1fd87d98f74952da8010efdc84f47dceb714410d420185903d71d4bbc8d361d540419e1968e091266b01aa104d842355068cbac81c30aced3d19b63f29367377c1d696ca8f7a41c30479f943a42a7e62284764991518ec7552c8271b3c3d042b4e7736337c864453f90e1170d29ef3e64203fa0448f68b991729d106ee50058730a32d4630a8a8798d74dc09a04275c84092de27bd1b2c64115771f198f159d4e41fdd9b9382804e5ca9b2878313325197be9cd8a84c41fc15b0e708378a2ce9081e3c0b9ce5619340c9e4051b23b862706ac845e82d9f3b3da4810a1b33288d56e2aa29cb3ce1a231240d33cd9e320e6ec04dc73d8d8f954caafd0a92b322ec212ce1b2b5fd9fb2e023f22b18375ed320ea93bacc624ea093970a15cca40e45a4b8bd35cf6abb0302fb882816f0d3ce550e52c75d4b197e6e17b47ec41a1b180d79d35dd2de02ed4a13d4cc69659adb45c4f208eb580cb00d5d85119779020700212ca921e9648ce8178e3a63eb2e678a34012358a994fc93aa2cb22de36552294ce89a88caac6215baec4fa059105c812800288f32d5441012ceda786560c3180cf32e65ec5ec2534b09b71991523670b14fb889ed489593f7bb52972a51b7fac39224011f03ee9436a944cf959c6c53b13dea8d1d1dcce834005f95bde898f5f22da7e11b0537214f4ed634f5bf31f1d3ed4164d277f8793a0e05b463edd63f582ee1f1436986719424ee35ffba6e30e161058765cc6d7fd442bc7ca6fa8a8b2fc008e473e8984c7bc2bb219aca23ced85710b038aa26f3922d7f8988b707b513d811976cc2bfa2f0ee4149f6a36a16385820b33cabb5c1133a6813f3eccd75b533c6060532cf5a09c27117107f5627e53ac55e2daad72945acd15be5804fcf24676844b08e690226eb8000ca226540c78a2c40169962d3417d81c98e0fbc8225abdf67b2ec2a255c37688fed611d7fcaae580ce0ea58c7cb228144ae510b6da068603162584edaee754f7de143f38fbe6c9ab759b320f1bb8c41a270cd0338e55fe8d0df327398004a363584206628d476d5b836a751a097120419649dffc4ab5cb506d35757d96835950ad74ce5201cfb1c6e9cf74c4a41e914d94db015394c9cb98e4dcae721a7ae8e6505612bab0317c2436315ab4bceede57d9042e8daffc82f7125660c461fb4241a36434da5de35618b0176ae0d6f8ac7ad3728157eac9eedb7128a95ca7a7652e5dfa1740c9ef180c82417db3b0f783d0996103327fd2b977318606aea870dc54695d0538e51a825a65c04b68f10ccd82356d48688053caa8e55a2c0593b650e07736e30ef8ca2e749380b22e5160d10b5abac45f99fdb30e74b0322bf63d4cc4ddcc37e2aee84dccb236a4176d4c6039dfd00c0c10b55d49d786e7eb617865d82d89e1c058f73fe488e77e633c2cdc2abd4e5e1e1e70e02cc2017883455ff999491b1abc6360aa51ff154a6b5a943294fa413da37401aa695077296115454f32b03360ee3f2ee80ee2f641e6771b748cec8b13c023597b2651f0782b6854f3cfd181167bdc34e111d1b099dc18ed8ccc2f2bccb75da9e781bc2b802f88175fe518233de0c938f126481dc33906724f7820e66bf87f1d4812cdae07ae41c7257211fe235b74c140d1813fff1121827e349e4fdaece5f5289cc80a8db2f3e49ddea4c2052f95c387737d598879219a6b85a1af17a66a8656db018c081c863cff50d996391746ee929ed5a72b145932f70b2a99fce1caa07afaf57d691fa0333da1c751dc74549613a1585981603d93658a82707667e5f0518210c89a95e47a9e9d272615f4412f7e3d9d4c68e005cfc6ff7c5ba3d51b0d5cc15e51db1bcbd3cad370690aab91deb3572554fea9e336e65a8112872babeb9a3de62df0a69287cf9ffbe063d339893cc584aa84b7c839b6ca17456e47d5538f4364f0a731f9a1efb3690699bb00a9adb25a3e5eac4de6505561c106158545608ebd88a9f9186eaa2380b2950d4dd8c03617098033ef6fc3c8410b7f64ada09cb59edb448a0930c690ac081c24fc057214834121a35b0722264f7a2a1c5f4453b46f4838a37f5442cd9876d8182d69c3db2842cb83911641539348f50d943086a1304eb4858316b67ab6310660d660f06acd071b1fd6ddde3ec8c9f1da29fd8c9107748d5c0eb2f7301b12ad70b68f452982db7112a069977942512b47400005703cb807c02921ada532bbaa254c82d5a755c89b0d50fea94428b1e751bf820640871213d8addd33428add0c08c254a33a60db57ea6113b2af936f5b881e0ef721f45528207df2e443e3638931c1939843917870bc3a786e514b571343fadfcc0686ed211a245db849c4758cbab2a11e3a060e0e6860f203ffef2836a35f897c50a13e4a074c64111810cd02e097d79ac33115a25ba63b9868434c421abeaee37da5e96feef23e9e1950f47c1a8c15e6c6417bc80651b6ea0272867817fa27434485c1c02c5b476abb61fbc5b834cfd61fe9c8c55a3f430174be51f26ce448fc5ac53e54cf919722c4b83efc07766e906a319e8b44eba5ceb4d2f451bfdd28b25076d271ce066576853c0a9c06138d1cbdf6487ad9852ecb6ef665be9684bed157c64e70233b11f8136c449faf419c2d01a4b22dd94463d7ff7f6909d7cbaffca5ef27809b2cfd1c12358c807b908387d0ab7743e5663aaa83295f34fa0bde3b114c1dbdcdce1acafd0a5afb01cb2706f0672b259ca2b5ce731e8483c13f9d511c587264ebbbe95e716b2cf570a1af43f8df86a8ee041a4c3a94074a13244ab028b414b87a8d7d682cbfedfb2b62de4f74f2b979dde5cea17724e1408dd770bbddf8ee637a0861ba280414b705d34387f81c80d347034b0263b568aea0f1fc072421c49ae2c76667daa7f6765a57ff4b8216f61fae5b30628715b75249df9384a11dfac34fafe88451192969030e22c839e27b103c96039ab371e4060f18e544969dea55c100604fbc57c7b56865e1f5c694b1579ea0709656740b66e142af80348c1a826839636509ce7acf97747e54343279a1395301be24bc98eaa01af4a5c76e03d1eb04b470b09b884405780010d5773982655732989a86f32ba130199c60038df1600544b21553d3359a1374f486a30698f7992bb459f70dca0d1052582907452ebccebc827b93f7fa6a9abed8338ab3da843bc2a4a0f5a1b906af6446f387b2d8f6b3572d3aa52ffded5a41530608a37b40a029d355ca58e727d3831e25eed86dbabf998b8088e2daee7c704d7f9241516f3c52ac0ac960cbc92b9537d9395757bb6520beb8a14b84615127bea95d1d846171c02b8537e86ac42df6eeb49d2ee56a6428f16f7435ea864d855ba9efb15f5119686222095e24928e048335da478206972e57e3cfc717bb0814a7a80211f01f830e5fae1dc40364e91c50ebc3df8eb1a0dd4bdd521986f753f7c71cc00e03cfb03a4c13a617fd2dd3e1f9ca85ca6aac844977af506aa49c5c86c13f47036b752f428f1aed0db0a175ec09acc90df7b57c974e79042f81aeb884a42554b6e205bf568319546c6241f1349adbd85172214a5a52b8ed5e4a8ec6cbaeb42f5950768809ed2070c526bd50b9cce91f524ca700c70a9893679711b55eba3f25504ae8e2df6d6102d8e8059a69dee8a50df408a958070d3c60115009576b07510cfe7eaa8c3f2db6a308301854de8753433a63c4b6804aedb119ebba9ad40017eb63c3545eaa045301b0d96bd29600024931d20ecde301265860c83bfaf6ebd8fc94f9cc6eaa9d30f8a2aa455121788e13408280d815a30721e2a941cf40fdaf68a81f3811e4afd22012307f180359f1abcd2a137f088c597d4c36458ae6d56340b6ff8f4f1ec6ccd55a64e1098284e5b3cf96e0a1a941764b44290d580dde8f46717a5e12d30408aae804d8a7dd3d21fb5d56c7d869b03a3c66a881fb5f94649415749dd2066164ddafefc0487c69041e9af42af8db0dd48aa488ed642a7d8a3a18efe9e40b6195f2625df4897016ddab8c7d1810d53ea19f3ebc3ebdd1683e40c647e2244a4bf6c754c190af5787b1bd8f10e209837d4bfa70fb493d73d50f976b6d4e994e6908303dd128f763d3cd6b2f978c4c7588369400394e62d086d506921c978d6070da0aeefab82adfc56cb42020444ef792570555800adedf8034629f6d1cc0b292bac4d395fdd86ac7d18d672def11e64f90c61414ba3ffa0dd85f0f682216f51826ccef1d7a23b33b90d70494ca9171f63a671f91d06b053847d313be3acee57256ac1989ca28a9c24876dfb5d03dd89d61f50d19e760906be138c0244404dd2d0c743943a892057da56480522626d536e8e747e17d74b74239bd2ef06d7ec9ed9cf453120cc856add7fddbf526ba5b92ebcbbb518e3810c440c3cb4808114b202e751ee69e4a9d36111c740600060e9dbbd4101730795359c06eaf4104a2f14dedc80dbbbefe5e8ffc55fb6aaa2a10905a1a4a47318230fccc5776c98dc678611a3febfa70dbfa97542c8853212248ff9cd226a8cdd2f566efc0987787ce4f6332ba3993bebc28502a1929fd63d8e3043e75ad78ed6f87a6115390b73507a3db74f6e12233f449db09d36275e9f94161bebb4714ae2326604f2d306a571eed2716596ccb3cbb22a6977583eb3f840934595ffc28b043ea617ad75e507b41d63b49dfc86c3aeafe746463bf3c9d8d0daca3e3361face57a610f8db0338c5618d6bb318c4921012090752e75eb778e78bf2978d49b23bb5c1f3acdf66d6d8f0452f9cbf3ab5db735a016a1112c7e24c08c261215dc8f982e636eeb907d87eafc02762a4375e824a1551cc6750077669a7594865e407be6532f5704dc44078b2e1166fa1d938a7ce671ac47d84d62c76b40e81f27e4098e5cdb757f6c40b88d63fab52815bc0c36dfed807ac516731df84287be6994be860fd5857340c61687b2cf699effbbc5390b549dc61b02f89d3a149abf6e41275f5446884057e42dc9906d2b720bb4e29e15616c6f96a1734650db832ba7d32e2442e31c227a2b44cbd3c5b4584ec905328ba8131b94d434bdbce317b519b40c2adf2adb8505e4ee184654988b04af4f9d1f5c497a648918d1b116415eba165e644ac32861e351f3f83cecbf11e2089602ea5081ae6d2f08c12e523752785107c86d9833cd9fb36d54eb1eac4ebbe7b168b8fce595bce67c0b5f2cc6917766bd0029e7f00c6a3c70db05c0091cc32bba1efcf3c62112905cf8aa16e5d42be08900f2b25bb436bc3e8b50173ab95d25fdfa0a5f71cd0fa8b3f1108b27114b2dd07d08a6ff871f71f2c17046323ba82a03e5fb17282c735924cc872d2fb0e601a164be3278b7afb262edff903a76018ae2845648016cafeb86db051cfa695ea5b5800dfaeb44081f38cff86a746a9b1aa80160a638e1dcedb9b2de9f226da8c24586b81a080ed9607a513b87ae79a9654aea54803058e72632180d54583a0e2aa1b0d89f9b042bf8e955d94307dad7582df39382f6842e29949085d9ddf6a4f24bffdbf9880d1635024f0d563647c20edfd58f82c92564723fbad8b4c1722598f677ce27a8b0633d1e176ca890d822574700b1797130cb0c42396f1641124d88d176c45f7f0d0aa1b0d116814fc9627aed5a9b35bb15575b10c3b3891f7d964060f8290f822b28ffb8c06bc5429e1bdb4a65be95fb12169709120049fcd533deebb12056dec2c65cfc2c80118440412cd19b34e6977401bebdfb3bc383ee68875a0125998153d903d4df5239a16a2b587bf75cf5dc6a35fd01cb804059f684290f752c2dcd23b8328098393223aa24e9b7380d24a9a3f0a879539e2b03dd3d843b5fb89b84ace681ed8232c96b116ddbbf10a212c55058fc535d95a71d9a6288cb1fa36eb08f82f2e67aecdcd43b84d2edf2b0c21cc347476c07585f54b355f0ccc369084f0a8cfe9f7c4d8132dd4f074150834cb5ac8e10d8cba4834eac89e59faf5150d41127f7f3da37dc4bb7500ab0fd38170e28eec8e04bd362e0872118571e25d15dc50fc819caae8c07d924e2d97697d31bd88d982e36405966b556f28afbf35a634e34746270b49f9b42e2e2bf0239d794da4e2acaa9b3f5b6df923588cc693ad176d697faab650df59814318c22ea355d085c7d80d2996d0c7ac8c697e6a8fc0e0a6115a58992180f92b294795ba9463e91bb8aec050f95649800290b6715f45ee7bdd5219093ef7c70d1c2d1f3172e54478d690aca5fbe38379235ee0422e2875dff6b3508ac1e2861227a6656d79377d0b2e04d78adfeacb6db92a5055de27975495ec76d18cdc74629c1eb68c0f7d73e1a9f1d65366c32323d1107a058ec54674ebac2208387d49284a8c28df0dce5d9d02a2e68bdb54beac72bbe7d734b38181af23d9baf923def6fd221ae8c7bd90cc023535fd2826281b83818ca820ed207f59efaac027f69b89a23fc9e59ed8bfbac35cce63366c627aacdcf1d585a651cbff32702a1d7baed804d469de068884071536b4c8a226a447552f90892b5f5c0b0d02bedaf6981508d10b863ed2671de523d0d43f626c5099f22f99488b243b17596306ec5e176a994dec97035550567bacec5cad2e476ceaf61c875632883f96e84d54c141f784d4ea3bd92648b8d872d8ff0df4f30642bb1263c5799b2aa2b94edb9161c22dcb23218a78d4b9403408c90e2f826344a0bf4119c035ffb9620e225ca096f4bbf69913f8a020ae9097463d3ee490197ac9235eb36b37062860f9f1c6696c4585475bafefd2a361ed608651f8cb1a518b80ddedfb9fcf38e80067077986bac05c65a22c0c91c27c6665bddf2626e0f2262e939797a6c5f0ce16b44b87c5381a29d4d8299bdfc53a80eb8899d7fe566a02e28bd04c326a058d50812dd9be4502b2c38705ac63d5186899a1aa4a7da75f59b5666e99b979cf05c393b3b34bb231b9316cc543351bb03d7ef8fa967be9bdf2ec72459a59ccaede60347def1f368649abf50e31cdec0e201e3f585783e4d92154a260506dbbd13655ba6efefb2b04388306ba2a83450cd54386f9a3ebad69e1998aef9e9288622d6bfe5359349c84b56293072cd82d0cf13349d4bd026bf7310b48dc4eace20dec3526d75929ef345d47b02d3c100e255a283fe99114ab7fd548ea5cf29944b5235b2db49e66165f7339daff8435001a37b3a74a5a32c75157b3941f422ebc7ad5571613388811cc2fb73b0c73fff362f7af6694b3c6ab493452f6a6fc41ca75403d1e9ad0c868f9ff5df4d336ad5c022e516532641349574a5d901d1c1c579209a730433e34c7f30c6b20b49430ad0576aa54dd3c8f6d2f19aebe7313ca1e2980df0400ddb036b0bf56b0929d116cb784fb1dff610363086f5b3dc93516013fc0e4fe3ee008e88e2806620045f97d635e8097c15f3dcddfb3fb7a4373380b3dd01d426cce51e97d0aee0481bea5d44a3957cd7a056004f2435ffe35477287ec72788d519087cca9b27ab7fc1b2a0a2f75ea56ee1c93ede0390a4a3d2250ce97856b71e4c636e21ab03784065fbc70d342ae25ae38676cda860acf5f6772e6900e88159f365c4c4eb9fd04820c1ebe2c40b7068b6c784b32026958b29f7717112f93be5fa7ed5791e53c1820bc4228110e8c72d4e102115c2460a993eab2eec994e0c6b986f858cef0399130a2d0c2e960d3dc855ebf4a57e4e673fc351a86e4f95e24a021a57b74e3d6836fb55dceaf40e8509a593fdf7e84e828d51769cb294ae7895e3a86e982a1a6ac5f46804a9290dffdcd9081f7c7e71e6b9a4580544e1d07964c0e29ba110c2748a0dbc861ec8531748ea0399ae9689d96bf57e853effc0d798c3e037e160ca816bfc251b2394da3300d54083ed58b57269ef6c7ae6224c26dc0bf0c5c56902d8ef8eb066ef2eb603bd219ee97f5586c872922595fe77d2dcb9510b84131a3400044057444e51898053a1bd84a854f09c42e7701174dfb5612ff1967385b55cf9e0682781d12452fe075b04cd1413dced7c52b60e597bb53c9071d149f7f198b3fac95970a106a5933f8cbd6416f6afde1aaf09fdf37d2e1de30d7332b3283d7e7d5ef2010c611c463e78738699355a98792f0a66fe3f3033aa73b9428fd4b9c9d2207acb8c4f4f5ae04bf768b00e7cf65b4f1b29b9cc53f8839747db9cfdb48fa9526d38d57f10f4589e05f832076ba5e941c03bafa431e94a33d05281cc9626444723a1933ec87a3582a984499e1c01a79745d7adcf61cea84a45eedee0cac958300f361cfc83ffb939b92e63b7020f1babacf2e1399c4436c46fd1059e59aad7b458ba4f89f6b9213fd38db6cb81ee9b2ce5bcca898ddb9a5e2f20027fcc3bdfc073af86223bf641c9afbb3f85cf9bc5d7416df2e92c9f39481b8a62b35e0253bda1186836ff162b58621d934836ad1ee9deba36857e1a83f41ef010a109ab5c9851fb316e8d15fb795600b946e9bb4fe5cb0446e9dbac277f2292e883a446fb4b393a11b019c1ae1ac9fb4789f61b18b15ed27d8873364c4ee8553286261344da980d2295b7a8bbf4db7b89238e2631c333324ac37d5b2f1d831a96a7f141ae3bbba84bb32d337b31a6f98566492cb12e84cac3810651e80725a7a5484b46fbc074255f6110ec6e349a0222556761f6291d1913a175e80b76c8be6c55918ba6ba9f67b466c6e0ce98644fc645f6da538a6230cdfc1975778c46a1488adc089821e5f9bac427225663e33fbde91032607355976876375ca4a98f56d1d9ef977619b18e45aba296b9ad9d431eea856071a3874933aabb39baa53ecb6507c4a6d87e5ae4b05ad33d983b15ad95a2d38db1f5036c2c0c1a786fe15ea6dd02bcf69caf65b9385355f72f73823e710334f47db116665fee051937ad19b836b36b843f5e44e4c4350c0eb6618627f20da3c1066be231c18618147e32ec139ed04765fe14efd99f9d519a11fb61c83a1a5d4a2a105176201eb10a1dea7826837c42df0df059a973778b694ecef96ff10e4918f0428ecd81e109f0099230ba0671b25d8caa1dffad38115790d167e64c1849bbb2c6c5556230af1acfcd5d3ede0ca90d3d0ccf33ac5d65b2d59f137962c189cc7ebe511f50c938f536273cd40b816ec22f639bf02ed9f1bf419b2250875966463998f86bf8546f2e096fe50b744da19bbcf1a5ae371c4ce889f2650a740e53bbaf1fa9296804927b93c70f1d182a8ecd4f9665287ae87b5945ffa5e62e52ad7812feaa9c29046a856203c429b1e4eb51ed53fb03d82e311209426d194593b68c3adf0bc535ad59ec3991fa33b00d6d4fd7c151e68ef40aeccb78fd9fd122c39124bde40e94b2028e16eb2ed3e44ab17670741bc5541316ed264f847cf221103607b2f1678d6d0227f747e4e8668f8ba34500cecc66337571cedb40c1324ab4951fe15b71ce7356bd3911022741e2446ec3037ab0630e97288e1561e2f71705c8fda167cccb044f4eab61afe1c6acf700d657bccc7017543837f4516343e9e71a5e862bebdadda9a2edb13ac572c3894bd3d75ee565829f9baa76aa7891aaf1a40b7163a97e07bd302209f98f95b5628a2f45113c1dfb781b4769be61dc0582c8d09e4e446dce2bfce992404923bcda111c42e64c21a20f856fe8200f93782f6aff18183dcc1a0dc1cf16b7180ce1504e8b72cb68d90f0d4ee3b6b9bb99f0cf92b7f9ecda7e0e94c6845ba7f08e5c328f91ae7614076b8bd6d9da48ef16f9a29d5c34a0b4f2a82d2d92e8907dcc0ffc97a19456e2e2413e794a53a0100bcd11cca2087c32236746fb3716f0a9c62b33796416720064833a0cb62fe92d62ca463fd5ec128234b37e9e518a6a3c9fa3b96d0d88fd3015be877ae4168871932f558c52c932a610cc03b6683c95d49605d2ebf2d75d4289d0e88955133c34b505ef7294bf293a0c171f8cd5f5930c0051bfb62284557d06f04e4364f368d189b1bf6aeb04f00ea599791389e3332daf6a701a358d2422f9ea68468068b0476085094f98464bc305f0ae6f44f3d2adf0f4b4a8912ed59932b10ccc8cff76c7d11049a6fd1ccc0e28f76f5b861fae068041dc0fc8f16a14e7f02e63b5cfe61c622ad2a7092de1fb57295056ddd9e5c0991d0629c9894bdd30c1ab1a0e12b2e661d25ed5d981498cb37eb2768394f39a492c4ba41434ae1f660e9e20005dab853310707622b0c019ffd0a4e28201b8769117f95cb0acb209514d7ff9bdc2477fcfd1b8ee140b908982c6936b0bc49835d177b24e6f80aa40946cc69b85cb61c1fab107776a2825b8d3a2b47a91ecf32d51e2f2c247cbc852b681af9cebe6e3ddbacf4ae40fd80794a810f8361399b81a1d8be9b5a615196930ebbfaf09d16b91dac2baa8ad96564fb305cc434d966545a4bc6e8782253cddccfde64bec9b503320539905d555b30e09bed0576dec47bd8a54e0a9d63acd2556adbe217eb1d7efd03a615decac709bbc4bd5e4bccb6b3ed5e8a42d9d08844c3c647f95bdd75dc7370e7c4806dc4864588a7b446b456dfac8d92511b1082553e8f2c3457030aea4424429e5686ad1606f6e119884ddd684ccd05fa913602224155d2bd2642e51caf24bfe2c2254bab7bf56c324f835adf74ba4c7715e1b3e88a949db7b28e335961a76402fcddad420538d538415f50eed8251ab0a7f0a884b535605452be2cca302c6042a24950f7433f69553d2a860757aae2eb178865dbde4ddb1dd11e757cb2c39c81ac1d76b2c94c7004768786a8c5c94ec273e4d51ffd226c659a967c2a05da5d01214079feb612673062507ee4ca0a6577ad24c98252850d9c024ec17264601305ceae759132f9c7eaca1c172806379adcee3e8a3e3313126eded019564711c9e7c84f27f853d506964992f96a3e5a817831a8dae5e15f6d52b7747ab574376f2bb2e0acd8fe01fe2e1c2ffe7c08c1d677552a1fd96b2cdb111f3d0dce3465938d25079de769c39c642c0ee805eaea7306fe96423d02fa9566e3fd4090a6e5a4a054a1bf400bf7543cc5c001f5a7e6017c64d90d112afe7b26e5ef7625cbbfa5b8269da9f6ab20044cf771709e11d5c2603329380de4d5b5009af874573cb3dec4d00bb34264881e1404240190b17c84ad5d67c6e4081426270beadfc6a80ac8e0e25d49c5c7b11c14d4f8d8aeb1c4e9ec29a1d8f68591c716af9cb803bb5bffed4615bb1b306ad3fa31db16f7da7da8444a70409203c92168270fd23c018f1a40877ac1b44744c8370a116406a02571919b8faed40100d628c19c55661d5f4869c7a24ca0d87e2a7ac55cc52c4fc7c40ec9b1ba40137b9d71589479dac73dbac12a04d29fb1e1960a37937c2871502491079ee4ee98a375b6ec9740ff6f3ee9257060ccaf5ede7bb1fbadc6a34634caf92331bc895ea24b069074aeb8b94642fb9979db6ada8f76198668d43ea5828008cc59fa8f30eb37bba08b922556ab9c2c024359c2dc6ec19678b643a5a8c4ff4700562a18b15a1553b63a40c7014ebf125341100a453ea14685cfd218df9d4791de3fb8ece79fd78a362c529104088e8a5951ae1fba028ef7295696f20aca994c5514b90f3f94c9414dc42a36d1bfd028394d2545d80fcb540d99a1fef7fa349eb516fcb2d96dc25f21e1c16bc424beb1245d33d0229db7ee814939a6a4065ded5fa483e913ecfec27c14474b88813d1cf5b06a486a49dff2f41052f1f5903b2eb406c6615985cd659d2b3b3abfbe0442f7dd3c33c0b903f3cfe6839d9a9076886ce568cf089696d301baf18c17a65509e72758047fc4eeb7cc1e4db1f10538e362b4f5a25ad9ee2e25780a438ffebcc33d54186190a0d039135013f30c9a8e6a943f4842d7f0fe101103a68fb8906f6f9ee26504849ef3a60ab7bdc7efd3f9dbf63fa0a8043dc03603165bbf3a227136a48c8f4f7a978a6c05b5e6a890ac0564d43055e22d5eb132a00986a76f83e9928578f072f6bb3aba3a7905f2eb9cd5bfc725ec114e69e475d5127d22f73b619a3880906de89cb87451dd7272025e4250582bc079b97ef02989e06d973b6ac7b8eff4f3d8f765ea5e317260e6d5b12946ee326e1dbf6b2a2d0de9a4dde0f390a35f198302d5d963a7127b83d532233ee021aded82ae303fefd871b146ad45eb63945a80805b555154e7c4088eb545ba5aca314514eb9f3cf384fa85acc8cf27dd7bf87f337e6ec2d70d3a5d976586828e40de7f614db195d4a29dbd536f38d548121715f4c1d6b75e49b45b912d96606240b0922ca63e80ddb1d599718c46fd7e6df5d9a3c7382e722bc3b046a316b6d14a314818eb2288f32dc50e1a1179791afb50f2437d6d9a4bf932e2911d6f3ddb0a7e024b000968c44c8738f8eaf37ad7f9bff93886ff317b6828e2c1c81288f8f4ec0b986c34c8b63071403c7f72a2f56aebfb27a0c4492d6107e91185c3037812e72fa776b2d296fe619b06488e3eb880d2f574a7799c1aa7186a1398ce4c518f0c2a000b37eb3122e4c6d220d61adf2badbee3669359daefc311313a9c8925339db6b62335b80fcc53c01871159099e11578562548b38e1e4cf75cbf874f64af01e9f5e60c0b4fe5602701b289a5ef8a518fb71167c28de281fce9ebe7d200b8bca7a0dbcea9138380e550a7fd40132c329351c733c3c6f21066ed43d19dc3fc2ab8ee6e986cfdc2d5c6bb234d81cde22f1ca6f674c32cab2b72a232aa05ece2419f4c6009f04c533b6d74f7a3bf60e2d4ae802b935edabeca00b5c453c0054815470ea1f69a5b7b224aa40d27ef88dc575856d175f96e5306e6fb5ccf3eb953ac1fbbe994ff4ecce3ce7448fc29980749691f8006eadbf80c115e4f3524011f3e88deb867d1b33381980f8af90f551e21b8758addd274dbb4ce4c0724dde52fbb86460f927501b3ab11db79f5e7362ebb0d896ff9a1ca423c6ede30a61408cf93021c289363220c090716780f704b03778443cb2f69d55acdf17ef998b6f849693713cd2d66f51592e230bf246d06565745c46cc58802dd3583d3128487c25b3fdbd221a25d01438fa89648955106366bec4c254e7402cd9ccb19a19b1a70a3b5813c795c1abfd5efab3f759af6d2ea2cdc3255b0019376f99c1903a0d6c94ce6f652a31c061cbe638fcca6b1aaba07d1ebef760970fbadfb6504a30b62689fc5802747e3b7c677b455eb50901599c5592d584268358cb31e019f8e28ff6f247b1fdb4a18d5112f76401b3158022cab1494cb79fc3bc89147191dec29955785a68ada6026821507328e4e38ae85a1355141cd79e118d1713fd9686ac1e67ba3173176b4c70878bdd4d62883f48e0d4c7442dca3a3f4c5f453b8f8615df3b99ebe285892a4909242f25da0b1a968ea134df08ce5255b70db6ea1aea001140ea6e28a59d53a5a6122f539744d361456417dbd74b6686dd93f1546bca8e16f691d34506b802115bc3b22c4d71b4bdaae629aad25561e7746c3cd11d8938d9ccc29accccda95120338026598919ec4487eb6d5ee3521fa419478dea4ff62025f2389faed52c0b7bb46cc09a4e6cf480b6ac1fa7a10c46b744aab6508ba7cc8c1a60701125060252e8b5ee602b6b8e156d506321442ec2ae029b57f881a6388561a9ebc064f1fcb6b0acabab4e6df5572c7243bed6727c093d36442fd69c07fb9fc8348975e8eed7a48c29e56333ec05a7f86e067df175922ec4bb365971ef362233f981721fdcb1880f3dad821671bd5aba306d8d33378a77eede2fbf6015a01172430e16e3633acc9cf0decde5e430454d6161a24235f1cf42f0857aba0aba4f363a9af85c3dcdeb067d88716562b03ec4d77bb16872307fbfa12f37585492262a0188751dc6b8930373184a03f6a5e39602f8538c7bc0464f6928a47bd69608475ed8a802c62edc70ea50f6bda90543903c5f5ca389a5fe91451a010dd45e7d11c873f86c4b94fbe5af2414c95eff960c09d1ba3ce4c1edf1ada8ccd8d500ad91c617758d3f85474b3bdeb9ac2a780d0ccacf7099e84b26618760a7f122ddf5883b0e106c9a05f136833d9fc12e6dc3201d206107b09c254fa7a4f7b8d55a48b288ff8150034a3f63e2095f9465b939d803ec66a44f938d4b56abda57f5bab7f07fd653f56c1bf0cda4cdc2cf6bdaf12e508fc33d920c317ea860857a3a08f364f94fce0e007bac44942383d97ef219c92596013e7ea857f35674db1e6b124f5f1d5cd2a399217a4b37d3e93d4e56b318e10bd14a0d9435797d25331b180be34e5003ca666d1c892d119dc8b00c2394b8470ff79b04f1c36ce2db3b975fdc880c7d9095d810e9880260e58225e443ecdef7e11d93ff1f265de55717c82920cca981ab0e55fa2434b46031d7df7f2b5db934a7ee3d847074bdd6f59b111ccb8970e0de8ddd82859a29df511d12107feee38763bcc25931f669d91e16d02eb4a7e61f4222a85a21b8cbf3764be7a55e6dff78da96fe692489a3180191c5f27f54ece1f5c3f998fef1c5ef9cdf499755ad7d972f11518b421498a892d3d0f02a4fd645764f32caa501898dd26f09c90dff2217cbca54572b41e9f422dde1ef6a2eccacdaefb7decc4e2bd3f4697de3ccde2488299b250be9662c6d7c0baf8eecdc01453ef1ce916f5218b7abbfa400ad1e38b1b34ba54d8659f100d62ea368fc5f92cf5b4128c432b50504d406d760105ff483d7e1f7a06d01430e5b552a98f464e60d4d133edfbf5a981c52bf565163ff81b10207c3ee85cc6d3afcfcfb71878cc1c4c203843744a146cd937f882ff79d6fd9ddc8464a5605b03590fa51deab21749d9decce17cc20600d85b9d02a0e5b0004389b96905b3f2597a1bba506a91936d57b474168a8080fccfd24f145fec3f1ff221ebcda7d5fe38eaea33794f95b265cf7d26d365dd95a7b2dd272c1ea7ab3149a6a0f068f771f5ad845339fdd78ace24f6da42a60afa12865883a7918f93b5b695beef9900b83d03f2a0460f50ef397b3294706190770f8cd840c61d8a89742d58d1cd1879c96821cadc6a065e7ee5cc45e32c9de62181e4737bc99dabceed8e052994c66d9b08f974e6193e9d08d8babcfa040c74a4d58a817f86ea11f3f9288fa91be3c8cfd847b42f74d2e5cb2908b072682404812cd622ec6dc8c1dc5befdd404ede25d1eff0df141870e471401b56f06964da8bcb5c25ff00a8290fd64c9f3aa4250d6dc430b47770c673f6ddfc1b4ec52847b088870222947568bbe9fdf49c99214c1847a0840897df9853593da95a6e859195e743c251b83873d5fb860a7c5a9830b54010513b8a47c83d18755fa02d13883ab14b60b5c5576c2d9dc751b3bd3f4670fd2123983c624e2b97cb850c4b56c85c68379edc2776efdb682a3e50574765b45d5165e8a7090289afb772d48771a1d35a60df739ed4e4871b99ffe95e22bc3fb271ef831a8d183fed3f9398d8ab926798c48876308d878ff704f4b2daf08392bfd99a3938723cfe78f05e8ee3ed694992c539bd24f826766eaf15ae1f72f3545e7eea45767a64a506bde436f536337754389336d91f8003fceec451870824211631577fdfab7239f5221f4f959e95ca8db3bea0031bcfb2b9b69bb0acf89adb5ae3e85efa84f5caa7e84a5af22f49850582b621e8954042524623f61af2c20662dadae729398fe710487fc586d2a2ca1e3151b1a233df3841a90f69b133f7c1529957774fdf505ca804f202582613b1cb3341dfda9c3ea3eec5b067cf1329f4834592a217a779eb28a4a9c773c71716ecd8917a76fa0d760bd4a838fa62dd0b2876a2757f447622848c18871bd94d6b0eb7d0c4fef3b7a452f8b1b46516248be8ed619e67c87f1166ffd8ca8f40c179808b2a86fd628877b4a8e4f41cd05d9e0b0d35c4659b21cc7560dc12511c507ab4589900b07d7b5e3f6e27d428773bd44a21d400b1170391b552900dc4ef76ca0b21a470eca1188438cffb6794b638675b3021099dda521538030a4a4647315f82c1c901ef6ea60a897d6ecdd144fefe0c959a8e41f578305eaf2aae00211dfc4ea1e8700484c71f6a25cce80ab3a841a9ff4c5dfc334e1cce5cf35709107252a4990c2367b654fb89612989684c5902066819f49585a9148b052116c43e9ad76e268a98c8de63ee9a714d8f3a256a4d426e620abc4e03f86f934f7d82e59a1947754685bf18be0d43ccdfc6a5f5d28d82c6f65be024a66107d6054ff1bde0246a1562ba3c94eb9987c86c894c0c02a45361216f810e1a3b7c98cb163ed352c44c439b7950f53759bd33e492e609895ae025d214d141b3a2230a78623ec1b023ad7b77bc62bb86fb9dbbe02448710dd0f746515cb6be570be8f2996f64db26d6992da5796fe8894ace0b3410b8bfe80479269f7240bb9b788d6441c08628b7c7887ba9def329eb24a090784b89cf4b0b706e126a699bbea6fca52d0522e0f7814c886882783636fc8085372407700e3658d64c0412b7697688c2a0e73c8991847d9aa08c8e68644e4880137e8027dd3b8a1e1eff41cc77c1f3a813aba7f0277b639c6f5fd278b1f58c1615792db173c17c1428e6f132d8c34c59efa520235ca3f9788254ba977a0d19582a9d6535a4a8356d711e1c3ea004f68ca72adfee186d70daa8e6ca144753b52acce2f1f270010e99539f1523fea8793c7e83c4aeb1c187ed5cacaa0ef3139d975fce5c94b85dcd16e5ac641ff0d8ff28475db2c3253b47053eaf0c1d4d03cd96ec4496301dccbf99ec338da2fc81b17f40571c304df64510ea8de0644f04291420acba3250ce93a35ffc2c21c519c3c0ee0d4b01ae80d2d5ad3e39e509710775b26c2b41e5c248381fbb05a1573a0b2be999a52a5d5ad2e6f33f0e387fdd894172ce846deec97bf6ba2ed6eb8244f6229f7b96004effdb412fad5b91d6fd87fda4cb82444fe260d58f98d3357495ed8cdd090c7ccaf04f63dc73d38e38323efc5474d2213b7a0a44497da5800946d58d6da3e2803ba048aa73e93760c262c33a8b23a4224a9ec11288efb1b01e07dc32d7a0d73365e90141b86eaeaecb9be083eb45e648e003026c5ad3d54bae96b01851aaf565a370b6a0b69e5aaf7424d7d6206d36abbb22ee40430ae08a1c9e33e0ca599709b6a3b7cc1aa4898c3bca704f012c01046a3dc3a7582018564d07f173b09be9d6c02f57728dc798bc69fb187b6732d3649d861e3542dfc7bb257b4f67d770ff80015c20969817efd16fe5a43159eb9bb12cf5126f7252b3c16bcf5ec447f58a4f1d4d76db7bef2de59632252903360a650ad909a76b326191cadceefefea04eba747447a61acb8ca1dfe1bc728677be8b9a37a190e95759339fcc183a9f4e9bfbbf9b79badf7f45995b0b95f829e5f264d68432863e9530f4c7ce557c1f61601f676aa67cd2d4a4dfb9673afdc53777378b0947d67ec41a4ba6ad7df77744c9b7a43d89ac1744793aad9abd1bd779df08a44199e68e54c34649e5060ed34a0e1d2c2d3b7874a14769a84f991e27af430de04d4d562dd368b3746f5559e34333a63a6cc6780b366bbc1fd89d1e2b47852361ea733a43c818efc75341aeeffd589885d9278dea0183f703083d1fafc74bf54b4de120d65d02a34020001e046178b083c16030d0e5c16e36035f78b06bb55a20283ed80d0d81e183dd0a0441f01fec8080401e0f72b3d96c06ee78b0dbd9015b1ee46030180c6479902b2a02753cc8b55aad1698e3416e08e486c0950739d920089a1ee48080401c0f6eb3d96c06de7890dbd901551edc6030180c2c3db8151581361edc5aad560bacf1e0363463ea10487a705b812b109c0f821b1078613018ac08bc45207ef079e899edc1df41d274ad560b7c245d87c02f226beed00a5c812f7b05de15f83de80f0281337006ce40f0b90b048276068277070461f8868000f0523018b0804117d80c0683bd3012bbd650d7ea5a5d6b28d7fff0fb6ed50175ab6ed501e5fa3c78783b66ddce6c36eb7672fd1d2d1d0bac08068315e5fa2d3ab81c5c6b886bb1ac6c266ec501712b6ec5ad38a05c5f078e7b639b713be036e3b6d98cdbc9f573a8d812ac6883711b0c5694ebafd8d06a6cadadb5b5b6d63694eb9b4858c0358fb6c9b6da80b6d5b6da561b50067f9a40101447192404560483c18a727d1c76bfe1e8ba4e1c7ffc680db55aada1cedf0dd35d5da0bbbaabbbba40b9beab509bbd656133a67e90c7f27c3c9587e30539cacbb1309e57de715927e4fa3eb4c0e39dddd9944609e0a94fa32c8c2ea14001f89132c9a3d38f9e2e216b6c91cbe8298fa479e1474f538db22c1655b1a80e8baea6f4cc9b216baccb75461e894f1a655550a214c17a26e442d6581f9f260c491a1ead4669b15850cc3562f9d17b14b2c6e2b80ff2e8fd47d2ecf8d1fb4ea33497cb795ceeb3248f5a7ef4ce0259a34181e22ec8a3f71c49a343d6288dc59ab13cc57255949e315941d668424261c4244d8e268dd254434f462b57c81acdc7070b21498383d5a81a8bfdc45aa36f9f9e29fde8bb0959a3e1cc983afa1e7de334aaba5c9de3ea9d910a1ab2a6428192c614496383a85195c58ab164acd9939ea9d185aca942424f80491a12934655954aa8c908fcd1cf1fc89aea3363aa4f10f2e82790a4c13f8ac5664f8c35e26090473f8f903515c787465197bfd4774d8122258f1e04b28642993a92a6fbd1f3d033f347bf83a4f118261a3d92465196bfd417d2228fbe88aca14233a6be14c24154a3efd128aa3ad233de8f9e88a4b93ffa53cfd81f8d01c8a3c7389e619035d4c745d2d01ffd6d94c7fca5fe68843363ea8f7ef438be21a3a06c61b62800a2850140b43018440b73118b72fd177c8881c1b72c9765bd6559962bd7b7218e42abb23e56f5566555d627d7afc1e36389599c184b2c6671727dd20eafc505c5c5e27241c9f5b18ecea4b1843496496369acfa600e6e4553693e9acaa4a93495e693eb8f706ca59886132bc5be58fdefc655714119b94aaecf0525d7f76cd81a95558546228bc512caf53b920656954f15ab8ac395a3b18a23d2188dd1188ee74e0c4cf3689b50171497cb0525d79f9b38fec8f5074b88c562d5f71bfa7bd7fda4f2a12a9f5cff86f46dca5696007801f88abc70a1961b07b13469e512e613b18f28d8f327a9542a05a44fa3b014545fc60b7231c89f389143b1b3bb63677666677767c54ea19e71354a00b864f2c249d4a7fa3dc209a55fea77eed9f798a3eecc29ceace9a6cc986ac238966b3725d7c7c9f56948df862c1ececc519eaa5fa6cc1a2f081953bff6e43abb33efce721542c2d41fbb2ee4fa9c978a82e97b41f74ae9fdfce49aaf6dd23323b643f6e5212e35eae56bfd77e9acc785357b6b68d678413366e5282fe52ff5316ef95076cf57eef96a95eb8f5ebe7379d2be432b4fda634775f245fbfa5ed0ac2db96ada8f9d472f28d7e73e1b3e772873bfe67938d7495f7e53a433e0fe996b0f20fcd1327dc2383f018f4ebcfcfdeef67479ebc89f9b437daa2f8070c2faa57e0f592934f5cbbbc8649ae73765b2977254c974fa9acad545fff6885cba87223ad9012c877e5a597b1d46b4af341cef6f0bd07e1b671af9a6f1ddd4bf2198ade860a6620f609e528c6459238013ecdf239d2eeaea93f6429a004bc0a37d656d356be66bbfcd60b4af790409e31ab720fba2740b72d4d6b305699f235301cf9ecfe5dd208f5d0a88f2e79a50c0e3e7cada6f3dbe6d3d77ebd97af24846451794a7dcdee427ffcd337500e8497b11c0f63da976addb2cbd1d5d89b9755549b86403c70d1cd6237aa5ea743baa8aa56978807f533d5bdc415bf39b8707d694a37acb3bbe1ab4bc8957c2c8882f48397b64f91d0cde9434036800541d7f99bf5ab1f26cc1f07279410022f7f77ffbfa0db9dbc6fdb6f1d0b6991d5f6fdba1bda6f5f09ce6b37c7a7a011e2f4c0b0fd1070b8f1762643c3c3f47570093180003fcb81183abcc94502dd6134b24677a6249eb67c913ad1f5f5259354212ee8090b403601af0e768e6a3f17e8b570d118405bd7a068c6d2167c03040582c8c9718effccd3c22a534efb351d2445ce3d146d55455e51eb15649f09c90c0234d8287d5c39304ab876715e41beb113b2b55e89db79d23f2ec59d111a7ed646e3ecd1d02bc3bbd4e066f06211eed93477b86f6a9b3f12e8bd4fe7e27f30db9281c5e4f8027254db55f32bde7fde8e58e0bca1a1794c79a7afb3e6278d49efbb1a6aebfcc37c45e2ec44028ede873a1d7791488e7d1d06179ef6f9ba6699ae6afd5ab699aa6bda689e3f696da986f48a5dd677b80aeeb86f82b571c28eee3973f15284b39d6a0dc35617effcb4688fdc5891a8f432178a8f15d8db0b2c2569ecf8560585355f5023cd6968f2c3f2d84d1d1c21ef9ceb7e194ed779aa78502c81ed67a92011e2b509e9676aee228811c4a1b2d7cc9a4f0d6d03536cc2044bc1fbd6dfbc9daa74835c030c01806b5f707618eaa214a9278fbc158cf804161c819f024c120d00a0cd297f986387d04500f6fee640c00607079c1074c8f0188e1f3d8d1c22280975300aa92af9168d136b8e8030c1f60f8002377a09412664e70488ee17e1be86ce9f3d5cdc9836d98b023271374f28cc0f6e33a79fe9cb36e2a7f991f8bc96479ce394516a5de5377eaaaead419758de53d55dc52fe02b3051e7d8795fd7da767da79b61f2f42275d464f969dd2299330b4f31f57c1dc8b207294bf9ac834894c8fc83496a92cd3173b716bbd1cb579ea67b2cd6379d4883422c7af1165ff6ea84fb03ef9bf248cb7b2df7caea236b469446ee3c16c81476d28fb8f5baca936a4f9f464750a52d3acd5ac464b5d4740b328c7a0b4565a297d2728a52f3cc162a294564a29a5b9d64a2ba54a9ede80a788973195e0b1a38545478e15138e1b160b1b3548181c65f99f279fdb68183a78a4d96add2ee8640f00a8bb33f0e875b36708e827bf93a10d326f01edb5cd5880ff57eb7711ff4fd4514523d56b098988af44b54cbed0efefcf91ad807598e3fc29b64f27477fe2531c266182c023f5d1a1df871d07aa333a4cbac3437b24cdf77404fe68f45e38822391aa66e6be9b6dfb29b3aa4f74be90ee90ead01cff01ea17d5cf193cf251f829cc9ff48bf4b0737f363855e5f4cc266eed9e69741869aeb6efe9047edff155cf542cb6ac653ab0e88e539f964df166ceb383af57f41579c9ced3273a9ff489cee953fa44611286eae0efc3ccfdb4c5c4872069bcf07bcffb1a8e9fe889d4a74f1457569fe8bb48978c814767f964faf4a9cf48bb88d53372d634d5338e6a1dc817fa3eb842c06d85a9b5c8f451b26778329d53bce6e9991e097e43a637c9b4e44be8744da11994847cf9b96275d6575de43b6f92346781477f98a4b94fdfbb9034db53fffed189e6fd6efa67ff6f46fa7dd4e1a291535ed1a653d2ea3c3dc3893dfae42887f50bfd7b3136997efcbb7d7fdd46875d879daa58ea13b5b84fd444f34cfd302da07f7efbd73f42439fe69b98a0a59ef1a7d4ebef4127a5cb2ccd2642fb0e002ec023ce8f2969be7d53901589224280ac693fbec82019cb1fd8a14f9afc1ad297a10df5299dd53fb003119309e3232f29d794524aa9e72a8e40d06f0827eb3784137fd0e99ad4b8a79913257df92262e551c6b2f6f635bc83c9519a7b51d65ee3b80164c9451044f9fefcb64df4b49f01d39f79bc59a35226044a29a594babb53a71b2501f1cf071698524a29a5148949a518feddd04a3dfaf252d95ffc30fcff6f697916965f597993e95554be547a12e9f1f7bde7fdb6fdbd4fe9d7b7e149e9e25ebadb15fcd50565df5a6eb159c3e9e86cb1d98136e4cbd49127c5f11db9d2f4022b7568c7b5389d562b04a50d79c2215fe8e872031ef43ba224e7e941a1a8a7675ad99f63e2dfadfc3b9e9e999d8f3743cff4a3519690a8f993e4477a834ca1a03f68c08f94496886444d18921f69109916418f5880e542a23a75e447f7223b155c8c223f7a514b1412d52c223fba14d9a9f02c86fce8af47f58b861f3d06d997f01be41f7dc98a1524aa67427eec31729be1412080e50a89f29e203f36127273d15e1ce0c786a2827217901ffb89dc51b4143198d0902897f510b959d03120c08fcd4342d1717e91a715e61819a624e7d044c2bc620e21f7cf1f48140d82e1c7f9339f984de4990490cb8f3347fc710ef1c28f120db985dc0f821bff456ed9058f1fa51354ddbcc78180dc31e486c94d02619097bb173be0a7013f4860370c58c0841d31925240aa488a45846503ab06d610d68b8657025e36af97906d350b52d343d373801e171017ca35e38ac1f5c300052080cb6462563e5630ab20568fa001040920e825e85e8c4dac988b8ef8028f1c3a6ed4168f1a443688461714c78bb1a6e291c76ed56ac2cb15e4b29287096bd4278761e7ae85d3e1018bebe1563495639c0ab8d44c1686e2e84f3eecdc1276ee5682a2007bb95a2cdb6a0bc2f6b3b1b69e961671f49ddc7925ecdca9c836176caa2d359399ae0b0c22d86b65451cbb499e9d55c2ce1de9f614a1f5c36295661789ab735537a5a2228e8d936767d24b4a8c0846842dcb6261836ccbfe9048e23899e4d9f9b329cb845d591dab9aab0c2b431623fac4511675dec2ce5dfd51822ba8b5bd7c85dd4ae5a82e89aee544143d4fac9ac8fea326c3fd63b7ea21619afaf8063490817eda2393438bdf4f5312356118f891aa2ef023d5b1c08f74ca0f1cfa894475aa023f3a140afce85126d02ddf406ee81d2d896a96047ef4a008fce82e08740749d2fdbe2351fd7ac08fcee3801fdda701bdf22d0449e7904954cf6e7eec19037ef4d402ba6938d24d24ca7b8cfcd8430af8b19f1469956f22447e6c2c8424cd0d9644b9cb861ffba7861fbb35a44bdf47686894cb12f063e7d8fcd83bb949df4884740d2289a2ab197e9c31197e9c3204fc389f2409d24c248a06d5fc3885687e9c4d0ed0dff70d33c681f44f204933fafeb992281a43f564c5f0a371f041a22a017ee26403c8fc0802599303f8fd3cec2069b8981f654c12c13c12d9a3bf88ace1c04b901fb9bf874471ad233d73bf9fc8e9c700bc7b86a1df45d2685db3c38cf97ed337a47f36a0819f0cc8cc9ab9240799cce96060c22e306116104793ff8f59335938885bac02290aa42620029935d3e70620128840b32020069935b32749906df50071bc0e1047ecdf0021b366f22011c7f62bbb11c7cb00710134cc9ab93a225e97911e05f4141147933f9159337788b85c8eba3d36b86a700d993553870671b4b304b8ccc665d965d91fc9ac993942c4b1edcb5f6658c9b04280e89f64fa0719ca6e5933e6289b4acd18ff9a209aa0030401815d9438de1971c431883fc4d13598bfcc1a20668cbff6336b4a3063fc0da053001d02e8c88863c7882d1fe288fda78738b6a6fac0acf1a1db61d6f03063fc5bfe2fe2a967882a91e8224659326b6acb5b4bc2300cc330ecf0e58d18862e2fbe8b18861f86e14b0c670e5f43b5858428509e28610a1797269c0e8bd3e174381dd60bffffff1f8661f839be9bf0ff850fff85501c67feff2533ff929f275c412daa8330a4ac17c2ce62cc27168bf9ec68696969696969f9ffff6f59f96ebea525fcfff0c571e616b1a5a565e616aaa2397408ea4355f04f71b6a09ea0a0a01e1e2c2c2c2c2c2c2c2d2d2ddfd2c2f2f2a68585e5bfe5bf451c676661616181c2239c99054aec8b3c3f35934da1a5858847d879c78a8727c7cacacacacaca0a0b0bcbb3b0ace0f86e5856565a9ee55b58c471e695959595a099573cc8857c084f869a781158589c896c2593c9563a4c2693c96432adacacfcca8ae9c677b36232b1fccab3ac8826d3cc26e7f11e4fc25bfee32c57626545ec9ce3ba76aeebbaae6be7868a8a8a8a8a8a8ac9647a9349e5e58d494565e54dbf6212c799555454546637c299556653b6e0398e5386c954747b746ecfedb93d3a384aa552a9542aa9a8a8bc8a4aa9f4dda8944aa65779934aa9f4a55269a8340473228b116da1a2f2c21176be31cb99cd663935482412894422954aa52f95482f6f4a2492ca975ea5248e3393441289f453239c9914365043d1a4859a49f3a054ea252fd5eb655f536503638c31c6241289846b7c37248c4b4ffa12491c67c618631badd345346bd546904862e71a2c1c168b357146dff77ddff7618c1fe3efe50dfe3ed2e327e1effbeffb62337f33caa442e3cc29b3688281f1846253336553363553a0e7799ee779dff7fdf779f8bbf93c0ffff7f8f3bcf73c4f080c67f6a6906b5241047b4d2bbe6f068161e7110c08180c3685dbb66ddbb6cdf3bcf7bc0dfc6ebc6dfbdefbcf13c76d9b3d7389c96402cd259309cf9b3cda4f09b41fed47fb9975f7de7befddb6edb7ed8ebe9bed5eefb7f7b67ba7dc2966ccd5d4519d213b732a1f8a28a594527aeffd7be9f7dd5c4a29a534e4a2280a94265c2961881cd5adfc65ba49da5a6badb5523ad22c6f68ad5494b5fea83ffcd5f5643780949130b33b1d9e6c54b7f26ec9859b4206c8bbbc866b354a4e2fa690c76ed5df7d37b369ae2649d42991fd7d48c1fdddca51b26b9eeff293bd63657f69a7a099088fa7cce299dc6bbe9ebd40705096ddca9faefac56be4697e0d6790a7f95ccb5109902ff5fd7545d622cfafcfc39b5d33111ea97ba92c5f50928139674085ebe5052ce3dcb84f7e2f969e27615c7642bc6cc8e8410b5c361eea80f22d440f9e35924750be9e77bfefde3902c10f7b974442c30731100af8054804ea00e527794e4e0875b9171d7d43660d1b9e8da694eb1139569fba37284a98d95cb12a691b2ab1f91b60ae87f301e5ce98e3883c670e9e3c3f874e9eaf42459e2b41798e2a3af6a7cda882a392e332d89ff355529286c4e3862f447cf1a3b25d0cde7bad05ef1ddd7052a10b4b10d9d8b0a5089b860115b270d9742bde0da712b3590eef863d8a78f2b2b1a1b4e9747836d491e49a6065d3b178d7bbb6b3716f8d16cf864a6cbaee7380b411c22ab1e9386e2561fa418e27f77349c82d8b49474e4619a3e2e8e5c54ac2b872dc95a4a9332561547986765e81ebe1baee381f0e8081c7cab1dc65b81cf090de7ea17535430c6bef7408c578c7b6a39b4484e184958d0d75706103f6b810c99736ba5692caf59514c1e98f4048aeaf44874a5f864c9ffa8edf91fb77cc4047b97f047894fb473cb2929946ee704441109dcadf907e19f630d3a03ae8302243ee1f810cca52d4514486dc2f834c2377d4a3d35ea1d3a175b4be7fa7ddf00a78fefd6e738e078f7cc51e78642969be1a70ee61caf2e71e26912767cdec203aef3ef7dda7d551a50b08b7e7421b661a99db3e9f21cbcf48b561867cc51e66c8f73bec4dae9d8e48d0f9072d5f2bded4d74423b88b39674b8d7adac4384818ed863e69efa30c3c7a79d37e94441367aa66ce0650da732003b226c98cd15ed39e084877434981382a898c497bcd469e3f4a2664ede9b649a2bb7db76db4feac2f69bc4aa1932e3d276d97f72e07e90b2c67cd9d31fea71b1c75c589f3dabaefeee530de4c233804ae3f4e1c2b8e27faf55e531e3b4f2a678f8474157fa814f7ceddddddddddddddddddddbf47d249dab9201c9851ecb3b2fd66d19163c5f438666ebcca97dec6d7203d067f740449cf548a12df9bfedd4c27b2e35b7e8748436e1147d0f2fe2fec4e7ff2782fdc9e863b34edbff0fe28fc1e0c478f43f04921fe1a35be54fa1ba1cae3c0f12ba1a925ec0105a97bb18925e4f13a4296cf11eaf89530c777e1cc628803c58e27e26dc4cf41fa02ff6c1f054379f23f364ff8632f916d947eb1efe1cd189b4c1d653ce54e1ce7d85156c4f1945b42993df1bbef8187fadd7846bcf7f75a5ab2378fb08b665376842ee4ea17fb9203f2e52569a86cfb6a095b6eeeb0652c61eb087b16f64ae8a93ed937851eba2a7495d075fa6477fab4ea93f3380eddc747a12ff11f206f05f5c9be18ba50bf34991d652e69a09ef11f7fd09b439ffabb092025cc8f3c29a5007041eda6eddd9fe11ca2de4dedaefdd3adeea0ee281d45d2d4b7dfb22873480c59339dc8182992666e2161e64bc2d8f711061e7fbcdc7fdcf4c3fdf6f345d4deab656d9fdba4e06ebee66b164d2752ce2eacb5f62baddff5bbae90e4869a2f7fb13fbf50655a5f44b36cbf21b65ff66f1545dbb6d4278ba44ff3652599fa34bb1bd645aef5bb76bfba8a5da5c9fda5a35bcee8a4cba8016994c95fec5b6b6d9074a1f90197ac3f376bbc97fd72f4dde8a354d3b41c498b7aa63fecfefe40f3f73d80f9eb80745df7b7237a98ebe27bef03b9aebafdc5ed2f6e7f71fb8bfb55a2fa0bf962ffdedb7d37a3ae7bf0470f8ec46e76b7a148943d798ee34cb9b6a364fbdb8fa3dfb0389ebedfc41eea7ee4df4d27368c7beb11e934adeb36d70bb6e47e357426c3759c8907791ea5b3fee4b323eb12caf6ddfee9ffda6bbbbbbbbbbbbbbb35d7e8133791133b6e1bea53f7dcdbaf48ffbd186bdefbdff74423a7a98594e77a91cbbca16cdfc70c8f9a4ad3d18ec8f6b59caaa95ad24823dcfbf541856649d92fa2581640962f2226b92391784a5e54e2e993f5fe7a7fbdbf61fd2fa4afd9bc692f77d1a9cba5114fbc2fbf1f66f63495cb5c2661ac96a3d33395fa46df39ae5ff3ee3b00652873dfdc77f7f7bbeffa937adf7ddb7fadecfd3d0348c6a321f833a4dfc911977335cd83f449d6b2464d59cbfce8fe2b6be4d839cb77d3621077b9819b7fdbb778573e230e8a23f8da9bbe1bffad338001be222f99fa7082bb49bfba5b4ec3d68184b1df613f2163ecd7b081fa641f0cfb27ec1dcc182824cc926649185b69ed1c9f112a4ed514674e9f386ea5a34ac95cc6b1701ce73297712bdce8b99c29eb17fb404064764cb25c05e6feb3e18aee3fd0ecdf0398fd47df7d9fbcfe8ee861a617764d1dd4d40973cffe5e7b1ddf4d8b9af6deecd68c90a819e42ff65d307829019b44a3d168341a8d46a3d168341a99be21a389e3e254713f7382a6cee9df64c29815742fc653a73b6de2dcf88cb4278ea0f87da7813e66dfa51ee60f37d3f7c21ff013bb0dddf86eb8ef963446b8ef1f7520bd0f33d7787b310647de9742d78284b16f23f431648cfd1ae124853327bc8ec5f15e50f4fab91fb7e7bc59e333d2bf893fccfc7dd7853ea880592e9b35327b91cf7aa6be7dfb74d55df568a39ae52ff67fbc56c9a26cbfe4672a9c364e0fd13892866b9cc6691cfbcd7577c4f1dd78a2278edce3af48f79c0ed876a20e9f3873260e4ecfe8e81f01a54d8ab27d97bcd8f427ea72b9ba0278d38be84e9fac94a2cb0ae0321fc3b3e0453ea33a7487aefa648938caa7748ec5c9f6afbbffe644311851b6f6ddb3ff953532fb7b7286cef4903272a676e0f4795f73d7bceedd73239d26de18686ce65e6a3ce8f130985ab0caa7a9e48b7df99a1152ae7cf03a30d9002b316a30a0b2a987656440a2a6cc41d2dc5f592191e40f34f7f700fadfefa6fb7e1d5f0d57c45e9fa85792e1e179a8693a39aa9d7eb10f0464c98927dba794524a27a595d25c05bedf52595ab65f97344a767df54c0f336fdfc42484995420fb238f95656b94aeacb14ef1ba4f1cb51fef3bf187993771bcdf7df71e176a4cb49606f4136a3a12c6fe166a474818fb5ea8bd60c6d8a7a1b6d3a7559fac8b41441ca5f1f48b7dd77d61189116cbf6351ffb3bbe1a3a93a1923436dba733da44d2787694a6a2ae1963bf5db28e1f68f6be07307b7f8304f9207d9a9b2cdb8fbd4c2e2c8364ec370d7231b56095dc236d22db1fbfdc5f258a36215fec739246e3be9bed1bfdf72399bf2373f4ed63852c6739fbd4f5efda3eb0599f91ed3ff187495dd6a452b5d50114fb67137b890b911da6ce04ea1ea18ee5fc0cf9acf3bdf79b75e3fd157f98b97bf1aba1fbed3bd1f350cb5d38a4ffe6f4c9fea7d32ff6ff4d18bf6b3fd936eb3352c55e325fcb9130b60cacfdbd7d721b74e87efbfbe3c3cc9ed84b6ec8e2584b284fb6ef84cadbef9f96e1c65b98fe4f3c752aab5e2ede0b5f0d2deae089fda44ff67d98b9131bd627db43433da3e3fe268e807a91cbfac4eaf76e09b398decaf44bbf7dd941d8657a3dcc7ef7c3c39ab9d0e4284dd52ff6edc5a6f13953b6f3fb39ed3362dfc51f66be22ee93fd7cfbfd6dd664a3260114bef7effdeb0010ed5e691f4d708af60baa04fd42bd59e4c5088f96343ea58f171e5bd6efaf7befcf70a869e76c657a3abf452fa77ef909b9364a1bc76d2c264a2a37be26ba1b1efe86e0c8c138b66d7b628a0904ddb6ca0b3a53ffe81ccbbdf5e6d09e7bfa429aeb6176751b524a6bbda1274ff56ffdeedab90380d58166221ae242ee1f6bb27c1aea6b2fff0040240d779d56eb28151bf9dde6a8928dfcca715c67a3fb86d0efa4a36ad858ad0433a6fd47909ddc3cb97b34e1aa4844a4cd3c92cd94af0b359beef3bab0da7423af0ba94d077a5de8361df63a92d785d3c6db487913418daf0829dbef6cd4b0232961b6b7f970542598352790314ea344c2f48f4d431cee7783a3409b8e4660a661d38952bef84dd2a79b5da4485ea0a34636f27bf886499fcce974a94dcd353a1bf9262fc4d2519c8dfcaee4a8cd46e2e07e2f0d4c6fc8ff701881fdbd7b6e78d2515d78c3c6da4c9932050820625878bea36ed8c8efc0919430bf750908638cb9e0444a3983e5a1e103522a954ae9744105a334706063c937f6c541a39c651eaf34a4c8dfd3ef2f0b4a4068f7170b5d8801e6a8156808ddfbf61b72bbb0b68b6ca7b020db2955c8f60ca06c5ffb865853183830182365a369d58bdc533c6106291bfa57e218b8c093dd51350b5c70c105ace49bdd1232b64571a20732067b6c52420a4288c213b12410296193a41b7773a9dc3f42c85dc30665cc6cb004278a286c64a64d3d7959d91ffb9bcc5842f6975c64ff29e46b62c1e25206918f590b72bfe9fb04e49101042b232777e329c8e4b1b40526ae97942764e06421ad5dc1851661698d01c5e54615f0f4bf22c6a08d09c253f3a1b6a0a3d74a7771a45f35777f17a9d36009da84b775010aabf244892df030818c317e803822ccb0a53182d9cf124be4e06431844f7a5d98b9a2c8a7093297145334142772a010c18503278abcb882e7a4e6076a9b01db6b7f0452328218697c22ee13be4e5243981b1a374b2738f8a1b176779f4dbff60e40b2bfe722357cb280c10e40bc271388a4165de45cf1f3844eac2705292d0544e0f02b62984256851674c0851498b0620b65b895d256ac90b0557421cad64f3827daec86c678faf122630a4b9012032d9c6183c2b1051ac8aa30a50b4300b219e54bc81172ff252aea21ba4ce83a29693429a5942de594d26a95d2a64d74f5ab13485c14f2429fe606f8ed43914403020a1d0d982f3fc97c39c524f3ad0884145f9c3f62fff911e89732e868e8a49ce9a7528a774e1b3ae9327ef69f5f0d2548a55241648f07782ce552cfc899f9fe038f4c0225b7451d46da87d93f5f8b4ee691c630c1af0375a7b3e9ec71cea6b4d6eac42766355ac5716699041dc9659f9ed3323d039a4c57fee8a7a16defbb43e74ea54832c6df0753f69fd6dbb7b6fe976eefc3cd52c2d8c612c6df8623291c79c85489a3a0db8fd06189523245162f226a4046124ee0828d3c82194ba230848429528081fc2be5cbaca5642b0a2b26f4a415d4e405238222fb4983b50488f523616acb7aab32a9ad566d492d75a7c018632c63c2fe0283bd6081312e618c710fa71272633c73e5c3cc41cd14f00084ce4ecf766d0e3ce000913e0589957a5cccf227991f40847c60870fc43e2063456853cf34c6ddb3bbbbbbbbbbbbe76c1c9c4f7d52b50abb2c81310d3d33b68ae50736b99c6480041142c4aa724a7d6a156e55ab4aa612c6fd82c2a5675abac81f9e8bbc25d39f7ac800b17e030e37f40d12462f95f709138b0bc5f4524a2fa5940e75336ff98e2f7195eb388ff738cb7f1cc8835c093deb298e33deec39ae7295abfca54595dd5b59f5498555a026f5a7679854577dd5a16b7b7a66ac5272d3eaa393694bc2dc1ba4d4e362963fc9fcb04e592c0f7bf75e25e8206182c891249ee779dee801f13ccfc39e07f33c1c72c0017603ac47e874bae1c791934c1021449024c9414a31b1b8f4bdf79e4e38f4cc68fa71e4241344081124496ec8c1c462e24c26530f991ea7d349ca2e152e1863fc18e39ed9e475f52003635cc218e32ae8c8489ace445cdb05b26d2548097101902034504a29a53f240c25e2a24976208204871c3ec0830f2548d17b8488a32875517a04c9111711974e0e3a7943a7b9ddaedd369b82d7762db5d6da27f9fedf1e82e4fa8ba94f5307fbf747fbde154bddedd30d7dea7f2dcc54c0aed9eb9e22b2eeaeb9e804f742dadee03dc49da35c88837b0e386c5274b2935eb55ab5b6fe542da1c324f74f1dab3191a467b6a2596bad633491de2e810071e9d3d4a1bea98ab74a4a828011aa26511d393d334a17e50010a8a9440e3bf07023cfc8d7183ab967464d9b7eadd22a7429a5f42461e6d5e993dc9e7e89b2c8e06c4fc4db6c2214f573d0effc1b42bb7e9f4c9246e6df421c6a0e375812048c58cd17df94502ad998eed3dbdddfa794d47d66774da7b44369d676afb46b155dae0b13b47a2ba439a76bd59b4a413acdb2fed44125bb3badfe92869a289f3af5222e7ada905b351ad6dc39ed69651d51517a969f8b94ee000717acbc158137262c908c278ff8162143620cdc59be64313049eccd1ee0dca38c2cb5f5135911b9ff62133665f99212cb1e0ec2f7b17fcf9442208380cc97970c2c1c0c30f27c79041b4481440e589046105cd0c2e5c42a0a2a308295453f992fe7dff9a62944ba9068f7852382b6f681c6b2894faca07a4f11d4bec92251848bc5e2b50516aca02d16e2f7e9095b20228f32a8280d15b84c2bc660419bc337b27c15415144461e6536247cc18331ba2005eb052d702df9c014ba88c24e4a070b424638bd9014ea419e2fe7dff92697cdd2094e1a535c8e58b2450f9808ad863001109e2042166958a1e3c415f278ca634cf1811358e0d3841ee098920417e4c0065534a9e28af9f2ce37cd287c68c2881f2734e1029c554f61bebc623bc3c70c962c410b515c2d10832eb181143f5809d10420aecba30cda19ba2eb3ee8aa63e5951c9cf176130d103a122a6b0620b2f0a75e38247548534583190c22c0a94920cee0502a85571c5a80a1fed5e22b095b26d5b1539f0aad8a2e5f75e1cf8008c1f8891451652acc819825a2184b799b185ab0b2229448002194b4c97a381c8112d8f2eaf222bac94820419b9ff9ade84234b2748300109314c44a093190d443022093e2990220768b816f21c23e552c118682c91624a010734b88288a808520c010b6ebb5b149f1537f09149b0bf8932d312218bdc0d85dc7f72998ea902755b3cb994b0274d43c8c0c91048e41e8a829422a1269491852a7825ef25e549c6593a198288bc65e96488557e5d612ba3002940c2136c908430a4a0c2868c3c97e00206668c5145103f688931d184217041074d563baca2684203293d4b1c6104ad0547c6c829821742403182ac896ca4c862064100010a5430f1910333b290f3041386f0ba02b50415568802c6853070b06de1068c2c70c044e6050c8ce8c069be69de2c8d603385b8d2031d1d22cb4772801fe0796713b866e92415cbf3e56896b0002359fa472c119746e1345110180b7e70be1e31b03033676ec89718aeb6696a65147277d1cc5307faf647fa1eb5a522641eeedaa7c93244eb93f83d7a79f60a5658e857416cc7d54c102a6ad9742885a26063849d27f408610526301b34b45002cca6ab5e873240361e02d1413016156c50609760233b86116bd28e2419674451d9a0a0e7bc4127dd096b967df0aca34d905d24cc945d64c1e6009d74195d2777cfc6ea5e79f7ddf4262069eabc17e371cab253279a369dd8711e21f7cbeedf3bef8f3b9cd4600519f66ad87ff2c23a9d489ad67e1e6109390b49a3bd13962005275c410ab9a79ddfee44b356fcae7342fa8bca18f8fbb157267f6927b0bf34c9fb09481a1fe52c8b09489ace6d051519ee7eec559ec0cce25e8ce78eec3feec89d7492bdf7c44ece565b1e5f2e218fbd925d6427b84ed75b0fa808849ce580090f6c50f07961535f898d873aa0d415e0b02ec153a45747120a451258e8d8a0e0c3810d7d25364000d1a2850d556243461201a572a8b4abd8ec7a1c2aa20100000000e315000028100e870362b17814a7a1a2db0314800d749c4c625e389509a318077290310829040c3200000004466464c6093a8da9f6ad05b91ccb04988a9131ab67c2e0b991b1977d0988a9d0e7f7d5bc433d8b339da42fc8d552e7d31281609cb0b24750079c8130ed05250b2058a388eb2cce857d4e709ace3cdca279f7eb810ee218d9a121ef0270b5d3e00f9e07a11e74a5b97e716845e431833eadd0da4a3818981611a375120ead845548cb9863d0e98e76cbd16537085a4243fa02a40c2a705469f0f92ae35c71219e0c89ca1db60c4a68f1df754be56a819d942143ac2b64709eff954c71acb142c9bab1401b31169e05914cb42b35142f8f889d6651ed7f6c47129c2363ddf9791877078c38f068f55704f8de769fa04762bc925224c6b97f93d6c30a6d9a473b31fa34b6f779aa1d1eba2939c8caa98becb88dc071db3622ed9285e8ea764e4a2aa9cb371d791be6c35d83035d14f56b1dadf2bea59906a70708074d837a8552da3490be379bb71d14b90cf9b224e4a9b45b5bacb908a811d8f869e9bd423ba33a08285d3dbf95ed2fcbd7f1d0d485b9f6eb68aa7e09f20070c3d7cfb9f16e1d98adfcafcaec0eaffc58f209d0a902df81cab0d03cc9b0fd5e9fa341fb7a3180dbc75debcc2a71c38489d25177ccd06acd7beb702099d2c863e62229ead4a964d01854c3fc73accbd1dcd23f7bc16f274be2b25ba95852e280e08a1a617100c026c6db2af3a7f674230f50b9c102a2b8464ffb7635ecd49d2c8fa315d4bed746898cec9354274555bdf35a5ffaa0be8b1c04d358c395f678c7c2bd60eb3742445d8e06c41774981f748e3fecc89d9a869dc75cf1aaeb68003fea8260b5a0a41327d9791229b831f99dbd4b5f90357cda0e36ff5126acc106b341c1d9c0cde103ff38f579121ac6dae904b73ba26c15a45e757699ed806a97226a822461fcb7f94b3c8774389d5e90120f83708c9b02cbf9d9d24d180c344f7db58cef61adae56d1a21b44d35c6f4a9e9e8983fc54027a912c17ebbec5758be0c946e6b3c7bf79331eaad4029d72d51bf04e4751af87a5b7168cecde1f78e52a0f08fc5d0ab192fcd2fc02ba182c7c8eb1156e05be1811e4fbe943fdaa1e023ff96c9fdb57633aff762a5649d9227a9471b3f1fd77972e801a0274e6963ca41ffd71958530a09ad1773587cc8b998a909c99166ab88f4ff83e9a808cd055ac0951da458bb43c71693b59548d4028d49f65f62deb0a130880377ed4afe80175e1a075a62cff804f8fe899dd758b6f3ae158fb8fc9b94be8856532477a6f453d5c8e844827d4377fd0e9a5b6d842fe33fa24a7f8e7a2e2a89f8c6f2a75c6b0de2af344d352b1bd3257434ff58bad95ff85b7b4e9c537831b3824c637993c0b0a700edf1e279c7ab0125d236bfbf79b1d2ab55e5d7d28535fc3a49eefbf63460b87aef458a6fe9d6d392ffdd2d68ee6b96013e2b047cba1c1a77f289745e926faec7cb14488b8bb90b1310ddf2c8653ffdfa055619b2701eae7c8c75edbe68863bb0d316f30c90940a5a2d910d66ae19ce3fdd8b0e633a0120b45f14dcf2f09f852d139c2de4f7c2d4d4c38c25d673474e3299b34be43dbda0b96b0203e3f89f32aeda4da858a5dd244cde9862adb59d3e3599e5320f918d0dec7e76df6d6cb055a84967f4079fcc0f3e1dc05d79247834147d254c72debe58f5f3500c83f6e10d391d79de47d158b295af0ba12b2051cf0dcb6e1c08dfa8c27ba9c1e1ab3f376f33ff60ab4a6686acc9f122f6e22a40ec7246d94a90c711d8355413ec31fec89aea07ba272c10586368ce030fe1fe79207d097b365d58de66a6801c1a5f0858e5a614256b6848cbc7356433e5566d29f73be01662b5f8dd4a47c89aa08f1a68170ce3e777588d31505bc6c11317309dac01ed41bc73a99deea7f1705ec704da387c375d72f6c39509dd1b369ab634a5009c9c3b04dbd048cc2bdc8b540d12e448d903e29ca1b42a7fba2aae46532f742f7b23271af66b961d82083fd584172d9415e002a09709b55b36e12e582776f76c3a4b05590c6e8db3af0689b20ae2b884fefe1a61b3973e27fc6490ec8d5c6fe0f8b023a726fc83cbc5bb16e03ca1ba49d71602e22a36fc4af9f5ce7cc1a5550d408e8509c20a19fc4b968e058cead90b0279d38dfc6425ea126263d3d34b61c2db0e0b0288f8a6ee038ad40b4fc8060139c6e1ae394afe794ce999b6616104650390e135df06c616a91885d57fe566c44051661e42cc2db9e1533e5b4d2a572aaa68d3849196311886852c21e212a7e65b6cfead987fe3a3e5580f048dd389f661a4dbae51274d8d70b0e433a0440ad97576d4379ea50eec0be184e9ba56fa7dd5e26f8105b52de06bd416f3d3f7c85c6bd57ece78b634538bde54969dc4ef3300ae2023a49ac8d4b79208db332d939239bcda7af783b760d86d08387551a8702bd515bf5f778c233f379a8f1a06fd15ea8b446c8b6ee74986d748da9d59252474824f5e528b2b17ba5879120d462e605294328de5c98534bebf3478194065c1973beea4b30058bcbb19a618ebf39d3309206fb59bf2784ec265d1448dbcba98a4c5865d720e7b240e836aa50c4f042f89dcdf8f1073d1341cf67fda842fdbd1fac4b83ee70843fb64bf6fef4a6678457d36eac6b96fff73ec57c1637ac76f0ec6bb2a888efb379f89c69f6849fb0c1a8725adb12dd8d3a6e7f5af6d990f78e535d9fa8b901cbfba336404d2997f457a1fcbfc1bba11221b0ba07fa23da392ebccf6e2f4b18f67d9ebbc0df42b9a387a61f256a77b881abdf7b087b388a1f426ca176019c3fc6e036c117626250c1dcaa95a2677578ffc263cf475c9271a279ae9de2eedf481a85f702d38f4faad37a4851a0064a9fde4c1a02b4086117cdf455af1099b0e4200b980e357e001cd6999a017a1234ca6aa3f4aea7741ddd144171178e6f3ae27372ecbbc8094255f23bd477965df76543a47a1bea8a4fa1f5a6c322ce017f2fb5d3b583bc37530606addb181f9517bb99951a19989a1ee4c63595a95a4431a62de1f470321f027baa07b929146d973ac1c5b63da001b20ade3b14d526d83dda276d72fb12238b79faf83ed531609a6f543f2f67d52af6a43c66873b51c419294d3be94a4843c745fb9f7d56bdf25066103762d3082aa350dcfef1a076d35b9486395d666f925b1acbfe82381d4504cd97a43304886c5b9e0dd58033481548815bafe8e98de9c9cac6ae9db311a9f1dbe53ea8a9e9eb749e7d0982b3838aa6fb74bd9a20a9c688aeeecb87898bd3557b188fe895e6f1885ee53ff8a29747ca2676ecdbfdeb26c71d55003cb7eec750c7843ce0590abf6b37bc8034e00d048b7c667954bd7ca4900d4b45282d419ca2bec8597ccd90fd268a70afae2d45cf4ee3d12f37d6a9016efbd656b6c34769cafddd668edf622580af0ced03d4637b54b76b3820742675af35961968e87e53d8be6a05111c831c1b040363fb8afe75b14f5806ac54d40759b8e62c65b8bc0ca5ba474cf350750c3641eb4d0d88c695a05a82b7897f4c0ace25e48a6082d9f15beeac220df4ca9babfbc4d35b0bb06947e03f1ef062d61c5df47a2ef67fb13b40b7da8931c6719a567f4f74a9761cbf16ee5427f911e60a8ba0b0e4feb899754bd400c68d3b31aeff1176ce34f0785274f74c4550d2914d7ce4d81c74f050e43d892f07b25713af8514ff31e5d8b2e6e7c3284470a6b1c77ae370c3c2411ee7931d7c5589018246c8566c460e1d2e59931027ddf0bcafddfe3df131bc34c095482c8b61df8a9ef03bca54499a3a4e6e12fae68373f70a6d1a1efc5956130e4cf9e0396953a74ff4f8f9b2dcb86cb4a011e329a1ce4f4da65b99386be3819d306f48889e08049dda80bee42eaae079fe523cebdf139fc95ebfb0285dfaab7e788509bdb1dea5648375b5f4be08fa8190c39fc7ada8236ae5067b36da2fa61a530f0aeed36fe159ffbdbfa62a480de32b27bfca31179be180738658eaac37351e432c8a420d85aa562c87f8e48eacc425dadf72a04de3ba538e214c5b7cb07256646b53eafebc42a1e20a76bec600bae05d19a9be31822421cfb21e9224f5f6e761e984b54768971263894f892c0d023c67c699e9fb7e39d67a98fa9ab054b743512120ac832b606df39099fe1f64450c36d96049eb118065377a5f37112fe2f02562bdb2450596c2af13886655a27892cff1b5501df2a97cbbc812a699751b9f1035701d0a688ca7d77fefad7b91cc746be61847295399d6fdce389b804e3c0b9f0670cd1062456a64cf7136cd1dc94cb71750a19b96ca5844b9bd48e0464333fb30b674efa2c07f7fef3d1b80373b93ab4f9c0539c5d98fc5662ae3bd2ac558073ccffbd744def436235ebb57ed2a502162e91eaeeda65daf419b5c04c0b8bca4ddc8e47310a74e6e665e50730c98f0c0a5ceb466e3154a847869052eb27c78c890e61f0877f9a8f8a064d0ad60de59e04c1f0d3f78cf64f0f2b1a2fe6488db1c6ced04e07f320a9356db841b582e2fe94f13df4e5e65d0a0eb281f18531ab0ed37cce97daabfcef3939c481fe088b60c7d9103e57df1b5c61bc132ca48d4457cda01920c9b496415efda67d47a90a92f847e176f087f93d2223a2b8f145eeb1866a6817ebc554f0f85cc7f5ef153f52c6a1bf58500d32b2e59de8c2c014f74b61f88cdedd352acf4421bb3a769e3ccfe75f2221349f618fea2dc0ed6ad1cfb5c17dc473ec473ba4c3ef43877f64375171881ac0b4063be27513a0d63163176a7bd9dbf487f34d159bc9bc5fb15952f17ab4f4755bfc2cc8db2dd1b2c9260bc500c87dc6fc067097badd6e8eef82628e56db0c1d31911779a93c603806ed6806687c87b4450804c2f467c92d6994f44fed965964f8c5476534e3ad29afd7b966b5f76ad0dc95b5de83461ee814183bafb4d26e55880cb90a1fa70a44a91077ffc385392e919707ea145bee886c273389da6c5d9a66ca5dad2d45be0a1a55bbce40656a43bca474050eae6b11a2e425717fd18c4419f6bc688d6d73855aef0768cb1b1c9dc5c9cfe2e96500a3d62ae032c9cd4dc23130373e30fc74c3ed87f320d6f009113843dfa36537f672cca95ee6c9a6795431884f897a488e0807f1808210444935e8094697984da22c68057b4e9c3a32755c2fee8acc18aae8c160b4b48553abe9ee0ef0fee8e4d65120aaee022a8bfe253ae12b343911a238d12dc2d85fb86654948c68d4df1186aba98dd48f2d78854afc5fd97c7040162a9d08008e60eaf453059a769cd915877d4fe923943bccf748a88f4103890d4b963402fac82e8e4114ec0147b90a47a5318627231d17948779b620bb1d84b96caa8e0e01a4db3e5748415c208134a574689985eff8daf0719b5ead8e0df3c37d91c261587d1c4568436add23aa5b438519530bf379e3f2411f2b38a099f0839243101bb6248bbbecad4c136b3e9df10a80bf243b3aaa686f2f9484ba71e4a7eb9d6589a67449249a0b279e5430186e94613737ebf282e411e828400c5b8ead904aa1e2947f989ac782c858a6c046fc613709904a35af3c4e07d7900d45b9536a16dead1a3c7853027cefc6c2c34aa70f9ccaa364121184dba9dd220a164005521b0cc02fb354ab65d1029ec903bf60e9b5842712c02e08a55708ae4efc18ef5b920811a18d207db42c87e7b8e1304ffff351a149e9bc24c1344a23cbcf55309397e410b5bde5723c081653f3e0825956caae259c8548720743f666d92d0884b39244446f4ff049882fa8112cc8f1e00bf35ac4ce229329057099eaf3571734bb8b6d25c8373bf7e855c3f09b06a7f7e4bcda395ed8a0b249b1dacac9b42819a3690c400b3ab76dbc9f3d433b95ca9f05aae8c4b83319a81bedca062676407150121fb77a8902fc66e52814136a53130793a4e91daeae458fc2a024b8ebddbba1ea7e051a6f08de2c75d2378fee3ba7550d37bc1db8112a21ab9839865ec7a9b665dc221c6bf1834c6b08c006f40e6b4689b0909a69d0f1b7981f1097efb9e6b15a11695f644cbdb69f3a75d4fc1efb19e40b8db83d178344cfbb58d63121d1cc981bb82a2da982487ad53a050d0df684d584aef3a3816938651ac2ffd4cfc2a7e747098ed32c0117c27015a2e7bdd5ace95b1e9371678a965e1f1aaf89d0713f88d6f393ff989945e63adef2679e7e7898272f02a7460b87c8b2477d419f3ea526d71473bada923bc83274c6e9c67488d83ce28f86756c1738b3346cbababf17c9b4cbe5c7e1894868c0f4ec9ba049868d2f8a4338c129564bf5dded27a182f7fd78c55de27dc586b90d159755657619e3553750590db45af0c7375b5d17fa8c4496b94248735f6ec08b729ff411fabc2b3fa328afc9866e35da067e41def2bcd53318e0de70e86642e2154c4d9aa77ce6c6cfa28bca8096f30d1b00512318e5d07a18f2b87f6bc385d9999593e440c1545c149832cc71bdf976110d324553c89577a995fc12e4d6d44e26e43f28c3ff3b9db0dd74ce079ff787028e4e2a95d1b121b77e492cda06a0c89d9165097a58e77c0815029aacaa0cb0149a8095f1d42b5db2c19f58502c5a70672cd986857d1f642f8a16f16b33a04a01f233635e8fb310449922117c38054ff501a87496c2a9a588db5884f04089ebc0d7408749f4395b34882acd09de0342aa963d8602bb1ba0190ac3cfd6e40543a603db0572a2094892b425844d1ec059f0d9d847c9264a35bbd6fa170707d7454dbe0b7023b16670548ec2ff3811e24d57b0c7f114b9f603a7d0186e6aa64862e639b6e1b132fab15bb3259ae2c4027e5d9c41356695a222e9c46476713965c03fd4ad403c3c2f8dfeec97971086569af872e6b3ac31ea230d2124bbfc8f9a0801fe68d7f552ce9c7d1049e5975b70015c308c99050e810deb70d101abdaa26d227a157b340634427506f77083e80efedf04cbb33d84b402deaf2db10a4b7178c5cd06a786659e25216accc5a4e5a7e53dd6301fec212bdb6b522fed489b26fe2a03737b892382040ecae225cc62bc4944824393c19968e3112e2e7345cdc391187bcb16acedc9432621239a2e7a753a8488a732d747232f658a0b206059bb18f32c5f9f279bd256ffe590b402c1ae2e6decb119031eadc77fd2d4d202c3650ec59e9e496c3f16c4744b93fb681c80f9181ce4bff606c203eec83c9df76402151256ff620d071f0671470b606674178b01b66be135d92efa2110c3706f02f0a931b27683888399fcb9c8bd29f5fd9ba9323636de34f3674cb44142931ba9571e11476dc21e06bd1e5b194ce5e3d504704cda92bacc0636dd403c95980686ec63a7da12687032ef48b12c4720e6abedb5924782465952ee9851549e031fc1ce08c3f787e4e0fdea749fd5326a7dbe0cc7bcfc9e024cac0f24ab802b4ad4ba80ab63472036bba04b982b117710e1066012597e914214db93b0fa67d730496e0be7be2abf8ac055bd4f90bcc0610067b2735526b01f8322ae2136f20b5b1c0549b5a7aac280bfd12e4c809b1ce15fe37a510347ad53543b54bcc5a5415e368e428b75f810c07ed5c13f4c220725325387b06eaa1b07332df569150c4a3ed22be6f952b612b1c36a571874b6b6078072c055bf4155ff7039e6892621274d6e8e904de7fa89bd5045a72b146e0e7d6d75116aaedc4d207e079d7d57a0c3a63194b4745c05c160396af62d226791fb9842f9ce90887507cc0ad15641532b6df78ee291f5be1ed911af9dd80f683fb1abcfda6a96d4aa6294bc539778ae5f63031e4008adb38caedb343e2aa799e05f0bef535de39a1b21362fd4b7e594e98ee6892b354813ad4df666a4789dbd294c626f67a3355b6cf7e55fa8e844c7b2dc18f3748e68547bcfa6c8dd4d5fc23316df916e3f91cf6175e024bd103ca4c70eb11a41c072e5da6104ba8c3c19aade8d8d65983be644805e140baa198cb6ab0ccad2c8c19cd1320e8cd08e728fd4cde46bd108be8d217d865f18a9fb5651547fd805340487f5a363c94b87a432e65471fe3b4b82c79312945ea4bc2b8c95f997990aa07653b991ad82b600469a3899dd3273bee028e0c8be326f695570d79d7a67d4d2ca3c7725155c7fad08ccc8ac90f22b06453126b16cbb0e171774521ddb2329e0beca9cfbe8e8100b370a90557d8f5c5518864813bbcc37b8166d029ab3ac6ca2a8d288724d7dbf1833be94a90f960f2256be370abc4562e6235088f5995a9ba62c84b33b988b43ba22da25c96b116a250d9c094a75d84c74a07e54a623eda2e2876d206cf754e96123ae7d448418933bfe40cf14e200aca329cb31977e6179e247c7a9afc038a4de00beafb59f1c60fd935050b5aab00379a46eb390c0004a2db0205f6bb2a2106b7f5ff045046f04ff117c98993b4d922a5f0f333cd31c3f3110c2c21f7012ceb471cd73192cc6905b97244cec9cbfe3b61832c1207cec436a072a76fe1fd2e546d09c46890c4d17b174f21484d00a3f725e4bccf9ac707219cf43f23c5c4c8137061d790517d51d73989c5c81711b6cacdbd28fe623d5abf9318c72d52875b864e076baf01e990816c4c4230820204a88455177f57641458ba9c4aa4f6cf182ffa8c53ee3d4d4a1c686a983d83dad02066222cb266ad6d68ecca93d80a1a3b58687e7a6818dccead0310c13e418a2cbecab0dd52d57c0897adcf10ab711a34795cb05add6f8d391c265126d2dbb90cf4bdc80ad019d8b5445e71b939bce0b335628414eee849ad10345d24dd59a3964526492f924c6f4f182d8e19b8aa686f53282a2a8f28b81c3da7220ab93bbd43a441c00f492f64d2d26f009877087bbb1b93cc3f485f9a505188a0af3d993e7ae1ff0e9546a694195e310384a9bfc2c1d9f5e724c0aa984d3ef55af96086194490d5b62f99a227b8777f85981414cea5b2680038442363e89be6c6b6e87b7f1994ca23cf8822ae7ab3efcfbd0458dcf4c28412b50733e2e585dd638c4aa6076c76e9722426198690f6f98982e5bd26708a96ae53b9d6c70a1d994b4f3f307afef40767e62b612670903e49162cbbafd944d19b84692c8e7beb0b5e491824ddd55ac6076a1f8568bee3b505a838381b6bc06461085226788ad48291d877c968ae0ef14cf192cc21f4c2492ff8b301346d1475ee907a0d6efe072bdc085ddf90337eeaff039fed1740a6451b4a3af409915d24e8b2d8e5ef1112217a676edc07ebb8e19017317a12bdfb86ff4033b7d5a4ea454c7c6483870ac52ef0889f5074c4796f63f7824b28f10680ac3f4c3a335eb6f2410c567afeb1193f0cb2feadf3fc5afaf9a107754bacf1f2abf001bd7079b179a98b4eea5f8643d3c0659da5b88eaa6266d1061cdafcb5ae90deb084ccc4d1beadbe8cd30bb35b90414d80119dbeb80bcefc7991cb15c8f13afcc07f024eb8e2aeac80b0f712d1a21181e88deefdb1aac00b96f1ff86a2f36b1a1cdd1a21bf87f5526f7280ceea63d1e3c7a72aafd17805aed7e87f8b457543ed30cc0d31defb848bc96d3ec2a18eba42451605a3cae5356453fd2f18ea5e1deae756942ce135592c764b9f9bbb56f6dea4158cd7b107b8b688882e464d409a5eba53ebb4d2abc6822f0f090b50f99120998f58088df305a1d74d09f79609d243de29245ede611190bc3c6347481b05e42c230090bf35bb06a6fb9e897f81f81c313f260ce68ce84a1fa3d5a5a48485e45fab2daff8e4d399b701594d1f6c715d544f03c40e9beb38f5bc0b193a86dc9512b3253b042b8dfb75e907b7ab7741725dec67e1c133ab2b5d1c91894909e4400020a878900b2884d23267779ee78f5362dcbcb4d32e8d3a3a7d374672197455fdd1eb70cae61a8525d73d6c5368054e7cdfb03718b3e1146a85117afe9a7dd9f98be5dccf3cdc75ab52792bddd9257c9ecfc93b2808dae7c8fc158fae7aab5a0b3b75eb56e01897a5edfee8ffc5c1aa68f9976ea86892fa5f3caaa3420978e524fd3131bbe38c69cbf0f267f4590ead3894ece3114899f99ed506b7e62d12004b4fe9a9e4d31e85b211f26a9d5c734224bde658470b4d1a4115fbe59a7aaa83c54cab5712e1030bba7d36d0275250d49f675b9c08ae7ac8f59586212eed4f46f59075b777912a5979ae32967d7f220091c7c60853c218bc45e7f942814cb9dae5008040a84098b2d08d82b39174f6d2a69da87d757aa9ce90e11aaca16b6db5f2ad9547bbfc224dfafbcfcaac20994730de58da8cc155b18fa226d6e9e40ad8758c959bda3e425955802d8107e189169e4ee8ea694312eec0f87e2d4f5a2a2f0d2cb97777515df8ecfb9121f843b648a10e3139ea1ef02423ed366764ef7ecc19c54ea7c76a5d10fa2dd33775cdb98ede619fb1262f4133eaa795fb395d64207b665db3e7499640ec397a428a5d42612893f69e527aeba301e6ea437453baf29b74e8a548017626930815031ee6372b93e9266c251630ba6e4ab8f8ecda9fa29934263fbd0d13834fe7c71527010f64d33a43791c2f9af940ece21e43c1480c614cf26c92b6d21090e9aab49de99c7f46f5be67d88908fd4268ef15839311bca140ec8d62d354a9df11a567d291d8abd3de7a537950a317b049f05dbf2ad7be8807cd8e7a3f76d061215e3a02a34d62796c0e7aed05c07d7da91d22c814e7f3b7ab5ae612cba1efe3290172a953d7a5cc2655d0f84eb58a12d90eb615d88e06aa158380f7374e2c30b97a8f7257daed87fabf072fdf10d873edc64d2952aaea1503efcac48c8d1e7c5cd546b42e3e6931307d3d3a818666f3618b0c2dfd74037bc809f7af80cc0a10def3224cbc10a78bca77315be4b1204841bd379a7ccb7d47b0c02f91dad3f8eb51127b7f2cabd66a7dee00662987de2185e1fb721065eade08a78e9c112113e302773ba976ef7f244c3dbef45f7ee1c5a42198d21dccb0e5cb72f30923a346b8652619508c5babf5c297588323650cad16f3789d91302d22cab54f1a03dc449e74190570043f6543ea4c5bb12f20535c549ecec81b02c094298ab1d69d4fe1b4b0b71c45cb5e6f84d155ccd058e825fc087f761ef0c95df11be05bf58af00105e94cf2e3ab4ccc0ff5f73b4c4122a2559c15391c680822253e43932711d98df6ff1940ae564e386ab9b43cab741195a9d63d3be8bd80737e108d3a44047f288ecc69906a36068e8f6f795ec23a483dee6de464f7fdd85fd64ce1667a0b0937f831359062e206e5ebb6913128ff28c6acb3f3f1ca4b8a1eebf81c518ff25681914a4f0e1db7d29549e8a18cbfd70abfe857facc36206d3442ab0fd34ca788c01a0fadff3d28343600a4235521c5d28c3296dacd1c630bd017ac936a40048be280f37af8dbcef34c046807933cc7bc146f9c892533228e3238d30d2e027f1a8fb51f1288ec45c09affcdc53ff61a1e0c815af26e1ef1ac440600aa924308cc663056cb8a04259e8c7605736108b40dc93915d8ac2af4590b68352cb28cde3a16bfcd06940faa70f0c1a2a33a75e191385a5dfc8e05bf8af0bff677aba120ea3c07131c602005771f3f8500cbea4d8a619b130cfcc5fc9de280fa178a6b639ee2888fed84047492c17c992d9deeda5661e27c85aa879b41d3c7a557fa6062e7abd9f2272809719c6ccb336b8abdadf9987c88738cdf31fa504bf1cfefa442faa08c17c123052fe3c9536ca4d762274fefa47026999526fac55698d522e8862ced8734b4ad8bb23896de8e1167d880abab1f84d4b15bfc30963496bb2cfa277957ce33a6df31849809a70ae12b30be5f8946913246fccb0b31c0e73f9a0941ccdad943354c549c8d297ad57b38ead07bea701d3445a6be21e8e5eea95c5ba4d511549126f81e0f565c55142420753c68a9b913280a2bd272eac1d110f9a4f3861db3ee5e259e8143c325cc3436ada11d623865b4521bada6323a7ba75e705caecc7c2c278233a23f89dead1c84e08364427c008577fced0f22ddb818768f1efbfa7d14ae67ae26414056657bc9e9400d7212b86a30f72f28672eeedb438cf99342a0637829bf500837765bf53bb2fd64c87c47518a9fa14f24c6f9c93685ffc5e845a729c8db101277366ec9ef42434d67ed99049a6ca1ee056940be8dd984552b194dfba524163285e69ec729a5d973d03817387c1f15083ad01e00d7a5b392c618a8540ec8820ae22492499150b549aaee81f29810752b40885c66827b7998a12fa0d5fbf243deec9575678917cf9f3733a881ada58758c4a7548390dce034b95362968ca8e34642ca8f15d04cdf093c34b98a58ab53ee33e3312e8c1765246b01ed9961f4f814ceb79631651b9a59d92c28fce92e5325e6bdeb3491b0f953fca84e94a69b92f55646eec768688915192b3be1d5931369c7b4e753969bfac1472669ce39cf332a93de0768ed324549da11762c9272b2499ae267e39f36a02919a3472b9ab951bd1ea964a2d49866cab85369b15bafa469a838b6d193729b9c797abaaf4b5617e1de70a3b8bf2516ae467a25d0fc94dba37fc51f4a032aa9b64b36c01a12584580426d532859aaf14ddc304ef10507c93a0089b9a2e2cee7e7e0885d0ce2c9034133caf73366b3440d3986bd119f90fdd403243dcb702c401ea165640751652fa4c5c6f105e5913b3de3b30d0311b49e6ce71282e8a5fdb567a100ff63238b4bd068bd9195eec69b6583612b91b3bc1729784a011f78336955f823be5560c6771eb1b0003982ac16b2736b68afb020afad084175f7cb2d2ec6d1eff79f5e2af9a4f9e995ce4a65acfca8d0947ca155ab236511bad1defa27081dca29420b6440f803ae5fcf405d65c9e9ac132353eb27f47fa9d82685c140d1f2d534751594dedbc26b53f13b8eae0d85fe3f9764ca85130639ca9925b5d6486e77242229b4df7b2e484465f3263a3d8e8a5d302c4153fcfb8d1f566f4a8d312c807d4ee0b683b328cc33dd3c939bc3101fde61c6519926ff848c84c6d0e18bae13b5750a68ec55e562860433354527cef4de9e389e91b6b634a0f7e6d0ab637427a77c87f63e31ffd1c281b1782f9f8f3c1592883145d2523bb3b929a73c53f4d64048f29149622d085007bbabc9c7a0f32f7842c786ae58248d15413f7a7c86aa1bb74cc767d495b0945ece260e6189054db7a46e93a96e9fb2f255a9e7fbedaa09433ddb0aec85883acf3a6a9580fbdbb4d8b42e4618c00060668f690bbda51112e08d074d858c8374c74ee80d664974f1ae0955e174f918a60e54eb22c8034eab1968d166e8edac0eeccd337387f5a0b61ae71d6428858cbccbf0ac0d137f78453da341944328db27249cf5e9e745da681af297f40317582cdc2ea3b7d71199930230e00bdee87fa43e95bd033147928e22077129f3c5a7e0f26815c6cea73a094e7458852455212ec8de562a976808ec0f3695dbd70e0329e7d44c832c64a5867c2b6299861e5794a823538cdef737dcff7f8484ff7a7d31e93be9dcaa480d39a843559d878638223b74948b6aea805232d79ecb48c4e62eee074328ed0e68f79429e0dc026ac6454cd77208d9ff3469542bf86102b1a0b6caa83a0c7c93310182858ec390d395db865d98ea5603be6be665e80a938ed64597afb15db10a92e354c3fd718b40a8d588aa42018a6eccfd35fabbbbed52c2301812dc722a913df0eae6f0708fb76fd8b5e837a2c0f56f00cc6de60fd5e914a1ed9e3f10dc8708b12cbbaf10c9b1c7a55934add6265256a5373e54aed42dc0d81eacaaeef96d78bccf157e7460d399a653b2bd6901cdda503e2200ca9abaa0684f9ea428f8082de67de51bc1e8c844be0fc818b2053357e745196e4f2c71d16da3b579dc39330902eb17b026fff073757286cc54c223075802a492b10f563ba64dc17827c148bc07c790b869d2ff4284c4c428779570fe35a69792050097a8fe6154fe37db4977272a7c986964bac982159b9a30dd322f529838485c654d9e8c6fa2fa050f122d908a2abd2cdc4b29a674ce27d429583a153168946b6d0fae7213590df70b1c498ef31bfa88b04a7a7229817e695b8a9540515843b62eedaa2907a005f39521a58334dfc2dfe7a3942ae0a37bdadd63a4291378c0d770fd82bdcae0d0d8f611db5783569b263d6c023b49dbca901b1fadc9cf65201d05287de5d5c7788cb24b00f3f889ff734619c27485f7620454158950eafd3c9825cb383cda6f425e79ad7b973eabaf24275b962749b1525a2cacc0021069682d70a4372e2b56503a52f99096681f5c2245699c92e0376986e02c388a89d37884239b01490972f1381e93be27c813b4100fff910219558d5d06761d9621fd75f48861963d8a67d4422caf30366aeb86ef7efffab8d50dd6b3ce92f194169d3197f68727d4b66b07906e9b8bd30266540a6caaebd896369ceeef263acd1c0fb370a27d5462597fb989d7ee97e7f310511cde2f7182085e214d81a3ed718b6d4f53839d76b6f68f57cc9ecd3f5a48b08d9bec21c6feccb8daaa9846b94d345230285df8efbac0d24f017242709106cfa8ce2a4d90f8303f129ee6cf591262c805c94ca94aec594ca103d8949f1e07a3e11b7d622fb939e723c7f2491307f47f14179a1908244fde9ea32a3e9b8c189dcce5e61ae22261d5acd04cc636f763dc0be1ba1aae230872862a807dc15c9961ef8e020045c1d99145012e62f3309c6152ff7d488cd853eaa61566d5c1a3c5f0b4a16798555434b13343eb4c53dc93cdc5715a40587237dfdac8a35b225286ce3953886e6c639773aebd66e60b16df2867c2d8a7829ccf2002de5f3484d031bd47ed048424e6d1289b17dc1754fd9b16e700fb386970a4ba52ab768fc90dfb6118811cfeef5f63da7ac9d17bd996a1fcf3480373ec5804fd93a0fa8fc555aa4764d39d5c317d293d36b0bf00ba2b4e1c748f3186835bc5e026305b9cd581bf743d0e115559c82c6699e5c801df3bd3b5ed8e5642197ae6a18211e169ede542c2c87cbb5d684de7776da49e04e1c95e4add8aa9131ed83ce51b0e5839ad413f3c9efe81c3ba474357604cf708620b8ab695693edb70747c34c311e9e3b4eaa080be5559f5967563c582204d6f7a535c91982019476e397a372ec4eab8e7b81ae21147153c77b41a36101bd33fba3b33bb189d124184953a548cf70c2a23e3986c4aec300540662534cc176e01a5802f4193b0680ab0085d7fb8593e583821c61b3ec8f08df9442b276269dfbadde2d2fa8a3c6f4c73263ac44d10c9840343ebe2f846685ed81b5ddf8b4bde61a2c7d32c8f8844d3fd775b30f40a2c96c55270895fa937c6c2ef968c6c6f82b036348873fa94ecee16673384a955aa0d0fb52819b0b670c15dc872753f1fbfd2a0ef7dbd9aa06e53cc42776dc0d54982b2aab81b9b9a8fc72935c2e644feb0de707de186c4010bbb51017559640d083cc181148f42a9a6cb6671e6e60f48257f4fbf93ad5bab95007e2a4c762f9cf6fe03e88217b01ab695916bce3d09804080910840a669f76d8272e15f9cdfe16e996e5bc618af225d1fef25c4e3737ab942a61cef08574e2488c773ccbe026489000f87d0a5e33544db847009740a4a98414bf5aa5321331756169a85ac66f604b0c621de48e296fbf0db441377af1401a1f3797e06550f180d09368b769c27c4b2ab287dec2aba5cce942b3d5448399903944db1bc34ad23aba570c2a2850351290ce8e6caa6dabf380dec59da12244e2f4b8da3c6785da877b8e86e4a5e630a661de67040088a58e1aadb2d9644ca3d59826f48117b39ac0f528a94dab06c786eb1202539379adc469ad6654cb385f2d7ec04d11fc57e4cabdd7619042dda31abf38917cad4f7d448349ffa9ec9112f12d39d73cdd1d00c5e6889337e057334701200437607e2ccdbf8a4b794afea80d5e3c8132e895de711963fc7972cd8ab79afb3108ef5eeeece52c49d4581e2d71ebd882748bd8c1b546b1560c9645a1c509761db733f32956bbbfe9c9689599a05b6f8fb453a3f5bbc7a02f8fae5571357d62d02a1d1db1a6c6564d36e8ab0122916606fbe511d5890700d53ba3d6df72778ec5d3d547e5a5fb1aae6ab778e8267d4475f6aa98b86c1f72a5161d0ab636bbd83210478915fd2fcfeea902f1b1af6d17ef35ce2c6aa547b02868d1aee5a860a13c254102a003009386f998ed1436d10347102885836117530739188979c81fd77ca3274201fb724e0cf7dee307a7a7295e251a507979336216c93a9a162f0c8e38a54b8dc0eb0b6fd6064581475a3bdff177b08e369368ab6364108466ee0780c44fa8d244857cf611af68482f0437f5b025e0104a9751ace979c653285039625f2f265d9f39fed662d92efc5361a87785b23f0b362744a8b6949eeeb8b495e197a5f95906fe57da6d7844de2e37328840271e9d4d10541227a36735e4bdfe42af6ad23b3c8143b82fb12f1208ec50ce2e30df351527d081fa47564fcd7e96db375f4af98cc6722556107d9832fe7495e1ec8294d611e51a740c302bac4cbc0ae80a0dc46315b6a0af42385b5dc2086825b06b4ef50bcbe9daadc12579282512dfd616f9f43f5f780256ae027ad7afebb6109139d287e10776d906fdf7bf3eafba204f89120c2943e9785b6b82f2c0c5082e58a9f12382840b9f652eedc8382c51942b1267d019b7245183b489214243e41ab5acf4e65b405393562cac63f265f615a9ef97158e0aff1bbb4722ee7b15345c669b3c6a7d60e5539bea0afea71ce20fcc2ecfd1128a33dbdda9b5a5ec866d22a0f64f35b94464088e0683bea137d5ec4442a1676638a3b4c7482d646b65db326a9024757504ac97a96e6c98d1fe54be95fb8cd422e8794ccad972ac61ae66e93a45e625af9466c6cb1132d91034ae00d24d5bd345d3e2cab6c75ab01c52085751bcb8117666a982ba0f2cf3f9867367d44357874988d4a72e7cc1252436167c3991f474b4547f42d8675659a21cc997afdb55032a683880c0408b8b66c5439c99f9d3d578a29b2b0659cc3e8bb90d5e8814984c60f180890cbd8bb6b0cc5d71281a87441c06705165dd6253160ba381044700f0a616cf311890941c9d082cd1c234f7c71a5f97362417e22a218803bddc51efd41091d6915387780a43d278dbb800bb724f1a6ae8882877c1e4ca11551e2bd687b937bd638e352a1e2074d27aa8b8669d66da9bc614481302e9b4e570684a680716cc288c2d7b9466e8a15109a1fe7b2b2e30b378b71a6544449c843e68a39a8955d7946e6424cbd413a7c44dae255cd57bc4dd26332dc791dc1642939ba4594464fd6272f86271873b78d52d6f9d6fd6338e6a2aa8e29ce7303dfdd3f1ebfaed3472e7569af82d552108d0660cc23cfa3857b7906f515a1769e2836c958b0a87e3ba6bf14d97dfc8491109bdcaf6ae775ac32ead0d0ecab1eb03161d33ce922ba70c3f6f65f33d5c8d373c1503f0c90bdb150104a424305da5ba55fccf256850871f64937f34a42cbd92a5924a7d1496d8c30967f1557e57f3c4219444c8e57dd17916a37144d7796619a0db7f51025366f8fd794e27ea36cb2eaca3fef607cf4466941f6b333f0a909277d28b60829ae8dd52b05fd77c06af38be8ee12b2cc5173e706275f2026f9828e2268585e21d538483918a645d817a0d77951e473f8cc4e8498e19412ac42ee4cb6b7fcc5c000482d2d512f60d58e7fd0de413400f195a0a6c5ca922d3a42b9cc290c8ccb0542c611d028bf477e0999264cfc25456ab4884592baeecc7fc9014c80a73ee630903d247bedf1ff77a39e0b042c9dab7dcaa4fde049dd6768d49e54b3c00d1ab8425090ee3e805c0e7fec6c173612f0ed3452ace1078f3bf89f817426c1a754ca14a17edc6e94643f3aac513e057e88b4082f164c43508ca04cd15996153f2a71bc9abf95f49e71342da557c7e4e8b85313a6c229ea874cf02c3947819813bb89321ae6330b141e8de3ff3062c9892a268a10c371cb2df13b4a0d88f043a0aa8145b87fdd64020f7af87005c043bf8c16c3694ab703b1789256ea1704dfffb432a940f52436bfafca62586975b23720c392d1d39a663f10e7880668a5767316d62717a58ee1817605ee5896dd61a24aede3e12bf6bc00c7ac4d7d5d9ea2c4d563ff0c10c12f2cd0936439f1f3440a05958e7f87cbfd28eef54b634c317a48221fa7ca51a529e95ff3e6403986097142fc6520f9e42ee29f1d41cca3ca171959afb87a8d32d72ed640fb1ed9e98eb34eacc6e2ac3fdc240d7245d4200e572a7317d5b356ef98fc95efc5a2dbe32c980d53430bc5f2181c63031e91897d44d77a8a791975b742ff0a77c204ce0b11912fe386c10fa0a02e91c14288718b552ea7586209c303d4b6be37650f7a2b0197ba66dcbdf20ff9e7170b1e647d39f765046f67aece8771789efaff1d87e5927fd98a6722573b2f69a28b6e1178d555c8e2691120ba976d0ee435799ab23d0e3227ca020132ccde585dc1dcad9b6f0442c8e29c4139278ed1b1ce22fc605848b7972f718b664e3902550e5cfef85d5c3669a26dc90b94e030cdce647f8db5b8db1b132bb5fb4cfd5f50279895e6de3f3b2a7bc3a7eb147885aa98c5e93b99c1d27cb0d4ff336bc6c48bb9b77d6d5c0f4b417fd1bdc88327d2010d76a9837ca3501e1627c46e307950aabf28053db1f4d685c5f23115c24248181d3f9d017895b1df8685d4b3879e992e10f34886a61819b7536bff3642e8178fca4d8e68130132c31151371c7f6e1a2e08deccf816130ee61a349bd5081b552ca26dcead9afa709425c9122e585ce1874c412a6ba9551fb2b7522d05a7dfa447a70d6be39cb485a26ecd61e0b38fe989580ab919fa3a7c5a05b54f12f1893cd09ec83ae9a25bdb1df0619ffe50f6249408d4a61cfcc498634fbc3a5333a054f4e37f4f1733d25c4da273963d604b79039c13a89393421295c6aa6777406c5e4cacab0421eca4902c69c4000e31387f918c2a65969325a01b052577e5546c01e915719615a62979751fd83bb6753765b22a9b8a69a562ff39b6dc77978214b14e07224454056cc4b4b5b10b71514b010c6b3b11e2a6a154cd471b3d6b8f1ae00009013edca416f8393d605e7dadb1c975fd5431783094861833cd35ede77b941272256e3338f8953a1a207ef085cf9754dd9b8978260dcab672949eea2468c5c711cf514d0858027fb012d0c25d75da6cb887f4d64cd6a4e3d90d8768aa2ef018cf12d312f878b02cd19e12499bd5c3f93072cb16f5bcf422918df17efac710e6e2fb6182227bd75502eaa81fbf17ecbbecade7192149a830213f6cd2b561f942f0f96347120716621d7a366ee1ed980c5a3503e0af5becf35b95048c4e08d4c3869971364672c50901c1b2d82172d2b61b6b1ba6412366bf44acec6c0721d94de55fe3a233166f746a8ef8680f76c46f76d202a5571fd9530b128cfd75027d99ac06d6bd2e58e428cd21b5f0e06561618c792af21ce8bc84d8a0c66662a9224e513b1e744fbeea11ca5fda748ae56b8952f2b14b8b971deb4ea510a50089b4e60dafc09118ccdf695888648d220e6b2bb5c3422e4465bcc57aa3839605eaf8cd054331e3261878ae160ae0efcd5f94b2e106dd2d2916531f4fdcfda9a9158536702e44b22f6d4715d37c4395ddc574a55d8be97c837c478eee04804a3a7fa67fb7fb4caa9747204dbb77f188203f9b6a6d4736a9a0e0ff69a4af7b599871122e567c83764e3f6cc46a4ae532a64487c5f0cb38bcb1886ec73f4fe4923bfddf56deed4e2acac59da657655d5a742b0688c6493ebdfabe7cb27f305649f39b9f1e41f9743741491f2ca4dd5f0425ea60f14d664b6b1e714df2a1e639567679a893767da8f31d4430391e142c6854b1a4c5e853510e15bacd1c4a0a000526cd56f67dda0e7922e9bcf1768d970e8c369e90ee957550e3b90a5f6c5fcb019958726bf16849b1aa41e4fc2b90995440b5d617526be5c24931ed9b281fab80e8ad1a23c57df4a9342755fbb14066349423d787e2ea51bb09797339bb2d4ee7bcc2dde06839aaaad1a9b6a79480a963503b019596645daefa74ab6b8f4f7934bb15c34ab3ac99ec05d0d8427d7cfd97c2aba8f80f39dd61c7dfae1a284dc261064c4001f0b33af4faa5fce083255b03ac34433e201493fb7769062aafea6b0c2615b658b8cf416ba1716198bdb79f0d7aa3bb0f5c064086cc07f8d6a0c83fdbef10d031fa8d5fba34f0b1a19878b3180d30a56fbd09ad36896cdb4bf9c5dd79ee16f80c030d091be0f30c26d825cbb2851f118231bcfd0a2037d8f540613214c8e4c0ff3124e12c487fa9741f7018f440ed477483dab9b00952dba10e8465000737c7a56115407c2588eaa47af8eb677a60c189f46fec511d39fc2091705ef8df0912ed1da1da038d73b239638bc4a78480a437d7ebbc15c5d1405fd7e0ef4b68cad09463463222ec901e8c9106bb5a0d1a8de073b558ec7fc2576bd22965d68828ff4aa33922e9150c085004271403c7e52fa81fc58bddf93380a758f1a65b4ae33781a610e928fe1698376835d1714ec401035d55bba86183cf0e4e2df2ce91ab68d90ef07fa21c05e782da074d1424f2fec1f0295e90f08985725a7569601700ee672f0d4ceca053184189881b0647f8fde7132057e09b4813ec9a8456131df7f242ccac8a1d1e142be1cd29ac03d16a4268881dac9cb01732fd4698e80000e1a170fac5ea23fa82ceac6029e4106b8be432c32ef377647719dea2d7dc7e717e10ae72ab8cee3a9540b98a932a0dc33f5808f1ccef5293d66dee7db2704884038ca4417b827b3d8e2d4a9c98373cbdc7324aa072c1a7c6c5e41cfc0513b55c52bdd027e3abb746e8398ecf8108df69b854dd012fa0b72c7a9ea312578abc15d0073e11e3608cb16011363920aa2a64b62d9da90ec5dc3b1939ce9d5964180dfbb8514e0c8b51e4e5a73e32588ca4b320f363763a60d36ffb392141394c728371c67be3036f40d07d159d5ce42466902c931d3170a29285517277483d10e1c178823630fbdaa445aadb569c283c532d06825e618e593ede3ec594350ddce4314382ed89448365a89329668a24b5792bff3795a8c4f2a6cb88f43ce6f13f803cecafc58e0788054d35d8dd365cbfc8755ff07724d0926d8666004737c6dc1182a2367413a395d6013f2ba5e5e4c96cb43815fa3f31041a5300ae6ad566a3574dd055e943d940130e1ba3e048850cc5517039acf31a5acfd43f232765ea7f4dedf26e196cf43bee984140f8308d2b1d33dbe551208cb2a96ddb85a0d61bf0d224c4ba0a48edf1e47ac05d2261e1336edac6455fa84dda915afb66d63b9b5dda0d001e2775478bd18cc61028a6f1c24637dc83565c65f4aa632d340ada64856f093a09ca3c60f9e3b4f25b71e0d43f40f00c61be945adb9a6b7ca86fca1764f8be843d74529b93290dbc6ee71ad4392a54f7be2649071f1da4ad0b439dad9ad52fdbbabfb5f67ded7bd0d0859f29a670749e97289f0cae51a3bd49bf1326679ad5a1a6742998e8e224243a7cb508c57f662bed3460bac7fb2a894fc814075e3a537f8ccf33acd84c018ea3c7f82b28bdd0508f7bc5ea48d301c20212d961c35602a6ef1438b2c3b22281014581aae3a7a98cc02b07849c0abcbb380ff67994b48ef3f4a16a080416204441469b7b21437aa0bdc08741b1d5bc01699968533d4c398bc5c9c0751e2db1c00c45f5a6694f8a187ffeece67791f60608518a09b0267386c8a3c2fd1e250e4fc2a174b1681d860dbcadbd1e3752401fdff1eb7802c79d3df0226657130aef6ac45de02252e41336f39adfde8687d010d3c334d8751e0e8d515bfb316cd8d59c3aeaf933d629fd41a472ccf81d0c4a36d2a5f78aab617008184933beadea99c7b7793950cd626c98815522caae3fb15b36006af3b7ee7378884349afcf944759d49e3f13219927849a4724eaee7c2390b93bd40912f1bbb98681e1c17af53e81a20e6455f5a90da6602e100ca86802beee0b736b70986802d8257773ae2350d54203fa1038c017e88f961f40af5f9d50b586a7f070afd5cc6cd22e43e0353851d7773d0d8546aca57d1936ee66a61cf5fe39eaf484d07c16d94e73844a5f0e582eee138c092fe33015b9d8096512c22a830864fd072ae7e78d04d810df5158d418b57d61b8e3718300ee4a2118a2ff070f72df7c88540f316ebd25feef94d6d02907fab3c5d3aef1f14309748aff49c2f718d51dc8c241f16addbd8781382d913fdd7ffe93681e11e166559b309f9585cec9fc79519932a6b9010df30e69bc8b74184a214bcdf130b09bf38f0fc16723410e2fe791641f4864a18d8f411a287c10c6eb348d4abbc413e30ce825bf3deba43ed1215ca3636acb196959efafc3005e6fc63e1b32a083edd87534534e49c3a8015132ea5ece8968e5403afdcc34af1a5e0ff8c5e188498369d79135db0ea96a8d312d7366cec0838182027a5068f86057219077946c35f7c3e10ecf3fbfa93ec101f23c999dd2f64e8e98d91fb60202ea1863bee271d80b7fc196485c0cc195c848000182b7ec3321386bc151b4779cc625fac0e30d04dc922ac79f775e930a0e080134d3c496ab8b8bb58c1b1a0b58278e765c10aa873c4ce32ea7a15098b7b46fc347ddcfa4cfde3f039d8607613dd0d8ae6d0892cf2e5817af3d7f13b22e6d773aa085af133004a85867867fcdd5be822251e2d5f789f18a440c08387792cfbe478e4d1204eb122bd070cdbdb5d867a76f0f316491a2f7b1fbee69b7c25331b19e876b8a3185afd225723bbf29f6ea5e54041d7f40a7816b9a20bb7d1dcbda12a11e96615630e895863b1a3508e4ae5cbff2fef957a9edd1df149a925a4c4ce9c7fcb466ca25fb17992b85f550c2c72f602065cc1b43a02254bd57904c14696f0d6226b713da394601304569e72dc9c3412e562f2c3a37a0e88e4ba23e95c66b30c14f83dfb7b8703044781d507c4d6fe63a1d6f57ef19dc81e806e07617393232930e399a0debd7a4670d88fe95745a24b627c847d2d4362ff5a606f357f2452514c1608304d60712ab9617ac2dd2d9af68e1840491480a81df64f25439e6dd2a32fd29688507143af75a45d371105ad8e8b515e78b5de7b22a7825eede83a7868b97bc2cbc294b606883e1a3170e549bc78a9b48703e0140100b250c6e7dea4aee917c7cd64af9b8a7710da522c2a190e483fcdd216695c778683508c18856a8f215f82062535fed0a2ad4eaed5769fbe50f05cda5320cdcf2032b3be3183c65074612c8c7c30cbe29ada03d3eb7a07b73d48df4f6be6fbec2f7d82c3438a678764eb209cca0a3108ea0602e8672e82c8cca1301775be296a757e8b217eebedbac44403e8d319767073df2a27543f56a49f62bc20ac4922fef850f3ef92f58a40ab5ba4532d57b0563b805c30281ed1ec241b950ce52372e675afe7eb3450795e00bffe901d84b7f14a3cd5309a985b98994441d481982746cf0c6cdb6d817aaab0c41bfff7262e71535d5f19aae32387212c67a90ab6b83f8b1dfa0dc0c86a5c425b59df1c5d9723e372b9dc7be9f6d0872bdbae24d51eef0dafffda71c0e9f52babaeb5882b895d2ddd38cfb033ebb3d248b94e6513caf915d200d3e657c476a3e21e9efeb6984d68ba7ae59ccea4656d6455ea2912903b0cf126a6535108d5a616b189a35d7b0bf474ae910a4f31a907bb3b66af22aec037610077aef6de38f51d85e55585cafd5e0d5c430d3b8941f0b07fe4bac02bfca1f44eefd42bbac60997d257fbb377b119d0ab617361a4ec2073e62ad8840f61e942452d0d31d44fba5b41fe509e7406febffdc760bd26f341ed63706038917e5ea1ccc0eff802cdea838f4921bc3b9701f4cf1c57cc72ff135cc96c729f81030483c4a6c41fdc9798697db41c176a17e22414c4ef6d1616e906868cdfb700038342c883c9c19279efedf764d9cf19d0def1474475b363596d02e3830ffd105e2dbba68d22b8b8a866acdc89c43d395f4206a1ce0e7b7bafab4d5419c5359dc491d621927a15a87a6ca826a8e9dbf07d6e7ccc3cc27cc90ef1143999c272c55b3761e9c8fddcdf3e8b46bcdb1b8335aeeef5ce1d78d64828039a2f0b3ab16864821d8dae73009630f901992034766b62dd15aca856c4e8c16de796c28fe0d0cab82c923effc8df439c492c7b33bf33b150683bf80bcc994465ae9d24b23fd34694e93e6b4693f2d35cee77f1d79ba74a5492b9db4d34b3f7d9a69583aebf403e9bc4a50501d6f412960d03da481caa38cb5044d81ed8461734ee9f741e5082d1cd8aa39661aff463ca9d193362999a49777309895efe6ba8c933c78001c7bee52aa57a4c9bd6227730463a93f245e39140d2a61417304fbaf993e34060d97f0f97cf40a5705e478a9d31e15e712def92221fd77946d1c2db7445de1e161a07f188da563d158e9e2fecde6353aa59031fbcf6235e0a5aec69be5e29afd5834353af6fcab94eaacda8ff19f51fd85e673ff383946cb52067c5f4fb6e71476c36093172dc6d54c0760ce45e0347a7083666c1f0dd5b50daa51b0f2d866f553e4dfcccb4fbe860496ad3c2a188679f1b6127ed92595f8ea3f68b624b32f052a9b8a306a139cd609b0bbb11e995a89f2e40a5620e915111a896c5f20957858b9943b430c4194b10292db3beca2c6c883a950b75442463b2c5545155bfdf594fbe5f9fdb1db2b16d5ecff53c26e45755ffe25c0fe49254cfcd9dbb645751fff4174701fee660567d57e02888beafed6d79793975c517d9cffd5266c51adc36f60d6ff37cbff0fdaaca8eede875a4fad1d601515a7f9d32ef797e8fbc7b4472c2aadffa30bb715d5bcffc24e296a02fd9f31fadfec5577c2c0ba68517141e39042a4b4e86c7318ff2a8800b0d3a0a862f06fff5c5554f3f03f8dd5ffcdf2ff433758547719a1628fa3c2b07f51c534bf3ce5bf38bf7e74fbdaa29afd7f82dd6151ddd7bf06587f043cff9c2fa845b524b3021f207a28bcc7b1a27290f60b09c8835cb213647dfb1b32fca97476c1788a38e2c5dd98ee8c986c507d4428872b2a8edeb2bed0f6c880ad4d45f5994abef42a40d92e2a5ea7de68ab6ce30751bf2d3c4535bf75c1d8ed960586fda009afa8568ddaa4a2a2f9c99bfffe8dbfc5d8fa6d64b5e36c9f5b992aaea5a82e35b32308a7d453b3e5363f384dd26e57057a50cd4320ac562aeab92653c987b43dba9b8cd9c24ff10d98848739aaf23d43c70df3f8df75f794bd0e626aa4e0ef35f137fddedbd4eb3d901803078247b9bba47723235627cd0ee19d97783d6989a272244bc4491afbb8a8dfa602d0936e10c73751539e31758858d0a859b027ca38a4fe7b83ffaa3d30cc8fa3fbe5edeff4614ff3aa85176dec8a19c217143aaae1eb6575c5e7ca9cacd7c3a3d04689d98d4fed36714b20996d67331f49110234ff75831a0fd3629b8c0869a223b1a0e187a45e110228ffba641a37217d6021bd69ac80aa8426f4da8e8d183d644a8912d66fa86e4dc4c8b54420c2433e172c81b08fa4224442260715956d294c537a67592a0351545d3458251eb1cb1ec440a1b0f075d54fd57a49672783721e055bdb543a24ac2768447f8d24cc7b7cee55eb42b1149af1ab9a4cc0ab422f9bd49367d0f1972999e785ac1557d1cce87c5bfd802f81e470ac61614b6b129d2f6166ff89e60e3934eebd554a70016f431153226c916805407d91f9662247071c219aa770a72462f9bfbd00a5a80e83fc2b04e47408cc8cf264053901607bb20c084058d229e472246c81529f8c90c4c2f844b1cf121b4184672168485403dc3729d5543fea32a8a91b43919ed35632f0cad877ce36dae87f7b1442e1276ab076ce8d0b21ad0bf0d551d702b0c0f018ab7d2458700d3add9015d0599250fee2cfbb225d51abbf5fc8c32b63c7edc5681d401985cc78f2b3f2839ef4a7889d075f9fd48c53895947d640f62a8c3e862d5527f05291a3e59046ae4112463394a8de6bf192c80b84d7708ecd5a9c844e05ba581a8993fbe018e4c8bd710ab6da81b84fec4b2ea97542c0b6713c0d0da9344c8996137434ea9d9af14b87655a9c3777c3a574348809b38d58ad1c303f0d73081817f9e9bba40548bab8d25bcd4436d6d6dc9a046a2bf631fa2a2a25e3297b3928bbcb555d01c60bfc332b621562e254961d93b72434f6471b1942722f0e2796375bf699f0239cb3675a52c66fef6caf6f844901ec491ab4dde11a988e24457c88335a3f110958c6f9f7cdb2e135a7eec44ef2b3c0985909b29d88e21efc9d690c84bf951c264b7ef7d6dc4ce75562506c683ff82c3b9806799a7336a9e1e354e24ef0c8f35bf57dd815a2454f8868d55e90b09fd5a2cc8011f3a0b92ce274207e1e936082f233961332eeecb64a6a6a19aab53d826466d4e873a0174ad6aa266d013fb32171e29bb8b26e54be894d15148b897e80ce744df7a0cd4a62ff75290d49c969b9a6215b8a1d1f1377b062fbfbd7bd0681227a0a291c404bbf246a921d6176fe29549434fc3a1f46e5e1f1132a231a902b3fb51de61213a88ec876e935703b2025297db184ed2b49bd2e075f3fb4b4315e13fed5a9121ed18fe84d9d4802f17d17e0098274295091ce52cb6d5d4f5f2787b2790b7680e40a22494bafcfe40ccacfccf595735d1f977112d70de8327e6de1eca5c2eddace3d15ce83706c04c834b6d9172c32964f8247d3052e38de2ab59f90143ac46620bd53e8098fc5d8724526c26d18eb75c4d0c82cd5f74d93d41f81de3a20d580310ef8c18b1ee1e84b0e427951a4dc01364bdc46d68dc701820e965899f3e7c029922b763e40f29d09a16fb028210393555dbdd5e5f7ed7b3d5f26946e37964c631a0c6a54fde72bb2e1c7f8da2a42a5b50e54df6e0b559dd3bddeb39105ce2783c127f3cc3542078e4367694aa7221ec703998870260d4788ca671aea15cc26f8983fa44dd5433beb9df66c29ae083b6834487e32cf1b3fc7b4ecc2540906419397e8c069f51842cc5111a6fcd7cebe65ea800b000a094b2522eee1fe50318d0fa760cdee11640e99b8c8e9875382d71f2803333ea50d48e848b3d16077ac5d04222f989bfa7f47ea54714bfc85ced1b5056cf3f62571e63e8774c0bdabb499ecfef652be7b8185f88dd0e66643149b002955c137bb0f22679e88206faf369e7fc546dfa34063e6b957c888b16e3d761d794c79c46441627c8c1d831f43dfc17fc337ce242294e7af979be42a89a2c184bd741125163f8300f95a5904453d82ff2c8cff32580f7db840a02b148d01f2d3a6ae525a34392d444fcf2b14f765f630af9767d393d8219784ad9700f2d481a991d5dfa893bb0b8483d91cedfb1f3697ef21dfd87cb758b7e9f0b910f210819043a6df48ead066510205312cf5a95664b4a08e163c4d705cca994b9abd86172093fa400aa217a1fa73fb5e34f9336cf6cfa09f224421f41949d5756815831f44d3ab1f09dfc36c3af2b6aa459b0790117cbbe6b8be147c546791b25ac2609a4726300472eb6901f8e0a98c60049cc8e64f3273c68c075a69d33f45e2cfe2574d477cd369e81bcaeefedb034421e71c702ff97825cca817a239ee6545360dfaee78f257a8ff460f3f4c953bc2848c4277ba99fb12079c1a5da4349934c784a2ccffa6a8656b8e76cb9d5422525df4857fa32b073209ac26d443fb5b351c9b84c0b44b9fdb53231f0abbddc0034d18edcde2cf513d0ff1df51c03212feebea1560f388db90f544c11eb4f071184146b5e59880598ab35dcb976dcb87b6fda2131befa0556efd886d05d2b105d47b45b128a5bb826169879f2f9bb01e7676c7984a0eab686e509c57e4cf99c785e18f3bbaf30f2e6741e831a84e1ab17664056b025e6a83de3c374cc51686efe8938b582b1be175281b3d8414e4698459209a2379cd3508c8ce2efe48442b2012a38328363a57be62bfde636d7b321c7036ea5554df60df8d677dedac2c3509041bc46b5ce7b41395eb4a71a946c9d5a4483abee42e8855cdef50229fe11219806f48a027f57b476ac533bc516cb054b812e795127f71a32923f916d483628e867308e5842257a998379d86e49bb8ef2cb49c851f678e91b0c4cf422edf616e539bb4c6e2262059a554b0756fe17a82148784e256091093d590cbce88fc80087a2339657cf768c215d448c785c866f682291215f9c1df95872b780ff4570f9f4be8dc32c2e4e744373b7907048fd7c627b37a6bd4c30e8727a3f0181695628a4fecafed3fe6e5409122be10dd8ef9e6136bec14afd60838e1ce0b07fffb7ee83d8af4e29553321d0127220fd91a14335f19fd4cd81b9f78e1ebb1a37a1a80b38abdae97d1cfcacae820675a3567bd3973352485787bee03f6707e5c40f14713785d83731097493576b1e7c3be8f362f71584a0503f4e6b1ce6b3d3f41acc29843ae10c297ace0fd6531ea573aedaf9feae83a9eb101b64ba2d7fa0ce7ff528b2d17211902dc215e5e4e5175d57d1423a38adc494508581389d4a46f2bf297279913b633f272d0c3eccd460f3171985ebad1ccddef8f69cd41e81b75383e58aa39834a4a29c5d45863cf8f454c430e20c3bd8846054f0f471a66e37cee1d402f8f0cbc6d1c421bc37b13e6a4b01eaffd4912b27e02afaf2b489ad3d1f79672a50b62b404ac3d6673495785e9407f04f46cca600f457de60cd0ebed5d12851b7f238ce9176154fc83b941ab19f60f913823fbdf2e72728af98a50da58e5e09fc911765bd8395221e56e6e78103a950372812242cb545e1c69b6c110f4c17598bc1984ea80a8f76ed63e580dcdd1027984b38602b8e00f9ab481e4bb60f1645f8c8c253ba2205b64001c034a0841a24e1900973da2817947c52a9320282283904e084d946f7f3e433e08c8b3c70be42de3ea148415039017cdcf15bc897ae08da84c1e999058ccc685ea80399ecb1b972c90822f20dd7704f7d5ddc90676607e37ab1fb8651c06e1691ab00b493593fb1535ab65e4cd514b03c0bd5195326abfab7a7fd706f49dd98672cac4edd7604a9f0e661d7b5879cde1a08780c3f9d3f2b44bf31b4ee2535be8822627f540dfd8f4cfe0f12d083fdf091a235a8cdce1cd591d83c660f7a8f2ecaa73e723947f734b3b305e8b28636cc7b234d51086b14626af4ba1a2798b73d147c6b1b9c00634e011055841ceb586542adb300732fd528073831c53a6e74cf4e0d472d2bbf60f3593f5f50860f994ce7a0e457c85127ec9344afeb0c29cbf9a981db518f11dcc547803ef7c11ab9c4de5dc6581abd565f56fb463dc845ee6df3f01e248e50c8df0fe7c7db5020e3ded1ca8a94fab77ad2f684ca382e01c42f3e10cc3f56d238c78774cecc2ddb5ff2299c5a227d9a1ab251f091c1c73db6e952405fea0a92770dfabb07109e5938bd6a6c17318a2b078e6dbab8dab137df88267f8d527d5cdf992ab3664ea538ac1d8b09f983f708cc6299c8cadf602b5fdcd5006255ad6e2178ef1e494020c37e87d28ac208c52050d71a868ae31f7a144936fb1b330b617a93f21463dd4d907e1a8ddeecf2266e6bc187e0b8ffa009fcbf76ce3f5f6329682d7a5f6390bac3a32f43f7cace8e0089f3442dca0880f02cfc61f82a957bd1fa4e4c8725f8d1ae1497d06150d02786a56942a3e7f3b7c55f14b1a068ec75fb8d5c4937805b201b57ac2d03911f76dd4c10c5951f6eb7117f5fe10132d9a5e2673af7e564861726f468ec93dea1e7f0b755e166653f9e0dc24a9ec3516a57eb58f6017bf3005f5c6930cd2c2181777b001b7e726176f8d01bb821dbbb91dc3242b3721904ea591003b95119463ba9200179f877801982e9ac1eb5b4ba9730d90f579402503ad36f9bf0d90818645c999eed0eb43e9efb4ef4800623a5fcc0e189f0f6f0dcfb700c300a85de99f9e270f8b8999c544017a0be97bf7ee12452e3c9b298a19e107d6e143bf90f94a3ee460042dc8a83ee9112905f0962a967bbab4dcb73a0e30e2627377dc1191c1085b2c748e91d0d57fdad9ba1d4b8bd0d6b66fa49257b61ddfdc7bfc0277658d19c801821cc89e6fb50d997639e38b4525406a23a468c4b6f8b10520196c2d5a3021223c3a1db9d3bfbf5e6d2baa861b763372da666c9c9a480da4b25cc26269452c51a8f4ef3b31633d8ba495f7b62e98a9cbef94d4e3cc903a14534ef147a0ec0a89641bb68ff94b8e22f3e201d14b6219c38b1b9b8aebfc0bf3938f2e8c20042cdbab89e0e939ad5cc45021976c18447e19f067b4312c55722338403756f8eb99da62e91988961d722f7400a5d1977329ebce1599427e6fd0c42fe028f8c111507ed746ba2176bcb05410ba8084fa2c39780e1fb6a2a984bef187d6e6e7f5ff05b1f9221556cbe87cdbb5423910e53a386129e566f9f9cb5677831905395f39881a0299551896f7066ef6f93fd27335d7eb46634edd9b003734b307047d36b205edfabd1408c10d546d30f994325f20083cfe6225225ef500ee2401306d6f127a0c4561d4babed6c8d921b8f15cb29b1d602d8971b6e20a7d35dea18c000d3229c3ecc09a90d54a41f25e9e42570438e02b06dbc5c9fda16e45a000b852df830e3f6288bb3f629f9657ed539f453988bc42a9eba316128521f7cd5053513117b09c23848e381a304b3a56d229ef24108ce714cef21662078d27fb305159d698d804d0a0c8745588f8620c5de5ac369aae5936d301d21c36a4c01fc494035dc1f9a72fe518eb17b78ce3f330ca66216c98dcceedb30fa35e5c9958e3f02309be5804c6fe6a958282c88345a83977aea0f2ce8d12504016001305c7a51e5178c0195b86dfc22d5bab7ac4f3739be1dc41a98ba1df9853eb7b3ef61498aff704dea7bd3d1018583c21b25171af7630b6a2eec061e63b7cde3f90f6995afbde0fdfc2a3ab517638162cd01a7433b8419b9ec2ee510404016b3010907c2f71a2521aa97f696898994d52b5c1cdae5f80f6b4e8a75b47afefffe8cfdc509fd8da7ad1095fdaedfbfaf0feddedacb7394a019d85a153e40ff275b6d557b0dc0a008cf5e992df994d0ff59b4576bdaeac0d4dbb88cf5fc21db8a2f7dca84caa9db32efaf306840c03da2396725820ce61950e03c936e082c9d319154add78949efa902ef5ac0d26c2a152d00c2d693aaab055a12ef9ef297a551270400170c2e5ed33b4a43f39426adcbab7f85d242f968a4e8bf7f2b343b463edc8277bef2db7943225290301070007f8065745b64b8ae3385a68224f1b103bc023b63b424cdd01424955679aa44dee89bdb0ccf0cd99c4e18b4bbf3dd2304fccdddb13868c1c5487ed0aa55bf661cfb87723fcfdff3fe9d7c07c25a5948274b657eb4dedb43fd3adbdf3f35a7dacb4c37c9f099fb37fce39c1e66827f17d2ba884dddddddddd2114812baedcb5532ae6ae9d32658a67cd1ac775d16cc139917db0652958b070e1a208734438034a3455f47bbd4444454444444444444445ee6ebb6ce55aa713dd9294f198967c7129e3d5c39e316148d105337bee0c39f3e308b0cc960172599482858becd30c9b387a321d93018de267dcb3c6d0ef4e76aa273bedc3d44fd9bf9b44c9de560e7ad696b7992058fc8092fdf66388ecff3964ffd9ad894ff61b1033d9ff0595ec1f4386d310d97f04128864ff11bcc9fe356e040182f64443530f2821b7282a215e55574290c06aa4791bb2430d8a169134940bca4af6a75d5e5058d99f7e3dd18a60354141193113758215aaa5aa233c5c6129d18292fd86844ff6a75b196626a45ab914cab495be732146ebda769c2646d48c10e112220d591e4d6fe94b1cec011d8acc20049c292643c8b6d6da2a61f94217647f1c4ec9ee032abb2ce9477be971e5c9a4b165ff0fcf169efd8a921ecae60068952771eff7718dfa4fa7579441696ee4ffa245ae16f6fd33a0019a44eb5023ff356bdebca953a7a45126501368b64ee998a051611d12822a5c5f2d3459e35485479563849590163cc1bad26788ae3b733bcc790f61acb0f818d1c5cc991b2c99ebedb8e0ca8e2a314a5c38c1696a015101c321a2797ce10174cc71b4db438960c00d54766a6576e0c164da9034e56125f7ad070b3ab0903192258922649ef28079de7aa0c0f57595e763e15aa895e79c73cef9e5512e95321d6bd6dabf9cbd77ec19753f829bd028f489c260d8598f7255bab396ef02f28cfb9c576e9cf356579a46f3ada51867d05f621d3607edaec8373d89a45a8ee0266194925ab919cc269c7164f34ed7d127ac84396badb5d6da5ba9157895c396c3cc776dbddf5d5bedb5d5cef21d2157cb5d5beb48491d5d8eeebb8452ab3c6914dae408d592a74de9e98832cdfabc1ed99d382fdc2849464515b692d751d78cebb764b6508bd6bc7240512b2a7a95c31652ab1c663eaa4e49e9e86836fbbfb3469f720e3d628c39b394cafb65a1d7b464bf4f6bb556c3ca7eed08a04831e5029ba6cf29ba4fa59ecd9761afd5aa8c754e0ace1d83e603b9f65c30ed49a153c1931f27543dfd1082862346744b1a641e59446ec883c4e685c7173d03c157e8642f23e2b82038cc711c47454b4a0e51aa04914201c9958a24cb098f538127599878c9c982e3c475574ae3ba9e1d4d1b539bef5fcc1b539ddc8f652f8be57963b23169795440bc90cb236f89294a5518e679633a7263f2c1b4630ed72414caf3b624c4750a83f2bc2d717530843f79de96ca74566e4b60bc2ce197e76d098b024b57b8ce89c3a520b9941d11eabc6e8824402cbcf1c95662cb4928042ac8d6140b5203bac1c74f90ae70cb1098d355ac4a117008d7cf13211f102d188f22423c2790478fa7cec9f60d01859f9abc3943b8aa6e8bc805d28575b05c5c96531552bb3238b9902fdb42530781aa549a280843a2fcb623ca8893577f8b3ba06cd79017feaaf7948e9ca61f0c82e152cd3d5ae8b101137a65b8841c0e9d5308e372b3844056ac11a107c50e8124c34067c88d13fee469a343c359215010476d44bfcbcd9023a523164a20f8c03184384f5b979a5ce2a510ccd3d69543eee684b03c6d5db59c44011ad7871b87b63b6872cdf3468b21979fbdc62c7c5fe732ac945dc6f5b5b862f76bafadb5d6d1dd6977777777779b50f2d1f66a3b7bb1ad7e394e4986655e937d7dd1fe1cbe2f6a234ddcd9ceabb6daea9e87ef46e28b9ed5cf03dbdd56b715f460f4939294c27fef9779cdd660de0b37d2b2793f2f6ab3c5e44261c2d6a6f6daa697bb4db9210a50b23ecd40798e4a1cb8373491c54c53f4acda6967e759adc74a1a332bec2613998e26d44c636a65a63c47b10c634dc39f9fa6f3c7da8a6df866df7bff855f117f27362991f73d91c90726ef372991dddbcb35ee3e10f613fb3ef004b556a8ba588e16c37e622150d0cfec6e53a0b28dced94729a55869ae4a1c98330c4d008941f54bafb596a042a289143f41611038832efe3bc71976e4b80f276c68e2f738ec46553c016ef1af3bc269b39a9e98334fc82e00cbfad32706e0d098bd8e77ac6d82cb0fac1bc47347d8ff79dc58ebf469c7fb2b94bac9260963cce18fe3525c0daeaac36aa1065342fa0d82ded8ddc1155442faeeee1ec3efe592662978c491829f28d88a75dc72393a6b955dae5e1077de27644be06b391d2cbe1c9e02c2f0b59c0e165f0e4f81fdf4e9c44b7e3f60275af28b819d5849273f20b0139bfc82c04ea4a4277e6258a3042c84300b95c03fc9fa3f30187872778aeda66261d7513c15024df1a680826047b3d90c840ee57d3c0a85f74bf07ae2cdfe60235d136ab62eb21d6dd89a0afd1e9eddff79ed469d57bb11acd53d094aebfb083ca96dd1083c09bce149dfd3266dcaf3cba9359647992b8afd50980660ff8d39863040c9ef29f98d4d2009fba64a327def03937472d03d2852b26122541236fa588a91df37792f0c19df382707ddf592bbffc2257321cc2fb46328291d1dcd669fbba9a5e525e32e0e0b617af1c65b54d435e7c3fcb66e7f9c515b880f37d205321427aa09a112414061ec07067e5e87b96bab379dd6dd73501ddeb0a8157942fa2bf2b8d79dae38f56778fdc0bf295d617f9445f9eb59cdfd29c016fc79f19296ace4e720283af955f0c244ef67fe623796e97ba1e5862050e754811fec465cff8e10a8993e5773d3aff7bd762ad55e7bcbfb9dfd7bbbb1fe8745ce8ea58e6c692e812641455badb57786b59eaf5880b9c1d460cefab127ad9844f4839f2bfa33e8cf449d2bf7994e3804810cb8ff0f0fe0a7049a44b67fdf67d08a6967e7c38d8401f8617041966514d7829c9d463013e416ca257250febcef0341d0c558fe7e404e9ce44f0c7411cc5f08baf8e50f0874d1cb5f0990c399cbd7e60f05e862cd9f0c74d1f377014874c110063f3ed615581cb99bba0f76c20bf2bc2da1bd094fe47993aa4325c5c3124e2a4cc52188e37449613902474a2aea872b292722706c51449c10070b873894618fca4b851be469b35324974742c20bf2b4d5f9ca13a2c8d356c74d0c7576002289064342fa5ae1556a1aca1ebbbb4b1912a1c9fe267bc4c1829b83f66d431b83fc433882cb6c8e7118ca64ffb31b1a080947e8ffba31bfe697adb6ba25c939e7cf4979a843505c6badf55ace626bf1c85d5937f50ee8021ce4b34e21fd2a809f1dc9e605303c4db7d79f2abcda5ecc610e0871ceaa00ca0db4b5d676e5c07a31b6360e14e85fb5757c3b39fbaf74c5d0621c42adb5d6103e37a6b5a12e0e358e28bb09354fdbd1d16cf62f9351a8282577a740931e5a17422b7129a46fa285b0eca626da04e47b269125e4fc79e29b9e444e4fc2f48d98196a705ec8c2a25ce0a0e1a25fb07ae8f2b696ce6a2de922bdbac18a560ea794c8e7e549145513440c5c648b96c812f26b1e526ade022e5768d5ab8621660bb4a8f075a1587969a251a2ee50611bc45461755a32b840f36e73a03ed0c5c9a7ce538d6c91003f901fd8e48b0d06ba38f140e1c345b6d8386c21bf9ff0e795b8a240912d8e58c81c4d9b4badb55619f5b798c31d5aef1e2f05bd56af3de38854191e649b8764bc70a3696d19c6c1508fb72b7b4332fc39c834d31101998e3af2d7f64e9ea58e6cb9a68af99ee9cfa942c98deacf3ae2c841fab8c3f7615bbd3d3033adad3586e24748e75b9bfd5a8d982ae6cb8860e5f91eac09e97c0fccf8f7d7318cddab3c9fe338cedadb94adadae076371da313d9bd8da115bad9ecd178784f403fbb8d6faf78baea8b556112cd93f7bc491c3e6e8fef800d1f66ab93157cffda21ff8cfbf46cc16e0cfbf5557b55c86e18cebb7f2f4b2796979d5b03c29f4e2f2eaeaa4900be33094c9aeae6454611414549e2194ec32e59897ed63f5e4190b87c0c9f3ad9bf941f864e3d8ae46e29a2deccff9d6d69c67edf53ed07e1fe87520ac7aded761d88f779d87b99fd88dc733e895a6965fdf7aae175b42fa1e972785e0582919240e601ad92f21da0f4ba407841916823855d87fd13018f5ed0a2e47cefa6198035a0b280e358066f03bd35c024d6262aff0cbcbcbcb2bb74c089727795c6dd4fd1e8009af3cc9eb72a3fe10cbc297795cff41e5feab12a3075b82c4a269f43d508afc7d08e5495e184285503fff4520e3307bef71810fc6c632fc193f0e64fc74f6793f6bfe7064fcf43b11ac73084a9717c7cb93bc3b1d3ed10f3c371f53531f5af6f4c0099f72bfc73555f48b4e1e577b5c1e579e2b2e47f53d5088014918255d6d6a681206890db344f47ca040d3a6c70a4880a1c10a12fc2507219562c9b261c458e7a1490ac90f4e8ae4599226eb059cc525005e8f16b2c028a1e1d683114976e63cd9d266abc987100c110dfc4b094ec00245c6cc52162d1ac832670839533600e921ab2b28cb8821365490609119e2081582e0833b1c6686eeead04d6982e1cd983234a8253534753514116aa3c30a0c6762c05244eb871f6cb09beb04c651c9a262b3b2ae781e0fcb5e1635c744ad69a18725b0bd93ab439c8724bc79dea2dcd85113e41665fb7e68dd89aae11a6e513184b869308e4aaeb99c3ee4727e51261a1585875c522c4a63b9a475f264c1092ff050e4842a208a90e5cc023cf0f045c64627cb0eb29c5dd38b36e5a65026b8ea618d5498206c90204b5aa504e64c0e61725092041eb2a457d496fb27f58a2ae279a2a2fa298d4a85dc4f6b5154723fa685b2306a299733a6a32f970bc25928b9e0fa0431e951075eb5d73fb8a08c8ee7254f892c2f71ec4f9e37255a50b24230cf9b922db93ce2b4429ce74d89162b205558f3bc290977aa68343286704e0afe583b5e114f15d45a285805461c39c81eaf4c24f6107943bac8020c4997947025a921ca0f1b7850dda082b8044b114aac1047182173c12a7a5043d611f2e3c02a22255952457e18aca2076dae92905fc7e60a49140face2c423c6c9870face2afa121c1058255c4f16ec28c4142e6e8400a9337647d1771d02a7bc81c424ec83a5671b699227303e9e23cc387ecbaca6d93c366863fd6d24f1ac20409d245a12f9ec2378b4c784ae9acc0378b64619d481356717c30bcf2bbbbbb5bfc7ec2400b83d5469af393cdffa2598afe81894f2416cd8e58b878e11ffb212c414aa97ff8b63db7d7b8bbf79af995958291dc5f6b38ccf596bb7b9f71776793e97b7f95c9929bcd9adb3668a6b59baa7177ef347da6c8ddddf61aec3277f7dabde6a8d5f4dd127277afb567b3aa2685bb7bafa9ad66acdd5beeeeed6a6ceee349aa6d50dc902631406d8d1d420088fcc81ad1502eca55c51851e14cd75592a5aead7b77d8b103891db433b5d1d446238a192c7975d9410f97958fd6e3577d45cb097ee52fc69b5a872b4bde44bd6a0a4580502fad9f2658424c2d281be630416d592e5eba64fa5bf78a52d9a6dc2b17404d595068b840536bb5f6d6f432bdc4b8baf038d328501a8d8287c9327306fb96579b6ec0fcf06a3ad8afd486f0341a6d87d90563e468997179936b0b3b1afb362bf603cc9bac2da2223146542012ea406acc1ca1da686ca09c2c4b6c5b4e69341acd86a7e1308d46b3c1a1a1c1a2c4960e7068b000cf503953054c4323058a14f45ca191024d37ad891ac9469db59a66ebbbc91095e9d6168d231354ce54399211e00c15343464366e48a3d16c5c4ae909b037c579c2e8f3f89ec26034edea3e615dc708e8f0517105c19e799d6e6bad3ee703aab3c59216518f6d8f326ec6e4fedaa006627996716366aa825f6e51b6b2509e37286432fe69e48da58d9b61de738f394f9c81df01337f9c58ce5aee0adf13cb17991361ef8936ee0cf0699e30ef71f93d6c2c218324924822cfe0667ca38d9bb9b77173799ffb8f76e20cefbd710637ce180ac1bee7bde84e4747fd062cd8a7a4678c952d3b33b0214296321ac2dc1a68c0e184d7e4c1973759a4aa7e90f3dda0e050b10679dea054650cf2bc411942e79b4562e8d8c8696248481f02971e2141043d739cab38690dd55126a842da54473412ed17ed6e6d7094f67ddc57d6b35a024a581211856135f2cdf76c82294c1aead74176ef7fc393867a94c134dda8c674a34efcbeeb1e7c11ba07471c56baeb5184eebfce1bbbef460ae74a9d15962cd5a0d1c82337f2cf72482b27f072fd164f40738b267684e5f4aae149267a84e5e4ba4302976588d033b7d1a61a3720c03d09e687341a2dcf11808e08cb39a96c9587e18863322824c9fdb5311e5a14801629b207b964f1c48c93dc2ff392fb7faa4dee9f49e5a672a3f446f6848a05c6a187f99c429ce7ed49d47d2ae2f9f0c449c8931e2c58272d38d2446a4eb6a46040d59c80410283c8573f97430d6278844130805161900a638240f243103f383378be38356198a70d4f1700f2b47989f1e19b5e6b7577ff5ac770d6fecf80ced93da1edf572cee1ee67f9fb92b6e28e72453ebbeacd5a6bbd6dedd0eeee76f739e79cb367cf9e4a476ee4ee2ef3ae2fab5cc7e3526b6badb55a7707359812d23ae79c47d36badb5d65a5ff86691f7bc6f6bad0e54e79cd77ed9596be79c9f091026fb89812168ad6da439a7b576cee9c5c039a7d2911bcd5a6badb53ad80e8bddaf97bb2f7323ea312853535353754a9d9a9a9a9a9aaab656d529766aca4ad514a787b6577bb98e3b0205d5242aaaf32e65a2d126cf121a43642605dd42b7d4f0c2f1f58155045c344680a90c1b074680f9d14cd6b0f901c502c16f059a456b3d6bad36c2a21f501a6855ee2e14cb663bd22d20a01081185a93fecca25bda684603dd92fbc10f73b07fee5aaeeb2e08ecd5824ca9158a38746add9c38652b00aa2b5aa10db72654f01686024391a64eb6b53c867e56b6d9bec5d6d645c98e14a6ccf0d5c47e8c8aedbffd91ad182bd9da0f2d8c277ddef440a74a9e1a485b6bad56c2f2bf47f6be3199cafdd5719422fb73866cbf36528a6c97ccc9f61b06c3566b2d9633d93e088d1466fb31ec47a0adb5d6eb2f6102666886b0735965a0a010fd233ace82ae42daa7962d6dcab628dba750f4482345090d11d6a71f444358e2fc9884b75fd6ce223bce0899640ad6304e58d64a4713b08d9bc12c3a9618a45f3872fdd4d7d41372c212cc7e1fcf24fc378c6151e456d442a4b296762884fbdc73633914255f2a3b9a209465cea6bb6bb750cf6c9d301b9ddba5b27e16cd2ea83c8dfcfdd53cecc554e1bf35a7077481205d3d9b59b93efdc4dc61176bd4652dd47d7d163349368b665299028b9c78c531ec9950cfe6d79a95ddfbe2a918dbda359deedeffa2a56cb5f6defbd55a6bab15e2388ebb1978f7782679df8d0151fe58ca7361c5097bd2e8c06449149b0e26a0101182c4ca8e94145b0bd9412273ea64b913654c9025283e6dea7c41e1863e3308b1e4137380012039c245cfad6a4a4b14e72427851a6a538228f3e4858f06515ae043844a1d3c559e95075c886386ce55d50d743c480a676a75c0703112857be8e084291f6c52b093664d5d81050b34ac19b21404535554b74586ec8fa36e0f069059a2a40f973c607c4c07040a47682c5c69e2c5737292fdb1147744922f4b8931437a2011030f5a5ab54d100e44a4e0d4c34a1e1fa2ee157f2c051a996988c07326c994141a6e3d47470a39ac81a384cf0a397459d259b5487244952c5053a2a4c123812878d23819b161091fcb030664981421a4c89a1b93630972d282aa3e5235da90280f4f0786d0010995a53a5288a8674020074d9f21564a86ac89fa9efcb1d40e2b40e552d641a63bac402bcab4d68e5c64eec7dc0d8a08713bb076e4f18fc84e0365b29e296d60242c65d45fc78f3368b0981903430d07b20c61e893fd6b11d98508224b192f6a92c8f142c240000ee1cd7b32b54bc6b80993a429062c575e90220fe8700493275b98a2be6aa62f3c79f8a55f50f3421f186cc8fdfe5a987e423138c50b564e1cf182927ca2ca903f2b33ecd39f2dacb8c154d14f6bb93f057d23b21630c3df4729f7ed58933ab0c51081c651b7db0d94584071df60b6987c961290fb8e4398e4e0a92663841731aae83246e87fd11f03ca53c1feec5a7bce19a5b368b6a0426349c3bebbbbfb84bd7d9818f6accabe3a5bfcdc0a838d313e3055d4e8a40350dd606a526bad55b9c2bacd084450b970fe2e581bc9849fb78133a780264c96f8125f9a28815d94b8458d04f4f36729c21731f61a35054c04df45a06f31f60e830164c3661028a6e40d83011b87204033ec1d4033ec03313c29451bf96c5609cbe955a391beeebb231573c5cfbd3f2309464e3868975cbdffbe7e0d124cb051c2fe036163d919f63fdf6219863d74902a087a16ac20e87d5072ba51f7f7b01272340056020cc6e77d6fc373f7d89358b08212ef839225be8e4332823e68c441c9a0d09330598f54cc15f5b915b9a6982a6af5b21df154b115de68a412d7b0d1c2cb3548bce146f54b982a6a4c151c2009c5a15a6b2dbcc1a757afee7d7d6aea3ebffa9c1f9b3972ec69ec5ff48c7d1563e3f7ac9d163ac9f3668455aeb99b684de91214d9cb542c813a80cb3317738e1ed5b3d88cc56ccc4e2b2d51575697524a4570f7d8777737adbbbb5b29971db394d6148bc5622258b5c9ad94e7f42a9ee44dfe3455b437b1109694468b817798d026f48ea9a28946699dd4016d6aaba658564d5aa2aeac6a6d6a8f6a03e47eaf3255b45b59b7eaa4035069a935d21cb3d51e95bb3d2bb79bc9ed6c727b9cdc6f27f5a8462abd4aee261dc57995d9a2c9932853f7534a9b2ada00533628222ca7191270f7fd1c10818dc671efd723a5167a6a1f167b2a964d9b352a558402d991296d168a33ec3215124b8873ceefa9088b4d3cc5ef673a97dd7249e010038ddf3f2367ee0913c1ca101e75e4f0276c041c3ac8f03978eafea6f57bfd340679402ab45a664a57a6fff589329e956999295a7289cb4c999281f22c33252a9799e264ffc6ed7b2b6dbab5bf40cfa9bbfb8650834b328a4ed11d5ad1b3dfe1dafda52f44d065738f24f4cc5170fbde7a6bdf68a4721291b9707840720966a763f7df776729eafcdbddb34512a60affd93467520736282d55d995b6341413c85544562e295511585758f42a7195f30beb81a2542b09371a69de5cc092fd715014cc16d666123c49461bf98b305578368095d0bfa44a409a660b8a8b50a94c5100913e5064c10abef741c9efbffb13fbb1ecbc5abbbb69d75a6b77d7172e76b436fe86756ddbf6da0db6c2068952d0282a896acfe8ec19ee1242542b0e4d30516fb0c849a6880c55e4478fc0d1a257ba507991a16c4f5886637c18a165412b521580b8b922eb05adb8002275b8c82a8e58c88f03ed0a22c2be61d1ca65512e5ddcaa3ce5fed95137bd9fa110702e73647f4a99e4c1d244d617947648f122ef5cc143233b8d9a2d4d138c0b2dd4f6f488dad3a60e549257932bf2e3c0168980902ee2a05d6a4f4ec81c778bbb787674d808b9e2f261e07befbfd1fbf9569aac44755df73a32c61dc6dc1791589ce4bdd77a4d04b54adba12b9720cccb4c532ea76d87ad30a9c96babdbc95e279760ad2416e73492c2f50c8f325a9c6f080338689d2bd2fbee6dd0ac8121fa28b0481c28b0c8efbba71c3c859f272067cb072f5547ba4ce9980109255439c06083172672b6c04e9218fa3051f2c38b040188ed0ad51e3a3fd821fbadb6f22ccf9b150bf966f595e7cdaaeb66b52387b305ed6cb952c77f781c8a31337e1d798a252ec16ccb1bb92bbc5529225ff7e7441d998a363cdf91bea12ba657b1ba93cfabedee765c9c22b06b43d51a273007219f97270f0b486725087602c555399d70ab684e564fed7a721bd410e9baaeeba4d832c7711c77b99b94accc3d911cc771dcb5a15e2b1e55d18b62c87e86803c6f527ae49be74d0a975c1ed9c21df3840f5896e8d01a0a539e1b6a53cb4d13216c34d2b1dcaef4089cb5a864edf814b564664c0400000208f3150000200c0a8703e2803016a792aaba0714800d6e883a72543298c8825190e2208a611808629021c000409031c010e5d4dc0d706260ff91457b5f01353193402f72bab5eb96235f5f397a294e112b7ac4b82985396245f84e0c24aa7e109a93b73c63d6b489fee112f7931643ce8c30a31377d1d37cda4748603df18c3b6247653ab958487a9173ecffd586fea4b6d412a877390f3a96d40f7a847cede324f69557ece127f5f96d9301d9fba4a83a3749dc7338c596ee5f2ce49e5262a6c093b33f7dc3ce808f4efb0889bda4c53f792f12f83143de4b10a4ed154e9c88fdd7cad33f4e42f691a3ffb800206326a15f9500b2080274cfeec312a9f7ebcca958bd8fe7695eddc725f44667b1f4e882207f3f707622f65f234ffb3889dcbf9c3811eb4f945fffa084fd49c7058dd28c276ed6025530e5e9fbf4a7f2096798ba161bddf88fc4557ab614f294b2f2b2f3ef4c3c15eaefde607116ea5501357f2f7aae2846669c96c345c185a29a5e3961214689ff5c35e13631ff2fbb8514458965bdf1d8b2f3b8308c1f38276f0d7b8b05cf9722c0ea8b5102681fe1169a704abb0104bbad057c6483658634b5b6be47b280f48685a2282ca179c57d2cb6d215b34469264b6ba87b0de6a7ba830e33ee2ca624ce9886e5d27d553df0c415eb92304d9b5bc62f4c444f07967e752a884ff55013221a454f4eff02da4aa9ba7c84370a4f996112868f3eda4671c004dd4fb7f69f272d25c214ce3d254001611877a5d9eeea29191994f42805f3c1eaca5d991e392105d2555e6479ecafaf302535071130ce619a59049bf1b6e4f6aef6f6da6a5942468acfa81e30b37052d5955966906e46504ecc2de1a0b1a0749db70ee129a645203ede094b64ef7e5a2321b3496cddc657b5221ebb1e49808a15c43c0312bc214799920bbb27aa906231adae80686041dd6e85cb8c0a04d39872fa33e6f8e8e9a691acfca024e1f9a78223e0eb119870a8ac3b5d7566e6e42bf7286871696b852a230b4d3b7b5663951de0a2283f79bb875139b8fce6919189c02523a9de9235dd02a39269afc5a58a1eb46f02dbd55ae30ebb3367bf5c78dcc217c98b8781963a8b59895fa556b79bbb8e734f48ab2bf5e12fb6ebf34d3de28d3fa53ffbd4089253ad94eb20d25e350887cb8e08c2c7785cd5fada830a2de069bdfde38cffbc7fff618bff057ffc5fa46afa3a9ae6bf198295d5cb0c63683410168ac14287d894195e8106468ddf256181092206e6e017e951178ff5691e9191633e31e6a18161172af2423cdf315a1d4b7c6922d331332079c2c04cd0154cb14943f3ee18988b50604869a570f987d469e92e8be3afe175d6f241df5d37694037a8b9ca764199567cf50ba0fcb55c2f7041586c1b41c0c218a4c2f0a7d276111a6070358eded57b22f90a43c5749ae44d6c508b9be3b011262207a5b039e1de50ada9b8ed35d8c39790db7206e4920fe9214c2c04603efe1ec5c6ba3b54dc7c3ca4d5d87d4d7053515a701d16dec6abcef9556812bc73de79c349883b04e66b01e7a16080b41ae985598c39e3f053fbd6dd30283d77f54ccf9910246215a3631ccb97199a1bdab1be00e8493ff491f6711c633acb037693873ab10708911fe71135dd1472542d2590eb7257bc5dfaa1d4c9a1cc447d525912a06c08f24392d90d648ea8b0dea3f424303278d842d5a8d2e734e1a4610f2c267a0a4257080d297db59f4b9f2cfc44f70138df5f3dd57010498f86cfc9b92eb4f398cb161e11333047502329648e4441636173301411498c9d31633d87fbef2e095e0ccde53b9b91641861502688d790116f5e656c483a859bbb6e8fe5c0099540b4bdd1499b71cc5a82147be4c9379300aec1b336a988800cae1da75f411c226cebebd9b5ab400be7ec19112e22fd4b47c7e91e4f932bacfedb775eeeaea29cf80a8e74a7567adfb2ee552165eda125b5058cb59091ad4c324f6035c6de88c1de8fa94d72080a41629319739e334e6d2d6ebbcfa8d5058bf727c0b9da34c24c30f0230c0b0d8eaab344b3892606778977e5feb0ffd6b4c500e8578c3ddbbb0eb1b6d3c881087b93103a7bf6772a5a66e96a920deddb0ab5a5fa0aa15184dd09dc4b7632ea029cb928a765c737a9b9d3d4b22151a896bd15283c28161039e3720aaeec1308f06b602b390f98532a3c18675545e0f7a95681bd0d2eb3088f8f4420730e5dbc0534b14dce2db93bc648f4dae2cc34ded484d230ab1666ec813264995cb802c24ddda0e081651158e5c6ee28492286508dbddc4e7dd9b7b0f5efefcf113995be1ab8ed9f89ed3ca03775a2211190624b15e3b08ec7d407a54b8695d6c9f8940d4a1c90c0aee91248aa53b14d6c8fe5d7bfc781ab359b29693a40689c71f565f602d5cc60a472bf099559c458bdfe4f7d223641471aae71030e2047c3d00ecb139162fdb66c9abfe19d4bf28f974e6cb841908abdfb42d4a1fd110ad2364411ce60529037fc6c18771b25d4d2e6e354b8561a25f55450964b587232b2128db198119ea2095159ac520a4c14f7212b14b3a1ea1c2262fb18fa5880d9f9971585543d9e1688dac03e4eb66687ce09f397a049426c7f844682ebb3096021e6542541a47ec3999473c463c5a6f2d92cdfcd04c87171e692808504fa1a5fc1b0f89674318a97e13e5bddae94ba3ed93db1651da17b7cecc691c6c1a9128411533e6aaecf69f93a820fa29a7270103145c128a114809765c8ffeda6b2bef4c1453d0ef9b7c0d4548a621013a87797c5676426a0f71c9f0db3e2540d4c730b8abbd97dc03dd2a02930a52a199f40ffff8470048013b64245e629b50b80018878e6effe673ea745c68336e7e202157c7826075b0080bd3874a24c61bec107f218e630743960773a53d676cae0dd7aad12d574c592883492618466180a6afd54045759f386bfb1ac802f8fd2d943478bee47568cace032656645299227b482d91561364095a124f4a83cc0bfae7bd60655768ca744d09fe8f9a9604ea9aa266757e3351c5ba1a1b655559ce7e34aadec251a4ba2c0476b9d4410c986a0f44100ff5b5eca05245afcc5f74cc3dfb28309fe2f164ce35c8d2fea4b497f098f83cc6bec0b459581be27db0a297516a498f6a82d3ce52633beaf8a5f739c9489fc8f733529a8c90fcc042d7bb2c38aff73f6439b5299d4ddc07d9ff94dea18b100095447ce46cbc1ba6c0084f2f09eac00fc807a81bc133ebbb96ab42f79107cc77fbff474d0104fd8564704cc6deb311d351bfb6232564028b8737997fbfb56449d0e984207b58d9347fab5daeac6dd87dc0e9d00057afe654990dcd482646609139915492230dbe39d6de53096f2a6118347633d85d3f26d79daeaa5d78ad596997d5bde0a25e918316799914ff6796ce01fe6f0a275f004edd4a241dc80af1ed34fc4c2561bfe867ac8ab8f4654ca9171c97dbaad7ea293ac4be6893b3ff25eab397956ec1627c07f0266051c74402b6b8e77977d680db5c6d371c9414d3ca47692f002ab27533fd4f210f601a38c0334bd1a803b615767bda68b36523fb2dd1d322285202360b99f6ffc2ffbaa79f403cc06c34a8a8fe22b5b03dbaaef150237026a1abb2aa6e12fd619d76636d5a5c982a5b0d4846059b8bde93c63a399d91eaac6b142f7de254233a886d46d1942bec80142b3a74851a366e40d0afd1524e4f8d2e8d8b7f247f22bb34d771b1f548be48e5baf06d8233895cd3757298a8c19d15fcdfe11cf996fd31eaf325c4c0c539c0a4a595bc941439923fca75991ccd77c0f7f012247d36962c55f5145a53fac608dd88397d51176d92ad534467f4285a13c0ef927eca7b2cd63c1e1f83eb2dabb2308efbd6fc2021b2c2a326fa4bbf7b5ec6d7f1db6430162d7cff8d5d076572f9d5a5d19e53e257540657d985efab09535477f9979870d2a4c6a3b2238c5fc3975bea87ec92808f02eac3e97f3965b3675c50a80684e9421377b1f13d20e555c403900d9d23fa9f980b4e80a96386d21b3c4c8761eaac75913acce754afa2036e9b309a1822ba3e814219229fada09d2cddca00f8116c2abd3a4eb71d60df75c16bbe2ad0ce24ca1420da8020b3ef8bdaca7a6208944c0de4878fea36375cc8b3b091775778f6bb9552e41bc2d33950059bf7a6d3955684262af3b59ca482bcc373718c0b0ff4794b67071f58ea784c207749aa69969a92dfe67061ae67e70d41f193ea35036c6a819e7bac0b1d497de70ec538b4b951be18c2097b169a46e2f68646bd55af3020445321ad404297115bdc8687cd1b48312234ddee4644c43ceb5676cf218b7775ce820042eb6738cdc0092127c9573d12021c5b239ebf423a4369cb37ce538a26d8e97e30a1d57136736a2c1ca3c988e90305ab881baa9fa11e1a3310e1ef92b8a81f3fb3b9023ceafdeefcaa6076e9b0019589638d0c00b9ccb6c6f037f0788ff3808044f1aedea9dd52e5d36c1eed304e59308d2c92c9c0e71a24081f23fd49e452afd583f73f4252447f4cd4d270b5983f5347c4113a35e8e25935031780a05a04bbc897b92f99047aeaf846565bce821137e6e9843267f189704a2ebe197f74c13856b80babe4456e3eb0bfe32b789b80eec042ee18ad9af05c10d0a51d31dc5a825812465952c457bf4bfea39972162261836c588f773815d8649cd1a4ee61b8011c5f2a258a997a1637b1ffff10c8f97c15645b8fa3383999edd4aaa9762afeac55e2d7aca666794deb1f96da447089d3a22069dcc4d286239755b2e97773400934f887c04c54e062c2c030b21045ddab9ab5a836272a6d032952865eeb07a4e61e84ad88f93213d7aacd2841e2c548aa0bd453b5018bff23caf2ba531505dbc4389de4dacc0a2a503fc152d4c5decf8d4a3294fb6b074dce12585d14b4b4474646c48db0e571e5600a233e7977765aa7adc8c9380d3b491911f1cd4d2b88c417d34f02cdb9d7c2b7eb1068f91c56dc51e56e0bf13c5dda27db00207903f9f4a7035bf6c08eb150a9c9c7e419678efbdeef0c79e1e0c536600c5f7fc1c426cd011cff77d199ce9aee8e0fcb8cf22393c98811ff284e07ddf41c36ef582f8303314bdd3c1ea91f08e06a005b48a23498a68b01537cf2771d51459d15cfccc7edf08e3a4e6a31957ea51ba1717fd3dffe3a28b2c11529cf386bed7aa2581ccbb5f155900f9fab6dd4c83b3bca7d0c30e21ed08c2ecd1309194ff02a0afb872371aed068a9178ac0633fa0bcb82145677b56203d425208f250776404a6f1c7b0b13ebd14c3ea5427e8bd3d9a6138c7152a19bc21fe6deee087c84fb7b9d962d8d3e467cd8897aeaa85380f4dc9a274efb50ef97f2f6a6be56a25b4cbfb17e61bcd7bd5ed8bce7e172b0cd0373881041a1119d5c9774ec4ceb4f2783e494ee2b4c89ee29794bca175dd603a1410d811b0cdad5715264c87a0fab6fd15c5a404deb9560c5bfc16eaf7ff0aedc2489d4ce11da09bd98e080517ed66b5d61a741b621e539a0977706fae7ca22f46b5782043eec65b9e05f01114111721865721e817e303a4bc7ac942ac72f2e384e582f8dfb3100630b35f435b06fdb1f4ae58491a4c8f99c58f3f4d5f6b93ee538d93671b3c1befc824f943fbdf056b13465b39fc1f032d2880bd6bc9dc708018b181211732a9a5c62ad70fe1628db9c9d7a7a3962f831605d2311ef627a801ba54cbfb288a396f30abd0dcdbe313ae52d45d8db49450c0cc0b9081ae93a11608962dfb1a0f05525e9628937eb0ddee1701cbb49ea6d0b1ab08fd9a9822e835b34af400d504c9e928c86c68da3066fe5584732f0412055d1cf256a63f14ea3be339c621876f7c80b10be7a078d26b2d6ebe5ad83f7df04e1cc8e2921b02583c2767620b55c66c98b7163ecde3a8adb874f77ef101341b4e3117623de8166aeeb81a2551988b5a20e206bbbb253dc55ddaa1349aeafe38e4e12d305d7aa8ac8102e621b2acf717669091d04d95e2e2687b6f1f6724b4b175460bf608bc5e18efe5e2c1a46eabaa5993d69444b42f11ae0702b0d0cfb5cca75cff19feafa13d426bcc614392d2244691af5526a0572b173911403937a15adc1e802aff7231859947050e48ab06bcd8dc88370ce78f43bb1cc1a8bfd8d66ac220544ea29f50d935d2e2f13a523130ddbdd20c9cd2457d50411a594333ab6f171b6fd1a6da081b1a1022ca590107d3d71f02ec1f128f7c6c80e6e4219363ef0340c1c01f1781138eb342899aa4a0a7bc79bc4179524a19b5910fdfc0e97f82340fc1449290664247a63a41b877fe80b9ad748d15d2ee0d68969b69ee7cbcfb989e96473c2b38f33b92a497f8373600c729e0f46f00945fd2e89ba1531a4963db7f3629dcc7f3abfef5fd9a6d4ffd4fd4e06f8ab1740f8cfab4d390e3fccf8efea50fea9d5095e8097e2f066beebf13d6fe2eef3521ead22fc487605109ad594956e4f7ac29ea8649644a24b56a4594bb8958bd68b19e320fc1f2332f33c544bf30b791998b412547500c1322062a5b7b85755ee23996b9d1cb64df4690e2b27fcda198758d64a9691c3d41d88f4c4b29412a2c79eaaea92dbbb19b88aab40670e176cf15f4430611286f66e00a399f694a965d43297121009e46b951bbb8884334af756771b775702b1c6db2567eaba538ad84decac4e4021953b3771eb32ed6e1fb888b492af55b8aac480f44f94028aa2246d09b77af9dd25f7ba58722d8b71a02c92b9fcc845d1fb5096edc932416d4ce73fe38e5ab1df440bd291e7f8e1da84b627922eabe4b4aa8540a995bf202fd2577764338abc89f522548b0b3d55b0bd8675c62194896225e3160504f1def1701954f67fb2dcd7ba4defb9b1e706b7cfa5267f546a62cb3c3c02216d1d3e7a63b4c604bd85c8b285698f643eb3f312f7f7796e6d0b185bc336ddae5aa45d0a3d66b2b9840b7d34c840f0a32c7bf733da87f0304adbf78445c61d476699f4a8f4165a0b0acbb6ad3970622528de8364a4e5b7c48c41eb452470bf72aba91de15ffad2b8e444dcc07594e94d90d55ba4c95a8c9db74eef8e8a5b764da7ebb8a910cc5955b93bb29a7ec2c7b34bc0d951b8f2475f8a33c6406b54db773e32774c1d2b7d2d4271c1581ba57c74f6d9f4d14899f1267884ada9c662e5195b8051c9a3a00505d09981d4947b892da7d42a9351c3de283e64d455956ed8fec1de09737293e790f9ac85846fd674be46d0560bf069359336283ab31494b922e58030ad4d2aa0fc751fde9c1c5afb91c2477145d44595ae1503cec8f6e2130816ee626ca53a5827fe4c49ce089e07f2c2d26d7d254ed6748c377c70169506ae8e6030bd04060f6201f307619290c67c71056d84a4ab7b07f80942c5ca85c43beb94a7f51dd03a4d13d24772c00868bb3b90c75b4daa61112a182aecc2ae4f63150074baf3b7c9aafc3507d845111644f0700718220a1028f708d4d947ffda1af51dc12a0b497359d95fc33d5b213fd623049973be0d3dc02256eaefe5fc4c946597417a0403e5017e54294342f0ad210c711c4097e15aa59a99fd56e26dd130945340ebe397ade5f1171ed7f10e86e734f2c60cf9fdf7de45e1b0c65b3ea8bb2e53ce8508546f2c32538065a7dc68851ae68e2ea2b20668adc945a403ad1d6a21ab2aba6ba8980e76a86b250b531db5fb4b6a40dae8cd585ca9eb2b88fdd95296e2b02ff5fee79f1f558aee4050aed2830e5588a1628e5fabae61e9097e6de01a211e911ee6f01d8acb6e1f9d30c65bab127cc3609c25d7ca25474de1ce796d9734e221a564aed581a8c5f37e9b3608afc6608053a077ba96a59bb5d0021aabac3a2457a741a88d9e0e5ac9af6b297c3e90ad1031a17bf44eea3a040548359b230c4067364969e88e0c284d60d470810a422290279008237a2d337ef74d99d098fce2ef3c04c2e589c056fd6abfbeda44242399835e8cbf0b4d3742337c542f289ddf4f93c4e6b6b9f25fc59be0f9d2c5ac6ed7aca79ffa9f5f04d3fde83b72807b63700fa7f17bbe835078edec3724df0e3c2998b6a3ee8c9323529b4cfabc9b47c288bc1585933152cc3196273747b9ce6408f43ce3e91352ddaca186e7955d2ed0afa0c443e15a888c3d032d627e6b8078aac7777ccdd55248452b9c9f50b5b03bbccc3cd02cc2deacf20929b235e11c27e6562d4b9d8393140e837a06916caf876c464a44c6a43f3a506b5e18ded26995dc95483d60ac94a87c1196d7644e3079dfe3d927a3512ca3fd70a5b2d292a70552cc5b8d4111dada812e9c205fc13467e0e9961084e10bbb16328113e2e519c68dc9c3e5bd3c45d5e4da7a80f6ad432be1486ca5af16522e4876483b65b57a4cf7a93320d9fcc512015c5d89386018a4f66e6328c17918e09ade1be41b10b47eef91759db823609a6e92ccd37e7b95591215b4b17101546cb63cabdbff11e7786d3210c763c2efb80145b0765463f46807bc1612d8a99a8755b4fb54b26bc70323631570cbfc9aec314fed8f55f4263db481f3ab79349b8a94068b821e27f2c762a8e61a693f1b101b417726ea68bb218e66eb6c2c106d382e58c7e78f30167e96e5029388232956815d44797f19eb690bb07932721751a41ea49e9391561f0f2368742964d7d0d5144b3a6b3a7efce558865ec294b57e1f8009c4b0c9e27847bce12f763300c60ee428ebba9727921edd9958c2edfcb54c51d010b25779ec3226c352267ea47c460636ffcd8d62ce21b08eca8603d179b50c6d3b021f28934497f8cdc6a9734a2bb1771e99ffa270d499738f4794ae1b301d680f669eb4dc7b18d9db3987e7b6b2d24838aa84db0b0ef488f724249d2c1f2087c1eff68b69349909ae74a1f0ac010b0b002dfcd5550dca050873620c2faf1193a8983d4151bc08886a1b776f3bd4d18e451b6e8863847d95cce003f3ba8df3d933fb9743fe02a69e0f2d171d530c0404f0c9ca3d44646708255cbcad64e0ab3c1d822121735b2a87ffa17e29d18b37cc3a226af691bee67235d981802e536077c87c573f1db45e0509140e9d1f62dcadc364f01798e484f555f86abda2c29704072943e9c212f7d0929462bacfbd4b2cc2ee37508c0615490ef8f408e705f3de00d2206c7b7aa815edd6c58ac5c2e564063049c1f82fd9a9553a07c7be444c030f445fc701c33e5b594408b7ee3e7da152baac3d04f13a3f9026dbaac3576541b185998c67a7e8f594f7d39ae0e94bcd6dd0f7721f88f3ccfc5083409b058c92c3984b5be2b408801574322666288a34ae269e104e3f8cf555ec08271b1bd5b35a27019b13c4cf8d4f361063989c1934c07e5d9a70de5393c6e408e62a9e0b0225eaba0ad49149b3e9a50668b408f7156568e4446994cac90fbdcce2b0c35759709644eec8526f3f0d2d0351f4c640b319379a5dbca78ecda153ad7f2047b3ac1f3cd9d8985fc71e1433839462fd7fee7ba34f04c3ad35ef71207bfe3396c67bf28a876980441a7b906980a6cf29eb0ed23041d0b64ff51dc543d44ba34c5ee73c858792315c542d8a55887234c594d35e341a21c85e5d34d6a629528852c3e2e50b05008dbb44f39394898b161dc72a6dd5ef020817cb9ecf811d1e743ee521f9cdaab7c8ac822eeff5df003e19e302744b79fa3d7d4f3fc11a186c2b6e79c1de282249b28f259e0f8481457836d8e3770625fabfcf4cf394f8ead59d01d7042faf3c80a840fbabf65f7dc81350fa9d8fa3ddc517c5bf8c0caf98054a54a7b85da70a14e4c10f7103834a19d9694963d9427e004788b1b344f0142dc54b95ffc7dbd304eb0184386cd80d5a468bf27c8b2d846ae5e7eb2d9f5802b94586cba55dc40e00266430c55435b8ad150464c5e0878f059b5d7919bc1e94354b62d4c5acaf5f36cbbf49064846e19c1161aa2b88d10374db65dde4e0da061f14eac6b1a6eeb3aaee45cdf9404f21e29d84bc55ac26d86115f37173ecf0534a26bcd89b5862f4882fcd12b4e2f21b0cf59b1b8237645ef8684163f8971d5ea20402629cd2b55488619ae541b9ef401106e1146d9076af9e00baf4a503319acb542d660a49d99631e58486845bc66fa585e5046f81713130b63dfadce514364abc255a71e9362402ff8b73ea0af2b2af4591d245fd77583939b2e094957108108a1e47c8d314043c0d68aff62e50d578141942d6a089b566eccbff7a36083651c792bf7d6b5e10533b9dd64e83aef1e24021944c2a4b4379dd6960695c3f2fa0025564d243b611024615a2069d68d3bb6239650debe0773597002508f7e3e69358832f4784b99ad67699768ff32c3461216f8c11e13c28104903791967cd7c41cd36a4b307388135f19ecd68630b7ae5fc1a048897ca885fe1a313fe4de14f3a67050a6b6c213dd236ea401b67279f2edbb509a106a018e4d610a0015c8ce9b10a7b87bd88fb0fd8c9ce1b6edcdbf7779c13b6332758f7f62c0e8b8645ca84e0e4779cf11b47c90ecd8c1864669e35a8b4951a87f8088c14d46d0a8a61a736b676bc7d9ff39691168fbf4bdb2d76ed900d66b6f085583a9db7eaffa83f9a858ef53897a4e98fb0274f107a1151a3c36910002dd324ea9c0929542f1af2f16779c9d1b957164db25e0163ce2c6008cd3ffb1c39a60eac7812caeccd2262f5a01af84674eb246c05356587c51e0c917b6fda2378c57a38366fe34acd711c9484090e3dc4e62b02d2c506a86c1ea371e5059431684849245a634663d7e2916d5cb18c196be35620fef886ce8aba3a8c5bc68136668216d4236dbe9d357cea77e1412e1bdc069003127afb2436908c96cad7f64b02a435b32b9c5092666942b3a190f4ed623599f30646169d219b1c0ba3303311a99ec740991b359c29bbe4ced9da9611d6be4335418e597c0f460d0ebb688e1cd80eaca8e19d05485308b5403b4f01f2e14894e444c558842deac5d014cf2f363e28d18fd82b1fd19081634e7ce84332ad0a650624812ab776968d3f2eafa0c74ba55a82cdc105294b994ea55029604f9d6a7c7835ecb650a9be61cd184bf97a051c894295aaf0e96074f7733ae4bca8b11b6a3f95beb5f8f4aa40a3c356acb66fe38f8f9d50e411656f1dd8ca9bd8da8043ef486cf31ae1ce6fd092c0f5161e2446b84773a07902575ddcb2f58b0e509cc7ecdef102d52bc3d1cf0035c626ec9bfd17d50f653e22509aa0edb5ccb7382140f624d0b98481cffab2bdd8b38c37bed88c54d91fcd63607944d9762e303df4ccab23765ade1930abbbdb911c1c6fed43cb22a541a7e2bb7c27f30ef96e440548880278398c9fd11c2a24ad2301309fc4d15e2c699b67f9ae75a834c371ad7abc88adea2e2b3929326e34f46a72f8bc34a72eef20db44b0a37ad8f4f41396be483cfb7c91d80a1feec66d11b878a4e98b90e8846f30d43f384e1df10190947d3cf57c66c00f613cd303f20c6968a4ce8ad4edd159b8b544477da2117ccc0ce2c16686404491a1c0ce065e00e27c0e43424b32c3e4c2e128ab69b53b309f4e72cc4616bbd76da5a3f78ea99e0811e0447b4b228dcbfbea3ee47e78be9fa2d958845c8da27cba46b67f94d6e2763759ea54ac94c06ba27b16ab6d24be11583a8a9efa0a4a0343a2d3b307a713460791db00827c6874107153271c42f5e05938636b4814ac0c7d008a304ca11a7fb6108f4f37e3863fb69b3a90e39e2679fe6f009a49ffe19617ec4457675b27d11a2f1bc071cb0ad81a14bd3130164a89a063fb818f2fcf218a66f2a1390f7ed5d05f275391213076274bf8b273ae67f1b47f72675c4fc57ac04cde9b6fe06ba5b5651bbccd5628eda10f262dac0e8345fe143bbfc557c4c7c03e6ef4a8875481bc6587b4d99943b0b65ebc9c222a18e809e17ca7785f67122b2b28774057308bd1eaa8052acdc4a954a9d389d488dec20f29fc5459901087a507b015d3ba534aa69551a96ca675cccfe2f95e4714dcdd864b676e41939beaa826c5338dfd55999184a52f7b3d48d10f546b72657c61b660448077e92ee72646f3a33f2aaa5b07ca8b80ef8ee6f6cc630f58cd420c38aa721f83973d19130a01d65d796ea8844ee45482e96804b10ab2049a83065fa8545e9f60a0a120c494b6d0d9829595ab1b0d5b6355c8a534f3333a40a81c48c33439279a830684dc2ccebdd80381d57d35907515735d13c4025b9d807eadec8170fdcc12407a58a14102e6babb6da44527a4f83d6a2c60a2dcced62254b80fec2200b48e6b136edca9102bcb75782b72f750d100179facc9d89ff869bb4616876c5d02c12c0798050c821665d23a6094266a1310411072b90ed2a9c74dfad18d44db88fec2b81859c2698e6d8ff0ae08a2703494ee48a672862b2af3e2c5a9a478c8978aa5746fffee24e3b495edd86f49fbee27e190e32eaebfb9fa20914d5963448dfb0ed75e5954039cdfda3f2d777f14face466d2a52bda32238862e830e00726e46f9a922e09c47ed18c9ac42db1ac1917ce5000886f53da6a09b9b49212f050543da6e73814213f53207b3a8a2f827e67b9d841fe64f7878f2d4b84cde1a7aae5b83612605bec0b9a9a5d7b4c258a560337a7e2b6c66b64b3b8fd997cff4b7c585c3dd114554479171838b87ebc2a0c2abdb5fb99b9ec720c27198a26dffcee1cb3212b63763332ed2d8bd485333138a36e27570c7a0d4c247e1ea8ffe0f72696d00bff2c9a9799781a9c060c22753c1ced45d4970bbfcf93fb36771e5f67bc557c0aed8151015b64904189d5132361f84387f6b9fe3f11b8758e4cd19f0182fe352f91af0ecc955cf727d71e3d5c1233c742634be5a756b0db1361735a815640a8d34872914511d28660514a19fd226aa727dae1ccc36a4e632a337d123455d2242ddfc9ce4272c9aa5b26a16652558855558685665912c8445586b5665d5ac9555b0082b3959c9f6f3a0e891083a50fd3058cf94756b55b9eeb858fd8088183b337a020620fc80b6bf1617fb59462bfcae40120d66f48ffbd7db68794af9005306874c041f556de61a31133cd4a2edd5a2e369f2e70b283d92780b523cbb476ac28301c31e4dad30a706452369c70ca455bcee55cd9cab3709d969c8e4d4947f2a7d4f9c37918afdd3ee9abd2dea98268ba0a2d164a1432a4f1b1523937cedbd6ca26a414db7e857da819cab69d849d349676227350b9730d51bce649e55add7e7531e08f087fa59a39415f32e8a680e7e05aea4bbf55969d0dfb5d80e2b95e28668cc84a522c523ac81632a1680898168ef664a1150c7e3e3a07a5d1310e0a62a4d95fd781a67079794facc8377fab8a1057f5ed7e8033255388a595df426ac8f0d20ec1960340b98a3fe1fe4e9bdf999194f0320d82a82f93e52a689cddceac55b0464526d47c199cf1290802177eeff399323fe3660a507b8c110818635a162115bdb3f0750f1b04b74877b57b25b76902f05d6b44b13790b718b3e02839709b014341b14faa859c1e2a68073cf0ac772e24c385c2c846468d4e9ea9e78cd74028f3c5470c415004d1614069d8546eb56db0c549b5d1b8cd8e2bd3137c6cc82c8e748b4e942aa5f4dea2d93fb507601e7ba29605040da08a4bd2c7f7f1d99d230d18e375aa1bc8dc014029826f01f11f8971eab3d2b43c468ee67fbbe4634601348e813357ded76c3edd87da05c8400d63424d83dd190e0a085300cb9fd856812d2e33ba30f9d8ad06c40115ab22259cec048904f0b125988e574a0c6de06cda6595e864bc0c68836a3aa81bc4220c3c9d2bce17b64a9da6e3231b81e9e069f4741e304e6010bf4210c00d74adffdb43dc0c5e3a04d49a8000dc8a1d12db83a25423c27cdaf74920b57946ba092e931d1683ca2609fb5ffb641ec17a6a353dceaa78549a1d8058fc56e383b8068dddd4d20a6a351b3fe072288bf12566bcc86976e1e3519a9496e29a526a3bfeecf3c84821244600ec8d76f04f06329d62489948f20722494dec29a1bd4aeeeb34550d91717fc2014fb1804222e95f7892d7e3b36c1da9c3c95841460d0e0319bf9f8d8dc737724e8e241d848dcca03fda06f84135539f33928490aa7efcd4ba2a3d456c314c039a759c38c019c739cfdf17b31f4f3f901712a871cda2229ef2406d7ee6569bdabc1a7edf4f80e88c138e6b9f34f08afda467bd780ab8f00a95cb42dcb54c6993b08cfdc956d0dcc0f46e426773042c45fbc0f222a89aaeb9f729f360b2d8f5a7f00a15b31d2ecc6167c3bf2710032e2c486bd516bd6fdf66d8e175f8255dc29ebceef1e2f0b4f6f5d63b3ebcda02596be5260e31ded6a6ec2c1d288a74250b12fb90fd3fb137c779484eb7268af1afe045bc6a7f0c529eb505182786a2e44a7c608099513b5418364e9418bc87ddd4d7cf4c225c119b14210d9baa5bae677848136941be63a9c7021478a0a0d7b427745717262a922c60124a6ae045262b0d9570c96e46c62a04b9736c865621a1773ed5b43101a3c1ff00974630268524d185116e52248702969dfe20579c4a5f6300c6e4f74e247b7cd9e241815585a05653c10fda5465ab362c59ab9e26fd5e2a00b3a20abce27f41b2994894e69cf0931bc8cf5cb35f55bd189b211d6d5bcd9c7c1e57c0ed6968e36ee1b36ca4179abeac3d2a30c2407302592e472bdda290bb6074b39ac6ec0253e460ce9e3e939041ba1572c71a7487b699720efb0bae8b945a86327dea1dc8ce912735b71ea6aed1f18d5c50711e464fd17ac92ec738c969d87ae6a8a2ec46ca7961e000c855b34584e81e5463af3f4ecb6328e9617b08502839d8b92c080d87b6ce602b0994aacb5f5b11691dfaab00226dcba927132ae824429fd95c34ed013da54f4c6b42642db3e446ec946f8d1b12d2e6c00ea460a650f8e5a124fddbe54a415af7b77d66b01720f15d332546cd58bca89999359e95f31b28e14633cdd4305f5a565dd513363695726aeb59fb6d8c1b65dd94958df032db9f52f1a93fdc0bb28dae400298d27b398885ad9a51b5d629b4344508e05ae24a0b84ceeef2c90ad5550e59b00d3ddb9372dd2b8bce06cb056f62d283b3f9867faa0ccd56b1dc93bfa13f68d630201b9e2f7c740a2985b8b4fbc85caf6f99b00cef2f51b43685c5b4f5f7981b809f627f84b2cd5292de93a40be40f077505e0036c13d353e1dbb42bd042bf9985db89552f6644e724c6ee692c37375f4a24168d46ae71432a9eacd5f09a2d3b873af465e316c2341adf5a862a5da4a31133010971ab1efd5520fa7e1a0017e7cbcbb41a206436fcd3f789e3628d96c72dcb0246fffb65e3d8c8817538d403f84fee7871a6bc2f9b0f0d164f60e97d3da993654e2882ed35b76d7b1da6384d36b1f0a685ca9e69bb7d32e287aa6df96a7058fa846a1ad293c8a5db204bd76566ea358260a9d9627203e0c625701b75ff4f15422e2254c7da2fc6e94247a3bc7b05660f41dfe23a39468cb513bd83d4b31ef9da9d6c51f4d25d9a67b5f4cdb82f7493feb6bd10c540df3eb119304bdc5b16ddf6fd49d165cd2f945557ee93f4bd4231407a71d7c94f41d1bcf02dc371478b5ffa0b878a43834cf1d7fe148b783b4b0b06baac24b873af98d9747921fe0e944900f3e5060cb8b1ffd0d126aad74bd19601995f73012b0a8fd6c095190d21eb99f22e05cf396a6169af5faf5f503613a1191a90cde5a1d5eb31d74938b3cadb2c598d9d62098d9037af00319f3aaa5d724c8494c980def30a1b03b34030f13a818b87c3080f9366e98eeae094c475fb58cfdc7b5b05d3998e69ad369f9a3be1f9948431299d590d9802e50e52ea3f39074da5cabf27c87a473e7fc41cfc0a0658c059dc033b4f7c5147518325b1160b6013b710cd0195c0cb7024e082b882d812d409f538d9a826d24c5123c36528afbe35b5a4b7291caaf97886d60d7309bab5060bce3b18211c1414a2fc5343f4b24024ba545b1c05b15b72df389d98fc6e3b311002546ca9ff49bd534dc74ba3b07dc73187beeb8f34a49ef0a86c984e67ad53a0805bb89f9355c6cf0633ac7e44e4504dbf2a2be1a715eadbbf5db2511a28cb34d347095e23f85302c36f1ffa3dfa17e428ff49f6c6b9a9d2fe5eef7ce23697930e21939f58613128efce3fff14775c78d14e599901365df12e866e580d5966933d9042d4023870c66aa6439a71364f870889d1cedfa0fb435787d40a0b42c59ce70dc487de167feda34ebf795d6e28099f1caa5a4d46ac735a46f2a40e720386cdc64dde45c508fb06075867f3f443cb0a34e05a97b92805bd5d216e4cfbe9f877437d6c3cc83fbaa0f39a4b42776da9f2c1197c323a30d56e9efb0f4a651a90dc773a6e0b68a87b31ad347ce64e1adda2d54564de07955b8dac56bdbec7d2c00e69e01808699eb37e20bdff9374a433f72c6310bc906628a7f55a15281c79e92858610547bae175b4edfa5bec9e0e9496fd639dfa55a8bcdd3b31edb734e17b46b2b1019308cf11f7210c0d6a057ad2502c4bbf84979ecc3676a8796006e5e2226792613ad16c4198f8e490e7db63cd715775f470f32f4c3fdcee4d7e1483916048a489af240802fca246197076069886c3007e86ea18a684d60078939631148a483b29ff60bee085cdf1f837dd7607f54b3a7b6bcfd945b27231831f078f55167b83c05dc50532a0518c598d8c074f5407086a7a5296f292291555eae7f944fe816d4180db56f3c640cf901890735e81be51f6af43e1ea725089b1953049fc4860d970197b4a5968120aa5ede49b432e9e782e9220972fb13caba22a0efa66e4e2fb92a537fe4c1d20b5067b868377cc4a3ffb1a739e67aa4c5c7e5846e4610f4de5cc703b425813cb706ca16789115473b2b3f418a116f5b3e089accd8ed7bb80609378dff2866983f887d9662c8aed5cc359b4d53d5e0cdbd475453d02a1430bc71dce10926368498b136b7d3eed49ff1a9307ba1b34a552c17faca45fd6ce3e8245e023cd4d9e44c789be7895ee88ac38a196c0deb35b24f16e75ea46785f4137d3a49a69f83ece72f0458b1a322e86342bd6ec13328ad9854ed11d1189c6d3537c638db48047bdc6b49e3915b41d9e4b0f417c35bd6061acb3191cb07b96d9a3a4175ac2d367463b755cb69588194a45f10110e8a28d1dc1acb4590daa651df53ee7fd94c5f744684800e29160c8a15c712897d473fdf3868aea719c4334387d60da3624cb2b0000be220cc9b921af1a398d8087fe89c500ea4310d94dab04132dd11044e91180042aa98c8ef666c58bb8e30612301ef14424b00d0243a4a1b3af5755eb51c77731f0e0eeea3a29962777f4e14535f7a1a7db917883773b769d12a67dc7f5a082968d6ec8c3ccabf3e1e5e6c72d6d6de95383c643f3b03fe3f3d1b3fdff1e507f24fc53928f73984d3c64176a6fed794534cda6a2477a4953daad7a03b0bd388fccedd554708716091e22b625cfd358511f79c734047ffb3c5d85409301536617427d2c9fe284de94525a8e214ff0e09c9c42853ff38eebce5ca6d660c7f59e4282cfe507084b7f165a8ee96937fe139c13896c1f207bdd8e981d6b10ac191ee37fe26bccf5b9601894a24f1fcfdf851ab670bbf690540c3c483710897bfa16f1974de8c624bb650dbc443164de8e333d62afd001550a2edca75dc50c1095f7109dfac5612618b06422d39b5b37f71e8bf67af784f6154221b4b389857292214ce13c68888c42427a06559328018d7ba726ccb6a1ea3e8692bf164559d77423e78e12a311e5f6c2e2542fa9e45bf04c9670125964681b741791e881aeb16c2d4644d2c65c105ed2e4c5128d455841de464fd072134c7bdcc91beb0a9c9f1e48133712117d6b3ab02a63340c01fb14a47401a8a15a8aa0a286527a34eb9d52880296385114da50c5116994021a80176b023686943fa827325d177ab001383fe8d99801f278acd5f022ca48157fb6e4c2376c0bf7a7c91282cbcf62247029dd9d742cf3937193ab474e65d13fac34bd6fee7dd5322840f00e6b0f18e7f889807668aa78e68bfc2e776cd2e6ded48510d88128a9502fe2020f677164058214d30908634db3b07adeed1b0004c3d9ddeea1e05c98dae9a272f8450960ac2cd6600cd226d63744d2032aee2c8fed717ba313be245405d5b1bffce4bfb8d2998a0c3529c368933f0af1bc9a8abf6a9e350c3994621591e34383ceae760502151e5c4a6eed8e04f5c3a67d7ac7d2c1d703db137867a7ce908f795ae810ae7e55b79f289db12cfe5119853a5427e2156a07163c582505cfa024879ea0866e388cda5a0b2ed22229dc419cf0675bd3c8716b761f57c45c90665d6e5163a3da771ea99a0464337e649caf0a89b060dd866033f0e84370ce1ce307b0ffe811a7263b0da653264a6d87a8de247a1782e8dad6eafe8261beb112257dac393970d0a2a97c5dfab939e2c43f0776bdf6e43bad90ff7cd188f42571ce4f54e04321def431c1631bd77ec3e31061083179d750321ef0221468a6df6ad20e2587bfdf8c7ea2f13e82065c30e2131cd32a1f98773f0cd06f6d28e1f27e3b37b924115e86696066425402d2383dfbdf110274360cebcd6bd804e107dd54ba9dbdfce209637eba6c0ff0b47f68c48906baaaf1cea9efa819b0a5f4caa1eb2e4ab3fdfb6a5e945fb9b5bd852de0d305495c8a2eacfee5981d1a589891cab2865a3961811ed9331165c579e26c1ac2edf1464b63ee34fca824fc44659423482f2eb454293bfeb270dd5bd0054eb27e8fb6257879421174947ebae70426d9d4d7f16906216bff4ed5d69045f40c0ac059d35714c57a6847c4505c020499d7e99b2af48b60b4bbbbb7f68518fa631b01632392e079964ff95c59f2b52eff8478c073e9fd8ff542344172fb9c4a7338b2c4bf0a4543f6c0683f6e71a3bd1751c51069eb301f8a7be5f8c4c498344b9683e3f04b9145f285a180287fd1e9a7717b671cebb2dcd547f3c4e5c47151a6b2f9c540cdbbba991c0890027aa96270c82fcf901a66a33b76e131fdd9c37cbe35d8cd8a97f16a059f8cffd68851edc82661673d951f26150970d71f6bafc6dbf5134bddc4974d5055432435d494ce93f9783be480e7fcef2ed455eb2daf491489a54da84ed55227cf43c512062fa6b8d94bd41557f053c6b5c2c2cbc77c8850ed691f103019793d97ae2374c4230af2d19b80412c3cdbc19f3c1de91f254cce6fd881580d715352824949a91cc6264410a5145da6b738e0863b6d04838668b425b72e11382a207281acc75d0130ca7c04158e5df41bd42cc42f318a87033a9ce491f40926fba1c98b3ffebb564a10acb14ac6cf8ed0502b627fd4e5f3204a0f1678543dad9d70378ef98591dccb0a420b6d798c99d1acca4d7f77101533c5052858aee07c77d33582cd193401b15cc8aead73f90cf9863b2715fc292a134372f38906deb69bea2d588af36c13e2bd5594d18ed78c87fbb4f94f1af3e832d5342bb4eb584308dbbe412eef14921deb821acda3d9d7a03324118583b0b0dab45a0b1d214473c1684a9e5fcb2ce57701f4af09cce560b6499c94af4c614f8541ff50309081f575c4404a2444bd4b1881ff46a09b805f2b145821a227c10fe75dbd9db94112d70cb3e14d6c854d261499e18908477d99b7af1a55da726ef8951f9090cc5947c989c80a31a231840226cc0827f2996ab29aa22f59fc73ceea11eed2cf1101f8782b56c4d013b408c41eebcdd7ec81601a8d951d63fe2bbf59cda994004144cc23a984d28b8cef7cfed3c7751ce32d6ca48b95ce9f1196feaeacc19b915ab5f8b960c45ecf6dd0e58837b80263d78a6ab2aa00bef5cbc809e1fb4278a13894764d4a2dc8ac8459d259baff7e8403d01355b9d4f616afc9ce3813fe3ea9391a288e9752b8dfe92215118cae223dbfa6e935cd4ca6e836628eecd5ea9c24706fb082399becb88409d7c172ede8e5074e5cfa78ab9fa7c6707f7db6c69d8e7815573805ac21bd0a8743dd0f007bde6e7fab7f8a4685a7caba5f603dab0db13b4035344aa340e914091c185f500779c22efed705cb93202fe5cca5605e68d16ee750bfe8777c7ff098f9b778270ce008467fb7058d520c7a433afac95f739d1e307c110a7fdf19d1a0ba8ac9420edbebc9fdf4060e5d18125f57158d912f9a0d6e914642f044bb8299868be9de3df04d14430416d307041bf24b5072252f08fc8d0f45dd7010a7ae09f8f23f3e2affe39f3c44332914dbf1e8bea7d4a4d6dbcc792e3b220a17fdf39aedd750b71383aae5856c52a9018432cd15559a880d93e12903436b69cd1af00a7ed57e0f3f19522cb6f5636775fee4a1680a32632e1a750bfe9543275dbbfdbbae0568e42f448e030375c740af046ea408f7bcb82852ee77c21ad914edd38e729bd013ce1c3a4773f4b8af016ec37753ec253f9936d59eb28a900739e9a639425c8b011bb0ce0c9a0199a6845e014ebfdef6dcac4852c920f3a7f3b6a20aea23fa1d29aa53bcf9a69d475f79f08a115898badd78a224efc19183f792f60e75ac0ff7961ea7f6aba874719b555c6054ec381279be809147cef8839da7684fbc065a9f61607b20cad8ce14587608fec75d5e0b82b6fa131f4c861bf896ba900dc55c8a137985cc229d8f199a9be3a725197de1bcd1158f8b0fc4ec03b551ac902cf8ae3e4e25063abedc2a9cf863922e45586d9c3d6658d1b296e186b74e76eaf3a85dab982e870f266c23f7a3f22c2aabc49e3f3bf1fd33c2bebf10db76f3ecca3552d4b3e77a9720bffdeeed4928fe3e7cf8f9f7f9f90a46f17c2b391ce3e34b11fa1ceec4e781a62f1c3b093bf96b18e911ae083c2715d915c16d329375ab44f4d3778e6c24d0edf87daa1f20ca1becd01fceb7ac91fc09af4cbfc076f8e0ce7b42898c515031716e8a5d35670408b740dc29654f3446ee0bf197dde4a9303d6a78ba3b783eb8a0e87d10487a8ac379baaeaeb194f26636c4ea70ea37686aa376c1b0918b581682382b39b26082a329020c0c6635e1d2c0d7c80c057b400fa9b6dc86ad127b5277f26da39651a25096427f572ffa5bb1ff3f52d3016378d916ef935ea52a98453b53d9972d2051d5c04988cb08b42c3e649c1cd7d1c10f7f5e79efcb4f6b69ec02cf8a21fc7f8bfdc3c9910f96ea41442091056f5c5ac1f4951bc0b2ad2fc80565f14d262916a1c58d79087d55abf61b9ac9b0435965695f20995efbf450317d042859bf21b840e9e522a20035dca400b5abbc90c59064a8e688b54469affa062899d7ab67c68154ff8f406b38622c33312a1ffe0d77d99009db6240469d5164b7e65956dc22564e89fb88cf4cb1cd282a05f13f3523fa35b06ee879b6b898c4284f9144e862ce238eb9162ac26124c133dbf1a8fb22b97566d758f3e214299c6e2d7dd4a38d3c311f06bf2333d31b61be386dbcb3c03f3e524ad76e7bfb22be1bf56f19d77cb0e5a0d79f37bb460329ad4e66fcaf8bec80b973eb28c3d569cc518594c6bf7c2d272801bc72bf1d1208b02145313c64970a019cd27d999fca967c7aa7711e1c71f6530642cacaa06085982e919a06fb1af2bbc335b25262db643c595384a87c4ee2cef5e5b8d04fde0dd3262b347f63eec0ba4c00ffe75558a01bd1eafb40eaa8fb5e76f1bbb682bdcde41f581df5079b073aed5be5cec3166503ca682c4b29174111aab6c0b7e4a7ade59315cbce7a83881466f7adb76a1b2e8dc3755442287b9082e555b2e267595e56830990e4bf41a657d074b5918faa805ddbdb7108424eda1631d2dddf337f041fd65261170c3aea291e72c0c9583f4775ac233e2342ba893f5ba4315e03876a0b360f35da77545ddfc0eaf5ba9ddfb08b2f71b16aa6dd8f4185b73e8bb82946ccb7512e0202d4fc8380c065fea9da78907ba4abf92beef83987735d3a6b9b4f38f19c831c1a134c054aa57d350ec2e6a799d8e82144e386c898db017cb2caf7bbdbdf6015ed00ad80b8e665180cd50efa5b1932c8334d76284c63079a4082179bb40053628ef211be8a28ba003bb5955a0942c9eaabe127b1bcdb2b014aa313cc4a8d11ccba1025157789af29f744bd96b209265ca034df9aa6e1abf7fba4024413a9d8c0b4ab2a4d2c8b820254dca1a19094ef0a4ae9921c1049dd4fa191688404813ed0c0589540b70fd5981649e54741910a44c49572723c19924757d06085210d2d788a0a31aa1ebcf0520f3a4a3c9d0094cca7e438a4c82806633a5f50de215029823d82f71576712901f16e0f46c662ce85fb06cbf3f50f45a7d6957c58af170410102746f9fcc0df0d981dca0bbd75ac8c5f15ccdd578408d248729dc8540a6da6aff5d7d069b41c6dad7749e0f4ee013f5357021985782bab1374b46c692643ea77516b4debe46a7b4261f66534e663800d4d07a1d8be001733b2c00d6d7e33d619a8814aafd26c7a8155e5b668dcc1b9abcda37fac0007e43be17a7798b28ffeecd78f81fd4574fa153e633a97b2be3384f8d44402f3cc8d4784ceef1eb7b8ff771dc6818a088444e10ca150a00d779101abec79602c4f378241f7c544c6549121975afa583140340b87e2b5dab2049b9caa8c5a6416e73bc4fe519ce4a9788b685a39fcb124745cfbdf74cabc41f776c63a4b7ca2fc81ab7a1adc6e6d199792b8413ca339f4043fc9f1accb597b90d485440472a3ce035af456f0dd8e25514e48fb78f738486aaca74251147d6193b834fa46fcc48da746e5fcb50ae9bebb848b71243547094d694ad94b6de293e37488ccb1647a899ce6eec15fda3ad152d38a3ac7e137b80d8ca748580addd78d7d17b0f9849103e3fda63192e7b3f8b2c07bcd34c4f860a0418993ba1af811940750a94554b9840937a39adbb742ebe036618cf873439eee490f383b838279a6a9c3be0ec6d853916e3141e0256f414c5984e844ea9ae23eb1f05bef84de1adde0a3c0aa4388c2c10a0837436afd56201b497c9661e344110d019e5fe96d19f4163d78e36b532335f82197b3b14df347e0427013223c8164205551d9696a2e6d105b372f250235285a4227d9cc0136b1b30801ed4e0a94b4166de14ff59c5df4f5d13544496705566105a48477ab1a931962ebbd69fd2c1fda14cb523a817ee8d9002b447158f834de0caa7218ca841ba1f0d27891d431964e090e96f7cd195577bc571f3ca4c3b2996ec30e33fa707a6768115f41af0cb8106c2d899d75db120be8579e514199a1b40e57d67f58093cdfe070cc14cb6cb28703fd2492918b454e308b1637980307175e527160cc9c92752e1e3d712ec7218df11723b2646931f7c313e13c305d1caeec7bb86172071bcb55f3e805bc5987a9fd0edeea1029ac4f40d851de0c80f1cd8191d141980110fa1aa130a14ceb8d9c0754190a1de6536c6968e4f7a32833af9342cd0ea99180ebeceb01505d8facf61d69b005518a1f2fe771aa72b8b747d0d80d0088119707d43bc0fa33b6263c83f636e46580ffd1be6627b00f7ebca80aa4652fd1f5409005c6e913a52d7647307378fd74a4cbd51ddf7fff6106dc743765d01788bec067da8169b1d3136c45212380f8e1136e30093266899631331aed50c05517fe7104d03302fb24ad272ff2c769cc13cf6e800be182787d446c7768341d3ce03a77665c6ce87552eb7ea581b2c638fc66b4a22091e4aa384dd690f0d074e0431cec99ef74ac531f6e4b0052ce6e0ce05c13fcd6a91c7c96e2e0d803455814bebf234945f0220587b1053a0017a9406cb593a81a886befce4a8b4d26c79120420a26744e98e0c9c8ef7d63d158488177cff5e43d30abe5d1bc95cf21e9f8a4cbc1d634e93c58584055e429d7104de26f5c4b55265dd0b1f12bcbf8423c343026135aabb78814a96b0e0a4950ddefc9119124b74e05a89e3505ab612b4b8c02f100be90b41139c38333c7b4b213ab7e2e65853069dd9c7009231be949db8b69a462123a76a21294a7936118f8d3a735769f39e3bb7b159f787806d65b528c433be3ceb31c9a275e97363e21b96d3ac0d9d4d9f6483850f6712c5b43e994b9ea4276e7b4dcee822047f910075dd950d64af902d4716b621cfe82b6dffdde22453f3d4c075016c2c5916d0c43aa5d18cdf04284a7e2aa75da4cfbdedc09f61ab9d1dfe62429c2fe74e950d0b9038a9f7c39226c2f612c88fcb753bf43d33ec64011553e634e4e37d8ae7fb81165b069a608ce01a8ed5bc68d0798d5a24c38190492bf12759983b617e7b011e69f0164f1b1882e24ff2a28bfe34cf638452d56acdd4cb9461c9ed11e0ea400963c8157ba608be653b52499067def0b3d5d305546767258497463d5386f2632ab6b343a36c5f982cf9a2f561a67b759ec4662a7079ff6968f8755cb1fb7bcb09c437bdaa17a33c516e686e8e637f7143684fc1763facb72007876365d1107063141558c918f5481283a747e5e734b1a6271c09a6a139a703a0a982f3854981750caf3b428d2d0c45b240d79cd44162bb3addcb97ecce1c7c6af2c3c3ac8dc1f020970c84e54bd19f86a4dc3a63fd742795c11b47d7c61758c2f79fbf3734b54f408e32692b563c1156a832b310ee40f965d81b262272f12ac9b97914b706905f448499c041fb5c00131915088475f00fa42f3c1694ab52b996d6273a0d7e19cd8d97219cc579f04a9e0a2a5ac7968256228b21b4385f9e628104bec6accf83bbc87fbf1b30ba970fb815fe1eef2e3ccb11af72d54799d26926310e7765bc39419d30a7042fe04731e26d4667d2b95571a5e212cf12833a71b6c813ddba707a334965c31677004edf5c9c75a7f41bfc8469a0f806b2b8c5f359352c16960663a080550633405f81849351a14948c86ed62032bc370189aa0db417282c9426fff71801bce088297e387b163f949095fa9f818d07d8b4659e215246070514ed023a26e2705a300e524e07d8ca3b0870767acff7f7a8833a2d0804ee9bfc33be7cebdd75bed5e8d21817223ce77a20fcec8ca2f3b206ba49000a40a463aa30ca2375e6c1d104b41ee13b0a6d5462a6bbb80166d788b884c8de7bcb2da54c49a6ae07b8069d06afcae28124ee93bee7d80f157d0c750ffa00c52232d6bdf746623eb8fffaa75b0280566b95b7be94b374ebf3165f5a7a7347f0562ba62a576b4bcad4afd1956efdca4e566ca1e250f8e0ef6857ea17974112e2d6772cfdda80be8c7132f0ad11f077fe53b164e173cf2a1fa1f8f383fbf039d18fb89731eec727d66e099e853e08be159d260119b32f63f6a951f8f912f8dfce4b207c503c01fcf077c413b2fc003fdcf913c2ff62df738c846ed5df6181e0b3012593323a9215d50759b27adfad5ee7fb7fa40ef8f253b1409654c95781e28ffcfe07f87daf128bb0d7ff2a08d629ee70d07c4f143999d76483507c436497be649960af106ece15b2dbfd6a71e98b000287794fbbb760c84383d2faad865930e4a171698b355a08c1573df7f6c7c51ff72ff2e3933207a2927ff8756e3ffc3afcfd0fefbfe7ffbed7118b7822fd7838107d3461087c87f870903f57d6cf0ff0bf0745162debe787154721ff08748c0b65f508f75fc75a666d18f6bb9e5fe8b3a10f0d2721df1f1f43fdf277aebcdd8b3ff4ff138bec7020eebb3712f358423f54fcf9e18945b2d04e2ce28946621e8b631d8b63ccc14013861c447f8783be3edb647bd45763fca18fb394ad2b155aeea76d73b57ef56aadf5b9fe8e6eb126eceafeae21f24bb0d73584bb2558ee7f9e9dbaa0b9eca403951bc24f7df9c3955f2e2756516c512564045800dc39c6b8f3c702dc397f14c09d1c34bfc59ac9412cae7cc305898b932e4eee18ca2e4aae94978b19015c76e28285c70c61bdde7fafe588312d501913c4143e2f84fdefdecb77bdbc4f841cfbf1e1893f9cbc15b06216f187137f20f0bdf712f8de134fc8f2a37bef4fb0ffbd04bceebde71855fd40c0fef72374effd54f918fa443186b0ad8b8e6110219761b7641870994241114dac1c2dc5e4941ee03c6d6993e4268598f4c0d052182590302344125e78403a82e80a146a90f836d9acfc795c08f976de277d6f4511e15ff9ac14c2d1872515c2be97efe33019c3d1405e594158b7c5ce8543a8460ac220acfb1a004202eb3a334f71f4e75e3a54d106c914619a6652aeb018292aa8991295c4890566620a2422396a6e28686244871886646083256a082a2f1d5c38e812daedc7e1ea96122870082b3636538694c44083234b9c6141d41a3929c4e4032141d6a8e080e6b2130e62ee68802bffc565271cb6fc57c9affa41157f7a9ca4a008293ea049fa01ce1b282b44ac59628632b19e2492b0a1055a134545b10a38cd20e6298a0a569089c967958d33e168af946ecaf0f054a687220ef2b9ed63b6f25eaa7af4b5bf26ec97de7defe309d4615c32bb8e7d17759c0839a8bbe5ec96eba0e9ff7efe94dc85ab3e7ccccfdd3240171607b0269c9f839d79329ff1979dcd03a9b0551f00f920e64a3001a8e2089353181796b439c18b0b46dca02043449698971a8800b9582fc6e532485baecf6527a62d476c70b94c92a4cbe2b213530b688caada943525c27136391172d3e5f9f4484ecda67136155d2ab3618cab262c9a4d2e2b721827e540133cf26e77ec9ac023079a522e76bbbb8b63c718652d8970943589261c5d56f3de9b82e293c1f98ae278b7cf48ca619fc80e54a9544b7152e1d835dd39bfb3798c13423ed51867a68126948c714730d06cfa7e7e27e5b099cf89158131efe7734d0efb44906bbaf31d49c835a23bce231bfafc046b176c026d777e5377b9cc14a4ebaa5a97c4edce6fba521ce9957c59fe9436240ee3588ba3756993e2285da8979d985470e7fb91f0ce77222625f28634c31ad04a1458a2406116450b51b000c5134456a61c6162894d0a285f1718dec44009273f70c1e1852b96056fb8289620c1643bc2a88d1b229a00a146cb5214238ef8e00414cb248513982a6aa0ac143104118c241bb47c992384910d28f0152b484991a60729da509141044aa0492a220a8b0a6dbc5b1419241b908ce9a2849c5944451a3303261a720843a5635ae17a0b5c549aa3ca449f711ab484798aea418632489870374c9eb4f8c0a6065b9222281f1304d4707822c5c311433039a20a143031050f508e9ca9e289b7c4df1e1dc172fd499c14702102881f9882986ae28b8c3669567881490533332e8913c0ac80051eb8244d716596860830444ca89052c3157505217890e18d1134bc898383db82e488812229ce104c8879e2e560850986208e70811447d31685654a92336590a8a9012492c0d40c3098c1172664cacc27cab429d384144c7a788ae2099804156506b22f71aec0a0246ff8ae60a1a6464a0b5156f0e42be2c611344069f2c30d0931334d08e44049c185284e71c01c713508c006333c48f14414342d734889cb0c51ca1c19211953a3a0708517255b91154ea6f0222aa0054c941a96f8e1caec0997c5a3748001ca0b4a4889f2022d4a2697d1cb13922676f072a4548f9620b3c495219c90419b2727c2480e2eb08149152d8012050468d4c4133640a94972e6065913c14f2a00620ed1152f284144e702232c6072244c1423a331637ace0252f0a202941992102df1c4891f61e0b8d1e28219393a28b11138a809330312253c9ce95af0b7506c1b3e02063bd480488192992b576480a28217185c9166081da0c400c4d410513944e126081b50e0d1e40564a82c99c2091b0fcc0e4f69e2a4204aaa369d607001d410493001020e1328f64c2b8d1b1848b5293ad364be80820c599c88c10ba6a8c0c421f12a08a066082c5566e0431c18aa97de94db1a5c7aa3b7799b81013ae5466f9db8a2cd229c5f3a3d38f476a3701ae6c1f16ede6d75f37208697416d124fc6200b7fa99c728b94e9226a74bd5072e57ada207424277470f1e1cd4cf4d2c0e5a2d8fabb833ef0742e40de71565a16c27cfe936eda369702bcd611fadfe47fb681f6de5449d6e7f342aae6c1cd4ef6304eb4559285b329d3a2e7e34a7fc24acb45aa5615f958f96837e1f8d161e7d37908cdddd8d84ab747aaf6e20911c17d93e997efd0de49c36e084f27dce392755bab3abe1bb712494fcfcfcfc378e84f2651743e77d9deae3aacabffa137765369bcd66b3d96c369bcd66b3d96c369bcd66b3d96c369bcd66b3d96c369bcdbc67889bd503c1f7b8073fd0fbc0eebba3fed22ba294baa594ce6b411004ad70a2ecc4b12fad17fcbc592bf55b6db7dd01414444444444444444444444444444444444444444444444444444444444444444444444d4f1bca1d3b9ae7b8e7e673bce764d3889dbd583f2a4bc270fbd2787716c5acfd6add9755d9744c57a3bcbc9e9c99f5078360eea6fcfc639d8b3d96c6197836c9fb472b6f33e50a5b30a7758b4e0e971f1c207468c1f191a40d1647349c64f0c183e2f5c006003196e44a33628173d3c2d58d00dfea76b3437da09573aaa67c530ea9a0afc3c9608c388abddbcaedf8a337ce48b46b7bf25cd1acd78712dd4ed966ef7732a107a6e77636889868b7bd5843c9738478fd7e9f424f18ece3397bd9ac7e43575abdf0bc3e4b095cd6bead70aca0bc3af559afebefb568550bf5fd91cb6925a41f56b35b54ac3af559c9648e44aca61aed554bfe42a0ebfe48c5b52d2895c41075e1332904da4ccb379365bcba49439ece3a695b27e59ce727482dff7b209c3beef9748beca799deb86cad2e04a994c265ba1e092bd62e3d96e3fe550e639cdc9f2220ee2ff269db18629fd7771fde9533ae7db6822943fe70ce1c575faa4bebbbbbbbbbbbbbbd7ea2e29cd42c56f6a0614ece23ac7b9fb0d52b88a8f698ce092cd8bda4ca38962d370a4f8d686a18fcfbf1447cae6a86da409473f728e63d3b04a5382b35499ea50ad5525b5a93aa9b68a74549f1cd62935507fa7a444f32125254b4e9890aa8058aaed9b62d32935077d9267eb480ea22eee6c5bbf5e54340d549fbad59f001ac2b15352ea179686395203b51f815e42d08f6cfdf2b94cc1255b44fddf8086e16abab59c83b65f925bfc94e59c732e31333315f99b734e6fad09e54fa5ebadcb9e8d85b5b685b5d55a3bdd2dd881737a9e4e052dc7feb6b26c7deb51afd6ae2f39ebe274cd78a267ca2ad1b8462bc735a8279e2692ca9a4d9e1ce64d53f604bfe6ace96922f186bc216f68c91be29c187507ec4d4de6dc262fbb5c5191c3ea140deb94ac5a59bfeaad5b93fbd984614818d6e25c9ff45572ac221baba24d0ae58fd6fda1b0486db975f1a92f3d77ca1c566fb729ab3755975087104da8498c1928a95b0767aa4e6f536ff5566f1ecd23ea6e73769ead916112d3794c62c830552aeaadbe6158350365a6c6319383198b8481fa398e6b128662062e7d59a7dc3d70696d0672132e6d6e3967adb556a628393959dcb55ed75bfc5661f62d6b7620c6acb5abe398f2458c1934516ce4d45b9d3527ea2d883695dcb4bb7d4ebe8f9fcca0798a82b2c9f6492b67a7b5ded256ce766c3beff33e50a5337574bca50e832a5eb94096cea783e5f2af942eb3c270cbe5df59623159b0f0962c9ad62dfe293872a6e0f450cb6e4d5fc4347d3163abc923e94422c923e9445691461dd56c380ace0d48e3b83a70f01757b7f865835652d9ee73525a27ad95e3acedbce979ded2e36cd779def781aaa952794b95fc4009aaa4ce2a9c61e82d43955cad4019eeec8092458bd9a285b76cc1d3e3e285cff4f1f1963e3b56de110c41b27a5421c8dbf2862fe68b17def285d5f9e9d16375c6105cf93d578a6deb167f01a47c4c63fc6ca40947a1eba2ed1fb1b14ec8fb559398975f154db7389653c13e876df4d726af35097eb953c12161a019c36a5403fdedd62814dc6e6589eae401c639747b9c476eff947507cdb520a576fb7d8e4fdd641efe957e93a1df1cd6592255d5c3de4456f598778a9dcf61a7a2e5d319992eba928679cd9938877f93131b92436171a92d7eebb93299949ac33a330dd48fa629cac6e676706ee7522327bb81d073a7d8d9bad53fa38950fec8c9e66cd5072eb975f88be10b39870942b83973a6aebcfc3dd8a4ae144bf0cbdd92391660bbae4397538605682e8ccb4e57d06eedd61f1f20cf6e95326ed5ff99af9a73fecc6f7d5f44f5dd4780635fc4c781eaabea0b4d714804381676e2e8a3f3a3108d716cf5a3fda13f8203552a0e8900c77c88457838507d23b107df48fdf9a1faef55e28f8ff07f7ed857bd0d2ec4e7c871809c7385784f90523a4a1c466ebff74b8a2d26711f7e684123147c4c63ec9e2c6191133cc5bc67d50fa9c40343e8fd58bea00d2736f4095b1ae816f57e2bda282c42ded85cfaac1442c9862515f24d626998f7453af63d7da9e4350940e8bb88211ca5924b9f5669a32b2a1842e15230f45f649c708ea3af7269b79452f657dbb5ea8320accbfdeca603ab38f08b340c24d22f96ecd2405432d12eb266e4a45f478dc443dcd12dfa543239cc138bc8d827fe74b3de8692873d11fe6d1afd56a2df46f4251309401ce6638439670737a9c9b611e6fff4a84b96d07638cce540f4297d188ea53eaa72293b81d9c2f4e5525903f3e58e20058d60c072c756ba74cbd5a15dbb947e95afd155eb17ad4b68d75372a964ba544a291d200ab5ca84ae86dac9f2310d66daab6100b8b5d2967e8981e32adcb1b1a8683e54b963337d9173c7fed24d6d1bdb4c3f5dffd9dddde57adfc02def692d8b2ad11cc652523162bae5b54aadd241c01675e110ce1fe997eb4d54cce8b3b2d52ad7bf69b7db8cabf5b7451a48a322034db13e65a235dae4d49dbe2cd9b991241ced6c2c4cb89ed3dd29f5c07252ba74e9d2a5db77ee5df248e9d25b4dc207f4fdbaf43d31a45f76e57fccb2324a2955526597af511157aebbbbdb4f70796ef5596d6658c4094709256bd078f40b94cffd9adfa0bfe431d33039d440f2c54816242c2681e47b1e0b16316288e2000670e38690dc210d20593584f2613ecdfc2307a0517f55f4df4812d2e4371696df6212362d46cbee481b278d527983079425299364125a7229b56854fea4cd2d1e78c0e4301f212197abf5df6a128e96766557da10dd6cb7d34abe35a884ddad4125b4b7069590bb35a884f5d6a012d25b834a386f0d2a2137f2d4a012f655f530ee742107f1db39997dce39a79439589579823c3c2d845cfa0c19be1b73ce39d9f62834a7651442764a67c0b07262006a421ef342d1e5315598ee687d643c8d2a2bc7c22b57b9dfe11cc7713ee9f428a5a0ffa49482205be66e9d7eebfd5a72bb0e3de15231e42022b12a4405ce5a2d5775782aebc7bfbe15418855b148a85dde9a5f59f672914facfeb702395b5fa7fe647da7b22a2107e2ff6ea46039889f5308e5f30e337b57889c33c55104aa291204c1972a9d5518ae7454e00d99dbcad1e9f3729256a1fc722c117834e958c00e5aadb270b8682ecb011244d974da4d425151425109e55fa92c22c2412d41950a4c5ae520c2419273708f8e108fd7d10976202bb4b2db81c122f2442c57e9bc21eb24139144bc769144b64fea6a013dcb0746b843848d30ccf34417a5942b5b904d24121d514ad1e713e515219d6eb94a9faf955248b02da5dbba141e529a740849119a2c226d027eb95842b7dcdd722285b1333968b6fe959ea5cfc91384a7b35ca57442f98496ab74fa9c73b6583076e6cb25a825a825a825a825a82587918081fa51b89da4b642d3139a11b7df2372c5d4d7e9f4ac5ccaaac7fb5e2091edb367ca7593925a5e2c22529504022a505050500390403310f54ce8b4c0761868a93320ce13cc9eca396c0f23a0ca2954ce9e429ba543887a0d07a51ccb8434fc72310809ddea6f6ed15a82ebf33fae25b7a7633916b6a7637e16e7a8cf9283c4ebdf795ff89e8f8ff7f1d7035a17100b46c713840704baaedb59cbd5e9aed26972b558977bc96152d6b55c922dd5b8a394d5b84a3050bf13456e8c1a852e4abafd9d0a04ef4e5142cd8162e9ddb63a20f7ac5cc4a07680dfbf27adb5d64aa7ca556e3bef932010ebe70c233333db1932d449e96466fedf209cd2ddddddddddddb99b33c255eb0bfe1fbefdbc5072ecc3309c2b701c154a29e5b88ea0bbce52789df52667794e96b5f29b0245c8f2c0cd9d1aa11a48ff252a1bf2ff3eafab3d7b5e4a91e334f07274d9a907241b979d7890bade13e7f8dee573cfbd0fced13d77e31cfddc77cd8d3847cf73ef509cc33ef743a45b568fd2f5a71f15d75f0582b9fe3a2ab8feaba8eb1feeb0f84fb2ecab7efc9464e8fcf851b1fa11041323fc51a502183b3faaa27c58fca8a3e5fabf68f1e32a85ebcf8192e5e2ae9cb84a27f8f682e07b5eb3ea4f567f0f6bfe0edfd13cac21f2b660c11ad9e972bfc31ae594cbb9b9dcaf5863f370b9d7618dbec2e594b81c287a451ce49f8021c2917a453748d23888fbca92b71a07713f596ec441dc5b9643711047c375ee8effd3a3031c274a2a4ed6530bf951f16eeed6cbdce038238a125037b45ffa0b3360f03927cf39e79cf3a34f29a54577cee95f02fa86ce7997f8b45c75771b526aa5f874f9734ac94d5fd1ea644adddddd0d7f5326e7753686062cbe4d0f434add6381768a9d53a67b9f540991736e77b7a4ff49eed6e9be53e67062d0ae49e99c734e6bc3b09563826063ce6983836cdc763d03c906c1ed962ecee1d7e8b9d55fe44a3b655696d861d25a29a594721c154b68ae47759f735a3b6b926db6ecd2b28b24736bb24b77f70814607f259470c209376e78aa452ee220a031e128b74c91861c8173b46daea9f96034531c47a4615e935591c232258d249254e2ea949a73ced97d458874cb7f64a859eb039973d6073239ae3e107f0dcc7620406658b1ada49f612504f243033b6ab6dfa1a386c4062d1cd574ce2938311c27c20f204188e890323151373872381d0be8d7d8daa163ce39715ca6ff57f4d112c1871007eb78ee3f2e00dc029ac00326c771e2102e006c0059e3ca6f8d2080b1027cbd399146002c70593c7c81db9381e45b56109e96509117b296b9314ce7a494520ac26021e4310209fd9abfe38ad02fbe95bed71715750871930e9808476efac14384269c8341ce8aa4c1f25bbb56596573d0eaee96dc9a2f550d30c11d4d2027bb8e149983e607d4ef1ceaa5466aa4ee6ea47047b702c082706c27eda49764ad95561a3208e11502822b439e3216e89c94524ae9534ae911aeb4d65927a59452d7fc5aaa74086903782efd8fb24ce81e26b8aa1e54d500bff404cee018e943a3d572e9e0f183d1b46a626c4f5045fa25a5e496b7ae8fad968b35610944ac8f9d456108001ea48474525a699d3a84e69c13d63d77f3c651f5bfcaea31653213ba5b5c9e20b2c70eb7fa5df27dce1d0eea77c977be7307c707ae7c6e105cf9de922b194a27f3e0204dc82868b55c3a78fc702434ad9a18a71369f4199ce648a10b5ad7a528e388f3252b6edf6f05d210ce9f2f61b586424d8645a6428c3e28615e2d859aac8b8c498c3e8f8485b521994c8e2c4a8cbe0c8900f1d267f9a200b893d239bb5d563632fad55dd7d9ce72d0b2b4724288dce9b18656dc81fc231febe10e3600e34a9e0eb4e020f95205020f082d6ebf0e07c951487722c8412118559727b74051489116933ce9c9e8575fa65073b4b7d2dace6d3427a573ce39ddef27851c2682991b318453643941a33694522ababa95c4e1a0605348e9b3ec76d0e84a9d754e3a69adb5d686d5afcf77d65a9f16b9b5db0457deaea2e456f7a075ec135cf9ae72809c33a47e09f6d6d1c895d6c74e99924f7e7777777777777737fff04b293d89fb1dede3d3f7656074dde5125a808f0bace4845ee95cc9e9d76887fa35864d42d94a0e96705cc1b9be82b39a32720e5a73ce3976dddc4c6076523ae79c3389fb16a1817c1e09a709b31f2036b76a09ea03e690d9fd3ea72843a74f4e093f03347fa13f948ed030af010942a45f43cc4ca71c9f9f5f045ec3524ad900d92c1ddde2177258ab81f8b9f2df111888dfda6e7ebafc92c50e48da992f64981114cc4881c5091d90d4bc4026898a1a1610918233320879043558a1018946850a1756b374749b01891daa40c2cf3bbe9061b01dde08714354151764d081244f92d2bcc18285a8670d192068b0c2484d10311642ce0bb7355164718ec4f83901dc041827b429bc202561c6c89417d85aa8a28508222e120a8824815f8a27882764f921ff04fe399f278d15427e1b0cd4ef813710532e161461ab8ab763013c5c2cbeebc2db755d278ef543960e8b9b415c77aa589e3c4167c4b607f17ddddddd3df52a22e46e6f2d5ff5a177360fbdb3e9fc6ffc38ced2670f80778a6309d78a41c0db0fa7df4c41857477974147712bbfb955bafd16e99ce3fcc9713f3971fadde1963596607facdf71b7766f59b3f3cb737cf4db3eabea03fa75a460658df576b3dae3966ee5ce124b667777972ea940c2dddda54b6677777777e9920a24a0b84fdaecee4c5ddaeab482a005634085d23bf2f95b015e762a23c51ded1dc00cc2cb4e65d67454b5160c798a70e247656a2b984959a523a980a15b19a3a34e54c0eca84c9167431f27a83b7eed09d7822b5dc884322e3b5da17160c216979dae2c717a621bcec0841393316b84c832e524040e45977b1f32662ef71fe572b6275c30a914ab4f551f543b668ada39c686be4ab72af1b1dd79adabc9651e4fa18627d0ddbd4a18c09cc42c8d51e1f6739819dc7e0af238dd51c6c8018e1e67313fc8b9fed39b6cd79bd600c18549104884c972fd77b053981ed85666c50302c2eb6ec37577d7e0872a468c7618723374c58997322e44cb0b76a801081a192262eeeeeeee31b96e039cebdf7577f757103f14c900793e309f9412f6e53251a44220af3492539c184967a37e8d2ee576bfbc25b7a795f9ed32556eb775fc6bbffc21f8e597460de53c9da300346ecbf01dedb4197c4c0347b78492b8e7587d1cd49faf8c59e5b774e0100abf15faa879f9d5261e3e2e4042094272b8098acd6d4a46ad6c429f5823028fa590aae67f93357f8a43e80f71f5bb28b9454d70fb039ba6a8f4ec98252d75866c00008080022316000020140a87830191509a848134ca0714000d7292466a4e3c154823398cc3200862180842880062002104408248a1013a036aa556f216c4c9e53075ba782eb0d1d5d130ebb8a96f9de584576a48171f5536d9d1137a0ea5c3bad00986dab1d100646bcd9d751f7275324b90c9712ec4404b833799f33342dd33bec056ebdeb9fb4f0a4ef4b5b4d2dd82c6942cf346c9df98f750fdcde0d78992cf65e40ddfad351ba7928e23eab141abd2aaf21874a421f6e6047167334a9d56cc544dcc23b2f8f154ae7ff9bab2563c1f532fad781ffa5d9286dd43cb248e05981c627f411034fb6d959edfc742c0c6dd7a33f630859bb746485049349f5530ef4f91fc3daaa4bde1f8307a872099541e2177bc70f25c40cbf75da827d905eadd5bd817bb389246a74ce8f63c8664b1afb32f12c547bac8eca8eff51e3dbcbfa394af3ee98b7d0d925d524191a83bb1afa32cb0b07538ab08f4fe7a042186019401b8d91d4fbcac1ef43eeadc19c0320b9f90fbd09656e684b3cb1226c5692b671839a38a982cd01a51c4cdd34d50d2516df2a6c8964d67f88fe3500c7c5420ba0cea263da8579f96e2206320d5983db0c76264827d552182bc4284b462ea63d7321df62ee9658d49040f37537d3ed9716c6fec42192634e0eed962204a6197c8ae3ff88ae6d6e22ce4133127f016eb8338ac734cdd07770bde600b9ddf6d88f6e23127e57e9d838e643a83e9044048d76a403c2b5c214afd44ab15018e708309696b9b01ea309424d6b1a68979311f9bc265589b2fd631d2e06c0287c9d2456cd684f986aa7db8a98065e56e56b8318f1a586f4c5afe156eef89a62d7e8ef55664805aff02396c45ac1a189f8373e685f8c11d8095b43a5e37fe296e43a31eb4606251bfc2f2c81b7f559684baac937c11289d9b7a197ba85ad27d3b3784e0ea7a4b14f6e7e4ae3323273a66e1716cd53a1b7c4f105642770102d206d6a156fcbcb42ca82a8bce4eef09e7d2f841f2a570bb52fb1489bc40907acd74ef019642567c413fee446da9ac25804b782d16171116b2c20d568460b69284e080c9d8407355b540ba36e26fd767ab7f22a51594f27cb9e3736a4342b54f86adf201b23f6e1b52d1facf95d025d8d99e3af4f4d1270862d65153766619377d4683a246b3f844a8da89cc41095a3f1aa82a7374e8c9c7ecef8ff16c30326fb118309ddf2be4aaf09d0aa8bc98709d8e0237a3fa5ec9da45aa706e8bbda9daaf75a9ca798322e9c2fee628247801df20078fad8dd7ff2cc8324ad1bc8cd80acefe78684649f6ae8ed3fd50ef51e36804e2e57fbe6e926596226b623360d99d2a70faf36af2ff2f790b4a8149d9df2702945049ba81ca1d6df6af2aefeacb0c541a3bc6e11c4dd9c2fda2ed258a4112d7587b0fd36df0e260bd196b28443359b1c3dc294d29dffb4042cdbc04203b3b09e3132603982ea146d04e9451ddba2dc9658d3aae3790dccdb7544e91aa881eb1b44652ac128efeb135fb4ba59504c5b9429e2590528af58e972f3ee276b1d7cfc0a3edf9d01af4e42b8049048149838544425c99b6b0a75bd675cd22e84d496999b30d40f707c97ada4ccd59b369762e40889e9c897df57bef717f0ce94cbf2676e3ae5b0208359cfc51634b5d5c2cc9e91cd91d1fa05f1ac1b5d5700236eefc9b90c2f585be632a519174528a35f0b0c21a82f9b34286a3adb842e51444188336798e1eb748be75033ea3f0d096c32813b39eb67930122e5648d2f637b59e868ddbf8f9975a2c05aeef3191b568b2018feef6880e80045b3c5cad4a249dfd3b3a0d98c6587835f060408ddac0cd75fc81b321939a13effda04813d894ad25b660e2dc2528fb8d16fb0264fe83f6e308293a254459be18a737efc015b7aa1689cf824f53cf32199f2d4f358e3980ea6021c22d446fcf5f1d7ed538ea3155069235e9c5d9ab2f716cdac44b0ec6522fc0641f444c0596a6219bc553db1993b142d9ec076beac72e9175e993f239e8d69387b07627df4d905d40169444bc749328153225391f11dceb5946542a4953b01f1854ba9fa384fa56f121f2eafe71715e8f536e405a3ebd6f0b9c4fcef8c7570025849a41b8c1f9ce6320ac57f740a68d6c381f9af595f40812f3d39fce70a4d369a0221d586de6a2cc058b06b28579bf30610704b06a978ddbb76d5dfe27f88712aef86d820e68feb7643be98f03cbda4903a3b8b03061e14ae72f870310b174107803dc4388650f574d8304f7e2726834fc48dae4bac9c5b95b51c2e9f16e26f2ae5318c33dc328ea0f1af2534cde4885f11fbec4c330f374eece28b77f4c4c0f048d672919258fd8065a00af53940104455fabff732673ec878d3b114503948c9666add5b01113594a8f463b8c2787e47410054e0972778058650eda2f2219c20ced9db6dd452a90775d3c1e7e1d3c18146bb0e42606f49900ec9091a6274e4ff7f30efe8aa3acf210f0d88237814cfd8732956c952d9880d0a3676c88b2151234811993a66db99279a42043c52ff3a71d8aa04369c8f6611066350274315d64d8a9a89da45f7de58381e432056830441e7963947b9b93e8b7d71cd29aef303bcbf4f07519844d57ac45b184152718cba676f898b69a258428a8e61181dce6eda9bf6094c93e503d0d8927eccd0f789bab435d96f4b121ae0d7a33df84460b064108eb891e1512e530bc06da251548e241173878fdf39668c0c5fe85f088073f5c14fd0a8b9de2065bd9f1f4ddb1fe589aa64fdd441870e665209ebc5248922bd2d1e2650ce2f31dbe1e2121c7c7c2fc3ac27b63c06592dfee9d986771148de38b77841db863d89a15ad1a149b17031f8268fc04ac68258ac67736712c8c5a05fff0aefd137f69b48b13c5c059321f3c3d9b221262c0c43e21f392d1ec657f6c4bad8341cec76e9cfd22a2dfca3064449900c9925dee022c604aa9aec9060c78eb802d56140c6be131960ed2c9813ac83df08cf8f34dfc867900e149e838abc80d983d96309e87d07988a4bfee88ef6300e65a91d299e1827b85ebb44d24f958b03b7d7e4816c389109122df113f7a5efd93c13b798e7e2cb08e1f46e929ff25d55d248796b0a0d88f50195f979a8be08f0b87aba7e1c1c93c207050fed61ead15480803686376cb69bd81bf2d50707feb628cc432772688f23941e062ff953d72d5e6249813c6b63b85b6da58bda26f04190c77f7f54c7083f87bebb902ff10ca71439837cb7346524b1639dd0823781c413908a0df79fe41c0786886a65674c827bb7a215a5a5a62cf06662ccde91747c626df98656c89cbb6b6a76fb568fb6617c1aacf1ee48eb4827ef0580e92124b63cf666c28936e94ef94da913b39eb8dc4d5475c9e1f449d352717652043b95bd99e64eef79c80a0d78365a94935f9e280929bb1784fe19dd2e7b51dc8f237ea539958c3722be3f2716c8e82c3ba417401dc8d01086b0100dba81356c272523447b520e06db0efbb9c06c4bd0d3ee0590e0dcdaf7b439a77519c42c3257e289eb93cf15b950ef0b687d7129e8316917b64a895d0fdf908e17db611f1a793f31dc9c284b56f96fe13641135c734c7999b3337f70044eef404ecb4da9b3db7c3187c9d0091aec382c33ce7d426cdf57f9a0ab67826d311186fb6a90e969a4da7bc7205c4e2ca91aeffbc12d749698a353ff3c8fc68a86e271263ccf66f35c39b18e9170225e3c6ec21806893704950096f5ef01468cc993f144d57c0527bbcd62900d996614dcdb75a93209bf5cd9156d874418305e30bd2572b087c927fc49cbb6128a3419b10083c88712519542ed31946d609de71fd04aeb0d8e5916f7a2f20898b708b8170544461d811a306c162205558a11b4cb92f10c4858b422b065821c0935f2bc1394e8195ae813d3dd600854481d6d90138d72f2f815887919698f99ada7e1a818531c904b188d8bf4889fc183900c9189b45f8632088b013fcbeed75988e9f079f451458e441301ea5b5ece99733917e46702ae5be5ccf24380f48b9bf89bb0e62123dec8bd04a418139aafc2dc705701981c055fab1870dacf4ba5d23dc1601d3ff168e950acb961a1558a927c2d22b82ff797cc8f8458f5c437d3e43b43eef344f9f611a1042332146260712dddd7ba56e27175851906fb734759778da3633f100770b413440b8bc4a7311b03ec77b48d64fa4bb16b65eb866b77c3b1c85b9e7e465e4e89dc185c4fab5af6eb96b79c21d7617c94d93e543c1ca69725b1bd1f915fb2a917bfd2c11e88532ae24f87685f17e741310638ef48999fff6ffe2d0dd021f9e3b8b287ca17ca22f610379c11da88a221128169761c10268497674e28ac5a2f631e5b9d67d2582b99544c2c9c2d48963e84edc318fbba3d682fca2a1e5319a495d3dd7cdd5dd24a5185f9012a26b1b284b8c60b63584db33b493a456a04418050f1019fde1332367ff508f483985cea2bea4b14143460d144186edaf667c1ac45f247a2e91bc14dca476fdcc6ade5d1354fccc95d6d5520ac3558c02f283a9e4793be280f03d12062119cbd0969aac77eb03e21ca9f100a18b2a2a309fae4c04a412c6e301f9e5d663a334e24eb448915920e4f300a2b22e5b06d543a6f139375597d8d84595dcc9fbda415db6bf028e69f89f437dc4c39a3be9a046e016485299bf6a2c57c8c9f54013f75135af124403643e844c28547873926b3b375918e10445dda37d2d286f2bcce3252df6bfc0430275fbad46754aef68791a0d3e7f2343faa23ee845f6b65d2ddd02f425e37470b2f678221e9d9799fcfafc3d321456c002b80eecf40d357067f8ee446a79b335f246a5f053843fecf3922d9ed18696ab45345ea1b089a30a8958d9efb315960a2f9a932c5e60fd3defd6caf578d116f874de0e433a0f7652c1203e29d7eb2eed60269247c864b2f2487b7fe51c463b1bac682822276d3ffd94084d036f8f33038f009b5f6b44a4dd7a74b1b71fe13a0795b777935c8123ad086232220b4bf3727628f3891a4b9c2f33dfd983cf7942bd08a25197e05a9e0bef01855a78ed49ceecf87110f59f0bb602104a4430690237edc0479e482f21ea2d2c85124a2c347c8db4587d19c63dc9d83a1d43025e6b5d45d9668cc9f43e17b0706c56563f367ad2af59d1f4a28c22b96a34765d7aa1ce5d97be0700dc84c62e16cdd8722fabf491aec4fe9c5529f051981756b756e2c08366bb00a59205fa7f28a483a304dac4aa582058224c06c7ca96dcbf898ce2cab643c83902bc127d22b76ade95cb4f425a371b7f051e0245656391acf873d08a471c2627dbf6e55e89f85cd663d4ac71f8ab693aa00825bc06ecaf9e3a9b107f909cc4fb258229a28862fddb556829005ea0df3cc6f95f2646abd960a9dcce0651bfcb5fe6d16393ceb6012c7142eb58a823f2dfcb06f5bc48074fb81f840847394fcfd6057122f0b61662e50b0303615b0f8c88a425f5027c8b62abbc90d7e833868f94cc1fefa5280849e3a648599546ba049c4a2d6656cea69c79d2ff91e29bc7901104e5c501dfce287097fdbc4908560262776261ba7f418b397c7009a37da578dac676d10114fd138ff6ed07b5820a1fdcc807d10da9595ef8e73500d165afa6a0d6cce335f6d40a22a964e5ad12508dd501fe78a76532eaf10e1fa4dd493b73fb0f29763b7adb2dccb74d5a7d4cd20daa62399b29063e59c7a0679ef2c454b21c40a00efb09076419fc6ec2d949b049c74d243c18a6f53479362472f47d19652dce2904fac146b81f7c53251797b6b20f616fb678e0a2fe2de25e059c7034f1be9d1239b678b2d4f827b828b319b549c37e467b33fb260ea7299d2f969bdd2137614297eb86126bb8f001f162ae4602c8046ed9b03e27a282a0b5bd2bf42093867d96c03c88902763ee2ff8903100c294d1043a983c3d308f27fc201c55b1d46a203cf8432c56894bda802b322eeb22ace54fbd72514295821d2eb8703d410488d6093ac0dfe64ad802bf391be33eeae26747dad35313c6e9616103ac00fc809f5085458f7c2c819719052c477418ac57d91cbe015cd24a4f97f2e001e61acefdcfe0910a8cc553c062cf77df057627554c87d683cdf949af06afc91a1cd93ff4ead84c37c04a70637facc0e080be22b4363799404305a9338b71f07f1f2ae55b9e1382db9d64871d8afd80798888edf3995778393642c51bf8816cc47ea4014da3623bbf32c8c2f9e2879580e79cbd8359d3736d0a93e57dfe2428646031f6dbc1739e713e828ed4a2582fa14b495f445ad0c31d78261d88f6a0cdfb82c2de0d94dcefd2af9579aa997bb18d5bf2eebe3adb373dca05c4f842b346d1e085400dd20d2ae1c4010085052109c1a75abb40befbe800ca8e2f05dcece4c41a5df386722154aed44e1c77a4df5b8b0e8ebfa7dad47c1b7316a08fcc9cb7421a59e7a960f708dc347c39990e77ef8a9296f6cf6469ec2f11852bbf1d28e11cc6f9b85dea18319e35c712a80dd2152307f79baf41e5dfd2934544a059880a228b00ac27a8c896249fd523ab7f056b20be270aa5935fa1c75e5cc6b68a741965607e631559573c056bde25e37f48b00e79d7691ab29a46f84d5873a7871a3fdebc2af4ec31fe7f72642591cf82330724f03875ffec741e39a8ca110d4adace4cfb929730cb4cd2bfc15d96b7f560af62dde0565175a7db7124ecfe39e3bf5cd39ee14ffe281f257f06afa1495c0be71e1a2a768fe2a6a4e08830ccadc965460b44e0f3487761072b71faed4266762bd9134211cb529810467995c3a8d7b38500d541b1a987a7730920f1920e2363abbc1a85c47035b5ce963dc379a5ef74c46d1b7bf259b673a46b876b90daff7b594eb80bc52848cf7c12fd3608b7427b7b7153898a48614475940944b900495837a3a6851a4c28209a8529a223410355bab766cb70249524ba88e5645ebbe070d8d55168bccb0cb29ba1ee89d15b8733549a455303d24224ba2c1c63d3d7c30231e57c7a16d386c1bd5e36f7b6e9f5ddc000bdaa962768ea5112264ea2331c2763dbb331fbc1f58d71910a5ed7e036e74ec0da2452846f370dea1f60323cb2b02cb3e00e205b0cea04d77fb8f2c0f7f4891e2f412820427257535386fa3b9bef4a8ae49aeceaaf69592447e8d4d9b13ddaa1205c32dda2ebed8c57c439e94e45c97bd0b0eaac37e25993584cba2f37804c3ea26cdff23b1fb27d7b80e13863a05a92edcfa4ad34957d6a35952e11c788bb7817c059ee526ce5dfc2877cbde26ad7f87a2b0c88c204698d52020e95fbac0ce5be65937c38f63f7aa57a889edb1b4f87aae5abf7beba73d7ef1b561abc0c7f398269ff0c5fc6877dd4d9d49419248e94913ede5d3ac2baed901263e9226c19128c395ce75c2323be581f5aa555fd8da4a143ce68c73489aa99d46a6426f212211fb3f7eebbe29d1500cd1e6fed370c79b6caf93efc7804410f3bc75ef3d9d908d756ed3a656784930e59ed7c1e033f48c8224917c2a0c12ef33eadac2027a73c2af78b211072aed4abf6bfaf194e7cfb0bebc2b9854d51f0f2c4e065ccf35619b6bb8b04088a5ab7a0f26a6c1e36c3bc9737d22209e5e17261727e7e738fd9366dc76084696a245464f63b9676f2342f42f067a7c1a39a8cb12ec16ec4018e5c36ff87b63510927d0a22ebf25b59e01c9afc4694fb47e712ee33d348cf9944329599ad985ca072b85db0ca1d4ec2ff582937b52f6e507faa79c640a5372fa035c455c5db18af4de3ac8f0bfdc89e0adf6673e1c0922b9e53be64ae61d6c86719c41ec156fa8da4483805a331a3cf1870adea90f44bf1dd90ed17a84be3284ca32fb3197d09c32d04cabb2f9db64fb404430efc5d39faf35b9ac975a22fb74f135efad9af6954ff2f83e85c32b9c2f6b29330976116c8876ca5cb306968d48c389a2e2224d985b450bfe3cb508640a1256215aad8e9962186b9160838c1706cf91143b5a6682ba595f133820501e19581886991b55936d06f0b4afe11072d03cd7127a1ab92a75d38ee607352b8d6e30d888d4cc94f79a355521f866f059f4ff51791b785a5b4b0e0742c808113213b79a8e4a2b560c36d35f28ef7f70bfed2a8b1463209ada2c36db004489e88214e685fd18edd3c58dda9db1a24887b8cd38409bfe73be89da7fc0cb7e5b87de1d95ac5f362bd644fb8101f46d2a6d05505d9f50caa3aeb58fba675ba167488a9b8d8ecafdd7819d62c0d34edef4c939c0b0328a1f2f2aa11222abf9f5f85b11cae4e64a557b98e1f252e9cfbd1b8dadf2ac4831aea87b8de707c08f69f4eca6c262ba2d45e05e1bfc1615391ad1b1d1f34d2c2398d0033b12124b39ba96a40b653d9c4c7774994af8cb46786b935122df494b75f4b194a45bb1bbcad6e1d8544016336e274abdbcc9c9b4926334fb1fd8ec9df13ca8a7fde3909197e5d21145ef504f5c9a29469604190206f00d77c539c2dbac6c26d0b429ab16b5ebe41bc3ea6a56c0d4a8ff9c1742c1f3b505be7b61a86b7ce4def2ac939e589a42d7de47f17f226a72249ba0998ef75eb64dd0cd74f19767e3305b5a7d5c3e1d353731a08e045c061a64014dd1b5b5fab414cd8c5906e978c8667af8ee2595b927abf7055f831c5008445122e3d56df6d1a1cf0a8ef8d35d7a7526f891f32aa5b4b9a620662634e76dab338b7cfd0b8ec72d179a2537df1b119357f21d6d2cb4b0748837c17cc6009d9d01cb11d50cfc5a60cc702f588ccf8d6df667f6fd979511c879993c4a75420b6840d628caf9ca372d563690a94646579e0c5b8e9118edc680666259f5eaa0a13f5d00255be324281faa76c54e73edfe17d1bfefb40e5e18784f1a9cafc758f004da379a0c3b1747ce2d3b0e90e33494612f30f6159be257b158f86c68391c01d27b12eb19402d3bbea839f089a4dc7baadc08073bba5a11fa77c7e4f428bcbdd410f9dd331e783c7ac21643f6def65cf289844423887b0378450fdd5dedfa793f8daa9239729520219fd545cc03eee18219813dacf7e6ac8c0e1b6db0ef4c3013169e789f6f81cdb463b26e266931e225811b2de1d8bc4dd5558a926b3c937528bcf60854191503768647dccdceb0fc108e09335ea7a2781f984153417052bfc8f1ebf1498f59a828b96b03602584886d17747b253392a179c40d5f9ebb94f0e307c3bf2ebcd555c8e687dbd16fd44e51ecfe518d299cc8752e39a7e35742071d84ca44ef3978da9987a58e54facfe12214db7d62ae7c8598df8da86dde2fc934b6df311b30b03f97dad3f796ec3e4411ec9f7878182463d2791cb8d11bb95e63a5f8961731b7bedb7c429f2ebbb2b9f130f0eea007dcc170011529cb23ef7666aaeb8d52cbd5f8d50233b9782b3d6e8f9ebe0d698ae4625336d2219d13b836570d8bdd9eb17dfeb2e6e04f59c063164b3cd08ffe449bd489162f0aedef4c32bd754a5e02c804719f503c517ac736e20d80d46973ae175c43bfa8be5d4273c3f220177ebc4c42d361d1ce14c03af8db99b04c82d2aaafc48939d2b4853abc9964b4e739122d7ae11f6524de0a5a1091edd71b9d0511b54efd84e810402aeee4507ba99d736a7526549bc4ce7bfcd18efea4ee2f0c0eae650070dada7ce2dcd0548433d0f8ddc409fca79d7046458504cc770261d1b5dc5ed31fa2002ac0a47a4f1d240a318649e310d1be2d85aa87d8a162b25ed8372c08a382c641d3d73ab65b055af578d1862a173af2f89fc72b35ed2de9500ff10f242e7c4869935582b1f28a3a1393d6c9542c44b66191e5691e668d050303b8ec1a6fb02eec751fac163ee8920873cf2a50239dbaab679345f98e1a57a7c4121d2858fa634a64b01b417d4db7bb2923dcc6fc04ad1a4a7c7394b844240daae6e99407ee2dccf72e47fcfe9b0b4376b9c1f2f32b7f928a34aebbdc2be197e24974146fc86f148a482487c7ce31d7e5cf1c6f38ebc6a6c849df9b7fb7306d82db680b79fdbfd82e352deac044175ee246724b85876a3d7c68fffb342b2e265a443d9f345edfd593d36508110303c0f4d15c352cc13e26f288233fb057d87aa837419cedcb5c2f17cab754acbeacc326587b1946d3c30fb1c39bce08177dbeb7b83e0e9eb8d85893f2a10d4501ece892ba34b96ca41bfc0635c7585cf28ee2d47a503eefbccc8354c1ef84c1d2a62d7ca79be7d8771590df686de7b485ae355d4f75144905a12be611567f56cd34bb34dc3b1d3a28ba6995804e1171acf83d494f9af3c15c73d20ba0ccdc4c6faad2ae1c0822605577c82c1de41384ac581fad3b828f5ac322785bd5f7959e199ec31f5a8b27a8c30de18eb006f77e361857f3d7b1afd16b263347a4c9f4bb6633c0a2dae831f638627dbb94ae76c9b7479ec6da3a4a9fe283f4a2a7876ce4b2a78913055260c67ccc8ceab15522b896b3a3ad0ce3690e678ab3ca995df37e67957defb4e6c5f5f40bd63e3bf330018a6ee6693aa0df099b238c6526729e3c70a0bddf299e80ed19ba733e730c23c771448e4fc1354ba1c223926df9d6a06bedc7368a5e6d3b6e593b634a8182b9470ef54e934b93149c4f85277ea56584d8be090a004baf0490271ee465f9266e5abae7d1c94694cd6da2ded1ae1b42ec569267d6017efef78917698d289b06d9bbf1a74952c517bcc680068e9637b4960b30207d38e987d1756bbb10ecee1aa8f02718217c7780b0c8dc9e1eb3d0f0035507dde1368efe356320e562bb2a1961c37fecab16dd53479d0e48d6bd5d569fde6c4386d45ef73918811817e228125b647a80928e9529702f536bcb2c8739a91c5bede15c8d62e8a5f4a9bcc201bb34409fbca09efc9a736b51add8ae8d19dc623c448734bec3ea5bca99192dfcda9569464004dae50f4fd7bb7ddca984645f7b64b3e6b3a5c6b8d27ccd994a350ea92bbced803dd9bc0043bd1d1d12abf3e256bcd27ef63060a268777fa9b3bca24087ea11f40a29e93f738124a44831f480081c21a2b53d0388a8d096548d8a198a9d5d95c62b964893087bb21c6cf3449572fd186ab2bc941dfb4b0092cf32a27f43babaf618712d78511b98618023f251aa604d0112c3dcc8a510a4e9340368742370823cd78213976a2ad4d8e1a9d84b3d0dd342c31cb28ce76ce7f5d33e1c38f8b2261bce6a74106d7483d63c3f88fc0d80624f8b3942ac5ec72ba9428950c7482744057446eb45f1e1cd1b3e7a436d6ab68a080e8096820d8fd9cfe0ae6c871cbd57c144893fe2e892013ad957884a454cf1d9655036f38a5bb512431e8ed7c34c61c784f86577450b557cff6691508cd9794558b898823fe3737d56e517154ef2fc5ed95be58d10a6e745faef16022436aee6233fb7d60b68239459baf748009ecaac530ad5410f85577bad3227dfd502bb1ce008e961c8060c3cbc518349e0bc50fbed814c8c5e4b0b1c68bed0c31ea5966b00c7c9f38b0de022afc01568eb612d6b6a6a51fa7fc6512d312c5ab968b6f66b9dc09ea9026221e3d8612405e8471eaf3bd033c457725f541b29870386860031077221cbf5c13b48f7374ff4ef83be322ea49841630ed1cb1b055d68c44536d46706ce570167d09725683e209304ff1efe09414a5a5f5260c3e8f2d7db009906e3e727a9306a8d7d7a7e5660c20ce2fcd01a39d3bc8b0925c2146ff35e1cc6c233f38a53270fa91ac6624065c343919e058f387adf81caccc9552d030b0396d650e193a1f6e803e917c171defd6984aa4a8094f14093729f697a6a793492b0ea485ec70acc570d94276f78a7b2903572d3e9178c7347da900934aaea4e41774f4eddf6a9acec799f923c1bf5bd9b3a57bc1d64b63b62af9524c7f37f224163a881119a0e908f414ee36f90425f22e2d0e78560763b5b822b2d47da38e2bc163fcb40274e833019ba4ba7c7305b2c085f4b7d5609e15d7fbdefc7aef9a8f0a02b7699d603c3414a8bc11f9e8a4b28dc0a14005f389294d003ed9c2a3180077c08a8e06d281322b162a5ec1d79bd3f957a9112d54c6117f849ac49be8ed55f6590160e7437417cc27d94e198eb9b7ba807106fb195618929a03a11c2dfbd9d6ce27e19bf363c885b0d4ad473e382145a7ba3159072c9703d6d5498ea34fa14eda0d50a79fed5062d5acdeac0a2420ac44464e0ed9410af515cf46b924fe2368fe1ac53883502376de37e1e8acd4947f1d18a15f9b83a726cdc58c2f5873480b384d14d3c84aaad74341babe1dace7c2662c60dbd6e4e27b3e41484a346750805dc564fa4bdc35d269e5e05103901887111ac6e122ead54721299ac23ab2ea3ef654510e8489fc1eeb5767375641c1914992d21a94176d60b732f31827356c832d403b29b9206920d78face0638e4c3fbea721d45a59e86332069d447d8f1489bc15f55918ee837d837c16c9e65ee1cd6b5d4d794dc0697bff94ea3dc2791b1647886c9030392297c498954865c6cefbdd0788ea7555730ae826ec52564981ff0222b04a6d5f91a32fa01462e80a1e37d1a1bc237b64db9c4bbdcd2264fc61d67475023731e2f4aecb4e4d31527070c83b12f1355a7ab60eb35bad37879982994e211406035eed7cddf7fb3fa18625a94e6d9f066141e7a7589920cee1a4ea96a4685d5fc05707d03b6d6e96d799742ee10c75fb97cd48e2bd14879406656ad5322dfd993ee154cc289a653ccd4b80c25eb66c3252257c80b15e20ab651ae4d55cedf41af565a07b402b6cd825ae065765c9344f5878055a22210fcbe548918fb3bf6c8b7d99f61db9d3219aa8fbc949fbbd0f6ad2d2566e2002a5977c04ba49a62eb9542d9c1e615418275bbffd856f37b549223b6016fd82edb86a0db4d69bd461d289f16237b11a3f2415c8b5a4a8555b4b01990b352b0205411b65ef2058bbd498e864a8cf03a57aa45c15323f301db16adcbf70498438d9e1dbfb31d26500656585f8246957b7e1f2707bec7b28994aa4393f81c4d10e412bd8b69efc7f1369a1cbadc6297437c2ce4d70ef25c4ef6da26b2d6eb55e9bb3dda11b7152a038c0b1b4e12579e9247f83c8a8528d20b4e5322ae1d99bd5ad847081089bf97bdf46fc4d41b7e7f20232f48272b3de5809809fdbe7eca7098675552c5eff02f4aba9acba941c2f0092cacedd2e6725ec4808222621a70d2d86eca0e3244e1532572464dc61f91856be389b124c3e3fdeb3c4f85d27bd143e56be51ba988b9b109f1d06f13fdd28260550009bb170487ab053fa31c8e61a3db54c015f6dddbb43f529106b4ffbd454ba69632c0e73c217650983b31e3cdb50ff1737ad192cf526c521505a331e91dc550a05a79edbe16cbe347455e7ebdda65a6f14a6f6f6eb905c7aa21688ff6fd47681b78aad246f12d2834867ebba6805d2ebcf5813d82e555a565a704962f226b5c866652708738ac267cbe10c8c4df881419c815b28630c0951528e29fe608615170f854a33d41567257b114f89522907f6329da7755897378f04faaca548296abe7c7d509d0bd7c14137e62155dbcf8f260459c02d74ba98b8c908907e920e5135caef74b1ee93ca54df87756a68be4c8a8725a769ff8126f44934b24b6ebf3062e7549021716893fe6e535d6b67eec3083cc142cceaf01bea4e09ad7fa0b0056b5475ac2d4e7fd3193b2ad55174a1c6cee18407572890f93429ba23936795c0883db8709be653d28f0da03ba2ac9d343a99e43227d245ea49ddaeed787c33b30b1973751862f7aeb44ac75b6404725f21a2ee8e9b13f5176cdf9494527347e18354a98c83f8271db1c83ab03eaed965e6770815a9912b59ba20b3e4ed1c64baa28205859602761a2ddfe53857c35bb46a881c6baa18936e2c31145c44281b7c705ff417ea94bfe8ca448627257fed3207429a54de9be0eae64e864ade2c28738d12dfb8ee8ee4091cc9abeb7088c409e5aa932c299a010c67cd61c521a607fb6dc170750ed0683567c51894d10157b5e17390a34de85ddb9464dc831c7c8bbefb07a49bf8e4d55442a3a9e135463f5a66e41d659442c2bd2d369c0adf14649d90d27ee504dda10fa404372c6a07158fc1e60c1b0eae4da4640fb1a515a3bc3b024bff4e0e0df4b604ef5fcfd7e3f33590c202f90df1bccb690dc4d00335e525ee901292f07cd99af027f09486bf1d508e560bc373212d816098a8b691dabaddb86ecb2d0f380f5520fcbf1d97b2331f83befbc19454581a84d898808be30bdc7f654084900d1f9adfccf28f97073ac641d70760d5d9dc9cbe8fcbfdbc091c30301b0a06edf42c80a82c202f1b3d3b59ea3d3d1c20af6d52caa66deb8e0a5700275787eac313e346cf63df4eb91156bcad3ec4ed048a9fb3665a5cbd8441cd8573ad114c1b9c2d72b23e5550f0e2afab6c5ed9e330dda498082a0baaf6cceec1bd75520863c64f5b0e50a4e04757450f09621c958aad3b75ae767a2007849f99483344dbb63f3231e1b93939f7dc0dda6612e824095c87e263512a7dd4f7a4229b3dd493f75a72170d7587afa257364c25e1c27f3029ee6929728baca368e16e581b6c0b320a9c2b2dcd660fc99c16f6bd9ebcbf243a58562864fa5d0c9211101256c7afc6c036da2b1f26b897f3d3a7d96e5dd440b07fefb483cceceee3a5762debcee8e95ecb7467631f689bd2f1a8e9ae33ba3752faab98cc394d777d5313b7f4af0bf8361de743752c44db761a94b83e133236cffb4aa594d85ff2d27299e831d446fcab59a313adf57d11d30caa7ca96926fa91653c2a334f40683df55681dc32a3bd5d65f577668fd9aab861373ce75aafefd5157fc65ea35d10afcff77306373ddad5d768fb82ac9f8ee741a3dd5d4dce3aea870bac68d99800fb28ba5cce1179d3a19756584b154fef5e086edac9a7a9493c275da0f60eac58e6f2f72c1cda9635917c0a6307efbf178fda23d793ab70dac3ca025f42db233db457f00c18b1e0d7d111e05a3fbdce3caebba17e8a862c611348fd6f757d547ad736ddb1b10cdaa6e93c6e7ad79b3f95a71924e6773ace80b6695d8d4f9bb17cdc74d79ad68d9556e48ba944dfcdb7f5799786bd38e90487d69043fb3e0168af4899af8839eec01d4a8bfec7c0b6951c1e1f683adb94631c8db9420ff8963d6a7637d7c90b71187d9107914a42dc55affb84e92e20c3fec67a459d6c276abdc3549325b985a0e7f747c34522e5cb5cc169575e8ab1d2f6aceb5efe2addc269a97dff02c102efdc057744e3ec89ff5638cd10a69ccdfa9b0ab19c0d0015b7b6ff36b22b1b30cf9e13923f63a86a72c6ea736a06267395f93781c1f7e66ebd3ef8ece3ead7a94dde93a7a9866413235c808f28ad1be6c18a461434c0fe7c5f8d54a4036fa7ab426b92a1d7d9572115a9c0f1d81f68a81ac9cedcb325cd06245223f6d7db385eaa2e93e5a05d9940364d671cc736edcc6348b6b77a13e85ccefff4785518452836eeea8f4e995ee564e2ce64b7250da878897f9e696ececb440ea6969ff664834c4d82e922c3c8b7f655cd25be29ffb92b3ddd6bf394f72c7805ed958520493411a51068efe29dc4bd323ed7e44a9b1bdc791bcd44376b3e400ab5affc235c3151f49f4e09e691e1a0a0c7975b750a3f41ce0e2370ae3686ab520fbf6a50a3655b58d2ed3e35b7aec02a02d841c90263e08d0036a5ac419d9325310a6b53cdc00de1da6ae52873e6db704033168e94b81631e41a50166c1ee95e71d925fb33d500237b1006e3d3685e18bbc6e6ec485812590b4eb9725c1c690f853e81c352a5505aeddbe3bcb41d67129be061cd9d9036839f8c1c111b3bb15693ba448af104d669031e61483d8b6bb1eaea46245bb11babb936dcd721d64f1cd0cca0562634cf7e4dccdda217ce4c95a2f915145bc29b1c83a0115428c945bd1d087f4e08a1081a39766a60a9f860b093117d2a654c2cc5182880931ad5f136423342bc69db47ec04a15c4102b76678aea5a8a889ac4775596e68f7b1e906147183f15db84e984d95ebba136ff45340a45ebc3118c80c5ddca396c91b0112a41c3dbcae110b52850e9ca603dac4ca981adf496d035ab2023826dc88d2ae2069261803ff34da3478d4439ad6fc53cef98c77718198b4ce237e68d14d6e18ac42a1416ecf9d40d9698a1cb48ddb57a0fca2cff475d3841ade192fb9f27a507da9d90988af1c1f32341e32c0e2c05e7da06519bc160fd0a20b94693d889b00b3040741010ad39d0f74e074c48e1cccc3664547e34ff39caabdf79bf3c5277216e3d4ef07a8313510df07661e72334165af5cc26956aea36a76b0b15d380ba68d0daa9b8aa95ea218a64f0dfadf9e62a3710c8f8cf520475644e868c5afc99d5f533e8a7162bdff50afa1f56c5a978ee9bf4a0da4369ffe737efb4037fcb53324002b9b7073468f9c9352a7364d168a5afd6bf0194d097b4561fd2ff81574cc8676643f6c7e91f702c85f4a029dc304afdc62a4ec68e3dc2a12bc2f0593fa5d7db44b216b45877a4a2d0d7b11c48c6235f363c2ce0f21a11886c4344dedb6561415ed08eb4395c24d56ea68534f59c018552c069c706a1203a647504815b3c0ee945729b78f3d678868eeb77c4490ead99a3722455b7576e65961dcd23043c252ceee5e0169625ac5808053b112e20b0e2d15cf6b55213d8ab903a0d504e722ee5d3a1a7bc4d491bf1499cd5f5eb171a8146462898432b63c17fa648c8bae26bd13e8481c01b84d3032ec567573da398dfd491420f8ad89c476ea0b0e04bbe050f32078d8c06cae99b0d65e9c93ec2b7ea1fb8b767f5d312de7dd3d6bf3a8458d4fb380e3d4558f8a2d5b9948d529632863ff3e7dcc8ea28c1939b9f4509e471ee1a0a85a07e496a9ad43e4ded6785dc43d36471eaa085dd9feb2ff5194176d502af96e054d46e564702731b2a82f387a1f51553b0a64492ad26aef1fd07b22252877740331f026cb67c503b7edc53cb5b319b160328394cb53217de0c9ec378b70b7392fa5f48084384fbe415911a49a463cd17d0bc9c7e3f0fcb832e7a65cca4f8cf2c1cbbba7d2eadf0deaa157518127c1957a97a3f54d7cba1439945b81a403da2232763a3e6f44a10311bb2afca59c3ba3c6f8145271da22a0d84025f8777eeafc5f98e36fd0c1a62f8fdbe2b1ec3839af7470be84ead429c1aad7be9b3aa40a454727e1d8f36d098409bd2212d9b7b70ae258edbc9da595bd91f57e4a4f73211c574a81a79980d68ab354b7506c37c70515ccc647d0275d917a2c99ad264273e780868605563ac2520de5bbb7e83f998bdc82642f0fd0c81e8f6f8354fc30a526c77c9bc033f648c9f51b4ee8572b4c2a6059d3bea96c6ec8fbbef943e33a8b8393596a48dc2f3574f2b84fbc735d51cee8c7380fe0235b2fd9bcf18225096e7f391b43a705a61f1cd23cf8dc30c08119b5102c14a525fe835539e4c91c1694fb13f85532fcc4c26ba70f3681f2b0047c378aa29906bea029e33700b4f75d0c2d57dd0308131aed3958b3f1b04566685822947e31a1c0c521f20ff473f6b4b41acd5ce3e2ced0e4388e7c3a3fca49b227d24315034f851a23b19c2702d95ba574b7bfa6b6f7e2a387e43ab4b4b735b03d7061a0083047c9ccb51d4974c37b17568123343e9cb3f78038476a32ff1d2929e8ca57bf0679d57e359cf43bd4ebf22541bf8474e904465204a4af6723ab53df393ff0626ee240dedead2fc64f2346b7cbc8511de14e2dc7e9339944b98f82b710b9585133688588e63e88921d6825f04a00e07e931c4c610de5dc42a68c87e15c46847ae4e832dd4f487fe3eb0bba9d203ec6d70ee8c09a49d15b5b09b74481d924a09c55552e605d591fd530afc70ad80098b1f73be4e2c1ec2ac84378e6ae29fb011c686fbb683e669bf3313b375d74f4d9c334b2931ea89b79e69c1bcb1e59a3243ac99b6ce0e9f3bc7f51574b0a2336c0e1bd5b7c38133b641b2faea0a17972c613e308f60c60f1ebf037db9a3f87ae0349b43f463312d59442bc5b15832f457292a72a0095cda79dd13590c60b9747fe400beb1cb1422c12d1bc2c1ec30e9388ad220948074708568b47996c4a3f6fe18c168f35e1877bda4caf9f9ebb1ad6f39a93e8af9cc652202d35cdcc7f4d738252901661639ec3cc07c31b1cd417c03c6a9f1df933dbb68cb34da6e10cdc68480b7a23ef02bf4d1c60dfe14a5ec9a18c124c07723b7ccf1aa698d52e4dfd625a29310156dc5cc2c76e55a9973e6c029f5963294c858aec6fb8f7c1249a9b5fdcf3ff2b68a8b008491b5e2baefaec2c048eb339f733aa4c9aa8b0e9a229ff163699d4f2a5315f2f04d9cfa090190f6088201927f4b3283899d40e02889e829f3e0c4c25bf27b8b985d59d333da67a7b710bcb92bcdc08c43e228943bfb54a5d04244e0aaeb98fa126fa1eb8db2356e5050d40166bf558fc5a5dd7bad7a757cd56f88b821a0b6f2878031c032182f2b9d558398fca602a41e200c626071d70bffc45b9e6cca51010004304a0aa504edee7b1ba2af055c38b0f0ddf12b0f99748267a9aea415d6296af4c16d61bbe9f881583dd328fe9a3253c67f65d084bc41738010c6df26815464722a9518084daad44115ead00c7c7090ea552248678e015a06a748e560a2e3fb2ab8814a15b3c1cb680f322bbca546382183bad519e46045ba41a9b2a510f0c4d0a8099fe3908565c80f4a4327841cb084b6fa2f3892282ee7b5ba44f2475f486215b4d9aaaa172ecb026b630978c13139e90649175cce4bd01798aa80d591e4e2e39150e52f4dff2daa941a78f075a0ce5623ed3f79605a6ce5454f0033b334b117dfabdf554871061f59514ebee049abad06ecfd4e08aa715f29a83b44062349c7048abe1bffedae15c974f408b94b6ba7879e4e713fdfa182f13d0237ee2465ea7077ed903002d38d0763a50b3bbe3e1738f2551e619675b59d9be2df2590a96f71e6e30ab547fbc496fb8d41b1bf7f82249d436431240d9ea48e76e24de09f804e35bf7bd1e5a94cc4ad35c5c2c6ca074552671e69c1cdedb278b770047b3959dc29ca091699ecfa61594340fdef3690588a2a5c1ea5b81d982ef24cd1ce317adccd859914f2f935002e82325721b223c4a60ee04680f45b9de2391930e24ecdc21054f7363fdf43e7cf5d3fce74be188b9b656238015755dc7f46a522659e2e4a385981fcdef9d971cf197399e8e4c89f26c8ac364478e5c606a4cee478d8e6097654986acd1dc8ccc50b43fa7c1855de47e6a1c697e4e8beb5d17cb4a066f3e116b489df8d7c442a0b2b818727121fa7517d1509567737f3e5a486b7210c8c239d30be00fe17a09efb66297b1dc6eb620f6965096794cf0854a14f5797a56c08c6130fddfba155ff0fdfbced8ea119d66b9a6acbd3ece6415334daf99280998af37e74e21d4f92e5d84b9f98d2903880055f5fea2b285a6e915ac8c5dc7e52f0b249e5d6195fa8d029382b3dfba3f81ca7ed08ea9a7cae3282abbbb30901bbe26de459d51146316f763290652a8a5681b4199ffc1de357caef374d535ca3d3c7fdaa4ff149afc4deabdebcab051cc9edd56eeedfe975e8cf28c397648fb4bd5f1d6142888764fee33693fb8061a5c26bac75d72d4ee1c0d700dba6d13c9946e2be873bc9ca0976edf8b3576a90eb43b1ccf6483aadcfe3f33aaf5abcfed50cbf62402bdae47ae2fb6e83f070c89d0117bc9964a53badf25ce9e531a53e03ba09062584c50f8e74f4b9f3afd26838a0bafcb13cfcccc8cc0b6bad8fd90a12d6194c94c49836ee13b0953d28c43d581b6e546de9760c02363a0f191e257fc106e934a937f57acb0c87e7a78f55efcde2263f9ff41f9a0aa871f2d781eb396924c4b2e2923c4a779382c9316eac7cca31817f1e801ff423e6ea97654289732447c52202f2a646129cf9c436d8da74cc3ba3ff4dadcc5a466fe71d36736091e943be5c025c8444ee496b9d015186184960b2da4529001b2290b86b3a039fb18dfbefff9e8472709aceeb1130c09baf48be881c984c1c1435f0ed9e63085804947fb07768b8ef55a66bac4df6d28940f037cf63f5248582268ed164c0976bfc12295cf13e2ad10f186279551308fea900c8760e7f90877a0a170fea09402e3f66aa37abe8522f54038da520499ad0f59128504bffe5030d4049973cdcd07a127ae5523d6ff0400a220a5f4712b75234c2f5ad40a7f3598e61f19453bbb8f795a2636869b2d7e4c03254b8260879e4431299970f73d9069fd0f86b541809c78382a9d462fd237e57d175631caed1b4b479b4409a74dc5148ad57efad8f052b867ffb347a96bd694bb8ebc03933a5aefa8f1758b65c24c4822de363776e268a6eb38bb2bf40a1edd459760669c26a231886b8df9dca3c11cc2f1c16830da04c16c00eaad2b24f33adda369fb911ad352d597285da1a5e5aa20695d9fdb6d3a2b72852e1e823210e28ad60d6aa313aeb9ed5531d20491868820b3395aba57ad3d676311a1787fa6f5c1681229bf4c881e85f213274bf8633146df8a734abbec719215f36f48a800f7776ba10577ddb0a8b7931d89124de071f6bb51e541a5ee8101bf2bcf8b3efac10ca2a18c5f2458dcf0bafd43d1406e488ccac7b3d44a0bc7c771b45892b408536b881c8e85db5ab2b1377dcbc9a1a87beb8ceee2df332c2f299c1cd15d84481cde222ed80ec0ac19e938cc178ed6e2b6a31b11e832900e7b378f6ae5308a92d9bd4e4ba44ff5759d3b66edf4af3836bacc4f7f40ed7a4a1c6eaa365e8c855af0b50112e7b84e22964f94bbe48955899ae2f076dde57ab5f24364fd44b003ea661909756d4e6e4f5bae9f4ff50e3e54f198a11e57b50039f9913b16e65132f69cd87731eb897a5df46d3c0e99ba431c7374f1888bbf723e4242471d9890cf7bf8b8af051ee9243949f9cdd70c07651513c4d5109c87019a226e3b71a5f039aeb27633195b3f7ceffbb6a0e9a08f9105d9ce32728fe9c3cb440b6e275bad11ef5e653eacf376774a576affeea98e7f320bdfb149d1b7c0d56f436f3c0ef280c53e1e9e803a1d9939956397d5cea3f73f716075bea52fe50780dfc237baba01d050b2e6eb0e9d896b4e90e06d2317bbe08a7cafc4a39daaaa421b1df71ed9a74db41aae9c6af0c6c1ee12ea63887aa60defa82c591e991c61cdc8753d47dd09287de0d1df24b9e3960bd70bc3c36155229c9494a2fa338d489d32a34e02a9a2d679b72097678f9d0c9c6ae53abf87657eedd0fe9a956d27594e0c8fec1fda4b77bd701db54bcce94db13b7b2bd77fbc516e06d305fc73c2bc5b691676bb64ee757043593d06e9ad8a907f88cc96bd858ec0a8d49faec91277afafbaca2e35e6067052e93dabc5bf2f36f74748970bba5cc63de808cf04d7360dc382f79742ae5ad81cab9970394f9ce7525dc3dbd54a603f47821459215b1331d4e7227d775287f9baeb6ee79d6b1da4663705fd0eb156ea6d9b15596899a8f19d5c8047d15368b7bc674de40a6193b3daeef44d0821c9e2330e961d046b9121a1b040de22d8aae2ffa247028858f9022dc9614e419845e961c880d632ff5a02cae336014503012da8bead62e574809cda7001c9cde1e69e31403f80b2d7be052a2983d87724dfcc3e477e83259e275c4ba1f07d498c6b0601bf36559df1bd7188543fd8c1917afad596c1f20c9a0c7bf4b5c64234d90cf223f9d08602012c3c1c64399a42498bd5c91c58e48fd760051ce14ee9f5fd2252600fbce4f3e0803c00303a0fca21ac74d1fd46de1ad442a3883cbffb2d272b5e5fb1e6073788f1f9b1bcb93655a2a05b1da50ab9a26f1904a0d0c84e85c5ae9dd66ad741ff4d183cdb5eb8fabd686f2db866c1b404a85ddd50444ac33dbb944418a29564da730558a1769be7b8d2f967b55c42b08ba02eed8249ee5743b7f41f49cead0d8c94ea15d8b2d7ec994933f602e254db65927ef6e8d63a3eaffcd603db8ad3c7b32a8d7128094f750a07a222ae1d3398b9f6021385dafeae8033af5dd20cb0ded8bc16d16068546291cc01dbec1a4125f2d9f0baf6b22341d039dc5d83455985f25489b2b4d7176e85a1bce6fd195e10981294b5066cb39c2944955e8fb49ca003b6cc47946e77e6f60e959f9dc34802313e5b6b0bbddc4158e43a81764300d30f047aa9d5dfeaf8111e6e30e896870f854a486be804e4b420807c44962ac480a7e83add53b1c2b940a47ab3c6fd88481fabc580d68d52c056bf1daf20419dc066b5a0706fafc0c99e0adede24ad0b9b587781428bd34b43b648e7a9bda3c7143af77103478e447004e139147d724b09e6316c3fed4e847a4e3b2ecd5d768f9aceeeb54708900fcbc9493dcc9936a5dc053fd044478376737a08acbacf141177320c10340f67b42eab2e6185b4bb04935c970be2d5a41d308e3fbb4028a78703327307447073be2d237e6c42e79dbd3611d00a288d23606034db9b76986459ca179f079d55b7467fd56e0896d6edeb6dfa4d49f13cc97cd34b63350b395e085b44e9f534f6d882695fbcdec75917c21dc5ee616255ca1b89d58954338c8de937781e0c7d5448e6f5a311b564f323825b3257f0567cfbb2acb98aa85812041aff47fe7bd4910e6f9b688ffc3676fe5614e1c1e08dbe091a4f83703706f14e8bf9786b71a521a16811b33aa78f20dbf8079ef71eae7b57396e25d80b0fd1ff09b6da83ed69dae704aa9855475497e2b40709452c50a2580ec27797f35f7d947812f551925418f6186812047bf0ef012dc505c4c56336c4e44db1c4a9a34e14eca06ecb131951fd700820f838e3adcb9456ec426f15c07a074f32ca56e39ee3d3591d76301fb6c6b29822fd6f3c01f60f55a5ec7c8becf66d2e7947d73cc167275f744ae055df1409aa33f79a3346c67559ad131dae6dcecff332f5fa1808682c22a4a635de0dc1516e256011e678f48f8fd460ef2713428f52a7fb145fd111eacb0ce0c0da3348df8f4f862e765e46d7702711ef4a4f7459c4612dccb9ae93e890330673a1e87ce789b8ba933d42b5577b90b9ef3cb32931c54aba3b4ae7aac45bfabcd4deea89e9c8bdb573b14881839e13643dfdfcd931a904647de520d2231b27dc54b6b341b2e1c79621094b4b964d44ad6993fdace4a7363eea1948a0f44a4f8166938d3db81bf4d1165900916e4ab7b8f918ba70f52d6c0c340890c194c870539e6f5a32b4872ac34ab354624cead4dda695f40fea2d931831ca4eee969d2e1b9e580379a6274fe517a3714da01ba642bf40d23563d0f4ccdfebcccb9a65c262bfe778d8fd88b5d3f221dd40a725feb36ec8b57f3ca92f4647d35ee74e22de8dc5d06a97a7c7c62228df1d1f41ea9e76e6b4d89a09226d261248fb9fae2cbaef719bc65509e7963a3b2ddd1b9893411aeb258c18e3f4d41d1e8270e23b243df059cc768f9c6ed3b82ae186d45219d013004610079ac99b6562acfad44d18b4f52a0b793f3d8bc505d736a418f1ec5e30b5d290f6044e62bd46c4497b0df7c4fbe354faad4d1b32f6980d45f12993246d7aa44b2632f1a4675e22bac209fd62814ea2345c27ccfd3eeb4e29fd30a7a701a98f64216343d369863212eb4363a98498d4c97d01c867c8fd4a2a1eae15a1054265216f9f89d3491b48b925140764e7028a18e26a5c4090b24a07adf8df33112e31a78274c0f56c902e491953524573f29b067e58011ae4a369d0a80f0497eb645fd80e747c0d73c5d6ff2c6a0ff8822920e6a8208599e02f666c9c3fa124ca2563e000d58edf24217befbda59452ca946495065c06e506f657b0d65a0c65c55030ec457360b5e25f9bba9ff29ee5b558ad489dd27e090d3179d20e6574773742838bfbb514a6891700044929ba2007e407028e280e2fe7e25c3e2fc3bb389729378cb89f6bd1c204c63674034829a53e5a524ab98d90da21c618638c9d9b368d4bd45a8d86780e6cd204071e9e34597aa5b0dcaf972c6132c4c885fbac0d7a36e5b54618e22e3fd0f21c5865adb34ee9a325a5942d1faea365f02ea53a1f2d10a057800354295f051dbd937d20c04180383d42b02d1044a81148f654ca763c8ca42e86b56c954d8726525dc81fa2703eb4773353a7b469bbbb3bf4a8378d9bc786535a9aa51494d2999259b97cddc049c13962db72514e38f17ed24f9aa8a5f45157c1d24f7a4a5369a44ea2d39d7421ea7ed274bf66125dcda4993449a2ae44a92bb94e3c5ae2d21495442157f22e3e467cc5a038e45370f0dc045e94210c727c9764c0223b6390418e41f9abc99f2bb912539463ec70bfd924c79f4d8c5c0a0eb087e7f9643219813dac9108c09ca6017af1b930e16602717498b05646600f7b2473a8b2565aa9bcf1b8a0935249e5f4d19a924a4a29b5967eb4cf8292e12e37cb7c1b62e2724ed9ad7ea1c0021326433d14d4d4f4b5a0ed970951a79f401b7f4c44d453fa9553f8917b29cba32c51c8ed55beaa9427b007a594ce18638c3176d090934fd97c1f641861077514006d22c526409cf83aaadc8ff553ba377d52055704abc85fe78fc5823893096bb509c17e397d49ae1ce2a57d07d4f3583e80f464c9e21d5549525acae2395f7b91636769283407cafd1a0b1625da5d5eb854524aa59452ba7764a2944e3a870089363923c896625625abe23958b2a4ac4a16024f0030b85f4625a39221c56c698b774b10059c52ce1b8fce3a67f5583b84ceb3569e39dd638c5718a55644600f974c521a49e213b404a909d34b6888099d9f3702d29c736a2c2225400bc5b502c2d752480c9153a90f2cb491f62190a863244626a4d4e70023dd7c4ba711262626a01764ffd96f8489493ec46907741f0a596744600f9746968c2860a0935249e59c73cecd5aec356cbe95944a39df4a2a27b5f2b169316abbafeb9cb56659b5c18d17db9b0b8249f9a273524a297dbd86b8e06a6031d56dc88bd9ddd3a77c49306e28a5934e29a5cc52199030ee855eb76f496eed6cf48fac2cdb865649397efdefc67b45d4be225a1979ceb792c14a871591bb3b248a2c182277652f4df98331ca3a18a2682302cc2b4bfcc1a3f61551b4f7a63618a21c5d58d7410f84ac88a2cef6764594631320d3d7226cb7dd07142b5e4d0ce566f7ef5d25d12c986ee69c74521f2de8d528e27eada3ae690775788eecab05e4c60df8ce015977b1d4a3d05568ab0fa137a59c73ce99794081e2ce778e84e830ba409bd0c6b12c2b741a7cc01e934a4a279dd247cb8701f207910c106d84104224165201e04ebf007548dc4a20ce8d231fb0c7dc86e60e4d16b6c750eb6b4e31438dc310582c88e359bee417f6a6de83fed0e6c777ab7c492d3548ada0e7b17c00e9c9e21d5549525ad2925590f9f3bc55119e33e146d0432ea76713bdce0ee0f6804464f801803a40667d2f5a1b530ec85d9448d45a0b7bf85075e2db565393815c715dba6043424a79838d8a76d8304c29e79c736e2d8872ced930787737a538d88a0670e3710f4d883a27b874539915b178ea86401b87ad2316f42c0b26653924b7c42924794db34e8190c10e4d4ae99c73ce2dab107a18b598c56d60cea969b469523ae79cd35f99ca6e9f4f70313ce1017bb8e7b17c00e911cae21d5549525a125ae26448484a29251625f2e72991a111466458008f00508701d026beb70088838beed74a3c25413c600fcff2c995a1591f565aabac92fa68514a69aa88522b21004770afd65abf521eeea574c0b00df6702eb474ad9556eab8b3581cdddcf0f83182093a2cdd5049c292458bd4c173a4bcc0480729a5bcc93728a5fbdd3411770316595049e9a453de78524a691fd6409bf9a99c020b3239059f2c25a494b6ffc43f33d0904a4a279d128b49b9155b2d5d76993d279db46fbcee6ed8ee274ce97f2d1f9e1367f794b3fb3c723cfd5a9431ce1ab496a528abc82a58a848aad2425905c9724f67e87e4da5a934522f49211243f849f9ea00a4944e3a7db466ad78042028f0b621a9c4ec39e594eddedddd5028a4325af1a0e7bf7d2be4f6b1f22555703b2c4bfcf292ddfbc21e313fa949b5065183a8543ce7ab32a8473508da44a4eae872bf5a6b559a73ea404a29a59419b2503a686702f6942fc039679db5e668bfc9879fdaba865ef6acccbe8621c4c99e35047b37555c96f360719ccf27bcbdf3ecdd1e51c71f8a70ca157b10c77f470ff7abf1b8aee65de76687d195b2bee72d17cb24561d63e9d0e1698e45a1d59861b4e91104dac81d3cdc772f2249f92b115cc823c229530c04e2c80f5293e58b18f7b33ba0cee60900ea8039dedee7792e63a0ce667ba75f8339f4e5a360ce7c9a944c4c4739dd8610976788920cc337aa86580c738d192e05bdc04ed9c04e8bf55bc8599611b1d85e6bf19115e6d72560dd11faf36bf77516b3986547ea63f85b2185ce47e86b7812793bf1fd1829177a51e7468e7f59b115dda2280d1a5c69338ab8322cb89f7c18c44676c9024b67f81267e25e7c9752caf92a49f3a92f414564f5335f047f0dfc53e3f1cfe0d44f0afb580c5d33762695e3f1cf55f7f37fe53931aff992232efdaec330da00893634af1a42438355b35d3333dfae99136a7c0aff14f5d4f8d4cf60d57cd5abf04f0d5c2483554264beaa84c0bc7c98979f9a799a2f92fa1a9ffa1a0f5d2bac9a5ff3402e8c555ff33daaafc13e45dafba8b257a1be468555f555f3551aeec9f1ab5f611f558655e8e91ec797005d3fa24dfcd5d77c91d5d7e0ffc1817d3aac54047ff71dfea9c126e01c5855b10a3d359fe34b80ffaa2ff2afc23f453daabff13f39b08f57e4c6d77c0dfe516123d0055d40ae0f22e5f8af55f3d0a5ea1eba70fce7e587ae0e17c1bc7ca8f916d3bdbc4c07f3393a1cdf75367ed5fde3eec637a71a32f3453cf8d44f3c84e64df00017c9af01800772cdcccc78f000c03e33ef012e9249a57e66e6f1ffc068b3fa9f19cc02fed47bf0190b0f308c36a91c5ff3abc7ff75d0ea73fc09f86bb06a488e1cdfaeaefb7675ffc36b74aaf91e3c908ba6534dac1a4243837d8a26eea9790fb00fcdd7e02298af21b51a1d0da6f91bfff3ff4383fbc6d7f89acf585c1caf226a2226385ef5ff37e23f8e3fe1c6abb06a080e1cdf2e1b36be5d36fe8777bb66d7414c712f7e4fc9711cb1a4a324a4a4a3d94b30f7520e9918dcd597ff1d8eee57eecdbfd1d9e82e122f4bc0cb47b0cf7e7bc79f07d4cde8805c34ba1e1a3ff3a89fc13e4528dc33e369b08f0af5340f5d33de4785c22a22a99ff922359e06ffd47c8d9fc13f453d355fe37f549f7ae8a2f1402e1b755259f62bcf397d96fd8d3a342a22aa4fbd0935b86b3ce454e8a97915f669a66813bf0697005d3d33f3d0a5faaf9b7214a2fdfd8b8fa05e9bf9caa1ba77cf3d98ea663a18b30e7b9f9dc452e541ee09b9171f7b1a1d74cda0ffc3dd688a3fb176d2496d482e087d0c0304e3335ad4d76a77d58610d74ff63110a04ddd2cc7a365d8a92720acbfdae1b672fd96e7dcc8f5fdedd265aa35beb7ea8b70ca16b7204efd1fbea387fbddb4807430dadcb05cc747cbe87e9feb7ffd540da58f61998d3663f67f78b56fed5bfc2171efba579f75c4b5ffd9ed85a8b27d1b755a6e53bfbaea5fcf69b957b5bad910e2ce0c7f56d9940c9ba9ec6b7ffaad5359ac22b27df63f3ec330397c9e0a7b0dc32a2259f6a7c7b0f7d94e9d0a7b14767a14fe41fde939fc53d483c227fc83fa0cc3a8420ff728ec634b80ae9b4157c6e242976a48967dbb4ea76fd709bab82295100a3374d91fd17aeef9bb37b988792071ad4b22a4b7dcfcab7d6a1fb318ee5bb3c9d0c75288ddbd79769d23ee67ad05cab6d6c6b0748fc752acb9d76c77a4fea7bd7dac5309a947b423da57ccf56f9df158cb53f187f15889615d2bfeb4e7f0c4a8049c84f8f575accc23dc671bfe80f26623d67d2bf886c45fb3f893d96258c6fedb62eabb9fcd54da6d762701ff0c1fb14fb12a48fda75825a47efc2a83d4b7f883eed9af365307ca5a6342d2feface257b37a7edcf3eec29a534fbc6aafdd9a500339d15dccf5a1f20d7a6f900b9b4ffac06b9211b90aac8fdfa147b6deb7eb4f7e17efbd845fcc33191e5877bed9bebe1b0fab33b01f5a7ce461bfb154b1354b8211bf601726d4334ecd32e1b6d2a093e647baaf906b98a3fa09cc4ffeb1eb7c2c418d99f3621250320432b4d08e5e64eb8af611fee2fb6d1666212fc29ea4f4f5fa813e26baf43e5fa5bd4d6fd6c7f7a8d4e99bb6f8598eb37d602eab9d7b48a3ff97d3e4ab560ac5f67f5c9fe01654f2166bb82ccfeb95f285ce47fc23f1c110eab7ab48fafbdbfcd569ad092e16b5ab77ded7c2cfd862ebf14a8bab674525d1ab8b3b58ef872eb1d0a401dd1c22a720141770866792991eddeb7c95c8957b84eee07b1503c21c7f26e9ea4406ad2a56cd97ee3b9bb639d7dfaf3a5acd6ce5f2195bb4e3b2db5f66b27a9c52a041d84d12615574617b7e0b78d8eaf1175898376ba11e54aa79f7d115a24bb7883146612c35675fd22d9d7fa3f12abf85db221ec1d0bd3e43e8b156fbc51de88726386b0b920ae0ae22fff4a114679be3f50fe60c97b37553b9f800830f334c4910e71e43b179d7260a61042e7293b08c6a01833b071c9f1e7c604714e33c0884f431027fe29e8b481de39bd4e429ef37136680713f73b0de5d350ef788e7f5ae239fd724f42ef386517f2e74357cbf9f57fe8630d1bfbfa45b0aff8a7e807eb223f1643f74884361fae6692e78470caf3e14f2c9ea3147bb89fb7943f882576305cd8e3e69863b7c53dd118ddf928c84e294b8673628133c93d38bbe04083ab6f860c96fb9dbed3508e5f63c795abda4e43a72727a2d3d08909a48d5544e6d3ef994fe94f9ff91503b938a41cdf421591faf67bea5b0ef7d4b76fb14fc5b0f1c731714a393eed5ef9bb75a88422d235b14f0baef93f7ce2cb748724907b748175228ba0d592fb82032517c5648bee098acc887baa92b900871eb6b85c8656b0c021072c3c808485126bc5961bcc22ece5b66811433606d3b685892518194dda962a560747d99617c450c52012c308bb5b52b001aa8325bb258ad02423a86ea9410649061165d92d1c188aac168b476b074fa20d2c43e800622c8131c69016278e628a50fa4106afbb1551c30aa0fc90c3e6e48711e47e8c8c1f62a03bf8b0032fba4c2e7cb0424b1333195a99328696412c5a58299cee32fa94b16543ed840aa33dca496b36abc52c662996d54ca3da363f2fe51877ba297b42394abbf745d3324c3b41c7be70ef6e778f52ca392795f15a6bdb6f6f6fa736d0628cb6abd318638c114208619c91ca18638c32768c115a13d02d468cd2182385106adb0cee4465507d638c14c29376b988594a658c11f5b2d19739310b632b9d18c7a5c8498c4e627412c5498c4e62744214c5498c4e8a88b02615b3488c30556b218082c51ad2252dd4422dd44242b12665da1c01089244c08f0dfb4dcb56aee524d1c6adf7df4b7ac83dff2451a799b88df74ec7d042b0a903b3856cab5157c813422863282c042979edcbc7a6a1d7eba50129c878f1620a2d292a42007325554510563879b1a28a0a60bc8853b4141193bf48450926e6bfc82576e929cdd45dfc8913b95264923b22e59894636472cc1548392626e6ef155be49887e1786252fd7a65987fe17860a4527e9942871344bc5cf75ab1c2c89ede428ee339dd2b997b588512dbb6bdc6f16c2f57b6c8bea14e0f11244174f472652f4b1c91318c0a2f32b62484152aa2fc0d229e64fb95e3b1aa5c1f4e318695410caf4c651353c85095bca428a229c7f465ea7ef9fd4724be329b4ebb68d7d8ba0dac9546fd035296524a29979052044d0b461246585ef061c9881a6c6ec8c19206a818820c205c122e21ab30620618236416a69fc24be24696ef3232b20524c8524a29a5dc64b62bc3ca22029bc32b4f4d05043de5c8b30a11d7d64692f9e2da4721057b402dbe656a229aa994e7a8b03e8238f3573fdc0cfb14f964f8ea7082083feaa4a803e4420e865042031a5e00e30ad73c72c592104c6440890e96b8e6f751d489465c5e10050c23ca28816b3ee00436bc80b46414c6906b7a18454491f472c5ffe12a20e837a702e2c60c391e17a05c4d7ce4e535a10c5df835432b5960c092b837432b51dc207fac24ee29432b5130b1a258a2d43ab4378a1408ddfa0404f2004b48d44a14414ce201a6409a6568c0ab602259168a2d40d0ac168b478b8a2e6e03b3a5a2c96d60feec856269035520118142e9680acfa96da9bb6b5784c884ee8c0cadec40b48d60071abab859865676e840fe5816efc00125f0005204415b6b46696468c5872a4730d06a0771e2928cf33d56eed4c73ba352d67ae5cec33df755eeee9693caaf052a342cf78ce6e14929e5b7fa683484f062a721e77f11c60c319d4adc3d4a1d28883937dc767747e940c185702a812d63b451a2c8d81f65ac324a1425a436310be4085f4a3a6192211b0a5107f54cf079b8ce471beca1a7b504e0352b1bb8d36a1dfef5219535a8ee421b4dcbb4cc6a5aa665d64eacd52eaba4b0062a59fcc1a49a5a3911dcbd66f840ec5bf97dbaeedc85566e1d84b5e123e0877b40760a00754437c0cc115b8c0aac02b164f1e1239b9eb97683ec02c592172fac40618225b8d4c81e4f4091e3ed9265471be08d6d42ce0d3722f1f256d33f33122f773b097a0a962a8302a51a86a6b862c50ad777b3c481162da83c610510485764432b60416f32db958955dc9f904129b54409a6e072650751b030c275e5962b7290821976b081861db8a494d246d98123a2c8f211e03975870a7862b6a2c4022634b8d2a00db4f1b721c46d1deeb9eec66dfcbbf3d760eb6294e3c93e809d1d043804f46f3ba7dce426b70dbeb5f7ceaf256098b5dbc3a8b369f5b1fa18911a23e5b67723fbb35adc9fbc1125e74dddb77fe2362d6611b3b15238531d68b9cb18a3bbadb6a672ecbc75b8bbbba34edc764fb075c0af71447b9493568b65dac69d50f705f5027be7346944c1c4703346669399a1cda091a168cc60a899944dd16cb0776aa6a9416bf4ce94aa4dc5f1cc57d548fa591ccb0f1f3f76b2943725c38fa823833944d26068cdb561e386dfc031b9edc8c6ebf6be7dc1f1de3bd25a88d371e0c56def407b61efdc93b5b6c6031acd1a6a660d15b386f2775510eff7efce531542679bbbac41c75058dddd64f85b8803f18c73763178f6a0bc823b8c36315641691e25f5186374e9dddb6873a48c75c7bd5b079d324287944aa751ca4e06967bb6b3e3de7cd0e0ea9b31cb5e90582c8c05809f78421cf934cb0b480cd4ccdaf8532396d14c9bda26372e4a8ee378b0e750d9cdcaafc56eb2b62df7dcc74def7cc0f2e80e8d153f9b7144a64bc32c0c051427191a5c754f99cd8c6234479e4add2b3b62191fcb62acb67a0bd52d46b16c669ad4b69849b9713cd96fac1b8b653babd62121ebc6665505b08a597642b20b6d28c334c0a5ee65c282df63b8bb3b0d9e64f72db0242e648761d425f6bf6ee25f80203be78dd4555ae90b285acb0ceeeeeebe832db6f020a509134f1021d1c516618c200cd7d75d746edcbeb8216b2f3da795b5d7381e6dd51cfe808232f75af7b160b8fdda731d12d8a47d37b9bf9bfb8ce3396115a4f6cf8d0094b51c355c27b2879f4ccebcf040ce322fb4c8d9df2e47397bcbf164298e079320e46fcb96896cbb40caf6210dc0c8f629c763ef06e5c55341c8d40a0d7ac8f425c743ed945c6690a58cd799e4536b2f4cf902d3a2372c6fb6301a628b2fb2fccb4511597eeab9d892e57b5c88c8f227cb06292dcaf820cb2a240e296bb26441964e64a9c550965af0f03ba4988470eee5410bca5ebbdd2a591cd94b91d0e0ea9b464ed3c395f15e661a4d4083ab8fd2f4703fd825ab584802818e17e27412d8e356f89fb5afa0fe24fd2cd05712462fd84385f9d963db6338eeb87231ac67922ac8cba3fe83f2822a9af62756cdc79e621df7b33e9d8f59cfa63c2d2274ae2ec01e73ba6687ca8e52489fe46198bb7342fab5d7660724134453d4e9246f8a34b9b3562d0bf5d53b355cc8f02b8d0ff7835d0c90bfa69265134d2929a9b16ce07e6dd4585c87c6f5d3be7da04c3b6ab7fcc3a7b80ecc810a9828d1440e4a6051854b7e6711822cbfa5780e96e5f751ed5a3edceb5e62eaa456722f56994bf1bfa62899b019a4a94cca94e964713b1f999f1965140d0f37665c72e4a14c73db3a2d675d670a515d74cdee9421fc319462f24f3c22230f5265f9feea1d2ccb779bba9ff2763c716953ebe82488236d937c9b6526d96deb66ce01c3b37892b7ad53f90be2c8afd9e6d9a9bac93df940b9773871e9b74c0ef7eb6c764079eb62ae31e3865bdf5f5147fa5331301ce3825ba708e99f581504fbf9534a10d803e56dd3c9e27e1300cad9678d23613ef69513321fc31a17c20c329ffbada3f9b1eceb37470277fac84d6b55445e1ef54560fe7e09d0a5e485178cfa176052b7e35e047ffb5ac661f83392b139bbfa590a58872495b9ce19875b29c93df9314bb7fed749744aa7a1b66ccb937b5590f9d99f18286b954b0045f950f6a06e8a79987f79992f2a42e11ed4cb601f144621dac8bf494d591ea1ee0f51128355f55f1ec805835515c7af18857de8946813eb4b1b6ef61c0d296e96d96fa128c32a217d8476712f4a39ca165e91f2a2536667e7788664540c88135febbe0dca2b639886e15e7ccae4de07affcb0942d46029b4840e5f942e691f9d86b939641332c42ebf8e0951f943212d8942bd099621d2adb2e85584619b9c6a71d2acf0ebe18698e61c08e80724fa03347b934855f0910e65ffe8302835f2d141d4152241f09862520312c9d5cec33d94927777b6d83f2f282fafb309f7af917ec53040383e19e974f611f8bbd546a02b92e56612f188665a70a121f024079e6def140efd825da6f49583ce7f413e6e73751d4b93f533fbf9590803bada475cc9fdf04e784210679bea6759e372dd8d738fdb6c5ce5ad7f9a475306f5a723fc6d46fa44b56f2cd2a723f7dcd79050c79ce258803637f4cd73027807b69c3e5a0c4c47450b499329ffa992feaa1f1311f13f3a9ef89f9d4fc180ef7c4fcccfc184c03b75e7e0656711ff3402e19ace230f73ea87f790ef7c07cccc7609ffb300fe4c27e83e9e894fe8b4493a40d57c32afa3067f87b1a525c8b6953ebe829b99f7628b82733a0cc371018a97a27e66e7550d4a9dfacdcdf2ffaab192ef6d99bd0ad29e9252db4059b4da8148db92439e910cd4800001000c315002020100a05c30171402ca0e8a1367714800e72923874543494889218c8611443310c04116000308020428841062a1a3a0324039395ae1164b40b9cdf92d84fd776aedef2cf8ac5364ffe8616c29a01ca4fd4d81fda65e852b6768406f6315546c0375096021121a6f18918b083d224b8a295fc3476b22700c84af806d66f573e0a1409e316a2f6eabc588ca254e6936cbca9d16df08e9bacdb48aacf175cda3d05a0293c26dcb4dfa84e526425f2178b07ca9e99f962ecf52b1d0e654a21216ca31a475de7c8194a1cdb5bfb96ca59b03491739d8754503ab60cb83ec6c1528cc4432747ca6e552d2f538d8bcd6f4c73902543877ee0927abbdb0e97093d82ad624ce32855a0be24c2b2e6c98e6e786e431e36593263fbb7f9a924846428faca268906b7891d4f8c732d1afed53646e2273d4f0296da96157466b34395b954d4d9bc97b087c2fcc73e73411c5043906a1dff2f872420d9c412485caca0c131d32c52a1198e23ccdf2c815078eaf508c570aa2f29230eaac0e02d7ff95611532732518ce49287084343731aa0779dbea5ca433705bdac2db4775c84f5f379c082a3d3911b02152f499549a07aaa9373f0f8dc80900cfad49fcfd26c780743ae37e75abea52b352c4c9e33236135d3635551cc63c8aaecf17c4cb7f206ffa257f482d1cf938f6e0ff8823eb72e4839c94f9ac26aa2cfbaaf9c4682b04f208e5ed387599e072d2f96b09fc5b08b907a62851f96ea5225ca92633f9e5980af0989fb6be3ae8758c71375442deb0739e3d8003692089bec00f5c7e0133ccd44bfa48a889334f6cca893c65871042d8e7e586a8bdeb94bbf9980daa80ab8b399e5948c453795b0c0f9e433c8712802f681fc2fd440f5cf32ef6dd73796bc0220702a7574a42d79bed87d42654541c87422146dd07292e864f9f0460c7cc6c3611f717af8645857423d6faba1b7c52fc15debc6528546b2ec868762cd94f6aaf91cf4ba54c6a21a0978ccb8648b348751a96c0ab483a268091c0beb3ba430d2ce83bf3e905c34869065fa6753e2d514a20919874ebad156c15927303aed5a59404217dc3e47d78fc4fc75357177c6e337751a7913b3637703371992ad3b6ec88083fecaaa2130bd2af795e1da2988336f2af1f3ad8130ddd1c5b4390361af02e59f1f5629c40f2adc742bbe38382bc728d50fd65970f00c0b9d697b13c97cfd74ec2276183042132ad2f323304af0154544ec4bd19a0754c1615d3bf9cc8ed2c4cf50f6a89aa4426a9e300f9a2209b9a276ac48900400db195fd286a5a11982e9cc1e56330897d5cde5b619f709b49833ff50d157854f06c1d96913d2a22617d029d578404bde1713c05149a8b742e9e18d83542a8cbea23a16a5d3101725769123931b5731be32f104a989d6ff64622f64e3a9346c7938f9ad5b0c7d0d9f9f7b948e2f7a1c3bc882c301650d0a4953902dbe4ce367328508ac7e9d457b17ac8a7a19a25547c48520a84795d7c82544a084fec6c397d7d33d09b958f4aa3ebaad335612f997ca526d3d1023f56056e11f10f208bc25c76b2dc79937b0f90de9a71684605d164472218ce6d208f821736e6307a097759b15513656c47d84cef3b540edb53ba61d95603a4f80d907f42e3c2c0df09a3a4371ddfcd5443cb4d1d9efae445eb2c31bf6b8ae10a65380ba5ccd1983f5e4f51fa09fb098ab88e704a3830911b9e8a5e35753c537295b37ecca9b7ed90b8db1a05d4d26cacb2cb87607c4a5d8c6424d1fc927646592e92fca2a8b30f504b25ac924c504bd51d13920fa8ad5908c9713222b66886131ae645c2720906f379d80ca521d3d44f68cbb6982d1a9542ae3cfd3cc743e763d6c85dbfc743362771ea4dbcec853235b6e4bfe9d032861b4f6fde5dbfb3a28d8bfb902915dfcfe3fba44dce473a55f7da2c359eb482c09a7a13484def53d524a241c5ce9a483369de0c05e279d83a62ab750c6061705f1b09e4fe78403b5e4380d43edb16969d0dd74c3352a62b4a462b268b14dd0d9dedee94a611e870bc268d7e5f28317a98b478bf8eb1f46bf024c8fdf66c620100979539cf3f746e32d4362128840fc429448eb14ed4a1cc6209c05ac60ada7076bb0a2a966ba0a660e519fc298d53275ac8472dc509f48fb1bf22505505e40cd956639ee12066518601ed6becbb3e9d022244138f45a310143cfb0b8abbd33c991d4b56ac19d974b878edd72cea908d13aed787789b362a799eaddf61029ce599d159ada719a7b3c6bb44cfac4221aa0d65d33538338cff546da4ef59a5c4b40e1c72832d069a45799043d9152af09bfe5d801956d07544a867bc0bb934f83c922560f9d6573d582ff7ac0203a82c789b1ce38080a8f79ece6c91fd13a6d6477f0312c8b30f28568ab29071d47ada3237ccf8c2403daa58ce953be71bad30c18e6e5f403cd2d8563a0460f00ca460945ab796e5ff267a0c12778648f7894228ec114ae149a1625bd94dda7521fdd5b9676fff7109f9698c240e5af5538d9ab342ecc03bf676287fe1ca0427f7d9f27f450bbe018a4d3fefeb9f32f7321371bdf082a92a8848f88c55851ab4d63061750547b5990c229f98d88c6225740b5863d72e4edd1c69be141a75b734039d2573ebc2b140410ccc3dd3b745c576adf3191d1a52afb86fe232b569838275a35aea2547ffd395eb71cb91c4b1802f91f8569204bb14a34515a2f89ee9a8da91a50ecaf0eca43207bac8b89e905fce9c8fdc1d0108d4255f41e33d90af6387dea087d070d824759bee695a7b2f79c9ea2d3c43f14b970bc9a9832f1d2aef8050949cbd05e4a39d455cb98a863d04e092ee5af66dec3c13cdf22d98792523b677abba7456d74837e3bb1290f183f1eefef8cdf11dd7b9346284669f85c3bb6a07dc6c59dc9457ba6840cd0ed355625fa58b26a143300550b569269763056d01b360a8507cec4be789ccbd70a0ba8446bd4e968b21e38611371476f28c40aa946f243cf9af053fba8493ce81511254f02e11373690b1372b382c7f021d00450f8cd0ec20be8b45a4d7ec73f65a1b0a0ac4aed028ef8525903a2230802574111180c095c0d19059f04442fb56ceb4b94481c29981e8ed66e950ddff73e3cc98cfcc9ea995489d818ccb1809c8889e2104d9a2caa274f786cbccc87a4f935090c0423bdc027ec101df4e65c0603365ef87131d21bac0555d08a5c4896b6a2f4146ef5f994e3555c3ae1a27772c18813a39a2ca317ad4607cdb0d13b39c1a043e0f59a5a019ff81f875da0c4ee2206b607f73af12598111fdb32c81f019ae1beb4ecb4cb9440acc4ebf83855919c0a6c273e5e152375d65d3f0b6eafafdd6c85c27f98b61675cab783c10d8e24b91b4dc4b995126d2b3ebd7dd7fddbc6c5669ddfe27c81cf84d374274c90626d2a44ed9a7c62863d38904913d562aaa8bddd1153a360253af6c479875580dc4319240d09795b0f57e48856f332981301d40f86db49602856543ced1044c209e5d0ae06f3675bb396682e58423b5e717a29255a20194a06118926401f23e85e880a5ce453fac4930db925e1afcb73b79f5f5f5d00483c60e22fc9f1593a0065920e70add1017cd71f1a84c83c7611617e4a5b7666bcda85b889ae18cc6270e1182053d0223bab18bac7a78abc9ffbca0b8382fb4f8bb13c09fddb4d485656bb3d6e678029912671f43f447cf9c2ebb5c14f876594b87698458c20566e9167546d646495466b3ae08d44387b99cba80aecb2350a831008591cd0410d0902dfaff8843fe0c8d9ac1f0650e4fcfcc827a0671c39e15e4e5f4eb399bd9f28f67513a95aeb5e7448667540703290bece59e9c6ac3346a4969769c5f6d2265a4692b76964d1faa6c162ae3df10ea13fcf5fbae7a0eb239327db1f2de357084afedf8f65fa8ce7eb80965afb4de533bc7b662c8f2df9b88d3d9d76c683716779c8443d74c61c534162a7c8d4ea8a90c35349b3bdd725255467f168c447525b6dca6ed99921238c8136f7aa8adcf4972c85389bfaf928a59a81f26f85cc8674080fe89e19a0faff35cceb78af9d265e978df4cc75ac06249f12a9838fe3f4b59427ffc7f87b790e0eec5e03ad41c009891c254afcd95e0cc727ee13189cc458a073f11f7dc51e4388ef4be00469b5b51feaed70becc70bb245df3e52943ae6279c967670e0568617e3f13000512f19de5b5f138b251c56af9483edd41f9538504de82f8937b1b44e4afcf2a77cf8cf66fff30cadd1ee862d89111fb69c5546116a9a16603ea57c2a40a72913bc1e51accba6c147160f256fef859bdb42f794f55e5529374ad2cb909e1df2410edd57b023786cd9a1c3e24719d9116bec17881de531845733a0ac779e8c1c66c6ffbbfc59b716c5ebd8ef7b537068f91f263a3ba9a7072c95e658d8442d0d304c2349094e45a823b4a82de61164814fd4d15dcc54c664673a7fe956be4167f82740b7a45dc46a0e76cb4bb091f56d748b14433e97256027c9dc205975e975cde78971b72821baea71d6ebde0e523a44c945e32be7a07ab764057bb13d1e77cc91555560027bd136ebc9cf0e0699ae74f19b2fc475ed9866ca758ac350f66b02764cb47e4b8118ac97ebce7e9cb774bb57b7ad6defec1f393e6f9ac5eb8725d6db82c133bf418a697aa95e8d5e910f9603ccb28491171a4c9223fa3d878c73850432a5dcf783e7e6ed9790c81ca9c8318b2a9e18acda2ef9f9755c0facc0741a1d4388dea422770886ed13d70f2845c58bc97672ef68e0be6a2a09e228e92ba157b4d7625356705c637b4b69d0e2f229268481bc8b5439003c05f7a85e129abf8ec524a75510278b9d2251012e6692845164f85b36bd0851bfad7f5c2f241e60d92c4ad11c857edd772dca8b5b637f5d2bb0e12a079cfd1a81c369a548450b60d0d44566cf9022101a35e9af9caa0183927b907d77daa631e4ff7ad08277bc4a2efee05c049ab6e64b2ee57ce82ae01ce71df8d303fdc7c6440398e2c7b5d11e026abcf645d04f6824349fd020dd80df1e256a92890a169cd56a5a85186b0b3bed2d0aa0211df01f44c401f0aa7cc54b06b5280259320bab0d7dd68e2871db7f290871539c0dd91ef1faf3b4d49857d3d7ab42e20a569ded80ccfea5d53ba8a3a0ad9e496894daebb4fdd6d14129bc644ef55b6444733df160d22acf63fd427cf73088396df6cbe01d16fc30051cf131d265fb6e7d9c108033a0ed2d2683b416ef671712460a5d4ce3898e00c58b962bfb74919d06f019b4f0867b442677c924afac4201dc10010a2285dc2462be84f7832ab31042233c0b90b1b2446d529516240b5fda677ef3a9bbed75d5a4d810b1c16cf0f1a1a87d900383840d587c0813bd1705e62c47f050e5d156536216f9df43c6b62044a0ee04f9e3e11c9c572f8aae358d06cfd638d9871d1bbf1c749cf05d6a64214af337a12caea3a8649070efe59501c29b0dda634278b6dcab3fe83186c5fca89138d54196aab2d36e2297ea8b47f67f53ce577873aa391585321e4769aef57276479f1404cec9d4e297486e7478744a9ab6489ac54d1ef23ca482ed45799098bd03684e6e39be035e9acd296a368d66908d6bb10e569e66bb620a1d414b3438212ab15c520d8d64511c2c801871142be625ef70c0638d2a10c9c5310887744d27b009d8e60ca6622053afc6cca07ca7825cc20587649e61cdc087f2fe4592c078507e4590d0685f84bdaa0f68e2cfbcffac4e9b19fcfb3c9bcf63a6e5f76518d7dd7ba1801899772ab900523b4869d07af5450310dea5525bcea76d0782a87245254e0b91030b9f08f531e8ac882fb1f4770ed4c027807a9f60667c0562878ce56aec85d1a03d45a2a16747cb49a6f7623aa139903b024f4305e6015a29008196844204148b8c1ea8fb7d56b79e5282bee986eeffb91c9f3250bbedb9d57be4e42bbb44359f4fde64939abfc16573223321f9ef6d9d5b7be3ce80c465c0cb842b5739ad8240dccf104ef8e7f6793f27d5d1921da879730c27d472237edd4497e74dfc39d171e34103957a6c8f5815108f9c2fbe64b28282b9843dcc794580d3206f60bd07c9a6df9d5db9e1082817ef29eb9df5aecf649c38986989fb3820c30648892e7f4543718bfc7cf939bcabb2965f9210734f14dc7b251d1c27095a9b806b460c6da44457d4d7783c4cf0065c4e8a2a5c03bbaef663b7c1918359ec7d1efc4234f764ac61f24031c012887f4318093725fc23e96d8aac44f80f4279e720c7ff3bfc1b92e127497f50fae6722eb0a9354e1d7486d81b0ac0fc3d018394627ac49eb9955ce6983153c00626668d5ec09b7d423f314d306eec73d054fa930aa4be78a9d31bd07bab0df6d351e37093a8fb41b01ca0abb4809e94bc42289d4457d7a983d902ca6340334d4074c58b1afd5fdfbf1c5f305a7c61ad5d491ed09b80269b26c625b8dccd9036872a24b93fe9be5dc8eaa171f4471e591eecf747d2f713abfdff3055015ab3cb3e2b9447cf498cad075c01607af482640b68e4258143712ef422d49eb04600c1b65633e7abbd2115df1c04cfade84b881f8099747b42a6f07873592fad8614298c1d6586c503472de19c08f12a51c4b0fbe08ef61c00c97350cdc7a5a62c84331ccf45e40f21790197d8f575582b40ed4a05da4b13939e2094624a61001b79fe7a810f37a0fb07924c2a4b207745e8acdd46c20bc8bb955dfcc2d0588995f2f9027ec38f16b4e8c8b2638ef94a6498d5cf9e9aee62eaf6c053e2c39258504c05dd4807cd07e0f155e3d7119114dba0b03175053e6f601ba08c5a0be42ec239647c88c95954237f630a841733c230d3f18395648a8fb399e828e400f9b4276ff076c726526fa85f40c746ce1b5f017011c9e562d826c07e0021a4e1db789af0896987c586cfc76b1bbd9eb8730d29cb6dcde2a6d23e0243cff3ebf19bb63b52762d171c5586eb698606862cfd22b9917cb44101e634a8e2ceb81bcdf08cf0dbab94a1eec9db843262c2c8ae200e68312c3a4214d623862af842675c1b2637a81a71563986fb8903c52e73abb71ac7b9a21cf7f8148006af02deacc82b591caf503342b882731fff7aae833b6b17aa0f81c98575a61937e91a56408540b2330da83e13c650c7a194d6020b452b9f094dfcf84a4c5a81decf9c4d5e0cc6419fc6901207d18aaf9860b04cbdba03838a159e6a03531633a2d40ac6296640a6b8f8efd94fd6596b91ddd7a08d63f4fc5f0eaf8066fcc31d7407247d27e2e814e0ce441e2c48a97b69c8955ccb86d1c6a6fb23c8cc4fe8dd56b005486750e4a187a443ddb21dd03fa7320f8c03f5da3c3f135768b2d55b66399eb49881fcf95b6928461c4a67f9ddba2652adfad4b47f6f64b8cf2ca4f82252974ba2ba88f977b6599da48fbe8a40fe92989e1500a43b75e46ac56637e24fc5349805e4b8cbcf3489f39d4de3a8784f5ac992627b9eb1e01561a2c543414c818ef396244ed38541144271780d2e4448d84410ff7baddbc100077033ce4562d6a6fddb15ea05f0852b3c0c398e6a0295bfa2d9c90c14ecdd29c937a21274c7daec6c84b96cf3140b3d673fa640766f079528cfe4002188b808d9113d49f124675dcdeb48b9b56b99f62c27753f2998762f8bbc3cfaab06265c2c9b0449418633456d761f4996230fd485db3ccfd3150915e68ca62e8f0340a025e549ce67b78f23caaf0cf6eb4d662e8966c96812d701ed394e5b3348bdd6e4a88b0fe1ad3e06591c6f547176388a764d30c16215310c3e86220787be2ea31a16b37a3e35b0bbd36c8eff5c88a7f64b1f9ec61df1c402e399915176306113c9f96bac1411d41c3c57492941628fcad6f163f0cefc4a02f75312d7cdf805f65107f5312f166c531988b69baa14d774aa5df42c6412c26196166c716d4378657d94152fa278b49029156d73673797fbc9a542c0487286310c99111ffbf5c6985de20975323815007410262b0e0d0e3bf32f6a265e5bc073ab9474921675eda294eb39caf4f94212b33fdd6b206117da192bd5ab999c20e7e18122ad551d0d48f1f7e160291da91440a473a3e79ee7bbb5ae65742a745843266d804199fa79f1d1927fbe277e598925f3326a8502aecaa92ea5d3215d2cb95898f3f13a85f793715a54f489e7e40c1693e85ec143c87a9caa041a135815d504651414691e87941c15ecad6c7f87adb76624c91ff9501f40f2a7aa59e2947a13b8f9110aa3c23d37b14b21a3a3e975097186e454522fbf407bbe02c91c1c9ece72dc141f1e99962926ac636ededff9db2187e208d9b04df44f9c34316d217d9e1bccce77f2ac23a139b5582f1c18fe2fae14fd92bbca23302a44406d8c6f5db67126f94c858c549a1bed0e30b61d2d1526fcde447db6bd03d1e45c5a7a5531ab6596ff15babc2e3bd5bbb18524d002daf030b5673630c149c60ce10b9674a0f3af231caa2dda0619121f5b5ba6e96648da212b4e5fade50d29428a4b7233279bc464e910118658ec606dd313f5cb0b5b640970734c767bb62ac5b50ab25bb21c5fe8814f2cc1ce403b1b4aca4677de904a473088a4ec1457a8a4428c45c3a22c046d64d38ad032d923047957c0a689079a5d645137e90b3263d5cc321d2f2af01e98c4b020b1f0f1ffc450bb6e31f650c9560c9cbafc5eb71f16ab4a2d0d23502781734a1450b39d4af4440ab2ea165797f1305a0f365930a685406187bff7ee6dc52b586d566ad416f3cc7a47f1e95d301c12092cd25b280a00dfa36c47d0f7e72fd1b41cbd2655fe6cade36d0723e7ac32f7dfad522b498fb94a5e026530c1e0a38521294df79735f4cc85b4111e9d0c8b8d4dbe16abd5458eeab230a628c16e7df65f0724d9b5d5afa565ff539bbd43358d88bf36a35c8eb8bc069d50e9ebf13bda73ddff91e961fce57d910544289f182b779e747dbf10565c4e778e7eb8028ea9a980433c4b4fbd694eed95f41f50c1fbd24a9d9da3c5d590eea74ed9eea3dd8899168a027f96008522f138310c6f3fee5e4136904336c90080a2e88fe2439744ea98b4965c19e44d6e64ea9583870da71953be00a118b7a2888cc4d192817d13708858fcbcde4a2f2aebacb4dca5009e99ba6c23a381d6a9ab4bf68509c9b3c6b050df92053142affb6d20d25a11555becfa24712ed947ce00071c7f7dc3f2ff0474353e92d515259ec8826833851d6475bc2cd9c2efee0a16a13674502268347dea2be41d3b11a64b0d0633c8b8de9489f7fbd99b380978dcf4248ae5520cf3f905e8e22348e6d79746fc196f3103f5f1c852e19225dbc77fe93172891f2aed11fefdbab2272eaff910a94fe082862faae5282d8383579b5d8f15399627b988e62994b257ec365f2512a0551cd1527c4b8e0e5003c493cf9ce38dc59b1213acb908b7d47a2dd2e72fce53b82eb6fa2e04218537086a8e1d54d99715f2616996f19d57a7688310fd0c5092a7ce1a5758cf788fb5d0971b662e7262edc0c81871ef5d0b65f0a8efab07c0dadbce309b162ed544377ed3f59108ff96f8971f88b444f09de7611c023b2f528c945d8f52e05b6b42a40d852b7119c44ce3f5c8cb624c8b8402a35602e60685b71001d20c8235bb5cae0d1b0ed596433ce91448d46e05f465204a3025ac365f5d8051753633db7704d82dc5ea852c722277e24740318e770fd95162df90e9ca9c81eb0390b00a3f37f51fa494e9ca6d7859d0676e4d9512d6e4f49e22bd3e061e8964f83888e88c99536ca31e2bc0d15979007a5eb4a6248b845a039ada456e9541066e9ac46fb817114227288e692670577ceefe54814f4c3aa7208ed60c14e71c1e331ad180e6a6dce1d523b5a70a2a7940aab8d5954f030ba7ccc7a82079920e593aa9d37b6fbac9b76ae17ba5f7243b763a796be087c43fba20aa8a7384034228e9156105fcea086e476f6a0f5a53f346cbdf49060bcc445dea28082660a14968d79417da7bdd819c79abe125db981624bc0558ea74f906081a85bc5a6a5e67526ab62a814c0819e64d7404d2e14de13d35ccaaa1b8251376b8781c643314a5cc0600f8edb5122fc77a0ccf8c1a81b1e7bb3d54945503aa2a0829770d88cee1a39a5f079886a747f176d0aca3c234af29d4559b3cc579ee94193dd6bb1c2025234d65a75615b802f1da32e31e8d5fb1b70952a921a2ac996637e473e7526aa048259ff0c20f7712ac99cc6d6f63a5077980797e232cd030c5d6ca9a82fc6090f7b13575e3686c760fc2bde582aa44d10bdd96160831df199cc1daea2d957ef97b5843f6d7782191380b6b362f0a939da3fc68f784f1b45f59d89661caac69342222b3056b3af21a630d4c6a6133301c4b3c5632abdb56f88458282f191d6125f2a24426678b7f963ad5a13ea184e903822eb0434d80bcbb61372846385677b33cf6b0116c2e04c4c2b178c8e8fa344fe0637f2e9c5c4cfb576b8eecc3648c5cc98404a868f82812356d4ac055e06a6f4f9a07238a251fb974911e9c33b8c8279f40d716cceaae330d608ba66a4fb89cc6a29a7b922a8853a68e32b3464e2b182e353995a1c7d6cb04c79db743767bcf659b052729baf783a45145855cf2860b063fba20f55a8e0120e0cff13b92ce4a27f4299222bb3268866a7bd513a0dbd7f9e97cdd13c414f223470bf0ebcf6085c201ac6ac2d03d31e584b9f27d5b72aeeae5e979d6ccb48cbaac101e7fe66d95d851b376a8030d47080d039876e7a51d47da79e8e0bb972e4bf1780163ff6a6f83935496e32fc8acb039124b5199e9175cd313300131f59c3797ad80ac58ba17579ad73efc98f31ec93810cbdf65de2a53002c0590db69edeaa170e69020cf4a20002b4bb7903928fcac1e549c2915eccf48f60aad08370aa9017f52558a298d6c099d0285ee71d29f19dd6c08452eb1ad8a0733385ee2ff33010fa2531389426b5b4e54ede7b747705a24a7bb2fb0955c68c4165ae45170bfcb7cef375772d72f0f6c3f0edf870737595c2e1a4eaac0335c5957db05b112a04ef236e0b5c07e03c7073c20e0e794e5482d3889ba0316cc108f82f0e5651a657e3e8f4c88e071bda860c2a441660a04d8abf9f4edb97e8b7333ad28cf8e3471d1b1672859ba313a785436f50fec4f6070b7564de8d4837549e757bc980b8370cd88341e33047cf7f7bfd91161b4c3e5819028119fc55cc6f63ff7a94498a4f2146da03786ab4990b8b56033e3634a7ad98671ba24d7676cf0064cc193c72fc4c967152666a860fc867bfd47cb60ef0b28ca29a22a1b6bb1cd86d40cd5786f797c8a2ab113a7abbde8fd08b80ee8ec78c5a69426d06c1c8a9a69b55a9d76d697ab6e780ea15aa29e6629a530379ce0d27f6b12252a1b3fc18bcbb88ebf3b55ceacbfaa0828ab185567d37777bd2d0e38806a0b395915d018b8e120cd9b82f3f95fc5b95c5d29ab041829209e0926a8f2306f4aff07b1250b5a935250afd33830ac6665f13b7692a6034529446bce7137a0aed25f4b3330b62fc75cf6482c0c59e96ca2aa847ad46392f79d96ab9250d13463ffa932f2eceb94f51bf76f9c19cb1d1a85fa72dd253c984b3e712ecec5d531ca03a2738f495d918bc55570c21035624358e40a68114ef338a403ba41618eabc1032f8805e1ec92354bf93ab7135f4a484f35b094929874d460099ab4da504bc22a2904a35cdceaa702bff7afc1a0fe52217c48a62cdfe6bca8ca16081086dd39288d616171acd4da2e24923a7c6332ace2e2d516a8d3f69f4521de6c177e56dab2ab195c1c3ed99d21ebbd3d0b32f84f060ec0ff7f223bace58770b8a0484648eca97604f6fab5e295644ee2f6de1d13e4e2c48e68f3f439a84666f4a83d74a151709983ff08586476f52837c17c79c77800c44a776d5dae895807266d6186713fb07320c9b894b040aea8cc16258555da897c19f8bb629381a3807dc0826112b21c232ff6f339619845c80a2682573441665cf211d059c435009aee5078b326b908407a472d3a4b575b64214a1aec036d6fb4b00ba91023ccc97f73910d3296645653007f8a0ae20dfb26c3102b53fc482472aea7de76137bdf1adf1ce0c03f832d37e1dd9123a9ece3daa140cde4b5ac97dca833f5711e3fb58c57dba799f3628f2ec756e2537b5116a956fa915d294e3daba8b1c7f6ef1d3982394cbc127775308ca32b4df9583d470f8e568d776b28ed7f45bd41436086801eb1f192ca6fd03452d1241e9494660b1d9b81128faa5a5c6498ceffefc83b92344464089b207b0363b4fb714b11530393b2e3f001fcc2c5eab7522bfd2cb9bfed5872c1d5c9c35cbe886eacb90f02e2fbcfb779784a94265f8ed526e495b3b6c128032e4fb7408a266fbe1e2ea65b1c12a113964b75ccfc64c02de1bbc86aa7c20e87467c9427b8c8a305c84fb398570b35027ee5e9d48fa40335e850c7fa244265d67f87cead8a02ace84e14b77db9d1bab7c4f504aac790ed7312b7534d352276737302c3e48ac9e11477683b993a27cc3eebe418ac0615edff517e338454b84a5f3e6342ee73af366c03bb40ea27b17afdb8ed4f71d00722cbb2f0097465831099518dde2c00b7b9409d805a4c625e7979ec8f39e8cc7d29e97f7b76450d0ee718333e2ebb86fef77eb587e5ed5e9583ef9f8856e5cb8fc3350961fe8fd32800555ef84fe7cfa355f7639152f669eefb79fd56c70da67a91592e89acf2dbc2eb868c0189a5de7abf16a8a474defd3bacbfa213c50b095210a6c07ba1a8df6b0c204bdfd39c666bd154d662a19601b653e17b371eedd01edab607ca808a40d9130dc07eeb095041ee232ec8af7fec875046a85239b71a50c4f482424f2665d62e27cd4e325d84bbc57265f86e7e81fe6f256c7fa7a92dc3edc34fa101994225ce50218e4e2ed741fde17f6ee99a21d8eefe22b86086428fc3dedd8167e14c92cc4f82b2544ed0583bd3169881ff6143b366a647af41de23d0f8a8526cea7301295b48fbf28fedd7690b23cf294731dea89086d7f035987f804d606ac69572486d1e2f56925103082c416165c1e557b029044b2504f3b0fca8ed1de85b0e7a0dd1ba08df520b69c0deb32f043c2a621c64b538f5ec98f9294b25c7c5b8febd4242f791b3d033439cd3e620efaba7a9989919e511b08472813094ac3b011e4cb13404c8367e2086ca1c217994dac6da74d0331ad72d2e7575c6c41c1a7683a6b8f38101e8270490c5c59cc2113a8b9821b8d33b1c9473831efff0f40af77b702edea010c2a4626e9df10b4effe873856db52455448d7d61a94fd20e4749b0959c7e63b8b4340d3801d6f91c149a6443cf89f0eedff5faff49e618910f1f887e4e8c77decc324bea02225ad41da9b42f1fc405762175974907c36ceb95746d2ea666790d3af3ea4f74e889880cc8fd3e60fdbe15028ef6847aa13eb32a4f15480a86118136c7160d571805bc248dc099e703f748e2eee883a442c043c3ad231d86a96addcbb8259995733b4f5907a1ca936d82b6433511944a07a87757256c46f0019184f0198867fc45623db219d5414d7978dbd088d5669039d43abacdaa0cc86671b46a5766cd88144d442517b57fd657102f4a2453d6c14e5c457ea214cc388c332329ea3b466ae318c9b1195ba812f3d1522e6db70423980f8f9d52c03b650759d8b25c596e87773237890a4cadae79c5dd6646dcf21c794d13ed8e9728d8f591bd68be01609d61228618a3e05049e454a38ad5c3310431856288557cad19df6c13ebc876eefe25330ea276d3a34f37d23def7ced8139d026ed98f65fde722034ffa0c05f1a5f26cc0d53eac8d31dc92c88672c5d8684556f9dd9093c51e3516fd47830c45c3f059f634b51f982c51bf2bae0c2eb892e518565a9519457cf97fe27afcba555b0491f1bac354de849baa349b0c10eeec72632472af614d449f524d22b1bb0236b521639fca5c0c19f0bac4d98e5b20c8019c1e58cf8b724fbd27da766364e4ae7a3731075e9614a518ff8528e31e442c98469159a34c322e1ad1aa59e5e3d3d7d2709f6cda1b4e4ccbde02cc350e64ef3bdf553fbc6db0f06a4dd5b733a4569bbb59d06d9f636c5751ebfdc329477d9d7c0a4e94e00bec1609fb8a821b552626eafab9efda71f94daa14542cbe00f5c727cfdd6bb1f3f453b9f899def1609b7264da844e47986dcb0ed47ad958fb3e4030766121d4054da643005e73497ffc36a4301799b51391bfee5191d89740d48adf3f7e0c2ab26d088a41453ee73d7c540a07727c5efb1687985c4f7acc28e0d90f9d9739d3517b3c983f49c2cded6d7f590e2d86c28a728960bee7faf701515bbc8ac572913ddae2283ba29679b9bbddbc02870e9c1d7ed2ee452ca33f3f19b5a92eeb2648bb5b102324cc0ae8df6dc76ef2f5320c544eb0a0aba4603ff40adefd1bf479bd7dcab8c1733bb082f233d4704ce532a3b07c8890a4b4fd1a574aacfd3b4a90eafe01c58601423a6309c8998de210695b14d40221b66a8b83163e820ba0aab59d5aa993188c08a857c5a60939ea83fda448065329c7418ef09a2022cd9c2e734d81dece84d7ab3da3f2b17e63d435c117efe54847363d624bcd2ce9ef5be39ab8511b68b555c1126697aa4816fdd2513e6226111304cd89849fa8c21cdeec1baa0e85bc5e0b91004c6e1974c9026da792db7f79d98c83dc53e7f2725961dac8aa243a6f854e68d95bfaac628a49889d9c521634ace21bef42a4f6ccc7c3bb76210ba047287760292ea5846bb657607afa94d2f9b40bf154a271d892664e9bb4fbec61dad1d11b351918ead6738fcf3cde70386d6abb527242a39174e29e73b881d4b36d27ec4c955fa4fcbc215030e67e033a68b6b5808e0992169ed1fbd4bd137f0257035e14a6d653e9a9fb925f6576a193dc6282f7c29a6f82e02dde9a1107875e38ec0b275f6239f4327ac841f09053fbd4b958c894cd6aeb15bc914ae631a220cccd3b0d35fba357ed034b00de1cb3560dc41da13f2e782672a169801bc46f49d86ee03dd7fe55dae79c775610f09660989575e853992693df3458d0f0a2c0f5b974e5c0ab7122e6c7e97188f44d2b80ebc2965caf5b11dda1bf705ffa4e8fc1200166a72f8ba6ba77b54601e8bf70a652fb335615e7ad60d6c0df411968aed0168e448eda5198f780886c0814323c616d42b42d84eed03fb7aa9ce1584437c7d10fd2ffabfbbc603c810e89bac01f29275feec499c643eb77c121912c354f8d1777a4cb1dccec39c2328ee2eecc8ba6ae8c725aae18f21d81585ad2890fbe5c8bcd1a6b9f6ea72566090f20baf3984178f41c9251a82222b1e70343b500c55c70098b9ab5d0dfe08d4b43cef23630261606a14662e304873ee9a8d5f8d9014b2dd8f7af83b8a8dfa57a64eaaa6b9b125817852ddb70c216548afe0dc7092b26d1cb2dca29326ff28e81162ae03bbf112bc0750f740c68d323352ca95f92d5cd2c7b872965b2b4c7fc295d62f11407b61ba03783f920e408d5fd0dadcbab286b55b061b855d12d841f5e8caa60ee03362db1b6d2c1ff1cfa02d6e82c35c57d5beb2b0866595d7440c72e058f98a9418f86abdde71b352d1531fba52035b42dbda41b5b2de98f3cb76346a35ab3f2006c2875c9f977d531ceabf5b28adde219f8908431717f33dcfea93b02526b0edbf7bb3b36f0218389a74e29e8bf5d783d3ab83065a38ef63ad4889832151b6bde9bab6e4b008d2ce03996d35795e99d0bf4a3f03484564fe26badcf091650def45e40ea75cc430e498c9c70ec1839274bc20417f90d776a1a52e370df9d17314b8e5b205b182503251f1c245f26175342169db628df3535cadfb11cfa9204063b44b853addba3add57c1552fe91cd7fdab98dd81faa1fed9b8e2a32d65fda3b0b6cd7890ddfe1e54f3b7a7ed3c48e2979113f2eca4e5b3075c7404f717212d1c4ffe1d8d0a442845bf355bbe7fe180ec8b33ace3f708a883f866c0c2373ba8ee8bfaf423a113b227e1f88045023515412652b318cbf0517cb6b3e4a588e5a73859d26c117c0ac3f77a59a4554955485821c01df0a078a8b6543231e4455ab9456244bc39192470420489e7982ffc90ff3e8a203b23e2862654a47af8bfd307e6368e3a9a69b27c84d134c1e0371b66c6078aa009d1e53d9773ade5d64b2534697f7946b2999f76862a5aff297845ba2c847652068e43830927ce58656f035dd13757a9bc55a92fad47e7dc5ca8bc42dfa60856cb82473d6dce270d0b65171449255c04d206465570f79780ebd2907a216f6112aa96856adb666e4afd02cd943a249c0ce948d2e91192fd18e298f18a7862c9472f290e9d9254210e823545f605310e19acbba0c9c235e6105c86ac70a0c204b945d33bf9cf45df376b02bebc790b18cb3d422d12a9918dc01c611edd7db0d5dcd9db8ddcf761e2f6aec5ca7151677b9ccfe9cd25c53e588e4e95de8389adf0f020cc5fdd08da836c33cc4503790105054517c2b61e290b1818c6be015bbbde6b6dc2d9273e54e1488ad659b220673f01489d8787264733a37a53295a8ed7e881a11259f976b0f79d51bb965e4e38c6ce0e729bad5dd9f898ae5ec812d2e8e5622aad87a1222afb9543d30da37628d099e0899c459f131e8112cc3287084e7cd2ec269db488d404a34440be0ef505a290d6e4c5941695148c3839b443f5d48a96c63eb01ed46bbd60e9b57e414c2860e05eb62041290f9e7e794f371faf842ad2c79d32789c70ebe1197851816cde405f772f117b3c0f9fc17930a3ce8c328c1d31b4e48cde913d6431d8a5b87b1e4e9fecfd1c4b3d4fc62191ad4c2e049331e5d75a652f2420cb53040acf70cbde66d51e719f7a3b809cdef7c9d7c8f3b10b48c9db2cde1d0827b5aee59415081fe44741be81c2421ab4c04d89f56f76de64a5ef0359421300ec013edd52db215cf5f0b1ccbbf0c4c47075f3916d47f90970d15cddb0fbb65e91167ab478effe40d20fa8cec587a77f588fbd8eb4c18bd13086172391927d0a06e9d36238e2003f92acfefd64f09d1c59b18b706be370455fe66d6f5ab9ddb85f48d64b4aa0f8ef478982dada015d086b7e6f5083c2df88fb53a64057dea6a9c570a5e42a707497653036756e95b5d84f8a8e0baba9ccca6e01f5976f7c5a7925bf06553a0262ac52c3b8b2031cda6e8464921f6603a30e454be13c47ac5b114332fc6fee7c7a98b33853eb03f288dad95996dfcaaee55a8d37190b470a24c9071640266b96e66561590692dbe9c2466fc72fad780a9eb816457b3eb03befc8e65fb083a595b5ed67f88047af5fc8d04f9091776a10b5e428b4e54a2e5ae27ee870bd5535eee39bc255c745e9c2cd3f9b850847d7e706dba8ac5a351b30c4b53e598e97e5c88620a6bae1ec3be9323c7ccca40ab85b37447d11beae646886d8fa2b46735a81eaa7b4df7ee08f02ecc35f9289b44dad66bc94c617a8f0c49ef31d0347ed706a006699f1ffe21c1523d7d4061d2955da07d58bf9936a73927bc249d5dfef46b43d037332aca67b4f4a1ad398c220f89e5d25749607dda57c108a7843c63eb46b48f60899b7930f6b0160ddd9b61c38f7ae412a0a050189ba3fe000fb479b2b34f6e15abf2f168dd589db7afb0ec51b1a745d85686c0946cf4242d3783e81d6366c35dbc0f6e12d06e09bc7003272bbec95dc6826c9d8636c94743ac98b47d4d7c432cf6a92cba316bba740799f1db652031ca4cb2b302e5ca0311c844c4cc76e0b6614e854641693b94bbd1962c1335eeab76dc5121fe7544ed875f4c1b6ae827e5f307d769be673d9b5e36d5c2c93d73a7a370b3c56d91c2bc7173360aaec79c5a46ca9b6e227909faf6cfc5632a58c7c3af4764e24172c22198a2aca608cf3e7d972ea8af9c18b8c149b9f3191bbe19a43b6edb472ed02dc1f3d0bc2287bdd0b9afd13a0d2e4d247dc6ddec8e53b6a768fc124a4437044a58ba986b47186939b09cc8e4bd09a62940c6c8df8de40470031594105670904a41977d9f20c532027809f10606a15e13ab03b2273a9888941e88f0dc15754e7cd05afccd49ce46c209598785d1659b46e111bb2c77d2af4a4353a7b45622d040b18e1cdc2a968a96754ef1d148775dd65d93922eb60336c59971ae4733db2c334814ac757594ac82993a48c49e1a5292c01bea3770ecdc55603312825a7284f0e63e49d253a253b567d148e2143a82023e1f079b3ff014e9ce60085a443cf7ba9ce723bb3fcbcb408747edd6b73f5cb87e706246bce7bf2761cdec151832b324afcab3fe8ff15504a23408f712ff54b0593ae70af2359b11f0216d2d20594b15eaf38f618ee813c6e9f09d3e33716f3e3e8e9564e510522097d81d567ca2516cdd206bc27e71237607c9de71f5f50228211a139240fe43b029d20f9c4ffa2e0ea803cb1bea7387c193d09918969f839465423250f31d148be02bdf3b87f935b934c653d3005afc167acc632587123c26611915213613ce4bf64a2460fb9d264356fb233cc76043bb4316e98eed8ffe0cd1daba0f7608097c6e5f0a88f4df216d4aa6c3c9ed6d3fb056ee6d885a07175cffe5fd8ec728552b2cc617451597aae0da2374cec5eb5978b8953993dfca38de2bfb439a218c846f00294f2aac1d7f7d4be860e1c53e952bb0b37b72a9f68ec7625ed21fa6838fd491d30e0efc82b60f31e52eb3140f888ba0d747f90dbc0caf7256f89a117f269a10c4f82a177af75e4bd57a81aaa8e75c630ad3f37946594e829ebe5d53621f9059258a898ee600180e8041167151d7ba65e95b629a0f0be2c094d7a752853f0b4d5394d920252b096e993c7390951ee49264049b4acf320574d402894fc86ea03a27ec2b337b938e7b2fd9af8abf04192d2e9549e084f5833b839960b57e0a28fe83ac6887f2165c4105cf59003e60fc74d4126cc62b184d67b1448bdab78fa6901efcca2a97b789a5a7986da95a68765bee96298122b9ca50d03e07e76faac3dc6488146520a175197511a2602c295034c60025990c80481dbbc757659e3f4473ee1aef59e9d14e20e3ce072cd5ed770ee673e3289ad49bd23cec1777c4af60978e6ab25d555ce5c2e3a70757e696a0a2c43fb1b3d6dc89162d83914918019c08cad0c93baa46b64dbdb81eda630bb0a1901a8d7dc158e53a02b1fcc0286cfbc4bb65daab1fe95b9f2ee029ef1f6ccc8505dc7265c1988816403dc33a5e8bb4305d2a6e7f792ebc55e14c44a45467c91c1bc379ee2dfa5373ba505384768c9237c5f5dc7f18148be09b6a02122a1743f2da301081adc1344b748157c36ef04bdfbc8d17670d410009a36f4e8712c8459755cf187b941608e51f892a758a51abba5689a669c80eb7caa9c7255839107aae2234be9cb6fa1924559d92822a959e0501e156b94c1bd3b2950cd3a461e4d29dbaed062808a85edcabd133560158a9ec0fdbfa36b50fbcdd95c2dc22ec92a486d05ff5a94a3731eb586dfb09ed1c1c384aa104444bbf551406f5f8bdc10a49c09611334b83440c56a20d9c6e0ea42c9b4485b08d2fb3d2489674d20ec0b6af0e50cffa548b0f892d535756824c7bba8160094d478bc5b6e10e152705a5a9d9d329c58be80a912670b7d4ff758a1967b6b480fb521bb18a48b2e802abfac95caee15b221d6b9dd72768595584c5d7b0e24a8d6d6dcf498a9f262b7934380ebde5907da4dcb280691f5fbb672651bf18c3b93690e5d188aa147fc92cef1abc3791bde43df2105904527f987f176559e295ff9850790dc71bdcc60a1d716843e8535f2dca2707041a9592b0c2d287d5824bf74fa68368dc07a2c6d541e0b4117c4186abd814aef8cf00467628bbe967273c36c5f126e905b3fa7b65575f6e636bafff7d7c9d0fe371fdfa942398e63c94404ecd2320e7f892bdec5c959c6720a64dd0090630865fd1541b3e063c6ff082ef50ba212aa5eb0628bd135a56da81c83544949df002a012394738cbd39dfba21aa7784ab98bcb8145ed5902e4218613ba62d0637073437236e3a02a7f0a563cca9b3a9fca031cb180551fbc06d8316a86f1284f3ffe84021317beed54cffe815526cea9b8a162b01bae96c114a5ce55147d500a20d5201611652b534c274e1d4a26220c08a146de942b1454b7cf377560b4dd24aa4c114b24850f40521b56d4d19e60a9fa634406fa0fe7a25d46e14d8eb0d30aa56997d3b1fa4eb55a740d9e107dd1ab9707ad4868e8b5a89d16605911846c8e74ed420ba5f86a6c545b0142ce366f877e939f336fce276e4313a02409f906bb024e0f8ac7d5a1737437b2473234ec151b6f412a89ad1533a569e94d2d44f84976a038479410ba8e61fa04d39c626d6a042059d2c6b917a375cf6c97db1a7fdc873a5204795ce9293986ffc2d4dbfa0e494daf1d63dafa2a26f0ee97cb1a961d78d49bc0d99e493b2e566d43b34531ae761d8b9a0df17b18d5da8e6a433aa5fb231a92c246671b1c5836063df4583882a64edc7202f6d3dbc96df487254770585871d0d3eaf47e08f431b44d27b73be881e480f62f1d469080b89ca4c2a5f1d4930a172ec3089792a570ad338456ad57a3e500f1fb924af9bdf2d89de4dc5015e8ee764caa34816fa3861b77b3cb050cf29058bf643944211592831d6ee9b7ade0289c058026ee947d2d4db1424c774bacf5426868fc94c6c9cd12f5bc9469e207a85df49172acc92e03118df9c8fc6e5fad69adc342bb4eadf143a387a6cab1d1da0a1400e4222d4c945ed5afbc2f3a342680e09908cbab2f674f79d9cf27c0ecd7d57bee0be9345223403e10533e3f60dc0e665e8dcdd03f6afae734beb77a56ba02e1e46ddf28dbbeaad342b7f1fa5cf582f3114712eb278231aa91913c6bd2706a0da6a18851bf1fcb1a1b3d89ee50f4ee650b2fab209730de2559875d97c61a0a4efeea0b6a86e9a72dab2d2df54d0bff2c584e7df9462a8864ac41704ffac85733e7f1f667c628a177224b6698dc94203a8db7faef7e7d7b05687b15831f4b14f30eaf737ade0ac8e310a39cf76e340dc65e036611029cc51e2971660dbbc98fbe1885a4587cb58e6d2aece7b8c76daf205ea0edf9821dd9f2de3b3b5b634bdd4f42134f2cdf9b9d8c52dcd911dbeb2cd82d6e2961a6d7620e87013a84c6a0f7d0a7118205e24da5a598a11d242ee2378c8bb0b81e69385283863037eed40550fab0305875f059c04245a42efeefd62a67709a6896a11d50d7da084d75ed6d0005a03568c3119d15d5264c9f98ee0b5f9accc813d8309c5c8bcc1c75d0ddd01a669061987042f057a8a0e0071a7833448e0a1940d437877232d001e2c9b5e8ad8321ee1dd02a67e4b3287b203707456c7366530d18991198c25ce8034e4b36df61cbd4a873c8f56bcdc1afbf3623c016765dac1116d58ea98c610498548c45280342486471aae59829761fbbb6a202358e200d3ff0d11dd196c51764a9e4efe12a967c4f07e04fd593b20e406c023303e2c6f4d94d9e014ac8b4aaa1f90d25788eb5d22d74cbc270564891909d2f635927644253aeb6fa2ee0a0a7f818bbaf40e00c8974c478ba45b9f1082aa24a14b0a95be5b858c2ead63ccd033ee3b1eae140ef4a55c3e69bf67b4771b57e4efe92454f7b1d9a2ffb18e0dd284226e79dab7896899ba1790c8e0da6320f6eec4740884076211dc035e1f25c5d667f772be8e37890a87e1c4cf70a00e660e33bc5b9203a08dd2a7cd8748192ef443644c71010812946106232ffe7b59fc70a5da065e46cbb922e25493b17858806e026e9003ded4621c6ea31d37d5cab5741311a936d740780d90f12787d885233396271db389d3f07d175193018e44aaed5b0cb31a8cef981a1bc5a159ef25321dce765f2811b7a1966768a504f2ccb20dc405d913fe11e4fb2c5f323656b8ae6956da2085860246b30e6e5e0c135ad40703afc2daaef0128221b8ec984d130ca0d7cac76a0e836f080a4a4da1e9c1c795848262ba92387cb4e0b8a1d4f29055d749fb6934346e61cf1c2b95f8b86b478bad7bfcae81dff6ff4c4e1fad98e33454babec921126dd17a8a72f887a32c21f5e73b84ac6379c706d6b78d2ad0cb4850638d5053103b0ff42762d3cc41f9721d9cc3cd73fe456e58c2ab9cce588af394a14bcf3683bf611c51ef2cd49ab8aaf4e67a5bd0c3de4059e891a643b68c74623c9168322f22d7818170add4cfd20ea94bf68f3a03f7cabc4e9a256d6f9d8c5c875384ef80e1ee588ea40f9635a94316d712d28a09c20bf3b6364fe01efddb04fbb372ab864b20068fc2fdca68fa8e66cb521216e8b4d0791ba23e63bb62b67376c84cd0c364f5e90aa8e472f02a5831c4c8f1edcc1a849a44529542f0b6de1f335a78e39c2a30ca2810aabe9271ac3d31ecb5fb470a693676a68a368219f61d4474bc2ece8f977caa040cf7a0e2f99e7116e13060763f1bb645de99779d4f275f1c50f60b13c677d41a3c86481226dd51600891388d8b158d191bcaa89c9a9a98738eba3986949508841166b2b4a60a36f2a5dc28e72e88dc320d2f8c97e3e7ed2d259e4c5a528974dda497948191bbec2e642dac4409ef4158a0eb409ceede90e318137bfa48768a2bff4acbea99f221d44bed931a6144b6f188085e4ec991e41537d588c51bd6d2c635442fc3c9e60195c4666af05724e3494cd5d0af26a61bf38ccc98d2ff80e22825ddde8d777f44e7ca78206c7747ea0e968282105488f64e2a168cea86ff523223622488819c5f0a9a6b9a7fd80759817f33ad9ea0ccac59d4b8646414e5bf84552f110bc8e83c4d8026ddc1b19bfc5002697f5bc03a9f54cbf21d9f4b40d65ed14e7753074ff50123e2d9e28092f0a6757aede6b3d73b8928cfc6b96b2934c2aa48eb88cc5336269ffe37cdd8440d9481576e0a8d634f34a2b0155f48a7e98665efb088d9957fb394b4d1512f371b2e7f0103105961e5d24a6478aaaf4cd4413de3336b08996db0526797fc153892bf53af6cc0d2dd7c5dac41a75d92d6c438b76eac325b2abc01f8194d0b916be682bce8658c6bf5243ab436e84eb5340e82ee206de118406fdbed6cd17cbaacc693572a83349a045d913ccb02e1a5db2510b9aa2696b1406140323f228e7bd8d971054cabde0db581f678ff14a07a58c12b0d44617118b1b468c2409ebc3f5c54affefca9f09135c042f11abe6b0a06c8a6697e0c46e37dfc7568c4c9319825f328c15e8934571b383a0de356e547085405120b8d31c6556ca66694dc78c9ae76fd4209b78e0ae96f229633724a0dcdc53499f1472a41282512e99256760d4c0b550cff7c41585e30c9ea4654d1a092d99e22a97c898a4af29de0d88e100361e11625877999c6b32860e3494c7513ae95545af5d6507faff50116e9bb46858c451739d4b1ec161bbd9b1fd0c4828949a80b5a4ae461a6be41462cd882a75357c4419a1efe763d6de05c64857c461a4e266f227c80d10b6798af4e077efa5c70c426355c28f5846cf193d4b0b87f7dab9b7a8713fc9a46864ac656e10724572c78613c159a31300f42ca50f9bc4cd7de006ef0c983f700f4aedd792b31472fd8f2c4df4b7692f9816d4353584ba81aeb00321c5b321a57512f669ea56951c6eb1a8274463bfde7e926775400727fc330e87fa45bec1cf7de337dceca0e0968ac43afb0ac59e9879db764c2fea3d1ccf1b03db3f241b80782a980820d8aba2657621952ca190888f10d99071c59454fe3265fff141a2d264d051190ba3af48ecdd2e76198a98dab86562a040af6f6345cd2d57f584dbb50e6b5962726a3b4f8e6442835f0180bd89eacc3c4e503b508d70ade50e1380f7221fbda018e2b452fc92fcbc68c2023a7ed80c7f5da7b7ed8fed0d8f0a7154ed79b13ada2d1473bd7454232fdd474bf2b367dcc2c80ce4035acdaa935920ce424e074d0b92bb3c0228dc10b203c6ef98e173df70d33396dc690fd53d2b55714ec47df9b43305af9d2f1386cb7950001ca172d26eaaec16f601985f92ba529b4fa61a21c1fb4eeab4b20679c14676b72df796322529032b09040907099cfb10c077b2761310d08114d7b66a8ddb3e89807eb20e8af2e4e049b49eb86a203d3ed8950076160a1405fb9edbf7c4164610bce7f23d9185826905ea2651e5892b76f5085d0844ee68074313388476aebd009247fbe81e1ea4a2dc0cb6b8f375a0b8384994c9275b1d4871a75010bbbe29ca0f7090e3cf771f5059827522abf31fd7cfcf20339de77563cc3cdb81c08761d54a9269adb5f36d0f61177b8e042225c764185a98887d1685e131475c2781b015699b7d7976131856ab48c909093204b4f2832fe407425ce99c0bb1f65efedcdc2964c519c4ae5494eb89e30f1004b00b08d85f5bcfe713863d01a2eae2b2907eb1dbd1d6646de5892310164ca215ad759722489865815d720c659f42cc429dc4154bc8945d1d282e5745908257ccc7fde439a544d383803743d2ccf71a6dfc089e6846a4d17d6d4a6e2b6d1c556966779630e9ccbd0cc15309d2a9004870fd47e7e9d88f0e686400428c284a5c61236bf7d1b19f2d47552c39a3022a88e822fbc992431ada1251dc944124eb31a22881860b2654ce3881ac7d6787cbbe33c3e5a4305e84915aa061f2ed9c11c3a4165e40f9766e0cc32667e6db3f9c1c9be3ec4340663f893e3e3f1b105224a9e7266b4370fc741dc7a938c467c755492c0a86286794c8a2ec4758f43a4fbf1a077572949ffc8a3ed755228ee8e33e12ec2b4389387e7222383baef223d7719c88ca4f7e128fecb8caa5ec0401949f421655853a8e13a6e61cc2315b893e33883614349bb41b3aa9a99a8d93862368e518f88fec029f43d32f8eab70fc86e8336f57dc117d66ad5d85a3738b6e6d67e24c1607862c4e64a5f0393b911cdb39ebd68516a5338252be65488e7ffe7d0efa90cf41f1f394e8c39ff8f9c8b38f1674c37b9693a3734bdd107d6e38088a3e3744ce99ddc41aa62cc549185cb00a71dcaec8e2fc47767de4a41d97b29d9c948f3d5b39fb8efb6c1982c33ff7013a80ec8683e24af459f996213b0e8a3e2b9177441f1e126b98b21b6291caa54ce5230fa9441687e3528623b23851481223ee88717cc7b70c516de1dc676808e83ba24fd3c41e92fd1a39a354c85d11f4b169a07864cb101c07838ee088ac21a813ca4f2c21a02f40ca40915beaa10c2080309acd645dd4af761f2096e1780c22cac71efaaed58a1acc0d489021a306473c120328ce4416154fe85bb358421c0b8e4867fd6a07fdf3b16b5476c9486326c836c4197552df5022eb7394c8a2de2c225306fa94814ea3b36f500867d4af76ae261b29eddb0760c3f51f3b5a7b07a59b754060378b8a94885d4d833ea85f4376f5e3ca9532938c06bdea87f2aa0acc4c68bdf060c3a38dec5700aa40c0cfb3fac76eca468d31bc1501b8e24e20709a7822bbf8ac5dad7c0396816ab9239dde430bab59d4e7872fb963ba953ba65200b03009fdf4cef9a61a7c8b9e51470103c33a61869f32bc4cf3dc6340eee81668f003ec8d7061d81867bb7e4d9ba558ee481f845d16521df55c0a7c63cdeae76c5577572a522bea9c73560084b91cd775950b5279be451596d621c5a5ea910473777b0737706f7a12b88b06535876493074f4e9a0ca2fbb54466af5d6a18a136a7d41f56ce59aa0799c7901888f2f33746b413b57d56df82a4a9bcd665464ecdddde1d7307cea72c77434f4022edd4d69534a45d60954649d30cecf792a763d4017b71ea056fb690afa59f4507ebab80236ddcdcecc4a6ce03b9819a15dee486bc5b91c275e9cd9fa1685b0c08c17e88f2cf0b0c035275e64585819b5117e4a294fbf40a02d2ad25741ee0042044838802a940ae5ca4fa6b3ce4ef4167bca40a9ed39a7af90a89547ee5968bd651728774ca1ad25cf76a3f723abfa7c1c2fc2fbe0e6a77761a882dc319d8ba4a41c64b95cd925f5fa34c815acd26264f960d714523df65d87b018a69b1d24b877e88c57d609236dd108bf65170ba08fdb457c10c4ea523a914ceee0061a64dc5ebf917c963616dd4309008aee485734b494a7484756fbfcfa02786fabb9565800bd380882f714c51dc136427fce203c034e94913eb8853f6042e98d1c1c213c86beaeb06d7a2395ef4c41f3ec6e6e6ee6c9719e42f2f37b588b1ba4923ba478b999628c74010df602a8ac36ce7f9327a3b0704e64ca2a99d516f567b78f1cf9aceafd9af3a924d919fa524a2d0e195d9bca35cffab1be114a9f05f02dbb7e827412ca5d74ad4150ba2395b5ceeadec3204f5156e978802e6efbec3072949a52565f9c8f86d6379873006e58f0a17a813e0b3e7ed2347625e58e743a084a2048a9486d334bb28b167d327653330e0ce24ecacd96343593354dcdd8085457faf35f6ee8a58e7a794aa1659ccf137c1304250982d27520a0ef9e1dc5642b2e056b2b1e80d25589b30a8e47e41179441e11f5e91e910968ce5991cc0cbed63ab65add2b6bedb9a33e6bd775d4274729ea8867c760861a32cd66507c3a454f87e40fe9ed75e6119980e40fea6d7af6b122f9a6b117458b19bc89d6b1d54a4ae9995832c7712936a8a25492f41155a453f4c54ae9ae9100c7563e2608518161ed5c3cfb20c0eb0c1ffd2a52b9cec8e4f1453a268d4c11549307fbd8271f1d0301bfd857ab7b977e640c04f9aaeee313adf8eae306afc333016c48216c8074558741aa60e5aafe00f9aa9d38d6af6354df2175c857f50eab02be6380eb4718bef3611703a9a608211061503d08345812d4a9f9a48fb155319ab62a44fcd256c54b063cc7144d84a85a78140bfb8ad198c2f0e60c56bc6298018611430d94c989649737d90d0fcf4ebf5879cecb326e922cb5b1ba756964b5e2785f76a29439c66a6b15c515eab58dd49ed86ab17141b620f060cc55dd295eecd1ed97658e386a391232f412ad95f669ca5eb05b4a902f4ff24465cd1f98b2cdff9c40d676e4c119497070c61934b4a0c1c6b7bb964ac08383c8f6e4346eef12688c971eb1049047416ac12d18d6025a0bc030c1b33348e9172b9a524aad52170a5627dc9252951f796c12f77b5946090a18f7823638282ee7c62be27a491e1287e5da1b38bbf6c81e71bd2c2c0e17150567f3025e6181153558d0c3186ddae8a10d196fdaa4e17eb016a70c0d0c421929f9c61c9da05062bae2067a61e28959fab22cb164924c42d8d0d5fa25db8ce086116a426d96e0300216416d664b8cd8bc4932021921364a405904b12163c90863a0b0b92d19218b24be5165872f6754375fbcf8927cb9e2e3e14b13dc08be28e1c39723a6b8385e96f9e2c3165f9270435ed858bd2cc384142a28042f7dce6fd93d7934ed168179f2e4d14cb9daed9a3f44a03e76c3b6506efcf1b270d57ad78980abb672421cd759963caad3c931d0ae95a395a34d2827542b07d3428563627253ceb9cea5e7f8e2d9c7ef7b2a2781c9839d4747bdca1f52ba354d11382e06eef758726d8f3906369d82706e7279a164e7d5ed9100b53127b74a008d953c289fc00faedcc5137b4225a5e010324441238a282ba05bae0d03e853a3e8d4c50da634c0313a786f88be3040f68d49091cba204b50bc21383568360a0ed5cd907543746d51809a045943c88d0e41d0406212e4cd1214364041d2305a12448d5b193057b494c0149d000c13d604d7f4b20c9821286084bc20c058712136ee2350f27342b9e5909148f54c1d4193afadaf7504487c859283ef50d49de3bbbb8724df3d9ce1c1c8a9989bc6bdb2eae27b0264822728e0c1895fad92803b247976ca3ba4b197bde0f03c8f6fef198107c67122abfb79da968ab5dd84f6040459b520ad2063f639d8b53af90080aef7b49bd0ced3ee2305df945e7422e1919ab6d0dcf5efda5ce56a3757575ce5aaeb9b273333e32031b96b8e72575d3c3e2fadb42bed8e725d3bce769de5f161f2dc6de8a2bbfb5db9bb7be7ce2eea0c935ee70ed6c6e9cc715c9d7704bbbbb590524aa69372949b2796acf5d65adbceaf5cc739915266e9eeaeb6bbbbd9084d993265ca9429455faf40ae564a8552319a5275bb9b40c2c90e5aeef7d2e60488499333ca68b2268c6b5fda9aa8f958704f2f6d4db8f8c2b8a897b626567ce12d419b6d395a6a526509174d9c34390a6a82a4091745b4a4265c00d14ed024c851cd2f68eda98932539420872d6a694ca1c59b6c98c2e8471054010155395e2fcb4ca1a655548da074de9000bb804ffc44cdc93d9162c5461b33b54ca339669af939e79c734e4b5bcf71b4aabe02f95afdae61d3218a155d01ed52743362ba524149344127929a9a2d892f4e0891e60c255c60b154460e63eee5c1092e64e098acf1ec9471d8e239072ccf5e576650904995a74e9998712d3319cf5cc23cfb08947b9631c38501966059b274c318256380a0134e509382d482b049395052452a48cb275b63acf6b69546be26506b0dc39861d4adb79418569da3b56e2b1599db1f13ea97f5945ba04bfb5107942e5747bcab7e592cb7863ba66e6f7566a95bea96baa56e3d6c778c8d79ebad961a86598f8d61588e5b8f09752c06d42febd60a0901752ce5d6a5c4f1934be9deb527715cc580bc18d05b77318cddf39cd0c52ecf3dcfd3416bdd18c6e3adb79018c63b6e5dc7ac632ab7507404bd75d93a84deae7ed401f4d6555d6eca553ec24a40bd496cdde40eeb2d2f57473cb225c78fe878ca77a6eb78ca87e888ac934b594acc1187ec88ac93e892a944964924d2a59cf3233a3dac737461b78e498fcdacc511c77b5122ecf6d653614fbfaceb841d0471a7332b85ce530e81ce53a26c08702e5b88ec97774acd5e3ecb52b77ed9d42c45c31d7ffee35390af75eb97a5e17e3eb63410ba9c0642b77ea7f1823ff93c29a07f84e1c71b259cfcebc05338a6fef4e3913f85e3e94f4e4f0ae07e8c013c8563f727af270574ff811a08ddee4fa1f89f05c193c94f21076f0a49e8fee49f374f8c32f9290cdf148e22f8937fa6293d8b5ac1e4d4bdd99fc2154c27989c7af5ee9480daa106ef85d2a644c9cb5307536e0d5b50bdd7a5e83d718506c514124bfe6c2f1cc22eeb35eba630a52648eac62e9bba394b057659972f017659efe1511ebdf556525b6f2db5f5d6adadb790acd0ed97d20c27bad0c11bf17cbef75eaa76c7d6ed5b3786b15b8fd5524d56604125b6a0fae95814fdec52f4535ca17d3a1d00d0f5677735fb6df6557341e32acdb935a9b78e9968d6d29a54ced25051e4d0e40d5544a39968261a8dc25a714d2f6d4064fcc853b3011d99d25cefa50d280bae897b5fda80a0c8315b799135017db9a113e2971c225a4981c259d08ab78635fc924afc9235bce197b421c92a083bd012275509ad034a52030de294681dc4865a2d430907a1e1885a306a98419220358f096ef81204080cbfe48ff6e264d1c4cb1a8bc6f55e96f192821c2fcb3031337dc0e3f2284fea3c2f4f0178791a325f2f4fd6f57d5a4003e061601380b6bbbb270fbbda031703913ba4f3f04bcc9d5e29ad3e68ad22b52b4a296d2a59435a665dc2706262cea494a64fde385953ea596baded3ea42baf8ba76340e48f59a45f7c3aba5c178035773ac7d9dbcd5a6b2de88361ed2b9e9e7e719d58a4bb5b917ebdac28c22e5a6416a9b4e9ed76b33239bf313e90032eb6d6d9dddd6375aed6ae768b5c0db5b3b68c76516f8efa844ce79c9373c9892086ca7155544356e6da3fe9aa382e849d7455efaf035cd873ced97d1da05d08be7d1e913baa53ce8bcbfa8a0abd5dc924334ba6db582ce4931f6705d8f8c18b353b28516289cc4b510d4a5280c6133cc8c639c3a0eb727ce7328def9c766ec57ce7b70635dfd950e53b578fd9e3a75b91032e77ecf1d36d904e1cad77ee516bea4c26ef3a21ab2ac43dc08faae75c023de794b32539c173347859d9af250843a90e3619c0b0cd00e669d153d7ecbb59a2c0d69200024ce3ba3cb0210942f452e59393c7cc8c67674f0634556431869929d4fcf870830d6850b1e40c275c6683b1831368801f34b9a3cbe5e3a76b821980fcf279496f3999f589349318c6abb627153af738e7e997f50986633efcb26ec1ab5ae5f096cb83373de617a5b728077d044d3ee6e07c6c7930f6f851be79eb3d1d439d563cdd7549eba0b59f68ad7c592ba5ac282ca073f0e64e24f0b344389915c0db2ab3d2ab5b6baf3d7a5b431eb9c33a0782a2ab5fd6d15c2bddfa24923f3e5368fb555b565ce12675417cb2f5fdc009328754a74e85f48b1b72afa8c278bd03292e5de38ef6392f6440c1cd19c642c173eb567476712ea568334309886435a43f3421e3380f0abb38294f66c778f8c5b9b5975b01b9d3ab78abcf8fac8ab65fdc0755aef59107749cb07ba628d609fd9ef77ba0d84389fb533379bb38ee8bc8b81ef2c787e35f487f9e70c417146002bb38b75e02bbe7f4ab27ae244802cee9049a405a827c4991f029c80ad371dc0b2deb84e99e7b3f7d3a618a52ba3cc739f907cee9394e38c230d6f7e4a348a03fbfbdb00b797ac81f464290b10ee4c8b1b373faf1f423cf733dcc4d5108bb38a7cf71415e11196c7179ce0cb608123623663f824b2f6d43bcb17161f3a797362e6ad8258998b171a9fdb47129b271217afa52ee90a264570b5ad0a046eaa51923ba4c2a6ab041fbe9524ae93279396b5d95e33ab7473ae73877715e27d74964dd73229c57f14875ce3df1c816161f6197853d3e2652ed68725e7d9691afe9f3cccf99e6e71ce3674dee98b3a6420ba9cef957f35a4dae75cf87e694768d1a66de0006b8862c76764ef4d9c2e290cf39f7f1becff3562cfb26f8797dc43ae7353cb265881559d43de79cf32326914545560ad6ab0f9941fd9aee4a23a94c0bd25429430a19e756b4ee3109b8a041072e4b824023ab528dcc137d6650f59a4cca38efb8b0565f49590d53b6454875e93934caa8253ed91a75043de308a5cca7e3083b2ad2e420f3f9baf8b046cb4d764302203c9145543efefaca594747474788dcc1def2723b08bad4db41ff26fdfceb36f9c7759676e8f967fac0130aecd0fa877373523a2ab0c31dff76ec7f37baff70ac2e003bacce02abe7f897137639604e0e9813f67f15ccc9116be874030d32e81c2c0c2ee0158e1b3baa294f1c742d548ef78b3d45ef2ac4d1fa1cb187dc31bd754b5171ba4e38caa4e77a271c47550b0dbbb8a50a5b0058c11d75cccc3cbb0e1ac3c6548d09c3c6e9ed73a60368e80bd3f8499252cdccd017da133ae71499885d3cc4899fff74bfd7a9df9b721ca12a54f9ce0eede80e5585f2144447f62be5a3fdeb392e39a6e37acebddec33a661d6bdd3825ea4876e978ebc62e769ea39bf2b1754b39bb8e787b306eca755ca54ad9942a25b28b95c205be72221788b2dd87080ed16725de7eb1e41046699bc2e83b70e3c71eea294f794a7472f4d2e6c4e85d2f6d4e825ec78c61ec3a9230cc7b76f149e838f8af2765d42882f03f0ad6d309fd384e43947f15e44e24d03f390d41ff38b03b9d50ff731a9afceb407b3a817bcf6968fdb33edebf38a870bce0393f852e746db4d1c69b1bcff9178e47c6540ccf75cfe1f071b59aa16f19e7e3f095cb538738c2c9f90b516103b4a1da4ca2f150c7a64ccae41214a2a3b904858956b55a905091d16d22cd808284d8e8d9d724b56e2d3542badc51c74c88907e69b963ebd66ad6b4925a4b0ce3d43c7beb8dfc31ad3d411750246df1e2044c58219bbe9231a9823266524c19634c2d09d97429a75b39a7a76a1dc3e1ec3265edbd3a66dea364c975cc5235f9626f71b436a563d6fd14c78b34a652475296b384439ccec19b3ba66a0ce3f1eca9238671cf9e42c330167599ba316c8a2da87e034f8c6698aab12b95149372c1973627483fa66a2d35ec62efd2427a6edd5ab750042d6c00c95454dc31e5291db59a8e19bb526eeea823d4a9422849a663c6b016ba40f1fd4df0863c0949d552b71452aa963ad211a4620e8cd0095d21c7a720b50329ae901309ed39cee5845db54ead1744ada54868d6a3415684da80a2a5034f56d67a78b9ed1b70310beeb160845d0c8104785e849374e5190d494768d42025292dbd61a04abb688629c3869a5a6516a90007e12418a855c400bbb8c6ae8f86df3f5f335367506dc68449c872a1e76c54edf6ea1f04ddea2a1cd982e32951051691d48f2c250a91b751de8fba620f25aeca77704494cf277ef20fa6dc1e157c40008414542192a54457d7efe95388000e9a0505cda03673346b3368ce39e90f4dc86ec89721d440c34ca623ba12e08945523a447af84424e57c1a72c375441f290605b21b224f0fd1c982c8089a4c4774f5abbbbd9d258cf670110c0851619c4a73cd0c120009ee0da976a4e33788dc707922e2e386e8c32a92a5449e7ea55c47f439c0ccc9d297f239b2e40b1e8a642957853e2260a38a4cc7d52ff63944a32d24e979a7bbfb44a4224123d3690115328a6429efe194b3bb64914a87a52c154a990cba7ca3049f6ccd196860d06431888045972299e7d22573dccad9854192144e22bb871b8875b3059124e8882ebea4235430276d21d43b4ba9d71aba1043d7c3d43b351269ded8d5222779218b88c93d37893098dcf36e6bef6da076d38d22ae1a210ccbe28eb3c631949f49f30dd43194386ba71a58bb35a05a5b3bce1ad798b08bd640ecc219baa33c02328526f4ab811aa8694c80fa99933ac637be8945dc5ac77c084941fea8ce2f94913bd86d903bd81ba881382680a02f0da6813aa8b5f4501355da363cfbc83756e224eeeeb6c14c0d69d63e10ba23cf6d312680a02335b39664d626d2549a4b33a6cd492a0c614ee2611763b9f28f78220c9ed730659eb3178a71bd89d4ecb3368f6a18a0a0c9b5012951c17d70bbce3edd26c58a4d8a14db0f6b0ef0d3ef4bdb0f5d3cfb27bb5b7a95f414a4abcf1e9e50d8a08d1e000dd35dd3eff455101e664e759e9e345ca6d460022219c6fc7841c20443b53358c83469b5789a7673332d2389524a3da0de39d8558b604048c74268d38228a6e4f0459720592d2243873545d4b420514356f955bd4a9672dea0f1cb9a119aaf124dcdc2892fb5cee4641318266d3ec8f0758caf3e42656656bd6cb8ec758ca2a76f9ed6aeab0c0ea18a5046a8211411bf79ea7c9a3d755e923b6803215fb4459494d40f7744ed3c31a2a43c75d410c3465511c3c69d27be306c3cd59e3a7514110accce135304146df2a04e5750e494dcfd5c4047bd53c1aac0aad687706e51449c0faa4844fdc83c944bf4f991b1aa73fe23ebc2aee3441feb9efb70def98f4cc53b45dc1a28da73dfcba03be2b812bbb8257625c91d9cd3b0039a3c389fa71478bcac2bee4c81089575a24f0cb2ce3bb1a3b5e3c81fd5696a34c872bb97de7a00b407fcd231011993b2001283ef1c88fc21572d50c1776050d1b9945bb8d8d5b55253eee8c34707eb1c480a9c571fc2791d521d04a938047413fad53928fae857e73fb254111a64b9200ad4d9bd7005fa7d9ec83ac1e49e976072cf08750fccf7dce2bc09e7e58cd5222441b32476c6ba2224b7d997191399f53b63384533dc6666664f64d657133693cc82deda2cd77bd95304f6ce716ec7aa3b4e524d01ed442939cb59ce7296939c5c413a95d65a2b3b713422dd2b95cd49137a8cb8ac19934a4a788145186ae0d02649c626d1eef0703d58f9e827aef4dac457ebace133f3ec259576a5ede580e0ee923695e1fbb89f73cefadd7fcc3a3fe7bc737461b2f931e78dd0e92d03774354b16847969d3ca4f3d3557f5c77cef7ea99e5e5b135f6b5f246b8d2963c299beeeeeeeee6c96334054720c35a58fd0ad3fb9a5111d19050d0a4f10401c336d0de320d2754ec2045098c131a3b0d5e9327581029f190c615322a16e9d71ce54dbe098a1f5d4ffc288b9cf8511e81f9512635f1e30462e2c719b4c413fd386b396c947441f3e2062a92908d8e011cc2d092054b126b9ec8461f29f420460d31679410a28bacc551d66688e28b9624cc7c098209198b3f382ca105094992a21e8e64e82288376668d105e9896c9c502cc0a508206e6803041915c8a498334038d952060e54cec894f82650a2a8628da3268c6413cb17639a5033059a36b259ab3549c117628e001384ac0a2db47c21852dcb1244c87e9828e3d686872baa1822e9740619b530698868b20217c638438ca51ebab091219bb53068501a6a728234a8904d9f421ddbc00a1a56aa78c1856d8c6cfe6061020d2882b6d860858d6c1e756db89d028ba12cb02862088b2a3f5e6ae7db48c004b3062f6d58d030268d1f5d3532348925444c812508871fda28fa198117b623bef8210d2c537ea418b16143942664b6582201597e3883450b9e902193841543b5c40a14ac4132060d3053a41926243e3457b471628c27a6a0954903690731ce10f14045042b905893c5cd1a2a4ec8c6d5144f8839b3c51a2c3c98be58a2da1493971fa11290208a19324e50c60e3f4d88ae28138615316a70d14a3e80f4f0b45d61c3b3dbbbb251b1f4fed226460c315e50367e463004501343dcd086062d64a3db0db268a3444909953072005b2af0ae622d098027770457ed9c87b7de6e53976f77758ccaa48fab5a5151c4826ffb236598b45141f476f699fcebdc32ac9b230f8fc5f1cf714294fcc08fc8490447fb56ec425557913d86fae3314dd343c5ae28775479d02b7709608a20bfc78790c66d676b5d67dc66661fbe30372a806cd7751ca594524a29a59452efb84addd66ab14c97d58c3ee9b215cb2068369b2199ded1662c6b82d8b84aa58a72471b5ba95454a6104b4c39c011776cb55c1ccbb1a23c33ca17de365784eb816904cfdee2f9c9c495b6a1db73ae7adbd053afa7205d279f4a505531878a5d54bceca2ddd57881cc903c7b4e0f17c84bdb9095e7f8670c4fa178961ecc9934f452f2f0805d2e39c6d483cd085a0841362d526c5ab4740f25d6855a4a9b98eff3fe933ca75ce1a5f7b0141985efcc77777bcfa215b7e79473167d50a4536b67a3f13177cb1d23bfac4c2965cacccca4e9a5b2bb8a10aea8ced5ea5ce717945b755f6634aaabd26903457ee0930ceb58921a5cc679174237d7ca3dd53c21a1308c7656ca7ea712cda4dc4884de042941594353f39381a6b3198ef1ac5fb3ea9387fe88679f46fc6891d85927b4060a5012974167865fec6880d4d0d6744a1cd4bd61a13ae3a1aec67da465a3c69fd760830d381bba7cb263b25aeb0b0405b83a16ca17e5ba679a1c4e87eafcf4aa527de7aaef9c272be4970ca320c843b048e0fe4f4a296773f37015c68939b88abd5a61b921d0d58a79bab185a9d997e2941e50ff703c29a5284d1c572b1a9f64d84a5631cd44f24986810cf34e1ca8b476d7398d843e8e5eb07a1cf606275f8d7ae17482fd1aaafee3c02ee73f0fa4e17d9cff40d49f1efc0f05d2f0fb0f07a4a1e9bf1c1a7affe580295005aac01df00688035c7d2c0c5054ac7247bb089e43c080e53cd4da6bd43e297ffcce0a3b407cb2633217c342aefaf4d50534a4c0579f2fce3be4380d7ccd794ef6d33134cf362d44bb4d55f249867195d4e7f649f98327ff0f9d738b0673d22324bba419f090fca1c1ac4246318513728a298514cf3d21a550e2abdeac736ef95e74cce10ad9b8d3c5af669eccf38acea5f47ee56a0e9e9b0007537c5a39ca5336e7957b0e690e2d295f72ec45e682a36a3e086c5b906c5ab47861b7f8e9431790555659abacb236edf64b16ed328b762794efa06ec9a17c4a250d57ec6a3377a4406f18467d4ea64dca946972473b05a2348671480ce3359d1935246ac58d46714497a8d1238c6896222a4714cd37bd11d12825b011d7fa68615cdcf17617f292dcd1ec46be7ac98c2c3c545c51be89ba492b4142c4aeb1938c929a67492d7619b5f7188eb919179a6feff1aeb196c6341ad39867340967874fba15335160b843a2ed16fa0951a3fcb442a3d656b9bd57058d0e56be01f7a54d88273f8550c26f7e523183ca8d4aed572f6d5494f8c95ca85cb13d3fa9b8eccc9629b311ee67cfdb273d842dee0c73b8533a187287f4108cc24c157cdfe753fb094218979be7dce19b5f72ac1893d7f8ea3d6cd1acc8e0aa48b971d2538b3946773aad274a29d87d953b5068ee489f762014773a25a1ab0fdfe4ab022f8692e40a3e06278e1ee626cfd46dce394720f3ce3979fa6466669ea9da9c734e19f3b3c83645cd2cb205cda66d8a9979e79c939b99bd847ee639e79c73823f39073377501a340337b77b4f5a666badcdc0cde5327073b90cdcdccabf838b3b3691f5b7d68a2f4c9e2e5772477b9fa81423f9c3321a7496e40689cd6d8ca334b5336528936f2b5c4880e79ccf130aa08a75c85c9f1f19083493f4142da1c126690ca4337cd456be8518d6795be79270cc72cf66bb64261a5cb944463d18e8d8495e71f455cb96ede10aeeb8fa9e4b3ceb382623cf33358571a5b3cf5e8652862c29e5bd52cacb3e7dd638ec993ce69c8543d7d5afa57e49778e59cb021ad488f193e7a7ebf2acee40658a0f44d89c28bd9cc224f5d21604193f994829a5742aa5149a5688b191c04886314553ca1d2da889c0074213f04b8a89999385af587969bbf2e447faf24a93b72f6d579458e95edaacac61b3b2f4d3b18471c0975984954e0a07f1a6879f0e22d98aa05559b2b5081b2ae5669f0bdf27dd02fd741364983174687635fcf41e1f2d0f7a0091616e5c2e9725c9abd857ceb01cad1e36a1354deb2d492f65e022aa25cb2ca916c10647842c238594976f7efaed84d6088df1d3afb50981f1464a1018e24a9297362e423fce97bcc4c5073ab9d07ebae532fb91dafad2b6458dee97b62d4b3ffd9394cd373f3153088a9fe1b4a2c41bd1592857a5765238eea54da8879f938a500e3fa7509297362c4a3fdab76109e3b997362cb79fe1ccc2c5339380c816268ccb8a0d8bd1c442f4e5a50d8b152c51b0341626dc4bdb10670cb166d221d090f9a95434b9a1d602beb40d11d40d41ab2f6d43008d16f5d276250d21befc083e4bdb15a42bb7ff5edaae6cf1d3b332b35d19f3b303f4cad7c3cda47259d2ed7fcf92a2943ba48d08a29736228a7ebae4e0328088a52a495c6fd9050121ca1021990c01228488b0f2d246c4932b4b6f7a692362898d08a4ff5eda8840e3e3ca9501a2d1a8c4cdb555392915a2190100000000f314002020100a86842281502898ca8a2e7d14000d7794407a52194c846910a3300a32c418628801c0006008218648114d1500999781fff6363125a6cf805e0e05eb46da04f7082f61ea02130906dd1f342e4d324f63692564c2a0f49824f08f1ce2f529e28d78cf2d677aa9cd473b50c2026c33facf9d626b830623a289ed9c275aa174112f9245af42e4766f6386da9c63507bd6935951f5e2765185431ce021eee31f777fbc9e675256325b2093d75ed5b497f55dff9c9e51909653cf96418989acffeb9ec73233f9b5959c2c6f120f65e247efbf9a4aff5631d19f9ad2e92bd861d2ed1443d0516918f43eafc9c06f0f66dd2cad77afd954992fa2eb1d6582a1997548f63b54c747077829246202fc94f22859faff35f3a30fa27cb94a83e4ec61c9d7c7443aa217c0069490cd9fed335128f6fdcc3fb4a2e7c893e22748531702a9dcd310fb6ae5e88d2a2bb4f495b13d44111bdbd1366c2c5b33d0185c5bbfbb2fbaecfaea6782130bc3835079ead2e4f1155f0d74cdb7669b7d75d4fa82195d7dc4c49e9fd58914fd7086feb8eb72e4a7dcfa5170d75d647b2ba9457ba35ff444a80c9c58ecf473f91e6e74ebfee7b814d4c240fe8663c3212e66b128d782bf925ae9c84c3d6fdabf5eb9809f5e45ad587848cfefa379c422d7fc68515e388c25971eb8329b2cca8db5dce286bdbbd4635daec806b84865c3a95083282bd59a02d13e11ed4b4a1a1f902de8214abbd70c8a1a03f1d0959c222259e3af76afb9d2d03b06980e66ecaf62d6cc19ac602399065fb2ef490808bb2b0133737b845d93210d7def844da1d066454c91f4d6031d5f53840b4339100dc7c3e5a012f98a56b0f097ee8350404b98d0537761b33a43b4f44c6b524fddc1a5e3e107abcd53041a9619933916012735360630cb8552a5251230b3ad8882246effc9d634c33242fdc529493289a9e82605a18831923559d766e9cbc481b08ee559ce1200a38aea62c9d95483c24d82422587804ab9e45669a1d89056f5efb18936731317e2df753aa6d486b92972abdc770f65d37906d3605b8e545fe61e2a02672823bd06d0192dad65e1bf2a4ca240bdaf86435490e020c720a3393600f16b92d97ee2180b945570dad2befd1a9c354a293fc412d057edd63d1da33d195aabba2ca253f36d05d6b802b203048b9129fd8a4a4fd2df4285cbcca087378533fd0e6aa1a4a5d9aad8b3b23f10d5e3c06cb98c13007abac2a73c8375ae5ba7135302ef6f7e223576af1b48ff6685f4279861f7e3a93c260b1e9213944024574359c104c5029690c7ef6a74bfd804eb7a33be11e86335390a7474db65ac72452d1b95ecf9c02fbe4c2bbf84c537e9fb1071f118b2560085de4a307075b8aca598b6ab057a8aa6e26aeaa1d969a304b0b056eea120384d0595b7844881520dc7332c49165c20d6609fd246b0c512f81361cf2d167a4c83b5d38db1f5164856e470fff35271e29d1fb7c5ab6fd56b7418d8bc9b80f27b7d37c3ff46b67bf56e87eb1755a2d0000aaebad269dd58cc4b9493b030e3266449a1bc7b533ebcba9626f44048379622ddc4a7bb58367ede7183d5d8cc281ec334c65a6529b5fd253f7f79a9d8575128ea232b8b93d6b0227f73474aa3d4f8732266bee7bf27e8722be90c19fcd40987d4d01feac7ae450889d6d45e0e38951e46a6100c4dc24ef18e1730a7e7966b9b1b69867b362aa21104fb005d94202219eba3ddf95a0c21b6393adafaa2d6e1a41f2299691a6cfc501f84eb20c45dbb3566dd89242538e5bbfbae044a879ac05057b236f263a94633cdf9508acd0417589d0c357139a67a9a51e51b1aae51dd223e86b9b3558796366ca7ba87df979e0dc9fa9aa7c1b112f888825e4659a814b6a1352c433fa8663729f2704bc3ec549c483ea079950f08669c5baddf35f6a06f2845140aea958c67eb3a8b1562f28cb7a64747a65777739f28c14a4f5685d6b1bfebfad69e78c3aa6b0ece8d7ae35dd6e9c4c92b16964b2ee36966d5d4e3bd7e88f88596dea313f7b9d2aaa3b538ed2f5aeef5ef9cf603c6dbe546c78f41a0bd7a68048cec6e579e9101e4bd37a8c7a5afb1028f130f1e2df0088a55290cf302c367771a2bb58fa9ab09740462438c524f187a5506ebfc55358d5789a0d3889aeda79bcbf959e9eb8fa10a6f30ce2721f0d2a941e55e5f336bba7821dc725983e2486ebbc4ce8d6caa2ec7d29261aa1ce6d5b43eac36251058229afe4aff14ccfc17545e6f6b49436daa1a5180a0abfcb321baea9eff2400b5847944b0f0592864218e512e8818370eecd4ee6d4124472397ef9fe9eee25634c2329d48921188e2aa8b43cf645f450638678d77954f48f479773bf0caa6840d86e180756c37f21d4a7a8b991de923b8a61580c255f145cdefef7548efd748b803eda5506d569ee80e0157f86c58532ca53f60423856509974270b45b04b31e8844cf8b63d54ddbc7628b6796bc97358886d44e572bae4398ce8d6ffd194c00fd2a2e5639d16847e51202ce6e99e1f2ada9967e6063face75b742cf5fd25698652db811a0ac661226722b48722f50c7612062894e632a22a50548e2a7c975b55f1ad723d24a1d64422798349175005495ce5aa9b921241f7edf287e8e23138cd8d828c03ef8323d4255dd55e022600de2962d8ef38017041818450d5cbd739bdd0c4563f4351ee7540a3e729ab0eb8387d0c9ce74e24fdf947519d23ac0e2c08b3ee1c6680dd5de930c4171dfcd23870ba0a4aca702ed4c5940230ae720f736530cf775195b81d36ed1f7e6021a9aaba772308b71c19a352e57f701ae31425eb7d76990df4482b3a445d76b93a4c143774b961a85b13c2019194a96ec9c8abe5a6756092faf14e9298c4449fb4201b8780f7e3af9128a87559a543f9a0f564998bd043a2dd746f1e564a6d86ef46405972f99f7c1d840172718b0ccd00a534c5cc1562d7bf03bf5b076d17ad9af8c5d2ea596f87f28febe059957fd02cbf677beb08006c35c27a18c7508d03bde4ff1dd70ec920bcb41eb58cfa6388ab184d24e0e9e679ced0bbb826c65af0b4594936fc9cc50f21c2aecf2ef3bac3d4941e73eac5fa724bfc5bc22607b57ccbf362a853320afc4c89b550cda5746192eadae91820b901402c4f680d594408dfe65d84eec9c095242748b1cee17bd07c1931d763e70106695bd9d13cd044d06ff051d52f7133eb5165771c588063c60fd041024f1add45693a23d915088bb69f01069deacfd8c20f05c3b4736f9af716040ad16ca39aacc1741847da22cfa3cc0de04b6e4490ff5c140f0141037678e8634feaee2945877e5263bf408003059672c87a151bf7e8cf81b38c5d28a84304dfccada89f38aa5ed9aeb4882f1a100711e1e22ec9c822474b962c4e834fa21ef2bd85b613b927ca15da266d29a84054729c3b43c58a984c43e6366a0e17aeec7af0d96e460ebd76a53175aa1812542f343183fc5812e701d9acf59f1dc44417cb9cdbe0d9e8dcae7032a52dcc549977b60ae082c30ba20cfeed6f7e020b360cc12748bbd1a2abf23d5c31be61acb142f33193bb93a0afcca25bf061f50037740a06e0d0504d6cc84aa78c8e89bac29f90628684ea51ef2ccd20026ffefea14a133e444c39b2a98761e8785b2e068483dfbd0a1e72e0d4abc010cdc85e29e94d404e437dc4cdd2e0702b0f6f8f0306897324c8d921d49e6eff040c1ed73ecc6b47260ac902681a18b2b6c338f951fb7599ba9d3ebeae9ba6414da5328a558fb3f67a883fe991f7a7b0cf7ccb8dac09b5d67ddf0d3755950efeb33d288f09b480ea90d0878cfdbd0c87ba7b848341b7cd658e244fc743440d13e6a8e06593e698e884b84a89e176f1f512fa82985260d9a26080ab0000c468b596c43a2f28a98ddc31b3fd4266f8dfda766988627ea80eaab925b3ecaba6d3525b88cf790278d570f4706de42bcb10ecfae944e0404795071e0b747cbffc13788df8746b23b2238ae5de88e5a5ce119ffdbd854c2a44f014435c2d42e8704103e140f67809edee09226a844aba11e5b22c94de778e4c85842e413c0d9d10848d1679e3f5504b60b87ba8bedbe832920b42e9250df83dcfc1e74dd4fa1950ffacf3f3621315cef02de0521e0ef77a188d6839f18304d680ab135d855ba3f13f3908033dc824d8a5368c37700868ba0e4a4dede7d43e1f7d980c2cef7e1f23a672b1628b51be83ea355adc8a29ae8ac39273dcd582c7121b4d2d48511cca7ad78237f1db7781f3b0097125e4d14d6020eb0cd1c7549292577cd2dc3e2140c453ea1399231d0cacccf6db1e849224d47becd5b4f7957068be40d8d4bb6436a43efc40a8b950b7c85c84d99cd271144816ce35e79c3397b60f08c3e45b3fca67900b15ca98616966b910a211f228812c4186d659803f97609dbb0177c40ef49f29cecd091e83aab9985513dbb2258670c6578a76b0993dfa6daaae3fbaee58e60ab1dac8d23ed12d327d27280b1c006772db9c4c5fb4b20567c2385546f07e28ffc31ec7b93385a958a101edfc4c6b8cda0841ea54191923924ece4819837d2ec2b81f6a3eedaed4ab6d4489b1891b7bd0a0e8a64d34db0cc555dcc703ba783421fcd78ea278963aabc176d1d13238e8a032362a7a305e190157a1eafd31ca078328cff87454f9244540a8d9864211271523fa351104defb4c253087df0c5f8a5f16e9213c67966f958657d9874ff50f91cc3770f2e16813d438bf19448076a1a7c996e89757b642f1fcbcf878023db2598518161e85569c3ee68c46a0e00173be66bce115a6aa2ec2c0c36379617f67a3b1958d214dd573058f9057760a60b34f6f9538c5229098da0374b8a22036d86b7bcb71ff014ec27801f16ce29dc43a110f6c00218f43068579b33509502d164bcac4d5d9547cae3b898b01bf4fbc0b4f24e10fe7990abbbd9d05203814d353796dc51301fd1b66b02fce6fc46b4305685b7ea91901e472fca76ad607d5cdb76a8d2287f2fd25e3d93e400a8f31dccbffc9be7d7294afe1c66e0669ff2933db99f40bd3499ed4d9752e8be57f893b9e353cb79abcd897066cb55c9470c88ea12b6746e762b316363f5f594c298d41d441dc3b98037dabf6932564dec306d9750d00c743758b7c85836b5f8b02a07b8fc8e5774327190bcbc23f4a6a070ac5b1c884382852c10d5f0b156d8be34c49def92da2600ee63d053f6842fb4470252e21f7b971342a6f7c25ad41dc1b521783143e63fdc872ed087c156b0d5a0a1cb46e8fdb056256f9f6c3a9a406b02fce18cbf572527875e57dda93c39efe6b490d74c6c2ab836b2d2bc41fc1e352c923fe091422793d784b19d27a5acc8f1d01c8dd549c2e1e44021dd2b32591b0d75e720a0ec9b7c8631a045fe65a33fbe2b2fd3846063554f47aab51d71aba5f350d96a1aaedaa7f9f0b16c47b26a41c22546283edd8700685250314044cf62e1174b30bc2b269ed0f1a64c7c931f1d61ab1fc1960520cdecd93ffad9323212c3811adac07646313afb2e6da3ef687c5fb919b7ec2dca190dda055e6ae1558190463bdb028ad98b250ac80f930475de29b8632da8e642b330c0c41bccd0d629f35686e7a333fc0e6b862936c964bf4e0db5918b06e9cea86d9b63b22fc26bf8e415088bdd57671b4c58b6c91ba71a9751c6bd1c16a01827319326e17f886c23b2fec70b650035c3a98af57f22c24ffd0125381fc46559248212bf6cbd2eecd21518950737ef46983ce248d58807bb8519a19d066b656e9fb3a9047f770c7207ce52c7dff33a96f0e6ce0c45698e71af11a5fa842a7f6b5be6ae5059697a15338c2d869f43c011543ace6042e5f295e79946946e62597991c5c4150d67b62ba4c792526330f7b32162129f3e34af06056c48081fcb92c437aa89dafd930887ef732dfa5fac344920ce0d13ece18fb04a2dfa1c61b9b48fc0399716808854196b6a4d14065d58cb670a51b4e3c323884339d47364b2f708b81dd640fc3d9245c5ba3528eb01f5e81f5803b7819bd05d0fd54b0af3fa1e1eb356905bed5427b85b524f235273714d540bc36f4fbaf264f8f2e8a664992c496a9e680a01c5c4e1401a4f72ad29c65932d148119fddd1550f9da517ce38c44ca8e186f9d7f2094c5c1abcf6fea7621680f01e730d481bcc1e97c8196ccee756233b7a99157292b4c361eea50c4855bc298734069d58da4f140b6cf885369c9c0779cc24725062ef4712b45381f933c2641669568351f298364883ba4dea871426359f5440b72802a3367b96347758ea7494d1f9db3741572c28090bc258994b4a0bf64f1f0edaa060bd1b5d6388713011b52085581e77e7dc4fae80686165a7b7e88bbcba284583e5d1f05718e4c0960104c1478fd1f4ccab0ce0bfc765b5c6631e2e95cded4d50f8f570e6911600e8f61976b4c9d3e877079c905a6a3d7870f74072ed2946a404ffaf2c86148590e9c00ad4c303c4232751c8da3acbdaf53449ac9308221d2108a4c3bf8433494f27dbdff5e048b3640f40fd6c78fbc8edb3d97086faa0ac13b7d08c6782ffcbbccb1f1ac93f13396cfb87ff79f9efaea2ffdc3f69bda8bc07c8f59e3f8c06cb764768f0e73f9e69bbaf545b0bf7805fc7f16a3db5d802dfeae443a256b1fb0aa50fa7a60a023a2170166f14a6d266f77b495076bd47c5efc73820e3cdf2033037b64f7ad382f7f3dc93b4d8dcda2e8ce0c2b37e3a684b0759cd5e55b15ce950c106dfc753e715cd8c6e6c27a28dac0ca99e8b0ab872326ac358f2b4bfe15e854afcc04239b50c84f0cc37d419ab7564328696733d49f7727eb5f2ce30c870c0db998f76e3c12835346e452596599afb527bb3de9e6c01a776cdab88230cb2eed0c02b66826b77f32c188e578059e852944f0b7b07c1233302985662d3c382906226d1036685ba361fee474054c9370090bc5cfd133112516727192704317978005e8eff7bd2945ef6c107d91804fea1bb94aabb6265b6f9b602b83834639fdba1f1a66ff00ab58e415de65a9b70971aa6da7811c1fdd60c8385da0703e800914b43902edd866af543fce1f71d02ddc36cec590c3fa30adc80837a670946b930654c6990776c230432f10fea54e314bfcac5782335fc326abcc4027dd528694a94c6fce75a22a1ed1c4cd43bfeb5b17f6bf0b66253b36b7a91415750c187eea6bc8449ec923788b5eb3ddbd1cecc8cad6050b9e4a76d894c009c9609256a29e49fa460a62b8127b6bab33b3008f12f66cf4c21446dbe427d75333c80778b8b9ce954da32b0333644a958350babafdbabf7a2200c22f530d3dc891795c523a9c95bd48cf934ebcee89508d2f9d0eb26ba2087847f1d9b220feef04d29a1bdfad65261dbdcc38cdef44d85390e5e1d7adf260e6f8c5c63b07cf0eb3b6532d18c2a608bbdf33173b114eb609e0e8502d464a29d8cc01098f19aaa33d43ce10fc53df8d0239d225d433703efc258007bbb9450bf49dfafe22edfc479d28993a1df6ed29a545ccde108a632da823e016133b557dcc84e6a726687514e9b017b58bb0f8490084b94f43995125dd21c45b54a6f4286b275ba41dfeaaac150a728108c5690aea622807a21ae7932268a71552b35b5b563d72b0248580afc823a3810bf8eb2d268ae1536085db0c409822c257092027f200a72f61cf655b89385da30f5c8cb109e68983e452a84db013a606f736584bae2322427cb9eb33fb3829396ac4cc6f6f31a204eb2c9b68f15a2a07f34a228c80332b0906d675e88354c2919aef8c5f107ef83c40b4bed843eeea9d4349f9a9cbf4b6b699633c046dc9c3183f4abc447add74c5922fd2f8354ff5385792c687ce366b1740b6536640d2b84c4176e72232658033b1638c0bfca1f3a67f6c0a393c44fd93ddd4ae80553f12b25f3fbb126994776243016da910b4bdbd6f5ce5197031e287324585599b642103af14cdb0c1d66ad2c14ad17b138a8afc9a8492743f6a49a611a7100079bc06cb7642cfe2c8e24f572c172ce410f1261ad151e9523ee367290d5714b5c6618a1cab6c09ced64a0a7981a26b0ea181f0d2703046031c4c4029524af659d462a7ae4dfc1388b0d8248a24c3532a8a1486d416cb9949ea6f5e043b7f66703f2aeb9d85dda03fdc48329232f05bdc710392de64e82e0370480004b89a07fe523756f5d1ea180773123c92250ea2548b1c9c8f3e9bc01aea7575bed02a8d1990630f0fd5688876f6fc4231120ab9064ad0c263a1b366238e9a27989389ed087a653ececdda4e70e4d0878f12e280c11e29a4acb691b82bffe14df19fef18bb702f7abdddb237bf42ab670071bbf39d313bdf39c101e955079ef603f6654fe2043de76fb4c5023cd4388c41c45ba41162ba9a45e23550d29a2ff8809d98fdbfcb6bc23b8b4bfe0d944c13c51735756ae3a933164709348be8714c712c6d807b028ed4b48312ae91b98e386a7fa0dd8b5795a216cdc6e98f95c8d113c8cfc71ad4d653ae278177c39910187eb8139d9153c1cd56c38dc913715caa21ecf6dffb26504df10745299b6a5ab46a55d8c0cd5554eb4ee3a0e4bb494a68b407dbb23ae7a23c681f2fa71b002cae0251eb7549f7f84dd7903507abe77cae8351dfffb5a7092db274ae573c8b8092fca9eebb48935ec0a1a152fcc716afb23483a7af1e4fec1131bf420ac693e341d236e001a4c19342b10e3a0a2812e75d575dd6d92f4163940c953ecd6b8b9a918e7485e17366ab015ca65eceb4bcb5612b7682be44c620801c894db5b333cb12658ca75c721919fded5b9c1de2fb758e901956cb29201c901f7241551d87d53a6a6004c94966899f3f028d170fda5b4c001990ba26c814207972481b50d9144612dfa4f2ddae8b1d4db950e80caecd06373ad75d9ce0b9733d7cf81e6f8f2c4dad2f5adea9b98d30c99ddb8977b5a05ba9c9a71c13a17c088189473edc9011e73c6f130b14267f617e458a71c7a02d214bee65a173e5dacf700bde0d7456ececc79c6be847114b076286243b37afb283dde53a6ce9897158229f8047f6627a2bec2d0a2277bdb87c7272e731e9ab12a9aaaf2219a7546d1ba9811b2aefed336dd34de274070f5951898a4f0dd769b96ef177848703a8695359da0830cd8fc19381a880fb1fdb135fd4101ea0e1296c38c52db427f96405c9b1818e4a59cb217b247bed9cc40578f281262238e40b37930d1663dd51c7ac86eefc9e12ad6277b8512d952fea7ee450d92ae339eec48081e743a184c638b6601878212a07942c0ce0895344af91f36b5dd4c8a8d36967d0a09df6ef3602014e7f301fbe84396243227bf7188aa2a9c26306d75d8b641ada1a39d070735f6c8732b53a6dced0a4794f1c808df1554b786196ce792bc60e8b6fc2544c5237551adc60e0056da5c356fac62684d8ea3158dcf78e26b82fb425498bfda6b509abea485994050664e7059dcd04ce5976d0db28839e82896d99419e60926ec730aebcd1222f27407ceb49bcf692be4ae25e711d5459bd22729440a301d70450d7d80b2aa92a2a922d50c2911532a8ad85167073bbf3ee7d887b0f809433e876483436972fc32e0c91ed5e775811a67c733c0d95e288f9d2fad0b4425961a642fd42354b5df11436182a4636a47fa52c42c838155b26bf78240f43c43e128682ecbd4dcb42259a5a2b0a322ee0666602d34c246d8f900dcd9cbe880fa7c2781f769b1ba76e8de16b3fd2a69cfa704582e03aca8f7104b918ef29bd5b0d52de34ca83d2b18c9cc95cbafedda48024c41e1c9c432b89d14bee451711d516a9892a7343478764ed64a281ad5718330b5f31bfdf015e11ce84fc70c04cca0611a078bc2aeae3e62455835735c886539ca1f51bde2bb1b0c0746be8b5b9beea72b57df228a2fa52b8a381936968c040e5f1370c9c712f52020525b49b3f0ff8b62e5f19a1dc1f11a32d3d2221ad5eb490387dae7825a3f90dbd701d6a347b34dc3d85eb02204b5bc27f88387dfd4f79e86e7d8208115dd3de9b94727be2a619b1cd248296561d82f8a5463bafc1c9a4a366004b985b2d1cac1ec09e7345d93b0808203c18948473e54065c6b56d2b41278f801c3f1e176e942654986be4d29c9502305e847a15c7218d1ea7416833088b5c5dcfb91ef237f610a254e3eb576809ec515cfd7cd40cbfe04b21e43e523e096d4daa4cac6673591c11188152ce82405184e0a4ab26d89cd88b1f9c16ef207fe2cb8037185b5747d1c61b2893bc9fd9af746247a8450e3c3e57e1977329f4c648d0c8dcc988d3e978424d804423d298f591e5e11cb3688c96edcf07f79700e3d4f2b9ba1f2a3e714a09eb38af5a69e18e31de20c5c8579b5c33d1d7207c2957e9cc0d9eac8028898a4c0a7cd5318a1687b6633751943f7be648b41b7e9755ff2adb4e1b06035c78128fba018d5ae94f1294f1f2ac364886b4aad77a7001153f68359953cf9b78d58220e20a76648f6da1455f71aa53178ab97aae4eb3e8df24180553dad93ccee3bc4a7541fb1dc57f23424f2e804d59ba6fd8c2724e85d21d9a87b0974115f5192b7ec0d905de6bd50c83e2476fc8cfebb43d0e5d4402b9070ff2237ffc3f86a038fbf9c242f46cb61fd8050d3fcaec622afeac2c38e66cdcb39f80563ab51f67c380b6e355c86aaebac0172160c4f00f31d1e0f01add7017477ac78d5eba9075cbe6a98b4a19f03aae0955be6f0aeb21339584346d17b4f98c04ce6003cce100bdd6eb1336c1aaba7ea25b9f048e4fe5ef0fe13ef0f4443143eb1c6f873cb32c5429572b4f5e5b4f24756a4eeae51f82a2b2c0195896ecee68d54d0005e62f0869c24b3751a2fac18e4eac5f7ae69eff207c04f30793012184536070c9acbf498bb4617035f68abb7153a99170af5aeab7184d14b461f807407d9d8d93e36c80d866437ff4ac723669c41cbff9c9f2ffd63c4ea036167509b79f50d316dd62f0c08920175e3df1c86009eae810156d4577f24475eb730cbf43e68282c856cf89000d084d9c14217a46f114e9e36f4ad4ee48e1bbdaa0c04343450a830083a636ddcffe30c91831f05a9198fa5d8582401ac1f46f8489ecd1c64ac06f54b5cf7ec19121f0682fd7f09380f071294fd12af06d8b187d864949332afbcec609f103498cf5c505de0fcd6342bc5121063359d1236b5f5a7857bb228e21131199f02a303453e7f438e0e7408168403c34340816077d713cc608b00ddc908707e2b0d74c2883dc694b8a8a3dc8739f5e532b211970b8f19b85e740f0034142b03a5a80652290362f6ee91719230e6f812847acd3291f03dfc309e609931df0baf754546ffc4826fced50f22ba8c49f6a2a411fb36f01e10d3d097627c12c4a355eaf598da6cdbcacc71442e111c8e91d07c64c506af11078a576ac808f2b28ef21db216fee52dbb0f75cffa3f08d53fb347cb809c37699813b6f395b555bc19c0f99ea0c50a653672c98e30a0f5f28b3ac27de04121b6b8ce2183d4454f4d0631a95f1f0484c1baeddc6320f400f95410aa12d36c302010b75129516b96b8473533e8d2b157e0d28d1c04a13e2e984d22be5406921dcbab782ed286f18f4118fe8ffb5d186b1c5afbf99f05ff75811ea7e6f2592e882dbab6024eb182e143fe406d7cc0c78818872806aeeb40ff6cd97636eb1d421f4785f5642b33c1e32c86024f556c3bbde9c8648a7fcc77a55c3b440c10db2f929bc1342c5457e0ab7408302292f0ef60e85d541ad3f9c18e4de440200df44069610e8fc04436deb94c8277d2164135721223020f278a3e383700053d8d1b788d917c2663fab57848370fd95460dbaa626bd393185dcc7fbbd84a2a239d8b90891d5977b825ba0c21ef9978219c6bf67a4c7279090262a27ec9f7338c66578369db009959947d69e6316c0fe2bfd107c79379762ba3bdfca653f64b52c4fc5c2fa3efdf9bce9c090cfd02f24af3f5641626adf6341f51678197d4afd578d339eb41f04dfb20915fd62258757ca367e957caeec23863b960609c0499a67fe76f651e8c990a8179c7b4ec30e86e6d7b5c40882c3fab28fc6a480518d17797de4bd1be050aa63e115fc404a9425960ffc74c82dcfb38de69271778d8463b471ea68d6551de791354d9c703014cc9eac0f7c84596ad856c380f4dc53ba58b6680c2d001fb2f6b7be2d9fd30edf8c1d1720b02b062de9896c3295e082d7348f050d51bedc14b96401c258ae235370efdd520a29c4dcb3a4ba4a408419e3d5d0239f6be64b0c2fbea09cec02af9b87665d3eb3e5a11b09b7e2b731608a88ba510eac3b4553ccc1eb85de6d2bbcfcc444f00428178d6ec8aecc39cbfa22caf43320d8d8a2864a13ada09c38c1fe627e00bd3a1e80b02b04691946cd05fdb4d07815f46e6008113c00383aeca5fe5358bd2b10b950b6f2c14e26b22c9d780f7c58a3b035651c23c10eae0849210ab72495910799d900d9e78e7efc31287ef04d3007a4bb53a0840bdde2279d4ca961a064086f251d3fefb747677db81343de0bef0e465899a22aa68d1a5e648a2d43d8a5bb95a38f0b6a5ae99c80bb91dacb96237955ca0255c8e075314af2c2eb38e9dba6fe644ec819c14c7a9d373942e3cd7234fef6eb62ac7110d22e1c2a57f14f5c377821e859d2a6c8323b38a87a8ba5dd166777ef9d192fbc950c749b1d1a5be263a05ee8fb0b0caecfd4a3856108dfdd0d788074006f244e8a2ea2e19c51405fca6b7b3daf00c6bcb904ba589e39d0d5ca2a7a40926f0d5eadad7c289b012ca0977ee07d6b51ae603dbb047b6534a193c349b3d2a497143a685e45affe201e16977f91a2fa62dce471653dc1894966cb6245ac32dd171217d9918f72a9282c097e0e545c452e387501c1ce77614c9f0f63855ba8d7206658d5a0968b6dd312e5d80ee09b4fd5f673e792b566e6b98da939a56244d76d4cf98b028f3db3ce1210e4af1f4688afab4407651e19ef75fdd4bd2e8eefc4d5635fa1dd3f8aee6d608502db1e63b7499d9dd14b9730fdea08b565f4d9781bc7ab8c1b50d08fd6088d705a5d8261d72eff540fe6a675751cc9272055171186003c629a9921ccaa7dd0de7e092a2da4bc741b84412833c90ff149bdd44338d9172e1a5d6e1853622bc6fc5072936d66140343dff850f54391885c98cfe464122d3b20dff3aa130ee12265f5360a1aaaa9704de1d276074153a643a9f03161c062d9af66c64f8d2696429e5e14fad23fdf8c116a7dc183cba400626c1b9e089b980fc02208351e60b95981b677bb203c9be0fa2128b5b260b5e7905bfba1221990904d7432d6913a22bfc861899a515dacb8b3e6327c9f89eea2ba2efff70aa47e9e62644b4247484955c05369b3ed395248bae8aca13555efa148b24e35af0058542386bb2d76eada065970e01c49f932f1ec4e2ac61459e8f2f8a4f715380dff02658e807a647ce1875b2b5e0b6d8453b3e7fc828b3d2f9cc9582e2ba288eb5f7e6a72d225c30a46bc72461cc440f33ba4afe69c130141087389a4d8c263461e4b2a5995f5b5993d6362e431f09d7e3b315ad6951098b0c8454f8aca82120497ad786605208a68c86fc1c40b89aea6b54d98168686ebbddae8ea27fc00c099f22b0c44748d6ac7ccb58f43811621e6a0a85b0aa2374226607961453687952c88d8b70a9163515a0bc2e213b72def7a94cd152b6170db16dc5b6b5948d151763af4ba4acb4dbe84da5cbe71b37cdf7bdcf371048e42ef4b07a72083e06e3924d0835c16cd717632f13f92db485b6443892fe598c9b8dbe1ddde4cd82364d9f35ed9dade2b99407677a42fd8231a6fa35e1e447a31c04aae501e3ca37415ba441541168859b9ace0c5811571eb439443186ab684341e0bcf8ad4333ab9900a43c972b20f4da6de1f3af86de17075f676e65ac0528ae9dfff4bbf8e10e50b2d6e1276508cdaad49cdb8d1281f0c0c1f4f396fb714d3f5f547649e516fe6ab86853781ce2e7ae05d2a4100f76054dc1c22f814063e786ccd7d910ce3bf203458ead67bb99e2c4ee7ae14c8ec2b9bc45865f8a08c3de253ebf02e709cf852be00c7a4074346de7063b7dc60ed09c0082fa7eb6c0e2884addaacde7b9582340f1cf815e2646f8f6745bfb4070a82973bedbc4834f37c51fa2b8381a3b401057433bdf4019840962a96a1d77b3721b02c900dbe572f0e83ef60ba5dd5ee461b3256ad719b0b9790ac8fdb64253d47c11bb893f7698386baf440674c060fc11f870c048c5c16c7c2f28624f6f27e2b3d4c00507d536f079c9d6572726f3064378fe89100d51fa779cc28db7b3ee8c6cfc0192fe0716c888b46637992920be8ba9ffa259866d27de3fb9f8f237866a6f03545474ace6fae82ce727ace2bbd219ffa5cbbdcd44d9380675a26e8a9ff1ef993dcc3bf5e19e0c5c53e64514caa7f396a2efa84b3710a9febf611b14cdd41bf63eb79ea3121b2bc6c3633a8eff82c4f7da1b4d6a020c5af387a9d2f00541afd11e652ac432b59409f45b8c2b38e466e0a33f644111b64235b661d109941d8fc9017d565c0f3bd80ba722969441b9bb218dbf6ba37364605ae5b8438f11e49de68a2cfae6c83c1364ce12b8ffe1e47f4453eb1d4533938ba72a9e8e0183bf0785efbf748eb2aaefb343119cbf6fb5c27f32fbf592a31ae67dd2205e6d926e30911bfa1bba6cb22c44aff642d9ed1d636959b87f8ab6bf10e12b2f6eb45b015775aba84eec7c56e3d7deb2eb689f51cfce2f6c8ee77c4a1298ef8eb653f4dfa778c6cf7f50d51fbc92aa84658b97e7218f4977508a100fcfaee4834d46bc03b61f1e08df544418df31ed10fd5cbd621af76fef119d7a8887a1640b0825de028c295c24ce57a890cfb1f233d0ff9afef1958bf7253c830e9378921d911b76ee0f34bc6b7eae6c437a228a4c95fc513d83fc8b343c607f79d75ec73fdf30fb091c2baee1bebce0a6efc6354d2f4436a7c7492fd5504350fba0e3a52a0ae529f0fde1710786ba5730b565f5fa302dc35c578add5291c3b9ac91789731f26b0525aa3a752b845babcbcafc98cb9da6139009e572aaa06720e0728530be8996fa1880eec58b3c405f3aa97e8d54640e37dd036c999d42d7d4d5e76888b195b431086379f9763138e02501557722edb0501327805ed71c2c4df2cf229ccc12d9aba860d79cbf14210c18063967443257d3badfcaae2ce5aaf2f944b822fb28e5a949d66e1cede5d99bb461875c847c928b8bb488f74b2d517f2283a595017b10eaf1272460c27af9e7f4d4d05ae057d84028a7f22115df635ed374fff6d56f5bd08ebb7df676fd920511721258e657dc366e76887141cd0c974674d97a85866de529c12dd7daf8a5b9773c4f7003f98ca88e8810cc2b55155062c0342b7e7afdeb3faa968df8b98a130e82b30b647251ce5af79a05acef2d46f807a2da070d06372e535c329172f1d4d90cee2f825e97bde04852247938488bfb3d6726b58072b76efea2ed8aac45bf617f520b7a3086f947a9771ea910fdecc92b8874a6539227e0a2a3df1317b919b02880815cf4663b47d5c5840a84ee92c7cfde56d3524529a8dbe392bbc5e855f31e107a117918f9412ab8de8d337af180bd6a4bfa82c38f58d8eb46553b202c035fa841dc94c4e7762f9bfb011f7fe2003cb2cc7bfbcce14182b1cfb3ac393f9fba5d5ac27e6d5f80e96f4bfd73899fe17045dfcba447c04de369969462bb4a56acaef3bfe3ff7d4e1f7feb223d6a940912b84f010c08000282dcf20b5f5a99c3c00e938d4146c1da8c35120488db8201ce5ab949437fb46e4049ec774f9a5c08b8b76bc87c087ee04374cb6ff76a1b00fb3e3468b41c4a3e3792a7e5d3133e0fc599fb6030e465f54e7098c371cef82b1a9529394412988b0fc96826f614a1e95e7967e26982c310523d4f2f122a027c24715db5423659d67f692710866f6a4953e2dd90a63925e075f79ef10c277961695b0db64c2098ac397d7c45f83840268e98d00af2c3971b5e98662ad3c525e5d784bfd9ddccfdbb3c2faae25e77a727089fe37f2d5380f3df0cdded4f8b6f182dc8855b39bd20da32737f0fd4085ca6d7c6ff8428eb9cba943cbe801b32953832993ea19ccd97b34a6da33181ca69b2edb606febd118dd914c6f858e69138a37781a17188aaf52631d6c567d77484a9aa8cc284006a7e32ad1694ba9d8902742682da80e97b78262b2a0940e77f7bdd2d5582c95c5b1a8b6d540b11029e071669319eb7e377a8badd8a93e29f032d4a1450a8f8331d97770975c589617141bb00b64ae36f50aed6574d7efcd9f6ea18c0eb22d4101510c962a7406f3a743cf9dc3b28a8a409b2394658a6a8ce087aaa6d2135a711f1f5f906f99f8a59b9491dd3ebf41ada652e9eda9dc8ae0b7a790f473cd92ccfa1bc0a2593bca6f5e9d82cb77aa026b8bd0e7fdecfe6e7a8362a9bcc6481e7c7c06dd2b1b979fb2e688edfa2d669adaf2694b345d1c0420f63efe39a14f760bad0835f7628c36677ba6973e4a3d8ec4b6d113995e9a51c62d1e80a15cb451cdcc39b19da32cd86090b45fda6164280d7d8fb2c0af89f21e654789c5e78e53fab7ae8c53b30f6a7dcd602b9161c1a12dd45b613978ed600b5dd792338962d8cd88e450c0e87c0330473da7cd227436fa3f9143a7f6d8dae3949daa004aa34ab6788ad11e05beb5566cf4167e4c094c380998861a7d664bc448022c6120e30d600950bf328e8d717ffe885410932d0c73b537baea0969699d27a88c412c7a0565fbc2dbe56b21d1e9988a044cb631375646bfeb1a29a60a6dd3f3c0d4a5970aed62bea6efc993e26ed854398e75d7e7e44d6518f556258fd1ac76a44481162245dbe53c759392edc86dccd4445e68b122aa487e316cec0ac23dcbb85fc12986d49368fe67385ab00958088ae122df96591d7ca6eeda8defb262bc446a08167d552c430b1a007c7cee3632dfe7e6c6d223379b03aca3a4eda4630635e13ebf85576200a6cc0778a6cbb4b17921ff8a88209d3ec4a106268715f463dedb313ee0c04d078a807a07478559b7778e35b57ad1af35db95f87b1f45b61eb5e0ef3d16b9b8a815ad42fc652fe0de463cb7a4a5cc43c6d2c0784550c138d5e3970fda12c966dff9c7f3bc9469d7b9e102ad52db75b2664f376ffe2e9da7127befc91ce78e31d0553e81fe5bc4aff6ea82d83e173b3c8c92e41b4ecf468098a50c8aac7bbef8a1f50c728e82d96a03edae0c1cfc77e9df7986a3494c7297b352d415955548c4f214afe114bdd931758318a3478291276102688c6582244d531cb06126239d20c137b2d90ab1a440241fab6a690400a8a6ea80113b2489e68dd0f547b324a05bdcbf8a192dcd57722b71da40867ce4f8834579f0ce8a870f6a6b4a74fe5c227e1ca42b3ae220577098344321a59ff0b1c6bb80f9992d6555c9480be681dd0bfee3e942932bc71f1de77ef65917de1da89b84299c53a2f07c40cb61527cbc1f42d34565d08dca3a75d50a9ee215e0502ed2dc20c7c54fac1821ae3a8d6f959cd74f260266d05f43b77da84d41b6ba5841810ea97829386e8011825130aa6075a5c97910ed9bc9c11cdc46d821a51ee0bfea86d8317d9df110553a0b822e2d78f056e293ee63ae779d9bd4b0d6c210073a473fb7d1800feeceb3553c8f24bfa9fd96562dfc34f7f9bb27644ffdb51cd2ae8d92a5408ecbf0eb6af4661b351d0a764bf11da75886e49c2f21958da5143b1df7fa13077434ae545a0fc8822fc07f75d403a21083b84bdf2817b5582f8f13cc7d14f853878cdada202487c6bc5869e722cb5e37591a3201e96fa4337d28e0cd0289c2409b387e1ed92347d09085cd9bbab97ab650cd9c0270a1b6b3efcf306d41089d853b8aea0003111cf72e9a7a7e9d95d7a8138517d6730e740d9644d5f7c7ec25488d71709f99d3305a316cfa69c831704af9e81fd1330588f53fff3dd32e566e47abab17b0a86bffaf6f4ce3a6e2a953efa89dc6c02d5850637aa9ae8225f3723b8bbdcec05b2966d4ff5c5162951b4da24454663489d253f9682254926581703139c84845225172672abe99f8e654f91118eea1065a5ebd86c1eeaa777948dfb387a99af16d789501d4c9f4f0b3857d4ef75f8e5b78c485500a01f73bc9e88f4b96bb25a108fb8424a49ad2e810f2eecef8683ab1f0a8873abdf2d242afac87598931daa75d3d7fe709ac056110a053d057af375714322c5dfd8099a0e9e79f20deb5c00a1fc22f7048089929563cb1d4ff555507249da7e9c303bd312d0e121cdab4db63a5359b2586649ff13196b3b23257b7a6411f58fcb562688c698391ed25649b43963d0863108a2cbab54f57a1f79b88616df9ea35aadf0bdaaad50dbe66383595e9999b20c898ea9aaab5127309bf1e7e96c7a97cd05d35285a49132ce66e8280407381b47141064c69c4fd1b083ae18381d361275533a103446dde681717b5ebbd5c150c833321ee8b2199a926cdc4209ab945ac0b922ffd8de3bfaddda5f2969af2d3f90354a5720664319d32e7b6a35ad6926bde4ae1528528e9f0f599160b0e4ca89f96e6a840beec7dcb11e57b3fd5d906659e7370ff860aad6ba1c4a6d690b6ba836cc744d0ade3bdd7059a12576f6b8ace74c0407104a353a9be98a8b8a48e9836b19de4a07c75758a0c73b03046921b55ad532a6df5b8f3041c16ed7f4a5f70fad5aab558d8f3f7af43617873703cf9d9854ff297259a9836a846be54b40d5f8c187d1074d0a7855c347d18b0655b27949330284c9c6ef984041b029cdd0eb91ed1855276272d953672f9cb8f17424c401377c622a4cace652ceba36d2ee81a6414e3927456fa84151ffd5f026f7137b92f886c458d79d4f3f72b7ccff155c15347e795859117c22cd44e705d20b128d85ce83648c38098433c45be2de2e4eaf644d4b5b067838fe57ff69dfce51dbf4360c19e90e5ceec6c044e38db0c0dc8e9b01ce4f0bfc5c9a3addf5f1047d2fd0b4495f1126c6990b865e759937643a35b5161216ef9d45f5533a4565c3212548948692fae0c827d175d7a488042a9921865f1f494224eaea5fa69e949a9ac23ddb743e230e93d61768d6ef062f5a6158ed9775336ac3ad2c6333aa21073f6446ed38b0599685200fb0db663666753402adbf057c570daad8c8550f9673eaae104b0306625d2782409cad601f7b74e0a8f9cb964829022c781a1bee49317483c8e2acb6fff67bf21d0b32612707c2cf4898035a94e8a14fba5c52fae18ea91386058ef7ad20513ec7061feebc49f9f2387cc45d9afbe320ab896fac66bf63b06d09e087ce6c59a2bb8bec9458f13405dd8c936d36bd7c774470e93441b1771e459c0d1a9eecfebe320f82c7c1bd65744ba9143c0c5a47c29e0cd9eca2ebe19372a323303a23c8b3b79305a34e4c1a0b5a40f3f8009eb16ba734a70131d1c5f6f4a06946d4a22c81b93799dea41a21afa47db29f30d7c430894b63cb3f8da20d2ad5f31287fdbc88cec245f7325796f520a09bd249277e5e276638c9eaaa1611876a7c30656618077a728a8b8a52c959bb5c363184078072bc1d17a8f592cc4046ea1a3fb2eba9564cd3928f76122d5b9534ef26e82f4e549f5560093daea4eb89b9d04f668f038563500ced419b3957d3ca5b24aacda8a0e7c57abbf11be2b22b5f39845824715b014e388ce9f6f2cd3eb75fa73fc5d4d3649f28122d6565ea21a1ccb272e1d72345c3a0f155697df4bc310e9c43c60d1742f13d6fbc1af0f0d6e438efd1b3b12a196068de9f27f849a395c75d838d75a26ff5eb4f1e09871da8164d3ec3dbe05f77843e8a1c03be4409e0e0b7af31b2a88576a3f16851c5ad18ffa381563249c18ee0a800a2d90ab15e1b9ba02d071f2cdeee6b4d67f3e877705f4057ac983dd3a40eb21040475e721295eb4021fe755617e1b2be9cd18898dc6f64cda94a0f75481e8d2792434a0fd10d1ea5c35341a4dd5d7a0dbb0a71bbbad7aceb2ff42778ca616f6c112f5ba83f4714e75393c2862233ee5a0ca4c2f8f06a5a429108db35a8230a952e451e358a238ce1aae9af258c4f50e2c1f1cf48a98472cd241d29ef248c16653372f1347104d7ea4c46ebc191a4e53606fbdce714275b76d890efd978b0b5ccc03de7fb7acd6fe1e11fa60a6060c936fa1ceb54ecfda0a975782807cc199c8a99b7985e5e50c165a61738cd7dcb8ccff3085ceff16a84ac4e41fd3c89fd1c58e65d078cb9b32f8aa8e48cda0d77068b9ebd150b7b657ff3297c06d8a7a2dddbd17e420cd82282da3386e9b6adc9018de5d7c68cb5696b1275d440986904a30a4928ccc0dfa11d88725cee739a127019e81f98cc81e76f602c551a0d6e8cf63918948a878659f8ede22ca38ce8c393011f558533df3412cf575cd7cf07bb8acc0d07160c21ed9df6926ced0ee0d334ce3dc29c130bf676f5205a08f970262d3804a8da5374301d53aa53b9a328208e5ddaf7e4c73a588a73e796783bb3ac618e4523d1821288ae2a28b4482d87dfeb1d7f0735424930763c3cf8f7276d80978209f39e9d6f3a649695ccad95a309d466ac5d13ed801e9ee12ff85ce570885928a29bfff2ea47633b933c16ed7aec3edcaae34af8916b18c2b38381647e06a74872d526bcc5bc85b5333beac7522c20de7dd8d666cdcb53bca2bde7d151a8a13dc2ea6cbf75b9ba7b1ae2235875a84717da79d90e35d485e3815762bfa93d1a996a10e4bead328551b41cf5daf7691a2fa6030e9beddff877d2613c09a095b003847555bd6b62bf7ddaea07b64444013e272befdd730ee9cf2183a9f99e060ee551cc71cb3b578b2f38e2d0169dd8ebacb3a4bbeb4ca40275bc23ae8e86423fae3999d37f08ad16581858e6c6e2ba6be850d7202cb25731cdb19fd370a5b087e5d800e7e43d07878ffc7fad8627ce3680bbdb49aca6b6974703d39cda41883fc5e2da08667563a9f1fbf3e9264257dbdfc80edab56037c1d0eab9b4b4955f3b8a53b4dce991e0ad6ed4e00e744b871aa25db60b6bb0a5079cb335a2ad810164996a9f94ea8728c1c01082d479dacf541a5f1af70672ddd157a6cb870ceb34b3e43748145bef3a48e4180c0659b3d73d81194ab751309dc3580e94027dd9e6a875632781d24a5e083c8335c0ec479e18401bf817caa9fbc22348aa4cbfa35fa3b03eebf23a5db02d4e2db1f9859c7e500a12f7d3eb0ec301577e52f03882ab153320610b3edd0bbf05908a10ca47d388aee06f4f3d0abaa723a13b989e3310ab12ec40710d2e80045412338665d881e055c66067a8b4cf4ae9ad0998a5e830b9e6cb212713fef5ffb340d3c39dce240f3c4c9bd33fa6b0e2d8e90ff3ed12db9d1c27143be8a9598b33f15426df27ec99f09a5bafdaac3c961aa16281e3571869e052e08d805b304f59aad9f07db75c93e6cbc6b697f332b604c22df4385267cfa49ba2a4c610e35a598e60c2dc9b905c89f528d0e83166d7cd03108c914232ab810a54d5adf2b39c41f922c7a2635baa613e424efd0bacd21227e0d47201d1b8b7a24c0a38d42f5f63be1ad9651674e6adb9d140932906e9667ada46b2931a6f3edafa7b92b25b598db046f131c3ada426bc474989d9eab98b9a00252add8aa8adbd841d27f1c716ccf71120bcc687b14b50f1b279517e31675d4648389ea1896775d870b62c10ef3a41bfd1176c2838d046fb82a72027cf59f1c364a043fa13a79a1256910052682828923cab1013a447363fd7a1a47e4540210f9712ed49b51057da3372aa12173648b23321b35e4ae8f06b1f0570dda9a1365407c46ca73e40cadd33dcc900d79ae3969a769c11f0abbd334a527833c02a29007bc92624ac2a6afa440d24cb22697273cf681915c5e1e1301e6654532ddc6ac00c8f8c5aae063388b07c78a4b2c8d7a386095066f361fa5a027bc10111cce752495c6076d7787987b2908d722e1c9f1ceb5c36eced18fc31e2ce65630acb8aca84d0aa759e79113431b850312a58f1cdf480aa75151381fddbf8c24d11accec1e06e1a7fd463b216d8d861146c658011f61018e06665a704a06529592742288e37b645a4266d50755359ab4ff9b9ee40675e9c7aaefc84d4454904d7462ca29889e685aeefcbd2d91b5927cc9811a8548f1c28eaa1fd52fec07028273540073a987a47b65e2342fd936bb7c012e26cbe49246e953c92fa91c2931895c5713b9e5a293ff93452c062e6960bf93319f49c71edfef334d115078e66b38b772d49f8b7338598c69db99fd7f620cf1057d2d2dbae8a92a167312d8f84f6353ff8629631d5b00ab98274342458bb3f06e3bbc52a76f59710e437f301868276c23136c1faf8d185a19368e22f084ebca23a40f3850165e8623724e2c7068522aae95fed3a8c4f652cb3c043d98e2aa8ea0d564d4457d4b532f9118a8c26fe02ec8316984955050332cfc7474df770671210e2b4a641efab66b5182142b49eeb594274139022537d0d093a24fcf5c550810daea6c78f3cea0d7c578f9f4f6753e4968325ddac3be3009a268605571153b727571d54303c9c1acb4d6a8b339d670ecd81b4961c7e10f05a207bf97f27a6a35e7179adc88ed40879bb4ab618fdab7b9d691313b81857438fb6dbe228aaca12e000f46ef0e3a9e909b347b1e51d4bf984620cec3fb425b2cce371651068bf59a2ee67075db271ba371dd374988e82ae8bac3b6c3ed5fb5f68e760d70442b6a2804fc7104953ae694a677ed580f8a2c81894b7c5a64def312bee92e6c20981401fdd6052dd487b70a3dab2186e576428d3de5396eecea1e95145e45ce6d2f9cd06e0000f6ef351383ffd480d3c73a38a9589ed7cf64b2f79c462f47f0cf88aacd877c5a91039e4ab0bd9ef335006a0a45f5c74ce3b8a370911baf5b2c5793e7cc9237ca4f4694da4c5715fa3e01ea7169fd69dec76e68b8e8c6e26eda2934d6bda30981bdaea30699d491a09454fffd5fdb366695846f350bc974300c5732fdd4170888b90bac847c5d581932935368964493a5e13f749a3566094d33ecc0e920cb730c0c0fcf3910e0c6bc84e9f28d712b2b586d4150795ebdceaecb17e435a87c3df2a98f93dcd56d351fcc1c18c19711d103f001e70c99ba81d2e82ab16b1dcbb3a76c02713b5cc52843c3d98d5e6a0939f5a414a7932caa97718db08285a9b0c449b2e7cacd77ac3163a6eecd9ecc8be1e9a6c2a8a6e8d6590ecd65d5723dd95b9292ed0b7e5da86d787a9a6f115cedb269f95c35abc2d9e3d3f5da209548cdd04ce4f5d4308ef1be33f78c7301793f88f45d250b188cd3ce1e06f607a6f4c728952db48b13e0c0dbd7962ab4c95d83ab0e99fd6aad327aeccaae2adf8928fbdaede78ac51230e1dbf8cd4dee8d72380cec273d36d0dd4b7cda225e72b6d9e098975afdf20c2eb7ce4077f55b8e4299af6f9112828f372d558674a60f3618926f09be24581081908bf8d7e02878922d4836bd2794148660d3428209522b86383bec4cae035c38f164ecbc83c0dd267c3341cc8966dca7301890f38158c92c197b6cab1096b745426e92e45dd7814b096c4743e794bff3b48acc912a568dc1efd6e6534e3ef76fc07625ddb6d623217b8a3bc29df8c968126164ba27fb9f89efed6b5932889b907ca5e003e8a612dc811fe2206803ed461c7fbb81b0dea4709f0f2963238a59052565e60dce8ca0c20e3f020b575476cd9cb033083e07239cf1276be988330ab9693cbb08b13545c6ea7bcd6cc31f3a18e71339a5ff266a4437fcab53a713e9e67b55a7dc06c59911f1d3a8f6559f8ed2e033fabaf4fca00c41464caa32aa7e8fc2ae347beb41d1f52b3e811e7787e7330766384d49755c8af9e3042a546dc8524776a5e67c82edd02ae5b0a00f97a089bf612df56b8ff5eb5c5d1ced596ce95100367e037b2c3c9a91220317f6f30a8d09e2dfb43ca7aabd2b1118d000afed11505968ada62bb895a350d14aff94b90f028e378c3b875c9d55b7e16643e7861b910c4dce27e1ea3836242f0609206791f6a61c40d719ef25c96988840c5afbef9c0f465ca4fb9bd98100f9204b08001e84dc0006051acf1620176748100596ee0601ef70420ef38fd032edb1d078e98a36d8becf0aaac4c56129296ded04f9ee5a362b2781fecdcac299912ba9fc310be03f51fcd4ca6c4417bbdf2e71efd56fa9303e559e7c59d5d1ee8604650dfaf0b944246141af9d673dec6a19ec4168638ab8fcf29396f12393a2a3ad1bc66dabc5bb927e98e7d8923e8eef128a0786b41acfadac4a0b829591dffa6e84d496f6ce71ee7d86b4f8608e5434f6f6cbe6e45916ac50b4346b912ffb8918a80c7a14965c3f580228004d75b3306ee2ff4af1821a835f06df922742af8219f2079703b48c871499182ca5789f3b1321c79f809b17db3c420ab46c260ce9df542a3e64348f84e0824e621e158489646c67d560035ed3f9ab8edf4fe0853f2064e4eefa0266e2575945db387783074c22a0d4bf6c2a537d8c3215ec23549937773b4cdfe784ff4f3250fa5cc81a6a9c725a8bbdabc253778e7149ce005975ba233315c5fa52001d10ab7bd3f08519d5b8a4091330615c96e285203c5104cb0494ddc96faf649217158e71c1f579ad1a2acd7ed3819bc7d6294b150f9fc0bab9ac653e8fd856e9749bc6e316c12d682a1ee73a7e16b2fb181b5108858b209b9e092cd3fc6d2edcec7ef0ca145f2239f882096aa7394d9435c05fb1df8f8f39ad4e45e7c15bd33b116d14bb29d652bf4f28ddf19cd8dac881d452ee16b225179591cad0a78c847d2a472c666cee1bec59509c5279b353c8e98968b8919af60d941a0c11c03d4d6b76fba1347c85cb4fbb90bc4f4497b7e2d494e2d30c05a8e5fd135b37556a3e372f1c41d9fbf055670747d13b0a592be968f0b492a287aece4c23da6e0ea6eb6aedfef4545017e3e46ee1c93b841edf9dc38088127941809a0484669a558d6310f529ea18023ccb4fe8f976c764b23ba50cba85b8781754ba52aad9a3844a2ab7895e258c776c97128ec5074c029f9ace1a820d6b0af5f2ea74cb06b8107c949e578ea9f07fea17d192e938d4a7a2f3adc56a5f5eb4030a8f444c5e76ca378a18fdf8d0befe35f65ca206d72c65c948a1a73f21867abe0f2df8bfdea4094b39bc61dc7571bea21031b88997b09a0c36cdc0214814ce17ce5be8e8112136c74e1c15bfdc85ab2df94bd4c214b07538cf21791e1a00b7b57be9f41a118c4aa348b86cc8be9b793b8103aa30e46e4c7ad533339b761b80df657e51d0fbe54c379a3acb973af1a2ed47bf71c63be6cc12db6200bff75ab440a2c6f7c1915777f937d3104f2e5beda8d37baac62b96b84fcca6906cde63b42bd71c8d2c3e8bda925bc8553d878362ddb1298f1348f86eaff21bc98f744685b548718b150703207112559c60618cd9d6270b692926e90a207310447a35fa828572de92a88f14ffce723aef9e7efee03332a52a2419581d5d42b15a3f41b548020b2296ec9687b7e19117ad9f835c8d111a495de68888945fa2a77a6ff7d4e47256ee3448c1e335879253efb7a62eb167d913b95dbf3480753df5173003ab6b2c7f51644945d0cbc6eb2a023617f36b57d00bcfc607c1f6fc7cd29b8644d12053f80b48bd427411248812314b9b2c8b18004d4cd2f719d61440604441707840fbe97f4aa4ba4a61d06c1c88a6c5fdd808c3e22f62fef30b5870b5eb9bf781525de773dbbde60ed24f1195a6e92b5e7a5dcf4f73964ebf034624e5199e8012867b675243a3779ea041eb9a9c0fcaf265f71d003c80ff782f058c8f77df5ba05dd30b0affee295930ffa6059bd3d72751e068927457f43e5f1a6b08b296950dc8088c370dae3f31aa48b91f906097ce3b01c2f14a164102fa6483c5130b8c04d60a4fccfcf73a798e6205dbdde4f8ba89e054167f5903525195063ff64e6f351e5a020f038bb856031226150331fddf1f9cc9a6cd862077244bf38a01f343d0022ba7fbd94920486303c91ae2a51de3788201b9111a3723ab77e17f3f9cdc18b28ad7ba1629ede814efe0a8121fce02c1c0485c3c3f1db5d0533515427c87ac023a6e526b564800f01026d986e7ba3a3e2a29d55580be2ef86fe79d7cdf09a6699423d4366333c407e623a45dc70ca9271683788909248f2c1494518da0a74dacb98d93b65551396facdc6b16be2c07dace04d014934f1018243dbf68ce830a0c0b42b3f5442654312bd462c2206aae97a989ac74d7d12dc86ce6760c352bbc43edbb63b66007dcd7a89e3f7090fe6ddb011b0bb748f070bf544567d4fa138a9bdf7a731892c251170497763c1c00b4721d093d3914ca4f25a53d7238b5a103e747903eda6a7b7d00979259dc28fa5188aee7749c79c220cf7c360fbb1d3902e36db40c33efdb39b067c9093862f3644d7d7f1a5d4ff55c3aeff4c132e0a921d9464c205a799f04785581afb6c51f016b7d557e2b00f83f98efebe56ba61b201e409175922fd430bb475d65ff8a800a597909194d1bf94b89254f9da9572b294fcb65ed527e390d86e105200317b5a38fc78fbe09503d1655c8d9d39c95cceaa3718fb2931508e9d41a52e4b1a42f13adafee5da3eb5c373dc290398f823e1826bb0ab6c3443f42411ffbd2a29cf4587e005a49422914ab57f8ba92d2a4f0ffca5ae1ba131c888fe0671abe03944a672cff7d70f76d409c9dc4bb67873d93a5e4c25c75d0a27f12689141a28c4589d015340c540a7934bf243e91048a0f19df95819485b838a9f3ce11cc7926c98ae6c131362cf26440b8f3572a138e5eab45884334e9ab4074d24d1f545f8ec05a620152f5abaa9dc7bf71ca3da2d074ccc78b43df0a75a4c15a9d80f066ac055b26d4d8ea430560ac402c15c9f745e62a8ee9bb862f564099fa0eeaf9e9eeb14a533a60312960e117ea5386578005e48a002c56496500b4c2bb36f36a667b84a3b191603442893d3a9983e01b41bde60897cdc6ff73e844a6f18af02fbeb398bf9426f765803bc053702793840d00b9bf1003cf24659383f9c3d6e1deac23a1a958442af39438606589139bd926b653e17d736a6496bebce95ac8bfbaaa9c7d26efb091e102dbdd7f78e97d2111af0eb9a4a6e4e8194498129034e8b526e49c4c3c8465255616757621b47ed4c98948633a9d5324c9f6ff3a0b9cf1ad28d42b460ab63c00624bec26987da2012f6dd2e1b16805cf45f6ed4e13e309c0ad44e88947acc3541df1205757501507f11f66a0d732ed0366f192fd5542996dee2bc95079db3a035252672e686cccb7b28c64afacab0d458bc3246c9fde8cf48ad491f08411ba408b6add5ab4b2f80f3969898064d8c37b460c694a2b727881fe5ac515a06c54c682fd9d18ab16384c77ebd61c68311c9a50413d6b5051d54e159a61d3a60a5036c535b9fa6b4429b73900ec084fdaba8b468c316e005aa5f29a059d0372e059288f9ca17f38c250123b56a3c91032bdfb481e64cfb639ff7fb8fd345435572e2add48ce2e180bddc4b8dcf430b0ee85f74f5d8cb991eb88bba12ea6d79c8ee4ffc501816ebd96c86e659aea483cea45be6edd0210d790e24f8650b965e1e39a1136138fb0ca045370d67326ab1d7be65f0f2b6fe7814807ea17fe0198f1127c1a0a9ff8cfab3c35815624fecc63938feda3254d318bd0a2cc277466974d6d3748560b994eab18de90618e453b35507c6343e1f378109f0e26edfa1337b2caa38727feea2cb014084187668d0c44256c0b67579d17be37c2d0053f5ccbfa6c1efc6af8d985680dc636e0b4d5dc524a473d6a5a499e5687ff91866382a9c04aaa524bb0fb48ed21c83575efc0f8a8a80b953cf4c2dc49ec3581e18e55a6f8024b88bd5426905eab6ef96d940d0fd2618af49c00095a57a7007a7900ad2ddf87118716bd2f6e0242d7cc4e08383a5554cb5adf52269713dc91cc44078e7d82daed1a09fd644800a5720467cec40ba99d7a0c7a479b528b440d64ba0357934d12e55d14c67003a2a5af585f5769552023920b06f345541a8df92f295a37e61b92574f6e36ec21d411f4dc98021df950e09735f420cbd5472a9e88183b3bb353b2d79df1a2b402fae67457e404ca2af61b3e00a3647d4f42e1acdf2d6da3f94e657075cec4d8d9055894bf321073f8296ae89eb5c782881d69e44c670f027ea1964679d0f0b8099dbc176a86f663fdd51e7579444b4d498355560b23b2c9aafd6615f852c78ab64ad4c810312c691cc631c4d3bad1c4e02576cb03c862c14b3e8f3d5b445f88af4a1fd2fe97443853e1f904c0d3747b058168e80f12edc383cdba76330fcf3e8f5c05a8acd11ceb24fcf804e86dfdb80f03fcaa7ef8ffec20f0411fd7da2b38eae7cc2bcf91612ec11f8c65bafbfcfba142bad03e45ef96aba001618eb0a426343ff8bb4c290f71d43da02ca28dbdf4a28a65196f0c5eb54301f409dcf58d770c4ec1ee2d6997c5b5a66a53e32a68dffc4fb89721568d70bed68416e29c92732ffd5da4c8541b27a0c51d4e373ca90fc726db4daa099b53ae5e618c99a16362ea98cc600977c78a9787402eb05b97b9196f0aa9da5aaa3bc91841b42e1ea8cfe8c4e283260cb6afc283bce209d6c81dde8d9cab05615cd7acea9a7ec880bcb0d0e7b74b97dd94b0c91007da703b07c38caa63adc7f9d57e67ff20a6904e08e9c119d9683387fe4015c0242aba057a911e9e70c6e5ed9afe73dd2b3dfb5ae29d4b06976ba005064fa379ca8a1a11eb3de1342bbd7d5aa32419e885b4d244748117b42bce39f83092dfecdbe2b755df8c09976ec5d25b98c2ac053682d7e41f0b85981eda679699e1fb588b4e49107132aeaf538fe9e7e5231d12471107e8839d7d8f170c67ee63c69e8d33d46edefdaa93b1f8f1b4c4a6463c0bc428a235e7a822ecf471e2172c2c04e570801e38a5152a1839c8e50f2201302b01527a64f523feb1ef901243765fea6a5ad639bf8d27738956e8480e61e0c607abddc01ef320bc0148e053c405535f38b9619b9a2ff05e5e061308cb1da54d585bd244c9c95af894b714a14e7c58ce9d5340df0108e4d888f6df3fb1b58fc0fd67e734b40e1dcb770521b5103a96a23108c8cbbdcf308730e7044ffa3efa2010f5010205870a5f9b4ca3655aeb2dce46bd4b922f352b6c934489a40ad9567a022fea884c963a7716e660eda171ba5d6c8bed49aa37ac353a26da0d48b385f1b71c68b1b5d84b1f93fd22941f8c1b6be92a30017a286d4f0e5c566959de19b8c37883822db147d7a881efca2c596b6315a2407eb938d82d2c4558e93156dbfc8bd432b8703f37a47b6036151627a42d5d75b072551696aa85a1d202c245da9640f9a19616c429e338177b23a4e00868db1ba8627aab4d52b80ff37f4c6fbe0593bf66f4e2d8af4fa1bcbd87365a546e6cd7cd3b44cd61b173f09eb419eccbea79fa5914caad46288325085b267597374be920af940dcd06105f2681ee5f90b53e6416e3551cf39d803a8fe4eded6a325941bd1db425b114386aab4ef782a491b94735e15302ffc5f98e148b9e6e3583828ccbafa0b4ffc380852fc879554674e6caf8c75f79e260a41961408e1951ee083cbc1487ec298f69db8a15bbaddee517ebccfc42fe8375d4af9ee07e3a1e8639113d20dd2de8e8fecedee5a5dcb54e345c797b5f86d1aff1875cd076b1e8f0e45f19581aa86d9a40e4180fa97e2ace6eac9a0449949b54fd198e1411b62487210cb80c58ac50852fac410a53f61103206559b968c9afaf60350d55add5e3f61aa5ed2b048eb1bca44eb2ed44b8bed1e8d5c8ae6b67f52505261ccc1ffc2c68dc06397fb15670eda9556095f4d5e2dad7e93be3f4c6cabd75856cdc7b45ed5eea832dbe47bed9e384a5a94bfaf14ddd834fdd8018f872005a7f2e20c2d64b747bd7d8d5be6b891d0ccb30ed73d867929447a3e3f81c727eb5098a38c081e8cb6dc36864e7af47a762615ab8428195d348ca7dfb505be0c402e0e1300bdf41d48e78c6e12f096e794915fe5dc0109a27dcafd29b11a46b42fac0b02de72675d2783f535cd16d28d8027ba9bc85b6f6ac2152e13545ef1d03210204601ca70596139c35fd2c80f7709f48d85ac42e4c70da65ed030d3012d3089db2a9a6b407b3b4c58a45db66c0c50f4a5b4e1cde16abe0b8e0858109513d54edbee7b9d9c30d27021bd7361099909e66a5ee21732f4d61d7ab4dead5353453ac3f0db10f9d0d4007c14ef31bb042361a8f05ccf3836aff34d00ac532b95981a6ffc88109fabe19664511dce40237e475a0f9bc41f59e7e227c17fc1321af1c1c361531160142527f22ac4005862820d3da037ddd8cc5506b1b0d8f3752ea5c700432407b01aad334a9dab534048136b0af16304d0b2613042fed603c42c9c1a6d03cda570135905932fb6eaf334bb66c0b7d22a260f1471c763ce718bb25a212fa6f19822dd6419fe09bb2bfd12538531bd2d5f9e3100784496b37675c750ed9ec4a7d671f978b624859b97706cbf90ecedae6334c08742eb8471c03478d2151394cad0e1e4e28e18622f5e17b3cb01cad31a42ca5cc09a1dc2dd4d519b0a924db51a06605c9c5165d8bcf1baad636198cf629d757add24caa53c897a70bb3ced23a19926ca4df8addc1bc983f319b56971714cf5555b4a93a32cc8c72df886d14f2286663594f5fac8831081612176e56237f1fe7aa41ee7f9dc25104ae9059caafdc625c7f96b332b2265c0535b538525fada061816349c0fbcd2d47db1fe6b6679235f7dd948ca3a4be46da24fd27f6d3e8e741aa791068d19de9e6468d44701dd8ce91dc25da7520ca655c4300599abe96c52e7c08eeeb7e215fcecdf405637f93258a74c2c221d29d1ebed13a493924967c64723f88272b7c844d37a59af6b3cf7e1d729a51a640a9fc3a61308e51ffcbaa59f153daf2a598afcd8f67ae37a3c6999ebeab230fe99a2a0e5edb183230f6015c1c344b72e295539e5e6392d1a28aabb684ce5efc6b29b47fbb4b54c09619e5cf3c248c7ea6da52bc357e30785445f8c840bfc529cddf9ac8ceb5c1519aab5bff40bded48c8d6ec61ae42e4ebcd85cb863f3a14f838cf815c4d02324a726693512cb8ad68697a7f0d08d6134d3525882290003442fbf17e2d2b1d83f7803fac7aa6af35002ba3cc524d23ceda762f4401591184dd30f1865fcc4607fa0d555ed03c6a1e8a7c5c75af28315b2810d7e55dc8812b5df9e0bc7572d4fed371631ede503fd44a50b06ff655095bdefa96eb0d455761039d8d789bb38e46db7e26720b7d61bf64a1d164847781ce3501ca5ceff69489f11492e68407eb0d2ce333bc074e64e235983119e32037ecd9f1b59b6b67556822b98358d39ec724db1c3eab9226ea38a8357b70e3ba2d5b3cae4d42d1422c299989b66369644e346adf6d510af172fea164444e34ac8c57ca47ffe7212ca98562f6b84cec1bbb8e61825a8975ca2a15e93576f2924e151160786954acb27d1168924a7eec93c7f2c2fbc3f96392087444603e6c8aec9f78281e3338058d9d04db2cf26b7ef6d54b8af0ebac77adca7e02bea1b179020060894c218927704724437f1145f800d80e149a03cae94e975930ce3a6ac68acf33641a797a4bd2307c8325f089262e0604aef1090e60e713dbb06140c791e2bf78e4f629d733367c52c72a0882c86e4cc501a2ee8b76ab5f6b8e2edd178b5c2ed4a3fdd6f65beb46424b5676776f29a594329e08280a740973ae91c7ae9b698cc8f4b35629d6bffe559f596e54356b98a147e0949a4c5fab94df1acc5bffaacff52c5451a5d2748032c62c91031b574441638f41634c1c4fbc8c21060e1dd6a801e5431729c08cf1050a1120192e763822a9082a5ac6ac818394524a39ed992cdf43a7a4a17f9571c30ad9c51026e4c0040834d878e114061a65c091a608316d9cd6a4c132679436640d5cf27357b9c197266b6cc1e24b0d485cf0c413356820997104860f35830c9211409ce1e20a377c040085923069aef090c51aa824f96b6099731fe0f26012ed79b9ada40752e95f99d6aa0ecd2814544aa1cce9f2992f52795cb29eea12d057faaa5db2de6ae923b26e593b3f3b40b4ac3a4c28c073cbca7325c63651dbe8f576ec1a762a6a5507c3bc4d8825e79e1e776bb5f10379ed526ff75ebeaf9af7fbee754f2ff5c8e230fa2a76c7c4f1c81eed85587bdbd8b953d17b27d66fe258021750ae7a146281730bb1b64c888577d0e4b9b34b997d7a22781b5051569d6ddbb677a25675b64cda2f76f61eea81fc02c3300e1339aede3b11faaede5342df7d84b9b5dbec5ad62529c398bbb6baea86d5fa49fb772dbc27829af616f85dd3ee799e87d20e2002afdd7b4a1cf3e56d8ed244cde63d54fbeebd86a391ad8159cb5ad6723e883af80f95c18f46f6f7efda987f359b7fe2f83dd49b4cfeb4cd351d6473940e6a5d1bba9f1ebadb467badcb9f585aeb66757b4d8f98c502c1d56a05ae6ea77d57fb5657fbb2c7711ce7799ae7d97bdf344fdbae2581ba3bd5ae7910ccb2cf6759e665d9b950a3c4f11bf52c8e4676f63c3deed89e0e1d3972e0e0b85c3737ad168bb55ad9d8a854a9140a753a8561ce20f87d9ed7751873dcb6d95cca20a954b6bddf5cca20a98f7783377ac4b677d65ba2943e582a70a5479bf22ee58fd43d3d9e447cd4b3787f12c7a11b8a23ccfddd6699f6bcfc0a3eebf11ba41b14477cecddc76f0eeba1bb399d5d3ecb1b69cd1413d386ec567a827c9f516aa9a516d3466b456aa9a5464c4c484d496694e86bc7524ac5ec1803ee15a1eeeb0109d6ac59a3b4ade8819d6da5521753206d026cb93485119612c3e43fbfaf951a77f5a871f5627a34b287eed8b347f9a14bff9168d3571d68530d29260ac6cc40ee268b7f14650f26dede55d7eade5b374771cf98134f07c5596fa61e45f81ee1669f86e473dc4171fc0641104c690710ed13f7097257896378fbd5539cc8adde433307fe9e9ecf899827040cc38f7973a176398068879fa9cf671010ed940ec18e1dead1c8cecfe7de5339710c9fad9e4f7ae8ded5391db47a4a07dd84e2d0dddce7ddae8337b747b5ea8d8b75cc6bb5e6b1c962b1260bcbc06c3e1f6461cf66a8476c825d778c76e7c46e7618c3303ef71f45d9e5c1ce9f3aa8fbf6efd303eabe696e77415d9e9e90dae12c562cf1eda477d223d13e3d258edfa987e268648720a8c71d1bfcbc6aea71870e1d3972e0e0b85c3737ad168bb55ad9d8a854a9140a753a8561ce20f87d9ed7751873dcb6ad567ad43678d56d44cde663b6c1bb2e6510d5c7bb5767b9f4886df0addf8852fa68d9882c6d63a355e0a5fca13a08ea11a5d2a3f7947d28664789e3d03d8923cc9d6f3d20baf3a7e741fdf64d8fddf3b3084ecf01443987afde8fdca11ebf27dd531cbd6ba7f947eedd94bf3f500775a3a787eeeef4769bf7f8d1c8b697690fd95da3b899362da8b5d65a9f437f60afaf4aa948353a767bdbb88f76d31a868d4037f580eaa079faaa54edddb6e3d5b951dbadb7bab38ebac9e7701655ff4490e39eaab5d65a6bad5575303cc83de77f5fa881f0f79e9a457c95387a97ef1e661173e2988ff3bf5bd5b967712461e763e1393dba8678c7dc413dba420d84c17bc7b8abf42693390d0ee98e7550f75007a5ce81e298f510dd9dfe5297bf4171a71e504a5bfa6ae95f140afc054fb739dde66403da70a24dfe876bddf9dfc9e6d7e61cf88cf5786db883dcca46af7e577a9c9b03410e3cc8fd1ebcc6811c075e779fdfe73f3d721b07e16fe036e283def7fc79efc06d3b4efdfb9eb3ea3636dfc3ab424fd21fe1f34351d257eeb238624f9d4ea81308be0337f09b1ef14150f47a28087affc4f0591cedceaf1ed0f750cb9ac5eca077f0eb3c1d843f3f6e9772e79d61d7d6267064fa1f30d040839cccc2b9061800d1acd5ba29b2983025f02891e79e42e69e4b6a30ed1e5b2e8599b2c39809f302b69df43c9873df6c32f250dd230888466db3cefaeaa7b782c06f07a9eced28284b4b4cf6a8654993c5cca6298c75d2034afdd3df316fc876103cf74e4bfa02bf7bdc53e2d85dde01f8b90345eed283c0dcf8e039bdc964f0de2be609497d3b28629e10efae3ca43bb7fdd3a32b6ba0ee3ba73709fb7bf7cbfd7a3f736f4fe94d266ffac3e774107ed641a86f9f38827a886eac3dd4e55be268f7e9d5f36002a1b4a52f961e57dad2d7e913f269d5a52724bceaa1389a60ab8ea7873d5175ac759ba8faf4848ce03d239bab754f4fc8f81dbca7eb0ef55882adbabde609a15bf54dc87750ebd17ea86ed568e96bfb67a347a2add236d503a2dbe69b68f3efdff67d93c943f57b260e7d43766fe75122bb3c98fbfbdcdf3d1dc45d03e2ae6917d0bcf7794f8fdcd6b8fd5d7a43e6350e7f6207beeb88bc83a2a4d4db4004babf63c9012c6712592e2d2dd9dab90e3a3dd2dd1de51d1447241b4c5da5d2a3dddef35323086af8d33df059f4448c1245c8c2538f83b9c377414374877a84b93f20babf7fd7f4c8fdfbc46e7a43e8a7c7b9bf77f746bbc1570fc87bd63d153c463f91d217bea72d7d61ba3b1dc47d725abb7c4fcd1b13e5d00452edc99a9e964cabb55604b891b3d7e39b4d46c6ec087407d56fbfb11b0b0dd6667dd346a072a7f680a5e71ddb69e9d741a6a5b701a7594ae4abe5a6475b6fc59168639f19772c3d0ee6e6b87770cf9d6893b06ba611ed6a9f59961259729366d1640a2b69957bee794b37a05572fdd5f51edca06b96d5476be4953824c9d662f77e16156d2a7448a10a29ac58010a57a290a10a16695c71e20a208c50e10c4d4a06802c61aeb860cb252d362c65b13203344029f2a2054d18294924e0c61193161c5d81858b294e6abcf14213439c51c10f5a4833a024b16245881cdeb0e268a806278430b302124e18016685344360d182136414855123c316484b51c0a8d20519444ea83069a2a10d2b340cd1a47ba30d292d1081c310653610d325852c94e0724398a532638cca90e28215701cd57064420f48308c11c31665ae203501854a0f428c6142146c0cdbc29a37ce6839010c5d6a98400f5f9069e184259e50816512c3d146260916294e00c517250748a38d24379c24c9a10429704812430949525881441247a3174a8aa080f2c2165a94b42a69c008428c2064c8820525ac6086268688b2c6cc1133c4e0c40c4fa0c1841b47f01005104dcaf810c61b5a8e66a0c20b15518c9244a942c31218279a50e00823cadc00e585294451a22851810a343a4c41e10b1638e43086cc9a1b56f0054a0e4c1ba881c4850b4634090207ce8bcd12295eb62053c60e2ad0c410ad208935c2a4a0c21938be5c51834c0e493b1c6186970cf410470a3f146146891928507801072c5da4004c9625341f8e06a0051a2a6b804063698b11f440460d4e8e5288e28486b9410254c2e8c1092f98d820730128253405f1031531dee832e50608a459c3c60a297841628168052f6a683912430b242d1c97189c3061060b66e080438d962635062c472dc052c60f59a08172a6cc067c48420412461c39414492c605102645668280630b993272b40851c507348868e249064a589e2c41e2a805516c112283265820c4971478d06187151955349949028949135ab66842e945a0c7d72ab5554a29e54c62ebbaee1dd1e6c40d2a007cec89803da702bc9c6ed4c6177d4ded45297d278e09107b6cdd83bee65fde953ce6f0e821ffe4bc7a50aa5d401fb05b0fd9ad7943b4739c1e4fb138e68d3fbdddb4f12d7d51dd7d7a1dc87901be9c1774d9b1889dd334aca8eac85f9dda4d59dc56d76da6a35b09723299452f6c2bbb7e22eda03a26606b5afec56aadb5ca7b57f2c472a002d340cc1a475268e9a1c915306596784183154e967cee113a0bfdc40088065daaeb6244a7642593b5ce7be909f90eba348926b4d8c46861e3ae502b3d940885163051210a9931c244a15b5888038837aed0c082182c7872e2b0d06965e3aeec518a195f9b6e7126862a927ed042298c0e9ca09482162fbe6c11c267944a5d9e6060baf8d0250a539719ca9875043c3b07c8a0637539b58301102fc2a03b40763028da32c41055a2e092041192cb19388861060635c0d0d0c406274692fc44f7ca49e54e764d588c51030b4f98f142195d56985636ed521d17355cccec249a9cc84d517cdd18442dacd0041352709022862a3470822a698290e28928599ab4c8b0347d917156b87cd181619dc5450b172698b6b855bbdf31f79c41aacdf6976a5ab661d8bdf7de8b8942e24c7519bba3b8ab66e570ef9d94d232a6bdb5a6ecb679dad75b5f5b05565a6b338c8809f004955e6bafad934ec1929e52ede3f6f17ec4ae69af6ddb5e75eec5302c579db96fad785a6cb196568a7bce39e714122dbdd65eeb85a495ce5a29b5d2c7a4e38d0a75dab505acd11f52ea11c31e839dd36a6d36597befbd76d27b6dad5a504a2bbd92a7b5bfb752ec5e5b27a5c1ccea0423a3246baf9df75e2d63429ee0a6b690c4b2add6a814365f2b25cb886b8572b616cf6e76313d626063f729714b2b6da6c3c8e2961fbb2029337985c46db54d81dd007d19a12f5b29a554fe524a8bd017b556530a84526dad0b853c6fed116be9776857eeb5768ad226eda4e8bdb3d65a3b0c7b7dc6302cab7383b79a56cc8af96e18ff00225f6c6343d8aebf40e88f6cdb8cddab5d1c64dbea23d2c7bc04637f20017b08db551b15f991c3eb55add50103905aeb2ce35a3b0226e39dc1d65a6fd3e71979a5fc78efbd265c8f8bb4f75a6badb537b379639732556b927b654a4a25f2c87a8ed51dc8dd630703fae3de256bd5c06217bb17bbd584df31db6b7ac4aad4a94dbb7a2c02a22063538f294ba98058cb3c82c8db47ee23f631fb78b76d7b711cf7aa23e7de304ccb32ccdadbddeeaef161d8077eb8f3363336e6c278cec70440d16ac786b6fdc4be8b61187631ecbbda7e3a34e92886e5cacf39e79c76d62be5e67836edb5a37d04623f26c08ad5b4ad592d39f15a6d3b56ef66a5e6c9a0e14073464a8fb64799d890f1baed7273da7be87d507dde72cbbcb5e7ade9d1ead0e7a55cb51ca4d02d184bc9a36519942f6b595547526a2fa59a35a5add65a4b3f3094ed0ee49ed287b451b0ce4e018688746b8918d05a2206ac269fd96a2ba5e0b696ca11b22d83b880b25d9fed7a45906b36466b25bad4f2c0430aab870f0cd9cd4391ab02d3e77efa5cbda4f3b9cf55471e08dcf5e0e6610457d75a6bcd6a9a50f2552ec02a66fe040b8725e6064fcc0f1d982a6d58c1609282d89b0e9b127cefbdf7526b2bd19d94068cb30ca395565a6fcd320ccb30ec5a5befbdf65ead5dcb627d47add44e7aefad9c4ce86da6738911bd9452249352acdebb894728a6bf036781b51f415279ba8f49e5c9973f924753ca62a4c6445f3bacd36cc6a61febab52a126f275fffac9304c072c669331bb7e26b9923776fdb47403f275446866408b98eabda73bc9be6b76ad15fb346d44fab8c7618b1f489d7b90e9e8137ba4cebd275e299db8832552cfa5cefdf602ba41d28c4694d10d0dd30f7d112df1e48c166390b16445cb91325d80484118356851c50decca1a45391c52cdc23281d919353b6388382e9a33b42d076f3d4cacb370e8c66c19d694e4c21e25521743520a7bcc181b198e8c0d1368666dc9a97cc69299b32587b1448f42393bdbdce3c54ae5cccae0964b5bc46cf1b2c797521b67b2cac9b893e2911349d5993dd2e49d790d3e1b724f037e1ef0810c8284844929053267117d4d17fddc54232181bee60d30e583223d3f395316fd2021a167be0193524ae9ce3c06f407067b1e15461e73d63a4d278916452bc812050c46704d24c103162fcab8d0e433df53798896285591823248a88082227ce67f8ca6b0cee4f13ae4548fdd1191d0173d5275d4e891268f3b94e708d5a13d6cc8638f4d5f65107a4488cafa8b10027d5197fc7449a1293df43ff43bf4405845995eee89c6964b43a4d97387209b8e08edd0262aa59460aa6c0c363d2a8c4c2f17cd56393509e64a7fb3bd5424b226a094a260c3a28a0f7fb1e52b5828e16c8b15d659385b2e6db961cb0a3693a6039e52da2ba594f2269846db520a3a91e7a97ee95791472ba9dcac8efea0daa553069892bf056065861eb8dcf046124bea94344a9c1146d31266f8cc7ffe352fab0b584a09d65a99a4d0b9c4cc0e02a4c8f392fe0c2c93dfa94eb4d7abce779cecfcf0d053758a7ca034e94443a99541ea07f405db9bfa021944de0ba40fea7301939cdfb177a6585d6a0b0b299ae1b0e5842d4ae8921635b44b75db964b5ad2d863ce455366db02e72769604fc430809643295d6db9a4258b9db75cd2e2c50a3943e9c3daac1de1c59c2737d47421c5b081850b54a280728518128a8c60d2a2e98c14ac10871b5be69c73fe354f65d468991395a4cc1c93a6ca5ce3461573ce34d29431e70c430d5691913bfa9a735279a202bc306754c7d025cbaf2f59b01151907630064034e852dd1726c8c81eec02cab29d01aeb5d65a6bad1c0897dfc00bbc265fd909ac9924b7b1e5992daf75431d3822836856beb20c09bee601d9bd9180f1ac90678ed4c99e7bec2cc32e5fd9af0794fd136dcd2ad68935ef2c849daa693bb8d65af17fa50a8f698b48314f34b1314d8b1731603f8b38ca355de1be6c60cce03155745d60304e644813851118428c592d91060c4ec2e8410dd2166a844a72705a94512b065305ab544761a50c154b5841c5081756aa20b38310268cc941cb32c607945dc166bf48d364c6889733bc84714202e369ed15ebd57246597117cbec8629e1858b3d666c94b72d97bc88d9bc8451a271196756d65b2e7919c24b933dbe9c6c444ed68c81610a1156d678c228090d432cd9f0461651b0133a2e8b0c862c8b951ab29f0720655e58902981c43aebb5e5121468405146ca1071e4608112518e825023b5040faa3042bc81ea1284092726464451f510c40fad26d05a4b05866d55db5a2b6fadb5d65a4ba594326751fa41cc910b2fece043c4fe070b2d2d6c5aa060210b52d11b453ed65a0c8cf298e9b5495292d9f20da03fc02dfff300c993a5bc804b96b7526b76005038b122a2931ae1574a299da7cfb5869c3db7ddd76863c795898aa15724c975c9cc606a8b342f50810c42b57d42fac02cd3c6fe4516f4854d61c55825fac2b4ac72217d60cfc4dac5bc003bb65dd1c66e4b50435f98556363f64efb996663338321ed760b40218fd6881ebb35b2495031d6c81a59236b44c5689666d1a34ac9de1d7bb542feb062c81776acd3f62cacc71e3df658a56c4cfb32e661afda36491fd80b30060a15b3b15328540aa542916852e5913eb30334d93e13b13dbdca247d601f801af9dea649b384fed85230a22f5026153b3ddab65ffe188936f636c872386f834dfb764b792c525151d1131fee973fb4675996651b70dda66f26d67dafd592a6529218a626339d48c2f7129ca0fba75d15903e2474ffb4f741a7b5aa03844b562633354d65aa4d4c26132229549064d3911090541e2b8100e9f9f9a0889105a080b4b16b99f517962ada48499587c8077b2712f958a5ca637db05b3195472231d92619645e231b14e4b66ddbb66d18639cc3898a86a5a03285954476045602cb61b8252611f417898f096b035765d3ef68f4af3d7c4d505c45b16af9b5a50915e877e8bf0105a25f3863dd697b26cf2db7a64756766dd5e3cb8aedf0b4b1465b69db4fe185beec311629f5288451795fb1a46d8f445f560a912ecd0b98986a533553d3142d9141662daa45754935aa4cea5185428fe8118522850a52920c32003499be8ad8961e55aa3763260d2da24ba81165a28494a42486a9691a4d2326f36842914cdbc8911090541e8954349750a51d203d3f1f1459000ad97eac52acb5d65a1f4be4635f912a8ff5b1af4995472255a52a460699d608097f4084b966db63216448b673af80f64c9720bbe69225d0be6997943e52d472d5b90560dab90772fffbd77d26caaa4def83ecb3005b7c5079a8cfc5303d8033f9526a51c08ee7d4d3685e801dfb4906a17aba30050d53d08034461e659a0f365abb02609143a8489066120f774c4f23d6983f4df372ee582cfc4d4fa4aa83bd005a6499c1089aa6076026df3fc94a7b16d11fe3c4553bd6b4d35df7f438c8aecd14e80bfb5c72fa21d34b1fadeacc6934a14c238c0ba9643a2bc59cc897963fb4db2d87beea35ed47fac8aca669ade6caaab2566ab5add7a67d827f6410fa9c1f1964cbdd77b6c4a23639d86acd913e00804949a5adf5950c6cefcd979c894c76764a3dcff348d8f81ea65d873b916863b1ba4094cdb966c889a22ed4ac91a1053b5825512c01070d60b098e20a0c0bd110362831650d18274a459061faac9002052bc400260a1042a081c10517d860610d2c658cf8382b34e8619a62a0a832a16822b37200b65c82420628967c415fdaddc192ef954ab0567950c7581bdbc180fef08edde6d85f79402cc79f9de5cc62617c4ceca99708782957a5b25172d26e733f3d6a4a4e5a12196dede189f6cfd6f498891b6c7ac71331a02ffab2f7db6ed946945507e3ab442192be26c6c7383f7525e04ff9a913c94f6922e04f5a7af8f4d489d85c755262a3d2b9ea58ac5d444e0f531aa565d5d9b0877f6d2cbfea583d0a0901318146d4d1ac851f68e6aeb7377b565bd7543fa57e739bd55dff8e3d31fc27caba9a73ce39e79c33bcd4c7bc21ddbd0e3cedd33eedd33eedfbb42b83dabba6ede81dfa924472681cfdaae35d13e71a162b6bd74a721cc713b587e2089e7aa9672f75cffb77dbfd7c979a36e6ad799ae7791f775ce03b3dba3ae82ef5e802350773cdf6f4fed99e775707a0bca7bbcb4df45f498ee37c7ae09f4f248706e79a2bc95164cbe3e822bbf3721c47490efdb325a8c79fdd81c752efc4d1f374ea9a0e4a3deba0d53521209e1602b253dfeaf42e1b6da5fabda6c71b2de9cbe696be6cf43854b71422f538b7eaa74b4f88eaa78f26d827f993269ebc7fdde99abcf74f75fa3d5d93f73a3dded377f9b54ebaf5dbba26b6beeffbbeef071aef737b97557a97b5ab2390fd5d8ae3cf9697abdba42e2bcfe9b2f264d7b5caf3dfb06c522e3dee6c79a35b7aa5c76ca3557a6469941eafc7d7fe1eeaf195f5b833ee7cbf28abce872fc5510848e779d57ba647ce133b21dff1a779e05c9f488ef3d8218afa57a26387d681c343cc712de254cfd3e3c411f573883c7e51bc0e7187f53cd8401fe74a783cc7ade78a803ece89f0788eebf84f0400cfd1a1af65d55192a38bb6f769972b02bf78223abee3bfa8659557a2e33b340f2d7a407577f73c0f76e80b1f73408473f14a727c07cec513c1b9a8f189e4f80efdaa83bfe3e289f0b8dea1651535be121e3a571d7cadb1f89fc88eeb10b5acc757b243ebd040aa0ece818f23ca8a5f8580d0f7d49f4d5f8580ec11a6962eda728265e501c78cf5387778aff388f614b153713b7d28565dbbaeebf0b3e3530f886ece041fe063c713eb6eb3acdd43f1d5753afc15f36936697d28da67b1041b6862b7181fe35f5113626d74344138b13989b24fd4aa4ea6b3797aec19360ab1d0e4b931cc520c338125d2688603be3e920d79069ec7f71ecb9d251827eca53b6de4196ec986ccc2822ac6e862830b4aaed8c0135e7421238c2154908598093c39b3022e96929c11e589329ae802081ad4d0018ca32359460f4d25a40003952c4848e00d16604041195eb8a0b156bee0e0040b4b907200838a214a88418625a614f1644a0bb01c0961a50c1b5f8c943843456ec1a2868c384ec0658d9a2aec1629b46861c5145058b1660a294db08023891933a02843c51425a8028412264a0882cb1701a823c2305ce212656389b730bcea74f2c2a39ef2bc5085ba867a28ca9d42e10c1b92611587e26877f8ce03cafff4e9f7f60454c1673d412dbd21197d7d5a236135330bd822d919ea18f7542a8ed9e9e73c0888363da63614a39ec963f1c39835be36c677db36ef5c786939ee2008de8ddb384e3b287affc431d4423db6b7c18deb193e2a75ca2d3d6a298dd236aa6dfbf52ce0a238dbb12beb50ddb30c9e0efefb5c5f2aa55d3f72a7de81dca913ed9398654fa1ce9d32f027916867e033783023b2b773e2d8ed4d8f423da4dd55deae68a7644ac6c9f1d4ff1dd771497f881fedd6813128d2af4455d71d14555fbd87a2502814ca6501fc951e5d546e227b75941e896cd4b1065715fc3ed0c8c63fb3a3f4221426b5d6ba1255c7787a40a8af5a5f8116e8a12a71eca152a954dad5d244785cab8ef546bd0df2c32ddc36cc23fbc2f09ec7c3ebc22edcee8979753c3b1e1b15a54f4fcdbc07b87e7350a4cfbc1f7ad56df70c8b63eb9dde64724bafa80e72fd460789287114eab112c79616eab15d5ad2d7afd2a3508f2d5e0289dad2d7f577e8d041698e1c4f3d47ebb895e3e62d16fdcd5b396e58add3160e0e0e0e7dabd56a712d6e4aceeef26087a794869803eb11a95d6aae567a05825d0a5c9202ca6e618e258e3d36eb37e24864dfb45aa73f513dbe72725a3838bb8542e9d34fabd6e94aab8e52b57e6a5d521e7dd525e569e931ffe6a76bb1a7b244f91b117b16bbdb84dfc25feb0185dfc3e959409fc7310f8c87ebdeb1beab955e81e06a14eab1c37b77f5d4f07b0f0dbbccf380883e8ff750cc83f2f8491cbbed1d6bf155677a435a5aa32fd4a94a7c61ab1e8ab8763abc39d16e89e377eb3654bc69fd445554a5ba4acc0fc594468940b6773c3bfa3dcc5ad257d683488f1d549ff02cc5619c737610f0cd345607c2be39206c39112d8ff59b77a9efc79fa83a2886299b87aa87df10d44fff0e822008822a0d84d227f03df51bbfcbb37efac42d6f600ebfeffb50cf27105c280df481b0f3e5066187dfb18da5627dd341ac9f7450ea5b98b359ae2ee5e19bae5be1aff00aaf56ab70f52dc4abd5b75578306cad74abd5021f8661188644a0f448b451a77fe20842a8411004433004c383c701c130c409f598fa77d571403d763fbda79e44f94fc49e1247a19c9ddf1d750ac3d34371ccd9e1290c73e84b26b5e817c7abd65a8becfbaab5c84bca4b8acd53aa7b5fb1c0d33b16ea955f5d98f39637d5435557646f5fce397fe12bcc458a64d54ba57aa8835859147abdb6eab559ab8d65736fb5ea3a1b1b9bce267707ffd9e40e638c3b295df7f9ae03354dd3b2fec4f15564775deb2c1bd6eeba9f342d6716eb147e77791904c1fcda75af5791d71e61ba5171a687dcfaccd6aa734488754488e52488cd736d2dad4b81a88379c8e9e173d7a134d029c4db7644d3f276646f478e1c4109b13621d6de8458db25c4da36cff33ccff33ccfebba94a753a95410ac231bbcac3c398e3ae931e7c8bbd3423d6a422c168b455fac9d23ac3dc2bc6744cedb6a96e26cdbee901076f66f3a847d3f644318b299f6b01305f52de5faea36adeef9db7116f13711ecbab76aadb582b8b39b7872610db4792ed77b68b7e177216c073fed3abdeb4208c175dce921eb7275767776bb6cd7a552a9542a95fa964a7d4b811b2aa5512854144dd3344dd3342d049e1c3c38a75027d4a0a43a9aa6816298c18799beecc65acbf22198d943b5453b366a09da4db88f45b2eda80da9c7a8b608b0cf4420a4f4614318aa657cd852e7b0f7d56d5a1dea5d0b757048f8eff9d3dd779438869ff7d3e77d1d0a4977d075da484e1a2894d20792f0f350de3f1de4fda4835ab56bad3056e1eeb853617c7c3b4ec4ddf78b3b15c61fe65258a7525dd7751d8f0fa0778af1fcf6897116bf4f8f44fb7bd79d8e42853f89767720f86ea87e394f6fc8f7bd13470d28ec1e8a22cc351becb2f401eaa1bab1de644e21b936cd1ea2b523b393b3eda8610d847d2f76b18b3d47e3badb69cad2d9274a0a82500e1115a19c9d9a46b5170ac6d8fb865abd75dc850771289e9ebb6f841dfb043eccd979cb39e72dfcf7afa786e2261f8adb087e039f6f314f48fea7693987e197ba500e08fbfb08c2060f7e7b4fddb00d3c69a11cbb09e508e5ec55d6a350ceeef0d6a1ee373db630cebf395f9b5f1bd6ddf2c1f0f3bc5fcffbb68ddbbe6d83927510a65afe7c0ec2d7404dd3349c03c20e553a5f9571706cbecaf4f58da99d59396795f85d521ed7a7ba4b945427ebb1930f45ec287114ca398956d3beef7bce393bbfa78222dd591cbb679ff731677b5fa7857236d6da2527e63de680b0e56dce1ea1b2e8a7064b8a6dadb5ca3a270aa8941f299364924cd292b4242d494b82425f55288421fa4ad292b4244dd358fb47a23c497a3179b22469c98bd2177dbda418e19e9e06fc3ce008d6a494af63edc5e51dcdfa8015670ad368be405f1aab6a1bc8922a797a9958e8abfe24431e279609a5ead41e69f24fa7a5723d552a2391c8a0c00ad98a148a54c872690b35f33956ec58a1d4a9d41aa17a070806776a0c300052e915e5ae4f80156f670a26112c39e20c105bc07186924fcdd28592121c70bcd084059f7a23475a70bd88186ed0018b3698b0410c9f8f853558dae0a14c1c4f7cea334b534af57b2a4f284a9fa42c7dd4ba268a302d80c20b2f6a7c3868e28912121a323b3ce153df5379aec516483bb001868c1ad694004493262ab40087167cea2f60227f53db050ba60017144a3043852c767803c9d1529927258c4901cd1a50dc283c09c515139ec0ce300090bd030609d4964b609ef0c02491724055c9d618a135a0e7e701acb3c0306131798166531ada6052d3821b4e468072040f3b58f9c18738b2c49126cb1a2539382e4436365746113b4764100db39f395207ab59b6e5e50b3b6284fec0ee7b3ed8a202b282b12d0bb2e4c912902f2160153ef8481d7b2c76b14bdb06b1ab01b620db5aecea02481fd600db4260d78c0dd9f5d69a1d57cf033007846db3d4c1ce894634ed3e6755cdae3c9a587b69f6c49176b1cc666832e746cea2c8f7087f916696d064a68aa3ccca5fc2d8e34b498a00bac0c2461059a42891c17921862e3a1c51a1430f2fdc197838a62dcdcbca972abe8cc9b65cfa12c509195851caa2091ac29cf0041c417811461138a4f1c28c2af7891ddc981e59ae28ca218a174a3e4835ac58a30217b2483ae3040d2e70163452dc1699a68694316648434b5218274dbcf0418829493829218d222e4b1a2ae02a1c29808105a0e3a8840c596873d22106491000002316002020100c87c3e1a0501245c222e70e140010759c44624e980904c22847411cc420639041c618430000919119a2a103d53cd2f32a64f9ddcd9eb4e7ac9e6430a891382849f415451df91b8fe4cf8538c3bd2bdfb4b6778df5ba72fcce6f119e5f16e1899001c9c598f3330fecf7adf39e9632896afc12c6ae5ba8888fe40aa9a7deaa7b64cec9fdf4906cb419365543d84c44b12e35f27b4b4eaf44dca39037071bd9f6d4bf60f8b7c92c0a749fcbc28bf8f6c03e154b1278ab3ac05ba1037aeca2e67bc8894a8e913c1ec93a2e89ed97f4652b61150cd48235ad01424f866932b947fa7ff42e994a5781a96103337d338766f5d8ad85f4742989570086a426b0091b8be5652acb88ee4b38f70dfa080c22bda06e446e3816a7d216f199837b2f504f4f3c883338bcd0eac0512389d3a745befe564c845e2153eed5b4cceee00e0fdae29a5dc89c5bf342bb5b5c6d20ce2bdfc961e44685afb5236588fd6c75b9cdfbf9470cb00f07c3cb031c7c415de8e2751589266a4736b61c12dc47006ce9b06e8a1044fcf5e0f0cc4044231df29081890ce20f7fb83f350b4a1ac4fb8f07b78ebb47414fa34af5a7cc622046901dd3edb1736ea24baca6a43a4d11916b7788e9e3dd8e8ffc6ae91207f6892e8b858693f8123b6f197a9452ede015db810a69c6f5ddb588c3011d3a378b38dc45274afdc7d37ce6d7dc4691f04abc657031fe1ad95b226c98b4facb36995c96493f67549b1d51fa8188d1ab584dc453647e313c6ca93ee4a55bf657acc40acff8f08d8f94529f31ae88bca547a4b7897082d542e83cec4878122aab06b92fcc44e22ab4aee62eaec7ccd2c2515a2d24dd620b8c4fd533ff91c33f2f9997fd9a85591861005fed15e18c089a51cae810ae19d4de54319def3c6fefc6bcf321a04a17197fcbca8480980991d150816d05143a210a392508e39616068a6ef2c55c29bfaf50c880183ccb23813b8b37471511dc4eeb731c4fad0822768cab50131d5930e90587ec8b5d10d11e7e4ab853851063a418564f6eb031994deb900bcc5541b4e03fef6c8c9585abe3213c5a970fdd12b313dbef2ed98462ff39aad3de099318f3c1977eebceb93e49c7e967d358c84fb649e38addba7948e4557cb3321678f9a5a3f1faa2ee557f5e5589100982fd4c400990628852ab9940192b0e23196edc12a0805a5dfd6edb03cf32066619a43710199f56e52114b7e17c4008df5a6caf13d8b74264e414f825c64e056cd0d04e44a3125eee9cccc7c04e8c187190922dfb7f4aa20aa2b0d3f8de069d0dff78b429d879ab648b68438c6292674ab43de38046ac916ef1105742bec5961597a7a31d04f8e77da303dba9a3caf272bed54e094becaf1021957b52d7368f2ea066cfae6a7846dd83d009e5f94473d47296e8d31f54e152fc42d60d9817959f75a7ba71ea1cc0d2d730aa2c034745a3a512eefc31255a9bd7928e45ff99a3131c182df8ceb2cb061398ed3d6be1338ec28d23ec504de8432453f9b8e4201302ed4fbacece54017c5675ea6d01feb4ac457ed31cac39e997a74078ad3d2988c3d105434e3f3f3ffbf29dfdbfc45f73a63eaa122ffc50858addc59964c564776144773308fe740721bd9ff2e8279cd7fc5d887853d78644d7bac8fcde2a0b5e30d69ad7d20af6d18629dbc0dbb3fe474496217c234edeba3a02e84f5bae7510ac1b6ff26c958dc3629dec2697d5ed85a041573aa31a68ea2d2cb4c7f143bb69a0acfbc3841e50a1e46b0131d47799ec71ba999f26bd21620472db62e8ec1530f9b9a9e44a055717eb412288beef5f50613613edb38392615d2e2821b88d1b8aacac5a176e8b43b70acbcccf4e6df6d9e3d703979b29422153a1059a14355055ac0d26ac652e84015e01c65c4834e3bcc790b438882484ea82aa55678fee87ba388c9caed566a2c296f5fbe692cc4df103d8269c09acda9c82926a253d72931fdbfb0b42f416a39eba5a1a83a8c851c8dda4959cd64d8a19b554b4148e1143ee1188274b2dfc5143390aa2088505382df54743c7c305c9c7f5c4fdf12cee2b834f6f45b1b07904d4593f9c86206427702a56f7deee69ef0d5f3f3cd6c0a64b8e80f618a2928234a3169ddc5f4c891d1f8142f942fcf608481dc0e46ac43e42f81128037baf5476f1f456ac2545e57f040a447c611c9a927da1c36323bc62b328b053e9e40810417c0621e56faed65bd7c9de42b825e151cb30b243414740f259dc6038d3ad1fb4d95c9302c4b7935edcbe2370d8e27dae84a54079f2b37a6b98281aeebebef5ce5a5c04c237d9a07a0cabd5578aa7205b415a01d6c3e90a40d2447358a16fffc14a4156aea8dabf7295305095ab025a1329ff43eecc0c7641df5957b5c05f318db0a545e6474d024ea0c058665e706603299a140aa6220ea52410010f10e7dd913ee81a78d915bfcf07d3278122f5e0c9ae3659f41f7df3967e005279c3bc8b06f2dc73458ed045dfb57e0a7c295a013df4bfa782a0d1f40fa3461d91643070ef7f6f06e584dffc5cf58b15f8441dc54ce7e7b7b8844a6465c51ffd37460a2e8a578c952ee4163484e3d060d3167ac657e98117d3132268aaddc0c8982b3f214d265e1870fcaa11b0af0113903bedd7f8848171275c7d32aeef5cfe631b3f0ceeeca8f19e83e1839109a96a5fedb307d5be1497d7a62b92e14b1ffbd8875015b3102fb83abbae86de9f647b08812e8a1e2b1e2cebc91b1318d574a39b101ea17d3deac48dd5fd0b5c022b9f13ece802795d74769a6da88fe7f174473f99e8bb0ec269470a88a69007559f529994cade9505c2631e351a99341dd9f1d1575871e43da545ecc767da0f272f359ca59222c5ba4945ce2bf1c57897cf67d649c14df0181feba6ed45cee117811812ffcac37231723abe6fc4d71e082886afdee3f06bad35efe73fb5cbf6be631f210416b45ae7163a03e4574c1dc368035c1380cb84f3a0adec401c6b5411e73af4c5465f05464fae05bf3ddf4fb1cdfe1d918ca053788648d30628dd071a6996080fce364c1fc53074c7d77b15ee0aaf50340a85c048a3b57c5ba07471c389db58ddde4858baa69ce229f31de121608e5e2b19af9f0059001c4b290d6c0be9cde7966882598cc5615d4b1974ca9d77f3dba3ccec9481d962c9522678a527e430ba7b850f6a399d3711a561e16f756e24f502af47d537a7aab56b2929e2588fcdc68cff9e740400593c9cabbbcee707ccd5b673821d410758e24b2c8fead9f213f3f66647547d230d4b0d46b00f1826b57c14dae220a0b0383cb09702e6f0421b44b800ce4cb99d52bf08abaf1d2b90feea8be01cb8d57d6143627b0122db4e4453810dfb0768605a35927d01cbd269cec09450cd54382374519f60131862aae38161b480afa4098941fe06352059eb2fad7d7f92472f5209407f29967762f8a7398b662f2a07308362448ac6ecccf7fed231670038ec9e1caa29f78fa60a37fda56d05fca97b02c782572b651b9d945cb9fed2bbcdbd6a6b27db5f8a0e4e5e246d10d405d04e76c28af32ba53beea7307e9d799fb35ffaea224b11c9bacec44f6cd676a62ca96e5b62aa947f4f84bcfbd7e29d35821da6e92aab73d4dbff8591c9d5987ec7906dc0be0ee7984a56f9b1cea86a3561ea307d49700bc76bb9feea0cf0ed24d54e2dbed5994ebed0aacbd43573c674bea0654ebbf4ec4cbcd8811620d6cc23025be89f965c48fa794cea5d6b4017ac718c821b5f77ef88c623bc90cd788115529a2aea3915257ad6e9f61bb69a1e272460aab6ba432664889e06a079c69df0fb7682082c329405534e088bd9003a4325d41df2f469dadddf54236ecf2446697901394823861322ae3c22fa838957a468d150303510a0d920fb5a756b904de073992942a6169a787a71d6079e761ed1c0207d42e8af2291ed38192159faab763662337225eff40bead88629f25de7f122917b660562776ab8188235446d40ede6c2591c55fa62cdd9bc5a5f8c42e501388948ef342e999a948824f7eca96c9bfa62761a4844be8f44c21de0676dd451f16c4e1d167926b6212a0d23685d6509442ebb1d45dcf177074ad32010293c91670ac894247da7af957c432072b4eb4db1995627b068d299e974dce8ce2f57100291dd39d4726202915a55c199e80ca443205221d79b4a3887049995a151e9f9dab3a98535e9ac9f602038bcb93d6fba2e433d51fbf8132cf8b158acc91619142f92ce33b3df431486a45359d7592e09198b6060294a5474a6b8e3f428b024887c1205ecbc60a9f0cc0a17aa7cb96bcaeb04d85c23b7e03c19b3b870c83ae7a2f1c15c0033f8346531423ba378592785bd5940ec93d75d4e712b0950e7fcfe7ece14efb90781e07c9244b2269188c527691de70452731204786ece486f4edc5b0346185914f8d1229cb31615a0233ed940c9191ed61052f7e29cb4aa54facf1b5ee264524d612925cde0cdf41bbb4fac69cad4424f100baf5127178c2dee431d01d1417602cf28804e7ad30edb3ba6046a18cf60058d12f2bda9a3dc1dee61734d7528669506f9cc68527652c75425ad17c7824e9ad6d39949e9de2590bd5fac725f42dda7888ad81fa81b5b554ba807b773f6f5a2b46cb311b01797b742d39942dfabdfad5d0540a1d31cc032e768b46276d27e955621704ba87c2a63660c9c6a566a1696fb7cd5cd00b3b3450f038bd45832981001013c2de49309ed6902346d7638f6881f5cdea954a092210ef5e519839b0b52dbc3b019d4dcb8ba08afa65b909dff738c991170544eff093a51a3c7c165207a1c5ba0f22ad922082857d54c282eab8b2240a4d982de1705d7e21d983ea8932021ce540f3bb84392dfd83180f60a9fce347f8380c27c501b64552a42ec8364dc85259954a048d02da6ef7a830cc2d76d870282e5bee2d09754732e0daa1ab44230bb390f68a486a0e079f72c13c099a8614602a04ae8d022d4d9a252fc732767cacf42bd835f73305e74c6e52e4171775c03d83dc37cde9ed537c331d816f81f4bba25dbe44c102640d6db1c554787187c76e55efb98ef3f75525955eba8eae2e1fcb456133e0be5b9cdce0e9721d6052f2c9bc715b7b216501708f3d9359ff2892bdf5b90a2b827363d19808c8a162b0509c0c860e5e37b739ddf2c8483bc1d3b057071bfe7f083db4595d8ef0175727e236173a21af9629874e020122b4a50ea3c656eeba9c7925e04c295decc43f2e1dec46933df1e33d2a71345906f8874c35aefbc58ef2b1c511598b9fcaede30f43284ec5f3a9749dee5ff483ade21b0d28ad91f20a6ed543b2cf394978a4206f48a7413438a16333fbc55d3287831c14e1091bd5558529c093eb49f2cce1c18e273d412095e8f3684bcef29ed8a3c6153c7ce0c2c8eab5708caa4dfed30b7fe0d323d0d8203f38753af28f8672972ac1b3038f7402a46af22c038aa0f9887d10ee60cb33b8bd445c442f1c52a50672a6d1d6737747962881fe3296684744ff1790143ea4452e54514c231194222a476741018342d603d4b6a9f72370e984d951c7e98d53ff515f633402da4fbb41b084241840657775a650154b5a11c0c08cfad58d2c690770402c9f3d90fe1a30c80d48658017def77c43d27a2961313e9a6447402ff8bace77af2ca43596f1218b75a5b86c63bee1b1f29fe4936097dc5a4de16e29253c612858a3e8a7eee2ceb9f5ae0013ba9988f14e5cac068950c6a22bae9963687b707ad0d4e6776acd7c67a9be9c9994e85ccfdb4460f7866b0663919125ce2e59c5da57555b4bff04374f4ca0c2b30f4b08a89ce8ba88b8ba63e85eb113746e2ca46fe0747208dd20a74a07831a1ad94924c13f3d070929beb2b41f3991cb19fd2a728855010055399322b5a403aa3b0c0ac1174a96ae89aed96cb41ffc31b9ef5c8a0915bb17e2dad03951155ec9e557935c8ea043db8c5c9931ab7eb656c9583041994d071025efc9db9cf327b3219ac07f51b4098a13c8dfae340fc52c6a0a7d02adcf848b46004df48b3566c99ca8637f01d9dea726d1d1440e73adf38890ac62e71984e4559ce4b475b0eb509cfc172059ed5d41e0466e3946b0d61d38a582ca36fa150192ba27ebf014cdd2eac6005ab0f294a683206080104a90938b3e427da6d6b4c5dd83248e1289734631e3d2606393c1a450957175b86c4186eee4a2e74bebb4f4d4d8124eb18e8b3bfd8d288ca34239fdcfcde1a45daf8054db866c8546a0ebeb598c076d881dcff194559a8485eed59946046765b8ca2374fa69acf6143e3746544627c4fa9ca60b6a9e1e03428bd1892c4e156df3e2de64031be57926e890147412978550ab54216b12aed0fce3f8284978ee0da8295cfefb133accf91e1061d9887775da6c0e2fc9770a418a93ad2bcb92b19787b76d9bce806c61bb3364087e3c493fae3647ba74e9c29c163ab7a41f4a6f0e69d6e84feeb60c577b01fd462252860fad9855131b6566baac3ce118bbb98add7f7840bb3094187cdb15170187b47ae5f1e2bf6f533923dde62bd852f707b513c60452bcb060c854a0fe7877e7a583a875521a1282e4df448b241a5c511cb6a4cc5137e1789f95a88d4fd46151fa8d0c6a35d29cad1721019e5d490f7389891722de6c4c725e0935f2b007048da88a5778caf0a60f393b77db243af30a53a0409dff9213489b7d340b8daef868d8c7b6540ca3674abdfa706cd82a0c55547280be6de0ba21fd5eea1510e054fec626e2097e4f08e00891d4d1b69c57f5d47c8adbdc97ef24712a2e5c38e958f6453006f3967e724e307062107f6b96ad0766e9d4e2d9c626d0a4138ca26e9b05902b5f66aad737d96e1178763b4c149d29c28e91d43801244f1ea6de48d764c4644ca8ad80ff0ad5a36f5bf3cbd04e3df981a43953bac60fb7302c8754acb34c4d24d24a39718c8835a0b92d23f4eb207eff06f4457c9005d1f6985c1bc4b23f1ad43af0b0921d9a2996770da3e966fe65d8815521e27a70b7b38acdc58676e23f220cb538ff2cd04e8412931609d7bb085a2a08f9dbdaefa87c1e314dc220a8e3affc9e3892384882a0c5b77439f87496b4ef222015f905bd8077612a7d8c83bec933801cbbd35a9816bceaaa522d5fb553735255b3a2f5faf542aeb8a184c38a143bc5de9957de4f92a5ab9c097061bd3ae3cada2692915478866e90831597821fdafca7e314a162abab7db911cc8c659afc547f2813ecf448880b91dc1f56ebc5b2a26a46c5e15037df484118582f9d0df163857e26d30417e6f67eb965eba5528d6154eafe3f355a2a849f89c3d70cefd3140573cc686a65f6a79576642b10b21746f929a60ab6062ca15818f5248557b91d3b24e6c7ad97890c7f031b19307e4ef64135e85b19c308e1566e01d098831f222401590ce088bedb83ad2a72eaa7d463451f616c08a5a45265984c8f44e84bcc330b71bf0b66e7dad0d7c1e6807056bd0d555ff8b148535ed0549dcac0b413c13738a6eaefa3610cd4b7c6f788395a4e079badbf2dd24444c06336927da4218c3cdde85bf51628f12de1e6f3ef8296562521d33e2061c59e187a31fdb450114b9c0f80e420e060c4dbf20601f0cd8a2b34f41c6831dfce5aa690f0eb068554ae4b4408f4d851b1b9213fdf026bd9002da984b9d8753d911e41b7819c0dd1ece2730d7565333c8a4dbce18ab77e590f101e8d3aee9cb871d1c54f8e810b8d947d02dabc59c5eb0616d7163f711047ee5f9f8db53865ad96e82cf5dc4b4fd4a3e2c6ca42393c1feca0c7869aa6a19f1a195fb6247a17829dd70a03f066c869582c0015cc53622e3ed53ef104516ec6b8bbe2c63afdb19fab149a7c5beadd8601adc865b38f96143771ef56d385ee1f062ecdb9cf8d7756c126ec491ee38d33024a80473c439e1bca9be47ad5cdc7294568f77071ac7686129724de9e847024bcce9edda35baec8eb97b97ea3935091f036944fe8988d6979f5eefd849d646572df8139b1bc71c8ddc748201b9fe403c4899ce3f95df8aee872e6e219cd62bb096183fce4abd3aa4292c70c371a3b2f44431a16cbc29940dc7b31660aff478e27d79d43b75b0bca74bddddb87a6b4f87e07ab22a27716bc40172f1d1041bb5474bcdbf7f985c6c7ee93413cae1d52fc893f4263cb93dd1757bf083307d3960202e74e604553aebe3887ab2abeda776537b18e6cf9e1da0ee90c9c119b08ad888571dd0518cc04a5fdbe3f13070013f09949b9cd8b503b3e9d4425465a1c0394bf5014abea625e80d8e7ff51c284f6e91d8a09191eaf8afe265ee3cd26ca4001b749902f882873ebe726c973d8691fe43cd52560ecf1381b62e1f946d689dac2f7d55a5273a4e168da8f107163ab5b49e1eeeccec46ed812acb70d1c37ce224896078a7a1fb3f7a831ea503dcd6915462c11588241bc62047441a0234200b0a5f8a87c1e09c2f21829f13ee6c8183cf164418cecbc2e7aee6715b6995645bf9bf920ebd567ec1f0b57eefb4d0ef95d0a1a2211a5484ed278ebc19b6f511e1859b645e0cf1b3fd0810f6fb8f3ebdcb925ea3fbf7eebdb02ce48f2cb80a8659f550f0cb7b5ce422ae650e274dba1dac3fced9854a957cc51f8cfe152da58048b99091d9f5539bd81b68e82de29aad8bd85260ce7b76586c573adedc77c4dc9c639f9a6a81e520f8c33772857d13cd1fbb0f782708a76b5ae7ea3a02d1c607836640cb8457545ceb4a9fac745057a4ee12556329816b3fc97c9c8176caedfb01be52eebcff14b4ea6aeb36a5c665b064d1c5302e2b76657f32ae0f31008e45ccbc09c4931e060de24c6ce30651e45598660e405dd9760fd9b5c9d1cd8f2b09e8f4f26bc2078ce27a46a4f278ad9a94c5e76290369f07f843130b19ec2b32011d8302b90c6a6588b3b60cf8ff694381a0b472d19e57130641191f0047d3dfd0d00c9a4dddcb9532d76d22d59a18d74d65fd21820f1c883c06d6654f3dac198a9875a5d42fddc2a4072bfc98181a00bba5d9574fa6a37618191d5884c14d5ff1e999e54f6759b8d1b01c0fb23239da356fb587448449fc90ed0284220f4b58900b6ee2a7c1b4caeaff980ccb334871ad0e9110b4de23233aa24a0f071215985105af4a431563fbce53817fa6a4dd39b1749a97de50550529e30cc713a52e84834604c217f00f23b4973ab9206deb16469974435183c3026b8ec9861bb5d0c9ac304a97f4f4d96e84192d30d4c01409d1f81e6013134fc45f077348e32e5fa792e64123b63b4f4932408f415d743b12c4bfd1b1ef61f97fa10c310a7595c9f30afaf1aae2480b4e83cfd57762c0222ec878f935490d6d797d1e3549068f5f78abce74fcab81b8f6378976e2815adebed20a07c4e6e97551f81f891dc8f4a3681beea06d3807ae92677370547314bdf9b1a27960ef07063ed101f5e6ec8b6e1edf49bf79f57860ed1fd1244a097158c9f735fe33511c3708479f89246f7307023a8f221fca5d70ce41fdb934e5ac6240e82940a63429d6c674b4ba48ac57449f9391f80ea6a1e646bb86526dcdf007c7c739e9a9641b610b3d8077e124112ec2abbd76b2df4e4af820bfa70899ce1cd62331afc629727eb4457826173982a2666cb756600265034140fa3240ccbc6b90fe6e92db9f8c3e26644d0269fab16507521a3e9e5491319cbe7df68c1c1c1f65585c4181306a3cbdceb582f7ae6c9643124bff93e225187386a33081456994197358093bf4725d68e8657b4c64d3d1f42b4aaf4dc02ab19a8b79506ba96094ec4e5edf03324f1c43d9a6a69f32c9e94074afcec8964c2c8c3dd89184d15d627075bc29c703f68967536267bb9285275b9d5906798545091b5a1946363685c3e5470fb788ba1c1afc852d1080ed3d0dff93aeb38b4da4e40c990b10643d921fda60e40173a631388c591e9e3eaf7e11d109278b1da36496609c44c75d1fe5b51073b984e17c252cb6aef322a2500e0c588110827772baf26d2a42b0e6ff6a477d3bcbee330ef0e0fe16f8fdaeaf35ec81a8072eb3e12cac3c9805bd651fabed757c74c5feb0bb894998fa00b1562555c957ecbee4dac4bfd8d044f4ac9071c51f8befae34d1ef66eb8e268c206a406e3e73416d98c6df4d885f3b96ec827b96a3198608647f6dac0bc4a50654375b5d9033920109587a565024174110c63dfd70e6b5323ab8560e38cc1d34d588dd74868101067e578cbb61c09687172d314cebb8b8646dedf2c94fcfb51e7cec72cc08f9b98c5cbefdcb2719b27f8a2bf088e0c787f685a418fd7e9c8bd180458be39ee23af45f93e18aa65f674af0ab8509f18aba9a8737df32595501bff3534c3215ded5980347ea005d9970a9bd3f74025fdcd59692ec92a9b722e5bd920bb24eae813cc29ec73d0a85757a35a143b2625163a5321b6772f985e590cc0dfe14d5e779b80f0021497cc0e5e3603487f488b9bc82bca719aba94763b51933ec9a63803b9d78d1f48b43bee1572e0119de927056cf61a9dc4b79569d356152839ccd70b6a07d347dc856820a4f3ac13a16401ca1005b3c10b860e73ee15efdafd062f2bca07286e33ee26d04ba7594b55316d78bbb21dfbfdf2b5ab630c96040fbdfc337a41c94d7e63e7cd23b68bc536abf38cdc404908f58a14197083352160943ccd9dd92e79c0df9ec909fc83fb2e410f61fdfcd5663807328f19680c600a559a9484be8a43f8cfeee5c00cc045d38615c0d33ffdd52c862fa517ad8527af79bc99b64e8e27a9c0b87facf608537ee683286f10ba21a7d3c95762ca0203ef50b0bac7408f15d4988787ed498afef79f8d9231700922c1d541ec4e908b32bddc65a13cb8d9c6871a5a7e601a2037330814bf83bddfb2b02b0433596cb1888307d479ffd3999dba558ecb400acecc4ccd169715b984701811ba53a5ce6b4f102db471ff0633df561f3b2072ca028c2ad0e19d6e35dc25b54b433aad418909a8d3c2e166830454105e50097dadb75735d36228b32aba7ba2b1026cbcf074c5d2d993a533f4a3a6e15704e6cd7cec5c5403e88a64ed0d5a828aa61abca2cc4b1d81ad6613fb199f1ba22c8de744244383865a429ad418701b976646c527b6e17b539765608382597f003abcaca35c00b646220314c48ec6d6e4afa5f9a1e295eb456eba3a6d42483d5528b3df802eb07d540a8a2c085d85e74c61eaecec3831a5d2cbe84800713d8107141bf49548e82ca99683f10ea77889e1dd34eff027097ac7469d825c8e773e0025897ab49c6eba8cb1e3b82c8c2d48e70bc45a91b89eece59289692511fb39af80c4207caa64d39b5cb78b700e0026d79a0ee295123e76b42c15d2009f7d9cf7297caa557bf4cd36d3479ae64cbce879e97d8159ecb5fb3d954e4654595f0a5b889c035a8ec7ec514cdc91121b7322e9776bb6e522a40ae74e8acaa85d36a48363c77bb66360808559a226fb103553b44cc8a188aa45ec51d3e8ea3ca9808f9ded722f336826db0c5eaca9275f73787daac109dcbd80238f19000d26d0fd617381d5f5815af2877fcbdfd3212bb33a08be94f4ac59911143ca621454fbc98da9189caf506971c86fb5c9defc5e1c1f1297a08a85d14526685c19bf879e320a874f36f8430bac7cea69b777a08f97b19ba33697d9583b7900a35f5a9a5a2edc678bc2802d24591383531de2395e73d8e2771a17892f2be908467a171be2905d96e21a0963a53c34f02449b19d6a8957f2b7d842327c0b1700b6c81acee7cd3b8c297904f9913a2f5b3b77fcace3508101dabfccaebef5bd5616b1fbbb84180bd97a3fba3a867921cf67e3dcc3a05ffe1fe244159c0ae43d02478d905389c7f580a1e434ae7bb8bc69997b107bd9ca51a7f6931d25c5ba4eef84563ef3e0a1cdd9b2b3893a69fb31bab83df498fab119db758e77945d40dc9e48c187b994f222aeeafcbd4fde7c2738eebcb0bbe4e24bbe2f18decc53f773d0f0cba015175e5773270e2cf1ec6f001199168fab0224dc9e1d9cdda67ff9828e1ff0be21d7820bf01c4df023709fafb06849d32b1382eac47c6a4f64bcdda56c07ac257d2066d535489a4c7fc2f38c7fb2216b672472474b7ab63b2c16eb58623ebf44e03edf105fdd877a09df7ff0b329521903807fee5bf300d2c09e8b39b3c42104ca5ead0b752cd3c5573871a9abf844f4d704441fe1d9147bf3a29d3e9f4260e3bc43c9e0d48122ca80d13c6c5eec40e4a4b56b11bd8fe1f1ac717911f1941496fe8a631a45a39dab2b83451967a96e59ada704835dd91091a51a446ac6aaaf6c7d2cdac2fa8254f7d1aba331fe5b40f2cd948bc1f0f1bb2345e9f13ec80187bef04b01ce6db68b0fd06f2f9259645d40686fc98237b1f8ead2c0dc2f38a9d22424eb61c5fe43d6790f96b0bc3ecd07f93e11a203d90b3c81e0eba7fc90e2792740cf750402d16a3a2b5c098184113efd0a870653d461e993060181f88f8ef60d93c04f01f66150b90d5df368db187a2c8182cc63d1fda6744e30ae6011a6b569969262367d43d4b8f19ecfabfceba0d93ddce0924f978f8fd45abe26d0b64e1d5af97527ae7f13e30c81eee8e868f134cd76f1f66806cd67cea61bc30cac2d3ba1bc33ba224f5f1a82df1460cf92877795015503c7f9a5f313404cc7e8912b3bfd9b98307eb14566eed05a3a38b9cf4853f8177a736ff72cfd22ece5e54b9174dec4a0b056c6e56213d5ce8f1e7eb8b44228eb1a8626458140711b0f5f9575dae22b21968b4e27693855818735cbe91cc9a4c215f98d22dbc6b0986eab9d61a4569a1df5d1ee8bd303e9df43d297b3937dfd6a55f3f7a545c111f209c1e06db2efab9b9ceb7b764a845bf72ef31e06d5a4a774362bc43eee6071ec9c879483ee867b996943203f555eb284052ba94d979d2d01ca7821ea6f29b6187db752ad66b19815c380dceab1827b74e3bed401384fe6799129537fc5193dfcee405b6453ed64c4b21a84864e8ec1a95596ef21ad25f772c4b5a9efcb9fd64a91f924737e2203e721e966933968b73337a99c91ef43908a123ba2964abffb66b18d9dd489010faac0251abbb5477c3862b07f87c8b9b792dede837388bd20e11cfdf1c9ea74e2c5016411f9e5721a0fa6cb11e208a79500d40b2dd269fa45264671d4030e0c0ff536cdcc7ac7db60145213538ec10aa3740f17deb392acae8e37030add0150c5a08464e69c244144561cf9811996e8cde52c4f38de6432f7a2641996998b8627487065d80d286e8c072808bd7dbbc6eeaee6b64ff3235fa7c2056e0df1fa11f797fff3c66b40c49f7c14d104572731f4c7046840f8a6237cf62af6c2f1b72a27639e0cc24c749c85035876e7db01e6f3dd1b1ba341a77e531ffb75c37c6ad51a71da626704869d5a51da6e5ac24ba3baef4eb0ba7e34ce95b350fd38e76880b37b3e396111d2d5d2f1b97ea91dab01cb4f0a7501b7a9134632ede9ea664e34e9d86352c175066fac335671627cd2b4b9572a6575ea96f501e5c3bb5b4e6a6965e937aa5ecdaab47c7034ab74a6b5e4a5daf9b8da3f45a5748be1483ae8b68dc8a6a168a9beff7ad66dce922ed1a1cc73a8a9e3ebb0e0f85bf4377f9b56bbd9d69f4cd8c23e57a5007268e94d2529fc7e03e7a989372bd2c1501169c7af2a7970d7ea0a4061f6c306417baa25be74c8d30168ed1b19961b9214bc75174e1c52cf428188eecd370eae5c4865f0e5c535a4562c3b439b8cae98d722e7dda741c297d49fcc25e4277d4a518fcc25a2e58dde648bd752e360dce94be8098302d1407d261c2ecbb50763bffe9b5c8f24fe74ae6bab8f477651f37913dd7b2a089e1468fe9d1bf52233873e2e92d9708968f99a9b4e68fa85272daeb95df8d5c3fe72e18bee02a1973fa5df7cd38db15a260b4d7066b1b4577e4e02c175dcc4f471b05e167e348b9da1d2bdc29704a69758d15a6edacf8b95f917b6b8c33e5c29728852806ec9684d93b52e63ebfeb7d046602fa905c092ce635e1a0ef161600bba63db52fdfc415ded605e5845e54fdae635971a3b476458375022014fc3812c595919a5752b2745c29f75e74c2da03ca94860b9d30d87f8168550a201eee03040d03ac7ca2bdadb32efb1df74dd5c1360d8eb99b60f04b7229a52df50806ef058794862e7941415e2eee969a02c310ede0f7b98301934928b832674d490ee5d52a2eb1734cc2a9f8e5a81685e19e2a442f58066699eac3dda7f3938b4035ab2e38d3ae67fa6d3cda4dc767029970867dc6276865c8149947da1369a1fdce17497a951269dccb53ce501c67c765deb67830f06a249235c6dd1f73c612fba7eb35d02c8d9f90ac655e86eac26ca48df56243a53fb580526e273de4892ec431f298413af3f64a8405c0c357842f10bcae621472a932602b2f83941e27683d53eefc1492d98136b11ec16cd5ee46a96bc83bee5128da27744ad3c5c87d78a21150ec48074be1b1fe45c9435405058f1212344a9ce257a3cefab7c10a5a95b35e0ecb13cdc2dabeba7ccef4e57b4a28e35b9b1c59fb884fd4b7344b8c207553d2c823c8b8581212ff239c274dc82cbd5342009ac7729e1411df8ea7381f3d9b56c6d137c94fd229b2b89904ad37dd70d6a2cb4f61476c1e1f20663bf946ddd870e74c6c7185222d9a8878f06ff5ac824f8df1920b86bf1acd1ca1645dabaf1ca564e4ac382bd01ce59a97b376c1ab32ab6005a0b53dfbff26850e1d356065ec0d25e1b9ed39206edd76e06f6f0ef24b3a0271ae478a323573416a08a9ba9786417b182afd5fd32eacc5e5e5f55656814166fab1eb5ea9776bc446aa4c5ad950f78d59f9e72fbc961e8cf9e833c0c1e946712943fb8d6332d4bba9f08ce60ad8674ea3e2f7a8c5b232d4a3f0da5746a93cf82ba5c1867a5ca4f30599adc02c4b0e75c0602aed6cb5963cc57e794eb57d3b7c02afcba56190854eea8912c1ea55f14f70d8f6d956593634c6bc77978183252e4c8995e5bb36f0c37102db6455cd5801c79fee8fe02c0d427bcb42977dfd05727e19f480c30f27fc338c0efa07c7b4687229ed14b5dfe192e3b127bfadf3a7e6b31fcde2e606cc4437b6be1ff9a7491e6121c91f6079d2e5a276e13f507e8db0d292bc16d84758527ea81eec8016f8da288aa2e9d7b81af03a7401195c9d4a84288e23342e468ae27e00f1f233e83c17f94aa3b50ab0b82110742ecb3f94f7d1a6a89dd6aac217ae584831e373ff9b97cf010a4a1c48cdf41c2b2c389b8260c73d3a7635561b0767b1e31f5f0846b463c57a494aee9573816af2de6b00990d10625d5387e3f11a3a064e7e68b871c17871d57a5d037d4b6d18afd1209afd426c83cac9367383d6b149eebed5ac474ba079670ffa8a4e55cad8d4ed1823d0cc4cc6d99cddf5a7659a17fdb2505dc6096fa8c9e2d9fd910e705e2c06bf73e21cc9ff658ed6b00ffdf32b8bf25d7098761017aa8ba828434ca9c60e375bc7526744d84b8f014d1b9cd0de762527828106d9a343d2bafd38724da34421e3e197a9a079375eef1b175be45c7cda14b7cff6fe81a72eb603e3735681cacd76f16ac457e42db550617b6213a5a3494573f850dacf02581f847dbc6a719e8bbfba18716b1b1d772d645c68afd88974a25422277a897b143e420ca6c80b051ab2adc5d47bba5047d56b9942bc050952239a18151f874a024143ad536dd108f350225f6406376e61bfd465c50f0ac2c8d78e8afca6f480993e38521b5cdb7875c0eb72ffaf1dd9028d8382722a9cd1b2689891af624681ab76d66e754334c60971b948af008af7c08f1bd948264cfc2fd9677c444e37e18938bdf0e4a64be92c17a5ee8d4811bfc25d58af867388670d9d6b9e029c0a7a84d0efc7843e4fbf212906477bfecf2338d359cc307bdb87ae0908414b345b8ca543a66f2bc4acad3f93d92728b05d0a04f9da48f231c82d23297fe6b14c1f80e36f8c0bbd224192f9e3e0d1708c6008599c17427219a7a79f3ffe14ab5c008cd60ffa390313e0c8a3bdf5beb32ae8116076dd4f5821b3484010394eb9840438d0e0f43be9d54d6250f234beb94def3c40570ad28f321e0c3d661e0bef41f1fd072a09ddd4e9240e3bb4cc4ef64f32cc291800b849ff47c7e014aaa74a964ed1576045aa6efea77087c1a6556ef1cfd5e209e44878864926a727a9357b564cf263ec8679a9dc9364450d6c975b314474095e320cb65cc6e50b0618086d3c21b670f3747ab72b03c721806ab0058fe4e1c17a1f6da57ef3c9a4736a016e814f70c1a24b9dde97a342b4d11d7b25e238ccff7bed65cc6bab42f575364463e776c6cdf87538818ae9d1868849dbb1d603072e435233ba66bb8b434a92e3f8e1150cdfa3ae7f0bc29e36d15ada20eec357c32c5cd048e25055d748d6fd10157c3658f41e23d4d771a66cc50313eb1ff82abcdc1282c645a7eb2894f4c9797f9868395fe56e485f85fe4d228cf82114677252701f398a720070c48b9edc37ff8fbda1c178bd67f5464bcf9801dc40cc305ad1b6b37d747b2c5c18d1c87ded2f9750043e3e1bfba796595c1e9bd4e342bb3b0a79794d8c07820b629d68c58bba85a7c98f4e3ab08d52ae016f8703fe924a8e668404f0007ed8996bcd601f27380b7a3d4d4988dadaebdc136eee3bc68dc6db5c39f950456fc6f508b62e9a36197447ecfd707a97bed86a4efcacfcbe54c4cba09ed9157c77fbb2e6993c6533f83f3d2104e85c786b6f75b63404625c84996ee301c1194d5145c1a0f1ca8e00a17582c315d89ff6b4b227005f441360059cd8bb62517e7a2851e7c15131448d808e0867ec60613ea738e5927e51e4901edb05f7d57acbe1a2c44bac297b1cee91077ae1db5b84cf1e125392d6ede32ebbf6fb6fd7aca761ee79d97e65762d5a224901b3441759004b873d9547270efff35e218318e7426b4f7802941365e43d5ca68d0b053aab3c2450b96a86cb3cacae0baf9de2dd7b97324e69848cf648b772c2e772be6359816ae55058b5f1818d48967f704505928c1c58c2949b9a3ab020a84b78dcfe05432e1b75ef5fa93242047ddd376fcd8d6247d5845e66a72a3fa284e6d972efa573123263ea70c091c8541603d11e22bb46f6596f898ee3e4fa94e135e3ae226e0324861ede129e6f40e047c852b1ec609021ee6bbfcb9a843c772b6894d24613d550907fb36f93dceec5a58444e49024c428cae37494774cfbec49b937191d025c16e7d1d85c2f88677e6a64c993522b1591df46631eac8278d9aa31ef170db4ef970883eed55f0ae50bea40362e6dfb8179eebbbe2fcc2ca2443e33f32038fde735454defb168342029f03e6d0c285f799a7dc5c610c471e784ed40763858dd6922a879bfdc48761aa7562e5ff07449435e4d9b234cf20bbd57c4742a96cd44de29b124ed1d4ee1f4c38d94177bd95476ea7286057b7fbde36958c0c3f89a3d6cf46202acd21a6bad1c9f123674bbf3ab8e857dc692461f4e5532691244f4dc1d2fe7a3f1b184d634c5bc409377413ed4397d27dd73efb6a42e9a821ab802900d1e7988d3533b2ba563ad3e4a5f9cecb5d8f8f8f273cbc9bc122a8036b3a61f2daf6ff48a8ff3d9cc59ec6ff171c34e81d4cc3c0ae3d4f137c1df007a79f32baa2322857d682d67134e0897fcb5b6dd98076c285c1be5c069ad831a994b9803c614e42ebe06cdbdc0fd55fd47f668e5eea90007b08721af47f9a5099cc261534e0fb9736879c027b96c7f04caf720fb603e6a043cd5270d5cce123fc419db24242545c5c1be416a5c304767405fe36df84440a3a4bfb28548a6b60fd6a46740ed5e497939b421e67fd0c63e204dace01a74368c55cb370d2d426b129b60ff134b77257104acdceb7edf8376d753b9c1b0964f0cd41a7cf28bd297e9d386f779d9548d81856c2201fbd07d1a45c5e2be42c9a640c046c765f754fc31bb2a38ddc9a590105f754dfd98ca1ee76fbc64c7a32398930b54fa5f7dca1a0944366a81932972b2f7fee7b7cba6759a9ba7ea050d32c8102fe83909ae496aa38dd54002b743981c3eabd05261c6673c80e1fe53c14b8cb448f3d8eabc789f2adbc869ed5b84ae870bf16b0ba491b145b5c391a6c98d2463d7278b3d12f93fb9422fd185006e66b213f535083f79c4fe187af011a20b0dbf7cc1be94a0213ab71be70c15e9e86343928002ca332aef4ee6974ccbb8092d75f770f4796d7f5b712c24a6292a24635e6530c2d35e764f0370b2c23d1b88763d9f2a3584cd869240be08999b02cf4f039a34148961e37c1f56e853964fc3cbcd34d94fec6c8d094e15444ef524c45eb449a3ae20c7fc6f71b0192b9f50bce122df6fd03d2a764903a93f203c7a94389829cf09e1d842cdd49f4fd44003e841375dbdd4d9b74f69bfc85207fbbe29a8d1457ae34ab75b33e786b381d9f80c482de0a4bc642dad4a6709f67ac99245d5fc1759d787491d9bcee2c0558e5c7666266764565492e165f07cfd6a80b829ba381ae4263e101ddf798433510123951ed27df3f6581a61303f3d9eaf13c15def610d73408e36d0666d6aee9500dc2d88a949c82ae5874b76d03e923c6263ea8e4773cc62d0299f81e429f04ddbc179f4f6d575ace2bc5d3bc3d99b0cc8e58691dc5af3e0cab0525a4bd420fef85d73387be448ee3fbb8739ba98517fe8caa84a84116744c0987b4ef9c972440f8cb4f05cba995b38402d9afb93325e0ef7f235918be618418daebbfe6372bfddde723440b84b4508e9802636e62d3172076b6b5deab5419ea6b38c0958879ed3f39774f31cd5c92e47b1f8c6dcb93e8ae66a8b40bad12a3a2d5638f99d3b5d18ed240a284d19d020d0950e33795263d43ebaa93d8dc33a1f6acfc9fd2ef6b306a8699f55c1155493eaa17c06d7bfd272f4966eea01b2f2b60efd8780129a40453395ecc8d92eef2d82a96d77b96bcb524f87c888c75b11f319073ded2637dd6581a6e7bc81f441872085ab29f96d61390eb789c00c948f70c97285f615e2ccdb481ba39a13ea74d1bd6bd336bf1aab18557f77209dde1303cb023f128a648259e59d39cc5e897734b8f4571844cd72507b4e3b269a14d122464677bbed591443800b7460ffc9ae9bedc9153fa596f73398bd6178b3529b658b942d3f5c780b115a502fdd330f2c16fa83b74a87f214fb1e1fe13a8cadbd592af88cae66f303a732366945cdceac29698481250be7dec1f8c4dd94cd9e6703f2a04fca6a5c891a6e2329b8eb870d5d52b982db191556921341fd304313816343fe194b38360d7a53d5670a7701fd9d52c54292f2b2361cab5eaa36ebe824aa488550522f1890b01367c4ad00d8cbea49e0a29362ebb030f5569fd1437c263a4d89feadc6323fcd452c298b14cf74fcc681e1e0ee852c63e286805ce27803d30629143dcc5c572101f7417a7f4a4e23dc0804230bce293fe01f1a4af65611f468c1206432196382e4cb65df6c14f6c7e9ccec81a8138ae52f7103e77fff7844c84cf7fce6947effd913e06ac89defe00cb08e2b015cfe0a9b9594dd9e15afce6aa27e370099a26f8421979df63c64cc2c07dcfd41a3554a66d8be7a909767403d4abe3f35a164d3b1770c80139653c16859bd38f673c5a66a97590c6e1ed83625eca66d46f16d10eb2521b9e8cfa138043237d632b32f13f93d2258da4cd928bb8b495d84097e646948ea95086659f4547273ac6276e5ee3760f53ff09a2903618de900aafd6138e4d12d2a09a72856e145459314a7bdcf9ff1217dc2c1d31f7b4cbf5d3e5253b9fbab9c791c9235567ac58255556fe10a95959ffa6c8b80c1d1b70c7040c5d00471fd1a002a50849b2864d8b2442dc75a899054ba28aeb3fec0d95f6be6292add779c422407d660b67bbf2d55b9c3524e1d63e53df41d03efb12507d0846ab99598e52fdc7697dd435bc3049bb2b91665749358ea1ec1a8ab6e69259cde24ef0e52f27e312b245a528edd8085366ce6a5cf9d7012c1a996b42e35f7701048354da10d194533cbd4e897234041aedf6865583aa7bac5eac4c687cc3c223528a942a40d78a93f98747fd784036b86c8a28e4a3f6e866201d8ca5e2cd59fd2e943527d8557f33ec1c201d3582a2cd51135ee0bb3e6819364942ccaa4e2403950d990382eb46d43003ed524a6881e2939e703a810021fc32631de6fd21ea0025514b1a8a25f30ba0684290104c0c881a28a193de873cb7a3a416d03de14ea9dcf951040fb5f8cd55ca18bb197a70996236cc2fe2700193e24ad0a232c700dfcc46fa4498263d023a6b45c1c10bba1d0b0cb54b82a53a14c98d79c9f8a4ab7e738e9908208e1c6b130bed6044631fa508f31d6f74d2d42b21183b568a91464511942531d200459323074b200e327f1a5b0e61fbebf35dff8ece0a88fb5d1d299b49f30ad8755fee9834999d92dbc36fbe62b9529460f440a4fab4364d77992e8b4e97fb0c486e78c53e59aa3d226aa53d1263e33e0918e3cc3ff730292740a6c7078ac81bd8a8574d4c169d029b16a418d6ca8a3bb04d6d8e27beb4d3aef092a53541511e74e30f9ff37208f982dd1026849095afb6ff09680768750e8357bc5dfd7b237c5328ceb6b10ccd3371751bab30ffbf1d33893f992e138fc5c0986e29001a4ffe0dfb1f2c7d784b37a6a081ec03a9b26eb7f6bb131d90b3ab65b82d913fe1c3fa34a3d99cd5a59320d922ab8fe32e41893d2896feac8114076b83384cb83c90a2e5fe67ccfd80177a0b6e8befc1026e90c028813e8378f863b29953a3f9c88d11611d2b93d350b029180127673136c89c17a1c5d0606d43309d46d4f0107a247346bd90d20fa8431ea8935309d0f63f5be4a4ec50534468575474acbc79cb4c80e6211fbbd3587f5ac6e66b402012432bc7c7cff7cd18b7c7678cafdf64fd36a9fc0735e4c599f9cd49e18a05432c5c9c4e302465f11db7946d259d9d4015f7b675bb566ff37e2c916e9d35f50a12c90d88cd3e9596c235653ff509e53dffe2936a30b3a15c53901ad4d18d8c607a2792c54c19ed3439aa44f3292e5ffa4473061d3d578e6079ab4b08f1ea82ec5ff17f378325b01839cfd644611afe8fb7eecc3e78edf985101a17317a198b45d21481ee029365c1daf416f776b71630207053d582abab22a154b83454beb1ed8219598364c787db6923ab99af0637b8d60b7501b67eedc16c0301392980e67711e6df3c160ebdffcb69e53753ae12bc97f74451b5836a1ee12b5a326b9bd3ffcbc22025988769510bd26355c3266eb8e57a3aeb7de252427679031f26416432006b249a96940fa2380cc598321dd32da9cae6dff543d6ce41f96ced671c68dfb3e2101631c9825857687b1e5a71c8c6fccd3b6852ad3023be705049085366d002fc1d8b0cf379dd27486e36f88b42d19d4f6029e4c9294885a04fe9b7106853504999c85444be18f6b2eaf03fd06166f9feb67a1db8c8fc594bd822fff579871f58af5cc0c168d48ac51ee6fa9ad7f44081d7638642ed1d2ce6cfe8dbecc3c739ba001d0d2bf6d330ce6a6938e14a7b644e8335a3cbdf80240026465754aa30c2d3bc63c9a85a8dfe6a0848542412c1ef2193e3baf1ec925d1855cc63e11a4a8606e184f70a4021cf01ba920be54df98652e9c15a7b40816d37f98739e91b4021f8a64ce8ff72d319764a04bf2814466a9644f563fac00942caadf46e251e6352c7bf2dfb09bac59306d0409f52428555b203d5361b9891130095c02c0ec527ea2330f8b0f51524843c463a0277b80ba882611d03500f4d485c3b482d04b06ddb0c878ebc39777e39eb9309f5fe666058d5143c554e58af5ec717e96cea4752f33055bbd981afecf09757903aff86b60e777ebcb473e3ef404452dab8e4778569df1f988f7e6fe9fd554d27a0b146cc0aead03f8461a38ffc634542ba2e7815f1a377f88b836682090a8aeb60d4acf2211bfc3e74ad67aa8ccdbe2b7a7c28f8513ac263d53b9b231385392040f257884135d61361d9d8bd6b6c19a5208c7b234d031565019178c268db3c02a27f1b14d660049d21a2418f4cd3715b014564ae63da4ccc96a5561ba35b217068c1ca03641d555640fb339f2ddb39a2b711a1130b4a87eb19bd3638a10b7edb9c8a0d76bc822a63bb086ee98df7de442b283cecde175801479dcff714689932b9bf2f553e664476a406c020eff85f72c6675f2931748a56a8634babd1778c8039f290ebdaa735bc340dcd22590787926d96f8a9df3d0ce7dd03b8833deb85ba13f52ca0d6cdc806b881de51207fb82ff5200df20c1219d02b89f22ec76bdf6594a2221f7118a464ccbf8971bceb739e54accb31bd0f73b529fbbee248eab0788eaa60af5c3b31f40ff42a16e275a44280bcbc605c279fb122236d6f6e8e94e6d2918f22c7b898d6f609a5f4ff3f9131b7273ab5fa8e1032836fadb61c325f36d7b1ead5088bc398d6ac4cde1eff0fffb49b85f8a13830489c7781ed4790741f7fef6c8264f2172161b456a9657c5a732a0a34bf2e8669b34286db6d8f042ae7086dada33e467badc8dd45d009784f888f1fe2d7b8b3839909d4e1921617bd72b74d22a52d00fd21ebcf1ca25c59f13edb2dcbd4ba90d8f9b5c203172167e0b3f94c4cc7c132c3080d2ec4909219e3711d97988d531f1007b73cd92eb8f1f7d1648417624404a88f4fe1564daebac7f1eac852ef89dd2f6456ab1cc81e2f0fee7015b3081df09a9de2432cb18280ead7f1e460b13fcbd92209407b69183f7fe41ead005e4c371db84bfcb0fb276248e7f3eb6df90ad32c536ddd0ab25e3516f153c882a405fab79f8e0b5576a96cc910f7c619654f249f60d44f97e52b2ddb1874c1d6a02916303c4e9aff8a14cfb62a71ce6f4a56ce18a127241c8eb377133b2b35a6e459a0ebbdc2e5f177fde76b586c3624cff57b54eb4625f686cce16249d58133d5b55743ce63b4c775975eaeef95c635124141b64255ff8c60fe23245a51364d918239438cbd7dc346b9dcb0bfc51388c221430a42dbe4c84f3d277f7b2bf83f0a20634bad0c1b8f5a45eb1db4009a5ee4c1f712cb84e39c052d5bd4541a412edb1816d11b314dcf4e332f7c72ac0c4d007b5cd243f06ab66c677098d0c2af87267e372718b8b3e1775a54e53d6fe626eecd6cf0fb77282096090cfac5e77df6f4b885c7d99ad5b81f838f116e0bde05c18b1a9d6933f74402e4cbcff9125630dafc958af3c9133ddb4524cac935fd3a42cd2574a37226d917cbdd7e079ffb43f08935bb869b4a180fe30587d1cc395fc1d56006ec454b3d27990ec28812a2da5236fe9c142ddbba7fa9c7c48bb468dd9b36a6610bb5c9133f90dc46cc40915678f12915b93fed8dcaedcd4dc9a916fd3982c569a4db08d433c32739ee5e58612d828c51de3bf83c995a3a3b3dca4eeed18937b17d01cec5e08aa45134cad1bc545f7ec0edef70d862041e8fbdfdd4f93e7961851a7302257b2000a55204d7c8a936d5d2fdc4c85eb2cd8146fe7d95d304e2db41cf6e96e6a6aded7a174c00ea5cc1f9466392745d13cc36104bcc042752c2f958df8073849ff16eb1315716288f99fd375c8dc6d8b82b56c1a5980a7fb54e99f24ad19e569714c0d89b9f994d2adbe0ef8fdf5acd1130e606f8bb618b9cce12fdc86cadc1d1aab4479278e5f07d8592ab8054e37329c3623516d228492ba9f914cdef6e484792ef31a2b7747c883329086a4bb36bf522d2d9346caffd6bf9919cc91e89564654f0da7846c57337a258c7479efe4894765ca8f1480a29586dc5c95b18688a9ce38fb9be0cca2d714f27255710fa184e6c28cda21b1b4a98354d8dc42404b6dcf50248cca03994cf0451ec4f2aec82c68193b971826805f4521e1481d84b0b90ae0619bf2258102b7888c9a32e4981ddc9e712457db9d942895c7d2f296f0ab602be9edf8f2e8abda2275e6f0d750f923981cee8a6a4fccc3f03fcc3d5e10c5e431f0f7ffb9208610a639a98f47ff3feab3c90d1e65c425f5898ca6d0bdf7c322f33610724ac803f9f85c372e4479e2302e0baf75739e295e02cdcd5ce905d08f69f0ebd10ad609bd2d182b98c6e0eb6f2ac7ce03a1584ebbc43578fc83c08a889f5355ce730d0e2e41aa65412050ac2b4ca450d3a979afb2705faf90971e3d0c7e577f41974c0baacf635ef5fee5606083827bf0ef7539bfd5b883f7def07c645728fdeabd9498c5c41c4563ab839d21e3afee2ec388a7c45177e40225c8c24e8e7605c5d34d8e59da157aa72bc597ecc98158057dbb52aae38dcdf04899d72393e4e4938edd8f8d134687a36565005d5993229b90078f2ca6f6ff74c5fda0f0e2fc4059d12fcfa2624914de0beefe320d895ecf8fb8f439cabbd73b6dbb9250aa0d55411336eb09a46d50179a60bb9640d22655816936eb04a46da9149a62b34a50d2867a81291beb9486f252ff6d78a2c01d49dd9d24599ede74f9b3a4912ed52324dddd0f29fc0302ec18461ec373445c390b7f282b9404c5cde320e6eeef3b6632daef2a4106064e62c926ac0f2596169ecd132d6ca0027f34a684bb1604670357b56e4fed21ce6a20e8a75a7fccf4ab1035abed887269a6e4ffe0fda6279440643cb9663eac53fe032d19fdfd2f8e4495597e09512e0172a7a53ae537bf5be4f8bd4720231d366ef2561879f61e4a57944550efa25b50fa8bd0cfa857e77ca134f5959b16100ef5d8472cef2f3229422a89bcc483d2108fa028f569f52256c026e7e9f002d64095022b19cd5c957175c9fca41b36b44b050c8a3904b1c912afb74f102923de654f14c314486c78126d23f6ea140ec1532397e0a192814cb7992e53f47155fb409d24aab50d6fe5a48c7d768a1b539801c75fb18f305399eed6e1bb816afb55ef23dce16ab1dbd30e0cbdff95737042ffdf04ee33c32d262600a9b57070207d5bad2f7d3fe96b313e4077f17bfc2053336945d5e43f796d7e51fd1bfad0c8cfe41711318ce01a49824d62517e64a24dd9d1c8b2e7587463430b4e6785ea7c2464883de7063fb571b584a20fc47e234bcf2bda07f9d84d28af1dab43ad37585ec08b9ea87229d7ef6de3ac7efb18c74405a1b8615214fb6860c4c1662b6f440a2a52644386e8a6ed167bd71d5de3fab3bdba8d3744a871901294da7a7e6deec1273e715f4e1fbf06ac1725233943d83783aa62f2e9107bdde40eab60dc35ea57ecaeeb3b8b5c6278e7635969190f8f22aa4940b6643290b7c8603ac1e801ba1369c3a4abe14b7468769d242db21effc2b2147828a612bd1552e71b1cff82745ec5794ff1aab721ab28b4577c6faf1379259b9a9af5f6e785e71530291cee01d7ca2db743dddd8bdfb6f8b8b02570fba2ab707515499665d9b45eea137a45c5d204155fb09036588b54185784d1f2224e28b5b4e5fbe3a2583ead82d16fc79dc5136e517bcc22f8e28c203145b47c9349653c70469c981f9f5e7674c22d3f6dd3e5dffb15d0b168346d20fdcc9f50617f3b204170ee8dabb13ebe795390646590a15813cf12fb1d7480285cccf1e44cb992b6d40b4db1592520694badc094ad7502c936d40b4dd95a25946a435dc894cd6a02e9b6d4854cd8ae25909656912e13a4107b201677b91bfbe6d29369ad3f875ba077bfdffddc5b465f26a61979277c01139eeecae103a79dbaf8f3b61afef4946cfa03962e344114d6cb8529a6fe22a4a1f80f58e9ff8a2ab299cce714c8f7e49fd552db664f891372d0170ae19368480c923b874c85ea40b6709bc3650726d19b275dad1f279f9a45591bad46c0c515b43c4fb35eb53a291dcf1bae51d3b6a1f4fc61dda4a457e425199392b0ff839a1e9518b6a1c1b329e888aa9027992ba203346b4d8adc1e93ab181d8fcaca24441c965d4da6129c3e096034bb0b45c6652df72ca391fd8bcc37d20e049e74d91e271865e71bf48a52365b7ee21f07f5e016829b0cb9897e8b04b398231441d5a8b2741db0c86a2c1061b1e6603d2cd26eb2bd6b7295c26858ae0ffdfd02ed2a59cbdea490aa2847022534f9e8d361dd4d898734b55f1a6ebe366531964e5dd0856ebd03be0bec65d279715577d8baa694dd35a75ed7781d911432d5ac22249375e9541a553610b4fbec72306cfa6b8cf8aedd463eac513abb7546f6900ef918a9bc57986882849c208d4d00237d4776fc2fe71d7506ac3eb43d8f5beccd01349f076da25ed2b1e10c67503a81afd1416cd19b57ac4215150f4348a71ad40e63c34f9a1787744a388a9eca6dde327bd38d400d8169aa2a0ce97807f818b65048b2051db2421ba41d9221150871edb49adcd1340990a44b3a4117cbcc66793a08c44a87a4f763f6dda4235d17578a087d13996871ec80d1dbb2432d297152908ea8f046366cedc9d329239693068e839c0eb670e96c1f3e198aa83a24b456919ddd87844e0d992578cd433af2342cdba8a462a1026c94a8c648c3758494d279f83e7024a6b6ad81eb4e0f1971d7444098806ae93c3d233d5b3698e26b3cc8dd7f9b36ccffb240afc03ea5b34b79001dc26e52991c2817d57e9b44f34d9cd366c3bd582c984b5720ff488b5de0daa4152e4ae316cd54903168aa44e750b7271f35ae80f87e96468ceea93f4d43943e523f23c49b9176c9d4e819d7ef5a13eaaebc42e363f6fadeb93ae030fe77e1d6f4358d04905ae293cd57d6df7c0a9da0d08bf634cabeff0979b0252ef532a7ab3d3886efc312f0d0a90cd2be06cd083aed5dc46508811885d9fbd98e00cdd800c4aec7c4db8a226e4c81cc70dbff8db9fa7fc8c61fe3d2d298fd6a00deb0774d21f21077f862f65da8b574faa835a8140f1515dab481647ae09ee1b204cc14e896e3f4ad1970f4458baad4dc8b200b74ddbb9a88130678f0c9d7b9242eed0fc1116a234b9281c3934846855b6d80001851f9ffcb1e3ef663aa77aa09751350cf3a0c4589fb455779d726fd40fad630ef143e742dcbf3fb39503d94a2212039334ea8968a409b4c6981926dcad33505ed4bb85b2cfb31de8f31df7e18efa6c084c2a0d56577be420d17f984bbf3ed3e1786def8fbad20b1cc840b401b0aedabe8590965dec3da307a3011ecf52218707f1b073035d4f2a191db63ae31bf8f691214e047d414410b41210d39489023e6a6169b402bd197b6d8eb2451badfcb0da9126b1bc46bd9ed792925564928b289c4432b5baad8e7ab88cbaf356e205476f45365a4edfe4a7b9e1e77d129e9d9eb7e8dc55d7d0fd3bcc850b1b2cfa82a666091f0b9111077efdb46323009018aad4f8afe9e086133321b5646d4e93a4dd04258491f584570a133f6c9e29b6f622bed41819c04b5e889ff0e26a19f067720500541e5f743d0b2a0f9b0d603912cc8fa54eb0e7967e08071de92b11bc3a7c400722c48ddeaf6c81b6202d33d87904fbad6878e888bfcf3a3a2bacc61f558d09f048e29e700ccba1641ade38fe78ca4359aa7bfa3c1d266b965440859883880660ffad0243cdb6545d344526fa6097a3ad20ed7fc1775e6698af76fd1453738c8596a7657938c65a6cb74192c248e0aa2d3b1009dae2dca5aa8b4216156b53591769c2c22691f52f624950377ef96c6df43fcf6c90450c03b6aad7a52887ce87fba5db75f35056ec0fc24c05dc30fe90ca1b6bcf5b6e77db27f12a06c8e4e0ff52ba0dc6dcfdd0cb801abf8ed99be7fcbc3623a21629fa9b9aee28b30ea8275456cbec2318938f9a6d4ad1bff03b06504ca78bb3999401121120423b0d501dee16f3a13d52d804280ed966e9c37e738c290913d1d1f9dc41dab882505c065bbe57c858ec337121889ae559f5beba40847b8e6bd9be7d0175cdcb3022a01921294be079e8964f968fbed0a1c422b68992eec3dd9e6c885e0962c5dcef2e26117e4f87a4039c93dd88ada817adabd373b2e12b12c81046f95ace565ec680787d12ac94ca2c40abfe5103f078fd4cc159518a3f21bc90b6c88033abf768c592012b3491b5eb22dbd7135b7399dc8c4a54485ece46d86a00021e6fd7ee399dff7238727d9f7ce7823fc383b44bc00a89000001057e41f377500ce2a005aa39a52a905c30c9644c36c37eb6f1b694d2421929288d0caeeee1d6c0820080a09369e43357b402e4454aaad07aeb22ccb5a225fad2fe546dcf23e95e57c5a2c7bf55a37e65cbb116eeb6dc4553f50542f6910579c504e83f575419a47ae6d286e733799b4be77b4511c05766c1dfb72d268d39a482ae56e326d1487dadc888de770233b5c87760db5ed08d8780ea7804d0e0aecd8475e731d4788bcc6699549a55261d4e9743a5da122f239a34ca7195337d38d329c3d7854d188111bdf91c3d3e136de0e152a02395c87532087eba0808de78c8a800ecfe114d0916367363b021151d548cd85247a7a554b7221e54d766b3bc6d2b157f28861250fd2b49207b1635cc81e98532f8fb995659c469aa4699a0bd95cf39f1f91489af719f951c9616691bc9fb74aa3ccb7cdf12491366a4876920bc94efaf915dec86bf9dcbe8008bf39cec4d8beaa1cc55b4315fabab01cdf0eb771947ff4519a74cc33995c733c6136049f503a24971f7c143879ccf3fe50e0e433a6b5a63d930e2072b0186325c75c6f1d924bfc5fb40cf325a7a1a1e93add759dc94483d5cc013bbce4da935eb314a45b597b26af1904e2ef70cdfb486edaff459336b6c3e5ded9e1a5bda3c3a5cb8fb4796498dfb1a14ce570bc75e8c871b241a1a43c9d4e24c7a453c949dba9b4915c926a6a6a6a4824128944aa425b8e1af29dcb2c3bdc7919cd68e433331ee6e5feb27b6993dc3d287b9036e9334ef2cd933e729c39f2f20c4dd7759ec54ca7f36ed2d0d0984c341a789307711ccdc837d3ee3ccb971d8ecca1f3be9fefe468b45143667ce442667cb47fbee46ddbc8fb8c7c8966a3d917883e38e7b8192f0f6509fa99874353a4f1238f0bc7718ee78ce3998d1ab2f98c0bd97ce6e749de47a5f7adf01979525792dfed0b441f2327799f083fd29ccb19054e64981c12358355ad156218439929e3305d61857b87343d4275b3bff511797cafd62693bb75650df89159b6513999772e24dbf4846d6642b29ccc473eb3cd6156b2bc8fc85f994f92c3b9edef6788bfdcf2cc017fed5207857048fbbbd4479e0933d906a7dedfddb6b63f6d1ddbd6efb63dacfd11791e55f5a8c7a322499b45961a1d9ee7709b1dee9d96935de3743ad73d5175afd626d3e75f4a736ee7704ed3a5005f49c94d2eb7518c1fb3cd31e566dce47df9cbaf3f5de2469e0832a57dc633d17836a60c7b689ce69b0832a539a73dc7da731ca933bfbc4d6bdfe13c4448390f117e0ed9eabd5a9b4cee5f8a73ac336d47db3df193fcecf4c4d73b477b76f89aa779e769c7334b7d42c931cdd3b5d725f979ed9d6f7a8f60c78c93848c1cfbcc7246258799c9e1c867f6a499196dfb23f29a9bbc3bda81264d3db34578bd3f22df39cee4acf5bcab998ee77aef788ef7ce0e1ed56bd754efe950bd8d7699e5ecd89ec3c6e601283fa14ea8d3e974429d4ea79ad3aea9a9c9a222228208a9140f9a92cf94f6de5b25649baad79a0047e8cc3f954a454425b44396d208aa4ee48de575cf4ce7ab4faefd9980e86b75225335a8baad23e0f21f749efa04872930df360dc4f40b69d6d8f5b655bd711bdeb66d43610c6b1310bde6b453a6b9c67bc784b9ae4f78ea13adf596f568a4b5d67a8aebbaaeebbaae6bcbd9677da2d1089f58397c7db2016102a2faa43e198a72dd3abe2e6b09c15ef7111c695df86ecbabcfc461d28ac5864b1ad5609d65d6e1ee635e762e07ca94d69cc669ae3d6ee330a7dbe6262072c03c63e7bc6deff8cc4f121feff4e464474173ceb38eb6b96ce793737bc794b16dcb7934721cd98d72371a8db0ad1be9d146229148144baeb9663938e79c7d7354e69983726299e940a9478e67960333219b73dfcdd93c472d44fb96a3371af00050e08c54431a719605051551aa37f120169509583297cc2c4d904e9929e3b0874fce9d320ee35376726def9c4e2513cd4ca9442275a48e4422913a1289446a62435dd7bdf7661d5c54853b1d8558a10af4d20c50324c74344e33e3a51ace2f2f9b462a5cdccdd7c8a1733ad3dc91acb56b9ae7fde5253fd2f4b567bd77b291e7435ff34cff3239f49a124d37532a651289446222e713e727cdb57bf52995bd70975ca76e7974c95c3223174b8c48333ef3d578c9bb0dc3e69c73ce39e7dcf6d7735f89cd636d37e0e7f1e61ad73857c335e0e7352cc9cfe33d821dafed6dc9638ee11aaea6c6b9bd43836bf2fedcd4d1cc904a5d47229148a4d16834b2ac254e270fca1ed775afbe326579fa69640e02b6ae58ad5f7eadaa020b62befac58298180414df5082cb4a9d935c739c3decda4ccebbc8696be8387bda945d67d7b09c3d945601e52787bf15419d5810c38298dffcabd126ac7dd37bc7e478efccd4789bb6671c3acd4ca9239146a3d148d39836c234cd711cb76ddbb66d4a5cd7755dd7755d396b41afc5a0bfae4b859387f2ec7d31a8c8c9511bce1e396fa718249fb0202606bd92189f0cf90d50be7cf3ebd227adafcb354dd3b4cbb56bbfae8b46d3d775e98efb32c0d1f8d4bfaeebd2a0936a4ea85c536332994c264dc318634dd35c6bad694d6b5ad39ad6b4a635ad694d6b5ad39ad6b4a635ad694d6b5ad39ad6b4a635ad69ad354dd3b4ebcca7da4aa75f2d79bedeabf5edeebd5ac3af6ec48990b832cefca4e1cd1bf9e5694df34c6f1bc76dae392f795fc78d38bc39b7f1fca675e7ddc7f3da3bb71c1e69a7dcdec13eda3b996b8e233b8fa7fb369c39f41349cbb4fd9948a49c73ced7454343438384ee9ce3f4fe74c9d3af75b7bbddedba8ea7cb7ea0f1bd2ecdc3c3d3f1f0744fb895ab739ca1aecbdb38ce4f5bc937aed397369af1be517612c7f1709c6f9b6b3ccf397c9e91c6791fc76d9eee356def6427ed9d93733cdd73be759fbb3f655c756e7fa62cebbaaec3dd755d34343434563a9ed74afbd325aeebba4ea63a9eee95c46c094a9744612b9df8de2347aa8c444ee5e68e8a473af345ddce6bea587e2df4912b48d94311a492e66d8e8d304ef38b47dec7611986650f18611997ed1c8e738c2dce5ed728e348a512c9671c660f20f98c930240d7177baf0af6987eaf8c3b526e94bf955e556ff78a04d59d3e5d84f95957ad646a5aeb24ace48dddf3b3fcaa5424a85696a7923f62102837bdb3d680218f1f30c31be994fa74826774a2fd1467d059047d743dc5fc0785c27c741c08a4c7fab9a91767d070688b977f38b4a58b4f41de548f3488fea5620f3a5ed52a05c5577780bc217df5610b105feb1627be561f6af5e13f13bee6e751c9c0b1072940201711f9435341ad8a3f6827685135dda4f3fef4364dcc2df58bed14201079edbcb9080064a0231014ed729172c75709618c32ba8c50a6c9346574195dc6785f002499c81f4c346fe241b41d25064527f1090c7342b4d06210c33019cb98fec1305874ecd9b37c2d8bda6b518a61f1f46368afd909d9013f39ee1db9c8d49cdfbc22b7f8ddaeeaf44a29a594515e6bd3b83f7ae50a1592a9e99a47a5cc1e5664ea2607fa8b5cb8442f514a6e0186de83feaefe542b5510e92938000289580c51c6101653e4b5c9e1f2e6f27bd9a9d90a1f3b741282e01cf3f5e2579faf594ebdec3357e99a471d664394d0b7f6bd7f616e3d73cb4756f791da86d90999e3ea61bcc2ce8e71adfe935dcb1501d187e596952fb73c1264caf2ea7d33bbe5e11eeb73c61b6ef09a73851de7e59d60fd7a28bb11107d58b7d6bb3f24c8d44f0fcdf152b1b2fc8d41329592365ee8cf86e888dcdf7da29f9e5ba239452cc1097903ad2c0f5d36f1dff55fbc3e07ee18544a43df09bb2c5306d18b53998219181dfd337da954943fb434c91e533c4a8960c412e2432f2f7f988e235dfe8041e6dc500a492987d2801642cb72086b85a65b6bad96ad134238e70a20adb0c231b56a3a06da0a1dd25aab8f84f3068c558710fae538c24dcb6ee7b5be6bbbbce87dd3a35fd7370d470f6762d2332f7b77ef40873c1e781ed3cb4bce2c52ca29a594d567ce225dbc28798779a9e4dde61973e959fff105c3304fc9acd999717b1d6f9bc95a3779181631e831c6c8420ee69a29678f39b3f098dd9b9bb08d691ac963e6344dd360842360cdc3de671dcb91d43e73b43fd73cfa87e408d06396c6eb8916839e790647d0dc5ac7ecded13c2fd93230af2cb261f65a6b478e799f9ba696980a359e731c719c674fdbd42da7711ab795d0b78e7123c7dc3a67b19192f976e7e8a087339d47e734e80dc1bce4321b52f2ce94f767f9e733b387cac14cdb292b52e33bcf9cf32d6282d9837f4d6ee1ecd1d54c851a87b387bdde79f06b3ccc5361ce1e5d60a39a9cf591c7b46dfb92c4a2a2a2386abcc683b347867a3435cdb33967d9b669286d17a9e9dc7ad671e791fce499308fe49d87918a9c6adca43dd4e61a3bc91bf9c933913c3c2a7272937fdb2e5273f24c359ec9adb7b9f6ac9fbc1a8759919acde433b9088376b2262862c881275f9d027df559abdd3e1e9d96dd994e753aaddd9f8c143a8d39d43a9c5f0e94294aa5c3b97de24b2536ce2f3075fce30b48e3252ba47c761aa1b7a80e8d97bc7a3ad9b563cc7f74d1f35effd125522513956377a25b1eef577225f2774c8eb9751de30ba146370d6628ec6c0e1f633943c7300f6edfcd2ce4688f58f62d3bc45878bd64273bfc243f1ff10afff3d9617698f5e488617642e7307b74884261dbb91cfe8c7f3e12471c231ca106931ce4f6873976ede68baff787215902f43e12eb899f25f979bd35cf7c0695b37776a2e715b66d85ccf1e64d2ab79cedd22ecd370f5fbeed2f023d759c516c7ff4b1ece5792592088160d4b19e159e44829ebdb8a9631efccceb994fca9b3acc48d931d7a8cc511cc92f0f95f90fd06b24395b4ef6a844763be732796cef40d7dcb4a193bc08947f8b40afd138741a97d9101a2fe958d7188db739cc7268f647e359fef9c8cd43e5642f79f6921550de8a54341caa82cb47b78eb19563a653fab8772cfee2ebccc39b5b4fc3b46318e6d6fb68cee63e50a67e3e6a1dc22c1f3d734c73c9cb25aa631dca1456f2e067effbc1ac37331dcb33bf1e0675e20937fbc14547eb9777824df2f3996b87f286c32c8c7a7ff2f55df2d846b73cca1eceb4f0310fe2486d23e6360763282e3b1e79d6356fcb3ceb232f734dfba77976cc43e99d33e328cdb5738ed2768e8698671e4af30c45f2915bc7345ec967bcce73c6309fd9dfcf43cfdea7ed9c92a3f2975df3cc43e59da367509b8f3c3be63cec33dd6bdef98c87bdb4bf9fce91c4c73b8773d4e6dbced19ee5919739e76dae79f137b75ee623cf3ae7e96dc3cfd990037c749fc8137f7efa8f2d7474587f78d1d1a175b7bce8383302cdc49a26f4e1bd3959a622d5991b6eda04a5d7ab9c965a4b2d4a3f6ae54c30bed0d4faa4544a14a8c7a716d5b1fed19c9973c98031a45e75e8d1ad639c2eb74948741955985bc6276cadf387a582b56db5f69228c5ac02e8a3eb6cd69fd21873b6282d9f994ef4cc424b4e896ba65bd2aa63bd9ce8b26628c8fbf337be10b474e83fbcd0d3a5943a3ad1a7941185e9d57f7efaa10a2844effb41217a74ead7bb7c7ad42b72fddad0cb50989f2e72f7953a08b8668070ceeb734a33a8161ff006a3d3482392f8724eb7ee93459fbd83ca895ebdc7da4a3af0f37627a9ee53bfee24d595705f7792e83ed947ba7b2c49862ac5c3a67bebe66c5996913cb19b1949a5a61a2a2df089e49b97af6bce39e79c73ce4cf29c4afdc6eddccd38374332a28d7cd98891cf33a49919e7f64e4dea2fcfa99fa9c134259a52a9944b99a6542ae59c9576966539e79cb316f7de7befbd77db369b6ddb463425d2e449a5b89c53329582598ca4c8a85297fd5256a7dca4f565d54d4544259f6cb9481ccd88dbb43699dc5329aee3eed5da3d95da54c8e1364572d810195d9abb5cbbf64e37ea4ca8191a53e93433532a954aa4524d4d4dcd161b1b958de7b0f172a80218cc978b1581c981094c1324ac0c3682c4454aa9e3c0cac0339890428403185c6e28e38449171714717145882e5b4c2b3a0e035280433d8082840c9c10e205276fecd004881fc63c6186126082c0c8bc94524ba188848a888a13551122c2c1961cf42582077d1f0e11d980de1668d19de9870730425cd83083184dae884b6881c50c845cc0c486214c0c2e4a18a34d5674a7a3f0f2465e59d1354c04610855b080091dca58454429a3063c54710319a02f30685f5a90cd2752d0262702d26a04a11e0ea1f1050d2b9eccbd92a91b747e3884c613bfc2010d237efec868101154f370088d175420eaa5c9a6ac3bdd99542b12da8821aa562a125469c0602b9d52eb42cb60685534d994756759161731641e9dce265fe5cee60c28fee32134e1c05970e4ad17004c3c6c2c1ed636b90502136972cbb24804f138c27487ce2822c874994c9e3a03ca7faa38ea25e594d55eeba5a0458a2955a200820cdac08204414d86c2047104110e5670db186170e0a460fdd09665390c7acb0a23cc5b965d59b9b6d229b3165481c9703d1c3a03888b981590418417559a0019a9b2c30d40b812041161c2b06207f6c6a7bb3266e03dbe46dae33f2a29cd0180379ee369e9bdc21f97d3bdb15d73ed08bd071014944f8da872c30f9ef6781c8923f524a3d22d2a998ab5d69a85fef2ca88af6e61fe59966555ea5654ab56b776cd4ff7dc57ac585c4e25ae3fe74faf2fbdd63cedb5f3cd55864bd249aba59fa67e23d4a69482716c149665ad6280460d2b1dd05001bd6794f92f95c5e72f578f89792983276880410a315e0044100f00f5a0458c2e5a48828820d24d2a29630bf06782fe68a33dbaa94b156070f91516fd412107e030c0b22ccbb22c4b5f6c05853603086650f91d6444424b87d2af7493ec1231371e3a9115d4c10c2b550445e9a2052782a06045105a507141961b74594111c3181f3420c443c6c789225e1c6be3e7101c40fc845eee8dd0fbae7b3738c2f42b7a487c668ff5d6a79164e734c723bfde03e10897922b2110257a42204a4c7ff905ff6e8ef97529b97fe3b6619812548e7fdcb9aece03d6f3f196c8d4edb99b078e30dd676fd6a3e61ff4826473ecd9f3999f1d5b6c643dd4c85e16cbde4ef6ad73bb772ebf18265dbbc71a793b56c73f057923e52712253dd6633d970f2ac79fe4f0497ba747c9fd6b1ff9cb731dc7fdadf083c4e7fe759c89238e2439d6b3c447498ff520e0f100b635205313f3e8f7835e50d6fd472452c42ea6468eff682b991e9218f3f5fbf913029fd3fbbb7973ff6d2b997fb3e821b18e1df75c6e824cf1902938bff8c59bb37bb1df8d33ef44e55c8f7eb7089d1950fe835e86ccc881e8f21e12eeb56dae49a6b0e399a3f74c57c111a6f724f9f9b84dbbb3b8cbaf5b8f8eb1f1589887197679286cdf3530a2879955e36116adeb77ef58bf8f8a8ea9f12814ee63693c46f4d5e1c7bdd9dd63fdd3ad647ef40d02813f575668392116204d431c7d91d662c00b1988d4b8428b1d6810824b0e788822054b932862e05083a171839f1d8010e20561644902076c5cc08b1b63e06042081aac882105859d317f88641451c1c40fde00a383a124b4208206656ce1820e785069908174c0172c80610639d0c00b193f33c8e2c50d4353f0408b1e80c161f4254a2f570011751737b4fc415b6badb6b1d65a7ba9b5366b09848da3852b3de80086052ec0f123a5063f209185162a9c6871c50c20e07863276d78ac8ed837d75abde4e06bf52b53da8a71850c443b80011a446704f94c8f8215384059011c64b67811a43a1cf242c4d75ac6d7ea2abb5756340c423b2656c063d92aa5e3482caefdf1ac542b12a853aaa7432a7e4ec9856e4b8271c50525de5a99041460f8601404183108c1eae11756b83c01860d164646dd3cab7ff20596eff170e80b32fe3e1cfaa24b14580141e86b1583944db084d60dc2e5891074f8212e4cbcb5eef2467af1d653d62d4fdbfdf1acbeee6e15d4c3f470884b94cf1e0e718192554ea8628c51084e1e000514757aad95ee54a792ce4969e751d9bd431e74c6d10412d4a5748c8bf7b75ef787391c42f795a92128c0910792eb13dfb27c4ebb3349f80f96f1d5ab8ef7d671e6bd5ac36f07cdcfcdbfeda74f78637d6aedd3ad0d7a62d4cba7ce5098d50de004095fbd66afee0108247ef50f4020d4eba88ef690d48f7cb44590a9cc39af6e82bca9ce7999fd76bcdd78e6792714ca396f2a5358522977249594521f5634dd57a66af50f0ad54aa5bc91d2536dd198576c5f99aa96656508643eacd7b2e0fc81937a424737c0189d6309f1eb55af65d94d944981e106ae4f2c5344b1f2a787534481622d0482fdca21d7a7c7e96139e398fbe381a4fac497ee40be1d1fb78ff02633c12df8c3347bd87bafbf7513dc6a3b5b45bbbff9d363f4eba7ff72e9f5a28123f3c7e87278dd8458c20afab06ead9be68fd1c6993dac733b3369d81ed1b2bd61de1ad0f18f9b47a6ac1fb1961540133dad47ea5adedc7bafcecef57cfa2fb57a3eac68e9b56e2d53f6be3d226f6ee48e1e9d114eed4a7923f7a7daa2b1c55bcb94f54b712090f9b0ca16e211d9c37a0a0a1ddd0063344e2c21be7506c81be9d68ff8c89bebf6baf495c4979a105e58a194d22ec8fc473f9b0ff350fa10b18b20c905981985a84cd1ec96132e6c9091ca2db6bc94130a9e8ee97f165a7afc71f97424d531e6d353f226fbccbc1f36bf367f5aad0bf1cfbcfa4765b6e9b40295b83685fea710962d5e26d1241364039421a85cc9c285bc91ff73f39844c9ea06a467ee850e9f397e80f5babffdd8a9cdae4ccd3b915c2e24caafd0c787613604058f339f9eed4f0eb1407f2bce3cec391b32a9c8542753d3b33dad681ea61579837dbacc86d43da9c89492f85fa45efc2122f4c2c94bbf598e8e2efd3ab67be2bcbca9041c613a9e114638ab56ef878279650ac111a61b000efdcd29532615f840b706f14d339552a956abcbafe3eb5e97d3a98273b552b99b4c73ca6bc7ea5dcbda57a662ddd029ce8cf507f29aa0033002e451422afa90fe790400804aa656b38704e613893ea41b51027a160f739029558402bf08657b0920f1d2a595e82345005da74b8f4234ff45a1b8041c61c61ce44ddc02a6a4cb784528fa9051083a68c9c1cb88e5077004e95f44e28574f49ee82fa451f0f8710b1d85a2df1b97cc1f4edc994557ff68bc054011aa4f0f0350840ab9fc40a915caee10484c0115cb45883983945a6badb5ce90af961884be56d7b5d65add30c909a440ccec01ffbaacd51224c55bcb456ea1801d14a0030f3f2ec0e28b1e9068a207576af8e9610a358aa8c24416451405d1a0e9a005530b563bada773a7819e52153ca5b40d6b7ba8a5890a2415364e2aeb74e329a59452a7944eaa0506a2a79452ea06b52ff8f03b1e6a81818acf1e6a81e1ca7f3c66955a73b0af8e44f575f76cbfa7b52b36b445e57c108ba78e44f5742ba133479f28a97843cc5442046178dc79c52a0c192d2d1069012253c6b2ac1591960fb5bc30037ac9e878a8e585175c28e3081ca74422a61b419429025383a11ab058008b98184c79020a1b64c041111a3b69a33a7cf2558b0b39ccc42a6d6ca1174d55196084570b59f46f8a2053d133ad93526ad93a551044a662f637c27b6badd6bad4b275472804e1cd1b4b8c6c70ad11c5c233d0489941bd82c043145b94f9810e52e87c2173441718080141086130a161040500a740ebc10a013cd402248516a026ea65467e034724b6f0a18b21aa2ce1831a43245001032fb230c38d2aa87ca942bf1c41c2327060c8072b5f2c61460c6e30821139885963882d6d30f105caf525088d83f2432d40375c286fe44aa7d40fb50035c1a2080e27454429a874ca55ee6cac1405e1490f878aac0ce0e150510d454ea2148ca54b9fb00d1b967cac8ee14f8f45298c3ab188e8037a9c22a5c8548c9e742a32f5d363410f3af52035638341b2e7bdaaa2bffba6ec356f7993737623f307cdb57a900d66f90f474cc62ccb5c08fc6ca334dfc97c7ab6a76bd9fbee7dac79d9bdace39fbf6c154343e6d1656de20179e4ac3b13166d0209ab6bfd0031861551ae58411b29a0f2b3831a889e18834a1138c08063b022e79c73cea214fc9cb368869f452e14b930c6972c7c3066074474d1c4ca082c9a5083075a407181172d46b8c9c552d0268f238c50b6d65a1604b156eebefcba6b81d6e2a8a10c910d1a067a07bdad5ca0b55799f22a773663a69471a28c0f9ce0c764b8d8f8ccab2e1a351d0e9501fae93892cc1314181b4aada539e79cb3db7cce64b8cc596baed633efe7b1e9e14c4a664ba482318d2a9091f2d971a496d06fad28d4574791794226c8c6e6abdb809164828a34b182cc1ea8ec70680c97cf18e6d8c3b02b4b965d598673e699e30c3b8ed77565d975b18b79e659c79eb597c8941c1ae3c4679f3241988e99b23dae37744f2db71bafc0d03108f75cb03242702fb3d0e899dbeee150991b5414c0292a2a8a23c80a3f491415151505d9b09b5760e8cdb5ff6098ead1cfbce9dd8f9ef6d8f61f0cb3248638fe234151d1df15183aca75ede1509920f9df098a8afebaa671dc57e784c8b22ca3de860c95874364b83ca6f2d871ce39e78dc27c277b742c7bf49cf9cf4fef5ba239cceafcf9aa61c79937bacda33ef3507147388275383406ccc321324f1ee3aefbea5d991bb03b7b6058962b01d7b56d5f7d1b33e55e1e9429ccbb373b01d78d4a017e752199ef54d73edb0f46a372b4afae650e87ca04fdcfc7e97d4b7e7a963d7c79f67e1e5f8e33311f8f423882f5cf8746384466cbfb64d2e60621289272861b53ccb8e2839429b240624a0f72d8011b4b8c6c70c5e1658791171ab64aa7d4f170e80d1e6881a3935dbc9066a5538a69e34757586cd269ef755d1cdc48a2862db2604283252f0083862741b8618a1a8258561853dedade8a3578cbb22e26c6cb1b59bca18507537653dc614201c044dd5751ac5e302446085bcc392d6b255324c894c9c67988d1a2d2f0d3af982a6c151f8fb0d838a1052e9a54a9a2840e55827c291d60086f289db2040991c48f3ef2463a8d3ee1fe60065dee19c3556badd7c216b6b085e78578ef78979aae6eca4bdeeb4e39a5636a37f5697918f66f7e955f1fef8ffae53893524ff2f3138b96869fffa2cbcba43a9328d19ba482bc108b7c0751162310f85ed8437b77a653192b80af0e4ce50f18048a71f2d0f5096bf98349944f7a74264d54d49b78901762519028944a00c3287504321dba06815c9f1eeba727f9799f1ef83f316e6055855ec99bec32bab4309f38af92d0d7e15fffbadfc93c3b99ec77e6bbbf8cb397f9f572b267fbcb3b9663d9837f2d87d9f572f676e2b53cf32c8f274ccfbc09339a4db6ba21db106a834a3dc156cbebb5baeeaf3ab6722cb7fbdbb15e77ac67cbdba95eadc3ace69de939da35562ba17b576ff70e0d010f1e1e2b24280d010f25f5727cbd7c7974a5047d2af38d15ce20240413a12b5b34c9a18b3156b061051358bcf0430c300c3f4e8ac0ecb0450c9330c8c0ca782022c1819804b7c41258c6a082c5081e803e2844001eb6bcb065891db06012e4d30f31131f60885e70c118685cd1220874c8019fba8a62e5031e3ee0e183f959af5e3d5eea365ea7318ec1e4fde1901a4eac11e6550f87d658e2d5a09286105c7cfe925b60feb2e1c327e0e15098327e288c9530367c182c8f3f7aa442ad37729cb1e7ef8b54682cb7f6e783f717b54c277a9609d1dc8af0b1859dca14ae518a9c734a6f2783dc9cd8a5c43df3776e11b184e938723a9973fb938f638cfb9b59c9bfe8252caf67fecded33bf98e18dcaacfdc57f80e5717f399647b73c4ef9f1f3d17226a4e4115bd3ade5df8c97fc835bac6f46ceb9bf394bfb835b8458be2375f25bbebf24174cfdcc836f3f2b4194f18b5bffcf0a16de5fbcf23b9ab3f0d1fbe65b2f31fd38259660f9dcf1f3d93df3bfa865b7a48f741f392595b718bbc49a7ff2c373eb681e3d468f994efde8993625fab0dcca8468d13b2f3bf5689c6479167e9432425d878f39ffa293fccb9c34e2a28ffcbb2e1f6dd475ceadc7226209965bcdb34fdbd6a332a5f7b7b9751ab84548f41d4d277f8cfb4bf2f396679e3d4af158442c017ea672d5fb95e02fc733c72262095f7ccbad7f7067ffb05fffa2dffdc12d65e89dcb2dfff0f6995fdc3e33ee3ba5f69de0f299e5d4bff6f5e85ffcd68e45441f9693a31ba4d143501a3188210d19888888c004115df125cbf645081a5dc34b1959268307326a30925dc8b0c19201031a75c03101033298b8910d418c209878701a020e66111b51a460862ed628e385034ca1c50c8088630b2c57aca187f042015eb03588e942c61562bca0050d64418318c634594306431843cb0606e78213555401c2105f4451458d21d8a0650b2cb6cc80658c318618c3881adc821817ca983266075288a10524830c942d5f829822ca0ac08cc1c680610018c8823143cb60b408a0c7a894ec58697b54a22992008000b315000028100c0704e2a048345104618d0f14000d86ac465c4496c8434992a3280e8220838c318610000030c68011a29aaa00039f1823b94d2ac8e3268fb87b5704f3a4a81cbe53726bf858d72aea26473eb1ac9cc035a4a344a3fcaddcce27437683475e62053f2c189b16336d4f9e4c8a7e447a15aa3e5f8c3905fb8d1a45fbc2a12e3e1a5c03f4861b5928650aa20d2ea9d1dc7d4646ce8f1931fe1cd2be5387d46e3be50f33ccc229fa8d33d5710f3850110e5e9130d003a55185ca9ab1395564a381110c0d934808078c409ac9a509de6940ac06ff877bd58966e2f602187c15774ec2234ac9da36fd9a53ce34b481352bfdcab857770de765402b2d1d2346da004edf7138dea768d9da0dbb2da005a1b2d1a74e87f83c64dba90e819e9094f5313d90443818ed25a4cfe492fd72ed02f7fc263bfa71e07157e53cefe0ced3afc2e82ddb3bd7529be7be3e7f7336d37b9d8a70c06ce5b1c4cd2e569945407473e7d1fb37f09625b94c085856478f9626929da91383b912483cdb85b46862977a987422d9947cf46f7d670e033479b6b6a1d2472a61842c052ace20246338a47ada4cae22b804fe95aa89876f93ca6d29d546377b4fb72fad513738f95c92de277ab5afbb453e923c73e8ed287592e3cd046b18d9ab950d7dec7ed8b31f8789d0e60d09dd6b1167b734c9d938dcf66664b189c82f06c0b726a5e79e6168d9a4a15cca1449ceaf98694dbd97895d1bb2b82896b674a3c0ff23ff94e7b800f7b0f586f545f83f53c002941133b604a104fd82804e7a31ffe9721fc7647fa38912aae06ad6df3cee9dce004469918c70d2c5c6548afffdbc755def2d11d07d0e9c3dab29536b13e70785c8df501b56c3fc4ebd193ed9733d9cf5c63a7407f1b0c04b193ff9417817b4f5b0e2071b8a99ae7e1ae244b9dedecad8bdd6465064399b70320190f26c3024b4333e539b1be799c68b285b97394ef6bcce8a62c8bf08e3e40443f174448d44aca8e1c209d4509f5736f043385689fbb11a5dec624e1856f113d4f5a435e54438eb6d0884e4c84c341a18cc6cb0db72a1da719dcb9a187a4024a841aeab3153d1b449197c0cbcbcb7694ea62eaadb2be94cb43692b4989f5e3020ae7200ce451124fd4877877155c5447aad2bbb229224728c184e6515e846a1b7ad33657ce549a50efdd0f8d237f5dbf3818d055c8c51f9f66f7e2585a9206cc71145f662c9c998fae43ac8471b901518b31fdade91da2e45c7117c67d525ea4320bfbdf830a2dda29f18331364c782b216fba7f1400ed49d77ba9151aa23429f4a863c02b174dcb380a1740be81c8e2ae4b98cfb7dcd48dc8513203a19e416a887185e89b60cdc2b9c748bc1fe719e195bf9236d04dc83b6fb5da12b709d3a505e45f8acc43561e83a9e764b6ef44216eb5d8edfc479f6adbce59015b7588cba5a5fc18545385ecdb33375a56c921a56084e06fa147ab255c4e5f0d13adb54f02dcdc3336c356f6e976f11ad87ed693cbc405437b718137394332778ac56447d5aa6fc70de531b5d6813a8720b69e68f9636518bdc5a08b40fd52abd8ba3ca6409a94b477f83f750cf4f2ac519eaffb84146c07ab812728352ec4acc34d58c7436e73c787a70c7a5467bbec17067bf9d0ef9db0fe33e146e6870145b2451fa820a0cb5467fe5fb3e337093856f82965792a4f5396b9b437e3801780a665826717f1a11d3ffe7b03f3cf107efe1011c4177e3bf3eeec122d9fba653e2679307fbbc4e7e86385c0a2a65c5534ea0fefd010c9f6a89346509bceb365e7aa0fe79191c61bc3246c6fdc2bf7ee247fcb0bba5c9f0a3c2db71485e6cad63c7ac97ae7f839002b11979bc99e0348d1c27e10ce499e76b709a478d2e0e31f9ba91954eae28946c67b9b4d255f818d0690119c54c01031ebd003b722a5e1e693c058bf0dfe7850c532d929de91bae65c27a265eea9eb39e9de98075f740e73017444794beeca0fcdb485bd25f6c2661265907d1b4a9727932ef457232cba6ce00d8a5fb17bf28ae4dc143959d2a8a1f8261ff40f3c044e490e33fd0c4410863ee52039900f99a14da88e49bbebb57ad6006bcbf59c5403f3eed29c0bf28c12bdeb00a401c7e96d630c952abf2873892bed1f6160b818c47f6952b2c5351a118ec10ea45f6de4b9ebe787449c238d86418fe86a123a3166c9e93331d56a4347602280866dcfae88eda446cd41f880b3ef525e9c2046c681d4d0eae7685efd808ef29553b4dc2c06077827b5f9f8e2727d178bf77e05aa71d663241db0017ac03357ac52f8ad9e0a2bc53d28f9638a5bc2dc031c0b4acee8e20e6d13e06363931d9e4c034b44522d90f59042e126161f306bf3063fb3bdffba539c78bad5f3e6fa53c44a86e88e1cf00386b3342b6204fadcb0103271e61bcc32ee3c38314830afe5e9b40d521afd279e8aa4f45624282be107fb515526898e06d38f78a6e2174dec5d8bde1375b0aa9e93473de9e0d922fe10c2a610167e94c3491642718575a54a3f93a8b1296cbfcd0e87db0fbabf47073e1f2b3055bc514c1546305c04077e13ee421ab01b8ac005ac8b2b7d3d8ba5c3979490f9cc91b73933f27403a7857d4ec315caeaf418e9d22db18f9b4016099a9555c56839bdcebd0210ad45988c2717db3541cde2751697840ae7e0006492cf11c85cc3a4551aaff5d2974c503ca7636f21cb18853f1bef98a4bfec681136eb82273cb902a7ec7b923beb96b9ea03afa1fc1351347e89d3b7dd58d635e50202b7e07ebea7494ab2b8e4d89d893311b079d856e694cb8ec0203ca7214ad44e4aa7453653ced2314f611ba930825f973b147f2310675270f7018eaa2c0a2e0289c88efb305defcfd9a544219858f17897e68528d516f21c623e36ffbc6dbc228c99d51ea0ae4b55726a792f60a85a0348f51cf438d861c98338bc11c28ec8166f1f7a0661b54166ebc45eff49ccbe98994ec50b2806dd119eda149490456eb4224f20c18b3ebad9d9ce7ba0df72b2e060e66b9e9ec699792ef190d79d9e0f96c1456bc5255bf9c9ec81eec4bc950c156f19bbe3d4fd446a1e2cadad6e972e9ac7ca005e762ecd673f15e89cb376ba09a5f6a7f501cfb31d8ccdb8789a97bd674e7063c0a1b72baac6ad5f1e0bd54afa2e6f304b63295e1252f0008a61a804471eaeeb928b72fde07a1ae7c2983085de0946cd5c21d2f45b7868a6bb9baa4f0c53ab68dfb65ab807d37dc9b1cba02564677c5db85ceab9e8c1d88c83ee417079918b624b91f8462a90b78b4c56e1344fa7e67ec4cedc72497988d071ab572187bcbdbd0fa021f7874ac1d145d9aec3be5696c3c393e56859d4987c22028f88822996dcba3db134586fd6e5223b5fe697944ca6d88f99f2f788076aa4b4da52f622ea0ff83cb5293239ed283996b04efb73026d7843f245a7ba5f3b627987cb16b446ce6855712b7a42e631268a31e68f526e2872ad274469cf99a749dc0e7cf165e0941b8eba1151e7f37979621999cbda0e0b2a742809bf0d725528e2d14c82a3931ac2f2b2c2223ad53f33e83b65d16319d2636357b3310f2429c84654967aa70ff8e4a5ed200840af76b3bf2915ee11fe3c97d1083d529dc10792bf9c5a97e2887a99bd1e1c40af9515cf7abc2e0d915155a87a2bd99366216c1066191d86c809160a3facbc4f7822a98bc7d58b918c2b80308e13592fe825121cc641b44884c18963e905d63b2d730a81ce1afa93dde99bb35e6d30c93ffb1b910569e0bd7f0661602232491836202130a909142265b534b967d68514d8a37a95606f82a89acd01d416aaeca47cd62f5a6ac1ffb9d615b950b36823a6d1138d837dcf21414fd2f1e3410a8d848a0748f9b1de5f5203b11b47c4a1049bbed1ba7a6c11db24da4fdc0a7b0f758f71da20cd82da50ca01ab8d27dac46a937dba07b00f1f42a2c8c4acba53f82f6e94b0220ef780131f0c1451627037a0783171cadb8b213f2ff31a2572c75324504df087237aab7938c87a39d94b2c86d482474c0d3f19ea6ddfbd15cead65d4a048ca69b2f63518a04398a8426825edb61211fed8ae39b6f18bf0c59370211e4f61fde23401b2fbf47b69ee94e8b871c6b3b3af4db3a91fb37ce23b1848292c8dd7000cca8ca00c994957ed230e52fbce54d1ff64545105824354e5b6681765fd11dc5ec23c1fc85f29bb85a722a05b0a6e2fe7a561f7196ed10a5e1847572f41450fa6a514dfb129f4ea036d3208e3bf9f40fa484b4c195de4795979a82a9b4c67a8b2c7ac82061ee2fbe68ffcf76f4211cfc579c7b7dda817384094b52186ce5ca42285d9f3647e51be712ea36b5b110fa11adddfaa43b4782d61818212c3e41c27e006128f80cf563bcea0d6b854035890d223746086434211ca147b03ca7fc09625cbd675fc63b5721bcc084fd703d1282df77408e1b65755957c7f9b83c2565615ab89ec422211e90b315ee468dc2aa176cb60e9603a7e805f6048c83f2c4a667c114307350bdc35da112f3eef64d6e0c9b574688a0e431c17c872a453d798ef3ccf34103ebb8894d8cd80bf84ddaf9d906ba85cad68edd501f894c41f3c075738db4936df7f692a71b2fe6b960dba4437f2ac1b3835fb96fdee833b882379cdc3f9f2cc119d052129771feb57a3699ed97e9069e06187206c39825fa7ca874d582523d0e382bd59f842736840e53936de1e9a3ad7543d0b7e540695834faba561319a9895d5f1c7c15aef1777c945132d0c2a7a58f06d75892f4a2a9f4801459367559b8b1ea99c2b174968f897c63a9f2ddf6af978894ceee69105b43d04628ff2764c1e68e7a08082b5fcde876acd93ed90113bdfb7f5a566012de31d56036d438f6ea49778ae8a41fa48d913c3ff3fa0006c5a93eabac45c9473c7bb9be5a3853ed69330e5444ebc2e1a4d1ad2aac5d9cc9aa58513e84f6512fbb2a1fb718a559b9ce7637714d550855a13b03277d279395d1fb080ee6eead4158ec8a8d92ae07aa944d043d4f8d5c1333c877dd4a8435e6700319fbda60489b87ae7f2c2cd033325c90e52109313553e0618ceab8201e000ea25a3f98294fd73a48790337ab1dfa05544da19781eb9cca02734e5ba693a5b39a26e6f2ff2dac1e6ea710ab659793c134f0acfc814becdd13297a9bc22476cb6ff839838e32d72907b0ea7ab0b1d6f5a6d9c3398916e8b4b2083e6ca60a3fb83b0f95c96da977c723ee6d7b4281952bcd0a0e6826bea356c055af4b2ebd10354142a33021a566ba6aa746a3fa628b798287cc21879179e362e0b2680d2fc36cf901c1756c2565277891d548ec358e6c53631b9cb4f182dd7f41e3d14c42299c50b8895414c7642a05c0bef0e381cc7794246023ccd833447fb1fd53207f806ea244e19e244918c8a459635b0a83f4621996e47c4249f1ccd1a62f0126d0dcb82597f5fd4a5632391d8a4a911af5243fa78e3f579bb608553466b353837a25ecfd88fc00f4ae6a167c1f41362f86a6a70f39ce55f656fd8bcd017f3024e2ffd9ed5d729684bbdf99e8027a9a8bb92931d6118a8d1556ca44a7a0605d8fe22925741e225916f338861e3afe718d334a7a45541c0537768f284672c4359cd7846d166fb1c7315e1b73c6223c90689bedb1896c0f974b5f05a5b40209bfef47630454d670b6691c666b623ae22079fc6a4ecf5cac71e7806c83d4211ea373b0ecab653bdfb5bdb80c6b7bec12d4481dd40b006a908e766c4310dc6edbc2d01a8370af3c354e16a8efb44d710937fbd17e7ab96818340cd9e7d9664382bca187a864b7c74b7744e0d4c5422d26278c86ca893bdca530292b758207ccd688b839a0d1d54754acfa498a93e541fae72220640beba3a8db0b4cc12721164477b644c86aa925bd5c79a0eb329bcd981f49e9ee692b499ff19cd7e541de2b34934f0c358260a9b178adec37566c85164c57d91b3af6c00f60f7e060420448338d38c61e4b58aef30224f930391fecb7d01393418217eff003e66c3bb5ced0ede21f42201f7f49adaced743adf156abc5cb7c465adceb10c2e87d50c644860e5cdf8c9e67a2b330e32ef0e41f047928ebc76acbeef17f7800651fc22a49c22b72885b105951b7e3d7cd79e375c01890817c30450ee5ea420fde9e5d7d14152c423fa63e3d9bdfecef3f02015a06a1f0f5edb978bdf72b365222fadbc4c4681c66d2230f910ccc370965543a75e51448eb7955372bba3d8c94e1f176efa7597db98f4122bff76fcb13c2e7f6eefcb1a8611074ad15da4599ebaf496e226b58a9be7f688312bba5045c30411ed3918b6bf064df64ed379b753f0b3f4900c189e9cb2101a0478eaa0605d84cd75c61754a9c9868923e5884c3611437b605c0d01d04bc4ae18c4005d97b0ea5cce17cc7048ee22aeea0f8ea3f69229caa84930fc0d36aa3d9d172f6df2818a68032b1632a31bfdf3c5f3c0a157dc7f23eaac98ff36ae340960b79bc65509fc6396421b8e0be0e67c057c2b5f76642260b5958b3736866f6fdee9baa1957b088a74545be7c35122131aaf9c474c380758a176592198424c17a2c0b7d7b14d77132eb10104da8e876cfe646ca195d4a406a9d89659f345733c4ed215c4f5e493f2ae99e119e96b0f78831669fe98111f26fcd25cb48b4e4d2420162db1c963bf62a6a27c6cf469f39fdc596cfa8a78287efc14533bd03c5d3ee246773f44053867f4540b9fee347c2272ce8df9b89571c2af07c7e11363f80c03bd4eaf96398cf3659df65b12532b4b2c0ee30c56da1c807bf85290eabb7a2879de636deee178c9b402640d1eae576f2b2f5dbe68a7783050e4880d6572c0a755d55fb75aa1ff9a35a23f2c007d9df33e3752f196c4d4fb6f37a7b1e05b2408d5fce6abd37affa99f23ec0bd8f80a129f5a21acd23bda9c025352441eef41dee22464765bb23e9fec3c7b1fed0a9cb29ee8414e69f51bfdf09f4283d8e84b8020c0ffcae4549319a6609d0e2aa8fd14004c74ac2d304bcd131cf7accbd8310213292041106a26bcc17cc2c8040127e07cd01f73da0441cb4449184c2fc166b027db817d9d685c34326da02cd96725b3c84bc7088c475f4c3920729cf04d4f52b2ff8d176ae262e5fcf761c30f8a534ab1fbcbb35ee86f59d47e03a9e31e8a2c0cdc42283c89d20494e6debd65f0f27ba8edf30b974fea8e3824113491c02dacd467592aeab635e2d8ef468c9489221b0f2071d6aa72abb8bd7ae30cb26075d696ddd90b6b6613151221da8ea4e743dc19c3022b3999a016a1d2bc2b272756e50dc5bd2404f6644eeb9b2acfc12acb76090ba18e51d4f609878261e0539eb4f83b71f03f07ac6e3c5ac0234c5fdede76c757e24f8f9b83918416bcef3a34485c869036290d1e4fb9361dac39bf2ecc2d62549cfff66ab974183b7437a6001a181dc6abbf85000d4d5d3050fb645b6c3028f4969664b060d88649eada547d47af2b4aa9cf108b672bece53a0b3916e9db10b464f815c16af87aebf10614868855b02de5ceaa972a6827c92ae8d24346ac02bb60716eef7b9cbfad0a14d44f659b1cde26592c61244109361a9087a8e56d8d235b59e0a6fa2215e3cc31434223f545706aa4d33e5715b089bfec261a74c174c6126acd404eb0f120ad440f19801a244620de22b9157de6770799e2d14d7d6689b350cda2d2e68dc18abd55cda50ac1083032f63d4c6bde2a739d78b76f154b77b408ca11438bf530768e8634800da7c1cf4af1092315c830d9b927aaff7e8af2909a9f3c878a4feb301af84a7b3636e1d66b1cee486af54167e4e28fd4232d40367e5b5dec1deb6875c3b8c4036fb30389a550522d19ad1f7f39f2ab9323a3c5a9014e4946d000e30c001a88d51804dfc0ea1080fca7a294cf1b211ce5580b03ed6dcb495d13ace3762aaa624e4562ee9870a0cae20fea4eff320fe4a1ec31a10f1e1fd1e5efa767bf04f09edbf8876a819a5bd959021c7bcb32cb50951175107585e3aa8da01f4f5a1f13d4c1bb001789dd0904ed8db84e342fc96e928a6f7b68d2eb8698bed248183c4b7343f4e75c62161478ce76d00ed448fc2173480e9868234e25ee0f550ff56eef54b9b88723e096b540b140deee623f7478468ccbbb6e2d6708256c2e86b87537728ebfea361dec0fae36785e1985aec39aa15ea606e8b529200bd11a3ff82b45d27bdcab7e8681d128c31393160bcb6e05ef29886313d8bb4cec42598c61ac94e7772c9cfef41952ace35db1b595f8ac97cead2f35f55046bec90714284de484a7d61e6bf2d219556f0d6f4a9c9baf76ac535333c9945415ae2b99cd62d54d8367d5541ddb8e19b8dc988a18d4fbd08b71048333bbf05e3837b89ffd788afe89d5b56e9aa3902bce89daa8b52ab9692e47d51c3e6aa328c2b6ca110e5d6905f01d8cdb8685c30677a33502a3863ecefaa028f9b5926529bd77c75463598023b404ae79f0db08f53a7552d1227f2611653cf7b8c1dc0a9414aedd100b9b52b7a709b00e6f9b3230ce399c1b7128e15de49aceaa16aa1b11ee5fe11116418c91a786993b05e1de9ace5177cb029dba0a51014e045cf98ceebe242b57d116cb28d9bba35e541f8429c15975b317ab6a2be68e4a53dbf86cdd369862fdc73de35f5bfb1b82c4f41f5f3196ef1024c41acd27fc111866cf2fd0876ea3ce9f6e7c8e7cf05b9acbf6133bb9c3f11ecaec6e0181b22e634177cb0b9db9c049fd4f98fe0ed52ee4356e1659cf54daf5d9424cd7590b153f073436104932cd44c35fc2f8a35343e7441e6f7427a2273dd0c174493c22540f60414d730403c242b00c7b22f7d951a7faf161d8ce8cc7de9ba529b30233ab94c83e94d7c3cd207051fc40d815be964b42447d15614e9b9cb1a6939e7640de8589c543c2a341075ab170baf7ec84f0703e85248649c10d9a3412f26119b67eaa750d4af7bf0ab59808ec6e5a814d6dfdbe84d621993d81838231ed53998ac150c3deee04e25bbba7560c570013bc73742869b8ca9b3c6cda654f1aa415ba3fd95dfa98bb88a4bae07d27312a44874835d4861f0c7c8cd94df4af0c30037fc8215dde890a4480ec5153b7278b5a33efef47690e3c0d6c1417a0b96e4a22bea87f86be2860c8f8fe60d0b19f31fa2b88ed8909b81879f75ba7953e11d4c740d7199ae2f5bf9321b858a1a412fbf35bdca0d061b92b91eaf7f87442b2bfb89f49746f373d239d1407a3cfd2efc730be6efde274ec6c1a56f04666a196496393e1c45fc8e4d0101aa1d3944b55630e5a06cf1c0d87e41ad9a654af63aeac63b24e514ad6071e4ae70150ff82ad96fb9d94172736a84c1c9652501e789a16546439dc8daa8b6bb328f63318523ed4ef0cc9e9d22f1d809321c92eef9b1768c894e7a2ac47336b3c7b5e91755cf149ad095f888998de30b089f94e23e8057036ede34a5826a22d631458bbfed52da1211876850c9bdcc15a9fcb31c4f54a8e3624861708c4c2654495af97c8ed6cd42e2bb4d8b8eca261bfc8e3ed9373bf24507b54d37b9cc2c50e697d6e96434d5f998375a577038a52f6e65cdf1da17c057918190ec38530bd320c0cf24b52608ad6ba6ded30adec8a7f29fe73e5fb3be9460b6158b119c3af2cc8e4b8a77b1749f715ea7b9752f57bf8c768d96239283e7ecfb232c6b65a8502ba5687e581fb2079a25b812c197667e5f5dfe55a1d93645ae978f7a3543cee8a1b49723827115692d46e6c326a482bf436f13dd362a19824dc02a5c3edd58d42ce09a25638cb3cc82c0b52c02a3e9915f0f6f93138d6826ce6e82fc33ef5d774b5de121eb40b0c9c8b50def79bc9aa22571eecb1c3c9b7f17e8de82817929acc48cdeb1594f463068018e6271f6fdf29da154b7b06e6f32790dc26e9bf956567d1085fab6cb94b04fe29479ab8706fba8cc3526a64214bbf6a45049d7e4f14734709ee4f646606abcf264799c51a18f9606371228692bd96e775c1d75a044006b1002a82f996a0d59d9e124c838f3178e5d64247056736b685ef655c6d05a9a490e596a8a2f07c31d1ff7bfe42acc004bdb838ebbe80e782f2b814932d3dc55370a2a7754b50f45455a261b4e27236d27971347a395a1eb73c568e240964085704ece9fa0817763860df65903144b098220d9673b09677589cc5d9040b6d0d61e23d89b046a10e4905858713a34ff5c38802ba2de40593f56fa7c94c94b061eb84261aa67b2b5e1120e78d2046edef9575d32c520556f66f5e63f7a27b722ac384d77055e302e472804f03deb4b2f523d4c7ef352cdb3a0322c11fa2b1a1ef2819753f69aca06ecc3d3d3b4fb47a50fa8cff79fa194107ff1a5dcd15d15b6d41eef5748892a6d7393428bb3a0b1f9df8d06e096eb93adf14bdd64c44cb09236aae021ce6ab97014d16f80d5b1038f56cc30dfea65cdcb622ec9996dbd00aa994b7f0f66dccc41bf920769860a0fb9676e9de9c1ad0d77ea86ff7fb20ea03850f79cf61a7f1d9fb8da4bdaf2089026ba8c1a86c628a3afed53a224f8e6631016a2511d6e69f03bfd6ae2a6881bb8c4f8b0dc47edd464bdf3316990b809d875172bdab65f1e5047131709299d0c20c7fb1ebdc310c7006af14ec07f1e3147eebfb01c6618945bb4d89896b4d01ec1e6599b83f49fc6da1e2b64bdd1c0cd8cb3fc50280f1c91c7e22fddaa01f709aa36c809e993399063396b8a7de4a179bd847154bcedfeab1443a3eb0302622a7ff334170dd917e45c8c17063962909efce3342083aad680436a602d678128724f5b3902eca383843ff15b7bd270a1c97d7639f50ade783fdfa40ffddc2ff759e29c38c214cfdc7cab8147ea132355ef9547c816d33e3c6df4c4edb871b0a42cbed5f1ea911e3663cd150698fae3feca591d5e04e69dd62ba1393b47a622721b2ad61f6d86031d5d2c90782f4b75fc1517d2e0469368fd480b0e49499b83f4d5ba6d4c8bd2c65ebabfd8ea4c6356fccee4bb45fc9769fd3b4383382e00c82842e273f01f38a199d715922d4ef2c463228450b09a713380ad469fcb51817f4c217143ff348e687d4a4ef7e5cc25e20dd20fac68bccfb21af5151edd72fc4a5e78a11090e67cd72428740d2dd94749e18a5041dfa3db8a14ccf3971082826b2998c1ed19320cfbea8e6ad29ed830d1885ed51eca376e37e47dec735439430f879e107bae814f5547bfaf38ea58bba57bb5c96e027adc0e5dde5167858f0a9759431783f80668f38f42126ee580fa4b197746e93dee3b64e22c4a025b5fcf07507ef25c53b68da96207b543d9ad93c7041ebc5f3e71f3394c2172eba6d9e481ed3a07e4cdc65a3c6a804174e7cb1d309f7b7125707ed83048aa49670a396ae3d16c346a20d534f8e5d573f48b67b957c8aa101fe26d3ad70ce17c71d6d4bc44c9bfecff88000db5bb3cc71798965dfd899dd3974ceb469b894c9667b2b16eec7bce93282bdb5f3fde85a55f14164fdd7f57e1cf265b10481c10cbe7c6058fe42a754a3b024f7be58a41c39a25e54b6ade466e6724c7f50309518cbb14477d79d6a34dc6bc655af6565acf296aa4f52b02dc792c81d537f6ca056ed77d7134b1c57688e9f0c42e1e56f286b40c1728f1995fb1f7601d90e8af785c4ffb389d118c5e34e7b66882782d7557cbb53a01eea8b73e62f33bbd7009f8d7203ef964de3186130d0b78158e6e284a8e074fd4f9748c4c689406e7416f8f5a9107552ee1c2321aae286e7dcd26562bb5357cf2432501075af989dead5a520a10e4a12d19eb6ae84b02076eec3bbf14a67e494e88bd1970e8bfa64486c61a4c7ac3330b0321a2948bd088850cb0a74963060f048119f171efc0e5aa5dd4cce94e651702de9e82b49da578cfc3c0339f31840dc538d7c7d6ce254cceda2f07e71cba71debe72dea0c412cabc7fb2e748e0113ca52b4bceddee84cabc021d789961deb9b292ce53b178fcecebf0bb960f2e423ee3d9c4375cc955bf3d6290a0b9d1b8359c2e5e807e6a894e090ba8a4aad017e5a0a67926e39b41ccb246ee1d59dd25645ec4c1b12318c00a4b5dbee30b76b7f54fc80fce5c3c88599096fe2ef6a50fa49fd96dda76bc068f119dcee54987e75002a21e987ae2ea8b4eb06e213d237537ea429a87b4a2c58f92c9038dc5f65da661d0cc0ca5555a784c8aad7e365f9f97e79563434843a6543444840e31fb3cd34e7017c910440661bc81ad0ef10b9d8c1e1701f891dc11d3146c188525680e990f7c902e36508d3c7491bf476bdc1480fb0fa984e0b5a31c6c861c82e01feb40c8ddc1cb54a0d2c6b35241b5410dbdea79b2b9cb103ebd9135dc9cd93619291bae9350038f2deba387c42995fad10bcd1510b3c0544187635e95a10bd75caab5c3e351ecb31a51a69a1afeba62ea5abd5575f6a05f9490e53f2db65e53108771ff5d9accba1634d84dd9ff34821c11b7d8d93a4fc744e854043280a9223b6dae6088ae33b5dde70373d8010653e71962a70ddee07c74bf948c3d33a5a17061869a6c77dbcd698a7a842dab3149c477f409da42bab03aa9897b0f4f0624c9419d506f7dd0e7ced0426c92e97b3e0b02d032a39d5a870f2ed7ad735979b7108578d262462fb0911cbc8854c26296ee524d6f85e00da929541e782f947dc4131994ac306cd0911cddedcdcdedb117e0bcaa06cbaa4a736ae0555bbbb3e28df8f60f7be47775eb14e994be878a441ff892a3bcbb01dc258f6b6e7b86b153a12e4ba616f3ec16353597277c04a40db87e87e4330a975cbf932b97639e4d51b7da1bb5c50d45f9f0f0aa701258598af19a07287faaa7c7989382c6f6726cd67c526e74a0c72558e82af227634e103718d7a42cb17b38595301fdd967eb9429968f98bdad12760e66304cc2858562f32d56e587bcf88d26bd591c742d6a56a313816e90b42f1dc5747f58cd54912004f6ac59741af86a959532698e812112c49024e9fe6434a0455306352a3b5b8d81262e5fb869e0caa08d63061100fb1318921c6a56c4ff61281d86565cc5ac63edecd11803aad4abbd72cf2839938315ea38bd8ad52066880a8a5a08717162a260ba7596ffad46d82839a24c802e21b19e54bc745410963ef69bb2bcdf4a0003ae3c4094de23027da195efe49295430551e41d5688657e00c0a8bb9c18d86e04c675729a208ece20e2a5b87a189b0d5b5a19e93cb3d62de6dc6ba5b1246fd01bb4353a629759439d54ce1b2342049526f144dbfdbbc36bd00078335cd760c94546845485eb26e22fb100b7980b5813d505813d5128cc9ba18609db23dd639680447e98d773e5be0e0c13e9a589319702886bb2a50751cd0daf5028dd76dd14d02975c53b002f4c636187b0d470df5b23d1d5c057cd189b076842fd2c1a564effc64a964ae575f39a4a609e210c8be4e92f8ae2348810fd1a04dabc0236e3543501a83afff2d6919b5ce4067b330142294e329ca41236212dd2ff32e3808a998c057ef4210ce5114606b6cae62b9ceaeb2e00cd144ad62a46698e9352af64c0d4b83412bd49124928fb4b10bdb6e47852eab0cb23874bd12b75bf249a3f4e56605d1ef864cde00d30cac4e77c181e774ff252055d093bfe9ba713b13a26a201bdc4301de32a7a6436f77e577c22f51d28aff816f55e01f9de51421e79a19dd4c720e20d0ace259df63a4d96334c44522648f6e2b849f779bae0a7d320583a0935d498e68c249d589538d10915522a18e34550f77b6c3d65735a8b5ae86417d244e8193ae674562f6e0553278a0d0f472da5967b5ba50fbfae0ae8cda87c985b6667b5f2e77816996120975752dfbc6c2e24cc19f6f42dc6ad0551fe1c8d08068349c9d2af3931312baadcfaaa3c1d6c9e47201579654f62534e89b3f180d1f220a5ae2a16fa652359b71bc7831e4397506c37605c4426ebe5174992129080225468d863937912146808b613865702027697ad00bb0ba3519a3812790412bc8e36a0386f060dc4d76838015dc25c5fe0c080bed2ac646cddf0e952e261c4ddc269153b72b1728b52d82a75e81882e0545e2a52110d7b729595a888d9454569a4b5998b4b90f4b943d583ce73d6372c1bc109943c4fe05b7e3851acea9873f66d523e64365685cebdece42b39241ff0209e87121342282f300d4b6cdc8e8c3792642ca5e7bdd2616d8ffd4849eee9942bf916dd1d2fbabf3a8882443d7e87b2ac9d1f339daeb22831381d7ed942ea4b96e154ebeb1e2dfbe6d19b0d409196d13d7b894202cc539de8fc04835e946be4c4ddb9151e6bc295d4a10ac31afb4b9b2d1568821d79ad67383447b748b22840f5a9b2e111ff3d0ace8c9c374df49597a91966eecc5277caf3e0bb6774cd9f8da94951e871658d005316f22267c2481a2f343bd9209643c9688358bf749bdd3bffd6a3278a6469b28123568819d7c532852aa9e56bae2e7e32e1c5342561b1ccfaf6db1c797c346ba4e1cd53d29257e607f7400654d7f6e3c3358c05e0d6883f8f8d00b17cf120c36cd04cc27a1962c40485e365051b1d01cf21a5d46754888c57a52227547b1f326a2df4652712af31945c55473b5f19187a70ce2b6adc1be7cd2c0d0f5fa4c140aa505703f953c627b48ccde9840a46b2e8745646d426a7dfa20224e20068390b3abe4ee39acb6a6ab3886f86a6a064fdbe099dc7d0fd8c4de747617e480bad5865d720c81a3c9f31927bf8d1903c0c0c8cfb7f18db19b255ce4a5a328e1cf9a480d8255e42931d6c7da4825c8852750851493ce541d8cf518bea08a679d2b0a6edb38c51500c880b4118744983e3d96b02b8bb3012d372d557d43b7f7f3a135c0171c750f1116c0f62d988d79ace63b489b654eafa2b459b2898d89b4a535723182265ea2f23cedc1de0ab6bd3b5abca379a1e48da48cf232a50b4e16cdfaacee9fd8d47a5cac0e043f5c8738f0b4d9c10bd556222be15b9a8707ebd1c0fe5806015c9e2d103532fb71cfb8038b3a1aef3304d297ce36aa6c9d46525da6a37e95b64cbaceb57b95cfdceefe4a8877fc761d907152b68cd2c916510040d5cea0278642355a00bd0f27da4fe105610ddb72a408565db5261d2e50e76aad6d95fa7baae2038a43305a2bb54250144678a34a38aed40a2663c17e0d9ddab0f50487e51ace7d9a1fc215daf67a52c5554dedbda7c6fc4318e79b163fc3d1e409206115f67d69dd0251980ef373512621077ee73a3850a5ef58c828e249fdd93ff043c0424c0bf7e898a46382b9856aa89c8e44b10542d659ad030b0021087a5afeeba5e1de85ed536f2b54ba8ece3da03c0b2c655c9e65821aae91b58f0351ca9b0655d623714e692f5f745d6394cd460f6d0a1e0046d60c1b5a8fee02df72c2454327ea0e0b2084e0c17ed6db9642868735739dbc928d0768f9b14af09712b191dea92190ff61fe3c07129ffb175207b758c6b91178b1ac35bd41ac1dd585d2c6a9d2e202ceb2275e40edb6c553a1f68d7b645d8393e3ab347c786a084dd22f78871130d7f33b9fda671b79de6bf51fcf22fcdf6d7971e6da1e00bce1c821246fb92b930ebe7a6e849bda0768f06d8a0a882097f2f6348fe82e2b9ad27a0ca0090a2e51021ee4027b0c5e2928a379d8a36cd714f7290021b2fcd61cc54f1c926c609419a9d204cb66dc88e30653a207ca8b74595cc82f2f7d8eb68d74c6c158702ed1a6c24624cb3f897da21bb0fd482940c6bc560829282ff6977a891b62d346e6400a8b543b282ff6925534456f4850016199247914de8d54ca1ce890fa76232d96ce25d1f4b197a2f4c5e3ea56a3e153090906bb14df533165fffcedd97e5bb7939a59676cc4cce831e90b0c7bbb55f928f85da162e67bb587de32f0d6a429acb5a3fdd9cacacc9f7171399c10b321e8f8a60927f23e67608ada6cf725ff674c710e44e709fc1bc530ef7d0569fb12cfdd87d7f1334cfacf83497635ae0dd3781d92a51a849af6b47d85666c0072d9241d0c24833e3ad18806f0c6e2712e0cb06c00dca151ce9792493ed453760629790066245f17df01203158a60dda52ab8da1e21bce43263d7b9d25ce2c288b3a8224d93396e6aa77a9b4ca2d9aab28d838b45a63cb74ef7e0e8e9e4a0e645ec30998091c06183f24d132262f03a4aba7092669816089a5796368153748264b4374db1b410381bebde8376c723b39abd0a14779082f9ec5df5466aec92a14a61a9928487959399cb2409d6027425fa6fedc10898ae935794ec4d44681f1c730e4077f2afe59232cb0b28eefb4d9c861a105c9560b8b7182ac417acff345fcc76c3d50e5e5ebb25dd2c2ca625ba03fc33ee6790ee9bebe35f7306d23abe12439e24a6795104530db7ea958b389c1928be48f4b03d4c8532f604929f188dbe22afe853e75a7903b426346682b068946fda9a58d4adb2d1cd0909ba234bdc15d9020cb9f88102debfbb2596e2773e797d55404f00ac75d9ede4ef675a375cc8bc33a9702d65871417fd43dcfd561ab01d693579b6f3f208a549d19c49e44d5dab2df0fc45931e77ce8dc6e126636cc232c1ccaddf7a845545bf8ed59ace5f3089a942a9e89a9dd030c65243307552869e1a48ba76ca839beab4c22d93bb6c05f86e924678080e12619244e0ed92ae67fb14ace537a3165911655d5424279e241567da10bb6ca592a6c0a69fdf526672db1f2c5c282f070c88e756a52fec1919d870e9c815c8ef408f53f32bf7aa57510f10e6726bb3caa3afaa182456b27bf8de5180819f1b85e78a779e0ab21e5f5f71a01ed4a4f06e26d3f34c8506087b3d440bbec263bb4f53838b3c248c4eacc8a580c13aafae462372c3803cc876411c36f0a7c5d3f267ae0d40ea9730a5b229d7f19338360a860bf2aa0a10d1dc339b7926ad0ebd417ed18778f86a4b87b5c508a965e27031c34bf1308ce8c5da7ec95c1271a04671e614804b98c06a894e6276a2104c7b2bb9284c9e1fceac0f46f87ae3e8119d5aec66c488538875ad46174ce321feb30b535b784fb56eb544ac0b98687dcd2e2bf6ea176ea739ace974b33e094df00c3d3e1cc3ff362126587372e465c84b306035438cbe4477ca1a3f64c136771582b0f9cf1036a8d74ec05d13c0116ac6ac812ce62d1000566c29b5cc27604c06beb627b5b3863907fb3837a05d369015270c6d77f267703908031c381f3488fd5c1536b9700f12b5b38337615a14ecf12062f7b3db6cef65d7c3843baafd34843b33c88a81d911bf3ce5af0703602c2e3e81c0e7992938b0bf32292e05c375e9a94b27cf911f1c3c2f609e02a825cd90ecee3072960236e725b8c578d18f4187d3823c2f20b52b706a002012a3ffa659c7016dc7d3722239c5fd42f68bcdb6e76882a03ce723e51b9e6f9a20b8d80b23e81c4fb3bb414443240df343f810a926587f30bfc339e6c4162cdc0d18556090a980109ce2c161bb6a1ccf100ad2b7cc80c863398f29bf35ec6a076d2566f7db5b5220c12488cbae92c1a111d5a827064946c9802cee4b5dadd52b22330381bbeecd1bf1e7b9d9607ea6097b0e2186b3f31f002e77a4be87b4b106c39a3f5f5b5d409a743fcb31d49c1d7b2006708da91f7ae2cc5b540850297292fe9384e02e7d78633284c01ce7e1ea1856d2da70e86dbc7a8b594c179a4934600e04209ceac2b2841b812d579de4b7d94be42c955952ec775383f9c6b8a00c7a647eabd706736c20a1acea96f3819d2dc17819d0d6781ee392db817d170757c918171c164c0f9813fa22d04e709d5984d6362052238fb3d6938773964da66109317d88aa6380a2b7fd63d321213e16c1d3fb611c22454429a758075aed1bd0062712ec6b36c0313ba1b360fbd4708441e94347b0ee01c611b9cd7847270677e6320bbe08801b098724ec267119403abf579bc05cf19e99f6ac737354fe7eef3883c9b5cae130eff0a351ec5f85190f2d6f5dd079eeb411539ff22e7cb1092c63d4b4844076273a1921464d8c66084a62a3d7a60d8b76e2593bc485196b8e0c7507d0a3449b9ca92b8dc321110294ddc82a47e296e2c432c4cade6192affcd41219dd6af25d33c9f400e25cd8da7da941b23e4484dc02fa07aa9c642c139f81dec81b72a346b5d6e594805426adb5f54d77d2ed7bf7806240ca92b6fc0f7db05ec22cec12fc107be7aa00b0b72a202d772b49e6d8682ea5827189476e37de8e050ba9a8215f53fb0fe9d4b51c024738606d1c6c196be9a8ddfa2cfd8ba6b1a199515ec0321e24859830faadbae219376d4bc5ffa26f2e1abb01a31fc20a2d56a14e4849aa5b5087639a6f2c99894b0ead992750f0f0818ff5443ffe864fd53cac4c99cc6697283e6ba4d6dd005954c60973f218c8a0b9bc5f6e8d24b29d8c39491884c61815416cade9076cf74b43918e46bb5aab5780280feb1c0efb2dfdc636421324b5ca841464eaf0061fb17908a70e0adda28e76ab4b7000202a49bb55ae335161e8359797204c7a7e2967413bd2fe017ec01bc4670df1de238678a7fde2b67018102962a7c0e8cf3fb0e924b3ded000537e7ff56f7e4502025703603752301381e3ccf9e7b5cf66eb8d71c9956f5df0292a2a689527ff51d67ebacb54d00540d35d56e3e5ebfc73cd6daf8a55b79a771bbbdf9037b4c3dfc16bc5c8c33ff548b3d019c0bb7e9a31d07160453d2fd5dfcde47072eb4be0cebd0036c14439f28547aee38c61cadec777499eebeeb481e0596a0fc54d39b7b069f7dc132002b458d3ccdac05243590a90b94fadee65580ea3ce900239d1e7ca3b316734d395017225542998f783449b9eba167a60044588e8ffff7eb7048d7c97ac701917f7ea156356d1e8a62172b40e9d23af9cbc14e4d066701bd8d166f3f3090a4fdd568c5941097ffdda1a7346000498d85447c5914578d6a35d8c1cf0b4414907a798d608db14c5c9790b23c7de588472990de1504972b2e7504352aaa9cc95809519a3274947f9250d5f483d9fbe4270998949d70845822bff187da1c2ef06bf58ed8cd464d1b61a4d2c6d2a21dad53b8299d22456db46301a0f31d3a6d25c815e76ae708f50edc615f1a8cdf7cabb65bdd11d4ffb035afbaeab5e846c9b29903bec53cc491d3c34c20bca34f02910df894180b1fe88b2829b6fc77b842b5e18a521834858b36917e892c80ea622078e71cbc88fd2f4a9f3e2a9c616b1da6791cea20a119785c79c24519af6d349966426c493f0535538689fd4c96008006fe581007fd04063ad3209410e538bc4afd804a6a322cd6217fb1876ecb37e28964f01f15bbe300cc25b085130a3c14da6c8778d07ab8fe0673d0d934d82316dc492b50a21a28600e490e4951e8352ad795e5a115e5e50a0cd0757e69796707558226971101bdb6d1fac961fabe8dbe68d77d1127017a9a6c31b61c2e2ca165087d65882ed3c851186841c012c69bfea93f2006cd82d4e77246224ddf2828fa496284d2bae5b844bd6f517220668bf5219102d32c7b7912ec7d41c4fadf1280219122ac7210a4b44d89f2605463554242f18265599adeb2665c14792c43fed804dbdd34caaa1214752ce8acd0e96aa53ad523151a76d07036aa61a0e86b7c7546067c6e3cf565ee7332acb1c7b0cf677133ad795008fea3d8ad0151cc782140d1cf43614d7e09ab287271f31f13267dd65f38543475e5b20b467463068ca2eb0e7073d8d7da450e2bc401f7e376743f23e2bfdb089415e111457738bf0c06c5deea9a26ad6f53ccf3acbb208a715fb76a0df68467248ee2856d90f846bad3dda49fe0a7ea05359a4b025e6f825f1ec1e4ef18a626cb299c28cf3e0a6e3a907752d3c29a1b1fe1ccc6206292b13699d56d14a0063715e86cd4de5560fe03d9cec888e3f281c3556e8bcff5bdaa4d1d0fd7dca742c5e0f00017a45cd6cd8d6c3ac337372a6841215639a791d5003945aebe9d42d0ad8a96f934097dfd0bf1c7ffe2894a4ab81c4b3c963273c67f3dfab76ad437f483f333b04f28c99b2f3f2766e11bcd3a63f4e64091f16672a0a9c0b0035a50f578640753e4455ec323a19b6790c7a4556fe3db29f45e53ffb6d017216a28f79d2f94a03616038b53a875605a15298016a2e403103eaace529108d2bdf392c3a9858dca6b93cdc62b13e5d2f3c3620ed530963a9d80caeb12a99ac2ca0c97100aa2376d16434412064d32217e409a58e52b2dc0dd8c25a993f4056bfefb3f1dc6be520f0d1bd70330d0a58cbbe38b51e80849c01b90c0008c1dda0cee27c5ae1f83d39af9e1275048032cf30c946164c4993f2453ba09c35f3fa5d8b35501b9968732d80d71edb0e18b2eddfae4544cd27c583868ac1fae11f7e9b9281b402e556f379f2868ca731d461113a23f44b00f82d5e16f192775c5aab0ba43056e1c7bbf0abd588435b3465429d627b11be2551f38aeacf3e7ef9b847b524356e27f26d72c44c54832e6c9dc606892e19f1e72a2b7c7f3c3ceff691fccda7b643d7fc5bc9b5c99aa094eb3ad5f310db88c17ce6db2d9e997b4dccea1d77cb8d04121da4b3ac551d5309608fc4cf0f8f08f6578031f02e3af1d4c7610d6bf455ae274c4c390872625c80737bbd088da042c5597fb7b607ba69eaf95f69861451e266bf50ae1b01f104f10746e41de989b848e3c4c7b57f33547c81f959f9110bd220fadeeccd81fe3086399a29c7975999f8e7cf8cc8391731f6bac0019f23026e7fc6883753d8fcd8c89a4e9b5997845201e82e359220779b8e3d9852663812ccc74aff5c951a9351c8e10faddc4b0a8724aeedfafe1a26383c35808c169d408d59a4de4a1f77bfed094c288c00d0a9698fce3d71882188c558d83198023c013622f90a0873a4d7b58f6f7ecac156f75bc691c9dd813e792da9cc0d8aec7fefaf7ab0a6f4db8dc5003c828aa5638ed2ca274d79715853b7eca4311fd8a7c0b208d7721d5969d7cb86029ced34a42664bc8f602934a93faa19fa51f4eae180fcb0899bf558c867150472d474f56bb777b294eedfc0e0b4a65967961c142630d3ea6c534f78ca6f5f01467af8b50166f48d29c485ce83e98114ad67fa6aa96d06472418e09ddd69c26b42c7bce7d600cab8eb299eda2343e66ac5ee73ce337c778a2cd178d062e60aa739ea87fa3c362fe468dbcedbfb6650923e4b6a24d49e9ef9706b3be8df2683409a5af2181b2db0683e690ce46c6ee8887878ed778ed56e16a4e71bbaeddf42dd2839f37702020412982030340f363083844442a01bd21059e872071938e78f5d522ddd96e73ecc68ea6c1238aed0809aa7daa19021966c44568a14f326a12b4f7df1ed33285b6160aa1fe9f8b093e169622a3ab8fad0bcba02cb31f8dfcc53b1cd168d5d480a6c22a8f52b61843390860d7ddb36f25aa8e89618f5e19ac7cac8d637c9168543e2b7378d0e2b141cec8b5e5c90b575c5c82abdc4420dd5996809f30ef87bb4c5498fa9fb5a8ce1db703a67d8196a6ba9ae9bc78d3761ff0913241d2037ab38f3efb482da658ac3ec26b6604091ddf8e160859a0cbe805ea34079b56203977d5a967c9b9b60eeac148a8617c05f69c5bac12d182e51b85a589c128afcb13f4cdb46b07b4240c129fc7bccd898c820a0aa75a5957aa2d5ca910621f8a902fefeb80783d923e7c9f4662eb3a995be13023ea696343cf5ff8e7d300c15b6cd3f499d1b5f77377c1b1c0ed4c3fc0b43c3127732712158792696b650927b8385f90cd1bb4f2dc78c0bf3932969921a544cdc4ca551e19f22b94ac8872ca9101833c9b94a8899d7221191dbb566d1871d24d5e976cc0cc93287ac98081a95702263bbc3cbd7298cc4007dd95c664b53c327aa14a361881c5f9a0e484ccbd53be965c87b1e25491479f5cfd9be177fbb93956aed825c5ce19ec12ca115513f82a57679f71701c3e4db4a283ab73dc5e7cd9e8375f46bf874fa2ff512cd198047ac7b4158805d71ca8219e71f5e5c7361178075457775296134489fadfcd9163166a772a44f21cc2679d0dfc2156897199fc42a18363588f3d62c1560747cc49b7c854d73f68c1c0d43669d447fc714aa9d470a0cbc8d1d6e58e37004a84a7f442b51f85345ff04c76ba007988d2e92c00e97695a7b46c7ea15a6422654c76048169a8263587a8e72d356c3290247383c343e1217687d054273d4492d687488cfb10112044c4304f31dbbf33d2a27ee0ef2710694b67d57b5d006b176ead0719301e3584e648220b9e432406cfc02323adc71d70d321b712b500be0c4ddf535e94f4bac8f83c990b25d2fa1a487a138ec75915e2f4c81f1976aec5e1160e6847caaa66d8af7657214fe1b006b01b2a35351c51c9bb23babd4edb5ad32b53f480144d003025d5445daea67300e277f90e7808cb23b2c31c7e7eb419f8db18a5150d21001172a8c9010e2b427d54afc25600a0f6d45c9fa338c95c82244a294d0bf06964cf24d4003b92047a1abc5b121254584695ddc77c9ce4328c2664aefa30e8fab3da99582791dcab10d89cc5a5548a769d4410f900f19e3e3e0cd5659d04ebf36bac490f224ca87caaf460627512611aa9e64b08f15247050d70fb232c760ab158f11f30759db2d6e4b759d552031850379c910c887c84ddf87c0f398ccf4ac976fb3672fbd164d08339680cc25886a4f33d7e3ad914749a7f5caf1d68fdcbfc781836ad026aca9a685428cc0dccca4ac8adfd2360514922df078021601758f768bf43ba112abc9b92abe7151262762bba94375593d49e0430fc9a375fe1463601e92b71557f8b4aaa6d5afd0f2d6ef33bce09d024f102132516da8a24b1e55d807c0d7851acfa3e86e1592965ff008ead66e9abc4daf2d8bf716eead26cd9c702ddef9f029fea69050927c2f8bd1c858c129d55a3445d3211f5ea109b471701eca9eed414ccc24646093ed4c79c14eeaf92d379580792f8bec10cfd6cb7399af3c8c1b70547b2d8f683ce22dbd12ee7b341f6617f57b5a27137636c5ddf87b2cdaef8def6c5e5a43f1c1800640092dcb7f596c38ad0cfe6e8b05b2de85fbd44b78194918f02a8948d4157e3f1ee2db2fb16758ede76ca21b389b52827e083566338a044a482396af9fb246b5cec366ef1a7ab79418ea5003b4b29ac855035dc62827238a93e6b7088bf164f340673e2e58580123821c03e222c07bd48698994b6f1a9fd895b002848824100c96378d38d2f2bfcd12dde0eeac52b92594e7448f1652ef060a98e38222aaf8c8fa3d9f642b5afea67eb909a5399d8596bb20cd6f90662ba1b4a45e851503e5029d34945355b64448835818b70927b0016265c98699a13fdcc37c896ad1b480b8c9d3b3014d55c71d24b4669eb1a5c94736e6c25df42963641c86e0c0a93bacf2aaede10beb878025773512e83c46a12eceb5c6f223b32cf258af6006d427b8ddf94670f4d63ecb472912fcc138db5bc09449fb63b17f8c1a31bdb5a61f5dfcade59b6640b98b795b267c1a8caa5cf2259ae2d5cd315adf1062f62afc82d00f02868527409aa6379b42bc5f0065e13946481e9a4584b7fb66a48e8fdc94f27de0db7440229300ae09498c042082ef00e18bb76fc231f0c222e42d48c651b5d3ff1885812a2ad91bfbd5529cbd142d3b88299d9cd0ffff937345fa09ae72aa05bf2fb886c222cc208d8cc40577ea0e2c0bab1a2a61a95320207409fbb861ab6b496272b215f91f37fdda6fefd239e832eaabb62cb159435f8d6a828cb897798a4daa83aa6671ca829435ea44fd97183121e4d320895c915dfb0a7522ca9e51bfd33b7da46b38265d4cada0ac099256ed274683bfc77e8b7dddb6a3623a5520c48722f428c25b280f2bf95e751788cc543400c23ffb57b9c8427cfde2a6fd74f103f85632ec423784900a98071e8058f352bae0bdd1303aa10fd2ae380a2525c45d630cb3ed0cd8bbf5effdc15ce82c9c41154483a272b4f92af26c50831717b0918eafb780a6bee1018d265e71b6f7f54f537db82af09c411d4ba81208a314718a80ad6bbe317fb0c137d3984075250076245449275cca1cc85aa5452668194ce6ed7476951d7e44bfc85c34d4e3ee621320b1a3262cf6d538f3b960722186b08f5c863aaa5f1735a2900a0cdfd4afb63c89a8784cb0313e1e450eafe46c4b15ae41af28ca3ecf31edf5cea9912bf58caac2f75a6358cc78ea3849cf2a645e8c2e4a138c5ebf7cb7aa3bbb345b0adbc9542da440f7d1b8a8b73d22976b52266526ddd4d88d05bdb2b1d96d4f27ad073b83d34e022fd6f432ffef38fc2f4bf87b7cb44557c28ac6a215c8933116fce96b74c16621d6c32cd3028adce70ae3d65448f4a9d76273630be06b77fe17f2be84794a3ae239d51636124b47c01d2004a06ac1cb4bf9b43a2be93bafaddbe6803ae577f84685f5f72b0f7cb26ecb8f92bb1f00986fffc379dbee5445bca05428209449f42a8ee963f07e5181da1de67de91ccc054ab19c1fc19841598f8e717000209e22ad61971ff4638f143097072f7a613cadf014f48a69364dd157f8af52be745443daa6464b26740a7cd06bb0935249ec2e56d2458f685bc4d57e78e9d0b5860889e139256b8de77d9e5052a42c495dd2d6699839bfed9904b15b2679cbcadf52563d8bdb3c8dd861905b996e01f05d03f871468fdb8a821e6f33060e1068e42cbff00e954f7f4e5dce616859a0ac42847a0813c077036f33f68978b3333d9c4372109e541bf35b2234c13666868d4dee38d9c38cd1879ff0b4721aa0c6a532e3889a4424666f0b21d0d904d3043e00be6a9f47318969c685fb018ed650c131a1a02d52cacba130e11dd44ca14ba74502e35d57b0a3cf536058be82c0c5aa33217041c51ffd0da0c112278418da1542b4405d7c203add0f38af48f2001abda7edcf9d69da6b1c00f97c511027695f9715d8777a0595ee03dd1f51291125712998730bc70c79826ece3c6292a0853506a014a8a479cc6edf94fd8ca177dc2e72e81eabd3fa98dc6a979842d829e66fe2483e6ff83ccefec70809b5ef6fa65b4ee1fca10d0a2564a34ee13ac7bf0c6e806a2def00f8141351d4d16d0d20b617608bdf482eb03e311de80d7daa5641eac5734eb4d380410d4df118d723c2f1709b3fb40029897c01b9aa84bc2f1dc624658dfee2b943f3fd11985ada6e0c928ab133f96370d93fbe32422ef7a9833b2d7679bb77a3c1939c618050f42efae4469b84b2b640282b7e6102668ea8f45962e838eca65bae2d1424beaa1a3f7d25504e44d26a8eeb2727a8a3f2446eba5e959a6fe239e247c2fc1a483cf887b10e8f4111914e9ffa870aeaec6b365bda9ec1a940172597e06d76fe90d569598fa91a62f838c655d2b127df93ae5f608927e40ea2ba27b811c12793f913ff1d4e3e6315d89929e422471b85cb8104fa1ffd841a05fda8c22f5a3d939ba38ceaaaf8f928891c656872a9c368af98e54078a98a566afeb6797846094175aba4e94d4d25c125e170947b6a00e6a7cd3b19befb5b37f44c24ce1eba1a752d081cb7a075c1c209f67b0bd128b2acd01eab3405d9a4f521ef73054c223e78434a983b15667826072d8b5066e100ff97e3b3049d4200f7d441f5f46d7163b265d12b07454a6e0d355a56a2e1d0d955fe836b8880412faf0c67c8466149a6a96379063391d3bca243bba20e454edae457c4765fd48b8a69f4beab27775ce7d20ee41952ae30e5b50a298d9ee97008c29b4cd05ce8c80b612b308fcb61a906d9770c79c4d872bafbc232eb80768797a0ecb030640423335f9053280f80b28009aca90468bc9a8b307b094abff2a7af19afe78335088e4520a034a9a0e889ba977ba66b0ce19a3104df54e5b6fc450e8a15f3360006fac25dcdb355255e6b71c2a0b91bed1757827f2d590997a6d38a4e0fd87468fe0e3d6c4e063014f72585918f5a5db9a3c6869b3485d13da4067a1713b40d4786d109b112886ba469c2fe8685a660b52229ec38128b4e65ec273fc8bc2ea16d494753d82a3bebb75401dbd0e5e5ddc2ab342e791708e8fd1360bfe3bd395423db6f66dbc1850ea372a30e2662a2831b30b92cfc600023aa337e605318ad40da3d47b887ed00afeeae0782d8e7b07fbadeab6d4af43a57e59cf91bd4140ed01391b17e43caca98438028c7a64e0ac48fda0651322921a5d4c9269041743421e1414a1ae50b6d384e3f1fea7ae4f6d8ed0f353342b5217f31735f7b65567750ff481fa69fe1133ac284ff886ac6c2eceaab3c869ca31c79ce9835e035f863fd10ed0797b9a68546a563d113b8df3d4b6340fc0f395529c1b37a5c197796d8b2271e3bbf416206d775491d815eb136048c059871664961ce6a06a8f1ec35e59772eb29b793728cd89cfaa80c1261de61e8187a1fe1c6de0eb4a770f1cbcb47f04110d8b3247fbd9d12cf35629c3e2e83213503dca790e208df97bc4493c9a53430420c1f98193323462a254f1d9e88fbb27fb01174a852abe2e01076d0184ef39b622a9fbb91a65383b98f3ab87c24529cad098ad2d7e639112d0276244d6ed53059e8ee7145006381f6c6a8e268ae6476dad419944954f066a0e6c8aabca916f23e763f3f44dec4e865b215535d0282af4845ec6d60a46cd020b1d8d43dab4f22df5a672a960dae07041b3b9f032b3dffc82429041b02af5667275b1692d149e148308a5734e953663a538063f727b3626e1c8d9f4729a136398b0c5466e5e45cde21ba4797646fe21c9a193fd0a6aa99be6dbd70c4db72a87e221f2e39a371c6ba2867d49a4ecc378ecb5d0f97786aaccf7bc19005d4d2dac005af4b8a4efcdc082a13a1a3c304e6ea037033a1480d5c5b084c6c16ab027e69b0102a07b881cd59d581d0bfdd5747cf0f0f7cd80a3727b914aef76c5a295371660a9364075cc9b81a8c9612eef9b8134eb43135cddf49f64300785455f09b84bbdead443fb36031407995c7a63b3e5c8c1d9a4452a15ac0b2aa8601865430b8934582ea9518769cc360d5252605da2460db3315bda48a48171490d354ce36c69919602cb81af1c4c13b03c13d324a09b27ce804dd64c94942f6162680c33493384485a9229c565c741f2979f3f5bf6e8bfdb4bfeeae780658d9bf44fe1358f00648d710cbe57e90a797bbef8e54f20ea129732bf56fa6a70ddd2675a61ad7c0366030ca0b6cac8c5294db440a7889b0460e2926f767420928d66ab91c79e1180961a0200d054ebcf7a0db149a24b5e02553cebcb9e981f3ac36a8c27e42144227d5aff51732bacbffee934d4e7e6147d7981a7265bbd0afeccbff55f09ecef54e9441a42cc71ccaf75bccc603e4ba4933789944a0c0b6881a8402d9b4dc09a7845725050e4948275d44b4e0db11bc1d32d801467b2950d245cbf205b6705eab896bf46f73088239daacf1af522545a8ee8c74c9465eb40cbf911f7552dd5fe9c8c02024e7c19a6f2d43fdd2d80f10046e1048f44cf8489d35ea43da39ee14159b9f2299c646a71fb1b74647a12f70a70315879773ea862129cfff0e1ce8dc3be5940600aa8c002f615a428a9014bd78ff80f887f39feebe0ea3b26feed69867f772efe396f1321774f1ccedd4c3ac5c0f6cd9a5acdf71922574ae3fd9fba59934d8581f705ea8fe25c34c0c0220a929f66f9d4b526cc4a827b5385cfca23f088b88c230519de11656fdc63b22c391034a296c6c06c2e9391d12114cb0528de0c6df8e2a0044ff035c24ae27cea02fb2f0904713bdcefc0998c069919f3ac1869661e54b3b35b418d91a4db21ce31d2e6e8cab63b642b2252464f4ba9a3979ed651833e8c052e25efcb0d722e3bf8c30268d21ff604f440672136a8214fb7d5c9db4ca2f69b6dd8e3e79e700517d56bac75cea716f08742b180865364a5f953d8b10d86e865f545a200fa2c42e143b2a6bf4eaef1314bb373130a5284f8dd6119570299bd035f92ece5e097041d9701065e995fde364e1c134c212553d795853bfeeeaa5c9ee0b9eca1a4ca7469dc497e39ba3a41c1650b93cba04842ff95041aad826db330387bce64691b0807ed0ebaf1367004986ded71d0fd4193725142b2a9806363713f6b5e52a04f55e3dc4676b83f08fedaeecb32d3a8c214b549ed2c03c36c0b81f7c8183f7f9bdbd768841b7efe02e929f71c7f94e8d47abe6f37800cc36cb3fb6acf8d5bc37b9ee579ed18e3c041f647a77b370e994909a40d046a361fa65920923a4a8b01a9f14edf7f4ee0356cbc57aef3163142b01a7ec74563d1785d2c9ddd6905be5ffedc1f52f5ea7d43b550850250042082a87c98010e72501f4fc185ef7e6fb0fddf3e7451fde8bfe8db6e84882422894476f70e450ad909cd09a7fb79bfb1b06927c2760bdb89b0222b6cfb1f79ed37ad87d60159fa06fcd063538bd04128c2e7edf81d113aaa83c80d4334aa91ddcb6607734fbf1c678a6072e8f8f6059fd2ed0bddb68c7f6fa6f1366ac110b353a22f92d91f91846167f99b7bf336baeda3970864bb9d198a7a7ac8b3d17bf7ccd2e84f6eef11cc8e47e9539a3d8b5946f590f7eed9b32e7ed3aaeef4d8e966adcd317abc596ce9e397cf0645334b6944e92f56b1f40bd5f1cb17cff3e8b6452f1b99216cb7cd0b0db365f498f76dc3ce6d56cb9dc558053f520febf8c50b8eafc99ccc393eb30e9ce186fbb475f11463a74f5fe84724b76f745b3df44844fb49ab6cfcd2fd8b5536d69b0cfc11511d3947a6a61cab6cec19f6e5cb970a66a3dcb67d760f3811c5b42c7ec1b2460830fb1bbe8298f2a4cbded9f0f504ca0ec209104b9436b7e39f6cda02a45dc2862f21b66c219e3c29b385a0b2eff6be546bb2fb0cfbe8e973ce392709544cec3a21a84f0cce25ae03c23aa0a8e94d3e1dcbde6f46f1cc1ff026a5c201e110fae071d905b9fa4b45fd7dea6fb531fd8da0dd7bef90843beed5feb8430f69622290fba85dfec342f88e10e8120ffd8de00504fdadb6c0d1dfb3c078300cd3181631ed2919ff5d6bd58e6767c11e773c6e3a9c367f8e0f99c78e61d9c5309c7bd951f1d87cccaebf1142d0df8a87fe0e825655a9b17b515ef5e168a2a93fba497dba16670e1b538755da46ec272fcbea13ad627b47865bc3300cd31f356a618f337e451b7bd4d4ccfebc13c921d461d858a6747bcf4ec34420f31925b33f2f7e72a33e3fbab43f2fbbf77bfdd1a5ed5dfb8e4ebe39c5dfc7693591dc570f614769c8835d638d354ad1b363fd76b07bf1d8519f39e64fd3976e2d63d877a0bc87e984a07eefe5f99f79934f4f659aebc8d95123ec2f4659ed2f46e97294093f9be2f97876c5ff46d81f0fb7d53c7642eca9be6684d5ea4f79fa4b613cf56777e576c6a8899e1eda3eba63d488648d56d96731cad4a9238cb05afda954947aed981112b6f7cf0809dfcece3ea2477dca108a105f3b21de87b0ee4ebb22dcf61ea3ccbaa3c5ae316a1815138178faeb34151347c04ec5d025b8356ddba8181eac949a7246fd1921c10809247c4648d0befbb83722896d9b46c5449cf8352ef401c2f503977d632724eb410267af1fb2740e308a6243d8e3db6eb767871d91edd97f24cc302c9bdf32067d5a20a25b3b1c72efe550d027ee785786cd7967add9b51d90ed88c84ab1990df98c8cd8f6f266595c31e0985dcc4ed811c12284f671ffc86df537826d37fd056dfb19c4c6f69178667f46516cab2114613e434111a4dde2475e582a654b2756b68cd4b5a78635b8901e814b2ed726a2d9d82725e236f6bab4690b474ed8128a204f846dd90206c6a60fe1c8093b42111c0085500d7570a30c40d0f3829dcc87303d94f1c18cbd4c7aa6ac7258b0a4872636ddf0d503191cdcf9103e1e3b0c072de6e0ac477cd34a040ba6919191110b17d50bb15a18a65b55cb2e745fb1d30be163df94b6773a2e6dba456d76a1eef4b57ebb10cdeb2f159bdf6b3a7a993a530875ec583bfe09eb1666752bd3add6764a7f2f949dbe7b727a774fc72dde69740b3bcd6d74a4b2535fa35b34bae5e956b7a5fb76ab57682509d9df67ba95ddfb49c7272d7a936e799b6eb5b6a05692903da75b57b77e34d62c7c4697a6e39225a525a91d2f54a20bdb2d597c52abb6d8ea94974ce32d872c4c5ba5aa5994c6284a2b83d1b6b849ca7a811f8ff4327566cc474988a61749646eba6fb20c27b06007745fe66609ccfc818414c2552a1d97e2d28d5eeae8ee4eb946db5d4b86c84a92a7b932a3a46e41e8c7b9d0007e7388731e03d06f511db71c833b7ab7b987f29ee3de7348d510efa87b47fd9356a04e1d76403abe9a7f310fd5e70fdfe424cae342ff4d520b42aadffc9a87a6bae846b76eaec2a9591e3a72c299333fd8aa2136df6ef3edfb4648dc717b8e6fcfa1bfd3f16df29158b3da3f5276993fbc6c59410b0b53670add1ce75269fec0d1adb8242e993af3d04bce3fb8f445174b00ffe2923de36f32ce6316ba398e6ee5df7c476e19b1765c76aa14707e731570f42d109fa8f4cf54e5a5a24865eacce32829452af937c7d9517f3074a06ea31dbb21d502996647366241fd79d7749cdd4f58bf30f7b7da437208b6bb0b20c72d53673e0039e66400e47c9d3f2c7f43514b4d34979a34692297787ce27ceef8bc44924be68f9bcf7b1742564bf524211c4e9d88935b384f12c2f377e4d68e2709e1bfc94837d7dfdc15e9664746bab92a23dde824aa8f9cb0e9af3f49f5d03d54daf3d662dce5217bf92bc3092c9cf338fc8e674838ba088443d6cd55dfb09b0d5f3db8f68d9cdc327f2409e1389fbf93838710f6a0652b4dd9f3128bccc27dfe2882383c0e79363cc4d178eacc7feacc0ff3d03b3f38ff76ca80f346074d9d1d2f8261c7af5d3b7ef39bf35065f8d9a500593bba21341f3961df879065388105c2a56e41eefa24207c87def4c73d0908bfd190d32f60fb6a2820e812dc5c5ab153d3df0bd8de52a1a89476ec824029019c3a124a0976bc46259ce3e8d4d471296d552e812a9760c76fec827668db4100b276683c759436ec80826e9e6f744abaf63419e590374274f8aedbb9e557b2cb8efbeef00977b6842f162cd9f2d583971db702b6a41b67cef06281ebd564cb183d43707935a1f26a72f46aa2f45a0199d70aa2bc56d06405482f159469f252c1929e215e2a0083553a3187a2f4f0862d9b9e526a002c66d005958207276ac073c3170f5578b8814919fa23c5809e1830ddf0c5648d1d0f9988d9b5d65a691a2f263c802f263cd8338e1c9e9e1ea44bda2c6253c21e248cb55082310d68c0262b47989b8204731bbe983c9101a3367c3151d233830f768f0d3b80c9d9c1cb9c29026cf8da81c9ae1bbe76c0617fa98984933ad2984e894b03a348af0de90b7c7558f160dbe0a026212971b2c2e322536348a909d214314082019627e060c29584431134280184452a82bb392031d9906cd0c2c053e615717877c3970e34b86430e0a70171783c4e660fb829f38a30f094c9e3845ae171b1298558363da574062466b0b229cd1bbe742862e7d8f0a5c3922d9a938c041e05f424c1da86af2558f4581560c3570e5f72f0627f2b1fe4c0450c396821c3b6e12b871b5058719e84f684bd4b789c3031b9c09381c789d403080209183134f9628b0a525862cc0f57c470041b41b0e8a16b531a94d01a789cd81ca2ec2df5882dd83e85930313ec0c0f150d26b4cb0ef3a701130b1a64ea5f32831a7e1a40975ca921954a91b063f586af252c58a2647f3b5b6c9425486658e2eac6cce02489141cd248820318243774d901d8f085830c70a8527b98c0c0ad33f284c13a48f1448a5d8f8a51723c50f0b713d441abe1d3cebc66f1ce4401099b470cfe764a38057a2002c9b52bbcc1aeb87e0bd875cbc636266365034208eb0f862f1c86d8f119a6b55be90382d9da3f23104cec1e9061bf9f5193fd6dda0804b3636b6b1aa6c9ad05c93418b63d1277a68bf4b8007fa63d29bd01968230292003692803030f47e4d0431563ba2803bb403a628d28beb8614c1032d82e0e2fa84a969494c1b5d65aeb0d4a52fe88c00d5aa40edc9fc52970d18841936001fbeaac662677cef9a855438c6c9448591cedf97ff5726655ddf1fb304d07d9545607d9b62ad341b6adc274906dcfbd7f663d32a324323535b251ead0d3464f1bb8470c9697b587663b0bd08a46711a610173c58b0d4f44381ebeae64b9b09e38b942ddd5a50f58a1bc9e707d5c98797c83808117a80da90daa2cc98ed1731ace0eb7a528d590b8e5e9c572dc477bde66886d23abec9aebf8bcb4b2b3d3289b3b86b4b9e3259aecec2a22fa33bd3e7b82ccaee25ae2061b7585c99cb9de8a3b22f319eadf69dbc75f8e3bc52e48087484606fef88d45cc74d5d8c02d37fddbbc8799d90ae8b5d903984eb88d8bcbb4962d9d0e9f3f1c342f06b0d50cddceee5a17ab851a710eca1fc9d2070277c384207624041c513d6ed86d89ddd6bea82cc9bf24fda26dfa86152db9ff6f9d90919c1906d047ba3c79dfeb45d4fe750fd08f6cd5fbda4dbbb5f9b9c3acd39dee5a11cdae958c6ba20f4f8b50b426fab8a88e93a6c478152a743d8874cef6ef3477f6f57243bbdfcea103d3c0da65529ad1a6273d36d6ee2bafc61e73c791dd986fee635637a887b7dcd4df5524e470a90b5c348869b2781f0005ffd7d64fdcc9b1c36b9260f71bf9a46e3ac22c2dd74ee26ad7111060718196daf43c1280a585bbb6843ed34c3b0b3d1deb67b228c3b11b68f64dbdec4156d7b2484ad1d5e18b6ddb408529b28b5b57aafc36285cb9edaea943cd9009f7bd2c09b0c3c25100ce14b092b5bd21d281165c3571256ec1f1bbe9260b2af097ef58281932d81f8913af23d66e00f5ab182f421f42d6f04fa4c2a66f607c7d8f1890be5ef0ffb65054caac796ef3183b3820567c39795275652e0c4999c0d5f4e74d163c397134890b0e1ab09389ae081091bbe9a30a2091c6acc88f1bc705ca8f0ac1051a30313496ed2d8f1526df8aa62e555e5c98e1e3238fea330a523870daa86e6c69b4e5cc8a136ddb083281f17ee6d21b765191c3f87a6965b69bf80753e6e2ced23d97e81a633ddd9bd806de8d342f4b25fe03ce8d34274ed2327ec78972bc62f6e5402c7dbd7125aea8f404a72b2afe434952d3fee3ad994257f40d6115e7c1645af0f4734a147d1ee882d3b27cee94dbd4375b851087cdab13189893433c7a056542bd894ec899db2442bb38d71392953b670b7072db1ab52a8782c7801931e3b0b60ba4d708d81ccc93af192d205d268483756c91104e77b98c0df8e14242398e4f45081bb0d5f529c4869b2bf1c586bd502633aa34b1886d51a065231b5d2a59a651c605a50060c982f5ebe8001732557370b35d4f0fbad95d4cbaa8bc4be836171d39c4d51d45622f2dc85c873da68dbdffbaafd66a38d11c9adb576c5ea95bbea61b167d9b45693b64a39b3634455e93910e7b01edda8c4916f79046fa971209028648c388272c6bea64af7b7b33f23246cfa09b32cdbb6d6ccce7b739838829c9a8a8923dc9a21092a5d922b496b95dc670487521eb7590c4906a074a9c78e006db7473470249e39fc8276fdcc99fe22a5ff901d3be66d1008860b469b522dbb5e4564d6287bfbb4c943db6d4e03c5caaeb71957736ab46fa0081c97bff9d122759e1a4d94d1b4d9afcdd9613724a397c676413852fe489c2c83ea49224beb84d8947dea36dfd0ed37c37d9f09e98ad0edf636fb7df633e18eabb48e3bc4ae12624f5379c8e67073b985d473dce4cf3b7d2a17a9b7fac3eff4b715c1a7bafbcf1cb2bde639b210b8b7abb24d1eea5ea33b9efc190d79b2d3926655bc9452ce5ecafdd2ffc86b2fcd2d5c8ebbb6877521daab711b1421bba68f120a981daf33b9fa995f2b08fcfe91b53b4282a31850e0da10ae20acf99ba7a7540fc14f7da48585764af74682f481998e3baf5e6b338ed3e4b79fb63c5fe79472a3fb9457f79a7286edae6e9c2314616eefae7540dd33dd9b26924462fddea637e5ee32952b538e562c67f22c0cf026334d769a6ca58ed6719799fcd6b8d38ec809797bec80b48d6eba51bab10c313486c0f055849657114a452051c4930b5cf8e39a20953e22bd7c5cade68fa7567bd61d2d1721bdf66a24d8447367df3290a66d9e9b4a13b8c343bb2da79f9259f03f408115b2dd3d4de4643d4ee00d506085254ccc96d4ce523859965dc15f2a85b342b6810f44207167678188045974255d1891307c11a1b4e16b082b3602367c0dd1c3ae96daaea70a8c7d6251733d587090f42144810824eefa1536f001e943be3e6219a2c9a69f7772a1bcf630876ec9adb05d0b23bc29c37de4cedb016d50aeea36bd9333cf394ddd3dd39198a5cb0a902b4aa35010bba7e6e9823ffaa57e44a4253d5a30fcc7f36fb54d9de99aa2c9f4abf564c15fd42e71b65267a6e4ead69b32f72d5722bae9f5916be39cb05ced9e18e07938b5d01298a749942d1f9b48a8a589953eece7d4b21f0634008520e9c303e3c90e68bb5aa54a01bfe62a9c4ef31a8de4741a6db4af67e2de19751a95ad699ae6e40ac2a93fabd42d7161ce15f2e5ec6b71a40fcfd6d7bcc709fcf5d8f5da7b481f34a7d3bc1ae1a957004d8622d46428754c5ee66cfeeee72da723dc35d35cf5a45403031a23d3e6128f02e23de4d99fd1923daf41c0b3bf06eca987b80f65b7f4e3f4c763f7e9f8ff50a7dc651eb9f20e734f167cbf7d47fae8608f0daf694f7f764f08a1fe38ce6af9eb11c4ea0c66da491a060f955bf440d1030511854a9462557a40fdcd8865945c7d3bd80b85152756d90207a70ab6d7926a1c25ac8aae782457979288ae7a7056833962c96799e460dd6030fdfcacc76615fcd9207272a44ee4d9f43d628c31c62a050e9aff9993677719255790cbb7b3b3b3b3b3336f2dc69afe5229ab75ddd914903a3576f4105efea0b6c70618e7cbe992eae19202836118771a77ad899ab24729e65029b992af5b46292f4d71ea60a9e974d33dede5f0e35338873ea947fd19c9c1357f39315bceda63961e3b14a1d66f4c6d8dcd0dd5df337dd601a52cd12402ed4d863b95e9d69173649b9cca359926c79bbc63a0ce74d34d9aa86eef98f71fa965fb9f698de44c3a33ddb4238263a507626c69948a558d6aea99a2878c153b73e68c965d4fb74e0601cfae7a886a2b5d20c8d943f4d8e1edb52db5fd47ae76d45c771fb3b8efb96ce56adbf4672407ee0c043990cb9c9501e6e46abaa0278a2cfbfc4f967fe839e8e3c28e212bec39753687e8650e92ab287d649ccc43f341a6fe61805cd51fb9aa158a5087401f0ffac45d663f433dfbd5b89c2e88d136511c303bfb7db9a0cbd64ebd7bab695e6d0764bd6ff17613614365eff6de965107f28a04c910599693ba08cd5e900c91b50dd14ebd6b47e59afc799fd103bc6bbf262eeb808ec43334fb7ccee937cefc759ff698ed8a64b7fa9b45b47745e8aff72be4a3dfce7545b2a36e334aab88dc7b50fb90ecdfd43471bee636595724fbc7fdd33e77848204e1013e7bec36379b5e933f1afd196da238e43d6e9c87ba6b8f365ede38ad71dc10487b9e72d0c7857871e700a3283a2173c36e08766dfb2ccb20f601268d8d367722792484edfde6a1ee70a78070e48afe87cde15119db7c31b3e186fb6ebaa37cec509a16df497c7b934d0774baebe83fd2c9136abd0f779f49bbf01b6da42694a76445aee86384cfa13e4ef0179d58d9f49ba67544628ce264d3c728914a9c12ab401fb829cc72a0d85cbb943972456b5724bed35f77d3bf4ebb60746317ff12c3c9fe12e58bd28edd6d277d74efba22f8567ff2f85c57c4f4abbf1c79930b465b62db154169dd909a1c95d0d3e4c8e407fc45177d0d67d95c1eb359a48f4e4bb4a2eb7e63361deb803a9389c644137197e9f66182e96d58f8a85c5122e943ea9cb7a04ff733757876f8088151a01f4f8ada15e88f2218725cc76d4e7568d75192b36c9ee3f4ab1c19ca126c88e43649bd92b23375fa3b3d6a2a7d9c7476ca61fc4efae84e8ff38bd3e54d0636fd6e1d1036619309c7cef4aeeb5272457f3b7fa020579c90f4f1753b64366514e48ade0707dc59b1298e198520d3efed804c8f510f759758aee817956c72496472b90ec8747d80c01fb4028520ae03925d9646e44dbfb0c3eff20b717797d98824327777533662baea48dcdda7c9f3b407a05c6171dfeb7540dce5ee95d2d4016d546af6715b3d542f619437754072cb49ee4063be625f2e82c15e9ab06997bda68fa02c413ec959dab3af56964c52111922927b62b5aa88442b89b816a33f61b31ef3bc8c712753907a6e484584dec33f5de621ac6b1ef20e379134416902cd3f2249bf797cec3419e92c1ad9328146b7a02ca1be457318a02ce174284bf05ea529cfd364c8bab003b2e7301ca43bd6dcabf79f69ca435eeeb28a083d777aee3f13ca95dc32cd6635abf5a3265977b81af6cce61a2569b7b9cdefe4501ba5e1136475993b96f4deae7b87fd4eac0886716b6b45b0b83b7cc21a56843a649d4e5966833d43e5c8ba9065938b50d771d809a1ae4317e568e1a21c6fd9bc26474ebab7c949daefbd272d6eed9e32779cb76730cbb20cc3eab525617676cc64b398b558d8dd5b45f6b75efdb900c396cfbad3d3696edbe974aa9a76a2dccddc49522835fa8b5b229d5563b46f77284da8d1ad24fc56d2e935efb05f4cf34b93e3c62649c3bd8bfbca6fdc6fde5e93214b9e48b6bed6feec89a4cc708316a3188cbb62698f5e622831d159f3472425848f463bca0eca15755d08a90415c1308fcdcf2e6563d8589876cdd7cb18843616fdccae8da58b603885b183227e70c41303d4ae79250abd972c5b9e040584d164cb1e32029f71f0d7833b0bdbc63408e06b1cb28160db33f26c193232391e30b258fa25c9b5a1865376388c9a4186c393bb658a3068e080d8a224611630b27859dad9862f2f66705fbcd8411730aa7c51e68b25139731fdb9a03f236be1b3ae48bca6bf4ddbffcc2cbb60f4000c8503d60ef7c76d99eda965b303c224d0503ddd34cb126b5fa83e37f8a4a076915bf0f8d490c3e353434e86e50b2edc95deefe37d0be9041677a95b4942f29e6e799742f152b73c8d75a7934416a7e5e335624597cab230756866fa0a5387feada4eedc3d6df2ae694fb782a60eed38dddad9e092b6a31db2b643566441d60bd827646d39cb5f1cf2c0fc9fd03576a60e2ec5d1e9a3c38ed538b93aa2892562d8d0e5072a8ec82d00030e36962811062b7b950103237696653e4a50ab1c14e652e73814cecb0b257bc786af2fa26cbbe1eb8b271cfd0f7f5937e6a22e059961744102909569cf640701c84232c309ac0cb2b42331ca461230627541479a6e250565d79ee9566465bfb10b3a8adf5441f12aa852481212c2744b86c8c27e35526461dfa8a45efdd4a1f45ac690851dc2ecf4b58b0064d95700b2e8ad0064d95f3a25964558a9f52a9258941d49a667388155841d09a6673881251f244fa5a42a7891a1e435060b7c7288e30636c2d0e06383cf0e5d80d1c5161e9c6d3270f6786b2db4b2a5ccdc2f0b3865b3ac1d835e76baf0c095e936bbc7a096ed311f991b04a96df5f7816d24b56536a74f0cf71e619c8b92824ec726134d515290e934ba65c4f2345481de5365d79eddfe9e72d144bdc8f45692d0e928ddaaf9e92d9ae3ebc8aa781d872c2faba256a560ba7715e675680d5951b67c565453a4e3de63a74a81e6a60bd1dca42327452d54f3a96d2ea2b9496bc7b204ca76ea6cdfe4932e966c49bba023ac8b92ec299b74cb8875bacd4127cf3379a6a0234fb792824c67c5a023fcd36f96599029d09b6e011d9fa679abb9d0b2e5b32e5c5c74d9b10352a5e07934f7302d64fad4ad9a9bb435229fa9826c0eb7508ea3ae23d3bc371af41348752f446fbad0bc771f17fe78b613762d3a1d759c8b741cff52fd6d3a7212779c8bf06db42c8bd9b3bc619ad0e9a82dfb96ed29a7a64ecdb491d426400ea4e4604b1abdd190b7d1454942f8285d847f0a3a4252a3559646ab322458abac56dd0b099db42ad3aaab53309d5e056fbe0b2a1baab46fb737e12d0b997eba965330fda45b49560b79c7bae5bd959d9541169689e8964ad748931807326099e223c36b8b2aaf2d8eaeddac766f013875b22d9571bfb700a7371d6424358d3229b934f14101521732db7689f2d2c20b8d8bd7acd8da6fb06831450756bc749085a339a73a69d8c31ed68478683841d05cf753f7014ea5c2b7008f83603a87750aaae35c4885a38578700741b3b04d1cd6346c24b5bbd48d8e7befbdf7de7b511a854271f73ccff33c1f14586bedabcb18af2e56acb5f1f6a585936d394ec5fd74958793b200ce41b080ea3c5499474a08e72008a9ce03e74220681c954ef17c20e575e1b227a5b1d639eb9c531e995bcecb493919f7e46c1c211ec639e5d428945055a9a4945209b1b8e53c47cfd139299c94424a2985b0d67c64ee2a2b9119446f79e9436aa9b53cd545e20522c618634764ce30d0460921841042082184328b0b254723a591c623ad39e5189b5e4620f08b27a2fbc3fec1cb38b5df89d529b726ede186bd5afdc98cd95b3db461adb3d29d1d5369f52a5bafc22a9db25eca4d215ca8c8674db260b2b70dc3b20ccbb22cc33221f5f4928b5896654374845ec811a6a55cddb0eedb3e4435cd0dac5d7ee8da2a3f14a5946e944df6791d594e79d764da448cb0e070667f46585caeedc2a4e2da5b0b5a5c9b9e68dbe2c2a83dcbb83ea8e4da54e788234c541c611eb2b1331b28c23cec503d3f9828e8b37d1ed3a068074464eb89037fa88d4128024ab341e5d8b2dc281becdadb5114cbaab861d9a75d7575904da56d57d50dc322c568b63d7bc6e5c98bcc8e5d11232c4b5cdb05a328a8b8824c2bae4da9b836d5476619d7deb4174798efb838c23483e310341ccd704f94064f9c56657318cbb0c5186b78c3185fdc610e7b42de9781fd597963a2946e1ba5df367ab7ac03425dc1dba15ccd0dd3300cc3aad60161da6691258551bae5b8eb770f6fb665f0f67b39746976b8b367c7bedde62faab0f833b37c6462fb46d55569aa6aaf8a966e475a9b7247e6a69cded78b7dbf9de66c3b7c654126f1b0039a5613001f2549084f25c698d2c128dc150481524a29a594529ce7ac7a481f33c6380029c30d12373c96058061cfb24502cf7f340537005848dc39186637cb6af780f9ec586623942bb85029db908bebc98e1bc813985e315c5c4da20bf131ce09af09088e875c5c4d763492315e0180cec74749548780546badb5d65a719eb3ea51b12979e01da40b02a5f413d64b2d177200fb3cfd2811ecf3b51b426b0794d10c03a1018e73e34f6ac6851cc83850e53122f304bb3ecb5f1daa9f32d64f2146588c5c9ce3383ca58f29511cae34e2a8727618e0c65a9812b252eb30c0cd8121bd36f82849cea72e9426c847a95138bee7d660482f86514eaeb063b9c24e33102af8e3388c6194520d25fb8f9c74669a06d73f86fb7118e772052409fce1ec89f39c558fd38ffcc1055203c63848dc267c94043d0c695639144e65205850291c2c43a51990a04c4cea0e1f25d96fd816e883dee2a95513ab675c0e7bf82829ca12e48f92a08fadd65aeb85e4aa1e881218852021e96352995b8891463ab5e845a20048126cf1c77103c8acc5dff7b7edb9419d1e5b0fb99adf01b203fe7a6c7bbec70e093c0ac09494f0b2e777e785224c14e46a1e880ef8bb7b1e85a05a730b71cbcb98a1d20c4c62ee28a6ab97346e90b8299e36a989e5d05a28f15112274b989f874090c0f29f154432a0f30d739e527aa3cdd373009dd386317eeea82b912046320895228b932d3f891845b1e96796dd10a8542fb114371ee69c1962c3d70f86d89f69c393b0e12b8e34368c3a62f87321a63f4a8af233e2e2d201e620b0dc908b6b0917976bc3d799a5fd9d7046695f138e5c499ae186af3355b69d3f762435037fa91e15ab874a33206da834031355d52dc43dafa1c4cb571c60e48539df8f92e6939c95140f29c4590887cd03a9418c7174d9f065c68bfd85b0e50db0e1cbcc946dad0c78fe43e517a89c2f425d2ed4bc9cd8d42d4428c227531388ce8a923ea0c4cb0805e9acf81f3969007254eb67e58020c1d93f6af14c7d574ab10c8bb2ea17eaa67ace2980a0604bc46695b6be0738903061e58921b810038c124a948c81a30833708c81c17186d4628b4bb3c8018d4958334db20a47131f0ca1848b1254d040c5982d57e4a8e249920d57c278c30c8bc211655338a604a006282e732931e3f2c2ae7a6014ce8f7aaa13c33ce1620b24315ea0b8010b882a4e4891411667b8ae964d290512c30e1c3f98ff7cc1d18685a38d1d93a001151328a3c9105f24f172030b48460c6ab0821a7041030d64c08a4fb1608c9923c26461a64c18770659b4a08d2d4be4f00414707ca00d9e367cdaf0010f6f94f101928d09816d6fe890450bf3c442e1460e0a73a98fe1301b1beb224436260419bc1126880c2461c10c6810d3a40a1a5078a2054080a1a10c1348bc3e45971dbcd185a34193e695d4996fe0607f3956dee82193c28d3259dea8e20d28a814cf4a724a323b5f1655f46006597050061915307385103850e2e5022ea85426ec557283936f08f106142d0aabb921c50d2038322de8a10b1a50b992258d1ffc7003209cd0011957980c6145160337786801b6ed7063ca5471230a3265b25828dc1843c68d246dc0c129e130c6c61a775c2e974b89151fb7cc1ff4098ffe56557fc734d526ed69b8eab07f9f5ee60fc9c3b3b3239750993a4f616cc492d30c3c0463973d5b49516f8993bab674c55674b12651b631ea22ca36a68780a43e02cf6cf917b22df56734c36600862cc8aaf34774b1e61b3b7ed996f08d06481f1168830c5c411f1168c30db882fb8355ecf9452ddb0c0cdfd8707f108b3dcf387ac38a333cb8a18316d6bcb2041a5bba1421e58a2bace90416314890792dbd806544049438a01051864c1a3d60653103132c7ca0460f48b2604d1f62e0228729b678a34b10acf99df9230429da60220a2e92f8000dd6ec62690917e4e0439929de60cdffd42736894f1e529f31e69c5e5caa34ab6c430b1b5c5e6d88a95c1738eab4e1451b5df64777940b73a0e422c6281fe39ca20b1b646e906121a382ade30c0ea017587040230757e07086873194e8c10f505c3a10c28c2b3457c6b4c18613325274d428238e1d70c1e40a33a00d96680192325c3c89620936a6989ed802b5ca19a365cc1763b458838dcc099a0d5f63981803c4162936036616b7601c4a35ea0352a4f172b951a586309edca0032d908eca04c1450fccf0b830a822d56335468635cc44913c3c5658cb634319505001041a4dc29061e50a296090d4304612343ee0c4fe56fbf136b113a0032741f8b0461664d260ed60f224cb146492084385159fa2c2063c3620c0185f584982092faec0810c7c9930411623a494e104184d8658c30b1bbc7a10e6b5e4030d4a113bb821840f3f2cf15a038bee5631aad2450639240d71c6120f3e55cc1e98590389358cf08162a90cb5a8319492f0c1b2d4657fd827064b36d83e51e06cc3d7920ca85d7ae20c9f2b5f9688c0c6d82cdd80598b8dc0648c154489620824de48415218417481e2d2e14b1a56ba3466c0dd25d2a042d35062f2c166c7862f35c8a831461bf2908c684403174cccc0060c76d8c207020053c5152b5a4011c6952cb012320440c88084cb11165850813531e60a34c4785283307424116badb5d65a6badf5938bf9f3822c6304f102e3c889510e5364d1024b1431989941199b4bc5470a16ebc46a8cb1d2491f6bac31d6a901d8a3ea13608ffa08b5d02106941ebe78598249131da6208388306630230a247648a20615981a56e4c06a30458d18d8334a90c4c00a2ea650c1c115451736f84026ca15336a54d9d2a842e70d6a1871eb86af303198d1820c09bba18106c6387534ac2481860d3ebce00c313fbce075c617253e2fe0367c9da183aac9299588c2891a6c4083154060d1c403dab8020e2096b828c344938e08ee884c8d1b36359a2479717930803be50c0e7c6882c9173d80e1a58b1a40e921075b6c60034b0ae20ddb7dc1164e8a5277839d65383338a30a06f30a63e61566061f255e6292c8321f29a91eab140ae3e42c8171ea3c307306106734c178fa2cf1adb68c58b64c03892352c0440e515ce08505c5f070851466dcd0e20665244d39e24ac1801426b0a821494c191e8c30c2881c23a0f0d08c075e9461c68b076136a53e51541bbecab862631bbecad092d1df38ef968b725192d076ef4532b79284ee762abf5dd342dda76e45a9319e3ad93d99e33a8edf4a12b2798c512895d241ba952494e351b776a64ef61cd7a173e8d68fce8e752bcb6ea3e1d4d93e73772e5ffaed42f49b6e25696fddd36b5a68becba2bebac5c2d4c936a95bd1b52446dd5a61ea64bfe7244d763a64c58c46663559cd212b6614b24c99de6b2505d5e85664e5a2fbeda75c942474757cf2a25d06a64265ea64d9371a182b6a254100b2eab143d6a68bea21eb8b5476f62d435697218bcb9075cb5052c6937da184d283a20ac2ae4264d5ff4896d294d912d71ede28752b2948b7228b625a85ae1e29b26afda68f929cc0c28e1459f5da678eac2b23ac927a2c9a83f20af631dbfff810b14dfa79facd7eead8473d75ab65ff4125294fed216bb2b057ab87e0529413cc9d87396130c6ddef9178e75e3b550addef853aad853cad27c60161b9923c7225646a68b40f4feb10f66fc810bd861deb86c463df7eb71ccfececdbd4b402648c18165175b5ba5d770f4f632a7a1c373d4efa0081bfd56ac5791e778853f3070952479efaf8803f12a036c16482c904a4b37036e533fb5ce769249cc61a4f1d78a9492d8b3b7f6c77cbb07504e366b6560c33bbc2b02709702b49fba63f75e45bdb5bf8aed8b7185cf5113af3914dfbb0dbc3eec8a49bfd892a2592f617b3af74283bddb31b929d66b5d3e80eb0ec6ac5865eec0b4b80e14b8c29fb9a606bfbdcb0ae08942bac65c4da1ea56e418523284b983a73bb0aa64d5b093f2857a88a2b942ba9a518a6cf68c7f86bba9ac6d5173ccbe9a1225da7b1cc2d10d9bf80dda4ed6d574416311d07a2fba864edb495450d32c666240000006314002028140a888442a150309c6a9b281f14000b9ab24464481408a32086511064103104194308010000630c88d0d4900375cca1d5a4d723ce37062ed9346c430fdaa20302e9c162470da16d8d4df4049342b18300ee09a0694e91046d6c61790453b8e0d7c5ecf0aaf9a74af07cc8a3684dc86052d0dca3d2572421fa9b826feefbf1a6c5cec608898130d811f8e7d9452d7351c83fceda5653ddbfc07476a6bf62e95fa82bf19321990a78af02f7e7cb5a320cfd459d22ebac62ab5ce8768f79c71864a10548404b77bb6f0527e5573d0dd40f2335db85011e851eab4f493631016d5d41149817d69dc1b6069b57f359a719608154b751badd8d2d86d0191324e2a053ade5b3b7eb85a05eefcc5aee10c6b0c2e51a2d5f0fc3317756e0858d8cb28e72c2321cab02636cdcecb946e4d5e046d74053ef53efbb979e20cbfda4d23b2ab782f7112a4e285097ddd8c0d7dcf28cd9f916c7c2e2c5568329ed7a1209eda95d1f6f4180ccf5fc270fadbaa11ad4600e7be6f3973f1991c41a18ffc525a91f86f9c508ed7d007a425db014063ccaad2699455cfe3d698dbb4976f82ad92fbac844a027f44092903d6ad03f4ee382a79071730171d6940392aa4d684dbb999247f10f7bc874d64b883b37ec6a9c06abc364b4c2370a6e9a49353fc50371954adba91b1aef2031e14b77d1053e9d2003750f9a4c697af3d830e342d74a1c784d7359481e3788445dc5ac73e5a15cce14ac5b49f44de4838159fd87fcb5254f0720a26dce18351cc9739fea569490f379e2cf108493a87c34911d36ec1cc0026c1fed950ed963870ad3c241632d36f2f400ea34dc0389fb6f425a45bcdfe9d350aaba40d7f5ad6b6ec1ff52a9a73f9feae33017da9d03898a0d90dbdd038501f4c072cfe9985ff38e4822f696e85c24a69d986956da0d78c59eb83693148f571581f8763498503b0325027439d1254b96c6a099cb200c6b927d80359cb036ee47692d2a18b51e22478dd3b30c825b7e5e97e01c3b34458ae1e4828807af34d7e46c32fa8eefaf74082910845d557fff5c0a5f2b8328ff031326f1c1019f65acce05428e67ddaf484bf853e32fc61e509c74329b20cd65ded6ca0dd02ff154e8566411e6d2affe00216bede025ff8379190e0c75616725e6ea48a0b28157ea97716fa471425de1ac1694c106bc0798073078ce01c607fabfc7438e94735cc07610e831d15b6d902520b6180a982b7187ead6351210a7b84cf9be18dea677020cb0df4338d642d7a3178c347a67ef83f69d2a4ccc89b1db9712a3f25d004def3ab4b73a38ded25008e5870613a223204e2a8fa9a7a968ba81f1af8420de6920b8152d9402ae1a325ddea1e987b841e8fa0a2d3e742d5040601c18eeb9c954aab181d56a1420a134593b6f0f0f3700a970a7c0900b97486fd012c7f312ec4ee589a2f104c84f3fcb3f1ad5c55441cae65d24460a102afe71a102e783b74080c20c1a649cb04e2814cf463357328b07b97b7278d556e240620f7e8f5f14199124485192cdc693fd839e9982e7cec52fb7a96f564b05cc858c4cb4f3d8c6451c016c829b5d508f22f57c6b27020e17b43cb2a39d9f59b7b44aac601ff970c9735a541da42fa5f492282a197fc19b677b990186e7d99d0075724f3d177ef2fc5886a0c0292b6ba29a55b62b63efba2f8b37964e8d059db649a4a017bd995a1b7ff8e8b2cd9948bca23a1ac53d449f350533cf4528b1c22f44e78488f4ad77f9e41c82cee21234ef3913c1962a0c5184f1b918b18295f5703890774ccfae07603a5cdd647538810be93f6a938c6b7307c54a138be373d86c6c87257e82862132f7d33ad69bb600738aaf74954a384432239b0c1bcceb68d3307915cdce8b7bd2330ed59b49312baaf85897d20022284157cfd16605d03572d2f085711248464a965f01038a5148769b22f1434c18a9daa6f21d646b35d833804547acaac9ae0b3c8d9d782cc092e5af51f836aaab8686de4e793b671bfecd3447a20730f3da0ecadd60729ebd0f90cddb5c683bc877afe8875b4bf9c1cd2026f2292639fce437264842489c388db189f7149bf2f3430409fea07e4fd6d2e750aeebf5c0dc9d25e0c0ae70fcd52a070ad3509b0e9a320253f0a82ea2f40454e52ec05e85e8b5c4b05031dd6576b24b290fbfe1ba443b3af4c469eae307b13730366359226454465f4fc30e6c95da383b4d2c6858d36f9a1ded6b28f3257be1ed3d297d6f50e3c4d4b1ba8981a05778552261b547628bd7c05191a7d6a1277a00288faf7ceb106a97fe6ebaf2c24aaeb6549dd823b8379bf2110da970f4ecbb72463106e358617f2c892064d711efd333871081e7828a6299bedb4c72c4b2377365af4fc971b9f25aa5874ea4a6934ad1f76d6eca5f3d586d23f9ea506a04ddc13fb216479f5d30737227132693896daea0a42d00aab4932f06610af722180686492481047001f1b5b91481e84a02c19fdcb853fc4bfff0d60c2747686797340fb31157d2e3d757c0f3295ecc416ae54a8d9c11188f366f0d3cea941a66e87b868448ed6f382f444a0bda0da5647129e3f7bb938c31cbcb832c31eb28e958f4afc95e8957cd04dd24669151e25749840882ec18d220b75285132e6ee8804cea6203fb7b322aa122ece02a278ff7022f09e7d6acbead7ce1e2b8262e08a7a4638c361951b370e10a3feba1c9ffa3ff4fcd744e3e74631b8cfffa33701f635be1317469395c265013ac76219fc797b7d626d395a0ec2484444d78eaaaf92bc82c29478ea4e9f13316aebb3a4bed6a5a542b3841862e09abdc4b71d82b632e9a9f171945ccd2b27850ea290ee4778c2e5bd4d2738e8f6893c92e2b255a6f328baa8ed9b639d09d953613cd078744f755081f568eccc26e795fec6f2f18a87405312b6cd64a866dccc0959c2d4e7d0ab13668706df6b095971ca0fc83729b863d701c5c3ef575c2482f4f0debee90b3cfa62e309724d13fcebab7d9aff519d9eec474c156058a23d675de58c1d5b0b72b238e5c464c08a229c85626d09fcb4ec466db18310536be245a13be0c7c5728158e7bb57c0d511132f879187f56fc3208165193f2c85ed5abc06f105ec8e780f4110a6d997c0d3e15079fd4a3c6988718002cf3d8a3268dd61333c9cb33b898a693e22f90341682f127820b0891d9c9b8e60c154f43035d502f29eba1dda473c64d2165571774f3c681d24a9faa498df999af5ca31d806678b0a4f8d63898530e54bb8feebbb8a3a9b6c4649a71bce208cef368798f3d9e29a9696401a5e5ed8e322af089a5e115087a58eee94a06bbe10e45bff371f7f66391a3069ef4cfbf6a627596621691c97230e2426ccc3ebf393391295046668a343ae56abd17507643d11b10fbb35e3b0c040d9bc5f6a5d53e0c93a3c642914677c3f4229a3037880724a07408eaa1c8cfa4642828ac084268063d48cea700955be4bcb5a15426307a1e4898c92206ff9462f2b6aca1f61cfd67951575dd088bbcfac1b4e0fb37a75092d821339b5f0ca3dfddd06649d9f8f5dbc283227699cd253a65510c84046b5c71e8824d2448eaea6642ada3846ac6374449e57de714675ba50277fe50928725fd963739a2e63585682742ac2366cc4fa0ec6cc1ada4c9f9fccd6bd828276284b74ad4fc54f7fb8ba4ca6033028493062da2ff825b35925c67cb75f3718dff2265c43a7b2b45fd1633135ce61dc994c58d7a6595c930d542d3bb1ff73d62f70fb88e43d9a2e47d888daa3b5fa6c3f6a9f1ad31b13f40c67bf52e5807b2652758896a69619b5759de0c099da76909c5e9bc0319cb6fc0465402d44054c3f3032d8bf517cec179a1bdb4627e621804b6a444d7d050cbf9e8ccda074dec88fd87c57f38256340c00b1a5f1e01c19ab76d3109e53af0cf272f766235c37e01bdf3487f53316f01a9736c6b9e4a5e5991f4e22bee6d6b24e72184911d4e9c7955e9ee17c0cde353ef226e6cb589570efb3e01c40db2ca5998c1e247d5e2b8c0a90ef80274ccc0f28c129bc2f7f54ae0d37a02966c3a84fe56358c4a232c981639961bd92400a9a8cd6c879c2531c4476dcd7ae8cfa67a1cd5d5e640248715f894e4059113831d21026058d92027f452863997071c54d99df8d26a0d260c0db532d87281858d2fc317245528085604b246a885f64e466ca69fcce9bb158446b954e681c493b4b2b8873539894eb70786487f375dd5f5dd96fdf9e443b8796a92a28a819caba11f6b75eb6b862b7fcfe3c1e6c473a488eb5fd3c9d5a6d6e0034744608866d8add11d0675c665b6ac20ea55fb661816c006500c48bff14b6bd4e050b0015b1724616030d4624599ae6326e6fd90022021e166d4a84e685194c9d52c4137485c47eb5724bc7072b1e90efaae45d05866caea9537fccde205eaa69f3e88e1900ad3430e156ff8ff30e717222a56baddeceb188135790734b99a181cf2d369e2617098797d424e7522dd0cb96ef3d6278f9f189182f8294b3158cf587f032d5122779a0904ce024e5a1f8a6d6e06e7162dcab3c5f55f01028f0a7e13812857dc87141b2ead0a66ea829f9839248640a273daf00dcf807e711682d90981a8511df71502906c33fbe04f2498735b6cad9b04bac891f3b1324f5e9bcd0731fc78481bbe86839bdf7c5c5dd7ce2b5301101aea334105c4180648b74b454571daed62a93c2f0caeec1531012d9fdc2e20c94540d654f278fb59c1b8bd125a815cec5e5ae85f2e27b9f7f2df15727b37ee4d381ac3ea886b60496300b65c30bc5c5dd0851342d43a85b50802ffbeea7f74f04bfa6f66becb9099769d15f35de04563ef841efc4a2a2815d246dffd377a5c9e1a5466d5c271567eebd2f305a2b5322e78acffae9410411988bdb8a4b040779005be80fc4d9d785853c4a6fd71536d3849936caf90f7ee90494029be1a4c258eddcd2ba8bdab5d46f0be9273055c1325bd47c446c0054a1873798cece702767d625b81afb48cfbd07f40e07cc96796e46b956a2850bdfb8a0f58f0dc82afb1db289a8d094d88e0f79eb899ee8a440703b04c449e604294e5c6688f1ea5384a604aadbd9f6406f537307eb4fb82f48530fac954ee217939bd675b749e6a1d1aaa16d2a1e3170a7400d141473d2de62496941f0777bea68f3b1b1ffb293d224a26f6b924a856677713046299ecaa2f41e93a5002214bc8dcec7175176b6cb6362850e403766101f0dd15bdf573d688610c162e60aa0e79438ea58616524cc5aaa4d060ab21f40b4d2a0837183e4a212bab5fb3120d37d58bdcfc113ff0d3c24d98eecaafa8a7bfbc8b821dc33f79ca6cf063e6e1ae8d27833e0c6d5184ceae55e6938d9a7ddbf7d81abbece6f1b62a5045b44e2d73f4add0ee7de36bfb9405f669c4c1bc1b2c6a0cb83f9f85079484033a5d61934a5cd8aaca2571a386a2270683cf5240682a4df7a7b172691e1c3a00dc0426cfb5399921e2f5ee9c0814ed6bdfb58f6100c9ddecce8770f0bb2eeec4801f66e179d11960e884b981b1854e8c05ebf5eb85930cac10b50222c2e1d4c783aad6ac904948f832ff3ff13dd26ddfb73601643319c995630c05effa8b561d847259099c88a7000bb9c8c8fd18a8a306f49062b93cc5454037e013d6a5b82b2ffa12325b0287d33f6614def781d56887007a04f4e4f7a09bb9c831cbc1558a0ca56487f12669871da0bac13be4fa25e25024a7adba77be103900e5e6161c0acdb62171b20a695967e2d0d0e3d2cab135e83481bb3e1741773dad9345e7e5643468ad3bc6e222ac7ad32f4027f58e462d308fd283c71db63a54c84adcf87471020ff5a1000bcd17c6db68256ab24f2a2b6e81a6e50bc9b2e051b76df4b38a4b2c65661b9f83b0adb1e1a2c85b2a50b1af683bd57f36146eb0b22d49db107a40219950ac06d935143e7b1baf31a229cc7cff218557e6e18d73005e0d1100c7f323a5d78939bc35dc5680b4cf41a596e7c04705e10b03c1613a31ee107371a81661af5e454118726259e928475b357b3dc9b8fdff6e3255f44109496d940942869069766a1de5d21bb89f96b529702f473ae830ec74fd01fa52d2bd7cfa5411957f199e7f2ca702efa6ca53ae25bb661cbdfb8d92715869378b2fc6a5bdf1085a701720b2a52055da3c509a3105bbfcd165aa44a638b6cc51ff0525cb1cc13a7a13d3649e677a126cb41055c6442b1cec2100db75706ffb75228f67f8d5fa09841f79cd5ecea8229d0cf8787ae6898f2ce08662c35cfb732950f6b2c0d95c9459122dd6e8d6d9d5a3da598ec47e3fbab14b8f988a3a55eae6e09fd6d87764e1861e31f166ac09ea49387ade84f0c33008371ed7ad3c6191a30269c66c751d99e2920374d50c5b5ee44cec0a9d9169f90433136859e69e09e18d524a5f4ce6d58025b8154398948c1be4783db935f2ac5a248ce29f7bdc425102f4308f19746e550e910cd8cba6aa11785f93e8fda6cba32268dcc6e68aff85850481c6bf11d2afc0d8b812b2c1380c42a8b01a03ce8806b66491eb159a64a2b01d5712c909a6230743e00f86bb380dc7b332b06bf410b434aa111096f749c6195659ad1c1e738d5fac658dd05094af228deaefa87f03e623e3e88d593cf9cfa8c04383d472a61797c4718a524662c4934daf37072663a1c17fa040353830fdacb1dae4974326e20893cf6468dc1fc0d977daab0c318917b221d35d0c01bbd4228483efc804c82c020c2ae54aab227e6d882a91b420783ccb1954a0dce21f2b00e947414ac2eba79fda86aa939e58780c8253cd8168760b224663c07a90dcd67177223ee8dd6f30609115e8f164591b314178729747e56340328b50a00bc900980c7bba9439811889a86a953e48473c9c47e3bebe9e9372f251d9bbbaecc8d80c0169f8c392e6e91b429186b2d6eae30b9985abc97e093d4b11f322f548927de6a32f1c03ad1dfe273c4e56042cc96c395041110046bacc813f195ad87a9cd90ae11206f56271c93c97fafbd001642d1b18f516ccb916b2ab601f46f12702dcac13d817efd79f3cebf5d2c7ce4a67bf7966ed6c3b7c4bb6d5795254099a230c926bde7803c506837526822debfb541422025d5c1c02a5810a3bd23495752897383b92c02e24549d7b2210b0c0ef5fb4f4b7009afaaa82def092675fc0f6332eb41e77f410a4e5be715b3d823b8f55b29aefbedef43152bbb185b024886029f9861b900b9b9083cdd364241c4c1151c2a99205182b095518356fbc64f4bef8872ebb9e7d0c00ce476cb3570f0ea0342035dada8af2024aa96564260b7762f293d28b16e186750b009d3a4cb1004ad45b8d9fe697a05ae8a24452a1260c2024ad23d31d48af58bb65f172861604e5bd24232cf74cf3a8ec4e17b6c0f59f791ddd62120d94a70dccc6314138a4fede758b1a622c785ffe61f1995fc0ff348b6f4cc2011f29980d6dfd6c9511b84c960271d80a754993e9b0739535300e0f3d995cf1aed410105a294d48dd54db35fbc6c87768134f5890addd6f7abd01dbc476432bd023d7220614f277fd0654335d9fcc376240d690bd18a754c20e598fe99a41b5fa628aab025edc7095e3ae41c622abbd09e61f56e04f6f441e62af6b81f6aff82c4756b4587191006665a3d83c103a67e8a2c28d253ed59602770a6908fe96d0d9ab50e43bb0ac32039de831515f097f5e4b9a717bb40ccde2dfe702abe46f97ba333c1887436157ddbd3120377599afd200b749d60d82028b38fb121fa53c2cd122412a5075fe3503817e2969f2576721c8932970b41b6762d000f647d142a9fb508d2ceb213cc98634b5e987d114b2cbc306f153c735f35f121e64f3d9a513576651971329ad5a8107ca5daed6f5cef0777c656ce5e76efcaf03d3eb8a07da2079ea798678fa19c284c2df23c759dbd3416e336bdafe4d31c22010ca41345705fc5120b5d5783e543577cf91eeea98b6fdca501c3b3811f582974db336558fc0c8d0b30d83cabf22bf45f55daddfebfbc421bb429f8986db1ecbc20130ba27e801d1f1003f8d2324ffac2d70ce19952b4a22bc9c5b23cdb0231b959ade517f8e16598a63416b620857bc9fd1190116c529c0e16bf63fb0890c562995e4753652ebd926073df1003d39081562aa19e41a7e02f1a4e78fb0747c8eac26a64288ff32e03a8aa5338b02cfa945a6b3bff7cd886323daeb47616542ef850729548d8270fa1b25740405b0d46c2003f87c04990f66c382c4ff6dfe77d07116aa9332720e3456270acc3450c29e1f4b2f80ff9b70552919321d45e890fa1d06a2d5ce105d85095c7e67c789a1e3047d10a6ddcd33c716c078414fc444b1e8891434f5f9096d0ce7c6efc63e1bbfcc2ae1c4750ad5ac217c3904af7c55d8747de1d70be7aa1e7291311feef4db04fdce0d40c43d7a1cd7927e11ba6bae1ed8f1b86726d06c84cc4ae77ece3325898a78780020c8806bbd8ec690d0ff4db84497a24416a8b619d62e53c7d26d6d31b4e0a485159869126bde4adefd4bf836ff553e411bac580fa246e342531fee8b57260c6cfb50d2b0049cf0227b25fcae7915df6d9626c86c370a533e5335f08ca17eae088e5a3c1c9512f72772329a8897e1815b303581e3a5d6bc10d3e34a240c606f5a20533e47d9853db244a0c641d810b9d346db675537c7f5b4c812d8f890fc0ed15431d80bf23909f29025578c0c97790c849a668a2a2c81192cfabcb7259514175d3b43f2fcaa04fa1c3d00ba57543823604d4b22a68116aca40fd7f2f59ed2772e224a311061810150aa7af9b89e50fe3d49d40cfa87577c09712c670cfee67bf0c5508f4b589b90c7087c1cf8cbab99259f5d5ebe4a25fe2e0431c4b6b99cca78f1a432061f5e10ce8a58094fc442af5e91b69a473ed69b9c6ffacb092e8cbae453ebc53630d40d57509b5171af2e593e367da0f2f02c521fcfcdc0d088511a9ccca8ff46fc3e7f6e2ea4ce021e63133d2ec45f1b9d708d198f65b2d24c5646c649ee5a2e2719dd029a8848c003f7d6e11bc6720946a29f584fdf75fe62d60eae5942d4008e0fb8523a8131b14ec9955e7485ad9df0b354db3c1749980f3974c4784a0eeba8eb9701717f89c872a645c4b1f6e2a8c752617aa4d220306174724bb3786de6872b75d782d5dac18bddc184adef52e4d3937102fc55d970821e6744f7f1eb6e4a0953b07f7102f8fb9ad35c9259b5efc7fcfb9235870c6a631479278aaa788cc75198e14fb02caae2c3029cc451bd15bd6d9794d8d79e323be17b0da039dae9d00ce462e0b71653254b006a2a416e95cebdfa45958cf3f36ba300b8235de6dcdebb768223ad39f7921420c87cdaa99779e10d25fbe58f99f018a7385ed724f889fdc852acf6c3fd2b5339a094965adbc4bb619cb5684a2b81728f41452e8e85a9a32c533f0cd1094a791af6e91c584b71beeed55099066592cbade189b72ba7fb68e662d7d9b8da7a927b1c2bbd3d8090f6d7de7308eeefdb92f649bc4cf6ea96b839b30506cb7105183b2c3a0f5183a71efe89772b58a6f37280853fc9d5a847ef73ad6c04f79ac46eefa4e1ded511da3c68e84b13954d8b2061ed1d70b156de7bd6b5616de911e689cc276cb05cc34887daad156b2bbfbd6bd689325180fddb99cab17e29589da0fdf3ba587d5cf4ed201f8711107e39accc80db9e8d0c0c2d1cfdd362070182c778316229f0b8b39092ec4ebc2c64afa58bab0d367e364f9966adc4fd9a0b7b00d0d9bde643b717213c8b055f4690ad7c2bed69377052bd223c157042604ac51a1e4c70ba4ff2d33aec089d498f112b4b41ba04511628016ff342b7ea4d8b9bd0243e546f026740d8f895cf39f618ee5e6c7007c15dc4db073f7b56f79bd31b39deea881f5264a36458266dc201c1c56bccf5b72d26d769d75dc62131e68e6cc9d6196e9f2e314e32cc22aeab1fcb62ded1e819dd1e9cbc5ec1376137484b83a552f01faec0e07d7b84cd79a0c7d27dfd6560b3126bc626266d3dde686510410696875a193e7f5833f8fe6774f604edaef39ce9c8e2fee29dc868828ae6f344d45c805b7bc3017cb11d9a3a7398b97ffe94ea1eed630502bc24470fdd02186e847dcfb946d0969484c1cf77213cdaaa8ecfdfa98b1195f5ee0870b3e164991436c1c4f05f89f6584721107863791bd6b918c799f3ad8225413db5b909798cc56d21b9285a66693318ed3861071ee7710403ec0ff7efee9a144049ba7d14a230c14102fa1de8d56240a08bd549b301f532ec24d48fcc10807635106a17e53a918011eb695bd848fda0ff490c804da7db58fff19e51e39dfdf47214625d64fea1c973ddb3007d5c33fd01664d9bc9b04123e826671a2a7e25e83e28055b61ad73794a85de04356e60cfe307e14086755bc84ce6ac73384ef0d9bf7d1ecaa66deadd57d36c10d1f74538d1af710c084557948c187ee883f6329c99b40292b866bf79155f598064f89e61d2ccac48ac613827c97e128ce18766e7114a6570e7d3db8799227549ba5b34078d74efe910cd394924f27755d2713a07b1c19349e336151291372df3f6fe56a1d57218102f822e9cd7a3387d82c8188bb931774636da73bdfd4a8582e5143a65c1e9f7becc5ef619dcd5556b4995a09000b8844c1e221c3d8f64c2f6ae34c20733c975fb00db5cd3d3563ccbcf191da754621d100c7a915b7d3b1e078ef2d7cecc07bb536b28c9c865eea8a552b96217caf5a92e7288acb180451e67ef1059465ef67b7622dd2ebd3daeb89d4062399b02183b8e2116d005b6e866563e1b1de58139381cac69fa574b3ca12839f1eb46891110c649323592e231f155d900548b658ee51a9af10b6f2d7860108740823eba52783c551b6e06947df791261d372e799ce4eebcac667f38572e61a42070d5421645202ffb9348d59fe2999333b3fac6e8f2700502581fd31f46477e45840dba4bb46e2395f95b7790ba8e69831cd9756d15b4e36cefa507f08464cb0ccf5bbfc9ac7aabf7e284610b164bb8d5b92b11d9743908825c53b3fe178002f0d68079c4f88f4c35cbbb90db1e26a7fabcb458952b8b4f9523d16d00fc37796472dba68fa007fb9918c67f8a98ba815f86daada277eff315a139930ead8bdc16042c913f7d905454398384c4a5da115fb0217ac67fb3c6c0392b52261899e8ac5e373f235af9454e0741137f300b6209cf3f54c60aedb94842f7065caa919cb1a7d19f7492d3c1118968678f39a130679426a8a2935b5e5be30a7e2a6a88fa6c4aec976c0e0df82b54de8fe4a7a2e5ea39c7eec1a69c6985c95aafa2f25ba8bb310d1926551bc582875d9b5d8dcc2508c00f71e0130f896de1c49857c948d7483a92b4f1012254e47083be50832812aaadb9fe2c2a47f1f856d5f44882999a97ddba037dc40a88b6a434d50dbb4b9c139aa7d07a1ed013aff079467d9e7384b910f25528266cd8c2afddce7fe4cb3ddfbbfc816d5e6296cc424c6c3b07317b1aea13bf9d00729377a749070fa8995e08e8b9b3a12a1db6913e5449fe8c8dc5aeca277443357075e0f590821207c780369446ea701ede0efa2b769918e5e66514ae6ac1fb4ae7c69ed0ad7053703bab8b863e3a936a14cdca2ca2169b50d05f7cbdef977853731df999b4442f83f3a8661c948296cc3f5014b5d1e1a973a920ed3aeffd5ab702ed519ef20002a398e72788ad2a0567fbf80aac395f28a8f3b993123310cf897e5476ce92a7a17504cec30fc21ecdd677ad287319a21df3e5b804fce3527262978974214f530d1d4dd240a678ffe3f94277573d4ab6df4a25db68271cae801a0d220799f7d64aae020930ef51e2c75a8b92552aba3ade5fb73e72408ea87284576e9b44c6c4ed4ee19fcade7987b39fbd5b9e9cb0f575084176068246901660587b611ec9b5c6db454a9f89628a35ae8041fa6ab5a4f4356b2c7b98ec5fcdce43dc61127859537dc88a50b3b3a17ababe213cea8230855a924485d933b1bae292b835ea7aa96951a32dbe4a6168ae38886c5bd199ce85a37030c90aa44e2272e24fc70351eda802c2c0c79439a45c15a31b3b351459f0342e562d9611d3ae9ecb34bf9ae0c5d0f81e067e4a972abf1aa2f822058eab122bc687f29343a74c32d5c96c590da92987d1ecd5882df743cbff9fe9a515a1f3efd595880b50102d6ce1555747bb196b9be029e4ad788a22d8ef74367af2aa3076cbc2bacf46676bc5f76dc6c25d035ee6d121ecd2c320dfaca27d28befaf1c35e05b14f64e4ebec53bcbacfcc5251da32553ca5cca3d9360f62a7108fec90e80642d261853262cb6aba91feef50dc3e920e169cbdb7ff773f8e8de046ca755c2af1dd6c14006ed84088c01f15c1ebadbb5906bec9e4559196af6ebfc4c12c4a7ce76b2171588c00f53eb4283e717db5f5675d108ac56e6915f1834ad390b3b03dd351717ea6b17b5024bcd03af387690ed57f575017efb129992144f1772d1311d8f087433b1f3bfef8fb26d93f97fad8d0dcdc45fa67aab64504a1814fbc09353ac456cbebda00b5698b8ea13dc15b039867bac64469a5dad31b3254a3b20442e0413481ddabdff3b47e8b65a342297d68b46ed65e3f4008b5553a3a22d2ba247f9571842d65f64cb1e5cd1378b656dc391cd96ac65e901e2c0bbff37347af4998f519667df1ec5b41c77c3590d977b8c4594f43713b3687cc93cfc4767a2cb65417fca2aee4dbb88d2475df71f7f920e267765e5f225ddc74fc1109dd63e2c27d0694cc5c53d2a04f74ed324817b19ff38b5144cc77531df0cbb745aee55808aeccd9de9e8ca2d89d271d1bc61b5433e02625debe08acc917fb7ca1383ada5eb967458e016799ae4018fc813206091e11c32ad2789e9b60f53d9452e26f1b1f7a81b1a989b1556439f613bdae70f94c884746f0d11c39bcbe1eb17c6656a861a2b7afb6cc1af563e7e1688848ab30ef00046665aeb2d61506f1c738c086304f54e5f3013ce3185f7cd8cc298e213500279653ff118ae7573e9153729a6e714e7ea8a853604afb34bc3eb07d2a63643566bf10762619b4d2f514026388d23d8b534b1ab94948f15bfe0ae1e5e83decd52e23a18422fa2576ce84c7b987f15c8fde0e1aa14fbfd3a2e5a983d448f658a58cd065f04c11fccc0960e4b646de68c10952b09df051a730aae420e792acf8e8bef3a979cf5fac658644281d45bc9a51ec3ed58fbdc056e96c0642173133078bd1c49a4ab97da68f7ec06bf601504cae8c7701df7ff7c47ac7c1788218311010e9ab4436c4b531bd7b9629c4f401e8a685b292e1af6fafc954892930cc4e3daa0c968012eeff5b4a1986202d5d78585265e363a8bff5aea69be86778237afdb6240c0be82ecc6326ca2d5502005f42a0ed67b4957699fd1b84292ae33e78e109c20d3de9b219b9c4a23eeee1fdbefb801ff21f0eae0be8499cb0ff2af3805f1e6649db684ff13eb4cc626558c8af52fc8f99564448571cf04b9377694e81950d6f9989a5756d014798f3d0fbb1bba786a011525bc6fba7e2c52a4c17363628a4c3e1848b980db121ed94e580ce0c939956c12157bb6f5b8523f0654939c0232e0450a7516824c4c978852834b43e32a8d25306bf8c20f5a0024b2fc617ac1554faefd02dd4b6334f4fe41c70263775a68f59e354ee52f4d931d6b00c2f4a7afdf3ecc864fa41a98821126f54c0b820e73e6756e115f7623ff380380477a82ea69b489674d213c1535009176532e496fd83a192d93c33b7937bb4fdcebca835f0d138128f0cf2f94493209eb7b5f76034a30f8f97b9a3b13cb6ad9b2e6b734b53019042600848c46fc9f4636d256cf72ac74493d1aa722a61b0d6769cc1b4bc50f8000755fb4f119986af3f7f9153ee67da77a0cb0fc5215dc81b1e74d75ea9e73bc1a053c225ac96f612d1610e7959109931b6372b37cd6b932337810141a37672e6020a0f3f0a69fddddf9c0e042b2af207c93f7e5524b384ba23c714d42148775b7ce23a227f43ff0730dff821ee140a0b5cff6981ed33711d2e0a8616c831f98cc8b6ca804d7f5e07eba49d38e22cea98d299b9e88087ff08691861a951e79457db24054e483b2eadb9d3f746ebd5efd2531586ecb0bcc8e2847fc6e0c9535471b3b5eaaa0a3d9b1a1d925a405c76acd5216ebf9e6766f32aecd060280d846f182a8195a904fef37a0605b1e86ce83e9e6da11ec25f13e389571759166d09059c7c95c505d2e9ba676ec2203cc2277204019d518a4c08757c4b0bbf8000e3be1e971500e1bd32511d8bac287b5104d192fcc76a21dce528cd8370dd012c13e32902435431750dc9f5ffdb9bb0618e4f5346821353321c65833b0ba695017997852db47c718480c30e97007b98d518fb3d4d27be1efc14979affed6f8098224ae84c9d6b481f945852827442aeefee7c8dfd0ccdc1b005cb835d064c58d335ad8e474bc8a9ac656e59c5af7184ba514347ba143dec8df241b9aa7bbc0b9839ecdcb16c0a52203c372d9ce80ed47147bd47ddf4ad69e6d6d72536fa63da27bcff39c50fec180dfc612370dfafba3be709a008ae4346003e28f992cfbfe936b3f79a394e14c1d09beb3c32e0a0cdbd67ac85b6863cfdcc9f13a062977fa768c3bb905467f4b8b5d15a888316cdc9702268282ea2671333d7c8693ed41bf080fed4c4db39606493e16de827b6d94ff6db6756aba5a9e19d1b3929945fc131efb31b21a20ee5b84f0feabd4f14ec03e26e9b075b2c8977e37404c15d66c93a08bf217da316b3c0548bfdf884794f334f330020d5fc3545f62eba20e95c4c761401ac87f0824326a4d413931ec664eca3199befd3a6f7dda6f866537cdf34bee726e7491e894a87b8758e749365cb0ebaa30c9293385bb414acd212dcd2e57a0a8a5ad3095881f65ffd13b7880182cf16ab085c4ff8bf8bf0ec4bb12545dd97449da01cd2e1737bdc7fdcc4004972ecb55494aae2f0d608943cc327a25559f653e77327a94f3fdb8c2afdaa6e36e252e1f05cbcf6ca9608e6e249a41c429593c5acba6df2be2f8c6891d594fea051a9506bffb913ee0e0b89a517a5a09024a70a78df66becbeb2ac8695a2b4580162360c11e9ab986110b528e3cf7d56338c70ba7427a25db33518b08121daf1a8d9ef4fc9e4e0ce9dd5d6498b0d38ac458c9df96c1a42ffa44ddae1a5f3cf0dc2d06eeb941f23b826af7f4b237fa2411ddbd61c5296930abcfe6ffd91101eeae075859e94d16d7748aa1595b471c08bbba3b0278b66f6e5e9ae248f6e61e16273f5bc0c01e4bb5637029a20902c90b68e46eb7add754f6f90f751f473c0decb9589778a85e60d2b303999c3a2f03bc0ed72d31567045622be0fa391f989b1e82677b750a085f8304c2aecbc73e14832541e669eab294a828ad6b911f6f05d9ad48111fafc228988282e7097940204458d9ad624528ddeb42fa793385eeb5c90417c067fe3d408db38fac67a9610c4b07a38cb6ff294b2944178ee026c1d806dab3cdce6b4dd40fe52e355c4e50f8d77215bb54ddabc9c7cc20f09bc253fde1bcccdbf03511cf7d4092f3822338e45b2a78602db0e8d7151f3a4db14dac4e042d4b72613af4911baef8e4632a509dc3bf4223416d76fa6d54faf9ad9150da7d2d7679ec093cc02ab0772ddc8bcc4632203a3f9e7d098a7010ebb494c2dc1ee2c13c3b46e8262d27b4c28a25dd9270b1bd6dd7b449bd61c2d28f38f8acbf878be81af420f83124a0d4447ac1befa127bbf112f6d8b7e5dcb86e51d8c82b7c959921371835184aa26d535626332557291d377279c8193d0e06c2255371f6b028acddffcb5ed6a39b7c3756aec449d91ff560124c78c657c6cac26238cc8c27143d8be3f6bfad0cb16373bb653c56e27128478a8fa171cac4d9c347560b98c133a97272d282c5fdd37a3098d2bf2c6333b96809f46089265b95b96b0a05cd3ffaace3ae0fd59eccb2843c5d6868be717797864b352dca0381a66e0a364f6754bef6f4bc6a9358c8c14db743e37a8540e90993ad590ee447dee0af45d51208b70a52799bad355e92d4e6c7ca8d9cf2fd65d5158839228a165c963a4574bd6afddf10de527cb170965d122813980fe7717d5275d2caa7ea137ba008c5578bc84fd6fd30849df64fbda79704dacbeb610a55a9d0140ac9b24f49e15328e51dc27641edbd2a87c167b667071c5d3750a62042d0a50af263a8cf6f3c19894b040d22219b6c74c654d0145239c174cf0983decef273884adfd1f50b4b4d23e2e99ee534399af07e825e6636df8274bb43b6748cc4215045a20d9d29f91496aba3321ed9cd6abb2997c455a6a32b90622afd5d42ec2b55e174fd37540cd15d19c881ccae574ea1c6326ffd5adbd46d8e228541fdde8c6f8e131428f0c785d6e05e5b494d61077c1e37ceb2a1f629325360624486b71e162cc125c2cc09d98797706046ba921a553d7e700029cdfc39e5bf3c2bb3cd308e36e059a928e7043a3e4102214e03534e59044712b2ff40c2d9e3317f5ccfcd85fdc3302fa87017d8378eb58a7b7f01516cbc007fcb0ceb698170817bc1c71bdd79e463063bf09914e4a6015b5f1d3794659e0db611694bebd405a7c37114687e97ffcf12a31c28ea60078552504051052a3aebd6815edbc52a4c2752332bc6eced9a9c602598b33f00a1c089dddb14f593911d4811485fe90e50b03d304be82bb063ef9f0b1caaef472120440948a0b0e5e17780fe829bee4612fb6ba1fa874e45661e285f11f2f95e00ba9e074fe897b24ffa56fae96a761d009cdcdaa95f4c01acf50b8eb4570e3fbeeba20f24ee103aabb3a4099bc9fe348840c91c322510c11323d2e988525b0c7223bd3144d873960cf6300f25738faa8ad27e663cd6cb776cfbf764a591846693e80db0044bb4f17e299a1843f2ca242d7cf76a200cf38270d4604522da029fba014d3a277361803167203bfb3e4d44c207e611222181e1efe1a4224060e4962d30ff986a72e02c8342d839c0b6717fa8585a34868639c333a0c711d51c7e86553156af978dad204979772ac01b4d7a3e7c05d1ee5f8dcc89bb54eb0cac272dee0a765787400360a8c39e5d2df0366c35108291064b5444a3c74717c650ecbb5d7f729c3811d79027fae00e24b560f9392c473d639c48ee0fde68b4c2a3904989d512299f21564ac1e4b4a929bc4ba47f646412a2cb1adeebe19e91175da4e7bb1108d0e8406d266a050a739cf5d9f09f3504309aba699f721033f986ab49e9cec7b843f73acdb4d36995889eabb565e86c651a3500aad5bcf9113f45710cb5600d5c69952de46c1f7d42c114d128a033395ab6aeea3d834473dc5f5e6ba19bf322544e9f71b7c63b82e6e87db764cefb916385480c200dffac7bbd27c4d4301f0c1c2ec5a450361ce580d9cf19e8b2f3487b857ea13e78adbbff87eebcc48953d8e89e61fa60976e0b1c3f3ee87966c1ffb9d7cd80b1e292411967375a2055c4ec6d29e4c450c3240f4baa209bb3b1f0fc663306e6115ad3d6b2afdce796f9e9dc53827836fb19f35ef8ee04c4fe4cd8eb9d00a7249ce1a03b39ae7ac22085990d9c36f7e1ba3c72eff776315c556eef67f297da44f94176d65340a7711e2dcdf411db34846670109d9a65e185fcc4433dca42658e1d852308b4a867e2a5e00bed36feaab7fa4ca8356b343f034cf8dc4f03193a47e61740b477d893cc4f5162433f7008a7bbb6c3b06b3190dfac3117ba3d471a8a5b91d7d36f9880a2570acbcfe3b047316749cdcd26185e77aa9f85ca70f7ab1b29016ef4c85155a5f14508827ed15c6f6da4579a26abaa72c087f3cb49d14b83f1649cf5a45d81d89833321e95239b5ea5438d708b529d4136226f25e2a1cb3ed8386a86328a0f3bff19e6dc52d472bad98f632bd2b982d56a8dcf4e6cdcba2f5778ab5e3054a94ea1310406d811cf8bff765e67801ff105bdc2cae7d2fe74d14ecf0f4d2d92abd996ea316a315e316a98094d0379a16baa25be64d3d9da804f9219037c6454627d3c5c14ec4862c9b99e326c9305f433e56aa316b5109fb30eb9daad680516242a0a5311fa5059f49031fa785cfa71d9fa4051f63a24049339ff3b45ee72f7d49b774af4e3e12883ea7c8660c4e8cc22eb8dddb2d2bcd585e27698a2def63bf06cfd45ed84e5b3fcc1b9ad75d8e5bab1893121c1e1fe4eb524d3b7c5e0e3cd982b7bd83adc705ba996dac54a74b8fac2682cf3d31e71a7b096b4a614e47e71defbc243c94e4ad856a1d5ddc058e80628de75fa5bb026d36f2b0d1a81424ef94357c02c3335232954149809a346c7ce9b3f65a076c52880256d9ba2ba54d7ff1ce867d1bf9375bd7225ba61ec260181408d8f06c9d2af17b1031a3df020b5cdffeb5fc55a5aa70c4a1668c4240d4d8e80328904f265d1556b0d666a27d3098b5f6a6a445eaa0ba3e5d0859eb22f6aa3584f9c989a4464c2635f70d144f3684aa241873b4afec239f7d57639592de37ffe00386959f764029e6e871bfb77274d7688d18ec993dda6de7a49ee3f999287a218c78d5ddb4af6af45383b3744623f7cefbcc25ebe3de1d5c0db6eae20906ee812330fed9f673e99f0bcf79145eb8ad15173acfd715335dd63bc95ade462f8c399bf3666ec594a2d712f6794d4ffdbd8d5ad1185a6ee26064a2243f428862879b5a5def6e1a3b52963d91670da864b4f4d8ab2b402c3ce2d4979ef371fbc9ddafa3655eb55e0c44cfb38ff00e57e474f8887dc2cd0e523adefa35d1f671392781d54f4416cca02c8a2fcea9f74b5d412c8ab205b871a9ad8209403ce07e017cd0ddcf1bb2b39415f1504161d351f981fafbef8dc9943f584625da43923a05b0d5f9cf5988b59a883134770f71e9fa33aa2af07241740c7a65c163cb0e8039df50a8faa2eaba8fae018334b94ead87a294a2c9b216616ce2aae249f5d3cd38430b2d901025b20e8512efb9c6844a02c21ca76263c3500751cb8181b97e260c59670c9b0fc874485d8e0538ad0f802986662cf25d1e980675c366bb601e8c72d5a6b5814cbce4300d44624b539eb87169686032b59fe8c95acbcc26d93ff0257ff8c4c06a598dc47daa6a3201044a9eb1446e96cb9f27c9548bb5ae9150eb4db8f436e316ee5ab206879216099992940cb2a442414d57e2a95ef1f4e3a0f9075f52e138cce977752e4b5f3b71d471d66a896060c77a29fe792c95c243b8821b2c82c1286abee51052cf019f15c9e6149b3bb73d1728a4cbf3bcfa2f07c37dba23fe9cc8e5418fe88d459455c29806ed4c2996c2543a349d54d84f7fa414c913aaec4b6060f3a1bdce3e585d5b2d9652f6526ba9db9506b10bbd698e546e1a69f209412c84c6ea76f2cda2439bd5c69b25a336515b2bba2c0c54e5467ad2aa51d223ea91b5652d0c4002fb7169d5571e77faba43672ba0c7cd112b4754707f16628dac3fd20eb019c58e99d0238ce5fd155a3c853fca50dbec164fdbda9c29f73a63f3ff75169769bb0d8f519ab28e86b65d0d49335aacf50625af2df198512961969b6347a5c6d677e7f57dcc374c08329508ad8b664988e76b9e515a39cc4a10e98dba3f21ddc2ee494b077818704dbd1dbcd7bb06d1d1daf2d27f7b124afc74d6147d74864d6115c453c693bd1d3760a922306e37391777ee80335335f0d18d74dfb6d727267c02067194ab3372d2eab3c89cc45377ca6357d5ede6775e7285de0340c5272abe7e413b4c4a1074f1a6e086eb2eaa94d4b293a8886197105d8b7893b27ef33922a8f229503a9c5bf0c62147756e194ca5395db271cd0453ee59088d3b1faf822cb49d9b8e7f42c2776b7b1517d348336c6e17d6e87f21ee98a676935b684963a2a93f590dc0a93db97e0f175464040e04ca9c3533beb26a5389577419c7a74b8408ede494cedff0d38ddce98ecc9cda070b9e3ce14a1c40ff8d659a8081f87404cd0362673add444f949cddae44f2f5b784ee746a8b75b9b1c290c6dde1f7604c7cbe7a6a5cfb963eb32d34bab6b10a74249c0955ba120498271f2d5099ba6074bb5dfd90f8a8ff07cd5c679f9ddf928932d8bc532217bae830c575b1959b75c652e3802e4695022be5fa02541f9a58ebeb61598d1fbe068b4731f44a6d74e552eb7d84e3e37b6870cf7dbcb848feed28cc4411f9a4ecd75fdcaa6cf30540c7c0c8da6e403b342b06f157c762c1755e2f580db540b2932a9430601da490f79cd42c00f4780cbc69c7600a1462011a6782843a03925cd33ca9c72672318ea9bc791742befa29e458a90ccb6cd36031b35a2302090ab735cccb9591f5573c420961f70c38dd4d000064800fd60a1eecd40529ecb9dfb6b7d12d16f53d7dca858642c679d4513c5054afe0675cc45046623e02e999be6b84a28a82682af957c2e412be575e8df8a7020c92e10e62010c4f8c398b7694f3e9b725d8d8780a5883b3f3ca700aee1ea544b04e79be44b51f6b3c4e758245864c624e073fd1d3577e2eee1941aafc01f199e3d3cf3e1125155616d915afe497465e2c652cf4554024e9a0346823a2500670a8f4d4dc911a4391655fffb0d17928e99c15a69ae4837dd19f7b2be03157770c0f74627cccfcd296f08ce0bc77351abe5b9e21760a69b2433e59d992fce56a49b19a99a75039b078388f6d5d909468496b09bce286817dfaeb6c2c421778bb8bce7c22f526727ccaaa753c71f16038c3f1d8fd32bc7f375730ac5f17ef7887984cfe2d320ccc197f8e52565e291ad789e6c38321f8246671c66c2989988c77567da27dd85e911eb322f6e5ff8bcc328cb0ed80c1c866a7be31a43c7c64739e0606ec9cb3809d12f245b3aa52b8c2d9bdc7449983120e8af7f38d3e891e030b499d37adcc08f5f05a6cd6157dd41d95e5bad95e116ab448b2e2a37ac835ef5903152393ed4ae96b02c3e3f4f56defc775a38bc57679421e90b9f2b4a31e2ec9ecd0152c1f0a0713422c4e7aa276b59cc92900ae3b5602dc853d384b6667a45a92b083351506b95b483a7416a30f503b7cd11d704c00c91f74b822680fed52814e65ece3806ef3141328115f6f2aab0ee96ce12c566f11377e4281d0a33272cf9fcf9cb7f6b242c1210624cdd7e4552a2954bad03d8069e820c4df0499bdc07d5d08fb4a4e098404dc414b602b098d01e3c09dae967875d13314dbbd885d993ce8b8e043d315e943df62b1710ea80cfdc04b74b1eaff80bc8ebd2f93c2adeb734fe873b52861d7e9361686ea30aa7ac4618000feb3623e1b000662239739589fe65b8970a14a862bf12b9bd4aa7aa168aad02c48746507537070aa5d70490c02280589fa6943c14990de0725661488f640846ead27bd09b18138210276dfd985a6c84db69e28ecdf362ab8603df3ab452db4bdfa07d423adda16273fbc7019d45d26e76c1c0cea6992d826cdadb59d1162d361bd5f9f6b30c825b38364bcf8fe3aaeb6a0239753b2556f121d98f562f6cbd42380c8db7b947d545e2aaf43e1e0164dd8ff7a7996a8aa468f42598e70d5872bf533e747af5b8f27c89ea8550eeb16d95ae20928f902c5c7b1ca59b8ca20caf562de0fb5302a7c62e8dc446e9482ac100d40b74ccc94e7746f27f2cd8f3bf26376e68c12a6d7a634b6f42c2d5fd6ae51d9f71b228a490f1062fd49a54d048b408c2b111db1ba01f3900e82950c862ca8c009d846fccd99dc36aca2e5a8c596d6feb1ad3927baace933373dd6dfec8fd67d38ea921bcb4bf3adf97131c339498bdac87f33a1820868fd262cd25511008517650fef9a4ccae9adcd7e9aad44bc98c27b596f6154a0d8cbf1f98095dffee337c4847dd3718d4209d91295c7174e86b5a0027c19742bdc556e681f0313034b36e9cea6606dce0ea3c47fdc5b86f2663e9f6176ea1988f064afa6c064811c569aed4ab988fd6decf104f8b07a564bb88f56559bbd05e5e8860c2c502e769a3b9b70b1d6864a79b3ae47e05d3c18acc16153862352b4cd7180aae51b98318c6de8a22957005603305de95e439759b2a4fb493f008d22b0b5ef8298a15f5bd3fb5d81b94f79628c3e6e963d9abdd41c71f01ba51bb5200f548d5dab8ae15520fc3018bc026a8258d766c4db456be73faa1e487a6c4754fb20ba13aaf74befd8791690180a032081f8ab91075b8e1569ce84906161e0262a2b12e82bfc92a500b7b46d4661a94698dd4b66895f90aa165fced05ca1759825166b7ecf05e7b6320a4325149df1e1519f480773f46f3d66cd54c73a46e797ae608e684a2fa94f5df47a6fe0cd99b2a528d7f8b261abeb96e0e251b9706b24f4aa9f20eeacef240a88e95ef7b543b89e19a999a8ded281dcaa7e38ec540b523dabd869c576a1fd0e1cbaa326734662fcdedecc855fd6e08fd14bbca2760e540d0f8353a721599d88b5c965d375202f5cf49a309039b976e5ee37961134587102d7a47ae3ce3eb4e3ef684c1a1a659f083b6319f29489ea9ca087674ed23aa7e7677b08657c48bc44f4a40f63ff42d476733a8a060e905936be916c679cd5206a9982d7814b8b80a7af8b7f2a4f0b334e2e347c04dd22b928771973f1173f5592cb05e1f322f1a152c7cb07af8640da0fe0be43b39398b6e0d13052520cab054930841b08eb600d401d623074f0af4d6718ba3848a7f8df3ee6a3611e7c8a0497f7de07462f0615ccdec66fbde29e3b5fa96ba31f077165adf3a97ce979e912838f5191f979d6a5526c01445e22601a26b30c4e16b5e3283374c292856d27f46454e2b80a924b12252c699e2f70a216fb9f1650481dd2c7b1b04ff3e9f05ad02ec7c46025794502210c730c3129425dc646a221353de04bc4ee28901f5e60ab7151ed30797e59696412486cd6fe6637277176ea65c47f16c46db7fe6283683811a34e3a0b1dcafa91e99286aa0a1ebc2c423cbbc8108e62e03c28ec95e442de0275de932ddee8134ddc6bca195544d2ece401737c6e357e677f2c6daa82267a13c90d29fd43338e4c5481d0a9153aa6064e99976392131e6a2bbd186d15da1b935897e3118a2a139fa660fe1ed7b42716d4f6c3aec2e49a5ea9fe1d13a42a9cfa9afa24cc2dbb9907dace8914280f501d7819044d6085e8823042943ac97519dd1ceb7637828daaaee34309520f5922c72d2e822d01c199be9699cf70365e9aeb556f8dc9c7544e957d7a6866e6cf497b9e64b2bf0d5a77885b5a1c6eb24d8ea0cfc94f8cc12254d82645bd44fe095071ef83976c7035f4496c06c463141afaec39df1cc848495b0c18b75471a072a46b375a49bf9251cd6bc3c3843943f68427bdd33057f794a7b835d7971db5b1499d2a51a577b08b6704223fda4b82752ad7f4fedc4d81921ef17ac64b50ea1078a42ebe24427a911376815b84bd0e1fcd960f3f98a0e64e5e597b005b1bd6bcc92b46e52e1f55940f12bcba317d2fbeb2109e10e85a539c71109c5fa4d75aeb469c909a209bd1362fb5ce8c38eb9c854afc2791ac6e35466044b1241cdab8b7567bd1bc962a9c055aff33828f4f7484e109132d41cd49a59ccc1108871a2db6855714094e679cb73c56aff6f709110e0e98f7f2731ab8b8a8b6104c4efe1481d926bbd59c39b2579e20a0e9b6cd4d26af93393ccc97060a236d8cd3474de061aefaf8791755cda8046de5a79487a08e308b553ed26718dbf3a87aed1920e7ef8a24b017223a69935ddb783c62e6c9a0b5f95c5a87e88615694589518da2833f18ccfb2ac8e333c7deee42e1c27601579bb91a2c0f5794635b375432cddc3c830b1293a46797f0844a970b4db9cacef04f2d3027acecfc0cf62d18dade32c903f6570e4aeb0b8d858f036b32525fd6b3370dde336559684f3b93e0962113472946e041694fcca04d5275c4abb6c1931b23e705417f839a9c0d3a6db8b7715ff73446ea23daaed913d11886fd74133e6fa88a56753410ef3f0f780aa1d8863a3bcde15935b82df4a90f5bd1cfd2ffaa7bee84732c7137d1ec168b55a8bb00a1522eeab70d7f6c0a2d6c345097d53a26e2093d8da31de1c8e8c68269a93d646db6d6b536c05aeb276fb9bbbfc56243edb3ed3d853593b8d8d423008ee306d637dd55f829b3567c6c36ca3e6dabe2c56876639163ea03d9494002d3870ac8530999703a7a4a09400de5343eb3da240a90f4f532a1cfd2158d4d92033e284ce33387272c3dc9cc0b431f83a44dbc00897555cf31a329ec022ae649d2a4ad79e47b5ac65ea4fe58867359ac00d63707de44e35bc4f8e7c33481ab64047a3e3c694bc8ce97aff20cf101c6bfa2c6809ec3d33dce29788ece5a68e1564dbc109039cbab296581a57944d055a5956d512fc8d60fb536745c55391ff8dce3860b6f0b0f58d3b16ce6d53a8cbfa1e3e53327abe355d4a602bc3929f18ae1503106e0937e0fbdaeeeae1d65c023e552953bf46088c54b6690cc9ee7d12eb22f2540ffdb018d7b47776aefe9fdcdcdfd55b1c4dfae7762999784b69d75585b8cac2468e9341e9b1d7b0883b95de483d2af4898676adadd788a6cfe7b8268cf0316db551b28d7174fbeb2df8de4d91cdb4a0948b9554b1e92f225b7a06cb899fbc30f92d66b44b7ec8bd7c3b31bf37ad096c7aa726e1f598a04cc13db04adc153caca042591eecd067454ff7cc3c74092d83450be09a3de07913602815977d46e0553591d3cd9092999d7118114da2f4882656613c99b048525929580b08795990d3d01061590f8dc29c2fdc48a96757a61dd3b793e276bf524161363b6b717a58e9e4c1904107ca73d31051bbe28e4fbcf89663a7b63db638d5e8b945956d46816ccc9679b2cbd228ae5948d40856a0685b3aa7430b04d33131eea6336cd0f092e39b6457fdbe76fcdd0e0feb50cad5ea8d41e5aaea4f72df87f1c92410d9fbc13ddff8e71eecc756c9248bcccdfc1c3e6971ab7eab31a782f3bf17db4a9650865de61dcd74e85611ca6d7fcc2c1c23d6fb6ee7fa04f800f6e48d15070b1567d3404df10c2040996489055cd1a5cc0df517458ae71b6cfeef8fabbae6f44f1c2ba48b796d31ae2eaf15cb2edf34691887062864786db213bc110da5f82b2f2a9a2bb31320461ac21525aeada9b6337a8a8a3911155373df94cb8f942857eb471d358b8dff34d9c188a0744245a2d275118102c7c6e4dad370c0b0b83f167de09c0d1e38ccee5acb367f52646459d85718a2c80ec36583290cc7a9799b27f90c0d634ab84422b61e725227d70f64ed01334ceea9e8ff2d49a50190f77e47df84a645db80575bdb5243393178ff28e824dc1e3feabd7a2e384104d62bf832855cca4476a151905584d0326887b48ea403f07c40cc44079b3c994954c3b152287653634605e03ea791aa7e818f1eeec49827abefaa9fad025767404fb26227bba4b19f69c95c311fea170d2b4ba3bbafa65f98f5d1f23d6221aff3b406da2e55031a3c59fa75aa2daf73b005a2e5357151aac1f95412406cbe90bf8e2f88f64d7054139f65eb76ec1974556d127c9d9ec1758bd9c5e13dcb7bd44ce564c5431b2cc894524184f860f257d69f1e93ddc0c40698ff385240c973dcf15ae3b27a2fd876b54a4789690b633a87fad9539682f696a3f75c9d3ce3e99efdbd8f879302a13acc6816cddbc6a9665973b38b52bddc9ff0d15c605be245b07925ac499275106d46c38598a85d122ccd8365572f6682efda1872ee6b1231bdb2fcd5474c3508d6d158cc733cae1c4ce9f3de4d9e0775ad742de2ebb8cd12cc74cab976326a1f62b237af621bcfc04d638967fb63c189a63a6432fb2a86155d49d3a5ac479498adee1913711eec8b1814b985efe17dd7f0d146c2fb233bd4ed724bc55f5efd4bf4b23248ff9027e2d3f4c33aa11aeab8835a3813eaf3711491f9ce4411c33caf3699f85212559c1aac469206440eb3b3d0562c311cd6f018abb2f0edc03050cc3e8628c1e161abb22f2bcf10757d001dd03279411af44a3ebea96fcad71319758166458af597a224c1a3e2350b63bb570dd2bec8c413885d8e3dc95775f9e66142f7442ca7a4dc95c217325cad61faecb37098c9b89640bd3c9d13e81d0e4a684e2abb0120d930c9a673491a097e34481745dc1561b203b1c1162e93a1bd372c2ee2786e42e83f50149cd4eec12c605f772c9b2c7735fac722287dc0b71f948bb655db28b1cf4f6b58e5536b8b5c1f0d8e0e266cd21111f8a0c0d9f334b6914c13b27e065de19b88d7c592c766b6d21871a4cbf2e262be9c2944bef24407b6624e1112bce3e1f96e46a5dd2cf11d48575f942c6d7fe1b9fbd02125e21c407cf6b1b695ee50ddde20dd99227aaf51d37b8e56906b56f1656b3de60c8b1a0edd57a94a51f90df58391cb46d45f86378056dfd954df73eb798f5f6a4ef11c37787c726da9a49daa6dec933aa75a0179de0bab5f259d3e54a2ca4ffbcb95e3bb50387168457de4f236b97fa93539f465b56cba9238e53648cc51fc2361c2e8577200fd53f68ec9850e00c5122e26714ff43e3c564cad9e2abb389721a9522a2443e4bc59900915910a9c6179acef2c229abf69d7adb6daeaafbd0b7c299e4a8c3c124530feda8cb78762bb4e216ef815906ad7a364215395b78ca8392cb059586ef191c29dfe1ae8a01e0946a49dfac8d6317e6b47a2c16f0c9a25bf3cf4f4704a47e9d0e4f694f229439027897f5f2e0e43fe1654ad44f0c462a539ac627e42008a9425a26899fc982258a91b2da13b64240a922a58ad820a4498554ec3da20261196c38612fe4d4bc6a518aea5fb6fd3d3534878a94b1919636f51a8ca903aa7e8681354d2d7d5841664f14935e5849859212bbad9d883b50d6734ed3f004e480bcca5ab7c4959e6562b7d340188f6c7ceb8b3bad596d8667f86c5868a0bc8a88f58f2f990b6266ab555d0860a8b73caedef9cc71bbcd53c99e677cdaeebb1e2634b73e07fb43fe1265b1739dc6e1b36f341e5df2bf03eb4e9b75932a558bdbe35f4c0a8b9ef989cb697c0e88c6d66a1402210a3cd63a1802a08fd007fc1e4f16f73d2f4fe8b4ace7ebf6402d9a24f50b5443238c2360cd59baf9abb2d046a859deb54bd883c9c8db9680dd7524e79b0bad1ade5001e1cc9435a14285108199c05047935b3582973333e98d5ef71982ec4819a0981b24359d82048a593cce761ad64869ff420b4fd4c658cce944c4776f8eb96be5e973d4a00455fb0de93a10bfca339b982356fa415ab9f17cbfb58aa866359ff763e6e9f7bcea6d99ecfa3ccf81aa0c766d75569fde1c4a6fdd16c43c026cf543dc31ae19850e4013e86c22a445026ec14c50d41d0d7d67f94b3f67d4abfbddecc019f6ee97e7d018bfb4a0a8def6f980b16e711261bc8a4392cbbec30e7f47e8f5a27dfa0c1177c33caedc9b953b7b040f9704817b49b2c24077e759cb73ab9aa7f88ea7302d3a40d8b7e55ea55a4d46c6d152291446289f866eeb6669bf8c13a8cf91f9c03d4fbc1b9dc8407876d940209b860c809bb1128a4dc6033aa8ce3f30c7d9d43a18961e24291d098aa3ca5b85ea594dc885bf915f5bb212fdd650300ce038766347947f1cc69d44caa12962bb28b3f95b30f21c99fd64cf9064e0497752915a84b481a8a089cd47ecc312183e4869c1a441c6c21675ad66c21eefc0d8890456f6b3a6e6299ae792b56f034100cd532822a4ea9a92c263af5260f94b63394663d92b7a7472cdc80a7056b2ed27e173b10eaa9fb8a302278773800a549485b5c6da6394275db5b984fc475b3f0594f8edd1c71341820837493c51c231a9a1b7b39718ae6196ee79e3ca55bcdaf59c837d3e420b0032407035484046dfbc251e1711410627060e8c16b25ca529240fbe2dc8a9fca2654ec9b012faf315d98a876780f9300694bef6cfe484aa626e117abfebdb59f9fe3befc0b3175e1116cd4a73402f11314045af5ed61f102e681204c5372d47295f4c4841725a090593bb27990032b1744d4db0306b777b51ba30a2f811042b815ffc35497f601ad2c3b5b8753b805eb4d47c8430d56b9436f348aa61fa10fa934c99e6af083357012d6636d858bcb1d0676ac1e7b8e89a085a88d521640b8150350f34f1bc53388bb4256beda77f718b8432f0044ca8b0420d2f47b8f32d94ff0c2019ba96015f97f30764fcd3f0ef04154365d1e6dbb21261cc71ff78c347c62f13b92b5d46a14c8df63bf8adfe93516e3274d73887a0befda964e4225f9dbd1a927c3f7ae22a882a4c0a60ca25e2842edd528ef4a1c3a25f43ad0faeb11c9e30470c23f030746cb4bce175defcb8f0e480c96f475e02af8aeffa6ac2df9548a30e55f8b488fb586dddb7040a63149b6f6dcc51a8da83338ca191856e707cdc810127a67a2c0127510509c2ba4b0759738bb224223c54ebc04db9372126155303f2fad620d2d7a0f3af9492ab58c393c028a757150089183c5c9cb8068dab86b700bd8faf01192f281cf3ddcbcc7f0bcc8a8709dbe538f9f15c9b7683d262e8987573aec0b33e26b4b5ce7d10ebb0f65a1b21af805508d018c875be4b2dfe97619743920b2f27256c180bc2d848d1fbf0ce434e5dfd38e56de281e56111e74b8b863daf7c4ba44e5ce3c0051d34cc61cb00722e89c472e9aa2710c1606e6dd34a23667fc2e20f2a026c367e329d4fdf0f3b53bd9941eeb0f04d9fdc7b2ae1e37a161c0eb07d1081ce4a6e9c8e12a2395a14176fd62d37aa671e05e74abf86d339d59fde4a1ed3e38ebb1a471d6142962f2351d771e85dc8438af1072382ec06ae39313d356446f2a91f2f82c52df4aab805c1ece0520724c9a08d8d4d31863d98aa233a6abc53c863110fc967f233daa8d793828422aebc2318dfb623db287a7aac05a5adc21f934077ef69bc58f64e2ad8190522b282220c8e23cbe8e32bacb268b12bcafb2dce4d6e945a400867046c9c3c5ad29395288bbfa7beafbfdb3785877ba056113727806c8c41b54adced024ccc45a5fc535d39deac049ea332866d0f22e9ca011bf454f5405db78682d09145bf2db15fe473494a451dfd06b7a2e07e21d5159442a7e300631c8051a731a373ca984c1ea7680463ea18487d68f8dc2b81659eddf9362ac3203d0852d31c45459abb88584a279c6728b842e7fc4dfa6bcee4c6861a92759b6f869f092ea4e2b1042302a509b0d48820ffef1c8e068379e3d8184b1b04ee407bc10fe2af4b5a21706174d80f9ab6d2512cf836c50689fb1037badb4966f62be8cd05046e1e6ed8e39e3704ad39ac1afaf52a37888c4256725dffd31c99d035adfed75ac0ffd2638be471c8ac91a884b64d00cad35f595669f8b757049ef80c7f1719c512cc940922aa10804eac33023a781bbc6c4d7b44fde4ff05dfabc0e5dbdd8f41414ddd0c1645bd36497beb7d6a9328be2d7cc4ae2a527c2fa43cd6b5b687ffe9c1ba46816c2dbb6c7d8553ea086d97803dd5d63cdee4bc706e699b8b7a30b1718bed7e1b1c27469f996058c7a45f6e1575e9a9773b81ba0192e4a2fb3d96b992f7796856679a4e58bc85e371862abed4045894aac869b8abdcd731518af0342757f8d9b19c09b3e5d7262d2a1a25affdac99540771c3681aee7b7b5875b5d426ada3857293a07eba429d68886b1cf0a35b748b44f9e931742d4a855907b1c20f4758e014e6e4e5da391b78955c1c0935b3db41f45ab0a586fabceeb0bce9bbda725909dbf96a27410d93fa9147b682589f24258597dead650599a2ac2145d7e18dea5d6d46d944692fc2e9a148074d3efb3553a02240ae0b09a34b13e26b1d92a6f0e17431d60266f3f626741c80deca0076bf14909d0b63e4ad025ba18c987ccde493efd24b09e1860b5ace34e16a2583a710e1ffe4803b138c5a649d988c4f52895a28750f3e099119c674053a648940974a3fd615ced2ab27f35795e584deda150f642053b86157d436ab3b8376b45baceaee94706c0f04bc1cc7399e6ee7531cc864224375878dc86b25a1f2d996b533b6fedc703b867ea3f1180e53ffa5f301ebbd84631c4badbbcf240aa53f22210509e60bbdf5bf85d0b5d87d8f8fa65233cdae68ff93b1966814143478f384fd5f7f78c092b1ebde8e0b58431be67a5d43a0e82fa22c116f485b3584b12a02437c2d5d6cb4d5125e492665a944e9b64d00984aadf292d566a700c9c0cbf19754b1344d89386964b344a994d81feda592e3ad4c574b0daf9c906d287ac015996d523f3ccfa053edf3361822b5321794a89353ae98215733158460d77a982904680f4e577167461ca1d0ceac90a9f2643ff9d748645da43f035d5b267901a49d79d81e1beb9ec0fcc05913f846417a618ed7cdd227951653246f6619b4022880ead95c7ed32f1078963a6d930d3b43278988b61fa78f396d67ced519769945f6f5c42793db6bdeb68de0eb36e9430d98a0e53ac7e284d1a6298768a676b18d7d8fa42937cf674259f0a9f6888ebd95f5dfc32ffb22e491098b994ab511e75817ec348f64d1c5cd163a4a9e7b96da4dcb54f67ae3bfd090a234529eeeb0739d7ae200bea2040a554c4fec3838d4931e29eaa36529a377d724eba325e0e2987923845c9b57442f4083997036ad4f099dd9a30417e671904b8b155204794030447e325776f5d5af9d21c2f6a0f0f1857da2382581a05ce217d26abc505829c311416c46e46ac6b7a66b0bfbe8a8e99f8dbc9a442e51fb796ab1efc3913c280e8f8a5481decd3c117a2debb84c10265088214aaa87d48238380f03ee8799e8d5ddeb23aa5ead64806541ba31aecd3075a4ce75a11a615069612dca921cfa2885ef372d8428914833f6aac51f115da95199086f50e3922acc601720e38f5cddfdc60d9447a1c135811d280accfcb8de9dd1aa6cf5e6c05d0613664d9ce238e6b0d0840ba1678b9d7216fb613dc49810f8ac9c647a42a43bebe46c56a6c2ba439532d459417e7b04eb7fc2493a24f13103afe39927c553c8e37117e0ad9abda0f216ed9d5649516ec002bf2d6565eb8f9a0aa9ffd6d161cb7b10b0591552050ca7321d95e0b00cab4da702044ee9cdb3d083d60eda1cd21edc568bc65145c89e71ed6722394140760286c639f1a3f2a573e32c429042b7c47523930b3237f3b9975f0b1a43da94b723c782cdcb7702722ee03cca58551f0543adb28e3755563639c3c43cd0cf83a39e45b5469bef0a13bd39051e3681feff09fabf9f55f986685e83e2b0ff9c8a9d47fb13170da29fcaaa420abf94bd21c2de6d191654236f172953bdcf4253dee3e46c0494b06072829cf7c29ea0df881857a9846ef3ac42a551870e0650131a45f9be959304160a2c0e313c036fa41e8871558865b29ebab6029c153aa6682712cf9f02b6d21e825d1b5a53630d889f906422cde9875336bca4fc6f0e10f0713c97b178dc03ed50fefb2555a4060e94deda8ff262252b0b138d7b9ca46b7d2c91ebf86d50ad8a2143464a7a9c608c3d7d43c0aa65a472d114ccd02655e1e2347e783b8adb8bdde862c6b5460666ed168316f70c22cc18c8a18b156dfd7463410c4e773162191b76b573dcb6fc307d023cf7b82143af76b8455257889e326e4fed50f6f524c81229a02474bfa83f786fc3a74b5b04f5b965c06fa016b8661a394d4f4052e2aa9ad80fa69273a653d27513f5e395ac36a1a90a06aaa00f680ef40b47747a277254e06bfef07914497e07cf3ead005a52d107aad592b2a30beb14c457412ca03076bdbe332024b9f02123b2324ba030c47af19528d6a9b17035a1cf586157889ddfa27bc6eae194cfd84a188208036ac13d02f8e3f36daa2f0b6e0075a1d5e1cd694a7db37bf2e285283b9569a164d94b1b513a442eb5ba530a7fa11f9eb3553c99981b75f1018465010a09d13b5a400a21d60654698c0e02254511095bb742ce4a46881e453687d225ef6503a24698402928dd97807b073afa09f4ccc23b867acf01b525dd05ee951be539424b36d4565476647e7e0d4c98fa294497c95771242511c9953ba594026403a703bd0303f0aec6d25e436d0df9e74f21c502cffd967389aeff2deb0c95e9e77dbe131f67116ea4bca182e75e63711615cfbd26e32c44cf31b8a047cc5aee1ef2def52deeaee91fb4a03dfd3242ff1eba082058cfd49aad6102cf3d3a81f0e59fded45acdd45263699199eb73fd2233c1d0358722f47f0e7b1ab420e46001107a40e107fd5221020a427d427f6da2f613847acd77f2531112852b5c457b0c84170833308014a105423dd45e0001a80085e96baccf4f3ef77b686b306fca6410f9bc6badb5263709b5e729f028dedd5a2cfe85ad21f5dcefb6bcc1d7fdf61b6d6be89eef1c9ffb0ebb7b2d74cfdefd4a4375f5105084feb59c76fb09359c7e0181fa41cbe40cdaf784fa47d7e92415085184ba4697de347bdfbbefbdf7debbf761ded73aef6b0db792a95b87f037574158d81350b4b57dc81be02eb055b4ef800df4e42c3226bae973e4f83953a00367e9c055b4ff4d285b3864e044ff54480a55ae829e08895c45fb2e34d396a5136f0a87bf9243067206edb7f621e020d0bdcfd0b5af2f1f0879c3879cc125b65c207bcf592ef8ecd19ff0f45d353d7437a341a07bb7c33f39b1e0f30efa934205093c0082c1a18bf24f0b4337e59f01105620cc5c458208f226a6e4c9304d871e6ce205a10f5220cc5c257394adb257b1be89db77ed4ded3b60619b37509ed73259ce39bb2bdf834d24c932e79c73ce390fc92cf749be7989731fbbb9de50d1722d535d7dd4c7ada197f75d52ff1e508640fab6f0839c240220e02ac1f3f2cbf36bdf087d1f779907922449923c4f21f7686fc1b059287832e85388a6b9554e0cfff43f2119dcc4d3a3c2944d3c4f8f92284afa3cea899b78fa867e13cf9ecf61d987a7900f53be6384d2e7eba1272a745b3eea3fa028ea37b1d71bbabe114a19ff5195ab6c5fefad63aacfaf9cf8bd89a83f87e78930dd44d4ff50d4a33e3d3d079ef2d36417ea63b4b22c490f64b7efe1cc6e42b72c7d4eb2d6507dfe6cfb2ef951dff37ae896fef4e63e87e91ae72949b21b40ddfe02393c8741be1a7ba0baa8a613b827f5af839fbd4a41f9eba083ed3d94431504d77b84e94d10fb347d2f4bd397a6ef807c7959bf54f2bbe99640aa0fb04ba1feeb97babf9ba67acd3f6fc81b4eeff64e3283e939bf42336050b3cf265a0035939a83fc4b9f537e10d8bf2c85fb9bead6e049e066c91a941fd04dbed63e48fa10864b6739761ffd39ce81fb2e3104dad3db73903f1165b3640af4fce94f101a649f92d25152525050be5683a6ff20fde92fbd1a4ca2ee106c10e5e63b68e639f20c61fd1d1fdbb6d71e84d621a079a33925850211d4b8c64dfb7db3b6b7cf295b5ba1fa6712cd5b1bc916afbd6b95a43459895c4dd508351eabac340406726f594d5d763e582e2272a4b4751fa4c094b68e0027efef0583ab281481b7b26000bc719de9c28b8492d3925668c0da18053720e369124b39e06186b7468e75b40e1d22bfc8734b7834ad80957410397815beaf268148d6012b8193089961d254e56b9aa67992a6699ae6533613c08b02d66836c660682648716242b474d4cd48b5e8b12256b3e185a522b569f2af9757e6d102c6a06dca3238016f06ef0bbfc1c1972c06fc06df20be1948db7b059fc1c17aa788ce7b595e5d938d3009ca6bd94dc32b046b11697001de24305a0a78b30dfdd5d32f7217acd9de9e991a181a132fbab49868004789d0510c369545b394d63c693cad020ece38f2101fb0161cd7f29e80654cc014bc46f4500e9b82b58c0ab9ee8257b3106206f9a6f924c17b046e5f1a40ba4d2cabc53130d90dd844f24d9389460d6e92997485b9b1c1ec0b84c74c0fd1527946005ebdb503fe01eb1c9717073c8020f084177db3dd0c38059cf37a9853d4161cd5dd99d4d70c90a21391a7301a9d6fa6c626f53dc2e66b04a5ed32dd0f3403bcda45e6c25ac399d33f62194ccea4faa60955c1db84ec01e71ca68e9ed294652946219df13cc69d8f23f0beb17453ac834b58c1c00830205f181a892ec107ce3d90c0333003b860df04af05ef0254887a208e665541648ee28c762e7829faf1d62404c3586395caa4af699ab1b1eb9b5a8969c41258c7789201cfe47d936943caabe4cc6455765f3248a01be104028c1f1c466e633e479a9f6fa6314cdac9c2ab8ff21d91175df455b60301674c0778730d4d97c760de22c1000b3b1e24657734d63ec8600a418303049515d3c4a0294c7bc49b9d973b2686f1714541059ae59047f5f8ba2623e293b10c4c92eb1a50a6f87f3fc73175df55bd5c4c1b8f9652931d369831a2d7e27842f1f4229ca09c1c234d0cf3624ccb9349833bae692b67f9735ca4faee0a8a1417b1d2b83814bf2cc545a89e1657b51e17e3a2daaff0735cfc6a59719c69adb5d65a77adb5d65a6badfbf04c790c1445c9b22cb52e75699a5a9bda2c4b7284fe3d6cbf85a730dd423790334972ce39e79c73d2d47524d4bc893ebf498ffaddeb0df50bd71f6484d91794fbda73bf8764164f5310368eea6aa8cf7d053e6cd5d2cd8ab70453773726b7ba0551db2166a365136b816cad732b581253ac15d35a046e8b245a26a51c164649862d82d7eaccb52284acadb14c37d89cb11c5d2b8b2e2a264e6d8e113be387bd4ada698392685a1b4bb8ea58a73716c887190e1364ed08af76ad841b5621a0d8b923b5a0d60689e707a9668d6bc2964012135997b4b12bd45a1d356080ad46b4da17572da26e92848658213d2c8aa3106547451292c888130284880eaeb8150a3b82c1265171e2b8a4f5168de8c2814bc490e1b176742cce5bcbc376422d8659bb15c6c25b3ab2da362af6ee893d7154426815d2436374d39e19c5b459782b10ba15eead4d626b7ba8ad6d666061ecd216912c2554acd2d34ae4684aa845ea8129ba614d14c5c0e159d1d5786b6bd8da1d6a5b66ac8f3096c6560b96b526a1626d9ed8baa39684d04e0f2b03df34c131ad11cf896ec85beb836d0da2c64a99a185456db537597454314fadd1910821d6ade7c57bb3dabd31ec0c1e0ebaafb7968aad5da1c67e99b14761ed8fad3648162b47c5d23c291dad7442ed909e36a21b128862d821783d746d9137168b8d75a1d6ce99b546c25eb6d812d4338b35aa27552b03d5c648629bbc297c5a1c599e211b9f2198ef66b217efb75e42755b45fb5308ee734f72ceb95fcb10856a6d32656d096ea25ed93c88ea6f200df6de7befbd77cb422da35a2895fc390e72fa466aefe738c8e8b36f90cf4f2135002ffc1c03e501cd7d37c8e9d03393e72e39a9b5d64057035d3ddc2c5a830ef566ecedc839c78e7debc66c4153024de1904049381c08080728e767c93118f444baefae90a5453874d8c40d36f187ce8f4387ded36e52b21068d0cba6f7ded9a2fafb39fe59b11e517d3fc73f27be1b6455fc3c9d424733e84ff3e778d37befbd37f9bdf7de7befbdaf6c3e77a78fdcef6d383c663a043d9104dc77577e5e2f3e68c6d8470ca72505a2f8ac605223e2770b7eef765267ad0b16ed870f1211b3f7ce06f9c06b931f1629f6e171818979b4beefe7d8c7f84f7e8e49dc91310f930b53cebff464c24ff386adf59317070764960cc28abc54925281aad1a6671401e4c6a21a0452a4428a73442569c24e1ab34f922d474ef5e7f898f44fae2351cdf167e6c8633cbe7c7745860c08b49059363879c92500cea2780e2d6dd5dd6797a8fde77867ee0351309cc19fe39db4ef06bf0bf4912f90e47ac7c14bddc9c2513110f34ed3778951db7479213949f2221bdf4e4e4f6fa78873fad64d357f8e75f0be9bb5823a43787470f0e894d5e888cde8c4a0d17161d4c992f13fc73a423a36df5db9f9e2e40c8b2f97a21a2485188811fc1c077a89482f71008f874d13ba9d266e45c0c094f47821b232922d3c399602484f959a748a9e334d62324f7285d592699ae6499a2609df348bd44dc54d92e4fe34eea1921795584065e9b95ad672519471c2520b2222a2c91312115d1a99119822356d175255563c463c9c4ee850d99da1d1c518218365044c8f9a544cddc854f590bac9f17089972e256f0da92b3294cfe047bf4ca174a625e49a84de56dc186303f2a064044a46d09b8e9606658ae22fb1941871346d44c58b381b5c36e6def062e24a94f5a8c0da29c9a1b2c4b23113e0f9165392ae33b01c533e8e60726cc3c248b5a4882cee2ae6c7c7a0b669c5a4a8a99b26d6dc37cd1445df4ce12934a7f4de7bef0d90537b07aa4192244d4faa64b6cb215602450c1edd8fb21b24688c4c436024c558c5f4fdbdf706cca95925cb5c52689d39831561cb266aaa384ed442929ca72b44929a97da90b589095dd51109230baa364e6456157d097e8eab767c134dcb88ba5aeb93ab70eeb7560c9abd90a855c27cc02c37558c620da8e45ead1af1b927a9e03ee79c7397ab949892a9f2aa68522d262699c9a74ea028fba1d8b1b9ca0d86f9ab840a3ebc21722f3e323b710b24437c2cd911f9805191573d1d5a4a85523ec65514460a287ef81813922ca7dc7e3965e497cfce3eb5638a2c889650067f2a040cba4421c9605d8981295969e0aa53348458e2194642b4c8845cf09fe329311e4f897117132d1ec86369d0928b1a417668b852a09bb4bcb999a9253596b82c45319948a1648294cd49549b2faa489afeb8244595f528b474cc2529caeb4ff8398ec22ae282e4e3529c11d6c346c887169c873bb6172432e2aa9d36d26d424ae2f4993fc7264ea84b28706b20d3a0d65a6bad49cf94872e44aaabaa1b78ba28fc03b7061e2cf3e624d9f7f9e3a0e4c2fee38093bd729ba8eff780efa6727f6ee226f6dca350819b13393611f4f90f023a13b5d79998bdefc73d8a729fa5d6c83c984066d980f3a18be16735320f2cc07e3d6cc9643c68810ba0003308fe1c9b80f9fce718aac97783df0612600f9196acadfd51cbabb1220123d26a435c5145ed24b16c433e3deb0fa8104d50c5b8246c521c7b04480ba463958b9584b54b30c254b0404e942db561efd80876ea0987c7534cfba264c8085be4c63ef1a071b6becd6863aeb4ac3314384d308ab07c581c4e3aed90d34c7b95c7e6a063c586b4377ab44f686c1a8d1e31da142d5854ed78626b9460df80e49a8eed4c93b145c164cd3b620657c3c67aa51dcbda982f242ed8a8143a26a490d82042ed9b887606930d8bc7f40265d7121561b37eb02372c499b525c86855bc80c362e9a46428b53c88582324048dbda8144bdbd34986666c0080022318000018088301499223318ee492ec0e1400074fd46080603c483c1444e26030100883612806a01880011000a118868118042321b2e801f0fa88d9c4266ef25b3125ceb6f377b9624ae864b5607252a5fba5bac39c02852af3722b8b2ae1aa1209d184514d6f540391c6a953e4cca42f79ef94cba5aa34f97d827eba08e1019936051d5809416dfe80b90099a29ae5ff55772bc1632108f6043fa6da858003c0d1c9e84ed90f2f3c7d9ce1b4772bea188f4556742a1e122c8932f8ba25502497de4beaecc1e190d2de1c10fc715f08f76623052e0331a17611df5c69d7f2a8bc12f843144ca773017c472710ae1fab222dfa47b1a6e58775ecb7a27f6778d4158ef78231820058d5af95acd97c6492ded38b2e7bdc8d3906c9f4ea16fa1cc25bb6473756fe8f40a90dcc11e7a4b6d0dcefaddb02c70c1889083408aca6bb366de698709e82f4374ba21996db058f39a7a74faa4e60b88d6ec8e9d3c683f47afc777ef8a31691ccf5219242b4c08f0c31b8e204f489253d203eda0aba4147912fbae21e83868022e7d244e37d5d5f22606bdafe154750591aeb8fe90dc6e9f5f8712155e822887061163093a42ed359452d3a2cb14f21607b6c64e7b85c5b082bccdc10357c68678999f201b880f4c2219b16b0332de8885905c458f726529155fb06bc1e13b4172d3b2e79b3ea6f8bd2e12e7029ebc154efa1a7e3474abdbd7afd59481b854b0b873c18a47fb39a24dceca73a05f8cd34abea649f1cd167825503e935bf13cceab597d1124f1c020415c4a50b4c1282b03a698280cd866ff1ee6cf782cdb8dc434c1d606d2e53c5b7c0d6e1b4cc11a1a5c4ae3c91ace35009a57b9f3514a87fcf95eff129dd55d1eeaf5820c9d936714cca80e35c3ef868be166be6f4c3927d975bee1259787a7c39fb450e55b75fcb0676377d3450e901eef571de19e2467376227a9208788231b7d4c8a2581a453ee48aa56d5c2f577569e0ac2057a57db3c214791cfb687fce4dabde9008db3dc55ac73a86115a04d56cdcf684517112395e315fa2a1278606fd710904c11b8e53154895eea440bc3c3c579c7ac0a921e191a9e520cb31ebc4c2a39be88b3b7078d165f70dc7ef4bef11133723882e53380fafdcb8bd4b34b1503cf72d560a14c022b56c7290d470eac17b1034b65816a571d43eaf77f59404d4a9bce7b1f03f000caed32988fa97b35ccc1505cd90a5c242471b825e79dea381066259e004fc996a6a6e3e2e2d5e985699a6a9ccae457cc41cd3f7089528fed33dacbe5829f6623e1e1ffd2041d3c6691107f119e9231f8bec9eda74d0de4d6d0b4c2e39530b1d72340f2cd6b642960ece433be3c53cf129ed450fabe4d245869c6839a7b71273a425b83cad0e9be2461b280eba84e2541bd0d1fab702e96497394b4496228db914d11ce792c51d4e8fa1642fe0bf392ad4b3e6bbd50fc907690462fe3661f95a6803c90a74926534ce7afe661612485435918ec4763e367247f23188f0e3a6b3da7a4fb6e4f90e8397fecad14bd124d49f91d0a41946dbed32d9665dbe8afaf3b354b1df41c59027a8fa08a9930256c0db0e29a28fc3b438e625e002c748482f7f19d4350b8d653cf8e6db3e184465cec367f325461917d01253556a802739c7502ffc52a7c8c756c114d57542cc5f91fe4709cc5e365d0b80c1debb4709ae3e5e21366143ee0cc7130a02a0b42cc4947cd86afe59ac96d3e48b07518cd1aa21262636d41703399c906a0d3179418340e676e25724aa92b0f1095105d80221663ee77a2cb41404c98251b987e76fb2888442a804ae05df0d46ca3e997af14869fc1ccab1cceed6d9b45835ee4f84d1732e8e704320023e4871e19af3f6385dbc787b2b755d79b78a285bc24e3edbf4bfd0c14b41bdd677447bdef9b4bcf04e60ff808b13de5e509965450e83c91f8cbe636a0ea5a32e4b7597d480ac627bba3b1dc0e4895c52aa3c124564568ac7f8c7838cdb9ad823f7fff6e5a2124613a3b1e42a21c8387528a1a33566e97456f59f49c925fc683b5bf74d1afc7c1f49765b64ee2a91975ae7a8218ca81d1ca1e31a5795b4320c8c014dcfdfb6fb62101553bd9c50fd4dc696e4e494cc00d07404dd474b1d72d15131cd04ba29480a8db3e17e77da1aec072e12ab63c515e18b2030e9828d397a35854fcc592c4a80dcf98375fa548a0c83c295d5da1b5239ac60b5731be5e17de846b8f04736c25c47399b0f9b74aa46184da7de35eab7d966544bcacb6ea78fe2ba191531c13690e4b8a1062b12531d470d1bb83ba7092a05dcb591cf01858d3f6e11bbd5e02b95531311a8ce06c685cd651bdafc0726689813206bf112ae379c815d0a82a624177411d706916e98acaf7c71cd4d26c8cc06da488a751055b4608f541d39b66044cb22977a4c53640843d03c445d1d5dd740718329d3c63060b64b9c230ad0f378c3867788197734aa4ca072e6d24936c7fa5c2924a91179b7caf5d1a6446946e572088ae6155589e67b698f39514be85844e1d914e9540c518e175c9b076678430fc828ff0c19e212b8609f11b10ea35100f7b98603d0b5f6e957f8a784b78a5c501a861ddbf72d4d1ced170338da5c8c9d942ab4d05d0e07447fd533d2d5b599fbd4071f2d98e1182d4ed72b4a4de642e6d253d61145dcc3b7b0c1aca01fc97ae4032d6913d40afd5db9e69aed66e4039e1ea6a14d08c226a62fe41a989e0d58d7b4ac76b284abfed231b287bdae97d690ddc3ef4b64ca75a543a7dad8063e4d1ac3c62581f7815ae3115341ad533a7cb4f26835681cda84302a05f84935e28c50d9d231d686f574eb79b6b46021b1c151eed1d860e6d01703c6d3c3ac3ed6ee14f434eb13e71f6d9cc7b214a004785823cf501e0761abe3861049907205cc39ec00ddfd2a2590f83e3d6963e3146d045c833314d1ec56bc94562b55dc3d8fc1227f152cc12ade6380f8cbeb5ca069f02ae2cc179bba82ecfadb598c9b1f5a089e0ee2b3229f6cafc35d89a2a184d796ed1d41a8232a957574e5eeb588d7cc62ed2aa360ad8680460d3949daf09f5fc1a3e18ec3bd57f02a34ce9d50693ede928c3d4b53b94d95ced1650158489605e162d792daa9642af2b997168c534a413d4d94274694ef2545d1ab995b9364f438686e4f8dc5dc28af82565ffeca8c522b1b03c81f58636083e23921f6c0718fc058bea333fc7e933e422662e989c3dcb4d12b07c135329c1b548ca85dfec146359b503b6cebb9b1a5eee7c4cdf0cd3fb65b04522454fdc6298b1f8e4f43a2eec1ff283abd454e5f4e184f5f180b23107f784c530629f1b229cc08cb2b00efdcc8c372f0614fcf6c1e287ab915e37f836ea23ce0170736f94bc8a2d6ea3e134289901b4dcc0afeace20a512c23d675a3a408e116f665aef220ceee4f950fa2ff9938c10ac390a09a0f18556033c0582704ae35ebf306c712cf6b69ad7c80c202acb889aa9816326e272104f9b0ba4744c230a4ec2ee8d05dfc317b057bff65b8d3e1c8ad1ae3cd4b49a56de3478a9f3e1cf61921228fd28c6eafb46d5e6935fea1f61ec16f32f8e442ead2ce70749baff2fe056c4d33a2b9d7042b34949dd5bc3b274c30c1148e0cfaea5f8e81c02e6e829e8138b3e6022d06bc96a320fea810bc866471597657c3b35da96984ed7a7f18c38c71f20dd8916e6568b7a2de3d63dc899e77191d142466a61d1186cc03cac48f94e9883e768253e303948ed639e23ba1376002609956fed56c1c18d8ff4667d36d406946fc0574b3c181030f37e369ad9e7405dfae499227083cf76e60d40d02d9ea9d7854e3c5e4d4b88f057f285519cedff96cf58c150eaa1ddb6a3d15d447713da77b66ef839ed936ee57db1298935b5df4df6b18f890402e66466bd25dccd64a63e77a994924a9aa3d5d7a1cc88de48dc34c17cbc848af60c6bf49d55bda413a064459548ccc140c141b58c98c29eafa6d7bbf8b9df28aced0e870e2c241c78c5e6410e3299eded3a84e92ae4c76f0a8d1a8feeef24acb1e56be7365f223712bd95dd9a6eca3e99a7a1715a53a8fd9bc22c2a600122643f46a278b02e497a868e283355af3a8a07bf893ebd5265d2e51c9a0a25f954a54bf0ff38962095642b372c4e6994443ae163722566ead12f08ccdc7e4f65244b8c236e3770322f5436dbf2fda073cd2b81d7af6430fcce4d54e2d268de57eac5565624729b256831176cef09ac3b80cde1ad6ab45f3b6c09b69004ae5aca169cc9efd40f744fdb34046a36f5370db0b73c804dfe094a27918cda7b877762317b532a6ce8660b2333800fbdaf61b3bba73d9e1e2bddfadf5033fb56137f81f98fde42e87c965fd5f694d6f15e5da33cea95f9c0436d860bafd5f4495d3fe52b268bcfe455d31cb8b69874b920d2b1fe6aa094d104263915737924a0dd4b00fd659070bd4cf54a8521769d22ece09bea62d9c5fd8075bd7d64b6baf2064ef6ba22079b918399136c537ad7f2b541ae36e88042aeb63eda74b22bc53ecc55dfc424fa23d02c371936f11ec4f1ecf99d6f89d82f36dff29e5e8bcaf7dfca65cf737d99d1c3ffd7f79534868cbae0fb6c024ca4eea87032e422b3e90bdbd899add83f28322902171447b2a75563979de5ba2a3805c0b17dabb5f54de48f14642201e445ba16605b7a73def458561b0b5545f6dddd33d7afdfa0a6d81de10fbe3bcf86fcce92d706dbfe9d07086f80c4e88e2fb137441c51ce2cd6027b343e48261539e397e466ad9708b8ee0250dcf590817dc766d8f006b5980e3602d261be5935bc7cbd97e62376e29b4da3b7c79d0313894cb39034fe518c05b09916e732675d1e987ea7616aa83abfd6cb7aacbab57655b6589a5355d2813b27a681804a59b4d8b2ae1f81bc84a72d25a127cf52f997d4f223acea6b0400d5539ce223e5bece1a591d96346b6eb5e4fe6272af5aee777a243206bd7e463579264f1256ebd276b0fb406935df592b15bca41de8009bea53b88b33122950a980478f1f5461cb27432c675a5b1594f24fb6d8a31551c21dc3808a1c13447086010a091ab425845c7065f45536270ffdf0f013b1e6e5ab9948153097bd59ae8bc0e7468d3542e901e93c5bc71eb62570e742c3281c8bcce54ab3b35d15d6dc93baf1fd499023a79c43f0c8b1c07a2848c9911c88f912fa0ed61bb0b14db601149a04421a12290df3a1fb912c7489cb64042244f1ba59c16481b9795a3ae0e1945d13c855f1d73acd34c8a8c60695b1972ec870c10a4eb231969d3bccbcd51af4923988e8b23221d86286978043d1d65db691b19c0f1e140769ca8e3580e4d2508cc31e2a635a59623d4a1c75180838f038923dab176083bb8d951e44cab97158e453bcc17d10008ce01948e21afb46e4a8dbb423b21fc8e36c714b959c39cb78aff731a79d13b3ae62160e0c280b64b95e3324af4b2b1ae6227d37539683204481c7161b40d2ae803a979cd777d1fe3a500bd3dab325188eb1c6573b4b80a899f0680e03baa1d4e47ca01d0e45a2e1aba60a1c081fcebbb98515d32924f5b0ad8e1c49174a46837f8dd0c49bc73301c6fde15db01b7903dd3064746be348d90b248daae852498a6e3a2b4250d68646480562ea17790e0687d29657fb440c98c834895369a2c3bd6eea8b34468e751ccde6969c95007fa7c1a33a176c03966d721cc24d2604aca62d0b44428c7b70359bbca4f0e1e8ebd7018f2a721bf909c68b964bf1de8b769a89391415aa96c6b8d42770c88e3d82d0d9180e7e8ab31a486032c87de5194a3fa8e8e07453b14ea858cecc688785cb8c63b5933939c59879878e478b6e39013ad3659e178b46369621a014b593cda522ec841c44ddb462942a51de5fa1d6535689b9291304d5ab239ae3810d241b2a0e1900f4733079a721071d2fac8d951f310bc84053643937c7d6be4cc27e91fba0991192dca8b211a9a3464844a33175ec70607a1a38303e9d068471151bad1ff1c4e71bce36d252d8a41e6a5a806ede4629d330fa4fae62e32dfd1463f8d2f861cb28ea6c3b4e3dc8ef4f534c6c888172d52928eab1ab96c72e072c0734497e3b40bad1c89ad8324475bab98e64b032488e12884426351315641d312147690fdd1862323c1e0b2b3f33487488b43531104ec2071d18629905469e7a4c7511bc3fa3832e9af919ce5f638a74d8ac8f5f49f1051d0402f860869989c8c6c696d511d203936388a6a928277cccd513692f645ee396a1ddc8ea423d2a1ca31ec60e280d31a09bda0bab665b8691110380b529eb622f023cacff2a20d9a562223765a5a421cd1eb6a8092b22d16ed1bb1aba5045c93253cbb7a2ffd9c682dd159701933830f388bf4cd31fd7133980f4e73a12758051f982f9a6da2e904bd967e07ec1df650489310ccb0066cb62fa16fa23cdbf985be4542b315b328960ea67714e9d1dad27447b1e034373139081cc0e11841d3ccc29b638783d8d17c67b6602292a675703f4733bb10297f875878631199e978918fc61330390699a145c925c7ce263d42d45624ec1c6ac7908355ccbdf54e5bddb100af9a3469dd94b7452d2addd45636730e64db3abcbac3e114c03a3c5b4d13258a0eab43a31173f49eed4b46129045e36bfa528ee42729a337234e728c409ce32bfcb90bcf399ca00f3b13960e961ed9709c9347d750e6995e3f02a4db1c6597b44cf285a3e93077bc716c1df2b568413a2c38be0eb443c71c6539682b1294a35e384802dd11b698f5655e41a86f96474918846fc062149350cf301a593d1dc5f24ae56b03d31989fdcc0742df68b1d8b5f98e9e426c462962625a1fcfe8932da2f7f144de8357ca65d2c8a30c306069917525325e202362337b159e42cc5d838141323b1a53521b44843582a660a747865a5243251dffb1c67e36b07b549a30b9c1e8a8eaba6afb0683c063b8b7ec4a479a4776c0ad401fb33b5490d702d89c6b8381c3f8422518f0da00a191a15620cc9f6545133b80e48588b3111760587259dcc1f4dd691b3914b3e4f21e49bbb5f94802c789a97e286e2a226bff3d884ef4023639d13e5a0bcda23e98162f11af665cdc0f1f282614a79991ae925d8b7579a4da2de9ca2d8a2b64c34b65ed02333ec1cdc43a4c821e80858c8419940aedc46ee8488b0a4570fd7e987c70e96b0453baba909907e31da86ce6f03829b20ccf1f07e96157c7daa25ed4f82dc00f9c18584c99bad6585a6d37c2565a1ea4f2c0d0820ae41f537dec3547d04d3bee90ac6d1d9d6df03610a044ca4a0fc4981169bd44cd1e72ea576c9ef0c72ae5b2a27a50f37b9468dbf3aba5e08991f59dcf907f86b46930f9e7a904ffe60c15801f3ca77574ba740b7a99834f73bd8c671b7231d7db35fd2d6e09f2b35fd7559ee3c05a593691b4a5d0d4138e03e3874cad46da2b26cce149d5d70ea3f522f6bdf686f70ae0715290bf16872850f6448d12778d8ea21957a8fedff0fecb96df21c771a6f86d6358d4a89236ca83ed368cada272d0d66d94bee420516ccd6327173b65e5de00b1e4f926a0a8854f7b47cb08859662333fa9b51257c4a4a5ddec6bb4c763760c46943f8d9eb6037ad39ff0b933101f90a926a0a6f871fff3f62ef35e62b31f290f9589caa36e9a7ffe2df8f6ccb334cde89a3517fc160942e65668ce57b5e14c744fc699b6878d25c24d69ad0297a6cdce8419162d2c7b90822bacd2b78f6a2a610445ec0f183b7ff054ee3429d43916091a6645529cfad4531810ea9e48eaae559b2de832eeec2520caf276cbcc6c07d9a359112f79c574929d5872928d9db298bbaec8c8a6c017c6ef9409d7ea94a73902e1e56ff167eed2a38fe32aca9c31ea4676d39b44220e59d62a589d3230a2931c37e4ce23c125bb72422f28a2602804755bedede7519aef4c222ccd255c7765a5b5fe8e599d70a565ac55000d5e6eaff9b05dc8b53adf9580291b04a27bb81cce7658148bda2cc7fb33bc194e043157fe07308a5b7ea413d5c3622620c7994e5464357a98db8a1a1a2838858a198c33af95026e1bdbdb3dcc6c9daa24f7ac629b568347956dc3962d40581bcdab175930078ce8242b8f52a6de942cc7fd093728d65c117728dc18e031b979dcde7718367c34107880132b6f350b4f01c247a63a2fd68f64c73959f3ecd65416a1a58e2058ff6ac5e174b5e5046b6171dc41cf0577d4072c5ae0376d99cf99ae8826f271cfb1d8c4c12242090311a0848472756dcd09ba16ed45953726059c2c4ea1325823911f68f9294f9f0b36b16f422ef1be8ea62280bef6cdd2ec8812a3eeb3c04773c56902e253b07e011a308c87cc42a49e4cd6c011d4f95bbeac1e80c282eae4380f08a552525958958d655c5512694b4a596907dd159fb26809809b5e1f1e2a0489abf84203f0981e1a1ea7a6021fae92096914dc487d9c42555c0d4eb180dac842258586bee2251dbf4fdede971e444f581781b10b3585a9e2445f1c16e6cffcdcbf4226db6f50a6ec9c96c1eda2ab5674887336b4e881b7fe249f65c43895e1fe4e2ff823e8091b405db30bc958c0b3aa0e7c561a2c975daa660672294e96b9120470eb85afd288897af039444cd38177c807422868de667ce602fce60374f412d9c8b0ef2f3ab341a96d8c7175c128918185c785b0b70fb51ea462ca3126fa1d1de0c169abad7814d1ea41d0de1a2534e9d0180540215fb1fc3227caebffc977732aefc7654725422d1548ea10e8b7efa09973ffd3fe75494e791441f3648b6a3ae093dcb9a282bb1f7a35dbdccb321c3700f41c500a406814e6f6ecf806d6eac948a85e4b0c33435c279f5731a8d148c168cd482fbfbd16df1b89a899646121b61312843c08dadd0aff701c4c23edf367c9d70352041abc23c00e449910df1cb903381c8342a4c4ed21d60ce1466ecafe686ca2c1f0cfbcf89e7871e1954fbf67e6baaab3826afe835f19ce03546ed4e32be4ab7e819823deb3f3910332057d5963d8e8ff768dc03969cf036ba1801b5dcc017bfb9aa9de70d5fa490ced695e29900ec339673488917ae9223d6617fa48bd92d2f6955f14aae00029311a628cddfda993676735ee22f8ec430d5f2cf39b3596b984fc5c399388dae81fed3d7c384214baf8e6e53178d2c8c86e2060bbc23372cc0033900a446150ef2bab12b606c6ca281393d3312436aeb26189a171a8c0997161b3d57786899d16b9141cbd140218c152e0099faec92fa7eebe9073a8c0df8c18d240ce3375472190f9379800faef5e0224b6fa41c0dd126f8c46639cedaa94903ea03af43a15b31ddc090f221293bea3593abd58d4662ad339a9b3b783bebc4eef3edf0863f541d41b6fe47b5e5a354a86a61773c2d091905dd84397a91e2fd11c9a91045ed31a3ae98bd8eb0639e59974f7fde0b169fc17da925fdd0507eda23ae56ce20a8dc7169387a13c3de87bd13b96ca6f37f7d3ba36efd8e9bdee06532943f7f17f3359b4b539046231b2a492fc6a2b66423b55792b986400e5ab4b83496da4eacd7c8bfff2ec2c164f8df5b871c035273ab61a3617a4a8cee46661c1b339387f1f0a7436b23bf14f00f273bcbe0f81dac72507e90fe94ffb0f66e75bf37f304182b63ebfac405686a0983abb03fd431db371ffbad540d293550202dd0fc4254aa2aaa023f9b708fcae47cc470d9a9b0ebe2b82c9a75050d7513a5b3ec2498f6f25b6e412dba596a369d87a302de615692d34f104d36efc075b8a15ac7f771a39307843a4b1426a1e5b2f45b6d0a00a5014eaa1df925df2382dd839762c6e2c19453f99be3f00621296f2095a1a0445d2402d01be483049ef0d48cc7b2b8d5265830381b7efb8f83a7cd432332b290e77a8011f8428d50c42090531334043de05380282639ce9f41228f8f1106de23be5e0424dda708add13229cfeaac24badc282593114b61f8614e5c73672c9a43bef94694b82770c9393ea09fb41691aca079a9377dff2422a063fad508fe8b1fc1db164fea72cc1d9d4c716e4949b169af68608999494b2851796aa73cc665a21a394516a957548204c7905c507467c9cab076a3aa4e2cca65e2c2bba6647fd859479e7687199815a0bdeb90337cedbeed15b13f76be5cb63eb6625e70674058c29c91e321107b1c0a12ff76ac71fe542d3a30e0a9e36de4e833a5f74f7d287a0e225d9edca2ba4824594575f543cc1260a1ed440af351b19799183db8de351cc1675b49c855ef5abe4ae8b6a76f1d83d231ebcd576e97fce39b04f67ccc3b9a435b336b458dcbe7d88a0b2a211082de9abfc903e63f129a201a89cf9de123356ce1a9bd8b078d61d0ab4f908880672862c854916916d64bbaf48172d28d8cbe272d7706477f569447058c81580e20a8d2ef693ee6704402cb7523965c44690ca9959bd33d9cbfaf1780a26a754c2905b8fd94fbe3d5e21e4756dcbbe3e893d47c3e757df270cb41f9d720789ce9b345c88b1431c25e7389249e7b49fe4361e1f7145ee33f620c63673f065b049886e9006df39f4ae374846e31b52e1425f594145c9f83abd2823576c9b277ce6ab5a9a0f51041f083177992d4ae45622e57a5a76ea55943af2cd936f742caaf6955a6fabe2b7a761da890be11cbd77d94f66a8c0ff894c46385cf0e52338b3d33969c2435a771c123d6ff51545b85687ffc6c8f450bac9a4415ccc827e4d55dd3420742dbbe4e6b2379498a43510d484028aefd9655f40503a4e0755203e33911545b74d2323f8a564ced74e659d4d3cf31537309cc312a730786e85e75c15045f91c44db1651ca8b8e2585ccc07dc93114bfd38c10aa05823c815c8e806d0b886d88bbd9827242222b4a4edbdf7965b4a99929401a406fe0522063ecbf62b0e6dd243b632199662a51f259d124fb7ba8b2146ec5a9834fda51fd3a65b61967862e860e85ee878743bba15742e743a5d0b251def58e874743926ce0a9d0a5d0a130736716c49c707d9cd90fbbb58d7587dbf17c67c29e64da79857dd4f89289104ac7cc72231a3c532693c4f62b61acb6cf5ca72c96da3c8fd96a841e8b7b05125daa159d39f12ad12b3a61f25da25664dff49b44c88368b6da2245a2748a2d552add0275a1988f6caace9bfa2c5326b2c6dd6f477a23dc22221da24eedd4831a2c53269fa57a2d532697a1ba7d532c3214bf31b3a2d8c56c518d9d2fca6eb6c673bbbfd7db2dbb6af395b9e62dec6168c34a34fbf244bb5f7c42bd9a8b33ab34129a510d872c9899ca86d34f8da3c16b351abb95f5babd56a79fea5322ab3b66e979c349a0dec92711d8923f7fbabc79785cd1afa76825e673931728f757697d459160186f015c35f8417ec3b5991b8eb703fb3a6be4b28b43ab976311fafdf2b4dff66b11a6fcd71fe8d67cdac99ef955c388464cdded4469b727c0c67cdac015fa8eeafef0ddea8a32836f832e1df5e47f71cfeed4bc05b37626ec40ebec217bd41473a762995c9105e24127009780ca149fc02b7afc51778838e1bf8f266dec09c54eea64183035d3184b4452efb4871b75d5b7d7647aa20a0616e8c760c93555071d8dea0f0eabf6cf69f33cc24a5af9afde7c47356af60055fd4bdf43a480f3e05c75208be08fd7addec3937fb4feabd66be77cc455d6f6fbfbbbbbb5519bfe755a7eae4f9eeeeee157c6dd57ffc27cfafb5d6fabab628536bad7dd94be7df7b5f75a341f3b7ede5d97bd74e48cea32310d030b98eae9d107c75d7624c22efc5ef8d3338df9bf3bd77e3ebc9b372a25742212746c69f1323d75184be31b63a94e77b604eaba0e2f0fa5b0106ab4fc72ac6c813f01b0b9b735a18cdff459e223cc1ff336d02a6ca4deb16fdee22cfcc563f5955ac6eadc49b49d3af125d93a61f378d99698380d9f2f7ea8336bc8a37dfb8d9df5563e290be9f0113a7f4fd0b9838e1f72b60e298be1f67e29cbe3f011307f5fd214c9cd4f7dfd880f0c1c4f9be1f01079838f7fb0d3071b6ef7f1a1307ff7cca009d075a800e8d11544f4e21b2ea73492ca2436384d593c4223a218cb00a4dab4f718f124f220958991b8bac46ec34a609027d8fdaac225599c680409a1a675497e99fbcb02492c0d0b3ade9389ca948670dfd4db4f5da8de4bf1255e2749a0dd5980aafbe574512eedb9f5b1852908412ee8847ec346132055f349748da60635269a2f0eab2ffabcb5da261f2045f5deeb203b9f75e5c6f1023456c5f2f1b11ef4e077a8022d65afbe12fb31b686103173e3f302180142d44a9291105134c96a84ee026385ce0a30658ac0852e54a14363b4cf1f282225e869eb4d0fd98502862300401d921080b42b628aad2450b9638a10312a46f89113a82265d62455820841519904a2d36042111cb410913a49fb089fcb032c7c124a4de1ef04890878122528468a155d1b2138609213c3c1105480f318c604b4ab880e1a103b642173c545041c4972840b32b868a18c15abb05b104f6ef7698551f17f8b66ddbb6f5b06ddbb66d61ade2de7b71bdb7c80b3f4636285122872f2d58c10f3bb11e2f465d980021555875b2c327cb0d52aa748165470f1d6278c2880c31406284bb448b000061a4c2e8e10a0e5c6e60c2420e270893a48995245b5828024c72b7e766a03f45dd4f96cf86778b98db4304b7e026f99e9ecdb91bb87b97f4d8d161c98e1b040fb40898ed873a9d0042872d46e030c40b1419190fa513584c5982431046d8871e97f9e4ecb0010b1c8274f019428a142b80445136914393262e94827af0067270820635f0a146a5070986604228880a5b808a2c519d40820a33459229acd012248be944902542558e9882851e3d3a08a13bbb3b321092a4052f4796b811c2c4cfcf112c5c808192214aa494be1e5ac90d384890d4f5c729d01e216018a26746c591142d1a7882fcd082213c7238950414a1658523454811051648d08c0021030f4a867ef878f0cb640a135d62adb5b64a0a66a0820e46b4cc404393273e3b4d68c1c38e244962e0b7438fded1c124e45d090f064c864cf60631ab9f4f91273c6badb5d67eb847ef601d86fa8795390e24d8212684a4882341c050c03264040b57f00064b405a1c31d79c7e2566c2ee80e8c14b1ac2a397069b2d3c54a0f076a447686e8896283229624d1c167a48847200b248ed0a2944aae98618608b9520ac1e30a254cac7cae448f0da4f0d1430d4396b8228a00cc00564397253160f992e47b8020dd7bab77689b60d245a907ace2c9151668d8f28317205ee082082aa4d430250993f2f3a30e3a2e6e3726f3ee7b25171021592f8e4ceff5f0f5cdb83797ed7badb366fec5d93ea5a909fadf0658ebd5ab65b1eebdd45e4ba9b781beb9df97fd7b4b12b0ce518e54bf46e08e3334f7905767ea9f30e6a2f073da5ead47af8e1248e0e76ddbb66ddbdb39e79c33e319fb27e0bf6fc75c14cedc68756b7650077577bb8fbb7b2da245b556fb437facbd5487eadc8d9c433e61fdfb5e876fbd173f8742bedf3dd7a932fe1c55beaaacba621f6ddbe4facbc1d65679feecd9f35ba86fa63b6ce2d03cc8aa7c7f3cc1ff7d246dd4afb4bddabb61aef33e90540a4d27544ab58a61c9bc206dd87166d6d07f1767ec0863d6d0181ccc1a1916a869faad60a1300b97ee92fbc916503fe941d7ba6524f6518e2ad3d1964684f46d6dbb327f866ddb5c3a9ee8e04ae1c90d4f5ec0188309bf3c859ea4c024dc020a275e9c60b182932732d9baf2c1ed9cc0e0e3871552c0818b1d9eec54b1c3151d5694f8f0045f095d5c54f01243163428b1640a2c02e0a506a12a5b5850e3a188f739b95ef0e56cf5766205cbcc10217ee2520188ad8a93d80e273a3a217c29184e886cdbe64418b381131d2f4f21273faed019208a92d0c035038c710da125999c658d299af870c527d7086a422493618d2a9a08e170139e8c31c6b8736d0943d6d33c859ad0f24c9e424dac684294c9965dc115c415c415a4fe9c14e32f35c6ddaf1bb5ce1e326790ab4b375ab58e2b17fe552ec0a01b2363d10406f98de9045653adfe67d254e36add32ea56a5771b72a14c1f57a2ae769d37ed68b7bbe3cad9ee7ab6bbdef66170fb30c891ba1247ea4a5ef899bcf0338127122a5553296f9afac4d3109f4c1fd5f34dfaa9f09bf455b5d23f32027364d4391a560b02b2120424442b298f0f2099bef3501f74088dd149e9a4745213269dd43fc8b44ea04cf3ac230dda5e6db5d69bdaf66aafbdd79bdeafdabb7d77c31ce6386fca7d1be6b8cefbbceff3a69ff775def781a412a954f2a625d2078239a452f895c09cd074329d4edef41403be502c19f0a57a31b39a99f1a6339f09cc711105be689ea90f05e6d06c55e08be670a55aadbce90a93666e70769c329844a290eb93f55eea24f2845cc7a6750bb40206752ba85ba09520137832d58c4ca61ae4f6b35ece76c30545e8f37d82af188e33ba21e63a7247abcf0406996a4eb38d2b1957ab7db559d3f5cb0fa86f5aa869e8e7f01c60c0181975e9c2854b67c99249ae46abf5583db6aa81100354cdd69f89737f4e4b1be2b8e8826c8cdc05e94c5b5142b8e8c924e98854739afe8a92cd9a7e52cd5d67d6d055eeac344d7f17d42d5305567014d4916a41b9bf046b1bd2d272d78c4847243016d7dac51392358b198ad07fe6b34c7a3337e6db7fcd1bfef65f4e69b77f9fdba60ee6d4e94d6bb5cf72e738fb9e6d6badb5746252637ce365492023dbf797875ec1577d5bed28ce9a69c1d79da1c0f6f7757023bee0cbe2c81bf8aa7362aeeb3a8fe3ba12b6bf4fc236861082d3709df5582caf84edda8fe3ac7ddb8137faad676badb6473c6be89c5e07f6bbe86df40bc30f2461fbfb81256c23769a06c106cc6cdf6bad954e4caa2f42bf4040c3f80dfb15cce9723a14ba5cbb6cc7fa9d8b3337e8cf7f65effb3098c3657062d08e23c8b5c7dae10ecf2b7977035f348c8b05e1369276e6356066fcdc774fd6a1231a3431f75329a5947a91ff147557cc53e4ee750baab5daa3dc6fed256fcf88c1576fa2cb86103f47bf0d7cc096bff75edf7beffd6eb7ef74723f37947b24af9d43b98e9334012d77c0ce408f720088e5de70f6fcfba83d42a9eda1945e7b848eaa1db3d52a9d95c8fa1851e64b62b6689545ab2b8bb0be6aa9a6d3365d50ab76bc4741d6af5e87ccc77c09fcbe0492204389494303be6428315bfd2f8ccc1689239f4e3fef8c7d968d79d68802998f7914b07ef5384678c1c91076af7a7a7aef650cbd0c22bf91393de9f9fbf9bde89938f63be61be799d3f4933c977e96c8173da86e28f7cb8878d2ccec5d12a791acb96d9a945194fb6b9849552c04947cd1d3cae48b9e2c4389dcef89a48c5a6e5807ec2c8ba49de5fbce934956eeef5e4067eb7e7f8c8827cdfd9578afab4b48022086dc8f29b6b307502852a00020966aef67d67649114d739ad8f77ddff74d1293616651af33cf149648a07b9caa042acbb24cc57cc462b118ca894edd6c369bc160391ce6308739ec7af0891c9850c6beeffbbe8f068d54a6418386e7445c89047a8a730f5502955e7a65798ab5cd7dd03d0e9bbed9cc93cc66b3d9ac2600334454a6b1582c162b3dcff33ccf0412939e0c892611e7315c22819f9b30179640655972a517f3118bc5623127722e4ee4444ee444041800cd29d3b22ccb92e3388ee362b1fe582c86bbdcc0cf4b5bad61ae042acbb22c633e62b1582c56801a53a6b516c618635c6badb5d2d2bf2743f7ca72abdd0747f2fb52291830668ca407997471ed4aa0b22ccb92c65780cf158350867118f6586badb5d25a986b462425e9a5b27e3bc4caaccccaaccc82b5568dbc5ae36a0dd7da566bb7d6ac01541f150f30e4003eb91f013d1f7c08f03ef8a848da24b91f84d9b401c1c6c69bdad04ab969adff6e1919fecb72c0dc8d9616822a0210df974ac180316386071ecc26e5a6f98dcd325403739403663b5a1a10b48d238179cee8905ea0e6b54f9aa24d290e52c0408a0d6d436fee17ce1a6765774ae32f4295f06bdc6ed539bfbbdbdab66d45f016eb9c4da34a21626295a790941ca9396d3c9bc2b4b9a6ec9348a777cc96bfa7306dbc27bb2c7bcc69bc761923db1f96c716d9225b648b6c918d75cb6dec0e0f39774c9b6d67b6bc6db658b77ce3711a7f8cc390c57a72e3c9fe4162c9ee94626d53221101ca409eaf88277b4f264f3db6e824134db56de73424c7dae62464b678b6d2c7f6b3cd7af22643d1668dbfab896b47907e453f4020d91fac617e5d7cc4401e608e0fcc6754e43726a3a6f13781a9e5b0473c60d94f5727fb0948690bcafe3d9a6addf2771911925d4996fdab58e29935def1b8a084f42df8f294ec03aa8144d845ac0c954f4c2129b32c82b67956926611662189b3c3702a86c056eab356d2cc8dec23a981dc31d41042284a91283f518c4409a2e2aad2eeb59bd66ab5da6e6befad52a50ad6010404d45eddd65a96d65a7befbdb70cc9eeb2562bcb320421b061d2cb26f168b454cb64a85369a2b11c4e22a2922b4ad8b4b6019b0a49a1157f79d2bad5a6e977551192a97bc7b05b5e67297dfb369cd2896f525d71882bf96556ad5caab2fe5b21b5deb5e1dddf1caf1573241c84852839d48812e547941d61a2b0f0419415a07cf181d204ca0f50a2c0a1c4c99427a4dc40861d7c3049b2440d5480c187280a1426840881628a215c7c6ca161e39144132d38590114503628472cb10594263f4011820a28436a348102048a0fc6b88616473c29227c42e5c993274a9ef8f0c4c8132e5052786244c3a43940483056cea13371aefde0a88f8ec8a6e11f1cf90d2804cba2c325d68527834632104c4f6e2f470706b95c40da5aee1a9337b103735425246dad036373d43674acddaa24989037d3007ffb2f774fa57a7a771d433a437ffa9d359bfb66c310638ec5721a7cedd7efc01bd662f730b46fc5d7ccfef6fdab7df5d7f7c01bfd39d4ff357d037330686b77c49b33eedd36cfdbbc6d768b6cbdcf3c076d78ae1dc2553e127a23e9b3bcfd06ce70de73dee391286fef6d9ef75ef7df515051d1cf51deb6a794524a3b286fdb7777b75b9ebcbdbb7b2daad5fee46d7b6befe68d2e1f5c3e9070064712850c921e67d248a2f02a3de91dbc511a87f2f6a471f3c091eca3bc7d4fde7ce8a280963be0335a45c741a25eec6f30ad129261aea3076ef9d31f0ccee13cdc077620d37d68ad7be4f2dc1ec7c1699834fdf7c8b4f19dd9ea9eb6f158b770f0207ec3c421f90fb7c16b701ea761e2f0f8cd9df90c2e83fbf01d6781f7f0d8c4397d5f1e1fe24472bfcbbac6ca149654a8cbe1adf348e0b7bab33bcb6d0a4b5995425d0e6f9d4702bf93292ca952a87b3275e7b0443309ec38bcad2ea9fe9663aae5d234fd5d8c2c98cf7179b46e081ecbabeca32572b920245b7dcb4e0aafdfcb21c3d0fbfbbc440116ab7e9fa7523865fb555fb59672ea0472e8f04a36c6afe44ac281b928ac5f5f93f6c64d8eb6577b378e64391474ab3ab946427a42ae3cbae5321292ae93ab1dead67db269354a2985c01664a356547677374f1795eeeea08d5a2b8d594b7588f2bde41c72175d3c84f8e97b98cb9941216fcf8d240ad9e29fe08b8e38c727e8b88f7254d9bece2adbb169ddaa638622f4ae2f3366b8b4a875868b0656091645508666f8520be23048a2a33385063d9c7c6006430061d245861eb4a82a38608a18aca0072e41642cb860c5ac7683293208c1a2bf52005c78a122054c901f2332b4dc1ff56adddeadac137ca9f2cf7a37ccd93be9db0d739d573dcf9b7a1715db6a459513e47ee33aef9b614ae9a434d35929bd97e3603ab9dfcbc123f77f3a301fb99f14eb56d76ef693c4c9cf0ca89cbd54d96e5bd1894b9753113d11cd93d1a97622a2311e1f407862436431ee6d7065109095a0b2a28450b46e35aa441da18c50605047a85a0e18aa0656daed5eabc7d5906e9c17f381b9fdfd893cbd9f4f8ff4c8b3fbf9b40b2979724d441679621e21793e9549318189737f06c14212b325666705a4faa22292c2f22498fb37af4fcac0e8c84292fb6fcc96dc6fbb9ac7ecd08c579dea8bab88e4fec6292c34538cc390c5aab4d96c369bcd6030180c060b4da7130a95dade4ba936185f9ddd8fa3194646923bdc12ee9480485f4844faadd7321392704bb893fb6f09a8495f48445ad633fb2983cab22ccb3236fb39cd4eb3d3ec343bcd4e33d43755ab1903be62bec992a93232de54e67ae2cc190ba8f32df1a8f07e7435104bee775027f7f7b78466eb51e1fda81d35ac75623ce5ece74474223a119d884e44b9df5b792f381b703c602db48bdccfd1b2b392fb43ce06b9bfc4f190fb29d65206d186888a663fb1582c168be5fe18df8d6d52ae972602d318699392fb65b6eb25d318e5a1b29ed94fad2ccbb22cf30c8c183138e040868c17ab287a5391956f0eb985e836896e0ed70a99e034f48b6a47b0948ceaa06a7e430393a81aaa46a26aa8181e073db95fc6109fdcffa99eff684af6a25424534972ff989a75503be8c09b7630c7544cd6e1525c92461ead8e94cc6f68b8ac9c05fd94b98372bf27e35b85806652065683b0a30c6cd6c8c072abb20ccd02445c2e5091e10b959d1950e9e1e241258618507981082a3bb45071a18611545aa0b202959efc224f212a52a8fcd419256a8f7997b566a9ecfa84e4a4f9f86cb1c4124b648fe220f25897352a2b793166793e0cf001a918332f9a4496808317322c27912690c18a59a92a893cc15b128902d1149648e07749640ac68d44aa207b1d8c9844bf3ef1e60cb2ce72bf07a3cee84cbf7099cab231798e198ab0aef21ce7d7d9cd02cbfede7d96a8ca30643a66a54aa19e5ef15b64a932e63aef033d18ef5df1c55b51e6618833a5272d4db4df228b48768a0abfc0c8a40928fb77ca0434e33d79dac9feaeda79f17d5d9db6c8806f7f46245148585986374c8af138c7b00f4324ed2acf88a4278bc9b04c7f861d6dd6983ad8ac716109494f56a24d9ced5fb06256aa9413911589bf2914c9ee88ec5f22819fe73df0fd1102b7a66033943b52e5e91e510dc9c499595845424454ab599b020963ceb4f8a245192abb5f8bac49f38ff95a5ce58aa4496a619d911a6ce23cc6789c4f25501f04340c9eb9f5b72269366b9c5682b964109229982a45cb4e9b38a7ec2a992b89903ea992654fc168d9555b89d6c1545675a9b3c09b33c2a7a5a7a4a74f6b13077cfa5d4e9cefa9f7f49d68e2744f4d469c7e4e2cb9df89e4fe4abfe47edb7f77f04944bd4984d1bd499cc1de9bc417f87b9328834f22f82691854f22e94d624cc627b1f4267195b19094887d927eb94f36d08e6fc9ddf824865cea714ea14651954da22a8762499cc0aca14f12a96cd6d007455a9b35f43fb14b8fcd1a279a4790544816994ac9b447f6272c0c0b8131bec194a32bb4a06244032f4ad47eaee0d2c505c3142aa6449183cb53684a17502c3743c2151f8ec851db82ca8f1bccaae841e28a10cf941a3ee2aa10255334d0949fcc419e425382a6002169b46b5e561ab39368e6068eecdd4f0425218e2c829270d2b18b07a35dbdda6a6db7d76a6dbd16d72323b282a94758246d0e0babd5d6bbd98a2bc789640d02b212c4896415a26d1bae5c67abe779ef79225979aa0f2095c713c93aa4ca3cefab20c9d65211972e4546b55859cb61759ddc6fcac1e34551e08b92ee23f7a73ca6aa2a953755799f98c449eeef9f6e750ecd5d2dbbd5dd3b51d7cb7960e9945ac9cc8829536d75162e5d86f40d0d1aed93243ba10144c34a9edf326ad43726108121ea1ccda37d34905adb70407d4363312b31a1589618972e793e2da98fc640c2212c9f3c9de4f919e81b8abb84462c3039328d99d036f7b3bc10cb8a073f8305e3e683be6999771f9907a884cdd6f6b074a84e000028282317000028140e0a44a224caf128c6357714000c687e48625a341249c3b12c4a911c83310c23040063080004006080614ea14101bfe371b10e8dd0ffa59458055686ed94acc295e451385fefefea8058a5be4e56e0f31ff98eb44e957310b845e5fc57c1a40e4f6b069322dcc4e8027b2f1c88815a765d509458c94d9d07e8d452888f601620a56ce63f9beae0a640453de94ae0516eb369fbfd9b71bd54fe85b2324227af68fcab1e004fd117fcfcca84b46ce8e7aa1d02de9393d1565648e45613605f011686f02f4379838b1f5b474ec926e628a4f89da8ae633ab9e87c96ca7a753855a0a0c8490e54dbb5c3c32dd8ce447784676a512f67c48032a09b474ac9a6e69841a40b88b59544823d6929fe9c00e95e8b6343809b3b141479c882b4f93506df623bf7a8adb448dd93b47f2af5a3c2321faa1a116d6bbab13e30750f51ea84d350fc574b1c7ee377a8051aa5f3799b6fde56437a71a19e7ae296420ed05f3c286089a3b4924a30e2962e1a12fc43fda2b6220a5ece7057040f13d018a3d33f76e98737d816b29932b83432a330abf5f84003395e3703d835d0a3bd1f8bb34a645d46e37a8db3c18fc8ae71e4b433ae306b03d45dd4844e7d742e87aa9b73ee2315194094191cc4174a1437429cd3ecb590b3ce8fbd5909be2e713ec748344659a8ea3211a3fe41e8f4cf0031d3dd50ff8c55c422ff1f4abfbdf4c01dfff934f50aa8e9cf04a71a0a7e629cc85dfa1de1a3019024f4b26986d3564a831c92209a66b3a9f2caf4434c5481d6f6b5d28eee68df1258de5100bdb25c451f3e2d0f303d4f6cf63d26048a659a5a2a74c803824a862c39cbd0cb678e60fb3408f6caa8afcbc10f5ad921bfe8d6902794bc06b3cd4daaa6c4b506787fa979553a9fcb50ad9f5bd519687a2a52de51c16788895bb086acbfb6a73334466bc0a52a54a9848368c368d028c9e12ddfaaf44a06f11014e97ab330450ef845687752a9f2f62dde0f9c29b21135cc63099c7652e20b8fd2670c4390f8eb15c5b9c86349c096ba6fc8c2589bbe65df869f53df51faed4a01d7dbe346d18e6266cf2324048ad99186bd2e3876906bea73f216b6d28e53de462c6cc628da49c26b57dc402106aede0849e7a6c4ca4ec2b7d02883090a6d0a26a828d9c05b6000da0a27c90732f6416a496423f3eb5ac997b6c5822f9dbded3bb26dace7fdf2e22a342ae60c87203f0f2113e926571f2035a6d2dc4b9eafd49e3bf9270c13a469a2bf6f6a22a78e9301d54121590976fc0bf9dc0814d90f3f5e4b43c4051c50a45121cd28d389365f0dcf8dc37c5c69c6131c93329a210d834eb8de6c592c734d54c2a336fda0031ec27eb994bad3bc030c7728338cc2189debec1131ed898d72b20e1f4593892c8af19fc316362765b56dc3bece02530da724f8fce030f4689f2606ba22629f8bd0c5db3243ad9f3427353dfec5968d4f110e048493950be3f9f874cd8dd322dcbc06d1a7ed6f7be56944dc6dada76870f5d3369fc142ee37033eed6fa6e34a0aba1ff40a72351d6076b4855a6e1b53b585b4a3a3b4e873b86770e69a896b952439bd703d3b41071e86fd72d3dd736ee335aaf5ea85e996e9d71cc81976bb142da43f56cd9a8d26b1a74310a5f5bef3a88735c64646910e48f1684efc27ee5f3b9e6eb2846d554b32eecc39e774c332839c471f0cd39cb3f05694707a89097fb9801e0b25aeb4522efae9ff149c32a869a018865671b803227864993b2cbc097726dc8e2487f931fadd4aef54c679f81e19177d0a26a8548082f7e2007fe1fd5977ef69a23d4c8cafe7f1b698e8345ef43abd67af9df8836102aca0645289fa35e43546a4513fe04f7e25ff61172e112ade72cba20d7543201ce60cbb8a52cfeec318c2a6403b705b661f18da9cc26aa252a09945057fe14071df0d7e64a961dff908293667c880e70088f937d4cc168f29c720b6dabf5a54f79272f5ed10b7de00f797977bf4f80195195f8525a27595819f9cc7dd04feb72a608b723185ea9b22e19593529d72d7d035dd991efa61cf6f272039bcc3b962be736e56b88bf78dc51e9a311b58e066a673941468a1262ecf24fe4659a8837a8b18ef4f448345ea45b6c384007722d56d801ddc27af1cf0deb74c6b910940ad419fab64e5a43984aedb945e8ff5386840972b365da0fa3a1c6c1609ae3e46373abce969c8465bfa064544e6543bd5f83ad1d1cf4aa446875ec15bc3ee6ba5cf862e3329d7e1448bbcd93ccbe43771d065c42abfbf529433f41b604f7d8a0dc1bfca40b1b81022f7a197ea2d66da5064e28f8ee2670cfb9b3709b42e0656b855a705ebbd515b3f57189f792a47009e388316fa10072b117f5f1105182183b59358c69d9f1fe13ff0f5bc6e0ef266c416ebf9dc5dc153efb3a800603957da5600a9aa64306e27a580fe02e33d31ea0309c00664d3984ae4d3b9f5a6bf99213a0d77e7b4118d4eab0cc37a1edb721123baae0920402a4479303e85334b1dd066e4627bc3e95ebf2a10133f9fb74120602281b6b3303355a5bda3cd6555bd35cb6b799d8c367a00cdfbc1c4a48a9a299d93a4b38ceddf3481bfe7a2717451fe6aeebba930f4a99493a9cb3aa69771f268bc55f8ce150e283125950e50555babba2c5599a9a3bb0c62b15547b0bfa4b545ea4acaea1f249b499a1fe5377a121bac9fed9a1b5e76b94e5c91ce718cf359550cfca3272fa11b835a26be4512cbc74569088ba978584c426b098a284ea23de9c6f35ad865b86b49a3a7c5b8e40cfcbcf17e34f4d38f0785ab5712839491cb620c767b1e5e52830c96b3876fefd90a8b7c6f773d5ca6ff84b1a0dc11aab4630f352d23ce00aa6513528fc31fa5e63e6d84bdddb56543b798f6ec46cd51e1d48b695fd1fce5721239f1c4be3192b65e9b5f2df18017050e37d8af54169d4279d83b188811ba060318f5d025ac99ef525f7abfc038bd60f19212d8c46c4b51ad006d88d68a74b8b09d8f4b3e1f85581d4a2e3105b66c628c91e4a820f0cf4da10f92046b8934d15f34d7e96c72983599451106c616b4ea6fab9533418383ad9ab7b9109068f180f7b0d8ae280f80fdf50d0b7717ec8d0858f430f6061eb183226900a58a4ec36c2283094911aa055383914ca3fc960378916086616265cfde7d4b3209c73d6228c243cfbf0a4becbf74ec0a99350c2f3ff40cfee9ad1c74a394142c1cea99de19fa9d28fa3eaa65d9a19ea617a603561c16abd1551dd872076c5e0f77a344b5ad8b0a970202725609462104a5d9c817d1714af2954457eb4226f3d6223d0ee26ab6f2e3394b3b2a9f89cb9fdabe7458c78685dbe06b2ded27d71ef5b549a85308d5eab30addecfdd96123013b66a6439f45f459063b60b897b58e792b40808e836d3db03e22af4c099a50119b4d931071e12c334b03f8895f1eecbcc9e54d2821027eb951f3c68a74180562879620a9ac27beb5fb80024bec066c886392f19a766ec88fbf106bc80f03e3090a8b76803a0e38dd4d26f98f403b1ffebd4360c5774f81077217879e128dc6f4a06db1bdee6c102058ac32675e3428fc10bca2485b4143e79fd7783fbda1299a8c598233d8f03107c5592936c09a8a6f8d2d41f2524fb41c0b2aa2706cec2c5e14ff01197068b763bb53f32314c3671f6023f376943ac3cc73ede0d9980d699efa91a3063ac061601eb2f160d83ee43e2c0777abe855324934cec3954f17d1e52bc01290f27ee7aaa231ea053e9cf00da6147dec57fd2d0e2892d68f25bc20c2913b26d0acd132bc130ab586dfe217112a0b29bed2361a9a57e01fefbf3f045ace954769a4b80d5f72bd48c1e584fd4ba2debdc44f7b2442a182afe675c3229bf00713d5262480d6a0a124094212bfb3e2eec98bf2213a2a44cf9af761688daae04b19c43d9fc56c2956a582392cfb280b0ad62d28adf7beeac7b5ce5415909044ff480cdbb96fc5dfc3090fbfd91f8839a7c7d767507ae41373fdc98318aea746b389131b598f2a44c6d439356dcb6596a3272343dd93b6d238d6d20241e91b49609b6964a98463afb1dff51c04a9d100aff0de507d29b3d9d19b0ab9d0017d869b7867b9852607358c9217cd69c0d13d52f4ee5f537b423112e93eb97e0ff9f9f0c4bc72af2eafc44585f8531505af2ccaad910c3e997c42a0b8c880b4d66c9a51ec26d0a20ea3a5102ad5d4ce08e031cd55d800291b48e0b7a5d30d12b79802c3eba42296c610f80fa7f69d48c53b8edecaae8a89d9229d81c03e933a01f0655688edea465e41d997930ed53728bf323f317a979c0506aacb557103585720afe8483103328b18a19827475b4295cdb331748f1331db8046e2fa251bcb5767dd6b4206032ee63454bdcdf5ed2734a9c024fda3fce8a118a1755defad0a40e37bc7e259e821439518d6a0bad751cd48e8a6376210c6fad5e1d2e5dbbfe1589176670f34ad113ba77b791f280e4580ad121f1e3dda37501863df06c6f5e836f3a3432aabc7faaf012a2301d879895b3dc5b19cf4f212f3d7784c7a98b43ed610dab852d1249eadb9fb822b322de24f1e0925c2d9c7dc84142e6f431d3613e8c6337e9bd70dc750cd1b1cad136e5b1d49fee2a50be9eaa979518ff38d1f110197c9c9548a213e14a3bd7eb1349f479062b5bc8358eb7c837f448fa7122d54cb3cc75aad0203e0a4e88359681d76bf121113a17345debc3de68505741cf0378ce4a642576aa3a460d1cdd5769991c4cfd8d1d2c5dc8e88040c76b3f172d5a76be7b2be026825f606f3117ad814099b130a0e38dfc6e219069cbfc3f426fa25bfa0dd10896ca833c7374861031b1c4d070f75355827696517cb87062126ac91be562403ed5934a8255ed34943d980b17c1f53c16a03c9b4e8013cba0c5232d2d1a0a5b3cfe53300b84f2769c5e55f90c69514f3eb66fe7c1467cce06586584953fccd4972c3453f839018e5e8752c22bfe4aeee9d051ee359303e8f838f4346d1852f425e7dd1f951b6e3af02f07cf5fec6be94800922cf26a73e4bdf57871cc5136391af4169ba5983c07f7f0d7086a221fc0c61074b1e1be678841edbcac9d8982c9499bd68b49ccdc91c169e763faa82a4e7ac12a815ca61fab12327a440ca60e369617e13a2233a17b994f30acf02514d6bce9294388dda850600202003d860293a6a78909468f3ad6a205467ec1ce53f8dc81e8cc31cc60124c6b07c8625d8b0f765618c03b32eff85871db6df5c98a607bac9c9916f04cead6855087a500a65adf740137f12637b2b352ce34fe6df043f778db99eef74d3556ff8a3737c06ebd4d4733d2417f69bcab2d784d44ee5ef76a1449a782f9bd38adff597407cbf8afe5411f748271a0b5a5bf795873749bfd54a131eaed25c2ea0acad5bff556bdaea3960ca9da3ac8c084dc39fab7e9013aa50f233b8c67065a04ca2f155c3c2f767418a6b14f261bfb41d6ba88c315223613612479262779b584fca74f925ab3b85dc2935ab57aa9b0d3f41f2ec94c32ffc4a918fbaf982b366766721c91e7c051b097ee359bbb2eb84b40f49f6a1fb406a8e50ad5bd7d548acae52390701550ced231f6518450e5cf2bcadcd770ca8c66860283e6175bfaef80132b13996ecc1311ef61c7de706f100f845618335fb05c8b12f281e5d7e0ac0ebbfe2878d2cb961ed1b16cb8315dd499319d23453e1631309259bee30bd12ba23c169c8ab57d4c46d4c4c84abd712196dddcaca9d20f9277b598d7f443103f49f644dd589e8f9653ac733703ddd1392949c41226171ce058d71c9ca470455f95755e68269de6eff433c30879575e0d5cf6fb5a62f9bf2945b2170779da5012b094a6c29ddc47259b9831e44c75f05e2fb5fd8d6c47899faeb8ee5787aa702a131a2c152c23ac92107b0fd34b66aba71e4b5ecdd40f362b8c70d2000800752d6cf01d0e16f343400143a173b91f50a7dcb9f7dc64ac1699d9b8e9d2f03417510d44f3b68bd840c527ed2178bf86c94f7b89dee9c4ce991afb171faab155c3d765b54d14ad7f7f339807f947ddc16e52176aac9a2d65a4cd506c1d241fb8cb598e6f1519790110a5cdaa732555f15aa13ef15aa4b9a77f5d85004a20c10040349e999653f9e7e038a007c7fb4d0de784e0b0f68459e070439e29ad791d672a2b9e2d324b4a07bd9fb9e24c535569749b2b8deff80850efc730ac614268880dbe82d9bab433821b85e211ce978dd209cdb792c10ce4251cf2803506babe20a8401a143454752d414c280514c234ca2f1f3512626dfac322add205cbc1cd38c0d5c2cac384f7a073da3c1969a076143d22807bb8e5e5118219996dfb958af87d5b9136121fb8d36cc85dc0f3837dd96bf5978f2014b1ed79c9b1a5db41b9d294a6f04a98dd82d7165472dec968a13f0066faacd5940d6eff531a9371f3bb01fa6acdab8dca698f740e5410cec7e2a57940d73e27730ff9f4b05d9a66908176e56bc92bf1b7174580d9baf1b9f6e53c59d83fc096b2593dd1c83f097885d6cbfcb5cb89c77c1a4c8d96d4ea0e2ba80a6d2a666227798b26f2bb344d79441f6215cca51126447dc2c60da4cdcd238178b65af6abf7bdb25b4f5c5c0bd826c8fd9ff555b97c8cf7589162ffd4f2968d7a8d44088dff55536c0f73e52e07d0535af6dd3b2605edddfca469e7b5f06637ceb40567cd58341c0a2074cc369e54d048f40464bf29c9b924658217837cfad2eeb46a8d35ebac8dbd0c7383afccddf4cde78273f59d161a19481c9a6f12685c4136e575b0ebdc13d7875d3003320c9dbc9f3fdb912d5788fe194b5cc68129472e7c9f7c4881cbe7f3f273f93f02685b407d75dfc4aee8296cf02af5256689f4b4a122d7632f883b2acd328823a7e94321a72461955183d0430233a592acccee52522813d8b76f54b49d146d4b4537e5259f8ea19d83c3738af2b9d2a0a2418768d9e0ee774148e9f4c70e23de57275e1462a8d60368db4952590b81552ea9ace36687ede6deb1ea42755b464b699b2d172ae8505dc11a68be34790f5e4d4fc50c5e05ae0dd7760bd98a585e1ec5c995f4601058ae328506768bd0a89add253d621a42c5646ef8bea8a445ee3e355f69d6a5e572bdc27c2f733dcbf9bfc537e663e4019cf559e36c2df432a9b2e0aa1175a4e21611ad16fb9693226b27ca5fe25cf41db8be1a131dfb45b5bf7e3116b1b82ac952aa543efb1a42fc79fbdb091919fb1b45d38518e5d970a8c9bd1d889be668755c2ad83bd87c295cdce6e43d55f193826e72c116503516094192bacf7494d85df8673daf14c073f261449404ee652dee2a08100ba443b694dacfa02b2bfc4a97da90e3286e4e80134761531b5ecf665570760719fef6e84c179069282693f57c3ea6b1328d45b0c703c1867a21551ef355fccaf190fd97148bfbb49855f7fa08460ccaa44c94e7b1b0b0e0a92c7a105c772dd4d758e94aa2f073c6a83b73c9fdf85ce258e4d0f33e007e0545b2fd9ec789280d0ab412af6200b665f43d4672b2df296040393a8bc55069c61e95499df1efa45f1cd94d273f97ef8c48c664e0df88cc495ae059b4a0ad2b3e7858dd136877735fe09d705d133322c83d6727a6eaa95d209cbdded01765757cffb9555d69c6cac9aa8a3e005b17f9c338a80287a7808c034c5545d63dd0520404159220200387f514f14d065dc153417dbf220853ef2354aa989d395001a11cff242746d66f00ae96e9dd174b2e5438676236ef488fb8ca22e914c5fb22a9f97684265f9841793590dcfa21ecadab7b4bb7528d02435a14d8efff8fb2a722981b64341a3f5acfb579670b65644976dbf74b02917f422d4855437ea225f4814f3c6200587821303621d6db41f7e196606c822c68568aa068dc93b01018e115b90259693eccf357eb560dc0523c9c9950ceb95489eec5a1b85582f6bea8e6947a094a0799931a1eec734e0935e306549305837c6dcb4eac72b87f519cc2ffb33ba65bc328e7d5339c22e78bb67f86b49928fa925f2efc6504ccddeecc7dcef46de233f6d9081057f10c97f1c4e5534e35b58454f4b324f253e30abbfeed55a0409cf791299acadc112e90d02d1b8c3ccdefc05e2cf4ce1fe982d621993e141a9e1864ec417196135ffd4f76167cde7f81149a947da4bf6bc0497e46bb95365d073c8fc4a99401bbf52920163d7536140ceb6e4b1d18e0392b2f0fc2a744e0449b50fb9c555535f1606221ec980c7ef6feee0d8f2931ca9251b29678c4900068d8d7d0d80061964c35fe424c7f3bd2c59b5414002a223b49332696447d54a987fb3b793308d7ad3e495d2a615aa7d4f77c21cc214b39a9efcc2b2ee615065f6c4556dbf8f1f39a958be6e7a86802b9140be296e453e4b2ed7e1b8bd877a13ac5893b3397cbca4a70b2ade4bbe541dfe1bbf9bf1c6477c5a49e72cdb707a50fd12daeb0d3e67659a0e88c137f99e46dced418b86189371437ad9b12acc41cb7b3d080d3b322f7abe2f9416e9d2e913bc192886072d98cb451f3f47dadef34c792e3c68fb5c7dfafc25de99e03432a863a9fb5eda5ddbd443ee3e0703d7211a9b93a40b3c8080827da66fadbdc725ad6e12210b1f2acd511cb8be50f8742918769b06c9176994c705ee2f95a0bd5aabd6d37dc56463fd3ff24e848b670a138bd236c31b345b00a288cc293b8ff6efb9e03989b1ed1b1d82f6f095c1fc0f2679dd64b5fa7809193ea0601362696c3e247ba97810a1021805882e681c43ddf526621a6f3c99319d8f5e3e5bbe68cd1d4828abb97b7db15e668117e3fb7022a70d18f1ccda008380918c6fdab687abdb85c8db810d8407d85df2a92499a8b4147c483a4d996f2e46f119c0aa0e877ea73593aa468f50d60c4fa64767aa60689bc1e6bad80820d8ca1f4a09fb3d38de040d37aaafa5077b7830d9cf42f90b30c5ba9fd407c5f4d106d5233a95ba0d6703176f90d76ac27be38c28b86048b6b2918e087d749c973806ade8800f9b6180bec44302138a5eba1edc8f007ae1bb84e890d7530dd0de9c8232003e46eca18f97bd451f986b30f562c75cc87e559e3e1e58e057ec8cbd85d44632eb80a0a0f7d43362272ba4a0ca821acc2a3f6c75a45b6f1910d374aaeea7d7458c0cd90da7e2712882d24e4af4d79c46688d2523157edc97c9c4f861086bd7b03ccaa1411ba159ac9f6f88bd9f69895a4fc95615944b23e3dc80d61b0a3482037de49466ccea17f429a6954180fdd5bc50e50eb6215e44d5b94103975ac5164ba685fdde00c2acc8559f3af840aa8908e7e1bd0fb4bca0434b88db4979d7ce70d66ee04eb0d64d21131a035497268cc54b28b203bf6e4e78cf6f792e456cba5079feec008c04e650a7bde060034acc0c1c553b529efed106e6285f4c68654ef08e668fc215c15fe09aff5433350302fcdcd630489aaad0d520715150cd0a6d4da47ad5e67742fa7275e49d1554f33296235fd7dad2bd9161771c4a63a59a2950c492d581e44665f0c423d58c8ef904d57b2325129e760baa79176413e7b110b0e5cb8f554d7384d18864aab9d7bfa545048247fc0a8d359be8ff9ff37a1a0f0848cdfae97aea466c251152f919cceb83da88a3597361ecfb798e333aad37f1d2664f9d10e749dba9d90c442e0ec11cc6ca7ecde322fc63834bfc211f7bfe6dda1379f11f95c29a830e6672ee4152b35f0cc38a71c8cbd46be2ee3788b5a5be2cdc63d37272546adcb765441b157105b665e0bf9c3a79c109c53b7efdaacd87390ec2e463f54a211361a199da804ba36235dafe0ab08f48397e07adc87de8d38e4d0d8411781c615ee2e1abbac2bf767cbd7f760590941bb21b8eef5fa9679b92eb40c851835d8ec1c64ac907291b677cc1262657b704e3b377bf48220e70895b49c90a4c88edb8e109a692505eb11500587f223592dc087019c7b3104247edef0e3a4e14d2392aa06de0b142a4a5545c09b22b0fdb2169d11abaafeed5f1f196e8d1557c0166d0318e54a4c372ffb0817738f91df3e536a24486c8045ab6244572dbb6e5312c0103fb163608cd87fc375a812c4ce430a87e80f286ef793cc2515c97e72df9d3cb80a89230c19f8294ed5f048dcf4f80c2188d5349c0ffe4e0407bf195e52a8ac46b5e49e818559c362fc4ecb0d30396d3fc52a834c93bfd117348a2255c3f9342f92b2ba31ecb18e9aae85d5c6fa04479a3fec5504e27d42e66638cbd8338c3cbdfd77be5c3fe7b80d1a654c194c4c58ad547779370c48a85078ce7d20c60dbd16f6042d4a3be8b8cdc2eae5b21d0d0a7200561f467b3bad6b06abbe6c60ea451b8aa18dd1446bc54a7e72e7a1b2cbdb9995b58cebca9bc72232773e97734ea385b85f62948ed5f45562348c5a3d637bd75e8ab4ff3316da2956134da5c4c69476372e1eefa45f073b56f847ac8993416453bdfbaae9ae173d7d834a9d57b14e156254377166c31449b0200df523cd5486e72cfde7870a9893de1670b81c8829413b329b0fdd28c27906fb31c59b70c2a30b297a1cf2d4c875e08a27950655744905e68b6330ef8042b6ba77559e61e61e6004fa4efdf124e95f85c5a039de3154539aa62156e7c716f98cfc4e31186ec3716a9939e28c05de0b19167ec7fa6ce79307a8d9d22ab4e5faa56da0941c0d87662354781216deab3879b608deb1504f3254070c26addda39d29501e14c1be92bba7346133ec6fbf4599f6aab0641362dd2790a57b41777db1581454805e476172c26502361b8102b08edf1541d5deb29987e295ff6535f7e0cf03ffc8cd2b4018599eb3f61cbcf4d03f2c5c2d17947bd6f6f7137ba0da2a1d8994262a60e69cadad117bf224e10b13ef171599b0e223b64db469bb15e08dd81e25d149d04fb6593c2f491bcb308b33b2c4e6ade2379c5013dce8c36ca07a0598d24354d9b89ef694c9f63ba69279be304cd7c804865856d78d49b93178dfddc523ad1a4fb1719ba86f5893bf22b561bd13c3a2749c07917696c776dfc07fc6b7c7289f5b89b6f0f6f9edd0208023e14b2c3f467e32416e9749ea8b04a6c8ed68326a729f2ee8019808e2401ac669f37b3287641f7d9512c0aed799d0f4f1a16676cb0c9dab4e0fd5aa15a78c3cab1edecc03d6d4eac719d780bd45dd1da401ded6a2554b62d5015af959b8303af2d64846d75f56046a5a59d64d3694978d874fd027dd0a60f15be84e5902efd179c2dec2ef15409a4e801c165eb6b69c98c5c2568334f00b42316daa0153a2fc17a0e9be00f76a86e4d9e12d05e31f177ec6bc74e8486eae2441a04d9794792ed739c2893f31ad9ef7e10b02b75a1211b1ad415380cddea1c07f40d5ca27ec9087e81d5030e38e60985ed6ebc76cd4e84e45e8419b9fe088c5f4f09967c0f01d41af42c6cb73b86809a4e750d8ddddfaa7d3565e9db185aca2eac7bdac0d9f879b27702bb1b8c0e6e14fd3c8791d63fd06496d0663e00c8bc8bdbc92e5cf6a66f7f7facf4906831dafcb4edf20cd466f367de756a034db15a86430629a68bf2f98c47cab3e954d5ced0c81f3f6cadf2f4753444f26e714587b837c3e91e7f66c7997739019f1519c1cba83c7322dc2c59d2091b6fdd2c71a6f40ef3127aa18b499cee749084edb0f8e032c50ac345ceedcbc4185b5213232f3b8b3ad8ba604813a9bbd60e2458d85faa9337698c797639fe69f09e0a361f970c9bf7141b5f8125d85ea56ff8072e63fb966ae333800cab7e554a6f78f90cf8e91d5c52d513bd25a6a19ab91d1a0bb147f642cc79a10b034aa5ec1bd6cb969d164fa3e31ec0121f37128a1b19e4960fc494f12b1541d860702e4b612fb6d564ac69a9209151f40d0b22fc79310fec909d6e9b37f2d286c19f38f6357e233bf5b6e2de4cb8c17d7e77e486148b3a07a9b7ad662524a9cbaad877ea0304dc940744645ba6dac6349f107dead02df37b143bf3817c5f32023e779f1a895c48c7b7d7e8b4ad9fd04f1170ea4b911106abbf8ae44866f21ecaa4eaae0794d0144930a1f709ed152a7e764f93dd0ba227c6d9bcfaac35fd27787830483d1c8273d45fe3c744bb39aa63e6b1d0e98f25161d566aeaafbfc618d1abad01df1e61c77708b4a11b525d9157ec5c20a3961bf661f8fd3dc25a9703230a95af40cc5ab8908ec1db334a02b0986ece14dd16c2c41ab666455ae0c2c29529b99f412dc21ba4964c1255a840249098fada8e6d8f1d1bb25d8428e45993b028f31b9bb5c2b9eda174dbcbbd28a31a5380a6499bd580be90dfb1404da0916dd47bba9b682c351104c48ca85681488f45228849134c0b812beb0e912d222aa9c35ef557f0e01cf5ea3d1858a3dac58c0858d334840cc8057e692004669a3eeb8530b2472e29eaaedb683feba82775e951c8df505452a6e4c43d2a4341cf4c246d2c18a148c0fa161aaaa54772b4eb4c4aafc114abc2436f5002be7f5d6993afe117651c31034824743e8a3b9516e52956876044860d52a4ff297771596017255bba30d5310db65e61d0eed375d805018592d6b6a57d3cbb44e617c89398767a0c1a8c8671cc90619c0bb45583180b98f44bab102d51d107f04e42b03331263cf8c1bbf5c4ab99a5fb0a7c8e7b47c6212530d8742bd47c2552960408de6e0574392c0ce3eb8c700ca782729c82098915d72a691850ead19d92daf5c273ff87d76c740746236faf9cb01d2b166d6a26fe45e4805216617b7460300a7471fb360c48fa3b68c2b51f34babb1203f7f6fe98027ee407c82b5bba54f501f64e26fe3927c1e736fcf9527b54ff809ae172d13f31cf61ee39b52328e49d9249dbe932fddd7d0d0b9f004af22100180efd40b8f2a30bfaf804a3a5253e3809045ad4d6ca1eb641d300698c283e98105e3b3c35d7bac3c5c16bb707e19387804d73f59280eee3005b95971cf8531da0ede34a00a07c2166ae2871e14c050dec297f7dd7017dabbb042b8aac878c9c36c1c962bca5caeac5daf5c215100813b62cdd689829f975ccd2b70903259d31ec35de076cac66644ed8e2cdba42e24a297bb34cf853455684522f8a1684bee856f112f678284a19a98c72844dd70bab43f54d1148bd2330053be603c394b497e4d75baab7b6c0299cdfa2d5052a1d2c28fa2e87697978b0d0621364b4b2a13919c7f9007d8578c66e7a281b24f9e127de5528e0685bdedf5faf1bf12d22dabb7bf46ec60e619496dfe6bc1540048d3ef67bb3386ccca5be622d53ab9dcfeac68abd7fc459871b426c799945839eb1ce85ffd9d7ccf6d3b7a515072d94c2091671b996175e2278921f62c036e2c8eaf8590830bf6b022a92c4bb20690b94dc7e4e52b0906a778e2942c06c1175d4050ae6c93fd288e93c8c1d397c463b6fa048cb30058660112cad015102f140d32d005056442e1b6ea797e05d56666e053e1a713771654197ea402c459a8a4f2ec5863b1fd66b72d310a2e29abe1e7d0f65bcddf62a165db1a28e74035aa9b733e0a4e8949e8973ca80e426435909a57d738e44b926525ea60697900138f62934f9b4731c5eed49e2853609f01f6ac1e9c81af875588132db215ff8289a690c5400fa3d442f27eda1fe452d971b711fa3adb2525e86f90f95e835c6b80ab23351a21ff3be96d8840fca942ddd48eeb322a99ddbb26a7f276f6947824a24c05b479b68c2a6ee091a5c239be1fb59986195522e574fe205deb12bd6b668edcd546ae368ecc9fab7d532569917d45a0f369a8a10000aceecb6749d4d00e899ba9e97450f9994b2005163fa2e60d980798a8da54716e406bd8d1c4e7a3666a368884193b14938dcc067fa04c420bf954d58a1dbc155b599c916d37474854bf9b2bc333d14aa276d6a107145815676552440cae7899cd3b863a9c49f676c0f34027d4f703e1c2b60e4beab5b800087819ccc62385afa10c7c55a6d656df4ae78014383299fce61c681949c313a3b5e902a15a0d48f2c2534cd2573108e75dff36a98ac267d65d0e9d22ae1c3eb9e823231ae34c03fea6ff5e56e6d163937bec1dd06a6e260d515e2734f68d172f874cdfe2090515c4767e1f9fa734e594a2ae7291398e8cedca35411fcd6a6b1e8adcb0ab59d1eadb6913b73c7b596330bf6845b4bb1b0921da549ec9b79e3cb63d9977ca033e4892ff3bec020547874f71a1d1c53a20962d303251b7bee6ab9deb86719b1aa0b86864b6bb98e71eb39f9b257594d5b1361375adce55d6c36454eb1d13c5b1f64a6a8e1decff0596b178a18d8c849de31acf680646a0adf1b796f6774d850793c5f6dd03f597861efda0c0d4ede9822d232d13671c6399c70dc93c502be57ac63d79920755770692d8b3478e7ffcabb00934e9781c132a1446ac9f605a2bc9425f1d139d5868f2d572e51cab7e349c3a0b0db45fd630351d8116ff84a9a68410486063c43ee029619a38d141bfbf3b94990439109eb6a47021c7946c374c58282847ae326c534d6fda1360e419fe0930100ff0ab95909f9c4a69b41752eee525a96c4dff1740497a7e3d865fba2fd69e807b2493d286934c23c935f5c59b768a0941d372d5c88ef8cf5f20a2bfd67ce937e679f57d58bc8930c4cc5d712065e79e9f3234609fcb27866a6ed8021deab42d7b41027e4aea6462058e729c5f02a44149443daf27eb1ac4dc36529851141da9df05b0b64d6c39345eab9770c2d52fb8e1666342260b76759c66472f86fb3207b7ebcc0cad99adf5178ca08a7e7e8a0bee970b88b08aabf4c1d496f184c98819fcb56ae4127904fd93dd5a5eca23a070be4120d85b18640fc8465778570d04bf19bbd9d438ebcfd002752e7bc23998645b74c1191b702e040b410bacb0340f40824b1d6f81fd68ef6559b79f0efe6691363d6b19c6563f231597902730c08c7fa2b1ce61df402d3d7e8ac08c1e97535fc47f521abf0f531f722f95496f6dcba877b6307d81ac27a4488fdad563cedc2dd30628f674d2c8e482f20fc6396554d723334cb012b380884f58c9378f5bbf1eb2a116905f1424e168f5eb9a12f330578a154329b5549f9c83d698ce3ba0d6860fc0a169e3b701972d144b483277eae00aacdcf47691b8b405217a5aef7b31da52a0b877c383144004242720112c26025dd49cc0b0935de9ca1ced952d682a91bae8f1174a6608c41cbe2e69cde4cfebc01b6652d57d918e610e854cb7555b000b94acdf59d587cd46fbb9aaa508fde2757548b7ce681945c72d2df2a1d4d9323b74ca638145bf5bd1968733fb189eff0b8f6175b59127eb5b6327d123c1376faeae62bc83d2c5a400d2cdcad06c2657ded64d2be8051c526c0d84d219bfb74ec7c2708d4dbde40a8c91e11fc5ddbe6d24fb39de9ab6136c5a0100168082ee581bdf95700b34d7dc4bfd28888ea874019b8703a5a10e2e92942d1a2c1b4d1a9801d8accfbcb16508e0497cc72e7314d358989bfb81bc78b7b32aed9bf4d071b0dd516c958d2256437dfc650b142bee2eb397a755c4e788b73e3362836e5fadf03d2cc036b0906531532ad04b17277a8ca8f70a03c8160f183638b180af1f53eb47a31d4b05c46df4d1dc02b0e60526a727baa34d13d029fb836f7ba406644c296a7fcdde1dbed8c1605d9647f2fa4b2162cf75bc79a43f4365200b02100897b87a0a4a154b9c216b555922946f3fb97a3be95cdd0cb4e7f45646b15c58208025f2a3c7e2780085cbe3b89ce3031446c2c50c3d8e994f37a06c2c98b4bb7aeeb138736cfcbe3c909fa97e308fa0ef03f6b6cbbef5e7deef8409cabefc29df23c8ef7112651cc6606e523d1a3dba1e9bccf041df907990d9bfc594ef2cbe8ae130434c2d4e3da265005efa7d4e1531bd853ade429efed141c3a85f7747f83ba54850a99bb7872a5a04aa5b0cc321537501d26fd04355fe7a50b4a91f978948612a1b074520d9682cae70933e92c52f98464a93641a35c13785655bbb9330123a63928a469689dc7ee9a8b1c78a6594879bb0d69450a0876b037285727586442a6a512a746a76269141b0477113fc4353592bec6afc464656857966604c8908349ee1f7d08db14f37c673e3bded0489900ad62263ee46c56f4c2c028a8b493157e596c02cb1e36bd96501c150f6eae08e4cf6cfe81274c23f7e04c7c560083635df0c6c4c4081802f2b24fa9732531c4db6a48c633c141e487644e55044723a45aef4ecf74018d04adeb5f58f33b720460421bd362b81d142e51b63faf70ca339a6e2be0711b2e5d2dae1d78c8d61cc4ff8358b995f86d7b181cd7813d01e0bce2a3a86c6c52973ac5bc31513e7bdae622c890bc78e24a1ab11b3a3c94d946795c223d7116cdd795a4ef38ec8b8b70e218f45df337168531f49a29fee83e474a52e7dd0ffb704d5c314402116191a5e32f6a0128fcfc15b384676bbadb7fcf1ad7ebfe7323e1d1eff0c88a1364b483755b26db8683f0fcf782de4e88752436c240431c6fd3f5cb93864f224e80da3203a56829c9dfbafe83243e501040b91ea321ec5ad1fc7288d3e5b1e97a7ba21f12b87018635f1e8d7ffd49ee7557a08f5c8068cc201b5f0fa65b285fb08a1b202af5c2941abbfa60039d0738fbfa6476a21649547551e6e50d2be0a0cb8b16b0963e0280f4af12c1954db2b6f536cb762cf4f559df4feb89508c648bb42efd0ed11e041e684ea407e876e6cb15615592589d739dfad5cdc79585611180ff71972d3db723c05c69180353bc6b4ffb5218f803717ece0ce67437e1b2783965072d3872e92fd001c36ba739c0cd3a05911eda30422424b7485956a396a0a2182f608583fea91c63da3f74c60c6931a62e4b670718172f990bcc7c1729e355be8420e86b80f9fe1dfc0f44a56ce079837047a3f57ba6139c8ac44b6dfeeac81481c8a5e0478c619cf948394c9712c3f0d5ec3de17cb6e6449aa2dbf491a920289a21e43c3901f9372cf89cceb9e871525fff02e643ca55873eaa7a8463b0e7d5b6c90839b9c9f4db9385ce3bb9474d85e72e591d527ec5220ad8dbd1212a33a8f3f533c29104a13a180dbdda185ea29fd46f4130832354798956123ffa816ee74d5cc10d3240e0e0fe68366c0b99bd0cde17d7d40d55b80b855d63e5f50b085cd7f5f7f5f79ebe1e6b2e73c04a9f24c058328df4588103d9d931ae287aa8a024b46a39fa838e4a208827222b73d58316d7acbe0061d7ad318a9d215fc3dc082f5547dedb90543f215729dc75ab2228496049780d45f5a40d020c4c82e7c85321aa96500e0d65f25f5e608a96745ffeb8ec54006d4aecc6ed2d2a88a1398b975c70b6d17e51ed8eb5a6b2df10342bdd033208431bda8a60e100e39aeff2f7bfd0bbb6a537474dd27805455c89666afb345cdd49790a2481ceab38f1d2d175c208d6393b64b850868701516ddf7a9382908c120f4e2c6794a7d4e67df699be8629002f28cd53fe632625e5427538bbacf02010bef2d30f8d0cabcdc5af54aca4a2e35689b39d71fb48251d161764281461c8ae018e3c2dd577788b0f2577fde3358c723c94ba1656232492cf3953bc6fbb178e5ab991027b5ad5ecb104640dd9d5967e5c851b54a33a6fe1fc3c7f22ee9ae5aed9b08706f84a8b0423ff3fdaf4356c605b1728fd2bf5fe6686c1b4a48adf5a8808244fe3714ac0d59c002047b24533f124c6becc0175da9ea40660562a428147db840e3d962bc10a980d4e9fc99731c9d9280743225c271cb7df5af167bb78a762ba53eaf1eb3579f0d0a26dfbc97f304a1dd7b18046a2331f52a5d83dd8ed87c5d209fac31d77b547326a9c45085d605823f4d11ecc2f987783431b3d874decf705cad333f85f38172d8fec90b7e05d6125b45c22bbf0284aa5baa91fa1522d901db46287561d55c42659b9df28ff538f9fa4ba45495869a987b771b9441c95b5cdb8cd94ec7200f71393b78a120f039737e1c09fc65fb1b4aebf9b9e5ee7fdd4f7a8c498949cf485e657de75bcd4f1dbbdadc31989d63af007f05aba858f2fcd2dea0f1aad903a9cdfc1e5bda1c2a9a0bcdf33f347c0684ecf2234f65a0ee8997bc07801a66fecd2d43fcea17ea39b3aca48db3ba6465840102d54423c927d640377a34a6cd2b596360f6aa20b71c6e6b5d664cd1178d904898a29a402d2f6154266021a005b4028d24d07494a3ef36a232fcab801802d4805c90116c863b3767b2c9865a819a111a42bf3384e7a450f243418b1526962d514550832b18d0a6fe472e75e4017a39b816e98f465fb62a4227cc1c2350a9a0061c24ba0af1d857b109373c54fd24f2b3670f731fc809f585784c9adaddf459cd6d4a1845b9dc09a1a60292b89e8532efb86f8937327c3112a263e20845898ce10e2b80a8b60a6aa1fe9e658d6441ebeab1a8246197138cb39e33da7fd7f8d7afb982ab186829aaca63b01f719aa595d3dbe4e12d54c1a1c89e48675a3f6c58aade858419d018390fc554ac021bb0a9c660f52cdfc4ab39834d194e8aff1416ea1349a6303af58b683e4d9a682283a341f65a4a1eda4b7a83e102ffb514690bc3f4562d8c004e3f3a1a5c74eecaff2132330b9cfd7b215d0a08cf771e18665a10fd0f52b9e4d90959c804d7a8793628fc434bf6934568e22cfbd057663e2c9f70f9611c88c3b20293fbc567e5644acc0bc876cfc90705444955fe8a6b6dd712ece12288599526a11dc64ca861d44e257e887a615e1614f464d142ffd5afc231692b9b8556327e0b307e2f373e2ffe58de9f5f1528b9d5408f69d04893b798686cd768d431678f4d4ea48169931b51d869252fc503e2375df3dd4ddf4d01c1f99f8452e1b09e03ee55c79d16386f6ebd32f3aa70721f195e50c29f71d69d09da6de316e9be08015a063a0842b94b10704bab99d8e55b1937d374c6ca01a85205d559d9d0e882b31f56b952632b6b7daaefa4ebb498ec1a33ba60741bcb8548dfbcb7341337ad124fe16e128d6034ac2d0df1a32ed43f823ed0fe992d9b26ecc844ee23bb07b505f084f55f968a4ca718b5f5e1922eb71508963a5366fcac67296f421c9fd7ea0e85fe490be48331a4871fb2ae558ff44d485e1b49549ae847759fa8c1162c5d47008f926d06b2b83b80fbdf56902e115e4129c12cd52a41b56a5248655eac1c63b3869862a4676b2792febd25fc31ac4f5582f87cc8d278088cf154f2e2388dde9ec0a920b4c326b7749c63c9c5a12122b40ccdb1334a79dde61fc901000c33dded256a8605ac5c00e6241628ee60c99b04cc2a199e0c65cda87995f8406452cf47e3481d98055ad9b77fb996ed1de1458110ee7601e261216222724d8fdddac7cf1ecded3d1adfb7ece4048fc9393bf814c8c7f38910cbf0386e51b0f0904f8dfa44e39b5e7f48fcbfb181e62c08a801ffa2ca1a5af7bac5e87f3da06ef521630cb0cfdf7334b91e76c113eb95c400d66de5bc49fa842468212b051417a4d1f42d35c8d5228a3e683bed30614f1e1596f34b6c10a02ced489de54fe5032d1db18a32e3e19eb2267479dc7192aeb58b86cfa77cb6987db879f843013037ff0a656ba3f6f083ccf3b12bb509cee18a625e022ff7558ce8b7a3d024c46fd7e7ac095a17da2027e40920bc27fe301816aa7eb519026f83fe6377a3fabf6527e56bf4c17c5e32dcef7fd0dbf4c2b7e3b8ccd0afaee953da32077b4a16ef9a7c9dcac5a2d696e3d041756fa1f0dc84ff726021bb39df0fa1d1b0248a6ada6ed4e0e5dc487c945beb80283e4865799737ceca4d0e181b536579086ac38ef9e2390e02f3c1fdc662d8236183a2eab97d12095cb628bbaf1578e509b4a73495de6ee8d7811edfc7e88439c2096b634808950a101e4bd510818b425994c0c50201a1d5e400e0bf110fcdd7897f654b21ee72de8b5dcd11519820cc76aeeafa0b34948c007d39ff7ad4f338f8964364dc7cec63143b4a671f06e037c90031aa9ce885d40d4554d1b9dfd3270dfa5fc0e217b0171daddc2f3ef0d7d37045beaeced93832f4e0cd7d82686ab8f6be6c1df2249e8de237c7b763e603b06f3014d841cb0521f557efa2ee9f85bf735a84714c565ebefebdfd6ec924d24b2bbbb7b07ec0869082f08b5c66ac413bcd65a6bb5422f800add5b6eb47c4a6684bbf0279331910df1ae4210feae67dc155aa4f6f971f0d77069707a78e1851d7a470b97ffc28ecbb5e7f08634776bdbeef862d0979c461ab9df8bc16d9c1a9e66e519609bb8ddbf5f0af1eb3ee1a5e2e70de3cdc4e752e031fe7dfafdef5db9f3c580786b3497c6d2e0cbe15d69b0c6e14d69f0c6e13d6930e6f0963498b3dc467a35efbb35c7f7e62d69f0c6e51d6930862fe2499a24953813b38c2f4f52de1b0d877326e112d6f0453df186792d6d5643e1375e170441a408208048203b4206b22378901db1c39fec089c234680e48a8be485c40a19922964488a6e2093f5c864b012c86436c8642358821156144166c413322386f89319614466c40f6446f8c88ce89119b1020e7fda17812062448f031891030f23486083206d8d70801f5d221ad27509247094a0e4defba4889f21dac49fac881afca061308422788a50010d973f591145cc29e07b0fa59412764ff62862079756040d3af748136cb04790e0920207dabad1048fd9f24a78b46ebc9f06dce081ec4810ce8d964f1d21c2bb0a2dd08ef4a0067980233770454e85d32a478ed0807747663083b602a7f2722408bcbff8b9e148cf0cf2080b781c29c1eb088f1a82665c094147f6464e1cb9496da69c928b292dad7df15e782989b6225743d7e02a47730d176013969005df311ff2bb1db0c267ae61ffe61a1462344d6a93445fcb3528702b2b0cb72db8cc36b8bb6f9c892a977613f530888171f1826ae1d2c2725ab140a4a09874899439bc69b6d229c512f9b709290421349c5840115990104148295b6813300848fe9505fd200bfa81d71eb88810ce1ba8442d61062f57901f34a1c374028a263e84600426e0304133e79c530ee173ce39e79c72ce39e79c73de54d08f2014e8a02159908b882756f02723828877cd9f1219114132228cf0272342888c881cc88800e24346c44b46c4cd11ac43cc64121c11b648104aa45fd91042644300910dd1c39f6c08986c081dd9103328a10a9910444ac8844022138248106442f8f4c884e09109f19209e1920981f3a2a36ef8fcb76d48f3685a3a3a3e4cf9c941f74b5d6f86f653db33a675aa038f9b0e293f2fc69c2aaf1763ba7497199f2eb3d922f6624cf9bd458ccfd7c1e5f566d49ff3bbca8caf5c95199f6f4b2f3e2b45dd0405f1482389267d7e51ce59ba93d6a46e846fce523763cac67b29d34bbd7f9583b9e6c554ea7de94bfac598cfe51afbc598bf5f8c99238043030db9065faee61a73c358d3368db359022bc899f978cbf3b77fb9f41873304ba0f498e3f204b852c9f4a5df72cdc64d1d3695ee8b71f3bfac25a01f672ee6cf790257ceccbf8f257cf19274e9f5e35cb3f152b7a1e8d772cd76ed46323d4af7bad2435eea7a07b8ee5ee92f2f913a1a423a478ebda56bbbafe002cca2db4c70c381cc8815fcc98a3ce15dc7644586701d5bb212b3b1c2e7ef1212ddb7574c65f666cc97f1a98ef1aedfebc590dfe9ebc5e56b21ba00b388b3bbcd1ecf8277ea7a31e4e7a03dc7ece8cde3b179030d213dff29d1f5697d4f370d212d1fda78b00759911f3c1c3e0765457c70f82f0a61c81043860002880430082245b4602d14c8d80296403f59921fde391ebf06da05181631c20300f893010184084736aed9101a6e980cd1841b05f8a08aa3285c468c80c80fad06dc78000d221c3cb9018f31deadd5801b0f0042063300e206206e6ef09cd467038635102162079717472d4036b454a151721089bc6087d30284e8c99f8c080b88ec90a34284869423bc50a0d0312591a38fdc5002e241b2418f1cc40a4ec005818309301625d8a0388106840450911200fdc003a827054028d0018826f000c413302094e47004c411179123cec29fac080d456e7857a185116834c10581650a1f84702428073a43f1df8d4d8e7083273841a630a28426aaa002919432222184048d221c11638442348a4084191f007f3222c4b06d41bf2569ac761d86204e3fc64363570c29d19822888c083cb221c8644370b594e06f4ff8f62c459c6c8810977f9f086172dc93bac62e6fc22ed80443104adb8059705cd36108e2a5ef3004c110a4b18b097fc9e57197c3456f1d34c6b72fb99c682c25a7e49c493893527226e19c4ba552a944630a4dd33419115eb22110699a065f930d01e21a6973269af4a6cd9968a9691acc36b8d735f93b8dc5682c28c61d01a50b34e6caa417509e8dc3f4457b7a5ed487bee0a9680fb8dd437d680f9eeabdba75efc5d05e3e9d97fe6871ced0555a5e34ab75b5bb9c13fdb8eca8b5f787951ac4a34ad76db84accf45d02d91103d48bdc81f92e7362be4b1cc8d2e2bb0038ec18d03aed5741ca38a1933e72a6f3018a0c782a59e4c674fdc2745dbbe87a0b7fe9faa3ba9eda5bfe964cf8c4a89241459e4a4a9f5db934e2a94e1f5f2679aa24dee9f42814b41075a2fcc9d39e5c0649284f5b721974da91cba078da90cb248f899780f708d0f52c2e20e5df4b00cae34a42fdb67c3f0ab7d82befb25756dee559583e3fc086afb0ac74187237eed52d0f480bda52b6a590cbae3c51e8d36fafc2694481df65a74498cb462972d92697ad398d2874e95d7689d38842eb77d9244e238a2096bf9ca5eb1ce02c9f79cb3e753d3ee12bbb4b959db2bb24924ff0f8a6dd5f1282666cee4e5ff48727e8870e19cb352697d901b106414c706b104c2c1961a5c5ec452987680dc818cf61bfbed51efb88291e08bb0df662dc5dffdea7db46fdfb24d2735145bb0da721e8e1340430e0b4c39b151af2522bd21f79afd6b2a5c57e8fa126ae0686ebcef4e4c5889ff5c7870fe0f7610c41fc7edf603527ae6f94361e3c6f9b8128147596776aeaa36c3f85de0cf8dbbf2878fc37e3d6d8567e7812dee9cf8b6245c92906859491837833f18ffc28e1312fe1f18b98e0f17619e8a5fb06335da184c77c8af1083bd3131d7447094af1bec1f22baaee472ce20c7d9c9ba3775a7c40f98353209c7edea1dfb7dbc527312563f45fb6d162867bc04f86ce3ffcf25210ca96b26ddbb66d5b1234e43a775d735d6fc15dff1414f903b96eebf4861c4208650e2962116568199f74ef47ca90377772939dfc180bd75efec81ff9237fe48ffce9f2e709ef1c8f7dad2bc162aa06bad7231e1ebf1ebd195a0d7887f0c9bb5f80bcd7a352edb8a0ed2806924a6edf5eb956393bb37341e69af3bfdcc29be87af3f6b5e7b01d35cd296594aca9eb96d4e58ec3d6767deb764cae75dd66a5a3c25d12c4b97a4108e193f049f8247c123e3e770efe765ff98077f5da56af7beffddbdd375d94fdb28b974a3d77efea9dbbba717d6d93f2573a2b9d95ce4ae7458ad5f5c40f2658c4f71e7e9b49130e833f1993214c827003f0276372c35f67dfd3f7543e7dd6ce7bcaedcee1420cdcfee3d4761d72da77c4d7278f9d05e3f26bae616bd87ff9d99734c6ebd67126da763a6cd82e87d649296f7dcbfd949d4a6c3aa99505949f05c3f5b186eb531f089fba288a52fa2cfa38d7a0d53ecc2e6d1bf52e767c1a9332debbb0aca448d35621ed7a4c2a6fdbb6e5e05eccb6e5bcc57439f2733195c23c8561c152bed31e4e690b5828a574cbcf7d870ee06a878af9f8366f33d2eb47f9171afbc699e8ceea2c188f8fda39dba84f6b6cd1727a7915fab6ebb038dba89f83dbeaebd70b8a2645ab01511e5379cc7e3c539a37a5d42606d68bb543bfb27ef06e512f03a71b64b176583e78b775eb72d047e587df77c47e7be4a8afbbb360dc12d103d4025ee90f0fb1fa94c793412bccd70e451f45dfb680a2947e0cca3e6b07a64051bfbd85d9a577b1f3a3f6e32f5b6fd68bc6a48c6dc6d2d1d8a95be9684ca54ba131fab7bee4ccfcde12835d7cbe49db28fb8f6f34c6513a93a943d9cfff9232a8909c997f35157a09f518def5ab6357e54cb40e1ae3f9bb0e4a5df97390ba9e9f0a491994c79b813d4968c1110f1c7ea7457c521d38fcaeeba05dfbf099b9c7cf7ab17a401666c1f8b596d503b222d641ebd5eeedeee4b676ac1e3005baf2d3a20543664f9a08c255e04fd6040e9f1531a144cf0fbf471c01fcc9887cb88cc8257362262382ad5efc721e5e1fe7fc99e5f4902ee1317e8baeeba05d8799cb364a7f1fbfff56ae95ceea155537ee996b5ca85f659bde6efd7897229428b074f484eec5bfcad911b5fb6fa5ddd76c4a0b2a2b9d94ab3de9aea8743d72d2afac5edcce0ee3be634208490f21046e87224100beed3a0bf0eddb87d15aabe39772b6b1f2965b89f6f547bd1223be5b2ff1706fb7a2a35efd9048d63e7e58729adbc42003bc5d042b1fbcebdf117394225cb9563990053fae7678d7b7851e7969f5e27d477c8dbbbe7a71fd1743dce5b05ffa8bf555f9db5dfbfddac7fa71e4acb54f2ae9550e4cc17ed51b9a5eee935eb9361d78f05a2dcac36c03869778d87440e1368a84527a1448825f22a1fcf624940ea5bd7edb4b3cf0dab7225e77ee3af2b3ecd37e52937eeafa26adbbfba5fa2b9dfba4cfbf72ad7420ebf1fc32d7c8ab17ad5c5be94056875cca90126bdf77ccbe63eaa02eae69570775d93bb976bb950e4cc1762a3c3ab6fc906f42195b44d0315e1863d4e08d56563aab6c1141c78f7dc629e18daa3e5f76bdbe8d72cac97b4b069a76574aca29c532dc02d27d76cd4d253ca6c09b1703de4008e19c70c299922a4ff880a30c42b80c3f73faf0770383e0401f2ce08fb5d6eeb0d45a6b6d9cb4da99c3cd6aaf5685ccab6df86e98cb1b97e7e4707824e19064d06584cfd7f3c9a26cbe148a3e22103e9fbed90b7a71f462be4cc126f3e10f9f1f77c80f4021d0c8061ac0636cc00d984323d0823b3cbe84f138f49ad8f0749b178f0fa394735218a59c93d23a69add6deabd9ab69db8631b77135575229d75289ab5a73d564e22aca9cbbab3057e6ee02387193859ab8babb0c44bcee14a203f0f92a45757701f0f92b2b5cdd3d017cfe4986231ead8d32cc5ed7618cc757e187f95a45e7d27031116302064cf828c25aeb2384eb53c4b2c0f2400619ee80091c82a850c211ae58c268092782a065bceb1b5d872082c3c40cbca76a9053d67b2f124d03239688c1122eb0610921f36708c9b342153a08c9d3528556d13b182279768075cb9382091f3da8a2a7871e57001142921b244a9a5042637770026e77c0c3c760852a745c628725784c815f8caf25ca486bad4f2801042572e04409204af028618223256a584092a1274243530c112921a4c49112454a502cc815400927849d7e534ab9d275172e3b095f42d882aa416d8e62a153d97500706b6f0c130628f0f85535359c19e863bb67d800aedc8daa14321480b5d64a4a274591e4dffd68e04e71fb2202e0cfcdc91909858ecfa9600c70d95d15e40f3ca3ea85969732b0b43c3faeb507f918728f06cf2d65e0b57e7daac2fb999be3dcc6d930c4e9a1e6dd43edc16affc28ecbdf4b61470b0b8793430ef394f04949b2df8ab35e6eee8d73fbd164ce444b140b3fe18b2dfbc5985be3735f2ef186350d76737b43ae66ab46ea32aca0b9b9a78caa6c512ed420b75def00af1de66f7368d52be594d55abb04ad7d3084040d1c868ab85ab7fc5011234d2e2088ee578bff2d7246caf9f244b1202940a4372ab54704bf88638c24cd668ee18b29d28d292ac4d00c3ac048e268079924a2b0c15a6badb5347248220997325a43763821073a1d901b364fcea380474c1239dc0093840d35b8b842e7a50838a090d86901c40e2e12891ee4b420d1830e0b122b7821c103123928c9428913254b9420515244c90f4a80284181121a849020b44448263404212142303881900a72844890c428891249900cfd180a92242845a4a77874a2456d9491d65aa748d26343121624e9c16badb5d62649729048723343153f38e2091a3847082971841045470c9936890e9cc08d43ca218c33f7c59081866fc3319450ca4e6f3a1f04f44d7cce7f3cf29951af8b00ed38e4400caf2d786de195e5b4008e356d53717af74a871a7f91bf15e40ce6b07238399428702c63844f6ea4f85d843000fccaf0fb82df8ce3fdd0cc6e9fd03d221c6329238410c2873752fcf703b7b966bbd70598059721dac86867405274841024482031826408487c80c4064862808407090fde5b6ed02490350149132d2fffa275a3013125bb010e9aac0787bb032d1b410d7509d40a5e6badb5d65a6badb5d6bf3d0eed371cda6fbf7531689d0d0dad42cf97ff125391df687ea37baa023aa26a7e9c1f810b3c9e8aaa490f300510558fd77fff96bc787c491f05e571a7674168ee63febf9b5c2b3e269729c7f432ed6c3d52c6c35bcfc73c6c5179f8304854ad3c647908218750cfa28a28aa5c7493a882f9e88376bd192d5f5d3c3ee9b1101e8aaa958f8f6711134515cbc7ad87fa6072b93ee66d68523a9404fe631ec77f4c17430f291f43cc7f97d2e1d8ffff5d0cffbbb3a1815ddf3171ca3ebdcb5679d8826f7a78c7422e2ca4676f469194f1df2f2f95dec577c9b58bae438ef21a0b995c760a961ccc4ef9975b3ccc82bb78eca21bd21dc6b88b37c1ed6277f82ea87f7968c35fb60eeae228976fc9167bc6948bfd8e6f78fc963d8578f8fd8e850e1053f14f5b0501c4547c95aeb77094ff7ddf0ccac76c14f9a616bd443fd1592812f1d84d2e938bc7a884bbf7e4226e308cb2115fc67f8f826fc35fc781d8d5b8e86a5c442a4ab319a5e2e8a852717464a9a0828a4b85d5a8d8a8d0f05f8c102aa1e5a4e5a4e5a4e5a4e5a475d43a6a1da9fc70d882dba0fbe69a97bea48cd70b06e3e1910f4b2945251f0e493e2f067c1a322dbff7cdc5217571951f290577e9528fbcf5238d3a70e32105bd19b3d4d3c3a54c119269f89df2947a26d08b3163ea51bab98cc5214451545454a3b5448a181428386fdb3671bf710072fddb93bad612bd3dc9c46ddceb6ddbfad6b596c010c4b97ffa2bf7a66eeb72e48c31c6186b8cb1c6188a1aad25b1d692d6120e06531899c2070fccda22d87c5b9f16c182607104464646464646464646464646464646464646464646464646464646464646464646464646319e16139e29729afc48618509a5047f23e2dbb3c864520c3122e2f2afd11097cfa964182ce75c042bea30141515655886c16028282693c9d462d2048b26415204211549ee493018ac450483c18a603c4b5888afe7951e88e130bec7f1e4cccf5c432b7d9fc5b4115fbebce122c6186394524a29e79c734e4a29a5b5d66aadbdb789561351ca5c53b3d9d062a2b504fc526b7674045b5899cd62942f29a5ac734e7a7444e9acb2bfa0a0d6ac35d3f09fc642944fbb4859a83246d9cd58b44978511549dccef12594dac69cb7b46d3c5e7a9a6f3c5ea23c78b6114bfb4d4f43caa37ccd2809a8bce971a874f94d8f23a5b3b986ad5fd22e9e4b5d6b48e7ae730fb77ff9730dad919cbedd3510e5c583cb9761dae42895009b716adfe9cbb57aad5ef7eea07395b3d2f1d94268cc0524b4d211825b1013f07bd1318d45159c7176ef032c584c59166cd639699ddf62f68f4ff764f58074c3af13c216685047655c7e2b898edf5564c4b0811a9e86d5031a00be7c958ec29f73569a44ef8b7b82609dfaa02e2983f4b0e50a01f18e562942771ad346748efb145bcd47c8cf10a0558eb672fda03d407ef444d506e44d2ac4a4ab9da0d80f2051758dc462417c84fc6c2b9d988f915810212b9d55ceb6726d2b1ded4979dabfb7ebd0d5b2d2a1415bd47ec0ef058d05e1d087c38e33d1587bdcbd298780d8c2eeb68ee84e835eab88cea13dc576e330855cd76d5ec61d6b07a60037d6cb01936b5d4bd28e0ea1401bd3214051458d44557c930ef1f8a4d40787df2242d787748891a892df2aa2217cfb7428aab419258aaaa2a8ba2f7987bcb37ac014ba6ee3840f4e85a2aad326322776b87c2aa3435c3eccac1e30858eb56323a7b073a0059df4c88a5a394a394efeca9573a692d25a29ac1052aab37a51c94108394829a590e3385af29133f649f93b8d01b7f65566dcd2a7dcd26ea51355af1255b0b3d5662e44d3ef5bac0686cf9f374342c17b2988ed31144170fb925248df722f370c7fd906f774f66654de443f28b8fc1bdb6235302fb7b6cd98fd4b611c3ef731fccd88e176c27db998b2a51f6e7f9b41e0d6f6a8cc8200e743d8d3d2026beb8d9ca16ff1db0e42f8479c9e7c44d5d33fc1a2ea4f3f20fd134f54f544d56987b27a0c71fa3c07dd29c6315ba1c442f546cad03339439f96ea0da7a6dac3e9ebee81f4ec96f48ca46759cf669c76938bd3c71b057b31e8e3d8f634668b71dab110a7cf79d0f4513c70fa5a3fbdf807c169bdf92ca494524e1289d4829ef5eb4a67e55ae5c82757392bd74a67f55ae948b972c9954e4c8c43232b3951b5e28aaa5fd9892adbddacbca20a1655bf8203573a93eb68ae03ffe58d0a0c94b7bd220aaeeb4f0c0f77050c50500b979c8178fbbe51e1127b31e00a06e2f0390a6e38ec313d2d5e2e3eb480c104c161d1eab5d289897111fb70c4e5e356119da33ee5f27da2f0c171e4606681724bbbb4012184b385c9d1396b58db8305cb3568ad33aae09c733ecc7ae59aca3720ee032dbfd31f2ebb1f3c77c7ea0153986f6be782dc8e86f22a2753fab9723967ee92eedd9ee372cedc73f439ee7b87dc46ff5e99f175ad74563a2b1d9ea35d01b7454aa9fc9da3db9f96d2483fdaaa6dbfe518b7c8fa9103ff23ddfbac9dcd0549c2f86fcc376f5572f13e77b78f9b76bb0e9f571f26a731c66fc398dafb18ae5eab57b6a5c7586bac35d61a6b89ed638c4bf84b566bacfb8ec97794fe4a19295feafa0e8d65c915e35a7d4c75f5e1b8eb3a6ee6f04a67a5b3d2a12f52b44ea2c8e128f0272b9a150571a8c39f0c8a9f927c54fc3773ce99f6edebcbb0e54ce17d58f3ed936badc8eaf1f931d673e699f57ba639f3eb67ede45634ed2e03cf015b20bdfd567cdbe9ac95dea6d352777fdaa74fca9cd6a948560f98824aedb86967d062b42c58fcf7aa7c55be2a593bd6b27e441ba3b5d1da686db4ac1f31c6c87a45960ffba2b5b6e2afdf75c4ae43dc6996d54385ab4650c4ac7d29abb48fa58482e789274f14f102f0277b228894f2b3fc2c3fcb5c7f6616a40b92e7aec31a1b7ee77cfb3ecb1c1a106412aad829c1cab572ad5eac979cf265395f525abfd62925ab47544939a59c3b5a0e1f15e221fd4a87447afdb4a298b45c353bb30dfbf8b1dd603b7bf321297595e093f6cdf0396da523ff692b9ca3b7d56ba563ada6759d56fa28dbb45bc0f6e14fb8d2e1a9525801b92556701d7f9ea48f1bab07e438db60bd583d6adc8a36a29892bf35f9b71171d9698c838f7767f960e51a51c57a450d077dbb1755b405cc63dc70ba20b3c882c7a72d3939131d29fda31c1b95bbc082bd17f36244daa344f79859cc9bf1a40c1d23ed62e544b887ed31c6db9e3ea54d49184688379a2d4a578cd37f90db6e628a7e2b08ddb79e970f4ee96f2f49b7ae6f389cbe387d1a08efb641be6ddbcd86b3b966cf9bb13d9d4f38fd497f62416f284e54697bdb3e6f758bbf09f17971de353c4d0fb8d6522c07f7df8bae372122ba1759b115c96d2be2f1c1ddc37ab17a6c3ebc4d681bda66f083d041d8810ab63e9ddfd53c75bddd1827a62276e11c7c13534a68f812de0883c7273c72b1caf342a2e73f1f213f43808c04c984866644454d8eac788205abc70bd692e9d90324aa62373e3a04f5f1a991a8d282843a1b8fcf8a6893379fa669f0d6f91e765b776fa40a9c08e29b3f991340b66ef58aa909730dfb62489b1612badb20b6da37e3711cf771dbdede7f5cdb3aa86bd29fc8e4bea8c4544beb08dd5f74ccde8c18f8e29cd09212c1e3c7cbc94ec7143f81eeffffff4f83a409708cd583b5c37ab15e2cd80830754529a59434cba3a21e995998724e2925a471d35fb92895f265c7c5f86a8f91cf911010ba0e4ae5cbcd7abd94314ad96d248cff5305474fa870ed98ab9c950be3d5cb891027334080131f2f2eb43051309aadcf5d5a08c67e2818cd76d15aa86933d780792c730d6b6d6b48ef7b511c6a1ff7dc7d035c9b35b40c6b15384e8c5c3b2fcf6107d13b82455105e3e330c2d8c987a61997cf71d05c9461129226219ea35d52abad2c74af375a0b8ff163bd89aa8ae3ca79ed4415acfaa83c5185821da7bdfcf82f1ad0c2b96720a6e4ef8829f9dca5df13f91253b2a5097a6846d4c47464b2c2f424aa50b57bf60508dcef51c5021d8c97f95e6fb6d89b11f3f5a6e244d5092fbfba6a0ebc312c7f827cf13286e54fe05ca69b7ac30261c078199997e96290897bffdd1ff33acd624a96585c2a8ff26171b1e4b0bc5876744fd73d16b88084d005dc30e6e13fec1ec27b9a45557fb3135154dd5393a802c04b1f4eae37c3c59bde241455312fdf341455fff24db3a8da2fdf441455dd4bdd837d6071b9e2cbc41863ccc7bd5ddcf47029c4e2b200b01206e6022db80d9afe69762a923260b49c5c585c9ec5247461601e5beec58eff32ccad355617f35bd1864f17f70231256f6701998d829ffa9987b15130054309d73e465b816bbf5331a5fd095bfbbdb5efb6f633fbca19ed531bc696d9f77616882969bae1f25dec2df662c8dcc9dfbbfeae3831253f66d79b98920f3b0c636399ad65935012bad79b16afe51a2d505d73140a651292324c320a3d0cccbbd8dd86bb789c6bb89873da5a63fe6568c3610ccc4798bfbb6f80c3a4bc8b8df2766fb9468af62fbb5398ab85cbee94470bcbc924a4555850b49010974fdafd44c4e5e7dd35b7d56edadbc9b74006e4cbb43921bec8e2e177b92f3d0df9492f821ee28b80fbd2dbfc241cf9495de41c803cfe8c9bdfa0391adb2fa6e8d77aeffd6ddbe2b6d2a134462438c9e14f56841737007fb229867849453f7921e10cf8bde8bb7337e28ce9b90e07e051f87e9aad3cea75fad3ec44742a3a3581280420be00709a4118320fe371c83c8c00bc8c0c0a2f5377f7767fe400204d3198b23253310931f99882986211c009c0a3f098f3a84f01999f790ac0f894087ac081c2a75e0401e850f2675ee6673ea2d0a16487aa9d04665ee671ccc83c8ecf4f8ab906a9eebeedd690ae7677189ee8b7e151e7afdbce988add8605a15b5ee6617c37c556662a6f8a998274fa86e527cbdfdc78c094f9a8bbef3006839cf031c60ddb3ea2caee1f51f5c2e5ffe7cdd03fffe7efef4ef879c383e31997791b9a08e3651e078c979179181d8ed4c378185d0c303ed5d9d0c4ffba3bad85f40dcfe641bdfc8b8cb52fb294f52d29461bbeb564b6b6bb115373e5bb1642bd5e8c793a3539ed7d228aa9f9bf4f331e3b54d18b311fc6461dc999f9321be61afc068df2a8a23723fe7cd491940143e663bec54d69092f351fe6df7cfcefa9e893989aef82c7e7e6c390d94f42ba84220ebe14f793fb92f631fd34eb92bbe83ae5c1fb6936795e76a73c50bb531ede5f5e5dbbec3e7d6861d97dfbe0f34f27959d12e3ba0eca73882f1588a9f9e223aa62ec248e987a79bda2aaf2c4a24afecb0eccc7cb8f979e17205155bb07dc889433c5f20b76fb93cf8bd1398ee354b60a3538fa051b5b9421f330beeb0b6373714666bf38c373d01dcf287c796dd89b51b74cfaf764e87f4f8629668ac5d75da9eb5777cd39536cebac29c6039f8f6bb76124d01dcff87c4b54d4041f4595ed6c3c6e057e125558703751858aff54a029c65d7ac3e40c8a05f9bd02a7199f9b87cfffe123d0ddf4f28a4555fd098aaa6d7353101f21a621516502321989aadacdfa0204e4f7d8c17ee90bacb13c762faf24e83efb8bbc11461927a93eb6f33d0827a9cef83768e6d0fea9365d7c11c566515e85fb9eda17cbffb9403ae86d425c7e4dc6db8c789bb1ce6d7a3c390de6a727bd5ccc36f25f9bf23854baed71a0fc93331bc65ddc9dba5a433a3eb775189e70f8a67f1942536c035c9736e9391a7b136f3342bccd08237ed8722fc7486349680825677913daf27ce69acae3cc1ab7b759297243780e3d74d73cc67f9be328d7d1cf67d05d739596dad9789c3eaec2013a673bb9b94aa774e167c4729d07544007053210011c16b800af41db8ed3a0e17dba1a41cf97f5b7b7a1b9b54349400ba1d9a8c42d75a639ea14910c000014a315000030140c89c322a1501405829aeb1d14800b839a4a6450988a034a90842888318c184214020000400c109999a9a1420008040026604c40cc00cc81980098033001300163026206600ec404c01c800900d39ad962ddcf6fa366e7cb9f4600de1cd0148c29802980790073105330e600a6604c014c01cc03985f103023f54977fbde90d80cb223a95a02654065804a804a80940195002f012a012a0754065c02bc0ca8047809502281c00c3c6128526296ef8925346130334013e026802680e614003447c7072ff1a53b4f0270a3890011961fb0e845485018f031abfad970e13309a609304d904f5829e059e8540efda3351ddd04dfb5efa40dc5252e2b60dede6f502acfa2a2b36da04494c87d6e7cfa9bc37ff32d1f63c4d10d9f167bd8d9ed59944a53fa58eefcf7c1d72bf9000ecd48e6ef3969a7ccfdcb89537d79f21a937fbbd66738dfaa07bf0a90d5a35e5b6f991268b56b5273e5937f43eb6d4025755674a066d11503bec58c1396c9f793fe73de6d107e047fb3769be0ecfb6149411304d602ab1ff36ee968cbd37cee25046b5562dc3482c025c4329abe901d211f03afa0a41aa796245a32a991aa269ac1d3c6d58c0361fa6602df8d6281ab6b863992e05e840ae5497996ea6e698c1b145c9d21a87171adcfffcfc9272dc537168a770303d7f1086d86a7a4719718db0caefc97a9f7244a632d575c07f94d1db9b415d9a6a9e2ac4ff472519ca9f4ea63eb157e20c6082e42d1354c5d4075cda21f246aa92204506568332de3ee640a0122aaeb690c52d97ba6cc5fe5e67be1df59b21e56018c03394022f3eb9ecd82280a40fcbcf456a615cef2c026f59038283348df8b70b47ad3a403bf85aedfa13a6b6f6ab9a08e59f7a9d1f100ce269e14db53dcf82cbe1ede51b0ea4da78616cae098c1f827a6e09d583c6454806f427c670ae8c0240b463cacf20bd4d059b78e10df3b6160676ef873e967ff0f57208778628e760cad931c5b6d45ba83129a9061137e8500c730a8b1dd51e1ccd8daf1e0a0cd2239e4ccd8b9512f0db63d96c6a93c5d257b52a075e85df3b56a734abdc0e43b29a367d1e29eb6819df8f3d48795031a0befe460afe8be1d05a089f4f6920931e41e3b9e75eaabb555badb85e1858387cf97f99c1bc2e48fad76b3f42674557980a738028ed571dcbb0d4b9df8975ea0eeb3410953027b940e391131fcf4b209c7813ac248aa628d6f6d9bac2c26881056e7a119ae7defee9a59976e78974d654c5424ba2889660abd289b24362feaa99f407da23711820e0514360877a28df52fd337d6707580d6196ffdf02273bd034bc369a2774bcb2b3b9c5f0187a525ba121b71bf4eaf2992e2ecda86a12eb33079837354a5eb56b6ad7432d8bdd83ced3756d301c5f59b052bd7b3afd23e35ef9266a2c380ac560cf20971638692379c19a4765e50fb570545a47594d9ff2919eaa7d4cf1d13a8ec1be05fe254a3fff9529f563d16e10f20a9f674f876563d732d47aba7f5a9313f1d690352552b8ed7d1f3b47be7c23c51abf3f2edc0e2f4c0a1ecbb8080276bc5f10523da4864c2f1867f80d88acfc63969f3f83caf8048864953dc1061206fc0e3419ed67914de79c6decd98719e2518c0eb5dc55c4957b975a39ed8d035137e965c2e856c1c0e03678a9ec7c95b898e33ba6365dc2379f76c98a9038af09d74cf82ad548f677e8d98946afb6a6b2e451c5a3ddb187ea5dfc9c21ee1c5d4313e135253f58a309eb08d9c71cd9ddb358d3f21180ef0f1001e1424576c7fb4e780c5b35740d7d143078ab79a143574a022de93b6cd9c56b0e3407621061df2a05fa1696cd91bf72849b4911cb982218cba0acb2d8db512daf567329f4b747395303a4de209dea14170214f9613c7c9942d23a4963d358c9b0f99ba347602a1d061d22773516f73e45a79cfb4455552240727422b8e9e19dc99e16d634b9157c85ce9e3c581cc72765671586c6cce0fee7f0eee7601a5dad43f12831b8dadc4ce301bbc540b5e67450850d9d749ef34e7a8c22fced215c41b38668156f16ccabfcf6a386a1d8c606fb458581775a1b1627d5a7c8912cef368b1c21acde68cac0a159ddd9076f12c2ff95155e7e4861e370521e984b7f90d0c0c48ae27129d8ebbb5acf315eb18cb2a63f56bddd2edfbe3f68a27afb53c57b04ead9806949f0403ad5266eccfc401ae95a8adc8839f8eccdfe54b58a5376e8d3457cdc4005e1d0fdca48d3a57eb719c90aab4e6397044309137299d4423649058484796ab0e3248eca1b8a61a06196e2d45dbf9760224e2a9fa7817342f9bf813a8585d78247a532eb237da8d0ab3e850373207069f409431ec3c64ec23b072d369e1c36728208e43e9ce9ecc43a212a49b1a6aa8a8e3684267b8ba0a8cc0af48c88f80a609121fc3fca8bcf84c81099ede1d563bd21feeaabda70f0347aacab59df5c9b9b93c7d4558d641d8d1c885c9331683327191f5160b0f3330889082d73927e4ee8b0b3feb04cc4b09f43cc51b6e1106eebfc16affe0d7936d1dad8b34883816eb49fea43e88f36aae6b11a9b4f5578c8f05b0b5b59334ecdd25fdf4cac2c09d52fb114b2440459a42f552498729a02007cfe48419f125102ea50eaa4d21833b39b1532f334dc7d635bf4d0b9323bd500b0a382de9702f911d3b6c16e7486a94be4097d2e6293f194fc442e68748f931137d7ecc39f5e5325e14b0d3cb023638a9e54d40a27cce419b82e9b7fd927630c0de85a4c600e853df12c53ad273911ee56526608557ca05e396a8d81dc8f2071ad71a47b4d48194667acf361e5c72bd3dcc97c98dbf95225f86e178ebfc6c6e4514cbd110bd95a9a7262fe256c625bef211b0f744ec6f7fe03192091cae7c386bc846b40512383d94790d3be59de0acd070d69b57b8e5d1676544878a5d390d93c4699fc1a47c94cecad56a4b3b7d9252ecd2497eaaa7696cf0bbd3bc39fe1f3a1460b01faf6922a18cb54951122495d75fc2e701c88d56dd4607bd5ebd79b66c382feaf990994898fdcaab91621062189dc7f84179abb33d7f7683886215bb3b68fb9460d4c2495345f7249189a3fee0386051111431d33a88647a3241b388a16dc35cc5733f3c4199cb6e490fe9c9119680e332400cfab9b733e8566d63622182deb3d8c4d0a0c58f188aaa843ae2012a9e2811a468169c4d2fe734baa4f90ce33489078a6269cb12ee4ccbaf9a32f0a8ac0899bc2383e70c0b1493b1d37f9a22cb5518ada9daf799dba0906b053cfe8925050e1fd9ac5a0140cc4cbfa2eb8ceb6cbf40001a603f8da0b172eb24aa5d7c6486134982350d1fd9f07949908c8807b01b60b4011a570d9bf09181daa5e279b717f021c8fba206ba3c361500eeb1ded9f57b3ea11169f76458f92f486613880f5a26fe84c04ba54841d02aca921408640ff000fc2548492a66ea6579ab06f91387aac7f2aebb135a4859477ac7fa30df5435de3a7dac71da5f5c2c443f1d682b8670ee0ea70b80f2c7663b3e5b748bbcc898e7715a9b1e3eb734da4d8500a35e0d2152dc6a7eaaa9d69742fae122dd4b7f9688d4a990dc2bc14827431a6b1856c876380a39a7d1c61f95fd1b61b75b86aa64db9cb058eb50ed1185e62265b414816043e17226721164510b4dbb30cbec7f9e2f625ee0e108f94a60c7de881caa2e508617918f1841e09adf7e452cd89406921c09f10e5861a2d3c1a9118f695276e370d1f6508e88bab5633266b5bab85215fb6a352f2702e0b1869bc732e05ec706cc702383a8e0501d58626bea93eb9e66486f66dce60c06bdaff2718e427f27aa1ce10c066a0fb5e30eeb24c51ee4f687fdf9264b77a211f3834d7facbeed0f238211ef8ad5ca68da6636e811f105d2df1a423d06256a99f3845d760ff4a6d326b79c6baeba489615039e1e42f0bcf18fd09e379e8f6d78b3880888a9377559b5b3e5d06c102dd1a72359b20927be899376e8330aefd93485ec0025384566744106ca088186b398c8e086cfecff9fb43e54e52b1423cdd9d434dd73b31523bb123c17780373d48ab2333697944a06de6cb3141927ba3c42feeb72ff1de2be7954f6504c9b67adb9ce773d7e6baad0be14ba6c6c9954660bc3bd16feca9d734c765ab2023ddb67fc6648f495116353ce0bfa5663ae708d831518a7ccfddf67549a1314bc0d39412b89226ae7fd632778b249d293d89c42dc61d0995db5e64af701a9f88854b4c7ff7d20e82c6988efc595d8dbe368bb510d34e00f62edd724a66572941486985edc010d6cfe9fa845c5de2372bac9b1520260b2b02059f4df5bde705b99a83fedef25b73935e9b3fc8f6fe55f6fad5a304b16717088c5c751e1c9ac801d21ef5fa5484423e1bf424e44945ee82bca24a22543e13e6a137b80fbea8cc187b9b78f8af305e6612682a8ca5add0290a786e0abc33881acec66435f3a5eb50c118f61da96ea3e40fef88ad6f3af7be8a491b228458c69850011f322ea1d4c21e2a71c1781f93369c645de493d97f933371f38886736af5b830ed8077447c3b471148bb241c1e689fa6bad3497475bc7764ab2848c73d9310084e3788d5ef37c565052550c7b3c87c73938b1600c1cefb84c6e46ad50cea6fe0cad6b6ccd0c2ab53e848c21ee311bb45e320ec5c6246332d54de9f6b6540c3bbeba894bab1ad1f7da68da3ab3c8c421fff8e1801e066c0333586aa07597c9549f98d1316e89d99e6b711da51c096912d86466982c5ffcf192d855638e7de790b346bbd1766eab3ee9bcef0b27bab4fc00bf358b048387d161c4065cd1d11777a582ce6414dc5de5feb1c758a0b4743df69a51f28924385c64047bffcedf9b063ee423d9e8a8fb389937400a97a54eb708b956d6e0bd33e283fd15c2d46c008f7c3fdb1e2f2e130389d47a7d3780460fccf2d30e0dafec74401cf0a9d192b812fade4ab4eb31e6b2c9b86f64c131b02a3c8006624baf7b34204e71295227acdb12a6ee876a3812de6ad6b1d5a4d10e40f4c71c71e6d8482f49d7e1b084e405c612fa1459bbc30f9ea1e406d6d0fdced59103b63b3f5f216d81a5d8932a4809afaf380236a599caeacc01b8eaf9e913db3709b67513795df0963672ac65cbdd9be18b9c92afc913ebdff58372f4f5d41418f731496cfdb0720756a811ac81eacfd38406afa0df633bfc58033092d0c8001578b798093bad91c9022c29698fc17a9c2a47d78d03260e2592b0026b418ca0e8ddee57b93ee55319b8447446b3c5413d16a89d80637e83d651af25df5c7287dd50dd45c05b088b59c929664dd40a11964cd3c511b9a851addc97463328cca31464124108c5988f9b70044a215e6462d8192da84f9d9d298a63a5c21b7313a8feea100c438afaea79e3f7e955c97f99877e44581dd5c73f38d6b58008f8b99eebf75e72e3d6ffab3373cf10a60a1fa01bfb95398a876b33cf3ca264f3e85b6ef4d2ea562f2e0028ffade636dc50b13953f54fb7a7349735fd987464d187d8803f1dd973ea8455c96dd629daccba5c7dc204069cbe227ed7834808b45de3075e7ca1d50840a23df32551a0ba1250455b7af6e90281748e9d21747606110e71a121a235c359d7270834aad631698202c797115b3adc61b126bf835a6292674069ab12a19d1eab01ef2603895bd302d6aab60767439a298e9bc61f32b1289d89a943e793beb47c4a25fc6889eca9526ca125668170269336817c4489c0d57f484c92a879d8e495b9aa99c290c3b6e5f51d79f251ade66a34e73911763e5a1b09aeaddae99f626fd802ae8f4bf280216a67fe8ae68e28d016121b61182396145a23b44ba0406357c68480660a4307f7a417bf4bbfcba025de863731a7ec01979dc5de4e22c012c3c15e58e8e060316d5db194bcc4f9c50dd254af1dd4e7a796da319725067b8f5c07305e3c468295f4476e9f4d9ca2db4d6c2611ae4b5da1391d6a4ed2dad96eb368d95d3246ffdf4fc82edcdca576fb6b461a7975fcf1983a5e7d1b642dfb4dc6ed6750e2a50f3d2295b6d3a80e9fc7617c2e5117d522b1dc2864485564588124653188909458b5efa884e877c28e6956a20efb773097383e74fa17cbfa09ffa46afc94f93fd224b393a7fa7da98a653c4f00dec7b7ad2f62376e6b1153d7beacaa25ee20eff3979555a33a337e20e2a0bdeed0508744fea85d52644a0caa104a90a1cb9c64b477abf7a495de037c78340105571f42cf420a06dcfd520abd7d3c4d66313805fb3542b7cbe5e635c43cccb47cc2c66a6f6bd92a45c2cf3ae03ef79b0c5472ae6e2ee62caec759de577a6d5b8234c3af46ffb93d433dbeefc413587cd09ac5bc810d29efdde83c030949ecaf4fd17f5a3c7899937734e1003255f6f56eea1f1ab8d645f868170fe05dd29f67e7e9f6795b3cfb1a678e95c1c12d92e74788454645a55714a7fe235c1c1d43e3014eff563a4560d14aef19a433f96a9bfb9c04e5135c0a4fb8611b1db98f47d263aedc3682cc34e9121170450b04ab755813303f7d1bb9d819f0306de80a6e40556f2e1f647ac39b58c0240ab11f470817b057cb55a544df396e6e1da39503f025ca043016b96063ba12379c1898a0fc4dd7648357b6577f592a594adf4658d6cd363199d2ba160ff456c75d12721905b98a504f2839721c5388b5245accfe534cf1f66b4a8295ae2fcf434ec79e013460a86cdfa7c68933c85cac36bdbf2f7fd9a81a39943034892b0098d603250961b21e294a4dbab0cc94314250765a6856fdb070ca28e938316b67e7cce63f4e1f24df2ae18f990eb534fcb1ca9d807eb061dac62a276389dad87b1116b1959adb00b8297b25b22b9268a0d534e2667bf9bffd1e861d4f46b68efbc325a3e3e3bad4ad713d86bf570c4e42fcd1aaa0c85e012150485150b4bd627c5b8ca746122f7413b779dc2d62cd73dadd6d7e28132f91fb9a4db2c93a53b06f18657f7fb921995badf567e147c9a73099c5373249252ef4277e66edf43ffeb5a0d58fd7543d84eff636e5c829ef423c2b3527a35230a286812a92124567e7c2a9df870e0fbae11e7ef2fdc174eb9db8963131aceaa7dae357e4d68c4171a307f185faed9bb02f6ee8fdfca5c7d87726428e89c9473e32f301d7f2c9ef39bfcac7c7d227069c1bd063e9fec6c26ede5ae56917e7626cb39d5210c5ea719510df3cb4b576dca3e4595bf19f25de889dd400a42d9592d16ee6a521c21b7f8bca5a5cf71de6eab7ae4d635254f22961c3ad99cdeec956a2af1a305e8883f2ff63ced7b9fb43088f859e17f83129269575a4c41a2e21168233f0b5501c23c4b0384c1c5e472f5cb77ce62bf7f9cac6fda53c390be5825c82647e496c341b0c06a020495c0c5cad61563fa699c761362e7e4e131c8a5e49f9f76128f342f6076f73a5ebeb5cf4a3b5c198ad4dc21ee764d282c3491c4fdc60c5664a8810b85ff79ac8c2350ffc9a17d59369a3875664386ff38c27f98cc11fa28e16cc75c71b23fac0f8b4040b229e16672926d04f8fae079c8b0280110ac1f1b7cd6f8184741b1927a93438c4586515abbfa1dcea14757ff2b7b61115f62a2502ceef8331fb8e91d6f207c5633bf83c9a74d0b2711293f2bc8dbc72a6fa547a29ef69e4a62053219192528ce2607828f38270b2648ec1cbac345aad48cf1ba576b6d72f5cd955fbd3c19c218f6ff987c12d99753d97b31104ad4e1758ecf4ce6467b770e8f1e5183e3b0aefc77e35f08e0f14cbfb58453b3d94ba1bdb3b0213fec5222b3f08cfa662a1f5b987c75005d2d05866d3bef1407a880a004a8bba13e698366f32811aa8f2ef696fd4f28dbe06053fc42d446a9cf3c8bb3b5883e742f419e8f6b30760cc98a7e1841f1221a17d7d4dacf560760f6cc8b993ff611b4ee9586b46464af04fd17781688a57502f964e222e3529a637e1226c264f943e1cc699f0efdaaee8e4b16bfb39847fe242b464a40d1d65756cf8b9058b0fa1fc1a1f6f53339f1122e8fe3ecb384350732351a3a1a14d56b0ad2959cd7674c8358e60a75b51d520899a6da412a24cfb5c4a56921708485facae9231f0a5d8614252886d80982a926bf32238f3d51d4b9f003d623dd605ddf08f3f883526d7768e6597a5fceb14bf28c4831b1cb1d2d8c82c327fed9d0b6514e4227cf95b2bf31a3c69c7af7208a522ed16b343bf1767482c52b57b84d96583d5816d69f7ad63932880561df413f357b37f687a32278362b38ff9d4b9d676c873404ad7a967c98805495b7809a73f177fa585c968b4344b6992ea8f8439e7cd3e226bf78a59ba179bae58c952584a674838cab3544efa6cd52a102e68f41e66b6a7f965c5912e546488888a0767220b114993401db38878f3944ba4b8275696f5e10377c54931601b21016bf5cf8b07321dea3c97d78636a7bfc6f378122fa015849092b68bcb655940dfe87a508fb65216210849181911ceb28c6824ebf70c1e0131a2fb85a4bfcff2d7e77bf95ec441922814874de36e717980c3a6047e382e174450a4327878a934a4bd7974bd1128dcb71aa7ec11e0986495c660b535b877e3125612191c0ac1629fbfc79d033197bd40e136764b792b1b02fd871a13f561b40455236e65c8184a46fb44486df70dd1bdf91ec2f39f5c29baf000bc49fdb51a53f0d39f915ff25d4aa953782ff129bbe081020c5e612e5264206ab2044e23fbf6df546318da6d7f3e010a5e814a4c74bdbec8ec6b2a70aa68dad5cbd205aff91c7cabf43536305a1bd68491ebfba7564cbba07582fb5b0976779a244cb38747f56f482a982c8589306554e69222e862d084ad62d3ac1252bb9b893a48d87965044735f2397fdcfa3d655c6889abcb65a8b5ab18c4895b6da5e9b7bee8aec36c606a6641621bf3ae91063296ff4e6dc2b1dddeafcb84c7f913ba1aa15e30120c8f5e0ad83e7bff98975e4f08f0942902f41de5e10040d5a3bef8e9c5c0cf7f7f62522e2a537829471698417519d6829e8908b2cab837c982677adc9248ae5c9833f0dd6d6f6664888b3f6777a379f9c15ce964acc0c05bb7f331c18477991a5303c9ce0ed6b006a1d185df1fefa78075713ac7bd6b2c60cc613cb789f612f206a684c7365b5cacc7d3b16a775a53fc7098e6cd8a889f66e89e1112fbebcabfd4b8e0e66f4786be126f41aa5d978f03a7706306819682408c90dfc421d6f55ea7fb7554d81ec3882fa8a0a0660f51ec391f47247dd3b84cce819ba27833fbc637c93bd4cd3e567e8cac0d22c10f4ff1151b173460c61bbad0bb9f5ae3d847302200c047b6eb4d39bf3629a0f4aecb2d173fe3a6f11d2b3dd45a715bc84a435d92d5cc0b34df9699274dda1f0f50469247595b3ab069d0be3245d64bb22faa30c90a50081565aed5f32867534b456c758269114d39528bbbf6a31ca9d5e1fc79f913ff081d2a2bcdbc55b1ac573f6216ae8359f9f2a625ed35d1af24fe8536346190153b4671025a4595629b2060b77714df023a43fd28db88f4727356baa0b4ca301ad1cb1166a509628dd4b01182b3223d059e15abd1836810a8c079f0822932a234b1e40947cbe0bce8520d91a7445b64a57e4a635e7682b5818a786728c88be3cb1f5c368d3ba8f131aa400c28ddf1f4fe2f2d1766484be953c0258aff46e0320ae351f417c19729f8035a84085c42e11fe82320f0128ae352fc03c12e08b8e4fe45742fe6fc08cf121406542fa3437818319e5eb51f529225acdcb5a7071c37377378689bcd01f938a1192bb8c6d9dbbeceb1c752f7a5ba7ae9a0ecaa0a912185ce4130a90ecbe26e660ba7b0b67c8227ce5c886b76fc862172c691384a085728a225dbd107b7f80fc5af913afce3b1f41634b90729ee7c946d7101df3dc26ad987b1b574429b91f0028e94e4eb41d294a9d241216ffe806e5c604ac95832862f00fed8fc1d232cb382f44228b1e2a8a265095c223d628d8914d5b4a71b6564036bc71bff852686c61a995f28922502fae7a93466358f3bdbb9f54b37971a804c43840b12bef1304bbf9c853d4bb99503b4db5a4db8d4adde56858ba545c4930549d07ef296a47213378d01f4822cb1e18a20cb2efce544903f77ea6aa71613b4062f1b15cb8bf85552e33f109e840fa82454962af42add5fcfb7bc76e98b6b41ece4f8931fbd859e6f11b7685a3f684e82b4896e42517e0d0f340947d7f7553740378e79f6f5942364135f2c40f0d0a8cc0e160593130092bd16e30111ba418d00f31668855b0d9f7f4be84f20c61f4edb0d8c35255c5a0010b30400ba27e96bd0eb4848109eff46a6b89cbf3e7ed21b602711fbd936407f037617f0997426b94648ee684369257f10a2469990804cab66934ae28903900bdea986a34a92e3acf1ec08b4482f0ca51549fa8d19f7bfd0b870947a692fe6488f2001fb3be37f27efbb2bacb8397b0110954b1665b57f7dc4444895bd008baa0536ee5f4ac00e72b56eefa90188be86fea7294a4ba6b09769faff69e00188ffbd6c8d4d5c5d716422fbb7114fffc865426ee49522252f00931afcf1be8ffcfe8f65a864b34b5b07ed51545a26aa8693fc88a9c6aa368230e23f159a85df6332274b88ee07ef76e5481a8586597ec1d1d97f2ba9aecefb119dd0a6eae87e579d5c3426159757e753889eb2d17ea334e8742da8cbd9548b7d0b12829bd1292c25f022de31f5f5cb9c2dec96897ddd6bc4b90e39d33b43aac5b8e366553548e1b4ef1fb020970a6840771530f3a6ca5ce304ad2c272fa86cc3d8f5df2ad70c8fecd6c7e4c2199010f1f70ec204f889cafda721f05a17196c7135a2479002759bb841d62a9e77ad390825dadf97b204ae725bb556334942629279f9fbb4afd170208754bc5babc1096716c95aba3429f6a2364357066b95d58a9311eed15bfff5ad77f60d39a821c2a85ff1932a1428edef0117bfd3aa824a8ba697da58cd35ee6884818b661ea91819118c7f77dc84da57540c1fdb5857ac3a34a2f42c8e5a5e72a76939854e90c18655f170a705681bf46d9e423f1b4032676838f5a1a141059253235983b4a779dff2522e787b4c86ee9f131f09de0a48d13af15364f7bb36ba3b4204fab080a038a8249d928c50c20221a4a59e03b5e9187e141111740c29d6981c06bd07020d0c779eaad808c6807bccf2d69049a056b723124cc624e9ad95ebc1a8510d36faedcb0c591bb50a4ddd407a4bd92dabc10124437cc7453b5fe2e4f4b4658c71c122b3c4242d9044b25488a77a711b6922b533e05e3814a76d7322bbe39e909e82a0060627880ee97fcc2001460bd82a905bfed606086c2068f1da79126e5079d0979f256c8e371192cbaa89618b85a1dbb264cda258e2daf2607c0a1675397585b9c04134b0eb1b5b2ec325332a112863e904a8db6080c13755624984885392fc9485b081d5b110607351d43be063175ec05818028c18fa32a788beba3dcbcfa765375952e85f7d03a77c127a7189f7fcba66302591cc09e2615ada7904bccc74838427f0452bc11b1319fe5418885c6a9ecb3efc9db4acb2479a680d77bf53ab6be6d4ad48aa916e7b8e47ddd0d21e552c375697a17199638e6842146532d4a561352b4d239380fc5ba8dc86ae603ae4085520ab461d7a14b5b941b1c568b80036a9d7548a824d0f3ca40f81a28c8a3f87e927202485b047c1e2c65a76a53fdd0cf7155e08d5c07cba4f7b18c1924ce1903b4e80ffd4b75f30ec2bb16099bdd095cd0084dec6a918120e4dea26e45348061ef76b2def870e710f35ac3610abd73ddfc5a6b288f95c62e8c1be6d0ac1a90a6731a77c221f675d381bd1265c3856a6637a45b1052f89e350f0f4a57188b94aca4c2a39b40e2bd8014ac338cc1e00ebdab05e7b968db62f85ed2fbc33b7543b92cf944e7acac6781bae49fd19e7ac0315770715481735c7b0ab2a8cfa2d5a7c110988ee3a68e4b0019fda316462b367e315008a9a6592b883dfd0d1910ba64e610b44ff27c80e390466a07d2de6abbc18771b5a7cc7840183368eea050f819c661c46358f151914e8843549f7cbcb32b61970b509868ca9b69c9126313b52603edfc66d28537a02d3949a544ba63636be49563eb55d059c9de0a88a45aece58c7b5eabd77db2a353f12ee615c4901c6a2bef0ab51bc70b6b35e8053bfead2024a0c7749a8163c89dcc3a538ade2371d674dda4469ce205d875f3d132923f253d02620915413b0320043e8680823c723ac89bd5c51f952697d1fa4592343450070de10685f1227a9482b649a1f4c5973112c19eda3cbb104422f78c9d902314fc7e43218f86f8f4cc594ce888e806f43e3416a676390aecdc801944b43fac853c00dc5f363fc03ae0c3f16a40bb8f249e9958732236b94eebbafc0171216799a7db432611fc1b988a2f63fbcdf6f16ea480a28624f47d1143428d8d9500403fe50025330b10271c619b6cc365d47ccdab97e051efac3c5a7d8962fd62c575240b477b49afe575b2b1f49654340fa442f5bcfac0b94aadd9915cc4d9a485795661707fe2a9287754ba59ef328363b84403e8e08d58bdf24551972a45fb774db83213563ff4990245d125bb62cf6ae42e78b6fcf2e92120ec4b7a7154e633e74758dae37020da7375949615c6bc15184f26aa3cfc4206a5940136421b23df386833c8fe2ed8108e304ab7bf4c91c69b88c9aff341f2dd16949b149c77f71e68290ee90849f4a6808c14eb9aefeea8582c942cef3b5cc7f450e5e03d3db01c5c6fe7a0a9d95a4cd4cda26b0c542f904b5c025aa210c5e14f3c05c3f49344b6168e774a768dcfbdf14865380ef6e00422cd48bc9eff701a2a4f32b8ab671492491924b30b9266abb15d2e5138194f8e8773d1229973467a6d1a3c44bf3ab3b3e72917b3b29cee93f0645f811e4a038040ae5322cad15061bb979d70d95ac69a1e2c3eb6671670dac875f1bc5e490980b44e40052d6358839e08a229efcf0a15d3ee36c0eb51469a3488e90f47c9d1b8c257082b9bde7df37af533e371f89b43a4a5034a16e64149af8ebd52682c54078648a5f2878fdce3310e18d3e205e893ab0e78a5409bd1d619e9bdb550a84075722613954ad4d0cc7eae4d4ea8042ea76edd0d8aa7a3ad1bee8f390c292a9b470c2372c827c08942160314fb18f2abfcfc931de14c9431de1ced81f8a9c15ae1c08520a381ec34a966bd0ce68ba273d130992725486b1ba64c109b70235de50af0e75ba1154d0b916b5c9dbdd5dae19cd56966b4d6aa0c2b24930619742c7a5d3d81b9606157df5968ae8ba2594619270317347764b87924955da98411346674726a8bbfd93deb65994343e260b8b50cbb062a4714422da50a34dd2da2106b8d059853fba26cba7c2a6ee23985cd14ec6683e16b7f37324e5f290c80564ea7d117db318f3551c90ae14e13412e6e3db02f82a5b8aded061bc1a93e7a2e6258b911852f35f69e9c7bee8de409946a11976b7b972a4c08d425c48fa522e1582113130600ab03b9d0039e4aeac71283b9145502ad59c06d6fe00c197fe6dcdd50e4fc803752cd12351a4bc6005adcf8db3d8b38e910c6dfc9eae24138331ceda2d44bfa81e53f905bed90b10fc37a72c097085686af13d146118991408d8d4735aead758340e97542c8183e39b7fb9f7d8def70f98622b61b28b0edc0a00c758d625c97ef3fb8bb6ad471d8b8ed6af045d00d5d6c4a891888412e984b47fbc35c4f95b05f8bd20d57257ebe0c2c81b15d0d81074116181eeb1e4b0297fb3df07978f2cfe77bac02fcad002d470725e4148ce3d99c71ae29e2c6b9c4df99510022142a275bec4451c3c701d9a77ef9dea4fc9fe80b084442279cee246b320aef439bad59fb0c1a56a1925059a9613dead9cebb079182328c687477e4fff81d31f395f67ac2d908cbee0c8865957d92b6fb99d6535ee8a08e62d870921cafe304f3397dd2e57afe19a9f66d1b63bf35845299bc12364e3a7cdf8345bc259a4f669b9b7e8034f3f5a6e70bc899ad803d35731c7f369cb8a1c2dd0680e510b3264b6c2d3d766b9ea2f2f6a3964b0dd1a60411f7f6812e735444eaea8d1c5abd46aa4fe52e339796c4020e85f91657ec5563c98b8315340242986e7748ca4f966409fde6dc4a01f2b2c74c95abc0f16e5796bb80e126162107e147c92c0058a886055b58f916ae90fa1a058944d5f4ec3c4f8baf0efa3bf5f1c093eb828368215918ad83a911222257f1bd5ee935bf643273d2d43272db2e3bf8c7e939a7603a67cee368f5f6e975b5ca71a40a4188daf2a9ca4dc203040b3d435245fe53159954e3723c519014ef15cd0bace0804c8c9c910faed3bc58b059a270e6f52873ebd3b6fbd4b791e28e13eaa19c4b46bbced34d56dc759834c54d647fac526c48b798a7c1e2003cd2480fdd2919caa62e852032c2baa6ef1e2c68c1b10365f37c41f500d3621af8ff61b1975c18ffe647b9d2e30247de90e285efc8331e73ae519de25b63fd40fb062dd7886ca5bbc47ffc6e4fbe5bc24ad04cee9e72fb8a0d5112e261b94cf3aee98f0ad9f0451d53b0b107367ab4b8068137a7958b30a6f8391f25e32edc8440ba6788e7206c623e4796fe04b64bd5dbbd2a59f3412517592b433034a8509e3c42248208fc63a75fddc3c3b3d58f1732d3732d790355889601501a069193f68c25e1c610a843e2116125a5f129178a89df4564dc7adc81c627ea290d5e6bf294058036123733db35d308fa16f7916e2f3d170a6c71377e49313dcc4813c9de988731be92f649f5bb35dd11e8f2e477525c4dbfb5c20d907c3b50cc790addbeb2f0948f9f60a356a22f7fe384045b869fc918cef88a8d57b8a97bb25122112809453265dac8c853f1f901dc98342c20246d4a576d95504c1f81da525cf25c5c6ef670390168579360cc75f92eb17028ab5374abcb65c3f96686f0649f5c0ef1c5d75ee01bdc8568cffdc77d77049ca85ec52cc1ad8c1ccb5aeeb12a7c2ec8a4d078cc6cc9ae1b395691b832bdcfb9f95d42d325de0873319412ae426deb8116013ce42919d95d4482b43489ec69f571a1c756c293c501b15057da69abebc42832b0b18ffd88956c83cb65bf8f60c630d789ff761312877ae9a1555c7f05741cef580fa1a17c24b73d702740b9230227d156cd813815c73a777cf790f5381054d45d58e68ecdeb3d9a12c74299602ac8e58c25c764c6989f74a838a84243d4da9a719977079bbb10d5c5b93b6448c1fe0b85f5e36476a060142c340f6b15115b469189e0084ac075436ca663b35b419723f63719cd4a87a119e0725faf78e61c1c518170a82d6ec4ec72db2aea146116a183fde20eab21f200f6188997e77e5c24b221fe0000be70f44790f70e94030268fcec5d91ecef4d1aa98914f7394df33d5336fa1f4ee7f68b2038e1a0b21980bd52a24f99a379ccc7ee8e42f2245b98789444405f0e8b9f1086966ce0e69b1565ff8a0ec990ad71e6417b02e8dc2f71eca999dfd830d9488dc08d8a39906337442e3ad01b6ff27f005c268d1b99e129420158ef27d6039e9897ca65cc9095e019f45e244e0ee3ce6e3b5a872be8be0a8c8599b5505486be967280acdaa66a85a904a06d71eab8dc5db9ef22f589004f871278b48bc6ca869e170d3c64c9c9246645c150dd2a2ee582a4b68b4c6f58c5cb0a13fedb49dcc7ea98bcda6fc993ad0f68458a561caa4f3e28b504123bf79d491c8ee240ee3707e4407d5403169a89419a8ac213848efba02b97be6ad501c73e2e1f505802935265bb5fec0511aaa4d0a09b5dc39ecf4ea3dcd5b452403771f66497bc6ebe41b42c2302e8b92a5fc14aa202f663f81b0ccd15493ca45877816d40f6bb709a988df0a1a1ef02b868920908946d1466aaa2454c4dbd064be9ca5a0da9a685232b5e67c7495c0316f696280609a3f0ef85ca1be3cef4bc837e7b0cb99376798f275eb2788f9f0378d5bf878c089400de60aba9b91801ff842ece22d2d5f02cecd883b68a08543aec4e7be1747817488a3d54b5842f9839239abc6593914f80f8a345be66acc65f34a01d40ad20148396eeea4fa1080745db7c52c43f4d2447cdaf8ad87849953de7f8e0b39d3cb7529ae22d81b0cb54254358a01d30f402d8b81e90bdfa27d1dfecfd475145c6071d13fa6110e47d5e0311e8a7a58cc228c01a2c6f47099e56b609bcc6eac542d95dd66d95fddf24c75e24a053b92ee4df897e1e528cabf10f3a273327b12eeb6d5d223430765f842861d4fc28839075961c632a913a27586cc1be7e36cc64677138caf9fcf185b43c600ca180633584e1c86a3e4d0b9873e2c672c098d4be68f5360271980956d334a4eb295a41ce3b94cef07ce9da4209e2caddc6270bdfcdd78018ab692be5d3d017415e66fc3e5ae0c046c25f1b3346052a484aae89f4e5b2be934f64061dea3364ae806840934cc342cf51da854d9c627c363b5b97be018c887cbe194a6a5236952a79c56e74feec6ccea157acae694cd3fcf288696a0b19e6867c07e61bf06dedba39bc867dacc15dd04ecb404548ed166aa347be6d0252cf2dbfb66ee0241f37fb5287e7f366b380d1c28b89c09755b682a89d80a5264d7878e7686febf3accfda31c75e05c97ef46b4317aee4e57181e77b799c966072091fdf5d476aeb1f2cf02a013a50a6eed347396843bb53fa27e06b418a9e3771e827679edb12026d6506793cbf5df5d80ff2bd9e7ce5ec0d3de1e0a7c8be1ccf9bf98f50a91b93ca32c99fa8b847893e48b04417d0d647b03077b06e93764fdedc397f1d021df4f9e8ac93f63075c1d388a5958798627034e025b441e35443903d133f2a8b28c6ebaf14454a6157d2caad4b9bda874326a6e74e8990f7a1c72ba937c812f40ce51b0bd45dd7050fc3fff5e4b91783c7f9c0a7bef7e397b644b00aca9145b6468e4051ec9c3c547dfa1bcb4422f0a5d4c465de61504e8f616b04742052cf2f56d7b01e9917ad3e34c32d80ebe7f1e50e7b13d7d2ce98edcf24f9a7be1cf083238fb00f4a4c37b3e5f17ad18464b7e6a843044f3ffb6128e7c0752c08204c51c1ef8f9d5d2ee10b33b0703f25656fbafd1b5200f14a51bb68003028e4961ec2a8ec336baf68f5eceae67aaeaa2348aab71002700394fb851348ea1bfe91b6dfa2131f28fae5e9705ef72fcba37773f21811e6ccd8be4f9f8e270dd21f7bb2bdda55bceae2bdd9a43c8e71afc17ddc93757ba35208941c941822eee179609e8756f8623e572cfe85eff33ccde329748e9923220b5ecb788ded083911666d2e98b1f388cbbf3923ea97a5c024a7114896cfe5566897aff674e8468871e2e2afd08befc7b4a35b3e2b6c9a76068219aa99fad9107cee479aaec76414b3f913d3abeaaed70822e3adb65a8ab989bd0223c99126ab62e0f3ed79d79424fe94adfefce35996123547648860a89382d197b5e71518703aa4054d47612d5b29a26fc4348c37cc46d692015d223749c77e8214d7feb2225924ee9ecd08dfb6f6958d22b7b0978190ad10db05a5729e40fcce2db750b8d9e1ee7e4e8087b4be4bd9f3bb27ff86fdc3b761e330cfff8f294a871c37cd12d54414cefe5064066a0763e1550a482abdb38555b37ffba85d27f0040da4271631523e739adbc5be88c571e5f612d030ccde4fcdace948d3cb5a8e64876e0fd0b459eb3f982c1277dc1fc3d0d4d959675bd8be0516b9fa10f7c803d527bb1843086001d8827f81970230c907ef756dbd5c399241560bbd9b4b3e03673eb5fa4d961b4f2447c8b02e9a433ef7c825b5df3b25b66185b2bc77e6301fefc541fd74d05585deecf9fdc8315a2a544827ccf4b33a5adae099d44a8f41f86b42c766a88e157ca6d98c6c06971d359e654ea3052673bc60c8a2eddd7c2ca3822494a83347a0a2134fc31515551d74cea3e9d119d5a8244f44062e8a0ebd84841ad356374c60ea8953364776f27b2056d6ff1c18fd183f4fde04f713d48235e82c317e12320b654ca8c475fc2866f6800ee30fa657bfbf63092d689ffcdf3572316fd306a086e21814b48b879c0b9f8cbbf74ce0a705a07d62ddbb5da87c50495141de87bdb739a5f5db341ed026bb9a81c4cff2638224aa9d48b462c4cdb5798fef00c8f235a618ad4a36c665daca437f67ab5be47460824fcd0e23528ddb77f74df099691a1cb5d3e2e090efa4675c07543bf1c421ff063334308812d041d545e83b1f88a93a0163382f1aa27760bf0f06ac277d44b37b624e95717cb3e4074b477ea037cb853b6ec960dfb355bd449a05665c5724429795d70bed49e64cbd75a357d51da67e10ece86118a3ecb670fd4e646e6098da99e4a7847f246b1540c48379ac25b448737b986fc2b180f2e133d3be8c790263b84886875b00fa0492c711573750a3e67398537ab7dba9b770df07652f7cbaf3f56308cfa6b0317bc7551d85ff286fd2b7096dcdc0e03e10de17f5d1d85216c568b1710e34a29db4109b7210482ddec0b760960c467715d171e0fa9791e4ab8756885e2c309d967540d47807e089404df7402dd23afc1b4e6733bed9c7a73dc68f6bd9e9d13a589466d968a8af7d4a33c992486ff11d87c347e0346678a7f1a567d85e928d29a292068ce253e374802759c86546629ac55947b4f1e992c9afcaa551ca39d21284286de63b67ad8d7c5413fe1d226afa20a84126b7165a30f8fe88ba02842986fd0f2cca11d1453e0991e10323a0341b5caba6d958543dce09b91d3c1622b7940be90ad2e6e910ebe57ac7515f47ed5ad3539e3b5c580a9e66c538a7e81dc90d71a3c8ab3fe8f9b4d7ca038237b99522b03d12a6221b43537d38858b28ee14378cb7ae767dc97eaae1c32d4f9ee5fb811704a60e2e78a53e2761bb4910d1807d812463da90a87a273c2f27f70131648c605dd1c029d045cd3d061972d1a8060c389402c511bee1617a89941552b12693c8205bd0a0d3bc0fb3d650fc15730bcc25f563d162fb729483dee5198030ad1f5f66015c96b381414944ee0e678304840d36e75c89efdd9c09c4431011f640cc02cac61c457810312c3275891c88366259b0f9e63d2cca2314f30600d8d676f01a311a9070cfe334099e6ab4b11654931652e79c759d5eb5e0d97a26724884e591f74f865dc0f4984bac4190636144391ab161b283a7e05c6d1b7d37354b17d2b58112c978d416172c00286536602c8e021d4fb2eaf0156f0b489532d0456fa2a60d9ef0c27463733fbb612add0b3f1c7028d4666e26485b32b968534bc4f75513b1082cbcb53c38de5cbf0ed2d677d4d27d3628e5a9155261463a34cc96c26020548c3d1c8f1689a09704e56a93b90c33d2ff5c23076f455c12b0600cebdb3782c4ebd188cc6c25208307a60f9a5f066b402c4cd478590be85fec0c65d4beccff8bfb589bd447c8a01831ebbf3e0fed6c977b5c031edfa17c72512c6f319c0a2314b51c00588617ae043269198bf440b21b687558329eb4b27589b5d93f887aa0cc14d0251fac40ae8e55a68c0c0a61cc7232b0d46a47cf19a4764508f21306946241c5b15fa516140246840e5c6732144c28e59c7288560be925ea0e70e5488630006ed4738571b3104ea6005678dffdfeff1638eaedb0293e578c111e9d6cb07daa61047e2757351e12e83cc8744f697b2cb1bc3180c8d8cf40c7b30720f4e700b3ed404251d26cc43d18ef8eefeca22649dd01b60ae1d5ee2147568ba1a75594d0c00a42e729f0c9a3956c7d9c4541d91eba5e53c7c8e1413f59f350c4511c18321b1235f57f7ccced036f2cb8d8ffecb3688add92348c4492a1e71f8b0734457dc09e016fafc74310038079ad9edda607f0a3b7271e069633ee99960c310b4c855b23baa8ca204b5b27ff626586aa5a5404886407d31dfb3ea33a2f6ac3a36680f7a356b606b38fd01e0990c1b083abc65004bfc74718e86af92ee8a7a7a3711885d4094072e3526c352a32c14d4197f385e4e5f10e3f0d59ec6d176dc548d1b100e92f852c461fe529d4f73426c1f6bec768f3e68a64beb99412daf207df3e8b01c5bfe911b3af07079da5ca82b0298a27b9b28b07940b5e3dcbc25039d86428ac0c0f03987bc497ee5927793007de0b470ac0a37aa315f346d4dd1cfc4933804bd84d14df20f5cc71cda368a3847a151306b6917a81ac4e3f805e1d8e6c2d4406944e3e1cb40ca60bdb6792269db556821ce868ea99225b47ea8dc31ca3a561deecddf847ab52dce2cdc443e954b462ed7c653f13dc7802d9a54934570bf0aa3e2cb3f1e5c217b5a6c4a5c12d426150e62869e3664c4e4a0c443d86f5576bf61ce3a4b54fa3b48d51a6481214284a22b8485a7f14a9a195471061d446685991771af2a7fc250641ffb649cf056c0c2f6bec2f88847ad7a5db01264f7f5a54542fcaff9f4af66e6af9098754185baadf59dca0e892296c4a321246a94c70a4f3b029350a027dc44530ccbe7d043f8401a2f3f28fe0297a097db53ee8906a76c569113f81d151dac61fb678d2779592b8ea5aa04c85a9a40b747ca104d2220c185290a245efb1fd31eb9e3730896233434d4e6b1e82702086bc27ba764060c7d33c55060e6b666c722ad71bcd31de49d6836cf8bbca348b37cd2e10d226c79d5b46b3ab7fab3b7a4555efc1a1384aa099eda5d2e18ad7b33d9dd0d953ee8aa066f6f89e5df337e5ce8a21fb2aa67e5dbcc6e01c28b6f901ebadbc55583b34e9742ea1d0cb7c87510f210e1bd3825a24ca22b47fbf7dc706388df5b7868fcc942ec48f8cf55ecd6893422924c1903df21811bdaaebb77728d59aea9d7aaa48c89734c3dc3e31aa4315672c65a4b34c0f50c8d5f96420731b445479736992162a6f062bfceb9db6ab758062423c6f260c066dfd626cb111f0c968a2cfb0a90958dd0010ad13a5dcc8b02144bd18897ff794dc735601ddb11a2372c5ce1b5ac7f67353e0f9fd90ff7c2dfe539a68b9fa6dd6dcfd18a76ed5783996cf27686a9d43f61282b21ee0a1ede9cd85f00ae2e62bebeb4387ad0874caada7b99c2b823863499e16e920b05ea9c439b46933a551ba82252a6aec184162dc69a08ddc9d52d8d5eca0025bab8dd8975fa4a9c9d4a14df7419347c5bc6fdc470a055c618a344f6f2e8dbbc7283ff6a89915b5033992d95aea92c64881a30a5649567abeb6d4b13452d2b2d99f3ec768c4d713e8f072ee4d256cc335f5aba781f3209c400e86a0aa991c71e6c4c834989f302259ec93425022d5333db48752b7f645ad83d82d1206c69294d199ffbed406b695fd09534e03f4ae332db21ec4c32917affbb992af1a726a2254ada9b0b28d3668f77213d4c5f94860948dd61c37929f6948fd8c50e1e03445015198d85947b422a6cd18ec5d28aa2776c1997f09263321550c1247955314e2aa2c2f4c8539df1a302aa4c259f6ac64f052a994ebe6a8c4b25543129b9fd7d828049876c1ca02083b790599c2ac984fcabb98eaafe3a1b24429741dbcbbd805b5eab0ba0f3154b809ebddc0ab8e5b5aa00fa5eb104e8d1cbbd805b5e0b18d7620c3c727bc08daf1506e8462d19853af153259b1fdccea4831026e4bc7b492d2ee276492e6c4bd6285108ecd1dc248009c6a536c4e666c6ef9f1bc1c1b96105736cd348d252b759d77165437c617f83731a8b91d93c8d11d2e972b75ca78cbb8e0f5ae38ab8f00bede927dc9d9dd5ec41cf365d46f19039ed82772c306ebf0b13286d94ffd1741c76c8fffa25d6a9b13ef3007a63b88ffe6db33ea41f11747290b06ef1f26c0ca6e671f4eb13d0b6069a80da6a20f81ce55c29dd5748df388a109d7123c8405cd83a32088f8a03a7466a85c23eb8a02aeb00aaaf0028d424aa95134ee6dbb88ccb41280b94244d01bad1534a0c155a3eb5d5387d40c4d1884ab7058a88703314233c8636f905530bc512c205293fe10ac229c974654b37e5f737a972c0e1669993792e98c21771ca68c10f15f6f5a907216c42a1d1c3e0065719ba1cb777761c4496c8078853835e4006663d9e9f3a41675e918a7d300af214040913785ffdf63826eda62fc5c34f54ee2dd49295b35f30c55c32ef2378a63b839524bcf1197ddbc3129f9d5baf9505d0f78a2540ef5e75e34ea953b80d2513a07d8d934cc41c5545c21c94fa1d7ef1048fdbc5ce67cc3316894a4c30a2132a0913af25aa930986b41b174f868496fde3ad6c053a411fb0dfbe3a37b7efe0da41a8d8c223edce1496e7466a82af120baf4d533e30f2f52dce2d405c01ecc3250b1fb5a62d2a77c92713bbbc86043baab4e5b7d96c231f4e80284b83d9623778df946e3618cee7576f6b556e641d66e385eaae70a5b19277ec845226db0dadb560bafae16505c95ba93771642740553c0d0dd4bb3fbfad73f1b7bab74534ff86e5d0e05ea18945a58b3f5bf6d44f69f4db7c8889ada95e66e2c56ff51e03eca0dd793738bc89198eb5f9354eab190b53f489700e65e6b045a70d72249207fc92b1324db1797a6b242dffcd30f4df7b2ddb14b810a42c1875655d6625cce97d54b17ce43ebe825e3a92e43c6939418b01ddc5172c39ac0a02a69d3d72b643d141d566b95c470693780be0230d2dde8f8c1cfd4a28b739f2e88f032f719b178c80765ee23bd73a011ab0559e17397388b7213a9335e9f667a671297ff19a86b636035df7e022faf934d5b55a96e98a5b0337f1212a692472cde1ce1f8a444a0652e43c1d1f6795889c7058f6bad0719365cba847b9c0eee1679c930643f44603ab179966d22b7d71ee38d4f31df642e2904d0484339ddd704bf363d08d39f0f2ab5086a232986d8e0acec8fe2a58eafcee861c6a3f1d8f033979a75d3be3f93657a3caee627718c80050109e3430aeb6aece869b78418241ea42dc7d979c9d29505ed2c0b8484f630327b9fbb27dfb0560ba2456745f30668fc5df90018020ac523528f67e9cb0936673e54b50bbb5232909024c71d687253296e5d9ccbb20b7548a4b08a8041ed1e8b1ed15c1402960215eb062b2bdbce0dbc780be85c7340560adbde448d14859983dccdc4a3fa57400550d917ce26f3273a1983d05e972be7385514193fd7d681aea39bd9fcfd97f13762fe847c41e2f1b0a458545981812fd1a08a8471bc2076325ab15adc5607151a10a49a79dfbc589aead50ab5c8b36bb1004a8f35a72d343c1675a036ddff8cf37b34f51d800bb38ff55dcd8e2fc4533d85b05a0a51f25aa3572bd84da2a4f075eda043a2761d96485101577470129d66e4e3c1df916daa81a6d82ff9502445da7ef39a5c9f0ad61bd13a914855b913a6352cb8ae21f405e98857f207518d7a6c2bd4953f1908a9f47ba96102dc7996c3445753dd1ae90a4218ec36755632949771534bf3b5ca14ae64b30d5ae6f0a257f0bd595e734b8cfcbe8965e3d06c46f809472d14aa38ac2a79a2d75f30df1e6e808986f1b8df7834df969631e8e5925a363bb6f8fb61d19a7878748b4c724a018a73747b7cd09d3600d9551c1ec4e3b2602bf6932394114cd5cdaf7034fe5473c017e7603d5ff443968a00e001a4dfb706cf24093e299030eb4621a164946074ebaea15995da9d4336e92b42a2db1d82d12224a027eaa0a8c53efd753e2c78aea5bdad3bef03d555f1bd62fa25f4104510c94cf4ea5e197c6f2ba92846e0b8948df35f61ae86562c282bb76d195438e721fd44dc3f36ad7fa45089c23a71215b46b5f78019cfd3412b53546585abcd027e859365811979fc4be7bd911e321cc3d13ee4244f91bc154b05395d0caf2b41813fb5eacde9ff53bb2f84e96df3956982bff4b389f0f2b70162f7ef7eeeb63fd1eacdf87e577b0fe0e96c97b775a02738c8d6bb3a2f7959a7996af19260ed1ca3916e0338cfc8a393f4a9a251fd6cf5f2fc1f2a1bf8c0fa9d3daf9d1604edfa6c3d7527bb07fe2308e817103fa7ff2b439e2299d54fbf497b74565add06c6d7d0216b9c403257497b6820f7b317f2893c726521281309c151ff3b0645e36aa42091462212c18961280f59e58ab7749652dabd773e44b24dd6a6055c55714d8af53078e859c94ad6778f5aae222d8d01b97a2b777a9ff8ae165aac8066fb25f971a7029d6b276d6f6e8b1446559b7eed82da1ffc448a8bdf19281d6d63de2a7f888839402baa7961ebaa64953ab283dea5f6dd3b0f89029ec5a77e6ea9f55b1937075d0045b1729d5460606cd709a683e1fc1b80a64ecb07920202e8dee9370d1140e55cc1530d4392f0b2bb180e43a9d34b0e69c3aa08f1ccf05c7f192d849b84631ab1597bcee8120f8eaea248513d333023771096f2749e99d7f5ed1dbf7bc45a89a85c422b029578cc5e2e029c246aa2cb00fc3a7910f067c4b2168aad6be95fb725a0db2dd47127cef30e1e1c52bdd922078f516cfc24b12bc14bc062316717285588047d382f04479c5e23452aaa119240928b49bac19e202907170ee9c7cb1905e33a84cc27945dfb8090fda8b3876d52127ec396f783ec6f1472f7bf82efb7e5467b30ecb516d7ce1946eda4559888572cf2fcc4b6f229f8c61076ac60a455d13023b834b34935d56e38350ca9850c57fd578b5a4ced6e229a72a705dbb4cce5a650dcdb207a5bd18a0e6624e0b20de6f7a597d49dd40c7a421a9f151bd52b0f5fd6b52057f60df4c9ca6962a0a1b227b58909cc61083dd4d955778d1a7586a8192d3f192446789b820d2843cad5ba1c959e54a57fd58728c4fc0cc208c9a4dc8fca2f196bacf5eac0ddc1a273eead25b4716f351790dca9f837705ce57ead0c3a0920c31c8bbcf9592fd79d390ccfb166b6b10a3d6672b01fbcdf23189fa52e8a0c3275196c03e8d3e63eac28eb116824add7af3add894ca209c2245352a6ccfc4deb12fe398e95f88d17d7045689a4051cd131c8cc89df1e4081a08eec72f4879ad87c14fe55b546e992de2ff19b1183e14da5381304c5b0987aba0ddd605179dd2a607cae25bd90ab6120db43fb4e8d8e46162156d7bc6969ca4c90d85e09fd27baafd9554c46c421f1ae920f9cfc9f2a641487df717c219091f5ed1184a313ca461ca72c8794b8e83b1269b8488e7ce8ca28629fa95f03ed29ddfa6ddcf35f42a9035cca1ab676cf5f7720e41dda1101d58c3292a8f7cb33cf8a08b530d4d03ef14b2888654f48b9f4c3b272a152364077670f77078b89959d5abbfead3504be9bc9c54be28148105f834de6a9f69187862a4f2554d63543e44d3e7a723917790ea7e55b1ae8fc98b0acd272166a626f4fcad751742050029b3c4040c896a99c686e981b3be97f9faf08423ad1ebc74cc914d54d96551ff0dd35979825c4271a5f04919ab9bc7a448ace189d2db3f6ec6f70bb3bb1e8f97b4688d262daa2a21e6e8177cc1208716390c35ea28aba7427062ddc11899e92d62912c25ac43d89b3acedfe15742df27f6008d05cf26913a0e79fad755568171397c03059ce32cdcc8e7f98d5922e356132865b8cc55d686cd65631f62515bc277e224c3d2cfa392db83b498c1fa7b5ccce0af499db649f81f0ed34cd40c63e82d7155c3fee5c3756e9337e2a504c9bc730b6d04ad67e3a3a275209c241212b311475a832387143f370a64742e14156ee27c28ffcd322bd46c0d54c329badbce586109c2e827340dd9761a953aab5b40afdadf1577b0e1b2b50cc722df367ee08fc0f7696f8b34eb6c925b38e3d9d6bee52d1a14307d6761c0790c5ab4b8e0b67e9c920bbd157f358518bf386b4dfcf812aefc6c5085d43526d33b221c28a2eff85b1cf72d8843ffc3b2c460dcaafefb54f2bcd95206d9982ce99c4d4011b66c894cdeeeed591f10db689288093e51fae675e69e7873ada5e5396d1bd7e156fbaa622a4c604ff5c65745aa98609f6a8d57e55499c01e558d7b2a53cde4eb51d578aa4c05d3d853adb1c5b16cb52fcaecae07d6512c702549ab284c118c77451d043d795f144f0d3679df176d20f8fc9aee51f447cf25a36698158eefaa483ecbb8625cc9b4cc164f3d9a1eae6e41ec41c08585378cd364e64c1f419cb215714a8f464d64744d2a34e7fde0ea98dfe06e9f87effd5cdd3a9ec9f0e7c6fc774194e897b04b3f72d4a32c79a9db0580183c62add58f7d9f896edceeee2e3f5cb7d6affaecdb4ef0e3b502f59302180b71a35bfcdc682b7e1469addd5faaf12d7d7a1fe81a80206513fc3dad45f5b106bad4a7d8bd37c41b0b50a90c2ae8fc04b32990a4c5d32b1444a5256ac4590ad27c060b3789f14d0fd0963e05c302620d555c40514e9584cebb3f78b63c9e814dcae858fe1ac18f88a2d45168cf97b565e62794da6328e1efde6c89ed4bfb08ef39b40d03d8d4f371413542ecdd1f6f3c9ac8f988cf1bff8cf5135d2ebf89124beae5c691ec426bbd9edf9f0798df7d9359a02d068f90a1bd14ca16fc4346f51e2ca88b127e915f77f2dd5f2e5bcd4b70ae2db583ef7e2dd72261a86dd88ebdfb7864bb3582bf9bf6427dcfe158f6f3b561b69e9896a4549a353dff6c2b06c0df6a445d8ae7d8faf4af653c2df7f65c5f9a17d5181ed0b6d55b6a85b98cba18dd7a8464df4909c65cd2b1128c99855d1e10674d4709134fc521e08f2ea0c8c9073eeb9e6f1f54fbae948075fa4d6405082ea16d2ec103560bae773f640b53160218e2cbfebf02dc5b045fc4d24c291a5aa9c39b63ad86e0d4854108419f15cfc8aa00aa03e5a30915c205a21d182f0152b95670b5e00a5c049fd6b9eca769b0acdc4b7045583b72be3f8c25d60cf89e39f98777ef9ef9c6d802ca0498b96160460866140603653f17bff7e3ff2123704904ea0602d549137126be59bf6b608198ecbc493f1f31f32b13c4eb7ea5328e0c9019a01c6931ed99a3f0e8cf948885ff1c14d8bc0269ce74e8f13ac9a1dec06f0ce3a8d92f4b451c6ecc8e8987280f234418af63e657e1a9a52f6d39f1836e31739682579483285775ecbc0626ac3e49cd6cbede756ec920e0a9386fafceb5744d781dfbdaccae9cb87ef3bf8db00fab9dee72b2c8409ee91142d9465fb33e78d3cd857be7522941d7def8d1cf198edfa5b11620a01011615380454d99004031973054cf62741e26a3bf4d57227b35d6ed64f178118f0cc9707aa432b9d0375a5383b94627cc6b07effd227a9fe25ad97bd5dacf61c08ec0247c2007b237c472a2046016454b670b72fbd8eb0cd9e98c4b34c47987637386b706e86b57ce14b59d83885deca5c385517ed7572f216359633b8b63e595d9b7182efb8981ef10b092986c8e1da7cf9cfee7f154321b2e49501d2521e50ffce2eb211a62615a28e45101e5200542c8229de7c58b48564f512eb4151e97e986a29cf02a45dd65ea879ca9f19e3ca341321842db39c26cf0f570d42c060298070715e7a38aecfcf0cc9cafd4a1fa44ff3472230c24a6137a5ebe0ab63dc1ea2043604a3dd870d47b52c5891020091938257bc823ae25e9981d1e87e94081eae4e8478ef126f60500bab49738bd845ff315f39b5aa7f78f64882f2686838556a3ac7572d3fde760cf8c63cce725693f4c3144ee6028639b00e29c1e5710c5017f208628b536e07b22e3e185f6386eb2c38dee6b155dbd6327f1274a4f5100ac448f5fa1969255b40270ae546c92ce2e7070c6b7f76d804f4b9fed61b4b15416641694b4ec714d300914a65280c94e7c1454db072de5cf7ab534b0447e3c35d1368005ca1574a499ff4c6f2a339fb8cba645ef66f71cff89534aea3f5f9516974618f74bba81f79469571bc00924f3140f1e49d1286ec6745c330d8d5ec0411a5f896ce41941d37939a81a720c58b6b5b856474cc5e896d573b90c98e53b471b46b17dc8ceded1616738cc886b721a21b3e97baedb9a01de5bbfb65903675c93221ab0ddb27ba2ed6847738c549976f69274b37bfed4f53d8df921b72b0015a5e2d3e2401cbcb0257e87715c26def70e3dfc8f482d115d074384651dc50d8f5c344e1c83e6c901f7118a4276e829e2e9b25d9855527bd117192616318d55afc0c3fb25a628ad0150c96d99a383045c999cc9827623f1c674abd0f806b0c7979c53a4df2c93b5e4137380999ca8098d354abf9c11f456d782de4f138a193fe274234b5291e5600434813de91b143d5af1050ece1650c3dd924847a2f281b49772a1ffecc4a348089c1d66b47653fb08534d7c0aa01a9a8b922c69194a2a72ef0492cac0ffcc8aca9c4e1b428f85cc315a27ef99b39aa0ae92185ea898c319d748e462ac71cd9132d47bb0e7e7271b0949a6b731cc5834228ec0e6d77c00c2741e0aa2958e096a732fcb6075a5c4d6724a77cff5bb1a95ea887ff4ddd050041d56ea418969038edc8e924a93b12a9f685cef66057fa88fd68d98b543bbbbe218b36d794e3f035131891df0501bb641fd59dc757fd5b6e225b692937e90a28a2699420e7db7268e075b744c7f65fe636dbf00dc173d448bda8d2f70f007329141615c094ac3dfb2e0b6fb9c82563627644bc667bdf3e5ff707afba5bc2c984a9c123e28a8308b39cbbbd31a0189d2fa5afb1ebcc4cd8de8f1270c03909db2f8eb004009c7e219fbbf6173584c175d48f49e47aabde34c764b99aea7191023c3dda97f219488ea8c634b47c85d0a799b7609275ffa3bb860f683579319e9cd9e40aad03a84ce125c385858ee86acd413eca3b0bc466ce3c81afd2e0d2c423d4a7e25984a3e285ceef8a9c3f374ba51f5b16a18d86c0627cd449993c07b5c4271e8f8629077485dfc0b9b29476ad3020daf621d2e58e99ff321bf3160dce1141be326f090e38fe377c0456166677ad58a63f276ea1ae2f61c51c41031b06cfb4f941616a1aee9c8622cf8b2d5507619a5e297411d1435069e4e468815561038ec6a3a3f9f2ee772a735f9240351126683f9dc21a227293e5a3b5c1c07a0f3693c2abaf81348dc52726c915d7ce946d2ee96c6072f178e6f0af70d473f285bdedd40d47e4b012d36fcb440847bdfbe9b8890bd5355177515c614af2aa488c2892d491c918022b418a0894e1021600108201575668d326a2c88110615229e01e183b515995003dbf20316233422d842892d43478276e4b0a989c138f811010848799289530a4c4a4943447e763298ddc0691da0071c6ec8604c110a3cb180256478e2c448108f1cad0e8021c349d1094134b017036c88a201460c20081d5c40c0010ee00313a7221382dc786ab062f0996995a1617c645a2bf84ce01ae371f185e003018d989b305f073e2d3e293e06b09ef8a85a535e08de07b10e5c1ce0f4f8767c3abc1c330d5c197c334fd6baf1d9b86a3e9a58ec83c15c5fcb6379decb6bdc87cc4713ee65adee6bb329e4493cda7b7a343eae7c3c694b653e80c87cf490f52043d6838cd3a80dd31daa43e993565f4bb5a5db521376b9e68a1b69b574ef6a3dace81101590f07c87a288046a3b76b1fa7a33bf40422aa7302d1141004a3e06eaf233aee5292f5f0719dc19b7fef6a0ac95b7b8bf5b927dbf1821d5b5cbbf593946e7ca97e4cd21d9d1ff389f58e28761ce1e4fd5da9de6185bc2fdb01b503092da90dd31f6da969c6b65cb7a67fbb35d3803445feccfb75596dee0e24086c8cbb7fe0ee1a23039a4f0b8efcd0229af3399270e488d0112347828e143942e4c8902340477e8ef81c3922242464442848a8881011a1214240423f423e42478c0819316224c8481123448c0c310264e4c7888f9123414241468282828a0411091a120414f413e41374a48850112345828a142942a4c8902240457e8af8143942448888112241448a10214264081120223f447c881c192234c4c890a02145861019326408d0909f213e438e00090119010a022a02440468081010d00f900fd0911fa11f233f413f457e88fc0cf901faf9f9f1f939e223e463c427c8a7880f119f213e403e3f3e3e3e351febee3f5ca62306cf9dd7ca270c1d44dccb6a2bc56dabc3697b6d961c60b8ef9e8aea6de9676cfb1aad94b52487143a833a3f59dab32664e76c4a2ecb51baffc5549fd8567d36e9e3be347378a4fbc4b86d757497f77d6ad61cd5fda5955e7bfb1ac59b923fc5851a9e1a1d1d18280c353c352e50ca435da09452ea5e82bb931024870e1d5a030c773a24d3e00a0d1c20d320014e876ae8d0b67d49690d6de36e3653ba6d5fd21e37ee9a3b01c80927b8fb8e4e100da4641a1071a7dad27dd628d5f6719b0e69f29eb8466d98ee1353ab274710c1bd6688ee4ac9a71aedada69928431960e165adee339701039c0e915fa33bb27e2e6b53c63927e970ced8c8f6e458ab47848c0415213204e8c74796810bee0e823b67cb20892c0324afa59d4f06bf5f5ad59c8fed5aa7ea54420fe8034ee144f4ced5a440109f20355a44a7f844b19d3529dc1d0497cd48d71924710e8b14dc3f313e147ce517f40d31810057b8cb0c13b86719c095e33042e29e0d5adc83c8dc5964dc9df44a4002af8bbfd889462fb6db64b2a3b3db66ee456d41db5903d28413483c1c9cbf0addd5e893b6ca92146fbacddcef5dbd9a27767e82281111fdd1a1449496b0002696500206190ed9a96dbe2d69e170c100a8b85178a1130112cb8c03f418011050a0e08712442c2ec20cd961002276e812126179e9e14684901690cef8c0c352001540be40c26a82043d21b074b84252d2429524b4a8810396d9840e1541cd84327672b09aac405600358a20e2c600372c130a203b22052cf8e167c76bb128980fc49021f1c40acf1aac970e4cf42006049010e1a38ccf0513a85ab22489239064607c60d428c00b2238220924a22f3e086c114107a2a4a0c00103e8e22bc009b43ca00b213ef0190af3cd90650316c87001489417587c362c681605f880142b0554f12db9b206193bc6c8094f20c5f713812ea8889262c1145940f16d704606089013900501529af0d65040012c406404477610e108cf04255042000586d022a28008cf0a01900085941808a1c50101f09af852240a035f0630e5841d3c206c88620310510a80010b58f17450487d51c48e043c742f7852c6a0b172010a18a86ad89e9111b9040c4100317429945e102ebc30481f260f2d203d1c209a2c0f123f5600458a8f51c5940ed230a2d20101a47c0b005811ebc107133f02770a7029c10bedf0c5892d486ec40b46237ec254a14610f72b08601264841d04c84922e239311e103a8209165ce1783cca871880b270a105524c77212f4264e18206603a1ce0eec10c281cb13213001a2bee2c27ac5c8081266a3767c89009a300d9992c8840b2c619077420023ba09ca0c7f3947166881da4c082063f5dc1028c33314891821809c4cc870bbe3833b271c303c600805f71a38b334c4b8410c2105603f1813067c02fa4c8aa20a104135e589cc931040a27c80018176468a28a36d2e00017119afccf0f04a468c38b1c6265cc5081430715146d5421012433081fb614408b26da50c28c12a21657360c0138a20d1f90f0820208e892822e3e10d1c6f6220d5d08e64e0c1408401b2c0cc0a9861d7e886284263bb4818206a438432352019f282b6d8870434d74952fa4a0c30b6dd43ce0014e6c59e2cc5597cd8618649cc04c1025b8000c4628d9109300266c5070442ece20d98862044d9421c050538015296c6809820a01594c40040d0c408a8d1a304002a4203e3ec0812896b04165e54b182f3c9001144c4062e3a9014237354828d2801e88d8282206919a2c3b4868220544d8f8a1c5062d382004154294c1c3868760d7b001116818b2228435548065002dc0424b599870b0c6062c200b4050931a4e8ce4588301341065b09b02812c9edcac31800560c1f40312aba8dc99d61a2eb480881c1d0861e8b08135d6a806a0d2840f4e20a1810794b186d2075490a2f3d384000000630d1e1ec07ce0041619d620fa628dd9144e7e1023a402c14d176a9c7146c78035a690a20b2661d4e88209b38d1d5610200357b8bbb781851a1550810f2d5827f848f202c7bb91e3ee29f11e004fdcbdaa10dc3d2a37365e8d950e49d6dd8ecee7b016b50577746aa716c9a71a1f3782fbd62077cf8b4105aa444931256142129330458950c2267a4211ddd1b95f82b6b3a62bcd2ad7e7b57eca605bdc8716d17d6b0e2475062fbed54c0ad9dd7ed7bcb590f149a05dda5c5168885d88914519f7055d5c7561051a4da4d019e3d3106307164db497f18cd40d22a30fb0d0818ea0109cc8808dcb080da072c508600b1c5aa4704daa123c6520031d426ed8420408c8537ce0862859c0173cff9c58f0c1082c2486c8d0430a0e70e1a28a5617b10f6861061820ec2f84e0d021c406cb8b216840011479ce83098b0528a45106174908f1822bf402928aa90f3c6f85d1930ba3d4d08418338060c318b802eeba2201701b1758c0bd9f1e770fac5c390b0789bb1375878171f72f9fd3127707e2b2d7ef8a4b9bb8b3a490dc793fe3d1879e5044eb2e9f7c3aa4ab6f8c74bbb6b4354be93187b8db896fd2c64eb87dbbbf64b7cd5c92bbfb28ebb9c74afe1edfb44adaf6669184807e5e57a39b35c2586acca1bbf7688db992b6ac559769cc6115ee0eca5a562e255c59dc7774f25b9bddf749a63dfe548dc916779fe232978ebbe778c4dcc9cf656c2b6b8e223131217221ee2db8ac6535e61a041e017d7a488b7bb6be7874edee2bb8ac8553b3e5ceb856dd75b833b9b7662d16eb0377d720037799bbe370f71b7ee335ee4ef3d3a37fef3cd3ddc63d8acbbe2cae33f8241e9ff4018b803e3d4245744d88edc7c7a7c84fadd5808048233fb6a01e6c41fdbbe611dce5adededb3107ccb75048564bcc7c709d1f97513211fceb72d4d4d69bbd23270d947e45ed61d2efb6edc3d87cb3c337e427e7dadbb7b2ef3bac880bb6fe0328f8bbbdf2f2911fd1a25cb13e334dda1daea50ab27afa55f85739f45b3eab4bb03b97bd8dd7bb8ccb3e2ee3a83e3dde9d89f65ada2b49c9368f4567a31a5ede89835ebee3934b4cb533f148d925f96757477eafe91eecec3651ed519dc391bccfde519e7fcf4564afecde7febcefe7be3473966e5bf3a6b76bf7aeb98c6db46a71cf0877f7e13237dd1dc7658e0077d7e132cf81fcd2561bd5bf77354a6d985e6c77a5bb8c739fd319fc80b83b072e731d779fb9cc91dc5d874b5bfe2a4c77db8ed5aca3cee0f855a2ae662163d642465c9655c82ed75cb3a5bbbb58eede72f71b77fff689777549c63927e9c0c18b8d7bb9ba0a9da583072f9e0d9e0d2d2b573c6a432b87872c3c41d802994764137337b2b901f2dddc7c379fdfbc727e28c1e88b0a9693c4eea3af9c24762c8a42d8a2ad9a16adf9be1b2034f4c379a2a12d205660b0a11ecd8d1b7d406c80d88082118bd600b172c53362511b50306a51cf33fa3e572ce78a45bd1b2b38f40a35aaa13120566ca80dd4a8867a36395756608881456b72ae58566ca04637f4c361e106080c31b0284ece158b7e2ab0e8475938522c7ac533aaa13440ae784634d40688151b5030aaa1573c231bdabab9c981c1c64a2cca8d6e72607042ca867a14861afa513772bda867148621a34a62f7d124762dd9d3473d9c1f2ab4e847a59e58348b4d8882f08b18cbc8f75df9ae00b172a595e30415146c70820a0a1f0e15f7f2e485183ecaa23178b4455f70420a466be80b56ae502397d48bba680c2fd8408d5c392fc4409373851a7931bc682ce70a356251584e0c2f8fba7258d4690c2fefda8426a072d11675e5b8f7b06460794a6cfc034285e52a63566898c1bf96fb90f7001b970108954761395458214dabd56ad10f46d382516fb1682c463dd614cb6bb158ad298fbe98bcaa6fb3688cc658b11760b19ccd5af2609445f5a2c9a17ac55a39acd847a95e3954582e20545e083fea9f8b8b8d7b1eb5b159f2c298d7aafae8ab05840a8f90ea453dacc9f98050e111be72366ba945bd1c2a2f8436fea2b49543c565e1472d60f3f2c2168fab35d50a3f1a1a63f1b43c9d100ad34e080b127a3953bb15b6bcec85ad1faf0ff6234659ad50e7d3f13ceadac1c6c5dca045cc0d59c258e8626ec022e686ab156cfc1383c395bbf77d1fadbac9107e4a3c02e85cc12274313774114ec56ee012c670e012d2d0c5e08025b461dd509d2fe845c314c85e2c1bd6abf55118fd5ad45d406230186dd11b9793879fd24761d405c4719876629ea713b276f06ebc1cd88bd250d7eb870bc80f176db95c9ed2473d203098f7c15a3f5a2c17cb45dd45ab6e328431263f5ed4457542578e4e063eeff5c211b26809a18b99614ce872d947bd250f3f0f091b0f612a168bb1aaf88260316a138bc5621487c973c56e5c39add78b7a30188d81f1c2781e8e126f8c8bc9abf13caf2627067bbdbc7079168595096134067b167589b1014ce8a2af5906b3190d81030d70943c2f212c67eac6867ace940d102b4e4cb9e8476da0464e50c97094782f1c384c2efaca41933305fb4224ac1b1e21f8102d49d14a2b2b5888d8e2416193e346c78773c3e58626b6c18d8b662a46bf187dd18f06478927c686319ec714a330ea38321a202e1c252ceaca69c5be16cbf3cf0b4e1a357cb1e20b0d3e13534317313570095d4c0d5ac2d0c5d44080f015ba981a02400418a177117a13a1531716214b0c00a40859744a86d087aa5a3f58493f583940dc71dc8128f1426fb764089d3a2b86d3d4f4ca71ea1e2bc75fd4f34212c8762b7ce134b9a8e7fc50a2c3d3daad90f582e134794d5332fc78b5743ceaa23fbc97c7137af4a32e04d888a1a10930369e4d4eeb53924149cc0c5d4231575f844e39f8826ecc842e66060fc173a8a8938d7f343a1f4d924dce0f2fe7bbb1a11eb5a10102b3f9be1f361ecdf7ed5648437f50f1c2170d4d8c26a7ca0b5b542f23ce12c11a5084308fb63cd60bf6e3f57d30fa03465f300a63bda86034d4806caad5f2a1186d51970fd1d0168d51bd680da5014205070df5804cd5e4d0e478f8c1e82bf6a2b0166d8991227c515713a187ae18a42185982b65c259e862ae74117a218bd2b8e8d4eb454303a32f58eb86ee160d8501a179b96e62af168db16c5855ad10a7c9455f3f94e878ac1775fd70fd70d1dcbcc22e642fea1427e9c5f4852f5a75932164518ffe88519d1dcb51a213bee82b4787e70b7ad1cfcb71b97ebca8ff7851efe57af1788fe38829c0c686e70b9afa280f1161ceecb04648435b3ec572d5d05016cd6ee1d01bcac249b2c954708455ad1046772b6cb1583f582c5ac362b1680b674a8632de7393f34389ce548bfe50a213c6a63ecaa2353494a6a99553e5fd88e5e8c810d2d8140df5bc900432a71e75fac3a32ffac3a33a1eebc5fac162f1b83ad08614a1dbf0fc68d1a956e83f5a394a74429db0153a8bfef0688bb280fcf0280f0c4605a31e8de5b0a8a63c8f7a0e152f74e55079947e393cac1c6870b0945e34bcc0c6c1518ab9dfd01f3834b406070815af898685c3a4c5ca51f2a29e84e7eb800d8b8d31a10d8db5a82b8517885118fd581fbdd1f1947ed0d45098bbd31b2a4db19c2aea3955ac1c25cf7fd0d018a5c951a213c672743e1d8fbe603954ae9cd68781d6174475e3439f8bbaeb9533e539931665d123dc5b32b83caf015642166d0520fca84d19218bb6c2a8f145f8511bb7c95ccc95172a18659285fa9361ca45b717e6fc60e550e550d9d00fc8940d7db570986ce8476d5c5470849aba987cd4c60504489557e5c568121b1aa755add0a35470849e476b5839555e489343d5a2db0b5f392daa8f6e2f74e550f1c2580b896f515818ff168da9514518a32f8a83e52c6739cb75dc73a67e28d10979c258c8ea808c8a177e94c5a236ad1665b5e8cb6bbd7098e030bd28ac458575c362e97c39555e52cb63da093dfa01997ab5688cbe70583854aabc10e6a254aeed9109a306143ead8f8310c2cf693802d994cbe3093fea29a9f22a6083c37ba8a723a422a422a4c2c6c35172d7d1b9a12ab891951a6a7069c1c2da8925b16e5c382ab870f09d9b16cb75e306c5c9a1e29d09a590e1a0373e9c22f9582c168bde8001c17173837303c70d1c36de0d20afd07192bc288c5ef12117bdf9207613bbc9b9a12e2eac1a16a5b981b97080511b188cd6c0288debe626278b0fc1428f4ec5804cf108a73e88c9a65c43842f336cb4178653248553789e37c5f77db02f9ca24c19162bc98b95144ed172b55a38495a2ed62b9c42e6d1245f3805ec4b8a019105030d20234b2801d767c38d03b008a762b15bac05de8d2e3e9818568c032d1b0bb824107ad4e645068c8cabd0a3319a3542cf8731b68c71c4171a2e504516686841430068f080460d679c39238d33c638038c33be38838bd0c38cd1c519599cf1e50c2aba8431d344183347781bc062083301308325f43066aec2291d34ca80b2097fd0c0151e188383107888940981870851181c84c0b3451834aa00a3d584b7a08c8b09329e96d712686c117a9830685411060d2ac2a03101cf8a2f3484584220ca8040190a28434be861cac052860e6500808c36c840838c31c668e20c2e6768398388d0c39cb1c319339861c68c32c298510233c29801810098b1c58c2c0230030718186658998a9571461965841ea68c2fcae8a28c0e90a1a58c2fa111634891c615cf4c99cfcc9810b0c29071258c990e782d33aa20234be8d11b335f72fc2a4c1a4d84492301a18731e38b30691011260d1f2e504516a10f610142027cf4bbf2837b9e47433deac2e2c3e8d5fa6eb0a8d7927dae580b16a3af98eb86d660436b28ec864ae1e4b8b848d9e4d0c4983ca3308bccc5a5a68bf7b8ae70e9c2a58bd0a35d6868c68c202422242224824be85d3c16b571cfe805248bc7fac22cb2cf03570ecd17ef69b162748618e572856b0c920fc8a672782dcff321980b890a64532e2fc28f8641f0e0c183078f315f19366e4496634c180bb9b84c00a32d586b02322f6cade06573e541e8e5e4f852b346161797355c61b870e1c2850b17562bc798a91ee19725ec4186838b07612b27c71717c8a66caebe6409736820fc707099c1e6ea8b0e2e1cf0127e948cb05566ca861e6db572a6cc295ccbfb72a6a47c3e9d9007590df51f521f4e92242c1c2cae63433fea22e3867e30dfe2aba14464df940c07c8944c0b2bb4c999920de1fa12d6009922e232c3e5cbebe6a5c1cbf3a0178d852ef73c845768469645cb27d302644bf851282c23322eac9d8fca86700d88083ffac9ba841fc5d2ca91656185217c3a5ed883ccc3e165069947a76cb078a159c106210f396c6ee8946b8b67c6f36c68c228645e6823739961c560af1b33496c9a88c95a2ed7179b26bea09a9cef8beb8beb4bf8d11b59cb55c4102d1eb495a3c30b8f180f322fa441e651306453365cb4841f957589c55a74ea83d035868b0d17598e0e32def3d1503646861b2fbb8e178f5014a409d9f649a3957e8dfcbfeea07ebb6d596ffe6df5d55651f23536ad9e7ec67b6b90fcd7bbb2ac58ef9eca862bfd4dc97f0dc3f8243ef29c905528c84f84ba547faaccdde90944940ed16874eb6ad21f6fad226f1d97d85d9e4d45454227d1f84e886833e4d0824cbc72f7135c269aa1424dd0387f157abb76575e4cc9fa25c59bea6d6bd4da6ca7cde2f478040c0287f4f4ecb6cdfa62533f546e845232216fb8d3d8e9a33e375addea8ebad92627eede25021070f71f273e4e6e552df438ab15637d2cd8f782d9e890fcdc6fa6dc6f26bded9323f27f5f262962ec33e7242a264952590a165d75b42ceb88e43229486451ca545ceeb7a55fdeaed53474f71e9745e9e2eea03e6bb22855dc1d5f1268c819e504776fe23216c8385896afd395f2dcaedd3a5b1bb5614ac15d599e364a5a92eaa7364c71e3ae462c540139d9f7ed78c31f27fb7e6e574df175fdf2a156c840d04fcfb5f5f45c9b98c5155a4ed221f712e31af9393c1611093a898a88c67792b1cda688f357b9f8eeac6b594d5d735235a3a0e8c86f6d74df6a73add2bbaa2bc3bf58f74e3f66ac74bb76cc5849db3e3f65bc9d60db65aa7b0cf5ad6654d4ed5aaabab5f824e6240a07b7fedbedd474e36e3647dfdced4a2f7ddce679dcce9db75c719b3ed5bd5394931b9a98712feb88b369c78722a36ed7eafa797ca45cffda2595bc9fdff6b92a9f47ee3bd18a481013f9565629e33d561b896d7ed3fcadc9fba5fd31635cdacad2d6f23fa9c09ffe5673f6b349967849ca848dcba8934a359990d72a21afa58a1ae3ee4d2e8b0a421685828353a46c5c6a1ef25aaa285240fd385d4b4d49f29fdcf7ab9e6a8b93a2e0c6a5a69fb39bee8cd666c737750f792d950e792ba589af696f9a154769e4b554347abfcadee893bf33363f537a2bd5967e7e9c141359147d73b7a97e9b0d4305b12b739f9fc82f4bab04a7eb8e229fbcd84897183fd5ce283257dd4361fc445e5cbb4d2ed38fd58caab2fabeed91ae6d2a317efa2aff59490527b76b77386ffd48f74d26bfeb2ecb50573389dbf689d65f9a397ca4f597e4eb126353cce19bff29676b79f494005bd519ccb91c91a1a19ccbe5724fee4e87444d55df74772598ac706f364a34cd3a3474e4a74811a0ac8786fedaf262315777450a2a02f49f71524a828a00555c54501120ac937aaa5a1a010dd155a89f21ba0ae5334457a18e00e92a941090ae421901d255a820205d852a02a4ab50448074156a0890ae420101e92a940f90ae421df9d15528a11f5d8532f2a3ab50413fba0a55e44757a188fce82ad4901f5d8502fad155a89f1f5d853aa2ab5042ba0a654457a1827415aa88ae4211d155a821ba0a05a4ab503fba0ae5a3ab507fb153d39726284d459e7f6fab93fa5bcd31e5bf5dab64de9e4a5b73491b5ba8da3f29ebed97ec6a696a8ba4878676db8a64f95669b7976c877ad26f75efb4e487db30cd9df7298d461f273534544df2d67cdbf7ab92644ac038487eeed49f95180192afcf6aeefb399f475bdb25e17e2d2a8102926f4bd3acf4fed7a8ae38ba5fd3ddb619e3f659a9ee9d524801d3062e63a271d9521a2e5b0ac3654b645cb6d485cb96c0b86ca90a972d7571d9d2167787c95e371b68c8997f57976027f271637da86d737609f93a5c96e1c64e1b63a88b6dc55925b9bb0c52ee1ec368f7e770dbc2504585a5b4c64e50f973a7f617aebdd9cc84ac46e64985f11277cff9719b89bbbbe0ee555abbf2247113f95fd62a79b11359e2a5fb557056daaf7578b4f1bdf52877e6ecb54d3a5cbed1d3aebc4c34794f2577d7552d89e0eeb2a4292e4b6ae2b2a4251ebbf8887cf29ed848efbfe52a457eb6fa9176b736612ca5c34b3096faadcfbc6f13f29e182ae331ea3776526f937d4f7c94ff5efbe476717ef2556c5466b21befdff2e792a8c65a2bcbaad484fc7bb351d756dcd165228af9495b85b3299e660e1fb9e7af2a7194ce19376127a9b2ac476789a3c8cf78476127aa112f3977db96b666757da5edaea9c6c77dbeb8764695183f7d59aba5ad55e16db2314e9bf546b9bb4ed2d8741a1aca7f6dd3f7dcb3e775c5993d7697674ec86edb5c4d9c9f859dd1c556db2a8bd4c4dd3315a40b580515213204c8ea877caa112f3972ff8dab86866ed76e5c65ab2e1ec5dfd8c95fec8484e65caea727e772e2cef6bfb3fdd7644752ee0e44ebcf2459e9925412c59bee5ec968cbdaf94457504a4a32a23b7f95bb0b01fd9cfa564ba59ab755525986a3b64dff4afacddd1e1ad2fa625d1fca8809f29e586963a727b1d3ad1a7dae465da68d9df2dbaafa4b1b3b695b0e0d6d6d4b51df6a4d34b55d1276e1e6eb9e1c26af843c84db29de54937fbb15379a98fe79edbe78b479d313aff0832cecc0835cfd98d416b7296eb4381de5b9d5d246a5c8d7273df10afe024e6c0149e940a00ff8539564c4044a2a8ae6b9b7c5d319fc1ace5bff803e2050cfb565fedccdcd506081eb0c5ab38abf6b95cda62802dd7099cf5ddf4669fa9e6215154d9f94fcb256efd3afd1adcf1c256fa5a5cd3dbba772772a779f72778b734111180722e5d484c99188e4d4840994a8242a098f8e9294d05b719be617c97be24c4322e00fe8d34355c7f1a9ae62ded5d50c573557ee5757fe5d39ebca71b8721d7470af711a77bfe29ec395d35c5dcd7075a5c395fbd5550e573478b7b7fde770d4934f46af3da934f1490b4fa63c91f224ca13169eacf004ca13d91014bb9a73a51953bdb3f1a51953f27bac7c286ee39a8ed7201bf261c88aee4a79e850fe3d56abc70d49b95dabb5cd59db67935af91c11f222223f3cdc5dc8ce1127ee0e4449a025d01f5af5f93511d0a7e7c9fcbaa73473d6ca8705991018772070c80fe8d3737538d770bae2849aa014a7eb924c08018e6d97e9c99a6f6693adeb12bbed65aa62cb7aad52d2ae34cd5057dc139468eacfd5bbc76ae6f0d1d0d0f8241eab80869c45627ed3aae6a8465cd6725937dea255cd59d5dc68f5b5795bbdf8bad68a80869c44563587af542ea805f99ff4d010d5884b230f0a591129f6f839e3916e7c35a5364ba9b6f47152d4049a98b14823df4867506f9bb365eeb7de494579fe279b2859111e6e02912dbef55f11679b38bea9858c5f45a407b27cbb42fe2a26e4df263af7b7aaf53769fd23ce4f4a643522bf2abf7ea8ffac346a9b1b1ad2f7a9f01e1ad2e7ae3beac75bcb6ab4357ec2b6cbb4cb7857f2d6a6b2e63799943597b113a977f5a9887cd3b479eba19cae3a22eca47f050f0040de8f77c373b97b76199097fcdb8ab9fa79ebf2353d818892365756d9cf01dc41100cb2bfe4d9f5f38d6eec44414dcb5acb732ceb78bb96bc27fd5ce93f192abfea4bb1ea5bf31ec2e98afb49e2ee3b639ca6186f9cae383af43a7fd567aa3388d315c7e4ee4b2dbc45f314856cbbc9c556e77772bb96c4e34ddad7e227bccd5d3e72f724493f5787ee2e020b2e130286bb2bb97bcb3dc9dd6f7553ab33b8afc5e610d008e8d3f333be769d41216011a09e1e9caeb87b0e0dfdad66bcf5d0d0e7ecbe6716e2230414e2c3dd6974884677a5bfebd694fc6d9e39e32392697f59d6a79db1699e5afc5ccd367727ee8e44c8b69bdcaebdb6e63e9375d7dfbb1a0aeeee15b9df26b72a95bf963b9d6e55ea49dc74ab52f9c9fa50f9ab9830b95d9b9fcc4cf647fdaea32dcd13697f94bb9fd0b2f8eaf0a5ba4d48cba489b44cca3ada8b6f1d2f767277a25bddbfedb53613dc7de84bf1ff32297dce4afdae48ee7ec4dd5de862bbadc6a6bb1be17127afa5ca38e724770f2ae29fc3517fb1935408c49b22444d103aa31411897a579ffe6da2de5553eb5a1ee1c65d4d6d91b4aee5f864e36ef675ee0d70f7eab212d8204b7bfafc80403dd8766dcf9775d4e4df9bd51ab7eb5301461881fad01380d0fdda66c3ae2257cf0823d0138a2879df897bcb022d2890b8b77a68a5d0817b8bc95b4bde324146c2ce580b919100c599be1d5684c0c7fd5bc1dd4597ed98b0ebcd56d5775db1ef89477a4211bd5f8adbf6a5489618c6c1d6243de184316b2d3a2ff72be43fef9a107db1dde397251e8500fdfc0c39528bd4b715111a420ef923458a000d013a1254a448cde783aa8d14f209fa79202121e3d66716b28214d351f8141e51226a455a907cf27fb47a9d7fe32afaf9d43729081241b4d0212b1f9d5b957ac1dda3d024a9d00913d4539027f728f4884989e928e929aa470a4a92941393a3204582f090bfc7337f95dd3667b33982902cc88d209ebbebd02951a8131326a9f08869c9d353f8d46464b575f2392b457e155bd6fcf7937cce4a1d4935291232e127ad13abdf5fbed4d368f3e74e27a9a4a8a423a7a4262a2445ddaecd3b4a4849aa095292540895d4d4c429694998040595c4a4c424e59484c444a58e92523062b2644913a724a92326499c98a0a4a2a814931154529224292726a73069091326463b23f838ab2a881f637421e22d27b003c44066715808929c314595907b00c035423ce101879da185c905f0c719879d3973e6cc1930dc35001d8c3c61b3807b14896b8550c2bf9c094fa4b0d371d70058171832421177b1b004d20b9aa8fb0e8c041d4a2872a7c2e28a266178e1de0564c0d280971587f560220345acc1c45b3415088058812a87d9f0058b94189cf1970a36f5842f67dc61f5db5240f1cf054be0930f1c71676389ab29485ae0a241599c0002671c762403a316a209b86b0546d03c2f3bee6dd13141c7a580b39aaed06005ab04f8872467000ce4cef84bef6005929dce595a2079615d4139ebe9a98a041254f157010230420360b0827f5d80965a6b74e0b01a0480c4d59203384c8c1688a0c00dcd5d8c02d6f0818701fcf523480a37b470712f734573580ee62d6f9de0394c8b47ba661ecc7178ae0dbc1b5e0ca865c45901687900fb6231578be579bee303fd734f85160a9ec34c70398e97e79ee7b95c443c8ff52d791eccfb3c8ff5aaf2799f07fb3680f2bc9707f3cfc30159dfeba55343bdd6f7b5b0782dcffb6a3c333e8fc65d5eeb63bde74d7d9ef7c59a7c3f3eef7bb53ecf059fe7bd3e4f056f87e7b1bed8055c2cd80d6f03cfd311637906f03eeff579dec712bdaf554343e4bbf18a629e2b04d6091eecfb5a3fac9aeff3767004792eb47e6c94584f9fb7fc5380d762e9b45c9fc7729700bc1378feb94c2673cfbd96f7796178b18f04cffb5cdfc7f2bc219e102fe6dd7cdff7bd8ebc20dfd7fa3c1f1668d32336828793818f4f08cff5f5f05a1ecbf3efe9a3355ecb3ffb724af3786039900b788e24031fcb7b792d9887e3b1b27c5f6c88e509b1bcef6bd1ef8646c773791ecca7f5f3818ff7d5bc621fccf386bcef1b01ebe5d17c2d569597f39d9ec7eaf1686c3e2f06f33e249f079f075f072c67b987c37b7d9f87d392b15a5f8feffbbc97d7b27934217836aecf7379378cfcf8986036349f578bddc03e4f052fe679accf6b794b5e07df918f83cfe6837d2e8fe57dde67f3c15a1ecbc5f23c231ecbd3f168bc1bcff34cf03cf86a58302fd6f23ecf1bf2bcd7065f0eaff579ae9677e4b3f1589f071e8bf57dadafe51df93ecfc757e3d178b1d6e779de90d7c157036379ad58cbf33c23d4e341428c885582cb6379345e8b874743336413e587071e082deffb5e1fec3d990e1f9b25cffbbccff3bc1e87b9e92cc8e09559210ca72b144106cc0a40be00e3493dc1029a98608c4b01e1c2a38ae8c047552d1caa08290c0005043351a188a9324f95089225457840c652e5c0e748113c841ca937983062029c108c00a9f1824ce0b111443b738020da868334353ce8a16df978c6208179a80f092568e111e3031abdf980eec8c0b56830c569ae1f9cb600e0ceca8fdb980825a27adb9b25f175af0977f7c06594cccdd684e4ceeb5ea35ddcdd85538acee09b75d42fc5fd49464d9dc1ba2b29e2e060fd604d71d5e2e1aab5e44502f56066cc2043e2cae5ba818dc0c50cad227e5a3b6e8e60e295c3556b09cd06351cf000c015cd0a2d16581ed8ecd74d4c2926f4aa6199c0a3c6b581ab5897ab1c5266a031c232c018375e5cb9ce5cb96e7c80e0ea66e74c7145c3e3c60733c125c415802b3a6c7a0841436b872b1c40700061f5cc84c478ccced0e02a2126042362e16011c58eb86235fd0879d5bc9ab862d9bc7cb4786c7e585eeba6c553a3e42a01b6c2cbc7abe6357593e326070d0f9a0d602bb0d8a0e1e583c58506d7972b11a65a392a8ad0416be806c76bd6f2583daca3d6d3cd8ed7077b02fb017372e9b8e1bd6c58aed60d8bc5fa5830568c4553c3418b056b02cb00c753cd0cf682792c588b484b48cb8bf560fd9881e603171357379a9861f66afd8821d1d0f282861c91fa99365620822d3a0046035fce5bd40f58928c5038c108be62842124880c470c168505264e67b208e3810f7cf0c9220412027811022daca022024f2421041c6100e7f64167336050a60b316130f000196268410a0b5098382551fac0831d1b483101199e58400c30881d7080ef0737bc280195dcd59936d038434a941d1bcc426045062a40450420c0001f7ac0416c6185274c9c98b4c822031ca04096a51170a1851518a0620a248ed0a10600c0a04c08c4503185140db072f52453d20ca74c0abef04203189840145028f1030f4f8a2d4889f28429c984a19d198e165968c00005f8c1ca932da4c0a4946482a7e00b2db2b822031388020a062801440f56a6a4c0748209434688fcec64306bf999147c51822b3490010c4c200a062801c40f3df060e504e21429280801d7506389121c3748c001961d7480f2c4c7081e74d85939417386d5c6c7864b8d2f0631265a4b7c4a7c497840df0fcbc7036d7a5825b0e8061f7c1c783f603e583d3c1ead1dde06341a6490014bd6c271734386e3e3a6870d0735331a58ec05fb5e2f978be5f9cb4a8d081bb882d1c0685a376241301a560737523338e5c4745e3531a1d60d0eaf75f3125b3a160e6bd6da020004b87addf860342d1e9c0e84167055e3e4866cf1dc98e123f2c3d5a4e5bd882c7075c212a41900be564d6bc90e1a572aa08104303378aea1d9074866f85a3e583da607a4c8558298abd7eb83272b3a7018d5c04a32c30d573d689edce4b8c95145498719d335675c116d9a24342064301a168e8baa85c30e33c45a375e1d783886ccb0022368480081959819216e7c362e2433d89196928fc285060d5c3a354a3523bca4b448801da141024524a161091f3690f958c11997e450c595cd692b0000708070784e38609900eb1134430decc8ab26768365842909ab831aa533ae6a604c3851b1a51f494a35344b3751249104ae76b478826a5e431ae0bc6a6c92725a40e2aa26b6e4414d872b174be6f25e2abc6a5c26bc482832b2396982c4965e35b01e38483421b49c6876e4e060041f1b90102b4109d40833d4c440d8109c2146989e60372d980fd7102b88e6a615842281d1c06a5a425c4a5a42483cd70f1610d7063e34b1917524c9041eb19a0d688ccc70e4644324a6d30aa115c26b892b126eb4905c25b83ca009a1c5018e1f5607345c81423c968dd5d362b95cc869218829f07d620160bc7079628923729001062b4d65fb91d6821416a0386912f5b42485a521a1213a238800026d65000367c400630528148990e3a3074c0b07b048020915925018ea40c78d4d78f3d4100c141de4cb9add607c36be144cac865a8cd959e14c1e6981c56f5fda2a9bcddfb5aca3fe232d90807a88cbb4a0f9afae9a1aa7eb5259d623ab2f0afa39b3b8ca028a67e193858c0364c02934d20b072c074c92ac1c409213f7f8539f39e0239fe6ef7afbf2c9b27ec615f114f1149966a86b0d110fc9b4b3fd1b0d0d49511e6d452c7e747fc5fd1aa7ebd2d09014b65d2630eeb427f13844dbc0167a996ce08a5975e10668baeac20d2071df4028bbe28b839fc3a3aeb827ed68cfa82b76ae5efa38a92b9eaef07fddfe1a7d5d3f6b60cb2d9f660e679cbf4acfd54009927fdfc8651a90c9be8871079d644c69651d9340dd6fabdfbd12bd7baadaa98b764f55b47b25b9dff6493c7e31fd0b922f32700a4def13efd764dc0a2fbe5f5b91c5c12934fdb76a8a667d9cb85f77e0322b4cb12c2d95154aa872cd7d2e9232f14eaabb22d55d496d7b285d73d2d09054d10ee5011af2243eaaed6a13c9e494426e84a2ab59dc768abc96ea56ddcef85af1da5c59339eaa3911db2ed3e7ead53827ee2aeaafb237f25a256feeb6f854a3dd5fc56ad1aae6c8ffb27662a4dc68a5ad6a4e29634b24e8bcd832118def644815516e843234045455c5ce1dccaf4fb2e676796a59152394baea6c962c8b8686a430796a912cf105c660f2d434bc40974a9a27262f60e554f89ca23b3a53748d720125e4195523ef47e9fe5a61a3b2ac639114918d89795261bc84c4381d19700a4d57d1025dee2962f2d416c8024ea1ed9e4adcaf2d6085c9535b80861528632bf95b56012dee0e9eb50a24f11c66bc4d9b47fd48dbea9df25f1d93dd2b191a922a2a2a9222ca58892889c80a1bb97b082ef3b2c5bd98322f480e4ea1fdedd6d224f39345f9a132d2d67fb3e43e4d9cae4b4544e33bd1f9c9fa4bd87699b6c6e6141fa0294043ac9ebc53a461f52493a1a1ad7fd752ffdb84cedbb5bb6a6e8dc7229289b4626e849271ce8fd375293742216d5011a0259cae380a3899f15da5f0f252d820850fa92b8e4e408d092431812777f062f3a4e4efb152f2d61ade3c3cf9772de904645e3f4345d16587961ba190f7a368bf6d5827bf8eea7fa5285a8822b6b5cdd910dc96929ff1c5b81327812fdcefeb50025048000012e0c197263e55dd344ad62e6174c9e260d311947c628ab7cde14d29597134ece2a44bcc1dcc915211c0c2ac79d3fdb208ec22e0e3eee0cedf8c6b3a745b0ade100263408008082c3948dba13c24138f0e8d5655dc499a00011d5e1cc46dabab9f1fa0c30382a018e3e0e7ecce98f2d4fc557f6fd7d65dcd41f1e4ee4c5ce680329cbcef00313207ece0a0d6a736f1d6f4a4f2f99fc81c20d4801334004b79eafd37f2b4aada5a5aa5edad2a34008a7bd311147a2bb5e1a406f09031c0020cc00cf880011fc8b860c1c5caefd728c6b71ace26d5f67ed58d96f5bcb58982e49b26cee44e9f38ffed567287d6cfb74bab0ea8afad393bd6d224bf8a0b757730d7727c1237dedaf3f9e80932e48ff471524f68b927b6d1afd55d37ce7da6e113a683f977696d4f2c81f4b35e4019f0628a498a7574b7539655875e1d5e40976b73f9f7933a88d4025e7077506a01424e9071076db6b33656936aac25ad549b1597ff09bc96ee60f2d4da525d754e78019d4842e6c493a578dfaedd27ced486e9aeea28be25e5f9b2567163fd7c4faaabae093337fbf9abb0be55d68416f7fd9fcb7893b69aff38a92670e0eed61cc578e7bf3add041277908932fac46d4bdab23e4e8a892f3226acc09da62328d48649ad3fd7b6d5d9f88e54c6848fbba55fa3d1a4644b8c01c9df9fcd2f6b9526b5c40c5b677dd6f16b947c7a4ffa3829f2c9a2a2b2ac474554572a4544941ba1d89c5d221615ede810e54628a255cded72b5a3b5fdfd5a91d64043cedc6f2bfedbacb0d1d64fe64628454456d848a6840e0f97291103a7d0645bc06cd9b20577cf2d3e0e4ea17dcde651d7b6c8c8fb7a4c7e5b125c3c375ac992b802a7d074f95b243f09289f42bbd8eafba63eb5f863c6b6a1215a14fa1f959f6ac4a510d0cfb9ef8973b5485bd526cab32304f473521e1da2f19d8c45f96dfe938a58b42374521ea15387e88a5fdbd51cf9fa4b8c6ba2b6fbc49fb39b7c2754232e8d7665c162309a22e16c0642083a20384d11978baa34a95c22009901f971ff51c1dd7fdc4510c1e5342e1a9c1916387777970f2aa044e9254439d0dc63b0978b86f579beef5791163bc95f96f5a82ceb91161504b183115218d1c50807dc8cc88c38c200089841004600c0852096ec9c116f440b412c1901c5ddadcc5cc6591b7ec88216c1c5292de39c5fdca749837259114dfc2fded49e9447a9080d645a5ae0645977b5d18b2f0ffd1c8ec2e4a96ba6c5e91cdefad4e56c2d472b9ccd9bd535912c2d4ea4dabadab0cea499cb386c13f5eb2cea3a8a358bfbb5aee419f5b56a64e6ead69fb3524c3ad44b4c724cbb7ceafa59ca0994deda96bf2dee8976d2e466b57ebbef898dc8d2e28ea8ead6b7c9d655e988fc5c71514c660ec9cce5256cabb93e69245d737d0a6bae4fb942e98dcb287d2b2e491dce47b911caef0ab55feb30e79a6cf59760f28c7ae209776f015e134cb87b4b784a6c71f79240c2dd538077c45058fe78ebd18d3c53b85d4b75f357e124f96d173bed6ef8e64e6a6785f3d3107e5d9fa49820d15d7d3a732605698066146007e75908e1c5871388b1854b600020f0f2c3147524ba04d1850803332e000c9015041bbab80d3a4431f2624217b722c101ba486203342f83f802041398808f571cd4b03a6ba83f41807863012ca0b81304b8e080002620c2952020c4160207c0380a356011440e2746f023322b57f850012d3ee4080aaa87cc8a83381ed4a005b5f94e0b3ed00083fab9083b5c94a10282e4406a06a0112922c73b60e3011d48010957ee030621b4400d99e73c86886145491649b88e295a45bcb8c1876b7005842096c830c5673a5ce181209c94c0715c801e8000b52e57377450d0c50688b4f84d17294334f002832b9bdc120a4526c16b8ebeb822c304059c464802500738411157b1a5081c416409dc158c0a0735d8e064057f3d51a60009297af0977791982ac0e4aea740a2788103496b0b08eca042f383b75800c28726640802098b05e1991b7ab0171600aa8c305778e28aa5d33282012098f1f289290112471be470f5ed90c1034c2a332f1f9315b9032531d0f2dd3822840d4b977a5b4860021b8461858fb765892412c8321be3c10083130b50a38b27cf09141518401121a83784044922d0008a325e0e2c04e8a1e5c0e266320f4ad6e0c0957be1d3346e0294f12f32ec114050228b43d141090ac01ee878111cb0bb870ce0fc07164ed0e2a668c96908824814379a00e3e7122b96c86081256ec511ec94e080166f4189a72f9880e2ca9bd00c61ad9800852f21a5904086e98ea4254783528a1dfc04246a3eb013c47523158718722f04f98f171d170d57ca380f039ec2e4548185eb8cd0811910b270e021cc7a50b8a2e28a539b1516352419c13bf8318409333488c27d88b0446b054398c077c0108215041c6980ebe891450384e410c4332803012588aa40037c0653a2b2a10726c7b144c78fd404ca380e05c6a88247931bbf819202ee220ad06d3668238a1e1890c069ce987294030531f018191a986007213e8fd58c30822953ece03021323fb02c6186bf5e10a329881dc07057980c30104601d65d4435e70520d4e02d287e0460881c2e78eb0897081411840a676d200268fce0a53a0bf702dc112cb0c259321007890ea8e09f971d03177af4cf4a0c19cf04a27f4232482de0e7c6bd361c6064822e0770ef0a2b7609a404b947448e1a0ea80206f732d1fe028318f796643985e8c4c03d12be78f0c10674dcbbb981c05665873b0c3c10c1f5c200dcb72080124b5c4000ee16108090323b27ee0bc0828b27988c7137008c2cd3c1903b0fb2aa145a1eb8c7208198030e00833b151094c06b2dc0dd86c4aaea82e31ea504b50f062b7087ba6185303e9eb8a700022e84045871371a02044042bce06e42187393f0722f424512100ab870f759b2586820c8bd04110361e436dc4738e30b129460b983e0568c22c8c2fd032a55e0d0460eee1ca040231a0a807b0f9a10326a74e0bec106a6982141e39ea30a15da081fb867f0554865b47097d9b0c4088440c3fdc6163b70e1840bdc719cecac6085e96ea3c68d13c08ce05e73811368051ee04ec3c4073d94b0847bec8917a8a48001ee300edc2136700177d82705e4a105ee2f2562d49c38dc5d5b7042b0c3e7eeca2166cc0a8cdc5b580460458c16f7560f2b8c18000b77d61338b10d90706731e1c9a28222dcbf346c68e8a1c7fd63a2090d040085fb6723e19b3670ff8248400a006471f7c4300294e173f728500480d001ee9e0f3170fa02e6eedd9e886e43b87b465facacd1c5dd0382860f458edcbdd60b0dd04101776f81c743dce1ee1e08f272c50fee2e4508b22849b9bb124730d143cbddb37c8e0a15dcfdca0a665f6aee5e458d323060e5eed7851d02a071f7110524369872f7157472784289bb3ff1b8d9c207774f42c62e08ebee488c0853c50bdc7d480604169cbb13d97932868abb8323a8c04801772781874f130db8bb08608878e1cadd819899fa401477f7c0cad25490bbff98a2a999c1dd7968c101490feebec10741981370770dbcb042092e6a209385bbcb68b828c00adcfd062e972374f71b18600d68e1ee365a80282273f71a2a65f4e0e2ee34351f3fc8b87b2c878218da70771810576140c0dd5f1c28857070f71707b42e94dcdd0543931684dcbd15c699e487bbb7ee0f2f4631c8428a20868808e2eeac20902900eefe9d4008066c71f74f88ab0390e1ee9f94cd171ef4b3c78a4d27f16bb5d603081e1c4a24b8bb03e181bb3b103d40204692104840870135dc9db58209c584981c67c870f7d616239478d260025f8cb8bb870210519860c1c10052b8bba7830b3ed8c92e2226dcddb3004b860fa410a60aceddbf1b40c88100148870c506dc9d65c60b5a6840131818e205eeeed10e70a48912102d90e0ee1f142d3cc0858717627e707716979b1ca47e3cd1022677779d902b3242888fe70977ff9624a190021d82e88086bbb374f800260c21b248e10177f7cc245c804002a088c1c3dd3d072ca0e6385220b1c3dd5f041080192fcc501b48dcfdfbc28c1f5e584308141871f7560168b021701b98f2c2f7dfad7ff7884284e0d7d514d2d404d268bb9253687a68c8567e142d0a7ddd84823ce45b4aa3d5fd39fab89df111583ba39eee8aa37dc647d63e0593c0b2ac47e03ecd6be9e730ed5f094bd1fe6d655947905696f588f6361eaa8235c3a77f9b88b728fedbb0ed5af17eb9ad4e6b864ea0ae22dea24dd4fd15f11669d486cb5a654f2aa4154b8c4d11ccd8f6398cd35933fcf16227106f11a4914c21ede23b566b8651229871a51b9f54a8b66688b40b33ad4708cd9a7597bf0a8fda926fad76556f73127057da6c98bc15772d99311e4b3ce28db3b9e9aeac39bccf4a2f8fa61aa90dd721bd5fd39b0dd3f2499cd327f8ba676737befdb5b9e66c36a9b6a4d5b5bf91f54677fbf7b54c4f2125ed27d9813f3dda525bf97a5b6a048220e5012ac188f2fc9460a4b36f25ef8ffa494af1b6795bca63741ff78482e46b8d234ff271a336adce864f484e215412d0967fdbfefc5305f26fb72a45133f3f9931d5d8a4bbafe92f4d5a626cd6e8aee69c74d556d3685affdd23def4a96a4e97b6ee27e9cdbbda5bedadf1d213a877f94f2a4c4f61c6a02ecb0aeefbb5fc4cf5892fceb8f1ee74d541c09aab69c3a22802d12789b34931120572bbf656b7a6956a6bc3398cd381bba72aa9f2e76825ada8ff9e6091dadfadb7c6651533d6e35bfdc5b42ceb675314b5adca04f7eb8c773525274fd486a97e51b4559925c626a5f7766dcf67932a3979a27ae7b6c636204ab7c6385ab3d554936fb39407db44f16250935f5562fdbf71d5586b94e7f7f966cd63d4ae26ea6d453397712288755973f81e5150977f6fc58d36acf715a9e44890e6aabb3a4cd26bb735edf8598b23d6f9f5b6e12a8ae06baba3d13e87a3686fd2df95b4e4ad23ada6fdf1b378b1a5859ff111131ad5aeb65f49ccd82682b4a3dbb5f766a368b4527ceb58da2a569b7fdb3cea6aea7d62b0ac27950fb27bdcdefdc5b7f2d45c4d5cab36cc444551a491ff598946b5adb9da6ca5bae64abe3ee9adb8ac944632d55c9f68175bf2b7b63a7feed4ba9256acb99a2298d33557f3d6f13f2b51907c6b9ee3883fdbecd3cf47f4d6aa2f3f535d478ac5c7ed8cb5fe713c69d87699a0cc13e724349a0e5f1add950a57d1df1ae374d48629254b8b1bf7e336367738fae4eb5aa3e457b1d8762dcee689f38dd2c76d50ef4f0292aff1a53c9a2cdf56baf599bbf489825aff487efe7dcfc7e5fd5c0e8f9f9928a82da596664cc9276d15d33e4d4ade5a96a7ed49bdbb955eaca744f141fdd9fc4ca3d1ba99f0be7a8f67dedaee5b6bb8ac5127265129d04a75a5db1e25a1d15d9ed5f624b566485aba5fefd7a415f7ebfd5aacd256fffd1bf942ae3ef57d7df1a8a3e01e6bfe7d2dc55beb2f45f22dd5b6877ed59428f42f1e455b15a5d16b29fd5cd5f42b8eea1f2d792db5d52f2979ebc5a6aea7d6f46b3cbfb1137d7d6a5bdbfada7aab3b9bcdef84eaafaa5fbe2e932848bb34a8a6261edaced5f91c8ea227d0a88d89829ada72c636a8a62651dcfa6b5ab4d52fc59ccb691b16732e07e230ce14aaa9897ead1ae1b6d589a2086eabdf178fd75e2614dcb9f9dc64ae38aaad8ea5b76b6d968237f0298f2e6db5edcfa3a6ca58b7ffd2c76d5d47b2e25ca35fc357a7ac232ecd1fc74abf46defab51d1aeddaba6b5887569af1a69b8abba7cab84dfeeb537f3ef7a944c18be957d9926afbbb52babb95820f5acab371377bbbf66b94c4b8fd394cf5dbf23325eb6f5d6dc6f766a9fe5ccdd5a4ba52dac6a5a651d54d999ec2db89719b0e25493171a2a0aeb22795b7b9daa969c65afff8977eaeda86717ea2603e494a37d596ee9eaae25dd6d166bcb5c595e68947aa2dcdfdadea937e69e6aad5d31b52d3e274feabc3364c2bd576e352ef903fde13df5be9aea4baea74a8d55f32d7db677ab1bd56047123369fee5a824946a1d179b3b68bc74a6fd7eeb62debcdf6a4f2995ab3529aa841bc29cde16ca3bb5cab68595a1dadbb92fa71d7be0d54a2bbd2342b782d259f3ccbd152fd9fc3e33ef5598ed7d25ba935c39c6bdad9fe8d40bdefdb722ccbd3f6faa44c4fa1b8adfe927ffe4945c8b6fa2beed72268c3389b95eecad19ae11326a0352bcd4f95b14eb4d93048a974ddf4da8a1b7b6c364c1fb7a3687eb23e4eef5e0968cd1a45c1dd53d112a8ae666d4bbd7baa27f1f8487af754e2ef1b6852f269d292f0288a92bfebfd3477e66cc50580065106671dd536882e0e0681450741037da8b641d03a03e2cbe3b6898118c23de7ce9b3b2fc964f50f66c029b4fb26fee1cbad5f8e3f64a1c2e60fb81f7cccb83b2eb5fe11cb17700a0d8b88d3f6b1d0ecb55874dc872ddc072dae6d3ed4e0830fb86b0f65f29bb4872f610f3bd45d91740f4b7ebf8798ee2f0f5e78b8e23c40e181c70e6476d8e2be83b97f07243bc45c07303a5cd1018a0e348732e0145a0e39e0dc73f0c1c18ce3d0059c42c3e10a8725700a0d07d9953157b8b85f311d9c42bb2274dfc457620e4ea181b921cb0db41b7c6e701bbeecc6fb5b5badabb9abd990c5069adb5083b85fcf6af0b25fd780c57def1a68af6bd0995929034ea159e962e5cacc8a0a3a87452c5ad5dcd561b2c478b4aa39ab8ac57d925627e236ce5f456b118bb65c25ee6af9f9331e45ab9ad3bfb17edcf8b9dc5bb455995a87715ac4b7dc5b6bb23eae52615c8ab76b75aee6fa6434de9d0ec59a78f1950de72b2019bac0381d8dee6a3cff364a33eda6d930e5a1fddb68a1d6b57c9bf86f13ff6d62d12bbd4d34ed46bae9dcaee2beaf8b848686c8ad4553c760c6a748e1c1385d142914cc36062eee0e5e1c430c48dc63e0010319aa9afb8b290c5ff0130c59dc4fad6b09c3938364c6365bad5230f02837ae7ac1cbaeb4babe70be401d3c699487d48fdb7b575d712e94016fd7851e74f89ee4dd6311365d90552173cf2a5faa6871f72aa67b95255ca577f5eadfd5b26e6bd6b188f2d4a322fd1b3bf98d9df094f849a708495f5c4435e225bfabd7d6ad6b7557efc655562eb0d2f2396c45734b7ec5e5688544c98a475935ad3a32475deaadb8a46519eaae3898b1ee7550f0d66d5c46d95a1518b8aaeaaaee4afc4441b256d1bc4ac7dda9129413a7d38cbb9f5c78ce2b77da6b5ba174ef44a3d7da66a78ed7a80e72ee2fe0eb9d65d3665b666fd96eabb5d5e690dc4cd7253ae60ee62ffae62bb32c74d2e8102a63dc3d5f9efdbb90cad5df9bad66ae8e54a03888739fa3325484739fa3b285c9e5cd2b8e7b2a6c9a38f739913429f9580db38ea712f9dad65c94df161d6d5d97d42cf67107cb32a4b3cbc5bde220f9a57966b29e54e8e34d3569abc24bc49d36250a8de6bf5d5c5292b4353abb1ee4bee4684f68e66b8c1b733bb8833ad2e66cb91cee2005495ba33aa5524c79e5e0b5942c1f47b5a556b7672514f75247db32e6545fdcc119d516772a2c0ed24b65c3a59e32e3eebabf535bd4a6b8383885264e594931418a9afa291e6ecb580fd82bf7d2ccd9247457cd209f67f629b43edc2f125354d5e498247ed1ce6793bc5649ee4cc23db9e37c70b12ade4e706d4e146f55371166b62ddcc1283048cdd534f1a617d39a6f5502353dafadbad0b6e54e11a3d0a8eeafcdeada943cbfaebfe4df8bbb8b6559c5cf024ea191b9e2dac562fedbcde66dc53741fa4bee5e1ff73aee471f73f0ab584d7271275f20f1a666d5e95c356e63d0ac3a4dbf1c77e3db6c4985d08d4b5d473223168af7eb3ae266e3e3a4467777128fb406c6419269d7b238b893d3c1ed9aeb13ad363eabc1502b01dcd5529fe569da5b73b87c22f1a8fb5bbfb85975ba6631dd9d246b45e25e7938ad8ce3527c1a185a02f2dfeaadb9a212e3da5f8ba7689ff884c88208a40518b4a0a585215a409a4d39630a18076bd8ccfda999c07bbbb6fea96b0fb843a3e950f27b6653b04cc94de1e10e96f8946246ca172958aa265f0a1477293aee1ec54c388b428128b7281fb060c6c11f8bedaef975adf234a1d5d2e66c940d536d495ab62c6871a7d5fcb4190b341a0b321ac59b66c32b2025d1d13c57d8b2c295575c955a21079430c01dba53965587ee72ddf72c7155594328d7e2291343c1e2b55343a139883194988354a3a5daa94fb6202dddd17952cb7c6aa727b4273ab4fb4bac6ad3d0102d0ad54f5c9ff45a275c1c0c5262ece4e95eece424468d9a80d1440ba8b3adb90914776fc2c149e5c92aa586d496bf18975fdbd51c296593c211154594095e8b53d0e15237d1db1dc98b6b184fe1fdb92824da294a06e28d2fd41710ca0a541215cc501ebc77b75615b858555baa70e53e53c107b4375cea3a32d127330e92afa34f4f11983ded4aadbfccd84633c69b4ea10d0dd1a2d06be993cc73b6cca78d3219e3a710d2d212e3272658c012639b2913288e315252ce52ecc444875ad51cd596eafe6e8cf3a8fb4b5e6c54f3b6fa22dddf6bf194786daec4d814cb5ac3e5adc98bfbace90a94261dab9a139b968071f7d9122e164f2db9222e59a2335362c6ddc59912304ab628b9721795a8a04592a9c4f8a928ffd09094b82bd4d1ae59b4aab92ff7c619b78b76748a8aa4889a509e9abf488a48bc36572bc238eb2f315489f193fe12e72229a2ac97c6804b5bdc974cf7a52577f770c97b747f937cf16b294da2b3aa4d344d5a91b462121d2533ee2459bf2809f11b5715d5f03c511e92897c7d8a4bee0eda241dbf5513e9cbae397dea505ac634a42c7eed0c0969b455f9f5c6778644c2ec882c31a5bae2cc7ab4038dcf8e68b3a39a31ee9fcfaf2a5fe71eb7f1ef5b733d6f74e38b1bcfa89bb199fb4db535dae246a6b6746684c4dd6ff5291c330b15e0e0eef94c7735ba2bb82d79ab8d1a1a92fa5b35ff56cd10099e851e805368b9a88848e713d77037fb5724efdfea93ae6511e5f92a36caacbf440434a409de9789f2089d667d9c51936d6b4550484b444644e33ba11a6b0d0a29e3a38c6dbb8a78dc186771a9acfbe22a36635c91eeaf1645ddc43cc9fab8a29a9da21dcab33f2a8ab4f9d4353fd35885cd8c772d4b7cb41baf4dc4bb8afbc4e2e7ec364f9c937c59b3e689f34d143fe3a3f262d13c8b9688b649fe2ef2a9e92543434343e3576d5ba33c42a735d27fb1dd3bdc6d4b34be93ddb64b44196b8dd3754953e5aa138b9c28cf1251f8744434be932227a223bdafad79eb8bc7a21dcae3a4b3b34f26948764d2a9c2e6f84ec82228d1cc9d5fc53a112d3173798909a7ebd293f8e8622b8ae715cddc295ad55cdd1589acbf248ad7e674cd7f44872f25e911211e5df3ffae1422e30eead2e274b467eb6aa3b76b85beb883a45029b4c34819bfd83c29881b7725efe79aa33c9a164523695a87cb12dba8de555d5943235ab4b53323381abe467cdc7d1634a6fe12bdf69e4147f82c284a508f83f573357f9083536845c01461e2c92a366a671f59d526f28b9c501e251b97511b97e2d0d047511e9289f2602745444745524f64c5e5ae9a24d3fe28d21625e1aa225bfd2544e33b79123b118def842cf110b3e7331def90a45308e8a7c9ef9a87f000f28063db65da1a3fe1b67d026452dccde280908026931eec444d9801555cfe6c81efec8709a75627de2fc59fa71f9d990f191f289cfca121291dbe3e393c95ae5254ba6e1f21f7a39990310e92f76fbabf9fe94c88172156b78e33215048211aa72b0ef4a2ebc63d17eb13cce220696d20cddd4c320379e4ec7ea8cf55272a5da57ab0f4d07a847a64ee3c2af85cb5bb6d8b8a9e8686663c347710c72304ce786218a72b810cb8672560d9d9d54a803234245502757712cc5430e08c842b900412623b60e88e961d7347a8ee50e98099e96471f075c59934d4a1e9f83818c40cc6370818f78b836cd141ac9e6a949a05f101edcf46d8427fbee16cd26b69b5e13ac216f029761a81e656b311e84c04323488085bdcc99a13e14a8424be4f1b4e575c4e2ccb1ac215a79a850025041d31bfee6de25f0c42997bda3e83b00504118425f16fe4794110c1fd73566a969345eeb4614aa576655977d14e2ed7b2eab2ac4745455463cd5bbcb68827ace1d9956595a23c479487f2508d354be5ceade96877dd3ac808fb7e6e8ff5be786deedadce76a7e36493b3e793f879bc4f1c9a2dbb5b95c542445f4a5794a9133fa644b9b0de38ba92c876f38fb600b904632d13ee8025eecf48100284949a6a50f3470af5fdbb93eee7e296adc3e4351f777e64116c739dcc483eab75aa37f719307b48ed5166a4be2f27740e6566b9f3bf0024ea1cd3ae0c186c57d71b689d78afb34ab3e9b9ff1a8b7d5dfcf788c1a1a92ca6f9aa778abb5d2d64dd6c7ed44511e273a5b676b1349317f152e4b9c49a6a1a1a25d7da2bad2fc5bd7dc8eb422f9bb7e9e7160e6cdc1925b5c157220fbd1a5b4fb9e347f15a6ba2c713641575cd4ecc795fb8f27077ff8fc70cf67cd86b7f08145876fa53e9e707ce663e643e6e0e7700f14cc7a607130e3cd44c11e4f396d6fc58d9f9bf5e031e3b1c58e927fe9e5c165c6430aac178f968ace78cc768c0177ed715b874b3cdbd105bc12b263c933e6d9212b6bf666cba7fb77748312b83b58c4447988acb05159492b5a3d7999c8fb66d40642b30d78cc749439673abee8c8e23a4cd2e2aa998e2707a7d074e8805368628e3576153f5b534911c94434cb719503cacde1e30e6a30e6739d6990c5c16d671ad0dcdd7bf0c5cd34e0e1387f15a959065dc68be9ae94a664491323310929844af2d4445c8a0a97442861138dde8a9b32b072cf656ccb6f56f90c96c05bae33319ceabaf53e31c5b708a7eb126ec6e59eb32be2cf6650dc67331dbfa7ac8d8d6fd18ed4538d4043ee97b76b6fd7ca74ce9bee2f0e330ee2f882e32ffe1cd6210e1f4ab5bd31a64677904b6f6c719fddc039589b66377860a719ce98190e1707e9ce679cd3a1bb5b8f663850dc431c1f0733a64052331c0767375daa4edb9bd5f8d2fd3bca43c31babaa939add20f152f7b699cd18b59d7e9bf116f7cce6c946675663e6479cd568c05d57a2cf59a9fb385dc645a1556ddad8e64d79eaae484536d1bc99b5d79165bd7d59da9afb6b6b6e46d3c57de7198de995e62987331aea1e2bb367b105cc62385b7336ef6a7e9ec574c8cff5cb7106dba2a776ea196c8b83ba8633186e06a3eebb5ba96e82cd5ebb6de65e5fdc1d3bcd5e5c1c24ff9566af2ce0ec05c5b7cd9274f692cd5c65be685716f7abc3b533ca6535734171b047d74e3d7309f9cc256b9599f9ac0586eea846bb5b4e80b468a7ee8a4479489ddaa96ba72ee2a92962a2ba52225d74fb5c7745fab70d0d49cd585b5cb3ae5850583eb97ec992815368649d7d6448b27e5eeee70f0bce8afbf5ec43e2e0149a38fba84ddcaf675e19f18bbbd7ce99a7c57ddb93cacc83019c42ab9d5ad4459447670adbae2d22998894b6987917dd3bcdfc8afbae46b59d396de642ee33e7519e29e3e0192ef975264c9db97277906a7b66c91dccd5f16be4191dd7f68c836d70a1641b58a0da30dddb40e20e92656d8387bb0ef2c406995a568d4d2736beb8bf8dcad8c0d1abc3e4be2716f2568a0da19badd18b755d83056b64e160c6bb9e7847792896b2bb1d1631511e29221b136c49d28a6b58adf15485b369d63568b6a6d58bf7b7d5ab51e68b7b396a712773d559393885266ef3c7b1aaf1a44608bba2ddbe2736fab7e5d7d8c4d9144f52cc78d77c8ebb8a39ac4fbcffb32d0634f718c8a80e4d030cb893c6965d8deed76958ed6b7369e8287199193096fc3c9a69c2cc684686371a5ea08145e392ee13f32025511d2ebf46f75943c304c9d755dc4643c71d6f1d2a3b630cb893b1adaab8af699b3b834bed8c2b7e06eecf5802cd28e3b527290f8d56d68da5cc0003565d0e9b9165ebcf3233a0b8833b66504a7eaede32ccb80e97466570b95fc655595a2a1d15520692b08cb2529db7fe4c77db92f6a4624b32c03878b3388af126430b59e225b2c43832cc9ecfa61119443425a7ff2c35869931beb8975534ffa9c6c8e2e239064e8f21e4beeb93a238460dc94435e225a4d5f93fdbf4ad96361848c1c0c9d7b9e77e9c94a565c03838454a1429f496d12255e6292ce35527c610623cb93b782db5569f3f478f28f81793364cd356b5894675c58921a3551762db65fa010a03cbd65f1586a9bf2a0c24ee61f0a87ac10b6ed7922f58c2bd6868488ac80a1bd5b2ace30b90b8e3b6d5bd80475956b14c05e38bbb8b6068a9b24f8aba823183835368e4ef138ba4ada6986db76b499cb37af2ab585df3d7fca2bb1fb9cc055d5c5bdc1577509ba10ba0b88337fab906d12e005bb085d36814b733d6d11650b5e0c9cb1d1d9a5be0a036ed68b76641095890c541f2b725731d6bfeca02d359d043660b77077327a92d252f1e5ff75813f66b5a33193257f9ab584d66c9ada5f9d889d2c749911961056068cdcff3f64d9e8cc3156871d7f9aec08ac4b915e05081142ab8e2e0e34d773cbbb2563776a2d556fd14293c51a45050053e0e565da8821b590a309002d33d054fee2099abaee64f41c639fa8519f04f2af69e94bc35f79be90b2fb86d3e49775f94a5fd020948bbb6e94bba6b130575b8a4181f7d21cb282803a2000c4e6fec84822e200a5c40810e68ab1ab7a9f94f45560a4aa120963b41175bf3536da14e8025db7a7402f3043cdc411dc67d0eebaf95f59a000a9ddfa4f7477dd2d726686282d7182eeea0105da90ef217d36876c736d12e36bab68946ffb5ceae667b927e8933cd78cc15a8a9ee891be9ad47b2314b94690c0fea45184eb4edb359b4ef8ff99f4a8cd39f715bb4aa39247daba9c5dc79c98b6ba2786daea8ac24598b8086e0742d4d262510aa620964eebeab64dcf38b98045f3e93600b09acdc5d24c1d38bbabf24d8afbb30239af5731760bad0d28555fe2e96bae0e1fe65ade6bfe55975cb8c008cfb08b4e4fcb627c57104563e02280e4ea19d23a05c98a917d7b8d862b4545c70294b9cf7e5e24a73b1742d171db88b65697163d1bed6ac4dff59cac8d6fc385db72ec26df39176e417e92656b58988ea9eb8a326b76bcd5317e97dada88b767488c6775234be13b3a888f2107d3e3536ad92ca7a5e261dde028a83fb9e1889893a6d2104d22d5c5bd229045b3c155408acf8ef6a47ac75a578e72cd541b6a558539eafb2e52bd121780a818e0641190777eea9431f045fdc1d04c11512d357c1d9168260090431777721e47fb6edfbb7e6f29b545b315b4889e1e2ee2ee674b0aca3bed5eac92b46480c8f30661c9c42b38501e3e0145a182e9fc36c5dcb8bb1a658873922fb8019777087fc2a5bca3e00c507761f28f2b953bf4e481615511e0f78d95afc8defae2259e4443a15116d6d97904f4a95f5af2d2fd3d2fd72684849fc7c9a9f71074220eb801607ad9e3c6fb696abda92dbeafee6d3a46107ae48b27680d6010ada2ade370443c6419e5d597521982de5be38ac76a834d0c936ba20059942cc8c80000000000063110030382c188e884452c96ce53c2a0f14800378b8648a5a1d4aa3284721841c22600c00000000000000300400a242a4947caf40a86d2d8a2043f4b6a65378d87ae6a6ab230be45da167914bc20d90f0fec128a4574c60adf3063630b74488254ef812e75ecd5d5912a184e0648dbd6c3a38acf26b630308eb6bd7a1b8759bb6511b2594fd8a19c0b0000519e059de9ac31adf358cecc69c2ca94390fedc361ae99846f4121ce68c205e49502cc3391f58f1866b308eb459f613e311ddc805947da5aba496b6ebf0a33843510343f446049aa4326a37e516b78a1e10e1b8d56f126b02e0f6f4502bde60d6db12fac33a28bb704ee5c358c1c79eb3122a76b7c3ac0a80f35006247bbf75d9d4d9ae60cf90a1b4e92da41532db3e92ec2e17e59c8793fd12b814dc5f8a4feb9cc241d3138a2d6b1d98a6751c58e8d83b211683f54b50a83abdd03487dab59ca6832611fe9253075d680fc6e530f061ae390ee16ed95e5c56b71c6679a68199ef410a3c22eff800bd26f830494dd13e1fb318e84a597c1b6294b06dedb353990559984e9193d908970d06274a08dff4b3464ff42814dd06f2e95a850daa3b049bb9f7cab7ed688643db4b160c5fb7c2aa475804f0dceebf899b725ca23c97c835c4ec81fc80a617131e0359ff1ec43518e74e4abfa25a798d169c63b71bea6a0876f326f9594ff3460bf10deb64836bb63b129802c076e7ba8e20dc3ec319378ef2e82fab4ab6a65f629b495bf8f5b25e37cfa1b639076c8f09dff532b8e291b1e173eca8fb1e39dab46ccd9c321f1a5771164460179178c07e4cfc10e26c471bab3b007186501b202e8305fcccc20c68da954a976833cd217396075c089c848db8ccd07f53bc1e67e884cdf247d3d8376877c427e14baaecd9b47b570099bef7a97a8b71f345d6ff6dedfd69608bac7a8e2e39a75c728ec1ac7a7b5efc062acc8db73a68901674e3b1c2303144902400b5ddae592808188c4b9385dc0e9797ed9e89cc7337c8e7149b71fd5caf1a93b1deace9cbebd8df990ec661348e112ce0dbfa729e605060520b4cfe2ac85043b846e8bf5f689bb61bcba1a6138773228c4269ad81d8021dd7e0c2a08b4cd02ec0e2616ccc1b135ccdd3e57f53455a5baa2de4132e39380223eb18fdb65e909703dfc183a6a49e9d9d17d0c8a3f7924b6d09db6e7630e4103bc24585a948edac13c5b658aefe7def5b4b30cacceee55be5d96d763a4f2ca8fc11c7b2fa04b0d8036d77af9742c5271643eaed4ba91c03b3f0ff203956c2c0465a52da89445dc7c5cf39524b200768bbade85da51570a4da5e690d1156f16eff5323b2821b40489d8796938ad50dd605b1b1c581101e228b80bf78aa31fb0903e1960bbd57fd23ae16558def81a29dd2a3f97988823fd9d93d8e05c0ea3c3766f895c62c05784c91dc311fd4c53d5887e521502c6a5257c3793f0aa6a0d0771afeb24396cc5976f2b0099b52dc96ea8fcb818efea56f1c79d3cae5460ba2ef5085613c2116857d801d376db11764f84c98af92aa703011998ef3e7d0e009d5c0a348a2cbba4c89f4d1fad04f9a916045dae11a1fd29dd72094e0134e4a8be219c8bb6fde59f12758f78cb5e5692595101858adf0b29f5b7206778829db3257231a5d5e6cc4becb375c5cd6fee1cb40d98f205830aeb4c90208cf9cd3d41296dfe3269a7ed43d9b47782c2d031e92e5711d4cd5fc05e1ad14bd89bd43c0540555f855e0ed25e486a8a13893485030163ca7033f2578413b7f4194dca3173e90073acb74d78c47a50a60bcb16a02c4820a57ee3455b62a77378bf4df520be0468ced6d5b26be746edbb78918095016c046dc3f54e77fd82da3269abee40bb2a9afce3831b2ba014604c479f35cc441aaff21a35f3a7a2150c2b2c2007cc1a69910bef48be35cc274f3a59168280125d3437ac4ec80d185d8629d809d330c900a9c0f6e4596ac0d679a9adeb286623429188955f92033952c5df7746cee6d628bc82a612f27937147092c34bd1c0d48aa52758e8eeebd70e4bab2964cf61dd364ad4c38b38817ad349b64bc2af5279c71dd3d1b8e8ffbe65eb6ca39c993c7ba4ae14d8a4dcb1126b26859ec199d9119bf2112890f40d19ec71aaa58251a71b934d590ed45259536a8ceaaf8b4bf1a4fedaa785bd60c635a6b1a6c2c3cb8db5c10eb98e5d8785ca2e84455b7b7e9eea30a9f7296be652b83a765f95b390d86124a8c9142fcdb0c3c12f07fcc2043bab2101317b31fe0e91348d0b770b41cd71cb5c5d9188fa588e9a58f38d1ddfa851a9077756ab35253721e84df476e823d661c2132f25ebafd9629be55ddfdb1e7f8be611865660fe2e7df10d065dd7618c1c5c930a783cee06adf3fa7d7f1baf84146f08548906291fb79e4266d61c78811dc5ade2fa391ce8699d45021ae73718489538dac4004aa9fec4dd61a323fdb1fd206539adeac18d501629c7e892bd82575f2a3c11f8703f0f08e63fa4c6c2e116b11e7dd3c56741022753ada8a238e3c54ac8cf1cf522107fc17c1b51fcddf69f0836fb89fdc09b948c152ffc88dabf6e876e2497655e9c4ebbcaba3d50a49cba5039dbb113eca4c5569501fd4f68b77157c65cef1949e3b9d6e1fb3c359024819fdf5975525d37963bff51d4e410386ec092f129a71c65929372d94f1a6ec5c61eff688db14718766861564693771c893cc7806c963914652c75265bb90cc146b0b63a37fa91b627a17bf5b14f93459ee97ff4f7bab8826ff5d3edc58ece21718bb3be5f5f608a60abd0b8e2019731c17422e6e0022f052c9487d9540e3ca6c37d560bee41a03887a871e40dad42a752b4eaebbb91367be22c87380f22b28f32a229d7e103d39c97a811d144ba498074752e13688fd97b1ca330f1e5d7b06f84362c1fc061a306b711008a1d081c5b786ff24192c106b857ab43c529df37559f7955acd45cf2fb50f54bdf6ebdfa4dac735e98957a5ada8b2bdbce8fd8a43595068f393a1f30486bf9156deb148575bcf944788b9aaaef8ae3a2cab9efba10e6c7d0ef63e15c0ec7d0cf72a7c91dc38bdee0b4f08641aed518815c0485f27fd12b920b7e8ac7658c52c84e32bcc9e6e6669458b63dd922588c0c0429805348d512a87112433df46891ffeef80cd400752384490554874fb10204f9e9b4c7d81b6ee5b1c3837047a3010da714faf243f281d1af4f3cd0a3f8ee0eca5842b4e7a2be32329b77a2db0e5db2da37e0fa71ca73f95987f3318ac78dd945b1e6a605ef2a71fb72bad2ea8491a4c0030b0342209cb98a6b1d32987752785fdaf9160d10eaf620f97cae3a7473f813cdf03255a9fae097840f7681973540fd70f951540b073d055282b06d4acf880c9106af8aec4b237ad23da49b8571ce976ad74f22303576cebbea854c77967f862cffc6a9e425b9d246652b0211d61c00ad1e7ee04a2656291f7f66669d1b66575703153459574cbbaff7393d7039e0f0f93d40234dfc850a84d597c1852271fb56a3e185dabd41971ebdab0d1a5d3006faa02545a3fc37ba23b5359cc672103a05bfe4adb3127747d2ba6dbb33269086b4a5e050024aa7b5bdfbc904eb13019e5ce306a8428701846e95ebe7dc17628953881340b5568b1cb43b6f89a6ad15c5afed95104643d886147181fed4dabcd61e1c7740c1ba0df2b435c78133a0c80f3ca024864cc57e03ec7404da9b63242eab11998c4aed9e061e48668539ad4d3dee42fc8e7444df14cc0365ae61983d48369e078a9cec5f8f7943959e37233584eacee5cb0612f41a7b36ab6dff11a5c061532a51c9dffd358addab4b8e482b19df67eae8f6c6c8d2b0dbf0330966a124fa037b000dcf857c0b169c9a6184be227ab0bc75601f66e6908ea428f4d6c30047074a031b7775eca8a30bf4bb8b33211ae16ed10afa6602435f94bc10105711f455d1e9c39ed9abd7ab2ff86d629566f38c1a9c4cae5ab1ddd6b041b7bee8dc75c53ac0e3bdd6cd5d68ac00f6ec0a561ba8888eedb9104f4bb7cd74e4293d9c2ecc8b9315f683e7bc1a26b8bcccd0d03554317677d41fe03ca55fe46006773f83f9aca88586beaa61197767873dbd7177f53b99fdfb957961bf7fa5da0aa61d18082791bf8e3d275b8e91f8d713bf7377d0905605cfecdffd9de5298f0e9fdf63af6c11a8430345f983e41df7ef66c22fdd39f7928ad88a1dc4f3d9390889835457781ccca3e0ca4790fa88cdc06b981686831e0b11d3f2ed1f6b1496be4de62b0398ae49c4944ef23072933b600461acaaabfa661a2638cb0692687a3ed1929758fc5e194c46224d742788c53d3025c8c1c987132e4614e8e841abad5cae229bcc6e83c0c3011d5d617ac89d63387b1ee49ff10853f1861389c51d8267d7b7835fe182a8697b2ba3203dd8daae61def1ab272dd3e5e083eb80c4c948132c03c87981af1cd2bb333fdc7c7e3eeb8758cc377458d2bafee040e6e9f72243571e4df6ae67ac3808bb458826bab29a030f9c08db6b220c5334729b7d3fa19595077af673fbf22da884789db79912f9be1771aed99666e34b0bb7203973093ba55ff2a76109cc623041f32b8bce392ebeec21f78231d93a6e8ececa2beb88c37fc33b9326559da768108b3c7d4463d404458cb8b179c1f1cd6cad1269bf6b1b78302a0035c2746ec9c2b84f1c0bcdda1b7a90f33c957db52d18a8881947e810f7733c16ea5dfa666ecf35f514eb71655a53561da5535dbcd786f13d81129ee297e7e13f9b57d818ccc2609b706f300efbd65e7b8d7cbdfaacb5f4ff0e25e64962ffc12e8ad326bbbabd8ad2440de7bc007b9d6846731ce81c74576f093ad6757b98b7fbcd0928270b6b46c9f06b073f8102c52853f4b665536e789bafe9f0b254e0cdc4b431eec6fe74e8f8766c635a775b0e55eeeccff9b77274e1c29070b43a2d1bf5cb1ca596b77772d0aa432bcbc6388e1bf43bbca732cd87b9d9d552e1a63c1f744b5da9a8002a705dec7b70e33d4dcdd8f45bbda411cc5dac33cb47d351f99830b3fbe39c01237652f69e9d0fb08f51a8a01128a0f4a0e4198d644147f4a409e0abb3a0db11550503d6a1a5ce7d034e89bcbbe8139f5ba4f32a7562bcfb4f3e7c9905c91f20fcf09bad8e7e0818e220c03ea3bc7d42b3ddec5caa3c8195aa034e466f2bd6b21e89c37949ad37e4c53f5c8e8060839dbb832a15ad2451bd88c9e3d5d669f0c9db6af0c5d27c002cba277174f82c914f9cadc28c33b03d47b04992f64c8a10b0e5c60c124eb171b00d2c4732c7519fdd920fac3e8d8c2b6f4000a9aed34add05a177be3f8c3e6944187178f29544741693a8ce49f3521e41b21d8e983d89046f60e0824651f4748e2649d701c1d7e736aa3b1a758bf6dd52e39c736c568895c92b18a602b2bd16c595de76a732372757d1be5904b8bf0b076067f30b3c1b7ce7d5dbaf272bde986229f34f57be5e1b441cf445b629adf841150e3c76418e2119321c0467506763dbe65d4f4f769f47593552050e74541aff423c1186959532ed21684eab88b69ba02a4bcc0e8f71df1dd1220675dfcb1758953b576e0deef09448359776d1a438745480f541290a86cc6456648ef86def693ae25c5ef9f28fcd1585b4d15530d86ba46b21f6e2db6f1f9241bad1ca091776364b80cd3c3d136e53c3d125112b7d0a227819ec31771f2f46ff874703d48329fbcbbf59142846ca62a808df258f56f08f3d449d4d4aedb12519f13ecf86ed2a6b2c3b8b9eb2223e0922d0d9933b53c2c4966eec2a3f3d3ce556fb95adcadb8b6d4e6e625bc33ffc195fb3f6be70bb3f7987cf2cea58d388ae4bc86eac3ce6321f06b47589364a996e240379e5e39481ff65aae11af122f17e7ac0dbe92c3156d1d52161ae418e7f2a64acf04a36449bb7b7003b3bd9ffbec2274cc14f5b466cf4833e4b19f43710601a118ce014c69edcad134a065077ae871340c61d6a7d47cd2f6f5aefc9a2c0d0b98a1bb5b257b11915fb0fdd9396279269c11867a848e97a6e9de433ed42110bd2974fbce69d7a55581109f2a1f9f4abcd300a53d59a726c8c7bab233ca6cae15bd4e268745437dd7cc8f1c2d1c868c50f20da96f1c5e47aa5991093fc29e409b57944f9fd391905f156e708a754305bc733ab84c6dcdd1e66d602b3107c07a40e4959ccf0407fc8cb919a63d3084f4c1e2a1e5cb733635f665ce434f20da115039d6c300add5cca807edb4b41dba7b877badde1c9b9c32d571e8dd8f875e7a14cfdf59a6d6ac3868d78cb63a9ffec218b23f3a87afec8d2821dedef07c93b0338a8c8d474741b7785baf0b496419b71e012f78fd822de46bbaa05d8efed91fc8fed3f90195413ec38f5121657486f57a86d636152d4720ba5a73f01adeea57f121c30d408529982182daa57b3a514c027c17f25af6dcd3cd6f0185370d72526f689b6f80f809d5da38a0de6471f6136753db13d63a4f9c7d1cb4aa9c99b3862c5c025cd12f3b409c60978f9f48d4c3079bdcfca93dd2568c3c381f8bf0c19d7aeb4dd943cc1c636ff0afbd3e6476c3f8ef026ef2f8a13f7a7fa54892bcfba608702c13a1bf4a0d9013f7a27e86d9adac116b4a59961d9935d9ebbad15d548e18f453dff263e4e27e3669d8d27e6fa980f5852161874f74d9ba83959a56112fc5f3df51cce1a90c0b211e10b5d65c860e130959c066089eccef095cf6167d39b4dfbf90b7bdc5bbfec34c0ada482cfdde98cd8d885114cdfdf1fac9488c781beaf892bbc8b1f50c9e66fb6c85b78c17a9aad0948d4ec112e1e72d920db1cc08640e10c9c9d7c8e1a276906a511cae32395f938fdc37038a2b9ba94e883f2f65a561fc24e080aacfb93594334cabcb3c5b2701ff148dcc017807f5822a5902eb68a53e19fe7095f5c79146e2d2d59d416a0e69a6e29c329e3da3e893b8c851352206d2c97c92388b93cd76e761ae9af4f83628544221c439e386baa3d4636c73064f501bf7733ab507265dc3038f40c2585c1e7de58d865bc35ce3c2ca7d79bcc3b7ed21a4204fef324bdd53061c47f908c527db3281ccefb06f1aaca3d0e0680096e05ae573d98cb0677e0bfb5ddb97fd09c66bd4a27b3cc2acd51f070480f228b79e8b9bb33fa55d0103f7543301dee3f0e9da248a7c544bdaebc253f435d7db3a2a468724e063714f7094cf9395d0bbb38163e7449b6f4110f2447f4f3650bb652327150a2f744c4a26cc48fb3f5512045bdc93d47482dd0a8bd0dce7a1a6d301ddbc98165881e068e059bb0402e80dc8ffbb264f36d700018011602214ef9099ee221c5cb15614a23904e33e58c2e71af7e7d8ba5589de18b8dd3318e244ed3e5c3ddf9384c341fbb0494f0b6f1dc91d39928ca0188bf8f570d4f3302bfa3c12d0e0738717689505cb4f116630be4f3df61b0fbfdd0ffb23f3b089a246c5c54a5317fea31e76edcc1ad7d4acc6046f2577b37d8ca36c78057d5ae76005f85317d41810d2fc2472ed8b0be076a17b2c8bbbb85e840cb108407fe464cf376d3a6ff154f6d09bb487026f4c64e896fa80a33685caae3c173b8acc32df56ac0dde4a92828fb2a297e1aad6d060e89f7a919b0e6e35843f6b334f760b0547649e06a1e7d66ea0cc25b429cd74d7789aa1f7dabdd2fe73c76e5883af0a43ce030d35711d89501a67f330c547fac623cbdf874df7396aa2832595ccb0e828639cbf006b8cedbe6d72dea9a83ee7499b41b73936b03040e117e601daadcb23909c0f9c594d8ad848ee7e9e12e0d6a0472584f645207ac025778e212d31e7ea41ef20e53526de45cdffe5344f494272811dea996e1fa15d711587a95d4c01f268527d51565b62985526682188db3064aac5fb520001ffbfcaf43123bdd1eb3fa1877ea3a4b57e0015e61d940dbc14427ad6947d331e2cc84cccd839b272eba7c8f2e5849afd1395190c634fd5ce501e52af7d2762f8eda94841ec9e644de3c17245438f212f46de4878d6a47c4b1707a140253a99de3ae24e7142fa825b4542ee9bbe07944055cd39800fbd73f98c39611fccc2c89a9975ca328858d57ea4da7dfac70f90bbe85852927ea01c991696012854d5817db5949a721e40603bfa642089c3a27ac885edb592b29d04cce8d4531bc108ed86036f166005896be32bf30721d1708010d637e86c6e18401d4515bf3d72009118fbd3a8d6f1b34875f87d39885b43317b46906ecdc5d82cd376ff18e79d23bf8c0480528d559b1ff825acad3fa56338be42ea7ef957ef5d50979aa42180976c018a85ebd14cb98c25f129a147518580ab1f67ce95edbd3a487933a539024526d54b35080dc851b0ec2da21110bbb66db5b9695b48baad9225f0c6fb40623cd8a4fc8bb2fe0d4ae854ebda765c1009bb0ced6ad4a4af517467144081a18cb01c1b24dda0c95be9e074182ff10517732e2bdc9be1552e2a509f02644d1e7033047aabb27fe79711c4ed05c01809cd931bf223c0d5e75c32e31464cdb312d00a40777f1ce170302e507b278eceb9f710f45b450a450dbcc6e283d552fea1c771aff5e06c532600a56e5c033990e752e48e4baf863b796591116bbed0def1e681c4e922bf3890fbce60df408df46626415d5bb3df03019c52b434726e31ade970cad7df969b360c21a987575a15b5e651ad366072a81b8be6b308c086a8d3c6d9e9bb707c8b201fa1bc5f117c2c0f8f82bb872d93c6d30eb7c1d6bcc209a5dda1de6f25323aac4baa2dbe13162319811d1705e3d7729f3e2f3e50ac6e1e44ef00ebdc9c953afc331a51ceb62027e89f82bc31c3fab9a0d6e9606463181e741844a940ddd0eeff499c43b83a5554b978349f790780c1651b33894ac840b96109afb7448a9612e6a16d6e5d521c8df41a063621ccedf6ca4a64485f858db658f074bee25a4d6f3e29a8434e5d8382da74427b05307b4ed882090466bb06cd5c2ff92167159b21beb201bea790465a267eec2c9cfa426629c7997ae8c0aff2b80064a519c7afa7d92c43ecf5197ee145a887571600db7691c5f56189232bc2269480802a6b3b1a48ed9aa17a3b8a9457738639e5c9e8dc34f4380f253803b9beb9a121a00c7dcaede2e876b22bca907107bc36ee30b867cf2517ab9e109bffaac8bee2bb2843032b01a0a6d3b5123f7c19cdf742fb7d3136a7e975771b522bd8a2ebf8b11a68eb023530b6fd5873e3a348be2b2f896ad0e370539579cf1578bac83ce79c50b59fa56364b3c7eaccbfd3010467254f526d8155a86057d6a13f0400f7b8ce5428b0affccd01107c514f9d0588423cc6c8d22aa64f04cf27a27bdcfa3ed2fe1eace28ce3216df3f4e650434553db643170df77e5392cd48ce4fdc94a21eb3b321358bf685bed0cd7b81d74a8da70ff699617767d7979ec5e36865682c73a5b683b7d0e827898033ef077df037a8bf4e4e824bfe90e4a147bd7ec4bc6926dd63e498fa46745a90e769b25dd7f66a466055046d127c08ec1566fcea300cff48e704ee09a466303ae4f2af9047b51cbda7516f6c0ac23bc5e289caaa3d649e8a4670632bcff035603b8ae04fc8741b62ee8361fec684e19c2fa8a240b283fe197358432648da5d3373ccc55f8c6e73b9177ac1c04470c65aad5ff96f2dc8335f1f8f9aeb9299b4e4a4ce64f276625947f3d18c24159b35b9955a5ed7e1ec62472bf1cb6854a46ab03cd57399162c5ec92c6da4bcd7e695432a7134f9b682dd8c78988a7019506121333fa12b6609100f476cd58d30a9c5f4f0eff726d2338c30aa08cfd3554deff7d3ecef41f470629101fa0ae97f54ecd8790cb9a1c125ab877da0c89c7b6082f1066ab46c464b1de83da9bd1c8a29fd582119d7b7d400a67165a607ac985b96471816518c44df2467f7961614316c38a54ea8e170f88d1ee2714ff3bf0247d6a03668e5669358f0f337edbfdabf52c06c624df51be78aff0dc46c06fe90bff90f32c1d7a569835c2ac33ed9ed3d7f382fe9087589f270f575c3ff0a2ee527dad7c21e08274d40ed3b77bba23909abf131929669321984cf33702e76b8375f68ad92314508aa7a595aed7dba1eb8a24fc8363ecd8b1286d422d19f7cd38c7938e5a693e421667163847cd32700c8f041c7997b247d45b35548791484a6bd7086ce7b6eeeb7a2e868a0700afefbd2f03fe2688f77505190ebf17a71f12a0969a82f3050ecfb6c9b20e116cdb65d199953d3d597aa66e76cab7ad4cb2873f5754d71bdb02ebbc44e97d2cc41829c5ad3d66dcc992671122fff43c905152448a7434b68e3e8d0c2a32a3f0e1a25dae6cbebf4f17e2318f788ddcc901be8c6cc31dc2c61ae7f1c22b79b2eb5fd7a191b7a63e5ae42fc328dac11e065ac87424ab73e0ae6cde0436bb82e8f6428ae809c2f97411f2595e3ee8dfe6605383c354c6d2e790f97701eab8cfd45faa4136a7ae37abdb04e4ac467fce8dad7284458de002e4fb324fabb8b114d9e6eb01b9b0a2dd07c622bd4035a8cce0ffec55a2a581d2917faacd81b15de5fb0e023738c26e539bfcc648884543fbf12bc81690c45cb0ca6255493297a1d922952ee5bbdd5b5087771e2bd87a13bbb8588efe1f586d97a10e1ac48ef5b4fe451a34c937e70b516dc4ddc43d537c4a653f8747eacc75f64f84dc7f9a64e6875234643119e182dbbf30468d9a24e37324084af9f5763b95039649e4081d3d43c90c95a2c36a0eb9669ca8b06c4720a7345be1140fb03ac95cea190ac984975dec607138d091c1f92bbce8b2d226c69e61b043c5a0a17eec7615922bef7dc068abf9dba04067dd9ad839d9505694adceceae320ef3cc92f6726cca5d250502f1c0ffd901adddb4eab0a965a253d4c99c695a0a5def568d49cfd1a3685bb80bb835577530a56894d0f30db48bc4beca12657833435783c6b4d0484f2b26f8c69bc9955830b8facfde87ca3771a03652500227f57d9333bf4fece04a1659c3e832c35e24b07059f20d7928e5e95013b67870c8f7ea94671c69e3c0cdda93c6fd28fa964890d130113c4f771e115ae0263d8a7dd3cd59ab82f9965a36c7480d74312d7fbcdc3a1772a8a72f0c1254cc9ba00d7bd0ded67e2e2e3c41fe5b9248992ce3f52d69a86f05218182d3f90184cab7f313ba984114db776136cf369e090501044c9daf8c131a9f79413e41c0b4a32e1251d94638ba54389035cc4ac2c4ea4363fc212bd797038139576c395525f7c1a9b878680eed45c687c8aaaea3b5c89f94e972f79198c4eca065c00aa2e6e51f5639317853d5d67fffce91edb6265a1efd9649c3e11ca76ecfc37f117cc43922d129a29d10e988eea9de6e40fc5c922d6524170ac23c5ccb687b5f0c0f9012028bc6dc0d6585c73d0be3906fd2eca7797b60c3ad3f96b2a2affe680e4a9ac8c25457062c11f3fa9e448fc1e69bea68c62951b922296f238077165aa99f50f424292069356eba6aa2b5f725c6130e8d3d040a4e9d51f7f535441cdbd195c8e8379c602291c50c86d4bc4c1f6b6b88696c534f9e9005da6da789c7528f5dd0f2984aa05d8a0d73bd6abe224d080c41e8d6fa150c2eb3322fad9a60fc38a928dd2d91c2fd7d38232628acae57ef00af9644a3e5f2ad37ecd5d0e8227f9afde36da36dcff574d3a662d464c76e4ce08d6f149fa21c4ce38463ed6f5d2510cada4f13bb847e0ece7de41c46a0e419c01275fa6c3bffa4559a3f8ae5a9a51a1d929c467c2c2f98bd1accbcce4899f3cb893471c299c95ef35b4d84b7b9c4d995880824df49977c711ec01fe7eec9cce08987ab829b428779bc54939ab9cfc931218dc8d8479cba05e4aae9feb0a2d43be5979a45f2dd46c0b5a841be90c74c7108802294f1d104489cfbe06856d4af3488eb80e33b48a6c096189abb6328fd0de0933bc3bc0a1c627fc15113081382790b2f1c59db9169195b4e184907b08016390c011bc4be5f45ae496dab5210e30a5b53667f496d9b9f595f803cd37bab23cb20a9c76c8173f67a1ef12fbe7b479959eeece5c7378dc4d5eaf3db731bb135e9783b1982f5a7c676a71f23064805eb09ed1ab79ad9e8fafa9ba5fc2e8b4ac1c25044b4f5b639ebb54a2152237c0cb5b156748f6d358869214ef9da89d2980776018c318527fd0566c1f205712fd0bbe1d75214bf867528079c5b603dac8f6aa00d2b4ed5bd9194b9d213cd4141c8427b7cb4fa55a48dacba6d580cd6622a5d0af88a1837efbfcdbc62e4d0385b6576dac1b6a0566262d0691dd2af6c71cf91cc60057a27fd2b9d420495dd55180b45c6d837aac4a4b4a33e230dbeac78e746795e187ba3384772bb979e63bd98ba0b9e854446ff6b8a60cf78a2650af325dfc19aac5d96a6f8df0fc475027c5baab491cbc6952172c4ac426e3bd4a46e7055d7c6d08ec22ea7a008ee2ebb05178188100d9f7754990745bb40a1deadd69595f6eb210087e423fdf104b2e486df6737d805fbf08a2b9862ef8753de4cdcf71b14e37464edf88e61f25d911d69d3c2c92065f9a3f641904ceb6ee2821484cbad6178f3a8678271fe6cad4afc18106c4cf1c609d116091131a2fd83076511e91faab225cae47e35af0f62b4c9f5a42e09da06cbe7daecff10da2d01e812ea8cdee8726213b3d2b67e2d956d7b37cc8a027047a2f18849379777987e02b18964b85565896c8c30da08d366feaadd48ffef809e492f090c5c3a0e44c030b91736ec19c4b5a217eab6854e709c84589dd995d770a359897ae1c47fe8f96df739cf7c275f16c9d643d7b0e1a5983f034fe1c550680b3a8598610cd89584b6882e21d28a389c7741741d66792d34d4b3b5bc7ec50b1bb762784b28f94ee7341cecf42c9d6f33e9813038598088a956f14d5ed10e43ef7e327a2968a9b629103952a45300117a261e1cffc2734382a0bcceef5092e767b13a1c935ddb236f191fe52547fc867d04b258f87a27a8eb2bfe3cfa91d19b208bcc5300364472f95b9c835b21ed891f3aeb827c55dd7829e64e0bee43ac06106a824e861e64943ba7b3c3c4636921811e5ce6ff44f74a8ed4844bb48a882e7abe0dc3ab7efd833c0496cd17178a91031030d778766df72af88ca75ab851d099c8deac514d87c3bbf2329a8bfb8e70e9b3be7eeedcc3b9c99737f344243beddad2ea823f69c577db5e7c74bfe922ed431870ad63a5b7739096d1b89d3c6e8e7f8c14cac4221f785162992e74ffead22b75498c2e406a2bf5b94461cd252f0285034622fbe7b80c44fe51e66015ebb263eb5e854990315095f9f6ccb2a980e43bf8a63b6e33a3c3c6654bf7abb9113bfb7f684c3e0f9066bd87c936c22d64e45e88e3f93d955d0193af801e7a5d156e3cf61e8ecfffd1a004553267e96d0cda0d4369a0e886f335979a755db742cb7dc01c0cee55adc85b9a773a915364889adf5ca82ba23984b34ddcb278218b90b1ceeae397c1297305ce932ad9ceaba2ad0401ed72958b64eb1053dd6eb04d836e10b82487940fd75194b491b6f16c74a570966cda157354347a39ee92d5b9a79995276389674903fc709c8f865115e5fe9516978d53eff389632e4bf49aaec5097423db3882381543da126a35acaed80f2d9dd51f36d5974e29734f29b34181c0166bd0e43c95d45cbebb743ddacf9d28be38e9a7ec2830bb613cd9e34d56569293aa183972a6bcd3f021261df9151103c869f90ca875caba1336783901cb2560159b0016c6552b934da25897afe619efd2656982933808106b07018174e3f3c1ef361db773e4c6694679831e29ca3dbb301834ce6d4d1f42a4af463ce245a0af0227d7c1c95ac60611ae0894963484e7b4b57c9d5680ff30d1424904922b6ddfd0fd4ea8fd9abba60b208ba44a3b1288be51600162f66396dc8938fe58053dfd130972d174d0eae726d252cb38a41b9424f99547363d00d548f1cc8a60033384ccdcdf74baddac3bef59f188c7b3a29a296319692d16d62a7f873faf974a903886505154c41e1bf8a2d0b9f21efab68ead8c1af60e8a3fa642cf25757cf1cf2ee1a32db8071788ee97714dc55b42adcd0f301fb3303e7dd8a2c99ecb480d004fe006cbd91059c124d55865760d0aa7226b1dfaf37f1b275b6455a17adb433ae2b22aecc9d6b403816dc58e1fb0563616b8f5acab03c3202c93ad2c20ffec73ee24cdd802ff3921ca8ebf47e457ac471576416e3b6791a11c62f659f61711bce0941502d32ff0d741211fd1ca45e472417a30b848f341332fba21cc02edbe467ce92ebb142c0182290fe5aebb030eee4ac3cf1c759148df6afa8a147bd79be701ca45c9339b7460c06cd3ea136f97403c12e2801512e90a020252e1518aa73b708c9190294a181d40d805854e1e9eb83735daf62cf915788c5313fd849094a02d4532d3a36c800a9ee504bd1ba4c36bc651386ac3109e3eb85e7cf4ce58c2951ade425647db4115c88cceab18b2dfff6e4a11c3cc358fbca4db9624fb3855e0037e736764da3cc183b1092f880d22030300b6d35afb6619393df9f8be098e1adbdb5480963234771918ac70ee52925570404e5306324044b28a713560a37ec7c0ecb32628ecdc809b3c2cf279e63aee920c8b73a60ed72161239d8dc6526bd9aeb4e1b0342e9d9df84d4bfbba94f68d4a326147c926005522cb1b34c2210730d58490de128d9b6057d27309a58ff01f308f47b927e81f10564d2d41b2cb02a8105f0d59dbae86e33811aa3dc5994ed06d838e9d94ad86224b7e810be2948c4f75eda32ca72d319217135d0f965aa8cca688a48c28ff5cd83c2a93507be2b7cf9f49f8940fba268e6b102a6050ec1e40e923c7e07a8e86d0ca54864af59af82e41d0469b84412517ef30f865f82cede49b95c2556dbf10f707e80cc42946aefe1a1826bc0fea3803e80ea318eb9d4ba567812963a11c3acf437b6aa4402e339136503059f9da027e26dd3268c8a941e130b7a009f36274a0747089cc7b3837748346a563c49e88ae4b0b363916d2b457e8f66e9e201b27cf8f2614c2ee88989a9c5c0cf264f7a6f663ee23d10af694ef40688b4526ddeb01674569a6830c60574a826e18b318accf052226b55bccaaf97f4713454efe5cf335e96e348cf05016c1cdf151f2ede23a2b9373c252ea1d94dad157f27e3a960a95144f11ee985bdc38e81e863ef15655b462d79c41e8d6406e4c31ced791e225c2f6b828bd61cfb4108e7a2c3838846284ed6aec879221c8c1de2f01c7334e229321c9119c54f90f0eaedcc6aabcaacb71d99e42f583b325f214f4f335a56150528a4cdb63e3f86494ae8c0ecbe3823ab4ea6e61a849e2fc22ce7abdc727d7423e56ea37982e82d03fa482993afd7d4e84fea21572654f4a04bdf44b83685486fe4438192527c49575243c8e4a271724868fc6e78a907be3ced294299323a8e85b00e5d9b3cc34fb60131cde12913b76814d278bc790cfd2d7af9d129ce9c71d285556781b01dc869afc7662fece00fd1aaf6887e5401546acc6c2e7cdd1eeca5543187c80475b950541f4566b9203d3e70e8f65cebc6de05b9fad8c679e355e65b24c978b1e415aaa50e74017056bde602ae463405ef017c98927bc0ea9963926bec0ebeb5740056275f820e9f039ea3e0ab8d93c510f20c919d5795ee7e040a3da355f179e277f01d8206f78f0ba2b01ff61114b6a8eaa4bfb78288479de3d60ce1acfaf06d9ca30ff99a02da5919175d42c4b00e1277a7da043aafdf231076bf88f56e0f8523c61370fc752848c514822dbe46397847e3bc889d5ca0725ec6336070bd396d2558ee88c48fb85deab6c31767ef76b5b2b96c6dc17bc7f7e87fd2916144957da36e1c7b79c142af2bd07b53ebb3931e66ed4372911c6dd10e87b8a3514bcb04920df5d69db9a262f4f3be6ef06c010902ddc24e922e6f16e3175fe7c2c11bb32b38fe8f8e2a66e6a311e593b1a1013a6af94757fc2daf6e2534c3eb4114685107e11f7510f5986a5095a605e908cb319733f2323585ae3743fda7583b692379a275b9223ad0b8a2246d72e31c337d621256761ea68283a198d2fde9d58746bda697b3d7ce8c09dbf11ca83f77f2ba66f7a3eb1740d28777dad1330a279c805b4df5187b953e1180856930a760e5b026731272950c1f3628250f459fc295a69a664dfdbb699865218c0fc817dd2373debe6730f539d4e3b045ea907774b71e15d062129aca8d6011b12ffbf4ca3ecfed836037cf7bd0b55a9cb1bea5421d497be5a7222d992cbc4372b0b701b9c9750ac4f2ca4d5517722340a74337117afda1241ba760ea0c97f547fc07a29b235fc62d11e2727aede2fdd7b5121c4a2d43f13bfcae8ad2e3ca718e6c89c9807eba3013d1f94444eed820a52f530b75a71871dea862413a874e153c48fc1e99c0ff2aa1d463acfc9c2f19d70fd60d0f964f732cdf16a2917bec27d67a195bff9039f825834f4663f87427059bba2a81f656cfa692549e30330af31896b31d752e387958dc5f0c6befc665c94f69211eb33e5e878de96d5950f30981212e84cccf0df376bb9e5959ab332ecd8a549f019b51dc946a6c692db92c1ed4f6f59dfa0a95a1c3eee808258c9a370b940d1509b8fb490c8717f3abf3e2327c10bec8b33da0bed31458c8a8919db0be2b7628380272388a3e4961d52dd6daeeceb50e5ab49f79d401129fcd51735ace8ef3712a30f3a19a602ee00c53bf558488e0dfc84ca3d67437c516ca60dd5f64fc957cf4120efa6320c09e669cdcde41ada747e33e5cb00eb3bb602cdee9cdd735d64b61f1a16ffd49533e80093aa169e64b9733213906d70dc97cb0f435fc78cf5dd71413125e9f05c85312ac2ff33361b65675e3c5f5da1112dccbdc682880a43b2eb1ea5d8730ac208dc74f1745b1fe72944a88554617c123ddd8e25aa123f8e65e0bc16f53fc330edc1dd5a01f7793fc5601873bcb6a92b7e01c832ac4fafc3255b36a02a664679b90eddcddb9918586fb70b17314324dbe23ad371e754d8d935c3bbad892da3101e5a62c51ca5bd493861ad6da8f13956f4bbf424cc0ed0b1b3e7581d58a358e8281c4f1e28502fe5c1af35ce6525fbed66002e77dd342f30ea7b2343b75b117f9d6d4c0cbc110b7cceafa3cb90edc12105b8e023605938feb2813bdcb7c736c8bc3127ebc0de5ebe2bdf30f779736a5a4742bf411c9a1db1e0941969b86ee9b7d2491ab3692721052cfb16644bd81214e6b465d60253867594717509a5eb4a5bbcb8a2898ee3258dd7ba33d52121bf43e59a0d35d22936196cc87b80d1377e8c4d02b2e25b008b75a16ad1cc1bdd24d06cdeae2b3efc76b99e521bbf35398b2e21293ced4e8e969246fd20eaf330b0a8ce2988ef38ef80ef4bb6b7e6adc66754e1b285500999db0b0b64d1897ab707c9fb89900204e8c7e226059cd4b99cbbbc020770c658a2aeb3a44d22bc8b9ca37fe146602969c920f0b78e868b2c94dda81a1cf51c2dfae09cb67f4f59aceeaaa0959ac4be298a1c30453414effdf7c4895fab5caa1fc3b50481bba2156e3c4642dcc3a1056f778a20c998cd591ab57122b479ae389be45773e751278921b0c7a03847c0caedb9cba9a9b6297b45d510a3eec3699c6408e01bc262b26064006117e49c0f58def19f1e188c7873c53794e8d7cba6777961623dcab408f867913a8922cb26eaf57164a331146c3ce0bac416147a7513eed2eae34a4b1b89cace63d80fda90d5b3f284bd815f413cd25e28dee664af2d4a5cac71b7a7da49bfb04c253e8513faab650a1a58b1da293a9e897fd17a47bcbeb27db8c47ea902a183aae8369b54f03e9fdf256beccc0b6cba865ee98a0492254372aea82ab2221eea99315126cf4a7ccde232f082138acd0904eede0da47744098aef5087f58a5425d282da84aa3d90ed42545d11e04deb04418e1d4ceb933a34391fd670ef0c4ac8e192474b8a1874065f2b69ac49e8a4e51bbee100a3de1042dc68e1d6f7acffab1f6230c00ae7b255aab618880d1723361dd06598192d3dcfc46159b534847bc26a24688d30be649f786194a4bc8e425645a391ed6ea89d6e30469d984d62d85e29d2e8d5a4e3ef868f19db23eeb1c678dc1d7899d5d3669c7654c773348629d3817c3dade0e83b45aad581b092bbd62d1af6823738671a88446fec433fd51cf27c5dc89d2b063a4d399675e44856d76ee420c449b8587eb36364c02883a41176805bbc39c4e519e001f59a03f922df212a7550e2dd89a3b6d726679230f47d71b14f5b8b381d8cd36eddf3cda3418bf63985de4bbd896a6cfe27865a2002961353c74884d9c4be605e615759252879e3ba4583dbc00f643314fd3c07263373aa5c5429a1da3d3c5e0e779bd53dae9fa0de2002b1665a45d025035858ff6ea8218db969b6f560a833b42c36ec262397da4874919b4f4e395430aa28eedadf89659ed3e9761d0ee88010d7f626755a9d4e20cda396c6e1561663866b149415466514dd2a745824f6d8cab0b93869becc77cdeeb4ed8e51cf9d381edd83ac9ec7799f97f795acd7fc22a75ea6cc05ee46bc1cc6a39107be14725f65d172ebd6ab6963322117014e1edd882f5dce6f712c1e19dad33d791301148b90b91eaa0974c2a33ebe81ea38edbb259cefc228e8984fbfaadaef2368e7de99e35203fd36bf0ad0f75459d36cfe567b689d445bf4f152c75f1cf05b08b1c366b5b6e4e2297d88fd0f733dd030e2e0e31a30e821ca757d931528ffea8b389bff0f4a2f08d895422432099b71a61c42da13b5fcfb4fbceb3f940d907c835118b098ec265650db5f72965172672572da07254ed35983b01406deb4eb085231dcdfc90532b337e27f8ad4533e897177163fa341754b14925fd85370e10f009109eea04c1be8a4b23dda5f3e04121eb01dfd084285a569f8ea1222adee759bb0b02b09bffd8cec14436ea6400651d268f3ddc0ae7a8da36812900d8c9a16cc38c74faecc00ea4d04bcca9585099cbd663aee4f43bf37bdee31be7425517142b55a02b6fdca888e8b744d2c986bbdb426df3e33a42bcb3d73a056ed6e22cae8beb1b44153c0d4024038a57f97fbcd30c97ac01460f1e62f06e0803ad2a9e2ddd5646846697f252dc3ea73443b7a29ad0fd9c5814d30d9093827e8d9cc77563501f92631860157a197dc10d1e882067480a2eabd7c0eb79d5dad9cd8b2e281e2d55b929c8bcecbd16a78bcaacb0c2427de57469dbafea49ee20d4b529bc233ece2212efb76e5fc8b390cb487c46ef0204becc0bfd137b921a8619e9e2708dbd1b639f25b3da5b459356e8163ef550185d04c85f56a484977e39ed6ebd5de52a1dd2568acdbf2f9622915bb58cfe554c8500cc899b67dc916145acddebbf0dbb0b28d2eed199b9dea1ae89a7f2d1ec2a22b5f3facc8fb5eb81b6edfcb4c56e006ac743a31aacdfa9226005486188f45cffc5f9ba0d8fcb2716f51d130bc7d58109b7532d1f29afa0eb121d3f66fb713b901a59bcbc9ce7d0ccc520757613afa0ad043fdab712d09de8890edc0b43ca877b74400f08f0bdbf46521b84cfa52c644540a8a456484551e57422eda13c20e8847ab16da37bf52d49a71dcbe98c9bf6de9c085ac9b0e757a7c0510c4a956a6857b27237fdb7b68b96a26ca7ba9f8ae4197f0dabf41b6d4a3bcbd2178fd375ba250e216d703bef9b2225a7de448a87d6733bb2544c2b13ac4f64b0657ac69877c1e99ae01506aabfb90e830a02856e0145d94e55942110507e66faec8b8e77d5d7fcef048c87170f1d0267b889c7e085069214cffbf162c368c3651160b7e2298ace8cd6125f863a1bd28483136916e7cd36df4f22b1c952fef94317d6203acb6b055921b4cad80a04b4b39aab73de349f2e343ff0fe3ce6ea7d5d34bd5f87abcb45f15788cfbf5f957c38fd5e9d53d07cc48d0050f68c87c7ad62be9dccc4a7217370e32f1cb011d8dc7e7e0708fa1d80bc1b8bed3c4258e6d7629f1f707c16602ebf490da0bafd276b4d4d293fe3da73a247da58eb765c06bea946c7f3062835af06fab6e3cb853a1a724862bbc1b3e3e8385c413a71ea79d565e57cf85c43960fd7b5e80ab787fcf90b87372e5d62b44289b16e9ddc3981ead2b504b0eede61d888ad63b474273ae84b435557ffb7bd8e8291ef8b5674e719795c2c165f7d5e0c8e0f448a3eec77d2b4e1af0d281477fb4b7ea40faa1abda0fc9d4ff2033956ace05ff23dbfdcbd2839459fdabfa65b813ccadf80d04cd41f02fdec3ad058d2e0b3a303edcdf09c06f5510d4fe4ab615768ce84593fe0c9bb50efd45079bd9f0f148eb407ed208fdb96c5d7efa83928200cc8d0186515475af7cac5f2432dc9e42586eb34c29a61f8be6f4e957247e7d5d066f7c9019df3fd1386b300f54684f04f398431dbf532cb2cf7572c46161af3ff749880c047b207dc637ad2f8ecfdde8655adb922d0ff6362ad9598885d6bf9383a146b7b0659a12e1fc2789077015bd9e6b06dee2b64d4e3de5241ef990d23d45113602cdee3dcd247aa12e707c3ccf2377618317e54793546dac4938d56d40d57040b6e9b97d033860d010a1e6e26888fc6ddde77ab90ea14592b5fe7bce8bc00333a2427416d1981294b448185b19fd6c25355b5da16ebb4d02c3137b642c06f4ac2cbf473f2e0cc01448ab54477378e8955097f922ad30e019ac68dce94b292653ed98c78d9b4f1cf4b8431807c383f618555ca30e6782c84792354b584d188a269f0f993072b3e28a85e99a94335cc3a22540c85737be5a64e4e37f6ea09512027026a6a0aecb7b7c8a8a60df33ccc8dedec59e37d0b0beda473399431ce44179f1f2c1a3a04c4b7647f319499997b7bd3ffe3dd7dc7d9aa8241fc0a5b9dc48aa17ad7636e3647e2cb1b0e88831af7628b8f801bc8542bb4f1d7d55bd2efc6311ba22f2d4ed698272f6e480d510de988af7d41cc9cc2638926c4493eb97ad00909f68019b4ca84accfbfe3da88e6e497752ca73f884e788929d2aa8eeb84f564e14b82840ae9aa31634426fbe0272993523d87def0e84ce78bfddb93c10b0fa3c711999c7e4554489081840a2c62d9ac6303a7042d19c789de08ecc177d3e7cfcb72383a6dde326f3ea0c0c630689ee92ae330290d804497476f247a1d814958189e0e64be4a24d39731edd5526f4152bf824645b346193d13b93326096031a1d4b017b748a84c4fd9a69e1a112e2bfc0fb8096e95b4683b4ab170aeae100da16c1771685cef83aab16e146314d0336789a4360a5b48caafa334c03d7d8f7aa87c2997f05bbc89fdecc15ddc72a234cceef4907afa47d8778e7eceea02f5391b0406d0da1e1e01c4f3734e7e2fc9460aca5d74f80231d085617c5532da837739edc466179e83e5d0c002809de60445b0baee519f5c24a9b432fc2cc3e0b973937cdd212201d7a183bfc18f1bc67d6d5d17df556cbb0fb6861aeca3aee47008787690b49ea0dbe8002794f3b1094bb3ef49770ed30bccff559b203f8004d6c0c17b0463e6cec3993308dbba86b3a0d3f372f9d64a82ec43d80a64c9d4ca62cd45cfa993078a8ce4377045b230efe08dc56e4d0cbb368d1cc949830ea4588cc70a515177f971e0651e3c9122721c8b45c3523689cefd596ede9ef96a9fa2c2587eef3f5736183dd54c9af715ed9670a5ae52648d9ff6fe3f967048deaf9ae753cf833505bf75a801b1295196497af7f0fb8279bf24bf2c7dd7384ec07c046e92cfc36ea977fab76e0e31af4e94fd0857539119d803c972539a9ff31f50d612ab05f53ee3f906a11acb6e60d317deae612c093dcf25a3f02a422e2c290d19151a23cfde1e4b81f641e862c6ed4b15f3e43311d5cfe06f602938e2f46ad6b777bba3c779faea3d3e6e848775447f705776505459caa375ce1bfaa8cb18bc3fbde60ed201ef1a3bcfd5f3a43389f6dbe4d21201cd36565687b58fc34b32dae63937a74eecdd992280e64121740fff2af329c0c2e1f3b6fe0e1ca57f702693cd648a97156de10cada7503f357b61c968885901bd28eb86b081b77fa06db3a4889f60cc5a70c999fbf65b8b83b6601c0bbe3396d066f64486a73940a80c6866b18fee7f1df150404e844feb81d97e049232a5924fda17dddc80bfc8419e013709d000d6d7e883d274e183b5bb387ad8d3c35b95f1c92ab88981721b293c1378cecdb66b9d48748a406536f3079d5cb18e8f235cfac76a24e343f887dbe86c822807ace21248a18249b3fef24f18f512e8305f0c1a3bbc99fa8fc700b3b8fe9506ffc297c5ac1895bc16f223792a65ac2f967c33442043be3e45b90d3554c9d1c869ad9b1803999cb4c5e8909e2c95bd470bf44386e30563b3a717d8479da5d58978ca69ab6b2e1a3b571cbc742e56a7537a362903f0c84084cccf21520c3ec2c0d9c0753cfea016949590c1b9d5905636bb8de491165a4a6513a9a8d46901e8891ab0cb4768112ff3924533ad668da529db82c6e8b9b9edc9680ea0a0a4e0aaacb061f6032a65271ec0c8809c2a3f079cf28591676b7fc0cd356d288506694e4bf23af36b3f7af56235760aa0c472cf29c7fcee13d8625f863abbcc19f5d62a380bb1ca5c1e4bb60cff0851ec70ae7489fd2aba2a7bf35e75a51e22431506b1435935d9d2ec66a501905a55fed91f565a57ea493a67248a18a42a82a863c13c073be2648021cf6320ba5372acd7a2b1ad3c50c066071771f567b4941b2c5a083b898d16cf14a30cab65c44cfed3109c39fd631645c12c7b0b910e429ca208c6d0ad62db2f154fe5c305dca40ed10b86fa4a027f79260836d5ff40865ece59a47a1b271b3d31653a507f994c22b98776923c7f7b3cfcfd0c1bce62a8426c5a5947e7045e03377882b46fa1900003ea83623a1977e967a620cde641a44d8599946b9b7295684f2eaeb999dd86f768b197e7259e5fec96b0537c33f76918afee021f745c7e40fdf8c00bbf327c818aec16635e7bdc74c940a18ddf5eba21e2432f1b2053aca67f7270d3253dbd3154d36a695acf01cfcc4ccbf8e20e4480656fad058d3acef84893da18304a06843d0cf67407fa26e3e7b0497ea9d13dad8c39e00e97f2a6b08830309645b2e1514a37e3cb1456219b92283731d90cafcc76f38d0dc0bb8a20285a36634a398bee59f7ee0f24d0b7bb59d7e45c501d5d8d087ce062c9d53415023230141d2e50fbe5b15429bb671028dc5e44b04110e32b513bf6d21fe709e156861644d6b690b50cb3b9cc0c9cea2d952ae83bb8bfa5e25a564a925cd9370f982b81a95ea1faa664724ddf5b2a10b12baae6a9e607db94ef14d8dabf09bd25dda02d8f70f9695d5a9d425ba86e0c07302ac1a898a33482720f469a361d0d53f94b38126046de1ffa0468c5f75785fd5d2205fbe44fd03d676269bf45c60950466008b7b5509d2128b6326ab59822c6fcb14dc0eeed561fbd874105e3a15d99c19c60b6483f3e17bfc5f49c76df76f44312a6667f97336a274b94ba5413439641ad4a51d03ffff8b9d2e6e5f6a87eab334ac39ff2f93d5aec0438d738fd2494910dea42ac86d8108a1d9a4c17c09cb38e9a43b7f2d81a5550d6497d98f30085c34d6da797a27715e2bf1376ec88b75d77d4505cdf63bdc778769c3cabb1241f0d14e1d2ad03e47c9ac58a29680d5cf18bb1cb39e6e84f54d53c534a91e6710104e83c8e32aec7a36e1dc315fc1d6a211ec7bc05b102f00f1e09093e0f867279ac681d942a7328c8777f78da8087ff8c554ee7ab2cad3a9e4723c2a7980393c56763654e6cc2f16f3a4ee9316da8f89a3d3be684d5932bd2aca276c1e75bbcbf45495e0b2b804e2f401ce208e04ffb9e8c02977ea7c8891d39328a911fe7fe275488583409f3cf3dc7d61f3ce71c27ecb0c2391a6eada10b586ef62fdc2904a3104ca31c44e001242986753270bc272998a8b202240ba66d6191cf1f6728100e69f614e2368fff58a77d1a809814b7bb395d929b0c0e79d699c84d050c9d64645d4d17f8aba0ecc14b70e4f5138fa90a5c886ba6a480a09e27d1d4e5bf5a7017dabb55d3c866b1241ebb140acc2fa34bad6741e5f2d56547b50652f82a00353133ca212a226646bb101e19fe13034c8c9c49ea8e6f69382d1b189b2e4f44573101775c87d8162a83f469e2f89c775c9d453ecee8462d217340e52b8d91eb26506be5c4cc33427e9a171c1fce97a81a05354b624eba5ddf1dd82e63df02a47113a95406f255058648796bcf8545852ba3bd2b8c2223c14ab5577f3db246df63520c9c7a5965db840bac925f4a1cc0c4e26b36691c1151c23cc336bf6ef6befe89b6cc4588e3615016070ba1eb623ec36d86186c15bbab76745933d5fa518309273aa6f91ea085ccca37b30e3540d4a8d59551cb4994d168ab4b4ff39f45cf6f186c8f0037961629039ba116e4a0a670f116f63d935d9892e62024ca8c176d5516b19840a6f1427aa2199ed02ce5514a50546caf52c3a17e0815d733aa865ca639d504160151e2319b0c089fd90225256e9896db769a38fda1e70e5d03518515a0ea62d2e3dab44990326e97c932308b558cb346bfaf11a1fa4fbd1427e2a0b80c1bb55df25a64dfa14fb35f8bc619c05bc8d4bc26ae001d2c7a979d29a22cab54b4fa45601e0dffb2abd33db10e11b0563e45c1738cc476cf919b0e71237b208a4f5fbb470d2c4efc46e8d6d835c825f98f9fb8b4a52979be2e6d4a8222a63191ec2fdaf2bc82e1c40a7a2ed45409710fb1cff0e105369cc45ec8da3cc560a43929817d2318677601c1df1f357996d84cb2bf86e1e2aafffd8af0f6d6782004df50ac7816b622eba8aabeb4fe84c5c20ed224e714ccf16a3eb66a4751c86b0a47afb1d21a8da7b2ee99c9c164844f864615f544473ef6e447e00dc02074cae6f1fb85e917bc1550b1d6923a863159c4481b11dcde8b7e8b46049f8ba06585d2f1d3e359e23e423628d436b724a219ac6b7740cf68c8bcc68486bb6600a17ada64b40b77400747c72731b21b507e541d4a5ba1f3b568ccb83bf22c08b574f44e3c5c8b5511747484c6e9c78ac8333f40bc8b8d9cc5e6e6f7b6d321ff6dd8df1fe260512d2317f4c60f7e53dda03ea34e853d35d11fa790685c43579e5cfcf3d5fffec32944528304a57a7fbb5cb41f4acb45008c820e4810f8e42c8cde08546864ff70dc28525c0132bf0e5e90802d52d1c6f3650970a2dc8ab215d9b21b4dfcf365eefef1860d49311ab79a32c594523da38bc4bcf74ec3dc84c2b0ec64b99c844a8bf3e74905058fe3bce47662324f6554beb7fd972339579e9e486d41bda46e9f8795dde061c33f27629cedf19453e93c3f0d47103159ee3265c97009c2d352774b7d64b08b4222c75cd98c23c1f0375dbc8abadb85db45e90b44170d9b9013788e24da7f5679781dff25580dcc270f3f626396f4a9189ac0c44228518bf7ea5163ee94d64f19fd3c0079dcf1b4a9cf8937bf9bfa045ec58bb19e797223b2b0ebcd0de8a13db8baf85c7ac381a3f4601788091cc02d3efbdc368703bd4699e8321d9afc856cb726cfb0eb772bdce207c670ee33e042a47495e0ac5d50a756a4c4f08a129d3b5c8a3436434282f56cd709d538f5476400fbfaff7aa3dafb88a701adbb8035a1ea708a20fb91ce50bcd3eec491f525a208fc3ae228bea8101d6692acc59fae5a5b8107b280f5e478d9b3513a20917fa55cf98eded6f87ba318f9bf85a1c79b876e4853f137d558df1cd1c22b49d74c1b2f2f914ebee663b6fd81b99cff5f75fb1edfb3e4d13f22ed908eb05a452ef843d4ed1e3d5a21fdb03834180a7012d5562675d0969f6443c89a82fdb0a3f04790590a64f80e2f1d3346c0e61a2c2e5ed18405ca9b47fe97873a3b711a7f3df9f353200c360473efc44f0cedbc39e33e355c17f0a251db80f1d2b1c8e33bb6c82bf77fe08cdcb1319c61613d6207cad9ef33c5a86d1c49bc457b23a7cb99504de500aafc96c5ec763975cbbf71f22d70aa91ad9a380a7adb09af91c130431caca822e61b378327127ae608342aebf332ddf46dd7924e8120de5549302a88b28ba5c7018435ae2301fa26a337c2be264bcb4c8e1b52a13f6781d1af4a1a7479f72735051a9f4ef6bf4dcc15eef415f54ae51c7b90ac407e41246c2f397f2bbe145a5bbcc583ea7ede083133c58bb3aff714f9bf87f61a8e12cdda3fc332842152bb27989a861d2cf2521b4fde1cd99ab8ccad8d174d820af65d891ed20d7be929426954b34822375bd3fba301df18c20de448b941c905ce3f82455912aa9e1bf22d312c8042ef4b70a6e838a39563c7be9100a9f0d4e2d1b36743fe095958a8797a8fd7cc16c3c70e495cdbdf7148855606a6093f4cc2ff9eb01d794a4fa18be3b2e89c8abbc03b6155240df7da90e1c07241677b93cf99fd6555158d0a141e55eeb069f10e5d59df958e068c900b578b7c1548d006dfd7fd41338d552953fef4251d16315dbb263d94543238866a7d40914f4c3f1f6042ca873a12311bf085af687f3aed3e7d424dfc326c7de03eb4c0a1d6b940af7b6d16f98ff20c519f153566fd6c861bddc2e6f1623c4388a8a44540e5c8a1d967ebddc48b2043b05bd0e36febb3d11d5888788c309e0342a0819074f5334a173900643d981f88f94e398aba5baed4a04f40aad0f9868586101f029f877c0579dee1ae3144736adc8a6f234367927a0d204bebe635d6a1f9e9d52fe22186ad3b76e630bc25c20f3b77c9751c15f0c3814d89ab4bccf251aacb9139f593012adc33051001627850343cd59faf8f1fbf9e85493819ab00cac570ad0c2f96ebbc2c2f4425f8cfe557e5b79ff7d009e3f1ab33c85ff339df81000a069a6d8577400cff24e9a9e1bb5b16f766c35dd29b696170e6275009c5b5aa909854eb0b4710b6143a042e97739489e85a8b12e095099f8de4b8d4d313bd9446c9de7395c061667ee38db84893c42bd069ff0daf9fa60d0a3354470f134690de3c4ed6716560ccb1a54bfc5dbc22704382a71cc780931f003b3ff0f831ab90cae3df53aab74bcdc34a81e096cc77b999f26a89c9bcfae34bec3bcf82f106b3800816d71a505dddf4fcd292ce1f1930cc4628782126d1d978f021e8938c272eac58bc14bec433599b08f31b822c1e861c9164f55a542eb3f72dec663804d8b72d319d996d1dbc60d5adf1fa17c3b94d66e5c7e785d333dc50b67f140d80b03f09e3b2ae5510d886d921095d452303c10dde3ced1acf1caf4ffd1abdbf73988c9ef02f763668be456bf264c4baa31f71b3e90af68ef48f011d0c837b8a76a8d530b7fe7e8d976bd0e792c0f4c8aa4ddb9416f784ebbcdac29032d7abe53f518dc3d91ee5f7902b34279e024ba217d2bc50a221b80d688e9ba46f687baa3af81014982febf10c8d74125c1fe9f08e69ba092c0ffba7ff15b8632747b2be242adb5564922241399773c582e4d0a4b6b6e45ac9e1a6eef35ec242e6eeb61c21cdb5afd57db25b4fedc284cc4b7cbdba672edaec3385233c5562531f1d0603b9ee6f3cc41c63258cf82b66530852b091d7c0db9a87cc9aba6566216a25d86cffda409959403c3847a46d8a362edd027791e638dcb029cd7a8c215fe37947096aef7c4ce2027d6b38c18a46d1d35bb6ba7bc5e44139ea3ebacf8fe165751acd56a2e9eefa6cf91801175009326a425ef5f1926a74f5f21d0aec18da731af88468688b44c53940ef4002489942b3f749188202aa001134d29d036c12a73c4b55f1e510a11338231006af54c30e7e8b25bc6a79a10f440fd33653bbc088731341793cbf5e37613898ebef9954720a64bffaf80d4345459973fa17465ffdac8242735076e4d32f54df4bd8ff5a5185b2bfe816005d0128e7d56df331472a28b57b7d7a4ea34e8c7bcd1f8c6c0bc10e8cf55daf18f6057bf72a526f8b0b7ea44a379ab1f73d84c0d77c89f1f204bc522bc8d270e33564989d10b328548ac300134417592b43f7316dabf67095dc58cd04ee0b130c5a77fc883e9e61f589607041dba73b95f12258aaef57f2214f4f24b10cbc7b4014685039fdf0e9981f0c55a9be17fe0f38600b6dc10c43f1aabbcef496371d26c4cfee742f691c64f623d52b6ccff4c1624269ce90217ced070910fd622b99f6dc10c8f3a97bf48f7ba644fb75fd776fe35a6b443b92f38c54092333e97024574d2117b328db0081ea86edf7728665e7a99eafb8ac3b9207e6a5f3eeffbc0324e11e7dabec72c562f5591063759933adf605ec38e0423a29a0ecb3385fd16254784698c592f97dbb8c4149204a7ac2fe01cb2dcd4a9861ce26e08abc687b3198131340a5e5ced197b3fdf00435be8340761348755d163e3681ef677ce3a9294079a5741243b97d36589fc68ab0f8aa9d003d48f5f2004c3978bac354d0cd0d54128c9d5c058f27bc42b061f5f524876bce06560b1278b2637ec19074f7862fbcb7d1e36ba69a64c72468581a25828d147e1d3b462181a8e4f1bbed503a25776f75ffe3be1956d71d33e8fb6c4f35874fbf1fca64217e291b175feade3d73c7bd514b07ca01d7d6142247ac50e0ac2a5967eae5106fc41bd928b5ea5ce204cdf35048966796229aaa27c14f24ce734c240ebb57fb52abb78d7ab41a22078c00004ca3f08b780cce231cf247edd0d5697e4146207d435c618531c709f507558370e1601c551fec6db80babfecf4c05c4e2c80cf69dab7b2fbc74a3f6ae0eb04eaff9f1f91de33e597c0be454b3684b3ef7dbdac4d2eda8b27f024fc768bbf398f7093a39ff2db919ef43bff0bf53f8d8e4c421e702f3a00a37869b3fb3f4dff397c7900a47edcafad53432f3415176eb7a0befc1cec5bea220ad87ee866e0390a1b64cb6cdd63829c88bf5eed58ff130332b37aadc9158ebf166e5cd80c2c3e2ab79060a7fa2db7eb10b3defafafaab70047014952a48ef508fd47ef779ee0a5f915644bc8ac667f640cd276e5e7a6598b662c86d2d620b78f0d5e28b0992c930a443121c7a2ce086308d2c2191a0cafd2148b11e47bfac034bc0551e1c5bff1611cb7e2b8fd6d91f8c17012e3af4065a5f99b7411ef10557cbfb0a2d1878820ed1c41b1f15498f760444ca51fb07477033e543f33893501f50c2c7ed36cd0f510b9732fa40748a9cef09671db96ee70f7af720db35501581518d98e967aed2e03c3b207928d1e78f09e794f45b3ce62dcc8a1386226f39d7da845f4cfc9114825c5f8d84c056f55d21a1db5f13fe1395dac2c3e85bc9e2f1e3c284a2ac61879705d8d65b5cddf712bff13f4720bc02c08539571ae3872615c2f5915fe241238e1022a3f8ee03c9b120f11649915edc36a371fe872e01e89c31ec3bd8325527153ddf5352a9a774dc22dfb5591fbcb83aa4386e1eff844e915c5d7419aec98575142ebc280fe3d1526a1a7cd25d8571727d17872e888e823d79c21504ad0ee41da990d50a49f1d46df83e8af07d064b6a133242d0f77e02b849a60f437accea3667c6d85d53cf402779045487ae2ba585d11be5bf77cab34dd42294af6f2eb15a459601e650bbb6e830fde95d6b322c53c0c6d56062b34454ff93bca5a8998696d94a85cd6c779eb9d16d028f59c29fcd5d643afbd5698a0c671f658386e50005fc93acd44febc1baac481e5b0082da64d3aa933ca4612acce1be89fe5df192be1f67a85fa31b0275c6ea945c51e82105ff1f1c0c4317d53b9f659dd8435f3b7de677fdebcb044e19fcb058872761026428cac7f94139e8e373e881a3ced8290d7afd023398e77ffdc3232c6c56ded4b29108be2a0b90c3372ae3e39d7826daab3fb4e71bdb732d2e8cb62f927d440a8a229c84f7941f1d67f75d693cdf167d1a2df402cd0c940667d024d297c5e69118d037a1aeb17a5cbe138bbaa48f61f49fda55cf4d2052bc22cfce7e50b03a61d1bd57e30abce3ff70f609cbe5c43226fe9f4afdeb9833e95eedc18e9e7c421a30fa7ce6d8a8e8069da343fa03b6b1ac3f1eb852b2c3e9689e9154d3b2195ea0d3f83b8ffb17e212e367b599471ed79258c70b0f5ac3cd3ffb29f78fbe8fbec7b297e34dc6e583a8b098427f88c255d6d6eb015250ef37cd313bb95fc7cad3f8f36b551b26ff5c7ba49295e3c1e8691e714270a47d6cd1f17b547a1296ef490026be36f42be766ec7393bb8732f0bbd53a36b2d0d085718fa0698c2b1e114872dea3aedffdd61bbf8a7a2149ee7263a6b8bdb5d2bb73fdb450f284c030ff8d47ca862343027d4205af147070d41d8fae4b535c5b056f75750d342f50125ce05b12fcebf0fdfef56b68901cf107f6f9eb33ec4df5b10afb3e532ba1cb5f2baf9f50f9bf41e4afeb02d487c1807e87b0bfa4a2f64b9bbd34b288664ab76a29fd1ff40e53068d5265e6838925dcecda1466eb33bef3b5cdcb30b31c84137d044877669be7fe092aff7111f4efca7befd4f4e3ca85d4e876a185f09b826fc8965bdfcabe486e4f8d9a1aaf4231600a8c8e1720286ad5368d41dda4eee00b7939bf1456e3f4c40261e01d2318ef7a3802da9644fec7368d5b274f60f59218e3024c6446d103c2f173b23a70cec4406d957b6778c451cbfe98d43d395fd391bd7dd56651d075d687ab65be50ddf1733ed1c771b25e870dd84b23d29e0fc7839791daf0d3d300598e630ef03b8ec2aec6e320587193dc634dfcdc1e42caa5b7ccffa0371e9e7b6a5f4af500f2de8324b2f60cb6a28c2351bf7cd7bcf4f842561da72f385e2db85f097d6c4996908d0b5c9b133940ed41941f60f06af4f54ee44585b17cce9bbf78878e9f47e43e7161bed0246f593053f2597bef71c271dfe365c839df95d855d067085e289bc864eb2cbde759654d68ce3ae98b7757246b0aae623cdc6aa2f227a4919e8d2fee9517aaf33f2b4c5f8428d9f4e351b9834c9d484a2a993bec6fff3d1ebaeff03fe4530adb891f1f191352eb59af1b079a563321a5cf7508ea6692b62ccc8d60a640e8b9ccd07b45375ef221b8392ad6ee8237b6b3de1bcc2bd8d08c55809d27bdcc0bb6c030312453dfb17f2ee4dd391d0093095f8b2b654f1ad554a39f654a4cfd7387b8419bb68f43c409e35d1d6d023875420ae5eb9613e769b30cc6bcbbd0e1b581db153cc62be18f11a712f901b154f23e48c4f858589125fc4962af043f5e9c4bc40f8a8592fb0131578a1f214625e9f3c4b0c4e863a25b9fe0c6a96efdfb0dccc7787748569cc4a18c4f912c2e1833b3f0bfac0f129325f4c962af043f5e9c4ae487c542c9f940315b0a1f290625e973c5a0c47d494c95e027127b25fc71e25c22f403bb32da598125f60b6227b5090099e954ec4ec05d7c1ed3df0aa3e8ee34bac119057bbb1c44990cbd0e71e1c9d4de5756124b5a7fbe993d53b8a9b183ff891a46227f673912df0892cdac36a6aad1f8c1d45c1ee3b8f802bd4a5ed0c8387e5974d1d8bfdff303c83effcadbb3418fb0e378a5132330aa6a7100b97dad054353f804ffaf304448db127a4ed06f71bc9cecaa1ffecd0a11379266521cecf039d73c3bb96df21fc4a1205f7edcaf2612fac906173fdf5bedcd3c37c4a5b4c111ae6b4d891fd372edb9faba2d9563a88fb78ed741014e362b66416342a1bac44a3e0fe5d98a7ce1fe7b42776ff806d1856f33d76776cad7b2e6255cc8141f773c86527cb7c99c3acda39b89dc04e9d9ce1f3438e1d4f6ee6b47827db47f4a592a8e3406712f1495e63e3196aaedf79d5e56d326d89042b803fb1e86d88341c58392f75deb04f09fc0b14067361591e881ace8298242132c4215bcbd9d5dd0e5c473ecea456b77b63ca07b3afa019469a5ecd2f21f78a95f20572e1f96c6de9ded86b30ce6d0034494903c6be81089e1f4bf6d7e0956af442dba5ea6e785f92752e51ed19232691484b809e1af88a9e84cc5ca7c0d7eb52bc273c8acb3b4a10601982cf75a7206f317cd6f8e85b9a0de3957d80041fec4ce573259e3c64793e4e72ec04a843b074604a4d31963911517ecc8d775e12c43f1e53330393a2e6e49846f4ccff3bc01c446ef6c5732edf0e5f2ffefe5a5c1371092c3e82b3449ec383ac6f33204bdb50e65d1b6bfa51551a0796fe8f47685ca22d7a9b00eac0e720e9ae9c12632a2a03a31dc571419b433f1dbb8ed1001ebc73debfcb3d256747a259ae4aefd3b886e85efef4f453be964a45afb75463155541fea1930e90c2c3c9b9501b4692c11946cfec6fedb753556d8653d82aea955bfb9d6108000211e059e99c6f55923ca4a8cc29c27bf4ce55ec386fc8aa32e9410340be858cb36aad530e424531932561db70ad6d0b87183b08e6f0fdac4eec2f3000eed756e945970ce45ccd10214058301668670211c70085bda0f1ca8e595d73e185a189cdb0e768a0f642c33c7c44e8613519323bb7777948600b207258d0bd5f01a346f24990634b720525048f3892e653e6dedf9256a653f0bec3a01d68c561517e368fa4b14542be20c0fb2e34f5e20ed5b9aeb776a4834c6e8b21935812863ec4ebf429661d38a49595d0aa06a030def16444cb9dbc4ba5cb7954dd8b0a3ebdfaa258397264f64c285a589f9270e54973fb079d558b004f337c6a5e8da05f620559ecc4db2ff28a88a29a3554b90a8da88e5275eedd2f849a824d64717bff8662f0b875f002d3acd0a35d655649d06806f5ca7a38ec32f6e54c04eb12144e4a8bb55dfd9125601e8da151ef89bb16204aef4f906c4ca3017ef0759b8fabe81fa0730d8a5eb764c2d4dbb252ecef9832c353225fc361f640f8d83d4c7c0916f5423d29e754dde63e81b17dc176a2a4843a375fdc2490b207fbcb82b3cc4b8e9ec54ed38d5760c0db8ea8a8692f63b6a24286ef45c30fcb287c2fed4942da80a7a8c95db0a0b3cdc5b937cd6d8f23426d2712c2d3d67bce591735e2e47980634872844a1cd594c62e13641dd17cf529ffb854e8dc6ccbaa7f955e4d8e4ea21bd990018209e8168b4552d5357bb06fc6a5fe5186a6823bccc5c4b34fba9301a6c64425886441247e0daa9f04d73c3e477a24529e6faa6f23206d89064e55793c650ad14ee3a101dd04ffc9f69743ca80430acf66c1b2dac996bad6b4b88b0441ec9202e758aec263a6c1265d4dc45eb28123859f1ed103ec880d971cb1561eeb8cbe5f48e2e00921d4f9e9bd5cce91c5e66b970b034404f36ff0529ead63301274388791b9c866e663991f8550c0d43120a2b62e5b343fd8c0df24bc6acaada66cb4b541cc0d92f7f31d120c8a00522f3e657f5e598338a4c5857055a18ec366a3ecdc658d4939c113e8c51725a035342dbb67e32635b015bc99de47f944f7ff2c2aef9423a2fcfd81cfd7aac7feaa7814df402f127f84931073593297d247fe20340e701337b8050f66fd24aacb62977b5cca415e8cd17c74dd46965a535e532d06e4829d9d6469e783aa1fc6789ee4052848927ed2270a0e8045cbd214972a2a5936744e1db9538a1fe189141bf4815b12170ff11a8af103b81fa94e92634074bae14b7087012839f16cfe41b6584ee19343aaa84a38484d2b7304b0f94e46b2a5f4445d8b3a2a6ed128ca1938e5cba1e58a5b71ca6d019bcdef760776f183662ae4923c418c476146faddc46c1436219987a79c9f02ea72d3cd49e86e1c9ab6a49a79944c867e4d5bf67eebfca2f33a10e9e080572312f7948f615bdb49ac58ea534c1951f9b7217cbd06bdd2a14e57bab8a26739869318f25720d78c4e31fd94e26813e4e4f4021271ceb8e76d5c59aa9a6af909c6342dc19a58348c917b9e6d71452e983925683408310738044f2433f2651e613d5cac7955c579da2dba92ca37880c8a9af709c057fa6fe387341eb96a1d19764d0e6d5b4dacb5edac17dac2ff750403da464b288e148e81983474452e9ebe0588d4322f7119600e4fc868820ca7be9451869c54d0c20fe8bd7b842ba150e7d799a40057064e460023d794738598eb3003399e79f91f600ba8d502fddf306ad2c74b7a8e6ce995cf9d96fd0f927b29f6981b6410fb8fe112ec7b1037aea67aea09a9f068bf163c3165bbfde371203c9a064da24752231365ce951cf2cd364931a0445190afa111cfad8a7e07fb0c1d432e4266c0f48cd0ad003a51461d86f764cb3b0864ee98ce1776a6388da639e5d19067cb453f2eeb2985a6f3a5e2890a0ce7d019f50f6021b0f069da97e618b478476201c3b272da360fd527e1a8d9ee96094fa9241f7592f8d389bf5a89aaf132709ff394a938c562f915877dffc21ce04eb9cb908f173baabff5eb57ad2dc9ec017f77012af4d411da88c2d813988fc565c6a40def27897753504800ba658f632b3f9f95573350495838816b4b5f4a6a2b3a51b427b5975462c32cb0700f3bf160509082fa178dcac57101773933b34576b0fe44a7afd85095e7d9b5c438febd081c302ce1bb12b130d4cf792d35c4c090ed7f590168de284abfc0ed9fd5dbbeac14e3e803c9e58163207478fc330e796c7f0cfebfe75e96c3c0782390cff0efdeb77e5bbde1ec5e16d46726061db102e57bd321134648a48b79befc7b0e0e4db9458ba76c93a17c37ce7d1e3bf5f9215bf687f43722a1870a521d1db8c55ba09186560487670d0269efa2d19239439f7056cc2c0011f2bf36480a41060bd0f2a8493b45fb72561d36dcec836b31ad8dd8117e9987662c7d38a0e58f94d5d59effd74beb3292d27608d39a457b44260d2a01c9e0b472421736e9d2de4cb786bd392741f43eed1926ac3a6d3d715f4ac4485046d67a015d131b5123d231f196849876669b0b9547cf0d3cc9d24a31f4d6b8093831ac9532c4f2e540e2de5863f76f2f6e27b0ad7d955fe87b02a87bd673196a34563d7ba44fd9a1a45463728177b357eddea5131aaf841e71c0d4badf439a014912e3dbb597c464aaa8100d20140bfa3e940c9edd9f41f726fc1393fb0d5d505f0995676eeed106b51c9acc30e0bda048531549590eadbd810cdc7116c6cca672b82f42dce9f78e1abe7dffc7eac15ac68db20ef9716cf9caf082a427115271db2afb7bfaa8b82d89035a7830843cad883d0628ad3981a1e60d200c27de3a081cf7d9f29ce9596058bf096ff33896a9cc71bc6cc6719c81a6f7a18a198960697ad4309eef93ef2c6f0db9bbd4bf6445f4c428fe1cf695834860d3712425c508a171379fbca2a0029aa9bb90e639efae7cf13f02caf9f0f81274a7082ba0613d57dd6ed80a728fe601f1a7bd16df138807356090e2f5a38cfc13391f21a7bc071c99216f861d6a06a4c9d4f333bc907df5b9da2466e8ee83a5c89134a60558e66cef6c28d08d8784d03439a498d5bda832d4c11628f8fc12e52ca304c3e7c5b045b1fa9d050bcfadadb096a2e6e56e3579d855b20c67c95be7826f9bbf45bf11a34add265d4091d9c77e43069e9aaa802f9851f693b62cd689197e6f8a495fcdd8dbe782576f08df47a661242ba341176db9eca8479f0ff6f55e865d90520e1a51413e868c8d05847c84e2b2488bd0819b7d3d915442d2d0025f58be7bbbe41ecf533e801c061fe4398272a9850e26c1facff99bbe7ad4c1dc740287434ab2c04f7db7cee5f8453ba33ee2921b4a32226502270718475dda922a26a22b666627c22905a61a29bbbedf3d6ae29f6bd8307a9c4c631378b56aa8b185f659dc9aeb2ace038618af4428cd9586e9f4fb8b3f414c31841e4d223c924291b0c65605cd63477b4f1a96eadeb7f41ab9ae96d4db9b9d014ed0a9715c533c02743730c25e4ae4eb9f5b290d10a1ed5c921f2654dcf3d44b03bbf9db16d97413033459e5305c284b416c51482ce5f604c18ecc886e8549b81d86dbfe8ef8ee0b270a8aceb08e5ad8b8ccbbc522469b5f37d6542d898d69b91c81e42f835524f3c3332ac28d9d5aef981a9517490cbe1dbc650c91c32785b4efeebd25cf6cefc640355af00dac234a01553e7f0f2e70746683800e300d9d174d84e3b5ca3f765c99fd24970bbfb357614e2b9d60b0c0f29dd83933912c2717622e592d1b9f040c5ef35b54eec7707baa56023141b462726554bdb3d2a664445eb9d8a00402097005a8acbaef5dd85400bef8e2e95ce5c8d4fea0118235adb54550ccb9b810bdcea37c1144225c04f7c5918a1478aa00dac572e629a38a82f25f55a9bf3bc63723031c80ea9adb41c582928750b7ae45cecc61d90299c99fa39ffe2db4b770b84f5d9312a00b8247eeb8de444713c5a4c00b4ff889de03dc0c3c1b4005a9b51c4de14abcce7eb8e5a3dd451c78c8802a03d71dcc0cf8b8a8ed63520bdbad4821a083256f5379e9901e2476caf1da23ee37a1689e075424fbed874cd57e03a308ab130b2f0e8e6b3cbb9cd230e4229dc76fd02d7ebb34262bf26bba44498a3ff47e6a8316f6a14e38f3c9a02036d6e96b90b816eee3924769508524c5e9262e635221c9a9c8b43c597c78502f9933379bfc9f8bef3370ada0e0a829a8975a5c9c0c1b48adcc5fe38fedac1c95c84425d5ecc9ffbb7e8fb4cf35673f0e20877aa43d65217b5fbe7a4ab7b112e3acf456e94b65c8128cabd2eb85568f29815400e461e0bdb3c70c14ba72cf2011b62b21aea36c39ae05550954162a390b91642c4400b9c4726a3be8083871baddb6441097979340c4c429e14054f6118720d94143b4ca2c3ecac0f4390802ee3e66d440a19c8d601f39d6b39c4e68fea6a8da56292da20a398891a15193b8e30c07d9c0d1286fc836203886fa383dc50ee96f145bbb53cb467f3c628de97d10f230629ae34005aa386ff8762c0267439135d12f7f95903f1e5c06b718cf0dbc5ab6158dfb97012f9c6ad49f6d685b5a8debfcd47dac7a544b250690dc8aabc17ba6080900c3b59acd2e5e8e6a9ce3b460401ec46f43fdd2f5df0d00dd568cb42bd4427eccfdab58db4229cada8e6ce12e6a86d7305eec5b72b5781010beace34a5a64a2f9a0180cd5ec9ee1d777613802185f872013890c6bd898d369b70f371cf96ea7304346b2f2e0e23786ee1815699f7a32e3cffc7b1c0ae5bd69ddd937a99aabda3a89874598fdc3045519717793748b1871273e204f8cd6dad674b16d90f2e928b0d7a275d5fc4cfdd74668634934ef3e0764281b6b624bfabad181bffdadff29a492e36d079e7d78185bc33b69ad164ef8225cf1c03d8439767d93940fe021554a0b2c66a6ca919dc51b0ebefcc6e767d0d4aa355c260c1c53cd522d0b5827bdf2da543bd9848058669a6d8d711bfa8e7334352d5f65b179a22baeb1f2af9168c14a506e6a1cb51dd5146e4b2d46fa1a2bafd9f163f40f44ce68560f0d42d3693eb0a7e28902753a236e0b59f45c1596c34ceb3e78f180b1aa5ccb93091ef436bb174a6963de10389e74fedb3a1c538b3d0b19922dbbea786ab2b3cc70b469d48628cc3d6e30e5ac49df462d4efecdb7a6856bbe11f35f37177f855ee97e760e5803b19b22bd455b7bbea7559c22c034a5e9d25dccb32e4b87a1a3388ffba37f25c16f43cbd4c6fa763088b5a67b2e24787aed83c9902907bcfd3c2a00812bdbd57ec110b8a416b71ba7e52b262c4982b0cca8375f62934c2a1f4161d5fc1383384a1837e0d3cc3bf164f0b0b7924db7b9d186975c2ed6a105c21e929fd8473ca45cee439d10ee44c564398301b7b8a1e97d5d93a1d10883385aa4424ddccb926d81419e6c5721d68893bb22e9f2cafa10154a71346176e3373f9e7a76664523ad252c301f67779262ee04c2e094f9d7557080ebc5ce7289e471bb9d3f899ac17038548c26fdd83ac374996c0fe560504c094170780e83e7db321cadf19220bec88e99dd92cb602afb5c745d9c3d16ea3e6e881e25273f320a148118183c61361b7ae807079ee1cc2b27176720846c2bd1992e5092d040c1a968ab568d4b13249c97803c0c9c64ec075a8d8634baeb6c47ae245599553b5b468bd568dee97c1af0a1af4d8c4a1fbc7965a8f4367759a02305837a983079a11885766c82d20d74417d7112a0e32881f0a09721a9dc0000b75c2989c18986a758e2083b56c79166f4041861da0cac783006c434e52174bed038783911501c0208021663d4889291cc700b5bc85d3286f4c010b81435e082d830fdcc72490b504306f7be0c21561aff2a23176531e564a12af868639106a791456118496b2e7c86302c0b1ff95dff89e9e046aae8a26b9af52cfddd33d8207615e1fc5074d49e500190d53cadb1d4833b2ffd0fd9efe2bb1b05749156c10833fe32f3b323d16d1fc2218ee0792b19530b1970a8460b263ab52e4340dc38fb10629a6c65ea5ca167360d709beedbb6093708883e06d3446133692806aa4e6a231248c98da65968489adf15080afbb9147f9ab315d50221855ea010193d72f438b09a98c5646717eb0c6b8e134728241cc74ba787c91e04340a85f1ecf580020a49404b0dced415b764853e9104060d87f8190b9fae5d9fec03e312ba653265b6e32d1396cd12348e9880055e64c2dca2815fb484101e5d6159ba79206412cbf84cbd66c3ee6c8f5d0516b2ff88d91660e239b30c1b95f2a6386aac4ca6b7300164bd39c758548cbec31da22ead9fa43e03300803d76609bf41a4ee48f32fdb79576c64aa2807e0b7654f190209def41620d889f1532f8cf677df21e841ca856d68e903038cc8d14c7b0d55724ecdc51429608c8e23164a7f5f18c3657b05db79ec8edcb1676ae0f88075ec542487408081fb4fa4490e42104ca3ee06cf9703104541afd5d3d61aec83d52d7c1110b911a925ec53e3dc1da3562cda552cc269284c4ef7061519926f258794d1067cc2202f77f967c89b478ebf3736bb243578834ed65c0e042be3989e1cb55df2293734ed7d1dc10a9cefa1c1b291cc1bb16b9da908e914a386e83ebaad470d461712942d47eb739f0b32f42aa5ae87c1b32e0047edb12009d116a5a796e4633319b0260397883c02b91bcd385593527911ee1b12945446c091de3581b6ef99412c91d2ea64c482292e706fac5c148f54d9a08581238c2318d6d91290d49cc5d609e0901d857d7c2604bf8562b3dff06313127c88c119441983d96c07db8e6fa19fdaed09d9444a2a7248b6f686b8ebed0516725dd5dde2c62fa8a898b27a6c014ee9386c5f92908e98f7b6783418af5f4ac1ca47755a03d33a275491570f06e25c0afe8b701d765564270580870de08b3455c225273498cc29e2d43fa71a24a98a7f62c7651afd00983f8843a3822afaeaaa690d857bec819ec15a1323892ca00d3de06c3d521cdebef95ef0aa4b08fd74e3ae0c8181d12aa09d5f03424a4e7c11dda0f818aefbe02f319fc162dacbd0796f9ba7727928955f142ce981e2eb6d815d2a992eb773cb4729bf90ca62e21097ba518ba5fe9d898a9e18172800f59b43b8c8b403a4f9380953772fa240e203dc7dce136969db04858676bab10450047cc3c545d8145a1eb4ac1414c34324567115d0a1d1e559e4a862f3430141f8a564fb31a721dd7de22faaf51d9d08d5a43073dce5a024d666d878a7d70eb674d697903c6269fe2051f2fb634244868eb1d7a022ea3ad197be98b5c1b3c5a312bcd5b2e5d0c619d2b570272acfc853634029183d0184ed16550b86bbe431d937ac2777998a126536e09bf8cce20ed105018e9e1c99c200f49356fad5970e16e93eb9279dfdc6279826a4dc9c771625159eca1fe28bda940b04f809d7905072fff1705d0d1d193adfdbfbd501abb060f2e742562057d4bf0c7a3d479c703b83b84840820b6fc19f7905c4c342efa433107844a0c7496487cef297d2cb9ae62140d30af385aa5442a1d0be13e40a95ccd58eedbe7d4c4bc99e0a0687c6dd617422043bcc2c2fd9c4f228f8c77bb91eb43c9690827db99bd58389eaf2130f870e3cdf50c53d4f8c99bea67e90f2fef841cd0f657194d69d7c128e0c5e49c2acd06599e813815af88f8bae00b56b6a53e9125ebfe2c3a0c1f90b7f0e7fbd18de959aaabf98a1216588acc49409456f5f93978d8161db52b507e76106efc3810911832aa07d83ae438880bb3eda62111ae517cf0f6a40676f97373e08080f10e3cf6022c3c0c1ef87da25675377190f653ed79b8bab0ab9b55dfd0e1dbbdd237be593c2d81edda209002b0e28e2e9d10bdacf5130bc9ab34cae5f6892e23b34497ecc1ed13e7df8588638e79069d1c75a05188108a771f7c554c54f989bbcdcc213f3caf249a0006f0d56000db92e0bf380048e90f890638a8fac81db68be6ed20eb078ded4a967becbbe5d2d600192b6a37fc6794cd2aa2317d9722ba581c342ae4baaf01038ba97365d2b79cff51506d50a088875e1887990a2b77b009e38b30ac098159feb1bb07e351037a0c693eae06ae932c83764b3ef16569ccd52303595c91870373cababae122afc25727c5005e6609205e662fc30b826c62efdc1e62ef4081ce7ddb8ad9109d2326642754370cb8397167be10c1e7f7b3f4af5c35f39a53c1b07b69ab542958e394a3c6e8b945d13bd34c87c54d7ae8597510c9e328d5d1bc738b8e09097620057e240fdec7f14553ba3c745149977280502016ffad4be4304b0fdef9aa644a49e1054d974405ab70f330160b05cd6dca41d2ca4566473331b45c30ecdbe628200080fc23bf2509ba58ffd6a10d3be808974274624782090a16b27d8d85ae24f087eef01d90388b0efad4126cb9043a315fa95510382b391da0006b82d39ca834e3e741522f4cce7284671af491ac3f5ea87f4adfc37f92275559fbb7549a2de58e56a891b4bbc98acb1ed69e1b5c171f489a5445acdba3bfb604169e9155d235076f657612443605990af209180b756bb266d93d22c76ca461a25889c2c778488396c4327dcba28dc75f2a8149cd2efd56ccd5a5dfea9a5d1b8b4b9830fdae48e137811829ffae0955239dfb29babe516bdf12eba35a4d29e9282916dad683d7c6c2dfb87f3d9206adbe76283cdaae2a4443f7492572cc4649b99f82c5d8c6fd4be77e4a186e5d91b445d244afb1f8845ff7b5e05c141eed8f1de977aa8f5453bae96a54abfa32e9dc4f19ca1f0beb1b7d2c3682569a402cea9a5d5b5ba49a13ec9bea8e11e9dc4f0943fd16f7affc5624ffffb31e314832c56cd7de32c3ee8fb68f696d9192c652278918c336ee5fa16ee95c157f09d7621917e5574137c544d1de88f2c3b04cd7ec7a91b45986652193d67f471cdeba54cb546eba6edcbfb4a67509ad615a45a5a5f0995e2447abad98415a53c8f4dc379175f43ccf9bcd206fdcd69a98f1ae3b62662a0bd6886336dbc2678ac2cf4d972bcc94ac7e980ae2ce9ab38abb9761493d242654965019412b73f64c22ee23881b41dc8c5669acfda248abb409048709e44e20573aea721f456ecce05e26090d69d23469851972850dccdd1d001bd03961258214c761a9e70f13fc09d0d32a6dfa9873024f1720e0628b2e3ee0810e80c1810e70d1812fb6f0a20b0e70800b2eb6a8b3012d3490812cb0b8820e062e60812aaca8a28a2aaab041260a25eb05847c67c9ddb338102fc270e7a9c08e0cf8d3dfb9230af730bfa6e1b5536aae30df59b9961ceec9a9dc3abb40e23b36b5606fb6da8720ad5e61c14a152a4cb2d8920060af24a4292b18a950e46a110d0929e958ab354848e2a3ea19410424211c31b2062d024200887ce04107433800c01a6bfc58638769ea90b9ce1dde642e832c527b1672668e36ae84473673b4dc9d8aacb1c61a33c70f676d4be3810254dc76858da5e69940911313742cac434e4c785d87c23ae4ce338598b30bc4a22844e4ce23011e29469c8b7822c003019e07f0cc19e2f3c609ba70773d6fbc71f71b3ff8bcb1e59b37622d77d7f8aee60d2637907c1fb5dd7923c7ccc0052bea8d318c6543af994117175e9bd039e97e58e1ad598e03a288c3038709283c50ec40a0013b56ec5ce13b74a68d273a7738bf16eb64439ea389eae1b66dae4a34895d0713779fe213e5c475ee781a90135bb4baf3bc71e761803bcf133c4e60e1ee3038100fb460f2e4e061fddbe481b943b92fd2954d8fd476b1d0dca1a395682537f0f788c18e56deb6b5ed4a5214c2cf6548ab175bdc3de7736784e94a7327c874164c07c17434fecd664b3bbfd32f25e5a4df6568632fdaae8dd59476a9a4f7c7ba1c8d8ae0b5ab55ed6c4986bfa2ddc03a443b2dd6fc4eafb5280a7d1fd595d63fa2ddb53991ee7ce00214b0581b5351aafb933ec4445bc35c8044bddf35245bda054bd2506345bdad312c0d2a3c8d329e0698c60a481a3f80a4d1038d2e9c46a1d4a3140d22fc335da1d1058dcfdda9f75aac4623887a5b33a141dda987ab4963b8ec8c29ce5073c60feed423816ad1d6b4d8d819e219023843e5ee947a59eaaee10c8b1966b0cc30803bf57e6e56ba4c7adf1f95881ed6515d296829ed9ee8aaea2398508f2b4968a988d630d57adb6d2bcd895fab7d141f5590be55a146e0e35c65d87019f91956738279de8b64b95940c74bc046e2deafc56afd19833a3c1a7e07ee3edd795070f7eb403cb0e3ce534310771e26de09d32a5d69fc0a1f0536dcdd456563d868ab48845fba1ac5c818ddbd23c30377ef74bd51bb2fad44a2588970b6f619d6e1bd627d86d12e77ab7dc237da655ca3f749fc994480bbdf702060bcc077897342e113851f86422678c18bb35cde33139cf126b89a24620ccb0fc3d51157c7f0e2a16bc7d104495c038db83a8ea3ceb0a29a5d404a0073d74cb42d0bcdc2fa37b1fe92e72db58ceaaead5d2a853f5a59f89f8b3226aabbb6603a346ae2e4797a8949e7bee9430cca907cdfb7f7916040c458220609eeb96f1a411aeeae97bc7e1b1ee5719c917a7f6c044bee0ef4b5aadd79dcb871e3a6091e2644e000d7e2d325371093aea7d5210a2ea08d93457ab9bb8ed28184e0c749f16fb3fc3c6c7896f02e7c1728de6164c0a97771ed5b391cc6ed51a63d2f779ee779b3990780700394f980ce1debe271c4208bb56b556b690259782da9d002beb520b471e553f92b279c608ba85cb1569a5a586222d3025bc1e856bbd5a42697151f71dcb72e57b1b47d56d26d1cd62611939d12259e26f7be510f69894945bbdcab498d094d286ce26add642e1548185315a61b68af64a625fb4c4bc85795274c624d642eb06005081c0540b56d62c2129690516ccc6fab3447fbfc377a74d3d5c8f3409bffbe6d679c849335817f039f8cf1ace151c3a384dbc8c16d90f9c2eadc7de8e407a8fbe9805817eb16661fe60702ea8058e03b89621d750f102fb6e8dc95230681b4e49e808074a1c6ebe96f064170d1b15a41890285fae042abdab547f296b2d2ae3d12a594ea7881e2423b7b5bf8b3f1c6931c377078066950004a1009b350c4282f6c74e136cad0866c5183bb7f88af173ef5882803445950a0d0ee6de1e700a48e1524903a413a774ac83aba0640b8fb1507b2010c907504f77d271c965a9363be013d784457faa9d22a2d871653f13c1d517058c688b291cd6a5d6975284a2c28e32251ac446225f23c1d9ef7e1fd30b4b79925eb8cd4daf39a000101010101fd003d71724213134a60b2042828a80605053dad0e053dadd2b00c09d59506fdd7a2cc9c3e939ef744cbdd3beb84099ca8e3dd0db4b7a7d056bdf1eb0a395143e70492133c6ed8b8a9b901d244144d84e9fee211e3fc7d99f727624cfb3ecf937d4af9af1d7ff5f97c5f1352dc3b204dfc70af42a4c40418ae9998c34498fb3a7f0ddb2ece5598b8e5fa4c38717767ad9aea3f3191abe402ea5459005d00e9de2d0006a44d0a2eceddbaf7d344b1acb579e30e9623c56349dbe46ea55f9428513c4f1654530a7aaa4b41383c347baa398a9ee1d810c1e636fbd97ecde6c76fc9c64697e5abcdeaaead281a5793744cfbdc21ba1231a6a9a2bc8272795f97aeb96a716fd91a347ccd9c3538f76e8d14ffb2d0d547bb35384a206ac0e8b49a376a6e6556e3e45a25c4704aff6221259450024767c3fba0ae4fd44559b9daa380281480f33e6390820a80919448014988e1ded124d2c8928021095812aa8a5795ea3475701f5e5095e607f734a025d3a0a9e3ee1db89fae5695a64283735ac6399a7e914463e4c3baf8aae83d42f3c3e8cc1b9ccf7471a76782dc3badcf6c60e68d7b670647cd587137b3840a86d16bb3fa330675d6d7ee3a0382c41b249030727724e81174fc8830eef4080260bcc323702019c1c6882d5f9601ac428b65005fcd080f8ae0a288314558a925ad8552d32270f8006e580640bbf08998e33522ba942411469789081c9dc6af21c0f0ee623a449b2148f78be9104e5a43e0f02ebf05ad58475a85f0c02d7d6eba1ad1d54d572355d0972e7c0b7c2a429078a45f44052684945a0d0b1126808a0474716ab475c6b504fca874eb5b193ab54c1877ef5c0ea48c941c8de65de673198415e51eb70e0287fb7d1f8f41cc7e0731048c591856202ace5d8a2e6f0904192da2e8b212d59c60336dab7668d75958ff268455d81f9b615b9ded3adb751625ca2b48fff84b41e05309ff963947fb214dae648e06fe50c30fdf0f2a8c9768b54e409e541a43a7674c18fc2434e6e69db663707897a311f940850fd407293e0c11238677a118fcb4e96b311fde558cbbfbddb68734b0a425237a2bedc18a77342c527f616dfcd247a25845b15ea6cfb03008372b0842bc9856061065ec0984103a4ad012322470c7afcb845fb88565afb00e896551a8ab91d2c6af1c60e0423fdc5c5b2420634eb0b51559dae664f53ddaf805cb89b9ba42d7c6afdcad493b63be707f6dfccac1871e678dd6c3763f61248cab49f8758f624f5f84b1ec855fe147d103113b4aa06070f71d1417a795da794ad0cab88856c6367eedb7e557f8b62f22c78d5fb432b6c50e67e86ab44b9cfba22fc58afb50bb0b74086309ab7ecb76ad4640180bf81346da42b66bf16ba747181b5e26071abcd3e56dd3d5db9c4113b50e318559d794b0ace622fc22fa8c93f02bbc7808b6f16be317155fa6b8bf74eea7e057eea784a1107ed530ce3c46bc8cd9f8b5f12bfc8d5f6ec60bdcf5e318c632004c1cb29ce0e47937c070c3df103aad618a4445a6690e6f502003990f7ce9f2811b72182205340b16215918864261f89f4b58f83648c0dd6d10e336103969f27d1f5dd5cea70910cde5b68a8695163eeb47bb7135a9867d541d25812e61f235d5fdad58dfb7355dc224cc4fbeae435dee9b3e550dbf16abbf9a036b58d7dc37a9680e87f3ea73256b12ee9635fc0a2f137ebd48ab9769e3170f922d753c77d4961766b3d94c498e14433cfa0366a0e264fd9b278a15e7bf72f18ba875f1cb85657f84653afc7ffd585fe093311e2a836de7a704eebe440cb4768f34d33d6a0231d2fea48d5ffabf28b6f1eb0923d162f815d6a13af44badcb14fee7f27e8cc99d470a9416d762f54e98023419411c0b86317cc2d0020c4a1306239d3b50db5109a82d172a261737938b1bfd560bce8708de63f37c008b212568711f2a2a23e820410f527074900407002840a87077146e412c7991254de4085864516788170bf89962e82b72c743900972c0800b0869bcf083113b61bc90c347d535655cebc2d76283bbd3d913be340b16fd52f2b93c8209d96c37d5f869258a57146b7993d1ce6783f56d756baa0a6fdd5ff725a1947a1ab3ea670cf63c8de6eaa2dd0dacdff4034477a5d4a3fbd66b471cfefcfc00b17e7e80288ed463a93dda599d318c453ffd19837f9568a7a9b6e24ebd9a13a983b891ad2d1278737ae63afea2bd3d9125cd3db83b4d887663cda2ebdae7998b9c665c9bb987d3e9c2197aabadaefd10971b5311eb6e11e5b665ea3e2c593e2c7495e5bbe96ab4bb2cb9fa54e9912d57aa35ed76a5d956d2453b5ddafa54a97ea23eaafb4ff49f7405c52a44bb6debd3cd63b64e54bb644aaf72657b2ec69a6a21daddc06d9f34bd15d421d53bac2c6ca395de72dc75f65128515a4735573257da51274b69f8f99decbe4ff1ce8995aec2271b66d2e6b7d93e4d6b18ed76895742b4cbf27d589c886e3e2a5658ffd63a12c5dad9aecdd56c88475ac334cbf737b012dd36bd4a6156a29dfebe5cad6871a550ed445188a2ca08df85b7f46fbbe75610c582496be33e69640fe9534889493361d254eee4986fb38ee13d9ed7a35be4988d94c2d7825f17db5c7dba4c44fbeac72dfd5a6c0ce7bfb254133f86654af749dcd15cd536ff2ef1171efd58bb28e111f8543e9affde5cab50adeb4d2759caba1eedba6b6db7864f73d115ccd57d3e30ba3a527d945e4b8f3e3afeb61f8c453d4d7d682adae96ba94f55d1eebb23323f61f195dc8ec254da7ade4773356d77d5f5837d942582f673155a7d9937c5fbfb3e1f2b7435537d9f95eff399d19515d5a7bf26b06692aca0757a8d2f6551ef1ed16d6f25474ddfe65ab4fba074dd47df666f7dc2e1b54f3877f6bfd5a69538a4d7eab7b9d29ebf9895a3b16a35dc737126edae4ef60826444ba57b54b444e5697568c7ce25152c75d1695a85fd17751a6f4d5a2b9263fda78f1c4b1ab5ad708c76fbbed6fff47d1f45c187048a8258935012e87f6da6a2502869f76cbf88820f69b70a142b38834245254ae86aeb327fdf473bd26e1fd26e15d5ac9c787116eb98f5c5b68aa5c5a4dd34eb4abfefd3181f21eda6622d77b64e473eb17edb8ae52844b12cc4e327b996423bf46278ab51288a424bb0f0f10b768f7255fc562d53b947426fcb150963191e3fa98565b9b0fed2c62f8d5fe187d7551665a5d00e6dfc7252729195e8e8627b5dd735748f722dc258a6733f65e9c9eefb6cddf941ba351ec5ea7324bc650d5492238fd092a84092765f7844bb5c6b146b9aed3b595ac661bde1da3da2077077d1e70a5b7eba254b585ac49864b15059dc1d076a00abfd9a565a4ad631039f2b1071775d73cae7510cdc7d1e9d39b2818bbb172d51b9b68ab058788572b09c08036d78e441f8637de1d7d615768fb00c57933ad647f7c768579b721d6fe07d1aedd1fb7e8b92d0e97aeb4a70a27f5b423f97e044a3b02813a7265d57744ed510a1235dde2793d8e0e131c67421e1ee94ee84e122adebc75b2eb4caa0e1d9728333adee1efa6c4971622df1d9b2e1de85a8a2b91a3289e0b85b9dbbdab59e973d8f1cf32dac7ffb1083a258674d98dc36fc0f3d4f8a14294072dff417b7b4100ecb5898fb29a10dcbd84c810e0ecb58073e53f8c1759de1b0c461a93b135248a244da9b9e51cecc6694944c146b7729ae26753e34fd819445813e15fdc04f57eb64f306edd656b4fa69ae21a1a177aaadae09b4998635c5a190255ad570c5db86377dbbeb13ad347c96fef901da42b4f3795dc1efa3789738a75ad162b4fbd0ea5d628b29595f04ed1336a29db6a25e69daf9e84cc314676b3912e77d9fd636beb7caf7fa3e20d6ebfb5bcbd537bbf8f3a9bbe7e23014499acb1593f469e2675c63e52769cd529f9a8ae664b4cbd5266cfbfd7d2c2b4a5564b9fcf351bc69958dd30f5e25da7d4632155e2ea499ece54a52c1159bbd948e64444c4bb2d84b8968b6e46abd98be92f5b51a667d58f3a6957e15da5d6ce98bd24ed7b02d7cf109df26d6b5186455fd1a93b92473b9eafc4e610dbf88763ee27f9315559f75cdeff44ff846571ab437b266dbb52c08258df9372dc5dab57465bb56a48dd54633aec9945e5416634a2ac18fd11068972449fea1da62b17bc1fcc119719e18a0a860791a8f01ec2d6fbb96d084004b2868a7122f1d88afede801cec385a5ff4451a0d7521e2a50c8edaf559dc1129a94b466290a7f31786d094d4aaa6da7cb16c22a443bead52a08e8f1c9c2c1fdfb74ee3c6fae12c0ba56895841ccda11c05449c05fbec44cf261cf6b3d48650a0e4bcda24d15175fc2629989c1dd734c404edc879471e7f172bfd1e38e4a75f11d1be69c002585470dcf1a540a11e8d9f1206abf74e1c319f84edd5ffca2d752d75ffca2b8860bed6c36c28f3b8bd5ca29e99a5df7e87111958b8944229dbfe96d15a675ed97741572cc46757f524da9eedacab848df4ac6322eaa29695db3cb458ed948c33452cd1596df163e52eea784f58df47fd1fdac8bfe8b72f99dacf82dfd36e734599f62b6fac2b2df7589487f885fe02f6d8d9334ee6b4a9a56c66e25637a5fab6b768935bc6fd3fb9635a5fc6419d3e17d3237f42126facf55185993b4de37e3225cbb4763f94c5817e9261023e9b79aac4962624a0719fd5629950306a91c6b7035a9c3f9b56ceaa3daf5f3472fc5d524da89386f5d86e2e77fd2db2649d23a12a29da6354c8fecd7477cf45bab2f06ed882f065fcc1f629a2ad7baa7ce67b5ab8a7ab918e5f1810222291b488472974211b15d2bd26c2c77291e139c7ab8768f7297da2193dac1b92ba1bbd2b7795f9bda2172a75e0eacb64732d2df5a2a12aae56e16c5c912a03268e33c6f0d32d6b0c28d587a9f300a020f3012826aae81c475ee72df34132b88cf2801668718c4e00ec4122bced6e9be1a6dd440a3060e6a3c51cf47ac1babe87b1f11599f74084b6a51fc0227dcdd459bb840042e88e3023819d75a2e6abb76a671c6933852687f2cffc7742992b98ce5ca21239cab95eb8b44b66b3516899efe458ed9e8c59785ff5a2f71f2bc11b482461134823c71c61037333430230377dfafbfa41cedb513054a0707683106d00e06525006116ee407bb6aff341b96f5da74adb99217df9a6d3b1f94e163b60210062ab0310725c7dd797080ffb56258bf7585fe736d9261858fbf8f46bc6fbdc16633323c328a9031e4043f9c60cb09b6cc2964f03945e9738af739c5159f53c87c4e61e4738a209f53fcf89c0289cf2982f098737ee61c99c3c3a79c16f89423029f72b2f029478e4f3949f89403844f3931f89453f32907a907073e3e88b3c5671cd1679c98cf38527cc651f98c93f20987053ee16ce1130e153ee140e1130e1a9f707cf009c7003ee1903ee1549f7092e0783ee178e013ce0d9f50900105163ea180804f2816e0138a323ea1c8f98422e6138a9f1f423c00e2e307ed20040f21d580303e1b80f3d900d06703947c3620e88df6f9e6f3f946003edfa4e0f30deb4d109f0c80814f0680e1e307074f58c0e7130cf0f984199f4f7cf1f984e8f309269f4fa4e0334d9127807c3e8104c83402800ddc883edd7c3edd08f974d3e3d3cd0d9f4d8cc0671356f86ca28dcf2676f0d9840b3e9b60f2d9c4139f4d78e0938918f864a28e4f26a0f0c9c4189f4c6cf1c944169f4c143142a4c8082114f1d9460d9f6d36e0b38d047cb651e3b30d199f6dbaf86403e493cd083ed970e0938d0f9f6c787c2ea1029f4b84e173892c7c2e21c512717c92d93e36c0b1c4129f4b509f4bf8f0b904cae71a16f85ce3019f6bb0f0b9660a9f6b9ef0b946099f68cc5823c6e79a1b7caee1e2738df5b9a6fa5c03f3b946c8e71a1f9f6b7af854d3029f6ac2983c7cecd88163887730d5bc7caa19f2a9c6894f353d3ed500c0a79a0c7c2a51c68f1f4964c0671252f84ce28dcf24d2f84ce2079f4974f19986059f69603ed3b87ca641c1679ace679a223ed3f8f09986c7271a337ca211814f345ca0a1804f347172f0008286fa44b3814f34eef34c0b7c9ee980cf3356f83cb384cf33627c9e79f27966e6f38c91cf33467c9e19e2f30ccaa719327c9af1c2a7190cf83433019f66e6f834a3844f3343f834b3834f3307f069a6f46926f46926e6d38ccba799954f33447c9ad1e11309347c2231c68e0e86f408e1d1c1e4d10112577c2221e41389950bd1d1840bd151c685e8a08103213a70b8901c5eb8901c685c488e2e2e2447cd85e428722139582e0487192e0487065c088e39ee6ea48907de81911d3f8a90c167112df82cc28acf22967c1631e4b388273e8b60e2b308558f39c4103e87e8c1e71038f81c828bcf21489f5fa8e0d909e2a38c169f656a3ecbbc7c9649c16799d5c40104199f4020c0271024109f4f325bf82443c72799099089c22799277c9251c22719217c92e9c12799303ec9d4e0930c0c3ec9ec1c3b74cc311ef03946033ec754c0e718287c8e61e373cc113ec77cf139468bcf31a1cf31b2d40f0d70f85067fa60854f1f22e0d307383e7d58c2a70f46f8f4a18c4f3115f029068e4f31697c8a01c2a7981c7c7a7941cc169f626c3ec530f914d3f22986894f31487c8a09b263fae8a1c7670f3a7cf6c0e39307357830814f1ebef0c9c3153c3cc0270f4df8e401099f3c00e19387303e7938804f1e60e001478f0d7ce8d8a1043e77d0c2e70e16f0b9c31c9f3b3ce1730705f8dca18ccf1dbcf8dca18bcf1db6cf1dac04d9e0870e5af8d4a1023e7580e35387363e7520e353072f3e75d0e253079b4f1d967cead072f71e3b7c83d4102161def80c4384cf30637c8691c167189ccf1c94f8cca188cf1c7af80403039f604ee0134c183ec168e113cc057c8279e313cc113ec188f10966069f60ac4f30557c8299e2134c149f6096f80473c42718203ec1a07c7e39c3e79712f8fce285cf2f1af0f9858a1f00981bf0c07183832f433ebf04f9fca2c4e797213ebf6430bd80f1e965062f2ff8f4420ed160e250864f1c46e013070ef8c4818ea792a8f05412cc5348753c85f4796a8a1853484fad80c60a5d3cb5020e4f1d85f1d4d1104f1911e129239593940a6d3ca582131e3b6858c1270d29f8a481894f1a92f8a4a1884f1a38f049830f9f34e070000c09e3ce23e51ecc19a4f89c01c8e70c20f89c61c7a70c23f029431d9f3168e13386393e6348e33386303ebb94e1b38b183ebb7ce1b34b153ebbc8f1d9c5099f5d92f0d9e5079f5d6ef0d9a5003ebb943ebbdc7c76c1e2b34b92cf2e463ebbfcf8ec0282cf2e00f0d96587cf2e3adc79f0e8b181f718e2387674204c07e8176138f5be68433d1cf5be9042bd2f70b8536f7a51c7a9e70512eed4f342a49e173fb96fea828a2e3e7747830335b8738072e1c6b968f91674b6f8b640e2d4ab93823a719c7a7560ee1b18630369e60664eed41b430b1ab46861510b1ed4d300111a08720db8bbd30c84c900cca9974518ee59a4a15e16a1532f8b1f2ccaa0dec4624e0d0b19163f9c7ab32bbaa0deec8adbbc4235e98c413d3a6adca94727c87d86013a597c62e0e6ee1828817ab30ba031c79d7a35b853ef023077ea5d8008f5b418d4d31668433d6d8196bb5be007f5ac40425b2152cf0a1c55d0f159451977ea69d0a30a24f70a88e1be4b12df921c9a14b0625220cea400035cbba36afe8d9d848adc516156e00ec5dd59400512274bba1f162d64bdcd3b4ef8b9962ee8d9586a77d4ed87fb4caca81c5060505c505f505c505e503848600aea49e0059dbb8b7d54530a3a6005a570e3d4cb34f01449412445cf942200ee4e6dd7e20dde326fbad2a2584125112040047ee60386e8dc4120055a0c77dfe21302a1cedd0dee8ec3513694b7ce0710e128226a40d180520285001e3e878b3975dce96d5bdac498215240b38480250d1a4721e15db699fcb06697ede2fc042addc03209635985896259d454dfc60e0e88008bc58af144e1074019004543ada67487a290e21e278b3855cc38108833c647b5f251e1de47b55aaa6f547385ddb44dbae96a54b56d3dfdeb7351cd1576992e5356d2a2d06bb131fda0dd613500cd0ddc75d436293cda69c2ddb9f87cc3466725a128da1a4a800103d0b97be20b77e7d1e2441927c2ae13ed2e592cbb4b3735f86bb1fa7513c6b29d131640858e02f85c800e3267a47377829312911cedcc9255067787c1271b14b83ffd4bc764f3c45de73aa47fe3d77d16f26f4c85cd5c220596076a08502a852efc4a801239ce4cb386bbdbae7d551cdcdd059f6940b23ec53051eb434c24c444a3a46c2114c22ffc92857f1f095793f43b5523dcdaf8752bd17d52292be56f02ed948d5f196ffc6ad276697fd2ce5d21dbb522c6302cd3431a202171ddbe720ec4116ddc8ff0e2eef388a623c0235a78d315f556d43b8288bb1f61c3881438f5f0ed89ae8cb880fe90ee128f20ce880318e1823bf556d4fb0162914580e14e875e46224db4f8f5b60ac3af251e938835ee64098b05f49bac619d79de1cc28a8c6dded5863f8ef69bdd0ad637daf8258a65d1c6af35dcfde6530834667047c9e08e8ac11dd5c5dd6d14c08f88218c3b143e013f3385f8e13a77f7475bcd37f2869d2f3b3284471a937746f200394f13e7019a091081c91296d698bc01ee46dc3dc8533c98e14ebdcc0318b75d1bfe8338c36827e2fb4d38d3a8b64fff3fe6c09cfec2cfd34bb0168568b792227545880e36e8f0aec3b3d58874500f1b75fa6b95525d622c7ee053f9c6df568876b68bc58c65b4d3a5d6175b5dd66e78ebb8dff685f5c5cf47f5f9bc166b4db55f7ffacb7f2d76b49bcc45366f7debf831daa5be84c0f5a8f58338574bc438296cdd5d2a85b6c26c687277c9f4be56849f27d8e67a1fd4b4d21b58c66807e4d530adae663f40fb078876b68e56c3b4aebe4fe777c29f7112edf2ebba332647fbb1f06675a1a53da3ad22896d68a9de560be577728df5465735f753a8588e2508562a62dcb98a8462dac9ee11afbe8f46b1651a2862acadae4fb44abb77aa2f524d8ffc586dd736e923d9d25d921bd32ac549b4d33d9f8831ec637ddf97e5d31f162a8af5cbffa47106eb96327ee4a92d46eeeea3dae2f44551acf485389e033d4f967a61e76eea05cfc3f9afa86619cfba98e7c9baf841e62e624d535a7eb8ff502850a8cf082acf8b220bf2bc1c069cbe131e498c5fa4d2bd479f8b70653859f797a2a764407052a460651ce765bfc519e1a2e05838117043701bb8d1cbf39a38799eec2da87fe96829cce550d21253a831d2d6652bfc271c5e971398f20a77f7a3528e7735a9b35b3fcd89d4c85f6c4bec546b14b7281df1de788876374b73b9df96aba32e712e865b34e316c8d26bd236d3fb84692e718eee5ae29c11ed7e76ed47e90ae7d79224278af57312234a4bae2bf4256424a34b2e99906b4905ea1aeaee93b856c008ddb285864fa144a15bb6501f95b6dd7fae751ad317edeae755cd5d21dad59c78f1f7e9efd32b5dabe10f6bfe719743f4fb58e042295d8574150b1aed2d46d624289452fa0211a52f5a72c420bedff7b9680835dce9f105ee3ec553634f0ff5423b5bb93bf6d4f8a4fb5ad5252de707cb10e77dadf8464837811889d2d96c564b23fca5a77f95b154cd0677ef526f029a71ceae0fbf042726c4621d6eaae313be4db4824f6a9a3b52e4c404ad8f38312116a336daf55c5b6fb456f74dd809bce96a14fe2d3f14b1aaebf4b6a3a747a0ddedd397d62cf55151da7d4b9894df577edfd658bcf4fb7262f9f9aca2c882322efab67e5ac335aadf6696c6a02585827c5494d624da6d6d45fa4591058d7fdbf9da1a66ed12536cc3e121caba9652c1b0dab547b4d4146bb1d215edbaefa3399a4f4f1d55146fb226ad7649fa5c4bbbd651066fdcbd7a4a005ab8db306283de74bd953f6091a1d4583e2c312c485888b07458565848702731f511414595501f11285d89403d12d395085445a977db369a054b0a8b06574ee04e3d1f559ded6b3d17aedddcb1583c37522cc0dcbdbb75074909808521eeee368aec239cff0aae268de51dcb57f8b89aa48fdc6deccc2ad2c5d6095793dc515e6c8090ab51a83716634ff816c32f9cff8a10ce7fa508e7bff221063d5c1d67a2686fe0be16b7c005f7e36ec6dd8334794ac645e72eff0ddc75bc21003688a494caa496a4a404e0c5dd53302229180ed88e1f71234ebd8883e0423c88f3701fdec337f01daea3470ef70be0a822c49c3048806bc3e587194222dcdd35f012a3c2532e264fb9923ce57279ca9582a75c4edc3d478a88059e221a81a788bcf0145106dc9d071a25784aca124f4939e229294472dc40e140915d50472cf52045851162f057b85025642977da04091db9228915a8ab3024c918baa3802be470a002f93163078b112234c7e7ee4b5c8c0c98f9a1c20eca63c5776c98c381919318aec2ce034a0801171f4c4841c916d9b1610e15452d18010b4d4049498640918690231d8e40b8d1e353c85902a578511842766c988312a3884e9008f87802062b34751934f91cc15386112cf4283ab34151103c720c7965227278aa68871d1ae0d0c1cad500857a91016cb879f1137462e070161e243f4414b8d1e35758f0438b142fd239da932222d082672a7932c4415095177e8830668c1d7722c56ff4b8bb8d36eebe83fa0203125374f122ec01b0c03b0a405440e6ee9efa826883281b08e36eb3b4b1b4e18ff96d96969f24ed9ee53c1b4b91b4b7afe5bf760ceb2cbf286e8cb33b6a0c0c15668c5a4de9bfe86db9de88dc51267047952063eb8e22014a0c8d1ac12d6bee281184164485608342bf3f831713a18218321b411c2a8c0380c0016ce47c8893f47f511358778c1cdd511f083ffccb24d66fe117ce75f4637d69b116bd13ce85b14cff17d9ae7d7d88c16fe17c9976c6642862a317695514cba2f02f933bca033377549ada677714181db00e407d015a126f7794175db88776c60177c78192e3236825bf2edd515cb8a3b6b8362b5677d4123c51781dd40678e2a0bcb88f2a8aacb36314da5d6b9fa08401c5003e1654515a4853415d7439a80141628260accf64102b08472d854246a1a57397f2caa8294f4dcabbd194f7937a52c6fe9c7ad2060aed42b0d227b8d7c2fa4c3e09d24f504e54907252270aa59e130638619372f2038d3971c1492b8555ea8414ac4e68536b2246aac91b2ffc307c5951cc841ff4dafcb0dbb6759f8fcaf3649ff77d54db9d63e58751fd355a7ade87855e1fbdabc6d524da65bceb6ceb729cd112e74a9cfba2c882569f4b1d5aec54b5a63859fe6b939674cfdfb6ae6415df849509b43e997fef1f8a1d3942751d2dad61da7db4eafa351a3e6def9eb2672c6f75834fea6bf3eb9285f7e327592ee3f1c78bcbfa9f8c769a8e611dbfe79f7edbd2854f5ffb7d9f3f9f996a2544bbcf7f7b226b92a69fcb5d35cd6d5dc94a75cfaeab9f9512ed40bb51a8d4bae8b5b42cdf8725cbf76111af12de9476391aed2e26cb55c6abad9ff651b2ac9f7f04edd6f8daaa0dc35bc91aeb436a860f23f0300326421defbaba302542162baec2cfb409c422923290bcb94f62243720d1924212ae52218ce120a659b080a910429fcd5247e87c1fcd189632b285c54a1939725a0b9f24eb532cfcdfb9a1fcb06ee76aaeb0c76048f1f6e9b05ea968177ecfad59da69b23ee914083505420922c6e42c00b701ac34112b0020048047009c7a17eb3acef47fcdab7d9e51efbf468980e1d45b525a5a725123468c0041a48bfb2cff4a496a080c435a48113172d7e3ec56900812771fe229223cdc8ef6c5d9ec7505675b67fcf48118140a14281fd0f9c0531fa8f1502c719512fc00e883221ffcd0b3940775dc3de5c111290f6070a71ef5b26cf65fd3ffb554076b3ad852d2e82afc8cbfee568a43fcfa3a40a25e0746521da43ac0911a2202779ffc24cea48a76d433f236e73ab4c4863f1b41dc909e21448604a1de6c45531cd4a1f888140739a438b839f55a1c3ce14088536f45e9aaa4799e66724769a1810c6481c515743070010b585105aa02ee280ab8a3a870474de0c7faeabed9278ab56bd1206a94910af20137a25fd3fd217e1dd9ea502a480d30a482e454905b2ac8476d9546c3cf828596d10135853b4a02ee2829dc51114039209552c3dd6d7588a260abb40ff16b878c542a4967ab347adf058a02de21be5a4c4d3a2edaba6f977a44b95b93f0be96123dfd8b6e7bcb254c7c54aa1a26819660771533d6f7495c69a54ef540e33af74da91e425dee9b48a05f78f4644e96fb29dfece2ef06e6fa9ae672bd9676edaee437bd530df7e86b6d4fa3556e4fbfccb24fedf0e2eea91d5adcfdbe16fcb928b50328a8dba804f447d5510a15a2110000000000b31000203824180d06c3e190583ea4d7011480015fa05ea85c48168949948314528618430002000006000000060c05f108e2a2c0fa27e23275c813160f8790eaae5683035ac3f1ed0a5520b38cd1166dd7a4b61edd93012995edb2959fed232dc876b7e49c82be6346161d5018ed6f17dd281dd657835718650693cba7b933284500ab1539dfb965a99e23433dc0970e292bb4b9483a6ceddcc954c0fae876e61e5118334f80083f464fec9364bf3a59ca49a8ccbd231822e84012690a361712798c1a5dce3a0265932a2ee0f608b22e390e99a18288baae0bcd826a09dd5d734bfad65acc3d07bf9862eb968410dbbff638f6dec3397dbd0b39a6845be2a1ab67fb26fdc4a89c6a26736d86a9bf95cbb420abce292799a34e214c5b74e40b2439e2e891a1be9da53523d321eabefbd1806c97aee584cb3ae84a273da6869447fffce0f06a0cf383b01a767d78a7b09f9729f85f904ccd4e4e6d1fdc62fce6b6c50fc2683a4e9d24f94136995347b7cb2e8a6c0a4dbb80cc8cd33444bc6f0eca02a1589ecd23a9b2662643f8ff66cd645d65fdb36eb58179ea71e3b3c2e874673c7850099223811c2d064ce5b1f7936470ade688481cba513e7ad2589b6753a585260c72237d019ae0d9e985575d2690098914311d4bd726c322560410ec4435cf26929536652669707f76322d892972fb32419f44823a641a34e21491cd3a2c81d4cb9955d4beea47fdf8294e34a51afb1aad50030f011a211c4d82b02d209b85a5398993fd0b74151a21ddd2284dfdb657a8372a5fa9d314aca439502e5973388d03c21286db1bce8e78137961471cdb80885842eb3129ae018801de6bda021d41dec2a05074a6057d403ffb27031c7c47c1933dc20180d158157c9ec605c176ef4bfe6df1d93a91d325cafc1d8a6431ae6a3f88dceb70a092d58b59000c437e6af8ff5775b18332b38b262e80619881783948263c234f6b1052d09d7032dbee6d482119135b6559c770be6182a52414f541b8350b331246f61ab4a752562b1579a8afb8c4788f0ce69f1c60a5c14658286e89142b64fe7a97a09602a175ea3a296d1277cfd23c1cdb698879be58ee263d704f0624a37e2f80d5237f42606ad4af1e747b53a99ee2978e14d04773d342b050f7229e22cdd40fee8e219cc9c143ea77fd4eaf26fffaaa5650f28ccf7fa3b53668c31345e9dcba9ce140c96187398c9c8c9ea61f3fad8e85d0214bd09590e57e20611bfdc0fdb09aa974c8c2c39839d7c9fb19a033a6bab3fab5087241c2725ce3ff3709f2746954a71b6a58fa3d78e12d354cc520f0a75740095861af0e1f167573365efdcf3577376e2273508035a4c11d162bc265131c89e23b13ec4a3bdccf99c2b43f5b560fe34840bb1b70d2e21e134a98f3440a72c7a6e0cc9e25f98992454364397f420c1783e19382eb24496328aadc98cf437d5e678a2f28ebd1ca5296ceee181d6e191ecb3c34b54259cd2576b62b04ba031f7ab277b572f2daf5c89e4e3932003777d227748c1abb43edda9bd7367fa4c885a210db124138552e000b8d8e748ced43eede885849c7de21e23ff0d65856ada89f3ec1407ed72c5107331b8a505c8e4694b302dbff7ed0e5870354033159264866fee9c4f0eb75a2d6e96736f88c4d6e2a925b67f70495a02e9c0f8dea12d6860d9fefd203f6e12825a0ba8bbfabd5569e7bb71ba6e627d8e3eabd041dd733da2014b68fc9f09dc7c0ca1ad366db80e0c42c60d56135659f3b175784c6c8b6ec711d013747030c548fd0dc6489aa9059fd065853352d69a101c11de88527b469b7b4a9b7c2b5517f3432da0051ca5e1f2cf59703833c651624d6cd888b8b4b953427292b0bfda063a13c6f9db9df596b7ec440bc640b5b1f4d1aae20ac7dc7625264ee433410d3bc24200b277263f0fd94a9d9e1c51c7c0eafb2ca2eb6b73c6d053a1710856230089656cb10b6033760c2acf7feeed160c6ac0ad2dcf01b00e757e751b972a814da1ca3d42c5d2a0e5f0ff8be16e92cc79315615f28e5e864a53ae87099f18f9b6732a42a50b35ecb270d18fffceeed261c34648c45eb7734cc0e82589a3861f8403ad251527ce89cb00558f8b9a9ba39f94ae2e9e711491f51d1abd404a7468ead47a8f47985b51fe5cc44355ac9ef74e1126b6aae28f4d5e421af62dbb8a093e37e37ce1e2858d35809490c4e09c257ccd51ebd56f8a6bdcb116c7cc7c1e4b037a74ceb2a64244674c0fb74b9f794dffdd0da42f2713e01678e78a0056088d25247bcd4e7fe4f0ca95f3b0c84546f1031072cdd354a6947103e04460dd78d371e2bd355f0eaf1d86199520fe98dd97fa4eec0aa40a739407fef4a0b4dd46a4f64b44f004cdb4e98984c907c1c344a0e039f0bc2fa07a90d93e87381cf2e8f77bd70fdcb9838a5d72843fc49ed5b5cc640f380088c796bf3e876cb434902e21d31fb5fef6dc5e6865af4430df0f16ec043424817510d258b44b0b33e57a9fb4f69155d8a8734002e53516a24f0654f94391f6702dac5d5a4e3d8e7fd0d70d06a717200982d37266d555fbf68e6fca3306d61e975ad7b6c55a8c6c3e69f56b2e3f5974c55dbeb6ac9d9a1c0037daaae69f6bbdecc1b3b894c9657528f9b04972822d0401473cdd07290f0bf4054653481f19f4a159c8c7fe463ff88f8c3821860d5c0ec440a2542d160e903089e176399f58a5d724d6c0ee8affedf4446578868a90b57b40d4e330444f3e9a4246ac208e5fc1b81a03e0929030701d9bc7b66e020711d67a4345fc427613ed676c87ec6208723f525ad30aee001844b29643f4c210b4d401a8d08655adb1439b4e0713a2414228b936d000ab14290041bfcf44d80a427442e86299533039bc85463dd7284e07936dad702959a1ef8f947d0e130e9f1edf98863c9ff92717f2ec3673255ac224062d8dab88350fcef16f6ceba41b755d2940a8a142950ee48c46482094600730cb5fe6dc8875de64a3c5b71dab8056c05cf849475c54783b0e85e72917a8e6900f3f8d0a8143de95cba56d347541714799fc87f8b72fcbe3eb78119337fb10a4455f21d8a799e984bfd2f14f755c6ad73e4438e2ef12d0ddda699d72586af11bd9618fef575edc24f31dfeb8ac6659e30900fb209330b38ce1df81936c59d4dd911c3a025d1af3b1ba827ce1104b0e42563652ba0eba2a0ef8546029b00ec1dc9a99b687ff034e858dacccb484eb59fd23780fe35830e8112596b53ff4a648cbaaef992c08a2f3efd4f063745f80c163ab5af697dc54fe37d440d6a85a6c0643ab2352cad8067ce0eb59bd315ce151a66a29438202deb6bc954637c104f51ac074cea2e54005773be881329ee89f7e89761ebedafcc2ec990fc1a4b6cc418640fa4fc8668f7a50962b77dd35bdb62977048baef33a460eec8f595485e0f0d00582d1791a04950e807d1b30a85f67e3eaf2513f8a2ecd47dbaf97e67b885265756108f60dbac7f4e884589a5acf61bec81a564d70814a588bb2eccf4dfed4d7fd864754e79edf85695f24615a0cee3d173fe88f106a79b0102c61f64f12235af9208f28d70c33164c125b06da0dcc518b321158baa54248e7145545ea242e3a91428bc1b986eca7be150cc5aaaaccdad116d8478190d60078807b12ddcdeddc3eab1db015fb92039cf98e97d0acf3c30aaeb7834f66ebe946749bc0708900245fd7e9d942beeefddcb0747b4abab0b4a0ce2eabeaac9bb8ac74bab2391c8a68777d9b03a445fc5c5c53f0a8fc2973f36da5989991ab77b00021cfd1388cfdfd6cddf7ee9381e0671c0dca0c589676033210bbd8b226ef87ecba77ced76fec30829251f1219dd48033ffd24723cf8008dbf55defcc40110da51b49f268af47fceb74aa710b72684605b345ec419d67d170a1d4138e0b774fdb433364b0f73be8611ab24d043e01b6fbdfc53ec748939b009e4fd55e8af645b16006e6027d17a7ec32ff278279be74c9c47e0c27a3bee42f5c810e6db9fede02f0677e6fa9f69221d6246d25171c1557740bdce34f82663d472d405382078faa5536ad1eaf45b42f509b407e639ad7c103a57c39c17c06cfea7e423c44270fab6cc40052fb94b1dbcd82826b96e97840f9c7f6409006bfa61051a1f9c877f1490a17bdf2832a418253189bf8e6b84447141079b6254c272bbc6ddc7371a134099654676de08627bcd9dea5aa6773c02cfbca8940ea8ac86506ba2d51b884dcb7f846633058870f0bfdfe855d60ceba0bd79f92e7722ba377a05029e37cb551e3b8c1fba4b677802f882511bf13d1d05dba732f55e9bef53781e564b3714cded0dcf821ead4578d66ebc8dadf74d195fc84eb0b10fdea6be4057b0cd5e2aa7573190b417f74b354d116690c5fb68c732c6a6a8dec755bcee6f36674a619660aba1d4505f5229711dd20ed12041a7373b035bdcb4d2c5cf68fd4f341bc2757d33822ae73a0418c1d6a1285fc45570e83fd7bcfcc0c320fde5c83507074e31fdf2e5e638b54163f1067024910530466b87edd33fcf7042bc7b8a941a09b641891f042844a2ae526d04f85f3edfd1df48563b093a9c62b561a7af2e8c7144b540cd86717d363909d4e1562fcfd0cdbc97f9d34c84bf9e34f32afd9c1a89d789e0bb45114aebf2f3c30d79a472e930a26b183e295b1fffeb6a770e72f1cbe324e385603a0b378b0dc929375bde0a182675b1e94edffb4dc996d9e474283cbeb7a6d306e47723b990f002ae4d2e18b82018bfdc2ae841538c7e80d3a3459da2f824aa7b4506c4bd0f7d4c4ce1198297ec722e9fc9714463c0036a3801961a29e2614145bd010b60a8e2cae395161430872a7f552f7e2e931f4ce11ae6ee7de44f746c2e0ec5c2c49456cf1899c7decd7fe76635188d902209bc294924b1d62601095b46bb91a12cdaa1a9f927ea35994ba956e266caba92988c7c3e909a05e5d0cafe295782f96394ce4cfee5270e0887ec6e8987856228cbd1bedec55ea4131e021aaa5ecfd2958e99dad067335b40b47159607aba2f4fe8f75426fc1ea0b953cbf44b707e96c72f88b6c945fa34afcc66d4a6dc695b985eec0dd083bfd13b224baf1a11478c25d5e805001662ffb7c0fba330fec56e5a3fb88e2e2bba51353ab215367160c0ec6c76bb9c4eabe1e1566d5791de6f526bd7c69abdbc3646bf169c38e1e9e175d81196cda8bfbf195d46c20c3e756043b9d5dfbf5548c03aa494a102c3ba50e4105147b86c100573846248fe81b09ea7c23fa4aafe6a6f684a807a9c3c9f9089d2bc97069929868354834f2c06e9983ec01d0bd763b3ad084e6bb496229bf15efa85ba33eeb8f74835c9b5bb993c4e08ffca2219e82492aa400d0c7c7d2f707e4df9b78d348c5034c1d1ad7729dbf6d8af854f6fb823f19ae563e4a4f5fb496ad02e01a41192bfc1e918c0835b3a93f0b8112e266bb25a732a11ec1119cb2be38f20f06e16064226cbad63527387d140c210fc5d4f7a84d4c5b8cce4c8f0309f6d2fc31b0672864ddad848c9831183252013720289aefb5080528d0d81fdc52bd24956164d980992d7e6b75018ca17098ab12758ec61b386b68764e5304fa7b0259046a8c820dc1f59f6699ea0a2d5ab5a9aa04f6c1d108d62f6e787f48363672e96fd6618e2f5a51231d47f0970b180d7a6b9c5a4243f89ca3877ec40d118e6f6f8ae294caa33f0e099506c3138c1945bf0248e5abbc28403c79fa82d1460f48b2603a55befff5d867d1dbb24af65833123f734bf614d5b0a372df72182fff2cd2acbb77d5e40b62f8fb5b21c833f7d2525d516f23abec2f98067fbab67d3eb954986411c2d69f6da3843aa6ea2eb8627b9505746bfe8cc800712bd9677caf1c87d5f014b25292fe1cc29ef4fdf89b6dfa36bf044ed3743eaea6024fb3ccbf1ed188a6668c2d0b19bddeb0199d9502abb7a250ee42f9a6d5a246cfe3a88d42ec80ee176b5822a5b22a8aeb1e8fe6087c32926b4d59bd7c77034cc0f1dd9af431e6698ee06d8793a96be0771b96e745418a191813f34340c2881f62bcb20047b0fd1d17d04e3ff34aa0c0799a54ca71dc5ac4cf0bf809c5ff51fda1fe3703eff909043bc0e035d839affb59833258ddc7d84e3d7666e938edc3909c7af4d67ef95795cca6968d78430df1b7b74cc8f36bcd2f9e4d49be72029469ade82d9638c5beffadcb0b7e3cf0eb6ac05f76fca29ba39a174793acfa68a97f8bc359dec3812caf6432087501d1a3876978707280dc2bff96090972b0501676b97fc5b3f1f7a98a794a9242cfe3c439e82fdd74178b1c2561ed5a0dea3d134bc19f2380a1bc84575a7bb12dcce17907108490e52d06bd97bea11965adb6bedc03a88f2c41e78aa788ce77a992f7ef2f3e998eb0367f88896bfa5c51f1d4f573683d7e4531ecd7d8ec395c31fbfdef6916206921fa8b892b45a35e9c4be5db2b72c7c7a5940c318c91586179f0df70c43197c0efbc86483e73f71358b3f1d42fc84152f86147c606f1b2aaeb581eae1446be3df8b115975d442303038d7c710ba4d21b480cabf5f102027b6fca72958587bc3e0933b2d35971a5ef33168e36ec887a43e23d941be69768eb2f14abfd2bef11b135baa5bad7c64e81668bd44f6e43a2d7600250f5b161675f0e2539684ea994bdc84d924c3829c8c0ff90d7c613abb7756e8f91644bd25784c91d6747cd9cd06ef5d2c9181ca07d188e4cb4c8dbcb473bee5f1052a0d6a3788fd72b56167cd0cb9ce8310803434b281050ef6570f80d0afafe5979804392ff7da79307f7c20b25855a064fd5bc84a097e872283542eee33242da0eb9f3f83d049d6b188e5eba810f3629a611c03afdba705777d756d36f3aa6ba8dfbc801d1f8071f8432fa0b6a07ebb923d64b68cb5f3b04ed3c3459edfcc3e7eb0eabbe8b0109ff2e46606e621b531fd781de588436f6fcabb81fd56bdc8bf887d7e1b7dbfb1643f481a683070b611e38558d6577ed38c25719d3c077c24ae7cd93e680c08cd947455cdd763d34706f7383209c884e2bde6103d6f76e0df72e8913bf88f34caaaa1c470d88be6e7119fd8c44889e19f70bfc943be8f7868bebf63fe3ef9b62f1d5e0c1d468a4a75a7df57cede7ad85d1afaf44f49284846d50709f6615e504460b48d720c419709a7a3951b422a2a20072d6459eceb07b489c3b8a5c8a414a87d6bce0e5db95d0f0db7c945db5f94305cdb7e7ac22044718daaf8a1cfada48ccdadd6746061cd9e4892d3e3a43544911f0addafbb0f0d904338bcc2f34236d8d27ab32bea5fda8b84522c502bb4d89b1e59f8563bada56ff3ee6b17ebf3fffdb1779e90767b408d20a9fca41e1c9dedb0b9c569f67b66159df538a7dc5245dd00bddf78cd7bf83e1d1d524a6fe95b14c947e1ffc2d64fafc1cad76f3a23cafe0c763ae8c4bdbe2b0ee694e7e85027d187477f8edf0ba68544cd65c303077dc1e23d64d0385060b08443dd1fd0e2303ee6fe9a0f0e2599cedb750592923419809c41149168599365fe164fbe1e8fea7c746a5636d7234def88f710afa4b9122d22b677ce590836f67ed7f399810ebf794c0ff7a40636ffc3807f0bf2296cfa1506f65a989d2e6827d1b7bfeacacd3bb2d4f67190171518e8065e6811de2c990d9c20440060b945bb1404c3d1e7606c4b26a77dd0222be965352d1c84bcb0078bd78a5e5b454178da413f7e7079d3d9da25b8e7348f5dd286c9bd5051b04c95633e2bfc7e7a61292854d7d17031377821ee2b501a6afd35b299232484d9e2b45028ebc314612fc60d40385fb8020f2c11f1e64d3e430c300537954a4d52f7e072633b5dbe0436aadc6f074013f0969a96834b54c3e65647694d433051bc1cc3d3c5f1570a21e180c1ebbe5ab926cdfb68cde6720cb6e6fa59746b4739570021e7e8b513ba3289599da75bffd44654ab87ece2315fce28a5482460a3ee7e2039d0a82f622e669adfd2599300a7938036e129c94be08d6670e6c619e820d646fec001956b39301edb85f286484c92e2b8c3d30260a873ae0b6bf266976c3db25d010050f40563a305fe3396c19e9364a9d890f4d3b0f2c88482be8a405b5b95519fc76976c45be1d945bd821f9b8e1121b71d68f8f7a6e338934e69296d2d82a086e7032f59ecafe67774e91810f65d073f021ac240d36272812bdcc0438384a6c7e7d304b0b8f6b1e8a0f4a39385564edd7055d4704c6e64d26d9d6b6057c59d4195452f9badad82654ed49718eef8de4be81e54865ed62e6e61464f0acf8d6f3f6533c9bf03543ef072434b847bf97a529565eb290815273b6f86fa0cdb30cd10821601ff3987840bbe3ee7c0fc21ef78fbfb1d2ad2b97707018e637cccf1050e33641fc78ebbf90d7945c36ff5864f8f2b82df28673c76e8a49fcd4fee4f85eb1064dcca7e0f26f4d9d91af1fad3cbf37132b5c549ba1510178e1c059efb6619cb45598847b77278c0bbfba45f5ad9d71c9ec3f06007ef279d5eb7bb832fc174a97aa14cccb89b0f0b512459ac82b761c57f2586d1f8198b19c5f518e40bdb9c9244d4881bde83cc26041c138d11992b3e3b275fb14fc767d6860093c37d8a9d6597d9dbe9d019622f52ac08e99390414a4098c26c5fbcceca250799e14ea0e4be621d2ec828f5b54ba54058a1ef1b7f44af3e955a1397d061eccb53348e9ebcb167cc2e06a6c115a2da0b0f55f14e8bca5a1656a34d8c452c15515caece90bd8c4d764bab380aa535ae93c3304f0e2f13d7302022650bae99a23199081a828deb5955738667c3bbdae78606dbf9d96dc2752589112dbe8c594665b900969fd08c158b70a83a08d0dc9f490d62bc0e5b5101e2f32bbd23313556e0e5d7f9fbbc275d043b9a837d3fdb7215a2793aaf465cd57aecdda38c3154e30ce6ec10d700e8dcbe815574f08a79d85ec78bb5e8a0269b12c2a4055c09dfeb1ebc1172d320141021cd8b14d5aee843169d43834c823be65e8d74b98a2feaaebfb0f55b5b35e284f4a93a6e1900f3d234ce1c71f66a38e0bd22d0d35fcacdc61171d714c72d91b44cae9030001c6b06beb0192aa22a44c58bd4b2c9fb308bf934ec8b84221ea075965c05cda31d151aa2e209106bde6eca4ab4cf6c787532500fcfce9ae6be96f59732a591cd4c8ac06c40b996633a68ef3da75e65bb36a93cee1e4a782c5cd06d7fa9c5cfe0516773dbbd3dac82f992e1c86ef0fe93883ca29c7c19e1c0f754859e388019acde6b3d722a9103714d16dc62a61d76bb583c44e88f57e762c9bc7537dacb0a6ee92bfc1a41952d839b0f45ce8ed0575bcaaffadbc17fa8ba6aeb35c5c8b8dc8c21d00464bffdfafc6952e64f4322fb26a860dab46838be5086b5776c55190affe7569f0f6c0513ffce22fc465c5b1ef854c729af3d73ebab37fd8afcee052e23a3c392b5e5c86c58398e6cd22673bd998fb7808613c15c76e474cb305dfbc10bd37e8314e9bf5fbcab1e589e7cb2aa58a978eff824ebdfacaaf05cc7ae5b663d6fdd89d465509b57f6147b9349fa78ab19dd0f89d8e185c39163e6146c1f3a3306dfbe80a7cc397a46ca9824748e00211de1883a691dd73cb106001b543ae4cc5125b9e2e0e538c728dd8443fab97d2bfa8f0ea938186f3c1510a7c36b252efb185cddd7aa4f726a7cc32eb439f22a0ab5adb910e385f5663447f3d7df06a6ab5222072c69adb29068ebad421b77ca5deb907fba9dfc6295c29880675e1d822da0446d36f1c1cb8edc7dba7f0b4e7bedc9869f70ff8f8ce05455d9393e4a2420dfa805ef799b40f69d752afa17df2204b418a09796ccf8805926acdf182765291b99d58f762e8b67aa04d84760cb3f9bee751047ab497161dc3dea34fc8cf134874095d742b5bbc5234bc58a55d239c33cf3c71d1c13b2fd2c08cd52ace8ddb94cc076b46a76afcae7582228383dcfb49ef8133bbe010d528149346ab7aed2894f74bf06cd6f63b173d055c6651086b33a67163c675f44fd0839fc7cd6a12cb835d3a7706cc7c3cdb6c7c44e394cdaade6b84d17ed918deb4dd5fcc374126dcfb2b03795bdf6508264d56ff454ae42dbe79147b5726a6e7d61555741dc29f6b32dad814bffd01c5ab6c4e1ece03c8b9c6d28c3503db3e1ba4c521c5e87c7469911682530e2b7db0b39bfd82bb71a667aa4ce31b1e3abcd7fff1c72b37b9e47b45d11beb8bc4303887f06fcc1a76c98910e34787b5bd21720bedc44f76bad2de2b17b73456e108cee146e1fa9edb777c6527bb0c0ebb91ea94e6e386fd1240338fb2eb734e78122bae58e1ced1bfe9438c71dfe635c4b48e69d04584e70b0f921b392e7166d1408cb4a556c6a7588bec890ad5eb3b88e4f5e87f6015b717ec6dd815a369ce863e0b3ab65f4861f5206f75ddfc8fe48382d1abed6e8831d919227372c8c3788998b44da61b66cbeb6b568070c6aa09b34b1a2582898be304869431982fd42b1caf60fdae4e6c12e1ff2031499d076f5fc4ad9df48c9293ccec5356dd92ccc03cbf9794c6cc7239b810a46082477bee5a83a962c0301ae7061512f73d52d77f2c238763ab4698752a51e179a9648e038aaae70562098d31df9cc868ba6aa11bbdb9e9984a571666002691433214053fec7bcb755a214d5f4b696a5fb7adfa47778c01aebdedf252197af2d5da38fd09f27b6861a3620951d7601a24a11081284dd9aad9caa85c5b971bf62dd100556a3e932473d3cf059fcefdd34d437a3b5aa194d5f18b40855b83a25a35473b38c24b1eb6acf897eef5872bad2f0f5bd8bb58f0d500c6f8ef76f11f17b93254144fb269fd43e772834bb8c6ccf019b08ed47f43b9427e1ca0fb19d27bb61b84203ba5326dd260f5864864fa9e4ca4800ce2c054e0404f6865eda585161a61e613e9531c740fb0351a21c6b5208c7db2f4bdbbf9622e394bf9e13384f318dfa8a9a9f8975d52d58f89a72020fa17d7d8fa4f85ec2c3d4c8fd207986c93ecdd3ac8b388d729d30babccde8dd02d5860e3af18a134edee12f100d4709d51b6a1ec9b4cfa324f849fc3e526c74452bf0ebd4a7efe91e3221ec0127d22302ca9d37f18df55fe928686b2918fc43c9d6a4d452e93d3dca588cf68a45a398b3b2e31c05de3cc55018d32822112822c195e63acb99f956f86ab00db82d149e119b836243080cdc7e40817cc9f3df4a5a0d540a7d8e2796075dff1a820a13f05b41c1fb8b7705bbbdee6be35720b276b65e53a51497272f1e9cd5b98339704ea0544819f8ca558b121bc16b42e2b8864d25a7013767f6b5d9ebfc609d33628290202240e982768cdc9f734ec702b90a5b5187bccbb1de0d1905ef282806205e90a67a01f5eacf3ef302b285773cdaa0d08f5dd7873d85666562e99128f294d9cf159bc55c9c8a28ed57e2261ab13a5023234b411babc1ae500820f1084cd12317b7df80101b547873caaf06cbee836d10ed8e44aec3598fe126d1b7e65c70c121741ec35075d48f2d80ff84ea1753725385864af4ba969fad521ebf30335a3e38cb82710e42655470ad2710ad1ad280cddf5b40f26f01c4c7f49d1b64a5933e8fe880dc3710fd613035a3290196cbe3b8bf8ea5add0b42b10c13ba45a5fcb2f700ac6ecb2c50d97e6af9f4d76f16eb1e50fc6511dd700d1c972c35b8e62904a0d0d8f64d31ea2b91e4bac29c7c6735069aaa58a388062748f016a79a8de0fbb035d75cb9de73a6b6ed58c5c947df8836d05e5c0d511a82872c046fd4761d1d1e83bc0381be0e18d00936d29369f9b5938a92201604a92be1079f8e91e7fcf7cc0b4565222e161fd3c93defc85fa7816d5851258dda5592da5283eccfe96fce10d318f520cf7731f43930531437d3719424a96c95a620f994280896b61106cfc3e7e3baab02df2c7cfc483a84da47e73e15c39d0e004d755ecc4c71cd50b169ae37f3bdf0a6982498260983f5a301136bfe63dc4874acac3cb626cb3a83abfd07897e5062b1b1828d00377d086185eec624f3cf2819079a31186062b125274ed89a9ba6be6e8537cfb51cad84c3161a08b38a5f5d7e700c1a103ea2f4f46f2e1958bf554a9ddfd811bf375ba1da29350184d433776c12ed2fe43ca160f46b87aa02f4978d89fb58342d0eaf82b5c452baad8de6a2f70e84daee54b27e1ab6aa19144c4079c5c2f971221bc087ddd8fdd2f7abc589fec97c63916a1b7ec6ce359bd10b7ddda10d52e1941a2d314f3fc21fbb6cb358bd6b527a23a10349b697e7ea5840e4ad22e75249d0829ee8249e375b53f611320cee8ab3be62723f6f666462405f61635fa088bc299fbbfdb67af0a941a1ba0879ddd5f24e0832dd27f4d37a2f3565b0f744ab9ec6923f0a35783636a43bc0a7a5b3aceb60b279982e67b2b43fce5c3794a88749fcb8001c0d9c068f683355569aad090b477bb08d242bd219b07b8f301f7f328d3dafd750a9ec178a10ed50a234f203551934f96d9d82203b887a1a531dfd5021ed8aa264696683c2442dc06e640f411e99aeb25dfce6883e4b20e66a12848533f9e4c179e6c667b1be8cb7a68ea137e9622c56c666f08a0e78f32045c7d239feb2ae61858333402d2600b2846e4ab26b42940cf9a3b815c12f56cca8b41f172db2c0128ff80d9d5772315768bcff19af2c3ada97776a68d70b21c6b972006f8ded1e71b6dc17c2598a786b53dabc99ed86f271dfb80ef630d8697c0c37179145f2dd851a398cefea9703e68146662d8844cd9d1540a4fb9acd052cf16c56994ac9e9c3cb4097759579fd3e056a9f03c8d7655363896aa38bfe72598aee468bfd1c9f5b4c10ea189f2dbc33f7c80fd45e545e1b9736c8a047f2700552e0eff2314c766cb61972041178643f4e23d5c96fd9231205d38e3480f56d13c19c1e2f743e0cbac20d3f2576f8d3793040aeb255de3662047805975363c6918ba5f8e3c80757bb282b123dfa51efd8d7b43c5e5dc7258c9bba0f7749b2ad5af67448a23615b0dcd43c559ea7e74b367f23dd719f7bbe3fa9ec5b2a4a82af9b36608f8e9122e362b612abfc6a5793652aebf021c118145c12a7029649743ba3f2a21a80df5a52a9215f584d194fc777bf9d389f579bb0e06a3ee8b99a78b36a5f15c385ceaa92189261e177c8eca89489edffac2281bca61bb285fb7c867c75a7458a331c9af4465541be1873ebaac4197b89655e0f669f6018c421dd2e5c6cadc2b0a7d6e657b3c5e65a95ffc87d330cafc42f01ef82663b234e08e5c541ce1cca0e17b861bd7a743f4e68330b88444512744385d6870e6d2c0311dc257dee346ff47e7560ce98643ca316f5deb3af37d85f930bbb0ac671cfdafa36ed79da4edaf522e0464e7fc9b5547ab22b1423453a55406c02326c3ae636db885b40ecf4ca736d4b09984d75077e1f1345c48dc710eb40f842c8c260f318ead01c588e62cc310acd1088aa687716fc163773cb298f124133aaa4023463f0cd52d2eb7f323541877ce48cc03f075fa2591790da009d9975f94af8a3ae6f123fe09acf17892fea827c4bf06eee9cfcd1a76c446bad204bd3a66f8f26f9430ffbea5bfdfe0bbadcd676e98dd58b65576fbd57b4efe91efc20fbf773197bcd6a68f2f9edc33001ee6bacbe7ea6fecbbd36f3faffe35607d212a5fa8d6903962b5c3456c1f95f4bb285affc71a3739acfdf56293349b782752e69b2a6f0914c8835ef6bf7da85b4467e2e712ae674d5b021e0d2157bf7c6f2f29ebe957994f41ea2f12d3eafad46e31f72fa7f0a53994e96b2da8f49bc144e1e602cf07defbdef28211aeb6a16bc2bdcec07c5a3c06ee39a07dcac45d231e0c7406e1c3d5c94f55fe2947ffe0ff80049d03b24f147df9db9f6e871b027e139339efbfec12e960af07e90f257e142a33dd419776835c79a3f6bf188f20c79e303bf6074ffc1b5721d8814fd35d291e103b4bd2d1274e9a5fb8e34afc837a889985b76c1db0f63a3cf30eaad9df2f0fee218ab28175e53df0edf16b4310749dec874e288f5dcd8c47d81b2b7c7f7dd3b236deee72dbe50ff6ce4d6f7e05ae3eb9fcb4f0bbfa74fd8187385fee7cb829f883badfafdf0a27fb2af89afd045efa6eb072c4f8a8fc90560176a934dfe989b520b37f8fd5eb05e386da7f31a8ad256cfb0bef06f9fcc31943fff7b6418936c4301ab38a3f3df88e3febe3985659fa7793e992c1ba53dc53c7764c98a97fedb6b2c7bc8e4c28b679544f455bd99aa6d8867a1cf3baf876ec20eedf4b51bd848d9fdce0228fa3eec80d3ec7b8b20745c408ddefafec8f60d59eb0e8c6db91e75b80502714c93d5da526ea22c010339e3f9f75e7830e3f99d775b08c79da87fdbc3ccc9a72d7c13cbff011a8c942f504671f85ca5631ef43879af78afe1f48235db9ad71e3c6c343f07c3bfbca35f452a904b8516d344c433b9854e6de32fc2161cdee6fc3611e07e5462b14b6a1d75c9907c53ac2b7d8ff42299377f5dca0500c345d7a65fe41c90e9f4dfef90fb3a09832bd2099558e52ba3cb67077e741a0ffb8f96f3706a191e4ee0ed93afab2eb85f407682d0324fba4998baa08a3c30db9adf96d5366fac439dafac65488a173bda2396e0899eb46ccb9a8689f19dcefbe48e50544f3927366dc2dc327fe471ebb031ede7cc1788ae5a8b394cef2cbfbdd3ac608f1741895c6cccd2bfb64f6c94153ea45881a4ec60ec70234bc7be0032f783bb3e05e88977d4371bb8d8f9b1a5a01c8ed7d20357663f2a2fc3f8b05755fb3fc7f28dd840154385883cc606a8cc6c4321ec8bff5643be57d4c24309d55bbb7e3f36d943194dd430874266be3b33bd2f463fac2ca496aac392ab011fe6371ebc37c46a8d072ba49e6a6489e05813f5c90703a2a6bb7867feef1668dbddaeac7582ab7ff09bcf1382e2c4ec5fec1a89dc99156fcaa7258e8866958450bcfb3e95e7db658450c3aacb1c3cc30e68c7f1bc1abdc8e5f10ce50d8ed7ec1a8d6e734c9dee3b1950d74c832191d3dd1dc3a0cc01e006616d6741405b0aa9f6243af1a99c2980fd7ed6e64b7c582d338118115cb9523d0b6bc4b6ddce86a262bfce063ef9ba418e6ac387130cacd1e17a298948699c05e675a783c62dba8b321880bd34f80baf5787956f95d1578d100cddfc0ae14fcdff406e4de216bfaef55e72a21b7bb42408e44b06277493843fc4c9403c476c90717c41cb6b8ef53791f19e4e664d750bfb84c4a229bdfd60c227a8ab2c147c26e600222885df06ac46cb27b039dd5ed162e727e65f785be873cb35aaf867ff6eda1a8fd5c01bcdc8d100b174ae08ed6e21c7cf8a8549a64ead3a0195bc0fbda4547da2c6fe66af80bf113aad814b1cf6dfae1e8c7ab59cd2b3047cf7a9ced69d061dd56f34affbb39207e5ccd53d62da621ad723f4e2f528059111d40dac226b10c9a78818501c2e6d11b069fd01b54d95d1fd5c617e366e4ef5a9e5a446888f454b6b39ee005f27a25ef61cc2f333c47ac5b2c27be4e766390518f4aec1f1e267e3c913c341cd6d1c92b70d3b6f3d9cfa9f056c484f74cbfe109d2f0cb7411e85a52fbdebc10550ebdb6faa05ce227179e87d4c6e4e37594233836bd39f6bbfdc96cb955bb66ecc03500f1e1ad8f857fcecc2ebf23a2dbaa06341176e014937d11523793d038349301c173f4c93d01a03880a0bbc5762b9572fffb0c38414d85879d7f8d3f7089e5c3f03899deead317c57464ef35ccc2c2830ac2156623cc79a7ba348c8b4cf67b78db3ea1f353302f50c40f3263c3d7a6f786787d4132fc5d73f94864f463e0dfa4f817fe0126ac4f47d0136f38b1c34ffc57813f37c8e1a5f4090bde285af4f2ab1bc2c0380525bfdd0839547b92be07905b267d1b142fbbd64b02dd636b725c1798bf96da30dccabbe69bede0788232bf537411496a8df78e21e17be7be3f04642932296fe5bd4dbef218c6f548e624ee603e8a5f2bd586f851b522e426726efc0be1f709eb15b684a5a1f7c106cd078681c98332f3836f742b7dafb2ce01cf2be4de60e2b2a5dc05bf01d8b80cbfb9702478236c44eb81a92d0f8f0f61e100d2a9b75e7ef3564159e30b3ff15eaca17af5f208f403e57a641b73be1c40e5cf0d4e176e7c56d720cf41e7298eb9256911e1db860dd74657cd0c3c8e757bf4a9bb7a7832e52946e03eb29292852cfd9a11e1808770cdf84845835947b42a4fa8d10fee113c98acc01dd4832a99ae76dd492bcccadcf15664ec233cf400b3c6d4f1d5860f9dc137ee68993167efac27f18e5ed44b3b5e019f763aa8adfd8bfd408d33f244f734eaf127b73867ca5c4f94cb5f56069a78b05196f17903f69e5addfc27710edd439a3f79bee5799bd8e25ac17001e4b0f836d108d74d5810ffee07264924e3ae98277e672242108235c902651ea5c08c25ccaea9befab934a1951081b1f7699dc70c6d278dc775c614bfd880d337f4404f44f1ee825c8eb4fc3411011d109edfda2578422a478de3967d010ea2c9d405608da6525bd2171423fa7d7d6f1ce8a4767866184947c06582d7846e93e46d2321bc73acb9354ae3a9d14cf7249b36d4c349690a2863da1f3ae3a41c7ba87655bc299f047edf7313cdfefa7b509c2c4c32cda273e4a1cc793479cdb4cff2016ea9044dbe4fe1a0f25ec2cfdcad8db31a970bd0f99041cee8bd4c0042764a1eae5ee51881b42189b8c5dd70d87c27f3cddc3029fa07871b6386d9e1e9953f420fffcc27781efa4145533cc18b623bc5702d0c0e133bb92af4f0aba1b09d16089be399159efb0980f7adfc2fd71cf2adcdb01a3c83bbe12c885662d0d27ea299973bfc0c0b85014cd1219a540173e02b8d88c0ad8b96a96e9aa8f072bbd20d026f4524c1fd746d6cc1e503e397a37b4b5ad57d3fba4ac2236b46645847519deb301edd0080d4096c60117cef6cd8b9145226a7865fea8a4d52286886383783742fdb15a2f57b7899667421f5612b8db7a91e0d68c4e8b7cb00c227a0f700e35e32948be40f62f6bbcfb9ac244635b3526e272614616f95f03cc7bd4e4a459b0317fdca0d2d3715ecc47944b0ae874c90cf0d03df27c8f60d9c5ce52768eb3bf820518ca32959f248761bbf21d3e6b4e9996f9f605247ed0822381c04a0c05d93b2f5343775eba913cd523e39a4e279043812f11fa0f71076a8d7474f99f79b4db62ad675495f3902cce7f802908f101f7edbcfdca38110033fc97709d7b2edca2aeec54d599cc2a5db86f8e58bd04bec040b8470daf854eeba2fb930571409c9dd7b9fce829f926ebbd7547620819a0f617e3bf3d34aeac88b13fcd4be8182b61e772edec7fd9549aa58bcfe23221cb1428b749f3e05a3edc7807f2493e47bc34d011e2a5f2c37ae624b182db9d67eef0b26cc87d55d926a17fba17b0f9dd14f77caea0ab82af84286a352c324a20b49779aceeb45ed24d8c2e380fc894235b16bf39f6fa321005f37d01f95a4dae8e7ce2132aa1ed7bdd45177c3b412fca272a867793a51f2b736bc6c6927c103727e3eb2081254083d74539d0cb4792e16e16a0f5a7b0533964a31e851c5dd6762f6649419e6fb958d920515c0ea395cf538ec04d42d7e4801f3ebcd3084cf6c89aaa3dbc696cad2561f5647c3ffbfe610d6e0fbce6ddfe6ff99078fb9c77f15afbdb10a6d4f1123b5904151b3e6819364c360555c38442aa7c1c8bc3cc5b8d4853b964dff0e61aac91c20750d557b812b72e6effe347f0c3df8fb4946b53453ddd83b351422d15a938aa6f186b4e0dd3d72deda3254fd3702fa9e68eae4d8db5b460882d45afd5c6fbc74ae44f2dfa05bafa07c35018dd4677593c3c63874e97ddcc716a1bb7c6b0a8d15214ca9ebac63335c97618e398e43f4bf6ce7c1233a550d4d0749eb7a2c7a105eaed15f852317924f147fd41972fee698207bf0383bc322a589ac1313b9a78b4a6193076f7290ea3e36c7132e41597bb555006ce90804e47d264601c8a4014e24e72dd6ae353a51a97d8e19382cf58f42b15ffa637f0e07880fe914027acc4d01ce5b8f24ddf3746ee7d3c4cb07bbcb2f29da8da1f31dfa4f5493604a07557d8bb997ab63e86d51724f72db36df521329d5ae169e36deed193fc0f46d32f535ec57ce0430e8e0742db6c52452cefb3ebc2233001d49d66cb9865b116df77d7c463dc6b094ab979eecbd796adae9c49fd887b8c30d0b4fba428f22a68dcf3ebebce88e08bae18bfd8b6fdf180a10295d590f145c9270e4809ca85dd7f5f089251ec57544cae907765827f904737a92664a285fdfdcfd32dacf0604def890a1bd7ce521ad91453b6b3e8c8658a3618d95503e1846ea38c1fe98a484e26d28716cfd0368af2c9efafb060e44c01a474a7fb969215bdc6ec1cb46f730e21d6c1c5043e51242b439bb89e2398ca2e3acc677c2fd0c04ccec57baefeaa99baed66a78515ade04ebe16865cd89b3b2d21866e3dc2f5f1519f9921914b565021caa1de8a2badf45198b8052b6e99124dd65af8b447dc6c60f29b514244ef69d8af6a3a388e2fa74eb4b789fc178d3057059638217acbed94639b6e20cb68d158b90712a02a2fd1431b13aa2e91bd91811539e636aa9a30b6bc91b60fd472ae6a6480fbeb37bcc6bca1c7c0339b2301f7542f58c7eb1a018f600fc6b4a8c1d9b5de11fb0aa54ec02ed91e1ae055050b5bd0db673255d0df283b4f9a9fce270f4e156de1f8ac78a30c6c8443f67508efff4f3b725e423dfece93d4486d19f9733c2f267e5dae814370bc0cbd0f15fc369c5c8aeb85d7797cd781736d47701ab5399e5308646fc2a0b2a345634ca6b4794fb496e1b9423fab684fd4d49ae41d655a067482f262d81d877b650a9e837a3fdbe3f2ed6479d258a940584ce6ad687a6c258e2c2c0ed8700a67a395600674b469d5b379211e7a8fee7897226ddeb0cb8b0a46ea59534a9a6a8e1756b1be48d81376009d26082c6d884a4d50b8ea8522b1a8ff70691ac704436e53c2114b12e48d51badb0a6cec07a8fb0b79aff247fb450646b08741382fdabe7f9f501d995f0d653a59cd9036bee1816d9d97e8f502d92216ca4a8ee6122422fb841c2b36dd57ee4d7ad40b0828771f0ba00e4780c3a0a05be8b34af7c98d214bdbddd903204773883ab8ad50e3755a68ce4a1ec480e22c4bb24981e2a0a492202f822a70fc7035f1ab51867a40547081a8e0c8a5ccd6e75c32be2b43ff354ff41b222d7a602538374c80dda7add9e8cbf29bdab4d642b9432d1d8213e086c67dabc40b3f5bfdb6c48b16a9478cbaa32cb5c057fa82e5b694eabf140c75a6d22d51aeba918535e5decb7b4d7ee190cf005376f0647ecc41b00c5a30cb20801aeaf2cb06e0249fed8125157c8cb94acf7c9a60c5ac8e475d76b79a7457671631c79c1875622f35c2f2984d583655b90ca8debd2c7359aecd26577598a7727d67e1cbebe3b9f0a5b12d297832d430e58797072f3307f85f564a3e8a621ff03b9d12d3a5752d27dbcd222c09dafc86997677e07d915e8ca6677b73b1fdd318907e780e5fa8ee0363bd8bb28d0a30b4c85693fc905f8c93fe61518495e69d7466e664145c1a5483fa689b0e27ca524a66e96ff8f72007d0b92f4cd7f5cd1a0af56a980a92d93020713323d4e92aa1b32844a5fd7a4515b7f438ace888f24a5528f05cc5cb41a2879e46c5bc05452f43161387dbdd74fdf58c7374475d39b63b6431744099d8969912416cf6fd1530ec76ace5236d28037976f63d49f041eb196673ac2347f31c5528082db84854d4512d94a27788e55522122f1d69bb4bf0252d9a6d5f83ea441b651559419256aad7d21968f39e4c57e9bc609c5a2d34e77724323f46acb0e8cfd67b1656c550c9da21d41b8cacc9ec74023e078b49bcf9440a45a09eb0a46d56cc84306ade04b38909ab3cf6f25cd2da57f14661867a95483ed22021293162d3e4c28696d7b91f2406aa7fe3d07aa64b5095407a1468c3347852d4cbe680370c25583fc7e328a662855cb397c63cb7cb67bc12da0ba97097bc94ab55952244424a665126ecfbdcd85408ab69fdd4191190ab5145f51e550fce49b4c634ad654185030c2845aa4be74700295a5524a02ce356ff169567f3872247c90df47a88be531b98d4ca97006b7e6241a90c3ce15e0a99150349bbff626bc823dea6d2d51bb7457c2ed3b7c00e8fa14acce5c9e7cb41623ff9a8ff96101bb2f31ec9da9237789cedef431d4f9dae4af76c8a98ab5f06b09884d2c60df6fa70f91bc763170c6a6b4ca4443f7148a3278dd43d0f2b123c96ebdafdb494ae2c4807a11bdd614abac40a3ec5a8fe51d8ecf64bc3dc623a29c01c654950efbfd61dbc8bab131cc1a75cc84f0466fa6fbc3d337a536e582e4488f85db87e9d9914dbb60f485c523f2c0278f0bccb6d7fa1fc4d4069825a5fd4698d85061ce223e398b73a71ee858a8c2942109e0ea0b292a6c20548e1328a1ca2cc5fab9ddc5d6fdfdb3ea82f698862fecabde45b030c0994d094d1bb8ce84be6e9007d676df8df455187e8542118a900ad17dc97546d734801c3de11b10a36fae0baa36bfd676e6084a683380eb0ff02540ae0014b347a18116bf982176dc65cc7bcf221d5f806b0ea85b53cc2b79c23caa2ba7e82d4d0af9a844d732240b1d73c29928b555886ab0ee6e06c3bb1968de056a62995c1bac9493d00a877b1c4c21d9f9213e95cb59e50885e3a973520d71e66c543e3cc1af4eacf5d25a2dafd9d1e3b4e389404651abe3d7b01bc1e35f02a069c5f7f9fd907438ef1fd0542bd3be89d16a40765b9a0da9aa4b1d966b2661d69cceb160cc86e9a26398ef270308306d10b58367d0c596b4ff8d4e1c644a6dd133a7034877545f4b4276c392b1a7d1044ddb4f6cfcfe948fa1ffea588647d2ac8163706e47f7593f37711b549c7c0aa118dd563d4d42fa7f7f249b6118b08d0c2d5c6bbf71a4e9f99240d6057a160b27dacb0c445f05f84401c37003c47b3c9a58411b2624372b4a830ff527ba24d7736379a594536d5a888257ea8daabddbe32c337e5bd7182408635715002fdc5a5deb05c39038fde72c03701c387209228841dd3d3e8e89ff09284f65a45d45a83d7b331f38f87990c9933bd8834d27d35e45125ec6aa076a01101e7f7f1c8920d80138984e3f3a2b264e9edee2d554e64d4d2c3e127d084976d8e88e81c93a2171301fdeeee3ca405f94d88958b941655cccc9bc8d559405a0750e658a8adbfc0747f5794884f18a29deb1460efb050878fd4af2b022b76cdcb7ad2a8136f1eae8bdd0f34da2dbdb723c2ca824b8bd29b13612b4e08d158bd4933be323a8ea5fea33f8e4a92012d76916613081697b63d02b1d1c0810d66aa6304197da6e3abdb24212c7f46cc67af481ac07472f8f1b0078c2b260384ab711c1f95dd634d02922301afc77e96ec73d639d675ae8b03f813a3c23501f606d91d0ae30f024cd94b9897087916662b7c45fc02c34d2080172709f33ce1f4f6fd53a03e24a7c8837f58a16f72de100e21fe6466dcda8dbb2d9b5237e20dd630abafbafa4b0ad8bfb5a146f35a10cfce9f02593557d4876b9c64fc91e1e5a4c904489aefd1f5a1e49681c96be6c2997abc0f935e25619f2448e172e73c145d88c8d3f8f79ab46e5c23053a954dccad83544a8d025cebec8467f296d061424ecb64424eddcb15e82e3bbaff240f835a6a699ef35e56d6f3665ba300b68b6e1940631cd44e7f21d433e6436e3cfe0dba5017f1a9b68573f40faa704b37c22987ddf8764f11f01bc4e624d3268aef1f98045e00213e70e4b629b97bb3c20cd1c27526da21a277c1a68d2022444eb3ef3fecbe89cded59c746cb80cc1ccee08f59d8700a96f7fe467076957f0b00dbdbc8cb5653ce8e8da705639280e969a58d67429c873d369f5991f44838e64bd66607e96e7964788377b8c2b16e85de5d5a23edc84ec1a6d3af8ed985c659bd9b63ade5646ade730d56fc0ee72be25697d7f89e5bfe776c585c598f8b66dc2cf3bb55b5e7c5ad290c87a17fb8f5ea924788cb17e29e0079c3da55272dcc3567d6188fd53c3774a2d5e4d34a7cbdc5add21c64e36801903581596845badc59b44c1b2e090aaf86cf81a1d13dc6701b76763104d575f1fe146277c107a7c403921e25c342bee76a7b3a4b1e0c8dc7beb18a9ab8b8b34c2332976646cc1daef04760ab015725380c235df5609eee5f7f16aba1cb3cd6e02ffec70f3d59a0fe502f3c46048685fda042c79fc952241ba4d37faab97a4771bc4ace8ce4dd230093f62753734583b4cd3e702f08268d048e6a164880d7b1ad2b614bd4fba6205fca499e711052ddf8d4ee111b4afcdfe631ea332b07b36196c4dcac1f8638a0e62869185905212c933b2543cebd8c177f0bc1d6f12ff170799b9e8341043bd5ef14aa3b662b98a3f6c3635c241dfbc983c9f1201af203b46a82878303e1a2523b2d510733a400b577b7a13e84afd19893a06e63a57a38141414f510bc2d4d7ef4a36cb4f9d9b4a1cf97e680b082b4df67bdeda8106493a56efa0b79fe50266cf6c3d4a2748a8aa8d3a0fb3728164c23dd4aade807b29dbc3ddc07e14f4579b3183a3fbb719a09ded581aa15bd2cb105a6f1e6a1c8ae2be6808c36d46307be0804048be9ccefe6fa78fbae3e474055f166566e3c9f5e9a629e9205b5bba8befbf278a06dcc9fc573c61875f5bdea043e61cbdd27720a7fb89ec3b9988e64d37d9bf2f24d330835b1991698b229accb38983ddbf9de938a7535358c66bba0cd01ad35c42f052b2c0a963a5a1e0b8ff47cbf0b39c1b4de63877437a8f7ff12760d1b0461c5f9474e1a13a9d355009a4b42279389afbe80f9ecdc199bdf0c63693dec9ff283e3530d46d5de0b83b45f1b007438baec00249327504b398df7aa1f3c8d9388ba32d0f6b3bab00ebd1a44bbd2f45591f1aa2d5ad6971ea307f3a5b3f3c7cfea527318f56b48e0c281076ad2b85e8b1b4adb9febc842ae9963219c7db99bd3f004c7acb2eb154f18358e8f3dbc88b916df16f5300a8f6410a5a7fa134bded2a63b0145a9b20aec17676eac969ede3a95ab82376b4f804736119c5dd03e9cba718bd20bf40a9f4218301ad4458803f09d2bbf88bda875bdeacccb180997fd98558efa51e3d9c652b9ca7da9df4fa79327b1ff4dc41ada4b224983805211334ce906af613348512cc193a853d8fe5cfaba251833e4210afe5a830702fd0f01b4a23ce6db39738d545ffd19df74d1d5d21f678d43f9b979b5e20faafc735ea27e494e0916256cad15939066cbd484b729242596ef4ff526e1411e0067f774542d4a22242d29f10f8b6a5d03498085448fb01a056c80b9bf16b3705a020793046206dba9e0aca456a22a72dba9721181c76ab9b8cc1664def5b3979f0c059a2c3a693ea33f244971e209bd0f1475c61994a536b05d65c5213a70f04bbc9fc7ebef36017466f5c985e3bf06e2d32dcf69335b5903ba1858423bc5bb78c6c8491b4a423acc2dff5969347849b6cee0e4da1526f3be4dd951482a455814dcf18b6b1d2108f51f016241c9071fda6ec6961cbdb6276e372591bc022574cadf9d3d0b9a783dec0903acf275da463dea626f1ce9870396a8b90883e10773e79a3f4d5eaf24c488f7250ef7a5faa6b130cbfe5b6ad2b25c00ffe61a4280eba5903e93b27b12aabf010cd57091fe86b9ecdad6b7032942d5c8d1131b97db2f0b1c1a1258a902fef20611cc753f0a12452661ab014441f5b3420db3f51d6d9286d1dafe100490ec1e977817cf8df45ffe8a53bd35fd844d1f7a98fb3c873c387a4fbcbb964292fe425e211c9b15baf6bc4891f6cf60a64fcdbbe0d5a483fa8c0507e442777a0f974e14cf2fe3d78965d335dcaa0b079662737d36ea510cfc2bceb092185199ec5e6deecb1c0d57e2ca6e959580192ff45b3c222a0119b6d4003e3a0ae8707f2936cf3672bebabd09f204d99c6c4d3bfc22d0df4dfebc496de0f5575af7662b8c041652c14589ce4a4ab15ec096e4098735fe06fa9bbbd1768ce64b2975d72d3680a8662efa5d3daf8f630610bd4c045adfe0f14c2f91d38c855c5b31d37ae8e60b05a24defac39a2e22c084cfafd82a197c289d4dd74b4aa119c4358ecaa0a5943d60892459e94bd1cd653849fc03648e77128e6e94b0bc2f929f764520dcf78428cabb65beafb31225437025d0d96bdd9766d221189760daa87ceaeaa5165a9e4ace484667f79c9639dd22b9bc6798940c7b3b88707d3156606b04a8b104a650a9b55fd42e37980ac3694e5c63736b0354c1af1c2cc76fee2b502d06a45ce0f311c248f821ab209fafbb8e5f2efe58b64203084dfd848aad7c65f8edd2bced25de939082a4345f95c82f3f24ac30794daf1a1b732b9d3332efe69f64a0eaae947a8e460c3f9ad8a49e7b595a2a23bb7ae97f53fc7408a2fa4db5962fafc0913b9aca2f9a7b77223131f9ed2c6718603bec29427a6c975d9e8895f23e80e495fd8d4bcf030427af4b4338ac66204e3ad875adc11114d76d47f258c09a49df9a1b0c537ffd8e80c822faddb111cddca3a0ba210c02b49f5616ba0922837208bcfe23aedeba813e36b32ffb62538ffa7bb6cc7845d10b87aa935b611f71d775512969b348d1768e79c6b127c02200e63b4aeceb7150ac25cda9eb0e9e0619516b79753ee48a71cfe8b1008909e43d1940bd1e38665f4bd9938de9778e97c63fa256670c993d61f95b0916c674e830bce781487f009133aa977fcd3c2a68410c04f2ae948e977e9acf74867b888c93a31290acdfd13b1f70915cd68f0d1cbad18227e1917c7c8411d76885c2e4777cb5cf59cf73402f0951662daa6129191aad5836e1877d4366b07dfc24a225d6e053d7bc4dc1e26413b7773f02f544ead1298ca88bc167ed385bbecc21ff3793f5ee23074353949a4beb95e8ccb803ca62f9414c326df41e2eb2cdd8f0cd7975385df4878b7075562c6aef31a3bca0d050affdc889c14a618be76699302dfdff940fb58d810b80af013e84ddd9892c45a393d6b8eeddee1ae442a5e3a4c9e3ae4d4bae24d3a30ae1837e525bf09ddf612ca692904ca1e35c044f5fa02c52a28b4c8e74d24383527c396b5cedec50b60098c4fc2f0774d5606e83ffc55631f81a949567db3e14f646b6de95db67c1f61fb372e40e641b14d35672274267139bfbd2cf54ec15b8c03381cd091c5ed5140623154c08b6882ec6c4a4f599f538984ff18e6714bd459e75b52f5dacdff5b374b0baa627de0735c18d2a5be8892e2e8b7380fcd8e81a84d18dfab081fdc56d4a778ccae60e076f2234645ec930f5de341e515d419b22755fc62dee142b77306ff984c655010646d2725ae96676ff003860553421de567315458034e3ebef00722d4a66b4b8409081be245b102ee0fefab34ae436dd35ccda34f03678a27d7d70f012ed7fd467cdc7988d80f2bcf95677d748cd234f11b69ac01b8a9bf372191f76226ba74e23bb0f0a0eca3a4951a8806439eca11a6913ccf6a5d537325522b468c720260873127069e61e2e9fb16955b4045525698706f0ab73742493aa4e838e4edbc0f9dcb98a4fc9ec26e81ed7b7e948aab348654430daf3b664e98b1f3c7caba90a0142fc8fcba278ea89eb278502c2b29f85771c34a371cca63ece5c2ac193502bb8b183fb4f1776031bf66787adbd99049ad39f987f96ea0fb4ff8df9a5c628240f393729b5e62fffca4ad94375056d6204665590a9c4b9d275cafcc2509d26cbcf0df20f81e019103b3e89cc47330d3199be8d5c6d3dcc7495f0aa1ff29e57e33b3a0fbd9807bd2edb7e49ce00fcd37b0f7cea2b5973f057f38fa6bc7a1fc5c8f8afbf9f7eed8fc1b0db9b54a52a5f95ebf447aaea9346d98bb280b77768bec716ccf500d708602a040b4203e300e8ff834748be2d862124fae459fa9e69474a1ae38a1920797ac2885d1deb004ee1a9bd4375d08c255db11314a3dff62e6e75de855fed3932c1585fd3ec091850196b77a4ca6415710c3ee2f04d5acb42dc8201fff44c880117c78fb59f7869b84adb37a758939b9a90628a3d32313468e52c698a32e526862c3201655f5c49e945cefb0c418fdee39b8a64ee588694919c795339ed004ebd9e3ab0f1350fc3a6c5a60167aa31dea2fddad06ac3bcc5c933e4f133419df5e6f7253e5518332f7d738516242bcb37ecd91ba17ba5bf027c681dcfdd176da574152788e01f6f9b351bee74cef4997b8fbc3ecb4e1d8e0ba657acb81d0874e181b207f2ab6f3caa750bb4b5efb6fbcdcd2cfccfb8b72f43e89230a101d9512a42bd81881543bbbbb63802f110abc7f97aa787cd2d2359023acaf74970787ed751ae2c320f0ac96c6e688d5171552315af8aaad3b828678b2d4fbea5469efe0b68b4cefb7af29e12d99a26440d1008d63920ab089eca8dd2c1d3d467f46f947747aefd859057bddfb16cf1c0fef1dc971567ca6db258badee44ae4b2851661a5842a9d0508869cb6a114dfb3ac68fc42167b4c097e6e27129a12e48c7a7c8dd303c98739f59f007ba661a764e797ff5f4d6ee06dcbb005ca757f2aa8e6c136e245d8e9c28ddde2d70f1884255e0ca0d664eb22ad454956094911a1242b2b78c8617683b992878c0bf1146e6cd412fa2d1a33dedfef5a4356ffdfce6b4962072b84b7067a676f68e6d3a07acb57b7399908b573da68d19820333b6d216290b36c5d5f88680107cc48b97d7171b2f762ef73c8cc4f40106220f42d8e161ccb1eb842826adb91456bf02bf164f7df3e58671b3320540f6aec011f80c03d63ad02c295cf3d60be00079075e8481f7d512ce5019895d4e0ad00887da68e1cf9ee18f5d09ccc11b68172b84e79246c3b24c444cde58ef39bb61418a3bdd00da4d6449ab3e77a33fe94f287adf6d4625ad33848c77c11393e6275d9d6089ac1ae30663a7bc247886945c7b0a422e310bb3eb86996a2255d2a0f09e30d0b92ab4b15fac9de31a8d27b095e5e70a6c33cc9390a00773d7a983b01b771db1000e1725def7628690a30db19a1db2f97b2b449b0958d13c127d32b87c3dc155d971689e831fd861273fd8b7c882c968199e3297df81f7dad292c57b1a8921c76601ea77d791326688e03e01855daaa108b10571763030cc1cca946c4edb826fbdead307b005fa149dbb78908803137825e09fd3a116702c4b7ae229405aecedf04813ab33c47ef196a0cd8b8237931d7ce1a5e4aa35779b5aebf5db0dc9b6d7bc76965b4d90c5c750be7e1bafd0e5df07102103f06aff148019f48db411e0e17338b0f80c1a0c29a52810cc07b68911e29f69910befb82dd138611485e580c4f03a735aee5d207d0610df3a04bf98a89e4b033eefb3354d3de1fbac64e893e460a73fd5099635ac32a226268a5a672f10723f42d2b9817056eec4840659c97800642492e9283f7507c565c018cb3dd2403790f69989434c1f27428bb3df1e653e8bf58cc59e85ec40e754f1f6799301f15fd96076ec0fabdb3e0a11dbf8b0cc7318513e9fa621488c5f06ccd530693f9d565945ac74d00556c3bb36d59d407a9e278f98811800be7ce2666f947ceb13f7177a042145b180db75bfd1186f5dfee54409a337ffde42212d5f08e8151d1f5e4d1e34a730136bc63f6f27fe231c60d52316c6936d5b9e1f8e12f5d30b060953686c1048b6aac961a605fdbaa78de5e1ffece43cf8fd60105793064a909e47668fe133579abdf3248b8eade57861acd1efac032420225f6b5b0a3f372c173c39f79db7b060122f755a67e3fe6d715a12d9404f5cbf82ee0899b4941eb62c4e3248b266539bb5547d3d5847783086ff837356e6605c857a668afdb442c3d7746510ad0543e7d35b7c8b26e159f4066f889fe3a0521172c4caaf9038e585b252502a54eff79f047ed2d044b0121a31ef87c8e6c8424c826ddc98e99b5459047dac23c8cf59fa4016586cbed3734f1e4b83c3c16fc14ec5c4f019e0f0b6463b2eafd6cc0182f7346e0814d6c1b00136432d295336d871f0d1b4724dfd6363df5cd1305ced1e6108daaa401c060a4b37240ce316804cbde0398cd4abdc4c39ad8968bfd06a65e166a3781f7c8cbbf9db1b354e1ee7a3b17e1acc4816690465daaffe9d6f37a0f37bfa77542711bd4590b6aaf24247c2c1c0e824e3d285ca52dc5657867506d34ce1a6b524ac94255aee8d388a12483ce4c736c562df1b9b9674277257061915a31016c1be32b2700fee36ae388e3cb0e3f8780407b6ece46b0b30a657e73fe054266d953d539cf70c43f98a1fde972ad1903716e807f73231f969d2bbfd5fc99b139c05cdfde7bbd0e8666ab9d7cbcd7e9f3e68692193f091250ff13c7b94cb046760de3ddd6517bbe307de4896c1a60185a901d402e797c760a37f601364b9cb2708c06f73c762021d4bf8b0936144dbbdf0930d859fa2806862279b615db82c2b7a6035a0f7ea76078343dd26290bc2e4ea1b80af691512799f07d563d546b806c7924d00b2fb848c2f4e021c88faf95060a1f9535f51de841dabc667942a5667809e5add0d9e0bb739b3802a6c1ec0ae8d75de76ab1a2aa2e7e1845f2f95fd7ccde9cc5a10defaec486b5f802a6bd0b110f63d74ddd33dcd25da4d6a734e143f21aaca60208e6971502a0951721aa11ea4f03dcff520a5d458650db682bf83b4508fd5f92a151378d69d6725ff308962a4d98dba523c3165a8b6237f6d6e2f08ca4429536309836ce946aaab2bf3b7667ceef45347fceea65fdba03403935c7d0da05c4d4c37239e3a58ee8942af27c466a48f36cdf4a70815ff6b67b6ed33a522b62855a4f62fa1d7618004eafa4b71852b2dd50e730bfed254de97cee2d8fdcffe21e691d18381bf9c58951c2f469b3744292c66be1127cedaa0c4baf971c30d3b5e8806d8385b0be0837d7b69d37b3a559b95c26ff7c05d746953a9fce696368e37dba1aa10cb5ce357c7b1a7ee64b4b1e139516ed3a014290cec1c50bdf02280788e132b9fe45f0a5fefb50859653239649b94b05e7e2db4135bd417d9ecdf397bf5259fb8b65243d36ebaaf08403a56a6b7ab0a443ab079c0fb73feed0ae1f12ce9dd76973304bc8d63f2e83a37b15456d9bc40001c9d092c8836f1e69fb9140b4b55271624d4cdf0af66f8e9dc1e9bbc9874dcb6100cc30b7ac078c47f7599e82fbc19f9443ade2451dc8fc8d44e8747e7b7f5beb48ac5fd8b688e02d381b2b84a6477ab53c94d055866a25fd74b0a5a5f63c296d02611cd39fc291bc7d6c1413a20c902cf3865ab0c19476c67f7580ea8764961f9dbd2002f1001834c0ebb151fb410b3a1350429a6b57ec0e2cf0950d9b581c670f3b8fc1e34d4a03f58a7aa404605c45b334998caa472d2804f5ed846edf37cd35b375b794dd3b8b113bdc3444159835e449c70a009712b6639b113df69a61cb431b6a9039fb7b3f6198242ad0226f295f5c6a289f06087efec390fc817a41ac9733ccc568b1d9764b11c6a510d8f78aceaf20347cb2b47f126dbf87d314759e1afc9a1c6a6bec1647b74ec05fea7717f80d624bc1473b913a645ab140de9ef9b0692701bb1c7ccae5d4a24fe673b91717e3b93d85ed98a4c70766536afb5e802f38f450362ca1ba6ab53effe0adba03575f0b262e992b7032a35c4c0e9dc291b4c97c2f5537619c83f32ce32d2830675b3474c89f4c54c4760b309c5e14c675e3c1d99803b14be4e49257c06516811582dda7991b1178addfe1ab76aaad447bfa62d1fae21257aea3498611d52aa3595f4be2e82757099495cfee802c33db5bf1c9c1b371c6fc1dbd57f4e3db9babc19d60b60d9d8349a583b60f5c13b2de1788868ca5fe42c4301b9cbf0084ccea1436402b542a1a720f63c1aaa5c8740878505629da46835de3306adfd7696e321c2d05df7ce657fb15dde4ec891393410057684a28387bced7e61f5ebf8cad630b7502f9b3c65b186cc252aa0dd986c389dd27cd8d02c9eef56e000860d10e95ea6519235717a472b4108cef31a7d84b2fde8da16f721f8b45fdbfda6e934b410defd5a7676702b95400a230e665611aa9694ad4aad2da42ea8901f3e00bbb50718b8e48a511d3e58805a764cb1c11251aa304f265bc9fe35c9b90e63855fc349ff7e359cbf30bf05bd665e6474a2d9f491475faefe97efb358b37bf4df600d28d97f28b82dcf9436349ce52d5a31b31cb5cbcd90834883b0f92dda6829a9192856fc57d5209465e4423c9e69ff1a820907b677b91b6dc58031303d5fd9bb857a11400577a02e2af12e2952587b3fe9a0c86e66160d0f7ec60232915f418fd9c388e94c3f01c6b2697cf020f9c3eda8df3e7e8f92ddc63730732026313d5b946fd448eb99ee03af4d8f39e38e3bd2dbae64756713e9c306f89c3e54137f0895afeeb9f54bef4bb87be4b6963313d8b614b90b847cbc3f488282ec26e6db5dcc4edb3b77147c3f61ad3363ab801804160a8de649966829bf4df3fc553c0fdff614270b30d6811e23201de657e2938068ec06643da9ff2814ec2d022fd4efbefa65cc4fcb0efd7ec2864f8a8391993029bfbe4640bd6bd086fab349b80dc6834de05fb061ca30a3619644c137818708c7ad832c89b66f030601b15b0799037ade079c0376a619339e4932d7e3950791526aadd6d7f2588b1677f1c7ece7e918267b2a7f86d88e22d5cd4507c38359d54cb0b289ac3fbd8615ad827b27e45401cadbeb43a60052ec33b7dab978ac117eedc40f213171688d4c953c52075070a8b3fbd5f08fceec6f8d7a420f0d9d394995ce46efcea696972b61a8a9042f7125630984071091c76b57f59f70478bfc2b9c5abbe71f220bc9445b653e06a77d176e1a99afc5b5bbde9cc337638347d01474fd0b19bfd76f0b4efeb98473fdca5c678430fe666d2f79850f0615f06a4b5ba4559e9362635efb889fb283604a4418034a9bfb67b7679983db114f42df6c2765641d77e45e8baef1e43f1764df8b65ade4b3fedb5d4682d4e7bf37d5a7fda9befd891eeb437890b7a41edad8ba54a1355e990f2bf440e329d7073fc67e373ffd3cbbb541815bc84b5486048ece65ffe1fe926dbc54a00f6b72829ac5bb90774e5099c20633e47a55b008e77baf4389af7ea6f2b0561043379c4628af3e8d8bc52eacb549c29076520bea8c431c9670ae4fa3487917fada78b13604e9fc93cb1af7fcb3f0718869a9f0792969ec3019c42b93f49386d04e03ec4b924b6bdad5fc0d42f69807c1a60911dd08ca6120f88f762f705fa57d29e46e8b7defde3c5be0e713e9c1f7f12eb279c7edef7c7b5908a4c47e35f19aa13669c40a0fe3e6bf3a4286cbd5be134be859705e010335d91db15f71ba99fe5542b5a1277c1b4304192adda772f5e77959513020938c754c8a6587a39c885618eee822639ea200794700bf15346837974f13b297e2a574a1c5256832369e95ffc7ad8799d6221e2ee526ee6f0bb21100ed925527e8c8e7b7ba6ec67b1d62f7d0ba75296ad374c4952804ab7c9849243da86b1f50ad483170e135d8c9d820f5559fffb682e514096aa6c23a8958801a930772d7f976aeb0e508fd1f4f7ba8fc6dd7081fb7da1ad5d2a5ac26243199b0518841d72a248c0c11cdc50883dcf3c621f32931f570c499dfc42ca1f6939b2043e3018187ed370cee8d4242b1b6651d70ab662799514b1dea98cfe412d8dc18ce5127187a55834d7a71422a22a037a6d936275096650680d6eb1436f9685ae2925ca91bd8ba66838bd23f8fc9133ca5df315f284d3ac5a1bea85f5914d1927e42505c64ce068f7067514494a97bdd5a2e206b27a81378293f636c0e0cb875d41200675ee2d0a827f2d808543a2c8c1a3cac1bf4fc4e60754abdccec2a4bc40bf248258a97b139b953639fa0ff8bf9010d52b287a8bab22fda5eaf4dc4b7013f02478a28c9d1af5438937e8154c3cadf8eeb0a3a9280ab9b52f91513d07ea414336d8f717c30ee98ad38d72537eced2f81a1e17fdf78225830b2d7f07ee561888a23b4894fff2f1d2dd20f1c76a121b27d9a401c630239075a20af2cb1fc5d8208299862a7660d27ee1bf85a647a0ec47658cd0bae52c10aec2a4c5b1cfc2815701389c8d72098493c027e7c2f0f08903ce9c0a93ff9d9a084e1d70f8af189e6a0342e8034ae9c8e391294f7de4b62f40d5e19673e4dfa48dc07d85e489b695f69d09abd52dd36e8389687f19b2ced7938d0373ebe1362ab069a3a6efa4a6686a1c2d083407267d98babd9b02a5e78a690434bd598760b0f93a9517db9f36ddaf849102d73c13b2fed034583ed3c1b6bc23dc286ace28b35e362f3d1f6c7fe110b520324c44649a17589f9d1811cd412e670e76dd73653178fabf81d0cf38446e3e2b3b43f243da53e2fe4d1ba1147f7344f25afb2e4887f72ff196e551de0feb6edcaef1206dbd1b25c381a3b1204c08f2d920945bfdb8b38cf6813291e8301fdbdf16f9e2eed4cfb388a7b7d6d280789fa4e9fad83102dca538b92dca21d540625d614121987cad8dc15c41d08ad83b9bc7ea9812181dd6cac55400d939770a781c999823859ca54f9909ab6177d5bf514d8de8dc2d331d80ec8dac8ffaac8a451648a4fefca73afca857af9a0a1cb2f97dbc2999565531e343cc564c160ce023e8096477456cbc9560f16d6a9213f3de507843833c1f161d2b7e1460d37c5039040021e9e1a3edcf38ef91a61a9da403b55c5dd34b964f681f43717fe0b0f016412a1e3809d7a662cae02a03bd0a6fbf2b86c985e8a77039ba8a70f266a257d34b9d02233bc26504662226a6132ccf5372335d0451db3f0b4bfe3cdedd4af0d25064bbadba4f5b6993b36b4e70e478f98dd5352e5f567b85af5492b887310a49690cba13f982ccaaca47acdd12018192b572d67261eed6ed1eced4ebe182c04be813fe12667decdece75161f9042d0f83a9ce7d38ee91982ad4d8fd7b68b48b36c95d6fb359c69ebf13eb6f1353955af7f2d32f4f2b14ecf5b84b85e8449dcf9c9655cee104462c29a8c134728695d57cf260dd7fe600db3f0fc2cc26017ec96ec56fb0f003615b7092aac234db925047ed6d52cac57f92ae434c0f3580fbd426bd30c9b3da6e7e961bdf780c1381f561ec700c4d4d80a7109393b0e21e0253e32ed2d48968aa911471b18fe88fa7d4c61c733545ac16aac7e795f258ab5ba5ff3a8b9c28925c5fbc3ddcb6f3824173b130fe7d1edb07114b65ac5eea1d15b800d0a45b8af9af0305291f1d00fb503c64c94720b1dfed29d3b7d373a75aac48ed5c4c6d9e63ec8de93a2395867c66a91f52d271772a988e3e593d7d64f53ddad795bd8571ccf37014c9a3ba2ec81e75cc1775fff39366338f6069347c18f3fc0a234e09c364ef92a4a333828f055028506ba79811fc44e9f6d0a5e8a0d239a1e29b8840048ae5f9c34c5938b1eeb6672fdcb964039055338887be1ab3922fb7ac0fe0cffff9198e395c7f81552c135971ed0db30099c0b46b78070243b0a77429026f088a33ca22406df9166f28484b0376147c7b0923b82fec804433fe003caf41ea99a0721e002929841efee3f17210039270515c9dda3cd89bc42061a155471134e5cb8c578f35dc2fe12cd516c826d995bfbcd3a7bc99c11cdea54c6b5182e4468f1df462a02ff8d4421bb7d1c63fb341f0dbb56298e6a15c91dc2abae98ec89acde881c92c6de254210bd23aba9885916209608c7e14d296d1aa81a541a2ceb04d9c328a75f92e1619f06f027d1baf077d77fc1a78804e0b0e7e27659e056c522b4602342e3dd8ac9ccae9b85cef9365c170e9154fb8602fbcd97db075003ab8e80521aaa5bae9e6fe6234f2863b1bb95f21e258bb20bc3ca780798bab9d5c1cacb31f5e6c16b4d78983b481f2f0d31a1643b46be90de1ce54d675f2132698d5a79d8c30db07de3f4748c9d31bcb2f2bca8f44315ae99c8c53a6088660a9ca24a4a1453956755b534b8a8ec6d9cf2534449fa04dd232eddb09385840f88e0c04c30549ab56ffcf2b45e78a8d402026a6f5d014579730ffa06bc5f9724ffc67c6253cdcd8db9d2506ebfc2ef6c057374038953acf06e17316dd12cab6e76e21310abe0b0411dd8a007319181b107bfa28e03bfd04d34203826f20421f695c11b7126da3bc80a0062a283aa63914c204adf5b26aa234a4d094898b96798bc3b24ee2791853b515d87efc0c60cd62b6206ca33c5b134ad3e56f035f20f514dbe9e72fd6bf9cf610eeed1c71d6fa821f3c1f69bbad43a6c52b198838e2299c54825faa794fbf532a8f5feae05bf67e920932a6e02226bfdf7351e013e3bf9679bfc2c254b71ad82b9071c9619f94bad22016d5d9c92481ed459e1219deff276e773ba705df14a1547ee8fe3e223d30751c85682ed519409a4e17c051f0233056420bc9b29e28f849e0216a50805abd1a163dcf32d0a2762e6da38d1b936c4b14b614e66c90e060fcf56279e4539310c8e8aeffd3eab1224fbf3547bce3fbffbc6e77c74e8b6ab5740176759e95986ff00acfe7b21c3807ef10bd25dcde3d104757057086673f775b8cadd1a934dd94ccbfe7ace6ce5b6b4af46b10806eed9d5efdb3ec9eab586f64276d67112b9ecabadf5c7204b5fc3d7203a3a6a89ccf3ecc842cb4dc93ca29aa759f57dcd909be071bb3c4663d347be359777100b92d3ec1bd7f0efc2431bcdb8b193cd2f35ed0831feff86c55ed15216feb390b5a34c8c1ab4cbffb88493bc3198e08e61579f773a7f9261414fdfcfcb3ae26cd38198d91c5874f193d109e4d513b4101e58ef7eebbc3906fd101989426c85ef4764c6a28e3ade3884516e5c638ce10115854ecea91859c6c85c7ed0712f2896069b3ea2e664907033bdd570ccd10e719467f02f6205e891a4198ea6408790648c7cf098b8a5c2ba8a16008f19e01684758c3264c88c06f243aab15ba58e061f8c913746a5d65e547eae5c724023be228719b3007a38b3024272b31a8d2147cc8c52a9d826ac8cb582549e6c5264dd9da3a455f35f25c18787a23f5668d84d0a9f1a5ce25406067dff3bcf0dd848dbcfdaaf5b9bdd774933ebf1d1a3990f6179de1924b9f56df49ac872f21a9f10d621266252ae80174b78dbc9e487366ee52876289d2e74efc6c64e5d1350f37664ae63a8216fe9b0036daab4111cae5fe872281a1cffc26be237893d2f554a223f5644002737441b4971fafd3ec92f5cfb6d573cd08d1f3bdb2997400413ca5f9aa4ec054c683494eb14b7c3bc33b2240bdb54911856996da2b4b0e05841b0c90156290e211b1aee77539ba067db7d16e1205e69b142c81779cbea478940fc48a1ca2341042f761b321eff8c7161891a57e7628d521d775f66e3fbf885b80ce689e7570b149d96c07740f782e38f18e3ce86a4687bdfa9fe22b6bf617054d0696530e55590d65f0654c4dcb192cd1230e8efb2c3a2f51f25e417717aad98d142426c992aa7be4b68f9b28922a3be9881dabe508d01fcd6d0fe6f3b00549b5abb6a67e6aea102a076302eeaddce94042466298814ac127786abcb5dadfd26e2f6080a440b4175f3242d96cc71f39e525329eed653909526335c02a6c1b5f98b36f18d4b4bc02e82d22aa24526695df15a6533493ac2d576e2f90bf7dbc84425624bf2d254047ecd89dcc68a13287afb90ce0ad870a33724c64f7a0e31cee8c8eff1ee1831c941c092de071e8ab733f8280e2206457a2cc8066b6e049c4b39242b62d35cc60c69ba0c1518e12e22525a7fae0c86d010cd3879b2cfa51bd1958337c746a0138480ea59d8356a24505c584432d4e933e6544c41dc3d8c2edc3518b9166c10d32119dcd810c66d24e22346ac3d1d4a7f3de7366ae555d17745716272a99aa40439c6e09a230d490e0c9f418f4c3e57c311288c84482b0051ae31602181272cc2e49d7a23e9a67e45760c2411402666b1f9e12f9f51c654acf0034a55bdf5217570223244f9aee80b2523d37a0e6ce655bdb9c9171f982962c38db229a29d0a3a4f6154cea5dfaafe22df48d36342d6c3d70e93ab25532d27a652325c73a8b908e9726c2ebf9fd5d5822ad66879c414cda578d8c619a3394fda1d6fe21f7569c437b6b4927e5a5d1a66d8ad1e0906f8cec17cabc646f3f281b71c42fa9f4c277fc76f8e48a1e131e6d513892666e14000b6418005e1548e1896ec3cfd672e2c9d47ea04a5a3b09457f1ac4b730389a6c6e459dfa0c7a110f5e7c2062f082e4a013fa687cf189f8d45030033fcf0d0ffbcc23755d5762cfaae5be5e79fedd6aea0b9bc01b8649bfd501fd610858e603eee2e7b4d28ae7adf0583c06c3c087389273a60ba671d33fcaf178f6aa0f83cd80a4bb08bc20b94fc55814c85b29f4195f0c979b8fa41edd934d34feef7dde76fb3a93848341c8cbebe6b62edb88761bee006b8e77ccd76be0ad7e41feca4362d5553b1d5bd63d97d9b0831a5c873f1892e873deb03b3379fbe19d99782771b1c99e0fc32ad797aae17e1828002cec6f87b6d1bde7e24389d8fd6bc5ef254eb19dc759c7dce2089f46d170c11b2132836fa657e004ba9ebcba86cccdc8cf9fae696777fec357f078a7e64fef36497609d08cae124496910d9612f64d08bae9050fe98381952b54cc3e2744b10f52fbad469456afda654568dafacacde8a8601b9c4d9945727b5f49d6624bc6a4493937074705e35c3347264c64f54c07aa1db272b6b7d37478b06a1c9d3a72854857c0f72862ec2b81a5afe76a745f633114c269aff290da56acb84edf5aa1347fbbc288a7706104b43f5f4c9f3b5fe53477962d02a291103f64ccc8227420a99807c0caccbfc8cfc14be88dc24fb3db69f17ed472a45e7daff71091f7696a3999811e263f13960ca0f346edbec7c6a672f99bb361aeb26efb5d8dcbe88b498020c39e740c3441a61b14e6893fcdb8c4b1c2991ad4e01560cdabf94eb47185d9966262e4525d36dc17265fd77130f4045bef1a781339a65242c189796f06d08fe46de9e55d2438bfef6d808f962f6fbfe108e7b559c6945915b3986a993475e9c18d7973077bd6cd90a03e5c95ccd78b3a91e29fed207cc6c4b732a371227847750c4ffdcefa114f9e4a3283c31697827a5bf224e1c2e42fa9bb120fc87cf956800116dd31a70bd975a336b18693a527e9c73de4fbf37e57ff72a791df703b4e1ab30d0e461b4ee5b38103400a5e72c593d23c7688bbcc9b3af64227ffa5509b4f0de0ba6d522f3863ad4e04a359b477c5e237bb15fe20dbcf52bd4ed6dc38a528bc67afebc2a2606d1413ca1144312fce4de17799baf882fe8e28d3ed2000609900cf6e8958cefc1a40b9007811141ce122b4d88f4d15484ec0028f3e65f1a56257f686adb7d54e32791d9a767be74e5a8882d70ed4212575d6a3f70842c2e40b68d791e7146a6444347314570498fda9cb68558a069e9b82df13b42619889cfbb7237be59138a11bbea94a6182019f52ad28c496f6800740f32f8ed209136086406802d2a4778eb302082bd69b0ff3af68ea87c2538408e7d97eb393a1ef053e0e52b9692d778ba1ad2b5b960f40d1605fc9ae179418fb88997d506b9b322242e616c18d14420b4b8344b52a0b7abb3dda42aedb87b3fe45e93f3e1523ca82be6f184361e19d49024db371b117f85fdc123cf6b383b4a55cd10182078cdbb16fde54e4748d7df468c66fc2d3d5c93b470a4cff1bda2dcb96b3ec7739e46dbdd30b70c742d51a89359043d8760babd76381a0092c71f05fa3cea4c64cfd37106c2cbff0dadc39e1536924aa394cb97148933794684fb1bffbfae2833e2c333545d02eb6cbdbcf65b8bd4d6161c12dee5cc13023c6bd886cd413417cb46edf1cb4ffa611c50e0ef9bb53a0b5201044f1f1d7a84d83a86e515dbcbc0aae328c4b894b0f7384f0d40ced95d7359dcdfb90502f2674a229c3ea219312c333313371ff1cbc33c4273cd4f3c416454415204c72fd9c6dc81319adab931c11374da0284259a8a19cf9752bc1bd2c17030c9899d4f87beb3c7ed17cb8ccf247a8f7b5d49c79cf91caf83069ed849f026c78ef0819b90f24c066025679e24c4b467dcd19c2b5ac219806e20c35b3302d4c96f1a879f8960d5dc859575058d5652278ef341ac20568358b52e5b1a65b0994064e7b0576e184cb2e82722cbf8297e0de639b0949de196651c64dbfcd891a194eb2d3e323c1a124d580353f407f018e4821d612154514b06e972a3d53748c096ecd4f38a02aae4966cce190a7d704141119265c368503c0fb7c538527ec06d3fed47aad30ea6920ee45eda35d799b8af8a867a8a94c0edb44079f27fa7d0f7e2ce56cd7d2ecc5a3b998d3a6538b4d508cf3002dc366d6d4be070d91cfe36b246d01a0fa9ae2b1c2b10a14f521cea1d7ae9e0e2c064f4024676f849d36d2fa57e44ef416b12883c505fa9b1cada820d2c91a5e63821d0e11cec138f5680da63d700bbdd7b8c1e6091a07ff37fefb4887021d9251f792482b97d2748e5f4e211880ff809488763731968eb1e66a824003b2ad46797ec36cafb2b238e4a8b2dc0b66e6a8a32b767136e28380752f4c46655a17cdf13ea1ac8720399f18df2314db099d67e3f5b2a2fccfb3882b65baa8cdba2afc50deadc4e6e5dbbf8847de74098c33acff98d805c7fddabe6bfb6c1a3b53491135873768072c0a053dd3a4fb4ee4fe0028612d52b4519ce1f2d84ab7fe5c858ef643184b26e5f0461fdfd8d1e4a676ae05e0a5b47827800c39a818365c7ca74fcbab407b1855e9a5a3aa774df8f6d152b0ae30173c251836af4e4db0b64fac467f8a0f02975b8e99ebe67b59c45fecd5e9d389fd974c373a898d6f0de73304c0159e38938de38f4c0d0afe4c94cebcf538c05203df2995b1bc8f2f9ea1e1e4b231ee547c232dafa369ee678a1d0c1b807291a0f9a12a643910b6ef63298ee70ebe5b0560d1b4fe6034fdf7028863ec182c62cf74b633ba88484f5a69a13e5c1d70619bfbed270aebc9ae3780f3cf685677da2ea0d2bdbd3e9e78b3a7270445605b83544a8228af89ea36e51718a531dc25396ea4e1bb02c34e691a6252408ff325ecf33d0bd593e48631db727ea43a657f5913484ffc0033befc8a086c1006484160b0727ca3699c56454ed04d9c21d6534c8dc37852f88b294304c2eb36c78aad72e18149a7460f598cec914c28bb6af64de100d2a0dd8a730864dd29ce92da12cb0b329648241e6f83a7a77b867566809a48f6899965b6d5e64861c98bc6548e012ef1c335712448f31a8e5392c246b005b7602df7888dc76135f3eafff4b61666afcf9961c7c2c3d562d330e88fee497bd2ccc13b3fcb4045e18c4260e511020ee4a7549b768e229019a1c4e1e66094542309c8c3014346292e7a35aa0a0d87fb0f41b6960844e3d0d112992880cea0f9cd5e3f90e2a1c58eab92dd9ee2de28a7cf2883fa17ad0769894fd7c7c9b02200e980f400e4a3f3e3df63a292971aeacbf69cb6e3ab6712994aaa6543597941de5887ff3757b5590968f0e05ffcf12c2fa714181a19be9d795a52f94279c9703147982829aa99448a97d9a4a89a0dad6086a4d65bce5dc3725fa0afedb777d90c6ff0705f1deea18c704635354a5a15b57699c5d5376ad9d5bef68aa76fe6efda3e47304db8236575b11c1b6a08deb6bfb82c1b6a01f259fa30d886803e2bac77c60db4b46b5a66ad1074adbbb719a0b92d58a36eedcbcabaa2e424257a42e63955874453abbd3eba649ae27b0ff47e260dd4d9360dbaba36c1cef2a3b63f7a6b46db071fbed1b10ce401dde5a76ebb6745ba5bc0d286f40b80a6c73c72f7358965e755dcebd8a3d37d8176e53faa4cd54754a13056d6e8ac485b57da6c2a860b01fbc0de04acbb81ff3c826e5b32951b249e16d001b551518d04edbb7cbd83eb5e9a26d838daba9acd50be4d6562d6548e9f5ea2dbbf9fab2ed4cf7d9f6d27a9b6e2f33289575d7dc80789fb946f8eb4ef1745b87783ba5571a477237b7aba97edd297d4ee9736bd3be6aaa3555b7ed294aa93b713e54f4f6a7a1165c4b64ae2542ff0f84b25bed4daf64b5f7ededec654282b4b46ab4a76d9f71fd6482b49d34979bedd4d5443a85c1ce7765d397956d6aba571abbd37e4ea527fb6e6e0ae4a643ab6be4d540ee9b6e444e9a4b44d5dbdaf6192d062f686c4f986a6f8d5d913697c6f6956ddbb2f6a6aaa67d60c526f5573341995e1a1367d9269d45572427579aab3d35e2482dc7b9049fc366a4e1ff7f806a9dca6744affa9a76397b56da89235d75beea5acba2ae308e708aff17f2aeb088edb5bdbad6a9a6f4e90a89986ecb9dee49737955fc07b93c21ffdf9243fc961c46be25c704df9243e75b6fecf8d69b36df7a53c6b7dea0f9d69b27bef566886fbdb9e15b6f50f8d61b2cdf7a637eebcdd3b7de187debcdeb5b6f8e7ceb0d05df7ac3c0b7dc54e05b6ee6f8961b36df7243c6b7dc70a10688771d09f2ae2338effaa1000bedfd54f57fce12ff9f43078e13ff3f5a7073e6c851e3766370561c1de4470639750cc991e33fe70d900740136773dcfce7c491039211fa9aaa514cb8902cf9777178709fe49fd5c510cb8a8b8392018e1f6c7ebcf19fd3e63fe78dff1c37aeb8bda32cbaa6e6ff8f3054fdaedaaa57a553ff396db0f1c38d967ddb9eb386aaeafd9fa346ce0effba9dbbff396c7abae63f870cba228511464e1a3968f00ef59ff3ffe38c29ca4083f7154a8e9a1c3372ca78165d9172c8c8f981fc901ce939b2fdbfcebb8e58f02fd36b4e9aff1c09b0e88af423859c0838e58c91e3aa2a6d09c8ccf513814f192e1f33dbabb704c0f040403eac0ff781faed8abfb6b74ff98cbfbd5c59577b0e2c1c1e8ccd8d4d4de9f3ff7cfd3376c63afa7fd9bb8cf8b432590e5a531d1474526d170763fcbf5b04a328abaa1a455d1c08f9ffedf5b2b03c71159152048a5fd9f49dd166bac7b657cf923e35b97ad4e834eac96d3932c8d573e4eae971d9ed6e6bfab47b9549a5bbd5eb65f24ea57b140ddeb50114a68b489a7787b277059b288868e92fed4da3c07eb6234a36d8c64d71e5c6ad28cad465ec1367d926aa3ac4871879b7d6a9f8faba431be7c284a0927024180c6567bd03e9add35c377d61477bebf3855df52518bb699653394f3755d5a8d510ebba408f0bdc5cb0c50554fce6b36d2fa74d6a7b55094202c605efff0fe13d4bfa044deb0a30fe73c4f8ffa6948d42e26b9f39bd6b4b23721a725560f48fc46936e5389a6e6e4f59174a5b3141725fa09646c4cddc26cee55569934cf39525e2a8b63e8d3cbdbdb6b1ef06357359b4abaf913588aae6729df977572b767de2722de06ac5a1e36a9971b580d8d877735b0e00ae205fb88274e10a32852b0813bfbdba03a1a06ddb6aa8218737bff3f3ae20eaffbfe94ed5d955e90a0284e40e197997046c9ad45ed593662cd4aa674f516f7f7ad232e12a13ef3cd54dba2d4957043e425c11007145c0a2c305811a170462b820b8c205c1025c1000f16faee9d976aa52c3603d6d473b136ea5b140ddc6be40b573e35a16a575dd966d6f7275cb59bd335a7b6ad3ec7a6bfbec4cf7d49ac26030180b0bda843618cce53620d80b26a5dbbe056d5560efacb6a6dbac77aa1fd8912bad04f3d960475ad608e6b32179d70edbd07463d7d6477335769382bd5eb02a1bfbaea9abcf97c6ae7ae66adeb2fb897367b31526b575604ead6937abc0b6976e7bd0f6e3ca68bb4df7566b750b73dd94a3a8528754dbb6d7c8daabca2716c90f5f69b0d58a5df2994acf0dd6f6a69685826d1a9782c1aab8dbdb5d1d4342dabadaf946a5d2ce8d7d37bd6d1c4c4ab725d016b4e9b67cabc0b635fde9b023a8a6928939c58909ea09e90826057bbd90aae8f64d37a0963dd3a718906ebb9bd6aa6c3aadaab93a69e3dad70bb6f5d9dad25e1feec7a7ed6ffa7ac1b6d7aaaf402fbbb6e9cfebd63a9509abea69dba66e7775cba560fa65691fc0aa6cae9175a6651d28e5eceaceac7efaa9d7555bf9b47c8555d96ae7c6c6de2edbdad811a827284a47b63ea5d957bf3a91edc7479602c13a18ab5f2244dcb7afafdb5f74ddac7c3655a73157f7dda390366eaba967ba5dde5dbeb2fb5d3b4fdda8e0c6cb9a7624df72b3c44d5d3740c6bc108719715811879938bcfc6c6e0ae4b3f5878a238c83678cabddce3b90db6d68438730665ad6ade000facf4173a60d1b6dbe680381364ab8402e3b5bb78db739fab762d7cddde2c12b84ed05839551484f4ba551c9a4f5461b8eeb363735d2f697add27d36d36f8419817bfb1b4f7dcc0b9b1b75b8a1861b62b8e100f6dd7eb635dd7c8a6c28abdb971bfcd59b1b49dc70e0a7d674cc0bee4c96b601c2b68de182b61c30fe73bef8ff1c2fbae869fb72f19fb3c57f8e16ff3959fce760f19f73c57f8e15ff9f9353c50fbd5e3be57d85c206cff63272dd964362ae71c1ff6b735dad461d1ce77a53d5c0e2d500a383daaec6153536359ea8c1b5dc39c5660a1b2436ddff6f40459d4a4359695953c7f6b24d36eec7f4a1622ae1f512eaae26da5cbdbd5e5049b66ddb02a024c9e6ae017a8eafec99c61d699c49038cff4d48c9b6bdc6ac90851369a0ff1c10e7a99ead5074aa0eed74c6f6a7fed4d553f7b765550da5d55d2deaaadad288bc961a04b4d498a0467d33c83083016600f18fc40c155a65a0699541a6558612657c6568f0c59a9a4ab553aad66dcd4ea55fb365f9ca9e54bbc78ab6a4819ae956a751f2bca7bac9eddde883541b75b75369a8ee3af19ed6b8ee4fbcb72220c3186acd74f9dadd96181db43de562efb671afee561ba7df8d635f2b261b87b29bac5b6d6e4b63dd24176537ee4755356edf94f60373790742d96dcb9d4aabe713d9be32f9dadd2fd02f60ff4fe3a2d6da428aff77e05b5b30608b30ffbfc55cbd6d2e3bdb4edeca647ced33b5bbb1a9161665b82df7d2645890100cf10f25fc2f218229743033b4000f343495396207206ee7a9fbd298fe719c9045800d2b20c035abfee784f9910615534d846f5581c73fcb7b556c56c389dac1ff6fe55b5568715bae0a2a55405541c1bfebaa6ed09b9e3376e778d93daa650666068e14b0161560a828a14545fa0fe5aafccfd1e189fceb40d09a028daaf69d032627871c1cba8c7dfac769e2c71938647242c071c00d3624a0869c2f577ea440c30c32c49003c30f28390878e1711c6895c1e33d70bb0c68af35778100bcdc32669451a255c64bab0c51ab4c5726e7b7a8a6c791a387204f403b4d81de967300ec99982d2770d0af979bab5eaf74a6835a4d88d13601812680f84722a355b1e7501357efbee9696e4a8698fcd5040a916e2269883e9bd8feb757130c9051f39b12a16d7b9169e29f0c1832379089fdffcf9664f319b2bd5e57ab6498fcf672c91c2133011334fcffbbfb9593e606b941bc773708278a06b021a4b5c3019e5bf5a5eea22853eddcdeee72eeeb6a75eb556aaa5bada6af06aaa9412bbb35baf5ce5b761674aee991b7d78e6cbcb71add5cbdfdf0eefebc6eaaaedac75d3b0d8b668d366e43551debe7c66e346ee3fda7e6e32e7144181896f0d22eb19780f2ff542a8de8bd2a65ae8ed2afb492aa773ac5d65a5666a4841dffff3b0000882356dab6f6f64d81d0ed0856450ac6fbeb05abb24dad299014acab3c3557f6e59c14ec4a2bf553055ada60eeacf727ae967529985ed38d48a77522486c249e5e401ba7b1e63862ccbb697ad537293b10f9cf71e1755a7544929223b8cefb4aeb20f64eaddd75bbca8511556c2faadd8da019416544132344a04d0990db81288b78ffff559524a16dae36dff4c4e0a7881083b5f39f07072d22deffe77e76cbfa6ced79b21c00052b0a5614507053b47363a754bdc160db9a96494443474543a5d312143e581520718e5400d60447c31e87ea0847c5a11a6284f7a24e992d21d208a1c3ffbf3655559b4248f0ff6f9a9cabaa4198c00691f4ff5b42d836b7e55eaf1610b31fdefc9026cc92ffedf5c3093f6cf981f683fa83953078fc6f4ab617906efb98177278b349b1ecf0818d9c16587877f72af75d53dd96503e60e083cb87067cc04182d257fe7a99e6193c6830c4ad75aa0d6f41565a2bab15d4ca69c58a152256aa3c902140b81d065a6162eeb774f8e25b3af49012b01cb020fd1698ab1f6a8169e075e000c26ae5d042100e6970c802072cb6dab96d40bc20a5854353eb0635ad1ba4f856979c6f7191e35b5cd67c8bcb18dfe252e65b5c8ef8169717bec5a5f62d2e55bec5a5e85b5c80bec545e75b5b28f0ad2d6b7c6b8b17dfda02c5b7b624f1ad2d437c6b0b0fdfdac2c2b7b614e05b5baabeb5e5cab7b64cf9d696a36f6d11bfb5e5e75b5b22f8d696ff969638bea525cdb7b4703164674747021c1cce7d529a9cb091938710342cc01de008091c4f00e1206401242da4d6977ff53cd315870b1a9af82ff3ad19de7c6dd59a7d5756e5f47f4e91ff9c1e578dd3785fad983a8ff29fb3c17f0e919c0c8c6448f36ecb95b0d49a32e67f4d5b31f09c055a308cf0ffba7aa6ce663024f941220f40ae7461b31d4dd971af208d40c11759a858b8e24a8b203213d540aa060a8518182668522136331cc8e22547faae21248c304e2ae992316ac4885932220d0014535988708244eccc14097b3871864a4c070d7038fb607214a3ea56887cbc1c88816f0001b2028630622c13be8802c4aa3585c50319c8f143cf1b53326051009536189c30a5eb58c1880d9c803105c4c416363a4c0c80deb1c70c6e5cb96144a338cd8883cc1179a02a5ca9c01a93002ca0514cc062010ad0a20194c81768f0608101253d0e0d1c4085cb95ee6328e83c380f367a019a8c10411d54b4e94b627cb104e5baba1022686214b150c4d37062026ac206426e840c53d026d444f15ae972ea92b8e24cc4a2978e28a6e011008113f889e5b0c75013258568491f9b8724ae8c123095f78c05045019410214fbd5c5a96413668bad938110dd60a387930b3b9e4c37db08670288645001360fc6d99560f365840fe2c4522364e1e24bd07b98f96202497c0de8295e45402c5841a35d30033ae1c1962b6dc53d81bb628f3a340751805184a54019d81c60d5085366c081394124cacb478e1b60252c89e14a308204cca98728147270aa0386c19928e5150c80c35c830c33a81630e5309310001b37af248c985c52d84188d41bad793413a1b6a6892a664b05906b92c10810cc388232c11a51ba8010c48e10570d08820508af0e94209804d080b02487498f9296214058008c6c070d1d440a0c2f51c6252aa0498141c50449152185d415256a8e62582393fafa50da29a3298ad45f31f3e2895bb362851915b811c4a98a9518ba1c91199280162b3a8389410ba4ceca0046f888a4018452953b7e586163019b922a50d8e0e4490a3566a892425051033a08400a55a20e60030c483ad8a10a11205b8aa45040042a6d2270ea5409c2810a03782c10b5f470a12282d5511e1d06998a120a3fd8418119262a0208d3460a17180fa6a0c18613a910146031a58821241054b140c494abaf480f78b4724c29b2e2c61b413e504c79600f09ae8e864029629889c01460be235276f8028dd1cb0f19296c03d23a9e080252483da48507a9a4e42829e17a526ea27021f463471448a410e50b1f10b8b9810d3551b8152e070280c34b944e073bc6b47ad0283d6c6862ca989792280838e99a4c01431f512e00e120072f22b822aaca1225581460294854112cfa50028af10014396657f001b43c8042668d21beb8cac00a28067072930626240c940f2440c7044918b101e5020464708031585c2835d20859f3a8c30a94029088280243992d505b888a0853420e1c5493180a4b904945a08230b1801415b30c9ec8b883768a91c47efa010f293688b0c2f4e40609008e285b1a78122a228522e6d0443c0141618707f82cf5387d11a68dde00313070ca810a82057ea650e1941269654c14413a7d16ace0004e0e2a9c7e0206ae900285fa41154d9831041460960f60988182a8ef88990f6057674850068aec832355580bd0811242931d3c35e091c3e46c7aa20c1e04843758d074000ab8f9e0cd1e661394198a48c008922e4d434a06a041c203be30bd11e6015c9ca94015a6055880c50f127c9980890046a069f3804b02a6a424145a480d588269821dc2d0c080c18525342e20c004c828fa61498c1e690a31900d2c59714ca021830a254b44289819624d0e7cc90131afd18b861c94c270e2a70b335928500ac3079907c83d9a28ada71469b08047ab3432fd68c3833cec50fad1a625a0da85a42d30a0f530b3c182241ad68080011d47f024ed36d6ac89820e264948d2e8b0e68c913dc9638b921c37c0a23c91820b5159a3d47ad2421346a34949104fa850d0c6150a2830f4a4e78c124c7055a18593374aa82a19ab9013269868e28a614be78404ed4515197c3ce1e4030b1e8000175e83130b40e002c48a170b486cd860303a9871919018c148124a80b182a465a7873650de144846540c78536405072409dc4c31658b2d4947691480e60e21666a473ed87125851a30faa895d243ac8082358e94ec1f39ca58e9e10800229450870d4e3068e285165f1c994007249ae02080314551520b9ac482e4b1456d4ba38947a45b2a944430ea838b04b82186961f46667c488388511536182160cc124be8ac0230325570630290237a8c7e84a690605270a3ac03abd1438d3086944f18590389064108509e300696357d8c80534211510703f20fb0dc503802e483e3021337ae8a6a63dca00493258270a838c3c91d4cbcbcd96247e9cc0b4c9e54b0060d1a6e9a98f01881c1d512292c293a43ca1a980b4abe68082864534b66bea8ea8b42821860be68a84c4d54e3e58b1aa0b28383ef9f084d135264d0c23f5198ce06364bfe896415c010463caa62e3ff8970c0985b1659f419c2186107e162881bc10b1e57ca98c0c29229bfa4e7df042923c76d393605e25fe7071fee98a30d161aac32c888e0d9b6ed69e648b3264d13ffafaab4757bf559ed4d43439a150c90c6cb0bc8278d549a6d95d154766fdbab37daeeadabd729b66d696e5f59f5075dd3202403d85a765bd24bdbcb4ef96c9bdbd754d73ad58f11ee3a9a95a0aeeb3a9a159fadcff4763b8cc8162920d8f682b1dbaa5b3d33622a5978ff7f561fb3d5b16dba29cece03638c2e31d2e8f4a0c383ce0eff3a61fe7574006385d6a2b4f53d695f48cb1e2d0c29ff1b501847ef0ac307081b3442744e62aee3701fe1d1a8ffef42038566099a4f465b3b1a9f9f69191a2168feff4c1b31fecf0c9d79e2b7333c3ceccc08b0ed5d5336f6ffb03350679efc3f0cb64dad7ad55d65d973d36fda9d6e12183d80c1b341fb85149d196278b7052fd47821e45b2a2e2face81992da2b430cae4b738abd7ab6a9ead0ebd5c110437418f0ff4cefeac2842e846c81c5161dbc077dfcbfd4bbb4e08fb91c74d563415a1c3df02e2d8c68e1fa7f2346b62c4ef80fc17c9445ec7df08246161f162d7080450bff6f5e7559509031d705055d21c40a3e56b61d9ac9a0b4535343ffb6fc6597b8ee47567d89eb7ee4aac2016dcf92aa33591bfb7f76c9ed53f4669374144085140ab8a64033c50bdb1450fe1fcabba680c55c1d836d1c9b6a1704c6bc0b025e5e76e52e082c1982c0ffbba488e2ff613c6dda7c4da9b610779190663228bac7cc8d4536e55e75dea7b4a9b2ecb9b3472bd3810b8a312e287880e2bd28cdbedbe6486f77dd219e9aaf9757250586525d7e4285ff9fcd74d493cd95b97d4a736a00c0850e97256ebc5e11fcbf13474e5ce004044e3ce004007e36d366d19b2f210dcc1a0a10e60105181a84a1d744e9420f0414017a60e68aa033009b345bfce8b2d9e12273848bcc12323d2e269470352036e6ccffb72c1af54486f4f6a7feaeddedbd35e261d5ebb504035c0b68bddb722acb9eab90d055e72b47328538ef52d9e3bdbba690d08f4f92dda3d6f4094f85381292104fe2d63a15475ad3277daf29d5cbaaee164ab27bd49a3ee16bfae40b696b57cdecd190c0f21c297b34ced9a2d7eb082c8ea0721473f591cb08220e8023c5957f9d542796c3c0991b3e0b96344448f97f25ef2a4289ffe7f6c62e15d14211b3ff229a8ae08ae8d988d0c345849a7f2e0a11649edb9c5d8366380f8869e3b69c1828c428918418312b9b4e9d419bdefe75a680e8a0ee9b9eff3a9d73dd63ff3afbfcff96733dd23810d3e312b38198ed8536a0246f4ae41a624c183cb26b0897105c3c0e08385138610f0b02d6f603841f54d6c0e9c205c4983c80f0097a29c0f543091f54eb542b8d5d5d2a165d91bad1cb46e9a2a13755674fbcd57cd5ef537fd92a165d91f84a33ea6d53dbabfa9269b2e83ad3b2a827332d337b6fdf138923d5a25e2f105c3c08fda36bcab24edc4a3bb97b65d73064b81beaed4f36084048861934004194122247936c8c174e48283ae2ff03f00387f5ef72a18777b970c3bb5c8081a5f32f4196ff8ffa508ed90a62fecffc3f95ee009c273698231673c04a29c6ff5bcd61011c357c931a1a28c0961e130c20e4ffbf02221ebc444d10c4ff0761800e0ef8e0ffffeb59c2042a5c5f1a20c6f5258ceb8b0cae2f24b8be60e1515c5f9ab8be24717df15c5f38707d71b9be4440c30a34b878a82a0d851f23579d91fc6d1bca6e9a4804d70c3ccc40c3ff55f7c30dccd534ca7fce18dd3fefbcab485026551d52d521570c643e7bff3a5c88c7afa6db7688af5074825676490748c782a9b62badbd49e75d6700bd65dfa795e96559a7b73719a588524229a0944f8a27254bf9cf6983a5f4b61ff5962d5a5376bf29114fcd28ec6637ebc4d7feba3d8a966997f624e6ead8bfce11204fd5b24635a22635229756f4aff3f3eaf80069696a93ba32e957f37f1d233a426afdc93f4e133a1cd43a55976bfdc98f33be30fdd729f2ff40742cc8deaa6350bd65958664ecdaf9bf4e8f8c5dddbe5336ea0527aec6a6a9aad39d729a13379dea49b1dda17ad58f14ae7436e854e9ca2abd29119d214fc5a4b3e5dcf023d5d100c70936ff3fdea09a05c9d620b4ad72b5a0febb5810f3ffff3a19e860e0fef878318077b1d0f32e161a88b934d70a6d9c9494fedfc83f0e1b2bc854a080ea82d5a07026519c9aea77ed9bebae48dcf65ad974aa756beaaa7b958e751c3774ab673823fcffec5de61aff383be860c03b16bc0d20dd926c57605b07b0a7a6a6a42dc996c2784ae416a94f6d6f72fb948bb2db064a3618920d06db38cdb66f6f37bc056db0cd4d3be836377d7adafa19d46d3df6ba4666ab4cbb1d4ecff627e8a4b93e9ca744f8da3722ec4e5d1a4b9b4adf9575b93e4778dd5aa772ea53ba89af25575361eeebe5d2d8da9b4e759577daa6ea97f75ed537a094f683b22e27054399d69e04abb2d5ce9aaaeacd4d5d969dda86fa949eb1b31f577b0152d4454dba5239b9ba80f97f98ab8b5ae3bad37a4d8db9bd35ea42fe4fed978bcb13ff1cebe2b2a48a162e147009f2ff2faa9f9cb85626eb2e2d52681941cb989fc9645a6ad0f245aa4accd547ad4cc6b92b4b1b52cfd4a56a59abada6aa6a4b63a76c9c4b7bf576e4889b76a21915cbc66a27fbbae9db9f38efec39246b9b983cb99cabea2a59abd5218ef795b6a6acdbf6ad6551242ed7bd1ddab8b6772a6df5ae9af6c1eaba7a563bd3297ea595b81f9f0d4683c96828bbf5297db67a6ad36a8a3e1935216d2dbbcd6434de044b6b2aecf582c13634e57dab9d1b106dd5547a0392d17458394a508890ba9aa29b7b6e4044b3f45dd32bcdc1d6542b1559b93ad6d1d7dd9a38fdf6da4edf73ddf97f1913b211b601b59b555fdab8960b0a7abd605030348f3bda709be54d6db02c78c075c5eaff7350d0cc75a50f489d70a541bc4c738909e9c9a98c32cb26434e4c504fa6f94a69e995ff77c5d8b8622ffc3fd75ba01fd88f0ff7a9116d1c517779fa76f75935ec26eeda1aec077aeab69cebccc0e4e9b9ba3490db725e95ce05af63c1d3121427a694212576dd4caacdaa2badbf6c551c526bb891375dd33c383ba2807049a9ffaeac091794987f1d077ef72a738acb4a9395a47f7565537728086dabd634086dab8c9ca262ae3e32728ae288986cea0f95ee4e4a01674cc47daf2cd9f7cab41a85a33b639f74893f4fe4dcdb1bfd4634879ce3a6c0ca4fe7ad459cf7ce1de73cc644dcbea3bbdba1cfddadfec8252ae66796bd9fe0d98d604635399e6137d27a8c9c7ac4ac04841287bc935dccf904d18f14398ea7acf9ba6b684a9161e78da3d88da4f87560f6bc6f24fbb83b4ef6513cd1738bdfb65276cfc367eef4d78161d7275aa5c419dcbdfbd02f9f5de6e308d563e4d493bf252a66132a65389ea0d8690f0ccf9888cdb74f91a1699a27d506f31215b368ca2766d0f3b03782a1d87578f4bcfc8d27d9c93d8af9d4224aa2524a0dee1115c7cd35d98ddb8b52ea4c7a1ffa658f87e3e99d2d7bea0da2f4dea4a8cf3083baf7ec612750b817821ccd3b9f18f5b487c644ece124a8fe6911ef9173504451f1ec193f792a4fbe35f8693e92df89710e493c3a95e8078a79e3dca1b9e38f3c6322e6eceb835244c1b1f3c01ce67ca2641f39679b4a4de6bd47ef3c43347b1aa35d26994a11c5e2de39ef4e76ba9f39266275264bcd515c2a4794ec7aeca2388e9844d19e73074a65d761117f18f4d08e876788ba6298548a23dee197bd7d765dec4e4fc6b6339c5f4fce908bddc3796fad77cf5d4cc433b6e5d889931287b87314ebec75e1879e614cc4bb5799eceb65241c7a62279223e879e1e7815d18667067be39b871c7990c3136330697a8984f8ece2665474150871c8764c7a7e87d1e18c5a8fc3aefe4fbeb279ac5f1dc684cc4ecbba626c6e108bae7b744c5ecca12f34ff4ba4776e7d99dd92363221e7bcb16b53aea24fa70b844c5149994dd1bc7b1ebd0f3f4b0776e1465cd3755672e9954548a9a3cbf7c82e389fbd9654e547af814c12ea320d7ddeec42f441a2abf50cc1fe965cf1337d93b1d13b1e9618c43bc7b15d392523cf70631efa1d65fcf9c8c89d8dcadcede5e6beec7c4832d8a9dc8b93ebb107b61171371ab63bbc33521ed81e1477e9ff6b60776241a1371fbba23b844c5b452529eb9e7139f18fd72c875df3111833d504d7afacaaa451cd75756dd5db844c5ac92a41c4f94f34febfc9ddd163d1c13b19971f8ca502fec40c6b2a6ca5bd35ce05592609847929f60b775ff481c1371cca5cdcc9645439c44963b8f19ec1fd98d2238628ec6446c8ae35866ceb1479268d86db177988c8978c4a25872107330e439835b7778d431115bb1ed94897358929aa3986fb1eb780441ac632236f9aa598eb3d803d5a467a8a7a807aa072aa967f728115ca2624e01bbb087231e7588f7a94790e438325ca2626af9f077628dd1be3b527ffa3bbd29dad999b8baa7cb34d30397a898aab7fb377ebd4343ef1bfb378e4f1cc771f94333397e1925413e76a7a7370f6322ee816ad2c3bd3294eb814aea31d7d49cb12d17bdf69d693c6611f4c40c8a22ce3814f19731e66455aaca95a3d7755afcc88eecdd177a3b26e257869afd4d5b2bb2bf691b057c65a8d75b767f4b544c279de9d25ad3ac0009ef6608e6239c2c08f716355bf6d517006d03307f8e10f9717d7c7c8cf0559b1f07478ab81bf460221ba02f8d08367bcc34b79bca2e18626403d2c048063f185cf085185870c55abd1954404108e64d081e3336cdd826002313b814f064966d2b70b1ed9196ee6d05413290e0ed53144480dd0b20c0a94cc6fa3c908938d0eaae6e0b1ac01730903708c03a95ba4316c03e40da2200e05dc66e7127f7165385609eedee02e96c9053e487696e8073a5651ab0b0c9aa26ab9aef55a7e087dc780085185697e935c70328d06880813fa3020d436f25a5027df041813df4c8038f09dc61471d74cc21c71b3770b479c38d36d858430d366bd240e30c35669441461a0944600c31c24073068c2fbce8c2032d1f81073014fd1083813f73c21343cf53d4e65f042f04d8f112071cac0838c16a82e88b9d2e5cb6fcf72ca92b8668dcd1120293129a70f9ef62c29008001076b2ecd40240c692a69d233c4b549e254dbb1de2f120cde780830d251c3d09476f4bd441de8a6c6b57bb4dc9906ded2ac823f42ab9a30e228cc05f5a6021aac9032547bf13074f9208fc4e55f66821de79dd9d7607cbffceac294bf9df61572999944a75258d9d53a85497dae1fbfcdfd1b0ff1d730704299e519cc0ff8e952affdf028fb851f97f203b537e6a4d559a0b72f088e733c383a1783a1a783a2035ce1275b9d69f40b56cdb7a2cfa8519264e03ced5b23b4a517e27ea08d21121d9be2a77a0ec40fdef3c79fa4f5728b5752857bd5e7c4d9ff858f1f9e065fbca69e7839da29da61da6a51da59da49d273cfddf71d2ed20ed1cf1700064a7c98ed1ff4ef9bfc364a7a888acc829db5733dd42a92acde8096af7aa7f9e2178f00c91c05f0933c3bb43be213f3810b80df06c38ff394a03253408c28b7273066a3238f3b27d75b22a1157d32846321e0caee0c1e089ecb9d9ab7abd7295108b0aad3d4968ed495da6afb45297e955bf9a0b71242419bbba2e57d3284249768fa2a17c28c4e3dbeaa61a6789de1a67898484b297247b505e77658bc68c6923add6a9be30a5094125d93daa82113e57993c1578c05301e6a960fbd95e3efd4d5b2bae4f77e6fe17d228c0f2b4dda3dc7436e4a6333db5ce64a90b65c5160999f2df44884700523c93d9d3f67d3267ee0454e8b6ebb60441100441f0fbbeeffbbeeffb3ccff33ccff33c2fe79c73ce39678c31c618638cbbdce52e77b9cb5dee7297bbdc65922449922449921cc7711cc7711c47511445511445510cc3300cc3300c4310044110044110fcbeeffbbeeffb3ecff33ccff33ccfcb39e79c73ce19638c31c6b8ebbaaeebbaaeeb30499224499224498ee3388ee3388ea3288aa2288aa2288661188661188621088220088220087edff77ddff77d9fe7799ee7799ee7e59c73ce39e78c31c618638c3b4c8e62087e5ec64a32a4293c0e24fdbf6e3b1255f7a7b649d54eed53d95fde572b3d73db5ed3eaa66a26432d6d6fd68a55d175684913a96c6c5bd96ded59da941bf10cf1ec64f13c3b293ccfce93ff1740077f44039267e77b1e9d389e472789e7d181e17974ae3c8f0e93e7d129f23c3a0f3c4fce1acf9353c4f3e4acf0ff25d213bbd4764dc4355191935bc6de3625d2445da5bd3455d545e68c46c5b2aacbf10eb8556f9babfba9d5cdd53df6b6e9a9b735fdb1ea684dcf90544dc3b2e3fadf69fdef04d991802707f6bf13c1ff0e04ff3b0fec38f0aa66c254b4549a4e4c4e4ea559264161c2a4644a195252d9293d63db595295d094866aea542cd4481392f517698a5585461a525fd3a9b5c499f2cf72add8f5c9eb7654f7a4984b6b9a31edb4ed329aee496bf93c3f0af91f1fd6eb7081c5bfce163a5a005181efffcc028b5ff59acad276bb29ff2dfa501fe7a0f40a2bfe65aeb6dad82377e6463d61e29a54ac5012fd6ace07d85b9eb2514a681bc584b6515f583a41811a5a6a82f45452417a32999454909286909cca27734af9c42c424a2282d2f4edc1c5a36dd5ebd5dbec954e4d23f8f4f4ff5f4863f3cfbb1e1dbc9e7d67b5769bdae5bb0bfd088d348e84070a38cac829ca7dbdfea752a19f0d88fba4e617d25e5675dd9755dd9f2fa46d405f48f3d9464e51afdba7d0360a6dabee10f2bfd959c97b3f3591c9a2d5e163959299eb4aa221a2a723cb4ccfdcecd1424c1b6963c6b42f4c99e6b0e1d373ccd89ce3c89831ed4dd137f2cf2a23655d69dd107ef852c257fd93374ffcd3a6d2b389123762fcab6a88a1b4bdc9f566e8bf88db72aed9f699cb0d162e3752b889c581471c640001134703ffaf571c55ff1f7b532bb7e54c73e6b691e28da437baafc0023f7c10c2e1e0ccb3b6605df1ac29583ab0b1bdee6d9733b0a0838437cc80e92226040d928879bd2e5566d858b1410b3f5d885e1fac228cc14417078e58b026878516b8840195c6055cb411e012460826274baaa0c14546c613211e013fb8886b9298f0341bb8fcb8800ff2cb048ed8a2050c66acfca490b48506ab9d23862809c096fd02d51315ccd0c116244d62d016e4c0434b1e0e448d71eba0428b140118628a3247462d2d0039816a0b283db44cf981c84848097768e921410b1cb2ec9821bca16200893dc6a410986062460106a082510824fc5003e704255e84d0b4c51be06b06098450811ae590094c01210b1b12722c006ad2250b1262a86503b56709018503c04622d82c460b74e025284a0a5924004301f4006266b5341f1501b0caa254f3a1851c3a78c18c925aeb40121220c0e05a12345a5d5e4f841a002c20c2c2ca1dac2b2fb4803327204c5ddd8000139210a2ebe16a2a88d70f141d63ae321c66864410451e567d202df9d6c0c18a9599d797326db81c618580d365831399032bf30754d01e059859f96c518502121ba854d131c600c2a4b085a7ea01509871258b265375c2149b38cc2c21a9827aca400a18a114aa36222e4424f58186e6c60f3ed0705921074d892dfa58b202f204cd8b0f9d8117645334273b80614693110cd07898c8e8e23e20c97b460348e4282ab0df219a10c08d2e68c0e1a579a10594378b90778886858c3bccb85e06dc5c2043141f0ce0a29192c61035a71c5707350b2042c5cb85abd6e0444e0b45003744a3e3a24a55162ece920aae169381360b2721bca1071ea29d61ade20418ea38a13d1f00001d8aee00a30deaa34d400e723c6199401f514c40810a69b094c95f1959c24803cb0a0b60820f17a6506191f202123ce48ac2b2011045a078322498b971d9047c30b4316bc00f073c6584809a8db0bdc1c406138a664d1540e1620bb9c58c82324d783163a50bbbc60619b2904d80057bc496124b4f10256c9613c8123b0580812d2d781da1b2a18a8d000d18e268620bd02a819c215bf4d066ac3dd8b0c60c7b10a0cb8ac58993191498fab2762044065e50cbc2ba330489280e104503b22e945801ec408b99cc06a809c8bc90861a32348821aa20627a43968744bd12e06ea0f281b3410b788c11552abe36964c91c714ea0b2d3051c3484517aa9412526556684004d548192e21034a402a3a70ae0081e547a81c70a50c3ebaec08416502942e385391a17ab2a2a10e9fa88e4a83225018c087374957d878833592a04200ae24e1e60b6e18064784b2dbde387a6127338879fec4590d8ae36a2fc799b8f6665602700850ee1e76f9433fafeb74e61cedaaf9a269cc35df96754d30e37829fb4986a0179e631eb5d875dde1b765ddaf0265c737173b11cc7ad46407e63eca1014d131672ee6b1839a63f65dd3918f120ccfbebb477ebd13d13cced89609c7cdd8969324054aed79681776bd4331fcc48e7b9a9c9a927a7aa092f620412c7e2299711762307bf8fb46d1ebc00d72af8f3914bda935adf10eb3ef8a04e69996792f4b8f121d45bdb9debbf79888cd99968978acb56387f328398945d0033f32c424b83bb2e4388e834aea115960e1519227f98d7b730fed3abac73e8192875af7af7732443bf1f3ce3b4a8fd4df78ea0d861df86dd28e52e41e7aa23d8f2117fb178a7594ddb7c58dc98ee68f1c3b95453f1689e38c7a8a7a907aa0927a665a89e3665ac6716eee301d251a7ea3d7852307f7c745f2a4526927d932a1ba2715f544f514f53ce929eae17db562e2b8b653b55a8676a7ced9258ee3384ec42188f11dac39ca8ef7ae8b24b83f54f753d43111cbd816fd7aa09af4f0ce713d50493df8c341b0e42875f6f6e981212649deb94792c07a53eadd9de3b8bff33b439204b99b12243fac71487678f44074ec719462f74e14dd1e1f73e76171c3519218f4d00d863c771d18ea31266212a9a7a86d8d769f3d711cb77bd5d8619618569bb2effdf52d669044f5b7bf5a13c775f524c1f69d49b1de28c751445151fcf4f99d61ef27cb0d8cc191fcc20f04c390ecb2378a188f5def20984f4d7e797bac364a8f243daeb1ce1b6f10f5381ba597f3296ef11bf7a94f71edaac9ae268977e7ec06b739e2354a1d9263f7a1d80bbd0ed52057a3ec783f79c7b7c8c3512449b063b129f5e7ed7c92a038628cb3f869a8252ae607ac3525e8811a3dc34e83a03ec7b0a75176d01b39d7dde39dec21ee388ee3a6f4cb716de72c344aefe479cc1d1543b07727076322c6d2cd174ba939aeabef4973396e5ca262d25867781deebe0ff4c64f0c470f779ee879a09741fd7531a31d7be08e89b865abb48a9a53a9aaf630d7586a4a3d8264377a1deeb8478a21ff92586694e7d8f1d0eb5b9fe00876e8d879e7544462f67d7bfbba694b42b1ca28c58df9de79ef8c398a6a50ede952af62db268e0b45ecaa19f3c122a30c39dee7263bfe32b9f7e69af3a1946d2a398e771f5869ca73047777ea737f60c7f947d2786fc350882581926f4fece0f6c4afe3243fc30e8f1128fbd8791fe98560eec8bc4f322662aaad671fd86a55ef278e13db9000ac314a7d7e5ed6e8d99d24de5ca5c93ca8262a4d89e3bad10b961865878e5ec7fa13f3f9799d1c6322a6ca56ec0c0ca30449b0771bdc9d16f73ec33126e2d46cb1b899e338ee0b691cc7711c27b25660a129c73d8aa8b84f511cd12fc45d4cc4ec3b62f0fb429a17f255a4eaaae6bdaaa5ed102f5131abb0ce94b9f378973729629c35064130cabe47516b10e4e8ee1d14bd2f4af21cc1ee13bbecf5eeec204af3a2e4a2d7b527927d6f8e7a1eeea2f4b2f7e15387b86f10f43ccc4529762fe3108bbcd35c77e3b845796ef00c49116bdcbfece50eb3b4d821ea7524cf5f0e3316774cc45f28ce64a987c4caa2243b71937cefcf133badbb138b72d4e2e789bcc327fa718fecdf1565d7fceb229af9a9498f0c452b4a313cf3e771b493e0d745de55517ae0cee4d889dd798e9e287e66cafc7de4f7657c76b88738f4a828519004bf3d8ee787c52f87798af21cb7263bef9c731da2980c31044a3d9260d779077a2709e22cce6650a4283bdccf6ff74f8bded981dd78d58fda6ec52681c02a53724c76b1f34e7d821d6b0f4d89acb0a22849fea17d771d04516fdce0f7852814e5d6e4994774873bc431d61365f8a1baf7bd75d619ec5b8f4f32b635e2388e6b5f3794d1d607949decc89cb528e291f4f0d7410794a3b7f589c7b0eb1e8a4734344996132507b91e75973f0e6af244794cc4567df5dafed4be4f188bedeb36517ea4ce19a359e7500cc51ec6442c635b9474dfb17d5d326538826197353972b0eb3239caccb5ab22aecdd80df67090d603d57382b41e3277161325b8b9ce9dc77b3e3f8e379997b01a507adfd975d6a3c6d8fbd0bd4326ac31251fb9d6a326c7af0bbbee9daf0c35db2e628fc580f2cca3f8f54e04c9affbf2282ea0dca7de9d878e9df7e1fe75a78e2d518ae83e3149ee8ec50e7b60672951f253e37014478f93e3497a6288dbd7f59228470fec3e94c45ed78562ffc4d75540b9f9798e9d1647d4eba838862acb9e489459ecc08e3c3f1493bc8b1e1813f14ccb8e28c92e0c419044bd3d92e8c7c554edb011e519e6eefb3ebc41ee851924dd224a340c45b1db249a43318fe40812516ebd37888258dcbc1343cd3f3165ee488ea262b879c747ef0bbd214a3077dc134332d4591cc98f67214a510445be31f7cedc47b1eb6010e53982e7873f11dcbb13492cc6448cb1c802a20c7b3f73c71dee611fd18e747f283dafef50c42229660f1c41d4f3a1e4dcc3b98362e8e9b07b7ae71e4a54e47a04750ff90e31ba41d30c330f65e765141c31b8499d418cee9888772879b77b276a1005370fcf110c538e21e89160377ae0486a0ff53e960e25ef401ea260c7bbc6798805a61cc5b07b7b2433d6f91bb39e791c2b87f21473b749fee9dcc36ff72f26e28c43497621eea8b7bd917ba7f658fe61b07ddd1bcace4345d41bb1d7a123e6dec9b2a1ccdf899e1e397661174fd03b6322567302bace64eec48c86dd23511d13f19831cd7c65e8c8aaa1dc601fc78eb9de5e48a2181c3336595f4614837cfcce133cc11e7e5f4833bbdbead98765b4d55362d1508adaebdf476a527b5b1c3b99bd23d60ca5f7e5ef233d3c7aa70ef53e632236797f4dae67246efb6b447ac092a1d4a74633b8f5877a9fce6168aa5a9692192c59319421f98da3179e1dd8f12e92e84c2b8d2c184a91f4c8feeddd33f748908f31118333ad8480d2d37c7f5fb841b08fa2e7893111d73a9517b25e28d1cd33099ef90337297a9ccfb4920ba53e33e879e0a9f7e891587faf9b26912d94e2798e27f98d67df593c45302662f0ede3c862a1d4df38a224e9817a6fefecce6e8592dc587f7b7bdb03c3efec5ea742397e282a927b24c70eeb1db2522877c67c0c43efd32288d14f8c89187cc2787c65a8c742a114f9398e20d9bd4f8fa8ee3a651da0d4dfd99d19a322a877de7c88eb266e8a7542f975540cc7b18bb8eb9993a087c3cc32a10cfb17eacc3bece19dbbe8b9efda65b4a976880497a8985258256c3ce60fe3f0cc689775076319c0db63d785587f64e76d708c89d85b62915092a1d879a4d79de0f971afeb48cc1aa124bb8fa33df78e35086e0ef235b55a69ecca2a40297e3b77dcf376163bb8c1992cf564b4d513a1cc7ad49bf432efda3bf388b2e88ab4d35537711c8baea9292e513151160150fda19db83bdabbc7bbf164792943f0fc506ff4c86f7394f7cec361ee526a706f8e921a3dc5be37de31d174d38c672497d2cbe7d835cf1a25c3f1eb674cc42137bbacc766ba9d0271c6e29632e467cede26c1ac41de7557dd9ca29d9d9b61ce62ab63fb7bd252763b8b5a3c3b0f87e73e35564ffdd2649d371442396e1e765c24b3c6f82345de6529fbfebe8e76233f5134877b8c899877d3cc5955fbfe6aa5386611eca1b849117723dee11215d3ca552962bd4f94dc9ddede279e23c771bdb52a49ee65143cf7898e6088512f26629e9a7d567bc57588e36aabf696a89865558976e226fb187e19e53a83bd07aa49cf15479a5ab513c7719c3b63b1b844c5e4b47263ec7de09747f0eb449dbf9888fb9bb656e02b433978514f871d1ecf10edbcdec99e2575a1701cc7c9686b08ae18ee1115c3ceebe4276611cd1e8d457bba4c5367b21494d156ef95a1b4b60c51dd8dba87e749e6bcc9218ee3da7736864b544c8da504c57de6f3eb34b8f9d69fde9d9bec6b8ab88359b949dcc3f343cffe8124e63b2662f39bc296dec73dd2434ff123d1aeeb5fb896e887e630c41be459cc200e4159a977fe50d4eb421e9e3d0c794cc4ef8c35490c26a965d831de58ec67f7895aefadafba1155398e9b04f348ea8e8f5cf4784cc420d09552dc9cdc5e973fb477e19747322d4154f4341739d891f93cc72e26e2d7053152ac24456f04b9ee78888e1d45bb98884d9526eb70f75d656f2a251a43196df5924c95bcf3ae7f58f76edc1e39ee9888dd114fad2915f942cb9014bbb01bcf8ec7eedc201a13f1da5573ede69741b0971dc724d88558dca8063949c644dc612b7666aa3419b9b253bae5e128ca682b112f33f75010a3a117a23c83986cb2f5c93dde773f73efbaf3d43130b7ef0cea0cc571cc62388a1d1992b813bd90ec7ae49ec8bfad4f8ff3a380a8d47209c645e91432460000c468020424c31100304024188a8562e17050301cd90f148002548c5ebe5440178ad32846619031c818630c3000000000220333b80aa92aacca547144c509b08644b2ba816a2a29136f4bee651fbde01ce9f36bc3f346d25a1805597becc63af2b65259667229655124b5fa84e0895df5c73c00a7e547841ef5a4b5425fd7d4d43f69da8bb9cdb0e4d71a35bec0d1b892f8f40b23ca473804a02cb4851433904b9e622650194f0277f1d0ffb2ac078aa9fb24c6027877484e116cb16533e8cb558843e04bc2caf509f9d77ac89e787b204d8939d823707fc3d8b39475ce4386e4c8f9f1bd1919647522cb8061de5f98daea6aa6507d2049a55a0e9c236484ea6f17b51e7d5a3d5755fa0f2803c563166680495439919a04cd13b966edc09d4f9ca7579ecf4ec297234c3efd2833e6b2834bc3f759f35a3ac457484901eeab1cfcb83b50d27cbad55c0feb0f14771039050bef3894c30224bd033f1ee39b3e9d267cfc0ece65e3bbaacc86555252765d90792ef3006e15772dd032bf0503a710f26033fcd33eaf506d09d969a29eb214343514b3915e2b1be955ba99dd4ea4ac5014e25abe507419c0a0a6d0290310f3323dff539576cabd81f7da014f270f721d226996d18eaa8a7c079068d675f58bca5594501980fd270c4f6d81a0591b1ac0d4a51b13be5b3758d65e8c5b27c1417b8bcdf0fd804cc7e510c8a331460c435cf38396f95997df690f008569b69fd7b5512784c95f9a77c6649bd12d75870a5494b218f2cfeb4651f455d11c712030293789bbedeb6c2eb4eaf6db4a3d4d7446ad859ab532aeaf58e05281ce5af1d41e0873953515b5def75237bdebd45207ee8af041fa8bf625ebaf047df8abb4e15ef6d607f537a9bb4bf91bd88ba0bac37a33e59d21ec241c3105064132c8cef5e0695c28b6ac365e1e4695410c11d9e013e6af73a54962e19cf04ca384cf905b48e3c2ab40da0011980b7d40c08f2d22c1bb80e576dea2b5723c2b53936d4b864d480d4150e0dc975e03a807bc87ddf9fd1c8564c3422f20e3ba086907a04d23daa46ade08c9e3bca38de0f4d4224eb3822f7bcf82175eccefbc1a60a0096f665af42019ed390040a0a2898453402049fbc979b2930644da4372b493bd4ae7f6110138f5fb072b546891c340566e59e4b8d7864a7b208fc4642a7a084204fd625484881994ecc1805e08aab2667d8f19418366e1f9ff84879dbabce9bb22b9fa5cd812dbbb2450bbc10b94a041a0a9e4a36bf3e328a7a5f1347dce250701383a9143116e1494484a685ec071d19bf8e58f8c5a78c299352e2594a5bd9fecf3225d8f146289a1ed9f08c4e864661db27ef3cf1e63df66d67f9af0aa59532e80f1b7a313f65993184eed2d80c2ac245867bb005792842e5b89162e92489d617a60650340fe03ff63dbc05d353320630c79dc3f0c6e5c1c65926d5d423be33e2c4af5245add0fa041bde670a59fff53315d37559b45ea97da0a7b355e46719905809d00513a8dc379647a6270394323775f446741bc049b92a13259852fe754a866546b39325bb84b5b50fa31be9767a72a061f92399fc06b9c02d1e2e38c0987af8512cfab742100249f615293ba9203cb62e1ae1419aef5e4de38620a12203071cf0345f590a7ae906a2aa05aeef50a4be17d41084ad2b6e08758aa1dce0f3d21638ddfce08a137cda001f76584b0d843b04de9983a31a4fea7b8e2cc3f709118913196447df72f9f5cc65a0c7f15c42224a7e2b1d6a85a87208f34ac6c2b5927327d45e74b6f8fc820bf8cb7fcd50ae28ad45fb27d92b88b282ab6a90c4f4f1e0252c1a1a2e9aff35aeb712ed643c5abd6c865d18578734bef679ffae60e5ce4fc3163178d44495893fdd2a0ef674b55f0d8087380d6672e523930c53e5e9aa802abe931feade71f3f8710e04262751a44be16bfb7342b5a911eb56a3e10db1c6a04094d3f205fc3866111f4f648229849eef6f3bebb08c92e761930c014e9dd7d232a9b2c7227b1ec2af301eea8ab7ffe795b7e885f8c6fdb017402b687b702ac19b82e8784720805d79fd236328cb3084859158e39ea6e50e5ce65ea94da27e6db68dc681fdc16b27f07ad25745196357a2a88f9984b41a63a3d25a8189ef355cfe01b7beceb105a03c3b1e45370878207a6cdcf5b9867171f3951a9f3e1267cea86049ac0caaf8a0636e7e037db334be795644e70602f9e4c1de1c3d2f41b910cc9172c9088271a9ea392644148520dd1b4989da2a84572fb979f253f73aa5a72cca79ba94397406d79d0021d4367ded3e1813f755bdf069ed373ae16b9a41dea5047e223c34473727305a90c0860747181ce0db078cbd24b2af1e1fcc2cddd95f56f89ba313d44c3e359f64228e57d8dfc01619cf902c25684b977a06ad56b91e203c9b83b87dad02ec0b9bbfed486669b5c92895c9a3df42e6286aa9373bb617aaa36803d60bd6c28d185826cf4d2c800f74b400810f1bcf5cdf950c6e8103a94537c58c401ef01c969466009a49e298f9962debf44bf01061f4bb6c29aa49d6db54d1b4c5434c2d46bb2e47251c304526a9c13b18253fd16874d6e80dc88c2c5671c1310b15c8390fdb456f5711bc7c8cefaa337f8298acab2d08a7feb439b8973d3c9450f098c355049d40bf8e29e23d511a3b6629c9c489a8eed845a05789c0a94dce8e3a91bffca53f7da4f34db2b1439c09798986343e0ee80de22099482fc8620df3f79d9f7a469f910624e0d37450f5e440f267543f6bfc16ce2d8e31376f20d25f68df5e45c6fa6cf3807d42bdbd3326813d3ac56218be02959f017bf50e9b9f1584485ffceaade51640d1e0cd568f3c56c887abc3053d50b9797da6ecaf7b85ce1d5edb1f5ef928c466694aefad46a5481c6cca943693200ff45a8998b29352285cc80fd293b5aaca1432994bcc4c287bc81e10a2b6f971c0e8c3c288d67e7a4e723ae5b07f862101c1321acf840e1e1cc98b62a4c37a033aa73df986ae14c71b29b2a1e2fa1829e7f6cfb311d2fa01c8190412700d8fd6dd8b6c4e1e52d8c4cade52f176e675110b2a1ff4c78a358dda0d3c12ab6e607611b13205ecccf629be7b139fcefcea0db1040c928c8df9f34b19472f160bd6ea72f4e28625d50fb2892c4be176da8a03126a872959b887cacefb396c5681594dd3be86c6a6415054a55528acf4436430e45a5c3db24794ad255291e973c55eff6ac0d4af0e5a413cda1b0a6cfbf13ff44f2064d406484012f7c40df76673939d0ba571a8b04e154b5098529548dab13f0913ce26d8cc67090d42f6105a658d287bf4c43d496b1c7f843c2fa41dac44485f13d05d0aedb154f7585155b64ed74322f451ccb09481ff09ea2cd6a82b1f2ea1028472061e94627294999e37ff6014a9e10df05aba80fa23aac5c1c949ab56ab0417ba2609ea998b6f7719b8b664bd7fec1c430132ce7007d8f7fe761833e8c3ab5648f803e42eb41745d8dfeba4ac13464dad10749d476b0a8cb59e3d50ee51299232577f28e2780224f59d409c43401210c83c7365af00d5dd8806d28cae8c206c472b125badd1758b089ff6435164326a6f00685df7ae1ebc530bf989fbc11e4c5a5266120f711b0dbd056b0b37289933f65aa4b5c4b3e26aa63483f6619aede09f321ef10dd1e42844a3071dda33545c525e7abe4adb4f6842c9a86fb282d62e333bc2d02dbb3d07b9c6e7d05ccdd50e9360ebb900d0535410cc6ddbc5ae82443a4bddd7ad0ce0d26e956ac2220f77f3c75d6c7e50d011265c41b03f84b2e7a1f50e506349f3ba6b560cec2e742aa98f94170809376d6493b8c894312d0020730903b592c0d3b183f85059a0424a3264ae9bfc4b68e3d291e1f4ae0e49d96f1dbb34928409fbb9f9f1f22842b090b5423d2dd1b41d1828e7fe585e1d35b869496c823e1aa88bae5f78cdc66bc6c0fd9374fc007abeb575d45e988278a79a15a10f8eb6cafaaf07ce9bb9c5e98fd36dd405b405f77aca741f84fec54a73616b796d5d439c039fe3ad603e433378b6b81e4e82d61e822364a83089d49ee46554e30bcb9c61e0d647c0c0d98c2e9f7554c6fd133e57f7f85bbd32eeb7c786d7768278eed6907e4e69cddd826ee5148d69feb49a5a58e8c01f4028fdb4f80bffc8b099f4c5fc0b78024acc07d1f3d5ba3cde2de67e618a0f0c18b71cd1ec47bbb824628f7dd7a30319b1653187c417550ad526324bb1b3e75f23aef3cb01a5fff775a5ce470d6da758d23b994893575dac18d9f08cacf80e62708085c73699c167bbe4d879e38e4a59748f3769fd2a50bbaecee23d1226c8f6d4abb3582a1112e257a85ae3c68d5599f93dbd3d9cf7a1a4849bb16c43ef1f20c3e6c2cea60c33e3a67a0e3876b90ff4e10f78bf99a8f083e5a4decfa0089ddfd64db7976055e65f08d3341e22757a82e1ffe14d0a494ca93799128cda3b1fc3c5e113b7ab0fd1d64fade81de10637ed844d39dcb7bf95ed78c8c12f94044bdb6617f7f95d8f246c016e8c81ef9ddabdbe15fd3eb3e97406c0af80c326f911f5eaaecc0f8841dded30b857793a925cdc69ea64fa91e17fd096460e8ce3aa52cadc4aaf73b4c46abd250b6187f6f4f8623d9cf95b9e4689ae6a66bcef5423b13c8a216f64c8257b5f7f1d3a85193d0ced745e5e1fa9c355bc3fbafcc53ee57dc887db11cf32f3ef94515244673ab830b07616f41838f64086111e9f7402f1e836c360c872359e5a391ccffa21af1ff061f278dc17967b74e1982947c5c42605d242898f6884f45244e01f91b6144b7a146a033b0b3d6725796fa5f46a20e6fba196229f0acc4011d3a35ebf7af16b91a49677ff85aced510d50f93a55974f336dc0ddca42803bda6288a1e0b10e71f6e4e47adab7232d8c0f6b3823b122b3b68d0fbad58fa1f1d2b380b3474263f4d9ab5ff77f26ec54ab6e5b6db028ef23e987c4913d3f0fef92a8586fd066e10f682bebd83668e4534ca4064b0c3d5eb0e20b0cf412b61691a93e2a3b520de32dff3230225601ac1a4634336b6cd9be60e9956b845d262a229d2fa989bbb2f48258ce4a18f18b08070d2f9dcc802b4f433c6b8a36f7701e453b2ed01ad2ea7a4f8fbc97075d0abb77f7a53ab97b5147b770e606541c3bd7f3b02aac1e832133084231835cd9fbf00576a80ce0fd694264aed8df8e7302dbcf99fc36081c6b561e2677dcbd6bd7ab0edafb053244b2d3ce1184fde137ebc24f60a1d48c02cc56b53ca22b62b86681631b9922f50ff25a3b9a41627a65da80061f489ffcbba6f48906871865a8c4d2d52e849901565455e5b0d5151544a0982dbcd9070e84e2f56df050e9bb67984211abdbbf6b7eb74944154b0c8df3e90c8f882da014ce91cfb21ca8c29f8f5972714765c84688682f6ab970ca57b1145d61f9497f6c38db2916c0c25c5e2f2e3eaf567ac52ac5dccae5278f8ae59a51000fb7141f749906f22536a8e6a1fca8f2d9d3f101c37185db429d11e5d2969aabc889f1502241efc92e3e24bc4a847ac369adae2dedc6488c6540cb4f8b9eefda596670be6ecfb6e17b832bca750a399fb031c3d18898a8eeafcd3325325d668873fcb3355a09fc57ca19253f26ad1adabd5d529affba8ad04184c6056abdd9504e9000ff93233cfe01134545160d74a8e23a6dcb2f0c12674e3ce86d7cbfdfbd5e382513dceb56e9dd3d00c620ad676efc5bf43dcf104e7b65e779fed8b25a50081d2a3e1cbdb80a15a7f458c8001269e745154436f567a8ef10d17e64f5dfd23859d7651bf5c17a09022463ba4e007a0a5d6bbdaa1a17790834464d20870aed02c1a68eb2d1ae72cd04d235e64840119f9ec009c9b060cf814df9f7a767af0d7a99fb23e9181781639a640e42c8330760d24e5cb4f9cc9fb7001e2d3e43ea8ba7fa38b1477d5c9ac284ccd370c251127ea4a1355be6844f71c22a6fc1f0b6e96ec71f7e7260ea7ec4913f6c6edb30f62e319026c1ee25013dcab07973382bfa08d7616003c5415c4ee25664c5246c7372db0902a5615aaf7083f74d37b497496db0824f8eb2ec3459fa7fb33c36948a5105cca89328df572774cf024a0767c82feadfb46fd84023eba1b3945d338c1a1c59aeab3a8a8304910bbe00bf6a56861a9bfe0529edbeecea6d0dc0e67e6131738658335d348316ce06eaaacbafba05cce09eb425f14b2b98cec1edd06bb16950e0b88826556fe30a7c97b3aea58a83e84d3df19e31a44cb5d3f87b1e0b40adc6ab4e199c9bc991ce84608971bf25596e2db2c479eb324916b05e7bea98a337b92ef4138171039b6a367edd9e112b8ace31fbb07f4ae0d45d10a93e42b51ee6e77825b802d7dd198e0b895b00d7d094bcd370ad18ba3f360b4506c704299abd12040626050c9cbca3b74ee1145eedb875330c5fb061fe1945f58edc994ff31f1265ac0d59fa5e48a1f6fc67228ef19fa0b5179d79ae5c5d4fc2073fc92916ea7dd0ca596fe31332c5ceac7d4bbb8b05bbf5689543e3d9be452bb6df6104af5bdd59e4cf91f136fa2055cfd594aaef8f1662c87f29ea1bf109577d63664e57d9a7b881176edc32a99e2bf87897cca378c7e42aabfd8d8932de36be651ba53e8d28796107253e03642b5599ded16b6c0aecdd55ab36a0ea0064aa60366f5d531ce690edb5688ca33db8dab43e6aef5f5ba837ba96d478a80f9db532fa5217e6fa0254de13fb4d7a4fa50ee78575b05b09f192c5f0f26ff4c6ea02db0179dd76804ded336aaaa87e57d0b757406f80cdfcef404fdc19d62aa3c8940221be51844e693f30e99266b18f2963c0f04bf59f62054dca571471035097df1535a7e129c1bdd04e26047553431732b8720c74b35eb71db704eb25b3534e739d884328dae90b28d2510f9e5494305ce2419c4033641f0956c4696a285144f8e20222620b91119e4248cb2ecc4cf5ad95d9d924111f35f1061588d8923fb15e1b0d965a89c0d911e698f213a487d23ffd919e5ec96888ce64e7363cc154711e140f1ad1c0bcb68e75626b7a1eee33cd19aa8ac3439bf88a6b5c3c858dceac3e5dbab819c94aa767616ab926dbc5cfc2a95ebf92bf21fb7c9ac63d7737ed3b5a61f1967aad9944f224a66f8efa179571e8764ee59b402b30258159b2a3f6d716d348a170c812ec4c2dc26bac46e1dfb92ffd88964404fda6264cb0c4031c26a6d2eda5613a1fa5e1571a19253070fac1b8d58d1b436ea03098cec05c59519d6b49fb9405404a8178a33aa1fb00e0105d7a6c4b75eae2f8270b3d17c578f9c76200c4164d5bf3f1443acf6385bfd549f70059ba573675c1a375dc6416cb9fa16ec4fc3c31f9d98403a0334ce75291a8d3991e24b9c5dffd5cfeade9bb65260b5e6436f643de28b613db13f23d0981438db69f4f2c8b199d256bc979d8e5bf94195632b3070b963a99c6ba66be5a2fcc9ff60065e41e846a1f4e8000b2e74c35365970fd20e21dee61df0ec4a9879268794f2171027457220f4863fbf1140b5e7a7eba760195c4089cc918fe04a04d5f536f0e5cc5dc2ff7aa78228278d6005a6ceae75fbb0d98633c261390ed4affcbc3e79d5508d488cf4638229d74b216e29d546fdabc0d22e9dc88bb029b4d77bc3512ddbbe85c8acae4270cd986b05349efc559c8f30b1902560c8ef66b8c44e600e61277ee7af4a06aec250d08450fe92404574f6b1fe80cd9aa3a9a624595f2ff39d53634c024ff22dd627990c137daaf8e8e4c9cf956cb2b82db4f4a2a54e1a97cba5021ad93e10dbcbe8bd07ba09fc4b65df52247351990830c8a944c630cb621e65da8bc40f49e9596f84b15446bca6946a7a2e5aeca82e2d6d8a27fdf849139aa81c45c07bdf5aa3ec9716e7e8c809696174d8e03c11b443333d3a4a18448684d377175f30e9cefe7e3eb5ae2cb03c2d8bd048cd13d5bf9080d203f755711ff0bc60484ec110c6c644d7896347e6b15fb8b6a7418b207001f5f827c467da1aa98cb948130a728d91b5419a8a58f95b0a6efd90f48fce27cd25ce9535b4530979a8af2736e9250340ee8bf7b60cd4b934a9049c382b21563c98bdd10000d17d4448fa33a9e745a39a29164b1269290d5ccb40389123d18a859e2c78f02fb50cca80a03a2f0817f2eb0d69ea0af544c11960d0c7201e6e70e14f636966c4827d6013d62f176f69444677e131f0022d4e2e485b3cae76c644209ad1410de5b56bee1b31eef47c858a9c26cf0fff4702ff72fa17ac867a97073594f7fe3ef6a3f01a52f470db25c46623c786558c052fb91dfabea812dd510b71ed84c7cd1b5dbb302581b3f15415c02831815935957ce588171d6cada2df4a959eb15f128dac373b08c710249931cc370b3288876248af7a75dba47e360dcd49727c4e70663eb7f28a4b8ec38819ede943231a630aa4f0808472fac3d5bbc3fabde58ff9b6cf51537b76c81ba5b9a1ab69c2e725bbe29b839b18cc3effac0c2b8b786751a5bdf0d3a00ff969a7f8857c72cd81e311647c9e699f0b2d05a9e92ee54ea403cd52b35d4ba6dd07528f03dd4b657a7891aa0b4a8f2e21853d19075fd56454abc25ef060a9150f37e755f2369e1b06873c97a876aecbb21dd6efa0804fdbd7a837670c2e36b66f95c6c4c3e1b2778814ae322d88be4a749f5c7e5719dbc53f458980a2b01400a6fc7983b6ded3f02f583fed730d785f4c95850b805f48c6eaa3077d4175b2eb2cd98b1127d2146d6addfe780111f599ae79b4edff72e1adc2fe850e4d0b1d3f78f5701750c0a6eae963682cbf91bde4938760ee82f194704ac23e2dbd5ff3e7c7cacae737ba1a25f79510b147e1a5fe212012a7a78a5ae2bcfc38cc007f5a869218ff7194487788b2cffa1cc7dcd7a7e877ebcfddedbfcb98aaeff37d350e8c0e936bedf6b74f4d9b107c2881e446954fbaeb0ee2f07b1958f68a32340cdabd13b9e63b211944583ec33e482ea873e02d9a33b78dddb9c7bd51cad4e66e21f6d6b1dfca0a4a62cba4edc8e4e04e2e44146a6b322f101c9066d6884b36caec46ac2deefaa10ca05d81e7c6dc222928de4fca603f4af2caeb89f693805f4109740fe321e1ba33dde0bf96b99a45d307f85b9e8ba9e830460b4f14e606d0dd06140bf2bede83f1033a966976fbc6d267af516fad7cada39f758206f3e1d937de7d1bed0352cab5ea164373f60fee0d862f409fabe5f36cb07533e6b948b5d0631399411fdfd49bf5feca38b176928b0299442ad9b7e18b23c9efd8a625f905e06579003e52487cfbf29ce191508e9410f2fc37d5eafa62653eed56b8965afc58cb66e28c2a97e5d80e1a712c46dbdfde3a23fb5488c6b6ab3add999d4059cc8bdab3bf6b4b269a142595356322395ded8c6f51f0ede52cf13ec8a77a8205c365e2da65a22d636f4cdfa88c35dfe214b7ae7d395a5a41968d26bfe480c78f98f3b2d7cca2cb32f439e2babbc81a0536504251ff9f31cf5801bc07bd22d1c428372e7e7e0c14878d99e42da84cfe0eed1d7e9fdbee6be9660cbcad22edb930f00c504fe0c082429395c9d20c638ff28ad4e52e599754d60896aa402f24d0340824f89a1d2301e23208650af1a6c278616908a7df954139a5a8f5ed97fe4817194b3a663b46f78c2e4b510b3456070b905a85ff25cdf35627d52f776efb2f04cf32c3011bed2812c400003876dfb230b738fb23d3099b1d6074b805777b91f75e7e5a0dd40612c22bb9c1e807e4b84e9cbb11e3c67f3869b9d2afe56f8b4dfb47d1cdc6eaf8894b9f527434c7366d6f6d157476dc08b129174b75722c48c2154f0a25c743f0212ef9f8e78ad1d4adc9251c0d2a53f02eeea6815e3bf706c79bc390f022f6ec4e746f7a2faaf65f9445be726fa701e2d2efe95d9518596cfdc91394a36805b17e787d469a168ff5d98c351c349bb8139ea181f8c712226c26c16ed33912835a334daae18e8ffdba3313a11a214172891f331367f78fc5c3b1bc4296cda06ecabf02498964144c1d5ba955386bff137e1a6b7ecd5dd8bcae0abe408639f05c26f89d8bf583e45732b2ab71cd8d74577a3f177587869d63da9cc28d5f39770d77269e173385966926ae888324901627df087cd7f38261aed3d2778bb00e9cd74f82f089327b11977b738a31853205335de44b007401bd9b98fdbe8ca49bc57bd77b3bb3ebb500519f9a108d3f1f7f15d36278cacf731aab6b8bb4a8dd345c7bfdc1ef188b43177fe70e5afb5a5a683d440f89206f4e723826325661efd2c24a3513a69d12fbe617a52874142a8e6076383eaf89dbc818a95193ef2d7cbd995e68fae7e89ff106b07701c90f82ec6c2e18e69d40c06d1a66b0f143e2fa3dd4a981c6bfc39912c93a1fcd1a3a1bdce83bd8404ecb97305b74d163a28eeb70d55ba511840a88915f86b68844764c4fbe939b291372fdeca1529870ecf86a61a920a43ee747411388daed031aec217af5e46ea00f4639d7c1882ed04ebf2c2df157166bd0f7cc94f46512885c9815dd9b7d5ce581d866b14a0e9893520cd0d21d4439875a118366acd863a16006f8b42264f6727b6ade8042e5cd34440489a13eaf248c685278c15dc1def7c107b161ad215ab67d74604a02ee52b60919a3a83f60db0e14ee6b18b2c167ddeb75541254e37666ebf97999647353ad4ef704090e6df0d5ba535d48309498a9d3da15f87159fce7cf6cf80b169482e0bb82e13ee37b5ef6967d32a65d007f0599bc41a5dc6bc5a05fbfe75e902f30caeab8447920f7dc39ef56aa6cc1ff2bad077a6f00b78d3e93e63ad2e42e5c7021a07eebc412f3526a7c90a21797f22c9ce31bf78ac58ed5f4c156b663c95a2ddd7bcb2c220b8d89e166b8723c5d2b6d3a3ca90a0c3521e8431e16b9673e56c87ee1c91cf4d20a422aac232dfacb547e1db904594225ec9bf8e52c3deb9cb9d2162e0551796e4b58a3c3d430be15414cec044835ad296fc19257dceeb3409fa06585b6f94b74f19b10234740e5f2c791d9d00d2d6c4ee208991a83cc2d87107db14e4d687531b7216f9558e55b0d2742c855324655ace039528137b6c3bdd787e365bf61caedf1e6001625fa4988032fdf96c27ba60f31464939beb0281e0d1a8254cb72cb19693bd00ba3a721148b26799208f218dc5a30fcee78a37912b3e054fc783dbccded56a3f7ad4f2990e20b36f80ea080969ebc20736c1e582de7749e1e58bb93cb1629589a5ca0c8b7d5198397f53ef671a19a903075e6ef58e6a5699964b30201d392c3f3f9c72ef2fbdba85a7ef9da61a7a43adc8ff02323e19d77a80009c17ce622aa2558f4c48ea20d8f928990a687cc7435b86b55f78ac7e4b93f84105c19668572340d43004914c5a742509641c17f65a5d0be40dbf082641a8e5eb36806a69a99bae544f9f9a432c701c048526837d244d7f86cd5a80c5accc2c0c215fc3e04c2b89897d1ce46c2b5a3b93326b9b16988f6ff8782e34c801baf2ab517c90bce5790d27c8873d917caef67154f1768efcf00b8a2a4acc223b11ec155abbe8594d63788607ba803f804b74d3fcb0a3767e30646c4c71cb4792f921f8e79ccaa62d707346e7e62f29520c0e8c409e4724a37f34e316fe119fa310ea2da8cf2bb9487e659e0e7db90f8fde7ede96bcd02b2f0b8b6f5edffd9556d498ab54f2bc99686ccd2800f041fcdefbb591d99ff568aa61d9447ccc3655755f32f71baab84d8a74bcb1fa90cae45ae7cef3ec1813a98df9e4ee1832de2ad1cc7a07be379b0939b2e364745b5ed7006b8ff481810fb98f1204bcb74239330892633bde21ad3c7db838936fd1411a09ada95a3cbcf3a50582897631c5ed206ec8229e54b1b4043063d9dee944001fb808a4ff3c3ba3d08c6f9282e228c884e20c344753c36207837cdeebb6a943364e1dab4d7f8fcbd5becdeaf72b284a03b0f7eb25edd403ebcd00b5abdb67ab08c8fd501578c7f36273f7ca2a56dddfa8e28527bafe6d370250bdba540d69bfbb53168c8354667391875f3e531e912fd826c44a2dc710897809307e532de26326e99b519fb9018492f6430d5c81753b73b4bbbdca2718b2aa943ed63c969cbbae5085ea84bf91713cab7ae40c39fa4cddd19ec87c66be47c20686c2ba773f9de185fa8514d48e8a68347230af7fcbe7702b7fb0b6eaab0264b261c932b7ca476741f47f0072bda370ebef67046fab697cb763070e993109903c68766305fb69963eebc5bf87c0f057a24534c174c099f2c09e8012cdd0ab001528f5bc64780d4c91884b431e669065aeb504044e01be46e7e64cb7aee5ab8fdb3309b6303488b850cb68065a57b37f0e9614516208d848443c575ccceecf6fdfe8a9450b4919591506e9558bb2529d4c4126c00793f0ae89c210cb8c800dfecd85ebb21304863a0af570b9fd2566c219d428655f839ecee9e2d071f5a08d78d1ec971821b709f4334cf71ce17baffea460a7fd9508c0391fb6097f97d598f8d19bcb02b4d1501e8730ae959df6e7e40f8a4261f506239f13099f30405434f2027ac9dce736a730b3c9c33ce1d986672fa8233e2215f04fe4a0fbde95f4e95e26960ea80e94035da399c5f739b5343af84a15233f3fc5430e963397969724c0377f3cc8ff3fba07c274eab6a33beff72942b3f0e64854991bf3fb806e0d5778c47e9339e40a7b553992de495233f6e96ef6979d8fcbafa5f71d4aae993ea6218529b005619dbe0b5945369654d8f6987468e4d73bd47dbb723da768dd05bbc2e679d0f98be4e7fad692643d988001aa3e1df5622ec4b0867ca432a47a5cdc6fcd04453286c333236b86c6acc18c7749195049351c85a314dcb81903474bf57ef6b495bd83221fc200be0c49e6696fb2802ce5528b65f9ea4983fad05989f36230e35acfbd39075aadac19775cc5de59bbaeb6a07d5746e1085f687c8316a56a79bd497da4fbeb7a27916b84d6c01f74fb1bbb2a04f93a18b26b2b37ebd5533b8fe5320566ebdfe42f2c1b54147995b0c2e5919d0e107a6e5bc179d5312fc34bb61f5e26d079da4f8bf21175970e05e1541271e06c584bbd70aab1a6a7787247f1d1a9f51cb280bebc8d218fc7532b9dc591611c3c1ec8bff378f731482ccbb8fbabb2522bb0c4c1cdb5a777415186c0a45ae413e6bc73057fa057693083886b29a43c9f593ce707bf238124c6b47d5c08cf981f20ec655301ed39def9770911631fef18f01940388e10513f8b17ccd58c12fd5339116883f5ad0f9f827451ca8b8b7e8dfa32922aab129e9e98b02cef37437cbb8f4bff7207fec50aa1fae1e854ca50763ae9cda32dcafb9302d406894cc3b6923b2d18ef85b4f636ab489c41b32b0998e743708e9b38822c9e8d993b65c4cf2372b7d63e9db48b99758197beeb53f98f1dd592ee6a4c6482226f231948e39d9d851a97339eacd4ba79fcebf492af5c20b78cd9aadeeb696769d684005885904cf50a985c85e8fb4b647423791054a8bc0163460537a9bf609adf7537752a8ee0defa00b79fbc224b073c9d78ddb63998f276fb4430fcdf01634d070000c4456a571e775d1fbeb816d4b2db857edc34cfd787c198f9f2d12c62d00ea555bc4ec8f3e1ee6802737a6afbac9b7e12cdb110d83c0780d2c4309bc71974c90eee5dc86dbc029540d4e525a7ba033d4d8f17aec80e4e88412ce6d3c0ec07c934d9861957f49514b5e8a78016555fdb98f07affa497f3f31b609d455d35de08e2915892194d4e25e21a20708eb13b63fe9c1dfaaa41152ba941761f2adabf0def7bd3ddfb19d62d1ab3ce690b179efce710f97d96dc750698ff2324efb1792f7e92ceac16266c9e93ef9fd73753c898301e49914a080fb63e0a16c626ba713de0e890a9e1aef1b7c22262676eca573db5bff217c6c11749f64a1e35211dce70514204deaf85901189e881ba2d71841c6ff8ba848b270f197155719bcf60536e77ce488d7bc45945b62a2bb5b485c68cdbff81807e48b8b1adea3bdc2f96188f76173d2bc08539585bff0c5486927524add28bb2a1bdaab2aef3b5982ee2bd5840ec9fda6d376598e169c0d4f32da38591b263997c078b369ec9eed3cbe26710f1e261fd3f8fc7865c4d1dadb9c7f2c12e675753658a944aeec2477e3c5334619b6f53077ea19d7010189d29aa3e28175151248abda09b8d204fdc677b52ec6ccda15bb8e404a8c426cb5988e7ffee424f06ccad2df9d4004e492ad4b147743d96dfeeb1ad2b8ddff66b1427db6d1ff69089f65f5ac09c701cddfa1cbdf3497202b62e14b440575a402587e4c4bad247b2eb249e9e82dc95410f207cf566d212b4c0b7a70cffdb48971653e64b42ec70b0eeab84f797115ed60196a55e8a5baa663853cb0827594b0a86b9500d5b25370e861511adf694de1000911aac3af253bb95fc89a31f0b66be2c68e1a3da1a551cf93d3390d36312a0d316e2ef9ac37a750cd510b55faf3c679f1478047623c1506507c4b20dbc1dea1d0c67179858acbf89df1d101257f763c0640b1b4fb5c62e81d6b322f9deedc14ae328518ed89cf9c11d69d909a701550d242af51119cfe2ba0bcc2123a7974cb06eebcbf67835e3689418abd67f28f1a02feeac2bada8ca6d7d741a2e20e0c169129e3f55b2ad68d5bbe33af9ba32d9f70afced44ff4f179a3bb6833244a0074d130e64a7a729dc246269bff6d4ae5a980de8efed3c24ed84a47bf6f604016ebea9e6133943c4741d50068b2e4e41f9293e94ba223c9e7b4bd76980d122600b5c469ee5771a6bc699449829f4a3cf0f12b6a35d7238190a85da603eeee0575d7e568410a8119292009e0e7620cd5fee8eb4f8c15d499817f646cc4a38f2870b2d97c004b0961a9408363303289e160eb155263a2e20aa6b757a29d6a341465b878d0df9b2d0f3d92a6de3a19aa2622a9a458b0201b2e1a8383aa02fe609bbd94f871f470cedbfb52aa6ffa7ba9ea6826498f9c1fab174c4b3d579c8f5ffd4bb0e5ead72b70e05d8babbfda3cb8928ec6825631f575da20013963a1089cbf535e73e7672157fd61a9ba26fa18330f7b1b4dd6d78a63d302e5caca40d5f260cafce16125c21c7a006fa991a9d694559450ff14c05f6386fb374a3c5008aeb7be585d54e6387cb8b42fc59b5dfc94e30f163f6aa630c5cf5a0eb90fc8655ac1d93f4336e7189288fde928433cf972dc2059ffcaf0658efdcc4495fe9240a691f85d61c564ac509638429a6cdcfe8930b1d30932bb84457391c7e0c5c076d5a725274295d0694c7bd35c43b400694e296950a9e38262e7f8dbc163c52c19a1be4d303454a59f2499c4e9528abf3922d1894bf0bd5c6278aae15c20a63927290539ac1385dc22283be4b636bfc199abf25707009a8e5838438dbdf59ec2a088700c07f1c242d9e51cc4c0a84944dc9814e2de885ef6144581599d557f4de9831338d74cc387bacf28365d1b0bd9728e407523664535deb70d0d2e43a71d948d10f0c79f55d9687bef5be387751de2536c4e44202000caeb9bf7aab2eca6d14a9fc4c2133ab6300166cce8dac5ab493fc1faedca99bcc74a4c5285add0455d41b31f49007ff102df50d12c8119faab49252052cf1c9f25e221ac008c6b4496e6a772a3d4cec9d09aaeab9035cc914bbc4c01c7011b9e80315a58146d391b44ff28e1d8f606b43be41a430d1d8e3df5ee05d6e24b9f44d461b4a4b9e8bd181541be8f73ed4c1255d688f835f230d6933efbdded80cee0e86855f47bbec173eb0118e2c86d122685b862ff7e5b228fd7e0f9072635cca88d4b891cde29b7f5b4e8512765c0cd0520e80dfe8ee402e2a92f0d8b3def34819af74cbfdd6e06d660fbae4a96486743206005af60888e2aeac5fcab5765ee7b24c388fb9aa0761f8ad88f64f860213be2283ea54365382888e452f01ef5de8aeb83ac7245b49639fccab1133b133f6221dfb1ae4ed680f1fac930c8cfab4f396dc54eb5b439e35cfb04be015032c510abe37bc4f60226723b02dd8afe7bab56ead5331259227c6656f5cd5ccc502c266986bd1c8cca1dc345dce4b8f478c14121565375417d170dc9b6cd764f39af0d51bf006441f340b480e4dbd1184be574aa187cc4d8470893da74906a1531c988f6bea9d1d93480f2f66de4fdc6f286034e46ff136c7523b1f1d2547a8f6f4b16825941ccc4727fe614bf6c9f99adeacbd403b5b8ff7693ebe823c1c108b887a18609a8c53384186580b20858d5c18048d8d9a93ccfcff160e544be67129d3881c120cdb23b4be922e84e21017a66831096d54fd1f6859f40c5acfe0a4643aebfe4a0f839457c0c17125a04a55e604140a991974bf0c8c795250e3d6cd8f292fbdc43dd2256c50e64a9e22e7f39959b0e579e9d0cfefe7713857df4bac0b9fd1274fa2d85d2fe5ed41ce5288d1da9881535b1ab3a640cce9fb91b2aebaa96026e5cda951d8846660645e01cc909710c27271700617c58599a43da6d1f4e3c5aa9a53c138fee66a3e4333a0b6ac193ca91b2cbb3037f367d23882a39f6eea1dffe7965e23daf02234c65fbbcc0b832b877c0569eca487eb49371683e528a9520c582f73bc86aca57ef56d9e041a079eaf68670a16dd931f91d00be81cbfdd5853ca9b8df9a1d195848bd909e32ff515bb63447151d1e40eb85626ec496b3a797fd8e66a353515e30b3fa6a3e0c953a6349b425c1a513b93178dbd62419a983544f2821edc6396c69a238e43772fcad253f59227b6f781053c8721047482735fd7a43b266c0bb8a4d8c009c2fcbca4aa202e0a847fdb294ec15be4ef301be9037483c82563b883a5c59cf21abf1025281f7b35f20094af6dd10114ac141efc164b4e36ffa0dda1dc6b14e51c0e483ec75ee74c2cdea64b7ce672956a214aaa7cb4f4f5107579a43f7a9826b902af3f78c442ab7a4cd085b1b1202cb5766b1ec0ef7e816d45f430a60c4e068caf4d8cf44ec181714701e6d808680674c23d698038d8be88d29337ad2c3d797a01e4720ebac2ac7e2962dcf59c0368cc4ef83000c100e842a550d0f89885738caa5121523d1d86317c015e4bb2bf16960dcc14c51f7d2eb8d499dba80769c6cd0e55c4c7d74f4e90b034c1e75cbfdc8d7a95eda4276202e3dbbf9d14f7fdd7d0a30a8f09b91f209b22b1db6b64f1307e07bba701a5eea0a8166d11823b2de41a71986f67c585a98f1659d1b97c79025bd145adf542f398b94db3ecb7eb8f8593840a434ec627c765958b64e278a7922e4679ea4948e303dd7ebc4c3f5dab1b6ffc573ff6db662639e10f6a1766bec2e4444bed8dbd0b6b536953e6b22eae7efdbcb038c57e4b05f3b8f5c0fc2cf0118156153ce7df394166892af6c570d4de800297cdf1b1bb94f02ec59ed7721dff40f65121b6b4ded6f36b4db3dd307b95b7ca39e5a7847343ec67c1cf3fd1406b1b9176a7a0d5917dec567860099dcf45187d2fbcfa63ece59a71dc466a6291a92d44196c334689e0702bebff99421046a60a82b3db25280c5dc007b69421fc82a4e72dd6b078e8eee75ed1e513d9dc1fa0d36302b723260fc882b1a4cf5c8a457b1691cbe1362c14dc96143b34daa2b81d0b220e678e19548e129fd195ea53f479e807873f05a158c07ee1478ddc6a13510075ee457ff8988029e55529388703a81e78c72fee269c5ac3af3a4b7badbc26151387cfa81010d62fe6fd0ff43ee17e7a36c89f92316f560f152b03b66c6f81a953a19feb0696fe1eeb92d0e9ede899deab7dd6fa76be0ab5cbd7ba0931d7c7905c21a2e8dfab91fddeb77870c882fc5b634a577251cfc4269adc21a3835c5f6d2b52767f038ccd0aee015dd612f64228303bade510d9ad95fa9b86c7f6adbcc5a2038bd2ce275a51d2a5cbdb4bf4d99276f049ddad5b32d560eba0c48908a5ba042166eb172225c8e8f47bb76e871f5b37d1cf7a051d365a7f331e681ec7d65a58916943283f51066529586975d309ee4963cbc80e7c6e553c1faefadd873e755df422851327bd78b63d2edc8d20efa06babc87557bb6b6f5e51e74e15a4d54f5b07798c7878964745abfef50a806ae5c6fbe39c151321a75228c7ad13b30a03ea45dd7161af317d89878d4b5e5f23e2e8e50d01308fdc51d56f262e5222db53ffd5b120b07aeeaeb347ec6c489f8d289ce0e0a2924306540105680f422ab9e9bfa7d580690e075a62d2926f6953dac66dc3866c325367bff7bfd50f8243a834e95a969af568ba4f7b7306e392f0c2be162cbe4d051d2142244a1319730ae9697465712b96cd25ac44473ebe96cc6e9eb76805eb05af66a7302b515b3d9fdef4304c3267319dd660e6dc998db9aeb0ab409290eb78662dc082accba18174ada35087c57f811bd3a03f04a2b4350d17e28f663425eada2726d6e0f0f6be392f107124b03b4083c58a4cbd8de72e57c0c86018cadb5b68c4d734f8f9538d42d4c43c9878b5d7482ab3e8b904c86e58b0c85a2bb2609cab63b49549436c7612f27e21419ed60d3a105d753639fde3f91ac2361f67f980d81df794417ed3e2344d0caaf7513101165669a61379d7e50d708e1958d4d1b537751eb7cb2fde91951566d233c05480c1d59c658da027e65e39b15fd2e992ceb933b320bff6f4b8f966ae018f658030be8e0d9657e6381309c06d0eff6394d94f1601a92779cf0278f8aa673bc60d3f96c4646d31c9af7f4f093b1a8b3baf2d9347816d4b043206f24e5985c439e99f61ad0f68ee7a32b3d3ab1a8b314308e04e2fba109603187fb036d6dc74dc61ab9419221bda146cd628aa79a00aa015fd5ca24bb75c590bc050b83b696c3dbcc20211d8aef61c2af93b24eb95568c4b079580a98cd154132edaab95e238d0e66c61b5d3d34dc9c88f211bb644d57c6aa49d6bcafe40f3dae34272b2ce417752b4d3d940a285110d7b3459909ac20c436b30857f4e5839bbde29cc2ada0c3106d6b9791041a99a721e275253b7463184e415e37aaeda6229fca6f10d19272419e3bf46e4fa199725092faf198c829e53aea04cf70b97e0f8577313cc642723705b9fa8a956cf883f0190be4b6264151fee80910cfbba667f4442aee653b07e5d96e884bfc629ee5e904a73555c7fdd94d06c31d3ba9d201e577ebc474d9a22fd506df340d06eee39c0987d8372522539997b580750ae08e8d68685354b08da7de4097cbe78ef7be390d34630d8dc403cd103d6656b735b6cebc9be46b5648ff8e389580e07d200baed0bc853d01b198e05a50e097a9a82097b4194e967da15989d101c2ceaf67d440738295931c5c4c2a7d2615a57a28c6d2d1e119889e36442c96c56c20cbc626bc3381779ad214a25e9d4b36a74c566628d4128e6c4e631fe327f06b5fc34e7782f729d5b4c687da8ac7fe7a274c0a5403f2b56881bd85edfdedcdbb68711709f4707e307da4119602af6edf30308e9ed63491a7446d5d0037b58fb1d16d9ca62fe93c69a38549a7b33704e54d420d811b2f0b4e870d9c98e235ba836c3cd1f7b4a335dc4f96eb86139a70c942b683f4b41a2ed5325d4b2772fb545dfbb9d139201d9b1fe27a13a026f22d5f4b2b15135b760ff86e9e37536c34854f246d2539143d753e1e9603964d20e84a035d1bb5e0dd171102f0a33cf5c021dd12bccdcf73f6915e8d30ef1f2c373e5c8d3033b558ca2eab3266a1672a4cebcd0b148942ef49b310818ea418f66a72ba3c9b0223625103b6d59047669b007a83688615417f23c62d7d2c12f52c9739b7c349378626e13be731f2b1b7bbc9b463b8e991ec74b9b4b9218c2e8a55dbdf2ac5fddd1ccd3c74d2499c97654ba0025a9a3ba0be0291cb2debf23b48536e787ac5b7265f9120c1f56c51607b5a1568d0676f7071af28193b4b20aa0d017a19c97a38bbb7c7b3416691b1ded56c74ced11b094b0ece7de3def490d3011f488c61623d40064b5461475585338508095bc3bc5f39ce4948827bec6bdde570203e68c8237a86fe101cea12e3a314c4ba19ca434968a75144155d38ae833cc185007ef4f3bc7898117867c8a8435f211b9ec614e51c92de7a39ba93a0c0ceb45089502ca88d59411af04b6c954de0d1263c207c196568fd3df64c0a04fcfa573e7e55ebc23cbfa7996c1754c67c00e3f42f1a504f43ff84c9ee58d1fb10d0006b15babfc84b5fe11a6f27c2c14124dcf78f3e1ddf789626929b8122c2f578f899cc162e5f055b3d87dc4d094c610270e8d819f926c01fc63a6f3e5703ecf282501f239942563d8e93da687285419fbaf3844fc434f8b6caf7814cae8c86d0d75da03a7e1cb4e8b5e46ccefc38191c2535e8f03928039d9b220c3a9d0dc3d910992aaa6dab188d248c26eab21c84e279f3abfbe81120125544d2de39bc6c5a9ae56576db867c2d3931459c71a84cdfb7e47413e6facde27354ab20aab2883ad4ca6c60d64eefa695fbc97daf779db55c8911094e2a39bb9e43883471b7ff9cb377dd8a015aba7371c227f2b6e70a198dd16cbab039e2e0dc208d86d19fd37afba327bd1d4e450e822584c2450cb8e64be5869765439f9e56afc0899e0bbf47a556e992ce289ec5aacc98a5a5f22c9b1befcccda501411c35c4d498fe16f22448d00c5cd42df6f737d820e7539c1ec46c7a26143e528dde70c361b89214194794cbaac76d94ac88119dee248905c33e119c3a7a06d1ebfd7e082d165f44de70f66bbbbabd10908517b96b7bb7c88307ad135958597cef6933fe7a4c489ae3f81f03319363e480ebedd8de89102c014cd46797d36a4dbc4c0e46e69b1e94a41da73f0e84fa2e2723d5c58658b6458f827d3355d6fbda28e1acaefd030222a600ecf58acefeeb638fbe932a7b1ac9188ca6891d73e20e20a4bf08aa98403db3cce837d36a067a9735d4e6c779344cde2c38b009ab4575296ce879b445ce101859060dd090d74edc8ad05ef93287cb8ef6dec6d39bf4ae97a80f9b914a24370ab584ad5170bd778b79d143447c86ce12413d1272b55f7671fb43f2646ed9d3412a5748cbb92e28bc4a4b0c163a5871f76815ba3d0312236e190ab8ac8d175fb4e75b4ca1f0cea0cc05c573cd079fafdcd11bd524c0e91e09afb73d53ebd6a9097ef877a7fe886c1c64f0ca77edfe5142b67be8b5d680c21aa5de06dc9df97d4e3d1e88a8f65564d3de2fc4cb52e22ad038f7097ebf6c288c537ca49415558d04a2953408a4a446aea458447a0c943b2a16a38794b36e4f9fe1520a9f1bd9b362ff15e5b8a4aeab998f1c5e6707e2f10e9cf26654dcf965a6c38d124ad96840cbe03dd50a03aabd8d58ff2e82a65ccb0e3541ce7b3ac37ded10d9381e2b273a1b501ec204d312977ba8e02114c77b8af113c2399082e8bd6c3d953e7b7a4a17241bff35f37b128cb27916f1468d28d2dc8b204a70f25a8c7f54a23a0e019a4371ecccf450cda43f9089838d79e29998bcc18133748b41cbe11811999631994cd5c8c44caa7cb6081da549cc762ae68126cce94d3111eedf9f9bedfdf9e19f5705529e5ba58cd2a7fda91e5cb39de4881b490e752119d98e03fd02d5eefa28b43f3a36c66645c2bc5779fe6206f7fb7826c7fcee9c9fdfb182e576ea4e2f69be6f668e359aa3f959ee724fed8ee2f9afeca0154ca9fc73f70ceeef9503757ebb76d89a032da22f6c5e7e51e47042aefd5acc5c07a6279c934d21f2d3483d471585c68c3642bd2612dd67cbe16acc3c03f69213610c205cd6304c0a3961f4cfcba17277a899f1add9354e3aa7bb8739ec34301c33704cc2ea7837f669c8e11ae260dea386d7a1e88ffda72976df3ff0109e52de0697fe4bce9be7443f55b956b3f8a592e14b0c33b83042b804f883503d6f4f032b38162e918a73249f84ebc5f0f510beaaa05c5e081e33d5d34bfe307e40c5057c2a66bafef9aa71a0e7ff31f385c8eae987bb5ad70d556d13d5be37bece02087c672dfc03b444b415f13e4b8687880dc8dca4452e5b8c30420c9422a7436e1031adf0b7c4f41a94c783b2ce1c8682c123599b6a6d2cc239bd50ccf172d7ed6bd6a77ffe25445b148a44c387ae2b4fa38d0e76fee6e7fd77cfb657c11a772270dbe91142148a6902be217807ca65239c6806cc1bf142c12ca5b34fd6f85c89f8bd05b16ac5fc91ac6860dd38a8c6e88387133cfd4756330966b461a8cb744c0d991453336f4a60cefaba873b04c02269537db6f3fe08dcd1fed27a2c862dc86b788d6d3c9331643ccd77e389c5d16a2753fe0e2ef53bcf5df2ed827b86fca49ed059879e093be9d91f1c5922d7c1c4d2bdd6076c8f785de6aed30797943cf38c985796177186caf6f672921f51bcf4cbbb7fc29fdf25c6659945d4ff583b4c137db78bdc3f87df86686318d04389fbc4b518d30bf18b717cb1f776915897c56cbdbc2f725003bb9ec5d79939770926636e7bc3097edbe9c93f91c6fa9134d50934cae224573e523045e60ab65df0825f613c77b7622e9f3d3629cfae530211fd4f9aa33a73c8433a4ddbbeeda59529681f19e67c869d81935d92d1abeb7a3e3b967fa98e1ae393e7f62b93f73c15a983c294696fcb46cb5d583c555742c8aafc07defeb4c811c41dc7446400cb5572279c7b9c75956818177480cae5c8ad083cfe015786e0b0d8bdab5ef3ce5a3e85688b0bfa861150b43fe56754b508f540df5647bd8be4f0c7fc3fec0df4b43aefc6fc308c810fd066a6e4b862cb27c26f811ba407d60c9576d6ccf0665cc9112ac10b79cbf5ca978bb7e5dd6addde66ab9db6d71288c24fd877f6aaadde4f097c7da2ba7db43d1e5a13d2c21f973219abe2040e066262621ae67685997d59c10c95c2e357d20bd23d55e2132e3594f7712a799dcc56008dd6fc518bf2306486aee8d2b987eb7f340008d33565953ec4d53c46294aead303c4c3c04053d1495a622bdea1de7148c1f93bcb957ade422fefbab23fd529481c69913f51bf24807c57e1199f83f625cfaf09bb4cda90c0bc5beab4c62ec19d16775d2bcaf3022165ebebe7f35ac9cf79861bca2136125d2943ddede538cc076ec30e00f2027821b786927cb61541bce803ac61a80fb32f6a8b0a658b0b77f643c8c83be7a6932c7af29764d085327548711a983744310030b7be2421c69536e41e1a38439e3904114da32e0281ce7ee8b443ac41a22c5449de9c4f9b8052e6e5a1bb8a54c8a7b2884ae56fa2ccb780026d690fd336fda4156f528bcf75b8579e7c50d31565938335d0d6794a313920805fba890bcf3e633c1c3b708688507c77e9234c107de03e1e55be280cad7e71f265a6c93bb649273e0b75447801a74bf66e248a91920c2a11d4294bb5557d31671b8390daba19566535bb30d99e195e996643dd1a75883c8cfe2ae8ab2ac5c2d59d69b5581c4279d73d109af34196dd6424ce81dd3e68d98a4ab07a706c5d0d08d8507dc1a9181e7e9f867bfc56ee6d1cb7e32e4b9a74de40ceb675e98876596747cb25402ee1d7b957130428bf70e02fa4adbc25e455c9b7cb0c0a4ac4cb751018408025f61ab87828ef100104c9d4d523e2d6c369e3d0bd25d2f1f3c18cba35b482f9e32f6c5f5b8d11fe5b59bb40263a1aac6c45c9a0f07dbfe221409a386b03711fb317edfc3a6702c307ff035eb485c7ad29a2e7df0f0e129fb3d1a59154c164896eb741c627daa4c958897ab860b969456796e9c3185e5d1d55019bcce21f609b58e4950635837bacf76c02e7a427ef2eb3952ca563978001258e420ab603601d3f4bdcde27454325d9de1602fad21c4df95b30ec827f9f15c461251f82362d7231a4c0903937e1efb8063680a2de64b77b6e4dc0be880b091eb437b962078f144e2f2e84efb602fbfa8146cb819c5c34c1cc35584992c56586b3c146d27de89a1cecf66082b8b1a9e52738b3042915144e614832faa69b5a549749f2a60dcde95ab851019f504037a9362e6bc522c7ae72d7808723f8d5fa7d453d4930d38fd5c42a0f63d17ab908b3115a617cb057fed69af6edc9dbabe12da98c379fe75b8bb12e1d292ed22708f10110b8583f53759014c8468681dee8882ba8355fc8d2519b61defaa065a031bba01f695c72588467f3ccb32a089f1b9e2ef50ef92a9aea27ba028058c7e389b4b6dd3d109c827d7771e64000267304d9075fb552c61a527d4608fc91ec87602caa7731f2ca8036b6e8c27504270ecd309b639fec63860fd4a913461eed05c700cbacf648b7bde403f6611ca3adcceae53ed055b434ab7af83f22fe625ff6fd5bb56be0188ea97bce96a82e379bc646946349a92c2f42e9084d465a887f4b216fb576509d133844cb9a929c8e972c3dd0fcf0c0d7eceb762bd9e8c7174cfc05a7d83f5c311c6fae3c3cc54edf5084cc8fe12b34b196bed581179d8ddf6e24753b1de6137592e9b4aa34f4d19e104523f88b66a6f67375bc3c9d25fba5f7c2cb03c17c29f98e043dbb4794dc5d4352d9bc12ac1baf90ae4f3dc2f2503182200e68a5c5f6593898cae49aa80ef35b87150d922e665583869562dd61aec16d579c689cc02f1b0b511bd507e869b2902f5c8260bd783aad5bf659907992b9b3d4b1c9a79027969112b35bb30583a539942ae70ea1cbfc6a1ddbc1042c888634277fe2d260019b7b2d2303c55569e6310b3547b98a6e535fce26c344767b53c1e12dc022023fd5a5236d30ebefe8c7b25760fad60c325384010c8a188a7fe48d3af43ad9737df237e3e970e0982c391f458058f354ea9dad4e089f83ad1722b28f0cb1a465a443ca2a9350172d38c919a975c3b174cae8c5f2f43852a9589892578f122eeb02acf112ceb5aa63e058e1cf6b9ba9840a9bd9118bd04178ca06e688b4307da14d76d1a67679365beb35d800fd02f73ead9357c2446bafec606d4e7b57f334e2f12ddf6af322fa1676d25dc6a04aa0da50d1de12def527fe73fbd42bdd17a12c850003f236c4ae3a1e5a4efeaa384b142d8d06e7085483af9343b256754b4b5d442c6dde70c74c606e772b6f25aff7fdaf155256f34be054deb4a48740af710000bbc6b79c628443cbbcf2035f6ad1e9db946011b0b9f8752b0d2ad1e5cab288ed79827ec3193e8847a17686460a0dfbad5cbb868f586b0b2a3b25453677766d32dcfe886a1a64908ebaea4bda1832f01aad657349f59a66cd23c9c8315f4ef008eef9f81c658dfc7e416fd2af0e5583684367c5c08e194f1b87b3a66a9a30af84453bf64f2ee5d9acb596f7f956dd44fd2bd9c93bb28d5a1a4baf42ad59ac473172aa83b0a0d881d12a029f5dc1389ddf50126ec0d6e7a29e71a497660e889ac8c0a193678d1b5b41d973c75ef6014652ec481ba50e0997055f9db557ff5d48b74fc62e10b1269b221fa21174e617c6f317e044c8c7c8fd115504831e579d348174aaed6730ec38024e753a4c8ced2aa222bac40886fc7c30818d3b92b56c5055805ab79c05be53fa4ee116a4059bacab0af8ac8de5c30ea0b519e7a0c732966ec0a7859f49e6986ca35f82555b057e77aac3bfa9d8be60fc59409b642fbc6fedb94a9ab2945fd4c87b12503c6b396d65074e34c29903d7905ad472199109a3a0d148e3ce2889f1dc5e40cad0aebfa1d56470a403ad1af23bb471fbcb3c2d208cc21bd6130260c38a4870ae1114bfa4b89e8ca79160da31824e1f2b603d248b26ba74135c07daa40c1826a87a3f462f845d70cfd406e2e7ceee0d4a5a7c7942ae6d4ca997b2a8bc91c00ea5e56c5d46b8ab06f44cb2c9088221c5dc3e2447ba55cb824387121c2f013f756ff08e8a4d6ee785cc5e8d902355adc26eab1b3573bf3ffbe4aebb7e4960f48b6019b0808b6224ae70ae2b843fc787ac2bd8dd297b35c4ab055f8399fb1f1dca36d6e23e4e622e8e558fc2e4ab23c8e5ff06867ac72bc6a9944866c9f934d277d3e3746c1b28ae49649ecb9e80ae7f32b399658ceb3179f25154fb8e413e1354aafa43d83ac3221317e1e05e5a4ba3c3ff8a2f06183e2da45a2fcfb668d2624c63ab15166deee1fcf052cfabead1a059937ac665871aaa65a28f07d91c0ae4c032c803e563eae9436a3bedfbc9fccc13a491c2e5629b1cab195a7062103220dad0fd45a33269842d65e4d68a8e04186a58eab3e19721e4349dd74e1a5bc264bce2adffdbbaef135214e9815117014889dfda36750cdcdeb295e31a53a4d0af83b9d8c45e718859e4333eb63326a2de15fb38317638e18731859e04b4410585dbc9edcf22e685c76e96bb522fabc87537b8c3a0e1b14e3b682e2d40c681ae22c84606a929e7cbd015e8ca74fd66b93186dff915adef2e774bd99f6266532d7596c944d5b78347151802006b049afc698ea7394b04b79bc61fc5b31917d8f8542157274ac69556fd24d7fa940787e41140408e50e1a26df4b9d2290fe9f7d8d2c69488ba50b788e2026381523417e41f316e15291b62110627029b1d588911b9f32d7360fa32e1fe0ae0354898b20250d185ac42cf7749e924ddc70c230b8a949e0f6efe2c0fa2208dd25c9f29d57d111b623121aeac48b38344be5121ba97c7ecaa29483615151a6693a102845e0b9e55b11ae3587c8b15a3bacceac7fd910cc5949c55b3bed876fc50a9ad4fa45d114cb730b012ca490b9cb62e640394a3f925279d759b2b81315dd7847e3c1b09a54af8c189308e6e2d2c00a3261641300c648ab033579dafdf9b66fc7f5e34b6011524c0fbd040275932b3f067ce322f1d285bb8fe26ea0515f94d11c73dd94036567a7afd0f5b47391c53a1ef47f21920ce6d680e0935f37080412f425a370a9c71c631e5ee0a98af6fbf519a00977ff2211d77db1e04fcbbdc5af721bcb435817dfecbd861ef7c50158d82acb7a42853940d8115aa234c041e4785596247b27b549b2e4c79d17da87d3182d16d428f17806d63a5f4a87534e02ad3a4d8d7c15ba9425880a37ec987513b2c216eece8febacf554c972b66bdff1880bc3ae3262e4530dc9cb2df4690a9280c9454900900feee4ea19612f52d3f66781f72a3534aefc1bbad320e2054b10c03aecae7d68cc767a032f1acfdf76320a796b2842db7675bdecbf7b37e4eb8bb3778b29a2a0f0238437bd6c0b82875c3261dbdd45114ff9bd01562503bd9832ca38e0f3fdc53c8f629071d21941d921250cb2d2388109aabaeac04ae0a893fcb2b840b5a3e55460e08b40200cafe2d00cd3892025a15d7914fb243de80e44acb8c1c4dd1c7a7de825381ff3b2393c44f03ba96168e1f061c72e404e463f7db98c085ddf347a9ca9831b3082e06ed9ef5aba4e62fe6d9900b290836acae265b5945b7084240e5e4dfbdfab7828794fb53a3ae1eae7b4c383d6d465ccf50fb8405e2cafa1ee1ee5572ed83ad77e8c32fb81f083e459454b3e6afc9acf75d35983fba17e5a3893e037fc3bb93a8020a240412794862ead78462142650a2899121aaa343037708381d685c5da6eed9681027bbec56cbb9b75defee364d4f4f9c889569e601d634c1b2befe62b10531b5b7ec6956044ddd69d7ce7c2b8019b4e0adf5db36e05b7a9920fc00c3470d6c4ad6947f52662d1488df3e404563cc054d85f76d9a65c8f259d4c73576c150d38ecc85c70a0e252b595843bc5663bc241fe504fc8cb4e078a5337071f3df1b6070a3f012c8ccb52375c96760124aac0900ae7aaf3254de8412da8461c838838b91397c814dd0281e4a6f1f1dd4de3d707a39edb5f297f69d0bd1646d7b078df5ec9ebcecb178daf0a862b78a1ace6b11555f7bed6321b19ce58a4667aae4be894e5eba30d469db7f64e162f814d7d80ed00d73fdb3949fe42a6d0d69e70c18f7db67c097a23c735821d4c9b0e9ca0520678b47282a70d548888906b8f01f3cb8069f07fdff8cf21b24e5e42df82ef9cfef3f9c69832c786c87f52a36954a8533f41b3a7c62fafa661f8360c8aa7d07fa3c43383c30a20bb1b366c978afec8d6e791b34c568b37e4e0c566ff9390952e281b23f2063689f8ff06195bc3c3d3aa7f57023aebc47e621230e0003e7dcac69e261271550261eb07f7d756c47b79a5da7d703e85c630280b71e733bc8bedf8127cedcc5bd7c31d358fdb860fa3870df8c31e2e0df5d2511356029f792fb065b48bf7ee7828cae1234ebac626887fb6f82bdc02aac226f25b88a3616fd22683b0d5ffa1cb95d6085faff98716147f35786c952db88efdaff0bf1015595ababd050a5342ce400b03fb9c12c7bb23d1ad1fb6cd74360216c6d15375dbd3a3351007ab2400db25f834ba6752ce1479e212443f3d9ba989d15e489960f83b987fd80d3cc89750fd90ca7b3cfc27471f7e38734fb82d1638a8415716c6987ed6941494939cb3e2ec0e88617c26fb1e21d7c87bee813751ae6ef765a7fcc301f23cd3f3ad8a87e736ea47db70a1f631438c8fab066768cfee2b69ba3c5c477eca90ca55ff8f5a21a36c3c6813d284811ec0f082806147e5ef62414491848c25fe43fe9fb771fa42396bf624a85f7a4bc9de2320adaa6a41cede35f36d399f950687fda0ef80624d7a915ca3aa4f9b07c31efc0c1a2cf9f4aabb375a890b858c5fea67e7e01e9cbc3bcca0af0ae42f9137ecc010d49a2b0a0c014afb76e8b78edbc650e04e50ee78beefd9934e0733abd9c2df7d8ee43130b45ad4385a3def1a84fe04ee125c264f11cf421ff7b0e34309623e46bdd8e6708e10791791ff3d870799e3231c22d1044f6acd57a82e8b157c4d141ff1045fa8ed4a4ab0b3d2c7989ed0e6e2fa16778efd5653d8bcc409d674c9539d082d68ec3b2468310d66653df64e9999bda139d9385211bdbd0267d8e6545850d2df607f47a8726aa2f9491b12684ec24aebec843e49d2f7edc1adabad99c0aa1f6af141c3836b1eec524f08f30d1bcf5f8f75e225371e7153f8e3a4bbbbe9dbc6b5571f4759e24bd4084c41b987a177a1b756457065b8c38c0e48606e8ca9b91051e28b7541a788f1820a3437d888b2250b2bf773ea0789d21fe7175ff603c29604e04007dfffad7549200b98bde0809a34ebadd5b61a85df34d12b80eee0f1c3aa0de0e3feb8631001e9e6673461b0e0e8484f90ef50d0bf3f97d42da04d58edf88ad918fdd6bbe4b94fcf7d95f34dfe4a76fe073af76d2f1f3c358a7e7c2b70571094d4a56a352a3a53829ba5dcb4401f0489c4be5104c2f94ef686e857cd84afc1f8defd79672f8df4434f55af9d1813b6e9e510a8a0d46665794a6dff67e8aade3880cfe36e99a3387428e4dc5c8037cf483dc6bf9a56e298a104a51ba0cb0827f9116f868dfccc262d9ad10ce8e26aeeccdc1cf8560814630491caf460c0edc6c36961d6381ac906a5cea972fdd9eb9ac7144b38af39455131864e208f9309b89e7f69d84e2c3a47340ccdc56ef9e9f5c156919b6f56429c41d652e2f17f039a12d11ebfb5e0719bc906a1f4530e99250e8c2d9f490df4f91ccdb2ca1ed0f2a0ee547deebecb2bc5031dc8d78f315f5f579870fc44b9e4ccb3b8055468009434d700d952138f01320205f8c370757bcb338b27e6a6b4d07dbf459fa29013f67ecd0e75450cd52493d5799691c6503d2046a2ea24ec061eea37d54bcb82245c881f96d527c9a64fd7cac0ef6e87d10f34f1c39bbceb7c9be3c8a5d862c6a548012fc4ced81ee0b17651fd29d25d4f0491cc4e1649ea5f63089703cd86602a4b75894fe5285cc59e54edfd6403d0fa10ec727fb38fc57a28104c6365b05a5beae220b47e3a1c6518812bac76488786b2d2af641c5fc5297a5963daadb628f46e4982de2b5a769ad28cccb3df845ea573622ffd8cdbb656fbe439e6c94ad60bfd2c472b20e91b133e8a26c222e65de226556932c195fb61926add60ed33cc9a5336970d506960cbec88893b624bf20204d3bdf224cf6e1327a98155245dfd6d405336a01c17d654733d5ab3f1bb7e4342e8923cb909d5df21ce630e1603aadebb2082d9afdd70795d9301dc07f0f991455e36752657f25302fca4ff547257092f109b4a207ad32653d5c273f3b740b347b1cbf2c302e30612ecef8b8f2a94f1188379a5f514e921804f6d2378a7a5bbad8b3e12263f030961ce6a9785db1fe2ff960fef796bad70101416cb3d9202eb57365ee3a1bfa3f5024bf3d62b7feff5e82cbe0e0bfd0808f4d4dcfbab8237e541f8da59cf99e324bc3eaebf236132830c80324f64fbc655f0dbff86cad40323cd1c3439b1df014baef56807e0e24b242112715b2e27ff5a54ef79fe169f7e2f2e616ad138b2e06e4681080697f76668d3b71639d4bf11b21ffcecc509f8a6a195dc3cbe5b0a5e6ceb4580f4a4259c47b5f13da7239250edd68c35f982f5b5af2c463b8892f0c8d499896e7f8307b75b27b7d87a7875d16640ffde727d34e580815f351ebf16e99568729878e74ae83de92ea50b5fc31a18440b3be822b7bfeff0310fec5cb570f8875313c4604eb28d7026a0e97459aaef060086d98a6ee2fdf34ae8f533f0e98e950284cbd7d9b1604c7a6f2d5ff44bf46f41d6d3c6f71ba2220830abd642e9a74d2d831c1775e881cde01d62a96c06e9fddf14a3fd749a0dc9801365acb02f0a799aec61428225ec20a9e73997c839d8cdc363a69bf25bbf14fa68f3ade945a48375348315484797b1275ce3bcf1cf92ad993361234c45dbd2260f4fde12db4b33db7de8595d6285d87189eefcd08de10dd5bc850fa6f7b88cc85cd386e1c4d9e562ab5c630c6d86f01a1e2f2d091a0a7e07f8970f24abdbb8acb0fa71512901ceeb1ecde83b6ce527baa24388e1dc380b02cc0c93dc22fa03d655c262a4b09bd402f46399171fc2558a3aefef3792e9076c1b0342c0801616b1f641f9fd9ce9d56264027f2301438639b0e74313357be2739560f048e2ac5d4888976e9b7edf9c07e167ab4e7957c3b39492b9ee10653db38409987ae120c29e3e2ce52c3d2c7ea58fa68d11a03db298e46c353489b0ceb9fc5074046690cc7f34b553a42060fa12e19960aa09b8ce3da030b652b136930d0c0e93c26521643ce93e4c3af878c7c40cdfec6d309acdf49ffe196be469731ab8dcd702e62ed6fed29eab8f66130d5bf630b80b7249dec690dbb0c51f7434bd75c11aa903c58b09d11c44467753302709af0dceecc8c701aebb653fc327f66eb564888f81fd139320a27523420beb1c60cc541d995fe052ffdf14f11667027ffb5fe0c46ad4f30f8893e8a32636b6313ec98fd2f19f262f13ad839647e3f49ecaf65ce10c69e80752d18a7fdc751d4d3eacc56c73eb078b80e98c1f3c215db8c10ef0e2b81db7b6326a2b7fd356a9e0eb0a6b5fd868648e08976de8c43f37f614043f64d81acf907c19f6035964d8a1f77c337c3723d88d0c631853d3a86f05df7f55665c3330d84dd0828d88129e17d8aa40bb494b8d5a0f3c17c4d19c11c6566cb5d0a87337a657662796526661da396bbef7abb225f11eca6236cc3f18c47162ba5005d8451367372567a4c16df34613d03b891fae62d64021bdc6b15bab309c6c984b8be4e83e49a07439b2cfbc1108c63653b8578e986cd9108d26d845619993e0e2c24dc292ac20e53a9123b0d1bd180559300c8cc0d2355a3d17545cf5fe1e56c15c01d1fc44d067a89b6a59a1cfcf0ef2567241bd2d00c71bcb38138a4b45545bd36f0c997609fc85877c5d84d65dc3d4bac24e581ca9f613f56255f7b0639085308a5695b88e144886bc7e7c503c69d1f977863ce2557097d28be36650d25af4c4005d1bd3365f3ba9cf8103e65be4e86a624aca68624b4dce5b312f291de5df77511f6babc36631c76f19bd09faa179ca9e7da2f2f68d981792150f027bbe01733ae05a61597bc570db52bcd149966d690428517c6add8fa8e68841bce3945f2c07f3503d083723ee36ecd73a1c729e7cba84290701352147ebbe1b82bf5f34c4d6057615d73547890e7cf51f96dae7a9ac8bf0a40f8480488a2e946d9f2130d8f805b4b29299020029f79d9ac324275709f4046526be8fb379fbe9e948106eedba19a86d692f9b46ab10c8b90b6dcd3563d132a10c8c1912a26b402f374d3e35cb12d0a0dbd2f7fe2e08edcf0237ac530806b4399a50200c5f0706e09a1ea7b0885acf54caeeae3ca5cc23ded78a8316910add2401f24e4b3be625bad3cbd145214b1399678b8ea3117028023e0a53c6cdaca72b2a22ea4ead5a87b7fa8e1c6b7bec0d2bb1544df143172925768a806c56778fbdf4e93b833cf3307332cdc9eb2e194c91d93d9f9c97f5488d160e4edfb36fc6dca2be6e799553045f28cccdc139a8a11a995fff7715310c70d5b7e58bb46829838ddf7ac1b6bccfd392f220c4cfd0d90237fd68da4c36561cae2d0dde1e0618225dc7ccb2833eae7b937857277d11f2cf05d78bc29ee2c8e314cf313718b4eea092b437f0568d6180e7169e11cfad5217131c1c7cbc37da447c8dcf08a06082aca5251ab9f33a0ff62d28337bef4fc3c012690f0d6b05db065892fb24c224393673af83a30ac630bce4aef3df4546548aef67d09d2ff4d4f839b111e6c1184fa587d6411dda9ac3d731405f0acdaf6fa0e9f74f381e2b81e8527600fbe783cafaf9c79a4cfa647c3f7c983e2e06f155bd78819ddbfb30c4b5a194d655e8d4a41cf426a7aea59f8e3487cde2eebb2965ef8439199bcad3a681497c75769cfea464b19bb4c3b182e6721e5d375ce4165fda92fac5615bf610bd8870eb3002f7a356f28ff361d6fc4dbb7d2f430b195e0960d93eeafdc1e74a9f4cfea3748e07d70c90cffe5d6df5da9e5827bc7477ecfdb1a91b20d9bf187907646bdaab59e442bd7455cf2ca4cb79722a5abe344a2740612c2b285b74325b6a1ad8593ad19d266c8a36a236e04813c6cea3a135bf8fd3399c66b82530e149b470d91f0a93bbf8bf815e86c3950aed0c2bef52aff9ac16fc4174be595c767489c2dba7400ee1e81875aec76e94ab0c2221d4528824219ebac7c4ce15fe3a09d8f7ba8cf55edeb8b08bc99a9497b4f38797edc5a397cea3ba19e3baaf317e61d80ee3ce2e53bca09253ff6a3ad2d60e4c312d4cb1a5483664033b376c8b7f1f7f83bef921687f92e969126e1755444ed37e359be5ac79ea0d88b8f7ebc384490c9e47a06e3c83b68c5d00a17bf4894fca0edbcc177a818386e357e6de8748ed30755d83f789edf7155a0df5646d44ab3324009c2fe8284fcc24e32a4411c720294fe7cf872c598dc7b0bfb5e0fb0d8438bc6c5ba097b218ed1ab6b611d9b971e8b99b3eef3d9924e89e1878ca97d40caf4617569e08a230357ffa68c67154c62c201ba42e33b896884e88636c11d3851d93bcf280c90ab52b8cf4b3674fdadbf6bff0d49b331587ad43efe13d59f0ab20f101ffc36676c3fdefcb500b1ed02464be3303a6a8bd88ab588bb139469e53d0298bdc436c82cc86cfdee884c8686ab2d01283d8f7f529136ba145a61f78eaeea67ae1e419696f52682c04c385f6bd9015eea6447c59deea94d86ef8f60e20a3ce7e811f357ab6a6885ce565ef8cfbdb1a1cc5f2c9f0175f568e8c2b09c14a4c411002245860036df25e0e2fadd8576a2143b694fef465e0501c033adfb62cdad5b343fe36d1811675a969de9d3782436581d6cd8a89da2e9a59efd53ee8df57a62d581ce403e5a63f7e36806e1f2f0506675737653b6d4e96795811cc51c0778a277193dc4f67a06486ba6f8336ae0f7eff51cb6bc78a84ee440ce8e9ce04f6c7b72f8643296bfa408e753f96a64042889d78ebffbce226f31fdda9890a0cfdc0daf67b7e57df05876db1071c8fadd115078d1a1066451067f36033236142b292ea068c9d4d1842905e597f37c17b33fd9c4fa29b8214fdc243aad59dd210fbc22346c83124546088b3ca08d7b574f4cb0e608a272043bc54172e8e4c5d1f9d77d29f705159c74f0037b7ca6588431e9ac856eee8dd7f3a4171e8811127365d61eefa970d7b8de8945df83d496b81afaefa4ef18817cde13749357ebf4dce359c7a75382cd1a103e6ee189eaa17da8fe07e9c07505e4da023e4c46b40f3360b0a4900330333333333333333333332bf59ff17bdab9911e0f43a4289092e4ae8864253e9d77daf01769c35f44e2f9b663094b103110010ff7c49471373f051a68e073fcf62905e94852a8740834cec048dee49ea0de9185a41938ed499ddd83cedc792b03933f46dd959964a946063e88f038eb476bd2cec6c049fe3842b98e4585101a62e0739caa31440f3d1791461838cda1759483b5456e0b1850f5d6d2b4f412add71c4a73e687b92fb016247fe5ff69eaa0452f70561531f4a45a2649c5c82a0aa0d105269ebd07153f7a73c88891b5870663cc2002a51d40830bfc4bdd4fe69c24c6fa6c81f36842ba14dff7526a686881cf156b42e3e5786d521a59e072bc8ee9513f648e2d88055ea472a2d6875d81df9e8eea2e243d5acb0a5c4edbe558df6bb5bd2a30923a3f3c4d21d7688a061538a9287def1ee84bf0694c81cb1f670e2f76f78a78a534a4c0efb746c7962fc7e83e8d28309592e4871cd875c78e0614f8207914415b72482a590d98a0860c683c81f58cbe501ec51c529a6819683881cbe951a40effce6c730c349ac045def2fea4717214e21a051a4c60731839f658a5de6fb6b151e3055ba3ce682c81cb1b19b572a43a91221a4a302d259b98856cb15424557ad6a8ebb757132149602553b465e59fac7a0c1894f182198c11831a3028a306b1315ce0821bc30516a08104b6cd55e3e4282639f328a071043e878c1eb48557be6a0da06104cebdb6e26793ae102f348ac0af07b59f5a21b1f2f5061a446053be56c63b4b9f39dad8d8d8d81a55956ba03104a62be710d1ad3253ec6908e16c91ac60a2ae5621555489663174e091afe5894610d894b13377b6edc7f588410308dc88c77a6fc9b2a5af88918512500d98a0c618347e50847229cb90d4ea2a1629426dcc9c9cc643d9051a3e60dcd423875a485fe4f8a217ec58da58b4714b1fffbc604353aeeb980355b5f18b5df0d144ff3bb9ab0bf62ecd7ab7f7d3889a0bba4bb3526464b308352fc9711c6e1b792d7a830b7e343f4d5c229855cac6c6d9d080096a8cf1c52df8683fc69ecaf669390e5bf095d382eb47deb298530bae72c8a1c4e491379f87165ce53789c894d9fd9d59b0298ee669cde9515e47165c4eb00fa9fbc43ef463c17405f5bd9ea899290f0bd63ff0eb2868ea8dd0bf8231df90577a7557f0696f297d103947bde956b0adfdb1b33efcf778b3822b4f5fef9efc432b7b159c788c11f2751c424c695530622b5175e94d05973448a5f638e6c86317156cc87d6b2175e468b73d05579971d3a2e6a0ef5153706b97ff7a43b4146c85944315cd1852ea4852f09e96b4033d7d8f2b390aa6c646ea2d3ff61c92a26023eadd6b8530147c9d76eea79cf7af5340c1597adae7bc1ba2c47c8253f11062a19248dc3dc1b7f54de95a8eb3aaa413dca9d55aafe7cd390727d8f4b431fd73de867f9b602aaf2559ce619ae037858869eff64c309ad9525cf16b350f26d8609adff7c9e3f0f512fc24dff030dbfd678878f08525b80ef3eb55dae4b1924725b8906ce5221e9460b2c4d72fc91e4bb56312fc07e192344eec9cae43125c8a39e50ec93c3cc74f24f8dcf8db1943a68df7810417c733a6ae18c5ce721ec187df3984e0631d72ee3882d5581f7d7ca37e39f61bc1a57c413cc42469a9c3308215ab8f8ab71ec729c72c82f7e8ca6ab921e3e68d22f80badf2c92caa1f6b12c147e8d3cc49b2fa8d0611fc678994b223837b901f8297eec951f63849481f6d08d6cc2b5855fa8ddf5d083eee47fb1d76d01cec26049b3c9d5574e4f697d283607264dd518be6403ad782e0f26e45c7a6413dc63a10dcefab448e1dbe6bba8060ccde839c39f6f8d2dc3fb06a5131ba59e55171fdc0bd25f31c6e78a0fe917de063fb97ad84d0f6b8e403a39176bc562c761c967b6077facef323e299877a605b733f47217daee82979606b4259580c1eb8f3fb8e0c0fe93a2f776052e7287e93d71d8e67073e69f66a7548759f3af0e1be8d644e3cf30f1d780f41f26f799787ff1c58ed8e3f453c7b743539b066eabb77da41928ee2c0558e4777520e3c7a0f6d6c6c6c10257c010726871eb6c4cad14296fec51b981c497bc85cba1ddd74c325592d22859248123dcd3adfbba7048b4955a236f081f9e60fdea6a9548740181108e3016170000361109cc1176ce036ffe247d59df4c1176be0a28b75ac106953cafc0b35f01b993c27f3abcc184f03eb1634b4647af471284143165582e50ef5aa2439dc57527f48d0aac8589fc10a1d8487d6b3187321f8c20c6ceecc163785bef04ad91865c460bf2803bf1aa34a47d559c3eb2564e0a31cdf3c5987db7b8e311c69923c92ab467473c95faf7eae6f8d2fc4c08654b01c79148f4cc1303099abff6139ca786601031f4142a7f2dcacaf912ff093af11275ada8d5a79813f3bcb9abaad8207d9d8a8aa5179f8a20b7c34e5d145a77b4c2117811a25872fb8c08717bdff22855437211b1b1b1b0a003b7cb105d63ae8d882848888a7f1063dc6185dce1830302ef8420b5b7fbed46521659031010f846177822fb2c0679d349bf4aea8f46381dffd0fb615b76d42ca15ece989d7a1af4545c50a9646a860d96d6d59252942ccba57297ffad0ba2faac087ff194adac6c5dc2fa8c0460fd39a283921e6fcc6c6d6282a626cf8620a6c47d2ca5ba1e3e9582a030622d8d83865c080061b1b991a30418d187c210536492ecffef690982f5f4481ebaecd1a2939884aa12fa040ee88edaa16c2d272a490a22a9447cf1eed27f58b27f01d44cd31068d14fd2131b2363636366000820d417ce1042e74921c6b1adb4f8f37810fbdbbd7ef30455099c0a48f1e3df958ae067b09ec8418bab692a33ce10b25b05e92111e068d3412b3b1b1b1a135aa905198f04512b80ef2e5f29c9af73f1b1b6590a182166c6c10277c81047e37e9c5686522f5d21747e023b4494f8a8e9e59fac2084c8ad1736feee8ad939c14bce0b4a0052d86295504d66264cf1a2af765778891456a025f10818fbdcf93c49c254e4e20a0a24ac01743e02f273acc93b89573b286aad50716510326a8a15f0881cf1c6686b82eae173431b2ee8b20f0e9ecaac377e96c33e00b20b0af152d2787a718effbe2078c4721d6e4b969bc102246aa20065de33460821a1b5ff860fdd82a8d485eaa600b8ed28b3df0d0551d913d2980410bae67f082dc662975c65fafc5c84a010c307066ec226d8d4ce9b2a826261d2229de84aeff1c7ae5a4200530c0400c60a0818d8d14c0a00537461931d04591c4924a881e11521a1eaa3efe48437d18528e185931a8a1980b2e846f1e4bb1ef2d3b189481300041162e18e9c9517f21ee792131b2de05301863026398710b763db859a4750d315a1f90c0c6c6c6466d61862df8d3103b267f5dfd6bb4a0b55ae0fd811bb4e0011b1be7052a388eded8d8d8c0622c00001166d482cb3fffca9039dde45206649009d80366d06216aa4529e948a219d1cc4d8386897e9cb7c39c912cd88cb593fa1e7d5aed58d486c2a2365ec185108ff24b7ecdf974056f154dca3ff77fd8be1859686394118319ada80d63051732b2271bc9275a1eabe045dbea7e4248e11d5570c1e38bb935f4c4cf9e54709f22e7c61c58486b2d2ad8287ebd1fe4088d6d9e82c9714abe26921baa29f8db4ebbf992eb81574ac107d963db8d1f5eeeed48c1b54b784ddd48b858a360db2dbe75e7c0fd4f2246168a825db5c9eb67b707668482c931dbcfce2e55f68818593028a306195a3e03146cc7dcc13394e4a91c072a78c17e823dfd8e08f78e2f45e6093e4c29e728d13b0fab61596836a0aa514585c558403ac1f8af5db579791ce4d0143083134ccc71b4971b296aa7498cac1af418302883eaecf9310e193b63135cbd6d7e092ac9a6dcd41a8584199ae0ddf2760a39b674dce021a3c5e040d6a81bccc804132dfc3fa4d7a36307134c0aabb42d8f3f52a497e0f3dda8d98666cafc2dc15da8764a0f3bc4c9b195d0245959081524755594bca0251a223b4b09b6f3c64aa1991afbc3a24d983109b6a5c30a0b69121e93046f3a1d7858da7134df921a30410d31664482ade415630831a3a4cca1356640826949e61ed53c9a452e0604f611dc5ad6a5b3cdb16a536264a999230a5142a5a45995452ccab3527c3ad4b427da8a9135060cc618831bc1844694bc5d9617b2b1b1b1810685198c60b27696de98bff2c576117c904c577dcaa397788661862238bb9c91952d76e07de32682af948e65f9b7624e16447059296e04edf0bf626ac62158ed48a3354ec68a9c1982d7f3a4df1e92445bab105cda49e4bf0e9eb12642f0914493488effd7e1c70e82f7a8738a741f955488a82038f11191cecfc8c1b31b1b1b5435ca90a1021710c435cc0804e3ea5adf195f2c26dbf60a3300c14e477feb633164774da730e30f6c7a4909bb96a8f739c8e8164460a930c30f7c85d08eb6eeb0a47f326ed01cd8d8a851da0726d685b00c397b602af1814b1f9e859ff9e4a883670c12060828607b503524b5235aa40896b2527f69e407a9735aba8891950215f855193388c10b2c605535c60c3db05db9b3b5b667b3dcf3c0e64afa38c61e4ddd0a1ed8de9cb19255456fed0e5c87377aa1d6beae2163f40c28b0b1e183197668daa3901193e7ce61d180096abc60461d6ee94a2982848a65470cabf4398e7c9122e6a6ccb931ca8881994107562a8b755d6574cee40c0c0533e6c07b9c99ded2e1468f837260829667b4751c7ed05171603d8f4551bf1c3d7e6bc02fe1c0079a6298d6e68d493b31b26a20061e00810d608002883581196f60526aaaca29ea07f1324e0a482919e9067268a56c1e39a272a66468c80e3df66e9790ee196d603fd6b69c3da70faa270bd4a82b0d98a0060f66b0818fb443c44b8f611ee74030630d9c8f7e94e25658cc08ff052ab8c00866a8818d132a1e985d85caeec606160d98a0460866a4818ffe77c94ae37176518c2c1ca38c18cc40839aed65dd16b9324a5d4cebd26688186ac522821967e0a3a8d38de699627e6e065e4b353ffaffd0a153065662c893236e774a122103d7b1461f0f2db6448fcd18031b623186da5821adba6264c1e078c18601020a6819c20c31701fb4456e8d5e795aca1c324a04c2000106c2d0a2aa615450460c54d082161c12cc0803eb714e93bc4c3ac5f6c1c09b468aa0659a391cf70b7c14ead1670eea83c89d17f8dccfa97218daed535582195de02a8739e344b888c63c17f8bd1c55713a78a764cdd8825129457496584694abb855875977ddadc5bcc00c2df061a6d89a2c48fe60e92c3029cd4d2dfee57c1e2946820003619091f52d50c10cbc48600616f8da2bcf49b24f060f22e40afcc6945692bdd42e3d428815b88e1e3978102a495448aac05b8bde8bb7f65469845081891551528eb3650f3b3305f652b2b19f3839f7076da8064c50830633a4c0e4c815d348ecdd8fdc0dc628e305fc01a2861951e06e7dcf3f65debff60956d528c2861950e0e32cf5ee89faef172df08118cce08f04fec460067f3ecf0c339ec0874193e594f2e592546e6c94613a062e2025cc7002f7a9d32177497bab765f98d104b6554b72f7e487955902c20c26f04144cb93464eef77395ac28c25f0f1c75b675f71f34e574a041a81194a6033c7b0bc8cef69838f1a30418d9f91045662aaaaeef6ff52f3612086ba610612382ff50d953cb9a36a2a88c103acd030e308bce5b768e9ddd7e9716c94a2418d2a4583330213d1af32ae75aeed78810ac4a87170a00232b6861466148109fdddf9517e9024a23a600611b8e013f6817dea9d6ec8036144200cea40181cc0401808002ecc18021f87a429c71edc4ed316831b80606ba81666088171d50f5a72e4d861f245b0b151a86a54926146109894304b1e6b3bf3ba3002fa67d1ce66d28291c8398c413b67abe42c780bf95672fe4e264959b0395e9ae01de6a0ae8c059b3983e86553dd2861c156c695e88e57b01e265d0fb4cef67705fb1962be0e66e3716c05db793e69db753b4456b0659a27e5f4c934c72ad8b2d897b552f37b54c1a79872d8e41cf3f754f096f1bcd2acd5f3820a3ea6ff0871cbb17ee5148c44fbab9ca9d5a34dc1856e0d0f5c2c7a9a94828f396306d58eba13420a3e6ae52e0fdd519951f081075ec1c4bf3e79a26027dbe3b7a8a93779a16042fee9db8a288b83828f1ed9233c573bff0413db42dc0bbad3ae2718939083c5d4b459ed0497d5f1c7891a27b84d11730e2c99eb669b6033fe76e05d6982df0f235ba8786c51592638cffb74d921c3047739561717f5c83eb24bb829a2f54ece5196c8bd2d4dccc1a312fc75f8ab390e456c725082cfaabf6ef963cbce99041f7d54fb71e6448a47127c5c51a67bdf61073991e07ca543f238079bea4082c9dde1d15d8e1fe4ff083e2587e9c47adca277049772ec318847b1b3c41bc17ebcb9e3f7daf49d3382d5f620215be838ec7b11ac5d4adf574821a4ad08d673cc514ce9463aa513c19bf8fae41cf273d588603d33f405b1548fef2118cb2bb34c2166f51a820d9596bca31ce9782178ffb4395fe767af84e03c6d4eb0ef8b3675107ca499299d831ca4101504a7b9b93b4787664a03c1c6cc51ac4754f75240b07e973e5f8ade1bca3f702b15733be8c8f0f003ffa179e820c4e8eef481cd711c22636e47c9463ef019ebe30a379536710fdc6a250f82e4c03d827ae02bb6a48f37329787796082e730d886984334050f5c0879f247cdf13a57eec0471ef4a4096e953f881d984e39b4cb0a9efc2775e0ba6248883cb394217460537b253a732a343207fe7db36bda49fa614e0efc655734ffac51ba8b03a7ed1a69e3b9e4e9e0c075ee86b0cd923eff062eee74103c8867c13537b0131d62a6715292581b180f63cacd2ce6a93336b0e5318e7ea09a83cad6c0c791c31c761d21f96ae0ff5f7298d2b98374a5818fc8cb9e3352a52c347057111deb66e59fd419989ca392aabd374eca0c6ccca9cccd99e3dc2903bf1e3d3f0711457232b0a9bf6bc74fbd5aaa31f01f327fd746ca714a2506ee723fe4204b523aa9c2c0588eeba23fd97ba402031b1eaf7e7cfa29aec717b8b4f9b3e97845881c5e607376ad69741c963abac047be7992f56bea3b5ce0c3d51072c8514ffabf057e7208d21f99bd685e0b6c4bfcd30e6274cc7e16d8c80d313bf6f813792c701e07aa1e7594e2a15760472c04ab94d1dbb40217b2a53275e6d02fa60a6ca69ceb4d3db6dd0c15782f1391909f6e333305f6fe6e42b97ff0ca4881bffed6cc21b3f2e351e0a4e3fb8fd284fe280e05f6edb35f738cd2883f814f3974c494f726759cc0871635739a5f7ddd0476d36be6a61859b34ce0e368e355c8f1275397c098ef8d9f8ffb445a09eca51043475a96c3af93c0c4ade49ad34907b9460297355bca51d588497d04b623afedf8bbe35cae11583d0dd7eb8d1253b6087cbcd9e3eda7e5ad96084c7f925aab0d79a21d02ffbfaf371a3fec0f21389691e32006818fe3c5b79437baf740e0248877ec16ba9ff2033e48770a661a526b01f0019bfdeff2b669fe487bc1e7e8e3ee0da2d9392fb890a04957fac31cbd0bfeb38434d6139ad705d77194d9cac3ea2b73c168bee051e575e052e282f7f20fc54ab3aae316fc8450399d75a81fb6e035a6348f9b6c42bc167ca7b09ea8d5d96d5ab039d0cd792224573b0b36996b78c594faa92cb89a1ceb85a44697c482edd0dfec3205891ac282cbb29d6c9a3e1ee7157cf8e87598fc73e4bb828bfbb924674ecf602b38db28d50cd92e66ace02bcd744b4724466515ec5e66eeade8e86354c1c7e579a2a2c95234157cdfe65023dc7c4a820ad6edbe3f48f7959f537053494b4f638672cf145cae1ce4c9bc68ed948289b512b572f4e96f52f0b1a34d9e92e3d8e62838ff2c9d7da73aa488828b109d39a46fe464a160c4c3df1ce9e7180705ebfa57a59f1db5f30926d56dcc75ad5d1a4f30b62b91bd11a9f14eb09139cc19b3c7ab2327d809669e39799c63496d82afc98d209afd7f4d705a9a3f77d4cd6c2698cae5edf12be5fa98e04c53a460d771b24d04c625d8e9f68e23f2e62d89c0b004db22f97fb5a963864e09605482c931d3525c2fcd0d3e25d89ad4f0d4f5d21ac749f039f98ae7b0e320d54b24c145951e0d51ed2711a92680110976f2b647e93fa7b6ac4382ef38478f4de6ab05f7118cae85966075fb1eef8ee003c9528f3f1c1bc1be6bbfe5cbd48bfe61041fc71d27f148937b85e82218eb8e24f7520875ff15c1751e3dabcc7b89d871063012c1a57a0f327aea44b38e47808108563b4aa9af94e491791c82cf9fb3c6defc8b18f1620876237e592c2bd3ff142d041bfef1e8b9476f4ad706d228000621d8d7982475a7778daf11232b07c1796976a474a5cf981623eb8c1103ab304040813068008620d8bee9cf1af1f6ef6831b26a9c61d98037369e004620d8d8716a58fb9547538701020a6c6c90c10218c0400c238001083e6bb6fa4a5a39544cf9031f7654c91fefa6f08ff981f117eb683d58c88debf581efe852c71da5d3a43b1f580d4d1afa515bd490438cac1a662f08c1c6c6ef81bb9cce2baf8f6eb01c62a4046400861ed86dbde41ed47ab8394e4300230fdc27bb1ca694cdbcdc27238d0b60e081f7bff48f5b2468f9bbb141d400c61df8a8397d0cdee6f799aa25c0b003962f5bcc1db68798f43d805107c663b26c298344741c4260d0819bac48fa795f3921a400630edc759c43bfc9b1e418626264e10ec090031f07df0bb61e73960806301883e4008c38f0ad922669598d5fe96264dd608c32e0c0795beab8c35be37e6c2902186f683f8a943753d607ba81d18997a3dd88a74162dac047e9618c9c94839c29c806c6eddac389115352770d4c921062ad44ea1d330559651c0aa8064c5003004100430ddcbfdd65bd1ccc93bf06e0021869e053dc8e2d55c7b1c76d6c78fbf1f602f0020c34f0b69a6ea93fc791f32d46d6d612c038036fb1c7b377d8d1dea78891655700c30c7c941b3ad0d4ba1b2515060828108130b0580536364c042a88c103c6704106c670810b2e0b609481b3f678ea1abd22a7bc1859859c08541083071045804106d6f244d3cd1cc7ed612e469616119441060c2a40060cc4a8a1821834195100630c8cf6df67f28888361531b24a6d6c6c6c1cf3820cdca00c1594b1b1b1b1414604c20883037f64e00121d8d88840187633f83e15d8d8d8d8d8d84011b4c09cdfd8880119698023802186bb3eb69caafa3e2646d6182aa851952000230cacc761da28f952948ea5e8000c30f0492c567d9ef43dcfbec0f5fd4f88214acee4e311c0f002ef7194e24787b1a30b561820a04018e6011108e305c7055e667083314040c30d60748149f6d1c42c1d87fc8e22461619c40a6070818d59967a1f8ea4d83b185be062908af46c5ba2b9d40217aa5ab7f34cb78320185960bd63a7c6aefd07606081abfaf032658977e039c0b8021b72e284e6bffd5002c30a7cbef6d190a35899994255e0274b5b65a8800c15d060c3000105ca5001192a10418d1a1b1bbfb121811a680830a8c05bbce8d1f143faa04b31920c2080310526ab47fccc5b51a23962649151a3063d069905c09002b76e9a3cf5a2e6b4d602c08802fb1e7a44eefe5072889f0bb4e0a0c06ed408bd29cfed2e0bd4a0c0c6c66ac004356e00c613f88f52113b5e11fffba4e09cc0c51c66bc5af1e8e3d81423abc7383380c10d6a004613f84866b9a36e95cca589915523062e3057317041043870690083097ca7c9c9aef7d437826264556df4008c25f0ef29645a757674a1a2023094c05477f4ede7a2dd625a0b5a05658cd11cd8d888810b108c24b07add3e1ede3eea123090c0862c390aabffe83498476063fa38b0607e9f2949140c23b0395393957694058c2270199631db9587c5046010819fa4a5ad95437e4ab1010c20b0b1f1c7063070cb2134414d3b553c9d9ec4c8222b004308f994d7f6c7ba5152bfb1519d002308e777ef74e754b66830f88d8d8d8d0d5a9bc1093080607938a6f14b4cf28d8d8d30404081304a8d51460c008009307ef026af5cfa8167768c82e103f2e6e497b336fc72f4c2ca69592f3d2ccff0c2cbedd67ed9533be22e7a89b993597a6841cc1a6a478dffa652418f0182bb030d5d94c673564f4d8cac303e6710860b542006191b3408c373066110c9c5da99112b248d16d1f5380795a1aa3266e0821a2d68411b2d63061978c1044a0768e082c98efce259166babc92dd8d2bfed905aa2d95d1b1be7373668d8820992f15bf76ed32e550ba652c4547d919f26850c18c440035635ea3460821a1fa0410b3662dba50e633d0bdee3681e27fb8b1272109205677b77b59552a8e82a16bcdad7848cd7f73978e080062cf8702473b68b9d5473381956afe02e9877b42a5a1fe7942bd8360b5eb1323a4be62d6841531268b4828f10a3e5e620da81c524c03458c1b4b5dbbb6dc7973f5e8c0c03041408e348e056c1df6f4e264143e5b07f1aaae03afcd0f16fa2471d98a9e0a463f33bcbbb13df50c1c64bfbe97f221ef277be461a1963cc2002649c326e00011aa760428e1bd9b73f95cb9fc10b6898c29c831c5688ceb1792019344a514c492925cb22493417eb4aafe016f3c71f88a4301aa3609365670cebbc71cb210aeeb39b2791989a13fc50f0ee4188216eb953da028a2c6874ba254929da91cd3352c75e71fdd255f4092ee4284f7f2f7298e3d83b4fb07f315b4c965a2547e95d186874828bae1ed629794e1e62c609a6fa473fe58d128bfe26b814f69eb1c32b73746a82ff6cda9b163fbacd5f2678dfca488fcaf2826698e024e62093e55beaf04e59028d4b709df343f3e7cf4a316b092e57881ff65fc84a41a75109265d82e4f59e976b9894e034279564eaca5339dc88c624f8203564f1979ced3a87185948c629a33150041a9260728584b859736e841d09c6b3a654e7597a27b83420c1e4203784c5d81f4fca79049bed530e53688cd09c3b824b4bef9b358f9a77aa115cfa8f6db7f3438c2c31c898410cb68c19c4a08c196c0019c1e4b8c314db55b3aae33416c1e6e0512be6fe8598dbc6c651d5a8ab83030d4570a9421cc91e77f6d0311b1bfa051a896043c71f871e63270fd2bfb16134d8d8301a5835810622b84dfaff61742c8bec21b8e0717c52f76511238721b89059f3935804fb3c6b542158d1d89fe38cfd71a987105c7dd25cbb79663f9a41f09ba7d3c7f96204c1796666091ec4dc5af336107cd0fcd0426693c388800736368e4003106f8b6b7e6021fd47e61ff83f8967b13a7b5caafb813da96421577efad8dd075ed532ef5d508fc3900f7c5c4f1e7b4988529dee018d98a2d1124285b985d4e8bcbe6eaf29c40e0d3d70db1dcc42aefc1b6de781891c7fd3144d2b22e18153931ca61b8dbe94531b1b687760328a44ced8a1fd68c60e9ce5889891a3cae469ac039ff4562abb6efa1a37f01a3450c19782000d3a30d19fbeeac792c75605631c326a8c018316dca0cba8516c0eac460aa5f6d9eb71d434e4c0e616adb857371e7b4e1cf8c852fd8667ae9bd4c2a12049ca5342a8ac6cc92fc78ed2b6d4f6063e62bfbfe6d1cb36961bf8c914d5c8d4c80f510f68b4815151d5fa502b8638f909d06003ef6e9aa3f44d1f3f47171168ac81af9c52745e8ddd715f1b6ae0e39c31887b9985f2fcc6c6c6c6d628b5028d34f01373ca09d805f001bfc1726465273b4d6902f482fbf83e97e5304d31a509c00b6eb37969a965176ceee4e6894aeb82eb209da40c1e7dd090ce056b952c76da74146bd2b8e0a3e5b2983937ae47fa167ca07f1bad5e532fd2b6e0c3bc8865d782959026679b2ca9c5a3053b594ffc22d47467164c88145137595eff65c17fa59e889f9ee31b0bbec3d871d66aab060b4ecfcf363d144f9157b09d238fd4a1246f64ae6042b6a05174b388df0a362cf3473bd13e0a59c1c77b6b9deed73454abe0bc2ba262a889f4a10abe3f96587e143c2e53c1ebe438674963661a352ab88b79792af24698a7e0c65282757c5193789882f598f2c77a31d9454bc1e94964fde0e178c821051bd29b4a62f2e9f85170bf2956caf2ec18140593a4dc52acce1f5342c1e4e48e24e441c174d29822f9092ec472b3541a4ff02791398c9c77828b397e20f903ab09694eb01b82bd9a787d8eeb4db019b277a45c6b82899b3d07ed172c7b6c2698a831063b91641fbb98e0b5ef5cf237f2be7b09b63ec5b57a8b7bc9b5049fa129f32a8be76c2bc14ebcce5a1ad3071aa5041b9da33fe9daa65627c1f4e6641524ac36a49260fccdadd7ede3d06624783dcbd9a2c6943a4a428237ddcef125f908eed4b4b2794e993fd0115c0ee191a257aaa3b111ec86a5c90ef7a8153282cb13a1bfa7963e5216c1affd76ac6aa1bd238a60b753aa84c825820db7cba903adf8924304ab318594af7607217708d673760f358b4ececd104c852cdd1a53e48a6c0bc1e8787c298db584606a2ac6d6edfc51a676107c0eb2554eb163c765ad2078ffe8c3cfd91ec5606d20d81077c5a3d41575aa0504f7d99356488e249bb47f60a344bb2c2ad9bf39fcc0844bb6e4fdd10736c7b9b9fe41a7f5e0032bbe7f2e493a1ecd1ed897d8e351f3efaf0736fda34fac8914953c706beb572d794f277860a37be8316367c8b17307be2fa7c81d1df5453b70b12623db7398b97d1d989c77b2a392fa1c74602db3a6667747fa9803231124e56b530d8d910353371d954f8f03a7395868640e07fe3c3d4f7589a61cfd06be423d768896fcbe7603d7ba5629f9dd0646625b45b3698d58b381cf96a333e9eb1ca25e03635652be297ee40f3530f5a59fb9f91d7aa4810fdd359dc31c3a7a2c1ab89f98d4c3de3330de29c903a96d0f5d33f0713fa7ecae1a1da70c9cef7b8829ad64605aaa62c7f531b4a963e0d53cc689292a06a6a7e207cded774fc3c079da983754bc354d3070a779a1839c32e62dbfc0a59c52b17b244f2abdc04dd65011a2e5741f5de02a56dea40fe4027b9aed6fb7f7e31cdc02ffa15cb3e6905a7cd402bb1dc1420ec42cb0e9437d07be5d35412cf09ab9a6a390b3bf04afc0f874bc3b92f51b422bb09e3cf78fa73469c22ab0a71d332c6aa6140b153897c8cf981a517d3205364296c6ddf58e1a22053e7a3bda787fd371a25160a2e3e8dbefdbc142140a9c6d4aa932e4a8ca73fa04364dee0be239818ff224ebbce671bc6b021b424d2c84799433c604b63d881fa7dd2c8fb525b031a5d879b22ec7a02981c995a6e395e86ef1d224f06799f36712adea4a91c0f4c608a9b3c3b718d22330b9827b548d314735a911180fb2c7a123d6b79216810f3af2b1ee682a7d1c44e063f0ed389fe4fcfa310426c779edfb2c781c3a0410023bb126f6afc4e8ce1320086c8c79d99176a0a53d0180c06ee826d188f8d96108f0037eed3a5e079ef17243001fb0b12ae80729a7d534bde07e3d2fbba6aaeb79c15ec550e3b93f7aeebb606def4a7c4c3cb7ae0bb6222ff4b54d75a0e782ab4f9d199d263de8b860533a4e3152505fcf6fc184985cca73181562db82d5541fa46bfed03eb6165cbd8b5eec585a706513aabaf7d33f66c16565c9e551aee49c2c58ffd0927b1cf5b162c1e43cd1bcf23d8d14165c9e1423a494e5005ec1591c89953aef6e923900577057d767619ab2a33207d08af5bf831c578eace034a57acbbe1e438babe0a2550c12cfa20aa6726dea64d7d24b4905db164357bc90b95e4105a3e68188d96775ac9c82b5cbcda6f98147513105175a123274ac1f764829b89e4c898ca9271d210597af3f34d7894e1319059317f3d652fe30f31305d367d9a1e69cacc60b053be167f9e378e3a1060abe3ff26825477610b24ff0618eb586ee38b4a73cc15404b518ecea04d391786d97eaad599c603a5f688ee38b1423b509f67b24660e5de25aa509b6a3145531fa48852a33c1eb56fce8703b9b871213bc7ff2903da939e39497e06212df0b9aa3b821a525f0d01e6525d8c9499be92379f6a00437eddefe9e8358fb24b83b6bad9ffa8d5a125c7f1027ea7dd7a891e0a398dd49d30312fcd69e87ba8aec96e3116c4e5759fffda2b4c311bc87312bcae33482899d63bdbc0b12721c46b0923d8ea3c7e11afa5904db71f4122cf557ba1c45f0217960412b4f72ea2482a9b89ba3c9ebb4d520824ffd91a6f41de44bcc21f86c89636d9f9b1a37045755d69e72fce06b1782ab142923354a9c5c1382c98bd6f1b4467ad683603b2a6257748af96a41b09a9f8334963de8d581602c25ff0ca176f6b180e063f7a41473f01c7ef60f4c8867292b7358e4ac1f98dcee761d0d66d2f681a9ff14152a7a455a3eb01eda58aae57045d53db0651eb4d4a317ed540f4c2aade974691e789b0e2c639ee01e291ef8949bcec53fee5af20e4cd48769f735b7426907d634fad57992b41c75e0fef533073979b63c1d98fc9b24738e93973e072ee8e5fdcd98f71eca818ff78278c5300e7c3c9efefe7110fb2e70e03bcee0f1063648f4286367c8b30aba817789296df288314305dbc0c796d399655709f5900d9c66ebf03c4ce33979b806563b27dd8e31598ec3500dac96986a9ebc9453c334b06569a7171a1a986ce6414f861c796667e037640fa22ba1679919f8307718ecdf635ec9cac0c71d897ee5b2d77c9181b74a9fd9e3f4e66e8d81cf712421ba5ea5db120393b394fd7594ca422a0cac68e61ed11c7fcc0a0cbc47eb61499876e87f81fb8fb207e1f9f2e65ee03b2b3bb4cc3a7c09bbc0a5b869474dc2f225e40217d3c4eed8c3ec4a116e818f3f1933b776bc8a500b7cc5da1e0fa121548459e0c3ceae8cebd729736081091551752b163aca7105de538e43c892de9d0e2b30f1e3eeb856f2eb4f15388f3fca11f69226e65081cd996f1f9b87f6963305466b4ab3fe635ded4881ddb65825a2c1eff351e03fbb876ce392cbf250e0234279278f9eb28779021f6f244dba9e9caf7102d35752ede17efe8e3781898ca93c0e19253b9a099c56cef7d5facba897c0a4c80ec1fecc3247096cab871c43ed56ba37097cab851c6e1a9aea45023f6eeea1835412913d02176a9d1e7d397bb746e043d7182d879a3c445b042e69c8714647bd6a2a11f89c6ff71739d4e773088c448999d43e4889c9010881fd50543b7b76c9901c4010d8535ffd9083b6c5710040e02db679a448d8a471003fe063520ba976d3ecc301f8800bba1751246ffa0fd20bde32779c58d1b253c20b463a0593a0162a7976c1a758519355d0ea485df05194a6cddf5e1abc5cb09e273d4c19d563f170c18e073ad691b9b7bb5bb051d5a11172f453670b36b7c53fbcaed482cb2a92b3786aca88155af0bf933992977ec75165168ce79e74f8595be25464c15ac8cbdf51b68c199558b0ad12257c73c082330f11c53d737d1ce7157cbc7ecdd08fcbf2e30aee436e0fc2727aa54f2b988e1fe75c751b2d1e56f0e1640dc9ccc3298f5f051f7adbab0797a839af0aee73dc9cfe0911fb4f051f56fe74d495266b1e156ca49945eab632d79c820f75696d732c62a531057f5695620c1afd717829d874f5d8a34d09a9765290e3382afd888e824b55b7ccd6fc3814059bf45527424c964342c1f4a40fa286dcdbcf41c1f49a7f8f8fb54efe092ef9da567bf9a66c7b824f3ee11ef27eb4b53bc1e6e8f414dbc562bf9c603f47cc5a8b314e7037c1e55ee6a6a996bcd1046f5122e7ee9a185fcd049fed5f2f4467ca9a6282aface8dcda91871d790976377a3db28f3b86a425b8fd8b39db637bff6025d88ef6bfae2edb5d9012dcbdd9c6ecaddc3993606232f7cfd197d25f24c1b4e4c8d771bc1aa712093e886892e3feef5012487092efc3d7be28e13f82f3bebc932bf22fe30846f3dee338aecdee36824b3988d0bb1e23f8dfe875d16a2d67b708367b495e799822380ff9ddee1e65ce27824d93fa5c6a29e61044b09bbbd351ea1869d52158fb8f4edb10314469d571488a112904e369952a85383d2e21d89c961e4224a64e8e41b0a213e3994df7871d82e0e3fb9d07d1a1c38e409c9b22f226092098f0f833f55d72f3ce1fd81c5d8650cdfb816fcda1a78e7e1f98ca1b62eeb154937c3e30f6b716b273fca063f6c0a798b22dc7589fc38d1ef88d57d277413b6b260f6ceee6b8e3b8e381bf8d123dc73be948bf033f29c48b139253a7dc0e9cc490561e86ed7e741dd889f71fe57a50f6371df8ca6114d31ca4adda73603aa5f68ea8d7115f39f025992e6667a470370e5cd254d135ffa411170ebcc6742f313c0cb1ec1bb8ba5c29fd2ea163d50d4cc6f81ee465de10a26d6092076952a6c829c6940d9cde7a983fa3a3cd916be023cf92a37d875a39a906de52ec28b26b9a1c9e69e026e448fb4e851ccf43032b95b2c3a0d217a37967e02c539aae081d87963c33b066e39aa31873442caf0c9cea86564fba6f493c32f041e652c9b159c814bc31701712cf73ae5fcd514e0cdc89ff75eed66b47b930f0e9cc227c3af2fc210706466dd383bc8a9232e4bec04fc8aef7a4917248ce0b9cc7a1e29f92cd62eebac04af6fdf724294a7dc70576f57f72aceafd21775b60f2762c71a4ee226ba70526daf7fbac2cf09a53a63a893f6e1916384dadb7e5315dc8b9029f3bfcefb45de68156e0730c16b67665495205bef63bae602975ea8a0aacfdbd789047fbf25360624ae530859ce3b65260cb73f8b97ac5758c02eb6d9583ce99a98602b71ddd458f26216b744fe0efbcd2836887d63881d7889903dbe9c9e5d1047e537d7eec543ded6102179d82a498c5c35f025fee23163757fa56094cceb288a8f66c258149561b224dd48e0a12d8b28fbe081d68747f04b622e78776d69b3946e0d3ae8715fdb3c37c11b8749f97d69b3dd6108189f02c518267ff7608dc5ddcc8a21d744e11027b97671337a79a9009027b6df635395baed081c0e7c9fe30e6b4007ec0a520f5d99b2e8ad502f0019762151aad9aafdf5e7095d69f5256c8109717bc47ff4842eeb415dc5d30519d921e52f08eb2ba60aa6f24be89d77e682e788d8eaab2a62c652b2e98ecc98385d4b9e3aab7e037c33cdbf22cc4d4167c4fa7ecd1e6b87fcf5a30f1241e4670dc2a5d043e8cead291460fa96a22301131b5a5eb4a1dd443603daa4ae3515d21f09319e1398c7d9eea06811df5fadd6ec953e72200084cce9d126e9336b48f801f30d137f6adf868ca1b04f880af919c2cbb4deeacf782c9619e14a21fa9a69a178c6edeebb24a962ddd057fa97bff76515db0f9a3c9949a2b574534175c7bfb478d22ea394c71c1bb985aa69ce92dd8094f9ebf25bfa7a4b660247b3dc70e7d4c23ad059fa6cf7f7214a37b50d382bf8e4ad344c71e5aa4b3e0a38d2a9ea1729cc34fca82f58ea9adc3201a3a3a63c15de6ef92aed8a776c28277bf493994e9ab27f3155c8e728839767748f939ae60520e77f42ac7a92399ad60cbde237de4ee7a29c90a56ba3f8448a1377d2a57c1e71ca5be28a15405e3b61e576d08d216ca54b01e6da8a9ce1f74e4810abe3dd3d9e6cf29ae7f0aceb743349d5e8a9237057f3bfa671d259ab4a5e052d358ce2a3df15652b0ba397b1835e646a8a3606b42d04c57e2c12b280a56cb93aedb9945b230145c8e43caea6b498358080af66ee2c7940e2125859f603bfccedde15f3cc16bf7f476868af1624a27984852f69633e4a465e10457d92ee6f4eef0b42c9be0837d9c1beb5234c1ebb8fec4f4507db592092e87e379c13bc8d03930c164b878548ff5277e5c8233c9f1bb4951ff7a4bf09b3b3dbba5b95d5f09b662a688799e59fc3e94e02da4d552329360e3448447c99a2ff996049b3f394cc12e877e6d24d89174e51d5f2a4b5148b02b5dbf63b7e9b3f908b62e8d7f18c2f2c5cf116cb4f13c4f398ec262a411dcdda40823f8380e3234a68cc871e616c1a4a66d268d2b82558d2942befb6c5513c1e62ccd71f4feb1e4484470f939a5504dab54f3109c68883192e7ab8f4443b096f386e4fc923ad51582ef38cc1c67cbd72ad511820b7edd295dc714e90c82c994cd3cde780ae91604e797432c104cda2d5d891ed584c400c1e71427348de70ffc258bec28720eab347ee02368e6cf24edeef13eb0995572c71f2f5fd4381fb88e19f524343f28b7f6c0fb5488a19f436f5a4b0f9ca5ed4de60b261d5979e0f623c79f2a2a7a280b0f5c284bea133bc68a48dd81711b8f728c943ddcadecc0a6aca11f67fb1ebbaa0e7cc8d16f90a89034e7890e5c4e4d48d7f47587cf81a9503166eabb87db7260624eaf9e249a4c3571e05a5244f030d65b04e1c04a886611a3a50f397c039b7c444b2d85dcc0b6f485fa2eb3ec618e36701a39886ac4f44a123670e117d1327a8e11ae81b5907218199375484e0d4cce71b67fa591300d7ceaca71e534b942060dec6768fe8590b3ba2231b25e705a600e0d6a6c4de000676034a5bd4d8d9272c70c6cb8f7beb82431bf0c7c4fec8a9f34d5c69081e91cd67e14d1a9fb31063ea8d3cad7996a7b31b01972583ac9b9969f3070d2f9732cd1fe7b30307133a4569407e1f9021f6ffa76b2ac20792fb031ef685e7e0edaee02fb51865f9e4829840bfcc698f951f55b602b748c581d460b7c849c59f2ddf2654c16b8d718638e8e3a46d660818bc8f4133a6adedeafc06ed65881a96d09a94752c56815f8a834c9b4b5ba3ba702e376f7ff365e914e81d7dc21e7a60f8f925260df739caed2e51c865160ef3edb448d7ab1d250e0e376cd10838b9afe04cea35b0e742db88b4ee0f58386f9c6da94b6098c644aaf9f72bff34ce0bf2a2d7fce1d25cd12d83ca9f28f5dfaa054029b36a5afbd47d524815bdf7fff9cde425091c0479bf1dd23f1e8398ec069b0f68c19ebed4c23f041d00bc9be99e216816f0bc9722574e51422b09f3f4c672d9d2e84436053d61c722015fb7245084cce98723ca9e3d0db20b0975ae2af871c00085c882e751e77982f2507f801d39b3c5afb2b4f8f3b800fb8d1faefa0bfc300bd602fb6c7cc29378f78870178c1d5e4c8318e5b8cb13b0cb00b765483a6bc1e4287ee30802eb8d469297858396f8e1d06c80563f1e350dd443a3ced30002ef810faebbf62b7e0534aab495bdf2962b6d03b78c56099d5828d1a9239e5a022e5450b26556d0cf57f1db6350bce63caa371333b4aea90059b3a4c317fb1e0e3e8f3ff26cff5a982052baeffe9e9e398fd0a36a528cdb917db5c57f0b5ad9d9347ab35690597d643f4841c73d258c1741053b6acaec92d3a56c1dda64ee7d4dfee51051f3c680e42fe380648052ff15b43ff570edfe3180015fcee27df00a760e27d10766191b939c700a6e026e97aaa14995b738e014ac1ad276bd3d2645d9f6300521c075e4933e547c1759c1e3d33e958fe45c144f5bcfdfc97a27e28b8bb4e912e3df5a60f0afec3570b0f43d48bfe13dce4150be6613cc1e41ca3e4f477183ca6136c77bcd19037e7dc184ef0a19a92eee468426e36c18490f21dcb35c1ef87bfdbe7af8e3299606d2f730571959c6382a90c397718c9efd37e0936b32e7a1ce3f66f6e09b6edffe3984c62f65482f73c2904cbebcf9e12dc0756512c87b4cd4c82c90f59cf9206cfae24b8601fef7ded48301ebe69fcd37f4f1b129cc5348f03ad1fc165288f3d8839d4aada11dc847d7bd8a1deed6d04979b9e37a464294d96115c87b5be1d4af5fab908ee2279d8a12615c1e6907247b929a55cc944f0615fbdd122a584242218bf8bb6313dfc737908eebd634ba6e0f71134046357ef393dff03b314828f3786342d413d300921f820b47322998468de20b8feda24a9a2a9bb1304d717dc7ba2831c5a7702c1e6bb4f1fc95977ba03086e62e5d97ff4af713b7fe072d884e72babd0d9f103dfff92c9d53efeb74e1f588f63a84f661d3eb01fdde5fefdb749a9b3077ea4a205c98cce161d3df0bb1539f0d4bf0ea29307d6a26d472d2dbdcd8107fef2e31c9ec7f7921c77e0cffe24e4f250cb1c3bf0122dc48e1a2b52fa75e0c53b735a2f3fb09e0eec997aca10fd1cd8cfb1e74a1de75897031fe66b85e5c83d67e2c0779cca18ec6b7c87036fb5c9c30c212dbb6fe053c769912ae63832ddc05e8a9b6ab503bdcab48149e9cf23d3fe96071bf88e58766639887e0daca61d4b5f69bd4a570313e377ce61ae5dd6d2c04928b7b10df553a1818992aa0e519f818db4ed388eae19d83eabf50e51fd915b06bec34c69e7692c5d4b063e637be69493db73e8189830abad14ea9a3b540cdcc5f18cefd69e1f0d037fb7e2818aa98ea46060d376983aae0e83f9f90526f74308f5d0728ad20bbcc40eaa92b506efc02ef095af3507aeb997825ce032ef682a8fca97c32db03951312d654a15422df0d1b575cc8d9d31c22cf081d487973d050b8c558847a9995a39e50a4c7a64d6fd673f59b1023be5665d113587a85481fb1cc4bc3197881c4205be7c920651cd2529640a4c9d485859c60f39f752e0a335c7a4d645813b3ff5f0b4cd4e1b14d8cc9bd25f70f18d790267e7df717565ed502770dad97c2fd66ea709bca5767e7654f7554ce0e3f175e9389964ca1298ac9c31fb790e3b47af042ebd6df6c7e8817524812b1bf10e32340012784921751c6b25edcb618023f0d641df69af664d87018cc09947b9639fd6f1388e018ac0755e8e834899b7c7630022f039d2f45b0fa777720c30043e7d7772c8193fbd630021f07937dd15e59edd314010d8ca314eb7b887371d0300810d9e15e2719ce378f306f8017f912362ce903107be017cc0c50f4b1ebb6596f7bde0e35451d772fc2149cf0b2e337b1ce7afde90c3ec8237cf81e4f851e8a835bae053464a69a53daed3e482abdd888ec31bdf89c10517377ac8903a78cc995bf07e399c8e93755fcad882cb93b45f531d5bf45af09ff3c73c7a9d52745af01edf390b5eba3e4821a72c915c16acd9f969eaf85173742cf84d3147d1c3538ea761c1649eb28bce3cdaf72bd8be7cd19cdeb19876059f4933630eb6d16ab782bfcca16e7994759666051733bd6d3f65588e5d051b394a8ec8618ef9b3aae02d456b0c412a527c53c1a4368dfc6c79425251c148e86cdf93f8514e4fc1a754464f71d74c4953709a6f92c7b79a3a92a560a5f2e69cf18394bf24051b4a57af1f051faa876ff9e314630c8a82cdddadfb31ec3f130ac6b737f5470e6697020a567d53d77ef6e708f9041b9ea5729424d9fd9e60f34e0e15aff246ad13fc7ee5ac3d2e1da538c1f4b7db4b5ee84db709b6637bad8bdb93a309d6b44f4255e4dc31135ce520badb44458a0c134c8cd93e7dcae8f1b8049fd5e2b58a947558823193bcfabab1e3bc128cc49883c4afe0775382ff3cc12b7ff2b88293e0e390c395ecb8352b25093e6affcd0c21b5f948b0af493c5d4b2546c84082dbff78c17df4023ce2fcebb18e60c4367fbb63f30f3c8d60625acacc99e2153c8c60dd37dff7c713c5f38be062ca5e1dead64ff38a603d8a12a37b9477433e116cd4b20f434cd929f78860334eb4b5b2cf349a43f09fe3fe2cba7e51620cc16765cd0fbba394670a81c71b3cda0c213815b3cde952ca96cc20383597ee28eff50f417039bbee6b8d772a03c1eae6e82f67b4e42120f88e5243ac6cdf61e57fe0b7326fdb93f76bda0f6cadc7491f84c50b6e1ff8089f1811b4736cf9c07a500db103750f7cf8a61b52a67ae06debe3bbd70ccdc93c70399a8d4749f2839778e06f235d9be6d8299677e0e394dbf6d2e2d79476e04edbe35c1da7690ed681afc8c156fb52472948072664ea541bf5724a700efc74ccdb39aba6ac500ebc7fbc29e520a5958471e044c33258a4c081e9b70b153943f45879037bf1ac2268d68d49e20646aa62baf4e4071e6903eb9ebf2c04b18e52c4d9c04d74f3489b4dda73be06be345e67667b089a733570bf1e47938715193f4f037b41da83998d77f01c0d5c5f660f3a4abd1acfcfc0667fd7b5ca4a229e9b818949dd2346284d1de665603353b060394aaf3727031fe4b28adf71f2d8e563e0dc524e96a3493e75b91898b4f6ac9bd2d45e7918f86c1d7710b9962f073918b81cda3cc614e2e59ffc0bfca5b81df787ad1758572ba9102abf4ac8bbc0db646d568664fb0f2eb01279d39991c5ca630b7c6848ef4a1139ba1c2df0398819d2d55b0c969305a6a37a85f86e97f4c7021f3bf4f412e268b57f054e74453bb22599f756603a7d14ddd2a3c5ecabc05f86cc1f8fbc2d7a2af0a17d9ca38d8e4a35660a9c764485862cbd9791023f2ea69744b26adea3c0e771ed10620e728c7128f0b9a37ceb90374a8c3fa169b70ee1b61398387137b847d28e6c02ff96b3a5dbe4182f6702db917ba61b8d36f95e02173ff2d89d13f2344ae0f3b7a6ee6fbc4d93c0f8a47493d7a663b848e0d6fec32af856ec8fc08e65fdb823fd286d23705adf922b7dfc6c11b875fd97901c54599408acc6d49a1c43ba8c0f81b50d59ad69760184c0c4fefc90e3df90c7ec0204810f3cc7faeb95bfe2d805000293d42a7ff7d7378d5d801f303177282126bb10a2018bd8a8e46ae42242e1e0c05030180a0381c06037be3593160000000c180d85d2340d34c176071400033b322c3e2420121c120c1810160e0c0c0c0c0608068482402018000604c240301818c493d1ba06de9514db58cd16dcfabd95d3eaddd28c5d84376ef3d1e3b9bcb6ac5e0f606e1fd8a2c511771fc97706f0c30c1d4a7cd1468d0b6a28d1c484c9b7712ddd33b6e90bebaf5ab25d45a468636ae64976f9c918e45043a3a2007a92372148d92eaeda4ce51305f8d8ae815e59ca75ebb6525958c1ef3d03b17ffc0cf14752b2d48e9078cdfa85dbe8c42065cddf8a2bbfd283a97105b1bb939b186c0f779bd66a81088618b1898a2a6ef49216dbb4b435a202bae2ee765c89d435591fc7ca987177cd038e50269cf55a4d3c0c2816fc1c0d9294b5ca28a8091379954c1eaf1cd07d64297ebceebb705facc3e881a20743fd8738538dc3c79dc13cb45ce6d0a05da635f6c96c224a70df5421956b07e60cf1847d456fe6eb9133ba61a38d1b7b638efb1a5f49f7b1a689fdd4a3870c87d28e0935b59e746b9011c280982aa54275246a4e532ace09d86ddf387874d2d98703eb2eeadc935737befbc08a435040372e1f6e3a41bef989d04913694e2c87840d719911ba192af553bd994d007abdf6f4f1c34350573e6c5092b7970f8fbabe72e5dc31bbe4214016a533090a441d499328134c5ed7d9530797b6bb1a2a208270d954440e1fb64c46026dc774845d2a7d5426bdba2b1fe5258a78edccd18147174edf3d7770e7cc0127a3e7a401215e7779e0d17d860b099ae2e038ed8e6dccc4b7c778647a7e5289e6834549244a34c184d023484f92c4299f7878eefae99bf36e1d1237c74a428502688abbf0e88443e76e4edd3d7b76fddcd36397cc3d5610bc217ecb62ce6326b042cb13467aa49bbb3c35c8d1b2358a358a1472cba756c41174152db13bbf7c7cf3c6a36737a71e3813d4e725fea23dac51d1e7387fca5e122a817e0930be64843670834f1d7077efe0bed393f78416903fee0d777cef712b09d2919c6cfa642745069504e924a7a17dcdc1324899122b3afceed9b3dba7cf9cbbece8dac98dbdabe0aef5b8c09972c708b67cd69025f14653422ab727126a4d9ce6f8c8938fbfa9aa1d94c1cf6cda5002192ad4d0491023eb324d8f633bcdf0e0ad540af9cda14cb3063a56b2798d255b4081f0844a5f182eeee529d920460339959c4d43339ec3ba305d7affc831d720064cf6ac72f7c491b7f7ae9f3eb877eab0d6578942b0be38be79e7f0facc8c09b9949d3b758e810ed1af77949969d1442ba10495c4ed6a68219498c53cae555165319b6da6f5274e9ce2559d24330c1b08218ff4fc12bfb5be35b5cbdd93c6f013b90c4bab836879a6051b23784e718107946bc5ff83c3dd7efff29a0d94582d2ecd6d37177d0751e71e47f1f1eb8b07dcbdbdaa4932e971f2ac5cfaacd1dd75c7ce5b4b341d0268153dbc940c92085049c63acd9dd387ee9c3e906366cc125dea3662a14e8c7f8a9e464774ce84829bfdb571b86c9ecd523d596f3bbc7becf6f535e78e5d9d7620673b7a059c81dfbd75de3cfa08c9dc329be859582584ac930066b488e5c4a2018b84f4f8fdd91e0bc2778b3a77e8e0f447876e4e9d3dbdecf8c5c3fbce4fdf9c7add8ee39bf7cdc51b4f5a61419a7fb008f0b56783d70a8c7ed249907f017e14d2489a32f9347e45ad0e4f1ef7d095a383f74e38be350f217ad491a44a76ad534777ce9d3cbbc6f9e5b93b470e2ca774e6fcca933b0737234c843632c91c5b8392fdd40d87ae9999016ed7410a59a448d4c933fc1957f3f7ce6f1cb9efeeaaa3937b270fee9199a359f73812b45437ce3abc76c264faf5a76e9cdf6b9274ef8cf14898681811adf62d7ea6b68f25ceeb9f01f4cc9b53141e36d721b351e369362223fd7943851141c889e369a6a7686d1a37ce6d66f35d48f2dcb55307b97102dc838594c7270edc7675d9d9c9b5b3e70e5c7f7a8d499a09134f9d442448a490247dc2f4274f964639470843f0898c60c34c680b7d54e5a08e5cb28b6ca02929f5a633860f1d12b40c4f48a7b8995da43f15fac74edd3b7ff3d0c1c519e7675d38f91a52fb67e20e419877c50006ec6c9d98ce3dc720c16546b8d070cc61449db3d3eab5b44516b350eb8d77615d1526ab9874b1315dd4617a3ab60895965b5ddcbebde7e8d4cdf9cfce2e39bb7b681ffaa4b7271d1fb78058dea95b27e72ecf3b71fae2b98b1336d29fba71de6cca8533f78ce1829028dde44a9dbbeee8c2d1cd9366f8a73c7b76f9f98563b62121c249ebf0ec1ac777cfee30c4fcb037497b9f067acc865ae1dc6c6ad26d5d3a35e898d0e225611b21129e3426d0b36590d910070a94fc6a522d1ae6d032cdf07755245480a199edb52a15c7582e4475e6396541fc6ad691165d377f13db231f847e3c0207ee8926e27d24b684f4315f3a5d40d3ac37d2312b0104e32d3048d731b75c9ed484da8179234c3a61901e616072f36f530b1a09fa97dc50940928afe39f14c728cd943eb19c77e70866e198c6a6e8f8e7048eddcbc22d038fc433a00e004c87884488627d3dc98f195e28bc96819c850a5560e5f605b53feb0f0e91ff9a1ac354e1f0453899253e1d9c085bf8e4aa8588c7bc0b98880d46d5d062097ff8d2e35e9dfdb53108545281bfac16e14ff86a1992ff4e17b5c574a798bd1ebce18611c7b452ed0c9a4a711026fcd1205e94067b1510907d0b7ee7a845fae81fcb7110b948db36c94c638205de06625225f4a8033b048aff6ec689590168f522513b8a4aa05984e91cf209013270abb2357ee3b79acb49304a6236acaff154e7cb8e39d9ccd6baa8f4b41744550373c14e8e932cc63cc42885f2398c12c0d870be215debd4a9ca16e6d74cb101360551ec482dee3481d412f033fc17ec8515e59117b4aac04bf8d33a7c4d6f007839def0d289145742f128013566654cdede54a23389289aa58667515da82854e195facda491db4fda1dbea95bc4113c15ae4c5136f86343dc1d7df81cba9c6d61e0a34ab68c0a376f485e988bc521b442cf4cfdba458a6cceba78abcccdccde708785375a6db61dc2e48773f08a1fe315ce6744a2ee1400b793b122e474970eb11d7e0098a37218a4f4312a6c12339f07891e10872e1779d0de3fd7fbcfe4145bcac9620c04bcf3295ceed13fa42de23231a18e732450148903a5ac0ebff0c08053fbea353893946e6b3cc4b8c33475120afa14b6f64241b8c90b65c84b44fe90e916204e2d979b3bafaa59a7c5df5d08309a7eaf86b02a2cfbf41f588d65139f8be5dbc3230d50831837d65b1dd49c91798eb2353c80aeb8e71087113589db0714215f1d1e67ee54c4dc8f6447a4d1f0d9ee8185e6a99e30b5e49397e7337c708a4d2c50945da25593ca99ab4758385608b67bddc087b47fa4c421a83606779ce39ed0e94ae91ccaca959063300f1fa4a7cba8a224803d915cdecbcc00b84515147029bfe6b7f5b023d8c20db56aa90678662cebed044083e9ba5f16d50c09e12ba91aac8d68b157a98a292e99d77432ed2302fa138e03dabdf5d00d4d465db9bfdc424b27cdffa014b80999137ee4770d4900ee4fdd0673b57f147f6f552ad4b87730780714812a0a1648edde55d2c1b7cfb9a29c7a70c66a141ea681eeaaedc7292d00a7f67137bf3e3d87ed06300ffc770652c9435eb72cb00b4380bd5c0eaec62da08df1f303278bb9a66c5cdc6476229f135f3cf337cb08041a6f3a8da2690603cfb49bfda52a4c4a60479ad9e258b81d034a5ee177c1983c819e78cc5e345749de13d79243ebe271c14a01be909d7d5bf75784c31205ece6c966a4dc0076a44070b31bcc72f1816e4857150615d7de68a3f420cb3e58a29840102e1671937e11da73885b89f6c5192f0473f75641da416d3e1b1a289c028a1b550d18cb391f30685c0622dc1671f6995205a861cec29afd6d49f02ec8c00688f4a178dbeb9b9568e4beeca50a946ead82dc59c3c52f8f6b59c9fd08ec991d6ab500bc2382aaa47272267fcd55266cd5a77accf28f220d9ef287003df79bd3cc32f0aae9d9f31bc35e69350a83ece6941669ea4346b07006ad90111d371ae9d2fa3fd204019987181c4bb89b020006668033f0b7777b58d01007c05f0420a48c2141c5183ab142b5f51c47a7873617c9df14901052872e5b19b6775b2b06f05fa7100e3e3c31e9f4a48be41acae6a451984f8c2c5100d0c1c372da0b4021007d923833585e6a8c1e9be263de024aa478320b002e978283d073dc58253602bf1252517b813e4da907e59e549dad232f3a1a4d395ef6bf975a0e83672c01f9b4615bb610b4752a9c441136a2f7d642140e69314ff6498e3a6bc77688e3f30e0d4ee5710fa61f61f6cf19388040ff91bda50666800c578f785fe4fd69087dfb1d50c44a8303529dee83a144cc668aa0ae5ab401407d94cafae342c013d32216c6b48882f70c5aa9a3713d132da8881ad539d5ff66d079d58c3d6381c1b0695aed9ee22b42350eb7f8e47ec501deff1cc0eda83b0c1e20291367e2a54effbbdb69df585a37d1df8590e32c3a6ce7e42286a940385c0ff0faf6d1e940eae5e53912eb9ee7c3584b44cc60f1930c9da0ee94e8333df7c7d105fa2b14a1f13d4822d69e9fc2b1440a1d2f21a3c01ee476a407de062e35ac139fdc76f682d9b7c265f7d4ea3785cf46d32e7aa3c5f0e20577ca0968a59914dbdbaa90ef29dcf6a82100abe8e7d17cc8799a0d6535a6d38844be2abb852900817bd451d0c2530a11de0e87d07b0ea35546aae4d269484f0d2bbbdbe73876c070a8a6cf7f89817b38876c9a95e054f5b0f4376e9611b7cc3d289ccd4660016c3b1466b567d1ca3393507b1deb075cba4588445942d676d283aefbe3c26bae958c08450f2496160f97b01fddfb8630fb333bc2fdba2e89d9d0c1e2d3f52f51c5f1f07ec550703d696594c6ef8065d8a516a645ea42da8e9d26b18efc41be48e19664cfac553b35ac1d22e8af9c0b37209ce73587b8f430da485c7a00d1a8e83a8a98189c342372cf6ed8c2cd542171e8aca047c606e4a63c4edefdc31105a50b52ce2d696007be80b60d0b87c39fcd57c0db799b52e536ddaeab45e20c7bd8c9c525bff5cb4b2d6699af31e538eac01adbc88420f892e7d24cb25cfbe65512331ec2ebd02f925981ba25a54ef72638c132425fa2aef98568de8c34ce362323b6b7dadbd123a26328f42a67ff3b34005962038c44a11602be0947cf0481c4d0f862a564fcd41fc6786a1c2f46aecd135a034c11539e5d8b5494c166ed4924bae9f025c3776a3709c55f094a2b753d01663dca1fd54384f02dcd2a687de216c828b4240a671e5ad2d154abfead23bd211cdb160d7c5b959b2e5bc549f355a96cc5b01b45c4ca204d0eeccb1b8fd95201b8bc4e0f10bada9e0ac25d6a2331fb31c7dbfd2d391ece50a05e397285d5b2b0d12646bee054c5d7b592181afd64cd5317987dcc110a0bca066f8b689c7b72e8ed9ecdbb56cb208dae4c4d43fe6c50045f13360f41f042de0cab7bc64df9158b8152b11560e2608ac216d9da582a30a31d48ec61e65be169053c8fb72a2f92a4cce0e2cbedae73ef35a9cf732893abbe5dddc6341b09a794e7660a2199a5ad5649e8c80d072972614865fde8c02eba4c2377b21e68161806c17333d41aec9ba4606fc2e2f4932d9a60e58c5265b674f12c1ddee63d3402e313215b370e58cc0044e4be9a1feb805e6f72742642803905accc01b8766116668073263cb82a21355e8908c06a798711d9ffc961b2d08f18c77699ed3363c474fecd9a81999af865745f896bddd8d1b0a2e9404113a84d04759739616118b420e841450496485907ebc9552896fb3a2ae1c9fa1b52b66813f39a37bf82d22e0bdd1561b2502238c7e69a6bb4fc482d021197fbf5a259a0d41b29c1c82b0b4e9e9185b84f65a50081bf436b541454b9de23e5736d6961d1ea008b6e71fd7ad4ed8476a481f038b275a3288eac375cde5026dd9309725a6f342bfc2fba982038a4ff8139ee0580f9ed0c3448a1ebde4b0f0fc2ea94ecd758faa4cef4e25468f1f9560181be89bc79fffb4bdca91242362eeb229e64d806da634909ca842bba29fe2b60e7318c97dcd058c36734dce8687094e060a5cdedb667b38d505521f45498eb7393055901276169b0382dd7e5a2c32a64e9bb6354c96c651466d8d714c22477b8ae057b1eb02f73ecf343acef7668e79638cdbe9afda34820116378c0842a6d378bf8c60c33fa5e13536abc895684ce9ebc1e775d8d41b8157c6261acab0725846d2e6d6c71b301f2a3bf213bf885b358074633a442b51516436a5ed64e4957437548e8f29f7e2e185395b84ab67ed1d93b99e38e6d10a11b99e752b7eb9c76ff799e6cffc121785e7271704b3006a112c15067694c193520295b7e926dd738ad353bc5f3396620b3b868e3024152114ec19d2a6bd99f2f620fb3fb91676ba448a0a48c7d4f45b9967a425e6d54fd571de3e71ac6581cf30e3e01c82c3c769fdaa122aa82477b6bf55ae10187504ebd262124152f1bedf84c4a8de2c9fe3c7c0a25c13bd1707a664f53b1ef8119199d275e8e132a06adb928119960150a245567a69ef11891400fd001a396296ce8c8bcf00ba09e7874dd4337904a99cb74ef2429ecce7120777584c36caf020b594929906f6615189b9b0ea7f1bc1d102870566049faeade8d901a27c1e81309809499b336c9cb91ada67bf9649117db321683af1608fced281c4ac0a39a887d4a426b82a008a374f7cd92a8f8fc9040ccda4eec63cd080f0e0c0f675c741ac8f29deec08fc9a7068296e5683cbad9c8cd48ae62fa0f88806d2a497871bf2d304aa3e8d586bb99cb468b37219868f4cdab06e40669930dfda328c5ba93e652a292be7043746772501d8011c7178a5f91005c57cdd71a20d7163162f768b13ce18a0ca97b5fc8edb7f4d48c9bf8492c3fa9d691b3e9edd24187491ad00b898857927b75f417489523997e3758dd3e329fdd581c851ef7dd4119af25126347184d704f31322d103e5f8c6ad316ff07e10639912417b365110f7d6b0ce6d8c136bc6700adda71893566c4a0c2ca84118b598bc581298f5517ce10f5d5b5cec7980f4c2c0c11d85b991d682e27154960b860ca61cc65d981bbb8a87e8ef98389815931c814cf868e480c239ab566c3a9299de5a6c92f3302862d34451cc20c3fe4748e65e36c26ae116ea582f7e40508d093838e2788486e499028d504d3428f9a2449a4273779e2d4224125411a12934d9feca4c8a09040aa18d13338c281ccd34b9ef7848d4e0a741a46877566ec49858597e9fccb0925afe82778940ef93cbb0304460ffa605fe7289512f5d509c0b6c291407c22689817b27e1bc2d4c61b427e0acd70e4a974445d9d4aad06dd05c414692fc8fad1ca1533e76cea8ff8fa4b84a669377d9db321fee05d310647e484cd4bd754098ff55ed8fcd8215c6ccd0fdcf94bf628a154da105ea710ea9ee2a3f34842df2d236a9ae0ee7eb7ab62382f852a2b765f34e33cb94e7ad00b5ca312abd7e0dedf35ed497f32469949167f22bb5aa1dd1e8ccb3660cb2b48d0d667d49bf309cf66d026b71c1ce1c635c840959a6a682338ba5b230db024637d7b5f74dee6d3f5101fd98caf0c256d5c5623804a0835c149624b5b589600cff67e4d561167ba5e3afb06ed46066501096e63e8d7b16e940f00618c51b2bfe61b566550ece5dd330ea8ee529ab85aa8a69f27cfbf31013c586e0b6dbea680a90003b7939b47f4761d36f67cbe922be9ba5481727ce0d5807b2776972ec71fd123f26db02a29aec1a15ddde7b4db0abb125d5eb8705e91cab02a6312a2c4806802a2324ac5bb693275a015d1862db9b7b623173c6760b34c38f8c5ca725532820710576525ff11a73b71008556082cb7bdccb59844155bb980a821c1e511bd3277de14108780eed5695861352dbd5deb0d45e4c40b445adff00120705d801d901301d88a28697bbb4f82bf158a02de10f0e8e3e9735c6c94df592f4613785eac5becd98b05fa0cf5e5b515b592949db22d7fa5014cf65a7fddc37f910672fe694efe4f5f6f341f9e3c0fa1fa793645ade3cf6c5deb5cedcbcae11470adc4c2363d2302c2eebfa5f7d343056b5a45f26547b93dd9e23682b575b55453f86c957f8efbdb0a187c50c26a4e62516557099805249c2609b662fb68512b3cf831dc212573904a14e238daa06c02a0a43a30136f6a6dcad205b8d40305b0b683127fa23f41aacf30643a763f9cba541990b6661bde4903870260ad6816f3f6211fdc761f26205a7045ce02ee9ef93a2ac0b56f4523fe15f9a41111b86fb0e9156cba4cd33005dea7f379bab0ef2083cdbda90925db4d43dd86db1fc5b4682405762066291a061948b36c2e7b806d8c6024058770999ad0379f2dec52a143b5ff144f1b37fb287943c48f4e8c5a94625ae48355649a803e7cb49536ebe8af5fc3f7725127dd25d5db38ec80d3b3712105d6a926337cd3c625dfdd706d7304f9946a6d815540671e55230a01c39d7ca853f4caa8825393a89876cdbfbccfe63a93f3ecce4a4bec1515b765b7aee8988e8774785cc18df362d9aab9ec596e825e9d269efa8389858f142ed4b01f862422b316f385e5205c47a2a19d77a569fc63d95e40dd870c8fd87758c03f2156776bb0bd7c076080e2ca187375da4f1c5d7986f231b1723d07f8c31561e76495d2d7e0d3276ed0ecaf5f1038e6b4ac4d05031e1ac05b1a0c2889dba70b07b499d1366d5696eb084115d17002839631235ad5536365666dc76061b49462e6724411513da426d706ac2d94c925c7390026f0aa52bbab023d3f854f923754343c44b102fd230847c6c7e33c1cafcb80b61b5303060df49096dd224ec0917c821c8218f3c9689d2dce4d359338e4061c9ad05f09487e145fee02e372d1c8d6441484a8466cba454c60b45693eb36493e14882f0075ec392b40f8fcd2ef7eacb7208d1543dff8c61e806ee04208f596d647df1c92f0d91151eacc2c3c63834934d09b73ea6d2ec9e97a8d696105c71031a4c8e934d399ebebb2576240e673d6c9ed36fbc604bcd2c123162096051a1345b992535d9bf015af4f6085aa662854dd28efcba599ba94459303c2e421de6b93edae2a2ff5bc5bf66b03c4719b3df82d4f6f3ec16a9df894e836953882c8ca2e8949e31ad17584255a1145d4f6f7d68bee4e3c2588022bc070618474128b7e29c6047610b1994d7dabeb713a07d868d047f471862c2c46e4ea7aee32bb41ca8ee72501f42a1ff82862237511671fb2a006deabda92925fba09e25829883a1ba19f2e7a38acbaaac4886da548ccac63f57a15323a454b0d6c15d1a42bc7975033b87236d53e7f404a869a78eb89a4443e176bdaf7c7ce501953043603d8ad17892d609636f889515d5465372041c9977634cdc3d3fde6e013163c05f5401f096a2a80403fa55b6427800329f1d72896445d80b218c191079a76859d2245ac4d4a1e8dfce89162c1590aab01e84ba3ecc961902d7f69e7c68e881958df474a410fc00b86f95b4ef4367ca50d018e9a6740ff19ec09929624c2b0ae195ef94f9fcb258143ca1c533c502d33693a3505e2e84d3369df647e1a871ecf7d61bdbd646e570b03710421a43a1b727bd47da66476b208fc5d494a9f569319f5a56b8817e7d53e16a2635e48c9edcf8dc65f828c2d92bbcc87fc5a2384874e5e12b69c5389b7d503abbbed981321c8b7328593a9cc1f20bc5fb5a2b92f4e365c73f57921a3263a0109851944ef996fc2e2f79e57a3a786f35a7cec2583be413b8931da98970703b2f539597940f0ca016a74c48753d53bae942f37cbf614bb8834eb09ad37c7311f449f3ef331ee6e9eff931a1db26ef98aed026ff4c8011e25a5960f8ebae9b45202ae2c0241222aff11fc04518563943edfa68d76171c648450c313d0542daec89daaad0ba62d3615dec018259d46bc5aca668288577ae4aa0ef9944f962fd04bb1d7624e0a85434937fa16526d2b8ccf4bac20425a33cec72dcc6278c99adab1682af7cb0e41a24d905dbff7eb01b32b986f932aee7c323da02115893fc758bdca7fa5203f7a376c4840b8369bdd2df9c220cc541f146629ad23025cfa26b984e330cd798295fe90744c06710498a3ef2ef3265fed393cce2b7615d050309feda65ec3a35a1250dcc7c4ad210695b2d4360047abd7140a5a0a7dd812b196a1bd6775152c45029e2ec4a60a3960b46439330f0f0f0f0f0f0f0fafa18d90da483b8424c8946412af76dceaa5197557a694a44c2909ce4c7cd91dbc8377206b6467c4a7934509620a2f0bae0a5d7e5612c6274e5153dbf75f7c99ac270eba2246549377299b979d38485121457b98fa87cc685891030c4e9c949c58150de7a6e3927480b189e395a9a559887532e66634ec03c806189a38ca8a8d980d977d3fb3a0616ba5071899385f040d3959ae4745048f031347ff0f95d4f9d550f382b9a0e15dbc1e1897388ce44a2d6ab63203862556ef5049c9468c8d2d6c201a364200a31296685132cf48b26994408b74564a066050e2145537cba5b1c352bc5cdb9916729cbe861a0d05018c491cf3d594f0eb1c592ff130004312a7494253df09bf60012312c7ebb3935a71439e3941e224d17dd734a8304a591fe8c2c6164b01188f38977ab9141bcd1a6a8e38570c32cfebaebb0bc068c4294951c24ca420b62dd6502bc133e29c737bc9da33b9db4c329108c058c4b1532e62aebad450db82b9d002bde315301471ba8d1199c9235c84bf869a3d0046224ee611d6efb4ad2815d650a311827f2faa0276efe7001888389d8eab4d51b5a4ff431ce732e5b4a410ca5490214e3232d585388dc65512d9bc2caef850020c429cc7fbd5a25ff6a6880ce26c4a95ce74997f477e8238e91eb30c9d6c6a9436e363c69a0046208e7bb2499a0a237e210910a7f0962b7cbdf504187f386a285331c1477e38e6899d2482b4eab7511f7a4d21649c58623e9c7e938ca92184d290e73d1c946ab694b35b627bd6c371d56f73fb8dd5ee9c8753ae1e4bf99f9d96331e4e4a4c7adde8fb1d0e26cf23e6fbbd9453b5c321e5dfdf87cc3721cf3a9c3425c85a1e8d913b4287b3e4891584a65c26229cc3514d5facd80be570c863b2f15a412be671389d929b3c83d01be4342c3e667c34e0238b2b262043468e40868c1cc1192dc080c329cfc45506cdb5f90d0799eb340b6de3a2bae1d89a215ab8943c93eada705229236224c9d870ca9d3196898fb469b6351cc534c5966c25415fa98653e65049684a0d49229386a34fbe0849de050dc78d9727d4522b5406912f609ce1a4a2654d5a3c821e13491c30cc70cc62faf462927b3ac31a38b8011f33ca68d88d77fe1aa9850518653858fe51f54ada94a9b5e0d8c20b2eb4e00206198ee329a72a5c87f69071f00df602c6180e7f62aaa1f67f23070db32386030081802186939688997b5bf14f4f6138650491a476392f520e86f39799a5ca5c3891375fc0f7626cbc709c9c6717f53798b0b50b8768f147438dc98593e8bbee8bb316df2d5b387ce5da57bf65fc9668e1e027f24bdbc6d6f62c9cf5ecc664ee35d98e20049b87808185638989b9d12ec913697485c386b9d18d642148535be16426c2a2ebec894bb80a07512526869b9d974d8563c917b1ab396137de291ccc23a920f39f94e0a714ceb3a243f66d46cd3289c2a9ed2bf67b8974aa7450387f5cf68d24d913ce9a4e5c879297c1f3aaa1368210d048fcc43000817201c8030c279c456ebab05d89fa736ac2416c92a0fde2c484a3c8b352a64e5d25f92fe1d4f9a54509afe81764251caa5dea92fa2609c749238259cea96d6f9170d098c9a13d312feae50887b8d6657e6aee7b538c70b62cdd8a672292e94a114ed935a5b89908a7fc9f5fd2f327e84a86703689e633daae57260ae17c29e5bf8a77eea7bd201cf2cf7dcfc87658de8070da5cb67719edc7de82f18363a5d04ce7235f77be0fce1b438ae297ed1e9cb252388d5ff72563cc8363b01a11379ba129da1d9c33e84a9baf411d1c57a4e60aab961c1c44be942ca892903d3d1c9ccdae94e685b234767900c60dce93fbf6349e12fb7fb2c1393628bb58a6279b08d5e02c26262692086d23453438e8502327cd058b1e9b191c4c48bc50fbb1517d95c12957b8f8ab92a6e1a23138a4175d1e322c3038e9c875994bd246d2ef05e753718236cffc1d4a5643ed3fe04fa39c0d182e384c90fdbba067bd645a708a184a4bac0a0c169c5636baa9b1f82acedb13fdadc4d37e47aa38056da6749b48d779e1541c2fcaa5f83b5fbb29898a7305f5216da2ef87aa9ce2a0fd4385983dc37655a6385b88ef97e2945c5e677c7d529c3e6f444831eae58d3e8a4310daa4968590b07d8ae2d473a272855852362ea138697c6658d0cf9431041407d9c917e26ec9698a9f38b6ada776c5ca1307d917f355c62a624c278e1e692b65ca262c9d8913e79131987c7b869f7e13c7b653ed12322f4df29a3828dbcc99bffefcf24c9c228e06adb334264e42b7a4a8fbf3258eeaa384c7697c4d3f5be218a2a9c6fa7d2b71d211bc4fc64a54b19712c7cc3e4bd72c67e9ce491c36485b0b0f91b4dc298953f76cdbeae4d2783312c7fe7feb519599549b90386493d72c299adc51e6238c71bdd61435c4116799a8a6f9da24a450234e715b6335dc6710f731e2acf5f2932af6a6642ee27c2a6b9226466b508b220e96367c75c66dec0f7441e33fe0e7b7f02eb80165481040224e6ad3b5e948a2174f0120e278eded1fe726b346c386af0704708883be3bb56fe32e7bb12df873e0a011822dbee862e6de6d744104608893c9092e12d444c9badae01268910c737c1181126891300034104021ce3722a620be4d1c1000218ea3b2355f3e6d947635d4f60b0d086010071d93d8a32c28791909e26476596fd35f6b6b62122080401cde4f6b4e9a98dd1702c431bd6bda7f478c1163fe70086ae36662b44831b37ec04d8f188d23210610401fcedfba26735c491dcbf3e1581d2ac96fd3b29efd1ecebea1a331d4480f47f58cab3659ed5d64f270d09c20ee93eb4d36888773ea46481627b488ebee703e4bc9648a9031400076386cd6e01f62d6e170fe9237f8a620b582e8702aad48e21374d94b7a0ea73c3a8345d68c31822c87d30615ae614a5ad4d7c4e17c21bd7e88d312f15b381cc4e4db7d6e1a794af28653b6a0f2a6fef90b3a74c329fba91877662405ef04d08663521f191776574c576c38dfa92ced21396428ade1985a1a5f456d2bef6a38c89455d1083a4cc8d370f22a7161d2e44d66a3e1b8c9f54cdbae2ed26738498e244c5614bda349663845331d7df9082aa4a90c272547f95f881e190ee2e96e1674dfe998c67032b913af6c92761b93188e3fc2e7c26e27ac98c270dc9798134524cded12180ec93c46fe6a9aec2b7de190cc36c52a8b1bcb7be198f6ce72a6b01db1efc2e9f287d6ddce85635a7ebfdcb61223dfc231f4e289bdaf2469d7c2b1769209d32ec15ccfc2512f95509bf6f6478485f388307243d63d5bbec2210565ca54257527e3b7c251ec5764d4f4ab704a3e9752cc57316b792a9c54843b9942c5464a7e0ac77fd1155dfd99d92485631212b4a4a047e1745b32560aebb17443e16c65bf296d2bcbc44f380611997d6eeabb66271c62ca96922aa937e128baefdfe3cf2d93ce84f3a5acaec154be84a36625b9a9527a4d952be1dc16a92d6782c8dc51128e495d1e19564aff8810120e4a49772bd1267e54d0114ef14f9b983416b48dc808e717597f76a992e91015e1a0f233fc6c564f9321221cc44faeaed62071ff1ec2b1d449185b11429fbc8570cc1511bd2d97874a76100e49e48c280d2daa5a03e198fe62ca67f95664fe07a7b2115142aeb5b4b00f0e31f65ac85992ced41e9c3de304ff92a4e62ccc83d35eccaf31e8f65215dec12924aa5a74938d90631de0e69dd9926c9c8353fede4ad413cfbc180767d3d02e226688088b6f701e716a84d8c7feff3638c98914fb746d4a3daac1416bfe081a432fa30805ceee88ace15c69a7bb2aab6380871a4e32c8903645a9f8999d86b356ecfd17ab4965ab071a0e9752241567458ee6ca190edf9b3526192fd89c40e161867368d5dc9b6cec3bcec16e6e20161ca011804c7894e170192e24b75a501f298107190e2a628839c278394af039bab031a390041e6338693c33a12ecc89597e080f319c427875c9f50ecd75ea834718cefbe11b638f96a825bb8307188e32774248485a499cec0ba7d899921eed227c4798070f2f9c7c6edf4f6daa281a77e12442bebd72176ddbe171e1a816a772b8445d93bb1b3cb6709e64316752764cc8a40f786881517726e45610ad520db5c32ff6230b067ca08b0ac890f1376c54a08e6bcce01a3364c8e01a886b201ade05dff0c8c2f1c2dba46c3fd6d02e6cd0489d8207168ebb9da9e773a4068f2b1ccfa2d987fd4912daf9dfe01a38f23dac70de517a825b280b7de11a6a9fc3c60868e0e01a6bc3a30a278b166a55256d64996aa871f1c50d1b5f88208f70e1410563c50d172cc409d6dfd0c20b4614784ce194f13766c8d3dbb2be865a073ca470f6f6fc92383ab9281c53c85d5b4f99fc1a34080f281c74ab558af9b58c372b203c9e70d26ba27d4a69dfd5fcece0e184b4a67cd59a1b6ec2a9feb4474e5ac634ca82060f261c7deb92cde45259c2d1e6eeeee2a8f48dbf124e69f9336ed0162fc4cb47c0cae0918473d8eba83799e812c25cf04042d9165696d99210c2820334bef038c2d1a22865ea2f55fcd53eb2608006687818e1e4ae775a64299965b72458708046043c8a70cca6e9de5e7d4484b986da0d1b39b4e872430239b448800c1939b4682c3840030b0f229ccc4559fb87b2865a0e2d1a6d011e43386484ab79d6c7f6a4861a8eefc2068d3209202db6b0400e2d1260c71e42d0fc4a7a88dd90e5e0f7e26fa404cc8f2087161af008c2c9455c0669ba94ae940081cdb8a523c2e307e7b858a6444c90114d7d70ea4865631543479d55a885f0e8c1317885cdb4298dd6bfca070f1e1c458548298968e789a03d78ece05c297aef621a5563af76e1a18363ca095d1792da13a99483535808b69947c490f7ff076e7ce0c647a040c00307a7f417b19bedf2d285183078dce058215cf4124b93c93362f0b0c121977a1ba5e25a265fbce05183939d67d22ef1afb839390f1a9cf2e7f4569c7c661bafa1863ef098c149b2564ada6acad662060e1e323824b1303b3289a7ab9a85b13678c4e0b8a3a44aaafc1be242dee00183f3da48ab7bff8ce0fe0b8ec9c243b3286d5d705cd3792d21befb7e6cf068c149988aa8070b8e96dfa352f3cc551ce75b540a4267658c93183a5471d8152192253fa93a261c07828e549c92baaca3dd465c4eab861a1769853b5071da3b15b4ac925788f31447dd202208ad2979a638681df9fa23161bfe183a4a71b64a67d71aee7e7559411b1da438785aadb9a9fa31e3c3d9c61626e0097c6471c5c7651c3a46714ac234e809a5f7249a5c8310d44087284edf554aa43d150ffb1ad0118a93d01052eb689712b382e220428a9133053159177fe298a4d68e4c2f71df27c6130793d1441aa5d23b434727cea3eba5cc57333e6d4e1c52457bbfd3e9173a36715c9fa0a26eae53e7996a02e1ae72298292944c9ce2c98adea544fec919828973f986f09a2e9e5c142f71ccb420b6b4feac65d01227a9418624966e256b0e2b71f6b1db1853282971f0bc987bcc3456d224d4b07c15492411644c1267d90d32450a264afcde489c246f87b975cdc8e822244eb1542825d72765b25f858e471c27c860fb95c29a94dc5b204717cfc55aa1c31127f5932d6b9730a9d0d18843981817b12fe95ff97114469c4b9518755731bf4dbd88f38a30314d3572225f6ca42e1c708a3889d1df52e9eddfb031a32311e7f7b1a0273376f13d441c421e6fcbcc7e9f3b15163a0e71feaa9535b9ab4a491be2984d988ab11e5a5a4b4ee828c4d144cce8a34f2f745236d2123a0871fe92c9f466bcc811d3a60b1d8338ee05d9aa624a759cd008e2fc69bad56f696b260ec47944ddb2bc895ee800c47936c5e7c858b5ec2b0a1d7f38cee54cea299b846e976fe428c1f998f191c3868d0afc1621b8f11148fc57dce022024af4d0e18793bb6f0a61a1324a56169021e306175ca009d27f77f4e1a077c44aca52a3454c7c38e5eaaa3c2aaadb947c0fe73c151725a63e514d8ee074e8e1a454acda18d5b4e593c9c3c957349366381b35193c9c2cc55b49bee81d0ea35637779ad468c60e47135a2d454cc973dfacc3b1728890820a173a1cacd298ba1435ef2599c371f625eba6b92829dadfb06159e890c349347acfeda91a11b538681b4995b5e90a0ee7bef7caa332416732bde11813c3669dd8a6abbc1b4e9b2f840e9544ca8a95c5151f34acb4e1a0445c1c13ba345a92b3e1bca7e74d677e0da7645a1b624a133fb71a8ea3446398c592b0164ac341c6c9a4d46caafc7ba3e1a8b5f9efdc64af8658061a0db3eb38c3215fa5d6241ab5ebc21d66385fcbc4149694f41172194e69c25ebf566234cc28a2830c47d98ed39ab7ddba3763386e88314ad26ec4702cefed48aa52674a360c873d8f6093cf7f33ad6038a972bf0caad42f1c278bcc90cf37355ad40be750936d215e94a851bbf0c5bbe9cdff92960d7470e1683ba6f59362082d972d9c3e4bac8a522a36c7440ba7140b136df375cf255938a94c1b84668d60e1209216e1e67e622c835738d68f0ccf542366295ae1ac312bdbac99f8e6b00aadf59ba4af8bab630dfdc8e20a2f70987650e1a041c6c6929762a59ec24934259ac8d923437b5238bfb589c94ba579f451385e6fcf5a5c9c95170a07bfb093dd5f31a0e30995bc0ca7a76571e38f191f3264e0c861630b1c5b870e279cb4c94b9bb4f5f2437c3a9a70b4131b359923d4cd4c388750692bae4974886509073fa54dac970a426e5009a7f0aa15dde49ea64ec2a926799bb0b5cc52de133a9070b40a2a4919113ec2d144662f17e1d6b1970930a1c308c730951d1a4246091d4538bfc66d536d9d6ff2255ce82082a2eff296502a47a476e818c241d89f9a51cb5359f7113a84702a51d33241565d7077c6474de063c64749e063c64761f131e3a322f031e3a3aef898f15110f898f1510ff898c0151f6ee808c2f154239dc58d191d403897a891652b412925b316f8985103073760cf0be6020d161ca0e1808e1f9c2fea294d2762941dbf865ae6a1c307e70849a208a01102c4bdc5169c6430eae8c151c279af5c467bdf041f021a38de6d74a1f7850464c8a881831b500307d7b8e28ad7e2461657c89071e365c868d74774f0007926b3e7b58c080e3a7670de903535368514db3f2db8d0e28a8f191f58d498f1376ce4b040123a74700c37a633ae26639e59430d87163264e0c0f137f2068d2d3870a4a02307075da5a9777295265836860e1c1c766c7d53c9480d35bb0b74dce0f81b36c38990a2e9d372a0c30687d45f15825c10bae1770570f1b1800a7cd8a0a306a7ab79b11629136dff1a6a67775774d0e014e76cd2bac6cd7eda7761c3ee011d33386b0cf18da7b5c64cc6043772acda62c1011a05e890c1e15bde42bc2077ee26171f5930e00301bec516cc850564c8409342470c4e4ac577f3957c04db0fa1d00183a35c9ee02ad9572ea88968e878c12158058d5177c1d0e18293340b218feecab030de163a5a707a11f194fe45cb2aedc70c1ad6c182a39c1c25f267f22f1f59306089e961c1011a00f8028c551c54e90d1af77fa523a98002ae00431567977c714b49f8df2ca9a15664c830978af3bb66d9d3a8da692d0dd6e3dfc507b4b0c01460a0e2706f2959b890358ba41463028c539c4ae8d3b9fc9772c85843ad468ed7c483618a8358962057a11cc113d6820b1b5d98600b1b13f85fc01e0e122c004629ce6f695a16b63552fc3880418a83dee58929a55c21867514a7b0cc25e36ce4964b860c18a238869cd877abc965e32b0618a1f0b7bb5e94bd4d8cd601800f304071f64ce51ae96e6d9ee826fc34e58815ceada5ee728cc7d90a062baa7098a0823e21226aa34e54384c904164a63f8563502337559221242197c2b966df4f5585f44a3272c18a289c548c94444b432a7d3e140eff2f1b54fa3671a57cc259c447c8b1d558fba1134efa679b2e29d56dc18a261c2f4553d2164bc4fa13138e998297ccb6ef124ed6ebebd737a3c4460907514b5d8ba6e2f7c30482154938f9a83497dda02a79e31c36b2f898f1b1c5169c45de07bad022878d11d0e080154838e64852d226c65757c88d1c6507818f191f96052b8e80bc4d61923c5beb3e19a19558df6649ab4a3615218db027aac1b4f29a88f0a9c81cfffb10b014639824b5617121741669e28f8290c30a20a0b343c6483d7957463f682c93d0923399423e20f9c93c57cb92e11e5821744e489c7097632b7890c64ca916e31d98214ce5e7629f90191d9865f36a5836d3a4cdc197ebfd4bce5f650907e88a2e9b221e129237289245d1fcddf669411b64ca6a2c5b9cdca15403448a4c7154478364d613aace5f53b5e70547206d8bfec28697e9c08a191c83e6bf785142a77721e01ce4bff898f1f131c30437fe0b0a7cccf8f898f1618287c0c78c8f1b6feb0573813cb04206479f24ab59b1ac54750678c15ca0e981153138e5dba6a99353e9fa0483b3241133e69674d22afc8253d4d37b199171c129939a4ada33a4056795e09af6da324c6756b0e05c95dafa2fb6600c5c0362ace2e0162b857c21aa388fe6f0dd48c137bc948a83e5d0dd8b7f1911a2a8387758f6b828d974c4f114e7bcdc90bf2bdece2586298eb6224348a737fe09efbd6c01314a71144d1935645d4c95f518a438583c4d5f27770d352f6cdc701a26b891634d70230b1932100e2db84029c418c529c689ea1bdf92ee21238a9354c97fdba74ef67f1fc408c5f96408bde312725c3441714a273625c8abb00a8b7ee2f026aec637a98c295c3c71d4786eebea75e2a445488b91edf5ca7e4e1cb45a8590f5bc4b6acc12626ce2f8397ace267c5cb818690009313471baff1131057595a26a35d4d6beb92d1347cd9c9adae12237885ae0b031014c9ca4a518df228d984a290e70c0071e0b193270c890610224e307312e71941417c9eab45eb610201b5b74d1420c4b9c5e53f6896c4159e8bc1287a4f26bf4ff579a184484189438bc858a2761ec7655d7102fcdee122f44964dd9db5da4b983189238ea8c0ec96f298798192312c749729bda967d279864c880c4c125e88a215974495a7cc429dcf574369bda6ff46f10bb2286238efa36226ca765dc383f2046234efb12b4bad268488d33e29054d7cf4e6e10255e193264c8b8e26306161ca0b182188b38c574ded9e75a3971451c459a49bf6497428e2811c92c1b53d64dea45c459f7729b88f425b2ca87385784bbb4d61ae2907db646e8370b71cc663f4ae556aab610421ca36b8fcefdcd6ca70de220ff82b03d75d9622909e26892d62456967511fa409c47ad2ccbdaa9f4a705c449ac2c25e50cdbadf20f0719b7fb46e8ceac4cf1c361a4e9510fb16261efc34154a40b3973c1e7267c3879a89d5851db12c37b38c4f63719412ef86ff470aa2c2a365c7526c42c0f07192c5f52722f3c1c4ec8d55032bc7e43bec3f9fd5cacc3e254cc163b9ca49d963e13ab21ed8828885187f3c92442a4905b0e2dbaf8020327884187a35a4811ba4a755fc498c3295b9814ad2968d3a395833331e28fc9ac89c36135f4c550a752de6882c3f9d2649c1426415ca76f38e8dc2842e978982c951b8e6159e5f52ae7662578ef420b19327060c1011a3662b481547fb59f25dbb3e13a39d714ee23e2a8d780ce1b512fd5809b927759624b8ca14b037ba2aebb64558c1442c339e389d8956d1a12c2831867386fd2faf6b33166388d58b2b44c7941db329cbd7a4ef7b48b418693c509b3fb4ceb91ff319c326ccae7edc9d3530c07292a3a9bc454743731c270c91d19fffd82c0f0755fd0a2440e7de1705daa4e466d6d1979e12483c964526643f75d3858760996b6612e9c4b56d0a095925851c9b185c36fbc9c1d3967656d2d1c34c657659066e1243be4868493c1c2219b4c7ff15ada4368ae701c931445bb4a2b9c53c2240daf334d2756e1e09e9b23a60952e11ceadb8450425febbd291c2d531022c97092c2612e5bcc33be21fdf63868c890f1ae5138255169a6bde1567d2c3840438b1850e075279ec60c91715f10f013987fddd029e9420b2e9cb06ea4788e269872ebad64aebc5b0d35e7af71966230a136537ea991d2ae1a6aec058e8db10445b25cd84dfab4a86aa8992087175c7c89c04716577c28002f957012b5385ddb2a42732909c790c91d235fada1a697430b2eb4d882468d1c5ebc27128e1ae6e4040bd1f6bb9d11e3088cca1075ad952086114e49aaa51da1496613a5229c4bfbb2e6d4d0203a12e194f46fec68fd8fb55c16c5630ce15426832ef5674ae64912c2796c4536cea659ca3d46104e624c9dde70eb225312100eb925a56d4a963295fe07071513e23f4146cb57f9e0f8223792a94bdb0aeac129a80b353b99761f2f0f4e4205953dc1de812a2ac4a09405d9a0cc1ec4d0c121aa08a11b536e9dd4e7e0a0369a5f62353838c88f535142ba32d10d4e13641257f56dbfabcb0c62d8e098c2ed051339474fd663d4e03896d2abef5757d2eaff16b0183438869aa03317f2dd583e83f37f7a8599d930aa443238f7c4519df2a3189c6265b598a59c21d5078363bafd8c4187fc82b3a49c7f12f33c56171c7305bd0dca92dbbf18a305879467d258b0a83b293158704cd617f4428fab385f5a50a32396103231aa38994bb4794915e2f24ec549e84e102b7751711425ba6d3dd7531c92eabdad8b144648d21407152f987b04ddfa3296e2d421329c503d8d8da22f48710ed3e2f59142f56946719e1421a5944b76a31d8ae2d8be3e7b21188a83525aedcba4a4a83683e22cf2a33a8229adf43e7152a546a45bb798ac7bc0c313c7922b32da27892d912443864727ce73c9de4e2d7325536ec1818386a1771b33b6e0b080c9bfa1587080c6013c38711217597d3345ddb0f526ce21642a1322ef85cc4e13e70c97a99d1f7ea5f732038f4c9c73b643fb2893e4b261e274327d9a9a578b9fb14b1c8498d3741e9aa747b3c4c1629e8d10a3335656e2e027bfb3976a76bb428943ae8ae152cda5332771debcbc41a9fcd520a287240eeb23aaffe2898a9d08de02eb118993122aab48d09b279ebc0c078e4708015e70040c24ce27216e3293652535a8863ee22442a83d11edb327a478510f479c32c4525518690d35921e8d382459618410f71edee6178c38c637136abccee543a7c1c5223a194a735393dfa988c365f4892198897b7ef87ec523111e88f03844d225ba991296459521630b8e36c4c9beb54d89101f29a385385e85cc5952b110e24888639824bcfc358338243913122fe404e111886390674282d99aec9e64f131e3e3021f13b8e2c3031007a1920c1593429031d713b8e2c3e30f7bdd5c4d1c597aaf871f0c42344e6ee632a5217d386528b770fa848548c0830f8d5051cde343c5bcd2630fb5c5a66fd7b518f5f0f7c99341847b9ba0ba3ca86615453777c6743df0708773a6747131da7ec898d750b304dc35c0c30e87eb133da24397a60d9a79d4e1945962da925bdf6d7e036c6421434609be068d0f2f5f7cec171f5dbe3014f0a0c37934a9d89325c489f8e7707851a144c4fcad92457238ce56f28b5113a75e138783ba4ade251a389c9418cb15f632c92df30d6713f23fd7117465d60d4791a15e6445ecbfd886f3a548bb0c3961ae2b6c388f684cba1d0a402040160e415e99a639b99a82b0700cd771d715bac2b9f572c83c42d2c58d158e26729e17db646ab50aa7b0ed12a236d829930a27911dba3189f3b6e44de1a0c4f7ede6eea4706acfb01941478418bb289c35b3e35fddf3f20405c3bd65fab553aa80004f38069df6db97bb36424e385d50beaaf15fc1454d385f703f3713a6d2cc4c3858252fbfd494216596706e3b0b2a5b259c82da7e8a3cbbcc3409a7eaac4d966e4b7d24a82641e9d095239cf2f547a6a0b32d4233c231ae9588cc6317f4b2221834668f20e26ac95c0d9df171e80e4873040188702e65f2bc4f96943d0de1341733a6a4bd422a5f08af768c5b8a93fa17c681800facddc8e105003e4180201c5c82d0d29c03e1242385c6ae491235f483936aff9514969b2eea8383a59862a788580f0e26d42f2d24a931e5a9061008c083d3e40b937d839b66f67770d24ca52bf2d4c129fae4d199effcd4f939385e586568e91399e3e3e05c314c6676c4a99e6e7032e996c93d34e9736d708829a5d998b306c7e0ef63c2d2ca29d16970de90296d082f99c171aef24de58564700ce2cc542add8ce4770c4e33c15e4d3dd4a86cc3e014847cdea697186212bfe019cb681155171cd3c9184959d80a13710b4e21a99ee50b255ae44b00169c3cf4bfa664372f395dc551eb6c738b4aad13a48af328a5952b4890396fa6e26076797276acc7c9a0e2ac3549659fe40b1a2da738f8a9d5202aa864fa35c531e4b90ddfaf77df95e2f4e223c9b25f525e8414c714b3289594b8b875ba519c2f8e4db83ca7c25213c531838f8c1cdf97b22514279710e3a8b2d92fab7c3000501c53fcb9ddbad9a429f989c3cc89c8eabfe0f0c4412911da3aecc47964636269881387499b33ab6bd2268e3116dd6c8297c865d2c43944367d260ed252c8a1b4d4d3d7c7c4295bf5fe7a84a462f99738467ad5baf491f42d6f89e397cbfad76f48d2f295388574ddf4912a74da4e89d36a6668ff2ac99bf4499c75476e5b3049e29c67f2b52f7d479e237112ffaebefc69c15b481ca45e67987871b2d4479c524cbe7f964bb78638e268da726ea5a1469cece47a8c568811e74b2e2792d266a46911871141fc3745844c157152639ba75e464f851271b4145126376bfbdf883804a16d95bece62ca218e1e4a29b56d9762c418e264329e5ac9de18922bc4795344e267d68468b3f2b7e48df020ce2229bb4bd68d200e26834fdeefd21c6913889334bbdcca7db27b630071526a7f6232b4655ecd1f4e2b1629ac23dccec4f8e19c973ee22d8dcadf993e1caf47c9598d193e1c920a773a520ced73dac3e9e2cba58c889239e9e17c152cee324c65caf370d26ed75a4153cc20e3e13c399455d2a941c8f70e87fc954296e9d72ceedae1a4a96eb4869716ab6c1d0e5f363f2b527fe2b77438c87c5149c8a614e4b673384d5ab5bc5e4185d5e57092225267d8e3704a09a32496b0701b048783c5b49c60296648e1371ce4a89ecaa152248dbae17cb3d1e2ccd4361c368892bdc8291b4eb729fca436f96791359c4289ac985d8494b654c3419205e16e266641290dc7389564aa90454fdad170d0204744b6cb1bfe198e1a93069933c80ca748226f440d97321ced5bd5c42493a021850ca79b5197936d545aaa8ce12443aa09975511c3a96e75b229f195d387e1b0de953ed297901243c07010137db38e26d538c9170e9b4d9fca9ab4a0712f1c564f34a4959c97f22e9cb27c5e5e621c59e2c2a944e5d37095a2e9164e5669639f58c654222d1c4cb575690b65e120367be44dcd9a62838573678998d0e9150e7bfa2c8ce8c90ac7b4aba65c92a5881856e16476a5e57ba7c2b94e538a20eb6ac6bc291c2f69dfa0662eea962785d38b56ac13b9454cc845e11893aae8fed17faf43e1d4611631abeb89193de1f01abc9234d79c70526f1617f97337566bc221c811f55a1582e88931e1781a6b6aa4664b38dacde8987c9b21f94a3879cac9b4add134879270d2376d5947e9503946c2a9ae45ee7fe9bbdaea08a74c9b67dd2229a9a76484d3a9dd0ab2952fc2513769d8b86fb1c974221cc2c60c2afbe843388f7b5e9cc916a42809e19482124994d21873ce0ec22989346a379899be080807eb114189b7fc83c3a5a0525710611f9cd4de98fbc6104facdb8343da1d4d69920c994cc283e3fe8b1255896695d31d9c2fbb05e556afdd1ad1c149b3e9db789a8c859883735eec1273a15e41e97070109ff9332a96f7896f70b25ac91b577923656483836a3999746e08ea25050803a8c131ca84582ddaf49f667a30001a9caa2da56ce608a536333805e9116287a4cddc1a13062083535a4b2204a59268cd1f8393081f95545c8d1b71048383c85b6d4abd864818c00b0e2944e508a7368d3ea501b8e018d297efc5ac2e3ffa01b4e0245a46680b25739ff807c08283accad817b2056deeafe260dd9f5695aee5d657c5612d8638499e9e8a734bf6cd27c442ec1242c5d994882849524abc1d9de2a472e694cda4442e1999e2a02fc6596f9858dda0521c75efce4b868b902722c5694c3cc382d6a3389ff6bfa64ebafb0d8be258bb69577ef396f04c284e722932ed7f5d88a605c5c17bd29a94249276de4f9c3647ac58c5522966eb89a35766171311edc4a94aebee5bb48e9c1327ad4a9be426b334a74d9c6293aa8ca01ac5d4c4f9ea4e85b03a13e79ea44a88de0d268eb1c9b37fc3bcc4c9747556e957ca362a9638843121d66a1b73a4a512a7d8582584aef85fb050e2742a448c91567754582671fe535632c8587e32552471d80c32a61c3e89c471efcae2ce4e927b219038a890252fb2f65b04e1234e99f735ea255a36253ae274f325e35509f11bb11107f5d297cf0e19719898912ac435d7b42ee2b4692e481d2b8dd9a288c3e6492a89dd505edd25e26c1da9cbc3bd235881885312baed7f54e910c7cc193f21a5185eb5210ea3db5204b529c4b9f2f859725115527b429c5236df19d56c7ab23d8884faae6c29fe268873462da5ad0cc449fa5fec05b990646e0171ba517f3f937e3df2fdc3796382fc16137b2ac90fa72e8b5f2797a52a53fa708c90d344d67d496b1a1f4e31294c8934f98bfd1e4e32da9908229e157a30f8846427538a4fbaf3d05c690916c6c594783095bcd1bd133695ee70d438579bbcb42aea6f07d484cc2eab212eaac3e14fd296ccc576a90c1dcc942b2e748e733849ebbb9231c44e14570e9ed8eb3d91b1445ec88a381c937785d0a52386a42afb2d9a6f7c0e071831580187c377b756924fd3ccf00d27b1759af46a379cdde6a46ff08c3b596bc3f9f26a99904165c34149ee95604ab3dd660da7245d8266d1b170991a4ea1213c84b62babd2a4e19032882bddb04f8d2d1a8e7ea78450e7259489cf705095d23fb2ddd8298f0a5698e1147a2d7268e6489d4ac18a321c279fde88c41039494c8683256951824b8a79cf8ce1dcdf33326917b14c59311c47f9a8287b1b5632250ce7de8f1d93ba11f3236038c88b3b721e4ad5462e0a567ce1142cb8c698345e38a6ccb10c415e10aa7117ce7726df72da890bc70b15dfcf50a3216fe1a441997a8bae9c31532d1c25baa81865c45cc4250b674b9aea279c25cbea62e1b47d4246d35a5de1048a7da8c4ed0503c248241487030251201406a071a600631408001828248d0663f1681c46c21f1400035532263a322c161a1c12121410108a03c14010100c8bc26040281408050220a158708c23d1f007847dba4834dd96206082be846a04161d2c8fef3dbd4d033507082790a38c201019fef948e867f8499c3f26e558eea95539d24fc7d646c27e09d412983661790432923c2dc12a024e850d2673165f2884998441ca06190047fd3e798a239f72f9f7e44734056563b43db2cd2ca1d65799e832ee56eefb4901ece6af072484753162ea4e3147c2ef08c246980ff51b5d6d9d6c4590822ce9d9192dfd596f70c2c4b8de089751e7d76d1725858f9e53bd4a87e8e83c74d7b637f35fdc01368c6eca77aa4907de187491437042e909ff36c2e6c98d989d7ed5506ff6dddbefb6ab3902f11a283cea273011187940a3e012085e70f6910592088817810c4a5ded280e6c817959e158a0594045c08081e2d5fbf683dd2027201d9060004a90c5c03e41e4018405e009e002670164030725c84c4980ebe1caf780c0d73f9d0eaa78506320764f6b1217609220379f890db420d715a61ea08c011640b93d0d29854d2f80820016007a80770013007d1ec00e3b39b9611bf8310061a06080e005305221f98228035619ccc5686cc0d202bc0a2a0d1c0b102af867203903984e208ddd2100e6539e178b4080c0b0df682e178017400168073801c8af006a8e1d7676e200eb03b6075a0d9034c027400370012005f82920290357b6bc3794e1027a03ec0720cf0086dbfa08c7151018b08379770e40168012107fe0b940aa0b3005b2cb573503c2081fd88f011400f6660050adc690843920bf401d00da00b203a008ac1240293809032d9153420536000a0318e39cac6f36065a3c826ada004d1b10188052407501e000f9007003d00d204c40d8dd59ea15809f00af47c015d5fd2f8b06681db032908a00a69c00a4af118f25373790a37818cdc7a4db03f320f97107c2e22349434eb044873acc1fef47da7dddcb83e041711e84920360e1ecb1ec81301fa7aa41d83069b01181deead7cc0fef3cd6e7d0092f6090d3f27e375b01cb2c4ce6c5486bdb8d91757d1f98253014b6360135714da0521cc08adec6a3b6d9a0c0a480a758a310a4687314bd918ebfac90a24f214d814c318cc2cc2bfe94be27535a14fa32ae59583686081e60a56ef64284fe4b3e7114bd6124f36623052385491180628722bb293c4ed94c9d9bc241814e114241ab28fe24190b9dc28ae40b458b83a6108dd7ccdfd428fac206bcf81b714f9f7c013914316d133d243feb214d4249089089081c060c4b09904f68e5d0089ab9fab945254087809862ad68e06f84ea8b5e75db2aed8310609b36c965b5a3b8beaeafa9e46024863d7bd88517329ff0534a80ae81a8616900e3fcc10990ac16e42003167837d3b2b21f2c4f42d9b5510477682942e3d5b0e5068d0973d70b38bb82c0924408fffae4c0c5b064ef78174bf2013a9528783fed9b110033d7193e6d1b6584eb72f7892b7111f551c1155aebd8c478c0b7d3bfbca8bb6e7e05f38a2f8cb1178ead0878891d7911f212a11db3d2c433270e6a976b2f5e615e30818ff4acc2646a3f0d7f9b16e75078502a2857140a5058e2f5e306e162ceb5d3d9a491e58c10fc8b2196b607601d8fe4a5d1eeaa113a1bce2501a49fc43ab0900a02405c708c76dc9e5e0a01aff92e56f46224899fb5408942609a9fae403708428311b6efe48b31c573c6e3e41e1b1c474f19774b18bfe2d4a462106a0e0d7c20c4d9cfa1fd5327d52bf1a52459253c71ec75db710cd31103884cb7080b13bbe5a5914d73a3d3768b7b489607bc47008b377c918c2496b778e9357516d720ada64e11f3f15b1c9ce923cbca1a0c4a83a60111113f72a55c9ae98aaec73137a5975c15c6fec86b0354371f3074a5e73b8c5968b8304bb14d841abd6b933b5c545d5e9b4d67083836d94cf932f8acdd72b9ee77dce37c27d980eb040c3bb3c3565ad2a20e207e49fccc9fb862b26385750d82e857461f06e4043f039cd1424c8fcba17408132a369ced90c25eae8b1c95730b7e6348b2b100da71dfaca0d19593cca72380eadf381bfce80e76eba1378c8594cb0a4714de6d5a5e6cc464e3c4fe0375844508a5b2e1cc91d395b4c2ed2c9a911f939fe5498827932983fd9c3ed86a90805def7426caa232b4b4a5d1f7e9ccc63b33bbe15377cb047a3b74fde2a7df74e6b36f9a069803ae439cb65b5af50b3c62d8a557e33a9c0772fbccd4b2f80135e4ddca2cba8c256c431451e6ccb1f8bcc56deb6fab1bdcd6dfed006907bad0d26cd0f799bc0b27b6746d31d7b422accd7f288ca13897f15aa628e9e430832d16b4c4472d9101b6975de840b35cc7ad8c22ec43862b061bbbccc4c34de4062b431e9f223d9de6f80c7a244a5d0a1a9a58197c1bb401302417bb46a30b267c71e76388ec274be8d5a316a420384c34eb5a881197e004d44704b27af5f6d2700da618a4701b63eac61594ce4a4ff3020771cacf0602522e5a5cd5bf7b18efc4e4fd42135d8383b62835aef13320d121c82f1630f0da01c84588caf3090e1171a70e02637324be16e1457bb8c88a81f7825c71fec462c0f1b900385a3219c4af3722c9f8efa2b55edab2b29688ccc0ebcda887229a3a7ce0592e760c4f0c9360621a0a8b6f7131835db947f4004095f86b87c326d054e10a54f608ed3993eef43e169baf188b2fe4f3ac02cb10ce350ae06e8ea2e4169ae5b506ab3a21a298f2058467a9601c206951fc9b035513cb51d33e96e24f2af51e8e250e4061ad00f2dcc858f7a3b838e6d01cc16c21b80ba6f3db58c1baf9967796d0582bf83b3d930b70286c9e063aeb8362ca57c01c196dcdc2cda5f347f83c8cb8e527c81196c95cc69d8dcc9a6675635b6e21b8d1b64bbeddb84c8e75388e24a801b20eccd97c3b4bb7042c14a43a7e6200606c73dc2809571c0021ab0a14a8b9817a9dea734ea58bda00939224537589acccd48630f73c7cfc28ed1ad8b82aeebe01c76c7269907f22173bcb3af6a4fae7c46ac5049ad8a7fd2a5659443b9a6bcf6fc2cd202c28cefa0cb615e15720e36bd7068f31d95b5251dde77cd29ec5626e9e68332d9b087c2e2d19aeccd6a2a2590cef301802e2361b6392f8304400614da68014ec4de0f4050e7d93c630bf4803e3a10dc6743d83e539b92c32f3c2a2b078a37afbae9568b0f4ce6380a8e732b822b98ea928778ecfe1d57a69dd985e69f508c67bca385f979a1ac215f2ffa2f437a04a7f74180de147b3f0dc82316091e7c40e967b241f8c0c28a857b9d7b118c99742802a3d497b3f342e4b3f6df239509e454b20efc898a4a614b54b085d2ad23518a203495a03c32092973ea1a037c2917400cd783c8ef879bb6c9d8577d2035002ce311039c6639e4e511387ec51470327021d0e4f772299b1da8383e7f6f2cf5f7b8459311449b210a311f0dc261c1c895b86c45bec40dd3bacb812537d4b31dfda5bef7fd427e760fcc86c5a3bc8c65f43d885b733cabc220f25e754e3977201858ee70caf024d4145b320fa82d6bfd8193f64aa0d112de4883e13c247fd7171f1046a37ef28d23d699511b636dc624e6e65730025598ea825bf3afae4bc0f8ac502da330ba139abbf1349dbb1b42a49eb590ebc07906401af02cbc8cca9f7ec2a24fce99880549003480a060a1098d04e2cc9a5e423428fe4abab24d319115ec3ffdf5b75e35455865655ed6ec4b734f463f3360d36bfff312715e8926bfc05d89099103bfc2c838ce483a1f179a95671106bf4c0e53331c5d0683ecb7e04879399c0ecedae27636a9130817f930f12dff03256cc3e750cc4e519143fd7e5050d611756e74dd0a4a7754ee03100abe2f71b5a9c7bd697609eba2362ca194cae3fa9781ca1254bfcd0897bca290045fe77e0d359d6289f61fc7d9d020e0065697c86701e6eab925d9c5821e3bb8d98e90ac9217df0f155aa3069cb91b17264d481b55e2f774330716bdc3f9b0c4497e7a5b3640667dc80cb349dac06636116ec1945d09a2bcb83fea8ad042a168ca7432fa6d0ec72299e382d0911113d9e3956046e7f79f232929e8a7393da1d5de568e845893cf51b3a3813eccd2276d491fb57b8aa909bd5e60f2dcdf34582331c43080b6affabe0beb78466d199e64159524a54448ef5d966c67cff52b47d0508d1c6e15f18b21da0ad1a505197ebd119e255ae9795b8e535156ef8670d1b177f9145dd3d457a0f833ae130f1c8fab9d3962b463d2fcecf29d8a390caeb6883b995275215dda32e7b748600b997aee62c8000bad3267ee0084f16b4e11278f447d6def22098153df517143d192d12cab0697e72a0f5b6f5a4a46db399c6424681fb080a92c27e2c870eb2f00d5b605e125aa3d41da28940042d6c783742f04a80ef7dd2eaeefa88422f6ff968a757d28480805ed0f6ca7a0a8f4cf12c4b083dfda03e46b96a5fa1b511ff5fe6a00265a6306f762a66490f38f5bc819977b8e387bd33dffe48aec2fdbb869275e9ce25f32965e6d07a68bb654d088e60de38e1f4f760c45524adf2eb2ffe279b1be2c0ab614fce0995ddb4f1e66f4be2127778df03640332d92fb2599712bd960ec04eb1014264e10f1a3b4d6611a2a3a6b238848f872491e40533d8a5c01b5bb8b99580fab7c6aaccf989f43356ee4bb82ad5cb4454dd466a74adae9010ad994f187cee4ab15660e027cfedfef1dfe7fdf034d4953c61aee9ff7c5a36739034fd7f6991864aef9c2d2ca16074b7e989c29e7046c04757444d3f86f4ea42954814d690f45b06deb962b6e1f8b5b26ba819350e3a4b36588910ca01541061295303769a195d7a0d4ba4379ccc61f31199b82909cf516a62e2f0f6ed7b48f9d232b1fd70bddc36520eaed8116b509920666a0d72b917c74b5fece793c949f3a8628e117bfc40fee3ce4114259870cd6436f049cc8e44c2963897f92f01839c98f7029d0ae5b9a908f00de3ebe885f23bb341cd1e118a0881d664a67439a8be538a269cd0e9ee0db247db7a330107a58cf2bacac673a0c1923cdb4e9efc06d5e216d7e8bc95a29414155ee49ff1b8b33f4b4bfca16cc3d4914082c9506af6a28bc373ccb2b37bc4cd0d231a7453288556a8aff5efcfa173b289c2d6b48a7e7b879430147401704491126222029f938e30b142b249eb40588ef4b8c2e558869b2b96d7f3d103b4bd547d6f151ffd37cd47a7d945c8484bf150ccb32d300f69d9c8105e362e0125bf1267a00adcf5fcf954c6e106e5c8125f63a7f6170f812b4c8de7e3fd9135ab6aa2703eae49e00c28471f0c54212ad72ca98a71f16ec4e03e269049021a07b202faaa7f78776407e0c13db436266c3591787329c01cd8fe59b3f319021e28be96e5db126e1127c7407dc47250b2f4661fd723d46d6b0b7864d889c3965f6bc8b3b0ed65a59515c6b7e0364c4e117bbfde2c7ca977dc9163643c9d66cc836d1ffbacc5eb398b1df47223b1164e89c9e33ab33a14d58becdd4d7bd6252190b8bfbd6ab7b66322028b2cc56c18f7646bb77266edfeb2d3629842cde9dc980ddc0fd55512dc5acaea0e9b4be0e8610f3f1d789f0b770872e7f2e0b12d1817aebc7fe3bba51dbd7c7cb489e598aabb13716e36fceb055796a42c88d9e00809861b6540dfd236f20a98d89c46a46abe711efb11177e7b75eb5cd24647ef85799b8b4814e583b85436f2e037f4b565054e2b6cb5b29b1ba8627e8ee5963b02a4b9425b0d94be6c15548125aabb8613ffe533f12ceca01301bf89bb1adec531bc610bad9a8e9c8b546a1949faaf29926302b59804343c4bde249aecdbb029f09ac7167c7472c02116d33f43036aab075937bb742412192b8fde2200920f8e91a859c6cffd4a510b2c4b4971e59d049ed492496bcc0b72dec80593c7a2d40cd4644a04c54f77cc484a32a864e436262cc189ac4466f77252016332af23cc2bf3fc32623612cc52e1502ee3f96f28b77be49ec0cda786874503d87f0911c478d33cb67c02a3841b1fe0bce80cde7454a4b5d0e1126060079f27a2fb05d55ef5b183d45bb2ed015f4083dc4457cb4c698fc2625aadf46db28c21cc6261b33182ba99ceea5189c6c576855bc7ae015164b50c1b1da74e15d05bb2c32248202bc1290b79cf033d713110f46ca252818cc91e09295cffc5251bb94659143e981b0677761e64d25463189249b9c150397412832de2d70a5cb9b294681c54a1380395fcc9be04790a741ea01a12f87a3b5a1afa9f307a94a08fa04a2563bce9dc540a406ab760e0029138659c76278248408ea6f656260e09639e103895ebb2152b1cf929b67addc50fc22b56002a65ec74eb9c4e5578ed1444570f4e0826473683380cb80258edd9cccc07cbe9e3693003f308bdce46a1da3cef4239d068bc26eeb3cd5d1a6107cb30e10ecca731116e0918d8b6aac15c25c2b96fc394d98ec16ca3cf48a15d5a88a437ec14b5aa76d57b0ef02a47ac8ec40d1d0be1d5d130510122257e4cec22119f009348ac679e3943034902b7965cf70d56d9ee7080aeab50d03fc04156d248b548daaa26049b94ede1f53c06bd4a235071eebc4751ef46e757b424d3732cfb087322936bc1fd5db9fc13769e8d2baece84cbae55505db0f410bcf8fea91b4ce0e094060280ad7abae2746330850d544c2f46f4c9a045bdc444103aa41102ba31acc6704fd6546ac0b707c5abdb82155f8cbc479b59aeb53b47a92a6a518399be85f8eb518c94b76ebf4756ca342a03ed9502e60227c02720ddf715d3f27d849c8fa510740cb32ec2a767d57cc7b21bd7f9e9ca78212acf2eaa9e31b3b808f043f6f42b47309fb21dbd87955122ed90b310e62c946a9632a53fb1f9bc2f7e4c10bac40e31f87f1ee1d1ccb39555092e1ff82ae164c60baf30533f77d13066f0ad4439ec5ade2d5e990109add165a455d365251be84b72a9c214a2aa90f7eb09883988c5143decd144498089abfba8d9a15c2fb0d6c1693294d902b99d08b3529fb0723c727fd89e36c47705514b486ee7ab68c4d0945951d2e10b198ccde3f6a276ed8f1dad814f1b1d6a8e3c0f7a0b19bb744de09eb9406d48d319a1c6e70fe6e0df1e041834617dcd49f80fc2ce23835b4f06956e25ea99ae2518c6fbaa80514451968447ec4a6a1e9cc93ea9c22391aa5ea3a2d16537313303adee96fa0f573851ebde45c1aea8bb285e4657e8e1297afd80912feac10eabac22a3c3291c80f6478a08a1a2892258af75ea3ba8c50b70a98f3d9c64adf6a2632471176e99e7e68e5a6aafb7bd354097b7e942a86df34a3ac4fbd28d1625b1844991a6dd3ccda080ce04090ebea9911851987cc5bef050bbace747ec36c661cd29e1a11df12aadeaf8a397b1baaa480122cd202c6252713345996e646ec354837a98d462b53076433aca6c3fe5a6753b365e8cc85de0f22d0459271ea7734a6fea0af6b898e39587c6a2acacecc0c8231e978407a728f95bfe6c3c29e7049570d05d6cba1aa295b471b59361233ce86ed08fbc9bebcc852173931cce92c81cab80a1c0fbb67c654d39be57f2eef1d6f6fd2eba2f7f5cdc72800db38451d02c835675cb2ae7440518d28b8a32594822945c66a21afc47a1443299b7500c9ecea5bf4b971ea7ef17c000cda4bb316e6697e11ac58c69b032c673cbc7044111769a04db4dbad48e2cd145de2bd3a8dd0ce316c3b8d4554586f7210557862acfb745aa2e8c1029b28973d19742e40cc66293430f44d8cb026c4b0b8192af1eb08d256365922320521296b82239e8966969921e1b1268dcb8726d0d4b92ddd3ec79fa97081b705ca6b7117d533a2c87955f43df43551854cd8b7b69b40506070758d5a06471d1f2291c8af9f36de2580c5e7bee539130cd586b36c8338e85c44057e5607a9dc1f906188002124c0a19fbd4c98ab47b8d88efe4814dbae56812352fe145d3e2811c0c3aad7014309eb8cde3bb1ef7267f65152ae1903ba7d1a5144b550437692ed2232dd48dde0964d8d452fdc6f8e34889b7738712f094d8d1dc00180524ed83c1d7c10a8451e24863fba259a16b1c0b3db04992053df73f2a9a97eeadb0d076f7dd6d9da08367420de842d0b48691a0640799898ff42ad53aa187f974468e73513c33e7a34e267bbcfebe7fbd2fe632eee660b1f716724a792b1b0416ae17f3ff7ed3bd6f5d19b280a646ddcf313ade2732ed59a1e4ab8b059cd955da2331ca8d57802c973761b1c79f9bceec5fc67750a9c93025f4a0906a534c09a3bd9154f2855cf677d2601bf82ec9c8a16340bcd8f7b9419daec67a58a9a04957283d62ed69a686e13ad78b1b032484e19251d53473178ed42bb8a88af1677efaef4416da218070af16d9e56cb7e2dd282c15593d813808bb39e42aa96ccc482f7a27b6fab1553c861bbdb12bd47aec90e0ae70c511e642dc48952c568603f9aae414f95d3f2d9fdfedd7ce651a38b45baf5e880d8db75867f6da2f3185d7ce39af99e2fbac6470ff1227f3720042f116f6733dc87a6f0a6e5b65703d72e997f87dd8126d1469f6eb344de11edfb7c25f35645c0acf0c1bf52fd4e09a3b1725cf44a79a9092031357983e514649e22e092aa252dc52be91098e4fc5742310be83650a4a81f108d9c2b2853a4f6787019ae68c47f9f046c453034efb04d2e527c41febe11c3fc16113d4a7ee87a6ded5c850e3e2154c6e528a3684c6a7c067fb6e237a53901a51c1dc89c4ecabe61279acc4bdf803a6206c3995710787c72462520e092312ca11978e213441b0b63e4e085631102cddfe368a85073e702181f4185df956db3dd8cbf1ed165ea727b48af87b017d12a2d35c8a73909a85f0ef89bbf56300b4bab2c43915fe38c1be2f476da46ee2b3e5e38ca76fdacc452d73e6bbafa9acd2fc3fc582c602356309ed6e2cff8f5547d83585cb352c751320959ad30c9e68a5c136a14ca79d59203480a93d6d0fd3ac9ef08cfad2eb6a9fbea599f33e1cec7494630ecc65094a96e46c69912f82d3f5db53c593a307f9ef2fc3c54ae2c7e344b86d2e6774d1fe974f97b6953a0da23c0c5adafcae24ba5b464711d88b8045d1af283c6c24aea6480bb0801e354d6b726d86a1588f48c7f1d6bdf08a5d489dd7b3a219b4978cd3bc654a0effaf58093438e1941965d30a6058268e414754df51ec90600c7313dae79f71627f4c44e10a6e69a053c27635258e72a93785b1a2a7a082b0a0d430e81f878081c1403e90b12035d53feb7c1a7f5f2a4e4f28a5508932d3ab5ca9659c0e8bdb7f0f511a4ba8ac40aafbd01f955e6b7e157e10eb643ccd9f1adda37232f10d2183d8f985e8a0326f034e4bdbe9443c0279670772a6d0ae4afa75ee0a852def06a68ceb40c42896749d813a7fe85334321f1c866b7bd8af0fcdea68401de51efdc67c4e24449733285b6b3e15ceffd40d2adacd187e3731966f6c412985d2408cd506de469a41933fb6a42bb7bb0ded8c6763a0e17e8c39c8cb711cf8d87aa4831cf15f796105ef37252957fccc44294d51b9c55ff2ac418707b7007bb75b64e91879ac8ffda2c75409ce485b65e02720d511c7342eb8820a71660b14c176850ef1e7495b52847814a8c3d1ce08e2d371553c739bd9cdf37d8f5b9b90c64215aade6ae35bc356b1e90a88af86224cfa911d01021915bde3b32209a31be6c19267287265a99202307331f32bda84cd934dc0ac0e0e607dc601ce31fecba873f2d66ee0fcc266f64b6982da82d35b466ec1231cba558e0525ee530a774ac15e3272a5515d0bd4a4e4f449e9af09c5b8a39292eb29a97f258bb925b1713cc179681e1f7df34db90d4e609fb39843c73282a0f0ec0a4fbde6818e1ed6f1a01fcf98f0d03be5a142693f62a52d9d87aa5e179aa36ccfccfc1e09e88b0bcd12e682713a12478d59185a8e779f86491f6574e58c2b9733638a3bd1942f94ad945dca9d65b99cdf3d47458179451988f24a9988725f4172b51184d37624d5f1afab60d16ccd05bfa32f3df26fbd433ffe5bfe64f7283b12602f189f8e448f5f8b4b8ba7c3ab85637d8650300911e92433a96b65f5c96605e81ad7c83b5aec227ab118b4b8eb889dd8d384e26e644d442d5a03d13a88dd7a23a6857251f11e3b4393e233474f8d5ccb8c660d264c730693e698ceace447cd8b571e6a341d86e9b8c04a0ce97121621e86113340be8627168660f092af8a05bb7e0be3afc49f91d02d4cdf82eb2da8cf42315a706ba1bab8305a546f638ec185dc60b09f0bd292a1d7c030e202a87af485d2c425cc32703a5a422044544b832fac7b452333e4a10790501a622997b71d7ffa929a987e403e034c1ab57b6a247d5dd27b129553b80a8ae433f0dc5777043b9712290367690e953914b35b4cd54f33878a24bf34bff0a3b39bbe463fcfa0412e025d4f295bbfb40fc0af7d284ddd81e94a2585426e1f8618018530a036e40190a25e1cbd57a1017dfa938c2ee2b2462c865217092ef761408a4d27f88ad8e55aaf295b565105b2e4ddb224706f7e56f35557a2a641b19436a9243df26b43fe2b9623c2b2275b7e0f89d9cd0bd49cadd7b3f882b4f03d2c45ce083bc8dcbc27ae3be8f7655ce5b6b3d5b6edea19cc9373c9f4b2c268fc87b351258ac77c13bfad6254407e41a0235780dd6027bfe4f6b39ea6781263f278002803aa9186774f8699b30f683fd93496046845e08faf69dc4459d23d49808328109b08012ec16e488f6c22797c439af8f62c65395d5a651b67905e988bddf3b9c7210f8c49a2b8e02d1e66214043e4db017a784f8c3b80b0a4900330f0fcc0f303cf0f3c3ff0fc009d37f1db165bdf851b8a48410aded15eab1172b9bb52ee8a283fa1d4f9398a2bb6d90128d57f72220852087b08e308e42e057a7d0ce1b323f7b0b228d047b626ce62a4d6ca4ef07c6f55c592a7308112a4be2a7fe07f3945042885be97538c17429614bab9e7cb614cf2c3a021c028d4930d923ea51c4cc649124014ca6cea9bd9345be953040284e2d85257b6c5982a03c531b9519773dafbfd4431ebcc278f8dcfb33df1860e374dd071dff23b81642cbf9917bb0927fced0f1e778ee3678537f19588888795262c8fd385943ac4904c2469abf294c7937248004ce8527a63d9a74be881997c8e9a8e2e87b825b47f9992d71829c7bc7640804a28d962e374982f22e54f09dd64c6a3d8cce9fbfa49e8e7c169ac205f1e462f09ad37cf6fe48fc3d0af4742bdbf701792e698bfe290d06388581a3b64479df923744b132c3cc8f0b03eda118a784964eca5f0f1e64668761e6c4472e8119b19a175249ac34c591ef2e54568ad215e3a8fc2a6d4b122d4ec91ed04cba61df92311fa7bdc48928cee583f10a1f9e5cf5b7b1c42abc94147cafd61b777184289de101f67f140234721749f6dcb3928cd732521948f1d4a6be642d8e00e428bec16ee71201f245710ea874f6d1ee94b749440e841238dcfe6c97ce400428f73fcf114cbc2c7fd1ff438bcc8f172dcf2713fa8615b2ede2b8773721fd4088f4ddcfb7fefe583d661436ee2e498fd1e1493b0cbd159f0fc307a503f24c9610e32824d300f6a5cc7d8f77eefcee141b7fc2083db77c79a3207cf299d54e6b083962b928cb975d03e74c2cdf774d0dae34d737acf41e9986b67c2b3859095833aed63c6416bedeaceca120e9ace5575dc298dc5fc1b947c8931793c8faf73833a9721e11f498e63db062549de10a32a987e1836681d75ac7bb1f6624e59831e2b7418a77a54c37eff6ddf9d2d69d0357e1883062597777c36e21625953368bb1d427df0e82888c40c6af230d5c6f86b4e1d298362c1e68265cc296b44c8a0febd650c5512fee36f0cca475797993e62502ae2858860f93cae5c1814b3ce8a7ba12fde3a30283985ca94dfb9dde15f5037c5d4445586e4c70b4a58e41897e93a73982e28939f3e4e7e883b122ea8b5614ae38e580e21b605a52fcc37a7c8fbf8332d68d1f144d69cc4e3b46741b7b05da31327e9c5b1a0c7978376ebafa067fe584c3ffb16b35650f3648f92eea70a6ad7e5eeac1c77bcc9a282b27d16dd79642a2635053de838ffa39c4b41f9d75021ef32de76444193caf83c613c2ccf88005050dc3cc7c977a32657f40435a6f841db84f9a033ef042d6ff4c7933c9c14c16f82126ef29f7bfdc6993c13b48b1d570a1b2c654ff712f4b0638e6cb7c30ef7d14ad03c27f7437c303a6f2741cb293f44fc2b56e73412f48ccffe1ef51114bbf459825988d79a8da048867b7c6998751c5c0425878eef74af34c23f4450339c0711e6cb27da33043507312c9e5484a04eeab03cff658e1cc60441ebd1fc8d1cf9332706088a58107f8f1ce5f82ef303cd2a7d0a1fcf91fb9f3ed0e3ff7d5897c3cb3fd9035d2f3cba147310eec7e481e29e65b2e538c16ecb1da85bef9283bf0fa77bd481321f6eb80fd976e30673a066674d9f3598c61c421c6816938755f92c3750a643ae904b426f8cc4069abf8b97c649b2572135503cacb98fc1937e3cd3408be0b9e307ede0367c33d0ae63bbb3fc09d5efc940e9d82749e5cac540dd9171cb419b7e9c33186833b95bcaecc267cc5ea066ca614498cb5ca0e7c79c3ecf9b660a590b348d94b5dcc345c84fb1408fd35d7fb1422f44b5025df204b7f01c22cc47055a443ad77133057a143ffc9c72d8b1d204054a3a4b9df45b3a817259fe121f97560a014ca048f628f7cc7c29f4f84dcbf3760a9dcc9342ed10c353c814f3a4f247a164cc0be1adf3c409be28f4f81cf5e638ea9c3bca87427bcb21119252dcf31e149aec5f5ca838313dfb27143f0f5305f9db938f7ba2eb4fe69e49f34e28fd22525693a33fc939a1a5907b6c2648c56b37a1586ffeb8ab3c8ea7d39a507298b97fcc3246329d09dd62a6ea38c95bcab331a1d969fd5c4a22b9cbbe841e79dae3e794b6845a93ea23b2b7c448e94a68231fb85f7f74e8784ae85af216bd3908fdf324d46a19f31453ed1d47126acef371a7cbf0b09b4828319e5e7fac2c966218128a47475dfe0829d5c88f50538a1191e3287684fe1d74e6bc9177b23149184023d4f0f142e48eb3e7790e46e89fa3bdaaf94cd59b6311daa40f5184ee1e3e88f25c35251d89d0a3c3cb7e9d909b7b44687a11d2b9450e1dee875053feac2ecd8fdc36841ea3e3380cbbecac6c2174ff8be92a570841b20e4673c2759cda18792418c020b44811a4e6b3c35cdf0a420f1ae275fe1c3bc7b10d84ee17234b5e0c104acc2392baec7b63b67f502fc78cf191586f0aad1fb4dc61868b74b9d2fb7dd07fd3659bdfecd29b0f6af21399349aeed379f6a0e58c1c1159f72fcba307fdbf52ef1de02b28608515be81f5c0154e634615069007fd33eb6c0e6e63681f0f6a8a3539538c5d13fa1dd4f938ee92143b14f72aa2bccc3aa89fc6c30f31c8e74e07c5a54d3e86938e08e7a05874eaf6dcafe315392871c9827e6e09edc5412f8dbf4f2962e0a094eed9fd7fe60d8a9d7d1c72241d9d9d71839e637c701ed4ef843cdba08c7ece90ddd9a0b5f9051d0d1a2376ac41c9091e63e5ec24dfa8410bb7cbf350962387641ab4ca7e1d9b64b8ec52a2418f29db30d9986c8f33a8adb9643cbda6e90e33287555d333f162a6b70c7a902badd89a227c2c9241d3f1b91c48fa3898188e418d937ea272da641f2e06657a6e436bacec110f831a27a9a39bafdeb2c1a006ad5012f9a37c418f19f5e1aaa47275142fe8619274937260e9822e35e3dd953243f0e082221de4ef460726716e419b0f9aef03330f9942b4a04b78c8e778b9247b240b9a7f78bbc8cedb88112ce839d6c7d56196f0b85f41afb7915cee3ebf492ba8d51dfede834408c9ab8276afe17118a7a3821e79ec335365b1b27400087b46cc09396cf1a0d885bbef587b26d6e70ecae40a9fb9976387b3071e772c733975d0c390c47d934c740a1b3aa8992f49bbf226546ce6a0799033eb5f7f96ec18396832a3993f0eaf7ca6898336edf91d7f7edc183470d0f287b1fb2ce68d7ee60d7ac7f156dca499b3c68c1bb41c3aff7ce4b78b946983e6b14ee7dcd6cdc7271b34fd491b9f63cbb9f15c83f22192b9af063d68aeef509ae3fd9306ad76fee2e38986cda041cfc86163ce4e4ee133a83bbbf17ae6c13d2ccda04739baca9037587c1c65d022777e73f0931d4b06f53555e49f8e9b9033062d430c1a530ede6f226250b672de3096f62a2c0c831ee587ab583d18f4ce49a2c6e52fe8712c2307752ef93cbca0cb57aa1f778f62ee827e96ce7d3254ee18c385ff23475d0e62d98292cd4ab77b2d282397453e9a2a692d0b6a7e961cf78c7f5863418de41a591f84e80c952ba81d467d7b9a98a9e3b0821e7df67bedbfcddd902a28769eb3dbce5450d368866ecf1474114fa571a6f1d12805fdafb296a410bc668b82e27af399a3da628482fe13442ba6cd1e5f754fd0f29df869db4ed0aaa733d7b84dd03f967ed68d35594163821a2f45e87db6042526cd61a86fd9d25f097ac60d19ebb257ef4950b365a48fa3d1a63112f4b090e9720c8bce1d47d03aca77c182e6b0dc184193cbe14bc2c383c78aa05458d2b81f39bb554504dd629bd4e8875d1f3c04cdb7267bd8a937bf87109438d97218723899f31b04ad3f48c71c83f4a40c10348fde2d798a0beeff404d97826fb28d3925892841850fd49c7c92c751ca17808a1e281d3b2b62c6bcf1639a0a1ee8a29de7c2766ec95d1440c50ef428428958786db18feb40c99e420a299c470ed4daecb15308c173ac1f1c68f29303cf4c1b4a77bc811e6cb2f2890add71b2d840dd0e4278f990b3327f35d0e3f7ce7e921f0f3ba381a9b28be494f29a815e1582e5780e19e839471b43ce21933d4954c4404979c282edf9a4ae910a18e891d959788ff30bb4fd0f3b22696bcafd7081ae2f9d36d85dc70c1a11a86881eed661aa8ee1ae997311c82050c10225c33d5bfee920d2843860c67a208b4650d18647be0a94fe1c69f8e7891cc44f813a9be793d2e9285077729c21538ae092f509b48f392e33420e2a4ca065ac1c9232c5afcd4f29b49ebc7176b72e63e89042c9f9c07c735f8c51e328f4f9ce8b99781185dae1c297ff68eef886428f37a67693289f9825a0d042f674cf7f4e5d26f9849a7a7f5b37e27e4bcc135a4a7b497eda3afcb813cad855c4e4164ee8711ce8e77d894b4cd526f4dc9d3d85ceb429e4506371c51607a92a28a080edc3149ad025dcc7fac14765e3716442b164d79b6e66628612134af828ecd684e023235e42fd8d78d55fb7655ab184b9e3cbf0521d570925d38664f9ef93b92c4ae88197d7e7e578337610bb05126b8a49689a64420ac9c364610a4930415c643a0abe158cb2c21491d023cfee91cc166cb22d85292081b8040fdbb1e765adb0c20c533c62b3ce20e952e8949918a6708412fca2f2495c74e4762394b0f96827dd5f8c876c610a46287de12c76841db91cc1c2148bd042f2fd481e7936870b3a610a45a81d836b6c37c9369292401917a64884362923270d9b909803a74084ee5315f6a310de634e1f421dd9ae8d55f13184b0017a01a784290ca1d7ff867e9b6fce4c075846030aa1bf95dddc79ae08da22610a42e8398e1bd3eeb139c5384696d79061812a4c310825f48465bbed18d2dc832904a1be077117e73ab2d4db1481d026e43013ba3baad23c20f43059ac0fb276d8b1fc3f68f31b92e4dde72095f7c36e9bdfe3f6141f5d1fb44bf793df47bc3decf9a0a58be05a7aa797ec3de8f1c6f2384b7319173da8e3b12f71ef764bf33c28d9a763918f82db68f0a0f9ffe56c9a0facbc8362e1357764231321d57650a68375e8ce1336e75c073dcc93b556ba4df2d3410fcaf773d0cf41b7105a23ce7dc841c9914c3a6cf2888356dd91e48d9b462b0f073de43cb6b88f52d6b66fd0e38c8777a4d210b11b14a9daca410c164bbad306edc7afe330da7eee830d7ad2d97c1539e472cb1ab4cbe9e3348ce791941ad42099dce3b839fc964c1af43890589315ae49643468164268b967495ce70c8a77746962647eb74c9a4193b19cff3963192a97fc3c53fa162964d06adc237b596f759a8c412b998ecf83fcb0ab11cc90c130662c8d1018a08a03949d0a4c2106dd4367491894c8a9dc3f8610c3851030a87716326ce43c61f25fd0ee52ee93ae8fc5c3bda09d4ff0ba710f66c3d70535acc6c3e01fef7e94e382ba31684587d53ef1b2052d82c69c1fa674511ed1829e5376bec9b0ed1a5916342d97ec8ee72d751616b41293b3f073791ed515f4d85a327496ca57af15b498105f3ec6ba90db29aaa06674c4f0b2d0de310515d4dbadb3943ba4f898827e169f24871c2928152e678ec542ae1c4741bdcaf2e17cc2ddc51c0a8458d5fd6f162e6a2bac3810101a3566dc144fd0724cd98255ecb9c9ec144e50ece378078d0a911f374513d4dc51ce81f7cd0435e7af3012638cd4f64bd0fe3d4c915c32e69f5e097aacc12c2ceb7d601d4f829234beb3b674cc573990a09d8699f3943c47d0c3e90afdd7d5b12766043dea482ec7129a27f8550435ee8ee59cd3a789e927829e66376d0e9a0f410fb635cbc22746c7b910d48a3936351b2cfcde20286133ef548ae7d39203042dc2277898c1723cd6fc40b9fc1c3fbee303c52be7f37d799c5d323dd043f8be0a9515c22bc803e5a7fb2342f877a0c64d6119924407fac576201f41fb6ab61ca8c1d2c454a96338d062a8b3cd331fdf4175033f4d7bf06c711b28b962c347fd576796b6985103fdc3a0394ee7c647e9a781e29174e6388e5f8578cc4071db8e4b7af771ca1d32507c3c8e426bfa0c6b37068abc747fb88a57995b18a85d239d7f52e7cafbbc4029bbc93cf99126d2c7055ad89cc3d0ff713375d8022d6c9e34b1310bf4cff3d69014243b5b56a0dc87fcdc1f6e0e3e8ea840bd9842c81f6c8c4b2437bb107a1ddb3cce02c6d2d819a70b1b3750ec2cb8e48e5c9f1dd2840d1b28356137c791bb5b75aa140b6cd440778bf4e1443bc5e44e03a52dcf42f3ec32934502aa38c02fa0062f8d1a22d019281f7d0af3f02ff9cfde81ad616586810d19a893d2e68a97f925586b8515a49eb011032df7bb555b0c1ac7ba23840d18682e1fc7bdd7adcd92737eb0f1023da549c9d3c6da05ba2673cbd14b4f32dd375aa0e64f8a7b5a17e3741c1b2c506fb2bc34f4327ba7ac203754a05ba6d84bdf6da440f138d8503937967c4ef1c1060ab4cfda4147d6b2192727503cf0e8f4bc4c6257b861023ddc194b3796a23f8ec9e82db42885963284f70d5691d15b68410a3d7de6a0c62b88a6df46a1cc548cd80d1dc58c31a250a77c82c57b9020b8088592f4da43dad8cbea4181071e4c3393a4cc27d48ae329e6d6d1ce1b3e3e70e109a5cf22e73b784e1d84b1135a7930a39d6386062e38a14476cd619fe12246fa022e36a19827e9d017733f638e035c6842f9388248e5109d6de12213ea848a7d396797e61c1723eb7cc005263489393ac9e1227f9c182c63865f075c5c420ff2d2d127860b4be81d749862547490e0f118593268cc380198c0452594eae02b5cbe860c1a309ccef502300a179428748c9f2117236b125a248fdfe5f48d91d559982cb4b1d842468c09586185b100e4c18524d418bec285093da92c1e60851559c8b8020406132e22c15b852c1e3234064f8cac04800b5c404209d963ccd1c590496d3d429dca57926d1adc4e7384966e3e2cb9251ba1bee44f931d6c8ee3f124b86084f2a195e3ebc9c7615e333c402306125c2c423d9dd38f7b2f7edb5302178ad03b48ea8a103fce92424770910825e730eafdc3903ad68f0825a74a23547bb974fc105a6faad2fa1cc4c896c3105a78c7e1e5e52869cb5b085d3cec28aaa2bfa3ec1042cbf795c1e384e7704206a1e6c8987638d1b12f8250e46aea7c2c24f4e402a15bc5bdfb6dbd1cdd00a1c7113a4fc749fd41f338e4d6b80ab9f0835d3105495261c44d18745550400165072efaa0e60df5b193874e9cebc71e562ef8a08b7b9cf0399cd2398d175cec41ffd8f5f5ebf42db8d083b2f9e38f2276737ea49a868c196e85155658e19c85ffcbc80d64714507b6861651709107c5b3b844108de11f3bf0604edd21894564b250562176bcf9ac24597234292ab8b883b527c17393e65d02a54c035cd841fff0f41d74ec75d03efac81e72f0f427d3418f390779b3a6944f2e3c07bdbfa2e3a426e496e5a064cf77992a5778a71c71d092b4c7317dacf7f072e0a05d9ab3cf0c1d6ef56fd02b4d8e21dfe4b0501b3728c9a3a8cb97d1147a6c83121d59b8e810a17bb341bdbefff899943568952e4dbaf14f0d7a5c0eda2eb44b839e9bf947633a4cc70b0d7af8f68fa53d2e668f50e0e20cba4488c57790262ff366d0638f935f6ef22883661dba9134c7fce4c9a0644b92fd2d26899ccb31a8614288c60d1f42ca88082ec4a0496859e630464dcf260c7ae530a7f2b94da58f8041bd90354d848a1ff4f3052df64be5728db0a84a8b113803bca07f2c4152ce7b0e229e5d503a44d01cfe8470414d193331f967cfde395bd0f368c7cf39885a507232a6fabe8f83f0962ca81fe52876b618c3829ac962eadb6c93e962727105357c1cf34fcbaa810b2be829795021c6182a5ea6aaa0b5a68d8f7278d91d3315d49aeec8cfa3dfb0f04e41b1898eb7a17db6f1430aca07a691837cc9814b15054dab4a4fdfd307e51514b409314c9d841ca783a08b27a493ecac3747942403174ed0ba43e463ee8e4c327603174dd02e86089b1d739894364c5073ca9d5899f662db25860146408302c5c512d4d78e72f85fa139060426a346160b38800b25e8e16f3c0ff2459090641749d03afc6053a810211d752e9040e8e0976fa7c443fc1ce133cf0d29e2fbc731c21f59daa0b5313b2f528443eae039e9d8748c032e88a0079176f38554c12a3443d0fba522b27558c747c1800b21a8399e88201fdf88e5254626400255181a3566b80882f72974180be54132461604ac68d498010617405073270d97d8ec29f527015658f102173f50477345b02b8b79fefb40c9c164ee68b64567d23dd023a78bfdd32e3b8fc203bd2c5bf83889f8e796ec408be1eff52f64e37cd381fe7d1def6ce898a34be5408f314f0e1347ccd24f2e70a0042b999ccca1227b72710335dd67c95196dfeb8c5cd840cbf92e480e399fb9af33b8a8819a2ed7475772d1b4330d74f933af7029730c7321838b19e895a93a43f853066ad544e87c799c65bf1659c8701103f52d69c6904f18e851ce7d7b6eb9edb17f81d6e935a7f6c6bb7217e89793c7e1e3c06252b805ca853fabefd11cffe72cd083dd98d7ce1f36db5e81dab1e57479d2c879b40af4dc91cc1f6264b8f9488196339783cde1a4ebb845817616e2f79d6e04c9cd0994f3fdb83c0c29e40e441726d0c4837ce8b842e4799452e8521d3df1f3c5ae9f9042afc9b755216ce89473a3d033e5ac113ff09034178526396da4fbb18aae2b14ca84c971d68b07963b99d508dcd0800a50a87bd65982666eb27e679c28a8f88416d95298799a98379823d819ef129041812a0e50451507a8a2c61632dc035750e00a095471802a1640c341f080112c04acb062043bc31c800118016801159e505c333c3a0eff9ae33ba1a6c957625ba125cb09f53c8ca49de3f9307d13ca96c741900ae7671d9ad0c3d0b124cde513f44c28269a3b8e733c64b498d0e3c955a5b97284652ea1b46b87a12ff7c5182da147b289fd1072a62a95d0db4c4224e4889794d0fd5af42f773f092de56d8753d54b4273d1918deb10337724d478f183f05a43420f3a104b12e3accde3115a6e9bffb0dfbce774843a379ae2e328c4d9c41ba1c6da4f211273c8719c33420de221c7981c8bd0c4c33ac73d92cdb28aa87d62878f4ad389d073945354d2d051efd988d034d24d7786fa10da74b09cdbde3463ce86d0e32cd6d53dd956321742ed1c861cc7ca39303b99106a46fb5732b7f214f220348f214d77acada12a2c08b53da7f871be7ddf8e03a1fec7f1f886e994cb3f00a1841852b887f9077dc7836c19394b58c8e10725242387dc2e1f65bf0fda957bbcf8b75da1f34191e938a40e0939c7f21ed40d99c1620a8f6ad6833ab6399b3fcce641036c50e3ad620e36749063cdb106edf23fd984c8a841cb6539436a2999918e3468b1a3bcd339b7d170d1a04e8e983777d835b13e67d02e879f634bffb1a61ecda0c7311d379285cba3974133c9b127276bc954173228fb2d27192cb70721640cda9ffe944b8e03eb1431683f9511cc3e8e15338b91056304346a54991761d03cc7abe2e4b8a2068d9d718ca1e135ae20087801062b4cdd95a40f5bbbe383175f28b74d55a418fdbc50bc840f162bac3010240b5e74e114d2c179ac1bd5f78c175c282bb078b105a5cb728e3672723fb6a802020da8e2dc025e684149b3b1b4efb3a394c22fb2a0c5c47def4cd2f81e3105bcc08296ba224c7e4c9e67f315f4f87dc2e51c5faca00751fd7576e122a7e94515348dd7f039de4d9e568efcf0820a6abc6d499983e5cf106721e316c0861753d052c87a793c5674b5468e03300083042fa4a0f48ddb565b7647efc7c8926180f0220a5afb07215b75a59c81a18507bcc615300829c30b28e83732da71e016d993f2044d3c38bd8f5ce9bb6a2728369dee3ace79d104adc39cf5cb42c4ed6d63a4d39041b00d2f98a0c8dcb487dd162ba5548c2c2cb05882de39112c66b6a4c7e32bda69cc805103c6d25de1851234bf54b9cf423cba0a99c28b24e861ee91b2af7c5f3928bc4082ae1542b22fb3d2cf5d8c2c193560b4db11d48f7119d9b7f3df3e62649911f4f8dbe96cbd90972ea7085a078b0ff1df8c2d64d0d80012418f25527820bd4172e55c1f5e0c41ff8c1f6e2ec4974b9b1c5e08418fe925c2479e7214a382c38b20687921058d0f7285d8738c1740d06296ce1c22ccb3a79418590e83ee092f7ea09f7847b3236217b28a91d530cc0b1f68915fef2534cd876c01a3d769c44826bce8412985d2defc93a9f2173c50629945a488ff61b9037dfbb72793574eefbe84173ad0d398472958fa0f3b87bcc881f2e12e4688a1d5190c1a768417385037898cc88f17236bc61637d03d9c5c235fadc92a33c20b1b1c62f6d81a72f72f034607f88a0e70e1450dd4d87f159ffff4d3c531b268a05e6859301e043360d4e0cdc2cd8b192831bbfbf9c52aed281223eb9d060cf7ce1732d0637f4fc5c83a1fbc88811a3c937ef8b72aef28465a0f5ec0406bcf54312b77746fef0bf4e8a2426cd37c9573bce1850bb4cec13e7cd83acb1cde02753c9e8e1f2652b858b240cfbe5149c772c386172bd07398cdd1a754ee529f33bc50819a2b6d8a2186e41e39f6450afaf0308c664a39670c2f50a0f6792b861727503b4c6e2529598e37e8a55f9840ab8e3f5bba484123e6520afd3a9acf31f8f869b731b2e83648a1849d4fe8927c597251d818853a3dc17e24dda5f05144a167cafc7a971de55c8d2d64c0a0e1357e8b8542eb90aeb0677559221bc20628f4703264d987e162cffd84123464e4c0224dfc6b6c21c3135ada4996a1cc62703ba14ce54ee7e870e2f8727798d984feb675d765d18626f48edfdb49026123137a1cc7b1d961e75964b13118866b21030b3e1e6c604297e0fe1acbcc363ec303346250e560e3127a69e7984ddb13f3c672c386253469110b7692fd49ef5ac3462574fba06c424c4a681ddbb90726993dcd3f093d54082316cb2209ad83058d182d9272a64442cf71546f5775920a1324b4309da31cf9f8f38a31f908edb7f6f2d3dc44a4080c1b8e50ec7d7259cacef0008d1884371aa1c7c82c69262b7b87b0163618a14bfb4ffa30f79c6256586c2c8214a126d9130f53b66264553dc06400c6b091083da2e2e4f9d05107bf09c30622b4f20fbbcc3fd08e99372f6c1c420f2c67df449e0dfa1a2a6c1842a973bb89fc7bfa11f21b85502ccd8657bd46ccb86b6083109a04bbf0be5caef72931b288051b83383afe8f9a3146560896060cf72f26083dc78efb7378399e63baaf0884f651dd9e47c390d1570908ed8330c94fcaa3bbf730386cfc41cb1d75ee2197b561c30f9a664b71f2644bbb6f7d503bcba760c1272bae830fda68c7cfb817db534ddeb0b1072564cc6f3162c7b11f3de8b9bbef83858dc7b66cd8c8836ee1c30e997f3baac278d03c850e6c63f06a8ff433868d3be851d8db87d09a1836ecb047a1b3e9818d3a289eb43a864e1132a4f7f4061db4cc31ee76d25ba6dde7a089471d5eb622a4d851725047b4d35d661b9790e2a0a58fb3a2e3f71c744a9d0d3868697298b27de7be3cff0d4a0739a44e31173243bbe1063d4899f37e94cafe2a67a30dea46de68ab8fad4def0d3668fb12f244922a461e1b6bd0624a1d527e25fbce220236d4a0e7c8c6364f9ee9cbca0e36d2a085a4f92ebbfe25458e18595589063dbe8ee3871839ecdde60e1b6750225c08e7518fa40ac90ccb88fd070c2c83962c927cd899d35c4d06359cf9758e236f099f31a821c227a49c52440c9aa7fa8a9c8441bfb7147396fc82414d9ac29ca6ccad243261e30b5a4dceb8193ce668aff782dee6162c7fa0e9829a722c1562cac8b39d33b0c105e57348c983fe84d4db5b50729c23fe5b2eefc77616be818531638b2cd6b16002820d2d282e2e9badee80165b0386f3623183686c6441eb38700f724bbebfc6039b058c2c2ca8d1a1a9efc7e7ab3431b2647495161b5750672b87b85397e1fd8221a3cf8c0d2b681d77211f87b3c9623e461616ce592c63160638820258c44615b4b3cf8cb6cc410e9702b1410543978792381e75141bc3116c4c410f8348a7ae1ce4cd392f3f6c48410b1f272abe6be2525f636bd860230a7a59a52ca29993bf075571002b4ac1283a6c4041cbded4e52e2968a7b49031630434b6d0629d460d226c3c41cd1da57517233c923846169913144979af3a0af31c6f3246160def000d192180d104bdf3ce6d82ec7c842ca9246c30414f9bf3847b98e9ceaa185923582c1a0b19bc812caee8800c19078c1835ae08010c2df022b1b184ef2288c771fa38691d23ab03326460d15798a96143098a7b124dd133731d45091b49d0c3858fe27ef889910563091b48d0376648861c58caf9b278c00162d4b8e2025a60818501aa38401516a8e200551ca00a25545e368ea005e9f062e3ec56e6da086a876579938bcf39b54550642e7af272bc134e4304ddff3ed9c67948f00c417dbf37ef16afd8b208418fde0edf8e47bfab725ec0043682a07b5c221d62aa81a06f7c4dffe1f74f628e1f28c972360d7ee75f2dfa408f3c11b3737f3479c41ee84166bc8e15471ee895bde7395968db1c3bd02572969c3e88e840cfb5115e95ae45e38d1c289bfdfab4039b1c73e4093670108886a874ae6402d2581c0e8783e170180c0629b32e00e31408104080b0341409c5b2280ce4ed0314000447281e382422161c22160e18101218080804c260604014088502815028180a8445e1714024287e2e4410114be70b347121a8d17b55692ca54a395206effcd8a78f56bf4da49d383846a0abc2c2da1662054a2cf91ec8df5bd4ff716d4663b2093c52680fc080dd621f5814c117a61c2c5edcaf263bfd844be25fbc988009570d0c36dcddb95a0c99375ed6262c153edd349c045ef7c1d692108d73bd7bb4cc5980a4d22131e704bc77e60701280ade49750c0f94017de7afe251012196e83d42ab2fc9ce18888db86e57c53040739e3a02c6cc590488c9a8a3ee86c02193dd87b5b2ec7f1191ca702089a79d2acb09b8551095ffb70439823a05f30e64cf08be9b384766eceb2173252013c3283112e2aaf8fd014b7ce29d77067e419304885a0a15bfad18a6b55a1d02ad0becb05592f62ef15a20c2a721841dd905d2bae195ab6e6116960e84c0df3e68e484ef7100bd117cafecb368e8ffa64c742a197d217150821457419352f49132eb5d80e1be28942b010af719419820ed841b958538bdea243f6484631b3e6ecf9562a9283fd22b2dc9fe7eaab4e90294019027ac577edaa1f8484ad9d1ac08b4d7c4fb5d630e8dea580ef3f5a56307b5516513ff5e58d717972063ee348a7440f2595c68aba30164e9380d7929e48a3ae0ab4aee0332f2185d20609c35dcd9340693ed5e3153866303e0b0f4f2c0f5770ed2892ab6b6c6f5b77fc7cd47a46a4a45d56b5197c906089ca8d58e959d017b1a95caa69fd3279dc1bf89752deeb0e1beba3950a63622b0971237c917ec4dd439c78db414cece333a1ce1424eed2f7b79320ce3a71da30b295c20e623b11d109c45e0086aaa4fb0b62fb648b4cc4c801085378406c96f8a067d9e3397210ada4ba6e8389785188440581a4f5506d37a8d18782f86db1f542f98bbcfbf1ecc48f4404f7ed469030848c7290fb10b704af54e42fd640f3a20962386fcf359f6bb3698941ed6923853cd8da29b21d269fb4a4a777875be02a4a723d9ac08b5e76d7d0ca85cfc8bcce8b9e19953daef3c1ac9cb8defcfb2647a6a22e34121c799231fdc37ba1c3b34db9ecf0858f3451f18d1301ebd0f33df5e6e02959938e2a0a9b98c671bd3a4b8c834b5261d5c0ee7e1747c64b6f30324f2acb8fc8266bfc0a481e118f3e421e51f3c5a24b53a721451222650d3963c3f38579162ff9e86830005870191e492626078f455f3119d4e9beece502824cb4b0c40c55b35fc89d1b69888096ba695f7ffdecec363ebb3a8c5a6ae9a02c44830d695dc191181c19ae384d4710c90f7e2f40a68aaadeb6a97350388251dbb04250276f9104b757f59ad58511c91aafeff4fb014008a6f07e0f6a6aa6596e449a793efd8c7a5ea7e20aa5794156afae5b808692dc42d704b56fb384137c64977379a76e269431089307cbb437d7675f4b66c076ab371129a2e7b8ec28e36386c4d58cf831c8475b4e0c4751551d166691806d277dea189d21921a110ce8e901167bf747762ad79d3324acd1889c0a19b3d73da1ddacc917a6ec082c9c730a34c370ad5a29ea431acf08c9fe531c47cb284df29118878a8172703d270921dc4095e6196784296638dc8f6c5a5e7a08d9ce38625320204fa23e0b50e801ec0132006033318e602c94a5dbe271a17522c6b8d16851edebef086a813f3100909fe479441ea8f84ba9125bd565367cb449b5499d347c01d5e6583061013d04b83182caa49feeb1390c2d29d23db8ac746df45636003c56f295e107338308080217438621092c375b0e0662a7dad3c1c19acb42ba8d886b8a39a224f51ad020d7179e9982d6187a4daa0628b9f67cd1973bd5b513bbf18401abf7abf1c9a16615676178ef515f77bb01c5635409ac02915e492e397b039778caf3f9464d45de5e2a0954dbff1c75b0eab86be97bedb5a3f44a0cbce8a04b0ef736af092c1bfef425a55f0f68e05d87fc084bc813c3b988c38993627d7ef0a31e585ff6cf4af8547622ed87f2b27e0cfd81bbd33a640514c65f73f6cb5be8b00f9b7dd286ff10486d541e26891acf2f165197d569d3bb41e561e9b86453ce5d5cccb5859c2088c3e9991856c3cc33469777e95dd57bf18b4e1693a5a824049149a6488bf867624f7d351d4b159270eb2e4d835c8e1071f4ad237b627a5c15c0f045d9e06fb776eb3cece63174b06a3298cf4f1deffc7d4ca4929fdc791376f036cc23e8a251e0e7ab9c39cc4673eb9be09c1d6ccec7a3e322993926cce72985df8ea3e00ef67449e1831ca41dc6068607294db503c578ff3ab369d884f7b667b3cc0d38f213608d7f2ac2be73cfaf6680f4a4ea881152523eb9def5fb66034b505b892d2d0dfa7e18dbc60c1f1aab420154d60011021ff7fc0cd30e36d48ba9be0448e98dbc47a837fcbf7d94cde68c987f07fabb5480afd23c9ad1a15ee8e0d2d68d358eeb4ccdfc2f5cac8963c15e76e77190988484991339d221c978d587c856136d1260e9a26829d9473056b7e6bdf8d52e391202f495d7dcbffaa495ad0898ed23155a1e21309c4bbf46e0658f840e0ab898336be263a92ec82d681931598f4850130305b84f5d7023994cf6d8004be35194a817e69e62b80ff9a51b2b61ab79ffa5ca092cc14c88ff401fd228179cb5fa1e1c218d5c09af1953b16bc17a14a7eb84d55ed59bdb680b847422111aa21859db7fff960e9539a3a6d48a3568ad313ee3726d10af65680e1575a1fca2efb9c26e58b000122512572cbfc211efb65a4bd35d9526866d74a9131bab92ef6b2c50d39f7219999dfb72f6dbc8bafb51d28d65f7129990d4f00777e405658e1d7685709bfad5b07edb3e5b68aad89d4ae370ca0a3a9dab8c7fcd86d39cf907f076b56fd9886a37039265e2da0d71895a9f17e43cd1dc017b32a56078d98d6640d7487a5c19800b812300959861fed99e858e531c23e229115d1d3a99e0803399026872ad5d28a3b1eed4b8613bd17b40b6d412a8e3889359e60a9acdb396252a7a2a7959170a31c5cb44be179de9b9deab9de64e3034a3f06fd178364060ec66c125b4ebcddeb630bdeb5e8bba4c4510809ea07b461aedf5ab5971fda46a0ba8b2099aef401e8fff0b9df91b9c15b4d983b5cc7ca61e45698c4b64f5c391a55ae4586d49ad579314a622c46d09022c29661d9fc37e592f242f2d69764e1040e22c9340af1c5897a0ad053c22d127bfed7aecbfcaf518d4bac4e4d66991523b5f0bd1ad7ea581ef02c6ca327c9b288bc04cd55a7a0711b060b35cbc21af5552caa3b1c5b3cc8d0daf02cb082e2156eb296b40b4ac1994f619205031914e96bab41005279a6d0190e56b800b5d75d8422f878d63ad98a321b9eba8d1ccfb410d06281b0edf42f5d35903304ed1a4d2014116516433c5891c3a5c8a0baf803319089e63742698865f997e49cfb548cc0701cfc908ecfb48ddd466473dedc8c85cbf4c76ff4c89999accc70376e66df37e296611e664287f9b55656a5194377874219dee61cbf757476716737239a99a1a79d7b9121a2cabe72636ca558cde1101af4c6b629d54110a1b0294714e12b1681975ed96e401fa8d25e7a311e00971d3eebb20e5c27debbec469a6b7cd53ba110c3be0a744e5d7bfc1c6624fb871cd3c7cf49aca0cfd84bdb58c466a6dd6f241dc766308fb41d96b289aab689fd2be3b8188717acfbfb511bf4a7be53eff9e3e9c230c38d27d22c4a52e8ecc483823e897ac1e33dbec016a136152aca44a15c8a9aebb233fd81e137fc5dcf8374124177646b5b325feb0f91f8fe881e23c08f6ea543762e7eeb7e6155a589eeed3771d0969769078025cca6e4594705e11ce0b24fb4821fac5257204dfe297e1b84fd82eb910f9ec5152253d266af110b4ec44924547a6181f8a8e3af8be3b61eda8b8ebd5a4dbc344f3e3eab283eac3faa349ff925a61479dcfa9b8aca2dfa4059ddc2a05529a503a7ca47240981bc784697e9380ce317890d2afc771f54bd4119c8495c5e0bc4eb8d03403f5a9e50a5b2225aa579fcde9c75c5dcde1b824d042d7d703078eb6638195abe801a2c765b099eea38a3fe636e018d28052cb75b314ee2a0a7cf584040c3dff72f17dd0e09dd59185342fe86f0fcfd60f50f0781b9f522c1b37bd52dd968e809e6e6a9103ef7ff140df37666d450d5ad5adc0e297756042c0144a4c890af52fd81e2737083f33430c99adb5e500abe9e671812c4c7e393eba9ba21e5c7c82a39b3350482fd9ca646d285750305a8cbffbc1310059e8d628f50f3874ae2aa4ed286218cf7242ce18d3b0736d485d895ba257537571de20e6780fb41f081f10132f5b4c7fedca37e561c1f5309df9753ef90869ff3f23edcaad7d6fd11bae6a94aba051b39a6dbf8c9b74b6830aa89d441fc629257aa84ca78be4c941e52715bcd20398d0219468cf724bcc0bc1b4ca85ac7cf8266a85152bb433f046a415076637fe57838d05da5691ac8d53b80b831382d4af6ce3d320be65eaf38095882930084c04200161c0d4804f01668e40ad6720f11687206dd5fe4f6cd929ff0dbb5b180eb87ede37fb4057c46ab5b566280027dc954d5e846b7eefc8e409ef4c4cbfa58d4691c0ff933c2dd2b5c87dacdde2acbd6341946bb50d509dbea442b3598dec0814098ded493bec25f0ddfe155fb9a72a2652e4d2cfe8ee012d2f7dff6dc83d7017071d83d1858a6ca2af5f2dbc480534a2ca7e379982ce3b68646acc0a1c4e3258bea243f02f3204b1e1114aff857281effeec2610da2f47d8200b10c4df68ec81e18f1726587f003912f354ae05af870b1c9261d9b4d71ebdb02b362cc98047744472611f7328a236bc4c98ee9639978f0053d06464c5c66801266223ea4b3f4751a45018a09a66ceb0a5c4df0600646610a8f13fbf5e3c8a63b86a02e2dea4023ddad1e8e34dde07368344aa6f66e5bdbd55ea7205a12da921a900c282df81ab50d49e10cdf545a822f6b18653cda1b4ae05398a11be479f9bf9cb738fedff9a0f812319c11d514943106774415f415b852011486d474687531961ab76d574c24e001989b2041aab8054fed36d78d312b4af8c33606d29e8d917b5ff75519a40a010eef5e276e0dcaedfeab9c07521cc895c19b03971f0d24fe5e800bedb0ed9d299e0c9c9a18e01ce8084366ffb6800e2ff2b500c958b7a2d426ff2bd45771d4ac357f7560cefac6c385e4700050a08759d511b4f97992de2519a545aedc938e96e97a20c73b27f37077fa4bfcf2bfa0ec93539532b259a65d506f4872ebde5d798835d88e6f1b2042c9b0f2718f631f2f926106ea3e82a0b26eb97197142765a836f3dae5c05bed1b68ea0f9e4011a6b026f60776492f18bafb6acb52f0d50dff6e771a0148f02aa1214744bf2e267cec8e107c81e1caf5d49a72419ca69905897c6108fcf09291912aedcd5ef436cca2e788610ebb36fa2322f0417a39a1eff21a6386c315277ac34d711aa4110f00199cafcac3e800a79c5409472d1fe681bfdbf7a055746bd9ed4be42608983f39f793b41bca0fd8c528d465125bba24a500bb1d91b72d338077ce98b229628f6a5c8a65217752998b8701756866b72d938c0fc3c23b7e22f151f26bf77dfaeffca2fe6cffca9fa36ff417faa07c587fac3fb7efe1dfd0aff00997256b4000a1fae43ce56ae7febc9273999b6df4dce67eb124839db21d4107893d24f3b874e6e80e7407c8a2cc02f03a5853061a9e0b8d5f6a52f0c48c77c9ef40c5af24104d5a5134562a7319c901283f163103e5f87f15a13c5e159029d46b2c1054f22737d89cbc8bc59b06029680b170aff01d86152022cdfb39e1c5e619febca85f875e1a2ff56fb177ab57ab37c03ba86fbd8ab79b83b4bbe7e86cfc4075375befed25f8eb0c0cf4f2f75abcb5ee0cd53d4f8fb24e1dbd73f49e73070b329d6e36eb4e4e62bf163a75715d8f2e882ea11be89e747db3fb9a3451d5e97891773dbdcabd01de59fdd60bd2a30404d63d070cdad54dddd7bebbb596b3b7e3b60b05ac8ba6abd785e83edd715d9b6ed2bdeb567439ba6fdebdcb3d0d90600c66eb35f046bef7771378b9dfe95e062f3276eb126e7f1afcbccbe941546279ef37efddef95b71ee14ece56e1ddd7e62033c06f09efce97b83be0f59d6e1d21451a9a19de5e929b875e43ef5caf8a37e92ba4ddbaee7611190befb997d019a2ae97ef3631a818c816d9d5f0f2fea2f50a7a21bd6b5eacbbbcde76ef63af8a77af6f9dbd71fc4b7f9c2bedbb91fc6e5cc34be62ace0e0365a0d74820c25bc6b573aa2c85241bf3d70ad666219b3a527d3b857165cc06857d0db70cb11e168cdc6fe1efe37bdde3b2e772a4d1ca8974c5ec6eb1b81a371aa5e18f99524a429a318fa8ac19f0cc6e85cf70e5d334aace1eeade860bae60bbbcd014f7b4427a65cefcbd104ff0898cde623bb0f7988a7dc8d118f81e8b4256ce248989497ef88c6d853117ba0bf6908ccec1e80d8dfb01bc3818f78cd9106349a9e78af2a871393618198c641a8b3de6defe96025fc72fa37702758e7e0ccec669af705169331b6bdd85f50eee6713ea499f6b167f8e3aeb119273de9eb05ff70368cf4109ec12a36344d359d0b1e8b0d185364d440298ae4d2755b1f1a82ed725e05968a39b90ee9f5802adaa9703f586be82f714a87f74094e6e29bd99aad083063d739ace72d668294fe8160f5f0a2b6ce9db3be76495744e6c7245f906e624fc78529cb0783310f02d94d196204d5d2efe4636a7e22eea2e6839c0c7b1cf3127aaa183c13ad4512b878915cd6c5dc001c586c6a2c08e46c060359ecb4410c7d895251391b887129455212fbc4ef2af8652c128120fd7ba145b71834b0a00e4965516bcc8c50f2245dff2a651bc656b88f1ca7823dd550e8f85d1b37fc98596468c26be69a07f37e2d95b2872e7c08997d8be28c09fe411221c1222b758331844082b1adc781a453a2178a9434259d609d11a28e5f4dc5c6a96ea7632931c5746f8e2a0cc50204e73f8d4079fd29f82be9a9462af4e8de2c512e8c4a4c6f0651bba286902c157a04e33849976f4e27c284d0287e272c3747c295d09510133566e0e7637f066651f83aece5ba06fad102dfe8d2f30399cdb268faa9f0f4e6bb8f25bcfacc309d3c034d818c8825e198675db81fe040c217e3086a028340d5e0e528cb0f9adfd7e140a9b79ca5169d80d46ee0b7ba4db831d02c78301017c609d204cd822f01f202444840331d8201fcf949c0e10c21574825d007dcc8c6ac7b989b93f2143ae89f8a2350806c76002823a64867414db238178d936dd87fcb127388fe4e7dd40f1e021e14410186c0e2e840c03c36067003e804e18e857b2c396f913678357ac20d033d4ef8fcbc8396396d62e1136de0c105a9a8997b1246a8c1f843a288cab1e9dd4e8985e2b40f95ede8c734a5b471f115bb3abffe63354d73b59000ea0005801a076408b020eb018c04b1857a45b9ad484ed468b29805d7dbfdae70045001b000d70080284b37bea0913a001e6ac004cfb20d7cf01b48844968d7a80510068b99ed3574b80379831acabf314a78acc60aaa757e0349a02a0067800360029c003700990250081257b1a800ad0000200a600a0407b00863ca8a9ef94628e5932624b4fc4dcdccfb279e228437815403cd93279fd367850b566476cb31688146af05551e8f775edc2e5e0136a0b7f6dd979342cb421a1249c3d030363bc9e47e411647073542e726aa003fb5f6daab89910fc0016db731a12c3df4adc0d7bf34446450c735c850e783b487e23b6257652bfd3e1a5d94c692c0452a03ef0c55de2d20a20089c470f5585185a83772f061903da806970198c19d806b9c1c9a036601bfc0da0c36043e2a10eac0880070e0931c2c541408244383cc08fc0596825cc234816a612e6133a0419bcf09961f32b6c3612d369ed0a1b1f0259d3df12665439e5cf264437c226f0bb2e41b6d9bdb60793f596eb89f2012504e10227612a613e840d2b33c66a36d8980f9f2060184ca6ebe4cb9104b918f40d7e06a7816070d40d167dbeb4d119026da07c204938271c4808110c839b034a02ba22ccb41d80c6258141252c838ced100682c080a283990bb25f4a3a6184b0b129885e6315852e19dc0cde068cc164e035d8a6c13e7215bb08b8c1d56065103290548345274017011a98061f83b00169f019e00df80c9ec1dec0131a4cd6eded37be816330e5a043600c1ecb60196ea0b7f80c3e83c671b0cfed666e0883968130c83af03cc20c6b2d76664ea0778338d433eeeefe6a650ad06d7442081b0a2bf7b26b6019cc0d60069f81de203198c76005c3762806d400763042d01b9c068b413e7c305947b975cec077409c504fb8247887304332b0d403399a7903a035b81bf6f65ebd26300e17a67b38b8e5057ea133209083c95abeb4a80543c882b03bb04ee84380165e3a61e3a2b2307e25c4ea819612cb6a50b5de278a114aa791ed99d066f8ba1324834e30d807e574fd35c2c1603dd849701f61063530ec81f9304802fdbd78cc28d839507b0a64d7b76dead53e7c93d33402660e591c6697dd3073be96c0c4840dc710dd6b21ec7bf42218c5081816b8846b04182b6cfe7c6abfbe1e2c93dfc28fd3a01a486307bbfb05f672128013ec08c560fea07b029370432019700f7e12a6125c803043cb430e6e066d72b01524dabd403de89cd040380656038a034c420fe1881a2c079e44c268100c9848c6206ccc029e7744b70b3440b0a6d0013c0c3c0c3c0c3c0cac4dfcd6d7adcdbc05996492d3d03e5508ebba24d39629a5e44de39f441a5167ca13b7ef90a20b3e0b620b2d0c962cc168ea5042e36e890eaa04a7aaa593888ac95644096e93a47b1da249b02f1e9398b3c916fd4882b11cf53befe2dec9468293cecdb593e5a43406128c9d6758fe08de84ac50e23133491a4730b2bff67b4735c66823b80e96a4549f3ce89d11ac2621fa26f97d3c4916c1c85c79d36715a1639228020b3412c146d58c2d523bb9668b091a88e0845276a3a5520aba840cc149328fdafc4107d3642138f194e89e5249085ef7db2a4cea5c264c06c1c7cdd7355a4170a952bcb4e992283a0b041fcbd3880e566db295008293398b49ca740cbaf407be45d3c9d3d9a4e1072e7484be6a2bd349a8d0e80327cdf3aa72cbbf4585061f52a204d11e78b5936212da04b7def5c027bd5e591ae3eb79f2c0b9c93a2a25cb0a428b073ec73f93df62eec099a4dc846c91164bb4d881ad9ce4bf53293b9aa5d481b394cf045d5da1035b72eeec41e5e53db1320736793e5125b33edf2a7260d53f74964a2194928f03634ac558caec24994170602beb85d226e80d6cd612af5cc93d9bee06fea2978d09253a9da70d6c55fa3ff71cd52d1bb8ceb1e289a9e1ed1a788bf9645633f92566d4c09b9d0c5aba53a8a434703aa58c5ebac43249140d7c2e1399b1fc5a058d33f0d71fb35745cd5065d028039bd45c4d59493fbaa14106ce4f4c82b6335db1928c8193dd524ebef99a938a18189d529434794278520903376e826ec8a47bb1020646e8bff760514db3f20576a345cf5fb526c5bdb0c924664cd7a982a834bac05aa7ed9d9bc905b6c3ec735f474f4a32b790b058d94665ec58f3911c1468688135e982c864f23f7efcb97103ef7bec7014a0e9096864416960814d2d9a84436d40e30a5cae2a254cb6b05c41293b41c30adc8a0ca1429355e0a44aeeae1e4fb60c15f82c393b2679e9e49429b06351439a1254e511a5c0a718e29615ba89058d28f06149f449b1a4072507853328f58ba6d913381f25a7fd3cb3d22b9dc07e284f269324a4d104ce6de4c8ac1233a98f3498c0bb5a8aa9a950ea8290c612f8a0354b0c1f1d6928812d31689de4f9bfe41ca4910446b4944a761eb3de83349060e58b9a96fe92a0a1048d23f041a8eeeb99badf46e0d4e5527277c84b825b04766b3449276e6810816b93b32839b35892541a436033a8b74e2767be6c823484c0092583ca6af6b1dec460b0e9979359bb8a27210283ed2b1364c98ef71de22fd890222bcc8367141dfa8237df2bf590a5733fec052b723385282595480d79c189799fb4c9c25d70d993a4b7478b09c2a40beeb7d35b29cbae752ef87cb257caec6d0f175c6a2db16bafa4995b7082494d495473ebcadb82dd944f5fcde3a6a45af027c9f1f2d4346dd382cdc92e09fab45970a2c49cb26d9e8d5e65b260544c4c9a4c932679c782cd5ea2b299c792731616fc5f9f3ceaaaa49cde5770f2c7f3fcd3189e5d57f0efb629c6dc69dd6d2bb83ca61f73b97e3e1956704295d0a7eff45b8959057b3ac850f7f14d8919557019a47890f977e6692a18e5317a55aecaa74c50c1e9283165916ad9c4cb29385139dfed56fcd836de1c6698a21ab74c25774ac1bfc53a3d3284126c52f0194b4dcc1b26ad2aa3e04ecce4891fa46d2e0a2e7fcc5a3b43c1fe77b2cda3f2c70f0f14f96776cd7fd61f1a9654ccf804d73b4a3f5b48b3b3be5829667882cf3e667292c245e5ad139c6993947c0f4baa63c7093ee978176c2c5797ea36c1c74b2568935212baadd3045f2908cda27e1ed7ba4cf0de991f4dffa44b4a9860f427a1bbd16d34275d82cf24c99f6926b304f71a969dec64afafd13c07d231a3128ceaf50d4a4c929c5344093e8eba8c26e7754a8226c1c88f67490a133eb64b82af24c9a2936e8bbdf148303a9b78565996d9198343518e1c7cc283478b51823052d08112842146182708438c32cc8004dfc9e47437717b04a32f0893692b5f996e8ee0e4f26c92bdbaa735c146307aca2e7b5da8ce1d46b09e97359d9caabed1457092e82cf182cecda32a821375e4c9b2745bea2411fc65f1a444ab99a42622f8cf49b6fcfb9d9f3e04e7c12f588ee3bf1a34041b324ff4e5fdcf275808c6dc3b644992a426a58c109c868ad18427a9412b1b049bfc4af7e5310982df18e36ba9a4626e522038f133e3552725dff980e0a2668ff1cdff037bc2734776cc6d52ee074e8a29da6ba6a566b0933e70c2a2c6d1d896da1932767f98c1073eeba25a4ab2cbafde031fc5b48a77a7b09cd1036f9ed5a3e612b4df9a074666502553795a0dfab9c30c3c70d9fc45c9655228612e72ac4cecc0757ebf3f9d2ae536333131a30e9c92aa7ed3473d4154e8c07930f76d171b799739f09ae42e214d6a911bad1972e04b9d2a617789c30c38f09ea4b8c94f75d09f7c03a374c926ed348de8b86e0262861bf84b7dd59777a23ad886196cb8e42b49ce11266a41d4812366ac81f3f04cfbd22625d1a9810f4a4a6e31b865ed581ab8f4974a4bbbc69224e9f230030d7c75fcb55862859faa70a8253646e3193831b59ff44ae357e29a81f3244f4f652769fbb932709973a38ac6d3a5a52123470af430830ced57dc8b5b23f21f65f0d091e387ff188fa76387f6983106c67ce3da07999a536862e0eaf429c1537ac3c06bcc7623c5dc5b93e817668081d39a3fafc392dceecd17784baaf3dbcbe2c20c2f70726bf00a42755abdde05764cf60e3a5656a730830bfc7ff6944e10da63f23e29ccd8026b9a4dd2dadc5962120bc30c2d70e6257e3491ba176664811f73f75329699bb51d988105f6d4e5d49583c7d28db760c61558cb65a95c533251db92608615d8927d2a788cfbd6f72883c78d31a30a7c3c73511ffda702bbbb194cfe98e050433a72a462831953e0dfe4f65c2e2e0fd2bf1418b96aa2544d5dcad1db30230a7cb25fdd4cf96453a33dda3052d0013d28f8c172aa3cb1242d42cc78022727e9d3a2b6a6248e57c68f6ec20c2770620cba9bcda44a98d104d6729a96d82787093398c098ccff1f732651d641e6862561c61238997276cb234d9e28cb8e8485194ae0ea358a097e3fba1a9b9104de2435a26bb44bc30c242c5adf5e6742bea80c338e60caa51d2645cd124c439b602769ed1c05c30c23b0d7f76be1fe6e9efc22b0b6299e2df849dfbc89c088f0fce9639b9ad664087ce7934491d79f59af324308dc99da92fc244f30182f292993c9eac4cb3b301851974ef4a5a73cb9f30bde7352ba93abc6177c99e4375ec9e2e68fe905278752925c25575ef0f93944e9135a6de4ba0b4e68d2a3b3094a74c1f787e79283fe93e44bc905772f6a479f2c5d192db8e03caf5349eae52dd89393d063c24b7d8ecc169c9824359922a3e8cdc95ab0dba5b6b172df9b9a169c261551aa2bc876cd2c58f724f707e15ff275ad031f3774ece0d13a40810e12981861d48fc1a38c06c882fbbe8d232d9b30d9772c181f8bb9531a008bc4b29b2497a42727a5bfc224be6582d0ef49da159e7c63622a59cd5664f2077da2e9ac398eac3899b6246d7ad5ad0c1f377057c197144b52b92296f4d3d28406a882931a524f0ce9c9a42fa582cb5e1dcb6ce38dd98f0a763d4591ba1e2abaf753f09baec24c16edb6256e0ad6838b3c3998f5e7f69482f3bb54cb4a4d273587149c88558799e0a32cec51b015f54b4ebb39dda64614ec987496a56a28b8d4494e6232f9ddc80b28d8ecd027b54575f03c7890821ecf8347f76081111af009fe4dcbd5629027384b4227758237b54a5983e70de0047f9725a65841b34f256d8291163a86e8ce35c1297dd5e0f17fc73fcb046b4a450fa5d2f6631e138c108f79b3aae8e827e9126cee7fca0aaffbca794bf0ea174a8a3b9e4af0a572ca11327593983594e0f2c63b39eae67fea49706eea452d8a9262ad24d811919e7fcd62f84623c178d4d7101b51728a20c1979249ffc494fa43e71ec17eeea44decb48e60df4451a2fe08a14a5d0d6804632926ef8b41c4083628d9c4cf6ab2b4a22868c02218abbc92f4d7679e8e14c1a994c44d72ca5c17539408be74c92ee527c898b70a235d34a54c8d2cc1ef6530b9cb729a68f24a704266beba730f253811619622664af5497160129ce5fda714111e4f46129c0a9e8470b1ce1db144821725df4dec5d4ba80f0412fcb76ec7f44b52df57208f60bd3ee92ddde9691c3e72e828838741418f1d1c30012c02c4115c2e49cea74193ea74231df80e6d04a374ca70bf7ce8c841869e0f1046f09d37476f074f693d090eb51e3dfe068f26431764115c86a693d5493f8a8970a8dd50d3914304990344115ced7dc98ca22f076d72e373d03ed08c0a4012c1a6bbff52d21be87ffcd091a37b203b1d8020824b4a988ab13f49728f6a0b9043304aff88b76e6188c10a1043b09a54a576665b082e49c1e4ec133355b5150a1042704198f6961c3a259db1417059bbbe7b4a86132082603ff9a7206c3b9d091a1d65eca0044820184fcd59baa485fab050122080e0a4f509ffb63e53a74104c81f7ad74d27e3c80fac8e2e557b29ee49361904481f78535a2a5ebfa160f700c20776773c59fa0a9e53529903c81e58cbcd3926a9a0ed4a5a87067c348e12d801440fc9936b437cd5b28203903c249a1853df01081ed85319ab36454bb2575f40eec0e51cb373ccc14daded4c4f80d881edd0496436258543edc7fb3865f8b8d18663e4f85146d681379196a34a929553376e58b209103ab07963462bd14aa7b18e473990397016d59224b8c83751397840e4c0ba65101384bc6c2708e5b8c1831f3a3a073fc6f7b86b9038f023c4c45249ee9cba9101081cf89cfa4c49afa6e29edc486000f206b6a44e49d0315da154d60d6cca6f5fa34ef24d17d31c5cf2029036b0f99e1d4ad7ea081036b09a9d73a865d1c9b2ee9808903570298666932bc858524c1b4b80a8813b75725f729335d9ba8b0b9034b019c2d35452b2a6e97d472f40d0708eb77b42c9ac39433a733a77fd1e6f8098810fd966a34b2c65606ff3e6b6b1cb3565ca01840cece65cb7eec1635079f3fd02c818b87c6fa59fe4741db59476ece851823a31f029a54a297ff02eeda91cf9c3478e10a0ffd163070a7cbc0f159402240cbca8d378a743fbb49f80815182d6f50e356a4afd021b6410bfcc9233880e03205ee0a49427a8cb495da9a959f009902e70c9c642e8d22ed964c805decbafcf3573d01f3b1ab061432d12205be05492ea4efad169729203d102bb514d56ced6affc570740b2c09ed4de963ea655651c040b8caadfb14cb9de9f2f03c81538a11b6ef2999845e8e6060ede879ae1008815b864b1aeb5d54d5a1dfd8e1f8a3eb40aec49ee6ed2bef8bba6763b5670e702102ab09f94bcf1f7205fede4861640a6c0a6ac7f92dce51eccb3366cec0d2c804881b5169344cb6c13f2b1e387824481ed1e252f6c93fc2a323700814295a5f299ec9b82fe06fd030548049027b0eb49ca166ee238d46ef0a0c78f1218fa30ab018813d8bb0c1d409ac0868abb214ddcaf8a291b35d091a3063a729838803081f3edd594246142f529c11e75005902a35a53a614b7246d9267c7184902c3118028c14c777629345bdef4469a6d8f5f9024f0a13b9f8ed1fa242979923b8020813ddbffb3cb5162ced311d87442ababe60f16cc64044e446f2c8effef054dfa02a408eca7b374c2a398203a2270655f7552546915eb4186c05a2a131332e6da8f8d437b7c42cb0211026762c94b9deb1f7b8482c18b522738d4d006fa30c408438c303c033c701b366e945d2f1c000cfe43a5b5b20e8ff9f52f38ad4abad2fee45391f1059bf62453f064740f0ed8b031465b2fb854523cd1d6964fb88517ecc7f64c2926bb0bf6dc6e2d944c7173864c060ed005af795a83cc7bd1b1c3e80a76a42059c16b0e6cd8b0e1805c7059f5fa3b9f20754db8602bb38bf230dd820bfd61bfa93cbb09d982bf6ca13ef7e824ca530bceb6e4e86e9baa849a167c10999efcb684f27716c9cb1a73a69895059b4952e529e717f54c2c1821577bc36df75f58b05a6a2f6e4c32a78cbe82d5fda4444b962bf80fa9d94c4ad20a3e68eaae7553e399c20a4ed05df29992bf56e52ab83777cffbb9af27a80a36a47fec6892782ec1940ab6abb582da7472474ca8480755b2bf662c9d824f6da3593d499b4fa66094e8fa29b4e49125540aee4e29318b8814fc2795a4e07ea26d39a3e0a48da7366a2d0a4ee8ca98a575d99336147ccc9d4bb54cfa681a5070a9c4e49b2c66c7019f60e4d726d5ee95ad4a3cc1a567da942d669a7782fb6c6665ab27d4979ce0f47b12d362aa4e1137c19db463194c50326df69a6034a85025cdfa4c702698eb47ab8e31acc704bfb142d5a5d8da31e7b41c7009c6456505fbcfd9b46f09ee6e74fab4a24af0490a2a968eb9a2a6204a7055e9217cd44cd43e09764c7e4cd1e48a345949f031ad5a6e93a4dc7223c17b5a6edfca7184d04082f10cfbccb83e824d5a9e49c8b89a36ea082e9a581e75268de0f37e0e0d39a6e1298ce03efdc99654052d82ef20ae1df2838f522245f0a54c728da574899e4489605bf55d3c88e074693593e1a5748d87e0ce3a8f0629d252c5107c8a9e6f264d3a31af106c8dfeeaa90c328b0a1182b7782abdc8fabd3e0d82937c7412efdefadf17041fa47a285dd1d43b0f04172bac83ad05217340b027f8757709fa1f3e3e070ef80327e35bd0a692e4dfb61f18dfd357bf0f9ca035babef8dd5ecb07c67e3fb58ecc1ef84ed32c71a407ceae629dd0ea6cca03976a694ce82579658207c63ce8933a560775953bf079326f4e1e3bf075415bc537ebc07ace13c264d01d4007ee4c85bc24733e3bd11d30074edcbcfb99ba7389cc1d2007c6a44d933deaa978ee71401c3821f367d3397338f031d47b8d5062fc36bd81516b4a7e4ca36d16e406fe46e9d63c1363babd0dfc655139aa7336b09b5f25ba41b532be064e4cd00c9d6412847dd4c0ed9858b0368d3189a6e1aad1a059538a0646f7abe468a69d7d39031b2d55faf599c59262063ee53be9a9c93270f92e5959289341956460ff524e791dafe278670c6c6ebd492645ed3cd9110327e231492663270cdc49a75ffd4785d6ea8081ff4d26655a12ca46a9bfc0c82064073511769fd45e60a38ec8a0493a59b9d45de047e5d51a9961b1ffe6029bf44c4de50fa14e8b0cfa4824e1802d701b7a416e4a62d4d16b810dd7d2d5a0d4a3fa59e0b74ec68cd56381cd329d43e465f6a02bf07f23d4da655341075981b70df66e59af02eff6c1e44beaa602e7398f9fcaa5baa1ed2970252fc91774ce13f2d252e0939befae49d923941d057ed3a7784aa91a0a7cd01b16ade468e6543f81f798a4a5e80a9affe40436a81cc3ed04396a4f4d604b9026fd5dc610556202970411d56beda1dd5f426f4992570257aa437ece124fba93c07fa7263b4b6fd24448e07cdf9457d6cafc089c89d9635f68bfef8dc099f4e3ada66392c4bd085cd44b9d729299543880085c7eb38cb17a3d95d60143e024991ac3dcf5da5c070881af13f116d9ddb1da0d069b3b4d544b122a99bac0e0f3424793d3aac83ed95f301a4b6dd46865298aeb0bf662daecabdff682cfe725779b92b2c46d79c198dc21ffaae42427fd2eb8de7a8d9bc41cf27e5d70dfa5b3b67663879f0bb6fb52286d4d2b13c2452687ab7774d12d385da73df34b83d0215b704135a8e059ad5f3ab56094fe7862c7cad5e1a105d79b3a4c8c496eb1ec2cb812ad19c392dc599705279a297b7d54f3a089059ba4c9a99d4c56bb0c2cf8249a9c83da5c7d5dbe820b558d1b9a5f455f9596a0e10a2e26e9275aeb3a5334ad602d6e0e4246f51cb36658c1fa08e55b23c355b07eb209161aac4c7d55b055e9154d253996284a05179a4acc24392ab853def5224597fc4fc10795d37743c70f8d29f8349eb3ae5b9e474bc19a9a955a97b2dc0e29f84e3ab37f7f346f47c1f8a6fcb24b2b0d51709ed18312d326213a46698482eb9875d35510e129a33440c19ada91e6714cb8892a8d4fb0a3f5e45dbcdf3551a5e1094e0a326e7a8edea9c4687482d1267f4c69514e706757efa219f3ada99be0d38269ee9910fd996a82bfa42ab782da9333a599e0cead7cb74d7b4a29c5047765194ad0a64b7051f4653c93c6dc9b50e0b256a950593aed3ce70791277015d3b9dfaec8098cba922989e64c2b95d38492de4b6207b36b0f224c6084454b973ea618367c882cc104224ae0d3c6dd98bf61f1b22e1e2249e0eaa2e7e69c2ac68f3b0eb52282044675d4742a3c3d3b96e050d381c8111825563439784e278949fe79249a8f05818811f84fd5226d4c501b998243edc60e64c5072245e03ce46797e41b3ce989c09d7b2c57f5bb8e3169088c3c1d3ba407e19559171182296d4a6a9d3cc160e36bcea31f3bd5540d0c3e878efae9f81a1adb5f30a226e6d2a3e4e5a04f7cc1e86df224e66f1d2593bd388e07a1f3551c515083178ca66e496971dd00076cd8f8319281448d5df0a2af64f44cd205174f7ab2a4e4ea859f0bd64fa93031b93532967091d037e9d641ff5b30322695c1cd04d9824d266d072bd3649de46bc18d59884a3a87097942b460e408af4bd5b13f799f05f72596a81d43e347d165c19e8e49a93758e8744f2cb8ca360dd629ad85be61c1c594ebd2e9e78f19ed577063fa22538caf2bf8b498eefa62eefa7a5bc15bdf8ea796969cc76505379e4992641b2585f29855309692ac96bf39aae02e3da3e6b849f48752c1f9080f6e7ad544e6a082d3b4dbfd62d253f89d69632c7526a6c0d2d65d36192aa5e0533ecbfa18e3a9b714527099df2ca50b4d8d3ad61805234fbbfef92745c1e8a7fcdca2cf24992443c1554cbe95735efd354950f09f5344736c0d329bf0135ce8d0fcce1ff4045b395e657fb5d4de6227d80dad5c163da6cf0d72822f49e53c2698123d4f7013fc055552faa43de87e4e137c0c91ee55e3f7a5bd4cf02725298e994962af394cf06939fa62ce5c823539abfb9bc9a6df9d2538592a3aaffb54da5d094e4caf59cc4e98a42625383b319e2c3de1968493e0c41c2fea7626094e50b2c935421409fed2e73249294bcb3524f8283672a389d193245a38d47494d123ed118c56b98d1a9daf7f47477027982a193c8b8dce4f2318dd62aa26985785a83082b70e6a774dbbff7f76118cd071d426bdba22584d927439f2ff922ed144705fd97b92fabb458b228213e36f7bccde92772687e0ce544a1ea326a5f74f43702d7e621453df154db04621b8acf427878810bcc953f953532a932c85438d070f8231da7784c0778cb163f4e320f8f85dd194ea917ea31a82e0b2c432319b7725133502c18919eb3ed7aeaf0b084eeaecb294e63a3a6abc448d3ff0a1b2494ac7ca1d744cfdc0558956dad4ea21abb5448d3e5cab9693505e92207a53830f9c784149f28999e3503339ba043e74e4e81f3ec8b81a7be0a44b7d2757ec14256ae881f34ba2bd72f5c9f410d70c35f2c0a8379deef17227f9cdbd49d4c0438d3b70ae3178fa9e6aaf5cfb7bfc40418fff31dac550c30e9c98b7e4a649413de524c90a76a4e04560c346f2861a756037b9e5f1d0bc46a2061df892731aed3625a6fa926ba831074e2ed1823e935392a7a46bc8814fd57a1135e2c05ad26954104f99be92706063ae58d2985935dec05ec778994bdff8c9478f1ce9c68f1c63f0f061e6637dac076ab881d50e4b3d4b511c6a64f80e6e201defc3688d367069576dda6e5f49df5ea8c1062e28f10cb6fb5595693276f88f3248906ca1c61a38d10c99741cff98afe7420d35f0e6f153e70f7da6c54b83963f98c95da28487434dc9f016dca2061ad8f5f73c4998c8933052d0010d88408c305810460a421046d638039fa6c1f394ae92623a1c6a7664780bbed00435ccc09b9cfbff464b12735296815152965de5b714d2c431d420032b4aa7249a244d63e0469352a293a8ba77480c6c98862c952b7b1a1907438d3024e75b8c0103174268cafcbf5143a9260b35bec056efa930b5bc17d81a9326ef49522955638d2e703e5e82974cf209fa9a26d4e0022f9a4c4cb27aca16d8b09444587b92dbf6d402dfbad72b4293184d7a5960c4b3a69493e5cf582650a881853fc9622532c7ce50e30a9ca4a4646e52f95ea69215d850a3eb4e92b26609aa029796c2bc4653f4efa4022f2a8959f9bffd4e48a7c0e54bb9fcbbcf043d1929f0ffdafbbde246811152fcf6ce63ab09322870224b92afe2fb2731b927b021849f20476f4e6053ead89525d9bd046113b8ffbe24a50da1b3dac604b6bd2441c7a44674ca9425307a349bec2564a7125325f019b5945827a6f6932a097c901e363af675d62e41025fd5a92a566a643699237096513fc95fea1a46e0a493a4969c775af5536a1481cd59deeff7a62da72422f07e26ad49efe3501b03d5180297af4daa53a9a9210456efcbc4de4c06834d5236d1434781c19a549bfab972cc5bf3177c3e256faa989e84f2135f70d2552519d3bc54e8d60b4da7355d7a53c40bf69385d0e6a1fe2af8bbe09424692551ab4ed4ed75c1c7743a7ea8a04c565273c1c5ecf2ee8a49d76b0c178ca57d92d49a8eba93bd05f77973326171640bde3cf52993c4249b68ca5af0dd5782b4e0f4b9491bb36ed221fc5930a25373559294820891056f365631061df3794eb91c1c194262c157d0ea776a3308f9292cf8b4a5c96292db4484bc82919f469924ba497a3b5dc1c5de6cababa3712f492b6c0621ac60945e658ec9f362d2dc87ac82ed91565243e7c6dd2144158c5a4b6551ad82d636157cf64e7143a80dab78082a582d2956e7924b424ec17af274310926640a4e9f24b8b929a1b42c1d21a52843e7a0b3b796d2e1c1df20ad64134248c15892547d7da7d44b49aa10320a5eb54f673cb929448828d8dc55cf49304197322d0b21a1e0b37e92d726090f214fa0606c44b76bd569bf2df904fb9de40bbae2f59e4ef1045f923ee9446fd9092e9d8e1e64658db17ce404b7aaf74147fb0c316d82abeece599b2d0e144d70419499942c893542da99e0e434951a2aa568ca144c30e241c52f593de5f3521222e4126ca518633e559324a5d496e0a4a0f23796076d3a2d95e0648fa37247b1e4d53525d8f11c93db93d0bf10854c827d4fa5f6829b982c953052d0011d8f822f03073974a800c78f1c2cf851c68e1e366c502144125c67adfa553c1d8f9748683a752621541248707a8209b5a44f89a15b0b44c82338f983f2ffa09395961447304258671e21930011d2084669e7dd710de2504b3b14878ff6406a0823b8e829ed7470cf95565a04ab5e67d79b92f59bab08468e59a76029329b894904d723a679744f29b95410c1c5ace9c430a143f0258690259fdca2653104277e3206bb52eb5116828b31a6ca9c2284d22924049764514147d7b1d3a80d82efb02b99daad5652b28c10417092ec6f4ac9b182456f4302c1dd88bb496dffd974c90d238400823795597143de7f60cb634a924aaae2871f217de0febfa397e42e21840fbc058fa12c8910ded00d7821640fc9a949348d5e22aac135e89b5c319909bd64f941881ed8f4efe1d726a5acebe40742f2c06d2a7157ed452fbd28040f3342ee1046881d2aa40e638cd162d0610e140891830442e27023078f0c94a046081cde75ecd07123070f0784bc2124c40d3e78f037100969838fcf91019110369490358411a2860384a4010d3342ce7023012166904048194c08196efc6040c8187c7c0e901031841112869010303820e40b0808f142dab1a3078f2edc48fd632420840b3f76ece85180902d4020440b4948167ebc8f1b58b8918347067890fe35a080902b58e1c60d1efc0d4442aa702324840a0a0899020e1f8d6324440a0f0889c20442a04023e4093c38379cd00426f82063093b52034294e0e3878ecfc18724c10221487040c8118c1081902240208408120819428810404082e1c3c70e0f2c0004183772f0c8000b44407e5101105fe4e0910114d000e9052fc200d9850fd4a375f03d72f0c8808f3176ec28c108882e725103041733406e718306882d7c3400a41634406821020380cc220120b23800482c0800020b4e6c8f3926138458f7e504905730766f7fe9772daf63aee0635aea4b0fb6c11f5f0313460a3aa0810d9001d20a1056b01e4dc93ebda3ac360ab20a3e7f7b499fd52dde5e094210c6085e70030520aae0cee2580eb7926f64387ce418e39401920a2e7a3653f6b7b5261f03082ada37c9ec9498478d0e6401c8294cd67f95f2e7c6bb8ece01ea3253585ae117ad2b746671688fff91c3478f1d1ce8c00d1b3678201e2ae8f13f7494b1438c313a073bc8f813e820810d1bef237d8f1224037003482940487120a3380665824cd79b4445c1aa26bbd126fc6e8416871a48281895fa2da3c92c0eb5ebf183070828180bed1a2fed67413ec1f899244553997b8233d56da3e2c8403a6136403801b20946ef07fd298f65f5276982d75ca272840611baa64c60825192cedc3ccabf046ba937ac0f4842f1c5e44e23203c00096ce698efa6b4c97c27fb8023b0177a23babebb2a77d0038cc0793ca12698d81781cb799d7da287d0a099071081134c12efac62daf85732044e599da0194b891da4e50142e03726e9977694c611058393cc73e88d6f25e705189c585265d73dd35fe52fd8cc9dc4bdcbf94fee0bb6b5c4a04cc772a4176cc9cf959bf25c64a54678c1e811992663a72e533138b414c7c82e70441766c3e0482e8a315ea97fd5ef366cf878ef51c60e1f62e8c8d138c4b06143478ec6e185115c3496c7df4cc6334138f43dc7183ec4b061037d0e1e3b3c077f021b3672f03dd07afce07188915b7095da841079d68ecd00099a30620b6e2fb7ea6ee894ced75af0dbf6a3d6c71ca1c58dcc829317541e19843e220bae4dec526e7f2cf8f32c6a3f29999643040bbeb45992e935a764f20a469989b1e3e55dc145d5dffc24de0ab63d2f95b9e6ac60ab63dae09736756567156ab032bb8ad75105db15cd2dfb6a77de9d0a46b42f2d73f46c26d7a8e0dd3a0537559258987b0ac6db43bf6b8c9a8233eb9cb5a4bf905ad152b049e52ae52226a4e072d2294a6a32abab925170f23ac949b997a4352aa2602d357a079129a1e0458a3ca1a3df54731214ac0769829b4c59f519fc043726556cb711ad4ef1045b310942889dd6d4dc7582ddd54e27c59337fe6e9c607b4dd268d2a64636c126b73729b3da3ef465441366a307239960834a21325e05a1a007096cd808c20826d831594a0c59a5e492e518462e6136d08825d88e2769e8efb859c34825d851e739896f3aed37995182d3ac7925b3ec488c4c823d19e36df6b7fe92948e1891041c4622c15b5fb2ff8c6ee29f8104e3754973534992ee7c3e82d349594ccd973989274d8811477022636feb07bd65291b6984d918638411ace6e67c72060f32e53db208c6da2f5989162a824b926c9db693fd5dc96a3092084ec9244f2cc97bea4a58b4308208364cf8e709f3ec594587e0f6c646f52539e639c5105cb0249b56108e14829374759027b5f5c352cfe1a3cf11824d3244533e9994fd9f1a3132082e6a27d5f9d48a5fa97168598f1f3c94302208fe649f6072103d1b4602c1c91b25f2bee41c94d094e41323806075af62c8d4232cc95a1846fec065cd5ce5553298162d31318cf881f352f6a64f12d33878dc50378cf481eb8ba724d9f4bb499beb60840f8cc5d4ac39553eb207764337de8526154e8ce881933f53d2697742438ce481d329bbf6b54226008218c1032773e852da8234d9bb0388913b302a4a87c9ce26aaa2e70e2376e0f54cf6f426f489a1e78ed4818b57c16d57e4a792d27448924acf2bf46f1a8a9139b031bce412d3f9ed43732372e0f2aea7fdcee88d4b8cc4813d3d99d13f9a3c46e0c0a52c8b7d9a72cecee1c81b58f72a5994acbea0c42438f4863137f09e34c4f265cb1a5a0e32c8d8e1628441c68fc161a4200461e0f01fad8113884004e67a9041c6f6481bd8a4ac7793d2cbcb8af7f81c683dd8c09e5af656763d29e7a00e1decb8d163c78deed13ccacd61640d7eaea4d735c9a91c3776a03c398ca88151f904f318ba5dd3db869134b02b1afd4673b0f8a68443edc60e8423686084e8571f19639a888c9561e40cece79433c97eb9c55246861133f02955cc4ba93db5b3c96462a40c9c3e0f66da04fd217b632c31420646271996838e08256b3406364b4ea73b0932e3e51313236260446a4c8fb1b763f51f063ebae8c7beb4f9aec42b3102062ee564594afa2425dffa0b6ca6cf98ace437594c4e61c48817d853722cadc9566a84cc2246bac0e9ab1c5ef229a995c47f8c7081b18ca9d225a5c42475e806235be02e692da166315ae06a64ca12f2a4c8bd71240b7fe5ab984feecf47ff0946b0c0be595576693e93638843ad879660e40a66c3062356e0cb3cf877501a138c5481d131e4c94fe9781f2982112aa08d1b9982d9b01129b06d4a9fe55c524d5c53321205cece4eb2304b82022b7a4274099eed76474f40b3ce82562eb91338a5b1832e61f126707ab98385aea669d23281cf1342f4799a27f9a34b6037a5eb5ea69ce378ca8812d8b437395d5d5012d84a72527a2cfac9ed20815dcfa76485ee9c61ffc811f83856b91aaa937812f120a3078e1c310227b6ea58ce5f5257770d8c1481cb95849e67af1b0bba1122b09e25e546bdae52e522244686c0e7cbb6186d93a8b27ef0e0ec8f3278e8f840c9c08810d8bf1293499e1aa3ff2d120cceab52d0627db9a47c038337693c6db64ae4178c98baadd5b7df03115fb0b9b62fab92072df19422bd60c7b209e141692d10e105a319fab4374d9f527fe92e38a153922767934ea828a92eb813659a4a503a9ede5acbe582d3b16a3c9518c581a6c70f1e22b8e084c6abb2284ae78b9d5bf0d91b3bf589c616dcfde8e793ff594cda5289e09f03366cfca71e9f031f9f831ccd8230c420c35b10460a4210460a7cfc73800c6f818d058029446ac1263bff134f7a12e43efed38daf418fc6e166092d78170f6d2d55a9b46997831b22b3e0c3c53cd5653d52a043053a48803ef0cf811d291091051b33d6a7f292b72a44291089056799b1c4b22406d34188432de19103870f85059b24dd92824eb2939c0c249c107905a332e7d239c554e5903e42c415ecc95499620a9a27a36dd82884482bb8cb4963d6132a4a3f8a39b8b1e3c70dbb80082b38ed5f39e992b4b2499655a4b1df62860653db2e5105b7b9f12495c4ce4a376dea0f412ad8245ee98fc61e2544a6051154f0afdb5563c12bccaae41466830622a6e074ee1af55972be49726220520ab67ad376d29a6ce3f7a4d8b5b67cdb5a1f397c07ff68c70846c10932f79baeec25b41e3bd28d5d8188283831d5ba9f4a9a074442c1a5ea2a1db5e3aa49b11c21d004147cfbe572d1d723221d37ec3e5083d640623f7ce418235920f2092e08abf6bc29fe6ea38591820ef810230c31c220c35b4086ef2011f1045b1e1a636bba5c915d27f8ac19efb7e49276f2c509ae4dfeba8d16dd045b7b62e22951d404a76308abf1f466821f35d3da27bd98e0934cf9c4ac3697e0d4e5f8769f5aa3a8de129cfa6675b76c578231c9fbede46d77cb9d13885082172d5a2dc898d7a0753419377aecb83109ee725413753f25cd8ced4044129c0e2d966e9477d6ca8904dbeb6a996a72b39896051148f056e2bee79c7e049fd3576f64107a53437806114770b1d4bf27cf26d7db46914670779fbfb5a40b8db184117c8e126a648e3a4158bb0846c3432715a2135104a34a2f5b35a713c157b4cff869d9a4fab38c4104117c66a5248f6852c14f120c440ec19a8dd9096dc183bf3a440cc1c54da904a5aa1b3ce8d13a729c52083e899a73d27d6e8fe7b143c710210423ac62129ef1ce20880c82378f7ea5f7714130a641c9ef55d287854920d87c26973a6f9346ed06109c8992617ea1fcd7b23f301ebb43059d52ce10323fb0c952a536d1174cda7de03254962cdd181fcc2798d22066b27be0b4b947139a6338d46eec408803113df0572663925a59eb047507b23cf0a5a4cbd16972c614223cb031d96591d5eb1dd81883129e6b64ecc05645abda1c54dab4291c6a85162275603d5e123359b68e4a111d92faf72c5a96340740108618617880073d761c7483073d7690f1642439109903ef1e83f664d993ce6c0361881186b1b25d88c8814b22b46b0c75e3c09f778a41ba499941fe70e07f3cd3b7c43aff45dfc09d5ece5f274d67f1de0dbc8a302ded9ed5e4752ecb20d206de54da9aa4fcfda2989c1844d89076fa25bfa0ed35f0a27674b224a90646879a6cee22afb3e7d3c0a6df93745d96a081f54c2986d4763fe93e060c2267e0b6c562e9fc61fa352562062e43ee9b92c2c7824819f83826f735f858fcbf5c41840c9c3a416bb6103ad8a78ab182c81838eb0b192afdc6ce211503974e2d57d212cc5385641009039f5f74a9e5f926d31e0c8cde161594ee85a554e2500b83c817b830a947875bf01df705225ea853675e78d0b92e70d2affd45875a04112e304a0ef6bfa9194aede6cf9f1b25b1cc2844b660366e20a20546a3e964927de87d93e3504b4260d2042192054e92d5839a7492e94b6ae22258484a2072056e94b4959f17c44f883844acc049b771ac76fb245549912ab0654263d0ecb5cae6d0011ee20e112af027678cf741bf28b52422536045ddb54eea9bfadbca0644a4c09a9292d427a8a0848969c42312055effad3f69de1c5e8ecea8d430455269281008c3e17018043170305f007313000018141892c642a158389e6b8af403140004502e2456302e1a201a181c1c8a04c37030180a0582a1402810000502a14028280c4bcb15e5012b410b5ceb89042187f93993d85d140fdc05ab49609df91f12296db48bd59eda01b1e28d204fee5335cf61a073de20c10c282e25ccfb262a5bcb656404a527db7e23519dee78ee6b0d65ab3e55e79e4afecc0fcfef5569c172e7af9f338937b00740f9090e959b616007e45a8838a00d700320341a08fabafc451e0a1cfff95108c11dd45e57cef35f12f99236c4e07e23aae7c50fea5e6946110c8f94123bc17b04407bf50d7868c33274b0e57f200ac0ad56f94d9889a6e94049e269cd9e101fb313405600072c9b282ec13365663ab9e517a2860b3d3be7b7159f623d7bed65e04bce1ee79901838ffd334767d19bb4608f6facead0eb0d2cd94fed4adac97caa15c9460c39792636d4fb3e6ea3470fb872c9839ddaa204d0a2ef98c9fdd429d61bee9b5f56b0decd4daa4f3020d44b357bec191a3fba42aab23e575281eac4aa45ede540eb19a35cea860b63ebcb04b4227dd4fbdb03bf1a35a3a7d42daf37bc9ee2ceb731e84d1d26364feb2e7d04f742a8aaa8a07107e12c3e28cb8af61d6a42a10aada10ac12e9b7197946e5f68c201e8408e351d5e9041f909494f6ed7f78fcc71b18083172986c60490da6335046e199dde4ee047a666c95e6b04b2dc9079219213c94e7afbf6481209c4e0efad215414a49461f34d5843afbdcf94e3eb8830f93f7d2846af9f6c2a0088a40ba7534140f909203749ce89b1b450911759d347be57032614630d893be67e42689acf2f8dc6319d170011b7f5e643d0a7a67c7dc9659c48817270ec425e2dfdad8b310ee32bdc40ce7d1b023ea24f93efcf30b41004ebf0fb06bb30cba3ad0e3bf90de6e61e3f522f42deae4edb2f504475d72c1f580fe2ad1910fa2be8c7aef9ec130f7b2fb0df73d58fe31679d0dad2dfed116fe5a0861cbb4bcf30447427a712239cd726147f36211e0c2c98dc1d9ed433d8ea88296d9e36d7147060ada48d28401bf4d94c983eb665637de103b1d41024a7190aebf7bd8c40093aa7d1cd6e86cfc92646973fbe3ead7267412c8f59ba9533963f2c33c77d4843f177ebaa14da3645b5f8de6de6299ee285e3f9bd8a3759e27b40c3e32afad090a97809f2c9a822b8fcb345c13988392b04fd333592c5cefa3853e5a5535e33918ffe8d1cdf398a8534a37b662c4deb3de811f988e9742cb8457fbd0586e46defe885f7f2e06aba6e0a6a0397b92e3563d5664e4358fb6cfb531ddbc12e3e6679bd6029bb781bd0db0ac450e23cda64fd40863a5927dc292c1cadfe0bcd2e6d479b8a6729dfd522124137903d4795317896a9766d5d8d5bdd19e80a090c4f121903b96bacf6ab4966490c7aaca4d37cce3d97ebc330f819ee1037c587b6a4aa37b0ae494e9c5e1ac9c76e212b78c07d3d39151b916e6491d3cc155dfb5f0a85ad8d66982eae830306cb2a1a1cdb9dd16e0cc45fbf2c66b3bb49b06bcd18c660474a2440a30072fb5735ef6a9dd75c705405c6e34495c4db0dcdd95e8b9098012527f60bd0c6fc462d8472a7d127f06b8d8d2c83e41eee2243c47f788dbbbaf24e8954ebe161920b840b21624e94591cb9ad145799c510778b90bb8ea88ad31661e76a1540869149760b53c5cb8d0194aa5fb961586fca6ec8dcfa506bd0785482e50cc7aeef91355e9b655de81c7737a9f9566b18aca1b8e2fc3f0b810558fe8e5bad26ecb2edcfed1af70d20e177fbaa3ce2efc98a1f31bb93538c6c293bcae311df40c56efd4a7bcc31bf36771f880a84dab7edf7c8cf334490fd52f759d6da6825f5d1e8bc1819f36313c58d1306e55c5f41fba318ebdd6185904b99348beb82db2276c88c4b11014631fda20e3d8ef4197c54fb4c621dadc1863e502f45e126bf840230ef22d5e230ddc8d834e733a6996312cf85f6b6225262218ff138e12a4328921e2aee5eecb41175a7c8dae8b5e884bddcea219e67cbb1a6d2a943408d509d6a67a7d233614f576a84d6684207c6c10be23335e553682ae60bdf6af9ce1586947a7f67e55122d97cc167538b84a08be56e3de910a947a191edb50e6668b6f314ba04770551a4e6f79e9834735680fdc0a7b6e79774bc413e1d5cb7ad05938ac9fb28e87f5f94fe54de9345e8718338b938a53fe98b43b8841d2960911ab25938d0cd3687111dbf4fc86cff245b65199f71faaf6b5d1559015e38b42d5f8d53744311308ec26eee79f86a10623d8409417dd4024169ff0fe2582323bddcf441217a57a108f936e168eec2c1383d558e16cc8941b73c113910816788ba3fbb8ef98c56d9afad909232064b8ba20d3339d2389ca05fe0da9f8c4583934c301bc6eca2b50e3c3c960fe941deac60f0bb6a2931322f205934b12b11eedce7103615bd628e8351c38fc03d7ca3575d58e1fff1665a452eda103053653cbf35f501cbb51d3edbbb4748f36a57314c44876a6fc31882aa27cc2be47006918a01c3af95a790a5f33b306cb51007f1a86d07a8b4148c071b6bc640fabedc8f470be4a6cb0064023c38f5c60908eb0808c48169f4b853577a7e6b91727d477dd7deb8fa5d8878f0511762ae3c8bd0634b8e8a5a91c3f4a07416b67c07165085b2078c28d00502a99646dc78918ef9757e45135d46839f481ae61fc188fd77a5e503bca7fd8e86badfd245872dd0aefe4a1112e5198bc016bb7e0752fefa4e65d858a40e352239cca58925b16f28dd5a8aa1e109aabf40787ed27db30ef0afdb5eec62a1f89427cb0d2d95190f9d1be9e913632467918328cf1a9c952b7ca256fcc79687bf49c97e05e18d2e1c93cde32fa57ea0c73306ed22a6b651c44f18221ee87cd8f737dc1709c79441e64306f03869d6d0d13ce03c976dc9a889052ebd94293cd86e3018c99c0796c85700565917165b557d61f0397b9df336f6564e40e0eb8d6892cccce3771d2dc5b0ddf8010f0b26ea59d00f5f88953eab86cb77f67abcfc365485884e1d3f2a0de4769ec6168ceaed12027636cd6b349c16f325be3fb195a0cb8466dd0f7895ac27b47851ac7693a52fbc3a61b890788fec113fa99485240ce5824f78d08a9b411546b072628f74ad1d860c0d9dc12c6957c939fdc1e022698b4a580e037a54913f9a008228c21d609207eb49764af300f20cdf3bb3a4d2205e615dbc4a3ccfad3a4e423c86ce891b1b9df6b51c2a06f74b00070ae45a29ebbae188b1744b5e7a9b79eb868e4725dcb5761998735b77e122aa6c2d114f3f7f711877c3a229a630ff2f8fe61dcefd3efdf44a77b203549772e66db295ba709b862774312807a22cffc8c9c49a576de7202332d78a5e69c352a6e6d8295e6ae5192d5d896fd8da7bd1a7a3a41a0473e017461a4eb8f528d7c3c9ca6ab419547e86adfa3a5f6958080582f2b155d914aa4170845d6302b16067a7998fef993a10c08200d3763077940cf2d40dc283071132359d6b183dca58073748dd0218334536b1fd2d1029fe6fd2cac30407f6f2c988401eb5a791951776d247ffa333def6b19d8616dc1802667398725197a548f97f1285d6d4070ac533c9f37ad8dac47418de44b559d124afa67d38a4fdb8d9bab86cde6e7770919bac6acad02edc3bb522a1db29949a5aed1409e99d03d1610301829a687342073d4263125c8317fb335f11dfc8db34a0d1b29d9288a6745f9ac5d1dcd9c4691a0d845ec6461af88fd90297acb0ee334cec4ebf900807848d7b59128be4d28cb1f26b0de77cc88e358f7050d39c9798347b69d07b4066c04932f0d9a825ec1dc382c205eacc4438b489a840ae5a30b05140f161aaf815950e23e18d54a7b1099fd852a450857e1cdee158564d114ea66265fc756dc48d5aaa75013ed5dceeb3c80be74ae7a7870964dd8b139860381913a50e1b792e8dfd1a60f8e33d47e627ae3c2b52e2f43559d7466e0dae13dc1e0e76e0879706cb46c77ca85be1fc9af4091987f3137e34b17c1ece9f7af60f370d2b80bda2f31423c526c739de0f409ace1b227add63311bacfb91cdab7f1c6dd32013900d0641069b3cea81c1958bcc3c62ca078db3d6a69bff3084cd11e2f6a6d60ccd33447a57a804b45f628ef62de9dc84120cb590b28e24937c7864e38ce1fce84e38442313e92b1904186170deb7d96ead9c4c1b9396e707f687e334a606f74c4236d566be88143d881151adbd3eeaaa4aefee53418c48cd2b983897e80616ab0b4739680fcf4aa5046d678efd9154791a282869c5208e0bf82c9f242787e97f60c258bcfa6ed790fd6680ee067e24e3dc8dff11b637785432e8994a545beb5290ac159be4a34b69dbc1b54d8d48140210070c8765c4d90f53d5df14afae41fa8539316265e7ff97da65aa37a6e7030b45b194b916dc41f0243bc6d2fcf5dc1a5f24253e9f18ab3d9e52a799d6779872151a24259026b700240369d54ccee63eae3dc21df4196291a6720dc5d7b373032156475f510ce53941fc14ed197f19dec70a70299764f4d267bb8040882e9c61026d64adb487168a18f083066c96a6b898a55436a4be71f6ef2c771930a0d6c8888f10005a8b50d162fc7d2a901b0d45c726b65d61db0d60e82ccceb09e9762ae8d325d440b56d7b4760f2ca1452051a3c39776872ddeb30a7152e586b35a4d754e29d368846c3f7201483d09eade2b00e96f59f291f63e7040a614bde8ca343eb1a248f6c455aff6bce4b0bff9806b2b07740d739a3c517846547596dfc6170fb63cb4c55c0f9ef8783d8f483000b495d1e04751fca0568a4120cfe3f9ece905aa2210237427b2876f2ed078b3b1776144ac9ee30240bce096dd432f1a16b1b9b02c02e2372b4990469d26ab805fab27b4ca597dec5efd3423bded6815a5614305577b7511076367d085764c8d599c6f99e3106d96c8a4875334e85226082c94a8b9a651f84398838c54493fd30c56830784da99f86a72bb28234245c5a1e151a415f12ee5563ca96cd3b73d3813d0a34fc8d824bc33a97e89161710e3abd4228b7cb85794e30b426f18ea3414c90a448c2957756f50ba7dbe898675db31f7d3d14099a1ea5a25fffae36f00b7f5e17c3fc21c4cb45b9c3c89c09a21332a9a765dac9489ae25f04a5820f898cd0ecdf08ced45a393b01ee0b3f4ce351b512158fa6c9a96d161ffa01e78e6f06ff02d2d323b7dcb12bda98ccba0e3ac26ac5c84926103d1f89096e18aa8fef93a5390830f9e03915b5c3a5fc9313f37acb8e3fd393f844de1e77c96bf29d0c0aa6d3fa0546fd58fb9ddfe75db22a90c9ef3a9c46fa321f257847a137b231ce8eabed7e119633fd12904ee673243304b6291222906c75647745efb5cd4f634bbf22a521ca5135dcbc34c3c714e086608913065a9d03c8cb98024c546e92dfd1d6eb1c45a421fd777bb22f973f80de3959cd76994b3853a9bb7744faf3e81d104dc6de3b6577060b5fbacf0d6b31511abcc8cb30006b36af1d5bce6e6c909d1ce302736db03cd92c465999f24e98fe5049a21b83087505620b5cd1e36cbd5fab6dc8304905c329eb4cbc164403038a0dfcb591e3b7a351dfee759ebfbdecf4c5502bf101594740817adf5f3974dfa9f03ad4066efdb6d664704557972e8276e953abe026d749930edde307c22c536ce537d31648694fddd81648a118b77cc65a807e4c9fcf2ba7560524dc308b64cd1ca531ca4b4ad9e909feb6e9a26e62b99aa81ad28babf4b7daf439ede0cdacf178c713615965e5b9b9cb9b3fa2a1d4a3194aa15753c997372619614b3b25a9897eee74ffab9df7cf5fa8a4c2c977a1efdd98ca489c08b9a5ba74183b0546319a016bb82c53c8a73daae72ef42b531f5fa1bd9d20c62aa144c6ae2883797aa4011fee2ff788c6fd977fa4d14f996f3c93ab36c1696f02cb569ce9f637d9c13a132ec8c8e7815286f592dcbec23a5c337281a4245c45e903855c983b36080aa94b25c0b47d4eb8a6d240b5f15fb897a680314b30a3526693ef0b5daa931dfc1631bc550385ad7bec4dcfa392a8b98f456cc6917fd4c92caea2eee253047f13285bf23129c702fbca032dc3c2ab9fde364ad0c9d200bb9bf446ba4ce6dd36866fc0cff9c04d319415319000becdbb5a180109261289823da53671b50510af7c9cdfd7d78ff6dfa8879621a00a32892e0a64ce8af9e010080a6d891cd8200adc4fba1faf607df584a0bc4ec3ef4efacd5f96a7f7624505584b8e78702f2797ce13b447e34c02bb8973867d517245766a0d9a14b86ed395936e8c61a180fdbdff8a150294d6e9a29363c1ee0cc9068f37630ee8813bb182fd8b5d17550c3a0df415ba9608fbecbf49d8088e7512b5c57e01077ae1822a45ff416c07a71cc9543315aed39702f42c6f0e486d12e702e298fae6aa55a80095ed3426340041c19beea0db49b59b0bee2830a2331cb2c6f76a94aa994b8bce3934a7c1d664d4f9b7328d085bb666173d6d6e7470febf8bf347068fd331c61d09b704246969ce2e1631bb4973febc65952c65ac5afe376a617649bc59b5775e3b06589a51edcbd0e20269ab985530692c950e651c51586f11c5c7ae4a43ceacc4c455a1bc7d88542dd09eb114d58bd308820b722382f863bf9e2b92746ee7d5052ff0ddeb09a0b75c875b2fd17a69cfbd469c46ef3003bd46f33abed79a5e2cf022b5173dbda055afe3853e244877a5d85d3eab9e1108ac13ead1d11ed5433a0a3a812ce763567bd4c3a6bb4523929e39ef930f92ce161d52274daf898e1925b49c57edbd76f4c2f65e9be472e472abbc16eac5b2d7545eeaeda56df65ab4d4c48b34af88edb5687537dca4ad5c158d975dfe75ac3d759c65f37fe3ee94eea4dfb748613db41888bee0c34f74529ae80f884a0a970689a96921858ee58c84df2d729ec4761b389cf817b96e18fc63c726211fe6917500d7f0cc741e5bb1c6bbde9be9fdf146127b111ffdc48e841984a9fb1fef368e61f16c9038a352056af21fdf4107dda6c132f4fb0fa3a3ab671446408836bd3432652136de6ecf0fabdc1990e828ede313dd225bb47c3cb102ea1842df1fb81c70c33cce090ecfe837e7c942189994c4a212ad49366b5f8aa8fdc713d865152417f089a68b865a5cb174099a8e4de0ecf88e10232e8ca10ec5202968b2ba300f302113e2280796bf4cb9aecd66c5d4220db784878c962fb6fc6ddc802e0fc1ef84bb21913c9dd6502c318af1d4a3ecf2aa3b36895512dfe30d919a4884522b9545d8a48088201609630b8c2c0166d3f6bc5f712517589900357ba0d8c51c39941038eec0ea4390995dd11ef0aab39f23888de7c000260328d38207e7108ae0d8a4ff8a15255e6c0896bf022065bd47b24a910c772bb1b6c634af203dbfaddcc414c956bbe9d4f414878025034f48f1a0d2721370a1017370691e23284d40f94a4c55e7e80ea4d8ee5d94a141a3c59e4897595791b037626ed701855f744e8b69ce40150a328edf77733cf58c837f2e63452c6841f4eaac652831b296408c567304623d3616b98be5d3255cace5f58314c166ee2b96d4908971079e1f9cb530d89cd2efcfc13791350bd49e3f0576275c1d303f2dbe7181d49660355fcbbc83b206852197f97a86f35efa3339d4b00307b23ed6e6491145393012e5c25aad3869724932519e583bc363e7ba20a9973bd601dc2563ff72d4ee482e67b10e5644b1cbc2369e368d2ad98092bbad33573d1789fa46524319e954dee88b88212e0e9baa27f840fb4fc1dc8d718738b4f91c58e18d40843e12b98e8c16027fc14f72b89c915b43b6c0794647bb2ac0554026e5d4dc6d25bb36e3dabc4520e2789f26c67c3a97c0e879768ccfd48a465d1e25176bd9e7dca8ffc8569489ef345acd7e853028fdf40163320b17b3b631bfa4c2a7b1ee3920fd4043b418ab78b8d08023bee8f62ef6222d439b3dc22a07fde2d09e80cb040f85e304d463b421f6dc6c740133f848a5c7b85df8a0e8cc9ba9d7703d05f026ce4f4c2da88c08a98b6776dcf4a5a78281af14a5f9757f74af544821ef13be73209b46f60225ede10b9eddc2088b5a8eabcbde7bd8165e19b733d39f389c598c2deeebfc3a255be17b1548f57c2ec2e13629c445e8c67364c5b29bc5db054223a59788d0e25e4cdbe00a64ac37c29d11c7afb6a1f72c8b93699b4bcab6c8a4dfbbb592826eeb97b4055001be6eac48f0de06698d370f44db0d2bfbe272615901b1505ea591cce256ff0b1732ce79ac0ef1f6cf765de34a0c6a6d3322ea000b9a86a37ea36536356d693d2be6a67be402c0d5c47b85884ff6dc2c9a2d34aa80199c00bdb9b5b356e4826a9662d18d078da4a83ab956636e1657f9a64f335db474dee55ccf5bdd78f47721c933f09d2acc7ff661335ba1963d0421bba8ee311a9c9a70ef00394f16626ca5461d6df59951467434403aa9f223723893edf8a0bed0e4a2455557b0ef7b07e05baa2b0a075db59629824d07adb468208e99c70474441c6fbcb03270f62f30dbbeefdf8dbe5e859e8a6f93370bb54708605871a31de84842a53a1f79c29858f22b8bcc1ae712824fd65635300267586459498721ef2c17ad952dd054d91b1d854f39ee846ca2883fc593ac5afb26fb2e8a07cf0a124821d328f0de02dbbcd1ad200feb480e495e6e20fe5d3e609de552748666e1dc8546b5dd7b096471856591044e39df0a9d6068753c7e9a49fd125890ea45cb422ff864d945dd272fd04d5ce50f848986a6d5dbed8bb38e2ccf2f8d9e2ab1d24f57b3eca4e8643ef751e55b7f785c10bdb9db7fa12b7d5e2c87f79e3c37fc60ace07b5b3b74ec8c4665d31f9c32efb80a6f9dac05ff166c1ce475bae1ab01d8b3c9d81045e18b1931739fbee4f1a930ca477a2177949383944a82462a2265fb15fdf4bd6c802d25525dda27cfa34a2f0945d18dfc8a3460b8647f0080020d36cbb5e04940db199f3bdc3afb2b69bf916b14b4ae4abe29b6d4c96ab35c346dbc01d85333d0493e7543cf9d8f8379116728807b8473bf4bd85281595bddffde3328cdf2e58cdf7b6b5930d9d84a73ea7e639f38bb5bc0a7e8b4d02ac3412d12bd6825441f937397a6d0da4df366c80ba629c570438c4f17f9096decfc1d6d1c3b71f5568f27355f5143ab3992121bfce92f867cfd03d4a8f63dd3ac4334547edeb97dcfa5122f79c0338f2450b7f54b00b6757af6c7c8e5558060458f92ddefa38f9eaa7ba56de8c009ba7da844793f3acdf909000b8dcefcfb461996c95a48ebe7c18ec5a53688a698607f9a7e0ec9b1c4ded553d34452d7da1f9b529c7518ba849ec9a63ab8f08bdfdd629f5a133dc37fcfe938f694fed28271a7953a92dd677d4d4d5e21de4747923d01673f36bb1f057eab26644d132081e04ec3ba1e3a5b233c7336a75e40903b079b5c256625d1799cf247b2e428e7320c4c8d43802ffbf11a5e8a701a86b3e009e0ab3708529cf052447021d5b011b1170ba2c660a05360a7c410f4f749fedee45484441929119728fc010bc4bfdc14d7fb7ded793f8943e151c8e64e3422f11728f149374b09075a631356cea10b09d4e5e586c0a85b6fd51a1be5f693f335c119ddcd72499f53019c667b39215431bd067947c5337eaf88cd1732eb11bf085383069f0499714bdb127f95d5793dbdcd86e100a6d33c680c590eb9b0545deb62411378042ab16244bdc43bf805f27ab910578ecd5225a9d749fd4e31f56b0cd90d874bd99ed4d0569462d6f2492a80e9470b0791354d0b08648569d4687c8dbe0bd4718c59cec479256b796eb5c86d11ec0dbd2abc758d01513b3cb7875efbe617202e868672bf5150b618de59c57e8d1b1c7adfa66f380d8984446c244932fd8c346ed5615e3fa460d2dc3348300f945e3f7622dfede037e2d8f61121622e12776f4f4a81b0b9f248879875097261c08c3fcad13ec4dbb06bb6eb08dbdacd032c7f6c24cbaefdf78eeca6900b31241594147513ea5290ab607412298393fad525c88bfd0dd4c9b50dad13ea50facdba9d7a36850bc4b26eb557f81be003d573b11c3db6fb5fb2aebea2b608f6c86d080cf748db66e39387633656683b0cea33bb23c3176eee48870742b97b1726d565a9a8a6876ef300c2786a4e8c51f6989ad9a7be3026114ad8ad7bcd65ec19fa7fac566b8fc93bd91d43f04d822fa288c681aeff8bcc2d7575dd933b9f9bf744315abed0cb08bf94d9d410641c3e85fd3f1f4abede34877c51901322e5324039694472ce5b48fb080aa6224bea56f1cf5c312358a5394da3d2f3c4682d7982b4c461556cdbeca09418c95a42ed6939643119b0233acb72540fabfbfae748257d814b0568b2e4fb8808c4ad9b3e50dd0c514a6c4a0c6bc1ac22f06dc8aa3d4bec16cca4dd297d66ca6eed2d4107fc9f97500dc9f86ca7b1cfedb3b896d4b1d0ca803e8f036b234892083b52208d94642ab06c97133bd3cfa0049c93285c1b1572d0022ca2fe0ca4a10db8b4f10a8358b954e28a8a491c0d2849d70e260c723201494ab4730b62036f5274801351e1581c501487c075eff27c9ca86b1524284d88b76793168521022b0408f13b81634c0d331c5ae66a46d1e8aaac04bd716888195fe9246993145d701010bce7a8c2ed670dc21214c490559f8fb28cefb3b5621a641f0d11758ce592b89dc7ee71af0f1652ca16048deae07aff30e0174cfd6ba48f1fe496c4d2973af939b152f8895d15da431482637419e3757df5fb4d059224f718d3a83c5b206aeffe9a9727ce3747c147beb129850cbad377b128dec1777d590a8f13c4c309e052062780aa72190ee4b78e052e4a64af465d69d29c56efa191698f7638689de9e7ecdc556d7db1cd186413f06145b3acc085b2f7771851b342149af737a9a334c680ec8d45ac2d476062a234e073992dadf7a8be86869b1f25d680d1e2b18618f20a6713e92162704b36fa066e3ae5292aadc21f28783863057c07d0b4ddba29926e8929304acd0fd976536733741d3c0c87a235eeb2f6c6b1cb0b69c175be3a6b1f70448860a53f5a24bc0629f4554cc2faa459a19cc18e3bceb0f3e08e379609d973d2c73d3a3ed6b692dd911d400b9998cdc5abcf50e25bd6ea8d3674fab28128ca6caded58f1506df62abebe037e0426d36dc02a9467f715890797224514215d368009ea04f1c660aaa150fd1428b05edbe0d9b4f432188156c28362ca1cb9b55038033a61c5c0f285ec18eb03f7b2ffc92a404c1c0a5e6a276e4f2aaa4b0e4e086a6a6a85d07538d01cc14523ef79d6a0c82afb0a03476ff3c17caff8d864af4e1d5a643e8f5e3cda8fe2d8240d0658e42b851795b614df42cb3c4995fd969e8412904495c255425a9f3817d8f94747a896c17a394b7641231dfc77617af56310a8f565f8f8ce50fae038f12f9710afbbe237a13b3edc42e98bc578eda9826f81951bf0182378e89fbbedf155bbc64f6b62df85ac9b0b32c9944d22cec2e6948603317121878925bf96c7f6c8e7d340188fb466c8933ca257953442787baa6a42099ed3ccafdbff5da7f8e65efc76f81ef6af11e31e4bd07d08e0b873eace86049f62fa4ed77b6934cd3dbc94e119952fe8e119d61f37baa2ad39429adf9109b08d3ffb93dea239675405cfe63b1c5482242ae403914fbb8377c52ce93cd9f9cb8b3ea3b60fd393c4b000d9803fe53af806708c1c2f7f6142cf47e1f99b1d97cb07fdb84d1aae946f71037b3828fa1543e5fb82e06a8de643a406648d638f1dcdb3e5ed817e57103d881ed1f7f432ba5e9fa59f934fce77248eb116ff7c8ad4dc5326da0f84f3e630d444d625f54b9db449401bd68b1f851ffe5ecc6679d8c837387105623d02e0cf246a58f7c0ad6b25d6bbea8a9f14de3e2da9e715ea9f4557f4b40793a4f79275a50e06bffd0961635a495c09cc61c7e8e5abf6ea2c8b8c7025d4a99666a4849c35ddf754f03ad28435761cbdf353e3cbf2c2cda07dd7b7d14b6bd899b3aa5fe912fb59ce3b39bf4366f63ebd11f824b07c528d3a697cd2516561cff241721770ada7e314be12a90df4f9727c39e9ead61257bb333f70ffa59718f8afd650615bd9ce1332f3101c788b5f3aba9a5e1198608d97f6b8daae4095e89a1a29e8bb17d49d74d4b73b876eaebfe997ba735ca16a9b5fcabe708ee12b3fdf7780cb5f19c806f2829f5f85baa0bd34d7d69f4f3688a81f252d6c2cc6d56e582bdf50db6d093aab672a1cdd771c4d2ce95cefb74b6e2a4d4603ba832002127199bd4f1fd1f31a2d4cce13a24fd93542f19f2102ac114cbef03021e26df2dd697497207db69d1525d6430d306efe7f62059375d3d881df4387f033577c567fe3bf3e43a6eebfe2d5cb8228e401b936c3cc491cc3d083a4a118ef66b497ac904db606c343759302aec0dd257ad99844ee2d5da3d39c0a2f2540bcfb3f7aa366dba3332fa5b6347db2f04e43e5a1f815d17983a0dd5d7b12eac6f41e3c3ae00831ac28de5464359544f41b8399a8f2f500cc9651fb4fc5276197fdbf4712e13efc8df3290f157e3067e8d725870c3b9882d7233bd7f3f5abdb4a0e57f2c05c0b03aef6e6eadf7aa81eaeb7d284c9f9c45ff6378d97d6efdccea6451a69a866d4274bdbe6e20ef29a34dc0c4337ecdff323383e04da30057da5bb1a10c2123ccabd334c6d37860c13df3290bf84af2e902656fc00317380530aef8f15c517f97b38d4c4553a4d901dfe2f90ebe14e3c2b789abcf58818686b769df325b8f3793681bd58bbb774b8d42b9467a55df806ae7625ba01f63a1ea623faac65c60413973835feec995b468c2eecae957fa128a2f022fa4f6e5d82f3d287a46577a1f2490e3a78856163fc185fdccd86c25fdb4ccb98fef61de0ebc5c26975021ae3104d1fc74b7dffd3341119bddbaa294847c845464200fc73d02602685bef279d0c7d8bbf03c198cb83d80bd22e5014ae8ab77aadaed46fe230f442adf635b8aac9b0a11574372063278e2dbeb2f41bc9a54099bd8dcf2c2419e7ec66c53c4d59052d712f5bf5ab9b68293cb32e6b4b193dd032f1c9cdcd70dc388db61a2b1d46509d97b914a0f4fe4f70c93d867fbecd46929e0edde64c0b6fd11b7cdf8dfcebc97334fae24f44b91a05a572583ddde7fca4a8953e2550e11428ec24a4208839ef95cb98e8b901a0e61931b03e987dc5934d453932b343802a46275f8a8148d519bc9a0190c1eaefb25ad765f05ddb989eda2b36f44da0a66d2f09d9f07bc79a3606c00e3b88a08682d88b48cca9f27acd0a7e592cc809dff3a76772f64a01783b8861b86319adb44565aad94a07b3d5520869cabf792bace920f5ae572f8235b00519fdd49f75f90fec1f5c73b398c3c4b0c815752275098286be4d9a3bca50be701029428d38f80283f47800d289cbeb4a07ed1bdf628d32933e5a8fdba1827b65eefad5b87fdcd16fbe732227559a8bdd14618a42383151522ca1fb1903c87336ae0dc8bfc9d50c4ec9e02d7857a2c122ff5ffd7ee5b81a1cfa69e59483469f1fcb59988c71f0bcd23e3aa8a73fc3e808651f992b655037b13051b469c96c15af80dd488c9fb75c5139d4c9cac1493070b54c919f23026ee11496cbb6af7e90eeb0f9da6c1a577ef83adf8abc4b317e3d11bdb25dccf7f0bba2ab3d47f6f6d6937413635e9a7328b8bee0d245cc9717e5f5003227e0a65335be2e39ae2712b84e108cec709771bf5b368c6ec7c049f61cb8e8c12bc8ab6b6cfcbb59debcf593a77f8186bdf6808d0306551dacac1bf89a1b50fb8d505ba5a2e5bc801864ed80da3c703ad2345273f6567cf5b77993709c765a27849b8a2e0a14e31cb1599a6f132213e0db39dc7c13955332373cdfd42eba37e2bfac33be68c09d31e65759e78b5e2178b9e576a62e170f19c5ced8f489a1b6a407e073957a42598319c98a268632fa3d1cd140be9d2240eff48ec3c99d922f86e3ae1483212233a1c0dcc07b50acb50c91a3c08228358f45d782d744a810f7c92433280059afd778129a13d4e2f7bc54d67124b98e538a2539b2477ac17c64afc71b29cb173f3c5f281d748a5fe1f3d1f8b71ddd7a9eb9808104bf321fda754b4c2c34c605436ea01f3f76119c917712cd34e951e6f74efca8880363f1e93865c7f57bf9024052e2af95d9190cd2599e41b7519f7b6d0ac5442894a88ed740819e3ac7c7b77602e62d6edcf4f108ac61d0f40bcc058c1c238f6e145dfa0f2ce45eb85ea8e054c0e2f74ad9c55bb39c7912e462ab90bce8a4930a3d0d2b96256964286f4d3634b45548e6a3165f61ebb896d3e3da091ce4c1706b383dc6ad3e3957e1c9d376990e9b8a9f75f77c41f05a596f789746ec2f20a08bc38ff3f63d110ba1208126c6c73c39fdf0a6cf0c338b67cc16add107599c6849dd1433908c6cf7e913216666bbcc9bb46473bd32b51ead62555ad87e2ab16490dfb4dad823d6b89c63309d8dbd46e99f33f15e82f71dca6e5663877cb986ecb932d1de56f18a687add963561c17c40871bf274e40396cae2b42f863453cb901dfaaf01a489a1fc15841e494df904c81f494defaf090af7139ba1a30f318a24467b1fde36350656daaae3c835386c9e9b04a2b3bd646420c8dc00b7834d0e96d5613cc41bba09205585e669b94b70c6e17a10d1f3ad0f3fdb121f198276a5753369856f790042ee2a336ac846f4910074640f4b2693f402305b498cf144a4d2f8b4fda9b54b9e355e744116111b1ac79e544e86d6544d1dc702c801787f7e1513c3c058642cc3c814a84456e0206a10e205950738fd2ee2225055bb532f260dc78e278927ca4382ef05af1184530fb109a9580c7c24838cebcf05fe42f10c6c702a61a3539f905b8c189ab0c18600f00da32b9f3c1776915212fc28266e04dd0384f548a290b2c108208a5b3502df4eb3850236fc4c5b4054eed48c888cc7c838a923f19d27a961beb115d4f735a62dcf5a6d13e14b4ead17024f837162a600cc428fa252bbb6022a0049fb800953598f9aeb1f488c20a413b036683db29ef29c61d02e9dbae454d8fbbd76d4275e02e8ee2a8e6d24841b925743b95e6c40fb526a3b6f47a9d5b424cff569758e0ae1b1d216b8219e5bfc0b4cdb78b93e2e2cf0c0c48158ba293e73d94c8899acd1eccc3c00f3e56e4e0cf910c589dafcc03b17a6a86fcc7ae17af6e0052daf8af4a2ea2fdbdd7c53dd292796eab60184f9a48f548eba4641843d963e749b5abf3996ea49b452a18bce8634fa7e204390bd9d6a5e868ec46024078e61e7b009d5ae213b50144e43729871eb88189174131a167f57154e8f500f3a88fbd2882d6d1037051b1f5857271852998d4cc6ad25f480e48b39225f00e588e2d35814543602dacbc3993760b46439330f0f0f0f0f0f0f8f4408b7b60642da169220934c12709a62d0c82499924c2945c2153b10b2371bfe226df88bb4e111120004a809b60954097e2e9b9894d64bef6622f8f89fbeaab288e0440973919512748ee42118d5f14b9e56baa934046bf23fd7c8bcf57d29046bead3065d1a4270a7df6b3a7e6510dc9f79ced17eaf3c5604c168ebe451f5c440b0651a4229394aec27080826e6f4a11bddf794d21fb8dc7e79645091b39ffcc0c7cd6ff99fd2072eabc4f28b1bbe993b3e304a7ed2ce31b53d702332e99832c60d3aa62e20850e3d247a54b209b1abdf151d79e033e76e9f3ceaa74c78e0aedd76c42c7d07eedd44478a7442a1c30e6cd24df71eb3eef6c460243aeac0e8a41954d2f8aa2f163ab09ea4e7a76c6ab2480e9bd03107f66f6352bb79b6194f28fd24bd35f552ba858e3830c24b5ada0b716bf5140b1d70e0920c6d2a395edec0a605e9a96336154bc4ddc076e477bdaea30dfc2699d484984636b05a952309a1295407915c031fa228b3ac4d5ea1430d7ce99590db22d8479a7c816698a046165c183b1d69e04430fda2a5732b59850636e5ff52dabe22784ee940c7194c2e4aa3fec7e0191a5a093bccc0da298fae9f2287ae0040091d65e0b74e86ac7531ad628d2f96091d64e0be7af3f84d9041ccb278858e31705ee14993ae6006500a1d62602c69d276a546c7af182ffe863942471838538d1194de2030b8eaa9f53b47911e1a5a37b4701b5b58c7173839b636f13a99a660d3d09a800c19bfc5692ddcc6164be8f002973528cb9afa2ee652e90213cd544a5a636d71a3c8a0830b8c656df98ffc696899a0461643e8d802db9637a6e99cbb337566bc16cd0531217468818b9a1f723c8e97c814d40e80207464c17c72434f475f2c7039263da6d2ba4c075d175760f285b28e49d345c9f52302001c74588157dbd1765481bf9464b092639b35561d54e07263aa51b24fd7990a3ba6c09f893c955939c6a44926e8420134bcc8c2031b820e2930ee934392e6fcca5eb14581dd7ef10832a93a6d1d2830a92de99fd09427b0e19931b6a6886de23981976016df57c5c494d6d1044e9eaf7972c99fe960022bfabc3372d6184b550a828e2530c9447c517a216372130dad2e14031d4ae0540af2d276356cccb8b1680b1b3448123a92c08dda16791683b64b161a5aef45165dace064c8906146e8400213dc72c62da12a5fad34b4bc682fbea040a22d6cd0c00a741c81cf3e52b724a6061d46e064a89f529db3f4655b78e1c5df480a741481bd8c599e73482764bda8ae00e0830e22b031588cd99284d0d09af12ad8c2c68def22cbdc1018b3344aa387ddf6c408810f539a829f655fd0c8133a82c08646fd18fb7389681010981c299808d2528a12b1fd017b155f744e61f132d34ce8f0011729a5587e0e7949653de0456e322969723a840e1eb0a1156ab3b492ea2b848e1df061229795ef46fb5f75c05e30fd26297516858e1cf8d515aa112d2774e020539f3721ad4517cdc577910de8b8017f693fec53d561035e82e7c7b46fd6a6fe0f74d4800b2a82d27749fd43582cd041032e4347d698d3fac68d093a66c00575b2e27a0e49716441870c8c2316ac656526653978e70d16e42c7642e634b40c72bc424d93f2e8d15cc1e5c632215483686879f137be8b56307a938eeb26522c8bc9b72d3858c1c78e393d2b54e98edc2ad82d993d49f34bbeea34b44ec0a10a26694fcb885e961d8023155c081aad5f4354b0f9ec533ad1d77b0d1ba760dc74e759164bbae427430613384cc168ae9462f48a3a5182560a6e73f05c1da93c7fd0719082d1fb0fa1b59641e48a718c82dfb4d737ba765ad20019324c148cde34939b1afb6a2ba16043cede97d4a6855c1714bc59d250e215a2c8f13ec1295753ca47ab7e7ac98681c3136c109d22c9f3b213dc858a81818313bca87893d488663391db049bf37ed03b99e1d0045b1b62e792a124f5c7ac58173832c1f5f9bfe8eb16536d16810313dcc49c543debc8d71cc271092ea5499b3cf9580a32ad21705882f5bf0a4ae4986efad29560824e253285f429247d29e1b7490b765a5426c1a694f5ce257ed0693949b0f6e6a696af4d4d7d91e04f2f62ddc71224b849f69533a8b3cd177f04232c4fe868428e602c9d6fb808e9ddbe3682731119733368d74d9f116c10aa699b7f4cc58e2f824bd52127ab5ad4c92b8249e94ca51ca39b49cc268271cba147969d56d6112238214db38a568b55e21f82cb1075ba25568f25b9214c6a3aa29e489242b041e4942da7ac9f7b6942706a915375064b27c71d049343c65c2f2243da4a05c1997c8b582a8d49896a2050ad512540a44a9b4889932b7fe0c4ef42cab9347ee0b73af77bf2f1f217fbc08b88192c99ce072666f55411fed903a7f28ba68bef114b89f4c06627f5131e6279607325b36e0dbaabedc6037f7e514b345ed2d3d51db808fa6ba37bb56b291a030e3bf0e719218dca98775bc251074e4d889de9ccf72c533ab041582953ca53e988983930d13ebf861c52c9905e0e3930724b8b03a3e2c99437a44cf79b84031f548a6363da1bd83c39998eaa615bad1f81c30d6c88419a92a939bb841c6de0bfdf36dcf7eb2d651c6c60f37f47b13bf5f821e158039b1b5457a8cc0d42ed345439d4c0a4fcd3bd74a3c433a3ec091c69e07254b7b3131f0d7ccc794b6e48798d2c4ac990c1451238cec0e6123a57764b31d794190adb284a4791e00d82a30cab57a6242dab68b9d4aaaafd74be105bb33cb5eac041064ec7dc91904e9f255d4901fc81630c5cf27ecf331d5137e60f38c4c088aeb3d2133f258ddb488888887877777777676666666656555555556545006fe00803e3b944d58bbdae05170c5d08d3aa9efdfa02dbbbe982889f953624993c707881f174d61137a56069121a5a356c6829a594520a22222222e2dddddddd9d999999995955555555add14401a881a30b6cdd0779a6313749be891138b8c07765a6535f2d217c1f706c81b1cd924763ad05fe5cd355a64f22b59959e0e4a65aa78d6982d48a030bfc87121ecf2f7f053edf3ca70e9ef386885b814b2a49f64e2a3a9234abc00913b92742ca39e6272a30f6395a293ff7586e4f819f904452217b8a14b894354fba489e1dd216054ea59560498550275f82030e28702b22afeb3f664ea9d1d07a021b27f9b928ad132c6d018713d85431e435ed3a2d93c990718109740040101c4d60a4c52c1d64bee49a837b430b6f02071378dfd3b9743c75043b97c0a69ca89d54489284bb1b040e25b0153c527b97ea2f9d01024712caa732f7c5a1c081844448b09c271aec25701c21edfc31159612388c80c43c6f091262b4a5c05104469767c564621281cda6d3e5f9ae8f128b0c193b04f6fe6bdcd3edc520d70d7c063884c0e9bcbb9d20e4416052d84737b9ed92b473010710d2a684ce1cf53e3f607564af859aab6451ab0f18bf7819f288509e37ca028e1eb07b29ee4955c9c103ce5bb495e6f0b20817af2be0d801632266c5f7fc0af97b0e1df0612542c5bef08a046dce3719f85c1d3d35da6360d472f88f8e5e29d26260dd2bbabe47bd4b6d187851b7ca165330f055e1498ae7d98847bec05fe7a4fa2364558f395ee0df32d32dcbd3e82975810b4a25e752d7d10f6a2ef0fa41946be64aa9edde0293b3d6326676b5c0f7af258d3ecacfdb9205d65fd26be54abab4e5b0c0a691253188bc6d27b52bb07e7afba332c4ff245a811fb9b1720ce9825105ced4d3754fd2c2a0029f53cc4bebae5919c09802a33153c90a5d39c5523252609295e5a4de4a2ec802461438bb48e7e11ec3430c80010556a2df88a463a5274a0c17309ec0097fd79228292b8d4a0b184e60bc728fd0f53cf931a86d6c914501184d602b55e97c91241a5a3366dc680301cb000c26b015f92b628abf04ce5208517b2d4909ec767d4a16e92544d1a1a1578f6c54000d8c243066a39be19693d226b2e14529a2001848307810a9f65e4d787d04d6f6339bce4976e93a69689d2f6e1881cb9cfc2ea938ea193766a0065a00a3082f80410416c01802d7aaad41e6a4934aaf3084c0e77417a9a73345c8de1637b60b0564210046105200030805e307250361f88051a62b278da634b4740b183de03d33dd8dd066d5588105c81560f080fb20ec63ec182f6c6476c08f2ce5412711354795349486a3e08b195ad8b0b1851a063a1830812d147ca1850d1b5ba40a60e8808d9aaf52bf763072c05f1e1115dbf2c97c32f5c8460d3ca8022198d1001838e0c254eef5a42b86b859ace1002b1837e0d534a713f97f3b378a11806103465878fc1c64e4d03bd680939c96694c253bbdd38089a73178a949d2533d03d6239bf6d12682fa88c190019b6cd3d64242cc2926c5827fb50c225d32c182db5499e259753cf3ff0aeeb5d54a8b974c3d7a57f0bf35316d79752ef9b782cb194a5ec6e897d53e2b38574fd2625756d2e0af8213c9fc821411a982d1591777630eff18940ab693259d3b28dda5324705ff964327a5b68a9df25370133f461dbded0832a660646534b10a31a4a839a5e0fd3e76efd8c689e721051fb2489e147293e84c8f22213778b6585e8b828bdc665f1b27c511da50f0fffaa79d5b50b0254f86529a317f5b3ec148bdced1354dac24349e603d2429493188f4e9339d60256a36b7d6d02f9b139cc4e45d9eecb4c78b6e827f4f8f9643ed5f5faa093e799bf9a810f3f529137c7e1759ea841213ec69f0589f31e4cfd9bc049f431ed312dca5ab67aea045675e2ac1a7b4fb0b1a546ee99460920afe66428293e0a4e86d176591045f4a4dc34b55f64f4682895e6a2dc71c735011129c7a9498cbbc47b0216b5efd98352b5be7086e6d35c7e0a335829d203763041793dc98f72eaa3a69114c3a6b11e999f32247119c4c9fd46a6e2a118c755232d52521829469fdd9ff121a5a66e6106ceb8dd2af219488ed1a82b710a38d67d03c22a41482ebfa98a161840721f8d488aa5d29c91c7a1d04d799e9544e5af4a5ac20b84b4252b02fb1cab23d02c179f00c49b8fb0a080f40b06982169d5e3f7ff0f8031f648b85d09af5f0036f1f82bab01f11e1d107ae4a9ac4c949def59beac1077e4d35489aecf5ffa94278ec81d159d1844e2562c7cfedc1430fdce90941956bd6ce4d0b8f3cf0a6d354edea453c190088c1030fbce853b56926f284ac310078c1e30e859c44f2b012ca62460d1bfa5ba008d4b0809a871d784fb94453ec242dbd08004df0a80363f9b4d74fa2e8790c1d584d52624a692f6e993c0b1e73e0f3dd542e1d245534150b1e7260a4a5182fe7d69c8304eb0c1e716063ad774a23e4dea60e1cd8eebbd4316d87f6856f603fa4c57c1dde99dd74039fee25d5695687142766f068037b1db442bc14237b3ab181dd7a49793ce9785bd6c0eec91fa52d281d4d683cd4c08ae5082ac64bbf1b5d1af84b7252b21c3c6faa4e083cd0c0669151d4bb257b699186560c3ccec07feeae534aef28d10c1bc8cc071e6660b3738f6f68e5609d7f1918f33442d9253931dd6460e47bc6133153caf19486d68c31703a8baebff1fba082e4c5c05ef5491e112d7afccc230c5c14cd9b3a0d067663f68a21f6d60e3cbec0e53a952b871ad38d280dad193650b981871718e9f993d05a39a7a0f91728e8021f936648aa793c85e75117bd822c1c787081dbff117af12628eb81c716b8effc119da2b9fddd85172c781b5a60334a905bc2dd327555038f459f9f58468ed98c1a36fc5170a346046a580003f0070f2cf0a9496eda30d331d5bc02173bc99327575249d25b81ad5cd3759319fe7e55810fea924e6f2d15d88f94f29ee8af51ba330546fb538e933f2749504a813777c9b611c745732cd0048f28309652a55777a690c1030afcdf7da7f1d45b4a795ff078427a4ddfdfbea75df07002bbe9a7c73e53d362cc3c9ac086ae12ebff8b9be2e8091e4c606367d055e3a639c7f412f89cfd638ac493a42eeaa104c6ebec3655a3789da6021e4960cbeed5ff5c73acdc17376e645124e08184548ca22cc918b38805051e476043791042f5e7a02e6cf877910123b03184d43b19a44b8aaa166e630b2d0227515378c698f5a6073c88c0a54db0d4956a77534a430b031e4360ccd45bfb7a8ea75a4a010f21304ad4724b6d0c083c82c0e7be9afc9c6ed2c882e602089cb27611caaff2c63d7ec0e5bcb6b93374bdbd4a436b468dc0c3076c7fb9c5696222f0e8819264e9e4dd21a9e8d3d0eac28307dcc94c4ddabbe59a275fe8073c76c06871315192b4e96c86d7c842075c0a3ae8ce41c31a5fa419a8868d33a3055d78811cf0c8011b414b24cb7fd7a44728b031e3cf0c1b5eccd0c2c6ed063c70c0a994520c11b2666a33feb4a0b9d0d20e78dc80d7a4929a982c6afcb752e161033dde05ff06e1510346a9edcaca1854e9ba2b30070f1a30a24288bbda66b7d9cb83c70c3895948974a363d28f6079c8804b4a899f759069f3361932ae23169c6b90db171673042d2c38db944596499658d17e05f7ed923b66eca4db4d577029c8b210bd26debdde0aee52a7bca7eebe6296ace0d294508b1a828bea7115bce61cba4b989e7a509121860e5570ffb515ccd6e48a1da9e047c57deb2c3a968674a0824b1e4f26353298acdd3a4ec1b6c71862dc3599824bb6fbfef929057756aa74756c3dd59e14fcde77a62b9decf1f551f0e3a9a47a1c656a37a2e045976e5ebd5c3aad1d0af684461129da939e3428d8eead78a557d1d7329f607bf46e79283dc1987d129a41e73ac197d0d1fa39ca09bed282d2954dc69221b609ee3f59f5e4d5ff136982d3a4428a91bfca049762343921e9a99027d28109465f758c6595bf0493521219d46b869c5b82532aa8eb521332ab852aa108d366d52ea2043f394f8ee9333e09c6cbb2cffc96049ff1f2730a514f39ec48f0aef96a4dc8b3d424487029c55394468822fd47706d99ad4143a4577a1dc1a476ff2e13318bd8db08ae63de74a5258611bcc8183989b06c8bac2e82730f42597d5415c1018a8e1d2ad735ae54602375554e499a53e0ab72a37ff5c4189502a74ab495be90fc92a94481bf9c257ac3ea74560f0a6cc68f9ac652824ecf13d8a044830c2ae60446df7890c164d2009ac0299d24ab44697c8f1d26309a83ab08e5fd123825e2a5654a21746b45099ca79a70cdcae125c424f0a34442fc4e4202abfea23e0217f285e688904c757d4628c1008ac008899fbabdcedf4c44e02b7ddbe91821768e0f81bd6ca1b93327a54647088cce29920e4241e0a27f48429dcabc881510b8ea9427c5cf2126d34407f0035633d48e8ac498e3ee007cc087143b6e797c8b105403e801a76bd7f7537678c056b42a91f7be72657b077c28b3ecf36c75c0c9f3dc544d9e84e99a0336e9cdd18409d3219289032e7f8af9dd4e4fa4eb6ec02821a4dd8e0e3169ab6cc0ad6f083a4ba7067c0679cad2521a30a662ab6d6be5d42419c00cf87051dfdb5b2123650032e0ecca3f47a62f59568a0537aa52bd75768f758105ebe9d9e26ff0155cba27e54127ef0a7e257fc7cb296a052341cf445df55552102b387dfad974e2ab607356c931955537c88f2af8a4632ea9559d543021879224d77c458f50c1e9d4162aa5a4bb4b7b0a4ed37dd2f92e798fc614ec050f962d5f5d0aced36ffeab9c149cea38da64fda80d77149c92af17224657146ce7abecb9a550b096c33ca84eb9bf42a0603f5e86c631cd272c8627b8d14968b59c329d6054aa5215d45789a40c27f8dba0d2c5eff46a2837c1784eea473497bc10494d70932ce608fdff2892cc0413b3872426784b95f7b5339fc89272094692ebc4e0fa31ffc9127ca43f759b7494ee7c2518912628d1d0d6d2714ab0b146855a10d1b36a3809c64f4f7f85a4e9238292608398e428d1bd48f093ba762d7dd0966220c1063fa9b9d4698fe0729b7c5d4bcb619f39822dab5a4d31e41bc19ab24e99397777598c60df749c9094b69876528b6045b5781c91bb3c8ae0f53c78acde3a8d27824dfd889fa1fafc438860eb9495109e94a5c70fc188984829a51412c3105c490cda25a9f6b491c428049b43c7f6901074ff2284e0a3e68f5ebb97e207558d2fbaf0c21c20c62058bfa0829ac8ac20f8b254b735519b636620187d5b41a45229e54e16200620b8129664befbd15769d25007c4f8036fea296d858897ce263fb025b3064dd155927a4e1f386d799193a95b92a1e5039fd59227d12951b72b7be024855e6b4ffa828b1935b2682fbe0b527ae0f3aab2b4e5185492280f5c2e2de9447d48d6b7e38133c99f4a53fef22bfd0e6ce4bff4bb14836ba8edc05f0ed282e748cd7b771db8f1a819bf364307765584c6cbf5217e660e4c4e95216489dad44be5c0e58df5397554a8d2548c38f097b4f2440a318d52a9187060734a9e9c4e4571f53d10e30d6ca6d320593d7eb4deb8814b1a4bbdd66b7c4515a30d2523530c3660f1255fceba3eb135a881b5bcf471c921758e791a5aab31d2c0c61853c8d7579df5a91a349c3b6ee9b6a6b36bd5821867e072debd29eda14ef54968c430830b62940165580c32a81631c65019882106ce44e7b8ada12cc73ad120168a1861e0ec64b9da69cb231e43436380210831bec0a735ef4ad125777304c5f002d71e512fffa95cf8070af1418c2e580c2e9c0c12c4d80293b5749241db739c2cd2025bc182cc74ae6781bfbfdc5d971b2cb0212125bb9390185780410c2bb06361c95f2c53aebb1610a30a8c8410ef4d086dd39753017d35b6fd273931a6c0785ccbc14c3d2930e95d82487f7282ea244614184b4a9b8aa6eadfa650606375c5cad6ae76227b029b72c88b219bc71d9140218613584feb12dcae734cbb3781118f92f527a7d17a394c60f344eecd1de51258ad111ad3378ba1044e5d9749bb6a93617954a3679c756ce0011d352cc0010b7430a043868c1849e047051594a9f691c0e50f31f9962788946268a8d517336ad8b8da13c438026bae913b7278a4d0bd11cc97c12d827b2996eee019c620023b2955ca3ca232c44c8c21f039a76adb1ea1591154d5b181076c208610f62cf3149558b142f08e202726cf62b142c960f1428c2070d72552c8feaf2afa03815313a3c994b2c5f823af007a2f6e7c8d195584183f60d52c8936ed4cff4af201371a5f2b5a05d1b6a51ef09eb74c5707dd41e879c08d92d93772324f39da019b469f103a754e698374c05a1a95354d3352c673c0f95d4ab79b83037e5c42fa902235a4f40df87859a322a3478ea10d18b5db2c9df4bb4e35e0def327915e826c9506fcded5578a60dbe6fd0c384929c94ef1c49001ff29461112d36616752c3817cf946458ac4f5258b0218890cc35e43091be02156a94aee0c7423c959d72a790d20ac6e37e32b993f4eface0d2ffaac79369f256c178a8e9a82f524486aae0cdd5f53b2f89578752c18fda547e13775470b9ef2fff6f3f055f6eca7f73ade9bcdd149c9bcc67275d948ea59782edac7f1d8fbd26472705a7f39de698b25bcaa28f82b32472907b49720c2a17051b2d681ef17861e93fa160bc333743a96592fb01055fa3834e29e83df5cdf90463daee25db554ce58e2718b5a126dbd4e93ed5e9049f3c9ea568e526f19b13ac88c8961c73125542bd092ea4515242cce37fa3d604a754f094ee2fb5e3d9996092b0a0a654bed1383626f82454333b477555ec4bf0d95a841ee55982fb12a9468de5d4a6aa041b53b473d5cf6d0f694ab0a11ada6fa1448ea64930d937795e1a15a9aa24d8504148f3eb4d7e478289eff5ed99bfd2860b095ee308113ac4903e8fe0276beab2acc935083982aff5a4d147dd083ec6f5ec511546b0169eabcd33b30836985f66fd15c1e90bd713e9a389e0f2ce72cc1b447bd02822d8b72bcd9292758c513d0497d36795f0f4a64c450dc124ad94e3ba8eeeacb4106c86a8bf951f42b0af7d25c23e575acd20f82064a84fb79e269a20b88935d9e464ffab54068275cf7ba7418858b980e0369bd24a124f7abcfc81b7bb98aa5979d476c50fa94b97739023c53eb01f42bf7f05f9c0b675f4b168a99df43db039e752263fc9167deb81d5f5b496b3bde5f3c049959cad43e814c4c4035f4af443f6afb6e8dd1d18a17e9544e5d221c70e7c7f59e6f3182b5b07d692bda6de5856f6d381ffaacea739c6649a9e031fd7b6d6d52f932b077ef33c66e64c11931a07c63462f5a7dfb0bd0c0ebc4d504f4ff91e43fa0d5ca8ed7463fa7e2feb064e83c4a452ffe93adbc0a5082a779299620377d23fbfb95a6be0532b9426dd15e9cf52037fd2aa3b9de97419ab34703f7e49a96822d328a18153319666b98954317f06467a8ca1cad754dc1c33b0d716b4ffe7acf69d32b061417b254b0a88878a515cf75c271020077ca911ca2ad89e0002e080117aa571e448f2f49e1bf0a324aafe062bb19cb10113d577573c526ac0893e0db943bde6f4200168b097b60aa926be240d0808300336d3e5a5af0e5252b75c74177d812e6c143c1040068c5c4d79bcfffa88055713ff2659b0a4f98085114b06cd75a65fa2a1f50cf8d4376a7040868c2db678cfaa57f0aa9daab7f482e7ccc12b067cb882fdf7907c726fce9f4c1bc3472b1897a0353187fe64e729317cb082d3244564bf9fe86d57c198ec241e33d737a6d40dadc2872ad8111627a5ca4a295847860c3c7ca482b39cbbf72c2da76a0b0d2d1aee45a3a0630313b0000d2fb2f0801d3e50c15db68ba46c7f62221fa7e0533419849efe4e62fa3085b93da852faddff28052fb94e6fd494113e48c1a878ae273add5ace75146c4eb591275db43f49110517d2f8c91cf742b2988582d37f5aeb49d64e0a2550948c4fb0ab2de2af92b286e47e788297981e41da4eba738b2cb4e804177a623ab4f9c1095ebd46cf44e807b9f8d8049772ff8d0e9db2c58726ce1f5c4d69f55589660b3e32c17906ef3121646a8b7cc10726eee312f8610947941ecbe23d41e9faa3125cb2cf561262f283126cb4bb6f4b9646a5fdcdf86312eca4ef0b2982e71d49d7c8a2bbe00f49f02942564be5a548f0a5dfa72cc95189ba4382c91752eed5f54d1a9ef45d5c601fc1dfe6da0b31d446929f1a5fd060000796081f8ee0d24deed01d3b430e79207c3482cb4a9b84d29cd3c5d41a1f7c3082cdf628f6ebd913a2c6061f8be0f26bb46dea4deaf50fc387221871afb869fbccae2b89e062fa66ab389e9a7db3850f44f0695de36f96a02989aa858f43705a72e84abbba11f23704a7a9fca3bf67de695a08bede5cf5edf253690daff04108de64dcacfc397a2e8f61e16310eced4f1a95b46f6d4c3254f810041bed47c93da14ae836104c8c21a95c9353e7f693133e00c1483f31b517d157436b02f413b08f3ff09d822c992688a949af014df8f00323f34995b4d90d267cf481edfcf96e4ca2c7e8f61a3ef8c05f8e79ed9eaafbc8e6c71e18f563d933069d0f3d703a676e917a31755ea81f7960f3e432a1feb992aae4071ed888ee9382fc1c3d0ada6f98eae26f9c013eeec0ff9ea6d0497bc81c94c65f0533bcc8e208e1c30e9ce95112f2250f091f75b07459ac2dede8c0a435ff5093318a90d6b0310305378c9c1b5b20d6c71cc87fd13565882439f01352564e4af47130b72a56e776d11a97f0010723a95fbfb20bbfca0b1f6fe05ac53c567255ed72ddc0d8969e9223d936709e5e3b87fedd47d1b08133af095e3bd235b0de56bdd5a174688aaa81d39fae2b588d6895681af8d3123a2ce7a9117941039bcd5574b09442436bc68c1b4da3d8c719d8d321b5952c8bf91e3370278445da6429c224a50cfce9b411af4939e51dc9c0954c5abba23f06ee2245b09a64b2d23c31309efa1b270911db932a59a05c054230230035f80803a79571530c9e22e6a081a16af0f1051c7c7881ff209397d2f9f9a1aa2eb01722a4cdf38a633ab2830f2e309e2ba4cf132ca4557f0bac9b0c22a59e5d588db4c0859883ecece4675a9e2c905de4b548d0fdb1b447f8c0029baad74166c8a7a5dc2b7042a83b9dcd532726d70a5c1c2fd939a90a8c4842e4bcf52483245181116da15d123724efcd1458df49e9358ee8558991025f955ff2c41c8f9d8f0227725869fa1dfbb82a14188b20b6e933e9ce127d02979744ead121e904be4695e851dffaaf96263022a28bef7585097cd6ea6584ac96a7bd25b0e9e6d99a9a5242d1c255d484dc5e8d38c21bdfc51733b4509005e9f09104c6d2ebf5865216621324b0f143d27ca6348ee7e908fc7fa594da825241dec9088c6de5b23b8bc058d29a2bd9ae5d2c44e03f664e761f9596636908ac8905659d759b3e2d04b6cd22c44add36d90d029bf774d09b2110b888653ae9f67ec07e9c9883854c318690f7019f5b3aa98ca61e70a5b42c6948e201bba2cdc72495ef05ed8049ff593b5bad034ee84f1b95de31883607ec95eb284d3138e0e45fc6f536b967e60df80f1db5a516b701b7a195da832e99a404d58017af3d3bed0e0d18fb700d6d25a3a567065c275d912382103ad21f3260ff4352f34ca1f4b8b160e2a6f1dc51f4b26560c144bbeb88b7196d92af60824cd9c47a62489e3aae60f36204d99f9364b15bc148bc1d333d2bd8ff49124cb555b05a26244fbc5a15ec9ee9b67f5d2f39e95470b232248e0c6954307133894a4c9237fd5370a63f597fbc3791846b0a4e62e7ce3ababc57dc52303a6de6d58c99e93d29d88ca294474b2a6a8a8f82097aaad54b6944c1a7592edd0f6da231130a6e3492341533030ace94b595ed464fd2ff041b3c8665aebdb75c7b82d169b2c25fef4dd34e3096673aafc909c64e33c4fa897983a99b58c58457525f13bcae4ac821266526b8ca08c192da60821fb51cb4c8d8a7ca7209ce3d8b6d289dd2774c4b70a142c3fa476290a04af05ef2cac5dfd3590e25f84df5936369ca24d81077fdd7b22a77a4488209417e16d5b613dc8391603d68eca83a2224d80dc1fff3d4d73ffe083e3b27d1d9a3c7fbac23f8e029e3244da3926d04a3f26a9a2795392dca083ea6bcfc91acff335d04e79f940c6ea722b8ce2942ee9a07d12997085e3d6a3479d623825393bed7299e10c1ba437032f95db06c396bc50dc1a86c21c44ae942b02958e5bd20b4b62404e39af5a2d89a67b88360e3a6d4cd0fb611a282e047086531ad66816054e598124f0d08364af2abd320f289fb07f6b2c7107488d85dfc801239ef4f62a5cc0d06d007f66aa4e5cb27731049cb072687faccb9ae928301ec818b5bf9b6b2e5f5c0beee5966a5868dfa5ca00232645cc08b01e481bd743aad650fc2039fcb34e987caefc0e8584ef2ad62c4341a3bf0aaa72425653a9487681df8243a56c918547460b209a92a7952b41cc98c1a690617377a0533de8beec20b1b5edc7d170b18c01cd8d611f23abf993c213930d2f4327e7be7912971e0d2c8c8232c75cceac1812b4b679a5755f3c4d21b38d55f5f4963c80d8c0cedbfb20db5812f53e29dbb3f6ce035be558a8dce1af81aaf68f92d65b5243570a2a3a564224a0317735e771e65a38137394affa7bdcfc0e468da1df33503a3fe22a83432277a956560e3e42b8b9184add964e02b9ad25da32963e0329dd6524fa318f87113e1d90c035fe9473db86b08fa2118d8f6d1252b646e8ba32fb0a292bd2b2466858c17387d8b6a75f9ceedb32ef09d51b36554d3f2b0b8c0b778a8e49fc452e6b6c0efe918ea26335ae0bc73a49379d22facc600b2c04a0c3a74e678a1af3b16780bd15a3af54516a573052e746ad3bb7ca19e3c56e0242799942c3d19afdf2ab0950a8b11a8d4eea6026924160804e270381403b1e9ed010314000000001413c742a14820908455f40114800452281c3828241a1e1e1818361807c6816030100a86028150200c0a8402615030201a4403aaf905cdc8200a1182db1ce778c61a327abe50ceb843e2acb7b0b269b45ae9c6b711fc689a11af0dbfc9393a5cbb8360edea843fc6be24a486b549cde159628eed8992fc07fcba280c4308828853c9f222e958fd16698d5b7692d44e3deffdeced41112a38f470d64fcaf6116f16d197283e98de2921d840f61fd0ddd59b462cffc96d7997500f40d2031cfc5c7c594dd57ce904df27c1477ac67a7aaa61b7df6f927cad393bd824f39b938cc3d9bf0583bdc9a85cd532eed4e2cf4b73e15aabb7aea75ac32b488c0eb8267ce32cd698f425318372b2f78ab72a47ad9504911f7fc21cfa404369497844e4913bfb2ff05eb812d722c7c0e351ed6e52a8f1a73ed228b3964f52f8998ebe06550384046311721dd29c30a46a6795d409198f7fca1235601a123bdf58f83aefe14b70f21476740c4156ed53830415a7e31591b395b3763fb1ee065b33d42830eaf5c53b5a6598988673c2eaf54543a5e503a2c652050988a494446df3856fbf01f67cc600cb50bd1cfc908b459fb8df33497229945cc586333a9f15ddb218348993f4b26d96462a8f2824ddeca0ae903b77bf031964ff28bc90ede3f1b7fa7211771a72632a3fd16eb6fe1c851f23c1022ca9a4dfd77858ddb9beadf1136082cbc7421a8e2c16ee067f865f145555be73a52838146eaef16b1ea7c657bc032dcae8c9f8854a8300d0b07c0ea3e5875e4cb97382fbe4b27ff72241256e1eccc63b7f55e58055b0e90dc748d3a459710be42bab91496d4fe4b2d9e79c427e0ffe450842420a87a0bfe9d37c677bf7cee0f7c4a7cf4d6687f28c978abcacdb1ab7820f54e82d038fae65a237e5e88101924e3d335ac257b5a17034d674a621b30da68fb0858054bd0794633b633a3b684203c505ae0d4513e2f37c004b1d33b2c7c65ecf8eb4e44f845eb7768af33fcf43a4ea1e86409178fc943af49af5aab08d55dcf3404a93af36628eb4a7fd304adf5058fc4c97d973df0183f989c91a0cd6b26f634f0b26f1a5007f4bbc3f758422c698bfa1f794a3aeddff6a82835ae7d8e2846c8f91ac5c465f07b95b46caea83a356e8a69a40b5036f711467e0c868f6690792512840e6b9e558de401c9a5f042981b7789308e48315a3aece28e90c94fb7a08a18671078ce4fdc0d485c4d3ac701fb40d7229fc817b9de8cec93e846254b33687f617102c6b455aa08a592f3f0b31af5d0f4fcb7c9e30066c079265c78366838dd58c56d4dd876998b4f4315cd3045bd3f45b6bdc6e781daa8d51a699107e010dc2a9c468b3eb13031a3a13de3de43b8a47d8c355032b9a7141a53e92a1359cb0bc3059e6c45067bc157e80871c920308e4ba025823a4b966b8b508760b01c594f7c1d2a8a053e5cba73a81eda523d08391e89d1be3515ec6ef27a91aae98a215c00e0e7eb797ac463d5920c79453d08d194f2f1c58558eb565bc8c7c3307b6e6ea0bdb28780a17b006754a771b53f6648ef5c9548803819ad8c23b56a09f6b125613886a5bc173d8d298f52eab85b90d46557626edf6df67392b3c7c131a1f5514d522b56b73e6302c275ac1aa180e480206105b66d0ca0c1a9b07ee78b0ffc95570e7c51051aa094700abaac002e04a042e7000450b271b08f0615c4158fbf33a69750764177863c1906d0678cf5b869c0fbe50279fc91ced55f0b4d4e290e642a75fc4cd07140982294c39b3d83d350740a01ce75d7a154df546a886077dc566234f0a3568f10e3ec988af19883a4eb9d33ee5c093bfe8535db65879c69d9b27ce80e071e80b814f190759399be01b40bc01847aa019a1ccace809280661481159d3099a81289e9a47595160148e40271a10f887df4e59ecf32332fb025200c5ac5478a6cb69d0ddfaae0242234ce3d440b456472b801b03e1a28385566422f5de2ee8aea60c8e959beca450290256c788dece5acd1534325af841a5609f7bad35135cac6627d7cbd9909027677bc58d1d3a74960fa51a789a8df7738c40289500157218ac756027002226b328d74a610168bf154c5d39a971d3086bc35706efcee869ba568c65dbac59aa9d9132fafb467ba8ae15dff5c472de8a246ac51309e65cb4d68e5ae1e8989b37b7a290b5e2dd0ae6355affa59eded24ecf4de3ae326898b5f26b9c9a28cda7ca906a5e6a67906534b44af3b6542b6c6e9ee540a1af34679dd5d0723a755757d0cfa573d767aa158c10ca5a2ba847414fc83f1469f852eed756d6ae512b125a981882d83fa38cc31766ecba9631ae694fd3bc282cd9c2c07ebcf652efa607d67bbf325ab981e3275a0795593467c56edb279f9e5bf1aac66d63ae8157ade8465e19432dfb514f8d38ab823e4b8b623d01b0de18215ce57c1b776dca95c1f9908d576aea6971fb93022b09b5dc96a1987bb1e6b62a274b582e06d1a4f1a7c2445f9d12a2e103ebf05392a69733732934e31786b3b4e4326473f116eb8b39399a9272c2e778a5601808bd14cdb6b6ae3c8232f6af6907b4163aeceb08c96ad4c873e76699856646d3ac85cf20f53abc6a780a48407d692032bde7a0fd00e94d5df2635b555f2d98931809f0c07b466d3beea8ea388c4c5ba05d0da185e91ce3e8db67a6bb1bfb6ee8af5cee056d9d44c833214d0b0a86c902d44d3763946adb0aa6c57994d9375b05057cfcd0a3719d4b8f4d0fad1b180a3d4c9b8b9b56744fb04601410ac39626fd1ca6dd93ce085733076b360d2b5cbef0fad7b7f69b8528171c784cc3a4534fa45f46b45e3042479fbdc405516d591bad77634074e614d0ca23c03221698c24454a20817162a09e5bf1299a088e7e211b574edda336d3a6bd402f45d46ac027ebff80c874ed20632668582f6060001f03d4deac9cff9ba259a08b5fc26da10090235009641871b030894ad91646dd41cd8c018e7d4e349765936ef84c201640fd2a02e8a41ea66b517b6d991725539259503eaef2908d2feb8c4ef63f2812b02d31aa38245cf9cca488757f262aa8c9da6da3811535a9f0cb9ed9c12fd1436c6e547773bc39b32e890d9204c199f1174a6907959b312284bb1d6ea3279b318de908ac409b35e96698d8556dc5ea862b39c5e4b4449c19279b8ccc693336acf76a55cea993335be65ebf0d683366db2d03b6960363e6cc90310da8b08d75fa506308837637acb736e56d54d8c46d136536d3b0f02d481dc42779d94cffe6a69c4d72367046d95cc29b3192e85083d7cdf7c51933f9ced22ada404536d32c6d7eb2f81b7e1c2f6a53244f823b51c9498f9c19e4f644845443bea6280975b3f8de88909b6a4f5387da73f8f76c844af760303700fc3109bb6025739ca9d27dc74bff7a579732af8bbbc29d10bd55b41c08b7d0fd98d5f8a1d282500c9ac6099f6fa84dc822040e62215043955e8f57153111e9fe20c8ac9719eea700db98f838e1641ee952e68763da9387752dd475b2b22883802ca7847ac5404dbf309829a107179251b4e6be74ea3f856b0caa8647a407ac8b253f996456fa690b19f7686a2a1af76f57c14776c5611970bc3ffbaa6dd1e87c43f10809d5a3adf8977e836cb8d739d6d6d486be8f54618d6184f7c227c13aa919fca89e158487a9926fc84b6ee15efbc94a1cf71383841fbe1bf9695462b1f8cc8e0d28ae5d9ad848146a32b1977aab44a90c55a1399b8800fab5261061af0687bb9a346849cbedbb880acf0a67f31722d0da7efb23f4a90224808c7bf6f2cdd8a1d3cf87c54e94077a2d9f467cd6a5ba2c13c6c004af8251bafc8de92d6a5bdc7a05106fb73bcfe840d68258d803e32516e48241704cd0b2efe9c391f3ec8b36328bd4d11af88f08931f26e14d7b2c2d9f2cbe5c6f854dad67b8366e4df66408579b61bf76b6b9781bb31280fce5e018b6c4461b3d32c34f7c7d122909080ce4cf2f585182cb98845c62a234c699c64a696dca733695143508d428c16072ab40e9fd361621490a39528860a296b6374321aa5d1a2b924df82cb66d1f884aa20d20f1671ba4cea6c25a542e22ce4782f2e2a09194c9a8550be9fe41ebad3baa60228487a07f6e240474b27af9c2344c55c5730661c90bb85a3290408504728053ff53c129b91bdb55b74e0eede061b26f14fbc72c39b4d6c3e79d1b1b1417dc8f10bb8fc129c1d5c66083ec8c9480c1030a0a801857a7005789db26fde1396c7944827d900d67ac5841716cafb1b06254eb235b35850dde3787576fe2078b6f041a9e367404b9f6c9abe87a2387149e1f9599d4d6a25036758d20bd8f91dc3fbce98235525adef5be39e18af0bf70b5861b5df6a2b961e1342158b01231420cc97740279a13a607e0506e980cdcd8f8228159cf7b14994346601131c33116cc8c77803ca82480b8ef1887ab0a97df1bf32879315e82d7c3abed257b01bd582fce2bf37a79355eb9d7c38b2ebf5376e6d6647af80292fd321746029bc442f4322f7b3b3c30dc099353c283957df31c0b0f571081f21adfa1a4f0d8a62782974851d217d953f3be7953de61e27d160266538443b0612630cad73e0c086cf61d98f3b1d525ef0d61630a3c22ed5b1802853066190116f17af658b32c18f605cc33b68061bfcc8591c09a1c0f8a1fb2a59de38d2030f88ec43c2fde04dfa4f048f863784bb832e0e3af09d709147a355cdce1c2f9bfa8e4a0eede61a5bd39980d490fd78d3bca6fc93f3714e6dd69cad88531fe25518c4779bdef17a20722628c016ee063fc526ee20308c600b2f3d7b1e421d504433d6383b0172447617855f9787095ef200f76f8dd6b10f4854b050d481e598b594c179845e9e371d0faeb82000ca6c28e551e160921c6974e1d84168afad061e31180b7c9883f62d958f10e53472fc5165986aa3cea706ed3f64f30609c94fafe237baaf4d45f21a2c923c259cc17e6bcd8ed9d23cf4251f804d1fa7c8457ba091f76413cafcc4a1b7601c10eb56c189b16580e77b30700376bd54e11e34353b22609fd4a8c0101352edc67a223a219b00ebf2604cb43e53ee571674746ce43c2fee137d86f289a837e5292ee7eb2fa234346065e4f576852fa1f1bfed9d6bb93335e25b105524292a98375f4729edc9a13cb1220d3eca399b2fbef2da0e478504f1f7f39545dc90a00b29d7d00dd365b2bb5c2fda9fa13f2fb4fd05a487e48f17de2c0e905424610eabd0fb2e3a4cc9414a527bce9eea29f19f68084fff7ff61bdc6fa333661a9b0fad149f98e55bbffe5c1640ef53166292ac6a57dcd1a828f30b5714caeaa3808c8f2e53a9f75e05dd8773b673232608dc12c85ec5b64eae067e00a3430602ef25870002efa5cbba7e8c594e88065fe028aa90953a4cfe7f667a7f02639dd06342410c2717d97b597a2cf85640aee211ab116b33e74144f0b32d487d0244002deea0af34176e12893d52e2921a52c74c41e0995d642cc84e4095512ca23940742b3cd9c0534141b82465453a8aaa11c445d4205844a62e82d5a05950421c45d0acdf64f16ef17174921ba2774e9d05ea26f42870d5d46a23752d1cdc1167ae7a112641864a87ef16a9a17c26828064539408d0c87fb0a951005d0448422be45fda4e82d991306be11555f43b91670f121930d9540368c08331a5420191a4bd1e728ca5db88464704d28a7c169ed65a29caab4d2e40d7a3c3504734abbf27c694e606e802afb33d28006d9aef3247283daa311aea72e9261dfaa1c1b7c7380625c5b05d084385d46afb2f4f58f2bd355631fef9583c2d1ad6f90b7919628a23a65fdde0384eb59babcd03ab987ba9c25cf436b83b51d0021d42265d5cbd56f8d6bcf1c07a690819bf1362fddf9a6032a30ec259b2f5dc8c3d75adc754ae565999ed26dfecabccd0fca755fc50c74a11ce04df0c3174eb4404813025e278996649206a99a49e10d73b82b17b7274009f549744b79390bd225d5502d6eb167a1d81601d689b670242e3c2457b25749d9479dde3d4147e87163a499ba121b4441a1a622749b9b9d890ff1640e2af72bbec3ae62c153a191f83853e03cc0c7cc0db0499d701ea837064f441d744a77096058f6ab00088e2ce5d83f1591a3e2eadc91f6e0075a30ef7ca0aba9a71780c2087010fe28b2178628c1ace8e234dcdd81726295b5c6d930eedb0062c270e42017349ae9b19478a82fc8cfab5368b952f29dec97f12cc7b228d865175e6da0cc869230d7553f2140b987f80e2239b0f1c28c61f87e255034306080108adb7c4e0d0907839cb4228565158594d2716542948b0e2ac19b94401ee15646b8b865b45bb4a2b0c6f5487cc40d4f4d104e5e1d7908666db687550c1203ad97f0e2dee18a29774805c710a8a211e72df61703d01613d5f5da3b73174d4db4bb1f52ddf9d8e42b81d2b540ea204e7231c7cbf54a59507731209e90c7aecd650e0e5af24f7f0f8a82dabf78992f76ae87d91754b808c95a8bab247a25a341f161aa85610e24108346922226455585c93f6ee28a831427526976ce871fbd33acec1174f89fcc72501711b5b89c5989b821a49b466edfc8b06408881d4da7f13b1b470438ae3bd03722a5d7ed0becfe087a8be060e2e3a780ebb36fc82f97e4504f6ebd651ae12edbff1f2ac61d5bce1590743d7ae1b0913786c256d5523e3b2af8b09984306c60029b4c04315207a220b39faf69320530c9ca230e01f8ae59637f89b9a926dbc683c1dc43b58856da4a10f42432d7f5ea2c0a88d13176f9bfcdb7a9a64ab48c8abb6e55ae88271adbd71be52eccd483f22b105d1d908bb9fe97054b4dae73cdf837b7532cf227a2a121d2b06c32895b909f06603964880981c7a1a5dfd82c605094830ad1be712512053c278eea78df25e86b63e173a4c027dbb98ad81a30b6c55eddde559bb902d79a6a9a79a3910b4302964cc5938c47f0608afd2803a68b0bae471430ec84cf0505a81352c14da711b20048a20a405606c8291c32b898e5431164f938fb8f318462224e1fdaff6293621b9fb6044d352d76cfcaf5545606d3fd93717ab4005b3b6eb662604486c7301c4bf0d1e093e80dffe6e4c1f4984d12f4ef3d743f1668c32d44209becc59b0166d764d2b4e076b7107b556e2d244150f3334df42a90db4e2a40504353d9b5035f79f28253efae57b43dad552c31da0c0cfc0a064b3c02c5269b7a7ea0c02a01d72cb6bfa423ad33e22d19c104528ec2875611ba56f9a83f0523700632fda6ad994347e501529a262e66cce08aff5a68073e20f01b7308010d6e78a00693d3dd93d9f3cf28dfb8f2b878a13406d6d96de798d1d8de3ae07d99ac3d171097ee0b51a3b9345ee2e5d5973209329e67c82e4b5870bb24255b27ae5ddc668dc7897a656defb5eb5c2cc349381fe35da8833dfb608bacda8ac0ebafd6b9e68c7fe3db532422a137ed34f364b6b000b717c3b0daee7d7d5629952de86073d23947b5291ed2f69a1b2b8b967598749585bd9e9cc4e931dc5b2bac20a3769413d185afd4e915ddc1c2f5285790b2c4a150a427abae82e10a16bbc173e1b21a2e273bb01a00f043b81df8db6d6004cb6aacf1c276acf782682f7142740227613e115a2a637eaebda0bde85536b9b3202d3d15a597f619227419d0a66569c03f84b56bafc09d1cf24ab0192a721e9b71373b9b06ddac8595e4f5b85ec580d116c6602daa5cf2dfac335d17655c0925927eb7e8cb643f09074afa4c0a2a296152aa4954cacde496768044f50d627aeb5e821f5b45de9433d9ac841c27aa855a5d6e5b4854672e026deda2e968c27b701149ec71129d031b984c20a7d6f8641b621fdb3bd9f62de3319f0f7c43ba80f47944681e4b1d619cb3cdc34a7c2c912049eb858716f23129f4897eb320bb7d80125219404eaac14559bf204b1c12b890ccc32bfc98a489025422f5c0f623bb908e04b294b8ac6ff300e1da8f13ab3e875e158fd30382639f6c299140fc6eb63fbf787ca54fff1effa9bf634530a3692d74cca210323a4a954e7e36216e94a21897704c132b6ffc657a7fc9df58238359839c806a7aac2434abf1e5ba16fe0cc0304a166a88081114d4af11b1aca7541012967edb09e922cafad3a56f258367dc2c61b3fa523f110a82bde03e59cdb7b54bc54a1c4f0aa9496b737011d69924394020645d6de5dcf9d5a38790020b45f4f26a66be5fb302d28d7c4589eee5ad824c8690b398a91371d7ddd963ec28acb6e8b9105f3fe934b3382c5a0699cff9396312b27011800b6a0215a03b6a359a3135033f5b1b7343659c39ad54786febb404c50fb75cd143eb49b57f3e1c4aa21d98cc22a060adafc9f2174d2bb1bf471263491b1f5bd5839851e66aadba49ae528f34f19731e33116e67525edb84b8b42feb056257adeb11f0ac592923c31cced48e7e5e97dc5929ee7ffd9a67342178f871008c461b120c7165e9c9bb0e0bc020ec9cfcef7c97107156a5a2e652c2f440e6a6f0791379d91d253ae1371f3fa47b67ee5c7c224afc28f121941e9d7994bc36c2a719556b824ada85383fa5012f56854138fab55eab15161ec81cc017066f5fde63cdccdf7a5899e8ca1b5e2e890fcb61ef4917186a1c9cee50bdfe8535f3d746ca33e8fb447b6207ee6541af91c71c9f34612e81be8b992a51b5a732aa08e84af5d5c30d78c02c4af90a7bef8a8da822f915d6033816ee8b4dbc960604b2d40c1622c7bc63b90eba3d6ae783d668fdac4f22d592f90bdaf79d4840907ec12f1a5dcc0aa8dcb9555e1a8641741959713888e6fb341e0ffb89991631567cfb7bac6146147f1257fe4c74aab616ffd60278b5763c508734e209ac89edfc0313c05af26439df61ac9ef05f879ba4f8b50a6cf82ce2c2c2deded88e32d205a210df32e010d2dbeae771d12fc02e3707e7afda2b4f5db4a19bdff161898720d0ede78a1dfd376637548032877318fac9310129cd262d995401252b0686dae6297fb0d6c2df8d833c82d27abbfd330b8a2efb580966e8d63d18198afd4a1481efb72260a8a18bbe53de1e35cbc8229d63529ba14a629823e617eb42aa96c160820cc5053da0fff77f56b04798b1b1b60424521da0464cb36da313d6470f53b57372cdcd2d7e08a5a98d50199919ed36f3b5d3b7c2008e3f409619042f18d175808384031f29108d9ae46ac1f9b5f6b2209cf363e4fce67a15d68a98c21ae315e9fcac42059d0421df9269bfcb2856a02b3f4a989de4a5b34a75234dd19178b2ef0e2b371f4f3a5d43de8f6997440b4a923855bdad261aae37fca4704a6b2449ca9e8e25ee03dce4d268d0272881153951e4536f2af1d4d61df23179bd0393bd4bfc7c336841acd7cb3d10b94e749e918776721fa06382e29d534d01a14db7de5dea5f19176c45c1101767f5f42e767e57ec9d1e135b44eb920bfb7b07be5778bc654e23b857fc76450967eab65ca5a0430489ece93cd4afa1a62ae58207965ad791d70f405f1707cd1286e29ae0a6b68d6c1aab5a7c03eb92407b57c1697e876263c9326d130136bbc1b02bc6854d6386ee51446c9490034595a58a8e38bacf3e2e3588be55d827a56c49347a82747071212667b09d4cb110fc259af9f2dbe80495a1f5b80bdcce7428e2b50ec2e113683f4b2f1361721b8aeeed659c17fbef995aa0c5781d0aa29255d5813548a5544b904aae0ad008a07b2e31dc4dcd7772d9188ea3d5432c52741e35977d4daafdb55dfea430dca168ce95c3cc431ebc771e48a267486a85a91e5880e1ced0ce48962df5c3e2e52fe45ee386c8e748de232954cbd75acec94d34e00d76ec2da181b639c1044ad6930614d5b97b0ca944437855053c6eb78b9ef97e75b1cd715293f09b40d9e295a85bc05cf15a4ef71bdfe209e19f0d890b33a6addc8e076880470631dab86b1832a32ecd43818cc30f90e37de84f38148b94fd44d0597e57d9a0700b9dae6370c631b6941bd5b594453daf44eff87cd9f026e128874521634367ff71d98f1ba9f17ca03a80c2e60a61bd07654f41545db55e6270f3767099f510af7b8847575ec69a4e8bfa393d2b2de42acd4ce0a06c305e1c2089c0e1f8dac0181634b08ee1e27188049715099132532b5114e7d45dd100856c189294b837a62b54e1a16b003d0c0b4e0bcc2ccecf0313a84d8db0e40f0686bac9a7d90f5df7b122f16c203f03f8a7f9ed8043ffaae6e060a35ba019821dc9ee3c00dacbf07638b98e05862273a0004ae35487130ff89edc5a28535b6bf4c934aa1a4211874daa0528bb0038e8cb846b7482cdf46d9ab0d6be8393812af7cd6c8a81f20533fecabb326468a8693c8d96375fa92e21763f6b46141fcccd2549d53aab1d85f9fdbbd7baf1708b302476b2002fd95d346fdc9d553e340fef37550e88eb5825e06e1c16d933b00dd87b9013849bd616d83736c7f68073da0f3a255290d9ed15656d872f7c523fd52a61747851eac1420f8aae7441aa727239a5ebdea84b6af6391809f670142214adffcb7be057fdae8af08fe39551b7634fcbc2354bc48a5c100f16fbf11482f1c4757889d603b8898bcda65f77c9b77b59293b963edb2b5d841fd3ed8110b13e7aa0acafe0e6fcb012d8d003efbf94f94f569bf859479e2011f0f81eacce56a8c528fd2e4f1303ade1619fc5af08aa050d5e83eacaee645e7d7ae48e7a216eb247a611d4529d0f188c53a88aa6067118aee2c5a91ce452dd649f4c23a8ad20340ee1910400904c4d0801daade368ec33dd9c18ba92d514735821f970d540175b3e106a81fec0f4c1aa6c35b232fab386c45897f78e1e351e07ead474f36467316a978a7a315eb24baa29d4529deb148453a88bc6067118aea305a814e472bd64974453b8b52bc63912ad2d203d692af3aa8f2590a086e168d3acda1a968e7a522382f3a0032a73a12a30cae9b5cd1d704696c5ada53c4cdcc836580c11f6ca9801264b225525fe9f034aab0021a2629a7d7c6e47dedb8db8c2c04ac037fc31f3bec88ae688a52c7c0a67fe870bdb4038a5105811b1c635bb8a9d9e08ac730d5c3d78be8936282a74a4eb5b173b781d1ebbb5bec9e1f234e81354d63f2a17d7e3980370afc7acfc71a67514a32ff3b36ae28055879510df6d88255dcbe77f3c335740a956604519cc1b411d69df65297b8e319514e69cba294aa3a2f657dd859229090d9606d0d907490ecce627d308a162ec17efd0f1af683db08f54c925b89c1b92f9925f2400614143d01ccb6a33dfe52bdab814e3e1aaf1822b3736ecccd87d682305140292297d8562dfebf3ae5dbaab348c786e86eb7b058b855079bd03dce5110bd2feecf04a6793f5ba8ead8ac52e16de01b291450d0d6129acdfe72ad299f197d2f7a37f6a2025bbc401ea503be9c8a0bb7483a0562a8b20f71fdca74ef38f69965552b9a12faa4737a766fa091af9bd5f2c98e35b828704ac721202cda0451d87d1169760c230b61793a35a8dcefa63f8fbde6dab0fc98cbfd8a076342a0c0ed86096fb3673100ecf7a9ac3ebf9fef5f9cca287def788e217cfe137d1daa260444d2978184c485cd5ae143d11e001f9207d2c314e94a43e3733084751a96857aee32c58e629af77fad13cd02f5ed05ed3c8763b76a028c9902ae0b04660a3860b46439330f0f0f0f0f0f0f0fafa18d90da083904429a4c494ac0c9624aa14549a694a44c2991bd1ba30de8e9ccc4a733139f2e12872e019d0a420a700a33d470d8f08234014628d2bd2ffa3666fc4bdd0b608082db0c56212f4ace3ec188fc174253b6ede51024c0f004773a82c8d8592d72df09ae525faa0cca93caa9e404bf7e9b54d29a7387082e8e22c0d80477bea13bd1460555060e1a9a60254bf2889f5d77234f1899e092d2a5933215d1bae2828b2fd2596a010313a7fc98ffbbf42d5e022f502738c0b8045ba3548c37e9c534441c396858829d54425d27eb743a56da03605482ddcef531525f1f1fd706189460b307df94ab3e46dad22418ddac5f32b3335b64788d3e4b00b911c09004a373f41c56ea9e1c604482d33d39e9fd6d3e3e549083868c06801a604082b78b9eae34d2569f07c623d84c151d9e725ef40d0e3882d3b9ce7f2d898d602fa8204cdfe3a94b32827d4ba6a29b5f4a80b1087e54aae410f447f6978ae02e68932d6efae39d7e13c16437d19b848710ba11443049736288f40fc1e79862a5194fc61a0d39c19921b8d6c956f991b5ecdb42f0314f2e2531efc9285a1260108249429efaabca20a6f241702745fb266afe885aae11600882b11ce39aea53b764d2fd018c4030f246a753690704bf13b4ee759e52d16bec018c3f70d1732447ac0c0f60f881bf8d172ffadb26130d1030fac076be37a5848aed972729680974f1058e1a36b4f0cf61a38bbf40cd01061f5853e9a172081ab564bb07c654a8e94b7f7e49281102430f7c5f9034396b88ca70b700230f9ce4984468cc931dc0c003e3b9f9f427a1c7028c3b3051925750b9d33930200194020c3b30228745f2d8554173ee041875e02ad47910c9934e214774602f8ae48e1b74c7882e8c39b0a69bb72ac7f7582109c19003933d5b08de2263daf1c8c813c08803a334671271f7941c30e0c068f091a0d29768e4b051e3ee068c37302945e6cdddaa1b92d164b261b4814f8f6a715d73a8cb1f2e3e870c1b6eb0060c36702ac9287aa39deec9da1a5813a2e4c9ee0cd5c08aa71cf2664b73e0285d809106d67c445b84887901061a78558dd8af124b4eb0cc50eb824673818e0b30cec0a5ec5dfeba4174bc6e8b1a3472a0f722056fc200c30c044619c84003c61878f5db6dcff4618881afce97b23d8f64c008835e1252ca9023677b87a909030c380809607c819f9093d69b269d9f5466a8c9a861c30bdc758ed9c73f731025047861e386023e3e70e4781c385a0b30bac05b57d42d29eaa1c423c0e0022fca226598d71cc8f10cb81cc0d8029f3108979cb154a87881a105fe368755ed0429cad61a3464e4b8f13870744a004616d8681db2bafa0717bdcc50b39183c691e1050e848105764f698b97edb1eded0b7c7ca01b07c615b8f6a4619d83367bdf0a9ca90d2674f348cf7c15b8dfac4928b71315583bd56313a3fda8264d81bb1425c8db520a9cb29c47275fb390cf1405f62d63984437156497a0c0e9fe0c16c283656b9fc0e6da24d3c2ee3448df096c6551a3f2e3041db46f0267e9cdf4c499c0c4cb66715744b6f64be094cc78a5e95402a71a25a76bc693c0978b6fd22283a7dc50f0356e612081edb7d6fc5395637d8ec0a63ad5cb15947d903102278448a37e841c11691118897925eb42f46e0822029733bd333ce6929e33043678304df9ed4f83f40881f588363176d6a4cfef20b01547f7e90d25b30f0436570ad192ccd348fe0f18b51b636a467dc0e9341e96cfdc1e70da9982cccb2d0fb8b8bfa224fa7da5b4d901b7222ac742905a2dd201173f6f25d6aa39602fa20413c94d1cf06b5a22e85a35e963de8073bb354fbe693c4ed2068cbb24539633852044b2066c523a89068ca5947db462deacd20c3895f2b8c91c52be2492017b398455fd27ada5833062c04fca1ba345d5899d441830e046fbc2d5ed3a48ce2b982472a81c695f3b645dc18559f6fa4f9656b09db3e8d2dc113c968515c5ed3bad82f7cb7a1a6bf446f255c165d2129d605d7a44a9e02249d14f3f2a1825f1dd93f47efb9ce25531ddf0099e24c5048f01aff1850d2f6e3c8e0e5370dad43393d4482918b55b299e2e85146cd227a405d96b9f9246c18510a9eb540e16c316057b5b21e951d3bbb509051f4b294d6992fe3fef40c1e690ff7a7ad927d8de6457edb7e149c9135b47eb13dd8bf419006ad0d109fe8450416ba87082f16c9f6f9fa67ead9281e6454be00ed0b109fec374caeca5df4e760303a509ae83d2496aaa6c8d39efc8049b3908cd99378e09fe829a8a31e279094e08eff40d41e5e89158820d1d293ff42feca844991a3167867650023b26c1ded968c58ea3aae3da2109fb00434724344d5b9b33436d0117c0e220f1082e930e964b24b5232694830e47d84747233869af9add5e31dbc969540723d8d0ef6b49c4e86239ea58041fb7468e9ea0a4084e4694ac26af4bf4d789e0b564c98d9a2b2238537dbe1abda35885741c827f6f3dd567aa4f6594101d86201d8560544d8b9fa4bbce2a7510c23e72108ce610d931d36ce81004afa1bb621afcb57fe3397e0b2d1d81e04ba61d8ff8254ce56b861a0d2fbaca1a3a00c1d89dae0f1d9d9feafee16a2f37f5f90c352c32c0803474f88151a5a3e4105bd3d1074e744addd724562af9196a9e1d7c60d367ce135352ce50432974eca173738be87a42a866a861871ed8ecbe5321c4a0aef1321eddb091cce4814bfa2777b0d0fb91d32a880e3c70166e2a9dfc5c1bcafb43c71db8e4eb2932a6d869bfb40323377acc1d3526d55a12ad43471d18797b1ef4f6eba62e3be8c076bae7a78d6d08ba9ad1310756dd64fe72ad90bd3e5bc8a86123fdbff82f2c5083021f1fdb21073e67b333edd2229468c481cf298a062d31c6f453e98003b72731df8fc6dfd486d7f8a274bc81c9312c9bc7535929bf2e1cf0393a070614b084041d6ee023476a2fc9d6c9daa2060d2fc7818e36707f91acafd1c1064e86e957478fb8759f321c5b34170b500b41c71a98a4be27bae49b24c9c3d105121374a881114129b5f7f165e8e1504d037b564a6bccd8d2e88206177a1d68488396ee0b96de82fab7a8d1373acec0e6d08b22fadaa2a49c083accc08d489efe66517bd7520626e4d86ae55a0719b8cd2445a89cd3757e50171d63e052545efe9e2a2195e1353a078d43cc8c02586881c5d540000e2f6c1031948e3074808133d91525c690cd50fb15d0c841a346e3f8428717f832916376b7bc943a9ca166aca30b6cb4521a33a7d48d1c355e031d5ce0237ed0186b2538b8682542c716d8dab390a259cec8a1430b8c1e8da4de3b687578cc1b3ab2c078ea04757e771742270e1d5860cfc623e47c5d9a257b05de9492546b95b4022735f9560832749808abc005dd922d5e2519b386b0830aec6545d19c9a24a3630aacc9b413ef75a5d1210526c98f496f43d2083aa2c004d7b088d9de0094a2030a4c12fd1b37f88aa85e56d1f1045693c6ec563a66bef99f7138fa238001484587139898f7fc3de71b061d4d6084122b9db6d184959409eca5bca62229751a417574e858021f49e9d225af8466dd4a60ef6d47ae7ec7ca61cda123096c72ddd51c27ae8767ddd0810446e692d9229be408bca8a89164cc27aedfe93002a7ab94ceca54f1be4a277414a12444777e9269d42e741081cd3599b54bcc835e5cb5d031046e945a55ca8fe91002ff2926d51bb314042ea987f6783a760081cf1bcb7692c6cc50cbc145cf280ee8f841bd315fca98ef93d1e1033ec40bf6b9ccb30719dd8e1e706d61fbb1d2c94a1fcd5015dcc800fa13986d1f3a78c0c40f9a3a4e48aa92a677c0e6fee6fddbbaab8f1b0a74e8809da4facc47689fd0910356cb4b2da7ef38e07a271d248d1b55b5c504276bff4ca4dfcd30cf25f8e89f7f82ca31f1532ac1c312ec86a462d6e89f2dadaf04a7bd322d683135d1130f4ab01fa369ec4e3998e6dc63129cdab9c5acae784a0425c1e80f5983f25f772d4f24b824d2a89c2369cc4d8b0724d84aa2d33a7ad48e27f3083e5975bb4b30ed1ee3e108c6b63a6f49c849768b1e8de0bd640771031e8c6064d2cc25d46f8e581b2ec16311bc054f7af2ae76e8c420c143115cce90ac3377da23118c8da87927514ded8d0c1c34520d1e88e02d674c2ffa53624afa21503184257da9744330c27267f4109ac733a8106c4c7522a6e5eb1fbaa2051687030d1e84e08249887b0cc23e4e109ce6681bb5bbfa41571f1fe71108de32247954bb50008b0c4480143a780082111234bfe5d0586aa63f309eead249bea8fbd94cfbc2c30fdc590e513ba8cbba5ef2e803abc1f3757eff502572b0d0020b2db4c04206161988001638f00e1e7c60548850497bb567919ac71ece430f9c648b9d37640b722b96818f3878e48149afd97edb924b2aa50d37eb8107d6555b83bcff7a0d252b78dc814ded17ef3426ffce423cecc0c9905822e69ae9118b471dfc14f3281db8d1c14c254b316b935ba8e031073e479f0a296e96db4353f09003a336b1934ae9b794ecc4e0110746961a9136c848d9173ce0c085b67526cfa49fd5be81511ada5b540af934c7ddc0e5607e96368fc2e0d10636bfc71c53c22ef3ea6c6027bb564c96e51af8ec2649c83c42ef22ab0626c41c3da5a73b0daca84b228be8100d8c1c95beea274c35299d81df58d2c4e4bf66a86b0656849e18428d5d064637a554efd720522764e08375a8d1513e39235990e6497a7e8888811b2d328994933ce35a6160b2be85203f4efc48193e7880812b3795f46d66bfc0296d37bfda4d7a810b42a9348d6dd993a7bbc07bb2dc9f3a5525752617d88fa0df444ac12d709123071121e6a1053e24bf28b1d4b64716d85342928ecc7c9bedd2010f2c705a62c81a32dc73ceeb7ae07105f4b0827de0f0a8029b3d317267cf1732a95081519274fcbceb4353e052e56814930d571d7848811dbda72bf306652a6467a84581cb25fbf4998ece50bb61c333071e50e02b8886ac09b94bba44468ec7416ce0f1043e6528f57d9541c1d790a1821b39d6c3098c7e37ffb24a1fed5a2fbcf0680297a2448d22d4c804937550714c434e09ca6309dc68ff98fc3cb8d808b51738f6ca29811b8f26bdbfd45b8f2470a762be7162a8a890c089b45f2945d00cad00175c7cb100228035781c81b15c1325d4c8e47fb211030f237011cdf27e2559394278148114f6294fec7bed8307118ac710180b39449f1ad51fa2cf50b33d7808815151a33e9e2c48cdd7305af0080297822ee91f96f2aea76620bc820710d8dcd1e2eaaf9a213278fc809f5c6bada2d4ff69e5cdbce0e1032e05393aa8bdd2dba9341a78f4a0a4a9f26eaa10d7b2e1c51c60c3c6051af0396c4cc0480b3c78c06d7e289ded3ee8910a6efc1726d8019ffde44b010f1db0975c336bdacf0cad0de4f84202095040113c7270fe2416bfa7712303a50c1e38f0b8019fd75c2505fdd9d3b891812d6ad471c0c3068c4e9a949f858a6b5a8ec1a3065c3e15738d2ed18013f2d57c5329d3b14e3360c42c89e9c9b80cf8ae5c71ef1403b64388dcef9fe301032ee8dfbb778d1944f30a3ec8d115cdcdaabeb42bf833a52b77d09be8752b588f413368cc2a757559c1454cda4f97a7362dcd2a18a5c1ae7b4d8614fb54c1df687c370b9223a4cca4824b3923e635a147056b6aa2272ba5d036f2533039fba78b505a75948829784dd394e954599482499bcd82fafb574a5716a4e04c88322f1962598c82edbfbebaad4cdf13e94216a2e03ba48c5a9597d2a7e80c352c32c0001570e1851708d0228b503031e26687f2b614d40b8acbe213ece97351697592852758911cfbe39b8d597482d3dabfd2a1ab196ac6b86864230239687471bec08021260b4ed8c767b189928526d83c3542e5f38b1799e0ccd56285a0732b6414095960821325a3249d648914c4bf047f29a6e9fd384154095982abb49d56b364703d5125b853df7ae7d143092e255ad2ce6954ad69127c923812a40789f99346126c342552ec6c151e3a18096e94ea2b214ba8df0a063e3e929005241879d5766d133596527a041f3c66fadfa83b82adbecf9b2b6ab4ba682378addfecd943c8083678bae6c94155f7733dc862119ce95e488c557aeda3b640c842119caba6b8659aa9de671689e062059142c8374204173a2d8efc2041da0907591c828f31a81f2d0b9e39655918828f2cee63a22b276451083ea6fb3db5b6e2f59d1d6441084ec791a3be17f4887e06c17f783ead1dec2ae7b420f8133d4ae40e03c1b665d71cf504083eb2a4ef8d21e40f7c6a8d9bfdaa2961fb814f214acebf51d3074ea8da3619eae403bb39418268d1d018d53db0ebd135699e187244d50337da35a87fa7f2c0afc59c92744d15fc4a3c70223953e6ccea1d38bf8979b1d52d8687d8818b68e98214617a745f7560d2989b0e62fa54ec181dd8cd911cd3dee84a159f03a345258b869047e41191039f4b97d60f9df62e46e3c0b9bd4409b936660e221c3877b1db31fb94f4856fe0ab25a9f2ce24a309ddc09b12952b63b6b4814d5dd3da3c11797db2817fdf0ccfa742966c296b606cfcefccfd44ed666ae0336bfc3b66acd377a5810b1a7c4f660591fa296860b255a764253c67e0c2d28d0e4a86181e333398bdb2e5cd29a7cac0fb95069535e7d5acc9c048fab4b2da8f2948d1185851a5aa52db79d4498981edbc6e4ac4f5a85e7e1818a1d2ed8e5e1218184f995975b6b1e2565f604349caf8d79d17388b5ba1abaca26675bbc05fa4a8212f8438d9e6029b64cea4a386bc31f9640bece954972c3b2bfdc5b4c0a989ed172f8ab2c08feeb4d5633258b0d47b97e81ccb2b7069ffd4760ca65d5964053e8559f43b0fdd16275560526e2c11a26a52c1332a70d1d4c812cd77156e4d81cbeffda63ec4e4214129f09e7724e5540ffa641b054ec490175963060536756bb0f4a03d42dc9ec07f9b16f3981944ee8a1318112c757d1affbc2b9bc027a5b5a73675d097264c6054b4b8c1829744c862098c4e5d77427dc5981f2a810b3277f8951615721293c0295379436789042e636a9290829649de8ed0a7797fd0258446e0fedc6f7784570476f2a7f1dfce664104f6644d0c212236044eeb2ee94eeb29c8241502df7fa24f9d8b41e076b46809aa9a3f4a08087c081e44e9b5bc9f46e5079c5dd66c1174c5075c6eff88d1ce2b68ee7ac0499d74def6271e146da49d8a1be90d42163be0a38b2ce1adf5415da403d6dcd442a4bbeca0cf01a72b688da1732931ff70c0a451a5c24567734bea1b7031ac2a36604765e7d1a4a5db12520336a827979c93d6a0ae440326e8fcbcbad90cacf3d55306ecb678e494b26a8a746370a65789640183f228695a43902e1160bc82491bcf6ddb5a57302adb77d09474becd7a2bf8b81b22478998b29789155c085e5ac9eaf6620757c1962a399a46e3b6f64515ac27cdb8b529950618e7da9862781aab2c01062a3e8d96a6e4baade70b0dc629182d9e419d902963020c53a067659372670318a5783dbe4ed28d1b19c020c5173046615e1de9363a248ba3230a466fe658ede7059ad20fbced26bd2562f46cb5f68171dbcb9236c94a793a3762f081f1e0d13cfd5731f6c0c874b959fd6b23683b861e1871ff3f1b751e182dd5982aa21d030fbc5866ed33cb1d55217760fd3f7b4a263ae5cdc9f2871876e0c736c5544f32778851075eb35dd20ff51322871874e023a848132165cc1b392ac811831873e0cf437d881e2647f215430e6c89c6f51c82c76c17ba03b0d0020b57438c38741e295792fa396f04074e47daa41dd29dbe5bd4a031230337be02e60131dec085d0e013d43e62f0387203a736dfe9aabc19a6325288d106f6fb32d4bbf28927bd9d0762b08115a529f77eaecbf7118df3f15146d660d6939836e60dcf7c0c35b0213737b64b34461af814747ad99d090d4711a17d6f153a03d776aa7b9a3603af92a2ea5fb0711176195853923e5eb995b6cc92818f6ea5796d9245cd8e814939c493d54bb25219313051339d0433d3ac4cc3c069d0fc135576ba2624a99a4e5d582e7d818f565aa76df5b4c70b7ccc1caae4bad705fe826fe594abd4940a165a181738cf987b6409a5a7712303ce058d195a6c81cff590a46ece1484ccec10430beceb552c2dd1f2a6aa64814df36cfb1d3f5cab9a430c2c30713f77d29439076dcf6b5c1a625c81533d55b20223b2ac4cc67c568111398d1252e3d9ed5ea8c08925532e2276aacf488c2970498988a6b4ab75fe1e430a6c3ecdf9a3dc14053ea6cffe74490f054e0409a92d64718feb13d84cadfa1da926a60a72029f2505734fb5d9c2bf78c013623481ffdfaadc986f26f029632affac7a09dcc8b3ca66572e9a2b814f9b3269245d31d9a649e072d9668f562281ddadbfce51c34dad6ee304318ec09b16a129f6a7dee6d1089ccaa0eba77c2c021b4964a5f04ea9ed2644603fc5d1cb36c9cbed2130d23d7d345a88221702af315ae7a867a33925088c1ead6934440e086cf88d98bc4f776143025868515b88f1033e48127a82d0cc07bc58dedb8f145b375226f0372af0f1914288d183f4c9b397b895e2011f2c95aa60254a5de5ec80357713f6f11443074cce98f7925fe65ab95fc4c801a772a8b8a758282b79e2888103b6eadad66bec1bb0752a447d1c49f921b2019f9ff2667f91196356ba8851831834e04314d7d851bc553cad8287c0f220c60c3891556e9e27e5516d8921037e448a98378ba608316250aa684c99346968ac982d9ed29d36f1ce093160c0af78b068f133ef525005e1e315dc886c42f44d743f5cc188106a74793a55de7b01400c3e5ac17d86b0e89e342f7f7c86da711938ba0c070226f001192df860059342d6dffdbeb3d575869a8d1c3256051fabe0f2b388ccb1b7ae4a7ea882cfc9b2e4cad2c9083c8d1b19c8f1910a6e2348ec3fbddfe7251736643c6a2ebcf81b6a15f840c5974325d50b2529d53b828f5370a74fbcd63d86469a22993ff65fc8d87e2958cd8841097d13ef5472c607290e4a464cc26a1b05935d2d28efcc19354351f02af1cfc52a49edef43c18e4e51d368f1d44de003149ce8788c5aad2239e5355060033fc157e63feb20b38968d4134cc89e92d648bf152deb1f9d60ddedd63f7ec78d14bb61434669c00727d894b41bc32c4436c1a6cf2239ed4fdedb574003c78df7fe19664fe3468efdd004a7a96fda3666b7f493b274e304047d6482531f8f24427275a6bec60726eee312f76109ceb6836eaa78df47ca161f95e0425d54e710733e28611f1f9360f25dbe25c18564d92da4b07c44821141c40eb5f0aa9c7c483039a8cc7831a6caef9a47b0ffa1f4a53121e4e8c88723f8acedef4e4b295e9f1f8d6094dea64b5ea54262ce08aed453d729a14570294212fd1666213fad085e3b75b609a272326d268291f984fada8eaea7ae2e3e10f1e8e834eddf4f2d67a8f1e0e310f96108fbf828c47d90027c1082138b987473ed6efc67e0e80668a1a9878f41dc8720d8c993c36d93e746f70b4302c1754c79dc3a4bc5dcfd0cd4a800c108ed587944e211287f607d54ca19eb5e645ecc0de1c30f7cde8c61dfdb9a472db0305f08e1a30f7c78b4f51cdcde02c2071fb84a1b2db25799f6f7b1072eb7a5113bbbae4cd203232fd9e42d553ff2d0a94d6b9d94c3942cf8c043e6a2635ab5ec5d39173466201939ce8cad0c3eeec05f7aac8bdea66bb7f9b003174a7fd00fcfeca8918f3a900f3ab0e96d358b6db238e0630efc451c6d1692c849ab490e4cccd44b5df9f2e4fb7160f7357f509e32ae780e072e079dd7827abb12b1f3063e44b44aa3ce76036341432346104a3f881f6dd8eb47d297c89a0dfc5a59ecbdcdda4fd7c06e0e59e21d94ce2162d4c09889ca7d9d21c6a453d2c0e5d3d3c152eaed6c221f68e04d44a7f1d59062eeefe30cac9578c531e96ba9ee871998643157b2f4dfbf95b278f8280377fe7ecaba554306cefd5b44a8d14abb6e1e3ec6c04634d116bf2409c9ee8718ee230c9caaa77b9f76570faf0c1f60e0d6db2db544f32b8b99a196650c1f5fe0bf82482269fa68eddf0b8cca953a889919281cf8e8021f5488a6db3ca4b1b5b9c0ebb59dcec9cd45a7b7c66fb15be0728896a8d7e4d458da628b1a346e74d1c50c1cdd801b14e81cad800b4840021f1f0ed042cdf0a105de4663fa8de469649eb2c0c9107a4aa9a46a9b7d0d7c60814b96c4b643c4ab0cf12fbc2816f8b802e7191683596e52e275bf173270ccb821638b3e12b88004245077a38b2e08083eacc05a8d47f6097a0d6c4123011f1f55e0b26d5d6b0ae9196a6a0af8a0021745e737492928b724f442468e96e17ffd3105266596887834f5e11f117c48810f9d981fea2f2283771df8880297b6c62707f32084d75ed028010e2870bfa68305311de266446f031f4fe083d094924ba8baf0e104fe449d44b7dffd949c42858f26b03d2684d2547577daf2f1714ce07d84f707e176697661a1c5165d01287c2c814d49aa7b1c9dfd42dbba527c28816b3b377d37ad9cd9fbc34712181952ec2c4b3b12788f394809c9424d33e508aca6bc6d97fdb72ee83e8cc0e4e039849cd3fef111868f223036e963e5242302a3fef69b23cfea2a3504fe62e6e44983f6a67a84c06877644ff9930892a206f808026fd61793709328d16a20b0192b4a767111fe1efe80bbecbc69cf7248ce8b0ff858f957e97475f61cf9e801579f5310bb3f3f78c0ebc66c1dafedd2d466076cccf422bb47e53acdb9f184001f3ae0f2b42625f3f76be8d4ecff460ef391033e5b9ab2945b775bf2880f1cf0218e4e232c88d0bad7f88f8f198df8b801632a12a396cab944e86cc067eb7ad296314bf8a801977489dc2193a7840f1a70d2b2b7a46cc1779238034647f18b1d2b5f2c35a166e14306fce7cd412dbd660bdaa3153e62c05eed450a514d9486e403067c502551e3e71399eaea2bd85abdd25dd7d178a62bf8edbb9c837a116999d40a3679901f42ff4859c18a5fa54dae238f557011ebf3c673f31b1df75005a33ce845fe2474b3728f54f03925499d924490a9f44005a7e377ea177d4966ed789ce2d7ca2b1d3c75537095e22f724f8594829b542234837f1ea4e064a888d51b9a3478e9310afef2557d8e4a4a2404a51c3c44c1f649dc102704dd9da4013c42c1da59a6b4918182af6cd9bf43dacf7ea62e920f3c3ec1ada6ca1c4fe566280e1aebe10956c3555376cbcf5093f15c6c5183060e3bcc4e7012927a50abfd195addb091fe5c7a7082979083d98f593c36c188d64692d9a3f79a796882ad4d42eb6fab1e99e00a6de02fb54549b24dd944367067d965c13a9b8ea4d7c0eb28937ffd5103274544919d73d2c0fbe67e4caf9793caa281bb929bd28472cf6077eaaf8f9c3403e725b25e4cedd9524a193893125448882275bd25031b4c9baf08d5a4447e0c9c26bdca1e1e42c42031f01e3dbdbe25ab6e320c5c5a25a12c9d704d2a6060b3e5cb4df22c5e90982fb066a1a26ffe158fbc17b8ffdc39b4e25de093d2b14b3aa95ce0458f12692dbb057675bcd592d4f6204b2df07d622aa4ff0e4296b2c0b64889a13f72988f05ce7545055b8b7832bf029ff22819bca268057e4d6d5805ce3b5fcc937f24d353810b5a4aa34af44e1e4e81cfc9432d058d4881cfba5b25c213056e437de648f1640a6928b05622a9cfd39757629ec0d77fac1c437950a17402a3dca2c8bf8871f3ba26b04169eeca9373ad746302a3925049f28dc5d2a725b0c134c98aa5be415b94c06b95cc244a4f50515249606da3664f1d75bd26a98c21814d5164c86a4ae3023b02a3929297458fe837a1590b981118dd164466341d56b932432d052fc3460e19e450604560eb6a42bcacbad1412442e54127f14cf22b36047e52fcec907933c8b00b13025ba222e513a1d74b75160456f376d09245e6d8498de34fd0cf858cb51b5d74610c087cb2cc5cc1feb27e8af6032e454a2993e9c8ff79643ee04a64fda63508d6032e4a52117c7d7d720cf29f81a367d4f8c214c078c0c5bcc1eb548d4db2640008b6034e8d7ee7cbead94c9e706819311d70f147a4ff5ea82fe97f8cc172c0fad5464f614a7ba3f803c30177e2aa1641d6a6c9abb9011bc9effb3a8ece1738f4b46881d980cbe8ee41890e762542ac066c90f194a854a63289241a703a5a864ea33a88f47d067cb95a8da58f4c06aca6ed1cbff3551411b2187023eab3ede73da56390c1800f9542aee01d744b087a059f26c5bb64ea96a26d57b0c9dbd279a78f92476d05a72668d34a23f1344559c1c59446927e4d57c1a98c4984eb6bf01b53156c27992cab68c4ea3015fc660ab2b4e7f0182da8e0d4e82f997b84679a9453305e793c4fe68a2918ad2a167f83f5c57829d80c8b77c2d3a4e03bed22d9c4dc28f8507293df474e147cfacc9ec15348b9da8582db546ec17dffd4f8060a76c783daa02b745f8e7d82d1acea929444a7f2cc136cceb95b3db34eb0d193166159276dba8c138cd98498c1838e96a34d70ea7ad36f0c1d71d4046b72344347ff18b393092e33b7f6065dff2a263851da36b3b897e06292273ce369094efc82f03eb9ef5aa9aa04577eeadae289128c3c59d9828f3f09c6d46531732b61597949b09ed5f6f4867c2458ad9c2f49cc6022760e2478b55117a2d4a3a8d123d84bbd6572e3b66ded08fe728510240769ab6937829568a2e27e2a89d0352378d19c2396c8f5223849ebd529563a21f38ae02ee42444ce8e3f4a2611bc557a45d66f11c167c88b549d630ec1aff7a8e58d3104ff41734a4246bcb68829049362acd6542683d94e08d64b071f112f340836a75349c84a9973982a087e2cf9291f990c0427d3d4ba9bce2f6e4940b06b1e4dc9ed9cb327e11ff8502273a618f5031febfb5db47d6512f6814b13da84ecf841c60bf2814bd5392cde7d6889ee81b51ffd99fbdbd7cda20746d276ca499ace08ca0393728e133da64aaa170f6c32fde423c5e44dcc1db8ab8dd8a1985925a97fac0e9c103a84eea9081df89c2832ccfc9c0317e615122d24f7b44f0eec47db8b5945895d7d71e06405215553e45788393870fff9ce552bac3b726f6044d2881cd1cb972073039f2d2f2ce96056d5b136f09594f24af3d0a65e63031f34677f901735736a6be0cc3ee7de6cff2f2aa6064ee5cffb66973430669dfb476a16919da181bb78a29a4967dd339d81dbf5bcb142277a7ecdc0a78da64c79f805a12c039b9288a7f32559ca181918ada13dc772cda41e039f4b83d010ac8a408981f53aefad98dd61411206564ffb586d9a860c333060d93ab7721057eb0b7ce7bf983faa7deeec9417ec6a5329e9bb3429e6868d2f70fc16349c7c810516e7bea8a102cfd15c2ce0e3a3c6e7c8d15ca401e4a0bac085e705cd2d3e17d88f549774c9d316b8e4a93e9a52500b9cbc4c72372fe8aaf72a0bec66cd20c5f2080becc79049e97a6ea6b194e1b8ba0213ff449bd4dd98f309dda0f18509509f1dbea0acc0aee6a49fc1b7d2e972068e96615505de46aadb57b0edc8a6196a26e8c2f7074505467b94fc18ea428d8360a1a6c06ac618836a8d90c43bfff8f0a20b274d2829307a54123a2789b95f1927a7a2c0a7a89e2334ae95861414b8689ec9830c494ad07c3e8153a133a994d652ae4ed190423981bbb16e3725721b866a02df1faae9a344103dea7aa198c00815217bddb2876fba0436e77b87f0ec2b81f75c9d3b8a3651229b60a824b09a4ee7e0393a3fdb47978aa64c17ea08fcc8ef4ffdd1ebfaff4e52bda8af3b5045e0345ea7564b9f82a520192ac851e30b1ba7ce0645042e2b4c2deccca4b95b831a02a3259a11026b6b7a83901e83d4cf82c0de08edfd10433d5d12088cec3b6da2bb82a89ffc802dc97fa1cddbf201e7f613c392b69c2ee6aa07fc5b9a3461728347ce140f58d39f2d28cd5bed80b153a52383e6be789d29940ed824d4d59526297ea3ad00142a077ccaf72041cf53881ee1808961d6e92e4fccbb3937e0929ea6c7a4531bf076a153b4e4f89fdc523560cf2e6d70f7fca1538606bc6b55e9b7cc50392c35034673947eb588556b6c092503d68277b57e4c79e15dc580bf78ff1153a9c70f220503467b90173f7743428c57b0a7c722f5f9565cc1c6896fc5680577625ba742ba6c5e3b2b182dee41e69034b9dac40a3156c1d7298d41afa555c1061db93b87e8c64805eb5669bcac8448f1c2196a35fab940c656100315aca49d5c417cbb0dc4380523f5bcd5b34677b77e3310c314ac04f9c1b4887c3632a5314ac1ab558f4a4d69f37db6f02f6ac8c004109b816af48d931588418a749a9b3ca19121c628781d212c5bcf62c8498982db58e9f2f8fdae6f2a003488110ab63e930e39e4d441e731063140c15b4b88fbd7b7a622c62738b14e9b513f674dd28385165a6091a788e10936875876907fa226d73968e0b0e14572214627385552f407b527d535b2450d1a4e03bd0238c1e6d851b209567363ed6bf4383aed4d88a109f6849cf4e5ed255aa24c88910936e61092334f98e78b09b64bcf2269042fc155d0df14b4ff6f75c812fca7894907954da413a54a7021735ab41083127c5516bbf1ec0ea6e49360ebc2124312acad5884b41ab4238811892bf4bd7bd0ff6240826f11b55a3313a9427dfe860c1b19e3116c7bb074227e899c42770427d3eb24e5a153428c46f0954c475e8e1416623082fbda24bfc23f8bb84c6fd26b31b50145f07fed9233de5a52a5c1438c44b0318629d1bf3b1a2597818f0f44f069325488db9ffbba5e438c437035f135a57acfd93215c3108cd0bb71f5b62aefe8310ac19e86887e3a4d57be530c42f09e29d967fb28d1ec1883609279444d22699c148f21082e558a559eb6744a9581606fb42555ab2240b0e9d4574712a910e30fbcedae5a0a295d2a8e02a82411a52269281609045220083108cebc07e312000000081a140663a16830220ef54d0f140003582a22523a341a20261a108dc681913010088481e14018140885028150208e84711ce9440f0fa10a8ea20c32aec88a0b5d2ba0a6bff5d4f98a86ab8caa9e0fee014a4d2a8afbd1cb5951a85a684a41eb4ab956e6aa12d5e2a65eb8cad082940eb4d9cae8f4806f163f0a0b75cf6cafba74a5a6a932e596e9ab0c101c9d6122534f85bf6e9bfc683e74366dc11556b33268fbe9abe24fa92189403415b122ca3531d789a80947257aaac8abc5ab208a324c78d6f6b63b18b1cbf571a932357ff991cbe2ea19f8de99ac95f068d7870ff96ec2687d75c15558bcc2df274eaefadf9f99a46046638ce89c13294cf618c94de26a0cc78cc19c1d627216c69a27b1b3cd8069f9f81df640ec70f3d353cf74630bbab474ce5dc965522dc2883a6bea8cdd6bf0146e6f76b00f0ff5ab02980bdc33af510919f809e221f8d6ad32158169a98bf94a43a7b9c5fbb5c7042830abda4478dd076243cfa908de9f6e5bdc41af203c346f6fa5c18c2080b01de1a58042c9b7d63a78dc890bec16729404f9e6b41ac4d97d3ca4080bff2027e52211d4590f542eec0728170dfc4cffed1e28085f60dc6c5904230dc642c25bb8d891b396d66c33114ffefe925c3dd6cfa672c533bda43734b46f8ef37033fb90501a802eb4a47d83d1eb2b060ef753f91d7b67bd2186245956c7a4806bb9d979058cb26e6984f50319cee2277c2b2b42e5dd99268974d7ecdaf0877703ad28f0f87b328a23384ed34052a0ed8f64e309adeb6bd88f05fa4156075bbd6fdf8e876f6e3c35b0b785ba5238293b93db3da70ea16030e9f2fce9c0e86be878bd9d067093e1c5874c841fe217a2bf18fc869a09fd3bf69e8f1e094baf38e070863ad2dc52e0adb0dc249846c0bb7e9806eeccd9cb50e22fbf098e5ecc0bfc06ecfd5855187e0288055e0a6cc4c8db6d8538e58c38a89482aa7befc630151b1d6bd1522745a330f1db8283c75b11bb2edc7c927e93c61bb4be0a1f49b2d1f8c6b05ff0667b085e5e20f2bbb4080b614c930d30940208de0b82b93a662292a495688f437ad1f7dfbd8435ed22cf766f8a5ba9c5cfa29a847ec0d19db7eb392127a15127fe6797494b468a8a3b8b32ae458c203bea0bc18db6464591ac26e9c82289af5438138bdb4132c1b99de295e0c7a76e1c5dab341927a571cdc34585a016688540b6d6863ea4a44325e0bf19c11308b807df059a4b31d266ab314aec2ec0d7c471bf1c3b533278c0442bfe1eb3706f7a498d5e830655c115bb34f2bfb2636c4f7ab6cd793c5ac391d03082f4d282d03c6af13640045afbee18aaa3a54153df4e821aa093a1e9a5ad21260024a29e202436819d2179a25abdaf0d324e161ddaae1c794d0ce615f87c155b0732e01577f04cf1dc227776609399d3355db75a4fb1f4827b3f405380b7f108a4697dd290c406f8860f54b66c9ee74ef878ae283ab65b5649aec84129ffb7015016122a7702be0f222e30f70ddb900b31564bf4cf459bb563c1804b1b39a42a92ac3683134eed5cd208e33418d2e4e72d78f09122e7845378dbe663b82aca645b21733f60ac1b3a5c579b66da55e81234992f3805ae7db88dc141c3767544342cc96c21a032cca4a1dc4ba5a3088c685e023ca0d679041292c63e3b56b9eec183bcb7dd5ff6b2588e81367db76597e1f843c54f245ad5499fc0f148250835cc71c2aef3ba33d499b200a45b28d17dc2c7f889aa236b33ad65b3147aa24cdf691d592351e9491e2da32a1a7df0251eff862de354a5f6229590206eda64006a576dc09a49e73c48ae8e46bcc81b813462d45e81cb8e4c2b0c456194f189dcf92e3e1055e915cbc82a856b72b3324e54f9f8dc1e3d61e5b0b31f513f4ddb754ff7cca18da762263862e2491a6393ba7b0969e0c5d2f63d514ce470f96ad9669a0c0945830b66d5427b3aad663efee4b4f6b7182b397f71080db6d22c5d19bef9dcf33e52410c51aaad0b330fe5a0a42049c15b9e3de8580d663087455a6b6f3037c7a88a82a728961560ecc335c094999f294c221b1a86372d69aafb9b1a06067f5d8c8bce0d6370f676584ed388810f21abd67cd22c3153039669940cc0a48b201a25a932cccb747414176ff587089c296c910d035753e62a5b762689a7cf23dd7c5946eb69cba7a091f7722a853c5bfd58a51a1229174f0ff5f6f064ec446f53fe631ce9323b1f038003d0f52aaefdff4725294d6ba870c4f1b827edc8dc8e1c3604aa45dc78d10d545a664346866b004f6644d56c6a7e381391a8aa95a2a519960d01ef110a6401b6df484d62843c4a7f7a29e3a07a37befa16a529b3b059f7569d71b134f01b135f18ebe220b65f2bd964e42af70f56de0dd792b43fd79b03b3a6dbd863503ad392e3e5deea6e8e820ee4a3cdb4842140c8b54cc0927073aa513614d83d95d759f3739c176e4a9a015896994078bcee486388d3f051fab043803d8cc3b54f689f37c1f714b95fe81e4ee4410e59a22480ef5f68f148012ef979c92b171ef8db54768bc11e82325673cd14c4933681f44dd29a8ca0e89f398599acc8306fa6bee5b461933293332a5883d3a3b417b263107b98b7f28f8e2d8bf85338eb53e8b1a588063be447ad2da264506b30337ec6ab123446ae0f87ba9ed40c7e70e33a59180d7558815a424af1557401c022899fbe46993c18587526feba74e6fee652b157cc968e9290b460424dd6e0c3b5026a2cb6848f2a84e0c742e81ae167e8282a44a3049289d523cb03ef0b60d08ee8b8640feec235c8e25237c2ea6cde6e46eae1508bb622532a1fa0d9be91b6f20ed4254af002d3663dc597b23e6f8c3c14afc78e51335edc62daf7ba6ab129996e5ea6447e43ade9849118644eb0419a3d4ad824f9193a05eba2b9485bca778bb2e92c4868460fa359daa3b327420d95a00a633a14220d570a53db2b025014527125d6c3a08b6873048b607866ac3c85c56bb2fb3f5e7901f9e3ad2490b78c272d63943793384d57f5fb3be41ea6260ba57e9722296972ae36ae620186ea4bfd93ce4382531e42aab3b67f56fc54412cdfc270812487ccaf6c4fc3c9914866abe65e110d6e0b33c3597e6d3879024685a5acca745edb9486571acf07f230a8bda9d2e9f2923060bd9672ef6c4dcce0f26e255853cfa681e3dd9237262c970689576367cd6ff7956b9df1f2b0521c6e563affc96aa4ee44c706432bead59332c0591da0114807d7e32f5633fbb12b54943c782c603f43a24b3bd1aa538644745d98ad4e2c467dfbcf57093791dba9f75047a353c26bdecc429ee568e720d66d61e874c3eb569b2c10ce2526dd9ed89f1a63344edd259f602855d79e2721436021653111dbde067e8c39dfaa37f3a2b4e71e547de5cc4b81fa105ba79a7cc97cf8d230f753799762df14f65b34de75b2d56addfec6a2eaebbb7960a478fc619417e2f2dea3fccada923b74b06dfdbc4b4465b60800af43dded429244e26d4a4f50aefd34681b5603d8eaefd02a339326c2215eec8091366be77583de18f9875afb68481cd82f74ff674939095b344ca2d4084fa91bd82ca5e0b2142f4a9bb62694753c3adef93ff27b2389b79bcd9ddc36264466f6bfa636c76dfb6a3864ea103d6094377dc08224d6081ae609a9875890cd5c9de45d6684f30b39d9dd2fefdc2d4f7ee29a8adae69a658a6884314a1881d38f2d49d76461f359506f43e068483c358433820c7993b8e6bb148c45e8a904cb14b8440007a1435829ac8724190a68c2c0293ab2e0abfe04ceb9043b10f2561bd6831c074f16c90684c96a0e92ed7f68a0cd3245150921a632eb4b8bdb06842d0ca0d62ede1d0293053b94462353c66cbf26b17b016d9c0fc8e2fba5d22b3cf0c258e4f9fb14b0f355168b4604fc68035f3cd1fe4e875ef48ebd5f712a9baa179908e440c7a77f80b604775670e85947d8b0fe8e11047a81c56c109a500383331cf99bc7dce9c7a389fc875e4476f19de171e4936df0e54c8eeaec26ff38b2c72ebdba214875b9efb95cb0800ab702fa072bb4186be9aa88199ce1480f91621ffb88fb3aa9c68c8775c159b1a27b883c6c7410c2733b98a3c7166b17cefb3506651c1484ac944b9649766c350a5fee61a85cf4901ff160c367989363405388da425cf7996f6f8182204ca89fa34b119aff20427e525c33511911c72e4e4d162b03d6f8e7653426855dc06c1870c94823d80d2278c62e4b1f715a5e4a3f60089409a47c78883af64218056f6539a12c7bd615e8ab19b4a4564c25b459e5c3ce920f49d4d368ce7573e48aeb44087ae690db4420a12976802859eba813b88ad0234759b8e3c8564bb2036f21b5cc120ece61ecdb80589b8da150df63d23aaaa90e25d9df002e61dd87cf13b004dc3fbf740978eb6efb349037d4ecdb2694c410da386cc7bad5937a067232da02230a9a885824e4109405e92ff51e81a055b56b90e9083d11f97f6dda63013f90a664f2b3ab0e47c480e388c0e925d8ff92cc378ed08bc208bd800dd05dbc30bf7304db282c8cf3e6d5c610766693af0ad2471d20dc31457bcdeb23507c9b6d1d9d86f902d7101768a913db9d07cdbf9e44ea9ff00e5b771a9d78b469eb5d165c76e60fbe4649831529f4b82b8e95aa92522d00cf740405eec623a244ca2d5bb82af2dd5f515f349eaa4a58cd21484643869f86515052936b4bb9665b731205766427b137031bce3cdf32ac9a78b7d87981143fe01a1870f3fd1da6b2056877763e5bae6609fb1dc4282bc0478f2244b5ade95bbc0cdde018cf25df80725155358bc5d0488bd5c1066cf2c0589b3242556bddde9dd091ea44405f55c7e1722a42ba669e4aa740c49fceb6a67560a28ed2d71f7f147144bc41da845d1aa2f35f97215980175502ced6f760059a8c00cac02e8a877f72524629b8a3548338eab82a806e0d688da288faa3200c10ccb06f91b2ea53c5a14555abb8e882b33586420ece9152952ab8c8f50081a01b18ff41ff6f041e2f93d465d5b3a5cb1d9fb32f6230012547253bc51ccf7f6bc3b568d95c3b175cdc37eccd929b77f7b68624dd567e9ec8d5c7ef5ba30ca88c01bce8f8a46341e9381636091e51eeb64e86d6e38d98b9a47630c5bac748a4abff61297970e9eda38b0f9f9926bf9c0e8780e7efd6eb0b4449fa05a6dd689ce662a9f0182239a66b04ef146fb1eefeae080348f6fdf82069596688642e3787af907f544749cd22f09806d13df7ada56129668512921de147b053f731d1f7125afd0d6032a4562dd06bc98fb3971127693167936533082ffa3478c85fd8182dc23a8270ec18bbaa336ae500d5477ad23efb0a204dd3e96f3ad6351d91f79d8a23d4fed33113d1354dd0c466d84de9549bb8cea9f622c25281a77910b9414cbb34d6d600590235779e6d675fa2c3e8bf1516fa95dfdc99cc44a778f5cb0de8abc8d38310d8baea7489094b7f9151694c93d305b536da6f1432edae98f0eb55b9743a5c3a60606fb12e07aca1310db5c86803b4ec66b7dcf052353f37426b36c65bb31ebf191ec67938931a23c854228d882025dc4289f8606553d14e5b141f1ad9a903a42b183e3d2f3218ca0ca81d2fded7dac0692fa937a306ed4222afa4f31b5e85f5b5baf11e3c0516b7218e77e17eb9e3ee2479deec2980aa88c90ee2ec57319db4bd05657f876b7060f9ee6875ab854ef95d630021a1c575b51374404f0a0d505637c9863ce1d44944edb9872a03c197cb9583bf2c0e916fc047a04bbcb6dafc35c692781fc500507a7bb5dffd04265c732b60c3f45ed3745cb1238a976995fa9e2814bb7800d17f182bdddf70c440cc735ddcbdc467874fa89e1566c9fd2d70d93362c27eb65d78e68c95d9806e94df87a42679f461edaf65cd8aa1c929f01b668332964f87428ce07a216a29595353c359fa19bbe9163828a2274a9d7cbb646e5d160af0613c6253e34bf67c5baea255a1b1d7823acf730c95692bd280a50c2747394460546e75422ca961a01b270a73445855e43d7bc9c824ccf7b5fb82f698e1cdaa8771ea3013918563aca63b279a32ff82102e088abdc63967728e946f27d0b1748011976c4298012acfeb63a5a152d8a0f8f471520122b6bc853928d7be748b90b86cbe741a7a023e5968b403bf2e268c260eb1bf129aafafac0693e942e799baed33e184acd9339b44caa0662de0bccc90962ce6d2e22402f22cc2180926856d83ade7bd4fe615c93746bb36db5dfb8f52f054934e0cdfc4926d39ec70c0ae30faa84b1c07536c41f6ab338a406b9a6d72fef2c021988c0acfd9340d84ee83e5fa3d4d912500b7658057d103f490b73af20d82283c6a63ad99823c6d2cacb940d3a8ec0add23378a5619ecd1732adaf9b0d892a427377f8e344bdb94a04f3d63f3fcb2c79b175fc9153e333be81f4dab8d7ca6a4d31acc844d8f71b7c190c7f63457a7bedafeed917f146b7fdb922141423d50d5bb83a452aa217d2886d4859bde54df7e1e9b4aed8ae6c144e6263b923bc11b79bb2bad2514175cd854e2c44384fc5af72f8836eafa93dc5f38e7f0172c079a030356cec0d0b5562a49ae405b7a04d6e903199a5efcac17c061fc63f42ccc5551ee557401c6d3e2365bb536b579587e326a595a8bbc752bbab9ea5cd9a4da6d41684c0a2b17a6b32f113ec2c09ce0f471e07890dc3a13b0f982308cdc412808db829ef1d7846161d6bf2bc74803d8bb2acd9cad890d7aaf6599c604936c80bcdd2498cb9bbf81e6a53cae73de2d408382e07e25aa059811eb1ff999ed42276d0d080720053022156af525122fa65f422c589ed53dfb792c510a703c77ce2b84d54e5782ab5869c70d7598da6434aeae21e8560ecc2301d7424129360883193ace0dbf18e353d8424ce5b80d8ca4fc3ff16ef75256d7a0570d93b9ef396e72ffa5cf541b722935b5abaeb7357d60068013245cc2cc81a7571fab7f9155291f2aa00befda8b8981a544079ca0c9e9ba6c98645071884936b9c7ba6dbd22f55090657be6124b761ec12920283e053b99aa2a3cab3d3294c16ec956d421ce3afb8f1225397b8db4488586ee2e97229e32648aeabbb62545100c4c75eda431e89be1074218df67cb2d863437143c342f41b782a68b70e49eb32e48c94381b80a139ba93a9005ab004fedf653c7bd640ef70c0dc66c7b003e0c58a0c6d4a03026cb868399aa21e785b023bf3da9fea9678185dfbbbcb8e4a5ad3d6c0a1f1c94745c52585e3201be8843cdc4c0943e87d690d610f8d32cf3849482190d724c269d12e06b6f678f7c70e9f7499287a4143154ecc0a002390e261feb5e714786711fd73a26c9ce0b51cf972274236bc9aa9494f9ad2650acac3b144ea33c0abed8c5b5a9d0a5481b543d59f350011eb34de0ff7cb2074f11aae5767082ffa3939ffb7a4d20f82aa0d35c532b90c625daf5f3e9f06f70b78dcc6f5353836acd98e49d86a0a796b87019832e313428a139f5cfad74f8f19606590b5189eb2890b025e63230f66c0a4af94bc7e679ec54a71bb09fb0658eb00c0c2c076c251b857005ea36aa5fc3a5d12b621be8df4e279b286c7b4d8bedd940aa2fcd9866af709fe5d744a1ba7672ed6a731f277f5e166468801324d942d3dd9472dd4b8b62160adbfbea45d8a2ff858295766f61a7f6a2014224639b64093b64811ba1fc06bd99699f001ae3c5b6f7dfee929a3168d62ad55acf6fff1373b2ae6dee4adc74e30c8919c045075e0045297dbbd9d48b82058e3908efd20bfad8c482097d361a4b5ee2c90650ae35815f3510956cc13bf07506099036fbcc765e8e58d90b1b2d2bdcb4aab5a7f044731444a67c5892a00fa0c3b11f2655ae799441ec4a60b484d6b7992d73e09d526cb94f2c5e02ccea6df03201b4efc73ad09451e2d3539e56790b3000b870f190666aa9dd786d445f340dabaeac4440411e98435815b82b8c2d0400dcc30089c7a86980a694879032f3e8951fdf680d77bb60800dfcdb40f807883a910289f461d41f2355c05baedc114914f60108a7ae4d68228400831f03e302acfdd86e1406ce50ff677770db4d4b74397db5bb2b86084f97f16387a09dbcd8a9ccad68e390b0e3c14e7567d4f6e78c629706bb29ca90cde81a98da74825d87338aeadd87690a3282d07ce29ef011c1106b41367a6dd32df31b9921af3b4fedd248549c4715d2e3830613b89c2a7139afcbab491ab441e8e5256adae8933928684c1251fe731935b8ce4851283e931f1ca2369d1d2e809aacbd891a6eeb9240ad278c104356622a60d491abe47640e006321e7ab23774f2b8e10ee4924fef83b3abd3ba637ff4bc09c4db3b7bf6b1d12e4067b64721de97623aaef17b486d1293764d46e661fabc2a20a5fce8a14306e93d7db5a541ec2593873001a2d150e656e380cd08c73a962f25607465f27da3992b2f34a63be435bc71eedbde1d4d006a2cbee9cca2430d1bed4e9d6724d19418a6b023cbe57fc21fec9237bbb3ad8b4731f0a13e6232a10556588711a6272cf87088093b670a39e3b00677f0cfb0083912a16ed8cc34eefd4035903225a932a14b8f3299e890adeb4b0a4494eefec562217b4a991a2a6d60633067ea87c925966b2cf2a631a4bef3eb25ed63c128cdd8a22b8fa326adcec00ab91b06c4d55f7671685254a186542338207c980f17d2621035bfc3d5c6bb0b81a5f9364d965349286c3670d252c9041bdea76432a4cda5fe2d5ca6e2db6f899d6e90069368719ec62df63890a233bd6df53a0087fc16ff88b5d7a1ed1a4fed88ef5549a23e66e26f02535a649e8661da032fd59835a67f511a87f64b38560dc47deda9a2a0d5fe3c5baec4b1bda9c053a21d5c29ce1c1fb4ead03fe1cd580ee1d67a2eb4451bc4836ae35b1660a52aa2f217e9febce24041834c0ebf004a01af5b6c9deb4fa2207029409e365d57bf6e593b380fc92ca562e1f6be2b5dfa4c133f66ffa0a4283baa2a3e979585adbe1f80c5199b4b98301affd00605e856bba6bd13e065880489e6838404a0c658e11b3f005f13c8c5caf06e6f12fd492bacbaaacc05678b29185882a1677519ddd088a91980fcc389097e9a753c5d23c92398dc7e51561d81516b18c06e2c02ab32e9d10248739ee4ad6ea66b97e13780e72ce268090e94fc29aacc6bb780591dd0e985c715f2b2c2d166013b561d43aecfc8da7b392de1cc91b136776d4c8f645603c048b4032512ea36d8228d141b143924321c44bca156388bcc54e0416d9886101d286cb4c8303ab28fed0ae20dfaada1d2ae3313196de5a7e7aa68bb78ef9bce8e1857cf7389756e68b25554abb302e774fb072b0aa50652bbd0a4fee015a801636e4320ab733af2aab96271771fc576d4be73e96b3875b5ac581d282b7f2bc1be8528f0fa72f513b9153976bc94a31f37c5b006ee43edabddc04848741c7ed39742f0551af58aa690f180a790f14d2f53b37c0bf7bb2848c52d5fdc71928c57f5615092f53de736cc26c415ab9c785e41752797218bf88f4b794956cc13d9fda10ac8297c2f11b18695445ebe17154c0b04f45e6d33729629f540780ec7ed4930c09ef1a562460ac14d24be450052f0a4d94a1b2e1c74bc9880a00ab1488db863f9b8e87f25a2f312c442d4ad081029d5817dc7e5614d3b3b9059230b40a952316328e7da98e9e2e67b62e32b45b52543e5c3bf442285b6dd6e4b54480dfd9b43e1921c21dfa5a65b9534ae38a5a8ed84638053fcd731c46c3e21e6c0f912d3867481d0c8129a966a1912fcad0c3ec7ece6d7f8f405f704a969d8fbf0b1b2f3364dd2ec09d15f57c195dce08d9f83ff79b404cbaf8906276b0de004a31762e32f542a4501b1188fd7641b140793347d6be05d10d106c7399a9428349802163d985ed008a58344d2bd2d0d951f541688ea0b5d60220343fdf2461994b361919301681c2850a8418106351354d4505207a5439450b31a6548493111793f8a5d0f2527541135d0388f50768022f6517dac500c4ffb4011112a5ba7ab96f052149fb3c87634949da080a410a8af4fc2f44c190a2202c450b4a1f5fd5a3a50f08a9280946750ee031450d9d9135a1b056cb3a126871bcaa05ed796aa1d0022320294cf50d4a05a841a26545e42e9d03c5ffe4102a50514a342f5ad836a0844550087d628685e448434883714280dd57773abc12c93424214b0b4fa295b3551c0236bb268531407d7000d9fcb0922ea2b25bca00f95f18ed2a197866af00a2524147389ea7b2dc5ef9043a15d286059aa7a026d146375bc4b29d25bdc2cb22e0ab32e20d1a485259ae265e18b5116a5bc84021ca1746ca6ce4adefa0602052314880205e400e5c4bba4fa60f0637378dc8e3c0628f145015df74748c2e14f109a13d6e8b46043fec756601ce22a16e148034f153610ed38e30cae056a44289a40498562652820e18064fadfe4aebc46b41bdc0808273f97af182eedb95f5bec2bd444a0c9edb2c11bcdc33cd89511e726871b73c6cb2195b19516d3cfc81ee5cf89dd4b9e31edb98e1032f1cecd225b27b8f88bb66203040e8919ab40cf374fe12486a217f515044019ceda9b04d96a705c049a8fb9836882ee598b5c7d57dcc6466bc2d6d1016560dc65c40c2dbcaff6fe154868c814008c17c0dca226e68d08b1425966d301a3b4e8f9bd780948852f9e4b8d716b7a49208452662816ea935028662e67b94617d696fb62d010d5dd97fb61bab6d0ad22c9b6f1a9bb17dec7acf85e4a29b96bea7bc3c35ab2cd3b5eddf83d8f8106ac952fb9d186d3fd37595380120287683092a5e1df946b0a95d39925e3370fa53be1130089405100849b619f9a3a55bc2c800dfcff04bd4d88a2678c290c0b9a5b610e0363aa28a2ac27bda18978217e280f89f4357afb98d2635ba135f71d863b01b0ff814e0e288528fa9f91a6b1753a6878ddb724883cf521f3061845d32820ef66bd1bb55c0de30ce8e48b0a7862d133a5653a8d2eeb59a57872e4d605ddeca4534f1c7beb93d00381d7c3cfaa635f2a031e403275e307a54d2be02e53bdc13e0ccf2304563e37077534af28e917a9f8b68b2c955cdb217171b82c8a923297f0152da3edbac650c5d1b908414ff6130a2760004815ba97009354f33942d99fa1ef81071caef31dcac440fd7f93fdd26077ad414621acf4bf52f6ccb4ee1bb0b0a4f55114bbbe8636476ef158f24327fda0fdd2a56bb27009bf0f592b0e85c3635485d249e07933201e9d162107f196669a1649fae0a31cdc6eb98680e715a3a065a0a7e3e42c6fbe06abe02871c1760ebeee958634fa8e18bc712c8ba1a9a720b21662a91e02149a7a3d4a504f10b3d8884207af36fd5205dc2d81ca6371aeb825992717c50f523d327afa6d44f8ae328b4549e16901456f0e7a66069c126641b43c40a19354048959d703ab5a729fad650584498b73122998815001612557a1ae444ed7f06c6a9c64e0b7722cb272c8a9881fcff093bd1db8aca722bae375076d934cb8ad5c61f16aa002ce12bd9b76607e2f80e8a58ccd4124bdc3b9ad94a723bbb1d36a1410796f567cf2158570bd1266856b88e215d3799585739928207604e7b6a8527cd24c45b006035052080b2f699152eb2935908d305a68327f26bbb56dd17b4ad649ee88435f252f0fcb4a8c95898652fee24bf371859b1ede0e5f3e304ebf203c45cdc3d42123fb2e277ab3ff122a68652ca91083e19c6e78a1b1c9c483ab4ce318c9fa922e57b199f8e8390c51aec391f0f2c8a6d18c2841811ff614f6070e246860284cc4cf220a5729c61720b61c942dc042f2ce2d7c1a7e7eaee634e47683ab069cdf5b22fc761e902fe59597d87614c1178f5d16351c01da0b72b3c29cae8c6981616de4f3cabc817e320702f5aa69b95072adecde27c487a47961d5406b933692837aa7e356e26f0b2e6231e7c99f79e9a5223408f2e8599ea5dbc2fe4e9c8e60074ee7d2696c1f01baff768dd1aab19adf881dfc7909843388e58ef3a7a34d7b81c0c58dd417c23790e4d9a9add26848faac8f3614e360d4230afa9124bfd69ebce2cb04728838e5fab1644b03f588d1242dfa2409b8507240be1b9f2b7cac26360459e725c1f593111c2f0ad8d526bc81433511032af84ce47818f21a9b25a76c372aef5865c38058c38b5bfa3d5ada2f2844e8a206d5fd794ebdbc5cace469a326113a7a958af43672e560ccf3fba4d23afd530da9ec2904e1f54758ec10bc6749457eca59467cd7fa1dfe3d7c61f5180384295afed6b342ac28cbf608409b5aab1dcc48045867e30151462b339d1fb84a9fdcc5418d21c7870ddba6bffdd5864324e7a7b2605b6abf762f203fe1272359f4c55fac95023e86aea8bdc20ea35e33c7c8eb3201eb5bc08a9820f66c6c33bb337a6d373ef67132ada9f5209d149a589a24b7424be61106d98f8a45c03cd4a70069944f430cca07a12bb4f66788739d374cbb648da417a58708088e0d186f5a47f6c30d1e7358b19f65d27eca04f927165e01391bbba01a47fb3f1f60719c34ff7c8d0491ba481f2652098aaaa844ee631cf7a219dcae50a35d2ef144ecbd2b3279e64899f2e7170c1c92329ef8f43c38d98609abb98bbd8251428c81026f440c5dc699f46869a60db1bbd7cc368a14b7817aaa29a9381897c3998d8972905e4a3f5a4388c353ca931dcef75bbb9a0bce7bc5003a0d989cac46f66f0daefe89602406f46de47ad5a2689c1f413ad0d038dbe63f2dc39a6892f54375c8de8c6403c6ef64caac8752b43e81e06b499d8c2c499b25ebcfb3cf9fc7f4e4e68a2144a9e65633167860ce477e66e1e686c72b9224b9cf2f88068a502840105089429939cd16abf23ee5131cbc731417d4daec546445a9aebc7e9920242dde50ec8f9fccd165db97b3bbc2758ac1d3a5be2a0c99afe1c801c4eabe0e5a64dbe1e08a02008ab4e0c44fc9bb06a4fd0615fd079052f0479502acceb7f5ee7ff5feba06d19993e4151599a1065acf01e0019d67467f55b8a5e333158b6c5ad61da265856eba6470d201950f6f42f8cc58b3c9e72a3b70ec9c0cc7d9c8de55914915379be3ef181e9ab3dded33dcf191765883b4078566309edca81723baed52b4131caff1ce28ae7530eec4535efb719b27acc3c7333644e19d237dd8aaa841c6a9c1e0838ea28c44c2620c323c10673f65e3708018af78342c7d5a7199d6d88838dbdc9dfe42abaad9b65525dfa0659f34895b1aed3168331db369a650b402b88b41c6d299a0c98c1e71ee1786e735c4dc60981c95b8cd7960084b50fa6417f8c38cd005d3a1930d651c9602fb126c7a50e8afaba2597264234a57d038a4d268d3ac554736a295a68d0e6495294c4f3ae7f03278d958b3373b1bd1e298187e987d4b6d7d22525c2f8759e1b9df5922463b94ae671dd24c34acb02ce7ecfbe68c6ba85df4f5ba91353f43ac6986e6b014f0486158f2a7f2d9e05613730186d3d19194dec98d524ac54c922ec7ba59982ef36e98897776a92dead567b11eaba10d48348fbd6acf71740544ef088d1242ff2d54df03591b37846dbc21773b71aa93332456a74ecb6fe791e6a252b60a2ae3aebd05a99f3a0108fa5886c6c9c2bdae2738a6015d6a8185b3c11a752c9313f9626599fb84f4484d454166b64099e4e8383bc5f027e724340c09589a92b2d6660af422aaa1a7ddd2f1abb5bcf51f922e63320a11485053e921a161cd9b822c7c54e960fcf895a3b8ab7dcf555a1917cf8e8c34d64e1e7647b34364bad78debc216df8d694952bca2e43a5d1dc4d36e58e96bf30b61adf2adc5cd115edd8478e56856acfe64c1ea14ace8142e3351b313b0562596f9540866307387962a4424d1a808d406e0ee80da312a1dffedfb487c1872fa102f9acaa3d9405ee73fe4b19e478ab69ffecb4b1006319eb42aa0d0ba49837b5a18df19ac635ea03b308e010084a2fb59fb020d44d483599bcbe1fa25072e6863cd144d0ecc864f34958f05bcf38034fc6837325cb83c53664e8622af5e862f23037d42c67e1597017b0e86a6b91be51639948160e34ecd33276e3b189683367e65a751d68c7235bab777001735b9d7c44cf41c711b1490b810d8b79ef2657fc27b4f966a41949e3a701b207a1f6ab4b563c7d53cf620903f1e03f0a50095162db8394e54721de4a484271fc74bd61650cbf6b29464e7e13fb791acf2d8c926722756a97a309ade68028b2c23c360909a602553e41aa8291361c68486b0b76eaf1d9f45d5fc56b134097cb5d271d35e8729a11e3a21271f22404518314dabe25831f092981f3e0b69da8163e3fcee32410ad644e1b8e04ef80c22229b36c5e7c1d4a092b8470e6641f9998301f98e6b8276b4ce6611f96dfa6e72907ac131e6fb5657f56bed1d21e07a31db74d24d796a6e9c7fff57e791218cf3ae845a139200bc5901da4f6be04ed458a85a37eebd9ab1c0e678e6d8f5da008cfd6fa7c24d1a41d6219772a8f2a0e608464cff4886c45f1fcace89be33654b88370059c05291ac08f815f44378d888fd78d26c49cddfe04884f09e9d5c4b172753d62c41aa7bf988e9cfaa9c651f6b88896a43783d91677765a0b17f84ea48941432f7665d4895693882a6a5a417ca035043a8c2338a145af4050668f47c529fcc6312065e11e3e8c696363aaa6f613133fd4c8c37b1446ea625cc8fd1967d08edf87c0b6ec0dc8c0bf63d21c09c539beac70c1a92505723c4dd3417e756441e18d8896dba019a0fa3d82d64545b389f59a365b6830c516c8285e7a472342e5277243d51597664aca5be1374b08b4b271c305e565f50098e1b6984c630f6e43c8840ee0248c3d545c0e8d094d7b55587d76d3d4f3964e5ec18ec67997b96220b4ef2e8320aa09f95bf6dd2df9a55c46eda7c3f194ceae7c0d7843ee452a207919f3e894c8b73e4dab887788e7ecdf66d24fb0d8fa3d2325679e55e8c0e483e0b6cad020e96c45e0b2b70b61a0730c30c33cc30c30c33ac9ca72df7fe8317a9bb39252525259709cd80c6c584c6c584c6b50de701140b4c0b780b7f08894421a5d118628686055f8c158ccac141c249314f86f697257f0c5df002128c2a13b400052b58810b2e50b6b847b849b35d7b4639473871269639549c856b849362cac631c13e5ebbc4c231c20793b43192b8fb9c369b67b8457852e1248ab7df9d38960ca708ef463b468c6c541ee544f8281d653a8ced21c2d7e8e181ffc55ec9dd1dc20b398b74467510b21d6708cf82a7574c8fb9cfa11cc315c28bce91ad345bcbb54c121c215c6b982ae5b289e1b335084f3cb45d5a88df26ef04e1bd4b466a3454cf8ed5e002e137f60c2dfb66b439860f10aec7742a8e442e69eafcc1ff2c764ee1fce025bf747119d41bc52c85eb839b1c887dca281aa53c0cc3707c70aad33d0e29ec4a1a695eb83db89212425378e6be4d0fde27edcf24a6e6c1b1e4153d3c78e1d343738bccddc1496f0c3d835ce9824ace0efea4838ab3be94e1375707a7a663e5fc6943c0d1c1e91862c858a293c34cde1cdc105ff3e910ed31454fb0b5293839f852628f2f35ef02c334b838b8f9f1b656ce920b56400707274778adbe7ce271db09f6dee05ba88fa88621df021794b7c1970bce0d3e8e17cd2a733131fa27d832255c1b7c341aaf31323ac192206b001a708001a008c706a7e423e69ad11851fa35b8e92d99b466e9e86be9d4e04bf2c9a0a18617f94a1a7ce9194d6bdb7a106b3478fd37a1a99534567268803b83bf3d6a6972f6fa89314371d2b5f69252067ffa2385da0ce9d84106ff2c83a694db31f857d1434369c5e0d46ae69864a799ba307853123acea70306371e6d7ef1ff0b4ec6a833c8c675bf7ac1df4c0db545424e16e982977a4c72ca33170867fe783c83b7e0fa4a55ae4fbf9d472d785d114ae6c52c38975298e8c8191e7b58f0e5d782a4d0fd151c77891a7923c60a9e5b8c18c6ec1b6ace54c193a894dd96192af8a04185c9488ae77f0abe64c73f39266965560a5ec66ad964b9fe2d1a05e7c16a68913fb9dfa0e0464a6b6af6ca139ccdb9fbe62a27789e2743cb1eb6dba5d2043f23244465ea14fb99e08620da5ab295736996e0dafcfc796b72a9b412dcf28e998f71127c0dbb8b41fc4282d7491ad544c8c33ec9113ccd3086c81a2ee273c408aae3b8641bb122b89a1ac5cdd69a544588e084e81411d619e6e80cc10d19927b0c1db1715e089e4d68d4a12b9dc64c105cbb680dcec2cb630b10dcd09da2edc2f7036f62229a64399fbc9e0fdce0d8d16904cf20a3bd7063844ca7868e330379e1add86be58a51b3c5c62efca011da3795535a6ae8c2cffa71cd9a6f947372e184479325f8cb3d88c1851fcdcdb3b745d3d8dcc20b595679aef1cad5b6702e74546e4d311ee15a781aa4a5cf238fac490b3759ab584a74bc7fb3f02346ed6e8bb52cbcd8e629e653040bad63e1a458fda64c0d0b1f86895219ab83bc9d5738ebbeedb9c2c7ec1857b83d3973fa36cfc12aadf0b6bf6385354e9f6256781e659a233e3f8e7715ce47c9d02f4759157e8a315da3a0e9392439154ef89cab26c6149d4546852f9172881839a7707a563bf27b7cf68e29fcf4205386d408277f297c183fb3f19f21f785144e4d57869e1a937965147e88f0e917da4b43220a4fe3c4da3233078b84c24f6b29b9a77641e1a6c494831871b2d1fd84db187834ffcbc0b1ba9e3036e830e339dc4e389f53aa36364d336f39e1e694193eb7dbca49bb09274b689cec31ca16bf26dc8a6c953617e53f9970a3d1c9bd8497ff07269c568dcc612e657b8c4b781a12a9659b39a786251c3b1bfb7ce3db5a57c2197f492b352b25bcec1e7e3cd45a63ac93702d6da7e39390b2b14ac2edb9476a3d6a24fcb4cfd2c03778b507125e9691c79f24cea3f3081f2493f6982b5afa7784936b2ac7f0b071b7a5119ec7b56493b3b45061847fe10d728cd822bc741c177f961ade5084efe9572d54f892b413e1bbbdcd6c4ea92dbd8908c773b0cbf8ce43785dbe59b423a3cba521dc587db1159eac3b5708bf26446545760c1e47087f22499294f1d5566c108e7f7d8b85f9e7d552105ebb59105971d43895817063e5f9d031d4937d00416cece338ae817ff0672b5dda98cbad1ae8072f747aec935cec839b791a4ab4c62934453e386162d228971d4f8cb8072f39ead5cc9dcb7f433db85916eeb637433be4f2e0635c15171ec9c3320e0f3e18ab9cc9caeac7be3b78a2619363b4f49cd4b3838fef616450da8da37475f073a7caa58ba152dad0c1b594c3c4acc91baa3207efa39fa5904198f5b41c1c798b5932223d0e721cbca4fe8eed633838dd20e4303926e951dfe06afab746fa49fad20d9e4f454d9ad2b3fd6d701e238fc7ff0dc63d36b811c3b5e47bbf34da1a3cef3af7cf91a9c1fb709724a7096360692053abe70a231afc9445a6c2b64f3257677036b4dd77c619c48a31839f9281e498256570c2245169ac92c10deb763ea11a83371563450adba4492231382d2985a83f94e48f738085c1c0e09d4accf88d19581c01fb82772b593d4776378f792ff8e3682b97e4cd979ee9823f97d263bc25d3d043b870ceea924f258e2df81f23527a48bfbc59d682935db3b95b3a2d0bae770eae9952c7b0e08b78cc4982dd69069f0c76052f1a4b7b78b558c195fb9ca2c2af4dafb805ab829b630cc96e1efa55ea50c187e21731bbc3b9953d057fee91879e7415b21c26051f66cc1a6ed36951f0fe46a32bdf7b8c313228b8961e5cf60d19f3803dc169f1088df9cb72e6a605cc09d604dfec35a68b19461d454990674cf02cb7f4dff5c4e64d1e0b6c09684c5d49e471b800a6041fd9ab7806153c1c35b8646149f0d342f75c6b7ee0957382dd1e181268c9d6f431fa7bca0b5e900017c8e00537f8e20531b8c1f957806d05404002015cc18ee0855f36b7d4a1720d62850333829f26a23374c629826f8dba3de4f4b03685be6044f0e7eaaa44f267508919825f8e734ee5317fb69a85e0e54721fafb3c25cb2d172c084e65d1c86a11dc345380e04ce714a984c17ee05d0c7d65256216b2623ef034b37bc6b081bdf06c935fa5188d7b45f342f1c26d94c5719a7d76e1d8a72c928dc2baf0b2ee62b498954f9277b970fb7eb23f0c142e7c104b452323af4f0dbe851773b9cb75b06ce15df86e1826c5ac4d9b5a787df162e1b91a4a86d1c2dbce94ed1dab789669164eb8b2e8161dc4571465e1a399f1541b7362e1440d6f3f36fe9b53a460e1847093debdc2b36d9825e3f0b8c2ab102bfb36b6cd658f563849335f869c452ce4c20a37fa1a6f86d95c851f414c72f0987ff74e156e085e1b35354dad5f77a970ad5274d89d354b95d8864285a3311323f6a468b319a7f0e2336504fb0ef628dc6a2853b815b6c19878570a7f1dd54f239b3cded3198a149e24af98e327ec233a0ad7bc2a948cac872c8f287c47ad6a86a042c1a5a4d690621e544603234381c24bad1e132cc2833d100cf50927a5f5c8b28b217779c2eb8c71d924a323c76485ea8493613566a3c5486dbc5c284eb891af4f4afa1f746cbb09afa3f85f5abb54a134e1f5984684d8f249c36b5aa84c385ac126483bb630c155acaaad746476b98c6b5feacd32394d41a84bf87241a53346a7b4ba2ce14fe71c5e24c83f885855c2793b4742a128e18ce3adac068eb1e40baa49789673c87b8ad992843f61b64172aa5958ae22e1038d512c87cd552cb50c19c8606c3500031c680614249c6cf95d35493ef737f97c41835bc1abe08b2f5cd0821318a01ee177474b86dd7184336b292bc2d62c661ae1864621f7639c6151c2087fee521d83e0297a7411fe854916edca83a7d82bc2314dc9dba56312e18770cbb1213588f04396b58791d2a5670ee185d8953cdf764ad910ce46f6ca30b914c207f7eadb195a08e1b45768ce78c728fc41380f366535e4b79042045187e7941eeb4078d5d3a629db3df41910deb9a4a3f0ffc11579e49d34763416fde0e377c9f361227da0b5b3850f4ed6d4108928116a9fa070420eb73927f7137e0aaaa1ee3594679fce138e45c9923cd147fb613ae1e7b79432aa59adcba040062b9801058c07c90947bad287cfb4f8c739f583dc84b3317d847acd96b4660f5213dea749b98245544edb5ec039c84c78a921d3c77e7439c61c4c38e9dd2e224b94b6c6b98497a24743ce915237f058c249513208e9eca1ace52be1ac4dc84836172e434f0983f57dcc24dc4839ed720852ea939184f3af9251393b049f48249c87a11e47d7dfe6fc8084d3d330bd671456a5ef4778e7a85d2bd886b18c7584976ded337c8594b7b6119eb7f86aa6f48e31aa8cf02d5bdea41a53f85575117eda1812625295d9a02ac2f193e449846fa1a18d86a4d8701311ae54e8c70d2cc798633b84ef5b9652eee428e4184378793c48c85e2144c4aa105ed6601969a699985a2284dfa9bcac2fed527906e1869a761845b22c4f47109e667ca934dba6acd0098497ae3bb4add778d03c20fc6c90d6213d5ffae30ffe9cc55423269ebbe1077f1d8614e233fae8b7e983134436dfe4ccd158357cf056257bf0e3fd3a62db3d5259f4e0a7f990a96d953c7837edd5ea51ab2d4af0e0dcc685c9dec1f3958e311ca590413bece026cd65e94ddc4a93a30e3eb6185ab1432d3d0c1ddccab098ea33f73b90e7e065c90c42f9c772f0c3cf7d288decaf4f1cbcbeba2812c270f0ffc61cf5e65791e4bec1cf20a7b6e67937381fd3e5d77eb6c1c7290387522525f94d36b8ad751943953a8a5eaec1f5a97fac1ae61a22a7067f5b528a4aacacda5d1a7c0c22f6c59482063f878c635a4ab660d933382239dd64f8a5d8c8cce0e4afe83845668b7d193cb796e065f926635c91c1779873acc5305fed18830f3ae4d47ea15296550c7eb8a3ab737c235e5286c14dffae1583e147a9d9a2437b6be082051080003570c1175fb880c020bfa09cdb44cff66833fa03e98522c009b20baeb6c64551cfd9336480905c70326477c687ea06c6050ac82db8591362c335faac2ab55083cc820fe5aeee4382a7c7512c389931ccf08c357905374f466f9d41b2e90aa5150a292d3c5345cae717590537f6353e87e66eb6122ab816a91e597414d3249d82ffd60d5622c6de5811520a5ed79c550e498d822729cd69b88f515c24149c08bffd2627a39d2ad7802df20927891d1b3f5a904ef052f97cc7a434c10d1315aae5e9aea94a269c72ccf24972c89c608b309730ca9b1ab4b483dfe681548265125cff6831844ae4ef9e344d05a39497807d218317c822917047c83402a208b2086ef00d55f564a5d21922b89a6d1e877a087ecd5f886f97d8a91621b81639cf658e36bf4910fc8c8c5cad16b53b0d042765c931760859e15ff2032f8618c1fa72237de0d8e7ef740f8f21c4bd7042a61c19bab8c30c2f7c9c3dc4827f6417bedc54c819a5b02ebc97f31bfb60fea1712e3c2db5b81cfe6287ece2c2cb9a7144c914e32d7cb4d2a0e61bc4b411b585b3665177eed7c943ad859b8287ec20e5248defa485e358b4424ed779a39bb3f0a1afb8cd947b467cb270455d621a839b6d8fc5c29f0c9a16fd86855392c394a389471bb357789d2368d6f099dd29e50a27ad23d2d9a4d70ab7c291ee984556f82054bc556e7f153e0cee39ac8fc64c8d51857fd1eb2462264c456629ccb26fc30168c001182000010840000cfc37e0043240410756309e010420c0a1c24b1e352ea8877495c053382ab22659b1d7ae61884053789f2c6323d6841cc2054be1631cee28bbc32829bccd97367cfd5d388eea285ccf1453822787c13534120c1485f313eb43667708a99141c05038161d24e78cb5fe490282c2491355d9c1f959840437f842066604fc841f9fa167e968933ee509ff51e798314507f128a89d702cb64cfebbd0d9eb523b20277c98398688d91d8bc7cc26bccbe141869d3d9af0522d79b0fe960b3196093f35b5e39b5c95278309a7cb3ea30e7809ffff3465b9a83d29394bf835e1151f29e7aab10f2be136aa160fe14addc3352025fecbe0ba52b28e9d0027e15caeb8e0a0a65b638c0428092fa26543cb23dfe1fa136c550123e1d4b54c24c9f5f2af2d0021e145cd5d0f3d4965087c84174e42fabd32de2eab41a023fc961cd4da1b5f4e0f35c233c97f8d728530c2b506a32eefb9638cba10b808373aa6c5f556dda744115e700f71ac61c942469b2030117e6cc72c296ef6512d44f8695d52f02c39c45417ce031ec20b61c356fa9a9475493ca0219ccd9d95633cd67cea0ab010bee5486ddbe1d305b52021fc697c6134d4c62ced4fb0655040a28083f0bfacad2ae547df890109f01350178021a020fc9ebe09cfc6e82be7dc0103e1a35895dad01c867c0808c72452ff96879b7535bf807ff0a3c6f4307b5e0fde0e2fa01fdc148f32c68f4286d9f83ef8e9fa2a58d44e1b900f4eaa71a41a630cab01f7e05b4ef3615d3ca6871036a01e7c3019784c99a13ee79c3c38a92754ecb29a4879d38078f06347787a88d8bccb25c03b381d3663340dd301b48323514ed2c29727d832c3052bb8c1784111b00e8e276fb9b7ea0eb68d136c0d01e9e0c318be619f7dc3dce609b6be20810b8ce900e7e0860c22d954b67f327a82ad18bcfe0c7e063068811b00328172c0fd552c3240410b54d0821990e00666fc178b058c83b32621d584ec0840000210c0030358c00028908104fc37c03cbd02e1e0a5f412793ca43fa56f70b3fde5ec93aebdbce306b7330709414ae6be6f83d3696e272b0d7c629e0d3e0c591d530eb5d99135dcb1311b934ad4e0a42b7b98d271c65c9a34389d2334389d83bce46ef994927206a7353c9a4fb9ddce2b66f0fd71248ff29e327856b361254506672b877c912b4608d918fcec2987e059c63ba4c4e067ca90e5f1b73d530983631943c91ec3669062c0e09987ead09b6a21ea2f789abdaa1e62e20527f4a650ab1cd205b71f4dc8f0e83ba490c1053fed318c1ccdde8227f218ac05278966181997b3e08d3490b568f93f628b05e7563de36493225da257f0254334b064a25511b582db2863ce1ed266e3a155f0f38fcd6453a9e05b5f5606c9814a6d3a05c73ffd1e5ac55ca15229f82af5c8c5420c13ea8c82172bc7181236a3a830a1e0a96a9b76c48414b67c82a35e39df5fcce2afa513fcfc7d6aeb40a39b954df035e4c71a4cfaf2fac804ef2393a954e85e79e0127c1c53688b1e1bc28751093e944849f2e528934a4c82db3977cede2cb92d8848f0debbaae453ad63acf1086e56ec0659f1753d3182e3ef3397ca52b8f7ae08ae6df94b248d61293b2238679929da9a4858c6109c0c2b66b056d127b82604ef6263b4216b8ab0c982e0a75411b2efc32bd5050457e44b4e73593ff024564697962603cba00f7cfce999963da6a7a517bec563748f3e656f8c175edfe5eccbee2952a25df86942e53bbf2465e1a30b273cb6708fe6910b2735c6e1c33bd86f4ee3c275e423e9417eb0daf3ddc2cb199944fb6a5b78f6c953d2a429fe63b616be7b5c588b9d917c98b4f033dfc74ef779ed2a9b85f749352daac34c479e9385efa1b5717bfeca2e3ae062e1ba45690ce9374f46be57f00216a0e00e070b7f3367488eabb25535ee156e8cecb852944d15dd7e802bf84e2d9b22caace35ae1a67b14339217b92063138e157edae80d1a568787d0afc2af699c71ce95d2cc7a2c9c2a7c891a22678ad54c9d63854b851b437e1c9e197bad8f8a325c4adf29fc1cf3e518292a6d4ff64ce1788e9650edcf95c2cf932e774fca48e1448ded9a31dd1b85237e9171a6b16ae144e183d8d45d123d62b844d370a170d4b7f3844ac58c9466058597353ae6f2e47dc299dce87358c9776c7f9ef07fc2c6980d1155aab94e78f9277c67d022393b4ef8995190702dc14336f336e17466b2cad1efd384f711d66fc173e332e1484b7bceaf7d3156d032384c7851be194f26e9b5754fb0751684bb849b59b9ee1a86344bda09b6583003e6c159c28f91fc40f3ab9f6ace09b60c095a8002133c411c5c259cf37614a7a511a9bbc151c24d29f44a4717ed26e1894beed0b5fea56a3949b829cc939896dc01abf073a39b3c394223738f2a7c9b7099518af4f8ec543857e944925ccca6c8a0c2cf9ed72323d23d85f3bfda8d362ac3fcdf9ac2372b6d60dfb3b19e3ec192e00b19bc805cf085e696c29f9461370e6fe12a34a440be2b2ce4cc5ff951f8a61552a489398fd52e88c10bc69f806945d1842029f7a61e0b7e3183f25fec0336146e9094b4ed06a7aa0d50782173cc0e11320ec9d34f386bc95187b4293478d2137e58ca8d3ca22283838213c480046adb09365d739d64989cf0cfbdccbe3504ec26bc13c930f3bd59c6999a70727cc68c19e3c32f2df8e2652083f10212a860fc1704371394aca7918a86c18417c2afe6bc39cdc9e65cc28b359137c50ca5fe2a96f0cd3c5786c9a06e9253093f4ccc23ff9ea4845f3ebf769161842927e148a7142cd362347f2509c73324874fc9f3197d24fcf7536bbb7021e18a7a5b45fa9f53cf23bc1497c9f2478e702d63b6b0d5d40d1c8df07270f70d973384a8c9081fcd5a4a90d011a12d8bf05ac66f8364aa08ef32e3d0a9368970423cb628218dca7f10e14f4d5bf21865c241c6211c4bb2197a46de105ea9b66cda14b5885d21bcf5a03d298609e1784a475af39d41f833d15182552d08ff62a3adbb6903e1f8386cd1d4f4b9220684232ac9b1fcd857cafa0f894cf77ef03f4850b954f954b1f6c151c9971635271f1cf5cf1c43d4e41ebc14c3c9a4eec96c51d383133dd59a65b5960cc53c78796a835b8ec143882a1ebcf990c5b2b2e243bb8367dde173e7901d5a991d7cbce2338dfcf346eaeae05874091d3cff9442ee7e6dc7aecdc1bb68b3a5f931e4e0a564a22173acff60571c7c1492a61c63f8f4535938786ac143a6b52af99c37f833133ecadb9fa9e7b8c18d5cd7e0dc34ac41dae0ada5aaca6a9b3684880d5e54b3fca1ae6294acc1ff5c6e7196b305b94c0d4ed218b59861747f3b0d6e87b98cac298306bfa6c33a7b4db0349ec14b91be1e4ce8d60cde68fa24ee3065f545b765582b8a7bbabace6c60206083372d40c117a3052850800c58d0001cdca006485832b8112606f90ec11bc38a418b61cc643c6c50c906360c4eeecfea073369ee6f30f81e7286eb589b5d1e7684fd82d560bde08c7a8890be55179c34762a5e165a2ef80d335a4677bf2a55f218760b4edc6b5c5a4b71b9cc09b674001a70800b4c9080131417bcc0bf051660810bbe680006084000bd0a8080040158c26ac16fd0b0b562f26818fc012ce0109b05cf5289d6f5e7349db662c18b78943699bb2b40c190c133e0bf0175d82b78da1923ad183953ac15bccd696203c970010738b155f0b32fd671e7cc171a0358c00230124b0527db81a5162d4dd08244ec141cbf071163225a54b14c0f2b05377b7a370d2af3198ac5878d821b551ac5a19a464b2928f81bb4e543e76c186388ea0efb043f95b8c5c49ea855e129d609cea79a982979ca4e6c137cd190da63aae076d72d6299e0ab660bdb61dde53b2583188c09ec127c9f98b29da69a11ab042f53e5b81abb069e7192e03dcaca525b23c19918a2d895a763709923b88dab6108991ddbc3085ebeb4ac718ea6d22745704e32df24073311ba8ce21d43f02ea5e020ec2a32305108dec420275f194b2c4f101c7f640d33c3dc294db58b05828fc424a4cf6e318728d81f78934cfefed53bc1d6fac0490f36a5139595caf109d615da0b672dd465e4b06942fcb8505e78af912a6ac63c2d7417cba41821d9cf545df819c4321ec61c124ea583e662bfe4e939a3ce98fd93c10c5869608ad025e5b8cc241359bb6581dec2394b375e3321a38b0e5b38a19549a543f95d4e65e005830524d85af819030723a6854069e155aa10f375eb889967e1bf9ba64669c89cdd809040065fb820060b0295859f4c267c86f138c17e418217fcab8004672ad058781b192e2236eeb631b0f07b32c5e3e0d8afe37136027d855be929858ccde30ab71e3bcc41bc6f85afc9cb65c426871433ac70430ccdf090bb188f55f8ffa9227f259b51165578f7ee8e31ccf8c427a9f042e8cfb0b0b8e96aa0c2ada90c52a2a54fe145d330c92a368593432b58ec724be168d87649e17f4c7f9c1a4ae6ec76149e8d65cf4bb7d8ca2a0a673397b84c87cbf26a289cb3dc39c25bf8dfa8a0f0453355061fea279c3495535bb265cb1c4f78511baae7106dcfd0ec84f325fe9e1b573fba70c2cb6ef5affede26dcd290982743a70927f643c7573949c660cb849341aa08963ce63ce1c2841b9742394e9d4b38b32e651316a925dc0619a718bf8bd93868ae95f0d2264bc5462bd6b6f24129e1265b9fa4152265ec9d9e842fda49ccdca1c30ce29284675d26a59e34d2a7250d1a093fbd1f07f3903b66ef760c0a097f2aa5479651ec118ec34a4bbfabe09223161c39c279edfb724b13b43ea7116e6d6bb4c79f3b37d630c2edd77490126691d3b208675385484fe9bcd22c8a70a52cdd573a23115e56a7d50e0f5545634438d519458aeeec219c07e19a7932caf86c13420de177c80c07392675f557082f2afc6ab86984f051862e1e3e3a0c91d520bcefcde358a4fa1e8304e16948139e2a1b26bf27105e568f901d6600e1468cb24f7e3985dbfe0f5e8887bee94d23bbec071f5408b908e9434cb60f5e4773f9103eb87953c5ce5fb3073f3a4c0e600104204091a054a17a70365b47f3280b31843b0fcee4889dc3a39bddc3281e5c9bf5e86f5adfc1ebbeb56df49ae1e5b583efa81e848fc3749d5307bfebd743c80c33a52a1d7cf039f8c534ff0956cec1b11799b28a3969cecbc1f9346d52b1222233c6c17f18993394b47c9e378583e7d1f7d2198c58cc287d0331b2bcb793eb06229644f6cedbb6911b9c7f6684ae92433aab6c70c372e6f033a90fba06d7c4b378f0183da81abcf1142a40681abc9c1bfd68feb19c26a26870fbfc62dd7d0420809ec1094f5a0dcdb1755033f87d113c5ca7e5a065f06366c76555f1e29d4c342819bcb7f03bb7b7f590ea0632d031f8314fcda518919184eb102a06277bb32d9c879cdef209b6d006a001070ce002e30bff62d440062d40810bb2340cae865023d7c842442818bc4dd529432aafafef82d3021458ed41bfe06568e1410c96b11dac136cb940062490c1c7400631e833ea052f3bb55f1dc378f5f50dda05473e63a4d277da91473728171c5f73104524c7863eae41b7e0a72c4d23924a6e6519c4c00517482df8969d1ef9852899396d2706cd82eff197a3db5c757834161cf1cc9b53e3c9f678c361d02b78252215eb1a5c84c85bc1690c2af5e4be54c1cd20d66d2c9f938c6a2af8e0256d632f0963f99d825f6229b52e7aab67530a5e650eef2ff1176f6314fca025f9257d4bb3040a4e46121da6b43ec10d16a646fb5cb227cd097edd5df40ca4ce2ae434c15f8d4c66d7284c701caf668859962578762984f86910330e132578ee9ab339fe8e922c2309cea76b2437418267aa591e47cab619ea113cad49a6dd993282271b2be4f88c2278216d1ba6168bd020028312c1bff8d0672953c21c6698abd20b3a04cf325eb5c6216c8105fe051618c0021470061582eaeb579331ca4eb075835701096e40484026832f3e062d40356810ec8ff93f3de42cf95620f8a142453568f0d92e2de80f1ccf31fb038796c35414a03e704de32ee3cd91e9d3ee857f8ecbeed185178eb5a4986cb298bbe0532cc58c65ac0b2f324619639c71850e3717c6bbbd4c99bba9a68fe20412178eb94fcc75a9691b856ee17f08590ec237e8f4c4e08b97410b2090b6f06175e4a496f3b5f0caa38f048d6971dad2c2ef8ec8da369741276f169ead4cd67e90a13cb232e0849485dbf3a0a1240f21bc5b4ae12163e1e491096911aa324a242cfc939c4348d50e041630000730e009f90ae79138cea6b2211cd2153ed47e14958346a4cab4c24b935103edad1c7119ac705423434dd963e11965158e54d8ccf113ae35e755e178f615759ce554783979a669fb07010820874485ff21a2f78791d0f2344fe145ba4ae7471f61214de1cb25cb17fccbffd5a42c858f6a82ca787bf99a0119fc173220a6852485f3e062509354113173cc841c8523fd1f52e70be92a4414cea34b31b45456cfd1134286c2c9ba881ad382da8be5020d0a2f39cc7479c462ada52df02db08006fa13ae6b9a3419315b45115d069ef07ec2c3fb854ab3aa7c0b36d0093f2d4ab6c98d32456539e1a645aeac49bd4295d49b30f23d8cf4d8644d388f67da53249f98ff41240613200001be78f3850b6883d099f0c543457a2715135e54659cf517ed66cabe849325cab33f2b7537b42db15597aadb6747c9e5c7b12476587827d8fac2050df8159021832f5c7001021080055fb8e020a18b90233b65f69c94f0cd66d4c17a27c711ea49781763b42c6722ff634ac2752cde3836763a127e0acf517c520e0a209169469d4736e347381fd2c7fba9e454ae3ac2edfae8fe7259231cadf9d35c1a41153423bc9cc1f6e5708dd232caa5a017e1a750bbec8fa13347ef02179015b422dc8c3ea58c695ba3e43ac1d6178f821383197c418218a0802b062b40810c669008ff529a8d1029c58e616b44902a2551d1bcd130dc8770da1ed87d76076d393ecf807fc10d3440833684ffa55922a667f43ee209b648700219a0a00624a8c1b740ab10aee5f2c813a983977f02198c0be00964305e803790816113a2cbeaa8bb2d4bb1ad748db64f294ca6d3bce50964302e4000029c400632200001ec053d08e743a61bf96594db6341389a610629889d47e840b8256f139534a4bf4903c2f791d4ff301e7f70ec32ae0931ca7cfadb0f4eae94d0ca4e761f9c343d9beb525d57a5f98099b9ca4446d6da7564c43e770f7ecd868d1939cc92ebe8c1b1efe9cb15ca26a48c3c789b793248455d0eb1361e7cd478a2590e973b38153edaa64eddb6832f31112634964a1b235d07279f65cf1945d6ba8daaa1e9e0457bf5cf5b1936fbdd73602dbb4cbe4cad356fcf35b69031c81c185a0e6e9e1a5bf5749f2778e2e0cc688e29a7e31b0e7e0a198f7bda8a6b34cb00022ee83778e71ee2603e6f837f000b5cf04503dce0953bca46e7bd520d7382adac18547d2183185cb7c17928a1c73a54fb952502cd06643e44a342a64d53eb35bc2d558c555446abd06b702b470669538ad4e08c55f8cba9b34e8357eabe9a62b34b82e241a3c1778952d79872d8469f3e835b0fb2c845c6b211d38136839f516a30f1df29e542ac037419fcf38c2a47830fd3b9800524a0010acc6ada06309b0c9c9659499686b8de1493064a8fc197cd413e494619645c693178951e65328bc6647776183c3b0f4d69424c8e301380005ffca1c1e0c3e86f194af7e66c321cfa0bfe798c31a5360c8fd1e4437bc1c9719b4522860c1da62174175ce9bf509b341d45c39a0b8e89c474aa6be8141a5bf02fc6d460a1b3ad053f2e6dc80dfa6e6db29d85bebd55d32d4ea4bea6c63e9ac490ebca63754d96ed7cd1ae265fc1f70696c27430dfd41b40b415bc34f2117f1e7615bc4992afeb6f3c2e639b0aae46ffd60cab26dd834cebd053f092250bd7a8f23a9a54069f8196821f7129fc2201d6868e821b4635460ab9464553d6d05070bbc26cb56b347325af9fe074189fedb4102d5ab973682778ee32f1133329a21fe38b71011b7413fc937e4992b5dc6682f7e26213dfd9226a3bc1165906b87a09be858f6a1a294709cedb0633cb7726219d2478921661a2ac6d6da691e06c1af11c36ac32b8fa084ec8ded3387ad808aef57fd61c35b37d0617c1d50e5759a29444f0bca53f926d0815f586e0a5477f3c12c25afa08c1ef764dbbac06a9371604cfc51b5d14bf09f75503c1cb5c1353bbd867ca1497a17fe04f0cf996f694551ba4cdd03ef0ce1a9ba4e49414824d06ee856f315bb29ddc5a280b0a5050cc99176e374ec9e3d15845f6ecc20729b4523ea5c8e0a2ba70f2c530da49836d8f24173e74b18c5170e0c295d3b2983ac99d6ff016ae7796cf6a058d5d9b2d7c0d9edf431eb9bcffb530653e4768e1e75eb74d99c2b36025e262cbb2a6332aba676d2da6f3ef64e1672c1e15dd92fc232f16ce65e03866e49ad3be8585971936b2d33ce56e617e859fb9619ba50769ec1e5738d7c025bf46a4ef07722b9cd83ffe1ad9d0ff1cacf0cdb4d32449b95578a1baab518c1c33fca60aaf53b2b5481f5306c77903a762f0c9b2e7caa89603a3c2bbabfc613c03e9143e96986206cd0e627fea052f18a6f05a2e3d3c94b7a8309a814be1bf439b4a313d76259f49e1468e97b0942454a3703525896e93c72a840fb2289c8c1af972d68c4371ca64cf79ae9f41e198d979494fda49dffc09cf3d976d7c8791b8c09e7022d6658fc8491a4a783be16cb97cc6b8c29cf067b68204eb18336c2b068537e185499a1caaa6dc51df6c604d3879a2564bbcd2c764a1800528980067c2cb281623524a5ee9a7c30363c2b5b210ef9a315508365fc28922d96eed1a51ceb534b025bcebad0a7d16c28aaf5c09b727c60e19d6730253c207b3295ddd864a9a734ae04978c122a4343331bad88325f1662cf9824d58e84747428d1e1ba5b5e4136b010a580089c4b7c363f173f0234aa952be317804ec88e733fc7f2c8f071ee64654de5d22ebb2eda91eee7da5629a433a66849faa1a23b9fcf92b3343e045b8b6e23835657a9cedb3225c999467aa7beb61aa7022fce49acbd187f81c838311e15a6730a129e30fe1c9c7dba784c5107e68bc25294838ac3c29841f3b330c0d3badcbdb84f01cc8794d37f84e9f0771c7a5f6b02cae201cf5de8acec1a7ac0f849f1a35aa464ba4081120dc4c2aff1fefa919cf7f70264da6a670cd311beb073f64ee18b16dec839b2b030dd3e893e6431f603e38528ec3cd843c6529630f4e477bb3930be92193b3f0f0ea9a4fbbd0fa8676d5ed99474209701efc8c3437bead1bc078f022675f74712800b4c07770ad4190feaf9eec1bb4839773f2f8872a19a48cd5c1f10793db436620293b58603a78a7397b76ba0c29f01cf8f1b0de2986871c3c15910acbd12045c6380ede5f7c6a7bf965108397810c120007cf3dc48450a932acaa33a0057e837fb153696e98a5410b2070636037f8d91da4680fdb16a0400261e036f81b3365309f53e34f90001738800d6e54a6be89f2c802afc14b179e634ad9b8330c13d0055683b76296f2a44bcafcc02f5cb000d354e034786915226362ff8219b8e00b077014180d4e63ecd9e4f30a053e83eb399c6c6b49f9d5ba053683ab1633ca5eb53952ccb5c004288841961606b80cdee5b48ece6bdee49118038b0093c1514bbf6116c2928683c7e0dca6863d59421383e313b3256365340fbd0187c1cb171b4832879a39a32f5ca034a80283c19190f933ec1ce92b2d7fc14bd9f92643c6602ff8f7f93eaa1f4489dd110377c12f4bf5217d50c911395cf09283cd309a5ccb5d7e0b4ee4f46bc1abd4e96a22a6742137b2e04486b9a35f9694ee0616dcec17c26914b9496b5cc1ffb0a5a5d9b7822b5f2187b10f31d17115dc185cbcd3d74a048da9e065d4e51aec29f816f15f41a37c8ca14ac1aff586a1ea68834fc951704336481952c38cb68fa1e0af87104b1ff0131c8979e31ed4c4e430eb04533a44546e5455accb3c84e99e076982e778726c5af850a6a11e9809fe49ba60556ae2a71a37f012fc96a9b4feb51a2bc1bb3f9ba8871191e5e73d7012bc4bffab7922cd362a7560247832339dda2d1fc17bc7b1b161d509b011fc1422a548991ce322b8594a265a0ae1d6dfbc021381aa6b9558d3c610dcf458f216c472566859085e649cc7189f0e82972ea949b444033bf18c5f41ef8081e0dd652e15cd97ea1de4074eb4981e457606fbc08deb8fef160d72312468236c2fdc14e4c43afac67cd6bcf01d54980cd1617d4f8541d85df819d604bb8fb9612c892e5409e70e26a63bc1d6e6c2c931fb52c8e359edc92f3c1717bec7949375564e154e2e6f5cb080372ea8405319606fe1a714826b7d6768616de166b11cb4b26abe183c0420c0f98206e70b1adc5e616be175c567f9f05241738716be75ae8918f3eb48e99d85ffd192f6a58478982f74bc200332408102d05a305e1003fc42062f900555570f3e3748afbae002b1703e539e28517360e1f57f78b97fbf4fceec2b5a9f3009796ab386d615fe78f0902c8302ab32197c0cb6157eca69a6474b1945cb7fe10224cb0a27d286501a528a5913a9cc6ef0850c5af039820d8dc4a884b084025924140804e280388a61b0e8f800a31308001038280d4542a168341145550f148003522020422c2a1c262618101a18128d44a17030180a85c1e04018140a8702a1a089b0c431570725dfd8a894a05b8acd0826b4f06fefb46bf4071403f0bbcb34e8309ba499b5787c0ceeb8086e43b1c12a4848be5fcd8011ca94345e40e68f1be4f5c8a7b71b7c572d262daf3b536139d27fd6edd19ac45b5bb00c8870f163671b76cb6b8c41fca09b49be1dc9d6a6bc0bedc1e0ef38b4819c0b507a7f9523936b3bf164b536f62105dcdc9dc438b5c9fae2c4e40a7053c4de4b5b3e197fb05389446aed2ad1c52923085a26c7372e053fa25c79b7bc6f28536c9b0acce84686099290bfb740a252448e34d3122bb778f40758b4ba9d490b52c462dd8167438c858074aff6e0a27cab773c1ecdfad3c057d999ec65e247893254d14b9ca48bcbb036373fb1f183d4f8e103fb9f09cde0a75235430df23ae3f757353bd38e7c2072466e39fa9b6fcfea9b4c9dbdf4b9258e786ff770b2c6f32edaed785fb4f46a9f93a919d3fbf05cf899fd87a3893dc9cbd343bb51c2da64829d379d6082d5ce31dc83c709fd545d80d9f08da41289652ff07b91924e440366d2795927a4800b2260c20080aaab2a7f2f4f93d844e180d54333911c4be3bec10c5b33329b7d8058a1f9dc97ba30a189a5d9ad80039b77c00ef50bcaa881cdf4ea1681a5103f1d50f31c0b91dc3126209b20f7296e846edc3e4dfad56491a096049d595ae41e9a6313524d385867f64f87a42f2e6cb6bcf0b511c31746faeca26d39b90a201afe48bd1294a123ad46e0271f34c37e82ed9ff2a2a9b1692473ba5d16772319ec102d6385583cbca578d62dc6a5ce7a65be29be8161eddcde56468ccae2cf82da33712cb09973a2c234f15392d408fe383e7eb0e09ae48c9c5a043134f9e54353e534721766734767d796037cb5dee1cface38d8fd7cdb891c0f955ccc625b75f6e49230a7358fab3f744bf7db0f464e8a1dddf1876de0aacff5447ea373b6f0d32321f6c6f4d4160bc7ff30ef39494fd498922cf358cb413aa35f995c3463bbd500e39c4fdb2a41eada8076eff05590da7bd0f42d1dfc2dce68eade6cb14bb26feb7f8fb92ef22f9b7d0ea8b427960e2860b628ac9f3ec30053d968901b9bf9edc80a8ce5df9fa27a98b1113e630f73ef5443476f2324f851aa75b0e9f856ae2cdc93e013439c4b7d32a5a1c9b94047170c7557e83311dfe39465708c586a8345e428171c125beac92d55475e15c1125ed3ae0b4218630427e560f114dd387980424f29371fbd9cb609456f002348e3c58f3a010f80b7a6cf0275d785b5609ae8a5746b9ffab41205cb607c8cf0c92591ea66d484c068dd1cbf31329dfd4bb254d2bc827685dc97b8833eda34de0686ded6adea96ff821df2a9125a44bb9e65786d1e609beec8563deb97fe2f3e5100a02ef38d6491078ff743b31519f0c312ba5f5d23a0d9b308186d38b517d098a0786bf38066e6241cda78d2a977f61b3fbffe2e5f0ae9afa4799497c8cc143c4a75c41aac7636da418f9f14e027f8b704a0272de9680f02b4c7ad257f022662e71ac75693519adb424a689c7945d1559dcd9778ed3bb8a3eb257436014298d959fc58c94783435b4b759359cc0d4ae6f39675d14ab6d9e076ea5493c76efda5a811696b0c70812e5dc1136d156f12716e41e630025ab64d9b96bf98ee3fd5dc6e332dc1e5417e2d0420b4e0fa23d8cd04973d18c6682256e46b7d85c2fd72a2411aa1e45f6d91dba5fb2246f3b94892cea2320d9bc5281086b0a120e82c8a091cb348e8e2ea4277f7abdbc693272f65c139c197c960e56683979158596584074b821e44d45fed8588db855dc17859dfdc22e2b74ec211cb36f7061bb6b09f5a359901ed52ff623451f709c6cad3cce12951f20e2e4e9053e54232858bceada6b782bd05315714f558c3d2f542d33df80b9db30d0b5f34fcfee7914946eb6a6a1cac56931de682be808d2dd9a127324f7af4568027fa9c97004d133c72ebf6923a364018d75320b48cc3f2dd84b8ef7e8f9ae5efcd746583abd2e5a93d2b31a79308b0a1405735eae4529ffc9af8eba1e91b1f8a7bf6bd1fc2e1aaf956c7867fe9fd6c529867ee4e6ebc5701a3e3fa221b10735a406e4cd07160d431d874b4d0cb0a91d2f9f1c3f0f1add6a45d4f26839c050994f0a2f85efe6412318fd26bed8e7040aadbf0d7308ad96b634c4922b39f6370b6fe013183e6a0d8b622c58efd6297482accbc6c0e6975d3228b6db3cfc38729cd1598e36e8744fd3a40b286ef566bedddc2875212bb97c3018bfdb79d58a66e66d149c4e681220d77366e9c5e7d91e579944b43f26d6bc2b09bb687e663295115438602eb73c8044e5b283e4ac2ff9a91ad640ac0d1401cf9057dc9623bf5e3c4d0b9339e953307db2f5b7246dc2194cb88bc4eac9b8917ec5f63b56df0095e458b9481ad300068dc7960e1ba05a0e2297d594679f7ad9876993fe3f849e32e07e86fb4e99fda6be9bb86c238f47ad1b46f97d7e13aea9b05c443d963d6ede1ef216e0b6cb71ff7cf081072ce7991a5ece4fed3e6392c41d20759fb192644804134748a25709999da173ca4467cd19f44f739ebdd643094fe117b16f8d900275c73000dfbe3967eb819d66b9a8a8209bef9821459422a1318c124dcd844c1c46e8b97496fc9a3a0a1d7803d1b05aae07d1b401216f1126769c028f2d3fcb8ea7122918e509ca8c1b9e813c4ef687a4c40edbb8ec23a59c71ee8cfcb8441f9a5ba6bb91e29484073a0640c5d119e1568306e840e7695356375ae6a478469a589d7791310577e32fd5a193aaa282529de025135140aab93e674fe1da7442bbf3244a7718e587451598c74567e14700e65bb4682ff314f9c8f8e3882342e1b7d0e9469abe006791ee3684666bdb281cddc52303c1d85beacdde13af5a926d2657275e92bb47e05d05ad53736fe9fb03333bc791b559d071e932e0082fd7fc4bda2b936712042efc3b255cc3402ba656c2058401a20f462f009fbd5b8495986d436da541638f38f367e11a38dfc34a0103fcfc3e79eb0e1d01873f2ec13e7f2e35813c92154b6918cb253334e9394531742aaf9ca304213e0513a66c3dcdfed80b4f4b1ad0a3acf8b7030839003818ba9f9f1e582d503ac72dac4a7c07db3dfe4ce4190922a7bd1f0937b387b6d712bc8b1fc7644b55e822bb84a1190cc4cff1e8dbad8fd1f3d32d7504ad298d05014fcba5b0952783e9847d44b99a2205f7a3bcdeda6f48117e885bfeb164ccdbe25292f700dbd4c1ae89121495ba21931bc16b9293712999be8c279ed24eefc24da38fe43ce79204e6dec823b6c234fd1ae96648890778cb0a9f4e503abf09bc0535d9b06be490bbe5327f5fcbf85f9a18cb2c7bc38b535f136bca3fb675d1046c972a6c01ed9b67f8b8167c1341ce8b97bd27e075bc9107e6b02fdebd390d8c9d25a58a548bb552a0d004026892f061135b7058078290f29761e27697cba9d74259c86f5749d5026d22f70b2aca8d5788c698d8d8411de55e68d7f8d0ed545afd6511629c5a740f7ee568f0457a218539c5426039a7702dee9002ca64a7f6c70d7ad43b3104338322201274828391375a6b20187355570b6ba4fc7d44048d824444fba87b51478a1c3bfe5c9a816479e7918ae91cd27a6db11673f2df01c3961d6cd7c7a1c9c15d166409e7ecb671d8961a0c83cb595b82fd57b84ba1d6d4d260e4848ca413ac67af54cf01ab5bb75f5972019d4723b743397da61950ec447736a59569b41a14652a0ff5b87c35a98f18b49ee911f21cc24e6d346fca2fe4a13832400e8769eb961d18561c7a825e33b9dd1a8873c5af6a92dd13f31252739802e6e4667edb4cd8b81597255704a6d2dddccc64d0d737e718907cf3c5d60e8219df6b94dd547ac8d14be7228ef2f4c4caa66cd6bfa319f378c8ec245817a6caa4ed350293fc0386f0098cb1a09e3128b53de0d95d5028d023b33d38a9ceecb8ae0526e4cdd49a847ee9d1fc37eda02a60144e1ca0b79b7886d6a5d860241b6946fb648e5d1ba9ffbb06f35039a197376d15cb0032b3ff3d5f05b2dac6001051ff120e563b0f184a0e10aa19f41153df418536eb8e4cf0c5bf0f2aae8b46e832d31e6cf110133730ad5707d9ba855b979a6223cf5cdc9748afac3305928870159e3d7698a608144f1460c47b9eb74f32a47450160a020789be4b4dd0fd882704f21561d63c5df34e940312a37d8bc2710efc04794290ada8dacb9747780f0fcbcc00cb2a400084e1177164706c673ed1fc4b2dd8e08f370ae6c24ce6517da9fa5ee043986506ad8a4a36a66d61bd8d93bc99e53b5bb032451582a907b0a99818d20270713ba17240043478fa434844bcc99502824b87d5c093c9195685213698e868e22fdc01f2c371a95f419685cf3238a3d81dc7d9f91204b137e97fa97e27b336858f861a16c010bc867bc2f50dae7a157043a2b5f501904470261d28024e4e40d1f434fd624cceabc457b3aefac45d85cfabc57aecd5f5e3941c5503a742abb19fccc6e4f74b6cb6c4abfa41751bcca3c6281c371086dc8180a0264befebc25d8d000d104bad14bc36d784750fd03eafcd0279f56514b14dbe6d3bf573f6acd866553f4643520e249e0feea3c47ef088f230dee7403a596fd32b2135601a4995f268df40ae6d51442b62cd794da251a15ca8efcb9f35a096dd438756fe6fe845aaace485d2d8e009a28ef023e14ace7e09bdd3881074125289832f63a7a4407da4c2c6aa53a207037fa5148571a07c7f21689d21a38f508d919c9acba9b2300c51db8c0285432d77d155bbb2afebb7b2ee7263b381d9b67173720ecfa5a808d5623a6d5ecfc766c11865f1547acfc85e87e56059d65a4857a8f9c269de37ad06204a9b507550562581bc2ddf3e9ccbb3674303b92c4bc15cc5e601c1fe83624045fc9bc066752e2bdc6b175509e2cd8567dc419284f62f03f46ae1b0c2d02276fe28a37f4f6b116b5a7c64997063df52d3dc46d2081f09f74b1d5d40ad014e30b3d22590bb47488cca815377f5edfa296b5e3c3c92f6293e206bfaf5ad7c56488a04c1b057662c98186f631e289567d904bb2d508bac0d7a1e9aed43beee201a43dec9130d9c6aa2f4807c1ba7f1e68d85c82d6fc096402b7432e4e47ce7e5927abcce79be0d6a527b5944c568adcba0cde32c2db225a91d58c49f3b803f6b92a4078cc0821040a8c7d17957ef026398d97ce71688f168f601aaedb79fbc36306227c69d73651370c158e1d13cb64104ff7c9dcec9ea73ecdcca26346d82d70fcc44cd4e20c0da68a9b0931782be29ea391f4ceb19e29ba065b1dda8f00b78baf1e071d18941ec3b54c777229732c0a3e4a062cc9cde6d713c46d8a487383460074a2f95d43e9b3181b8e756645393ef464b12274e20718a14ecc47d6b5d785d1cdfee90ca9d44711ab06850244683ba8034a8ad1c5111f437541882ea2313646614687c9460aede690614b96c748da692bd21660f0b63691bb7b65eb8f355b2d92f4cc739e536744cae28e3d3146c5639fb242afe28af70ef664c22c472d7af7d1cc241330470aeba8214e7326e8a6c9df3832a10fed90d9567b364a4f744408542f431db45782155ae2b5ba897aac94a0e22940b72107ccb26b826b57f59d5f04319b9cf8f3d42a99bb565af8f49c532e8a16c58c388bb0f0d44b1725c12f3f6ac3a9a42157db72dc308d847892335dd913d48ecc2d1ce3603e7fade8c7632298c6a71c3d1aee483c82bb91c6da6a3fd1b0b0f07a218e16ec495d188464a0fa37134bc1efbf18e3e421aeaa3e82369b74b9b225ff4462bf0ce709bbb8c986694dd1ced204d1084ee483b56e3a8fba5e83fbb4fa8e23454c4450538a4948870e8f95391da679cd649c93076da9325b69a0eb3b13e952991f2c5dc68d5900b655b4e22cf402d5b6f220a1eebdb4e37632c2b3ef77b95aaf4ef660ba236d1431fe597aa7b00dafc4edfac76bb3c95fe80ce8ed707fad5927d42a25c2998d0804969487c90234b0184b96889c332740279c5eeb467e568624b99be4c2d2d3b56fa5ec6a633450127a2b82c5516de01ed37ea9a53053a553082678753f400864777efdd3c1233cc7c2c129faed1684802b91ab9d96c5c398e94e0245929f3d0fb7d1d0e045eb6084a5a2aa8960aaba65df98bf5b572632cd836b4fce506b6fc7a5d2cffe640404c1312b4077c81c4885da955dc2fcc0ed0af655613e2d9bf6af1b721c44e9a7a753634d988847a8f2dd53bf6ae35e15380155d22db8e57068f6770f750ef6cd01cbf166923b3e46b436172109695d23492e43907004955c2ddb91c1143f82f80a7bb91fe13c4df44f06199e01876a8b01fd564b9eb0722bd4cc1eb65802627241d03079bb1b281a5db81dca780993d0bc9e256743fbc830fb34191717e2b3edd2ec61ff1e8eed902261262d4db67c5d04461873288d1121897546cc2ae2c3bdbe8feadb3f2287480e08911f8b86dcc7bf28bc0387148f94436a47a173b1b410b6e6616a083b061d42c7eaf3e12ca4bb464cceed2528a17d433646c89e158933ad01dadbc2321a471e316e34e671e183e48368e6f894e2a62ec8ba5084f0bd9baeda5c05cc9a9ff9a9e37a8b6ce3a68ff7a74027d344036e9e350b4398b72232de379c33b459784d19e762cce7c89ddacffda67a508fcf71e599e2905e528becd86e17a9b0b122ca4b650656644a98c53b4688258cb27ced9fd133f6eabea54ec96c6d01867984e54b02fcaaad62a3f1e44538ad5e5e7c768c0cc8f93071b2f5198d730a60053d17438b26e6113f2c2d31e8be54e494426cc2775b0d9ad728877533a1dc25e86c55419a3623a64c08ba5deb8cb5cc668beafc5cde5704dfe9b648a39e8560fbf1b2966e1d7c6f535a92a7035d1088a0318b5d8cdc058f653c3f3163a5dcf43939651fbdb333fc8090d3e51bffd15b7567c274d31a777cfe67628fb5504d0262a092074e2181511846d6b55d8741c1188a2240f661155fffa99f28bfd1da14e457adba8de37a2baffcf0a3b157ff234c0072b72de09aa12912fc247841891d58988d608cb2b49ad6d6e4baaa59c0fe2c97ad28bbe415c844752501ab253f45ea4febccf8370bb084a2249c7c81397ae182a8b7c3b4552660cb9ac26222911902b993e24a9b53eb610aa1344305b0c8783631df7883fd1f76942b844a2cb25de4beb6e2e23b84f657d998b59acbe488ee998e27ce1cc9334716f1c90331cead8a0fdc729734353ad7fe7e824f0a92f7f853b774fefe1657b31a855aa22ac07706a797229e250203df4b12415fabb250b6246db6c3bd54bc3933bd166a1b77a6b9e29edcf54507cd326d8fd503e2e8461dc62946b139bf62c23bb53af7fb1d1e9506df64519aa6431b2e30bf9512be8b4a58823e9e41af13eeccb51edd0501e06fe9f5817a0732ea9b7dece49c388ededaaeef6fbe5db716c6a86ba60021a8f4c6655ae35866ffaf820f849ee5f10679ebdbfd5561498fbcc585f3212f309cbbad063c2f48573b9cc83032832402e5e1475695ae60a060b9e8d74dd9c5b0807804492799efdf8bd662f2f0826c51134c942988892764c3e5c241126a4180078b5d844da995b7a6b3cbcee505a2fde17e007c76e8f25107265c4de665c1da7b9d9e04a058afc78ca9ff14952eed2d2d6f375487d4ceb8227814ff234d05df9fdca4bea62b0d190112563de7434732dc0cd94178f197fc4215061e6384f104d7170c599a337f772d5a0bd88b44cd071a3e5ddf8af7c4c60bad44a10475a2aad1552539f96b079e2cbbb94bbf6417a3eb222f196f420d47588684a93d913034200468b4c853d8366a83288906b17b52163874069747c84b31c4170c4012f50f73c8156bf3c278a8c272c0489d42b17d1f2f76335eb43bdc19d4e4c0074bd8f1b49e3000354826f0d65511f395ce8027d93fe64f0f3f2fdf3afb16b1e125c8ed221b62c9308c8a50c5fe9444746182c0a8bc4bd19c1de2532531afa34760395788f65a827eefb2e67ba088f0e494e11375b79ccad06f97658e6f91641d91a8c2eb8be5b0df4ca22647f470dd76fddf8982871fd636c5c7daa838294ca2b198908e9843880306fd28bed6f1690a8e91b732153103010b9102e91c9105d104610fd90388a8091909feb5e55540b808001812bd9bd42c4109e9d27f9f638b15f6894a0d3c070c52e4263021d0def1d8d7ef26185c72f61880cef22684d945e78230b51e4eca0562410c409b51e4a24b298f0066ee01bc4fd9073e2bd4b586f18437c1c84dc65b9f20d42149196e9dc5a6043c85b6854484e859e994b32d6380ae2885a851219550fa2533089c81d2fe03514b45d1efe4e6a3153510ba0db55f5d8a7615662cf3f0b33a4b57fa3d490c3d0be2dd6bbe0a5462cfdb4d51e6573961c0000849cf4a63a03eb184430d8794305b14bd64be2e2a3c4cdb7546aaaa16b6a22cc6a6e1b70b1091d6bd6b1006c6980d9ade93d65b4105ae44c95bd17cff87a9696693c3b141eb27d0c828ec86183fe41054520e3151bd8eadba11f40e005e5862f64199610d7264b5be29c6d12c736aa9e85c4ace3e5f082881c9794b1264634f525e5602ab5e7a492671e6d9b8ed9143c9ecac72b2a892b81c46f27788a8f50caef547ddea6fc712fb25003291ea31a4d39e948b1503ba82262100528e51704e7996b6054de0666d264698d4195d1687032ff4a83d08c1603b205cde63ddfc9dc947f20173c2abd5200fe79a8e57f73d6284fc8e1e331a699e3d37f7dd8f1d231c09d075d497f0ce70021667d87487d30d51460b64455e6a34894d4c9a92d8272fd423d9d9aef5037cf7edffbbe9d42bfda77afc3f83e1558ce50e699b4a3ff69a855ce1700c05c47c188067bbe24c898a1375ec320f39cc0d1a720c1becb9b25186bc97b7458f1abcd52fa8e0b8f01568df7a0c14239c20bd58d7111e060054c6c9df25722c9c1605be8f4524c6569c321604c028a40ccc9f2379260d6324fc33e7c9a062e2a3ba5cd7a62df0523242871c6b0fe0708d085e5738d3206a0acd2b0026097f9474423575cab5acd5373d4aef08b57f24fbc357d6dd53f6ef864f26bf127b0f2be1410a8e60678fb22d04006d27d904638cd72d07a92f8eb15cbd9dc445ac0a726a1e6670b30314339b6d0733247d807d1920c0449e78e4788a22e1d0f89a0a3c563e8e35cdf64407b2a9d86fc2f292423e5bb09898ba0bb46df4f8cced86f5b24ae58fbf875121ece5219d85c0d5ee65714e2bcb5602458d0d84631fb97502dc5ff709d38b5aa2f79af7475e097208b455cb4e8e073be1cbbd8601a2f926cc2ec72e0ea2f33e7ef75d19a3bc52452985db4454ea603aa0d54d192175f20645d93e78032dd87b0ec83d648ca560f1d42586489e83b02dd2057638a8c018b558b937d4c4d0b0a3e28120f58e1daba65673d6480c25f373f774e4bbf4e6a56ca087b5326ef2af02d14b5f8a073105b058c781cec450614cf071d6586297736f4815b0e8a03f7cad9397049ec3b68c110ef47f0825ddfc9fede954ff8d5bdceba33b569135e0ebe8d81211537102daaf1b9485d08297927a8b4e62c30a9606ef5a39e400154dde9f5fe5c83275fe4bbafb5209e7184a6acae12073ed621abe8025a824a1c29e4b66bae2d69554ee0bdd1aa97c15d2ce46614b32f923b44330c69b1beb5687031253d2abc90fb417163669c4bdc71998e205ee23bb1e21f85f520d443d1b44d7777414639241b871498b39463f46b40ff8c62ba2416735fd712a39316b3591f379eba7655ec210f45a72acad05bf355cee0abc55604b339eb6bd7446c3f5cfc22ac40b3e5eaf86b28130f311e250b7d306b4a1796e2fb7b0c61fdb82e939c97829e49a0b794c54d8669a682c7f115002256c74196a0e3a3ecb392a3662a8dba6b09ffff68d23165f8a3cb43d21ef8d5b95d6632be8c5df0e5c8b3c0c5c3cfe9991071442dc8ab34eb2a39183c571e732d49c41dd5475ddebdc62ebfd9dfbee38746cea27b9342080877ed1e0f3823925462dc2b87e26c8b73663cf523ae50cabc7aa89b44fdd5f7021ff1284075e92759452058dfe0519387bf04063553a6c68ac4f6074a276c661e5a64592ecab3f00a29e61e9debc1498c1e715c5cc84c1a41498c527b05c361c4a69121158df6dd911a3cf4d9ea889ee84e5ea481705bbe339b717500080d3db17344d0b144d4637ae60c0de36fbebf509ea4881e67fd93c9b0cfc7b5a727549dba72149026fe397b5d1d2d3afcff6eac4918d32489f07e309f2954fe8eda8032a9c1da5685c9aa576746f6552c03ca03d5a107e52b1db517793bc44562e195e25c63776eceb7d2f2bce912b4c63ce2084342c2e35148ebcb1c14f556f0f0388fc47ae1f9b41175b880cc72e9e694a2e53473601d128816ede60c9d4d9a8b8a8bb5a96dcd9bb3ddbcccf0d3eb8be3a7b953dd04a0946d35bc864ab42943760e99262d19b36e5affb766f0901dd865c06143160008aa85ce447685a0d4d7d8e6a3d97385b0255ab21ebce9bce4cb6ec35394290f8164a77c3c6d4decb7bd0e6b0277a42f329c544b4e531e16e3723bee82b80330aa0866a7d45d15bcd52c5f89b88274cded89a828ee5a454df0f4b325a385a492911262b2dc63645c474b6d11a9a2548c8a268956b4e264948a52112ab68c158b94921332e4188775d38aad72565c952a4b7740effa503b32d015b20d141611456c9f08f7f22efeb3801725a26a7d1ec6b31f7b23b186750abd06a43691a70d193f1f08a2f1de4f14ae902ab4a5d5a1532644446025035908b29e4d1d83d22198286146b3cbdf670e2b90132fee30fb0a5f299bf0d57af9f1c34833cea641b89b4a4925098b4cd3b6940b7445ec5fae42988f9a58cad6f84095f50a5191c2f01191852e6f37459a04c18ec349ec4497cb4043f720fcb6a3637e2343b249f9a626cba9429598afe5ca5040ce085a4fb469495bb228f0874d5436400d9e4222b116ceb7b180e06a849654758b7ad1c6c4285f3fe22a0be4d5cd6e0572f34391fb996fa1fcd91e986e27690b7bbc8a44839c72461c8cd5e6676baa9b6b995de66e7ca09f224b96b013e80f4ca35de71a97cc5b1b47faf607e1dff51b9884492f23575adc5b8783cb315975aa5c839d41b9311eb2570d8570dd9926cf387e7fd36055b39d63b7d5a690b564ef91d57e9b2feb647d5b307bd864580f6b0a99b0e3a696b43e272f30c87c23cfa08ce35a07996090930b2991ddb36e8c8ba2207351ce619035f37dc7580b88ee0e6a790a9f84fd0d65fb23a800ad6abf9be81111396a54862562238f9700ccf55b6d4f04fd10b05c566d2e070ee659ec914682d2dc3a0000b79ed1b37c58e7ac0b6ab658eb488417e35c250f5a3e98763285a7ad9284789026879fb38fec8739b38079aaf74ada2e602bcbb9efdcc4a8f676c26048b70b293ca34a63a9d15e07ba60c82e499f2282900dfe2a9aef5154d299e45a1fa818cf21529f82d559d3fcbd6716a2938e50958ce053fb87523f178667ea891b84f7d1f7b1584c827828883f245299bcdf2e3e81a6ba96dcf1850e1d0a819cefb68d65e2e624758c012aa1641f44e1a2fca3aab05a28647c93b8f756344b2d0aa0b11a4492751b51320871a07c1aa28588ce98eef944e210e3bf78c550a10d868e6946ac16dba580366bc2585b75a97cd85e53b0deea2f93695fcd9c5ebe28d694b41c71270d73f6344d6b43af2243b544f71cbfdd0b3dc29b61ffd45b509ac96ab9e29268f9a0821f0b73284183bc79173f2ded6cecc0ca79edeaa283bdade49895912bee329cc94bfa73bd65a84424e760cb9bd2f5b1f570abaf110a197c520146a66c18822324e4fe04b445131d4f473c089f49ea8dcd65192e9db97584556302f0805b360f86d1750c85541a83cc74bd8da45a215cc2f316ebcdd9207a3fd531d50356c251a86a2e2e7c53fb36b97f7d4254ec42076a1557991b95d638d01c078ba60c654458f6e6d96c20bf0cc91178c018e7e1de5bb1cb0ffc624056bc855d26538216daedc5582b328e0c485ff04cc97228b8bd6fb351a030b947bd0600cca5364386cb984abf197845ee8c14659ad5b870e79b6fa8914aec68ae4b205b15de4ac26544c46b41811dda3b6261b6a975e4bf6c95d5175ecc8cf6cc7f53440b3af2151b3863b523cb3561b74a7edf311b80a05da52576a981115f9f829d3ac6691dd8f2d5ec3ef1316c11e375c923863c0580547157b18ea2bfb3b1690d4b1af01a7039ef1382d47fca7a422c52a36906e025a5e0e457cfb2665d353792f5f981814cc348dfa77f2e2fab1da47688ec6f805cf99054f978835210f6f8c17ed32cc2295469c3e5787561722c32405aaf55421916032784962c3b5b0ef8f665f6237cadd8e6b7a277030069e81bb96faf7800b5f3054cd9a13b5690c20aa65ccdf4a09169711a2e1b847a91c91c2a8180db59a894f838b7b4accd862a5be076b655e9fce90918c00099e7ee58a4f8831e3d0417988e9d96d27ccd1e2eb641f4a5a7694151adb7571b1c68af54f4d6df425c0fa97ab537c28ecbc88192884116e3184ab5bf932655d1c33dd771012b1d5799061cf6ce6d7a5497424e14b5bbb72cb9178c6d6f932de03a936ad6dccff70c0d7c735374b841350f1d940b21d052a329ab8f0b198f49ae479afecc25ee1d7204619652657eb90c54aa554af552242a4cba859e063d752a722b6c8339ded156a920c72541fd61fbdc94b2ad19b8a06e34d9d4664017748cc6580e65b2864884b726d8a3e855a2ab8e57448c29f133a2030353b48102b36450d6b319c9a70151ff0cecf2190c908015bd8113ba5a3b6dbe1d6e83b835be598cad6e3b7d2a5205c6968a7628d95b22ef0513c6cbb289755e1931728e8ce1a157307370ae33e09d1f340acf9b4d0a125121fe56686c1825fd87964faf16e39641c9251ef5cf568d4112b59184a2cee08d579808795cf134b876d816464bb16264a5d0ded24a8ef960bc91a059575f94b8588960182f454dc1fa619474fccd0348ce659d748bebb9454bf57167fc2b48b908344d38f06fc72aaec8df82b205fc9d24eb5816a4b9990263367afb528e158a155dd7c18083e843555bb393722c642ac420e233f5f2a3ac5795a6dd9c7d74accb69e5dc26200c076d877eb9dd43cfa0664a1a8e15e22e14a544ba7ee16b062de90c0e485f1baa77e4803422ab3312b516f2af1c1438b516e006b1a76040c9258e24a45d3bca809eb0fb8fdaff0df156293f7662a1f5d13e3de8388825c290e0fea6101d025116e1a2464e52e94e57d05e26958520573c2d5ba4dd7b66aef1c3578c6de1795dd64bfae0d0a0b246f290ff6edaa2aa5e283007213ae08c03a31f18c72d080aad9a53326f73c13ad53552a851c2ae5fa11bd2be28e3193593c564b2a14854986b289fe16fe34a0c064e08e0c8cfb144858457a381c709f3065bce039db8ca6fd22409f445eb237484338c62c3a0b4a223d0630b21b7a0ac3e8f4dc106a10cc890a7e89c8350885ad4160b16359ad7e2ef099ef4aeb3e64e5582a78b2ddd1defe72e48bec7661a6cf0856b65dd0b69606271c5c6cb6d66ba6d14461b060b0240e150b29450625f44384c16784945e473a382b2ed47e19cb9710214556d280891d1723792229eb55b05bfcf2ab230953dcdc8146a345b724e65caa16d0bf536cb25da840ef3c12190456b261386701ce3fb49cc45d1e097c3905e78af94da0960333b1ef5db5b0d225d807e6208b6b967d86a9ba6f77e30b02f2c3b33c6a306567d6d1a4b0b9da92cfc464ac3fa4eaa036a3b46ff1404fdab21f679fc0eefd22e7114826a7753385b05bb6c88d8065ec6fbc75ec681bde38acf274d1491edef0d2e3f415bffe7e0456ffdc13693a7719fb42588db2327f280f8c55a3a3d0412784e5648e3120c3630cbc6821f208552be7267cad74c45663c90bc5a72bb24404791278247971b9c731d8642a2486f4e38932c4f72618c02755dca5748f6d44a3f85f60a939ee8412eefb632efaa92886e53ee900ca3a56beb6c1be4ed4415811e6fefdee423005f14e28cbc42208be8a56cb6148a4602827118628b479a9a8ea3b9860674c30d60268bb2051ffb0db0c1a8dcad2054c300d2ef1034b6b3a73e3da0ef127f15b7219950adc3c5acf7a346d9447d9d454248fe51e9e621b9e7c0c44cb246275347d46d9504c31409bc228cdce17fe29aba8e9e4b92cad612089b06a91b7f6ad3d9b261c3ef60cd94a7e5247e4dc077edf18e9b793b68ee9c2a31c24e4f82e3f5674128dfa567370f3a34f8960e1852345d31b04e4f8d2dca5859d1888d18f54ce0a96e77a947d519a065909d5af39f53cf73aa0edaaba690ac89ab5630431a7367ca15ddac15b105cfb3b0b618c7ca20a11f941be889e0cff2185fdc11745aeb5d6b5006cc5573022e4b04040b3340b2a4d001ffffffffffffffffff51dbdab7cdda07edcb94361913500c45c8fc84a494524a3225f3f43338ed03ff151cc287100f0b6c0acc0a9c0a4a3c39e520913005b1975fb3cc322c830308244c313eba69a8dccfcbbd8d1c3bf011e6d2be8138421fcd0a48234cfab48d560a35dd184118614a2d25afcf9a4a005984f13e95685ac642375411c62f335ddacabb94249f236127c26cfae652e724bd5423c2a04fe816f93d0f953c8449af6b9d7e3fbb3de11a6b6608534a2bb18e4218644f4a2928112a4ad6354298c5d664cb31ffaf837c076410863325433b5dc97111b7204ca7443b09baa31aa2a1c3c659208c1672f1b1b4691d95c510c306093c3c4000e163d8e0c118653000e40f56ba1b1bcb15d6b3933c32727455633900e207731284aefaa42ad907a37512bd7637ef1b678d354e3bca28e38339bb47dffe391b6d273a6cdcc03d184b963072edf43af4600ea192126d9ec44ea29e07a3794e425a78ec4dabf1600a131fe127b37b01c81dcc694cc3afa46d0763c979616445f4b8b97530cea6ea8de97e3c9581d0e1f5d0cf5eff49903998c457ebf23149fea58126079356a8fe53e154630d75e36054cf16173d0c07a35ace11933ebad2e31c9c24f91cbcc1a4ed4e9afcecd458d33c37984a94877e0eaa4c94688d353ea381ca6a9800a40da6dd33b59f4ef8874e52636dad05206c30de2533ff931a77f7ea5883a9d3785e4b52b2c6da0e1c38d46012f48b891e9583b6d4c100240d465136221696e754856a2c1a4c65626f27a14c0cb5748d353e83e12bb89aec5945c5e866387f6e85c9aabf0ca6f4222b2749b2a5bd548d35268341c7c9e1533e99a177a200640c46f99c1dcba348eb0a0840c46092aec3e4ae5ec6581b02903098ccf2e3cf9a60305a0e5afaa41925b8c67702902f986543081d4a3679269ada05205e30e55c363d25eee79dba60d2398710d54949275a88061607e142524992249f166da9b1564e06205b3028f5a1c4ae534dd18c86164ca2a75392f44ea22b00c98239f5ef4df2144ae49bd052008205f39f1484ec7ce92b1884c8b7bd93a3493a9605b142aa24bd566b6b8db5260148158c164fcf7df0b7a01d1c62141a89c60e1d386ad0d0c3c118367080031c622c0e1b34c83020549802881444001205d5dc2c2d2e68c650007982c9d69289fda4ecc491937143043ee0800e1d27051e1e1e06e2049026f0f5b2d9ea59ad7de5a9a49caca28e594098605e4b39f1e2b64936421c3bc610c1128c7a7225ed4949b224a5b59192083ef0811b3a0e0f3c3c9293d000a204c37aac279debc2824a27c1fc72929e58236d4f1222c1ec49b40e173a7d5ecf811cc160726996525610239837fdaddf336f56669022185bd3737dae83502d99004204833efd241ff43f0c934a5236b13bf51fc230c91384ba1065929069f90886797432cb59a205184693da2fe845f74e3afa8b362e59b8d3b2e02ea79569a1ba7b94245f18f76227e9e7a504f929bd30858a551a2127d5a8145e1867c3cf73ca92f373ca2e38ab28e375156bcb2aecc7dae5445329f87e125d18ce5cbbac44b53993fbc8854994d8a13d8f1017e6ee720f3a9c9494d0f716a69157d1644b96dd45b585d94abab575d0b072b7166619359324954db4307812d54faed678162635a22bc927e34b4dede1f139fc6561ca3ff34ea243dcfad5217cc4c268728553dfeb32081fb0309b55884a2594685d6b03c70bf4c6c72bccda26c68937d1043cf870c516541cd3a7726cbb15f9874e95e7da5167561c941c9ecda28af26e15cea5301d46ffe9b54d15a588dc76aa6859d20f13aa4a3015c60c5d7a266eaabfde072acc56264d54b8925318ae4aac1353a2867dca16e1c314c6396984ae13b73f4b45c34a61bc3b553a4d1e5142ac1c7c90c25c794fb783fc5f1ea9181fa3302555fb1dad2b4de5134e1d3a5833f0210a639e94662c66e95c521fa130e5258d9354feb9fd948707280c9773dcda3dd9270c4a56ca75675b269afe3e3c61129f8451fa5acadf549dc8be4beba2ddd55b7795c897ca27459c308cf5e7ec9b245ff8d884b9d242e627cdb64e0b1f9a3025b9b1193732f7b3c52b7c64c26079593d688a8962745cec122653b75dc1e4e5e1b13e48ff6c0983d8b8d87ae2bb9f302b615eb5bbd1159b1226a9aa537849529e24a727616e75b5539df4ee644f12a6941dff4818bb2fa5e52d25244cd9c3d37e28a5728aa347943b2b68597585d3d2b4a81764e57fc711e611f6e5a3a146cee4f8d10853126bf4e8f4764985cdc3e3ccf0c108d309b5fe12be63624517619e37bd22da411f8a30795a2a31cf4e5c35b59de1231126b95f9232199d0face00569f8408429e5131d174eb6868f43184fb549b765db5542e4831ce7868d317c18c27057b9c2082587fd8b3e0a618aa154ceadebc53f930f4258f284910fc2706f82295d268e891a0bc22073bad74559febf1a0853fa649ae35ea1acad0f4098dbca53e737753ae8fce30fa6bc999db42c49a2d33dc2871f8cefb97fa4c5ef9c242d7d30c99e7225a66fdf7eb4f9601c5da16e4d5dec942e34ecd159277cecc15ce174f578aa1ea99687c7871ecc63d9737e0927472ba93d3a280a1f7930bf86be7dfe3ff06034419b7caa2374b4943b9852ee6b2b436c4c6eed601c8d3dcf595475307c7bff9c7b9f5813a5834149275cb4b13ee6604e4f3988bfbfaa37793918de7c4e5bd5cda76012076399d63ad3351ccc2147bdf6760755a27c834996f586851edd5070b93677f98a9975bf261fbf3698f2c8508230b1e4935a7eb0c132abe8eded16cbd2ac429d7acfae269558ca640d66ab8fa5fd4ff3f02864e8b8fb50834938e94cc67deb81e6b317039581c3fb041f693098b55df4de133dd2f001a281056d061f6830e5ac8b122fa91a6b64dc484a0e14887156e0e1710693eecf9f36fdf81c33182c087595a44863f0510693e8e059e7549758aec8507e96d8db95c43268ecc08673c8c7184c4abac505955de2592f06f3996e379d4c4949e7160693872c97bf1c7dabf5533e3ec0603cf95b2c4be835d6c4d0dd31868d32706003ed063ebe600a71c13e65eedde7bb630c1b65e8206b7c78c1249a49f6c954384bd6415d3077a55ba7f315b3fcfd830b861be1a19b969ddffb8d2d9866ee533afd785549d00588850f2d983e3cfa96e0414f9827b3f09105549714dfee52fec082f92e5dcaa93ae90aa69c277d8e118b3df15bc1687eb7bed716c382f75105a3dce778b1fc2413d753c17c296a28e9659f82f9632de7b8ac5526280553278f6619da55b9e947148cefe597b2e9030a0661a27bf9b59609daf3f184d2725c4eb9d0b69469e1a255e4fa047d38c16cc92f9b0c11237ab90bb80b1f4d3089273549bf2583058d840f2698e4c7cae6e9120f0f2e7c2cc1a442c7b10fa13ca77760c369948123070d7fb6157c28c11c7663a276ba54eacf111a49f84882e1a4efcab5d55c3b291f48308befb6c83e29438bd0118cf717475edcc3dc9818c1685f274bdd4b95a0f647118cf932a69e2d2dc7b67c10c1a4e2e7fe938354bf5c0e1c63e0c046d9304c1fa2efe4b1b41b69aab196703c8d1c38cc84a1fd67939229cf493f9f033d3a18e612a57c7be354cef7e06bd0d81c0d0ce3c8a9dbbff53442b5af23c721a36df42f0c6a9d6566df22d4ff3472f04f46b131da1746d74f3749dcf54c9e400b40707e059fd81083051e1e7e3e878747752f4c42ab879ea8d331fbe585f9249d72a5b45cef42b78e51f1144b2e72e326cc83c996433c6c565d98459c4a5258c9615684395e478e9382b3f7cb052a68a9d3233e19376c7878e0b0d1b8308f5b98c7695b98472dcc9f44fdbe0c352d8c95837bbcb4df2c0cea54efe7bcb485919e79cbc21c6d6d776ca45d4e158dcfc1b951168b45c3e26653d52b5997c78c68dd176161d2aa9676667b8449a219f42b4c622669d3f8b25d61f636b9a52ae9db50e20e742bcc2ea2935f92ff4e6c6d5c192b6ad0aba0d1aa30aa9859ec5a4ad2ec9b8a15342a160f258ffa14868fab6c262f8ebc726f0409294cc193789cfb2496671426ffa815df3c278d4561d6be14cd721d0ab3fb86b79d30280cbb1a3aff423dff9f308927ce76cd5d67513d81d85a2a497ed90993de3925ca09396138a14a97286a3d266ec230b2dde52a78eda768c2a039dea25dc98451ad24b14d0e13d673983049aa593ada9524e95dc25426b9698dbf7852f7963025937b74c931ea93ec2b615c913fe9b2f69430c8adae97312df2a7491864c8d36162f9e82849c2a0f30925679c226178bd14aa5ae4ece99030d7fa96fe3919df9247184f4ac1d2091fd32bc81106f9a943fefd4698729fffa829ffa03a8c305f8559524927b5672fc22c5ba37a4de94f232bc27049c79d1225ca25d1449892ae1acf96378b1311668b25c5e7d31a26070f617c1344e81acd10c6f730f9de2ff7655808638ebbc54e3a69890a214c3bd77d927b83309b6da5c91ffaa73741983e97ba19f19e82c80261fc5075f29a00619273e4b4ced208d11fcceef5726fa28b6ecbfd60d4b1f39b37257d30eba9922f5be283d1a37a6a7153a1b1efc1e8b167f23d1f264df4601a157c5fc74fb414e5c1d8b19398167db9d2c18369b7cdfe04f16addb983492a41a9962d413ede7630c53425c6bfc9aeb7eb60f4360b1b3a9cc7ce743049522dd9e87251da9d83c9c7cb6d3cc8d0a59483f9a48f8d6725a54f308983f9acf42529e7ba9d96c0c11c274c586deb08cf923798e2a7b648ebd0ab2b7183c1deebb2b5dee4d1b7c178727f121edbe48fcf0663aa7e1215a4589a246b3087aed3ad38174bfca8c15cad5a925ca72e79380d2679276b0861a73b321a4c6a26c896f4d4ebd933189424992cefd3bbf79ac124fbe74a124fea11b70cc6b558a3d39d49926cc9605069733be874694c3a06f3c5d0255552c560d0be6a33b94bfea40c8329c931a98399b42523180c172ac7afcae215c62f184dd6091aeae20573a938f92e899f59972e18c74ddb9392e682b16333b7b65f2dbc2d98639bce754a8fc99e212d28aac4ea9c9414ca82e984f5dbdbf8981f1618f149ddae770593b0ed93b5d5f52b59c17ca32bada25f0593202ea782c173c4a86c9772673405a3b7578d2993b39f470ae6159513a7e72898edb2ea6e7b0eea562898a414ebe27a3b74e709463349f8befc49ca5e3ac1a0224dc44ce8dd49698269be644fcceb30c1d8fee59e4d6e0906b7b5dc2657824105f350b9a3fac95fd2a5c4f0d5d691601a1343958ff224fa2318d7a49ed27be249b311cc225a642d664eaf49110cdbf1b2441b2082a965946c987ccd7d8661521fd9fb310bc314ba9f82d06e300c4ae73be70e36304ceae941ed75fa17065d5ec29bec51eaaaf685f9353dbc4f3e31e1d40b83d09eef463d47fd122f4c6ede229f4abb30e7281152dfe35bea7561148f2de2d299bc26b9309c38a3623eef58d2716190bd94740e2a26e7b73089271f27f76c9e1c5b984289deab9494a0e3a4168538215a74f9af21dc74666152fad1439778eaffc3b2309d5c4a4f28d14ac99a6361924fede734f13dc4ccb0306988e89244db3d09f91506997982a50e3acc8bec0af32979abeea378740bb7c27432161bdbf1e23f668559949da07e4fedc98d5761f0d85f61b6b12a8c66b7fd9ed4793a8b5361124df94a173ac44ea830e9bc2174cebda6bf3f85b1f5d2b6ab73fce2a63049e17379bcfc452d2985c1d3925612457b3e8714c6fb24a2a662e8d8e951984afba6e9a896e26151984dcc6c8f8796953714e6fe93163f545098e38890a74ac5954c3f61bed15352b985d2997ac2e815a6541ae9a1f7ec8441ccd3d8e7ef2539e484313fa86b988af893b209b37934b972ce7dad451326fffc1e2dc9b75b2513c693544cea6e3161101df76e2cc66f6b7b09c307a157d55ae6165b4b18c5342b6e575b09f3c9f5cf494277f4244a1854d33c45578df2934998c4dd083f3d494c9648c224e79294147ff6a1a248986f54ba7612a9322248984d959a7ffce8234c79fdac93fd59298f3ac214462bed98db089387fe8ef4bf7bbd19614e79cab29f1026e9781126196276e76e4395561146cfe19d93a096a6dc44983b8efef4d34b49a528224c79566d4fdeae123d3d84c9a47029a7673a7f4a0d616c352fb162e1494f8530ec499f922949cc8612214cf395aa4e272955f34198444f5352b092bcca4410a65c975573e440989429d1d9c4c6e70a02c2e0167aa673f433cffdc1743aa7e7b8f7fbc1e871c2a81cfc3e984a9fbb5ea9124b9ff0c1a442cdf8c79cc9c1640fa624ede8fde59c28213d18b5f5b7848abfadf3609252bc8b9573923d45f1600c0b9e3394242a32bd83393fad4b8ea71d0cf65fbad4899bce631d4cdbf61566844807a3c9cba2ba2784bc0bcec16039d485aee594e5827230452d3d1197611c8c21d74a8558c93cc1c1fc995de1498963e26f30a7d2bcb653b7322637982fdc961c3daa93ba0da693a4a062e3b3c1e46aa944bdbe06838ea272c84f651f4ad4603a9d4a5a5c57bf1aa5c1d8b75e42754b3446683086297964bceae84f9fc178b37fb72787934cd80ce658419f779bf8f56d19ea959155eb26190c27ad6c2521945b07c760ce26492943e59294876230898bb65ddab5245bc260f0942264e32b603099fc9e27a712d47a2b5f306d8a92b564cd0be631938b5de2739a5d30accd78a5e8f9e552850ba6a463bb5ce5c773d2164cd17faf6543e54ebe161c13e24a84e85930b52561b904132c1855f57412f4be82f136f4dd7bb682c994fa24792cabdcb80aa6a444cdd968a960922cbdc8bdab1cf64ec1f8497cd3a14499c9492998e5ccd24f0a2f0ae69274d0974d2c39e8efa0600e2ab3e4ffbd53b47b8229ddcfe70473fa0d93562f4e1c53134c722fcd4305dd9d9298603ae531d7b4f6472d2dc164312a5f36c92cde578239098b9d3be59360d05195db4912fb794782b9e436314d253549cc8f60ae921e23984dbc8e2d2d39e92298e7bc926ebb35400493ea9c9b25499ea4131e865176fc5a6f45f8bec23096f814de540ed7ef06c3a4c4f8e5b91418e68ad721f6dae92afec21c4c5011ea74e60bf3dcecf75e28e969b35e982c9892e4cf1a2f0c9e6f2f469e1445671746713361d2e4b9a095e9c29c73f4b4123b77dc5c98c4f6cf5450aa9368c285c94ddd5daeb5e0b3dfc278325f9432496c618c193f497ea716a62bd9430b9394e409aa634791a69e85792d534f5c0c6d6acbc2246527e59eafc4da3a16c53d112ccc39bd63970ad1d22b4ce1db04ff5322d6e20a83da5daa133ae9cfb81526b5f5f46ce9c4cf9215e63013e7250517f9acc2242f594a19f27bb4aa30857f7193b62a76f052613aabbcaff7b658428579c37e4e2e3bf1ec2a9053985408a56a7e4a7c535ac282278098c218a3439b259d7545dfa530aa9d2a2528499614e6718bf96dc2c74f9c466198b9d8271e2d0771368828b074234ede791e2414a6a4e4aded3e0f3dcaf262a05305105018a4880ea7af832a9df11326292991dbc9e48bda314fac16aeabc28a5c0e75cbbdefa93eb21a6261274ccd6a4b163ddde66e2e5677e91fed9d6eba7b018413261f6d1eea79e46aa53b4036619204511993921c73d0a0b1e371900347ba62d79a306ca5f9e9106a8d35342e904c18363b64286d2befc191209830850f99eaa626d6a7cdbc8441c5533c71d23f081d8258c230d7da6d9bba086ee0c8f101b41d941c366890a103f700520953ce9ea07277892cb15f4a98c24dda9a947f12a6ca503a4b5e93244c579b8a7d2514020b93204eca5df112e49fd22b0c63bdd5bfa9224dc97185791cb6420db1b895bd9d0d6185495c45286d411cb20a83ab473b191796d524435491b9c6cba57bad6617920a539d94546fec8bece4a3c21cb236db834af191f914c62c8f7721a30b318529cb7df5ef8d4a61eee429a824550e290cdac43e6182ca25e5da46618ea5325ff254c4bc22428828cc55fa63ce4913cd2c2914a66a8fd62aaaed3bda164240616c0bf2629faaa421e413e9894e1846899e3dfe623d25c91a6b3bcecd08e1040ad98439e3c404e110030734c6b05163870d1e68e2ae59757b7b17adca2c8d4dcd3ecb67e7f3185f43471964ac65c2ec597bf7d9b36775b0c69a8d622308c184f9043361dab9e48841e3737076749b904b184c7f955c63828a250c9f3c334d3e75250caed9b762b3274b398450c224acba4af01c9a8439fdd7c97353265d724324611cf92d8f26a5b9c51123615ecf5d9ec4cab549d2658440c2145465bf99ca0e7bf2904798938e63331b2a58678707218e308ff2ba8f2587ce277a84904618bbfb3d09b28475fe890a218c305ac5dbef5e894b3a5b44882230118888cbd5f2e9d2f9935cc8215071abfaf7002c21c410e67183904298c711c2e899df265c86ec8ccc46c820aa3399f54a91ef0ba7b684755c0f4204611893ec6dd3f37277bd0b84f1c45fcbebda3b407c616408ad5fe5dd1f4ca14b647e30fea95c7292cdbceb83b1d594f49177f2f192dcf1c1e41eb5776486eef660caa7fb52bca44bed8e777a30a7b314f772d0eb336e481ecca34caca4c604dde9a329383c989358752525712785ddcaddc1d42b4a50972127cb566707f3497d174e9c0815c5bc3a18f64b5e5a9354e5e860eed49bf326c7b424e9949b83c1aa837c52bab46bfc0b918326a3dc455a546bace9b09197829038186fc4a934daa40f0ea6b5be509efd69f7a37b83f14db678d95343bc99e5dc602cedbc921e4625b3dc43da604ccfa962b28d3ced710d6183419bd986daf4c610b206531cbb52a1822a253ba506838c35e9fb96f71742d26092be737e34157fe6e25c08418349d05b4a49d79d2443c8194c395f3459ee67fd2d66216630552541ea7d09eb2db98494a18490c1383a429497df55563a86e291831031982b7b8a5715461d48418484c124c949faa0157f08184c29d5be6708f982a92cc712c43ada56aa663a42bc60fa5252647de56bacf9fb0d1c39129f0eb3414817ccf104ef4bd29987102e98e2bb987cb1be6209a58e2d98b6d479e92c3f440b9b453bef2c4bb26b921ea1521b92059314b6b3a9d8cae6af3970d448c6389fa3ac48108205932c1f53bdd2bbf5c3902b983dd977ccd236ee7d9f60063470106205b3575fba684a123f992e86902a9844b930f5df2a71fb0fa1823955adc55a25099982393c55fabe90140ce3614c1a59898241d9f5afe9a1600ebe97af214b4f3005515e416ee4844a8ad539bc859b6092e307f9a5cd6782410795a12d993c640926419a509517528239b5dcecbead6e7892604e56f66bf27ef04a22c1149bdbd6c14e5cb31cc1701d64a629214a2ee64630cd251f934a8a7a9914c1d4f76ef183988d168510c1a04bc71813ef30cc713e8b3a1d4a5f528561befc2154d007c398e9f183881026426018ac840a7a964b7e619091a7d7215f187f2cc583b43659fd5e98e24a45d73bcd9bbc30eb5c72cb1eda8529943835ad756130c1939b9a3ab991736190a332adfa45b830e8b6869b9436445de816a6f5e829af6f0b939c9fd5222aba797b6a61d836b32a25589acb0e2d0c7b22e45b4811aed6998549864e37499f8a3d4ab24850614b8832752c8c6582ee9e64e3a24b5818bcf4d77f986c4b955720c7f2ae3096d80bd159eb56187e7f2f457e49b2b266854949e1e492bb64152653d124514dae33c9c3aa306865c96151bc63979c0ac3fee5a8a44654984e5c59322ddf2d1e9fc224f3d624497df707159bc22426e6ceaf782c41a9140659a3044be984c95393c26022cfe4d3df8ec230dab45b25917752b6a23009f774b1846f43613215cff944bdf594406112f9bb2b96ca5452fa84294486bb8ceca8be3d61101a5b2e6a3d4929d44e98d4a69da493977668ca0973105fa2c88d36612c179d673e7874cfd184513b5a6fe83b13e6b294a4fc7e1384943161fab951979dbd84399dcbe82d614ccdd2f1f2323fa795308f9fdc62a29430cc9d5a2d53cb8c4998c43c31badf4a499835eef3c793c748983e898eab13724d9b20248c72f721c4b5f8088386baf1354177db828e30a79b8b8c88558ba146984ccb96502578da5133c21c2bdcff9cf692e35c84e9c33ac9498a75e75714610a17b467d3ae53e74a22cce1aa3f095171f4fb8830de5a4ab1f52af3f24398e4770ef5a09d4f7c0c61d8b8102a7bbb42187d6eb67366593cb1238431d4865a5907616c134f96a70a55724910e69254092ae951ffe1b540982ffff565bf29ed016112c5940eea2e5495e80fe63422eb722d9f20fbc1e84912bc64cf2528d1d307737ad5a91c2c0fcce083e14fb6ca28298d050befc1e0213d4b96d856ea473d983db9c88e973d992721cfc883594f868e1fc69e810773fca53d593ce7ccb883a9543f2849d81f4d0bd261872a4ebeba92b99cdaa68852b9c429b994c74b52077350c24ae45a34bcb374309e52e331a48866ccc1ac9d9f6e974a3960e9d5dd9629a62629eb51b1b784b766c4c19c34c7a41aff0a1c3e1346a94fcfd68c37983c774e759e4afde79de10673ccf582196d4087e5ca6f67e849b2a1b46dbb4ab92c5aacf911f24eb86b307a3a0b9de42ce2abb621cc5043eea74fd08c34984bd9675b366d21c734030d067dd2884add396730a93df30f9f6798c194b6f2db3e7974b530a30cc6f8e0157af1f3ee8ccad0c19f3274608a0c0611fa835059392787f1f038397ec6188c7de69b9fe25fce1dd631430c5c975e8d4fc15f4187c13c66d9463e3d34bc2f3f980106d3693f4b1327fbb8858530e30be6b42d9a5e9d448c6384195e3065d3ada44ae77b13951865388e2e98f472c71093a48f4098c1057392fae40fe7962d98f2cb7e50923a9562e533b4601e39230be6dd10359f727606164c52e59e585ef5a83cba195730a55fb999170b0a33ac60ce13e4d689d413473e560583f0131595928965273f39cca082f1b4f4db799831852a091df35cab9682397fd2740e33a260f6ce2baa849e9815ed0c2898f2c784c6b0815406339ed088d1a7da3c5f0788194ef0f3093aee826e0f8b91b209a62046e8c9d9c4bbcf3899c1044b4aa26928396ec9e58c256c767529432c76a7cac9faef9736b916c3c3e36628c1a07b37f34f94fc1f4c7c0677a7c4d0bfffd30c249853d49b7cf7e28c23983bfcd34c76898bee8d60925d9492ea6415790f17c1b0a26428499ec9a33e398308a6afdfddcb7a320ca397b6b82e370bc324b645b9786f6d20182693a794163db54ae2b20160184df6d241b9a95cbeff0b835afef872c28c9e92fbc218ae3a424d1e373928d9402fcc6f4975d0a2d793cebb015e984dad09d749691726dfae941ff94ef2d2ba30c8d930418d3a37900bc452b9b9bc5cd8ce388d39b962947cf9bd47be015c182ccc4f52bd57d2be85417db4d88bf15372b6308599137a746fdf956a61169d334e289f16a6d0ab5b15f92ccc26c5678d08fb349285b9b742b34b74ff8d62611ecf7913afe4b39561918e9e8258a96c7a85c13a8c56b2d615c6f5dc5fa2bc28d9d35618dcfafaec6207999315062545d997e5925236d32a0c335796f2cdf28530a9c27025051d37f9bec49652616a0d21c46b899656255498c2e5d4a293f0a2e2e91446f75831d174e52749a630959e5bd0132f85e9a493f36fe9b229053b7af018180307367420c0023a30f062a0b3a38c1b0bb08000747c8e32769c4f341670010054c00e03671828572781f4c714904079e47a58040a10001f200c2800003b7494b1020204e07170cac0c118470c040840478e4fca701c39c848800974d820e3282000b5000000000000004060c78fb143c7efc000e2781d870c072c4001a04307f2208000ce8ee31e0508c0d9711c470e8f030060000f48408ecf417276e8a0416301000840030e506cec10a3868e438346024664516cec701c376271801158141b3b7660c3cba041230123af308997b19cac4d6a2c9f957176e373d0d8810da7e1dfb6630c1b2a1871c58ed7d10a326eb0a2d8d891a3860e3168d048c0c82a0a0d1a0818518501465261aafe9404a5525b5041541874cb47ee53d029a7ce298c5552d0b14387d27fddf81bab23a630f6579a18e6a6e4c6dfd01b7fa3e818c3c68e1c2f860d326ee04876a414267b2b4168e95c6107525082097c600513c0b4c408297630328a2a9e347d9b593a29f588280c3f6ba3bba17bf2ec91501465eb33ed6eab4366fe53b6ae31afcb279f6006345a30020aa3c89d3422de914f98f4a7142766661f58c10476f88003628c78c27855662a9ecb9cca6a8d318e182928239d08c20827ca9da61ef216c6debd3e2ba983914d983d9aba7f474734a1239930d7fc968c60c2542deaec44852e610eb1a1e26437fdded812865fb3244fc85c1939691d64e0a051239518a144625d9d7ecff12f274732868dcdc17918ec24cca7935c9a312289a4383a8850da628f045aa62d972aca24198184e1fe4cec77ff8e65a547184b0e2b1fc654ff898f71c438578830e208c3dced6768132d97be6bac8d31d208539cd359eebf540e96c30893a4f38fd2d14a4b32f911c392df412f22f38f1db34eec5f30a20893785151ef36cbb2ce35d692df818e44987279282588f498f2f91a6b85630411c6d17b625c304f62091934c6c071e3068ea4588e914318bbd4c9e16ada8e114318f459fb9f160f395b71ec388187879916c2ca1baba0741ed558eb010e442307c91103f58bb10395a1434f30031a141821c48e0c42470461b4b025a5b5cb072293adce0a6336daa22a1e3f48d33c51d515afb1f6635c937123f9c008208c59f2e82f5349237f3066872c31cf84f2b8c960c40fbba789659ac96aaa452dd1e4bd52d92526df69a40f0613e27ced83b769ab4046f8703546f6701e7a30a9d52a29d4739aca96913c24ea34de6db4c83f713c98abba54f4bc0e1bafe3c7c81dcc49e486507a4eacb4fb881db20e5b3618a1838eccc1a42b3684475f0ec93df567ca3f290e066182121c8c2596e91c6e724a42fd6f3069ef50f217773798d4e8b96c32649d9ce36d309a945298ac39618349ca8b9ae07943c92d598329b88f7f882f2b4174d46078cb1e2b6bab73c99d34984cd8ebffebfbf0d14683714c54536577e964eb33dc88190cc273cae9fc16af4cb60c261f75299fcce40735194c51d394d8b6854a151c4331677767df2e73312c05252ad7411e11835145f4a44ec235128632028632f2851bf18249f79654763add85d26da5e4e908174c693f4dfc3211e4f81d22781ce4781394cbf13b6cd060640b7b6ab3b4fe338261440b86134d0e954ebe9dea932c98e72ca8dabf207ebd62c1ec95842c31d146aed0a75d34111d762b182ffb7eff08bb0ae63dd3714a4b72840a26f910eddcf1bfa1323205d3c9572e77eebbd6272998d473e62d892fd9aaed228c44c10c25ea7b12e4fa0a05bbba4ad6aaac5db347fbc8e9850d234f308c52a53f2b7a18f39213cc9fdd3fcd8d29b74ed204f3284950399e526aee3d4c3076a7f512712657b67009461f135521ef5182491097d386de175d79adf182912498a229a9ba62877eed7d368204f37deac81565795e7381c3c8114c49e5af133dc95b67a211cc1d33faf31e4fc7915d61a408e6fab7f4f5e291c208110cbe774ad67f7d18c64eb1a4e90abae6a426228cf455126b44f6a41c54826190bf664a78b8458061b292b3437f1b37ca2f4c254fb624c99a2c0422be3095d67653ffa79467d78be4a4f465956c114a8a8618e74478614cbb4cd379ca1288ecc2141f43eae97e35afb8c61a7b40a4fe8f53be7aa1a992402417c6b470c19274299cfc15eb20820b93c679f796f8262fc9ed10b9850d115b5c2d54841629320b7369e734694f1caba0d31c3bc810914535f3157761c1da2de6a28d4ee93d9938a2f1d658cbc1694189a4acbc46c49f4a81857135dd6396506a59ba2688bce25c711ead300f11569854ec1c4d4b2ce5e5db2a4c823c9d2cd5afaa30eca99deca1543fd625920a115498c44d999c6a07955b899cc23c4c6192e2f8a8f47ff2521c8994c23c48611ea330fbe7f73529b497a093444461927949edddeacc2733147a885730eb9275f9ed70b97f4d6c2e020ad35ab61c1d4a1d804c887cc2647625d77a520a15f4229e305dea4ee25d4ff68abd7e42a413e62d69237f945b9c688b70c2d8bb96a4db988aeae8092012229b305908176f3975f259521326159e92fc1d9bcfa7cb84c9e434492c347e5c344c986c7b74ccce2988e5942e442e6150a29efe2816114b183f653dc4dea6758e8954c224077d524a822539c93a11a184f1a472511f4a65adf6e01099843975bc74aea39684794ecf426aeaa9309526914898ef76f32c5c229030cfc935a52f3f970c51e41126252bdfa2c77684c136d64f9576451a612c2947fd421461449d24a1affd6974c6b07123c7b7c0078e83038f6ce44874bc07506411c60f192589bc8c4f4f22a20863a9fbad0fb58b24224dcb32266e15ddc275980a2ac69569ed8b082288306cbec941a8cf97bd43987349d966534f9785dc10fe8cf8f826dfa4102649a7f49f7c564218e7efcd4ef6141984495b69358b1f15dfff2208e385f8cb4edf25e56ce204914098e412c24bfcc9950208736fde88a648cb1244fe60ce275a52bc5c4925bbc50fe60d2d5a3dd5a95ed12929d207d3b765653d93b39ea8dcf1c19cc39a18dbca692e28ddedc11cd277cbf4cbffe975450f267525c449f7db4bfa532e0f86710f537a3a3a05113c184e569ab7f8bac81d4c5a224aca88a99ad444ec70b625ab5597f30a9be5c240a40ec65ecf397a10659e318b41840ee63a759dc49372ba5451292273308d1057a664b7e79b89881c4cf1f2838e38917b4b6986834988dc1033a954d02929f206837f86fa6c4a4ec40da6ef58b9cbe28a5610698359cb94a84e556ddbd12c88b0c1e826c8d2313efbe7cc4e640d06a584d89a245d4cbd2435984bcd08e939e55fd489481a50040d2a72066377ca61ba4e8e19cc29084f7a52d2595cb63298e49c4ad27fd16c248890c168a32f885d16392a976330579f99b47f520a27e445101183a94337f45f2f27059130984cea6cf392b3db9e1087200206d3953c7aa753f8af245f912f18aeaeafeadcbc238878c154aa4fde5b5c184b97638248174c7de26ef7f58b70c1b49dedcce494cfe1df10d98229a83939a6c7490ba6cf355917a79205639a6b28cf9a08160cb3a3b488e65a0221720563b9b5574a234f9424a714112b98070e44aa601e2f420593b65827c5cb39e9ac1415884cc1203f7f1ae59504e56a12838c1b3674f00944a470ae7a66a9d27f0e328e05225130d55f5813c363c4ab480c326a243bce8d7c8108140c3662257aa7d26953167982418ef00d5bd1151127985b44259593242729497d600513d80d8834c16097a4648b30216b20b2047352d663a37b6139f94a30c992c2a9c8e734de27c1384a1056b284aa8d3a418239b5727dce614b1e751fc1245faba5ab24664d6e0463072b115d725b04a3e8cb9eaa388a10c198e1e9baa4d9cec15b43840cc3a85b2a3caef6981027c2b0c45c95784247c34348304c9653a82badbdd793041886d55c933be83a3565fec2606ff36549bf5d5a2e0b21be308593c3782715bb905e987b9497ece085f0c2b0a27582d0bf3c3da65d18bb042bc982858dd35d1706a1f565ba9e5c984f3095e41bdd679260e3c254b363929a249d720f86dcc2244449c1afcf6d3d46b630b6e596a07feae1e3b53029213f5d57a74a10420b93508b25f9e9ab9e3c08426651d97bcba5fabd9a6c9fad9e105998bcc6f4622407426261028bbca8844d86c202712c14094522812814c549de02a31308001040288bc562c1589c4792a80714800261301c30301e22261a1810161c140844a27018100a05c36030200c0a868361704038d72bce01d27eef3b00b85f514892e958453c11e6f509852fd6ada4feb37c69993829a97f39fff8442ca5d66769eedf13552078fa948f347755964205c2adeec70de4a7bd56f01fedc60a52b8fe4e865a2707a21a7b1b39cdd7739a0f21b1d04218dfcbe703be4b8fbbe8cdd5a0edba8dfe5c5052de871837ac68b65c1f84516301e64f33055d564e4841430c57abbf30a7111465d1855cf229ae23dab1f9d98093a221048ed6d73c2b5e2ebb173b4225444b156c07728f5cd09f9795bd4d32b89a3f3b4ab83a1eb80ba8c5b2a2e6cf5c80a53a9caf80c1c9c0420f93547c67c43496e2e0b159cf66549cbc5d49d67983af744d3a9cdffda91a3839816ad87a60072c2690b22688df258f08ae08801288d08dca75a5112e5967a1d9c9d6ecaf2ee9163245504f4ae297d8d0c3b23ab354be07a25a1b7dab9f1546ea510b691178ff3ee3dc69a6feca02bbb77ebe8922a89001681f48392cca6e919a45ac28f4064c9315efe2e506ed11eacf4fd913d21176239fd38b5c454f1c2feadcc24b5c09a1fca23267941e115c686c366b51438ee787ec7c218f2f3334549a06a5b3d5297ab3cc66069ae4fc3b9c2856904361e69f3f9192269c106284cbfac206694dd6cc7582c8902e8b7b4587b6dea3fdc8690b623476e0d197611ed745fb30fa1a02b2d5557aad99f7e96790b8a43b1d4de056bb4cd140064e4576c393363480a54b0a490963eacc1e86f0beeca0866a9a3f9e9092ae474381d56ba45a8b5b470585820a3175b3866719e4585255411d33da9d9320e083f3a2fc01d9d0fd3058b1216ca0f5c15466994ee37c9de8827f6684b292d5f2eed7a2f479eefb96df17177a269cbb261c6b1d99ccad084f715837f8503afb878097b7499e7bdefd6b8730ed378efc1d2046144a94077ca6b359a33a9a269fd18f1deae2513462894373c94810ad9c2c4ef39126295a5b3bb99471c106a55a96a996a420d9485ec6a3f893bc554d13c3b31a8a2e74f3b374a7edf7dcbd92f2c571414c91b724edb8b56d7cccc9dfab9da7175e40b5c3a22b8e584c64625297cc92a5d12f59d91c426cdfca70cea6106b4bfc77a09ac31750d0a815ec275b6e42ee997396bd68c608608629f38e7acebdd0ee29da536d6a57acf58626520db54e03d74b36154003c85072a6dcdf2ab8e9bdc2728a4c21e7ff35af8f56384f969192ff6501702c45b38542f1dc6c0882c04bfd34c300a1a7282cda3c5084a84adb665eafe29b4619c726062681da7b04edde8599eb04c913b24181b00c63eb24d0d89a321270d0576a699e82f91eff82abca9d752db3659ee7772e58cc5cffd2e7db2df8ec1f44bc5420613316f34758110ef78e11f4870587f55768330f4157bf239b242cb36a33b0d8ff0d6046df21626fb402afc73812cce104abf16a4b6530f639884be0132a5b791cd423262a94c4e1c47ec56cd416eee1fe8087f1310d3bafe70d5db643291c875994f17631c1c2c6635a0e35c5f31a513bb19d26a29c40f3ae5ee0c28d5d63df7e932d3cd0642b3e863e90fff9f3369930dfce206f6079e51b8ab8a787d7238cd77ba757050cbf2053b644689cefdce821a4096d58734c50789273b0b5ca466a83a411d353d9ec2a4209b743371ab4491abfe2e64ba060f0b9710b929dbf00f28736fd5ae23514ac11b73e0c94f863477ed0ba0a83f37827b51359469559e8841f6f32d1398fd897358baa67f858de7f406eecf2deff960266edaf14a828cb3d3cc829b26b45e008ded1282fd53bfb94810de98cdd7578add51b674a7580df293d368841e71d9603f06c9b58ebf861829e73949ae2f1cd63050defd4589cf707aff9dddb41796b22ffe0a82f5445cd59e5c1c637364790f863c091483c61de7dbc347e1995182c7d27826b54ad434161a85876c558422a8721f6f16c2b916f941c337c725554cd5d298a28d5ea7eea5398c6af90ce2edd9a3df4fe778163699c87c2037cd9c4445b6d2d37dfeff0ddafba6d7eaa8d91f17c6b2751c761dbc7774f54f32bede8981420d69dcf716543192848fe20e80508512d052599e96bf00680aee4bd3805a81159eb5c92643480e6eaaabab34b43885cd099e6a5449984c1a6364fbf728478630dc8f177a6f382f7587166162f829b2601c9939b37049dc47f10a79fe074ec8e70c877f68f0c7cd07ee37a01bfc0e6f36807b9da112ae79e72f453ee9f9680ca7aac9caadac15c2b80a7ef8711ff954d289462c4544ec4a4252c594faffa49d4346404e2bee859b065bd82d1064d107bf863ff7ae119bd765a901542e702974869d4611580e09f6c61649eb00e1e54a9c267989f713aa6511c27c40aef6beca967cc3bdaaf4a54a327cee306b7697400b62d2cc25172da176b3281740c0531022a6236ba6860d074a4207132659dd70f97588c7c142585268b6611c86d5e74ed83538a11e5faa0ffc71d444630bf645dea15234430844d183182ef69b5d5222f15448dbf63174b00001d38167758450611487cf9ef9e8378d0af1c7d52ed9a8a40d6de75022cbb1c9e90fb72072e490f18050753655e36073f7e8c80452d2e87110da03808800f4ea369a594a0c08b90435dcb4f97136d7f2defa2ab168103a33f723e3b762d77396b3ebe92e88faa2491a3c222819b1f41143f3f9083b353e991e563952a3bfbea4f33ccef436edc917ea9d26ec2f4615c64cb43a3c089f013e0e52b727f6d4c3109eca2a26c4e5a40242aa93f1345bf8d4d0a483b3b2158f91a110abd60d1c705d21c7b98dcbc55a326330a2605aa31995295aaf9781797b22b15ba412dcfe5c22722f732032b8a5daa5e7a4e5c8cdbe046e3e43a6580fcc8a6900726b7f609474efc7d0eae89e0c768dd28920ec504fe5ee0055b0bccb2ef17ae5cfd1c0de09be413aebbd6f7a5f122702d359b85dcdf84a70e5eb3ea5df2a9f9733d73bad765dc202ebef2c7433562166b1d42bc4c20ace8bd951990ca5f450f1106fc28891f9bf3491284dfc54afddd2bbf0ca04071f5293cc6a2c57bbda040442ca19497fc5e35a6b057cc1af3eec5c5623c008ca1c5407505c0927087987b5669c6bf50b66ab40809d0ab4b7abe1a0ab7d1f5f524cb52cd8826a68f23f5e221f65894c00782f598327ca4efefdb49192bd5874c3e3f6aea8499b475b85ae3ef7ab44edb7962b8dce476d86895b2f77f37e46e5f2b422698f93d131e1ad861462ebee61e34b5a1db93ad762c1143325b79a8af4e1152a4c522711f5c1852dd34b23b650d1eca3a66b99e84600ea141634eea15004d982935a73693493fad6543ac344a38007884e204353070f84a4addb531c8933f8b5d7623c08b993c18fb4be5a24d5510d5cac3d2a654f44288ee7c9217ccd7fee0a1a9a0568f8174d9aa901b3bc69270a4363c822c778532d025d3caeb03ee49f03cda6dce01029bbd5a89bf6e6b4ecdd6e122ec0d089c71e78aeec49defbd8542c953663be180f13176e54e2df4f56b621b499d9c8374895ab2dd66a892eddca1bcd823b8ccbd06b7f3dc4f382be151ba4f063635f411ab1637a9dcc8343d7581224794963cad6d7bea7ca9459dc185943364048bb12638d642a78e22049456c84ad5f819aa74fa8b8a26e2cc2b7ee68c08e0b03d8b9011a084d3603d5c66051e56440f95f377a101a5e9f956184c3266bcdf81e11dfe30a4454ddc8b8692271e8f7f6b1ee9a9642d79f5e29ab2cc77e2a06e1c9a1318d1e4e0dc26aab378590d9ae82dcc131ab7aabd14cf3bcc01b7f0991b0db060b4d4daa0118df6212d8a029c91b79cdd130f99dd87a845c220e5402fda990c3915080cd15e62ad9c971b4b1f85f24eb5d18b7f03a129db6d890af048c062db80cf8aaaa3e3569d1295a5cac7b48c0140453ee7a0883a3ee1e559377c97f4be200a569f6535bab0765180877c6870480a2b27574916919c0f42579d9d87be55b2c69941902f75bb0522c68c244ccb7fa469520ecc49dbf2c5f21e57572c8d53953f3a4dd77ba40f20caf009820c831ef7240055d8e23f6df7b1d217bfcbffcc781d09af4d8a3042b2b2d4495dd4f663a839944471a5cb6e22168651bc0bc57da031ccd2624af209394358fae0258712066c4d417503a1c7d467eb4a55706a3628bbc9c199c8fe8454d11bb9300b585d23ea02ed701a820d0f72c3a5c0e984ee9e5e86318cf6bcf1180170a484a576750a36d3a3ec24b81b16a0fc75adb90990c77ae8ce6a239533a0732b45b3341343364c1b0a0bf8e5fc342c8892270c932971ff7cf19dd4b73844185915a6e5b22a0b779ed805194c9593ed456419dcd1b67447dfcb09b342ced21449b9e1542a95d8fd7998e00077edf8ae3eec342bc72b7787e5929b4652d0fa462f211aaf31b584e85cb604be2ab6f9f0d4b663b8e3671b3602d18c231fb1419fbb0d5c448a25fce60e5252e5a5dc790e000c5048b76988f32475faa4815598a8672a39cec134be4283533d93c86a86917e56567512464d55509d387b2a229ca90159a5c7fc0999bd1fc01db1081d66c95472674f41c6d6ac45ada8fa14112c3fd03d96fcb43657e87648cf92cb467c4bc626e2f33a02597c39aaea18882b6911a87de7e4f75c71acda31fdd3894122c87490bdc7c955a9dba4e670d257e91c40608992c17ae3e5ef8a78b1b71c6d2964ded9e81d82ecf8cfe3979fd550803ac33665b7b7c0421482905c2a640914f81defa09b2fd1c8dbfc538e9ec473685462968ee2a76733a4650450806b943690dc056a3e928102e62a95194cbec13c1c0817050c40518e12b9939f2012c43c43ce8242808934c4be4e050366ac0f97f630c2f977762f439e3c8c2658e5093748c4d9d041a637a0a85708a5f69b53c6a96e69f55d6c7d17cfa951147077527eeceda06695c58b21b82b67c8ed511ccd040c9a6177aa912ae7f752a64548e822818aa540d1f82062a970e4b3ab557420ec31f9382bb4d8895e4aa08d747ac8da75dcb6e4755984c4255ef08568816f774b0258b3f79bc738a0caa082609a398a139f2673abefca59ccd5ac600a0428baed34bd84d9b784c4bcb803d96a86337f9ecb3de64e0d5a6f9d5b2e2379f2a3ea82bcc1cc9a4b37cf97ffe25db81efccac93dd706317d245ceb77aaf433b2404d8eb51bf09e09c78adc2248695d1a461d40eefa4878a03300b5e5a683e11f50d6d15e9717cd34d8770089e9b5a3eaecf56de5e8f164291eb3fac13e26cf130c0c62082b3ee1455af50ad212737974435e78972f11cd587c07cc7ea24a6f3aa382375152a83191fb40780a56d43fed559e88fd9e15eb781db1a2b85e748d6659bf0971b2745e531e53d9a34c82d5ad9261f04e00292a2c15dd0423454624d34f427dc7480f5814e86ac82f7c101e014238ca1cdd84d918c6a1d9deaabfe5b2881f8e39536aeff8af171a06da130b8807f69ae243cb0ad29429f98c8fe6cfa9c076f72af35a8a18c8d7c953f20dc83c7f98029e8dd83473a4c8f77e9af0cc02ed643a173776d9acb7025f72a40c51ec25301d122c021b9428d4a8be54cc7081fb932c6cc9ffd69e69a105924ab708e1f32254a658b9280f918b80a439257449726566064630389b456aa4be15d0b0ef86aee0f72579e4a6748f78c5b72e14a61969d5ee344b098c0bfb674ae4170b8008adcc08ac8197af012570cd7679b6c872cca65ad24f40ad8fde0036d6d2953e405b4b81aec8fe5f26baef852f521d94ddded9d1291fab3e2f1f2fd275ef4bf21ace4e61cd8cbacc392a6c06e29d28e3bc5d6d65458e247420242ba964be407f16926cd51daf5b67aac4a5bc2ef1a5c722305bc744422a41f4fddcbc8a4c7ee3a5e5a980c1a6964c21d4400a70650a3a6c576a5c924bb300fe47b282d584e452c07339e073ffcf6811f8ceb7b7c1441f50e2e6336b9d9a4b1a478113db3e21b588b8f13580d91cee9f6d2585ae1e86d8c8e59edfd2983cae5f97ca80c3faaad7091a6b9c8814ed9e5ae34331b9f0d47ae6f6e0ccf74325d3226ba3d68c4e5739043d15c410148897e03a4c8d47cc070120a58c963de934184fd4f9bd503d579916ac173dde7d18476bb4bd07d4ac8e96dfc7437fb1e3dc1e4533f0b6692eff866b685f1852f7ffbf2ae2019ee923d797a32669682031ab53e3c57110acbdb088aef9f82d8a3b908c25a9bda7da060cd0be8569b442bef9f02cf1a41c97d100fd088c87660d3a0de2f840b795aed760c83ebce161606f1a2091982ae49940a36e4884f0dd990e0324b5cd204332b846e2dea877074f7b4b4a6c4a6098219c467baa7778876fcd52ab1ca743183c52609cca21fc8b55bbe1dd9565c69a3f576459c14d3015f39788f4ea8a1d0612275b366467fdefd608e6ba0748e3a4313f12782f695fd09f3bd3f2e1b1faef10a82d064730e429da5a24ff5c37b6b6e0986f01fc10e85340f6b04947f60ae6ecc6fa1d79bb361e05723854bb0d01ac26534739c06fea3848628c351881688fd82a8fd009ca37ffc5cdefc6707c3e10dcc25276a50f8ce16e6277d5943d506cb689675e7aeb0e9775428f60e417d1c4542e9829beb29b22dbe240ec5cb015c412ae3c74e3a7dfec142e2c0c7b4473f0bee1b1dc1e9565c3800c71857c2b1cd6ebc41e33a976e85d9057681ad4c5e50add5d6cbdf0435fbe593ae660c2427b9ee6b909daeba520a2b8e1cc6ebf4fa4ee83e746670efbb76e745522fc4014331064e28f717bd1ce930e72031a927089a8ebf8dbd6627b835ef7774d13d58fdd3fd4494a6e46cffbc193c679a2b527b9b00c3ceb16aba988fe067c0242467cd93df9fb862262181a223b7f2c73b48693995e6f532cbb42545a68eeab263b7050674958684ba326700a63c51ac307846b79536ce33d7229a4bd02180eae702c98a5b3a7959f6acbe716220f5a86b8c46297343fa183d0cb3a1a3e3e24e66de6b3d68da27b78576b85159c09fce7289bfbce34cfd6404081a67e5c6f28fa4420b2b33328ba39372ab5a8aa5fb27606bc758384ed701ff83c0fb2e4879be8d015206e3a7189a9841dbde58abe96762e39cc0a713c9638b4bacd66a4235620229e43efe040890febaf7790f19f179af80ee24e8d023fdedf3148f7e1b069a7ede31ec29560becdf24a2abab0cc5368582493b23f1587c372c8538e92e535ebbe8fa73ac20a6a0c93e5969b827f6737564682bcd4abb84d0efe2c8c032d9252e22e6f17caf6a15e520c9a2f9a51a1fea042731830b9c3ca53bb129d1b53f27b0a12f8b130de612bbd514bcce13f1279660f440aca7f28aecc44c47d856dd80b0deae205c47da81fc983964bf0989cba8c9edba8a363073adab7e325b9dac56bc37e5317c63bbe8b98c3fe668773e5a1baf818f66373068b901da3a414f653ecbb24cab9a85fd770f1a11cdd0d75e84ee3f22edba93f96bb337984829cd4b6829cd931bbcd5375804fdd655cdee93aa6631f9ff2b1f4eb1e5dff05c545ee705983abfec33242a10cdebf6d5c911a894a579f5063c43be06bbb2b67624ae902973fe6b07b2edaf5b7a2daf4a378c462666fefd3b1b9ffb649c62e6da6d0c3a35aef4a09632b7dc316e929129a4c265baee137b66163c42a295e53a27ecb33e21f4cd1235f18b8cb29655b246dfe143ba26ab59ff5d1ac9f227b114cd93d0632fa5bbd8caeebd6ac54c2d90d1496b49ad248b84441e21d828b0992d7c57930a68dc0932935a134d91100da224a76c2cf687b69b5ae4fffeb72699776394feb98d8edc02d2d848e7b757d07e3fe4eb3833f590e9b0f1ec8240c5d93cc52ab25e524eda99fb774922fdfc56191549a12061c1af075f53c613adb111deb9b785516805229a3b41cde2d3b3d1b767ac9909a3bc4238ba69c55228aa0457fe7b38208bbdf753b947694828f3d16598c3a9706f745872d9ce7b4c8898b440c99e185ac8db6680dbbb29d25022a93fd5d8bb98d7efcb81ebc7c70c7edb63f90d3bbb8ed4319787b5738c20b7501bec8d97964d5e82fcb2c6ca61f904c165296a00bfd14767a4f779cf29622d8d1bf29a91544f8d3ca8b286b4a9ffc786bd85cce2a0ade7d3f491896af57c1b22144623f32bb59eca872a960336bf0d25fe2a5e7b070bfd893fc715efc5be49eefb98e539aaab059aed227db8f719a72434fc01761e6ad067e0f202c72d0921385929aabb5070f75146d4c88411753d891ca9456eee3203ea69090f76887fb403bb8cfa202fe9267bbbd8e7e13d42e2d3f3b7825644232539e39ec4a591ff6c83493182a41c7ddb89d844abcdd8468010fbbccbede504e31942fe2511ae804d7b8fdf0b85ff4ed07de98fad90b94c2e37944737d1dbc41e3990bb3bb8b537be79b51a06ef3ceb7bb59480ea51912a8dac763d0e24fa6a4ce70d4e24733242f476842225711736f564913a9691960d5f0ad512b80adeb44681b503461f0139f369489da0427132ccb947afc99a2a5b006be98bf1bf9ee1aef88e3fe06e4b9e18e35d283df391ef98ee88ab84457fa74f06d442f146fdd5a4403fac43be0e4550b5b43c84efbf7a2748584af707351f1ef51222c5d09523ce2ccf2fee4db20e5fec98167eba2b80855717965c76dc19cb33edec85fa39951d2a7146ca8c7cdab9abe74acb20c1b13334337a90699ae8646283c9e96fa59859a55228bf9a8870c36a0910722ce1dee6616772d991bd8decc6c415dcd4d37e75a519def85b94682ddeef8539f910b919ce4c16d46bb60659fdb4f0e11f53de68a76b009d2ed7d8538cdf07231896e622e1a8b00f54904cc6f20c1ec4839866b88dc28c7388c755b0a58e23651b3d1ce085d88646b0710fbaffdb5959a8e5388ca360fb0fdda5e0238d756f5f5cb91af69e5e9afa899404de547a9b7c2590bcb3c05018c4c80499126916e2d0f6d1c4f207276337e32f5362f0ef99eebcf740544d9c00ee80ea99dd9aae37e40975010854c829cc979f2cfc9d5a253a5674a56690e3066c9fa6fbf9416c29c28b8052fddc84d9d69bc72aa258edf0505a99e93fcd55069bbaabdb8e120c1d34b0ca7218e73a022a9c26f687122739036048384de7fd89733c6f1415ccf7009498b5a4de553b483d3436dcfcd250968e3c80bc5a11506f7d03782afe0e48661c84357d8c2dd1fc759525f7a1a80dd346b93ee33b526567c41da09f94f02ccce18451d5426944c88eaccd8474a4b11bbf21b526dc8ecb30903323316a07631128b680afec1a9f2400671ff745a903fcb8c7407c1894894fc0cae758abf57a5cb89872186e42845b5f69b4f573019054746080d12938d399a64c7cc16e1bf7adaa72d646a1d4f785228161462a08e71fab62c84dd9c99e5fc45d18567647a9c89b5fd9a0929945bf5d49d50a63f61971263a45255ca99ab447f5e348b515a25289a953ec813e89c1b69d1329d78b6f6e702c45221e3713066ad22ba70fde00cbc46521106baee69258f3df20d8936e3b4de2cb7e70c3c824c8119ed0b63fac29774b24a9e319cbe1ec922c7e18a0a3cc58b8b2b223a9e3f20a6b577826940abce6dad8f467fc9187b300823b57a9234b968d804dcea80d26391720fd45582dc1be011b390a757a8c8a4c83696fc41859a46efbbf8a30adee59481d3c31782a6888fc13a0476010604cec3c70f20d955b0e8cae6f8d0b678181447d11798e9b5dabc1c7ab88545d345e6f1f182c8308532a333933a8d21f4e640628ff32195aeaf8adff31560fc7e68cb6b183627311cbedd03258aef3a30c712b92f0266b233de40a517f2b13fc5a0e6aea12bc435eede24c8caaf7e4ec971cd951181f36857e1c4c78ed8d43e5380ce88dcf5eb9221eef013dd0d3e2af7b66aa650d1b0e2746ce96e04ae6b3186c51b22c240b3be458ca4538bb1cc890fb6cbf02ce20b9a0f478072db03a079026a467478b1125c7169c97eee394a2688719ad9e293dfbd1bd7a0e96a5d18bc554ef602b483310408c764367ccf323f48cd7f9ab6e8f725333b19a66a1431a9881f36c359059cc1125cd31d1953bbc64572177a725b07c78a89c67f11d019fdd387cf4ec30ee8318dcd76a99cade0d0c45a9cbd10fd93688f34a17f5b8999a2a6c5e6198f74e0b4d0013ecf84c8e28b3eb7775058eeaab7c32160aa0f18b8c33eaeef60f3697dc62434e60d99faa3628b3a94d0f0d85715c383fef38216bb06ef34300408bd73279aa27a0c9aa1549a63388e32d89d61afaa0901c126bc8ef786bdf082c238ab1fd84d0cc9b485b0b796cdc17e1b7d16300060a481f6c5b99551092fda0786eaa9702f1e7bcffe03a5a36422341535f148ac007a3ab8c891eb363d54cd9dd39178da932f25816a0a474e96b7c77ef18b88604c55992a2c99c2f5f09004fa9fbf53bd45085c45be40c8872cf3399df238e21bb8b304c03208409eea94bbdde75f4b969af38d7216532a7035b1b47800b732e9fb40b4fcae45101f9432e965414e9f74ec1e122f2b0616d69383831420a0239d2acc4efb4e07f387a257d21118d9e52131f46fc4a9dcb965e46d112772dd5418be938aaf6c0ec67c9ac27137af60a38177c42a85a4a6135e4534647aa28fd55bc3bba0a613d88a72455ce08dff531b031f0d5c9ff8e069d19217678e817edca92e9b726047665b40cc021801c4eb719d1f51659b3292d2f724e4d1fa99bb481295472c2057f3cc1b2ecfedf59338a2f7fede8128f53d5f87953090b2c7823b47c9f53e93ce0a0eca7c4d0227cba983f5a20ae210321b20c2f4b9a97dda5238268322c5d18ad608c088e51a6cb14fc3be9dab5d80a55af0181b4e95c9394acdac928cbe79f304ca0037ce4b8c0a1e43ff8e54ad8b4e6b97c13accd31640e5d44b8d3302f364bb14d7637986c56a7893d67a3f96f8ae3d2d05b6c5b965a04661c5119080c4c507f0b07d9de283bebc378650c367c24d2658652012515eb75038740ba97954f29cde1978d30297aafa06f2d20ab72d485b96ef2b135b324a64e28f147c9866e6153e84529c4a220d4c90e2fccef893e39b12788625eb01dbacec409bcc038b320c0e80053489ac76a04ec39191500607c1b01049a3561c1f9652906bb28b6bd0ab6cb10436e21dfe546388e6c79c89b2587696736b4a4c591bb6b5567a916cc297fce14235c27ba0d4b9fb7168e6fea995fc71ced97a7a07be3109d429745d3b2167ef7bdf98e50dcc0e70d8eb5449fa1bf4fc4da340abcb189732127b4dcc2a73290a7656eb91cb0893cef64eec483e6639e0e416b3f5fd0708404353698e4531e4746a9726cfed18ac1bc7819bb16d6308dba9eb7716d0661172eea4f44942b266c0c50de7ba1df2d3757685d82b3fe605a27bda547b187f5af0ae0d678fb27089748c7b2d4646c8b1a629fee0c9df95e212c3b053b2383cbd6c85d4b065b6995735566420a8ee17db532a60c34c072d14c111a8e36c741081e2ccd3b2ad18faac5400e9d5c3411740e3268b4449c0a84a0b24310da871dd315ad3beac036e0b6e74c51361131f58ba7cd186d5b437d0c55a07abe61b01553a92c2d3eb01d5587f61d3f2ef9482f61e4d1efede76d4340d87b0fcc9d7421267f14a22cca6ff5bbb889c99df49f24dcc0a8d4c1f72607337949f75a74e81b35b38b4e5da4de598cebf9dab3c7129bdef825fd1c4b4f8468b8ac0810f14d4c07e9e965c0c6317000b1f5f1bbf5ca3c9771b33278dae93483ce9243794e62036dd1f5bd3102a889afc922e6e512bd235a70eb2809ded3005a07478aaecc17002dba479371de6bdd8332c2ccc073aab89e83af8b8c8e0c0b6cab14e1a33b9f69c85e3e9c22b1ac0de924570309273fa30e242f35d131d8e1f8c51d11d7b5e6b0baefffaaff96020620556faf460954223720d04fea71bd015cfb8bd144970791c9b82fdab2263513f03d4c26ad3e5dbb004bf5b63163e3204a9d0dd0a5d0284e4566be9258b96a5a0164e39bfdcc2b58f76d4112dc52d7812c58c9a47e73fef65a45bb898fba8d7fcb8ac1d266593e9b0c2052f46d2d3e2dfd6dc2fe1d656d28a3f04c01d003ad9656c5100b603f819f9ba32eda9dc1643c6cd983283534208d3a4447850abe58d22f971298dc0a5f8fcaf71e534ff4c7d70a783ee30c57032b86a4b9205f3000c61ffebe0c2cdcedd5b02ca80c3b1f5d301c482fce2f83a5cbe317b9ae0466105aa993188faaea171db0c5410e0b468d82b6d4d183b860f1787ab6cca3f567f2f29c179c1e538c4757f825369b411196ce827a6c0b094a29243ae57017ad2db6204609d5f2b4092296f55e27d55801d2c965003a50af84619f93e957365c3fb6518c9b18e070f8186316404", + "0x3a65787472696e7369635f696e646578": "0x00000000", + "0x3a6772616e6470615f617574686f726974696573": "0x0138c8caee6f6eddc41c6cc55e554343392cbc13d2a8a57b97f6f85fc965bdd20ce8010000000000000083f43ee3e4521b55de0fe830847fda88a6b017b87979af1a41b180c39da1e4b001000000000000005fafb6219eb8d463bec0370b2aab69f45fc780959fc2eddbc7703760aa34202201000000000000008270a62b61639ee56113834aecec01de6cda91413a5111b89f74d6585da34f500100000000000000622c382187c0b2c61ecfb17443294d11a9d2ab770ae6f1fb49184a43906d59fe01000000000000006e309dfa4c8de814cad140b8612a9e41bfba244f9ab1468e1b5d9b3cc1f5e56501000000000000000509f9caf32fda5584343c473b386c433acb99fd9400724b8cf3c618d840133f01000000000000004c669b04865e9acaf7b72bdfcb0099d70d9ec63c8c2d6b8cb0552815d7b50a0a0100000000000000e41426f7465c13c48335771c5450bf61c50a9cf28b9274f170c7421eea7974f10100000000000000ace46e899b90e75199549d8fa2ae7097e896ab3c845217e3155f99b6ffb888030100000000000000c9a68a26e9aa37ba6334f1a20275e3be7d3a9d4aa988627eadac8ea0d0a2dfbf01000000000000006e60f1e253735fb113c183fa603f591e4456435171f387c0849001b428b5ccb10100000000000000c8de3a01502422b59dfa601c9c3a04a98d2bfbd79dd0810d1d1250feab4241ee010000000000000064adb43a7628139f6c02100f6a5465dbd33422418426c572b12547c5a665008c0100000000000000", + "0x3d9cad2baf702e20b136f4c8900cd8024e7b9012096b41c4eb3aaf947f6ea429": "0x0200", + "0x3db7a24cfdc9de785974746c14a99df94e7b9012096b41c4eb3aaf947f6ea429": "0x0400", + "0x3f1467a096bcd71a5b6a0c8155e208104e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x3fba98689ebed1138735e0e7a5a790ab4e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0x42b50b77ef717947e7043bb52127d6654e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x47c9410b11325752265d54845357656f4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x4da2c41eaffa8e1a791c5d65beeefd1f028685274e698e781f7f2766cba0cc8300000000": "0x380a000000030000000400000002000000070000000b000000050000000c0000000000000009000000060000000d0000000100000008000000abc3f086f5ac20eaab792c75933b2e196307835a61a955be82aa63bc0ff9617a0600000038ea9400f05e7fb75a3f7a92febbf58e5a3060dd06132ed6d5d68a3d75ec452826ad90a2c3fa2c756f974628dd279adb87935f7ea509856276e3b86f759b22451c303094c583e253794c9db14803585baaa74472f4ecba846defefc8aecfb6214ac45a6d0878f808b1baaa85dcfb4e930ae06e3205bb38855527aee6f259e3327b2253ee3c02d89582602ca5b0570cfc01dc82cc8d1b9d2071eb5db6318749124b02683131f96baec9121383995904c49a02ce2c2451f8038291e5db2dce66663e0a988fb965b156a07debf072fd9d34a9c7c0fc0e0ff5bd63ef766afb76e2b32890032c39c968f486f77f8764301a8479206f063d49eeb9f6d499333e2a1be045161d0af40e6efc165c17d0189bd2d770bdfa0a9b8393cb89113f473a2e948c680ce84accce1ced0de223aa72f760f1b3d13ddfd267938cd63e25308378d320084e1a59090261a7e6bd82544df1eebd96dc87b4eb1211346645fa44d6b932960b441629077e228528f91ca7dc17051bb437408a5ae272d0950e58961846a8fc2ed0d052eca7d732d9f560ba970ca48f67387b899e76958ea6ed342a3a553ef0229e065eea4143325fbbd26967c26a228d51a3a8384062f7434973f15d1da2c010000000000000000000000000000000000000000100000000000000", + "0x4da2c41eaffa8e1a791c5d65beeefd1f4e5747352ae927817a9171156fb3da7f00000000": "0x00", + "0x4da2c41eaffa8e1a791c5d65beeefd1f4e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0x4da2c41eaffa8e1a791c5d65beeefd1f5762b52ec4f696c1235b20491a567f8500000000": "0x00", + "0x4da2c41eaffa8e1a791c5d65beeefd1fff4a51b74593c3708682038efe5323b5": "0x00000000", + "0x50e709b04947c0cd2f04727ef76e88f64e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0x5c0d1176a568c1f92944340dbfed9e9c4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x5c0d1176a568c1f92944340dbfed9e9c530ebca703c85910e7164cb7d1c9e47b": "0x7e939ef17e229e9a29210d95cb0b607e0030d54899c05f791a62d5c6f4557659", + "0x5f27b51b5ec208ee9cb25b55d8728243308ce9615de0775a82f8a94dc3d285a1": "0x01", + "0x5f27b51b5ec208ee9cb25b55d87282434e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca0b6a45321efae92aea15e0740ec7afe7": "0x00000000", + "0x5f3e4907f716ac89b6347d15ececedca138e71612491192d68deab7e6f563fe1": "0x0e000000", + "0x5f3e4907f716ac89b6347d15ececedca28dccb559b95c40168a1b2696581b5a7": "0x00000000000000000000000000000000", + "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe700afd9ad680e7563894c4156ed6a101ae478a3de3ba70a05fce8a3d67be6fb85f33bfcf2777ab6b10": "0x94c4156ed6a101ae478a3de3ba70a05fce8a3d67be6fb85f33bfcf2777ab6b10", + "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe700e8cb253c2fa33f382c3105dbd4bb206428d8a8b7ea1f19965a0668dd583b06c3b75daa181fe654c": "0x82c3105dbd4bb206428d8a8b7ea1f19965a0668dd583b06c3b75daa181fe654c", + "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe701887a9d70c3dff6e6ed774481ff68097867271bc8ecaeee3500817ccefdfda74ceeafd32a2259627": "0x6ed774481ff68097867271bc8ecaeee3500817ccefdfda74ceeafd32a2259627", + "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe70198703ff0791c2de1e30aa51ad68b8918d2c46e914986818c111bee03582610cbc9fb73fe0e4c413": "0x1e30aa51ad68b8918d2c46e914986818c111bee03582610cbc9fb73fe0e4c413", + "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe70260868bcb77241070efe248e3ddcfcb4f29675b70fc0a8e2db66b65381c45d299427b60d05f76108": "0x0efe248e3ddcfcb4f29675b70fc0a8e2db66b65381c45d299427b60d05f76108", + "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe70572aae990801cce1043393e76c137dfdc403a6fd9a2d6129d470d51c5a67bd40517378030c87170d": "0x043393e76c137dfdc403a6fd9a2d6129d470d51c5a67bd40517378030c87170d", + "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe7065903e26e594bcd6d41a8a9678862ebe9d1a1d59cac1c8430ef31e282f9cb391cf6f2b4d9ce2fd3d": "0xd41a8a9678862ebe9d1a1d59cac1c8430ef31e282f9cb391cf6f2b4d9ce2fd3d", + "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe70a8a26ecf38bdcfc668728d12a90fb1a9f5b0f0b2814d730401d314964113554e66ff19e7067d7c69": "0x68728d12a90fb1a9f5b0f0b2814d730401d314964113554e66ff19e7067d7c69", + "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe70ab8d3e1fa99ea7e2d0b4896a63b672a7a74f5234bf9ec8567ff3c5bb8f93795e15e2c498b48d327c": "0xd0b4896a63b672a7a74f5234bf9ec8567ff3c5bb8f93795e15e2c498b48d327c", + "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe70d12736684524574c32eebacd223f4aef33d98a667a68f9e371f40384257c6d31030952b9d94e1152": "0x32eebacd223f4aef33d98a667a68f9e371f40384257c6d31030952b9d94e1152", + "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe70d30ebbc69dfd05038eef6710734f5d1e7d2eb303fa8f04e9bef65fb680647b24624723f95b868964": "0x8eef6710734f5d1e7d2eb303fa8f04e9bef65fb680647b24624723f95b868964", + "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe70deca1f47c95ad9e99492b8c38442c79061bdbb8d38dcd28138938a7fd476edf89ecdec06a5a9d20f": "0x9492b8c38442c79061bdbb8d38dcd28138938a7fd476edf89ecdec06a5a9d20f", + "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe70e7e316712ac574569037d1020ed699c2f538d3ffcf0eb98087ee11ca4bd07bfddb0d68633806af74": "0x9037d1020ed699c2f538d3ffcf0eb98087ee11ca4bd07bfddb0d68633806af74", + "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe70eec11b5fca7cddef5270ec35ba01254d8bff046a1a58f16d3ae615c235efd6e99a35f233b2d9df2c": "0x5270ec35ba01254d8bff046a1a58f16d3ae615c235efd6e99a35f233b2d9df2c", + "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc402d496d20c019d22397accfc42b7635d94c4156ed6a101ae478a3de3ba70a05fce8a3d67be6fb85f33bfcf2777ab6b10": "0x94c4156ed6a101ae478a3de3ba70a05fce8a3d67be6fb85f33bfcf2777ab6b100f0080c6a47e8d030f0080c6a47e8d030000", + "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc40ffdb9747f7a8bfa200ea2291eea6bdf9492b8c38442c79061bdbb8d38dcd28138938a7fd476edf89ecdec06a5a9d20f": "0x9492b8c38442c79061bdbb8d38dcd28138938a7fd476edf89ecdec06a5a9d20f0f0080c6a47e8d030f0080c6a47e8d030000", + "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc411fcf3e922de10898cb04273301735e65270ec35ba01254d8bff046a1a58f16d3ae615c235efd6e99a35f233b2d9df2c": "0x5270ec35ba01254d8bff046a1a58f16d3ae615c235efd6e99a35f233b2d9df2c0f0080c6a47e8d030f0080c6a47e8d030000", + "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc415fbc5d9b44885a2dce0fbaa3834ba211e30aa51ad68b8918d2c46e914986818c111bee03582610cbc9fb73fe0e4c413": "0x1e30aa51ad68b8918d2c46e914986818c111bee03582610cbc9fb73fe0e4c4130f0080c6a47e8d030f0080c6a47e8d030000", + "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc4279effc2672354478fb5e3f7e65726b668728d12a90fb1a9f5b0f0b2814d730401d314964113554e66ff19e7067d7c69": "0x68728d12a90fb1a9f5b0f0b2814d730401d314964113554e66ff19e7067d7c690f0080c6a47e8d030f0080c6a47e8d030000", + "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc42ffe7c0dd7d3d8d8485c403a33fb7adb6ed774481ff68097867271bc8ecaeee3500817ccefdfda74ceeafd32a2259627": "0x6ed774481ff68097867271bc8ecaeee3500817ccefdfda74ceeafd32a22596270f0080c6a47e8d030f0080c6a47e8d030000", + "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc4350ea875b4c0459b3527d475e9825c99d41a8a9678862ebe9d1a1d59cac1c8430ef31e282f9cb391cf6f2b4d9ce2fd3d": "0xd41a8a9678862ebe9d1a1d59cac1c8430ef31e282f9cb391cf6f2b4d9ce2fd3d0f0080c6a47e8d030f0080c6a47e8d030000", + "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc44d176c4abc6d2410c43423c2714b909c32eebacd223f4aef33d98a667a68f9e371f40384257c6d31030952b9d94e1152": "0x32eebacd223f4aef33d98a667a68f9e371f40384257c6d31030952b9d94e11520f0080c6a47e8d030f0080c6a47e8d030000", + "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc4585bd5ccc1af6cf60c19d791bb091b750efe248e3ddcfcb4f29675b70fc0a8e2db66b65381c45d299427b60d05f76108": "0x0efe248e3ddcfcb4f29675b70fc0a8e2db66b65381c45d299427b60d05f761080f0080c6a47e8d030f0080c6a47e8d030000", + "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc465bb58c29c9825c1f6727fe8c41650ac82c3105dbd4bb206428d8a8b7ea1f19965a0668dd583b06c3b75daa181fe654c": "0x82c3105dbd4bb206428d8a8b7ea1f19965a0668dd583b06c3b75daa181fe654c0f0080c6a47e8d030f0080c6a47e8d030000", + "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc46deaa967a94fa09152be01a253511479d0b4896a63b672a7a74f5234bf9ec8567ff3c5bb8f93795e15e2c498b48d327c": "0xd0b4896a63b672a7a74f5234bf9ec8567ff3c5bb8f93795e15e2c498b48d327c0f0080c6a47e8d030f0080c6a47e8d030000", + "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc4829f3f4d6d7c991993e0c044ae97410b043393e76c137dfdc403a6fd9a2d6129d470d51c5a67bd40517378030c87170d": "0x043393e76c137dfdc403a6fd9a2d6129d470d51c5a67bd40517378030c87170d0f0080c6a47e8d030f0080c6a47e8d030000", + "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc4ba2db252d1b8c64ec51b04d0f50d7d2b9037d1020ed699c2f538d3ffcf0eb98087ee11ca4bd07bfddb0d68633806af74": "0x9037d1020ed699c2f538d3ffcf0eb98087ee11ca4bd07bfddb0d68633806af740f0080c6a47e8d030f0080c6a47e8d030000", + "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc4dfc40f350cc4563ad9ddff5ad92944278eef6710734f5d1e7d2eb303fa8f04e9bef65fb680647b24624723f95b868964": "0x8eef6710734f5d1e7d2eb303fa8f04e9bef65fb680647b24624723f95b8689640f0080c6a47e8d030f0080c6a47e8d030000", + "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a000000000afd9ad680e7563894c4156ed6a101ae478a3de3ba70a05fce8a3d67be6fb85f33bfcf2777ab6b10": "0x0f0080c6a47e8d030f0080c6a47e8d0300", + "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a000000000e8cb253c2fa33f382c3105dbd4bb206428d8a8b7ea1f19965a0668dd583b06c3b75daa181fe654c": "0x0f0080c6a47e8d030f0080c6a47e8d0300", + "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a000000001887a9d70c3dff6e6ed774481ff68097867271bc8ecaeee3500817ccefdfda74ceeafd32a2259627": "0x0f0080c6a47e8d030f0080c6a47e8d0300", + "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a00000000198703ff0791c2de1e30aa51ad68b8918d2c46e914986818c111bee03582610cbc9fb73fe0e4c413": "0x0f0080c6a47e8d030f0080c6a47e8d0300", + "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a00000000260868bcb77241070efe248e3ddcfcb4f29675b70fc0a8e2db66b65381c45d299427b60d05f76108": "0x0f0080c6a47e8d030f0080c6a47e8d0300", + "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a00000000572aae990801cce1043393e76c137dfdc403a6fd9a2d6129d470d51c5a67bd40517378030c87170d": "0x0f0080c6a47e8d030f0080c6a47e8d0300", + "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a0000000065903e26e594bcd6d41a8a9678862ebe9d1a1d59cac1c8430ef31e282f9cb391cf6f2b4d9ce2fd3d": "0x0f0080c6a47e8d030f0080c6a47e8d0300", + "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a00000000a8a26ecf38bdcfc668728d12a90fb1a9f5b0f0b2814d730401d314964113554e66ff19e7067d7c69": "0x0f0080c6a47e8d030f0080c6a47e8d0300", + "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a00000000ab8d3e1fa99ea7e2d0b4896a63b672a7a74f5234bf9ec8567ff3c5bb8f93795e15e2c498b48d327c": "0x0f0080c6a47e8d030f0080c6a47e8d0300", + "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a00000000d12736684524574c32eebacd223f4aef33d98a667a68f9e371f40384257c6d31030952b9d94e1152": "0x0f0080c6a47e8d030f0080c6a47e8d0300", + "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a00000000d30ebbc69dfd05038eef6710734f5d1e7d2eb303fa8f04e9bef65fb680647b24624723f95b868964": "0x0f0080c6a47e8d030f0080c6a47e8d0300", + "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a00000000deca1f47c95ad9e99492b8c38442c79061bdbb8d38dcd28138938a7fd476edf89ecdec06a5a9d20f": "0x0f0080c6a47e8d030f0080c6a47e8d0300", + "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a00000000e7e316712ac574569037d1020ed699c2f538d3ffcf0eb98087ee11ca4bd07bfddb0d68633806af74": "0x0f0080c6a47e8d030f0080c6a47e8d0300", + "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a00000000eec11b5fca7cddef5270ec35ba01254d8bff046a1a58f16d3ae615c235efd6e99a35f233b2d9df2c": "0x0f0080c6a47e8d030f0080c6a47e8d0300", + "0x5f3e4907f716ac89b6347d15ececedca487df464e44a534ba6b0cbb32407b587": "0x0000000000", + "0x5f3e4907f716ac89b6347d15ececedca4e7b9012096b41c4eb3aaf947f6ea429": "0x0d00", + "0x5f3e4907f716ac89b6347d15ececedca5579297f4dfb9609e7e4c2ebab9ce40a": "0x3894c4156ed6a101ae478a3de3ba70a05fce8a3d67be6fb85f33bfcf2777ab6b1082c3105dbd4bb206428d8a8b7ea1f19965a0668dd583b06c3b75daa181fe654c6ed774481ff68097867271bc8ecaeee3500817ccefdfda74ceeafd32a22596271e30aa51ad68b8918d2c46e914986818c111bee03582610cbc9fb73fe0e4c4130efe248e3ddcfcb4f29675b70fc0a8e2db66b65381c45d299427b60d05f76108043393e76c137dfdc403a6fd9a2d6129d470d51c5a67bd40517378030c87170dd41a8a9678862ebe9d1a1d59cac1c8430ef31e282f9cb391cf6f2b4d9ce2fd3d68728d12a90fb1a9f5b0f0b2814d730401d314964113554e66ff19e7067d7c69d0b4896a63b672a7a74f5234bf9ec8567ff3c5bb8f93795e15e2c498b48d327c32eebacd223f4aef33d98a667a68f9e371f40384257c6d31030952b9d94e11528eef6710734f5d1e7d2eb303fa8f04e9bef65fb680647b24624723f95b8689649492b8c38442c79061bdbb8d38dcd28138938a7fd476edf89ecdec06a5a9d20f9037d1020ed699c2f538d3ffcf0eb98087ee11ca4bd07bfddb0d68633806af745270ec35ba01254d8bff046a1a58f16d3ae615c235efd6e99a35f233b2d9df2c", + "0x5f3e4907f716ac89b6347d15ececedca666fdcbb473985b3ac933d13f4acff8d": "0x0080c6a47e8d03000000000000000000", + "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a000000000afd9ad680e7563894c4156ed6a101ae478a3de3ba70a05fce8a3d67be6fb85f33bfcf2777ab6b10": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a000000000e8cb253c2fa33f382c3105dbd4bb206428d8a8b7ea1f19965a0668dd583b06c3b75daa181fe654c": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a000000001887a9d70c3dff6e6ed774481ff68097867271bc8ecaeee3500817ccefdfda74ceeafd32a2259627": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a00000000198703ff0791c2de1e30aa51ad68b8918d2c46e914986818c111bee03582610cbc9fb73fe0e4c413": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a00000000260868bcb77241070efe248e3ddcfcb4f29675b70fc0a8e2db66b65381c45d299427b60d05f76108": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a00000000572aae990801cce1043393e76c137dfdc403a6fd9a2d6129d470d51c5a67bd40517378030c87170d": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a0000000065903e26e594bcd6d41a8a9678862ebe9d1a1d59cac1c8430ef31e282f9cb391cf6f2b4d9ce2fd3d": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a00000000a8a26ecf38bdcfc668728d12a90fb1a9f5b0f0b2814d730401d314964113554e66ff19e7067d7c69": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a00000000ab8d3e1fa99ea7e2d0b4896a63b672a7a74f5234bf9ec8567ff3c5bb8f93795e15e2c498b48d327c": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a00000000d12736684524574c32eebacd223f4aef33d98a667a68f9e371f40384257c6d31030952b9d94e1152": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a00000000d30ebbc69dfd05038eef6710734f5d1e7d2eb303fa8f04e9bef65fb680647b24624723f95b868964": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a00000000deca1f47c95ad9e99492b8c38442c79061bdbb8d38dcd28138938a7fd476edf89ecdec06a5a9d20f": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a00000000e7e316712ac574569037d1020ed699c2f538d3ffcf0eb98087ee11ca4bd07bfddb0d68633806af74": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a00000000eec11b5fca7cddef5270ec35ba01254d8bff046a1a58f16d3ae615c235efd6e99a35f233b2d9df2c": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca6ddc7809c6da9bb6093ee22e0fda4ba8": "0x0e000000", + "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e169030afd9ad680e7563894c4156ed6a101ae478a3de3ba70a05fce8a3d67be6fb85f33bfcf2777ab6b10": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e169030e8cb253c2fa33f382c3105dbd4bb206428d8a8b7ea1f19965a0668dd583b06c3b75daa181fe654c": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e169031887a9d70c3dff6e6ed774481ff68097867271bc8ecaeee3500817ccefdfda74ceeafd32a2259627": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e16903198703ff0791c2de1e30aa51ad68b8918d2c46e914986818c111bee03582610cbc9fb73fe0e4c413": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e16903260868bcb77241070efe248e3ddcfcb4f29675b70fc0a8e2db66b65381c45d299427b60d05f76108": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e16903572aae990801cce1043393e76c137dfdc403a6fd9a2d6129d470d51c5a67bd40517378030c87170d": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e1690365903e26e594bcd6d41a8a9678862ebe9d1a1d59cac1c8430ef31e282f9cb391cf6f2b4d9ce2fd3d": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e16903a8a26ecf38bdcfc668728d12a90fb1a9f5b0f0b2814d730401d314964113554e66ff19e7067d7c69": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e16903ab8d3e1fa99ea7e2d0b4896a63b672a7a74f5234bf9ec8567ff3c5bb8f93795e15e2c498b48d327c": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e16903d12736684524574c32eebacd223f4aef33d98a667a68f9e371f40384257c6d31030952b9d94e1152": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e16903d30ebbc69dfd05038eef6710734f5d1e7d2eb303fa8f04e9bef65fb680647b24624723f95b868964": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e16903deca1f47c95ad9e99492b8c38442c79061bdbb8d38dcd28138938a7fd476edf89ecdec06a5a9d20f": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e16903e7e316712ac574569037d1020ed699c2f538d3ffcf0eb98087ee11ca4bd07bfddb0d68633806af74": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e16903eec11b5fca7cddef5270ec35ba01254d8bff046a1a58f16d3ae615c235efd6e99a35f233b2d9df2c": "0x0000", + "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a000000000afd9ad680e7563894c4156ed6a101ae478a3de3ba70a05fce8a3d67be6fb85f33bfcf2777ab6b10": "0x0f0080c6a47e8d030f0080c6a47e8d0300", + "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a000000000e8cb253c2fa33f382c3105dbd4bb206428d8a8b7ea1f19965a0668dd583b06c3b75daa181fe654c": "0x0f0080c6a47e8d030f0080c6a47e8d0300", + "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a000000001887a9d70c3dff6e6ed774481ff68097867271bc8ecaeee3500817ccefdfda74ceeafd32a2259627": "0x0f0080c6a47e8d030f0080c6a47e8d0300", + "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a00000000198703ff0791c2de1e30aa51ad68b8918d2c46e914986818c111bee03582610cbc9fb73fe0e4c413": "0x0f0080c6a47e8d030f0080c6a47e8d0300", + "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a00000000260868bcb77241070efe248e3ddcfcb4f29675b70fc0a8e2db66b65381c45d299427b60d05f76108": "0x0f0080c6a47e8d030f0080c6a47e8d0300", + "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a00000000572aae990801cce1043393e76c137dfdc403a6fd9a2d6129d470d51c5a67bd40517378030c87170d": "0x0f0080c6a47e8d030f0080c6a47e8d0300", + "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a0000000065903e26e594bcd6d41a8a9678862ebe9d1a1d59cac1c8430ef31e282f9cb391cf6f2b4d9ce2fd3d": "0x0f0080c6a47e8d030f0080c6a47e8d0300", + "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a00000000a8a26ecf38bdcfc668728d12a90fb1a9f5b0f0b2814d730401d314964113554e66ff19e7067d7c69": "0x0f0080c6a47e8d030f0080c6a47e8d0300", + "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a00000000ab8d3e1fa99ea7e2d0b4896a63b672a7a74f5234bf9ec8567ff3c5bb8f93795e15e2c498b48d327c": "0x0f0080c6a47e8d030f0080c6a47e8d0300", + "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a00000000d12736684524574c32eebacd223f4aef33d98a667a68f9e371f40384257c6d31030952b9d94e1152": "0x0f0080c6a47e8d030f0080c6a47e8d0300", + "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a00000000d30ebbc69dfd05038eef6710734f5d1e7d2eb303fa8f04e9bef65fb680647b24624723f95b868964": "0x0f0080c6a47e8d030f0080c6a47e8d0300", + "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a00000000deca1f47c95ad9e99492b8c38442c79061bdbb8d38dcd28138938a7fd476edf89ecdec06a5a9d20f": "0x0f0080c6a47e8d030f0080c6a47e8d0300", + "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a00000000e7e316712ac574569037d1020ed699c2f538d3ffcf0eb98087ee11ca4bd07bfddb0d68633806af74": "0x0f0080c6a47e8d030f0080c6a47e8d0300", + "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a00000000eec11b5fca7cddef5270ec35ba01254d8bff046a1a58f16d3ae615c235efd6e99a35f233b2d9df2c": "0x0f0080c6a47e8d030f0080c6a47e8d0300", + "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade980afd9ad680e7563894c4156ed6a101ae478a3de3ba70a05fce8a3d67be6fb85f33bfcf2777ab6b10": "0x00", + "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade980e8cb253c2fa33f382c3105dbd4bb206428d8a8b7ea1f19965a0668dd583b06c3b75daa181fe654c": "0x00", + "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade981887a9d70c3dff6e6ed774481ff68097867271bc8ecaeee3500817ccefdfda74ceeafd32a2259627": "0x00", + "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade98198703ff0791c2de1e30aa51ad68b8918d2c46e914986818c111bee03582610cbc9fb73fe0e4c413": "0x00", + "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade98260868bcb77241070efe248e3ddcfcb4f29675b70fc0a8e2db66b65381c45d299427b60d05f76108": "0x00", + "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade98572aae990801cce1043393e76c137dfdc403a6fd9a2d6129d470d51c5a67bd40517378030c87170d": "0x00", + "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade9865903e26e594bcd6d41a8a9678862ebe9d1a1d59cac1c8430ef31e282f9cb391cf6f2b4d9ce2fd3d": "0x00", + "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade98a8a26ecf38bdcfc668728d12a90fb1a9f5b0f0b2814d730401d314964113554e66ff19e7067d7c69": "0x00", + "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade98ab8d3e1fa99ea7e2d0b4896a63b672a7a74f5234bf9ec8567ff3c5bb8f93795e15e2c498b48d327c": "0x00", + "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade98d12736684524574c32eebacd223f4aef33d98a667a68f9e371f40384257c6d31030952b9d94e1152": "0x00", + "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade98d30ebbc69dfd05038eef6710734f5d1e7d2eb303fa8f04e9bef65fb680647b24624723f95b868964": "0x00", + "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade98deca1f47c95ad9e99492b8c38442c79061bdbb8d38dcd28138938a7fd476edf89ecdec06a5a9d20f": "0x00", + "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade98e7e316712ac574569037d1020ed699c2f538d3ffcf0eb98087ee11ca4bd07bfddb0d68633806af74": "0x00", + "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade98eec11b5fca7cddef5270ec35ba01254d8bff046a1a58f16d3ae615c235efd6e99a35f233b2d9df2c": "0x00", + "0x5f3e4907f716ac89b6347d15ececedca98c2640cda6c0d801194a8a61c699224": "0xc8000000", + "0x5f3e4907f716ac89b6347d15ececedcaa141c4fe67c2d11f4a10c6aca7a79a04b4def25cfda6ef3a00000000": "0x0000db02edbc31000000000000000000", + "0x5f3e4907f716ac89b6347d15ececedcaad811cd65a470ddc5f1d628ff0550982b4def25cfda6ef3a00000000": "0x00000000", + "0x5f3e4907f716ac89b6347d15ececedcab49a2738eeb30896aacb8b3fb46471bd": "0x02000000", + "0x5f3e4907f716ac89b6347d15ececedcac0d39ff577af2cc6b67ac3641fa9c4e7": "0x01000000", + "0x5f3e4907f716ac89b6347d15ececedcac29a0310e1bb45d20cace77ccb62c97d": "0x00e1f505", + "0x5f3e4907f716ac89b6347d15ececedcaea07de2b8f010516dca3f7ef52f7ac5a": "0x040000000000000000", + "0x5f3e4907f716ac89b6347d15ececedcaed441ceb81326c56263efbb60c95c2e4": "0x00a89c13460200000000000000000000", + "0x5f3e4907f716ac89b6347d15ececedcaf7dad0317324aecae8744b87fc95f2f3": "0x00", + "0x5f3e4907f716ac89b6347d15ececedcafab86d26e629e39b4903db94786fac74": "0xffffffffffffffff0000000000000000", + "0x5f9cc45b7a00c5899361e1c6099678dc4e7b9012096b41c4eb3aaf947f6ea429": "0x0400", + "0x5f9cc45b7a00c5899361e1c6099678dc8a2d09463effcc78a22d75b9cb87dffc": "0x0000000000000000", + "0x5f9cc45b7a00c5899361e1c6099678dcd47cb8f5328af743ddfb361e7180e7fcbb1bdbcacd6ac9340000000000000000": "0x00000000", + "0x63f78c98723ddc9073523ef3beefda0c4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x6835e433a91d195a7e84cba463249e274e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x6a0da05ca59913bc38a8630590f2627c2a351b6a99a5b21324516e668bb86a57": "0x00", + "0x6a0da05ca59913bc38a8630590f2627c4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x6ac983d82528bf1595ab26438ae5b2cf4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x7474449cca95dc5d0c00e71735a6d17d4e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0x74dd702da46f77d7acf77f5a48d4af7d4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x74dd702da46f77d7acf77f5a48d4af7d62556a85fcb7c61b2c6c750924846b150afd9ad680e7563894c4156ed6a101ae478a3de3ba70a05fce8a3d67be6fb85f33bfcf2777ab6b10": "0x94c4156ed6a101ae478a3de3ba70a05fce8a3d67be6fb85f33bfcf2777ab6b10000182c3105dbd4bb206428d8a8b7ea1f19965a0668dd583b06c3b75daa181fe654c61c091f7b7cb03000080c6a47e8d0300", + "0x74dd702da46f77d7acf77f5a48d4af7d62556a85fcb7c61b2c6c750924846b150e8cb253c2fa33f382c3105dbd4bb206428d8a8b7ea1f19965a0668dd583b06c3b75daa181fe654c": "0x82c3105dbd4bb206428d8a8b7ea1f19965a0668dd583b06c3b75daa181fe654c0194c4156ed6a101ae478a3de3ba70a05fce8a3d67be6fb85f33bfcf2777ab6b10016ed774481ff68097867271bc8ecaeee3500817ccefdfda74ceeafd32a225962761c091f7b7cb03000080c6a47e8d0300", + "0x74dd702da46f77d7acf77f5a48d4af7d62556a85fcb7c61b2c6c750924846b151887a9d70c3dff6e6ed774481ff68097867271bc8ecaeee3500817ccefdfda74ceeafd32a2259627": "0x6ed774481ff68097867271bc8ecaeee3500817ccefdfda74ceeafd32a22596270182c3105dbd4bb206428d8a8b7ea1f19965a0668dd583b06c3b75daa181fe654c011e30aa51ad68b8918d2c46e914986818c111bee03582610cbc9fb73fe0e4c41361c091f7b7cb03000080c6a47e8d0300", + "0x74dd702da46f77d7acf77f5a48d4af7d62556a85fcb7c61b2c6c750924846b15198703ff0791c2de1e30aa51ad68b8918d2c46e914986818c111bee03582610cbc9fb73fe0e4c413": "0x1e30aa51ad68b8918d2c46e914986818c111bee03582610cbc9fb73fe0e4c413016ed774481ff68097867271bc8ecaeee3500817ccefdfda74ceeafd32a2259627010efe248e3ddcfcb4f29675b70fc0a8e2db66b65381c45d299427b60d05f7610861c091f7b7cb03000080c6a47e8d0300", + "0x74dd702da46f77d7acf77f5a48d4af7d62556a85fcb7c61b2c6c750924846b15260868bcb77241070efe248e3ddcfcb4f29675b70fc0a8e2db66b65381c45d299427b60d05f76108": "0x0efe248e3ddcfcb4f29675b70fc0a8e2db66b65381c45d299427b60d05f76108011e30aa51ad68b8918d2c46e914986818c111bee03582610cbc9fb73fe0e4c41301043393e76c137dfdc403a6fd9a2d6129d470d51c5a67bd40517378030c87170d61c091f7b7cb03000080c6a47e8d0300", + "0x74dd702da46f77d7acf77f5a48d4af7d62556a85fcb7c61b2c6c750924846b15572aae990801cce1043393e76c137dfdc403a6fd9a2d6129d470d51c5a67bd40517378030c87170d": "0x043393e76c137dfdc403a6fd9a2d6129d470d51c5a67bd40517378030c87170d010efe248e3ddcfcb4f29675b70fc0a8e2db66b65381c45d299427b60d05f7610801d41a8a9678862ebe9d1a1d59cac1c8430ef31e282f9cb391cf6f2b4d9ce2fd3d61c091f7b7cb03000080c6a47e8d0300", + "0x74dd702da46f77d7acf77f5a48d4af7d62556a85fcb7c61b2c6c750924846b1565903e26e594bcd6d41a8a9678862ebe9d1a1d59cac1c8430ef31e282f9cb391cf6f2b4d9ce2fd3d": "0xd41a8a9678862ebe9d1a1d59cac1c8430ef31e282f9cb391cf6f2b4d9ce2fd3d01043393e76c137dfdc403a6fd9a2d6129d470d51c5a67bd40517378030c87170d0168728d12a90fb1a9f5b0f0b2814d730401d314964113554e66ff19e7067d7c6961c091f7b7cb03000080c6a47e8d0300", + "0x74dd702da46f77d7acf77f5a48d4af7d62556a85fcb7c61b2c6c750924846b15a8a26ecf38bdcfc668728d12a90fb1a9f5b0f0b2814d730401d314964113554e66ff19e7067d7c69": "0x68728d12a90fb1a9f5b0f0b2814d730401d314964113554e66ff19e7067d7c6901d41a8a9678862ebe9d1a1d59cac1c8430ef31e282f9cb391cf6f2b4d9ce2fd3d01d0b4896a63b672a7a74f5234bf9ec8567ff3c5bb8f93795e15e2c498b48d327c61c091f7b7cb03000080c6a47e8d0300", + "0x74dd702da46f77d7acf77f5a48d4af7d62556a85fcb7c61b2c6c750924846b15ab8d3e1fa99ea7e2d0b4896a63b672a7a74f5234bf9ec8567ff3c5bb8f93795e15e2c498b48d327c": "0xd0b4896a63b672a7a74f5234bf9ec8567ff3c5bb8f93795e15e2c498b48d327c0168728d12a90fb1a9f5b0f0b2814d730401d314964113554e66ff19e7067d7c690132eebacd223f4aef33d98a667a68f9e371f40384257c6d31030952b9d94e115261c091f7b7cb03000080c6a47e8d0300", + "0x74dd702da46f77d7acf77f5a48d4af7d62556a85fcb7c61b2c6c750924846b15d12736684524574c32eebacd223f4aef33d98a667a68f9e371f40384257c6d31030952b9d94e1152": "0x32eebacd223f4aef33d98a667a68f9e371f40384257c6d31030952b9d94e115201d0b4896a63b672a7a74f5234bf9ec8567ff3c5bb8f93795e15e2c498b48d327c018eef6710734f5d1e7d2eb303fa8f04e9bef65fb680647b24624723f95b86896461c091f7b7cb03000080c6a47e8d0300", + "0x74dd702da46f77d7acf77f5a48d4af7d62556a85fcb7c61b2c6c750924846b15d30ebbc69dfd05038eef6710734f5d1e7d2eb303fa8f04e9bef65fb680647b24624723f95b868964": "0x8eef6710734f5d1e7d2eb303fa8f04e9bef65fb680647b24624723f95b8689640132eebacd223f4aef33d98a667a68f9e371f40384257c6d31030952b9d94e1152019492b8c38442c79061bdbb8d38dcd28138938a7fd476edf89ecdec06a5a9d20f61c091f7b7cb03000080c6a47e8d0300", + "0x74dd702da46f77d7acf77f5a48d4af7d62556a85fcb7c61b2c6c750924846b15deca1f47c95ad9e99492b8c38442c79061bdbb8d38dcd28138938a7fd476edf89ecdec06a5a9d20f": "0x9492b8c38442c79061bdbb8d38dcd28138938a7fd476edf89ecdec06a5a9d20f018eef6710734f5d1e7d2eb303fa8f04e9bef65fb680647b24624723f95b868964019037d1020ed699c2f538d3ffcf0eb98087ee11ca4bd07bfddb0d68633806af7461c091f7b7cb03000080c6a47e8d0300", + "0x74dd702da46f77d7acf77f5a48d4af7d62556a85fcb7c61b2c6c750924846b15e7e316712ac574569037d1020ed699c2f538d3ffcf0eb98087ee11ca4bd07bfddb0d68633806af74": "0x9037d1020ed699c2f538d3ffcf0eb98087ee11ca4bd07bfddb0d68633806af74019492b8c38442c79061bdbb8d38dcd28138938a7fd476edf89ecdec06a5a9d20f015270ec35ba01254d8bff046a1a58f16d3ae615c235efd6e99a35f233b2d9df2c61c091f7b7cb03000080c6a47e8d0300", + "0x74dd702da46f77d7acf77f5a48d4af7d62556a85fcb7c61b2c6c750924846b15eec11b5fca7cddef5270ec35ba01254d8bff046a1a58f16d3ae615c235efd6e99a35f233b2d9df2c": "0x5270ec35ba01254d8bff046a1a58f16d3ae615c235efd6e99a35f233b2d9df2c019037d1020ed699c2f538d3ffcf0eb98087ee11ca4bd07bfddb0d68633806af740061c091f7b7cb03000080c6a47e8d0300", + "0x74dd702da46f77d7acf77f5a48d4af7d7a6dc62e324093ba1331bf49fdb2f24a": "0x0e000000", + "0x74dd702da46f77d7acf77f5a48d4af7de5c03730c8f59f00941607850b6633d80863c87cd8a129fa61c091f7b7cb0300": "0x0194c4156ed6a101ae478a3de3ba70a05fce8a3d67be6fb85f33bfcf2777ab6b10015270ec35ba01254d8bff046a1a58f16d3ae615c235efd6e99a35f233b2d9df2c", + "0x7a6d38deaa01cb6e76ee69889f1696272be9a4e88368a2188d2b9100a9f3cd43": "0x00000000000000000000000000000000", + "0x7a6d38deaa01cb6e76ee69889f16962730256ea2c545a3e5e3744665ffb2ed28": "0x00020000", + "0x7a6d38deaa01cb6e76ee69889f1696273f0d64e1907361c689834a9c1cb0fbe0": "0x20000000", + "0x7a6d38deaa01cb6e76ee69889f16962749d67997de33812a1cc37310f765b82e": "0x00000000000000000000000000000000", + "0x7a6d38deaa01cb6e76ee69889f1696274e7b9012096b41c4eb3aaf947f6ea429": "0x0700", + "0x7a6d38deaa01cb6e76ee69889f169627ba93302f3b868c50785e6ade45c6a1d8": "0x10000000", + "0x8671567f6bbc0021f6f23105f33002a84e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x89d139e01a5eb2256f222e5fc5dbe6b34e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x94eadf0156a8ad5156507773d0471e4a16973e1142f5bd30d9464076794007db": "0x00", + "0x94eadf0156a8ad5156507773d0471e4a4e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0x94eadf0156a8ad5156507773d0471e4a9ce0310edffce7a01a96c2039f92dd10": "0x01000000", + "0x94eadf0156a8ad5156507773d0471e4ab8ebad86f546c7e0b135a4212aace339": "0x00", + "0x9c5d795d0297be56027a4b2464e333974e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x9c5d795d0297be56027a4b2464e33397f43d6436dec51f09c3b71287a8fc9d48": "0x00000000000000000000000000000000", + "0xa0eb495036d368196a2b6c51d9d788814e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xa37f719efab16103103a0c8c2c784ce14e7b9012096b41c4eb3aaf947f6ea429": "0x0400", + "0xa8c65209d47ee80f56b0011e8fd91f504e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xb341e3a63e58a188839b242d17f8c9f82586833f834350b4d435d5fd269ecc8b": "0x380a000000030000000400000002000000070000000b000000050000000c0000000000000009000000060000000d0000000100000008000000", + "0xb341e3a63e58a188839b242d17f8c9f84e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xb341e3a63e58a188839b242d17f8c9f87a50c904b368210021127f9238883a6e": "0x38ea9400f05e7fb75a3f7a92febbf58e5a3060dd06132ed6d5d68a3d75ec452826ad90a2c3fa2c756f974628dd279adb87935f7ea509856276e3b86f759b22451c303094c583e253794c9db14803585baaa74472f4ecba846defefc8aecfb6214ac45a6d0878f808b1baaa85dcfb4e930ae06e3205bb38855527aee6f259e3327b2253ee3c02d89582602ca5b0570cfc01dc82cc8d1b9d2071eb5db6318749124b02683131f96baec9121383995904c49a02ce2c2451f8038291e5db2dce66663e0a988fb965b156a07debf072fd9d34a9c7c0fc0e0ff5bd63ef766afb76e2b32890032c39c968f486f77f8764301a8479206f063d49eeb9f6d499333e2a1be045161d0af40e6efc165c17d0189bd2d770bdfa0a9b8393cb89113f473a2e948c680ce84accce1ced0de223aa72f760f1b3d13ddfd267938cd63e25308378d320084e1a59090261a7e6bd82544df1eebd96dc87b4eb1211346645fa44d6b932960b441629077e228528f91ca7dc17051bb437408a5ae272d0950e58961846a8fc2ed0d052eca7d732d9f560ba970ca48f67387b899e76958ea6ed342a3a553ef0229e065eea4143325fbbd26967c26a228d51a3a8384062f7434973f15d1da2c010", + "0xb341e3a63e58a188839b242d17f8c9f89d1fb17def62216d598940d64654f69e": "0x0000000000", + "0xb341e3a63e58a188839b242d17f8c9f8b5cab3380174032968897a4c3ce57c0a": "0x00000000", + "0xb8753e9383841da95f7b8871e5de32694e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc602d496d20c019d22397accfc42b7635d94c4156ed6a101ae478a3de3ba70a05fce8a3d67be6fb85f33bfcf2777ab6b10": "0x047374616b696e67200080c6a47e8d0300000000000000000002", + "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc60ffdb9747f7a8bfa200ea2291eea6bdf9492b8c38442c79061bdbb8d38dcd28138938a7fd476edf89ecdec06a5a9d20f": "0x047374616b696e67200080c6a47e8d0300000000000000000002", + "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc611fcf3e922de10898cb04273301735e65270ec35ba01254d8bff046a1a58f16d3ae615c235efd6e99a35f233b2d9df2c": "0x047374616b696e67200080c6a47e8d0300000000000000000002", + "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc615fbc5d9b44885a2dce0fbaa3834ba211e30aa51ad68b8918d2c46e914986818c111bee03582610cbc9fb73fe0e4c413": "0x047374616b696e67200080c6a47e8d0300000000000000000002", + "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc6279effc2672354478fb5e3f7e65726b668728d12a90fb1a9f5b0f0b2814d730401d314964113554e66ff19e7067d7c69": "0x047374616b696e67200080c6a47e8d0300000000000000000002", + "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc62ffe7c0dd7d3d8d8485c403a33fb7adb6ed774481ff68097867271bc8ecaeee3500817ccefdfda74ceeafd32a2259627": "0x047374616b696e67200080c6a47e8d0300000000000000000002", + "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc6350ea875b4c0459b3527d475e9825c99d41a8a9678862ebe9d1a1d59cac1c8430ef31e282f9cb391cf6f2b4d9ce2fd3d": "0x047374616b696e67200080c6a47e8d0300000000000000000002", + "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc64d176c4abc6d2410c43423c2714b909c32eebacd223f4aef33d98a667a68f9e371f40384257c6d31030952b9d94e1152": "0x047374616b696e67200080c6a47e8d0300000000000000000002", + "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc6585bd5ccc1af6cf60c19d791bb091b750efe248e3ddcfcb4f29675b70fc0a8e2db66b65381c45d299427b60d05f76108": "0x047374616b696e67200080c6a47e8d0300000000000000000002", + "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc665bb58c29c9825c1f6727fe8c41650ac82c3105dbd4bb206428d8a8b7ea1f19965a0668dd583b06c3b75daa181fe654c": "0x047374616b696e67200080c6a47e8d0300000000000000000002", + "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc66deaa967a94fa09152be01a253511479d0b4896a63b672a7a74f5234bf9ec8567ff3c5bb8f93795e15e2c498b48d327c": "0x047374616b696e67200080c6a47e8d0300000000000000000002", + "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc6829f3f4d6d7c991993e0c044ae97410b043393e76c137dfdc403a6fd9a2d6129d470d51c5a67bd40517378030c87170d": "0x047374616b696e67200080c6a47e8d0300000000000000000002", + "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc6ba2db252d1b8c64ec51b04d0f50d7d2b9037d1020ed699c2f538d3ffcf0eb98087ee11ca4bd07bfddb0d68633806af74": "0x047374616b696e67200080c6a47e8d0300000000000000000002", + "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc6dfc40f350cc4563ad9ddff5ad92944278eef6710734f5d1e7d2eb303fa8f04e9bef65fb680647b24624723f95b868964": "0x047374616b696e67200080c6a47e8d0300000000000000000002", + "0xc2261276cc9d1f8598ea4b6a74b15c2f4e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0xc2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80": "0x00e4be87ea9ef50f0000000000000000", + "0xca32a41f4b3ed515863dc0a38697f84e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcd710b30bd2eab0352ddcc26417aa1944e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcd710b30bd2eab0352ddcc26417aa1949f4993f016e2d2f8e5f43be7bb259486": "0x00", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb30afd9ad680e7563894c4156ed6a101ae478a3de3ba70a05fce8a3d67be6fb85f33bfcf2777ab6b10": "0x6e60f1e253735fb113c183fa603f591e4456435171f387c0849001b428b5ccb118bd0f67d77f04f1a92400421813d8927fad109b40a8689254a5f0c8b346857cd28145a7cde195a4c834276730d30f074b212a150e770931ee9470e853e7d22402683131f96baec9121383995904c49a02ce2c2451f8038291e5db2dce66663e92ac14f8ad1811cc83861afadf12f3191cca1391f1f3af705977faa2fa2bf46a629f9fd0dd7279c7af7470472d1208a13e33239b484974d47cffce4ad47856440333022898140662dfea847e3cbfe5e989845ac6766e83472f8b0c650d85e77bae", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb30e8cb253c2fa33f382c3105dbd4bb206428d8a8b7ea1f19965a0668dd583b06c3b75daa181fe654c": "0x4c669b04865e9acaf7b72bdfcb0099d70d9ec63c8c2d6b8cb0552815d7b50a0afacb2f987caac6c1290a9784b1efdba78343d39aed805addb12945efbe444000ca3c2703db1633a27eff681d979967988c3a6752c669fd41f1abde10f3b054462253ee3c02d89582602ca5b0570cfc01dc82cc8d1b9d2071eb5db6318749124bf0e6c42698fffc28f9fc769fddcdf165af54c171cde43690cc8f73c853de1f0426e2fc857945d01520797a75388c58e710c9fefedd28387af70880f1682be41e02182879ec92e811e2a8cc117f3cde1f61d3cba0093134cfb1ed17a4ef74915d4a", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb31887a9d70c3dff6e6ed774481ff68097867271bc8ecaeee3500817ccefdfda74ceeafd32a2259627": "0x0509f9caf32fda5584343c473b386c433acb99fd9400724b8cf3c618d840133fb2efe7e70daf44b3466c63ccbf4487f42c6a9f6fbb7050b849691e36ce92e347bef47a9e4b47ed57461e1d28cac7da327a52ebcd64d74080d31deb3ac7a7645e4e1a59090261a7e6bd82544df1eebd96dc87b4eb1211346645fa44d6b932960be4ca45c68b0248885d190d22068c6628ee2f00d9fa0706d5a5c1c8456369f03eaa3955187f755708cd6a8104314b962ff5043e36efa3ec5d84df40c58b44222102f4f4d0eccb899bf2d611b56e0afec7c740efba404f8d0e82a545f988c45316c4", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3198703ff0791c2de1e30aa51ad68b8918d2c46e914986818c111bee03582610cbc9fb73fe0e4c413": "0x5fafb6219eb8d463bec0370b2aab69f45fc780959fc2eddbc7703760aa34202274dacbca0cdb5099afef67e622c147614198e669931cebc605629da332632473b414aa148096a92a1831309f758f944725653363ccbaeb21817b7df5784b8d46c45a6d0878f808b1baaa85dcfb4e930ae06e3205bb38855527aee6f259e3327b2e2f75472708a497d1743f52b04edf26c250d9e6d220f3bae3d176f02f8e586c2ada042fb4bbfd9b6d8c48293ffc4a7722632c843a67e608554c41d06aabc41303a0af06322d100056125fac1df39d161089b07ae279505aae8731c4d110a54ad7", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3260868bcb77241070efe248e3ddcfcb4f29675b70fc0a8e2db66b65381c45d299427b60d05f76108": "0x83f43ee3e4521b55de0fe830847fda88a6b017b87979af1a41b180c39da1e4b05440add43e5388a81aef665c9086d386c0be0ce75e4f8a4a3d8168e976ea821f98aab6f52520022d011a6eba2dca1c6327edbbcd753c170dcf0e9118b5f0f25bd0d052eca7d732d9f560ba970ca48f67387b899e76958ea6ed342a3a553ef0223e547f5cc3455a61d0404d7296ceec7375cbe20322109d118c5e725b1a5cbf04cce3ec06252cf7cdad47fe1265047a9bbddb9059ee4bdc6dec83b67249b4a93403f045328f504c13dac9ddd9b1186098aee7c46cb8d55289dbbf2433bab7a26239", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3572aae990801cce1043393e76c137dfdc403a6fd9a2d6129d470d51c5a67bd40517378030c87170d": "0xc8caee6f6eddc41c6cc55e554343392cbc13d2a8a57b97f6f85fc965bdd20ce8b07d600e3487e2712dcc3879c7b17c9b29cd2243b45f0d9343c591b89cf82a650edf2a41cb81178704560b02c35f5e01a5a97a568ebc10c025ade18b6ab2fa1d161d0af40e6efc165c17d0189bd2d770bdfa0a9b8393cb89113f473a2e948c68def964eed9a73f8a6610f1a0373378dca6f277eb7787869ed5841893105ad930f89c97bf5b2c07c05c84eebce4ffc7b28766946c03741fd1a71fdae0942e87680325fc2095902f5fe394f244bce38b0dc3d631cbc05f0b64d5620a71bbf2514f0f", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb365903e26e594bcd6d41a8a9678862ebe9d1a1d59cac1c8430ef31e282f9cb391cf6f2b4d9ce2fd3d": "0x64adb43a7628139f6c02100f6a5465dbd33422418426c572b12547c5a665008c1ab03b1b3277edfedd24ef3d3359b449b64bd95ed82a04e7f9fbaab7b71dc0152cd12c731d91441f0114b08d314cd3f9a9f7fd0240d467fe54adefbee4d90762441629077e228528f91ca7dc17051bb437408a5ae272d0950e58961846a8fc2ec22ce14ba0e59aa974d4a05c9208ba5ae18674c6a23c9998d91e7d1ebea7e06b9a86227e204a2d003399c2a3b50c2c869c4380c195a014a02f6d2e7048941237029a1eb2e31dcaf468dbb516f9b620fdd7c3f090d58a88e02b51b25255b2182dd1", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3a8a26ecf38bdcfc668728d12a90fb1a9f5b0f0b2814d730401d314964113554e66ff19e7067d7c69": "0x6e309dfa4c8de814cad140b8612a9e41bfba244f9ab1468e1b5d9b3cc1f5e565c44b3e8efe854419ccd5801a82ada22d39cfccdbcece382304cdfeac81ebe402a8a03d86e6c0dbe180cadfc7994121f462b28f7a8cb1be7e0e354147624be7340a988fb965b156a07debf072fd9d34a9c7c0fc0e0ff5bd63ef766afb76e2b3289ef622d2467ed115fa0c6c86303e1ef6a08a0609c97e616aa69b026a6d3f2663729053f28155071474b4686323db5f7a318cb3f088b76660cc8ff5e3e11ec32e030e901c390fa37d101ff25d70594acd2df67b4493ee77a73684f25d39313536d7", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3ab8d3e1fa99ea7e2d0b4896a63b672a7a74f5234bf9ec8567ff3c5bb8f93795e15e2c498b48d327c": "0xc8de3a01502422b59dfa601c9c3a04a98d2bfbd79dd0810d1d1250feab4241ee6248d87bd2a640ffe26d6b831735887c24e2076a3a0f3a74f7ae7568c27604087c03ca47a3201455f8f89defda4aa909cb1d25dd9ddb7fd62a940606f79b566390032c39c968f486f77f8764301a8479206f063d49eeb9f6d499333e2a1be045165f3b255dc17054e6d4447c4005f689eb5ed2f99fe201f4ff799bf088495850047277f22b9ef92a8b99618f4c86c2412f0e3b08a4f965f842775672043d1e2503586dafcdab3d4647d4dc68732a9cab8aa34c00c5edd04e65d9dd44c2a1fd21e2", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3d12736684524574c32eebacd223f4aef33d98a667a68f9e371f40384257c6d31030952b9d94e1152": "0x8270a62b61639ee56113834aecec01de6cda91413a5111b89f74d6585da34f5058108e1651614afc6a535c426fc013945e93533faa33819fe4e69423fe32330274bd654c470ed9b94972c1f997593fab7bdd4d6b85e3cf49401265668142584ead90a2c3fa2c756f974628dd279adb87935f7ea509856276e3b86f759b22451cc083b0d0bd7d6ffd14562b4c9e28738b087ccc32262170c633c18359ff84877992cb05c48fc643f057626c669604675c5ad5a836266f260ae7030c6fdc17a54303aec8e80ea0375f8669d6e55d7abb6a3117678d7bb851a1bd100a01e52a4fed90", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3d30ebbc69dfd05038eef6710734f5d1e7d2eb303fa8f04e9bef65fb680647b24624723f95b868964": "0xe41426f7465c13c48335771c5450bf61c50a9cf28b9274f170c7421eea7974f168a9ec74fa35b3425eaf503dd36294ba8e758e7b8084c4d6bfd547f8c6b5827460fcc9d094d21fe17cfb7426501f50cb3d75c4c9395a3140e0f255443f660d3b9e065eea4143325fbbd26967c26a228d51a3a8384062f7434973f15d1da2c01068f7a83678a377701b46a5e6a4637e99868186ff4835fc0e3914cc56a76a360164ffc83f4f86cc595e607a00b977eeb6641e02a4e6e556c24ab163aecd7d146c03e843f200e30bc5b951c73a96d968db1c0cd05e357d910fce159fc59c40e9d6e2", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3deca1f47c95ad9e99492b8c38442c79061bdbb8d38dcd28138938a7fd476edf89ecdec06a5a9d20f": "0xc9a68a26e9aa37ba6334f1a20275e3be7d3a9d4aa988627eadac8ea0d0a2dfbfae240842b74e5dd778972e451558134f434c7a1d8a52bc70519f38054e24553306bd8fd81e50cda2bd67bf6893d921d1aae5cb08409ae43e0bff4d54e1830e58ea9400f05e7fb75a3f7a92febbf58e5a3060dd06132ed6d5d68a3d75ec452826bed3b452f869d187be58a4ba98588611084283810728fa75981e792beaec4151763d070989ead31f265b40cc7a0cd29d47799b766d6a7f084e44c82baedfc01e029338ece1c6bc6439dc4d16bfe33f28c9f0af31626bb8142849742b7a624f6807", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3e7e316712ac574569037d1020ed699c2f538d3ffcf0eb98087ee11ca4bd07bfddb0d68633806af74": "0xace46e899b90e75199549d8fa2ae7097e896ab3c845217e3155f99b6ffb888037c8348ec95a0faad6a638ef74864761028c53221bde07e9ff7c81a3f427abf3f30c40adee5476157ef3c2a26e10cab95ec7d54b62dd220738f5a474d5f86874e0ce84accce1ced0de223aa72f760f1b3d13ddfd267938cd63e25308378d32008eed33645cda7812cd343bbaef9131b2794812f2fd37701ccb6cddf9c1e293d387aeb767131602e6612e607a9eb8e26b4ce4fa4765593d032bc923ce8acadda420203d51bba2124f480e3507eb1764fc3019ac7abae8ee215683a285078bda7f51d", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3eec11b5fca7cddef5270ec35ba01254d8bff046a1a58f16d3ae615c235efd6e99a35f233b2d9df2c": "0x622c382187c0b2c61ecfb17443294d11a9d2ab770ae6f1fb49184a43906d59fe50412bd7d3f1075e8f8e3b682d05ea20b391c287d8c849a0e49a78f568553e6994848b8cf2cbc9e6fd72db8d80676591b5be4d1ec68972ada48cf6fd01228712303094c583e253794c9db14803585baaa74472f4ecba846defefc8aecfb6214ab400c4164d016282b202c1d42d9dc8ede28cbe4b751d463bab5f23fef42b295a8c15606f4c121376097ff0e96c2a33ea7b024d812b42fe2c741c8b8cee17e63d03d46c454f9b620603feef8c3a2a5d7098205b8566500fda0fa0b456d6ded54538", + "0xcec5070d609dd3497f72bde07fc96ba04e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19500ad445de53dc0cfe6175646980729053f28155071474b4686323db5f7a318cb3f088b76660cc8ff5e3e11ec32e": "0x68728d12a90fb1a9f5b0f0b2814d730401d314964113554e66ff19e7067d7c69", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19501153f927dde4f0796173676e80f0e6c42698fffc28f9fc769fddcdf165af54c171cde43690cc8f73c853de1f04": "0x82c3105dbd4bb206428d8a8b7ea1f19965a0668dd583b06c3b75daa181fe654c", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195012ba4e8c9e90550f6173676e80b400c4164d016282b202c1d42d9dc8ede28cbe4b751d463bab5f23fef42b295a": "0x5270ec35ba01254d8bff046a1a58f16d3ae615c235efd6e99a35f233b2d9df2c", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195016108068be661c046772616e806e309dfa4c8de814cad140b8612a9e41bfba244f9ab1468e1b5d9b3cc1f5e565": "0x68728d12a90fb1a9f5b0f0b2814d730401d314964113554e66ff19e7067d7c69", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195016d5d491326e20327061726180ea9400f05e7fb75a3f7a92febbf58e5a3060dd06132ed6d5d68a3d75ec452826": "0x9492b8c38442c79061bdbb8d38dcd28138938a7fd476edf89ecdec06a5a9d20f", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950172bf7b1d4fd362d62616265806248d87bd2a640ffe26d6b831735887c24e2076a3a0f3a74f7ae7568c2760408": "0xd0b4896a63b672a7a74f5234bf9ec8567ff3c5bb8f93795e15e2c498b48d327c", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19501aeb8a0909a0259a696d6f6e8098aab6f52520022d011a6eba2dca1c6327edbbcd753c170dcf0e9118b5f0f25b": "0x0efe248e3ddcfcb4f29675b70fc0a8e2db66b65381c45d299427b60d05f76108", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950206946fcbcbb55c06772616e800509f9caf32fda5584343c473b386c433acb99fd9400724b8cf3c618d840133f": "0x6ed774481ff68097867271bc8ecaeee3500817ccefdfda74ceeafd32a2259627", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195022df7698c94798dc6261626580facb2f987caac6c1290a9784b1efdba78343d39aed805addb12945efbe444000": "0x82c3105dbd4bb206428d8a8b7ea1f19965a0668dd583b06c3b75daa181fe654c", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19502bf84b6fe354ffa4696d6f6e80bef47a9e4b47ed57461e1d28cac7da327a52ebcd64d74080d31deb3ac7a7645e": "0x6ed774481ff68097867271bc8ecaeee3500817ccefdfda74ceeafd32a2259627", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19502d8e55cbf27bd5fa6175646980763d070989ead31f265b40cc7a0cd29d47799b766d6a7f084e44c82baedfc01e": "0x9492b8c38442c79061bdbb8d38dcd28138938a7fd476edf89ecdec06a5a9d20f", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195033918a92ec5a0337626162658068a9ec74fa35b3425eaf503dd36294ba8e758e7b8084c4d6bfd547f8c6b58274": "0x8eef6710734f5d1e7d2eb303fa8f04e9bef65fb680647b24624723f95b868964", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950365a4d707a6ade5270617261800a988fb965b156a07debf072fd9d34a9c7c0fc0e0ff5bd63ef766afb76e2b328": "0x68728d12a90fb1a9f5b0f0b2814d730401d314964113554e66ff19e7067d7c69", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195036942a186c91d1fb6772616e80e41426f7465c13c48335771c5450bf61c50a9cf28b9274f170c7421eea7974f1": "0x8eef6710734f5d1e7d2eb303fa8f04e9bef65fb680647b24624723f95b868964", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950377ac9e1db771a9a696d6f6e8060fcc9d094d21fe17cfb7426501f50cb3d75c4c9395a3140e0f255443f660d3b": "0x8eef6710734f5d1e7d2eb303fa8f04e9bef65fb680647b24624723f95b868964", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19503a73714b16fa1b3b62616265805440add43e5388a81aef665c9086d386c0be0ce75e4f8a4a3d8168e976ea821f": "0x0efe248e3ddcfcb4f29675b70fc0a8e2db66b65381c45d299427b60d05f76108", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195042faced8513a5a6162656566840325fc2095902f5fe394f244bce38b0dc3d631cbc05f0b64d5620a71bbf2514f0f": "0x043393e76c137dfdc403a6fd9a2d6129d470d51c5a67bd40517378030c87170d", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195047d6f38d0fa588e4617564698026e2fc857945d01520797a75388c58e710c9fefedd28387af70880f1682be41e": "0x82c3105dbd4bb206428d8a8b7ea1f19965a0668dd583b06c3b75daa181fe654c", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950486e2fc6fe1baf7d62656566840333022898140662dfea847e3cbfe5e989845ac6766e83472f8b0c650d85e77bae": "0x94c4156ed6a101ae478a3de3ba70a05fce8a3d67be6fb85f33bfcf2777ab6b10", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195048ac54571b914843626565668403e843f200e30bc5b951c73a96d968db1c0cd05e357d910fce159fc59c40e9d6e2": "0x8eef6710734f5d1e7d2eb303fa8f04e9bef65fb680647b24624723f95b868964", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19504d5070934a9a468e6261626580b07d600e3487e2712dcc3879c7b17c9b29cd2243b45f0d9343c591b89cf82a65": "0x043393e76c137dfdc403a6fd9a2d6129d470d51c5a67bd40517378030c87170d", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19504f6e7e79cc9e4f1c6772616e8064adb43a7628139f6c02100f6a5465dbd33422418426c572b12547c5a665008c": "0xd41a8a9678862ebe9d1a1d59cac1c8430ef31e282f9cb391cf6f2b4d9ce2fd3d", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19504fbe8be23f344f7a6173676e809ef622d2467ed115fa0c6c86303e1ef6a08a0609c97e616aa69b026a6d3f2663": "0x68728d12a90fb1a9f5b0f0b2814d730401d314964113554e66ff19e7067d7c69", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19505214a412d15781646173676e8068f7a83678a377701b46a5e6a4637e99868186ff4835fc0e3914cc56a76a3601": "0x8eef6710734f5d1e7d2eb303fa8f04e9bef65fb680647b24624723f95b868964", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950523f922d3cd709c261756469809a86227e204a2d003399c2a3b50c2c869c4380c195a014a02f6d2e7048941237": "0xd41a8a9678862ebe9d1a1d59cac1c8430ef31e282f9cb391cf6f2b4d9ce2fd3d", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195053557db7980560f461756469802ada042fb4bbfd9b6d8c48293ffc4a7722632c843a67e608554c41d06aabc413": "0x1e30aa51ad68b8918d2c46e914986818c111bee03582610cbc9fb73fe0e4c413", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19505bb3161fb65601ff626162658058108e1651614afc6a535c426fc013945e93533faa33819fe4e69423fe323302": "0x32eebacd223f4aef33d98a667a68f9e371f40384257c6d31030952b9d94e1152", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19505d3dc734864e36256265656684029338ece1c6bc6439dc4d16bfe33f28c9f0af31626bb8142849742b7a624f6807": "0x9492b8c38442c79061bdbb8d38dcd28138938a7fd476edf89ecdec06a5a9d20f", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19505d9ac86ecdf920c170617261804e1a59090261a7e6bd82544df1eebd96dc87b4eb1211346645fa44d6b932960b": "0x6ed774481ff68097867271bc8ecaeee3500817ccefdfda74ceeafd32a2259627", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195062a6c483038fd12d6265656684030e901c390fa37d101ff25d70594acd2df67b4493ee77a73684f25d39313536d7": "0x68728d12a90fb1a9f5b0f0b2814d730401d314964113554e66ff19e7067d7c69", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195064cc468ab603f8926772616e80c9a68a26e9aa37ba6334f1a20275e3be7d3a9d4aa988627eadac8ea0d0a2dfbf": "0x9492b8c38442c79061bdbb8d38dcd28138938a7fd476edf89ecdec06a5a9d20f", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195065ccc9ce9f581b2c61756469807aeb767131602e6612e607a9eb8e26b4ce4fa4765593d032bc923ce8acadda42": "0x9037d1020ed699c2f538d3ffcf0eb98087ee11ca4bd07bfddb0d68633806af74", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950678c21325827e7c66173676e802e2f75472708a497d1743f52b04edf26c250d9e6d220f3bae3d176f02f8e586c": "0x1e30aa51ad68b8918d2c46e914986818c111bee03582610cbc9fb73fe0e4c413", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19506792a176f707220962616265801ab03b1b3277edfedd24ef3d3359b449b64bd95ed82a04e7f9fbaab7b71dc015": "0xd41a8a9678862ebe9d1a1d59cac1c8430ef31e282f9cb391cf6f2b4d9ce2fd3d", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195067f9bb125e8b25cf696d6f6e802cd12c731d91441f0114b08d314cd3f9a9f7fd0240d467fe54adefbee4d90762": "0xd41a8a9678862ebe9d1a1d59cac1c8430ef31e282f9cb391cf6f2b4d9ce2fd3d", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195068d2c0f060d8e93b6772616e806e60f1e253735fb113c183fa603f591e4456435171f387c0849001b428b5ccb1": "0x94c4156ed6a101ae478a3de3ba70a05fce8a3d67be6fb85f33bfcf2777ab6b10", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195069561cd534084d42696d6f6e80b414aa148096a92a1831309f758f944725653363ccbaeb21817b7df5784b8d46": "0x1e30aa51ad68b8918d2c46e914986818c111bee03582610cbc9fb73fe0e4c413", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950717bb541f3dc932d6772616e80c8de3a01502422b59dfa601c9c3a04a98d2bfbd79dd0810d1d1250feab4241ee": "0xd0b4896a63b672a7a74f5234bf9ec8567ff3c5bb8f93795e15e2c498b48d327c", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19507180ab4d5ffe8c79706172618090032c39c968f486f77f8764301a8479206f063d49eeb9f6d499333e2a1be045": "0xd0b4896a63b672a7a74f5234bf9ec8567ff3c5bb8f93795e15e2c498b48d327c", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195073b0d3d9242f219d70617261800ce84accce1ced0de223aa72f760f1b3d13ddfd267938cd63e25308378d32008": "0x9037d1020ed699c2f538d3ffcf0eb98087ee11ca4bd07bfddb0d68633806af74", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19507466b8cede2256a27061726180ad90a2c3fa2c756f974628dd279adb87935f7ea509856276e3b86f759b22451c": "0x32eebacd223f4aef33d98a667a68f9e371f40384257c6d31030952b9d94e1152", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950749c8bce91e643ae6772616e808270a62b61639ee56113834aecec01de6cda91413a5111b89f74d6585da34f50": "0x32eebacd223f4aef33d98a667a68f9e371f40384257c6d31030952b9d94e1152", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950795802224826305461756469808c15606f4c121376097ff0e96c2a33ea7b024d812b42fe2c741c8b8cee17e63d": "0x5270ec35ba01254d8bff046a1a58f16d3ae615c235efd6e99a35f233b2d9df2c", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19507e5838eaecbd9fe66175646980629f9fd0dd7279c7af7470472d1208a13e33239b484974d47cffce4ad4785644": "0x94c4156ed6a101ae478a3de3ba70a05fce8a3d67be6fb85f33bfcf2777ab6b10", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195085436b71cc38efc86173676e80e4ca45c68b0248885d190d22068c6628ee2f00d9fa0706d5a5c1c8456369f03e": "0x6ed774481ff68097867271bc8ecaeee3500817ccefdfda74ceeafd32a2259627", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195087f680d5c3a7dcbf617564698064ffc83f4f86cc595e607a00b977eeb6641e02a4e6e556c24ab163aecd7d146c": "0x8eef6710734f5d1e7d2eb303fa8f04e9bef65fb680647b24624723f95b868964", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950892d429df08b8e486772616e805fafb6219eb8d463bec0370b2aab69f45fc780959fc2eddbc7703760aa342022": "0x1e30aa51ad68b8918d2c46e914986818c111bee03582610cbc9fb73fe0e4c413", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19508cec3cc48ae13ec86173676e80def964eed9a73f8a6610f1a0373378dca6f277eb7787869ed5841893105ad930": "0x043393e76c137dfdc403a6fd9a2d6129d470d51c5a67bd40517378030c87170d", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195090ddc04de598f6716772616e8083f43ee3e4521b55de0fe830847fda88a6b017b87979af1a41b180c39da1e4b0": "0x0efe248e3ddcfcb4f29675b70fc0a8e2db66b65381c45d299427b60d05f76108", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950961fc927b0be61a66175646980f89c97bf5b2c07c05c84eebce4ffc7b28766946c03741fd1a71fdae0942e8768": "0x043393e76c137dfdc403a6fd9a2d6129d470d51c5a67bd40517378030c87170d", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195097b423b109a1a3e7626565668403a0af06322d100056125fac1df39d161089b07ae279505aae8731c4d110a54ad7": "0x1e30aa51ad68b8918d2c46e914986818c111bee03582610cbc9fb73fe0e4c413", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19509990e89dc7508f8f626565668403d46c454f9b620603feef8c3a2a5d7098205b8566500fda0fa0b456d6ded54538": "0x5270ec35ba01254d8bff046a1a58f16d3ae615c235efd6e99a35f233b2d9df2c", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19509c34aadd3112cff46772616e80c8caee6f6eddc41c6cc55e554343392cbc13d2a8a57b97f6f85fc965bdd20ce8": "0x043393e76c137dfdc403a6fd9a2d6129d470d51c5a67bd40517378030c87170d", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19509cc6d5a70d4342de706172618002683131f96baec9121383995904c49a02ce2c2451f8038291e5db2dce66663e": "0x94c4156ed6a101ae478a3de3ba70a05fce8a3d67be6fb85f33bfcf2777ab6b10", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19509d726f19fb7e918f6173676e80c083b0d0bd7d6ffd14562b4c9e28738b087ccc32262170c633c18359ff848779": "0x32eebacd223f4aef33d98a667a68f9e371f40384257c6d31030952b9d94e1152", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19509f08b41b3412bdf7696d6f6e8074bd654c470ed9b94972c1f997593fab7bdd4d6b85e3cf49401265668142584e": "0x32eebacd223f4aef33d98a667a68f9e371f40384257c6d31030952b9d94e1152", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19509f796bfaa6092095696d6f6e800edf2a41cb81178704560b02c35f5e01a5a97a568ebc10c025ade18b6ab2fa1d": "0x043393e76c137dfdc403a6fd9a2d6129d470d51c5a67bd40517378030c87170d", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950a0aff76314285afe6173676e803e547f5cc3455a61d0404d7296ceec7375cbe20322109d118c5e725b1a5cbf04": "0x0efe248e3ddcfcb4f29675b70fc0a8e2db66b65381c45d299427b60d05f76108", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950a39a50629306361270617261809e065eea4143325fbbd26967c26a228d51a3a8384062f7434973f15d1da2c010": "0x8eef6710734f5d1e7d2eb303fa8f04e9bef65fb680647b24624723f95b868964", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950a69397f216a7497a6261626580ae240842b74e5dd778972e451558134f434c7a1d8a52bc70519f38054e245533": "0x9492b8c38442c79061bdbb8d38dcd28138938a7fd476edf89ecdec06a5a9d20f", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950a8670a2360fb4f7d626565668402f4f4d0eccb899bf2d611b56e0afec7c740efba404f8d0e82a545f988c45316c4": "0x6ed774481ff68097867271bc8ecaeee3500817ccefdfda74ceeafd32a2259627", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950ab8402a39318e10f70617261802253ee3c02d89582602ca5b0570cfc01dc82cc8d1b9d2071eb5db6318749124b": "0x82c3105dbd4bb206428d8a8b7ea1f19965a0668dd583b06c3b75daa181fe654c", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950aba2e02edcf42d916175646980cce3ec06252cf7cdad47fe1265047a9bbddb9059ee4bdc6dec83b67249b4a934": "0x0efe248e3ddcfcb4f29675b70fc0a8e2db66b65381c45d299427b60d05f76108", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950ac3745478a256f54696d6f6e8094848b8cf2cbc9e6fd72db8d80676591b5be4d1ec68972ada48cf6fd01228712": "0x5270ec35ba01254d8bff046a1a58f16d3ae615c235efd6e99a35f233b2d9df2c", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950ae71ab667a6367956173676e80bed3b452f869d187be58a4ba98588611084283810728fa75981e792beaec4151": "0x9492b8c38442c79061bdbb8d38dcd28138938a7fd476edf89ecdec06a5a9d20f", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950aee25d4290ea4d846772616e804c669b04865e9acaf7b72bdfcb0099d70d9ec63c8c2d6b8cb0552815d7b50a0a": "0x82c3105dbd4bb206428d8a8b7ea1f19965a0668dd583b06c3b75daa181fe654c", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950b090c0a6a6d34dc97061726180441629077e228528f91ca7dc17051bb437408a5ae272d0950e58961846a8fc2e": "0xd41a8a9678862ebe9d1a1d59cac1c8430ef31e282f9cb391cf6f2b4d9ce2fd3d", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950b40a2e291d3757e66265656684029a1eb2e31dcaf468dbb516f9b620fdd7c3f090d58a88e02b51b25255b2182dd1": "0xd41a8a9678862ebe9d1a1d59cac1c8430ef31e282f9cb391cf6f2b4d9ce2fd3d", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950b469b5316f2df49e626162658018bd0f67d77f04f1a92400421813d8927fad109b40a8689254a5f0c8b346857c": "0x94c4156ed6a101ae478a3de3ba70a05fce8a3d67be6fb85f33bfcf2777ab6b10", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950b6da07aad040c4596772616e80ace46e899b90e75199549d8fa2ae7097e896ab3c845217e3155f99b6ffb88803": "0x9037d1020ed699c2f538d3ffcf0eb98087ee11ca4bd07bfddb0d68633806af74", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950b9847e90f2a93d58626565668403aec8e80ea0375f8669d6e55d7abb6a3117678d7bb851a1bd100a01e52a4fed90": "0x32eebacd223f4aef33d98a667a68f9e371f40384257c6d31030952b9d94e1152", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950bad6b6ae80666780696d6f6e8006bd8fd81e50cda2bd67bf6893d921d1aae5cb08409ae43e0bff4d54e1830e58": "0x9492b8c38442c79061bdbb8d38dcd28138938a7fd476edf89ecdec06a5a9d20f", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950bd1ab2cd6f1dc5a6696d6f6e80d28145a7cde195a4c834276730d30f074b212a150e770931ee9470e853e7d224": "0x94c4156ed6a101ae478a3de3ba70a05fce8a3d67be6fb85f33bfcf2777ab6b10", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950bdd996f23001764e62656566840203d51bba2124f480e3507eb1764fc3019ac7abae8ee215683a285078bda7f51d": "0x9037d1020ed699c2f538d3ffcf0eb98087ee11ca4bd07bfddb0d68633806af74", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950be81b84f18801f516173676e80165f3b255dc17054e6d4447c4005f689eb5ed2f99fe201f4ff799bf088495850": "0xd0b4896a63b672a7a74f5234bf9ec8567ff3c5bb8f93795e15e2c498b48d327c", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950bef85ee78e59fe8a6173676e80eed33645cda7812cd343bbaef9131b2794812f2fd37701ccb6cddf9c1e293d38": "0x9037d1020ed699c2f538d3ffcf0eb98087ee11ca4bd07bfddb0d68633806af74", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950bfb5b848b461277c7061726180c45a6d0878f808b1baaa85dcfb4e930ae06e3205bb38855527aee6f259e3327b": "0x1e30aa51ad68b8918d2c46e914986818c111bee03582610cbc9fb73fe0e4c413", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950c1cabf91e699980a6261626580b2efe7e70daf44b3466c63ccbf4487f42c6a9f6fbb7050b849691e36ce92e347": "0x6ed774481ff68097867271bc8ecaeee3500817ccefdfda74ceeafd32a2259627", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950c2bef1fa94927270626565668403f045328f504c13dac9ddd9b1186098aee7c46cb8d55289dbbf2433bab7a26239": "0x0efe248e3ddcfcb4f29675b70fc0a8e2db66b65381c45d299427b60d05f76108", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950c3b366be127c04d76772616e80622c382187c0b2c61ecfb17443294d11a9d2ab770ae6f1fb49184a43906d59fe": "0x5270ec35ba01254d8bff046a1a58f16d3ae615c235efd6e99a35f233b2d9df2c", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950c61ff1db24ad5e86626565668402182879ec92e811e2a8cc117f3cde1f61d3cba0093134cfb1ed17a4ef74915d4a": "0x82c3105dbd4bb206428d8a8b7ea1f19965a0668dd583b06c3b75daa181fe654c", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950cb18236e84f2bcc8626565668403586dafcdab3d4647d4dc68732a9cab8aa34c00c5edd04e65d9dd44c2a1fd21e2": "0xd0b4896a63b672a7a74f5234bf9ec8567ff3c5bb8f93795e15e2c498b48d327c", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950d1c1264edac2bfeb7061726180303094c583e253794c9db14803585baaa74472f4ecba846defefc8aecfb6214a": "0x5270ec35ba01254d8bff046a1a58f16d3ae615c235efd6e99a35f233b2d9df2c", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950d4b8d8139a9d2a3862616265807c8348ec95a0faad6a638ef74864761028c53221bde07e9ff7c81a3f427abf3f": "0x9037d1020ed699c2f538d3ffcf0eb98087ee11ca4bd07bfddb0d68633806af74", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950d5b902094e722e906261626580c44b3e8efe854419ccd5801a82ada22d39cfccdbcece382304cdfeac81ebe402": "0x68728d12a90fb1a9f5b0f0b2814d730401d314964113554e66ff19e7067d7c69", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950d74338095b2b3a5f7061726180161d0af40e6efc165c17d0189bd2d770bdfa0a9b8393cb89113f473a2e948c68": "0x043393e76c137dfdc403a6fd9a2d6129d470d51c5a67bd40517378030c87170d", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950d84b213ff11dcdc96175646980047277f22b9ef92a8b99618f4c86c2412f0e3b08a4f965f842775672043d1e25": "0xd0b4896a63b672a7a74f5234bf9ec8567ff3c5bb8f93795e15e2c498b48d327c", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950d912f1fd94200c50696d6f6e8030c40adee5476157ef3c2a26e10cab95ec7d54b62dd220738f5a474d5f86874e": "0x9037d1020ed699c2f538d3ffcf0eb98087ee11ca4bd07bfddb0d68633806af74", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950db189b9054ee003e6175646980aa3955187f755708cd6a8104314b962ff5043e36efa3ec5d84df40c58b442221": "0x6ed774481ff68097867271bc8ecaeee3500817ccefdfda74ceeafd32a2259627", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950dd45ac2fed4ab0db6173676e8092ac14f8ad1811cc83861afadf12f3191cca1391f1f3af705977faa2fa2bf46a": "0x94c4156ed6a101ae478a3de3ba70a05fce8a3d67be6fb85f33bfcf2777ab6b10", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950dfe86daa30500684696d6f6e80ca3c2703db1633a27eff681d979967988c3a6752c669fd41f1abde10f3b05446": "0x82c3105dbd4bb206428d8a8b7ea1f19965a0668dd583b06c3b75daa181fe654c", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950e326352daf693946617564698092cb05c48fc643f057626c669604675c5ad5a836266f260ae7030c6fdc17a543": "0x32eebacd223f4aef33d98a667a68f9e371f40384257c6d31030952b9d94e1152", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950ec74f4b6dbe6f07e626162658074dacbca0cdb5099afef67e622c147614198e669931cebc605629da332632473": "0x1e30aa51ad68b8918d2c46e914986818c111bee03582610cbc9fb73fe0e4c413", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950f10dac37e2a0f812696d6f6e80a8a03d86e6c0dbe180cadfc7994121f462b28f7a8cb1be7e0e354147624be734": "0x68728d12a90fb1a9f5b0f0b2814d730401d314964113554e66ff19e7067d7c69", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950f39a56e067ee2ba9696d6f6e807c03ca47a3201455f8f89defda4aa909cb1d25dd9ddb7fd62a940606f79b5663": "0xd0b4896a63b672a7a74f5234bf9ec8567ff3c5bb8f93795e15e2c498b48d327c", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950f87aebc04f6a52ae6173676e80c22ce14ba0e59aa974d4a05c9208ba5ae18674c6a23c9998d91e7d1ebea7e06b": "0xd41a8a9678862ebe9d1a1d59cac1c8430ef31e282f9cb391cf6f2b4d9ce2fd3d", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950fc36b10abae8cf4f626162658050412bd7d3f1075e8f8e3b682d05ea20b391c287d8c849a0e49a78f568553e69": "0x5270ec35ba01254d8bff046a1a58f16d3ae615c235efd6e99a35f233b2d9df2c", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950fcf43201be771ed27061726180d0d052eca7d732d9f560ba970ca48f67387b899e76958ea6ed342a3a553ef022": "0x0efe248e3ddcfcb4f29675b70fc0a8e2db66b65381c45d299427b60d05f76108", + "0xcec5070d609dd3497f72bde07fc96ba088dcde934c658227ee1dfafcd6e16903": "0x38043393e76c137dfdc403a6fd9a2d6129d470d51c5a67bd40517378030c87170d0efe248e3ddcfcb4f29675b70fc0a8e2db66b65381c45d299427b60d05f761081e30aa51ad68b8918d2c46e914986818c111bee03582610cbc9fb73fe0e4c41332eebacd223f4aef33d98a667a68f9e371f40384257c6d31030952b9d94e11525270ec35ba01254d8bff046a1a58f16d3ae615c235efd6e99a35f233b2d9df2c68728d12a90fb1a9f5b0f0b2814d730401d314964113554e66ff19e7067d7c696ed774481ff68097867271bc8ecaeee3500817ccefdfda74ceeafd32a225962782c3105dbd4bb206428d8a8b7ea1f19965a0668dd583b06c3b75daa181fe654c8eef6710734f5d1e7d2eb303fa8f04e9bef65fb680647b24624723f95b8689649037d1020ed699c2f538d3ffcf0eb98087ee11ca4bd07bfddb0d68633806af749492b8c38442c79061bdbb8d38dcd28138938a7fd476edf89ecdec06a5a9d20f94c4156ed6a101ae478a3de3ba70a05fce8a3d67be6fb85f33bfcf2777ab6b10d0b4896a63b672a7a74f5234bf9ec8567ff3c5bb8f93795e15e2c498b48d327cd41a8a9678862ebe9d1a1d59cac1c8430ef31e282f9cb391cf6f2b4d9ce2fd3d", + "0xcec5070d609dd3497f72bde07fc96ba0e0cdd062e6eaf24295ad4ccfc41d4609": "0x38043393e76c137dfdc403a6fd9a2d6129d470d51c5a67bd40517378030c87170dc8caee6f6eddc41c6cc55e554343392cbc13d2a8a57b97f6f85fc965bdd20ce8b07d600e3487e2712dcc3879c7b17c9b29cd2243b45f0d9343c591b89cf82a650edf2a41cb81178704560b02c35f5e01a5a97a568ebc10c025ade18b6ab2fa1d161d0af40e6efc165c17d0189bd2d770bdfa0a9b8393cb89113f473a2e948c68def964eed9a73f8a6610f1a0373378dca6f277eb7787869ed5841893105ad930f89c97bf5b2c07c05c84eebce4ffc7b28766946c03741fd1a71fdae0942e87680325fc2095902f5fe394f244bce38b0dc3d631cbc05f0b64d5620a71bbf2514f0f0efe248e3ddcfcb4f29675b70fc0a8e2db66b65381c45d299427b60d05f7610883f43ee3e4521b55de0fe830847fda88a6b017b87979af1a41b180c39da1e4b05440add43e5388a81aef665c9086d386c0be0ce75e4f8a4a3d8168e976ea821f98aab6f52520022d011a6eba2dca1c6327edbbcd753c170dcf0e9118b5f0f25bd0d052eca7d732d9f560ba970ca48f67387b899e76958ea6ed342a3a553ef0223e547f5cc3455a61d0404d7296ceec7375cbe20322109d118c5e725b1a5cbf04cce3ec06252cf7cdad47fe1265047a9bbddb9059ee4bdc6dec83b67249b4a93403f045328f504c13dac9ddd9b1186098aee7c46cb8d55289dbbf2433bab7a262391e30aa51ad68b8918d2c46e914986818c111bee03582610cbc9fb73fe0e4c4135fafb6219eb8d463bec0370b2aab69f45fc780959fc2eddbc7703760aa34202274dacbca0cdb5099afef67e622c147614198e669931cebc605629da332632473b414aa148096a92a1831309f758f944725653363ccbaeb21817b7df5784b8d46c45a6d0878f808b1baaa85dcfb4e930ae06e3205bb38855527aee6f259e3327b2e2f75472708a497d1743f52b04edf26c250d9e6d220f3bae3d176f02f8e586c2ada042fb4bbfd9b6d8c48293ffc4a7722632c843a67e608554c41d06aabc41303a0af06322d100056125fac1df39d161089b07ae279505aae8731c4d110a54ad732eebacd223f4aef33d98a667a68f9e371f40384257c6d31030952b9d94e11528270a62b61639ee56113834aecec01de6cda91413a5111b89f74d6585da34f5058108e1651614afc6a535c426fc013945e93533faa33819fe4e69423fe32330274bd654c470ed9b94972c1f997593fab7bdd4d6b85e3cf49401265668142584ead90a2c3fa2c756f974628dd279adb87935f7ea509856276e3b86f759b22451cc083b0d0bd7d6ffd14562b4c9e28738b087ccc32262170c633c18359ff84877992cb05c48fc643f057626c669604675c5ad5a836266f260ae7030c6fdc17a54303aec8e80ea0375f8669d6e55d7abb6a3117678d7bb851a1bd100a01e52a4fed905270ec35ba01254d8bff046a1a58f16d3ae615c235efd6e99a35f233b2d9df2c622c382187c0b2c61ecfb17443294d11a9d2ab770ae6f1fb49184a43906d59fe50412bd7d3f1075e8f8e3b682d05ea20b391c287d8c849a0e49a78f568553e6994848b8cf2cbc9e6fd72db8d80676591b5be4d1ec68972ada48cf6fd01228712303094c583e253794c9db14803585baaa74472f4ecba846defefc8aecfb6214ab400c4164d016282b202c1d42d9dc8ede28cbe4b751d463bab5f23fef42b295a8c15606f4c121376097ff0e96c2a33ea7b024d812b42fe2c741c8b8cee17e63d03d46c454f9b620603feef8c3a2a5d7098205b8566500fda0fa0b456d6ded5453868728d12a90fb1a9f5b0f0b2814d730401d314964113554e66ff19e7067d7c696e309dfa4c8de814cad140b8612a9e41bfba244f9ab1468e1b5d9b3cc1f5e565c44b3e8efe854419ccd5801a82ada22d39cfccdbcece382304cdfeac81ebe402a8a03d86e6c0dbe180cadfc7994121f462b28f7a8cb1be7e0e354147624be7340a988fb965b156a07debf072fd9d34a9c7c0fc0e0ff5bd63ef766afb76e2b3289ef622d2467ed115fa0c6c86303e1ef6a08a0609c97e616aa69b026a6d3f2663729053f28155071474b4686323db5f7a318cb3f088b76660cc8ff5e3e11ec32e030e901c390fa37d101ff25d70594acd2df67b4493ee77a73684f25d39313536d76ed774481ff68097867271bc8ecaeee3500817ccefdfda74ceeafd32a22596270509f9caf32fda5584343c473b386c433acb99fd9400724b8cf3c618d840133fb2efe7e70daf44b3466c63ccbf4487f42c6a9f6fbb7050b849691e36ce92e347bef47a9e4b47ed57461e1d28cac7da327a52ebcd64d74080d31deb3ac7a7645e4e1a59090261a7e6bd82544df1eebd96dc87b4eb1211346645fa44d6b932960be4ca45c68b0248885d190d22068c6628ee2f00d9fa0706d5a5c1c8456369f03eaa3955187f755708cd6a8104314b962ff5043e36efa3ec5d84df40c58b44222102f4f4d0eccb899bf2d611b56e0afec7c740efba404f8d0e82a545f988c45316c482c3105dbd4bb206428d8a8b7ea1f19965a0668dd583b06c3b75daa181fe654c4c669b04865e9acaf7b72bdfcb0099d70d9ec63c8c2d6b8cb0552815d7b50a0afacb2f987caac6c1290a9784b1efdba78343d39aed805addb12945efbe444000ca3c2703db1633a27eff681d979967988c3a6752c669fd41f1abde10f3b054462253ee3c02d89582602ca5b0570cfc01dc82cc8d1b9d2071eb5db6318749124bf0e6c42698fffc28f9fc769fddcdf165af54c171cde43690cc8f73c853de1f0426e2fc857945d01520797a75388c58e710c9fefedd28387af70880f1682be41e02182879ec92e811e2a8cc117f3cde1f61d3cba0093134cfb1ed17a4ef74915d4a8eef6710734f5d1e7d2eb303fa8f04e9bef65fb680647b24624723f95b868964e41426f7465c13c48335771c5450bf61c50a9cf28b9274f170c7421eea7974f168a9ec74fa35b3425eaf503dd36294ba8e758e7b8084c4d6bfd547f8c6b5827460fcc9d094d21fe17cfb7426501f50cb3d75c4c9395a3140e0f255443f660d3b9e065eea4143325fbbd26967c26a228d51a3a8384062f7434973f15d1da2c01068f7a83678a377701b46a5e6a4637e99868186ff4835fc0e3914cc56a76a360164ffc83f4f86cc595e607a00b977eeb6641e02a4e6e556c24ab163aecd7d146c03e843f200e30bc5b951c73a96d968db1c0cd05e357d910fce159fc59c40e9d6e29037d1020ed699c2f538d3ffcf0eb98087ee11ca4bd07bfddb0d68633806af74ace46e899b90e75199549d8fa2ae7097e896ab3c845217e3155f99b6ffb888037c8348ec95a0faad6a638ef74864761028c53221bde07e9ff7c81a3f427abf3f30c40adee5476157ef3c2a26e10cab95ec7d54b62dd220738f5a474d5f86874e0ce84accce1ced0de223aa72f760f1b3d13ddfd267938cd63e25308378d32008eed33645cda7812cd343bbaef9131b2794812f2fd37701ccb6cddf9c1e293d387aeb767131602e6612e607a9eb8e26b4ce4fa4765593d032bc923ce8acadda420203d51bba2124f480e3507eb1764fc3019ac7abae8ee215683a285078bda7f51d9492b8c38442c79061bdbb8d38dcd28138938a7fd476edf89ecdec06a5a9d20fc9a68a26e9aa37ba6334f1a20275e3be7d3a9d4aa988627eadac8ea0d0a2dfbfae240842b74e5dd778972e451558134f434c7a1d8a52bc70519f38054e24553306bd8fd81e50cda2bd67bf6893d921d1aae5cb08409ae43e0bff4d54e1830e58ea9400f05e7fb75a3f7a92febbf58e5a3060dd06132ed6d5d68a3d75ec452826bed3b452f869d187be58a4ba98588611084283810728fa75981e792beaec4151763d070989ead31f265b40cc7a0cd29d47799b766d6a7f084e44c82baedfc01e029338ece1c6bc6439dc4d16bfe33f28c9f0af31626bb8142849742b7a624f680794c4156ed6a101ae478a3de3ba70a05fce8a3d67be6fb85f33bfcf2777ab6b106e60f1e253735fb113c183fa603f591e4456435171f387c0849001b428b5ccb118bd0f67d77f04f1a92400421813d8927fad109b40a8689254a5f0c8b346857cd28145a7cde195a4c834276730d30f074b212a150e770931ee9470e853e7d22402683131f96baec9121383995904c49a02ce2c2451f8038291e5db2dce66663e92ac14f8ad1811cc83861afadf12f3191cca1391f1f3af705977faa2fa2bf46a629f9fd0dd7279c7af7470472d1208a13e33239b484974d47cffce4ad47856440333022898140662dfea847e3cbfe5e989845ac6766e83472f8b0c650d85e77baed0b4896a63b672a7a74f5234bf9ec8567ff3c5bb8f93795e15e2c498b48d327cc8de3a01502422b59dfa601c9c3a04a98d2bfbd79dd0810d1d1250feab4241ee6248d87bd2a640ffe26d6b831735887c24e2076a3a0f3a74f7ae7568c27604087c03ca47a3201455f8f89defda4aa909cb1d25dd9ddb7fd62a940606f79b566390032c39c968f486f77f8764301a8479206f063d49eeb9f6d499333e2a1be045165f3b255dc17054e6d4447c4005f689eb5ed2f99fe201f4ff799bf088495850047277f22b9ef92a8b99618f4c86c2412f0e3b08a4f965f842775672043d1e2503586dafcdab3d4647d4dc68732a9cab8aa34c00c5edd04e65d9dd44c2a1fd21e2d41a8a9678862ebe9d1a1d59cac1c8430ef31e282f9cb391cf6f2b4d9ce2fd3d64adb43a7628139f6c02100f6a5465dbd33422418426c572b12547c5a665008c1ab03b1b3277edfedd24ef3d3359b449b64bd95ed82a04e7f9fbaab7b71dc0152cd12c731d91441f0114b08d314cd3f9a9f7fd0240d467fe54adefbee4d90762441629077e228528f91ca7dc17051bb437408a5ae272d0950e58961846a8fc2ec22ce14ba0e59aa974d4a05c9208ba5ae18674c6a23c9998d91e7d1ebea7e06b9a86227e204a2d003399c2a3b50c2c869c4380c195a014a02f6d2e7048941237029a1eb2e31dcaf468dbb516f9b620fdd7c3f090d58a88e02b51b25255b2182dd1", + "0xd57bce545fb382c34570e5dfbf338f5e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xd5c41b52a371aa36c9254ce34324f2a54e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0xd5e1a2fa16732ce6906189438c0a82c64e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xd8f314b7f4e6b095f0f8ee4656a448254e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0xede8e4fdc3c8b556f0ce2f77fc2575e34e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0xedfb05b766f199ce00df85317e33050e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xf0c365c3cf59d671eb72da0e7a4113c44e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xf5a4963e4efb097983d7a693b0c1ee454e7b9012096b41c4eb3aaf947f6ea429": "0x0100" + }, + "childrenDefault": {} + } + } +} \ No newline at end of file diff --git a/runtime/common/Cargo.toml b/runtime/common/Cargo.toml new file mode 100644 index 0000000000..3fbd9c3a06 --- /dev/null +++ b/runtime/common/Cargo.toml @@ -0,0 +1,97 @@ +[package] +authors = ["Frequency"] +description = "Common Runtime for Frequency parachain" +edition = "2021" +homepage = "https://frequency.xyz" +license = "Apache-2.0" +name = "common-runtime" +repository = "https://github.com/frequency-chain/frequency/" +version = "0.0.0" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[dependencies] +# Frequency +parity-scale-codec = { workspace = true, features = ["derive"] } +common-primitives = { default-features = false, path = "../../common/primitives" } +scale-info = { workspace = true, features = ["derive"] } +smallvec = { workspace = true } +# Substrate +frame-support = { workspace = true } +frame-system = { workspace = true } +sp-core = { workspace = true } +sp-weights = { workspace = true } +sp-runtime = { workspace = true } +# Substrate pallets +pallet-balances = { workspace = true } +pallet-collective = { workspace = true } +pallet-democracy = { workspace = true } +pallet-multisig = { workspace = true } +pallet-preimage = { workspace = true } +pallet-scheduler = { workspace = true } +pallet-session = { workspace = true } +pallet-sudo = { workspace = true } +pallet-timestamp = { workspace = true } +pallet-transaction-payment = { workspace = true } +pallet-utility = { workspace = true } +pallet-proxy = { workspace = true } +# cumulus +cumulus-pallet-weight-reclaim = { workspace = true } +cumulus-primitives-core = { workspace = true } +pallet-collator-selection = { workspace = true } +pallet-time-release = { path = "../../pallets/time-release", default-features = false } +pallet-treasury = { path = "../../pallets/treasury", default-features = false } + +[features] +default = ["std"] +frequency = [] +frequency-testnet = [] +frequency-local = [] +frequency-no-relay = [] +runtime-benchmarks = ["pallet-collective/runtime-benchmarks"] +std = [ + "frame-support/std", + "frame-system/std", + "cumulus-primitives-core/std", + "cumulus-pallet-weight-reclaim/std", + "pallet-democracy/std", + "pallet-collator-selection/std", + "pallet-collective/std", + "pallet-multisig/std", + "pallet-time-release/std", + "pallet-session/std", + "pallet-balances/std", + "pallet-treasury/std", + "pallet-utility/std", + "pallet-proxy/std", + "pallet-sudo/std", + "pallet-timestamp/std", + "pallet-transaction-payment/std", + "pallet-scheduler/std", + "sp-core/std", + "sp-runtime/std", + "common-primitives/std", + "parity-scale-codec/std", + "scale-info/std", + "pallet-preimage/std", +] +try-runtime = [ + "frame-support/try-runtime", + "frame-system/try-runtime", + "cumulus-pallet-weight-reclaim/try-runtime", + "pallet-collator-selection/try-runtime", + "pallet-collective/try-runtime", + "pallet-democracy/try-runtime", + "pallet-multisig/try-runtime", + "pallet-preimage/try-runtime", + "pallet-scheduler/try-runtime", + "pallet-transaction-payment/try-runtime", + "pallet-treasury/try-runtime", + "pallet-utility/try-runtime", + "pallet-proxy/try-runtime", + "pallet-time-release/try-runtime", +] + +[lints] +workspace = true diff --git a/runtime/common/src/constants.rs b/runtime/common/src/constants.rs new file mode 100644 index 0000000000..5a05b2e704 --- /dev/null +++ b/runtime/common/src/constants.rs @@ -0,0 +1,402 @@ +use crate::prod_or_testnet_or_local; +use common_primitives::node::{Balance, BlockNumber}; +use parity_scale_codec::{Encode, MaxEncodedLen}; + +use frame_support::{ + parameter_types, + sp_runtime::{Perbill, Permill}, + traits::{ConstU128, ConstU16, ConstU32, ConstU64, ConstU8}, + weights::{constants::WEIGHT_REF_TIME_PER_SECOND, Weight}, + PalletId, +}; + +// Duplicated in runtime/frequency/build.rs to keep build dependencies low +pub const FREQUENCY_TESTNET_TOKEN: &str = "XRQCY"; +pub const FREQUENCY_LOCAL_TOKEN: &str = "UNIT"; +pub const FREQUENCY_TOKEN: &str = "FRQCY"; +pub const TOKEN_DECIMALS: u8 = 8; + +/// The maximum number of schema grants allowed per delegation +pub type MaxSchemaGrants = ConstU32<30>; + +/// This determines the average expected block time that we are targeting. +/// Blocks will be produced at a minimum duration defined by `SLOT_DURATION`. +/// `SLOT_DURATION` is picked up by `pallet_timestamp` which is in turn picked +/// up by `pallet_aura` to implement `fn slot_duration()`. +/// +/// Change this to adjust the block time. +pub const MILLISECS_PER_BLOCK: u64 = 6_000; + +// NOTE: Currently it is not possible to change the slot duration after the chain has started. +// Attempting to do so will brick block production. +pub const SLOT_DURATION: u64 = MILLISECS_PER_BLOCK; + +// Time is measured by number of blocks. +pub const MINUTES: BlockNumber = 60_000 / (MILLISECS_PER_BLOCK as BlockNumber); +pub const HOURS: BlockNumber = MINUTES * 60; +pub const DAYS: BlockNumber = HOURS * 24; + +// Unit = the base number of indivisible units for balances +pub mod currency { + use common_primitives::node::Balance; + + /// The existential deposit. Set to be 1/100th of a token. + pub const EXISTENTIAL_DEPOSIT: Balance = CENTS; + + pub const UNITS: Balance = 10u128.saturating_pow(super::TOKEN_DECIMALS as u32); + pub const DOLLARS: Balance = UNITS; // 100_000_000 + pub const CENTS: Balance = DOLLARS / 100; // 1_000_000 + pub const MILLICENTS: Balance = CENTS / 1_000; // 1_000 + + /// Generates a balance based on amount of items and bytes + /// Items are each worth 20 Dollars + /// Bytes each cost 1/1_000 of a Dollar + pub const fn deposit(items: u32, bytes: u32) -> Balance { + items as Balance * 20 * DOLLARS + (bytes as Balance) * 100 * MILLICENTS + } +} + +/// We assume that ~5% of the block weight is consumed by `on_initialize` handlers. This is +/// used to limit the maximal weight of a single extrinsic. +pub const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(5); + +/// We allow `Normal` extrinsics to fill up the block up to 75%, the rest can be used by +/// `Operational` extrinsics. +pub const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); + +/// We allow for 2 seconds of compute with a 6 second average block time. +pub const MAXIMUM_BLOCK_WEIGHT: Weight = Weight::from_parts( + WEIGHT_REF_TIME_PER_SECOND.saturating_mul(2), + cumulus_primitives_core::relay_chain::MAX_POV_SIZE as u64, +); + +pub type ZERO = ConstU32<0>; +pub type TWO = ConstU32<2>; +pub type FIFTY = ConstU32<50>; +pub type HUNDRED = ConstU32<100>; + +// --- Frame System Pallet --- +pub type FrameSystemMaxConsumers = ConstU32<16>; +// -end- Frame System Pallet --- + +// --- MSA Pallet --- +/// The maximum number of public keys per MSA +pub type MsaMaxPublicKeysPerMsa = ConstU8<25>; +/// The maximum size of the provider name (in bytes) +pub type MsaMaxProviderNameSize = ConstU32<16>; +/// The number of blocks per virtual bucket +pub type MSAMortalityWindowSize = ConstU32<{ 20 * MINUTES }>; +/// The upper limit on total stored signatures. +/// Set to an average of 50 signatures per block +pub type MSAMaxSignaturesStored = ConstU32<50_000>; +// -end- MSA Pallet --- + +// --- Schemas Pallet --- +parameter_types! { + /// The maximum length of a schema model (in bytes) + pub const SchemasMaxBytesBoundedVecLimit :u32 = 65_500; +} +/// The maximum number of schema registrations +pub type SchemasMaxRegistrations = ConstU16<65_000>; +/// The minimum schema model size (in bytes) +pub type SchemasMinModelSizeBytes = ConstU32<8>; +/// The maximum number of grants allowed per schema +pub type MaxSchemaSettingsPerSchema = ConstU32<2>; + +impl Encode for SchemasMaxBytesBoundedVecLimit {} + +impl MaxEncodedLen for SchemasMaxBytesBoundedVecLimit { + fn max_encoded_len() -> usize { + u32::max_encoded_len() + } +} +// -end- Schemas Pallet --- + +// --- Handles Pallet --- +// IMPORTANT: These values should only increase and never overlap with a previous set! +/// The minimum suffix value +pub type HandleSuffixMin = ConstU16<10>; +/// The maximum suffix value +pub type HandleSuffixMax = ConstU16<99>; +// -end- Handles Pallet + +// --- TimeRelease Pallet --- +pub type MinReleaseTransfer = ConstU128<{ currency::EXISTENTIAL_DEPOSIT }>; + +/// Update +pub const MAX_RELEASE_SCHEDULES: u32 = 50; +// -end- TimeRelease Pallet --- + +// --- Timestamp Pallet --- +pub type MinimumPeriod = ConstU64<0>; +// -end- Timestamp Pallet --- + +// --- Authorship Pallet --- +pub type AuthorshipUncleGenerations = ZERO; +// -end- Authorship Pallet --- + +// --- Balances Pallet --- +pub type BalancesMaxLocks = FIFTY; +pub type BalancesMaxReserves = FIFTY; +pub type BalancesMaxFreezes = TWO; // capacity + time-release + // -end- Balances Pallet --- + +// --- Scheduler Pallet --- +pub type SchedulerMaxScheduledPerBlock = FIFTY; +// -end- Scheduler Pallet --- + +// --- Preimage Pallet --- +/// Preimage maximum size set to 4 MB +/// Expected to be removed in Polkadot v0.9.31 +pub type PreimageMaxSize = ConstU32<{ 4096 * 1024 }>; + +pub type PreimageBaseDeposit = ConstU128<{ currency::deposit(10, 64) }>; +pub type PreimageByteDeposit = ConstU128<{ currency::deposit(0, 1) }>; +// -end- Preimage Pallet --- + +// --- Council --- +// The maximum number of council proposals +pub type CouncilMaxProposals = ConstU32<25>; +// The maximum number of council members +pub type CouncilMaxMembers = ConstU32<10>; + +pub type CouncilMotionDuration = ConstU32<{ 5 * DAYS }>; +// -end- Council --- + +// --- Technical Committee --- +// The maximum number of technical committee proposals +pub type TCMaxProposals = ConstU32<25>; +// The maximum number of technical committee members +pub type TCMaxMembers = ConstU32<10>; + +pub type TCMotionDuration = ConstU32<{ 5 * DAYS }>; +// -end- Technical Committee --- + +// --- Democracy Pallet --- +// Config from +// https://github.com/paritytech/substrate/blob/367dab0d4bd7fd7b6c222dd15c753169c057dd42/bin/node/runtime/src/lib.rs#L880 +pub type LaunchPeriod = ConstU32<{ prod_or_testnet_or_local!(7 * DAYS, 1 * DAYS, 5 * MINUTES) }>; +pub type VotingPeriod = ConstU32<{ prod_or_testnet_or_local!(7 * DAYS, 1 * DAYS, 5 * MINUTES) }>; +pub type FastTrackVotingPeriod = + ConstU32<{ prod_or_testnet_or_local!(3 * HOURS, 30 * MINUTES, 5 * MINUTES) }>; +pub type EnactmentPeriod = + ConstU32<{ prod_or_testnet_or_local!(8 * DAYS, 30 * HOURS, 10 * MINUTES) }>; +pub type CooloffPeriod = ConstU32<{ prod_or_testnet_or_local!(7 * DAYS, 1 * DAYS, 5 * MINUTES) }>; +pub type MinimumDeposit = ConstU128< + { + prod_or_testnet_or_local!( + currency::deposit(5, 0), + 100 * currency::deposit(5, 0), + 100 * currency::deposit(5, 0) + ) + }, +>; +pub type SpendPeriod = + ConstU32<{ prod_or_testnet_or_local!(7 * DAYS, 10 * MINUTES, 10 * MINUTES) }>; +pub type DemocracyMaxVotes = ConstU32<100>; +pub type DemocracyMaxProposals = HUNDRED; +// -end- Democracy Pallet --- + +// --- Treasury Pallet --- +/// Generates the pallet "account" +/// 5EYCAe5ijiYfyeZ2JJCGq56LmPyNRAKzpG4QkoQkkQNB5e6Z +pub const TREASURY_PALLET_ID: PalletId = PalletId(*b"py/trsry"); + +// https://wiki.polkadot.network/docs/learn-treasury +// https://paritytech.github.io/substrate/master/pallet_treasury/pallet/trait.Config.html +// Needs parameter_types! for the Permill and PalletId +parameter_types! { + + /// Keyless account that holds the money for the treasury + pub const TreasuryPalletId: PalletId = TREASURY_PALLET_ID; + + /// Bond amount a treasury request must put up to make the proposal + /// This will be transferred to OnSlash if the proposal is rejected + pub const ProposalBondPercent: Permill = Permill::from_percent(5); + + /// How much of the treasury to burn, if funds remain at the end of the SpendPeriod + /// Set to zero until the economic system is setup and stabilized + pub const Burn: Permill = Permill::zero(); +} + +/// Maximum number of approved proposals per Spending Period +/// Set to 64 or 16 per week +pub type MaxApprovals = ConstU32<64>; + +/// Minimum bond for a treasury proposal +pub type ProposalBondMinimum = ConstU128<{ 100 * currency::DOLLARS }>; + +/// Minimum bond for a treasury proposal +pub type ProposalBondMaximum = ConstU128<{ 1_000 * currency::DOLLARS }>; + +// -end- Treasury Pallet --- + +// --- Transaction Payment Pallet --- +// The fee multiplier +pub type TransactionPaymentOperationalFeeMultiplier = ConstU8<5>; + +/// Relay Chain `TransactionByteFee` / 10 +pub type TransactionByteFee = ConstU128<{ 10 * currency::MILLICENTS }>; +// -end- Transaction Payment Pallet --- + +// --- Frequency Transaction Payment Pallet --- +pub type MaximumCapacityBatchLength = ConstU8<10>; +// -end- Frequency Transaction Payment Pallet --- + +// --- Session Pallet --- +pub type SessionPeriod = ConstU32<{ 6 * HOURS }>; +pub type SessionOffset = ZERO; +// -end- Session Pallet --- + +// --- Aura Pallet --- +/// The maximum number of authorities +pub type AuraMaxAuthorities = ConstU32<100_000>; +// -end- Aura Pallet --- + +// --- Collator Selection Pallet --- +// Values for each runtime environment are independently configurable. +// Example CollatorMaxInvulnerables are 16 in production(mainnet), +// 5 in testnet and 5 in local + +pub type CollatorMaxCandidates = ConstU32<50>; +pub type CollatorMinCandidates = ConstU32<{ prod_or_testnet_or_local!(1, 0, 0) }>; +pub type CollatorMaxInvulnerables = ConstU32<{ prod_or_testnet_or_local!(16, 5, 5) }>; +pub type CollatorKickThreshold = + ConstU32<{ prod_or_testnet_or_local!(6 * HOURS, 6 * HOURS, 6 * HOURS) }>; + +// Needs parameter_types! for the PalletId and impls below +parameter_types! { + pub const NeverDepositIntoId: PalletId = PalletId(*b"NeverDep"); + pub const MessagesMaxPayloadSizeBytes: u32 = 1024 * 3; // 3K +} +// -end- Collator Selection Pallet --- + +// --- Proxy Pallet --- +// Copied from Polkadot Runtime v1.2.0 +parameter_types! { + // One storage item; key size 32, value size 8; . + pub const ProxyDepositBase: Balance = currency::deposit(1, 8); + // Additional storage item size of 33 bytes. + pub const ProxyDepositFactor: Balance = currency::deposit(0, 33); + pub const MaxProxies: u16 = 32; + pub const AnnouncementDepositBase: Balance = currency::deposit(1, 8); + pub const AnnouncementDepositFactor: Balance = currency::deposit(0, 66); + pub const MaxPending: u16 = 32; +} +// -end- Proxy Pallet --- + +// --- Messages Pallet --- +impl Clone for MessagesMaxPayloadSizeBytes { + fn clone(&self) -> Self { + MessagesMaxPayloadSizeBytes {} + } +} + +impl core::fmt::Debug for MessagesMaxPayloadSizeBytes { + #[cfg(feature = "std")] + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + write!(f, "MessagesMaxPayloadSizeBytes<{:?}>", Self::get()) + } + + #[cfg(not(feature = "std"))] + fn fmt(&self, _: &mut core::fmt::Formatter) -> core::fmt::Result { + Ok(()) + } +} + +impl Encode for MessagesMaxPayloadSizeBytes {} + +impl MaxEncodedLen for MessagesMaxPayloadSizeBytes { + fn max_encoded_len() -> usize { + u32::max_encoded_len() + } +} +// -end- Messages Pallet --- + +// Needs parameter_types! to reduce pallet dependencies +parameter_types! { + /// SS58 Prefix for the for Frequency Network + /// 90 is the prefix for the Frequency Network on Polkadot + /// 42 is the default prefix elsewhere + pub const Ss58Prefix: u16 = prod_or_testnet_or_local!(90, 42, 42); +} + +// --- Stateful Storage Pallet --- +// Needs parameter_types! for the impls below +parameter_types! { + /// The maximum size of a single item in an itemized storage model (in bytes) + pub const MaxItemizedBlobSizeBytes: u32 = 1024; + /// The maximum size of a page (in bytes) for an Itemized storage model ~ (10KiB) + /// extra 2 bytes is for ItemHeader which enables us to simulate max PoV in benchmarks + pub const MaxItemizedPageSizeBytes: u32 = 10 * (1024 + 2); + /// The maximum size of a page (in bytes) for a Paginated storage model (1KiB) + pub const MaxPaginatedPageSizeBytes: u32 = 1 * 1024; +} +/// The maximum number of pages in a Paginated storage model +pub type MaxPaginatedPageId = ConstU16<32>; +/// The maximum number of actions in itemized actions +pub type MaxItemizedActionsCount = ConstU32<5>; +/// The number of blocks for Stateful mortality is 48 hours +pub type StatefulMortalityWindowSize = ConstU32<{ 2 * DAYS }>; +// -end- Stateful Storage Pallet + +impl Default for MaxItemizedPageSizeBytes { + fn default() -> Self { + Self + } +} + +impl Default for MaxPaginatedPageSizeBytes { + fn default() -> Self { + Self + } +} + +impl Clone for MaxItemizedBlobSizeBytes { + fn clone(&self) -> Self { + MaxItemizedBlobSizeBytes {} + } +} + +impl PartialEq for MaxItemizedBlobSizeBytes { + fn eq(&self, _other: &Self) -> bool { + // This is a constant. It is always equal to itself + true + } +} + +impl core::fmt::Debug for MaxItemizedBlobSizeBytes { + #[cfg(feature = "std")] + fn fmt(&self, _: &mut core::fmt::Formatter) -> core::fmt::Result { + Ok(()) + } + + #[cfg(not(feature = "std"))] + fn fmt(&self, _: &mut core::fmt::Formatter) -> core::fmt::Result { + Ok(()) + } +} + +// --- Capacity Pallet --- +pub type CapacityMinimumStakingAmount = ConstU128<{ currency::EXISTENTIAL_DEPOSIT }>; +pub type CapacityMinimumTokenBalance = ConstU128<{ currency::DOLLARS }>; +pub type CapacityMaxUnlockingChunks = ConstU32<4>; +pub type CapacityMaxEpochLength = ConstU32<{ 2 * DAYS }>; // Two days, assuming 6 second blocks. + +#[cfg(not(any(feature = "frequency-local", feature = "frequency-no-relay")))] +pub type CapacityUnstakingThawPeriod = ConstU16<30>; // 30 Epochs, or 30 days given the above + +#[cfg(any(feature = "frequency-local", feature = "frequency-no-relay"))] +pub type CapacityUnstakingThawPeriod = ConstU16<2>; // 2 Epochs + +// Needs parameter_types! for the Perbil +parameter_types! { + // 1:50 Capacity:Token, must be declared this way instead of using `from_rational` because of + // ```error[E0015]: cannot call non-const fn `Perbill::from_rational::` in constant functions``` + pub const CapacityPerToken: Perbill = Perbill::from_percent(2); + pub const CapacityRewardCap: Permill = Permill::from_parts(5_750); // 0.575% or 0.00575 per RewardEra +} +pub type CapacityRewardEraLength = + ConstU32<{ prod_or_testnet_or_local!(14 * DAYS, 1 * HOURS, 50) }>; + +// -end- Capacity Pallet --- diff --git a/runtime/common/src/extensions/check_nonce.rs b/runtime/common/src/extensions/check_nonce.rs new file mode 100644 index 0000000000..5ed2f6474e --- /dev/null +++ b/runtime/common/src/extensions/check_nonce.rs @@ -0,0 +1,150 @@ +// This file overrides the default Substrate CheckNonce for Frequency. +// It only creates the token account for paid extrinsics. + +// Copyright (C) 2017-2022 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use frame_system::Config; +use parity_scale_codec::{Decode, DecodeWithMemTracking, Encode}; + +use frame_support::{ + dispatch::{DispatchInfo, Pays}, + sp_runtime, +}; +use scale_info::TypeInfo; +#[allow(deprecated)] +use sp_runtime::{ + traits::{DispatchInfoOf, Dispatchable, One, SignedExtension}, + transaction_validity::{ + InvalidTransaction, TransactionLongevity, TransactionValidity, TransactionValidityError, + ValidTransaction, + }, +}; +extern crate alloc; +use alloc::vec; + +/// Nonce check and increment to give replay protection for transactions. +/// +/// # Transaction Validity +/// +/// This extension affects `requires` and `provides` tags of validity, but DOES NOT +/// set the `priority` field. Make sure that AT LEAST one of the signed extension sets +/// some kind of priority upon validating transactions. +#[derive(Encode, Decode, DecodeWithMemTracking, Clone, Eq, PartialEq, TypeInfo)] +#[scale_info(skip_type_params(T))] +pub struct CheckNonce(#[codec(compact)] pub T::Nonce); + +impl CheckNonce { + /// utility constructor. Used only in client/factory code. + pub fn from(nonce: T::Nonce) -> Self { + Self(nonce) + } +} + +impl core::fmt::Debug for CheckNonce { + #[cfg(feature = "std")] + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + write!(f, "CheckNonce({})", self.0) + } + + #[cfg(not(feature = "std"))] + fn fmt(&self, _: &mut core::fmt::Formatter) -> core::fmt::Result { + Ok(()) + } +} + +#[allow(deprecated)] +impl SignedExtension for CheckNonce +where + T::RuntimeCall: Dispatchable, +{ + type AccountId = T::AccountId; + type Call = T::RuntimeCall; + type AdditionalSigned = (); + type Pre = (); + const IDENTIFIER: &'static str = "CheckNonce"; + + fn additional_signed(&self) -> core::result::Result<(), TransactionValidityError> { + Ok(()) + } + + fn pre_dispatch( + self, + who: &Self::AccountId, + _call: &Self::Call, + info: &DispatchInfoOf, + _len: usize, + ) -> Result<(), TransactionValidityError> { + // Get TOKEN account from "who" key + let mut account = frame_system::Account::::get(who); + + // The default account (no account) has a nonce of 0. + // If account nonce is not equal to the tx nonce (self.0), the tx is invalid. Therefore, check if it is a stale or future tx. + if self.0 != account.nonce { + return Err(if self.0 < account.nonce { + InvalidTransaction::Stale + } else { + InvalidTransaction::Future + } + .into()); + } + + // Is this an existing account? + // extracted from the conditions in which an account gets reaped + // https://github.com/paritytech/polkadot-sdk/commit/e993f884fc00f359dd8bf9c81422c5161f3447b5#diff-dff2afa7433478e36eb66a9fe319efe28cfbdf95104b30b03afa0a1c4e3239f3R1082 + let existing_account = + account.providers > 0 || account.consumers > 0 || account.sufficients > 0; + + // Increment account nonce by 1 + account.nonce += T::Nonce::one(); + + // Only create or update the token account if the caller is paying or + // account already exists + if info.pays_fee == Pays::Yes || existing_account { + frame_system::Account::::insert(who, account); + } + + Ok(()) + } + + fn validate( + &self, + who: &Self::AccountId, + _call: &Self::Call, + _info: &DispatchInfoOf, + _len: usize, + ) -> TransactionValidity { + // check index + let account = frame_system::Account::::get(who); + if self.0 < account.nonce { + return InvalidTransaction::Stale.into(); + } + + let provides = vec![Encode::encode(&(who, self.0))]; + let requires = if account.nonce < self.0 { + vec![Encode::encode(&(who, self.0 - One::one()))] + } else { + vec![] + }; + + Ok(ValidTransaction { + priority: 0, + requires, + provides, + longevity: TransactionLongevity::MAX, + propagate: true, + }) + } +} diff --git a/runtime/common/src/extensions/mod.rs b/runtime/common/src/extensions/mod.rs new file mode 100644 index 0000000000..c8ae6f33e6 --- /dev/null +++ b/runtime/common/src/extensions/mod.rs @@ -0,0 +1 @@ +pub mod check_nonce; diff --git a/runtime/common/src/fee.rs b/runtime/common/src/fee.rs new file mode 100644 index 0000000000..3b92644e73 --- /dev/null +++ b/runtime/common/src/fee.rs @@ -0,0 +1,85 @@ +use crate::constants::currency::CENTS; + +use frame_support::{ + sp_runtime::Perbill, + weights::{WeightToFeeCoefficient, WeightToFeeCoefficients, WeightToFeePolynomial}, +}; + +use common_primitives::node::Balance; + +use super::weights::extrinsic_weights::ExtrinsicBaseWeight; + +use smallvec::smallvec; + +/// Handles converting a weight scalar to a fee value, based on the scale and granularity of the +/// node's balance type. +/// +/// This should typically create a mapping between the following ranges: +/// - `[0, MAXIMUM_BLOCK_WEIGHT]` 1_000_000_000_000 +/// - `[Balance::min, Balance::max]` +/// +/// Yet, it can be used for any other sort of change to weight-fee. Some examples being: +/// - Setting it to `0` will essentially disable the weight fee. +/// - Setting it to `1` will cause the literal `#[weight = x]` values to be charged. +/// +/// Warning: Changing this function will also change the static capacity weights. +pub struct WeightToFee; +impl WeightToFeePolynomial for WeightToFee { + type Balance = Balance; + fn polynomial() -> WeightToFeeCoefficients { + // In Polkadot extrinsic base weight (smallest non-zero weight) is mapped to 1/10 CENT + let p = CENTS; + let q = 10 * Balance::from(ExtrinsicBaseWeight::get().ref_time()); + smallvec![WeightToFeeCoefficient { + degree: 1, + negative: false, + coeff_frac: Perbill::from_rational(p % q, q), + coeff_integer: p / q, + }] + } +} + +#[cfg(test)] +mod test { + use super::WeightToFee; + use crate::{ + constants::{ + currency::{CENTS, DOLLARS, MILLICENTS}, + MAXIMUM_BLOCK_WEIGHT, + }, + fee::Balance, + weights::extrinsic_weights::ExtrinsicBaseWeight, + }; + + use frame_support::weights::WeightToFee as WeightToFeeT; + + #[test] + // Test that the fee for `MAXIMUM_BLOCK_WEIGHT` of weigh has sane bounds. + fn full_block_fee_is_correct() { + let full_block = WeightToFee::weight_to_fee(&MAXIMUM_BLOCK_WEIGHT); + // A bounded assertion to consider changes in generated extrinsic base weight. + assert!(full_block >= 2 * 150 * CENTS); + assert!(full_block <= 50 * DOLLARS); + } + #[test] + // This function tests that the fee for `ExtrinsicBaseWeight` of weight is correct + fn extrinsic_base_fee_is_correct() { + // `ExtrinsicBaseWeight` should cost 1/10 of a CENT + let x = WeightToFee::weight_to_fee(&ExtrinsicBaseWeight::get()); + let y = CENTS / 10; + assert!(x.max(y) - x.min(y) < MILLICENTS); + } + + #[test] + fn check_weight() { + let p = CENTS / 10; + let q = Balance::from(ExtrinsicBaseWeight::get().ref_time()); + + assert_eq!(p, 100_000); + + assert!(q >= 75_000_000); + assert!(q <= 130_000_000); + + assert_eq!(p / q, Balance::from(0u128)); + } +} diff --git a/runtime/common/src/lib.rs b/runtime/common/src/lib.rs new file mode 100644 index 0000000000..8245673ee3 --- /dev/null +++ b/runtime/common/src/lib.rs @@ -0,0 +1,33 @@ +#![cfg_attr(not(feature = "std"), no_std)] + +pub mod constants; +pub mod extensions; +pub mod fee; +pub mod proxy; +pub mod signature; +pub mod weights; + +/// Macro to set a value (e.g. when using the `parameter_types` macro) to either a production value +/// or to an environment variable or testing value (in case the `frequency-local` feature is selected or in instant sealing mode). +/// Note that the environment variable is evaluated _at compile time_. +/// +/// Usage: +/// ```Rust +/// parameter_types! { +/// // Note that the env variable version parameter cannot be const. +/// pub LaunchPeriod: BlockNumber = prod_or_testnet_or_local!(7 * DAYS, 28 * DAYS, 1 * MINUTES); +/// pub const VotingPeriod: BlockNumber = prod_or_testnet_or_local!(7 * DAYS, 28 * DAYS, 1 * MINUTES); +/// } +/// ``` +#[macro_export] +macro_rules! prod_or_testnet_or_local { + ($prod:expr, $test:expr, $local:expr) => { + if cfg!(any(feature = "frequency-local", feature = "frequency-no-relay")) { + $local + } else if cfg!(feature = "frequency-testnet") { + $test + } else { + $prod + } + }; +} diff --git a/runtime/common/src/proxy.rs b/runtime/common/src/proxy.rs new file mode 100644 index 0000000000..db743589c1 --- /dev/null +++ b/runtime/common/src/proxy.rs @@ -0,0 +1,37 @@ +use parity_scale_codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; +use sp_core::RuntimeDebug; + +// Proxy Pallet Config +/// The type used to represent the kinds of proxying allowed. +#[derive( + Copy, + Clone, + Eq, + PartialEq, + Ord, + PartialOrd, + Encode, + Decode, + DecodeWithMemTracking, + RuntimeDebug, + MaxEncodedLen, + scale_info::TypeInfo, +)] +pub enum ProxyType { + /// Fully permissioned proxy. Can execute any call on behalf of _proxied_. + Any = 0, + /// Can execute any call that does not transfer funds or assets. + NonTransfer = 1, + Governance = 2, + Staking = 3, + // Skip: SudoBalances = 4, IdentityJudgement = 5, + /// Proxy with the ability to reject time-delay proxy announcements. + CancelProxy = 6, + // Skip: Auction = 7, NominationPools = 8, +} + +impl Default for ProxyType { + fn default() -> Self { + Self::Any + } +} diff --git a/runtime/common/src/signature.rs b/runtime/common/src/signature.rs new file mode 100644 index 0000000000..dd7fb2d0c6 --- /dev/null +++ b/runtime/common/src/signature.rs @@ -0,0 +1,127 @@ +use common_primitives::{node, signatures::UnifiedSignature, utils::wrap_binary_data}; +use node::EIP712Encode; +use sp_runtime::{traits::Verify, AccountId32, MultiSignature}; +extern crate alloc; +use sp_core::Encode; + +pub fn check_signature

(signature: &MultiSignature, signer: AccountId32, payload: &P) -> bool +where + P: Encode + EIP712Encode, +{ + let unified_signature: UnifiedSignature = signature.clone().into(); + let scale_encoded = payload.encode(); + let verify_signature = |payload: &[u8]| unified_signature.verify(payload, &signer.clone()); + + if verify_signature(&scale_encoded) { + return true; + } + + match unified_signature { + // we don't need to check the wrapped bytes for ethereum signatures but we need to check EIP-712 ones + UnifiedSignature::Ecdsa(_) => verify_signature(&payload.encode_eip_712()), + _ => { + let wrapped_payload = wrap_binary_data(scale_encoded); + verify_signature(&wrapped_payload) + }, + } +} + +#[cfg(test)] +mod tests { + use super::*; + use common_primitives::signatures::UnifiedSigner; + use sp_core::{ecdsa, keccak_256, sr25519, Pair}; + use sp_runtime::traits::IdentifyAccount; + /// A wrapped vec that allow different encodings for signature checks + #[derive(Clone, Debug, Encode)] + pub struct TestArrayWrapper(pub [u8; 12]); + + impl EIP712Encode for TestArrayWrapper { + fn encode_eip_712(&self) -> Box<[u8]> { + // not used in test but required to be implemented + Vec::new().into_boxed_slice() + } + } + + #[test] + fn test_verify_signature_with_wrapped_bytes() { + let (key_pair_delegator, _) = sr25519::Pair::generate(); + + let payload = b"test_payload"; + let encode_add_provider_data = wrap_binary_data(payload.to_vec()); + + let signature: MultiSignature = key_pair_delegator.sign(&encode_add_provider_data).into(); + + assert!(check_signature( + &signature, + key_pair_delegator.public().into(), + &TestArrayWrapper(payload.clone()) + )); + } + + #[test] + fn test_verify_signature_without_wrapped_bytes() { + let (signer, _) = sr25519::Pair::generate(); + + let payload = b"test_payload"; + + let signature: MultiSignature = signer.sign(payload.as_slice()).into(); + + assert!(check_signature( + &signature, + signer.public().into(), + &TestArrayWrapper(payload.clone()) + )); + } + + #[test] + fn test_check_signature_with_invalid_signature() { + let (signer, _) = sr25519::Pair::generate(); + + let payload = b"test_payload"; + + let signature: MultiSignature = signer.sign(payload.as_slice()).into(); + + let invalid_payload = b"fake_payload"; + + assert!(!check_signature( + &signature, + signer.public().into(), + &TestArrayWrapper(invalid_payload.clone()) + )); + } + + #[test] + fn test_ethereum_verify_signature_without_wrapped_bytes_should_work() { + let (signer, _) = ecdsa::Pair::generate(); + + let payload = b"test_payload"; + + let signature: MultiSignature = + signer.sign_prehashed(&keccak_256(&payload.to_vec())).into(); + let unified_signer = UnifiedSigner::from(signer.public()); + + assert!(check_signature( + &signature, + unified_signer.into_account(), + &TestArrayWrapper(payload.clone()) + )); + } + + #[test] + fn test_ethereum_verify_signature_wrapped_bytes_should_fail() { + let (signer, _) = ecdsa::Pair::generate(); + + let payload = b"test_payload"; + let encode_add_provider_data = wrap_binary_data(payload.to_vec()); + let signature: MultiSignature = + signer.sign_prehashed(&keccak_256(&encode_add_provider_data)).into(); + let unified_signer = UnifiedSigner::from(signer.public()); + + assert!(!check_signature( + &signature, + unified_signer.into_account(), + &TestArrayWrapper(payload.clone()) + )); + } +} diff --git a/runtime/common/src/weights/block_weights.rs b/runtime/common/src/weights/block_weights.rs new file mode 100644 index 0000000000..80cf77d147 --- /dev/null +++ b/runtime/common/src/weights/block_weights.rs @@ -0,0 +1,80 @@ +// This file is part of Frequency. + +// Copyright (C) Frequency Network Foundation. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-04-18 (Y/M/D) +//! HOSTNAME: `ip-10-173-0-75`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` +//! +//! SHORT-NAME: `block`, LONG-NAME: `BlockExecution`, RUNTIME: `Frequency` +//! WARMUPS: `10`, REPEAT: `100` +//! WEIGHT-PATH: `runtime/common/src/weights` +//! WEIGHT-METRIC: `Average`, WEIGHT-MUL: `1.0`, WEIGHT-ADD: `0` + +// Executed Command: +// ./scripts/../target/release/frequency +// benchmark +// overhead +// --weight-path=runtime/common/src/weights +// --chain=dev +// --warmup=10 +// --repeat=100 +// --header=./HEADER-APACHE2 + +use sp_core::parameter_types; +use sp_weights::{constants::WEIGHT_REF_TIME_PER_NANOS, Weight}; + +parameter_types! { + /// Weight of executing an empty block. + /// Calculated by multiplying the *Average* with `1.0` and adding `0`. + /// + /// Stats nanoseconds: + /// Min, Max: 359_330, 402_837 + /// Average: 374_140 + /// Median: 372_254 + /// Std-Dev: 10375.83 + /// + /// Percentiles nanoseconds: + /// 99th: 400_428 + /// 95th: 390_508 + /// 75th: 382_154 + pub const BlockExecutionWeight: Weight = + Weight::from_parts(WEIGHT_REF_TIME_PER_NANOS.saturating_mul(374_140), 0); +} + +#[cfg(test)] +mod test_weights { + use sp_weights::constants; + + /// Checks that the weight exists and is sane. + // NOTE: If this test fails but you are sure that the generated values are fine, + // you can delete it. + #[test] + fn sane() { + let w = super::BlockExecutionWeight::get(); + + // At least 100 µs. + assert!( + w.ref_time() >= 100u64 * constants::WEIGHT_REF_TIME_PER_MICROS, + "Weight should be at least 100 µs." + ); + // At most 50 ms. + assert!( + w.ref_time() <= 50u64 * constants::WEIGHT_REF_TIME_PER_MILLIS, + "Weight should be at most 50 ms." + ); + } +} diff --git a/runtime/common/src/weights/cumulus_pallet_weight_reclaim.rs b/runtime/common/src/weights/cumulus_pallet_weight_reclaim.rs new file mode 100644 index 0000000000..66c7e0f16d --- /dev/null +++ b/runtime/common/src/weights/cumulus_pallet_weight_reclaim.rs @@ -0,0 +1,68 @@ +//! Autogenerated weights for cumulus_pallet_weight_reclaim +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-04-18, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `ip-10-173-0-75`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 + +// Executed Command: +// ./scripts/../target/release/frequency +// benchmark +// pallet +// --pallet=cumulus_pallet_weight_reclaim +// --extrinsic +// * +// --heap-pages=4096 +// --steps=50 +// --repeat=20 +// --output=./scripts/../runtime/common/src/weights +// --template=./scripts/../.maintain/runtime-weight-template.hbs +// --additional-trie-layers=3 +// --runtime=./scripts/../target/release/wbuild/frequency-runtime/frequency_runtime.wasm +// --genesis-builder=runtime + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::Weight}; +use core::marker::PhantomData; + +/// Weights for `cumulus_pallet_weight_reclaim` using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl cumulus_pallet_weight_reclaim::WeightInfo for SubstrateWeight { + fn storage_weight_reclaim() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 4_616_000 picoseconds. + Weight::from_parts(4_916_000, 0) + } +} + + +#[cfg(test)] +mod tests { + use frame_support::{traits::Get, weights::Weight, dispatch::DispatchClass}; + use crate::constants::{MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO}; + use crate::weights::extrinsic_weights::ExtrinsicBaseWeight; + + #[allow(dead_code)] + struct BlockWeights; + impl Get for BlockWeights { + fn get() -> frame_system::limits::BlockWeights { + frame_system::limits::BlockWeights::builder() + .base_block(Weight::zero()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::non_mandatory(), |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .build_or_panic() + } + } + +} diff --git a/runtime/common/src/weights/extrinsic_weights.rs b/runtime/common/src/weights/extrinsic_weights.rs new file mode 100644 index 0000000000..ba05c85654 --- /dev/null +++ b/runtime/common/src/weights/extrinsic_weights.rs @@ -0,0 +1,80 @@ +// This file is part of Frequency. + +// Copyright (C) Frequency Network Foundation. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-04-18 (Y/M/D) +//! HOSTNAME: `ip-10-173-0-75`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` +//! +//! SHORT-NAME: `extrinsic`, LONG-NAME: `ExtrinsicBase`, RUNTIME: `Frequency` +//! WARMUPS: `10`, REPEAT: `100` +//! WEIGHT-PATH: `runtime/common/src/weights` +//! WEIGHT-METRIC: `Average`, WEIGHT-MUL: `1.0`, WEIGHT-ADD: `0` + +// Executed Command: +// ./scripts/../target/release/frequency +// benchmark +// overhead +// --weight-path=runtime/common/src/weights +// --chain=dev +// --warmup=10 +// --repeat=100 +// --header=./HEADER-APACHE2 + +use sp_core::parameter_types; +use sp_weights::{constants::WEIGHT_REF_TIME_PER_NANOS, Weight}; + +parameter_types! { + /// Weight of executing a NO-OP extrinsic, for example `System::remark`. + /// Calculated by multiplying the *Average* with `1.0` and adding `0`. + /// + /// Stats nanoseconds: + /// Min, Max: 106_643, 108_857 + /// Average: 107_415 + /// Median: 107_420 + /// Std-Dev: 386.49 + /// + /// Percentiles nanoseconds: + /// 99th: 108_154 + /// 95th: 107_993 + /// 75th: 107_674 + pub const ExtrinsicBaseWeight: Weight = + Weight::from_parts(WEIGHT_REF_TIME_PER_NANOS.saturating_mul(107_415), 0); +} + +#[cfg(test)] +mod test_weights { + use sp_weights::constants; + + /// Checks that the weight exists and is sane. + // NOTE: If this test fails but you are sure that the generated values are fine, + // you can delete it. + #[test] + fn sane() { + let w = super::ExtrinsicBaseWeight::get(); + + // At least 10 µs. + assert!( + w.ref_time() >= 10u64 * constants::WEIGHT_REF_TIME_PER_MICROS, + "Weight should be at least 10 µs." + ); + // At most 1 ms. + assert!( + w.ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, + "Weight should be at most 1 ms." + ); + } +} diff --git a/runtime/common/src/weights/frame_system_extensions.rs b/runtime/common/src/weights/frame_system_extensions.rs new file mode 100644 index 0000000000..215dd612a8 --- /dev/null +++ b/runtime/common/src/weights/frame_system_extensions.rs @@ -0,0 +1,124 @@ +// Copied from: https://github.com/paritytech/polkadot-sdk/blob/polkadot-stable2503/substrate/.maintain/frame-weight-template.hbs + +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +//! Autogenerated weights for `frame_system_extensions` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-04-18, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `ip-10-173-0-75`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` +//! WASM-EXECUTION: `Compiled`, CHAIN: `None`, DB CACHE: `1024` + +// Executed Command: +// ./scripts/../target/release/frequency +// benchmark +// pallet +// --pallet=frame_system_extensions +// --extrinsic +// * +// --heap-pages=4096 +// --steps=50 +// --repeat=20 +// --output=./scripts/../runtime/common/src/weights +// --template=./scripts/../.maintain/frame-system-extensions-weight-template.hbs +// --additional-trie-layers=3 +// --runtime=./scripts/../target/release/wbuild/frequency-runtime/frequency_runtime.wasm +// --genesis-builder=runtime + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] +#![allow(dead_code)] + +use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; +use core::marker::PhantomData; + +/// Weights for `frame_system_extensions` using the Substrate node and recommended hardware. +pub struct WeightInfo(PhantomData); +impl frame_system::ExtensionsWeightInfo for WeightInfo { + fn check_genesis() -> Weight { + // Proof Size summary in bytes: + // Measured: `30` + // Estimated: `0` + // Minimum execution time: 3_116_000 picoseconds. + Weight::from_parts(3_404_000, 0) + } + fn check_mortality_mortal_transaction() -> Weight { + // Proof Size summary in bytes: + // Measured: `68` + // Estimated: `0` + // Minimum execution time: 6_129_000 picoseconds. + Weight::from_parts(6_501_000, 0) + } + fn check_mortality_immortal_transaction() -> Weight { + // Proof Size summary in bytes: + // Measured: `68` + // Estimated: `0` + // Minimum execution time: 6_166_000 picoseconds. + Weight::from_parts(6_520_000, 0) + } + fn check_non_zero_sender() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 572_000 picoseconds. + Weight::from_parts(646_000, 0) + } + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + fn check_nonce() -> Weight { + // Proof Size summary in bytes: + // Measured: `101` + // Estimated: `4088` + // Minimum execution time: 6_625_000 picoseconds. + Weight::from_parts(6_930_000, 4088) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + fn check_spec_version() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 469_000 picoseconds. + Weight::from_parts(502_000, 0) + } + fn check_tx_version() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 448_000 picoseconds. + Weight::from_parts(509_000, 0) + } + fn check_weight() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 4_211_000 picoseconds. + Weight::from_parts(4_420_000, 0) + } + fn weight_reclaim() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_294_000 picoseconds. + Weight::from_parts(2_511_000, 0) + } +} diff --git a/runtime/common/src/weights/mod.rs b/runtime/common/src/weights/mod.rs new file mode 100644 index 0000000000..ff15acc425 --- /dev/null +++ b/runtime/common/src/weights/mod.rs @@ -0,0 +1,37 @@ +// This file is part of Substrate. + +// Copyright (C) 2022 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Expose the auto generated weight files. + +pub mod block_weights; +pub mod cumulus_pallet_weight_reclaim; +pub mod extrinsic_weights; +pub mod frame_system_extensions; +pub mod pallet_balances; +pub mod pallet_collator_selection; +pub mod pallet_collective_council; +pub mod pallet_collective_technical_committee; +pub mod pallet_democracy; +pub mod pallet_multisig; +pub mod pallet_preimage; +pub mod pallet_proxy; +pub mod pallet_scheduler; +pub mod pallet_session; +pub mod pallet_timestamp; +pub mod pallet_transaction_payment; +pub mod pallet_utility; +pub mod rocksdb_weights; diff --git a/runtime/common/src/weights/pallet_balances.rs b/runtime/common/src/weights/pallet_balances.rs new file mode 100644 index 0000000000..0c6aadca52 --- /dev/null +++ b/runtime/common/src/weights/pallet_balances.rs @@ -0,0 +1,270 @@ +//! Autogenerated weights for pallet_balances +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-04-18, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `ip-10-173-0-75`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 + +// Executed Command: +// ./scripts/../target/release/frequency +// benchmark +// pallet +// --pallet=pallet_balances +// --extrinsic +// * +// --heap-pages=4096 +// --steps=50 +// --repeat=20 +// --output=./scripts/../runtime/common/src/weights +// --template=./scripts/../.maintain/runtime-weight-template.hbs +// --additional-trie-layers=3 +// --runtime=./scripts/../target/release/wbuild/frequency-runtime/frequency_runtime.wasm +// --genesis-builder=runtime + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::Weight}; +use core::marker::PhantomData; + +/// Weights for `pallet_balances` using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl pallet_balances::WeightInfo for SubstrateWeight { + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + fn transfer_allow_death() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `4088` + // Minimum execution time: 49_746_000 picoseconds. + Weight::from_parts(50_871_000, 4088) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + fn transfer_keep_alive() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `4088` + // Minimum execution time: 39_557_000 picoseconds. + Weight::from_parts(40_349_000, 4088) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + fn force_set_balance_creating() -> Weight { + // Proof Size summary in bytes: + // Measured: `174` + // Estimated: `4088` + // Minimum execution time: 14_828_000 picoseconds. + Weight::from_parts(15_500_000, 4088) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + fn force_set_balance_killing() -> Weight { + // Proof Size summary in bytes: + // Measured: `174` + // Estimated: `4088` + // Minimum execution time: 21_613_000 picoseconds. + Weight::from_parts(22_468_000, 4088) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `System::Account` (r:2 w:2) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + fn force_transfer() -> Weight { + // Proof Size summary in bytes: + // Measured: `103` + // Estimated: `6691` + // Minimum execution time: 52_145_000 picoseconds. + Weight::from_parts(52_865_000, 6691) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + fn transfer_all() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `4088` + // Minimum execution time: 48_747_000 picoseconds. + Weight::from_parts(50_145_000, 4088) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + fn force_unreserve() -> Weight { + // Proof Size summary in bytes: + // Measured: `174` + // Estimated: `4088` + // Minimum execution time: 17_981_000 picoseconds. + Weight::from_parts(18_444_000, 4088) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `System::Account` (r:999 w:999) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// The range of component `u` is `[1, 1000]`. + fn upgrade_accounts(u: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0 + u * (136 ±0)` + // Estimated: `1485 + u * (2603 ±0)` + // Minimum execution time: 17_022_000 picoseconds. + Weight::from_parts(17_580_000, 1485) + // Standard Error: 6_768 + .saturating_add(Weight::from_parts(14_327_118, 0).saturating_mul(u.into())) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(u.into()))) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(u.into()))) + .saturating_add(Weight::from_parts(0, 2603).saturating_mul(u.into())) + } + fn force_adjust_total_issuance() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 5_997_000 picoseconds. + Weight::from_parts(6_524_000, 0) + } + fn burn_allow_death() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 30_766_000 picoseconds. + Weight::from_parts(31_600_000, 0) + } + fn burn_keep_alive() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 21_422_000 picoseconds. + Weight::from_parts(22_036_000, 0) + } +} + + +#[cfg(test)] +mod tests { + use frame_support::{traits::Get, weights::Weight, dispatch::DispatchClass}; + use crate::constants::{MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO}; + use crate::weights::extrinsic_weights::ExtrinsicBaseWeight; + + #[allow(dead_code)] + struct BlockWeights; + impl Get for BlockWeights { + fn get() -> frame_system::limits::BlockWeights { + frame_system::limits::BlockWeights::builder() + .base_block(Weight::zero()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::non_mandatory(), |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .build_or_panic() + } + } + + #[test] + fn test_transfer_allow_death() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4088 + ); + } + #[test] + fn test_transfer_keep_alive() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4088 + ); + } + #[test] + fn test_force_set_balance_creating() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4088 + ); + } + #[test] + fn test_force_set_balance_killing() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4088 + ); + } + #[test] + fn test_force_transfer() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 6691 + ); + } + #[test] + fn test_transfer_all() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4088 + ); + } + #[test] + fn test_force_unreserve() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4088 + ); + } + #[test] + fn test_upgrade_accounts() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 1485 + ); + } +} diff --git a/runtime/common/src/weights/pallet_collator_selection.rs b/runtime/common/src/weights/pallet_collator_selection.rs new file mode 100644 index 0000000000..e678298286 --- /dev/null +++ b/runtime/common/src/weights/pallet_collator_selection.rs @@ -0,0 +1,395 @@ +//! Autogenerated weights for pallet_collator_selection +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-04-18, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `ip-10-173-0-75`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 + +// Executed Command: +// ./scripts/../target/release/frequency +// benchmark +// pallet +// --pallet=pallet_collator_selection +// --extrinsic +// * +// --heap-pages=4096 +// --steps=50 +// --repeat=20 +// --output=./scripts/../runtime/common/src/weights +// --template=./scripts/../.maintain/runtime-weight-template.hbs +// --additional-trie-layers=3 +// --runtime=./scripts/../target/release/wbuild/frequency-runtime/frequency_runtime.wasm +// --genesis-builder=runtime + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::Weight}; +use core::marker::PhantomData; + +/// Weights for `pallet_collator_selection` using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl pallet_collator_selection::WeightInfo for SubstrateWeight { + /// Storage: `Session::NextKeys` (r:16 w:0) + /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `CollatorSelection::Invulnerables` (r:0 w:1) + /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(513), added: 1008, mode: `MaxEncodedLen`) + /// The range of component `b` is `[1, 16]`. + fn set_invulnerables(b: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `197 + b * (80 ±0)` + // Estimated: `1681 + b * (2555 ±0)` + // Minimum execution time: 12_918_000 picoseconds. + Weight::from_parts(10_551_307, 1681) + // Standard Error: 7_286 + .saturating_add(Weight::from_parts(3_968_171, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(b.into()))) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(Weight::from_parts(0, 2555).saturating_mul(b.into())) + } + /// Storage: `Session::NextKeys` (r:1 w:0) + /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `CollatorSelection::Invulnerables` (r:1 w:1) + /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(513), added: 1008, mode: `MaxEncodedLen`) + /// Storage: `CollatorSelection::CandidateList` (r:1 w:1) + /// Proof: `CollatorSelection::CandidateList` (`max_values`: Some(1), `max_size`: Some(2401), added: 2896, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// The range of component `b` is `[1, 15]`. + /// The range of component `c` is `[1, 49]`. + fn add_invulnerable(b: u32, c: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `971 + b * (32 ±0) + c * (54 ±0)` + // Estimated: `4883 + b * (29 ±0) + c * (56 ±0)` + // Minimum execution time: 46_931_000 picoseconds. + Weight::from_parts(48_253_434, 4883) + // Standard Error: 1_706 + .saturating_add(Weight::from_parts(183_591, 0).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 29).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(0, 56).saturating_mul(c.into())) + } + /// Storage: `CollatorSelection::CandidateList` (r:1 w:0) + /// Proof: `CollatorSelection::CandidateList` (`max_values`: Some(1), `max_size`: Some(2401), added: 2896, mode: `MaxEncodedLen`) + /// Storage: `CollatorSelection::Invulnerables` (r:1 w:1) + /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(513), added: 1008, mode: `MaxEncodedLen`) + /// The range of component `b` is `[2, 16]`. + fn remove_invulnerable(b: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `153 + b * (32 ±0)` + // Estimated: `4381` + // Minimum execution time: 11_895_000 picoseconds. + Weight::from_parts(12_439_944, 4381) + // Standard Error: 2_136 + .saturating_add(Weight::from_parts(174_178, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `CollatorSelection::DesiredCandidates` (r:0 w:1) + /// Proof: `CollatorSelection::DesiredCandidates` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + fn set_desired_candidates() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 4_981_000 picoseconds. + Weight::from_parts(5_245_000, 0) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `CollatorSelection::CandidacyBond` (r:1 w:1) + /// Proof: `CollatorSelection::CandidacyBond` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) + /// Storage: `CollatorSelection::CandidateList` (r:1 w:1) + /// Proof: `CollatorSelection::CandidateList` (`max_values`: Some(1), `max_size`: Some(2401), added: 2896, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:50 w:50) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `CollatorSelection::LastAuthoredBlock` (r:0 w:50) + /// Proof: `CollatorSelection::LastAuthoredBlock` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) + /// The range of component `c` is `[0, 50]`. + /// The range of component `k` is `[0, 50]`. + fn set_candidacy_bond(c: u32, k: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0 + c * (181 ±0) + k * (124 ±0)` + // Estimated: `4381 + c * (894 ±29) + k * (894 ±29)` + // Minimum execution time: 10_598_000 picoseconds. + Weight::from_parts(11_073_000, 4381) + // Standard Error: 168_478 + .saturating_add(Weight::from_parts(5_828_622, 0).saturating_mul(c.into())) + // Standard Error: 168_478 + .saturating_add(Weight::from_parts(5_534_268, 0).saturating_mul(k.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(c.into()))) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(k.into()))) + .saturating_add(Weight::from_parts(0, 894).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(0, 894).saturating_mul(k.into())) + } + /// Storage: `CollatorSelection::CandidacyBond` (r:1 w:0) + /// Proof: `CollatorSelection::CandidacyBond` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) + /// Storage: `CollatorSelection::CandidateList` (r:1 w:1) + /// Proof: `CollatorSelection::CandidateList` (`max_values`: Some(1), `max_size`: Some(2401), added: 2896, mode: `MaxEncodedLen`) + /// The range of component `c` is `[1, 50]`. + fn update_bond(c: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `357 + c * (49 ±0)` + // Estimated: `4381` + // Minimum execution time: 29_304_000 picoseconds. + Weight::from_parts(32_246_312, 4381) + // Standard Error: 2_748 + .saturating_add(Weight::from_parts(189_818, 0).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `CollatorSelection::CandidateList` (r:1 w:1) + /// Proof: `CollatorSelection::CandidateList` (`max_values`: Some(1), `max_size`: Some(2401), added: 2896, mode: `MaxEncodedLen`) + /// Storage: `CollatorSelection::Invulnerables` (r:1 w:0) + /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(513), added: 1008, mode: `MaxEncodedLen`) + /// Storage: `Session::NextKeys` (r:1 w:0) + /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `CollatorSelection::CandidacyBond` (r:1 w:0) + /// Proof: `CollatorSelection::CandidacyBond` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) + /// Storage: `CollatorSelection::LastAuthoredBlock` (r:0 w:1) + /// Proof: `CollatorSelection::LastAuthoredBlock` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) + /// The range of component `c` is `[1, 49]`. + fn register_as_candidate(c: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `604 + c * (59 ±0)` + // Estimated: `4571 + c * (59 ±0)` + // Minimum execution time: 41_243_000 picoseconds. + Weight::from_parts(43_585_568, 4571) + // Standard Error: 3_683 + .saturating_add(Weight::from_parts(244_358, 0).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + .saturating_add(Weight::from_parts(0, 59).saturating_mul(c.into())) + } + /// Storage: `CollatorSelection::Invulnerables` (r:1 w:0) + /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(513), added: 1008, mode: `MaxEncodedLen`) + /// Storage: `CollatorSelection::CandidacyBond` (r:1 w:0) + /// Proof: `CollatorSelection::CandidacyBond` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) + /// Storage: `Session::NextKeys` (r:1 w:0) + /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `CollatorSelection::CandidateList` (r:1 w:1) + /// Proof: `CollatorSelection::CandidateList` (`max_values`: Some(1), `max_size`: Some(2401), added: 2896, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `CollatorSelection::LastAuthoredBlock` (r:0 w:2) + /// Proof: `CollatorSelection::LastAuthoredBlock` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) + /// The range of component `c` is `[1, 50]`. + fn take_candidate_slot(c: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `699 + c * (60 ±0)` + // Estimated: `4668 + c * (60 ±0)` + // Minimum execution time: 56_283_000 picoseconds. + Weight::from_parts(60_188_654, 4668) + // Standard Error: 3_701 + .saturating_add(Weight::from_parts(284_318, 0).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) + .saturating_add(Weight::from_parts(0, 60).saturating_mul(c.into())) + } + /// Storage: `CollatorSelection::CandidateList` (r:1 w:1) + /// Proof: `CollatorSelection::CandidateList` (`max_values`: Some(1), `max_size`: Some(2401), added: 2896, mode: `MaxEncodedLen`) + /// Storage: `CollatorSelection::Invulnerables` (r:1 w:0) + /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(513), added: 1008, mode: `MaxEncodedLen`) + /// Storage: `CollatorSelection::LastAuthoredBlock` (r:0 w:1) + /// Proof: `CollatorSelection::LastAuthoredBlock` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) + /// The range of component `c` is `[1, 50]`. + fn leave_intent(c: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `372 + c * (48 ±0)` + // Estimated: `4381` + // Minimum execution time: 31_595_000 picoseconds. + Weight::from_parts(34_228_904, 4381) + // Standard Error: 2_711 + .saturating_add(Weight::from_parts(229_813, 0).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: `System::Account` (r:2 w:2) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `CollatorSelection::LastAuthoredBlock` (r:0 w:1) + /// Proof: `CollatorSelection::LastAuthoredBlock` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) + fn note_author() -> Weight { + // Proof Size summary in bytes: + // Measured: `230` + // Estimated: `6691` + // Minimum execution time: 45_482_000 picoseconds. + Weight::from_parts(46_547_000, 6691) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } + /// Storage: `CollatorSelection::CandidateList` (r:1 w:0) + /// Proof: `CollatorSelection::CandidateList` (`max_values`: Some(1), `max_size`: Some(2401), added: 2896, mode: `MaxEncodedLen`) + /// Storage: `CollatorSelection::LastAuthoredBlock` (r:50 w:0) + /// Proof: `CollatorSelection::LastAuthoredBlock` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) + /// Storage: `CollatorSelection::Invulnerables` (r:1 w:0) + /// Proof: `CollatorSelection::Invulnerables` (`max_values`: Some(1), `max_size`: Some(513), added: 1008, mode: `MaxEncodedLen`) + /// Storage: `CollatorSelection::DesiredCandidates` (r:1 w:0) + /// Proof: `CollatorSelection::DesiredCandidates` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:49 w:49) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// The range of component `r` is `[1, 50]`. + /// The range of component `c` is `[1, 50]`. + fn new_session(r: u32, c: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `1143 + c * (98 ±0) + r * (118 ±0)` + // Estimated: `4381 + c * (2519 ±0) + r * (2603 ±0)` + // Minimum execution time: 23_134_000 picoseconds. + Weight::from_parts(23_685_000, 4381) + // Standard Error: 296_188 + .saturating_add(Weight::from_parts(13_787_660, 0).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(c.into()))) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(c.into()))) + .saturating_add(Weight::from_parts(0, 2519).saturating_mul(c.into())) + .saturating_add(Weight::from_parts(0, 2603).saturating_mul(r.into())) + } +} + + +#[cfg(test)] +mod tests { + use frame_support::{traits::Get, weights::Weight, dispatch::DispatchClass}; + use crate::constants::{MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO}; + use crate::weights::extrinsic_weights::ExtrinsicBaseWeight; + + #[allow(dead_code)] + struct BlockWeights; + impl Get for BlockWeights { + fn get() -> frame_system::limits::BlockWeights { + frame_system::limits::BlockWeights::builder() + .base_block(Weight::zero()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::non_mandatory(), |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .build_or_panic() + } + } + + #[test] + fn test_set_invulnerables() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 1681 + ); + } + #[test] + fn test_add_invulnerable() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4883 + ); + } + #[test] + fn test_remove_invulnerable() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4381 + ); + } + #[test] + fn test_set_candidacy_bond() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4381 + ); + } + #[test] + fn test_update_bond() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4381 + ); + } + #[test] + fn test_register_as_candidate() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4571 + ); + } + #[test] + fn test_take_candidate_slot() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4668 + ); + } + #[test] + fn test_leave_intent() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4381 + ); + } + #[test] + fn test_note_author() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 6691 + ); + } + #[test] + fn test_new_session() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4381 + ); + } +} diff --git a/runtime/common/src/weights/pallet_collective_council.rs b/runtime/common/src/weights/pallet_collective_council.rs new file mode 100644 index 0000000000..1b9dac7925 --- /dev/null +++ b/runtime/common/src/weights/pallet_collective_council.rs @@ -0,0 +1,508 @@ +//! Autogenerated weights for pallet_collective +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-04-18, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `ip-10-173-0-75`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 + +// Executed Command: +// ./scripts/../target/release/frequency +// benchmark +// pallet +// --pallet=pallet_collective +// --extrinsic +// * +// --heap-pages=4096 +// --steps=50 +// --repeat=20 +// --output=./scripts/../runtime/common/src/weights +// --template=./scripts/../.maintain/runtime-weight-template.hbs +// --additional-trie-layers=3 +// --runtime=./scripts/../target/release/wbuild/frequency-runtime/frequency_runtime.wasm +// --genesis-builder=runtime + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::Weight}; +use core::marker::PhantomData; + +/// Weights for `pallet_collective` using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl pallet_collective::WeightInfo for SubstrateWeight { + /// Storage: `Council::Members` (r:1 w:1) + /// Proof: `Council::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::Proposals` (r:1 w:0) + /// Proof: `Council::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::Voting` (r:25 w:25) + /// Proof: `Council::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Council::Prime` (r:0 w:1) + /// Proof: `Council::Prime` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// The range of component `m` is `[0, 10]`. + /// The range of component `n` is `[0, 10]`. + /// The range of component `p` is `[0, 25]`. + /// The range of component `m` is `[0, 10]`. + /// The range of component `n` is `[0, 10]`. + /// The range of component `p` is `[0, 25]`. + fn set_members(m: u32, _n: u32, p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0 + m * (832 ±0) + p * (310 ±0)` + // Estimated: `4789 + m * (489 ±5) + p * (2615 ±2)` + // Minimum execution time: 8_635_000 picoseconds. + Weight::from_parts(9_068_000, 4789) + // Standard Error: 105_468 + .saturating_add(Weight::from_parts(3_522_687, 0).saturating_mul(m.into())) + // Standard Error: 42_858 + .saturating_add(Weight::from_parts(4_030_382, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) + .saturating_add(T::DbWeight::get().writes(2_u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) + .saturating_add(Weight::from_parts(0, 489).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 2615).saturating_mul(p.into())) + } + /// Storage: `Council::Members` (r:1 w:0) + /// Proof: `Council::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// The range of component `b` is `[2, 1024]`. + /// The range of component `m` is `[1, 10]`. + /// The range of component `b` is `[2, 1024]`. + /// The range of component `m` is `[1, 10]`. + fn execute(b: u32, m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `70 + m * (32 ±0)` + // Estimated: `2049 + m * (32 ±0)` + // Minimum execution time: 12_816_000 picoseconds. + Weight::from_parts(13_477_945, 2049) + // Standard Error: 29 + .saturating_add(Weight::from_parts(1_118, 0).saturating_mul(b.into())) + // Standard Error: 3_180 + .saturating_add(Weight::from_parts(13_528, 0).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) + } + /// Storage: `Council::Members` (r:1 w:0) + /// Proof: `Council::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::ProposalOf` (r:1 w:0) + /// Proof: `Council::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `b` is `[2, 1024]`. + /// The range of component `m` is `[1, 10]`. + /// The range of component `b` is `[2, 1024]`. + /// The range of component `m` is `[1, 10]`. + fn propose_execute(b: u32, m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `70 + m * (32 ±0)` + // Estimated: `4029 + m * (32 ±0)` + // Minimum execution time: 15_698_000 picoseconds. + Weight::from_parts(15_807_233, 4029) + // Standard Error: 26 + .saturating_add(Weight::from_parts(1_523, 0).saturating_mul(b.into())) + // Standard Error: 2_883 + .saturating_add(Weight::from_parts(38_146, 0).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) + } + /// Storage: `Council::Members` (r:1 w:0) + /// Proof: `Council::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::ProposalOf` (r:1 w:1) + /// Proof: `Council::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Council::Proposals` (r:1 w:1) + /// Proof: `Council::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::ProposalCount` (r:1 w:1) + /// Proof: `Council::ProposalCount` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::Voting` (r:0 w:1) + /// Proof: `Council::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `b` is `[2, 1024]`. + /// The range of component `m` is `[2, 10]`. + /// The range of component `p` is `[1, 25]`. + /// The range of component `b` is `[2, 1024]`. + /// The range of component `m` is `[2, 10]`. + /// The range of component `p` is `[1, 25]`. + fn propose_proposed(b: u32, m: u32, p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `113 + m * (32 ±0) + p * (51 ±0)` + // Estimated: `4025 + m * (42 ±0) + p * (49 ±0)` + // Minimum execution time: 20_802_000 picoseconds. + Weight::from_parts(21_203_471, 4025) + // Standard Error: 104 + .saturating_add(Weight::from_parts(2_825, 0).saturating_mul(b.into())) + // Standard Error: 12_366 + .saturating_add(Weight::from_parts(206_890, 0).saturating_mul(m.into())) + // Standard Error: 4_315 + .saturating_add(Weight::from_parts(334_441, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) + .saturating_add(Weight::from_parts(0, 42).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 49).saturating_mul(p.into())) + } + /// Storage: `Council::Members` (r:1 w:0) + /// Proof: `Council::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::Voting` (r:1 w:1) + /// Proof: `Council::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `m` is `[5, 10]`. + /// The range of component `m` is `[5, 10]`. + fn vote(m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `571 + m * (64 ±0)` + // Estimated: `4531 + m * (64 ±0)` + // Minimum execution time: 21_422_000 picoseconds. + Weight::from_parts(22_453_350, 4531) + // Standard Error: 7_356 + .saturating_add(Weight::from_parts(87_314, 0).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(Weight::from_parts(0, 64).saturating_mul(m.into())) + } + /// Storage: `Council::Voting` (r:1 w:1) + /// Proof: `Council::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Council::Members` (r:1 w:0) + /// Proof: `Council::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::Proposals` (r:1 w:1) + /// Proof: `Council::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::ProposalOf` (r:0 w:1) + /// Proof: `Council::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `m` is `[4, 10]`. + /// The range of component `p` is `[1, 25]`. + /// The range of component `m` is `[4, 10]`. + /// The range of component `p` is `[1, 25]`. + fn close_early_disapproved(m: u32, p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `41 + m * (64 ±0) + p * (54 ±0)` + // Estimated: `4019 + m * (80 ±0) + p * (50 ±0)` + // Minimum execution time: 23_940_000 picoseconds. + Weight::from_parts(23_960_105, 4019) + // Standard Error: 10_297 + .saturating_add(Weight::from_parts(208_894, 0).saturating_mul(m.into())) + // Standard Error: 2_746 + .saturating_add(Weight::from_parts(262_406, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 80).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 50).saturating_mul(p.into())) + } + /// Storage: `Council::Voting` (r:1 w:1) + /// Proof: `Council::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Council::Members` (r:1 w:0) + /// Proof: `Council::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::ProposalOf` (r:1 w:1) + /// Proof: `Council::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Council::Proposals` (r:1 w:1) + /// Proof: `Council::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// The range of component `b` is `[2, 1024]`. + /// The range of component `m` is `[4, 10]`. + /// The range of component `p` is `[1, 25]`. + /// The range of component `b` is `[2, 1024]`. + /// The range of component `m` is `[4, 10]`. + /// The range of component `p` is `[1, 25]`. + fn close_early_approved(b: u32, m: u32, p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `72 + b * (1 ±0) + m * (64 ±0) + p * (72 ±0)` + // Estimated: `4025 + b * (1 ±0) + m * (85 ±1) + p * (65 ±0)` + // Minimum execution time: 33_882_000 picoseconds. + Weight::from_parts(31_967_007, 4025) + // Standard Error: 97 + .saturating_add(Weight::from_parts(2_127, 0).saturating_mul(b.into())) + // Standard Error: 15_115 + .saturating_add(Weight::from_parts(194_147, 0).saturating_mul(m.into())) + // Standard Error: 4_043 + .saturating_add(Weight::from_parts(444_367, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 1).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(0, 85).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 65).saturating_mul(p.into())) + } + /// Storage: `Council::Voting` (r:1 w:1) + /// Proof: `Council::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Council::Members` (r:1 w:0) + /// Proof: `Council::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::Prime` (r:1 w:0) + /// Proof: `Council::Prime` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::Proposals` (r:1 w:1) + /// Proof: `Council::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::ProposalOf` (r:0 w:1) + /// Proof: `Council::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `m` is `[4, 10]`. + /// The range of component `p` is `[1, 25]`. + /// The range of component `m` is `[4, 10]`. + /// The range of component `p` is `[1, 25]`. + fn close_disapproved(m: u32, p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `61 + m * (64 ±0) + p * (54 ±0)` + // Estimated: `4039 + m * (80 ±0) + p * (50 ±0)` + // Minimum execution time: 26_231_000 picoseconds. + Weight::from_parts(26_478_335, 4039) + // Standard Error: 10_740 + .saturating_add(Weight::from_parts(193_488, 0).saturating_mul(m.into())) + // Standard Error: 2_864 + .saturating_add(Weight::from_parts(256_860, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 80).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 50).saturating_mul(p.into())) + } + /// Storage: `Council::Voting` (r:1 w:1) + /// Proof: `Council::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Council::Members` (r:1 w:0) + /// Proof: `Council::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::Prime` (r:1 w:0) + /// Proof: `Council::Prime` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::ProposalOf` (r:1 w:1) + /// Proof: `Council::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Council::Proposals` (r:1 w:1) + /// Proof: `Council::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// The range of component `b` is `[2, 1024]`. + /// The range of component `m` is `[4, 10]`. + /// The range of component `p` is `[1, 25]`. + /// The range of component `b` is `[2, 1024]`. + /// The range of component `m` is `[4, 10]`. + /// The range of component `p` is `[1, 25]`. + fn close_approved(b: u32, m: u32, p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `92 + b * (1 ±0) + m * (64 ±0) + p * (72 ±0)` + // Estimated: `4045 + b * (1 ±0) + m * (85 ±1) + p * (65 ±0)` + // Minimum execution time: 35_780_000 picoseconds. + Weight::from_parts(34_711_400, 4045) + // Standard Error: 99 + .saturating_add(Weight::from_parts(2_096, 0).saturating_mul(b.into())) + // Standard Error: 15_363 + .saturating_add(Weight::from_parts(162_531, 0).saturating_mul(m.into())) + // Standard Error: 4_110 + .saturating_add(Weight::from_parts(450_270, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 1).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(0, 85).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 65).saturating_mul(p.into())) + } + /// Storage: `Council::Proposals` (r:1 w:1) + /// Proof: `Council::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::Voting` (r:0 w:1) + /// Proof: `Council::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Council::ProposalOf` (r:0 w:1) + /// Proof: `Council::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `p` is `[1, 25]`. + /// The range of component `p` is `[1, 25]`. + fn disapprove_proposal(p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `226 + p * (32 ±0)` + // Estimated: `2206 + p * (32 ±0)` + // Minimum execution time: 13_669_000 picoseconds. + Weight::from_parts(14_245_519, 2206) + // Standard Error: 1_304 + .saturating_add(Weight::from_parts(209_171, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 32).saturating_mul(p.into())) + } + /// Storage: `Council::ProposalOf` (r:1 w:1) + /// Proof: `Council::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Council::CostOf` (r:1 w:0) + /// Proof: `Council::CostOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Council::Proposals` (r:1 w:1) + /// Proof: `Council::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Council::Voting` (r:0 w:1) + /// Proof: `Council::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `d` is `[0, 1]`. + /// The range of component `p` is `[1, 25]`. + /// The range of component `d` is `[0, 1]`. + /// The range of component `p` is `[1, 25]`. + fn kill(d: u32, p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `1185 + p * (52 ±0)` + // Estimated: `5190 + d * (88 ±2) + p * (51 ±0)` + // Minimum execution time: 21_539_000 picoseconds. + Weight::from_parts(22_604_761, 5190) + // Standard Error: 47_072 + .saturating_add(Weight::from_parts(607_832, 0).saturating_mul(d.into())) + // Standard Error: 2_922 + .saturating_add(Weight::from_parts(324_252, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 88).saturating_mul(d.into())) + .saturating_add(Weight::from_parts(0, 51).saturating_mul(p.into())) + } + /// Storage: `Council::ProposalOf` (r:1 w:0) + /// Proof: `Council::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Council::CostOf` (r:1 w:0) + /// Proof: `Council::CostOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn release_proposal_cost() -> Weight { + // Proof Size summary in bytes: + // Measured: `675` + // Estimated: `4635` + // Minimum execution time: 12_636_000 picoseconds. + Weight::from_parts(13_236_000, 4635) + .saturating_add(T::DbWeight::get().reads(2_u64)) + } +} + + +#[cfg(test)] +mod tests { + use frame_support::{traits::Get, weights::Weight, dispatch::DispatchClass}; + use crate::constants::{MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO}; + use crate::weights::extrinsic_weights::ExtrinsicBaseWeight; + + #[allow(dead_code)] + struct BlockWeights; + impl Get for BlockWeights { + fn get() -> frame_system::limits::BlockWeights { + frame_system::limits::BlockWeights::builder() + .base_block(Weight::zero()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::non_mandatory(), |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .build_or_panic() + } + } + + #[test] + fn test_set_members() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4789 + ); + } + #[test] + fn test_execute() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 2049 + ); + } + #[test] + fn test_propose_execute() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4029 + ); + } + #[test] + fn test_propose_proposed() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4025 + ); + } + #[test] + fn test_vote() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4531 + ); + } + #[test] + fn test_close_early_disapproved() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4019 + ); + } + #[test] + fn test_close_early_approved() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4025 + ); + } + #[test] + fn test_close_disapproved() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4039 + ); + } + #[test] + fn test_close_approved() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4045 + ); + } + #[test] + fn test_disapprove_proposal() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 2206 + ); + } + #[test] + fn test_kill() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 5190 + ); + } + #[test] + fn test_release_proposal_cost() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4635 + ); + } +} diff --git a/runtime/common/src/weights/pallet_collective_technical_committee.rs b/runtime/common/src/weights/pallet_collective_technical_committee.rs new file mode 100644 index 0000000000..25fba6b4a6 --- /dev/null +++ b/runtime/common/src/weights/pallet_collective_technical_committee.rs @@ -0,0 +1,508 @@ +//! Autogenerated weights for pallet_collective +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-04-18, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `ip-10-173-0-75`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 + +// Executed Command: +// ./scripts/../target/release/frequency +// benchmark +// pallet +// --pallet=pallet_collective +// --extrinsic +// * +// --heap-pages=4096 +// --steps=50 +// --repeat=20 +// --output=./scripts/../runtime/common/src/weights +// --template=./scripts/../.maintain/runtime-weight-template.hbs +// --additional-trie-layers=3 +// --runtime=./scripts/../target/release/wbuild/frequency-runtime/frequency_runtime.wasm +// --genesis-builder=runtime + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::Weight}; +use core::marker::PhantomData; + +/// Weights for `pallet_collective` using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl pallet_collective::WeightInfo for SubstrateWeight { + /// Storage: `TechnicalCommittee::Members` (r:1 w:1) + /// Proof: `TechnicalCommittee::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TechnicalCommittee::Proposals` (r:1 w:0) + /// Proof: `TechnicalCommittee::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TechnicalCommittee::Voting` (r:25 w:25) + /// Proof: `TechnicalCommittee::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TechnicalCommittee::Prime` (r:0 w:1) + /// Proof: `TechnicalCommittee::Prime` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// The range of component `m` is `[0, 10]`. + /// The range of component `n` is `[0, 10]`. + /// The range of component `p` is `[0, 25]`. + /// The range of component `m` is `[0, 10]`. + /// The range of component `n` is `[0, 10]`. + /// The range of component `p` is `[0, 25]`. + fn set_members(m: u32, _n: u32, p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0 + m * (832 ±0) + p * (310 ±0)` + // Estimated: `4856 + m * (489 ±5) + p * (2615 ±2)` + // Minimum execution time: 8_909_000 picoseconds. + Weight::from_parts(9_238_000, 4856) + // Standard Error: 106_115 + .saturating_add(Weight::from_parts(3_521_051, 0).saturating_mul(m.into())) + // Standard Error: 43_121 + .saturating_add(Weight::from_parts(4_066_900, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) + .saturating_add(T::DbWeight::get().writes(2_u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) + .saturating_add(Weight::from_parts(0, 489).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 2615).saturating_mul(p.into())) + } + /// Storage: `TechnicalCommittee::Members` (r:1 w:0) + /// Proof: `TechnicalCommittee::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// The range of component `b` is `[2, 1024]`. + /// The range of component `m` is `[1, 10]`. + /// The range of component `b` is `[2, 1024]`. + /// The range of component `m` is `[1, 10]`. + fn execute(b: u32, m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `137 + m * (32 ±0)` + // Estimated: `2116 + m * (32 ±0)` + // Minimum execution time: 13_020_000 picoseconds. + Weight::from_parts(13_277_058, 2116) + // Standard Error: 23 + .saturating_add(Weight::from_parts(1_447, 0).saturating_mul(b.into())) + // Standard Error: 2_533 + .saturating_add(Weight::from_parts(14_063, 0).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) + } + /// Storage: `TechnicalCommittee::Members` (r:1 w:0) + /// Proof: `TechnicalCommittee::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TechnicalCommittee::ProposalOf` (r:1 w:0) + /// Proof: `TechnicalCommittee::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `b` is `[2, 1024]`. + /// The range of component `m` is `[1, 10]`. + /// The range of component `b` is `[2, 1024]`. + /// The range of component `m` is `[1, 10]`. + fn propose_execute(b: u32, m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `137 + m * (32 ±0)` + // Estimated: `4096 + m * (32 ±0)` + // Minimum execution time: 15_741_000 picoseconds. + Weight::from_parts(15_962_708, 4096) + // Standard Error: 29 + .saturating_add(Weight::from_parts(1_644, 0).saturating_mul(b.into())) + // Standard Error: 3_140 + .saturating_add(Weight::from_parts(41_516, 0).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into())) + } + /// Storage: `TechnicalCommittee::Members` (r:1 w:0) + /// Proof: `TechnicalCommittee::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TechnicalCommittee::ProposalOf` (r:1 w:1) + /// Proof: `TechnicalCommittee::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TechnicalCommittee::Proposals` (r:1 w:1) + /// Proof: `TechnicalCommittee::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TechnicalCommittee::ProposalCount` (r:1 w:1) + /// Proof: `TechnicalCommittee::ProposalCount` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TechnicalCommittee::Voting` (r:0 w:1) + /// Proof: `TechnicalCommittee::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `b` is `[2, 1024]`. + /// The range of component `m` is `[2, 10]`. + /// The range of component `p` is `[1, 25]`. + /// The range of component `b` is `[2, 1024]`. + /// The range of component `m` is `[2, 10]`. + /// The range of component `p` is `[1, 25]`. + fn propose_proposed(b: u32, m: u32, p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `180 + m * (32 ±0) + p * (51 ±0)` + // Estimated: `4092 + m * (42 ±0) + p * (49 ±0)` + // Minimum execution time: 21_302_000 picoseconds. + Weight::from_parts(21_929_777, 4092) + // Standard Error: 106 + .saturating_add(Weight::from_parts(2_641, 0).saturating_mul(b.into())) + // Standard Error: 12_594 + .saturating_add(Weight::from_parts(204_204, 0).saturating_mul(m.into())) + // Standard Error: 4_394 + .saturating_add(Weight::from_parts(330_746, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) + .saturating_add(Weight::from_parts(0, 42).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 49).saturating_mul(p.into())) + } + /// Storage: `TechnicalCommittee::Members` (r:1 w:0) + /// Proof: `TechnicalCommittee::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TechnicalCommittee::Voting` (r:1 w:1) + /// Proof: `TechnicalCommittee::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `m` is `[5, 10]`. + /// The range of component `m` is `[5, 10]`. + fn vote(m: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `638 + m * (64 ±0)` + // Estimated: `4598 + m * (64 ±0)` + // Minimum execution time: 22_061_000 picoseconds. + Weight::from_parts(22_696_941, 4598) + // Standard Error: 7_648 + .saturating_add(Weight::from_parts(115_884, 0).saturating_mul(m.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(Weight::from_parts(0, 64).saturating_mul(m.into())) + } + /// Storage: `TechnicalCommittee::Voting` (r:1 w:1) + /// Proof: `TechnicalCommittee::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TechnicalCommittee::Members` (r:1 w:0) + /// Proof: `TechnicalCommittee::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TechnicalCommittee::Proposals` (r:1 w:1) + /// Proof: `TechnicalCommittee::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TechnicalCommittee::ProposalOf` (r:0 w:1) + /// Proof: `TechnicalCommittee::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `m` is `[4, 10]`. + /// The range of component `p` is `[1, 25]`. + /// The range of component `m` is `[4, 10]`. + /// The range of component `p` is `[1, 25]`. + fn close_early_disapproved(m: u32, p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `108 + m * (64 ±0) + p * (54 ±0)` + // Estimated: `4086 + m * (80 ±0) + p * (50 ±0)` + // Minimum execution time: 24_308_000 picoseconds. + Weight::from_parts(24_538_259, 4086) + // Standard Error: 10_332 + .saturating_add(Weight::from_parts(191_896, 0).saturating_mul(m.into())) + // Standard Error: 2_756 + .saturating_add(Weight::from_parts(259_520, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 80).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 50).saturating_mul(p.into())) + } + /// Storage: `TechnicalCommittee::Voting` (r:1 w:1) + /// Proof: `TechnicalCommittee::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TechnicalCommittee::Members` (r:1 w:0) + /// Proof: `TechnicalCommittee::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TechnicalCommittee::ProposalOf` (r:1 w:1) + /// Proof: `TechnicalCommittee::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TechnicalCommittee::Proposals` (r:1 w:1) + /// Proof: `TechnicalCommittee::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// The range of component `b` is `[2, 1024]`. + /// The range of component `m` is `[4, 10]`. + /// The range of component `p` is `[1, 25]`. + /// The range of component `b` is `[2, 1024]`. + /// The range of component `m` is `[4, 10]`. + /// The range of component `p` is `[1, 25]`. + fn close_early_approved(b: u32, m: u32, p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `139 + b * (1 ±0) + m * (64 ±0) + p * (72 ±0)` + // Estimated: `4092 + b * (1 ±0) + m * (85 ±1) + p * (65 ±0)` + // Minimum execution time: 33_601_000 picoseconds. + Weight::from_parts(32_730_277, 4092) + // Standard Error: 98 + .saturating_add(Weight::from_parts(2_076, 0).saturating_mul(b.into())) + // Standard Error: 15_238 + .saturating_add(Weight::from_parts(184_662, 0).saturating_mul(m.into())) + // Standard Error: 4_076 + .saturating_add(Weight::from_parts(429_624, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 1).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(0, 85).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 65).saturating_mul(p.into())) + } + /// Storage: `TechnicalCommittee::Voting` (r:1 w:1) + /// Proof: `TechnicalCommittee::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TechnicalCommittee::Members` (r:1 w:0) + /// Proof: `TechnicalCommittee::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TechnicalCommittee::Prime` (r:1 w:0) + /// Proof: `TechnicalCommittee::Prime` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TechnicalCommittee::Proposals` (r:1 w:1) + /// Proof: `TechnicalCommittee::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TechnicalCommittee::ProposalOf` (r:0 w:1) + /// Proof: `TechnicalCommittee::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `m` is `[4, 10]`. + /// The range of component `p` is `[1, 25]`. + /// The range of component `m` is `[4, 10]`. + /// The range of component `p` is `[1, 25]`. + fn close_disapproved(m: u32, p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `128 + m * (64 ±0) + p * (54 ±0)` + // Estimated: `4106 + m * (80 ±0) + p * (50 ±0)` + // Minimum execution time: 28_068_000 picoseconds. + Weight::from_parts(30_031_348, 4106) + // Standard Error: 39_213 + .saturating_add(Weight::from_parts(135_995, 0).saturating_mul(m.into())) + // Standard Error: 10_460 + .saturating_add(Weight::from_parts(152_371, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 80).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 50).saturating_mul(p.into())) + } + /// Storage: `TechnicalCommittee::Voting` (r:1 w:1) + /// Proof: `TechnicalCommittee::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TechnicalCommittee::Members` (r:1 w:0) + /// Proof: `TechnicalCommittee::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TechnicalCommittee::Prime` (r:1 w:0) + /// Proof: `TechnicalCommittee::Prime` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TechnicalCommittee::ProposalOf` (r:1 w:1) + /// Proof: `TechnicalCommittee::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TechnicalCommittee::Proposals` (r:1 w:1) + /// Proof: `TechnicalCommittee::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// The range of component `b` is `[2, 1024]`. + /// The range of component `m` is `[4, 10]`. + /// The range of component `p` is `[1, 25]`. + /// The range of component `b` is `[2, 1024]`. + /// The range of component `m` is `[4, 10]`. + /// The range of component `p` is `[1, 25]`. + fn close_approved(b: u32, m: u32, p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `159 + b * (1 ±0) + m * (64 ±0) + p * (72 ±0)` + // Estimated: `4112 + b * (1 ±0) + m * (85 ±1) + p * (65 ±0)` + // Minimum execution time: 36_222_000 picoseconds. + Weight::from_parts(34_669_732, 4112) + // Standard Error: 99 + .saturating_add(Weight::from_parts(2_265, 0).saturating_mul(b.into())) + // Standard Error: 15_419 + .saturating_add(Weight::from_parts(191_268, 0).saturating_mul(m.into())) + // Standard Error: 4_125 + .saturating_add(Weight::from_parts(451_319, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 1).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(0, 85).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(0, 65).saturating_mul(p.into())) + } + /// Storage: `TechnicalCommittee::Proposals` (r:1 w:1) + /// Proof: `TechnicalCommittee::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TechnicalCommittee::Voting` (r:0 w:1) + /// Proof: `TechnicalCommittee::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TechnicalCommittee::ProposalOf` (r:0 w:1) + /// Proof: `TechnicalCommittee::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `p` is `[1, 25]`. + /// The range of component `p` is `[1, 25]`. + fn disapprove_proposal(p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `293 + p * (32 ±0)` + // Estimated: `2273 + p * (32 ±0)` + // Minimum execution time: 13_786_000 picoseconds. + Weight::from_parts(14_517_650, 2273) + // Standard Error: 1_444 + .saturating_add(Weight::from_parts(210_636, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 32).saturating_mul(p.into())) + } + /// Storage: `TechnicalCommittee::ProposalOf` (r:1 w:1) + /// Proof: `TechnicalCommittee::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TechnicalCommittee::CostOf` (r:1 w:0) + /// Proof: `TechnicalCommittee::CostOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TechnicalCommittee::Proposals` (r:1 w:1) + /// Proof: `TechnicalCommittee::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `TechnicalCommittee::Voting` (r:0 w:1) + /// Proof: `TechnicalCommittee::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// The range of component `d` is `[0, 1]`. + /// The range of component `p` is `[1, 25]`. + /// The range of component `d` is `[0, 1]`. + /// The range of component `p` is `[1, 25]`. + fn kill(d: u32, p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `1252 + p * (52 ±0)` + // Estimated: `5257 + d * (88 ±2) + p * (51 ±0)` + // Minimum execution time: 22_108_000 picoseconds. + Weight::from_parts(23_126_133, 5257) + // Standard Error: 45_327 + .saturating_add(Weight::from_parts(407_252, 0).saturating_mul(d.into())) + // Standard Error: 2_814 + .saturating_add(Weight::from_parts(312_360, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + .saturating_add(Weight::from_parts(0, 88).saturating_mul(d.into())) + .saturating_add(Weight::from_parts(0, 51).saturating_mul(p.into())) + } + /// Storage: `TechnicalCommittee::ProposalOf` (r:1 w:0) + /// Proof: `TechnicalCommittee::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TechnicalCommittee::CostOf` (r:1 w:0) + /// Proof: `TechnicalCommittee::CostOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn release_proposal_cost() -> Weight { + // Proof Size summary in bytes: + // Measured: `742` + // Estimated: `4702` + // Minimum execution time: 13_170_000 picoseconds. + Weight::from_parts(13_496_000, 4702) + .saturating_add(T::DbWeight::get().reads(2_u64)) + } +} + + +#[cfg(test)] +mod tests { + use frame_support::{traits::Get, weights::Weight, dispatch::DispatchClass}; + use crate::constants::{MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO}; + use crate::weights::extrinsic_weights::ExtrinsicBaseWeight; + + #[allow(dead_code)] + struct BlockWeights; + impl Get for BlockWeights { + fn get() -> frame_system::limits::BlockWeights { + frame_system::limits::BlockWeights::builder() + .base_block(Weight::zero()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::non_mandatory(), |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .build_or_panic() + } + } + + #[test] + fn test_set_members() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4856 + ); + } + #[test] + fn test_execute() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 2116 + ); + } + #[test] + fn test_propose_execute() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4096 + ); + } + #[test] + fn test_propose_proposed() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4092 + ); + } + #[test] + fn test_vote() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4598 + ); + } + #[test] + fn test_close_early_disapproved() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4086 + ); + } + #[test] + fn test_close_early_approved() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4092 + ); + } + #[test] + fn test_close_disapproved() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4106 + ); + } + #[test] + fn test_close_approved() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4112 + ); + } + #[test] + fn test_disapprove_proposal() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 2273 + ); + } + #[test] + fn test_kill() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 5257 + ); + } + #[test] + fn test_release_proposal_cost() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4702 + ); + } +} diff --git a/runtime/common/src/weights/pallet_democracy.rs b/runtime/common/src/weights/pallet_democracy.rs new file mode 100644 index 0000000000..ee95a5d192 --- /dev/null +++ b/runtime/common/src/weights/pallet_democracy.rs @@ -0,0 +1,814 @@ +//! Autogenerated weights for pallet_democracy +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-04-18, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `ip-10-173-0-75`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 + +// Executed Command: +// ./scripts/../target/release/frequency +// benchmark +// pallet +// --pallet=pallet_democracy +// --extrinsic +// * +// --heap-pages=4096 +// --steps=50 +// --repeat=20 +// --output=./scripts/../runtime/common/src/weights +// --template=./scripts/../.maintain/runtime-weight-template.hbs +// --additional-trie-layers=3 +// --runtime=./scripts/../target/release/wbuild/frequency-runtime/frequency_runtime.wasm +// --genesis-builder=runtime + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::Weight}; +use core::marker::PhantomData; + +/// Weights for `pallet_democracy` using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl pallet_democracy::WeightInfo for SubstrateWeight { + /// Storage: `Democracy::PublicPropCount` (r:1 w:1) + /// Proof: `Democracy::PublicPropCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Democracy::PublicProps` (r:1 w:1) + /// Proof: `Democracy::PublicProps` (`max_values`: Some(1), `max_size`: Some(16702), added: 17197, mode: `MaxEncodedLen`) + /// Storage: `Democracy::Blacklist` (r:1 w:0) + /// Proof: `Democracy::Blacklist` (`max_values`: None, `max_size`: Some(3238), added: 5713, mode: `MaxEncodedLen`) + /// Storage: `Democracy::DepositOf` (r:0 w:1) + /// Proof: `Democracy::DepositOf` (`max_values`: None, `max_size`: Some(3230), added: 5705, mode: `MaxEncodedLen`) + fn propose() -> Weight { + // Proof Size summary in bytes: + // Measured: `4768` + // Estimated: `18682` + // Minimum execution time: 49_431_000 picoseconds. + Weight::from_parts(50_777_000, 18682) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } + /// Storage: `Democracy::DepositOf` (r:1 w:1) + /// Proof: `Democracy::DepositOf` (`max_values`: None, `max_size`: Some(3230), added: 5705, mode: `MaxEncodedLen`) + fn second() -> Weight { + // Proof Size summary in bytes: + // Measured: `3523` + // Estimated: `7190` + // Minimum execution time: 43_350_000 picoseconds. + Weight::from_parts(45_145_000, 7190) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Democracy::ReferendumInfoOf` (r:1 w:1) + /// Proof: `Democracy::ReferendumInfoOf` (`max_values`: None, `max_size`: Some(201), added: 2676, mode: `MaxEncodedLen`) + /// Storage: `Democracy::VotingOf` (r:1 w:1) + /// Proof: `Democracy::VotingOf` (`max_values`: None, `max_size`: Some(3795), added: 6270, mode: `MaxEncodedLen`) + /// Storage: `Balances::Locks` (r:1 w:1) + /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) + /// Storage: `Balances::Freezes` (r:1 w:0) + /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + fn vote_new() -> Weight { + // Proof Size summary in bytes: + // Measured: `3399` + // Estimated: `7755` + // Minimum execution time: 63_651_000 picoseconds. + Weight::from_parts(65_855_000, 7755) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } + /// Storage: `Democracy::ReferendumInfoOf` (r:1 w:1) + /// Proof: `Democracy::ReferendumInfoOf` (`max_values`: None, `max_size`: Some(201), added: 2676, mode: `MaxEncodedLen`) + /// Storage: `Democracy::VotingOf` (r:1 w:1) + /// Proof: `Democracy::VotingOf` (`max_values`: None, `max_size`: Some(3795), added: 6270, mode: `MaxEncodedLen`) + /// Storage: `Balances::Locks` (r:1 w:1) + /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) + /// Storage: `Balances::Freezes` (r:1 w:0) + /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + fn vote_existing() -> Weight { + // Proof Size summary in bytes: + // Measured: `3421` + // Estimated: `7755` + // Minimum execution time: 65_877_000 picoseconds. + Weight::from_parts(67_776_000, 7755) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } + /// Storage: `Democracy::ReferendumInfoOf` (r:1 w:1) + /// Proof: `Democracy::ReferendumInfoOf` (`max_values`: None, `max_size`: Some(201), added: 2676, mode: `MaxEncodedLen`) + /// Storage: `Democracy::Cancellations` (r:1 w:1) + /// Proof: `Democracy::Cancellations` (`max_values`: None, `max_size`: Some(33), added: 2508, mode: `MaxEncodedLen`) + /// Storage: `Democracy::MetadataOf` (r:1 w:1) + /// Proof: `Democracy::MetadataOf` (`max_values`: None, `max_size`: Some(53), added: 2528, mode: `MaxEncodedLen`) + fn emergency_cancel() -> Weight { + // Proof Size summary in bytes: + // Measured: `333` + // Estimated: `4161` + // Minimum execution time: 26_996_000 picoseconds. + Weight::from_parts(27_851_000, 4161) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } + /// Storage: `Democracy::PublicProps` (r:1 w:1) + /// Proof: `Democracy::PublicProps` (`max_values`: Some(1), `max_size`: Some(16702), added: 17197, mode: `MaxEncodedLen`) + /// Storage: `Democracy::DepositOf` (r:1 w:1) + /// Proof: `Democracy::DepositOf` (`max_values`: None, `max_size`: Some(3230), added: 5705, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Democracy::MetadataOf` (r:3 w:1) + /// Proof: `Democracy::MetadataOf` (`max_values`: None, `max_size`: Some(53), added: 2528, mode: `MaxEncodedLen`) + /// Storage: `Democracy::NextExternal` (r:1 w:1) + /// Proof: `Democracy::NextExternal` (`max_values`: Some(1), `max_size`: Some(132), added: 627, mode: `MaxEncodedLen`) + /// Storage: `Democracy::ReferendumInfoOf` (r:1 w:1) + /// Proof: `Democracy::ReferendumInfoOf` (`max_values`: None, `max_size`: Some(201), added: 2676, mode: `MaxEncodedLen`) + /// Storage: `Democracy::Blacklist` (r:0 w:1) + /// Proof: `Democracy::Blacklist` (`max_values`: None, `max_size`: Some(3238), added: 5713, mode: `MaxEncodedLen`) + fn blacklist() -> Weight { + // Proof Size summary in bytes: + // Measured: `5877` + // Estimated: `18682` + // Minimum execution time: 100_860_000 picoseconds. + Weight::from_parts(102_947_000, 18682) + .saturating_add(T::DbWeight::get().reads(8_u64)) + .saturating_add(T::DbWeight::get().writes(7_u64)) + } + /// Storage: `Democracy::NextExternal` (r:1 w:1) + /// Proof: `Democracy::NextExternal` (`max_values`: Some(1), `max_size`: Some(132), added: 627, mode: `MaxEncodedLen`) + /// Storage: `Democracy::Blacklist` (r:1 w:0) + /// Proof: `Democracy::Blacklist` (`max_values`: None, `max_size`: Some(3238), added: 5713, mode: `MaxEncodedLen`) + fn external_propose() -> Weight { + // Proof Size summary in bytes: + // Measured: `3383` + // Estimated: `7198` + // Minimum execution time: 13_520_000 picoseconds. + Weight::from_parts(13_942_000, 7198) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Democracy::NextExternal` (r:0 w:1) + /// Proof: `Democracy::NextExternal` (`max_values`: Some(1), `max_size`: Some(132), added: 627, mode: `MaxEncodedLen`) + fn external_propose_majority() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_809_000 picoseconds. + Weight::from_parts(2_970_000, 0) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Democracy::NextExternal` (r:0 w:1) + /// Proof: `Democracy::NextExternal` (`max_values`: Some(1), `max_size`: Some(132), added: 627, mode: `MaxEncodedLen`) + fn external_propose_default() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_012_000 picoseconds. + Weight::from_parts(3_174_000, 0) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Democracy::NextExternal` (r:1 w:1) + /// Proof: `Democracy::NextExternal` (`max_values`: Some(1), `max_size`: Some(132), added: 627, mode: `MaxEncodedLen`) + /// Storage: `Democracy::ReferendumCount` (r:1 w:1) + /// Proof: `Democracy::ReferendumCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Democracy::MetadataOf` (r:1 w:2) + /// Proof: `Democracy::MetadataOf` (`max_values`: None, `max_size`: Some(53), added: 2528, mode: `MaxEncodedLen`) + /// Storage: `Democracy::ReferendumInfoOf` (r:0 w:1) + /// Proof: `Democracy::ReferendumInfoOf` (`max_values`: None, `max_size`: Some(201), added: 2676, mode: `MaxEncodedLen`) + fn fast_track() -> Weight { + // Proof Size summary in bytes: + // Measured: `253` + // Estimated: `4013` + // Minimum execution time: 24_003_000 picoseconds. + Weight::from_parts(25_046_000, 4013) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(5_u64)) + } + /// Storage: `Democracy::NextExternal` (r:1 w:1) + /// Proof: `Democracy::NextExternal` (`max_values`: Some(1), `max_size`: Some(132), added: 627, mode: `MaxEncodedLen`) + /// Storage: `Democracy::Blacklist` (r:1 w:1) + /// Proof: `Democracy::Blacklist` (`max_values`: None, `max_size`: Some(3238), added: 5713, mode: `MaxEncodedLen`) + /// Storage: `Democracy::MetadataOf` (r:1 w:1) + /// Proof: `Democracy::MetadataOf` (`max_values`: None, `max_size`: Some(53), added: 2528, mode: `MaxEncodedLen`) + fn veto_external() -> Weight { + // Proof Size summary in bytes: + // Measured: `3486` + // Estimated: `7198` + // Minimum execution time: 30_188_000 picoseconds. + Weight::from_parts(31_241_000, 7198) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } + /// Storage: `Democracy::PublicProps` (r:1 w:1) + /// Proof: `Democracy::PublicProps` (`max_values`: Some(1), `max_size`: Some(16702), added: 17197, mode: `MaxEncodedLen`) + /// Storage: `Democracy::DepositOf` (r:1 w:1) + /// Proof: `Democracy::DepositOf` (`max_values`: None, `max_size`: Some(3230), added: 5705, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Democracy::MetadataOf` (r:1 w:1) + /// Proof: `Democracy::MetadataOf` (`max_values`: None, `max_size`: Some(53), added: 2528, mode: `MaxEncodedLen`) + fn cancel_proposal() -> Weight { + // Proof Size summary in bytes: + // Measured: `5788` + // Estimated: `18682` + // Minimum execution time: 82_656_000 picoseconds. + Weight::from_parts(84_413_000, 18682) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) + } + /// Storage: `Democracy::MetadataOf` (r:1 w:1) + /// Proof: `Democracy::MetadataOf` (`max_values`: None, `max_size`: Some(53), added: 2528, mode: `MaxEncodedLen`) + /// Storage: `Democracy::ReferendumInfoOf` (r:0 w:1) + /// Proof: `Democracy::ReferendumInfoOf` (`max_values`: None, `max_size`: Some(201), added: 2676, mode: `MaxEncodedLen`) + fn cancel_referendum() -> Weight { + // Proof Size summary in bytes: + // Measured: `238` + // Estimated: `4013` + // Minimum execution time: 17_500_000 picoseconds. + Weight::from_parts(18_037_000, 4013) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: `Democracy::LowestUnbaked` (r:1 w:1) + /// Proof: `Democracy::LowestUnbaked` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Democracy::ReferendumCount` (r:1 w:0) + /// Proof: `Democracy::ReferendumCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Democracy::ReferendumInfoOf` (r:99 w:0) + /// Proof: `Democracy::ReferendumInfoOf` (`max_values`: None, `max_size`: Some(201), added: 2676, mode: `MaxEncodedLen`) + /// The range of component `r` is `[0, 99]`. + fn on_initialize_base(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `211 + r * (86 ±0)` + // Estimated: `1984 + r * (2676 ±0)` + // Minimum execution time: 6_441_000 picoseconds. + Weight::from_parts(4_915_113, 1984) + // Standard Error: 10_830 + .saturating_add(Weight::from_parts(3_862_289, 0).saturating_mul(r.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(r.into()))) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(Weight::from_parts(0, 2676).saturating_mul(r.into())) + } + /// Storage: `Democracy::LowestUnbaked` (r:1 w:1) + /// Proof: `Democracy::LowestUnbaked` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Democracy::ReferendumCount` (r:1 w:0) + /// Proof: `Democracy::ReferendumCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `Democracy::LastTabledWasExternal` (r:1 w:0) + /// Proof: `Democracy::LastTabledWasExternal` (`max_values`: Some(1), `max_size`: Some(1), added: 496, mode: `MaxEncodedLen`) + /// Storage: `Democracy::NextExternal` (r:1 w:0) + /// Proof: `Democracy::NextExternal` (`max_values`: Some(1), `max_size`: Some(132), added: 627, mode: `MaxEncodedLen`) + /// Storage: `Democracy::PublicProps` (r:1 w:0) + /// Proof: `Democracy::PublicProps` (`max_values`: Some(1), `max_size`: Some(16702), added: 17197, mode: `MaxEncodedLen`) + /// Storage: `Democracy::ReferendumInfoOf` (r:99 w:0) + /// Proof: `Democracy::ReferendumInfoOf` (`max_values`: None, `max_size`: Some(201), added: 2676, mode: `MaxEncodedLen`) + /// The range of component `r` is `[0, 99]`. + fn on_initialize_base_with_launch_period(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `211 + r * (86 ±0)` + // Estimated: `18682 + r * (2676 ±0)` + // Minimum execution time: 9_497_000 picoseconds. + Weight::from_parts(9_533_311, 18682) + // Standard Error: 10_771 + .saturating_add(Weight::from_parts(3_821_356, 0).saturating_mul(r.into())) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(r.into()))) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(Weight::from_parts(0, 2676).saturating_mul(r.into())) + } + /// Storage: `Democracy::VotingOf` (r:3 w:3) + /// Proof: `Democracy::VotingOf` (`max_values`: None, `max_size`: Some(3795), added: 6270, mode: `MaxEncodedLen`) + /// Storage: `Democracy::ReferendumInfoOf` (r:99 w:99) + /// Proof: `Democracy::ReferendumInfoOf` (`max_values`: None, `max_size`: Some(201), added: 2676, mode: `MaxEncodedLen`) + /// Storage: `Balances::Locks` (r:1 w:1) + /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) + /// Storage: `Balances::Freezes` (r:1 w:0) + /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + /// The range of component `r` is `[0, 99]`. + fn delegate(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `763 + r * (108 ±0)` + // Estimated: `20295 + r * (2676 ±0)` + // Minimum execution time: 45_058_000 picoseconds. + Weight::from_parts(48_558_163, 20295) + // Standard Error: 11_645 + .saturating_add(Weight::from_parts(4_824_235, 0).saturating_mul(r.into())) + .saturating_add(T::DbWeight::get().reads(5_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(r.into()))) + .saturating_add(T::DbWeight::get().writes(4_u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(r.into()))) + .saturating_add(Weight::from_parts(0, 2676).saturating_mul(r.into())) + } + /// Storage: `Democracy::VotingOf` (r:2 w:2) + /// Proof: `Democracy::VotingOf` (`max_values`: None, `max_size`: Some(3795), added: 6270, mode: `MaxEncodedLen`) + /// Storage: `Democracy::ReferendumInfoOf` (r:99 w:99) + /// Proof: `Democracy::ReferendumInfoOf` (`max_values`: None, `max_size`: Some(201), added: 2676, mode: `MaxEncodedLen`) + /// The range of component `r` is `[0, 99]`. + fn undelegate(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `460 + r * (108 ±0)` + // Estimated: `14025 + r * (2676 ±0)` + // Minimum execution time: 22_927_000 picoseconds. + Weight::from_parts(19_190_792, 14025) + // Standard Error: 11_986 + .saturating_add(Weight::from_parts(4_853_299, 0).saturating_mul(r.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(r.into()))) + .saturating_add(T::DbWeight::get().writes(2_u64)) + .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(r.into()))) + .saturating_add(Weight::from_parts(0, 2676).saturating_mul(r.into())) + } + /// Storage: `Democracy::PublicProps` (r:0 w:1) + /// Proof: `Democracy::PublicProps` (`max_values`: Some(1), `max_size`: Some(16702), added: 17197, mode: `MaxEncodedLen`) + fn clear_public_proposals() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_813_000 picoseconds. + Weight::from_parts(3_023_000, 0) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Democracy::VotingOf` (r:1 w:1) + /// Proof: `Democracy::VotingOf` (`max_values`: None, `max_size`: Some(3795), added: 6270, mode: `MaxEncodedLen`) + /// Storage: `Balances::Locks` (r:1 w:1) + /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) + /// Storage: `Balances::Freezes` (r:1 w:0) + /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// The range of component `r` is `[0, 99]`. + fn unlock_remove(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `492` + // Estimated: `7755` + // Minimum execution time: 24_864_000 picoseconds. + Weight::from_parts(39_086_568, 7755) + // Standard Error: 3_334 + .saturating_add(Weight::from_parts(121_581, 0).saturating_mul(r.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } + /// Storage: `Democracy::VotingOf` (r:1 w:1) + /// Proof: `Democracy::VotingOf` (`max_values`: None, `max_size`: Some(3795), added: 6270, mode: `MaxEncodedLen`) + /// Storage: `Balances::Locks` (r:1 w:1) + /// Proof: `Balances::Locks` (`max_values`: None, `max_size`: Some(1299), added: 3774, mode: `MaxEncodedLen`) + /// Storage: `Balances::Freezes` (r:1 w:0) + /// Proof: `Balances::Freezes` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// The range of component `r` is `[0, 99]`. + fn unlock_set(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `493 + r * (22 ±0)` + // Estimated: `7755` + // Minimum execution time: 37_016_000 picoseconds. + Weight::from_parts(40_537_486, 7755) + // Standard Error: 1_524 + .saturating_add(Weight::from_parts(142_693, 0).saturating_mul(r.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } + /// Storage: `Democracy::ReferendumInfoOf` (r:1 w:1) + /// Proof: `Democracy::ReferendumInfoOf` (`max_values`: None, `max_size`: Some(201), added: 2676, mode: `MaxEncodedLen`) + /// Storage: `Democracy::VotingOf` (r:1 w:1) + /// Proof: `Democracy::VotingOf` (`max_values`: None, `max_size`: Some(3795), added: 6270, mode: `MaxEncodedLen`) + /// The range of component `r` is `[1, 100]`. + fn remove_vote(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `695 + r * (26 ±0)` + // Estimated: `7755` + // Minimum execution time: 19_000_000 picoseconds. + Weight::from_parts(23_218_556, 7755) + // Standard Error: 1_631 + .saturating_add(Weight::from_parts(139_193, 0).saturating_mul(r.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: `Democracy::ReferendumInfoOf` (r:1 w:1) + /// Proof: `Democracy::ReferendumInfoOf` (`max_values`: None, `max_size`: Some(201), added: 2676, mode: `MaxEncodedLen`) + /// Storage: `Democracy::VotingOf` (r:1 w:1) + /// Proof: `Democracy::VotingOf` (`max_values`: None, `max_size`: Some(3795), added: 6270, mode: `MaxEncodedLen`) + /// The range of component `r` is `[1, 100]`. + fn remove_other_vote(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `695 + r * (26 ±0)` + // Estimated: `7755` + // Minimum execution time: 19_228_000 picoseconds. + Weight::from_parts(23_701_433, 7755) + // Standard Error: 1_875 + .saturating_add(Weight::from_parts(140_553, 0).saturating_mul(r.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: `Democracy::NextExternal` (r:1 w:0) + /// Proof: `Democracy::NextExternal` (`max_values`: Some(1), `max_size`: Some(132), added: 627, mode: `MaxEncodedLen`) + /// Storage: `Preimage::StatusFor` (r:1 w:0) + /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// Storage: `Preimage::RequestStatusFor` (r:1 w:0) + /// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// Storage: `Democracy::MetadataOf` (r:0 w:1) + /// Proof: `Democracy::MetadataOf` (`max_values`: None, `max_size`: Some(53), added: 2528, mode: `MaxEncodedLen`) + fn set_external_metadata() -> Weight { + // Proof Size summary in bytes: + // Measured: `285` + // Estimated: `4051` + // Minimum execution time: 18_728_000 picoseconds. + Weight::from_parts(19_272_000, 4051) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Democracy::NextExternal` (r:1 w:0) + /// Proof: `Democracy::NextExternal` (`max_values`: Some(1), `max_size`: Some(132), added: 627, mode: `MaxEncodedLen`) + /// Storage: `Democracy::MetadataOf` (r:1 w:1) + /// Proof: `Democracy::MetadataOf` (`max_values`: None, `max_size`: Some(53), added: 2528, mode: `MaxEncodedLen`) + fn clear_external_metadata() -> Weight { + // Proof Size summary in bytes: + // Measured: `253` + // Estimated: `4013` + // Minimum execution time: 15_535_000 picoseconds. + Weight::from_parts(16_239_000, 4013) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Democracy::PublicProps` (r:1 w:0) + /// Proof: `Democracy::PublicProps` (`max_values`: Some(1), `max_size`: Some(16702), added: 17197, mode: `MaxEncodedLen`) + /// Storage: `Preimage::StatusFor` (r:1 w:0) + /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// Storage: `Preimage::RequestStatusFor` (r:1 w:0) + /// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// Storage: `Democracy::MetadataOf` (r:0 w:1) + /// Proof: `Democracy::MetadataOf` (`max_values`: None, `max_size`: Some(53), added: 2528, mode: `MaxEncodedLen`) + fn set_proposal_metadata() -> Weight { + // Proof Size summary in bytes: + // Measured: `4817` + // Estimated: `18682` + // Minimum execution time: 48_409_000 picoseconds. + Weight::from_parts(48_948_000, 18682) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Democracy::PublicProps` (r:1 w:0) + /// Proof: `Democracy::PublicProps` (`max_values`: Some(1), `max_size`: Some(16702), added: 17197, mode: `MaxEncodedLen`) + /// Storage: `Democracy::MetadataOf` (r:1 w:1) + /// Proof: `Democracy::MetadataOf` (`max_values`: None, `max_size`: Some(53), added: 2528, mode: `MaxEncodedLen`) + fn clear_proposal_metadata() -> Weight { + // Proof Size summary in bytes: + // Measured: `4789` + // Estimated: `18682` + // Minimum execution time: 43_589_000 picoseconds. + Weight::from_parts(44_562_000, 18682) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Preimage::StatusFor` (r:1 w:0) + /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// Storage: `Preimage::RequestStatusFor` (r:1 w:0) + /// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// Storage: `Democracy::MetadataOf` (r:0 w:1) + /// Proof: `Democracy::MetadataOf` (`max_values`: None, `max_size`: Some(53), added: 2528, mode: `MaxEncodedLen`) + fn set_referendum_metadata() -> Weight { + // Proof Size summary in bytes: + // Measured: `106` + // Estimated: `4051` + // Minimum execution time: 14_422_000 picoseconds. + Weight::from_parts(14_966_000, 4051) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Democracy::ReferendumInfoOf` (r:1 w:0) + /// Proof: `Democracy::ReferendumInfoOf` (`max_values`: None, `max_size`: Some(201), added: 2676, mode: `MaxEncodedLen`) + /// Storage: `Democracy::MetadataOf` (r:1 w:1) + /// Proof: `Democracy::MetadataOf` (`max_values`: None, `max_size`: Some(53), added: 2528, mode: `MaxEncodedLen`) + fn clear_referendum_metadata() -> Weight { + // Proof Size summary in bytes: + // Measured: `269` + // Estimated: `4161` + // Minimum execution time: 18_737_000 picoseconds. + Weight::from_parts(19_623_000, 4161) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } +} + + +#[cfg(test)] +mod tests { + use frame_support::{traits::Get, weights::Weight, dispatch::DispatchClass}; + use crate::constants::{MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO}; + use crate::weights::extrinsic_weights::ExtrinsicBaseWeight; + + #[allow(dead_code)] + struct BlockWeights; + impl Get for BlockWeights { + fn get() -> frame_system::limits::BlockWeights { + frame_system::limits::BlockWeights::builder() + .base_block(Weight::zero()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::non_mandatory(), |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .build_or_panic() + } + } + + #[test] + fn test_propose() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 18682 + ); + } + #[test] + fn test_second() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 7190 + ); + } + #[test] + fn test_vote_new() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 7755 + ); + } + #[test] + fn test_vote_existing() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 7755 + ); + } + #[test] + fn test_emergency_cancel() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4161 + ); + } + #[test] + fn test_blacklist() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 18682 + ); + } + #[test] + fn test_external_propose() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 7198 + ); + } + #[test] + fn test_fast_track() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4013 + ); + } + #[test] + fn test_veto_external() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 7198 + ); + } + #[test] + fn test_cancel_proposal() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 18682 + ); + } + #[test] + fn test_cancel_referendum() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4013 + ); + } + #[test] + fn test_on_initialize_base() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 1984 + ); + } + #[test] + fn test_on_initialize_base_with_launch_period() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 18682 + ); + } + #[test] + fn test_delegate() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 20295 + ); + } + #[test] + fn test_undelegate() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 14025 + ); + } + #[test] + fn test_unlock_remove() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 7755 + ); + } + #[test] + fn test_unlock_set() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 7755 + ); + } + #[test] + fn test_remove_vote() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 7755 + ); + } + #[test] + fn test_remove_other_vote() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 7755 + ); + } + #[test] + fn test_set_external_metadata() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4051 + ); + } + #[test] + fn test_clear_external_metadata() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4013 + ); + } + #[test] + fn test_set_proposal_metadata() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 18682 + ); + } + #[test] + fn test_clear_proposal_metadata() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 18682 + ); + } + #[test] + fn test_set_referendum_metadata() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4051 + ); + } + #[test] + fn test_clear_referendum_metadata() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4161 + ); + } +} diff --git a/runtime/common/src/weights/pallet_multisig.rs b/runtime/common/src/weights/pallet_multisig.rs new file mode 100644 index 0000000000..abe4c17c2b --- /dev/null +++ b/runtime/common/src/weights/pallet_multisig.rs @@ -0,0 +1,264 @@ +//! Autogenerated weights for pallet_multisig +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-04-18, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `ip-10-173-0-75`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 + +// Executed Command: +// ./scripts/../target/release/frequency +// benchmark +// pallet +// --pallet=pallet_multisig +// --extrinsic +// * +// --heap-pages=4096 +// --steps=50 +// --repeat=20 +// --output=./scripts/../runtime/common/src/weights +// --template=./scripts/../.maintain/runtime-weight-template.hbs +// --additional-trie-layers=3 +// --runtime=./scripts/../target/release/wbuild/frequency-runtime/frequency_runtime.wasm +// --genesis-builder=runtime + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::Weight}; +use core::marker::PhantomData; + +/// Weights for `pallet_multisig` using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl pallet_multisig::WeightInfo for SubstrateWeight { + /// The range of component `z` is `[0, 10000]`. + fn as_multi_threshold_1(z: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 15_600_000 picoseconds. + Weight::from_parts(16_307_243, 0) + // Standard Error: 2 + .saturating_add(Weight::from_parts(416, 0).saturating_mul(z.into())) + } + /// Storage: `Multisig::Multisigs` (r:1 w:1) + /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) + /// The range of component `s` is `[2, 100]`. + /// The range of component `z` is `[0, 10000]`. + fn as_multi_create(s: u32, z: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `193 + s * (2 ±0)` + // Estimated: `7306` + // Minimum execution time: 44_854_000 picoseconds. + Weight::from_parts(32_631_721, 7306) + // Standard Error: 737 + .saturating_add(Weight::from_parts(139_096, 0).saturating_mul(s.into())) + // Standard Error: 7 + .saturating_add(Weight::from_parts(1_865, 0).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Multisig::Multisigs` (r:1 w:1) + /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) + /// The range of component `s` is `[3, 100]`. + /// The range of component `z` is `[0, 10000]`. + fn as_multi_approve(s: u32, z: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `211` + // Estimated: `7306` + // Minimum execution time: 29_543_000 picoseconds. + Weight::from_parts(18_302_183, 7306) + // Standard Error: 432 + .saturating_add(Weight::from_parts(125_316, 0).saturating_mul(s.into())) + // Standard Error: 4 + .saturating_add(Weight::from_parts(1_870, 0).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Multisig::Multisigs` (r:1 w:1) + /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// The range of component `s` is `[2, 100]`. + /// The range of component `z` is `[0, 10000]`. + fn as_multi_complete(s: u32, z: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `317 + s * (33 ±0)` + // Estimated: `7306` + // Minimum execution time: 52_997_000 picoseconds. + Weight::from_parts(35_803_976, 7306) + // Standard Error: 974 + .saturating_add(Weight::from_parts(193_028, 0).saturating_mul(s.into())) + // Standard Error: 9 + .saturating_add(Weight::from_parts(1_921, 0).saturating_mul(z.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: `Multisig::Multisigs` (r:1 w:1) + /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) + /// The range of component `s` is `[2, 100]`. + fn approve_as_multi_create(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `193 + s * (2 ±0)` + // Estimated: `7306` + // Minimum execution time: 29_314_000 picoseconds. + Weight::from_parts(30_546_000, 7306) + // Standard Error: 679 + .saturating_add(Weight::from_parts(143_282, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Multisig::Multisigs` (r:1 w:1) + /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) + /// The range of component `s` is `[2, 100]`. + fn approve_as_multi_approve(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `211` + // Estimated: `7306` + // Minimum execution time: 15_682_000 picoseconds. + Weight::from_parts(16_726_890, 7306) + // Standard Error: 498 + .saturating_add(Weight::from_parts(123_877, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Multisig::Multisigs` (r:1 w:1) + /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) + /// The range of component `s` is `[2, 100]`. + fn cancel_as_multi(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `383 + s * (1 ±0)` + // Estimated: `7306` + // Minimum execution time: 30_280_000 picoseconds. + Weight::from_parts(32_111_096, 7306) + // Standard Error: 1_189 + .saturating_add(Weight::from_parts(152_203, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Multisig::Multisigs` (r:1 w:1) + /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) + /// The range of component `s` is `[2, 100]`. + fn poke_deposit(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `383 + s * (1 ±0)` + // Estimated: `7306` + // Minimum execution time: 28_526_000 picoseconds. + Weight::from_parts(30_368_180, 7306) + // Standard Error: 1_187 + .saturating_add(Weight::from_parts(151_410, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } +} + + +#[cfg(test)] +mod tests { + use frame_support::{traits::Get, weights::Weight, dispatch::DispatchClass}; + use crate::constants::{MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO}; + use crate::weights::extrinsic_weights::ExtrinsicBaseWeight; + + #[allow(dead_code)] + struct BlockWeights; + impl Get for BlockWeights { + fn get() -> frame_system::limits::BlockWeights { + frame_system::limits::BlockWeights::builder() + .base_block(Weight::zero()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::non_mandatory(), |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .build_or_panic() + } + } + + #[test] + fn test_as_multi_create() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 7306 + ); + } + #[test] + fn test_as_multi_approve() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 7306 + ); + } + #[test] + fn test_as_multi_complete() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 7306 + ); + } + #[test] + fn test_approve_as_multi_create() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 7306 + ); + } + #[test] + fn test_approve_as_multi_approve() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 7306 + ); + } + #[test] + fn test_cancel_as_multi() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 7306 + ); + } + #[test] + fn test_poke_deposit() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 7306 + ); + } +} diff --git a/runtime/common/src/weights/pallet_preimage.rs b/runtime/common/src/weights/pallet_preimage.rs new file mode 100644 index 0000000000..1ae91c9e3e --- /dev/null +++ b/runtime/common/src/weights/pallet_preimage.rs @@ -0,0 +1,419 @@ +//! Autogenerated weights for pallet_preimage +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-04-18, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `ip-10-173-0-75`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 + +// Executed Command: +// ./scripts/../target/release/frequency +// benchmark +// pallet +// --pallet=pallet_preimage +// --extrinsic +// * +// --heap-pages=4096 +// --steps=50 +// --repeat=20 +// --output=./scripts/../runtime/common/src/weights +// --template=./scripts/../.maintain/runtime-weight-template.hbs +// --additional-trie-layers=3 +// --runtime=./scripts/../target/release/wbuild/frequency-runtime/frequency_runtime.wasm +// --genesis-builder=runtime + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::Weight}; +use core::marker::PhantomData; + +/// Weights for `pallet_preimage` using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl pallet_preimage::WeightInfo for SubstrateWeight { + /// Storage: `Preimage::StatusFor` (r:1 w:0) + /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// Storage: `Preimage::RequestStatusFor` (r:1 w:1) + /// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// Storage: `Balances::Holds` (r:1 w:1) + /// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + /// Storage: `Preimage::PreimageFor` (r:0 w:1) + /// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `MaxEncodedLen`) + /// The range of component `s` is `[0, 4194304]`. + fn note_preimage(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `4` + // Estimated: `4051` + // Minimum execution time: 47_971_000 picoseconds. + Weight::from_parts(48_430_000, 4051) + // Standard Error: 125 + .saturating_add(Weight::from_parts(12_943, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } + /// Storage: `Preimage::StatusFor` (r:1 w:0) + /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// Storage: `Preimage::RequestStatusFor` (r:1 w:1) + /// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// Storage: `Preimage::PreimageFor` (r:0 w:1) + /// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `MaxEncodedLen`) + /// The range of component `s` is `[0, 4194304]`. + fn note_requested_preimage(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `68` + // Estimated: `4051` + // Minimum execution time: 15_537_000 picoseconds. + Weight::from_parts(15_684_000, 4051) + // Standard Error: 123 + .saturating_add(Weight::from_parts(12_958, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: `Preimage::StatusFor` (r:1 w:0) + /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// Storage: `Preimage::RequestStatusFor` (r:1 w:1) + /// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// Storage: `Preimage::PreimageFor` (r:0 w:1) + /// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `MaxEncodedLen`) + /// The range of component `s` is `[0, 4194304]`. + fn note_no_deposit_preimage(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `68` + // Estimated: `4051` + // Minimum execution time: 15_057_000 picoseconds. + Weight::from_parts(15_164_000, 4051) + // Standard Error: 123 + .saturating_add(Weight::from_parts(12_949, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: `Preimage::StatusFor` (r:1 w:0) + /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// Storage: `Preimage::RequestStatusFor` (r:1 w:1) + /// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// Storage: `Balances::Holds` (r:1 w:1) + /// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + /// Storage: `Preimage::PreimageFor` (r:0 w:1) + /// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `MaxEncodedLen`) + fn unnote_preimage() -> Weight { + // Proof Size summary in bytes: + // Measured: `205` + // Estimated: `4051` + // Minimum execution time: 51_203_000 picoseconds. + Weight::from_parts(52_606_000, 4051) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } + /// Storage: `Preimage::StatusFor` (r:1 w:0) + /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// Storage: `Preimage::RequestStatusFor` (r:1 w:1) + /// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// Storage: `Preimage::PreimageFor` (r:0 w:1) + /// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `MaxEncodedLen`) + fn unnote_no_deposit_preimage() -> Weight { + // Proof Size summary in bytes: + // Measured: `106` + // Estimated: `4051` + // Minimum execution time: 23_280_000 picoseconds. + Weight::from_parts(24_311_000, 4051) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: `Preimage::StatusFor` (r:1 w:0) + /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// Storage: `Preimage::RequestStatusFor` (r:1 w:1) + /// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + fn request_preimage() -> Weight { + // Proof Size summary in bytes: + // Measured: `150` + // Estimated: `4051` + // Minimum execution time: 19_095_000 picoseconds. + Weight::from_parts(19_745_000, 4051) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Preimage::StatusFor` (r:1 w:0) + /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// Storage: `Preimage::RequestStatusFor` (r:1 w:1) + /// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + fn request_no_deposit_preimage() -> Weight { + // Proof Size summary in bytes: + // Measured: `106` + // Estimated: `4051` + // Minimum execution time: 13_549_000 picoseconds. + Weight::from_parts(14_127_000, 4051) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Preimage::StatusFor` (r:1 w:0) + /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// Storage: `Preimage::RequestStatusFor` (r:1 w:1) + /// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + fn request_unnoted_preimage() -> Weight { + // Proof Size summary in bytes: + // Measured: `4` + // Estimated: `4051` + // Minimum execution time: 14_756_000 picoseconds. + Weight::from_parts(15_173_000, 4051) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Preimage::StatusFor` (r:1 w:0) + /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// Storage: `Preimage::RequestStatusFor` (r:1 w:1) + /// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + fn request_requested_preimage() -> Weight { + // Proof Size summary in bytes: + // Measured: `68` + // Estimated: `4051` + // Minimum execution time: 10_237_000 picoseconds. + Weight::from_parts(10_654_000, 4051) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Preimage::StatusFor` (r:1 w:0) + /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// Storage: `Preimage::RequestStatusFor` (r:1 w:1) + /// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// Storage: `Preimage::PreimageFor` (r:0 w:1) + /// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `MaxEncodedLen`) + fn unrequest_preimage() -> Weight { + // Proof Size summary in bytes: + // Measured: `106` + // Estimated: `4051` + // Minimum execution time: 19_930_000 picoseconds. + Weight::from_parts(21_368_000, 4051) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: `Preimage::StatusFor` (r:1 w:0) + /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// Storage: `Preimage::RequestStatusFor` (r:1 w:1) + /// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + fn unrequest_unnoted_preimage() -> Weight { + // Proof Size summary in bytes: + // Measured: `68` + // Estimated: `4051` + // Minimum execution time: 10_263_000 picoseconds. + Weight::from_parts(10_625_000, 4051) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Preimage::StatusFor` (r:1 w:0) + /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// Storage: `Preimage::RequestStatusFor` (r:1 w:1) + /// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + fn unrequest_multi_referenced_preimage() -> Weight { + // Proof Size summary in bytes: + // Measured: `68` + // Estimated: `4051` + // Minimum execution time: 10_218_000 picoseconds. + Weight::from_parts(10_582_000, 4051) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Preimage::StatusFor` (r:1023 w:1023) + /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1023 w:1023) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Balances::Holds` (r:1023 w:1023) + /// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) + /// Storage: `Preimage::RequestStatusFor` (r:0 w:1023) + /// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// The range of component `n` is `[1, 1024]`. + fn ensure_updated(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0 + n * (227 ±0)` + // Estimated: `1485 + n * (2603 ±0)` + // Minimum execution time: 54_614_000 picoseconds. + Weight::from_parts(55_157_000, 1485) + // Standard Error: 30_908 + .saturating_add(Weight::from_parts(53_592_867, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(n.into()))) + .saturating_add(T::DbWeight::get().writes((4_u64).saturating_mul(n.into()))) + .saturating_add(Weight::from_parts(0, 2603).saturating_mul(n.into())) + } +} + + +#[cfg(test)] +mod tests { + use frame_support::{traits::Get, weights::Weight, dispatch::DispatchClass}; + use crate::constants::{MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO}; + use crate::weights::extrinsic_weights::ExtrinsicBaseWeight; + + #[allow(dead_code)] + struct BlockWeights; + impl Get for BlockWeights { + fn get() -> frame_system::limits::BlockWeights { + frame_system::limits::BlockWeights::builder() + .base_block(Weight::zero()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::non_mandatory(), |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .build_or_panic() + } + } + + #[test] + fn test_note_preimage() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4051 + ); + } + #[test] + fn test_note_requested_preimage() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4051 + ); + } + #[test] + fn test_note_no_deposit_preimage() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4051 + ); + } + #[test] + fn test_unnote_preimage() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4051 + ); + } + #[test] + fn test_unnote_no_deposit_preimage() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4051 + ); + } + #[test] + fn test_request_preimage() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4051 + ); + } + #[test] + fn test_request_no_deposit_preimage() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4051 + ); + } + #[test] + fn test_request_unnoted_preimage() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4051 + ); + } + #[test] + fn test_request_requested_preimage() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4051 + ); + } + #[test] + fn test_unrequest_preimage() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4051 + ); + } + #[test] + fn test_unrequest_unnoted_preimage() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4051 + ); + } + #[test] + fn test_unrequest_multi_referenced_preimage() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4051 + ); + } + #[test] + fn test_ensure_updated() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 1485 + ); + } +} diff --git a/runtime/common/src/weights/pallet_proxy.rs b/runtime/common/src/weights/pallet_proxy.rs new file mode 100644 index 0000000000..8b1be23fe3 --- /dev/null +++ b/runtime/common/src/weights/pallet_proxy.rs @@ -0,0 +1,371 @@ +//! Autogenerated weights for pallet_proxy +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-04-18, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `ip-10-173-0-75`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 + +// Executed Command: +// ./scripts/../target/release/frequency +// benchmark +// pallet +// --pallet=pallet_proxy +// --extrinsic +// * +// --heap-pages=4096 +// --steps=50 +// --repeat=20 +// --output=./scripts/../runtime/common/src/weights +// --template=./scripts/../.maintain/runtime-weight-template.hbs +// --additional-trie-layers=3 +// --runtime=./scripts/../target/release/wbuild/frequency-runtime/frequency_runtime.wasm +// --genesis-builder=runtime + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::Weight}; +use core::marker::PhantomData; + +/// Weights for `pallet_proxy` using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl pallet_proxy::WeightInfo for SubstrateWeight { + /// Storage: `Proxy::Proxies` (r:1 w:0) + /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) + /// The range of component `p` is `[1, 31]`. + fn proxy(p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `161 + p * (37 ±0)` + // Estimated: `5201` + // Minimum execution time: 14_420_000 picoseconds. + Weight::from_parts(15_088_465, 5201) + // Standard Error: 1_119 + .saturating_add(Weight::from_parts(44_894, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + } + /// Storage: `Proxy::Proxies` (r:1 w:0) + /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) + /// Storage: `Proxy::Announcements` (r:1 w:1) + /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(2233), added: 4708, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// The range of component `a` is `[0, 31]`. + /// The range of component `p` is `[1, 31]`. + fn proxy_announced(a: u32, p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `488 + a * (68 ±0) + p * (37 ±0)` + // Estimated: `6193` + // Minimum execution time: 39_837_000 picoseconds. + Weight::from_parts(41_516_297, 6193) + // Standard Error: 3_423 + .saturating_add(Weight::from_parts(145_686, 0).saturating_mul(a.into())) + // Standard Error: 3_537 + .saturating_add(Weight::from_parts(16_857, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: `Proxy::Announcements` (r:1 w:1) + /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(2233), added: 4708, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// The range of component `a` is `[0, 31]`. + /// The range of component `p` is `[1, 31]`. + fn remove_announcement(a: u32, p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `403 + a * (68 ±0)` + // Estimated: `6193` + // Minimum execution time: 28_085_000 picoseconds. + Weight::from_parts(29_002_698, 6193) + // Standard Error: 1_652 + .saturating_add(Weight::from_parts(156_986, 0).saturating_mul(a.into())) + // Standard Error: 1_707 + .saturating_add(Weight::from_parts(13_106, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: `Proxy::Announcements` (r:1 w:1) + /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(2233), added: 4708, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// The range of component `a` is `[0, 31]`. + /// The range of component `p` is `[1, 31]`. + fn reject_announcement(a: u32, p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `403 + a * (68 ±0)` + // Estimated: `6193` + // Minimum execution time: 27_979_000 picoseconds. + Weight::from_parts(29_147_306, 6193) + // Standard Error: 1_593 + .saturating_add(Weight::from_parts(154_982, 0).saturating_mul(a.into())) + // Standard Error: 1_646 + .saturating_add(Weight::from_parts(7_766, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: `Proxy::Proxies` (r:1 w:0) + /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) + /// Storage: `Proxy::Announcements` (r:1 w:1) + /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(2233), added: 4708, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// The range of component `a` is `[0, 31]`. + /// The range of component `p` is `[1, 31]`. + fn announce(a: u32, p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `420 + a * (68 ±0) + p * (37 ±0)` + // Estimated: `6193` + // Minimum execution time: 36_635_000 picoseconds. + Weight::from_parts(36_899_865, 6193) + // Standard Error: 1_764 + .saturating_add(Weight::from_parts(156_804, 0).saturating_mul(a.into())) + // Standard Error: 1_823 + .saturating_add(Weight::from_parts(41_246, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: `Proxy::Proxies` (r:1 w:1) + /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) + /// The range of component `p` is `[1, 31]`. + fn add_proxy(p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `161 + p * (37 ±0)` + // Estimated: `5201` + // Minimum execution time: 24_571_000 picoseconds. + Weight::from_parts(25_489_258, 5201) + // Standard Error: 1_140 + .saturating_add(Weight::from_parts(47_612, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Proxy::Proxies` (r:1 w:1) + /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) + /// The range of component `p` is `[1, 31]`. + fn remove_proxy(p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `161 + p * (37 ±0)` + // Estimated: `5201` + // Minimum execution time: 24_475_000 picoseconds. + Weight::from_parts(25_563_292, 5201) + // Standard Error: 1_363 + .saturating_add(Weight::from_parts(46_164, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Proxy::Proxies` (r:1 w:1) + /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) + /// The range of component `p` is `[1, 31]`. + fn remove_proxies(p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `161 + p * (37 ±0)` + // Estimated: `5201` + // Minimum execution time: 21_870_000 picoseconds. + Weight::from_parts(22_897_265, 5201) + // Standard Error: 1_114 + .saturating_add(Weight::from_parts(33_517, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Proxy::Proxies` (r:1 w:1) + /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) + /// The range of component `p` is `[1, 31]`. + fn create_pure(p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `173` + // Estimated: `5201` + // Minimum execution time: 25_690_000 picoseconds. + Weight::from_parts(26_904_224, 5201) + // Standard Error: 1_190 + .saturating_add(Weight::from_parts(17_616, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Proxy::Proxies` (r:1 w:1) + /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) + /// The range of component `p` is `[0, 30]`. + fn kill_pure(p: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `198 + p * (37 ±0)` + // Estimated: `5201` + // Minimum execution time: 23_051_000 picoseconds. + Weight::from_parts(24_040_556, 5201) + // Standard Error: 1_231 + .saturating_add(Weight::from_parts(34_059, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Proxy::Proxies` (r:1 w:1) + /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// Storage: `Proxy::Announcements` (r:1 w:1) + /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(2233), added: 4708, mode: `MaxEncodedLen`) + fn poke_deposit() -> Weight { + // Proof Size summary in bytes: + // Measured: `524` + // Estimated: `6193` + // Minimum execution time: 46_677_000 picoseconds. + Weight::from_parts(48_060_000, 6193) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } +} + + +#[cfg(test)] +mod tests { + use frame_support::{traits::Get, weights::Weight, dispatch::DispatchClass}; + use crate::constants::{MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO}; + use crate::weights::extrinsic_weights::ExtrinsicBaseWeight; + + #[allow(dead_code)] + struct BlockWeights; + impl Get for BlockWeights { + fn get() -> frame_system::limits::BlockWeights { + frame_system::limits::BlockWeights::builder() + .base_block(Weight::zero()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::non_mandatory(), |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .build_or_panic() + } + } + + #[test] + fn test_proxy() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 5201 + ); + } + #[test] + fn test_proxy_announced() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 6193 + ); + } + #[test] + fn test_remove_announcement() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 6193 + ); + } + #[test] + fn test_reject_announcement() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 6193 + ); + } + #[test] + fn test_announce() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 6193 + ); + } + #[test] + fn test_add_proxy() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 5201 + ); + } + #[test] + fn test_remove_proxy() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 5201 + ); + } + #[test] + fn test_remove_proxies() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 5201 + ); + } + #[test] + fn test_create_pure() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 5201 + ); + } + #[test] + fn test_kill_pure() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 5201 + ); + } + #[test] + fn test_poke_deposit() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 6193 + ); + } +} diff --git a/runtime/common/src/weights/pallet_scheduler.rs b/runtime/common/src/weights/pallet_scheduler.rs new file mode 100644 index 0000000000..b34002bb19 --- /dev/null +++ b/runtime/common/src/weights/pallet_scheduler.rs @@ -0,0 +1,425 @@ +//! Autogenerated weights for pallet_scheduler +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-04-18, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `ip-10-173-0-75`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 + +// Executed Command: +// ./scripts/../target/release/frequency +// benchmark +// pallet +// --pallet=pallet_scheduler +// --extrinsic +// * +// --heap-pages=4096 +// --steps=50 +// --repeat=20 +// --output=./scripts/../runtime/common/src/weights +// --template=./scripts/../.maintain/runtime-weight-template.hbs +// --additional-trie-layers=3 +// --runtime=./scripts/../target/release/wbuild/frequency-runtime/frequency_runtime.wasm +// --genesis-builder=runtime + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::Weight}; +use core::marker::PhantomData; + +/// Weights for `pallet_scheduler` using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl pallet_scheduler::WeightInfo for SubstrateWeight { + /// Storage: `Scheduler::IncompleteSince` (r:1 w:1) + /// Proof: `Scheduler::IncompleteSince` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + fn service_agendas_base() -> Weight { + // Proof Size summary in bytes: + // Measured: `30` + // Estimated: `1984` + // Minimum execution time: 5_923_000 picoseconds. + Weight::from_parts(6_325_000, 1984) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Scheduler::Agenda` (r:1 w:1) + /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(10463), added: 12938, mode: `MaxEncodedLen`) + /// The range of component `s` is `[0, 50]`. + fn service_agenda_base(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `77 + s * (177 ±0)` + // Estimated: `14423` + // Minimum execution time: 3_765_000 picoseconds. + Weight::from_parts(7_165_057, 14423) + // Standard Error: 1_576 + .saturating_add(Weight::from_parts(402_914, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + fn service_task_base() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_335_000 picoseconds. + Weight::from_parts(3_538_000, 0) + } + /// Storage: `Preimage::PreimageFor` (r:1 w:1) + /// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `Measured`) + /// Storage: `Preimage::StatusFor` (r:1 w:0) + /// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// Storage: `Preimage::RequestStatusFor` (r:1 w:1) + /// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(91), added: 2566, mode: `MaxEncodedLen`) + /// The range of component `s` is `[128, 4194304]`. + fn service_task_fetched(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `141 + s * (1 ±0)` + // Estimated: `4101 + s * (1 ±0)` + // Minimum execution time: 18_417_000 picoseconds. + Weight::from_parts(18_879_000, 4101) + // Standard Error: 247 + .saturating_add(Weight::from_parts(22_727, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + .saturating_add(Weight::from_parts(0, 1).saturating_mul(s.into())) + } + /// Storage: `Scheduler::Lookup` (r:0 w:1) + /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + fn service_task_named() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 4_913_000 picoseconds. + Weight::from_parts(5_230_000, 0) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + fn service_task_periodic() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 3_230_000 picoseconds. + Weight::from_parts(3_450_000, 0) + } + fn execute_dispatch_signed() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_402_000 picoseconds. + Weight::from_parts(2_514_000, 0) + } + fn execute_dispatch_unsigned() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 2_362_000 picoseconds. + Weight::from_parts(2_560_000, 0) + } + /// Storage: `Scheduler::Agenda` (r:1 w:1) + /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(10463), added: 12938, mode: `MaxEncodedLen`) + /// The range of component `s` is `[0, 49]`. + fn schedule(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `77 + s * (177 ±0)` + // Estimated: `14423` + // Minimum execution time: 10_992_000 picoseconds. + Weight::from_parts(14_228_692, 14423) + // Standard Error: 1_567 + .saturating_add(Weight::from_parts(443_830, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Scheduler::Agenda` (r:1 w:1) + /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(10463), added: 12938, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Retries` (r:0 w:1) + /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Lookup` (r:0 w:1) + /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// The range of component `s` is `[1, 50]`. + fn cancel(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `77 + s * (177 ±0)` + // Estimated: `14423` + // Minimum execution time: 16_813_000 picoseconds. + Weight::from_parts(16_429_852, 14423) + // Standard Error: 974 + .saturating_add(Weight::from_parts(673_525, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } + /// Storage: `Scheduler::Lookup` (r:1 w:1) + /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Agenda` (r:1 w:1) + /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(10463), added: 12938, mode: `MaxEncodedLen`) + /// The range of component `s` is `[0, 49]`. + fn schedule_named(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `254 + s * (185 ±0)` + // Estimated: `14423` + // Minimum execution time: 14_363_000 picoseconds. + Weight::from_parts(19_246_199, 14423) + // Standard Error: 2_979 + .saturating_add(Weight::from_parts(497_896, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: `Scheduler::Lookup` (r:1 w:1) + /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Agenda` (r:1 w:1) + /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(10463), added: 12938, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Retries` (r:0 w:1) + /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`) + /// The range of component `s` is `[1, 50]`. + fn cancel_named(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `280 + s * (185 ±0)` + // Estimated: `14423` + // Minimum execution time: 19_333_000 picoseconds. + Weight::from_parts(20_143_397, 14423) + // Standard Error: 1_594 + .saturating_add(Weight::from_parts(712_900, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } + /// Storage: `Scheduler::Agenda` (r:1 w:1) + /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(10463), added: 12938, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Retries` (r:0 w:1) + /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`) + /// The range of component `s` is `[1, 50]`. + fn schedule_retry(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `117` + // Estimated: `14423` + // Minimum execution time: 10_130_000 picoseconds. + Weight::from_parts(10_446_030, 14423) + // Standard Error: 2_791 + .saturating_add(Weight::from_parts(33_702, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: `Scheduler::Agenda` (r:1 w:0) + /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(10463), added: 12938, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Retries` (r:0 w:1) + /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`) + fn set_retry() -> Weight { + // Proof Size summary in bytes: + // Measured: `8927` + // Estimated: `14423` + // Minimum execution time: 27_637_000 picoseconds. + Weight::from_parts(28_669_000, 14423) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Scheduler::Lookup` (r:1 w:0) + /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Agenda` (r:1 w:0) + /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(10463), added: 12938, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Retries` (r:0 w:1) + /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`) + fn set_retry_named() -> Weight { + // Proof Size summary in bytes: + // Measured: `9605` + // Estimated: `14423` + // Minimum execution time: 37_133_000 picoseconds. + Weight::from_parts(38_282_000, 14423) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Scheduler::Agenda` (r:1 w:0) + /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(10463), added: 12938, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Retries` (r:0 w:1) + /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`) + fn cancel_retry() -> Weight { + // Proof Size summary in bytes: + // Measured: `8939` + // Estimated: `14423` + // Minimum execution time: 26_623_000 picoseconds. + Weight::from_parts(27_646_000, 14423) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Scheduler::Lookup` (r:1 w:0) + /// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Agenda` (r:1 w:0) + /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(10463), added: 12938, mode: `MaxEncodedLen`) + /// Storage: `Scheduler::Retries` (r:0 w:1) + /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`) + fn cancel_retry_named() -> Weight { + // Proof Size summary in bytes: + // Measured: `9617` + // Estimated: `14423` + // Minimum execution time: 35_974_000 picoseconds. + Weight::from_parts(37_149_000, 14423) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } +} + + +#[cfg(test)] +mod tests { + use frame_support::{traits::Get, weights::Weight, dispatch::DispatchClass}; + use crate::constants::{MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO}; + use crate::weights::extrinsic_weights::ExtrinsicBaseWeight; + + #[allow(dead_code)] + struct BlockWeights; + impl Get for BlockWeights { + fn get() -> frame_system::limits::BlockWeights { + frame_system::limits::BlockWeights::builder() + .base_block(Weight::zero()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::non_mandatory(), |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .build_or_panic() + } + } + + #[test] + fn test_service_agendas_base() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 1984 + ); + } + #[test] + fn test_service_agenda_base() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 14423 + ); + } + #[test] + fn test_service_task_fetched() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4101 + ); + } + #[test] + fn test_schedule() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 14423 + ); + } + #[test] + fn test_cancel() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 14423 + ); + } + #[test] + fn test_schedule_named() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 14423 + ); + } + #[test] + fn test_cancel_named() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 14423 + ); + } + #[test] + fn test_schedule_retry() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 14423 + ); + } + #[test] + fn test_set_retry() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 14423 + ); + } + #[test] + fn test_set_retry_named() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 14423 + ); + } + #[test] + fn test_cancel_retry() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 14423 + ); + } + #[test] + fn test_cancel_retry_named() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 14423 + ); + } +} diff --git a/runtime/common/src/weights/pallet_session.rs b/runtime/common/src/weights/pallet_session.rs new file mode 100644 index 0000000000..511f9d9a3b --- /dev/null +++ b/runtime/common/src/weights/pallet_session.rs @@ -0,0 +1,111 @@ +//! Autogenerated weights for pallet_session +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-04-18, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `ip-10-173-0-75`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 + +// Executed Command: +// ./scripts/../target/release/frequency +// benchmark +// pallet +// --pallet=pallet_session +// --extrinsic +// * +// --heap-pages=4096 +// --steps=50 +// --repeat=20 +// --output=./scripts/../runtime/common/src/weights +// --template=./scripts/../.maintain/runtime-weight-template.hbs +// --additional-trie-layers=3 +// --runtime=./scripts/../target/release/wbuild/frequency-runtime/frequency_runtime.wasm +// --genesis-builder=runtime + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::Weight}; +use core::marker::PhantomData; + +/// Weights for `pallet_session` using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl pallet_session::WeightInfo for SubstrateWeight { + /// Storage: `Session::NextKeys` (r:1 w:1) + /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Session::KeyOwner` (r:1 w:1) + /// Proof: `Session::KeyOwner` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn set_keys() -> Weight { + // Proof Size summary in bytes: + // Measured: `298` + // Estimated: `4258` + // Minimum execution time: 20_709_000 picoseconds. + Weight::from_parts(21_348_000, 4258) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } + /// Storage: `Session::NextKeys` (r:1 w:1) + /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Session::KeyOwner` (r:0 w:1) + /// Proof: `Session::KeyOwner` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn purge_keys() -> Weight { + // Proof Size summary in bytes: + // Measured: `280` + // Estimated: `4240` + // Minimum execution time: 15_424_000 picoseconds. + Weight::from_parts(15_909_000, 4240) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(2_u64)) + } +} + + +#[cfg(test)] +mod tests { + use frame_support::{traits::Get, weights::Weight, dispatch::DispatchClass}; + use crate::constants::{MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO}; + use crate::weights::extrinsic_weights::ExtrinsicBaseWeight; + + #[allow(dead_code)] + struct BlockWeights; + impl Get for BlockWeights { + fn get() -> frame_system::limits::BlockWeights { + frame_system::limits::BlockWeights::builder() + .base_block(Weight::zero()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::non_mandatory(), |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .build_or_panic() + } + } + + #[test] + fn test_set_keys() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4258 + ); + } + #[test] + fn test_purge_keys() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4240 + ); + } +} diff --git a/runtime/common/src/weights/pallet_timestamp.rs b/runtime/common/src/weights/pallet_timestamp.rs new file mode 100644 index 0000000000..192e90021e --- /dev/null +++ b/runtime/common/src/weights/pallet_timestamp.rs @@ -0,0 +1,93 @@ +//! Autogenerated weights for pallet_timestamp +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-04-18, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `ip-10-173-0-75`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 + +// Executed Command: +// ./scripts/../target/release/frequency +// benchmark +// pallet +// --pallet=pallet_timestamp +// --extrinsic +// * +// --heap-pages=4096 +// --steps=50 +// --repeat=20 +// --output=./scripts/../runtime/common/src/weights +// --template=./scripts/../.maintain/runtime-weight-template.hbs +// --additional-trie-layers=3 +// --runtime=./scripts/../target/release/wbuild/frequency-runtime/frequency_runtime.wasm +// --genesis-builder=runtime + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::Weight}; +use core::marker::PhantomData; + +/// Weights for `pallet_timestamp` using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl pallet_timestamp::WeightInfo for SubstrateWeight { + /// Storage: `Timestamp::Now` (r:1 w:1) + /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + /// Storage: `Aura::CurrentSlot` (r:1 w:0) + /// Proof: `Aura::CurrentSlot` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) + fn set() -> Weight { + // Proof Size summary in bytes: + // Measured: `156` + // Estimated: `1988` + // Minimum execution time: 8_359_000 picoseconds. + Weight::from_parts(8_750_000, 1988) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + fn on_finalize() -> Weight { + // Proof Size summary in bytes: + // Measured: `128` + // Estimated: `0` + // Minimum execution time: 4_476_000 picoseconds. + Weight::from_parts(4_607_000, 0) + } +} + + +#[cfg(test)] +mod tests { + use frame_support::{traits::Get, weights::Weight, dispatch::DispatchClass}; + use crate::constants::{MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO}; + use crate::weights::extrinsic_weights::ExtrinsicBaseWeight; + + #[allow(dead_code)] + struct BlockWeights; + impl Get for BlockWeights { + fn get() -> frame_system::limits::BlockWeights { + frame_system::limits::BlockWeights::builder() + .base_block(Weight::zero()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::non_mandatory(), |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .build_or_panic() + } + } + + #[test] + fn test_set() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 1988 + ); + } +} diff --git a/runtime/common/src/weights/pallet_transaction_payment.rs b/runtime/common/src/weights/pallet_transaction_payment.rs new file mode 100644 index 0000000000..05c94ca31c --- /dev/null +++ b/runtime/common/src/weights/pallet_transaction_payment.rs @@ -0,0 +1,84 @@ +//! Autogenerated weights for pallet_transaction_payment +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-04-18, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `ip-10-173-0-75`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 + +// Executed Command: +// ./scripts/../target/release/frequency +// benchmark +// pallet +// --pallet=pallet_transaction_payment +// --extrinsic +// * +// --heap-pages=4096 +// --steps=50 +// --repeat=20 +// --output=./scripts/../runtime/common/src/weights +// --template=./scripts/../.maintain/runtime-weight-template.hbs +// --additional-trie-layers=3 +// --runtime=./scripts/../target/release/wbuild/frequency-runtime/frequency_runtime.wasm +// --genesis-builder=runtime + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::Weight}; +use core::marker::PhantomData; + +/// Weights for `pallet_transaction_payment` using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl pallet_transaction_payment::WeightInfo for SubstrateWeight { + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + fn charge_transaction_payment() -> Weight { + // Proof Size summary in bytes: + // Measured: `101` + // Estimated: `4088` + // Minimum execution time: 28_832_000 picoseconds. + Weight::from_parts(29_478_000, 4088) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } +} + + +#[cfg(test)] +mod tests { + use frame_support::{traits::Get, weights::Weight, dispatch::DispatchClass}; + use crate::constants::{MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO}; + use crate::weights::extrinsic_weights::ExtrinsicBaseWeight; + + #[allow(dead_code)] + struct BlockWeights; + impl Get for BlockWeights { + fn get() -> frame_system::limits::BlockWeights { + frame_system::limits::BlockWeights::builder() + .base_block(Weight::zero()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::non_mandatory(), |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .build_or_panic() + } + } + + #[test] + fn test_charge_transaction_payment() { + assert!( + BlockWeights::get() + .per_class + .get(frame_support::dispatch::DispatchClass::Normal) + .max_extrinsic + .unwrap_or_else(::max_value) + .proof_size() + > 4088 + ); + } +} diff --git a/runtime/common/src/weights/pallet_utility.rs b/runtime/common/src/weights/pallet_utility.rs new file mode 100644 index 0000000000..df57f13f7b --- /dev/null +++ b/runtime/common/src/weights/pallet_utility.rs @@ -0,0 +1,119 @@ +//! Autogenerated weights for pallet_utility +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 47.0.0 +//! DATE: 2025-04-18, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `ip-10-173-0-75`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 + +// Executed Command: +// ./scripts/../target/release/frequency +// benchmark +// pallet +// --pallet=pallet_utility +// --extrinsic +// * +// --heap-pages=4096 +// --steps=50 +// --repeat=20 +// --output=./scripts/../runtime/common/src/weights +// --template=./scripts/../.maintain/runtime-weight-template.hbs +// --additional-trie-layers=3 +// --runtime=./scripts/../target/release/wbuild/frequency-runtime/frequency_runtime.wasm +// --genesis-builder=runtime + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::Weight}; +use core::marker::PhantomData; + +/// Weights for `pallet_utility` using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl pallet_utility::WeightInfo for SubstrateWeight { + /// The range of component `c` is `[0, 1000]`. + fn batch(c: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 4_978_000 picoseconds. + Weight::from_parts(5_070_000, 0) + // Standard Error: 1_873 + .saturating_add(Weight::from_parts(3_163_178, 0).saturating_mul(c.into())) + } + fn as_derivative() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 4_579_000 picoseconds. + Weight::from_parts(4_803_000, 0) + } + /// The range of component `c` is `[0, 1000]`. + fn batch_all(c: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 4_917_000 picoseconds. + Weight::from_parts(4_969_000, 0) + // Standard Error: 1_788 + .saturating_add(Weight::from_parts(3_397_013, 0).saturating_mul(c.into())) + } + fn dispatch_as() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 6_970_000 picoseconds. + Weight::from_parts(7_258_000, 0) + } + /// The range of component `c` is `[0, 1000]`. + fn force_batch(c: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 4_896_000 picoseconds. + Weight::from_parts(5_052_000, 0) + // Standard Error: 1_816 + .saturating_add(Weight::from_parts(3_132_489, 0).saturating_mul(c.into())) + } + fn dispatch_as_fallible() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 6_929_000 picoseconds. + Weight::from_parts(7_118_000, 0) + } + fn if_else() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 8_489_000 picoseconds. + Weight::from_parts(8_937_000, 0) + } +} + + +#[cfg(test)] +mod tests { + use frame_support::{traits::Get, weights::Weight, dispatch::DispatchClass}; + use crate::constants::{MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO}; + use crate::weights::extrinsic_weights::ExtrinsicBaseWeight; + + #[allow(dead_code)] + struct BlockWeights; + impl Get for BlockWeights { + fn get() -> frame_system::limits::BlockWeights { + frame_system::limits::BlockWeights::builder() + .base_block(Weight::zero()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::non_mandatory(), |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .build_or_panic() + } + } + +} diff --git a/runtime/common/src/weights/rocksdb_weights.rs b/runtime/common/src/weights/rocksdb_weights.rs new file mode 100644 index 0000000000..ad2ed5ec7d --- /dev/null +++ b/runtime/common/src/weights/rocksdb_weights.rs @@ -0,0 +1,95 @@ +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2024-08-22 (Y/M/D) +//! HOSTNAME: `ip-10-173-4-131`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` +//! +//! DATABASE: `RocksDb`, RUNTIME: `Frequency` +//! BLOCK-NUM: `BlockId::Number(4413540)` +//! SKIP-WRITE: `false`, SKIP-READ: `false`, WARMUPS: `2` +//! STATE-VERSION: `V1`, STATE-CACHE-SIZE: `` +//! WEIGHT-PATH: `` +//! METRIC: `Average`, WEIGHT-MUL: `1.3`, WEIGHT-ADD: `0` + +// Executed Command: +// ./target/release/frequency +// benchmark +// storage +// --state-version=1 +// --chain=frequency +// --base-path=/data +// --include-child-trees +// --warmups=2 +// --mul=1.3 + +/// Storage DB weights for the `Frequency` runtime and `RocksDb`. +pub mod constants { + use frame_support::weights::constants; + use sp_core::parameter_types; + use sp_weights::RuntimeDbWeight; + + parameter_types! { + /// By default, Substrate uses `RocksDB`, so this will be the weight used throughout + /// the runtime. + pub const RocksDbWeight: RuntimeDbWeight = RuntimeDbWeight { + // Time to read one storage item. + // Calculated by multiplying the *Average* of all values with `1.3` and adding `0`. + // + // Stats nanoseconds: + // Min, Max: 1_676, 3_967_371 + // Average: 36_369 + // Median: 36_876 + // Std-Dev: 10368.83 + // + // Percentiles nanoseconds: + // 99th: 60_542 + // 95th: 52_621 + // 75th: 43_407 + read: 47_280 * constants::WEIGHT_REF_TIME_PER_NANOS, + + // Time to write one storage item. + // Calculated by multiplying the *Average* of all values with `1.3` and adding `0`. + // + // Stats nanoseconds: + // Min, Max: 4_954, 87_545_132 + // Average: 57_212 + // Median: 62_141 + // Std-Dev: 60272.19 + // + // Percentiles nanoseconds: + // 99th: 101_820 + // 95th: 90_948 + // 75th: 75_800 + write: 74_376 * constants::WEIGHT_REF_TIME_PER_NANOS, + }; + } + + #[cfg(test)] + mod test_db_weights { + use super::constants::RocksDbWeight as W; + use sp_weights::constants; + + /// Checks that all weights exist and have sane values. + // NOTE: If this test fails but you are sure that the generated values are fine, + // you can delete it. + #[test] + fn bound() { + // At least 1 µs. + assert!( + W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, + "Read weight should be at least 1 µs." + ); + assert!( + W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, + "Write weight should be at least 1 µs." + ); + // At most 1 ms. + assert!( + W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, + "Read weight should be at most 1 ms." + ); + assert!( + W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, + "Write weight should be at most 1 ms." + ); + } + } +} diff --git a/runtime/frequency/Cargo.toml b/runtime/frequency/Cargo.toml new file mode 100644 index 0000000000..ec9cfa0363 --- /dev/null +++ b/runtime/frequency/Cargo.toml @@ -0,0 +1,272 @@ +[package] +authors = ["Frequency"] +description = "Runtime for Frequency mainnet" +edition = "2021" +homepage = "https://frequency.xyz" +license = "Apache-2.0" +name = "frequency-runtime" +repository = "https://github.com/frequency-chain/frequency/" +version = "0.0.0" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[build-dependencies] +substrate-wasm-builder = { workspace = true, optional = true } + +[dependencies] +parity-scale-codec = { workspace = true, features = ["derive"] } +hex = { workspace = true, default-features = false } +hex-literal = { workspace = true } +log = { workspace = true } +scale-info = { workspace = true, features = ["derive"] } + +serde = { workspace = true, optional = true, features = ["derive"] } +serde_json = { workspace = true, optional = true, features = ["alloc"] } + +smallvec = { workspace = true } +# Substrate +frame-benchmarking = { workspace = true, optional = true } +frame-executive = { workspace = true } +frame-support = { workspace = true } +frame-system = { workspace = true } +frame-system-benchmarking = { workspace = true, optional = true } +frame-system-rpc-runtime-api = { workspace = true } +frame-try-runtime = { workspace = true, optional = true } +frame-metadata-hash-extension = { workspace = true } + +pallet-aura = { workspace = true } +pallet-authorship = { workspace = true } +pallet-balances = { workspace = true } +pallet-preimage = { workspace = true } +pallet-scheduler = { workspace = true } +pallet-democracy = { workspace = true } +pallet-collective = { workspace = true } +pallet-session = { workspace = true } +pallet-sudo = { workspace = true } +pallet-multisig = { workspace = true } +pallet-timestamp = { workspace = true } +pallet-transaction-payment = { workspace = true } +pallet-transaction-payment-rpc-runtime-api = { workspace = true } +pallet-utility = { workspace = true } +pallet-proxy = { workspace = true } + +sp-api = { workspace = true } +sp-block-builder = { workspace = true } +sp-consensus-aura = { workspace = true } +sp-core = { workspace = true } +sp-inherents = { workspace = true } +sp-io = { workspace = true } +sp-genesis-builder = { workspace = true } +static_assertions = { workspace = true } + +sp-offchain = { workspace = true } +sp-runtime = { features = ["serde"], workspace = true } +sp-session = { workspace = true } +sp-transaction-pool = { workspace = true } +sp-version = { workspace = true } +# Ported Pallet from ORML +pallet-time-release = { path = "../../pallets/time-release", default-features = false } +pallet-treasury = { path = "../../pallets/treasury", default-features = false } +# Frequency +common-primitives = { default-features = false, path = "../../common/primitives" } +common-runtime = { path = "../common", default-features = false } +pallet-capacity = { path = "../../pallets/capacity", default-features = false } +pallet-capacity-runtime-api = { path="../../pallets/capacity/src/runtime-api", default-features = false } +pallet-frequency-tx-payment = { path = "../../pallets/frequency-tx-payment", default-features = false } +pallet-frequency-tx-payment-runtime-api = { path = "../../pallets/frequency-tx-payment/src/runtime-api", default-features = false } +pallet-messages = { path = "../../pallets/messages", default-features = false } +pallet-messages-runtime-api = { path = "../../pallets/messages/src/runtime-api", default-features = false } +pallet-msa = { path = "../../pallets/msa", default-features = false } +pallet-msa-runtime-api = { path = "../../pallets/msa/src/runtime-api", default-features = false } +pallet-schemas = { path = "../../pallets/schemas", default-features = false } +pallet-schemas-runtime-api = { path = "../../pallets/schemas/src/runtime-api", default-features = false } +pallet-stateful-storage = { path = "../../pallets/stateful-storage", default-features = false } +pallet-stateful-storage-runtime-api = { path = "../../pallets/stateful-storage/src/runtime-api", default-features = false } +pallet-handles = { path = "../../pallets/handles", default-features = false } +pallet-handles-runtime-api = { path = "../../pallets/handles/src/runtime-api", default-features = false } +pallet-passkey = { path = "../../pallets/passkey", default-features = false } +system-runtime-api = { path = '../system-runtime-api', default-features = false } +# Polkadot +polkadot-parachain-primitives = { workspace = true } +polkadot-runtime-common = { workspace = true } +# Cumulus +cumulus-pallet-aura-ext = { workspace = true } +cumulus-pallet-parachain-system = { workspace = true } +cumulus-pallet-session-benchmarking = { workspace = true } +cumulus-pallet-weight-reclaim = { workspace = true } +cumulus-primitives-core = { workspace = true } +cumulus-primitives-timestamp = { workspace = true } +cumulus-primitives-aura = { workspace = true } +pallet-collator-selection = { workspace = true } +parachain-info = { workspace = true } +sp-debug-derive = { workspace = true, optional = true } + +[features] +default = ["std"] +std = [ + "common-primitives/std", + "cumulus-pallet-aura-ext/std", + "cumulus-pallet-parachain-system/std", + "cumulus-pallet-weight-reclaim/std", + "cumulus-primitives-aura/std", + "cumulus-primitives-core/std", + "cumulus-primitives-timestamp/std", + "frame-executive/std", + "frame-support/std", + "frame-system-rpc-runtime-api/std", + "frame-system/std", + "log/std", + "pallet-aura/std", + "pallet-authorship/std", + "pallet-balances/std", + "pallet-capacity/std", + "pallet-capacity-runtime-api/std", + "pallet-collator-selection/std", + "pallet-collective/std", + "pallet-democracy/std", + "pallet-frequency-tx-payment-runtime-api/std", + "pallet-frequency-tx-payment/std", + "pallet-handles-runtime-api/std", + "pallet-handles/std", + "pallet-passkey/std", + "pallet-messages-runtime-api/std", + "pallet-messages/std", + "pallet-msa-runtime-api/std", + "pallet-msa/std", + "pallet-multisig/std", + "pallet-preimage/std", + "pallet-proxy/std", + "pallet-scheduler/std", + "pallet-schemas-runtime-api/std", + "pallet-schemas/std", + "pallet-session/std", + "pallet-stateful-storage-runtime-api/std", + "pallet-stateful-storage/std", + "pallet-sudo/std", + "pallet-time-release/std", + "pallet-timestamp/std", + "pallet-transaction-payment-rpc-runtime-api/std", + "pallet-transaction-payment/std", + "pallet-treasury/std", + "pallet-utility/std", + "parachain-info/std", + "parity-scale-codec/std", + "polkadot-parachain-primitives/std", + "polkadot-runtime-common/std", + "scale-info/std", + "serde/std", + "serde_json/std", + "sp-api/std", + "sp-block-builder/std", + "sp-consensus-aura/std", + "sp-core/std", + "sp-inherents/std", + "sp-io/std", + "sp-offchain/std", + "sp-runtime/std", + "sp-session/std", + "cumulus-pallet-session-benchmarking/std", + "sp-transaction-pool/std", + "sp-genesis-builder/std", + "common-runtime/std", + "sp-version/std", + "system-runtime-api/std", + "substrate-wasm-builder", + "frame-metadata-hash-extension/std", +] +runtime-benchmarks = [ + "cumulus-pallet-parachain-system/runtime-benchmarks", + "cumulus-pallet-session-benchmarking/runtime-benchmarks", + "cumulus-pallet-weight-reclaim/runtime-benchmarks", + "frame-benchmarking/runtime-benchmarks", + "frame-support/runtime-benchmarks", + "frame-system-benchmarking", + "frame-system-benchmarking/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "pallet-balances/runtime-benchmarks", + "pallet-capacity/runtime-benchmarks", + "pallet-collator-selection/runtime-benchmarks", + "pallet-collective/runtime-benchmarks", + "pallet-democracy/runtime-benchmarks", + "pallet-frequency-tx-payment/runtime-benchmarks", + "pallet-handles/runtime-benchmarks", + "pallet-passkey/runtime-benchmarks", + "pallet-messages/runtime-benchmarks", + "pallet-msa/runtime-benchmarks", + "pallet-multisig/runtime-benchmarks", + "pallet-preimage/runtime-benchmarks", + "pallet-proxy/runtime-benchmarks", + "pallet-scheduler/runtime-benchmarks", + "pallet-schemas/runtime-benchmarks", + "pallet-stateful-storage/runtime-benchmarks", + "pallet-time-release/runtime-benchmarks", + "pallet-timestamp/runtime-benchmarks", + "pallet-treasury/runtime-benchmarks", + "pallet-utility/runtime-benchmarks", + "sp-runtime/runtime-benchmarks", + "polkadot-runtime-common/runtime-benchmarks", + "polkadot-parachain-primitives/runtime-benchmarks", + "common-runtime/runtime-benchmarks", +] +try-runtime = [ + "cumulus-pallet-aura-ext/try-runtime", + "cumulus-pallet-parachain-system/try-runtime", + "cumulus-pallet-weight-reclaim/try-runtime", + "frame-executive/try-runtime", + "frame-system/try-runtime", + "frame-try-runtime", + "pallet-aura/try-runtime", + "pallet-authorship/try-runtime", + "pallet-balances/try-runtime", + "pallet-capacity/try-runtime", + "pallet-collator-selection/try-runtime", + "pallet-collective/try-runtime", + "pallet-democracy/try-runtime", + "pallet-frequency-tx-payment/try-runtime", + "pallet-handles/try-runtime", + "pallet-passkey/try-runtime", + "pallet-messages/try-runtime", + "pallet-msa/try-runtime", + "pallet-multisig/try-runtime", + "pallet-preimage/try-runtime", + "pallet-proxy/try-runtime", + "pallet-scheduler/try-runtime", + "pallet-schemas/try-runtime", + "pallet-session/try-runtime", + "pallet-stateful-storage/try-runtime", + "pallet-sudo/try-runtime", + "pallet-time-release/try-runtime", + "pallet-timestamp/try-runtime", + "pallet-transaction-payment/try-runtime", + "pallet-treasury/try-runtime", + "pallet-utility/try-runtime", + "parachain-info/try-runtime", + "common-runtime/try-runtime", + "sp-runtime/try-runtime", +] +frequency = ["common-runtime/frequency", "pallet-msa/frequency"] +frequency-testnet = ["common-runtime/frequency-testnet", "pallet-msa/frequency-testnet"] +frequency-local = ["common-runtime/frequency-local"] +frequency-no-relay = ["common-runtime/frequency-no-relay"] +# Following features are used in generating lean wasms +no-metadata-docs = ["frame-support/no-metadata-docs"] +on-chain-release-build = ["metadata-hash", "sp-api/disable-logging"] + +# Enable the metadata hash generation. +# +# This is hidden behind a feature because it increases the compile time. +# The wasm binary needs to be compiled twice, once to fetch the metadata, +# generate the metadata hash and then a second time with the +# `RUNTIME_METADATA_HASH` environment variable set for the `CheckMetadataHash` +# extension. +metadata-hash = ["substrate-wasm-builder/metadata-hash"] +frequency-lint-check = [] +test = [] +parameterized-consensus-hook = [] +force-debug=[ + "sp-debug-derive/force-debug", +] + +[lints] +workspace = true diff --git a/runtime/frequency/build.rs b/runtime/frequency/build.rs new file mode 100644 index 0000000000..3326fe2e3d --- /dev/null +++ b/runtime/frequency/build.rs @@ -0,0 +1,44 @@ +// Duplicated here to reduce the build dependencies +#[allow(unused)] +const FREQUENCY_TESTNET_TOKEN: &str = "XRQCY"; +#[allow(unused)] +const FREQUENCY_LOCAL_TOKEN: &str = "UNIT"; +#[allow(unused)] +const FREQUENCY_TOKEN: &str = "FRQCY"; +#[allow(unused)] +const TOKEN_DECIMALS: u8 = 8; + +#[cfg(all(feature = "std", not(feature = "metadata-hash")))] +fn main() { + substrate_wasm_builder::WasmBuilder::build_using_defaults() +} + +#[cfg(all(feature = "std", feature = "metadata-hash", feature = "frequency"))] +fn main() { + substrate_wasm_builder::WasmBuilder::init_with_defaults() + .enable_metadata_hash(FREQUENCY_TOKEN, TOKEN_DECIMALS) + .build() +} + +#[cfg(all(feature = "std", feature = "metadata-hash", feature = "frequency-testnet"))] +fn main() { + substrate_wasm_builder::WasmBuilder::init_with_defaults() + .enable_metadata_hash(FREQUENCY_TESTNET_TOKEN, TOKEN_DECIMALS) + .build() +} + +#[cfg(all( + feature = "std", + feature = "metadata-hash", + any(feature = "frequency-no-relay", feature = "frequency-local") +))] +fn main() { + substrate_wasm_builder::WasmBuilder::init_with_defaults() + .enable_metadata_hash(FREQUENCY_LOCAL_TOKEN, TOKEN_DECIMALS) + .build() +} + +/// The wasm builder is deactivated when compiling +/// this crate for wasm to speed up the compilation. +#[cfg(not(feature = "std"))] +fn main() {} diff --git a/runtime/frequency/src/ethereum.rs b/runtime/frequency/src/ethereum.rs new file mode 100644 index 0000000000..3ff48b95f0 --- /dev/null +++ b/runtime/frequency/src/ethereum.rs @@ -0,0 +1,69 @@ +use common_primitives::signatures::{AccountAddressMapper, EthereumAddressMapper}; +use core::{fmt::Debug, marker::PhantomData}; +use parity_scale_codec::Codec; +use scale_info::StaticTypeInfo; +use sp_core::hexdisplay::HexDisplay; +use sp_runtime::{ + traits::{LookupError, StaticLookup}, + MultiAddress, +}; + +/// A lookup implementation returning the `AccountId` from a `MultiAddress`. +pub struct EthereumCompatibleAccountIdLookup( + PhantomData<(AccountId, AccountIndex)>, +); +impl StaticLookup + for EthereumCompatibleAccountIdLookup +where + AccountId: Codec + Clone + PartialEq + Debug, + AccountIndex: Codec + Clone + PartialEq + Debug, + MultiAddress: Codec + StaticTypeInfo, +{ + type Source = MultiAddress; + type Target = AccountId; + fn lookup(x: Self::Source) -> Result { + match x { + MultiAddress::Id(i) => Ok(i), + MultiAddress::Address20(acc20) => { + log::debug!(target: "ETHEREUM", "lookup 0x{:?}", HexDisplay::from(&acc20)); + let account_id_bytes = EthereumAddressMapper::to_bytes32(&acc20); + let decoded = + Self::Target::decode(&mut &account_id_bytes[..]).map_err(|_| LookupError)?; + Ok(decoded) + }, + _ => Err(LookupError), + } + } + fn unlookup(x: Self::Target) -> Self::Source { + // We are not converting back to 20 bytes since everywhere we are using Id + MultiAddress::Id(x) + } +} + +#[cfg(test)] +mod tests { + use crate::ethereum::EthereumCompatibleAccountIdLookup; + use sp_core::{bytes::from_hex, crypto::AccountId32}; + use sp_runtime::{traits::StaticLookup, MultiAddress}; + + #[test] + fn address20_should_get_decoded_correctly() { + let lookup = + EthereumCompatibleAccountIdLookup::::lookup(MultiAddress::Address20( + from_hex("0x19a701d23f0ee1748b5d5f883cb833943096c6c4") + .expect("should convert") + .try_into() + .expect("invalid size"), + )); + assert!(lookup.is_ok()); + + let converted = lookup.unwrap(); + let expected = AccountId32::new( + from_hex("0x19a701d23f0ee1748b5d5f883cb833943096c6c4eeeeeeeeeeeeeeeeeeeeeeee") + .expect("should convert") + .try_into() + .expect("invalid size"), + ); + assert_eq!(converted, expected) + } +} diff --git a/runtime/frequency/src/genesis/helpers.rs b/runtime/frequency/src/genesis/helpers.rs new file mode 100644 index 0000000000..27ef1466e3 --- /dev/null +++ b/runtime/frequency/src/genesis/helpers.rs @@ -0,0 +1,161 @@ +use cumulus_primitives_core::ParaId; +use sp_core::{Pair, Public}; +use sp_runtime::traits::{IdentifyAccount, Verify}; +extern crate alloc; +use alloc::{format, vec}; + +use crate::{ + AccountId, AccountIdConversion, AuraId, Balance, BalancesConfig, CollatorSelectionConfig, + CouncilConfig, ParachainInfoConfig, RuntimeGenesisConfig, SessionConfig, SessionKeys, + Signature, SystemConfig, TechnicalCommitteeConfig, Vec, +}; + +use sp_core::sr25519; + +/// Helper function to generate a crypto pair from seed +// The panic from expect will not occur here because these input values are hardcoded. +#[allow(clippy::expect_used)] +pub fn get_from_seed(seed: &str) -> ::Public { + TPublic::Pair::from_string(&format!("//{}", seed), None) + .expect("static values are valid; qed") + .public() +} + +/// Helper function to generate an account ID from seed +pub fn get_account_id_from_seed(seed: &str) -> AccountId +where + AccountPublic: From<::Public>, +{ + AccountPublic::from(get_from_seed::(seed)).into_account() +} + +/// Generate collator keys from seed. +/// +/// This function's return type must always match the session keys of the chain in tuple format. +pub fn get_collator_keys_from_seed(seed: &str) -> AuraId { + get_public_from_seed::(seed) +} + +/// Helper function to generate a crypto pair from seed +#[allow(clippy::expect_used)] +// The panic from expect will not occur here because these input values are hardcoded. +pub fn get_public_from_seed(seed: &str) -> ::Public { + TPublic::Pair::from_string(&format!("//{}", seed), None) + .expect("static values are valid; qed") + .public() +} + +#[allow(clippy::unwrap_used)] +pub fn load_genesis_schemas() -> Vec { + serde_json::from_slice(include_bytes!("../../../../resources/genesis-schemas.json")).unwrap() +} + +type AccountPublic = ::Signer; + +pub fn build_genesis( + invulnerables: Vec<(AccountId, AuraId)>, + candidacy_bond: Balance, + endowed_accounts: Vec<(AccountId, Balance)>, + session_keys: Vec<(AccountId, AccountId, SessionKeys)>, + council_members: Vec, + technical_committee_members: Vec, + schemas: Vec, + id: ParaId, +) -> serde_json::Value { + let genesis = RuntimeGenesisConfig { + system: SystemConfig { ..Default::default() }, + balances: BalancesConfig { balances: endowed_accounts, ..Default::default() }, + parachain_info: ParachainInfoConfig { parachain_id: id, ..Default::default() }, + collator_selection: CollatorSelectionConfig { + invulnerables: invulnerables.iter().cloned().map(|(acc, _)| acc).collect(), + candidacy_bond, + ..Default::default() + }, + session: SessionConfig { keys: session_keys, non_authority_keys: Default::default() }, + // no need to pass anything to aura, in fact it will panic if we do. Session will take care + // of this. + aura: Default::default(), + aura_ext: Default::default(), + #[cfg(any(not(feature = "frequency-no-relay"), feature = "frequency-lint-check"))] + parachain_system: Default::default(), + sudo: crate::SudoConfig { + // Assign network admin rights. + key: Some(get_account_id_from_seed::("Alice")), + }, + schemas: crate::pallet_schemas::GenesisConfig { + initial_schemas: schemas, + ..Default::default() + }, + time_release: Default::default(), + democracy: Default::default(), + treasury: Default::default(), + council: CouncilConfig { phantom: Default::default(), members: council_members }, + technical_committee: TechnicalCommitteeConfig { + phantom: Default::default(), + members: technical_committee_members, + }, + }; + + serde_json::json!(&genesis) +} + +pub fn default_endowed_accounts() -> Vec<(AccountId, Balance)> { + vec![ + get_account_id_from_seed::("Alice"), + get_account_id_from_seed::("Bob"), + get_account_id_from_seed::("Charlie"), + get_account_id_from_seed::("Dave"), + get_account_id_from_seed::("Eve"), + get_account_id_from_seed::("Ferdie"), + get_account_id_from_seed::("Alice//stash"), + get_account_id_from_seed::("Bob//stash"), + get_account_id_from_seed::("Charlie//stash"), + get_account_id_from_seed::("Dave//stash"), + get_account_id_from_seed::("Eve//stash"), + get_account_id_from_seed::("Ferdie//stash"), + common_runtime::constants::TREASURY_PALLET_ID.into_account_truncating(), + ] + .iter() + .cloned() + .map(|k| (k, 1 << 60)) + .collect() +} + +pub fn default_session_keys() -> Vec<(AccountId, AccountId, SessionKeys)> { + default_invulnerables() + .into_iter() + .map(|(acc, aura)| { + ( + acc.clone(), // account id + acc, // validator id + SessionKeys { aura }, // session keys + ) + }) + .collect() +} + +pub fn default_invulnerables() -> Vec<(AccountId, AuraId)> { + vec![ + ( + get_account_id_from_seed::("Alice"), + get_collator_keys_from_seed("Alice"), + ), + (get_account_id_from_seed::("Bob"), get_collator_keys_from_seed("Bob")), + ] +} + +pub fn default_council_members() -> Vec { + vec![ + get_account_id_from_seed::("Alice"), + get_account_id_from_seed::("Charlie"), + get_account_id_from_seed::("Eve"), + ] +} + +pub fn default_technical_committee_members() -> Vec { + vec![ + get_account_id_from_seed::("Bob"), + get_account_id_from_seed::("Dave"), + get_account_id_from_seed::("Eve"), + ] +} diff --git a/runtime/frequency/src/genesis/mod.rs b/runtime/frequency/src/genesis/mod.rs new file mode 100644 index 0000000000..fd742b5551 --- /dev/null +++ b/runtime/frequency/src/genesis/mod.rs @@ -0,0 +1,9 @@ +// pub mod development; +#[cfg(any( + feature = "frequency-no-relay", + feature = "frequency-local", + feature = "frequency-lint-check" +))] +pub mod helpers; + +pub mod presets; diff --git a/runtime/frequency/src/genesis/presets.rs b/runtime/frequency/src/genesis/presets.rs new file mode 100644 index 0000000000..10dfd57d34 --- /dev/null +++ b/runtime/frequency/src/genesis/presets.rs @@ -0,0 +1,130 @@ +use scale_info::prelude::format; + +#[cfg(any( + feature = "frequency-no-relay", + feature = "frequency-local", + feature = "frequency-lint-check" +))] +use crate::genesis::helpers::{ + default_council_members, default_endowed_accounts, default_invulnerables, default_session_keys, + default_technical_committee_members, +}; +extern crate alloc; +use alloc::vec::Vec; + +#[cfg(any( + feature = "frequency-no-relay", + feature = "frequency-local", + feature = "frequency-lint-check" +))] +fn development_genesis_config() -> serde_json::Value { + super::helpers::build_genesis( + default_invulnerables(), + crate::EXISTENTIAL_DEPOSIT * 16, + default_endowed_accounts(), + default_session_keys(), + default_council_members(), + default_technical_committee_members(), + super::helpers::load_genesis_schemas(), + 1000.into(), + ) +} + +#[cfg(any( + feature = "frequency-no-relay", + feature = "frequency-local", + feature = "frequency-lint-check" +))] +fn frequency_local_genesis_config() -> serde_json::Value { + super::helpers::build_genesis( + default_invulnerables(), + crate::EXISTENTIAL_DEPOSIT * 16, + default_endowed_accounts(), + default_session_keys(), + default_council_members(), + default_technical_committee_members(), + super::helpers::load_genesis_schemas(), + 2000.into(), + ) +} + +#[cfg(feature = "frequency-testnet")] +#[allow(clippy::unwrap_used)] +fn frequency_testnet_genesis_config() -> serde_json::Value { + let output: serde_json::Value = serde_json::from_slice( + include_bytes!("../../../../resources/frequency-paseo.json").as_slice(), + ) + .map_err(|e| format!("Invalid JSON blob {:?}", e)) + .unwrap(); + + let runtime = &output["genesis"]["runtime"]; + runtime.clone() +} + +#[cfg(any(feature = "frequency", feature = "runtime-benchmarks"))] +#[allow(clippy::unwrap_used)] +fn frequency_genesis_config() -> serde_json::Value { + #[cfg(not(feature = "runtime-benchmarks"))] + { + let output: serde_json::Value = serde_json::from_slice( + include_bytes!("../../../../resources/frequency.json").as_slice(), + ) + .map_err(|e| format!("Invalid JSON blob {:?}", e)) + .unwrap(); + + // Return the unmodified output when `runtime-benchmarks` is not enabled + return output["genesis"]["runtime"].clone(); + } + + #[cfg(feature = "runtime-benchmarks")] + { + let mut output: serde_json::Value = serde_json::from_slice( + include_bytes!("../../../../resources/frequency.json").as_slice(), + ) + .map_err(|e| format!("Invalid JSON blob {:?}", e)) + .unwrap(); + + if let Some(runtime) = output["genesis"]["runtime"].as_object_mut() { + runtime.remove("vesting"); + runtime["parachainSystem"] = serde_json::json!({}); + runtime["treasury"] = serde_json::json!({}); + runtime["auraExt"] = serde_json::json!({}); + } + + if let Some(system) = output["genesis"]["runtime"]["system"].as_object_mut() { + system.remove("code"); + } + + output["genesis"]["runtime"].clone() + } +} + +/// Provides the JSON representation of predefined genesis config for given `id`. +pub fn get_preset(id: &sp_genesis_builder::PresetId) -> Option> { + let genesis = match id.as_str() { + #[cfg(any( + feature = "frequency-no-relay", + feature = "frequency-local", + feature = "frequency-lint-check" + ))] + "development" => development_genesis_config(), + #[cfg(any( + feature = "frequency-no-relay", + feature = "frequency-local", + feature = "frequency-lint-check" + ))] + "frequency-local" => frequency_local_genesis_config(), + #[cfg(feature = "frequency-testnet")] + "frequency-testnet" => frequency_testnet_genesis_config(), + #[cfg(any(feature = "frequency", feature = "runtime-benchmarks"))] + "frequency" => frequency_genesis_config(), + _ => return None, + }; + Some( + serde_json::to_string(&genesis) + .unwrap_or_else(|err| { + format!("Serialization to json is expected to work. Error: {:?}", err) + }) + .into_bytes(), + ) +} diff --git a/runtime/frequency/src/lib.rs b/runtime/frequency/src/lib.rs new file mode 100644 index 0000000000..bd993b092d --- /dev/null +++ b/runtime/frequency/src/lib.rs @@ -0,0 +1,1860 @@ +#![cfg_attr(not(feature = "std"), no_std)] +// `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256. +#![recursion_limit = "256"] + +// Make the WASM binary available. +#[cfg(feature = "std")] +include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); + +#[cfg(feature = "std")] +#[allow(clippy::expect_used)] +/// Wasm binary unwrapped. If built with `WASM_BINARY`, the function panics. +pub fn wasm_binary_unwrap() -> &'static [u8] { + WASM_BINARY.expect( + "wasm binary is not available. This means the client is \ + built with `WASM_BINARY` flag and it is only usable for \ + production chains. Please rebuild with the flag disabled.", + ) +} + +use alloc::borrow::Cow; +use common_runtime::constants::currency::UNITS; +#[cfg(any(not(feature = "frequency-no-relay"), feature = "frequency-lint-check"))] +use cumulus_pallet_parachain_system::{ + DefaultCoreSelector, RelayNumberMonotonicallyIncreases, RelaychainDataProvider, +}; +#[cfg(any(feature = "runtime-benchmarks", feature = "test"))] +use frame_support::traits::MapSuccess; +use sp_core::{crypto::KeyTypeId, OpaqueMetadata}; +#[cfg(any(feature = "runtime-benchmarks", feature = "test"))] +use sp_runtime::traits::Replace; +use sp_runtime::{ + generic, impl_opaque_keys, + traits::{AccountIdConversion, BlakeTwo256, Block as BlockT, ConvertInto, IdentityLookup}, + transaction_validity::{TransactionSource, TransactionValidity}, + ApplyExtrinsicResult, DispatchError, +}; + +use pallet_collective::Members; + +#[cfg(any(feature = "runtime-benchmarks", feature = "test"))] +use pallet_collective::ProposalCount; + +use parity_scale_codec::Encode; + +#[cfg(feature = "std")] +use sp_version::NativeVersion; +use sp_version::RuntimeVersion; +use static_assertions::const_assert; + +use common_primitives::{ + handles::{ + BaseHandle, CheckHandleResponse, DisplayHandle, HandleResponse, PresumptiveSuffixesResponse, + }, + messages::MessageResponse, + msa::{ + AccountId20Response, DelegationResponse, DelegationValidator, DelegatorId, MessageSourceId, + ProviderId, SchemaGrant, SchemaGrantValidator, H160, + }, + node::{ + AccountId, Address, Balance, BlockNumber, Hash, Header, Index, ProposalProvider, Signature, + UtilityProvider, + }, + rpc::RpcEvent, + schema::{PayloadLocation, SchemaId, SchemaResponse, SchemaVersionResponse}, + stateful_storage::{ItemizedStoragePageResponse, PaginatedStorageResponse}, +}; + +pub use common_runtime::{ + constants::{ + currency::{CENTS, EXISTENTIAL_DEPOSIT}, + *, + }, + fee::WeightToFee, + prod_or_testnet_or_local, + proxy::ProxyType, +}; + +use frame_support::{ + construct_runtime, + dispatch::{DispatchClass, GetDispatchInfo, Pays}, + genesis_builder_helper::{build_state, get_preset}, + pallet_prelude::DispatchResultWithPostInfo, + parameter_types, + traits::{ + fungible::HoldConsideration, + schedule::LOWEST_PRIORITY, + tokens::{PayFromAccount, UnityAssetBalanceConversion}, + ConstBool, ConstU128, ConstU32, ConstU64, EitherOfDiverse, EnsureOrigin, + EqualPrivilegeOnly, GetStorageVersion, InstanceFilter, LinearStoragePrice, + OnRuntimeUpgrade, + }, + weights::{ConstantMultiplier, Weight}, + Twox128, +}; + +use frame_system::{ + limits::{BlockLength, BlockWeights}, + EnsureRoot, EnsureSigned, +}; + +extern crate alloc; +use alloc::{boxed::Box, vec, vec::Vec}; + +pub use sp_consensus_aura::sr25519::AuthorityId as AuraId; +pub use sp_runtime::{MultiAddress, Perbill, Permill}; + +#[cfg(any(feature = "std", test))] +pub use sp_runtime::BuildStorage; + +pub use pallet_capacity; +pub use pallet_frequency_tx_payment::{capacity_stable_weights, types::GetStableWeight}; +pub use pallet_msa; +pub use pallet_passkey; +pub use pallet_schemas; +pub use pallet_time_release::types::{ScheduleName, SchedulerProviderTrait}; + +// Polkadot Imports +use polkadot_runtime_common::{BlockHashCount, SlowAdjustingFeeUpdate}; + +use common_primitives::capacity::UnclaimedRewardInfo; +use common_runtime::weights::rocksdb_weights::constants::RocksDbWeight; +pub use common_runtime::{ + constants::MaxSchemaGrants, + weights, + weights::{block_weights::BlockExecutionWeight, extrinsic_weights::ExtrinsicBaseWeight}, +}; +use frame_support::traits::Contains; +#[cfg(feature = "try-runtime")] +use frame_support::traits::{TryStateSelect, UpgradeCheckSelect}; +#[allow(deprecated)] +use sp_runtime::traits::transaction_extension::AsTransactionExtension; + +mod ethereum; +mod genesis; + +pub struct SchedulerProvider; + +impl SchedulerProviderTrait for SchedulerProvider { + fn schedule( + origin: RuntimeOrigin, + id: ScheduleName, + when: BlockNumber, + call: Box, + ) -> Result<(), DispatchError> { + Scheduler::schedule_named(origin, id, when, None, LOWEST_PRIORITY, call)?; + + Ok(()) + } + + fn cancel(origin: RuntimeOrigin, id: [u8; 32]) -> Result<(), DispatchError> { + Scheduler::cancel_named(origin, id)?; + + Ok(()) + } +} + +pub struct CouncilProposalProvider; + +impl ProposalProvider for CouncilProposalProvider { + fn propose( + who: AccountId, + threshold: u32, + proposal: Box, + ) -> Result<(u32, u32), DispatchError> { + let length_bound: u32 = proposal.using_encoded(|p| p.len() as u32); + Council::do_propose_proposed(who, threshold, proposal, length_bound) + } + + fn propose_with_simple_majority( + who: AccountId, + proposal: Box, + ) -> Result<(u32, u32), DispatchError> { + let members = Members::::get(); + let threshold: u32 = ((members.len() / 2) + 1) as u32; + let length_bound: u32 = proposal.using_encoded(|p| p.len() as u32); + Council::do_propose_proposed(who, threshold, proposal, length_bound) + } + + #[cfg(any(feature = "runtime-benchmarks", feature = "test"))] + fn proposal_count() -> u32 { + ProposalCount::::get() + } +} + +pub struct CapacityBatchProvider; + +impl UtilityProvider for CapacityBatchProvider { + fn batch_all(origin: RuntimeOrigin, calls: Vec) -> DispatchResultWithPostInfo { + Utility::batch_all(origin, calls) + } +} + +/// Basefilter to only allow calls to specified transactions to be executed +pub struct BaseCallFilter; + +impl Contains for BaseCallFilter { + fn contains(call: &RuntimeCall) -> bool { + #[cfg(not(feature = "frequency"))] + { + match call { + RuntimeCall::Utility(pallet_utility_call) => + Self::is_utility_call_allowed(pallet_utility_call), + _ => true, + } + } + #[cfg(feature = "frequency")] + { + match call { + RuntimeCall::Utility(pallet_utility_call) => + Self::is_utility_call_allowed(pallet_utility_call), + // Create provider and create schema are not allowed in mainnet for now. See propose functions. + RuntimeCall::Msa(pallet_msa::Call::create_provider { .. }) => false, + RuntimeCall::Schemas(pallet_schemas::Call::create_schema_v3 { .. }) => false, + // Everything else is allowed on Mainnet + _ => true, + } + } + } +} + +impl BaseCallFilter { + fn is_utility_call_allowed(call: &pallet_utility::Call) -> bool { + match call { + pallet_utility::Call::batch { calls, .. } | + pallet_utility::Call::batch_all { calls, .. } | + pallet_utility::Call::force_batch { calls, .. } => calls.iter().any(Self::is_batch_call_allowed), + _ => true, + } + } + + fn is_batch_call_allowed(call: &RuntimeCall) -> bool { + match call { + // Block all nested `batch` calls from utility batch + RuntimeCall::Utility(pallet_utility::Call::batch { .. }) | + RuntimeCall::Utility(pallet_utility::Call::batch_all { .. }) | + RuntimeCall::Utility(pallet_utility::Call::force_batch { .. }) => false, + + // Block all `FrequencyTxPayment` calls from utility batch + RuntimeCall::FrequencyTxPayment(..) => false, + + // Block `create_provider` and `create_schema` calls from utility batch + RuntimeCall::Msa(pallet_msa::Call::create_provider { .. }) | + RuntimeCall::Schemas(pallet_schemas::Call::create_schema_v3 { .. }) => false, + + // Block `Pays::No` calls from utility batch + _ if Self::is_pays_no_call(call) => false, + + // Allow all other calls + _ => true, + } + } + + fn is_pays_no_call(call: &RuntimeCall) -> bool { + call.get_dispatch_info().pays_fee == Pays::No + } +} + +// Proxy Pallet Filters +impl InstanceFilter for ProxyType { + fn filter(&self, c: &RuntimeCall) -> bool { + match self { + ProxyType::Any => true, + ProxyType::NonTransfer => matches!( + c, + // Sorted + // Skip: RuntimeCall::Balances + RuntimeCall::Capacity(..) + | RuntimeCall::CollatorSelection(..) + | RuntimeCall::Council(..) + | RuntimeCall::Democracy(..) + | RuntimeCall::FrequencyTxPayment(..) // Capacity Tx never transfer + | RuntimeCall::Handles(..) + | RuntimeCall::Messages(..) + | RuntimeCall::Msa(..) + | RuntimeCall::Multisig(..) + // Skip: ParachainSystem(..) + | RuntimeCall::Preimage(..) + | RuntimeCall::Scheduler(..) + | RuntimeCall::Schemas(..) + | RuntimeCall::Session(..) + | RuntimeCall::StatefulStorage(..) + // Skip: RuntimeCall::Sudo + // Skip: RuntimeCall::System + | RuntimeCall::TechnicalCommittee(..) + // Specifically omitting TimeRelease `transfer`, and `update_release_schedules` + | RuntimeCall::TimeRelease(pallet_time_release::Call::claim{..}) + | RuntimeCall::TimeRelease(pallet_time_release::Call::claim_for{..}) + // Skip: RuntimeCall::Timestamp + | RuntimeCall::Treasury(..) + | RuntimeCall::Utility(..) // Calls inside a batch are also run through filters + ), + ProxyType::Governance => matches!( + c, + RuntimeCall::Treasury(..) | + RuntimeCall::Democracy(..) | + RuntimeCall::TechnicalCommittee(..) | + RuntimeCall::Council(..) | + RuntimeCall::Utility(..) // Calls inside a batch are also run through filters + ), + ProxyType::Staking => { + matches!( + c, + RuntimeCall::Capacity(pallet_capacity::Call::stake { .. }) | + RuntimeCall::CollatorSelection( + pallet_collator_selection::Call::set_candidacy_bond { .. } + ) + ) + }, + ProxyType::CancelProxy => { + matches!(c, RuntimeCall::Proxy(pallet_proxy::Call::reject_announcement { .. })) + }, + } + } + fn is_superset(&self, o: &Self) -> bool { + match (self, o) { + (x, y) if x == y => true, + (ProxyType::Any, _) => true, + (_, ProxyType::Any) => false, + (ProxyType::NonTransfer, _) => true, + _ => false, + } + } +} + +/// PasskeyCallFilter to only allow calls to specified transactions to be executed +pub struct PasskeyCallFilter; + +impl Contains for PasskeyCallFilter { + fn contains(call: &RuntimeCall) -> bool { + match call { + #[cfg(feature = "runtime-benchmarks")] + RuntimeCall::System(frame_system::Call::remark { .. }) => true, + + RuntimeCall::Balances(_) | RuntimeCall::Capacity(_) => true, + _ => false, + } + } +} + +pub struct MsaCallFilter; +use pallet_frequency_tx_payment::types::GetAddKeyData; +impl GetAddKeyData for MsaCallFilter { + fn get_add_key_data(call: &RuntimeCall) -> Option<(AccountId, AccountId, MessageSourceId)> { + match call { + RuntimeCall::Msa(MsaCall::add_public_key_to_msa { + add_key_payload, + new_key_owner_proof: _, + msa_owner_public_key, + msa_owner_proof: _, + }) => { + let new_key = add_key_payload.clone().new_public_key; + Some((msa_owner_public_key.clone(), new_key, add_key_payload.msa_id)) + }, + _ => None, + } + } +} + +/// The TransactionExtension to the basic transaction logic. +#[allow(deprecated)] +pub type TxExtension = cumulus_pallet_weight_reclaim::StorageWeightReclaim< + Runtime, + ( + frame_system::CheckNonZeroSender, + // merging these types so that we can have more than 12 extensions + (frame_system::CheckSpecVersion, frame_system::CheckTxVersion), + frame_system::CheckGenesis, + frame_system::CheckEra, + AsTransactionExtension>, + AsTransactionExtension>, + AsTransactionExtension>, + AsTransactionExtension< + pallet_handles::handles_signed_extension::HandlesSignedExtension, + >, + frame_metadata_hash_extension::CheckMetadataHash, + frame_system::CheckWeight, + ), +>; + +/// A Block signed with a Justification +pub type SignedBlock = generic::SignedBlock; + +/// BlockId type as expected by this runtime. +pub type BlockId = generic::BlockId; + +/// Block type as expected by this runtime. +pub type Block = generic::Block; + +/// Unchecked extrinsic type as expected by this runtime. +pub type UncheckedExtrinsic = + generic::UncheckedExtrinsic; + +/// Executive: handles dispatch to the various modules. +pub type Executive = frame_executive::Executive< + Runtime, + Block, + frame_system::ChainContext, + Runtime, + AllPalletsWithSystem, + (MigratePalletsCurrentStorage,), +>; + +pub struct MigratePalletsCurrentStorage(core::marker::PhantomData); + +impl OnRuntimeUpgrade for MigratePalletsCurrentStorage { + fn on_runtime_upgrade() -> Weight { + use sp_core::Get; + + if pallet_collator_selection::Pallet::::on_chain_storage_version() != + pallet_collator_selection::Pallet::::in_code_storage_version() + { + pallet_collator_selection::Pallet::::in_code_storage_version() + .put::>(); + + log::info!("Setting version on pallet_collator_selection"); + } + + T::DbWeight::get().reads_writes(1, 1) + } +} + +/// Opaque types. These are used by the CLI to instantiate machinery that don't need to know +/// the specifics of the runtime. They can then be made to be agnostic over specific formats +/// of data like extrinsics, allowing for them to continue syncing the network through upgrades +/// to even the core data structures. +pub mod opaque { + use super::*; + use sp_runtime::{ + generic, + traits::{BlakeTwo256, Hash as HashT}, + }; + + pub use sp_runtime::OpaqueExtrinsic as UncheckedExtrinsic; + /// Opaque block header type. + pub type Header = generic::Header; + /// Opaque block type. + pub type Block = generic::Block; + /// Opaque block identifier type. + pub type BlockId = generic::BlockId; + /// Opaque block hash type. + pub type Hash = ::Output; +} + +impl_opaque_keys! { + pub struct SessionKeys { + pub aura: Aura, + } +} + +// IMPORTANT: Remember to update spec_version in BOTH structs below +#[cfg(feature = "frequency")] +#[sp_version::runtime_version] +pub const VERSION: RuntimeVersion = RuntimeVersion { + spec_name: Cow::Borrowed("frequency"), + impl_name: Cow::Borrowed("frequency"), + authoring_version: 1, + spec_version: 163, + impl_version: 0, + apis: RUNTIME_API_VERSIONS, + transaction_version: 1, + system_version: 1, +}; + +// IMPORTANT: Remember to update spec_version in above struct too +#[cfg(not(feature = "frequency"))] +#[sp_version::runtime_version] +pub const VERSION: RuntimeVersion = RuntimeVersion { + spec_name: Cow::Borrowed("frequency-testnet"), + impl_name: Cow::Borrowed("frequency"), + authoring_version: 1, + spec_version: 163, + impl_version: 0, + apis: RUNTIME_API_VERSIONS, + transaction_version: 1, + system_version: 1, +}; + +/// The version information used to identify this runtime when compiled natively. +#[cfg(feature = "std")] +pub fn native_version() -> NativeVersion { + NativeVersion { runtime_version: VERSION, can_author_with: Default::default() } +} + +// Needs parameter_types! for the complex logic +parameter_types! { + pub const Version: RuntimeVersion = VERSION; + + // This part is copied from Substrate's `bin/node/runtime/src/lib.rs`. + // The `RuntimeBlockLength` and `RuntimeBlockWeights` exist here because the + // `DeletionWeightLimit` and `DeletionQueueDepth` depend on those to parameterize + // the lazy contract deletion. + pub RuntimeBlockLength: BlockLength = + BlockLength::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO); + + pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder() + .base_block(BlockExecutionWeight::get()) + .for_class(DispatchClass::all(), |weights| { + weights.base_extrinsic = ExtrinsicBaseWeight::get(); + }) + .for_class(DispatchClass::Normal, |weights| { + weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); + }) + .for_class(DispatchClass::Operational, |weights| { + weights.max_total = Some(MAXIMUM_BLOCK_WEIGHT); + // Operational transactions have some extra reserved space, so that they + // are included even if block reached `MAXIMUM_BLOCK_WEIGHT`. + weights.reserved = Some( + MAXIMUM_BLOCK_WEIGHT - NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT + ); + }) + .avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO) + .build_or_panic(); +} + +// Configure FRAME pallets to include in runtime. + +impl frame_system::Config for Runtime { + type RuntimeTask = RuntimeTask; + /// The identifier used to distinguish between accounts. + type AccountId = AccountId; + /// Base call filter to use in dispatchable. + // enable for cfg feature "frequency" only + type BaseCallFilter = BaseCallFilter; + /// The aggregated dispatch type that is available for extrinsics. + type RuntimeCall = RuntimeCall; + /// The lookup mechanism to get account ID from whatever is passed in dispatchers. + type Lookup = EthereumCompatibleAccountIdLookup; + /// The index type for storing how many extrinsics an account has signed. + type Nonce = Index; + /// The block type. + type Block = Block; + /// The type for hashing blocks and tries. + type Hash = Hash; + /// The hashing algorithm used. + type Hashing = BlakeTwo256; + /// The ubiquitous event type. + type RuntimeEvent = RuntimeEvent; + /// The ubiquitous origin type. + type RuntimeOrigin = RuntimeOrigin; + /// Maximum number of block number to block hash mappings to keep (oldest pruned first). + type BlockHashCount = BlockHashCount; + /// Runtime version. + type Version = Version; + /// Converts a module to an index of this module in the runtime. + type PalletInfo = PalletInfo; + /// The data to be stored in an account. + type AccountData = pallet_balances::AccountData; + /// What to do if a new account is created. + type OnNewAccount = (); + /// What to do if an account is fully reaped from the system. + type OnKilledAccount = (); + /// The weight of database operations that the runtime can invoke. + type DbWeight = RocksDbWeight; + /// Weight information for the extrinsics of this pallet. + type SystemWeightInfo = (); + /// Block & extrinsics weights: base values and limits. + type BlockWeights = RuntimeBlockWeights; + /// The maximum length of a block (in bytes). + type BlockLength = RuntimeBlockLength; + /// This is used as an identifier of the chain. 42 is the generic substrate prefix. + type SS58Prefix = Ss58Prefix; + /// The action to take on a Runtime Upgrade + #[cfg(any(not(feature = "frequency-no-relay"), feature = "frequency-lint-check"))] + type OnSetCode = cumulus_pallet_parachain_system::ParachainSetCode; + #[cfg(feature = "frequency-no-relay")] + type OnSetCode = (); + type MaxConsumers = FrameSystemMaxConsumers; + /// A new way of configuring migrations that run in a single block. + type SingleBlockMigrations = (); + /// The migrator that is used to run Multi-Block-Migrations. + type MultiBlockMigrator = (); + /// A callback that executes in *every block* directly before all inherents were applied. + type PreInherents = (); + /// A callback that executes in *every block* directly after all inherents were applied. + type PostInherents = (); + /// A callback that executes in *every block* directly after all transactions were applied. + type PostTransactions = (); + type ExtensionsWeightInfo = weights::frame_system_extensions::WeightInfo; +} + +impl pallet_msa::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type WeightInfo = pallet_msa::weights::SubstrateWeight; + // The conversion to a 32 byte AccountId + type ConvertIntoAccountId32 = ConvertInto; + // The maximum number of public keys per MSA + type MaxPublicKeysPerMsa = MsaMaxPublicKeysPerMsa; + // The maximum number of schema grants per delegation + type MaxSchemaGrantsPerDelegation = MaxSchemaGrants; + // The maximum provider name size (in bytes) + type MaxProviderNameSize = MsaMaxProviderNameSize; + // The type that provides schema related info + type SchemaValidator = Schemas; + // The type that provides `Handle` related info for a given `MesssageSourceAccount` + type HandleProvider = Handles; + // The number of blocks per virtual bucket + type MortalityWindowSize = MSAMortalityWindowSize; + // The maximum number of signatures that can be stored in the payload signature registry + type MaxSignaturesStored = MSAMaxSignaturesStored; + // The proposal type + type Proposal = RuntimeCall; + // The Council proposal provider interface + type ProposalProvider = CouncilProposalProvider; + // The origin that is allowed to create providers via governance + type CreateProviderViaGovernanceOrigin = EitherOfDiverse< + EnsureRoot, + pallet_collective::EnsureMembers, + >; +} + +parameter_types! { + /// The maximum number of eras over which one can claim rewards + pub const ProviderBoostHistoryLimit : u32 = 30; + /// The number of chunks of Reward Pool history we expect to store + pub const RewardPoolChunkLength: u32 = 5; +} +// RewardPoolChunkLength MUST be a divisor of ProviderBoostHistoryLimit +const_assert!(ProviderBoostHistoryLimit::get() % RewardPoolChunkLength::get() == 0); + +impl pallet_capacity::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type WeightInfo = pallet_capacity::weights::SubstrateWeight; + type Currency = Balances; + type MinimumStakingAmount = CapacityMinimumStakingAmount; + type MinimumTokenBalance = CapacityMinimumTokenBalance; + type TargetValidator = Msa; + type MaxUnlockingChunks = CapacityMaxUnlockingChunks; + #[cfg(feature = "runtime-benchmarks")] + type BenchmarkHelper = Msa; + type UnstakingThawPeriod = CapacityUnstakingThawPeriod; + type MaxEpochLength = CapacityMaxEpochLength; + type EpochNumber = u32; + type CapacityPerToken = CapacityPerToken; + type RuntimeFreezeReason = RuntimeFreezeReason; + type EraLength = CapacityRewardEraLength; + type ProviderBoostHistoryLimit = ProviderBoostHistoryLimit; + type RewardsProvider = Capacity; + type MaxRetargetsPerRewardEra = ConstU32<2>; + // Value determined by desired inflation rate limits for chosen economic model + type RewardPoolPerEra = ConstU128<{ currency::CENTS.saturating_mul(153_424_650u128) }>; + type RewardPercentCap = CapacityRewardCap; + // Must evenly divide ProviderBoostHistoryLimit + type RewardPoolChunkLength = RewardPoolChunkLength; +} + +impl pallet_schemas::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type WeightInfo = pallet_schemas::weights::SubstrateWeight; + // The mininum size (in bytes) for a schema model + type MinSchemaModelSizeBytes = SchemasMinModelSizeBytes; + // The maximum number of schemas that can be registered + type MaxSchemaRegistrations = SchemasMaxRegistrations; + // The maximum length of a schema model (in bytes) + type SchemaModelMaxBytesBoundedVecLimit = SchemasMaxBytesBoundedVecLimit; + // The proposal type + type Proposal = RuntimeCall; + // The Council proposal provider interface + type ProposalProvider = CouncilProposalProvider; + // The origin that is allowed to create schemas via governance + type CreateSchemaViaGovernanceOrigin = EitherOfDiverse< + EnsureRoot, + pallet_collective::EnsureProportionMoreThan, + >; + // Maximum number of schema grants that are allowed per schema + type MaxSchemaSettingsPerSchema = MaxSchemaSettingsPerSchema; +} + +// One storage item; key size is 32; value is size 4+4+16+32 bytes = 56 bytes. +pub type DepositBase = ConstU128<{ currency::deposit(1, 88) }>; +// Additional storage item size of 32 bytes. +pub type DepositFactor = ConstU128<{ currency::deposit(0, 32) }>; +pub type MaxSignatories = ConstU32<100>; + +// See https://paritytech.github.io/substrate/master/pallet_multisig/pallet/trait.Config.html for +// the descriptions of these configs. +impl pallet_multisig::Config for Runtime { + type BlockNumberProvider = System; + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; + type Currency = Balances; + type DepositBase = DepositBase; + type DepositFactor = DepositFactor; + type MaxSignatories = MaxSignatories; + type WeightInfo = weights::pallet_multisig::SubstrateWeight; +} + +impl cumulus_pallet_weight_reclaim::Config for Runtime { + type WeightInfo = weights::cumulus_pallet_weight_reclaim::SubstrateWeight; +} + +/// Need this declaration method for use + type safety in benchmarks +pub type MaxReleaseSchedules = ConstU32<{ MAX_RELEASE_SCHEDULES }>; + +pub struct EnsureTimeReleaseOrigin; + +impl EnsureOrigin for EnsureTimeReleaseOrigin { + type Success = AccountId; + + fn try_origin(o: RuntimeOrigin) -> Result { + match o.clone().into() { + Ok(pallet_time_release::Origin::::TimeRelease(who)) => Ok(who), + _ => Err(o), + } + } + + #[cfg(feature = "runtime-benchmarks")] + fn try_successful_origin() -> Result { + Ok(RuntimeOrigin::root()) + } +} + +// See https://paritytech.github.io/substrate/master/pallet_vesting/index.html for +// the descriptions of these configs. +impl pallet_time_release::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type Balance = Balance; + type Currency = Balances; + type RuntimeOrigin = RuntimeOrigin; + type RuntimeHoldReason = RuntimeHoldReason; + type MinReleaseTransfer = MinReleaseTransfer; + type TransferOrigin = EnsureSigned; + type WeightInfo = pallet_time_release::weights::SubstrateWeight; + type MaxReleaseSchedules = MaxReleaseSchedules; + #[cfg(any(not(feature = "frequency-no-relay"), feature = "frequency-lint-check"))] + type BlockNumberProvider = RelaychainDataProvider; + #[cfg(feature = "frequency-no-relay")] + type BlockNumberProvider = System; + type RuntimeFreezeReason = RuntimeFreezeReason; + type SchedulerProvider = SchedulerProvider; + type RuntimeCall = RuntimeCall; + type TimeReleaseOrigin = EnsureTimeReleaseOrigin; +} + +// See https://paritytech.github.io/substrate/master/pallet_timestamp/index.html for +// the descriptions of these configs. +impl pallet_timestamp::Config for Runtime { + /// A timestamp: milliseconds since the unix epoch. + type Moment = u64; + #[cfg(not(feature = "frequency-no-relay"))] + type OnTimestampSet = Aura; + #[cfg(feature = "frequency-no-relay")] + type OnTimestampSet = (); + type MinimumPeriod = MinimumPeriod; + type WeightInfo = weights::pallet_timestamp::SubstrateWeight; +} + +// See https://paritytech.github.io/substrate/master/pallet_authorship/index.html for +// the descriptions of these configs. +impl pallet_authorship::Config for Runtime { + type FindAuthor = pallet_session::FindAccountFromAuthorIndex; + type EventHandler = (CollatorSelection,); +} + +impl pallet_balances::Config for Runtime { + type MaxLocks = BalancesMaxLocks; + /// The type for recording an account's balance. + type Balance = Balance; + /// The ubiquitous event type. + type RuntimeEvent = RuntimeEvent; + type DustRemoval = (); + type ExistentialDeposit = ConstU128; + type AccountStore = System; + type WeightInfo = weights::pallet_balances::SubstrateWeight; + type MaxReserves = BalancesMaxReserves; + type ReserveIdentifier = [u8; 8]; + type MaxFreezes = BalancesMaxFreezes; + type RuntimeHoldReason = RuntimeHoldReason; + type RuntimeFreezeReason = RuntimeFreezeReason; + type FreezeIdentifier = RuntimeFreezeReason; + type DoneSlashHandler = (); +} +// Needs parameter_types! for the Weight type +parameter_types! { + // The maximum weight that may be scheduled per block for any dispatchables of less priority than schedule::HARD_DEADLINE. + pub MaximumSchedulerWeight: Weight = Perbill::from_percent(30) * RuntimeBlockWeights::get().max_block; + pub MaxCollectivesProposalWeight: Weight = Perbill::from_percent(50) * RuntimeBlockWeights::get().max_block; +} + +// See also https://docs.rs/pallet-scheduler/latest/pallet_scheduler/trait.Config.html +impl pallet_scheduler::Config for Runtime { + type BlockNumberProvider = System; + type RuntimeEvent = RuntimeEvent; + type RuntimeOrigin = RuntimeOrigin; + type PalletsOrigin = OriginCaller; + type RuntimeCall = RuntimeCall; + type MaximumWeight = MaximumSchedulerWeight; + /// Origin to schedule or cancel calls + /// Set to Root or a simple majority of the Frequency Council + type ScheduleOrigin = EitherOfDiverse< + EitherOfDiverse< + EnsureRoot, + pallet_collective::EnsureProportionAtLeast, + >, + EnsureTimeReleaseOrigin, + >; + + type MaxScheduledPerBlock = SchedulerMaxScheduledPerBlock; + type WeightInfo = weights::pallet_scheduler::SubstrateWeight; + type OriginPrivilegeCmp = EqualPrivilegeOnly; + type Preimages = Preimage; +} + +parameter_types! { + pub const PreimageHoldReason: RuntimeHoldReason = RuntimeHoldReason::Preimage(pallet_preimage::HoldReason::Preimage); +} + +// See https://paritytech.github.io/substrate/master/pallet_preimage/index.html for +// the descriptions of these configs. +impl pallet_preimage::Config for Runtime { + type WeightInfo = weights::pallet_preimage::SubstrateWeight; + type RuntimeEvent = RuntimeEvent; + type Currency = Balances; + // Allow the Technical council to request preimages without deposit or fees + type ManagerOrigin = EitherOfDiverse< + EnsureRoot, + pallet_collective::EnsureMember, + >; + + type Consideration = HoldConsideration< + AccountId, + Balances, + PreimageHoldReason, + LinearStoragePrice, + >; +} + +// See https://paritytech.github.io/substrate/master/pallet_collective/index.html for +// the descriptions of these configs. +type CouncilCollective = pallet_collective::Instance1; +impl pallet_collective::Config for Runtime { + type RuntimeOrigin = RuntimeOrigin; + type Proposal = RuntimeCall; + type RuntimeEvent = RuntimeEvent; + type MotionDuration = CouncilMotionDuration; + type MaxProposals = CouncilMaxProposals; + type MaxMembers = CouncilMaxMembers; + type DefaultVote = pallet_collective::PrimeDefaultVote; + type WeightInfo = weights::pallet_collective_council::SubstrateWeight; + type SetMembersOrigin = EnsureRoot; + type MaxProposalWeight = MaxCollectivesProposalWeight; + type DisapproveOrigin = EitherOfDiverse< + EnsureRoot, + pallet_collective::EnsureProportionAtLeast, + >; + type KillOrigin = EitherOfDiverse< + EnsureRoot, + pallet_collective::EnsureProportionAtLeast, + >; + type Consideration = (); +} + +type TechnicalCommitteeCollective = pallet_collective::Instance2; +impl pallet_collective::Config for Runtime { + type RuntimeOrigin = RuntimeOrigin; + type Proposal = RuntimeCall; + type RuntimeEvent = RuntimeEvent; + type MotionDuration = TCMotionDuration; + type MaxProposals = TCMaxProposals; + type MaxMembers = TCMaxMembers; + type DefaultVote = pallet_collective::PrimeDefaultVote; + type WeightInfo = weights::pallet_collective_technical_committee::SubstrateWeight; + type SetMembersOrigin = EnsureRoot; + type MaxProposalWeight = MaxCollectivesProposalWeight; + type DisapproveOrigin = EitherOfDiverse< + EnsureRoot, + pallet_collective::EnsureProportionAtLeast, + >; + type KillOrigin = EitherOfDiverse< + EnsureRoot, + pallet_collective::EnsureProportionAtLeast, + >; + type Consideration = (); +} + +// see https://paritytech.github.io/substrate/master/pallet_democracy/pallet/trait.Config.html +// for the definitions of these configs +impl pallet_democracy::Config for Runtime { + type CooloffPeriod = CooloffPeriod; + type Currency = Balances; + type EnactmentPeriod = EnactmentPeriod; + type RuntimeEvent = RuntimeEvent; + type FastTrackVotingPeriod = FastTrackVotingPeriod; + type InstantAllowed = ConstBool; + type LaunchPeriod = LaunchPeriod; + type MaxProposals = DemocracyMaxProposals; + type MaxVotes = DemocracyMaxVotes; + type MinimumDeposit = MinimumDeposit; + type Scheduler = Scheduler; + type Slash = (); + // Treasury; + type WeightInfo = weights::pallet_democracy::SubstrateWeight; + type VoteLockingPeriod = EnactmentPeriod; + // Same as EnactmentPeriod + type VotingPeriod = VotingPeriod; + type Preimages = Preimage; + type MaxDeposits = ConstU32<100>; + type MaxBlacklisted = ConstU32<100>; + + // See https://paritytech.github.io/substrate/master/pallet_democracy/index.html for + // the descriptions of these origins. + // See https://paritytech.github.io/substrate/master/pallet_democracy/pallet/trait.Config.html for + // the definitions of these config traits. + /// A unanimous council can have the next scheduled referendum be a straight default-carries + /// (NTB) vote. + type ExternalDefaultOrigin = EitherOfDiverse< + pallet_collective::EnsureProportionAtLeast, + frame_system::EnsureRoot, + >; + + /// A simple-majority of 50% + 1 can have the next scheduled referendum be a straight majority-carries vote. + type ExternalMajorityOrigin = EitherOfDiverse< + pallet_collective::EnsureProportionMoreThan, + frame_system::EnsureRoot, + >; + /// A straight majority (at least 50%) of the council can decide what their next motion is. + type ExternalOrigin = EitherOfDiverse< + pallet_collective::EnsureProportionAtLeast, + frame_system::EnsureRoot, + >; + // Origin from which the new proposal can be made. + // The success variant is the account id of the depositor. + type SubmitOrigin = frame_system::EnsureSigned; + + /// Two thirds of the technical committee can have an ExternalMajority/ExternalDefault vote + /// be tabled immediately and with a shorter voting/enactment period. + type FastTrackOrigin = EitherOfDiverse< + pallet_collective::EnsureProportionAtLeast, + frame_system::EnsureRoot, + >; + /// Origin from which the next majority-carries (or more permissive) referendum may be tabled to + /// vote immediately and asynchronously in a similar manner to the emergency origin. + /// Requires TechnicalCommittee to be unanimous. + type InstantOrigin = EitherOfDiverse< + pallet_collective::EnsureProportionAtLeast, + frame_system::EnsureRoot, + >; + /// Overarching type of all pallets origins + type PalletsOrigin = OriginCaller; + + /// To cancel a proposal which has been passed, 2/3 of the council must agree to it. + type CancellationOrigin = EitherOfDiverse< + pallet_collective::EnsureProportionAtLeast, + EnsureRoot, + >; + /// To cancel a proposal before it has been passed, the technical committee must be unanimous or + /// Root must agree. + type CancelProposalOrigin = EitherOfDiverse< + EnsureRoot, + pallet_collective::EnsureProportionAtLeast, + >; + + /// This origin can blacklist proposals. + type BlacklistOrigin = EnsureRoot; + + /// Any single technical committee member may veto a coming council proposal, however they can + /// only do it once and it lasts only for the cool-off period. + type VetoOrigin = pallet_collective::EnsureMember; +} + +parameter_types! { + pub TreasuryAccount: AccountId = TreasuryPalletId::get().into_account_truncating(); + pub const PayoutSpendPeriod: BlockNumber = 30 * DAYS; + pub const MaxSpending : Balance = 100_000_000 * UNITS; +} + +// See https://paritytech.github.io/substrate/master/pallet_treasury/index.html for +// the descriptions of these configs. +impl pallet_treasury::Config for Runtime { + /// Treasury Account: 5EYCAe5ijiYfyeZ2JJCGq56LmPyNRAKzpG4QkoQkkQNB5e6Z + type PalletId = TreasuryPalletId; + type Currency = Balances; + type RuntimeEvent = RuntimeEvent; + type WeightInfo = pallet_treasury::weights::SubstrateWeight; + + /// Who approves treasury proposals? + /// - Root (sudo or governance) + /// - 3/5ths of the Frequency Council + type ApproveOrigin = EitherOfDiverse< + EnsureRoot, + pallet_collective::EnsureProportionAtLeast, + >; + + /// Who rejects treasury proposals? + /// - Root (sudo or governance) + /// - Simple majority of the Frequency Council + type RejectOrigin = EitherOfDiverse< + EnsureRoot, + pallet_collective::EnsureProportionMoreThan, + >; + + /// Spending funds outside of the proposal? + /// Nobody + #[cfg(not(feature = "runtime-benchmarks"))] + type SpendOrigin = frame_support::traits::NeverEnsureOrigin; + #[cfg(feature = "runtime-benchmarks")] + type SpendOrigin = MapSuccess, Replace>; + + /// Rejected proposals lose their bond + /// This takes the slashed amount and is often set to the Treasury + /// We burn it so there is no incentive to the treasury to reject to enrich itself + type OnSlash = (); + + /// Bond 5% of a treasury proposal + type ProposalBond = ProposalBondPercent; + + /// Minimum bond of 100 Tokens + type ProposalBondMinimum = ProposalBondMinimum; + + /// Max bond of 1_000 Tokens + type ProposalBondMaximum = ProposalBondMaximum; + + /// Pay out on a 4-week basis + type SpendPeriod = SpendPeriod; + + /// Do not burn any unused funds + type Burn = (); + + /// Where should tokens burned from the treasury go? + /// Set to go to /dev/null + type BurnDestination = (); + + /// Runtime hooks to external pallet using treasury to compute spend funds. + /// Set to Bounties often. + /// Not currently in use + type SpendFunds = (); + + /// 64 + type MaxApprovals = MaxApprovals; + + type AssetKind = (); + type Beneficiary = AccountId; + type BeneficiaryLookup = IdentityLookup; + type Paymaster = PayFromAccount; + type BalanceConverter = UnityAssetBalanceConversion; + type PayoutPeriod = PayoutSpendPeriod; + #[cfg(feature = "runtime-benchmarks")] + type BenchmarkHelper = (); +} + +// See https://paritytech.github.io/substrate/master/pallet_transaction_payment/index.html for +// the descriptions of these configs. +impl pallet_transaction_payment::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type OnChargeTransaction = pallet_transaction_payment::FungibleAdapter; + type WeightToFee = WeightToFee; + type LengthToFee = ConstantMultiplier; + type FeeMultiplierUpdate = SlowAdjustingFeeUpdate; + type OperationalFeeMultiplier = TransactionPaymentOperationalFeeMultiplier; + type WeightInfo = weights::pallet_transaction_payment::SubstrateWeight; +} + +use crate::ethereum::EthereumCompatibleAccountIdLookup; +use pallet_frequency_tx_payment::Call as FrequencyPaymentCall; +use pallet_handles::Call as HandlesCall; +use pallet_messages::Call as MessagesCall; +use pallet_msa::Call as MsaCall; +use pallet_stateful_storage::Call as StatefulStorageCall; + +pub struct CapacityEligibleCalls; +impl GetStableWeight for CapacityEligibleCalls { + fn get_stable_weight(call: &RuntimeCall) -> Option { + use pallet_frequency_tx_payment::capacity_stable_weights::WeightInfo; + match call { + RuntimeCall::Msa(MsaCall::add_public_key_to_msa { .. }) => Some( + capacity_stable_weights::SubstrateWeight::::add_public_key_to_msa() + ), + RuntimeCall::Msa(MsaCall::create_sponsored_account_with_delegation { add_provider_payload, .. }) => Some(capacity_stable_weights::SubstrateWeight::::create_sponsored_account_with_delegation(add_provider_payload.schema_ids.len() as u32)), + RuntimeCall::Msa(MsaCall::grant_delegation { add_provider_payload, .. }) => Some(capacity_stable_weights::SubstrateWeight::::grant_delegation(add_provider_payload.schema_ids.len() as u32)), + RuntimeCall::Messages(MessagesCall::add_ipfs_message { .. }) => Some(capacity_stable_weights::SubstrateWeight::::add_ipfs_message()), + RuntimeCall::Messages(MessagesCall::add_onchain_message { payload, .. }) => Some(capacity_stable_weights::SubstrateWeight::::add_onchain_message(payload.len() as u32)), + RuntimeCall::StatefulStorage(StatefulStorageCall::apply_item_actions { actions, ..}) => Some(capacity_stable_weights::SubstrateWeight::::apply_item_actions(StatefulStorage::sum_add_actions_bytes(actions))), + RuntimeCall::StatefulStorage(StatefulStorageCall::upsert_page { payload, ..}) => Some(capacity_stable_weights::SubstrateWeight::::upsert_page(payload.len() as u32)), + RuntimeCall::StatefulStorage(StatefulStorageCall::delete_page { .. }) => Some(capacity_stable_weights::SubstrateWeight::::delete_page()), + RuntimeCall::StatefulStorage(StatefulStorageCall::apply_item_actions_with_signature_v2 { payload, ..}) => Some(capacity_stable_weights::SubstrateWeight::::apply_item_actions_with_signature(StatefulStorage::sum_add_actions_bytes(&payload.actions))), + RuntimeCall::StatefulStorage(StatefulStorageCall::upsert_page_with_signature_v2 { payload, ..}) => Some(capacity_stable_weights::SubstrateWeight::::upsert_page_with_signature(payload.payload.len() as u32 )), + RuntimeCall::StatefulStorage(StatefulStorageCall::delete_page_with_signature_v2 { .. }) => Some(capacity_stable_weights::SubstrateWeight::::delete_page_with_signature()), RuntimeCall::Handles(HandlesCall::claim_handle { payload, .. }) => Some(capacity_stable_weights::SubstrateWeight::::claim_handle(payload.base_handle.len() as u32)), + RuntimeCall::Handles(HandlesCall::change_handle { payload, .. }) => Some(capacity_stable_weights::SubstrateWeight::::change_handle(payload.base_handle.len() as u32)), + _ => None, + } + } + + fn get_inner_calls(outer_call: &RuntimeCall) -> Option> { + match outer_call { + RuntimeCall::FrequencyTxPayment(FrequencyPaymentCall::pay_with_capacity { + call, + .. + }) => Some(vec![call]), + RuntimeCall::FrequencyTxPayment( + FrequencyPaymentCall::pay_with_capacity_batch_all { calls, .. }, + ) => Some(calls.iter().collect()), + _ => Some(vec![outer_call]), + } + } +} + +impl pallet_frequency_tx_payment::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; + type Capacity = Capacity; + type WeightInfo = pallet_frequency_tx_payment::weights::SubstrateWeight; + type CapacityCalls = CapacityEligibleCalls; + type OnChargeCapacityTransaction = pallet_frequency_tx_payment::CapacityAdapter; + type BatchProvider = CapacityBatchProvider; + type MaximumCapacityBatchLength = MaximumCapacityBatchLength; + type MsaKeyProvider = Msa; + type MsaCallFilter = MsaCallFilter; +} + +/// Configurations for passkey pallet +impl pallet_passkey::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; + type WeightInfo = pallet_passkey::weights::SubstrateWeight; + type ConvertIntoAccountId32 = ConvertInto; + type PasskeyCallFilter = PasskeyCallFilter; + #[cfg(feature = "runtime-benchmarks")] + type Currency = Balances; +} + +#[cfg(any(not(feature = "frequency-no-relay"), feature = "frequency-lint-check"))] +/// Maximum number of blocks simultaneously accepted by the Runtime, not yet included +/// into the relay chain. +const UNINCLUDED_SEGMENT_CAPACITY: u32 = 3; + +#[cfg(any(not(feature = "frequency-no-relay"), feature = "frequency-lint-check"))] +/// How many parachain blocks are processed by the relay chain per parent. Limits the +/// number of blocks authored per slot. +const BLOCK_PROCESSING_VELOCITY: u32 = 1; +#[cfg(any(not(feature = "frequency-no-relay"), feature = "frequency-lint-check"))] +/// Relay chain slot duration, in milliseconds. +const RELAY_CHAIN_SLOT_DURATION_MILLIS: u32 = 6_000; + +// See https://paritytech.github.io/substrate/master/pallet_parachain_system/index.html for +// the descriptions of these configs. +#[cfg(any(not(feature = "frequency-no-relay"), feature = "frequency-lint-check"))] +impl cumulus_pallet_parachain_system::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type OnSystemEvent = (); + type SelfParaId = parachain_info::Pallet; + type DmpQueue = frame_support::traits::EnqueueWithOrigin<(), sp_core::ConstU8<0>>; + type ReservedDmpWeight = (); + type OutboundXcmpMessageSource = (); + type XcmpMessageHandler = (); + type ReservedXcmpWeight = (); + type CheckAssociatedRelayNumber = RelayNumberMonotonicallyIncreases; + type WeightInfo = (); + type ConsensusHook = ConsensusHook; + type SelectCore = DefaultCoreSelector; +} + +#[cfg(any(not(feature = "frequency-no-relay"), feature = "frequency-lint-check"))] +pub type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook< + Runtime, + RELAY_CHAIN_SLOT_DURATION_MILLIS, + BLOCK_PROCESSING_VELOCITY, + UNINCLUDED_SEGMENT_CAPACITY, +>; + +impl parachain_info::Config for Runtime {} + +impl cumulus_pallet_aura_ext::Config for Runtime {} + +// See https://paritytech.github.io/substrate/master/pallet_session/index.html for +// the descriptions of these configs. +impl pallet_session::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type ValidatorId = ::AccountId; + // we don't have stash and controller, thus we don't need the convert as well. + type ValidatorIdOf = pallet_collator_selection::IdentityCollator; + type ShouldEndSession = pallet_session::PeriodicSessions; + type NextSessionRotation = pallet_session::PeriodicSessions; + type SessionManager = CollatorSelection; + // Essentially just Aura, but lets be pedantic. + type SessionHandler = ::KeyTypeIdProviders; + type Keys = SessionKeys; + type DisablingStrategy = (); + type WeightInfo = weights::pallet_session::SubstrateWeight; +} + +// See https://paritytech.github.io/substrate/master/pallet_aura/index.html for +// the descriptions of these configs. +impl pallet_aura::Config for Runtime { + type AuthorityId = AuraId; + type DisabledValidators = (); + type MaxAuthorities = AuraMaxAuthorities; + type AllowMultipleBlocksPerSlot = ConstBool; + type SlotDuration = ConstU64; +} + +// See https://paritytech.github.io/substrate/master/pallet_collator_selection/index.html for +// the descriptions of these configs. +impl pallet_collator_selection::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type Currency = Balances; + + // Origin that can dictate updating parameters of this pallet. + // Currently only root or a 3/5ths council vote. + type UpdateOrigin = EitherOfDiverse< + EnsureRoot, + pallet_collective::EnsureProportionAtLeast, + >; + + // Account Identifier from which the internal Pot is generated. + // Set to something that NEVER gets a balance i.e. No block rewards. + type PotId = NeverDepositIntoId; + + // Maximum number of candidates that we should have. This is enforced in code. + // + // This does not take into account the invulnerables. + type MaxCandidates = CollatorMaxCandidates; + + // Minimum number of candidates that we should have. This is used for disaster recovery. + // + // This does not take into account the invulnerables. + type MinEligibleCollators = CollatorMinCandidates; + + // Maximum number of invulnerables. This is enforced in code. + type MaxInvulnerables = CollatorMaxInvulnerables; + + // Will be kicked if block is not produced in threshold. + // should be a multiple of session or things will get inconsistent + type KickThreshold = CollatorKickThreshold; + + /// A stable ID for a validator. + type ValidatorId = ::AccountId; + + // A conversion from account ID to validator ID. + // + // Its cost must be at most one storage read. + type ValidatorIdOf = pallet_collator_selection::IdentityCollator; + + // Validate a user is registered + type ValidatorRegistration = Session; + + type WeightInfo = weights::pallet_collator_selection::SubstrateWeight; +} + +// https://paritytech.github.io/polkadot-sdk/master/pallet_proxy/pallet/trait.Config.html +impl pallet_proxy::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; + type Currency = Balances; + type ProxyType = ProxyType; + type ProxyDepositBase = ProxyDepositBase; + type ProxyDepositFactor = ProxyDepositFactor; + type MaxProxies = MaxProxies; + type MaxPending = MaxPending; + type CallHasher = BlakeTwo256; + type AnnouncementDepositBase = AnnouncementDepositBase; + type AnnouncementDepositFactor = AnnouncementDepositFactor; + type WeightInfo = weights::pallet_proxy::SubstrateWeight; + type BlockNumberProvider = System; +} + +// End Proxy Pallet Config + +impl pallet_messages::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type WeightInfo = pallet_messages::weights::SubstrateWeight; + // The type that supplies MSA info + type MsaInfoProvider = Msa; + // The type that validates schema grants + type SchemaGrantValidator = Msa; + // The type that provides schema info + type SchemaProvider = Schemas; + // The maximum message payload in bytes + type MessagesMaxPayloadSizeBytes = MessagesMaxPayloadSizeBytes; + + /// A set of helper functions for benchmarking. + #[cfg(feature = "runtime-benchmarks")] + type MsaBenchmarkHelper = Msa; + #[cfg(feature = "runtime-benchmarks")] + type SchemaBenchmarkHelper = Schemas; +} + +impl pallet_stateful_storage::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type WeightInfo = pallet_stateful_storage::weights::SubstrateWeight; + /// The maximum size of a page (in bytes) for an Itemized storage model + type MaxItemizedPageSizeBytes = MaxItemizedPageSizeBytes; + /// The maximum size of a page (in bytes) for a Paginated storage model + type MaxPaginatedPageSizeBytes = MaxPaginatedPageSizeBytes; + /// The maximum size of a single item in an itemized storage model (in bytes) + type MaxItemizedBlobSizeBytes = MaxItemizedBlobSizeBytes; + /// The maximum number of pages in a Paginated storage model + type MaxPaginatedPageId = MaxPaginatedPageId; + /// The maximum number of actions in itemized actions + type MaxItemizedActionsCount = MaxItemizedActionsCount; + /// The type that supplies MSA info + type MsaInfoProvider = Msa; + /// The type that validates schema grants + type SchemaGrantValidator = Msa; + /// The type that provides schema info + type SchemaProvider = Schemas; + /// Hasher for Child Tree keys + type KeyHasher = Twox128; + /// The conversion to a 32 byte AccountId + type ConvertIntoAccountId32 = ConvertInto; + /// The number of blocks per virtual bucket + type MortalityWindowSize = StatefulMortalityWindowSize; + + /// A set of helper functions for benchmarking. + #[cfg(feature = "runtime-benchmarks")] + type MsaBenchmarkHelper = Msa; + #[cfg(feature = "runtime-benchmarks")] + type SchemaBenchmarkHelper = Schemas; +} + +impl pallet_handles::Config for Runtime { + /// The overarching event type. + type RuntimeEvent = RuntimeEvent; + /// Weight information for extrinsics in this pallet. + type WeightInfo = pallet_handles::weights::SubstrateWeight; + /// The type that supplies MSA info + type MsaInfoProvider = Msa; + /// The minimum suffix value + type HandleSuffixMin = HandleSuffixMin; + /// The maximum suffix value + type HandleSuffixMax = HandleSuffixMax; + /// The conversion to a 32 byte AccountId + type ConvertIntoAccountId32 = ConvertInto; + // The number of blocks per virtual bucket + type MortalityWindowSize = MSAMortalityWindowSize; + /// A set of helper functions for benchmarking. + #[cfg(feature = "runtime-benchmarks")] + type MsaBenchmarkHelper = Msa; +} + +// See https://paritytech.github.io/substrate/master/pallet_sudo/index.html for +// the descriptions of these configs. +#[cfg(any(not(feature = "frequency"), feature = "frequency-lint-check"))] +impl pallet_sudo::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; + /// using original weights from sudo pallet + type WeightInfo = pallet_sudo::weights::SubstrateWeight; +} + +// See https://paritytech.github.io/substrate/master/pallet_utility/index.html for +// the descriptions of these configs. +impl pallet_utility::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; + type PalletsOrigin = OriginCaller; + type WeightInfo = weights::pallet_utility::SubstrateWeight; +} + +// Create the runtime by composing the FRAME pallets that were previously configured. +construct_runtime!( + pub enum Runtime { + // System support stuff. + System: frame_system::{Pallet, Call, Config, Storage, Event} = 0, + #[cfg(any(not(feature = "frequency-no-relay"), feature = "frequency-lint-check"))] + ParachainSystem: cumulus_pallet_parachain_system::{ + Pallet, Call, Config, Storage, Inherent, Event } = 1, + Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 2, + ParachainInfo: parachain_info::{Pallet, Storage, Config} = 3, + + // Sudo removed from mainnet Jan 2023 + #[cfg(any(not(feature = "frequency"), feature = "frequency-lint-check"))] + Sudo: pallet_sudo::{Pallet, Call, Config, Storage, Event }= 4, + + Preimage: pallet_preimage::{Pallet, Call, Storage, Event, HoldReason} = 5, + Democracy: pallet_democracy::{Pallet, Call, Config, Storage, Event } = 6, + Scheduler: pallet_scheduler::{Pallet, Call, Storage, Event } = 8, + Utility: pallet_utility::{Pallet, Call, Event} = 9, + + // Monetary stuff. + Balances: pallet_balances::{Pallet, Call, Storage, Config, Event} = 10, + TransactionPayment: pallet_transaction_payment::{Pallet, Storage, Event} = 11, + + // Collectives + Council: pallet_collective::::{Pallet, Call, Config, Storage, Event, Origin} = 12, + TechnicalCommittee: pallet_collective::::{Pallet, Call, Config, Storage, Event, Origin} = 13, + + // Treasury + Treasury: pallet_treasury::{Pallet, Call, Storage, Config, Event} = 14, + + // Collator support. The order of these 4 are important and shall not change. + Authorship: pallet_authorship::{Pallet, Storage} = 20, + CollatorSelection: pallet_collator_selection::{Pallet, Call, Storage, Event, Config} = 21, + Session: pallet_session::{Pallet, Call, Storage, Event, Config} = 22, + Aura: pallet_aura::{Pallet, Storage, Config} = 23, + AuraExt: cumulus_pallet_aura_ext::{Pallet, Storage, Config} = 24, + + // Signatures + Multisig: pallet_multisig::{Pallet, Call, Storage, Event} = 30, + + // FRQC Update + TimeRelease: pallet_time_release::{Pallet, Call, Storage, Event, Config, Origin, FreezeReason, HoldReason} = 40, + + // Allowing accounts to give permission to other accounts to dispatch types of calls from their signed origin + Proxy: pallet_proxy = 43, + + // Substrate weights + WeightReclaim: cumulus_pallet_weight_reclaim::{Pallet, Storage} = 50, + + // Frequency related pallets + Msa: pallet_msa::{Pallet, Call, Storage, Event} = 60, + Messages: pallet_messages::{Pallet, Call, Storage, Event} = 61, + Schemas: pallet_schemas::{Pallet, Call, Storage, Event, Config} = 62, + StatefulStorage: pallet_stateful_storage::{Pallet, Call, Storage, Event} = 63, + Capacity: pallet_capacity::{Pallet, Call, Storage, Event, FreezeReason} = 64, + FrequencyTxPayment: pallet_frequency_tx_payment::{Pallet, Call, Event} = 65, + Handles: pallet_handles::{Pallet, Call, Storage, Event} = 66, + Passkey: pallet_passkey::{Pallet, Call, Storage, Event, ValidateUnsigned} = 67, + } +); + +#[cfg(feature = "runtime-benchmarks")] +#[macro_use] +extern crate frame_benchmarking; + +#[cfg(feature = "runtime-benchmarks")] +mod benches { + define_benchmarks!( + // Substrate + [frame_system, SystemBench::] + [frame_system_extensions, SystemExtensionsBench::] + [cumulus_pallet_weight_reclaim, WeightReclaim] + [pallet_balances, Balances] + [pallet_collective, Council] + [pallet_collective, TechnicalCommittee] + [pallet_preimage, Preimage] + [pallet_democracy, Democracy] + [pallet_scheduler, Scheduler] + [pallet_session, SessionBench::] + [pallet_timestamp, Timestamp] + [pallet_collator_selection, CollatorSelection] + [pallet_multisig, Multisig] + [pallet_utility, Utility] + [pallet_proxy, Proxy] + [pallet_transaction_payment, TransactionPayment] + + // Frequency + [pallet_msa, Msa] + [pallet_schemas, Schemas] + [pallet_messages, Messages] + [pallet_stateful_storage, StatefulStorage] + [pallet_handles, Handles] + [pallet_time_release, TimeRelease] + [pallet_treasury, Treasury] + [pallet_capacity, Capacity] + [pallet_frequency_tx_payment, FrequencyTxPayment] + [pallet_passkey, Passkey] + ); +} + +#[cfg(any(not(feature = "frequency-no-relay"), feature = "frequency-lint-check"))] +cumulus_pallet_parachain_system::register_validate_block! { + Runtime = Runtime, + BlockExecutor = cumulus_pallet_aura_ext::BlockExecutor::, +} + +// The implementation has to be here due to the linking in the macro. +// It CANNOT be extracted into a separate file +sp_api::impl_runtime_apis! { + impl sp_consensus_aura::AuraApi for Runtime { + fn slot_duration() -> sp_consensus_aura::SlotDuration { + sp_consensus_aura::SlotDuration::from_millis(SLOT_DURATION) + } + + fn authorities() -> Vec { + pallet_aura::Authorities::::get().into_inner() + } + } + + #[cfg(any(not(feature = "frequency-no-relay"), feature = "frequency-lint-check"))] + impl cumulus_primitives_aura::AuraUnincludedSegmentApi for Runtime { + fn can_build_upon( + included_hash: ::Hash, + slot: cumulus_primitives_aura::Slot, + ) -> bool { + ConsensusHook::can_build_upon(included_hash, slot) + } + } + + impl sp_api::Core for Runtime { + fn version() -> RuntimeVersion { + VERSION + } + + fn execute_block(block: Block) { + Executive::execute_block(block) + } + + fn initialize_block(header: &::Header) -> sp_runtime::ExtrinsicInclusionMode { + Executive::initialize_block(header) + } + } + + impl sp_api::Metadata for Runtime { + fn metadata() -> OpaqueMetadata { + OpaqueMetadata::new(Runtime::metadata().into()) + } + + fn metadata_at_version(version: u32) -> Option { + Runtime::metadata_at_version(version) + } + + fn metadata_versions() -> Vec { + Runtime::metadata_versions() + } + } + + impl sp_block_builder::BlockBuilder for Runtime { + fn apply_extrinsic(extrinsic: ::Extrinsic) -> ApplyExtrinsicResult { + Executive::apply_extrinsic(extrinsic) + } + + fn finalize_block() -> ::Header { + Executive::finalize_block() + } + + fn inherent_extrinsics(data: sp_inherents::InherentData) -> Vec<::Extrinsic> { + data.create_extrinsics() + } + + fn check_inherents( + block: Block, + data: sp_inherents::InherentData, + ) -> sp_inherents::CheckInherentsResult { + data.check_extrinsics(&block) + } + } + + impl sp_transaction_pool::runtime_api::TaggedTransactionQueue for Runtime { + fn validate_transaction( + source: TransactionSource, + tx: ::Extrinsic, + block_hash: ::Hash, + ) -> TransactionValidity { + Executive::validate_transaction(source, tx, block_hash) + } + } + + impl sp_offchain::OffchainWorkerApi for Runtime { + fn offchain_worker(header: &::Header) { + Executive::offchain_worker(header) + } + } + + impl sp_session::SessionKeys for Runtime { + fn generate_session_keys(seed: Option>) -> Vec { + SessionKeys::generate(seed) + } + + fn decode_session_keys( + encoded: Vec, + ) -> Option, KeyTypeId)>> { + SessionKeys::decode_into_raw_public_keys(&encoded) + } + } + + impl sp_genesis_builder::GenesisBuilder for Runtime { + fn build_state(config: Vec) -> sp_genesis_builder::Result { + build_state::(config) + } + + fn get_preset(id: &Option) -> Option> { + get_preset::(id, &crate::genesis::presets::get_preset) + } + + fn preset_names() -> Vec { + let mut presets = vec![]; + + #[cfg(any( + feature = "frequency-no-relay", + feature = "frequency-local", + feature = "frequency-lint-check" + ))] + presets.extend( + vec![ + sp_genesis_builder::PresetId::from("development"), + sp_genesis_builder::PresetId::from("frequency-local"), + sp_genesis_builder::PresetId::from("frequency"), + ]); + + + #[cfg(feature = "frequency-testnet")] + presets.push(sp_genesis_builder::PresetId::from("frequency-testnet")); + + #[cfg(feature = "frequency")] + presets.push(sp_genesis_builder::PresetId::from("frequency")); + + presets + } + } + + impl frame_system_rpc_runtime_api::AccountNonceApi for Runtime { + fn account_nonce(account: AccountId) -> Index { + System::account_nonce(account) + } + } + + impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi for Runtime { + // THIS QUERY_INFO IS FAILING AFTER THE CHANGES I MADE. + // TO TEST: DID THIS ACTUALLY WORK ON LOCAL BEFORE THE CHANGES? + // ERROR: `Bad input data provided to query_info: Codec error` + fn query_info( + uxt: ::Extrinsic, + len: u32, + ) -> pallet_transaction_payment_rpc_runtime_api::RuntimeDispatchInfo { + TransactionPayment::query_info(uxt, len) + } + fn query_fee_details( + uxt: ::Extrinsic, + len: u32, + ) -> pallet_transaction_payment::FeeDetails { + TransactionPayment::query_fee_details(uxt, len) + } + fn query_weight_to_fee(weight: Weight) -> Balance { + TransactionPayment::weight_to_fee(weight) + } + fn query_length_to_fee(len: u32) -> Balance { + TransactionPayment::length_to_fee(len) + } + } + + impl pallet_frequency_tx_payment_runtime_api::CapacityTransactionPaymentRuntimeApi for Runtime { + fn compute_capacity_fee( + uxt: ::Extrinsic, + len: u32, + ) ->pallet_transaction_payment::FeeDetails { + + // if the call is wrapped in a batch, we need to get the weight of the outer call + // and use that to compute the fee with the inner call's stable weight(s) + let dispatch_weight = match &uxt.function { + RuntimeCall::FrequencyTxPayment(pallet_frequency_tx_payment::Call::pay_with_capacity { .. }) | + RuntimeCall::FrequencyTxPayment(pallet_frequency_tx_payment::Call::pay_with_capacity_batch_all { .. }) => { + <::Extrinsic as GetDispatchInfo>::get_dispatch_info(&uxt).call_weight + }, + _ => { + Weight::zero() + } + }; + FrequencyTxPayment::compute_capacity_fee_details(&uxt.function, &dispatch_weight, len) + } + } + + #[cfg(any(not(feature = "frequency-no-relay"), feature = "frequency-lint-check"))] + impl cumulus_primitives_core::CollectCollationInfo for Runtime { + fn collect_collation_info(header: &::Header) -> cumulus_primitives_core::CollationInfo { + ParachainSystem::collect_collation_info(header) + } + } + + // Frequency runtime APIs + impl pallet_messages_runtime_api::MessagesRuntimeApi for Runtime { + fn get_messages_by_schema_and_block(schema_id: SchemaId, schema_payload_location: PayloadLocation, block_number: BlockNumber,) -> + Vec { + Messages::get_messages_by_schema_and_block(schema_id, schema_payload_location, block_number) + } + + fn get_schema_by_id(schema_id: SchemaId) -> Option { + Schemas::get_schema_by_id(schema_id) + } + } + + impl pallet_schemas_runtime_api::SchemasRuntimeApi for Runtime { + fn get_by_schema_id(schema_id: SchemaId) -> Option { + Schemas::get_schema_by_id(schema_id) + } + + fn get_schema_versions_by_name(schema_name: Vec) -> Option> { + Schemas::get_schema_versions(schema_name) + } + } + + impl system_runtime_api::AdditionalRuntimeApi for Runtime { + fn get_events() -> Vec { + System::read_events_no_consensus().map(|e| (*e).into()).collect() + } + } + + impl pallet_msa_runtime_api::MsaRuntimeApi for Runtime { + fn has_delegation(delegator: DelegatorId, provider: ProviderId, block_number: BlockNumber, schema_id: Option) -> bool { + match schema_id { + Some(sid) => Msa::ensure_valid_schema_grant(provider, delegator, sid, block_number).is_ok(), + None => Msa::ensure_valid_delegation(provider, delegator, Some(block_number)).is_ok(), + } + } + + fn get_granted_schemas_by_msa_id(delegator: DelegatorId, provider: ProviderId) -> Option>> { + match Msa::get_granted_schemas_by_msa_id(delegator, Some(provider)) { + Ok(res) => match res.into_iter().next() { + Some(delegation) => Some(delegation.permissions), + None => None, + }, + _ => None, + } + } + + fn get_all_granted_delegations_by_msa_id(delegator: DelegatorId) -> Vec> { + Msa::get_granted_schemas_by_msa_id(delegator, None).unwrap_or_default() + } + + fn get_ethereum_address_for_msa_id(msa_id: MessageSourceId) -> AccountId20Response { + let account_id = Msa::msa_id_to_eth_address(msa_id); + let account_id_checksummed = Msa::eth_address_to_checksummed_string(&account_id); + AccountId20Response { account_id, account_id_checksummed } + } + + fn validate_eth_address_for_msa(address: &H160, msa_id: MessageSourceId) -> bool { + Msa::validate_eth_address_for_msa(address, msa_id) + } + } + + impl pallet_stateful_storage_runtime_api::StatefulStorageRuntimeApi for Runtime { + fn get_paginated_storage(msa_id: MessageSourceId, schema_id: SchemaId) -> Result, DispatchError> { + StatefulStorage::get_paginated_storage(msa_id, schema_id) + } + + fn get_itemized_storage(msa_id: MessageSourceId, schema_id: SchemaId) -> Result { + StatefulStorage::get_itemized_storage(msa_id, schema_id) + } + } + + #[api_version(3)] + impl pallet_handles_runtime_api::HandlesRuntimeApi for Runtime { + fn get_handle_for_msa(msa_id: MessageSourceId) -> Option { + Handles::get_handle_for_msa(msa_id) + } + + fn get_next_suffixes(base_handle: BaseHandle, count: u16) -> PresumptiveSuffixesResponse { + Handles::get_next_suffixes(base_handle, count) + } + + fn get_msa_for_handle(display_handle: DisplayHandle) -> Option { + Handles::get_msa_id_for_handle(display_handle) + } + fn validate_handle(base_handle: BaseHandle) -> bool { + Handles::validate_handle(base_handle.to_vec()) + } + fn check_handle(base_handle: BaseHandle) -> CheckHandleResponse { + Handles::check_handle(base_handle.to_vec()) + } + } + + impl pallet_capacity_runtime_api::CapacityRuntimeApi for Runtime { + fn list_unclaimed_rewards(who: AccountId) -> Vec> { + match Capacity::list_unclaimed_rewards(&who) { + Ok(rewards) => rewards.into_inner(), + Err(_) => Vec::new(), + } + + } + } + + #[cfg(feature = "try-runtime")] + impl frame_try_runtime::TryRuntime for Runtime { + fn on_runtime_upgrade(checks: UpgradeCheckSelect) -> (Weight, Weight) { + log::info!("try-runtime::on_runtime_upgrade frequency."); + let weight = Executive::try_runtime_upgrade(checks).unwrap(); + (weight, RuntimeBlockWeights::get().max_block) + } + + fn execute_block(block: Block, + state_root_check: bool, + signature_check: bool, + try_state: TryStateSelect, + ) -> Weight { + log::info!( + target: "runtime::frequency", "try-runtime: executing block #{} ({:?}) / root checks: {:?} / sanity-checks: {:?}", + block.header.number, + block.header.hash(), + state_root_check, + try_state, + ); + Executive::try_execute_block(block, state_root_check, signature_check, try_state).expect("try_execute_block failed") + } + } + + #[cfg(feature = "runtime-benchmarks")] + impl frame_benchmarking::Benchmark for Runtime { + fn benchmark_metadata(extra: bool) -> ( + Vec, + Vec, + ) { + use frame_benchmarking::{BenchmarkList}; + use frame_support::traits::StorageInfoTrait; + use frame_system_benchmarking::Pallet as SystemBench; + use frame_system_benchmarking::extensions::Pallet as SystemExtensionsBench; + use cumulus_pallet_session_benchmarking::Pallet as SessionBench; + + let mut list = Vec::::new(); + list_benchmarks!(list, extra); + + let storage_info = AllPalletsWithSystem::storage_info(); + (list, storage_info) + } + + #[allow(deprecated, non_local_definitions)] + fn dispatch_benchmark( + config: frame_benchmarking::BenchmarkConfig + ) -> Result, sp_runtime::RuntimeString> { + use frame_benchmarking::{BenchmarkBatch}; + + use frame_system_benchmarking::Pallet as SystemBench; + impl frame_system_benchmarking::Config for Runtime {} + + use frame_system_benchmarking::extensions::Pallet as SystemExtensionsBench; + + use cumulus_pallet_session_benchmarking::Pallet as SessionBench; + impl cumulus_pallet_session_benchmarking::Config for Runtime {} + + use frame_support::traits::{WhitelistedStorageKeys, TrackedStorageKey}; + let whitelist: Vec = AllPalletsWithSystem::whitelisted_storage_keys(); + + let mut batches = Vec::::new(); + let params = (&config, &whitelist); + add_benchmarks!(params, batches); + + if batches.is_empty() { return Err("Benchmark not found for this pallet.".into()) } + Ok(batches) + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use frame_support::traits::WhitelistedStorageKeys; + use sp_core::hexdisplay::HexDisplay; + use std::collections::HashSet; + + #[test] + fn check_whitelist() { + let whitelist: HashSet = dbg!(AllPalletsWithSystem::whitelisted_storage_keys() + .iter() + .map(|e| HexDisplay::from(&e.key).to_string()) + .collect()); + + // Block Number + assert!( + whitelist.contains("26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac") + ); + // Total Issuance + assert!( + whitelist.contains("c2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80") + ); + // Execution Phase + assert!( + whitelist.contains("26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a") + ); + // Event Count + assert!( + whitelist.contains("26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850") + ); + // System Events + assert!( + whitelist.contains("26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7") + ); + } + + #[test] + fn runtime_apis_are_populated() { + assert!(RUNTIME_API_VERSIONS.len() > 0); + } +} diff --git a/runtime/system-runtime-api/Cargo.toml b/runtime/system-runtime-api/Cargo.toml new file mode 100644 index 0000000000..a60c9dc089 --- /dev/null +++ b/runtime/system-runtime-api/Cargo.toml @@ -0,0 +1,33 @@ +[package] +name = "system-runtime-api" +version = "0.0.0" +description = "Additional RPC package for Frequency" +authors = ["Frequency"] +license = "Apache-2.0" +publish = false +homepage = "https://frequency.xyz" +repository = "https://github.com/frequency-chain/frequency/" +edition = "2021" + +[dependencies] +serde_json = { workspace = true, features = ["alloc"] } +# Substrate +sp-runtime = { workspace = true } +sp-api = { workspace = true } +frame-support = { workspace = true } +frame-system = { workspace = true } +# Frequency related dependencies +common-primitives = { default-features = false, path = "../../common/primitives" } + +[features] +default = ["std"] +std = [ + "sp-api/std", + "frame-system/std", + "frame-support/std", + "common-primitives/std", + "sp-runtime/std", +] + +[lints] +workspace = true diff --git a/runtime/system-runtime-api/src/lib.rs b/runtime/system-runtime-api/src/lib.rs new file mode 100644 index 0000000000..3f891fb05f --- /dev/null +++ b/runtime/system-runtime-api/src/lib.rs @@ -0,0 +1,38 @@ +#![cfg_attr(not(feature = "std"), no_std)] +#![allow(clippy::too_many_arguments)] +#![allow(clippy::unnecessary_mut_passed)] +#![allow(rustdoc::bare_urls)] +// Strong Documentation Lints +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + missing_docs +)] + +//! Runtime API definition for additional Frequency RPCs +//! This api must be implemented by the n//!ode runtime. +//! Runtime APIs Provide: +//! - An interface between the runtime and Custom RPCs. +//! - Runtime interfaces for end users beyond just State Queries + +use common_primitives::rpc::RpcEvent; +extern crate alloc; +use alloc::vec::Vec; + +// Here we declare the runtime API. It is implemented it the `impl` block in +// runtime files (the `runtime` folder) +sp_api::decl_runtime_apis! { + + /// Runtime Version for Additional Frequency Runtime Apis + /// - MUST be incremented if anything changes + /// - See: https://paritytech.github.io/polkadot/doc/polkadot_primitives/runtime_api/index.html + #[api_version(1)] + + /// Runtime API definition for Frequency + pub trait AdditionalRuntimeApi { + /// Fetch the events of a block + /// An easy to work with structure with minimal SCALE needs + fn get_events() -> Vec; + } +} diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 0000000000..473eb9ea54 --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,7 @@ +[toolchain] +# If you update this, ALSO update the ci-base-image on branch `ci/ci-base-image` +# and update the CI base image version everywhere +channel = "1.84" +components = [ "clippy", "rust-docs", "rustfmt","rustc-dev", "rustc", "rust-src"] +targets = [ "wasm32v1-none" ] +profile = "minimal" diff --git a/scripts/enact-upgrade.sh b/scripts/enact-upgrade.sh new file mode 100755 index 0000000000..e0f184938d --- /dev/null +++ b/scripts/enact-upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +set -x + +if [[ -z "$1" || -z $2 || -z $3 ]]; then + echo "usage: $0 'collator sudo secret' \$ws_provider \$wasm_location" + # fx: $0 'collator sudo secret' wss://dev.net.t3rn.io /tmp/wasm + exit 1 +fi + +sudo_secret=$1 +ws_provider=$2 +wasm_location=$3 + +cd scripts/js/onboard + +npm i && npm run upgrade-enact $ws_provider $sudo_secret $wasm_location diff --git a/scripts/generate_js_definitions.sh b/scripts/generate_js_definitions.sh new file mode 100755 index 0000000000..a34206350f --- /dev/null +++ b/scripts/generate_js_definitions.sh @@ -0,0 +1,57 @@ +#!/usr/bin/env bash + +set -e + +STEP_COLOR='\033[4;36m' # Cyan Underline +MESSAGE='\033[0;33m' # Yellow +BOLD_MESSAGE='\033[1;33m' # Bold Yellow +SUCCESS='\033[0;92m' # Green +NC='\033[0m' # No Color + +echo -e "${STEP_COLOR}Checking to see if Frequency is running...${NC}" +echo "" +echo -e "${MESSAGE}Is Frequency running?${NC}" + +PID=$(lsof -i tcp:9944 | grep frequency | grep -v grep | xargs | awk '{print $2}') + +if [ -z "$PID" ] +then + echo -e "${MESSAGE}" + echo "No." + echo -e "${NC}" + echo -e "${STEP_COLOR}Generating using CLI...${NC}" + rm -f ./js/api-augment/metadata.json + cargo run --features frequency-local -- export-metadata --tmp --chain=frequency-paseo-local ./js/api-augment/metadata.json + # cd into js dir + cd "js/api-augment" + npm install # in case things have changed + npm run build +else + echo -e "${SUCCESS}" + echo "Yes. ( You better go catch it ;-) )" + echo "" + echo "---------------------------------------------" + echo "Use this PID to kill the Frequency process:" + echo -e "${BOLD_MESSAGE}PID: ${PID}${SUCCESS}" + echo "---------------------------------------------" + echo -e "${NC}" + + # cd into js dir + cd "js/api-augment" + npm install # in case things have changed + npm run fetch:local + npm run build +fi + +# Generate the new packed tgz +cd dist +npm pack + +# build ethereum-utils +cd "../../ethereum-utils" +npm install +npm run build + +# Generate ethereum-utils packed tgz +cd dist +npm pack diff --git a/scripts/generate_specs.sh b/scripts/generate_specs.sh new file mode 100755 index 0000000000..4dcd650b97 --- /dev/null +++ b/scripts/generate_specs.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash + +set -e + +parachain_id=$1 +chain=$2 +profile=$3 +if [[ $parachain_id == "" ]]; then + echo "Chain Name or Parachain ID argument not provided" + exit 1 +fi + +BUILT_TARGET=./target/$profile/frequency +if [ ! -x "$BUILT_TARGET" ]; then + echo "FATAL: $BUILT_TARGET does not exist, or not executable, rebuild binary to continue" + exit 1 +fi + +spec_file="./res/genesis/local/${chain}-${parachain_id}.json" +uncompressed_wasm="./res/genesis/local/${chain}-${parachain_id}.wasm" +compressed_wasm="./res/genesis/local/${chain}-${parachain_id}.compressed.wasm" +genesis_state="./res/genesis/local/${chain}-${parachain_id}-genesis-state" +hex_wasm_file="./res/genesis/local/${chain}-${parachain_id}-wasm-hex" + +mkdir -p ./res/genesis/local +echo "Building Spec for ${chain} paraid=${parachain_id}" +./target/$profile/frequency build-spec --disable-default-bootnode --chain="${chain}" > "${spec_file}" + +cp ./target/$profile/wbuild/frequency-runtime/frequency_runtime.wasm "${uncompressed_wasm}" + +subwasm compress "${uncompressed_wasm}" "${compressed_wasm}" + +# Update the spec with the compressed WASM +hex_compressed_wasm=`xxd -ps -c 0 "${compressed_wasm}"` +echo -n "0x${hex_compressed_wasm}" > "${hex_wasm_file}" + +jq --rawfile code "${hex_wasm_file}" '.genesis.runtimeGenesis.code = $code' "${spec_file}" > "${spec_file}.tmp" && mv "${spec_file}.tmp" "${spec_file}" + +echo "Exporting state and wasm for ${chain} paraid=${parachain_id}" +./target/$profile/frequency export-genesis-state --chain="${spec_file}" > "${genesis_state}" + +echo "Spec File: ${spec_file}" +echo "Uncompressed wasm: ${uncompressed_wasm}" +echo "Compressed wasm: ${compressed_wasm}" +echo "Genesis State: ${genesis_state}" +echo "Compressed wasm Hex: ${hex_wasm_file}" diff --git a/scripts/healthcheck.sh b/scripts/healthcheck.sh new file mode 100755 index 0000000000..3ad1e43086 --- /dev/null +++ b/scripts/healthcheck.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +set -e + +frequency_rpc_port="${Frequency_RPC_PORT:-11936}" + +node="127.0.0.1" +port="$frequency_rpc_port" +curl -sS \ + -H 'Content-Type: application/json' \ + --data '{"id":1,"jsonrpc":"2.0","method":"system_health"}' \ + "$node:$port" |\ +jq -r '.result' diff --git a/scripts/init.sh b/scripts/init.sh new file mode 100755 index 0000000000..d987dc9075 --- /dev/null +++ b/scripts/init.sh @@ -0,0 +1,324 @@ +#!/usr/bin/env bash + +set -e + +cmd=$1 +chain_spec="${RAW_PARACHAIN_CHAIN_SPEC:-./res/genesis/local/paseo-local-frequency-2000-raw.json}" +# The runtime we want to use +parachain="${PARA_CHAIN_CONFIG:-paseo-2000}" +# The parachain Id we want to use +para_id="${PARA_ID:-2000}" +# The tmp base directory +base_dir=/tmp/frequency +# Option to use the Docker image to export state & wasm +docker_onboard="${DOCKER_ONBOARD:-false}" +frequency_docker_image="${PARA_DOCKER_IMAGE:-frequencychain/parachain:latest}" +chain="${RELAY_CHAIN_SPEC:-./resources/paseo-local.json}" +# offchain options +offchain_params="--offchain-worker=never" +# option to prune Docker volumes when shutting down +prune=${PRUNE:-} + +if [ "$2" == "with-offchain" ]; then + offchain_params="--offchain-worker=always --enable-offchain-indexing=true" +fi + + +case $cmd in + +start-paseo-relay-chain) + echo "Starting local relay chain with Alice and Bob..." + cd docker + docker compose up -d relay_paseo_alice relay_paseo_bob + echo "ALERT: You likely need to manually set the scheduling lookahead. sudo(configuration.setSchedulingLookahead(3)) and wait for it to apply." + ;; + +stop-paseo-relay-chain) + echo "Stopping paseo chain..." + cd docker + docker compose down ${prune} + ;; + +start-frequency-docker) + echo "Starting published Frequency container with Alice..." + cd docker + docker compose -f docker-compose.yml -f docker-compose-collator.yml up -d collator_frequency + ;; + +stop-frequency-docker) + echo "Stopping published Frequency container with Alice..." + cd docker + docker compose -f docker-compose.yml -f docker-compose-collator.yml down ${prune} + ;; + +start-paseo-collator-alice) + printf "\nBuilding frequency with runtime '$parachain' and id '$para_id'...\n" + cargo build --release --features frequency-local + + parachain_dir_alice=$base_dir/parachain/alice/${para_id} + mkdir -p $parachain_dir_alice; + + if [ "$2" == "purge" ]; then + echo "purging parachain..." + rm -rf $parachain_dir_alice + fi + + "${Frequency_BINARY_PATH:-./target/release/frequency}" key generate-node-key --base-path=$parachain_dir_alice/data + + NODE_PARACHAIN_RPC_PORT=9943 ./scripts/run_collator.sh \ + --chain="frequency-paseo-local" --alice \ + --base-path=$parachain_dir_alice/data \ + --state-pruning archive \ + --force-authoring \ + --discover-local \ + --port $((30333)) \ + --rpc-port $((9944)) \ + --rpc-external \ + --rpc-cors all \ + --rpc-methods=Unsafe \ + --no-prometheus \ + --no-hardware-benchmarks \ + $offchain_params \ + ;; + +start-paseo-collator-bob) + printf "\nASSUMING that frequency with runtime '$parachain' and id '$para_id' is ALREADY BUILT...\n" + # cargo build --release --features frequency-local + + parachain_dir_bob=$base_dir/parachain/bob/${para_id} + mkdir -p $parachain_dir_bob; + + if [ "$2" == "purge" ]; then + echo "purging parachain..." + rm -rf $parachain_dir_bob + fi + + "${Frequency_BINARY_PATH:-./target/release/frequency}" key generate-node-key --base-path=$parachain_dir_bob/data + + NODE_PARACHAIN_RPC_PORT=9944 ./scripts/run_collator.sh \ + --chain="frequency-paseo-local" --bob \ + --base-path=$parachain_dir_bob/data \ + --discover-local \ + --force-authoring \ + --state-pruning archive \ + --port $((30332)) \ + --rpc-port $((9943)) \ + --rpc-external \ + --rpc-cors all \ + --rpc-methods=Unsafe \ + --no-prometheus \ + --no-hardware-benchmarks \ + $offchain_params \ + ;; + +start-frequency-instant) + printf "\nBuilding Frequency without relay. Running with instant sealing ...\n" + # Uncomment/swap below if you want to see debug logs in the Frequency node + # cargo build --features frequency-no-relay,force-debug + cargo build --features frequency-no-relay + + parachain_dir=$base_dir/parachain/${para_id} + mkdir -p $parachain_dir; + + if [ "$2" == "purge" ]; then + echo "purging parachain..." + rm -rf $parachain_dir + fi + + ./target/debug/frequency \ + --dev \ + --state-pruning archive \ + -lbasic-authorship=debug \ + -ltxpool=debug \ + -lruntime=debug \ + --sealing=instant \ + --no-telemetry \ + --no-prometheus \ + --port $((30333)) \ + --rpc-port $((9944)) \ + --rpc-external \ + --rpc-cors all \ + --rpc-methods=Unsafe \ + $offchain_params \ + --tmp + ;; + +start-frequency-interval) + defaultInterval=6 + interval=${3-$defaultInterval} + printf "\nBuilding Frequency without relay. Running with interval sealing with interval of $interval seconds...\n" + cargo build --features frequency-no-relay + + parachain_dir=$base_dir/parachain/${para_id} + mkdir -p $parachain_dir; + + if [ "$2" == "purge" ]; then + echo "purging parachain..." + rm -rf $parachain_dir + fi + + ./target/debug/frequency \ + --dev \ + --state-pruning archive \ + -lbasic-authorship=debug \ + -ltxpool=debug \ + -lruntime=debug \ + --sealing=interval \ + --sealing-interval=${interval} \ + --sealing-create-empty-blocks \ + --wasm-execution=compiled \ + --no-telemetry \ + --no-prometheus \ + --port $((30333)) \ + --rpc-port $((9944)) \ + --rpc-external \ + --rpc-cors all \ + --rpc-methods=Unsafe \ + $offchain_params \ + --tmp + ;; + +start-frequency-manual) + printf "\nBuilding frequency without relay. Running with manual sealing ...\n" + cargo build --features frequency-no-relay + + parachain_dir=$base_dir/parachain/${para_id} + mkdir -p $parachain_dir; + + if [ "$2" == "purge" ]; then + echo "purging parachain..." + rm -rf $parachain_dir + fi + + echo "---------------------------------------" + echo "Running Frequency in manual seal mode." + echo "Run 'make local-block' to seal a block." + echo "---------------------------------------" + + ./target/debug/frequency \ + --dev \ + -lruntime=debug \ + --sealing=manual \ + --no-telemetry \ + --no-prometheus \ + --port $((30333)) \ + --rpc-port $((9944)) \ + --rpc-external \ + --rpc-cors all \ + --rpc-methods=Unsafe \ + $offchain_params \ + --tmp + ;; + +start-frequency-container) + + base_dir=/data + parachain_dir=$base_dir/parachain/${para_id} + frequency_default_port=$((30333)) + frequency_default_rpc_port=$((9944)) + frequency_port="${Frequency_PORT:-$frequency_default_port}" + frequency_rpc_port="${Frequency_RPC_PORT:-$frequency_default_rpc_port}" + + ./scripts/run_collator.sh \ + --chain="frequency-paseo-local" \ + --state-pruning archive \ + --alice \ + --unsafe-force-node-key-generation \ + --base-path=$parachain_dir/data \ + --force-authoring \ + --port "${frequency_port}" \ + --rpc-port "${frequency_rpc_port}" \ + --rpc-external \ + --rpc-cors all \ + --rpc-methods=Unsafe \ + $offchain_params \ + ;; + +register-frequency-paseo-local) + echo "reserving and registering parachain with relay via first available slot..." + + cd scripts/js/onboard + npm i && npm run register "ws://0.0.0.0:9946" "//Alice" + ;; + +onboard-frequency-paseo-local) + echo "Onboarding parachain with runtime '$parachain' and id '$para_id'..." + + onboard_dir="$base_dir/onboard" + mkdir -p $onboard_dir + wasm_location="$onboard_dir/${parachain}-${para_id}.wasm" + + # THE `-r` is important for it to be binary instead of hex + # Make sure the docker does NOT use -t as it breaks the binary output + if [ "$docker_onboard" == "true" ]; then + genesis=$(docker run --rm -e RUST_LOG=off -i ${frequency_docker_image} /frequency/target/release/frequency export-genesis-state --chain="frequency-paseo-local") + docker run --rm -e RUST_LOG=off -i ${frequency_docker_image} /frequency/target/release/frequency export-genesis-wasm --raw --chain="frequency-paseo-local" > $wasm_location + else + genesis=$(RUST_LOG=off ./target/release/frequency export-genesis-state --chain=frequency-paseo-local) + RUST_LOG=off ./target/release/frequency export-genesis-wasm --raw --chain=frequency-paseo-local > $wasm_location + fi + + cd scripts/js/onboard + echo "WASM File md5: $(md5 "${wasm_location}")" + wasm_hex=$(echo -n "0x"`xxd -ps -c 0 "${wasm_location}"`) + echo "WASM Hex md5: $(echo -n "${wasm_hex}" | md5)" + npm i && echo -n "${wasm_hex}" | npm run onboard "ws://0.0.0.0:9946" "//Alice" ${para_id} "${genesis}" + ;; + +# Useful in combination with make specs-frequency-paseo-local-* +onboard-res-local) + echo "Onboarding parachain with runtime '$parachain' and id '$para_id'..." + echo "Assuming that the files in res/genesis/local are correct..." + + wasm_location="../../../res/genesis/local/frequency-paseo-local-2000.compressed.wasm" + genesis=$(cat res/genesis/local/frequency-paseo-local-2000-genesis-state) + + cd scripts/js/onboard + echo "WASM File md5: $(md5 "${wasm_location}")" + wasm_hex=$(echo -n "0x"`xxd -ps -c 0 "${wasm_location}"`) + echo "WASM Hex md5: $(echo -n "${wasm_hex}" | md5)" + npm i && echo -n "${wasm_hex}" | npm run onboard "ws://0.0.0.0:9946" "//Alice" ${para_id} "${genesis}" + ;; + +offboard-frequency-paseo-local) + echo "cleaning up parachain for id '$para_id'..." + + cd scripts/js/onboard + npm i && npm run cleanup "ws://0.0.0.0:9946" "//Alice" ${para_id} + ;; + +upgrade-frequency-paseo-local) + + root_dir=$(git rev-parse --show-toplevel) + echo "root_dir is set to $root_dir" + + # Due to defaults and profile=debug, the target directory will be $root_dir/target/debug + cargo build \ + --package frequency-runtime \ + --features frequency-local + + wasm_location=$root_dir/target/debug/wbuild/frequency-runtime/frequency_runtime.compact.compressed.wasm + + ./scripts/runtime-upgrade.sh "//Alice" "ws://0.0.0.0:9944" $wasm_location + + ./scripts/enact-upgrade.sh "//Alice" "ws://0.0.0.0:9944" $wasm_location + + ;; + +upgrade-frequency-no-relay) + + root_dir=$(git rev-parse --show-toplevel) + echo "root_dir is set to $root_dir" + + # Due to defaults and profile=debug, the target directory will be $root_dir/target/debug + cargo build \ + --package frequency-runtime \ + --features frequency-no-relay + + wasm_location=$root_dir/target/debug/wbuild/frequency-runtime/frequency_runtime.compact.compressed.wasm + + ./scripts/runtime-dev-upgrade.sh "//Alice" "ws://0.0.0.0:9944" $wasm_location + + ;; + +esac diff --git a/scripts/js/democracy/README.md b/scripts/js/democracy/README.md new file mode 100644 index 0000000000..0be596f0b2 --- /dev/null +++ b/scripts/js/democracy/README.md @@ -0,0 +1,48 @@ +# Local Runtime Upgrade via Referendum + +If you are trying to enact a runtime upgrade via Polkadot's referenda process, keep in mind the following workflow: + +1. Runtime upgrade is authorized +2. A proposal for that upgrade is made +3. The proposal is endorsed by an actor on the network +4. The proposal is tabled for referendum +5. A majority of actors vote "Aye" on the referendum +6. The referendum passes +7. The upgrade is enacted + +To accomplish the above workflow, you will need to take the following steps: + +### Upgrade Authorization + +1. Build the WASM for the runtime upgrade: + +``` +make build +make specs-testnet-2000 +``` + +This will place a WASM in the `res/genesis/testnet` folder. + +Once you have the WASM, submit a preimage for it using the `parachainSystem.authorizeUpgrade` extrinsic. If you are using the Polkadot JS UI, you can access a widget for doing this in the [democracy panel](https://polkadot.js.org/apps/?rpc=ws%3A%2F%2F127.0.0.1%3A9944#/democracy). + +The upgrade should take about a block to register on the chain (take note of the chain event stream for a `democracy.PreimageNoted` event). Grab the hash from the event. + +### Proposal + +To make a proposal, you can use the `propose` function located at `scripts/js/democracy/submitProsal.js`. Pass the hash from the previous step into this function to motion for a proposal. You should see a `democracy.Proposed` event appear in the event stream. + +### Endorsement + +For the proposal to proceed to the referendm stage, it must be endorsed. In Polkadot parlance, this is called "Secconding". To endorse your proposal, use the `endorse` function located in the `scripts/js/democracy/endorseProposal.js` file. Pass it the index of the proposal you want to endorse (you can get the index from the democracy panel or from the `democracy.Proposed` event). + +### Voting + +At the end of the launch period, the endorsed proposal will move to to referendum stage. Here, the proposal will need to get a majority of "Aye" votes to be enacted. Keep in mind here that votes equate with balance. + +To vote for a proposal, get the `refIndex` from the `democracy.Started` event and pass it to the `aye` or `nay` function from `scripts/js/democracy/voteOnReferendum.js`. You may pass in a balance as well (this is the value correlated with one's vote). + +### Enactment + +Once the referendum passes, you should see a `democracy.Passed` event as well as a `scheduler.Scheduled` event containing a block number where the upgrade will be authorized (usually 5 blocks into the future). When that block number is reached, you should see a `parachainSystem.UpgradeAuthorized` event appear in the event stream. Once you do, it is time to enact your upgrade. + +This is an action you will need to do as _sudo_. Visit the [extrinsics panel](https://polkadot.js.org/apps/?rpc=ws%3A%2F%2F127.0.0.1%3A9944#/extrinsics) and first choose the `sudo.UncheckedWeight` extrinsic. Nested underneath it, choose `parachainSystem.enactAuthorizedUpgrade` and upload the same WASM you authorized earlier. Submit. If all goes well, you will see a successful `sudo.Sudid` event (`Ok`), with a `parachainSystem.ValidationFunctionApplied` event soon after (about 2 blocks). If you do, your upgrade was successful. diff --git a/scripts/js/democracy/endorseProposal.js b/scripts/js/democracy/endorseProposal.js new file mode 100644 index 0000000000..24cfadb669 --- /dev/null +++ b/scripts/js/democracy/endorseProposal.js @@ -0,0 +1,22 @@ +const { ApiPromise, WsProvider, Keyring } = require("@polkadot/api") + +async function endorse(proposalIndex) { + const provider = new WsProvider("ws://0.0.0.0:9944"); + const api = await ApiPromise.create({ provider }); + const keyring = new Keyring({ type: "sr25519" }); + const sudo = keyring.addFromUri("//Alice"); + + return api.tx.democracy.second(proposalIndex, 1) + .signAndSend(sudo, (result) => { + console.log("Endorsement made...") + if (result.status.isFinalized) { + console.log("Success!"); + console.log(result); + } else if (result.isError) { + console.log(`Transaction Error`); + process.exit() + } + }) +} + +module.exports = endorse; diff --git a/scripts/js/democracy/submitProposal.js b/scripts/js/democracy/submitProposal.js new file mode 100644 index 0000000000..fba6b864af --- /dev/null +++ b/scripts/js/democracy/submitProposal.js @@ -0,0 +1,22 @@ +const { ApiPromise, WsProvider, Keyring } = require("@polkadot/api") + +async function propose(proposalHash, deposit = 100_000_000_000_000) { + const provider = new WsProvider("ws://0.0.0.0:9944"); + const api = await ApiPromise.create({ provider }); + const keyring = new Keyring({ type: "sr25519" }); + const sudo = keyring.addFromUri("//Alice"); + + return api.tx.democracy.propose(proposalHash, deposit) + .signAndSend(sudo, (result) => { + console.log("Proposal made...") + if (result.status.isFinalized) { + console.log("Success!"); + console.log(result.events.map(e => e.get("event").get("data"))); + } else if (result.isError) { + console.log(`Transaction Error`); + process.exit() + } + }) +} + +module.exports = propose; diff --git a/scripts/js/democracy/voteOnReferendum.js b/scripts/js/democracy/voteOnReferendum.js new file mode 100644 index 0000000000..026436c676 --- /dev/null +++ b/scripts/js/democracy/voteOnReferendum.js @@ -0,0 +1,38 @@ +const { ApiPromise, WsProvider, Keyring } = require("@polkadot/api") + +async function aye(referendumIndex, balance = 100) { + return vote(true, referendumIndex, balance); +} + +async function nay(referendumIndex, balance = 100) { + return vote(false, referendumIndex, balance); +} + +async function vote(aye, referendumIndex, balance) { + const provider = new WsProvider("ws://0.0.0.0:9944"); + const api = await ApiPromise.create({ provider }); + const keyring = new Keyring({ type: "sr25519" }); + const sudo = keyring.addFromUri("//Alice"); + + return api.tx.democracy.vote(referendumIndex, { + Standard: { + vote: { + conviction: "None", + aye + }, + balance + }}).signAndSend(sudo, (result) => { + console.log(`Voting ${ aye ? "Aye" : "Nay" }...`); + if (result.status.isFinalized) { + console.log("Success!"); + console.log(result); + } else if (result.isError) { + console.log(`Transaction Error`); + process.exit() + } + }) +} + +module.exports = { + aye, nay +}; diff --git a/scripts/js/onboard/README.md b/scripts/js/onboard/README.md new file mode 100644 index 0000000000..c643e719ea --- /dev/null +++ b/scripts/js/onboard/README.md @@ -0,0 +1,7 @@ +# Onboard Parachain + +Simple Node JS script that onboard the parachain against a local target + +## Requirements + +- Node 20+ diff --git a/scripts/js/onboard/authUpgrade.mjs b/scripts/js/onboard/authUpgrade.mjs new file mode 100644 index 0000000000..0a14f85089 --- /dev/null +++ b/scripts/js/onboard/authUpgrade.mjs @@ -0,0 +1,34 @@ +import { ApiPromise, WsProvider, Keyring } from "@polkadot/api"; + +async function main() { + try { + const endpoint = process.argv[2]; + const seed = process.argv[3]; + const hash = process.argv[4]; + const provider = new WsProvider(endpoint); + const api = await ApiPromise.create({ provider }); + const keyring = new Keyring({ type: "sr25519" }); + const sudo = keyring.addFromUri(seed); + console.log(`--- Submitting extrinsic to authorize testnet-2000 upgrade ---`); + const sudoCall = await api.tx.sudo + .sudo(api.tx.parachainSystem.authorizeUpgrade(hash, false)) + .signAndSend(sudo, (result) => { + console.log(`Current status is ${result.status}`); + if (result.status.isInBlock) { + console.log(`Transaction included at blockHash ${result.status.asInBlock}`); + console.log("Waiting for finalization..."); + } else if (result.status.isFinalized) { + console.log(`Transaction finalized at blockHash ${result.status.asFinalized}`); + sudoCall(); + process.exit(); + } else if (result.isError) { + console.log(`Transaction Error`); + process.exit(); + } + }); + } catch (error) { + console.log("error:", error); + } +} + +main(); diff --git a/scripts/js/onboard/devUpgrade.mjs b/scripts/js/onboard/devUpgrade.mjs new file mode 100644 index 0000000000..22433e493b --- /dev/null +++ b/scripts/js/onboard/devUpgrade.mjs @@ -0,0 +1,43 @@ +import { ApiPromise, WsProvider, Keyring } from "@polkadot/api"; + +import { readFileSync } from "fs"; + +async function main() { + try { + const endpoint = process.argv[2]; + const seed = process.argv[3]; + const wasmFile = process.argv[4]; + const provider = new WsProvider(endpoint); + const api = await ApiPromise.create({ provider }); + const keyring = new Keyring({ type: "sr25519" }); + const sudo = keyring.addFromUri(seed); + console.log(`--- Submitting extrinsic to upgrade dev node ---`); + let wasm; + try { + wasm = "0x" + readFileSync(wasmFile).toString("hex"); + } catch (err) { + console.error(err); + throw err; + } + const sudoCall = await api.tx.sudo + .sudoUncheckedWeight(api.tx.system.setCodeWithoutChecks(wasm), { refTime: 1 }) + .signAndSend(sudo, (result) => { + console.log(`Current status is ${result.status}`); + if (result.status.isInBlock) { + console.log(`Transaction included at blockHash ${result.status.asInBlock}`); + console.log("Waiting for finalization..."); + } else if (result.status.isFinalized) { + console.log(`Transaction finalized at blockHash ${result.status.asFinalized}`); + sudoCall(); + process.exit(); + } else if (result.isError) { + console.log(`Transaction Error`); + process.exit(); + } + }); + } catch (error) { + console.log("error:", error); + } +} + +main(); diff --git a/scripts/js/onboard/enactUpgrade.mjs b/scripts/js/onboard/enactUpgrade.mjs new file mode 100644 index 0000000000..599dfa4c5c --- /dev/null +++ b/scripts/js/onboard/enactUpgrade.mjs @@ -0,0 +1,43 @@ +import { ApiPromise, WsProvider, Keyring } from "@polkadot/api"; + +import { readFileSync } from "fs"; + +async function main() { + try { + const endpoint = process.argv[2]; + const seed = process.argv[3]; + const wasmFile = process.argv[4]; + const provider = new WsProvider(endpoint); + const api = await ApiPromise.create({ provider }); + const keyring = new Keyring({ type: "sr25519" }); + const sudo = keyring.addFromUri(seed); + console.log(`--- Submitting extrinsic to authorize testnet-2000 upgrade ---`); + let wasm; + try { + wasm = "0x" + readFileSync(wasmFile).toString("hex"); + } catch (err) { + console.error(err); + throw err; + } + const sudoCall = await api.tx.sudo + .sudo(api.tx.parachainSystem.enactAuthorizedUpgrade(wasm)) + .signAndSend(sudo, (result) => { + console.log(`Current status is ${result.status}`); + if (result.status.isInBlock) { + console.log(`Transaction included at blockHash ${result.status.asInBlock}`); + console.log("Waiting for finalization..."); + } else if (result.status.isFinalized) { + console.log(`Transaction finalized at blockHash ${result.status.asFinalized}`); + sudoCall(); + process.exit(); + } else if (result.isError) { + console.log(`Transaction Error`); + process.exit(); + } + }); + } catch (error) { + console.log("error:", error); + } +} + +main(); diff --git a/scripts/js/onboard/offboard.mjs b/scripts/js/onboard/offboard.mjs new file mode 100644 index 0000000000..6cfea6e0f9 --- /dev/null +++ b/scripts/js/onboard/offboard.mjs @@ -0,0 +1,44 @@ +import { ApiPromise, WsProvider, Keyring } from "@polkadot/api"; + +const run = async () => { + try { + console.log("Parsing Args ..."); + // 0 & 1 are command context + const endpoint = process.argv[2]; + const seed = process.argv[3]; + const id = process.argv[4]; + + const wsProvider = new WsProvider(endpoint); + + const api = await ApiPromise.create({ + provider: wsProvider, + }); + + const keyring = new Keyring({ type: "sr25519" }); + const alice = keyring.addFromUri(seed); + + const nonce = Number((await api.query.system.account(alice.address)).nonce); + + console.log(`--- Submitting extrinsic to register parachain ${id}. (nonce: ${nonce}) ---`); + const sudoCall = await api.tx.sudo + .sudo(api.tx.paraSudoWrapper.sudoScheduleParaCleanup(id)) + .signAndSend(alice, { nonce: nonce, era: 0 }, (result) => { + console.log(`Current status is ${result.status}`); + if (result.status.isInBlock) { + console.log(`Transaction included at blockHash ${result.status.asInBlock}`); + console.log("Waiting for finalization..."); + } else if (result.status.isFinalized) { + console.log(`Transaction finalized at blockHash ${result.status.asFinalized}`); + sudoCall(); + process.exit(); + } else if (result.isError) { + console.log(`Transaction Error`); + process.exit(); + } + }); + } catch (error) { + console.log("error:", error); + } +}; + +run(); diff --git a/scripts/js/onboard/onboard.mjs b/scripts/js/onboard/onboard.mjs new file mode 100644 index 0000000000..bc19e79e41 --- /dev/null +++ b/scripts/js/onboard/onboard.mjs @@ -0,0 +1,58 @@ +import { ApiPromise, WsProvider, Keyring } from "@polkadot/api"; +import fs from 'node:fs'; + +const run = async () => { + try { + console.log("Parsing Args ..."); + // 0 & 1 are command context + const endpoint = process.argv[2]; + const seed = process.argv[3]; + const id = process.argv[4]; + const header = process.argv[5]; + + // Read wasmHex from stdin synchronously + // 0 is the file descriptor for stdin + const wasmHex = fs.readFileSync(0, 'utf-8').trim(); + + const wsProvider = new WsProvider(endpoint); + + const api = await ApiPromise.create({ + provider: wsProvider, + }); + + const keyring = new Keyring({ type: "sr25519" }); + const alice = keyring.addFromUri(seed); + + let paraGenesisArgs = { + genesis_head: header, + validation_code: wasmHex, + parachain: true, + }; + + let genesis = api.createType("ParaGenesisArgs", paraGenesisArgs); + + const nonce = Number((await api.query.system.account(alice.address)).nonce); + + console.log(`--- Submitting extrinsic to register parachain ${id}. (nonce: ${nonce}) ---`); + const sudoCall = await api.tx.sudo + .sudo(api.tx.paraSudoWrapper.sudoScheduleParaInitialize(id, genesis)) + .signAndSend(alice, { nonce: nonce, era: 0 }, (result) => { + console.log(`Current status is ${result.status}`); + if (result.status.isInBlock) { + console.log(`Transaction included at blockHash ${result.status.asInBlock}`); + console.log("Waiting for finalization..."); + } else if (result.status.isFinalized) { + console.log(`Transaction finalized at blockHash ${result.status.asFinalized}`); + sudoCall(); + process.exit(); + } else if (result.isError) { + console.log(`Transaction Error`); + process.exit(); + } + }); + } catch (error) { + console.log("error:", error); + } +}; + +run(); diff --git a/scripts/js/onboard/package-lock.json b/scripts/js/onboard/package-lock.json new file mode 100644 index 0000000000..185fb27ad8 --- /dev/null +++ b/scripts/js/onboard/package-lock.json @@ -0,0 +1,860 @@ +{ + "name": "onboard", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "onboard", + "version": "1.0.0", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/api": "^13.2.1", + "@polkadot/util": "^13.1.1", + "@polkadot/util-crypto": "^13.1.1" + } + }, + "node_modules/@noble/curves": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.6.0.tgz", + "integrity": "sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==", + "dependencies": { + "@noble/hashes": "1.5.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.5.0.tgz", + "integrity": "sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@polkadot-api/json-rpc-provider": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider/-/json-rpc-provider-0.0.1.tgz", + "integrity": "sha512-/SMC/l7foRjpykLTUTacIH05H3mr9ip8b5xxfwXlVezXrNVLp3Cv0GX6uItkKd+ZjzVPf3PFrDF2B2/HLSNESA==", + "optional": true + }, + "node_modules/@polkadot-api/json-rpc-provider-proxy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider-proxy/-/json-rpc-provider-proxy-0.1.0.tgz", + "integrity": "sha512-8GSFE5+EF73MCuLQm8tjrbCqlgclcHBSRaswvXziJ0ZW7iw3UEMsKkkKvELayWyBuOPa2T5i1nj6gFOeIsqvrg==", + "optional": true + }, + "node_modules/@polkadot-api/metadata-builders": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@polkadot-api/metadata-builders/-/metadata-builders-0.3.2.tgz", + "integrity": "sha512-TKpfoT6vTb+513KDzMBTfCb/ORdgRnsS3TDFpOhAhZ08ikvK+hjHMt5plPiAX/OWkm1Wc9I3+K6W0hX5Ab7MVg==", + "optional": true, + "dependencies": { + "@polkadot-api/substrate-bindings": "0.6.0", + "@polkadot-api/utils": "0.1.0" + } + }, + "node_modules/@polkadot-api/observable-client": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@polkadot-api/observable-client/-/observable-client-0.3.2.tgz", + "integrity": "sha512-HGgqWgEutVyOBXoGOPp4+IAq6CNdK/3MfQJmhCJb8YaJiaK4W6aRGrdQuQSTPHfERHCARt9BrOmEvTXAT257Ug==", + "optional": true, + "dependencies": { + "@polkadot-api/metadata-builders": "0.3.2", + "@polkadot-api/substrate-bindings": "0.6.0", + "@polkadot-api/utils": "0.1.0" + }, + "peerDependencies": { + "@polkadot-api/substrate-client": "0.1.4", + "rxjs": ">=7.8.0" + } + }, + "node_modules/@polkadot-api/substrate-bindings": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-bindings/-/substrate-bindings-0.6.0.tgz", + "integrity": "sha512-lGuhE74NA1/PqdN7fKFdE5C1gNYX357j1tWzdlPXI0kQ7h3kN0zfxNOpPUN7dIrPcOFZ6C0tRRVrBylXkI6xPw==", + "optional": true, + "dependencies": { + "@noble/hashes": "^1.3.1", + "@polkadot-api/utils": "0.1.0", + "@scure/base": "^1.1.1", + "scale-ts": "^1.6.0" + } + }, + "node_modules/@polkadot-api/substrate-client": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-client/-/substrate-client-0.1.4.tgz", + "integrity": "sha512-MljrPobN0ZWTpn++da9vOvt+Ex+NlqTlr/XT7zi9sqPtDJiQcYl+d29hFAgpaeTqbeQKZwz3WDE9xcEfLE8c5A==", + "optional": true, + "dependencies": { + "@polkadot-api/json-rpc-provider": "0.0.1", + "@polkadot-api/utils": "0.1.0" + } + }, + "node_modules/@polkadot-api/utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/utils/-/utils-0.1.0.tgz", + "integrity": "sha512-MXzWZeuGxKizPx2Xf/47wx9sr/uxKw39bVJUptTJdsaQn/TGq+z310mHzf1RCGvC1diHM8f593KrnDgc9oNbJA==", + "optional": true + }, + "node_modules/@polkadot/api": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-13.2.1.tgz", + "integrity": "sha512-QvgKD3/q6KIU3ZuNYFJUNc6B8bGBoqeMF+iaPxJn3Twhh4iVD5XIymD5fVszSqiL1uPXMhzcWecjwE8rDidBoQ==", + "dependencies": { + "@polkadot/api-augment": "13.2.1", + "@polkadot/api-base": "13.2.1", + "@polkadot/api-derive": "13.2.1", + "@polkadot/keyring": "^13.1.1", + "@polkadot/rpc-augment": "13.2.1", + "@polkadot/rpc-core": "13.2.1", + "@polkadot/rpc-provider": "13.2.1", + "@polkadot/types": "13.2.1", + "@polkadot/types-augment": "13.2.1", + "@polkadot/types-codec": "13.2.1", + "@polkadot/types-create": "13.2.1", + "@polkadot/types-known": "13.2.1", + "@polkadot/util": "^13.1.1", + "@polkadot/util-crypto": "^13.1.1", + "eventemitter3": "^5.0.1", + "rxjs": "^7.8.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/api-augment": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-13.2.1.tgz", + "integrity": "sha512-NTkI+/Hm48eWc/4Ojh/5elxnjnow5ptXK97IZdkWAe7mWi9hJR05Uq5lGt/T/57E9LSRWEuYje8cIDS3jbbAAw==", + "dependencies": { + "@polkadot/api-base": "13.2.1", + "@polkadot/rpc-augment": "13.2.1", + "@polkadot/types": "13.2.1", + "@polkadot/types-augment": "13.2.1", + "@polkadot/types-codec": "13.2.1", + "@polkadot/util": "^13.1.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/api-base": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-13.2.1.tgz", + "integrity": "sha512-00twdIjTjzdYNdU19i2YKLoWBmf2Yr6b3qrvqIVScHipUkKMbfFBgoPRB5FtcviBbEvLurgfyzHklwnrbWo8GQ==", + "dependencies": { + "@polkadot/rpc-core": "13.2.1", + "@polkadot/types": "13.2.1", + "@polkadot/util": "^13.1.1", + "rxjs": "^7.8.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/api-derive": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-13.2.1.tgz", + "integrity": "sha512-npxvS0kYcSFqmYv2G8QKWAJwFhIv/MBuGU0bV7cGP9K1A3j2Do3yYjvN1dTtY20jBavWNwmWFdXBV6/TRRsgmg==", + "dependencies": { + "@polkadot/api": "13.2.1", + "@polkadot/api-augment": "13.2.1", + "@polkadot/api-base": "13.2.1", + "@polkadot/rpc-core": "13.2.1", + "@polkadot/types": "13.2.1", + "@polkadot/types-codec": "13.2.1", + "@polkadot/util": "^13.1.1", + "@polkadot/util-crypto": "^13.1.1", + "rxjs": "^7.8.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/keyring": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-13.1.1.tgz", + "integrity": "sha512-Wm+9gn946GIPjGzvueObLGBBS9s541HE6mvKdWGEmPFMzH93ESN931RZlOd67my5MWryiSP05h5SHTp7bSaQTA==", + "dependencies": { + "@polkadot/util": "13.1.1", + "@polkadot/util-crypto": "13.1.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "13.1.1", + "@polkadot/util-crypto": "13.1.1" + } + }, + "node_modules/@polkadot/networks": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-13.1.1.tgz", + "integrity": "sha512-eEQ4+Mfl1xFtApeU5PdXZ2XBhxNSvUz9yW+YQVGUCkXRjWFbqNRsTOYWGd9uFbiAOXiiiXbtqfZpxSDzIm4XOg==", + "dependencies": { + "@polkadot/util": "13.1.1", + "@substrate/ss58-registry": "^1.50.0", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/rpc-augment": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-13.2.1.tgz", + "integrity": "sha512-HkndaAJPR1fi2xrzvP3q4g48WUCb26btGTeg1AKG9FGx9P2dgtpaPRmbMitmgVSzzRurrkxf3Meip8nC7BwDeg==", + "dependencies": { + "@polkadot/rpc-core": "13.2.1", + "@polkadot/types": "13.2.1", + "@polkadot/types-codec": "13.2.1", + "@polkadot/util": "^13.1.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/rpc-core": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-13.2.1.tgz", + "integrity": "sha512-hy0GksUlb/TfQ38m3ysIWj3qD+rIsyCdxx8Ug5rIx1u0odv86NZ7nTqtH066Ct2riVaPBgBkObFnlpDWTJ6auA==", + "dependencies": { + "@polkadot/rpc-augment": "13.2.1", + "@polkadot/rpc-provider": "13.2.1", + "@polkadot/types": "13.2.1", + "@polkadot/util": "^13.1.1", + "rxjs": "^7.8.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/rpc-provider": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-13.2.1.tgz", + "integrity": "sha512-bbMVYHTNFUa89aY3UQ1hFYD+dP+v+0vhjsnHYYlv37rSUTqOGqW91rkHd63xYCpLAimFt7KRw8xR+SMSYiuDjw==", + "dependencies": { + "@polkadot/keyring": "^13.1.1", + "@polkadot/types": "13.2.1", + "@polkadot/types-support": "13.2.1", + "@polkadot/util": "^13.1.1", + "@polkadot/util-crypto": "^13.1.1", + "@polkadot/x-fetch": "^13.1.1", + "@polkadot/x-global": "^13.1.1", + "@polkadot/x-ws": "^13.1.1", + "eventemitter3": "^5.0.1", + "mock-socket": "^9.3.1", + "nock": "^13.5.4", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@substrate/connect": "0.8.11" + } + }, + "node_modules/@polkadot/types": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-13.2.1.tgz", + "integrity": "sha512-5yQ0mHMNvwgXeHQ1RZOuHaeak3utAdcBqCpHoagnYrAnGHqtO7kg7YLtT4LkFw2nwL85axu8tOQMv6/3kpFy9w==", + "dependencies": { + "@polkadot/keyring": "^13.1.1", + "@polkadot/types-augment": "13.2.1", + "@polkadot/types-codec": "13.2.1", + "@polkadot/types-create": "13.2.1", + "@polkadot/util": "^13.1.1", + "@polkadot/util-crypto": "^13.1.1", + "rxjs": "^7.8.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-augment": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-13.2.1.tgz", + "integrity": "sha512-FpV7/2kIJmmswRmwUbp41lixdNX15olueUjHnSweFk0xEn2Ur43oC0Y3eU3Ab7Y5gPJpceMCfwYz+PjCUGedDA==", + "dependencies": { + "@polkadot/types": "13.2.1", + "@polkadot/types-codec": "13.2.1", + "@polkadot/util": "^13.1.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-codec": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-13.2.1.tgz", + "integrity": "sha512-tFAzzS8sMYItoD5a91sFMD+rskWyv4WjSmUZaj0Y4OfLtDAiQvgO0KncdGJIB6D+zZ/T7khpgsv/CZbN3YnezA==", + "dependencies": { + "@polkadot/util": "^13.1.1", + "@polkadot/x-bigint": "^13.1.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-create": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-13.2.1.tgz", + "integrity": "sha512-O/WKdsrNuMaZLf+XRCdum2xJYs5OKC6N3EMPF5Uhg10b80Y/hQCbzA/iWd3/aMNDLUA5XWhixwzJdrZWIMVIzg==", + "dependencies": { + "@polkadot/types-codec": "13.2.1", + "@polkadot/util": "^13.1.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-known": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-13.2.1.tgz", + "integrity": "sha512-uz3c4/IvspLpgN8q15A+QH8KWFauzcrV3RfLFlMP2BkkF5qpOwNeP7c4U8j0CZGQySqBsJRCGWmgBXrXg669KA==", + "dependencies": { + "@polkadot/networks": "^13.1.1", + "@polkadot/types": "13.2.1", + "@polkadot/types-codec": "13.2.1", + "@polkadot/types-create": "13.2.1", + "@polkadot/util": "^13.1.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-support": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-13.2.1.tgz", + "integrity": "sha512-jSbbUTXU+yZJQPRAWmxaDoe4NRO6SjpZPzBIbpuiadx1slON8XB80fVYIGBXuM2xRVrNrB6fCjyCTG7Razj6Hg==", + "dependencies": { + "@polkadot/util": "^13.1.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/util": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-13.1.1.tgz", + "integrity": "sha512-M4iQ5Um8tFdDmD7a96nPzfrEt+kxyWOqQDPqXyaax4QBnq/WCbq0jo8IO61uz55mdMQnGZvq8jd8uge4V6JzzQ==", + "dependencies": { + "@polkadot/x-bigint": "13.1.1", + "@polkadot/x-global": "13.1.1", + "@polkadot/x-textdecoder": "13.1.1", + "@polkadot/x-textencoder": "13.1.1", + "@types/bn.js": "^5.1.5", + "bn.js": "^5.2.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/util-crypto": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-13.1.1.tgz", + "integrity": "sha512-FG68rrLPdfLcscEyH10vnGkakM4O2lqr71S3GDhgc9WXaS8y9jisLgMPg8jbMHiQBJ3iKYkmtPKiLBowRslj2w==", + "dependencies": { + "@noble/curves": "^1.3.0", + "@noble/hashes": "^1.3.3", + "@polkadot/networks": "13.1.1", + "@polkadot/util": "13.1.1", + "@polkadot/wasm-crypto": "^7.3.2", + "@polkadot/wasm-util": "^7.3.2", + "@polkadot/x-bigint": "13.1.1", + "@polkadot/x-randomvalues": "13.1.1", + "@scure/base": "^1.1.7", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "13.1.1" + } + }, + "node_modules/@polkadot/wasm-bridge": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-7.3.2.tgz", + "integrity": "sha512-AJEXChcf/nKXd5Q/YLEV5dXQMle3UNT7jcXYmIffZAo/KI394a+/24PaISyQjoNC0fkzS1Q8T5pnGGHmXiVz2g==", + "dependencies": { + "@polkadot/wasm-util": "7.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/wasm-crypto": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-7.3.2.tgz", + "integrity": "sha512-+neIDLSJ6jjVXsjyZ5oLSv16oIpwp+PxFqTUaZdZDoA2EyFRQB8pP7+qLsMNk+WJuhuJ4qXil/7XiOnZYZ+wxw==", + "dependencies": { + "@polkadot/wasm-bridge": "7.3.2", + "@polkadot/wasm-crypto-asmjs": "7.3.2", + "@polkadot/wasm-crypto-init": "7.3.2", + "@polkadot/wasm-crypto-wasm": "7.3.2", + "@polkadot/wasm-util": "7.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-asmjs": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.3.2.tgz", + "integrity": "sha512-QP5eiUqUFur/2UoF2KKKYJcesc71fXhQFLT3D4ZjG28Mfk2ZPI0QNRUfpcxVQmIUpV5USHg4geCBNuCYsMm20Q==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-init": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.3.2.tgz", + "integrity": "sha512-FPq73zGmvZtnuJaFV44brze3Lkrki3b4PebxCy9Fplw8nTmisKo9Xxtfew08r0njyYh+uiJRAxPCXadkC9sc8g==", + "dependencies": { + "@polkadot/wasm-bridge": "7.3.2", + "@polkadot/wasm-crypto-asmjs": "7.3.2", + "@polkadot/wasm-crypto-wasm": "7.3.2", + "@polkadot/wasm-util": "7.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-wasm": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.3.2.tgz", + "integrity": "sha512-15wd0EMv9IXs5Abp1ZKpKKAVyZPhATIAHfKsyoWCEFDLSOA0/K0QGOxzrAlsrdUkiKZOq7uzSIgIDgW8okx2Mw==", + "dependencies": { + "@polkadot/wasm-util": "7.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/wasm-util": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-7.3.2.tgz", + "integrity": "sha512-bmD+Dxo1lTZyZNxbyPE380wd82QsX+43mgCm40boyKrRppXEyQmWT98v/Poc7chLuskYb6X8IQ6lvvK2bGR4Tg==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/x-bigint": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-13.1.1.tgz", + "integrity": "sha512-Cq4Y6fd9UWtRBZz8RX2tWEBL1IFwUtY6cL8p6HC9yhZtUR6OPjKZe6RIZQa9gSOoIuqZWd6PmtvSNGVH32yfkQ==", + "dependencies": { + "@polkadot/x-global": "13.1.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-fetch": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-13.1.1.tgz", + "integrity": "sha512-qA6mIUUebJbS+oWzq/EagZflmaoa9b25WvsxSFn7mCvzKngXzr+GYCY4XiDwKY/S+/pr/kvSCKZ1ia8BDqPBYQ==", + "dependencies": { + "@polkadot/x-global": "13.1.1", + "node-fetch": "^3.3.2", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-global": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-13.1.1.tgz", + "integrity": "sha512-DViIMmmEs29Qlsp058VTg2Mn7e3/CpGazNnKJrsBa0o1Ptxl13/4Z0fjqCpNi2GB+kaOsnREzxUORrHcU+PqcQ==", + "dependencies": { + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-randomvalues": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-13.1.1.tgz", + "integrity": "sha512-cXj4omwbgzQQSiBtV1ZBw+XhJUU3iz/DS6ghUnGllSZEK+fGqiyaNgeFQzDY0tKjm6kYaDpvtOHR3mHsbzDuTg==", + "dependencies": { + "@polkadot/x-global": "13.1.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "13.1.1", + "@polkadot/wasm-util": "*" + } + }, + "node_modules/@polkadot/x-textdecoder": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-13.1.1.tgz", + "integrity": "sha512-LpZ9KYc6HdBH+i86bCmun4g4GWMiWN/1Pzs0hNdanlQMfqp3UGzl1Dqp0nozMvjWAlvyG7ip235VgNMd8HEbqg==", + "dependencies": { + "@polkadot/x-global": "13.1.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-textencoder": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-13.1.1.tgz", + "integrity": "sha512-w1mT15B9ptN5CJNgN/A0CmBqD5y9OePjBdU6gmAd8KRhwXCF0MTBKcEZk1dHhXiXtX+28ULJWLrfefC5gxy69Q==", + "dependencies": { + "@polkadot/x-global": "13.1.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-ws": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-13.1.1.tgz", + "integrity": "sha512-E/xFmJTiFzu+IK5M3/8W/9fnvNJFelcnunPv/IgO6UST94SDaTsN/Gbeb6SqPb6CsrTHRl3WD+AZ3ErGGwQfEA==", + "dependencies": { + "@polkadot/x-global": "13.1.1", + "tslib": "^2.7.0", + "ws": "^8.16.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@substrate/connect": { + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.8.11.tgz", + "integrity": "sha512-ofLs1PAO9AtDdPbdyTYj217Pe+lBfTLltdHDs3ds8no0BseoLeAGxpz1mHfi7zB4IxI3YyAiLjH6U8cw4pj4Nw==", + "deprecated": "versions below 1.x are no longer maintained", + "optional": true, + "dependencies": { + "@substrate/connect-extension-protocol": "^2.0.0", + "@substrate/connect-known-chains": "^1.1.5", + "@substrate/light-client-extension-helpers": "^1.0.0", + "smoldot": "2.0.26" + } + }, + "node_modules/@substrate/connect-extension-protocol": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@substrate/connect-extension-protocol/-/connect-extension-protocol-2.1.0.tgz", + "integrity": "sha512-Wz5Cbn6S6P4vWfHyrsnPW7g15IAViMaXCk+jYkq4nNEMmzPtTKIEbtxrdDMBKrouOFtYKKp0znx5mh9KTCNqlA==", + "optional": true + }, + "node_modules/@substrate/connect-known-chains": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@substrate/connect-known-chains/-/connect-known-chains-1.4.1.tgz", + "integrity": "sha512-WlFKGEE3naIa7iTyy7hJ0RV0dyGpP7Zic1Z8sXr4bJmSEzZoHcfLRbM1D3T+zFAaitffVCu6k55Vj+CFzMPw1Q==", + "optional": true + }, + "node_modules/@substrate/light-client-extension-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@substrate/light-client-extension-helpers/-/light-client-extension-helpers-1.0.0.tgz", + "integrity": "sha512-TdKlni1mBBZptOaeVrKnusMg/UBpWUORNDv5fdCaJklP4RJiFOzBCrzC+CyVI5kQzsXBisZ+2pXm+rIjS38kHg==", + "optional": true, + "dependencies": { + "@polkadot-api/json-rpc-provider": "^0.0.1", + "@polkadot-api/json-rpc-provider-proxy": "^0.1.0", + "@polkadot-api/observable-client": "^0.3.0", + "@polkadot-api/substrate-client": "^0.1.2", + "@substrate/connect-extension-protocol": "^2.0.0", + "@substrate/connect-known-chains": "^1.1.5", + "rxjs": "^7.8.1" + }, + "peerDependencies": { + "smoldot": "2.x" + } + }, + "node_modules/@substrate/ss58-registry": { + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.50.0.tgz", + "integrity": "sha512-mkmlMlcC+MSd9rA+PN8ljGAm5fVZskvVwkXIsbx4NFwaT8kt38r7e9cyDWscG3z2Zn40POviZvEMrJSk+r2SgQ==" + }, + "node_modules/@types/bn.js": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz", + "integrity": "sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "22.6.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.6.1.tgz", + "integrity": "sha512-V48tCfcKb/e6cVUigLAaJDAILdMP0fUW6BidkPK4GpGjXcfbnoHasCZDwz3N3yVt5we2RHm4XTQCpv0KJz9zqw==", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "node_modules/mock-socket": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.3.1.tgz", + "integrity": "sha512-qxBgB7Qa2sEQgHFjj0dSigq7fX4k6Saisd5Nelwp2q8mlbAFh5dHV9JTTlF8viYJLSSWgMCZFUom8PJcMNBoJw==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/nock": { + "version": "13.5.5", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.5.tgz", + "integrity": "sha512-XKYnqUrCwXC8DGG1xX4YH5yNIrlh9c065uaMZZHUoeUUINTOyt+x/G+ezYk0Ft6ExSREVIs+qBJDK503viTfFA==", + "dependencies": { + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "propagate": "^2.0.0" + }, + "engines": { + "node": ">= 10.13" + } + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/propagate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/scale-ts": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/scale-ts/-/scale-ts-1.6.0.tgz", + "integrity": "sha512-Ja5VCjNZR8TGKhUumy9clVVxcDpM+YFjAnkMuwQy68Hixio3VRRvWdE3g8T/yC+HXA0ZDQl2TGyUmtmbcVl40Q==", + "optional": true + }, + "node_modules/smoldot": { + "version": "2.0.26", + "resolved": "https://registry.npmjs.org/smoldot/-/smoldot-2.0.26.tgz", + "integrity": "sha512-F+qYmH4z2s2FK+CxGj8moYcd1ekSIKH8ywkdqlOz88Dat35iB1DIYL11aILN46YSGMzQW/lbJNS307zBSDN5Ig==", + "optional": true, + "dependencies": { + "ws": "^8.8.1" + } + }, + "node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + } + } +} diff --git a/scripts/js/onboard/package.json b/scripts/js/onboard/package.json new file mode 100644 index 0000000000..5f42aba710 --- /dev/null +++ b/scripts/js/onboard/package.json @@ -0,0 +1,22 @@ +{ + "name": "onboard", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "onboard": "node onboard.mjs", + "register": "node register.mjs", + "upgrade-dev": "node devUpgrade.mjs", + "upgrade-auth": "node authUpgrade.mjs", + "upgrade-enact": "node enactUpgrade.mjs", + "cleanup": "node offboard.mjs" + }, + "keywords": [], + "author": "", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/api": "^13.2.1", + "@polkadot/util": "^13.1.1", + "@polkadot/util-crypto": "^13.1.1" + } +} diff --git a/scripts/js/onboard/register.mjs b/scripts/js/onboard/register.mjs new file mode 100644 index 0000000000..0663cef4a1 --- /dev/null +++ b/scripts/js/onboard/register.mjs @@ -0,0 +1,59 @@ +import { ApiPromise, WsProvider, Keyring } from "@polkadot/api"; + +const run = async () => { + try { + console.log("Parsing Args ..."); + + const endpoint = process.argv[2]; + const seed = process.argv[3]; + + const wsProvider = new WsProvider(endpoint); + + const api = await ApiPromise.create({ + provider: wsProvider, + }); + + const keyring = new Keyring({ type: "sr25519" }); + + const nextParaId = (await api.query.registrar.nextFreeParaId()).toString(); + + console.log(" ℹ - Next Available Parachain ID: ", nextParaId); + + const alice = keyring.addFromUri(seed); + + await reservePara(alice, api, nextParaId); + } catch (error) { + console.log("error:", error); + } +}; + +const reservePara = async (account, api, paraID) => { + const nonce = Number((await api.query.system.account(account.address)).nonce); + // Reserve Parachain ID + console.log(`🤖 - Reserving Parachain ID`); + let signAndSend = await api.tx.registrar.reserve().signAndSend(account, { nonce: nonce }, async ({ status }) => { + if (status.isFinalized) { + console.log(`✔️ - Finalized at block hash #${status.asFinalized.toString()} \n`); + //await registerPara(account, api, paraID); + signAndSend(); + process.exit(); + } + }); +}; + +const registerPara = async (account, api, paraID) => { + const nonce = Number((await api.query.system.account(account.address)).nonce); + // Register Parachain + console.log(`🤖 - Registering Parachain`); + let signAndSend = await api.tx.registrar + .register(paraID, "0x11", "0x11") + .signAndSend(account, { nonce: nonce }, async ({ status }) => { + if (status.isFinalized) { + console.log(`✔️ - Finalized at block hash #${status.asFinalized.toString()} \n`); + signAndSend(); + process.exit(); + } + }); +}; + +run(); diff --git a/scripts/kill_freq.sh b/scripts/kill_freq.sh new file mode 100755 index 0000000000..b94af2dac6 --- /dev/null +++ b/scripts/kill_freq.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +set -e + +PID=$(lsof -i tcp:9944 | grep frequency | xargs | awk '{print $2}') + +if [ -n "${PID}" ] +then + kill -9 ${PID} + echo "Frequency has been killed. 💀" +fi diff --git a/scripts/logs.sh b/scripts/logs.sh new file mode 100755 index 0000000000..30c7a3f0f8 --- /dev/null +++ b/scripts/logs.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +set -e + +node=$1 + +if [[ "$node" == "alice" || "$node" == "bob" ]]; then + docker logs -f $node +else + echo -e "\033[31m Usage: logs.sh alice/bob" +fi + + diff --git a/scripts/prune_all.sh b/scripts/prune_all.sh new file mode 100755 index 0000000000..62eb612b51 --- /dev/null +++ b/scripts/prune_all.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Print each command and exit on error +set -e + +echo "[INFO] Running system prune..." +docker system prune -a --volumes +echo "[INFO] Removing unused containers..." +docker container prune -f +echo "[INFO] Removing unused images..." +docker image prune -a -f + +echo "[INFO] After cleanup:" +docker container ls +docker image ls diff --git a/scripts/run_benchmarks.sh b/scripts/run_benchmarks.sh new file mode 100755 index 0000000000..0a7ebcd6f6 --- /dev/null +++ b/scripts/run_benchmarks.sh @@ -0,0 +1,271 @@ +#!/usr/bin/env bash + +export RUST_LOG=info +THIS_DIR=$( dirname -- "$0"; ) +PROJECT="${THIS_DIR}/.." +PROFILE=release +PROFILE_DIR=${PROFILE} + +ALL_EXTERNAL_PALLETS=( \ + frame_system_extensions \ + cumulus_pallet_weight_reclaim \ + pallet_balances \ + pallet_collator_selection \ + pallet_collective \ + pallet_democracy \ + pallet_multisig \ + pallet_preimage \ + pallet_scheduler \ + pallet_session \ + pallet_timestamp \ + pallet_transaction_payment \ + pallet_utility \ + pallet_proxy \ +) +ALL_CUSTOM_PALLETS=( \ + messages \ + msa \ + schemas \ + stateful-storage \ + handles \ + time-release \ + capacity \ + frequency-tx-payment \ + passkey \ + treasury \ +) + +declare -a CUSTOM_PALLETS +declare -a EXTERNAL_PALLETS +skip_build=false +skip_tests=false +build_only=false +OVERHEAD= +VERBOSE= + +function exit_err() { echo "❌ 💔" ; exit 1; } + +function usage() { + cat << EOI + Usage: $( basename ${1} ) [-d

] [-p ] [-v] [-b] + $( basename ${1} ) [-d ] [-s] [-t] [-v] [-b] [ [... ]] + + -d Sets top-level repository directory to . + Default: parent directory of script + + -h Display this message and exit. + + -s Skip the build step; use existing binary for the current profile + + -n Skip the test step + + -b Build only; exit after building the binary + + -t Use '--profile=' in the build step & for locating the + resulting binary. Valid targets are: dev,release,bench-dev + + (NOTE: using the 'bench-dev' profile will generate a warning in the WASM build. + this can safely be ignored. 'bench-dev' is a clone of 'release' and is useful + for running benchmarks locally while not overwriting any existing 'release' target.) + + -v Verbose mode. All shell commands are echoed. + + To run for multiple specific pallets. If no pallets + specified, will run all benchmarks. + +EOI +} + +function is_external_pallet() { + for p in "${ALL_EXTERNAL_PALLETS[@]}" + do + if [ "${1}" == "${p}" ] + then + return 0 + fi + done + + return 1 +} + +function is_custom_pallet() { + for p in "${ALL_CUSTOM_PALLETS[@]}" + do + if [ "${1}" == "${p}" ] + then + return 0 + fi + done + + return 1 +} + +while getopts 'd:hp:snt:vb' flag; do + case "${flag}" in + d) + # Set project directory + PROJECT="${OPTARG}" + ;; + h) + usage ${0} + exit 0 + ;; + s) + # Skip build. + skip_build=true + ;; + n) + # Skip tests. + skip_tests=true + ;; + b) + # Build only + build_only=true + ;; + t) + # Set target profile + case ${OPTARG} in + release|dev|bench-dev) + PROFILE="${OPTARG}" + PROFILE_DIR=${PROFILE} + # For historical reasons, cargo puts dev builds in the "debug" directory + if [ ${PROFILE} = "dev" ] + then + PROFILE_DIR=debug + fi + ;; + *) echo "Unrecognized target profile: ${OPTARG}" + usage ${0} + exit_err + ;; + esac + ;; + v) + # Echo all executed commands. + VERBOSE=1 + set -x + ;; + ?) + # Unrecognized option. getopts will log the error + usage ${0} + exit_err + ;; + *) + # Exit early. + echo "Bad options. Check Script." + usage ${0} + exit_err + ;; + esac +done +shift $(( ${OPTIND} - 1 )) + +for pallet in "${@}" +do + if is_external_pallet ${pallet} + then + EXTERNAL_PALLETS=( "${EXTERNAL_PALLETS[@]}" "${pallet}" ) + elif is_custom_pallet ${pallet} + then + CUSTOM_PALLETS=( "${CUSTOM_PALLETS[@]}" "${pallet}" ) + elif [[ "${pallet}" == "overhead" ]] + then + OVERHEAD=overhead + else + echo "Unrecognized pallet: ${pallet}" + exit_err + fi +done + +if [[ ${#EXTERNAL_PALLETS[@]} == 0 && ${#CUSTOM_PALLETS[@]} == 0 && -z "${OVERHEAD}" ]] +then + EXTERNAL_PALLETS=( "${ALL_EXTERNAL_PALLETS[@]}" ) + CUSTOM_PALLETS=( ${ALL_CUSTOM_PALLETS[@]} ) + OVERHEAD=overhead +fi + +RUNTIME=${PROJECT}/target/${PROFILE_DIR}/frequency +BENCHMARK="${RUNTIME} benchmark " + +if [[ ${build_only} == false ]]; then + echo "Running benchmarks for the following pallets:\ + ${EXTERNAL_PALLETS[@]} \ + ${CUSTOM_PALLETS[@]} \ + ${OVERHEAD}" +fi + +function run_benchmark() { + echo "Running benchmarks for ${1}" + + TEMPLATE=${5} + if [[ ${1} == "frame_system_extensions" ]] + then + TEMPLATE=${PROJECT}/.maintain/frame-system-extensions-weight-template.hbs + fi + + set -x + set -e + ${BENCHMARK} pallet \ + --pallet=${1} \ + --extrinsic "*" \ + --heap-pages=4096 \ + --steps=${2} \ + --repeat=${3} \ + --output=${4} \ + --template=${TEMPLATE} \ + --additional-trie-layers=${6} \ + --runtime=${PROJECT}/target/${PROFILE_DIR}/wbuild/frequency-runtime/frequency_runtime.wasm \ + --genesis-builder=runtime + if [ -z "${VERBOSE}" ] + then + set +x + fi +} + +if [[ ${skip_build} == false ]] +then + CMD="cargo build --profile=${PROFILE} --features=runtime-benchmarks,frequency-lint-check --workspace" + echo ${CMD} + ${CMD} || exit_err + + if [[ ${build_only} == true ]]; then + echo "Build complete. Exiting as requested." + exit 0 + fi +fi + +for external_pallet in "${EXTERNAL_PALLETS[@]}"; do + output=${PROJECT}/runtime/common/src/weights + steps=50 + repeat=20 + template=${PROJECT}/.maintain/runtime-weight-template.hbs + additional_trie_layer=3 + run_benchmark ${external_pallet} ${steps} ${repeat} ${output} ${template} ${additional_trie_layer} || exit_err +done + +for pallet_name in "${CUSTOM_PALLETS[@]}"; do + steps=20 + repeat=10 + template=${PROJECT}/.maintain/frame-weight-template.hbs + output=${PROJECT}/pallets/${pallet_name/_/-}/src/weights.rs + additional_trie_layer=3 + if [ "$pallet_name" == "stateful-storage" ]; then + additional_trie_layer=6 + fi + run_benchmark pallet_${pallet_name} ${steps} ${repeat} ${output} ${template} ${additional_trie_layer} || exit_err +done + +if [[ -n "${OVERHEAD}" ]] +then + echo "Running extrinsic and block overhead benchmark" + echo " " + ${BENCHMARK} overhead --weight-path=runtime/common/src/weights --chain=dev --warmup=10 --repeat=100 --header="./HEADER-APACHE2" || exit_err +fi + +if [[ ${skip_tests} == false ]] +then + echo "Running tests..." + CMD="cargo test --profile=${PROFILE} --features=runtime-benchmarks,frequency-lint-check --workspace" + echo ${CMD} + ${CMD} || exit_err +fi diff --git a/scripts/run_collator.sh b/scripts/run_collator.sh new file mode 100755 index 0000000000..9f05d6aa8b --- /dev/null +++ b/scripts/run_collator.sh @@ -0,0 +1,75 @@ +#!/usr/bin/env bash + +# this script runs the frequency after fetching +# appropriate bootnode IDs + +set -e -o pipefail + +ctpc="${Frequency_BINARY_PATH:-./target/release/frequency}" + +if [ ! -x "$ctpc" ]; then + echo "FATAL: $ctpc does not exist or is not executable" + exit 1 +fi + +# name the variable with the incoming args so it isn't overwritten later by function calls +args=( "$@" ) + +alice="${HOST_ALICE:-127.0.0.1}" +bob="${HOST_BOB:-127.0.0.1}" +alice_rpc_port="${ALICE_RPC_PORT:-9946}" +bob_rpc_port="${BOB_RPC_PORT:-9947}" +chain="${RELAY_CHAIN_SPEC:-./resources/paseo-local.json}" + +node_parachain="${NODE_PARACHAIN:-127.0.0.1}" +node_parachain_rpc_port="${NODE_PARACHAIN_RPC_PORT:-9944}" + +get_bootnode () { + node="$1" + port="$2" + curl -sS \ + -H 'Content-Type: application/json' \ + --data '{"id":1,"jsonrpc":"2.0","method":"system_localListenAddresses"}' \ + "$node:$port" | jq -r 'first((.result[] | select(test("127\\.0\\.0\\.1"))), .result[0]) // empty' +} + +bootnode_para () { + node="$1" + rpc_port="$2" + bootnode=$(get_bootnode "$node" "$rpc_port") + >&2 echo "Parachain Bootnode: $bootnode" + if [ ! -z "$bootnode" ]; then + echo "$bootnode" + else + echo >&2 "failed to get id for $node" + fi +} + +bootnode () { + node="$1" + rpc_port="$2" + bootnode=$(get_bootnode "$node" "$rpc_port") + if [ -z "$bootnode" ]; then + echo >&2 "failed to get id for $node" + # curl -vsS \ + # -H 'Content-Type: application/json' \ + # --data '{"id":1,"jsonrpc":"2.0","method":"localListenAddresses"}' \ + # "$node:$rpc_port" + exit 1 + fi + >&2 echo "Bootnode: $bootnode" + echo "$bootnode" +} + +# Only add it if it's not empty +parachain_bootnode="$(bootnode_para "$node_parachain" "$node_parachain_rpc_port")" +if [ ! -z "$parachain_bootnode" ]; then + args+=( "--bootnodes=$parachain_bootnode" ) +else + echo "No parachain bootnode found. May not be needed..." +fi + +args+=( "--" "--chain=${chain}" "--bootnodes=$(bootnode "$alice" "$alice_rpc_port")" "--bootnodes=$(bootnode "$bob" "$bob_rpc_port")" ) + +set -x +"$ctpc" "${args[@]}" diff --git a/scripts/run_e2e_tests.sh b/scripts/run_e2e_tests.sh new file mode 100755 index 0000000000..bdf7ea3845 --- /dev/null +++ b/scripts/run_e2e_tests.sh @@ -0,0 +1,176 @@ +#!/usr/bin/env bash + +function get_frequency_pid () { + lsof -i tcp:9944 | grep frequency | xargs | awk '{print $2}' +} + +function cleanup () { + local signal="$1" + + case "$signal" in + TERM|INT) + # Catch TERM and INT signals and exit gracefully + echo "Caught signal ${signal}; exiting..." + exit + ;; + EXIT) + # kill_freq.sh is not used here because we do not know what directory + # the script is in when a signal is received. Therefore, we do not + # know how to navigate to the kill_freq.sh script with relative paths. + if [ -n "${PID}" ] + then + kill -9 ${PID} + echo "Frequency has been killed. 💀" + else + echo "Frequency was not started by this script." + fi + ;; + esac +} + +RUNDIR=$(dirname ${0}) +SKIP_JS_BUILD= +CHAIN="development" + +# A distinction is made between the local node and the the test chain +# because the local node will be built and generate the js api augment +# for the polkadot.js api even when testing against a live chain. +LOCAL_NODE_BLOCK_SEALING="instant" + +trap 'cleanup EXIT' EXIT +trap 'cleanup TERM' TERM +trap 'cleanup INT' INT + +while getopts "sc:" OPTNAME +do + case "${OPTNAME}" in + "s") + SKIP_JS_BUILD=1 + ;; + "c") + CHAIN=$OPTARG + ;; + esac +done +shift $((OPTIND-1)) + +case "${CHAIN}" in + "development") + PROVIDER_URL="ws://127.0.0.1:9944" + NPM_RUN_COMMAND="test" + CHAIN_ENVIRONMENT="dev" + + if [[ "$1" == "load" ]]; then + NPM_RUN_COMMAND="test:load" + LOCAL_NODE_BLOCK_SEALING="manual" + fi + ;; + "serial") + PROVIDER_URL="ws://127.0.0.1:9944" + NPM_RUN_COMMAND="test:serial" + CHAIN_ENVIRONMENT="dev" + ;; + "paseo_local") + PROVIDER_URL="ws://127.0.0.1:9944" + NPM_RUN_COMMAND="test:relay" + CHAIN_ENVIRONMENT="paseo-local" + ;; + "paseo_testnet") + PROVIDER_URL="wss://0.rpc.amplica.io" + NPM_RUN_COMMAND="test:relay" + CHAIN_ENVIRONMENT="paseo-testnet" + + read -p "Enter the seed phrase for the Frequency Paseo account funding source: " FUNDING_ACCOUNT_SEED_PHRASE + ;; +esac + +echo "The E2E test output will be logged on this console" + +echo "The Frequency node output will be logged to the file frequency.log." +echo "You can 'tail -f frequency.log' in another terminal to see both side-by-side." +echo "" +echo -e "Checking to see if Frequency is running..." + +if [ -n "$( get_frequency_pid )" ] +then + echo "Frequency is already running." +else + if [ "${CHAIN_ENVIRONMENT}" = "paseo-local" ] + then + echo "Frequency is not running." + echo "The intended use case of running E2E tests with a chain environment" + echo "of \"paseo-local\" is to run the tests against a locally running Frequency" + echo "chain with locally running Polkadot relay nodes." + exit 1 + fi + + echo "Building a no-relay Frequency executable..." + if ! make build-no-relay + then + echo "Error building Frequency executable; aborting." + exit 1 + fi + + echo "Starting a Frequency Node with block sealing ${LOCAL_NODE_BLOCK_SEALING}..." + case ${LOCAL_NODE_BLOCK_SEALING} in + "instant") ${RUNDIR}/init.sh start-frequency-instant >& frequency.log & + ;; + "manual") ${RUNDIR}/init.sh start-frequency-manual >& frequency.log & + ;; + esac + + declare -i timeout_secs=60 + declare -i i=0 + while (( !PID && i < timeout_secs )) + do + PID=$( get_frequency_pid ) + sleep 1 + (( i += 1 )) + done + + if [ -z "${PID}" ] + then + echo "Unable to find or start a Frequency node; aborting." + exit 1 + fi + echo "---------------------------------------------" + echo "Frequency running here:" + echo "PID: ${PID}" + echo "---------------------------------------------" +fi + +if [ "${SKIP_JS_BUILD}" = "1" ] +then + echo "Skipping js/api-augment and js/ethereum-utils build" +else + echo "Building js/api-augment..." + cd js/api-augment + npm i + npm run fetch:local + npm run --silent build + cd dist + echo "Packaging up into js/api-augment/dist/frequency-chain-api-augment-0.0.0.tgz" + npm pack --silent + cd ../../.. + + echo "Building js/ethereum-utils..." + cd js/ethereum-utils + npm i + npm run --silent build + cd dist + echo "Packaging up into js/ethereum-utils/dist/frequency-chain-ethereum-utils-0.0.0.tgz" + npm pack --silent + cd ../../.. +fi + + +cd e2e +echo "Installing js/api-augment/dist/frequency-chain-api-augment-0.0.0.tgz" +echo "Installing js/ethereum-utils/dist/frequency-chain-ethereum-utils-0.0.0.tgz" +npm i ../js/api-augment/dist/frequency-chain-api-augment-0.0.0.tgz ../js/ethereum-utils/dist/frequency-chain-ethereum-utils-0.0.0.tgz +npm install +echo "---------------------------------------------" +echo "Starting Tests..." +echo "---------------------------------------------" + +CHAIN_ENVIRONMENT=$CHAIN_ENVIRONMENT FUNDING_ACCOUNT_SEED_PHRASE=$FUNDING_ACCOUNT_SEED_PHRASE WS_PROVIDER_URL="$PROVIDER_URL" npm run $NPM_RUN_COMMAND diff --git a/scripts/runtime-dev-upgrade.sh b/scripts/runtime-dev-upgrade.sh new file mode 100755 index 0000000000..620083c4d3 --- /dev/null +++ b/scripts/runtime-dev-upgrade.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +set -x + +if [[ -z "$1" || -z $2 || -z $3 ]]; then + echo "usage: $0 'collator sudo secret' \$ws_provider \$wasm_location" + # fx: $0 'collator sudo secret' wss://dev.net.t3rn.io /tmp/wasm + exit 1 +fi + + +echo "🏭 installing subwasm..." +cargo install --locked --git https://github.com/chevdor/subwasm + +sudo_secret=$1 +ws_provider=$2 +wasm_location=$3 + +hash=$(subwasm info --json $wasm_location | jq -r .blake2_256) + +cd scripts/js/onboard + +npm i && npm run upgrade-dev $ws_provider $sudo_secret $wasm_location diff --git a/scripts/runtime-upgrade.sh b/scripts/runtime-upgrade.sh new file mode 100755 index 0000000000..492b86ba37 --- /dev/null +++ b/scripts/runtime-upgrade.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +set -x + +if [[ -z "$1" || -z $2 || -z $3 ]]; then + echo "usage: $0 'collator sudo secret' \$ws_provider \$wasm_location" + # fx: $0 'collator sudo secret' wss://dev.net.t3rn.io /tmp/wasm + exit 1 +fi + + +echo "🏭 installing subwasm..." +cargo install --locked --git https://github.com/chevdor/subwasm + +sudo_secret=$1 +ws_provider=$2 +wasm_location=$3 + +hash=$(subwasm info --json $wasm_location | jq -r .blake2_256) + +cd scripts/js/onboard + +npm i && npm run upgrade-auth $ws_provider $sudo_secret $hash diff --git a/scripts/update-js-dependencies.sh b/scripts/update-js-dependencies.sh new file mode 100755 index 0000000000..ed46d3fe8a --- /dev/null +++ b/scripts/update-js-dependencies.sh @@ -0,0 +1,49 @@ +#!/bin/sh + +echo "Updating js/api-augment" +cd js/api-augment +rm package-lock.json +npx npm-check-updates -u +npm i +npm run build +cd dist +npm pack +cd ../../.. + +echo "Updating js/schemas" +cd js/schemas +rm package-lock.json +npx npm-check-updates -u +npm i +cd ../.. + +echo "Updating js/ethereum-utils" +cd js/ethereum-utils +rm package-lock.json +npx npm-check-updates -u +npm i +npm run build +cd dist +npm pack +cd ../../.. + +echo "Updating e2e" +cd e2e +rm package-lock.json +npx npm-check-updates -u +npm i ../js/api-augment/dist/frequency-chain-api-augment-0.0.0.tgz +cd .. + +echo "Updating tools/state-copy" +cd tools/state-copy +rm package-lock.json +npx npm-check-updates -u +npm i +cd ../.. + +echo "Updating tools/genesis-data" +cd tools/genesis-data +rm package-lock.json +npx npm-check-updates -u +npm i +cd ../.. diff --git a/tools/ci/release-notes/build-release-notes.sh b/tools/ci/release-notes/build-release-notes.sh new file mode 100755 index 0000000000..2b9472762d --- /dev/null +++ b/tools/ci/release-notes/build-release-notes.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# set -ex + +polkadot_version=$1 +rust_toolchain=$2 +changelog=$3 +runtime_mainnet_info=$4 +runtime_paseo_info=$5 +is_full_release=$6 +metadata_change_summary_file=$7 + +# Extract the contents of the Summary section from the metadata change summary file, but remove trailing whitespace/blank lines +metadata_change_summary=`sed -n '/SUMMARY/,/^------/p' "$metadata_change_summary_file" | sed '1d;$d' | sed -e :a -e '/^[[:space:]]*$/{$d;N;ba' -e '}'` + +CHANGELOG="$changelog" \ + RUST_TOOLCHAIN="$rust_toolchain" \ + POLKADOT_VERSION="$polkadot_version" \ + RUNTIME_MAINNET_INFO="$runtime_mainnet_info" \ + RUNTIME_PASEO_INFO="$runtime_paseo_info" \ + IS_FULL_RELEASE="$is_full_release" \ + METADATA_CHANGE_SUMMARY="$metadata_change_summary" \ + tera -a --env --env-key env --env-only --template release-notes.md.tera diff --git a/tools/ci/release-notes/release-notes.md.tera b/tools/ci/release-notes/release-notes.md.tera new file mode 100644 index 0000000000..7f9ab4be20 --- /dev/null +++ b/tools/ci/release-notes/release-notes.md.tera @@ -0,0 +1,56 @@ +{% if env.IS_FULL_RELEASE == 'true' %} +This release contains the changes from `{{env.PREVIOUS_RELEASE_TAG}}` to `{{env.NEW_RELEASE_TAG}}`. +{% else %} +This release candidate contains the changes from `{{env.PREVIOUS_RELEASE_TAG}}` to `{{env.NEW_RELEASE_TAG}}`. +{% endif %} + +Full changelog: https://github.com/frequency-chain/frequency/compare/{{env.PREVIOUS_RELEASE_TAG}}...{{env.NEW_RELEASE_TAG}} + +## Versions +- Rust Toolchain: `{{env.RUST_TOOLCHAIN}}` +- Polkadot-SDK: `{{env.POLKADOT_VERSION}}` + +{% if env.IS_FULL_RELEASE == 'true' %} +## Deployed + +- Frequency-Paseo Testnet: [TBD]() +- Frequency Mainnet: [TBD]() + +{% endif %} +## What's Changed + +{% set changelog = env.CHANGELOG | split(pat='|n|') -%} +{% for line in changelog -%} + {{ line | safe }} +{% endfor -%} + +## Runtimes + +The information about the runtimes included in this release can be found below. + +### Mainnet + +{% set runtime = env.RUNTIME_MAINNET_INFO | split(pat='|') -%} +``` +{% for line in runtime -%} + {{ line | safe }} +{% endfor -%} +``` + +### Frequency Paseo Testnet + +{% set runtime = env.RUNTIME_PASEO_INFO | split(pat='|') -%} +``` +{% for line in runtime -%} + {{ line | safe }} +{% endfor -%} +``` + +### Metadata Change Summary + +{% set summary = env.METADATA_CHANGE_SUMMARY | split(pat='|') -%} +``` +{% for line in summary -%} + {{ line | safe }} +{% endfor -%} +``` diff --git a/tools/ci/scripts/extrinsic-ordering-filter.sh b/tools/ci/scripts/extrinsic-ordering-filter.sh new file mode 100755 index 0000000000..9140f7e7c0 --- /dev/null +++ b/tools/ci/scripts/extrinsic-ordering-filter.sh @@ -0,0 +1,116 @@ +#!/usr/bin/env bash + +FILE=$1 + +function find_module_changes() { + echo "## Modules" + echo "- Added" + grep '\[+\] modules:' "$FILE" | sed 's/.*modules: / - /' || echo " n/a" + echo "- Removed" + grep '\[-\] modules:' "$FILE" | sed 's/.*modules: / - /' || echo " n/a" + echo +} + +function find_removals() { + echo "## Removals" + # Find all the modules with changes and pull in all the changes after it + grep -n -E '\[.*\] idx: .*\((calls:.*|storage:.*)\)' "$FILE" | + while read -r mod_line; do + module=$(echo "$mod_line" | sed -E 's/^[0-9]+:[[:space:]]*\[([^]]+)\].*/\1/') + mod_line_number=$(echo "$mod_line" | sed -E 's/^([0-9]+):.*/\1/') + mod_line_number_plus=$(($mod_line_number + 1)) + # Find all the [-] lines after that line until the next empty line + lines=$(sed -n -E "${mod_line_number_plus},\$ { + /\[-\]/ { + p + a\\ + | + } + /^$/ q + }" "$FILE") + # If some were found, then echo out the header, and the lines + if [ -n "$lines" ]; then + echo "- $module" + echo $lines | tr "|" "\n" | + while read -r line; do + if [ -n "${line}" ]; then + echo " - ${line}" + fi + done + fi + done || echo " n/a" + echo +} + +function find_changes() { + echo "## Changes" + # Find all the modules with changes and pull in all the changes after it + grep -n -E '\[.*\] idx: .*\((calls:.*|storage:.*)\)' "$FILE" | + while read -r mod_line; do + module=$(echo "$mod_line" | sed -E 's/^[0-9]+:[[:space:]]*\[([^]]+)\].*/\1/') + mod_line_number=$(echo "$mod_line" | sed -E 's/^([0-9]+):.*/\1/') + mod_line_number_plus=$(($mod_line_number + 1)) + # Find all the [extrinsic] lines after that line until the next empty line + lines=$(sed -n -E "${mod_line_number_plus},\$ { + /\[[^\+-]+\]/ { + p + a\\ + | + } + /^$/ q + }" "$FILE") + # If some were found, then echo out the header, and the lines + if [ -n "$lines" ]; then + echo "- $module" + echo $lines | tr "|" "\n" | + while read -r line; do + if [ -n "${line}" ]; then + echo " - ${line}" + fi + done + fi + done || echo " n/a" + echo +} + +function find_additions() { + echo "## Additions" + # Find all the modules with changes and pull in all the changes after it + grep -n -E '\[.*\] idx: .*\((calls:.*|storage:.*)\)' "$FILE" | + while read -r mod_line; do + module=$(echo "$mod_line" | sed -E 's/^[0-9]+:[[:space:]]*\[([^]]+)\].*/\1/') + mod_line_number=$(echo "$mod_line" | sed -E 's/^([0-9]+):.*/\1/') + mod_line_number_plus=$(($mod_line_number + 1)) + # Find all the [+] lines after that line until the next empty line + lines=$(sed -n -E "${mod_line_number_plus},\$ { + /\[\+\]/ { + p + a\\ + | + } + /^$/ q + }" "$FILE") + # If some were found, then echo out the header, and the lines + if [ -n "$lines" ]; then + echo "- $module" + echo $lines | tr "|" "\n" | + while read -r line; do + if [ -n "${line}" ]; then + echo " - ${line}" + fi + done + fi + done || echo " n/a" + echo +} + +echo "------------------------------ SUMMARY -------------------------------" +echo "⚠️ This filter is here to help spotting changes that should be reviewed carefully." +echo "⚠️ It catches only index changes, deletions and value decreases." +echo + +find_module_changes "$FILE" +find_removals "$FILE" +find_additions "$FILE" +find_changes "$FILE" +echo "----------------------------------------------------------------------" diff --git a/tools/ci/scripts/test-changelog-sanitizer.sh b/tools/ci/scripts/test-changelog-sanitizer.sh new file mode 100755 index 0000000000..89a924adc4 --- /dev/null +++ b/tools/ci/scripts/test-changelog-sanitizer.sh @@ -0,0 +1,55 @@ +#!/bin/bash +# This script is used for testing string substitutions which happen in +# "Sanitize Changelog" of the Release workflow. + +set -x +changelog='### Major Changes|n| + + - Restrict Pays:No call in batches #1452|n| + - refactor: feature frequency-local => frequency-paseo-local #1511|n| + + |n||n|### Uncategorized Changes|n||n| - [Handles] Testing Cleanup #1445|n| + - fix type definition mismatch for schemas #1443|n| + - fix git related warning #1444|n| + - Increase test coverage and Minor RPC Bug #1448|n| + - Bug: Fix missing extension warning in api-augment #1457|n| + - pin polkadotjs api to running version #1462|n| + - Decrease use of parameter types #1453|n| + - Ensure that the base_extrinsic weight does not change for Capacity transactions. #1455|n| + - [Handles] Design doc cleanup #1435|n| + - add CI base image #1468|n| + - clear metadata mismatch label on Verify PR workflow start #1480|n| + - switch Merge PR workflow to EKS runners #1459|n| + - 1401 Build/run Frequency runtime without a relay chain #1464|n| + - Bump robinraju/release-downloader from 1.7 to 1.8 #1473|n| + - Update README.md #1489|n| + - Update README.md #1490|n| + - [chore] Add lint clippy::unwrap_used to modules and/or functions that must not panic #1476|n| + - Feat/1463 vscode debug config #1492|n| + - fix: added check for feature conflict #1493|n| + - Update README.md #1491|n| + - Update README.md #1495|n| + - chore(capacity): address PR 827 comments #1372|n| + - E2E tests on Testnet #1481|n| + - switch Verify PR workflow to CI base image #1501|n| + - Use standard srtool image version #1496|n| + - build: Restore make-start to wasm execution; Add make-start-native; #1522|n| + - New CLI parameter interface for block sealing #1520|n| + - Build Optimization and Fix script warning #1523|n| + - Replace production profile with release profile #1524|n| + - update built binaries in CI #1518|n| + - switch build binaries back to self-hosted runners #1527|n| + - Update Readme #1525|n| + - test(e2e-tests): Capacity staking from multiple msa to one provider; … #1497|n| + - Message E2E Tests on Testnet #1514|n| + - fix: Add patch to Cargo.toml to ensure correct multihash version #1531|n| + - feat: add interval sealing mode for development node (without relay) #1533|n| + - build: Update Rust: toolchain = nightly-2022-11-15 #1535|n| + - add rust installation to ci base image #1536|n| + - remove 3rd party rust toolchain action #1547|n| + - Fix manual/interval sealing to work without empty blocks #1539|n| + - Capacity E2E Tests on Testnet #1538|n| +' + +clean="${changelog//[\`\[\]$'\n']/}" +echo "sanitized: $clean" diff --git a/tools/eth-migration/README.md b/tools/eth-migration/README.md new file mode 100644 index 0000000000..5f26cdfaab --- /dev/null +++ b/tools/eth-migration/README.md @@ -0,0 +1,34 @@ +# Eth migrations tools +Some scripts and tools to facilitate the key migration + +## Get Onchain msa id and keys +`npm run control-keys --silent` + + +## Get Offchain Indexed msa id and keys +`npm run offchain-keys --silent` + +### Sort and Compare to see any discrepancies +1. `sort -t',' -k1,1n -k2,2 onchain-keys.txt >> onchain-keys-sorted.txt` +2. `sort -t',' -k1,1n -k2,2 offchain-keys.txt >> offchain-keys-sorted.txt` +3. `diff onchain-keys-sorted.txt offchain-keys-sorted.txt` + +## Get Token keys +`npm run token-keys --silent` + +### Select token keys which are also control keys +`jq -c 'select(.msaId != 0)' tokens-keys.txt` + +## Get the difference between on-chain control keys and a database +1. fill in the DB connection string and other details +2. `npm run db-compare` + +## How to serve the metamask.html +This html is to help us test EIP-712 signatures using Metamask wallet. +To serve this html you can follow the following steps: + +1. `npm install -g serve` +2. `cd tool/migrations` +3. `serve` +4. Open http://localhost:3000/metamask.html in the browser + diff --git a/tools/eth-migration/db-comparison.mjs b/tools/eth-migration/db-comparison.mjs new file mode 100644 index 0000000000..8bf452fb06 --- /dev/null +++ b/tools/eth-migration/db-comparison.mjs @@ -0,0 +1,95 @@ +import fs from "fs/promises"; +import pg from "pg"; + +const { Client } = pg; + +// Database host +const DB_HOST = process.env["DB_HOST"]; +// Database port +const DB_PORT = process.env["DB_PORT"] || 5432; +// Database username +const DB_USERNAME = process.env["DB_USERNAME"]; +// Database password +const DB_PASSWORD = process.env["DB_PASSWORD"]; +// Database name +const DB_NAME = process.env["DB_NAME"]; +// Your query db table name +const DB_TABLE_NAME = process.env["DB_TABLE"]; +// Your DB column to compare +const DB_COLUMN_NAME = process.env["DB_COLUMN"]; +// DB query condition +const DB_CONDITION = process.env["DB_CONDITION"]; +// Path to your input file +const INPUT_FILE_LOCATION = process.env["INPUT_FILE"] || 'file.txt'; + +// Configuration +const dbConfig = { + host: DB_HOST, + port: DB_PORT, + database: DB_NAME, + user: DB_USERNAME, + password: DB_PASSWORD, +}; + +async function compareValues(inputFilePath, dbConfig, tableName, columnName, condition) { + // Read values from file + const fileContent = await fs.readFile(inputFilePath, 'utf-8'); + const fileValues = new Set( + fileContent + .split('\n') + .map(line => line.trim().replace(/^'|'$/g, '')) + .filter(line => line) // Remove empty lines + ); + + // Connect to PostgreSQL + const client = new Client(dbConfig); + + try { + await client.connect(); + + // Query database values + const query = `SELECT ${columnName} FROM ${tableName} WHERE ${condition}`; + const result = await client.query(query); + + const dbValues = new Set( + result.rows.map(row => row[columnName]) + ); + + // Find values only in database + const dbOnlyValues = new Set( + [...dbValues].filter(x => !fileValues.has(x)) + ); + + // Find values only in file + const fileOnlyValues = new Set( + [...fileValues].filter(x => !dbValues.has(x)) + ); + + // Output results + console.log('Values in Database but not in File:'); + dbOnlyValues.forEach(value => console.log(value)); + + console.log('\nValues in File but not in Database:'); + fileOnlyValues.forEach(value => console.log(value)); + + return { + dbOnlyValues, + fileOnlyValues + }; + + } catch (error) { + console.error('Error comparing values:', error); + } finally { + await client.end(); + } +} + +// Run the comparison +compareValues(INPUT_FILE_LOCATION, dbConfig, DB_TABLE_NAME, DB_COLUMN_NAME, DB_CONDITION) + .then(result => { + // Optional: Do something with the results + console.log('Comparison completed'); + }) + .catch(error => { + console.error('Comparison failed:', error); + }); diff --git a/tools/eth-migration/fetch-control-keys.mjs b/tools/eth-migration/fetch-control-keys.mjs new file mode 100644 index 0000000000..8869971c0b --- /dev/null +++ b/tools/eth-migration/fetch-control-keys.mjs @@ -0,0 +1,71 @@ +// Only way to silence PolkadotJS API warnings we don't want +console.warn = () => {}; + +import { ApiPromise, WsProvider } from "@polkadot/api"; + +const SOURCE_URL = process.env["FREQUENCY_URL"] || "wss://1.rpc.frequency.xyz"; +const BATCH_SIZE = 1000; + +const options = { + rpc: { + msa: { + getKeysByMsaId: { + description: 'Fetch Keys for an MSA Id', + params: [ + { + name: 'msa_id', + type: 'MessageSourceId', + }, + ], + type: 'Option', + }, + }, + }, + types: { + MessageSourceId: 'u64', + KeyInfoResponse: { + msa_keys: 'Vec', + msa_id: 'MessageSourceId', + }, + }, +}; + +export async function fetchControlKeysFromState(sourceUrl) { + // Connect to the state source + const sourceProvider = new WsProvider(sourceUrl); + const sourceApi = await ApiPromise.create({provider: sourceProvider, ...options}); + + let startKey; + let result; + do { + result = await sourceApi.query.msa.publicKeyToMsaId.entriesPaged({ + args: [], + pageSize: BATCH_SIZE, + startKey + }); + + result.forEach(([key, value]) => { + if (!value.isSome) { + console.error(`No MsaId for ${key.args[0].toHex()}`); + } else { + console.log(`${value.unwrap().toString()},${key.args[0].toHex()}`); + } + }); + + if (result.length > 0) { + startKey = result[result.length - 1][0]; + } + } while (result.length > 0); +} + +async function main() { + try { + await fetchControlKeysFromState(SOURCE_URL); + process.exit(0); + } catch (error) { + console.error("Error:", error); + process.exit(1); + } +} + +main(); diff --git a/tools/eth-migration/fetch-offchain-index-keys.mjs b/tools/eth-migration/fetch-offchain-index-keys.mjs new file mode 100644 index 0000000000..efded28311 --- /dev/null +++ b/tools/eth-migration/fetch-offchain-index-keys.mjs @@ -0,0 +1,85 @@ +// Only way to silence PolkadotJS API warnings we don't want +console.warn = () => {}; + +import { ApiPromise, WsProvider } from "@polkadot/api"; + +const SOURCE_URL = process.env["FREQUENCY_URL"] || "wss://1.rpc.frequency.xyz"; +const PROMISE_BATCH_SIZE = 500; + +const options = { + rpc: { + msa: { + getKeysByMsaId: { + description: 'Fetch Keys for an MSA Id', + params: [ + { + name: 'msa_id', + type: 'MessageSourceId', + }, + ], + type: 'Option', + }, + }, + }, + types: { + MessageSourceId: 'u64', + KeyInfoResponse: { + msa_keys: 'Vec', + msa_id: 'MessageSourceId', + }, + }, +}; + +export async function fetchControlKeysFromOffchainRpc(sourceUrl) { + // Connect to the state source + const sourceProvider = new WsProvider(sourceUrl); + const sourceApi = await ApiPromise.create({provider: sourceProvider, ...options}); + + // Get the max schema id + let msaMaxId = (await sourceApi.query.msa.currentMsaIdentifierMaximum()).toNumber(); + let promises = []; + let id = 1; + let batchNumber = 0; + for (; id <= msaMaxId ; id++){ + promises.push(sourceApi.rpc.msa.getKeysByMsaId(id)); + if (id % PROMISE_BATCH_SIZE === 0 && promises.length > 0) { + printRpcResults(await Promise.all(promises), batchNumber); + promises = []; + msaMaxId = (await sourceApi.query.msa.currentMsaIdentifierMaximum()).toNumber(); + batchNumber++; + } + } + + if (promises.length > 0) { + printRpcResults(await Promise.all(promises), batchNumber); + } +} + +function printRpcResults(results, batchNumber) { + let index = 0; + for (const r of results) { + if (!r.isSome) { + console.error(`No keys for MsaId: ${(batchNumber * PROMISE_BATCH_SIZE + index +1)}!`); + } else { + const keys = r.unwrap(); + for (const key of keys.msa_keys){ + console.log(`${keys.msa_id},${key.toHex()}`); + } + } + index ++; + } +} + + + +async function main() { + try { + await fetchControlKeysFromOffchainRpc(SOURCE_URL); + process.exit(0); + } catch (error) { + console.error("Error:", error); + process.exit(1); + } +} + +main(); diff --git a/tools/eth-migration/fetch-token-keys.mjs b/tools/eth-migration/fetch-token-keys.mjs new file mode 100644 index 0000000000..7daa771a74 --- /dev/null +++ b/tools/eth-migration/fetch-token-keys.mjs @@ -0,0 +1,79 @@ +// Only way to silence PolkadotJS API warnings we don't want +console.warn = () => {}; + +import { ApiPromise, WsProvider } from "@polkadot/api"; + +const SOURCE_URL = process.env["FREQUENCY_URL"] || "wss://1.rpc.frequency.xyz"; +const BATCH_SIZE = 1000; + +const options = { + rpc: { + msa: { + getKeysByMsaId: { + description: 'Fetch Keys for an MSA Id', + params: [ + { + name: 'msa_id', + type: 'MessageSourceId', + }, + ], + type: 'Option', + }, + }, + }, + types: { + MessageSourceId: 'u64', + KeyInfoResponse: { + msa_keys: 'Vec', + msa_id: 'MessageSourceId', + }, + }, +}; + +// { +// "publicKey": "0x488e14e049fd59b77e5821c4bb71fc9c4b8ced4c19ed27b3949e91b6274f1400", +// "msaId": 1, +// "values": { +// "nonce": 0, +// "consumers": 0, +// "providers": 1, +// "sufficients": 0, +// "data": { +// "free": 5000000000, +// "reserved": 0, +// "frozen": 0, +// "flags": "0x80000000000000000000000000000000" +// } +// } +// } +export async function fetchTokenKeysFromState(sourceUrl) { + // Connect to the state source + const sourceProvider = new WsProvider(sourceUrl); + const sourceApi = await ApiPromise.create({provider: sourceProvider, ...options}); + + let result; + do { + result = await sourceApi.query.system.account.entriesPaged({ args: [], pageSize: BATCH_SIZE, startKey: result && result[result.length - 1][0] }); + let msaResult = await sourceApi.query.msa.publicKeyToMsaId.multi(result.map(([key, _]) => key.args[0])); + result.forEach(([key, account], index) => { + const obj = { + publicKey: key.args[0].toHex(), + msaId: msaResult[index].isSome ? msaResult[index].unwrap().toNumber() : 0, + values: account, + } + console.log(`${JSON.stringify(obj)}`); + }); + } while (result.length === BATCH_SIZE); +} + +async function main() { + try { + await fetchTokenKeysFromState(SOURCE_URL); + process.exit(0); + } catch (error) { + console.error("Error:", error); + process.exit(1); + } +} + +main(); diff --git a/tools/eth-migration/metamask.html b/tools/eth-migration/metamask.html new file mode 100644 index 0000000000..fe4e147468 --- /dev/null +++ b/tools/eth-migration/metamask.html @@ -0,0 +1,395 @@ + + + + + Metamask meta transaction test + + + + + + +

+ +

+ +

+ + + + diff --git a/tools/eth-migration/package-lock.json b/tools/eth-migration/package-lock.json new file mode 100644 index 0000000000..fbfb38f76d --- /dev/null +++ b/tools/eth-migration/package-lock.json @@ -0,0 +1,1504 @@ +{ + "name": "eth-migration", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "eth-migration", + "version": "1.0.0", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/api": "^15.2.1", + "chai": "^5.2.0", + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^7.1.5", + "pg": "^8.14.1" + } + }, + "node_modules/@noble/curves": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.1.tgz", + "integrity": "sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==", + "dependencies": { + "@noble/hashes": "1.7.1" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.1.tgz", + "integrity": "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@polkadot-api/json-rpc-provider": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider/-/json-rpc-provider-0.0.1.tgz", + "integrity": "sha512-/SMC/l7foRjpykLTUTacIH05H3mr9ip8b5xxfwXlVezXrNVLp3Cv0GX6uItkKd+ZjzVPf3PFrDF2B2/HLSNESA==", + "optional": true + }, + "node_modules/@polkadot-api/json-rpc-provider-proxy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider-proxy/-/json-rpc-provider-proxy-0.1.0.tgz", + "integrity": "sha512-8GSFE5+EF73MCuLQm8tjrbCqlgclcHBSRaswvXziJ0ZW7iw3UEMsKkkKvELayWyBuOPa2T5i1nj6gFOeIsqvrg==", + "optional": true + }, + "node_modules/@polkadot-api/metadata-builders": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@polkadot-api/metadata-builders/-/metadata-builders-0.3.2.tgz", + "integrity": "sha512-TKpfoT6vTb+513KDzMBTfCb/ORdgRnsS3TDFpOhAhZ08ikvK+hjHMt5plPiAX/OWkm1Wc9I3+K6W0hX5Ab7MVg==", + "optional": true, + "dependencies": { + "@polkadot-api/substrate-bindings": "0.6.0", + "@polkadot-api/utils": "0.1.0" + } + }, + "node_modules/@polkadot-api/observable-client": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@polkadot-api/observable-client/-/observable-client-0.3.2.tgz", + "integrity": "sha512-HGgqWgEutVyOBXoGOPp4+IAq6CNdK/3MfQJmhCJb8YaJiaK4W6aRGrdQuQSTPHfERHCARt9BrOmEvTXAT257Ug==", + "optional": true, + "dependencies": { + "@polkadot-api/metadata-builders": "0.3.2", + "@polkadot-api/substrate-bindings": "0.6.0", + "@polkadot-api/utils": "0.1.0" + }, + "peerDependencies": { + "@polkadot-api/substrate-client": "0.1.4", + "rxjs": ">=7.8.0" + } + }, + "node_modules/@polkadot-api/substrate-bindings": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-bindings/-/substrate-bindings-0.6.0.tgz", + "integrity": "sha512-lGuhE74NA1/PqdN7fKFdE5C1gNYX357j1tWzdlPXI0kQ7h3kN0zfxNOpPUN7dIrPcOFZ6C0tRRVrBylXkI6xPw==", + "optional": true, + "dependencies": { + "@noble/hashes": "^1.3.1", + "@polkadot-api/utils": "0.1.0", + "@scure/base": "^1.1.1", + "scale-ts": "^1.6.0" + } + }, + "node_modules/@polkadot-api/substrate-client": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-client/-/substrate-client-0.1.4.tgz", + "integrity": "sha512-MljrPobN0ZWTpn++da9vOvt+Ex+NlqTlr/XT7zi9sqPtDJiQcYl+d29hFAgpaeTqbeQKZwz3WDE9xcEfLE8c5A==", + "optional": true, + "dependencies": { + "@polkadot-api/json-rpc-provider": "0.0.1", + "@polkadot-api/utils": "0.1.0" + } + }, + "node_modules/@polkadot-api/utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/utils/-/utils-0.1.0.tgz", + "integrity": "sha512-MXzWZeuGxKizPx2Xf/47wx9sr/uxKw39bVJUptTJdsaQn/TGq+z310mHzf1RCGvC1diHM8f593KrnDgc9oNbJA==", + "optional": true + }, + "node_modules/@polkadot/api": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-15.8.1.tgz", + "integrity": "sha512-J4BhtTGoBYTLEtd6CMku8J7oKfv66elVd5IRF7yOddJFmY0zb5fNk3B2Y9Pv495fo77M0qKc/LjseCZn207pQQ==", + "dependencies": { + "@polkadot/api-augment": "15.8.1", + "@polkadot/api-base": "15.8.1", + "@polkadot/api-derive": "15.8.1", + "@polkadot/keyring": "^13.4.3", + "@polkadot/rpc-augment": "15.8.1", + "@polkadot/rpc-core": "15.8.1", + "@polkadot/rpc-provider": "15.8.1", + "@polkadot/types": "15.8.1", + "@polkadot/types-augment": "15.8.1", + "@polkadot/types-codec": "15.8.1", + "@polkadot/types-create": "15.8.1", + "@polkadot/types-known": "15.8.1", + "@polkadot/util": "^13.4.3", + "@polkadot/util-crypto": "^13.4.3", + "eventemitter3": "^5.0.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/api-augment": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-15.8.1.tgz", + "integrity": "sha512-xVnkhaG9g2+uMx5ekvUb1Q5JDo1wzWVNhOAmGshAYuNmaQPupMTJIZ301/+gmw+23cvZd9/uCNZKF9x+wEWmOw==", + "dependencies": { + "@polkadot/api-base": "15.8.1", + "@polkadot/rpc-augment": "15.8.1", + "@polkadot/types": "15.8.1", + "@polkadot/types-augment": "15.8.1", + "@polkadot/types-codec": "15.8.1", + "@polkadot/util": "^13.4.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/api-base": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-15.8.1.tgz", + "integrity": "sha512-rGdasatpT5skvn49bc5qUB+oT2SyYeYWgnzGK1nc1UdOEEmV9/xMsBOqVc6KJsJR9vqnv9Y9SL00Bb9H21uVAA==", + "dependencies": { + "@polkadot/rpc-core": "15.8.1", + "@polkadot/types": "15.8.1", + "@polkadot/util": "^13.4.3", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/api-derive": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-15.8.1.tgz", + "integrity": "sha512-/rN63eWMkVdJamkpmX00xmg3VTfCUgOXIjob1e1no6WkZsk1uAHaU90Scv4bQEIxhhewwFMIseMP8l8GlCsNHg==", + "dependencies": { + "@polkadot/api": "15.8.1", + "@polkadot/api-augment": "15.8.1", + "@polkadot/api-base": "15.8.1", + "@polkadot/rpc-core": "15.8.1", + "@polkadot/types": "15.8.1", + "@polkadot/types-codec": "15.8.1", + "@polkadot/util": "^13.4.3", + "@polkadot/util-crypto": "^13.4.3", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/keyring": { + "version": "13.4.3", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-13.4.3.tgz", + "integrity": "sha512-2ePNcvBTznDN2luKbZM5fdxgAnj7V8m276qSTgrHlqKVvg9FsQpRCR6CAU+AjhnHzpe7uiZO+UH+jlXWefI3AA==", + "dependencies": { + "@polkadot/util": "13.4.3", + "@polkadot/util-crypto": "13.4.3", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "13.4.3", + "@polkadot/util-crypto": "13.4.3" + } + }, + "node_modules/@polkadot/networks": { + "version": "13.4.3", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-13.4.3.tgz", + "integrity": "sha512-Z+YZkltBt//CtkVH8ZYJ1z66qYxdI0yPamzkzZAqw6gj3gjgSxKtxB4baA/rcAw05QTvN2R3dLkkmKr2mnHovQ==", + "dependencies": { + "@polkadot/util": "13.4.3", + "@substrate/ss58-registry": "^1.51.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/rpc-augment": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-15.8.1.tgz", + "integrity": "sha512-Ko5VVQYkifnEiSkuq0vwxjwTdlgsexn8lcB2zzpDIdq1SVF/w3/lg7Ln4hqPKJ4QGAYf1D5sqhZCbOhlgN+DfA==", + "dependencies": { + "@polkadot/rpc-core": "15.8.1", + "@polkadot/types": "15.8.1", + "@polkadot/types-codec": "15.8.1", + "@polkadot/util": "^13.4.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/rpc-core": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-15.8.1.tgz", + "integrity": "sha512-QnEULlLO+eNVChll6nx8/J+VAa1SHmIZKi/ahMM5A5UWGc0ntLNDRT3Ts5itpUW8zI0mHCuQlkS1/7nYgbCb+Q==", + "dependencies": { + "@polkadot/rpc-augment": "15.8.1", + "@polkadot/rpc-provider": "15.8.1", + "@polkadot/types": "15.8.1", + "@polkadot/util": "^13.4.3", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/rpc-provider": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-15.8.1.tgz", + "integrity": "sha512-EAIRYiZNQeGPgG6AFyuRQdqLrYB/BL01Ra4ES8LA9nZwS4BVXuMoyzNuQqExUe2gNOjFfyVqURNBCR/0xzhMQg==", + "dependencies": { + "@polkadot/keyring": "^13.4.3", + "@polkadot/types": "15.8.1", + "@polkadot/types-support": "15.8.1", + "@polkadot/util": "^13.4.3", + "@polkadot/util-crypto": "^13.4.3", + "@polkadot/x-fetch": "^13.4.3", + "@polkadot/x-global": "^13.4.3", + "@polkadot/x-ws": "^13.4.3", + "eventemitter3": "^5.0.1", + "mock-socket": "^9.3.1", + "nock": "^13.5.5", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@substrate/connect": "0.8.11" + } + }, + "node_modules/@polkadot/types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-15.8.1.tgz", + "integrity": "sha512-PALHaxeMaR+KwVN15XdmkF5udL9nm8ysIoS3iDMTSjjmZAZVhoELSUam/VxwEYkIuFBADj0i3zJTsEbiWBHotg==", + "dependencies": { + "@polkadot/keyring": "^13.4.3", + "@polkadot/types-augment": "15.8.1", + "@polkadot/types-codec": "15.8.1", + "@polkadot/types-create": "15.8.1", + "@polkadot/util": "^13.4.3", + "@polkadot/util-crypto": "^13.4.3", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-augment": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-15.8.1.tgz", + "integrity": "sha512-g3i+0q03gCLEx8YWDcvQk39QBAl4Cj59njNyX9XQKS2WZY0ZLVD4TMw0HEozMnYBb23dJjNeFxHkIdSQzaJBKA==", + "dependencies": { + "@polkadot/types": "15.8.1", + "@polkadot/types-codec": "15.8.1", + "@polkadot/util": "^13.4.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-codec": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-15.8.1.tgz", + "integrity": "sha512-F5GMDbxCeBCBM28gwnMMXvf0psU1j6NL9HG7KzlxWV7sjz/GwOEVyzETaSTrp4/wXt5QYUIGJiFG4ltzkx9K4g==", + "dependencies": { + "@polkadot/util": "^13.4.3", + "@polkadot/x-bigint": "^13.4.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-create": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-15.8.1.tgz", + "integrity": "sha512-h/4v5QJmagOjp3qFtBx+KQV5J8GxR/SJae1RTEt/6gCl/p9mS+yFGHHJ+ihD1wvcvh9XZCf/yotJAh+romY16A==", + "dependencies": { + "@polkadot/types-codec": "15.8.1", + "@polkadot/util": "^13.4.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-known": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-15.8.1.tgz", + "integrity": "sha512-0kNMRN2xd4aQybKT7sFrjOId7SOtry4z6BYg97mqNVf42ZH4idk3YKO41RA2nfyzOuuFzr6hav4FrRa+8Aue0w==", + "dependencies": { + "@polkadot/networks": "^13.4.3", + "@polkadot/types": "15.8.1", + "@polkadot/types-codec": "15.8.1", + "@polkadot/types-create": "15.8.1", + "@polkadot/util": "^13.4.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-support": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-15.8.1.tgz", + "integrity": "sha512-2NWhxdD7+rARlnKiFo83+wtjzAT4tvaZUD7ahxTukJbHSewpwhaHpqnCJccasw51qipI4rX0G1ytPJbI4NIRDg==", + "dependencies": { + "@polkadot/util": "^13.4.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/util": { + "version": "13.4.3", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-13.4.3.tgz", + "integrity": "sha512-6v2zvg8l7W22XvjYf7qv9tPQdYl2E6aXY94M4TZKsXZxmlS5BoG+A9Aq0+Gw8zBUjupjEmUkA6Y//msO8Zisug==", + "dependencies": { + "@polkadot/x-bigint": "13.4.3", + "@polkadot/x-global": "13.4.3", + "@polkadot/x-textdecoder": "13.4.3", + "@polkadot/x-textencoder": "13.4.3", + "@types/bn.js": "^5.1.6", + "bn.js": "^5.2.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/util-crypto": { + "version": "13.4.3", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-13.4.3.tgz", + "integrity": "sha512-Ml0mjhKVetMrRCIosmVNMa6lbFPa3fSAeOggf34NsDIIQOKt9FL644iGz1ZSMOnBwN9qk2qHYmcFMTDXX2yKVQ==", + "dependencies": { + "@noble/curves": "^1.3.0", + "@noble/hashes": "^1.3.3", + "@polkadot/networks": "13.4.3", + "@polkadot/util": "13.4.3", + "@polkadot/wasm-crypto": "^7.4.1", + "@polkadot/wasm-util": "^7.4.1", + "@polkadot/x-bigint": "13.4.3", + "@polkadot/x-randomvalues": "13.4.3", + "@scure/base": "^1.1.7", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "13.4.3" + } + }, + "node_modules/@polkadot/wasm-bridge": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-7.4.1.tgz", + "integrity": "sha512-tdkJaV453tezBxhF39r4oeG0A39sPKGDJmN81LYLf+Fihb7astzwju+u75BRmDrHZjZIv00un3razJEWCxze6g==", + "dependencies": { + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/wasm-crypto": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-7.4.1.tgz", + "integrity": "sha512-kHN/kF7hYxm1y0WeFLWeWir6oTzvcFmR4N8fJJokR+ajYbdmrafPN+6iLgQVbhZnDdxyv9jWDuRRsDnBx8tPMQ==", + "dependencies": { + "@polkadot/wasm-bridge": "7.4.1", + "@polkadot/wasm-crypto-asmjs": "7.4.1", + "@polkadot/wasm-crypto-init": "7.4.1", + "@polkadot/wasm-crypto-wasm": "7.4.1", + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-asmjs": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.4.1.tgz", + "integrity": "sha512-pwU8QXhUW7IberyHJIQr37IhbB6DPkCG5FhozCiNTq4vFBsFPjm9q8aZh7oX1QHQaiAZa2m2/VjIVE+FHGbvHQ==", + "dependencies": { + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-init": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.4.1.tgz", + "integrity": "sha512-AVka33+f7MvXEEIGq5U0dhaA2SaXMXnxVCQyhJTaCnJ5bRDj0Xlm3ijwDEQUiaDql7EikbkkRtmlvs95eSUWYQ==", + "dependencies": { + "@polkadot/wasm-bridge": "7.4.1", + "@polkadot/wasm-crypto-asmjs": "7.4.1", + "@polkadot/wasm-crypto-wasm": "7.4.1", + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-wasm": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.4.1.tgz", + "integrity": "sha512-PE1OAoupFR0ZOV2O8tr7D1FEUAwaggzxtfs3Aa5gr+yxlSOaWUKeqsOYe1KdrcjmZVV3iINEAXxgrbzCmiuONg==", + "dependencies": { + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/wasm-util": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-7.4.1.tgz", + "integrity": "sha512-RAcxNFf3zzpkr+LX/ItAsvj+QyM56TomJ0xjUMo4wKkHjwsxkz4dWJtx5knIgQz/OthqSDMR59VNEycQeNuXzA==", + "dependencies": { + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/x-bigint": { + "version": "13.4.3", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-13.4.3.tgz", + "integrity": "sha512-8NbjF5Q+5lflhvDFve58wULjCVcvXa932LKFtI5zL2gx5VDhMgyfkNcYRjHB18Ecl21963JuGzvGVTZNkh/i6g==", + "dependencies": { + "@polkadot/x-global": "13.4.3", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-fetch": { + "version": "13.4.3", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-13.4.3.tgz", + "integrity": "sha512-EwhcwROqWa7mvNTbLVNH71Hbyp5PW5j9lV2UpII5MZzRO95eYwV4oP/xgtTxC+60nC8lrvzAw0JxEHrmNzmtlg==", + "dependencies": { + "@polkadot/x-global": "13.4.3", + "node-fetch": "^3.3.2", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-global": { + "version": "13.4.3", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-13.4.3.tgz", + "integrity": "sha512-6c98kxZdoGRct3ua9Dz6/qz8wb3XFRUkaY+4+RzIgehKMPhu19pGWTrzmbJSyY9FtIpThuWKuDaBEvd5KgSxjA==", + "dependencies": { + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-randomvalues": { + "version": "13.4.3", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-13.4.3.tgz", + "integrity": "sha512-pskXP/S2jROZ6aASExsUFlNp7GbJvQikKogvyvMMCzNIbUYLxpLuquLRa3MOORx2c0SNsENg90cx/zHT+IjPRQ==", + "dependencies": { + "@polkadot/x-global": "13.4.3", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "13.4.3", + "@polkadot/wasm-util": "*" + } + }, + "node_modules/@polkadot/x-textdecoder": { + "version": "13.4.3", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-13.4.3.tgz", + "integrity": "sha512-k7Wg6csAPxfNtpBt3k5yUuPHYmRl/nl7H2OMr40upMjbZXbQ1RJW9Z3GBkLmQczG7NwwfAXHwQE9FYOMUtbuRQ==", + "dependencies": { + "@polkadot/x-global": "13.4.3", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-textencoder": { + "version": "13.4.3", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-13.4.3.tgz", + "integrity": "sha512-byl2LbN1rnEXKmnsCzEDaIjSIHAr+1ciSe2yj3M0K+oWEEcaFZEovJaf/uoyzkcjn+/l8rDv3nget6mPuQ/DSw==", + "dependencies": { + "@polkadot/x-global": "13.4.3", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-ws": { + "version": "13.4.3", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-13.4.3.tgz", + "integrity": "sha512-GS0I6MYLD/xNAAjODZi/pbG7Ba0e/5sbvDIrT01iKH3SPGN+PZoyAsc04t2IOXA6QmPa1OBHnaU3N4K8gGmJ+w==", + "dependencies": { + "@polkadot/x-global": "13.4.3", + "tslib": "^2.8.0", + "ws": "^8.18.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@scure/base": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.4.tgz", + "integrity": "sha512-5Yy9czTO47mqz+/J8GM6GIId4umdCk1wc1q8rKERQulIoc8VP9pzDcghv10Tl2E7R96ZUx/PhND3ESYUQX8NuQ==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@substrate/connect": { + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.8.11.tgz", + "integrity": "sha512-ofLs1PAO9AtDdPbdyTYj217Pe+lBfTLltdHDs3ds8no0BseoLeAGxpz1mHfi7zB4IxI3YyAiLjH6U8cw4pj4Nw==", + "deprecated": "versions below 1.x are no longer maintained", + "optional": true, + "dependencies": { + "@substrate/connect-extension-protocol": "^2.0.0", + "@substrate/connect-known-chains": "^1.1.5", + "@substrate/light-client-extension-helpers": "^1.0.0", + "smoldot": "2.0.26" + } + }, + "node_modules/@substrate/connect-extension-protocol": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@substrate/connect-extension-protocol/-/connect-extension-protocol-2.2.2.tgz", + "integrity": "sha512-t66jwrXA0s5Goq82ZtjagLNd7DPGCNjHeehRlE/gcJmJ+G56C0W+2plqOMRicJ8XGR1/YFnUSEqUFiSNbjGrAA==", + "optional": true + }, + "node_modules/@substrate/connect-known-chains": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@substrate/connect-known-chains/-/connect-known-chains-1.9.3.tgz", + "integrity": "sha512-CPcykiKcVuG4J424gNUFak4AdIJ1sXbu/Bk1IGVPOz74NlBO8EvUyRlpPA7IY0vEf7/n4HQ1gEN5lfgERo4q3w==", + "optional": true + }, + "node_modules/@substrate/light-client-extension-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@substrate/light-client-extension-helpers/-/light-client-extension-helpers-1.0.0.tgz", + "integrity": "sha512-TdKlni1mBBZptOaeVrKnusMg/UBpWUORNDv5fdCaJklP4RJiFOzBCrzC+CyVI5kQzsXBisZ+2pXm+rIjS38kHg==", + "optional": true, + "dependencies": { + "@polkadot-api/json-rpc-provider": "^0.0.1", + "@polkadot-api/json-rpc-provider-proxy": "^0.1.0", + "@polkadot-api/observable-client": "^0.3.0", + "@polkadot-api/substrate-client": "^0.1.2", + "@substrate/connect-extension-protocol": "^2.0.0", + "@substrate/connect-known-chains": "^1.1.5", + "rxjs": "^7.8.1" + }, + "peerDependencies": { + "smoldot": "2.x" + } + }, + "node_modules/@substrate/ss58-registry": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.51.0.tgz", + "integrity": "sha512-TWDurLiPxndFgKjVavCniytBIw+t4ViOi7TYp9h/D0NMmkEc9klFTo+827eyEJ0lELpqO207Ey7uGxUa+BS1jQ==" + }, + "node_modules/@types/bn.js": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz", + "integrity": "sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "22.13.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.11.tgz", + "integrity": "sha512-iEUCUJoU0i3VnrCmgoWCXttklWcvoCIx4jzcP22fioIVSdTmjgoEvmAO/QPw6TcS9k5FrNgn4w7q5lGOd1CT5g==", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/secp256k1": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", + "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + }, + "node_modules/chai": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", + "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "engines": { + "node": ">= 16" + } + }, + "node_modules/cipher-base": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", + "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==" + }, + "node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/ethereumjs-abi": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", + "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", + "deprecated": "This library has been deprecated and usage is discouraged.", + "dependencies": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/ethereumjs-abi/node_modules/@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ethereumjs-abi/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==" + }, + "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "dependencies": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "node_modules/keccak": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/loupe": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", + "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==" + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "node_modules/mock-socket": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.3.1.tgz", + "integrity": "sha512-qxBgB7Qa2sEQgHFjj0dSigq7fX4k6Saisd5Nelwp2q8mlbAFh5dHV9JTTlF8viYJLSSWgMCZFUom8PJcMNBoJw==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/nock": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.6.tgz", + "integrity": "sha512-o2zOYiCpzRqSzPj0Zt/dQ/DqZeYoaQ7TUonc/xUPjCGl9WeHpNbxgVvOquXYAaJzI0M9BXV3HTzG0p8IUAbBTQ==", + "dependencies": { + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "propagate": "^2.0.0" + }, + "engines": { + "node": ">= 10.13" + } + }, + "node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/pathval": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", + "engines": { + "node": ">= 14.16" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/pg": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.14.1.tgz", + "integrity": "sha512-0TdbqfjwIun9Fm/r89oB7RFQ0bLgduAhiIqIXOsyKoiC/L54DbuAAzIEN/9Op0f1Po9X7iCPXGoa/Ah+2aI8Xw==", + "dependencies": { + "pg-connection-string": "^2.7.0", + "pg-pool": "^3.8.0", + "pg-protocol": "^1.8.0", + "pg-types": "^2.1.0", + "pgpass": "1.x" + }, + "engines": { + "node": ">= 8.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.1.1" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", + "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.7.0.tgz", + "integrity": "sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA==" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.8.0.tgz", + "integrity": "sha512-VBw3jiVm6ZOdLBTIcXLNdSotb6Iy3uOCwDGFAksZCXmi10nyRvnP2v3jl4d+IsLYRyXf6o9hIm/ZtUzlByNUdw==", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.8.0.tgz", + "integrity": "sha512-jvuYlEkL03NRvOoyoRktBK7+qU5kOvlAwvmrH8sr3wbLrOdVWsRxQfz8mMy9sZFsqJ1hEWNfdWKI4SAmoL+j7g==" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "dependencies": { + "split2": "^4.1.0" + } + }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/propagate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "dependencies": { + "bn.js": "^5.2.0" + }, + "bin": { + "rlp": "bin/rlp" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/scale-ts": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/scale-ts/-/scale-ts-1.6.1.tgz", + "integrity": "sha512-PBMc2AWc6wSEqJYBDPcyCLUj9/tMKnLX70jLOSndMtcUoLQucP/DM0vnQo1wJAYjTrQiq8iG9rD0q6wFzgjH7g==", + "optional": true + }, + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + }, + "node_modules/secp256k1": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.4.tgz", + "integrity": "sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw==", + "hasInstallScript": true, + "dependencies": { + "elliptic": "^6.5.7", + "node-addon-api": "^5.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/secp256k1/node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/smoldot": { + "version": "2.0.26", + "resolved": "https://registry.npmjs.org/smoldot/-/smoldot-2.0.26.tgz", + "integrity": "sha512-F+qYmH4z2s2FK+CxGj8moYcd1ekSIKH8ywkdqlOz88Dat35iB1DIYL11aILN46YSGMzQW/lbJNS307zBSDN5Ig==", + "optional": true, + "dependencies": { + "ws": "^8.8.1" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + } + } +} diff --git a/tools/eth-migration/package.json b/tools/eth-migration/package.json new file mode 100644 index 0000000000..62be6a60ac --- /dev/null +++ b/tools/eth-migration/package.json @@ -0,0 +1,17 @@ +{ + "name": "eth-migration", + "version": "1.0.0", + "description": "A set of scripts to facilitate ETH key migration", + "scripts": { + "control-keys": "node fetch-control-keys.mjs", + "offchain-keys": "node fetch-offchain-index-keys.mjs", + "token-keys": "node fetch-token-keys.mjs", + "db-compare": "node db-comparison.mjs" + }, + "author": "", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/api": "^15.2.1", + "pg": "^8.14.1" + } +} diff --git a/tools/genesis-data/getSchema.mjs b/tools/genesis-data/getSchema.mjs new file mode 100644 index 0000000000..01f9e57318 --- /dev/null +++ b/tools/genesis-data/getSchema.mjs @@ -0,0 +1,89 @@ +// Only way to silence PolkadotJS API warnings we don't want +console.warn = () => {}; + +import { ApiPromise, WsProvider } from "@polkadot/api"; + +const options = { + rpc: { + schemas: { + getBySchemaId: { + description: "Get a Schema by Id", + params: [ + { + name: "schema_id", + type: "SchemaId", + }, + ], + type: "Option", + }, + }, + }, + types: { + SchemaId: "u16", + SchemaModel: "Vec", + SchemaResponse: { + schema_id: "SchemaId", + model: "SchemaModel", + model_type: "ModelType", + payload_location: "PayloadLocation", + settings: "Vec", + }, + ModelType: { + _enum: ["AvroBinary", "Parquet"], + }, + PayloadLocation: { + _enum: ["OnChain", "IPFS", "Itemized", "Paginated"], + }, + SchemaSetting: { + _enum: ["AppendOnly", "SignatureRequired"], + }, + }, +}; + +export async function getSchemas(sourceUrl) { + // Connect to the state source + const sourceProvider = new WsProvider(sourceUrl); + const sourceApi = await ApiPromise.create({ provider: sourceProvider, ...options }); + + const genesisSchemasList = []; + // Schema Genesis Format + // { + // "model": "{}", + // "model_type": "AvroBinary", + // "name": "dsnp.thing", + // "payload_location": "Itemized", + // "settings": ["AppendOnly", "SignatureRequired"] + // } + + // Get the max schema id + const maxSchemaId = (await sourceApi.query.schemas.currentSchemaIdentifierMaximum()).toNumber(); + + // Get all schemas + for (let id = 1; id <= maxSchemaId; id++) { + const schemaOption = await sourceApi.rpc.schemas.getBySchemaId(id); + if (!schemaOption.isSome) throw new Error(`Unable to get Schema Id ${id}!`); + const schema = schemaOption.unwrap(); + genesisSchemasList[id - 1] = { + model_type: schema.model_type.toString(), + payload_location: schema.payload_location.toString(), + settings: schema.settings.toJSON(), + model: new TextDecoder().decode(schema.model), + name: "", + }; + } + + // Get all the schema names TODO: Switch to entriesPaged at some point + const names = await sourceApi.query.schemas.schemaNameToIds.entries(); + + for (const storageName of names) { + const name = storageName[0].toHuman(); + for (const idBig of storageName[1].ids) { + const id = idBig.toNumber(); + if (genesisSchemasList[id - 1]) { + genesisSchemasList[id - 1].name = name.join("."); + } + } + } + + process.stdout.write(JSON.stringify(genesisSchemasList, null, 2) + "\n"); +} diff --git a/tools/genesis-data/package-lock.json b/tools/genesis-data/package-lock.json new file mode 100644 index 0000000000..629d4d6914 --- /dev/null +++ b/tools/genesis-data/package-lock.json @@ -0,0 +1,859 @@ +{ + "name": "genesis-data", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "genesis-data", + "version": "1.0.0", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/api": "^16.1.1" + } + }, + "node_modules/@noble/curves": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", + "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@polkadot-api/json-rpc-provider": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider/-/json-rpc-provider-0.0.1.tgz", + "integrity": "sha512-/SMC/l7foRjpykLTUTacIH05H3mr9ip8b5xxfwXlVezXrNVLp3Cv0GX6uItkKd+ZjzVPf3PFrDF2B2/HLSNESA==", + "optional": true + }, + "node_modules/@polkadot-api/json-rpc-provider-proxy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider-proxy/-/json-rpc-provider-proxy-0.1.0.tgz", + "integrity": "sha512-8GSFE5+EF73MCuLQm8tjrbCqlgclcHBSRaswvXziJ0ZW7iw3UEMsKkkKvELayWyBuOPa2T5i1nj6gFOeIsqvrg==", + "optional": true + }, + "node_modules/@polkadot-api/metadata-builders": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@polkadot-api/metadata-builders/-/metadata-builders-0.3.2.tgz", + "integrity": "sha512-TKpfoT6vTb+513KDzMBTfCb/ORdgRnsS3TDFpOhAhZ08ikvK+hjHMt5plPiAX/OWkm1Wc9I3+K6W0hX5Ab7MVg==", + "optional": true, + "dependencies": { + "@polkadot-api/substrate-bindings": "0.6.0", + "@polkadot-api/utils": "0.1.0" + } + }, + "node_modules/@polkadot-api/observable-client": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@polkadot-api/observable-client/-/observable-client-0.3.2.tgz", + "integrity": "sha512-HGgqWgEutVyOBXoGOPp4+IAq6CNdK/3MfQJmhCJb8YaJiaK4W6aRGrdQuQSTPHfERHCARt9BrOmEvTXAT257Ug==", + "optional": true, + "dependencies": { + "@polkadot-api/metadata-builders": "0.3.2", + "@polkadot-api/substrate-bindings": "0.6.0", + "@polkadot-api/utils": "0.1.0" + }, + "peerDependencies": { + "@polkadot-api/substrate-client": "0.1.4", + "rxjs": ">=7.8.0" + } + }, + "node_modules/@polkadot-api/substrate-bindings": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-bindings/-/substrate-bindings-0.6.0.tgz", + "integrity": "sha512-lGuhE74NA1/PqdN7fKFdE5C1gNYX357j1tWzdlPXI0kQ7h3kN0zfxNOpPUN7dIrPcOFZ6C0tRRVrBylXkI6xPw==", + "optional": true, + "dependencies": { + "@noble/hashes": "^1.3.1", + "@polkadot-api/utils": "0.1.0", + "@scure/base": "^1.1.1", + "scale-ts": "^1.6.0" + } + }, + "node_modules/@polkadot-api/substrate-client": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-client/-/substrate-client-0.1.4.tgz", + "integrity": "sha512-MljrPobN0ZWTpn++da9vOvt+Ex+NlqTlr/XT7zi9sqPtDJiQcYl+d29hFAgpaeTqbeQKZwz3WDE9xcEfLE8c5A==", + "optional": true, + "dependencies": { + "@polkadot-api/json-rpc-provider": "0.0.1", + "@polkadot-api/utils": "0.1.0" + } + }, + "node_modules/@polkadot-api/utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/utils/-/utils-0.1.0.tgz", + "integrity": "sha512-MXzWZeuGxKizPx2Xf/47wx9sr/uxKw39bVJUptTJdsaQn/TGq+z310mHzf1RCGvC1diHM8f593KrnDgc9oNbJA==", + "optional": true + }, + "node_modules/@polkadot/api": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-16.1.1.tgz", + "integrity": "sha512-atlnmcDjDZyoE9w460Rrve0LnRv9B0W1fuy1ay9vfBQ03ez3nwnoP4sP9ldYxcmU9QEs5/HTn6nvVSZXowCYKw==", + "dependencies": { + "@polkadot/api-augment": "16.1.1", + "@polkadot/api-base": "16.1.1", + "@polkadot/api-derive": "16.1.1", + "@polkadot/keyring": "^13.5.1", + "@polkadot/rpc-augment": "16.1.1", + "@polkadot/rpc-core": "16.1.1", + "@polkadot/rpc-provider": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-augment": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/types-create": "16.1.1", + "@polkadot/types-known": "16.1.1", + "@polkadot/util": "^13.5.1", + "@polkadot/util-crypto": "^13.5.1", + "eventemitter3": "^5.0.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/api-augment": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-16.1.1.tgz", + "integrity": "sha512-VTj03C1iJEZ//IBKa4sRxfz3WObygXtyOqYCRMJEtH74roIZvJpIjhmZwJqGD8NijPO3mgZOTzaLzjoeLF1jMw==", + "dependencies": { + "@polkadot/api-base": "16.1.1", + "@polkadot/rpc-augment": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-augment": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/api-base": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-16.1.1.tgz", + "integrity": "sha512-PUpc0Ir7ru51RuVhZMmbleicKMI43s5T1FHhOHmtzbMUTnwMbXtWHKzIfkHxqXJrg10EwO8mzcymJeHbA1TR+g==", + "dependencies": { + "@polkadot/rpc-core": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/util": "^13.5.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/api-derive": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-16.1.1.tgz", + "integrity": "sha512-sC0j67RzDRwe3sHw0trDFz7tfFu68+3pQT89ash9TUVa8AD0i4USIirg4dNVWt7CrK9eW3Q4edqs1p6RXurz7g==", + "dependencies": { + "@polkadot/api": "16.1.1", + "@polkadot/api-augment": "16.1.1", + "@polkadot/api-base": "16.1.1", + "@polkadot/rpc-core": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "@polkadot/util-crypto": "^13.5.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/keyring": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-13.5.1.tgz", + "integrity": "sha512-dEl679aoMv9gOzWJA13Jb2HUGqRi6/zKjEtg+qbiEryCSjUqfNKyO8liuwMFy0VP3qxJb1FkxNe6MnG1NwbU5Q==", + "dependencies": { + "@polkadot/util": "13.5.1", + "@polkadot/util-crypto": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "13.5.1", + "@polkadot/util-crypto": "13.5.1" + } + }, + "node_modules/@polkadot/networks": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-13.5.1.tgz", + "integrity": "sha512-w5HS209pHZhqJ7AVqJqFApO4OcwlxjfQ7mp2dE/vL5qA5RnsEx/3fBYJ6h3z/k5Ggac0+Zl1vMZAF1gW8S/F9A==", + "dependencies": { + "@polkadot/util": "13.5.1", + "@substrate/ss58-registry": "^1.51.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/rpc-augment": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-16.1.1.tgz", + "integrity": "sha512-o0CgmzQ06qV0nKlKPccumOmPsZ3f2VeQp2u8tndLOLG5A7C9k+XML92ldJHN2Dj+XKHLhjHG4syPEBET7ugZCg==", + "dependencies": { + "@polkadot/rpc-core": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/rpc-core": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-16.1.1.tgz", + "integrity": "sha512-BUfY6868kJhPXCyQuRUg644pWGhynuWvPvglJXsOf+A3pRhKm+cNWEjs8puQmUc38adl6QocBeUJHfTnfrtKPg==", + "dependencies": { + "@polkadot/rpc-augment": "16.1.1", + "@polkadot/rpc-provider": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/util": "^13.5.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/rpc-provider": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-16.1.1.tgz", + "integrity": "sha512-LH22P6OSw304pwvdpjuxc6ARtvrUUvkBF02n4FsJBo555y9d+2dcA5CA4FLI8WNvOXf3hOLwxz/UPxA7VATksw==", + "dependencies": { + "@polkadot/keyring": "^13.5.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-support": "16.1.1", + "@polkadot/util": "^13.5.1", + "@polkadot/util-crypto": "^13.5.1", + "@polkadot/x-fetch": "^13.5.1", + "@polkadot/x-global": "^13.5.1", + "@polkadot/x-ws": "^13.5.1", + "eventemitter3": "^5.0.1", + "mock-socket": "^9.3.1", + "nock": "^13.5.5", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@substrate/connect": "0.8.11" + } + }, + "node_modules/@polkadot/types": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-16.1.1.tgz", + "integrity": "sha512-edEKvnCrWoPjW2sRUdER4gm8zm+gilVhZXqAtYH0gHJkBzbhCXZ5M27E62ztR1at9XyHDsTUeuq51ELHOUbbFQ==", + "dependencies": { + "@polkadot/keyring": "^13.5.1", + "@polkadot/types-augment": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/types-create": "16.1.1", + "@polkadot/util": "^13.5.1", + "@polkadot/util-crypto": "^13.5.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-augment": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-16.1.1.tgz", + "integrity": "sha512-Ozh7nEyAnyHK9x1CnRYlG/rnarvuauAIbvUljtA7f/3RI570kRTpeOR83QkDWdaLywno96A4zdFXBfI0nmq1Yw==", + "dependencies": { + "@polkadot/types": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-codec": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-16.1.1.tgz", + "integrity": "sha512-REcSkOfxFGPJWEbuCIr5EA0argnZwYVYkE14f97XVM9rV36/FEyu1al47fSjp8iHA3e8Fsd+V+WTZRwlUa51qA==", + "dependencies": { + "@polkadot/util": "^13.5.1", + "@polkadot/x-bigint": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-create": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-16.1.1.tgz", + "integrity": "sha512-dpd5HKRfNQlDYMtMdofrhr99O7q8EWkqZyTadFuTYyd7LECb9FUD8nO6RbcmpXYA9F3r5g/EwvsmZFZaQW9LqA==", + "dependencies": { + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-known": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-16.1.1.tgz", + "integrity": "sha512-Qp6C+wppqvooDFU2T0Ynmgo72bQOUkY6dLVoGmZWq/OO6hXuLCg8SAncJP/CzcueEA2/Anzk3DQbfZVlBEr6Cg==", + "dependencies": { + "@polkadot/networks": "^13.5.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/types-create": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-support": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-16.1.1.tgz", + "integrity": "sha512-pVEBVaXuIkhuMX6J4Cn+cGcLOPsz2qu4EuZXwwA/ioMIICclh+7q6+fOfInogIgmbcYHZFDDsyXG3wRw7ThZkA==", + "dependencies": { + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/util": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-13.5.1.tgz", + "integrity": "sha512-Anu4fsmMconvU+WXGFESNQp4qFjbvZnS4zD4I54W5gW70klrmrdfP2jGYhejVkm0Pf43RREN63G7Rew8+sXUmw==", + "dependencies": { + "@polkadot/x-bigint": "13.5.1", + "@polkadot/x-global": "13.5.1", + "@polkadot/x-textdecoder": "13.5.1", + "@polkadot/x-textencoder": "13.5.1", + "@types/bn.js": "^5.1.6", + "bn.js": "^5.2.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/util-crypto": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-13.5.1.tgz", + "integrity": "sha512-HIuTRpkulIzmgCU+GIXbEEkVbikvrK+5v8XZ7Ll45m1dLsxnrJeEbNsCLUwI/+D9Jd0iF3+T12GybuetlXeu+A==", + "dependencies": { + "@noble/curves": "^1.3.0", + "@noble/hashes": "^1.3.3", + "@polkadot/networks": "13.5.1", + "@polkadot/util": "13.5.1", + "@polkadot/wasm-crypto": "^7.4.1", + "@polkadot/wasm-util": "^7.4.1", + "@polkadot/x-bigint": "13.5.1", + "@polkadot/x-randomvalues": "13.5.1", + "@scure/base": "^1.1.7", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "13.5.1" + } + }, + "node_modules/@polkadot/wasm-bridge": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-7.4.1.tgz", + "integrity": "sha512-tdkJaV453tezBxhF39r4oeG0A39sPKGDJmN81LYLf+Fihb7astzwju+u75BRmDrHZjZIv00un3razJEWCxze6g==", + "dependencies": { + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/wasm-crypto": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-7.4.1.tgz", + "integrity": "sha512-kHN/kF7hYxm1y0WeFLWeWir6oTzvcFmR4N8fJJokR+ajYbdmrafPN+6iLgQVbhZnDdxyv9jWDuRRsDnBx8tPMQ==", + "dependencies": { + "@polkadot/wasm-bridge": "7.4.1", + "@polkadot/wasm-crypto-asmjs": "7.4.1", + "@polkadot/wasm-crypto-init": "7.4.1", + "@polkadot/wasm-crypto-wasm": "7.4.1", + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-asmjs": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.4.1.tgz", + "integrity": "sha512-pwU8QXhUW7IberyHJIQr37IhbB6DPkCG5FhozCiNTq4vFBsFPjm9q8aZh7oX1QHQaiAZa2m2/VjIVE+FHGbvHQ==", + "dependencies": { + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-init": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.4.1.tgz", + "integrity": "sha512-AVka33+f7MvXEEIGq5U0dhaA2SaXMXnxVCQyhJTaCnJ5bRDj0Xlm3ijwDEQUiaDql7EikbkkRtmlvs95eSUWYQ==", + "dependencies": { + "@polkadot/wasm-bridge": "7.4.1", + "@polkadot/wasm-crypto-asmjs": "7.4.1", + "@polkadot/wasm-crypto-wasm": "7.4.1", + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-wasm": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.4.1.tgz", + "integrity": "sha512-PE1OAoupFR0ZOV2O8tr7D1FEUAwaggzxtfs3Aa5gr+yxlSOaWUKeqsOYe1KdrcjmZVV3iINEAXxgrbzCmiuONg==", + "dependencies": { + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/wasm-util": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-7.4.1.tgz", + "integrity": "sha512-RAcxNFf3zzpkr+LX/ItAsvj+QyM56TomJ0xjUMo4wKkHjwsxkz4dWJtx5knIgQz/OthqSDMR59VNEycQeNuXzA==", + "dependencies": { + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/x-bigint": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-13.5.1.tgz", + "integrity": "sha512-5GiYznWm/GdCe9nQwL/EEVLXFqK2JZqcNnWC/r196lRujqKd24r90WPHYw18d9fsii/8J4DOKc8cCRfxjMBdCw==", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-fetch": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-13.5.1.tgz", + "integrity": "sha512-2qTvxMdxlAnyY2xOulm5ZazWFRegUB6xOX7yTBxSvuAXiYGecuiZa5NikCYl+nB8iZW4ZGraLFyt9otzJHL5cw==", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "node-fetch": "^3.3.2", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-global": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-13.5.1.tgz", + "integrity": "sha512-8A9dvyGmXtQf8jCqGSxa4R8JLh43K8T1//ht7UU6Bsv7we2svdQ+O1FXblwAnAHCcboYeyYqzrTwnRnQlyrdWQ==", + "dependencies": { + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-randomvalues": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-13.5.1.tgz", + "integrity": "sha512-FT/A8EWIBNACWfxo+fDzRrkmK8TQxgaZjtr5E+/i8MYqscHFqiX9PmbMuoGC1T4w+piihHU1JD8rLTip2K8NIw==", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "13.5.1", + "@polkadot/wasm-util": "*" + } + }, + "node_modules/@polkadot/x-textdecoder": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-13.5.1.tgz", + "integrity": "sha512-iInpeywdQDusB3fz7F+La74UQoTXC8F4CsmZYEoQeZekb6CoAgtLkQZhw7ckV5+MmscLeOvZCI1wYBRqCd+qqw==", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-textencoder": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-13.5.1.tgz", + "integrity": "sha512-2QS22Eqrsjo7BCMHnL0EGheflDXSW0xpI+Zi0ULvci4uzHK4ZUgfFtEzEFg1kbKZ8ShvRpkQbGzp8nJqwijjgQ==", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-ws": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-13.5.1.tgz", + "integrity": "sha512-z9ks9qd3G78nnXcMRQN9GXtJ5BRAwRaRCVngY/ot0o4dmOdPyiciyNPOC8lNWvXF8Z1zyUqkKWwzQ33DzPFCWQ==", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0", + "ws": "^8.18.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@scure/base": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.5.tgz", + "integrity": "sha512-9rE6EOVeIQzt5TSu4v+K523F8u6DhBsoZWPGKlnCshhlDhy0kJzUX4V+tr2dWmzF1GdekvThABoEQBGBQI7xZw==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@substrate/connect": { + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.8.11.tgz", + "integrity": "sha512-ofLs1PAO9AtDdPbdyTYj217Pe+lBfTLltdHDs3ds8no0BseoLeAGxpz1mHfi7zB4IxI3YyAiLjH6U8cw4pj4Nw==", + "deprecated": "versions below 1.x are no longer maintained", + "optional": true, + "dependencies": { + "@substrate/connect-extension-protocol": "^2.0.0", + "@substrate/connect-known-chains": "^1.1.5", + "@substrate/light-client-extension-helpers": "^1.0.0", + "smoldot": "2.0.26" + } + }, + "node_modules/@substrate/connect-extension-protocol": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@substrate/connect-extension-protocol/-/connect-extension-protocol-2.2.2.tgz", + "integrity": "sha512-t66jwrXA0s5Goq82ZtjagLNd7DPGCNjHeehRlE/gcJmJ+G56C0W+2plqOMRicJ8XGR1/YFnUSEqUFiSNbjGrAA==", + "optional": true + }, + "node_modules/@substrate/connect-known-chains": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/@substrate/connect-known-chains/-/connect-known-chains-1.10.2.tgz", + "integrity": "sha512-oDtEbKjVOog6lxOLDzmm+2BoLC/KUzkHkeUPqJ6a0VQ4CB/XuoS0u3RGhA/cZ+kfMJAyHCG2qupbzgs1bcd/Ow==", + "optional": true + }, + "node_modules/@substrate/light-client-extension-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@substrate/light-client-extension-helpers/-/light-client-extension-helpers-1.0.0.tgz", + "integrity": "sha512-TdKlni1mBBZptOaeVrKnusMg/UBpWUORNDv5fdCaJklP4RJiFOzBCrzC+CyVI5kQzsXBisZ+2pXm+rIjS38kHg==", + "optional": true, + "dependencies": { + "@polkadot-api/json-rpc-provider": "^0.0.1", + "@polkadot-api/json-rpc-provider-proxy": "^0.1.0", + "@polkadot-api/observable-client": "^0.3.0", + "@polkadot-api/substrate-client": "^0.1.2", + "@substrate/connect-extension-protocol": "^2.0.0", + "@substrate/connect-known-chains": "^1.1.5", + "rxjs": "^7.8.1" + }, + "peerDependencies": { + "smoldot": "2.x" + } + }, + "node_modules/@substrate/ss58-registry": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.51.0.tgz", + "integrity": "sha512-TWDurLiPxndFgKjVavCniytBIw+t4ViOi7TYp9h/D0NMmkEc9klFTo+827eyEJ0lELpqO207Ey7uGxUa+BS1jQ==" + }, + "node_modules/@types/bn.js": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz", + "integrity": "sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "22.15.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.24.tgz", + "integrity": "sha512-w9CZGm9RDjzTh/D+hFwlBJ3ziUaVw7oufKA3vOFSOZlzmW9AkZnfjPb+DLnrV6qtgL/LNmP0/2zBNCFHL3F0ng==", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/bn.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", + "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==" + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "node_modules/mock-socket": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.3.1.tgz", + "integrity": "sha512-qxBgB7Qa2sEQgHFjj0dSigq7fX4k6Saisd5Nelwp2q8mlbAFh5dHV9JTTlF8viYJLSSWgMCZFUom8PJcMNBoJw==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/nock": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.6.tgz", + "integrity": "sha512-o2zOYiCpzRqSzPj0Zt/dQ/DqZeYoaQ7TUonc/xUPjCGl9WeHpNbxgVvOquXYAaJzI0M9BXV3HTzG0p8IUAbBTQ==", + "dependencies": { + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "propagate": "^2.0.0" + }, + "engines": { + "node": ">= 10.13" + } + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/propagate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/scale-ts": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/scale-ts/-/scale-ts-1.6.1.tgz", + "integrity": "sha512-PBMc2AWc6wSEqJYBDPcyCLUj9/tMKnLX70jLOSndMtcUoLQucP/DM0vnQo1wJAYjTrQiq8iG9rD0q6wFzgjH7g==", + "optional": true + }, + "node_modules/smoldot": { + "version": "2.0.26", + "resolved": "https://registry.npmjs.org/smoldot/-/smoldot-2.0.26.tgz", + "integrity": "sha512-F+qYmH4z2s2FK+CxGj8moYcd1ekSIKH8ywkdqlOz88Dat35iB1DIYL11aILN46YSGMzQW/lbJNS307zBSDN5Ig==", + "optional": true, + "dependencies": { + "ws": "^8.8.1" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==" + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/ws": { + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + } + } +} diff --git a/tools/genesis-data/package.json b/tools/genesis-data/package.json new file mode 100644 index 0000000000..962540c5da --- /dev/null +++ b/tools/genesis-data/package.json @@ -0,0 +1,13 @@ +{ + "name": "genesis-data", + "version": "1.0.0", + "description": "Gets data from mainnet and outputs them in formats for use with local genesis", + "scripts": { + "schemas": "node schemas.mjs" + }, + "author": "", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/api": "^16.1.1" + } +} diff --git a/tools/genesis-data/schemas.mjs b/tools/genesis-data/schemas.mjs new file mode 100644 index 0000000000..a7f9e05e90 --- /dev/null +++ b/tools/genesis-data/schemas.mjs @@ -0,0 +1,17 @@ +// This small nodejs script will pull the schemas from mainnet and then output them in Genesis Schema format + +import { getSchemas } from "./getSchema.mjs"; + +const SOURCE_URL = "wss://1.rpc.frequency.xyz"; + +async function main() { + try { + await getSchemas(SOURCE_URL); + process.exit(0); + } catch (error) { + console.error("Error:", error); + process.exit(1); + } +} + +main(); diff --git a/tools/scripts/list-github-actions.sh b/tools/scripts/list-github-actions.sh new file mode 100755 index 0000000000..956b96819b --- /dev/null +++ b/tools/scripts/list-github-actions.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +# set -ex + +grep -o -r --no-filename --include=\*.yml "uses:.*" ./.github | \ + cut -d ":" -f 2 | tr -d " " | sort | uniq diff --git a/tools/scripts/pallet-info.sh b/tools/scripts/pallet-info.sh new file mode 100755 index 0000000000..47e53cfe94 --- /dev/null +++ b/tools/scripts/pallet-info.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +if [[ -z "$1" ]]; then + cat <<-EOF +Usage: $0 , + where: + is a node running on websocket port [wss|ws://websocket_provider:port] + For example ws://127.0.0.1:9944 +EOF + + exit 1 +fi + + +echo "checking for 🏭 subwasm and installing if needed..." +which subwasm || cargo install --locked --git https://github.com/chevdor/subwasm --tag v0.19.1 + +ws_provider=$1 + +pallets=$(subwasm metadata "${ws_provider}") + +echo "----Pallets----" +echo "${pallets}" +echo "" + +regex_for_pallet='^ - .*' +while IFS= read -r pallet; do + if [[ $pallet =~ $regex_for_pallet ]]; + then + pallet_name=$(echo $pallet | cut -d " " -f 3) + echo "----Pallet ${pallet_name}----" + pallet_data=$(subwasm metadata -m "${pallet_name}" "${ws_provider}") + echo -e "${pallet_data}" + echo "" + fi +done <<< "$pallets" diff --git a/tools/scripts/show-runtime-version.sh b/tools/scripts/show-runtime-version.sh new file mode 100755 index 0000000000..2557a3c2fe --- /dev/null +++ b/tools/scripts/show-runtime-version.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +# Quick script to output the runtime spec_version at a particular commit. + +# set -ex + +if [[ -z "$1" ]]; then + cat <<-EOF +Usage: $0 +EOF + + exit 1 +fi + +(git cat-file -p "${1}:runtime/frequency/src/lib.rs" | grep "spec_version:") 2>/dev/null \ +|| (git cat-file -p "${1}:runtime/mrc/src/lib.rs" | grep "spec_version:" ) diff --git a/tools/state-copy/README.md b/tools/state-copy/README.md new file mode 100644 index 0000000000..5d614ed03d --- /dev/null +++ b/tools/state-copy/README.md @@ -0,0 +1,15 @@ +# State Copy Tool + +Tools to help copy state from one Frequency Chain to another. + +## Testnet Schemas Match + +To maintain alignment with Mainnet, when a new schema is deployed on Mainnet, Testnet data and Dev Genesis are set to have those exact same schemas. + +1. In the Frequency codebase: `cd tools/state-copy` +2. `npm i` +3. Edit `schemas.mjs` + - Use the Testnet `DEST_URL`: `const DEST_URL = "wss://0.rpc.testnet.amplica.io";` + - Update the`const SUDO_URI = "//Alice";` to be the SUDO key for Testnet +4. `npm run schemas` +5. Remove the changes diff --git a/tools/state-copy/copy.mjs b/tools/state-copy/copy.mjs new file mode 100644 index 0000000000..72fa9a4fee --- /dev/null +++ b/tools/state-copy/copy.mjs @@ -0,0 +1,72 @@ +import { ApiPromise, WsProvider } from "@polkadot/api"; +import { Keyring } from "@polkadot/keyring"; + +const keyring = new Keyring({ type: "sr25519" }); + +async function getKeys(api, storageKey) { + const pageSize = 500; + const result = []; + let startKey = ""; + while (true) { + const page = await api.rpc.state.getKeysPaged(storageKey, pageSize, startKey); + result.push(...page.map((x) => x.toString())); + if (page.length === 0) { + break; + } + + startKey = page[page.length - 1].toString(); + } + return result; +} + +export async function copy(sourceUrl, destUrl, storageKey, sudoUri = "//Alice", filterKeys = []) { + // Connect to the state source + const sourceProvider = new WsProvider(sourceUrl); + const sourceApi = await ApiPromise.create({ provider: sourceProvider }); + + // Connect to destination source + const destProvider = new WsProvider(destUrl); + const destApi = await ApiPromise.create({ provider: destProvider }); + + console.log("Connected to both networks"); + + // Get all keys from the specified pallet + const keys = (await getKeys(sourceApi, storageKey)).filter((k) => !filterKeys.includes(k)); + console.log(`Found ${keys.length} keys under ${storageKey}...`); + + // Fetch values for all keys + const storageKV = await Promise.all( + keys.map(async (key) => { + const value = await sourceApi.rpc.state.getStorage(key); + return [key, value.toHex()]; + }), + ); + + console.log("Fetched all values", storageKV); + + const sudoAccount = keyring.createFromUri(sudoUri); + + // Prepare and send sudo.sudo(system.setStorage()) call + const sudoCall = destApi.tx.sudo.sudo(destApi.tx.system.setStorage(storageKV)); + + console.log("Submitting sudo call to set storage..."); + await new Promise(async (resolve, reject) => { + const unsub = await sudoCall.signAndSend(sudoAccount, ({ status, events }) => { + if (status.isInBlock || status.isFinalized) { + console.log( + `Block hash: ${(status.isInBlock && status.asInBlock) || (status.isFinalized && status.asFinalized)}`, + ); + const success = events.find((x) => destApi.events.system.ExtrinsicSuccess.is(x.event)); + const failure = events.find((x) => destApi.events.system.ExtrinsicFailed.is(x.event)); + unsub(); + if (success && !failure) { + console.log("State copy successful"); + resolve(); + } else { + console.error("State copy FAILED!"); + reject(); + } + } + }); + }); +} diff --git a/tools/state-copy/package-lock.json b/tools/state-copy/package-lock.json new file mode 100644 index 0000000000..938dfc1ddf --- /dev/null +++ b/tools/state-copy/package-lock.json @@ -0,0 +1,860 @@ +{ + "name": "state-copy", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "state-copy", + "version": "1.0.0", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/api": "^16.1.1", + "@polkadot/keyring": "^13.5.1" + } + }, + "node_modules/@noble/curves": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", + "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@polkadot-api/json-rpc-provider": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider/-/json-rpc-provider-0.0.1.tgz", + "integrity": "sha512-/SMC/l7foRjpykLTUTacIH05H3mr9ip8b5xxfwXlVezXrNVLp3Cv0GX6uItkKd+ZjzVPf3PFrDF2B2/HLSNESA==", + "optional": true + }, + "node_modules/@polkadot-api/json-rpc-provider-proxy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider-proxy/-/json-rpc-provider-proxy-0.1.0.tgz", + "integrity": "sha512-8GSFE5+EF73MCuLQm8tjrbCqlgclcHBSRaswvXziJ0ZW7iw3UEMsKkkKvELayWyBuOPa2T5i1nj6gFOeIsqvrg==", + "optional": true + }, + "node_modules/@polkadot-api/metadata-builders": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@polkadot-api/metadata-builders/-/metadata-builders-0.3.2.tgz", + "integrity": "sha512-TKpfoT6vTb+513KDzMBTfCb/ORdgRnsS3TDFpOhAhZ08ikvK+hjHMt5plPiAX/OWkm1Wc9I3+K6W0hX5Ab7MVg==", + "optional": true, + "dependencies": { + "@polkadot-api/substrate-bindings": "0.6.0", + "@polkadot-api/utils": "0.1.0" + } + }, + "node_modules/@polkadot-api/observable-client": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@polkadot-api/observable-client/-/observable-client-0.3.2.tgz", + "integrity": "sha512-HGgqWgEutVyOBXoGOPp4+IAq6CNdK/3MfQJmhCJb8YaJiaK4W6aRGrdQuQSTPHfERHCARt9BrOmEvTXAT257Ug==", + "optional": true, + "dependencies": { + "@polkadot-api/metadata-builders": "0.3.2", + "@polkadot-api/substrate-bindings": "0.6.0", + "@polkadot-api/utils": "0.1.0" + }, + "peerDependencies": { + "@polkadot-api/substrate-client": "0.1.4", + "rxjs": ">=7.8.0" + } + }, + "node_modules/@polkadot-api/substrate-bindings": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-bindings/-/substrate-bindings-0.6.0.tgz", + "integrity": "sha512-lGuhE74NA1/PqdN7fKFdE5C1gNYX357j1tWzdlPXI0kQ7h3kN0zfxNOpPUN7dIrPcOFZ6C0tRRVrBylXkI6xPw==", + "optional": true, + "dependencies": { + "@noble/hashes": "^1.3.1", + "@polkadot-api/utils": "0.1.0", + "@scure/base": "^1.1.1", + "scale-ts": "^1.6.0" + } + }, + "node_modules/@polkadot-api/substrate-client": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-client/-/substrate-client-0.1.4.tgz", + "integrity": "sha512-MljrPobN0ZWTpn++da9vOvt+Ex+NlqTlr/XT7zi9sqPtDJiQcYl+d29hFAgpaeTqbeQKZwz3WDE9xcEfLE8c5A==", + "optional": true, + "dependencies": { + "@polkadot-api/json-rpc-provider": "0.0.1", + "@polkadot-api/utils": "0.1.0" + } + }, + "node_modules/@polkadot-api/utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/utils/-/utils-0.1.0.tgz", + "integrity": "sha512-MXzWZeuGxKizPx2Xf/47wx9sr/uxKw39bVJUptTJdsaQn/TGq+z310mHzf1RCGvC1diHM8f593KrnDgc9oNbJA==", + "optional": true + }, + "node_modules/@polkadot/api": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-16.1.1.tgz", + "integrity": "sha512-atlnmcDjDZyoE9w460Rrve0LnRv9B0W1fuy1ay9vfBQ03ez3nwnoP4sP9ldYxcmU9QEs5/HTn6nvVSZXowCYKw==", + "dependencies": { + "@polkadot/api-augment": "16.1.1", + "@polkadot/api-base": "16.1.1", + "@polkadot/api-derive": "16.1.1", + "@polkadot/keyring": "^13.5.1", + "@polkadot/rpc-augment": "16.1.1", + "@polkadot/rpc-core": "16.1.1", + "@polkadot/rpc-provider": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-augment": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/types-create": "16.1.1", + "@polkadot/types-known": "16.1.1", + "@polkadot/util": "^13.5.1", + "@polkadot/util-crypto": "^13.5.1", + "eventemitter3": "^5.0.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/api-augment": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-16.1.1.tgz", + "integrity": "sha512-VTj03C1iJEZ//IBKa4sRxfz3WObygXtyOqYCRMJEtH74roIZvJpIjhmZwJqGD8NijPO3mgZOTzaLzjoeLF1jMw==", + "dependencies": { + "@polkadot/api-base": "16.1.1", + "@polkadot/rpc-augment": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-augment": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/api-base": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-16.1.1.tgz", + "integrity": "sha512-PUpc0Ir7ru51RuVhZMmbleicKMI43s5T1FHhOHmtzbMUTnwMbXtWHKzIfkHxqXJrg10EwO8mzcymJeHbA1TR+g==", + "dependencies": { + "@polkadot/rpc-core": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/util": "^13.5.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/api-derive": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-16.1.1.tgz", + "integrity": "sha512-sC0j67RzDRwe3sHw0trDFz7tfFu68+3pQT89ash9TUVa8AD0i4USIirg4dNVWt7CrK9eW3Q4edqs1p6RXurz7g==", + "dependencies": { + "@polkadot/api": "16.1.1", + "@polkadot/api-augment": "16.1.1", + "@polkadot/api-base": "16.1.1", + "@polkadot/rpc-core": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "@polkadot/util-crypto": "^13.5.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/keyring": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-13.5.1.tgz", + "integrity": "sha512-dEl679aoMv9gOzWJA13Jb2HUGqRi6/zKjEtg+qbiEryCSjUqfNKyO8liuwMFy0VP3qxJb1FkxNe6MnG1NwbU5Q==", + "dependencies": { + "@polkadot/util": "13.5.1", + "@polkadot/util-crypto": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "13.5.1", + "@polkadot/util-crypto": "13.5.1" + } + }, + "node_modules/@polkadot/networks": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-13.5.1.tgz", + "integrity": "sha512-w5HS209pHZhqJ7AVqJqFApO4OcwlxjfQ7mp2dE/vL5qA5RnsEx/3fBYJ6h3z/k5Ggac0+Zl1vMZAF1gW8S/F9A==", + "dependencies": { + "@polkadot/util": "13.5.1", + "@substrate/ss58-registry": "^1.51.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/rpc-augment": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-16.1.1.tgz", + "integrity": "sha512-o0CgmzQ06qV0nKlKPccumOmPsZ3f2VeQp2u8tndLOLG5A7C9k+XML92ldJHN2Dj+XKHLhjHG4syPEBET7ugZCg==", + "dependencies": { + "@polkadot/rpc-core": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/rpc-core": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-16.1.1.tgz", + "integrity": "sha512-BUfY6868kJhPXCyQuRUg644pWGhynuWvPvglJXsOf+A3pRhKm+cNWEjs8puQmUc38adl6QocBeUJHfTnfrtKPg==", + "dependencies": { + "@polkadot/rpc-augment": "16.1.1", + "@polkadot/rpc-provider": "16.1.1", + "@polkadot/types": "16.1.1", + "@polkadot/util": "^13.5.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/rpc-provider": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-16.1.1.tgz", + "integrity": "sha512-LH22P6OSw304pwvdpjuxc6ARtvrUUvkBF02n4FsJBo555y9d+2dcA5CA4FLI8WNvOXf3hOLwxz/UPxA7VATksw==", + "dependencies": { + "@polkadot/keyring": "^13.5.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-support": "16.1.1", + "@polkadot/util": "^13.5.1", + "@polkadot/util-crypto": "^13.5.1", + "@polkadot/x-fetch": "^13.5.1", + "@polkadot/x-global": "^13.5.1", + "@polkadot/x-ws": "^13.5.1", + "eventemitter3": "^5.0.1", + "mock-socket": "^9.3.1", + "nock": "^13.5.5", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@substrate/connect": "0.8.11" + } + }, + "node_modules/@polkadot/types": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-16.1.1.tgz", + "integrity": "sha512-edEKvnCrWoPjW2sRUdER4gm8zm+gilVhZXqAtYH0gHJkBzbhCXZ5M27E62ztR1at9XyHDsTUeuq51ELHOUbbFQ==", + "dependencies": { + "@polkadot/keyring": "^13.5.1", + "@polkadot/types-augment": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/types-create": "16.1.1", + "@polkadot/util": "^13.5.1", + "@polkadot/util-crypto": "^13.5.1", + "rxjs": "^7.8.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-augment": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-16.1.1.tgz", + "integrity": "sha512-Ozh7nEyAnyHK9x1CnRYlG/rnarvuauAIbvUljtA7f/3RI570kRTpeOR83QkDWdaLywno96A4zdFXBfI0nmq1Yw==", + "dependencies": { + "@polkadot/types": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-codec": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-16.1.1.tgz", + "integrity": "sha512-REcSkOfxFGPJWEbuCIr5EA0argnZwYVYkE14f97XVM9rV36/FEyu1al47fSjp8iHA3e8Fsd+V+WTZRwlUa51qA==", + "dependencies": { + "@polkadot/util": "^13.5.1", + "@polkadot/x-bigint": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-create": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-16.1.1.tgz", + "integrity": "sha512-dpd5HKRfNQlDYMtMdofrhr99O7q8EWkqZyTadFuTYyd7LECb9FUD8nO6RbcmpXYA9F3r5g/EwvsmZFZaQW9LqA==", + "dependencies": { + "@polkadot/types-codec": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-known": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-16.1.1.tgz", + "integrity": "sha512-Qp6C+wppqvooDFU2T0Ynmgo72bQOUkY6dLVoGmZWq/OO6hXuLCg8SAncJP/CzcueEA2/Anzk3DQbfZVlBEr6Cg==", + "dependencies": { + "@polkadot/networks": "^13.5.1", + "@polkadot/types": "16.1.1", + "@polkadot/types-codec": "16.1.1", + "@polkadot/types-create": "16.1.1", + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/types-support": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-16.1.1.tgz", + "integrity": "sha512-pVEBVaXuIkhuMX6J4Cn+cGcLOPsz2qu4EuZXwwA/ioMIICclh+7q6+fOfInogIgmbcYHZFDDsyXG3wRw7ThZkA==", + "dependencies": { + "@polkadot/util": "^13.5.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/util": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-13.5.1.tgz", + "integrity": "sha512-Anu4fsmMconvU+WXGFESNQp4qFjbvZnS4zD4I54W5gW70klrmrdfP2jGYhejVkm0Pf43RREN63G7Rew8+sXUmw==", + "dependencies": { + "@polkadot/x-bigint": "13.5.1", + "@polkadot/x-global": "13.5.1", + "@polkadot/x-textdecoder": "13.5.1", + "@polkadot/x-textencoder": "13.5.1", + "@types/bn.js": "^5.1.6", + "bn.js": "^5.2.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/util-crypto": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-13.5.1.tgz", + "integrity": "sha512-HIuTRpkulIzmgCU+GIXbEEkVbikvrK+5v8XZ7Ll45m1dLsxnrJeEbNsCLUwI/+D9Jd0iF3+T12GybuetlXeu+A==", + "dependencies": { + "@noble/curves": "^1.3.0", + "@noble/hashes": "^1.3.3", + "@polkadot/networks": "13.5.1", + "@polkadot/util": "13.5.1", + "@polkadot/wasm-crypto": "^7.4.1", + "@polkadot/wasm-util": "^7.4.1", + "@polkadot/x-bigint": "13.5.1", + "@polkadot/x-randomvalues": "13.5.1", + "@scure/base": "^1.1.7", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "13.5.1" + } + }, + "node_modules/@polkadot/wasm-bridge": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-7.4.1.tgz", + "integrity": "sha512-tdkJaV453tezBxhF39r4oeG0A39sPKGDJmN81LYLf+Fihb7astzwju+u75BRmDrHZjZIv00un3razJEWCxze6g==", + "dependencies": { + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/wasm-crypto": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-7.4.1.tgz", + "integrity": "sha512-kHN/kF7hYxm1y0WeFLWeWir6oTzvcFmR4N8fJJokR+ajYbdmrafPN+6iLgQVbhZnDdxyv9jWDuRRsDnBx8tPMQ==", + "dependencies": { + "@polkadot/wasm-bridge": "7.4.1", + "@polkadot/wasm-crypto-asmjs": "7.4.1", + "@polkadot/wasm-crypto-init": "7.4.1", + "@polkadot/wasm-crypto-wasm": "7.4.1", + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-asmjs": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.4.1.tgz", + "integrity": "sha512-pwU8QXhUW7IberyHJIQr37IhbB6DPkCG5FhozCiNTq4vFBsFPjm9q8aZh7oX1QHQaiAZa2m2/VjIVE+FHGbvHQ==", + "dependencies": { + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-init": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.4.1.tgz", + "integrity": "sha512-AVka33+f7MvXEEIGq5U0dhaA2SaXMXnxVCQyhJTaCnJ5bRDj0Xlm3ijwDEQUiaDql7EikbkkRtmlvs95eSUWYQ==", + "dependencies": { + "@polkadot/wasm-bridge": "7.4.1", + "@polkadot/wasm-crypto-asmjs": "7.4.1", + "@polkadot/wasm-crypto-wasm": "7.4.1", + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-wasm": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.4.1.tgz", + "integrity": "sha512-PE1OAoupFR0ZOV2O8tr7D1FEUAwaggzxtfs3Aa5gr+yxlSOaWUKeqsOYe1KdrcjmZVV3iINEAXxgrbzCmiuONg==", + "dependencies": { + "@polkadot/wasm-util": "7.4.1", + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/wasm-util": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-7.4.1.tgz", + "integrity": "sha512-RAcxNFf3zzpkr+LX/ItAsvj+QyM56TomJ0xjUMo4wKkHjwsxkz4dWJtx5knIgQz/OthqSDMR59VNEycQeNuXzA==", + "dependencies": { + "tslib": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/x-bigint": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-13.5.1.tgz", + "integrity": "sha512-5GiYznWm/GdCe9nQwL/EEVLXFqK2JZqcNnWC/r196lRujqKd24r90WPHYw18d9fsii/8J4DOKc8cCRfxjMBdCw==", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-fetch": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-13.5.1.tgz", + "integrity": "sha512-2qTvxMdxlAnyY2xOulm5ZazWFRegUB6xOX7yTBxSvuAXiYGecuiZa5NikCYl+nB8iZW4ZGraLFyt9otzJHL5cw==", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "node-fetch": "^3.3.2", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-global": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-13.5.1.tgz", + "integrity": "sha512-8A9dvyGmXtQf8jCqGSxa4R8JLh43K8T1//ht7UU6Bsv7we2svdQ+O1FXblwAnAHCcboYeyYqzrTwnRnQlyrdWQ==", + "dependencies": { + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-randomvalues": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-13.5.1.tgz", + "integrity": "sha512-FT/A8EWIBNACWfxo+fDzRrkmK8TQxgaZjtr5E+/i8MYqscHFqiX9PmbMuoGC1T4w+piihHU1JD8rLTip2K8NIw==", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "13.5.1", + "@polkadot/wasm-util": "*" + } + }, + "node_modules/@polkadot/x-textdecoder": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-13.5.1.tgz", + "integrity": "sha512-iInpeywdQDusB3fz7F+La74UQoTXC8F4CsmZYEoQeZekb6CoAgtLkQZhw7ckV5+MmscLeOvZCI1wYBRqCd+qqw==", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-textencoder": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-13.5.1.tgz", + "integrity": "sha512-2QS22Eqrsjo7BCMHnL0EGheflDXSW0xpI+Zi0ULvci4uzHK4ZUgfFtEzEFg1kbKZ8ShvRpkQbGzp8nJqwijjgQ==", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polkadot/x-ws": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-13.5.1.tgz", + "integrity": "sha512-z9ks9qd3G78nnXcMRQN9GXtJ5BRAwRaRCVngY/ot0o4dmOdPyiciyNPOC8lNWvXF8Z1zyUqkKWwzQ33DzPFCWQ==", + "dependencies": { + "@polkadot/x-global": "13.5.1", + "tslib": "^2.8.0", + "ws": "^8.18.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@scure/base": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.5.tgz", + "integrity": "sha512-9rE6EOVeIQzt5TSu4v+K523F8u6DhBsoZWPGKlnCshhlDhy0kJzUX4V+tr2dWmzF1GdekvThABoEQBGBQI7xZw==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@substrate/connect": { + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.8.11.tgz", + "integrity": "sha512-ofLs1PAO9AtDdPbdyTYj217Pe+lBfTLltdHDs3ds8no0BseoLeAGxpz1mHfi7zB4IxI3YyAiLjH6U8cw4pj4Nw==", + "deprecated": "versions below 1.x are no longer maintained", + "optional": true, + "dependencies": { + "@substrate/connect-extension-protocol": "^2.0.0", + "@substrate/connect-known-chains": "^1.1.5", + "@substrate/light-client-extension-helpers": "^1.0.0", + "smoldot": "2.0.26" + } + }, + "node_modules/@substrate/connect-extension-protocol": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@substrate/connect-extension-protocol/-/connect-extension-protocol-2.2.2.tgz", + "integrity": "sha512-t66jwrXA0s5Goq82ZtjagLNd7DPGCNjHeehRlE/gcJmJ+G56C0W+2plqOMRicJ8XGR1/YFnUSEqUFiSNbjGrAA==", + "optional": true + }, + "node_modules/@substrate/connect-known-chains": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/@substrate/connect-known-chains/-/connect-known-chains-1.10.2.tgz", + "integrity": "sha512-oDtEbKjVOog6lxOLDzmm+2BoLC/KUzkHkeUPqJ6a0VQ4CB/XuoS0u3RGhA/cZ+kfMJAyHCG2qupbzgs1bcd/Ow==", + "optional": true + }, + "node_modules/@substrate/light-client-extension-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@substrate/light-client-extension-helpers/-/light-client-extension-helpers-1.0.0.tgz", + "integrity": "sha512-TdKlni1mBBZptOaeVrKnusMg/UBpWUORNDv5fdCaJklP4RJiFOzBCrzC+CyVI5kQzsXBisZ+2pXm+rIjS38kHg==", + "optional": true, + "dependencies": { + "@polkadot-api/json-rpc-provider": "^0.0.1", + "@polkadot-api/json-rpc-provider-proxy": "^0.1.0", + "@polkadot-api/observable-client": "^0.3.0", + "@polkadot-api/substrate-client": "^0.1.2", + "@substrate/connect-extension-protocol": "^2.0.0", + "@substrate/connect-known-chains": "^1.1.5", + "rxjs": "^7.8.1" + }, + "peerDependencies": { + "smoldot": "2.x" + } + }, + "node_modules/@substrate/ss58-registry": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.51.0.tgz", + "integrity": "sha512-TWDurLiPxndFgKjVavCniytBIw+t4ViOi7TYp9h/D0NMmkEc9klFTo+827eyEJ0lELpqO207Ey7uGxUa+BS1jQ==" + }, + "node_modules/@types/bn.js": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz", + "integrity": "sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "22.15.23", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.23.tgz", + "integrity": "sha512-7Ec1zaFPF4RJ0eXu1YT/xgiebqwqoJz8rYPDi/O2BcZ++Wpt0Kq9cl0eg6NN6bYbPnR67ZLo7St5Q3UK0SnARw==", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/bn.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", + "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==" + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "node_modules/mock-socket": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.3.1.tgz", + "integrity": "sha512-qxBgB7Qa2sEQgHFjj0dSigq7fX4k6Saisd5Nelwp2q8mlbAFh5dHV9JTTlF8viYJLSSWgMCZFUom8PJcMNBoJw==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/nock": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.6.tgz", + "integrity": "sha512-o2zOYiCpzRqSzPj0Zt/dQ/DqZeYoaQ7TUonc/xUPjCGl9WeHpNbxgVvOquXYAaJzI0M9BXV3HTzG0p8IUAbBTQ==", + "dependencies": { + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "propagate": "^2.0.0" + }, + "engines": { + "node": ">= 10.13" + } + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/propagate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/scale-ts": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/scale-ts/-/scale-ts-1.6.1.tgz", + "integrity": "sha512-PBMc2AWc6wSEqJYBDPcyCLUj9/tMKnLX70jLOSndMtcUoLQucP/DM0vnQo1wJAYjTrQiq8iG9rD0q6wFzgjH7g==", + "optional": true + }, + "node_modules/smoldot": { + "version": "2.0.26", + "resolved": "https://registry.npmjs.org/smoldot/-/smoldot-2.0.26.tgz", + "integrity": "sha512-F+qYmH4z2s2FK+CxGj8moYcd1ekSIKH8ywkdqlOz88Dat35iB1DIYL11aILN46YSGMzQW/lbJNS307zBSDN5Ig==", + "optional": true, + "dependencies": { + "ws": "^8.8.1" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==" + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/ws": { + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + } + } +} diff --git a/tools/state-copy/package.json b/tools/state-copy/package.json new file mode 100644 index 0000000000..2d3de65b99 --- /dev/null +++ b/tools/state-copy/package.json @@ -0,0 +1,14 @@ +{ + "name": "state-copy", + "version": "1.0.0", + "description": "Copies state from one chain and sudo sets it on another", + "scripts": { + "schemas": "node schemas.mjs" + }, + "author": "", + "license": "Apache-2.0", + "dependencies": { + "@polkadot/api": "^16.1.1", + "@polkadot/keyring": "^13.5.1" + } +} diff --git a/tools/state-copy/remove.mjs b/tools/state-copy/remove.mjs new file mode 100644 index 0000000000..5ab70cdefc --- /dev/null +++ b/tools/state-copy/remove.mjs @@ -0,0 +1,58 @@ +import { ApiPromise, WsProvider } from "@polkadot/api"; +import { Keyring } from "@polkadot/keyring"; + +const keyring = new Keyring({ type: "sr25519" }); + +async function getKeys(api, storageKey) { + const pageSize = 500; + const result = []; + let startKey = ""; + while (true) { + const page = await api.rpc.state.getKeysPaged(storageKey, pageSize, startKey); + result.push(...page.map((x) => x.toString())); + if (page.length === 0) { + break; + } + + startKey = page[page.length - 1].toString(); + } + return result; +} + +export async function removeStorageKeys(destUrl, storageKey, sudoUri = "//Alice", filterKeys = []) { + // Connect to destination source + const destProvider = new WsProvider(destUrl); + const destApi = await ApiPromise.create({ provider: destProvider }); + + console.log("Connected to destination network"); + + // Get all keys from the specified storage key prefix + const keys = (await getKeys(destApi, storageKey)).filter((k) => !filterKeys.includes(k)); + console.log(`Found ${keys.length} keys under ${storageKey}...`); + + const sudoAccount = keyring.createFromUri(sudoUri); + + // Prepare and send sudo.sudo(system.killStorage()) call + const sudoCall = destApi.tx.sudo.sudo(destApi.tx.system.killStorage(keys)); + + console.log("Submitting sudo call to remove storage..."); + await new Promise(async (resolve, reject) => { + const unsub = await sudoCall.signAndSend(sudoAccount, ({ status, events }) => { + if (status.isInBlock || status.isFinalized) { + console.log( + `Block hash: ${(status.isInBlock && status.asInBlock) || (status.isFinalized && status.asFinalized)}`, + ); + const success = events.find((x) => destApi.events.system.ExtrinsicSuccess.is(x.event)); + const failure = events.find((x) => destApi.events.system.ExtrinsicFailed.is(x.event)); + unsub(); + if (success && !failure) { + console.log("State removal successful"); + resolve(); + } else { + console.error("State removal FAILED!"); + reject(); + } + } + }); + }); +} diff --git a/tools/state-copy/schemas.mjs b/tools/state-copy/schemas.mjs new file mode 100644 index 0000000000..2b26956943 --- /dev/null +++ b/tools/state-copy/schemas.mjs @@ -0,0 +1,38 @@ +// This small nodejs script will pull the schema pallet storage from mainnet and then load it onto another chain. +// +// WARNING: This will move ALL storage values, so if there are some you do NOT want, use the FILTER_OUT or another setup. + +import { copy } from "./copy.mjs"; + +// Set up sudo account (assumes //Alice has sudo access) +const SUDO_URI = "//Alice"; + +// Testnet +// const DEST_URL = "wss://0.rpc.testnet.amplica.io"; +// const SOURCE_URL = "wss://0.rpc.testnet.amplica.io"; + +// Localhost +const DEST_URL = "ws://localhost:9944"; + +// Mainnet +const SOURCE_URL = "wss://1.rpc.frequency.xyz"; +const STORAGE_KEY = "0xeec6f3c13d26ae2507c99b6751e19e76"; +const FILTER_OUT = [ + "0xeec6f3c13d26ae2507c99b6751e19e76d5d9c370c6c8aee1116ee09d6811b0d5", // governanceSchemaModelMaxBytes + "0xeec6f3c13d26ae2507c99b6751e19e764e7b9012096b41c4eb3aaf947f6ea429", // palletVersion + // Comment this out to INCLUDE setting the currentSchemaIdentifierMaximum from the SOURCE + "0xeec6f3c13d26ae2507c99b6751e19e765b81a4f27a1e406724e3a53d909f29cd", // currentSchemaIdentifierMaximum +]; + +async function main() { + try { + await copy(SOURCE_URL, DEST_URL, STORAGE_KEY, SUDO_URI, FILTER_OUT); + + process.exit(0); + } catch (error) { + console.error("Error:", error); + process.exit(1); + } +} + +main();